diff --git a/dist_plainjs/manually_maintained_types.d.ts b/dist_plainjs/manually_maintained_types.d.ts index e89d61d70..661421614 100644 --- a/dist_plainjs/manually_maintained_types.d.ts +++ b/dist_plainjs/manually_maintained_types.d.ts @@ -21,6 +21,7 @@ declare global { ts4nfdiGateway: boolean; singleSuggestionRow?: boolean; showApiSource?: boolean; + subTreeIris?: string; } )=>void, createDataContent:(props:{ diff --git a/dist_plainjs/terminology-service-suite.js b/dist_plainjs/terminology-service-suite.js index 1619b8259..ce94e15b7 100644 --- a/dist_plainjs/terminology-service-suite.js +++ b/dist_plainjs/terminology-service-suite.js @@ -54667,6 +54667,11 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return url; } const _encode = options && options.encode || encode2; + if (utils_default.isFunction(options)) { + options = { + serialize: options + }; + } const serializeFn = options && options.serialize; let serializedParams; if (serializeFn) { @@ -55399,45 +55404,13 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); var asyncDecorator = (fn) => (...args) => utils_default.asap(() => fn(...args)); // node_modules/axios/lib/helpers/isURLSameOrigin.js - var isURLSameOrigin_default = platform_default.hasStandardBrowserEnv ? ( - // Standard browser envs have full support of the APIs needed to test - // whether the request URL is of the same origin as current location. - function standardBrowserEnv() { - const msie = platform_default.navigator && /(msie|trident)/i.test(platform_default.navigator.userAgent); - const urlParsingNode = document.createElement("a"); - let originURL; - function resolveURL(url) { - let href = url; - if (msie) { - urlParsingNode.setAttribute("href", href); - href = urlParsingNode.href; - } - urlParsingNode.setAttribute("href", href); - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, "") : "", - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, "") : "", - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, "") : "", - hostname: urlParsingNode.hostname, - port: urlParsingNode.port, - pathname: urlParsingNode.pathname.charAt(0) === "/" ? urlParsingNode.pathname : "/" + urlParsingNode.pathname - }; - } - originURL = resolveURL(window.location.href); - return function isURLSameOrigin(requestURL) { - const parsed = utils_default.isString(requestURL) ? resolveURL(requestURL) : requestURL; - return parsed.protocol === originURL.protocol && parsed.host === originURL.host; - }; - }() - ) : ( - // Non standard browser envs (web workers, react-native) lack needed support. - function nonStandardBrowserEnv() { - return function isURLSameOrigin() { - return true; - }; - }() - ); + var isURLSameOrigin_default = platform_default.hasStandardBrowserEnv ? ((origin2, isMSIE) => (url) => { + url = new URL(url, platform_default.origin); + return origin2.protocol === url.protocol && origin2.host === url.host && (isMSIE || origin2.port === url.port); + })( + new URL(platform_default.origin), + platform_default.navigator && /(msie|trident)/i.test(platform_default.navigator.userAgent) + ) : () => true; // node_modules/axios/lib/helpers/cookies.js var cookies_default = platform_default.hasStandardBrowserEnv ? ( @@ -55495,7 +55468,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); function mergeConfig(config1, config2) { config2 = config2 || {}; const config = {}; - function getMergedValue(target, source, caseless) { + function getMergedValue(target, source, prop, caseless) { if (utils_default.isPlainObject(target) && utils_default.isPlainObject(source)) { return utils_default.merge.call({ caseless }, target, source); } else if (utils_default.isPlainObject(source)) { @@ -55505,11 +55478,11 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } return source; } - function mergeDeepProperties(a, b, caseless) { + function mergeDeepProperties(a, b, prop, caseless) { if (!utils_default.isUndefined(b)) { - return getMergedValue(a, b, caseless); + return getMergedValue(a, b, prop, caseless); } else if (!utils_default.isUndefined(a)) { - return getMergedValue(void 0, a, caseless); + return getMergedValue(void 0, a, prop, caseless); } } function valueFromConfig2(a, b) { @@ -55560,7 +55533,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); socketPath: defaultToConfig2, responseEncoding: defaultToConfig2, validateStatus: mergeDirectKeys, - headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true) + headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true) }; utils_default.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { const merge4 = mergeMap[prop] || mergeDeepProperties; @@ -56107,7 +56080,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } // node_modules/axios/lib/env/data.js - var VERSION = "1.7.7"; + var VERSION = "1.7.8"; // node_modules/axios/lib/helpers/validator.js var validators = {}; @@ -56140,6 +56113,12 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return validator ? validator(value2, opt, opts) : true; }; }; + validators.spelling = function spelling(correctSpelling) { + return (value2, opt) => { + console.warn(`${opt} is likely a misspelling of ${correctSpelling}`); + return true; + }; + }; function assertOptions(options, schema, allowUnknown) { if (typeof options !== "object") { throw new AxiosError_default("options must be an object", AxiosError_default.ERR_BAD_OPTION_VALUE); @@ -56190,8 +56169,8 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return await this._request(configOrUrl, config); } catch (err) { if (err instanceof Error) { - let dummy; - Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : dummy = new Error(); + let dummy = {}; + Error.captureStackTrace ? Error.captureStackTrace(dummy) : dummy = new Error(); const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, "") : ""; try { if (!err.stack) { @@ -56233,6 +56212,10 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }, true); } } + validator_default.assertOptions(config, { + baseUrl: validators2.spelling("baseURL"), + withXsrfToken: validators2.spelling("withXSRFToken") + }, true); config.method = (config.method || this.defaults.method || "get").toLowerCase(); let contextHeaders = headers && utils_default.merge( headers.common, @@ -56680,6 +56663,9 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); function isEuiLinkColor(str) { return ["primary", "subdued", "success", "accent", "danger", "warning", "text", "ghost"].includes(str); } + function isEuiButtonColor(str) { + return ["text", "accent", "primary", "success", "warning", "danger"].includes(str); + } function getErrorMessageToDisplay(error, messagePlaceholder = "information") { const error_msg = error.message; if (error_msg === "Response contains 0 elements") { @@ -57848,8 +57834,10 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); const parChildRel = []; for (const child of children) { this.entitiesData.set(child.iri, child); - const parRelation = child.parents.filter((par) => par.value == nodeToExpand.entityData.iri); - parChildRel.push({ childIri: child.iri, childRelationToParent: parRelation.length > 0 && parRelation[0].getMetadata() ? parRelation[0].getMetadata()["childRelationToParent"] : void 0 }); + if (child.parents) { + const parRelation = child.parents.filter((par) => par.value == nodeToExpand.entityData.iri); + parChildRel.push({ childIri: child.iri, childRelationToParent: parRelation.length > 0 && parRelation[0].getMetadata() ? parRelation[0].getMetadata()["childRelationToParent"] : void 0 }); + } } this.parentChildRelations.set(nodeToExpand.entityData.iri, parChildRel); } @@ -58399,6 +58387,9 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); case "class": extractKey = "terms"; break; + case "term": + extractKey = "terms"; + break; case "property": extractKey = "properties"; break; @@ -58613,8 +58604,10 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); const parChildRel = []; for (const child of children) { entitiesData.set(child.iri, child); - const parRelation = child.parents.filter((par) => par.value == entityData.iri); - parChildRel.push({ childIri: child.iri, childRelationToParent: parRelation.length > 0 && parRelation[0].getMetadata() ? parRelation[0].getMetadata()["childRelationToParent"] : void 0 }); + if (child.parents) { + const parRelation = child.parents.filter((par) => par.value == entityData.iri); + parChildRel.push({ childIri: child.iri, childRelationToParent: parRelation.length > 0 && parRelation[0].getMetadata() ? parRelation[0].getMetadata()["childRelationToParent"] : void 0 }); + } } parentChildRelations.set(entityData.iri, parChildRel); allChildrenPresent.add(entityData.iri); @@ -58635,17 +58628,19 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } } else { for (const entityData of entities) { - const parents = entityData.parents.filter((parentReified) => !isTop(parentReified.value)); - if (entityData.iri == mainEntity?.getIri() && isIndividualTypeName(entityType || mainEntity.getType())) { - for (const parentReified of parents) { - if (parentChildRelations.has(parentReified.value)) { - parentChildRelations.get(parentReified.value)?.push({ childIri: entityData.iri, childRelationToParent: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }); + if (entityData.parents) { + const parents = entityData.parents.filter((parentReified) => !isTop(parentReified.value)); + if (entityData.iri == mainEntity?.getIri() && isIndividualTypeName(entityType || mainEntity.getType())) { + for (const parentReified of parents) { + if (parentChildRelations.has(parentReified.value)) { + parentChildRelations.get(parentReified.value)?.push({ childIri: entityData.iri, childRelationToParent: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }); + } } - } - } else { - for (const parentReified of parents) { - if (parentChildRelations.has(parentReified.value)) { - parentChildRelations.get(parentReified.value)?.push({ childIri: entityData.iri, childRelationToParent: parentReified.getMetadata() ? parentReified.getMetadata()["childRelationToParent"] : void 0 }); + } else { + for (const parentReified of parents) { + if (parentChildRelations.has(parentReified.value)) { + parentChildRelations.get(parentReified.value)?.push({ childIri: entityData.iri, childRelationToParent: parentReified.getMetadata() ? parentReified.getMetadata()["childRelationToParent"] : void 0 }); + } } } } @@ -58662,9 +58657,11 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } } else { for (const entityData of entities) { - const parents = entityData.parents.filter((parentReified) => !isTop(parentReified.value)); - if (parents.length == 0) - rootEntities.push(entityData.iri); + if (entityData.parents) { + const parents = entityData.parents.filter((parentReified) => !isTop(parentReified.value)); + if (parents.length == 0) + rootEntities.push(entityData.iri); + } } } function createTreeNode(entityData, cycleCheck2, childRelationToParent) { @@ -128357,6 +128354,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); placeholder, singleSelection, singleSuggestionRow, + subTreeIris, ts4nfdiGateway = false, showApiSource = true, ...rest @@ -128367,6 +128365,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); const [searchValue, setSearchValue] = (0, import_react844.useState)(""); const [options, setOptions] = (0, import_react844.useState)([]); const [selectedOptions, setSelectedOptions] = (0, import_react844.useState)([]); + const updatedParameter = subTreeIris ? parameter + `&childrenOf=${subTreeIris}` : parameter; const renderOption = (option, searchValue2) => { const { label, value: value2 } = option; const dotColorIndex = visColorsBehindText.indexOf(value2.type === "class" ? visColorsBehindText[5] : value2.type === "individual" ? visColorsBehindText[3] : value2.type === "property" ? visColorsBehindText[1] : ""); @@ -128445,7 +128444,7 @@ Description: ${value2.description}`; { query: option.iri }, void 0, void 0, - parameter, + updatedParameter, ts4nfdiGateway ).then((response) => { if (response) { @@ -128509,7 +128508,7 @@ Description: ${value2.description}`; { query: searchValue }, void 0, void 0, - parameter, + updatedParameter, ts4nfdiGateway ).then((response) => { if (response) { @@ -128576,7 +128575,7 @@ Description: ${value2.description}`; ); }, [selectedOptions]); function generateDisplayLabel(item) { - return item.label + " (" + item.ontology_name.toUpperCase() + " " + item.short_form + ")"; + return item.getLabel() + " (" + item.getOntologyId().toUpperCase() + " " + item.getShortForm() + ")"; } function onChangeHandler(options2) { setSelectedOptions(options2); @@ -128623,7 +128622,7 @@ Description: ${value2.description}`; } function WrappedAutocompleteWidget(props) { const queryClient = new QueryClient(); - return /* @__PURE__ */ import_react844.default.createElement(QueryClientProvider, { client: queryClient }, /* @__PURE__ */ import_react844.default.createElement( + return /* @__PURE__ */ import_react844.default.createElement(EuiProvider, { colorMode: "light" }, /* @__PURE__ */ import_react844.default.createElement(QueryClientProvider, { client: queryClient }, /* @__PURE__ */ import_react844.default.createElement( AutocompleteWidget, { api: props.api, @@ -128636,9 +128635,10 @@ Description: ${value2.description}`; allowCustomTerms: props.allowCustomTerms, ts4nfdiGateway: props.ts4nfdiGateway, singleSuggestionRow: props.singleSuggestionRow, - showApiSource: props.showApiSource + showApiSource: props.showApiSource, + subTreeIris: props.subTreeIris } - )); + ))); } // src/components/widgets/DataContentWidget/DataContentWidget.tsx @@ -129018,20 +129018,34 @@ Description: ${value2.description}`; return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, entity2.getLabel() && /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "Label:"), entity2.getLabel()), /* @__PURE__ */ import_react847.default.createElement(EuiSpacer, null))); } function getSynonymsSection(entity2) { - return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, entity2.getSynonyms().length > 0 && /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "Synonyms:"), entity2.getSynonyms().length > 1 ? /* @__PURE__ */ import_react847.default.createElement("ul", null, entity2.getSynonyms().map((synonym) => { + return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, entity2.getSynonyms().length > 0 && /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "Synonyms:"), entity2.getSynonyms().length > 1 ? /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement("ul", null, entity2.getSynonyms().map((synonym) => { return /* @__PURE__ */ import_react847.default.createElement("li", { key: randomString(), id: synonym.value }, getReifiedJSX(entity2, synonym, showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })); - })) : /* @__PURE__ */ import_react847.default.createElement("p", null, getReifiedJSX(entity2, entity2.getSynonyms()[0], showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate }))))); + })), /* @__PURE__ */ import_react847.default.createElement("p", null)) : /* @__PURE__ */ import_react847.default.createElement("p", null, getReifiedJSX(entity2, entity2.getSynonyms()[0], showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate }))))); } function getHasKeySection(term) { const keys2 = term.getHasKey(); - return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, keys2.length > 0 && /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "Has Key:"), keys2.length > 1 ? /* @__PURE__ */ import_react847.default.createElement("ul", null, keys2.map((keys3) => { - return /* @__PURE__ */ import_react847.default.createElement("li", { key: randomString() }, getClassExpressionJSX(term, term.getLinkedEntities(), keys3, showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })); - })) : /* @__PURE__ */ import_react847.default.createElement("p", null, getClassExpressionJSX(term, term.getLinkedEntities(), keys2[0], showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate }))))); + return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, keys2.length > 0 && /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "Has Key:"), keys2.length > 1 ? /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement("ul", null, keys2.map((keys3) => { + return /* @__PURE__ */ import_react847.default.createElement( + "li", + { + key: randomString() + }, + getClassExpressionJSX(term, term.getLinkedEntities(), keys3, showBadges, { + onNavigateToEntity: props.onNavigateToEntity, + onNavigateToOntology: props.onNavigateToOntology, + onNavigateToDisambiguate: props.onNavigateToDisambiguate + }) + ); + })), /* @__PURE__ */ import_react847.default.createElement("p", null)) : /* @__PURE__ */ import_react847.default.createElement("p", null, getClassExpressionJSX(term, term.getLinkedEntities(), keys2[0], showBadges, { + onNavigateToEntity: props.onNavigateToEntity, + onNavigateToOntology: props.onNavigateToOntology, + onNavigateToDisambiguate: props.onNavigateToDisambiguate + }))))); } function getSubsetsSection(term) { - return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, term.getSubsets().length > 0 && /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "In Subsets:"), term.getSubsets().length > 1 ? /* @__PURE__ */ import_react847.default.createElement("ul", null, term.getSubsets().map((subset) => { + return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, term.getSubsets().length > 0 && /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "In Subsets:"), term.getSubsets().length > 1 ? /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement("ul", null, term.getSubsets().map((subset) => { return /* @__PURE__ */ import_react847.default.createElement("li", { key: randomString(), id: subset + randomString() }, getEntityLinkJSX(term, term.getLinkedEntities(), subset, showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })); - })) : /* @__PURE__ */ import_react847.default.createElement("p", null, getEntityLinkJSX(term, term.getLinkedEntities(), term.getSubsets()[0], showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate }))))); + })), /* @__PURE__ */ import_react847.default.createElement("p", null)) : /* @__PURE__ */ import_react847.default.createElement("p", null, getEntityLinkJSX(term, term.getLinkedEntities(), term.getSubsets()[0], showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate }))))); } function getPropertyCharacteristicsSection(property2) { const characteristics = property2.getRdfTypes().map((type) => { @@ -129045,21 +129059,21 @@ Description: ${value2.description}`; "http://www.w3.org/2002/07/owl#IrreflexiveProperty": "Irreflexive" }[type]; }).filter((type) => !!type); - return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, characteristics.length > 0 && /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "Characteristics:"), characteristics.length > 1 ? /* @__PURE__ */ import_react847.default.createElement("ul", null, characteristics.map((characteristic) => { + return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, characteristics.length > 0 && /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "Characteristics:"), characteristics.length > 1 ? /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement("ul", null, characteristics.map((characteristic) => { return /* @__PURE__ */ import_react847.default.createElement("li", { key: randomString() }, characteristic); - }).sort()) : /* @__PURE__ */ import_react847.default.createElement("p", null, characteristics[0])))); + }).sort()), /* @__PURE__ */ import_react847.default.createElement("p", null)) : /* @__PURE__ */ import_react847.default.createElement("p", null, characteristics[0])))); } function getDomainSection(property2) { const domains = property2.getDomain(); - return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, domains.length > 0 && /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "Domain:"), domains.length > 1 ? /* @__PURE__ */ import_react847.default.createElement("ul", null, domains.map((domains2) => { + return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, domains.length > 0 && /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "Domain:"), domains.length > 1 ? /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement("ul", null, domains.map((domains2) => { return /* @__PURE__ */ import_react847.default.createElement("li", { key: randomString() }, getClassExpressionJSX(property2, property2.getLinkedEntities(), domains2, showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })); - })) : /* @__PURE__ */ import_react847.default.createElement("p", null, getClassExpressionJSX(property2, property2.getLinkedEntities(), domains[0], showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate }))))); + })), /* @__PURE__ */ import_react847.default.createElement("p", null)) : /* @__PURE__ */ import_react847.default.createElement("p", null, getClassExpressionJSX(property2, property2.getLinkedEntities(), domains[0], showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate }))))); } function getRangeSection(property2) { const ranges = property2.getRange(); - return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, ranges.length > 0 && /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "Range:"), ranges.length > 1 ? /* @__PURE__ */ import_react847.default.createElement("ul", null, ranges.map((ranges2) => { + return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, ranges.length > 0 && /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "Range:"), ranges.length > 1 ? /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement("ul", null, ranges.map((ranges2) => { return /* @__PURE__ */ import_react847.default.createElement("li", { key: randomString() }, getClassExpressionJSX(property2, property2.getLinkedEntities(), ranges2, showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })); - })) : /* @__PURE__ */ import_react847.default.createElement("p", null, getClassExpressionJSX(property2, property2.getLinkedEntities(), ranges[0], showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })))); + })), /* @__PURE__ */ import_react847.default.createElement("p", null)) : /* @__PURE__ */ import_react847.default.createElement("p", null, getClassExpressionJSX(property2, property2.getLinkedEntities(), ranges[0], showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })))); } function getIndividualPropertyAssertionsSection(individual) { const propertyIris = Object.keys(individual.properties); @@ -129095,19 +129109,19 @@ Description: ${value2.description}`; ); } } - return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, propertyAssertions.length > 0 && /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "Property assertions:"), propertyAssertions.length > 1 ? /* @__PURE__ */ import_react847.default.createElement("ul", null, propertyAssertions.map((pa) => { + return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, propertyAssertions.length > 0 && /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react847.default.createElement("b", null, "Property assertions:"), propertyAssertions.length > 1 ? /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement("ul", null, propertyAssertions.map((pa) => { return /* @__PURE__ */ import_react847.default.createElement("li", { key: randomString() }, pa); - }).sort()) : /* @__PURE__ */ import_react847.default.createElement("p", null, propertyAssertions[0])))); + }).sort()), /* @__PURE__ */ import_react847.default.createElement("p", null)) : /* @__PURE__ */ import_react847.default.createElement("p", null, propertyAssertions[0])))); } function getAnnotationSection(thing) { return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, thing.getAnnotationPredicates().map( - (annoKey) => { + (annoKey, index, arr) => { const annos = thing.getAnnotationById(annoKey); if (annos.length == 0) return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null); - return /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, { grow: false, key: annoKey }, /* @__PURE__ */ import_react847.default.createElement("b", null, capitalize(deUnderscore(deCamelCase(thing.getAnnotationTitleById(annoKey)))), ":"), annos.length > 1 ? /* @__PURE__ */ import_react847.default.createElement("ul", null, annos.map((annotation) => { + return /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement(EuiFlexItem, { grow: false, key: annoKey }, /* @__PURE__ */ import_react847.default.createElement("b", null, capitalize(deUnderscore(deCamelCase(thing.getAnnotationTitleById(annoKey)))), ":"), annos.length > 1 ? /* @__PURE__ */ import_react847.default.createElement(import_react847.default.Fragment, null, /* @__PURE__ */ import_react847.default.createElement("ul", null, annos.map((annotation) => { return /* @__PURE__ */ import_react847.default.createElement("li", { key: randomString(), id: annotation.value }, getReifiedJSX(thing, annotation, showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })); - })) : /* @__PURE__ */ import_react847.default.createElement("p", { key: randomString() }, getReifiedJSX(thing, annos[0], showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate }))); + })), /* @__PURE__ */ import_react847.default.createElement("p", null)) : /* @__PURE__ */ import_react847.default.createElement("p", { key: randomString() }, getReifiedJSX(thing, annos[0], showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })))); } )); } @@ -129298,7 +129312,7 @@ Description: ${value2.description}`; iconType: "copy", key: "copy-btn", style: { marginLeft: "5px", marginRight: "5px", color: color && (isHexColor(color) || isRgbColor(color)) ? color : "" }, - color: color && isEuiLinkColor(color) ? color : void 0, + color: color && isEuiButtonColor(color) ? color : void 0, onClick: () => { navigator.clipboard.writeText(iriUrl); setCopied(true); @@ -129422,9 +129436,9 @@ Description: ${value2.description}`; return /* @__PURE__ */ import_react855.default.createElement(import_react855.default.Fragment, null, ontology2.getNumClasses() && /* @__PURE__ */ import_react855.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react855.default.createElement("b", null, "Number of classes:"), /* @__PURE__ */ import_react855.default.createElement("p", null, ontology2.getNumClasses().toLocaleString()))); } function getCreatorsSection(ontology2) { - return /* @__PURE__ */ import_react855.default.createElement(import_react855.default.Fragment, null, ontology2.getCreators().length > 0 && /* @__PURE__ */ import_react855.default.createElement(import_react855.default.Fragment, null, /* @__PURE__ */ import_react855.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react855.default.createElement("b", null, "Creators:"), ontology2.getCreators().length > 1 ? /* @__PURE__ */ import_react855.default.createElement("ul", null, ontology2.getCreators().map((creator) => { + return /* @__PURE__ */ import_react855.default.createElement(import_react855.default.Fragment, null, ontology2.getCreators().length > 0 && /* @__PURE__ */ import_react855.default.createElement(import_react855.default.Fragment, null, /* @__PURE__ */ import_react855.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react855.default.createElement("b", null, "Creators:"), ontology2.getCreators().length > 1 ? /* @__PURE__ */ import_react855.default.createElement(import_react855.default.Fragment, null, /* @__PURE__ */ import_react855.default.createElement("ul", null, ontology2.getCreators().map((creator) => { return /* @__PURE__ */ import_react855.default.createElement("li", { key: creator + randomString() }, getEntityLinkJSX(ontology2, ontology2.getLinkedEntities(), creator, showBadges, onNavigates)); - })) : /* @__PURE__ */ import_react855.default.createElement("p", null, getEntityLinkJSX(ontology2, ontology2.getLinkedEntities(), ontology2.getCreators()[0], showBadges, onNavigates))), /* @__PURE__ */ import_react855.default.createElement(EuiSpacer, null))); + })), /* @__PURE__ */ import_react855.default.createElement("p", null)) : /* @__PURE__ */ import_react855.default.createElement("p", null, getEntityLinkJSX(ontology2, ontology2.getLinkedEntities(), ontology2.getCreators()[0], showBadges, onNavigates))), /* @__PURE__ */ import_react855.default.createElement(EuiSpacer, null))); } function getAnnotationSection(thing) { return /* @__PURE__ */ import_react855.default.createElement(import_react855.default.Fragment, null, thing.getAnnotationPredicates().map( @@ -129432,9 +129446,16 @@ Description: ${value2.description}`; const annos = thing.getAnnotationById(annoKey); if (annos.length == 0) return /* @__PURE__ */ import_react855.default.createElement(import_react855.default.Fragment, null); - return /* @__PURE__ */ import_react855.default.createElement(EuiFlexItem, { grow: false, key: annoKey }, /* @__PURE__ */ import_react855.default.createElement("b", null, capitalize(deUnderscore(deCamelCase(thing.getAnnotationTitleById(annoKey)))), ":"), annos.length > 1 ? /* @__PURE__ */ import_react855.default.createElement("ul", null, annos.map((annotation) => { - return /* @__PURE__ */ import_react855.default.createElement("li", { key: randomString(), id: annotation.value }, getReifiedJSX(thing, annotation, showBadges, onNavigates)); - })) : /* @__PURE__ */ import_react855.default.createElement("p", { key: randomString() }, getReifiedJSX(thing, annos[0], showBadges, onNavigates))); + return /* @__PURE__ */ import_react855.default.createElement(EuiFlexItem, { grow: false, key: annoKey }, /* @__PURE__ */ import_react855.default.createElement("b", null, capitalize(deUnderscore(deCamelCase(thing.getAnnotationTitleById(annoKey)))), ":"), annos.length > 1 ? /* @__PURE__ */ import_react855.default.createElement(import_react855.default.Fragment, null, /* @__PURE__ */ import_react855.default.createElement("ul", null, annos.map((annotation) => { + return /* @__PURE__ */ import_react855.default.createElement( + "li", + { + key: randomString(), + id: annotation.value + }, + getReifiedJSX(thing, annotation, showBadges, onNavigates) + ); + })), /* @__PURE__ */ import_react855.default.createElement("p", null)) : /* @__PURE__ */ import_react855.default.createElement("p", { key: randomString() }, getReifiedJSX(thing, annos[0], showBadges, onNavigates))); } )); } @@ -129566,8 +129587,11 @@ Description: ${value2.description}`; childNodeData = SkosEntityDataBuilder.fromLabelAndUriAndChildren(childNode, [node3.uri]); entitiesData.set(childNodeData.iri, childNodeData); } else { - if (!childNodeData.parents.map((r) => r.value).includes(node3.uri)) - childNodeData.parents.push(...Reified.fromJson(node3.uri)); + if (!childNodeData.parents.map((r) => r.value).includes(node3.uri)) { + if (childNodeData.parents) { + childNodeData.parents.push(...Reified.fromJson(node3.uri)); + } + } } children.push(childNodeData); } @@ -130418,7 +130442,7 @@ Description: ${value2.description}`; { name: "Description", field: "config.description", - width: "30%", + // width: "30%", css: css` display: block; max-height: 200px; @@ -131114,7 +131138,7 @@ Description: ${value2.description}`; function getIndividualDifferentFromSectionJSX(individual, props) { const differentFrom = individual.getDifferentFrom(); if (differentFrom.length > 0) { - return /* @__PURE__ */ import_react873.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react873.default.createElement("b", null, "Different from"), getSectionListJSX(individual, individual.getLinkedEntities(), differentFrom, props.showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })); + return /* @__PURE__ */ import_react873.default.createElement(import_react873.default.Fragment, null, /* @__PURE__ */ import_react873.default.createElement(EuiSpacer, null), /* @__PURE__ */ import_react873.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react873.default.createElement("b", null, "Different from"), getSectionListJSX(individual, individual.getLinkedEntities(), differentFrom, props.showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate }))); } } function getDisjointWithSectionJSX(entity, props) { @@ -131138,25 +131162,41 @@ Description: ${value2.description}`; const propertyChains = property2.getPropertyChains().map((reified) => reified.value); const hasMultipleChains = propertyChains.filter((elem) => Array.isArray(elem)).length > 0; if (propertyChains.length > 0) { - return /* @__PURE__ */ import_react873.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react873.default.createElement("b", null, !hasMultipleChains ? "Property chain" : "Property chains"), !hasMultipleChains ? /* @__PURE__ */ import_react873.default.createElement("p", null, getPropertyChainJSX(propertyChains, property2, props)) : /* @__PURE__ */ import_react873.default.createElement("ul", null, propertyChains.map((item) => { + return /* @__PURE__ */ import_react873.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react873.default.createElement("b", null, !hasMultipleChains ? "Property chain" : "Property chains"), !hasMultipleChains ? /* @__PURE__ */ import_react873.default.createElement("p", null, getPropertyChainJSX(propertyChains, property2, props)) : /* @__PURE__ */ import_react873.default.createElement(import_react873.default.Fragment, null, /* @__PURE__ */ import_react873.default.createElement("ul", null, propertyChains.map((item) => { return /* @__PURE__ */ import_react873.default.createElement("li", { key: randomString() }, getPropertyChainJSX(item, property2, props)); - }))); + })), /* @__PURE__ */ import_react873.default.createElement("p", null))); } } function getEntityEquivalentToSectionJSX(entity, props) { const equivalents = entity.getEquivalents(); if (equivalents.length > 0) { - return /* @__PURE__ */ import_react873.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react873.default.createElement("b", null, "Equivalent to"), equivalents.length === 1 ? /* @__PURE__ */ import_react873.default.createElement("p", null, getReifiedJSX(entity, equivalents[0], props.showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })) : /* @__PURE__ */ import_react873.default.createElement("ul", null, equivalents.map((item) => { - return /* @__PURE__ */ import_react873.default.createElement("li", { key: randomString() }, getReifiedJSX(entity, item, props.showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })); - }))); + return /* @__PURE__ */ import_react873.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react873.default.createElement("b", null, "Equivalent to"), equivalents.length === 1 ? /* @__PURE__ */ import_react873.default.createElement("p", null, getReifiedJSX(entity, equivalents[0], props.showBadges, { + onNavigateToEntity: props.onNavigateToEntity, + onNavigateToOntology: props.onNavigateToOntology, + onNavigateToDisambiguate: props.onNavigateToDisambiguate + })) : /* @__PURE__ */ import_react873.default.createElement(import_react873.default.Fragment, null, /* @__PURE__ */ import_react873.default.createElement("ul", null, equivalents.map((item) => { + return /* @__PURE__ */ import_react873.default.createElement("li", { key: randomString() }, getReifiedJSX(entity, item, props.showBadges, { + onNavigateToEntity: props.onNavigateToEntity, + onNavigateToOntology: props.onNavigateToOntology, + onNavigateToDisambiguate: props.onNavigateToDisambiguate + })); + })), /* @__PURE__ */ import_react873.default.createElement("p", null))); } } function getSubEntityOfSectionJSX(entity, props) { const superEntities = entity.getSuperEntities(); if (superEntities.length > 0) { - return /* @__PURE__ */ import_react873.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react873.default.createElement("b", null, "Sub", entity.getType(), " of"), superEntities.length === 1 ? /* @__PURE__ */ import_react873.default.createElement("p", null, getReifiedJSX(entity, superEntities[0], props.showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })) : /* @__PURE__ */ import_react873.default.createElement("ul", null, superEntities.map((item) => { - return /* @__PURE__ */ import_react873.default.createElement("li", { key: randomString() }, getReifiedJSX(entity, item, props.showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })); - }))); + return /* @__PURE__ */ import_react873.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react873.default.createElement("b", null, "Sub", entity.getType(), " of"), superEntities.length === 1 ? /* @__PURE__ */ import_react873.default.createElement("p", null, getReifiedJSX(entity, superEntities[0], props.showBadges, { + onNavigateToEntity: props.onNavigateToEntity, + onNavigateToOntology: props.onNavigateToOntology, + onNavigateToDisambiguate: props.onNavigateToDisambiguate + })) : /* @__PURE__ */ import_react873.default.createElement(import_react873.default.Fragment, null, /* @__PURE__ */ import_react873.default.createElement("ul", null, superEntities.map((item) => { + return /* @__PURE__ */ import_react873.default.createElement("li", { key: randomString() }, getReifiedJSX(entity, item, props.showBadges, { + onNavigateToEntity: props.onNavigateToEntity, + onNavigateToOntology: props.onNavigateToOntology, + onNavigateToDisambiguate: props.onNavigateToDisambiguate + })); + })), /* @__PURE__ */ import_react873.default.createElement("p", null))); } } function getEntityRelatedFromSectionJSX(entity, props) { @@ -131167,19 +131207,23 @@ Description: ${value2.description}`; if (relatedFroms.length > 0) { return /* @__PURE__ */ import_react873.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react873.default.createElement("b", null, "Related from"), predicates2.map((p) => { const label = entity.getLinkedEntities().getLabelForIri(p); - return /* @__PURE__ */ import_react873.default.createElement("div", { key: p.toString() + randomString() }, /* @__PURE__ */ import_react873.default.createElement("div", null, /* @__PURE__ */ import_react873.default.createElement("a", { style: { color: "black" }, href: p }, /* @__PURE__ */ import_react873.default.createElement("i", null, label || p))), /* @__PURE__ */ import_react873.default.createElement("ul", { style: { marginBottom: 0 } }, relatedFroms.filter((elem) => { + return /* @__PURE__ */ import_react873.default.createElement("div", { key: p.toString() + randomString() }, /* @__PURE__ */ import_react873.default.createElement("div", null, /* @__PURE__ */ import_react873.default.createElement("a", { style: { color: "black" }, href: p }, /* @__PURE__ */ import_react873.default.createElement("i", null, label || p))), /* @__PURE__ */ import_react873.default.createElement(import_react873.default.Fragment, null, /* @__PURE__ */ import_react873.default.createElement("ul", { style: { marginBottom: 0 } }, relatedFroms.filter((elem) => { return elem.value["property"] === p; }).map((elem) => { return /* @__PURE__ */ import_react873.default.createElement("li", { key: randomString() }, getClassExpressionJSX(entity, entity.getLinkedEntities(), elem.value["value"], props.showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })); - })), /* @__PURE__ */ import_react873.default.createElement("p", null), " "); + })), /* @__PURE__ */ import_react873.default.createElement("p", null)), /* @__PURE__ */ import_react873.default.createElement("p", null), " "); })); } } function getClassInstancesSectionJSX(term, instances, props) { if (instances.length > 0) { - return /* @__PURE__ */ import_react873.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react873.default.createElement("b", null, "Instances"), /* @__PURE__ */ import_react873.default.createElement("ul", null, instances.map((instance) => { - return /* @__PURE__ */ import_react873.default.createElement("li", { key: randomString() }, getEntityLinkJSX(term, term.getLinkedEntities(), instance.getIri(), props.showBadges, { onNavigateToEntity: props.onNavigateToEntity, onNavigateToOntology: props.onNavigateToOntology, onNavigateToDisambiguate: props.onNavigateToDisambiguate })); - }))); + return /* @__PURE__ */ import_react873.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react873.default.createElement("b", null, "Instances"), /* @__PURE__ */ import_react873.default.createElement(import_react873.default.Fragment, null, /* @__PURE__ */ import_react873.default.createElement("ul", null, instances.map((instance) => { + return /* @__PURE__ */ import_react873.default.createElement("li", { key: randomString() }, getEntityLinkJSX(term, term.getLinkedEntities(), instance.getIri(), props.showBadges, { + onNavigateToEntity: props.onNavigateToEntity, + onNavigateToOntology: props.onNavigateToOntology, + onNavigateToDisambiguate: props.onNavigateToDisambiguate + })); + })), /* @__PURE__ */ import_react873.default.createElement("p", null))); } } function EntityRelationsWidget(props) { @@ -131825,4 +131869,4 @@ tabbable/dist/index.esm.js: * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci90cmFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxCeVRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRBbGxLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQm9vbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL251bWVyYWwvbnVtZXJhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lRGF0YVZpZXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVSZWdFeHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUJ5VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0ZsYXR0ZW5hYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZsYXRSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVxdWlyZXMtcG9ydC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmdpZnkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VybC1wYXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VzY2FwZVJlZ0V4cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dsb2JhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmFpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3BhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2V4cG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9mdW5jdGlvbi92aXJ0dWFsL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZsYXQtbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1waXBlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3Qub3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2pzb24vc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvanNvbi9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1idW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC1pbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3NldC10aW1lb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29tcG9uZW50LWVtaXR0ZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AZWdqcy9oYW1tZXJqcy9kaXN0L2hhbW1lci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy92aXMtdXRpbC9lc25leHQvZXNtL3Zpcy11dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcmVmbGVjdC9jb25zdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3JlZmxlY3QvY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9yZWZsZWN0L2NvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvci5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90YXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9xdWV1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy13ZWJvcy13ZWJraXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21pY3JvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wZXJmb3JtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFueS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnByb21pc2Uud2l0aC1yZXNvbHZlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQucHJvbWlzZS50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9yZWdlbmVyYXRvci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnJlZXppbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm1hcC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9tYXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL21hcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2VudHJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9ybmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL25hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92NC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtaW50ZXJmYWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvcXVldWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC1wYXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3NldC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zdHJlYW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtdmlldy50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtc2V0LWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS12aWV3LWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2Fzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnRyeS12aXJ0dWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2Z1bmN0aW9uL3ZpcnR1YWwvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9zaGFwZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb21wb25lbnQtZW1pdHRlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5oYXMtaW5zdGFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaXMtY29uY2F0LXNwcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnJlcGxhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwZWNpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc3BsaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudW5zY29wYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheVdpdGhvdXRIb2xlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5kYXRlLm5vdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9kYXRlL25vdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2luY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1yZWdleHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25vdC1hLXJlZ2V4cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3RyaW5nL3ZpcnR1YWwvaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy10cmltLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9udW1iZXItcGFyc2UtaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucGFyc2UtaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3BhcnNlLWludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmluZGV4LW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvaW5kZXgtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luZGV4LW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2pzb24vc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LWludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC10aW1lb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZmlsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGVnanMvaGFtbWVyanMvZGlzdC9oYW1tZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy92aXMtdXRpbC9lc25leHQvZXNtL3Zpcy11dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9kb3RwYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL2dlcGhpUGFyc2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9sb2NhbGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9DYWNoZWRJbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvSW1hZ2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mcmVlemluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXAuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbWFwL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL0dyb3Vwcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm51bWJlci5pcy1uYW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbnVtYmVyL2lzLW5hbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbnVtYmVyLWlzLWZpbml0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm51bWJlci5pcy1maW5pdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbnVtYmVyL2lzLWZpbml0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zb21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL251bWJlci1wYXJzZS1mbG9hdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnBhcnNlLWZsb2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3BhcnNlLWZsb2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvc2hhcmVkL0NvbXBvbmVudFV0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3NoYXJlZC9MYWJlbEFjY3VtdWxhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvc2hhcmVkL0xhYmVsU3BsaXR0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9zaGFyZWQvTGFiZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0LmNvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9yZWZsZWN0L2NvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvdXRpbC9Ob2RlQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9Cb3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy91dGlsL0NpcmNsZUltYWdlQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvQ2lyY3VsYXJJbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3V0aWwvU2hhcGVCYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0N1c3RvbVNoYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0RhdGFiYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0RpYW1vbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvRG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0VsbGlwc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvSWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9JbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9TcXVhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvSGV4YWdvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9TdGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL1RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvVHJpYW5nbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvVHJpYW5nbGVEb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvTm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9Ob2Rlc0hhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWRhdGEtZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3QuZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3JlZmxlY3QvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9nZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3N1cGVyUHJvcEJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXRoLmh5cG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL21hdGgvaHlwb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy91dGlsL2VuZC1wb2ludHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy91dGlsL2VkZ2UtYmFzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL2VkZ2VzL3V0aWwvYmV6aWVyLWVkZ2UtYmFzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL2VkZ2VzL2Jlemllci1lZGdlLWR5bmFtaWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy9iZXppZXItZWRnZS1zdGF0aWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy91dGlsL2N1YmljLWJlemllci1lZGdlLWJhc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy9jdWJpYy1iZXppZXItZWRnZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL2VkZ2VzL3N0cmFpZ2h0LWVkZ2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9FZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL0VkZ2VzSGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvQmFybmVzSHV0U29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9SZXB1bHNpb25Tb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9waHlzaWNzL0hpZXJhcmNoaWNhbFJlcHVsc2lvblNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvU3ByaW5nU29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9IaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9waHlzaWNzL0NlbnRyYWxHcmF2aXR5U29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9GQTJCYXNlZFJlcHVsc2lvblNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvRkEyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9QaHlzaWNzRW5naW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JuZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvbmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3Y0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9OZXR3b3JrVXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL0NsdXN0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvQ2x1c3RlcmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9DYW52YXNSZW5kZXJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LWludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvaGFtbWVyVXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9DYW52YXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvVmlldy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy92aWV3LWhhbmRsZXIvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9rZXljaGFybS9zcmMva2V5Y2hhcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9OYXZpZ2F0aW9uSGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9JbnRlcmFjdGlvbkhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc2V0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLXdlYWsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy53ZWFrLW1hcC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy93ZWFrLW1hcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9zZWxlY3Rpb24vc2VsZWN0aW9uLWFjY3VtdWxhdG9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL1NlbGVjdGlvbkhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL0RpcmVjdGlvblN0cmF0ZWd5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZXZlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9ldmVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9ldmVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZXZlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvbGF5b3V0LWVuZ2luZS9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9MYXlvdXRFbmdpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvTWFuaXB1bGF0aW9uU3lzdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9vcHRpb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvYWxnb3JpdGhtcy9GbG95ZFdhcnNoYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL0thbWFkYUthd2FpLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9OZXR3b3JrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9sb2NhbGUtdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9lbnRyeS1lc25leHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9mdW5jdGlvbi92aXJ0dWFsL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtcGlwZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3Qub3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2pzb24vc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LWludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC10aW1lb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvbXBvbmVudC1lbWl0dGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGVnanMvaGFtbWVyanMvZGlzdC9oYW1tZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdmlzLXV0aWwvZXNuZXh0L2VzbS92aXMtdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3JlZmxlY3QvY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3R5cGVvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3F1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9taWNyb3Rhc2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MtcGViYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wZXJmb3JtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY2F0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJlamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wdXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYW55LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQucHJvbWlzZS53aXRoLXJlc29sdmVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvcHJvbWlzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvcHJvbWlzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvcmVnZW5lcmF0b3IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZyZWV6aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXAuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbWFwL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9lbnRyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9lbnRyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2VudHJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcm5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9uYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLWludGVyZmFjZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL3F1ZXVlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zZXQtcGFydC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zZXQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zdHJlYW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtdmlldy50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtc2V0LWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS12aWV3LWNoZWNrLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvQXV0b2NvbXBsZXRlV2lkZ2V0L0F1dG9jb21wbGV0ZVdpZGdldC50c3giLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vY29tbW9uL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NIZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Rocm90dGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90cmFja1N0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2ZldGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvYWRhcHRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCAiLi4vc3JjL21vZGVsL01vZGVsVHlwZUNoZWNrLnRzIiwgIi4uL3NyYy9hcHAvdXRpbC50cyIsICIuLi9zcmMvbW9kZWwvUmVpZmllZC50cyIsICIuLi9zcmMvbW9kZWwvTGlua2VkRW50aXRpZXMudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM1RoaW5nLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNFbnRpdHkudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM0NsYXNzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNQcm9wZXJ0eS50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzSW5kaXZpZHVhbC50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzT250b2xvZ3kudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM09udG9sb2dpZXMudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNFRoaW5nLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRFbnRpdHkudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNENsYXNzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRQcm9wZXJ0eS50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0SW5kaXZpZHVhbC50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0T250b2xvZ3kudHMiLCAiLi4vc3JjL21vZGVsL01vZGVsT2JqZWN0Q3JlYXRvci50cyIsICIuLi9zcmMvbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHkudHMiLCAiLi4vc3JjL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3QudHMiLCAiLi4vc3JjL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3RSZXN1bHQudHMiLCAiLi4vc3JjL21vZGVsL3RzNG5mZGktbW9kZWwvVHM0bmZkaVNlYXJjaFJlc3VsdC50cyIsICIuLi9zcmMvYXBpL09sc0FwaS50cyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYWNjZXNzaWJpbGl0eS9zY3JlZW5fcmVhZGVyX2xpdmUvc2NyZWVuX3JlYWRlcl9saXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfb25seS9zY3JlZW5fcmVhZGVyX29ubHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9odG1sX2lkX2dlbmVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcm5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9yZWdleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdmFsaWRhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9hbGlnbm1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icmVha3BvaW50L2N1cnJlbnRfYnJlYWtwb2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tbW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvaG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvdHlwZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2lzX2NvbG9yX2RhcmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9pc192YWxpZF9oZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9oZXhfdG9fcmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2xpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2NsaXBfcmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvdW5wYWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvQ29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9jaHJvbWEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY215ay9jbXlrMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9jbXlrL3JnYjJjbXlrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2NteWsvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL2hzbDJjc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNsL3JnYjJoc2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL3JnYjJjc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNsL2hzbDJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL2NzczJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2dsL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hjZy9oY2cycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hjZy9yZ2IyaGNnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hjZy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oZXgvaGV4MnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oZXgvcmdiMmhleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oZXgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNpL2hzaTJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNpL3JnYjJoc2kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc3YvaHN2MnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc3YvcmdiMmhzdi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc3YvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL2xhYi1jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL2xhYjJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL3JnYjJsYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9sY2gybGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9sY2gycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9oY2wycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9sYWIybGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9yZ2IybGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9jb2xvcnMvdzNjeDExLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL25hbWVkL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL251bS9udW0ycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL251bS9yZ2IybnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL251bS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9yZ2IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vdGVtcC90ZW1wZXJhdHVyZTJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vdGVtcC9yZ2IydGVtcGVyYXR1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vdGVtcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xhYi9va2xhYjJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vb2tsYWIvcmdiMm9rbGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGFiL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGNoL29rbGNoMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xjaC9yZ2Iyb2tsY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vb2tsY2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2FscGhhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9jbGlwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9kYXJrZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvbHVtaW5hbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvbWl4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9taXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL3ByZW11bHRpcGx5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9zYXR1cmF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvc2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9zaGFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvcmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9scmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9sYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL19oc3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2xjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvbnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9oY2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2hzaS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvaHNsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9oc3YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL29rbGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9va2xjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvYXZlcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3Ivc2NhbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL2Jlemllci5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvYmxlbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL2N1YmVoZWxpeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvcmFuZG9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2FuYWx5emUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvY29udHJhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvZGVsdGEtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9kaXN0YW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy92YWxpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9zY2FsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvY29sb3JzL2NvbG9yYnJld2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9jb2xvcl9wYWxldHRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvZXVpX3BhbGV0dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvbWFuaXB1bGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvY29udHJhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fY29sb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2FuaW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19icmVha3BvaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL2xvZ2ljYWxzLmpzb24iLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvbG9naWNhbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvbG9naWNhbF9zaG9ydGhhbmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL21hdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvc2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucy90eXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3NpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYm9yZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19sZXZlbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zdGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL3RoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvd2FybmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLWVsZW1lbnQtNTQ4NmM1MWMuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9VdGlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi93ZWFrLW1lbW9pemUvZGlzdC9lbW90aW9uLXdlYWstbWVtb2l6ZS5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9lbW90aW9uLW1lbW9pemUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jYWNoZS9kaXN0L2Vtb3Rpb24tY2FjaGUuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvZW1vdGlvbi11dGlscy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MvZGlzdC9lbW90aW9uLXVzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aHJvdHRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2JyZWFrcG9pbnQvX3NvcnRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icmVha3BvaW50L2N1cnJlbnRfYnJlYWtwb2ludF9ob29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvcHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9lbW90aW9uL2Nsb25lX2VsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9lbW90aW9uL3ByZWZpeGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jc3MvY3JlYXRlLWluc3RhbmNlL2Rpc3QvZW1vdGlvbi1jc3MtY3JlYXRlLWluc3RhbmNlLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2Vtb3Rpb24vY3NzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvZW1vdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RoZW1lL3N0eWxlX21lbW9pemF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvaG9va3MvdXNlVXBkYXRlRWZmZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvaG9va3MvdXNlQ29tYmluZWRSZWZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYnJlYWtwb2ludC9pc193aXRoaW5faG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jYW52YXMvY2FudmFzX3RleHRfdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb3B5L3RhYnVsYXJfY29weS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2ZpbmRFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2NvbW1vbl9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2xvZGFzaF9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9ib29sZWFuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9kYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9udW1iZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X2F1dG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9wb3BvdmVyL3BvcG92ZXJfcG9zaXRpb25pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zZWN1cml0eS9nZXRfc2VjdXJlX3JlbF9mb3JfdGFyZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvc29ydC9zb3J0X2RpcmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL29iamVjdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zb3J0L2NvbXBhcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvcmVzZXQvZ2xvYmFsX3N0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fY29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX2hlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX3BhZGRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX3N0YXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fcmVzcG9uc2l2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL3Jlc2V0L3Jlc2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL2FuaW1hdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy91dGlsaXR5L2FuaW1hdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2FjY2Vzc2liaWxpdHkvc2NyZWVuX3JlYWRlcl9vbmx5L3NjcmVlbl9yZWFkZXJfb25seS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3RhYmJhYmxlL3NyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL3NoYWRvd3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9zaGFkb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25fZGlzcGxheS9fYnV0dG9uX2Rpc3BsYXkuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5X2NvbnRlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FjY2Vzc2liaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FnZ3JlZ2F0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYWxlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FuYWx5emVFdmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5hbHl6ZV9ldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5ub3RhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5vbWFseV9jaGFydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5vbWFseV9zd2ltX2xhbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwbV90cmFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FkZF9kYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FwbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hdWRpdGJlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jYW52YXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jYXNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jb25zb2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2Rhc2hib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2RldnRvb2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9lbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9maWxlYmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2ZsZWV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZ2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZ3JhcGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9ncm9rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaGVhcnRiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9sZW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbG9ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21hbmFnZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9tZXRyaWNiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbW9uaXRvcmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX25vdGVib29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcGFja2V0YmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3BpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcmVwb3J0aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NlY3VyaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc3BhY2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc3FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdGltZWxpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VwdGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfd2F0Y2hlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93RW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd1N0YXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19kb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19sZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19yaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXJyb3dfdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FydGljbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FzdGVyaXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYmVha2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9iZWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9iZWxsU2xhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JldGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JvbHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JveGVzX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icmFuY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JyYW5jaFVzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Jyb29tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icnVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9idWxsc2V5ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2FsZW5kYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NoYW5nZV9wb2ludF9kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jaGVlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2xpY2tMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbGlja1JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2xvY2tDb3VudGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZERyaXp6bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nsb3VkU3Rvcm15LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZFN1bm55LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbHVzdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb2xvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29tcHV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29uc29sZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udGFpbmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QWJvdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZUJlbG93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QmVsb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRyb2xzX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb3B5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb3B5X2NsaXBib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3Jvc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nyb3NzSW5DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nyb3NzX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3Jvc3NoYWlycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3VycmVuY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2N1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZGF0YWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Rlc2t0b3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RpZmYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Rpc2N1c3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb2N1bWVudEVkaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3RJbkNpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3dubG9hZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9ib2xkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2NvbW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9oZWFkaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfaXRhbGljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3JlZG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9zdHJpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl90YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3VuZGVybGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3VuZG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZW1haWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lbmRwb2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lcmFzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lcnJvckZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXNxbFZpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhwYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leHBhbmRNaW5pLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V5ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXllX2Nsb3NlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmFjZV9oYXBweS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmFjZV9uZXV0cmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mYWNlX3NhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmllbGRfc3RhdGlzdGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9maWx0ZXJFeGNsdWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9maWx0ZXJJZ25vcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZpbHRlckluQ2lyY2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9maWx0ZXJJbmNsdWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mbGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkZXJfY2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9jbG9zZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZGVyX29wZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZyYW1lTmV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnJhbWVQcmV2aW91cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnVsbFNjcmVlbkV4aXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Z1bGxfc2NyZWVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2Vhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2xvYmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyYWJPbW5pZGlyZWN0aW9uYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ3JhZGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2hlYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWF0bWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWxwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ob21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pSW5DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ltYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbXBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleFRlbXBvcmFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfY2xvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X2VkaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X2ZsdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9tYXBwaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9vcGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9ydW50aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9zZXR0aW5ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lucHV0T3V0cHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnNwZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnZlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pc3N1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rZXlib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3FsX2ZpZWxkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF9vcGVyYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF92YWx1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3ViZXJuZXRlc05vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xhdW5jaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGF5ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sZXR0ZXJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVEYXNoZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVEb3R0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVTb2xpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGlzdF9hZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvY2tPcGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dfcGF0dGVybl9hbmFseXNpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nX3JhdGVfYW5hbHlzaXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYWVyb3NwaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2FwYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F3cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hd3NfbW9uby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19henVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19henVyZV9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2JlYXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jZXBoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2Nsb3VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jb2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvZGVzYW5kYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19kb2NrZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZHJvcHdpemFyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbGFzdGljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZWxhc3RpY3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19ldGNkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2djcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19naXRodWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ21haWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ29sYW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2dvb2dsZV9nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2hhcHJveHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29faWJtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2libV9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2thZmthLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19rdWJlcm5ldGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2xvZ2dpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbWFwcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tZW1jYWNoZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tb25nb2RiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX215c3FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX25naW54LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fb3NxdWVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19waHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcG9zdGdyZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcHJvbWV0aGV1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19yZWRpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zZWN1cml0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19za2V0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fc2xhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fdXB0aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb193ZWJob29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3dpbmRvd3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dzdGFzaF9pZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX291dHB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hZ25ldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tYXBfbWFya2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW1vcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnVEb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51TGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudVJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51VXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lcmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9taW5pbWl6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21pbnVzX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXNfaW5fc3F1YXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9hZHZhbmNlZF9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9zaW5nbGVfbWV0cmljX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX3JlZ3Jlc3Npb25fam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tb2JpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21vb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21vdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL25hbWVzcGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbmVzdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9uZXdfY2hhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9vZmZsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9vbmxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhY2thZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhZ2VTZWxlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhZ2VzU2VsZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYWludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFsZXR0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFwZXJfY2xpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFydGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BheW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BlbmNpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGVyY2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waW5fZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waXBlQnJlYWtzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waXBlTm9CcmVha3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Bpdm90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbGF5RmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzX2luX3NxdWFyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcG9wb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3F1b3RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZWZyZXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZXBvcnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcmV0dXJuX2tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2F2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2NhbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NoYXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zaGFyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2luZ2xlX21ldHJpY192aWV3ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Nub3dmbGFrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydEFzY2VuZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydERlc2NlbmRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0UmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRfZG93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydF91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NwYWNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3BhcmtsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJQbHVzRW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJQbHVzRmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfbWludXNfZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RvcF9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3Bfc2xhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3JhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3VibW9kdWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N3YXRjaF9pbnB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3ltbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFibGVPZkNvbnRlbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RlbXBlcmF0dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90aW1lUmVmcmVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGltZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RpbWVsaW5lV2l0aEFycm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90aW1lc2xpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFsaWFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFubm90YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQmluYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkJvb2xlYW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Db25zdGFudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5EYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkRpbWVuc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkVudW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FdmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FeGNlcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRmllbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GbGF0dGVuZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuR2VvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkhpc3RvZ3JhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5JUC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5JbnRlcmZhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuSm9pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5LZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuS2V5d29yZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Nb2R1bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk5lc3RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5OdWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk51bWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5PYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuT3BlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5QYXJhbWV0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUGVyY29sYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUmVwby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TZWFyY2hUeXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblNlbWFudGljVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TaGFwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuU3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5UYWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblZhcmlhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblZlY3RvckRlbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblZlY3RvclNwYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdHJhaW5pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYW5zaXRpb25MZWZ0SW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYW5zaXRpb25MZWZ0T3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90cmFuc2l0aW9uVG9wSW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYW5zaXRpb25Ub3BPdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy91bmZvbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3VubGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlckF2YXRhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3ZlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlkZW9QbGF5ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19hcmVhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19nYXVnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2dvYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19saW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19tYXBfcmVnaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWV0cmljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfcGllLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190YWdfY2xvdWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGltZWxpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc192ZWdhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dhcm5pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dhcm5pbmdGaWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dvcmRXcmFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93cmVuY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vaWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9pY29uX21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3JlYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL25hbWVkX2NvbG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9pY29uLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaTE4bi9pMThuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0L2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2kxOG4vaTE4bl91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9sb2FkaW5nL19sb2FkaW5nX3N0cmluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZ19zcGlubmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmdfc3Bpbm5lci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25fZGlzcGxheS9fYnV0dG9uX2Rpc3BsYXlfY29udGVudC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9lbXB0eS9idXR0b25fZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25fZW1wdHkvYnV0dG9uX2VtcHR5LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9pY29uL2J1dHRvbl9pY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uX2ljb24vYnV0dG9uX2ljb24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbm5lcl90ZXh0L2lubmVyX3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Rvb2xfdGlwL3Rvb2xfdGlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9vYnNlcnZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9ydGFsL3BvcnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcHJvdmlkZXIvY29tcG9uZW50X2RlZmF1bHRzL2NvbXBvbmVudF9kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdG9vbF90aXAvdG9vbF90aXBfcG9wb3Zlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdG9vbF90aXAvdG9vbF90aXAuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC90b29sX3RpcF9hbmNob3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Rvb2xfdGlwL3Rvb2xfdGlwX2Fycm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC90b29sX3RpcF9tYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC9pY29uX3RpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHRfY29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9jb2xvci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9hbGlnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0X2FsaWduLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbGluay9saW5rLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHQuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyL2Rpc3QvcmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2F1dG9fc2l6ZXIvYXV0b19zaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvYmFkZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbG9yX3BpY2tlci91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvY29sb3JfdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2JhZGdlL2JhZGdlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvYmV0YV9iYWRnZS9iZXRhX2JhZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYWRnZS9iZXRhX2JhZGdlL2JldGFfYmFkZ2Uuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9saW5rL2xpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xpbmsvZXh0ZXJuYWxfbGlua19pY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL2lucHV0X3BvcG92ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZvY3VzX3RyYXAvZm9jdXNfdHJhcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L0NvbWJpbmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvVUkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLWNhbGxiYWNrLXJlZi9kaXN0L2VzMjAxNS9hc3NpZ25SZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1jYWxsYmFjay1yZWYvZGlzdC9lczIwMTUvdXNlUmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2UtY2FsbGJhY2stcmVmL2Rpc3QvZXMyMDE1L3VzZU1lcmdlUmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLXNpZGVjYXIvZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9kaXN0L2VzMjAxNS9leHBvcnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvTG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvRm9jdXNHdWFyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvc2NvcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L1RyYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtY2xpZW50c2lkZS1lZmZlY3QvbGliL2luZGV4LmVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYk9yZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYmJhYmxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy90YWJVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9ET011dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9hbGwtYWZmZWN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvc2FmZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9nZXRBY3RpdmVFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzSW5zaWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzSXNIaWRkZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvY29ycmVjdEZvY3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2ZpcnN0Rm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvc29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2F1dG8tZm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvcGFyZW50aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzU29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvY29tbWFuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvbW92ZUZvY3VzSW5zaWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3JldHVybi1mb2N1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9zaWJsaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3NpZGVjYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L1NpZGVFZmZlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2hvb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dldC1ub25jZS9kaXN0L2VzMjAxNS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L3NpbmdsZXRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L2FnZ3Jlc2l2ZUNhcHR1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L2hhbmRsZVNjcm9sbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvc2lkZWNhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvRWZmZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmlhLWhpZGRlbi9kaXN0L2VzMjAxNS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvSW50ZXJhY3Rpdml0eURpc2FibGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9zaWRlY2FyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL29ic2VydmVyL211dGF0aW9uX29ic2VydmVyL211dGF0aW9uX29ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdXRzaWRlX2NsaWNrX2RldGVjdG9yL291dHNpZGVfY2xpY2tfZGV0ZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlcl9hcnJvdy9fcG9wb3Zlcl9hcnJvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX2Fycm93L19wb3BvdmVyX2Fycm93LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX3BhbmVsL19wb3BvdmVyX3BhbmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wYW5lbC9wYW5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFuZWwvcGFuZWwuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXJfcGFuZWwvX3BvcG92ZXJfcGFuZWwuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zcGFjZXIvc3BhY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zcGFjZXIvc3BhY2VyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NhcmQvY2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY2FyZC9jYXJkX3NlbGVjdC9jYXJkX3NlbGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY2FyZC9jYXJkX3NlbGVjdC9jYXJkX3NlbGVjdC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NhcmQvY2FyZC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vY2hlY2tib3gvY2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vY2hlY2tib3gvY2hlY2tib3guc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fbGFiZWwvZm9ybV9sYWJlbC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZsZXgvZmxleF9ncm91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZmxleC9mbGV4X2dyb3VwLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZmxleC9mbGV4X2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZsZXgvZmxleF9pdGVtLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9ldWlfZm9ybV9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL3ZhbGlkYXRhYmxlX2NvbnRyb2wvdmFsaWRhdGFibGVfY29udHJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9sYWJlbC9mb3JtX2xhYmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9pY29ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXRfY2xlYXJfYnV0dG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9jbGVhcl9idXR0b24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9jdXN0b21faWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXRfaWNvbnMuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvX251bV9pY29ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXQuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2ZpZWxkX3NlYXJjaC9maWVsZF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icm93c2VyL2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZmllbGRfc2VhcmNoL2ZpZWxkX3NlYXJjaC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9lcnJvcl90ZXh0L2Zvcm1fZXJyb3JfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2Vycm9yX3RleHQvZm9ybV9lcnJvcl90ZXh0LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2hlbHBfdGV4dC9mb3JtX2hlbHBfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2hlbHBfdGV4dC9mb3JtX2hlbHBfdGV4dC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9yb3cvZm9ybV9yb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9yb3cvZm9ybV9yb3cuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9ob3Jpem9udGFsX3J1bGUvaG9yaXpvbnRhbF9ydWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9ob3Jpem9udGFsX3J1bGUvaG9yaXpvbnRhbF9ydWxlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9wYW5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0X21lbnUvY29udGV4dF9tZW51X2l0ZW0uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0X21lbnUvY29udGV4dF9tZW51LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9wYW5lbC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vc3dpdGNoL3N3aXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9zd2l0Y2gvc3dpdGNoLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY3NzL2Rpc3QvZW1vdGlvbi1jc3MuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdmVybGF5X21hc2svb3ZlcmxheV9tYXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdmVybGF5X21hc2svb3ZlcmxheV9tYXNrLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvb3ZlcmxheV9tYXNrL292ZXJsYXlfbWFza19ib2R5LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvbm9kZV9tb2R1bGVzL21lbW9pemUtb25lL2Rpc3QvbWVtb2l6ZS1vbmUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL3RpbWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2RvbUhlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvY3JlYXRlR3JpZENvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9WYXJpYWJsZVNpemVHcmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2NyZWF0ZUxpc3RDb21wb25lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvVmFyaWFibGVTaXplTGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9GaXhlZFNpemVHcmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL0ZpeGVkU2l6ZUxpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvc2hhbGxvd0RpZmZlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvYXJlRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvc2hvdWxkQ29tcG9uZW50VXBkYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvY29tYm9fYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvbWF0Y2hpbmdfb3B0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfcGlsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfcGlsbC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfaW5wdXQvY29tYm9fYm94X2lucHV0LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9vcHRpb25zX2xpc3QvY29tYm9fYm94X29wdGlvbnNfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaGlnaGxpZ2h0L2hpZ2hsaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbWFyay9tYXJrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9tYXJrL21hcmsuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9oaWdobGlnaHQvX2hpZ2hsaWdodF9hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hpZ2hsaWdodC9faGlnaGxpZ2h0X2ZpcnN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9maWx0ZXJfZ3JvdXAvZmlsdGVyX3NlbGVjdF9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9maWx0ZXJfZ3JvdXAvZmlsdGVyX3NlbGVjdF9pdGVtLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dF90cnVuY2F0ZS90ZXh0X3RydW5jYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0X3RydW5jYXRlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0X3RydW5jYXRlL3RleHRfdHJ1bmNhdGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0X3RydW5jYXRlL3RleHRfYmxvY2tfdHJ1bmNhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfb3B0aW9uc19saXN0L2NvbWJvX2JveF90aXRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9vcHRpb25zX2xpc3QvY29tYm9fYm94X29wdGlvbnNfbGlzdC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3guc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9wYWdpbmF0aW9uL3RhYmxlX3BhZ2luYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uX2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uX2J1dHRvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbl9idXR0b25fYXJyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3BhZ2luYXRpb24vdGFibGVfcGFnaW5hdGlvbl9kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFicy90YWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFiLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFicy90YWJzX2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFicy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFicy90YWJzLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFicy90YWJiZWRfY29udGVudC90YWJiZWRfY29udGVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZGVsYXlfcmVuZGVyL2RlbGF5X3JlbmRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaGVhbHRoL2hlYWx0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaGVhbHRoL2hlYWx0aC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV93cmFwcGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV93cmFwcGVyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfYnV0dG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV9idXR0b24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV9jYXB0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV9jYXB0aW9uLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2Uuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV9mdWxsc2NyZWVuX3dyYXBwZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX2Z1bGxzY3JlZW5fd3JhcHBlci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX3R5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wcm92aWRlci9wcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL3V0aWxpdHkvdXRpbGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcHJvdmlkZXIvY2FjaGUvY2FjaGVfcHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Byb3ZpZGVyL3N5c3RlbV9jb2xvcl9tb2RlL3N5c3RlbV9jb2xvcl9tb2RlX3Byb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wcm92aWRlci9uZXN0ZWQvbmVzdGVkX2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlX3NlYXJjaC9zZWxlY3RhYmxlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9tYXRjaGluZ19vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfbWVzc2FnZS9zZWxlY3RhYmxlX21lc3NhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9tZXNzYWdlL3NlbGVjdGFibGVfbWVzc2FnZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9saXN0L3NlbGVjdGFibGVfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlX2xpc3Qvc2VsZWN0YWJsZV9saXN0X2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9saXN0L3NlbGVjdGFibGVfbGlzdF9pdGVtLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlX2xpc3Qvc2VsZWN0YWJsZV9saXN0LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL21vYmlsZS9yZXNwb25zaXZlX2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfYm9keS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfZm9vdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9mb290ZXJfY2VsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL190YWJsZV9jZWxsX2NvbnRlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL190YWJsZV9jZWxsX2NvbnRlbnQuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9jZWxsc19zaGFyZWQuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9oZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2hlYWRlcl9jZWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9oZWFkZXJfY2VsbF9jaGVja2JveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX2hlYWRlcl9tb2JpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL21vYmlsZS90YWJsZV9oZWFkZXJfbW9iaWxlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX3NvcnRfbW9iaWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS9tb2JpbGUvdGFibGVfc29ydF9tb2JpbGVfaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9yb3cuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9yb3dfY2VsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93X2NlbGwuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9yb3dfY2VsbF9jaGVja2JveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvYmFzaWNfdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2NvbGxhcHNlZF9pdGVtX2FjdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2FjdGlvbl90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvZXhwYW5kZWRfaXRlbV9hY3Rpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9kZWZhdWx0X2l0ZW1fYWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9jdXN0b21faXRlbV9hY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL3BhZ2luYXRpb25fYmFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9iYXNpY190YWJsZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvc3Vic2NyaWJhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2ZvY3VzTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9vbmxpbmVNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3JldHJ5ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbm90aWZ5TWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9sb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnlDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9tdXRhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9tdXRhdGlvbkNhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2luZmluaXRlUXVlcnlCZWhhdmlvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeUNsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeU9ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9yZWFjdEJhdGNoZWRVcGRhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRCYXRjaFVwZGF0ZXNGbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvbG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRMb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L1F1ZXJ5Q2xpZW50UHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvdXNlQmFzZVF1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC91c2VRdWVyeS5qcyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9EYXRhQ29udGVudFdpZGdldC9EYXRhQ29udGVudFdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9FbnRpdHlJbmZvV2lkZ2V0L0VudGl0eUluZm9XaWRnZXQudHN4IiwgIi4uL3NyYy9tb2RlbC9TdHJ1Y3R1cmVSZW5kZXJpbmcudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvSnNvbkFwaVdpZGdldC9Kc29uQXBpV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9EZXNjcmlwdGlvbldpZGdldC9EZXNjcmlwdGlvbldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9EZXNjcmlwdGlvbldpZGdldC9EZXNjcmlwdGlvblByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9JcmlXaWRnZXQvSXJpV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9UYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L1RhYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvT250b2xvZ3lJbmZvV2lkZ2V0L09udG9sb2d5SW5mb1dpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0U2VtTG9va1AvSGllcmFyY2h5V2lkZ2V0LnRzeCIsICIuLi9zcmMvYXBpL1Nrb3NBcGkudHMiLCAiLi4vc3JjL2FwaS9PbnRvUG9ydGFsQXBpLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0Nyb3NzUmVmV2lkZ2V0L0Nyb3NzUmVmVGFiV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L01ldGFkYXRhV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0L0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvUmVzb3VyY2VzV2lkZ2V0L1Jlc291cmNlc1dpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9TZWFyY2hCYXJXaWRnZXQvU2VhcmNoQmFyV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0L1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0L01ldGFkYXRhQ29tcGFjdC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9FbnRpdHlPbnRvTGlzdFdpZGdldC9FbnRpdHlPbnRvTGlzdFdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9FbnRpdHlEZWZpbmVkQnlXaWRnZXQvRW50aXR5RGVmaW5lZEJ5V2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0VudGl0eVJlbGF0aW9uc1dpZGdldC9FbnRpdHlSZWxhdGlvbnNXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvVGVybURlcGljdGlvbldpZGdldC9UZXJtRGVwaWN0aW9uV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0dyYXBoVmlld1dpZGdldC9HcmFwaFZpZXdXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIFRPRE86IHRoaXMgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGdldHMgaW1wb3J0ZWQgZHVyaW5nIGJ1aWxkLlxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNy4wLjInO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xuZXhwb3J0cy5GcmFnbWVudCA9IDB4ZWFjYjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IDB4ZWFjYztcbmV4cG9ydHMuUHJvZmlsZXIgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbmV4cG9ydHMuU3VzcGVuc2UgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBleHBvcnRzLkZyYWdtZW50ID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBleHBvcnRzLlN0cmljdE1vZGUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIGV4cG9ydHMuUHJvZmlsZXIgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBleHBvcnRzLlN1c3BlbnNlID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZGlzcGF0Y2hlci5cbiAqL1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge1JlYWN0Q29tcG9uZW50fVxuICAgKi9cbiAgY3VycmVudDogbnVsbFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBiYXRjaCdzIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBob3cgbG9uZyBhbiB1cGRhdGVcbiAqIHNob3VsZCBzdXNwZW5kIGZvciBpZiBpdCBuZWVkcyB0by5cbiAqL1xudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0ge1xuICB0cmFuc2l0aW9uOiAwXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqL1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0ge307XG52YXIgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IG51bGw7XG5mdW5jdGlvbiBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spIHtcbiAge1xuICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgfVxufVxuXG57XG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lID0gZnVuY3Rpb24gKHN0YWNrKSB7XG4gICAge1xuICAgICAgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IHN0YWNrO1xuICAgIH1cbiAgfTsgLy8gU3RhY2sgaW1wbGVtZW50YXRpb24gaW5qZWN0ZWQgYnkgdGhlIGN1cnJlbnQgcmVuZGVyZXIuXG5cblxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnOyAvLyBBZGQgYW4gZXh0cmEgdG9wIGZyYW1lIHdoaWxlIGFuIGVsZW1lbnQgaXMgYmVpbmcgdmFsaWRhdGVkXG5cbiAgICBpZiAoY3VycmVudEV4dHJhU3RhY2tGcmFtZSkge1xuICAgICAgc3RhY2sgKz0gY3VycmVudEV4dHJhU3RhY2tGcmFtZTtcbiAgICB9IC8vIERlbGVnYXRlIHRvIHRoZSBpbmplY3RlZCByZW5kZXJlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICB2YXIgaW1wbCA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrO1xuXG4gICAgaWYgKGltcGwpIHtcbiAgICAgIHN0YWNrICs9IGltcGwoKSB8fCAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH07XG59XG5cbi8qKlxuICogVXNlZCBieSBhY3QoKSB0byB0cmFjayB3aGV0aGVyIHlvdSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGUuXG4gKi9cbnZhciBJc1NvbWVSZW5kZXJlckFjdGluZyA9IHtcbiAgY3VycmVudDogZmFsc2Vcbn07XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IHtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICBSZWFjdEN1cnJlbnRPd25lcjogUmVhY3RDdXJyZW50T3duZXIsXG4gIElzU29tZVJlbmRlcmVyQWN0aW5nOiBJc1NvbWVSZW5kZXJlckFjdGluZyxcbiAgLy8gVXNlZCBieSByZW5kZXJlcnMgdG8gYXZvaWQgYnVuZGxpbmcgb2JqZWN0LWFzc2lnbiB0d2ljZSBpbiBVTUQgYnVuZGxlczpcbiAgYXNzaWduOiBfYXNzaWduXG59O1xuXG57XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lO1xufVxuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9O1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgdmFyIF9jb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gX2NvbnN0cnVjdG9yICYmIChfY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgX2NvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJztcbiAgICB2YXIgd2FybmluZ0tleSA9IGNvbXBvbmVudE5hbWUgKyBcIi5cIiArIGNhbGxlck5hbWU7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3IoXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBcIiArICdUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiAnICsgJ0luc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCAnICsgJ2NsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9IHRydWU7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUuXG4gKi9cblxuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuXG4gICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQgc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gTmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTtcbiAgfVxufTtcblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7IC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlXG4gIC8vIHJlbmRlcmVyLlxuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBjb21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9cbiAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gIGlmICghKHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHwgcGFydGlhbFN0YXRlID09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwic2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCIgKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xufTtcbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cblxuQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbn07XG4vKipcbiAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNzaWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2VcbiAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzXG4gKiBtb2Rlcm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYgaXQncyBhY2Nlc3NlZC5cbiAqL1xuXG5cbntcbiAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXSxcbiAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXVxuICB9O1xuXG4gIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKTtcblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGZvciAodmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykge1xuICAgIGlmIChkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7XG4gICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuXG5Db21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuLyoqXG4gKiBDb252ZW5pZW5jZSBjb21wb25lbnQgd2l0aCBkZWZhdWx0IHNoYWxsb3cgZXF1YWxpdHkgY2hlY2sgZm9yIHNDVS5cbiAqL1xuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbnZhciBwdXJlQ29tcG9uZW50UHJvdG90eXBlID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuY29uc3RydWN0b3IgPSBQdXJlQ29tcG9uZW50OyAvLyBBdm9pZCBhbiBleHRyYSBwcm90b3R5cGUganVtcCBmb3IgdGhlc2UgbWV0aG9kcy5cblxuX2Fzc2lnbihwdXJlQ29tcG9uZW50UHJvdG90eXBlLCBDb21wb25lbnQucHJvdG90eXBlKTtcblxucHVyZUNvbXBvbmVudFByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5cbi8vIGFuIGltbXV0YWJsZSBvYmplY3Qgd2l0aCBhIHNpbmdsZSBtdXRhYmxlIHZhbHVlXG5mdW5jdGlvbiBjcmVhdGVSZWYoKSB7XG4gIHZhciByZWZPYmplY3QgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWZPYmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIHJlZk9iamVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5GcmFnbWVudDpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgZXhwb3J0cy5Qcm9maWxlcjpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBleHBvcnRzLlN0cmljdE1vZGU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBleHBvcnRzLlN1c3BlbnNlOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biwgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgY29uZmlnLl9fc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gY29uZmlnLl9fc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBjb21wb25lbnROYW1lLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxudmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNlbGZcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzb3VyY2VcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG4vKipcbiAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCBvZiB0aGUgZ2l2ZW4gdHlwZS5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjY3JlYXRlZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIGtleSA9IG51bGw7XG4gIHZhciByZWYgPSBudWxsO1xuICB2YXIgc2VsZiA9IG51bGw7XG4gIHZhciBzb3VyY2UgPSBudWxsO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICByZWYgPSBjb25maWcucmVmO1xuXG4gICAgICB7XG4gICAgICAgIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zZWxmO1xuICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NvdXJjZTsgLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdFxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChrZXkgfHwgcmVmKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xufVxuZnVuY3Rpb24gY2xvbmVBbmRSZXBsYWNlS2V5KG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudChvbGRFbGVtZW50LnR5cGUsIG5ld0tleSwgb2xkRWxlbWVudC5yZWYsIG9sZEVsZW1lbnQuX3NlbGYsIG9sZEVsZW1lbnQuX3NvdXJjZSwgb2xkRWxlbWVudC5fb3duZXIsIG9sZEVsZW1lbnQucHJvcHMpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2Nsb25lZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIGlmICghIShlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHVuZGVmaW5lZCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArIGVsZW1lbnQgKyBcIi5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm9wTmFtZTsgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuXG4gIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cblxuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjsgLy8gU2VsZiBpcyBwcmVzZXJ2ZWQgc2luY2UgdGhlIG93bmVyIGlzIHByZXNlcnZlZC5cblxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7IC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuXG4gIHZhciBzb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7IC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cblxuICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgLy8gU2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuXG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuXG5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuXG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIGlmIChjb25maWdbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQoZWxlbWVudC50eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxudmFyIFNFUEFSQVRPUiA9ICcuJztcbnZhciBTVUJTRVBBUkFUT1IgPSAnOic7XG4vKipcbiAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nO1xuICB2YXIgZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPSc6ICc9MCcsXG4gICAgJzonOiAnPTInXG4gIH07XG4gIHZhciBlc2NhcGVkU3RyaW5nID0ga2V5LnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG4gIHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nO1xufVxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4ID0gL1xcLysvZztcblxuZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgZWxlbWVudCB3aXRoaW4gYSBzZXQuXG4gKlxuICogQHBhcmFtIHsqfSBlbGVtZW50IEEgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEtleShlbGVtZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnb2JqZWN0JyAmJiBlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICByZXR1cm4gZXNjYXBlKCcnICsgZWxlbWVudC5rZXkpO1xuICB9IC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG5cblxuICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuYW1lU29GYXIsIGNhbGxiYWNrKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuXG4gIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQgYXMgbnVsbC5cbiAgICBjaGlsZHJlbiA9IG51bGw7XG4gIH1cblxuICB2YXIgaW52b2tlQ2FsbGJhY2sgPSBmYWxzZTtcblxuICBpZiAoY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgc3dpdGNoIChjaGlsZHJlbi4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGlmIChpbnZva2VDYWxsYmFjaykge1xuICAgIHZhciBfY2hpbGQgPSBjaGlsZHJlbjtcbiAgICB2YXIgbWFwcGVkQ2hpbGQgPSBjYWxsYmFjayhfY2hpbGQpOyAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3M6XG5cbiAgICB2YXIgY2hpbGRLZXkgPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0RWxlbWVudEtleShfY2hpbGQsIDApIDogbmFtZVNvRmFyO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgICB2YXIgZXNjYXBlZENoaWxkS2V5ID0gJyc7XG5cbiAgICAgIGlmIChjaGlsZEtleSAhPSBudWxsKSB7XG4gICAgICAgIGVzY2FwZWRDaGlsZEtleSA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShjaGlsZEtleSkgKyAnLyc7XG4gICAgICB9XG5cbiAgICAgIG1hcEludG9BcnJheShtYXBwZWRDaGlsZCwgYXJyYXksIGVzY2FwZWRDaGlsZEtleSwgJycsIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7XG4gICAgICAgIG1hcHBlZENoaWxkID0gY2xvbmVBbmRSZXBsYWNlS2V5KG1hcHBlZENoaWxkLCAvLyBLZWVwIGJvdGggdGhlIChtYXBwZWQpIGFuZCBvbGQga2V5cyBpZiB0aGV5IGRpZmZlciwganVzdCBhc1xuICAgICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgICAgZXNjYXBlZFByZWZpeCArICggLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBSZWFjdC5Qb3J0YWwgZG9lc24ndCBoYXZlIGEga2V5XG4gICAgICAgIG1hcHBlZENoaWxkLmtleSAmJiAoIV9jaGlsZCB8fCBfY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpID8gLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBleGlzdGluZyBlbGVtZW50J3Mga2V5IGNhbiBiZSBhIG51bWJlclxuICAgICAgICBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoJycgKyBtYXBwZWRDaGlsZC5rZXkpICsgJy8nIDogJycpICsgY2hpbGRLZXkpO1xuICAgICAgfVxuXG4gICAgICBhcnJheS5wdXNoKG1hcHBlZENoaWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cblxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGl0ZXJhYmxlQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gPT09IGl0ZXJhYmxlQ2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgICAgd2FybignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGl0ZXJhYmxlQ2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICB2YXIgaWkgPSAwO1xuXG4gICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSAnJyArIGNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZykgKyBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBNYXBzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5tYXBcbiAqXG4gKiBUaGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZnVuYyBUaGUgbWFwIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLlxuICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBjb3VudCA9IDA7XG4gIG1hcEludG9BcnJheShjaGlsZHJlbiwgcmVzdWx0LCAnJywgJycsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGNvdW50KyspO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzXG4gKiBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBuID0gMDtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBuKys7IC8vIERvbid0IHJldHVybiBhbnl0aGluZ1xuICB9KTtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmcuXG4gIH0sIGZvckVhY2hDb250ZXh0KTtcbn1cbi8qKlxuICogRmxhdHRlbiBhIGNoaWxkcmVuIG9iamVjdCAodHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gKSBhbmRcbiAqIHJldHVybiBhbiBhcnJheSB3aXRoIGFwcHJvcHJpYXRlbHkgcmUta2V5ZWQgY2hpbGRyZW4uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVudG9hcnJheVxuICovXG5cblxuZnVuY3Rpb24gdG9BcnJheShjaGlsZHJlbikge1xuICByZXR1cm4gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfSkgfHwgW107XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZVxuICogaXMgb25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVub25seVxuICpcbiAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGEgc2luZ2xlIGNoaWxkIGdldHNcbiAqIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBlciwgYnV0IHRoZSBwdXJwb3NlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHRvXG4gKiBhYnN0cmFjdCBhd2F5IHRoZSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBvZiBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGNoaWxkcmVuIENoaWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLlxuICogQHJldHVybiB7UmVhY3RFbGVtZW50fSBUaGUgZmlyc3QgYW5kIG9ubHkgYFJlYWN0RWxlbWVudGAgY29udGFpbmVkIGluIHRoZVxuICogc3RydWN0dXJlLlxuICovXG5cblxuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlLCBjYWxjdWxhdGVDaGFuZ2VkQml0cykge1xuICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGN1bGF0ZUNoYW5nZWRCaXRzID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgIT09IG51bGwgJiYgdHlwZW9mIGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdjcmVhdGVDb250ZXh0OiBFeHBlY3RlZCB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjYWxjdWxhdGVDaGFuZ2VkQml0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICBfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IGNhbGN1bGF0ZUNoYW5nZWRCaXRzLFxuICAgIC8vIEFzIGEgd29ya2Fyb3VuZCB0byBzdXBwb3J0IG11bHRpcGxlIGNvbmN1cnJlbnQgcmVuZGVyZXJzLCB3ZSBjYXRlZ29yaXplXG4gICAgLy8gc29tZSByZW5kZXJlcnMgYXMgcHJpbWFyeSBhbmQgb3RoZXJzIGFzIHNlY29uZGFyeS4gV2Ugb25seSBleHBlY3RcbiAgICAvLyB0aGVyZSB0byBiZSB0d28gY29uY3VycmVudCByZW5kZXJlcnMgYXQgbW9zdDogUmVhY3QgTmF0aXZlIChwcmltYXJ5KSBhbmRcbiAgICAvLyBGYWJyaWMgKHNlY29uZGFyeSk7IFJlYWN0IERPTSAocHJpbWFyeSkgYW5kIFJlYWN0IEFSVCAoc2Vjb25kYXJ5KS5cbiAgICAvLyBTZWNvbmRhcnkgcmVuZGVyZXJzIHN0b3JlIHRoZWlyIGNvbnRleHQgdmFsdWVzIG9uIHNlcGFyYXRlIGZpZWxkcy5cbiAgICBfY3VycmVudFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgX2N1cnJlbnRWYWx1ZTI6IGRlZmF1bHRWYWx1ZSxcbiAgICAvLyBVc2VkIHRvIHRyYWNrIGhvdyBtYW55IGNvbmN1cnJlbnQgcmVuZGVyZXJzIHRoaXMgY29udGV4dCBjdXJyZW50bHlcbiAgICAvLyBzdXBwb3J0cyB3aXRoaW4gaW4gYSBzaW5nbGUgcmVuZGVyZXIuIFN1Y2ggYXMgcGFyYWxsZWwgc2VydmVyIHJlbmRlcmluZy5cbiAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgLy8gVGhlc2UgYXJlIGNpcmN1bGFyXG4gICAgUHJvdmlkZXI6IG51bGwsXG4gICAgQ29uc3VtZXI6IG51bGxcbiAgfTtcbiAgY29udGV4dC5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfUFJPVklERVJfVFlQRSxcbiAgICBfY29udGV4dDogY29udGV4dFxuICB9O1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSBmYWxzZTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IGZhbHNlO1xuXG4gIHtcbiAgICAvLyBBIHNlcGFyYXRlIG9iamVjdCwgYnV0IHByb3hpZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dCBvYmplY3QgZm9yXG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEl0IGhhcyBhIGRpZmZlcmVudCAkJHR5cGVvZiwgc28gd2UgY2FuIHByb3Blcmx5XG4gICAgLy8gd2FybiBmb3IgdGhlIGluY29ycmVjdCB1c2FnZSBvZiBDb250ZXh0IGFzIGEgQ29uc3VtZXIuXG4gICAgdmFyIENvbnN1bWVyID0ge1xuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0LFxuICAgICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0c1xuICAgIH07IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG5vdCBzZXR0aW5nIGEgdmFsdWUsIHdoaWNoIGlzIGludGVudGlvbmFsIGhlcmVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnN1bWVyLCB7XG4gICAgICBQcm92aWRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuUHJvdmlkZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuUHJvdmlkZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuUHJvdmlkZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9Qcm92aWRlcikge1xuICAgICAgICAgIGNvbnRleHQuUHJvdmlkZXIgPSBfUHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBfY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZTI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUyKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlMiA9IF9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3RocmVhZENvdW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll90aHJlYWRDb3VudDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX3RocmVhZENvdW50KSB7XG4gICAgICAgICAgY29udGV4dC5fdGhyZWFkQ291bnQgPSBfdGhyZWFkQ291bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBDb25zdW1lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuQ29uc3VtZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuQ29uc3VtZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkaXNwbGF5TmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5kaXNwbGF5TmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyKSB7XG4gICAgICAgICAgICB3YXJuKCdTZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gQ29udGV4dC5Db25zdW1lciBoYXMgbm8gZWZmZWN0LiAnICsgXCJZb3Ugc2hvdWxkIHNldCBpdCBkaXJlY3RseSBvbiB0aGUgY29udGV4dCB3aXRoIENvbnRleHQuZGlzcGxheU5hbWUgPSAnJXMnLlwiLCBkaXNwbGF5TmFtZSk7XG5cbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBwcm9wZXJ0aWVzIGJlY2F1c2UgaXQgZG9lc24ndCB1bmRlcnN0YW5kIGRlZmluZVByb3BlcnR5XG5cbiAgICBjb250ZXh0LkNvbnN1bWVyID0gQ29uc3VtZXI7XG4gIH1cblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gbnVsbDtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG52YXIgVW5pbml0aWFsaXplZCA9IC0xO1xudmFyIFBlbmRpbmcgPSAwO1xudmFyIFJlc29sdmVkID0gMTtcbnZhciBSZWplY3RlZCA9IDI7XG5cbmZ1bmN0aW9uIGxhenlJbml0aWFsaXplcihwYXlsb2FkKSB7XG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICB2YXIgY3RvciA9IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB2YXIgdGhlbmFibGUgPSBjdG9yKCk7IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cbiAgICB2YXIgcGVuZGluZyA9IHBheWxvYWQ7XG4gICAgcGVuZGluZy5fc3RhdHVzID0gUGVuZGluZztcbiAgICBwZW5kaW5nLl9yZXN1bHQgPSB0aGVuYWJsZTtcbiAgICB0aGVuYWJsZS50aGVuKGZ1bmN0aW9uIChtb2R1bGVPYmplY3QpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRFeHBvcnQgPSBtb2R1bGVPYmplY3QuZGVmYXVsdDtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRFeHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXJyb3IoJ2xhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuICcgKyAnSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICAnICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICdjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wJyArIFwib3J0KCcuL015Q29tcG9uZW50JykpXCIsIG1vZHVsZU9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cblxuICAgICAgICB2YXIgcmVzb2x2ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZXNvbHZlZC5fc3RhdHVzID0gUmVzb2x2ZWQ7XG4gICAgICAgIHJlc29sdmVkLl9yZXN1bHQgPSBkZWZhdWx0RXhwb3J0O1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUGVuZGluZykge1xuICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZWplY3RlZC5fc3RhdHVzID0gUmVqZWN0ZWQ7XG4gICAgICAgIHJlamVjdGVkLl9yZXN1bHQgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFJlc29sdmVkKSB7XG4gICAgcmV0dXJuIHBheWxvYWQuX3Jlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBwYXlsb2FkLl9yZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF6eShjdG9yKSB7XG4gIHZhciBwYXlsb2FkID0ge1xuICAgIC8vIFdlIHVzZSB0aGVzZSBmaWVsZHMgdG8gc3RvcmUgdGhlIHJlc3VsdC5cbiAgICBfc3RhdHVzOiAtMSxcbiAgICBfcmVzdWx0OiBjdG9yXG4gIH07XG4gIHZhciBsYXp5VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgIF9wYXlsb2FkOiBwYXlsb2FkLFxuICAgIF9pbml0OiBsYXp5SW5pdGlhbGl6ZXJcbiAgfTtcblxuICB7XG4gICAgLy8gSW4gcHJvZHVjdGlvbiwgdGhpcyB3b3VsZCBqdXN0IHNldCBpdCBvbiB0aGUgb2JqZWN0LlxuICAgIHZhciBkZWZhdWx0UHJvcHM7XG4gICAgdmFyIHByb3BUeXBlczsgLy8gJEZsb3dGaXhNZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGF6eVR5cGUsIHtcbiAgICAgIGRlZmF1bHRQcm9wczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0UHJvcHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld0RlZmF1bHRQcm9wcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBkZWZhdWx0UHJvcHNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBkZWZhdWx0UHJvcHMgPSBuZXdEZWZhdWx0UHJvcHM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ2RlZmF1bHRQcm9wcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByb3BUeXBlczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBwcm9wVHlwZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1Byb3BUeXBlcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBwcm9wVHlwZXNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBwcm9wVHlwZXMgPSBuZXdQcm9wVHlwZXM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ3Byb3BUeXBlcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxhenlUeXBlO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkUmVmKHJlbmRlcikge1xuICB7XG4gICAgaWYgKHJlbmRlciAhPSBudWxsICYmIHJlbmRlci4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgcmVjZWl2ZWQgYSBgbWVtb2AgJyArICdjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgJyArICdtZW1vKGZvcndhcmRSZWYoLi4uKSkuJyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgd2FzIGdpdmVuICVzLicsIHJlbmRlciA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByZW5kZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVuZGVyLmxlbmd0aCAhPT0gMCAmJiByZW5kZXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzJywgcmVuZGVyLmxlbmd0aCA9PT0gMSA/ICdEaWQgeW91IGZvcmdldCB0byB1c2UgdGhlIHJlZiBwYXJhbWV0ZXI/JyA6ICdBbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgd2lsbCBiZSB1bmRlZmluZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbmRlciAhPSBudWxsKSB7XG4gICAgICBpZiAocmVuZGVyLmRlZmF1bHRQcm9wcyAhPSBudWxsIHx8IHJlbmRlci5wcm9wVHlwZXMgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IHByb3BUeXBlcyBvciBkZWZhdWx0UHJvcHMuICcgKyAnRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgcmVuZGVyOiByZW5kZXJcbiAgfTtcblxuICB7XG4gICAgdmFyIG93bk5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRUeXBlLCAnZGlzcGxheU5hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG93bk5hbWUgPSBuYW1lO1xuXG4gICAgICAgIGlmIChyZW5kZXIuZGlzcGxheU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJlbmRlci5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IGV4cG9ydHMuRnJhZ21lbnQgfHwgdHlwZSA9PT0gZXhwb3J0cy5Qcm9maWxlciB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBleHBvcnRzLlN0cmljdE1vZGUgfHwgdHlwZSA9PT0gZXhwb3J0cy5TdXNwZW5zZSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUgfHwgdHlwZVswXSA9PT0gUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWVtbyh0eXBlLCBjb21wYXJlKSB7XG4gIHtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSkge1xuICAgICAgZXJyb3IoJ21lbW86IFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgY29tcG9uZW50LiBJbnN0ZWFkICcgKyAncmVjZWl2ZWQ6ICVzJywgdHlwZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB0eXBlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX01FTU9fVFlQRSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbXBhcmU6IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb21wYXJlXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTtcblxuICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50O1xuXG4gIGlmICghKGRpc3BhdGNoZXIgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gdXNlQ29udGV4dChDb250ZXh0LCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuXG4gIHtcbiAgICBpZiAodW5zdGFibGVfb2JzZXJ2ZWRCaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yKCd1c2VDb250ZXh0KCkgc2Vjb25kIGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgJyArICd1c2UgaW4gUmVhY3QuIFBhc3NpbmcgaXQgaXMgbm90IHN1cHBvcnRlZC4gJyArICdZb3UgcGFzc2VkOiAlcy4lcycsIHVuc3RhYmxlX29ic2VydmVkQml0cywgdHlwZW9mIHVuc3RhYmxlX29ic2VydmVkQml0cyA9PT0gJ251bWJlcicgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMl0pID8gJ1xcblxcbkRpZCB5b3UgY2FsbCBhcnJheS5tYXAodXNlQ29udGV4dCk/ICcgKyAnQ2FsbGluZyBIb29rcyBpbnNpZGUgYSBsb29wIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnIDogJycpO1xuICAgIH0gLy8gVE9ETzogYWRkIGEgbW9yZSBnZW5lcmljIHdhcm5pbmcgZm9yIGludmFsaWQgdmFsdWVzLlxuXG5cbiAgICBpZiAoQ29udGV4dC5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVhbENvbnRleHQgPSBDb250ZXh0Ll9jb250ZXh0OyAvLyBEb24ndCBkZWR1cGxpY2F0ZSBiZWNhdXNlIHRoaXMgbGVnaXRpbWF0ZWx5IGNhdXNlcyBidWdzXG4gICAgICAvLyBhbmQgbm9ib2R5IHNob3VsZCBiZSB1c2luZyB0aGlzIGluIGV4aXN0aW5nIGNvZGUuXG5cbiAgICAgIGlmIChyZWFsQ29udGV4dC5Db25zdW1lciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQsIG1heSBjYXVzZSBidWdzLCBhbmQgd2lsbCBiZSAnICsgJ3JlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfSBlbHNlIGlmIChyZWFsQ29udGV4dC5Qcm92aWRlciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuUHJvdmlkZXIpIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbn1cbmZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZihpbml0aWFsVmFsdWUpO1xufVxuZnVuY3Rpb24gdXNlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VNZW1vKGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICB9XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5TdXNwZW5zZTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKGVsZW1lbnRQcm9wcykge1xuICBpZiAoZWxlbWVudFByb3BzICE9PSBudWxsICYmIGVsZW1lbnRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKGVsZW1lbnRQcm9wcy5fX3NvdXJjZSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG5cbiAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmZvO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICB9XG5cbiAge1xuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcbiAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gIGlmICghdmFsaWRUeXBlKSB7XG4gICAgdmFyIGluZm8gPSAnJztcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgIH1cblxuICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgaWYgKHZhbGlkVHlwZSkge1xuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50KSB7XG4gICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG52YXIgZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkgPSBmYWxzZTtcbmZ1bmN0aW9uIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbih0eXBlKSB7XG4gIHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uLmJpbmQobnVsbCwgdHlwZSk7XG4gIHZhbGlkYXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkpIHtcbiAgICAgIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gdHJ1ZTtcblxuICAgICAgd2FybignUmVhY3QuY3JlYXRlRmFjdG9yeSgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIENvbnNpZGVyIHVzaW5nIEpTWCAnICsgJ29yIHVzZSBSZWFjdC5jcmVhdGVFbGVtZW50KCkgZGlyZWN0bHkgaW5zdGVhZC4nKTtcbiAgICB9IC8vIExlZ2FjeSBob29rOiByZW1vdmUgaXRcblxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3RvcnksICd0eXBlJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignRmFjdG9yeS50eXBlIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB0aGUgY2xhc3MgZGlyZWN0bHkgJyArICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5LicpO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbn1cbmZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgbmV3RWxlbWVudCA9IGNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG57XG5cbiAgdHJ5IHtcbiAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXG5cbiAgICBuZXcgTWFwKFtbZnJvemVuT2JqZWN0LCBudWxsXV0pO1xuICAgIG5ldyBTZXQoW2Zyb3plbk9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxufVxuXG52YXIgY3JlYXRlRWxlbWVudCQxID0gIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbiA7XG52YXIgY2xvbmVFbGVtZW50JDEgPSAgY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNyZWF0ZUZhY3RvcnkgPSAgY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uIDtcbnZhciBDaGlsZHJlbiA9IHtcbiAgbWFwOiBtYXBDaGlsZHJlbixcbiAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBjb3VudDogY291bnRDaGlsZHJlbixcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgb25seTogb25seUNoaWxkXG59O1xuXG5leHBvcnRzLkNoaWxkcmVuID0gQ2hpbGRyZW47XG5leHBvcnRzLkNvbXBvbmVudCA9IENvbXBvbmVudDtcbmV4cG9ydHMuUHVyZUNvbXBvbmVudCA9IFB1cmVDb21wb25lbnQ7XG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gUmVhY3RTaGFyZWRJbnRlcm5hbHM7XG5leHBvcnRzLmNsb25lRWxlbWVudCA9IGNsb25lRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yeSA9IGNyZWF0ZUZhY3Rvcnk7XG5leHBvcnRzLmNyZWF0ZVJlZiA9IGNyZWF0ZVJlZjtcbmV4cG9ydHMuZm9yd2FyZFJlZiA9IGZvcndhcmRSZWY7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5leHBvcnRzLmxhenkgPSBsYXp5O1xuZXhwb3J0cy5tZW1vID0gbWVtbztcbmV4cG9ydHMudXNlQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaztcbmV4cG9ydHMudXNlQ29udGV4dCA9IHVzZUNvbnRleHQ7XG5leHBvcnRzLnVzZURlYnVnVmFsdWUgPSB1c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VFZmZlY3QgPSB1c2VFZmZlY3Q7XG5leHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSB1c2VJbXBlcmF0aXZlSGFuZGxlO1xuZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QgPSB1c2VMYXlvdXRFZmZlY3Q7XG5leHBvcnRzLnVzZU1lbW8gPSB1c2VNZW1vO1xuZXhwb3J0cy51c2VSZWR1Y2VyID0gdXNlUmVkdWNlcjtcbmV4cG9ydHMudXNlUmVmID0gdXNlUmVmO1xuZXhwb3J0cy51c2VTdGF0ZSA9IHVzZVN0YXRlO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nID0gZmFsc2U7XG52YXIgZW5hYmxlUHJvZmlsaW5nID0gZmFsc2U7XG5cbnZhciByZXF1ZXN0SG9zdENhbGxiYWNrO1xudmFyIHJlcXVlc3RIb3N0VGltZW91dDtcbnZhciBjYW5jZWxIb3N0VGltZW91dDtcbnZhciByZXF1ZXN0UGFpbnQ7XG52YXIgaGFzUGVyZm9ybWFuY2VOb3cgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmlmIChoYXNQZXJmb3JtYW5jZU5vdykge1xuICB2YXIgbG9jYWxQZXJmb3JtYW5jZSA9IHBlcmZvcm1hbmNlO1xuXG4gIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsb2NhbFBlcmZvcm1hbmNlLm5vdygpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIGxvY2FsRGF0ZSA9IERhdGU7XG4gIHZhciBpbml0aWFsVGltZSA9IGxvY2FsRGF0ZS5ub3coKTtcblxuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxEYXRlLm5vdygpIC0gaW5pdGlhbFRpbWU7XG4gIH07XG59XG5cbmlmICggLy8gSWYgU2NoZWR1bGVyIHJ1bnMgaW4gYSBub24tRE9NIGVudmlyb25tZW50LCBpdCBmYWxscyBiYWNrIHRvIGEgbmFpdmVcbi8vIGltcGxlbWVudGF0aW9uIHVzaW5nIHNldFRpbWVvdXQuXG50eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAvLyBDaGVjayBpZiBNZXNzYWdlQ2hhbm5lbCBpcyBzdXBwb3J0ZWQsIHRvby5cbnR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAvLyBJZiB0aGlzIGFjY2lkZW50YWxseSBnZXRzIGltcG9ydGVkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQsIGUuZy4gSmF2YVNjcmlwdENvcmUsXG4gIC8vIGZhbGxiYWNrIHRvIGEgbmFpdmUgaW1wbGVtZW50YXRpb24uXG4gIHZhciBfY2FsbGJhY2sgPSBudWxsO1xuICB2YXIgX3RpbWVvdXRJRCA9IG51bGw7XG5cbiAgdmFyIF9mbHVzaENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgIHZhciBoYXNSZW1haW5pbmdUaW1lID0gdHJ1ZTtcblxuICAgICAgICBfY2FsbGJhY2soaGFzUmVtYWluaW5nVGltZSwgY3VycmVudFRpbWUpO1xuXG4gICAgICAgIF9jYWxsYmFjayA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoX2ZsdXNoQ2FsbGJhY2ssIDApO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdENhbGxiYWNrID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgaWYgKF9jYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IHJlLWVudHJhbmN5LlxuICAgICAgc2V0VGltZW91dChyZXF1ZXN0SG9zdENhbGxiYWNrLCAwLCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9jYWxsYmFjayA9IGNiO1xuICAgICAgc2V0VGltZW91dChfZmx1c2hDYWxsYmFjaywgMCk7XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0VGltZW91dCA9IGZ1bmN0aW9uIChjYiwgbXMpIHtcbiAgICBfdGltZW91dElEID0gc2V0VGltZW91dChjYiwgbXMpO1xuICB9O1xuXG4gIGNhbmNlbEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIGNsZWFyVGltZW91dChfdGltZW91dElEKTtcbiAgfTtcblxuICBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICByZXF1ZXN0UGFpbnQgPSBleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZnVuY3Rpb24gKCkge307XG59IGVsc2Uge1xuICAvLyBDYXB0dXJlIGxvY2FsIHJlZmVyZW5jZXMgdG8gbmF0aXZlIEFQSXMsIGluIGNhc2UgYSBwb2x5ZmlsbCBvdmVycmlkZXMgdGhlbS5cbiAgdmFyIF9zZXRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQ7XG4gIHZhciBfY2xlYXJUaW1lb3V0ID0gd2luZG93LmNsZWFyVGltZW91dDtcblxuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gVE9ETzogU2NoZWR1bGVyIG5vIGxvbmdlciByZXF1aXJlcyB0aGVzZSBtZXRob2RzIHRvIGJlIHBvbHlmaWxsZWQuIEJ1dFxuICAgIC8vIG1heWJlIHdlIHdhbnQgdG8gY29udGludWUgd2FybmluZyBpZiB0aGV5IGRvbid0IGV4aXN0LCB0byBwcmVzZXJ2ZSB0aGVcbiAgICAvLyBvcHRpb24gdG8gcmVseSBvbiBpdCBpbiB0aGUgZnV0dXJlP1xuICAgIHZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgIHZhciBjYW5jZWxBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZTtcblxuICAgIGlmICh0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBVc2luZyBjb25zb2xlWydlcnJvciddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHJlcXVlc3RBbmltYXRpb25GcmFtZS4gXCIgKyAnTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBjYW5jZWxBbmltYXRpb25GcmFtZS4gXCIgKyAnTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gIHZhciBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICB2YXIgdGFza1RpbWVvdXRJRCA9IC0xOyAvLyBTY2hlZHVsZXIgcGVyaW9kaWNhbGx5IHlpZWxkcyBpbiBjYXNlIHRoZXJlIGlzIG90aGVyIHdvcmsgb24gdGhlIG1haW5cbiAgLy8gdGhyZWFkLCBsaWtlIHVzZXIgZXZlbnRzLiBCeSBkZWZhdWx0LCBpdCB5aWVsZHMgbXVsdGlwbGUgdGltZXMgcGVyIGZyYW1lLlxuICAvLyBJdCBkb2VzIG5vdCBhdHRlbXB0IHRvIGFsaWduIHdpdGggZnJhbWUgYm91bmRhcmllcywgc2luY2UgbW9zdCB0YXNrcyBkb24ndFxuICAvLyBuZWVkIHRvIGJlIGZyYW1lIGFsaWduZWQ7IGZvciB0aG9zZSB0aGF0IGRvLCB1c2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxuXG4gIHZhciB5aWVsZEludGVydmFsID0gNTtcbiAgdmFyIGRlYWRsaW5lID0gMDsgLy8gVE9ETzogTWFrZSB0aGlzIGNvbmZpZ3VyYWJsZVxuXG4gIHtcbiAgICAvLyBgaXNJbnB1dFBlbmRpbmdgIGlzIG5vdCBhdmFpbGFibGUuIFNpbmNlIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWZcbiAgICAvLyB0aGVyZSdzIHBlbmRpbmcgaW5wdXQsIGFsd2F5cyB5aWVsZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtZS5cbiAgICBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMudW5zdGFibGVfbm93KCkgPj0gZGVhZGxpbmU7XG4gICAgfTsgLy8gU2luY2Ugd2UgeWllbGQgZXZlcnkgZnJhbWUgcmVnYXJkbGVzcywgYHJlcXVlc3RQYWludGAgaGFzIG5vIGVmZmVjdC5cblxuXG4gICAgcmVxdWVzdFBhaW50ID0gZnVuY3Rpb24gKCkge307XG4gIH1cblxuICBleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZnVuY3Rpb24gKGZwcykge1xuICAgIGlmIChmcHMgPCAwIHx8IGZwcyA+IDEyNSkge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKCdmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgJyArICdmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmcHMgPiAwKSB7XG4gICAgICB5aWVsZEludGVydmFsID0gTWF0aC5mbG9vcigxMDAwIC8gZnBzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVzZXQgdGhlIGZyYW1lcmF0ZVxuICAgICAgeWllbGRJbnRlcnZhbCA9IDU7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjaGVkdWxlZEhvc3RDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTsgLy8gWWllbGQgYWZ0ZXIgYHlpZWxkSW50ZXJ2YWxgIG1zLCByZWdhcmRsZXNzIG9mIHdoZXJlIHdlIGFyZSBpbiB0aGUgdnN5bmNcbiAgICAgIC8vIGN5Y2xlLiBUaGlzIG1lYW5zIHRoZXJlJ3MgYWx3YXlzIHRpbWUgcmVtYWluaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2ZcbiAgICAgIC8vIHRoZSBtZXNzYWdlIGV2ZW50LlxuXG4gICAgICBkZWFkbGluZSA9IGN1cnJlbnRUaW1lICsgeWllbGRJbnRlcnZhbDtcbiAgICAgIHZhciBoYXNUaW1lUmVtYWluaW5nID0gdHJ1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGhhc01vcmVXb3JrID0gc2NoZWR1bGVkSG9zdENhbGxiYWNrKGhhc1RpbWVSZW1haW5pbmcsIGN1cnJlbnRUaW1lKTtcblxuICAgICAgICBpZiAoIWhhc01vcmVXb3JrKSB7XG4gICAgICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZXJlJ3MgbW9yZSB3b3JrLCBzY2hlZHVsZSB0aGUgbmV4dCBtZXNzYWdlIGV2ZW50IGF0IHRoZSBlbmRcbiAgICAgICAgICAvLyBvZiB0aGUgcHJlY2VkaW5nIG9uZS5cbiAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBhIHNjaGVkdWxlciB0YXNrIHRocm93cywgZXhpdCB0aGUgY3VycmVudCBicm93c2VyIHRhc2sgc28gdGhlXG4gICAgICAgIC8vIGVycm9yIGNhbiBiZSBvYnNlcnZlZC5cbiAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gICAgfSAvLyBZaWVsZGluZyB0byB0aGUgYnJvd3NlciB3aWxsIGdpdmUgaXQgYSBjaGFuY2UgdG8gcGFpbnQsIHNvIHdlIGNhblxuICB9O1xuXG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIHZhciBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmU7XG5cbiAgcmVxdWVzdEhvc3RDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgaWYgKCFpc01lc3NhZ2VMb29wUnVubmluZykge1xuICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSB0cnVlO1xuICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBtcykge1xuICAgIHRhc2tUaW1lb3V0SUQgPSBfc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayhleHBvcnRzLnVuc3RhYmxlX25vdygpKTtcbiAgICB9LCBtcyk7XG4gIH07XG5cbiAgY2FuY2VsSG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgX2NsZWFyVGltZW91dCh0YXNrVGltZW91dElEKTtcblxuICAgIHRhc2tUaW1lb3V0SUQgPSAtMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHVzaChoZWFwLCBub2RlKSB7XG4gIHZhciBpbmRleCA9IGhlYXAubGVuZ3RoO1xuICBoZWFwLnB1c2gobm9kZSk7XG4gIHNpZnRVcChoZWFwLCBub2RlLCBpbmRleCk7XG59XG5mdW5jdGlvbiBwZWVrKGhlYXApIHtcbiAgdmFyIGZpcnN0ID0gaGVhcFswXTtcbiAgcmV0dXJuIGZpcnN0ID09PSB1bmRlZmluZWQgPyBudWxsIDogZmlyc3Q7XG59XG5mdW5jdGlvbiBwb3AoaGVhcCkge1xuICB2YXIgZmlyc3QgPSBoZWFwWzBdO1xuXG4gIGlmIChmaXJzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGxhc3QgPSBoZWFwLnBvcCgpO1xuXG4gICAgaWYgKGxhc3QgIT09IGZpcnN0KSB7XG4gICAgICBoZWFwWzBdID0gbGFzdDtcbiAgICAgIHNpZnREb3duKGhlYXAsIGxhc3QsIDApO1xuICAgIH1cblxuICAgIHJldHVybiBmaXJzdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaWZ0VXAoaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHBhcmVudEluZGV4ID0gaW5kZXggLSAxID4+PiAxO1xuICAgIHZhciBwYXJlbnQgPSBoZWFwW3BhcmVudEluZGV4XTtcblxuICAgIGlmIChwYXJlbnQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHBhcmVudCwgbm9kZSkgPiAwKSB7XG4gICAgICAvLyBUaGUgcGFyZW50IGlzIGxhcmdlci4gU3dhcCBwb3NpdGlvbnMuXG4gICAgICBoZWFwW3BhcmVudEluZGV4XSA9IG5vZGU7XG4gICAgICBoZWFwW2luZGV4XSA9IHBhcmVudDtcbiAgICAgIGluZGV4ID0gcGFyZW50SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBwYXJlbnQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2lmdERvd24oaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuICB2YXIgbGVuZ3RoID0gaGVhcC5sZW5ndGg7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGxlZnRJbmRleCA9IChpbmRleCArIDEpICogMiAtIDE7XG4gICAgdmFyIGxlZnQgPSBoZWFwW2xlZnRJbmRleF07XG4gICAgdmFyIHJpZ2h0SW5kZXggPSBsZWZ0SW5kZXggKyAxO1xuICAgIHZhciByaWdodCA9IGhlYXBbcmlnaHRJbmRleF07IC8vIElmIHRoZSBsZWZ0IG9yIHJpZ2h0IG5vZGUgaXMgc21hbGxlciwgc3dhcCB3aXRoIHRoZSBzbWFsbGVyIG9mIHRob3NlLlxuXG4gICAgaWYgKGxlZnQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKGxlZnQsIG5vZGUpIDwgMCkge1xuICAgICAgaWYgKHJpZ2h0ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShyaWdodCwgbGVmdCkgPCAwKSB7XG4gICAgICAgIGhlYXBbaW5kZXhdID0gcmlnaHQ7XG4gICAgICAgIGhlYXBbcmlnaHRJbmRleF0gPSBub2RlO1xuICAgICAgICBpbmRleCA9IHJpZ2h0SW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWFwW2luZGV4XSA9IGxlZnQ7XG4gICAgICAgIGhlYXBbbGVmdEluZGV4XSA9IG5vZGU7XG4gICAgICAgIGluZGV4ID0gbGVmdEluZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmlnaHQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHJpZ2h0LCBub2RlKSA8IDApIHtcbiAgICAgIGhlYXBbaW5kZXhdID0gcmlnaHQ7XG4gICAgICBoZWFwW3JpZ2h0SW5kZXhdID0gbm9kZTtcbiAgICAgIGluZGV4ID0gcmlnaHRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTmVpdGhlciBjaGlsZCBpcyBzbWFsbGVyLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgLy8gQ29tcGFyZSBzb3J0IGluZGV4IGZpcnN0LCB0aGVuIHRhc2sgaWQuXG4gIHZhciBkaWZmID0gYS5zb3J0SW5kZXggLSBiLnNvcnRJbmRleDtcbiAgcmV0dXJuIGRpZmYgIT09IDAgPyBkaWZmIDogYS5pZCAtIGIuaWQ7XG59XG5cbi8vIFRPRE86IFVzZSBzeW1ib2xzP1xudmFyIEltbWVkaWF0ZVByaW9yaXR5ID0gMTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IDI7XG52YXIgTm9ybWFsUHJpb3JpdHkgPSAzO1xudmFyIExvd1ByaW9yaXR5ID0gNDtcbnZhciBJZGxlUHJpb3JpdHkgPSA1O1xuXG5mdW5jdGlvbiBtYXJrVGFza0Vycm9yZWQodGFzaywgbXMpIHtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG4vLyBNYXRoLnBvdygyLCAzMCkgLSAxXG4vLyAwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVxuXG52YXIgbWF4U2lnbmVkMzFCaXRJbnQgPSAxMDczNzQxODIzOyAvLyBUaW1lcyBvdXQgaW1tZWRpYXRlbHlcblxudmFyIElNTUVESUFURV9QUklPUklUWV9USU1FT1VUID0gLTE7IC8vIEV2ZW50dWFsbHkgdGltZXMgb3V0XG5cbnZhciBVU0VSX0JMT0NLSU5HX1BSSU9SSVRZX1RJTUVPVVQgPSAyNTA7XG52YXIgTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQgPSA1MDAwO1xudmFyIExPV19QUklPUklUWV9USU1FT1VUID0gMTAwMDA7IC8vIE5ldmVyIHRpbWVzIG91dFxuXG52YXIgSURMRV9QUklPUklUWV9USU1FT1VUID0gbWF4U2lnbmVkMzFCaXRJbnQ7IC8vIFRhc2tzIGFyZSBzdG9yZWQgb24gYSBtaW4gaGVhcFxuXG52YXIgdGFza1F1ZXVlID0gW107XG52YXIgdGltZXJRdWV1ZSA9IFtdOyAvLyBJbmNyZW1lbnRpbmcgaWQgY291bnRlci4gVXNlZCB0byBtYWludGFpbiBpbnNlcnRpb24gb3JkZXIuXG5cbnZhciB0YXNrSWRDb3VudGVyID0gMTsgLy8gUGF1c2luZyB0aGUgc2NoZWR1bGVyIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxudmFyIGN1cnJlbnRUYXNrID0gbnVsbDtcbnZhciBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5OyAvLyBUaGlzIGlzIHNldCB3aGlsZSBwZXJmb3JtaW5nIHdvcmssIHRvIHByZXZlbnQgcmUtZW50cmFuY3kuXG5cbnZhciBpc1BlcmZvcm1pbmdXb3JrID0gZmFsc2U7XG52YXIgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSBmYWxzZTtcbnZhciBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpIHtcbiAgLy8gQ2hlY2sgZm9yIHRhc2tzIHRoYXQgYXJlIG5vIGxvbmdlciBkZWxheWVkIGFuZCBhZGQgdGhlbSB0byB0aGUgcXVldWUuXG4gIHZhciB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgd2hpbGUgKHRpbWVyICE9PSBudWxsKSB7XG4gICAgaWYgKHRpbWVyLmNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAvLyBUaW1lciB3YXMgY2FuY2VsbGVkLlxuICAgICAgcG9wKHRpbWVyUXVldWUpO1xuICAgIH0gZWxzZSBpZiAodGltZXIuc3RhcnRUaW1lIDw9IGN1cnJlbnRUaW1lKSB7XG4gICAgICAvLyBUaW1lciBmaXJlZC4gVHJhbnNmZXIgdG8gdGhlIHRhc2sgcXVldWUuXG4gICAgICBwb3AodGltZXJRdWV1ZSk7XG4gICAgICB0aW1lci5zb3J0SW5kZXggPSB0aW1lci5leHBpcmF0aW9uVGltZTtcbiAgICAgIHB1c2godGFza1F1ZXVlLCB0aW1lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbWFpbmluZyB0aW1lcnMgYXJlIHBlbmRpbmcuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoY3VycmVudFRpbWUpIHtcbiAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkKSB7XG4gICAgaWYgKHBlZWsodGFza1F1ZXVlKSAhPT0gbnVsbCkge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICAgIGlmIChmaXJzdFRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hXb3JrKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKSB7XG5cblxuICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIGlmIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkKSB7XG4gICAgLy8gV2Ugc2NoZWR1bGVkIGEgdGltZW91dCBidXQgaXQncyBubyBsb25nZXIgbmVlZGVkLiBDYW5jZWwgaXQuXG4gICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICAgIGNhbmNlbEhvc3RUaW1lb3V0KCk7XG4gIH1cblxuICBpc1BlcmZvcm1pbmdXb3JrID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgaWYgKGVuYWJsZVByb2ZpbGluZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChjdXJyZW50VGFzayAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgICAgbWFya1Rhc2tFcnJvcmVkKGN1cnJlbnRUYXNrLCBjdXJyZW50VGltZSk7XG4gICAgICAgICAgY3VycmVudFRhc2suaXNRdWV1ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBjYXRjaCBpbiBwcm9kIGNvZGUgcGF0aC5cbiAgICAgIHJldHVybiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRUYXNrID0gbnVsbDtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICBpc1BlcmZvcm1pbmdXb3JrID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gaW5pdGlhbFRpbWU7XG4gIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcblxuICB3aGlsZSAoY3VycmVudFRhc2sgIT09IG51bGwgJiYgIShlbmFibGVTY2hlZHVsZXJEZWJ1Z2dpbmcgKSkge1xuICAgIGlmIChjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSA+IGN1cnJlbnRUaW1lICYmICghaGFzVGltZVJlbWFpbmluZyB8fCBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkKCkpKSB7XG4gICAgICAvLyBUaGlzIGN1cnJlbnRUYXNrIGhhc24ndCBleHBpcmVkLCBhbmQgd2UndmUgcmVhY2hlZCB0aGUgZGVhZGxpbmUuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBjdXJyZW50VGFzay5jYWxsYmFjaztcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFRhc2sucHJpb3JpdHlMZXZlbDtcbiAgICAgIHZhciBkaWRVc2VyQ2FsbGJhY2tUaW1lb3V0ID0gY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWU7XG5cbiAgICAgIHZhciBjb250aW51YXRpb25DYWxsYmFjayA9IGNhbGxiYWNrKGRpZFVzZXJDYWxsYmFja1RpbWVvdXQpO1xuICAgICAgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbnRpbnVhdGlvbkNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gY29udGludWF0aW9uQ2FsbGJhY2s7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChjdXJyZW50VGFzayA9PT0gcGVlayh0YXNrUXVldWUpKSB7XG4gICAgICAgICAgcG9wKHRhc2tRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcCh0YXNrUXVldWUpO1xuICAgIH1cblxuICAgIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuICB9IC8vIFJldHVybiB3aGV0aGVyIHRoZXJlJ3MgYWRkaXRpb25hbCB3b3JrXG5cblxuICBpZiAoY3VycmVudFRhc2sgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICBpZiAoZmlyc3RUaW1lciAhPT0gbnVsbCkge1xuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkocHJpb3JpdHlMZXZlbCwgZXZlbnRIYW5kbGVyKSB7XG4gIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBwcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gIH1cblxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9uZXh0KGV2ZW50SGFuZGxlcikge1xuICB2YXIgcHJpb3JpdHlMZXZlbDtcblxuICBzd2l0Y2ggKGN1cnJlbnRQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgICAvLyBTaGlmdCBkb3duIHRvIG5vcm1hbCBwcmlvcml0eVxuICAgICAgcHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gQW55dGhpbmcgbG93ZXIgdGhhbiBub3JtYWwgcHJpb3JpdHkgc2hvdWxkIHJlbWFpbiBhdCB0aGUgY3VycmVudCBsZXZlbC5cbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfd3JhcENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIHZhciBwYXJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgcnVuV2l0aFByaW9yaXR5LCBpbmxpbmVkIGZvciBwZXJmb3JtYW5jZS5cbiAgICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwYXJlbnRQcmlvcml0eUxldmVsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgdmFyIHN0YXJ0VGltZTtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMgIT09IG51bGwpIHtcbiAgICB2YXIgZGVsYXkgPSBvcHRpb25zLmRlbGF5O1xuXG4gICAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZSArIGRlbGF5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gIH1cblxuICB2YXIgdGltZW91dDtcblxuICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IElNTUVESUFURV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IFVTRVJfQkxPQ0tJTkdfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gSURMRV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IExPV19QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGRlZmF1bHQ6XG4gICAgICB0aW1lb3V0ID0gTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBleHBpcmF0aW9uVGltZSA9IHN0YXJ0VGltZSArIHRpbWVvdXQ7XG4gIHZhciBuZXdUYXNrID0ge1xuICAgIGlkOiB0YXNrSWRDb3VudGVyKyssXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgIHByaW9yaXR5TGV2ZWw6IHByaW9yaXR5TGV2ZWwsXG4gICAgc3RhcnRUaW1lOiBzdGFydFRpbWUsXG4gICAgZXhwaXJhdGlvblRpbWU6IGV4cGlyYXRpb25UaW1lLFxuICAgIHNvcnRJbmRleDogLTFcbiAgfTtcblxuICBpZiAoc3RhcnRUaW1lID4gY3VycmVudFRpbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZGVsYXllZCB0YXNrLlxuICAgIG5ld1Rhc2suc29ydEluZGV4ID0gc3RhcnRUaW1lO1xuICAgIHB1c2godGltZXJRdWV1ZSwgbmV3VGFzayk7XG5cbiAgICBpZiAocGVlayh0YXNrUXVldWUpID09PSBudWxsICYmIG5ld1Rhc2sgPT09IHBlZWsodGltZXJRdWV1ZSkpIHtcbiAgICAgIC8vIEFsbCB0YXNrcyBhcmUgZGVsYXllZCwgYW5kIHRoaXMgaXMgdGhlIHRhc2sgd2l0aCB0aGUgZWFybGllc3QgZGVsYXkuXG4gICAgICBpZiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCkge1xuICAgICAgICAvLyBDYW5jZWwgYW4gZXhpc3RpbmcgdGltZW91dC5cbiAgICAgICAgY2FuY2VsSG9zdFRpbWVvdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgfSAvLyBTY2hlZHVsZSBhIHRpbWVvdXQuXG5cblxuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIHN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmV3VGFzay5zb3J0SW5kZXggPSBleHBpcmF0aW9uVGltZTtcbiAgICBwdXNoKHRhc2tRdWV1ZSwgbmV3VGFzayk7XG4gICAgLy8gd2FpdCB1bnRpbCB0aGUgbmV4dCB0aW1lIHdlIHlpZWxkLlxuXG5cbiAgICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld1Rhc2s7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uKCkge1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbigpIHtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSgpIHtcbiAgcmV0dXJuIHBlZWsodGFza1F1ZXVlKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sodGFzaykge1xuICAvLyByZW1vdmUgZnJvbSB0aGUgcXVldWUgYmVjYXVzZSB5b3UgY2FuJ3QgcmVtb3ZlIGFyYml0cmFyeSBub2RlcyBmcm9tIGFuXG4gIC8vIGFycmF5IGJhc2VkIGhlYXAsIG9ubHkgdGhlIGZpcnN0IG9uZS4pXG5cblxuICB0YXNrLmNhbGxiYWNrID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSB7XG4gIHJldHVybiBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbn1cblxudmFyIHVuc3RhYmxlX3JlcXVlc3RQYWludCA9IHJlcXVlc3RQYWludDtcbnZhciB1bnN0YWJsZV9Qcm9maWxpbmcgPSAgbnVsbDtcblxuZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHkgPSBJZGxlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5ID0gSW1tZWRpYXRlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5ID0gTG93UHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZyA9IHVuc3RhYmxlX1Byb2ZpbGluZztcbmV4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHkgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sgPSB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfY29udGludWVFeGVjdXRpb24gPSB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbjtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbDtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUgPSB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZTtcbmV4cG9ydHMudW5zdGFibGVfbmV4dCA9IHVuc3RhYmxlX25leHQ7XG5leHBvcnRzLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uID0gdW5zdGFibGVfcGF1c2VFeGVjdXRpb247XG5leHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludCA9IHVuc3RhYmxlX3JlcXVlc3RQYWludDtcbmV4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5ID0gdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrID0gdW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrID0gdW5zdGFibGVfd3JhcENhbGxiYWNrO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjIwLjJcbiAqIHNjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIERFRkFVTFRfVEhSRUFEX0lEID0gMDsgLy8gQ291bnRlcnMgdXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLlxuXG52YXIgaW50ZXJhY3Rpb25JRENvdW50ZXIgPSAwO1xudmFyIHRocmVhZElEQ291bnRlciA9IDA7IC8vIFNldCBvZiBjdXJyZW50bHkgdHJhY2VkIGludGVyYWN0aW9ucy5cbi8vIEludGVyYWN0aW9ucyBcInN0YWNrXCJcdTIwMTNcbi8vIE1lYW5pbmcgdGhhdCBuZXdseSB0cmFjZWQgaW50ZXJhY3Rpb25zIGFyZSBhcHBlbmRlZCB0byB0aGUgcHJldmlvdXNseSBhY3RpdmUgc2V0LlxuLy8gV2hlbiBhbiBpbnRlcmFjdGlvbiBnb2VzIG91dCBvZiBzY29wZSwgdGhlIHByZXZpb3VzIHNldCAoaWYgYW55KSBpcyByZXN0b3JlZC5cblxuZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZiA9IG51bGw7IC8vIExpc3RlbmVyKHMpIHRvIG5vdGlmeSB3aGVuIGludGVyYWN0aW9ucyBiZWdpbiBhbmQgZW5kLlxuXG5leHBvcnRzLl9fc3Vic2NyaWJlclJlZiA9IG51bGw7XG5cbntcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZiA9IHtcbiAgICBjdXJyZW50OiBuZXcgU2V0KClcbiAgfTtcbiAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xufVxuZnVuY3Rpb24gdW5zdGFibGVfY2xlYXIoY2FsbGJhY2spIHtcblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gbmV3IFNldCgpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Q3VycmVudCgpIHtcbiAge1xuICAgIHJldHVybiBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldFRocmVhZElEKCkge1xuICByZXR1cm4gKyt0aHJlYWRJRENvdW50ZXI7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV90cmFjZShuYW1lLCB0aW1lc3RhbXAsIGNhbGxiYWNrKSB7XG4gIHZhciB0aHJlYWRJRCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogREVGQVVMVF9USFJFQURfSUQ7XG5cbiAgdmFyIGludGVyYWN0aW9uID0ge1xuICAgIF9fY291bnQ6IDEsXG4gICAgaWQ6IGludGVyYWN0aW9uSURDb3VudGVyKyssXG4gICAgbmFtZTogbmFtZSxcbiAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcFxuICB9O1xuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDsgLy8gVHJhY2VkIGludGVyYWN0aW9ucyBzaG91bGQgc3RhY2svYWNjdW11bGF0ZS5cbiAgLy8gVG8gZG8gdGhhdCwgY2xvbmUgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuICAvLyBUaGUgcHJldmlvdXMgc2V0IHdpbGwgYmUgcmVzdG9yZWQgdXBvbiBjb21wbGV0aW9uLlxuXG4gIHZhciBpbnRlcmFjdGlvbnMgPSBuZXcgU2V0KHByZXZJbnRlcmFjdGlvbnMpO1xuICBpbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gaW50ZXJhY3Rpb25zO1xuICB2YXIgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG4gIHZhciByZXR1cm5WYWx1ZTtcblxuICB0cnkge1xuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tOyAvLyBJZiBubyBhc3luYyB3b3JrIHdhcyBzY2hlZHVsZWQgZm9yIHRoaXMgaW50ZXJhY3Rpb24sXG4gICAgICAgICAgLy8gTm90aWZ5IHN1YnNjcmliZXJzIHRoYXQgaXQncyBjb21wbGV0ZWQuXG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV93cmFwKGNhbGxiYWNrKSB7XG4gIHZhciB0aHJlYWRJRCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogREVGQVVMVF9USFJFQURfSUQ7XG5cbiAgdmFyIHdyYXBwZWRJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIHZhciBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgfSAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuICAvLyBVcGRhdGUgYWZ0ZXIgY2FsbGluZyBzdWJzY3JpYmVycyBpbiBjYXNlIG9mIGVycm9yLlxuXG5cbiAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgfSk7XG4gIHZhciBoYXNSdW4gPSBmYWxzZTtcblxuICBmdW5jdGlvbiB3cmFwcGVkKCkge1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHdyYXBwZWRJbnRlcmFjdGlvbnM7XG4gICAgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIHJldHVyblZhbHVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICghaGFzUnVuKSB7XG4gICAgICAgIC8vIFdlIG9ubHkgZXhwZWN0IGEgd3JhcHBlZCBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBvbmNlLFxuICAgICAgICAvLyBCdXQgaW4gdGhlIGV2ZW50IHRoYXQgaXQncyBleGVjdXRlZCBtb3JlIHRoYW4gb25jZVx1MjAxM1xuICAgICAgICAvLyBPbmx5IGRlY3JlbWVudCB0aGUgb3V0c3RhbmRpbmcgaW50ZXJhY3Rpb24gY291bnRzIG9uY2UuXG4gICAgICAgIGhhc1J1biA9IHRydWU7IC8vIFVwZGF0ZSBwZW5kaW5nIGFzeW5jIGNvdW50cyBmb3IgYWxsIHdyYXBwZWQgaW50ZXJhY3Rpb25zLlxuICAgICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBzY2hlZHVsZWQgYXN5bmMgd29yayBmb3IgYW55IG9mIHRoZW0sXG4gICAgICAgIC8vIE1hcmsgdGhlbSBhcyBjb21wbGV0ZWQuXG5cbiAgICAgICAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd3JhcHBlZC5jYW5jZWwgPSBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtDYW5jZWxlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFVwZGF0ZSBwZW5kaW5nIGFzeW5jIGNvdW50cyBmb3IgYWxsIHdyYXBwZWQgaW50ZXJhY3Rpb25zLlxuICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3Qgc2NoZWR1bGVkIGFzeW5jIHdvcmsgZm9yIGFueSBvZiB0aGVtLFxuICAgICAgLy8gTWFyayB0aGVtIGFzIGNvbXBsZXRlZC5cbiAgICAgIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgIGlmIChzdWJzY3JpYmVyICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG52YXIgc3Vic2NyaWJlcnMgPSBudWxsO1xuXG57XG4gIHN1YnNjcmliZXJzID0gbmV3IFNldCgpO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zdWJzY3JpYmUoc3Vic2NyaWJlcikge1xuICB7XG4gICAgc3Vic2NyaWJlcnMuYWRkKHN1YnNjcmliZXIpO1xuXG4gICAgaWYgKHN1YnNjcmliZXJzLnNpemUgPT09IDEpIHtcbiAgICAgIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgIG9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkOiBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZCxcbiAgICAgICAgb25JbnRlcmFjdGlvblRyYWNlZDogb25JbnRlcmFjdGlvblRyYWNlZCxcbiAgICAgICAgb25Xb3JrQ2FuY2VsZWQ6IG9uV29ya0NhbmNlbGVkLFxuICAgICAgICBvbldvcmtTY2hlZHVsZWQ6IG9uV29ya1NjaGVkdWxlZCxcbiAgICAgICAgb25Xb3JrU3RhcnRlZDogb25Xb3JrU3RhcnRlZCxcbiAgICAgICAgb25Xb3JrU3RvcHBlZDogb25Xb3JrU3RvcHBlZFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3Vuc3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAge1xuICAgIHN1YnNjcmliZXJzLmRlbGV0ZShzdWJzY3JpYmVyKTtcblxuICAgIGlmIChzdWJzY3JpYmVycy5zaXplID09PSAwKSB7XG4gICAgICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbikge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrQ2FuY2VsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrQ2FuY2VsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0cy51bnN0YWJsZV9jbGVhciA9IHVuc3RhYmxlX2NsZWFyO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50ID0gdW5zdGFibGVfZ2V0Q3VycmVudDtcbmV4cG9ydHMudW5zdGFibGVfZ2V0VGhyZWFkSUQgPSB1bnN0YWJsZV9nZXRUaHJlYWRJRDtcbmV4cG9ydHMudW5zdGFibGVfc3Vic2NyaWJlID0gdW5zdGFibGVfc3Vic2NyaWJlO1xuZXhwb3J0cy51bnN0YWJsZV90cmFjZSA9IHVuc3RhYmxlX3RyYWNlO1xuZXhwb3J0cy51bnN0YWJsZV91bnN1YnNjcmliZSA9IHVuc3RhYmxlX3Vuc3Vic2NyaWJlO1xuZXhwb3J0cy51bnN0YWJsZV93cmFwID0gdW5zdGFibGVfd3JhcDtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xudmFyIFNjaGVkdWxlciA9IHJlcXVpcmUoJ3NjaGVkdWxlcicpO1xudmFyIHRyYWNpbmcgPSByZXF1aXJlKCdzY2hlZHVsZXIvdHJhY2luZycpO1xuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuICcnICsgaXRlbTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbmlmICghUmVhY3QpIHtcbiAge1xuICAgIHRocm93IEVycm9yKCBcIlJlYWN0RE9NIHdhcyBsb2FkZWQgYmVmb3JlIFJlYWN0LiBNYWtlIHN1cmUgeW91IGxvYWQgdGhlIFJlYWN0IHBhY2thZ2UgYmVmb3JlIGxvYWRpbmcgUmVhY3RET00uXCIgKTtcbiAgfVxufVxuXG52YXIgRnVuY3Rpb25Db21wb25lbnQgPSAwO1xudmFyIENsYXNzQ29tcG9uZW50ID0gMTtcbnZhciBJbmRldGVybWluYXRlQ29tcG9uZW50ID0gMjsgLy8gQmVmb3JlIHdlIGtub3cgd2hldGhlciBpdCBpcyBmdW5jdGlvbiBvciBjbGFzc1xuXG52YXIgSG9zdFJvb3QgPSAzOyAvLyBSb290IG9mIGEgaG9zdCB0cmVlLiBDb3VsZCBiZSBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgbm9kZS5cblxudmFyIEhvc3RQb3J0YWwgPSA0OyAvLyBBIHN1YnRyZWUuIENvdWxkIGJlIGFuIGVudHJ5IHBvaW50IHRvIGEgZGlmZmVyZW50IHJlbmRlcmVyLlxuXG52YXIgSG9zdENvbXBvbmVudCA9IDU7XG52YXIgSG9zdFRleHQgPSA2O1xudmFyIEZyYWdtZW50ID0gNztcbnZhciBNb2RlID0gODtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSA5O1xudmFyIENvbnRleHRQcm92aWRlciA9IDEwO1xudmFyIEZvcndhcmRSZWYgPSAxMTtcbnZhciBQcm9maWxlciA9IDEyO1xudmFyIFN1c3BlbnNlQ29tcG9uZW50ID0gMTM7XG52YXIgTWVtb0NvbXBvbmVudCA9IDE0O1xudmFyIFNpbXBsZU1lbW9Db21wb25lbnQgPSAxNTtcbnZhciBMYXp5Q29tcG9uZW50ID0gMTY7XG52YXIgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50ID0gMTc7XG52YXIgRGVoeWRyYXRlZEZyYWdtZW50ID0gMTg7XG52YXIgU3VzcGVuc2VMaXN0Q29tcG9uZW50ID0gMTk7XG52YXIgRnVuZGFtZW50YWxDb21wb25lbnQgPSAyMDtcbnZhciBTY29wZUNvbXBvbmVudCA9IDIxO1xudmFyIEJsb2NrID0gMjI7XG52YXIgT2Zmc2NyZWVuQ29tcG9uZW50ID0gMjM7XG52YXIgTGVnYWN5SGlkZGVuQ29tcG9uZW50ID0gMjQ7XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlUHJvZmlsZXJUaW1lciA9IHRydWU7IC8vIFJlY29yZCBkdXJhdGlvbnMgZm9yIGNvbW1pdCBhbmQgcGFzc2l2ZSBlZmZlY3RzIHBoYXNlcy5cblxudmFyIGVuYWJsZUZ1bmRhbWVudGFsQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBTY29wZSBzdXBwb3J0LlxudmFyIGVuYWJsZU5ld1JlY29uY2lsZXIgPSBmYWxzZTsgLy8gRXJyb3JzIHRoYXQgYXJlIHRocm93biB3aGlsZSB1bm1vdW50aW5nIChvciBhZnRlciBpbiB0aGUgY2FzZSBvZiBwYXNzaXZlIGVmZmVjdHMpXG52YXIgd2FybkFib3V0U3RyaW5nUmVmcyA9IGZhbHNlO1xuXG52YXIgYWxsTmF0aXZlRXZlbnRzID0gbmV3IFNldCgpO1xuLyoqXG4gKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5hbWUgdG8gZXZlbnQgbmFtZVxuICovXG5cblxudmFyIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMgPSB7fTtcbi8qKlxuICogTWFwcGluZyBmcm9tIGxvd2VyY2FzZSByZWdpc3RyYXRpb24gbmFtZXMgdG8gdGhlIHByb3Blcmx5IGNhc2VkIHZlcnNpb24sXG4gKiB1c2VkIHRvIHdhcm4gaW4gdGhlIGNhc2Ugb2YgbWlzc2luZyBldmVudCBoYW5kbGVycy4gQXZhaWxhYmxlXG4gKiBvbmx5IGluIHRydWUuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cbnZhciBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzID0gIHt9IDsgLy8gVHJ1c3QgdGhlIGRldmVsb3BlciB0byBvbmx5IHVzZSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzIGluIHRydWVcblxuZnVuY3Rpb24gcmVnaXN0ZXJUd29QaGFzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcyk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSArICdDYXB0dXJlJywgZGVwZW5kZW5jaWVzKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gIHtcbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSkge1xuICAgICAgZXJyb3IoJ0V2ZW50UmVnaXN0cnk6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lICcgKyAncmVnaXN0cmF0aW9uIG5hbWUsIGAlc2AuJywgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSA9IGRlcGVuZGVuY2llcztcblxuICB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcmVnaXN0cmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdID0gcmVnaXN0cmF0aW9uTmFtZTtcblxuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lID09PSAnb25Eb3VibGVDbGljaycpIHtcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMub25kYmxjbGljayA9IHJlZ2lzdHJhdGlvbk5hbWU7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBhbGxOYXRpdmVFdmVudHMuYWRkKGRlcGVuZGVuY2llc1tpXSk7XG4gIH1cbn1cblxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpO1xuXG4vLyBBIHJlc2VydmVkIGF0dHJpYnV0ZS5cbi8vIEl0IGlzIGhhbmRsZWQgYnkgUmVhY3Qgc2VwYXJhdGVseSBhbmQgc2hvdWxkbid0IGJlIHdyaXR0ZW4gdG8gdGhlIERPTS5cbnZhciBSRVNFUlZFRCA9IDA7IC8vIEEgc2ltcGxlIHN0cmluZyBhdHRyaWJ1dGUuXG4vLyBBdHRyaWJ1dGVzIHRoYXQgYXJlbid0IGluIHRoZSBmaWx0ZXIgYXJlIHByZXN1bWVkIHRvIGhhdmUgdGhpcyB0eXBlLlxuXG52YXIgU1RSSU5HID0gMTsgLy8gQSBzdHJpbmcgYXR0cmlidXRlIHRoYXQgYWNjZXB0cyBib29sZWFucyBpbiBSZWFjdC4gSW4gSFRNTCwgdGhlc2UgYXJlIGNhbGxlZFxuLy8gXCJlbnVtZXJhdGVkXCIgYXR0cmlidXRlcyB3aXRoIFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIgYXMgcG9zc2libGUgdmFsdWVzLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgc2V0IHRvIGEgXCJ0cnVlXCIgc3RyaW5nLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIHNldCB0byBhIFwiZmFsc2VcIiBzdHJpbmcuXG5cbnZhciBCT09MRUFOSVNIX1NUUklORyA9IDI7IC8vIEEgcmVhbCBib29sZWFuIGF0dHJpYnV0ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxuXG52YXIgQk9PTEVBTiA9IDM7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgZmxhZyBhcyB3ZWxsIGFzIHdpdGggYSB2YWx1ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxuLy8gRm9yIGFueSBvdGhlciB2YWx1ZSwgc2hvdWxkIGJlIHByZXNlbnQgd2l0aCB0aGF0IHZhbHVlLlxuXG52YXIgT1ZFUkxPQURFRF9CT09MRUFOID0gNDsgLy8gQW4gYXR0cmlidXRlIHRoYXQgbXVzdCBiZSBudW1lcmljIG9yIHBhcnNlIGFzIGEgbnVtZXJpYy5cbi8vIFdoZW4gZmFsc3ksIGl0IHNob3VsZCBiZSByZW1vdmVkLlxuXG52YXIgTlVNRVJJQyA9IDU7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIHBvc2l0aXZlIG51bWVyaWMuXG4vLyBXaGVuIGZhbHN5LCBpdCBzaG91bGQgYmUgcmVtb3ZlZC5cblxudmFyIFBPU0lUSVZFX05VTUVSSUMgPSA2O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG52YXIgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiA9IFwiOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFwiO1xuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXG5cbnZhciBBVFRSSUJVVEVfTkFNRV9DSEFSID0gQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArIFwiXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBcIjtcbnZhciBST09UX0FUVFJJQlVURV9OQU1FID0gJ2RhdGEtcmVhY3Ryb290JztcbnZhciBWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWCA9IG5ldyBSZWdFeHAoJ15bJyArIEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgKyAnXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xudmFyIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xuZnVuY3Rpb24gaXNBdHRyaWJ1dGVOYW1lU2FmZShhdHRyaWJ1dGVOYW1lKSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYLnRlc3QoYXR0cmlidXRlTmFtZSkpIHtcbiAgICB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG5cbiAge1xuICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lOiBgJXNgJywgYXR0cmlidXRlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBzaG91bGRJZ25vcmVBdHRyaWJ1dGUobmFtZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRDtcbiAgfVxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA+IDIgJiYgKG5hbWVbMF0gPT09ICdvJyB8fCBuYW1lWzBdID09PSAnTycpICYmIChuYW1lWzFdID09PSAnbicgfHwgbmFtZVsxXSA9PT0gJ04nKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzogLy8gJEZsb3dJc3N1ZSBzeW1ib2wgaXMgcGVyZmVjdGx5IHZhbGlkIGhlcmVcblxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuICFwcm9wZXJ0eUluZm8uYWNjZXB0c0Jvb2xlYW5zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmVmaXggPSBuYW1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwgNSk7XG4gICAgICAgICAgcmV0dXJuIHByZWZpeCAhPT0gJ2RhdGEtJyAmJiBwcmVmaXggIT09ICdhcmlhLSc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuXG4gICAgc3dpdGNoIChwcm9wZXJ0eUluZm8udHlwZSkge1xuICAgICAgY2FzZSBCT09MRUFOOlxuICAgICAgICByZXR1cm4gIXZhbHVlO1xuXG4gICAgICBjYXNlIE9WRVJMT0FERURfQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBmYWxzZTtcblxuICAgICAgY2FzZSBOVU1FUklDOlxuICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpO1xuXG4gICAgICBjYXNlIFBPU0lUSVZFX05VTUVSSUM6XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFByb3BlcnR5SW5mbyhuYW1lKSB7XG4gIHJldHVybiBwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG5hbWUpID8gcHJvcGVydGllc1tuYW1lXSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCB0eXBlLCBtdXN0VXNlUHJvcGVydHksIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZU5hbWVzcGFjZSwgc2FuaXRpemVVUkwsIHJlbW92ZUVtcHR5U3RyaW5nKSB7XG4gIHRoaXMuYWNjZXB0c0Jvb2xlYW5zID0gdHlwZSA9PT0gQk9PTEVBTklTSF9TVFJJTkcgfHwgdHlwZSA9PT0gQk9PTEVBTiB8fCB0eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU47XG4gIHRoaXMuYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWU7XG4gIHRoaXMuYXR0cmlidXRlTmFtZXNwYWNlID0gYXR0cmlidXRlTmFtZXNwYWNlO1xuICB0aGlzLm11c3RVc2VQcm9wZXJ0eSA9IG11c3RVc2VQcm9wZXJ0eTtcbiAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBuYW1lO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnNhbml0aXplVVJMID0gc2FuaXRpemVVUkw7XG4gIHRoaXMucmVtb3ZlRW1wdHlTdHJpbmcgPSByZW1vdmVFbXB0eVN0cmluZztcbn0gLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGlzIGxpc3QsIGJlIHN1cmUgdG8gYWxzbyBhZGQgdGhlbSB0b1xuLy8gdGhlIGBwb3NzaWJsZVN0YW5kYXJkTmFtZXNgIG1vZHVsZSB0byBlbnN1cmUgY2FzaW5nIGFuZCBpbmNvcnJlY3Rcbi8vIG5hbWUgd2FybmluZ3MuXG5cblxudmFyIHByb3BlcnRpZXMgPSB7fTsgLy8gVGhlc2UgcHJvcHMgYXJlIHJlc2VydmVkIGJ5IFJlYWN0LiBUaGV5IHNob3VsZG4ndCBiZSB3cml0dGVuIHRvIHRoZSBET00uXG5cbnZhciByZXNlcnZlZFByb3BzID0gWydjaGlsZHJlbicsICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsIC8vIFRPRE86IFRoaXMgcHJldmVudHMgdGhlIGFzc2lnbm1lbnQgb2YgZGVmYXVsdFZhbHVlIHRvIHJlZ3VsYXJcbi8vIGVsZW1lbnRzIChub3QganVzdCBpbnB1dHMpLiBOb3cgdGhhdCBSZWFjdERPTUlucHV0IGFzc2lnbnMgdG8gdGhlXG4vLyBkZWZhdWx0VmFsdWUgcHJvcGVydHkgLS0gZG8gd2UgbmVlZCB0aGlzP1xuJ2RlZmF1bHRWYWx1ZScsICdkZWZhdWx0Q2hlY2tlZCcsICdpbm5lckhUTUwnLCAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJywgJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsICdzdHlsZSddO1xucmVzZXJ2ZWRQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFJFU0VSVkVELCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gQSBmZXcgUmVhY3Qgc3RyaW5nIGF0dHJpYnV0ZXMgaGF2ZSBhIGRpZmZlcmVudCBuYW1lLlxuLy8gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBSZWFjdCBwcm9wIG5hbWVzIHRvIHRoZSBhdHRyaWJ1dGUgbmFtZXMuXG5cbltbJ2FjY2VwdENoYXJzZXQnLCAnYWNjZXB0LWNoYXJzZXQnXSwgWydjbGFzc05hbWUnLCAnY2xhc3MnXSwgWydodG1sRm9yJywgJ2ZvciddLCBbJ2h0dHBFcXVpdicsICdodHRwLWVxdWl2J11dLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG5hbWUgPSBfcmVmWzBdLFxuICAgICAgYXR0cmlidXRlTmFtZSA9IF9yZWZbMV07XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBcImVudW1lcmF0ZWRcIiBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG5cblsnY29udGVudEVkaXRhYmxlJywgJ2RyYWdnYWJsZScsICdzcGVsbENoZWNrJywgJ3ZhbHVlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOSVNIX1NUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIFwiZW51bWVyYXRlZFwiIFNWRyBhdHRyaWJ1dGVzIHRoYXQgYWNjZXB0IFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIuXG4vLyBJbiBSZWFjdCwgd2UgbGV0IHVzZXJzIHBhc3MgYHRydWVgIGFuZCBgZmFsc2VgIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5XG4vLyB0aGVzZSBhcmVuJ3QgYm9vbGVhbiBhdHRyaWJ1dGVzICh0aGV5IGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MpLlxuLy8gU2luY2UgdGhlc2UgYXJlIFNWRyBhdHRyaWJ1dGVzLCB0aGVpciBhdHRyaWJ1dGUgbmFtZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuXG5bJ2F1dG9SZXZlcnNlJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnZm9jdXNhYmxlJywgJ3ByZXNlcnZlQWxwaGEnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU5JU0hfU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYm9vbGVhbiBhdHRyaWJ1dGVzLlxuXG5bJ2FsbG93RnVsbFNjcmVlbicsICdhc3luYycsIC8vIE5vdGU6IHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgcHJldmVudHMgaXQgZnJvbSBiZWluZyB3cml0dGVuIHRvIHRoZSBET01cbi8vIG9uIHRoZSBjbGllbnQgc2lkZSBiZWNhdXNlIHRoZSBicm93c2VycyBhcmUgaW5jb25zaXN0ZW50LiBJbnN0ZWFkIHdlIGNhbGwgZm9jdXMoKS5cbidhdXRvRm9jdXMnLCAnYXV0b1BsYXknLCAnY29udHJvbHMnLCAnZGVmYXVsdCcsICdkZWZlcicsICdkaXNhYmxlZCcsICdkaXNhYmxlUGljdHVyZUluUGljdHVyZScsICdkaXNhYmxlUmVtb3RlUGxheWJhY2snLCAnZm9ybU5vVmFsaWRhdGUnLCAnaGlkZGVuJywgJ2xvb3AnLCAnbm9Nb2R1bGUnLCAnbm9WYWxpZGF0ZScsICdvcGVuJywgJ3BsYXlzSW5saW5lJywgJ3JlYWRPbmx5JywgJ3JlcXVpcmVkJywgJ3JldmVyc2VkJywgJ3Njb3BlZCcsICdzZWFtbGVzcycsIC8vIE1pY3JvZGF0YVxuJ2l0ZW1TY29wZSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTiwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIHRoZSBmZXcgUmVhY3QgcHJvcHMgdGhhdCB3ZSBzZXQgYXMgRE9NIHByb3BlcnRpZXNcbi8vIHJhdGhlciB0aGFuIGF0dHJpYnV0ZXMuIFRoZXNlIGFyZSBhbGwgYm9vbGVhbnMuXG5cblsnY2hlY2tlZCcsIC8vIE5vdGU6IGBvcHRpb24uc2VsZWN0ZWRgIGlzIG5vdCB1cGRhdGVkIGlmIGBzZWxlY3QubXVsdGlwbGVgIGlzXG4vLyBkaXNhYmxlZCB3aXRoIGByZW1vdmVBdHRyaWJ1dGVgLiBXZSBoYXZlIHNwZWNpYWwgbG9naWMgZm9yIGhhbmRsaW5nIHRoaXMuXG4nbXVsdGlwbGUnLCAnbXV0ZWQnLCAnc2VsZWN0ZWQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU4sIHRydWUsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBhcmUgXCJvdmVybG9hZGVkIGJvb2xlYW5zXCI6IHRoZXkgYmVoYXZlIGxpa2Vcbi8vIGJvb2xlYW5zLCBidXQgY2FuIGFsc28gYWNjZXB0IGEgc3RyaW5nIHZhbHVlLlxuXG5bJ2NhcHR1cmUnLCAnZG93bmxvYWQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIE9WRVJMT0FERURfQk9PTEVBTiwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIHBvc2l0aXZlIG51bWJlcnMuXG5cblsnY29scycsICdyb3dzJywgJ3NpemUnLCAnc3BhbicgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgUE9TSVRJVkVfTlVNRVJJQywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIG51bWJlcnMuXG5cblsncm93U3BhbicsICdzdGFydCddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgTlVNRVJJQywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTtcbnZhciBDQU1FTElaRSA9IC9bXFwtXFw6XShbYS16XSkvZztcblxudmFyIGNhcGl0YWxpemUgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgcmV0dXJuIHRva2VuWzFdLnRvVXBwZXJDYXNlKCk7XG59OyAvLyBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBuZWVkIHNwZWNpYWwgY2FzaW5nLCBuYW1lc3BhY2luZyxcbi8vIG9yIGJvb2xlYW4gdmFsdWUgYXNzaWdubWVudC4gUmVndWxhciBhdHRyaWJ1dGVzIHRoYXQganVzdCBhY2NlcHQgc3RyaW5nc1xuLy8gYW5kIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXJlIG9taXR0ZWQsIGp1c3QgbGlrZSBpbiB0aGUgSFRNTCBhdHRyaWJ1dGUgZmlsdGVyLlxuLy8gU29tZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIGNhbiBiZSBoYXJkIHRvIGZpbmQuIFRoaXMgbGlzdCB3YXMgY3JlYXRlZCBieVxuLy8gc2NyYXBpbmcgdGhlIE1ETiBkb2N1bWVudGF0aW9uLlxuXG5cblsnYWNjZW50LWhlaWdodCcsICdhbGlnbm1lbnQtYmFzZWxpbmUnLCAnYXJhYmljLWZvcm0nLCAnYmFzZWxpbmUtc2hpZnQnLCAnY2FwLWhlaWdodCcsICdjbGlwLXBhdGgnLCAnY2xpcC1ydWxlJywgJ2NvbG9yLWludGVycG9sYXRpb24nLCAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJywgJ2NvbG9yLXByb2ZpbGUnLCAnY29sb3ItcmVuZGVyaW5nJywgJ2RvbWluYW50LWJhc2VsaW5lJywgJ2VuYWJsZS1iYWNrZ3JvdW5kJywgJ2ZpbGwtb3BhY2l0eScsICdmaWxsLXJ1bGUnLCAnZmxvb2QtY29sb3InLCAnZmxvb2Qtb3BhY2l0eScsICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zaXplLWFkanVzdCcsICdmb250LXN0cmV0Y2gnLCAnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZ2x5cGgtbmFtZScsICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJywgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJywgJ2hvcml6LWFkdi14JywgJ2hvcml6LW9yaWdpbi14JywgJ2ltYWdlLXJlbmRlcmluZycsICdsZXR0ZXItc3BhY2luZycsICdsaWdodGluZy1jb2xvcicsICdtYXJrZXItZW5kJywgJ21hcmtlci1taWQnLCAnbWFya2VyLXN0YXJ0JywgJ292ZXJsaW5lLXBvc2l0aW9uJywgJ292ZXJsaW5lLXRoaWNrbmVzcycsICdwYWludC1vcmRlcicsICdwYW5vc2UtMScsICdwb2ludGVyLWV2ZW50cycsICdyZW5kZXJpbmctaW50ZW50JywgJ3NoYXBlLXJlbmRlcmluZycsICdzdG9wLWNvbG9yJywgJ3N0b3Atb3BhY2l0eScsICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJywgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJywgJ3N0cm9rZS1kYXNoYXJyYXknLCAnc3Ryb2tlLWRhc2hvZmZzZXQnLCAnc3Ryb2tlLWxpbmVjYXAnLCAnc3Ryb2tlLWxpbmVqb2luJywgJ3N0cm9rZS1taXRlcmxpbWl0JywgJ3N0cm9rZS1vcGFjaXR5JywgJ3N0cm9rZS13aWR0aCcsICd0ZXh0LWFuY2hvcicsICd0ZXh0LWRlY29yYXRpb24nLCAndGV4dC1yZW5kZXJpbmcnLCAndW5kZXJsaW5lLXBvc2l0aW9uJywgJ3VuZGVybGluZS10aGlja25lc3MnLCAndW5pY29kZS1iaWRpJywgJ3VuaWNvZGUtcmFuZ2UnLCAndW5pdHMtcGVyLWVtJywgJ3YtYWxwaGFiZXRpYycsICd2LWhhbmdpbmcnLCAndi1pZGVvZ3JhcGhpYycsICd2LW1hdGhlbWF0aWNhbCcsICd2ZWN0b3ItZWZmZWN0JywgJ3ZlcnQtYWR2LXknLCAndmVydC1vcmlnaW4teCcsICd2ZXJ0LW9yaWdpbi15JywgJ3dvcmQtc3BhY2luZycsICd3cml0aW5nLW1vZGUnLCAneG1sbnM6eGxpbmsnLCAneC1oZWlnaHQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFN0cmluZyBTVkcgYXR0cmlidXRlcyB3aXRoIHRoZSB4bGluayBuYW1lc3BhY2UuXG5cblsneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gU3RyaW5nIFNWRyBhdHRyaWJ1dGVzIHdpdGggdGhlIHhtbCBuYW1lc3BhY2UuXG5cblsneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJywgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGUgZXhpc3RzIGJvdGggaW4gSFRNTCBhbmQgU1ZHLlxuLy8gVGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGNhc2Utc2Vuc2l0aXZlIGluIFNWRyBzbyB3ZSBjYW4ndCBqdXN0IHVzZVxuLy8gdGhlIFJlYWN0IG5hbWUgbGlrZSB3ZSBkbyBmb3IgYXR0cmlidXRlcyB0aGF0IGV4aXN0IG9ubHkgaW4gSFRNTC5cblxuWyd0YWJJbmRleCcsICdjcm9zc09yaWdpbiddLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcHJvcGVydGllc1thdHRyaWJ1dGVOYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoYXR0cmlidXRlTmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGVzIGFjY2VwdCBVUkxzLiBUaGVzZSBtdXN0IG5vdCBhbGxvdyBqYXZhc2NyaXB0OiBVUkxTLlxuLy8gVGhlc2Ugd2lsbCBhbHNvIG5lZWQgdG8gYWNjZXB0IFRydXN0ZWQgVHlwZXMgb2JqZWN0IGluIHRoZSBmdXR1cmUuXG5cbnZhciB4bGlua0hyZWYgPSAneGxpbmtIcmVmJztcbnByb3BlcnRpZXNbeGxpbmtIcmVmXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoJ3hsaW5rSHJlZicsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuJ3hsaW5rOmhyZWYnLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIHRydWUsIC8vIHNhbml0aXplVVJMXG5mYWxzZSk7XG5bJ3NyYycsICdocmVmJywgJ2FjdGlvbicsICdmb3JtQWN0aW9uJ10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICBwcm9wZXJ0aWVzW2F0dHJpYnV0ZU5hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChhdHRyaWJ1dGVOYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICB0cnVlLCAvLyBzYW5pdGl6ZVVSTFxuICB0cnVlKTtcbn0pO1xuXG4vLyBhbmQgYW55IG5ld2xpbmUgb3IgdGFiIGFyZSBmaWx0ZXJlZCBvdXQgYXMgaWYgdGhleSdyZSBub3QgcGFydCBvZiB0aGUgVVJMLlxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtcGFyc2luZ1xuLy8gVGFiIG9yIG5ld2xpbmUgYXJlIGRlZmluZWQgYXMgXFxyXFxuXFx0OlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXRhYi1vci1uZXdsaW5lXG4vLyBBIEMwIGNvbnRyb2wgaXMgYSBjb2RlIHBvaW50IGluIHRoZSByYW5nZSBcXHUwMDAwIE5VTEwgdG8gXFx1MDAxRlxuLy8gSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORSwgaW5jbHVzaXZlOlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2MwLWNvbnRyb2wtb3Itc3BhY2VcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG52YXIgaXNKYXZhU2NyaXB0UHJvdG9jb2wgPSAvXltcXHUwMDAwLVxcdTAwMUYgXSpqW1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnZbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qc1tcXHJcXG5cXHRdKmNbXFxyXFxuXFx0XSpyW1xcclxcblxcdF0qaVtcXHJcXG5cXHRdKnBbXFxyXFxuXFx0XSp0W1xcclxcblxcdF0qXFw6L2k7XG52YXIgZGlkV2FybiA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzYW5pdGl6ZVVSTCh1cmwpIHtcbiAge1xuICAgIGlmICghZGlkV2FybiAmJiBpc0phdmFTY3JpcHRQcm90b2NvbC50ZXN0KHVybCkpIHtcbiAgICAgIGRpZFdhcm4gPSB0cnVlO1xuXG4gICAgICBlcnJvcignQSBmdXR1cmUgdmVyc2lvbiBvZiBSZWFjdCB3aWxsIGJsb2NrIGphdmFzY3JpcHQ6IFVSTHMgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLiAnICsgJ1VzZSBldmVudCBoYW5kbGVycyBpbnN0ZWFkIGlmIHlvdSBjYW4uIElmIHlvdSBuZWVkIHRvIGdlbmVyYXRlIHVuc2FmZSBIVE1MIHRyeSAnICsgJ3VzaW5nIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGluc3RlYWQuIFJlYWN0IHdhcyBwYXNzZWQgJXMuJywgSlNPTi5zdHJpbmdpZnkodXJsKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuIE9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICogVGhlIFwiZXhwZWN0ZWRcIiBhcmd1bWVudCBpcyB1c2VkIGFzIGEgaGludCBvZiB3aGF0IHRoZSBleHBlY3RlZCB2YWx1ZSBpcy5cbiAqIFNvbWUgcHJvcGVydGllcyBoYXZlIG11bHRpcGxlIGVxdWl2YWxlbnQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8pIHtcbiAge1xuICAgIGlmIChwcm9wZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5KSB7XG4gICAgICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJbmZvLnByb3BlcnR5TmFtZTtcbiAgICAgIHJldHVybiBub2RlW3Byb3BlcnR5TmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICggcHJvcGVydHlJbmZvLnNhbml0aXplVVJMKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgZnVsbHkgZGlzYWJsZWQgamF2YXNjcmlwdDogVVJMcywgYW5kIGlmXG4gICAgICAgIC8vIHRoZSBoeWRyYXRpb24gaXMgc3VjY2Vzc2Z1bCBvZiBhIGphdmFzY3JpcHQ6IFVSTCwgd2VcbiAgICAgICAgLy8gc3RpbGwgd2FudCB0byB3YXJuIG9uIHRoZSBjbGllbnQuXG4gICAgICAgIHNhbml0aXplVVJMKCcnICsgZXhwZWN0ZWQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lO1xuICAgICAgdmFyIHN0cmluZ1ZhbHVlID0gbnVsbDtcblxuICAgICAgaWYgKHByb3BlcnR5SW5mby50eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU4pIHtcbiAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICAgIC8vIFdlIGhhZCBhbiBhdHRyaWJ1dGUgYnV0IHNob3VsZG4ndCBoYXZlIGhhZCBvbmUsIHNvIHJlYWQgaXRcbiAgICAgICAgICAvLyBmb3IgdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mby50eXBlID09PSBCT09MRUFOKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBib29sZWFuLCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSB2YWx1ZSBpc1xuICAgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBpdCBpcyB0aGUgc2FtZSBhcyB0aGUgZXhwZWN0ZWQuXG4gICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICB9IC8vIEV2ZW4gaWYgdGhpcyBwcm9wZXJ0eSB1c2VzIGEgbmFtZXNwYWNlIHdlIHVzZSBnZXRBdHRyaWJ1dGVcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBhc3N1bWUgaXRzIG5hbWVzcGFjZWQgbmFtZSBpcyB0aGUgc2FtZSBhcyBvdXIgY29uZmlnLlxuICAgICAgICAvLyBUbyB1c2UgZ2V0QXR0cmlidXRlTlMgd2UgbmVlZCB0aGUgbG9jYWwgbmFtZSB3aGljaCB3ZSBkb24ndCBoYXZlXG4gICAgICAgIC8vIGluIG91ciBjb25maWcgYXRtLlxuXG5cbiAgICAgICAgc3RyaW5nVmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlID09PSBudWxsID8gZXhwZWN0ZWQgOiBzdHJpbmdWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyaW5nVmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhIGF0dHJpYnV0ZSBvbiBhIG5vZGUuIE9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICogVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHVzZWQgYXMgYSBoaW50IG9mIHdoYXQgdGhlIGV4cGVjdGVkIHZhbHVlIGlzLiBTb21lXG4gKiBhdHRyaWJ1dGVzIGhhdmUgbXVsdGlwbGUgZXF1aXZhbGVudCB2YWx1ZXMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUobm9kZSwgbmFtZSwgZXhwZWN0ZWQpIHtcbiAge1xuICAgIGlmICghaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgdGhlIG9iamVjdCBpcyBhbiBvcGFxdWUgcmVmZXJlbmNlIElELCBpdCdzIGV4cGVjdGVkIHRoYXRcbiAgICAvLyB0aGUgbmV4dCBwcm9wIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBzZXJ2ZXIgdmFsdWUsIHNvIGp1c3QgcmV0dXJuXG4gICAgLy8gZXhwZWN0ZWRcblxuXG4gICAgaWYgKGlzT3BhcXVlSHlkcmF0aW5nT2JqZWN0KGV4cGVjdGVkKSkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgIH1cblxuICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5cbmZ1bmN0aW9uIHNldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8obmFtZSk7XG5cbiAgaWYgKHNob3VsZElnbm9yZUF0dHJpYnV0ZShuYW1lLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgdmFsdWUgPSBudWxsO1xuICB9IC8vIElmIHRoZSBwcm9wIGlzbid0IGluIHRoZSBzcGVjaWFsIGxpc3QsIHRyZWF0IGl0IGFzIGEgc2ltcGxlIGF0dHJpYnV0ZS5cblxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZyB8fCBwcm9wZXJ0eUluZm8gPT09IG51bGwpIHtcbiAgICBpZiAoaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgdmFyIF9hdHRyaWJ1dGVOYW1lID0gbmFtZTtcblxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKF9hdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKF9hdHRyaWJ1dGVOYW1lLCAgJycgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG11c3RVc2VQcm9wZXJ0eSA9IHByb3BlcnR5SW5mby5tdXN0VXNlUHJvcGVydHk7XG5cbiAgaWYgKG11c3RVc2VQcm9wZXJ0eSkge1xuICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICB2YXIgdHlwZSA9IHByb3BlcnR5SW5mby50eXBlO1xuICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdHlwZSA9PT0gQk9PTEVBTiA/IGZhbHNlIDogJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnRyYXJ5IHRvIGBzZXRBdHRyaWJ1dGVgLCBvYmplY3QgcHJvcGVydGllcyBhcmUgcHJvcGVybHlcbiAgICAgIC8vIGB0b1N0cmluZ2BlZCBieSBJRTgvOS5cbiAgICAgIG5vZGVbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfSAvLyBUaGUgcmVzdCBhcmUgdHJlYXRlZCBhcyBhdHRyaWJ1dGVzIHdpdGggc3BlY2lhbCBjYXNlcy5cblxuXG4gIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUsXG4gICAgICBhdHRyaWJ1dGVOYW1lc3BhY2UgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZXNwYWNlO1xuXG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBfdHlwZSA9IHByb3BlcnR5SW5mby50eXBlO1xuICAgIHZhciBhdHRyaWJ1dGVWYWx1ZTtcblxuICAgIGlmIChfdHlwZSA9PT0gQk9PTEVBTiB8fCBfdHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOICYmIHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAvLyBJZiBhdHRyaWJ1dGUgdHlwZSBpcyBib29sZWFuLCB3ZSBrbm93IGZvciBzdXJlIGl0IHdvbid0IGJlIGFuIGV4ZWN1dGlvbiBzaW5rXG4gICAgICAvLyBhbmQgd2Ugd29uJ3QgcmVxdWlyZSBUcnVzdGVkIFR5cGUgaGVyZS5cbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGBzZXRBdHRyaWJ1dGVgIHdpdGggb2JqZWN0cyBiZWNvbWVzIG9ubHkgYFtvYmplY3RdYCBpbiBJRTgvOSxcbiAgICAgIC8vICgnJyArIHZhbHVlKSBtYWtlcyBpdCBvdXRwdXQgdGhlIGNvcnJlY3QgdG9TdHJpbmcoKS12YWx1ZS5cbiAgICAgIHtcbiAgICAgICAgYXR0cmlidXRlVmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHlJbmZvLnNhbml0aXplVVJMKSB7XG4gICAgICAgIHNhbml0aXplVVJMKGF0dHJpYnV0ZVZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhdHRyaWJ1dGVOYW1lc3BhY2UpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlTlMoYXR0cmlidXRlTmFtZXNwYWNlLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IDB4ZWFjZTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEV4dHJhY3QgdGhlIFZNIHNwZWNpZmljIHByZWZpeCB1c2VkIGJ5IGVhY2ggbGluZS5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xuICAgICAgfVxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXG5cblxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XG4gIH1cbn1cbnZhciByZWVudHJ5ID0gZmFsc2U7XG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcblxue1xuICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuICBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXG4gIGlmICghZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHtcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG5cbiAgICBpZiAoZnJhbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250cm9sO1xuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHZhciBwcmV2aW91c0Rpc3BhdGNoZXI7XG5cbiAge1xuICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoY3Rvciwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShjdG9yLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBzb3VyY2UsIG93bmVyRm4pO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRmliZXIoZmliZXIpIHtcbiAgdmFyIG93bmVyID0gIGZpYmVyLl9kZWJ1Z093bmVyID8gZmliZXIuX2RlYnVnT3duZXIudHlwZSA6IG51bGwgO1xuICB2YXIgc291cmNlID0gIGZpYmVyLl9kZWJ1Z1NvdXJjZSA7XG5cbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ0xhenknKTtcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG5cbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlLnJlbmRlcik7XG5cbiAgICBjYXNlIEJsb2NrOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlLl9yZW5kZXIpO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZCh3b3JrSW5Qcm9ncmVzcykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gJyc7XG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIGRvIHtcbiAgICAgIGluZm8gKz0gZGVzY3JpYmVGaWJlcihub2RlKTtcbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChub2RlKTtcblxuICAgIHJldHVybiBpbmZvO1xuICB9IGNhdGNoICh4KSB7XG4gICAgcmV0dXJuICdcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiAnICsgeC5tZXNzYWdlICsgJ1xcbicgKyB4LnN0YWNrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xudmFyIGN1cnJlbnQgPSBudWxsO1xudmFyIGlzUmVuZGVyaW5nID0gZmFsc2U7XG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHtcbiAge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgb3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIHR5cGVvZiBvd25lciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IC8vIFNhZmUgYmVjYXVzZSBpZiBjdXJyZW50IGZpYmVyIGV4aXN0cywgd2UgYXJlIHJlY29uY2lsaW5nLFxuICAgIC8vIGFuZCBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSB3b3JrLWluLXByb2dyZXNzIHZlcnNpb24uXG5cblxuICAgIHJldHVybiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoY3VycmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRDdXJyZW50RmliZXIoKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG4gICAgY3VycmVudCA9IG51bGw7XG4gICAgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0Q3VycmVudEZpYmVyKGZpYmVyKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXY7XG4gICAgY3VycmVudCA9IGZpYmVyO1xuICAgIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldElzUmVuZGVyaW5nKHJlbmRlcmluZykge1xuICB7XG4gICAgaXNSZW5kZXJpbmcgPSByZW5kZXJpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldElzUmVuZGVyaW5nKCkge1xuICB7XG4gICAgcmV0dXJuIGlzUmVuZGVyaW5nO1xuICB9XG59XG5cbi8vIEZsb3cgZG9lcyBub3QgYWxsb3cgc3RyaW5nIGNvbmNhdGVuYXRpb24gb2YgbW9zdCBub24tc3RyaW5nIHR5cGVzLiBUbyB3b3JrXG4vLyBhcm91bmQgdGhpcyBsaW1pdGF0aW9uLCB3ZSB1c2UgYW4gb3BhcXVlIHR5cGUgdGhhdCBjYW4gb25seSBiZSBvYnRhaW5lZCBieVxuLy8gcGFzc2luZyB0aGUgdmFsdWUgdGhyb3VnaCBnZXRUb1N0cmluZ1ZhbHVlIGZpcnN0LlxuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBmdW5jdGlvbiwgc3ltYm9sIGFyZSBhc3NpZ25lZCBhcyBlbXB0eSBzdHJpbmdzXG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxudmFyIGhhc1JlYWRPbmx5VmFsdWUgPSB7XG4gIGJ1dHRvbjogdHJ1ZSxcbiAgY2hlY2tib3g6IHRydWUsXG4gIGltYWdlOiB0cnVlLFxuICBoaWRkZW46IHRydWUsXG4gIHJhZGlvOiB0cnVlLFxuICByZXNldDogdHJ1ZSxcbiAgc3VibWl0OiB0cnVlXG59O1xuZnVuY3Rpb24gY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyh0YWdOYW1lLCBwcm9wcykge1xuICB7XG4gICAgaWYgKCEoaGFzUmVhZE9ubHlWYWx1ZVtwcm9wcy50eXBlXSB8fCBwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5vbklucHV0IHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkIHx8IHByb3BzLnZhbHVlID09IG51bGwpKSB7XG4gICAgICBlcnJvcignWW91IHByb3ZpZGVkIGEgYHZhbHVlYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgKyAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICsgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRWYWx1ZWAuIE90aGVyd2lzZSwgJyArICdzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIShwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCB8fCBwcm9wcy5jaGVja2VkID09IG51bGwpKSB7XG4gICAgICBlcnJvcignWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdENoZWNrZWRgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2hlY2thYmxlKGVsZW0pIHtcbiAgdmFyIHR5cGUgPSBlbGVtLnR5cGU7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmICh0eXBlID09PSAnY2hlY2tib3gnIHx8IHR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFja2VyKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuX3ZhbHVlVHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gZGV0YWNoVHJhY2tlcihub2RlKSB7XG4gIG5vZGUuX3ZhbHVlVHJhY2tlciA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRnJvbU5vZGUobm9kZSkge1xuICB2YXIgdmFsdWUgPSAnJztcblxuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAoaXNDaGVja2FibGUobm9kZSkpIHtcbiAgICB2YWx1ZSA9IG5vZGUuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBub2RlLnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlRmllbGQgPSBpc0NoZWNrYWJsZShub2RlKSA/ICdjaGVja2VkJyA6ICd2YWx1ZSc7XG4gIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihub2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgdmFsdWVGaWVsZCk7XG4gIHZhciBjdXJyZW50VmFsdWUgPSAnJyArIG5vZGVbdmFsdWVGaWVsZF07IC8vIGlmIHNvbWVvbmUgaGFzIGFscmVhZHkgZGVmaW5lZCBhIHZhbHVlIG9yIFNhZmFyaSwgdGhlbiBiYWlsXG4gIC8vIGFuZCBkb24ndCB0cmFjayB2YWx1ZSB3aWxsIGNhdXNlIG92ZXIgcmVwb3J0aW5nIG9mIGNoYW5nZXMsXG4gIC8vIGJ1dCBpdCdzIGJldHRlciB0aGVuIGEgaGFyZCBmYWlsdXJlXG4gIC8vIChuZWVkZWQgZm9yIGNlcnRhaW4gdGVzdHMgdGhhdCBzcHlPbiBpbnB1dCB2YWx1ZXMgYW5kIFNhZmFyaSlcblxuICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eSh2YWx1ZUZpZWxkKSB8fCB0eXBlb2YgZGVzY3JpcHRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnNldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBnZXQgPSBkZXNjcmlwdG9yLmdldCxcbiAgICAgIHNldCA9IGRlc2NyaXB0b3Iuc2V0O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXQuY2FsbCh0aGlzKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH1cbiAgfSk7IC8vIFdlIGNvdWxkJ3ZlIHBhc3NlZCB0aGlzIHRoZSBmaXJzdCB0aW1lXG4gIC8vIGJ1dCBpdCB0cmlnZ2VycyBhIGJ1ZyBpbiBJRTExIGFuZCBFZGdlIDE0LzE1LlxuICAvLyBDYWxsaW5nIGRlZmluZVByb3BlcnR5KCkgYWdhaW4gc2hvdWxkIGJlIGVxdWl2YWxlbnQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE3NjhcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZVxuICB9KTtcbiAgdmFyIHRyYWNrZXIgPSB7XG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgfSxcbiAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgIH0sXG4gICAgc3RvcFRyYWNraW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXRhY2hUcmFja2VyKG5vZGUpO1xuICAgICAgZGVsZXRlIG5vZGVbdmFsdWVGaWVsZF07XG4gICAgfVxuICB9O1xuICByZXR1cm4gdHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gdHJhY2sobm9kZSkge1xuICBpZiAoZ2V0VHJhY2tlcihub2RlKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBUT0RPOiBPbmNlIGl0J3MganVzdCBGaWJlciB3ZSBjYW4gbW92ZSB0aGlzIHRvIG5vZGUuX3dyYXBwZXJTdGF0ZVxuXG5cbiAgbm9kZS5fdmFsdWVUcmFja2VyID0gdHJhY2tWYWx1ZU9uTm9kZShub2RlKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKG5vZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRyYWNrZXIgPSBnZXRUcmFja2VyKG5vZGUpOyAvLyBpZiB0aGVyZSBpcyBubyB0cmFja2VyIGF0IHRoaXMgcG9pbnQgaXQncyB1bmxpa2VseVxuICAvLyB0aGF0IHRyeWluZyBhZ2FpbiB3aWxsIHN1Y2NlZWRcblxuICBpZiAoIXRyYWNrZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBsYXN0VmFsdWUgPSB0cmFja2VyLmdldFZhbHVlKCk7XG4gIHZhciBuZXh0VmFsdWUgPSBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpO1xuXG4gIGlmIChuZXh0VmFsdWUgIT09IGxhc3RWYWx1ZSkge1xuICAgIHRyYWNrZXIuc2V0VmFsdWUobmV4dFZhbHVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudChkb2MpIHtcbiAgZG9jID0gZG9jIHx8ICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQgOiB1bmRlZmluZWQpO1xuXG4gIGlmICh0eXBlb2YgZG9jID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZG9jLmFjdGl2ZUVsZW1lbnQgfHwgZG9jLmJvZHk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZG9jLmJvZHk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gZmFsc2U7XG52YXIgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBpc0NvbnRyb2xsZWQocHJvcHMpIHtcbiAgdmFyIHVzZXNDaGVja2VkID0gcHJvcHMudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09PSAncmFkaW8nO1xuICByZXR1cm4gdXNlc0NoZWNrZWQgPyBwcm9wcy5jaGVja2VkICE9IG51bGwgOiBwcm9wcy52YWx1ZSAhPSBudWxsO1xufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxpbnB1dD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyB0aGVzZSBvcHRpb25hbFxuICogcHJvcHM6IGBjaGVja2VkYCwgYHZhbHVlYCwgYGRlZmF1bHRDaGVja2VkYCwgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICpcbiAqIElmIGBjaGVja2VkYCBvciBgdmFsdWVgIGFyZSBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zXG4gKiB0aGF0IGFmZmVjdCB0aGUgY2hlY2tlZCBzdGF0ZSBvciB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiB0aGV5IGFyZSBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgbm90XG4gKiB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBwcm9wcyBtdXN0IGNoYW5nZSBpbiBvcmRlciBmb3JcbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCBhcyB1bmNoZWNrZWQgKG9yIGBkZWZhdWx0Q2hlY2tlZGApXG4gKiB3aXRoIGFuIGVtcHR5IHZhbHVlIChvciBgZGVmYXVsdFZhbHVlYCkuXG4gKlxuICogU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjEwMjUvdGhlLWlucHV0LWVsZW1lbnQuaHRtbFxuICovXG5cblxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIGRlZmF1bHRDaGVja2VkOiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICBjaGVja2VkOiBjaGVja2VkICE9IG51bGwgPyBjaGVja2VkIDogbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkXG4gIH0pO1xuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCdpbnB1dCcsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5jaGVja2VkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIGNoZWNrZWQgYW5kIGRlZmF1bHRDaGVja2VkIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSBjaGVja2VkIHByb3AsIG9yIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSk7XG5cbiAgICAgIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKTtcblxuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCA/ICcnIDogcHJvcHMuZGVmYXVsdFZhbHVlO1xuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbENoZWNrZWQ6IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA/IHByb3BzLmNoZWNrZWQgOiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICBpbml0aWFsVmFsdWU6IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUgIT0gbnVsbCA/IHByb3BzLnZhbHVlIDogZGVmYXVsdFZhbHVlKSxcbiAgICBjb250cm9sbGVkOiBpc0NvbnRyb2xsZWQocHJvcHMpXG4gIH07XG59XG5mdW5jdGlvbiB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIGlmIChjaGVja2VkICE9IG51bGwpIHtcbiAgICBzZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsICdjaGVja2VkJywgY2hlY2tlZCwgZmFsc2UpO1xuICB9XG59XG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgdmFyIGNvbnRyb2xsZWQgPSBpc0NvbnRyb2xsZWQocHJvcHMpO1xuXG4gICAgaWYgKCFub2RlLl93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiBjb250cm9sbGVkICYmICFkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYW4gdW5jb250cm9sbGVkIGlucHV0IHRvIGJlIGNvbnRyb2xsZWQuICcgKyAnVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIHVuZGVmaW5lZCB0byAnICsgJ2EgZGVmaW5lZCB2YWx1ZSwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uICcgKyAnRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmICFjb250cm9sbGVkICYmICFkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYSBjb250cm9sbGVkIGlucHV0IHRvIGJlIHVuY29udHJvbGxlZC4gJyArICdUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gYSBkZWZpbmVkIHRvICcgKyAndW5kZWZpbmVkLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKTtcbiAgdmFyIHZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSk7XG4gIHZhciB0eXBlID0gcHJvcHMudHlwZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKHZhbHVlID09PSAwICYmIG5vZGUudmFsdWUgPT09ICcnIHx8IC8vIFdlIGV4cGxpY2l0bHkgd2FudCB0byBjb2VyY2UgdG8gbnVtYmVyIGhlcmUgaWYgcG9zc2libGUuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIG5vZGUudmFsdWUgIT0gdmFsdWUpIHtcbiAgICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0Jykge1xuICAgIC8vIFN1Ym1pdC9yZXNldCBpbnB1dHMgbmVlZCB0aGUgYXR0cmlidXRlIHJlbW92ZWQgY29tcGxldGVseSB0byBhdm9pZFxuICAgIC8vIGJsYW5rLXRleHQgYnV0dG9ucy5cbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBjb21lcyBmcm9tIGEgY2FzY2FkZSBvZlxuICAgIC8vIHByb3BlcnRpZXM6XG4gICAgLy8gIDEuIFRoZSB2YWx1ZSBSZWFjdCBwcm9wZXJ0eVxuICAgIC8vICAyLiBUaGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5XG4gICAgLy8gIDMuIE90aGVyd2lzZSB0aGVyZSBzaG91bGQgYmUgbm8gY2hhbmdlXG4gICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCd2YWx1ZScpKSB7XG4gICAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgcHJvcHMudHlwZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWYWx1ZScpKSB7XG4gICAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgcHJvcHMudHlwZSwgZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy5kZWZhdWx0VmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgaXQgb25seSBjaGFuZ2VzIHdoZW4gaXQgbmVlZHNcbiAgICAvLyB0byBiZSByZW1vdmVkLCBzdWNoIGFzIHRyYW5zaXRpb25pbmcgZnJvbSBhIGNoZWNrYm94IGludG8gYSB0ZXh0IGlucHV0XG4gICAgaWYgKHByb3BzLmNoZWNrZWQgPT0gbnVsbCAmJiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCAhPSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFwcm9wcy5kZWZhdWx0Q2hlY2tlZDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIoZWxlbWVudCwgcHJvcHMsIGlzSHlkcmF0aW5nKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDsgLy8gRG8gbm90IGFzc2lnbiB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IHNldC4gVGhpcyBwcmV2ZW50cyB1c2VyIHRleHQgaW5wdXRcbiAgLy8gZnJvbSBiZWluZyBsb3N0IGR1cmluZyBTU1IgaHlkcmF0aW9uLlxuXG4gIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSB8fCBwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykpIHtcbiAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG4gICAgdmFyIGlzQnV0dG9uID0gdHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0JzsgLy8gQXZvaWQgc2V0dGluZyB2YWx1ZSBhdHRyaWJ1dGUgb24gc3VibWl0L3Jlc2V0IGlucHV0cyBhcyBpdCBvdmVycmlkZXMgdGhlXG4gICAgLy8gZGVmYXVsdCB2YWx1ZSBwcm92aWRlZCBieSB0aGUgYnJvd3Nlci4gU2VlOiAjMTI4NzJcblxuICAgIGlmIChpc0J1dHRvbiAmJiAocHJvcHMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy52YWx1ZSA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSk7IC8vIERvIG5vdCBhc3NpZ24gdmFsdWUgaWYgaXQgaXMgYWxyZWFkeSBzZXQuIFRoaXMgcHJldmVudHMgdXNlciB0ZXh0IGlucHV0XG4gICAgLy8gZnJvbSBiZWluZyBsb3N0IGR1cmluZyBTU1IgaHlkcmF0aW9uLlxuXG4gICAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgICAge1xuICAgICAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIHByb3BlcnR5IHNob3VsZCB1c2VcbiAgICAgICAgLy8gdGhlIHdyYXBwZXJTdGF0ZS5faW5pdGlhbFZhbHVlIHByb3BlcnR5LiBUaGlzIHVzZXM6XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgMS4gVGhlIHZhbHVlIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgICAgICAvLyAgIDIuIFRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgICAgIC8vICAgMy4gQW4gZW1wdHkgc3RyaW5nXG4gICAgICAgIGlmIChpbml0aWFsVmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgICAgICBub2RlLnZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgYXR0cmlidXRlIGlzIHN5bmNocm9uaXplZCB0byB0aGUgcHJvcGVydHksXG4gICAgICAvLyBzbyB3ZSBhc3NpZ24gZGVmYXVsdFZhbHVlIHRvIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgLy8gYXNzaWdubWVudCBzdGVwIGFib3ZlLlxuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgfVxuICB9IC8vIE5vcm1hbGx5LCB3ZSdkIGp1c3QgZG8gYG5vZGUuY2hlY2tlZCA9IG5vZGUuY2hlY2tlZGAgdXBvbiBpbml0aWFsIG1vdW50LCBsZXNzIHRoaXMgYnVnXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIHdvcmsgYXJvdW5kIGEgY2hyb21lIGJ1ZyB3aGVyZSBzZXR0aW5nIGRlZmF1bHRDaGVja2VkXG4gIC8vIHdpbGwgc29tZXRpbWVzIGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YgY2hlY2tlZCAoZXZlbiBhZnRlciBkZXRhY2htZW50KS5cbiAgLy8gUmVmZXJlbmNlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02MDg0MTZcbiAgLy8gV2UgbmVlZCB0byB0ZW1wb3JhcmlseSB1bnNldCBuYW1lIHRvIGF2b2lkIGRpc3J1cHRpbmcgcmFkaW8gYnV0dG9uIGdyb3Vwcy5cblxuXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lO1xuXG4gIGlmIChuYW1lICE9PSAnJykge1xuICAgIG5vZGUubmFtZSA9ICcnO1xuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIGJvdGggdGhlIGNoZWNrZWQgcHJvcGVydHkgYW5kXG4gICAgLy8gYXR0cmlidXRlIGFyZSBhc3NpZ25lZCBhdCB0aGUgc2FtZSB0aW1lIHVzaW5nIGRlZmF1bHRDaGVja2VkLiBUaGlzIHVzZXM6XG4gICAgLy9cbiAgICAvLyAgIDEuIFRoZSBjaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMi4gVGhlIGRlZmF1bHRDaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMy4gT3RoZXJ3aXNlLCBmYWxzZVxuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhbm9kZS5kZWZhdWx0Q2hlY2tlZDtcbiAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQ7XG4gIH1cblxuICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICBub2RlLm5hbWUgPSBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdXBkYXRlV3JhcHBlcihub2RlLCBwcm9wcyk7XG4gIHVwZGF0ZU5hbWVkQ291c2lucyhub2RlLCBwcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU5hbWVkQ291c2lucyhyb290Tm9kZSwgcHJvcHMpIHtcbiAgdmFyIG5hbWUgPSBwcm9wcy5uYW1lO1xuXG4gIGlmIChwcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5hbWUgIT0gbnVsbCkge1xuICAgIHZhciBxdWVyeVJvb3QgPSByb290Tm9kZTtcblxuICAgIHdoaWxlIChxdWVyeVJvb3QucGFyZW50Tm9kZSkge1xuICAgICAgcXVlcnlSb290ID0gcXVlcnlSb290LnBhcmVudE5vZGU7XG4gICAgfSAvLyBJZiBgcm9vdE5vZGUuZm9ybWAgd2FzIG5vbi1udWxsLCB0aGVuIHdlIGNvdWxkIHRyeSBgZm9ybS5lbGVtZW50c2AsXG4gICAgLy8gYnV0IHRoYXQgc29tZXRpbWVzIGJlaGF2ZXMgc3RyYW5nZWx5IGluIElFOC4gV2UgY291bGQgYWxzbyB0cnkgdXNpbmdcbiAgICAvLyBgZm9ybS5nZXRFbGVtZW50c0J5TmFtZWAsIGJ1dCB0aGF0IHdpbGwgb25seSByZXR1cm4gZGlyZWN0IGNoaWxkcmVuXG4gICAgLy8gYW5kIHdvbid0IGluY2x1ZGUgaW5wdXRzIHRoYXQgdXNlIHRoZSBIVE1MNSBgZm9ybT1gIGF0dHJpYnV0ZS4gU2luY2VcbiAgICAvLyB0aGUgaW5wdXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gYSBmb3JtLiBJdCBtaWdodCBub3QgZXZlbiBiZSBpbiB0aGVcbiAgICAvLyBkb2N1bWVudC4gTGV0J3MganVzdCB1c2UgdGhlIGxvY2FsIGBxdWVyeVNlbGVjdG9yQWxsYCB0byBlbnN1cmUgd2UgZG9uJ3RcbiAgICAvLyBtaXNzIGFueXRoaW5nLlxuXG5cbiAgICB2YXIgZ3JvdXAgPSBxdWVyeVJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbbmFtZT0nICsgSlNPTi5zdHJpbmdpZnkoJycgKyBuYW1lKSArICddW3R5cGU9XCJyYWRpb1wiXScpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG90aGVyTm9kZSA9IGdyb3VwW2ldO1xuXG4gICAgICBpZiAob3RoZXJOb2RlID09PSByb290Tm9kZSB8fCBvdGhlck5vZGUuZm9ybSAhPT0gcm9vdE5vZGUuZm9ybSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gVGhpcyB3aWxsIHRocm93IGlmIHJhZGlvIGJ1dHRvbnMgcmVuZGVyZWQgYnkgZGlmZmVyZW50IGNvcGllcyBvZiBSZWFjdFxuICAgICAgLy8gYW5kIHRoZSBzYW1lIG5hbWUgYXJlIHJlbmRlcmVkIGludG8gdGhlIHNhbWUgZm9ybSAoc2FtZSBhcyAjMTkzOSkuXG4gICAgICAvLyBUaGF0J3MgcHJvYmFibHkgb2theTsgd2UgZG9uJ3Qgc3VwcG9ydCBpdCBqdXN0IGFzIHdlIGRvbid0IHN1cHBvcnRcbiAgICAgIC8vIG1peGluZyBSZWFjdCByYWRpbyBidXR0b25zIHdpdGggbm9uLVJlYWN0IG9uZXMuXG5cblxuICAgICAgdmFyIG90aGVyUHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKG90aGVyTm9kZSk7XG5cbiAgICAgIGlmICghb3RoZXJQcm9wcykge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3RET01JbnB1dDogTWl4aW5nIFJlYWN0IGFuZCBub24tUmVhY3QgcmFkaW8gaW5wdXRzIHdpdGggdGhlIHNhbWUgYG5hbWVgIGlzIG5vdCBzdXBwb3J0ZWQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBXZSBuZWVkIHVwZGF0ZSB0aGUgdHJhY2tlZCB2YWx1ZSBvbiB0aGUgbmFtZWQgY291c2luIHNpbmNlIHRoZSB2YWx1ZVxuICAgICAgLy8gd2FzIGNoYW5nZWQgYnV0IHRoZSBpbnB1dCBzYXcgbm8gZXZlbnQgb3IgdmFsdWUgc2V0XG5cblxuICAgICAgdXBkYXRlVmFsdWVJZkNoYW5nZWQob3RoZXJOb2RlKTsgLy8gSWYgdGhpcyBpcyBhIGNvbnRyb2xsZWQgcmFkaW8gYnV0dG9uIGdyb3VwLCBmb3JjaW5nIHRoZSBpbnB1dCB0aGF0XG4gICAgICAvLyB3YXMgcHJldmlvdXNseSBjaGVja2VkIHRvIHVwZGF0ZSB3aWxsIGNhdXNlIGl0IHRvIGJlIGNvbWUgcmUtY2hlY2tlZFxuICAgICAgLy8gYXMgYXBwcm9wcmlhdGUuXG5cbiAgICAgIHVwZGF0ZVdyYXBwZXIob3RoZXJOb2RlLCBvdGhlclByb3BzKTtcbiAgICB9XG4gIH1cbn0gLy8gSW4gQ2hyb21lLCBhc3NpZ25pbmcgZGVmYXVsdFZhbHVlIHRvIGNlcnRhaW4gaW5wdXQgdHlwZXMgdHJpZ2dlcnMgaW5wdXQgdmFsaWRhdGlvbi5cbi8vIEZvciBudW1iZXIgaW5wdXRzLCB0aGUgZGlzcGxheSB2YWx1ZSBsb3NlcyB0cmFpbGluZyBkZWNpbWFsIHBvaW50cy4gRm9yIGVtYWlsIGlucHV0cyxcbi8vIENocm9tZSByYWlzZXMgXCJUaGUgc3BlY2lmaWVkIHZhbHVlIDx4PiBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIuXG4vL1xuLy8gSGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGRlZmF1bHRWYWx1ZSBoYXMgYWN0dWFsbHkgY2hhbmdlZCwgYXZvaWRpbmcgdGhlc2UgcHJvYmxlbXNcbi8vIHdoZW4gdGhlIHVzZXIgaXMgaW5wdXR0aW5nIHRleHRcbi8vXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNTNcblxuXG5mdW5jdGlvbiBzZXREZWZhdWx0VmFsdWUobm9kZSwgdHlwZSwgdmFsdWUpIHtcbiAgaWYgKCAvLyBGb2N1c2VkIG51bWJlciBpbnB1dHMgc3luY2hyb25pemUgb24gYmx1ci4gU2VlIENoYW5nZUV2ZW50UGx1Z2luLmpzXG4gIHR5cGUgIT09ICdudW1iZXInIHx8IGdldEFjdGl2ZUVsZW1lbnQobm9kZS5vd25lckRvY3VtZW50KSAhPT0gbm9kZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5kZWZhdWx0VmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9IGZhbHNlO1xudmFyIGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmxhdHRlbkNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBjb250ZW50ID0gJyc7IC8vIEZsYXR0ZW4gY2hpbGRyZW4uIFdlJ2xsIHdhcm4gaWYgdGhleSBhcmUgaW52YWxpZFxuICAvLyBkdXJpbmcgdmFsaWRhdGVQcm9wcygpIHdoaWNoIHJ1bnMgZm9yIGh5ZHJhdGlvbiB0b28uXG4gIC8vIE5vdGUgdGhhdCB0aGlzIHdvdWxkIHRocm93IG9uIG5vbi1lbGVtZW50IG9iamVjdHMuXG4gIC8vIEVsZW1lbnRzIGFyZSBzdHJpbmdpZmllZCAod2hpY2ggaXMgbm9ybWFsbHkgaXJyZWxldmFudFxuICAvLyBidXQgbWF0dGVycyBmb3IgPGZidD4pLlxuXG4gIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIGlmIChjaGlsZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGVudCArPSBjaGlsZDsgLy8gTm90ZTogd2UgZG9uJ3Qgd2FybiBhYm91dCBpbnZhbGlkIGNoaWxkcmVuIGhlcmUuXG4gICAgLy8gSW5zdGVhZCwgdGhpcyBpcyBkb25lIHNlcGFyYXRlbHkgYmVsb3cgc28gdGhhdFxuICAgIC8vIGl0IGhhcHBlbnMgZHVyaW5nIHRoZSBoeWRyYXRpb24gY29kZSBwYXRoIHRvby5cbiAgfSk7XG4gIHJldHVybiBjb250ZW50O1xufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxvcHRpb24+IGhvc3QgY29tcG9uZW50IHRoYXQgd2FybnMgd2hlbiBgc2VsZWN0ZWRgIGlzIHNldC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAge1xuICAgIC8vIFRoaXMgbWlycm9ycyB0aGUgY29kZSBwYXRoIGFib3ZlLCBidXQgcnVucyBmb3IgaHlkcmF0aW9uIHRvby5cbiAgICAvLyBXYXJuIGFib3V0IGludmFsaWQgY2hpbGRyZW4gaGVyZSBzbyB0aGF0IGNsaWVudCBhbmQgaHlkcmF0aW9uIGFyZSBjb25zaXN0ZW50LlxuICAgIC8vIFRPRE86IHRoaXMgc2VlbXMgbGlrZSBpdCBjb3VsZCBjYXVzZSBhIERFVi1vbmx5IHRocm93IGZvciBoeWRyYXRpb25cbiAgICAvLyBpZiBjaGlsZHJlbiBjb250YWlucyBhIG5vbi1lbGVtZW50IG9iamVjdC4gV2Ugc2hvdWxkIHRyeSB0byBhdm9pZCB0aGF0LlxuICAgIGlmICh0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdvYmplY3QnICYmIHByb3BzLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZC50eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkV2FybkludmFsaWRDaGlsZCkge1xuICAgICAgICAgIGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ09ubHkgc3RyaW5ncyBhbmQgbnVtYmVycyBhcmUgc3VwcG9ydGVkIGFzIDxvcHRpb24+IGNoaWxkcmVuLicpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IC8vIFRPRE86IFJlbW92ZSBzdXBwb3J0IGZvciBgc2VsZWN0ZWRgIGluIDxvcHRpb24+LlxuXG5cbiAgICBpZiAocHJvcHMuc2VsZWN0ZWQgIT0gbnVsbCAmJiAhZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24pIHtcbiAgICAgIGVycm9yKCdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgb24gPHNlbGVjdD4gaW5zdGVhZCBvZiAnICsgJ3NldHRpbmcgYHNlbGVjdGVkYCBvbiA8b3B0aW9uPi4nKTtcblxuICAgICAgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIHZhbHVlPVwiXCIgc2hvdWxkIG1ha2UgYSB2YWx1ZSBhdHRyaWJ1dGUgKCM2MjE5KVxuICBpZiAocHJvcHMudmFsdWUgIT0gbnVsbCkge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHRvU3RyaW5nKGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHtcbiAgICBjaGlsZHJlbjogdW5kZWZpbmVkXG4gIH0sIHByb3BzKTtcblxuICB2YXIgY29udGVudCA9IGZsYXR0ZW5DaGlsZHJlbihwcm9wcy5jaGlsZHJlbik7XG5cbiAgaWYgKGNvbnRlbnQpIHtcbiAgICBob3N0UHJvcHMuY2hpbGRyZW4gPSBjb250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cblxudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxO1xuXG57XG4gIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG5cbiAgaWYgKG93bmVyTmFtZSkge1xuICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgdmFsdWVQcm9wTmFtZXMgPSBbJ3ZhbHVlJywgJ2RlZmF1bHRWYWx1ZSddO1xuLyoqXG4gKiBWYWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqL1xuXG5mdW5jdGlvbiBjaGVja1NlbGVjdFByb3BUeXBlcyhwcm9wcykge1xuICB7XG4gICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygnc2VsZWN0JywgcHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZVByb3BOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3BOYW1lID0gdmFsdWVQcm9wTmFtZXNbaV07XG5cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHByb3BzW3Byb3BOYW1lXSk7XG5cbiAgICAgIGlmIChwcm9wcy5tdWx0aXBsZSAmJiAhaXNBcnJheSkge1xuICAgICAgICBlcnJvcignVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGFuIGFycmF5IGlmICcgKyAnYG11bHRpcGxlYCBpcyB0cnVlLiVzJywgcHJvcE5hbWUsIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb3BzLm11bHRpcGxlICYmIGlzQXJyYXkpIHtcbiAgICAgICAgZXJyb3IoJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhIHNjYWxhciAnICsgJ3ZhbHVlIGlmIGBtdWx0aXBsZWAgaXMgZmFsc2UuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zKG5vZGUsIG11bHRpcGxlLCBwcm9wVmFsdWUsIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICB2YXIgb3B0aW9ucyA9IG5vZGUub3B0aW9ucztcblxuICBpZiAobXVsdGlwbGUpIHtcbiAgICB2YXIgc2VsZWN0ZWRWYWx1ZXMgPSBwcm9wVmFsdWU7XG4gICAgdmFyIHNlbGVjdGVkVmFsdWUgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIFByZWZpeCB0byBhdm9pZCBjaGFvcyB3aXRoIHNwZWNpYWwga2V5cy5cbiAgICAgIHNlbGVjdGVkVmFsdWVbJyQnICsgc2VsZWN0ZWRWYWx1ZXNbaV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgb3B0aW9ucy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBzZWxlY3RlZCA9IHNlbGVjdGVkVmFsdWUuaGFzT3duUHJvcGVydHkoJyQnICsgb3B0aW9uc1tfaV0udmFsdWUpO1xuXG4gICAgICBpZiAob3B0aW9uc1tfaV0uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbX2ldLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxlY3RlZCAmJiBzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uc1tfaV0uZGVmYXVsdFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHNldCBgc2VsZWN0LnZhbHVlYCBhcyBleGFjdCBiZWhhdmlvciBpc24ndCBjb25zaXN0ZW50IGFjcm9zcyBhbGxcbiAgICAvLyBicm93c2VycyBmb3IgYWxsIGNhc2VzLlxuICAgIHZhciBfc2VsZWN0ZWRWYWx1ZSA9IHRvU3RyaW5nKGdldFRvU3RyaW5nVmFsdWUocHJvcFZhbHVlKSk7XG5cbiAgICB2YXIgZGVmYXVsdFNlbGVjdGVkID0gbnVsbDtcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG9wdGlvbnMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgaWYgKG9wdGlvbnNbX2kyXS52YWx1ZSA9PT0gX3NlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uc1tfaTJdLnNlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICAgICAgb3B0aW9uc1tfaTJdLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0U2VsZWN0ZWQgPT09IG51bGwgJiYgIW9wdGlvbnNbX2kyXS5kaXNhYmxlZCkge1xuICAgICAgICBkZWZhdWx0U2VsZWN0ZWQgPSBvcHRpb25zW19pMl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRTZWxlY3RlZCAhPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFNlbGVjdGVkLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogSW1wbGVtZW50cyBhIDxzZWxlY3Q+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIG9wdGlvbmFsbHkgc2V0dGluZyB0aGVcbiAqIHByb3BzIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLiBJZiBgbXVsdGlwbGVgIGlzIGZhbHNlLCB0aGUgcHJvcCBtdXN0IGJlIGFcbiAqIHN0cmluZ2FibGUuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgdGhlIHByb3AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdhYmxlcy5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlXG4gKiBzZWxlY3RlZCBvcHRpb24gd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gKlxuICogSWYgaXQgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgb3B0aW9ucyB3aWxsIG5vdFxuICogdXBkYXRlIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9ucy4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBvcHRpb25zIHRvIHVwZGF0ZS5cbiAqXG4gKiBJZiBgZGVmYXVsdFZhbHVlYCBpcyBwcm92aWRlZCwgYW55IG9wdGlvbnMgd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzIHdpbGwgYmVcbiAqIHNlbGVjdGVkLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgcmV0dXJuIF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgdmFsdWU6IHVuZGVmaW5lZFxuICB9KTtcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIGNoZWNrU2VsZWN0UHJvcFR5cGVzKHByb3BzKTtcbiAgfVxuXG4gIG5vZGUuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICB3YXNNdWx0aXBsZTogISFwcm9wcy5tdWx0aXBsZVxuICB9O1xuXG4gIHtcbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEpIHtcbiAgICAgIGVycm9yKCdTZWxlY3QgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHNlbGVjdCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJyk7XG5cbiAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIG5vZGUubXVsdGlwbGUgPSAhIXByb3BzLm11bHRpcGxlO1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMuZGVmYXVsdFZhbHVlLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gcG9zdFVwZGF0ZVdyYXBwZXIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgd2FzTXVsdGlwbGUgPSBub2RlLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7XG4gIG5vZGUuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZSA9ICEhcHJvcHMubXVsdGlwbGU7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKHdhc011bHRpcGxlICE9PSAhIXByb3BzLm11bHRpcGxlKSB7XG4gICAgLy8gRm9yIHNpbXBsaWNpdHksIHJlYXBwbHkgYGRlZmF1bHRWYWx1ZWAgaWYgYG11bHRpcGxlYCBpcyB0b2dnbGVkLlxuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5kZWZhdWx0VmFsdWUsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXZlcnQgdGhlIHNlbGVjdCBiYWNrIHRvIGl0cyBkZWZhdWx0IHVuc2VsZWN0ZWQgc3RhdGUuXG4gICAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLm11bHRpcGxlID8gW10gOiAnJywgZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gZmFsc2U7XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDx0ZXh0YXJlYT4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyBgdmFsdWVgLCBhbmRcbiAqIGBkZWZhdWx0VmFsdWVgLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgdHJhZGl0aW9uYWwgRE9NIEFQSSBiZWNhdXNlIHZhbHVlIGlzXG4gKiB1c3VhbGx5IHNldCBhcyBQQ0RBVEEgY2hpbGRyZW4uXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgYWZmZWN0IHRoZVxuICogdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGxcbiAqIG5vdCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBlbXB0eSB2YWx1ZSwgdGhlIHByb3BcbiAqIGBkZWZhdWx0VmFsdWVgIGlmIHNwZWNpZmllZCwgb3IgdGhlIGNoaWxkcmVuIGNvbnRlbnQgKGRlcHJlY2F0ZWQpLlxuICovXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAgaWYgKCEocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugb24gPHRleHRhcmVhPi5cIiApO1xuICAgIH1cbiAgfSAvLyBBbHdheXMgc2V0IGNoaWxkcmVuIHRvIHRoZSBzYW1lIHRoaW5nLiBJbiBJRTksIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugd2lsbFxuICAvLyBnZXQgcmVzZXQgaWYgYHRleHRDb250ZW50YCBpcyBtdXRhdGVkLiAgV2UgY291bGQgYWRkIGEgY2hlY2sgaW4gc2V0VGV4dENvbnRlbnRcbiAgLy8gdG8gb25seSBzZXQgdGhlIHZhbHVlIGlmL3doZW4gdGhlIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgbm9kZSB2YWx1ZSAod2hpY2ggd291bGRcbiAgLy8gY29tcGxldGVseSBzb2x2ZSB0aGlzIElFOSBidWcpLCBidXQgU2ViYXN0aWFuK1NvcGhpZSBzZWVtZWQgdG8gbGlrZSB0aGlzXG4gIC8vIHNvbHV0aW9uLiBUaGUgdmFsdWUgY2FuIGJlIGEgYm9vbGVhbiBvciBvYmplY3Qgc28gdGhhdCdzIHdoeSBpdCdzIGZvcmNlZFxuICAvLyB0byBiZSBhIHN0cmluZy5cblxuXG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgY2hpbGRyZW46IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpXG4gIH0pO1xuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCd0ZXh0YXJlYScsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsRGVmYXVsdFZhbCkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGEgdGV4dGFyZWEgd2l0aCBib3RoIHZhbHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuICcgKyAnVGV4dGFyZWEgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHRleHRhcmVhICcgKyAnYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnKTtcblxuICAgICAgZGlkV2FyblZhbERlZmF1bHRWYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbml0aWFsVmFsdWUgPSBwcm9wcy52YWx1ZTsgLy8gT25seSBib3RoZXIgZmV0Y2hpbmcgZGVmYXVsdCB2YWx1ZSBpZiB3ZSdyZSBnb2luZyB0byB1c2UgaXRcblxuICBpZiAoaW5pdGlhbFZhbHVlID09IG51bGwpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKGNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgZXJyb3IoJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBpbnN0ZWFkIG9mIHNldHRpbmcgJyArICdjaGlsZHJlbiBvbiA8dGV4dGFyZWE+LicpO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmICghKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIklmIHlvdSBzdXBwbHkgYGRlZmF1bHRWYWx1ZWAgb24gYSA8dGV4dGFyZWE+LCBkbyBub3QgcGFzcyBjaGlsZHJlbi5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgIGlmICghKGNoaWxkcmVuLmxlbmd0aCA8PSAxKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCI8dGV4dGFyZWE+IGNhbiBvbmx5IGhhdmUgYXQgbW9zdCBvbmUgY2hpbGQuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdFZhbHVlID0gY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBpbml0aWFsVmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbFZhbHVlOiBnZXRUb1N0cmluZ1ZhbHVlKGluaXRpYWxWYWx1ZSlcbiAgfTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBwZXIkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB2YWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpO1xuICB2YXIgZGVmYXVsdFZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy5kZWZhdWx0VmFsdWUpO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgLy8gQ2FzdCBgdmFsdWVgIHRvIGEgc3RyaW5nIHRvIGVuc3VyZSB0aGUgdmFsdWUgaXMgc2V0IGNvcnJlY3RseS4gV2hpbGVcbiAgICAvLyBicm93c2VycyB0eXBpY2FsbHkgZG8gdGhpcyBhcyBuZWNlc3NhcnksIGpzZG9tIGRvZXNuJ3QuXG4gICAgdmFyIG5ld1ZhbHVlID0gdG9TdHJpbmcodmFsdWUpOyAvLyBUbyBhdm9pZCBzaWRlIGVmZmVjdHMgKHN1Y2ggYXMgbG9zaW5nIHRleHQgc2VsZWN0aW9uKSwgb25seSBzZXQgdmFsdWUgaWYgY2hhbmdlZFxuXG4gICAgaWYgKG5ld1ZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICBub2RlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSA9PSBudWxsICYmIG5vZGUuZGVmYXVsdFZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKGRlZmF1bHRWYWx1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7IC8vIFRoaXMgaXMgaW4gcG9zdE1vdW50IGJlY2F1c2Ugd2UgbmVlZCBhY2Nlc3MgdG8gdGhlIERPTSBub2RlLCB3aGljaCBpcyBub3RcbiAgLy8gYXZhaWxhYmxlIHVudGlsIGFmdGVyIHRoZSBjb21wb25lbnQgaGFzIG1vdW50ZWQuXG5cbiAgdmFyIHRleHRDb250ZW50ID0gbm9kZS50ZXh0Q29udGVudDsgLy8gT25seSBzZXQgbm9kZS52YWx1ZSBpZiB0ZXh0Q29udGVudCBpcyBlcXVhbCB0byB0aGUgZXhwZWN0ZWRcbiAgLy8gaW5pdGlhbCB2YWx1ZS4gSW4gSUUxMC9JRTExIHRoZXJlIGlzIGEgYnVnIHdoZXJlIHRoZSBwbGFjZWhvbGRlciBhdHRyaWJ1dGVcbiAgLy8gd2lsbCBwb3B1bGF0ZSB0ZXh0Q29udGVudCBhcyB3ZWxsLlxuICAvLyBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL2lzc3Vlcy8xMDE1MjUvXG5cbiAgaWYgKHRleHRDb250ZW50ID09PSBub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKSB7XG4gICAgaWYgKHRleHRDb250ZW50ICE9PSAnJyAmJiB0ZXh0Q29udGVudCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRleHRDb250ZW50O1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIERPTSBjb21wb25lbnQgaXMgc3RpbGwgbW91bnRlZDsgdXBkYXRlXG4gIHVwZGF0ZVdyYXBwZXIkMShlbGVtZW50LCBwcm9wcyk7XG59XG5cbnZhciBIVE1MX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcbnZhciBNQVRIX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJztcbnZhciBTVkdfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbnZhciBOYW1lc3BhY2VzID0ge1xuICBodG1sOiBIVE1MX05BTUVTUEFDRSxcbiAgbWF0aG1sOiBNQVRIX05BTUVTUEFDRSxcbiAgc3ZnOiBTVkdfTkFNRVNQQUNFXG59OyAvLyBBc3N1bWVzIHRoZXJlIGlzIG5vIHBhcmVudCBuYW1lc3BhY2UuXG5cbmZ1bmN0aW9uIGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3N2Zyc6XG4gICAgICByZXR1cm4gU1ZHX05BTUVTUEFDRTtcblxuICAgIGNhc2UgJ21hdGgnOlxuICAgICAgcmV0dXJuIE1BVEhfTkFNRVNQQUNFO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBIVE1MX05BTUVTUEFDRTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0Q2hpbGROYW1lc3BhY2UocGFyZW50TmFtZXNwYWNlLCB0eXBlKSB7XG4gIGlmIChwYXJlbnROYW1lc3BhY2UgPT0gbnVsbCB8fCBwYXJlbnROYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgLy8gTm8gKG9yIGRlZmF1bHQpIHBhcmVudCBuYW1lc3BhY2U6IHBvdGVudGlhbCBlbnRyeSBwb2ludC5cbiAgICByZXR1cm4gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpO1xuICB9XG5cbiAgaWYgKHBhcmVudE5hbWVzcGFjZSA9PT0gU1ZHX05BTUVTUEFDRSAmJiB0eXBlID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyBXZSdyZSBsZWF2aW5nIFNWRy5cbiAgICByZXR1cm4gSFRNTF9OQU1FU1BBQ0U7XG4gIH0gLy8gQnkgZGVmYXVsdCwgcGFzcyBuYW1lc3BhY2UgYmVsb3cuXG5cblxuICByZXR1cm4gcGFyZW50TmFtZXNwYWNlO1xufVxuXG4vKiBnbG9iYWxzIE1TQXBwICovXG5cbi8qKlxuICogQ3JlYXRlIGEgZnVuY3Rpb24gd2hpY2ggaGFzICd1bnNhZmUnIHByaXZpbGVnZXMgKHJlcXVpcmVkIGJ5IHdpbmRvd3M4IGFwcHMpXG4gKi9cbnZhciBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgaWYgKHR5cGVvZiBNU0FwcCAhPT0gJ3VuZGVmaW5lZCcgJiYgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgIE1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jO1xuICB9XG59O1xuXG52YXIgcmV1c2FibGVTVkdDb250YWluZXI7XG4vKipcbiAqIFNldCB0aGUgaW5uZXJIVE1MIHByb3BlcnR5IG9mIGEgbm9kZVxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEBpbnRlcm5hbFxuICovXG5cbnZhciBzZXRJbm5lckhUTUwgPSBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uIChub2RlLCBodG1sKSB7XG4gIGlmIChub2RlLm5hbWVzcGFjZVVSSSA9PT0gTmFtZXNwYWNlcy5zdmcpIHtcblxuICAgIGlmICghKCdpbm5lckhUTUwnIGluIG5vZGUpKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGlubmVySFRNTCBmb3IgU1ZHIG5vZGVzLCBzbyBpbnN0ZWFkIHdlIGluamVjdCB0aGVcbiAgICAgIC8vIG5ldyBtYXJrdXAgaW4gYSB0ZW1wIG5vZGUgYW5kIHRoZW4gbW92ZSB0aGUgY2hpbGQgbm9kZXMgYWNyb3NzIGludG9cbiAgICAgIC8vIHRoZSB0YXJnZXQgbm9kZVxuICAgICAgcmV1c2FibGVTVkdDb250YWluZXIgPSByZXVzYWJsZVNWR0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHJldXNhYmxlU1ZHQ29udGFpbmVyLmlubmVySFRNTCA9ICc8c3ZnPicgKyBodG1sLnZhbHVlT2YoKS50b1N0cmluZygpICsgJzwvc3ZnPic7XG4gICAgICB2YXIgc3ZnTm9kZSA9IHJldXNhYmxlU1ZHQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG5cbiAgICAgIHdoaWxlIChub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChub2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoc3ZnTm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoc3ZnTm9kZS5maXJzdENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG5vZGUuaW5uZXJIVE1MID0gaHRtbDtcbn0pO1xuXG4vKipcbiAqIEhUTUwgbm9kZVR5cGUgdmFsdWVzIHRoYXQgcmVwcmVzZW50IHRoZSB0eXBlIG9mIHRoZSBub2RlXG4gKi9cbnZhciBFTEVNRU5UX05PREUgPSAxO1xudmFyIFRFWFRfTk9ERSA9IDM7XG52YXIgQ09NTUVOVF9OT0RFID0gODtcbnZhciBET0NVTUVOVF9OT0RFID0gOTtcbnZhciBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTE7XG5cbi8qKlxuICogU2V0IHRoZSB0ZXh0Q29udGVudCBwcm9wZXJ0eSBvZiBhIG5vZGUuIEZvciB0ZXh0IHVwZGF0ZXMsIGl0J3MgZmFzdGVyXG4gKiB0byBzZXQgdGhlIGBub2RlVmFsdWVgIG9mIHRoZSBUZXh0IG5vZGUgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZ1xuICogYC50ZXh0Q29udGVudGAgd2hpY2ggd2lsbCByZW1vdmUgdGhlIGV4aXN0aW5nIG5vZGUgYW5kIGNyZWF0ZSBhIG5ldyBvbmUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQGludGVybmFsXG4gKi9cblxudmFyIHNldFRleHRDb250ZW50ID0gZnVuY3Rpb24gKG5vZGUsIHRleHQpIHtcbiAgaWYgKHRleHQpIHtcbiAgICB2YXIgZmlyc3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblxuICAgIGlmIChmaXJzdENoaWxkICYmIGZpcnN0Q2hpbGQgPT09IG5vZGUubGFzdENoaWxkICYmIGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSB0ZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufTtcblxuLy8gTGlzdCBkZXJpdmVkIGZyb20gR2Vja28gc291cmNlIGNvZGU6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrby1kZXYvYmxvYi80ZTYzOGVmYzcxL2xheW91dC9zdHlsZS90ZXN0L3Byb3BlcnR5X2RhdGFiYXNlLmpzXG52YXIgc2hvcnRoYW5kVG9Mb25naGFuZCA9IHtcbiAgYW5pbWF0aW9uOiBbJ2FuaW1hdGlvbkRlbGF5JywgJ2FuaW1hdGlvbkRpcmVjdGlvbicsICdhbmltYXRpb25EdXJhdGlvbicsICdhbmltYXRpb25GaWxsTW9kZScsICdhbmltYXRpb25JdGVyYXRpb25Db3VudCcsICdhbmltYXRpb25OYW1lJywgJ2FuaW1hdGlvblBsYXlTdGF0ZScsICdhbmltYXRpb25UaW1pbmdGdW5jdGlvbiddLFxuICBiYWNrZ3JvdW5kOiBbJ2JhY2tncm91bmRBdHRhY2htZW50JywgJ2JhY2tncm91bmRDbGlwJywgJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kSW1hZ2UnLCAnYmFja2dyb3VuZE9yaWdpbicsICdiYWNrZ3JvdW5kUG9zaXRpb25YJywgJ2JhY2tncm91bmRQb3NpdGlvblknLCAnYmFja2dyb3VuZFJlcGVhdCcsICdiYWNrZ3JvdW5kU2l6ZSddLFxuICBiYWNrZ3JvdW5kUG9zaXRpb246IFsnYmFja2dyb3VuZFBvc2l0aW9uWCcsICdiYWNrZ3JvdW5kUG9zaXRpb25ZJ10sXG4gIGJvcmRlcjogWydib3JkZXJCb3R0b21Db2xvcicsICdib3JkZXJCb3R0b21TdHlsZScsICdib3JkZXJCb3R0b21XaWR0aCcsICdib3JkZXJJbWFnZU91dHNldCcsICdib3JkZXJJbWFnZVJlcGVhdCcsICdib3JkZXJJbWFnZVNsaWNlJywgJ2JvcmRlckltYWdlU291cmNlJywgJ2JvcmRlckltYWdlV2lkdGgnLCAnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclJpZ2h0V2lkdGgnLCAnYm9yZGVyVG9wQ29sb3InLCAnYm9yZGVyVG9wU3R5bGUnLCAnYm9yZGVyVG9wV2lkdGgnXSxcbiAgYm9yZGVyQmxvY2tFbmQ6IFsnYm9yZGVyQmxvY2tFbmRDb2xvcicsICdib3JkZXJCbG9ja0VuZFN0eWxlJywgJ2JvcmRlckJsb2NrRW5kV2lkdGgnXSxcbiAgYm9yZGVyQmxvY2tTdGFydDogWydib3JkZXJCbG9ja1N0YXJ0Q29sb3InLCAnYm9yZGVyQmxvY2tTdGFydFN0eWxlJywgJ2JvcmRlckJsb2NrU3RhcnRXaWR0aCddLFxuICBib3JkZXJCb3R0b206IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyQm90dG9tV2lkdGgnXSxcbiAgYm9yZGVyQ29sb3I6IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyVG9wQ29sb3InXSxcbiAgYm9yZGVySW1hZ2U6IFsnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VSZXBlYXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVNvdXJjZScsICdib3JkZXJJbWFnZVdpZHRoJ10sXG4gIGJvcmRlcklubGluZUVuZDogWydib3JkZXJJbmxpbmVFbmRDb2xvcicsICdib3JkZXJJbmxpbmVFbmRTdHlsZScsICdib3JkZXJJbmxpbmVFbmRXaWR0aCddLFxuICBib3JkZXJJbmxpbmVTdGFydDogWydib3JkZXJJbmxpbmVTdGFydENvbG9yJywgJ2JvcmRlcklubGluZVN0YXJ0U3R5bGUnLCAnYm9yZGVySW5saW5lU3RhcnRXaWR0aCddLFxuICBib3JkZXJMZWZ0OiBbJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyTGVmdFdpZHRoJ10sXG4gIGJvcmRlclJhZGl1czogWydib3JkZXJCb3R0b21MZWZ0UmFkaXVzJywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJywgJ2JvcmRlclRvcExlZnRSYWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnXSxcbiAgYm9yZGVyUmlnaHQ6IFsnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclJpZ2h0V2lkdGgnXSxcbiAgYm9yZGVyU3R5bGU6IFsnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlclJpZ2h0U3R5bGUnLCAnYm9yZGVyVG9wU3R5bGUnXSxcbiAgYm9yZGVyVG9wOiBbJ2JvcmRlclRvcENvbG9yJywgJ2JvcmRlclRvcFN0eWxlJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGJvcmRlcldpZHRoOiBbJ2JvcmRlckJvdHRvbVdpZHRoJywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdpZHRoJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGNvbHVtblJ1bGU6IFsnY29sdW1uUnVsZUNvbG9yJywgJ2NvbHVtblJ1bGVTdHlsZScsICdjb2x1bW5SdWxlV2lkdGgnXSxcbiAgY29sdW1uczogWydjb2x1bW5Db3VudCcsICdjb2x1bW5XaWR0aCddLFxuICBmbGV4OiBbJ2ZsZXhCYXNpcycsICdmbGV4R3JvdycsICdmbGV4U2hyaW5rJ10sXG4gIGZsZXhGbG93OiBbJ2ZsZXhEaXJlY3Rpb24nLCAnZmxleFdyYXAnXSxcbiAgZm9udDogWydmb250RmFtaWx5JywgJ2ZvbnRGZWF0dXJlU2V0dGluZ3MnLCAnZm9udEtlcm5pbmcnLCAnZm9udExhbmd1YWdlT3ZlcnJpZGUnLCAnZm9udFNpemUnLCAnZm9udFNpemVBZGp1c3QnLCAnZm9udFN0cmV0Y2gnLCAnZm9udFN0eWxlJywgJ2ZvbnRWYXJpYW50JywgJ2ZvbnRWYXJpYW50QWx0ZXJuYXRlcycsICdmb250VmFyaWFudENhcHMnLCAnZm9udFZhcmlhbnRFYXN0QXNpYW4nLCAnZm9udFZhcmlhbnRMaWdhdHVyZXMnLCAnZm9udFZhcmlhbnROdW1lcmljJywgJ2ZvbnRWYXJpYW50UG9zaXRpb24nLCAnZm9udFdlaWdodCcsICdsaW5lSGVpZ2h0J10sXG4gIGZvbnRWYXJpYW50OiBbJ2ZvbnRWYXJpYW50QWx0ZXJuYXRlcycsICdmb250VmFyaWFudENhcHMnLCAnZm9udFZhcmlhbnRFYXN0QXNpYW4nLCAnZm9udFZhcmlhbnRMaWdhdHVyZXMnLCAnZm9udFZhcmlhbnROdW1lcmljJywgJ2ZvbnRWYXJpYW50UG9zaXRpb24nXSxcbiAgZ2FwOiBbJ2NvbHVtbkdhcCcsICdyb3dHYXAnXSxcbiAgZ3JpZDogWydncmlkQXV0b0NvbHVtbnMnLCAnZ3JpZEF1dG9GbG93JywgJ2dyaWRBdXRvUm93cycsICdncmlkVGVtcGxhdGVBcmVhcycsICdncmlkVGVtcGxhdGVDb2x1bW5zJywgJ2dyaWRUZW1wbGF0ZVJvd3MnXSxcbiAgZ3JpZEFyZWE6IFsnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3RhcnQnLCAnZ3JpZFJvd0VuZCcsICdncmlkUm93U3RhcnQnXSxcbiAgZ3JpZENvbHVtbjogWydncmlkQ29sdW1uRW5kJywgJ2dyaWRDb2x1bW5TdGFydCddLFxuICBncmlkQ29sdW1uR2FwOiBbJ2NvbHVtbkdhcCddLFxuICBncmlkR2FwOiBbJ2NvbHVtbkdhcCcsICdyb3dHYXAnXSxcbiAgZ3JpZFJvdzogWydncmlkUm93RW5kJywgJ2dyaWRSb3dTdGFydCddLFxuICBncmlkUm93R2FwOiBbJ3Jvd0dhcCddLFxuICBncmlkVGVtcGxhdGU6IFsnZ3JpZFRlbXBsYXRlQXJlYXMnLCAnZ3JpZFRlbXBsYXRlQ29sdW1ucycsICdncmlkVGVtcGxhdGVSb3dzJ10sXG4gIGxpc3RTdHlsZTogWydsaXN0U3R5bGVJbWFnZScsICdsaXN0U3R5bGVQb3NpdGlvbicsICdsaXN0U3R5bGVUeXBlJ10sXG4gIG1hcmdpbjogWydtYXJnaW5Cb3R0b20nLCAnbWFyZ2luTGVmdCcsICdtYXJnaW5SaWdodCcsICdtYXJnaW5Ub3AnXSxcbiAgbWFya2VyOiBbJ21hcmtlckVuZCcsICdtYXJrZXJNaWQnLCAnbWFya2VyU3RhcnQnXSxcbiAgbWFzazogWydtYXNrQ2xpcCcsICdtYXNrQ29tcG9zaXRlJywgJ21hc2tJbWFnZScsICdtYXNrTW9kZScsICdtYXNrT3JpZ2luJywgJ21hc2tQb3NpdGlvblgnLCAnbWFza1Bvc2l0aW9uWScsICdtYXNrUmVwZWF0JywgJ21hc2tTaXplJ10sXG4gIG1hc2tQb3NpdGlvbjogWydtYXNrUG9zaXRpb25YJywgJ21hc2tQb3NpdGlvblknXSxcbiAgb3V0bGluZTogWydvdXRsaW5lQ29sb3InLCAnb3V0bGluZVN0eWxlJywgJ291dGxpbmVXaWR0aCddLFxuICBvdmVyZmxvdzogWydvdmVyZmxvd1gnLCAnb3ZlcmZsb3dZJ10sXG4gIHBhZGRpbmc6IFsncGFkZGluZ0JvdHRvbScsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nUmlnaHQnLCAncGFkZGluZ1RvcCddLFxuICBwbGFjZUNvbnRlbnQ6IFsnYWxpZ25Db250ZW50JywgJ2p1c3RpZnlDb250ZW50J10sXG4gIHBsYWNlSXRlbXM6IFsnYWxpZ25JdGVtcycsICdqdXN0aWZ5SXRlbXMnXSxcbiAgcGxhY2VTZWxmOiBbJ2FsaWduU2VsZicsICdqdXN0aWZ5U2VsZiddLFxuICB0ZXh0RGVjb3JhdGlvbjogWyd0ZXh0RGVjb3JhdGlvbkNvbG9yJywgJ3RleHREZWNvcmF0aW9uTGluZScsICd0ZXh0RGVjb3JhdGlvblN0eWxlJ10sXG4gIHRleHRFbXBoYXNpczogWyd0ZXh0RW1waGFzaXNDb2xvcicsICd0ZXh0RW1waGFzaXNTdHlsZSddLFxuICB0cmFuc2l0aW9uOiBbJ3RyYW5zaXRpb25EZWxheScsICd0cmFuc2l0aW9uRHVyYXRpb24nLCAndHJhbnNpdGlvblByb3BlcnR5JywgJ3RyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiddLFxuICB3b3JkV3JhcDogWydvdmVyZmxvd1dyYXAnXVxufTtcblxuLyoqXG4gKiBDU1MgcHJvcGVydGllcyB3aGljaCBhY2NlcHQgbnVtYmVycyBidXQgYXJlIG5vdCBpbiB1bml0cyBvZiBcInB4XCIuXG4gKi9cbnZhciBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IHRydWUsXG4gIGJvcmRlckltYWdlU2xpY2U6IHRydWUsXG4gIGJvcmRlckltYWdlV2lkdGg6IHRydWUsXG4gIGJveEZsZXg6IHRydWUsXG4gIGJveEZsZXhHcm91cDogdHJ1ZSxcbiAgYm94T3JkaW5hbEdyb3VwOiB0cnVlLFxuICBjb2x1bW5Db3VudDogdHJ1ZSxcbiAgY29sdW1uczogdHJ1ZSxcbiAgZmxleDogdHJ1ZSxcbiAgZmxleEdyb3c6IHRydWUsXG4gIGZsZXhQb3NpdGl2ZTogdHJ1ZSxcbiAgZmxleFNocmluazogdHJ1ZSxcbiAgZmxleE5lZ2F0aXZlOiB0cnVlLFxuICBmbGV4T3JkZXI6IHRydWUsXG4gIGdyaWRBcmVhOiB0cnVlLFxuICBncmlkUm93OiB0cnVlLFxuICBncmlkUm93RW5kOiB0cnVlLFxuICBncmlkUm93U3BhbjogdHJ1ZSxcbiAgZ3JpZFJvd1N0YXJ0OiB0cnVlLFxuICBncmlkQ29sdW1uOiB0cnVlLFxuICBncmlkQ29sdW1uRW5kOiB0cnVlLFxuICBncmlkQ29sdW1uU3BhbjogdHJ1ZSxcbiAgZ3JpZENvbHVtblN0YXJ0OiB0cnVlLFxuICBmb250V2VpZ2h0OiB0cnVlLFxuICBsaW5lQ2xhbXA6IHRydWUsXG4gIGxpbmVIZWlnaHQ6IHRydWUsXG4gIG9wYWNpdHk6IHRydWUsXG4gIG9yZGVyOiB0cnVlLFxuICBvcnBoYW5zOiB0cnVlLFxuICB0YWJTaXplOiB0cnVlLFxuICB3aWRvd3M6IHRydWUsXG4gIHpJbmRleDogdHJ1ZSxcbiAgem9vbTogdHJ1ZSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogdHJ1ZSxcbiAgZmxvb2RPcGFjaXR5OiB0cnVlLFxuICBzdG9wT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaGFycmF5OiB0cnVlLFxuICBzdHJva2VEYXNob2Zmc2V0OiB0cnVlLFxuICBzdHJva2VNaXRlcmxpbWl0OiB0cnVlLFxuICBzdHJva2VPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VXaWR0aDogdHJ1ZVxufTtcbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCB2ZW5kb3Itc3BlY2lmaWMgcHJlZml4LCBlZzogV2Via2l0XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHN0eWxlIG5hbWUsIGVnOiB0cmFuc2l0aW9uRHVyYXRpb25cbiAqIEByZXR1cm4ge3N0cmluZ30gc3R5bGUgbmFtZSBwcmVmaXhlZCB3aXRoIGBwcmVmaXhgLCBwcm9wZXJseSBjYW1lbENhc2VkLCBlZzpcbiAqIFdlYmtpdFRyYW5zaXRpb25EdXJhdGlvblxuICovXG5cbmZ1bmN0aW9uIHByZWZpeEtleShwcmVmaXgsIGtleSkge1xuICByZXR1cm4gcHJlZml4ICsga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnN1YnN0cmluZygxKTtcbn1cbi8qKlxuICogU3VwcG9ydCBzdHlsZSBuYW1lcyB0aGF0IG1heSBjb21lIHBhc3NlZCBpbiBwcmVmaXhlZCBieSBhZGRpbmcgcGVybXV0YXRpb25zXG4gKiBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cblxuXG52YXIgcHJlZml4ZXMgPSBbJ1dlYmtpdCcsICdtcycsICdNb3onLCAnTyddOyAvLyBVc2luZyBPYmplY3Qua2V5cyBoZXJlLCBvciBlbHNlIHRoZSB2YW5pbGxhIGZvci1pbiBsb29wIG1ha2VzIElFOCBnbyBpbnRvIGFuXG4vLyBpbmZpbml0ZSBsb29wLCBiZWNhdXNlIGl0IGl0ZXJhdGVzIG92ZXIgdGhlIG5ld2x5IGFkZGVkIHByb3BzIHRvby5cblxuT2JqZWN0LmtleXMoaXNVbml0bGVzc051bWJlcikuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBwcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uIChwcmVmaXgpIHtcbiAgICBpc1VuaXRsZXNzTnVtYmVyW3ByZWZpeEtleShwcmVmaXgsIHByb3ApXSA9IGlzVW5pdGxlc3NOdW1iZXJbcHJvcF07XG4gIH0pO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIGludG8gdGhlIHByb3BlciBjc3Mgd3JpdGFibGUgdmFsdWUuIFRoZSBzdHlsZSBuYW1lIGBuYW1lYFxuICogc2hvdWxkIGJlIGxvZ2ljYWwgKG5vIGh5cGhlbnMpLCBhcyBzcGVjaWZpZWRcbiAqIGluIGBDU1NQcm9wZXJ0eS5pc1VuaXRsZXNzTnVtYmVyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBDU1MgcHJvcGVydHkgbmFtZSBzdWNoIGFzIGB0b3BNYXJnaW5gLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBDU1MgcHJvcGVydHkgdmFsdWUgc3VjaCBhcyBgMTBweGAuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgc3R5bGUgdmFsdWUgd2l0aCBkaW1lbnNpb25zIGFwcGxpZWQuXG4gKi9cblxuZnVuY3Rpb24gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShuYW1lLCB2YWx1ZSwgaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAvLyBOb3RlIHRoYXQgd2UndmUgcmVtb3ZlZCBlc2NhcGVUZXh0Rm9yQnJvd3NlcigpIGNhbGxzIGhlcmUgc2luY2UgdGhlXG4gIC8vIHdob2xlIHN0cmluZyB3aWxsIGJlIGVzY2FwZWQgd2hlbiB0aGUgYXR0cmlidXRlIGlzIGluamVjdGVkIGludG9cbiAgLy8gdGhlIG1hcmt1cC4gSWYgeW91IHByb3ZpZGUgdW5zYWZlIHVzZXIgZGF0YSBoZXJlIHRoZXkgY2FuIGluamVjdFxuICAvLyBhcmJpdHJhcnkgQ1NTIHdoaWNoIG1heSBiZSBwcm9ibGVtYXRpYyAoSSBjb3VsZG4ndCByZXBybyB0aGlzKTpcbiAgLy8gaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9YU1NfRmlsdGVyX0V2YXNpb25fQ2hlYXRfU2hlZXRcbiAgLy8gaHR0cDovL3d3dy50aGVzcGFubmVyLmNvLnVrLzIwMDcvMTEvMjYvdWx0aW1hdGUteHNzLWNzcy1pbmplY3Rpb24vXG4gIC8vIFRoaXMgaXMgbm90IGFuIFhTUyBob2xlIGJ1dCBpbnN0ZWFkIGEgcG90ZW50aWFsIENTUyBpbmplY3Rpb24gaXNzdWVcbiAgLy8gd2hpY2ggaGFzIGxlYWQgdG8gYSBncmVhdGVyIGRpc2N1c3Npb24gYWJvdXQgaG93IHdlJ3JlIGdvaW5nIHRvXG4gIC8vIHRydXN0IFVSTHMgbW92aW5nIGZvcndhcmQuIFNlZSAjMjExNTkwMVxuICB2YXIgaXNFbXB0eSA9IHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09ICcnO1xuXG4gIGlmIChpc0VtcHR5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKCFpc0N1c3RvbVByb3BlcnR5ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDAgJiYgIShpc1VuaXRsZXNzTnVtYmVyLmhhc093blByb3BlcnR5KG5hbWUpICYmIGlzVW5pdGxlc3NOdW1iZXJbbmFtZV0pKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JzsgLy8gUHJlc3VtZXMgaW1wbGljaXQgJ3B4JyBzdWZmaXggZm9yIHVuaXRsZXNzIG51bWJlcnNcbiAgfVxuXG4gIHJldHVybiAoJycgKyB2YWx1ZSkudHJpbSgpO1xufVxuXG52YXIgdXBwZXJjYXNlUGF0dGVybiA9IC8oW0EtWl0pL2c7XG52YXIgbXNQYXR0ZXJuID0gL15tcy0vO1xuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBDU1MgcHJvcGVydHkgbmFtZSwgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnYmFja2dyb3VuZENvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmQtY29sb3JcIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnTW96VHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbW96LXRyYW5zaXRpb25cIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnbXNUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tcy10cmFuc2l0aW9uXCJcbiAqXG4gKiBBcyBNb2Rlcm5penIgc3VnZ2VzdHMgKGh0dHA6Ly9tb2Rlcm5penIuY29tL2RvY3MvI3ByZWZpeGVkKSwgYW4gYG1zYCBwcmVmaXhcbiAqIGlzIGNvbnZlcnRlZCB0byBgLW1zLWAuXG4gKi9cblxuZnVuY3Rpb24gaHlwaGVuYXRlU3R5bGVOYW1lKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSh1cHBlcmNhc2VQYXR0ZXJuLCAnLSQxJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKG1zUGF0dGVybiwgJy1tcy0nKTtcbn1cblxudmFyIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgLy8gJ21zVHJhbnNmb3JtJyBpcyBjb3JyZWN0LCBidXQgdGhlIG90aGVyIHByZWZpeGVzIHNob3VsZCBiZSBjYXBpdGFsaXplZFxuICB2YXIgYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuID0gL14oPzp3ZWJraXR8bW96fG8pW0EtWl0vO1xuICB2YXIgbXNQYXR0ZXJuJDEgPSAvXi1tcy0vO1xuICB2YXIgaHlwaGVuUGF0dGVybiA9IC8tKC4pL2c7IC8vIHN0eWxlIHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvblxuXG4gIHZhciBiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4gPSAvO1xccyokLztcbiAgdmFyIHdhcm5lZFN0eWxlTmFtZXMgPSB7fTtcbiAgdmFyIHdhcm5lZFN0eWxlVmFsdWVzID0ge307XG4gIHZhciB3YXJuZWRGb3JOYU5WYWx1ZSA9IGZhbHNlO1xuICB2YXIgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9IGZhbHNlO1xuXG4gIHZhciBjYW1lbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKF8sIGNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Vuc3VwcG9ydGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JywgbmFtZSwgLy8gQXMgQW5kaSBTbWl0aCBzdWdnZXN0c1xuICAgIC8vIChodHRwOi8vd3d3LmFuZGlzbWl0aC5jb20vYmxvZy8yMDEyLzAyL21vZGVybml6ci1wcmVmaXhlZC8pLCBhbiBgLW1zYCBwcmVmaXhcbiAgICAvLyBpcyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGBtc2AuXG4gICAgY2FtZWxpemUobmFtZS5yZXBsYWNlKG1zUGF0dGVybiQxLCAnbXMtJykpKTtcbiAgfTtcblxuICB2YXIgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignVW5zdXBwb3J0ZWQgdmVuZG9yLXByZWZpeGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JywgbmFtZSwgbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSkpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVWYWx1ZXMuaGFzT3duUHJvcGVydHkodmFsdWUpICYmIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSA9IHRydWU7XG5cbiAgICBlcnJvcihcIlN0eWxlIHByb3BlcnR5IHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvbi4gXCIgKyAnVHJ5IFwiJXM6ICVzXCIgaW5zdGVhZC4nLCBuYW1lLCB2YWx1ZS5yZXBsYWNlKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiwgJycpKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVJc05hTiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRGb3JOYU5WYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvck5hTlZhbHVlID0gdHJ1ZTtcblxuICAgIGVycm9yKCdgTmFOYCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuJywgbmFtZSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlSXNJbmZpbml0eSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRGb3JJbmZpbml0eVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9IHRydWU7XG5cbiAgICBlcnJvcignYEluZmluaXR5YCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuJywgbmFtZSk7XG4gIH07XG5cbiAgd2FyblZhbGlkU3R5bGUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAobmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUobmFtZSk7XG4gICAgfSBlbHNlIGlmIChiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgICAgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24obmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHdhcm5TdHlsZVZhbHVlSXNOYU4obmFtZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICghaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICAgIHdhcm5TdHlsZVZhbHVlSXNJbmZpbml0eShuYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG52YXIgd2FyblZhbGlkU3R5bGUkMSA9IHdhcm5WYWxpZFN0eWxlO1xuXG4vKipcbiAqIE9wZXJhdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBDU1MgcHJvcGVydGllcy5cbiAqL1xuXG4vKipcbiAqIFRoaXMgY3JlYXRlcyBhIHN0cmluZyB0aGF0IGlzIGV4cGVjdGVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gdGhlIHN0eWxlXG4gKiBhdHRyaWJ1dGUgZ2VuZXJhdGVkIGJ5IHNlcnZlci1zaWRlIHJlbmRlcmluZy4gSXQgYnktcGFzc2VzIHdhcm5pbmdzIGFuZFxuICogc2VjdXJpdHkgY2hlY2tzIHNvIGl0J3Mgbm90IHNhZmUgdG8gdXNlIHRoaXMgdmFsdWUgZm9yIGFueXRoaW5nIG90aGVyIHRoYW5cbiAqIGNvbXBhcmlzb24uIEl0IGlzIG9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZURhbmdlcm91c1N0cmluZ0ZvclN0eWxlcyhzdHlsZXMpIHtcbiAge1xuICAgIHZhciBzZXJpYWxpemVkID0gJyc7XG4gICAgdmFyIGRlbGltaXRlciA9ICcnO1xuXG4gICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0eWxlVmFsdWUgPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuICAgICAgaWYgKHN0eWxlVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuICAgICAgICBzZXJpYWxpemVkICs9IGRlbGltaXRlciArIChpc0N1c3RvbVByb3BlcnR5ID8gc3R5bGVOYW1lIDogaHlwaGVuYXRlU3R5bGVOYW1lKHN0eWxlTmFtZSkpICsgJzonO1xuICAgICAgICBzZXJpYWxpemVkICs9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZVZhbHVlLCBpc0N1c3RvbVByb3BlcnR5KTtcbiAgICAgICAgZGVsaW1pdGVyID0gJzsnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZXJpYWxpemVkIHx8IG51bGw7XG4gIH1cbn1cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgZm9yIG11bHRpcGxlIHN0eWxlcyBvbiBhIG5vZGUuICBJZiBhIHZhbHVlIGlzIHNwZWNpZmllZCBhc1xuICogJycgKGVtcHR5IHN0cmluZyksIHRoZSBjb3JyZXNwb25kaW5nIHN0eWxlIHByb3BlcnR5IHdpbGwgYmUgdW5zZXQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzXG4gKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVGb3JTdHlsZXMobm9kZSwgc3R5bGVzKSB7XG4gIHZhciBzdHlsZSA9IG5vZGUuc3R5bGU7XG5cbiAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBpc0N1c3RvbVByb3BlcnR5ID0gc3R5bGVOYW1lLmluZGV4T2YoJy0tJykgPT09IDA7XG5cbiAgICB7XG4gICAgICBpZiAoIWlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgICAgICAgd2FyblZhbGlkU3R5bGUkMShzdHlsZU5hbWUsIHN0eWxlc1tzdHlsZU5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3R5bGVWYWx1ZSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSwgaXNDdXN0b21Qcm9wZXJ0eSk7XG5cbiAgICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnKSB7XG4gICAgICBzdHlsZU5hbWUgPSAnY3NzRmxvYXQnO1xuICAgIH1cblxuICAgIGlmIChpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICBzdHlsZS5zZXRQcm9wZXJ0eShzdHlsZU5hbWUsIHN0eWxlVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZVtzdHlsZU5hbWVdID0gc3R5bGVWYWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWx1ZUVtcHR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSAnJztcbn1cbi8qKlxuICogR2l2ZW4ge2NvbG9yOiAncmVkJywgb3ZlcmZsb3c6ICdoaWRkZW4nfSByZXR1cm5zIHtcbiAqICAgY29sb3I6ICdjb2xvcicsXG4gKiAgIG92ZXJmbG93WDogJ292ZXJmbG93JyxcbiAqICAgb3ZlcmZsb3dZOiAnb3ZlcmZsb3cnLFxuICogfS4gVGhpcyBjYW4gYmUgcmVhZCBhcyBcInRoZSBvdmVyZmxvd1kgcHJvcGVydHkgd2FzIHNldCBieSB0aGUgb3ZlcmZsb3dcbiAqIHNob3J0aGFuZFwiLiBUaGF0IGlzLCB0aGUgdmFsdWVzIGFyZSB0aGUgcHJvcGVydHkgdGhhdCBlYWNoIHdhcyBkZXJpdmVkIGZyb20uXG4gKi9cblxuXG5mdW5jdGlvbiBleHBhbmRTaG9ydGhhbmRNYXAoc3R5bGVzKSB7XG4gIHZhciBleHBhbmRlZCA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBzdHlsZXMpIHtcbiAgICB2YXIgbG9uZ2hhbmRzID0gc2hvcnRoYW5kVG9Mb25naGFuZFtrZXldIHx8IFtrZXldO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV4cGFuZGVkW2xvbmdoYW5kc1tpXV0gPSBrZXk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cGFuZGVkO1xufVxuLyoqXG4gKiBXaGVuIG1peGluZyBzaG9ydGhhbmQgYW5kIGxvbmdoYW5kIHByb3BlcnR5IG5hbWVzLCB3ZSB3YXJuIGR1cmluZyB1cGRhdGVzIGlmXG4gKiB3ZSBleHBlY3QgYW4gaW5jb3JyZWN0IHJlc3VsdCB0byBvY2N1ci4gSW4gcGFydGljdWxhciwgd2Ugd2FybiBmb3I6XG4gKlxuICogVXBkYXRpbmcgYSBzaG9ydGhhbmQgcHJvcGVydHkgKGxvbmdoYW5kIGdldHMgb3ZlcndyaXR0ZW4pOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnQ6ICdiYXonLCBmb250VmFyaWFudDogJ2Jhcid9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnQgPSAnYmF6J1xuICogUmVtb3ZpbmcgYSBzaG9ydGhhbmQgcHJvcGVydHkgKGxvbmdoYW5kIGdldHMgbG9zdCB0b28pOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnRWYXJpYW50OiAnYmFyJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udCA9ICcnXG4gKiBSZW1vdmluZyBhIGxvbmdoYW5kIHByb3BlcnR5IChzaG91bGQgcmV2ZXJ0IHRvIHNob3J0aGFuZDsgZG9lc24ndCk6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udDogJ2Zvbyd9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnRWYXJpYW50ID0gJydcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb25JbkRldihzdHlsZVVwZGF0ZXMsIG5leHRTdHlsZXMpIHtcbiAge1xuICAgIGlmICghbmV4dFN0eWxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBleHBhbmRlZFVwZGF0ZXMgPSBleHBhbmRTaG9ydGhhbmRNYXAoc3R5bGVVcGRhdGVzKTtcbiAgICB2YXIgZXhwYW5kZWRTdHlsZXMgPSBleHBhbmRTaG9ydGhhbmRNYXAobmV4dFN0eWxlcyk7XG4gICAgdmFyIHdhcm5lZEFib3V0ID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZXhwYW5kZWRVcGRhdGVzKSB7XG4gICAgICB2YXIgb3JpZ2luYWxLZXkgPSBleHBhbmRlZFVwZGF0ZXNba2V5XTtcbiAgICAgIHZhciBjb3JyZWN0T3JpZ2luYWxLZXkgPSBleHBhbmRlZFN0eWxlc1trZXldO1xuXG4gICAgICBpZiAoY29ycmVjdE9yaWdpbmFsS2V5ICYmIG9yaWdpbmFsS2V5ICE9PSBjb3JyZWN0T3JpZ2luYWxLZXkpIHtcbiAgICAgICAgdmFyIHdhcm5pbmdLZXkgPSBvcmlnaW5hbEtleSArICcsJyArIGNvcnJlY3RPcmlnaW5hbEtleTtcblxuICAgICAgICBpZiAod2FybmVkQWJvdXRbd2FybmluZ0tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdhcm5lZEFib3V0W3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXMgYSBzdHlsZSBwcm9wZXJ0eSBkdXJpbmcgcmVyZW5kZXIgKCVzKSB3aGVuIGEgJyArICdjb25mbGljdGluZyBwcm9wZXJ0eSBpcyBzZXQgKCVzKSBjYW4gbGVhZCB0byBzdHlsaW5nIGJ1Z3MuIFRvICcgKyBcImF2b2lkIHRoaXMsIGRvbid0IG1peCBzaG9ydGhhbmQgYW5kIG5vbi1zaG9ydGhhbmQgcHJvcGVydGllcyBcIiArICdmb3IgdGhlIHNhbWUgdmFsdWU7IGluc3RlYWQsIHJlcGxhY2UgdGhlIHNob3J0aGFuZCB3aXRoICcgKyAnc2VwYXJhdGUgdmFsdWVzLicsIGlzVmFsdWVFbXB0eShzdHlsZVVwZGF0ZXNbb3JpZ2luYWxLZXldKSA/ICdSZW1vdmluZycgOiAnVXBkYXRpbmcnLCBvcmlnaW5hbEtleSwgY29ycmVjdE9yaWdpbmFsS2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gRm9yIEhUTUwsIGNlcnRhaW4gdGFncyBzaG91bGQgb21pdCB0aGVpciBjbG9zZSB0YWcuIFdlIGtlZXAgYSBsaXN0IGZvclxuLy8gdGhvc2Ugc3BlY2lhbC1jYXNlIHRhZ3MuXG52YXIgb21pdHRlZENsb3NlVGFncyA9IHtcbiAgYXJlYTogdHJ1ZSxcbiAgYmFzZTogdHJ1ZSxcbiAgYnI6IHRydWUsXG4gIGNvbDogdHJ1ZSxcbiAgZW1iZWQ6IHRydWUsXG4gIGhyOiB0cnVlLFxuICBpbWc6IHRydWUsXG4gIGlucHV0OiB0cnVlLFxuICBrZXlnZW46IHRydWUsXG4gIGxpbms6IHRydWUsXG4gIG1ldGE6IHRydWUsXG4gIHBhcmFtOiB0cnVlLFxuICBzb3VyY2U6IHRydWUsXG4gIHRyYWNrOiB0cnVlLFxuICB3YnI6IHRydWUgLy8gTk9URTogbWVudWl0ZW0ncyBjbG9zZSB0YWcgc2hvdWxkIGJlIG9taXR0ZWQsIGJ1dCB0aGF0IGNhdXNlcyBwcm9ibGVtcy5cblxufTtcblxuLy8gYG9taXR0ZWRDbG9zZVRhZ3NgIGV4Y2VwdCB0aGF0IGBtZW51aXRlbWAgc2hvdWxkIHN0aWxsIGhhdmUgaXRzIGNsb3NpbmcgdGFnLlxuXG52YXIgdm9pZEVsZW1lbnRUYWdzID0gX2Fzc2lnbih7XG4gIG1lbnVpdGVtOiB0cnVlXG59LCBvbWl0dGVkQ2xvc2VUYWdzKTtcblxudmFyIEhUTUwgPSAnX19odG1sJztcblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gTm90ZSB0aGUgdXNlIG9mIGA9PWAgd2hpY2ggY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZC5cblxuXG4gIGlmICh2b2lkRWxlbWVudFRhZ3NbdGFnXSkge1xuICAgIGlmICghKHByb3BzLmNoaWxkcmVuID09IG51bGwgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIHRhZyArIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkge1xuICAgIGlmICghKHByb3BzLmNoaWxkcmVuID09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbiBvbmx5IHNldCBvbmUgb2YgYGNoaWxkcmVuYCBvciBgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEodHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBIVE1MIGluIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgaW4gdGhlIGZvcm0gYHtfX2h0bWw6IC4uLn1gLiBQbGVhc2UgdmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rhbmdlcm91c2x5LXNldC1pbm5lci1odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmICghcHJvcHMuc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nICYmIHByb3BzLmNvbnRlbnRFZGl0YWJsZSAmJiBwcm9wcy5jaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgYGNvbnRlbnRFZGl0YWJsZWAgYW5kIGNvbnRhaW5zIGBjaGlsZHJlbmAgbWFuYWdlZCBieSAnICsgJ1JlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBub25lIG9mICcgKyAndGhvc2Ugbm9kZXMgYXJlIHVuZXhwZWN0ZWRseSBtb2RpZmllZCBvciBkdXBsaWNhdGVkLiBUaGlzIGlzICcgKyAncHJvYmFibHkgbm90IGludGVudGlvbmFsLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghKHByb3BzLnN0eWxlID09IG51bGwgfHwgdHlwZW9mIHByb3BzLnN0eWxlID09PSAnb2JqZWN0JykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsIG5vdCBhIHN0cmluZy4gRm9yIGV4YW1wbGUsIHN0eWxlPXt7bWFyZ2luUmlnaHQ6IHNwYWNpbmcgKyAnZW0nfX0gd2hlbiB1c2luZyBKU1guXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDdXN0b21Db21wb25lbnQodGFnTmFtZSwgcHJvcHMpIHtcbiAgaWYgKHRhZ05hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHJldHVybiB0eXBlb2YgcHJvcHMuaXMgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgc3dpdGNoICh0YWdOYW1lKSB7XG4gICAgLy8gVGhlc2UgYXJlIHJlc2VydmVkIFNWRyBhbmQgTWF0aE1MIGVsZW1lbnRzLlxuICAgIC8vIFdlIGRvbid0IG1pbmQgdGhpcyBsaXN0IHRvbyBtdWNoIGJlY2F1c2Ugd2UgZXhwZWN0IGl0IHRvIG5ldmVyIGdyb3cuXG4gICAgLy8gVGhlIGFsdGVybmF0aXZlIGlzIHRvIHRyYWNrIHRoZSBuYW1lc3BhY2UgaW4gYSBmZXcgcGxhY2VzIHdoaWNoIGlzIGNvbnZvbHV0ZWQuXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmNvbXBvbmVudHMvc3BlYy9jdXN0b20vI2N1c3RvbS1lbGVtZW50cy1jb3JlLWNvbmNlcHRzXG4gICAgY2FzZSAnYW5ub3RhdGlvbi14bWwnOlxuICAgIGNhc2UgJ2NvbG9yLXByb2ZpbGUnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZSc6XG4gICAgY2FzZSAnZm9udC1mYWNlLXNyYyc6XG4gICAgY2FzZSAnZm9udC1mYWNlLXVyaSc6XG4gICAgY2FzZSAnZm9udC1mYWNlLWZvcm1hdCc6XG4gICAgY2FzZSAnZm9udC1mYWNlLW5hbWUnOlxuICAgIGNhc2UgJ21pc3NpbmctZ2x5cGgnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8vIFdoZW4gYWRkaW5nIGF0dHJpYnV0ZXMgdG8gdGhlIEhUTUwgb3IgU1ZHIGFsbG93ZWQgYXR0cmlidXRlIGxpc3QsIGJlIHN1cmUgdG9cbi8vIGFsc28gYWRkIHRoZW0gdG8gdGhpcyBtb2R1bGUgdG8gZW5zdXJlIGNhc2luZyBhbmQgaW5jb3JyZWN0IG5hbWVcbi8vIHdhcm5pbmdzLlxudmFyIHBvc3NpYmxlU3RhbmRhcmROYW1lcyA9IHtcbiAgLy8gSFRNTFxuICBhY2NlcHQ6ICdhY2NlcHQnLFxuICBhY2NlcHRjaGFyc2V0OiAnYWNjZXB0Q2hhcnNldCcsXG4gICdhY2NlcHQtY2hhcnNldCc6ICdhY2NlcHRDaGFyc2V0JyxcbiAgYWNjZXNza2V5OiAnYWNjZXNzS2V5JyxcbiAgYWN0aW9uOiAnYWN0aW9uJyxcbiAgYWxsb3dmdWxsc2NyZWVuOiAnYWxsb3dGdWxsU2NyZWVuJyxcbiAgYWx0OiAnYWx0JyxcbiAgYXM6ICdhcycsXG4gIGFzeW5jOiAnYXN5bmMnLFxuICBhdXRvY2FwaXRhbGl6ZTogJ2F1dG9DYXBpdGFsaXplJyxcbiAgYXV0b2NvbXBsZXRlOiAnYXV0b0NvbXBsZXRlJyxcbiAgYXV0b2NvcnJlY3Q6ICdhdXRvQ29ycmVjdCcsXG4gIGF1dG9mb2N1czogJ2F1dG9Gb2N1cycsXG4gIGF1dG9wbGF5OiAnYXV0b1BsYXknLFxuICBhdXRvc2F2ZTogJ2F1dG9TYXZlJyxcbiAgY2FwdHVyZTogJ2NhcHR1cmUnLFxuICBjZWxscGFkZGluZzogJ2NlbGxQYWRkaW5nJyxcbiAgY2VsbHNwYWNpbmc6ICdjZWxsU3BhY2luZycsXG4gIGNoYWxsZW5nZTogJ2NoYWxsZW5nZScsXG4gIGNoYXJzZXQ6ICdjaGFyU2V0JyxcbiAgY2hlY2tlZDogJ2NoZWNrZWQnLFxuICBjaGlsZHJlbjogJ2NoaWxkcmVuJyxcbiAgY2l0ZTogJ2NpdGUnLFxuICBjbGFzczogJ2NsYXNzTmFtZScsXG4gIGNsYXNzaWQ6ICdjbGFzc0lEJyxcbiAgY2xhc3NuYW1lOiAnY2xhc3NOYW1lJyxcbiAgY29sczogJ2NvbHMnLFxuICBjb2xzcGFuOiAnY29sU3BhbicsXG4gIGNvbnRlbnQ6ICdjb250ZW50JyxcbiAgY29udGVudGVkaXRhYmxlOiAnY29udGVudEVkaXRhYmxlJyxcbiAgY29udGV4dG1lbnU6ICdjb250ZXh0TWVudScsXG4gIGNvbnRyb2xzOiAnY29udHJvbHMnLFxuICBjb250cm9sc2xpc3Q6ICdjb250cm9sc0xpc3QnLFxuICBjb29yZHM6ICdjb29yZHMnLFxuICBjcm9zc29yaWdpbjogJ2Nyb3NzT3JpZ2luJyxcbiAgZGFuZ2Vyb3VzbHlzZXRpbm5lcmh0bWw6ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsXG4gIGRhdGE6ICdkYXRhJyxcbiAgZGF0ZXRpbWU6ICdkYXRlVGltZScsXG4gIGRlZmF1bHQ6ICdkZWZhdWx0JyxcbiAgZGVmYXVsdGNoZWNrZWQ6ICdkZWZhdWx0Q2hlY2tlZCcsXG4gIGRlZmF1bHR2YWx1ZTogJ2RlZmF1bHRWYWx1ZScsXG4gIGRlZmVyOiAnZGVmZXInLFxuICBkaXI6ICdkaXInLFxuICBkaXNhYmxlZDogJ2Rpc2FibGVkJyxcbiAgZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmU6ICdkaXNhYmxlUGljdHVyZUluUGljdHVyZScsXG4gIGRpc2FibGVyZW1vdGVwbGF5YmFjazogJ2Rpc2FibGVSZW1vdGVQbGF5YmFjaycsXG4gIGRvd25sb2FkOiAnZG93bmxvYWQnLFxuICBkcmFnZ2FibGU6ICdkcmFnZ2FibGUnLFxuICBlbmN0eXBlOiAnZW5jVHlwZScsXG4gIGVudGVya2V5aGludDogJ2VudGVyS2V5SGludCcsXG4gIGZvcjogJ2h0bWxGb3InLFxuICBmb3JtOiAnZm9ybScsXG4gIGZvcm1tZXRob2Q6ICdmb3JtTWV0aG9kJyxcbiAgZm9ybWFjdGlvbjogJ2Zvcm1BY3Rpb24nLFxuICBmb3JtZW5jdHlwZTogJ2Zvcm1FbmNUeXBlJyxcbiAgZm9ybW5vdmFsaWRhdGU6ICdmb3JtTm9WYWxpZGF0ZScsXG4gIGZvcm10YXJnZXQ6ICdmb3JtVGFyZ2V0JyxcbiAgZnJhbWVib3JkZXI6ICdmcmFtZUJvcmRlcicsXG4gIGhlYWRlcnM6ICdoZWFkZXJzJyxcbiAgaGVpZ2h0OiAnaGVpZ2h0JyxcbiAgaGlkZGVuOiAnaGlkZGVuJyxcbiAgaGlnaDogJ2hpZ2gnLFxuICBocmVmOiAnaHJlZicsXG4gIGhyZWZsYW5nOiAnaHJlZkxhbmcnLFxuICBodG1sZm9yOiAnaHRtbEZvcicsXG4gIGh0dHBlcXVpdjogJ2h0dHBFcXVpdicsXG4gICdodHRwLWVxdWl2JzogJ2h0dHBFcXVpdicsXG4gIGljb246ICdpY29uJyxcbiAgaWQ6ICdpZCcsXG4gIGlubmVyaHRtbDogJ2lubmVySFRNTCcsXG4gIGlucHV0bW9kZTogJ2lucHV0TW9kZScsXG4gIGludGVncml0eTogJ2ludGVncml0eScsXG4gIGlzOiAnaXMnLFxuICBpdGVtaWQ6ICdpdGVtSUQnLFxuICBpdGVtcHJvcDogJ2l0ZW1Qcm9wJyxcbiAgaXRlbXJlZjogJ2l0ZW1SZWYnLFxuICBpdGVtc2NvcGU6ICdpdGVtU2NvcGUnLFxuICBpdGVtdHlwZTogJ2l0ZW1UeXBlJyxcbiAga2V5cGFyYW1zOiAna2V5UGFyYW1zJyxcbiAga2V5dHlwZTogJ2tleVR5cGUnLFxuICBraW5kOiAna2luZCcsXG4gIGxhYmVsOiAnbGFiZWwnLFxuICBsYW5nOiAnbGFuZycsXG4gIGxpc3Q6ICdsaXN0JyxcbiAgbG9vcDogJ2xvb3AnLFxuICBsb3c6ICdsb3cnLFxuICBtYW5pZmVzdDogJ21hbmlmZXN0JyxcbiAgbWFyZ2lud2lkdGg6ICdtYXJnaW5XaWR0aCcsXG4gIG1hcmdpbmhlaWdodDogJ21hcmdpbkhlaWdodCcsXG4gIG1heDogJ21heCcsXG4gIG1heGxlbmd0aDogJ21heExlbmd0aCcsXG4gIG1lZGlhOiAnbWVkaWEnLFxuICBtZWRpYWdyb3VwOiAnbWVkaWFHcm91cCcsXG4gIG1ldGhvZDogJ21ldGhvZCcsXG4gIG1pbjogJ21pbicsXG4gIG1pbmxlbmd0aDogJ21pbkxlbmd0aCcsXG4gIG11bHRpcGxlOiAnbXVsdGlwbGUnLFxuICBtdXRlZDogJ211dGVkJyxcbiAgbmFtZTogJ25hbWUnLFxuICBub21vZHVsZTogJ25vTW9kdWxlJyxcbiAgbm9uY2U6ICdub25jZScsXG4gIG5vdmFsaWRhdGU6ICdub1ZhbGlkYXRlJyxcbiAgb3BlbjogJ29wZW4nLFxuICBvcHRpbXVtOiAnb3B0aW11bScsXG4gIHBhdHRlcm46ICdwYXR0ZXJuJyxcbiAgcGxhY2Vob2xkZXI6ICdwbGFjZWhvbGRlcicsXG4gIHBsYXlzaW5saW5lOiAncGxheXNJbmxpbmUnLFxuICBwb3N0ZXI6ICdwb3N0ZXInLFxuICBwcmVsb2FkOiAncHJlbG9hZCcsXG4gIHByb2ZpbGU6ICdwcm9maWxlJyxcbiAgcmFkaW9ncm91cDogJ3JhZGlvR3JvdXAnLFxuICByZWFkb25seTogJ3JlYWRPbmx5JyxcbiAgcmVmZXJyZXJwb2xpY3k6ICdyZWZlcnJlclBvbGljeScsXG4gIHJlbDogJ3JlbCcsXG4gIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICByZXZlcnNlZDogJ3JldmVyc2VkJyxcbiAgcm9sZTogJ3JvbGUnLFxuICByb3dzOiAncm93cycsXG4gIHJvd3NwYW46ICdyb3dTcGFuJyxcbiAgc2FuZGJveDogJ3NhbmRib3gnLFxuICBzY29wZTogJ3Njb3BlJyxcbiAgc2NvcGVkOiAnc2NvcGVkJyxcbiAgc2Nyb2xsaW5nOiAnc2Nyb2xsaW5nJyxcbiAgc2VhbWxlc3M6ICdzZWFtbGVzcycsXG4gIHNlbGVjdGVkOiAnc2VsZWN0ZWQnLFxuICBzaGFwZTogJ3NoYXBlJyxcbiAgc2l6ZTogJ3NpemUnLFxuICBzaXplczogJ3NpemVzJyxcbiAgc3BhbjogJ3NwYW4nLFxuICBzcGVsbGNoZWNrOiAnc3BlbGxDaGVjaycsXG4gIHNyYzogJ3NyYycsXG4gIHNyY2RvYzogJ3NyY0RvYycsXG4gIHNyY2xhbmc6ICdzcmNMYW5nJyxcbiAgc3Jjc2V0OiAnc3JjU2V0JyxcbiAgc3RhcnQ6ICdzdGFydCcsXG4gIHN0ZXA6ICdzdGVwJyxcbiAgc3R5bGU6ICdzdHlsZScsXG4gIHN1bW1hcnk6ICdzdW1tYXJ5JyxcbiAgdGFiaW5kZXg6ICd0YWJJbmRleCcsXG4gIHRhcmdldDogJ3RhcmdldCcsXG4gIHRpdGxlOiAndGl0bGUnLFxuICB0eXBlOiAndHlwZScsXG4gIHVzZW1hcDogJ3VzZU1hcCcsXG4gIHZhbHVlOiAndmFsdWUnLFxuICB3aWR0aDogJ3dpZHRoJyxcbiAgd21vZGU6ICd3bW9kZScsXG4gIHdyYXA6ICd3cmFwJyxcbiAgLy8gU1ZHXG4gIGFib3V0OiAnYWJvdXQnLFxuICBhY2NlbnRoZWlnaHQ6ICdhY2NlbnRIZWlnaHQnLFxuICAnYWNjZW50LWhlaWdodCc6ICdhY2NlbnRIZWlnaHQnLFxuICBhY2N1bXVsYXRlOiAnYWNjdW11bGF0ZScsXG4gIGFkZGl0aXZlOiAnYWRkaXRpdmUnLFxuICBhbGlnbm1lbnRiYXNlbGluZTogJ2FsaWdubWVudEJhc2VsaW5lJyxcbiAgJ2FsaWdubWVudC1iYXNlbGluZSc6ICdhbGlnbm1lbnRCYXNlbGluZScsXG4gIGFsbG93cmVvcmRlcjogJ2FsbG93UmVvcmRlcicsXG4gIGFscGhhYmV0aWM6ICdhbHBoYWJldGljJyxcbiAgYW1wbGl0dWRlOiAnYW1wbGl0dWRlJyxcbiAgYXJhYmljZm9ybTogJ2FyYWJpY0Zvcm0nLFxuICAnYXJhYmljLWZvcm0nOiAnYXJhYmljRm9ybScsXG4gIGFzY2VudDogJ2FzY2VudCcsXG4gIGF0dHJpYnV0ZW5hbWU6ICdhdHRyaWJ1dGVOYW1lJyxcbiAgYXR0cmlidXRldHlwZTogJ2F0dHJpYnV0ZVR5cGUnLFxuICBhdXRvcmV2ZXJzZTogJ2F1dG9SZXZlcnNlJyxcbiAgYXppbXV0aDogJ2F6aW11dGgnLFxuICBiYXNlZnJlcXVlbmN5OiAnYmFzZUZyZXF1ZW5jeScsXG4gIGJhc2VsaW5lc2hpZnQ6ICdiYXNlbGluZVNoaWZ0JyxcbiAgJ2Jhc2VsaW5lLXNoaWZ0JzogJ2Jhc2VsaW5lU2hpZnQnLFxuICBiYXNlcHJvZmlsZTogJ2Jhc2VQcm9maWxlJyxcbiAgYmJveDogJ2Jib3gnLFxuICBiZWdpbjogJ2JlZ2luJyxcbiAgYmlhczogJ2JpYXMnLFxuICBieTogJ2J5JyxcbiAgY2FsY21vZGU6ICdjYWxjTW9kZScsXG4gIGNhcGhlaWdodDogJ2NhcEhlaWdodCcsXG4gICdjYXAtaGVpZ2h0JzogJ2NhcEhlaWdodCcsXG4gIGNsaXA6ICdjbGlwJyxcbiAgY2xpcHBhdGg6ICdjbGlwUGF0aCcsXG4gICdjbGlwLXBhdGgnOiAnY2xpcFBhdGgnLFxuICBjbGlwcGF0aHVuaXRzOiAnY2xpcFBhdGhVbml0cycsXG4gIGNsaXBydWxlOiAnY2xpcFJ1bGUnLFxuICAnY2xpcC1ydWxlJzogJ2NsaXBSdWxlJyxcbiAgY29sb3I6ICdjb2xvcicsXG4gIGNvbG9yaW50ZXJwb2xhdGlvbjogJ2NvbG9ySW50ZXJwb2xhdGlvbicsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uJzogJ2NvbG9ySW50ZXJwb2xhdGlvbicsXG4gIGNvbG9yaW50ZXJwb2xhdGlvbmZpbHRlcnM6ICdjb2xvckludGVycG9sYXRpb25GaWx0ZXJzJyxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyc6ICdjb2xvckludGVycG9sYXRpb25GaWx0ZXJzJyxcbiAgY29sb3Jwcm9maWxlOiAnY29sb3JQcm9maWxlJyxcbiAgJ2NvbG9yLXByb2ZpbGUnOiAnY29sb3JQcm9maWxlJyxcbiAgY29sb3JyZW5kZXJpbmc6ICdjb2xvclJlbmRlcmluZycsXG4gICdjb2xvci1yZW5kZXJpbmcnOiAnY29sb3JSZW5kZXJpbmcnLFxuICBjb250ZW50c2NyaXB0dHlwZTogJ2NvbnRlbnRTY3JpcHRUeXBlJyxcbiAgY29udGVudHN0eWxldHlwZTogJ2NvbnRlbnRTdHlsZVR5cGUnLFxuICBjdXJzb3I6ICdjdXJzb3InLFxuICBjeDogJ2N4JyxcbiAgY3k6ICdjeScsXG4gIGQ6ICdkJyxcbiAgZGF0YXR5cGU6ICdkYXRhdHlwZScsXG4gIGRlY2VsZXJhdGU6ICdkZWNlbGVyYXRlJyxcbiAgZGVzY2VudDogJ2Rlc2NlbnQnLFxuICBkaWZmdXNlY29uc3RhbnQ6ICdkaWZmdXNlQ29uc3RhbnQnLFxuICBkaXJlY3Rpb246ICdkaXJlY3Rpb24nLFxuICBkaXNwbGF5OiAnZGlzcGxheScsXG4gIGRpdmlzb3I6ICdkaXZpc29yJyxcbiAgZG9taW5hbnRiYXNlbGluZTogJ2RvbWluYW50QmFzZWxpbmUnLFxuICAnZG9taW5hbnQtYmFzZWxpbmUnOiAnZG9taW5hbnRCYXNlbGluZScsXG4gIGR1cjogJ2R1cicsXG4gIGR4OiAnZHgnLFxuICBkeTogJ2R5JyxcbiAgZWRnZW1vZGU6ICdlZGdlTW9kZScsXG4gIGVsZXZhdGlvbjogJ2VsZXZhdGlvbicsXG4gIGVuYWJsZWJhY2tncm91bmQ6ICdlbmFibGVCYWNrZ3JvdW5kJyxcbiAgJ2VuYWJsZS1iYWNrZ3JvdW5kJzogJ2VuYWJsZUJhY2tncm91bmQnLFxuICBlbmQ6ICdlbmQnLFxuICBleHBvbmVudDogJ2V4cG9uZW50JyxcbiAgZXh0ZXJuYWxyZXNvdXJjZXNyZXF1aXJlZDogJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLFxuICBmaWxsOiAnZmlsbCcsXG4gIGZpbGxvcGFjaXR5OiAnZmlsbE9wYWNpdHknLFxuICAnZmlsbC1vcGFjaXR5JzogJ2ZpbGxPcGFjaXR5JyxcbiAgZmlsbHJ1bGU6ICdmaWxsUnVsZScsXG4gICdmaWxsLXJ1bGUnOiAnZmlsbFJ1bGUnLFxuICBmaWx0ZXI6ICdmaWx0ZXInLFxuICBmaWx0ZXJyZXM6ICdmaWx0ZXJSZXMnLFxuICBmaWx0ZXJ1bml0czogJ2ZpbHRlclVuaXRzJyxcbiAgZmxvb2RvcGFjaXR5OiAnZmxvb2RPcGFjaXR5JyxcbiAgJ2Zsb29kLW9wYWNpdHknOiAnZmxvb2RPcGFjaXR5JyxcbiAgZmxvb2Rjb2xvcjogJ2Zsb29kQ29sb3InLFxuICAnZmxvb2QtY29sb3InOiAnZmxvb2RDb2xvcicsXG4gIGZvY3VzYWJsZTogJ2ZvY3VzYWJsZScsXG4gIGZvbnRmYW1pbHk6ICdmb250RmFtaWx5JyxcbiAgJ2ZvbnQtZmFtaWx5JzogJ2ZvbnRGYW1pbHknLFxuICBmb250c2l6ZTogJ2ZvbnRTaXplJyxcbiAgJ2ZvbnQtc2l6ZSc6ICdmb250U2l6ZScsXG4gIGZvbnRzaXplYWRqdXN0OiAnZm9udFNpemVBZGp1c3QnLFxuICAnZm9udC1zaXplLWFkanVzdCc6ICdmb250U2l6ZUFkanVzdCcsXG4gIGZvbnRzdHJldGNoOiAnZm9udFN0cmV0Y2gnLFxuICAnZm9udC1zdHJldGNoJzogJ2ZvbnRTdHJldGNoJyxcbiAgZm9udHN0eWxlOiAnZm9udFN0eWxlJyxcbiAgJ2ZvbnQtc3R5bGUnOiAnZm9udFN0eWxlJyxcbiAgZm9udHZhcmlhbnQ6ICdmb250VmFyaWFudCcsXG4gICdmb250LXZhcmlhbnQnOiAnZm9udFZhcmlhbnQnLFxuICBmb250d2VpZ2h0OiAnZm9udFdlaWdodCcsXG4gICdmb250LXdlaWdodCc6ICdmb250V2VpZ2h0JyxcbiAgZm9ybWF0OiAnZm9ybWF0JyxcbiAgZnJvbTogJ2Zyb20nLFxuICBmeDogJ2Z4JyxcbiAgZnk6ICdmeScsXG4gIGcxOiAnZzEnLFxuICBnMjogJ2cyJyxcbiAgZ2x5cGhuYW1lOiAnZ2x5cGhOYW1lJyxcbiAgJ2dseXBoLW5hbWUnOiAnZ2x5cGhOYW1lJyxcbiAgZ2x5cGhvcmllbnRhdGlvbmhvcml6b250YWw6ICdnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJzogJ2dseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsJyxcbiAgZ2x5cGhvcmllbnRhdGlvbnZlcnRpY2FsOiAnZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsJyxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJzogJ2dseXBoT3JpZW50YXRpb25WZXJ0aWNhbCcsXG4gIGdseXBocmVmOiAnZ2x5cGhSZWYnLFxuICBncmFkaWVudHRyYW5zZm9ybTogJ2dyYWRpZW50VHJhbnNmb3JtJyxcbiAgZ3JhZGllbnR1bml0czogJ2dyYWRpZW50VW5pdHMnLFxuICBoYW5naW5nOiAnaGFuZ2luZycsXG4gIGhvcml6YWR2eDogJ2hvcml6QWR2WCcsXG4gICdob3Jpei1hZHYteCc6ICdob3JpekFkdlgnLFxuICBob3Jpem9yaWdpbng6ICdob3Jpek9yaWdpblgnLFxuICAnaG9yaXotb3JpZ2luLXgnOiAnaG9yaXpPcmlnaW5YJyxcbiAgaWRlb2dyYXBoaWM6ICdpZGVvZ3JhcGhpYycsXG4gIGltYWdlcmVuZGVyaW5nOiAnaW1hZ2VSZW5kZXJpbmcnLFxuICAnaW1hZ2UtcmVuZGVyaW5nJzogJ2ltYWdlUmVuZGVyaW5nJyxcbiAgaW4yOiAnaW4yJyxcbiAgaW46ICdpbicsXG4gIGlubGlzdDogJ2lubGlzdCcsXG4gIGludGVyY2VwdDogJ2ludGVyY2VwdCcsXG4gIGsxOiAnazEnLFxuICBrMjogJ2syJyxcbiAgazM6ICdrMycsXG4gIGs0OiAnazQnLFxuICBrOiAnaycsXG4gIGtlcm5lbG1hdHJpeDogJ2tlcm5lbE1hdHJpeCcsXG4gIGtlcm5lbHVuaXRsZW5ndGg6ICdrZXJuZWxVbml0TGVuZ3RoJyxcbiAga2VybmluZzogJ2tlcm5pbmcnLFxuICBrZXlwb2ludHM6ICdrZXlQb2ludHMnLFxuICBrZXlzcGxpbmVzOiAna2V5U3BsaW5lcycsXG4gIGtleXRpbWVzOiAna2V5VGltZXMnLFxuICBsZW5ndGhhZGp1c3Q6ICdsZW5ndGhBZGp1c3QnLFxuICBsZXR0ZXJzcGFjaW5nOiAnbGV0dGVyU3BhY2luZycsXG4gICdsZXR0ZXItc3BhY2luZyc6ICdsZXR0ZXJTcGFjaW5nJyxcbiAgbGlnaHRpbmdjb2xvcjogJ2xpZ2h0aW5nQ29sb3InLFxuICAnbGlnaHRpbmctY29sb3InOiAnbGlnaHRpbmdDb2xvcicsXG4gIGxpbWl0aW5nY29uZWFuZ2xlOiAnbGltaXRpbmdDb25lQW5nbGUnLFxuICBsb2NhbDogJ2xvY2FsJyxcbiAgbWFya2VyZW5kOiAnbWFya2VyRW5kJyxcbiAgJ21hcmtlci1lbmQnOiAnbWFya2VyRW5kJyxcbiAgbWFya2VyaGVpZ2h0OiAnbWFya2VySGVpZ2h0JyxcbiAgbWFya2VybWlkOiAnbWFya2VyTWlkJyxcbiAgJ21hcmtlci1taWQnOiAnbWFya2VyTWlkJyxcbiAgbWFya2Vyc3RhcnQ6ICdtYXJrZXJTdGFydCcsXG4gICdtYXJrZXItc3RhcnQnOiAnbWFya2VyU3RhcnQnLFxuICBtYXJrZXJ1bml0czogJ21hcmtlclVuaXRzJyxcbiAgbWFya2Vyd2lkdGg6ICdtYXJrZXJXaWR0aCcsXG4gIG1hc2s6ICdtYXNrJyxcbiAgbWFza2NvbnRlbnR1bml0czogJ21hc2tDb250ZW50VW5pdHMnLFxuICBtYXNrdW5pdHM6ICdtYXNrVW5pdHMnLFxuICBtYXRoZW1hdGljYWw6ICdtYXRoZW1hdGljYWwnLFxuICBtb2RlOiAnbW9kZScsXG4gIG51bW9jdGF2ZXM6ICdudW1PY3RhdmVzJyxcbiAgb2Zmc2V0OiAnb2Zmc2V0JyxcbiAgb3BhY2l0eTogJ29wYWNpdHknLFxuICBvcGVyYXRvcjogJ29wZXJhdG9yJyxcbiAgb3JkZXI6ICdvcmRlcicsXG4gIG9yaWVudDogJ29yaWVudCcsXG4gIG9yaWVudGF0aW9uOiAnb3JpZW50YXRpb24nLFxuICBvcmlnaW46ICdvcmlnaW4nLFxuICBvdmVyZmxvdzogJ292ZXJmbG93JyxcbiAgb3ZlcmxpbmVwb3NpdGlvbjogJ292ZXJsaW5lUG9zaXRpb24nLFxuICAnb3ZlcmxpbmUtcG9zaXRpb24nOiAnb3ZlcmxpbmVQb3NpdGlvbicsXG4gIG92ZXJsaW5ldGhpY2tuZXNzOiAnb3ZlcmxpbmVUaGlja25lc3MnLFxuICAnb3ZlcmxpbmUtdGhpY2tuZXNzJzogJ292ZXJsaW5lVGhpY2tuZXNzJyxcbiAgcGFpbnRvcmRlcjogJ3BhaW50T3JkZXInLFxuICAncGFpbnQtb3JkZXInOiAncGFpbnRPcmRlcicsXG4gIHBhbm9zZTE6ICdwYW5vc2UxJyxcbiAgJ3Bhbm9zZS0xJzogJ3Bhbm9zZTEnLFxuICBwYXRobGVuZ3RoOiAncGF0aExlbmd0aCcsXG4gIHBhdHRlcm5jb250ZW50dW5pdHM6ICdwYXR0ZXJuQ29udGVudFVuaXRzJyxcbiAgcGF0dGVybnRyYW5zZm9ybTogJ3BhdHRlcm5UcmFuc2Zvcm0nLFxuICBwYXR0ZXJudW5pdHM6ICdwYXR0ZXJuVW5pdHMnLFxuICBwb2ludGVyZXZlbnRzOiAncG9pbnRlckV2ZW50cycsXG4gICdwb2ludGVyLWV2ZW50cyc6ICdwb2ludGVyRXZlbnRzJyxcbiAgcG9pbnRzOiAncG9pbnRzJyxcbiAgcG9pbnRzYXR4OiAncG9pbnRzQXRYJyxcbiAgcG9pbnRzYXR5OiAncG9pbnRzQXRZJyxcbiAgcG9pbnRzYXR6OiAncG9pbnRzQXRaJyxcbiAgcHJlZml4OiAncHJlZml4JyxcbiAgcHJlc2VydmVhbHBoYTogJ3ByZXNlcnZlQWxwaGEnLFxuICBwcmVzZXJ2ZWFzcGVjdHJhdGlvOiAncHJlc2VydmVBc3BlY3RSYXRpbycsXG4gIHByaW1pdGl2ZXVuaXRzOiAncHJpbWl0aXZlVW5pdHMnLFxuICBwcm9wZXJ0eTogJ3Byb3BlcnR5JyxcbiAgcjogJ3InLFxuICByYWRpdXM6ICdyYWRpdXMnLFxuICByZWZ4OiAncmVmWCcsXG4gIHJlZnk6ICdyZWZZJyxcbiAgcmVuZGVyaW5naW50ZW50OiAncmVuZGVyaW5nSW50ZW50JyxcbiAgJ3JlbmRlcmluZy1pbnRlbnQnOiAncmVuZGVyaW5nSW50ZW50JyxcbiAgcmVwZWF0Y291bnQ6ICdyZXBlYXRDb3VudCcsXG4gIHJlcGVhdGR1cjogJ3JlcGVhdER1cicsXG4gIHJlcXVpcmVkZXh0ZW5zaW9uczogJ3JlcXVpcmVkRXh0ZW5zaW9ucycsXG4gIHJlcXVpcmVkZmVhdHVyZXM6ICdyZXF1aXJlZEZlYXR1cmVzJyxcbiAgcmVzb3VyY2U6ICdyZXNvdXJjZScsXG4gIHJlc3RhcnQ6ICdyZXN0YXJ0JyxcbiAgcmVzdWx0OiAncmVzdWx0JyxcbiAgcmVzdWx0czogJ3Jlc3VsdHMnLFxuICByb3RhdGU6ICdyb3RhdGUnLFxuICByeDogJ3J4JyxcbiAgcnk6ICdyeScsXG4gIHNjYWxlOiAnc2NhbGUnLFxuICBzZWN1cml0eTogJ3NlY3VyaXR5JyxcbiAgc2VlZDogJ3NlZWQnLFxuICBzaGFwZXJlbmRlcmluZzogJ3NoYXBlUmVuZGVyaW5nJyxcbiAgJ3NoYXBlLXJlbmRlcmluZyc6ICdzaGFwZVJlbmRlcmluZycsXG4gIHNsb3BlOiAnc2xvcGUnLFxuICBzcGFjaW5nOiAnc3BhY2luZycsXG4gIHNwZWN1bGFyY29uc3RhbnQ6ICdzcGVjdWxhckNvbnN0YW50JyxcbiAgc3BlY3VsYXJleHBvbmVudDogJ3NwZWN1bGFyRXhwb25lbnQnLFxuICBzcGVlZDogJ3NwZWVkJyxcbiAgc3ByZWFkbWV0aG9kOiAnc3ByZWFkTWV0aG9kJyxcbiAgc3RhcnRvZmZzZXQ6ICdzdGFydE9mZnNldCcsXG4gIHN0ZGRldmlhdGlvbjogJ3N0ZERldmlhdGlvbicsXG4gIHN0ZW1oOiAnc3RlbWgnLFxuICBzdGVtdjogJ3N0ZW12JyxcbiAgc3RpdGNodGlsZXM6ICdzdGl0Y2hUaWxlcycsXG4gIHN0b3Bjb2xvcjogJ3N0b3BDb2xvcicsXG4gICdzdG9wLWNvbG9yJzogJ3N0b3BDb2xvcicsXG4gIHN0b3BvcGFjaXR5OiAnc3RvcE9wYWNpdHknLFxuICAnc3RvcC1vcGFjaXR5JzogJ3N0b3BPcGFjaXR5JyxcbiAgc3RyaWtldGhyb3VnaHBvc2l0aW9uOiAnc3RyaWtldGhyb3VnaFBvc2l0aW9uJyxcbiAgJ3N0cmlrZXRocm91Z2gtcG9zaXRpb24nOiAnc3RyaWtldGhyb3VnaFBvc2l0aW9uJyxcbiAgc3RyaWtldGhyb3VnaHRoaWNrbmVzczogJ3N0cmlrZXRocm91Z2hUaGlja25lc3MnLFxuICAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnOiAnc3RyaWtldGhyb3VnaFRoaWNrbmVzcycsXG4gIHN0cmluZzogJ3N0cmluZycsXG4gIHN0cm9rZTogJ3N0cm9rZScsXG4gIHN0cm9rZWRhc2hhcnJheTogJ3N0cm9rZURhc2hhcnJheScsXG4gICdzdHJva2UtZGFzaGFycmF5JzogJ3N0cm9rZURhc2hhcnJheScsXG4gIHN0cm9rZWRhc2hvZmZzZXQ6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgJ3N0cm9rZS1kYXNob2Zmc2V0JzogJ3N0cm9rZURhc2hvZmZzZXQnLFxuICBzdHJva2VsaW5lY2FwOiAnc3Ryb2tlTGluZWNhcCcsXG4gICdzdHJva2UtbGluZWNhcCc6ICdzdHJva2VMaW5lY2FwJyxcbiAgc3Ryb2tlbGluZWpvaW46ICdzdHJva2VMaW5lam9pbicsXG4gICdzdHJva2UtbGluZWpvaW4nOiAnc3Ryb2tlTGluZWpvaW4nLFxuICBzdHJva2VtaXRlcmxpbWl0OiAnc3Ryb2tlTWl0ZXJsaW1pdCcsXG4gICdzdHJva2UtbWl0ZXJsaW1pdCc6ICdzdHJva2VNaXRlcmxpbWl0JyxcbiAgc3Ryb2tld2lkdGg6ICdzdHJva2VXaWR0aCcsXG4gICdzdHJva2Utd2lkdGgnOiAnc3Ryb2tlV2lkdGgnLFxuICBzdHJva2VvcGFjaXR5OiAnc3Ryb2tlT3BhY2l0eScsXG4gICdzdHJva2Utb3BhY2l0eSc6ICdzdHJva2VPcGFjaXR5JyxcbiAgc3VwcHJlc3Njb250ZW50ZWRpdGFibGV3YXJuaW5nOiAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJyxcbiAgc3VwcHJlc3NoeWRyYXRpb253YXJuaW5nOiAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJyxcbiAgc3VyZmFjZXNjYWxlOiAnc3VyZmFjZVNjYWxlJyxcbiAgc3lzdGVtbGFuZ3VhZ2U6ICdzeXN0ZW1MYW5ndWFnZScsXG4gIHRhYmxldmFsdWVzOiAndGFibGVWYWx1ZXMnLFxuICB0YXJnZXR4OiAndGFyZ2V0WCcsXG4gIHRhcmdldHk6ICd0YXJnZXRZJyxcbiAgdGV4dGFuY2hvcjogJ3RleHRBbmNob3InLFxuICAndGV4dC1hbmNob3InOiAndGV4dEFuY2hvcicsXG4gIHRleHRkZWNvcmF0aW9uOiAndGV4dERlY29yYXRpb24nLFxuICAndGV4dC1kZWNvcmF0aW9uJzogJ3RleHREZWNvcmF0aW9uJyxcbiAgdGV4dGxlbmd0aDogJ3RleHRMZW5ndGgnLFxuICB0ZXh0cmVuZGVyaW5nOiAndGV4dFJlbmRlcmluZycsXG4gICd0ZXh0LXJlbmRlcmluZyc6ICd0ZXh0UmVuZGVyaW5nJyxcbiAgdG86ICd0bycsXG4gIHRyYW5zZm9ybTogJ3RyYW5zZm9ybScsXG4gIHR5cGVvZjogJ3R5cGVvZicsXG4gIHUxOiAndTEnLFxuICB1MjogJ3UyJyxcbiAgdW5kZXJsaW5lcG9zaXRpb246ICd1bmRlcmxpbmVQb3NpdGlvbicsXG4gICd1bmRlcmxpbmUtcG9zaXRpb24nOiAndW5kZXJsaW5lUG9zaXRpb24nLFxuICB1bmRlcmxpbmV0aGlja25lc3M6ICd1bmRlcmxpbmVUaGlja25lc3MnLFxuICAndW5kZXJsaW5lLXRoaWNrbmVzcyc6ICd1bmRlcmxpbmVUaGlja25lc3MnLFxuICB1bmljb2RlOiAndW5pY29kZScsXG4gIHVuaWNvZGViaWRpOiAndW5pY29kZUJpZGknLFxuICAndW5pY29kZS1iaWRpJzogJ3VuaWNvZGVCaWRpJyxcbiAgdW5pY29kZXJhbmdlOiAndW5pY29kZVJhbmdlJyxcbiAgJ3VuaWNvZGUtcmFuZ2UnOiAndW5pY29kZVJhbmdlJyxcbiAgdW5pdHNwZXJlbTogJ3VuaXRzUGVyRW0nLFxuICAndW5pdHMtcGVyLWVtJzogJ3VuaXRzUGVyRW0nLFxuICB1bnNlbGVjdGFibGU6ICd1bnNlbGVjdGFibGUnLFxuICB2YWxwaGFiZXRpYzogJ3ZBbHBoYWJldGljJyxcbiAgJ3YtYWxwaGFiZXRpYyc6ICd2QWxwaGFiZXRpYycsXG4gIHZhbHVlczogJ3ZhbHVlcycsXG4gIHZlY3RvcmVmZmVjdDogJ3ZlY3RvckVmZmVjdCcsXG4gICd2ZWN0b3ItZWZmZWN0JzogJ3ZlY3RvckVmZmVjdCcsXG4gIHZlcnNpb246ICd2ZXJzaW9uJyxcbiAgdmVydGFkdnk6ICd2ZXJ0QWR2WScsXG4gICd2ZXJ0LWFkdi15JzogJ3ZlcnRBZHZZJyxcbiAgdmVydG9yaWdpbng6ICd2ZXJ0T3JpZ2luWCcsXG4gICd2ZXJ0LW9yaWdpbi14JzogJ3ZlcnRPcmlnaW5YJyxcbiAgdmVydG9yaWdpbnk6ICd2ZXJ0T3JpZ2luWScsXG4gICd2ZXJ0LW9yaWdpbi15JzogJ3ZlcnRPcmlnaW5ZJyxcbiAgdmhhbmdpbmc6ICd2SGFuZ2luZycsXG4gICd2LWhhbmdpbmcnOiAndkhhbmdpbmcnLFxuICB2aWRlb2dyYXBoaWM6ICd2SWRlb2dyYXBoaWMnLFxuICAndi1pZGVvZ3JhcGhpYyc6ICd2SWRlb2dyYXBoaWMnLFxuICB2aWV3Ym94OiAndmlld0JveCcsXG4gIHZpZXd0YXJnZXQ6ICd2aWV3VGFyZ2V0JyxcbiAgdmlzaWJpbGl0eTogJ3Zpc2liaWxpdHknLFxuICB2bWF0aGVtYXRpY2FsOiAndk1hdGhlbWF0aWNhbCcsXG4gICd2LW1hdGhlbWF0aWNhbCc6ICd2TWF0aGVtYXRpY2FsJyxcbiAgdm9jYWI6ICd2b2NhYicsXG4gIHdpZHRoczogJ3dpZHRocycsXG4gIHdvcmRzcGFjaW5nOiAnd29yZFNwYWNpbmcnLFxuICAnd29yZC1zcGFjaW5nJzogJ3dvcmRTcGFjaW5nJyxcbiAgd3JpdGluZ21vZGU6ICd3cml0aW5nTW9kZScsXG4gICd3cml0aW5nLW1vZGUnOiAnd3JpdGluZ01vZGUnLFxuICB4MTogJ3gxJyxcbiAgeDI6ICd4MicsXG4gIHg6ICd4JyxcbiAgeGNoYW5uZWxzZWxlY3RvcjogJ3hDaGFubmVsU2VsZWN0b3InLFxuICB4aGVpZ2h0OiAneEhlaWdodCcsXG4gICd4LWhlaWdodCc6ICd4SGVpZ2h0JyxcbiAgeGxpbmthY3R1YXRlOiAneGxpbmtBY3R1YXRlJyxcbiAgJ3hsaW5rOmFjdHVhdGUnOiAneGxpbmtBY3R1YXRlJyxcbiAgeGxpbmthcmNyb2xlOiAneGxpbmtBcmNyb2xlJyxcbiAgJ3hsaW5rOmFyY3JvbGUnOiAneGxpbmtBcmNyb2xlJyxcbiAgeGxpbmtocmVmOiAneGxpbmtIcmVmJyxcbiAgJ3hsaW5rOmhyZWYnOiAneGxpbmtIcmVmJyxcbiAgeGxpbmtyb2xlOiAneGxpbmtSb2xlJyxcbiAgJ3hsaW5rOnJvbGUnOiAneGxpbmtSb2xlJyxcbiAgeGxpbmtzaG93OiAneGxpbmtTaG93JyxcbiAgJ3hsaW5rOnNob3cnOiAneGxpbmtTaG93JyxcbiAgeGxpbmt0aXRsZTogJ3hsaW5rVGl0bGUnLFxuICAneGxpbms6dGl0bGUnOiAneGxpbmtUaXRsZScsXG4gIHhsaW5rdHlwZTogJ3hsaW5rVHlwZScsXG4gICd4bGluazp0eXBlJzogJ3hsaW5rVHlwZScsXG4gIHhtbGJhc2U6ICd4bWxCYXNlJyxcbiAgJ3htbDpiYXNlJzogJ3htbEJhc2UnLFxuICB4bWxsYW5nOiAneG1sTGFuZycsXG4gICd4bWw6bGFuZyc6ICd4bWxMYW5nJyxcbiAgeG1sbnM6ICd4bWxucycsXG4gICd4bWw6c3BhY2UnOiAneG1sU3BhY2UnLFxuICB4bWxuc3hsaW5rOiAneG1sbnNYbGluaycsXG4gICd4bWxuczp4bGluayc6ICd4bWxuc1hsaW5rJyxcbiAgeG1sc3BhY2U6ICd4bWxTcGFjZScsXG4gIHkxOiAneTEnLFxuICB5MjogJ3kyJyxcbiAgeTogJ3knLFxuICB5Y2hhbm5lbHNlbGVjdG9yOiAneUNoYW5uZWxTZWxlY3RvcicsXG4gIHo6ICd6JyxcbiAgem9vbWFuZHBhbjogJ3pvb21BbmRQYW4nXG59O1xuXG52YXIgYXJpYVByb3BlcnRpZXMgPSB7XG4gICdhcmlhLWN1cnJlbnQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1kZXRhaWxzJzogMCxcbiAgJ2FyaWEtZGlzYWJsZWQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1oaWRkZW4nOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1pbnZhbGlkJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEta2V5c2hvcnRjdXRzJzogMCxcbiAgJ2FyaWEtbGFiZWwnOiAwLFxuICAnYXJpYS1yb2xlZGVzY3JpcHRpb24nOiAwLFxuICAvLyBXaWRnZXQgQXR0cmlidXRlc1xuICAnYXJpYS1hdXRvY29tcGxldGUnOiAwLFxuICAnYXJpYS1jaGVja2VkJzogMCxcbiAgJ2FyaWEtZXhwYW5kZWQnOiAwLFxuICAnYXJpYS1oYXNwb3B1cCc6IDAsXG4gICdhcmlhLWxldmVsJzogMCxcbiAgJ2FyaWEtbW9kYWwnOiAwLFxuICAnYXJpYS1tdWx0aWxpbmUnOiAwLFxuICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiAwLFxuICAnYXJpYS1vcmllbnRhdGlvbic6IDAsXG4gICdhcmlhLXBsYWNlaG9sZGVyJzogMCxcbiAgJ2FyaWEtcHJlc3NlZCc6IDAsXG4gICdhcmlhLXJlYWRvbmx5JzogMCxcbiAgJ2FyaWEtcmVxdWlyZWQnOiAwLFxuICAnYXJpYS1zZWxlY3RlZCc6IDAsXG4gICdhcmlhLXNvcnQnOiAwLFxuICAnYXJpYS12YWx1ZW1heCc6IDAsXG4gICdhcmlhLXZhbHVlbWluJzogMCxcbiAgJ2FyaWEtdmFsdWVub3cnOiAwLFxuICAnYXJpYS12YWx1ZXRleHQnOiAwLFxuICAvLyBMaXZlIFJlZ2lvbiBBdHRyaWJ1dGVzXG4gICdhcmlhLWF0b21pYyc6IDAsXG4gICdhcmlhLWJ1c3knOiAwLFxuICAnYXJpYS1saXZlJzogMCxcbiAgJ2FyaWEtcmVsZXZhbnQnOiAwLFxuICAvLyBEcmFnLWFuZC1Ecm9wIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtZHJvcGVmZmVjdCc6IDAsXG4gICdhcmlhLWdyYWJiZWQnOiAwLFxuICAvLyBSZWxhdGlvbnNoaXAgQXR0cmlidXRlc1xuICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JzogMCxcbiAgJ2FyaWEtY29sY291bnQnOiAwLFxuICAnYXJpYS1jb2xpbmRleCc6IDAsXG4gICdhcmlhLWNvbHNwYW4nOiAwLFxuICAnYXJpYS1jb250cm9scyc6IDAsXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogMCxcbiAgJ2FyaWEtZXJyb3JtZXNzYWdlJzogMCxcbiAgJ2FyaWEtZmxvd3RvJzogMCxcbiAgJ2FyaWEtbGFiZWxsZWRieSc6IDAsXG4gICdhcmlhLW93bnMnOiAwLFxuICAnYXJpYS1wb3NpbnNldCc6IDAsXG4gICdhcmlhLXJvd2NvdW50JzogMCxcbiAgJ2FyaWEtcm93aW5kZXgnOiAwLFxuICAnYXJpYS1yb3dzcGFuJzogMCxcbiAgJ2FyaWEtc2V0c2l6ZSc6IDBcbn07XG5cbnZhciB3YXJuZWRQcm9wZXJ0aWVzID0ge307XG52YXIgckFSSUEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciByQVJJQUNhbWVsID0gbmV3IFJlZ0V4cCgnXihhcmlhKVtBLVpdWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIGhhc093blByb3BlcnR5JDEgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5KHRhZ05hbWUsIG5hbWUpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSQxLmNhbGwod2FybmVkUHJvcGVydGllcywgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllc1tuYW1lXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJBUklBQ2FtZWwudGVzdChuYW1lKSkge1xuICAgICAgdmFyIGFyaWFOYW1lID0gJ2FyaWEtJyArIG5hbWUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBjb3JyZWN0TmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGFyaWFOYW1lKSA/IGFyaWFOYW1lIDogbnVsbDsgLy8gSWYgdGhpcyBpcyBhbiBhcmlhLSogYXR0cmlidXRlLCBidXQgaXMgbm90IGxpc3RlZCBpbiB0aGUga25vd24gRE9NXG4gICAgICAvLyBET00gcHJvcGVydGllcywgdGhlbiBpdCBpcyBhbiBpbnZhbGlkIGFyaWEtKiBhdHRyaWJ1dGUuXG5cbiAgICAgIGlmIChjb3JyZWN0TmFtZSA9PSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIEFSSUEgYXR0cmlidXRlcyBmb2xsb3cgdGhlIHBhdHRlcm4gYXJpYS0qIGFuZCBtdXN0IGJlIGxvd2VyY2FzZS4nLCBuYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IC8vIGFyaWEtKiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBsb3dlcmNhc2U7IHN1Z2dlc3QgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uLlxuXG5cbiAgICAgIGlmIChuYW1lICE9PSBjb3JyZWN0TmFtZSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBjb3JyZWN0TmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyQVJJQS50ZXN0KG5hbWUpKSB7XG4gICAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgc3RhbmRhcmROYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gbG93ZXJDYXNlZE5hbWUgOiBudWxsOyAvLyBJZiB0aGlzIGlzIGFuIGFyaWEtKiBhdHRyaWJ1dGUsIGJ1dCBpcyBub3QgbGlzdGVkIGluIHRoZSBrbm93biBET01cbiAgICAgIC8vIERPTSBwcm9wZXJ0aWVzLCB0aGVuIGl0IGlzIGFuIGludmFsaWQgYXJpYS0qIGF0dHJpYnV0ZS5cblxuICAgICAgaWYgKHN0YW5kYXJkTmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIGFyaWEtKiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBsb3dlcmNhc2U7IHN1Z2dlc3QgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uLlxuXG5cbiAgICAgIGlmIChuYW1lICE9PSBzdGFuZGFyZE5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ1Vua25vd24gQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgc3RhbmRhcmROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHdhcm5JbnZhbGlkQVJJQVByb3BzKHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB2YXIgaW52YWxpZFByb3BzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eSh0eXBlLCBrZXkpO1xuXG4gICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgaW52YWxpZFByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSBpbnZhbGlkUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgICB9KS5qb2luKCcsICcpO1xuXG4gICAgaWYgKGludmFsaWRQcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGFyaWEgcHJvcCAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWFyaWEtcHJvcHMnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfSBlbHNlIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID4gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgYXJpYSBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWFyaWEtcHJvcHMnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcykge1xuICBpZiAoaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2FybkludmFsaWRBUklBUHJvcHModHlwZSwgcHJvcHMpO1xufVxuXG52YXIgZGlkV2FyblZhbHVlTnVsbCA9IGZhbHNlO1xuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpIHtcbiAge1xuICAgIGlmICh0eXBlICE9PSAnaW5wdXQnICYmIHR5cGUgIT09ICd0ZXh0YXJlYScgJiYgdHlwZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMgIT0gbnVsbCAmJiBwcm9wcy52YWx1ZSA9PT0gbnVsbCAmJiAhZGlkV2FyblZhbHVlTnVsbCkge1xuICAgICAgZGlkV2FyblZhbHVlTnVsbCA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlID09PSAnc2VsZWN0JyAmJiBwcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICBlcnJvcignYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IGFycmF5IHdoZW4gYG11bHRpcGxlYCBpcyBzZXQgdG8gYHRydWVgICcgKyAndG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCBmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuJywgdHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IHN0cmluZyB0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgICcgKyAnZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsaWRhdGVQcm9wZXJ0eSQxID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgdmFyIHdhcm5lZFByb3BlcnRpZXMkMSA9IHt9O1xuICB2YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIEVWRU5UX05BTUVfUkVHRVggPSAvXm9uLi87XG4gIHZhciBJTlZBTElEX0VWRU5UX05BTUVfUkVHRVggPSAvXm9uW15BLVpdLztcbiAgdmFyIHJBUklBJDEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbiAgdmFyIHJBUklBQ2FtZWwkMSA9IG5ldyBSZWdFeHAoJ14oYXJpYSlbQS1aXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcblxuICB2YWxpZGF0ZVByb3BlcnR5JDEgPSBmdW5jdGlvbiAodGFnTmFtZSwgbmFtZSwgdmFsdWUsIGV2ZW50UmVnaXN0cnkpIHtcbiAgICBpZiAoX2hhc093blByb3BlcnR5LmNhbGwod2FybmVkUHJvcGVydGllcyQxLCBuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ29uZm9jdXNpbicgfHwgbG93ZXJDYXNlZE5hbWUgPT09ICdvbmZvY3Vzb3V0Jykge1xuICAgICAgZXJyb3IoJ1JlYWN0IHVzZXMgb25Gb2N1cyBhbmQgb25CbHVyIGluc3RlYWQgb2Ygb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0LiAnICsgJ0FsbCBSZWFjdCBldmVudHMgYXJlIG5vcm1hbGl6ZWQgdG8gYnViYmxlLCBzbyBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQgJyArICdhcmUgbm90IG5lZWRlZC9zdXBwb3J0ZWQgYnkgUmVhY3QuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIFdlIGNhbid0IHJlbHkgb24gdGhlIGV2ZW50IHN5c3RlbSBiZWluZyBpbmplY3RlZCBvbiB0aGUgc2VydmVyLlxuXG5cbiAgICBpZiAoZXZlbnRSZWdpc3RyeSAhPSBudWxsKSB7XG4gICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyA9IGV2ZW50UmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyxcbiAgICAgICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzID0gZXZlbnRSZWdpc3RyeS5wb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzO1xuXG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdIDogbnVsbDtcblxuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9yKCdVbmtub3duIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gSXQgd2lsbCBiZSBpZ25vcmVkLicsIG5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAvLyBJZiBubyBldmVudCBwbHVnaW5zIGhhdmUgYmVlbiBpbmplY3RlZCwgd2UgYXJlIGluIGEgc2VydmVyIGVudmlyb25tZW50LlxuICAgICAgLy8gU28gd2UgY2FuJ3QgdGVsbCBpZiB0aGUgZXZlbnQgbmFtZSBpcyBjb3JyZWN0IGZvciBzdXJlLCBidXQgd2UgY2FuIGZpbHRlclxuICAgICAgLy8gb3V0IGtub3duIGJhZCBvbmVzIGxpa2UgYG9uY2xpY2tgLiBXZSBjYW4ndCBzdWdnZXN0IGEgc3BlY2lmaWMgcmVwbGFjZW1lbnQgdGhvdWdoLlxuICAgICAgaWYgKElOVkFMSURfRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gJyArICdSZWFjdCBldmVudHMgdXNlIHRoZSBjYW1lbENhc2UgbmFtaW5nIGNvbnZlbnRpb24sIGZvciBleGFtcGxlIGBvbkNsaWNrYC4nLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gTGV0IHRoZSBBUklBIGF0dHJpYnV0ZSBob29rIHZhbGlkYXRlIEFSSUEgYXR0cmlidXRlc1xuXG5cbiAgICBpZiAockFSSUEkMS50ZXN0KG5hbWUpIHx8IHJBUklBQ2FtZWwkMS50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdpbm5lcmh0bWwnKSB7XG4gICAgICBlcnJvcignRGlyZWN0bHkgc2V0dGluZyBwcm9wZXJ0eSBgaW5uZXJIVE1MYCBpcyBub3QgcGVybWl0dGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBsb29rdXAgZG9jdW1lbnRhdGlvbiBvbiBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLicpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnYXJpYScpIHtcbiAgICAgIGVycm9yKCdUaGUgYGFyaWFgIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBpbiBSZWFjdC4gJyArICdQYXNzIGluZGl2aWR1YWwgYGFyaWEtYCBhdHRyaWJ1dGVzIGluc3RlYWQuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdpcycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYSBgJXNgIGZvciBhIHN0cmluZyBhdHRyaWJ1dGUgYGlzYC4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCAnICsgJ3RoZSB2YWx1ZSB0byBhIHN0cmluZy4nLCB0eXBlb2YgdmFsdWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNOYU4odmFsdWUpKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgTmFOIGZvciB0aGUgYCVzYCBhdHRyaWJ1dGUuIElmIHRoaXMgaXMgZXhwZWN0ZWQsIGNhc3QgJyArICd0aGUgdmFsdWUgdG8gYSBzdHJpbmcuJywgbmFtZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKG5hbWUpO1xuICAgIHZhciBpc1Jlc2VydmVkID0gcHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRDsgLy8gS25vd24gYXR0cmlidXRlcyBzaG91bGQgbWF0Y2ggdGhlIGNhc2luZyBzcGVjaWZpZWQgaW4gdGhlIHByb3BlcnR5IGNvbmZpZy5cblxuICAgIGlmIChwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpKSB7XG4gICAgICB2YXIgc3RhbmRhcmROYW1lID0gcG9zc2libGVTdGFuZGFyZE5hbWVzW2xvd2VyQ2FzZWROYW1lXTtcblxuICAgICAgaWYgKHN0YW5kYXJkTmFtZSAhPT0gbmFtZSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBET00gcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgc3RhbmRhcmROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1Jlc2VydmVkICYmIG5hbWUgIT09IGxvd2VyQ2FzZWROYW1lKSB7XG4gICAgICAvLyBVbmtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIGhhdmUgbG93ZXJjYXNlIGNhc2luZyBzaW5jZSB0aGF0J3MgaG93IHRoZXlcbiAgICAgIC8vIHdpbGwgYmUgY2FzZWQgYW55d2F5IHdpdGggc2VydmVyIHJlbmRlcmluZy5cbiAgICAgIGVycm9yKCdSZWFjdCBkb2VzIG5vdCByZWNvZ25pemUgdGhlIGAlc2AgcHJvcCBvbiBhIERPTSBlbGVtZW50LiBJZiB5b3UgJyArICdpbnRlbnRpb25hbGx5IHdhbnQgaXQgdG8gYXBwZWFyIGluIHRoZSBET00gYXMgYSBjdXN0b20gJyArICdhdHRyaWJ1dGUsIHNwZWxsIGl0IGFzIGxvd2VyY2FzZSBgJXNgIGluc3RlYWQuICcgKyAnSWYgeW91IGFjY2lkZW50YWxseSBwYXNzZWQgaXQgZnJvbSBhIHBhcmVudCBjb21wb25lbnQsIHJlbW92ZSAnICsgJ2l0IGZyb20gdGhlIERPTSBlbGVtZW50LicsIG5hbWUsIGxvd2VyQ2FzZWROYW1lKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyAmJiBzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJyArICclcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LicsIHZhbHVlLCBuYW1lLCBuYW1lLCB2YWx1ZSwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJyArICclcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LlxcblxcbicgKyAnSWYgeW91IHVzZWQgdG8gY29uZGl0aW9uYWxseSBvbWl0IGl0IHdpdGggJXM9e2NvbmRpdGlvbiAmJiB2YWx1ZX0sICcgKyAncGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuJywgdmFsdWUsIG5hbWUsIG5hbWUsIHZhbHVlLCBuYW1lLCBuYW1lLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gTm93IHRoYXQgd2UndmUgdmFsaWRhdGVkIGNhc2luZywgZG8gbm90IHZhbGlkYXRlXG4gICAgLy8gZGF0YSB0eXBlcyBmb3IgcmVzZXJ2ZWQgcHJvcHNcblxuXG4gICAgaWYgKGlzUmVzZXJ2ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gV2FybiB3aGVuIGEga25vd24gYXR0cmlidXRlIGlzIGEgYmFkIHR5cGVcblxuXG4gICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIFdhcm4gd2hlbiBwYXNzaW5nIHRoZSBzdHJpbmdzICdmYWxzZScgb3IgJ3RydWUnIGludG8gYSBib29sZWFuIHByb3BcblxuXG4gICAgaWYgKCh2YWx1ZSA9PT0gJ2ZhbHNlJyB8fCB2YWx1ZSA9PT0gJ3RydWUnKSAmJiBwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IEJPT0xFQU4pIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCB0aGUgc3RyaW5nIGAlc2AgZm9yIHRoZSBib29sZWFuIGF0dHJpYnV0ZSBgJXNgLiAnICsgJyVzICcgKyAnRGlkIHlvdSBtZWFuICVzPXslc30/JywgdmFsdWUsIG5hbWUsIHZhbHVlID09PSAnZmFsc2UnID8gJ1RoZSBicm93c2VyIHdpbGwgaW50ZXJwcmV0IGl0IGFzIGEgdHJ1dGh5IHZhbHVlLicgOiAnQWx0aG91Z2ggdGhpcyB3b3JrcywgaXQgd2lsbCBub3Qgd29yayBhcyBleHBlY3RlZCBpZiB5b3UgcGFzcyB0aGUgc3RyaW5nIFwiZmFsc2VcIi4nLCBuYW1lLCB2YWx1ZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxudmFyIHdhcm5Vbmtub3duUHJvcGVydGllcyA9IGZ1bmN0aW9uICh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSkge1xuICB7XG4gICAgdmFyIHVua25vd25Qcm9wcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkkMSh0eXBlLCBrZXksIHByb3BzW2tleV0sIGV2ZW50UmVnaXN0cnkpO1xuXG4gICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgdW5rbm93blByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSB1bmtub3duUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgICB9KS5qb2luKCcsICcpO1xuXG4gICAgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIHZhbHVlIGZvciBwcm9wICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIGl0IGZyb20gdGhlIGVsZW1lbnQsICcgKyAnb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCBpdCBpbiB0aGUgRE9NLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciAnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfSBlbHNlIGlmICh1bmtub3duUHJvcHMubGVuZ3RoID4gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgdmFsdWVzIGZvciBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSB0aGVtIGZyb20gdGhlIGVsZW1lbnQsICcgKyAnb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCB0aGVtIGluIHRoZSBET00uICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yICcsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KSB7XG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3YXJuVW5rbm93blByb3BlcnRpZXModHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpO1xufVxuXG52YXIgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUgPSAxO1xudmFyIElTX05PTl9ERUxFR0FURUQgPSAxIDw8IDE7XG52YXIgSVNfQ0FQVFVSRV9QSEFTRSA9IDEgPDwgMjtcbnZhciBJU19SRVBMQVlFRCA9IDEgPDwgNDtcbi8vIHNldCB0byBMRUdBQ1lfRkJfU1VQUE9SVC4gTEVHQUNZX0ZCX1NVUFBPUlQgb25seSBnZXRzIHNldCB3aGVuXG4vLyB3ZSBjYWxsIHdpbGxEZWZlckxhdGVyRm9yTGVnYWN5RkJTdXBwb3J0LCB0aHVzIG5vdCBiYWlsaW5nIG91dFxuLy8gd2lsbCByZXN1bHQgaW4gZW5kbGVzcyBjeWNsZXMgbGlrZSBhbiBpbmZpbml0ZSBsb29wLlxuLy8gV2UgYWxzbyBkb24ndCB3YW50IHRvIGRlZmVyIGR1cmluZyBldmVudCByZXBsYXlpbmcuXG5cbnZhciBTSE9VTERfTk9UX1BST0NFU1NfUE9MWUZJTExfRVZFTlRfUExVR0lOUyA9IElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFIHwgSVNfTk9OX0RFTEVHQVRFRCB8IElTX0NBUFRVUkVfUEhBU0U7XG5cbi8qKlxuICogR2V0cyB0aGUgdGFyZ2V0IG5vZGUgZnJvbSBhIG5hdGl2ZSBicm93c2VyIGV2ZW50IGJ5IGFjY291bnRpbmcgZm9yXG4gKiBpbmNvbnNpc3RlbmNpZXMgaW4gYnJvd3NlciBET00gQVBJcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtET01FdmVudFRhcmdldH0gVGFyZ2V0IG5vZGUuXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpIHtcbiAgLy8gRmFsbGJhY2sgdG8gbmF0aXZlRXZlbnQuc3JjRWxlbWVudCBmb3IgSUU5XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI1MDZcbiAgdmFyIHRhcmdldCA9IG5hdGl2ZUV2ZW50LnRhcmdldCB8fCBuYXRpdmVFdmVudC5zcmNFbGVtZW50IHx8IHdpbmRvdzsgLy8gTm9ybWFsaXplIFNWRyA8dXNlPiBlbGVtZW50IGV2ZW50cyAjNDk2M1xuXG4gIGlmICh0YXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpIHtcbiAgICB0YXJnZXQgPSB0YXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQ7XG4gIH0gLy8gU2FmYXJpIG1heSBmaXJlIGV2ZW50cyBvbiB0ZXh0IG5vZGVzIChOb2RlLlRFWFRfTk9ERSBpcyAzKS5cbiAgLy8gQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcblxuXG4gIHJldHVybiB0YXJnZXQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSA/IHRhcmdldC5wYXJlbnROb2RlIDogdGFyZ2V0O1xufVxuXG52YXIgcmVzdG9yZUltcGwgPSBudWxsO1xudmFyIHJlc3RvcmVUYXJnZXQgPSBudWxsO1xudmFyIHJlc3RvcmVRdWV1ZSA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCkge1xuICAvLyBXZSBwZXJmb3JtIHRoaXMgdHJhbnNsYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgZXZlbnQgbG9vcCBzbyB0aGF0IHdlXG4gIC8vIGFsd2F5cyByZWNlaXZlIHRoZSBjb3JyZWN0IGZpYmVyIGhlcmVcbiAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKHRhcmdldCk7XG5cbiAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgLy8gVW5tb3VudGVkXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCEodHlwZW9mIHJlc3RvcmVJbXBsID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbigpIG5lZWRzIHRvIGJlIGNhbGxlZCB0byBoYW5kbGUgYSB0YXJnZXQgZm9yIGNvbnRyb2xsZWQgZXZlbnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0YXRlTm9kZSA9IGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlOyAvLyBHdWFyZCBhZ2FpbnN0IEZpYmVyIGJlaW5nIHVubW91bnRlZC5cblxuICBpZiAoc3RhdGVOb2RlKSB7XG4gICAgdmFyIF9wcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoc3RhdGVOb2RlKTtcblxuICAgIHJlc3RvcmVJbXBsKGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlLCBpbnRlcm5hbEluc3RhbmNlLnR5cGUsIF9wcm9wcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKGltcGwpIHtcbiAgcmVzdG9yZUltcGwgPSBpbXBsO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVN0YXRlUmVzdG9yZSh0YXJnZXQpIHtcbiAgaWYgKHJlc3RvcmVUYXJnZXQpIHtcbiAgICBpZiAocmVzdG9yZVF1ZXVlKSB7XG4gICAgICByZXN0b3JlUXVldWUucHVzaCh0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0b3JlUXVldWUgPSBbdGFyZ2V0XTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdG9yZVRhcmdldCA9IHRhcmdldDtcbiAgfVxufVxuZnVuY3Rpb24gbmVlZHNTdGF0ZVJlc3RvcmUoKSB7XG4gIHJldHVybiByZXN0b3JlVGFyZ2V0ICE9PSBudWxsIHx8IHJlc3RvcmVRdWV1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTdGF0ZUlmTmVlZGVkKCkge1xuICBpZiAoIXJlc3RvcmVUYXJnZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdGFyZ2V0ID0gcmVzdG9yZVRhcmdldDtcbiAgdmFyIHF1ZXVlZFRhcmdldHMgPSByZXN0b3JlUXVldWU7XG4gIHJlc3RvcmVUYXJnZXQgPSBudWxsO1xuICByZXN0b3JlUXVldWUgPSBudWxsO1xuICByZXN0b3JlU3RhdGVPZlRhcmdldCh0YXJnZXQpO1xuXG4gIGlmIChxdWV1ZWRUYXJnZXRzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZWRUYXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN0b3JlU3RhdGVPZlRhcmdldChxdWV1ZWRUYXJnZXRzW2ldKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gdGhlIHJlbmRlcmVyLiBTdWNoIGFzIHdoZW4gd2UncmUgZGlzcGF0Y2hpbmcgZXZlbnRzIG9yIGlmIHRoaXJkIHBhcnR5XG4vLyBsaWJyYXJpZXMgbmVlZCB0byBjYWxsIGJhdGNoZWRVcGRhdGVzLiBFdmVudHVhbGx5LCB0aGlzIEFQSSB3aWxsIGdvIGF3YXkgd2hlblxuLy8gZXZlcnl0aGluZyBpcyBiYXRjaGVkIGJ5IGRlZmF1bHQuIFdlJ2xsIHRoZW4gaGF2ZSBhIHNpbWlsYXIgQVBJIHRvIG9wdC1vdXQgb2Zcbi8vIHNjaGVkdWxlZCB3b3JrIGFuZCBpbnN0ZWFkIGRvIHN5bmNocm9ub3VzIHdvcmsuXG4vLyBEZWZhdWx0c1xuXG52YXIgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKGZuLCBib29ra2VlcGluZykge1xuICByZXR1cm4gZm4oYm9va2tlZXBpbmcpO1xufTtcblxudmFyIGRpc2NyZXRlVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoZm4sIGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIGZuKGEsIGIsIGMsIGQpO1xufTtcblxudmFyIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwgPSBiYXRjaGVkVXBkYXRlc0ltcGw7XG52YXIgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBmYWxzZTtcbnZhciBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZpbmlzaEV2ZW50SGFuZGxlcigpIHtcbiAgLy8gSGVyZSB3ZSB3YWl0IHVudGlsIGFsbCB1cGRhdGVzIGhhdmUgcHJvcGFnYXRlZCwgd2hpY2ggaXMgaW1wb3J0YW50XG4gIC8vIHdoZW4gdXNpbmcgY29udHJvbGxlZCBjb21wb25lbnRzIHdpdGhpbiBsYXllcnM6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY5OFxuICAvLyBUaGVuIHdlIHJlc3RvcmUgc3RhdGUgb2YgYW55IGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICB2YXIgY29udHJvbGxlZENvbXBvbmVudHNIYXZlUGVuZGluZ1VwZGF0ZXMgPSBuZWVkc1N0YXRlUmVzdG9yZSgpO1xuXG4gIGlmIChjb250cm9sbGVkQ29tcG9uZW50c0hhdmVQZW5kaW5nVXBkYXRlcykge1xuICAgIC8vIElmIGEgY29udHJvbGxlZCBldmVudCB3YXMgZmlyZWQsIHdlIG1heSBuZWVkIHRvIHJlc3RvcmUgdGhlIHN0YXRlIG9mXG4gICAgLy8gdGhlIERPTSBub2RlIGJhY2sgdG8gdGhlIGNvbnRyb2xsZWQgdmFsdWUuIFRoaXMgaXMgbmVjZXNzYXJ5IHdoZW4gUmVhY3RcbiAgICAvLyBiYWlscyBvdXQgb2YgdGhlIHVwZGF0ZSB3aXRob3V0IHRvdWNoaW5nIHRoZSBET00uXG4gICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsKCk7XG4gICAgcmVzdG9yZVN0YXRlSWZOZWVkZWQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyhmbiwgYm9va2tlZXBpbmcpIHtcbiAgaWYgKGlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYW5vdGhlciBiYXRjaCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0XG4gICAgLy8gZnVsbHkgY29tcGxldGVzIGJlZm9yZSByZXN0b3Jpbmcgc3RhdGUuXG4gICAgcmV0dXJuIGZuKGJvb2trZWVwaW5nKTtcbiAgfVxuXG4gIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBiYXRjaGVkVXBkYXRlc0ltcGwoZm4sIGJvb2trZWVwaW5nKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IGZhbHNlO1xuICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICB9XG59XG5mdW5jdGlvbiBiYXRjaGVkRXZlbnRVcGRhdGVzKGZuLCBhLCBiKSB7XG4gIGlmIChpc0JhdGNoaW5nRXZlbnRVcGRhdGVzKSB7XG4gICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYW5vdGhlciBiYXRjaCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0XG4gICAgLy8gZnVsbHkgY29tcGxldGVzIGJlZm9yZSByZXN0b3Jpbmcgc3RhdGUuXG4gICAgcmV0dXJuIGZuKGEsIGIpO1xuICB9XG5cbiAgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwoZm4sIGEsIGIpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSBmYWxzZTtcbiAgICBmaW5pc2hFdmVudEhhbmRsZXIoKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlzY3JldGVVcGRhdGVzKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHZhciBwcmV2SXNJbnNpZGVFdmVudEhhbmRsZXIgPSBpc0luc2lkZUV2ZW50SGFuZGxlcjtcbiAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGRpc2NyZXRlVXBkYXRlc0ltcGwoZm4sIGEsIGIsIGMsIGQpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gcHJldklzSW5zaWRlRXZlbnRIYW5kbGVyO1xuXG4gICAgaWYgKCFpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmbHVzaERpc2NyZXRlVXBkYXRlc0lmTmVlZGVkKHRpbWVTdGFtcCkge1xuICB7XG4gICAgaWYgKCFpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXRCYXRjaGluZ0ltcGxlbWVudGF0aW9uKF9iYXRjaGVkVXBkYXRlc0ltcGwsIF9kaXNjcmV0ZVVwZGF0ZXNJbXBsLCBfZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsLCBfYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwpIHtcbiAgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gX2JhdGNoZWRVcGRhdGVzSW1wbDtcbiAgZGlzY3JldGVVcGRhdGVzSW1wbCA9IF9kaXNjcmV0ZVVwZGF0ZXNJbXBsO1xuICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwgPSBfZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsO1xuICBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCA9IF9iYXRjaGVkRXZlbnRVcGRhdGVzSW1wbDtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcmFjdGl2ZSh0YWcpIHtcbiAgcmV0dXJuIHRhZyA9PT0gJ2J1dHRvbicgfHwgdGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3NlbGVjdCcgfHwgdGFnID09PSAndGV4dGFyZWEnO1xufVxuXG5mdW5jdGlvbiBzaG91bGRQcmV2ZW50TW91c2VFdmVudChuYW1lLCB0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdvbkNsaWNrJzpcbiAgICBjYXNlICdvbkNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGljayc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGlja0NhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VEb3duJzpcbiAgICBjYXNlICdvbk1vdXNlRG93bkNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlJzpcbiAgICBjYXNlICdvbk1vdXNlTW92ZUNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VVcCc6XG4gICAgY2FzZSAnb25Nb3VzZVVwQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZUVudGVyJzpcbiAgICAgIHJldHVybiAhIShwcm9wcy5kaXNhYmxlZCAmJiBpc0ludGVyYWN0aXZlKHR5cGUpKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGluc3QgVGhlIGluc3RhbmNlLCB3aGljaCBpcyB0aGUgc291cmNlIG9mIGV2ZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAqIEByZXR1cm4gez9mdW5jdGlvbn0gVGhlIHN0b3JlZCBjYWxsYmFjay5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgdmFyIHN0YXRlTm9kZSA9IGluc3Quc3RhdGVOb2RlO1xuXG4gIGlmIChzdGF0ZU5vZGUgPT09IG51bGwpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzIChleDogb25sb2FkIGV2ZW50cyBpbiBpbmNyZW1lbnRhbCBtb2RlKS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoc3RhdGVOb2RlKTtcblxuICBpZiAocHJvcHMgPT09IG51bGwpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0gcHJvcHNbcmVnaXN0cmF0aW9uTmFtZV07XG5cbiAgaWYgKHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGluc3QudHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoISghbGlzdGVuZXIgfHwgdHlwZW9mIGxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIGBcIiArIHJlZ2lzdHJhdGlvbk5hbWUgKyBcImAgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgXCIgKyB0eXBlb2YgbGlzdGVuZXIgKyBcImAgdHlwZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cblxudmFyIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gZmFsc2U7IC8vIENoZWNrIGlmIGJyb3dzZXIgc3VwcG9ydCBldmVudHMgd2l0aCBwYXNzaXZlIGxpc3RlbmVyc1xuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXIjU2FmZWx5X2RldGVjdGluZ19vcHRpb25fc3VwcG9ydFxuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIHRyeSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7fTsgLy8gJEZsb3dGaXhNZTogSWdub3JlIEZsb3cgY29tcGxhaW5pbmcgYWJvdXQgbmVlZGluZyBhIHZhbHVlXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0aW9ucywgJ3Bhc3NpdmUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZChuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgdHJ5IHtcbiAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGZ1bmNBcmdzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICB9XG59XG5cbnZhciBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsID0gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZDtcblxue1xuICAvLyBJbiBERVYgbW9kZSwgd2Ugc3dhcCBvdXQgaW52b2tlR3VhcmRlZENhbGxiYWNrIGZvciBhIHNwZWNpYWwgdmVyc2lvblxuICAvLyB0aGF0IHBsYXlzIG1vcmUgbmljZWx5IHdpdGggdGhlIGJyb3dzZXIncyBEZXZUb29scy4gVGhlIGlkZWEgaXMgdG8gcHJlc2VydmVcbiAgLy8gXCJQYXVzZSBvbiBleGNlcHRpb25zXCIgYmVoYXZpb3IuIEJlY2F1c2UgUmVhY3Qgd3JhcHMgYWxsIHVzZXItcHJvdmlkZWRcbiAgLy8gZnVuY3Rpb25zIGluIGludm9rZUd1YXJkZWRDYWxsYmFjaywgYW5kIHRoZSBwcm9kdWN0aW9uIHZlcnNpb24gb2ZcbiAgLy8gaW52b2tlR3VhcmRlZENhbGxiYWNrIHVzZXMgYSB0cnktY2F0Y2gsIGFsbCB1c2VyIGV4Y2VwdGlvbnMgYXJlIHRyZWF0ZWRcbiAgLy8gbGlrZSBjYXVnaHQgZXhjZXB0aW9ucywgYW5kIHRoZSBEZXZUb29scyB3b24ndCBwYXVzZSB1bmxlc3MgdGhlIGRldmVsb3BlclxuICAvLyB0YWtlcyB0aGUgZXh0cmEgc3RlcCBvZiBlbmFibGluZyBwYXVzZSBvbiBjYXVnaHQgZXhjZXB0aW9ucy4gVGhpcyBpc1xuICAvLyB1bmludHVpdGl2ZSwgdGhvdWdoLCBiZWNhdXNlIGV2ZW4gdGhvdWdoIFJlYWN0IGhhcyBjYXVnaHQgdGhlIGVycm9yLCBmcm9tXG4gIC8vIHRoZSBkZXZlbG9wZXIncyBwZXJzcGVjdGl2ZSwgdGhlIGVycm9yIGlzIHVuY2F1Z2h0LlxuICAvL1xuICAvLyBUbyBwcmVzZXJ2ZSB0aGUgZXhwZWN0ZWQgXCJQYXVzZSBvbiBleGNlcHRpb25zXCIgYmVoYXZpb3IsIHdlIGRvbid0IHVzZSBhXG4gIC8vIHRyeS1jYXRjaCBpbiBERVYuIEluc3RlYWQsIHdlIHN5bmNocm9ub3VzbHkgZGlzcGF0Y2ggYSBmYWtlIGV2ZW50IHRvIGEgZmFrZVxuICAvLyBET00gbm9kZSwgYW5kIGNhbGwgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2sgZnJvbSBpbnNpZGUgYW4gZXZlbnQgaGFuZGxlclxuICAvLyBmb3IgdGhhdCBmYWtlIGV2ZW50LiBJZiB0aGUgY2FsbGJhY2sgdGhyb3dzLCB0aGUgZXJyb3IgaXMgXCJjYXB0dXJlZFwiIHVzaW5nXG4gIC8vIGEgZ2xvYmFsIGV2ZW50IGhhbmRsZXIuIEJ1dCBiZWNhdXNlIHRoZSBlcnJvciBoYXBwZW5zIGluIGEgZGlmZmVyZW50XG4gIC8vIGV2ZW50IGxvb3AgY29udGV4dCwgaXQgZG9lcyBub3QgaW50ZXJydXB0IHRoZSBub3JtYWwgcHJvZ3JhbSBmbG93LlxuICAvLyBFZmZlY3RpdmVseSwgdGhpcyBnaXZlcyB1cyB0cnktY2F0Y2ggYmVoYXZpb3Igd2l0aG91dCBhY3R1YWxseSB1c2luZ1xuICAvLyB0cnktY2F0Y2guIE5lYXQhXG4gIC8vIENoZWNrIHRoYXQgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhlIEFQSXMgd2UgbmVlZCB0byBpbXBsZW1lbnQgb3VyIHNwZWNpYWxcbiAgLy8gREVWIHZlcnNpb24gb2YgaW52b2tlR3VhcmRlZENhbGxiYWNrXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZmFrZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdyZWFjdCcpO1xuXG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCA9IGZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0RldihuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAvLyBJZiBkb2N1bWVudCBkb2Vzbid0IGV4aXN0IHdlIGtub3cgZm9yIHN1cmUgd2Ugd2lsbCBjcmFzaCBpbiB0aGlzIG1ldGhvZFxuICAgICAgLy8gd2hlbiB3ZSBjYWxsIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCkuIEhvd2V2ZXIgdGhpcyBjYW4gY2F1c2UgY29uZnVzaW5nXG4gICAgICAvLyBlcnJvcnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9va2luY3ViYXRvci9jcmVhdGUtcmVhY3QtYXBwL2lzc3Vlcy8zNDgyXG4gICAgICAvLyBTbyB3ZSBwcmVlbXB0aXZlbHkgdGhyb3cgd2l0aCBhIGJldHRlciBtZXNzYWdlIGluc3RlYWQuXG4gICAgICBpZiAoISh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIGBkb2N1bWVudGAgZ2xvYmFsIHdhcyBkZWZpbmVkIHdoZW4gUmVhY3Qgd2FzIGluaXRpYWxpemVkLCBidXQgaXMgbm90IGRlZmluZWQgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIGluIGEgdGVzdCBlbnZpcm9ubWVudCBpZiBhIGNvbXBvbmVudCBzY2hlZHVsZXMgYW4gdXBkYXRlIGZyb20gYW4gYXN5bmNocm9ub3VzIGNhbGxiYWNrLCBidXQgdGhlIHRlc3QgaGFzIGFscmVhZHkgZmluaXNoZWQgcnVubmluZy4gVG8gc29sdmUgdGhpcywgeW91IGNhbiBlaXRoZXIgdW5tb3VudCB0aGUgY29tcG9uZW50IGF0IHRoZSBlbmQgb2YgeW91ciB0ZXN0IChhbmQgZW5zdXJlIHRoYXQgYW55IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGdldCBjYW5jZWxlZCBpbiBgY29tcG9uZW50V2lsbFVubW91bnRgKSwgb3IgeW91IGNhbiBjaGFuZ2UgdGhlIHRlc3QgaXRzZWxmIHRvIGJlIGFzeW5jaHJvbm91cy5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgIHZhciBkaWRDYWxsID0gZmFsc2U7IC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2sgdGhyZXcgYW4gZXJyb3IuIFdlXG4gICAgICAvLyBzZXQgdGhpcyB0byB0cnVlIGF0IHRoZSBiZWdpbm5pbmcsIHRoZW4gc2V0IGl0IHRvIGZhbHNlIHJpZ2h0IGFmdGVyXG4gICAgICAvLyBjYWxsaW5nIHRoZSBmdW5jdGlvbi4gSWYgdGhlIGZ1bmN0aW9uIGVycm9ycywgYGRpZEVycm9yYCB3aWxsIG5ldmVyIGJlXG4gICAgICAvLyBzZXQgdG8gZmFsc2UuIFRoaXMgc3RyYXRlZ3kgd29ya3MgZXZlbiBpZiB0aGUgYnJvd3NlciBpcyBmbGFreSBhbmRcbiAgICAgIC8vIGZhaWxzIHRvIGNhbGwgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLCBiZWNhdXNlIGl0IGRvZXNuJ3QgcmVseSBvblxuICAgICAgLy8gdGhlIGVycm9yIGV2ZW50IGF0IGFsbC5cblxuICAgICAgdmFyIGRpZEVycm9yID0gdHJ1ZTsgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIHZhbHVlIG9mIHdpbmRvdy5ldmVudCBzbyB0aGF0IHdlIGNhbiByZXNldCBpdFxuICAgICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjayB0byBsZXQgdXNlciBjb2RlIGFjY2VzcyB3aW5kb3cuZXZlbnQgaW4gdGhlXG4gICAgICAvLyBicm93c2VycyB0aGF0IHN1cHBvcnQgaXQuXG5cbiAgICAgIHZhciB3aW5kb3dFdmVudCA9IHdpbmRvdy5ldmVudDsgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIGRlc2NyaXB0b3Igb2Ygd2luZG93LmV2ZW50IHRvIHJlc3RvcmUgaXQgYWZ0ZXIgZXZlbnRcbiAgICAgIC8vIGRpc3BhdGNoaW5nOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjg4XG5cbiAgICAgIHZhciB3aW5kb3dFdmVudERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ2V2ZW50Jyk7XG5cbiAgICAgIGZ1bmN0aW9uIHJlc3RvcmVBZnRlckRpc3BhdGNoKCkge1xuICAgICAgICAvLyBXZSBpbW1lZGlhdGVseSByZW1vdmUgdGhlIGNhbGxiYWNrIGZyb20gZXZlbnQgbGlzdGVuZXJzIHNvIHRoYXRcbiAgICAgICAgLy8gbmVzdGVkIGBpbnZva2VHdWFyZGVkQ2FsbGJhY2tgIGNhbGxzIGRvIG5vdCBjbGFzaC4gT3RoZXJ3aXNlLCBhXG4gICAgICAgIC8vIG5lc3RlZCBjYWxsIHdvdWxkIHRyaWdnZXIgdGhlIGZha2UgZXZlbnQgaGFuZGxlcnMgb2YgYW55IGNhbGwgaGlnaGVyXG4gICAgICAgIC8vIGluIHRoZSBzdGFjay5cbiAgICAgICAgZmFrZU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBjYWxsQ2FsbGJhY2ssIGZhbHNlKTsgLy8gV2UgY2hlY2sgZm9yIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZXZlbnQnKSB0byBwcmV2ZW50IHRoZVxuICAgICAgICAvLyB3aW5kb3cuZXZlbnQgYXNzaWdubWVudCBpbiBib3RoIElFIDw9IDEwIGFzIHRoZXkgdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgLy8gXCJNZW1iZXIgbm90IGZvdW5kXCIgaW4gc3RyaWN0IG1vZGUsIGFuZCBpbiBGaXJlZm94IHdoaWNoIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgd2luZG93LmV2ZW50LlxuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LmV2ZW50ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2V2ZW50JykpIHtcbiAgICAgICAgICB3aW5kb3cuZXZlbnQgPSB3aW5kb3dFdmVudDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBDcmVhdGUgYW4gZXZlbnQgaGFuZGxlciBmb3Igb3VyIGZha2UgZXZlbnQuIFdlIHdpbGwgc3luY2hyb25vdXNseVxuICAgICAgLy8gZGlzcGF0Y2ggb3VyIGZha2UgZXZlbnQgdXNpbmcgYGRpc3BhdGNoRXZlbnRgLiBJbnNpZGUgdGhlIGhhbmRsZXIsIHdlXG4gICAgICAvLyBjYWxsIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrLlxuXG5cbiAgICAgIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgICAgIGZ1bmN0aW9uIGNhbGxDYWxsYmFjaygpIHtcbiAgICAgICAgZGlkQ2FsbCA9IHRydWU7XG4gICAgICAgIHJlc3RvcmVBZnRlckRpc3BhdGNoKCk7XG4gICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICAgICAgICBkaWRFcnJvciA9IGZhbHNlO1xuICAgICAgfSAvLyBDcmVhdGUgYSBnbG9iYWwgZXJyb3IgZXZlbnQgaGFuZGxlci4gV2UgdXNlIHRoaXMgdG8gY2FwdHVyZSB0aGUgdmFsdWVcbiAgICAgIC8vIHRoYXQgd2FzIHRocm93bi4gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgZXJyb3IgaGFuZGxlciB3aWxsIGZpcmUgbW9yZVxuICAgICAgLy8gdGhhbiBvbmNlOyBmb3IgZXhhbXBsZSwgaWYgbm9uLVJlYWN0IGNvZGUgYWxzbyBjYWxscyBgZGlzcGF0Y2hFdmVudGBcbiAgICAgIC8vIGFuZCBhIGhhbmRsZXIgZm9yIHRoYXQgZXZlbnQgdGhyb3dzLiBXZSBzaG91bGQgYmUgcmVzaWxpZW50IHRvIG1vc3Qgb2ZcbiAgICAgIC8vIHRob3NlIGNhc2VzLiBFdmVuIGlmIG91ciBlcnJvciBldmVudCBoYW5kbGVyIGZpcmVzIG1vcmUgdGhhbiBvbmNlLCB0aGVcbiAgICAgIC8vIGxhc3QgZXJyb3IgZXZlbnQgaXMgYWx3YXlzIHVzZWQuIElmIHRoZSBjYWxsYmFjayBhY3R1YWxseSBkb2VzIGVycm9yLFxuICAgICAgLy8gd2Uga25vdyB0aGF0IHRoZSBsYXN0IGVycm9yIGV2ZW50IGlzIHRoZSBjb3JyZWN0IG9uZSwgYmVjYXVzZSBpdCdzIG5vdFxuICAgICAgLy8gcG9zc2libGUgZm9yIGFueXRoaW5nIGVsc2UgdG8gaGF2ZSBoYXBwZW5lZCBpbiBiZXR3ZWVuIG91ciBjYWxsYmFja1xuICAgICAgLy8gZXJyb3JpbmcgYW5kIHRoZSBjb2RlIHRoYXQgZm9sbG93cyB0aGUgYGRpc3BhdGNoRXZlbnRgIGNhbGwgYmVsb3cuIElmXG4gICAgICAvLyB0aGUgY2FsbGJhY2sgZG9lc24ndCBlcnJvciwgYnV0IHRoZSBlcnJvciBldmVudCB3YXMgZmlyZWQsIHdlIGtub3cgdG9cbiAgICAgIC8vIGlnbm9yZSBpdCBiZWNhdXNlIGBkaWRFcnJvcmAgd2lsbCBiZSBmYWxzZSwgYXMgZGVzY3JpYmVkIGFib3ZlLlxuXG5cbiAgICAgIHZhciBlcnJvcjsgLy8gVXNlIHRoaXMgdG8gdHJhY2sgd2hldGhlciB0aGUgZXJyb3IgZXZlbnQgaXMgZXZlciBjYWxsZWQuXG5cbiAgICAgIHZhciBkaWRTZXRFcnJvciA9IGZhbHNlO1xuICAgICAgdmFyIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IGZhbHNlO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVXaW5kb3dFcnJvcihldmVudCkge1xuICAgICAgICBlcnJvciA9IGV2ZW50LmVycm9yO1xuICAgICAgICBkaWRTZXRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVycm9yID09PSBudWxsICYmIGV2ZW50LmNvbG5vID09PSAwICYmIGV2ZW50LmxpbmVubyA9PT0gMCkge1xuICAgICAgICAgIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgIC8vIFNvbWUgb3RoZXIgZXJyb3IgaGFuZGxlciBoYXMgcHJldmVudGVkIGRlZmF1bHQuXG4gICAgICAgICAgLy8gQnJvd3NlcnMgc2lsZW5jZSB0aGUgZXJyb3IgcmVwb3J0IGlmIHRoaXMgaGFwcGVucy5cbiAgICAgICAgICAvLyBXZSdsbCByZW1lbWJlciB0aGlzIHRvIGxhdGVyIGRlY2lkZSB3aGV0aGVyIHRvIGxvZyBpdCBvciBub3QuXG4gICAgICAgICAgaWYgKGVycm9yICE9IG51bGwgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZXJyb3IuX3N1cHByZXNzTG9nZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoIChpbm5lcikgey8vIElnbm9yZS5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ3JlYXRlIGEgZmFrZSBldmVudCB0eXBlLlxuXG5cbiAgICAgIHZhciBldnRUeXBlID0gXCJyZWFjdC1cIiArIChuYW1lID8gbmFtZSA6ICdpbnZva2VndWFyZGVkY2FsbGJhY2snKTsgLy8gQXR0YWNoIG91ciBldmVudCBoYW5kbGVyc1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG4gICAgICBmYWtlTm9kZS5hZGRFdmVudExpc3RlbmVyKGV2dFR5cGUsIGNhbGxDYWxsYmFjaywgZmFsc2UpOyAvLyBTeW5jaHJvbm91c2x5IGRpc3BhdGNoIG91ciBmYWtlIGV2ZW50LiBJZiB0aGUgdXNlci1wcm92aWRlZCBmdW5jdGlvblxuICAgICAgLy8gZXJyb3JzLCBpdCB3aWxsIHRyaWdnZXIgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLlxuXG4gICAgICBldnQuaW5pdEV2ZW50KGV2dFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgICBmYWtlTm9kZS5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cbiAgICAgIGlmICh3aW5kb3dFdmVudERlc2NyaXB0b3IpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ2V2ZW50Jywgd2luZG93RXZlbnREZXNjcmlwdG9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpZENhbGwgJiYgZGlkRXJyb3IpIHtcbiAgICAgICAgaWYgKCFkaWRTZXRFcnJvcikge1xuICAgICAgICAgIC8vIFRoZSBjYWxsYmFjayBlcnJvcmVkLCBidXQgdGhlIGVycm9yIGV2ZW50IG5ldmVyIGZpcmVkLlxuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdBbiBlcnJvciB3YXMgdGhyb3duIGluc2lkZSBvbmUgb2YgeW91ciBjb21wb25lbnRzLCBidXQgUmVhY3QgJyArIFwiZG9lc24ndCBrbm93IHdoYXQgaXQgd2FzLiBUaGlzIGlzIGxpa2VseSBkdWUgdG8gYnJvd3NlciBcIiArICdmbGFraW5lc3MuIFJlYWN0IGRvZXMgaXRzIGJlc3QgdG8gcHJlc2VydmUgdGhlIFwiUGF1c2Ugb24gJyArICdleGNlcHRpb25zXCIgYmVoYXZpb3Igb2YgdGhlIERldlRvb2xzLCB3aGljaCByZXF1aXJlcyBzb21lICcgKyBcIkRFVi1tb2RlIG9ubHkgdHJpY2tzLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlc2UgZG9uJ3Qgd29yayBpbiBcIiArICd5b3VyIGJyb3dzZXIuIFRyeSB0cmlnZ2VyaW5nIHRoZSBlcnJvciBpbiBwcm9kdWN0aW9uIG1vZGUsICcgKyAnb3Igc3dpdGNoaW5nIHRvIGEgbW9kZXJuIGJyb3dzZXIuIElmIHlvdSBzdXNwZWN0IHRoYXQgdGhpcyBpcyAnICsgJ2FjdHVhbGx5IGFuIGlzc3VlIHdpdGggUmVhY3QsIHBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQ3Jvc3NPcmlnaW5FcnJvcikge1xuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiQSBjcm9zcy1vcmlnaW4gZXJyb3Igd2FzIHRocm93bi4gUmVhY3QgZG9lc24ndCBoYXZlIGFjY2VzcyB0byBcIiArICd0aGUgYWN0dWFsIGVycm9yIG9iamVjdCBpbiBkZXZlbG9wbWVudC4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Nyb3Nzb3JpZ2luLWVycm9yIGZvciBtb3JlIGluZm9ybWF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKTtcbiAgICAgIH0gLy8gUmVtb3ZlIG91ciBldmVudCBsaXN0ZW5lcnNcblxuXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG5cbiAgICAgIGlmICghZGlkQ2FsbCkge1xuICAgICAgICAvLyBTb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcsIGFuZCBvdXIgZXZlbnQgd2FzIG5vdCBkaXNwYXRjaGVkLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2NzM0XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY1ODVcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBwcm9kdWN0aW9uIGltcGxlbWVudGF0aW9uLlxuICAgICAgICByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpO1xuICAgICAgICByZXR1cm4gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxudmFyIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwkMSA9IGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGw7XG5cbnZhciBoYXNFcnJvciA9IGZhbHNlO1xudmFyIGNhdWdodEVycm9yID0gbnVsbDsgLy8gVXNlZCBieSBldmVudCBzeXN0ZW0gdG8gY2FwdHVyZS9yZXRocm93IHRoZSBmaXJzdCBlcnJvci5cblxudmFyIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xudmFyIHJldGhyb3dFcnJvciA9IG51bGw7XG52YXIgcmVwb3J0ZXIgPSB7XG4gIG9uRXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59O1xuLyoqXG4gKiBDYWxsIGEgZnVuY3Rpb24gd2hpbGUgZ3VhcmRpbmcgYWdhaW5zdCBlcnJvcnMgdGhhdCBoYXBwZW5zIHdpdGhpbiBpdC5cbiAqIFJldHVybnMgYW4gZXJyb3IgaWYgaXQgdGhyb3dzLCBvdGhlcndpc2UgbnVsbC5cbiAqXG4gKiBJbiBwcm9kdWN0aW9uLCB0aGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgdHJ5LWNhdGNoLiBUaGUgcmVhc29uIHdlIGRvbid0XG4gKiB1c2UgYSB0cnktY2F0Y2ggZGlyZWN0bHkgaXMgc28gdGhhdCB3ZSBjYW4gc3dhcCBvdXQgYSBkaWZmZXJlbnRcbiAqIGltcGxlbWVudGF0aW9uIGluIERFViBtb2RlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHRoZSBndWFyZCB0byB1c2UgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2VcbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50cyBmb3IgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBoYXNFcnJvciA9IGZhbHNlO1xuICBjYXVnaHRFcnJvciA9IG51bGw7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwkMS5hcHBseShyZXBvcnRlciwgYXJndW1lbnRzKTtcbn1cbi8qKlxuICogU2FtZSBhcyBpbnZva2VHdWFyZGVkQ2FsbGJhY2ssIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvciwgaXQgc3RvcmVzXG4gKiBpdCBpbiBhIGdsb2JhbCBzbyBpdCBjYW4gYmUgcmV0aHJvd24gYnkgYHJldGhyb3dDYXVnaHRFcnJvcmAgbGF0ZXIuXG4gKiBUT0RPOiBTZWUgaWYgY2F1Z2h0RXJyb3IgYW5kIHJldGhyb3dFcnJvciBjYW4gYmUgdW5pZmllZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgaWYgKGhhc0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgaWYgKCFoYXNSZXRocm93RXJyb3IpIHtcbiAgICAgIGhhc1JldGhyb3dFcnJvciA9IHRydWU7XG4gICAgICByZXRocm93RXJyb3IgPSBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRHVyaW5nIGV4ZWN1dGlvbiBvZiBndWFyZGVkIGZ1bmN0aW9ucyB3ZSB3aWxsIGNhcHR1cmUgdGhlIGZpcnN0IGVycm9yIHdoaWNoXG4gKiB3ZSB3aWxsIHJldGhyb3cgdG8gYmUgaGFuZGxlZCBieSB0aGUgdG9wIGxldmVsIGVycm9yIGhhbmRsZXIuXG4gKi9cblxuZnVuY3Rpb24gcmV0aHJvd0NhdWdodEVycm9yKCkge1xuICBpZiAoaGFzUmV0aHJvd0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gcmV0aHJvd0Vycm9yO1xuICAgIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xuICAgIHJldGhyb3dFcnJvciA9IG51bGw7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbmZ1bmN0aW9uIGhhc0NhdWdodEVycm9yKCkge1xuICByZXR1cm4gaGFzRXJyb3I7XG59XG5mdW5jdGlvbiBjbGVhckNhdWdodEVycm9yKCkge1xuICBpZiAoaGFzRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBjYXVnaHRFcnJvcjtcbiAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJjbGVhckNhdWdodEVycm9yIHdhcyBjYWxsZWQgYnV0IG5vIGVycm9yIHdhcyBjYXB0dXJlZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGBSZWFjdEluc3RhbmNlTWFwYCBtYWludGFpbnMgYSBtYXBwaW5nIGZyb20gYSBwdWJsaWMgZmFjaW5nIHN0YXRlZnVsXG4gKiBpbnN0YW5jZSAoa2V5KSBhbmQgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uICh2YWx1ZSkuIFRoaXMgYWxsb3dzIHB1YmxpY1xuICogbWV0aG9kcyB0byBhY2NlcHQgdGhlIHVzZXIgZmFjaW5nIGluc3RhbmNlIGFzIGFuIGFyZ3VtZW50IGFuZCBtYXAgdGhlbSBiYWNrXG4gKiB0byBpbnRlcm5hbCBtZXRob2RzLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIG1vZHVsZSBpcyBjdXJyZW50bHkgc2hhcmVkIGFuZCBhc3N1bWVkIHRvIGJlIHN0YXRlbGVzcy5cbiAqIElmIHRoaXMgYmVjb21lcyBhbiBhY3R1YWwgTWFwLCB0aGF0IHdpbGwgYnJlYWsuXG4gKi9cbmZ1bmN0aW9uIGdldChrZXkpIHtcbiAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbHM7XG59XG5mdW5jdGlvbiBoYXMoa2V5KSB7XG4gIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxzICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICBrZXkuX3JlYWN0SW50ZXJuYWxzID0gdmFsdWU7XG59XG5cbi8vIERvbid0IGNoYW5nZSB0aGVzZSB0d28gdmFsdWVzLiBUaGV5J3JlIHVzZWQgYnkgUmVhY3QgRGV2IFRvb2xzLlxudmFyIE5vRmxhZ3MgPVxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgUGVyZm9ybWVkV29yayA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMTsgLy8gWW91IGNhbiBjaGFuZ2UgdGhlIHJlc3QgKGFuZCBhZGQgbW9yZSkuXG5cbnZhciBQbGFjZW1lbnQgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4yO1xudmFyIFVwZGF0ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjQ7XG52YXIgUGxhY2VtZW50QW5kVXBkYXRlID1cbi8qICAgICAgICAgICAqL1xuNjtcbnZhciBEZWxldGlvbiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG44O1xudmFyIENvbnRlbnRSZXNldCA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjE2O1xudmFyIENhbGxiYWNrID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIERpZENhcHR1cmUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjY0O1xudmFyIFJlZiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjEyODtcbnZhciBTbmFwc2hvdCA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4yNTY7XG52YXIgUGFzc2l2ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuNTEyOyAvLyBUT0RPIChlZmZlY3RzKSBSZW1vdmUgdGhpcyBiaXQgb25jZSB0aGUgbmV3IHJlY29uY2lsZXIgaXMgc3luY2VkIHRvIHRoZSBvbGQuXG5cbnZhciBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXYgPVxuLyogICAgICovXG44MTkyO1xudmFyIEh5ZHJhdGluZyA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjEwMjQ7XG52YXIgSHlkcmF0aW5nQW5kVXBkYXRlID1cbi8qICAgICAgICAgICAqL1xuMTAyODsgLy8gUGFzc2l2ZSAmIFVwZGF0ZSAmIENhbGxiYWNrICYgUmVmICYgU25hcHNob3RcblxudmFyIExpZmVjeWNsZUVmZmVjdE1hc2sgPVxuLyogICAgICAgICAgKi9cbjkzMjsgLy8gVW5pb24gb2YgYWxsIGhvc3QgZWZmZWN0c1xuXG52YXIgSG9zdEVmZmVjdE1hc2sgPVxuLyogICAgICAgICAgICAgICAqL1xuMjA0NzsgLy8gVGhlc2UgYXJlIG5vdCByZWFsbHkgc2lkZSBlZmZlY3RzLCBidXQgd2Ugc3RpbGwgcmV1c2UgdGhpcyBmaWVsZC5cblxudmFyIEluY29tcGxldGUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjIwNDg7XG52YXIgU2hvdWxkQ2FwdHVyZSA9XG4vKiAgICAgICAgICAgICAgICAqL1xuNDA5NjtcbnZhciBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlID1cbi8qICovXG4xNjM4NDsgLy8gU3RhdGljIHRhZ3MgZGVzY3JpYmUgYXNwZWN0cyBvZiBhIGZpYmVyIHRoYXQgYXJlIG5vdCBzcGVjaWZpYyB0byBhIHJlbmRlcixcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG5mdW5jdGlvbiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSB7XG4gIHZhciBub2RlID0gZmliZXI7XG4gIHZhciBuZWFyZXN0TW91bnRlZCA9IGZpYmVyO1xuXG4gIGlmICghZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGlzIG1pZ2h0IGJlIGEgbmV3IHRyZWUgdGhhdCBpc24ndCBpbnNlcnRlZFxuICAgIC8vIHlldC4gSWYgaXQgaXMsIHRoZW4gaXQgd2lsbCBoYXZlIGEgcGVuZGluZyBpbnNlcnRpb24gZWZmZWN0IG9uIGl0LlxuICAgIHZhciBuZXh0Tm9kZSA9IG5vZGU7XG5cbiAgICBkbyB7XG4gICAgICBub2RlID0gbmV4dE5vZGU7XG5cbiAgICAgIGlmICgobm9kZS5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIGluc2VydGlvbiBvciBpbi1wcm9ncmVzcyBoeWRyYXRpb24uIFRoZSBuZWFyZXN0IHBvc3NpYmxlXG4gICAgICAgIC8vIG1vdW50ZWQgZmliZXIgaXMgdGhlIHBhcmVudCBidXQgd2UgbmVlZCB0byBjb250aW51ZSB0byBmaWd1cmUgb3V0XG4gICAgICAgIC8vIGlmIHRoYXQgb25lIGlzIHN0aWxsIG1vdW50ZWQuXG4gICAgICAgIG5lYXJlc3RNb3VudGVkID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5leHROb2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobmV4dE5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChub2RlLnJldHVybikge1xuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChub2RlLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGlzIHdhcyBhIG5lc3RlZCBIb3N0Um9vdCB3aGVuIHVzZWQgd2l0aFxuICAgIC8vIHJlbmRlckNvbnRhaW5lckludG9TdWJ0cmVlLlxuICAgIHJldHVybiBuZWFyZXN0TW91bnRlZDtcbiAgfSAvLyBJZiB3ZSBkaWRuJ3QgaGl0IHRoZSByb290LCB0aGF0IG1lYW5zIHRoYXQgd2UncmUgaW4gYW4gZGlzY29ubmVjdGVkIHRyZWVcbiAgLy8gdGhhdCBoYXMgYmVlbiB1bm1vdW50ZWQuXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHN1c3BlbnNlU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRDb250YWluZXJGcm9tRmliZXIoZmliZXIpIHtcbiAgcmV0dXJuIGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QgPyBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA6IG51bGw7XG59XG5mdW5jdGlvbiBpc0ZpYmVyTW91bnRlZChmaWJlcikge1xuICByZXR1cm4gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyO1xufVxuZnVuY3Rpb24gaXNNb3VudGVkKGNvbXBvbmVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuICAgICAgdmFyIGluc3RhbmNlID0gb3duZXJGaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmICghaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyKSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBhY2Nlc3NpbmcgaXNNb3VudGVkIGluc2lkZSBpdHMgcmVuZGVyKCkgZnVuY3Rpb24uICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKG93bmVyRmliZXIudHlwZSkgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gZ2V0KGNvbXBvbmVudCk7XG5cbiAgaWYgKCFmaWJlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGFzc2VydElzTW91bnRlZChmaWJlcikge1xuICBpZiAoIShnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKGZpYmVyKSB7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKCFhbHRlcm5hdGUpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUsIHRoZW4gd2Ugb25seSBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIG1vdW50ZWQuXG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcik7XG5cbiAgICBpZiAoIShuZWFyZXN0TW91bnRlZCAhPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBmaWJlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIElmIHdlIGhhdmUgdHdvIHBvc3NpYmxlIGJyYW5jaGVzLCB3ZSdsbCB3YWxrIGJhY2t3YXJkcyB1cCB0byB0aGUgcm9vdFxuICAvLyB0byBzZWUgd2hhdCBwYXRoIHRoZSByb290IHBvaW50cyB0by4gT24gdGhlIHdheSB3ZSBtYXkgaGl0IG9uZSBvZiB0aGVcbiAgLy8gc3BlY2lhbCBjYXNlcyBhbmQgd2UnbGwgZGVhbCB3aXRoIHRoZW0uXG5cblxuICB2YXIgYSA9IGZpYmVyO1xuICB2YXIgYiA9IGFsdGVybmF0ZTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBwYXJlbnRBID0gYS5yZXR1cm47XG5cbiAgICBpZiAocGFyZW50QSA9PT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgYXQgdGhlIHJvb3QuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgcGFyZW50QiA9IHBhcmVudEEuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKHBhcmVudEIgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZXJlIGlzIG5vIGFsdGVybmF0ZS4gVGhpcyBpcyBhbiB1bnVzdWFsIGNhc2UuIEN1cnJlbnRseSwgaXQgb25seVxuICAgICAgLy8gaGFwcGVucyB3aGVuIGEgU3VzcGVuc2UgY29tcG9uZW50IGlzIGhpZGRlbi4gQW4gZXh0cmEgZnJhZ21lbnQgZmliZXJcbiAgICAgIC8vIGlzIGluc2VydGVkIGluIGJldHdlZW4gdGhlIFN1c3BlbnNlIGZpYmVyIGFuZCBpdHMgY2hpbGRyZW4uIFNraXBcbiAgICAgIC8vIG92ZXIgdGhpcyBleHRyYSBmcmFnbWVudCBmaWJlciBhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBwYXJlbnQuXG4gICAgICB2YXIgbmV4dFBhcmVudCA9IHBhcmVudEEucmV0dXJuO1xuXG4gICAgICBpZiAobmV4dFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICBhID0gYiA9IG5leHRQYXJlbnQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBJZiB0aGVyZSdzIG5vIHBhcmVudCwgd2UncmUgYXQgdGhlIHJvb3QuXG5cblxuICAgICAgYnJlYWs7XG4gICAgfSAvLyBJZiBib3RoIGNvcGllcyBvZiB0aGUgcGFyZW50IGZpYmVyIHBvaW50IHRvIHRoZSBzYW1lIGNoaWxkLCB3ZSBjYW5cbiAgICAvLyBhc3N1bWUgdGhhdCB0aGUgY2hpbGQgaXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW4gd2UgYmFpbG91dCBvbiBsb3dcbiAgICAvLyBwcmlvcml0eTogdGhlIGJhaWxlZCBvdXQgZmliZXIncyBjaGlsZCByZXVzZXMgdGhlIGN1cnJlbnQgY2hpbGQuXG5cblxuICAgIGlmIChwYXJlbnRBLmNoaWxkID09PSBwYXJlbnRCLmNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09PSBhKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQiBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgIHJldHVybiBhbHRlcm5hdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9IC8vIFdlIHNob3VsZCBuZXZlciBoYXZlIGFuIGFsdGVybmF0ZSBmb3IgYW55IG1vdW50aW5nIG5vZGUuIFNvIHRoZSBvbmx5XG4gICAgICAvLyB3YXkgdGhpcyBjb3VsZCBwb3NzaWJseSBoYXBwZW4gaXMgaWYgdGhpcyB3YXMgdW5tb3VudGVkLCBpZiBhdCBhbGwuXG5cblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYS5yZXR1cm4gIT09IGIucmV0dXJuKSB7XG4gICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXIgb2YgQSBhbmQgdGhlIHJldHVybiBwb2ludGVyIG9mIEIgcG9pbnQgdG8gZGlmZmVyZW50XG4gICAgICAvLyBmaWJlcnMuIFdlIGFzc3VtZSB0aGF0IHJldHVybiBwb2ludGVycyBuZXZlciBjcmlzcy1jcm9zcywgc28gQSBtdXN0XG4gICAgICAvLyBiZWxvbmcgdG8gdGhlIGNoaWxkIHNldCBvZiBBLnJldHVybiwgYW5kIEIgbXVzdCBiZWxvbmcgdG8gdGhlIGNoaWxkXG4gICAgICAvLyBzZXQgb2YgQi5yZXR1cm4uXG4gICAgICBhID0gcGFyZW50QTtcbiAgICAgIGIgPSBwYXJlbnRCO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXJzIHBvaW50IHRvIHRoZSBzYW1lIGZpYmVyLiBXZSdsbCBoYXZlIHRvIHVzZSB0aGVcbiAgICAgIC8vIGRlZmF1bHQsIHNsb3cgcGF0aDogc2NhbiB0aGUgY2hpbGQgc2V0cyBvZiBlYWNoIHBhcmVudCBhbHRlcm5hdGUgdG8gc2VlXG4gICAgICAvLyB3aGljaCBjaGlsZCBiZWxvbmdzIHRvIHdoaWNoIHNldC5cbiAgICAgIC8vXG4gICAgICAvLyBTZWFyY2ggcGFyZW50IEEncyBjaGlsZCBzZXRcbiAgICAgIHZhciBkaWRGaW5kQ2hpbGQgPSBmYWxzZTtcbiAgICAgIHZhciBfY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoX2NoaWxkKSB7XG4gICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgIH1cblxuICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgLy8gU2VhcmNoIHBhcmVudCBCJ3MgY2hpbGQgc2V0XG4gICAgICAgIF9jaGlsZCA9IHBhcmVudEIuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2hpbGQgd2FzIG5vdCBmb3VuZCBpbiBlaXRoZXIgcGFyZW50IHNldC4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHBvaW50ZXIuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEoYS5hbHRlcm5hdGUgPT09IGIpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJldHVybiBmaWJlcnMgc2hvdWxkIGFsd2F5cyBiZSBlYWNoIG90aGVycycgYWx0ZXJuYXRlcy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBJZiB0aGUgcm9vdCBpcyBub3QgYSBob3N0IGNvbnRhaW5lciwgd2UncmUgaW4gYSBkaXNjb25uZWN0ZWQgdHJlZS4gSS5lLlxuICAvLyB1bm1vdW50ZWQuXG5cblxuICBpZiAoIShhLnRhZyA9PT0gSG9zdFJvb3QpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGEuc3RhdGVOb2RlLmN1cnJlbnQgPT09IGEpIHtcbiAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIE90aGVyd2lzZSBCIGhhcyB0byBiZSBjdXJyZW50IGJyYW5jaC5cblxuXG4gIHJldHVybiBhbHRlcm5hdGU7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcihwYXJlbnQpIHtcbiAgdmFyIGN1cnJlbnRQYXJlbnQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChwYXJlbnQpO1xuXG4gIGlmICghY3VycmVudFBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE5leHQgd2UnbGwgZHJpbGwgZG93biB0aGlzIGNvbXBvbmVudCB0byBmaW5kIHRoZSBmaXJzdCBIb3N0Q29tcG9uZW50L1RleHQuXG5cblxuICB2YXIgbm9kZSA9IGN1cnJlbnRQYXJlbnQ7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlICghbm9kZS5zaWJsaW5nKSB7XG4gICAgICBpZiAoIW5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH0gLy8gRmxvdyBuZWVkcyB0aGUgcmV0dXJuIG51bGwgaGVyZSwgYnV0IEVTTGludCBjb21wbGFpbnMgYWJvdXQgaXQuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnJlYWNoYWJsZVxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcldpdGhOb1BvcnRhbHMocGFyZW50KSB7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcblxuICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuXG5cbiAgdmFyIG5vZGUgPSBjdXJyZW50UGFyZW50O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCB8fCBlbmFibGVGdW5kYW1lbnRhbEFQSSApIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAmJiBub2RlLnRhZyAhPT0gSG9zdFBvcnRhbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKCFub2RlLnNpYmxpbmcpIHtcbiAgICAgIGlmICghbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfSAvLyBGbG93IG5lZWRzIHRoZSByZXR1cm4gbnVsbCBoZXJlLCBidXQgRVNMaW50IGNvbXBsYWlucyBhYm91dCBpdC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVucmVhY2hhYmxlXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGRvZXNGaWJlckNvbnRhaW4ocGFyZW50RmliZXIsIGNoaWxkRmliZXIpIHtcbiAgdmFyIG5vZGUgPSBjaGlsZEZpYmVyO1xuICB2YXIgcGFyZW50RmliZXJBbHRlcm5hdGUgPSBwYXJlbnRGaWJlci5hbHRlcm5hdGU7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZSA9PT0gcGFyZW50RmliZXIgfHwgbm9kZSA9PT0gcGFyZW50RmliZXJBbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb247XG5mdW5jdGlvbiBzZXRBdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKGZuKSB7XG4gIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24gPSBmbjtcbn1cbnZhciBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbjtcbmZ1bmN0aW9uIHNldEF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKGZuKSB7XG4gIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uID0gZm47XG59XG52YXIgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5O1xuZnVuY3Rpb24gc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KGZuKSB7XG4gIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSA9IGZuO1xufVxudmFyIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5O1xuZnVuY3Rpb24gc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkoZm4pIHtcbiAgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkgPSBmbjtcbn0gLy8gVE9ETzogVXBncmFkZSB0aGlzIGRlZmluaXRpb24gb25jZSB3ZSdyZSBvbiBhIG5ld2VyIHZlcnNpb24gb2YgRmxvdyB0aGF0XG52YXIgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IGZhbHNlOyAvLyBUaGUgcXVldWUgb2YgZGlzY3JldGUgZXZlbnRzIHRvIGJlIHJlcGxheWVkLlxuXG52YXIgcXVldWVkRGlzY3JldGVFdmVudHMgPSBbXTsgLy8gSW5kaWNhdGVzIGlmIGFueSBjb250aW51b3VzIGV2ZW50IHRhcmdldHMgYXJlIG5vbi1udWxsIGZvciBlYXJseSBiYWlsb3V0LlxuLy8gaWYgdGhlIGxhc3QgdGFyZ2V0IHdhcyBkZWh5ZHJhdGVkLlxuXG52YXIgcXVldWVkRm9jdXMgPSBudWxsO1xudmFyIHF1ZXVlZERyYWcgPSBudWxsO1xudmFyIHF1ZXVlZE1vdXNlID0gbnVsbDsgLy8gRm9yIHBvaW50ZXIgZXZlbnRzIHRoZXJlIGNhbiBiZSBvbmUgbGF0ZXN0IGV2ZW50IHBlciBwb2ludGVySWQuXG5cbnZhciBxdWV1ZWRQb2ludGVycyA9IG5ldyBNYXAoKTtcbnZhciBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMgPSBuZXcgTWFwKCk7IC8vIFdlIGNvdWxkIGNvbnNpZGVyIHJlcGxheWluZyBzZWxlY3Rpb25jaGFuZ2UgYW5kIHRvdWNobW92ZXMgdG9vLlxuXG52YXIgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzID0gW107XG5mdW5jdGlvbiBoYXNRdWV1ZWREaXNjcmV0ZUV2ZW50cygpIHtcbiAgcmV0dXJuIHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDA7XG59XG52YXIgZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzID0gWydtb3VzZWRvd24nLCAnbW91c2V1cCcsICd0b3VjaGNhbmNlbCcsICd0b3VjaGVuZCcsICd0b3VjaHN0YXJ0JywgJ2F1eGNsaWNrJywgJ2RibGNsaWNrJywgJ3BvaW50ZXJjYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlcnVwJywgJ2RyYWdlbmQnLCAnZHJhZ3N0YXJ0JywgJ2Ryb3AnLCAnY29tcG9zaXRpb25lbmQnLCAnY29tcG9zaXRpb25zdGFydCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ2lucHV0JywgJ3RleHRJbnB1dCcsIC8vIEludGVudGlvbmFsbHkgY2FtZWxDYXNlXG4nY29weScsICdjdXQnLCAncGFzdGUnLCAnY2xpY2snLCAnY2hhbmdlJywgJ2NvbnRleHRtZW51JywgJ3Jlc2V0JywgJ3N1Ym1pdCddO1xuZnVuY3Rpb24gaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChldmVudFR5cGUpIHtcbiAgcmV0dXJuIGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cy5pbmRleE9mKGV2ZW50VHlwZSkgPiAtMTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgYmxvY2tlZE9uOiBibG9ja2VkT24sXG4gICAgZG9tRXZlbnROYW1lOiBkb21FdmVudE5hbWUsXG4gICAgZXZlbnRTeXN0ZW1GbGFnczogZXZlbnRTeXN0ZW1GbGFncyB8IElTX1JFUExBWUVELFxuICAgIG5hdGl2ZUV2ZW50OiBuYXRpdmVFdmVudCxcbiAgICB0YXJnZXRDb250YWluZXJzOiBbdGFyZ2V0Q29udGFpbmVyXVxuICB9O1xufVxuXG5mdW5jdGlvbiBxdWV1ZURpc2NyZXRlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgdmFyIHF1ZXVlZEV2ZW50ID0gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgcXVldWVkRGlzY3JldGVFdmVudHMucHVzaChxdWV1ZWRFdmVudCk7XG59IC8vIFJlc2V0cyB0aGUgcmVwbGF5aW5nIGZvciB0aGlzIHR5cGUgb2YgY29udGludW91cyBldmVudCB0byBubyBldmVudC5cblxuZnVuY3Rpb24gY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgcXVldWVkRm9jdXMgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgIGNhc2UgJ2RyYWdsZWF2ZSc6XG4gICAgICBxdWV1ZWREcmFnID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICBjYXNlICdwb2ludGVyb3V0JzpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlcnMuZGVsZXRlKHBvaW50ZXJJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ2xvc3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgICB7XG4gICAgICAgIHZhciBfcG9pbnRlcklkID0gbmF0aXZlRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZGVsZXRlKF9wb2ludGVySWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KGV4aXN0aW5nUXVldWVkRXZlbnQsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChleGlzdGluZ1F1ZXVlZEV2ZW50ID09PSBudWxsIHx8IGV4aXN0aW5nUXVldWVkRXZlbnQubmF0aXZlRXZlbnQgIT09IG5hdGl2ZUV2ZW50KSB7XG4gICAgdmFyIHF1ZXVlZEV2ZW50ID0gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcblxuICAgIGlmIChibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIHZhciBfZmliZXIyID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShibG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICAvLyBBdHRlbXB0IHRvIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZiB0aGlzIHRhcmdldC5cbiAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oX2ZpYmVyMik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXVlZEV2ZW50O1xuICB9IC8vIElmIHdlIGhhdmUgYWxyZWFkeSBxdWV1ZWQgdGhpcyBleGFjdCBldmVudCwgdGhlbiBpdCdzIGJlY2F1c2VcbiAgLy8gdGhlIGRpZmZlcmVudCBldmVudCBzeXN0ZW1zIGhhdmUgZGlmZmVyZW50IERPTSBldmVudCBsaXN0ZW5lcnMuXG4gIC8vIFdlIGNhbiBhY2N1bXVsYXRlIHRoZSBmbGFncywgYW5kIHRoZSB0YXJnZXRDb250YWluZXJzLCBhbmRcbiAgLy8gc3RvcmUgYSBzaW5nbGUgZXZlbnQgdG8gYmUgcmVwbGF5ZWQuXG5cblxuICBleGlzdGluZ1F1ZXVlZEV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MgfD0gZXZlbnRTeXN0ZW1GbGFncztcbiAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBleGlzdGluZ1F1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgaWYgKHRhcmdldENvbnRhaW5lciAhPT0gbnVsbCAmJiB0YXJnZXRDb250YWluZXJzLmluZGV4T2YodGFyZ2V0Q29udGFpbmVyKSA9PT0gLTEpIHtcbiAgICB0YXJnZXRDb250YWluZXJzLnB1c2godGFyZ2V0Q29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBleGlzdGluZ1F1ZXVlZEV2ZW50O1xufVxuXG5mdW5jdGlvbiBxdWV1ZUlmQ29udGludW91c0V2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIFRoZXNlIHNldCByZWxhdGVkVGFyZ2V0IHRvIG51bGwgYmVjYXVzZSB0aGUgcmVwbGF5ZWQgZXZlbnQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIHdlXG4gIC8vIG1vdmVkIGZyb20gb3V0c2lkZSB0aGUgd2luZG93IChubyB0YXJnZXQpIG9udG8gdGhlIHRhcmdldCBvbmNlIGl0IGh5ZHJhdGVzLlxuICAvLyBJbnN0ZWFkIG9mIG11dGF0aW5nIHdlIGNvdWxkIGNsb25lIHRoZSBldmVudC5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGZvY3VzRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkRm9jdXMgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZEZvY3VzLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBmb2N1c0V2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgZHJhZ0V2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHF1ZXVlZERyYWcgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZERyYWcsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIGRyYWdFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIG1vdXNlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkTW91c2UgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZE1vdXNlLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBtb3VzZUV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBwb2ludGVyRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgdmFyIHBvaW50ZXJJZCA9IHBvaW50ZXJFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJzLnNldChwb2ludGVySWQsIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkUG9pbnRlcnMuZ2V0KHBvaW50ZXJJZCkgfHwgbnVsbCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgcG9pbnRlckV2ZW50KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgICAge1xuICAgICAgICB2YXIgX3BvaW50ZXJFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICB2YXIgX3BvaW50ZXJJZDIgPSBfcG9pbnRlckV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLnNldChfcG9pbnRlcklkMiwgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZ2V0KF9wb2ludGVySWQyKSB8fCBudWxsLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBfcG9pbnRlckV2ZW50KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBDaGVjayBpZiB0aGlzIHRhcmdldCBpcyB1bmJsb2NrZWQuIFJldHVybnMgdHJ1ZSBpZiBpdCdzIHVuYmxvY2tlZC5cblxuZnVuY3Rpb24gYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHF1ZXVlZFRhcmdldCkge1xuICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNoYXJlcyBhIGxvdCBvZiBsb2dpYyB3aXRoIGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQuXG4gIC8vIFRyeSB0byB1bmlmeSB0aGVtLiBJdCdzIGEgYml0IHRyaWNreSBzaW5jZSBpdCB3b3VsZCByZXF1aXJlIHR3byByZXR1cm5cbiAgLy8gdmFsdWVzLlxuICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHF1ZXVlZFRhcmdldC50YXJnZXQpO1xuXG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcblxuICAgICAgaWYgKHRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UncmUgYmxvY2tlZCBvbiBoeWRyYXRpbmcgdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICAvLyBJbmNyZWFzZSBpdHMgcHJpb3JpdHkuXG4gICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IGluc3RhbmNlO1xuICAgICAgICAgIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5KHF1ZXVlZFRhcmdldC5sYW5lUHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkocXVldWVkVGFyZ2V0LnByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IGdldENvbnRhaW5lckZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7IC8vIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgd2F5IHRvIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZlxuICAgICAgICAgIC8vIGEgcm9vdCBvdGhlciB0aGFuIHN5bmMuXG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkge1xuICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBxdWV1ZWRFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gIHdoaWxlICh0YXJnZXRDb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGFyZ2V0Q29udGFpbmVyc1swXTtcbiAgICB2YXIgbmV4dEJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQocXVldWVkRXZlbnQuZG9tRXZlbnROYW1lLCBxdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIHF1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50KTtcblxuICAgIGlmIChuZXh0QmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLiBUcnkgYWdhaW4gbGF0ZXIuXG4gICAgICB2YXIgX2ZpYmVyMyA9IGdldEluc3RhbmNlRnJvbU5vZGUobmV4dEJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXIzICE9PSBudWxsKSB7XG4gICAgICAgIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKF9maWJlcjMpO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gVGhpcyB0YXJnZXQgY29udGFpbmVyIHdhcyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4gVHJ5IHRoZSBuZXh0LlxuXG5cbiAgICB0YXJnZXRDb250YWluZXJzLnNoaWZ0KCk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKHF1ZXVlZEV2ZW50LCBrZXksIG1hcCkge1xuICBpZiAoYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkpIHtcbiAgICBtYXAuZGVsZXRlKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGF5VW5ibG9ja2VkRXZlbnRzKCkge1xuICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gZmFsc2U7IC8vIEZpcnN0IHJlcGxheSBkaXNjcmV0ZSBldmVudHMuXG5cbiAgd2hpbGUgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dERpc2NyZXRlRXZlbnQgPSBxdWV1ZWREaXNjcmV0ZUV2ZW50c1swXTtcblxuICAgIGlmIChuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICAvLyBJbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhpcyBib3VuZGFyeSB0byB1bmJsb2NrXG4gICAgICAvLyB0aGUgbmV4dCBkaXNjcmV0ZSBldmVudC5cbiAgICAgIHZhciBfZmliZXI0ID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyNCAhPT0gbnVsbCkge1xuICAgICAgICBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKF9maWJlcjQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IG5leHREaXNjcmV0ZUV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgICB3aGlsZSAodGFyZ2V0Q29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGFyZ2V0Q29udGFpbmVyc1swXTtcbiAgICAgIHZhciBuZXh0QmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChuZXh0RGlzY3JldGVFdmVudC5kb21FdmVudE5hbWUsIG5leHREaXNjcmV0ZUV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmV4dERpc2NyZXRlRXZlbnQubmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAobmV4dEJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLiBUcnkgYWdhaW4gbGF0ZXIuXG4gICAgICAgIG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiA9IG5leHRCbG9ja2VkT247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBUaGlzIHRhcmdldCBjb250YWluZXIgd2FzIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkLiBUcnkgdGhlIG5leHQuXG5cblxuICAgICAgdGFyZ2V0Q29udGFpbmVycy5zaGlmdCgpO1xuICAgIH1cblxuICAgIGlmIChuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3ZlIHN1Y2Nlc3NmdWxseSByZXBsYXllZCB0aGUgZmlyc3QgZXZlbnQuIExldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgICBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5zaGlmdCgpO1xuICAgIH1cbiAgfSAvLyBOZXh0IHJlcGxheSBhbnkgY29udGludW91cyBldmVudHMuXG5cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRGb2N1cykpIHtcbiAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZERyYWcpKSB7XG4gICAgcXVldWVkRHJhZyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkTW91c2UgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRNb3VzZSkpIHtcbiAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gIH1cblxuICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKSB7XG4gIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG51bGw7XG5cbiAgICBpZiAoIWhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQpIHtcbiAgICAgIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSB0cnVlOyAvLyBTY2hlZHVsZSBhIGNhbGxiYWNrIHRvIGF0dGVtcHQgcmVwbGF5aW5nIGFzIG1hbnkgZXZlbnRzIGFzIGFyZVxuICAgICAgLy8gbm93IHVuYmxvY2tlZC4gVGhpcyBmaXJzdCBtaWdodCBub3QgYWN0dWFsbHkgYmUgdW5ibG9ja2VkIHlldC5cbiAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGl0IGVhcmx5IHRvIGF2b2lkIHNjaGVkdWxpbmcgYW4gdW5uZWNlc3NhcnkgY2FsbGJhY2suXG5cbiAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSwgcmVwbGF5VW5ibG9ja2VkRXZlbnRzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV0cnlJZkJsb2NrZWRPbih1bmJsb2NrZWQpIHtcbiAgLy8gTWFyayBhbnl0aGluZyB0aGF0IHdhcyBibG9ja2VkIG9uIHRoaXMgYXMgbm8gbG9uZ2VyIGJsb2NrZWRcbiAgLy8gYW5kIGVsaWdpYmxlIGZvciBhIHJlcGxheS5cbiAgaWYgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRGlzY3JldGVFdmVudHNbMF0sIHVuYmxvY2tlZCk7IC8vIFRoaXMgaXMgYSBleHBvbmVudGlhbCBzZWFyY2ggZm9yIGVhY2ggYm91bmRhcnkgdGhhdCBjb21taXRzLiBJIHRoaW5rIGl0J3NcbiAgICAvLyB3b3J0aCBpdCBiZWNhdXNlIHdlIGV4cGVjdCB2ZXJ5IGZldyBkaXNjcmV0ZSBldmVudHMgdG8gcXVldWUgdXAgYW5kIG9uY2VcbiAgICAvLyB3ZSBhcmUgYWN0dWFsbHkgZnVsbHkgdW5ibG9ja2VkIGl0IHdpbGwgYmUgZmFzdCB0byByZXBsYXkgdGhlbS5cblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWV1ZWRFdmVudCA9IHF1ZXVlZERpc2NyZXRlRXZlbnRzW2ldO1xuXG4gICAgICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRm9jdXMsIHVuYmxvY2tlZCk7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWREcmFnLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgaWYgKHF1ZXVlZE1vdXNlICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZE1vdXNlLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgdmFyIHVuYmxvY2sgPSBmdW5jdGlvbiAocXVldWVkRXZlbnQpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpO1xuICB9O1xuXG4gIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2godW5ibG9jayk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKHVuYmxvY2spO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIHF1ZXVlZFRhcmdldCA9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1tfaV07XG5cbiAgICBpZiAocXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB3aGlsZSAocXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dEV4cGxpY2l0VGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzWzBdO1xuXG4gICAgaWYgKG5leHRFeHBsaWNpdFRhcmdldC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KG5leHRFeHBsaWNpdFRhcmdldCk7XG5cbiAgICAgIGlmIChuZXh0RXhwbGljaXRUYXJnZXQuYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3JlIHVuYmxvY2tlZC5cbiAgICAgICAgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBEaXNjcmV0ZUV2ZW50ID0gMDtcbnZhciBVc2VyQmxvY2tpbmdFdmVudCA9IDE7XG52YXIgQ29udGludW91c0V2ZW50ID0gMjtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG1hcHBpbmcgb2Ygc3RhbmRhcmQgdmVuZG9yIHByZWZpeGVzIHVzaW5nIHRoZSBkZWZpbmVkIHN0eWxlIHByb3BlcnR5IGFuZCBldmVudCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHlsZVByb3BcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gbWFrZVByZWZpeE1hcChzdHlsZVByb3AsIGV2ZW50TmFtZSkge1xuICB2YXIgcHJlZml4ZXMgPSB7fTtcbiAgcHJlZml4ZXNbc3R5bGVQcm9wLnRvTG93ZXJDYXNlKCldID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHByZWZpeGVzWydXZWJraXQnICsgc3R5bGVQcm9wXSA9ICd3ZWJraXQnICsgZXZlbnROYW1lO1xuICBwcmVmaXhlc1snTW96JyArIHN0eWxlUHJvcF0gPSAnbW96JyArIGV2ZW50TmFtZTtcbiAgcmV0dXJuIHByZWZpeGVzO1xufVxuLyoqXG4gKiBBIGxpc3Qgb2YgZXZlbnQgbmFtZXMgdG8gYSBjb25maWd1cmFibGUgbGlzdCBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cblxuXG52YXIgdmVuZG9yUHJlZml4ZXMgPSB7XG4gIGFuaW1hdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkVuZCcpLFxuICBhbmltYXRpb25pdGVyYXRpb246IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25JdGVyYXRpb24nKSxcbiAgYW5pbWF0aW9uc3RhcnQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25TdGFydCcpLFxuICB0cmFuc2l0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdUcmFuc2l0aW9uJywgJ1RyYW5zaXRpb25FbmQnKVxufTtcbi8qKlxuICogRXZlbnQgbmFtZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBkZXRlY3RlZCBhbmQgcHJlZml4ZWQgKGlmIGFwcGxpY2FibGUpLlxuICovXG5cbnZhciBwcmVmaXhlZEV2ZW50TmFtZXMgPSB7fTtcbi8qKlxuICogRWxlbWVudCB0byBjaGVjayBmb3IgcHJlZml4ZXMgb24uXG4gKi9cblxudmFyIHN0eWxlID0ge307XG4vKipcbiAqIEJvb3RzdHJhcCBpZiBhIERPTSBleGlzdHMuXG4gKi9cblxuaWYgKGNhblVzZURPTSkge1xuICBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlOyAvLyBPbiBzb21lIHBsYXRmb3JtcywgaW4gcGFydGljdWxhciBzb21lIHJlbGVhc2VzIG9mIEFuZHJvaWQgNC54LFxuICAvLyB0aGUgdW4tcHJlZml4ZWQgXCJhbmltYXRpb25cIiBhbmQgXCJ0cmFuc2l0aW9uXCIgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGVcbiAgLy8gc3R5bGUgb2JqZWN0IGJ1dCB0aGUgZXZlbnRzIHRoYXQgZmlyZSB3aWxsIHN0aWxsIGJlIHByZWZpeGVkLCBzbyB3ZSBuZWVkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZSB1bi1wcmVmaXhlZCBldmVudHMgYXJlIHVzYWJsZSwgYW5kIGlmIG5vdCByZW1vdmUgdGhlbSBmcm9tIHRoZSBtYXAuXG5cbiAgaWYgKCEoJ0FuaW1hdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbmVuZC5hbmltYXRpb247XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb247XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbjtcbiAgfSAvLyBTYW1lIGFzIGFib3ZlXG5cblxuICBpZiAoISgnVHJhbnNpdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbjtcbiAgfVxufVxuLyoqXG4gKiBBdHRlbXB0cyB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgdmVuZG9yIHByZWZpeGVkIGV2ZW50IG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKGV2ZW50TmFtZSkge1xuICBpZiAocHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV07XG4gIH0gZWxzZSBpZiAoIXZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gZXZlbnROYW1lO1xuICB9XG5cbiAgdmFyIHByZWZpeE1hcCA9IHZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV07XG5cbiAgZm9yICh2YXIgc3R5bGVQcm9wIGluIHByZWZpeE1hcCkge1xuICAgIGlmIChwcmVmaXhNYXAuaGFzT3duUHJvcGVydHkoc3R5bGVQcm9wKSAmJiBzdHlsZVByb3AgaW4gc3R5bGUpIHtcbiAgICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSA9IHByZWZpeE1hcFtzdHlsZVByb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBldmVudE5hbWU7XG59XG5cbnZhciBBTklNQVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbmVuZCcpO1xudmFyIEFOSU1BVElPTl9JVEVSQVRJT04gPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uaXRlcmF0aW9uJyk7XG52YXIgQU5JTUFUSU9OX1NUQVJUID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbnN0YXJ0Jyk7XG52YXIgVFJBTlNJVElPTl9FTkQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgndHJhbnNpdGlvbmVuZCcpO1xuXG52YXIgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKCk7XG52YXIgZXZlbnRQcmlvcml0aWVzID0gbmV3IE1hcCgpOyAvLyBXZSBzdG9yZSBtb3N0IG9mIHRoZSBldmVudHMgaW4gdGhpcyBtb2R1bGUgaW4gcGFpcnMgb2YgdHdvIHN0cmluZ3Mgc28gd2UgY2FuIHJlLXVzZVxuLy8gdGhlIGNvZGUgcmVxdWlyZWQgdG8gYXBwbHkgdGhlIHNhbWUgbG9naWMgZm9yIGV2ZW50IHByaW9yaXRpemF0aW9uIGFuZCB0aGF0IG9mIHRoZVxuLy8gU2ltcGxlRXZlbnRQbHVnaW4uIFRoaXMgY29tcGxpY2F0ZXMgdGhpbmdzIHNsaWdodGx5LCBidXQgdGhlIGFpbSBpcyB0byByZWR1Y2UgY29kZVxuLy8gZHVwbGljYXRpb24gKGZvciB3aGljaCB0aGVyZSB3b3VsZCBiZSBxdWl0ZSBhIGJpdCkuIEZvciB0aGUgZXZlbnRzIHRoYXQgYXJlIG5vdCBuZWVkZWRcbi8vIGZvciB0aGUgU2ltcGxlRXZlbnRQbHVnaW4gKG90aGVyRGlzY3JldGVFdmVudHMpIHdlIHByb2Nlc3MgdGhlbSBzZXBhcmF0ZWx5IGFzIGFuXG4vLyBhcnJheSBvZiB0b3AgbGV2ZWwgZXZlbnRzLlxuLy8gTGFzdGx5LCB3ZSBpZ25vcmUgcHJldHRpZXIgc28gd2UgY2FuIGtlZXAgdGhlIGZvcm1hdHRpbmcgc2FuZS5cbi8vIHByZXR0aWVyLWlnbm9yZVxuXG52YXIgZGlzY3JldGVFdmVudFBhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4gPSBbJ2NhbmNlbCcsICdjYW5jZWwnLCAnY2xpY2snLCAnY2xpY2snLCAnY2xvc2UnLCAnY2xvc2UnLCAnY29udGV4dG1lbnUnLCAnY29udGV4dE1lbnUnLCAnY29weScsICdjb3B5JywgJ2N1dCcsICdjdXQnLCAnYXV4Y2xpY2snLCAnYXV4Q2xpY2snLCAnZGJsY2xpY2snLCAnZG91YmxlQ2xpY2snLCAvLyBDYXJlZnVsIVxuJ2RyYWdlbmQnLCAnZHJhZ0VuZCcsICdkcmFnc3RhcnQnLCAnZHJhZ1N0YXJ0JywgJ2Ryb3AnLCAnZHJvcCcsICdmb2N1c2luJywgJ2ZvY3VzJywgLy8gQ2FyZWZ1bCFcbidmb2N1c291dCcsICdibHVyJywgLy8gQ2FyZWZ1bCFcbidpbnB1dCcsICdpbnB1dCcsICdpbnZhbGlkJywgJ2ludmFsaWQnLCAna2V5ZG93bicsICdrZXlEb3duJywgJ2tleXByZXNzJywgJ2tleVByZXNzJywgJ2tleXVwJywgJ2tleVVwJywgJ21vdXNlZG93bicsICdtb3VzZURvd24nLCAnbW91c2V1cCcsICdtb3VzZVVwJywgJ3Bhc3RlJywgJ3Bhc3RlJywgJ3BhdXNlJywgJ3BhdXNlJywgJ3BsYXknLCAncGxheScsICdwb2ludGVyY2FuY2VsJywgJ3BvaW50ZXJDYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlckRvd24nLCAncG9pbnRlcnVwJywgJ3BvaW50ZXJVcCcsICdyYXRlY2hhbmdlJywgJ3JhdGVDaGFuZ2UnLCAncmVzZXQnLCAncmVzZXQnLCAnc2Vla2VkJywgJ3NlZWtlZCcsICdzdWJtaXQnLCAnc3VibWl0JywgJ3RvdWNoY2FuY2VsJywgJ3RvdWNoQ2FuY2VsJywgJ3RvdWNoZW5kJywgJ3RvdWNoRW5kJywgJ3RvdWNoc3RhcnQnLCAndG91Y2hTdGFydCcsICd2b2x1bWVjaGFuZ2UnLCAndm9sdW1lQ2hhbmdlJ107XG52YXIgb3RoZXJEaXNjcmV0ZUV2ZW50cyA9IFsnY2hhbmdlJywgJ3NlbGVjdGlvbmNoYW5nZScsICd0ZXh0SW5wdXQnLCAnY29tcG9zaXRpb25zdGFydCcsICdjb21wb3NpdGlvbmVuZCcsICdjb21wb3NpdGlvbnVwZGF0ZSddO1xuXG5cbnZhciB1c2VyQmxvY2tpbmdQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luID0gWydkcmFnJywgJ2RyYWcnLCAnZHJhZ2VudGVyJywgJ2RyYWdFbnRlcicsICdkcmFnZXhpdCcsICdkcmFnRXhpdCcsICdkcmFnbGVhdmUnLCAnZHJhZ0xlYXZlJywgJ2RyYWdvdmVyJywgJ2RyYWdPdmVyJywgJ21vdXNlbW92ZScsICdtb3VzZU1vdmUnLCAnbW91c2VvdXQnLCAnbW91c2VPdXQnLCAnbW91c2VvdmVyJywgJ21vdXNlT3ZlcicsICdwb2ludGVybW92ZScsICdwb2ludGVyTW92ZScsICdwb2ludGVyb3V0JywgJ3BvaW50ZXJPdXQnLCAncG9pbnRlcm92ZXInLCAncG9pbnRlck92ZXInLCAnc2Nyb2xsJywgJ3Njcm9sbCcsICd0b2dnbGUnLCAndG9nZ2xlJywgJ3RvdWNobW92ZScsICd0b3VjaE1vdmUnLCAnd2hlZWwnLCAnd2hlZWwnXTsgLy8gcHJldHRpZXItaWdub3JlXG5cbnZhciBjb250aW51b3VzUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiA9IFsnYWJvcnQnLCAnYWJvcnQnLCBBTklNQVRJT05fRU5ELCAnYW5pbWF0aW9uRW5kJywgQU5JTUFUSU9OX0lURVJBVElPTiwgJ2FuaW1hdGlvbkl0ZXJhdGlvbicsIEFOSU1BVElPTl9TVEFSVCwgJ2FuaW1hdGlvblN0YXJ0JywgJ2NhbnBsYXknLCAnY2FuUGxheScsICdjYW5wbGF5dGhyb3VnaCcsICdjYW5QbGF5VGhyb3VnaCcsICdkdXJhdGlvbmNoYW5nZScsICdkdXJhdGlvbkNoYW5nZScsICdlbXB0aWVkJywgJ2VtcHRpZWQnLCAnZW5jcnlwdGVkJywgJ2VuY3J5cHRlZCcsICdlbmRlZCcsICdlbmRlZCcsICdlcnJvcicsICdlcnJvcicsICdnb3Rwb2ludGVyY2FwdHVyZScsICdnb3RQb2ludGVyQ2FwdHVyZScsICdsb2FkJywgJ2xvYWQnLCAnbG9hZGVkZGF0YScsICdsb2FkZWREYXRhJywgJ2xvYWRlZG1ldGFkYXRhJywgJ2xvYWRlZE1ldGFkYXRhJywgJ2xvYWRzdGFydCcsICdsb2FkU3RhcnQnLCAnbG9zdHBvaW50ZXJjYXB0dXJlJywgJ2xvc3RQb2ludGVyQ2FwdHVyZScsICdwbGF5aW5nJywgJ3BsYXlpbmcnLCAncHJvZ3Jlc3MnLCAncHJvZ3Jlc3MnLCAnc2Vla2luZycsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3RhbGxlZCcsICdzdXNwZW5kJywgJ3N1c3BlbmQnLCAndGltZXVwZGF0ZScsICd0aW1lVXBkYXRlJywgVFJBTlNJVElPTl9FTkQsICd0cmFuc2l0aW9uRW5kJywgJ3dhaXRpbmcnLCAnd2FpdGluZyddO1xuLyoqXG4gKiBUdXJuc1xuICogWydhYm9ydCcsIC4uLl1cbiAqXG4gKiBpbnRvXG4gKlxuICogdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKFtcbiAqICAgWydhYm9ydCcsICdvbkFib3J0J10sXG4gKiBdKTtcbiAqXG4gKiBhbmQgcmVnaXN0ZXJzIHRoZW0uXG4gKi9cblxuZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoZXZlbnRUeXBlcywgcHJpb3JpdHkpIHtcbiAgLy8gQXMgdGhlIGV2ZW50IHR5cGVzIGFyZSBpbiBwYWlycyBvZiB0d28sIHdlIG5lZWQgdG8gaXRlcmF0ZVxuICAvLyB0aHJvdWdoIGluIHR3b3MuIFRoZSBldmVudHMgYXJlIGluIHBhaXJzIG9mIHR3byB0byBzYXZlIGNvZGVcbiAgLy8gYW5kIGltcHJvdmUgaW5pdCBwZXJmIG9mIHByb2Nlc3NpbmcgdGhpcyBhcnJheSwgYXMgaXQgd2lsbFxuICAvLyByZXN1bHQgaW4gZmFyIGZld2VyIG9iamVjdCBhbGxvY2F0aW9ucyBhbmQgcHJvcGVydHkgYWNjZXNzZXNcbiAgLy8gaWYgd2Ugb25seSB1c2UgdGhyZWUgYXJyYXlzIHRvIHByb2Nlc3MgYWxsIHRoZSBjYXRlZ29yaWVzIG9mXG4gIC8vIGluc3RlYWQgb2YgdHVwbGVzLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50VHlwZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgdG9wRXZlbnQgPSBldmVudFR5cGVzW2ldO1xuICAgIHZhciBldmVudCA9IGV2ZW50VHlwZXNbaSArIDFdO1xuICAgIHZhciBjYXBpdGFsaXplZEV2ZW50ID0gZXZlbnRbMF0udG9VcHBlckNhc2UoKSArIGV2ZW50LnNsaWNlKDEpO1xuICAgIHZhciByZWFjdE5hbWUgPSAnb24nICsgY2FwaXRhbGl6ZWRFdmVudDtcbiAgICBldmVudFByaW9yaXRpZXMuc2V0KHRvcEV2ZW50LCBwcmlvcml0eSk7XG4gICAgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuc2V0KHRvcEV2ZW50LCByZWFjdE5hbWUpO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWFjdE5hbWUsIFt0b3BFdmVudF0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEV2ZW50UHJpb3JpdGllcyhldmVudFR5cGVzLCBwcmlvcml0eSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICBldmVudFByaW9yaXRpZXMuc2V0KGV2ZW50VHlwZXNbaV0sIHByaW9yaXR5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFdmVudFByaW9yaXR5Rm9yUGx1Z2luU3lzdGVtKGRvbUV2ZW50TmFtZSkge1xuICB2YXIgcHJpb3JpdHkgPSBldmVudFByaW9yaXRpZXMuZ2V0KGRvbUV2ZW50TmFtZSk7IC8vIERlZmF1bHQgdG8gYSBDb250aW51b3VzRXZlbnQuIE5vdGU6IHdlIG1pZ2h0XG4gIC8vIHdhbnQgdG8gd2FybiBpZiB3ZSBjYW4ndCBkZXRlY3QgdGhlIHByaW9yaXR5XG4gIC8vIGZvciB0aGUgZXZlbnQuXG5cbiAgcmV0dXJuIHByaW9yaXR5ID09PSB1bmRlZmluZWQgPyBDb250aW51b3VzRXZlbnQgOiBwcmlvcml0eTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlRXZlbnRzKCkge1xuICByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyhkaXNjcmV0ZUV2ZW50UGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiwgRGlzY3JldGVFdmVudCk7XG4gIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKHVzZXJCbG9ja2luZ1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIFVzZXJCbG9ja2luZ0V2ZW50KTtcbiAgcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoY29udGludW91c1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIENvbnRpbnVvdXNFdmVudCk7XG4gIHNldEV2ZW50UHJpb3JpdGllcyhvdGhlckRpc2NyZXRlRXZlbnRzLCBEaXNjcmV0ZUV2ZW50KTtcbn1cblxudmFyIFNjaGVkdWxlcl9ub3cgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93O1xuXG57XG4gIC8vIFByb3ZpZGUgZXhwbGljaXQgZXJyb3IgbWVzc2FnZSB3aGVuIHByb2R1Y3Rpb24rcHJvZmlsaW5nIGJ1bmRsZSBvZiBlLmcuXG4gIC8vIHJlYWN0LWRvbSBpcyB1c2VkIHdpdGggcHJvZHVjdGlvbiAobm9uLXByb2ZpbGluZykgYnVuZGxlIG9mXG4gIC8vIHNjaGVkdWxlci90cmFjaW5nXG4gIGlmICghKHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYgIT0gbnVsbCAmJiB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIHJ1biB0aGUgcHJvZmlsaW5nIHZlcnNpb24gb2YgYSByZW5kZXJlciAoZm9yIGV4YW1wbGUsIGByZWFjdC1kb20vcHJvZmlsaW5nYCkgd2l0aG91dCBhbHNvIHJlcGxhY2luZyB0aGUgYHNjaGVkdWxlci90cmFjaW5nYCBtb2R1bGUgd2l0aCBgc2NoZWR1bGVyL3RyYWNpbmctcHJvZmlsaW5nYC4gWW91ciBidW5kbGVyIG1pZ2h0IGhhdmUgYSBzZXR0aW5nIGZvciBhbGlhc2luZyBib3RoIG1vZHVsZXMuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Byb2ZpbGluZ1wiICk7XG4gICAgfVxuICB9XG59XG4vLyBhc2NlbmRpbmcgbnVtYmVycyBzbyB3ZSBjYW4gY29tcGFyZSB0aGVtIGxpa2UgbnVtYmVycy4gVGhleSBzdGFydCBhdCA5MCB0b1xuLy8gYXZvaWQgY2xhc2hpbmcgd2l0aCBTY2hlZHVsZXIncyBwcmlvcml0aWVzLlxuXG52YXIgSW1tZWRpYXRlUHJpb3JpdHkgPSA5OTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IDk4O1xudmFyIE5vcm1hbFByaW9yaXR5ID0gOTc7XG52YXIgTG93UHJpb3JpdHkgPSA5NjtcbnZhciBJZGxlUHJpb3JpdHkgPSA5NTsgLy8gTm9Qcmlvcml0eSBpcyB0aGUgYWJzZW5jZSBvZiBwcmlvcml0eS4gQWxzbyBSZWFjdC1vbmx5LlxuXG52YXIgTm9Qcmlvcml0eSA9IDkwO1xudmFyIGluaXRpYWxUaW1lTXMgPSBTY2hlZHVsZXJfbm93KCk7IC8vIElmIHRoZSBpbml0aWFsIHRpbWVzdGFtcCBpcyByZWFzb25hYmx5IHNtYWxsLCB1c2UgU2NoZWR1bGVyJ3MgYG5vd2AgZGlyZWN0bHkuXG5cbnZhciBTeW5jTGFuZVByaW9yaXR5ID0gMTU7XG52YXIgU3luY0JhdGNoZWRMYW5lUHJpb3JpdHkgPSAxNDtcbnZhciBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMTM7XG52YXIgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eSA9IDEyO1xudmFyIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDExO1xudmFyIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSA9IDEwO1xudmFyIERlZmF1bHRIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSA5O1xudmFyIERlZmF1bHRMYW5lUHJpb3JpdHkgPSA4O1xudmFyIFRyYW5zaXRpb25IeWRyYXRpb25Qcmlvcml0eSA9IDc7XG52YXIgVHJhbnNpdGlvblByaW9yaXR5ID0gNjtcbnZhciBSZXRyeUxhbmVQcmlvcml0eSA9IDU7XG52YXIgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gNDtcbnZhciBJZGxlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMztcbnZhciBJZGxlTGFuZVByaW9yaXR5ID0gMjtcbnZhciBPZmZzY3JlZW5MYW5lUHJpb3JpdHkgPSAxO1xudmFyIE5vTGFuZVByaW9yaXR5ID0gMDtcbnZhciBUb3RhbExhbmVzID0gMzE7XG52YXIgTm9MYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIE5vTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgU3luY0xhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTtcbnZhciBTeW5jQmF0Y2hlZExhbmUgPVxuLyogICAgICAgICAgICAgICAgICovXG4yO1xudmFyIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgKi9cbjQ7XG52YXIgSW5wdXREaXNjcmV0ZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMjQ7XG52YXIgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgKi9cbjMyO1xudmFyIElucHV0Q29udGludW91c0xhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgKi9cbjE5MjtcbnZhciBEZWZhdWx0SHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgICovXG4yNTY7XG52YXIgRGVmYXVsdExhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4zNTg0O1xudmFyIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgICovXG40MDk2O1xudmFyIFRyYW5zaXRpb25MYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjQxODYxMTI7XG52YXIgUmV0cnlMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuNjI5MTQ1NjA7XG52YXIgU29tZVJldHJ5TGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICovXG4zMzU1NDQzMjtcbnZhciBTZWxlY3RpdmVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICovXG42NzEwODg2NDtcbnZhciBOb25JZGxlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTM0MjE3NzI3O1xudmFyIElkbGVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgKi9cbjEzNDIxNzcyODtcbnZhciBJZGxlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG44MDUzMDYzNjg7XG52YXIgT2Zmc2NyZWVuTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMTA3Mzc0MTgyNDtcbnZhciBOb1RpbWVzdGFtcCA9IC0xO1xuZnVuY3Rpb24gc2V0Q3VycmVudFVwZGF0ZUxhbmVQcmlvcml0eShuZXdMYW5lUHJpb3JpdHkpIHtcbn0gLy8gXCJSZWdpc3RlcnNcIiB1c2VkIHRvIFwicmV0dXJuXCIgbXVsdGlwbGUgdmFsdWVzXG4vLyBVc2VkIGJ5IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzIGFuZCBnZXROZXh0TGFuZXM6XG5cbnZhciByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRMYW5lUHJpb3JpdHk7XG5cbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gIGlmICgoU3luY0xhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9XG5cbiAgaWYgKChTeW5jQmF0Y2hlZExhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBTeW5jQmF0Y2hlZExhbmU7XG4gIH1cblxuICBpZiAoKElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpbnB1dERpc2NyZXRlTGFuZXMgPSBJbnB1dERpc2NyZXRlTGFuZXMgJiBsYW5lcztcblxuICBpZiAoaW5wdXREaXNjcmV0ZUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBpbnB1dERpc2NyZXRlTGFuZXM7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpbnB1dENvbnRpbnVvdXNMYW5lcyA9IElucHV0Q29udGludW91c0xhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGlucHV0Q29udGludW91c0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlucHV0Q29udGludW91c0xhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIERlZmF1bHRIeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gRGVmYXVsdEh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgZGVmYXVsdExhbmVzID0gRGVmYXVsdExhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGRlZmF1bHRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdExhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gZGVmYXVsdExhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gVHJhbnNpdGlvbkh5ZHJhdGlvblByaW9yaXR5O1xuICAgIHJldHVybiBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uTGFuZXMgPSBUcmFuc2l0aW9uTGFuZXMgJiBsYW5lcztcblxuICBpZiAodHJhbnNpdGlvbkxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBUcmFuc2l0aW9uUHJpb3JpdHk7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25MYW5lcztcbiAgfVxuXG4gIHZhciByZXRyeUxhbmVzID0gUmV0cnlMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChyZXRyeUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBSZXRyeUxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gcmV0cnlMYW5lcztcbiAgfVxuXG4gIGlmIChsYW5lcyAmIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmUpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBJZGxlSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElkbGVIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIElkbGVIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGlkbGVMYW5lcyA9IElkbGVMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChpZGxlTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElkbGVMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlkbGVMYW5lcztcbiAgfVxuXG4gIGlmICgoT2Zmc2NyZWVuTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gT2Zmc2NyZWVuTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBPZmZzY3JlZW5MYW5lO1xuICB9XG5cbiAge1xuICAgIGVycm9yKCdTaG91bGQgaGF2ZSBmb3VuZCBtYXRjaGluZyBsYW5lcy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgfSAvLyBUaGlzIHNob3VsZG4ndCBiZSByZWFjaGFibGUsIGJ1dCBhcyBhIGZhbGxiYWNrLCByZXR1cm4gdGhlIGVudGlyZSBiaXRtYXNrLlxuXG5cbiAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0TGFuZVByaW9yaXR5O1xuICByZXR1cm4gbGFuZXM7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlclByaW9yaXR5VG9MYW5lUHJpb3JpdHkoc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCkge1xuICBzd2l0Y2ggKHNjaGVkdWxlclByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNMYW5lUHJpb3JpdHk7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgIC8vIFRPRE86IEhhbmRsZSBMb3dTY2hlZHVsZXJQcmlvcml0eSwgc29tZWhvdy4gTWF5YmUgdGhlIHNhbWUgbGFuZSBhcyBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gRGVmYXVsdExhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVMYW5lUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIE5vTGFuZVByaW9yaXR5O1xuICB9XG59XG5mdW5jdGlvbiBsYW5lUHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KGxhbmVQcmlvcml0eSkge1xuICBzd2l0Y2ggKGxhbmVQcmlvcml0eSkge1xuICAgIGNhc2UgU3luY0xhbmVQcmlvcml0eTpcbiAgICBjYXNlIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIEltbWVkaWF0ZVByaW9yaXR5O1xuXG4gICAgY2FzZSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBVc2VyQmxvY2tpbmdQcmlvcml0eTtcblxuICAgIGNhc2UgRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIERlZmF1bHRMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBUcmFuc2l0aW9uSHlkcmF0aW9uUHJpb3JpdHk6XG4gICAgY2FzZSBUcmFuc2l0aW9uUHJpb3JpdHk6XG4gICAgY2FzZSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBSZXRyeUxhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb3JtYWxQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElkbGVMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBPZmZzY3JlZW5MYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSWRsZVByaW9yaXR5O1xuXG4gICAgY2FzZSBOb0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb1ByaW9yaXR5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgdXBkYXRlIHByaW9yaXR5OiBcIiArIGxhbmVQcmlvcml0eSArIFwiLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5mdW5jdGlvbiBnZXROZXh0TGFuZXMocm9vdCwgd2lwTGFuZXMpIHtcbiAgLy8gRWFybHkgYmFpbG91dCBpZiB0aGVyZSdzIG5vIHBlbmRpbmcgd29yayBsZWZ0LlxuICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG5cbiAgaWYgKHBlbmRpbmdMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIE5vTGFuZXM7XG4gIH1cblxuICB2YXIgbmV4dExhbmVzID0gTm9MYW5lcztcbiAgdmFyIG5leHRMYW5lUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgdmFyIGV4cGlyZWRMYW5lcyA9IHJvb3QuZXhwaXJlZExhbmVzO1xuICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICB2YXIgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzOyAvLyBDaGVjayBpZiBhbnkgd29yayBoYXMgZXhwaXJlZC5cblxuICBpZiAoZXhwaXJlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgbmV4dExhbmVzID0gZXhwaXJlZExhbmVzO1xuICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNMYW5lUHJpb3JpdHk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHdvcmsgb24gYW55IGlkbGUgd29yayB1bnRpbCBhbGwgdGhlIG5vbi1pZGxlIHdvcmsgaGFzIGZpbmlzaGVkLFxuICAgIC8vIGV2ZW4gaWYgdGhlIHdvcmsgaXMgc3VzcGVuZGVkLlxuICAgIHZhciBub25JZGxlUGVuZGluZ0xhbmVzID0gcGVuZGluZ0xhbmVzICYgTm9uSWRsZUxhbmVzO1xuXG4gICAgaWYgKG5vbklkbGVQZW5kaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIHZhciBub25JZGxlVW5ibG9ja2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICBpZiAobm9uSWRsZVVuYmxvY2tlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVVbmJsb2NrZWRMYW5lcyk7XG4gICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBub25JZGxlUGluZ2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgcGluZ2VkTGFuZXM7XG5cbiAgICAgICAgaWYgKG5vbklkbGVQaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVQaW5nZWRMYW5lcyk7XG4gICAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBvbmx5IHJlbWFpbmluZyB3b3JrIGlzIElkbGUuXG4gICAgICB2YXIgdW5ibG9ja2VkTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgIGlmICh1bmJsb2NrZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyh1bmJsb2NrZWRMYW5lcyk7XG4gICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHBpbmdlZExhbmVzKTtcbiAgICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAobmV4dExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSByZWFjaGFibGUgaWYgd2UncmUgc3VzcGVuZGVkXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgd2FybmluZyBpbiB0aGlzIHBhdGggaWYgYSBmYWxsYmFjayB0aW1lciBpcyBub3Qgc2NoZWR1bGVkLlxuICAgIHJldHVybiBOb0xhbmVzO1xuICB9IC8vIElmIHRoZXJlIGFyZSBoaWdoZXIgcHJpb3JpdHkgbGFuZXMsIHdlJ2xsIGluY2x1ZGUgdGhlbSBldmVuIGlmIHRoZXlcbiAgLy8gYXJlIHN1c3BlbmRlZC5cblxuXG4gIG5leHRMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIGdldEVxdWFsT3JIaWdoZXJQcmlvcml0eUxhbmVzKG5leHRMYW5lcyk7IC8vIElmIHdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiBhIHJlbmRlciwgc3dpdGNoaW5nIGxhbmVzIHdpbGwgaW50ZXJydXB0XG4gIC8vIGl0IGFuZCB3ZSdsbCBsb3NlIG91ciBwcm9ncmVzcy4gV2Ugc2hvdWxkIG9ubHkgZG8gdGhpcyBpZiB0aGUgbmV3IGxhbmVzIGFyZVxuICAvLyBoaWdoZXIgcHJpb3JpdHkuXG5cbiAgaWYgKHdpcExhbmVzICE9PSBOb0xhbmVzICYmIHdpcExhbmVzICE9PSBuZXh0TGFuZXMgJiYgLy8gSWYgd2UgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB0aGVuIGludGVycnVwdGluZyBpcyBmaW5lLiBEb24ndFxuICAvLyBib3RoZXIgd2FpdGluZyB1bnRpbCB0aGUgcm9vdCBpcyBjb21wbGV0ZS5cbiAgKHdpcExhbmVzICYgc3VzcGVuZGVkTGFuZXMpID09PSBOb0xhbmVzKSB7XG4gICAgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMod2lwTGFuZXMpO1xuICAgIHZhciB3aXBMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcblxuICAgIGlmIChuZXh0TGFuZVByaW9yaXR5IDw9IHdpcExhbmVQcmlvcml0eSkge1xuICAgICAgcmV0dXJuIHdpcExhbmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IG5leHRMYW5lUHJpb3JpdHk7XG4gICAgfVxuICB9IC8vIENoZWNrIGZvciBlbnRhbmdsZWQgbGFuZXMgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYXRjaC5cbiAgLy9cbiAgLy8gQSBsYW5lIGlzIHNhaWQgdG8gYmUgZW50YW5nbGVkIHdpdGggYW5vdGhlciB3aGVuIGl0J3Mgbm90IGFsbG93ZWQgdG8gcmVuZGVyXG4gIC8vIGluIGEgYmF0Y2ggdGhhdCBkb2VzIG5vdCBhbHNvIGluY2x1ZGUgdGhlIG90aGVyIGxhbmUuIFR5cGljYWxseSB3ZSBkbyB0aGlzXG4gIC8vIHdoZW4gbXVsdGlwbGUgdXBkYXRlcyBoYXZlIHRoZSBzYW1lIHNvdXJjZSwgYW5kIHdlIG9ubHkgd2FudCB0byByZXNwb25kIHRvXG4gIC8vIHRoZSBtb3N0IHJlY2VudCBldmVudCBmcm9tIHRoYXQgc291cmNlLlxuICAvL1xuICAvLyBOb3RlIHRoYXQgd2UgYXBwbHkgZW50YW5nbGVtZW50cyAqYWZ0ZXIqIGNoZWNraW5nIGZvciBwYXJ0aWFsIHdvcmsgYWJvdmUuXG4gIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGxhbmUgaXMgZW50YW5nbGVkIGR1cmluZyBhbiBpbnRlcmxlYXZlZCBldmVudCB3aGlsZVxuICAvLyBpdCdzIGFscmVhZHkgcmVuZGVyaW5nLCB3ZSB3b24ndCBpbnRlcnJ1cHQgaXQuIFRoaXMgaXMgaW50ZW50aW9uYWwsIHNpbmNlXG4gIC8vIGVudGFuZ2xlbWVudCBpcyB1c3VhbGx5IFwiYmVzdCBlZmZvcnRcIjogd2UnbGwgdHJ5IG91ciBiZXN0IHRvIHJlbmRlciB0aGVcbiAgLy8gbGFuZXMgaW4gdGhlIHNhbWUgYmF0Y2gsIGJ1dCBpdCdzIG5vdCB3b3J0aCB0aHJvd2luZyBvdXQgcGFydGlhbGx5XG4gIC8vIGNvbXBsZXRlZCB3b3JrIGluIG9yZGVyIHRvIGRvIGl0LlxuICAvL1xuICAvLyBGb3IgdGhvc2UgZXhjZXB0aW9ucyB3aGVyZSBlbnRhbmdsZW1lbnQgaXMgc2VtYW50aWNhbGx5IGltcG9ydGFudCwgbGlrZVxuICAvLyB1c2VNdXRhYmxlU291cmNlLCB3ZSBzaG91bGQgZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gcGFydGlhbCB3b3JrIGF0IHRoZVxuICAvLyB0aW1lIHdlIGFwcGx5IHRoZSBlbnRhbmdsZW1lbnQuXG5cblxuICB2YXIgZW50YW5nbGVkTGFuZXMgPSByb290LmVudGFuZ2xlZExhbmVzO1xuXG4gIGlmIChlbnRhbmdsZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICAgIHZhciBsYW5lcyA9IG5leHRMYW5lcyAmIGVudGFuZ2xlZExhbmVzO1xuXG4gICAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgICBuZXh0TGFuZXMgfD0gZW50YW5nbGVtZW50c1tpbmRleF07XG4gICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dExhbmVzO1xufVxuZnVuY3Rpb24gZ2V0TW9zdFJlY2VudEV2ZW50VGltZShyb290LCBsYW5lcykge1xuICB2YXIgZXZlbnRUaW1lcyA9IHJvb3QuZXZlbnRUaW1lcztcbiAgdmFyIG1vc3RSZWNlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIHZhciBldmVudFRpbWUgPSBldmVudFRpbWVzW2luZGV4XTtcblxuICAgIGlmIChldmVudFRpbWUgPiBtb3N0UmVjZW50RXZlbnRUaW1lKSB7XG4gICAgICBtb3N0UmVjZW50RXZlbnRUaW1lID0gZXZlbnRUaW1lO1xuICAgIH1cblxuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG5cbiAgcmV0dXJuIG1vc3RSZWNlbnRFdmVudFRpbWU7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSkge1xuICAvLyBUT0RPOiBFeHBpcmF0aW9uIGhldXJpc3RpYyBpcyBjb25zdGFudCBwZXIgbGFuZSwgc28gY291bGQgdXNlIGEgbWFwLlxuICBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhsYW5lKTtcbiAgdmFyIHByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG5cbiAgaWYgKHByaW9yaXR5ID49IElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSkge1xuICAgIC8vIFVzZXIgaW50ZXJhY3Rpb25zIHNob3VsZCBleHBpcmUgc2xpZ2h0bHkgbW9yZSBxdWlja2x5LlxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBpcyBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnQgYXMgaW4gU2NoZWR1bGVyLmpzLiBXaGVuXG4gICAgLy8gd2UgbWFkZSBpdCBsYXJnZXIsIGEgcHJvZHVjdCBtZXRyaWMgaW4gd3d3IHJlZ3Jlc3NlZCwgc3VnZ2VzdGluZyB0aGVyZSdzXG4gICAgLy8gYSB1c2VyIGludGVyYWN0aW9uIHRoYXQncyBiZWluZyBzdGFydmVkIGJ5IGEgc2VyaWVzIG9mIHN5bmNocm9ub3VzXG4gICAgLy8gdXBkYXRlcy4gSWYgdGhhdCB0aGVvcnkgaXMgY29ycmVjdCwgdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlXG4gICAgLy8gc3RhcnZhdGlvbi4gSG93ZXZlciwgdGhpcyBzY2VuYXJpbyBzdXBwb3J0cyB0aGUgaWRlYSB0aGF0IGV4cGlyYXRpb25cbiAgICAvLyB0aW1lcyBhcmUgYW4gaW1wb3J0YW50IHNhZmVndWFyZCB3aGVuIHN0YXJ2YXRpb24gZG9lcyBoYXBwZW4uXG4gICAgLy9cbiAgICAvLyBBbHNvIG5vdGUgdGhhdCwgaW4gdGhlIGNhc2Ugb2YgdXNlciBpbnB1dCBzcGVjaWZpY2FsbHksIHRoaXMgd2lsbCBzb29uIG5vXG4gICAgLy8gbG9uZ2VyIGJlIGFuIGlzc3VlIGJlY2F1c2Ugd2UgcGxhbiB0byBtYWtlIHVzZXIgaW5wdXQgc3luY2hyb25vdXMgYnlcbiAgICAvLyBkZWZhdWx0ICh1bnRpbCB5b3UgZW50ZXIgYHN0YXJ0VHJhbnNpdGlvbmAsIG9mIGNvdXJzZS4pXG4gICAgLy9cbiAgICAvLyBJZiB3ZXJlbid0IHBsYW5uaW5nIHRvIG1ha2UgdGhlc2UgdXBkYXRlcyBzeW5jaHJvbm91cyBzb29uIGFueXdheSwgSVxuICAgIC8vIHdvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBudW1iZXIgYSBjb25maWd1cmFibGUgcGFyYW1ldGVyLlxuICAgIHJldHVybiBjdXJyZW50VGltZSArIDI1MDtcbiAgfSBlbHNlIGlmIChwcmlvcml0eSA+PSBUcmFuc2l0aW9uUHJpb3JpdHkpIHtcbiAgICByZXR1cm4gY3VycmVudFRpbWUgKyA1MDAwO1xuICB9IGVsc2Uge1xuICAgIC8vIEFueXRoaW5nIGlkbGUgcHJpb3JpdHkgb3IgbG93ZXIgc2hvdWxkIG5ldmVyIGV4cGlyZS5cbiAgICByZXR1cm4gTm9UaW1lc3RhbXA7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1N0YXJ2ZWRMYW5lc0FzRXhwaXJlZChyb290LCBjdXJyZW50VGltZSkge1xuICAvLyBUT0RPOiBUaGlzIGdldHMgY2FsbGVkIGV2ZXJ5IHRpbWUgd2UgeWllbGQuIFdlIGNhbiBvcHRpbWl6ZSBieSBzdG9yaW5nXG4gIC8vIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUgb24gdGhlIHJvb3QuIFRoZW4gdXNlIHRoYXQgdG8gcXVpY2tseSBiYWlsIG91dFxuICAvLyBvZiB0aGlzIGZ1bmN0aW9uLlxuICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG4gIHZhciBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7XG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lczsgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBwZW5kaW5nIGxhbmVzIGFuZCBjaGVjayBpZiB3ZSd2ZSByZWFjaGVkIHRoZWlyXG4gIC8vIGV4cGlyYXRpb24gdGltZS4gSWYgc28sIHdlJ2xsIGFzc3VtZSB0aGUgdXBkYXRlIGlzIGJlaW5nIHN0YXJ2ZWQgYW5kIG1hcmtcbiAgLy8gaXQgYXMgZXhwaXJlZCB0byBmb3JjZSBpdCB0byBmaW5pc2guXG5cbiAgdmFyIGxhbmVzID0gcGVuZGluZ0xhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWVzW2luZGV4XTtcblxuICAgIGlmIChleHBpcmF0aW9uVGltZSA9PT0gTm9UaW1lc3RhbXApIHtcbiAgICAgIC8vIEZvdW5kIGEgcGVuZGluZyBsYW5lIHdpdGggbm8gZXhwaXJhdGlvbiB0aW1lLiBJZiBpdCdzIG5vdCBzdXNwZW5kZWQsIG9yXG4gICAgICAvLyBpZiBpdCdzIHBpbmdlZCwgYXNzdW1lIGl0J3MgQ1BVLWJvdW5kLiBDb21wdXRlIGEgbmV3IGV4cGlyYXRpb24gdGltZVxuICAgICAgLy8gdXNpbmcgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgIGlmICgobGFuZSAmIHN1c3BlbmRlZExhbmVzKSA9PT0gTm9MYW5lcyB8fCAobGFuZSAmIHBpbmdlZExhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgICAgICAvLyBBc3N1bWVzIHRpbWVzdGFtcHMgYXJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy5cbiAgICAgICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZSkge1xuICAgICAgLy8gVGhpcyBsYW5lIGV4cGlyZWRcbiAgICAgIHJvb3QuZXhwaXJlZExhbmVzIHw9IGxhbmU7XG4gICAgfVxuXG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn0gLy8gVGhpcyByZXR1cm5zIHRoZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcgbGFuZXMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXlcbmZ1bmN0aW9uIGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpIHtcbiAgdmFyIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gPSByb290LnBlbmRpbmdMYW5lcyAmIH5PZmZzY3JlZW5MYW5lO1xuXG4gIGlmIChldmVyeXRoaW5nQnV0T2Zmc2NyZWVuICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW47XG4gIH1cblxuICBpZiAoZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiAmIE9mZnNjcmVlbkxhbmUpIHtcbiAgICByZXR1cm4gT2Zmc2NyZWVuTGFuZTtcbiAgfVxuXG4gIHJldHVybiBOb0xhbmVzO1xufVxuZnVuY3Rpb24gcmV0dXJuTmV4dExhbmVzUHJpb3JpdHkoKSB7XG4gIHJldHVybiByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzTm9uSWRsZVdvcmsobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIE5vbklkbGVMYW5lcykgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlSZXRyaWVzKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBSZXRyeUxhbmVzKSA9PT0gbGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgVHJhbnNpdGlvbkxhbmVzKSA9PT0gbGFuZXM7XG59IC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgdXBkYXRlcyBpbiB0aGUgc2FtZSBldmVudCwgdGhpcyBzaG91bGRcbi8vIGJlIGEgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRVcGRhdGVMYW5lKGxhbmVQcmlvcml0eSwgd2lwTGFuZXMpIHtcbiAgc3dpdGNoIChsYW5lUHJpb3JpdHkpIHtcbiAgICBjYXNlIE5vTGFuZVByaW9yaXR5OlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN5bmNMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU3luY0xhbmU7XG5cbiAgICBjYXNlIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNCYXRjaGVkTGFuZTtcblxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSW5wdXREaXNjcmV0ZUxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICBpZiAoX2xhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIFNoaWZ0IHRvIHRoZSBuZXh0IHByaW9yaXR5IGxldmVsXG4gICAgICAgICAgcmV0dXJuIGZpbmRVcGRhdGVMYW5lKElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSwgd2lwTGFuZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lO1xuICAgICAgfVxuXG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk6XG4gICAgICB7XG4gICAgICAgIHZhciBfbGFuZTIgPSBwaWNrQXJiaXRyYXJ5TGFuZShJbnB1dENvbnRpbnVvdXNMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lMiA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gU2hpZnQgdG8gdGhlIG5leHQgcHJpb3JpdHkgbGV2ZWxcbiAgICAgICAgICByZXR1cm4gZmluZFVwZGF0ZUxhbmUoRGVmYXVsdExhbmVQcmlvcml0eSwgd2lwTGFuZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lMjtcbiAgICAgIH1cblxuICAgIGNhc2UgRGVmYXVsdExhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lMyA9IHBpY2tBcmJpdHJhcnlMYW5lKERlZmF1bHRMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lMyA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gSWYgYWxsIHRoZSBkZWZhdWx0IGxhbmVzIGFyZSBhbHJlYWR5IGJlaW5nIHdvcmtlZCBvbiwgbG9vayBmb3IgYVxuICAgICAgICAgIC8vIGxhbmUgaW4gdGhlIHRyYW5zaXRpb24gcmFuZ2UuXG4gICAgICAgICAgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICAgIGlmIChfbGFuZTMgPT09IE5vTGFuZSkge1xuICAgICAgICAgICAgLy8gQWxsIHRoZSB0cmFuc2l0aW9uIGxhbmVzIGFyZSB0YWtlbiwgdG9vLiBUaGlzIHNob3VsZCBiZSB2ZXJ5XG4gICAgICAgICAgICAvLyByYXJlLCBidXQgYXMgYSBsYXN0IHJlc29ydCwgcGljayBhIGRlZmF1bHQgbGFuZS4gVGhpcyB3aWxsIGhhdmVcbiAgICAgICAgICAgIC8vIHRoZSBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHdvcmstaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuICAgICAgICAgICAgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoRGVmYXVsdExhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2xhbmUzO1xuICAgICAgfVxuXG4gICAgY2FzZSBUcmFuc2l0aW9uUHJpb3JpdHk6IC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IGZpbmRUcmFuc2l0aW9uTGFuZSBpbnN0ZWFkXG5cbiAgICBjYXNlIFJldHJ5TGFuZVByaW9yaXR5OlxuICAgICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgZmluZFJldHJ5TGFuZSBpbnN0ZWFkXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSWRsZUxhbmVQcmlvcml0eTpcbiAgICAgIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSWRsZUxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSWRsZUxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxhbmU7XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCB1cGRhdGUgcHJpb3JpdHk6IFwiICsgbGFuZVByaW9yaXR5ICsgXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIgKTtcbiAgICB9XG4gIH1cbn0gLy8gVG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyBtdWx0aXBsZSB1cGRhdGVzIGluIHRoZSBzYW1lIGV2ZW50LCB0aGlzIHNob3VsZFxuLy8gYmUgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRUcmFuc2l0aW9uTGFuZSh3aXBMYW5lcywgcGVuZGluZ0xhbmVzKSB7XG4gIC8vIEZpcnN0IGxvb2sgZm9yIGxhbmVzIHRoYXQgYXJlIGNvbXBsZXRlbHkgdW5jbGFpbWVkLCBpLmUuIGhhdmUgbm9cbiAgLy8gcGVuZGluZyB3b3JrLlxuICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyAmIH5wZW5kaW5nTGFuZXMpO1xuXG4gIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAvLyBJZiBhbGwgbGFuZXMgaGF2ZSBwZW5kaW5nIHdvcmssIGxvb2sgZm9yIGEgbGFuZSB0aGF0IGlzbid0IGN1cnJlbnRseVxuICAgIC8vIGJlaW5nIHdvcmtlZCBvbi5cbiAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfndpcExhbmVzKTtcblxuICAgIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAgIC8vIElmIGV2ZXJ5dGhpbmcgaXMgYmVpbmcgd29ya2VkIG9uLCBwaWNrIGFueSBsYW5lLiBUaGlzIGhhcyB0aGVcbiAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgd29yay1pbi1wcm9ncmVzcy5cbiAgICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufSAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzIG11bHRpcGxlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgZXZlbnQsIHRoaXMgc2hvdWxkXG4vLyBiZSBwdXJlIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIGxhbmUgZm9yIGdpdmVuIGlucHV0cy5cblxuZnVuY3Rpb24gZmluZFJldHJ5TGFuZSh3aXBMYW5lcykge1xuICAvLyBUaGlzIGlzIGEgZm9yayBvZiBgZmluZFVwZGF0ZUxhbmVgIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgU3VzcGVuc2VcbiAgLy8gXCJyZXRyaWVzXCIgXHUyMDE0IGEgc3BlY2lhbCB1cGRhdGUgdGhhdCBhdHRlbXB0cyB0byBmbGlwIGEgU3VzcGVuc2UgYm91bmRhcnlcbiAgLy8gZnJvbSBpdHMgcGxhY2Vob2xkZXIgc3RhdGUgdG8gaXRzIHByaW1hcnkvcmVzb2x2ZWQgc3RhdGUuXG4gIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoUmV0cnlMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShSZXRyeUxhbmVzKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufVxuXG5mdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSB7XG4gIHJldHVybiBsYW5lcyAmIC1sYW5lcztcbn1cblxuZnVuY3Rpb24gZ2V0TG93ZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSB7XG4gIC8vIFRoaXMgZmluZHMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgbm9uLXplcm8gYml0LlxuICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IE5vTGFuZXMgOiAxIDw8IGluZGV4O1xufVxuXG5mdW5jdGlvbiBnZXRFcXVhbE9ySGlnaGVyUHJpb3JpdHlMYW5lcyhsYW5lcykge1xuICByZXR1cm4gKGdldExvd2VzdFByaW9yaXR5TGFuZShsYW5lcykgPDwgMSkgLSAxO1xufVxuXG5mdW5jdGlvbiBwaWNrQXJiaXRyYXJ5TGFuZShsYW5lcykge1xuICAvLyBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gZ2V0cyBpbmxpbmVkLiBPbmx5IGV4aXN0cyBzbyB0byBjb21tdW5pY2F0ZSB0aGF0IGl0XG4gIC8vIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGJpdCBpcyBzZWxlY3RlZDsgeW91IGNhbiBwaWNrIGFueSBiaXQgd2l0aG91dFxuICAvLyBhZmZlY3RpbmcgdGhlIGFsZ29yaXRobXMgd2hlcmUgaXRzIHVzZWQuIEhlcmUgSSdtIHVzaW5nXG4gIC8vIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGUgZmV3ZXN0IG9wZXJhdGlvbnMuXG4gIHJldHVybiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKTtcbn1cblxuZnVuY3Rpb24gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcykge1xuICByZXR1cm4gMzEgLSBjbHozMihsYW5lcyk7XG59XG5cbmZ1bmN0aW9uIGxhbmVUb0luZGV4KGxhbmUpIHtcbiAgcmV0dXJuIHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZSk7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzU29tZUxhbmUoYSwgYikge1xuICByZXR1cm4gKGEgJiBiKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIGlzU3Vic2V0T2ZMYW5lcyhzZXQsIHN1YnNldCkge1xuICByZXR1cm4gKHNldCAmIHN1YnNldCkgPT09IHN1YnNldDtcbn1cbmZ1bmN0aW9uIG1lcmdlTGFuZXMoYSwgYikge1xuICByZXR1cm4gYSB8IGI7XG59XG5mdW5jdGlvbiByZW1vdmVMYW5lcyhzZXQsIHN1YnNldCkge1xuICByZXR1cm4gc2V0ICYgfnN1YnNldDtcbn0gLy8gU2VlbXMgcmVkdW5kYW50LCBidXQgaXQgY2hhbmdlcyB0aGUgdHlwZSBmcm9tIGEgc2luZ2xlIGxhbmUgKHVzZWQgZm9yXG4vLyB1cGRhdGVzKSB0byBhIGdyb3VwIG9mIGxhbmVzICh1c2VkIGZvciBmbHVzaGluZyB3b3JrKS5cblxuZnVuY3Rpb24gbGFuZVRvTGFuZXMobGFuZSkge1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGhpZ2hlclByaW9yaXR5TGFuZShhLCBiKSB7XG4gIC8vIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYml0IHJhbmdlcyBkZWNyZWFzZSBpbiBwcmlvcml0eSBhcyB5b3UgZ28gbGVmdC5cbiAgcmV0dXJuIGEgIT09IE5vTGFuZSAmJiBhIDwgYiA/IGEgOiBiO1xufVxuZnVuY3Rpb24gY3JlYXRlTGFuZU1hcChpbml0aWFsKSB7XG4gIC8vIEludGVudGlvbmFsbHkgcHVzaGluZyBvbmUgYnkgb25lLlxuICAvLyBodHRwczovL3Y4LmRldi9ibG9nL2VsZW1lbnRzLWtpbmRzI2F2b2lkLWNyZWF0aW5nLWhvbGVzXG4gIHZhciBsYW5lTWFwID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBUb3RhbExhbmVzOyBpKyspIHtcbiAgICBsYW5lTWFwLnB1c2goaW5pdGlhbCk7XG4gIH1cblxuICByZXR1cm4gbGFuZU1hcDtcbn1cbmZ1bmN0aW9uIG1hcmtSb290VXBkYXRlZChyb290LCB1cGRhdGVMYW5lLCBldmVudFRpbWUpIHtcbiAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gdXBkYXRlTGFuZTsgLy8gVE9ETzogVGhlb3JldGljYWxseSwgYW55IHVwZGF0ZSB0byBhbnkgbGFuZSBjYW4gdW5ibG9jayBhbnkgb3RoZXIgbGFuZS4gQnV0XG4gIC8vIGl0J3Mgbm90IHByYWN0aWNhbCB0byB0cnkgZXZlcnkgc2luZ2xlIHBvc3NpYmxlIGNvbWJpbmF0aW9uLiBXZSBuZWVkIGFcbiAgLy8gaGV1cmlzdGljIHRvIGRlY2lkZSB3aGljaCBsYW5lcyB0byBhdHRlbXB0IHRvIHJlbmRlciwgYW5kIGluIHdoaWNoIGJhdGNoZXMuXG4gIC8vIEZvciBub3csIHdlIHVzZSB0aGUgc2FtZSBoZXVyaXN0aWMgYXMgaW4gdGhlIG9sZCBFeHBpcmF0aW9uVGltZXMgbW9kZWw6XG4gIC8vIHJldHJ5IGFueSBsYW5lIGF0IGVxdWFsIG9yIGxvd2VyIHByaW9yaXR5LCBidXQgZG9uJ3QgdHJ5IHVwZGF0ZXMgYXQgaGlnaGVyXG4gIC8vIHByaW9yaXR5IHdpdGhvdXQgYWxzbyBpbmNsdWRpbmcgdGhlIGxvd2VyIHByaW9yaXR5IHVwZGF0ZXMuIFRoaXMgd29ya3Mgd2VsbFxuICAvLyB3aGVuIGNvbnNpZGVyaW5nIHVwZGF0ZXMgYWNyb3NzIGRpZmZlcmVudCBwcmlvcml0eSBsZXZlbHMsIGJ1dCBpc24ndFxuICAvLyBzdWZmaWNpZW50IGZvciB1cGRhdGVzIHdpdGhpbiB0aGUgc2FtZSBwcmlvcml0eSwgc2luY2Ugd2Ugd2FudCB0byB0cmVhdFxuICAvLyB0aG9zZSB1cGRhdGVzIGFzIHBhcmFsbGVsLlxuICAvLyBVbnN1c3BlbmQgYW55IHVwZGF0ZSBhdCBlcXVhbCBvciBsb3dlciBwcmlvcml0eS5cblxuICB2YXIgaGlnaGVyUHJpb3JpdHlMYW5lcyA9IHVwZGF0ZUxhbmUgLSAxOyAvLyBUdXJucyAwYjEwMDAgaW50byAwYjAxMTFcblxuICByb290LnN1c3BlbmRlZExhbmVzICY9IGhpZ2hlclByaW9yaXR5TGFuZXM7XG4gIHJvb3QucGluZ2VkTGFuZXMgJj0gaGlnaGVyUHJpb3JpdHlMYW5lcztcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBpbmRleCA9IGxhbmVUb0luZGV4KHVwZGF0ZUxhbmUpOyAvLyBXZSBjYW4gYWx3YXlzIG92ZXJ3cml0ZSBhbiBleGlzdGluZyB0aW1lc3RhbXAgYmVjYXVzZSB3ZSBwcmVmZXIgdGhlIG1vc3RcbiAgLy8gcmVjZW50IGV2ZW50LCBhbmQgd2UgYXNzdW1lIHRpbWUgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLlxuXG4gIGV2ZW50VGltZXNbaW5kZXhdID0gZXZlbnRUaW1lO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMpIHtcbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyB8PSBzdXNwZW5kZWRMYW5lcztcbiAgcm9vdC5waW5nZWRMYW5lcyAmPSB+c3VzcGVuZGVkTGFuZXM7IC8vIFRoZSBzdXNwZW5kZWQgbGFuZXMgYXJlIG5vIGxvbmdlciBDUFUtYm91bmQuIENsZWFyIHRoZWlyIGV4cGlyYXRpb24gdGltZXMuXG5cbiAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzO1xuICB2YXIgbGFuZXMgPSBzdXNwZW5kZWRMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya1Jvb3RQaW5nZWQocm9vdCwgcGluZ2VkTGFuZXMsIGV2ZW50VGltZSkge1xuICByb290LnBpbmdlZExhbmVzIHw9IHJvb3Quc3VzcGVuZGVkTGFuZXMgJiBwaW5nZWRMYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtEaXNjcmV0ZVVwZGF0ZXNFeHBpcmVkKHJvb3QpIHtcbiAgcm9vdC5leHBpcmVkTGFuZXMgfD0gSW5wdXREaXNjcmV0ZUxhbmVzICYgcm9vdC5wZW5kaW5nTGFuZXM7XG59XG5mdW5jdGlvbiBoYXNEaXNjcmV0ZUxhbmVzKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBJbnB1dERpc2NyZXRlTGFuZXMpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RNdXRhYmxlUmVhZChyb290LCB1cGRhdGVMYW5lKSB7XG4gIHJvb3QubXV0YWJsZVJlYWRMYW5lcyB8PSB1cGRhdGVMYW5lICYgcm9vdC5wZW5kaW5nTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzKSB7XG4gIHZhciBub0xvbmdlclBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzICYgfnJlbWFpbmluZ0xhbmVzO1xuICByb290LnBlbmRpbmdMYW5lcyA9IHJlbWFpbmluZ0xhbmVzOyAvLyBMZXQncyB0cnkgZXZlcnl0aGluZyBhZ2FpblxuXG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgPSAwO1xuICByb290LnBpbmdlZExhbmVzID0gMDtcbiAgcm9vdC5leHBpcmVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3QubXV0YWJsZVJlYWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7IC8vIENsZWFyIHRoZSBsYW5lcyB0aGF0IG5vIGxvbmdlciBoYXZlIHBlbmRpbmcgd29ya1xuXG4gIHZhciBsYW5lcyA9IG5vTG9uZ2VyUGVuZGluZ0xhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZW50YW5nbGVtZW50c1tpbmRleF0gPSBOb0xhbmVzO1xuICAgIGV2ZW50VGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBlbnRhbmdsZWRMYW5lcykge1xuICByb290LmVudGFuZ2xlZExhbmVzIHw9IGVudGFuZ2xlZExhbmVzO1xuICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgdmFyIGxhbmVzID0gZW50YW5nbGVkTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSB8PSBlbnRhbmdsZWRMYW5lcztcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxudmFyIGNsejMyID0gTWF0aC5jbHozMiA/IE1hdGguY2x6MzIgOiBjbHozMkZhbGxiYWNrOyAvLyBDb3VudCBsZWFkaW5nIHplcm9zLiBPbmx5IHVzZWQgb24gbGFuZXMsIHNvIGFzc3VtZSBpbnB1dCBpcyBhbiBpbnRlZ2VyLlxuLy8gQmFzZWQgb246XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2NsejMyXG5cbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcblxuZnVuY3Rpb24gY2x6MzJGYWxsYmFjayhsYW5lcykge1xuICBpZiAobGFuZXMgPT09IDApIHtcbiAgICByZXR1cm4gMzI7XG4gIH1cblxuICByZXR1cm4gMzEgLSAobG9nKGxhbmVzKSAvIExOMiB8IDApIHwgMDtcbn1cblxuLy8gSW50ZW50aW9uYWxseSBub3QgbmFtZWQgaW1wb3J0cyBiZWNhdXNlIFJvbGx1cCB3b3VsZCB1c2UgZHluYW1pYyBkaXNwYXRjaCBmb3JcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFxuICAgIHJ1bldpdGhQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk7IC8vIFRPRE86IGNhbiB3ZSBzdG9wIGV4cG9ydGluZyB0aGVzZT9cblxudmFyIF9lbmFibGVkID0gdHJ1ZTsgLy8gVGhpcyBpcyBleHBvcnRlZCBpbiBGQiBidWlsZHMgZm9yIHVzZSBieSBsZWdhY3kgRkIgbGF5ZXIgaW5mcmEuXG4vLyBXZSdkIGxpa2UgdG8gcmVtb3ZlIHRoaXMgYnV0IGl0J3Mgbm90IGNsZWFyIGlmIHRoaXMgaXMgc2FmZS5cblxuZnVuY3Rpb24gc2V0RW5hYmxlZChlbmFibGVkKSB7XG4gIF9lbmFibGVkID0gISFlbmFibGVkO1xufVxuZnVuY3Rpb24gaXNFbmFibGVkKCkge1xuICByZXR1cm4gX2VuYWJsZWQ7XG59XG5mdW5jdGlvbiBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcldpdGhQcmlvcml0eSh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncykge1xuICB2YXIgZXZlbnRQcmlvcml0eSA9IGdldEV2ZW50UHJpb3JpdHlGb3JQbHVnaW5TeXN0ZW0oZG9tRXZlbnROYW1lKTtcbiAgdmFyIGxpc3RlbmVyV3JhcHBlcjtcblxuICBzd2l0Y2ggKGV2ZW50UHJpb3JpdHkpIHtcbiAgICBjYXNlIERpc2NyZXRlRXZlbnQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaERpc2NyZXRlRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVXNlckJsb2NraW5nRXZlbnQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaFVzZXJCbG9ja2luZ1VwZGF0ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250aW51b3VzRXZlbnQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoRXZlbnQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcldyYXBwZXIuYmluZChudWxsLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcik7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAge1xuICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSWZOZWVkZWQobmF0aXZlRXZlbnQudGltZVN0YW1wKTtcbiAgfVxuXG4gIGRpc2NyZXRlVXBkYXRlcyhkaXNwYXRjaEV2ZW50LCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaFVzZXJCbG9ja2luZ1VwZGF0ZShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAge1xuICAgIHJ1bldpdGhQcmlvcml0eShVc2VyQmxvY2tpbmdQcmlvcml0eSQxLCBkaXNwYXRjaEV2ZW50LmJpbmQobnVsbCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKCFfZW5hYmxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBhbGxvd1JlcGxheSA9IHRydWU7XG5cbiAge1xuICAgIC8vIFRPRE86IHJlcGxheWluZyBjYXB0dXJlIHBoYXNlIGV2ZW50cyBpcyBjdXJyZW50bHkgYnJva2VuXG4gICAgLy8gYmVjYXVzZSB3ZSB1c2VkIHRvIGRvIGl0IGR1cmluZyB0b3AtbGV2ZWwgbmF0aXZlIGJ1YmJsZSBoYW5kbGVyc1xuICAgIC8vIGJ1dCBub3cgd2UgdXNlIGRpZmZlcmVudCBidWJibGUgYW5kIGNhcHR1cmUgaGFuZGxlcnMuXG4gICAgLy8gSW4gZWFnZXIgbW9kZSwgd2UgYXR0YWNoIGNhcHR1cmUgbGlzdGVuZXJzIGVhcmx5LCBzbyB3ZSBuZWVkXG4gICAgLy8gdG8gZmlsdGVyIHRoZW0gb3V0IHVudGlsIHdlIGZpeCB0aGUgbG9naWMgdG8gaGFuZGxlIHRoZW0gY29ycmVjdGx5LlxuICAgIC8vIFRoaXMgY291bGQndmUgYmVlbiBvdXRzaWRlIHRoZSBmbGFnIGJ1dCBJIHB1dCBpdCBpbnNpZGUgdG8gcmVkdWNlIHJpc2suXG4gICAgYWxsb3dSZXBsYXkgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpID09PSAwO1xuICB9XG5cbiAgaWYgKGFsbG93UmVwbGF5ICYmIGhhc1F1ZXVlZERpc2NyZXRlRXZlbnRzKCkgJiYgaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUpKSB7XG4gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGEgcXVldWUgb2YgZGlzY3JldGUgZXZlbnRzLCBhbmQgdGhpcyBpcyBhbm90aGVyIGRpc2NyZXRlXG4gICAgLy8gZXZlbnQsIHRoZW4gd2UgY2FuJ3QgZGlzcGF0Y2ggaXQgcmVnYXJkbGVzcyBvZiBpdHMgdGFyZ2V0LCBzaW5jZSB0aGV5XG4gICAgLy8gbmVlZCB0byBkaXNwYXRjaCBpbiBvcmRlci5cbiAgICBxdWV1ZURpc2NyZXRlRXZlbnQobnVsbCwgLy8gRmxhZ3MgdGhhdCB3ZSdyZSBub3QgYWN0dWFsbHkgYmxvY2tlZCBvbiBhbnl0aGluZyBhcyBmYXIgYXMgd2Uga25vdy5cbiAgICBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBibG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG5cbiAgaWYgKGJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgIC8vIFdlIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkIHRoaXMgZXZlbnQuXG4gICAgaWYgKGFsbG93UmVwbGF5KSB7XG4gICAgICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhbGxvd1JlcGxheSkge1xuICAgIGlmIChpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSkpIHtcbiAgICAgIC8vIFRoaXMgdGhpcyB0byBiZSByZXBsYXllZCBsYXRlciBvbmNlIHRoZSB0YXJnZXQgaXMgYXZhaWxhYmxlLlxuICAgICAgcXVldWVEaXNjcmV0ZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocXVldWVJZkNvbnRpbnVvdXNFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIG5lZWQgdG8gY2xlYXIgb25seSBpZiB3ZSBkaWRuJ3QgcXVldWUgYmVjYXVzZVxuICAgIC8vIHF1ZXVlaW5nIGlzIGFjY3VtbXVsYXRpdmUuXG5cblxuICAgIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gLy8gVGhpcyBpcyBub3QgcmVwbGF5YWJsZSBzbyB3ZSdsbCBpbnZva2UgaXQgYnV0IHdpdGhvdXQgYSB0YXJnZXQsXG4gIC8vIGluIGNhc2UgdGhlIGV2ZW50IHN5c3RlbSBuZWVkcyB0byB0cmFjZSBpdC5cblxuXG4gIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCBudWxsLCB0YXJnZXRDb250YWluZXIpO1xufSAvLyBBdHRlbXB0IGRpc3BhdGNoaW5nIGFuIGV2ZW50LiBSZXR1cm5zIGEgU3VzcGVuc2VJbnN0YW5jZSBvciBDb250YWluZXIgaWYgaXQncyBibG9ja2VkLlxuXG5mdW5jdGlvbiBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICAvLyBUT0RPOiBXYXJuIGlmIF9lbmFibGVkIGlzIGZhbHNlLlxuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCk7XG4gIHZhciB0YXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyB0cmVlIGhhcyBiZWVuIHVubW91bnRlZCBhbHJlYWR5LiBEaXNwYXRjaCB3aXRob3V0IGEgdGFyZ2V0LlxuICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0YWcgPSBuZWFyZXN0TW91bnRlZC50YWc7XG5cbiAgICAgIGlmICh0YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFF1ZXVlIHRoZSBldmVudCB0byBiZSByZXBsYXllZCBsYXRlci4gQWJvcnQgZGlzcGF0Y2hpbmcgc2luY2Ugd2VcbiAgICAgICAgICAvLyBkb24ndCB3YW50IHRoaXMgZXZlbnQgZGlzcGF0Y2hlZCB0d2ljZSB0aHJvdWdoIHRoZSBldmVudCBzeXN0ZW0uXG4gICAgICAgICAgLy8gVE9ETzogSWYgdGhpcyBpcyB0aGUgZmlyc3QgZGlzY3JldGUgZXZlbnQgaW4gdGhlIHF1ZXVlLiBTY2hlZHVsZSBhbiBpbmNyZWFzZWRcbiAgICAgICAgICAvLyBwcmlvcml0eSBmb3IgdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBzb21ldGhpbmcgd2VudCB3cm9uZyBidXQgdG8gYXZvaWQgYmxvY2tpbmdcbiAgICAgICAgLy8gdGhlIHdob2xlIHN5c3RlbSwgZGlzcGF0Y2ggdGhlIGV2ZW50IHdpdGhvdXQgYSB0YXJnZXQuXG4gICAgICAgIC8vIFRPRE86IFdhcm4uXG5cblxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBoYXBwZW5zIGR1cmluZyBhIHJlcGxheSBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgaXQgbWlnaHQgYmxvY2tcbiAgICAgICAgICAvLyB0aGUgd2hvbGUgc3lzdGVtLlxuICAgICAgICAgIHJldHVybiBnZXRDb250YWluZXJGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKG5lYXJlc3RNb3VudGVkICE9PSB0YXJnZXRJbnN0KSB7XG4gICAgICAgIC8vIElmIHdlIGdldCBhbiBldmVudCAoZXg6IGltZyBvbmxvYWQpIGJlZm9yZSBjb21taXR0aW5nIHRoYXRcbiAgICAgICAgLy8gY29tcG9uZW50J3MgbW91bnQsIGlnbm9yZSBpdCBmb3Igbm93ICh0aGF0IGlzLCB0cmVhdCBpdCBhcyBpZiBpdCB3YXMgYW5cbiAgICAgICAgLy8gZXZlbnQgb24gYSBub24tUmVhY3QgdHJlZSkuIFdlIG1pZ2h0IGFsc28gY29uc2lkZXIgcXVldWVpbmcgZXZlbnRzIGFuZFxuICAgICAgICAvLyBkaXNwYXRjaGluZyB0aGVtIGFmdGVyIHRoZSBtb3VudC5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcik7IC8vIFdlJ3JlIG5vdCBibG9ja2VkIG9uIGFueXRoaW5nLlxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyLCBwYXNzaXZlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50QnViYmxlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyLCBwYXNzaXZlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHtcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH0pO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5cbi8qKlxuICogVGhlc2UgdmFyaWFibGVzIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRleHQgY29udGVudCBvZiBhIHRhcmdldCBub2RlLFxuICogYWxsb3dpbmcgY29tcGFyaXNvbiBvZiBjb250ZW50IGJlZm9yZSBhbmQgYWZ0ZXIgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBJZGVudGlmeSB0aGUgbm9kZSB3aGVyZSBzZWxlY3Rpb24gY3VycmVudGx5IGJlZ2lucywgdGhlbiBvYnNlcnZlXG4gKiBib3RoIGl0cyB0ZXh0IGNvbnRlbnQgYW5kIGl0cyBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBET00uIFNpbmNlIHRoZVxuICogYnJvd3NlciBtYXkgbmF0aXZlbHkgcmVwbGFjZSB0aGUgdGFyZ2V0IG5vZGUgZHVyaW5nIGNvbXBvc2l0aW9uLCB3ZSBjYW5cbiAqIHVzZSBpdHMgcG9zaXRpb24gdG8gZmluZCBpdHMgcmVwbGFjZW1lbnQuXG4gKlxuICpcbiAqL1xudmFyIHJvb3QgPSBudWxsO1xudmFyIHN0YXJ0VGV4dCA9IG51bGw7XG52YXIgZmFsbGJhY2tUZXh0ID0gbnVsbDtcbmZ1bmN0aW9uIGluaXRpYWxpemUobmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcm9vdCA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICBzdGFydFRleHQgPSBnZXRUZXh0KCk7XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gcmVzZXQoKSB7XG4gIHJvb3QgPSBudWxsO1xuICBzdGFydFRleHQgPSBudWxsO1xuICBmYWxsYmFja1RleHQgPSBudWxsO1xufVxuZnVuY3Rpb24gZ2V0RGF0YSgpIHtcbiAgaWYgKGZhbGxiYWNrVGV4dCkge1xuICAgIHJldHVybiBmYWxsYmFja1RleHQ7XG4gIH1cblxuICB2YXIgc3RhcnQ7XG4gIHZhciBzdGFydFZhbHVlID0gc3RhcnRUZXh0O1xuICB2YXIgc3RhcnRMZW5ndGggPSBzdGFydFZhbHVlLmxlbmd0aDtcbiAgdmFyIGVuZDtcbiAgdmFyIGVuZFZhbHVlID0gZ2V0VGV4dCgpO1xuICB2YXIgZW5kTGVuZ3RoID0gZW5kVmFsdWUubGVuZ3RoO1xuXG4gIGZvciAoc3RhcnQgPSAwOyBzdGFydCA8IHN0YXJ0TGVuZ3RoOyBzdGFydCsrKSB7XG4gICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRdICE9PSBlbmRWYWx1ZVtzdGFydF0pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtaW5FbmQgPSBzdGFydExlbmd0aCAtIHN0YXJ0O1xuXG4gIGZvciAoZW5kID0gMTsgZW5kIDw9IG1pbkVuZDsgZW5kKyspIHtcbiAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydExlbmd0aCAtIGVuZF0gIT09IGVuZFZhbHVlW2VuZExlbmd0aCAtIGVuZF0pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzbGljZVRhaWwgPSBlbmQgPiAxID8gMSAtIGVuZCA6IHVuZGVmaW5lZDtcbiAgZmFsbGJhY2tUZXh0ID0gZW5kVmFsdWUuc2xpY2Uoc3RhcnQsIHNsaWNlVGFpbCk7XG4gIHJldHVybiBmYWxsYmFja1RleHQ7XG59XG5mdW5jdGlvbiBnZXRUZXh0KCkge1xuICBpZiAoJ3ZhbHVlJyBpbiByb290KSB7XG4gICAgcmV0dXJuIHJvb3QudmFsdWU7XG4gIH1cblxuICByZXR1cm4gcm9vdC50ZXh0Q29udGVudDtcbn1cblxuLyoqXG4gKiBgY2hhckNvZGVgIHJlcHJlc2VudHMgdGhlIGFjdHVhbCBcImNoYXJhY3RlciBjb2RlXCIgYW5kIGlzIHNhZmUgdG8gdXNlIHdpdGhcbiAqIGBTdHJpbmcuZnJvbUNoYXJDb2RlYC4gQXMgc3VjaCwgb25seSBrZXlzIHRoYXQgY29ycmVzcG9uZCB0byBwcmludGFibGVcbiAqIGNoYXJhY3RlcnMgcHJvZHVjZSBhIHZhbGlkIGBjaGFyQ29kZWAsIHRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGlzIEVudGVyLlxuICogVGhlIFRhYi1rZXkgaXMgY29uc2lkZXJlZCBub24tcHJpbnRhYmxlIGFuZCBkb2VzIG5vdCBoYXZlIGEgYGNoYXJDb2RlYCxcbiAqIHByZXN1bWFibHkgYmVjYXVzZSBpdCBkb2VzIG5vdCBwcm9kdWNlIGEgdGFiLWNoYXJhY3RlciBpbiBicm93c2Vycy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IE5vcm1hbGl6ZWQgYGNoYXJDb2RlYCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICB2YXIgY2hhckNvZGU7XG4gIHZhciBrZXlDb2RlID0gbmF0aXZlRXZlbnQua2V5Q29kZTtcblxuICBpZiAoJ2NoYXJDb2RlJyBpbiBuYXRpdmVFdmVudCkge1xuICAgIGNoYXJDb2RlID0gbmF0aXZlRXZlbnQuY2hhckNvZGU7IC8vIEZGIGRvZXMgbm90IHNldCBgY2hhckNvZGVgIGZvciB0aGUgRW50ZXIta2V5LCBjaGVjayBhZ2FpbnN0IGBrZXlDb2RlYC5cblxuICAgIGlmIChjaGFyQ29kZSA9PT0gMCAmJiBrZXlDb2RlID09PSAxMykge1xuICAgICAgY2hhckNvZGUgPSAxMztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSUU4IGRvZXMgbm90IGltcGxlbWVudCBgY2hhckNvZGVgLCBidXQgYGtleUNvZGVgIGhhcyB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICBjaGFyQ29kZSA9IGtleUNvZGU7XG4gIH0gLy8gSUUgYW5kIEVkZ2UgKG9uIFdpbmRvd3MpIGFuZCBDaHJvbWUgLyBTYWZhcmkgKG9uIFdpbmRvd3MgYW5kIExpbnV4KVxuICAvLyByZXBvcnQgRW50ZXIgYXMgY2hhckNvZGUgMTAgd2hlbiBjdHJsIGlzIHByZXNzZWQuXG5cblxuICBpZiAoY2hhckNvZGUgPT09IDEwKSB7XG4gICAgY2hhckNvZGUgPSAxMztcbiAgfSAvLyBTb21lIG5vbi1wcmludGFibGUga2V5cyBhcmUgcmVwb3J0ZWQgaW4gYGNoYXJDb2RlYC9ga2V5Q29kZWAsIGRpc2NhcmQgdGhlbS5cbiAgLy8gTXVzdCBub3QgZGlzY2FyZCB0aGUgKG5vbi0pcHJpbnRhYmxlIEVudGVyLWtleS5cblxuXG4gIGlmIChjaGFyQ29kZSA+PSAzMiB8fCBjaGFyQ29kZSA9PT0gMTMpIHtcbiAgICByZXR1cm4gY2hhckNvZGU7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn0gLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGEgZmFjdG9yeSBzbyB0aGF0IHdlIGhhdmUgZGlmZmVyZW50IHJldHVybmVkIGNvbnN0cnVjdG9ycy5cbi8vIElmIHdlIGhhZCBhIHNpbmdsZSBjb25zdHJ1Y3RvciwgaXQgd291bGQgYmUgbWVnYW1vcnBoaWMgYW5kIGVuZ2luZXMgd291bGQgZGVvcHQuXG5cblxuZnVuY3Rpb24gY3JlYXRlU3ludGhldGljRXZlbnQoSW50ZXJmYWNlKSB7XG4gIC8qKlxuICAgKiBTeW50aGV0aWMgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGJ5IGV2ZW50IHBsdWdpbnMsIHR5cGljYWxseSBpbiByZXNwb25zZSB0byBhXG4gICAqIHRvcC1sZXZlbCBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXIuXG4gICAqXG4gICAqIFRoZXNlIHN5c3RlbXMgc2hvdWxkIGdlbmVyYWxseSB1c2UgcG9vbGluZyB0byByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBnYXJiYWdlXG4gICAqIGNvbGxlY3Rpb24uIFRoZSBzeXN0ZW0gc2hvdWxkIGNoZWNrIGBpc1BlcnNpc3RlbnRgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxuICAgKiBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgaW50byB0aGUgcG9vbCBhZnRlciBiZWluZyBkaXNwYXRjaGVkLiBVc2VycyB0aGF0XG4gICAqIG5lZWQgYSBwZXJzaXN0ZWQgZXZlbnQgc2hvdWxkIGludm9rZSBgcGVyc2lzdGAuXG4gICAqXG4gICAqIFN5bnRoZXRpYyBldmVudHMgKGFuZCBzdWJjbGFzc2VzKSBpbXBsZW1lbnQgdGhlIERPTSBMZXZlbCAzIEV2ZW50cyBBUEkgYnlcbiAgICogbm9ybWFsaXppbmcgYnJvd3NlciBxdWlya3MuIFN1YmNsYXNzZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gaW1wbGVtZW50IGFcbiAgICogRE9NIGludGVyZmFjZTsgY3VzdG9tIGFwcGxpY2F0aW9uLXNwZWNpZmljIGV2ZW50cyBjYW4gYWxzbyBzdWJjbGFzcyB0aGlzLlxuICAgKi9cbiAgZnVuY3Rpb24gU3ludGhldGljQmFzZUV2ZW50KHJlYWN0TmFtZSwgcmVhY3RFdmVudFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHRoaXMuX3JlYWN0TmFtZSA9IHJlYWN0TmFtZTtcbiAgICB0aGlzLl90YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgICB0aGlzLnR5cGUgPSByZWFjdEV2ZW50VHlwZTtcbiAgICB0aGlzLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgdGhpcy50YXJnZXQgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgICB0aGlzLmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgX3Byb3BOYW1lIGluIEludGVyZmFjZSkge1xuICAgICAgaWYgKCFJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkoX3Byb3BOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5vcm1hbGl6ZSA9IEludGVyZmFjZVtfcHJvcE5hbWVdO1xuXG4gICAgICBpZiAobm9ybWFsaXplKSB7XG4gICAgICAgIHRoaXNbX3Byb3BOYW1lXSA9IG5vcm1hbGl6ZShuYXRpdmVFdmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW19wcm9wTmFtZV0gPSBuYXRpdmVFdmVudFtfcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UHJldmVudGVkID0gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCAhPSBudWxsID8gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCA6IG5hdGl2ZUV2ZW50LnJldHVyblZhbHVlID09PSBmYWxzZTtcblxuICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX2Fzc2lnbihTeW50aGV0aWNCYXNlRXZlbnQucHJvdG90eXBlLCB7XG4gICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vICRGbG93Rml4TWUgLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LnJldHVyblZhbHVlICE9PSAndW5rbm93bicpIHtcbiAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9LFxuICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcblxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vICRGbG93Rml4TWUgLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAgIC8vIFRoZSBDaGFuZ2VFdmVudFBsdWdpbiByZWdpc3RlcnMgYSBcInByb3BlcnR5Y2hhbmdlXCIgZXZlbnQgZm9yXG4gICAgICAgIC8vIElFLiBUaGlzIGV2ZW50IGRvZXMgbm90IHN1cHBvcnQgYnViYmxpbmcgb3IgY2FuY2VsbGluZywgYW5kXG4gICAgICAgIC8vIGFueSByZWZlcmVuY2VzIHRvIGNhbmNlbEJ1YmJsZSB0aHJvdyBcIk1lbWJlciBub3QgZm91bmRcIi4gIEFcbiAgICAgICAgLy8gdHlwZW9mIGNoZWNrIG9mIFwidW5rbm93blwiIGNpcmN1bXZlbnRzIHRoaXMgaXNzdWUgKGFuZCBpcyBhbHNvXG4gICAgICAgIC8vIElFIHNwZWNpZmljKS5cbiAgICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXZSByZWxlYXNlIGFsbCBkaXNwYXRjaGVkIGBTeW50aGV0aWNFdmVudGBzIGFmdGVyIGVhY2ggZXZlbnQgbG9vcCwgYWRkaW5nXG4gICAgICogdGhlbSBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgYWxsb3dzIGEgd2F5IHRvIGhvbGQgb250byBhIHJlZmVyZW5jZSB0aGF0XG4gICAgICogd29uJ3QgYmUgYWRkZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgICAqL1xuICAgIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHsvLyBNb2Rlcm4gZXZlbnQgc3lzdGVtIGRvZXNuJ3QgdXNlIHBvb2xpbmcuXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGlzIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGlzUGVyc2lzdGVudDogZnVuY3Rpb25UaGF0UmV0dXJuc1RydWVcbiAgfSk7XG5cbiAgcmV0dXJuIFN5bnRoZXRpY0Jhc2VFdmVudDtcbn1cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGV2ZW50UGhhc2U6IDAsXG4gIGJ1YmJsZXM6IDAsXG4gIGNhbmNlbGFibGU6IDAsXG4gIHRpbWVTdGFtcDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuICB9LFxuICBkZWZhdWx0UHJldmVudGVkOiAwLFxuICBpc1RydXN0ZWQ6IDBcbn07XG52YXIgU3ludGhldGljRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChFdmVudEludGVyZmFjZSk7XG5cbnZhciBVSUV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgdmlldzogMCxcbiAgZGV0YWlsOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChVSUV2ZW50SW50ZXJmYWNlKTtcbnZhciBsYXN0TW92ZW1lbnRYO1xudmFyIGxhc3RNb3ZlbWVudFk7XG52YXIgbGFzdE1vdXNlRXZlbnQ7XG5cbmZ1bmN0aW9uIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KSB7XG4gIGlmIChldmVudCAhPT0gbGFzdE1vdXNlRXZlbnQpIHtcbiAgICBpZiAobGFzdE1vdXNlRXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcbiAgICAgIGxhc3RNb3ZlbWVudFggPSBldmVudC5zY3JlZW5YIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWDtcbiAgICAgIGxhc3RNb3ZlbWVudFkgPSBldmVudC5zY3JlZW5ZIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdE1vdmVtZW50WCA9IDA7XG4gICAgICBsYXN0TW92ZW1lbnRZID0gMDtcbiAgICB9XG5cbiAgICBsYXN0TW91c2VFdmVudCA9IGV2ZW50O1xuICB9XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgTW91c2VFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgTW91c2VFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgc2NyZWVuWDogMCxcbiAgc2NyZWVuWTogMCxcbiAgY2xpZW50WDogMCxcbiAgY2xpZW50WTogMCxcbiAgcGFnZVg6IDAsXG4gIHBhZ2VZOiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIGJ1dHRvbjogMCxcbiAgYnV0dG9uczogMCxcbiAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGV2ZW50LmZyb21FbGVtZW50ID09PSBldmVudC5zcmNFbGVtZW50ID8gZXZlbnQudG9FbGVtZW50IDogZXZlbnQuZnJvbUVsZW1lbnQ7XG4gICAgcmV0dXJuIGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gIH0sXG4gIG1vdmVtZW50WDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCdtb3ZlbWVudFgnIGluIGV2ZW50KSB7XG4gICAgICByZXR1cm4gZXZlbnQubW92ZW1lbnRYO1xuICAgIH1cblxuICAgIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KTtcbiAgICByZXR1cm4gbGFzdE1vdmVtZW50WDtcbiAgfSxcbiAgbW92ZW1lbnRZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoJ21vdmVtZW50WScgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBldmVudC5tb3ZlbWVudFk7XG4gICAgfSAvLyBEb24ndCBuZWVkIHRvIGNhbGwgdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoKSBoZXJlXG4gICAgLy8gYmVjYXVzZSBpdCdzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhbHJlYWR5IHJ1biB3aGVuIG1vdmVtZW50WFxuICAgIC8vIHdhcyBjb3BpZWQuXG5cblxuICAgIHJldHVybiBsYXN0TW92ZW1lbnRZO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChNb3VzZUV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBEcmFnRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBEcmFnRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIGRhdGFUcmFuc2ZlcjogMFxufSk7XG5cbnZhciBTeW50aGV0aWNEcmFnRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChEcmFnRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEZvY3VzRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBGb2N1c0V2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICByZWxhdGVkVGFyZ2V0OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0ZvY3VzRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChGb2N1c0V2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWFuaW1hdGlvbnMvI0FuaW1hdGlvbkV2ZW50LWludGVyZmFjZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQW5pbWF0aW9uRXZlbnRcbiAqL1xuXG52YXIgQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBhbmltYXRpb25OYW1lOiAwLFxuICBlbGFwc2VkVGltZTogMCxcbiAgcHNldWRvRWxlbWVudDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNBbmltYXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jbGlwYm9hcmQtYXBpcy9cbiAqL1xuXG52YXIgQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBjbGlwYm9hcmREYXRhOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2NsaXBib2FyZERhdGEnIGluIGV2ZW50ID8gZXZlbnQuY2xpcGJvYXJkRGF0YSA6IHdpbmRvdy5jbGlwYm9hcmREYXRhO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWNvbXBvc2l0aW9uZXZlbnRzXG4gKi9cblxudmFyIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBkYXRhOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNVxuICogICAgICAvI2V2ZW50cy1pbnB1dGV2ZW50c1xuICovXG4vLyBIYXBwZW5zIHRvIHNoYXJlIHRoZSBzYW1lIGxpc3QgZm9yIG5vdy5cblxudmFyIFN5bnRoZXRpY0lucHV0RXZlbnQgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50O1xuLyoqXG4gKiBOb3JtYWxpemF0aW9uIG9mIGRlcHJlY2F0ZWQgSFRNTDUgYGtleWAgdmFsdWVzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciBub3JtYWxpemVLZXkgPSB7XG4gIEVzYzogJ0VzY2FwZScsXG4gIFNwYWNlYmFyOiAnICcsXG4gIExlZnQ6ICdBcnJvd0xlZnQnLFxuICBVcDogJ0Fycm93VXAnLFxuICBSaWdodDogJ0Fycm93UmlnaHQnLFxuICBEb3duOiAnQXJyb3dEb3duJyxcbiAgRGVsOiAnRGVsZXRlJyxcbiAgV2luOiAnT1MnLFxuICBNZW51OiAnQ29udGV4dE1lbnUnLFxuICBBcHBzOiAnQ29udGV4dE1lbnUnLFxuICBTY3JvbGw6ICdTY3JvbGxMb2NrJyxcbiAgTW96UHJpbnRhYmxlS2V5OiAnVW5pZGVudGlmaWVkJ1xufTtcbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBsZWdhY3kgYGtleUNvZGVgIHRvIEhUTUw1IGBrZXlgXG4gKiBPbmx5IHNwZWNpYWwga2V5cyBzdXBwb3J0ZWQsIGFsbCBvdGhlcnMgZGVwZW5kIG9uIGtleWJvYXJkIGxheW91dCBvciBicm93c2VyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciB0cmFuc2xhdGVUb0tleSA9IHtcbiAgJzgnOiAnQmFja3NwYWNlJyxcbiAgJzknOiAnVGFiJyxcbiAgJzEyJzogJ0NsZWFyJyxcbiAgJzEzJzogJ0VudGVyJyxcbiAgJzE2JzogJ1NoaWZ0JyxcbiAgJzE3JzogJ0NvbnRyb2wnLFxuICAnMTgnOiAnQWx0JyxcbiAgJzE5JzogJ1BhdXNlJyxcbiAgJzIwJzogJ0NhcHNMb2NrJyxcbiAgJzI3JzogJ0VzY2FwZScsXG4gICczMic6ICcgJyxcbiAgJzMzJzogJ1BhZ2VVcCcsXG4gICczNCc6ICdQYWdlRG93bicsXG4gICczNSc6ICdFbmQnLFxuICAnMzYnOiAnSG9tZScsXG4gICczNyc6ICdBcnJvd0xlZnQnLFxuICAnMzgnOiAnQXJyb3dVcCcsXG4gICczOSc6ICdBcnJvd1JpZ2h0JyxcbiAgJzQwJzogJ0Fycm93RG93bicsXG4gICc0NSc6ICdJbnNlcnQnLFxuICAnNDYnOiAnRGVsZXRlJyxcbiAgJzExMic6ICdGMScsXG4gICcxMTMnOiAnRjInLFxuICAnMTE0JzogJ0YzJyxcbiAgJzExNSc6ICdGNCcsXG4gICcxMTYnOiAnRjUnLFxuICAnMTE3JzogJ0Y2JyxcbiAgJzExOCc6ICdGNycsXG4gICcxMTknOiAnRjgnLFxuICAnMTIwJzogJ0Y5JyxcbiAgJzEyMSc6ICdGMTAnLFxuICAnMTIyJzogJ0YxMScsXG4gICcxMjMnOiAnRjEyJyxcbiAgJzE0NCc6ICdOdW1Mb2NrJyxcbiAgJzE0NSc6ICdTY3JvbGxMb2NrJyxcbiAgJzIyNCc6ICdNZXRhJ1xufTtcbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIGBrZXlgIHByb3BlcnR5LlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50S2V5KG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5rZXkpIHtcbiAgICAvLyBOb3JtYWxpemUgaW5jb25zaXN0ZW50IHZhbHVlcyByZXBvcnRlZCBieSBicm93c2VycyBkdWUgdG9cbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgb2YgYSB3b3JraW5nIGRyYWZ0IHNwZWNpZmljYXRpb24uXG4gICAgLy8gRmlyZUZveCBpbXBsZW1lbnRzIGBrZXlgIGJ1dCByZXR1cm5zIGBNb3pQcmludGFibGVLZXlgIGZvciBhbGxcbiAgICAvLyBwcmludGFibGUgY2hhcmFjdGVycyAobm9ybWFsaXplZCB0byBgVW5pZGVudGlmaWVkYCksIGlnbm9yZSBpdC5cbiAgICB2YXIga2V5ID0gbm9ybWFsaXplS2V5W25hdGl2ZUV2ZW50LmtleV0gfHwgbmF0aXZlRXZlbnQua2V5O1xuXG4gICAgaWYgKGtleSAhPT0gJ1VuaWRlbnRpZmllZCcpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9IC8vIEJyb3dzZXIgZG9lcyBub3QgaW1wbGVtZW50IGBrZXlgLCBwb2x5ZmlsbCBhcyBtdWNoIG9mIGl0IGFzIHdlIGNhbi5cblxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgdmFyIGNoYXJDb2RlID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCk7IC8vIFRoZSBlbnRlci1rZXkgaXMgdGVjaG5pY2FsbHkgYm90aCBwcmludGFibGUgYW5kIG5vbi1wcmludGFibGUgYW5kIGNhblxuICAgIC8vIHRodXMgYmUgY2FwdHVyZWQgYnkgYGtleXByZXNzYCwgbm8gb3RoZXIgbm9uLXByaW50YWJsZSBrZXkgc2hvdWxkLlxuXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSAxMyA/ICdFbnRlcicgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgfVxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5ZG93bicgfHwgbmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgIC8vIFdoaWxlIHVzZXIga2V5Ym9hcmQgbGF5b3V0IGRldGVybWluZXMgdGhlIGFjdHVhbCBtZWFuaW5nIG9mIGVhY2hcbiAgICAvLyBga2V5Q29kZWAgdmFsdWUsIGFsbW9zdCBhbGwgZnVuY3Rpb24ga2V5cyBoYXZlIGEgdW5pdmVyc2FsIHZhbHVlLlxuICAgIHJldHVybiB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVudGlmaWVkJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBtb2RpZmllciBrZXkgdG8gdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIGV2ZW50LlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2tleXMtTW9kaWZpZXJzXG4gKi9cblxuXG52YXIgbW9kaWZpZXJLZXlUb1Byb3AgPSB7XG4gIEFsdDogJ2FsdEtleScsXG4gIENvbnRyb2w6ICdjdHJsS2V5JyxcbiAgTWV0YTogJ21ldGFLZXknLFxuICBTaGlmdDogJ3NoaWZ0S2V5J1xufTsgLy8gT2xkZXIgYnJvd3NlcnMgKFNhZmFyaSA8PSAxMCwgaU9TIFNhZmFyaSA8PSAxMC4yKSBkbyBub3Qgc3VwcG9ydFxuLy8gZ2V0TW9kaWZpZXJTdGF0ZS4gSWYgZ2V0TW9kaWZpZXJTdGF0ZSBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBtYXAgaXQgdG8gYSBzZXQgb2Zcbi8vIG1vZGlmaWVyIGtleXMgZXhwb3NlZCBieSB0aGUgZXZlbnQuIEluIHRoaXMgY2FzZSwgTG9jay1rZXlzIGFyZSBub3Qgc3VwcG9ydGVkLlxuXG5mdW5jdGlvbiBtb2RpZmllclN0YXRlR2V0dGVyKGtleUFyZykge1xuICB2YXIgc3ludGhldGljRXZlbnQgPSB0aGlzO1xuICB2YXIgbmF0aXZlRXZlbnQgPSBzeW50aGV0aWNFdmVudC5uYXRpdmVFdmVudDtcblxuICBpZiAobmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSkge1xuICAgIHJldHVybiBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKGtleUFyZyk7XG4gIH1cblxuICB2YXIga2V5UHJvcCA9IG1vZGlmaWVyS2V5VG9Qcm9wW2tleUFyZ107XG4gIHJldHVybiBrZXlQcm9wID8gISFuYXRpdmVFdmVudFtrZXlQcm9wXSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG1vZGlmaWVyU3RhdGVHZXR0ZXI7XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgS2V5Ym9hcmRFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgS2V5Ym9hcmRFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAga2V5OiBnZXRFdmVudEtleSxcbiAgY29kZTogMCxcbiAgbG9jYXRpb246IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIHJlcGVhdDogMCxcbiAgbG9jYWxlOiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIC8vIExlZ2FjeSBJbnRlcmZhY2VcbiAgY2hhckNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGBjaGFyQ29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleVByZXNzIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHRoZSBhY3R1YWwgcHJpbnRhYmxlIGNoYXJhY3Rlci5cbiAgICAvLyBLZXlQcmVzcyBpcyBkZXByZWNhdGVkLCBidXQgaXRzIHJlcGxhY2VtZW50IGlzIG5vdCB5ZXQgZmluYWwgYW5kIG5vdFxuICAgIC8vIGltcGxlbWVudGVkIGluIGFueSBtYWpvciBicm93c2VyLiBPbmx5IEtleVByZXNzIGhhcyBjaGFyQ29kZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9LFxuICBrZXlDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBga2V5Q29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleURvd24vVXAgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gcGh5c2ljYWwga2V5Ym9hcmQga2V5LlxuICAgIC8vIFRoZSBhY3R1YWwgbWVhbmluZyBvZiB0aGUgdmFsdWUgZGVwZW5kcyBvbiB0aGUgdXNlcnMnIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHdoaWNoIGNhbm5vdCBiZSBkZXRlY3RlZC4gQXNzdW1pbmcgdGhhdCBpdCBpcyBhIFVTIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHByb3ZpZGVzIGEgc3VycHJpc2luZ2x5IGFjY3VyYXRlIG1hcHBpbmcgZm9yIFVTIGFuZCBFdXJvcGVhbiB1c2Vycy5cbiAgICAvLyBEdWUgdG8gdGhpcywgaXQgaXMgbGVmdCB0byB0aGUgdXNlciB0byBpbXBsZW1lbnQgYXQgdGhpcyB0aW1lLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIHdoaWNoOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgd2hpY2hgIGlzIGFuIGFsaWFzIGZvciBlaXRoZXIgYGtleUNvZGVgIG9yIGBjaGFyQ29kZWAgZGVwZW5kaW5nIG9uIHRoZVxuICAgIC8vIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNLZXlib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoS2V5Ym9hcmRFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgUG9pbnRlckV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvXG4gKi9cblxudmFyIFBvaW50ZXJFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgcG9pbnRlcklkOiAwLFxuICB3aWR0aDogMCxcbiAgaGVpZ2h0OiAwLFxuICBwcmVzc3VyZTogMCxcbiAgdGFuZ2VudGlhbFByZXNzdXJlOiAwLFxuICB0aWx0WDogMCxcbiAgdGlsdFk6IDAsXG4gIHR3aXN0OiAwLFxuICBwb2ludGVyVHlwZTogMCxcbiAgaXNQcmltYXJ5OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1BvaW50ZXJFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFBvaW50ZXJFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgVG91Y2hFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi90b3VjaC1ldmVudHMvXG4gKi9cblxudmFyIFRvdWNoRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHRvdWNoZXM6IDAsXG4gIHRhcmdldFRvdWNoZXM6IDAsXG4gIGNoYW5nZWRUb3VjaGVzOiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbn0pO1xuXG52YXIgU3ludGhldGljVG91Y2hFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRvdWNoRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDkvV0QtY3NzMy10cmFuc2l0aW9ucy0yMDA5MDMyMC8jdHJhbnNpdGlvbi1ldmVudHMtXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UcmFuc2l0aW9uRXZlbnRcbiAqL1xuXG52YXIgVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgcHJvcGVydHlOYW1lOiAwLFxuICBlbGFwc2VkVGltZTogMCxcbiAgcHNldWRvRWxlbWVudDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFdoZWVsRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBXaGVlbEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBkZWx0YVg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWGAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChyaWdodCBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGFYJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWCA6IDA7XG4gIH0sXG4gIGRlbHRhWTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFZYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVkgOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YWAgZm9yIElFPDkgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGEnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGEgOiAwO1xuICB9LFxuICBkZWx0YVo6IDAsXG4gIC8vIEJyb3dzZXJzIHdpdGhvdXQgXCJkZWx0YU1vZGVcIiBpcyByZXBvcnRpbmcgaW4gcmF3IHdoZWVsIGRlbHRhIHdoZXJlIG9uZVxuICAvLyBub3RjaCBvbiB0aGUgc2Nyb2xsIGlzIGFsd2F5cyArLy0gMTIwLCByb3VnaGx5IGVxdWl2YWxlbnQgdG8gcGl4ZWxzLlxuICAvLyBBIGdvb2QgYXBwcm94aW1hdGlvbiBvZiBET01fREVMVEFfTElORSAoMSkgaXMgNSUgb2Ygdmlld3BvcnQgc2l6ZSBvclxuICAvLyB+NDAgcGl4ZWxzLCBmb3IgRE9NX0RFTFRBX1NDUkVFTiAoMikgaXQgaXMgODcuNSUgb2Ygdmlld3BvcnQgc2l6ZS5cbiAgZGVsdGFNb2RlOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1doZWVsRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChXaGVlbEV2ZW50SW50ZXJmYWNlKTtcblxudmFyIEVORF9LRVlDT0RFUyA9IFs5LCAxMywgMjcsIDMyXTsgLy8gVGFiLCBSZXR1cm4sIEVzYywgU3BhY2VcblxudmFyIFNUQVJUX0tFWUNPREUgPSAyMjk7XG52YXIgY2FuVXNlQ29tcG9zaXRpb25FdmVudCA9IGNhblVzZURPTSAmJiAnQ29tcG9zaXRpb25FdmVudCcgaW4gd2luZG93O1xudmFyIGRvY3VtZW50TW9kZSA9IG51bGw7XG5cbmlmIChjYW5Vc2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQpIHtcbiAgZG9jdW1lbnRNb2RlID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xufSAvLyBXZWJraXQgb2ZmZXJzIGEgdmVyeSB1c2VmdWwgYHRleHRJbnB1dGAgZXZlbnQgdGhhdCBjYW4gYmUgdXNlZCB0b1xuLy8gZGlyZWN0bHkgcmVwcmVzZW50IGBiZWZvcmVJbnB1dGAuIFRoZSBJRSBgdGV4dGlucHV0YCBldmVudCBpcyBub3QgYXNcbi8vIHVzZWZ1bCwgc28gd2UgZG9uJ3QgdXNlIGl0LlxuXG5cbnZhciBjYW5Vc2VUZXh0SW5wdXRFdmVudCA9IGNhblVzZURPTSAmJiAnVGV4dEV2ZW50JyBpbiB3aW5kb3cgJiYgIWRvY3VtZW50TW9kZTsgLy8gSW4gSUU5Kywgd2UgaGF2ZSBhY2Nlc3MgdG8gY29tcG9zaXRpb24gZXZlbnRzLCBidXQgdGhlIGRhdGEgc3VwcGxpZWRcbi8vIGJ5IHRoZSBuYXRpdmUgY29tcG9zaXRpb25lbmQgZXZlbnQgbWF5IGJlIGluY29ycmVjdC4gSmFwYW5lc2UgaWRlb2dyYXBoaWNcbi8vIHNwYWNlcywgZm9yIGluc3RhbmNlIChcXHUzMDAwKSBhcmUgbm90IHJlY29yZGVkIGNvcnJlY3RseS5cblxudmFyIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhID0gY2FuVXNlRE9NICYmICghY2FuVXNlQ29tcG9zaXRpb25FdmVudCB8fCBkb2N1bWVudE1vZGUgJiYgZG9jdW1lbnRNb2RlID4gOCAmJiBkb2N1bWVudE1vZGUgPD0gMTEpO1xudmFyIFNQQUNFQkFSX0NPREUgPSAzMjtcbnZhciBTUEFDRUJBUl9DSEFSID0gU3RyaW5nLmZyb21DaGFyQ29kZShTUEFDRUJBUl9DT0RFKTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25CZWZvcmVJbnB1dCcsIFsnY29tcG9zaXRpb25lbmQnLCAna2V5cHJlc3MnLCAndGV4dElucHV0JywgJ3Bhc3RlJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25FbmQnLCBbJ2NvbXBvc2l0aW9uZW5kJywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25TdGFydCcsIFsnY29tcG9zaXRpb25zdGFydCcsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uVXBkYXRlJywgWydjb21wb3NpdGlvbnVwZGF0ZScsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbn0gLy8gVHJhY2sgd2hldGhlciB3ZSd2ZSBldmVyIGhhbmRsZWQgYSBrZXlwcmVzcyBvbiB0aGUgc3BhY2Uga2V5LlxuXG5cbnZhciBoYXNTcGFjZUtleXByZXNzID0gZmFsc2U7XG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGEgbmF0aXZlIGtleXByZXNzIGV2ZW50IGlzIGFzc3VtZWQgdG8gYmUgYSBjb21tYW5kLlxuICogVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIEZpcmVmb3ggZmlyZXMgYGtleXByZXNzYCBldmVudHMgZm9yIGtleSBjb21tYW5kc1xuICogKGN1dCwgY29weSwgc2VsZWN0LWFsbCwgZXRjLikgZXZlbiB0aG91Z2ggbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLlxuICovXG5cbmZ1bmN0aW9uIGlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiAobmF0aXZlRXZlbnQuY3RybEtleSB8fCBuYXRpdmVFdmVudC5hbHRLZXkgfHwgbmF0aXZlRXZlbnQubWV0YUtleSkgJiYgLy8gY3RybEtleSAmJiBhbHRLZXkgaXMgZXF1aXZhbGVudCB0byBBbHRHciwgYW5kIGlzIG5vdCBhIGNvbW1hbmQuXG4gICEobmF0aXZlRXZlbnQuY3RybEtleSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpO1xufVxuLyoqXG4gKiBUcmFuc2xhdGUgbmF0aXZlIHRvcCBsZXZlbCBldmVudHMgaW50byBldmVudCB0eXBlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKGRvbUV2ZW50TmFtZSkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2NvbXBvc2l0aW9uc3RhcnQnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uU3RhcnQnO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uRW5kJztcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9udXBkYXRlJzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvblVwZGF0ZSc7XG4gIH1cbn1cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgYmVzdC1ndWVzcyBtb2RlbCB0aGluayB0aGlzIGV2ZW50IHNpZ25pZmllcyB0aGF0XG4gKiBjb21wb3NpdGlvbiBoYXMgYmVndW4/XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBkb21FdmVudE5hbWUgPT09ICdrZXlkb3duJyAmJiBuYXRpdmVFdmVudC5rZXlDb2RlID09PSBTVEFSVF9LRVlDT0RFO1xufVxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBtb2RlIHRoaW5rIHRoYXQgdGhpcyBldmVudCBpcyB0aGUgZW5kIG9mIGNvbXBvc2l0aW9uP1xuICovXG5cblxuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICAvLyBDb21tYW5kIGtleXMgaW5zZXJ0IG9yIGNsZWFyIElNRSBpbnB1dC5cbiAgICAgIHJldHVybiBFTkRfS0VZQ09ERVMuaW5kZXhPZihuYXRpdmVFdmVudC5rZXlDb2RlKSAhPT0gLTE7XG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICAgIC8vIEV4cGVjdCBJTUUga2V5Q29kZSBvbiBlYWNoIGtleWRvd24uIElmIHdlIGdldCBhbnkgb3RoZXJcbiAgICAgIC8vIGNvZGUgd2UgbXVzdCBoYXZlIGV4aXRlZCBlYXJsaWVyLlxuICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmtleUNvZGUgIT09IFNUQVJUX0tFWUNPREU7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICAvLyBFdmVudHMgYXJlIG5vdCBwb3NzaWJsZSB3aXRob3V0IGNhbmNlbGxpbmcgSU1FLlxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdvb2dsZSBJbnB1dCBUb29scyBwcm92aWRlcyBjb21wb3NpdGlvbiBkYXRhIHZpYSBhIEN1c3RvbUV2ZW50LFxuICogd2l0aCB0aGUgYGRhdGFgIHByb3BlcnR5IHBvcHVsYXRlZCBpbiB0aGUgYGRldGFpbGAgb2JqZWN0LiBJZiB0aGlzXG4gKiBpcyBhdmFpbGFibGUgb24gdGhlIGV2ZW50IG9iamVjdCwgdXNlIGl0LiBJZiBub3QsIHRoaXMgaXMgYSBwbGFpblxuICogY29tcG9zaXRpb24gZXZlbnQgYW5kIHdlIGhhdmUgbm90aGluZyBzcGVjaWFsIHRvIGV4dHJhY3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgZGV0YWlsID0gbmF0aXZlRXZlbnQuZGV0YWlsO1xuXG4gIGlmICh0eXBlb2YgZGV0YWlsID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gZGV0YWlsKSB7XG4gICAgcmV0dXJuIGRldGFpbC5kYXRhO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIENoZWNrIGlmIGEgY29tcG9zaXRpb24gZXZlbnQgd2FzIHRyaWdnZXJlZCBieSBLb3JlYW4gSU1FLlxuICogT3VyIGZhbGxiYWNrIG1vZGUgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggSUUncyBLb3JlYW4gSU1FLFxuICogc28ganVzdCB1c2UgbmF0aXZlIGNvbXBvc2l0aW9uIGV2ZW50cyB3aGVuIEtvcmVhbiBJTUUgaXMgdXNlZC5cbiAqIEFsdGhvdWdoIENvbXBvc2l0aW9uRXZlbnQubG9jYWxlIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQsXG4gKiBpdCBpcyBhdmFpbGFibGUgaW4gSUUsIHdoZXJlIG91ciBmYWxsYmFjayBtb2RlIGlzIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbmF0aXZlRXZlbnQubG9jYWxlID09PSAna28nO1xufSAvLyBUcmFjayB0aGUgY3VycmVudCBJTUUgY29tcG9zaXRpb24gc3RhdHVzLCBpZiBhbnkuXG5cblxudmFyIGlzQ29tcG9zaW5nID0gZmFsc2U7XG4vKipcbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5cbiAqL1xuXG5mdW5jdGlvbiBleHRyYWN0Q29tcG9zaXRpb25FdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgZXZlbnRUeXBlO1xuICB2YXIgZmFsbGJhY2tEYXRhO1xuXG4gIGlmIChjYW5Vc2VDb21wb3NpdGlvbkV2ZW50KSB7XG4gICAgZXZlbnRUeXBlID0gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUoZG9tRXZlbnROYW1lKTtcbiAgfSBlbHNlIGlmICghaXNDb21wb3NpbmcpIHtcbiAgICBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIGV2ZW50VHlwZSA9ICdvbkNvbXBvc2l0aW9uU3RhcnQnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICBldmVudFR5cGUgPSAnb25Db21wb3NpdGlvbkVuZCc7XG4gIH1cblxuICBpZiAoIWV2ZW50VHlwZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSkge1xuICAgIC8vIFRoZSBjdXJyZW50IGNvbXBvc2l0aW9uIGlzIHN0b3JlZCBzdGF0aWNhbGx5IGFuZCBtdXN0IG5vdCBiZVxuICAgIC8vIG92ZXJ3cml0dGVuIHdoaWxlIGNvbXBvc2l0aW9uIGNvbnRpbnVlcy5cbiAgICBpZiAoIWlzQ29tcG9zaW5nICYmIGV2ZW50VHlwZSA9PT0gJ29uQ29tcG9zaXRpb25TdGFydCcpIHtcbiAgICAgIGlzQ29tcG9zaW5nID0gaW5pdGlhbGl6ZShuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdvbkNvbXBvc2l0aW9uRW5kJykge1xuICAgICAgaWYgKGlzQ29tcG9zaW5nKSB7XG4gICAgICAgIGZhbGxiYWNrRGF0YSA9IGdldERhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsIGV2ZW50VHlwZSk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQoZXZlbnRUeXBlLCBkb21FdmVudE5hbWUsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG5cbiAgICBpZiAoZmFsbGJhY2tEYXRhKSB7XG4gICAgICAvLyBJbmplY3QgZGF0YSBnZW5lcmF0ZWQgZnJvbSBmYWxsYmFjayBwYXRoIGludG8gdGhlIHN5bnRoZXRpYyBldmVudC5cbiAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgcHJvcGVydHkgb2YgbmF0aXZlIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UuXG4gICAgICBldmVudC5kYXRhID0gZmFsbGJhY2tEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY3VzdG9tRGF0YSA9IGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAoY3VzdG9tRGF0YSAhPT0gbnVsbCkge1xuICAgICAgICBldmVudC5kYXRhID0gY3VzdG9tRGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLyoqXG4gICAgICAgKiBJZiBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRzIGFyZSBhdmFpbGFibGUsIG91ciBnb2FsIGlzIHRvIG1ha2VcbiAgICAgICAqIHVzZSBvZiB0aGVtLiBIb3dldmVyLCB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZTogdGhlIHNwYWNlYmFyIGtleS5cbiAgICAgICAqIEluIFdlYmtpdCwgcHJldmVudGluZyBkZWZhdWx0IG9uIGEgc3BhY2ViYXIgYHRleHRJbnB1dGAgZXZlbnRcbiAgICAgICAqIGNhbmNlbHMgY2hhcmFjdGVyIGluc2VydGlvbiwgYnV0IGl0ICphbHNvKiBjYXVzZXMgdGhlIGJyb3dzZXJcbiAgICAgICAqIHRvIGZhbGwgYmFjayB0byBpdHMgZGVmYXVsdCBzcGFjZWJhciBiZWhhdmlvciBvZiBzY3JvbGxpbmcgdGhlXG4gICAgICAgKiBwYWdlLlxuICAgICAgICpcbiAgICAgICAqIFRyYWNraW5nIGF0OlxuICAgICAgICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM1NTEwM1xuICAgICAgICpcbiAgICAgICAqIFRvIGF2b2lkIHRoaXMgaXNzdWUsIHVzZSB0aGUga2V5cHJlc3MgZXZlbnQgYXMgaWYgbm8gYHRleHRJbnB1dGBcbiAgICAgICAqIGV2ZW50IGlzIGF2YWlsYWJsZS5cbiAgICAgICAqL1xuICAgICAgdmFyIHdoaWNoID0gbmF0aXZlRXZlbnQud2hpY2g7XG5cbiAgICAgIGlmICh3aGljaCAhPT0gU1BBQ0VCQVJfQ09ERSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaGFzU3BhY2VLZXlwcmVzcyA9IHRydWU7XG4gICAgICByZXR1cm4gU1BBQ0VCQVJfQ0hBUjtcblxuICAgIGNhc2UgJ3RleHRJbnB1dCc6XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYXJhY3RlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIERPTS5cbiAgICAgIHZhciBjaGFycyA9IG5hdGl2ZUV2ZW50LmRhdGE7IC8vIElmIGl0J3MgYSBzcGFjZWJhciBjaGFyYWN0ZXIsIGFzc3VtZSB0aGF0IHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkXG4gICAgICAvLyBpdCBhdCB0aGUga2V5cHJlc3MgbGV2ZWwgYW5kIGJhaWwgaW1tZWRpYXRlbHkuIEFuZHJvaWQgQ2hyb21lXG4gICAgICAvLyBkb2Vzbid0IGdpdmUgdXMga2V5Y29kZXMsIHNvIHdlIG5lZWQgdG8gaWdub3JlIGl0LlxuXG4gICAgICBpZiAoY2hhcnMgPT09IFNQQUNFQkFSX0NIQVIgJiYgaGFzU3BhY2VLZXlwcmVzcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoYXJzO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEZvciBvdGhlciBuYXRpdmUgZXZlbnQgdHlwZXMsIGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBGb3IgYnJvd3NlcnMgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGUgYHRleHRJbnB1dGAgZXZlbnQsIGV4dHJhY3QgdGhlXG4gKiBhcHByb3ByaWF0ZSBzdHJpbmcgdG8gdXNlIGZvciBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBjb21wb3NpbmcgKElNRSkgYW5kIHVzaW5nIGEgZmFsbGJhY2sgdG8gZG8gc28sXG4gIC8vIHRyeSB0byBleHRyYWN0IHRoZSBjb21wb3NlZCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZhbGxiYWNrIG9iamVjdC5cbiAgLy8gSWYgY29tcG9zaXRpb24gZXZlbnQgaXMgYXZhaWxhYmxlLCB3ZSBleHRyYWN0IGEgc3RyaW5nIG9ubHkgYXRcbiAgLy8gY29tcG9zaXRpb25ldmVudCwgb3RoZXJ3aXNlIGV4dHJhY3QgaXQgYXQgZmFsbGJhY2sgZXZlbnRzLlxuICBpZiAoaXNDb21wb3NpbmcpIHtcbiAgICBpZiAoZG9tRXZlbnROYW1lID09PSAnY29tcG9zaXRpb25lbmQnIHx8ICFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ICYmIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgdmFyIGNoYXJzID0gZ2V0RGF0YSgpO1xuICAgICAgcmVzZXQoKTtcbiAgICAgIGlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm4gY2hhcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ3Bhc3RlJzpcbiAgICAgIC8vIElmIGEgcGFzdGUgZXZlbnQgb2NjdXJzIGFmdGVyIGEga2V5cHJlc3MsIHRocm93IG91dCB0aGUgaW5wdXRcbiAgICAgIC8vIGNoYXJzLiBQYXN0ZSBldmVudHMgc2hvdWxkIG5vdCBsZWFkIHRvIEJlZm9yZUlucHV0IGV2ZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLyoqXG4gICAgICAgKiBBcyBvZiB2MjcsIEZpcmVmb3ggbWF5IGZpcmUga2V5cHJlc3MgZXZlbnRzIGV2ZW4gd2hlbiBubyBjaGFyYWN0ZXJcbiAgICAgICAqIHdpbGwgYmUgaW5zZXJ0ZWQuIEEgZmV3IHBvc3NpYmlsaXRpZXM6XG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIGAwYC4gQXJyb3cga2V5cywgRXNjIGtleSwgZXRjLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IG5vIGNoYXIgaXMgYXZhaWxhYmxlLlxuICAgICAgICogICBFeDogJ0FsdEdyICsgZGAgaW4gUG9saXNoLiBUaGVyZSBpcyBubyBtb2RpZmllZCBjaGFyYWN0ZXIgZm9yXG4gICAgICAgKiAgIHRoaXMga2V5IGNvbWJpbmF0aW9uIGFuZCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQgaW50byB0aGVcbiAgICAgICAqICAgZG9jdW1lbnQsIGJ1dCBGRiBmaXJlcyB0aGUga2V5cHJlc3MgZm9yIGNoYXIgY29kZSBgMTAwYCBhbnl3YXkuXG4gICAgICAgKiAgIE5vIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBhIGNvbW1hbmQgY29tYmluYXRpb24gaXNcbiAgICAgICAqICAgYmVpbmcgdXNlZC4gRXg6IGBDbWQrQ2AuIE5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCwgYW5kIG5vXG4gICAgICAgKiAgIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqL1xuICAgICAgaWYgKCFpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgLy8gSUUgZmlyZXMgdGhlIGBrZXlwcmVzc2AgZXZlbnQgd2hlbiBhIHVzZXIgdHlwZXMgYW4gZW1vamkgdmlhXG4gICAgICAgIC8vIFRvdWNoIGtleWJvYXJkIG9mIFdpbmRvd3MuICBJbiBzdWNoIGEgY2FzZSwgdGhlIGBjaGFyYCBwcm9wZXJ0eVxuICAgICAgICAvLyBob2xkcyBhbiBlbW9qaSBjaGFyYWN0ZXIgbGlrZSBgXFx1RDgzRFxcdURFMEFgLiAgQmVjYXVzZSBpdHMgbGVuZ3RoXG4gICAgICAgIC8vIGlzIDIsIHRoZSBwcm9wZXJ0eSBgd2hpY2hgIGRvZXMgbm90IHJlcHJlc2VudCBhbiBlbW9qaSBjb3JyZWN0bHkuXG4gICAgICAgIC8vIEluIHN1Y2ggYSBjYXNlLCB3ZSBkaXJlY3RseSByZXR1cm4gdGhlIGBjaGFyYCBwcm9wZXJ0eSBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHVzaW5nIGB3aGljaGAuXG4gICAgICAgIGlmIChuYXRpdmVFdmVudC5jaGFyICYmIG5hdGl2ZUV2ZW50LmNoYXIubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHJldHVybiBuYXRpdmVFdmVudC5jaGFyO1xuICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUV2ZW50LndoaWNoKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobmF0aXZlRXZlbnQud2hpY2gpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSA/IG51bGwgOiBuYXRpdmVFdmVudC5kYXRhO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG4vKipcbiAqIEV4dHJhY3QgYSBTeW50aGV0aWNJbnB1dEV2ZW50IGZvciBgYmVmb3JlSW5wdXRgLCBiYXNlZCBvbiBlaXRoZXIgbmF0aXZlXG4gKiBgdGV4dElucHV0YCBvciBmYWxsYmFjayBiZWhhdmlvci5cbiAqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgY2hhcnM7XG5cbiAgaWYgKGNhblVzZVRleHRJbnB1dEV2ZW50KSB7XG4gICAgY2hhcnMgPSBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IGVsc2Uge1xuICAgIGNoYXJzID0gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IC8vIElmIG5vIGNoYXJhY3RlcnMgYXJlIGJlaW5nIGluc2VydGVkLCBubyBCZWZvcmVJbnB1dCBldmVudCBzaG91bGRcbiAgLy8gYmUgZmlyZWQuXG5cblxuICBpZiAoIWNoYXJzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsICdvbkJlZm9yZUlucHV0Jyk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0lucHV0RXZlbnQoJ29uQmVmb3JlSW5wdXQnLCAnYmVmb3JlaW5wdXQnLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICAgIGV2ZW50LmRhdGEgPSBjaGFycztcbiAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYW4gYG9uQmVmb3JlSW5wdXRgIGV2ZW50IHRvIG1hdGNoXG4gKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNS8jZXZlbnRzLWlucHV0ZXZlbnRzLlxuICpcbiAqIFRoaXMgZXZlbnQgcGx1Z2luIGlzIGJhc2VkIG9uIHRoZSBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRcbiAqIGF2YWlsYWJsZSBpbiBDaHJvbWUsIFNhZmFyaSwgT3BlcmEsIGFuZCBJRS4gVGhpcyBldmVudCBmaXJlcyBhZnRlclxuICogYG9uS2V5UHJlc3NgIGFuZCBgb25Db21wb3NpdGlvbkVuZGAsIGJ1dCBiZWZvcmUgYG9uSW5wdXRgLlxuICpcbiAqIGBiZWZvcmVJbnB1dGAgaXMgc3BlYydkIGJ1dCBub3QgaW1wbGVtZW50ZWQgaW4gYW55IGJyb3dzZXJzLCBhbmRcbiAqIHRoZSBgaW5wdXRgIGV2ZW50IGRvZXMgbm90IHByb3ZpZGUgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGhhc1xuICogYWN0dWFsbHkgYmVlbiBhZGRlZCwgY29udHJhcnkgdG8gdGhlIHNwZWMuIFRodXMsIGB0ZXh0SW5wdXRgIGlzIHRoZSBiZXN0XG4gKiBhdmFpbGFibGUgZXZlbnQgdG8gaWRlbnRpZnkgdGhlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGFjdHVhbGx5IGJlZW4gaW5zZXJ0ZWRcbiAqIGludG8gdGhlIHRhcmdldCBub2RlLlxuICpcbiAqIFRoaXMgcGx1Z2luIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIGBjb21wb3NpdGlvbmAgZXZlbnRzLCB0aHVzXG4gKiBhbGxvd2luZyB1cyB0byBzaGFyZSBjb21wb3NpdGlvbiBmYWxsYmFjayBjb2RlIGZvciBib3RoIGBiZWZvcmVJbnB1dGAgYW5kXG4gKiBgY29tcG9zaXRpb25gIGV2ZW50IHR5cGVzLlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLWlucHV0LWVsZW1lbnQuaHRtbCNpbnB1dC10eXBlLWF0dHItc3VtbWFyeVxuICovXG52YXIgc3VwcG9ydGVkSW5wdXRUeXBlcyA9IHtcbiAgY29sb3I6IHRydWUsXG4gIGRhdGU6IHRydWUsXG4gIGRhdGV0aW1lOiB0cnVlLFxuICAnZGF0ZXRpbWUtbG9jYWwnOiB0cnVlLFxuICBlbWFpbDogdHJ1ZSxcbiAgbW9udGg6IHRydWUsXG4gIG51bWJlcjogdHJ1ZSxcbiAgcGFzc3dvcmQ6IHRydWUsXG4gIHJhbmdlOiB0cnVlLFxuICBzZWFyY2g6IHRydWUsXG4gIHRlbDogdHJ1ZSxcbiAgdGV4dDogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB3ZWVrOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBpc1RleHRJbnB1dEVsZW1lbnQoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ2lucHV0Jykge1xuICAgIHJldHVybiAhIXN1cHBvcnRlZElucHV0VHlwZXNbZWxlbS50eXBlXTtcbiAgfVxuXG4gIGlmIChub2RlTmFtZSA9PT0gJ3RleHRhcmVhJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGVudmlyb25tZW50LlxuICpcbiAqIE5PVEU6IFRoaXMgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkgZm9yIG5vbi1nZW5lcmljIGV2ZW50cyBzdWNoIGFzIGBjaGFuZ2VgLFxuICogYHJlc2V0YCwgYGxvYWRgLCBgZXJyb3JgLCBhbmQgYHNlbGVjdGAuXG4gKlxuICogQm9ycm93cyBmcm9tIE1vZGVybml6ci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lU3VmZml4IEV2ZW50IG5hbWUsIGUuZy4gXCJjbGlja1wiLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgc3VwcG9ydGVkLlxuICogQGludGVybmFsXG4gKiBAbGljZW5zZSBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiAqL1xuXG5mdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKGV2ZW50TmFtZVN1ZmZpeCkge1xuICBpZiAoIWNhblVzZURPTSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBldmVudE5hbWUgPSAnb24nICsgZXZlbnROYW1lU3VmZml4O1xuICB2YXIgaXNTdXBwb3J0ZWQgPSAoZXZlbnROYW1lIGluIGRvY3VtZW50KTtcblxuICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShldmVudE5hbWUsICdyZXR1cm47Jyk7XG4gICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxlbWVudFtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgcmV0dXJuIGlzU3VwcG9ydGVkO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cyQxKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ2hhbmdlJywgWydjaGFuZ2UnLCAnY2xpY2snLCAnZm9jdXNpbicsICdmb2N1c291dCcsICdpbnB1dCcsICdrZXlkb3duJywgJ2tleXVwJywgJ3NlbGVjdGlvbmNoYW5nZSddKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGluc3QsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpIHtcbiAgLy8gRmxhZyB0aGlzIGV2ZW50IGxvb3AgYXMgbmVlZGluZyBzdGF0ZSByZXN0b3JlLlxuICBlbnF1ZXVlU3RhdGVSZXN0b3JlKHRhcmdldCk7XG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoaW5zdCwgJ29uQ2hhbmdlJyk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KCdvbkNoYW5nZScsICdjaGFuZ2UnLCBudWxsLCBuYXRpdmVFdmVudCwgdGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBGb3IgSUUgc2hpbXNcbiAqL1xuXG5cbnZhciBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2hhbmdlYCBldmVudFxuICovXG5cbmZ1bmN0aW9uIHNob3VsZFVzZUNoYW5nZUV2ZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ3NlbGVjdCcgfHwgbm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgZWxlbS50eXBlID09PSAnZmlsZSc7XG59XG5cbmZ1bmN0aW9uIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGFjdGl2ZUVsZW1lbnRJbnN0LCBuYXRpdmVFdmVudCwgZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpKTsgLy8gSWYgY2hhbmdlIGFuZCBwcm9wZXJ0eWNoYW5nZSBidWJibGVkLCB3ZSdkIGp1c3QgYmluZCB0byBpdCBsaWtlIGFsbCB0aGVcbiAgLy8gb3RoZXIgZXZlbnRzIGFuZCBoYXZlIGl0IGdvIHRocm91Z2ggUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLiBTaW5jZSBpdFxuICAvLyBkb2Vzbid0LCB3ZSBtYW51YWxseSBsaXN0ZW4gZm9yIHRoZSBldmVudHMgYW5kIHNvIHdlIGhhdmUgdG8gZW5xdWV1ZSBhbmRcbiAgLy8gcHJvY2VzcyB0aGUgYWJzdHJhY3QgZXZlbnQgbWFudWFsbHkuXG4gIC8vXG4gIC8vIEJhdGNoaW5nIGlzIG5lY2Vzc2FyeSBoZXJlIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGFsbCBldmVudCBoYW5kbGVycyBydW5cbiAgLy8gYmVmb3JlIHRoZSBuZXh0IHJlcmVuZGVyIChpbmNsdWRpbmcgZXZlbnQgaGFuZGxlcnMgYXR0YWNoZWQgdG8gYW5jZXN0b3JcbiAgLy8gZWxlbWVudHMgaW5zdGVhZCBvZiBkaXJlY3RseSBvbiB0aGUgaW5wdXQpLiBXaXRob3V0IHRoaXMsIGNvbnRyb2xsZWRcbiAgLy8gY29tcG9uZW50cyBkb24ndCB3b3JrIHByb3Blcmx5IGluIGNvbmp1bmN0aW9uIHdpdGggZXZlbnQgYnViYmxpbmcgYmVjYXVzZVxuICAvLyB0aGUgY29tcG9uZW50IGlzIHJlcmVuZGVyZWQgYW5kIHRoZSB2YWx1ZSByZXZlcnRlZCBiZWZvcmUgYWxsIHRoZSBldmVudFxuICAvLyBoYW5kbGVycyBjYW4gcnVuLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MDguXG5cbiAgYmF0Y2hlZFVwZGF0ZXMocnVuRXZlbnRJbkJhdGNoLCBkaXNwYXRjaFF1ZXVlKTtcbn1cblxuZnVuY3Rpb24gcnVuRXZlbnRJbkJhdGNoKGRpc3BhdGNoUXVldWUpIHtcbiAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgMCk7XG59XG5cbmZ1bmN0aW9uIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KSB7XG4gIHZhciB0YXJnZXROb2RlID0gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KTtcblxuICBpZiAodXBkYXRlVmFsdWVJZkNoYW5nZWQodGFyZ2V0Tm9kZSkpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH1cbn1cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBpbnB1dGAgZXZlbnRcbiAqL1xuXG5cbnZhciBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBmYWxzZTtcblxuaWYgKGNhblVzZURPTSkge1xuICAvLyBJRTkgY2xhaW1zIHRvIHN1cHBvcnQgdGhlIGlucHV0IGV2ZW50IGJ1dCBmYWlscyB0byB0cmlnZ2VyIGl0IHdoZW5cbiAgLy8gZGVsZXRpbmcgdGV4dCwgc28gd2UgaWdub3JlIGl0cyBpbnB1dCBldmVudHMuXG4gIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGlzRXZlbnRTdXBwb3J0ZWQoJ2lucHV0JykgJiYgKCFkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gOSk7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBTdGFydHMgdHJhY2tpbmcgcHJvcGVydHljaGFuZ2UgZXZlbnRzIG9uIHRoZSBwYXNzZWQtaW4gZWxlbWVudFxuICogYW5kIG92ZXJyaWRlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB1c2VyIGV2ZW50cyBmcm9tXG4gKiB2YWx1ZSBjaGFuZ2VzIGluIEpTLlxuICovXG5cblxuZnVuY3Rpb24gc3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBhY3RpdmVFbGVtZW50ID0gdGFyZ2V0O1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IHRhcmdldEluc3Q7XG4gIGFjdGl2ZUVsZW1lbnQuYXR0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBSZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lcnMgZnJvbSB0aGUgY3VycmVudGx5LXRyYWNrZWQgZWxlbWVudCxcbiAqIGlmIGFueSBleGlzdHMuXG4gKi9cblxuXG5mdW5jdGlvbiBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpIHtcbiAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYWN0aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbiAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIEhhbmRsZXMgYSBwcm9wZXJ0eWNoYW5nZSBldmVudCwgc2VuZGluZyBhIGBjaGFuZ2VgIGV2ZW50IGlmXG4gKiB0aGUgdmFsdWUgb2YgdGhlIGFjdGl2ZSBlbGVtZW50IGhhcyBjaGFuZ2VkLlxuICovXG5cblxuZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlDaGFuZ2UobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LnByb3BlcnR5TmFtZSAhPT0gJ3ZhbHVlJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QpKSB7XG4gICAgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsKGRvbUV2ZW50TmFtZSwgdGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c2luJykge1xuICAgIC8vIEluIElFOSwgcHJvcGVydHljaGFuZ2UgZmlyZXMgZm9yIG1vc3QgaW5wdXQgZXZlbnRzIGJ1dCBpcyBidWdneSBhbmRcbiAgICAvLyBkb2Vzbid0IGZpcmUgd2hlbiB0ZXh0IGlzIGRlbGV0ZWQsIGJ1dCBjb252ZW5pZW50bHksIHNlbGVjdGlvbmNoYW5nZVxuICAgIC8vIGFwcGVhcnMgdG8gZmlyZSBpbiBhbGwgb2YgdGhlIHJlbWFpbmluZyBjYXNlcyBzbyB3ZSBjYXRjaCB0aG9zZSBhbmRcbiAgICAvLyBmb3J3YXJkIHRoZSBldmVudCBpZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAvLyBJbiBlaXRoZXIgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byBjYWxsIHRoZSBldmVudCBoYW5kbGVyIGlmIHRoZSB2YWx1ZVxuICAgIC8vIGlzIGNoYW5nZWQgZnJvbSBKUyBzbyB3ZSByZWRlZmluZSBhIHNldHRlciBmb3IgYC52YWx1ZWAgdGhhdCB1cGRhdGVzXG4gICAgLy8gb3VyIGFjdGl2ZUVsZW1lbnRWYWx1ZSB2YXJpYWJsZSwgYWxsb3dpbmcgdXMgdG8gaWdub3JlIHRob3NlIGNoYW5nZXNcbiAgICAvL1xuICAgIC8vIHN0b3BXYXRjaGluZygpIHNob3VsZCBiZSBhIG5vb3AgaGVyZSBidXQgd2UgY2FsbCBpdCBqdXN0IGluIGNhc2Ugd2VcbiAgICAvLyBtaXNzZWQgYSBibHVyIGV2ZW50IHNvbWVob3cuXG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgICBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KTtcbiAgfSBlbHNlIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c291dCcpIHtcbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICB9XG59IC8vIEZvciBJRTggYW5kIElFOS5cblxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsKGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnc2VsZWN0aW9uY2hhbmdlJyB8fCBkb21FdmVudE5hbWUgPT09ICdrZXl1cCcgfHwgZG9tRXZlbnROYW1lID09PSAna2V5ZG93bicpIHtcbiAgICAvLyBPbiB0aGUgc2VsZWN0aW9uY2hhbmdlIGV2ZW50LCB0aGUgdGFyZ2V0IGlzIGp1c3QgZG9jdW1lbnQgd2hpY2ggaXNuJ3RcbiAgICAvLyBoZWxwZnVsIGZvciB1cyBzbyBqdXN0IGNoZWNrIGFjdGl2ZUVsZW1lbnQgaW5zdGVhZC5cbiAgICAvL1xuICAgIC8vIDk5JSBvZiB0aGUgdGltZSwga2V5ZG93biBhbmQga2V5dXAgYXJlbid0IG5lY2Vzc2FyeS4gSUU4IGZhaWxzIHRvIGZpcmVcbiAgICAvLyBwcm9wZXJ0eWNoYW5nZSBvbiB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYWZ0ZXIgc2V0dGluZyBgdmFsdWVgIGZyb20gYVxuICAgIC8vIHNjcmlwdCBhbmQgZmlyZXMgb25seSBrZXlkb3duLCBrZXlwcmVzcywga2V5dXAuIENhdGNoaW5nIGtleXVwIHVzdWFsbHlcbiAgICAvLyBnZXRzIGl0IGFuZCBjYXRjaGluZyBrZXlkb3duIGxldHMgdXMgZmlyZSBhbiBldmVudCBmb3IgdGhlIGZpcnN0XG4gICAgLy8ga2V5c3Ryb2tlIGlmIHVzZXIgZG9lcyBhIGtleSByZXBlYXQgKGl0J2xsIGJlIGEgbGl0dGxlIGRlbGF5ZWQ6IHJpZ2h0XG4gICAgLy8gYmVmb3JlIHRoZSBzZWNvbmQga2V5c3Ryb2tlKS4gT3RoZXIgaW5wdXQgbWV0aG9kcyAoZS5nLiwgcGFzdGUpIHNlZW0gdG9cbiAgICAvLyBmaXJlIHNlbGVjdGlvbmNoYW5nZSBub3JtYWxseS5cbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0KTtcbiAgfVxufVxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNsaWNrYCBldmVudFxuICovXG5cblxuZnVuY3Rpb24gc2hvdWxkVXNlQ2xpY2tFdmVudChlbGVtKSB7XG4gIC8vIFVzZSB0aGUgYGNsaWNrYCBldmVudCB0byBkZXRlY3QgY2hhbmdlcyB0byBjaGVja2JveCBhbmQgcmFkaW8gaW5wdXRzLlxuICAvLyBUaGlzIGFwcHJvYWNoIHdvcmtzIGFjcm9zcyBhbGwgYnJvd3NlcnMsIHdoZXJlYXMgYGNoYW5nZWAgZG9lcyBub3QgZmlyZVxuICAvLyB1bnRpbCBgYmx1cmAgaW4gSUU4LlxuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAnY2hlY2tib3gnIHx8IGVsZW0udHlwZSA9PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnY2xpY2snKSB7XG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnaW5wdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIobm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl93cmFwcGVyU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZSB8fCAhc3RhdGUuY29udHJvbGxlZCB8fCBub2RlLnR5cGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIC8vIElmIGNvbnRyb2xsZWQsIGFzc2lnbiB0aGUgdmFsdWUgYXR0cmlidXRlIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9uIGJsdXJcbiAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgJ251bWJlcicsIG5vZGUudmFsdWUpO1xuICB9XG59XG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uQ2hhbmdlYCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgY2hhbmdlIGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuIFRoaXMgZXZlbnQgZmlyZXMgYXQgYSB0aW1lIHdoZW4gaXQncyBwb3NzaWJsZSB0b1xuICogY2hhbmdlIHRoZSBlbGVtZW50J3MgdmFsdWUgd2l0aG91dCBzZWVpbmcgYSBmbGlja2VyLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIHNlbGVjdFxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQxKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcbiAgdmFyIGdldFRhcmdldEluc3RGdW5jLCBoYW5kbGVFdmVudEZ1bmM7XG5cbiAgaWYgKHNob3VsZFVzZUNoYW5nZUV2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQ7XG4gIH0gZWxzZSBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpKSB7XG4gICAgaWYgKGlzSW5wdXRFdmVudFN1cHBvcnRlZCkge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgfVxuICB9IGVsc2UgaWYgKHNob3VsZFVzZUNsaWNrRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50O1xuICB9XG5cbiAgaWYgKGdldFRhcmdldEluc3RGdW5jKSB7XG4gICAgdmFyIGluc3QgPSBnZXRUYXJnZXRJbnN0RnVuYyhkb21FdmVudE5hbWUsIHRhcmdldEluc3QpO1xuXG4gICAgaWYgKGluc3QpIHtcbiAgICAgIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBpbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChoYW5kbGVFdmVudEZ1bmMpIHtcbiAgICBoYW5kbGVFdmVudEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXROb2RlLCB0YXJnZXRJbnN0KTtcbiAgfSAvLyBXaGVuIGJsdXJyaW5nLCBzZXQgdGhlIHZhbHVlIGF0dHJpYnV0ZSBmb3IgbnVtYmVyIGlucHV0c1xuXG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2ZvY3Vzb3V0Jykge1xuICAgIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIodGFyZ2V0Tm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMigpIHtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Nb3VzZUVudGVyJywgWydtb3VzZW91dCcsICdtb3VzZW92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uTW91c2VMZWF2ZScsIFsnbW91c2VvdXQnLCAnbW91c2VvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvblBvaW50ZXJFbnRlcicsIFsncG9pbnRlcm91dCcsICdwb2ludGVyb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Qb2ludGVyTGVhdmUnLCBbJ3BvaW50ZXJvdXQnLCAncG9pbnRlcm92ZXInXSk7XG59XG4vKipcbiAqIEZvciBhbG1vc3QgZXZlcnkgaW50ZXJhY3Rpb24gd2UgY2FyZSBhYm91dCwgdGhlcmUgd2lsbCBiZSBib3RoIGEgdG9wLWxldmVsXG4gKiBgbW91c2VvdmVyYCBhbmQgYG1vdXNlb3V0YCBldmVudCB0aGF0IG9jY3Vycy4gT25seSB1c2UgYG1vdXNlb3V0YCBzbyB0aGF0XG4gKiB3ZSBkbyBub3QgZXh0cmFjdCBkdXBsaWNhdGUgZXZlbnRzLiBIb3dldmVyLCBtb3ZpbmcgdGhlIG1vdXNlIGludG8gdGhlXG4gKiBicm93c2VyIGZyb20gb3V0c2lkZSB3aWxsIG5vdCBmaXJlIGEgYG1vdXNlb3V0YCBldmVudC4gSW4gdGhpcyBjYXNlLCB3ZSB1c2VcbiAqIHRoZSBgbW91c2VvdmVyYCB0b3AtbGV2ZWwgZXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgaXNPdmVyRXZlbnQgPSBkb21FdmVudE5hbWUgPT09ICdtb3VzZW92ZXInIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdmVyJztcbiAgdmFyIGlzT3V0RXZlbnQgPSBkb21FdmVudE5hbWUgPT09ICdtb3VzZW91dCcgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm91dCc7XG5cbiAgaWYgKGlzT3ZlckV2ZW50ICYmIChldmVudFN5c3RlbUZsYWdzICYgSVNfUkVQTEFZRUQpID09PSAwKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhbiBvdmVyIGV2ZW50IHdpdGggYSB0YXJnZXQsIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBkaXNwYXRjaGVkXG4gICAgLy8gdGhlIGV2ZW50IGluIHRoZSBvdXQgZXZlbnQgb2YgdGhlIG90aGVyIHRhcmdldC4gSWYgdGhpcyBpcyByZXBsYXllZCxcbiAgICAvLyB0aGVuIGl0J3MgYmVjYXVzZSB3ZSBjb3VsZG4ndCBkaXNwYXRjaCBhZ2FpbnN0IHRoaXMgdGFyZ2V0IHByZXZpb3VzbHlcbiAgICAvLyBzbyB3ZSBoYXZlIHRvIGRvIGl0IG5vdyBpbnN0ZWFkLlxuICAgIHZhciByZWxhdGVkID0gbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC5mcm9tRWxlbWVudDtcblxuICAgIGlmIChyZWxhdGVkKSB7XG4gICAgICAvLyBJZiB0aGUgcmVsYXRlZCBub2RlIGlzIG1hbmFnZWQgYnkgUmVhY3QsIHdlIGNhbiBhc3N1bWUgdGhhdCB3ZSBoYXZlXG4gICAgICAvLyBhbHJlYWR5IGRpc3BhdGNoZWQgdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnRzIGR1cmluZyBpdHMgbW91c2VvdXQuXG4gICAgICBpZiAoZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocmVsYXRlZCkgfHwgaXNDb250YWluZXJNYXJrZWRBc1Jvb3QocmVsYXRlZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghaXNPdXRFdmVudCAmJiAhaXNPdmVyRXZlbnQpIHtcbiAgICAvLyBNdXN0IG5vdCBiZSBhIG1vdXNlIG9yIHBvaW50ZXIgaW4gb3Igb3V0IC0gaWdub3JpbmcuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHdpbjsgLy8gVE9ETzogd2h5IGlzIHRoaXMgbnVsbGFibGUgaW4gdGhlIHR5cGVzIGJ1dCB3ZSByZWFkIGZyb20gaXQ/XG5cbiAgaWYgKG5hdGl2ZUV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICAvLyBgbmF0aXZlRXZlbnRUYXJnZXRgIGlzIHByb2JhYmx5IGEgd2luZG93IG9iamVjdC5cbiAgICB3aW4gPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBgb3duZXJEb2N1bWVudGAgaXMgc29tZXRpbWVzIHVuZGVmaW5lZCBpbiBJRTguXG4gICAgdmFyIGRvYyA9IG5hdGl2ZUV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG5cbiAgICBpZiAoZG9jKSB7XG4gICAgICB3aW4gPSBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgd2luID0gd2luZG93O1xuICAgIH1cbiAgfVxuXG4gIHZhciBmcm9tO1xuICB2YXIgdG87XG5cbiAgaWYgKGlzT3V0RXZlbnQpIHtcbiAgICB2YXIgX3JlbGF0ZWQgPSBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnRvRWxlbWVudDtcblxuICAgIGZyb20gPSB0YXJnZXRJbnN0O1xuICAgIHRvID0gX3JlbGF0ZWQgPyBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShfcmVsYXRlZCkgOiBudWxsO1xuXG4gICAgaWYgKHRvICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRvKTtcblxuICAgICAgaWYgKHRvICE9PSBuZWFyZXN0TW91bnRlZCB8fCB0by50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgdG8udGFnICE9PSBIb3N0VGV4dCkge1xuICAgICAgICB0byA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE1vdmluZyB0byBhIG5vZGUgZnJvbSBvdXRzaWRlIHRoZSB3aW5kb3cuXG4gICAgZnJvbSA9IG51bGw7XG4gICAgdG8gPSB0YXJnZXRJbnN0O1xuICB9XG5cbiAgaWYgKGZyb20gPT09IHRvKSB7XG4gICAgLy8gTm90aGluZyBwZXJ0YWlucyB0byBvdXIgbWFuYWdlZCBjb21wb25lbnRzLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICB2YXIgbGVhdmVFdmVudFR5cGUgPSAnb25Nb3VzZUxlYXZlJztcbiAgdmFyIGVudGVyRXZlbnRUeXBlID0gJ29uTW91c2VFbnRlcic7XG4gIHZhciBldmVudFR5cGVQcmVmaXggPSAnbW91c2UnO1xuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3V0JyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3ZlcicpIHtcbiAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgbGVhdmVFdmVudFR5cGUgPSAnb25Qb2ludGVyTGVhdmUnO1xuICAgIGVudGVyRXZlbnRUeXBlID0gJ29uUG9pbnRlckVudGVyJztcbiAgICBldmVudFR5cGVQcmVmaXggPSAncG9pbnRlcic7XG4gIH1cblxuICB2YXIgZnJvbU5vZGUgPSBmcm9tID09IG51bGwgPyB3aW4gOiBnZXROb2RlRnJvbUluc3RhbmNlKGZyb20pO1xuICB2YXIgdG9Ob2RlID0gdG8gPT0gbnVsbCA/IHdpbiA6IGdldE5vZGVGcm9tSW5zdGFuY2UodG8pO1xuICB2YXIgbGVhdmUgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKGxlYXZlRXZlbnRUeXBlLCBldmVudFR5cGVQcmVmaXggKyAnbGVhdmUnLCBmcm9tLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICBsZWF2ZS50YXJnZXQgPSBmcm9tTm9kZTtcbiAgbGVhdmUucmVsYXRlZFRhcmdldCA9IHRvTm9kZTtcbiAgdmFyIGVudGVyID0gbnVsbDsgLy8gV2Ugc2hvdWxkIG9ubHkgcHJvY2VzcyB0aGlzIG5hdGl2ZUV2ZW50IGlmIHdlIGFyZSBwcm9jZXNzaW5nXG4gIC8vIHRoZSBmaXJzdCBhbmNlc3Rvci4gTmV4dCB0aW1lLCB3ZSB3aWxsIGlnbm9yZSB0aGUgZXZlbnQuXG5cbiAgdmFyIG5hdGl2ZVRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKG5hdGl2ZVRhcmdldEluc3QgPT09IHRhcmdldEluc3QpIHtcbiAgICB2YXIgZW50ZXJFdmVudCA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IoZW50ZXJFdmVudFR5cGUsIGV2ZW50VHlwZVByZWZpeCArICdlbnRlcicsIHRvLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGVudGVyRXZlbnQudGFyZ2V0ID0gdG9Ob2RlO1xuICAgIGVudGVyRXZlbnQucmVsYXRlZFRhcmdldCA9IGZyb21Ob2RlO1xuICAgIGVudGVyID0gZW50ZXJFdmVudDtcbiAgfVxuXG4gIGFjY3VtdWxhdGVFbnRlckxlYXZlVHdvUGhhc2VMaXN0ZW5lcnMoZGlzcGF0Y2hRdWV1ZSwgbGVhdmUsIGVudGVyLCBmcm9tLCB0byk7XG59XG5cbi8qKlxuICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gKi9cbmZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgcmV0dXJuIHggPT09IHkgJiYgKHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5KSB8fCB4ICE9PSB4ICYmIHkgIT09IHkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgO1xufVxuXG52YXIgb2JqZWN0SXMgPSB0eXBlb2YgT2JqZWN0LmlzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmlzIDogaXM7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSQyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbi8qKlxuICogUGVyZm9ybXMgZXF1YWxpdHkgYnkgaXRlcmF0aW5nIHRocm91Z2gga2V5cyBvbiBhbiBvYmplY3QgYW5kIHJldHVybmluZyBmYWxzZVxuICogd2hlbiBhbnkga2V5IGhhcyB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBzdHJpY3RseSBlcXVhbCBiZXR3ZWVuIHRoZSBhcmd1bWVudHMuXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWVzIG9mIGFsbCBrZXlzIGFyZSBzdHJpY3RseSBlcXVhbC5cbiAqL1xuXG5mdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikge1xuICBpZiAob2JqZWN0SXMob2JqQSwgb2JqQikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgb2JqQSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHwgb2JqQiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xuICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWhhc093blByb3BlcnR5JDIuY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIW9iamVjdElzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbnkgbm9kZSByZXR1cm4gdGhlIGZpcnN0IGxlYWYgbm9kZSB3aXRob3V0IGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuXG5mdW5jdGlvbiBnZXRMZWFmTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlICYmIG5vZGUuZmlyc3RDaGlsZCkge1xuICAgIG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cbi8qKlxuICogR2V0IHRoZSBuZXh0IHNpYmxpbmcgd2l0aGluIGEgY29udGFpbmVyLiBUaGlzIHdpbGwgd2FsayB1cCB0aGVcbiAqIERPTSBpZiBhIG5vZGUncyBzaWJsaW5ncyBoYXZlIGJlZW4gZXhoYXVzdGVkLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7P0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRTaWJsaW5nTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cbn1cbi8qKlxuICogR2V0IG9iamVjdCBkZXNjcmliaW5nIHRoZSBub2RlcyB3aGljaCBjb250YWluIGNoYXJhY3RlcnMgYXQgb2Zmc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gcm9vdFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQocm9vdCwgb2Zmc2V0KSB7XG4gIHZhciBub2RlID0gZ2V0TGVhZk5vZGUocm9vdCk7XG4gIHZhciBub2RlU3RhcnQgPSAwO1xuICB2YXIgbm9kZUVuZCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBub2RlRW5kID0gbm9kZVN0YXJ0ICsgbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG5cbiAgICAgIGlmIChub2RlU3RhcnQgPD0gb2Zmc2V0ICYmIG5vZGVFbmQgPj0gb2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldCAtIG5vZGVTdGFydFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBub2RlU3RhcnQgPSBub2RlRW5kO1xuICAgIH1cblxuICAgIG5vZGUgPSBnZXRMZWFmTm9kZShnZXRTaWJsaW5nTm9kZShub2RlKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG91dGVyTm9kZVxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRPZmZzZXRzKG91dGVyTm9kZSkge1xuICB2YXIgb3duZXJEb2N1bWVudCA9IG91dGVyTm9kZS5vd25lckRvY3VtZW50O1xuICB2YXIgd2luID0gb3duZXJEb2N1bWVudCAmJiBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24gJiYgd2luLmdldFNlbGVjdGlvbigpO1xuXG4gIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgYW5jaG9yTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0ID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCA9IHNlbGVjdGlvbi5mb2N1c09mZnNldDsgLy8gSW4gRmlyZWZveCwgYW5jaG9yTm9kZSBhbmQgZm9jdXNOb2RlIGNhbiBiZSBcImFub255bW91cyBkaXZzXCIsIGUuZy4gdGhlXG4gIC8vIHVwL2Rvd24gYnV0dG9ucyBvbiBhbiA8aW5wdXQgdHlwZT1cIm51bWJlclwiPi4gQW5vbnltb3VzIGRpdnMgZG8gbm90IHNlZW0gdG9cbiAgLy8gZXhwb3NlIHByb3BlcnRpZXMsIHRyaWdnZXJpbmcgYSBcIlBlcm1pc3Npb24gZGVuaWVkIGVycm9yXCIgaWYgYW55IG9mIGl0c1xuICAvLyBwcm9wZXJ0aWVzIGFyZSBhY2Nlc3NlZC4gVGhlIG9ubHkgc2VlbWluZ2x5IHBvc3NpYmxlIHdheSB0byBhdm9pZCBlcnJvcmluZ1xuICAvLyBpcyB0byBhY2Nlc3MgYSBwcm9wZXJ0eSB0aGF0IHR5cGljYWxseSB3b3JrcyBmb3Igbm9uLWFub255bW91cyBkaXZzIGFuZFxuICAvLyBjYXRjaCBhbnkgZXJyb3IgdGhhdCBtYXkgb3RoZXJ3aXNlIGFyaXNlLiBTZWVcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDI3XG5cbiAgdHJ5IHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAgICBhbmNob3JOb2RlLm5vZGVUeXBlO1xuICAgIGZvY3VzTm9kZS5ub2RlVHlwZTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZ2V0TW9kZXJuT2Zmc2V0c0Zyb21Qb2ludHMob3V0ZXJOb2RlLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHtzdGFydCwgZW5kfSB3aGVyZSBgc3RhcnRgIGlzIHRoZSBjaGFyYWN0ZXIvY29kZXBvaW50IGluZGV4IG9mXG4gKiAoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KSB3aXRoaW4gdGhlIHRleHRDb250ZW50IG9mIGBvdXRlck5vZGVgLCBhbmRcbiAqIGBlbmRgIGlzIHRoZSBpbmRleCBvZiAoZm9jdXNOb2RlLCBmb2N1c09mZnNldCkuXG4gKlxuICogUmV0dXJucyBudWxsIGlmIHlvdSBwYXNzIGluIGdhcmJhZ2UgaW5wdXQgYnV0IHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGNyYXNoLlxuICpcbiAqIEV4cG9ydGVkIG9ubHkgZm9yIHRlc3RpbmcuXG4gKi9cblxuZnVuY3Rpb24gZ2V0TW9kZXJuT2Zmc2V0c0Zyb21Qb2ludHMob3V0ZXJOb2RlLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpIHtcbiAgdmFyIGxlbmd0aCA9IDA7XG4gIHZhciBzdGFydCA9IC0xO1xuICB2YXIgZW5kID0gLTE7XG4gIHZhciBpbmRleFdpdGhpbkFuY2hvciA9IDA7XG4gIHZhciBpbmRleFdpdGhpbkZvY3VzID0gMDtcbiAgdmFyIG5vZGUgPSBvdXRlck5vZGU7XG4gIHZhciBwYXJlbnROb2RlID0gbnVsbDtcblxuICBvdXRlcjogd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgbmV4dCA9IG51bGw7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUgPT09IGFuY2hvck5vZGUgJiYgKGFuY2hvck9mZnNldCA9PT0gMCB8fCBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpKSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoICsgYW5jaG9yT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZm9jdXNOb2RlICYmIChmb2N1c09mZnNldCA9PT0gMCB8fCBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpKSB7XG4gICAgICAgIGVuZCA9IGxlbmd0aCArIGZvY3VzT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICAgIGxlbmd0aCArPSBub2RlLm5vZGVWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmICgobmV4dCA9IG5vZGUuZmlyc3RDaGlsZCkgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIE1vdmluZyBmcm9tIGBub2RlYCB0byBpdHMgZmlyc3QgY2hpbGQgYG5leHRgLlxuXG5cbiAgICAgIHBhcmVudE5vZGUgPSBub2RlO1xuICAgICAgbm9kZSA9IG5leHQ7XG4gICAgfVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlID09PSBvdXRlck5vZGUpIHtcbiAgICAgICAgLy8gSWYgYG91dGVyTm9kZWAgaGFzIGNoaWxkcmVuLCB0aGlzIGlzIGFsd2F5cyB0aGUgc2Vjb25kIHRpbWUgdmlzaXRpbmdcbiAgICAgICAgLy8gaXQuIElmIGl0IGhhcyBubyBjaGlsZHJlbiwgdGhpcyBpcyBzdGlsbCB0aGUgZmlyc3QgbG9vcCwgYW5kIHRoZSBvbmx5XG4gICAgICAgIC8vIHZhbGlkIHNlbGVjdGlvbiBpcyBhbmNob3JOb2RlIGFuZCBmb2N1c05vZGUgYm90aCBlcXVhbCB0byB0aGlzIG5vZGVcbiAgICAgICAgLy8gYW5kIGJvdGggb2Zmc2V0cyAwLCBpbiB3aGljaCBjYXNlIHdlIHdpbGwgaGF2ZSBoYW5kbGVkIGFib3ZlLlxuICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGFuY2hvck5vZGUgJiYgKytpbmRleFdpdGhpbkFuY2hvciA9PT0gYW5jaG9yT2Zmc2V0KSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50Tm9kZSA9PT0gZm9jdXNOb2RlICYmICsraW5kZXhXaXRoaW5Gb2N1cyA9PT0gZm9jdXNPZmZzZXQpIHtcbiAgICAgICAgZW5kID0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAoKG5leHQgPSBub2RlLm5leHRTaWJsaW5nKSAhPT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH0gLy8gTW92aW5nIGZyb20gYG5vZGVgIHRvIGl0cyBuZXh0IHNpYmxpbmcgYG5leHRgLlxuXG5cbiAgICBub2RlID0gbmV4dDtcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSkge1xuICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKFdvdWxkIGhhcHBlbiBpZiB0aGUgYW5jaG9yL2ZvY3VzIG5vZGVzIGFyZW4ndFxuICAgIC8vIGFjdHVhbGx5IGluc2lkZSB0aGUgcGFzc2VkLWluIG5vZGUuKVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBlbmRcbiAgfTtcbn1cbi8qKlxuICogSW4gbW9kZXJuIG5vbi1JRSBicm93c2Vycywgd2UgY2FuIHN1cHBvcnQgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZFxuICogc2VsZWN0aW9ucy5cbiAqXG4gKiBOb3RlOiBJRTEwKyBzdXBwb3J0cyB0aGUgU2VsZWN0aW9uIG9iamVjdCwgYnV0IGl0IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoZSBgZXh0ZW5kYCBtZXRob2QsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiBpbiBtb2Rlcm4gSUUsIGl0J3Mgbm90IHBvc3NpYmxlXG4gKiB0byBwcm9ncmFtbWF0aWNhbGx5IGNyZWF0ZSBhIGJhY2t3YXJkIHNlbGVjdGlvbi4gVGh1cywgZm9yIGFsbCBJRVxuICogdmVyc2lvbnMsIHdlIHVzZSB0aGUgb2xkIElFIEFQSSB0byBjcmVhdGUgb3VyIHNlbGVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gb2Zmc2V0c1xuICovXG5cbmZ1bmN0aW9uIHNldE9mZnNldHMobm9kZSwgb2Zmc2V0cykge1xuICB2YXIgZG9jID0gbm9kZS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xuICB2YXIgd2luID0gZG9jICYmIGRvYy5kZWZhdWx0VmlldyB8fCB3aW5kb3c7IC8vIEVkZ2UgZmFpbHMgd2l0aCBcIk9iamVjdCBleHBlY3RlZFwiIGluIHNvbWUgc2NlbmFyaW9zLlxuICAvLyAoRm9yIGluc3RhbmNlOiBUaW55TUNFIGVkaXRvciB1c2VkIGluIGEgbGlzdCBjb21wb25lbnQgdGhhdCBzdXBwb3J0cyBwYXN0aW5nIHRvIGFkZCBtb3JlLFxuICAvLyBmYWlscyB3aGVuIHBhc3RpbmcgMTAwKyBpdGVtcylcblxuICBpZiAoIXdpbi5nZXRTZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpO1xuICB2YXIgbGVuZ3RoID0gbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gIHZhciBzdGFydCA9IE1hdGgubWluKG9mZnNldHMuc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZCA9PT0gdW5kZWZpbmVkID8gc3RhcnQgOiBNYXRoLm1pbihvZmZzZXRzLmVuZCwgbGVuZ3RoKTsgLy8gSUUgMTEgdXNlcyBtb2Rlcm4gc2VsZWN0aW9uLCBidXQgZG9lc24ndCBzdXBwb3J0IHRoZSBleHRlbmQgbWV0aG9kLlxuICAvLyBGbGlwIGJhY2t3YXJkIHNlbGVjdGlvbnMsIHNvIHdlIGNhbiBzZXQgd2l0aCBhIHNpbmdsZSByYW5nZS5cblxuICBpZiAoIXNlbGVjdGlvbi5leHRlbmQgJiYgc3RhcnQgPiBlbmQpIHtcbiAgICB2YXIgdGVtcCA9IGVuZDtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IHRlbXA7XG4gIH1cblxuICB2YXIgc3RhcnRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIHN0YXJ0KTtcbiAgdmFyIGVuZE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgZW5kKTtcblxuICBpZiAoc3RhcnRNYXJrZXIgJiYgZW5kTWFya2VyKSB7XG4gICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxICYmIHNlbGVjdGlvbi5hbmNob3JOb2RlID09PSBzdGFydE1hcmtlci5ub2RlICYmIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQgPT09IHN0YXJ0TWFya2VyLm9mZnNldCAmJiBzZWxlY3Rpb24uZm9jdXNOb2RlID09PSBlbmRNYXJrZXIubm9kZSAmJiBzZWxlY3Rpb24uZm9jdXNPZmZzZXQgPT09IGVuZE1hcmtlci5vZmZzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmFuZ2UgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydE1hcmtlci5ub2RlLCBzdGFydE1hcmtlci5vZmZzZXQpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcblxuICAgIGlmIChzdGFydCA+IGVuZCkge1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIHNlbGVjdGlvbi5leHRlbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZS5zZXRFbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlKSB7XG4gIGlmICghb3V0ZXJOb2RlIHx8ICFpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlID09PSBpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKG91dGVyTm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShpbm5lck5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZS5wYXJlbnROb2RlKTtcbiAgfSBlbHNlIGlmICgnY29udGFpbnMnIGluIG91dGVyTm9kZSkge1xuICAgIHJldHVybiBvdXRlck5vZGUuY29udGFpbnMoaW5uZXJOb2RlKTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHtcbiAgICByZXR1cm4gISEob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGlubmVyTm9kZSkgJiAxNik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSW5Eb2N1bWVudChub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUub3duZXJEb2N1bWVudCAmJiBjb250YWluc05vZGUobm9kZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgbm9kZSk7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZU9yaWdpbkZyYW1lKGlmcmFtZSkge1xuICB0cnkge1xuICAgIC8vIEFjY2Vzc2luZyB0aGUgY29udGVudERvY3VtZW50IG9mIGEgSFRNTElmcmFtZUVsZW1lbnQgY2FuIGNhdXNlIHRoZSBicm93c2VyXG4gICAgLy8gdG8gdGhyb3csIGUuZy4gaWYgaXQgaGFzIGEgY3Jvc3Mtb3JpZ2luIHNyYyBhdHRyaWJ1dGUuXG4gICAgLy8gU2FmYXJpIHdpbGwgc2hvdyBhbiBlcnJvciBpbiB0aGUgY29uc29sZSB3aGVuIHRoZSBhY2Nlc3MgcmVzdWx0cyBpbiBcIkJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdpblwiLiBlLmc6XG4gICAgLy8gaWZyYW1lLmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAvLyBBIHNhZmV0eSB3YXkgaXMgdG8gYWNjZXNzIG9uZSBvZiB0aGUgY3Jvc3Mgb3JpZ2luIHByb3BlcnRpZXM6IFdpbmRvdyBvciBMb2NhdGlvblxuICAgIC8vIFdoaWNoIG1pZ2h0IHJlc3VsdCBpbiBcIlNlY3VyaXR5RXJyb3JcIiBET00gRXhjZXB0aW9uIGFuZCBpdCBpcyBjb21wYXRpYmxlIHRvIFNhZmFyaS5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2Vycy5odG1sI2ludGVncmF0aW9uLXdpdGgtaWRsXG4gICAgcmV0dXJuIHR5cGVvZiBpZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID09PSAnc3RyaW5nJztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnREZWVwKCkge1xuICB2YXIgd2luID0gd2luZG93O1xuICB2YXIgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoKTtcblxuICB3aGlsZSAoZWxlbWVudCBpbnN0YW5jZW9mIHdpbi5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgIGlmIChpc1NhbWVPcmlnaW5GcmFtZShlbGVtZW50KSkge1xuICAgICAgd2luID0gZWxlbWVudC5jb250ZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudCh3aW4uZG9jdW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG4vKipcbiAqIEBSZWFjdElucHV0U2VsZWN0aW9uOiBSZWFjdCBpbnB1dCBzZWxlY3Rpb24gbW9kdWxlLiBCYXNlZCBvbiBTZWxlY3Rpb24uanMsXG4gKiBidXQgbW9kaWZpZWQgdG8gYmUgc3VpdGFibGUgZm9yIHJlYWN0IGFuZCBoYXMgYSBjb3VwbGUgb2YgYnVnIGZpeGVzIChkb2Vzbid0XG4gKiBhc3N1bWUgYnV0dG9ucyBoYXZlIHJhbmdlIHNlbGVjdGlvbnMgYWxsb3dlZCkuXG4gKiBJbnB1dCBzZWxlY3Rpb24gbW9kdWxlIGZvciBSZWFjdC5cbiAqL1xuXG4vKipcbiAqIEBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXM6IHdlIGdldCB0aGUgZWxlbWVudCB0eXBlcyB0aGF0IHN1cHBvcnQgc2VsZWN0aW9uXG4gKiBmcm9tIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2RvLW5vdC1hcHBseSwgbG9va2luZyBhdCBgc2VsZWN0aW9uU3RhcnRgXG4gKiBhbmQgYHNlbGVjdGlvbkVuZGAgcm93cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSAmJiAobm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgKGVsZW0udHlwZSA9PT0gJ3RleHQnIHx8IGVsZW0udHlwZSA9PT0gJ3NlYXJjaCcgfHwgZWxlbS50eXBlID09PSAndGVsJyB8fCBlbGVtLnR5cGUgPT09ICd1cmwnIHx8IGVsZW0udHlwZSA9PT0gJ3Bhc3N3b3JkJykgfHwgbm9kZU5hbWUgPT09ICd0ZXh0YXJlYScgfHwgZWxlbS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJyk7XG59XG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbigpIHtcbiAgdmFyIGZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgcmV0dXJuIHtcbiAgICBmb2N1c2VkRWxlbTogZm9jdXNlZEVsZW0sXG4gICAgc2VsZWN0aW9uUmFuZ2U6IGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhmb2N1c2VkRWxlbSkgPyBnZXRTZWxlY3Rpb24oZm9jdXNlZEVsZW0pIDogbnVsbFxuICB9O1xufVxuLyoqXG4gKiBAcmVzdG9yZVNlbGVjdGlvbjogSWYgYW55IHNlbGVjdGlvbiBpbmZvcm1hdGlvbiB3YXMgcG90ZW50aWFsbHkgbG9zdCxcbiAqIHJlc3RvcmUgaXQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcGVyZm9ybWluZyBvcGVyYXRpb25zIHRoYXQgY291bGQgcmVtb3ZlIGRvbVxuICogbm9kZXMgYW5kIHBsYWNlIHRoZW0gYmFjayBpbiwgcmVzdWx0aW5nIGluIGZvY3VzIGJlaW5nIGxvc3QuXG4gKi9cblxuZnVuY3Rpb24gcmVzdG9yZVNlbGVjdGlvbihwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uKSB7XG4gIHZhciBjdXJGb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKCk7XG4gIHZhciBwcmlvckZvY3VzZWRFbGVtID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5mb2N1c2VkRWxlbTtcbiAgdmFyIHByaW9yU2VsZWN0aW9uUmFuZ2UgPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLnNlbGVjdGlvblJhbmdlO1xuXG4gIGlmIChjdXJGb2N1c2VkRWxlbSAhPT0gcHJpb3JGb2N1c2VkRWxlbSAmJiBpc0luRG9jdW1lbnQocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICBpZiAocHJpb3JTZWxlY3Rpb25SYW5nZSAhPT0gbnVsbCAmJiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICAgIHNldFNlbGVjdGlvbihwcmlvckZvY3VzZWRFbGVtLCBwcmlvclNlbGVjdGlvblJhbmdlKTtcbiAgICB9IC8vIEZvY3VzaW5nIGEgbm9kZSBjYW4gY2hhbmdlIHRoZSBzY3JvbGwgcG9zaXRpb24sIHdoaWNoIGlzIHVuZGVzaXJhYmxlXG5cblxuICAgIHZhciBhbmNlc3RvcnMgPSBbXTtcbiAgICB2YXIgYW5jZXN0b3IgPSBwcmlvckZvY3VzZWRFbGVtO1xuXG4gICAgd2hpbGUgKGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZSkge1xuICAgICAgaWYgKGFuY2VzdG9yLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgICAgYW5jZXN0b3JzLnB1c2goe1xuICAgICAgICAgIGVsZW1lbnQ6IGFuY2VzdG9yLFxuICAgICAgICAgIGxlZnQ6IGFuY2VzdG9yLnNjcm9sbExlZnQsXG4gICAgICAgICAgdG9wOiBhbmNlc3Rvci5zY3JvbGxUb3BcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcmlvckZvY3VzZWRFbGVtLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcmlvckZvY3VzZWRFbGVtLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbmNlc3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gYW5jZXN0b3JzW2ldO1xuICAgICAgaW5mby5lbGVtZW50LnNjcm9sbExlZnQgPSBpbmZvLmxlZnQ7XG4gICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsVG9wID0gaW5mby50b3A7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEBnZXRTZWxlY3Rpb246IEdldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSBmb2N1c2VkIHRleHRhcmVhLCBpbnB1dCBvclxuICogY29udGVudEVkaXRhYmxlIG5vZGUuXG4gKiAtQGlucHV0OiBMb29rIHVwIHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dFxuICogLUByZXR1cm4ge3N0YXJ0OiBzZWxlY3Rpb25TdGFydCwgZW5kOiBzZWxlY3Rpb25FbmR9XG4gKi9cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKGlucHV0KSB7XG4gIHZhciBzZWxlY3Rpb247XG5cbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICAvLyBNb2Rlcm4gYnJvd3NlciB3aXRoIGlucHV0IG9yIHRleHRhcmVhLlxuICAgIHNlbGVjdGlvbiA9IHtcbiAgICAgIHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDb250ZW50IGVkaXRhYmxlIG9yIG9sZCBJRSB0ZXh0YXJlYS5cbiAgICBzZWxlY3Rpb24gPSBnZXRPZmZzZXRzKGlucHV0KTtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Rpb24gfHwge1xuICAgIHN0YXJ0OiAwLFxuICAgIGVuZDogMFxuICB9O1xufVxuLyoqXG4gKiBAc2V0U2VsZWN0aW9uOiBTZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgdGV4dGFyZWEgb3IgaW5wdXQgYW5kIGZvY3VzZXNcbiAqIHRoZSBpbnB1dC5cbiAqIC1AaW5wdXQgICAgIFNldCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXQgb3IgdGV4dGFyZWFcbiAqIC1Ab2Zmc2V0cyAgIE9iamVjdCBvZiBzYW1lIGZvcm0gdGhhdCBpcyByZXR1cm5lZCBmcm9tIGdldCpcbiAqL1xuXG5mdW5jdGlvbiBzZXRTZWxlY3Rpb24oaW5wdXQsIG9mZnNldHMpIHtcbiAgdmFyIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgdmFyIGVuZCA9IG9mZnNldHMuZW5kO1xuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHN0YXJ0O1xuICB9XG5cbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICBpbnB1dC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0O1xuICAgIGlucHV0LnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKGVuZCwgaW5wdXQudmFsdWUubGVuZ3RoKTtcbiAgfSBlbHNlIHtcbiAgICBzZXRPZmZzZXRzKGlucHV0LCBvZmZzZXRzKTtcbiAgfVxufVxuXG52YXIgc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50ID0gY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSA8PSAxMTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMygpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvblNlbGVjdCcsIFsnZm9jdXNvdXQnLCAnY29udGV4dG1lbnUnLCAnZHJhZ2VuZCcsICdmb2N1c2luJywgJ2tleWRvd24nLCAna2V5dXAnLCAnbW91c2Vkb3duJywgJ21vdXNldXAnLCAnc2VsZWN0aW9uY2hhbmdlJ10pO1xufVxuXG52YXIgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbnZhciBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbnZhciBtb3VzZURvd24gPSBmYWxzZTtcbi8qKlxuICogR2V0IGFuIG9iamVjdCB3aGljaCBpcyBhIHVuaXF1ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIG5vdCBiZSBjb25zaXN0ZW50IGFjcm9zcyBub2RlcyBvciBicm93c2VycywgYnV0XG4gKiB0d28gaWRlbnRpY2FsIHNlbGVjdGlvbnMgb24gdGhlIHNhbWUgbm9kZSB3aWxsIHJldHVybiBpZGVudGljYWwgb2JqZWN0cy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24kMShub2RlKSB7XG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIG5vZGUgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKG5vZGUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBub2RlLnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBub2RlLnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdmFyIHdpbiA9IG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICAgIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFuY2hvck5vZGU6IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0OiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlOiBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQ6IHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgIH07XG4gIH1cbn1cbi8qKlxuICogR2V0IGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgdGFyZ2V0LlxuICovXG5cblxuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXREb2N1bWVudChldmVudFRhcmdldCkge1xuICByZXR1cm4gZXZlbnRUYXJnZXQud2luZG93ID09PSBldmVudFRhcmdldCA/IGV2ZW50VGFyZ2V0LmRvY3VtZW50IDogZXZlbnRUYXJnZXQubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyBldmVudFRhcmdldCA6IGV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG59XG4vKipcbiAqIFBvbGwgc2VsZWN0aW9uIHRvIHNlZSB3aGV0aGVyIGl0J3MgY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFRhcmdldFxuICogQHJldHVybiB7P1N5bnRoZXRpY0V2ZW50fVxuICovXG5cblxuZnVuY3Rpb24gY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBlbGVtZW50LCBhbmQgdGhhdCB0aGUgdXNlciBpcyBub3QgZHJhZ2dpbmcgYVxuICAvLyBzZWxlY3Rpb24gKHRoaXMgbWF0Y2hlcyBuYXRpdmUgYHNlbGVjdGAgZXZlbnQgYmVoYXZpb3IpLiBJbiBIVE1MNSwgc2VsZWN0XG4gIC8vIGZpcmVzIG9ubHkgb24gaW5wdXQgYW5kIHRleHRhcmVhIHRodXMgaWYgdGhlcmUncyBubyBmb2N1c2VkIGVsZW1lbnQgd2VcbiAgLy8gd29uJ3QgZGlzcGF0Y2guXG4gIHZhciBkb2MgPSBnZXRFdmVudFRhcmdldERvY3VtZW50KG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAobW91c2VEb3duIHx8IGFjdGl2ZUVsZW1lbnQkMSA9PSBudWxsIHx8IGFjdGl2ZUVsZW1lbnQkMSAhPT0gZ2V0QWN0aXZlRWxlbWVudChkb2MpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIE9ubHkgZmlyZSB3aGVuIHNlbGVjdGlvbiBoYXMgYWN0dWFsbHkgY2hhbmdlZC5cblxuXG4gIHZhciBjdXJyZW50U2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uJDEoYWN0aXZlRWxlbWVudCQxKTtcblxuICBpZiAoIWxhc3RTZWxlY3Rpb24gfHwgIXNoYWxsb3dFcXVhbChsYXN0U2VsZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSkge1xuICAgIGxhc3RTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoYWN0aXZlRWxlbWVudEluc3QkMSwgJ29uU2VsZWN0Jyk7XG5cbiAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudCgnb25TZWxlY3QnLCAnc2VsZWN0JywgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICAgIH0pO1xuICAgICAgZXZlbnQudGFyZ2V0ID0gYWN0aXZlRWxlbWVudCQxO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvblNlbGVjdGAgZXZlbnQgdGhhdCBub3JtYWxpemVzIHNlbGVjdCBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIGNvbnRlbnRFZGl0YWJsZVxuICpcbiAqIFRoaXMgZGlmZmVycyBmcm9tIG5hdGl2ZSBicm93c2VyIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAtIEZpcmVzIG9uIGNvbnRlbnRFZGl0YWJsZSBmaWVsZHMgYXMgd2VsbCBhcyBpbnB1dHMuXG4gKiAtIEZpcmVzIGZvciBjb2xsYXBzZWQgc2VsZWN0aW9uLlxuICogLSBGaXJlcyBhZnRlciB1c2VyIGlucHV0LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcblxuICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpIDogd2luZG93O1xuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgLy8gVHJhY2sgdGhlIGlucHV0IG5vZGUgdGhhdCBoYXMgZm9jdXMuXG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpIHx8IHRhcmdldE5vZGUuY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpIHtcbiAgICAgICAgYWN0aXZlRWxlbWVudCQxID0gdGFyZ2V0Tm9kZTtcbiAgICAgICAgYWN0aXZlRWxlbWVudEluc3QkMSA9IHRhcmdldEluc3Q7XG4gICAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIGFjdGl2ZUVsZW1lbnQkMSA9IG51bGw7XG4gICAgICBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbiAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgYnJlYWs7XG4gICAgLy8gRG9uJ3QgZmlyZSB0aGUgZXZlbnQgd2hpbGUgdGhlIHVzZXIgaXMgZHJhZ2dpbmcuIFRoaXMgbWF0Y2hlcyB0aGVcbiAgICAvLyBzZW1hbnRpY3Mgb2YgdGhlIG5hdGl2ZSBzZWxlY3QgZXZlbnQuXG5cbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgICAgbW91c2VEb3duID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY29udGV4dG1lbnUnOlxuICAgIGNhc2UgJ21vdXNldXAnOlxuICAgIGNhc2UgJ2RyYWdlbmQnOlxuICAgICAgbW91c2VEb3duID0gZmFsc2U7XG4gICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgYnJlYWs7XG4gICAgLy8gQ2hyb21lIGFuZCBJRSBmaXJlIG5vbi1zdGFuZGFyZCBldmVudCB3aGVuIHNlbGVjdGlvbiBpcyBjaGFuZ2VkIChhbmRcbiAgICAvLyBzb21ldGltZXMgd2hlbiBpdCBoYXNuJ3QpLiBJRSdzIGV2ZW50IGZpcmVzIG91dCBvZiBvcmRlciB3aXRoIHJlc3BlY3RcbiAgICAvLyB0byBrZXkgYW5kIGlucHV0IGV2ZW50cyBvbiBkZWxldGlvbiwgc28gd2UgZGlzY2FyZCBpdC5cbiAgICAvL1xuICAgIC8vIEZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IHNlbGVjdGlvbmNoYW5nZSwgc28gY2hlY2sgc2VsZWN0aW9uIHN0YXR1c1xuICAgIC8vIGFmdGVyIGVhY2gga2V5IGVudHJ5LiBUaGUgc2VsZWN0aW9uIGNoYW5nZXMgYWZ0ZXIga2V5ZG93biBhbmQgYmVmb3JlXG4gICAgLy8ga2V5dXAsIGJ1dCB3ZSBjaGVjayBvbiBrZXlkb3duIGFzIHdlbGwgaW4gdGhlIGNhc2Ugb2YgaG9sZGluZyBkb3duIGFcbiAgICAvLyBrZXksIHdoZW4gbXVsdGlwbGUga2V5ZG93biBldmVudHMgYXJlIGZpcmVkIGJ1dCBvbmx5IG9uZSBrZXl1cCBpcy5cbiAgICAvLyBUaGlzIGlzIGFsc28gb3VyIGFwcHJvYWNoIGZvciBJRSBoYW5kbGluZywgZm9yIHRoZSByZWFzb24gYWJvdmUuXG5cbiAgICBjYXNlICdzZWxlY3Rpb25jaGFuZ2UnOlxuICAgICAgaWYgKHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIC8vIGZhbGxzIHRocm91Z2hcblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQ0KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIHJlYWN0TmFtZSA9IHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzLmdldChkb21FdmVudE5hbWUpO1xuXG4gIGlmIChyZWFjdE5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNFdmVudDtcbiAgdmFyIHJlYWN0RXZlbnRUeXBlID0gZG9tRXZlbnROYW1lO1xuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEga2V5cHJlc3MgZXZlbnQgZm9yIGZ1bmN0aW9uIGtleXMgdG9vLiBUaGlzIHJlbW92ZXNcbiAgICAgIC8vIHRoZSB1bndhbnRlZCBrZXlwcmVzcyBldmVudHMuIEVudGVyIGlzIGhvd2V2ZXIgYm90aCBwcmludGFibGUgYW5kXG4gICAgICAvLyBub24tcHJpbnRhYmxlLiBPbmUgd291bGQgZXhwZWN0IFRhYiB0byBiZSBhcyB3ZWxsIChidXQgaXQgaXNuJ3QpLlxuICAgICAgaWYgKGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgcmVhY3RFdmVudFR5cGUgPSAnZm9jdXMnO1xuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgcmVhY3RFdmVudFR5cGUgPSAnYmx1cic7XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdiZWZvcmVibHVyJzpcbiAgICBjYXNlICdhZnRlcmJsdXInOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY2xpY2snOlxuICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEgY2xpY2sgZXZlbnQgb24gcmlnaHQgbW91c2UgY2xpY2tzLiBUaGlzIHJlbW92ZXMgdGhlXG4gICAgICAvLyB1bndhbnRlZCBjbGljayBldmVudHMuXG4gICAgICBpZiAobmF0aXZlRXZlbnQuYnV0dG9uID09PSAyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ2F1eGNsaWNrJzpcbiAgICBjYXNlICdkYmxjbGljayc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdtb3VzZW1vdmUnOlxuICAgIGNhc2UgJ21vdXNldXAnOiAvLyBUT0RPOiBEaXNhYmxlZCBlbGVtZW50cyBzaG91bGQgbm90IHJlc3BvbmQgdG8gbW91c2UgZXZlbnRzXG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICBjYXNlICdjb250ZXh0bWVudSc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkcmFnJzpcbiAgICBjYXNlICdkcmFnZW5kJzpcbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgIGNhc2UgJ2RyYWdleGl0JzpcbiAgICBjYXNlICdkcmFnbGVhdmUnOlxuICAgIGNhc2UgJ2RyYWdvdmVyJzpcbiAgICBjYXNlICdkcmFnc3RhcnQnOlxuICAgIGNhc2UgJ2Ryb3AnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRHJhZ0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0b3VjaGNhbmNlbCc6XG4gICAgY2FzZSAndG91Y2hlbmQnOlxuICAgIGNhc2UgJ3RvdWNobW92ZSc6XG4gICAgY2FzZSAndG91Y2hzdGFydCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUb3VjaEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEFOSU1BVElPTl9FTkQ6XG4gICAgY2FzZSBBTklNQVRJT05fSVRFUkFUSU9OOlxuICAgIGNhc2UgQU5JTUFUSU9OX1NUQVJUOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQW5pbWF0aW9uRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVFJBTlNJVElPTl9FTkQ6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Njcm9sbCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNVSUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd3aGVlbCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjb3B5JzpcbiAgICBjYXNlICdjdXQnOlxuICAgIGNhc2UgJ3Bhc3RlJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAnbG9zdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdwb2ludGVyY2FuY2VsJzpcbiAgICBjYXNlICdwb2ludGVyZG93bic6XG4gICAgY2FzZSAncG9pbnRlcm1vdmUnOlxuICAgIGNhc2UgJ3BvaW50ZXJvdXQnOlxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICBjYXNlICdwb2ludGVydXAnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljUG9pbnRlckV2ZW50O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgaW5DYXB0dXJlUGhhc2UgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpICE9PSAwO1xuXG4gIHtcbiAgICAvLyBTb21lIGV2ZW50cyBkb24ndCBidWJibGUgaW4gdGhlIGJyb3dzZXIuXG4gICAgLy8gSW4gdGhlIHBhc3QsIFJlYWN0IGhhcyBhbHdheXMgYnViYmxlZCB0aGVtLCBidXQgdGhpcyBjYW4gYmUgc3VycHJpc2luZy5cbiAgICAvLyBXZSdyZSBnb2luZyB0byB0cnkgYWxpZ25pbmcgY2xvc2VyIHRvIHRoZSBicm93c2VyIGJlaGF2aW9yIGJ5IG5vdCBidWJibGluZ1xuICAgIC8vIHRoZW0gaW4gUmVhY3QgZWl0aGVyLiBXZSdsbCBzdGFydCBieSBub3QgYnViYmxpbmcgb25TY3JvbGwsIGFuZCB0aGVuIGV4cGFuZC5cbiAgICB2YXIgYWNjdW11bGF0ZVRhcmdldE9ubHkgPSAhaW5DYXB0dXJlUGhhc2UgJiYgLy8gVE9ETzogaWRlYWxseSwgd2UnZCBldmVudHVhbGx5IGFkZCBhbGwgZXZlbnRzIGZyb21cbiAgICAvLyBub25EZWxlZ2F0ZWRFdmVudHMgbGlzdCBpbiBET01QbHVnaW5FdmVudFN5c3RlbS5cbiAgICAvLyBUaGVuIHdlIGNhbiByZW1vdmUgdGhpcyBzcGVjaWFsIGxpc3QuXG4gICAgLy8gVGhpcyBpcyBhIGJyZWFraW5nIGNoYW5nZSB0aGF0IGNhbiB3YWl0IHVudGlsIFJlYWN0IDE4LlxuICAgIGRvbUV2ZW50TmFtZSA9PT0gJ3Njcm9sbCc7XG5cbiAgICB2YXIgX2xpc3RlbmVycyA9IGFjY3VtdWxhdGVTaW5nbGVQaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCByZWFjdE5hbWUsIG5hdGl2ZUV2ZW50LnR5cGUsIGluQ2FwdHVyZVBoYXNlLCBhY2N1bXVsYXRlVGFyZ2V0T25seSk7XG5cbiAgICBpZiAoX2xpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGNyZWF0ZSBldmVudCBsYXppbHkuXG4gICAgICB2YXIgX2V2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihyZWFjdE5hbWUsIHJlYWN0RXZlbnRUeXBlLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICBldmVudDogX2V2ZW50LFxuICAgICAgICBsaXN0ZW5lcnM6IF9saXN0ZW5lcnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUT0RPOiByZW1vdmUgdG9wLWxldmVsIHNpZGUgZWZmZWN0LlxucmVnaXN0ZXJTaW1wbGVFdmVudHMoKTtcbnJlZ2lzdGVyRXZlbnRzJDIoKTtcbnJlZ2lzdGVyRXZlbnRzJDEoKTtcbnJlZ2lzdGVyRXZlbnRzJDMoKTtcbnJlZ2lzdGVyRXZlbnRzKCk7XG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkNShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIC8vIFRPRE86IHdlIHNob3VsZCByZW1vdmUgdGhlIGNvbmNlcHQgb2YgYSBcIlNpbXBsZUV2ZW50UGx1Z2luXCIuXG4gIC8vIFRoaXMgaXMgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGV2ZW50IHN5c3RlbS4gQWxsXG4gIC8vIHRoZSBvdGhlciBwbHVnaW5zIGFyZSBlc3NlbnRpYWxseSBwb2x5ZmlsbHMuIFNvIHRoZSBwbHVnaW5cbiAgLy8gc2hvdWxkIHByb2JhYmx5IGJlIGlubGluZWQgc29tZXdoZXJlIGFuZCBoYXZlIGl0cyBsb2dpY1xuICAvLyBiZSBjb3JlIHRoZSB0byBldmVudCBzeXN0ZW0uIFRoaXMgd291bGQgcG90ZW50aWFsbHkgYWxsb3dcbiAgLy8gdXMgdG8gc2hpcCBidWlsZHMgb2YgUmVhY3Qgd2l0aG91dCB0aGUgcG9seWZpbGxlZCBwbHVnaW5zIGJlbG93LlxuICBleHRyYWN0RXZlbnRzJDQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICB2YXIgc2hvdWxkUHJvY2Vzc1BvbHlmaWxsUGx1Z2lucyA9IChldmVudFN5c3RlbUZsYWdzICYgU0hPVUxEX05PVF9QUk9DRVNTX1BPTFlGSUxMX0VWRU5UX1BMVUdJTlMpID09PSAwOyAvLyBXZSBkb24ndCBwcm9jZXNzIHRoZXNlIGV2ZW50cyB1bmxlc3Mgd2UgYXJlIGluIHRoZVxuICAvLyBldmVudCdzIG5hdGl2ZSBcImJ1YmJsZVwiIHBoYXNlLCB3aGljaCBtZWFucyB0aGF0IHdlJ3JlXG4gIC8vIG5vdCBpbiB0aGUgY2FwdHVyZSBwaGFzZS4gVGhhdCdzIGJlY2F1c2Ugd2UgZW11bGF0ZVxuICAvLyB0aGUgY2FwdHVyZSBwaGFzZSBoZXJlIHN0aWxsLiBUaGlzIGlzIGEgdHJhZGUtb2ZmLFxuICAvLyBiZWNhdXNlIGluIGFuIGlkZWFsIHdvcmxkIHdlIHdvdWxkIG5vdCBlbXVsYXRlIGFuZCB1c2VcbiAgLy8gdGhlIHBoYXNlcyBwcm9wZXJseSwgbGlrZSB3ZSBkbyB3aXRoIHRoZSBTaW1wbGVFdmVudFxuICAvLyBwbHVnaW4uIEhvd2V2ZXIsIHRoZSBwbHVnaW5zIGJlbG93IGVpdGhlciBleHBlY3RcbiAgLy8gZW11bGF0aW9uIChFbnRlckxlYXZlKSBvciB1c2Ugc3RhdGUgbG9jYWxpemVkIHRvIHRoYXRcbiAgLy8gcGx1Z2luIChCZWZvcmVJbnB1dCwgQ2hhbmdlLCBTZWxlY3QpLiBUaGUgc3RhdGUgaW5cbiAgLy8gdGhlc2UgbW9kdWxlcyBjb21wbGljYXRlcyB0aGluZ3MsIGFzIHlvdSdsbCBlc3NlbnRpYWxseVxuICAvLyBnZXQgdGhlIGNhc2Ugd2hlcmUgdGhlIGNhcHR1cmUgcGhhc2UgZXZlbnQgbWlnaHQgY2hhbmdlXG4gIC8vIHN0YXRlLCBvbmx5IGZvciB0aGUgZm9sbG93aW5nIGJ1YmJsZSBldmVudCB0byBjb21lIGluXG4gIC8vIGxhdGVyIGFuZCBub3QgdHJpZ2dlciBhbnl0aGluZyBhcyB0aGUgc3RhdGUgbm93XG4gIC8vIGludmFsaWRhdGVzIHRoZSBoZXVyaXN0aWNzIG9mIHRoZSBldmVudCBwbHVnaW4uIFdlXG4gIC8vIGNvdWxkIGFsdGVyIGFsbCB0aGVzZSBwbHVnaW5zIHRvIHdvcmsgaW4gc3VjaCB3YXlzLCBidXRcbiAgLy8gdGhhdCBtaWdodCBjYXVzZSBvdGhlciB1bmtub3duIHNpZGUtZWZmZWN0cyB0aGF0IHdlXG4gIC8vIGNhbid0IGZvcnNlZSByaWdodCBub3cuXG5cbiAgaWYgKHNob3VsZFByb2Nlc3NQb2x5ZmlsbFBsdWdpbnMpIHtcbiAgICBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICAgIGV4dHJhY3RFdmVudHMkMShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZXh0cmFjdEV2ZW50cyQzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBleHRyYWN0RXZlbnRzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgfVxufSAvLyBMaXN0IG9mIGV2ZW50cyB0aGF0IG5lZWQgdG8gYmUgaW5kaXZpZHVhbGx5IGF0dGFjaGVkIHRvIG1lZGlhIGVsZW1lbnRzLlxuXG5cbnZhciBtZWRpYUV2ZW50VHlwZXMgPSBbJ2Fib3J0JywgJ2NhbnBsYXknLCAnY2FucGxheXRocm91Z2gnLCAnZHVyYXRpb25jaGFuZ2UnLCAnZW1wdGllZCcsICdlbmNyeXB0ZWQnLCAnZW5kZWQnLCAnZXJyb3InLCAnbG9hZGVkZGF0YScsICdsb2FkZWRtZXRhZGF0YScsICdsb2Fkc3RhcnQnLCAncGF1c2UnLCAncGxheScsICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3JhdGVjaGFuZ2UnLCAnc2Vla2VkJywgJ3NlZWtpbmcnLCAnc3RhbGxlZCcsICdzdXNwZW5kJywgJ3RpbWV1cGRhdGUnLCAndm9sdW1lY2hhbmdlJywgJ3dhaXRpbmcnXTsgLy8gV2Ugc2hvdWxkIG5vdCBkZWxlZ2F0ZSB0aGVzZSBldmVudHMgdG8gdGhlIGNvbnRhaW5lciwgYnV0IHJhdGhlclxuLy8gc2V0IHRoZW0gb24gdGhlIGFjdHVhbCB0YXJnZXQgZWxlbWVudCBpdHNlbGYuIFRoaXMgaXMgcHJpbWFyaWx5XG4vLyBiZWNhdXNlIHRoZXNlIGV2ZW50cyBkbyBub3QgY29uc2lzdGVudGx5IGJ1YmJsZSBpbiB0aGUgRE9NLlxuXG52YXIgbm9uRGVsZWdhdGVkRXZlbnRzID0gbmV3IFNldChbJ2NhbmNlbCcsICdjbG9zZScsICdpbnZhbGlkJywgJ2xvYWQnLCAnc2Nyb2xsJywgJ3RvZ2dsZSddLmNvbmNhdChtZWRpYUV2ZW50VHlwZXMpKTtcblxuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCkge1xuICB2YXIgdHlwZSA9IGV2ZW50LnR5cGUgfHwgJ3Vua25vd24tZXZlbnQnO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKHR5cGUsIGxpc3RlbmVyLCB1bmRlZmluZWQsIGV2ZW50KTtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NEaXNwYXRjaFF1ZXVlSXRlbXNJbk9yZGVyKGV2ZW50LCBkaXNwYXRjaExpc3RlbmVycywgaW5DYXB0dXJlUGhhc2UpIHtcbiAgdmFyIHByZXZpb3VzSW5zdGFuY2U7XG5cbiAgaWYgKGluQ2FwdHVyZVBoYXNlKSB7XG4gICAgZm9yICh2YXIgaSA9IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBkaXNwYXRjaExpc3RlbmVyc1tpXSxcbiAgICAgICAgICBpbnN0YW5jZSA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmluc3RhbmNlLFxuICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgIGxpc3RlbmVyID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkubGlzdGVuZXI7XG5cbiAgICAgIGlmIChpbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCk7XG4gICAgICBwcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kgPSBkaXNwYXRjaExpc3RlbmVyc1tfaV0sXG4gICAgICAgICAgX2luc3RhbmNlID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmluc3RhbmNlLFxuICAgICAgICAgIF9jdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgX2xpc3RlbmVyID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmxpc3RlbmVyO1xuXG4gICAgICBpZiAoX2luc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIF9saXN0ZW5lciwgX2N1cnJlbnRUYXJnZXQpO1xuICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IF9pbnN0YW5jZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncykge1xuICB2YXIgaW5DYXB0dXJlUGhhc2UgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpICE9PSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGF0Y2hRdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBfZGlzcGF0Y2hRdWV1ZSRpID0gZGlzcGF0Y2hRdWV1ZVtpXSxcbiAgICAgICAgZXZlbnQgPSBfZGlzcGF0Y2hRdWV1ZSRpLmV2ZW50LFxuICAgICAgICBsaXN0ZW5lcnMgPSBfZGlzcGF0Y2hRdWV1ZSRpLmxpc3RlbmVycztcbiAgICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZUl0ZW1zSW5PcmRlcihldmVudCwgbGlzdGVuZXJzLCBpbkNhcHR1cmVQaGFzZSk7IC8vICBldmVudCBzeXN0ZW0gZG9lc24ndCB1c2UgcG9vbGluZy5cbiAgfSAvLyBUaGlzIHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJldGhyb3cgaWYgYW55IG9mIHRoZSBldmVudCBoYW5kbGVycyB0aHJldy5cblxuXG4gIHJldGhyb3dDYXVnaHRFcnJvcigpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50c0ZvclBsdWdpbnMoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgdmFyIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgZXh0cmFjdEV2ZW50cyQ1KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncyk7XG59XG5cbmZ1bmN0aW9uIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRFbGVtZW50KSB7XG4gIHZhciBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyID0gZmFsc2U7XG4gIHZhciBsaXN0ZW5lclNldCA9IGdldEV2ZW50TGlzdGVuZXJTZXQodGFyZ2V0RWxlbWVudCk7XG4gIHZhciBsaXN0ZW5lclNldEtleSA9IGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG5cbiAgaWYgKCFsaXN0ZW5lclNldC5oYXMobGlzdGVuZXJTZXRLZXkpKSB7XG4gICAgYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0RWxlbWVudCwgZG9tRXZlbnROYW1lLCBJU19OT05fREVMRUdBVEVELCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcbiAgICBsaXN0ZW5lclNldC5hZGQobGlzdGVuZXJTZXRLZXkpO1xuICB9XG59XG52YXIgbGlzdGVuaW5nTWFya2VyID0gJ19yZWFjdExpc3RlbmluZycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcbmZ1bmN0aW9uIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSkge1xuICAgICAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBkb24ndCBpdGVyYXRlIHRocm91Z2ggZXZlbnRzXG4gICAgICAvLyBmb3IgdGhlIHNhbWUgcG9ydGFsIGNvbnRhaW5lciBvciByb290IG5vZGUgbW9yZSB0aGFuIG9uY2UuXG4gICAgICAvLyBUT0RPOiBvbmNlIHdlIHJlbW92ZSB0aGUgZmxhZywgd2UgbWF5IGJlIGFibGUgdG8gYWxzb1xuICAgICAgLy8gcmVtb3ZlIHNvbWUgb2YgdGhlIGJvb2trZWVwaW5nIG1hcHMgdXNlZCBmb3IgbGF6aW5lc3MuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSA9IHRydWU7XG4gICAgYWxsTmF0aXZlRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGRvbUV2ZW50TmFtZSkge1xuICAgICAgaWYgKCFub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkpIHtcbiAgICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIGZhbHNlLCByb290Q29udGFpbmVyRWxlbWVudCwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCB0cnVlLCByb290Q29udGFpbmVyRWxlbWVudCwgbnVsbCk7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCByb290Q29udGFpbmVyRWxlbWVudCwgdGFyZ2V0RWxlbWVudCkge1xuICB2YXIgZXZlbnRTeXN0ZW1GbGFncyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogMDtcbiAgdmFyIHRhcmdldCA9IHJvb3RDb250YWluZXJFbGVtZW50OyAvLyBzZWxlY3Rpb25jaGFuZ2UgbmVlZHMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50XG4gIC8vIG90aGVyd2lzZSBpdCB3b24ndCBjYXB0dXJlIGluY29taW5nIGV2ZW50cyB0aGF0IGFyZSBvbmx5XG4gIC8vIHRyaWdnZXJlZCBvbiB0aGUgZG9jdW1lbnQgZGlyZWN0bHkuXG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3NlbGVjdGlvbmNoYW5nZScgJiYgcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGUgIT09IERPQ1VNRU5UX05PREUpIHtcbiAgICB0YXJnZXQgPSByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xuICB9IC8vIElmIHRoZSBldmVudCBjYW4gYmUgZGVsZWdhdGVkIChvciBpcyBjYXB0dXJlIHBoYXNlKSwgd2UgY2FuXG4gIC8vIHJlZ2lzdGVyIGl0IHRvIHRoZSByb290IGNvbnRhaW5lci4gT3RoZXJ3aXNlLCB3ZSBzaG91bGRcbiAgLy8gcmVnaXN0ZXIgdGhlIGV2ZW50IHRvIHRoZSB0YXJnZXQgZWxlbWVudCBhbmQgbWFyayBpdCBhc1xuICAvLyBhIG5vbi1kZWxlZ2F0ZWQgZXZlbnQuXG5cblxuICBpZiAodGFyZ2V0RWxlbWVudCAhPT0gbnVsbCAmJiAhaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciAmJiBub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkpIHtcbiAgICAvLyBGb3IgYWxsIG5vbi1kZWxlZ2F0ZWQgZXZlbnRzLCBhcGFydCBmcm9tIHNjcm9sbCwgd2UgYXR0YWNoXG4gICAgLy8gdGhlaXIgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSByZXNwZWN0aXZlIGVsZW1lbnRzIHRoYXQgdGhlaXJcbiAgICAvLyBldmVudHMgZmlyZSBvbi4gVGhhdCBtZWFucyB3ZSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGFzIGV2ZW50XG4gICAgLy8gbGlzdGVuZXIgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCBwcmV2aW91c2x5LiBIb3dldmVyLCB3ZVxuICAgIC8vIHNwZWNpYWwgY2FzZSB0aGUgc2Nyb2xsIGV2ZW50IGJlY2F1c2UgdGhlIHJlYWxpdHkgaXMgdGhhdCBhbnlcbiAgICAvLyBlbGVtZW50IGNhbiBzY3JvbGwuXG4gICAgLy8gVE9ETzogaWRlYWxseSwgd2UnZCBldmVudHVhbGx5IGFwcGx5IHRoZSBzYW1lIGxvZ2ljIHRvIGFsbFxuICAgIC8vIGV2ZW50cyBmcm9tIHRoZSBub25EZWxlZ2F0ZWRFdmVudHMgbGlzdC4gVGhlbiB3ZSBjYW4gcmVtb3ZlXG4gICAgLy8gdGhpcyBzcGVjaWFsIGNhc2UgYW5kIHVzZSB0aGUgc2FtZSBsb2dpYyBmb3IgYWxsIGV2ZW50cy5cbiAgICBpZiAoZG9tRXZlbnROYW1lICE9PSAnc2Nyb2xsJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50U3lzdGVtRmxhZ3MgfD0gSVNfTk9OX0RFTEVHQVRFRDtcbiAgICB0YXJnZXQgPSB0YXJnZXRFbGVtZW50O1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyU2V0ID0gZ2V0RXZlbnRMaXN0ZW5lclNldCh0YXJnZXQpO1xuICB2YXIgbGlzdGVuZXJTZXRLZXkgPSBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpOyAvLyBJZiB0aGUgbGlzdGVuZXIgZW50cnkgaXMgZW1wdHkgb3Igd2Ugc2hvdWxkIHVwZ3JhZGUsIHRoZW5cbiAgLy8gd2UgbmVlZCB0byB0cmFwIGFuIGV2ZW50IGxpc3RlbmVyIG9udG8gdGhlIHRhcmdldC5cblxuICBpZiAoIWxpc3RlbmVyU2V0LmhhcyhsaXN0ZW5lclNldEtleSkpIHtcbiAgICBpZiAoaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcikge1xuICAgICAgZXZlbnRTeXN0ZW1GbGFncyB8PSBJU19DQVBUVVJFX1BIQVNFO1xuICAgIH1cblxuICAgIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcbiAgICBsaXN0ZW5lclNldC5hZGQobGlzdGVuZXJTZXRLZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCBpc0RlZmVycmVkTGlzdGVuZXJGb3JMZWdhY3lGQlN1cHBvcnQpIHtcbiAgdmFyIGxpc3RlbmVyID0gY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXJXaXRoUHJpb3JpdHkodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MpOyAvLyBJZiBwYXNzaXZlIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGVuIHRoZSBldmVudCB3aWxsIGJlXG4gIC8vIGFjdGl2ZSBhbmQgbm90IHBhc3NpdmUuXG5cbiAgdmFyIGlzUGFzc2l2ZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xuXG4gIGlmIChwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCkge1xuICAgIC8vIEJyb3dzZXJzIGludHJvZHVjZWQgYW4gaW50ZXJ2ZW50aW9uLCBtYWtpbmcgdGhlc2UgZXZlbnRzXG4gICAgLy8gcGFzc2l2ZSBieSBkZWZhdWx0IG9uIGRvY3VtZW50LiBSZWFjdCBkb2Vzbid0IGJpbmQgdGhlbVxuICAgIC8vIHRvIGRvY3VtZW50IGFueW1vcmUsIGJ1dCBjaGFuZ2luZyB0aGlzIG5vdyB3b3VsZCB1bmRvXG4gICAgLy8gdGhlIHBlcmZvcm1hbmNlIHdpbnMgZnJvbSB0aGUgY2hhbmdlLiBTbyB3ZSBlbXVsYXRlXG4gICAgLy8gdGhlIGV4aXN0aW5nIGJlaGF2aW9yIG1hbnVhbGx5IG9uIHRoZSByb290cyBub3cuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTY1MVxuICAgIGlmIChkb21FdmVudE5hbWUgPT09ICd0b3VjaHN0YXJ0JyB8fCBkb21FdmVudE5hbWUgPT09ICd0b3VjaG1vdmUnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3doZWVsJykge1xuICAgICAgaXNQYXNzaXZlTGlzdGVuZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRhcmdldENvbnRhaW5lciA9ICB0YXJnZXRDb250YWluZXI7XG4gIHZhciB1bnN1YnNjcmliZUxpc3RlbmVyOyAvLyBXaGVuIGxlZ2FjeUZCU3VwcG9ydCBpcyBlbmFibGVkLCBpdCdzIGZvciB3aGVuIHdlXG5cblxuICBpZiAoaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcikge1xuICAgIGlmIChpc1Bhc3NpdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNQYXNzaXZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50QnViYmxlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGdyYW5kQ29udGFpbmVyLCB0YXJnZXRDb250YWluZXIpIHtcbiAgcmV0dXJuIGdyYW5kQ29udGFpbmVyID09PSB0YXJnZXRDb250YWluZXIgfHwgZ3JhbmRDb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBncmFuZENvbnRhaW5lci5wYXJlbnROb2RlID09PSB0YXJnZXRDb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIGFuY2VzdG9ySW5zdCA9IHRhcmdldEluc3Q7XG5cbiAgaWYgKChldmVudFN5c3RlbUZsYWdzICYgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUpID09PSAwICYmIChldmVudFN5c3RlbUZsYWdzICYgSVNfTk9OX0RFTEVHQVRFRCkgPT09IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyTm9kZSA9IHRhcmdldENvbnRhaW5lcjsgLy8gSWYgd2UgYXJlIHVzaW5nIHRoZSBsZWdhY3kgRkIgc3VwcG9ydCBmbGFnLCB3ZVxuXG4gICAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoZSBiZWxvdyBsb2dpYyBhdHRlbXB0cyB0byB3b3JrIG91dCBpZiB3ZSBuZWVkIHRvIGNoYW5nZVxuICAgICAgLy8gdGhlIHRhcmdldCBmaWJlciB0byBhIGRpZmZlcmVudCBhbmNlc3Rvci4gV2UgaGFkIHNpbWlsYXIgbG9naWNcbiAgICAgIC8vIGluIHRoZSBsZWdhY3kgZXZlbnQgc3lzdGVtLCBleGNlcHQgdGhlIGJpZyBkaWZmZXJlbmNlIGJldHdlZW5cbiAgICAgIC8vIHN5c3RlbXMgaXMgdGhhdCB0aGUgbW9kZXJuIGV2ZW50IHN5c3RlbSBub3cgaGFzIGFuIGV2ZW50IGxpc3RlbmVyXG4gICAgICAvLyBhdHRhY2hlZCB0byBlYWNoIFJlYWN0IFJvb3QgYW5kIFJlYWN0IFBvcnRhbCBSb290LiBUb2dldGhlcixcbiAgICAgIC8vIHRoZSBET00gbm9kZXMgcmVwcmVzZW50aW5nIHRoZXNlIHJvb3RzIGFyZSB0aGUgXCJyb290Q29udGFpbmVyXCIuXG4gICAgICAvLyBUbyBmaWd1cmUgb3V0IHdoaWNoIGFuY2VzdG9yIGluc3RhbmNlIHdlIHNob3VsZCB1c2UsIHdlIHRyYXZlcnNlXG4gICAgICAvLyB1cCB0aGUgZmliZXIgdHJlZSBmcm9tIHRoZSB0YXJnZXQgaW5zdGFuY2UgYW5kIGF0dGVtcHQgdG8gZmluZFxuICAgICAgLy8gcm9vdCBib3VuZGFyaWVzIHRoYXQgbWF0Y2ggdGhhdCBvZiBvdXIgY3VycmVudCBcInJvb3RDb250YWluZXJcIi5cbiAgICAgIC8vIElmIHdlIGZpbmQgdGhhdCBcInJvb3RDb250YWluZXJcIiwgd2UgZmluZCB0aGUgcGFyZW50IGZpYmVyXG4gICAgICAvLyBzdWItdHJlZSBmb3IgdGhhdCByb290IGFuZCBtYWtlIHRoYXQgb3VyIGFuY2VzdG9yIGluc3RhbmNlLlxuICAgICAgdmFyIG5vZGUgPSB0YXJnZXRJbnN0O1xuXG4gICAgICBtYWluTG9vcDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9kZVRhZyA9IG5vZGUudGFnO1xuXG4gICAgICAgIGlmIChub2RlVGFnID09PSBIb3N0Um9vdCB8fCBub2RlVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICBpZiAoaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoY29udGFpbmVyLCB0YXJnZXRDb250YWluZXJOb2RlKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5vZGVUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICAgIC8vIFRoZSB0YXJnZXQgaXMgYSBwb3J0YWwsIGJ1dCBpdCdzIG5vdCB0aGUgcm9vdENvbnRhaW5lciB3ZSdyZSBsb29raW5nIGZvci5cbiAgICAgICAgICAgIC8vIE5vcm1hbGx5IHBvcnRhbHMgaGFuZGxlIHRoZWlyIG93biBldmVudHMgYWxsIHRoZSB3YXkgZG93biB0byB0aGUgcm9vdC5cbiAgICAgICAgICAgIC8vIFNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIHN0b3Agbm93LiBIb3dldmVyLCB3ZSBkb24ndCBrbm93IGlmIHRoaXMgcG9ydGFsXG4gICAgICAgICAgICAvLyB3YXMgcGFydCBvZiAqb3VyKiByb290LlxuICAgICAgICAgICAgdmFyIGdyYW5kTm9kZSA9IG5vZGUucmV0dXJuO1xuXG4gICAgICAgICAgICB3aGlsZSAoZ3JhbmROb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBncmFuZFRhZyA9IGdyYW5kTm9kZS50YWc7XG5cbiAgICAgICAgICAgICAgaWYgKGdyYW5kVGFnID09PSBIb3N0Um9vdCB8fCBncmFuZFRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgICAgICAgIHZhciBncmFuZENvbnRhaW5lciA9IGdyYW5kTm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgICAgICAgIGlmIChpc01hdGNoaW5nUm9vdENvbnRhaW5lcihncmFuZENvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJvb3RDb250YWluZXIgd2UncmUgbG9va2luZyBmb3IgYW5kIHdlIGZvdW5kIGl0IGFzXG4gICAgICAgICAgICAgICAgICAvLyBhIHBhcmVudCBvZiB0aGUgUG9ydGFsLiBUaGF0IG1lYW5zIHdlIGNhbiBpZ25vcmUgaXQgYmVjYXVzZSB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIFBvcnRhbCB3aWxsIGJ1YmJsZSB0aHJvdWdoIHRvIHVzLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGdyYW5kTm9kZSA9IGdyYW5kTm9kZS5yZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBOb3cgd2UgbmVlZCB0byBmaW5kIGl0J3MgY29ycmVzcG9uZGluZyBob3N0IGZpYmVyIGluIHRoZSBvdGhlclxuICAgICAgICAgIC8vIHRyZWUuIFRvIGRvIHRoaXMgd2UgY2FuIHVzZSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSwgYnV0IHdlXG4gICAgICAgICAgLy8gbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmaWJlciBpcyBhIGhvc3QgaW5zdGFuY2UsIG90aGVyd2lzZVxuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdHJhdmVyc2UgdXAgdGhyb3VnaCB0aGUgRE9NIHRpbGwgd2UgZmluZCB0aGUgY29ycmVjdFxuICAgICAgICAgIC8vIG5vZGUgdGhhdCBpcyBmcm9tIHRoZSBvdGhlciB0cmVlLlxuXG5cbiAgICAgICAgICB3aGlsZSAoY29udGFpbmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKGNvbnRhaW5lcik7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudE5vZGUudGFnO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50VGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHBhcmVudFRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgICAgICAgbm9kZSA9IGFuY2VzdG9ySW5zdCA9IHBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG1haW5Mb29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYmF0Y2hlZEV2ZW50VXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnRzRm9yUGx1Z2lucyhkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCBhbmNlc3Rvckluc3QpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVNpbmdsZVBoYXNlTGlzdGVuZXJzKHRhcmdldEZpYmVyLCByZWFjdE5hbWUsIG5hdGl2ZUV2ZW50VHlwZSwgaW5DYXB0dXJlUGhhc2UsIGFjY3VtdWxhdGVUYXJnZXRPbmx5KSB7XG4gIHZhciBjYXB0dXJlTmFtZSA9IHJlYWN0TmFtZSAhPT0gbnVsbCA/IHJlYWN0TmFtZSArICdDYXB0dXJlJyA6IG51bGw7XG4gIHZhciByZWFjdEV2ZW50TmFtZSA9IGluQ2FwdHVyZVBoYXNlID8gY2FwdHVyZU5hbWUgOiByZWFjdE5hbWU7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0RmliZXI7XG4gIHZhciBsYXN0SG9zdENvbXBvbmVudCA9IG51bGw7IC8vIEFjY3VtdWxhdGUgYWxsIGluc3RhbmNlcyBhbmQgbGlzdGVuZXJzIHZpYSB0aGUgdGFyZ2V0IC0+IHJvb3QgcGF0aC5cblxuICB3aGlsZSAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICB2YXIgX2luc3RhbmNlMiA9IGluc3RhbmNlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2UyLnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlMi50YWc7IC8vIEhhbmRsZSBsaXN0ZW5lcnMgdGhhdCBhcmUgb24gSG9zdENvbXBvbmVudHMgKGkuZS4gPGRpdj4pXG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgbGFzdEhvc3RDb21wb25lbnQgPSBzdGF0ZU5vZGU7IC8vIGNyZWF0ZUV2ZW50SGFuZGxlIGxpc3RlbmVyc1xuXG5cbiAgICAgIGlmIChyZWFjdEV2ZW50TmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVhY3RFdmVudE5hbWUpO1xuXG4gICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGxhc3RIb3N0Q29tcG9uZW50KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIElmIHdlIGFyZSBvbmx5IGFjY3VtdWxhdGluZyBldmVudHMgZm9yIHRoZSB0YXJnZXQsIHRoZW4gd2UgZG9uJ3RcbiAgICAvLyBjb250aW51ZSB0byBwcm9wYWdhdGUgdGhyb3VnaCB0aGUgUmVhY3QgZmliZXIgdHJlZSB0byBmaW5kIG90aGVyXG4gICAgLy8gbGlzdGVuZXJzLlxuXG5cbiAgICBpZiAoYWNjdW11bGF0ZVRhcmdldE9ubHkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVycztcbn0gLy8gV2Ugc2hvdWxkIG9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gZm9yOlxuLy8gLSBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luXG4vLyAtIENoYW5nZUV2ZW50UGx1Z2luXG4vLyAtIFNlbGVjdEV2ZW50UGx1Z2luXG4vLyBUaGlzIGlzIGJlY2F1c2Ugd2Ugb25seSBwcm9jZXNzIHRoZXNlIHBsdWdpbnNcbi8vIGluIHRoZSBidWJibGUgcGhhc2UsIHNvIHdlIG5lZWQgdG8gYWNjdW11bGF0ZSB0d29cbi8vIHBoYXNlIGV2ZW50IGxpc3RlbmVycyAodmlhIGVtdWxhdGlvbikuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRGaWJlciwgcmVhY3ROYW1lKSB7XG4gIHZhciBjYXB0dXJlTmFtZSA9IHJlYWN0TmFtZSArICdDYXB0dXJlJztcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXRGaWJlcjsgLy8gQWNjdW11bGF0ZSBhbGwgaW5zdGFuY2VzIGFuZCBsaXN0ZW5lcnMgdmlhIHRoZSB0YXJnZXQgLT4gcm9vdCBwYXRoLlxuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIHZhciBfaW5zdGFuY2UzID0gaW5zdGFuY2UsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTMuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2UzLnRhZzsgLy8gSGFuZGxlIGxpc3RlbmVycyB0aGF0IGFyZSBvbiBIb3N0Q29tcG9uZW50cyAoaS5lLiA8ZGl2PilcblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRhcmdldCA9IHN0YXRlTm9kZTtcbiAgICAgIHZhciBjYXB0dXJlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZU5hbWUpO1xuXG4gICAgICBpZiAoY2FwdHVyZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBidWJibGVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWFjdE5hbWUpO1xuXG4gICAgICBpZiAoYnViYmxlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBidWJibGVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50KGluc3QpIHtcbiAgaWYgKGluc3QgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRvIHtcbiAgICBpbnN0ID0gaW5zdC5yZXR1cm47IC8vIFRPRE86IElmIHRoaXMgaXMgYSBIb3N0Um9vdCB3ZSBtaWdodCB3YW50IHRvIGJhaWwgb3V0LlxuICAgIC8vIFRoYXQgaXMgZGVwZW5kaW5nIG9uIGlmIHdlIHdhbnQgbmVzdGVkIHN1YnRyZWVzIChsYXllcnMpIHRvIGJ1YmJsZVxuICAgIC8vIGV2ZW50cyB0byB0aGVpciBwYXJlbnQuIFdlIGNvdWxkIGFsc28gZ28gdGhyb3VnaCBwYXJlbnROb2RlIG9uIHRoZVxuICAgIC8vIGhvc3Qgbm9kZSBidXQgdGhhdCB3b3VsZG4ndCB3b3JrIGZvciBSZWFjdCBOYXRpdmUgYW5kIGRvZXNuJ3QgbGV0IHVzXG4gICAgLy8gZG8gdGhlIHBvcnRhbCBmZWF0dXJlLlxuICB9IHdoaWxlIChpbnN0ICYmIGluc3QudGFnICE9PSBIb3N0Q29tcG9uZW50KTtcblxuICBpZiAoaW5zdCkge1xuICAgIHJldHVybiBpbnN0O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIFJldHVybiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBBIGFuZCBCLCBvciBudWxsIGlmIHRoZXkgYXJlIGluXG4gKiBkaWZmZXJlbnQgdHJlZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRMb3dlc3RDb21tb25BbmNlc3RvcihpbnN0QSwgaW5zdEIpIHtcbiAgdmFyIG5vZGVBID0gaW5zdEE7XG4gIHZhciBub2RlQiA9IGluc3RCO1xuICB2YXIgZGVwdGhBID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQSA9IG5vZGVBOyB0ZW1wQTsgdGVtcEEgPSBnZXRQYXJlbnQodGVtcEEpKSB7XG4gICAgZGVwdGhBKys7XG4gIH1cblxuICB2YXIgZGVwdGhCID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQiA9IG5vZGVCOyB0ZW1wQjsgdGVtcEIgPSBnZXRQYXJlbnQodGVtcEIpKSB7XG4gICAgZGVwdGhCKys7XG4gIH0gLy8gSWYgQSBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQSAtIGRlcHRoQiA+IDApIHtcbiAgICBub2RlQSA9IGdldFBhcmVudChub2RlQSk7XG4gICAgZGVwdGhBLS07XG4gIH0gLy8gSWYgQiBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQiAtIGRlcHRoQSA+IDApIHtcbiAgICBub2RlQiA9IGdldFBhcmVudChub2RlQik7XG4gICAgZGVwdGhCLS07XG4gIH0gLy8gV2FsayBpbiBsb2Nrc3RlcCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG5cblxuICB2YXIgZGVwdGggPSBkZXB0aEE7XG5cbiAgd2hpbGUgKGRlcHRoLS0pIHtcbiAgICBpZiAobm9kZUEgPT09IG5vZGVCIHx8IG5vZGVCICE9PSBudWxsICYmIG5vZGVBID09PSBub2RlQi5hbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiBub2RlQTtcbiAgICB9XG5cbiAgICBub2RlQSA9IGdldFBhcmVudChub2RlQSk7XG4gICAgbm9kZUIgPSBnZXRQYXJlbnQobm9kZUIpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZXZlbnQsIHRhcmdldCwgY29tbW9uLCBpbkNhcHR1cmVQaGFzZSkge1xuICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50Ll9yZWFjdE5hbWU7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0O1xuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIGlmIChpbnN0YW5jZSA9PT0gY29tbW9uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgX2luc3RhbmNlNCA9IGluc3RhbmNlLFxuICAgICAgICBhbHRlcm5hdGUgPSBfaW5zdGFuY2U0LmFsdGVybmF0ZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlNC5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTQudGFnO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUgPT09IGNvbW1vbikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoaW5DYXB0dXJlUGhhc2UpIHtcbiAgICAgICAgdmFyIGNhcHR1cmVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICBpZiAoY2FwdHVyZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghaW5DYXB0dXJlUGhhc2UpIHtcbiAgICAgICAgdmFyIGJ1YmJsZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIGlmIChidWJibGVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgYnViYmxlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggIT09IDApIHtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgfVxufSAvLyBXZSBzaG91bGQgb25seSB1c2UgdGhpcyBmdW5jdGlvbiBmb3I6XG4vLyAtIEVudGVyTGVhdmVFdmVudFBsdWdpblxuLy8gVGhpcyBpcyBiZWNhdXNlIHdlIG9ubHkgcHJvY2VzcyB0aGlzIHBsdWdpblxuLy8gaW4gdGhlIGJ1YmJsZSBwaGFzZSwgc28gd2UgbmVlZCB0byBhY2N1bXVsYXRlIHR3b1xuLy8gcGhhc2UgZXZlbnQgbGlzdGVuZXJzLlxuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlVHdvUGhhc2VMaXN0ZW5lcnMoZGlzcGF0Y2hRdWV1ZSwgbGVhdmVFdmVudCwgZW50ZXJFdmVudCwgZnJvbSwgdG8pIHtcbiAgdmFyIGNvbW1vbiA9IGZyb20gJiYgdG8gPyBnZXRMb3dlc3RDb21tb25BbmNlc3Rvcihmcm9tLCB0bykgOiBudWxsO1xuXG4gIGlmIChmcm9tICE9PSBudWxsKSB7XG4gICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBsZWF2ZUV2ZW50LCBmcm9tLCBjb21tb24sIGZhbHNlKTtcbiAgfVxuXG4gIGlmICh0byAhPT0gbnVsbCAmJiBlbnRlckV2ZW50ICE9PSBudWxsKSB7XG4gICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBlbnRlckV2ZW50LCB0bywgY29tbW9uLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0TGlzdGVuZXJTZXRLZXkoZG9tRXZlbnROYW1lLCBjYXB0dXJlKSB7XG4gIHJldHVybiBkb21FdmVudE5hbWUgKyBcIl9fXCIgKyAoY2FwdHVyZSA/ICdjYXB0dXJlJyA6ICdidWJibGUnKTtcbn1cblxudmFyIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gZmFsc2U7XG52YXIgREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwgPSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnO1xudmFyIFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyA9ICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnO1xudmFyIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG52YXIgQVVUT0ZPQ1VTID0gJ2F1dG9Gb2N1cyc7XG52YXIgQ0hJTERSRU4gPSAnY2hpbGRyZW4nO1xudmFyIFNUWUxFID0gJ3N0eWxlJztcbnZhciBIVE1MJDEgPSAnX19odG1sJztcbnZhciBIVE1MX05BTUVTUEFDRSQxID0gTmFtZXNwYWNlcy5odG1sO1xudmFyIHdhcm5lZFVua25vd25UYWdzO1xudmFyIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZztcbnZhciB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50O1xudmFyIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZTtcbnZhciB3YXJuRm9yUHJvcERpZmZlcmVuY2U7XG52YXIgd2FybkZvckV4dHJhQXR0cmlidXRlcztcbnZhciB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXI7XG52YXIgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZztcbnZhciBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGU7XG52YXIgbm9ybWFsaXplSFRNTDtcblxue1xuICB3YXJuZWRVbmtub3duVGFncyA9IHtcbiAgICAvLyBUaGVyZSBhcmUgd29ya2luZyBwb2x5ZmlsbHMgZm9yIDxkaWFsb2c+LiBMZXQgcGVvcGxlIHVzZSBpdC5cbiAgICBkaWFsb2c6IHRydWUsXG4gICAgLy8gRWxlY3Ryb24gc2hpcHMgYSBjdXN0b20gPHdlYnZpZXc+IHRhZyB0byBkaXNwbGF5IGV4dGVybmFsIHdlYiBjb250ZW50IGluXG4gICAgLy8gYW4gaXNvbGF0ZWQgZnJhbWUgYW5kIHByb2Nlc3MuXG4gICAgLy8gVGhpcyB0YWcgaXMgbm90IHByZXNlbnQgaW4gbm9uIEVsZWN0cm9uIGVudmlyb25tZW50cyBzdWNoIGFzIEpTRG9tIHdoaWNoXG4gICAgLy8gaXMgb2Z0ZW4gdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAgICAvLyBAc2VlIGh0dHBzOi8vZWxlY3Ryb25qcy5vcmcvZG9jcy9hcGkvd2Vidmlldy10YWdcbiAgICB3ZWJ2aWV3OiB0cnVlXG4gIH07XG5cbiAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBwcm9wcykge1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCB7XG4gICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzOiByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lczogcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1xuICAgIH0pO1xuICB9OyAvLyBJRSAxMSBwYXJzZXMgJiBub3JtYWxpemVzIHRoZSBzdHlsZSBhdHRyaWJ1dGUgYXMgb3Bwb3NlZCB0byBvdGhlclxuICAvLyBicm93c2Vycy4gSXQgYWRkcyBzcGFjZXMgYW5kIHNvcnRzIHRoZSBwcm9wZXJ0aWVzIGluIHNvbWVcbiAgLy8gbm9uLWFscGhhYmV0aWNhbCBvcmRlci4gSGFuZGxpbmcgdGhhdCB3b3VsZCByZXF1aXJlIHNvcnRpbmcgQ1NTXG4gIC8vIHByb3BlcnRpZXMgaW4gdGhlIGNsaWVudCAmIHNlcnZlciB2ZXJzaW9ucyBvciBhcHBseWluZ1xuICAvLyBgZXhwZWN0ZWRTdHlsZWAgdG8gYSB0ZW1wb3JhcnkgRE9NIG5vZGUgdG8gcmVhZCBpdHMgYHN0eWxlYCBhdHRyaWJ1dGVcbiAgLy8gbm9ybWFsaXplZC4gU2luY2UgaXQgb25seSBhZmZlY3RzIElFLCB3ZSdyZSBza2lwcGluZyBzdHlsZSB3YXJuaW5nc1xuICAvLyBpbiB0aGF0IGJyb3dzZXIgY29tcGxldGVseSBpbiBmYXZvciBvZiBkb2luZyBhbGwgdGhhdCB3b3JrLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTgwN1xuXG5cbiAgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZyA9IGNhblVzZURPTSAmJiAhZG9jdW1lbnQuZG9jdW1lbnRNb2RlOyAvLyBIVE1MIHBhcnNpbmcgbm9ybWFsaXplcyBDUiBhbmQgQ1JMRiB0byBMRi5cbiAgLy8gSXQgYWxzbyBjYW4gdHVybiBcXHUwMDAwIGludG8gXFx1RkZGRCBpbnNpZGUgYXR0cmlidXRlcy5cbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3NpbmdsZS1wYWdlLmh0bWwjcHJlcHJvY2Vzc2luZy10aGUtaW5wdXQtc3RyZWFtXG4gIC8vIElmIHdlIGhhdmUgYSBtaXNtYXRjaCwgaXQgbWlnaHQgYmUgY2F1c2VkIGJ5IHRoYXQuXG4gIC8vIFdlIHdpbGwgc3RpbGwgcGF0Y2ggdXAgaW4gdGhpcyBjYXNlIGJ1dCBub3QgZmlyZSB0aGUgd2FybmluZy5cblxuICB2YXIgTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYID0gL1xcclxcbj8vZztcbiAgdmFyIE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCA9IC9cXHUwMDAwfFxcdUZGRkQvZztcblxuICBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUgPSBmdW5jdGlvbiAobWFya3VwKSB7XG4gICAgdmFyIG1hcmt1cFN0cmluZyA9IHR5cGVvZiBtYXJrdXAgPT09ICdzdHJpbmcnID8gbWFya3VwIDogJycgKyBtYXJrdXA7XG4gICAgcmV0dXJuIG1hcmt1cFN0cmluZy5yZXBsYWNlKE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCwgJ1xcbicpLnJlcGxhY2UoTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYLCAnJyk7XG4gIH07XG5cbiAgd2FybkZvclRleHREaWZmZXJlbmNlID0gZnVuY3Rpb24gKHNlcnZlclRleHQsIGNsaWVudFRleHQpIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm9ybWFsaXplZENsaWVudFRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VGV4dCk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclRleHQpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID09PSBub3JtYWxpemVkQ2xpZW50VGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdUZXh0IGNvbnRlbnQgZGlkIG5vdCBtYXRjaC4gU2VydmVyOiBcIiVzXCIgQ2xpZW50OiBcIiVzXCInLCBub3JtYWxpemVkU2VydmVyVGV4dCwgbm9ybWFsaXplZENsaWVudFRleHQpO1xuICB9O1xuXG4gIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChwcm9wTmFtZSwgc2VydmVyVmFsdWUsIGNsaWVudFZhbHVlKSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRWYWx1ZSk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJWYWx1ZSk7XG5cbiAgICBpZiAobm9ybWFsaXplZFNlcnZlclZhbHVlID09PSBub3JtYWxpemVkQ2xpZW50VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignUHJvcCBgJXNgIGRpZCBub3QgbWF0Y2guIFNlcnZlcjogJXMgQ2xpZW50OiAlcycsIHByb3BOYW1lLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkU2VydmVyVmFsdWUpLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkQ2xpZW50VmFsdWUpKTtcbiAgfTtcblxuICB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGF0dHJpYnV0ZU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgfSk7XG5cbiAgICBlcnJvcignRXh0cmEgYXR0cmlidXRlcyBmcm9tIHRoZSBzZXJ2ZXI6ICVzJywgbmFtZXMpO1xuICB9O1xuXG4gIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChyZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAgIGlmIChsaXN0ZW5lciA9PT0gZmFsc2UpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGBmYWxzZWAuXFxuXFxuJyArICdJZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgJyArICdwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgJXNgIHR5cGUuJywgcmVnaXN0cmF0aW9uTmFtZSwgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICB9XG4gIH07IC8vIFBhcnNlIHRoZSBIVE1MIGFuZCByZWFkIGl0IGJhY2sgdG8gbm9ybWFsaXplIHRoZSBIVE1MIHN0cmluZyBzbyB0aGF0IGl0XG4gIC8vIGNhbiBiZSB1c2VkIGZvciBjb21wYXJpc29uLlxuXG5cbiAgbm9ybWFsaXplSFRNTCA9IGZ1bmN0aW9uIChwYXJlbnQsIGh0bWwpIHtcbiAgICAvLyBXZSBjb3VsZCBoYXZlIGNyZWF0ZWQgYSBzZXBhcmF0ZSBkb2N1bWVudCBoZXJlIHRvIGF2b2lkXG4gICAgLy8gcmUtaW5pdGlhbGl6aW5nIGN1c3RvbSBlbGVtZW50cyBpZiB0aGV5IGV4aXN0LiBCdXQgdGhpcyBicmVha3NcbiAgICAvLyBob3cgPG5vc2NyaXB0PiBpcyBiZWluZyBoYW5kbGVkLiBTbyB3ZSB1c2UgdGhlIHNhbWUgZG9jdW1lbnQuXG4gICAgLy8gU2VlIHRoZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzExMTU3LlxuICAgIHZhciB0ZXN0RWxlbWVudCA9IHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEgPyBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHBhcmVudC50YWdOYW1lKSA6IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhwYXJlbnQubmFtZXNwYWNlVVJJLCBwYXJlbnQudGFnTmFtZSk7XG4gICAgdGVzdEVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gdGVzdEVsZW1lbnQuaW5uZXJIVE1MO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgcmV0dXJuIHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gcm9vdENvbnRhaW5lckVsZW1lbnQgOiByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xufVxuXG5mdW5jdGlvbiBub29wKCkge31cblxuZnVuY3Rpb24gdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQobm9kZSkge1xuICAvLyBNb2JpbGUgU2FmYXJpIGRvZXMgbm90IGZpcmUgcHJvcGVybHkgYnViYmxlIGNsaWNrIGV2ZW50cyBvblxuICAvLyBub24taW50ZXJhY3RpdmUgZWxlbWVudHMsIHdoaWNoIG1lYW5zIGRlbGVnYXRlZCBjbGljayBsaXN0ZW5lcnMgZG8gbm90XG4gIC8vIGZpcmUuIFRoZSB3b3JrYXJvdW5kIGZvciB0aGlzIGJ1ZyBpbnZvbHZlcyBhdHRhY2hpbmcgYW4gZW1wdHkgY2xpY2tcbiAgLy8gbGlzdGVuZXIgb24gdGhlIHRhcmdldCBub2RlLlxuICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTAvMDkvY2xpY2tfZXZlbnRfZGVsLmh0bWxcbiAgLy8gSnVzdCBzZXQgaXQgdXNpbmcgdGhlIG9uY2xpY2sgcHJvcGVydHkgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIG1hbmFnZSBhbnlcbiAgLy8gYm9va2tlZXBpbmcgZm9yIGl0LiBOb3Qgc3VyZSBpZiB3ZSBuZWVkIHRvIGNsZWFyIGl0IHdoZW4gdGhlIGxpc3RlbmVyIGlzXG4gIC8vIHJlbW92ZWQuXG4gIC8vIFRPRE86IE9ubHkgZG8gdGhpcyBmb3IgdGhlIHJlbGV2YW50IFNhZmFyaXMgbWF5YmU/XG4gIG5vZGUub25jbGljayA9IG5vb3A7XG59XG5cbmZ1bmN0aW9uIHNldEluaXRpYWxET01Qcm9wZXJ0aWVzKHRhZywgZG9tRWxlbWVudCwgcm9vdENvbnRhaW5lckVsZW1lbnQsIG5leHRQcm9wcywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgZm9yICh2YXIgcHJvcEtleSBpbiBuZXh0UHJvcHMpIHtcbiAgICBpZiAoIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIC8vIEZyZWV6ZSB0aGUgbmV4dCBzdHlsZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGJlXG4gICAgICAgICAgLy8gbXV0YXRlZC4gV2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhpcyBpbiB0aGUgcGFzdC5cbiAgICAgICAgICBPYmplY3QuZnJlZXplKG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cblxuXG4gICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCBuZXh0UHJvcCk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICBzZXRJbm5lckhUTUwoZG9tRWxlbWVudCwgbmV4dEh0bWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEF2b2lkIHNldHRpbmcgaW5pdGlhbCB0ZXh0Q29udGVudCB3aGVuIHRoZSB0ZXh0IGlzIGVtcHR5LiBJbiBJRTExIHNldHRpbmdcbiAgICAgICAgLy8gdGV4dENvbnRlbnQgb24gYSA8dGV4dGFyZWE+IHdpbGwgY2F1c2UgdGhlIHBsYWNlaG9sZGVyIHRvIG5vdFxuICAgICAgICAvLyBzaG93IHdpdGhpbiB0aGUgPHRleHRhcmVhPiB1bnRpbCBpdCBoYXMgYmVlbiBmb2N1c2VkIGFuZCBibHVycmVkIGFnYWluLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY3MzEjaXNzdWVjb21tZW50LTI1NDg3NDU1M1xuICAgICAgICB2YXIgY2FuU2V0VGV4dENvbnRlbnQgPSB0YWcgIT09ICd0ZXh0YXJlYScgfHwgbmV4dFByb3AgIT09ICcnO1xuXG4gICAgICAgIGlmIChjYW5TZXRUZXh0Q29udGVudCkge1xuICAgICAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsICcnICsgbmV4dFByb3ApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IEFVVE9GT0NVUykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICBpZiAoIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcEtleSA9PT0gJ29uU2Nyb2xsJykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICBzZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgd2FzQ3VzdG9tQ29tcG9uZW50VGFnLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAvLyBUT0RPOiBIYW5kbGUgd2FzQ3VzdG9tQ29tcG9uZW50VGFnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdXBkYXRlUGF5bG9hZC5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBwcm9wS2V5ID0gdXBkYXRlUGF5bG9hZFtpXTtcbiAgICB2YXIgcHJvcFZhbHVlID0gdXBkYXRlUGF5bG9hZFtpICsgMV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgc2V0SW5uZXJIVE1MKGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBwcm9wVmFsdWUsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQsIHBhcmVudE5hbWVzcGFjZSkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWc7IC8vIFdlIGNyZWF0ZSB0YWdzIGluIHRoZSBuYW1lc3BhY2Ugb2YgdGhlaXIgcGFyZW50IGNvbnRhaW5lciwgZXhjZXB0IEhUTUxcbiAgLy8gdGFncyBnZXQgbm8gbmFtZXNwYWNlLlxuXG4gIHZhciBvd25lckRvY3VtZW50ID0gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KTtcbiAgdmFyIGRvbUVsZW1lbnQ7XG4gIHZhciBuYW1lc3BhY2VVUkkgPSBwYXJlbnROYW1lc3BhY2U7XG5cbiAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgIG5hbWVzcGFjZVVSSSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKTtcbiAgfVxuXG4gIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICB7XG4gICAgICBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKTsgLy8gU2hvdWxkIHRoaXMgY2hlY2sgYmUgZ2F0ZWQgYnkgcGFyZW50IG5hbWVzcGFjZT8gTm90IHN1cmUgd2Ugd2FudCB0b1xuICAgICAgLy8gYWxsb3cgPFNWRz4gb3IgPG1BVEg+LlxuXG4gICAgICBpZiAoIWlzQ3VzdG9tQ29tcG9uZW50VGFnICYmIHR5cGUgIT09IHR5cGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBlcnJvcignPCVzIC8+IGlzIHVzaW5nIGluY29ycmVjdCBjYXNpbmcuICcgKyAnVXNlIFBhc2NhbENhc2UgZm9yIFJlYWN0IGNvbXBvbmVudHMsICcgKyAnb3IgbG93ZXJjYXNlIGZvciBIVE1MIGVsZW1lbnRzLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnc2NyaXB0Jykge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBzY3JpcHQgdmlhIC5pbm5lckhUTUwgc28gaXRzIFwicGFyc2VyLWluc2VydGVkXCIgZmxhZyBpc1xuICAgICAgLy8gc2V0IHRvIHRydWUgYW5kIGl0IGRvZXMgbm90IGV4ZWN1dGVcbiAgICAgIHZhciBkaXYgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICBkaXYuaW5uZXJIVE1MID0gJzxzY3JpcHQ+PCcgKyAnL3NjcmlwdD4nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8geWllbGQgYSBzY3JpcHQgZWxlbWVudC5cblxuICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBkaXYuZmlyc3RDaGlsZDtcbiAgICAgIGRvbUVsZW1lbnQgPSBkaXYucmVtb3ZlQ2hpbGQoZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcHMuaXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAkRmxvd0lzc3VlIGBjcmVhdGVFbGVtZW50YCBzaG91bGQgYmUgdXBkYXRlZCBmb3IgV2ViIENvbXBvbmVudHNcbiAgICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSwge1xuICAgICAgICBpczogcHJvcHMuaXNcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZXBhcmF0ZSBlbHNlIGJyYW5jaCBpbnN0ZWFkIG9mIHVzaW5nIGBwcm9wcy5pcyB8fCB1bmRlZmluZWRgIGFib3ZlIGJlY2F1c2Ugb2YgYSBGaXJlZm94IGJ1Zy5cbiAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzY4OTZcbiAgICAgIC8vIGFuZCBkaXNjdXNzaW9uIGluIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzYyNDBcbiAgICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7IC8vIE5vcm1hbGx5IGF0dHJpYnV0ZXMgYXJlIGFzc2lnbmVkIGluIGBzZXRJbml0aWFsRE9NUHJvcGVydGllc2AsIGhvd2V2ZXIgdGhlIGBtdWx0aXBsZWAgYW5kIGBzaXplYFxuICAgICAgLy8gYXR0cmlidXRlcyBvbiBgc2VsZWN0YHMgbmVlZHMgdG8gYmUgYWRkZWQgYmVmb3JlIGBvcHRpb25gcyBhcmUgaW5zZXJ0ZWQuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzOlxuICAgICAgLy8gLSBhIGJ1ZyB3aGVyZSB0aGUgYHNlbGVjdGAgZG9lcyBub3Qgc2Nyb2xsIHRvIHRoZSBjb3JyZWN0IG9wdGlvbiBiZWNhdXNlIHNpbmd1bGFyXG4gICAgICAvLyAgYHNlbGVjdGAgZWxlbWVudHMgYXV0b21hdGljYWxseSBwaWNrIHRoZSBmaXJzdCBpdGVtICMxMzIyMlxuICAgICAgLy8gLSBhIGJ1ZyB3aGVyZSB0aGUgYHNlbGVjdGAgc2V0IHRoZSBmaXJzdCBpdGVtIGFzIHNlbGVjdGVkIGRlc3BpdGUgdGhlIGBzaXplYCBhdHRyaWJ1dGUgIzE0MjM5XG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzIyMlxuICAgICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTQyMzlcblxuICAgICAgaWYgKHR5cGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIHZhciBub2RlID0gZG9tRWxlbWVudDtcblxuICAgICAgICBpZiAocHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgICBub2RlLm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wcy5zaXplKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBhIHNpemUgZ3JlYXRlciB0aGFuIDEgY2F1c2VzIGEgc2VsZWN0IHRvIGJlaGF2ZSBsaWtlIGBtdWx0aXBsZT10cnVlYCwgd2hlcmVcbiAgICAgICAgICAvLyBpdCBpcyBwb3NzaWJsZSB0aGF0IG5vIG9wdGlvbiBpcyBzZWxlY3RlZC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFRoaXMgaXMgb25seSBuZWNlc3Nhcnkgd2hlbiBhIHNlbGVjdCBpbiBcInNpbmdsZSBzZWxlY3Rpb24gbW9kZVwiLlxuICAgICAgICAgIG5vZGUuc2l6ZSA9IHByb3BzLnNpemU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgdHlwZSk7XG4gIH1cblxuICB7XG4gICAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgICAgaWYgKCFpc0N1c3RvbUNvbXBvbmVudFRhZyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9tRWxlbWVudCkgPT09ICdbb2JqZWN0IEhUTUxVbmtub3duRWxlbWVudF0nICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwod2FybmVkVW5rbm93blRhZ3MsIHR5cGUpKSB7XG4gICAgICAgIHdhcm5lZFVua25vd25UYWdzW3R5cGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignVGhlIHRhZyA8JXM+IGlzIHVucmVjb2duaXplZCBpbiB0aGlzIGJyb3dzZXIuICcgKyAnSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIFJlYWN0IGNvbXBvbmVudCwgc3RhcnQgaXRzIG5hbWUgd2l0aCAnICsgJ2FuIHVwcGVyY2FzZSBsZXR0ZXIuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvbUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZSh0ZXh0LCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KS5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbn1cbmZ1bmN0aW9uIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuXG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcmF3UHJvcHMpO1xuICB9IC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHdlIGNoZWNrIGlzTW91bnRlZCBiZWZvcmUgZmlyaW5nIGFueSBvZiB0aGVzZSBldmVudHMuXG5cblxuICB2YXIgcHJvcHM7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2FuY2VsJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjbG9zZScsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgYWxsIHRoZSBtZWRpYSBldmVudHMuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1tpXSwgZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgZXJyb3IgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgY2FzZSAnbGluayc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGVycm9yIGFuZCBsb2FkIGV2ZW50cy5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSB0b2dnbGUgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCd0b2dnbGUnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICB2YWxpZGF0ZVByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMihkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCBwcm9wcyk7XG4gIHNldEluaXRpYWxET01Qcm9wZXJ0aWVzKHRhZywgZG9tRWxlbWVudCwgcm9vdENvbnRhaW5lckVsZW1lbnQsIHByb3BzLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyKGRvbUVsZW1lbnQsIHJhd1Byb3BzLCBmYWxzZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMyhkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxufSAvLyBDYWxjdWxhdGUgdGhlIGRpZmYgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG5cbmZ1bmN0aW9uIGRpZmZQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgbGFzdFJhd1Byb3BzLCBuZXh0UmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgbmV4dFJhd1Byb3BzKTtcbiAgfVxuXG4gIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcbiAgdmFyIGxhc3RQcm9wcztcbiAgdmFyIG5leHRQcm9wcztcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGxhc3RQcm9wcyA9IGxhc3RSYXdQcm9wcztcbiAgICAgIG5leHRQcm9wcyA9IG5leHRSYXdQcm9wcztcblxuICAgICAgaWYgKHR5cGVvZiBsYXN0UHJvcHMub25DbGljayAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbmV4dFByb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIG5leHRQcm9wcyk7XG4gIHZhciBwcm9wS2V5O1xuICB2YXIgc3R5bGVOYW1lO1xuICB2YXIgc3R5bGVVcGRhdGVzID0gbnVsbDtcblxuICBmb3IgKHByb3BLZXkgaW4gbGFzdFByb3BzKSB7XG4gICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCAhbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IGxhc3RQcm9wc1twcm9wS2V5XSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHZhciBsYXN0U3R5bGUgPSBsYXN0UHJvcHNbcHJvcEtleV07XG5cbiAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RTdHlsZSkge1xuICAgICAgICBpZiAobGFzdFN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwgfHwgcHJvcEtleSA9PT0gQ0hJTERSRU4pIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IEFVVE9GT0NVUykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLiBJZiBhbnkgbGlzdGVuZXIgdXBkYXRlcyB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgZmliZXIgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbGwgb3RoZXIgZGVsZXRlZCBwcm9wZXJ0aWVzIHdlIGFkZCBpdCB0byB0aGUgcXVldWUuIFdlIHVzZVxuICAgICAgLy8gdGhlIGFsbG93ZWQgcHJvcGVydHkgbGlzdCBpbiB0aGUgY29tbWl0IHBoYXNlIGluc3RlYWQuXG4gICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTtcbiAgICB2YXIgbGFzdFByb3AgPSBsYXN0UHJvcHMgIT0gbnVsbCA/IGxhc3RQcm9wc1twcm9wS2V5XSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IG5leHRQcm9wID09PSBsYXN0UHJvcCB8fCBuZXh0UHJvcCA9PSBudWxsICYmIGxhc3RQcm9wID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICAvLyBGcmVlemUgdGhlIG5leHQgc3R5bGUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBiZVxuICAgICAgICAgIC8vIG11dGF0ZWQuIFdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgZm9yIHRoaXMgaW4gdGhlIHBhc3QuXG4gICAgICAgICAgT2JqZWN0LmZyZWV6ZShuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgIC8vIFVuc2V0IHN0eWxlcyBvbiBgbGFzdFByb3BgIGJ1dCBub3Qgb24gYG5leHRQcm9wYC5cbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFByb3ApIHtcbiAgICAgICAgICBpZiAobGFzdFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiAoIW5leHRQcm9wIHx8ICFuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSkge1xuICAgICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFVwZGF0ZSBzdHlsZXMgdGhhdCBjaGFuZ2VkIHNpbmNlIGBsYXN0UHJvcGAuXG5cblxuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmIChuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmIGxhc3RQcm9wW3N0eWxlTmFtZV0gIT09IG5leHRQcm9wW3N0eWxlTmFtZV0pIHtcbiAgICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9IG5leHRQcm9wW3N0eWxlTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cbiAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICBpZiAoIXVwZGF0ZVBheWxvYWQpIHtcbiAgICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkLnB1c2gocHJvcEtleSwgc3R5bGVVcGRhdGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlVXBkYXRlcyA9IG5leHRQcm9wO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBsYXN0SHRtbCA9IGxhc3RQcm9wID8gbGFzdFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGxhc3RIdG1sICE9PSBuZXh0SHRtbCkge1xuICAgICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0SHRtbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCAnJyArIG5leHRQcm9wKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICAvLyBXZSBlYWdlcmx5IGxpc3RlbiB0byB0aGlzIGV2ZW4gdGhvdWdoIHdlIGhhdmVuJ3QgY29tbWl0dGVkIHlldC5cbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXVwZGF0ZVBheWxvYWQgJiYgbGFzdFByb3AgIT09IG5leHRQcm9wKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UuIElmIGFueSBsaXN0ZW5lciB1cGRhdGVzIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgdGhlIFwiY3VycmVudFwiIHByb3BzIHBvaW50ZXIgZ2V0cyB1cGRhdGVkIHNvIHdlIG5lZWQgYSBjb21taXRcbiAgICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnb2JqZWN0JyAmJiBuZXh0UHJvcCAhPT0gbnVsbCAmJiBuZXh0UHJvcC4kJHR5cGVvZiA9PT0gUkVBQ1RfT1BBUVVFX0lEX1RZUEUpIHtcbiAgICAgIC8vIElmIHdlIGVuY291bnRlciB1c2VPcGFxdWVSZWZlcmVuY2UncyBvcGFxdWUgb2JqZWN0LCB0aGlzIG1lYW5zIHdlIGFyZSBoeWRyYXRpbmcuXG4gICAgICAvLyBJbiB0aGlzIGNhc2UsIGNhbGwgdGhlIG9wYXF1ZSBvYmplY3QncyB0b1N0cmluZyBmdW5jdGlvbiB3aGljaCBnZW5lcmF0ZXMgYSBuZXcgY2xpZW50XG4gICAgICAvLyBJRCBzbyBjbGllbnQgYW5kIHNlcnZlciBJRHMgbWF0Y2ggYW5kIHRocm93cyB0byByZXJlbmRlci5cbiAgICAgIG5leHRQcm9wLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbnkgb3RoZXIgcHJvcGVydHkgd2UgYWx3YXlzIGFkZCBpdCB0byB0aGUgcXVldWUgYW5kIHRoZW4gd2VcbiAgICAgIC8vIGZpbHRlciBpdCBvdXQgdXNpbmcgdGhlIGFsbG93ZWQgcHJvcGVydHkgbGlzdCBkdXJpbmcgdGhlIGNvbW1pdC5cbiAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlVXBkYXRlcykge1xuICAgIHtcbiAgICAgIHZhbGlkYXRlU2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb25JbkRldihzdHlsZVVwZGF0ZXMsIG5leHRQcm9wc1tTVFlMRV0pO1xuICAgIH1cblxuICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChTVFlMRSwgc3R5bGVVcGRhdGVzKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufSAvLyBBcHBseSB0aGUgZGlmZi5cblxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0YWcsIGxhc3RSYXdQcm9wcywgbmV4dFJhd1Byb3BzKSB7XG4gIC8vIFVwZGF0ZSBjaGVja2VkICpiZWZvcmUqIG5hbWUuXG4gIC8vIEluIHRoZSBtaWRkbGUgb2YgYW4gdXBkYXRlLCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGNoZWNrZWQuXG4gIC8vIFdoZW4gYSBjaGVja2VkIHJhZGlvIHRyaWVzIHRvIGNoYW5nZSBuYW1lLCBicm93c2VyIG1ha2VzIGFub3RoZXIgcmFkaW8ncyBjaGVja2VkIGZhbHNlLlxuICBpZiAodGFnID09PSAnaW5wdXQnICYmIG5leHRSYXdQcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5leHRSYXdQcm9wcy5uYW1lICE9IG51bGwpIHtcbiAgICB1cGRhdGVDaGVja2VkKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gIH1cblxuICB2YXIgd2FzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCBsYXN0UmF3UHJvcHMpO1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIG5leHRSYXdQcm9wcyk7IC8vIEFwcGx5IHRoZSBkaWZmLlxuXG4gIHVwZGF0ZURPTVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgd2FzQ3VzdG9tQ29tcG9uZW50VGFnLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7IC8vIFRPRE86IEVuc3VyZSB0aGF0IGFuIHVwZGF0ZSBnZXRzIHNjaGVkdWxlZCBpZiBhbnkgb2YgdGhlIHNwZWNpYWwgcHJvcHNcbiAgLy8gY2hhbmdlZC5cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFVwZGF0ZSB0aGUgd3JhcHBlciBhcm91bmQgaW5wdXRzICphZnRlciogdXBkYXRpbmcgcHJvcHMuIFRoaXMgaGFzIHRvXG4gICAgICAvLyBoYXBwZW4gYWZ0ZXIgYHVwZGF0ZURPTVByb3BlcnRpZXNgLiBPdGhlcndpc2UgSFRNTDUgaW5wdXQgdmFsaWRhdGlvbnNcbiAgICAgIC8vIHJhaXNlIHdhcm5pbmdzIGFuZCBwcmV2ZW50IHRoZSBuZXcgdmFsdWUgZnJvbSBiZWluZyBhc3NpZ25lZC5cbiAgICAgIHVwZGF0ZVdyYXBwZXIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgdXBkYXRlV3JhcHBlciQxKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAvLyA8c2VsZWN0PiB2YWx1ZSB1cGRhdGUgbmVlZHMgdG8gb2NjdXIgYWZ0ZXIgPG9wdGlvbj4gY2hpbGRyZW5cbiAgICAgIC8vIHJlY29uY2lsaWF0aW9uXG4gICAgICBwb3N0VXBkYXRlV3JhcHBlcihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUocHJvcE5hbWUpIHtcbiAge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHByb3BOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoIXBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdIHx8IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHJhd1Byb3BzLCBwYXJlbnROYW1lc3BhY2UsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZztcbiAgdmFyIGV4dHJhQXR0cmlidXRlTmFtZXM7XG5cbiAge1xuICAgIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHJhd1Byb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXSA9PT0gdHJ1ZTtcbiAgICBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCByYXdQcm9wcyk7XG4gIH0gLy8gVE9ETzogTWFrZSBzdXJlIHRoYXQgd2UgY2hlY2sgaXNNb3VudGVkIGJlZm9yZSBmaXJpbmcgYW55IG9mIHRoZXNlIGV2ZW50cy5cblxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2NhbmNlbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2xvc2UnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd2aWRlbyc6XG4gICAgY2FzZSAnYXVkaW8nOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBhbGwgdGhlIG1lZGlhIGV2ZW50cy5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzb3VyY2UnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGVycm9yIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgY2FzZSAnbGluayc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGVycm9yIGFuZCBsb2FkIGV2ZW50cy5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIHRvZ2dsZSBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3RvZ2dsZScsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgdmFsaWRhdGVQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMihkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHJhd1Byb3BzKTtcblxuICB7XG4gICAgZXh0cmFBdHRyaWJ1dGVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuYXR0cmlidXRlcztcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVzW19pXS5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAvLyBCdWlsdC1pbiBTU1IgYXR0cmlidXRlIGlzIGFsbG93ZWRcbiAgICAgICAgY2FzZSAnZGF0YS1yZWFjdHJvb3QnOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBDb250cm9sbGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgLy8gVE9ETzogT25seSBpZ25vcmUgdGhlbSBvbiBjb250cm9sbGVkIHRhZ3MuXG5cbiAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2NoZWNrZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlbGVjdGVkJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEludGVudGlvbmFsbHkgdXNlIHRoZSBvcmlnaW5hbCBuYW1lLlxuICAgICAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEwNjc2LlxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuYWRkKGF0dHJpYnV0ZXNbX2ldLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcblxuICBmb3IgKHZhciBwcm9wS2V5IGluIHJhd1Byb3BzKSB7XG4gICAgaWYgKCFyYXdQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5leHRQcm9wID0gcmF3UHJvcHNbcHJvcEtleV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIC8vIEZvciB0ZXh0IGNvbnRlbnQgY2hpbGRyZW4gd2UgY29tcGFyZSBhZ2FpbnN0IHRleHRDb250ZW50LiBUaGlzXG4gICAgICAvLyBtaWdodCBtYXRjaCBhZGRpdGlvbmFsIEhUTUwgdGhhdCBpcyBoaWRkZW4gd2hlbiB3ZSByZWFkIGl0IHVzaW5nXG4gICAgICAvLyB0ZXh0Q29udGVudC4gRS5nLiBcImZvb1wiIHdpbGwgbWF0Y2ggXCJmPHNwYW4+b288L3NwYW4+XCIgYnV0IHRoYXQgc3RpbGxcbiAgICAgIC8vIHNhdGlzZmllcyBvdXIgcmVxdWlyZW1lbnQuIE91ciByZXF1aXJlbWVudCBpcyBub3QgdG8gcHJvZHVjZSBwZXJmZWN0XG4gICAgICAvLyBIVE1MIGFuZCBhdHRyaWJ1dGVzLiBJZGVhbGx5IHdlIHNob3VsZCBwcmVzZXJ2ZSBzdHJ1Y3R1cmUgYnV0IGl0J3NcbiAgICAgIC8vIG9rIG5vdCB0byBpZiB0aGUgdmlzaWJsZSBjb250ZW50IGlzIHN0aWxsIGVub3VnaCB0byBpbmRpY2F0ZSB3aGF0XG4gICAgICAvLyBldmVuIGxpc3RlbmVycyB0aGVzZSBub2RlcyBtaWdodCBiZSB3aXJlZCB1cCB0by5cbiAgICAgIC8vIFRPRE86IFdhcm4gaWYgdGhlcmUgaXMgbW9yZSB0aGFuIGEgc2luZ2xlIHRleHROb2RlIGFzIGEgY2hpbGQuXG4gICAgICAvLyBUT0RPOiBTaG91bGQgd2UgdXNlIGRvbUVsZW1lbnQuZmlyc3RDaGlsZC5ub2RlVmFsdWUgdG8gY29tcGFyZT9cbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50LnRleHRDb250ZW50ICE9PSBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmICggIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgICAgd2FybkZvclRleHREaWZmZXJlbmNlKGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCBuZXh0UHJvcF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudC50ZXh0Q29udGVudCAhPT0gJycgKyBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmICggIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgICAgd2FybkZvclRleHREaWZmZXJlbmNlKGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCAnJyArIG5leHRQcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIC8vIENvbnZpbmNlIEZsb3cgd2UndmUgY2FsY3VsYXRlZCBpdCAoaXQncyBERVYtb25seSBpbiB0aGlzIG1ldGhvZC4pXG4gICAgdHlwZW9mIGlzQ3VzdG9tQ29tcG9uZW50VGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIHByb3BlcnRpZXMgY29ycmVzcG9uZCB0byB0aGVpciBleHBlY3RlZCB2YWx1ZXMuXG4gICAgICB2YXIgc2VydmVyVmFsdWUgPSB2b2lkIDA7XG4gICAgICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKHByb3BLZXkpO1xuXG4gICAgICBpZiAoc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyB8fCAvLyBDb250cm9sbGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgIC8vIFRPRE86IE9ubHkgaWdub3JlIHRoZW0gb24gY29udHJvbGxlZCB0YWdzLlxuICAgICAgcHJvcEtleSA9PT0gJ3ZhbHVlJyB8fCBwcm9wS2V5ID09PSAnY2hlY2tlZCcgfHwgcHJvcEtleSA9PT0gJ3NlbGVjdGVkJykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgICB2YXIgc2VydmVySFRNTCA9IGRvbUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRIVE1MID0gbm9ybWFsaXplSFRNTChkb21FbGVtZW50LCBuZXh0SHRtbCk7XG5cbiAgICAgICAgICBpZiAoZXhwZWN0ZWRIVE1MICE9PSBzZXJ2ZXJIVE1MKSB7XG4gICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVySFRNTCwgZXhwZWN0ZWRIVE1MKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5KTtcblxuICAgICAgICBpZiAoY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgIHZhciBleHBlY3RlZFN0eWxlID0gY3JlYXRlRGFuZ2Vyb3VzU3RyaW5nRm9yU3R5bGVzKG5leHRQcm9wKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXG4gICAgICAgICAgaWYgKGV4cGVjdGVkU3R5bGUgIT09IHNlcnZlclZhbHVlKSB7XG4gICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIGV4cGVjdGVkU3R5bGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3ApO1xuXG4gICAgICAgIGlmIChuZXh0UHJvcCAhPT0gc2VydmVyVmFsdWUpIHtcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc2hvdWxkSWdub3JlQXR0cmlidXRlKHByb3BLZXksIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpICYmICFzaG91bGRSZW1vdmVBdHRyaWJ1dGUocHJvcEtleSwgbmV4dFByb3AsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgICAgIHZhciBpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3AsIHByb3BlcnR5SW5mbyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG93bk5hbWVzcGFjZSA9IHBhcmVudE5hbWVzcGFjZTtcblxuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgICAgICAgIG93bk5hbWVzcGFjZSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0YWcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZShwcm9wS2V5KTtcblxuICAgICAgICAgICAgaWYgKHN0YW5kYXJkTmFtZSAhPT0gbnVsbCAmJiBzdGFuZGFyZE5hbWUgIT09IHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgYW4gU1ZHIHByb3AgaXMgc3VwcGxpZWQgd2l0aCBiYWQgY2FzaW5nLCBpdCB3aWxsXG4gICAgICAgICAgICAgIC8vIGJlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgZnJvbSBIVE1MLCBidXQgd2lsbCBwcm9kdWNlIGEgbWlzbWF0Y2hcbiAgICAgICAgICAgICAgLy8gKGFuZCB3b3VsZCBiZSBpbmNvcnJlY3RseSByZW5kZXJlZCBvbiB0aGUgY2xpZW50KS5cbiAgICAgICAgICAgICAgLy8gSG93ZXZlciwgd2UgYWxyZWFkeSB3YXJuIGFib3V0IGJhZCBjYXNpbmcgZWxzZXdoZXJlLlxuICAgICAgICAgICAgICAvLyBTbyB3ZSdsbCBza2lwIHRoZSBtaXNsZWFkaW5nIGV4dHJhIG1pc21hdGNoIHdhcm5pbmcgaW4gdGhpcyBjYXNlLlxuICAgICAgICAgICAgICBpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcgPSB0cnVlOyAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG5cbiAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUoc3RhbmRhcmROYW1lKTtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuXG5cbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRQcm9wICE9PSBzZXJ2ZXJWYWx1ZSAmJiAhaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nKSB7XG4gICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgIGlmIChleHRyYUF0dHJpYnV0ZU5hbWVzLnNpemUgPiAwICYmICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMoZXh0cmFBdHRyaWJ1dGVOYW1lcyk7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyKGRvbUVsZW1lbnQsIHJhd1Byb3BzLCB0cnVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlciQzKGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAvLyBGb3IgaW5wdXQgYW5kIHRleHRhcmVhIHdlIGN1cnJlbnQgYWx3YXlzIHNldCB0aGUgdmFsdWUgcHJvcGVydHkgYXRcbiAgICAgIC8vIHBvc3QgbW91bnQgdG8gZm9yY2UgaXQgdG8gZGl2ZXJnZSBmcm9tIGF0dHJpYnV0ZXMuIEhvd2V2ZXIsIGZvclxuICAgICAgLy8gb3B0aW9uIGFuZCBzZWxlY3Qgd2UgZG9uJ3QgcXVpdGUgZG8gdGhlIHNhbWUgdGhpbmcgYW5kIHNlbGVjdFxuICAgICAgLy8gaXMgbm90IHJlc2lsaWVudCB0byB0aGUgRE9NIHN0YXRlIGNoYW5naW5nIHNvIHdlIGRvbid0IGRvIHRoYXQgaGVyZS5cbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIG5vdCBkb2luZyB0aGlzIGZvciBpbnB1dCBhbmQgdGV4dGFyZWEuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIHJhd1Byb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG59XG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRUZXh0KHRleHROb2RlLCB0ZXh0KSB7XG4gIHZhciBpc0RpZmZlcmVudCA9IHRleHROb2RlLm5vZGVWYWx1ZSAhPT0gdGV4dDtcbiAgcmV0dXJuIGlzRGlmZmVyZW50O1xufVxuZnVuY3Rpb24gd2FybkZvclVubWF0Y2hlZFRleHQodGV4dE5vZGUsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSh0ZXh0Tm9kZS5ub2RlVmFsdWUsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudE5vZGUsIGNoaWxkKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIDwlcz4gaW4gPCVzPi4nLCBjaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudE5vZGUsIGNoaWxkKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiB0aGUgdGV4dCBub2RlIFwiJXNcIiBpbiA8JXM+LicsIGNoaWxkLm5vZGVWYWx1ZSwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudE5vZGUsIHRhZywgcHJvcHMpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgPCVzPiBpbiA8JXM+LicsIHRhZywgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudE5vZGUsIHRleHQpIHtcbiAge1xuICAgIGlmICh0ZXh0ID09PSAnJykge1xuICAgICAgLy8gV2UgZXhwZWN0IHRvIGluc2VydCBlbXB0eSB0ZXh0IG5vZGVzIHNpbmNlIHRoZXkncmUgbm90IHJlcHJlc2VudGVkIGluXG4gICAgICAvLyB0aGUgSFRNTC5cbiAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIHNwZWNpYWwgY2FzZSBpZiB3ZSBjYW4ganVzdCBhdm9pZCBpbnNlcnRpbmcgZW1wdHlcbiAgICAgIC8vIHRleHQgbm9kZXMuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0V4cGVjdGVkIHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSBtYXRjaGluZyB0ZXh0IG5vZGUgZm9yIFwiJXNcIiBpbiA8JXM+LicsIHRleHQsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMyhkb21FbGVtZW50LCB0YWcsIHByb3BzKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZShkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDIoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMShkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG4gIH1cbn1cblxudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgdXBkYXRlZEFuY2VzdG9ySW5mbyA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIC8vIFRoaXMgdmFsaWRhdGlvbiBjb2RlIHdhcyB3cml0dGVuIGJhc2VkIG9uIHRoZSBIVE1MNSBwYXJzaW5nIHNwZWM6XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLXNjb3BlXG4gIC8vXG4gIC8vIE5vdGU6IHRoaXMgZG9lcyBub3QgY2F0Y2ggYWxsIGludmFsaWQgbmVzdGluZywgbm9yIGRvZXMgaXQgdHJ5IHRvIChhcyBpdCdzXG4gIC8vIG5vdCBjbGVhciB3aGF0IHByYWN0aWNhbCBiZW5lZml0IGRvaW5nIHNvIHByb3ZpZGVzKTsgaW5zdGVhZCwgd2Ugd2FybiBvbmx5XG4gIC8vIGZvciBjYXNlcyB3aGVyZSB0aGUgcGFyc2VyIHdpbGwgZ2l2ZSBhIHBhcnNlIHRyZWUgZGlmZmVyaW5nIGZyb20gd2hhdCBSZWFjdFxuICAvLyBpbnRlbmRlZC4gRm9yIGV4YW1wbGUsIDxiPjxkaXY+PC9kaXY+PC9iPiBpcyBpbnZhbGlkIGJ1dCB3ZSBkb24ndCB3YXJuXG4gIC8vIGJlY2F1c2UgaXQgc3RpbGwgcGFyc2VzIGNvcnJlY3RseTsgd2UgZG8gd2FybiBmb3Igb3RoZXIgY2FzZXMgbGlrZSBuZXN0ZWRcbiAgLy8gPHA+IHRhZ3Mgd2hlcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgaW1wbGljaXRseSBjbG9zZXMgdGhlXG4gIC8vIGZpcnN0LCBjYXVzaW5nIGEgY29uZnVzaW5nIG1lc3MuXG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3NwZWNpYWxcbiAgdmFyIHNwZWNpYWxUYWdzID0gWydhZGRyZXNzJywgJ2FwcGxldCcsICdhcmVhJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnYmFzZScsICdiYXNlZm9udCcsICdiZ3NvdW5kJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdidXR0b24nLCAnY2FwdGlvbicsICdjZW50ZXInLCAnY29sJywgJ2NvbGdyb3VwJywgJ2RkJywgJ2RldGFpbHMnLCAnZGlyJywgJ2RpdicsICdkbCcsICdkdCcsICdlbWJlZCcsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsICdmcmFtZScsICdmcmFtZXNldCcsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsICdpZnJhbWUnLCAnaW1nJywgJ2lucHV0JywgJ2lzaW5kZXgnLCAnbGknLCAnbGluaycsICdsaXN0aW5nJywgJ21haW4nLCAnbWFycXVlZScsICdtZW51JywgJ21lbnVpdGVtJywgJ21ldGEnLCAnbmF2JywgJ25vZW1iZWQnLCAnbm9mcmFtZXMnLCAnbm9zY3JpcHQnLCAnb2JqZWN0JywgJ29sJywgJ3AnLCAncGFyYW0nLCAncGxhaW50ZXh0JywgJ3ByZScsICdzY3JpcHQnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc291cmNlJywgJ3N0eWxlJywgJ3N1bW1hcnknLCAndGFibGUnLCAndGJvZHknLCAndGQnLCAndGVtcGxhdGUnLCAndGV4dGFyZWEnLCAndGZvb3QnLCAndGgnLCAndGhlYWQnLCAndGl0bGUnLCAndHInLCAndHJhY2snLCAndWwnLCAnd2JyJywgJ3htcCddOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1zY29wZVxuXG4gIHZhciBpblNjb3BlVGFncyA9IFsnYXBwbGV0JywgJ2NhcHRpb24nLCAnaHRtbCcsICd0YWJsZScsICd0ZCcsICd0aCcsICdtYXJxdWVlJywgJ29iamVjdCcsICd0ZW1wbGF0ZScsIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2h0bWwtaW50ZWdyYXRpb24tcG9pbnRcbiAgLy8gVE9ETzogRGlzdGluZ3Vpc2ggYnkgbmFtZXNwYWNlIGhlcmUgLS0gZm9yIDx0aXRsZT4sIGluY2x1ZGluZyBpdCBoZXJlXG4gIC8vIGVycnMgb24gdGhlIHNpZGUgb2YgZmV3ZXIgd2FybmluZ3NcbiAgJ2ZvcmVpZ25PYmplY3QnLCAnZGVzYycsICd0aXRsZSddOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1idXR0b24tc2NvcGVcblxuICB2YXIgYnV0dG9uU2NvcGVUYWdzID0gaW5TY29wZVRhZ3MuY29uY2F0KFsnYnV0dG9uJ10pOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNnZW5lcmF0ZS1pbXBsaWVkLWVuZC10YWdzXG5cbiAgdmFyIGltcGxpZWRFbmRUYWdzID0gWydkZCcsICdkdCcsICdsaScsICdvcHRpb24nLCAnb3B0Z3JvdXAnLCAncCcsICdycCcsICdydCddO1xuICB2YXIgZW1wdHlBbmNlc3RvckluZm8gPSB7XG4gICAgY3VycmVudDogbnVsbCxcbiAgICBmb3JtVGFnOiBudWxsLFxuICAgIGFUYWdJblNjb3BlOiBudWxsLFxuICAgIGJ1dHRvblRhZ0luU2NvcGU6IG51bGwsXG4gICAgbm9iclRhZ0luU2NvcGU6IG51bGwsXG4gICAgcFRhZ0luQnV0dG9uU2NvcGU6IG51bGwsXG4gICAgbGlzdEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbCxcbiAgICBkbEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbFxuICB9O1xuXG4gIHVwZGF0ZWRBbmNlc3RvckluZm8gPSBmdW5jdGlvbiAob2xkSW5mbywgdGFnKSB7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IF9hc3NpZ24oe30sIG9sZEluZm8gfHwgZW1wdHlBbmNlc3RvckluZm8pO1xuXG4gICAgdmFyIGluZm8gPSB7XG4gICAgICB0YWc6IHRhZ1xuICAgIH07XG5cbiAgICBpZiAoaW5TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGJ1dHRvblNjb3BlVGFncy5pbmRleE9mKHRhZykgIT09IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBudWxsO1xuICAgIH0gLy8gU2VlIHJ1bGVzIGZvciAnbGknLCAnZGQnLCAnZHQnIHN0YXJ0IHRhZ3MgaW5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5XG5cblxuICAgIGlmIChzcGVjaWFsVGFncy5pbmRleE9mKHRhZykgIT09IC0xICYmIHRhZyAhPT0gJ2FkZHJlc3MnICYmIHRhZyAhPT0gJ2RpdicgJiYgdGFnICE9PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgfVxuXG4gICAgYW5jZXN0b3JJbmZvLmN1cnJlbnQgPSBpbmZvO1xuXG4gICAgaWYgKHRhZyA9PT0gJ2Zvcm0nKSB7XG4gICAgICBhbmNlc3RvckluZm8uZm9ybVRhZyA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2EnKSB7XG4gICAgICBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdidXR0b24nKSB7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ25vYnInKSB7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdwJykge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnbGknKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2RkJyB8fCB0YWcgPT09ICdkdCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9ySW5mbztcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxuICAgKi9cblxuXG4gIHZhciBpc1RhZ1ZhbGlkV2l0aFBhcmVudCA9IGZ1bmN0aW9uICh0YWcsIHBhcmVudFRhZykge1xuICAgIC8vIEZpcnN0LCBsZXQncyBjaGVjayBpZiB3ZSdyZSBpbiBhbiB1bnVzdWFsIHBhcnNpbmcgbW9kZS4uLlxuICAgIHN3aXRjaCAocGFyZW50VGFnKSB7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5zZWxlY3RcbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdvcHRpb24nIHx8IHRhZyA9PT0gJ29wdGdyb3VwJyB8fCB0YWcgPT09ICcjdGV4dCc7XG5cbiAgICAgIGNhc2UgJ29wdGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gU3RyaWN0bHkgc3BlYWtpbmcsIHNlZWluZyBhbiA8b3B0aW9uPiBkb2Vzbid0IG1lYW4gd2UncmUgaW4gYSA8c2VsZWN0PlxuICAgICAgLy8gYnV0XG5cbiAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICcjdGV4dCc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50ZFxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY2FwdGlvblxuICAgICAgLy8gTm8gc3BlY2lhbCBiZWhhdmlvciBzaW5jZSB0aGVzZSBydWxlcyBmYWxsIGJhY2sgdG8gXCJpbiBib2R5XCIgbW9kZSBmb3JcbiAgICAgIC8vIGFsbCBleGNlcHQgc3BlY2lhbCB0YWJsZSBub2RlcyB3aGljaCBjYXVzZSBiYWQgcGFyc2luZyBiZWhhdmlvciBhbnl3YXkuXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50clxuXG4gICAgICBjYXNlICd0cic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0aCcgfHwgdGFnID09PSAndGQnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRib2R5XG5cbiAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ3RyJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5jb2xncm91cFxuXG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjb2wnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRhYmxlXG5cbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2NhcHRpb24nIHx8IHRhZyA9PT0gJ2NvbGdyb3VwJyB8fCB0YWcgPT09ICd0Ym9keScgfHwgdGFnID09PSAndGZvb3QnIHx8IHRhZyA9PT0gJ3RoZWFkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5oZWFkXG5cbiAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnYmFzZScgfHwgdGFnID09PSAnYmFzZWZvbnQnIHx8IHRhZyA9PT0gJ2Jnc291bmQnIHx8IHRhZyA9PT0gJ2xpbmsnIHx8IHRhZyA9PT0gJ21ldGEnIHx8IHRhZyA9PT0gJ3RpdGxlJyB8fCB0YWcgPT09ICdub3NjcmlwdCcgfHwgdGFnID09PSAnbm9mcmFtZXMnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlbWFudGljcy5odG1sI3RoZS1odG1sLWVsZW1lbnRcblxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdoZWFkJyB8fCB0YWcgPT09ICdib2R5JyB8fCB0YWcgPT09ICdmcmFtZXNldCc7XG5cbiAgICAgIGNhc2UgJ2ZyYW1lc2V0JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2ZyYW1lJztcblxuICAgICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2h0bWwnO1xuICAgIH0gLy8gUHJvYmFibHkgaW4gdGhlIFwiaW4gYm9keVwiIHBhcnNpbmcgbW9kZSwgc28gd2Ugb3V0bGF3IG9ubHkgdGFnIGNvbWJvc1xuICAgIC8vIHdoZXJlIHRoZSBwYXJzaW5nIHJ1bGVzIGNhdXNlIGltcGxpY2l0IG9wZW5zIG9yIGNsb3NlcyB0byBiZSBhZGRlZC5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5XG5cblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgIT09ICdoMScgJiYgcGFyZW50VGFnICE9PSAnaDInICYmIHBhcmVudFRhZyAhPT0gJ2gzJyAmJiBwYXJlbnRUYWcgIT09ICdoNCcgJiYgcGFyZW50VGFnICE9PSAnaDUnICYmIHBhcmVudFRhZyAhPT0gJ2g2JztcblxuICAgICAgY2FzZSAncnAnOlxuICAgICAgY2FzZSAncnQnOlxuICAgICAgICByZXR1cm4gaW1wbGllZEVuZFRhZ3MuaW5kZXhPZihwYXJlbnRUYWcpID09PSAtMTtcblxuICAgICAgY2FzZSAnYm9keSc6XG4gICAgICBjYXNlICdjYXB0aW9uJzpcbiAgICAgIGNhc2UgJ2NvbCc6XG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICBjYXNlICdmcmFtZXNldCc6XG4gICAgICBjYXNlICdmcmFtZSc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgY2FzZSAndGQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgY2FzZSAndGgnOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndHInOlxuICAgICAgICAvLyBUaGVzZSB0YWdzIGFyZSBvbmx5IHZhbGlkIHdpdGggYSBmZXcgcGFyZW50cyB0aGF0IGhhdmUgc3BlY2lhbCBjaGlsZFxuICAgICAgICAvLyBwYXJzaW5nIHJ1bGVzIC0tIGlmIHdlJ3JlIGRvd24gaGVyZSwgdGhlbiBub25lIG9mIHRob3NlIG1hdGNoZWQgYW5kXG4gICAgICAgIC8vIHNvIHdlIGFsbG93IGl0IG9ubHkgaWYgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBwYXJlbnQgaXMsIGFzIGFsbCBvdGhlclxuICAgICAgICAvLyBjYXNlcyBhcmUgaW52YWxpZC5cbiAgICAgICAgcmV0dXJuIHBhcmVudFRhZyA9PSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuXG5cbiAgdmFyIGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcgPSBmdW5jdGlvbiAodGFnLCBhbmNlc3RvckluZm8pIHtcbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdhcnRpY2xlJzpcbiAgICAgIGNhc2UgJ2FzaWRlJzpcbiAgICAgIGNhc2UgJ2Jsb2NrcXVvdGUnOlxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGNhc2UgJ2Rpcic6XG4gICAgICBjYXNlICdkaXYnOlxuICAgICAgY2FzZSAnZGwnOlxuICAgICAgY2FzZSAnZmllbGRzZXQnOlxuICAgICAgY2FzZSAnZmlnY2FwdGlvbic6XG4gICAgICBjYXNlICdmaWd1cmUnOlxuICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgIGNhc2UgJ2hlYWRlcic6XG4gICAgICBjYXNlICdoZ3JvdXAnOlxuICAgICAgY2FzZSAnbWFpbic6XG4gICAgICBjYXNlICdtZW51JzpcbiAgICAgIGNhc2UgJ25hdic6XG4gICAgICBjYXNlICdvbCc6XG4gICAgICBjYXNlICdwJzpcbiAgICAgIGNhc2UgJ3NlY3Rpb24nOlxuICAgICAgY2FzZSAnc3VtbWFyeSc6XG4gICAgICBjYXNlICd1bCc6XG4gICAgICBjYXNlICdwcmUnOlxuICAgICAgY2FzZSAnbGlzdGluZyc6XG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICBjYXNlICdocic6XG4gICAgICBjYXNlICd4bXAnOlxuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAgY2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuXG4gICAgICBjYXNlICdmb3JtJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5mb3JtVGFnIHx8IGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcblxuICAgICAgY2FzZSAnbGknOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc7XG5cbiAgICAgIGNhc2UgJ2RkJzpcbiAgICAgIGNhc2UgJ2R0JzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgICAgY2FzZSAnYnV0dG9uJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlO1xuXG4gICAgICBjYXNlICdhJzpcbiAgICAgICAgLy8gU3BlYyBzYXlzIHNvbWV0aGluZyBhYm91dCBzdG9yaW5nIGEgbGlzdCBvZiBtYXJrZXJzLCBidXQgaXQgc291bmRzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhpcyBjaGVjay5cbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZTtcblxuICAgICAgY2FzZSAnbm9icic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgdmFyIGRpZFdhcm4kMSA9IHt9O1xuXG4gIHZhbGlkYXRlRE9NTmVzdGluZyA9IGZ1bmN0aW9uIChjaGlsZFRhZywgY2hpbGRUZXh0LCBhbmNlc3RvckluZm8pIHtcbiAgICBhbmNlc3RvckluZm8gPSBhbmNlc3RvckluZm8gfHwgZW1wdHlBbmNlc3RvckluZm87XG4gICAgdmFyIHBhcmVudEluZm8gPSBhbmNlc3RvckluZm8uY3VycmVudDtcbiAgICB2YXIgcGFyZW50VGFnID0gcGFyZW50SW5mbyAmJiBwYXJlbnRJbmZvLnRhZztcblxuICAgIGlmIChjaGlsZFRleHQgIT0gbnVsbCkge1xuICAgICAgaWYgKGNoaWxkVGFnICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZzogd2hlbiBjaGlsZFRleHQgaXMgcGFzc2VkLCBjaGlsZFRhZyBzaG91bGQgYmUgbnVsbCcpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZFRhZyA9ICcjdGV4dCc7XG4gICAgfVxuXG4gICAgdmFyIGludmFsaWRQYXJlbnQgPSBpc1RhZ1ZhbGlkV2l0aFBhcmVudChjaGlsZFRhZywgcGFyZW50VGFnKSA/IG51bGwgOiBwYXJlbnRJbmZvO1xuICAgIHZhciBpbnZhbGlkQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50ID8gbnVsbCA6IGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbyk7XG4gICAgdmFyIGludmFsaWRQYXJlbnRPckFuY2VzdG9yID0gaW52YWxpZFBhcmVudCB8fCBpbnZhbGlkQW5jZXN0b3I7XG5cbiAgICBpZiAoIWludmFsaWRQYXJlbnRPckFuY2VzdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFuY2VzdG9yVGFnID0gaW52YWxpZFBhcmVudE9yQW5jZXN0b3IudGFnO1xuICAgIHZhciB3YXJuS2V5ID0gISFpbnZhbGlkUGFyZW50ICsgJ3wnICsgY2hpbGRUYWcgKyAnfCcgKyBhbmNlc3RvclRhZztcblxuICAgIGlmIChkaWRXYXJuJDFbd2FybktleV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuJDFbd2FybktleV0gPSB0cnVlO1xuICAgIHZhciB0YWdEaXNwbGF5TmFtZSA9IGNoaWxkVGFnO1xuICAgIHZhciB3aGl0ZXNwYWNlSW5mbyA9ICcnO1xuXG4gICAgaWYgKGNoaWxkVGFnID09PSAnI3RleHQnKSB7XG4gICAgICBpZiAoL1xcUy8udGVzdChjaGlsZFRleHQpKSB7XG4gICAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJ1RleHQgbm9kZXMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnV2hpdGVzcGFjZSB0ZXh0IG5vZGVzJztcbiAgICAgICAgd2hpdGVzcGFjZUluZm8gPSBcIiBNYWtlIHN1cmUgeW91IGRvbid0IGhhdmUgYW55IGV4dHJhIHdoaXRlc3BhY2UgYmV0d2VlbiB0YWdzIG9uIFwiICsgJ2VhY2ggbGluZSBvZiB5b3VyIHNvdXJjZSBjb2RlLic7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJzwnICsgY2hpbGRUYWcgKyAnPic7XG4gICAgfVxuXG4gICAgaWYgKGludmFsaWRQYXJlbnQpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgIGlmIChhbmNlc3RvclRhZyA9PT0gJ3RhYmxlJyAmJiBjaGlsZFRhZyA9PT0gJ3RyJykge1xuICAgICAgICBpbmZvICs9ICcgQWRkIGEgPHRib2R5PiwgPHRoZWFkPiBvciA8dGZvb3Q+IHRvIHlvdXIgY29kZSB0byBtYXRjaCB0aGUgRE9NIHRyZWUgZ2VuZXJhdGVkIGJ5ICcgKyAndGhlIGJyb3dzZXIuJztcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZyguLi4pOiAlcyBjYW5ub3QgYXBwZWFyIGFzIGEgY2hpbGQgb2YgPCVzPi4lcyVzJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnLCB3aGl0ZXNwYWNlSW5mbywgaW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90IGFwcGVhciBhcyBhIGRlc2NlbmRhbnQgb2YgJyArICc8JXM+LicsIHRhZ0Rpc3BsYXlOYW1lLCBhbmNlc3RvclRhZyk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMTtcblxue1xuICBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG59XG5cbnZhciBTVVNQRU5TRV9TVEFSVF9EQVRBID0gJyQnO1xudmFyIFNVU1BFTlNFX0VORF9EQVRBID0gJy8kJztcbnZhciBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgPSAnJD8nO1xudmFyIFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgPSAnJCEnO1xudmFyIFNUWUxFJDEgPSAnc3R5bGUnO1xudmFyIGV2ZW50c0VuYWJsZWQgPSBudWxsO1xudmFyIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbDtcblxuZnVuY3Rpb24gc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdidXR0b24nOlxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHJldHVybiAhIXByb3BzLmF1dG9Gb2N1cztcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFJvb3RIb3N0Q29udGV4dChyb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAgdmFyIHR5cGU7XG4gIHZhciBuYW1lc3BhY2U7XG4gIHZhciBub2RlVHlwZSA9IHJvb3RDb250YWluZXJJbnN0YW5jZS5ub2RlVHlwZTtcblxuICBzd2l0Y2ggKG5vZGVUeXBlKSB7XG4gICAgY2FzZSBET0NVTUVOVF9OT0RFOlxuICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpcbiAgICAgIHtcbiAgICAgICAgdHlwZSA9IG5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gJyNkb2N1bWVudCcgOiAnI2ZyYWdtZW50JztcbiAgICAgICAgdmFyIHJvb3QgPSByb290Q29udGFpbmVySW5zdGFuY2UuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBuYW1lc3BhY2UgPSByb290ID8gcm9vdC5uYW1lc3BhY2VVUkkgOiBnZXRDaGlsZE5hbWVzcGFjZShudWxsLCAnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGVUeXBlID09PSBDT01NRU5UX05PREUgPyByb290Q29udGFpbmVySW5zdGFuY2UucGFyZW50Tm9kZSA6IHJvb3RDb250YWluZXJJbnN0YW5jZTtcbiAgICAgICAgdmFyIG93bk5hbWVzcGFjZSA9IGNvbnRhaW5lci5uYW1lc3BhY2VVUkkgfHwgbnVsbDtcbiAgICAgICAgdHlwZSA9IGNvbnRhaW5lci50YWdOYW1lO1xuICAgICAgICBuYW1lc3BhY2UgPSBnZXRDaGlsZE5hbWVzcGFjZShvd25OYW1lc3BhY2UsIHR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgdmFsaWRhdGVkVGFnID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBhbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKG51bGwsIHZhbGlkYXRlZFRhZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgYW5jZXN0b3JJbmZvOiBhbmNlc3RvckluZm9cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXRDaGlsZEhvc3RDb250ZXh0KHBhcmVudEhvc3RDb250ZXh0LCB0eXBlLCByb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAge1xuICAgIHZhciBwYXJlbnRIb3N0Q29udGV4dERldiA9IHBhcmVudEhvc3RDb250ZXh0O1xuICAgIHZhciBuYW1lc3BhY2UgPSBnZXRDaGlsZE5hbWVzcGFjZShwYXJlbnRIb3N0Q29udGV4dERldi5uYW1lc3BhY2UsIHR5cGUpO1xuICAgIHZhciBhbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKHBhcmVudEhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgYW5jZXN0b3JJbmZvOiBhbmNlc3RvckluZm9cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBwcmVwYXJlRm9yQ29tbWl0KGNvbnRhaW5lckluZm8pIHtcbiAgZXZlbnRzRW5hYmxlZCA9IGlzRW5hYmxlZCgpO1xuICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IGdldFNlbGVjdGlvbkluZm9ybWF0aW9uKCk7XG4gIHZhciBhY3RpdmVJbnN0YW5jZSA9IG51bGw7XG5cbiAgc2V0RW5hYmxlZChmYWxzZSk7XG4gIHJldHVybiBhY3RpdmVJbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIHJlc2V0QWZ0ZXJDb21taXQoY29udGFpbmVySW5mbykge1xuICByZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbkluZm9ybWF0aW9uKTtcbiAgc2V0RW5hYmxlZChldmVudHNFbmFibGVkKTtcbiAgZXZlbnRzRW5hYmxlZCA9IG51bGw7XG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHZhciBwYXJlbnROYW1lc3BhY2U7XG5cbiAge1xuICAgIC8vIFRPRE86IHRha2UgbmFtZXNwYWNlIGludG8gYWNjb3VudCB3aGVuIHZhbGlkYXRpbmcuXG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgdmFsaWRhdGVET01OZXN0aW5nKHR5cGUsIG51bGwsIGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbyk7XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBwcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cblxuICAgIHBhcmVudE5hbWVzcGFjZSA9IGhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZTtcbiAgfVxuXG4gIHZhciBkb21FbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBwYXJlbnROYW1lc3BhY2UpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBkb21FbGVtZW50KTtcbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBwcm9wcyk7XG4gIHJldHVybiBkb21FbGVtZW50O1xufVxuZnVuY3Rpb24gYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiBmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbihkb21FbGVtZW50LCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuICBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgcmV0dXJuIHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgcHJvcHMpO1xufVxuZnVuY3Rpb24gcHJlcGFyZVVwZGF0ZShkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuXG4gICAgaWYgKHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiAhPT0gdHlwZW9mIG9sZFByb3BzLmNoaWxkcmVuICYmICh0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaWZmUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xufVxuZnVuY3Rpb24gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJvcHMpIHtcbiAgcmV0dXJuIHR5cGUgPT09ICd0ZXh0YXJlYScgfHwgdHlwZSA9PT0gJ29wdGlvbicgfHwgdHlwZSA9PT0gJ25vc2NyaXB0JyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHRJbnN0YW5jZSh0ZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgdGV4dCwgaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvKTtcbiAgfVxuXG4gIHZhciB0ZXh0Tm9kZSA9IGNyZWF0ZVRleHROb2RlKHRleHQsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHRleHROb2RlKTtcbiAgcmV0dXJuIHRleHROb2RlO1xufVxuLy8gaWYgYSBjb21wb25lbnQganVzdCBpbXBvcnRzIFJlYWN0RE9NIChlLmcuIGZvciBmaW5kRE9NTm9kZSkuXG4vLyBTb21lIGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBzZXRUaW1lb3V0IG9yIGNsZWFyVGltZW91dC5cblxudmFyIHNjaGVkdWxlVGltZW91dCA9IHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gc2V0VGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBjYW5jZWxUaW1lb3V0ID0gdHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IGNsZWFyVGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBub1RpbWVvdXQgPSAtMTsgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY29tbWl0TW91bnQoZG9tRWxlbWVudCwgdHlwZSwgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gRGVzcGl0ZSB0aGUgbmFtaW5nIHRoYXQgbWlnaHQgaW1wbHkgb3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCBvbmx5XG4gIC8vIGZpcmVzIGlmIHRoZXJlIGlzIGFuIGBVcGRhdGVgIGVmZmVjdCBzY2hlZHVsZWQgZHVyaW5nIG1vdW50aW5nLlxuICAvLyBUaGlzIGhhcHBlbnMgaWYgYGZpbmFsaXplSW5pdGlhbENoaWxkcmVuYCByZXR1cm5zIGB0cnVlYCAod2hpY2ggaXRcbiAgLy8gZG9lcyB0byBpbXBsZW1lbnQgdGhlIGBhdXRvRm9jdXNgIGF0dHJpYnV0ZSBvbiB0aGUgY2xpZW50KS4gQnV0XG4gIC8vIHRoZXJlIGFyZSBhbHNvIG90aGVyIGNhc2VzIHdoZW4gdGhpcyBtaWdodCBoYXBwZW4gKHN1Y2ggYXMgcGF0Y2hpbmdcbiAgLy8gdXAgdGV4dCBjb250ZW50IGR1cmluZyBoeWRyYXRpb24gbWlzbWF0Y2gpLiBTbyB3ZSdsbCBjaGVjayB0aGlzIGFnYWluLlxuICBpZiAoc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBuZXdQcm9wcykpIHtcbiAgICBkb21FbGVtZW50LmZvY3VzKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZShkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gVXBkYXRlIHRoZSBwcm9wcyBoYW5kbGUgc28gdGhhdCB3ZSBrbm93IHdoaWNoIHByb3BzIGFyZSB0aGUgb25lcyB3aXRoXG4gIC8vIHdpdGggY3VycmVudCBldmVudCBoYW5kbGVycy5cbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBuZXdQcm9wcyk7IC8vIEFwcGx5IHRoZSBkaWZmIHRvIHRoZSBET00gbm9kZS5cblxuICB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG59XG5mdW5jdGlvbiByZXNldFRleHRDb250ZW50KGRvbUVsZW1lbnQpIHtcbiAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycpO1xufVxuZnVuY3Rpb24gY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IG5ld1RleHQ7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIHZhciBwYXJlbnROb2RlO1xuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIHBhcmVudE5vZGUgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgY29udGFpbmVyKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJlbnROb2RlID0gY29udGFpbmVyO1xuICAgIHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICB9IC8vIFRoaXMgY29udGFpbmVyIG1pZ2h0IGJlIHVzZWQgZm9yIGEgcG9ydGFsLlxuICAvLyBJZiBzb21ldGhpbmcgaW5zaWRlIGEgcG9ydGFsIGlzIGNsaWNrZWQsIHRoYXQgY2xpY2sgc2hvdWxkIGJ1YmJsZVxuICAvLyB0aHJvdWdoIHRoZSBSZWFjdCB0cmVlLiBIb3dldmVyLCBvbiBNb2JpbGUgU2FmYXJpIHRoZSBjbGljayB3b3VsZFxuICAvLyBuZXZlciBidWJibGUgdGhyb3VnaCB0aGUgKkRPTSogdHJlZSB1bmxlc3MgYW4gYW5jZXN0b3Igd2l0aCBvbmNsaWNrXG4gIC8vIGV2ZW50IGV4aXN0cy4gU28gd2Ugd291bGRuJ3Qgc2VlIGl0IGFuZCBkaXNwYXRjaCBpdC5cbiAgLy8gVGhpcyBpcyB3aHkgd2UgZW5zdXJlIHRoYXQgbm9uIFJlYWN0IHJvb3QgY29udGFpbmVycyBoYXZlIGlubGluZSBvbmNsaWNrXG4gIC8vIGRlZmluZWQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE5MThcblxuXG4gIHZhciByZWFjdFJvb3RDb250YWluZXIgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcblxuICBpZiAoKHJlYWN0Um9vdENvbnRhaW5lciA9PT0gbnVsbCB8fCByZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZCkgJiYgcGFyZW50Tm9kZS5vbmNsaWNrID09PSBudWxsKSB7XG4gICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChwYXJlbnROb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHBhcmVudEluc3RhbmNlLCBjaGlsZCwgYmVmb3JlQ2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG59XG5mdW5jdGlvbiBpbnNlcnRJbkNvbnRhaW5lckJlZm9yZShjb250YWluZXIsIGNoaWxkLCBiZWZvcmVDaGlsZCkge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBjb250YWluZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9XG59XG5mdW5jdGlvbiBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgLy8gVE9ETzogRG9lcyB0aGlzIHdvcmsgZm9yIGFsbCBlbGVtZW50IHR5cGVzPyBXaGF0IGFib3V0IE1hdGhNTD8gU2hvdWxkIHdlXG4gIC8vIHBhc3MgaG9zdCBjb250ZXh0IHRvIHRoaXMgbWV0aG9kP1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGUgPSBpbnN0YW5jZS5zdHlsZTtcblxuICBpZiAodHlwZW9mIHN0eWxlLnNldFByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCAnbm9uZScsICdpbXBvcnRhbnQnKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG59XG5mdW5jdGlvbiBoaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gJyc7XG59XG5mdW5jdGlvbiB1bmhpZGVJbnN0YW5jZShpbnN0YW5jZSwgcHJvcHMpIHtcbiAgaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgdmFyIHN0eWxlUHJvcCA9IHByb3BzW1NUWUxFJDFdO1xuICB2YXIgZGlzcGxheSA9IHN0eWxlUHJvcCAhPT0gdW5kZWZpbmVkICYmIHN0eWxlUHJvcCAhPT0gbnVsbCAmJiBzdHlsZVByb3AuaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSA/IHN0eWxlUHJvcC5kaXNwbGF5IDogbnVsbDtcbiAgaW5zdGFuY2Uuc3R5bGUuZGlzcGxheSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoJ2Rpc3BsYXknLCBkaXNwbGF5KTtcbn1cbmZ1bmN0aW9uIHVuaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IHRleHQ7XG59XG5mdW5jdGlvbiBjbGVhckNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnRleHRDb250ZW50ID0gJyc7XG4gIH0gZWxzZSBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgdmFyIGJvZHkgPSBjb250YWluZXIuYm9keTtcblxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGJvZHkudGV4dENvbnRlbnQgPSAnJztcbiAgICB9XG4gIH1cbn0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY2FuSHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcykge1xuICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgIT09IEVMRU1FTlRfTk9ERSB8fCB0eXBlLnRvTG93ZXJDYXNlKCkgIT09IGluc3RhbmNlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBUaGlzIGhhcyBub3cgYmVlbiByZWZpbmVkIHRvIGFuIGVsZW1lbnQgbm9kZS5cblxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UoaW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKHRleHQgPT09ICcnIHx8IGluc3RhbmNlLm5vZGVUeXBlICE9PSBURVhUX05PREUpIHtcbiAgICAvLyBFbXB0eSBzdHJpbmdzIGFyZSBub3QgcGFyc2VkIGJ5IEhUTUwgc28gdGhlcmUgd29uJ3QgYmUgYSBjb3JyZWN0IG1hdGNoIGhlcmUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gVGhpcyBoYXMgbm93IGJlZW4gcmVmaW5lZCB0byBhIHRleHQgbm9kZS5cblxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZShub2RlKSB7XG4gIC8vIFNraXAgbm9uLWh5ZHJhdGFibGUgbm9kZXMuXG4gIGZvciAoOyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgdmFyIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZTtcblxuICAgIGlmIChub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKGluc3RhbmNlLm5leHRTaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKHBhcmVudEluc3RhbmNlKSB7XG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShwYXJlbnRJbnN0YW5jZS5maXJzdENoaWxkKTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgaW5zdGFuY2UpOyAvLyBUT0RPOiBQb3NzaWJseSBkZWZlciB0aGlzIHVudGlsIHRoZSBjb21taXQgcGhhc2Ugd2hlcmUgYWxsIHRoZSBldmVudHNcbiAgLy8gZ2V0IGF0dGFjaGVkLlxuXG4gIHVwZGF0ZUZpYmVyUHJvcHMoaW5zdGFuY2UsIHByb3BzKTtcbiAgdmFyIHBhcmVudE5hbWVzcGFjZTtcblxuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgcGFyZW50TmFtZXNwYWNlID0gaG9zdENvbnRleHREZXYubmFtZXNwYWNlO1xuICB9XG5cbiAgcmV0dXJuIGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCBwYXJlbnROYW1lc3BhY2UpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgdGV4dEluc3RhbmNlKTtcbiAgcmV0dXJuIGRpZmZIeWRyYXRlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbn1cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSkge1xuICB2YXIgbm9kZSA9IHN1c3BlbnNlSW5zdGFuY2UubmV4dFNpYmxpbmc7IC8vIFNraXAgcGFzdCBhbGwgbm9kZXMgd2l0aGluIHRoaXMgc3VzcGVuc2UgYm91bmRhcnkuXG4gIC8vIFRoZXJlIG1pZ2h0IGJlIG5lc3RlZCBub2RlcyBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaG93XG4gIC8vIGRlZXAgd2UgYXJlIGFuZCBvbmx5IGJyZWFrIG91dCB3aGVuIHdlJ3JlIGJhY2sgb24gdG9wLlxuXG4gIHZhciBkZXB0aCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gIH0gLy8gVE9ETzogV2Fybiwgd2UgZGlkbid0IGZpbmQgdGhlIGVuZCBjb21tZW50IGJvdW5kYXJ5LlxuXG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIFJldHVybnMgdGhlIFN1c3BlbnNlSW5zdGFuY2UgaWYgdGhpcyBub2RlIGlzIGEgZGlyZWN0IGNoaWxkIG9mIGFcbi8vIFN1c3BlbnNlSW5zdGFuY2UuIEkuZS4gaWYgaXRzIHByZXZpb3VzIHNpYmxpbmcgaXMgYSBDb21tZW50IHdpdGhcbi8vIFNVU1BFTlNFX3hfU1RBUlRfREFUQS4gT3RoZXJ3aXNlLCBudWxsLlxuXG5mdW5jdGlvbiBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHRhcmdldEluc3RhbmNlKSB7XG4gIHZhciBub2RlID0gdGFyZ2V0SW5zdGFuY2UucHJldmlvdXNTaWJsaW5nOyAvLyBTa2lwIHBhc3QgYWxsIG5vZGVzIHdpdGhpbiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAvLyBUaGVyZSBtaWdodCBiZSBuZXN0ZWQgbm9kZXMgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvd1xuICAvLyBkZWVwIHdlIGFyZSBhbmQgb25seSBicmVhayBvdXQgd2hlbiB3ZSdyZSBiYWNrIG9uIHRvcC5cblxuICB2YXIgZGVwdGggPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGRhdGEgPSBub2RlLmRhdGE7XG5cbiAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICAvLyBSZXRyeSBpZiBhbnkgZXZlbnQgcmVwbGF5aW5nIHdhcyBibG9ja2VkIG9uIHRoaXMuXG4gIHJldHJ5SWZCbG9ja2VkT24oY29udGFpbmVyKTtcbn1cbmZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gIC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cbiAgcmV0cnlJZkJsb2NrZWRPbihzdXNwZW5zZUluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEh5ZHJhdGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKTtcbiAgICB9IGVsc2UgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIDsgZWxzZSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90SHlkcmF0ZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSA7IGVsc2Uge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50Q29udGFpbmVyLCB0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50Q29udGFpbmVyLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50SW5zdGFuY2UsIHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkgO1xufVxudmFyIGNsaWVudElkID0gMDtcbmZ1bmN0aW9uIG1ha2VDbGllbnRJZEluREVWKHdhcm5PbkFjY2Vzc0luREVWKSB7XG4gIHZhciBpZCA9ICdyOicgKyAoY2xpZW50SWQrKykudG9TdHJpbmcoMzYpO1xuICByZXR1cm4ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuT25BY2Nlc3NJbkRFVigpO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH0sXG4gICAgdmFsdWVPZjogZnVuY3Rpb24gKCkge1xuICAgICAgd2Fybk9uQWNjZXNzSW5ERVYoKTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBpc09wYXF1ZUh5ZHJhdGluZ09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfT1BBUVVFX0lEX1RZUEU7XG59XG5mdW5jdGlvbiBtYWtlT3BhcXVlSHlkcmF0aW5nT2JqZWN0KGF0dGVtcHRUb1JlYWRWYWx1ZSkge1xuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9PUEFRVUVfSURfVFlQRSxcbiAgICB0b1N0cmluZzogYXR0ZW1wdFRvUmVhZFZhbHVlLFxuICAgIHZhbHVlT2Y6IGF0dGVtcHRUb1JlYWRWYWx1ZVxuICB9O1xufVxuZnVuY3Rpb24gcHJlcGFyZVBvcnRhbE1vdW50KHBvcnRhbEluc3RhbmNlKSB7XG4gIHtcbiAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhwb3J0YWxJbnN0YW5jZSk7XG4gIH1cbn1cblxudmFyIHJhbmRvbUtleSA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xudmFyIGludGVybmFsSW5zdGFuY2VLZXkgPSAnX19yZWFjdEZpYmVyJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxQcm9wc0tleSA9ICdfX3JlYWN0UHJvcHMkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5ID0gJ19fcmVhY3RDb250YWluZXIkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXkgPSAnX19yZWFjdEV2ZW50cyQnICsgcmFuZG9tS2V5O1xuZnVuY3Rpb24gcHJlY2FjaGVGaWJlck5vZGUoaG9zdEluc3QsIG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGhvc3RJbnN0O1xufVxuZnVuY3Rpb24gbWFya0NvbnRhaW5lckFzUm9vdChob3N0Um9vdCwgbm9kZSkge1xuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gaG9zdFJvb3Q7XG59XG5mdW5jdGlvbiB1bm1hcmtDb250YWluZXJBc1Jvb3Qobm9kZSkge1xuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzQ29udGFpbmVyTWFya2VkQXNSb290KG5vZGUpIHtcbiAgcmV0dXJuICEhbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XTtcbn0gLy8gR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBjbG9zZXN0IEhvc3RDb21wb25lbnQgb3IgSG9zdFRleHQgZmliZXIgYW5jZXN0b3IuXG4vLyBJZiB0aGUgdGFyZ2V0IG5vZGUgaXMgcGFydCBvZiBhIGh5ZHJhdGVkIG9yIG5vdCB5ZXQgcmVuZGVyZWQgc3VidHJlZSwgdGhlblxuLy8gdGhpcyBtYXkgYWxzbyByZXR1cm4gYSBTdXNwZW5zZUNvbXBvbmVudCBvciBIb3N0Um9vdCB0byBpbmRpY2F0ZSB0aGF0LlxuLy8gQ29uY2VwdHVhbGx5IHRoZSBIb3N0Um9vdCBmaWJlciBpcyBhIGNoaWxkIG9mIHRoZSBDb250YWluZXIgbm9kZS4gU28gaWYgeW91XG4vLyBwYXNzIHRoZSBDb250YWluZXIgbm9kZSBhcyB0aGUgdGFyZ2V0Tm9kZSwgeW91IHdpbGwgbm90IGFjdHVhbGx5IGdldCB0aGVcbi8vIEhvc3RSb290IGJhY2suIFRvIGdldCB0byB0aGUgSG9zdFJvb3QsIHlvdSBuZWVkIHRvIHBhc3MgYSBjaGlsZCBvZiBpdC5cbi8vIFRoZSBzYW1lIHRoaW5nIGFwcGxpZXMgdG8gU3VzcGVuc2UgYm91bmRhcmllcy5cblxuZnVuY3Rpb24gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0Tm9kZSkge1xuICB2YXIgdGFyZ2V0SW5zdCA9IHRhcmdldE5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgaWYgKHRhcmdldEluc3QpIHtcbiAgICAvLyBEb24ndCByZXR1cm4gSG9zdFJvb3Qgb3IgU3VzcGVuc2VDb21wb25lbnQgaGVyZS5cbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfSAvLyBJZiB0aGUgZGlyZWN0IGV2ZW50IHRhcmdldCBpc24ndCBhIFJlYWN0IG93bmVkIERPTSBub2RlLCB3ZSBuZWVkIHRvIGxvb2tcbiAgLy8gdG8gc2VlIGlmIG9uZSBvZiBpdHMgcGFyZW50cyBpcyBhIFJlYWN0IG93bmVkIERPTSBub2RlLlxuXG5cbiAgdmFyIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG5cbiAgd2hpbGUgKHBhcmVudE5vZGUpIHtcbiAgICAvLyBXZSdsbCBjaGVjayBpZiB0aGlzIGlzIGEgY29udGFpbmVyIHJvb3QgdGhhdCBjb3VsZCBpbmNsdWRlXG4gICAgLy8gUmVhY3Qgbm9kZXMgaW4gdGhlIGZ1dHVyZS4gV2UgbmVlZCB0byBjaGVjayB0aGlzIGZpcnN0IGJlY2F1c2VcbiAgICAvLyBpZiB3ZSdyZSBhIGNoaWxkIG9mIGEgZGVoeWRyYXRlZCBjb250YWluZXIsIHdlIG5lZWQgdG8gZmlyc3RcbiAgICAvLyBmaW5kIHRoYXQgaW5uZXIgY29udGFpbmVyIGJlZm9yZSBtb3Zpbmcgb24gdG8gZmluZGluZyB0aGUgcGFyZW50XG4gICAgLy8gaW5zdGFuY2UuIE5vdGUgdGhhdCB3ZSBkb24ndCBjaGVjayB0aGlzIGZpZWxkIG9uICB0aGUgdGFyZ2V0Tm9kZVxuICAgIC8vIGl0c2VsZiBiZWNhdXNlIHRoZSBmaWJlcnMgYXJlIGNvbmNlcHR1YWxseSBiZXR3ZWVuIHRoZSBjb250YWluZXJcbiAgICAvLyBub2RlIGFuZCB0aGUgZmlyc3QgY2hpbGQuIEl0IGlzbid0IHN1cnJvdW5kaW5nIHRoZSBjb250YWluZXIgbm9kZS5cbiAgICAvLyBJZiBpdCdzIG5vdCBhIGNvbnRhaW5lciwgd2UgY2hlY2sgaWYgaXQncyBhbiBpbnN0YW5jZS5cbiAgICB0YXJnZXRJbnN0ID0gcGFyZW50Tm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSB8fCBwYXJlbnROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gICAgaWYgKHRhcmdldEluc3QpIHtcbiAgICAgIC8vIFNpbmNlIHRoaXMgd2Fzbid0IHRoZSBkaXJlY3QgdGFyZ2V0IG9mIHRoZSBldmVudCwgd2UgbWlnaHQgaGF2ZVxuICAgICAgLy8gc3RlcHBlZCBwYXN0IGRlaHlkcmF0ZWQgRE9NIG5vZGVzIHRvIGdldCBoZXJlLiBIb3dldmVyIHRoZXkgY291bGRcbiAgICAgIC8vIGFsc28gaGF2ZSBiZWVuIG5vbi1SZWFjdCBub2Rlcy4gV2UgbmVlZCB0byBhbnN3ZXIgd2hpY2ggb25lLlxuICAgICAgLy8gSWYgd2UgdGhlIGluc3RhbmNlIGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGRyZW4sIHRoZW4gdGhlcmUgY2FuJ3QgYmVcbiAgICAgIC8vIGEgbmVzdGVkIHN1c3BlbnNlIGJvdW5kYXJ5IHdpdGhpbiBpdC4gU28gd2UgY2FuIHVzZSB0aGlzIGFzIGEgZmFzdFxuICAgICAgLy8gYmFpbG91dC4gTW9zdCBvZiB0aGUgdGltZSwgd2hlbiBwZW9wbGUgYWRkIG5vbi1SZWFjdCBjaGlsZHJlbiB0b1xuICAgICAgLy8gdGhlIHRyZWUsIGl0IGlzIHVzaW5nIGEgcmVmIHRvIGEgY2hpbGQtbGVzcyBET00gbm9kZS5cbiAgICAgIC8vIE5vcm1hbGx5IHdlJ2Qgb25seSBuZWVkIHRvIGNoZWNrIG9uZSBvZiB0aGUgZmliZXJzIGJlY2F1c2UgaWYgaXRcbiAgICAgIC8vIGhhcyBldmVyIGdvbmUgZnJvbSBoYXZpbmcgY2hpbGRyZW4gdG8gZGVsZXRpbmcgdGhlbSBvciB2aWNlIHZlcnNhXG4gICAgICAvLyBpdCB3b3VsZCBoYXZlIGRlbGV0ZWQgdGhlIGRlaHlkcmF0ZWQgYm91bmRhcnkgbmVzdGVkIGluc2lkZSBhbHJlYWR5LlxuICAgICAgLy8gSG93ZXZlciwgc2luY2UgdGhlIEhvc3RSb290IHN0YXJ0cyBvdXQgd2l0aCBhbiBhbHRlcm5hdGUgaXQgbWlnaHRcbiAgICAgIC8vIGhhdmUgb25lIG9uIHRoZSBhbHRlcm5hdGUgc28gd2UgbmVlZCB0byBjaGVjayBpbiBjYXNlIHRoaXMgd2FzIGFcbiAgICAgIC8vIHJvb3QuXG4gICAgICB2YXIgYWx0ZXJuYXRlID0gdGFyZ2V0SW5zdC5hbHRlcm5hdGU7XG5cbiAgICAgIGlmICh0YXJnZXRJbnN0LmNoaWxkICE9PSBudWxsIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIG5vZGUgdGhhdCBza2lwcGVkIHBhc3QgaXNcbiAgICAgICAgLy8gbmVzdGVkIHdpdGhpbiBhIGRlaHlkcmF0ZWQgYm91bmRhcnkgYW5kIGlmIHNvLCB3aGljaCBvbmUuXG4gICAgICAgIHZhciBzdXNwZW5zZUluc3RhbmNlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXROb2RlKTtcblxuICAgICAgICB3aGlsZSAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIGZvdW5kIGEgc3VzcGVuc2UgaW5zdGFuY2UuIFRoYXQgbWVhbnMgdGhhdCB3ZSBoYXZlbid0XG4gICAgICAgICAgLy8gaHlkcmF0ZWQgaXQgeWV0LiBFdmVuIHRob3VnaCB3ZSBsZWF2ZSB0aGUgY29tbWVudHMgaW4gdGhlXG4gICAgICAgICAgLy8gRE9NIGFmdGVyIGh5ZHJhdGluZywgYW5kIHRoZXJlIGFyZSBib3VuZGFyaWVzIGluIHRoZSBET01cbiAgICAgICAgICAvLyB0aGF0IGNvdWxkIGFscmVhZHkgYmUgaHlkcmF0ZWQsIHdlIHdvdWxkbid0IGhhdmUgZm91bmQgdGhlbVxuICAgICAgICAgIC8vIHRocm91Z2ggdGhpcyBwYXNzIHNpbmNlIGlmIHRoZSB0YXJnZXQgaXMgaHlkcmF0ZWQgaXQgd291bGRcbiAgICAgICAgICAvLyBoYXZlIGhhZCBhbiBpbnRlcm5hbEluc3RhbmNlS2V5IG9uIGl0LlxuICAgICAgICAgIC8vIExldCdzIGdldCB0aGUgZmliZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBTdXNwZW5zZUNvbXBvbmVudFxuICAgICAgICAgIC8vIGFzIHRoZSBkZWVwZXN0IGluc3RhbmNlLlxuICAgICAgICAgIHZhciB0YXJnZXRTdXNwZW5zZUluc3QgPSBzdXNwZW5zZUluc3RhbmNlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gICAgICAgICAgaWYgKHRhcmdldFN1c3BlbnNlSW5zdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFN1c3BlbnNlSW5zdDtcbiAgICAgICAgICB9IC8vIElmIHdlIGRvbid0IGZpbmQgYSBGaWJlciBvbiB0aGUgY29tbWVudCwgaXQgbWlnaHQgYmUgYmVjYXVzZVxuICAgICAgICAgIC8vIHdlIGhhdmVuJ3QgZ290dGVuIHRvIGh5ZHJhdGUgaXQgeWV0LiBUaGVyZSBtaWdodCBzdGlsbCBiZSBhXG4gICAgICAgICAgLy8gcGFyZW50IGJvdW5kYXJ5IHRoYXQgaGFzbid0IGFib3ZlIHRoaXMgb25lIHNvIHdlIG5lZWQgdG8gZmluZFxuICAgICAgICAgIC8vIHRoZSBvdXRlciBtb3N0IHRoYXQgaXMga25vd24uXG5cblxuICAgICAgICAgIHN1c3BlbnNlSW5zdGFuY2UgPSBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpOyAvLyBJZiB3ZSBkb24ndCBmaW5kIG9uZSwgdGhlbiB0aGF0IHNob3VsZCBtZWFuIHRoYXQgdGhlIHBhcmVudFxuICAgICAgICAgIC8vIGhvc3QgY29tcG9uZW50IGFsc28gaGFzbid0IGh5ZHJhdGVkIHlldC4gV2UgY2FuIHJldHVybiBpdFxuICAgICAgICAgIC8vIGJlbG93IHNpbmNlIGl0IHdpbGwgYmFpbCBvdXQgb24gdGhlIGlzTW91bnRlZCBjaGVjayBsYXRlci5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgICB9XG5cbiAgICB0YXJnZXROb2RlID0gcGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgRE9NIG5vZGUsIHJldHVybiB0aGUgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gKiBpbnN0YW5jZSwgb3IgbnVsbCBpZiB0aGUgbm9kZSB3YXMgbm90IHJlbmRlcmVkIGJ5IHRoaXMgUmVhY3QuXG4gKi9cblxuZnVuY3Rpb24gZ2V0SW5zdGFuY2VGcm9tTm9kZShub2RlKSB7XG4gIHZhciBpbnN0ID0gbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSB8fCBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldO1xuXG4gIGlmIChpbnN0KSB7XG4gICAgaWYgKGluc3QudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0VGV4dCB8fCBpbnN0LnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICByZXR1cm4gaW5zdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50LCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmdcbiAqIERPTSBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCkge1xuICBpZiAoaW5zdC50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgLy8gSW4gRmliZXIgdGhpcywgaXMganVzdCB0aGUgc3RhdGUgbm9kZSByaWdodCBub3cuIFdlIGFzc3VtZSBpdCB3aWxsIGJlXG4gICAgLy8gYSBob3N0IGNvbXBvbmVudCBvciBob3N0IHRleHQuXG4gICAgcmV0dXJuIGluc3Quc3RhdGVOb2RlO1xuICB9IC8vIFdpdGhvdXQgdGhpcyBmaXJzdCBpbnZhcmlhbnQsIHBhc3NpbmcgYSBub24tRE9NLWNvbXBvbmVudCB0cmlnZ2VycyB0aGUgbmV4dFxuICAvLyBpbnZhcmlhbnQgZm9yIGEgbWlzc2luZyBwYXJlbnQsIHdoaWNoIGlzIHN1cGVyIGNvbmZ1c2luZy5cblxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJnZXROb2RlRnJvbUluc3RhbmNlOiBJbnZhbGlkIGFyZ3VtZW50LlwiICk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGVbaW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUZpYmVyUHJvcHMobm9kZSwgcHJvcHMpIHtcbiAgbm9kZVtpbnRlcm5hbFByb3BzS2V5XSA9IHByb3BzO1xufVxuZnVuY3Rpb24gZ2V0RXZlbnRMaXN0ZW5lclNldChub2RlKSB7XG4gIHZhciBlbGVtZW50TGlzdGVuZXJTZXQgPSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV07XG5cbiAgaWYgKGVsZW1lbnRMaXN0ZW5lclNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZWxlbWVudExpc3RlbmVyU2V0ID0gbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldID0gbmV3IFNldCgpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRMaXN0ZW5lclNldDtcbn1cblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbHVlU3RhY2sgPSBbXTtcbnZhciBmaWJlclN0YWNrO1xuXG57XG4gIGZpYmVyU3RhY2sgPSBbXTtcbn1cblxudmFyIGluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNyZWF0ZUN1cnNvcihkZWZhdWx0VmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50OiBkZWZhdWx0VmFsdWVcbiAgfTtcbn1cblxuZnVuY3Rpb24gcG9wKGN1cnNvciwgZmliZXIpIHtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHtcbiAgICAgIGVycm9yKCdVbmV4cGVjdGVkIHBvcC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgaWYgKGZpYmVyICE9PSBmaWJlclN0YWNrW2luZGV4XSkge1xuICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgRmliZXIgcG9wcGVkLicpO1xuICAgIH1cbiAgfVxuXG4gIGN1cnNvci5jdXJyZW50ID0gdmFsdWVTdGFja1tpbmRleF07XG4gIHZhbHVlU3RhY2tbaW5kZXhdID0gbnVsbDtcblxuICB7XG4gICAgZmliZXJTdGFja1tpbmRleF0gPSBudWxsO1xuICB9XG5cbiAgaW5kZXgtLTtcbn1cblxuZnVuY3Rpb24gcHVzaChjdXJzb3IsIHZhbHVlLCBmaWJlcikge1xuICBpbmRleCsrO1xuICB2YWx1ZVN0YWNrW2luZGV4XSA9IGN1cnNvci5jdXJyZW50O1xuXG4gIHtcbiAgICBmaWJlclN0YWNrW2luZGV4XSA9IGZpYmVyO1xuICB9XG5cbiAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZTtcbn1cblxudmFyIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dDtcblxue1xuICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQgPSB7fTtcbn1cblxudmFyIGVtcHR5Q29udGV4dE9iamVjdCA9IHt9O1xuXG57XG4gIE9iamVjdC5mcmVlemUoZW1wdHlDb250ZXh0T2JqZWN0KTtcbn0gLy8gQSBjdXJzb3IgdG8gdGhlIGN1cnJlbnQgbWVyZ2VkIGNvbnRleHQgb2JqZWN0IG9uIHRoZSBzdGFjay5cblxuXG52YXIgY29udGV4dFN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGVtcHR5Q29udGV4dE9iamVjdCk7IC8vIEEgY3Vyc29yIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRleHQgaGFzIGNoYW5nZWQuXG5cbnZhciBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGZhbHNlKTsgLy8gS2VlcCB0cmFjayBvZiB0aGUgcHJldmlvdXMgY29udGV4dCBvYmplY3QgdGhhdCB3YXMgb24gdGhlIHN0YWNrLlxuLy8gV2UgdXNlIHRoaXMgdG8gZ2V0IGFjY2VzcyB0byB0aGUgcGFyZW50IGNvbnRleHQgYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5XG4vLyBwdXNoZWQgdGhlIG5leHQgY29udGV4dCBwcm92aWRlciwgYW5kIG5vdyBuZWVkIHRvIG1lcmdlIHRoZWlyIGNvbnRleHRzLlxuXG52YXIgcHJldmlvdXNDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG5mdW5jdGlvbiBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyKSB7XG4gIHtcbiAgICBpZiAoZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyICYmIGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIC8vIElmIHRoZSBmaWJlciBpcyBhIGNvbnRleHQgcHJvdmlkZXIgaXRzZWxmLCB3aGVuIHdlIHJlYWQgaXRzIGNvbnRleHRcbiAgICAgIC8vIHdlIG1heSBoYXZlIGFscmVhZHkgcHVzaGVkIGl0cyBvd24gY2hpbGQgY29udGV4dCBvbiB0aGUgc3RhY2suIEEgY29udGV4dFxuICAgICAgLy8gcHJvdmlkZXIgc2hvdWxkIG5vdCBcInNlZVwiIGl0cyBvd24gY2hpbGQgY29udGV4dC4gVGhlcmVmb3JlIHdlIHJlYWQgdGhlXG4gICAgICAvLyBwcmV2aW91cyAocGFyZW50KSBjb250ZXh0IGluc3RlYWQgZm9yIGEgY29udGV4dCBwcm92aWRlci5cbiAgICAgIHJldHVybiBwcmV2aW91c0NvbnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBtYXNrZWRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9IHVubWFza2VkQ29udGV4dDtcbiAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dCA9IG1hc2tlZENvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IHR5cGUuY29udGV4dFR5cGVzO1xuXG4gICAgaWYgKCFjb250ZXh0VHlwZXMpIHtcbiAgICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgfSAvLyBBdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyB1bm1hc2tlZCBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuICAgIC8vIEZhaWxpbmcgdG8gZG8gdGhpcyB3aWxsIHJlc3VsdCBpbiB1bm5lY2Vzc2FyeSBjYWxscyB0byBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLlxuICAgIC8vIFRoaXMgbWF5IHRyaWdnZXIgaW5maW5pdGUgbG9vcHMgaWYgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBjYWxscyBzZXRTdGF0ZS5cblxuXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPT09IHVubWFza2VkQ29udGV4dCkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gY29udGV4dFR5cGVzKSB7XG4gICAgICBjb250ZXh0W2tleV0gPSB1bm1hc2tlZENvbnRleHRba2V5XTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY29udGV4dFR5cGVzLCBjb250ZXh0LCAnY29udGV4dCcsIG5hbWUpO1xuICAgIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAgIC8vIENvbnRleHQgaXMgY3JlYXRlZCBiZWZvcmUgdGhlIGNsYXNzIGNvbXBvbmVudCBpcyBpbnN0YW50aWF0ZWQgc28gY2hlY2sgZm9yIGluc3RhbmNlLlxuXG5cbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNDb250ZXh0Q2hhbmdlZCgpIHtcbiAge1xuICAgIHJldHVybiBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIodHlwZSkge1xuICB7XG4gICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlcztcbiAgICByZXR1cm4gY2hpbGRDb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY2hpbGRDb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BDb250ZXh0KGZpYmVyKSB7XG4gIHtcbiAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZmliZXIpO1xuICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIpIHtcbiAge1xuICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIsIGNvbnRleHQsIGRpZENoYW5nZSkge1xuICB7XG4gICAgaWYgKCEoY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQgPT09IGVtcHR5Q29udGV4dE9iamVjdCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5leHBlY3RlZCBjb250ZXh0IGZvdW5kIG9uIHN0YWNrLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIGNvbnRleHQsIGZpYmVyKTtcbiAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIHR5cGUsIHBhcmVudENvbnRleHQpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSB0eXBlLmNoaWxkQ29udGV4dFR5cGVzOyAvLyBUT0RPIChidmF1Z2huKSBSZXBsYWNlIHRoaXMgYmVoYXZpb3Igd2l0aCBhbiBpbnZhcmlhbnQoKSBpbiB0aGUgZnV0dXJlLlxuICAgIC8vIEl0IGhhcyBvbmx5IGJlZW4gYWRkZWQgaW4gRmliZXIgdG8gbWF0Y2ggdGhlICh1bmludGVudGlvbmFsKSBiZWhhdmlvciBpbiBTdGFjay5cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICAgICAgaWYgKCF3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJyVzLmNoaWxkQ29udGV4dFR5cGVzIGlzIHNwZWNpZmllZCBidXQgdGhlcmUgaXMgbm8gZ2V0Q2hpbGRDb250ZXh0KCkgbWV0aG9kICcgKyAnb24gdGhlIGluc3RhbmNlLiBZb3UgY2FuIGVpdGhlciBkZWZpbmUgZ2V0Q2hpbGRDb250ZXh0KCkgb24gJXMgb3IgcmVtb3ZlICcgKyAnY2hpbGRDb250ZXh0VHlwZXMgZnJvbSBpdC4nLCBjb21wb25lbnROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyZW50Q29udGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRDb250ZXh0ID0gaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0KCk7XG5cbiAgICBmb3IgKHZhciBjb250ZXh0S2V5IGluIGNoaWxkQ29udGV4dCkge1xuICAgICAgaWYgKCEoY29udGV4dEtleSBpbiBjaGlsZENvbnRleHRUeXBlcykpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCAoZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bicpICsgXCIuZ2V0Q2hpbGRDb250ZXh0KCk6IGtleSBcXFwiXCIgKyBjb250ZXh0S2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIGluIGNoaWxkQ29udGV4dFR5cGVzLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY2hpbGRDb250ZXh0VHlwZXMsIGNoaWxkQ29udGV4dCwgJ2NoaWxkIGNvbnRleHQnLCBuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2Fzc2lnbih7fSwgcGFyZW50Q29udGV4dCwgY2hpbGRDb250ZXh0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7IC8vIFdlIHB1c2ggdGhlIGNvbnRleHQgYXMgZWFybHkgYXMgcG9zc2libGUgdG8gZW5zdXJlIHN0YWNrIGludGVncml0eS5cbiAgICAvLyBJZiB0aGUgaW5zdGFuY2UgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSB3aWxsIHB1c2ggbnVsbCBhdCBmaXJzdCxcbiAgICAvLyBhbmQgcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgbGF0ZXIgd2hlbiBpbnZhbGlkYXRpbmcgdGhlIGNvbnRleHQuXG5cbiAgICB2YXIgbWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgPSBpbnN0YW5jZSAmJiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCB8fCBlbXB0eUNvbnRleHRPYmplY3Q7IC8vIFJlbWVtYmVyIHRoZSBwYXJlbnQgY29udGV4dCBzbyB3ZSBjYW4gbWVyZ2Ugd2l0aCBpdCBsYXRlci5cbiAgICAvLyBJbmhlcml0IHRoZSBwYXJlbnQncyBkaWQtcGVyZm9ybS13b3JrIHZhbHVlIHRvIGF2b2lkIGluYWR2ZXJ0ZW50bHkgYmxvY2tpbmcgdXBkYXRlcy5cblxuICAgIHByZXZpb3VzQ29udGV4dCA9IGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBtZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgdHlwZSwgZGlkQ2hhbmdlKSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGhhdmUgYW4gaW5zdGFuY2UgYnkgdGhpcyBwb2ludC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaWRDaGFuZ2UpIHtcbiAgICAgIC8vIE1lcmdlIHBhcmVudCBhbmQgb3duIGNvbnRleHQuXG4gICAgICAvLyBTa2lwIHRoaXMgaWYgd2UncmUgbm90IHVwZGF0aW5nIGR1ZSB0byBzQ1UuXG4gICAgICAvLyBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyaWx5IHJlY29tcHV0aW5nIG1lbW9pemVkIHZhbHVlcy5cbiAgICAgIHZhciBtZXJnZWRDb250ZXh0ID0gcHJvY2Vzc0NoaWxkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdHlwZSwgcHJldmlvdXNDb250ZXh0KTtcbiAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gbWVyZ2VkQ29udGV4dDsgLy8gUmVwbGFjZSB0aGUgb2xkIChvciBlbXB0eSkgY29udGV4dCB3aXRoIHRoZSBuZXcgb25lLlxuICAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIHVud2luZCB0aGUgY29udGV4dCBpbiB0aGUgcmV2ZXJzZSBvcmRlci5cblxuICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTsgLy8gTm93IHB1c2ggdGhlIG5ldyBjb250ZXh0IGFuZCBtYXJrIHRoYXQgaXQgaGFzIGNoYW5nZWQuXG5cbiAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBtZXJnZWRDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQoZmliZXIpIHtcbiAge1xuICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgdXNlZCB3aXRoIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOyBub3Qgc3VyZSBpZiBpdFxuICAgIC8vIG1ha2VzIHNlbnNlIGVsc2V3aGVyZVxuICAgIGlmICghKGlzRmliZXJNb3VudGVkKGZpYmVyKSAmJiBmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBzdWJ0cmVlIHBhcmVudCB0byBiZSBhIG1vdW50ZWQgY2xhc3MgY29tcG9uZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIGRvIHtcbiAgICAgIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGUuY29udGV4dDtcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBDb21wb25lbnQgPSBub2RlLnR5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobm9kZSAhPT0gbnVsbCk7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkZvdW5kIHVuZXhwZWN0ZWQgZGV0YWNoZWQgc3VidHJlZSBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIExlZ2FjeVJvb3QgPSAwO1xudmFyIEJsb2NraW5nUm9vdCA9IDE7XG52YXIgQ29uY3VycmVudFJvb3QgPSAyO1xuXG52YXIgcmVuZGVyZXJJRCA9IG51bGw7XG52YXIgaW5qZWN0ZWRIb29rID0gbnVsbDtcbnZhciBoYXNMb2dnZWRFcnJvciA9IGZhbHNlO1xudmFyIGlzRGV2VG9vbHNQcmVzZW50ID0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gJ3VuZGVmaW5lZCc7XG5mdW5jdGlvbiBpbmplY3RJbnRlcm5hbHMoaW50ZXJuYWxzKSB7XG4gIGlmICh0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIE5vIERldlRvb2xzXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGhvb2sgPSBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbiAgaWYgKGhvb2suaXNEaXNhYmxlZCkge1xuICAgIC8vIFRoaXMgaXNuJ3QgYSByZWFsIHByb3BlcnR5IG9uIHRoZSBob29rLCBidXQgaXQgY2FuIGJlIHNldCB0byBvcHQgb3V0XG4gICAgLy8gb2YgRGV2VG9vbHMgaW50ZWdyYXRpb24gYW5kIGFzc29jaWF0ZWQgd2FybmluZ3MgYW5kIGxvZ3MuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zODc3XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWhvb2suc3VwcG9ydHNGaWJlcikge1xuICAgIHtcbiAgICAgIGVycm9yKCdUaGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUmVhY3QgRGV2VG9vbHMgaXMgdG9vIG9sZCBhbmQgd2lsbCBub3Qgd29yayAnICsgJ3dpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBSZWFjdC4gUGxlYXNlIHVwZGF0ZSBSZWFjdCBEZXZUb29scy4gJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMnKTtcbiAgICB9IC8vIERldlRvb2xzIGV4aXN0cywgZXZlbiB0aG91Z2ggaXQgZG9lc24ndCBzdXBwb3J0IEZpYmVyLlxuXG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmVuZGVyZXJJRCA9IGhvb2suaW5qZWN0KGludGVybmFscyk7IC8vIFdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGluamVjdGVkLCBzbyBub3cgaXQgaXMgc2FmZSB0byBzZXQgdXAgaG9va3MuXG5cbiAgICBpbmplY3RlZEhvb2sgPSBob29rO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBDYXRjaCBhbGwgZXJyb3JzIGJlY2F1c2UgaXQgaXMgdW5zYWZlIHRvIHRocm93IGR1cmluZyBpbml0aWFsaXphdGlvbi5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcy4nLCBlcnIpO1xuICAgIH1cbiAgfSAvLyBEZXZUb29scyBleGlzdHNcblxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gb25TY2hlZHVsZVJvb3Qocm9vdCwgY2hpbGRyZW4pIHtcbiAge1xuICAgIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vblNjaGVkdWxlRmliZXJSb290ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBjaGlsZHJlbik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCAhaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdChyb290LCBwcmlvcml0eUxldmVsKSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZGlkRXJyb3IgPSAocm9vdC5jdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IERpZENhcHR1cmU7XG5cbiAgICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBwcmlvcml0eUxldmVsLCBkaWRFcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgdW5kZWZpbmVkLCBkaWRFcnJvcik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG9uQ29tbWl0VW5tb3VudChmaWJlcikge1xuICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJVbm1vdW50KHJlbmRlcmVySUQsIGZpYmVyKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgU2NoZWR1bGVyX3J1bldpdGhQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2ssXG4gICAgU2NoZWR1bGVyX3Nob3VsZFlpZWxkID0gU2NoZWR1bGVyLnVuc3RhYmxlX3Nob3VsZFlpZWxkLFxuICAgIFNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgPSBTY2hlZHVsZXIudW5zdGFibGVfcmVxdWVzdFBhaW50LFxuICAgIFNjaGVkdWxlcl9ub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3csXG4gICAgU2NoZWR1bGVyX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gU2NoZWR1bGVyLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLFxuICAgIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX05vcm1hbFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9Mb3dQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Mb3dQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfSWRsZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0lkbGVQcmlvcml0eTtcblxue1xuICAvLyBQcm92aWRlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2Ugd2hlbiBwcm9kdWN0aW9uK3Byb2ZpbGluZyBidW5kbGUgb2YgZS5nLlxuICAvLyByZWFjdC1kb20gaXMgdXNlZCB3aXRoIHByb2R1Y3Rpb24gKG5vbi1wcm9maWxpbmcpIGJ1bmRsZSBvZlxuICAvLyBzY2hlZHVsZXIvdHJhY2luZ1xuICBpZiAoISh0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmICE9IG51bGwgJiYgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ICE9IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSXQgaXMgbm90IHN1cHBvcnRlZCB0byBydW4gdGhlIHByb2ZpbGluZyB2ZXJzaW9uIG9mIGEgcmVuZGVyZXIgKGZvciBleGFtcGxlLCBgcmVhY3QtZG9tL3Byb2ZpbGluZ2ApIHdpdGhvdXQgYWxzbyByZXBsYWNpbmcgdGhlIGBzY2hlZHVsZXIvdHJhY2luZ2AgbW9kdWxlIHdpdGggYHNjaGVkdWxlci90cmFjaW5nLXByb2ZpbGluZ2AuIFlvdXIgYnVuZGxlciBtaWdodCBoYXZlIGEgc2V0dGluZyBmb3IgYWxpYXNpbmcgYm90aCBtb2R1bGVzLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9wcm9maWxpbmdcIiApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZmFrZUNhbGxiYWNrTm9kZSA9IHt9OyAvLyBFeGNlcHQgZm9yIE5vUHJpb3JpdHksIHRoZXNlIGNvcnJlc3BvbmQgdG8gU2NoZWR1bGVyIHByaW9yaXRpZXMuIFdlIHVzZVxuLy8gYXNjZW5kaW5nIG51bWJlcnMgc28gd2UgY2FuIGNvbXBhcmUgdGhlbSBsaWtlIG51bWJlcnMuIFRoZXkgc3RhcnQgYXQgOTAgdG9cbi8vIGF2b2lkIGNsYXNoaW5nIHdpdGggU2NoZWR1bGVyJ3MgcHJpb3JpdGllcy5cblxudmFyIEltbWVkaWF0ZVByaW9yaXR5JDEgPSA5OTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSQyID0gOTg7XG52YXIgTm9ybWFsUHJpb3JpdHkkMSA9IDk3O1xudmFyIExvd1ByaW9yaXR5JDEgPSA5NjtcbnZhciBJZGxlUHJpb3JpdHkkMSA9IDk1OyAvLyBOb1ByaW9yaXR5IGlzIHRoZSBhYnNlbmNlIG9mIHByaW9yaXR5LiBBbHNvIFJlYWN0LW9ubHkuXG5cbnZhciBOb1ByaW9yaXR5JDEgPSA5MDtcbnZhciBzaG91bGRZaWVsZCA9IFNjaGVkdWxlcl9zaG91bGRZaWVsZDtcbnZhciByZXF1ZXN0UGFpbnQgPSAvLyBGYWxsIGJhY2sgZ3JhY2VmdWxseSBpZiB3ZSdyZSBydW5uaW5nIGFuIG9sZGVyIHZlcnNpb24gb2YgU2NoZWR1bGVyLlxuU2NoZWR1bGVyX3JlcXVlc3RQYWludCAhPT0gdW5kZWZpbmVkID8gU2NoZWR1bGVyX3JlcXVlc3RQYWludCA6IGZ1bmN0aW9uICgpIHt9O1xudmFyIHN5bmNRdWV1ZSA9IG51bGw7XG52YXIgaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgPSBudWxsO1xudmFyIGlzRmx1c2hpbmdTeW5jUXVldWUgPSBmYWxzZTtcbnZhciBpbml0aWFsVGltZU1zJDEgPSBTY2hlZHVsZXJfbm93JDEoKTsgLy8gSWYgdGhlIGluaXRpYWwgdGltZXN0YW1wIGlzIHJlYXNvbmFibHkgc21hbGwsIHVzZSBTY2hlZHVsZXIncyBgbm93YCBkaXJlY3RseS5cbi8vIFRoaXMgd2lsbCBiZSB0aGUgY2FzZSBmb3IgbW9kZXJuIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBgcGVyZm9ybWFuY2Uubm93YC4gSW5cbi8vIG9sZGVyIGJyb3dzZXJzLCBTY2hlZHVsZXIgZmFsbHMgYmFjayB0byBgRGF0ZS5ub3dgLCB3aGljaCByZXR1cm5zIGEgVW5peFxuLy8gdGltZXN0YW1wLiBJbiB0aGF0IGNhc2UsIHN1YnRyYWN0IHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdGltZSB0byBzaW11bGF0ZVxuLy8gdGhlIGJlaGF2aW9yIG9mIHBlcmZvcm1hbmNlLm5vdyBhbmQga2VlcCBvdXIgdGltZXMgc21hbGwgZW5vdWdoIHRvIGZpdFxuLy8gd2l0aGluIDMyIGJpdHMuXG4vLyBUT0RPOiBDb25zaWRlciBsaWZ0aW5nIHRoaXMgaW50byBTY2hlZHVsZXIuXG5cbnZhciBub3cgPSBpbml0aWFsVGltZU1zJDEgPCAxMDAwMCA/IFNjaGVkdWxlcl9ub3ckMSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFNjaGVkdWxlcl9ub3ckMSgpIC0gaW5pdGlhbFRpbWVNcyQxO1xufTtcbmZ1bmN0aW9uIGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkge1xuICBzd2l0Y2ggKFNjaGVkdWxlcl9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpKSB7XG4gICAgY2FzZSBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSW1tZWRpYXRlUHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDI7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb3JtYWxQcmlvcml0eSQxO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfTG93UHJpb3JpdHk6XG4gICAgICByZXR1cm4gTG93UHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX0lkbGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJZGxlUHJpb3JpdHkkMTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHByaW9yaXR5IGxldmVsLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWN0UHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KHJlYWN0UHJpb3JpdHlMZXZlbCkge1xuICBzd2l0Y2ggKHJlYWN0UHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHk7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDI6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5O1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eTtcblxuICAgIGNhc2UgTG93UHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfTG93UHJpb3JpdHk7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9JZGxlUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biBwcmlvcml0eSBsZXZlbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuXG5mdW5jdGlvbiBydW5XaXRoUHJpb3JpdHkkMShyZWFjdFByaW9yaXR5TGV2ZWwsIGZuKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKTtcbiAgcmV0dXJuIFNjaGVkdWxlcl9ydW5XaXRoUHJpb3JpdHkocHJpb3JpdHlMZXZlbCwgZm4pO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFjayhyZWFjdFByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKTtcbiAgcmV0dXJuIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlU3luY0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIC8vIFB1c2ggdGhpcyBjYWxsYmFjayBpbnRvIGFuIGludGVybmFsIHF1ZXVlLiBXZSdsbCBmbHVzaCB0aGVzZSBlaXRoZXIgaW5cbiAgLy8gdGhlIG5leHQgdGljaywgb3IgZWFybGllciBpZiBzb21ldGhpbmcgY2FsbHMgYGZsdXNoU3luY0NhbGxiYWNrUXVldWVgLlxuICBpZiAoc3luY1F1ZXVlID09PSBudWxsKSB7XG4gICAgc3luY1F1ZXVlID0gW2NhbGxiYWNrXTsgLy8gRmx1c2ggdGhlIHF1ZXVlIGluIHRoZSBuZXh0IHRpY2ssIGF0IHRoZSBlYXJsaWVzdC5cblxuICAgIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5LCBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUHVzaCBvbnRvIGV4aXN0aW5nIHF1ZXVlLiBEb24ndCBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2sgYmVjYXVzZVxuICAgIC8vIHdlIGFscmVhZHkgc2NoZWR1bGVkIG9uZSB3aGVuIHdlIGNyZWF0ZWQgdGhlIHF1ZXVlLlxuICAgIHN5bmNRdWV1ZS5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBmYWtlQ2FsbGJhY2tOb2RlO1xufVxuZnVuY3Rpb24gY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKSB7XG4gIGlmIChjYWxsYmFja05vZGUgIT09IGZha2VDYWxsYmFja05vZGUpIHtcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpIHtcbiAgaWYgKGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyIG5vZGUgPSBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZTtcbiAgICBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrKG5vZGUpO1xuICB9XG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwoKSB7XG4gIGlmICghaXNGbHVzaGluZ1N5bmNRdWV1ZSAmJiBzeW5jUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBQcmV2ZW50IHJlLWVudHJhbmN5LlxuICAgIGlzRmx1c2hpbmdTeW5jUXVldWUgPSB0cnVlO1xuICAgIHZhciBpID0gMDtcblxuICAgIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBfaXNTeW5jMiA9IHRydWU7XG4gICAgICAgIHZhciBfcXVldWUgPSBzeW5jUXVldWU7XG4gICAgICAgIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmb3IgKDsgaSA8IF9xdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gX3F1ZXVlW2ldO1xuXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2soX2lzU3luYzIpO1xuICAgICAgICAgICAgfSB3aGlsZSAoY2FsbGJhY2sgIT09IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN5bmNRdWV1ZSA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBzb21ldGhpbmcgdGhyb3dzLCBsZWF2ZSB0aGUgcmVtYWluaW5nIGNhbGxiYWNrcyBvbiB0aGUgcXVldWUuXG4gICAgICAgIGlmIChzeW5jUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICBzeW5jUXVldWUgPSBzeW5jUXVldWUuc2xpY2UoaSArIDEpO1xuICAgICAgICB9IC8vIFJlc3VtZSBmbHVzaGluZyBpbiB0aGUgbmV4dCB0aWNrXG5cblxuICAgICAgICBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHksIGZsdXNoU3luY0NhbGxiYWNrUXVldWUpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRmx1c2hpbmdTeW5jUXVldWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVE9ETzogdGhpcyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgZ2V0cyBpbXBvcnRlZCBkdXJpbmcgYnVpbGQuXG52YXIgUmVhY3RWZXJzaW9uID0gJzE3LjAuMic7XG5cbnZhciBOb01vZGUgPSAwO1xudmFyIFN0cmljdE1vZGUgPSAxOyAvLyBUT0RPOiBSZW1vdmUgQmxvY2tpbmdNb2RlIGFuZCBDb25jdXJyZW50TW9kZSBieSByZWFkaW5nIGZyb20gdGhlIHJvb3Rcbi8vIHRhZyBpbnN0ZWFkXG5cbnZhciBCbG9ja2luZ01vZGUgPSAyO1xudmFyIENvbmN1cnJlbnRNb2RlID0gNDtcbnZhciBQcm9maWxlTW9kZSA9IDg7XG52YXIgRGVidWdUcmFjaW5nTW9kZSA9IDE2O1xuXG52YXIgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztcbnZhciBOb1RyYW5zaXRpb24gPSAwO1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCkge1xuICByZXR1cm4gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcbn1cblxudmFyIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzID0ge1xuICByZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge30sXG4gIGZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fSxcbiAgcmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHt9LFxuICBmbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoKSB7fSxcbiAgZGlzY2FyZFBlbmRpbmdXYXJuaW5nczogZnVuY3Rpb24gKCkge31cbn07XG5cbntcbiAgdmFyIGZpbmRTdHJpY3RSb290ID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgdmFyIG1heWJlU3RyaWN0Um9vdCA9IG51bGw7XG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBtYXliZVN0cmljdFJvb3QgPSBub2RlO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heWJlU3RyaWN0Um9vdDtcbiAgfTtcblxuICB2YXIgc2V0VG9Tb3J0ZWRTdHJpbmcgPSBmdW5jdGlvbiAoc2V0KSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBhcnJheS5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyYXkuc29ydCgpLmpvaW4oJywgJyk7XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgdmFyIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMgPSBuZXcgU2V0KCk7XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7XG4gICAgLy8gRGVkdXAgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuICAgIGlmIChkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nICYmIC8vIERvbid0IHdhcm4gYWJvdXQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLlxuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2UgZG8gYW4gaW5pdGlhbCBwYXNzIHRvIGdhdGhlciBjb21wb25lbnQgbmFtZXNcbiAgICB2YXIgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIH0gLy8gRmluYWxseSwgd2UgZmx1c2ggYWxsIHRoZSB3YXJuaW5nc1xuICAgIC8vIFVOU0FGRV8gb25lcyBiZWZvcmUgdGhlIGRlcHJlY2F0ZWQgb25lcywgc2luY2UgdGhleSdsbCBiZSAnbG91ZGVyJ1xuXG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgc29ydGVkTmFtZXMpO1xuICAgIH1cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgJyArICdhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyBcIiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgXCIgKyAncmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gJyArICdzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGVyaXZlZC1zdGF0ZVxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzKTtcbiAgICB9XG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczIgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCAnICsgJ2FuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMyKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsTW91bnQgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsTW91bnQgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzMyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczQgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIHJlZmFjdG9yIHlvdXIgXCIgKyAnY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvICcgKyAnc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rlcml2ZWQtc3RhdGVcXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczQpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXM1ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbFVwZGF0ZSBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsVXBkYXRlIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXM1KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTsgLy8gVHJhY2tzIGNvbXBvbmVudHMgd2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC5cblxuICB2YXIgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dCA9IG5ldyBTZXQoKTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHtcbiAgICB2YXIgc3RyaWN0Um9vdCA9IGZpbmRTdHJpY3RSb290KGZpYmVyKTtcblxuICAgIGlmIChzdHJpY3RSb290ID09PSBudWxsKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdG8gZmluZCBhIFN0cmljdE1vZGUgY29tcG9uZW50IGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gJyArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZWR1cCBzdHJhdGVneTogV2FybiBvbmNlIHBlciBjb21wb25lbnQuXG5cblxuICAgIGlmIChkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB3YXJuaW5nc0ZvclJvb3QgPSBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZ2V0KHN0cmljdFJvb3QpO1xuXG4gICAgaWYgKGZpYmVyLnR5cGUuY29udGV4dFR5cGVzICE9IG51bGwgfHwgZmliZXIudHlwZS5jaGlsZENvbnRleHRUeXBlcyAhPSBudWxsIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh3YXJuaW5nc0ZvclJvb3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB3YXJuaW5nc0ZvclJvb3QgPSBbXTtcbiAgICAgICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLnNldChzdHJpY3RSb290LCB3YXJuaW5nc0ZvclJvb3QpO1xuICAgICAgfVxuXG4gICAgICB3YXJuaW5nc0ZvclJvb3QucHVzaChmaWJlcik7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyQXJyYXksIHN0cmljdFJvb3QpIHtcbiAgICAgIGlmIChmaWJlckFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBmaXJzdEZpYmVyID0gZmliZXJBcnJheVswXTtcbiAgICAgIHZhciB1bmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIGZpYmVyQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgdW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcodW5pcXVlTmFtZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmlyc3RGaWJlcik7XG5cbiAgICAgICAgZXJyb3IoJ0xlZ2FjeSBjb250ZXh0IEFQSSBoYXMgYmVlbiBkZXRlY3RlZCB3aXRoaW4gYSBzdHJpY3QtbW9kZSB0cmVlLicgKyAnXFxuXFxuVGhlIG9sZCBBUEkgd2lsbCBiZSBzdXBwb3J0ZWQgaW4gYWxsIDE2LnggcmVsZWFzZXMsIGJ1dCBhcHBsaWNhdGlvbnMgJyArICd1c2luZyBpdCBzaG91bGQgbWlncmF0ZSB0byB0aGUgbmV3IHZlcnNpb24uJyArICdcXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnICsgJ1xcblxcbkxlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9sZWdhY3ktY29udGV4dCcsIHNvcnRlZE5hbWVzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpO1xuICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgYmFzZVByb3BzKSB7XG4gIGlmIChDb21wb25lbnQgJiYgQ29tcG9uZW50LmRlZmF1bHRQcm9wcykge1xuICAgIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wcy4gVGFrZW4gZnJvbSBSZWFjdEVsZW1lbnRcbiAgICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBiYXNlUHJvcHMpO1xuXG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IENvbXBvbmVudC5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9wcztcbiAgfVxuXG4gIHJldHVybiBiYXNlUHJvcHM7XG59XG5cbi8vIE1heCAzMSBiaXQgaW50ZWdlci4gVGhlIG1heCBpbnRlZ2VyIHNpemUgaW4gVjggZm9yIDMyLWJpdCBzeXN0ZW1zLlxuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcbnZhciBNQVhfU0lHTkVEXzMxX0JJVF9JTlQgPSAxMDczNzQxODIzO1xuXG52YXIgdmFsdWVDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG52YXIgcmVuZGVyZXJTaWdpbDtcblxue1xuICAvLyBVc2UgdGhpcyB0byBkZXRlY3QgbXVsdGlwbGUgcmVuZGVyZXJzIHVzaW5nIHRoZSBzYW1lIGNvbnRleHRcbiAgcmVuZGVyZXJTaWdpbCA9IHt9O1xufVxuXG52YXIgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xudmFyIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG52YXIgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcbnZhciBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG5mdW5jdGlvbiByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSB7XG4gIC8vIFRoaXMgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSBSZWFjdCB5aWVsZHMgZXhlY3V0aW9uLCB0byBlbnN1cmUgYHJlYWRDb250ZXh0YFxuICAvLyBjYW5ub3QgYmUgY2FsbGVkIG91dHNpZGUgdGhlIHJlbmRlciBwaGFzZS5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xuXG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gdHJ1ZTtcbiAgfVxufVxuZnVuY3Rpb24gZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCkge1xuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBwdXNoUHJvdmlkZXIocHJvdmlkZXJGaWJlciwgbmV4dFZhbHVlKSB7XG4gIHZhciBjb250ZXh0ID0gcHJvdmlkZXJGaWJlci50eXBlLl9jb250ZXh0O1xuXG4gIHtcbiAgICBwdXNoKHZhbHVlQ3Vyc29yLCBjb250ZXh0Ll9jdXJyZW50VmFsdWUsIHByb3ZpZGVyRmliZXIpO1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IG5leHRWYWx1ZTtcblxuICAgIHtcbiAgICAgIGlmIChjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHVuZGVmaW5lZCAmJiBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IG51bGwgJiYgY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSByZW5kZXJlclNpZ2lsKSB7XG4gICAgICAgIGVycm9yKCdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIGNvbnRleHQgcHJvdmlkZXIuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLicpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSByZW5kZXJlclNpZ2lsO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9wUHJvdmlkZXIocHJvdmlkZXJGaWJlcikge1xuICB2YXIgY3VycmVudFZhbHVlID0gdmFsdWVDdXJzb3IuY3VycmVudDtcbiAgcG9wKHZhbHVlQ3Vyc29yLCBwcm92aWRlckZpYmVyKTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlckZpYmVyLnR5cGUuX2NvbnRleHQ7XG5cbiAge1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gY2FsY3VsYXRlQ2hhbmdlZEJpdHMoY29udGV4dCwgbmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gIGlmIChvYmplY3RJcyhvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgLy8gTm8gY2hhbmdlXG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNoYW5nZWRCaXRzID0gdHlwZW9mIGNvbnRleHQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSAnZnVuY3Rpb24nID8gY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHMob2xkVmFsdWUsIG5ld1ZhbHVlKSA6IE1BWF9TSUdORURfMzFfQklUX0lOVDtcblxuICAgIHtcbiAgICAgIGlmICgoY2hhbmdlZEJpdHMgJiBNQVhfU0lHTkVEXzMxX0JJVF9JTlQpICE9PSBjaGFuZ2VkQml0cykge1xuICAgICAgICBlcnJvcignY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IEV4cGVjdGVkIHRoZSByZXR1cm4gdmFsdWUgdG8gYmUgYSAnICsgJzMxLWJpdCBpbnRlZ2VyLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcycsIGNoYW5nZWRCaXRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlZEJpdHMgfCAwO1xuICB9XG59XG5mdW5jdGlvbiBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgocGFyZW50LCByZW5kZXJMYW5lcykge1xuICAvLyBVcGRhdGUgdGhlIGNoaWxkIGxhbmVzIG9mIGFsbCB0aGUgYW5jZXN0b3JzLCBpbmNsdWRpbmcgdGhlIGFsdGVybmF0ZXMuXG4gIHZhciBub2RlID0gcGFyZW50O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IG5vZGUuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKCFpc1N1YnNldE9mTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgIG5vZGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgIWlzU3Vic2V0T2ZMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTmVpdGhlciBhbHRlcm5hdGUgd2FzIHVwZGF0ZWQsIHdoaWNoIG1lYW5zIHRoZSByZXN0IG9mIHRoZVxuICAgICAgLy8gYW5jZXN0b3IgcGF0aCBhbHJlYWR5IGhhcyBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICB9XG59XG5mdW5jdGlvbiBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCBjaGFuZ2VkQml0cywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGZpYmVyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgaWYgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgZmliZXIucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIH1cblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICB2YXIgbmV4dEZpYmVyID0gdm9pZCAwOyAvLyBWaXNpdCB0aGlzIGZpYmVyLlxuXG4gICAgdmFyIGxpc3QgPSBmaWJlci5kZXBlbmRlbmNpZXM7XG5cbiAgICBpZiAobGlzdCAhPT0gbnVsbCkge1xuICAgICAgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgICB2YXIgZGVwZW5kZW5jeSA9IGxpc3QuZmlyc3RDb250ZXh0O1xuXG4gICAgICB3aGlsZSAoZGVwZW5kZW5jeSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgY29udGV4dCBtYXRjaGVzLlxuICAgICAgICBpZiAoZGVwZW5kZW5jeS5jb250ZXh0ID09PSBjb250ZXh0ICYmIChkZXBlbmRlbmN5Lm9ic2VydmVkQml0cyAmIGNoYW5nZWRCaXRzKSAhPT0gMCkge1xuICAgICAgICAgIC8vIE1hdGNoISBTY2hlZHVsZSBhbiB1cGRhdGUgb24gdGhpcyBmaWJlci5cbiAgICAgICAgICBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgLy8gU2NoZWR1bGUgYSBmb3JjZSB1cGRhdGUgb24gdGhlIHdvcmstaW4tcHJvZ3Jlc3MuXG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBwaWNrQXJiaXRyYXJ5TGFuZShyZW5kZXJMYW5lcykpO1xuICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlOyAvLyBUT0RPOiBCZWNhdXNlIHdlIGRvbid0IGhhdmUgYSB3b3JrLWluLXByb2dyZXNzLCB0aGlzIHdpbGwgYWRkIHRoZVxuICAgICAgICAgICAgLy8gdXBkYXRlIHRvIHRoZSBjdXJyZW50IGZpYmVyLCB0b28sIHdoaWNoIG1lYW5zIGl0IHdpbGwgcGVyc2lzdCBldmVuIGlmXG4gICAgICAgICAgICAvLyB0aGlzIHJlbmRlciBpcyB0aHJvd24gYXdheS4gU2luY2UgaXQncyBhIHJhY2UgY29uZGl0aW9uLCBub3Qgc3VyZSBpdCdzXG4gICAgICAgICAgICAvLyB3b3J0aCBmaXhpbmcuXG5cbiAgICAgICAgICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKGZpYmVyLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyTGFuZXMpOyAvLyBNYXJrIHRoZSB1cGRhdGVkIGxhbmVzIG9uIHRoZSBsaXN0LCB0b28uXG5cbiAgICAgICAgICBsaXN0LmxhbmVzID0gbWVyZ2VMYW5lcyhsaXN0LmxhbmVzLCByZW5kZXJMYW5lcyk7IC8vIFNpbmNlIHdlIGFscmVhZHkgZm91bmQgYSBtYXRjaCwgd2UgY2FuIHN0b3AgdHJhdmVyc2luZyB0aGVcbiAgICAgICAgICAvLyBkZXBlbmRlbmN5IGxpc3QuXG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmN5Lm5leHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENvbnRleHRQcm92aWRlcikge1xuICAgICAgLy8gRG9uJ3Qgc2NhbiBkZWVwZXIgaWYgdGhpcyBpcyBhIG1hdGNoaW5nIHByb3ZpZGVyXG4gICAgICBuZXh0RmliZXIgPSBmaWJlci50eXBlID09PSB3b3JrSW5Qcm9ncmVzcy50eXBlID8gbnVsbCA6IGZpYmVyLmNoaWxkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUcmF2ZXJzZSBkb3duLlxuICAgICAgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICBuZXh0RmliZXIucmV0dXJuID0gZmliZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGNoaWxkLiBUcmF2ZXJzZSB0byBuZXh0IHNpYmxpbmcuXG4gICAgICBuZXh0RmliZXIgPSBmaWJlcjtcblxuICAgICAgd2hpbGUgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dEZpYmVyID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIC8vIFdlJ3JlIGJhY2sgdG8gdGhlIHJvb3Qgb2YgdGhpcyBzdWJ0cmVlLiBFeGl0LlxuICAgICAgICAgIG5leHRGaWJlciA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2libGluZyA9IG5leHRGaWJlci5zaWJsaW5nO1xuXG4gICAgICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgc2libGluZyB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICAgICAgICBzaWJsaW5nLnJldHVybiA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgbmV4dEZpYmVyID0gc2libGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBObyBtb3JlIHNpYmxpbmdzLiBUcmF2ZXJzZSB1cC5cblxuXG4gICAgICAgIG5leHRGaWJlciA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmliZXIgPSBuZXh0RmliZXI7XG4gIH1cbn1cbmZ1bmN0aW9uIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xuICB2YXIgZGVwZW5kZW5jaWVzID0gd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzO1xuXG4gIGlmIChkZXBlbmRlbmNpZXMgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RDb250ZXh0ID0gZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dDtcblxuICAgIGlmIChmaXJzdENvbnRleHQgIT09IG51bGwpIHtcbiAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKGRlcGVuZGVuY2llcy5sYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgIC8vIENvbnRleHQgbGlzdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS4gTWFyayB0aGF0IHRoaXMgZmliZXIgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgICB9IC8vIFJlc2V0IHRoZSB3b3JrLWluLXByb2dyZXNzIGxpc3RcblxuXG4gICAgICBkZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICB7XG4gICAgLy8gVGhpcyB3YXJuaW5nIHdvdWxkIGZpcmUgaWYgeW91IHJlYWQgY29udGV4dCBpbnNpZGUgYSBIb29rIGxpa2UgdXNlTWVtby5cbiAgICAvLyBVbmxpa2UgdGhlIGNsYXNzIGNoZWNrIGJlbG93LCBpdCdzIG5vdCBlbmZvcmNlZCBpbiBwcm9kdWN0aW9uIGZvciBwZXJmLlxuICAgIGlmIChpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKSB7XG4gICAgICBlcnJvcignQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gJyArICdJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiAnICsgJ0luIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCAnICsgJ2luc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9PT0gY29udGV4dCkgOyBlbHNlIGlmIChvYnNlcnZlZEJpdHMgPT09IGZhbHNlIHx8IG9ic2VydmVkQml0cyA9PT0gMCkgOyBlbHNlIHtcbiAgICB2YXIgcmVzb2x2ZWRPYnNlcnZlZEJpdHM7IC8vIEF2b2lkIGRlb3B0aW5nIG9uIG9ic2VydmFibGUgYXJndW1lbnRzIG9yIGhldGVyb2dlbmVvdXMgdHlwZXMuXG5cbiAgICBpZiAodHlwZW9mIG9ic2VydmVkQml0cyAhPT0gJ251bWJlcicgfHwgb2JzZXJ2ZWRCaXRzID09PSBNQVhfU0lHTkVEXzMxX0JJVF9JTlQpIHtcbiAgICAgIC8vIE9ic2VydmUgYWxsIHVwZGF0ZXMuXG4gICAgICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBjb250ZXh0O1xuICAgICAgcmVzb2x2ZWRPYnNlcnZlZEJpdHMgPSBNQVhfU0lHTkVEXzMxX0JJVF9JTlQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmVkT2JzZXJ2ZWRCaXRzID0gb2JzZXJ2ZWRCaXRzO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0SXRlbSA9IHtcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICBvYnNlcnZlZEJpdHM6IHJlc29sdmVkT2JzZXJ2ZWRCaXRzLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG5cbiAgICBpZiAobGFzdENvbnRleHREZXBlbmRlbmN5ID09PSBudWxsKSB7XG4gICAgICBpZiAoIShjdXJyZW50bHlSZW5kZXJpbmdGaWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkNvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuIEluIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIEluIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCBpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgZGVwZW5kZW5jeSBmb3IgdGhpcyBjb21wb25lbnQuIENyZWF0ZSBhIG5ldyBsaXN0LlxuXG5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGNvbnRleHRJdGVtO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICBsYW5lczogTm9MYW5lcyxcbiAgICAgICAgZmlyc3RDb250ZXh0OiBjb250ZXh0SXRlbSxcbiAgICAgICAgcmVzcG9uZGVyczogbnVsbFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIGEgbmV3IGNvbnRleHQgaXRlbS5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGxhc3RDb250ZXh0RGVwZW5kZW5jeS5uZXh0ID0gY29udGV4dEl0ZW07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgO1xufVxuXG52YXIgVXBkYXRlU3RhdGUgPSAwO1xudmFyIFJlcGxhY2VTdGF0ZSA9IDE7XG52YXIgRm9yY2VVcGRhdGUgPSAyO1xudmFyIENhcHR1cmVVcGRhdGUgPSAzOyAvLyBHbG9iYWwgc3RhdGUgdGhhdCBpcyByZXNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGNhbGxpbmcgYHByb2Nlc3NVcGRhdGVRdWV1ZWAuXG4vLyBJdCBzaG91bGQgb25seSBiZSByZWFkIHJpZ2h0IGFmdGVyIGNhbGxpbmcgYHByb2Nlc3NVcGRhdGVRdWV1ZWAsIHZpYVxuLy8gYGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmdgLlxuXG52YXIgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcbnZhciBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlO1xudmFyIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZTtcblxue1xuICBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gZmFsc2U7XG4gIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVVcGRhdGVRdWV1ZShmaWJlcikge1xuICB2YXIgcXVldWUgPSB7XG4gICAgYmFzZVN0YXRlOiBmaWJlci5tZW1vaXplZFN0YXRlLFxuICAgIGZpcnN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICBsYXN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICBzaGFyZWQ6IHtcbiAgICAgIHBlbmRpbmc6IG51bGxcbiAgICB9LFxuICAgIGVmZmVjdHM6IG51bGxcbiAgfTtcbiAgZmliZXIudXBkYXRlUXVldWUgPSBxdWV1ZTtcbn1cbmZ1bmN0aW9uIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgLy8gQ2xvbmUgdGhlIHVwZGF0ZSBxdWV1ZSBmcm9tIGN1cnJlbnQuIFVubGVzcyBpdCdzIGFscmVhZHkgYSBjbG9uZS5cbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gIGlmIChxdWV1ZSA9PT0gY3VycmVudFF1ZXVlKSB7XG4gICAgdmFyIGNsb25lID0ge1xuICAgICAgYmFzZVN0YXRlOiBjdXJyZW50UXVldWUuYmFzZVN0YXRlLFxuICAgICAgZmlyc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlLFxuICAgICAgbGFzdEJhc2VVcGRhdGU6IGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZSxcbiAgICAgIHNoYXJlZDogY3VycmVudFF1ZXVlLnNoYXJlZCxcbiAgICAgIGVmZmVjdHM6IGN1cnJlbnRRdWV1ZS5lZmZlY3RzXG4gICAgfTtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGNsb25lO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSB7XG4gICAgZXZlbnRUaW1lOiBldmVudFRpbWUsXG4gICAgbGFuZTogbGFuZSxcbiAgICB0YWc6IFVwZGF0ZVN0YXRlLFxuICAgIHBheWxvYWQ6IG51bGwsXG4gICAgY2FsbGJhY2s6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9O1xuICByZXR1cm4gdXBkYXRlO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICh1cGRhdGVRdWV1ZSA9PT0gbnVsbCkge1xuICAgIC8vIE9ubHkgb2NjdXJzIGlmIHRoZSBmaWJlciBoYXMgYmVlbiB1bm1vdW50ZWQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNoYXJlZFF1ZXVlID0gdXBkYXRlUXVldWUuc2hhcmVkO1xuICB2YXIgcGVuZGluZyA9IHNoYXJlZFF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgdXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgcGVuZGluZy5uZXh0ID0gdXBkYXRlO1xuICB9XG5cbiAgc2hhcmVkUXVldWUucGVuZGluZyA9IHVwZGF0ZTtcblxuICB7XG4gICAgaWYgKGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9PT0gc2hhcmVkUXVldWUgJiYgIWRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUpIHtcbiAgICAgIGVycm9yKCdBbiB1cGRhdGUgKHNldFN0YXRlLCByZXBsYWNlU3RhdGUsIG9yIGZvcmNlVXBkYXRlKSB3YXMgc2NoZWR1bGVkICcgKyAnZnJvbSBpbnNpZGUgYW4gdXBkYXRlIGZ1bmN0aW9uLiBVcGRhdGUgZnVuY3Rpb25zIHNob3VsZCBiZSBwdXJlLCAnICsgJ3dpdGggemVybyBzaWRlLWVmZmVjdHMuIENvbnNpZGVyIHVzaW5nIGNvbXBvbmVudERpZFVwZGF0ZSBvciBhICcgKyAnY2FsbGJhY2suJyk7XG5cbiAgICAgIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBjYXB0dXJlZFVwZGF0ZSkge1xuICAvLyBDYXB0dXJlZCB1cGRhdGVzIGFyZSB1cGRhdGVzIHRoYXQgYXJlIHRocm93biBieSBhIGNoaWxkIGR1cmluZyB0aGUgcmVuZGVyXG4gIC8vIHBoYXNlLiBUaGV5IHNob3VsZCBiZSBkaXNjYXJkZWQgaWYgdGhlIHJlbmRlciBpcyBhYm9ydGVkLiBUaGVyZWZvcmUsXG4gIC8vIHdlIHNob3VsZCBvbmx5IHB1dCB0aGVtIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlLCBub3QgdGhlIGN1cnJlbnQgb25lLlxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTsgLy8gQ2hlY2sgaWYgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgaXMgYSBjbG9uZS5cblxuICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gICAgaWYgKHF1ZXVlID09PSBjdXJyZW50UXVldWUpIHtcbiAgICAgIC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIGlzIHRoZSBzYW1lIGFzIGN1cnJlbnQuIFRoaXMgaGFwcGVucyB3aGVuXG4gICAgICAvLyB3ZSBiYWlsIG91dCBvbiBhIHBhcmVudCBmaWJlciB0aGF0IHRoZW4gY2FwdHVyZXMgYW4gZXJyb3IgdGhyb3duIGJ5XG4gICAgICAvLyBhIGNoaWxkLiBTaW5jZSB3ZSB3YW50IHRvIGFwcGVuZCB0aGUgdXBkYXRlIG9ubHkgdG8gdGhlIHdvcmstaW5cbiAgICAgIC8vIC1wcm9ncmVzcyBxdWV1ZSwgd2UgbmVlZCB0byBjbG9uZSB0aGUgdXBkYXRlcy4gV2UgdXN1YWxseSBjbG9uZSBkdXJpbmdcbiAgICAgIC8vIHByb2Nlc3NVcGRhdGVRdWV1ZSwgYnV0IHRoYXQgZGlkbid0IGhhcHBlbiBpbiB0aGlzIGNhc2UgYmVjYXVzZSB3ZVxuICAgICAgLy8gc2tpcHBlZCBvdmVyIHRoZSBwYXJlbnQgd2hlbiB3ZSBiYWlsZWQgb3V0LlxuICAgICAgdmFyIG5ld0ZpcnN0ID0gbnVsbDtcbiAgICAgIHZhciBuZXdMYXN0ID0gbnVsbDtcbiAgICAgIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG5cbiAgICAgIGlmIChmaXJzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSB1cGRhdGVzIGFuZCBjbG9uZSB0aGVtLlxuICAgICAgICB2YXIgdXBkYXRlID0gZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZS5ldmVudFRpbWUsXG4gICAgICAgICAgICBsYW5lOiB1cGRhdGUubGFuZSxcbiAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKG5ld0xhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNsb25lO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMYXN0Lm5leHQgPSBjbG9uZTtcbiAgICAgICAgICAgIG5ld0xhc3QgPSBjbG9uZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsKTsgLy8gQXBwZW5kIHRoZSBjYXB0dXJlZCB1cGRhdGUgdGhlIGVuZCBvZiB0aGUgY2xvbmVkIGxpc3QuXG5cblxuICAgICAgICBpZiAobmV3TGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xhc3QubmV4dCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICAgIG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGJhc2UgdXBkYXRlcy5cbiAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlID0ge1xuICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnRRdWV1ZS5iYXNlU3RhdGUsXG4gICAgICAgIGZpcnN0QmFzZVVwZGF0ZTogbmV3Rmlyc3QsXG4gICAgICAgIGxhc3RCYXNlVXBkYXRlOiBuZXdMYXN0LFxuICAgICAgICBzaGFyZWQ6IGN1cnJlbnRRdWV1ZS5zaGFyZWQsXG4gICAgICAgIGVmZmVjdHM6IGN1cnJlbnRRdWV1ZS5lZmZlY3RzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBxdWV1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gLy8gQXBwZW5kIHRoZSB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cblxuXG4gIHZhciBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuXG4gIGlmIChsYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIGxhc3RCYXNlVXBkYXRlLm5leHQgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgfVxuXG4gIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIGdldFN0YXRlRnJvbVVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUsIHVwZGF0ZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMsIGluc3RhbmNlKSB7XG4gIHN3aXRjaCAodXBkYXRlLnRhZykge1xuICAgIGNhc2UgUmVwbGFjZVN0YXRlOlxuICAgICAge1xuICAgICAgICB2YXIgcGF5bG9hZCA9IHVwZGF0ZS5wYXlsb2FkO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIFVwZGF0ZXIgZnVuY3Rpb25cbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICAgICAgfSAvLyBTdGF0ZSBvYmplY3RcblxuXG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgfVxuXG4gICAgY2FzZSBDYXB0dXJlVXBkYXRlOlxuICAgICAge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuICAgICAgfVxuICAgIC8vIEludGVudGlvbmFsIGZhbGx0aHJvdWdoXG5cbiAgICBjYXNlIFVwZGF0ZVN0YXRlOlxuICAgICAge1xuICAgICAgICB2YXIgX3BheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcbiAgICAgICAgdmFyIHBhcnRpYWxTdGF0ZTtcblxuICAgICAgICBpZiAodHlwZW9mIF9wYXlsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gVXBkYXRlciBmdW5jdGlvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFBhcnRpYWwgc3RhdGUgb2JqZWN0XG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gTnVsbCBhbmQgdW5kZWZpbmVkIGFyZSB0cmVhdGVkIGFzIG5vLW9wcy5cbiAgICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgICB9IC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG5cblxuICAgICAgICByZXR1cm4gX2Fzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGb3JjZVVwZGF0ZTpcbiAgICAgIHtcbiAgICAgICAgaGFzRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZXZTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBwcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgaXMgYWx3YXlzIG5vbi1udWxsIG9uIGEgQ2xhc3NDb21wb25lbnQgb3IgSG9zdFJvb3RcbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG5cbiAge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZDtcbiAgfVxuXG4gIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG4gIHZhciBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlOyAvLyBDaGVjayBpZiB0aGVyZSBhcmUgcGVuZGluZyB1cGRhdGVzLiBJZiBzbywgdHJhbnNmZXIgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cblxuICB2YXIgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmdRdWV1ZSAhPT0gbnVsbCkge1xuICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDsgLy8gVGhlIHBlbmRpbmcgcXVldWUgaXMgY2lyY3VsYXIuIERpc2Nvbm5lY3QgdGhlIHBvaW50ZXIgYmV0d2VlbiBmaXJzdFxuICAgIC8vIGFuZCBsYXN0IHNvIHRoYXQgaXQncyBub24tY2lyY3VsYXIuXG5cbiAgICB2YXIgbGFzdFBlbmRpbmdVcGRhdGUgPSBwZW5kaW5nUXVldWU7XG4gICAgdmFyIGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7IC8vIEFwcGVuZCBwZW5kaW5nIHVwZGF0ZXMgdG8gYmFzZSBxdWV1ZVxuXG4gICAgaWYgKGxhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICBmaXJzdEJhc2VVcGRhdGUgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RCYXNlVXBkYXRlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgfVxuXG4gICAgbGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTsgLy8gSWYgdGhlcmUncyBhIGN1cnJlbnQgcXVldWUsIGFuZCBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBiYXNlIHF1ZXVlLCB0aGVuXG4gICAgLy8gd2UgbmVlZCB0byB0cmFuc2ZlciB0aGUgdXBkYXRlcyB0byB0aGF0IHF1ZXVlLCB0b28uIEJlY2F1c2UgdGhlIGJhc2VcbiAgICAvLyBxdWV1ZSBpcyBhIHNpbmdseS1saW5rZWQgbGlzdCB3aXRoIG5vIGN5Y2xlcywgd2UgY2FuIGFwcGVuZCB0byBib3RoXG4gICAgLy8gbGlzdHMgYW5kIHRha2UgYWR2YW50YWdlIG9mIHN0cnVjdHVyYWwgc2hhcmluZy5cbiAgICAvLyBUT0RPOiBQYXNzIGBjdXJyZW50YCBhcyBhcmd1bWVudFxuXG4gICAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBhbHdheXMgbm9uLW51bGwgb24gYSBDbGFzc0NvbXBvbmVudCBvciBIb3N0Um9vdFxuICAgICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gICAgICB2YXIgY3VycmVudExhc3RCYXNlVXBkYXRlID0gY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuXG4gICAgICBpZiAoY3VycmVudExhc3RCYXNlVXBkYXRlICE9PSBsYXN0QmFzZVVwZGF0ZSkge1xuICAgICAgICBpZiAoY3VycmVudExhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgY3VycmVudFF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50TGFzdEJhc2VVcGRhdGUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBUaGVzZSB2YWx1ZXMgbWF5IGNoYW5nZSBhcyB3ZSBwcm9jZXNzIHRoZSBxdWV1ZS5cblxuXG4gIGlmIChmaXJzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGxpc3Qgb2YgdXBkYXRlcyB0byBjb21wdXRlIHRoZSByZXN1bHQuXG4gICAgdmFyIG5ld1N0YXRlID0gcXVldWUuYmFzZVN0YXRlOyAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIGFjY3VtdWxhdGUgdGhpcy4gSW5zdGVhZCwgd2UgY2FuIHJlbW92ZSByZW5kZXJMYW5lc1xuICAgIC8vIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG4gICAgdmFyIG5ld0xhbmVzID0gTm9MYW5lcztcbiAgICB2YXIgbmV3QmFzZVN0YXRlID0gbnVsbDtcbiAgICB2YXIgbmV3Rmlyc3RCYXNlVXBkYXRlID0gbnVsbDtcbiAgICB2YXIgbmV3TGFzdEJhc2VVcGRhdGUgPSBudWxsO1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdEJhc2VVcGRhdGU7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHVwZGF0ZS5sYW5lO1xuICAgICAgdmFyIHVwZGF0ZUV2ZW50VGltZSA9IHVwZGF0ZS5ldmVudFRpbWU7XG5cbiAgICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lKSkge1xuICAgICAgICAvLyBQcmlvcml0eSBpcyBpbnN1ZmZpY2llbnQuIFNraXAgdGhpcyB1cGRhdGUuIElmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgICAgIC8vIHNraXBwZWQgdXBkYXRlLCB0aGUgcHJldmlvdXMgdXBkYXRlL3N0YXRlIGlzIHRoZSBuZXcgYmFzZVxuICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZUV2ZW50VGltZSxcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdGaXJzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZSA9IGNsb25lO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IGNsb25lO1xuICAgICAgICB9IC8vIFVwZGF0ZSB0aGUgcmVtYWluaW5nIHByaW9yaXR5IGluIHRoZSBxdWV1ZS5cblxuXG4gICAgICAgIG5ld0xhbmVzID0gbWVyZ2VMYW5lcyhuZXdMYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlRXZlbnRUaW1lLFxuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGUgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIHNvIHdlIG5ldmVyIHdhbnQgdW5jb21taXRcbiAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBuZXZlciBiZSBza2lwcGVkIGJ5IHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgIGxhbmU6IE5vTGFuZSxcbiAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgfSAvLyBQcm9jZXNzIHRoaXMgdXBkYXRlLlxuXG5cbiAgICAgICAgbmV3U3RhdGUgPSBnZXRTdGF0ZUZyb21VcGRhdGUod29ya0luUHJvZ3Jlc3MsIHF1ZXVlLCB1cGRhdGUsIG5ld1N0YXRlLCBwcm9wcywgaW5zdGFuY2UpO1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB1cGRhdGUuY2FsbGJhY2s7XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ2FsbGJhY2s7XG4gICAgICAgICAgdmFyIGVmZmVjdHMgPSBxdWV1ZS5lZmZlY3RzO1xuXG4gICAgICAgICAgaWYgKGVmZmVjdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXVlLmVmZmVjdHMgPSBbdXBkYXRlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWZmZWN0cy5wdXNoKHVwZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuXG4gICAgICBpZiAodXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nO1xuXG4gICAgICAgIGlmIChwZW5kaW5nUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBmcm9tIGluc2lkZSBhIHJlZHVjZXIuIEFkZCB0aGUgbmV3XG4gICAgICAgICAgLy8gcGVuZGluZyB1cGRhdGVzIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kIGtlZXAgcHJvY2Vzc2luZy5cbiAgICAgICAgICB2YXIgX2xhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlOyAvLyBJbnRlbnRpb25hbGx5IHVuc291bmQuIFBlbmRpbmcgdXBkYXRlcyBmb3JtIGEgY2lyY3VsYXIgbGlzdCwgYnV0IHdlXG4gICAgICAgICAgLy8gdW5yYXZlbCB0aGVtIHdoZW4gdHJhbnNmZXJyaW5nIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG5cbiAgICAgICAgICB2YXIgX2ZpcnN0UGVuZGluZ1VwZGF0ZSA9IF9sYXN0UGVuZGluZ1VwZGF0ZS5uZXh0O1xuICAgICAgICAgIF9sYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDtcbiAgICAgICAgICB1cGRhdGUgPSBfZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gX2xhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBxdWV1ZS5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gbmV3Rmlyc3RCYXNlVXBkYXRlO1xuICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGU7IC8vIFNldCB0aGUgcmVtYWluaW5nIGV4cGlyYXRpb24gdGltZSB0byBiZSB3aGF0ZXZlciBpcyByZW1haW5pbmcgaW4gdGhlIHF1ZXVlLlxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGZpbmUgYmVjYXVzZSB0aGUgb25seSB0d28gb3RoZXIgdGhpbmdzIHRoYXQgY29udHJpYnV0ZSB0b1xuICAgIC8vIGV4cGlyYXRpb24gdGltZSBhcmUgcHJvcHMgYW5kIGNvbnRleHQuIFdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiB0aGVcbiAgICAvLyBiZWdpbiBwaGFzZSBieSB0aGUgdGltZSB3ZSBzdGFydCBwcm9jZXNzaW5nIHRoZSBxdWV1ZSwgc28gd2UndmUgYWxyZWFkeVxuICAgIC8vIGRlYWx0IHdpdGggdGhlIHByb3BzLiBDb250ZXh0IGluIGNvbXBvbmVudHMgdGhhdCBzcGVjaWZ5XG4gICAgLy8gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHRyaWNreTsgYnV0IHdlJ2xsIGhhdmUgdG8gYWNjb3VudCBmb3JcbiAgICAvLyB0aGF0IHJlZ2FyZGxlc3MuXG5cbiAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKG5ld0xhbmVzKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG5ld0xhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHtcbiAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgY29udGV4dCkge1xuICBpZiAoISh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgYXMgY2FsbGJhY2suIEV4cGVjdGVkIGEgZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6IFwiICsgY2FsbGJhY2sgKTtcbiAgICB9XG4gIH1cblxuICBjYWxsYmFjay5jYWxsKGNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpIHtcbiAgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB7XG4gIHJldHVybiBoYXNGb3JjZVVwZGF0ZTtcbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgZmluaXNoZWRRdWV1ZSwgaW5zdGFuY2UpIHtcbiAgLy8gQ29tbWl0IHRoZSBlZmZlY3RzXG4gIHZhciBlZmZlY3RzID0gZmluaXNoZWRRdWV1ZS5lZmZlY3RzO1xuICBmaW5pc2hlZFF1ZXVlLmVmZmVjdHMgPSBudWxsO1xuXG4gIGlmIChlZmZlY3RzICE9PSBudWxsKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZmZlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWZmZWN0ID0gZWZmZWN0c1tpXTtcbiAgICAgIHZhciBjYWxsYmFjayA9IGVmZmVjdC5jYWxsYmFjaztcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIGVmZmVjdC5jYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZmFrZUludGVybmFsSW5zdGFuY2UgPSB7fTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsgLy8gUmVhY3QuQ29tcG9uZW50IHVzZXMgYSBzaGFyZWQgZnJvemVuIG9iamVjdCBieSBkZWZhdWx0LlxuLy8gV2UnbGwgdXNlIGl0IHRvIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBsZWdhY3kgcmVmcy5cblxudmFyIGVtcHR5UmVmc09iamVjdCA9IG5ldyBSZWFjdC5Db21wb25lbnQoKS5yZWZzO1xudmFyIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGU7XG52YXIgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlO1xudmFyIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGU7XG52YXIgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlO1xudmFyIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZTtcbnZhciB3YXJuT25JbnZhbGlkQ2FsbGJhY2s7XG52YXIgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGU7XG52YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXM7XG52YXIgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUgPSBuZXcgU2V0KCk7XG4gIHZhciBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBuZXcgU2V0KCk7XG5cbiAgd2Fybk9uSW52YWxpZENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgaWYgKGNhbGxiYWNrID09PSBudWxsIHx8IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBjYWxsZXJOYW1lICsgJ18nICsgY2FsbGJhY2s7XG5cbiAgICBpZiAoIWRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5oYXMoa2V5KSkge1xuICAgICAgZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmFkZChrZXkpO1xuXG4gICAgICBlcnJvcignJXMoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH07XG5cbiAgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gZnVuY3Rpb24gKHR5cGUsIHBhcnRpYWxTdGF0ZSkge1xuICAgIGlmIChwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCk6IEEgdmFsaWQgc3RhdGUgb2JqZWN0IChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkLiAnICsgJ1lvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07IC8vIFRoaXMgaXMgc28gZ3Jvc3MgYnV0IGl0J3MgYXQgbGVhc3Qgbm9uLWNyaXRpY2FsIGFuZCBjYW4gYmUgcmVtb3ZlZCBpZlxuICAvLyBpdCBjYXVzZXMgcHJvYmxlbXMuIFRoaXMgaXMgbWVhbnQgdG8gZ2l2ZSBhIG5pY2VyIGVycm9yIG1lc3NhZ2UgZm9yXG4gIC8vIFJlYWN0RE9NMTUudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocmVhY3RET00xNkNvbXBvbmVudCxcbiAgLy8gLi4uKSkgd2hpY2ggb3RoZXJ3aXNlIHRocm93cyBhIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGEgZnVuY3Rpb25cIlxuICAvLyBleGNlcHRpb24uXG5cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmFrZUludGVybmFsSW5zdGFuY2UsICdfcHJvY2Vzc0NoaWxkQ29udGV4dCcsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGF2YWlsYWJsZSBpbiBSZWFjdCAxNisuIFRoaXMgbGlrZWx5IG1lYW5zIHlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBhbmQgYXJlIGF0dGVtcHRpbmcgdG8gbmVzdCBhIFJlYWN0IDE1IHRyZWUgaW5zaWRlIGEgUmVhY3QgMTYgdHJlZSB1c2luZyB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciwgd2hpY2ggaXNuJ3Qgc3VwcG9ydGVkLiBUcnkgdG8gbWFrZSBzdXJlIHlvdSBoYXZlIG9ubHkgb25lIGNvcHkgb2YgUmVhY3QgKGFuZCBpZGVhbGx5LCBzd2l0Y2ggdG8gUmVhY3RET00uY3JlYXRlUG9ydGFsKS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmZyZWV6ZShmYWtlSW50ZXJuYWxJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5leHRQcm9wcykge1xuICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICB7XG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBwYXJ0aWFsU3RhdGUgPSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuXG4gIHtcbiAgICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUoY3RvciwgcGFydGlhbFN0YXRlKTtcbiAgfSAvLyBNZXJnZSB0aGUgcGFydGlhbCBzdGF0ZSBhbmQgdGhlIHByZXZpb3VzIHN0YXRlLlxuXG5cbiAgdmFyIG1lbW9pemVkU3RhdGUgPSBwYXJ0aWFsU3RhdGUgPT09IG51bGwgfHwgcGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQgPyBwcmV2U3RhdGUgOiBfYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBtZW1vaXplZFN0YXRlOyAvLyBPbmNlIHRoZSB1cGRhdGUgcXVldWUgaXMgZW1wdHksIHBlcnNpc3QgdGhlIGRlcml2ZWQgc3RhdGUgb250byB0aGVcbiAgLy8gYmFzZSBzdGF0ZS5cblxuICBpZiAod29ya0luUHJvZ3Jlc3MubGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBRdWV1ZSBpcyBhbHdheXMgbm9uLW51bGwgZm9yIGNsYXNzZXNcbiAgICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICB1cGRhdGVRdWV1ZS5iYXNlU3RhdGUgPSBtZW1vaXplZFN0YXRlO1xuICB9XG59XG52YXIgY2xhc3NDb21wb25lbnRVcGRhdGVyID0ge1xuICBpc01vdW50ZWQ6IGlzTW91bnRlZCxcbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH0sXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUudGFnID0gUmVwbGFjZVN0YXRlO1xuICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ3JlcGxhY2VTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfSxcbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAoaW5zdCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgICBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkVXBkYXRlID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gICAge1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9yKCclcy5zaG91bGRDb21wb25lbnRVcGRhdGUoKTogUmV0dXJuZWQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSAnICsgJ2Jvb2xlYW4gdmFsdWUuIE1ha2Ugc3VyZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZS4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2hvdWxkVXBkYXRlO1xuICB9XG5cbiAgaWYgKGN0b3IucHJvdG90eXBlICYmIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50KSB7XG4gICAgcmV0dXJuICFzaGFsbG93RXF1YWwob2xkUHJvcHMsIG5ld1Byb3BzKSB8fCAhc2hhbGxvd0VxdWFsKG9sZFN0YXRlLCBuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcbiAgICB2YXIgcmVuZGVyUHJlc2VudCA9IGluc3RhbmNlLnJlbmRlcjtcblxuICAgIGlmICghcmVuZGVyUHJlc2VudCkge1xuICAgICAgaWYgKGN0b3IucHJvdG90eXBlICYmIHR5cGVvZiBjdG9yLnByb3RvdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50ICcgKyAnaW5zdGFuY2U6IGRpZCB5b3UgYWNjaWRlbnRhbGx5IHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgY29uc3RydWN0b3I/JywgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArICdpbnN0YW5jZTogeW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBkZWZpbmUgYHJlbmRlcmAuJywgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmdldEluaXRpYWxTdGF0ZSAmJiAhaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkICYmICFpbnN0YW5jZS5zdGF0ZSkge1xuICAgICAgZXJyb3IoJ2dldEluaXRpYWxTdGF0ZSB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICsgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArICdEaWQgeW91IG1lYW4gdG8gZGVmaW5lIGEgc3RhdGUgcHJvcGVydHkgaW5zdGVhZD8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzICYmICFpbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgKyAnVXNlIGEgc3RhdGljIHByb3BlcnR5IHRvIGRlZmluZSBkZWZhdWx0UHJvcHMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcFR5cGVzKSB7XG4gICAgICBlcnJvcigncHJvcFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgcHJvcFR5cGVzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlKSB7XG4gICAgICBlcnJvcignY29udGV4dFR5cGUgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZSBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChpbnN0YW5jZS5jb250ZXh0VHlwZXMpIHtcbiAgICAgICAgZXJyb3IoJ2NvbnRleHRUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3Rvci5jb250ZXh0VHlwZSAmJiBjdG9yLmNvbnRleHRUeXBlcyAmJiAhZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMuaGFzKGN0b3IpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzLmFkZChjdG9yKTtcblxuICAgICAgICBlcnJvcignJXMgZGVjbGFyZXMgYm90aCBjb250ZXh0VHlwZXMgYW5kIGNvbnRleHRUeXBlIHN0YXRpYyBwcm9wZXJ0aWVzLiAnICsgJ1RoZSBsZWdhY3kgY29udGV4dFR5cGVzIHByb3BlcnR5IHdpbGwgYmUgaWdub3JlZC4nLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnRTaG91bGRVcGRhdGUoKS4gRGlkIHlvdSBtZWFuIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpPyAnICsgJ1RoZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyAnICsgJ2V4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCAmJiB0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkuICcgKyAnc2hvdWxkQ29tcG9uZW50VXBkYXRlIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIGV4dGVuZGluZyBSZWFjdC5QdXJlQ29tcG9uZW50LiAnICsgJ1BsZWFzZSBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB1c2VkLicsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0EgcHVyZSBjb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50RGlkVW5tb3VudCgpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0RpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsVW5tb3VudCgpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudERpZFJlY2VpdmVQcm9wcygpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0lmIHlvdSBtZWFudCB0byB1cGRhdGUgdGhlIHN0YXRlIGluIHJlc3BvbnNlIHRvIGNoYW5naW5nIHByb3BzLCAnICsgJ3VzZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCkuIElmIHlvdSBtZWFudCB0byBmZXRjaCBkYXRhIG9yICcgKyAncnVuIHNpZGUtZWZmZWN0cyBvciBtdXRhdGlvbnMgYWZ0ZXIgUmVhY3QgaGFzIHVwZGF0ZWQgdGhlIFVJLCB1c2UgY29tcG9uZW50RGlkVXBkYXRlKCkuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ1VOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBoYXNNdXRhdGVkUHJvcHMgPSBpbnN0YW5jZS5wcm9wcyAhPT0gbmV3UHJvcHM7XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IHVuZGVmaW5lZCAmJiBoYXNNdXRhdGVkUHJvcHMpIHtcbiAgICAgIGVycm9yKCclcyguLi4pOiBXaGVuIGNhbGxpbmcgc3VwZXIoKSBpbiBgJXNgLCBtYWtlIHN1cmUgdG8gcGFzcyAnICsgXCJ1cCB0aGUgc2FtZSBwcm9wcyB0aGF0IHlvdXIgY29tcG9uZW50J3MgY29uc3RydWN0b3Igd2FzIHBhc3NlZC5cIiwgbmFtZSwgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmRlZmF1bHRQcm9wcykge1xuICAgICAgZXJyb3IoJ1NldHRpbmcgZGVmYXVsdFByb3BzIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgaWdub3JlZC4nICsgJyBJbnN0ZWFkLCBkZWZpbmUgZGVmYXVsdFByb3BzIGFzIGEgc3RhdGljIHByb3BlcnR5IG9uICVzLicsIG5hbWUsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAhZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmhhcyhjdG9yKSkge1xuICAgICAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmFkZChjdG9yKTtcblxuICAgICAgZXJyb3IoJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIHNob3VsZCBiZSB1c2VkIHdpdGggY29tcG9uZW50RGlkVXBkYXRlKCkuICcgKyAnVGhpcyBjb21wb25lbnQgZGVmaW5lcyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIG9ubHkuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3Rvci5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhbiBpbnN0YW5jZSBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIF9zdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gICAgaWYgKF9zdGF0ZSAmJiAodHlwZW9mIF9zdGF0ZSAhPT0gJ29iamVjdCcgfHwgaXNBcnJheShfc3RhdGUpKSkge1xuICAgICAgZXJyb3IoJyVzLnN0YXRlOiBtdXN0IGJlIHNldCB0byBhbiBvYmplY3Qgb3IgbnVsbCcsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdG9yLmNoaWxkQ29udGV4dFR5cGVzICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3IoJyVzLmdldENoaWxkQ29udGV4dCgpOiBjaGlsZENvbnRleHRUeXBlcyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gJyArICd1c2UgZ2V0Q2hpbGRDb250ZXh0KCkuJywgbmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UudXBkYXRlciA9IGNsYXNzQ29tcG9uZW50VXBkYXRlcjtcbiAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIFRoZSBpbnN0YW5jZSBuZWVkcyBhY2Nlc3MgdG8gdGhlIGZpYmVyIHNvIHRoYXQgaXQgY2FuIHNjaGVkdWxlIHVwZGF0ZXNcblxuICBzZXQoaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzKTtcblxuICB7XG4gICAgaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IGZha2VJbnRlcm5hbEluc3RhbmNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHByb3BzKSB7XG4gIHZhciBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA9IGZhbHNlO1xuICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB2YXIgY29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcblxuICB7XG4gICAgaWYgKCdjb250ZXh0VHlwZScgaW4gY3Rvcikge1xuICAgICAgdmFyIGlzVmFsaWQgPSAvLyBBbGxvdyBudWxsIGZvciBjb25kaXRpb25hbCBkZWNsYXJhdGlvblxuICAgICAgY29udGV4dFR5cGUgPT09IG51bGwgfHwgY29udGV4dFR5cGUgIT09IHVuZGVmaW5lZCAmJiBjb250ZXh0VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFICYmIGNvbnRleHRUeXBlLl9jb250ZXh0ID09PSB1bmRlZmluZWQ7IC8vIE5vdCBhIDxDb250ZXh0LkNvbnN1bWVyPlxuXG4gICAgICBpZiAoIWlzVmFsaWQgJiYgIWRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5oYXMoY3RvcikpIHtcbiAgICAgICAgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmFkZChjdG9yKTtcbiAgICAgICAgdmFyIGFkZGVuZHVtID0gJyc7XG5cbiAgICAgICAgaWYgKGNvbnRleHRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIHVuZGVmaW5lZC4gJyArICdUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSB0eXBvIG9yIGJ5IG1peGluZyB1cCBuYW1lZCBhbmQgZGVmYXVsdCBpbXBvcnRzLiAnICsgJ1RoaXMgY2FuIGFsc28gaGFwcGVuIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3ksIHNvICcgKyAndHJ5IG1vdmluZyB0aGUgY3JlYXRlQ29udGV4dCgpIGNhbGwgdG8gYSBzZXBhcmF0ZSBmaWxlLic7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHRUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYSAnICsgdHlwZW9mIGNvbnRleHRUeXBlICsgJy4nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuUHJvdmlkZXIgaW5zdGVhZD8nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlLl9jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICBhZGRlbmR1bSA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyB0aGUgQ29udGV4dC5Db25zdW1lciBpbnN0ZWFkPyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY29udGV4dFR5cGUpLmpvaW4oJywgJykgKyAnfS4nO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3IoJyVzIGRlZmluZXMgYW4gaW52YWxpZCBjb250ZXh0VHlwZS4gJyArICdjb250ZXh0VHlwZSBzaG91bGQgcG9pbnQgdG8gdGhlIENvbnRleHQgb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZUNvbnRleHQoKS4lcycsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCcsIGFkZGVuZHVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICB2YXIgY29udGV4dFR5cGVzID0gY3Rvci5jb250ZXh0VHlwZXM7XG4gICAgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBjb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG4gICAgY29udGV4dCA9IGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID8gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSA6IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfSAvLyBJbnN0YW50aWF0ZSB0d2ljZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG5cblxuICB7XG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpO1xuICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGUgIT09IG51bGwgJiYgaW5zdGFuY2Uuc3RhdGUgIT09IHVuZGVmaW5lZCA/IGluc3RhbmNlLnN0YXRlIDogbnVsbDtcbiAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgc3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJ2Alc2AgdXNlcyBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBidXQgaXRzIGluaXRpYWwgc3RhdGUgaXMgJyArICclcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuIEluc3RlYWQsIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZSBieSAnICsgJ2Fzc2lnbmluZyBhbiBvYmplY3QgdG8gYHRoaXMuc3RhdGVgIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBgJXNgLiAnICsgJ1RoaXMgZW5zdXJlcyB0aGF0IGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGFyZ3VtZW50cyBoYXZlIGEgY29uc2lzdGVudCBzaGFwZS4nLCBjb21wb25lbnROYW1lLCBpbnN0YW5jZS5zdGF0ZSA9PT0gbnVsbCA/ICdudWxsJyA6ICd1bmRlZmluZWQnLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9IC8vIElmIG5ldyBjb21wb25lbnQgQVBJcyBhcmUgZGVmaW5lZCwgXCJ1bnNhZmVcIiBsaWZlY3ljbGVzIHdvbid0IGJlIGNhbGxlZC5cbiAgICAvLyBXYXJuIGFib3V0IHRoZXNlIGxpZmVjeWNsZXMgaWYgdGhleSBhcmUgcHJlc2VudC5cbiAgICAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgbWV0aG9kcyB0aG91Z2guXG5cblxuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgZm91bmRXaWxsTW91bnROYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxVcGRhdGVOYW1lID0gbnVsbDtcblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gJ2NvbXBvbmVudFdpbGxNb3VudCc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbE1vdW50TmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdjb21wb25lbnRXaWxsVXBkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsIHx8IGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgfHwgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICAgIHZhciBuZXdBcGlOYW1lID0gdHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nID8gJ2dldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpJyA6ICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpJztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuaGFzKF9jb21wb25lbnROYW1lKSkge1xuICAgICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuYWRkKF9jb21wb25lbnROYW1lKTtcblxuICAgICAgICAgIGVycm9yKCdVbnNhZmUgbGVnYWN5IGxpZmVjeWNsZXMgd2lsbCBub3QgYmUgY2FsbGVkIGZvciBjb21wb25lbnRzIHVzaW5nIG5ldyBjb21wb25lbnQgQVBJcy5cXG5cXG4nICsgJyVzIHVzZXMgJXMgYnV0IGFsc28gY29udGFpbnMgdGhlIGZvbGxvd2luZyBsZWdhY3kgbGlmZWN5Y2xlczolcyVzJXNcXG5cXG4nICsgJ1RoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcbicgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcycsIF9jb21wb25lbnROYW1lLCBuZXdBcGlOYW1lLCBmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxNb3VudE5hbWUgOiAnJywgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgOiAnJywgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFVwZGF0ZU5hbWUgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAvLyBSZWFjdEZpYmVyQ29udGV4dCB1c3VhbGx5IHVwZGF0ZXMgdGhpcyBjYWNoZSBidXQgY2FuJ3QgZm9yIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2VzLlxuXG5cbiAgaWYgKGlzTGVnYWN5Q29udGV4dENvbnN1bWVyKSB7XG4gICAgY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbE1vdW50KHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpO1xuICB9XG5cbiAgaWYgKG9sZFN0YXRlICE9PSBpbnN0YW5jZS5zdGF0ZSkge1xuICAgIHtcbiAgICAgIGVycm9yKCclcy5jb21wb25lbnRXaWxsTW91bnQoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvIHRoaXMuc3RhdGUgaXMgJyArIFwiZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIFwiICsgJ2NvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgfVxuXG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgfVxuXG4gIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gb2xkU3RhdGUpIHtcbiAgICB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byAnICsgXCJ0aGlzLnN0YXRlIGlzIGRlcHJlY2F0ZWQgKGV4Y2VwdCBpbnNpZGUgYSBjb21wb25lbnQncyBcIiArICdjb25zdHJ1Y3RvcikuIFVzZSBzZXRTdGF0ZSBpbnN0ZWFkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKGluc3RhbmNlLCBpbnN0YW5jZS5zdGF0ZSwgbnVsbCk7XG4gIH1cbn0gLy8gSW52b2tlcyB0aGUgbW91bnQgbGlmZS1jeWNsZXMgb24gYSBwcmV2aW91c2x5IG5ldmVyIHJlbmRlcmVkIGluc3RhbmNlLlxuXG5cbmZ1bmN0aW9uIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKTtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICBpbnN0YW5jZS5yZWZzID0gZW1wdHlSZWZzT2JqZWN0O1xuICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgaW5zdGFuY2UuY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBpbnN0YW5jZS5jb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHtcbiAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgPT09IG5ld1Byb3BzKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXM6IEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBhc3NpZ24gcHJvcHMgZGlyZWN0bHkgdG8gc3RhdGUgJyArIFwiYmVjYXVzZSB1cGRhdGVzIHRvIHByb3BzIHdvbid0IGJlIHJlZmxlY3RlZCBpbiBzdGF0ZS4gXCIgKyAnSW4gbW9zdCBjYXNlcywgaXQgaXMgYmV0dGVyIHRvIHVzZSBwcm9wcyBkaXJlY3RseS4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3Mod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH0gLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cblxuICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBjYWxsQ29tcG9uZW50V2lsbE1vdW50KHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7IC8vIElmIHdlIGhhZCBhZGRpdGlvbmFsIHN0YXRlIHVwZGF0ZXMgZHVyaW5nIHRoaXMgbGlmZS1jeWNsZSwgbGV0J3NcbiAgICAvLyBwcm9jZXNzIHRoZW0gbm93LlxuXG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgaW5zdGFuY2UucHJvcHMgPSBvbGRQcm9wcztcbiAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuICB2YXIgbmV4dENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgbmV4dENvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBuZXh0TGVnYWN5VW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgdmFyIGhhc05ld0xpZmVjeWNsZXMgPSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJzsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAvLyBldmVyIHRoZSBwcmV2aW91c2x5IGF0dGVtcHRlZCB0byByZW5kZXIgLSBub3QgdGhlIFwiY3VycmVudFwiLiBIb3dldmVyLFxuICAvLyBkdXJpbmcgY29tcG9uZW50RGlkVXBkYXRlIHdlIHBhc3MgdGhlIFwiY3VycmVudFwiIHByb3BzLlxuICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIG5ld1N0YXRlID0gaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMgJiYgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkpIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuICAgIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfSAvLyBJZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuZWQgZmFsc2UsIHdlIHNob3VsZCBzdGlsbCB1cGRhdGUgdGhlXG4gICAgLy8gbWVtb2l6ZWQgc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHdvcmsgY2FuIGJlIHJldXNlZC5cblxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5ld1Byb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfSAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGluc3RhbmNlJ3Mgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCBwb2ludGVycyBldmVuXG4gIC8vIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlLlxuXG5cbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgaW5zdGFuY2UuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufSAvLyBJbnZva2VzIHRoZSB1cGRhdGUgbGlmZS1jeWNsZXMgYW5kIHJldHVybnMgZmFsc2UgaWYgaXQgc2hvdWxkbid0IHJlcmVuZGVyLlxuXG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzSW5zdGFuY2UoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgdW5yZXNvbHZlZE9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MudHlwZSA9PT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPyB1bnJlc29sdmVkT2xkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIHVucmVzb2x2ZWRPbGRQcm9wcyk7XG4gIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gIHZhciB1bnJlc29sdmVkTmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBvbGRDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgbmV4dENvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5leHRVbm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIG5leHRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgbmV4dFVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIHZhciBoYXNOZXdMaWZlY3ljbGVzID0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbic7IC8vIE5vdGU6IER1cmluZyB0aGVzZSBsaWZlLWN5Y2xlcywgaW5zdGFuY2UucHJvcHMvaW5zdGFuY2Uuc3RhdGUgYXJlIHdoYXRcbiAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgLy8gZHVyaW5nIGNvbXBvbmVudERpZFVwZGF0ZSB3ZSBwYXNzIHRoZSBcImN1cnJlbnRcIiBwcm9wcy5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gdW5yZXNvbHZlZE5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIG5ld1N0YXRlID0gaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgPT09IHVucmVzb2x2ZWROZXdQcm9wcyAmJiBvbGRTdGF0ZSA9PT0gbmV3U3RhdGUgJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkgJiYgIWNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSkge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuICAgIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgfVxuICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHByb3BzL3N0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn1cblxudmFyIGRpZFdhcm5BYm91dE1hcHM7XG52YXIgZGlkV2FybkFib3V0R2VuZXJhdG9ycztcbnZhciBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xudmFyIG93bmVySGFzS2V5VXNlV2FybmluZztcbnZhciBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmc7XG5cbnZhciB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChjaGlsZCwgcmV0dXJuRmliZXIpIHt9O1xuXG57XG4gIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG4gIC8qKlxuICAgKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gICAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICAgKiB1cGRhdGVzLlxuICAgKi9cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nID0ge307XG5cbiAgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAoY2hpbGQsIHJldHVybkZpYmVyKSB7XG4gICAgaWYgKGNoaWxkID09PSBudWxsIHx8IHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNoaWxkLl9zdG9yZSB8fCBjaGlsZC5fc3RvcmUudmFsaWRhdGVkIHx8IGNoaWxkLmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEodHlwZW9mIGNoaWxkLl9zdG9yZSA9PT0gJ29iamVjdCcpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0IENvbXBvbmVudCBpbiB3YXJuRm9yTWlzc2luZ0tleSBzaG91bGQgaGF2ZSBhIF9zdG9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlICcgKyAnXCJrZXlcIiBwcm9wLiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgJyArICdtb3JlIGluZm9ybWF0aW9uLicpO1xuICB9O1xufVxuXG52YXIgaXNBcnJheSQxID0gQXJyYXkuaXNBcnJheTtcblxuZnVuY3Rpb24gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KSB7XG4gIHZhciBtaXhlZFJlZiA9IGVsZW1lbnQucmVmO1xuXG4gIGlmIChtaXhlZFJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgbWl4ZWRSZWYgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG1peGVkUmVmICE9PSAnb2JqZWN0Jykge1xuICAgIHtcbiAgICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgb25jZSB3ZSB0dXJuIG9uIHRoZSBzdHJpbmcgcmVmIHdhcm5pbmcgZm9yXG4gICAgICAvLyBldmVyeW9uZSwgYmVjYXVzZSB0aGUgc3RyaWN0IG1vZGUgY2FzZSB3aWxsIG5vIGxvbmdlciBiZSByZWxldmFudFxuICAgICAgaWYgKChyZXR1cm5GaWJlci5tb2RlICYgU3RyaWN0TW9kZSB8fCB3YXJuQWJvdXRTdHJpbmdSZWZzKSAmJiAvLyBXZSB3YXJuIGluIFJlYWN0RWxlbWVudC5qcyBpZiBvd25lciBhbmQgc2VsZiBhcmUgZXF1YWwgZm9yIHN0cmluZyByZWZzXG4gICAgICAvLyBiZWNhdXNlIHRoZXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvblxuICAgICAgLy8gdXNpbmcgYSBjb2RlbW9kLiBUaGVyZWZvcmUsIHdlIGRvbid0IGhhdmUgdG8gd2FybiBhYm91dCBzdHJpbmcgcmVmcyBhZ2Fpbi5cbiAgICAgICEoZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fc2VsZiAmJiBlbGVtZW50Ll9vd25lci5zdGF0ZU5vZGUgIT09IGVsZW1lbnQuX3NlbGYpKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlcnJvcignQSBzdHJpbmcgcmVmLCBcIiVzXCIsIGhhcyBiZWVuIGZvdW5kIHdpdGhpbiBhIHN0cmljdCBtb2RlIHRyZWUuICcgKyAnU3RyaW5nIHJlZnMgYXJlIGEgc291cmNlIG9mIHBvdGVudGlhbCBidWdzIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4gJyArICdXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBtaXhlZFJlZik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC5fb3duZXIpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIGluc3Q7XG5cbiAgICAgIGlmIChvd25lcikge1xuICAgICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuXG4gICAgICAgIGlmICghKG93bmVyRmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBoYXZlIHN0cmluZyByZWZzLiBXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgaW5zdGVhZC4gTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5zdCA9IG93bmVyRmliZXIuc3RhdGVOb2RlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWluc3QpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIk1pc3Npbmcgb3duZXIgZm9yIHN0cmluZyByZWYgXCIgKyBtaXhlZFJlZiArIFwiLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHN0cmluZ1JlZiA9ICcnICsgbWl4ZWRSZWY7IC8vIENoZWNrIGlmIHByZXZpb3VzIHN0cmluZyByZWYgbWF0Y2hlcyBuZXcgc3RyaW5nIHJlZlxuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgY3VycmVudC5yZWYgPT09ICdmdW5jdGlvbicgJiYgY3VycmVudC5yZWYuX3N0cmluZ1JlZiA9PT0gc3RyaW5nUmVmKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50LnJlZjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmVmcyA9IGluc3QucmVmcztcblxuICAgICAgICBpZiAocmVmcyA9PT0gZW1wdHlSZWZzT2JqZWN0KSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGxhenkgcG9vbGVkIGZyb3plbiBvYmplY3QsIHNvIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZS5cbiAgICAgICAgICByZWZzID0gaW5zdC5yZWZzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBkZWxldGUgcmVmc1tzdHJpbmdSZWZdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZnNbc3RyaW5nUmVmXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZWYuX3N0cmluZ1JlZiA9IHN0cmluZ1JlZjtcbiAgICAgIHJldHVybiByZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghKHR5cGVvZiBtaXhlZFJlZiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCByZWYgdG8gYmUgYSBmdW5jdGlvbiwgYSBzdHJpbmcsIGFuIG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVSZWYoKSwgb3IgbnVsbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZWxlbWVudC5fb3duZXIpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgcmVmIHdhcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcgKFwiICsgbWl4ZWRSZWYgKyBcIikgYnV0IG5vIG93bmVyIHdhcyBzZXQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgZnVuY3Rpb24gY29tcG9uZW50XFxuMi4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50J3MgcmVuZGVyIG1ldGhvZFxcbjMuIFlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWRcXG5TZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlZnMtbXVzdC1oYXZlLW93bmVyIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWl4ZWRSZWY7XG59XG5cbmZ1bmN0aW9uIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpIHtcbiAgaWYgKHJldHVybkZpYmVyLnR5cGUgIT09ICd0ZXh0YXJlYScpIHtcbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgKyAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0NoaWxkKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKG5ld0NoaWxkKS5qb2luKCcsICcpICsgJ30nIDogbmV3Q2hpbGQpICsgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKSB7XG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICBpZiAob3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdGdW5jdGlvbnMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLiBUaGlzIG1heSBoYXBwZW4gaWYgJyArICd5b3UgcmV0dXJuIGEgQ29tcG9uZW50IGluc3RlYWQgb2YgPENvbXBvbmVudCAvPiBmcm9tIHJlbmRlci4gJyArICdPciBtYXliZSB5b3UgbWVhbnQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHJldHVybiBpdC4nKTtcbiAgfVxufSAvLyBXZSBhdm9pZCBpbmxpbmluZyB0aGlzIHRvIGF2b2lkIHBvdGVudGlhbCBkZW9wdHMgZnJvbSB1c2luZyB0cnkvY2F0Y2guXG4vLyB0byBiZSBhYmxlIHRvIG9wdGltaXplIGVhY2ggcGF0aCBpbmRpdmlkdWFsbHkgYnkgYnJhbmNoaW5nIGVhcmx5LiBUaGlzIG5lZWRzXG4vLyBhIGNvbXBpbGVyIG9yIHdlIGNhbiBkbyBpdCBtYW51YWxseS4gSGVscGVycyB0aGF0IGRvbid0IG5lZWQgdGhpcyBicmFuY2hpbmdcbi8vIGxpdmUgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5cbmZ1bmN0aW9uIENoaWxkUmVjb25jaWxlcihzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gIGZ1bmN0aW9uIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKSB7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGVsZXRpb25zIGFyZSBhZGRlZCBpbiByZXZlcnNlZCBvcmRlciBzbyB3ZSBhZGQgaXQgdG8gdGhlIGZyb250LlxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSByZXR1cm4gZmliZXIncyBlZmZlY3QgbGlzdCBpcyBlbXB0eSBleGNlcHQgZm9yXG4gICAgLy8gZGVsZXRpb25zLCBzbyB3ZSBjYW4ganVzdCBhcHBlbmQgdGhlIGRlbGV0aW9uIHRvIHRoZSBsaXN0LiBUaGUgcmVtYWluaW5nXG4gICAgLy8gZWZmZWN0cyBhcmVuJ3QgYWRkZWQgdW50aWwgdGhlIGNvbXBsZXRlIHBoYXNlLiBPbmNlIHdlIGltcGxlbWVudFxuICAgIC8vIHJlc3VtaW5nLCB0aGlzIG1heSBub3QgYmUgdHJ1ZS5cblxuXG4gICAgdmFyIGxhc3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3QgIT09IG51bGwpIHtcbiAgICAgIGxhc3QubmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICB9XG5cbiAgICBjaGlsZFRvRGVsZXRlLm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGNoaWxkVG9EZWxldGUuZmxhZ3MgPSBEZWxldGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gVE9ETzogRm9yIHRoZSBzaG91bGRDbG9uZSBjYXNlLCB0aGlzIGNvdWxkIGJlIG1pY3JvLW9wdGltaXplZCBhIGJpdCBieVxuICAgIC8vIGFzc3VtaW5nIHRoYXQgYWZ0ZXIgdGhlIGZpcnN0IGNoaWxkIHdlJ3ZlIGFscmVhZHkgYWRkZWQgZXZlcnl0aGluZy5cblxuXG4gICAgdmFyIGNoaWxkVG9EZWxldGUgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZFRvRGVsZXRlICE9PSBudWxsKSB7XG4gICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGRUb0RlbGV0ZSk7XG4gICAgICBjaGlsZFRvRGVsZXRlID0gY2hpbGRUb0RlbGV0ZS5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgLy8gQWRkIHRoZSByZW1haW5pbmcgY2hpbGRyZW4gdG8gYSB0ZW1wb3JhcnkgbWFwIHNvIHRoYXQgd2UgY2FuIGZpbmQgdGhlbSBieVxuICAgIC8vIGtleXMgcXVpY2tseS4gSW1wbGljaXQgKG51bGwpIGtleXMgZ2V0IGFkZGVkIHRvIHRoaXMgc2V0IHdpdGggdGhlaXIgaW5kZXhcbiAgICAvLyBpbnN0ZWFkLlxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbmV3IE1hcCgpO1xuICAgIHZhciBleGlzdGluZ0NoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoZXhpc3RpbmdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGV4aXN0aW5nQ2hpbGQua2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQua2V5LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQuaW5kZXgsIGV4aXN0aW5nQ2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBleGlzdGluZ0NoaWxkID0gZXhpc3RpbmdDaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBleGlzdGluZ0NoaWxkcmVuO1xuICB9XG5cbiAgZnVuY3Rpb24gdXNlRmliZXIoZmliZXIsIHBlbmRpbmdQcm9wcykge1xuICAgIC8vIFdlIGN1cnJlbnRseSBzZXQgc2libGluZyB0byBudWxsIGFuZCBpbmRleCB0byAwIGhlcmUgYmVjYXVzZSBpdCBpcyBlYXN5XG4gICAgLy8gdG8gZm9yZ2V0IHRvIGRvIGJlZm9yZSByZXR1cm5pbmcgaXQuIEUuZy4gZm9yIHRoZSBzaW5nbGUgY2hpbGQgY2FzZS5cbiAgICB2YXIgY2xvbmUgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhmaWJlciwgcGVuZGluZ1Byb3BzKTtcbiAgICBjbG9uZS5pbmRleCA9IDA7XG4gICAgY2xvbmUuc2libGluZyA9IG51bGw7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJbmRleCkge1xuICAgIG5ld0ZpYmVyLmluZGV4ID0gbmV3SW5kZXg7XG5cbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50ID0gbmV3RmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciBvbGRJbmRleCA9IGN1cnJlbnQuaW5kZXg7XG5cbiAgICAgIGlmIChvbGRJbmRleCA8IGxhc3RQbGFjZWRJbmRleCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgbW92ZS5cbiAgICAgICAgbmV3RmliZXIuZmxhZ3MgPSBQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGl0ZW0gY2FuIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgIHJldHVybiBvbGRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyBhbiBpbnNlcnRpb24uXG4gICAgICBuZXdGaWJlci5mbGFncyA9IFBsYWNlbWVudDtcbiAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2VTaW5nbGVDaGlsZChuZXdGaWJlcikge1xuICAgIC8vIFRoaXMgaXMgc2ltcGxlciBmb3IgdGhlIHNpbmdsZSBjaGlsZCBjYXNlLiBXZSBvbmx5IG5lZWQgdG8gZG8gYVxuICAgIC8vIHBsYWNlbWVudCBmb3IgaW5zZXJ0aW5nIG5ldyBjaGlsZHJlbi5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgIG5ld0ZpYmVyLmZsYWdzID0gUGxhY2VtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBuZXdGaWJlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50LCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KHRleHRDb250ZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgdGV4dENvbnRlbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGN1cnJlbnQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnQudHlwZSB8fCAoIC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhjdXJyZW50LCBlbGVtZW50KSApKSB7XG4gICAgICAgIC8vIE1vdmUgYmFzZWQgb24gaW5kZXhcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgZWxlbWVudC5wcm9wcyk7XG4gICAgICAgIGV4aXN0aW5nLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBleGlzdGluZy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH1cbiAgICB9IC8vIEluc2VydFxuXG5cbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50LCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEhvc3RQb3J0YWwgfHwgY3VycmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyAhPT0gcG9ydGFsLmNvbnRhaW5lckluZm8gfHwgY3VycmVudC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gIT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGZyYWdtZW50LCBsYW5lcywga2V5KSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEZyYWdtZW50KSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBrZXkpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIGZyYWdtZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cy4gSWYgdGhlIHByZXZpb3VzIG5vZGUgaXMgaW1wbGljaXRseSBrZXllZFxuICAgICAgLy8gd2UgY2FuIGNvbnRpbnVlIHRvIHJlcGxhY2UgaXQgd2l0aG91dCBhYm9ydGluZyBldmVuIGlmIGl0IGlzIG5vdCBhIHRleHRcbiAgICAgIC8vIG5vZGUuXG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQoJycgKyBuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgICAgICAgX2NyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBudWxsLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICBfY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX2NyZWF0ZWQyID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgICAgICAgIF9jcmVhdGVkMi5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDI7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICB2YXIgX2NyZWF0ZWQzID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBudWxsKTtcblxuICAgICAgICBfY3JlYXRlZDMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIHJldHVybiBfY3JlYXRlZDM7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAvLyBVcGRhdGUgdGhlIGZpYmVyIGlmIHRoZSBrZXlzIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIG51bGwuXG4gICAgdmFyIGtleSA9IG9sZEZpYmVyICE9PSBudWxsID8gb2xkRmliZXIua2V5IDogbnVsbDtcblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAvLyB3ZSBjYW4gY29udGludWUgdG8gcmVwbGFjZSBpdCB3aXRob3V0IGFib3J0aW5nIGV2ZW4gaWYgaXQgaXMgbm90IGEgdGV4dFxuICAgICAgLy8gbm9kZS5cbiAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgb2xkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbiwgbGFuZXMsIGtleSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcywgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMsIHNvIHdlIG5laXRoZXIgaGF2ZSB0byBjaGVjayB0aGUgb2xkIG5vclxuICAgICAgLy8gbmV3IG5vZGUgZm9yIHRoZSBrZXkuIElmIGJvdGggYXJlIHRleHQgbm9kZXMsIHRoZXkgbWF0Y2guXG4gICAgICB2YXIgbWF0Y2hlZEZpYmVyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBtYXRjaGVkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyLCBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbiwgbGFuZXMsIG5ld0NoaWxkLmtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMiA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlcjIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMyA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIzLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFdhcm5zIGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlIG9yIG1pc3Npbmcga2V5XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcikge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnIHx8IGNoaWxkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBrbm93bktleXM7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgd2FybkZvck1pc3NpbmdLZXkoY2hpbGQsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoa25vd25LZXlzID09PSBudWxsKSB7XG4gICAgICAgICAgICBrbm93bktleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWtub3duS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IoJ0VuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtleSwgYCVzYC4gJyArICdLZXlzIHNob3VsZCBiZSB1bmlxdWUgc28gdGhhdCBjb21wb25lbnRzIG1haW50YWluIHRoZWlyIGlkZW50aXR5ICcgKyAnYWNyb3NzIHVwZGF0ZXMuIE5vbi11bmlxdWUga2V5cyBtYXkgY2F1c2UgY2hpbGRyZW4gdG8gYmUgJyArICdkdXBsaWNhdGVkIGFuZC9vciBvbWl0dGVkIFx1MjAxNCB0aGUgYmVoYXZpb3IgaXMgdW5zdXBwb3J0ZWQgYW5kICcgKyAnY291bGQgY2hhbmdlIGluIGEgZnV0dXJlIHZlcnNpb24uJywga2V5KTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBrbm93bktleXM7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW4sIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBhbGdvcml0aG0gY2FuJ3Qgb3B0aW1pemUgYnkgc2VhcmNoaW5nIGZyb20gYm90aCBlbmRzIHNpbmNlIHdlXG4gICAgLy8gZG9uJ3QgaGF2ZSBiYWNrcG9pbnRlcnMgb24gZmliZXJzLiBJJ20gdHJ5aW5nIHRvIHNlZSBob3cgZmFyIHdlIGNhbiBnZXRcbiAgICAvLyB3aXRoIHRoYXQgbW9kZWwuIElmIGl0IGVuZHMgdXAgbm90IGJlaW5nIHdvcnRoIHRoZSB0cmFkZW9mZnMsIHdlIGNhblxuICAgIC8vIGFkZCBpdCBsYXRlci5cbiAgICAvLyBFdmVuIHdpdGggYSB0d28gZW5kZWQgb3B0aW1pemF0aW9uLCB3ZSdkIHdhbnQgdG8gb3B0aW1pemUgZm9yIHRoZSBjYXNlXG4gICAgLy8gd2hlcmUgdGhlcmUgYXJlIGZldyBjaGFuZ2VzIGFuZCBicnV0ZSBmb3JjZSB0aGUgY29tcGFyaXNvbiBpbnN0ZWFkIG9mXG4gICAgLy8gZ29pbmcgZm9yIHRoZSBNYXAuIEl0J2QgbGlrZSB0byBleHBsb3JlIGhpdHRpbmcgdGhhdCBwYXRoIGZpcnN0IGluXG4gICAgLy8gZm9yd2FyZC1vbmx5IG1vZGUgYW5kIG9ubHkgZ28gZm9yIHRoZSBNYXAgb25jZSB3ZSBub3RpY2UgdGhhdCB3ZSBuZWVkXG4gICAgLy8gbG90cyBvZiBsb29rIGFoZWFkLiBUaGlzIGRvZXNuJ3QgaGFuZGxlIHJldmVyc2FsIGFzIHdlbGwgYXMgdHdvIGVuZGVkXG4gICAgLy8gc2VhcmNoIGJ1dCB0aGF0J3MgdW51c3VhbC4gQmVzaWRlcywgZm9yIHRoZSB0d28gZW5kZWQgb3B0aW1pemF0aW9uIHRvXG4gICAgLy8gd29yayBvbiBJdGVyYWJsZXMsIHdlJ2QgbmVlZCB0byBjb3B5IHRoZSB3aG9sZSBzZXQuXG4gICAgLy8gSW4gdGhpcyBmaXJzdCBpdGVyYXRpb24sIHdlJ2xsIGp1c3QgbGl2ZSB3aXRoIGhpdHRpbmcgdGhlIGJhZCBjYXNlXG4gICAgLy8gKGFkZGluZyBldmVyeXRoaW5nIHRvIGEgTWFwKSBpbiBmb3IgZXZlcnkgaW5zZXJ0L21vdmUuXG4gICAgLy8gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGFsc28gdXBkYXRlIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoKSB3aGljaFxuICAgIC8vIHVzZXMgdGhlIHNhbWUgYWxnb3JpdGhtLlxuICAgIHtcbiAgICAgIC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgdmFyIGtub3duS2V5cyA9IG51bGw7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbmV3Q2hpbGRyZW5baV07XG4gICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICBvbGRGaWJlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAobmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAvLyBhIGJldHRlciB3YXkgdG8gY29tbXVuaWNhdGUgd2hldGhlciB0aGlzIHdhcyBhIG1pc3Mgb3IgbnVsbCxcbiAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBzbG90LCBidXQgd2UgZGlkbid0IHJldXNlIHRoZSBleGlzdGluZyBmaWJlciwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgIC8vIGZvciBlYWNoIG51bGwgdmFsdWUuIEhvd2V2ZXIsIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBjYWxsIHVwZGF0ZVNsb3RcbiAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuXG4gICAgaWYgKG5ld0lkeCA9PT0gbmV3Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChfbmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyMiA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAoX25ld0ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXIyLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjIua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyMi5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMiwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW5JdGVyYWJsZSwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkoKSxcbiAgICAvLyBidXQgdXNpbmcgdGhlIGl0ZXJhdG9yIGluc3RlYWQuXG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKCEodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkFuIG9iamVjdCBpcyBub3QgYW4gaXRlcmFibGUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHJlbmRlcmluZyBHZW5lcmF0b3JzIGJlY2F1c2UgaXQncyBhIG11dGF0aW9uLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI5OTVcbiAgICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IGtub3cgYWJvdXQgdG9TdHJpbmdUYWdcbiAgICAgIG5ld0NoaWxkcmVuSXRlcmFibGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0dlbmVyYXRvcicpIHtcbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZW5lcmF0b3JzKSB7XG4gICAgICAgICAgZXJyb3IoJ1VzaW5nIEdlbmVyYXRvcnMgYXMgY2hpbGRyZW4gaXMgdW5zdXBwb3J0ZWQgYW5kIHdpbGwgbGlrZWx5IHlpZWxkICcgKyAndW5leHBlY3RlZCByZXN1bHRzIGJlY2F1c2UgZW51bWVyYXRpbmcgYSBnZW5lcmF0b3IgbXV0YXRlcyBpdC4gJyArICdZb3UgbWF5IGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgd2l0aCBgQXJyYXkuZnJvbSgpYCBvciB0aGUgJyArICdgWy4uLnNwcmVhZF1gIG9wZXJhdG9yIGJlZm9yZSByZW5kZXJpbmcuIEtlZXAgaW4gbWluZCAnICsgJ3lvdSBtaWdodCBuZWVkIHRvIHBvbHlmaWxsIHRoZXNlIGZlYXR1cmVzIGZvciBvbGRlciBicm93c2Vycy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSB0cnVlO1xuICAgICAgfSAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cblxuXG4gICAgICBpZiAobmV3Q2hpbGRyZW5JdGVyYWJsZS5lbnRyaWVzID09PSBpdGVyYXRvckZuKSB7XG4gICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgIGVycm9yKCdVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnVXNlIGFuIGFycmF5IG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgfSAvLyBGaXJzdCwgdmFsaWRhdGUga2V5cy5cbiAgICAgIC8vIFdlJ2xsIGdldCBhIGRpZmZlcmVudCBpdGVyYXRvciBsYXRlciBmb3IgdGhlIG1haW4gcGFzcy5cblxuXG4gICAgICB2YXIgX25ld0NoaWxkcmVuID0gaXRlcmF0b3JGbi5jYWxsKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgICBpZiAoX25ld0NoaWxkcmVuKSB7XG4gICAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICAgIHZhciBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICAgICAgZm9yICg7ICFfc3RlcC5kb25lOyBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgY2hpbGQgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBuZXdDaGlsZHJlbiA9IGl0ZXJhdG9yRm4uY2FsbChuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgIGlmICghKG5ld0NoaWxkcmVuICE9IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkFuIGl0ZXJhYmxlIG9iamVjdCBwcm92aWRlZCBubyBpdGVyYXRvci5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG4gICAgdmFyIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgIGlmIChvbGRGaWJlci5pbmRleCA+IG5ld0lkeCkge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlcjtcbiAgICAgICAgb2xkRmliZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZztcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgYnJlYWtzIG9uIGVtcHR5IHNsb3RzIGxpa2UgbnVsbCBjaGlsZHJlbi4gVGhhdCdzXG4gICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgIC8vIGJvb2xlYW4sIHVuZGVmaW5lZCwgZXRjLlxuICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICBpZiAob2xkRmliZXIgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgc2xvdCwgYnV0IHdlIGRpZG4ndCByZXVzZSB0aGUgZXhpc3RpbmcgZmliZXIsIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGNoaWxkLlxuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IERlZmVyIHNpYmxpbmdzIGlmIHdlJ3JlIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXggZm9yIHRoaXMgc2xvdC5cbiAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgIC8vIHdpdGggdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cblxuICAgIGlmIChzdGVwLmRvbmUpIHtcbiAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbmV3IGNoaWxkcmVuLiBXZSBjYW4gZGVsZXRlIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH1cblxuICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAvLyBzaW5jZSB0aGUgcmVzdCB3aWxsIGFsbCBiZSBpbnNlcnRpb25zLlxuICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIzID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgICBpZiAoX25ld0ZpYmVyMyA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIzLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMztcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgdmFyIF9uZXdGaWJlcjQgPSB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgaWYgKF9uZXdGaWJlcjQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICBpZiAoX25ld0ZpYmVyNC5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuZXcgZmliZXIgaXMgYSB3b3JrIGluIHByb2dyZXNzLCBidXQgaWYgdGhlcmUgZXhpc3RzIGFcbiAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgIC8vIGxpc3QuXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShfbmV3RmliZXI0LmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IF9uZXdGaWJlcjQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjQsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjQ7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyNDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgZXhpc3RpbmdDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGtleXMgb24gdGV4dCBub2RlcyBzaW5jZSB3ZSBkb24ndCBoYXZlIGFcbiAgICAvLyB3YXkgdG8gZGVmaW5lIHRoZW0uXG4gICAgaWYgKGN1cnJlbnRGaXJzdENoaWxkICE9PSBudWxsICYmIGN1cnJlbnRGaXJzdENoaWxkLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBub2RlIHNvIGxldCdzIGp1c3QgdXBkYXRlIGl0IGFuZCBkZWxldGVcbiAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudEZpcnN0Q2hpbGQsIHRleHRDb250ZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH0gLy8gVGhlIGV4aXN0aW5nIGZpcnN0IGNoaWxkIGlzIG5vdCBhIHRleHQgbm9kZSBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmVcbiAgICAvLyBhbmQgZGVsZXRlIHRoZSBleGlzdGluZyBvbmVzLlxuXG5cbiAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBzd2l0Y2ggKGNoaWxkLnRhZykge1xuICAgICAgICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG4gICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgQmxvY2s6XG5cbiAgICAgICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IGZhbGx0aHJvdWdoIGhlcmUgaWYgZW5hYmxlQmxvY2tzQVBJIGlzIG5vdCBvbi5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVkIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoY2hpbGQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnQudHlwZSB8fCAoIC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgICAgICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGNoaWxkLCBlbGVtZW50KSApKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9leGlzdGluZzMgPSB1c2VGaWJlcihjaGlsZCwgZWxlbWVudC5wcm9wcyk7XG5cbiAgICAgICAgICAgICAgICBfZXhpc3RpbmczLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY2hpbGQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIF9leGlzdGluZzMucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBfZXhpc3RpbmczLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICAgICAgICAgIF9leGlzdGluZzMuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2V4aXN0aW5nMztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IC8vIERpZG4ndCBtYXRjaC5cblxuXG4gICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIGVsZW1lbnQua2V5KTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9jcmVhdGVkNCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICBfY3JlYXRlZDQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgZWxlbWVudCk7XG4gICAgICBfY3JlYXRlZDQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gX2NyZWF0ZWQ0O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIHBvcnRhbCwgbGFuZXMpIHtcbiAgICB2YXIga2V5ID0gcG9ydGFsLmtleTtcbiAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgLy8gVE9ETzogSWYga2V5ID09PSBudWxsIGFuZCBjaGlsZC5rZXkgPT09IG51bGwsIHRoZW4gdGhpcyBvbmx5IGFwcGxpZXMgdG9cbiAgICAgIC8vIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LlxuICAgICAgaWYgKGNoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGlmIChjaGlsZC50YWcgPT09IEhvc3RQb3J0YWwgJiYgY2hpbGQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gPT09IHBvcnRhbC5jb250YWluZXJJbmZvICYmIGNoaWxkLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiA9PT0gcG9ydGFsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGNoaWxkLCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfSAvLyBUaGlzIEFQSSB3aWxsIHRhZyB0aGUgY2hpbGRyZW4gd2l0aCB0aGUgc2lkZS1lZmZlY3Qgb2YgdGhlIHJlY29uY2lsaWF0aW9uXG4gIC8vIGl0c2VsZi4gVGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzaWRlLWVmZmVjdCBsaXN0IGFzIHdlIHBhc3MgdGhyb3VnaCB0aGVcbiAgLy8gY2hpbGRyZW4gYW5kIHRoZSBwYXJlbnQuXG5cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZEZpYmVycyhyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlY3Vyc2l2ZS5cbiAgICAvLyBJZiB0aGUgdG9wIGxldmVsIGl0ZW0gaXMgYW4gYXJyYXksIHdlIHRyZWF0IGl0IGFzIGEgc2V0IG9mIGNoaWxkcmVuLFxuICAgIC8vIG5vdCBhcyBhIGZyYWdtZW50LiBOZXN0ZWQgYXJyYXlzIG9uIHRoZSBvdGhlciBoYW5kIHdpbGwgYmUgdHJlYXRlZCBhc1xuICAgIC8vIGZyYWdtZW50IG5vZGVzLiBSZWN1cnNpb24gaGFwcGVucyBhdCB0aGUgbm9ybWFsIGZsb3cuXG4gICAgLy8gSGFuZGxlIHRvcCBsZXZlbCB1bmtleWVkIGZyYWdtZW50cyBhcyBpZiB0aGV5IHdlcmUgYXJyYXlzLlxuICAgIC8vIFRoaXMgbGVhZHMgdG8gYW4gYW1iaWd1aXR5IGJldHdlZW4gPD57Wy4uLl19PC8+IGFuZCA8Pi4uLjwvPi5cbiAgICAvLyBXZSB0cmVhdCB0aGUgYW1iaWd1b3VzIGNhc2VzIGFib3ZlIHRoZSBzYW1lLlxuICAgIHZhciBpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50ID0gdHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCAmJiBuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFICYmIG5ld0NoaWxkLmtleSA9PT0gbnVsbDtcblxuICAgIGlmIChpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50KSB7XG4gICAgICBuZXdDaGlsZCA9IG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuO1xuICAgIH0gLy8gSGFuZGxlIG9iamVjdCB0eXBlc1xuXG5cbiAgICB2YXIgaXNPYmplY3QgPSB0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsO1xuXG4gICAgaWYgKGlzT2JqZWN0KSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpKTtcblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykpO1xuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCAnJyArIG5ld0NoaWxkLCBsYW5lcykpO1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KSB7XG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3VuZGVmaW5lZCcgJiYgIWlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQpIHtcbiAgICAgIC8vIElmIHRoZSBuZXcgY2hpbGQgaXMgdW5kZWZpbmVkLCBhbmQgdGhlIHJldHVybiBmaWJlciBpcyBhIGNvbXBvc2l0ZVxuICAgICAgLy8gY29tcG9uZW50LCB0aHJvdyBhbiBlcnJvci4gSWYgRmliZXIgcmV0dXJuIHR5cGVzIGFyZSBkaXNhYmxlZCxcbiAgICAgIC8vIHdlIGFscmVhZHkgdGhyZXcgYWJvdmUuXG4gICAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5yZW5kZXIuX2lzTW9ja0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIC8vIEludGVudGlvbmFsbHkgZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGNhc2UsIHdoaWNoIGhhbmRsZXMgYm90aFxuICAgICAgICAvLyBmdW5jdGlvbnMgYW5kIGNsYXNzZXNcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lZCBuby1mYWxsdGhyb3VnaFxuXG4gICAgICAgIGNhc2UgQmxvY2s6XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCAoZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JykgKyBcIiguLi4pOiBOb3RoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHJlbmRlci4gVGhpcyB1c3VhbGx5IG1lYW5zIGEgcmV0dXJuIHN0YXRlbWVudCBpcyBtaXNzaW5nLiBPciwgdG8gcmVuZGVyIG5vdGhpbmcsIHJldHVybiBudWxsLlwiICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBSZW1haW5pbmcgY2FzZXMgYXJlIGFsbCB0cmVhdGVkIGFzIGVtcHR5LlxuXG5cbiAgICByZXR1cm4gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgfVxuXG4gIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVycztcbn1cblxudmFyIHJlY29uY2lsZUNoaWxkRmliZXJzID0gQ2hpbGRSZWNvbmNpbGVyKHRydWUpO1xudmFyIG1vdW50Q2hpbGRGaWJlcnMgPSBDaGlsZFJlY29uY2lsZXIoZmFsc2UpO1xuZnVuY3Rpb24gY2xvbmVDaGlsZEZpYmVycyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoIShjdXJyZW50ID09PSBudWxsIHx8IHdvcmtJblByb2dyZXNzLmNoaWxkID09PSBjdXJyZW50LmNoaWxkKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlc3VtaW5nIHdvcmsgbm90IHlldCBpbXBsZW1lbnRlZC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjdXJyZW50Q2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIG5ld0NoaWxkID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzKTtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXdDaGlsZDtcbiAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgd2hpbGUgKGN1cnJlbnRDaGlsZC5zaWJsaW5nICE9PSBudWxsKSB7XG4gICAgY3VycmVudENoaWxkID0gY3VycmVudENoaWxkLnNpYmxpbmc7XG4gICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5zaWJsaW5nID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzKTtcbiAgICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuXG4gIG5ld0NoaWxkLnNpYmxpbmcgPSBudWxsO1xufSAvLyBSZXNldCBhIHdvcmtJblByb2dyZXNzIGNoaWxkIHNldCB0byBwcmVwYXJlIGl0IGZvciBhIHNlY29uZCBwYXNzLlxuXG5mdW5jdGlvbiByZXNldENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICB2YXIgY2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICByZXNldFdvcmtJblByb2dyZXNzKGNoaWxkLCBsYW5lcyk7XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG59XG5cbnZhciBOT19DT05URVhUID0ge307XG52YXIgY29udGV4dFN0YWNrQ3Vyc29yJDEgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG52YXIgY29udGV4dEZpYmVyU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG52YXIgcm9vdEluc3RhbmNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG5cbmZ1bmN0aW9uIHJlcXVpcmVkQ29udGV4dChjKSB7XG4gIGlmICghKGMgIT09IE5PX0NPTlRFWFQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgaG9zdCBjb250ZXh0IHRvIGV4aXN0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGM7XG59XG5cbmZ1bmN0aW9uIGdldFJvb3RIb3N0Q29udGFpbmVyKCkge1xuICB2YXIgcm9vdEluc3RhbmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICByZXR1cm4gcm9vdEluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdENvbnRhaW5lcihmaWJlciwgbmV4dFJvb3RJbnN0YW5jZSkge1xuICAvLyBQdXNoIGN1cnJlbnQgcm9vdCBpbnN0YW5jZSBvbnRvIHRoZSBzdGFjaztcbiAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcmVzZXQgcm9vdCB3aGVuIHBvcnRhbHMgYXJlIHBvcHBlZC5cbiAgcHVzaChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgbmV4dFJvb3RJbnN0YW5jZSwgZmliZXIpOyAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBwb3Agb25seSBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cblxuICBwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpOyAvLyBGaW5hbGx5LCB3ZSBuZWVkIHRvIHB1c2ggdGhlIGhvc3QgY29udGV4dCB0byB0aGUgc3RhY2suXG4gIC8vIEhvd2V2ZXIsIHdlIGNhbid0IGp1c3QgY2FsbCBnZXRSb290SG9zdENvbnRleHQoKSBhbmQgcHVzaCBpdCBiZWNhdXNlXG4gIC8vIHdlJ2QgaGF2ZSBhIGRpZmZlcmVudCBudW1iZXIgb2YgZW50cmllcyBvbiB0aGUgc3RhY2sgZGVwZW5kaW5nIG9uXG4gIC8vIHdoZXRoZXIgZ2V0Um9vdEhvc3RDb250ZXh0KCkgdGhyb3dzIHNvbWV3aGVyZSBpbiByZW5kZXJlciBjb2RlIG9yIG5vdC5cbiAgLy8gU28gd2UgcHVzaCBhbiBlbXB0eSB2YWx1ZSBmaXJzdC4gVGhpcyBsZXRzIHVzIHNhZmVseSB1bndpbmQgb24gZXJyb3JzLlxuXG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIE5PX0NPTlRFWFQsIGZpYmVyKTtcbiAgdmFyIG5leHRSb290Q29udGV4dCA9IGdldFJvb3RIb3N0Q29udGV4dChuZXh0Um9vdEluc3RhbmNlKTsgLy8gTm93IHRoYXQgd2Uga25vdyB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgdGhyb3csIHJlcGxhY2UgaXQuXG5cbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG5leHRSb290Q29udGV4dCwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwb3BIb3N0Q29udGFpbmVyKGZpYmVyKSB7XG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgcG9wKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RDb250ZXh0KCkge1xuICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KTtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Q29udGV4dChmaWJlcikge1xuICB2YXIgcm9vdEluc3RhbmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZ2V0Q2hpbGRIb3N0Q29udGV4dChjb250ZXh0LCBmaWJlci50eXBlKTsgLy8gRG9uJ3QgcHVzaCB0aGlzIEZpYmVyJ3MgY29udGV4dCB1bmxlc3MgaXQncyB1bmlxdWUuXG5cbiAgaWYgKGNvbnRleHQgPT09IG5leHRDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIFRyYWNrIHRoZSBjb250ZXh0IGFuZCB0aGUgRmliZXIgdGhhdCBwcm92aWRlZCBpdC5cbiAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHBvcCBvbmx5IEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuXG5cbiAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgbmV4dENvbnRleHQsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcG9wSG9zdENvbnRleHQoZmliZXIpIHtcbiAgLy8gRG8gbm90IHBvcCB1bmxlc3MgdGhpcyBGaWJlciBwcm92aWRlZCB0aGUgY3VycmVudCBjb250ZXh0LlxuICAvLyBwdXNoSG9zdENvbnRleHQoKSBvbmx5IHB1c2hlcyBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cbiAgaWYgKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLmN1cnJlbnQgIT09IGZpYmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG52YXIgRGVmYXVsdFN1c3BlbnNlQ29udGV4dCA9IDA7IC8vIFRoZSBTdXNwZW5zZSBDb250ZXh0IGlzIHNwbGl0IGludG8gdHdvIHBhcnRzLiBUaGUgbG93ZXIgYml0cyBpc1xuLy8gaW5oZXJpdGVkIGRlZXBseSBkb3duIHRoZSBzdWJ0cmVlLiBUaGUgdXBwZXIgYml0cyBvbmx5IGFmZmVjdFxuLy8gdGhpcyBpbW1lZGlhdGUgc3VzcGVuc2UgYm91bmRhcnkgYW5kIGdldHMgcmVzZXQgZWFjaCBuZXdcbi8vIGJvdW5kYXJ5IG9yIHN1c3BlbnNlIGxpc3QuXG5cbnZhciBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayA9IDE7IC8vIFN1YnRyZWUgRmxhZ3M6XG4vLyBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQgaW5kaWNhdGVzIHRoYXQgb25lIG9mIG91ciBwYXJlbnQgU3VzcGVuc2Vcbi8vIGJvdW5kYXJpZXMgaXMgbm90IGN1cnJlbnRseSBzaG93aW5nIHZpc2libGUgbWFpbiBjb250ZW50LlxuLy8gRWl0aGVyIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgb3IgaXMgbm90IG1vdW50ZWQgYXQgYWxsLlxuLy8gV2UgY2FuIHVzZSB0aGlzIHRvIGRldGVybWluZSBpZiBpdCBpcyBkZXNpcmFibGUgdG8gdHJpZ2dlciBhIGZhbGxiYWNrIGF0XG4vLyB0aGUgcGFyZW50LiBJZiBub3QsIHRoZW4gd2UgbWlnaHQgbmVlZCB0byB0cmlnZ2VyIHVuZGVzaXJhYmxlIGJvdW5kYXJpZXNcbi8vIGFuZC9vciBzdXNwZW5kIHRoZSBjb21taXQgdG8gYXZvaWQgaGlkaW5nIHRoZSBwYXJlbnQgY29udGVudC5cblxudmFyIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCA9IDE7IC8vIFNoYWxsb3cgRmxhZ3M6XG4vLyBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgY2FuIGJlIHVzZWQgYnkgU3VzcGVuc2VMaXN0IHRvIGZvcmNlIG5ld2x5IGFkZGVkXG4vLyBpdGVtcyBpbnRvIHRoZWlyIGZhbGxiYWNrIHN0YXRlIGR1cmluZyBvbmUgb2YgdGhlIHJlbmRlciBwYXNzZXMuXG5cbnZhciBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgPSAyO1xudmFyIHN1c3BlbnNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoRGVmYXVsdFN1c3BlbnNlQ29udGV4dCk7XG5mdW5jdGlvbiBoYXNTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgZmxhZykge1xuICByZXR1cm4gKHBhcmVudENvbnRleHQgJiBmbGFnKSAhPT0gMDtcbn1cbmZ1bmN0aW9uIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaztcbn1cbmZ1bmN0aW9uIHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgc2hhbGxvd0NvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayB8IHNoYWxsb3dDb250ZXh0O1xufVxuZnVuY3Rpb24gYWRkU3VidHJlZVN1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0LCBzdWJ0cmVlQ29udGV4dCkge1xuICByZXR1cm4gcGFyZW50Q29udGV4dCB8IHN1YnRyZWVDb250ZXh0O1xufVxuZnVuY3Rpb24gcHVzaFN1c3BlbnNlQ29udGV4dChmaWJlciwgbmV3Q29udGV4dCkge1xuICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIG5ld0NvbnRleHQsIGZpYmVyKTtcbn1cbmZ1bmN0aW9uIHBvcFN1c3BlbnNlQ29udGV4dChmaWJlcikge1xuICBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRDYXB0dXJlU3VzcGVuc2Uod29ya0luUHJvZ3Jlc3MsIGhhc0ludmlzaWJsZVBhcmVudCkge1xuICAvLyBJZiBpdCB3YXMgdGhlIHByaW1hcnkgY2hpbGRyZW4gdGhhdCBqdXN0IHN1c3BlbmRlZCwgY2FwdHVyZSBhbmQgcmVuZGVyIHRoZVxuICAvLyBmYWxsYmFjay4gT3RoZXJ3aXNlLCBkb24ndCBjYXB0dXJlIGFuZCBidWJibGUgdG8gdGhlIG5leHQgYm91bmRhcnkuXG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXh0U3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmV4dFN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgIC8vIEEgZGVoeWRyYXRlZCBib3VuZGFyeSBhbHdheXMgY2FwdHVyZXMuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzOyAvLyBJbiBvcmRlciB0byBjYXB0dXJlLCB0aGUgU3VzcGVuc2UgY29tcG9uZW50IG11c3QgaGF2ZSBhIGZhbGxiYWNrIHByb3AuXG5cbiAgaWYgKHByb3BzLmZhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gUmVndWxhciBib3VuZGFyaWVzIGFsd2F5cyBjYXB0dXJlLlxuXG5cbiAgaWYgKHByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgaXQncyBhIGJvdW5kYXJ5IHdlIHNob3VsZCBhdm9pZCwgdGhlbiB3ZSBwcmVmZXIgdG8gYnViYmxlIHVwIHRvIHRoZVxuICAvLyBwYXJlbnQgYm91bmRhcnkgaWYgaXQgaXMgY3VycmVudGx5IGludmlzaWJsZS5cblxuXG4gIGlmIChoYXNJbnZpc2libGVQYXJlbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSWYgdGhlIHBhcmVudCBpcyBub3QgYWJsZSB0byBoYW5kbGUgaXQsIHdlIG11c3QgaGFuZGxlIGl0LlxuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBmaW5kRmlyc3RTdXNwZW5kZWQocm93KSB7XG4gIHZhciBub2RlID0gcm93O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGRlaHlkcmF0ZWQgPSBzdGF0ZS5kZWh5ZHJhdGVkO1xuXG4gICAgICAgIGlmIChkZWh5ZHJhdGVkID09PSBudWxsIHx8IGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoZGVoeWRyYXRlZCkgfHwgaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soZGVoeWRyYXRlZCkpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlTGlzdENvbXBvbmVudCAmJiAvLyByZXZlYWxPcmRlciB1bmRlZmluZWQgY2FuJ3QgYmUgdHJ1c3RlZCBiZWNhdXNlIGl0IGRvbid0XG4gICAgLy8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIGl0IHN1c3BlbmRlZCBvciBub3QuXG4gICAgbm9kZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBkaWRTdXNwZW5kID0gKG5vZGUuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgICAgaWYgKGRpZFN1c3BlbmQpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSByb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm93KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIE5vRmxhZ3MkMSA9XG4vKiAgKi9cbjA7IC8vIFJlcHJlc2VudHMgd2hldGhlciBlZmZlY3Qgc2hvdWxkIGZpcmUuXG5cbnZhciBIYXNFZmZlY3QgPVxuLyogKi9cbjE7IC8vIFJlcHJlc2VudHMgdGhlIHBoYXNlIGluIHdoaWNoIHRoZSBlZmZlY3QgKG5vdCB0aGUgY2xlYW4tdXApIGZpcmVzLlxuXG52YXIgTGF5b3V0ID1cbi8qICAgICovXG4yO1xudmFyIFBhc3NpdmUkMSA9XG4vKiAgICovXG40O1xuXG4vLyBUaGlzIG1heSBoYXZlIGJlZW4gYW4gaW5zZXJ0aW9uIG9yIGEgaHlkcmF0aW9uLlxuXG52YXIgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xudmFyIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzSHlkcmF0aW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGVudGVySHlkcmF0aW9uU3RhdGUoZmliZXIpIHtcblxuICB2YXIgcGFyZW50SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKHBhcmVudEluc3RhbmNlKTtcbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKHJldHVybkZpYmVyLCBpbnN0YW5jZSkge1xuICB7XG4gICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIGRpZE5vdEh5ZHJhdGVDb250YWluZXJJbnN0YW5jZShyZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbywgaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBkaWROb3RIeWRyYXRlSW5zdGFuY2UocmV0dXJuRmliZXIudHlwZSwgcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcywgcmV0dXJuRmliZXIuc3RhdGVOb2RlLCBpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZFRvRGVsZXRlID0gY3JlYXRlRmliZXJGcm9tSG9zdEluc3RhbmNlRm9yRGVsZXRpb24oKTtcbiAgY2hpbGRUb0RlbGV0ZS5zdGF0ZU5vZGUgPSBpbnN0YW5jZTtcbiAgY2hpbGRUb0RlbGV0ZS5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgY2hpbGRUb0RlbGV0ZS5mbGFncyA9IERlbGV0aW9uOyAvLyBUaGlzIG1pZ2h0IHNlZW0gbGlrZSBpdCBiZWxvbmdzIG9uIHByb2dyZXNzZWRGaXJzdERlbGV0aW9uLiBIb3dldmVyLFxuICAvLyB0aGVzZSBjaGlsZHJlbiBhcmUgbm90IHBhcnQgb2YgdGhlIHJlY29uY2lsaWF0aW9uIGxpc3Qgb2YgY2hpbGRyZW4uXG4gIC8vIEV2ZW4gaWYgd2UgYWJvcnQgYW5kIHJlcmVjb25jaWxlIHRoZSBjaGlsZHJlbiwgdGhhdCB3aWxsIHRyeSB0byBoeWRyYXRlXG4gIC8vIGFnYWluIGFuZCB0aGUgbm9kZXMgYXJlIHN0aWxsIGluIHRoZSBob3N0IHRyZWUgc28gdGhlc2Ugd2lsbCBiZVxuICAvLyByZWNyZWF0ZWQuXG5cbiAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShyZXR1cm5GaWJlciwgZmliZXIpIHtcbiAgZmliZXIuZmxhZ3MgPSBmaWJlci5mbGFncyAmIH5IeWRyYXRpbmcgfCBQbGFjZW1lbnQ7XG5cbiAge1xuICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHBhcmVudENvbnRhaW5lciA9IHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0eXBlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgICAgICAgIHZhciB0ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgdmFyIHBhcmVudFByb3BzID0gcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB2YXIgX3R5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgX3Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgX3R5cGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgICAgICAgICAgdmFyIF90ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIF90ZXh0KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSB7XG4gIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgIHZhciBwcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY2FuSHlkcmF0ZUluc3RhbmNlKG5leHRJbnN0YW5jZSwgdHlwZSk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgZmliZXIuc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICB2YXIgdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIHRleHRJbnN0YW5jZSA9IGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UobmV4dEluc3RhbmNlLCB0ZXh0KTtcblxuICAgICAgICBpZiAodGV4dEluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgZmliZXIuc3RhdGVOb2RlID0gdGV4dEluc3RhbmNlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKGZpYmVyKSB7XG4gIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmV4dEluc3RhbmNlID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcblxuICBpZiAoIW5leHRJbnN0YW5jZSkge1xuICAgIC8vIE5vdGhpbmcgdG8gaHlkcmF0ZS4gTWFrZSBpdCBhbiBpbnNlcnRpb24uXG4gICAgaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgIGlzSHlkcmF0aW5nID0gZmFsc2U7XG4gICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSA9IG5leHRJbnN0YW5jZTtcblxuICBpZiAoIXRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkpIHtcbiAgICAvLyBJZiB3ZSBjYW4ndCBoeWRyYXRlIHRoaXMgaW5zdGFuY2UgbGV0J3MgdHJ5IHRoZSBuZXh0IG9uZS5cbiAgICAvLyBXZSB1c2UgdGhpcyBhcyBhIGhldXJpc3RpYy4gSXQncyBiYXNlZCBvbiBpbnR1aXRpb24gYW5kIG5vdCBkYXRhIHNvIGl0XG4gICAgLy8gbWlnaHQgYmUgZmxhd2VkIG9yIHVubmVjZXNzYXJ5LlxuICAgIG5leHRJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhmaXJzdEF0dGVtcHRlZEluc3RhbmNlKTtcblxuICAgIGlmICghbmV4dEluc3RhbmNlIHx8ICF0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuICAgICAgaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBtYXRjaGVkIHRoZSBuZXh0IG9uZSwgd2UnbGwgbm93IGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBvbmUgd2FzXG4gICAgLy8gc3VwZXJmbHVvdXMgYW5kIHdlJ2xsIGRlbGV0ZSBpdC4gU2luY2Ugd2UgY2FuJ3QgZWFnZXJseSBkZWxldGUgaXRcbiAgICAvLyB3ZSdsbCBoYXZlIHRvIHNjaGVkdWxlIGEgZGVsZXRpb24uIFRvIGRvIHRoYXQsIHRoaXMgbm9kZSBuZWVkcyBhIGR1bW15XG4gICAgLy8gZmliZXIgYXNzb2NpYXRlZCB3aXRoIGl0LlxuXG5cbiAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UpO1xuICB9XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKG5leHRJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2UoZmliZXIsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcblxuICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIHZhciB1cGRhdGVQYXlsb2FkID0gaHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCBmaWJlci50eXBlLCBmaWJlci5tZW1vaXplZFByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBmaWJlcik7IC8vIFRPRE86IFR5cGUgdGhpcyBzcGVjaWZpYyB0byB0aGlzIHR5cGUgb2YgY29tcG9uZW50LlxuXG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUGF5bG9hZDsgLy8gSWYgdGhlIHVwZGF0ZSBwYXlsb2FkIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgY2hhbmdlIG9yIGlmIHRoZXJlXG4gIC8vIGlzIGEgbmV3IHJlZiB3ZSBtYXJrIHRoaXMgYXMgYW4gdXBkYXRlLlxuXG4gIGlmICh1cGRhdGVQYXlsb2FkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKGZpYmVyKSB7XG5cbiAgdmFyIHRleHRJbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgdmFyIHRleHRDb250ZW50ID0gZmliZXIubWVtb2l6ZWRQcm9wcztcbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGh5ZHJhdGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCwgZmliZXIpO1xuXG4gIHtcbiAgICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgICAvLyBXZSBhc3N1bWUgdGhhdCBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZSBpcyBjYWxsZWQgaW4gYSBjb250ZXh0IHdoZXJlIHRoZVxuICAgICAgLy8gaHlkcmF0aW9uIHBhcmVudCBpcyB0aGUgcGFyZW50IGhvc3QgY29tcG9uZW50IG9mIHRoaXMgaG9zdCB0ZXh0LlxuICAgICAgdmFyIHJldHVybkZpYmVyID0gaHlkcmF0aW9uUGFyZW50RmliZXI7XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRDb250YWluZXIgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgICAgZGlkTm90TWF0Y2hIeWRyYXRlZENvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudFR5cGUgPSByZXR1cm5GaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgcGFyZW50UHJvcHMgPSByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKGZpYmVyKSB7XG5cbiAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IHN1c3BlbnNlU3RhdGUgIT09IG51bGwgPyBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQgOiBudWxsO1xuXG4gIGlmICghc3VzcGVuc2VJbnN0YW5jZSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGhhdmUgYSBoeWRyYXRlZCBzdXNwZW5zZSBpbnN0YW5jZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCAmJiBwYXJlbnQudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIHBhcmVudC50YWcgIT09IEhvc3RSb290ICYmIHBhcmVudC50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBwb3BIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuXG4gIGlmIChmaWJlciAhPT0gaHlkcmF0aW9uUGFyZW50RmliZXIpIHtcbiAgICAvLyBXZSdyZSBkZWVwZXIgdGhhbiB0aGUgY3VycmVudCBoeWRyYXRpb24gY29udGV4dCwgaW5zaWRlIGFuIGluc2VydGVkXG4gICAgLy8gdHJlZS5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgLy8gSWYgd2UncmUgbm90IGN1cnJlbnRseSBoeWRyYXRpbmcgYnV0IHdlJ3JlIGluIGEgaHlkcmF0aW9uIGNvbnRleHQsIHRoZW5cbiAgICAvLyB3ZSB3ZXJlIGFuIGluc2VydGlvbiBhbmQgbm93IG5lZWQgdG8gcG9wIHVwIHJlZW50ZXIgaHlkcmF0aW9uIG9mIG91clxuICAgIC8vIHNpYmxpbmdzLlxuICAgIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuICAgIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7IC8vIElmIHdlIGhhdmUgYW55IHJlbWFpbmluZyBoeWRyYXRhYmxlIG5vZGVzLCB3ZSBuZWVkIHRvIGRlbGV0ZSB0aGVtIG5vdy5cbiAgLy8gV2Ugb25seSBkbyB0aGlzIGRlZXBlciB0aGFuIGhlYWQgYW5kIGJvZHkgc2luY2UgdGhleSB0ZW5kIHRvIGhhdmUgcmFuZG9tXG4gIC8vIG90aGVyIG5vZGVzIGluIHRoZW0uIFdlIGFsc28gaWdub3JlIGNvbXBvbmVudHMgd2l0aCBwdXJlIHRleHQgY29udGVudCBpblxuICAvLyBzaWRlIG9mIHRoZW0uXG4gIC8vIFRPRE86IEJldHRlciBoZXVyaXN0aWMuXG5cbiAgaWYgKGZpYmVyLnRhZyAhPT0gSG9zdENvbXBvbmVudCB8fCB0eXBlICE9PSAnaGVhZCcgJiYgdHlwZSAhPT0gJ2JvZHknICYmICFzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBmaWJlci5tZW1vaXplZFByb3BzKSkge1xuICAgIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuXG4gICAgd2hpbGUgKG5leHRJbnN0YW5jZSkge1xuICAgICAgZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKGZpYmVyLCBuZXh0SW5zdGFuY2UpO1xuICAgICAgbmV4dEluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKG5leHRJbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcik7XG5cbiAgaWYgKGZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gc2tpcFBhc3REZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShmaWJlcik7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGh5ZHJhdGlvblBhcmVudEZpYmVyID8gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGZpYmVyLnN0YXRlTm9kZSkgOiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlc2V0SHlkcmF0aW9uU3RhdGUoKSB7XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbDtcbiAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0SXNIeWRyYXRpbmcoKSB7XG4gIHJldHVybiBpc0h5ZHJhdGluZztcbn1cblxuLy8gYW5kIHNob3VsZCBiZSByZXNldCBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgcmVuZGVyLlxuLy8gVGhpcyB0cmFja3Mgd2hpY2ggbXV0YWJsZSBzb3VyY2VzIG5lZWQgdG8gYmUgcmVzZXQgYWZ0ZXIgYSByZW5kZXIuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMgPSBbXTtcbnZhciByZW5kZXJlclNpZ2lsJDE7XG5cbntcbiAgLy8gVXNlZCB0byBkZXRlY3QgbXVsdGlwbGUgcmVuZGVyZXJzIHVzaW5nIHRoZSBzYW1lIG11dGFibGUgc291cmNlLlxuICByZW5kZXJlclNpZ2lsJDEgPSB7fTtcbn1cblxuZnVuY3Rpb24gbWFya1NvdXJjZUFzRGlydHkobXV0YWJsZVNvdXJjZSkge1xuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMucHVzaChtdXRhYmxlU291cmNlKTtcbn1cbmZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IHdvcmtJblByb2dyZXNzU291cmNlc1tpXTtcblxuICAgIHtcbiAgICAgIG11dGFibGVTb3VyY2UuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnkgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzU291cmNlcy5sZW5ndGggPSAwO1xufVxuZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKG11dGFibGVTb3VyY2UpIHtcbiAge1xuICAgIHJldHVybiBtdXRhYmxlU291cmNlLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5O1xuICB9XG59XG5mdW5jdGlvbiBzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24obXV0YWJsZVNvdXJjZSwgdmVyc2lvbikge1xuICB7XG4gICAgbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeSA9IHZlcnNpb247XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMucHVzaChtdXRhYmxlU291cmNlKTtcbn1cbmZ1bmN0aW9uIHdhcm5BYm91dE11bHRpcGxlUmVuZGVyZXJzREVWKG11dGFibGVTb3VyY2UpIHtcbiAge1xuICAgIHtcbiAgICAgIGlmIChtdXRhYmxlU291cmNlLl9jdXJyZW50UHJpbWFyeVJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgbXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciA9IHJlbmRlcmVyU2lnaWwkMTtcbiAgICAgIH0gZWxzZSBpZiAobXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciAhPT0gcmVuZGVyZXJTaWdpbCQxKSB7XG4gICAgICAgIGVycm9yKCdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIG11dGFibGUgc291cmNlLiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gRWFnZXIgcmVhZHMgdGhlIHZlcnNpb24gb2YgYSBtdXRhYmxlIHNvdXJjZSBhbmQgc3RvcmVzIGl0IG9uIHRoZSByb290LlxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7XG52YXIgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXI7XG5cbntcbiAgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllciA9IHt9O1xuICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG59XG5cbi8vIFRoZXNlIGFyZSBzZXQgcmlnaHQgYmVmb3JlIGNhbGxpbmcgdGhlIGNvbXBvbmVudC5cbnZhciByZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLiBJJ3ZlIG5hbWVkIGl0IGRpZmZlcmVudGx5IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb21cbi8vIHRoZSB3b3JrLWluLXByb2dyZXNzIGhvb2suXG5cbnZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDsgLy8gSG9va3MgYXJlIHN0b3JlZCBhcyBhIGxpbmtlZCBsaXN0IG9uIHRoZSBmaWJlcidzIG1lbW9pemVkU3RhdGUgZmllbGQuIFRoZVxuLy8gY3VycmVudCBob29rIGxpc3QgaXMgdGhlIGxpc3QgdGhhdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IGZpYmVyLiBUaGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MgaG9vayBsaXN0IGlzIGEgbmV3IGxpc3QgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuLy8gd29yay1pbi1wcm9ncmVzcyBmaWJlci5cblxudmFyIGN1cnJlbnRIb29rID0gbnVsbDtcbnZhciB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsOyAvLyBXaGV0aGVyIGFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIGF0IGFueSBwb2ludCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gVGhpc1xuLy8gZG9lcyBub3QgZ2V0IHJlc2V0IGlmIHdlIGRvIGFub3RoZXIgcmVuZGVyIHBhc3M7IG9ubHkgd2hlbiB3ZSdyZSBjb21wbGV0ZWx5XG4vLyBmaW5pc2hlZCBldmFsdWF0aW5nIHRoaXMgY29tcG9uZW50LiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBzbyB3ZSBrbm93XG4vLyB3aGV0aGVyIHdlIG5lZWQgdG8gY2xlYXIgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgYWZ0ZXIgYSB0aHJvdy5cblxudmFyIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTsgLy8gV2hlcmUgYW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgb25seSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHBhc3MuIFRoaXNcbi8vIGdldHMgcmVzZXQgYWZ0ZXIgZWFjaCBhdHRlbXB0LlxuLy8gVE9ETzogTWF5YmUgdGhlcmUncyBzb21lIHdheSB0byBjb25zb2xpZGF0ZSB0aGlzIHdpdGhcbi8vIGBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlYC4gT3Igd2l0aCBgbnVtYmVyT2ZSZVJlbmRlcnNgLlxuXG52YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG52YXIgUkVfUkVOREVSX0xJTUlUID0gMjU7IC8vIEluIERFViwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBwcmltaXRpdmUgaG9va1xuXG52YXIgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsOyAvLyBJbiBERVYsIHRoaXMgbGlzdCBlbnN1cmVzIHRoYXQgaG9va3MgYXJlIGNhbGxlZCBpbiB0aGUgc2FtZSBvcmRlciBiZXR3ZWVuIHJlbmRlcnMuXG4vLyBUaGUgbGlzdCBzdG9yZXMgdGhlIG9yZGVyIG9mIGhvb2tzIHVzZWQgZHVyaW5nIHRoZSBpbml0aWFsIHJlbmRlciAobW91bnQpLlxuLy8gU3Vic2VxdWVudCByZW5kZXJzICh1cGRhdGVzKSByZWZlcmVuY2UgdGhpcyBsaXN0LlxuXG52YXIgaG9va1R5cGVzRGV2ID0gbnVsbDtcbnZhciBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBJbiBERVYsIHRoaXMgdHJhY2tzIHdoZXRoZXIgY3VycmVudGx5IHJlbmRlcmluZyBjb21wb25lbnQgbmVlZHMgdG8gaWdub3JlXG4vLyB0aGUgZGVwZW5kZW5jaWVzIGZvciBIb29rcyB0aGF0IG5lZWQgdGhlbSAoZS5nLiB1c2VFZmZlY3Qgb3IgdXNlTWVtbykuXG4vLyBXaGVuIHRydWUsIHN1Y2ggSG9va3Mgd2lsbCBhbHdheXMgYmUgXCJyZW1vdW50ZWRcIi4gT25seSB1c2VkIGR1cmluZyBob3QgcmVsb2FkLlxuXG52YXIgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBmYWxzZTtcblxuZnVuY3Rpb24gbW91bnRIb29rVHlwZXNEZXYoKSB7XG4gIHtcbiAgICB2YXIgaG9va05hbWUgPSBjdXJyZW50SG9va05hbWVJbkRldjtcblxuICAgIGlmIChob29rVHlwZXNEZXYgPT09IG51bGwpIHtcbiAgICAgIGhvb2tUeXBlc0RldiA9IFtob29rTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGhvb2tUeXBlc0Rldi5wdXNoKGhvb2tOYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9va1R5cGVzRGV2KCkge1xuICB7XG4gICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldisrO1xuXG4gICAgICBpZiAoaG9va1R5cGVzRGV2W2hvb2tUeXBlc1VwZGF0ZUluZGV4RGV2XSAhPT0gaG9va05hbWUpIHtcbiAgICAgICAgd2Fybk9uSG9va01pc21hdGNoSW5EZXYoaG9va05hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKSB7XG4gIHtcbiAgICBpZiAoZGVwcyAhPT0gdW5kZWZpbmVkICYmIGRlcHMgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoZGVwcykpIHtcbiAgICAgIC8vIFZlcmlmeSBkZXBzLCBidXQgb25seSBvbiBtb3VudCB0byBhdm9pZCBleHRyYSBjaGVja3MuXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoZWlyIHR5cGUgd291bGQgY2hhbmdlIGFzIHVzdWFsbHkgeW91IGRlZmluZSB0aGVtIGlubGluZS5cbiAgICAgIGVycm9yKCclcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IHRoYXQgaXMgbm90IGFuIGFycmF5IChpbnN0ZWFkLCByZWNlaXZlZCBgJXNgKS4gV2hlbiAnICsgJ3NwZWNpZmllZCwgdGhlIGZpbmFsIGFyZ3VtZW50IG11c3QgYmUgYW4gYXJyYXkuJywgY3VycmVudEhvb2tOYW1lSW5EZXYsIHR5cGVvZiBkZXBzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uSG9va01pc21hdGNoSW5EZXYoY3VycmVudEhvb2tOYW1lKSB7XG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS50eXBlKTtcblxuICAgIGlmICghZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgdGFibGUgPSAnJztcbiAgICAgICAgdmFyIHNlY29uZENvbHVtblN0YXJ0ID0gMzA7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gaG9va1R5cGVzVXBkYXRlSW5kZXhEZXY7IGkrKykge1xuICAgICAgICAgIHZhciBvbGRIb29rTmFtZSA9IGhvb2tUeXBlc0RldltpXTtcbiAgICAgICAgICB2YXIgbmV3SG9va05hbWUgPSBpID09PSBob29rVHlwZXNVcGRhdGVJbmRleERldiA/IGN1cnJlbnRIb29rTmFtZSA6IG9sZEhvb2tOYW1lO1xuICAgICAgICAgIHZhciByb3cgPSBpICsgMSArIFwiLiBcIiArIG9sZEhvb2tOYW1lOyAvLyBFeHRyYSBzcGFjZSBzbyBzZWNvbmQgY29sdW1uIGxpbmVzIHVwXG4gICAgICAgICAgLy8gbG9sIEAgSUUgbm90IHN1cHBvcnRpbmcgU3RyaW5nI3JlcGVhdFxuXG4gICAgICAgICAgd2hpbGUgKHJvdy5sZW5ndGggPCBzZWNvbmRDb2x1bW5TdGFydCkge1xuICAgICAgICAgICAgcm93ICs9ICcgJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb3cgKz0gbmV3SG9va05hbWUgKyAnXFxuJztcbiAgICAgICAgICB0YWJsZSArPSByb3c7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcignUmVhY3QgaGFzIGRldGVjdGVkIGEgY2hhbmdlIGluIHRoZSBvcmRlciBvZiBIb29rcyBjYWxsZWQgYnkgJXMuICcgKyAnVGhpcyB3aWxsIGxlYWQgdG8gYnVncyBhbmQgZXJyb3JzIGlmIG5vdCBmaXhlZC4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgUnVsZXMgb2YgSG9va3M6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ydWxlcy1vZi1ob29rc1xcblxcbicgKyAnICAgUHJldmlvdXMgcmVuZGVyICAgICAgICAgICAgTmV4dCByZW5kZXJcXG4nICsgJyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbicgKyAnJXMnICsgJyAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXlxcbicsIGNvbXBvbmVudE5hbWUsIHRhYmxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dJbnZhbGlkSG9va0Vycm9yKCkge1xuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykge1xuICB7XG4gICAgaWYgKGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzKSB7XG4gICAgICAvLyBPbmx5IHRydWUgd2hlbiB0aGlzIGNvbXBvbmVudCBpcyBiZWluZyBob3QgcmVsb2FkZWQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHByZXZEZXBzID09PSBudWxsKSB7XG4gICAge1xuICAgICAgZXJyb3IoJyVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgZHVyaW5nIHRoaXMgcmVuZGVyLCBidXQgbm90IGR1cmluZyAnICsgJ3RoZSBwcmV2aW91cyByZW5kZXIuIEV2ZW4gdGhvdWdoIHRoZSBmaW5hbCBhcmd1bWVudCBpcyBvcHRpb25hbCwgJyArICdpdHMgdHlwZSBjYW5ub3QgY2hhbmdlIGJldHdlZW4gcmVuZGVycy4nLCBjdXJyZW50SG9va05hbWVJbkRldik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IGJvdGhlciBjb21wYXJpbmcgbGVuZ3RocyBpbiBwcm9kIGJlY2F1c2UgdGhlc2UgYXJyYXlzIHNob3VsZCBiZVxuICAgIC8vIHBhc3NlZCBpbmxpbmUuXG4gICAgaWYgKG5leHREZXBzLmxlbmd0aCAhPT0gcHJldkRlcHMubGVuZ3RoKSB7XG4gICAgICBlcnJvcignVGhlIGZpbmFsIGFyZ3VtZW50IHBhc3NlZCB0byAlcyBjaGFuZ2VkIHNpemUgYmV0d2VlbiByZW5kZXJzLiBUaGUgJyArICdvcmRlciBhbmQgc2l6ZSBvZiB0aGlzIGFycmF5IG11c3QgcmVtYWluIGNvbnN0YW50LlxcblxcbicgKyAnUHJldmlvdXM6ICVzXFxuJyArICdJbmNvbWluZzogJXMnLCBjdXJyZW50SG9va05hbWVJbkRldiwgXCJbXCIgKyBwcmV2RGVwcy5qb2luKCcsICcpICsgXCJdXCIsIFwiW1wiICsgbmV4dERlcHMuam9pbignLCAnKSArIFwiXVwiKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZEZXBzLmxlbmd0aCAmJiBpIDwgbmV4dERlcHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob2JqZWN0SXMobmV4dERlcHNbaV0sIHByZXZEZXBzW2ldKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnLCBuZXh0UmVuZGVyTGFuZXMpIHtcbiAgcmVuZGVyTGFuZXMgPSBuZXh0UmVuZGVyTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcblxuICB7XG4gICAgaG9va1R5cGVzRGV2ID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzIDogbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBVc2VkIGZvciBob3QgcmVsb2FkaW5nOlxuXG4gICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lczsgLy8gVGhlIGZvbGxvd2luZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVzZXRcbiAgLy8gY3VycmVudEhvb2sgPSBudWxsO1xuICAvLyB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAvLyBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gIC8vIFRPRE8gV2FybiBpZiBubyBob29rcyBhcmUgdXNlZCBhdCBhbGwgZHVyaW5nIG1vdW50LCB0aGVuIHNvbWUgYXJlIHVzZWQgZHVyaW5nIHVwZGF0ZS5cbiAgLy8gQ3VycmVudGx5IHdlIHdpbGwgaWRlbnRpZnkgdGhlIHVwZGF0ZSByZW5kZXIgYXMgYSBtb3VudCBiZWNhdXNlIG1lbW9pemVkU3RhdGUgPT09IG51bGwuXG4gIC8vIFRoaXMgaXMgdHJpY2t5IGJlY2F1c2UgaXQncyB2YWxpZCBmb3IgY2VydGFpbiB0eXBlcyBvZiBjb21wb25lbnRzIChlLmcuIFJlYWN0LmxhenkpXG4gIC8vIFVzaW5nIG1lbW9pemVkU3RhdGUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG1vdW50L3VwZGF0ZSBvbmx5IHdvcmtzIGlmIGF0IGxlYXN0IG9uZSBzdGF0ZWZ1bCBob29rIGlzIHVzZWQuXG4gIC8vIE5vbi1zdGF0ZWZ1bCBob29rcyAoZS5nLiBjb250ZXh0KSBkb24ndCBnZXQgYWRkZWQgdG8gbWVtb2l6ZWRTdGF0ZSxcbiAgLy8gc28gbWVtb2l6ZWRTdGF0ZSB3b3VsZCBiZSBudWxsIGR1cmluZyB1cGRhdGVzIGFuZCBtb3VudHMuXG5cbiAge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgIH0gZWxzZSBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGRpc3BhdGNoZXIgaGFuZGxlcyBhbiBlZGdlIGNhc2Ugd2hlcmUgYSBjb21wb25lbnQgaXMgdXBkYXRpbmcsXG4gICAgICAvLyBidXQgbm8gc3RhdGVmdWwgaG9va3MgaGF2ZSBiZWVuIHVzZWQuXG4gICAgICAvLyBXZSB3YW50IHRvIG1hdGNoIHRoZSBwcm9kdWN0aW9uIGNvZGUgYmVoYXZpb3IgKHdoaWNoIHdpbGwgdXNlIEhvb2tzRGlzcGF0Y2hlck9uTW91bnQpLFxuICAgICAgLy8gYnV0IHdpdGggdGhlIGV4dHJhIERFViB2YWxpZGF0aW9uIHRvIGVuc3VyZSBob29rcyBvcmRlcmluZyBoYXNuJ3QgY2hhbmdlZC5cbiAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBkb2VzIHRoYXQuXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVY7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTsgLy8gQ2hlY2sgaWYgdGhlcmUgd2FzIGEgcmVuZGVyIHBoYXNlIHVwZGF0ZVxuXG4gIGlmIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpIHtcbiAgICAvLyBLZWVwIHJlbmRlcmluZyBpbiBhIGxvb3AgZm9yIGFzIGxvbmcgYXMgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgY29udGludWUgdG9cbiAgICAvLyBiZSBzY2hlZHVsZWQuIFVzZSBhIGNvdW50ZXIgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cbiAgICB2YXIgbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xuXG4gICAgZG8ge1xuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG5cbiAgICAgIGlmICghKG51bWJlck9mUmVSZW5kZXJzIDwgUkVfUkVOREVSX0xJTUlUKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVG9vIG1hbnkgcmUtcmVuZGVycy4gUmVhY3QgbGltaXRzIHRoZSBudW1iZXIgb2YgcmVuZGVycyB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBudW1iZXJPZlJlUmVuZGVycyArPSAxO1xuXG4gICAgICB7XG4gICAgICAgIC8vIEV2ZW4gd2hlbiBob3QgcmVsb2FkaW5nLCBhbGxvdyBkZXBlbmRlbmNpZXMgdG8gc3RhYmlsaXplXG4gICAgICAgIC8vIGFmdGVyIGZpcnN0IHJlbmRlciB0byBwcmV2ZW50IGluZmluaXRlIHJlbmRlciBwaGFzZSB1cGRhdGVzLlxuICAgICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuICAgICAgfSAvLyBTdGFydCBvdmVyIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdFxuXG5cbiAgICAgIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gQWxzbyB2YWxpZGF0ZSBob29rIG9yZGVyIGZvciBjYXNjYWRpbmcgdXBkYXRlcy5cbiAgICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgIH1cblxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWIDtcbiAgICAgIGNoaWxkcmVuID0gQ29tcG9uZW50KHByb3BzLCBzZWNvbmRBcmcpO1xuICAgIH0gd2hpbGUgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyk7XG4gIH0gLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW5kZXIgcGhhc2UgYW5kIHRoZXJlJ3Mgbm8gcmUtZW50cmFuY3kuXG5cblxuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gaG9va1R5cGVzRGV2O1xuICB9IC8vIFRoaXMgY2hlY2sgdXNlcyBjdXJyZW50SG9vayBzbyB0aGF0IGl0IHdvcmtzIHRoZSBzYW1lIGluIERFViBhbmQgcHJvZCBidW5kbGVzLlxuICAvLyBob29rVHlwZXNEZXYgY291bGQgY2F0Y2ggbW9yZSBjYXNlcyAoZS5nLiBjb250ZXh0KSBidXQgb25seSBpbiBERVYgYnVuZGxlcy5cblxuXG4gIHZhciBkaWRSZW5kZXJUb29GZXdIb29rcyA9IGN1cnJlbnRIb29rICE9PSBudWxsICYmIGN1cnJlbnRIb29rLm5leHQgIT09IG51bGw7XG4gIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICB7XG4gICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgfVxuXG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcblxuICBpZiAoISFkaWRSZW5kZXJUb29GZXdIb29rcykge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlbmRlcmVkIGZld2VyIGhvb2tzIHRoYW4gZXhwZWN0ZWQuIFRoaXMgbWF5IGJlIGNhdXNlZCBieSBhbiBhY2NpZGVudGFsIGVhcmx5IHJldHVybiBzdGF0ZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5mdW5jdGlvbiBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfihQYXNzaXZlIHwgVXBkYXRlKTtcbiAgY3VycmVudC5sYW5lcyA9IHJlbW92ZUxhbmVzKGN1cnJlbnQubGFuZXMsIGxhbmVzKTtcbn1cbmZ1bmN0aW9uIHJlc2V0SG9va3NBZnRlclRocm93KCkge1xuICAvLyBXZSBjYW4gYXNzdW1lIHRoZSBwcmV2aW91cyBkaXNwYXRjaGVyIGlzIGFsd2F5cyB0aGlzIG9uZSwgc2luY2Ugd2Ugc2V0IGl0XG4gIC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbmRlciBwaGFzZSBhbmQgdGhlcmUncyBubyByZS1lbnRyYW5jeS5cbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICAvLyBUaGVyZSB3ZXJlIHJlbmRlciBwaGFzZSB1cGRhdGVzLiBUaGVzZSBhcmUgb25seSB2YWxpZCBmb3IgdGhpcyByZW5kZXJcbiAgICAvLyBwaGFzZSwgd2hpY2ggd2UgYXJlIG5vdyBhYm9ydGluZy4gUmVtb3ZlIHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlcyBzb1xuICAgIC8vIHRoZXkgZG8gbm90IHBlcnNpc3QgdG8gdGhlIG5leHQgcmVuZGVyLiBEbyBub3QgcmVtb3ZlIHVwZGF0ZXMgZnJvbSBob29rc1xuICAgIC8vIHRoYXQgd2VyZW4ndCBwcm9jZXNzZWQuXG4gICAgLy9cbiAgICAvLyBPbmx5IHJlc2V0IHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlIGlmIGl0IGhhcyBhIGNsb25lLiBJZiBpdCBkb2VzXG4gICAgLy8gbm90IGhhdmUgYSBjbG9uZSwgdGhhdCBtZWFucyBpdCB3YXNuJ3QgcHJvY2Vzc2VkLCBhbmQgdGhlIHVwZGF0ZXMgd2VyZVxuICAgIC8vIHNjaGVkdWxlZCBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIHZhciBob29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlO1xuXG4gICAgd2hpbGUgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgICAgIGlmIChxdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaG9vayA9IGhvb2submV4dDtcbiAgICB9XG5cbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gIH1cblxuICByZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBjdXJyZW50SG9vayA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG5cbiAge1xuICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuICB9XG5cbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCkge1xuICB2YXIgaG9vayA9IHtcbiAgICBtZW1vaXplZFN0YXRlOiBudWxsLFxuICAgIGJhc2VTdGF0ZTogbnVsbCxcbiAgICBiYXNlUXVldWU6IG51bGwsXG4gICAgcXVldWU6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9O1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBob29rIGluIHRoZSBsaXN0XG4gICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID0gaG9vaztcbiAgfSBlbHNlIHtcbiAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gaG9vaztcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJvdGggZm9yIHVwZGF0ZXMgYW5kIGZvciByZS1yZW5kZXJzIHRyaWdnZXJlZCBieSBhXG4gIC8vIHJlbmRlciBwaGFzZSB1cGRhdGUuIEl0IGFzc3VtZXMgdGhlcmUgaXMgZWl0aGVyIGEgY3VycmVudCBob29rIHdlIGNhblxuICAvLyBjbG9uZSwgb3IgYSB3b3JrLWluLXByb2dyZXNzIGhvb2sgZnJvbSBhIHByZXZpb3VzIHJlbmRlciBwYXNzIHRoYXQgd2UgY2FuXG4gIC8vIHVzZSBhcyBhIGJhc2UuIFdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgYmFzZSBsaXN0LCB3ZSBtdXN0IHN3aXRjaCB0b1xuICAvLyB0aGUgZGlzcGF0Y2hlciB1c2VkIGZvciBtb3VudHMuXG4gIHZhciBuZXh0Q3VycmVudEhvb2s7XG5cbiAgaWYgKGN1cnJlbnRIb29rID09PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRDdXJyZW50SG9vayA9IG51bGw7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gIH1cblxuICB2YXIgbmV4dFdvcmtJblByb2dyZXNzSG9vaztcblxuICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gIH1cblxuICBpZiAobmV4dFdvcmtJblByb2dyZXNzSG9vayAhPT0gbnVsbCkge1xuICAgIC8vIFRoZXJlJ3MgYWxyZWFkeSBhIHdvcmstaW4tcHJvZ3Jlc3MuIFJldXNlIGl0LlxuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG5leHRXb3JrSW5Qcm9ncmVzc0hvb2s7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0O1xuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICB9IGVsc2Uge1xuICAgIC8vIENsb25lIGZyb20gdGhlIGN1cnJlbnQgaG9vay5cbiAgICBpZiAoIShuZXh0Q3VycmVudEhvb2sgIT09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJlbmRlcmVkIG1vcmUgaG9va3MgdGhhbiBkdXJpbmcgdGhlIHByZXZpb3VzIHJlbmRlci5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgIHZhciBuZXdIb29rID0ge1xuICAgICAgbWVtb2l6ZWRTdGF0ZTogY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudEhvb2suYmFzZVN0YXRlLFxuICAgICAgYmFzZVF1ZXVlOiBjdXJyZW50SG9vay5iYXNlUXVldWUsXG4gICAgICBxdWV1ZTogY3VycmVudEhvb2sucXVldWUsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3QuXG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXdIb29rO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gbmV3SG9vaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkge1xuICByZXR1cm4ge1xuICAgIGxhc3RFZmZlY3Q6IG51bGxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYmFzaWNTdGF0ZVJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAvLyAkRmxvd0ZpeE1lOiBGbG93IGRvZXNuJ3QgbGlrZSBtaXhlZCB0eXBlc1xuICByZXR1cm4gdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGFjdGlvbihzdGF0ZSkgOiBhY3Rpb247XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIGluaXRpYWxTdGF0ZTtcblxuICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdChpbml0aWFsQXJnKTtcbiAgfSBlbHNlIHtcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsQXJnO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWUgPSB7XG4gICAgcGVuZGluZzogbnVsbCxcbiAgICBkaXNwYXRjaDogbnVsbCxcbiAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiByZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIHF1ZXVlKTtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgaWYgKCEocXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7XG4gIHZhciBjdXJyZW50ID0gY3VycmVudEhvb2s7IC8vIFRoZSBsYXN0IHJlYmFzZSB1cGRhdGUgdGhhdCBpcyBOT1QgcGFydCBvZiB0aGUgYmFzZSBzdGF0ZS5cblxuICB2YXIgYmFzZVF1ZXVlID0gY3VycmVudC5iYXNlUXVldWU7IC8vIFRoZSBsYXN0IHBlbmRpbmcgdXBkYXRlIHRoYXQgaGFzbid0IGJlZW4gcHJvY2Vzc2VkIHlldC5cblxuICB2YXIgcGVuZGluZ1F1ZXVlID0gcXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZ1F1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gV2UgaGF2ZSBuZXcgdXBkYXRlcyB0aGF0IGhhdmVuJ3QgYmVlbiBwcm9jZXNzZWQgeWV0LlxuICAgIC8vIFdlJ2xsIGFkZCB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuICAgIGlmIChiYXNlUXVldWUgIT09IG51bGwpIHtcbiAgICAgIC8vIE1lcmdlIHRoZSBwZW5kaW5nIHF1ZXVlIGFuZCB0aGUgYmFzZSBxdWV1ZS5cbiAgICAgIHZhciBiYXNlRmlyc3QgPSBiYXNlUXVldWUubmV4dDtcbiAgICAgIHZhciBwZW5kaW5nRmlyc3QgPSBwZW5kaW5nUXVldWUubmV4dDtcbiAgICAgIGJhc2VRdWV1ZS5uZXh0ID0gcGVuZGluZ0ZpcnN0O1xuICAgICAgcGVuZGluZ1F1ZXVlLm5leHQgPSBiYXNlRmlyc3Q7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGN1cnJlbnQuYmFzZVF1ZXVlICE9PSBiYXNlUXVldWUpIHtcbiAgICAgICAgLy8gSW50ZXJuYWwgaW52YXJpYW50IHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGZlYXNpYmx5IGNvdWxkIGluXG4gICAgICAgIC8vIHRoZSBmdXR1cmUgaWYgd2UgaW1wbGVtZW50IHJlc3VtaW5nLCBvciBzb21lIGZvcm0gb2YgdGhhdC5cbiAgICAgICAgZXJyb3IoJ0ludGVybmFsIGVycm9yOiBFeHBlY3RlZCB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIHRvIGJlIGEgY2xvbmUuICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50LmJhc2VRdWV1ZSA9IGJhc2VRdWV1ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChiYXNlUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBXZSBoYXZlIGEgcXVldWUgdG8gcHJvY2Vzcy5cbiAgICB2YXIgZmlyc3QgPSBiYXNlUXVldWUubmV4dDtcbiAgICB2YXIgbmV3U3RhdGUgPSBjdXJyZW50LmJhc2VTdGF0ZTtcbiAgICB2YXIgbmV3QmFzZVN0YXRlID0gbnVsbDtcbiAgICB2YXIgbmV3QmFzZVF1ZXVlRmlyc3QgPSBudWxsO1xuICAgIHZhciBuZXdCYXNlUXVldWVMYXN0ID0gbnVsbDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3Q7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHVwZGF0ZS5sYW5lO1xuXG4gICAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgdXBkYXRlTGFuZSkpIHtcbiAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAvLyBza2lwcGVkIHVwZGF0ZSwgdGhlIHByZXZpb3VzIHVwZGF0ZS9zdGF0ZSBpcyB0aGUgbmV3IGJhc2VcbiAgICAgICAgLy8gdXBkYXRlL3N0YXRlLlxuICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgbGFuZTogdXBkYXRlTGFuZSxcbiAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgZWFnZXJSZWR1Y2VyOiB1cGRhdGUuZWFnZXJSZWR1Y2VyLFxuICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbmV3QmFzZVF1ZXVlTGFzdCA9IGNsb25lO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBjbG9uZTtcbiAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG4gICAgICAgIC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlXG4gICAgICAgIC8vIHJlbmRlckxhbmVzIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG5cbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyA9IG1lcmdlTGFuZXMoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICAgIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXModXBkYXRlTGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2Nsb25lID0ge1xuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGUgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIHNvIHdlIG5ldmVyIHdhbnQgdW5jb21taXRcbiAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBuZXZlciBiZSBza2lwcGVkIGJ5IHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgIGxhbmU6IE5vTGFuZSxcbiAgICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICAgIGVhZ2VyUmVkdWNlcjogdXBkYXRlLmVhZ2VyUmVkdWNlcixcbiAgICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgfSAvLyBQcm9jZXNzIHRoaXMgdXBkYXRlLlxuXG5cbiAgICAgICAgaWYgKHVwZGF0ZS5lYWdlclJlZHVjZXIgPT09IHJlZHVjZXIpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHVwZGF0ZSB3YXMgcHJvY2Vzc2VkIGVhZ2VybHksIGFuZCBpdHMgcmVkdWNlciBtYXRjaGVzIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgcmVkdWNlciwgd2UgY2FuIHVzZSB0aGUgZWFnZXJseSBjb21wdXRlZCBzdGF0ZS5cbiAgICAgICAgICBuZXdTdGF0ZSA9IHVwZGF0ZS5lYWdlclN0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlICh1cGRhdGUgIT09IG51bGwgJiYgdXBkYXRlICE9PSBmaXJzdCk7XG5cbiAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IG5ld0Jhc2VRdWV1ZUZpcnN0O1xuICAgIH0gLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgIC8vIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLlxuXG5cbiAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIGhvb2suYmFzZVN0YXRlID0gbmV3QmFzZVN0YXRlO1xuICAgIGhvb2suYmFzZVF1ZXVlID0gbmV3QmFzZVF1ZXVlTGFzdDtcbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2g7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgaWYgKCEocXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7IC8vIFRoaXMgaXMgYSByZS1yZW5kZXIuIEFwcGx5IHRoZSBuZXcgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG8gdGhlIHByZXZpb3VzXG4gIC8vIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cblxuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaDtcbiAgdmFyIGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IHF1ZXVlLnBlbmRpbmc7XG4gIHZhciBuZXdTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobGFzdFJlbmRlclBoYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHF1ZXVlIGRvZXNuJ3QgcGVyc2lzdCBwYXN0IHRoaXMgcmVuZGVyIHBhc3MuXG4gICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgdmFyIGZpcnN0UmVuZGVyUGhhc2VVcGRhdGUgPSBsYXN0UmVuZGVyUGhhc2VVcGRhdGUubmV4dDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZTtcblxuICAgIGRvIHtcbiAgICAgIC8vIFByb2Nlc3MgdGhpcyByZW5kZXIgcGhhc2UgdXBkYXRlLiBXZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoZVxuICAgICAgLy8gcHJpb3JpdHkgYmVjYXVzZSBpdCB3aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBhcyB0aGUgY3VycmVudFxuICAgICAgLy8gcmVuZGVyJ3MuXG4gICAgICB2YXIgYWN0aW9uID0gdXBkYXRlLmFjdGlvbjtcbiAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSk7IC8vIE1hcmsgdGhhdCB0aGUgZmliZXIgcGVyZm9ybWVkIHdvcmssIGJ1dCBvbmx5IGlmIHRoZSBuZXcgc3RhdGUgaXNcbiAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuXG4gICAgaWYgKCFvYmplY3RJcyhuZXdTdGF0ZSwgaG9vay5tZW1vaXplZFN0YXRlKSkge1xuICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICB9XG5cbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTsgLy8gRG9uJ3QgcGVyc2lzdCB0aGUgc3RhdGUgYWNjdW11bGF0ZWQgZnJvbSB0aGUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG9cbiAgICAvLyB0aGUgYmFzZSBzdGF0ZSB1bmxlc3MgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgIC8vIFRPRE86IE5vdCBzdXJlIGlmIHRoaXMgaXMgdGhlIGRlc2lyZWQgc2VtYW50aWNzLCBidXQgaXQncyB3aGF0IHdlXG4gICAgLy8gZG8gZm9yIGdEU0ZQLiBJIGNhbid0IHJlbWVtYmVyIHdoeS5cblxuICAgIGlmIChob29rLmJhc2VRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAgcmV0dXJuIFtuZXdTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KSB7XG4gIHtcbiAgICB3YXJuQWJvdXRNdWx0aXBsZVJlbmRlcmVyc0RFVihzb3VyY2UpO1xuICB9XG5cbiAgdmFyIGdldFZlcnNpb24gPSBzb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihzb3VyY2UuX3NvdXJjZSk7IC8vIElzIGl0IHNhZmUgZm9yIHRoaXMgY29tcG9uZW50IHRvIHJlYWQgZnJvbSB0aGlzIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyP1xuXG4gIHZhciBpc1NhZmVUb1JlYWRGcm9tU291cmNlID0gZmFsc2U7IC8vIENoZWNrIHRoZSB2ZXJzaW9uIGZpcnN0LlxuICAvLyBJZiB0aGlzIHJlbmRlciBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQgd2l0aCBhIHNwZWNpZmljIHZlcnNpb24sXG4gIC8vIHdlIGNhbiB1c2UgaXQgYWxvbmUgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBzYWZlbHkgcmVhZCBmcm9tIHRoZSBzb3VyY2UuXG5cbiAgdmFyIGN1cnJlbnRSZW5kZXJWZXJzaW9uID0gZ2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKHNvdXJjZSk7XG5cbiAgaWYgKGN1cnJlbnRSZW5kZXJWZXJzaW9uICE9PSBudWxsKSB7XG4gICAgLy8gSXQncyBzYWZlIHRvIHJlYWQgaWYgdGhlIHN0b3JlIGhhc24ndCBiZWVuIG11dGF0ZWQgc2luY2UgdGhlIGxhc3QgdGltZVxuICAgIC8vIHdlIHJlYWQgc29tZXRoaW5nLlxuICAgIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBjdXJyZW50UmVuZGVyVmVyc2lvbiA9PT0gdmVyc2lvbjtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIHZlcnNpb24sIHRoZW4gdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSByZWFkIGZyb20gdGhlXG4gICAgLy8gc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgcGFzcywgc28gd2UgbmVlZCB0byBkbyBhIGJpdCBtb3JlIHdvcmsuXG4gICAgLy8gV2hhdCB3ZSBuZWVkIHRvIGRldGVybWluZSBpcyBpZiB0aGVyZSBhcmUgYW55IGhvb2tzIHRoYXQgYWxyZWFkeVxuICAgIC8vIHN1YnNjcmliZWQgdG8gdGhlIHNvdXJjZSwgYW5kIGlmIHNvLCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcGVuZGluZ1xuICAgIC8vIG11dGF0aW9ucyB0aGF0IGhhdmVuJ3QgYmVlbiBzeW5jaHJvbml6ZWQgeWV0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgbXV0YXRpb25zLCB0aGVuIGByb290Lm11dGFibGVSZWFkTGFuZXNgIHdpbGwgYmVcbiAgICAvLyBlbXB0eSwgYW5kIHdlIGtub3cgd2UgY2FuIHNhZmVseSByZWFkLlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgKmFyZSogcGVuZGluZyBtdXRhdGlvbnMsIHdlIG1heSBzdGlsbCBiZSBhYmxlIHRvIHNhZmVseSByZWFkXG4gICAgLy8gaWYgdGhlIGN1cnJlbnRseSByZW5kZXJpbmcgbGFuZXMgYXJlIGluY2x1c2l2ZSBvZiB0aGUgcGVuZGluZyBtdXRhdGlvblxuICAgIC8vIGxhbmVzLCBzaW5jZSB0aGF0IGd1YXJhbnRlZXMgdGhhdCB0aGUgdmFsdWUgd2UncmUgYWJvdXQgdG8gcmVhZCBmcm9tXG4gICAgLy8gdGhlIHNvdXJjZSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZHVyaW5nIHRoZSBtb3N0XG4gICAgLy8gcmVjZW50IG11dGF0aW9uLlxuICAgIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHJvb3QubXV0YWJsZVJlYWRMYW5lcyk7XG5cbiAgICBpZiAoaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSkge1xuICAgICAgLy8gSWYgaXQncyBzYWZlIHRvIHJlYWQgZnJvbSB0aGlzIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgLy8gc3RvcmUgdGhlIHZlcnNpb24gaW4gY2FzZSBvdGhlciBjb21wb25lbnRzIHJlYWQgZnJvbSBpdC5cbiAgICAgIC8vIEEgY2hhbmdlZCB2ZXJzaW9uIG51bWJlciB3aWxsIGxldCB0aG9zZSBjb21wb25lbnRzIGtub3cgdG8gdGhyb3cgYW5kIHJlc3RhcnQgdGhlIHJlbmRlci5cbiAgICAgIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihzb3VyY2UsIHZlcnNpb24pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc1NhZmVUb1JlYWRGcm9tU291cmNlKSB7XG4gICAgdmFyIHNuYXBzaG90ID0gZ2V0U25hcHNob3Qoc291cmNlLl9zb3VyY2UpO1xuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBzbmFwc2hvdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignTXV0YWJsZSBzb3VyY2Ugc2hvdWxkIG5vdCByZXR1cm4gYSBmdW5jdGlvbiBhcyB0aGUgc25hcHNob3QgdmFsdWUuICcgKyAnRnVuY3Rpb25zIG1heSBjbG9zZSBvdmVyIG11dGFibGUgdmFsdWVzIGFuZCBjYXVzZSB0ZWFyaW5nLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzbmFwc2hvdDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIHNwZWNpYWwgY2FzZSBvZiBhIG11dGFibGUgc291cmNlIGJlaW5nIHNoYXJlZCBiZXR3ZWVuIHJlbmRlcmVycy5cbiAgICAvLyBJbiB0aGF0IGNhc2UsIGlmIHRoZSBzb3VyY2UgaXMgbXV0YXRlZCBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kIHJlbmRlcmVyLFxuICAgIC8vIFRoZSBzZWNvbmQgcmVuZGVyZXIgZG9uJ3Qga25vdyB0aGF0IGl0IG5lZWRzIHRvIHJlc2V0IHRoZSBXSVAgdmVyc2lvbiBkdXJpbmcgdW53aW5kLFxuICAgIC8vIChiZWNhdXNlIHRoZSBob29rIG9ubHkgbWFya3Mgc291cmNlcyBhcyBkaXJ0eSBpZiBpdCdzIHdyaXR0ZW4gdG8gdGhlaXIgV0lQIHZlcnNpb24pLlxuICAgIC8vIFRoYXQgd291bGQgY2F1c2UgdGhpcyB0ZWFyIGNoZWNrIHRvIHRocm93IGFnYWluIGFuZCBldmVudHVhbGx5IGJlIHZpc2libGUgdG8gdGhlIHVzZXIuXG4gICAgLy8gV2UgY2FuIGF2b2lkIHRoaXMgaW5maW5pdGUgbG9vcCBieSBleHBsaWNpdGx5IG1hcmtpbmcgdGhlIHNvdXJjZSBhcyBkaXJ0eS5cbiAgICAvL1xuICAgIC8vIFRoaXMgY2FuIGxlYWQgdG8gdGVhcmluZyBpbiB0aGUgZmlyc3QgcmVuZGVyZXIgd2hlbiBpdCByZXN1bWVzLFxuICAgIC8vIGJ1dCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IHRoYXQgKHNob3J0IG9mIHRocm93aW5nIGhlcmUgYW5kIHJlZnVzaW5nIHRvIGNvbnRpbnVlIHRoZSByZW5kZXIpLlxuICAgIG1hcmtTb3VyY2VBc0RpcnR5KHNvdXJjZSk7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCByZWFkIGZyb20gbXV0YWJsZSBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciB3aXRob3V0IHRlYXJpbmcuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVzZU11dGFibGVTb3VyY2UoaG9vaywgc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgaWYgKCEocm9vdCAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZ2V0VmVyc2lvbiA9IHNvdXJjZS5fZ2V0VmVyc2lvbjtcbiAgdmFyIHZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTtcbiAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuXG4gIHZhciBfZGlzcGF0Y2hlciR1c2VTdGF0ZSA9IGRpc3BhdGNoZXIudXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KTtcbiAgfSksXG4gICAgICBjdXJyZW50U25hcHNob3QgPSBfZGlzcGF0Y2hlciR1c2VTdGF0ZVswXSxcbiAgICAgIHNldFNuYXBzaG90ID0gX2Rpc3BhdGNoZXIkdXNlU3RhdGVbMV07XG5cbiAgdmFyIHNuYXBzaG90ID0gY3VycmVudFNuYXBzaG90OyAvLyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBzdGF0ZSBob29rIGFzIHdlbGwuXG4gIC8vIFdlIHVzZSBpdCB0byBjbGVhciB0aGUgcGVuZGluZyB1cGRhdGUgcXVldWUgaWYgd2UgaGF2ZSBhIG5ldyBzb3VyY2UuXG5cbiAgdmFyIHN0YXRlSG9vayA9IHdvcmtJblByb2dyZXNzSG9vaztcbiAgdmFyIG1lbW9pemVkU3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gIHZhciByZWZzID0gbWVtb2l6ZWRTdGF0ZS5yZWZzO1xuICB2YXIgcHJldkdldFNuYXBzaG90ID0gcmVmcy5nZXRTbmFwc2hvdDtcbiAgdmFyIHByZXZTb3VyY2UgPSBtZW1vaXplZFN0YXRlLnNvdXJjZTtcbiAgdmFyIHByZXZTdWJzY3JpYmUgPSBtZW1vaXplZFN0YXRlLnN1YnNjcmliZTtcbiAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0ge1xuICAgIHJlZnM6IHJlZnMsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmVcbiAgfTsgLy8gU3luYyB0aGUgdmFsdWVzIG5lZWRlZCBieSBvdXIgc3Vic2NyaXB0aW9uIGhhbmRsZXIgYWZ0ZXIgZWFjaCBjb21taXQuXG5cbiAgZGlzcGF0Y2hlci51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJlZnMuZ2V0U25hcHNob3QgPSBnZXRTbmFwc2hvdDsgLy8gTm9ybWFsbHkgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uIGZvciBhIHN0YXRlIGhvb2sgbmV2ZXIgY2hhbmdlcyxcbiAgICAvLyBidXQgdGhpcyBob29rIHJlY3JlYXRlcyB0aGUgcXVldWUgaW4gY2VydGFpbiBjYXNlcyAgdG8gYXZvaWQgdXBkYXRlcyBmcm9tIHN0YWxlIHNvdXJjZXMuXG4gICAgLy8gaGFuZGxlQ2hhbmdlKCkgYmVsb3cgbmVlZHMgdG8gcmVmZXJlbmNlIHRoZSBkaXNwYXRjaCBmdW5jdGlvbiB3aXRob3V0IHJlLXN1YnNjcmliaW5nLFxuICAgIC8vIHNvIHdlIHVzZSBhIHJlZiB0byBlbnN1cmUgdGhhdCBpdCBhbHdheXMgaGFzIHRoZSBsYXRlc3QgdmVyc2lvbi5cblxuICAgIHJlZnMuc2V0U25hcHNob3QgPSBzZXRTbmFwc2hvdDsgLy8gQ2hlY2sgZm9yIGEgcG9zc2libGUgY2hhbmdlIGJldHdlZW4gd2hlbiB3ZSBsYXN0IHJlbmRlcmVkIG5vdy5cblxuICAgIHZhciBtYXliZU5ld1ZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTtcblxuICAgIGlmICghb2JqZWN0SXModmVyc2lvbiwgbWF5YmVOZXdWZXJzaW9uKSkge1xuICAgICAgdmFyIG1heWJlTmV3U25hcHNob3QgPSBnZXRTbmFwc2hvdChzb3VyY2UuX3NvdXJjZSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXliZU5ld1NuYXBzaG90ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZXJyb3IoJ011dGFibGUgc291cmNlIHNob3VsZCBub3QgcmV0dXJuIGEgZnVuY3Rpb24gYXMgdGhlIHNuYXBzaG90IHZhbHVlLiAnICsgJ0Z1bmN0aW9ucyBtYXkgY2xvc2Ugb3ZlciBtdXRhYmxlIHZhbHVlcyBhbmQgY2F1c2UgdGVhcmluZy4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIW9iamVjdElzKHNuYXBzaG90LCBtYXliZU5ld1NuYXBzaG90KSkge1xuICAgICAgICBzZXRTbmFwc2hvdChtYXliZU5ld1NuYXBzaG90KTtcbiAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICAgIG1hcmtSb290TXV0YWJsZVJlYWQocm9vdCwgbGFuZSk7XG4gICAgICB9IC8vIElmIHRoZSBzb3VyY2UgbXV0YXRlZCBiZXR3ZWVuIHJlbmRlciBhbmQgbm93LFxuICAgICAgLy8gdGhlcmUgbWF5IGJlIHN0YXRlIHVwZGF0ZXMgYWxyZWFkeSBzY2hlZHVsZWQgZnJvbSB0aGUgb2xkIHNvdXJjZS5cbiAgICAgIC8vIEVudGFuZ2xlIHRoZSB1cGRhdGVzIHNvIHRoYXQgdGhleSByZW5kZXIgaW4gdGhlIHNhbWUgYmF0Y2guXG5cblxuICAgICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgcm9vdC5tdXRhYmxlUmVhZExhbmVzKTtcbiAgICB9XG4gIH0sIFtnZXRTbmFwc2hvdCwgc291cmNlLCBzdWJzY3JpYmVdKTsgLy8gSWYgd2UgZ290IGEgbmV3IHNvdXJjZSBvciBzdWJzY3JpYmUgZnVuY3Rpb24sIHJlLXN1YnNjcmliZSBpbiBhIHBhc3NpdmUgZWZmZWN0LlxuXG4gIGRpc3BhdGNoZXIudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGxhdGVzdEdldFNuYXBzaG90ID0gcmVmcy5nZXRTbmFwc2hvdDtcbiAgICAgIHZhciBsYXRlc3RTZXRTbmFwc2hvdCA9IHJlZnMuc2V0U25hcHNob3Q7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxhdGVzdFNldFNuYXBzaG90KGxhdGVzdEdldFNuYXBzaG90KHNvdXJjZS5fc291cmNlKSk7IC8vIFJlY29yZCBhIHBlbmRpbmcgbXV0YWJsZSBzb3VyY2UgdXBkYXRlIHdpdGggdGhlIHNhbWUgZXhwaXJhdGlvbiB0aW1lLlxuXG4gICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgICBtYXJrUm9vdE11dGFibGVSZWFkKHJvb3QsIGxhbmUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQSBzZWxlY3RvciBtaWdodCB0aHJvdyBhZnRlciBhIHNvdXJjZSBtdXRhdGlvbi5cbiAgICAgICAgLy8gZS5nLiBpdCBtaWdodCB0cnkgdG8gcmVhZCBmcm9tIGEgcGFydCBvZiB0aGUgc3RvcmUgdGhhdCBubyBsb25nZXIgZXhpc3RzLlxuICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIHN0aWxsIHNjaGVkdWxlIGFuIHVwZGF0ZSB3aXRoIFJlYWN0LlxuICAgICAgICAvLyBXb3JzdCBjYXNlIHRoZSBzZWxlY3RvciB3aWxsIHRocm93IGFnYWluIGFuZCB0aGVuIGFuIGVycm9yIGJvdW5kYXJ5IHdpbGwgaGFuZGxlIGl0LlxuICAgICAgICBsYXRlc3RTZXRTbmFwc2hvdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgdW5zdWJzY3JpYmUgPSBzdWJzY3JpYmUoc291cmNlLl9zb3VyY2UsIGhhbmRsZUNoYW5nZSk7XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHVuc3Vic2NyaWJlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdNdXRhYmxlIHNvdXJjZSBzdWJzY3JpYmUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYW4gdW5zdWJzY3JpYmUgZnVuY3Rpb24uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9LCBbc291cmNlLCBzdWJzY3JpYmVdKTsgLy8gSWYgYW55IG9mIHRoZSBpbnB1dHMgdG8gdXNlTXV0YWJsZVNvdXJjZSBjaGFuZ2UsIHJlYWRpbmcgaXMgcG90ZW50aWFsbHkgdW5zYWZlLlxuICAvL1xuICAvLyBJZiBlaXRoZXIgdGhlIHNvdXJjZSBvciB0aGUgc3Vic2NyaXB0aW9uIGhhdmUgY2hhbmdlZCB3ZSBjYW4ndCBjYW4ndCB0cnVzdCB0aGUgdXBkYXRlIHF1ZXVlLlxuICAvLyBNYXliZSB0aGUgc291cmNlIGNoYW5nZWQgaW4gYSB3YXkgdGhhdCB0aGUgb2xkIHN1YnNjcmlwdGlvbiBpZ25vcmVkIGJ1dCB0aGUgbmV3IG9uZSBkZXBlbmRzIG9uLlxuICAvL1xuICAvLyBJZiB0aGUgZ2V0U25hcHNob3QgZnVuY3Rpb24gY2hhbmdlZCwgd2UgYWxzbyBzaG91bGRuJ3QgcmVseSBvbiB0aGUgdXBkYXRlIHF1ZXVlLlxuICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHVuZGVybHlpbmcgc291cmNlIHdhcyBtdXRhdGVkIGJldHdlZW4gdGhlIHdoZW4gdGhlIGxhc3QgXCJjaGFuZ2VcIiBldmVudCBmaXJlZCxcbiAgLy8gYW5kIHdoZW4gdGhlIGN1cnJlbnQgcmVuZGVyICh3aXRoIHRoZSBuZXcgZ2V0U25hcHNob3QgZnVuY3Rpb24pIGlzIHByb2Nlc3NlZC5cbiAgLy9cbiAgLy8gSW4gYm90aCBjYXNlcywgd2UgbmVlZCB0byB0aHJvdyBhd2F5IHBlbmRpbmcgdXBkYXRlcyAoc2luY2UgdGhleSBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50KVxuICAvLyBhbmQgdHJlYXQgcmVhZGluZyBmcm9tIHRoZSBzb3VyY2UgYXMgd2UgZG8gaW4gdGhlIG1vdW50IGNhc2UuXG5cbiAgaWYgKCFvYmplY3RJcyhwcmV2R2V0U25hcHNob3QsIGdldFNuYXBzaG90KSB8fCAhb2JqZWN0SXMocHJldlNvdXJjZSwgc291cmNlKSB8fCAhb2JqZWN0SXMocHJldlN1YnNjcmliZSwgc3Vic2NyaWJlKSkge1xuICAgIC8vIENyZWF0ZSBhIG5ldyBxdWV1ZSBhbmQgc2V0U3RhdGUgbWV0aG9kLFxuICAgIC8vIFNvIGlmIHRoZXJlIGFyZSBpbnRlcmxlYXZlZCB1cGRhdGVzLCB0aGV5IGdldCBwdXNoZWQgdG8gdGhlIG9sZGVyIHF1ZXVlLlxuICAgIC8vIFdoZW4gdGhpcyBiZWNvbWVzIGN1cnJlbnQsIHRoZSBwcmV2aW91cyBxdWV1ZSBhbmQgZGlzcGF0Y2ggbWV0aG9kIHdpbGwgYmUgZGlzY2FyZGVkLFxuICAgIC8vIGluY2x1ZGluZyBhbnkgaW50ZXJsZWF2aW5nIHVwZGF0ZXMgdGhhdCBvY2N1ci5cbiAgICB2YXIgbmV3UXVldWUgPSB7XG4gICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBzbmFwc2hvdFxuICAgIH07XG4gICAgbmV3UXVldWUuZGlzcGF0Y2ggPSBzZXRTbmFwc2hvdCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgbmV3UXVldWUpO1xuICAgIHN0YXRlSG9vay5xdWV1ZSA9IG5ld1F1ZXVlO1xuICAgIHN0YXRlSG9vay5iYXNlUXVldWUgPSBudWxsO1xuICAgIHNuYXBzaG90ID0gcmVhZEZyb21VbnN1YmNyaWJlZE11dGFibGVTb3VyY2Uocm9vdCwgc291cmNlLCBnZXRTbmFwc2hvdCk7XG4gICAgc3RhdGVIb29rLm1lbW9pemVkU3RhdGUgPSBzdGF0ZUhvb2suYmFzZVN0YXRlID0gc25hcHNob3Q7XG4gIH1cblxuICByZXR1cm4gc25hcHNob3Q7XG59XG5cbmZ1bmN0aW9uIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgcmVmczoge1xuICAgICAgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90LFxuICAgICAgc2V0U25hcHNob3Q6IG51bGxcbiAgICB9LFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlXG4gIH07XG4gIHJldHVybiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHJldHVybiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG59XG5cbmZ1bmN0aW9uIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcblxuICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWU6IEZsb3cgZG9lc24ndCBsaWtlIG1peGVkIHR5cGVzXG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlKCk7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZSA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIHF1ZXVlKTtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHJldHVybiB1cGRhdGVSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG59XG5cbmZ1bmN0aW9uIHB1c2hFZmZlY3QodGFnLCBjcmVhdGUsIGRlc3Ryb3ksIGRlcHMpIHtcbiAgdmFyIGVmZmVjdCA9IHtcbiAgICB0YWc6IHRhZyxcbiAgICBjcmVhdGU6IGNyZWF0ZSxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIGRlcHM6IGRlcHMsXG4gICAgLy8gQ2lyY3VsYXJcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIHZhciBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWU7XG5cbiAgaWYgKGNvbXBvbmVudFVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCk7XG4gICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZSA9IGNvbXBvbmVudFVwZGF0ZVF1ZXVlO1xuICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGFzdEVmZmVjdCA9IGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICBsYXN0RWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gICAgICBlZmZlY3QubmV4dCA9IGZpcnN0RWZmZWN0O1xuICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWZmZWN0O1xufVxuXG5mdW5jdGlvbiBtb3VudFJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcmVmID0ge1xuICAgIGN1cnJlbnQ6IGluaXRpYWxWYWx1ZVxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWYpO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcmVmO1xuICByZXR1cm4gcmVmO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHJldHVybiBob29rLm1lbW9pemVkU3RhdGU7XG59XG5cbmZ1bmN0aW9uIG1vdW50RWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgaG9va0ZsYWdzLCBjcmVhdGUsIHVuZGVmaW5lZCwgbmV4dERlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICBpZiAoY3VycmVudEhvb2sgIT09IG51bGwpIHtcbiAgICB2YXIgcHJldkVmZmVjdCA9IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGU7XG4gICAgZGVzdHJveSA9IHByZXZFZmZlY3QuZGVzdHJveTtcblxuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldkVmZmVjdC5kZXBzO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcHVzaEVmZmVjdChob29rRmxhZ3MsIGNyZWF0ZSwgZGVzdHJveSwgbmV4dERlcHMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IGhvb2tGbGFncywgY3JlYXRlLCBkZXN0cm95LCBuZXh0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSB8IFBhc3NpdmUsIFBhc3NpdmUkMSwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUgfCBQYXNzaXZlLCBQYXNzaXZlJDEsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0KGNyZWF0ZSwgcmVmKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlZkNhbGxiYWNrID0gcmVmO1xuXG4gICAgdmFyIF9pbnN0ID0gY3JlYXRlKCk7XG5cbiAgICByZWZDYWxsYmFjayhfaW5zdCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZkNhbGxiYWNrKG51bGwpO1xuICAgIH07XG4gIH0gZWxzZSBpZiAocmVmICE9PSBudWxsICYmIHJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlZk9iamVjdCA9IHJlZjtcblxuICAgIHtcbiAgICAgIGlmICghcmVmT2JqZWN0Lmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBmaXJzdCBhcmd1bWVudCB0byBlaXRoZXIgYmUgYSAnICsgJ3JlZiBjYWxsYmFjayBvciBSZWFjdC5jcmVhdGVSZWYoKSBvYmplY3QuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsICdhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMocmVmT2JqZWN0KS5qb2luKCcsICcpICsgJ30nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgX2luc3QyID0gY3JlYXRlKCk7XG5cbiAgICByZWZPYmplY3QuY3VycmVudCA9IF9pbnN0MjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmVmT2JqZWN0LmN1cnJlbnQgPSBudWxsO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbiAnICsgJ3RoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY3JlYXRlICE9PSBudWxsID8gdHlwZW9mIGNyZWF0ZSA6ICdudWxsJyk7XG4gICAgfVxuICB9IC8vIFRPRE86IElmIGRlcHMgYXJlIHByb3ZpZGVkLCBzaG91bGQgd2Ugc2tpcCBjb21wYXJpbmcgdGhlIHJlZiBpdHNlbGY/XG5cblxuICB2YXIgZWZmZWN0RGVwcyA9IGRlcHMgIT09IG51bGwgJiYgZGVwcyAhPT0gdW5kZWZpbmVkID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSwgZWZmZWN0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uICcgKyAndGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjcmVhdGUgIT09IG51bGwgPyB0eXBlb2YgY3JlYXRlIDogJ251bGwnKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogSWYgZGVwcyBhcmUgcHJvdmlkZWQsIHNob3VsZCB3ZSBza2lwIGNvbXBhcmluZyB0aGUgcmVmIGl0c2VsZj9cblxuXG4gIHZhciBlZmZlY3REZXBzID0gZGVwcyAhPT0gbnVsbCAmJiBkZXBzICE9PSB1bmRlZmluZWQgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSwgZWZmZWN0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50RGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pIHsvLyBUaGlzIGhvb2sgaXMgbm9ybWFsbHkgYSBuby1vcC5cbiAgLy8gVGhlIHJlYWN0LWRlYnVnLWhvb2tzIHBhY2thZ2UgaW5qZWN0cyBpdHMgb3duIGltcGxlbWVudGF0aW9uXG4gIC8vIHNvIHRoYXQgZS5nLiBEZXZUb29scyBjYW4gZGlzcGxheSBjdXN0b20gaG9vayB2YWx1ZXMuXG59XG5cbnZhciB1cGRhdGVEZWJ1Z1ZhbHVlID0gbW91bnREZWJ1Z1ZhbHVlO1xuXG5mdW5jdGlvbiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICByZXR1cm4gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZTdGF0ZVsxXTtcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gIHJldHVybiBjYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gbW91bnRNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICByZXR1cm4gbmV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIEFzc3VtZSB0aGVzZSBhcmUgZGVmaW5lZC4gSWYgdGhleSdyZSBub3QsIGFyZUhvb2tJbnB1dHNFcXVhbCB3aWxsIHdhcm4uXG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2U3RhdGVbMV07XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtuZXh0VmFsdWUsIG5leHREZXBzXTtcbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfbW91bnRTdGF0ZSA9IG1vdW50U3RhdGUodmFsdWUpLFxuICAgICAgcHJldlZhbHVlID0gX21vdW50U3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF9tb3VudFN0YXRlWzFdO1xuXG4gIG1vdW50RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgIHRyeSB7XG4gICAgICBzZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIF91cGRhdGVTdGF0ZSA9IHVwZGF0ZVN0YXRlKCksXG4gICAgICBwcmV2VmFsdWUgPSBfdXBkYXRlU3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF91cGRhdGVTdGF0ZVsxXTtcblxuICB1cGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfcmVyZW5kZXJTdGF0ZSA9IHJlcmVuZGVyU3RhdGUoKSxcbiAgICAgIHByZXZWYWx1ZSA9IF9yZXJlbmRlclN0YXRlWzBdLFxuICAgICAgc2V0VmFsdWUgPSBfcmVyZW5kZXJTdGF0ZVsxXTtcblxuICB1cGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gc3RhcnRUcmFuc2l0aW9uKHNldFBlbmRpbmcsIGNhbGxiYWNrKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcblxuICB7XG4gICAgcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCA8IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgPyBVc2VyQmxvY2tpbmdQcmlvcml0eSQyIDogcHJpb3JpdHlMZXZlbCwgZnVuY3Rpb24gKCkge1xuICAgICAgc2V0UGVuZGluZyh0cnVlKTtcbiAgICB9KTtcbiAgICBydW5XaXRoUHJpb3JpdHkkMShwcmlvcml0eUxldmVsID4gTm9ybWFsUHJpb3JpdHkkMSA/IE5vcm1hbFByaW9yaXR5JDEgOiBwcmlvcml0eUxldmVsLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRQZW5kaW5nKGZhbHNlKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50VHJhbnNpdGlvbigpIHtcbiAgdmFyIF9tb3VudFN0YXRlMiA9IG1vdW50U3RhdGUoZmFsc2UpLFxuICAgICAgaXNQZW5kaW5nID0gX21vdW50U3RhdGUyWzBdLFxuICAgICAgc2V0UGVuZGluZyA9IF9tb3VudFN0YXRlMlsxXTsgLy8gVGhlIGBzdGFydGAgbWV0aG9kIGNhbiBiZSBzdG9yZWQgb24gYSByZWYsIHNpbmNlIGBzZXRQZW5kaW5nYFxuICAvLyBuZXZlciBjaGFuZ2VzLlxuXG5cbiAgdmFyIHN0YXJ0ID0gc3RhcnRUcmFuc2l0aW9uLmJpbmQobnVsbCwgc2V0UGVuZGluZyk7XG4gIG1vdW50UmVmKHN0YXJ0KTtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVHJhbnNpdGlvbigpIHtcbiAgdmFyIF91cGRhdGVTdGF0ZTIgPSB1cGRhdGVTdGF0ZSgpLFxuICAgICAgaXNQZW5kaW5nID0gX3VwZGF0ZVN0YXRlMlswXTtcblxuICB2YXIgc3RhcnRSZWYgPSB1cGRhdGVSZWYoKTtcbiAgdmFyIHN0YXJ0ID0gc3RhcnRSZWYuY3VycmVudDtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJUcmFuc2l0aW9uKCkge1xuICB2YXIgX3JlcmVuZGVyU3RhdGUyID0gcmVyZW5kZXJTdGF0ZSgpLFxuICAgICAgaXNQZW5kaW5nID0gX3JlcmVuZGVyU3RhdGUyWzBdO1xuXG4gIHZhciBzdGFydFJlZiA9IHVwZGF0ZVJlZigpO1xuICB2YXIgc3RhcnQgPSBzdGFydFJlZi5jdXJyZW50O1xuICByZXR1cm4gW3N0YXJ0LCBpc1BlbmRpbmddO1xufVxuXG52YXIgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0SXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZUluREVWKCkge1xuICB7XG4gICAgcmV0dXJuIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uT3BhcXVlSWRlbnRpZmllckFjY2Vzc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICAvLyBUT0RPOiBTaG91bGQgd2FybiBpbiBlZmZlY3RzIGFuZCBjYWxsYmFja3MsIHRvb1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICBpZiAoZ2V0SXNSZW5kZXJpbmcoKSAmJiAhZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcltuYW1lXSkge1xuICAgICAgZXJyb3IoJ1RoZSBvYmplY3QgcGFzc2VkIGJhY2sgZnJvbSB1c2VPcGFxdWVJZGVudGlmaWVyIGlzIG1lYW50IHRvIGJlICcgKyAncGFzc2VkIHRocm91Z2ggdG8gYXR0cmlidXRlcyBvbmx5LiBEbyBub3QgcmVhZCB0aGUgJyArICd2YWx1ZSBkaXJlY3RseS4nKTtcblxuICAgICAgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcltuYW1lXSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50T3BhcXVlSWRlbnRpZmllcigpIHtcbiAgdmFyIG1ha2VJZCA9ICBtYWtlQ2xpZW50SWRJbkRFVi5iaW5kKG51bGwsIHdhcm5Pbk9wYXF1ZUlkZW50aWZpZXJBY2Nlc3NJbkRFVi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpKSA7XG5cbiAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICB2YXIgZGlkVXBncmFkZSA9IGZhbHNlO1xuICAgIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG5cbiAgICB2YXIgcmVhZFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFkaWRVcGdyYWRlKSB7XG4gICAgICAgIC8vIE9ubHkgdXBncmFkZSBvbmNlLiBUaGlzIHdvcmtzIGV2ZW4gaW5zaWRlIHRoZSByZW5kZXIgcGhhc2UgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgdXBkYXRlIGlzIGFkZGVkIHRvIGEgc2hhcmVkIHF1ZXVlLCB3aGljaCBvdXRsYXN0cyB0aGVcbiAgICAgICAgLy8gaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuICAgICAgICBkaWRVcGdyYWRlID0gdHJ1ZTtcblxuICAgICAgICB7XG4gICAgICAgICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IHRydWU7XG4gICAgICAgICAgc2V0SWQobWFrZUlkKCkpO1xuICAgICAgICAgIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbiAgICAgICAgICB3YXJuT25PcGFxdWVJZGVudGlmaWVyQWNjZXNzSW5ERVYoZmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoZSBvYmplY3QgcGFzc2VkIGJhY2sgZnJvbSB1c2VPcGFxdWVJZGVudGlmaWVyIGlzIG1lYW50IHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRvIGF0dHJpYnV0ZXMgb25seS4gRG8gbm90IHJlYWQgdGhlIHZhbHVlIGRpcmVjdGx5LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGlkID0gbWFrZU9wYXF1ZUh5ZHJhdGluZ09iamVjdChyZWFkVmFsdWUpO1xuICAgIHZhciBzZXRJZCA9IG1vdW50U3RhdGUoaWQpWzFdO1xuXG4gICAgaWYgKChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gVXBkYXRlIHwgUGFzc2l2ZTtcbiAgICAgIHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgUGFzc2l2ZSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldElkKG1ha2VJZCgpKTtcbiAgICAgIH0sIHVuZGVmaW5lZCwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkO1xuICB9IGVsc2Uge1xuICAgIHZhciBfaWQgPSBtYWtlSWQoKTtcblxuICAgIG1vdW50U3RhdGUoX2lkKTtcbiAgICByZXR1cm4gX2lkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKSB7XG4gIHZhciBpZCA9IHVwZGF0ZVN0YXRlKClbMF07XG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJPcGFxdWVJZGVudGlmaWVyKCkge1xuICB2YXIgaWQgPSByZXJlbmRlclN0YXRlKClbMF07XG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb24oZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcihcIlN0YXRlIHVwZGF0ZXMgZnJvbSB0aGUgdXNlU3RhdGUoKSBhbmQgdXNlUmVkdWNlcigpIEhvb2tzIGRvbid0IHN1cHBvcnQgdGhlIFwiICsgJ3NlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyICcgKyAncmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIHRoZSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICB2YXIgdXBkYXRlID0ge1xuICAgIGxhbmU6IGxhbmUsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgZWFnZXJSZWR1Y2VyOiBudWxsLFxuICAgIGVhZ2VyU3RhdGU6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9OyAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuXG4gIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZyA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZS4gQ3JlYXRlIGEgY2lyY3VsYXIgbGlzdC5cbiAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dDtcbiAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gIH1cblxuICBxdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChmaWJlciA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlbmRlciBwaGFzZSB1cGRhdGUuIFN0YXNoIGl0IGluIGEgbGF6aWx5LWNyZWF0ZWQgbWFwIG9mXG4gICAgLy8gcXVldWUgLT4gbGlua2VkIGxpc3Qgb2YgdXBkYXRlcy4gQWZ0ZXIgdGhpcyByZW5kZXIgcGFzcywgd2UnbGwgcmVzdGFydFxuICAgIC8vIGFuZCBhcHBseSB0aGUgc3Rhc2hlZCB1cGRhdGVzIG9uIHRvcCBvZiB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGlmIChmaWJlci5sYW5lcyA9PT0gTm9MYW5lcyAmJiAoYWx0ZXJuYXRlID09PSBudWxsIHx8IGFsdGVybmF0ZS5sYW5lcyA9PT0gTm9MYW5lcykpIHtcbiAgICAgIC8vIFRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgZW1wdHksIHdoaWNoIG1lYW5zIHdlIGNhbiBlYWdlcmx5IGNvbXB1dGUgdGhlXG4gICAgICAvLyBuZXh0IHN0YXRlIGJlZm9yZSBlbnRlcmluZyB0aGUgcmVuZGVyIHBoYXNlLiBJZiB0aGUgbmV3IHN0YXRlIGlzIHRoZVxuICAgICAgLy8gc2FtZSBhcyB0aGUgY3VycmVudCBzdGF0ZSwgd2UgbWF5IGJlIGFibGUgdG8gYmFpbCBvdXQgZW50aXJlbHkuXG4gICAgICB2YXIgbGFzdFJlbmRlcmVkUmVkdWNlciA9IHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXI7XG5cbiAgICAgIGlmIChsYXN0UmVuZGVyZWRSZWR1Y2VyICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlcjtcblxuICAgICAgICB7XG4gICAgICAgICAgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gcXVldWUubGFzdFJlbmRlcmVkU3RhdGU7XG4gICAgICAgICAgdmFyIGVhZ2VyU3RhdGUgPSBsYXN0UmVuZGVyZWRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTsgLy8gU3Rhc2ggdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGUsIGFuZCB0aGUgcmVkdWNlciB1c2VkIHRvIGNvbXB1dGVcbiAgICAgICAgICAvLyBpdCwgb24gdGhlIHVwZGF0ZSBvYmplY3QuIElmIHRoZSByZWR1Y2VyIGhhc24ndCBjaGFuZ2VkIGJ5IHRoZVxuICAgICAgICAgIC8vIHRpbWUgd2UgZW50ZXIgdGhlIHJlbmRlciBwaGFzZSwgdGhlbiB0aGUgZWFnZXIgc3RhdGUgY2FuIGJlIHVzZWRcbiAgICAgICAgICAvLyB3aXRob3V0IGNhbGxpbmcgdGhlIHJlZHVjZXIgYWdhaW4uXG5cbiAgICAgICAgICB1cGRhdGUuZWFnZXJSZWR1Y2VyID0gbGFzdFJlbmRlcmVkUmVkdWNlcjtcbiAgICAgICAgICB1cGRhdGUuZWFnZXJTdGF0ZSA9IGVhZ2VyU3RhdGU7XG5cbiAgICAgICAgICBpZiAob2JqZWN0SXMoZWFnZXJTdGF0ZSwgY3VycmVudFN0YXRlKSkge1xuICAgICAgICAgICAgLy8gRmFzdCBwYXRoLiBXZSBjYW4gYmFpbCBvdXQgd2l0aG91dCBzY2hlZHVsaW5nIFJlYWN0IHRvIHJlLXJlbmRlci5cbiAgICAgICAgICAgIC8vIEl0J3Mgc3RpbGwgcG9zc2libGUgdGhhdCB3ZSdsbCBuZWVkIHRvIHJlYmFzZSB0aGlzIHVwZGF0ZSBsYXRlcixcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjb21wb25lbnQgcmUtcmVuZGVycyBmb3IgYSBkaWZmZXJlbnQgcmVhc29uIGFuZCBieSB0aGF0XG4gICAgICAgICAgICAvLyB0aW1lIHRoZSByZWR1Y2VyIGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsvLyBTdXBwcmVzcyB0aGUgZXJyb3IuIEl0IHdpbGwgdGhyb3cgYWdhaW4gaW4gdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgICAgd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGZpYmVyKTtcbiAgICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luRGV2KGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH1cbn1cblxudmFyIENvbnRleHRPbmx5RGlzcGF0Y2hlciA9IHtcbiAgcmVhZENvbnRleHQ6IHJlYWRDb250ZXh0LFxuICB1c2VDYWxsYmFjazogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VDb250ZXh0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUxheW91dEVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VNZW1vOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVJlZHVjZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlUmVmOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVN0YXRlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZURlYnVnVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRGVmZXJyZWRWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VUcmFuc2l0aW9uOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU11dGFibGVTb3VyY2U6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlT3BhcXVlSWRlbnRpZmllcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbn07XG52YXIgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcblxue1xuICB2YXIgd2FybkludmFsaWRDb250ZXh0QWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGVycm9yKCdDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiAnICsgJ0luIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuICcgKyAnSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90ICcgKyAnaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS4nKTtcbiAgfTtcblxuICB2YXIgd2FybkludmFsaWRIb29rQWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGVycm9yKCdEbyBub3QgY2FsbCBIb29rcyBpbnNpZGUgdXNlRWZmZWN0KC4uLiksIHVzZU1lbW8oLi4uKSwgb3Igb3RoZXIgYnVpbHQtaW4gSG9va3MuICcgKyAnWW91IGNhbiBvbmx5IGNhbGwgSG9va3MgYXQgdGhlIHRvcCBsZXZlbCBvZiB5b3VyIFJlYWN0IGZ1bmN0aW9uLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnKTtcbiAgfTtcblxuICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlclRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlck9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG59XG5cbnZhciBub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3c7XG52YXIgY29tbWl0VGltZSA9IDA7XG52YXIgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcblxuZnVuY3Rpb24gZ2V0Q29tbWl0VGltZSgpIHtcbiAgcmV0dXJuIGNvbW1pdFRpbWU7XG59XG5cbmZ1bmN0aW9uIHJlY29yZENvbW1pdFRpbWUoKSB7XG5cbiAgY29tbWl0VGltZSA9IG5vdyQxKCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0UHJvZmlsZXJUaW1lcihmaWJlcikge1xuXG4gIHByb2ZpbGVyU3RhcnRUaW1lID0gbm93JDEoKTtcblxuICBpZiAoZmliZXIuYWN0dWFsU3RhcnRUaW1lIDwgMCkge1xuICAgIGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA9IG5vdyQxKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoZmliZXIpIHtcblxuICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xufVxuXG5mdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGZpYmVyLCBvdmVycmlkZUJhc2VUaW1lKSB7XG5cbiAgaWYgKHByb2ZpbGVyU3RhcnRUaW1lID49IDApIHtcbiAgICB2YXIgZWxhcHNlZFRpbWUgPSBub3ckMSgpIC0gcHJvZmlsZXJTdGFydFRpbWU7XG4gICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG5cbiAgICBpZiAob3ZlcnJpZGVCYXNlVGltZSkge1xuICAgICAgZmliZXIuc2VsZkJhc2VEdXJhdGlvbiA9IGVsYXBzZWRUaW1lO1xuICAgIH1cblxuICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJhbnNmZXJBY3R1YWxEdXJhdGlvbihmaWJlcikge1xuICAvLyBUcmFuc2ZlciB0aW1lIHNwZW50IHJlbmRlcmluZyB0aGVzZSBjaGlsZHJlbiBzbyB3ZSBkb24ndCBsb3NlIGl0XG4gIC8vIGFmdGVyIHdlIHJlcmVuZGVyLiBUaGlzIGlzIHVzZWQgYXMgYSBoZWxwZXIgaW4gc3BlY2lhbCBjYXNlc1xuICAvLyB3aGVyZSB3ZSBzaG91bGQgY291bnQgdGhlIHdvcmsgb2YgbXVsdGlwbGUgcGFzc2VzLlxuICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQpIHtcbiAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG52YXIgZGlkV2FybkFib3V0QmFkQ2xhc3M7XG52YXIgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnM7XG52YXIgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcztcbnZhciBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcjtcbnZhciBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucztcblxue1xuICBkaWRXYXJuQWJvdXRCYWRDbGFzcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyID0ge307XG4gIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zID0ge307XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhIGZyZXNoIG5ldyBjb21wb25lbnQgdGhhdCBoYXNuJ3QgYmVlbiByZW5kZXJlZCB5ZXQsIHdlXG4gICAgLy8gd29uJ3QgdXBkYXRlIGl0cyBjaGlsZCBzZXQgYnkgYXBwbHlpbmcgbWluaW1hbCBzaWRlLWVmZmVjdHMuIEluc3RlYWQsXG4gICAgLy8gd2Ugd2lsbCBhZGQgdGhlbSBhbGwgdG8gdGhlIGNoaWxkIGJlZm9yZSBpdCBnZXRzIHJlbmRlcmVkLiBUaGF0IG1lYW5zXG4gICAgLy8gd2UgY2FuIG9wdGltaXplIHRoaXMgcmVjb25jaWxpYXRpb24gcGFzcyBieSBub3QgdHJhY2tpbmcgc2lkZS1lZmZlY3RzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgY2hpbGQgaXMgdGhlIHNhbWUgYXMgdGhlIHdvcmsgaW4gcHJvZ3Jlc3MsIGl0IG1lYW5zIHRoYXRcbiAgICAvLyB3ZSBoYXZlbid0IHlldCBzdGFydGVkIGFueSB3b3JrIG9uIHRoZXNlIGNoaWxkcmVuLiBUaGVyZWZvcmUsIHdlIHVzZVxuICAgIC8vIHRoZSBjbG9uZSBhbGdvcml0aG0gdG8gY3JlYXRlIGEgY29weSBvZiBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4uXG4gICAgLy8gSWYgd2UgaGFkIGFueSBwcm9ncmVzc2VkIHdvcmsgYWxyZWFkeSwgdGhhdCBpcyBpbnZhbGlkIGF0IHRoaXMgcG9pbnQgc29cbiAgICAvLyBsZXQncyB0aHJvdyBpdCBvdXQuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yY2VVbm1vdW50Q3VycmVudEFuZFJlY29uY2lsZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGZvcmsgb2YgcmVjb25jaWxlQ2hpbGRyZW4uIEl0J3MgdXNlZCBpbiBjYXNlcyB3aGVyZSB3ZVxuICAvLyB3YW50IHRvIHJlY29uY2lsZSB3aXRob3V0IG1hdGNoaW5nIGFnYWluc3QgdGhlIGV4aXN0aW5nIHNldC4gVGhpcyBoYXMgdGhlXG4gIC8vIGVmZmVjdCBvZiBhbGwgY3VycmVudCBjaGlsZHJlbiBiZWluZyB1bm1vdW50ZWQ7IGV2ZW4gaWYgdGhlIHR5cGUgYW5kIGtleVxuICAvLyBhcmUgdGhlIHNhbWUsIHRoZSBvbGQgY2hpbGQgaXMgdW5tb3VudGVkIGFuZCBhIG5ldyBjaGlsZCBpcyBjcmVhdGVkLlxuICAvL1xuICAvLyBUbyBkbyB0aGlzLCB3ZSdyZSBnb2luZyB0byBnbyB0aHJvdWdoIHRoZSByZWNvbmNpbGUgYWxnb3JpdGhtIHR3aWNlLiBJblxuICAvLyB0aGUgZmlyc3QgcGFzcywgd2Ugc2NoZWR1bGUgYSBkZWxldGlvbiBmb3IgYWxsIHRoZSBjdXJyZW50IGNoaWxkcmVuIGJ5XG4gIC8vIHBhc3NpbmcgbnVsbC5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbnVsbCwgcmVuZGVyTGFuZXMpOyAvLyBJbiB0aGUgc2Vjb25kIHBhc3MsIHdlIG1vdW50IHRoZSBuZXcgY2hpbGRyZW4uIFRoZSB0cmljayBoZXJlIGlzIHRoYXQgd2VcbiAgLy8gcGFzcyBudWxsIGluIHBsYWNlIG9mIHdoZXJlIHdlIHVzdWFsbHkgcGFzcyB0aGUgY3VycmVudCBjaGlsZCBzZXQuIFRoaXMgaGFzXG4gIC8vIHRoZSBlZmZlY3Qgb2YgcmVtb3VudGluZyBhbGwgY2hpbGRyZW4gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZWlyXG4gIC8vIGlkZW50aXRpZXMgbWF0Y2guXG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZvcndhcmRSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICAvLyBUT0RPOiBjdXJyZW50IGNhbiBiZSBub24tbnVsbCBoZXJlIGV2ZW4gaWYgdGhlIGNvbXBvbmVudFxuICAvLyBoYXNuJ3QgeWV0IG1vdW50ZWQuIFRoaXMgaGFwcGVucyBhZnRlciB0aGUgZmlyc3QgcmVuZGVyIHN1c3BlbmRzLlxuICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciByZW5kZXIgPSBDb21wb25lbnQucmVuZGVyO1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmOyAvLyBUaGUgcmVzdCBpcyBhIGZvcmsgb2YgdXBkYXRlRnVuY3Rpb25Db21wb25lbnRcblxuICB2YXIgbmV4dENoaWxkcmVuO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlciwgbmV4dFByb3BzLCByZWYsIHJlbmRlckxhbmVzKTtcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyLCBuZXh0UHJvcHMsIHJlZiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdmFyIHR5cGUgPSBDb21wb25lbnQudHlwZTtcblxuICAgIGlmIChpc1NpbXBsZUZ1bmN0aW9uQ29tcG9uZW50KHR5cGUpICYmIENvbXBvbmVudC5jb21wYXJlID09PSBudWxsICYmIC8vIFNpbXBsZU1lbW9Db21wb25lbnQgY29kZXBhdGggZG9lc24ndCByZXNvbHZlIG91dGVyIHByb3BzIGVpdGhlci5cbiAgICBDb21wb25lbnQuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciByZXNvbHZlZFR5cGUgPSB0eXBlO1xuXG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKTtcbiAgICAgIH0gLy8gSWYgdGhpcyBpcyBhIHBsYWluIGZ1bmN0aW9uIGNvbXBvbmVudCB3aXRob3V0IGRlZmF1bHQgcHJvcHMsXG4gICAgICAvLyBhbmQgd2l0aCBvbmx5IHRoZSBkZWZhdWx0IHNoYWxsb3cgY29tcGFyaXNvbiwgd2UgdXBncmFkZSBpdFxuICAgICAgLy8gdG8gYSBTaW1wbGVNZW1vQ29tcG9uZW50IHRvIGFsbG93IGZhc3QgcGF0aCB1cGRhdGVzLlxuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IFNpbXBsZU1lbW9Db21wb25lbnQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZWRUeXBlO1xuXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgdHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZXNvbHZlZFR5cGUsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIC8vIElubmVyIG1lbW8gY29tcG9uZW50IHByb3BzIGFyZW4ndCBjdXJyZW50bHkgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnQuXG4gICAgICAgIC8vIFdlIGNvdWxkIG1vdmUgaXQgdGhlcmUsIGJ1dCB3ZSdkIHN0aWxsIG5lZWQgdGhpcyBmb3IgbGF6eSBjb2RlIHBhdGguXG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKENvbXBvbmVudC50eXBlLCBudWxsLCBuZXh0UHJvcHMsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCByZW5kZXJMYW5lcyk7XG4gICAgY2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgIGNoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAge1xuICAgIHZhciBfdHlwZSA9IENvbXBvbmVudC50eXBlO1xuICAgIHZhciBfaW5uZXJQcm9wVHlwZXMgPSBfdHlwZS5wcm9wVHlwZXM7XG5cbiAgICBpZiAoX2lubmVyUHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgLy8gV2UgY291bGQgbW92ZSBpdCB0aGVyZSwgYnV0IHdlJ2Qgc3RpbGwgbmVlZCB0aGlzIGZvciBsYXp5IGNvZGUgcGF0aC5cbiAgICAgIGNoZWNrUHJvcFR5cGVzKF9pbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKF90eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnRDaGlsZCA9IGN1cnJlbnQuY2hpbGQ7IC8vIFRoaXMgaXMgYWx3YXlzIGV4YWN0bHkgb25lIGNoaWxkXG5cbiAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAvLyBUaGlzIHdpbGwgYmUgdGhlIHByb3BzIHdpdGggcmVzb2x2ZWQgZGVmYXVsdFByb3BzLFxuICAgIC8vIHVubGlrZSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgd2hpY2ggd2lsbCBiZSB0aGUgdW5yZXNvbHZlZCBvbmVzLlxuICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Q2hpbGQubWVtb2l6ZWRQcm9wczsgLy8gRGVmYXVsdCB0byBzaGFsbG93IGNvbXBhcmlzb25cblxuICAgIHZhciBjb21wYXJlID0gQ29tcG9uZW50LmNvbXBhcmU7XG4gICAgY29tcGFyZSA9IGNvbXBhcmUgIT09IG51bGwgPyBjb21wYXJlIDogc2hhbGxvd0VxdWFsO1xuXG4gICAgaWYgKGNvbXBhcmUocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgbmV4dFByb3BzKTtcbiAgbmV3Q2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXdDaGlsZDtcbiAgcmV0dXJuIG5ld0NoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IGN1cnJlbnQgY2FuIGJlIG5vbi1udWxsIGhlcmUgZXZlbiBpZiB0aGUgY29tcG9uZW50XG4gIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGlubmVyIHJlbmRlciBzdXNwZW5kcy5cbiAgLy8gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmluZSBvciBjYW4gY2F1c2UgaXNzdWVzLlxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIG91dGVyTWVtb1R5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcblxuICAgICAgaWYgKG91dGVyTWVtb1R5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAvLyBXZSB3YXJuIHdoZW4geW91IGRlZmluZSBwcm9wVHlwZXMgb24gbGF6eSgpXG4gICAgICAgIC8vIHNvIGxldCdzIGp1c3Qgc2tpcCBvdmVyIGl0IHRvIGZpbmQgbWVtbygpIG91dGVyIHdyYXBwZXIuXG4gICAgICAgIC8vIElubmVyIHByb3BzIGZvciBtZW1vIGFyZSB2YWxpZGF0ZWQgbGF0ZXIuXG4gICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gb3V0ZXJNZW1vVHlwZTtcbiAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvdXRlck1lbW9UeXBlID0gaW5pdChwYXlsb2FkKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIG91dGVyTWVtb1R5cGUgPSBudWxsO1xuICAgICAgICB9IC8vIElubmVyIHByb3BUeXBlcyB3aWxsIGJlIHZhbGlkYXRlZCBpbiB0aGUgZnVuY3Rpb24gY29tcG9uZW50IHBhdGguXG5cblxuICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBvdXRlck1lbW9UeXBlICYmIG91dGVyTWVtb1R5cGUucHJvcFR5cGVzO1xuXG4gICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIChTaW1wbGVNZW1vQ29tcG9uZW50IGhhcyBubyBkZWZhdWx0UHJvcHMpXG4gICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKG91dGVyTWVtb1R5cGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcblxuICAgIGlmIChzaGFsbG93RXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYgJiYgKCAvLyBQcmV2ZW50IGJhaWxvdXQgaWYgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZWQgZHVlIHRvIGhvdCByZWxvYWQuXG4gICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IGN1cnJlbnQudHlwZSApKSB7XG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG5cbiAgICAgIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgdXBkYXRlTGFuZXMpKSB7XG4gICAgICAgIC8vIFRoZSBwZW5kaW5nIGxhbmVzIHdlcmUgY2xlYXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGJlZ2luV29yay4gV2UncmVcbiAgICAgICAgLy8gYWJvdXQgdG8gYmFpbCBvdXQsIGJ1dCB0aGVyZSBtaWdodCBiZSBvdGhlciBsYW5lcyB0aGF0IHdlcmVuJ3RcbiAgICAgICAgLy8gaW5jbHVkZWQgaW4gdGhlIGN1cnJlbnQgcmVuZGVyLiBVc3VhbGx5LCB0aGUgcHJpb3JpdHkgbGV2ZWwgb2YgdGhlXG4gICAgICAgIC8vIHJlbWFpbmluZyB1cGRhdGVzIGlzIGFjY3VtbGF0ZWQgZHVyaW5nIHRoZSBldmFsdWF0aW9uIG9mIHRoZVxuICAgICAgICAvLyBjb21wb25lbnQgKGkuZS4gd2hlbiBwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUpLiBCdXQgc2luY2Ugc2luY2VcbiAgICAgICAgLy8gd2UncmUgYmFpbGluZyBvdXQgZWFybHkgKndpdGhvdXQqIGV2YWx1YXRpbmcgdGhlIGNvbXBvbmVudCwgd2UgbmVlZFxuICAgICAgICAvLyB0byBhY2NvdW50IGZvciBpdCBoZXJlLCB0b28uIFJlc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBmaWJlci5cbiAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IGFwcGxpZXMgdG8gU2ltcGxlTWVtb0NvbXBvbmVudCwgbm90IE1lbW9Db21wb25lbnQsXG4gICAgICAgIC8vIGJlY2F1c2UgYSBNZW1vQ29tcG9uZW50IGZpYmVyIGRvZXMgbm90IGhhdmUgaG9va3Mgb3IgYW4gdXBkYXRlIHF1ZXVlO1xuICAgICAgICAvLyByYXRoZXIsIGl0IHdyYXBzIGFyb3VuZCBhbiBpbm5lciBjb21wb25lbnQsIHdoaWNoIG1heSBvciBtYXkgbm90XG4gICAgICAgIC8vIGNvbnRhaW5zIGhvb2tzLlxuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoZSByZXNldCBhdCBpbiBiZWdpbldvcmsgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBzbyB0aGF0XG4gICAgICAgIC8vIHRoaXMgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBlbHNlIGlmICgoY3VycmVudC5mbGFncyAmIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGV4aXN0cyBmb3IgbGVnYWN5IG1vZGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xOTIxNi5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcblxuICBpZiAobmV4dFByb3BzLm1vZGUgPT09ICdoaWRkZW4nIHx8IG5leHRQcm9wcy5tb2RlID09PSAndW5zdGFibGUtZGVmZXItd2l0aG91dC1oaWRpbmcnKSB7XG4gICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIC8vIEluIGxlZ2FjeSBzeW5jIG1vZGUsIGRvbid0IGRlZmVyIHRoZSBzdWJ0cmVlLiBSZW5kZXIgaXQgbm93LlxuICAgICAgLy8gVE9ETzogRmlndXJlIG91dCB3aGF0IHdlIHNob3VsZCBkbyBpbiBCbG9ja2luZyBtb2RlLlxuICAgICAgdmFyIG5leHRTdGF0ZSA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpKSB7XG4gICAgICB2YXIgbmV4dEJhc2VMYW5lcztcblxuICAgICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldkJhc2VMYW5lcyA9IHByZXZTdGF0ZS5iYXNlTGFuZXM7XG4gICAgICAgIG5leHRCYXNlTGFuZXMgPSBtZXJnZUxhbmVzKHByZXZCYXNlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRCYXNlTGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICAgIH0gLy8gU2NoZWR1bGUgdGhpcyBmaWJlciB0byByZS1yZW5kZXIgYXQgb2Zmc2NyZWVuIHByaW9yaXR5LiBUaGVuIGJhaWxvdXQuXG5cblxuICAgICAge1xuICAgICAgICBtYXJrU3Bhd25lZFdvcmsoT2Zmc2NyZWVuTGFuZSk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGxhbmVUb0xhbmVzKE9mZnNjcmVlbkxhbmUpO1xuICAgICAgdmFyIF9uZXh0U3RhdGUgPSB7XG4gICAgICAgIGJhc2VMYW5lczogbmV4dEJhc2VMYW5lc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBfbmV4dFN0YXRlOyAvLyBXZSdyZSBhYm91dCB0byBiYWlsIG91dCwgYnV0IHdlIG5lZWQgdG8gcHVzaCB0aGlzIHRvIHRoZSBzdGFjayBhbnl3YXlcbiAgICAgIC8vIHRvIGF2b2lkIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuXG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIG5leHRCYXNlTGFuZXMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbmRlcmluZyBhdCBvZmZzY3JlZW4sIHNvIHdlIGNhbiBjbGVhciB0aGUgYmFzZSBsYW5lcy5cbiAgICAgIHZhciBfbmV4dFN0YXRlMiA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IF9uZXh0U3RhdGUyOyAvLyBQdXNoIHRoZSBsYW5lcyB0aGF0IHdlcmUgc2tpcHBlZCB3aGVuIHdlIGJhaWxlZCBvdXQuXG5cbiAgICAgIHZhciBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBwcmV2U3RhdGUgIT09IG51bGwgPyBwcmV2U3RhdGUuYmFzZUxhbmVzIDogcmVuZGVyTGFuZXM7XG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBfc3VidHJlZVJlbmRlckxhbmVzO1xuXG4gICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgX3N1YnRyZWVSZW5kZXJMYW5lcyA9IG1lcmdlTGFuZXMocHJldlN0YXRlLmJhc2VMYW5lcywgcmVuZGVyTGFuZXMpOyAvLyBTaW5jZSB3ZSdyZSBub3QgaGlkZGVuIGFueW1vcmUsIHJlc2V0IHRoZSBzdGF0ZVxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugd2VyZW4ndCBwcmV2aW91c2x5IGhpZGRlbiwgYW5kIHdlIHN0aWxsIGFyZW4ndCwgc28gdGhlcmUncyBub3RoaW5nXG4gICAgICAvLyBzcGVjaWFsIHRvIGRvLiBOZWVkIHRvIHB1c2ggdG8gdGhlIHN0YWNrIHJlZ2FyZGxlc3MsIHRob3VnaCwgdG8gYXZvaWRcbiAgICAgIC8vIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuICAgICAgX3N1YnRyZWVSZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgIH1cblxuICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgX3N1YnRyZWVSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn0gLy8gTm90ZTogVGhlc2UgaGFwcGVuIHRvIGhhdmUgaWRlbnRpY2FsIGJlZ2luIHBoYXNlcywgZm9yIG5vdy4gV2Ugc2hvdWxkbid0IGhvbGRcbi8vIG91cnNlbHZlcyB0byB0aGlzIGNvbnN0cmFpbnQsIHRob3VnaC4gSWYgdGhlIGJlaGF2aW9yIGRpdmVyZ2VzLCB3ZSBzaG91bGRcbi8vIGZvcmsgdGhlIGZ1bmN0aW9uLlxuXG5cbnZhciB1cGRhdGVMZWdhY3lIaWRkZW5Db21wb25lbnQgPSB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQ7XG5cbmZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlOyAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgLy8gVGhlc2UgYXJlIHJlc2V0IGR1cmluZyByZW5kZXIgdG8gYWxsb3cgdGhlIERldlRvb2xzIGNvbW1pdCBob29rIGEgY2hhbmNlIHRvIHJlYWQgdGhlbSxcblxuICAgIHZhciBzdGF0ZU5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gMDtcbiAgfVxuXG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwgJiYgcmVmICE9PSBudWxsIHx8IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5yZWYgIT09IHJlZikge1xuICAgIC8vIFNjaGVkdWxlIGEgUmVmIGVmZmVjdFxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFJlZjtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0O1xuXG4gIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUpO1xuICAgIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIG5leHRDaGlsZHJlbjtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuXG4gIHZhciBoYXNDb250ZXh0O1xuXG4gIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gZWxzZSB7XG4gICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICB2YXIgc2hvdWxkVXBkYXRlO1xuXG4gIGlmIChpbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBBIGNsYXNzIGNvbXBvbmVudCB3aXRob3V0IGFuIGluc3RhbmNlIG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZFxuICAgICAgLy8gaW5zaWRlIGEgbm9uLWNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvXG4gICAgICAvLyB0cmVhdCBpdCBsaWtlIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHlcbiAgICAgIC8vIGNvbW1pdHRlZC4gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gICAgfSAvLyBJbiB0aGUgaW5pdGlhbCBwYXNzIHdlIG1pZ2h0IG5lZWQgdG8gY29uc3RydWN0IHRoZSBpbnN0YW5jZS5cblxuXG4gICAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMpO1xuICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICBzaG91bGRVcGRhdGUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJbiBhIHJlc3VtZSwgd2UnbGwgYWxyZWFkeSBoYXZlIGFuIGluc3RhbmNlIHdlIGNhbiByZXVzZS5cbiAgICBzaG91bGRVcGRhdGUgPSByZXN1bWVNb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVXBkYXRlID0gdXBkYXRlQ2xhc3NJbnN0YW5jZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciBuZXh0VW5pdE9mV29yayA9IGZpbmlzaENsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHNob3VsZFVwZGF0ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICB2YXIgaW5zdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmIChzaG91bGRVcGRhdGUgJiYgaW5zdC5wcm9wcyAhPT0gbmV4dFByb3BzKSB7XG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgZXJyb3IoJ0l0IGxvb2tzIGxpa2UgJXMgaXMgcmVhc3NpZ25pbmcgaXRzIG93biBgdGhpcy5wcm9wc2Agd2hpbGUgcmVuZGVyaW5nLiAnICsgJ1RoaXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgY2FuIGxlYWQgdG8gY29uZnVzaW5nIGJ1Z3MuJywgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnYSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRVbml0T2ZXb3JrO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBzaG91bGRVcGRhdGUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFJlZnMgc2hvdWxkIHVwZGF0ZSBldmVuIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlXG4gIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgZGlkQ2FwdHVyZUVycm9yID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgaWYgKCFzaG91bGRVcGRhdGUgJiYgIWRpZENhcHR1cmVFcnJvcikge1xuICAgIC8vIENvbnRleHQgcHJvdmlkZXJzIHNob3VsZCBkZWZlciB0byBzQ1UgZm9yIHJlbmRlcmluZ1xuICAgIGlmIChoYXNDb250ZXh0KSB7XG4gICAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBSZXJlbmRlclxuXG4gIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICB2YXIgbmV4dENoaWxkcmVuO1xuXG4gIGlmIChkaWRDYXB0dXJlRXJyb3IgJiYgdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbiBlcnJvciwgYnV0IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciBpcyBub3QgZGVmaW5lZCxcbiAgICAvLyB1bm1vdW50IGFsbCB0aGUgY2hpbGRyZW4uIGNvbXBvbmVudERpZENhdGNoIHdpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIHRvXG4gICAgLy8gcmUtcmVuZGVyIGEgZmFsbGJhY2suIFRoaXMgaXMgdGVtcG9yYXJ5IHVudGlsIHdlIG1pZ3JhdGUgZXZlcnlvbmUgdG9cbiAgICAvLyB0aGUgbmV3IEFQSS5cbiAgICAvLyBUT0RPOiBXYXJuIGluIGEgZnV0dXJlIHJlbGVhc2UuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcblxuICAgIHtcbiAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgICAgbmV4dENoaWxkcmVuID0gaW5zdGFuY2UucmVuZGVyKCk7XG5cbiAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGluc3RhbmNlLnJlbmRlcigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBkaWRDYXB0dXJlRXJyb3IpIHtcbiAgICAvLyBJZiB3ZSdyZSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlY29uY2lsZSB3aXRob3V0IHJldXNpbmcgYW55IG9mXG4gICAgLy8gdGhlIGV4aXN0aW5nIGNoaWxkcmVuLiBDb25jZXB0dWFsbHksIHRoZSBub3JtYWwgY2hpbGRyZW4gYW5kIHRoZSBjaGlsZHJlblxuICAgIC8vIHRoYXQgYXJlIHNob3duIG9uIGVycm9yIGFyZSB0d28gZGlmZmVyZW50IHNldHMsIHNvIHdlIHNob3VsZG4ndCByZXVzZVxuICAgIC8vIG5vcm1hbCBjaGlsZHJlbiBldmVuIGlmIHRoZWlyIGlkZW50aXRpZXMgbWF0Y2guXG4gICAgZm9yY2VVbm1vdW50Q3VycmVudEFuZFJlY29uY2lsZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IC8vIE1lbW9pemUgc3RhdGUgdXNpbmcgdGhlIHZhbHVlcyB3ZSBqdXN0IHVzZWQgdG8gcmVuZGVyLlxuICAvLyBUT0RPOiBSZXN0cnVjdHVyZSBzbyB3ZSBuZXZlciByZWFkIHZhbHVlcyBmcm9tIHRoZSBpbnN0YW5jZS5cblxuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTsgLy8gVGhlIGNvbnRleHQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNvIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgaXQuXG5cbiAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmIChyb290LnBlbmRpbmdDb250ZXh0KSB7XG4gICAgcHVzaFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcywgcm9vdC5wZW5kaW5nQ29udGV4dCwgcm9vdC5wZW5kaW5nQ29udGV4dCAhPT0gcm9vdC5jb250ZXh0KTtcbiAgfSBlbHNlIGlmIChyb290LmNvbnRleHQpIHtcbiAgICAvLyBTaG91bGQgYWx3YXlzIGJlIHNldFxuICAgIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGV4dCwgZmFsc2UpO1xuICB9XG5cbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGFpbmVySW5mbyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG5cbiAgaWYgKCEoY3VycmVudCAhPT0gbnVsbCAmJiB1cGRhdGVRdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJZiB0aGUgcm9vdCBkb2VzIG5vdCBoYXZlIGFuIHVwZGF0ZVF1ZXVlLCB3ZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGJhaWxlZCBvdXQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHByZXZDaGlsZHJlbiA9IHByZXZTdGF0ZSAhPT0gbnVsbCA/IHByZXZTdGF0ZS5lbGVtZW50IDogbnVsbDtcbiAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFN0YXRlLmVsZW1lbnQ7XG5cbiAgaWYgKG5leHRDaGlsZHJlbiA9PT0gcHJldkNoaWxkcmVuKSB7XG4gICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAocm9vdC5oeWRyYXRlICYmIGVudGVySHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgY3VycmVudCBjaGlsZHJlbiB0aGlzIG1pZ2h0IGJlIHRoZSBmaXJzdCBwYXNzLlxuICAgIC8vIFdlIGFsd2F5cyB0cnkgdG8gaHlkcmF0ZS4gSWYgdGhpcyBpc24ndCBhIGh5ZHJhdGlvbiBwYXNzIHRoZXJlIHdvbid0XG4gICAgLy8gYmUgYW55IGNoaWxkcmVuIHRvIGh5ZHJhdGUgd2hpY2ggaXMgZWZmZWN0aXZlbHkgdGhlIHNhbWUgdGhpbmcgYXNcbiAgICAvLyBub3QgaHlkcmF0aW5nLlxuICAgIHtcbiAgICAgIHZhciBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhO1xuXG4gICAgICBpZiAobXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSAhPSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgIHZhciBtdXRhYmxlU291cmNlID0gbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YVtpXTtcbiAgICAgICAgICB2YXIgdmVyc2lvbiA9IG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGFbaSArIDFdO1xuICAgICAgICAgIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihtdXRhYmxlU291cmNlLCB2ZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgdmFyIG5vZGUgPSBjaGlsZDtcblxuICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAvLyBNYXJrIGVhY2ggY2hpbGQgYXMgaHlkcmF0aW5nLiBUaGlzIGlzIGEgZmFzdCBwYXRoIHRvIGtub3cgd2hldGhlciB0aGlzXG4gICAgICAvLyB0cmVlIGlzIHBhcnQgb2YgYSBoeWRyYXRpbmcgdHJlZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIGNoaWxkXG4gICAgICAvLyBub2RlIGhhcyBmdWxseSBtb3VudGVkIHlldCwgYW5kIGZvciBzY2hlZHVsaW5nIGV2ZW50IHJlcGxheWluZy5cbiAgICAgIC8vIENvbmNlcHR1YWxseSB0aGlzIGlzIHNpbWlsYXIgdG8gUGxhY2VtZW50IGluIHRoYXQgYSBuZXcgc3VidHJlZSBpc1xuICAgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgUmVhY3QgdHJlZSBoZXJlLiBJdCBqdXN0IGhhcHBlbnMgdG8gbm90IG5lZWQgRE9NXG4gICAgICAvLyBtdXRhdGlvbnMgYmVjYXVzZSBpdCBhbHJlYWR5IGV4aXN0cy5cbiAgICAgIG5vZGUuZmxhZ3MgPSBub2RlLmZsYWdzICYgflBsYWNlbWVudCB8IEh5ZHJhdGluZztcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSByZXNldCBoeWRyYXRpb24gc3RhdGUgaW4gY2FzZSB3ZSBhYm9ydGVkIGFuZCByZXN1bWVkIGFub3RoZXJcbiAgICAvLyByb290LlxuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cblxuICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbnVsbDtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFyIGlzRGlyZWN0VGV4dENoaWxkID0gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgbmV4dFByb3BzKTtcblxuICBpZiAoaXNEaXJlY3RUZXh0Q2hpbGQpIHtcbiAgICAvLyBXZSBzcGVjaWFsIGNhc2UgYSBkaXJlY3QgdGV4dCBjaGlsZCBvZiBhIGhvc3Qgbm9kZS4gVGhpcyBpcyBhIGNvbW1vblxuICAgIC8vIGNhc2UuIFdlIHdvbid0IGhhbmRsZSBpdCBhcyBhIHJlaWZpZWQgY2hpbGQuIFdlIHdpbGwgaW5zdGVhZCBoYW5kbGVcbiAgICAvLyB0aGlzIGluIHRoZSBob3N0IGVudmlyb25tZW50IHRoYXQgYWxzbyBoYXMgYWNjZXNzIHRvIHRoaXMgcHJvcC4gVGhhdFxuICAgIC8vIGF2b2lkcyBhbGxvY2F0aW5nIGFub3RoZXIgSG9zdFRleHQgZmliZXIgYW5kIHRyYXZlcnNpbmcgaXQuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcbiAgfSBlbHNlIGlmIChwcmV2UHJvcHMgIT09IG51bGwgJiYgc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJldlByb3BzKSkge1xuICAgIC8vIElmIHdlJ3JlIHN3aXRjaGluZyBmcm9tIGEgZGlyZWN0IHRleHQgY2hpbGQgdG8gYSBub3JtYWwgY2hpbGQsIG9yIHRvXG4gICAgLy8gZW1wdHksIHdlIG5lZWQgdG8gc2NoZWR1bGUgdGhlIHRleHQgY29udGVudCB0byBiZSByZXNldC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBDb250ZW50UmVzZXQ7XG4gIH1cblxuICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpO1xuICB9IC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4gVGhpcyBpcyB0ZXJtaW5hbC4gV2UnbGwgZG8gdGhlIGNvbXBsZXRpb24gc3RlcFxuICAvLyBpbW1lZGlhdGVseSBhZnRlci5cblxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBtb3VudExhenlDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBlbGVtZW50VHlwZSwgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEEgbGF6eSBjb21wb25lbnQgb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkIGluc2lkZSBhIG5vbi1cbiAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgLy8gYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeSBjb21taXR0ZWQuXG4gICAgLy8gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgIF9jdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbGF6eUNvbXBvbmVudCA9IGVsZW1lbnRUeXBlO1xuICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcbiAgdmFyIENvbXBvbmVudCA9IGluaXQocGF5bG9hZCk7IC8vIFN0b3JlIHRoZSB1bndyYXBwZWQgY29tcG9uZW50IGluIHRoZSB0eXBlLlxuXG4gIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQ7XG4gIHZhciByZXNvbHZlZFRhZyA9IHdvcmtJblByb2dyZXNzLnRhZyA9IHJlc29sdmVMYXp5Q29tcG9uZW50VGFnKENvbXBvbmVudCk7XG4gIHZhciByZXNvbHZlZFByb3BzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIHByb3BzKTtcbiAgdmFyIGNoaWxkO1xuXG4gIHN3aXRjaCAocmVzb2x2ZWRUYWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVGb3J3YXJkUmVmKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIHJlc29sdmVkUHJvcHMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZU1lbW9Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQudHlwZSwgcmVzb2x2ZWRQcm9wcyksIC8vIFRoZSBpbm5lciB0eXBlIGNhbiBoYXZlIGRlZmF1bHRzIHRvb1xuICAgICAgICB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gIH1cblxuICB2YXIgaGludCA9ICcnO1xuXG4gIHtcbiAgICBpZiAoQ29tcG9uZW50ICE9PSBudWxsICYmIHR5cGVvZiBDb21wb25lbnQgPT09ICdvYmplY3QnICYmIENvbXBvbmVudC4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICBoaW50ID0gJyBEaWQgeW91IHdyYXAgYSBjb21wb25lbnQgaW4gUmVhY3QubGF6eSgpIG1vcmUgdGhhbiBvbmNlPyc7XG4gICAgfVxuICB9IC8vIFRoaXMgbWVzc2FnZSBpbnRlbnRpb25hbGx5IGRvZXNuJ3QgbWVudGlvbiBGb3J3YXJkUmVmIG9yIE1lbW9Db21wb25lbnRcbiAgLy8gYmVjYXVzZSB0aGUgZmFjdCB0aGF0IGl0J3MgYSBzZXBhcmF0ZSB0eXBlIG9mIHdvcmsgaXMgYW5cbiAgLy8gaW1wbGVtZW50YXRpb24gZGV0YWlsLlxuXG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkLiBSZWNlaXZlZCBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0bzogXCIgKyBDb21wb25lbnQgKyBcIi4gTGF6eSBlbGVtZW50IHR5cGUgbXVzdCByZXNvbHZlIHRvIGEgY2xhc3Mgb3IgZnVuY3Rpb24uXCIgKyBoaW50ICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEFuIGluY29tcGxldGUgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfSAvLyBQcm9tb3RlIHRoZSBmaWJlciB0byBhIGNsYXNzIGFuZCB0cnkgcmVuZGVyaW5nIGFnYWluLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MudGFnID0gQ2xhc3NDb21wb25lbnQ7IC8vIFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gaXMgYSBmb3JrIG9mIGB1cGRhdGVDbGFzc0NvbXBvbmVudGBcbiAgLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cbiAgdmFyIGhhc0NvbnRleHQ7XG5cbiAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgfSBlbHNlIHtcbiAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcyk7XG4gIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRJbmRldGVybWluYXRlQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZW5kZXJMYW5lcykge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBbiBpbmRldGVybWluYXRlIGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBjb250ZXh0O1xuXG4gIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIHZhciB2YWx1ZTtcblxuICB7XG4gICAgaWYgKENvbXBvbmVudC5wcm90b3R5cGUgJiYgdHlwZW9mIENvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoXCJUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGhhdmUgYSByZW5kZXIgbWV0aG9kLCBidXQgZG9lc24ndCBleHRlbmQgUmVhY3QuQ29tcG9uZW50LiBcIiArICdUaGlzIGlzIGxpa2VseSB0byBjYXVzZSBlcnJvcnMuIENoYW5nZSAlcyB0byBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuJywgY29tcG9uZW50TmFtZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcod29ya0luUHJvZ3Jlc3MsIG51bGwpO1xuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAge1xuICAgIC8vIFN1cHBvcnQgZm9yIG1vZHVsZSBjb21wb25lbnRzIGlzIGRlcHJlY2F0ZWQgYW5kIGlzIHJlbW92ZWQgYmVoaW5kIGEgZmxhZy5cbiAgICAvLyBXaGV0aGVyIG9yIG5vdCBpdCB3b3VsZCBjcmFzaCBsYXRlciwgd2Ugd2FudCB0byBzaG93IGEgZ29vZCBtZXNzYWdlIGluIERFViBmaXJzdC5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLiQkdHlwZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ1RoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuICcgKyAnQ2hhbmdlICVzIHRvIGEgY2xhc3MgdGhhdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLiAnICsgXCJJZiB5b3UgY2FuJ3QgdXNlIGEgY2xhc3MgdHJ5IGFzc2lnbmluZyB0aGUgcHJvdG90eXBlIG9uIHRoZSBmdW5jdGlvbiBhcyBhIHdvcmthcm91bmQuIFwiICsgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArICdjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuJywgX2NvbXBvbmVudE5hbWUsIF9jb21wb25lbnROYW1lLCBfY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICggLy8gUnVuIHRoZXNlIGNoZWNrcyBpbiBwcm9kdWN0aW9uIG9ubHkgaWYgdGhlIGZsYWcgaXMgb2ZmLlxuICAvLyBFdmVudHVhbGx5IHdlJ2xsIGRlbGV0ZSB0aGlzIGJyYW5jaCBhbHRvZ2V0aGVyLlxuICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLiQkdHlwZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUyID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lMl0pIHtcbiAgICAgICAgZXJyb3IoJ1RoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuICcgKyAnQ2hhbmdlICVzIHRvIGEgY2xhc3MgdGhhdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLiAnICsgXCJJZiB5b3UgY2FuJ3QgdXNlIGEgY2xhc3MgdHJ5IGFzc2lnbmluZyB0aGUgcHJvdG90eXBlIG9uIHRoZSBmdW5jdGlvbiBhcyBhIHdvcmthcm91bmQuIFwiICsgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArICdjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuJywgX2NvbXBvbmVudE5hbWUyLCBfY29tcG9uZW50TmFtZTIsIF9jb21wb25lbnROYW1lMik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgY2xhc3MgaW5zdGFuY2VcblxuXG4gICAgd29ya0luUHJvZ3Jlc3MudGFnID0gQ2xhc3NDb21wb25lbnQ7IC8vIFRocm93IG91dCBhbnkgaG9va3MgdGhhdCB3ZXJlIHVzZWQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7IC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gICAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAgIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICAgIHZhciBoYXNDb250ZXh0ID0gZmFsc2U7XG5cbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB2YWx1ZS5zdGF0ZSAhPT0gbnVsbCAmJiB2YWx1ZS5zdGF0ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUuc3RhdGUgOiBudWxsO1xuICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG5cbiAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBwcm9wcyk7XG4gICAgfVxuXG4gICAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCB2YWx1ZSk7XG4gICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IEZ1bmN0aW9uQ29tcG9uZW50O1xuXG4gICAge1xuXG4gICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IHJlbmRlcldpdGhIb29rcyhudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVjb25jaWxlQ2hpbGRyZW4obnVsbCwgd29ya0luUHJvZ3Jlc3MsIHZhbHVlLCByZW5kZXJMYW5lcyk7XG5cbiAgICB7XG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KSB7XG4gIHtcbiAgICBpZiAoQ29tcG9uZW50KSB7XG4gICAgICBpZiAoQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzKSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBjaGlsZENvbnRleHRUeXBlcyBjYW5ub3QgYmUgZGVmaW5lZCBvbiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4nLCBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5yZWYgIT09IG51bGwpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG4gICAgICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcblxuICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICBpbmZvICs9ICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gICAgICB9XG5cbiAgICAgIHZhciB3YXJuaW5nS2V5ID0gb3duZXJOYW1lIHx8IHdvcmtJblByb2dyZXNzLl9kZWJ1Z0lEIHx8ICcnO1xuICAgICAgdmFyIGRlYnVnU291cmNlID0gd29ya0luUHJvZ3Jlc3MuX2RlYnVnU291cmNlO1xuXG4gICAgICBpZiAoZGVidWdTb3VyY2UpIHtcbiAgICAgICAgd2FybmluZ0tleSA9IGRlYnVnU291cmNlLmZpbGVOYW1lICsgJzonICsgZGVidWdTb3VyY2UubGluZU51bWJlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnNbd2FybmluZ0tleV0pIHtcbiAgICAgICAgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgYmUgZ2l2ZW4gcmVmcy4gJyArICdBdHRlbXB0cyB0byBhY2Nlc3MgdGhpcyByZWYgd2lsbCBmYWlsLiAnICsgJ0RpZCB5b3UgbWVhbiB0byB1c2UgUmVhY3QuZm9yd2FyZFJlZigpPyVzJywgaW5mbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUzID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4nLCBfY29tcG9uZW50TmFtZTMpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWUzXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBDb21wb25lbnQuY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIENvbXBvbmVudC5jb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lNCA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGNvbnRleHRUeXBlLicsIF9jb21wb25lbnROYW1lNCk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgU1VTUEVOREVEX01BUktFUiA9IHtcbiAgZGVoeWRyYXRlZDogbnVsbCxcbiAgcmV0cnlMYW5lOiBOb0xhbmVcbn07XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykge1xuICByZXR1cm4ge1xuICAgIGJhc2VMYW5lczogcmVuZGVyTGFuZXNcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShwcmV2T2Zmc2NyZWVuU3RhdGUsIHJlbmRlckxhbmVzKSB7XG4gIHJldHVybiB7XG4gICAgYmFzZUxhbmVzOiBtZXJnZUxhbmVzKHByZXZPZmZzY3JlZW5TdGF0ZS5iYXNlTGFuZXMsIHJlbmRlckxhbmVzKVxuICB9O1xufSAvLyBUT0RPOiBQcm9iYWJseSBzaG91bGQgaW5saW5lIHRoaXMgYmFja1xuXG5cbmZ1bmN0aW9uIHNob3VsZFJlbWFpbk9uRmFsbGJhY2soc3VzcGVuc2VDb250ZXh0LCBjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gSWYgd2UncmUgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2ssIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvXG4gIC8vIHJlbWFpbiBvbiB0aGF0IGZhbGxiYWNrIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgY29udGVudCBoYXMgcmVzb2x2ZWQuXG4gIC8vIEZvciBleGFtcGxlLCBTdXNwZW5zZUxpc3QgY29vcmRpbmF0ZXMgd2hlbiBuZXN0ZWQgY29udGVudCBhcHBlYXJzLlxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgPT09IG51bGwpIHtcbiAgICAgIC8vIEN1cnJlbnRseSBzaG93aW5nIGNvbnRlbnQuIERvbid0IGhpZGUgaXQsIGV2ZW4gaWYgRm9yY2VTdXNwZW5zZUZhbGxhY2tcbiAgICAgIC8vIGlzIHRydWUuIE1vcmUgcHJlY2lzZSBuYW1lIG1pZ2h0IGJlIFwiRm9yY2VSZW1haW5TdXNwZW5zZUZhbGxiYWNrXCIuXG4gICAgICAvLyBOb3RlOiBUaGlzIGlzIGEgZmFjdG9yaW5nIHNtZWxsLiBDYW4ndCByZW1haW4gb24gYSBmYWxsYmFjayBpZiB0aGVyZSdzXG4gICAgICAvLyBubyBmYWxsYmFjayB0byByZW1haW4gb24uXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IC8vIE5vdCBjdXJyZW50bHkgc2hvd2luZyBjb250ZW50LiBDb25zdWx0IHRoZSBTdXNwZW5zZSBjb250ZXh0LlxuXG5cbiAgcmV0dXJuIGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IFNob3VsZCBub3QgcmVtb3ZlIHJlbmRlciBsYW5lcyB0aGF0IHdlcmUgcGluZ2VkIGR1cmluZyB0aGlzIHJlbmRlclxuICByZXR1cm4gcmVtb3ZlTGFuZXMoY3VycmVudC5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBUaGlzIGlzIHVzZWQgYnkgRGV2VG9vbHMgdG8gZm9yY2UgYSBib3VuZGFyeSB0byBzdXNwZW5kLlxuXG4gIHtcbiAgICBpZiAoc2hvdWxkU3VzcGVuZCh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgdmFyIHNob3dGYWxsYmFjayA9IGZhbHNlO1xuICB2YXIgZGlkU3VzcGVuZCA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gIGlmIChkaWRTdXNwZW5kIHx8IHNob3VsZFJlbWFpbk9uRmFsbGJhY2soc3VzcGVuc2VDb250ZXh0LCBjdXJyZW50KSkge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGlzIGJvdW5kYXJ5J3Mgc3VidHJlZSBhbHJlYWR5IHN1c3BlbmRlZC4gU3dpdGNoIHRvXG4gICAgLy8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICBzaG93RmFsbGJhY2sgPSB0cnVlO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH5EaWRDYXB0dXJlO1xuICB9IGVsc2Uge1xuICAgIC8vIEF0dGVtcHRpbmcgdGhlIG1haW4gY29udGVudFxuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBhIG5ldyBtb3VudCBvciB0aGlzIGJvdW5kYXJ5IGlzIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIHN0YXRlLlxuICAgICAgLy8gTWFyayB0aGlzIHN1YnRyZWUgY29udGV4dCBhcyBoYXZpbmcgYXQgbGVhc3Qgb25lIGludmlzaWJsZSBwYXJlbnQgdGhhdCBjb3VsZFxuICAgICAgLy8gaGFuZGxlIHRoZSBmYWxsYmFjayBzdGF0ZS5cbiAgICAgIC8vIEJvdW5kYXJpZXMgd2l0aG91dCBmYWxsYmFja3Mgb3Igc2hvdWxkIGJlIGF2b2lkZWQgYXJlIG5vdCBjb25zaWRlcmVkIHNpbmNlXG4gICAgICAvLyB0aGV5IGNhbm5vdCBoYW5kbGUgcHJlZmVycmVkIGZhbGxiYWNrIHN0YXRlcy5cbiAgICAgIGlmIChuZXh0UHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBuZXh0UHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWUpIHtcbiAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gYWRkU3VidHJlZVN1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gT0ssIHRoZSBuZXh0IHBhcnQgaXMgY29uZnVzaW5nLiBXZSdyZSBhYm91dCB0byByZWNvbmNpbGUgdGhlIFN1c3BlbnNlXG4gIC8vIGJvdW5kYXJ5J3MgY2hpbGRyZW4uIFRoaXMgaW52b2x2ZXMgc29tZSBjdXN0b20gcmVjb25jaWxhdGlvbiBsb2dpYy4gVHdvXG4gIC8vIG1haW4gcmVhc29ucyB0aGlzIGlzIHNvIGNvbXBsaWNhdGVkLlxuICAvL1xuICAvLyBGaXJzdCwgTGVnYWN5IE1vZGUgaGFzIGRpZmZlcmVudCBzZW1hbnRpY3MgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBUaGVcbiAgLy8gcHJpbWFyeSB0cmVlIHdpbGwgY29tbWl0IGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgc28gd2hlbiB3ZSBkbyB0aGVcbiAgLy8gc2Vjb25kIHBhc3MgdG8gcmVuZGVyIHRoZSBmYWxsYmFjaywgd2UgZG8gc29tZSBleGNlZWRpbmdseSwgdWgsIGNsZXZlclxuICAvLyBoYWNrcyB0byBtYWtlIHRoYXQgbm90IHRvdGFsbHkgYnJlYWsuIExpa2UgdHJhbnNmZXJyaW5nIGVmZmVjdHMgYW5kXG4gIC8vIGRlbGV0aW9ucyBmcm9tIGhpZGRlbiB0cmVlLiBJbiBDb25jdXJyZW50IE1vZGUsIGl0J3MgbXVjaCBzaW1wbGVyLFxuICAvLyBiZWNhdXNlIHdlIGJhaWxvdXQgb24gdGhlIHByaW1hcnkgdHJlZSBjb21wbGV0ZWx5IGFuZCBsZWF2ZSBpdCBpbiBpdHMgb2xkXG4gIC8vIHN0YXRlLCBubyBlZmZlY3RzLiBTYW1lIGFzIHdoYXQgd2UgZG8gZm9yIE9mZnNjcmVlbiAoZXhjZXB0IHRoYXRcbiAgLy8gT2Zmc2NyZWVuIGRvZXNuJ3QgaGF2ZSB0aGUgZmlyc3QgcmVuZGVyIHBhc3MpLlxuICAvL1xuICAvLyBTZWNvbmQgaXMgaHlkcmF0aW9uLiBEdXJpbmcgaHlkcmF0aW9uLCB0aGUgU3VzcGVuc2UgZmliZXIgaGFzIGEgc2xpZ2h0bHlcbiAgLy8gZGlmZmVyZW50IGxheW91dCwgd2hlcmUgdGhlIGNoaWxkIHBvaW50cyB0byBhIGRlaHlkcmF0ZWQgZnJhZ21lbnQsIHdoaWNoXG4gIC8vIGNvbnRhaW5zIHRoZSBET00gcmVuZGVyZWQgYnkgdGhlIHNlcnZlci5cbiAgLy9cbiAgLy8gVGhpcmQsIGV2ZW4gaWYgeW91IHNldCBhbGwgdGhhdCBhc2lkZSwgU3VzcGVuc2UgaXMgbGlrZSBlcnJvciBib3VuZGFyaWVzIGluXG4gIC8vIHRoYXQgd2UgZmlyc3Qgd2UgdHJ5IHRvIHJlbmRlciBvbmUgdHJlZSwgYW5kIGlmIHRoYXQgZmFpbHMsIHdlIHJlbmRlciBhZ2FpblxuICAvLyBhbmQgc3dpdGNoIHRvIGEgZGlmZmVyZW50IHRyZWUuIExpa2UgYSB0cnkvY2F0Y2ggYmxvY2suIFNvIHdlIGhhdmUgdG8gdHJhY2tcbiAgLy8gd2hpY2ggYnJhbmNoIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcuIElkZWFsbHkgd2Ugd291bGQgbW9kZWwgdGhpcyB1c2luZ1xuICAvLyBhIHN0YWNrLlxuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSW5pdGlhbCBtb3VudFxuICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBoeWRyYXRpbmcsIHRyeSB0byBoeWRyYXRlIHRoaXMgYm91bmRhcnkuXG4gICAgLy8gQnV0IG9ubHkgaWYgdGhpcyBoYXMgYSBmYWxsYmFjay5cbiAgICBpZiAobmV4dFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTsgLy8gVGhpcyBjb3VsZCd2ZSBiZWVuIGEgZGVoeWRyYXRlZCBzdXNwZW5zZSBjb21wb25lbnQuXG4gICAgfVxuXG4gICAgdmFyIG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIG5leHRGYWxsYmFja0NoaWxkcmVuID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuXG4gICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgdmFyIGZhbGxiYWNrRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQubWVtb2l6ZWRTdGF0ZSA9IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgIHJldHVybiBmYWxsYmFja0ZyYWdtZW50O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wcy51bnN0YWJsZV9leHBlY3RlZExvYWRUaW1lID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGhpcyBpcyBhIENQVS1ib3VuZCB0cmVlLiBTa2lwIHRoaXMgdHJlZSBhbmQgc2hvdyBhIHBsYWNlaG9sZGVyIHRvXG4gICAgICAvLyB1bmJsb2NrIHRoZSBzdXJyb3VuZGluZyBjb250ZW50LiBUaGVuIGltbWVkaWF0ZWx5IHJldHJ5IGFmdGVyIHRoZVxuICAgICAgLy8gaW5pdGlhbCBjb21taXQuXG4gICAgICB2YXIgX2ZhbGxiYWNrRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcblxuICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50Lm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzIHRvXG4gICAgICAvLyBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXMgb2ZcbiAgICAgIC8vIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlciwgaXQnc1xuICAgICAgLy8gbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhcyBjb21taXR0ZWQuIElmXG4gICAgICAvLyBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmUgcGFpbnRlZC5cbiAgICAgIC8vIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy4gV2UgY2FuIHVzZSBhbnlcbiAgICAgIC8vIFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nIHNpbmNlIHdlJ3JlIGxlYXZpbmdcbiAgICAgIC8vIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcblxuICAgICAge1xuICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfZmFsbGJhY2tGcmFnbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBhbiB1cGRhdGUuXG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgZmliZXIgaGFzIGEgU3VzcGVuc2VTdGF0ZSwgdGhhdCBtZWFucyBpdCdzIGFscmVhZHkgc2hvd2luZ1xuICAgIC8vIGEgZmFsbGJhY2suXG4gICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcblxuICAgICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgICB2YXIgX25leHRGYWxsYmFja0NoaWxkcmVuMiA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW4yLCBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4yLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdGF0ZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50My5tZW1vaXplZFN0YXRlID0gcHJldk9mZnNjcmVlblN0YXRlID09PSBudWxsID8gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSA6IHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICAgIHJldHVybiBfZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMyA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NCA9IHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjMsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBjdXJyZW50IHRyZWUgaXMgbm90IGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrLlxuICAgICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgICAvLyBUaW1lZCBvdXQuXG4gICAgICAgIHZhciBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4zID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW40ID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfZmFsbGJhY2tDaGlsZEZyYWdtZW50MiA9IHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW40LCBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4zLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgdmFyIF9wcmV2T2Zmc2NyZWVuU3RhdGUgPSBjdXJyZW50LmNoaWxkLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUubWVtb2l6ZWRTdGF0ZSA9IF9wcmV2T2Zmc2NyZWVuU3RhdGUgPT09IG51bGwgPyBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIDogdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShfcHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKTsgLy8gU2tpcCB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgYW5kIGNvbnRpbnVlIHdvcmtpbmcgb24gdGhlXG4gICAgICAgIC8vIGZhbGxiYWNrIGNoaWxkcmVuLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgICByZXR1cm4gX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTdGlsbCBoYXZlbid0IHRpbWVkIG91dC4gQ29udGludWUgcmVuZGVyaW5nIHRoZSBjaGlsZHJlbiwgbGlrZSB3ZVxuICAgICAgICAvLyBub3JtYWxseSBkby5cbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuNSA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NiA9IHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjUsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDY7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ3Zpc2libGUnLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHByaW1hcnlDaGlsZFByb3BzLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIGZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICdoaWRkZW4nLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuXG4gIGlmICgobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSAmJiBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAgIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50O1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnBlbmRpbmdQcm9wcyA9IHByaW1hcnlDaGlsZFByb3BzO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBkdXJhdGlvbnMgZnJvbSB0aGUgZmlyc3QgcGFzcyBzbyB0aGV5IGFyZW4ndCBpbmNsdWRlZCBpbiB0aGVcbiAgICAgIC8vIGZpbmFsIGFtb3VudHMuIFRoaXMgc2VlbXMgY291bnRlcmludHVpdGl2ZSwgc2luY2Ugd2UncmUgaW50ZW50aW9uYWxseVxuICAgICAgLy8gbm90IG1lYXN1cmluZyBwYXJ0IG9mIHRoZSByZW5kZXIgcGhhc2UsIGJ1dCB0aGlzIG1ha2VzIGl0IG1hdGNoIHdoYXQgd2VcbiAgICAgIC8vIGRvIGluIENvbmN1cnJlbnQgTW9kZS5cbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgICB9XG5cbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIH0gZWxzZSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocHJpbWFyeUNoaWxkUHJvcHMsIG1vZGUsIE5vTGFuZXMsIG51bGwpO1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgfVxuXG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudCwgb2Zmc2NyZWVuUHJvcHMpIHtcbiAgLy8gVGhlIHByb3BzIGFyZ3VtZW50IHRvIGBjcmVhdGVXb3JrSW5Qcm9ncmVzc2AgaXMgYGFueWAgdHlwZWQsIHNvIHdlIHVzZSB0aGlzXG4gIC8vIHdyYXBwZXIgZnVuY3Rpb24gdG8gY29uc3RyYWluIGl0LlxuICByZXR1cm4gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgb2Zmc2NyZWVuUHJvcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgdmFyIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZztcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQsIHtcbiAgICBtb2RlOiAndmlzaWJsZScsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9KTtcblxuICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5sYW5lcyA9IHJlbmRlckxhbmVzO1xuICB9XG5cbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBudWxsO1xuXG4gIGlmIChjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgLy8gRGVsZXRlIHRoZSBmYWxsYmFjayBjaGlsZCBmcmFnbWVudFxuICAgIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudC5mbGFncyA9IERlbGV0aW9uO1xuICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCBmYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjdXJyZW50LmNoaWxkO1xuICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ2hpZGRlbicsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKCAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgY29tbWl0IHRoZSBwcmltYXJ5IHRyZWUgYXMgaWYgaXQgc3VjY2Vzc2Z1bGx5XG4gIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gIChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlICYmIC8vIE1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgc2Vjb25kIHBhc3MsIGkuZS4gdGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgd2FzXG4gIC8vIGFscmVhZHkgY2xvbmVkLiBJbiBsZWdhY3kgbW9kZSwgdGhlIG9ubHkgY2FzZSB3aGVyZSB0aGlzIGlzbid0IHRydWUgaXNcbiAgLy8gd2hlbiBEZXZUb29scyBmb3JjZXMgdXMgdG8gZGlzcGxheSBhIGZhbGxiYWNrOyB3ZSBza2lwIHRoZSBmaXJzdCByZW5kZXJcbiAgLy8gcGFzcyBlbnRpcmVseSBhbmQgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjay4gKEluIENvbmN1cnJlbnRcbiAgLy8gTW9kZSwgU3VzcGVuc2VMaXN0IGNhbiBhbHNvIHRyaWdnZXIgdGhpcyBzY2VuYXJpbywgYnV0IHRoaXMgaXMgYSBsZWdhY3ktXG4gIC8vIG9ubHkgY29kZXBhdGguKVxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50KSB7XG4gICAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIGR1cmF0aW9ucyBmcm9tIHRoZSBmaXJzdCBwYXNzIHNvIHRoZXkgYXJlbid0IGluY2x1ZGVkIGluIHRoZVxuICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgLy8gZG8gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgfSAvLyBUaGUgZmFsbGJhY2sgZmliZXIgd2FzIGFkZGVkIGFzIGEgZGVsZXRpb24gZWZmZWN0IGR1cmluZyB0aGUgZmlyc3QgcGFzcy5cbiAgICAvLyBIb3dldmVyLCBzaW5jZSB3ZSdyZSBnb2luZyB0byByZW1haW4gb24gdGhlIGZhbGxiYWNrLCB3ZSBubyBsb25nZXIgd2FudFxuICAgIC8vIHRvIGRlbGV0ZSBpdC4gU28gd2UgbmVlZCB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdC4gRGVsZXRpb25zIGFyZSBzdG9yZWRcbiAgICAvLyBvbiB0aGUgc2FtZSBsaXN0IGFzIGVmZmVjdHMuIFdlIHdhbnQgdG8ga2VlcCB0aGUgZWZmZWN0cyBmcm9tIHRoZSBwcmltYXJ5XG4gICAgLy8gdHJlZS4gU28gd2UgY29weSB0aGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCdzIGVmZmVjdCBsaXN0LCB3aGljaCBkb2VzIG5vdFxuICAgIC8vIGluY2x1ZGUgdGhlIGZhbGxiYWNrIGRlbGV0aW9uIGVmZmVjdC5cblxuXG4gICAgdmFyIHByb2dyZXNzZWRMYXN0RWZmZWN0ID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQubGFzdEVmZmVjdDtcblxuICAgIGlmIChwcm9ncmVzc2VkTGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5maXJzdEVmZmVjdDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBwcm9ncmVzc2VkTGFzdEVmZmVjdDtcbiAgICAgIHByb2dyZXNzZWRMYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBSZXNldCB0aGlzIHNvbWV3aGVyZSBlbHNlPyBMb2wgbGVnYWN5IG1vZGUgaXMgc28gd2VpcmQuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LCBwcmltYXJ5Q2hpbGRQcm9wcyk7XG4gIH1cblxuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuXG4gIGlmIChjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCwgZmFsbGJhY2tDaGlsZHJlbik7XG4gIH0gZWxzZSB7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpOyAvLyBOZWVkcyBhIHBsYWNlbWVudCBlZmZlY3QgYmVjYXVzZSB0aGUgcGFyZW50ICh0aGUgU3VzcGVuc2UgYm91bmRhcnkpIGFscmVhZHlcbiAgICAvLyBtb3VudGVkIGJ1dCB0aGlzIGlzIGEgbmV3IGZpYmVyLlxuXG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlV29ya09uRmliZXIoZmliZXIsIHJlbmRlckxhbmVzKSB7XG4gIGZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhmaWJlci5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGZpcnN0Q2hpbGQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIE1hcmsgYW55IFN1c3BlbnNlIGJvdW5kYXJpZXMgd2l0aCBmYWxsYmFja3MgYXMgaGF2aW5nIHdvcmsgdG8gZG8uXG4gIC8vIElmIHRoZXkgd2VyZSBwcmV2aW91c2x5IGZvcmNlZCBpbnRvIGZhbGxiYWNrcywgdGhleSBtYXkgbm93IGJlIGFibGVcbiAgLy8gdG8gdW5ibG9jay5cbiAgdmFyIG5vZGUgPSBmaXJzdENoaWxkO1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgc2NoZWR1bGVXb3JrT25GaWJlcihub2RlLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VMaXN0Q29tcG9uZW50KSB7XG4gICAgICAvLyBJZiB0aGUgdGFpbCBpcyBoaWRkZW4gdGhlcmUgbWlnaHQgbm90IGJlIGFuIFN1c3BlbnNlIGJvdW5kYXJpZXNcbiAgICAgIC8vIHRvIHNjaGVkdWxlIHdvcmsgb24uIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG9uIHRoZVxuICAgICAgLy8gbGlzdCBpdHNlbGYuXG4gICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHRyYXZlcnNlIHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgbGlzdCBzaW5jZVxuICAgICAgLy8gdGhlIGxpc3Qgd2lsbCBwcm9wYWdhdGUgdGhlIGNoYW5nZSB3aGVuIGl0IHJlcmVuZGVycy5cbiAgICAgIHNjaGVkdWxlV29ya09uRmliZXIobm9kZSwgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRMYXN0Q29udGVudFJvdyhmaXJzdENoaWxkKSB7XG4gIC8vIFRoaXMgaXMgZ29pbmcgdG8gZmluZCB0aGUgbGFzdCByb3cgYW1vbmcgdGhlc2UgY2hpbGRyZW4gdGhhdCBpcyBhbHJlYWR5XG4gIC8vIHNob3dpbmcgY29udGVudCBvbiB0aGUgc2NyZWVuLCBhcyBvcHBvc2VkIHRvIGJlaW5nIGluIGZhbGxiYWNrIHN0YXRlIG9yXG4gIC8vIG5ldy4gSWYgYSByb3cgaGFzIG11bHRpcGxlIFN1c3BlbnNlIGJvdW5kYXJpZXMsIGFueSBvZiB0aGVtIGJlaW5nIGluIHRoZVxuICAvLyBmYWxsYmFjayBzdGF0ZSwgY291bnRzIGFzIHRoZSB3aG9sZSByb3cgYmVpbmcgaW4gYSBmYWxsYmFjayBzdGF0ZS5cbiAgLy8gTm90ZSB0aGF0IHRoZSBcInJvd3NcIiB3aWxsIGJlIHdvcmtJblByb2dyZXNzLCBidXQgYW55IG5lc3RlZCBjaGlsZHJlblxuICAvLyB3aWxsIHN0aWxsIGJlIGN1cnJlbnQgc2luY2Ugd2UgaGF2ZW4ndCByZW5kZXJlZCB0aGVtIHlldC4gVGhlIG1vdW50ZWRcbiAgLy8gb3JkZXIgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgbmV3IG9yZGVyLiBXZSB1c2UgdGhlIG5ldyBvcmRlci5cbiAgdmFyIHJvdyA9IGZpcnN0Q2hpbGQ7XG4gIHZhciBsYXN0Q29udGVudFJvdyA9IG51bGw7XG5cbiAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50Um93ID0gcm93LmFsdGVybmF0ZTsgLy8gTmV3IHJvd3MgY2FuJ3QgYmUgY29udGVudCByb3dzLlxuXG4gICAgaWYgKGN1cnJlbnRSb3cgIT09IG51bGwgJiYgZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnRSb3cpID09PSBudWxsKSB7XG4gICAgICBsYXN0Q29udGVudFJvdyA9IHJvdztcbiAgICB9XG5cbiAgICByb3cgPSByb3cuc2libGluZztcbiAgfVxuXG4gIHJldHVybiBsYXN0Q29udGVudFJvdztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKHJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQgJiYgcmV2ZWFsT3JkZXIgIT09ICdmb3J3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICdiYWNrd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAndG9nZXRoZXInICYmICFkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcltyZXZlYWxPcmRlcl0pIHtcbiAgICAgIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgcmV2ZWFsT3JkZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN3aXRjaCAocmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgJ3RvZ2V0aGVyJzpcbiAgICAgICAgICBjYXNlICdmb3J3YXJkcyc6XG4gICAgICAgICAgY2FzZSAnYmFja3dhcmRzJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdVc2UgbG93ZXJjYXNlIFwiJXNcIiBpbnN0ZWFkLicsIHJldmVhbE9yZGVyLCByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ2ZvcndhcmQnOlxuICAgICAgICAgIGNhc2UgJ2JhY2t3YXJkJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdSZWFjdCB1c2VzIHRoZSAtcyBzdWZmaXggaW4gdGhlIHNwZWxsaW5nLiBVc2UgXCIlc3NcIiBpbnN0ZWFkLicsIHJldmVhbE9yZGVyLCByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiPycsIHJldmVhbE9yZGVyKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JywgcmV2ZWFsT3JkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKHRhaWxNb2RlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSkge1xuICAgICAgaWYgKHRhaWxNb2RlICE9PSAnY29sbGFwc2VkJyAmJiB0YWlsTW9kZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgdGFpbCBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcImNvbGxhcHNlZFwiIG9yIFwiaGlkZGVuXCI/JywgdGFpbE1vZGUpO1xuICAgICAgfSBlbHNlIGlmIChyZXZlYWxPcmRlciAhPT0gJ2ZvcndhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ2JhY2t3YXJkcycpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignPFN1c3BlbnNlTGlzdCB0YWlsPVwiJXNcIiAvPiBpcyBvbmx5IHZhbGlkIGlmIHJldmVhbE9yZGVyIGlzICcgKyAnXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCIuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHNwZWNpZnkgcmV2ZWFsT3JkZXI9XCJmb3J3YXJkc1wiPycsIHRhaWxNb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChjaGlsZFNsb3QsIGluZGV4KSB7XG4gIHtcbiAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoY2hpbGRTbG90KTtcbiAgICB2YXIgaXNJdGVyYWJsZSA9ICFpc0FycmF5ICYmIHR5cGVvZiBnZXRJdGVyYXRvckZuKGNoaWxkU2xvdCkgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaXNBcnJheSB8fCBpc0l0ZXJhYmxlKSB7XG4gICAgICB2YXIgdHlwZSA9IGlzQXJyYXkgPyAnYXJyYXknIDogJ2l0ZXJhYmxlJztcblxuICAgICAgZXJyb3IoJ0EgbmVzdGVkICVzIHdhcyBwYXNzZWQgdG8gcm93ICMlcyBpbiA8U3VzcGVuc2VMaXN0IC8+LiBXcmFwIGl0IGluICcgKyAnYW4gYWRkaXRpb25hbCBTdXNwZW5zZUxpc3QgdG8gY29uZmlndXJlIGl0cyByZXZlYWxPcmRlcjogJyArICc8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj4gLi4uICcgKyAnPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+eyVzfTwvU3VzcGVuc2VMaXN0PiAuLi4gJyArICc8L1N1c3BlbnNlTGlzdD4nLCB0eXBlLCBpbmRleCwgdHlwZSk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdXNwZW5zZUxpc3RDaGlsZHJlbihjaGlsZHJlbiwgcmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmICgocmV2ZWFsT3JkZXIgPT09ICdmb3J3YXJkcycgfHwgcmV2ZWFsT3JkZXIgPT09ICdiYWNrd2FyZHMnKSAmJiBjaGlsZHJlbiAhPT0gdW5kZWZpbmVkICYmIGNoaWxkcmVuICE9PSBudWxsICYmIGNoaWxkcmVuICE9PSBmYWxzZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRyZW5baV0sIGkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjaGlsZHJlbkl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcblxuICAgICAgICAgIGlmIChjaGlsZHJlbkl0ZXJhdG9yKSB7XG4gICAgICAgICAgICB2YXIgc3RlcCA9IGNoaWxkcmVuSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgdmFyIF9pID0gMDtcblxuICAgICAgICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IHN0ZXAgPSBjaGlsZHJlbkl0ZXJhdG9yLm5leHQoKSkge1xuICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoc3RlcC52YWx1ZSwgX2kpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgX2krKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IoJ0Egc2luZ2xlIHJvdyB3YXMgcGFzc2VkIHRvIGEgPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj1cIiVzXCIgLz4uICcgKyAnVGhpcyBpcyBub3QgdXNlZnVsIHNpbmNlIGl0IG5lZWRzIG11bHRpcGxlIHJvd3MuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHBhc3MgbXVsdGlwbGUgY2hpbGRyZW4gb3IgYW4gYXJyYXk/JywgcmV2ZWFsT3JkZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgaXNCYWNrd2FyZHMsIHRhaWwsIGxhc3RDb250ZW50Um93LCB0YWlsTW9kZSwgbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZykge1xuICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChyZW5kZXJTdGF0ZSA9PT0gbnVsbCkge1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICBpc0JhY2t3YXJkczogaXNCYWNrd2FyZHMsXG4gICAgICByZW5kZXJpbmc6IG51bGwsXG4gICAgICByZW5kZXJpbmdTdGFydFRpbWU6IDAsXG4gICAgICBsYXN0OiBsYXN0Q29udGVudFJvdyxcbiAgICAgIHRhaWw6IHRhaWwsXG4gICAgICB0YWlsTW9kZTogdGFpbE1vZGUsXG4gICAgICBsYXN0RWZmZWN0OiBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIG9iamVjdCBmcm9tIHByZXZpb3VzIHJlbmRlcnMuXG4gICAgcmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMgPSBpc0JhY2t3YXJkcztcbiAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IDA7XG4gICAgcmVuZGVyU3RhdGUubGFzdCA9IGxhc3RDb250ZW50Um93O1xuICAgIHJlbmRlclN0YXRlLnRhaWwgPSB0YWlsO1xuICAgIHJlbmRlclN0YXRlLnRhaWxNb2RlID0gdGFpbE1vZGU7XG4gICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmc7XG4gIH1cbn0gLy8gVGhpcyBjYW4gZW5kIHVwIHJlbmRlcmluZyB0aGlzIGNvbXBvbmVudCBtdWx0aXBsZSBwYXNzZXMuXG4vLyBUaGUgZmlyc3QgcGFzcyBzcGxpdHMgdGhlIGNoaWxkcmVuIGZpYmVycyBpbnRvIHR3byBzZXRzLiBBIGhlYWQgYW5kIHRhaWwuXG4vLyBXZSBmaXJzdCByZW5kZXIgdGhlIGhlYWQuIElmIGFueXRoaW5nIGlzIGluIGZhbGxiYWNrIHN0YXRlLCB3ZSBkbyBhbm90aGVyXG4vLyBwYXNzIHRocm91Z2ggYmVnaW5Xb3JrIHRvIHJlcmVuZGVyIGFsbCBjaGlsZHJlbiAoaW5jbHVkaW5nIHRoZSB0YWlsKSB3aXRoXG4vLyB0aGUgZm9yY2Ugc3VzcGVuZCBjb250ZXh0LiBJZiB0aGUgZmlyc3QgcmVuZGVyIGRpZG4ndCBoYXZlIGFueXRoaW5nIGluXG4vLyBpbiBmYWxsYmFjayBzdGF0ZS4gVGhlbiB3ZSByZW5kZXIgZWFjaCByb3cgaW4gdGhlIHRhaWwgb25lLWJ5LW9uZS5cbi8vIFRoYXQgaGFwcGVucyBpbiB0aGUgY29tcGxldGVXb3JrIHBoYXNlIHdpdGhvdXQgZ29pbmcgYmFjayB0byBiZWdpbldvcmsuXG5cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmV2ZWFsT3JkZXIgPSBuZXh0UHJvcHMucmV2ZWFsT3JkZXI7XG4gIHZhciB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhbGlkYXRlUmV2ZWFsT3JkZXIocmV2ZWFsT3JkZXIpO1xuICB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcik7XG4gIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4obmV3Q2hpbGRyZW4sIHJldmVhbE9yZGVyKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIHZhciBzaG91bGRGb3JjZUZhbGxiYWNrID0gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcblxuICBpZiAoc2hvdWxkRm9yY2VGYWxsYmFjaykge1xuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSBjdXJyZW50ICE9PSBudWxsICYmIChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgLy8gSWYgd2UgcHJldmlvdXNseSBmb3JjZWQgYSBmYWxsYmFjaywgd2UgbmVlZCB0byBzY2hlZHVsZSB3b3JrXG4gICAgICAvLyBvbiBhbnkgbmVzdGVkIGJvdW5kYXJpZXMgdG8gbGV0IHRoZW0ga25vdyB0byB0cnkgdG8gcmVuZGVyXG4gICAgICAvLyBhZ2Fpbi4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjb250ZXh0IHVwZGF0aW5nLlxuICAgICAgcHJvcGFnYXRlU3VzcGVuc2VDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZCwgcmVuZGVyTGFuZXMpO1xuICAgIH1cblxuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gIH1cblxuICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIC8vIEluIGxlZ2FjeSBtb2RlLCBTdXNwZW5zZUxpc3QgZG9lc24ndCB3b3JrIHNvIHdlIGp1c3RcbiAgICAvLyB1c2UgbWFrZSBpdCBhIG5vb3AgYnkgdHJlYXRpbmcgaXQgYXMgdGhlIGRlZmF1bHQgcmV2ZWFsT3JkZXIuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoIChyZXZlYWxPcmRlcikge1xuICAgICAgY2FzZSAnZm9yd2FyZHMnOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhc3RDb250ZW50Um93ID0gZmluZExhc3RDb250ZW50Um93KHdvcmtJblByb2dyZXNzLmNoaWxkKTtcbiAgICAgICAgICB2YXIgdGFpbDtcblxuICAgICAgICAgIGlmIChsYXN0Q29udGVudFJvdyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIHdob2xlIGxpc3QgaXMgcGFydCBvZiB0aGUgdGFpbC5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIGNvdWxkIGZhc3QgcGF0aCBieSBqdXN0IHJlbmRlcmluZyB0aGUgdGFpbCBub3cuXG4gICAgICAgICAgICB0YWlsID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERpc2Nvbm5lY3QgdGhlIHRhaWwgcm93cyBhZnRlciB0aGUgY29udGVudCByb3cuXG4gICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byByZW5kZXIgdGhlbSBzZXBhcmF0ZWx5IGxhdGVyLlxuICAgICAgICAgICAgdGFpbCA9IGxhc3RDb250ZW50Um93LnNpYmxpbmc7XG4gICAgICAgICAgICBsYXN0Q29udGVudFJvdy5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGZhbHNlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIHRhaWwsIGxhc3RDb250ZW50Um93LCB0YWlsTW9kZSwgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYmFja3dhcmRzJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGZpbmQgdGhlIGZpcnN0IHJvdyB0aGF0IGhhcyBleGlzdGluZyBjb250ZW50LlxuICAgICAgICAgIC8vIEF0IHRoZSBzYW1lIHRpbWUgd2UncmUgZ29pbmcgdG8gcmV2ZXJzZSB0aGUgbGlzdCBvZiBldmVyeXRoaW5nXG4gICAgICAgICAgLy8gd2UgcGFzcyBpbiB0aGUgbWVhbnRpbWUuIFRoYXQncyBnb2luZyB0byBiZSBvdXIgdGFpbCBpbiByZXZlcnNlXG4gICAgICAgICAgLy8gb3JkZXIuXG4gICAgICAgICAgdmFyIF90YWlsID0gbnVsbDtcbiAgICAgICAgICB2YXIgcm93ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuXG4gICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRSb3cgPSByb3cuYWx0ZXJuYXRlOyAvLyBOZXcgcm93cyBjYW4ndCBiZSBjb250ZW50IHJvd3MuXG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Um93ICE9PSBudWxsICYmIGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50Um93KSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1haW4gY29udGVudC5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByb3c7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbmV4dFJvdyA9IHJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgcm93LnNpYmxpbmcgPSBfdGFpbDtcbiAgICAgICAgICAgIF90YWlsID0gcm93O1xuICAgICAgICAgICAgcm93ID0gbmV4dFJvdztcbiAgICAgICAgICB9IC8vIFRPRE86IElmIHdvcmtJblByb2dyZXNzLmNoaWxkIGlzIG51bGwsIHdlIGNhbiBjb250aW51ZSBvbiB0aGUgdGFpbCBpbW1lZGlhdGVseS5cblxuXG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCB0cnVlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIF90YWlsLCBudWxsLCAvLyBsYXN0XG4gICAgICAgICAgdGFpbE1vZGUsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ3RvZ2V0aGVyJzpcbiAgICAgICAge1xuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgbnVsbCwgLy8gdGFpbFxuICAgICAgICAgIG51bGwsIC8vIGxhc3RcbiAgICAgICAgICB1bmRlZmluZWQsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUaGUgZGVmYXVsdCByZXZlYWwgb3JkZXIgaXMgdGhlIHNhbWUgYXMgbm90IGhhdmluZ1xuICAgICAgICAgIC8vIGEgYm91bmRhcnkuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVBvcnRhbENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIFBvcnRhbHMgYXJlIHNwZWNpYWwgYmVjYXVzZSB3ZSBkb24ndCBhcHBlbmQgdGhlIGNoaWxkcmVuIGR1cmluZyBtb3VudFxuICAgIC8vIGJ1dCBhdCBjb21taXQuIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIHRyYWNrIGluc2VydGlvbnMgd2hpY2ggdGhlIG5vcm1hbFxuICAgIC8vIGZsb3cgZG9lc24ndCBkbyBkdXJpbmcgbW91bnQuIFRoaXMgZG9lc24ndCBoYXBwZW4gYXQgdGhlIHJvb3QgYmVjYXVzZVxuICAgIC8vIHRoZSByb290IGFsd2F5cyBzdGFydHMgd2l0aCBhIFwiY3VycmVudFwiIHdpdGggYSBudWxsIGNoaWxkLlxuICAgIC8vIFRPRE86IENvbnNpZGVyIHVuaWZ5aW5nIHRoaXMgd2l0aCBob3cgdGhlIHJvb3Qgd29ya3MuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG52YXIgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dFByb3ZpZGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgcHJvdmlkZXJUeXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlclR5cGUuX2NvbnRleHQ7XG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgdmFyIG5ld1ZhbHVlID0gbmV3UHJvcHMudmFsdWU7XG5cbiAge1xuICAgIGlmICghKCd2YWx1ZScgaW4gbmV3UHJvcHMpKSB7XG4gICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignVGhlIGB2YWx1ZWAgcHJvcCBpcyByZXF1aXJlZCBmb3IgdGhlIGA8Q29udGV4dC5Qcm92aWRlcj5gLiBEaWQgeW91IG1pc3NwZWxsIGl0IG9yIGZvcmdldCB0byBwYXNzIGl0PycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcm92aWRlclByb3BUeXBlcyA9IHdvcmtJblByb2dyZXNzLnR5cGUucHJvcFR5cGVzO1xuXG4gICAgaWYgKHByb3ZpZGVyUHJvcFR5cGVzKSB7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm92aWRlclByb3BUeXBlcywgbmV3UHJvcHMsICdwcm9wJywgJ0NvbnRleHQuUHJvdmlkZXInKTtcbiAgICB9XG4gIH1cblxuICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIG5ld1ZhbHVlKTtcblxuICBpZiAob2xkUHJvcHMgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkVmFsdWUgPSBvbGRQcm9wcy52YWx1ZTtcbiAgICB2YXIgY2hhbmdlZEJpdHMgPSBjYWxjdWxhdGVDaGFuZ2VkQml0cyhjb250ZXh0LCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuXG4gICAgaWYgKGNoYW5nZWRCaXRzID09PSAwKSB7XG4gICAgICAvLyBObyBjaGFuZ2UuIEJhaWxvdXQgZWFybHkgaWYgY2hpbGRyZW4gYXJlIHRoZSBzYW1lLlxuICAgICAgaWYgKG9sZFByb3BzLmNoaWxkcmVuID09PSBuZXdQcm9wcy5jaGlsZHJlbiAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSkge1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgY29udGV4dCB2YWx1ZSBjaGFuZ2VkLiBTZWFyY2ggZm9yIG1hdGNoaW5nIGNvbnN1bWVycyBhbmQgc2NoZWR1bGVcbiAgICAgIC8vIHRoZW0gdG8gdXBkYXRlLlxuICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgY2hhbmdlZEJpdHMsIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxudmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0Q29uc3VtZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MudHlwZTsgLy8gVGhlIGxvZ2ljIGJlbG93IGZvciBDb250ZXh0IGRpZmZlcnMgZGVwZW5kaW5nIG9uIFBST0Qgb3IgREVWIG1vZGUuIEluXG4gIC8vIERFViBtb2RlLCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSBvYmplY3QgZm9yIENvbnRleHQuQ29uc3VtZXIgdGhhdCBhY3RzXG4gIC8vIGxpa2UgYSBwcm94eSB0byBDb250ZXh0LiBUaGlzIHByb3h5IG9iamVjdCBhZGRzIHVubmVjZXNzYXJ5IGNvZGUgaW4gUFJPRFxuICAvLyBzbyB3ZSB1c2UgdGhlIG9sZCBiZWhhdmlvdXIgKENvbnRleHQuQ29uc3VtZXIgcmVmZXJlbmNlcyBDb250ZXh0KSB0b1xuICAvLyByZWR1Y2Ugc2l6ZSBhbmQgb3ZlcmhlYWQuIFRoZSBzZXBhcmF0ZSBvYmplY3QgcmVmZXJlbmNlcyBjb250ZXh0IHZpYVxuICAvLyBhIHByb3BlcnR5IGNhbGxlZCBcIl9jb250ZXh0XCIsIHdoaWNoIGFsc28gZ2l2ZXMgdXMgdGhlIGFiaWxpdHkgdG8gY2hlY2tcbiAgLy8gaW4gREVWIG1vZGUgaWYgdGhpcyBwcm9wZXJ0eSBleGlzdHMgb3Igbm90IGFuZCB3YXJuIGlmIGl0IGRvZXMgbm90LlxuXG4gIHtcbiAgICBpZiAoY29udGV4dC5fY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUaGlzIG1heSBiZSBiZWNhdXNlIGl0J3MgYSBDb250ZXh0IChyYXRoZXIgdGhhbiBhIENvbnN1bWVyKS5cbiAgICAgIC8vIE9yIGl0IG1heSBiZSBiZWNhdXNlIGl0J3Mgb2xkZXIgUmVhY3Qgd2hlcmUgdGhleSdyZSB0aGUgc2FtZSB0aGluZy5cbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byB3YXJuIGlmIHdlJ3JlIHN1cmUgaXQncyBhIG5ldyBSZWFjdC5cbiAgICAgIGlmIChjb250ZXh0ICE9PSBjb250ZXh0LkNvbnN1bWVyKSB7XG4gICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyKSB7XG4gICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQ+IGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dCA9IGNvbnRleHQuX2NvbnRleHQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmVuZGVyID0gbmV3UHJvcHMuY2hpbGRyZW47XG5cbiAge1xuICAgIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignQSBjb250ZXh0IGNvbnN1bWVyIHdhcyByZW5kZXJlZCB3aXRoIG11bHRpcGxlIGNoaWxkcmVuLCBvciBhIGNoaWxkICcgKyBcInRoYXQgaXNuJ3QgYSBmdW5jdGlvbi4gQSBjb250ZXh0IGNvbnN1bWVyIGV4cGVjdHMgYSBzaW5nbGUgY2hpbGQgXCIgKyAndGhhdCBpcyBhIGZ1bmN0aW9uLiBJZiB5b3UgZGlkIHBhc3MgYSBmdW5jdGlvbiwgbWFrZSBzdXJlIHRoZXJlICcgKyAnaXMgbm8gdHJhaWxpbmcgb3IgbGVhZGluZyB3aGl0ZXNwYWNlIGFyb3VuZCBpdC4nKTtcbiAgICB9XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgbmV3VmFsdWUgPSByZWFkQ29udGV4dChjb250ZXh0LCBuZXdQcm9wcy51bnN0YWJsZV9vYnNlcnZlZEJpdHMpO1xuICB2YXIgbmV3Q2hpbGRyZW47XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5ld0NoaWxkcmVuID0gcmVuZGVyKG5ld1ZhbHVlKTtcbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKSB7XG4gIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIFJldXNlIHByZXZpb3VzIGRlcGVuZGVuY2llc1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IHVwZGF0ZSBcImJhc2VcIiByZW5kZXIgdGltZXMgZm9yIGJhaWxvdXRzLlxuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gIH1cblxuICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzKTsgLy8gQ2hlY2sgaWYgdGhlIGNoaWxkcmVuIGhhdmUgYW55IHBlbmRpbmcgd29yay5cblxuICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKSB7XG4gICAgLy8gVGhlIGNoaWxkcmVuIGRvbid0IGhhdmUgYW55IHdvcmsgZWl0aGVyLiBXZSBjYW4gc2tpcCB0aGVtLlxuICAgIC8vIFRPRE86IE9uY2Ugd2UgYWRkIGJhY2sgcmVzdW1pbmcsIHdlIHNob3VsZCBjaGVjayBpZiB0aGUgY2hpbGRyZW4gYXJlXG4gICAgLy8gYSB3b3JrLWluLXByb2dyZXNzIHNldC4gSWYgc28sIHdlIG5lZWQgdG8gdHJhbnNmZXIgdGhlaXIgZWZmZWN0cy5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGZpYmVyIGRvZXNuJ3QgaGF2ZSB3b3JrLCBidXQgaXRzIHN1YnRyZWUgZG9lcy4gQ2xvbmUgdGhlIGNoaWxkXG4gICAgLy8gZmliZXJzIGFuZCBjb250aW51ZS5cbiAgICBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3VudEZpYmVyKGN1cnJlbnQsIG9sZFdvcmtJblByb2dyZXNzLCBuZXdXb3JrSW5Qcm9ncmVzcykge1xuICB7XG4gICAgdmFyIHJldHVybkZpYmVyID0gb2xkV29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuXG4gICAgaWYgKHJldHVybkZpYmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzd2FwIHRoZSByb290IGZpYmVyLicpO1xuICAgIH0gLy8gRGlzY29ubmVjdCBmcm9tIHRoZSBvbGQgY3VycmVudC5cbiAgICAvLyBJdCB3aWxsIGdldCBkZWxldGVkLlxuXG5cbiAgICBjdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgb2xkV29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gQ29ubmVjdCB0byB0aGUgbmV3IHRyZWUuXG5cbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5pbmRleCA9IG9sZFdvcmtJblByb2dyZXNzLmluZGV4O1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBvbGRXb3JrSW5Qcm9ncmVzcy5zaWJsaW5nO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnJldHVybiA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5yZWYgPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZWY7IC8vIFJlcGxhY2UgdGhlIGNoaWxkL3NpYmxpbmcgcG9pbnRlcnMgYWJvdmUgaXQuXG5cbiAgICBpZiAob2xkV29ya0luUHJvZ3Jlc3MgPT09IHJldHVybkZpYmVyLmNoaWxkKSB7XG4gICAgICByZXR1cm5GaWJlci5jaGlsZCA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJldlNpYmxpbmcgPSByZXR1cm5GaWJlci5jaGlsZDtcblxuICAgICAgaWYgKHByZXZTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcGFyZW50IHRvIGhhdmUgYSBjaGlsZC4nKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHByZXZTaWJsaW5nLnNpYmxpbmcgIT09IG9sZFdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHByZXZTaWJsaW5nID0gcHJldlNpYmxpbmcuc2libGluZztcblxuICAgICAgICBpZiAocHJldlNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgdGhlIHByZXZpb3VzIHNpYmxpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJldlNpYmxpbmcuc2libGluZyA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgIH0gLy8gRGVsZXRlIHRoZSBvbGQgZmliZXIgYW5kIHBsYWNlIHRoZSBuZXcgb25lLlxuICAgIC8vIFNpbmNlIHRoZSBvbGQgZmliZXIgaXMgZGlzY29ubmVjdGVkLCB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG1hbnVhbGx5LlxuXG5cbiAgICB2YXIgbGFzdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdCAhPT0gbnVsbCkge1xuICAgICAgbGFzdC5uZXh0RWZmZWN0ID0gY3VycmVudDtcbiAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjdXJyZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIGN1cnJlbnQubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY3VycmVudC5mbGFncyA9IERlbGV0aW9uO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDsgLy8gUmVzdGFydCB3b3JrIGZyb20gdGhlIG5ldyBmaWJlci5cblxuICAgIHJldHVybiBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgfVxufVxuXG5mdW5jdGlvbiBiZWdpbldvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciB1cGRhdGVMYW5lcyA9IHdvcmtJblByb2dyZXNzLmxhbmVzO1xuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ICYmIGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgd2lsbCByZXN0YXJ0IHRoZSBiZWdpbiBwaGFzZSB3aXRoIGEgbmV3IGZpYmVyLlxuICAgICAgcmV0dXJuIHJlbW91bnRGaWJlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzLmtleSwgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLCB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciB8fCBudWxsLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYW5lcykpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMgfHwgaGFzQ29udGV4dENoYW5nZWQoKSB8fCAoIC8vIEZvcmNlIGEgcmUtcmVuZGVyIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkOlxuICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSBjdXJyZW50LnR5cGUgKSkge1xuICAgICAgLy8gSWYgcHJvcHMgb3IgY29udGV4dCBjaGFuZ2VkLCBtYXJrIHRoZSBmaWJlciBhcyBoYXZpbmcgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAvLyBUaGlzIG1heSBiZSB1bnNldCBpZiB0aGUgcHJvcHMgYXJlIGRldGVybWluZWQgdG8gYmUgZXF1YWwgbGF0ZXIgKG1lbW8pLlxuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgdXBkYXRlTGFuZXMpKSB7XG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7IC8vIFRoaXMgZmliZXIgZG9lcyBub3QgaGF2ZSBhbnkgcGVuZGluZyB3b3JrLiBCYWlsb3V0IHdpdGhvdXQgZW50ZXJpbmdcbiAgICAgIC8vIHRoZSBiZWdpbiBwaGFzZS4gVGhlcmUncyBzdGlsbCBzb21lIGJvb2trZWVwaW5nIHdlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZVxuICAgICAgLy8gaW4gdGhpcyBvcHRpbWl6ZWQgcGF0aCwgbW9zdGx5IHB1c2hpbmcgc3R1ZmYgb250byB0aGUgc3RhY2suXG5cbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy52YWx1ZTtcbiAgICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgbmV3VmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gUHJvZmlsZXIgc2hvdWxkIG9ubHkgY2FsbCBvblJlbmRlciB3aGVuIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gICAgICAgICAgICB2YXIgaGFzQ2hpbGRXb3JrID0gaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChoYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgfSAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgICAgICAgICAvLyBUaGVzZSBhcmUgcmVzZXQgZHVyaW5nIHJlbmRlciB0byBhbGxvdyB0aGUgRGV2VG9vbHMgY29tbWl0IGhvb2sgYSBjaGFuY2UgdG8gcmVhZCB0aGVtLFxuXG5cbiAgICAgICAgICAgIHZhciBzdGF0ZU5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gd2hldGhlciB0byByZXRyeSB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgb3IgdG8gc2tpcCBvdmVyIGl0IGFuZFxuICAgICAgICAgICAgICAvLyBnbyBzdHJhaWdodCB0byB0aGUgZmFsbGJhY2suIENoZWNrIHRoZSBwcmlvcml0eSBvZiB0aGUgcHJpbWFyeVxuICAgICAgICAgICAgICAvLyBjaGlsZCBmcmFnbWVudC5cblxuXG4gICAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkTGFuZXMgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzO1xuXG4gICAgICAgICAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBwcmltYXJ5Q2hpbGRMYW5lcykpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gVXNlIHRoZSBub3JtYWwgcGF0aFxuICAgICAgICAgICAgICAgIC8vIHRvIGF0dGVtcHQgdG8gcmVuZGVyIHRoZSBwcmltYXJ5IGNoaWxkcmVuIGFnYWluLlxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcmltYXJ5IGNoaWxkIGZyYWdtZW50IGRvZXMgbm90IGhhdmUgcGVuZGluZyB3b3JrIG1hcmtlZFxuICAgICAgICAgICAgICAgIC8vIG9uIGl0XG4gICAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KSk7IC8vIFRoZSBwcmltYXJ5IGNoaWxkcmVuIGRvIG5vdCBoYXZlIHBlbmRpbmcgd29yayB3aXRoIHN1ZmZpY2llbnRcbiAgICAgICAgICAgICAgICAvLyBwcmlvcml0eS4gQmFpbG91dC5cblxuICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIGZhbGxiYWNrIGNoaWxkcmVuIGhhdmUgcGVuZGluZyB3b3JrLiBTa2lwIG92ZXIgdGhlXG4gICAgICAgICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuIGFuZCB3b3JrIG9uIHRoZSBmYWxsYmFjay5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gICAgICAgICAgICB2YXIgX2hhc0NoaWxkV29yayA9IGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpO1xuXG4gICAgICAgICAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgICAgICAgICBpZiAoX2hhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICAgIC8vIElmIHNvbWV0aGluZyB3YXMgaW4gZmFsbGJhY2sgc3RhdGUgbGFzdCB0aW1lLCBhbmQgd2UgaGF2ZSBhbGwgdGhlXG4gICAgICAgICAgICAgICAgLy8gc2FtZSBjaGlsZHJlbiB0aGVuIHdlJ3JlIHN0aWxsIGluIHByb2dyZXNzaXZlIGxvYWRpbmcgc3RhdGUuXG4gICAgICAgICAgICAgICAgLy8gU29tZXRoaW5nIG1pZ2h0IGdldCB1bmJsb2NrZWQgYnkgc3RhdGUgdXBkYXRlcyBvciByZXRyaWVzIGluIHRoZVxuICAgICAgICAgICAgICAgIC8vIHRyZWUgd2hpY2ggd2lsbCBhZmZlY3QgdGhlIHRhaWwuIFNvIHdlIG5lZWQgdG8gdXNlIHRoZSBub3JtYWxcbiAgICAgICAgICAgICAgICAvLyBwYXRoIHRvIGNvbXB1dGUgdGhlIGNvcnJlY3QgdGFpbC5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgIH0gLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgICAgICAvLyB0aGVtIGdvdCByZXRyaWVkIHNvIHRoZXknbGwgc3RpbGwgYmUgYmxvY2tlZCBpbiB0aGUgc2FtZSB3YXlcbiAgICAgICAgICAgICAgLy8gYXMgYmVmb3JlLiBXZSBjYW4gZmFzdCBiYWlsIG91dC5cblxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICB9IC8vIElmIG5vdGhpbmcgc3VzcGVuZGVkIGJlZm9yZSBhbmQgd2UncmUgcmVuZGVyaW5nIHRoZSBzYW1lIGNoaWxkcmVuLFxuICAgICAgICAgICAgLy8gdGhlbiB0aGUgdGFpbCBkb2Vzbid0IG1hdHRlci4gQW55dGhpbmcgbmV3IHRoYXQgc3VzcGVuZHMgd2lsbCB3b3JrXG4gICAgICAgICAgICAvLyBpbiB0aGUgXCJ0b2dldGhlclwiIG1vZGUsIHNvIHdlIGNhbiBjb250aW51ZSBmcm9tIHRoZSBzdGF0ZSB3ZSBoYWQuXG5cblxuICAgICAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFJlc2V0IHRvIHRoZSBcInRvZ2V0aGVyXCIgbW9kZSBpbiBjYXNlIHdlJ3ZlIHN0YXJ0ZWQgYSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIGluIHRoZSBwYXN0IGJ1dCBkaWRuJ3QgY29tcGxldGUgaXQuXG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGw7XG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KTtcblxuICAgICAgICAgICAgaWYgKF9oYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZiBub25lIG9mIHRoZSBjaGlsZHJlbiBoYWQgYW55IHdvcmssIHRoYXQgbWVhbnMgdGhhdCBub25lIG9mXG4gICAgICAgICAgICAgIC8vIHRoZW0gZ290IHJldHJpZWQgc28gdGhleSdsbCBzdGlsbCBiZSBibG9ja2VkIGluIHRoZSBzYW1lIHdheVxuICAgICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gY2hlY2sgaWYgdGhlIHRyZWUgc3RpbGwgbmVlZHMgdG8gYmUgZGVmZXJyZWQuIFRoaXMgaXNcbiAgICAgICAgICAgIC8vIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIGxvZ2ljIHVzZWQgaW4gdGhlIG5vcm1hbCB1cGRhdGUgcGF0aCxcbiAgICAgICAgICAgIC8vIHNvIHdlJ2xsIGp1c3QgZW50ZXIgdGhhdC4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB3ZSdsbCBiYWlsIG91dFxuICAgICAgICAgICAgLy8gYXQgdGhlIG5leHQgbGV2ZWwgaW5zdGVhZCBvZiB0aGlzIG9uZSwgYmVjYXVzZSB0aGUgY2hpbGQgcHJvcHNcbiAgICAgICAgICAgIC8vIGhhdmUgbm90IGNoYW5nZWQuIFdoaWNoIGlzIGZpbmUuXG4gICAgICAgICAgICAvLyBUT0RPOiBQcm9iYWJseSBzaG91bGQgcmVmYWN0b3IgYGJlZ2luV29ya2AgdG8gc3BsaXQgdGhlIGJhaWxvdXRcbiAgICAgICAgICAgIC8vIHBhdGggZnJvbSB0aGUgbm9ybWFsIHBhdGguIEknbSB0ZW1wdGVkIHRvIGRvIGEgbGFiZWxlZCBicmVhayBoZXJlXG4gICAgICAgICAgICAvLyBidXQgSSB3b24ndCA6KVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzO1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKChjdXJyZW50LmZsYWdzICYgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IG9ubHkgZXhpc3RzIGZvciBsZWdhY3kgbW9kZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MjE2LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIG9uIHRoaXMgZmliZXIsIGJ1dCB0aGVyZSBhcmUgbm8gbmV3IHByb3BzXG4gICAgICAgIC8vIG5vciBsZWdhY3kgY29udGV4dC4gU2V0IHRoaXMgdG8gZmFsc2UuIElmIGFuIHVwZGF0ZSBxdWV1ZSBvciBjb250ZXh0XG4gICAgICAgIC8vIGNvbnN1bWVyIHByb2R1Y2VzIGEgY2hhbmdlZCB2YWx1ZSwgaXQgd2lsbCBzZXQgdGhpcyB0byB0cnVlLiBPdGhlcndpc2UsXG4gICAgICAgIC8vIHRoZSBjb21wb25lbnQgd2lsbCBhc3N1bWUgdGhlIGNoaWxkcmVuIGhhdmUgbm90IGNoYW5nZWQgYW5kIGJhaWwgb3V0LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgfSAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjbGVhciBwZW5kaW5nIHVwZGF0ZSBwcmlvcml0eS5cbiAgLy8gVE9ETzogVGhpcyBhc3N1bWVzIHRoYXQgd2UncmUgYWJvdXQgdG8gZXZhbHVhdGUgdGhlIGNvbXBvbmVudCBhbmQgcHJvY2Vzc1xuICAvLyB0aGUgdXBkYXRlIHF1ZXVlLiBIb3dldmVyLCB0aGVyZSdzIGFuIGV4Y2VwdGlvbjogU2ltcGxlTWVtb0NvbXBvbmVudFxuICAvLyBzb21ldGltZXMgYmFpbHMgb3V0IGxhdGVyIGluIHRoZSBiZWdpbiBwaGFzZS4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGRcbiAgLy8gbW92ZSB0aGlzIGFzc2lnbm1lbnQgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBhbmQgaW50byBlYWNoIGJyYW5jaC5cblxuXG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lcztcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIG1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgZWxlbWVudFR5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIG1vdW50TGF6eUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZWxlbWVudFR5cGUsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciB1bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciByZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQgPyB1bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQsIHVucmVzb2x2ZWRQcm9wcyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQyID8gX3VucmVzb2x2ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudDIsIF91bnJlc29sdmVkUHJvcHMpO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudDIsIF9yZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0VGV4dChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICByZXR1cm4gdXBkYXRlUG9ydGFsQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczIgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gdHlwZSA/IF91bnJlc29sdmVkUHJvcHMyIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh0eXBlLCBfdW5yZXNvbHZlZFByb3BzMik7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZvcndhcmRSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIF9yZXNvbHZlZFByb3BzMiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGcmFnbWVudDpcbiAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBNb2RlOlxuICAgICAgcmV0dXJuIHVwZGF0ZU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICByZXR1cm4gdXBkYXRlUHJvZmlsZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRQcm92aWRlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgICByZXR1cm4gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfdHlwZTIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFJlc29sdmUgb3V0ZXIgcHJvcHMgZmlyc3QsIHRoZW4gcmVzb2x2ZSBpbm5lciBwcm9wcy5cblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIsIF91bnJlc29sdmVkUHJvcHMzKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBfdHlwZTIucHJvcFR5cGVzO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIF9yZXNvbHZlZFByb3BzMywgLy8gUmVzb2x2ZWQgZm9yIG91dGVyIG9ubHlcbiAgICAgICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKF90eXBlMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9yZXNvbHZlZFByb3BzMyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoX3R5cGUyLnR5cGUsIF9yZXNvbHZlZFByb3BzMyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfdHlwZTIsIF9yZXNvbHZlZFByb3BzMywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudDMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzNCA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MyA/IF91bnJlc29sdmVkUHJvcHM0IDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MywgX3VucmVzb2x2ZWRQcm9wczQpO1xuXG4gICAgICAgIHJldHVybiBtb3VudEluY29tcGxldGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudDMsIF9yZXNvbHZlZFByb3BzNCwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUxlZ2FjeUhpZGRlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gdW5pdCBvZiB3b3JrIHRhZyAoXCIgKyB3b3JrSW5Qcm9ncmVzcy50YWcgKyBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBUYWcgdGhlIGZpYmVyIHdpdGggYW4gdXBkYXRlIGVmZmVjdC4gVGhpcyB0dXJucyBhIFBsYWNlbWVudCBpbnRvXG4gIC8vIGEgUGxhY2VtZW50QW5kVXBkYXRlLlxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcykge1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWY7XG59XG5cbnZhciBhcHBlbmRBbGxDaGlsZHJlbjtcbnZhciB1cGRhdGVIb3N0Q29udGFpbmVyO1xudmFyIHVwZGF0ZUhvc3RDb21wb25lbnQkMTtcbnZhciB1cGRhdGVIb3N0VGV4dCQxO1xuXG57XG4gIC8vIE11dGF0aW9uIG1vZGVcbiAgYXBwZW5kQWxsQ2hpbGRyZW4gPSBmdW5jdGlvbiAocGFyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmVlZHNWaXNpYmlsaXR5VG9nZ2xlLCBpc0hpZGRlbikge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGNyZWF0ZWQgYnV0IHdlIG5lZWQgcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZUhvc3RDb250YWluZXIgPSBmdW5jdGlvbiAod29ya0luUHJvZ3Jlc3MpIHsvLyBOb29wXG4gIH07XG5cbiAgdXBkYXRlSG9zdENvbXBvbmVudCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhbiBhbHRlcm5hdGUsIHRoYXQgbWVhbnMgdGhpcyBpcyBhbiB1cGRhdGUgYW5kIHdlIG5lZWQgdG9cbiAgICAvLyBzY2hlZHVsZSBhIHNpZGUtZWZmZWN0IHRvIGRvIHRoZSB1cGRhdGVzLlxuICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcblxuICAgIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIC8vIEluIG11dGF0aW9uIG1vZGUsIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgYSBiYWlsb3V0IGJlY2F1c2VcbiAgICAgIC8vIHdlIHdvbid0IHRvdWNoIHRoaXMgbm9kZSBldmVuIGlmIGNoaWxkcmVuIGNoYW5nZWQuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBnZXQgdXBkYXRlZCBiZWNhdXNlIG9uZSBvZiBvdXIgY2hpbGRyZW4gdXBkYXRlZCwgd2UgZG9uJ3RcbiAgICAvLyBoYXZlIG5ld1Byb3BzIHNvIHdlJ2xsIGhhdmUgdG8gcmV1c2UgdGhlbS5cbiAgICAvLyBUT0RPOiBTcGxpdCB0aGUgdXBkYXRlIEFQSSBhcyBzZXBhcmF0ZSBmb3IgdGhlIHByb3BzIHZzLiBjaGlsZHJlbi5cbiAgICAvLyBFdmVuIGJldHRlciB3b3VsZCBiZSBpZiBjaGlsZHJlbiB3ZXJlbid0IHNwZWNpYWwgY2FzZWQgYXQgYWxsIHRoby5cblxuXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBFeHBlcmllbmNpbmcgYW4gZXJyb3Igd2hlcmUgb2xkUHJvcHMgaXMgbnVsbC4gU3VnZ2VzdHMgYSBob3N0XG4gICAgLy8gY29tcG9uZW50IGlzIGhpdHRpbmcgdGhlIHJlc3VtZSBwYXRoLiBGaWd1cmUgb3V0IHdoeS4gUG9zc2libHlcbiAgICAvLyByZWxhdGVkIHRvIGBoaWRkZW5gLlxuXG4gICAgdmFyIHVwZGF0ZVBheWxvYWQgPSBwcmVwYXJlVXBkYXRlKGluc3RhbmNlLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0KTsgLy8gVE9ETzogVHlwZSB0aGlzIHNwZWNpZmljIHRvIHRoaXMgdHlwZSBvZiBjb21wb25lbnQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHVwZGF0ZVBheWxvYWQ7IC8vIElmIHRoZSB1cGRhdGUgcGF5bG9hZCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIGNoYW5nZSBvciBpZiB0aGVyZVxuICAgIC8vIGlzIGEgbmV3IHJlZiB3ZSBtYXJrIHRoaXMgYXMgYW4gdXBkYXRlLiBBbGwgdGhlIHdvcmsgaXMgZG9uZSBpbiBjb21taXRXb3JrLlxuXG4gICAgaWYgKHVwZGF0ZVBheWxvYWQpIHtcbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVIb3N0VGV4dCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gICAgLy8gSWYgdGhlIHRleHQgZGlmZmVycywgbWFyayBpdCBhcyBhbiB1cGRhdGUuIEFsbCB0aGUgd29yayBpbiBkb25lIGluIGNvbW1pdFdvcmsuXG4gICAgaWYgKG9sZFRleHQgIT09IG5ld1RleHQpIHtcbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2spIHtcbiAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAvLyBJZiB3ZSdyZSBoeWRyYXRpbmcsIHdlIHNob3VsZCBjb25zdW1lIGFzIG1hbnkgaXRlbXMgYXMgd2UgY2FuXG4gICAgLy8gc28gd2UgZG9uJ3QgbGVhdmUgYW55IGJlaGluZC5cbiAgICByZXR1cm47XG4gIH1cblxuICBzd2l0Y2ggKHJlbmRlclN0YXRlLnRhaWxNb2RlKSB7XG4gICAgY2FzZSAnaGlkZGVuJzpcbiAgICAgIHtcbiAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgLy8gc2hvdWxkIGJlIGludmlzaWJsZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgbW91bnRlZCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGVtIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgY29sbGFwc2luZy5cbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgIC8vIHRoZXJlIGFyZSBhbnkuXG4gICAgICAgIHZhciB0YWlsTm9kZSA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgIHZhciBsYXN0VGFpbE5vZGUgPSBudWxsO1xuXG4gICAgICAgIHdoaWxlICh0YWlsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0YWlsTm9kZS5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxhc3RUYWlsTm9kZSA9IHRhaWxOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhaWxOb2RlID0gdGFpbE5vZGUuc2libGluZztcbiAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIHNpbXBseSBnb2luZyB0byBkZWxldGUgYWxsIGluc2VydGlvbnMgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIGxhc3QgcmVuZGVyZWQgaXRlbS5cblxuXG4gICAgICAgIGlmIChsYXN0VGFpbE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBBbGwgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSB0YWlsIGFyZSBpbnNlcnRpb25zLlxuICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERldGFjaCB0aGUgaW5zZXJ0aW9uIGFmdGVyIHRoZSBsYXN0IG5vZGUgdGhhdCB3YXMgYWxyZWFkeVxuICAgICAgICAgIC8vIGluc2VydGVkLlxuICAgICAgICAgIGxhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnY29sbGFwc2VkJzpcbiAgICAgIHtcbiAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgLy8gc2hvdWxkIGJlIGludmlzaWJsZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgbW91bnRlZCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGVtIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgY29sbGFwc2luZy5cbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgIC8vIHRoZXJlIGFyZSBhbnkuXG4gICAgICAgIHZhciBfdGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICB2YXIgX2xhc3RUYWlsTm9kZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKF90YWlsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChfdGFpbE5vZGUuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBfbGFzdFRhaWxOb2RlID0gX3RhaWxOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90YWlsTm9kZSA9IF90YWlsTm9kZS5zaWJsaW5nO1xuICAgICAgICB9IC8vIE5leHQgd2UncmUgc2ltcGx5IGdvaW5nIHRvIGRlbGV0ZSBhbGwgaW5zZXJ0aW9ucyBhZnRlciB0aGVcbiAgICAgICAgLy8gbGFzdCByZW5kZXJlZCBpdGVtLlxuXG5cbiAgICAgICAgaWYgKF9sYXN0VGFpbE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBBbGwgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSB0YWlsIGFyZSBpbnNlcnRpb25zLlxuICAgICAgICAgIGlmICghaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrICYmIHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdlIHN1c3BlbmRlZCBkdXJpbmcgdGhlIGhlYWQuIFdlIHdhbnQgdG8gc2hvdyBhdCBsZWFzdCBvbmVcbiAgICAgICAgICAgIC8vIHJvdyBhdCB0aGUgdGFpbC4gU28gd2UnbGwga2VlcCBvbiBhbmQgY3V0IG9mZiB0aGUgcmVzdC5cbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEZXRhY2ggdGhlIGluc2VydGlvbiBhZnRlciB0aGUgbGFzdCBub2RlIHRoYXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBpbnNlcnRlZC5cbiAgICAgICAgICBfbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIEZyYWdtZW50OlxuICAgIGNhc2UgTW9kZTpcbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuICAgICAgICB2YXIgZmliZXJSb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChmaWJlclJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICAgICAgICBmaWJlclJvb3QuY29udGV4dCA9IGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dDtcbiAgICAgICAgICBmaWJlclJvb3QucGVuZGluZ0NvbnRleHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC5jaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIElmIHdlIGh5ZHJhdGVkLCBwb3Agc28gdGhhdCB3ZSBjYW4gZGVsZXRlIGFueSByZW1haW5pbmcgY2hpbGRyZW5cbiAgICAgICAgICAvLyB0aGF0IHdlcmVuJ3QgaHlkcmF0ZWQuXG4gICAgICAgICAgdmFyIHdhc0h5ZHJhdGVkID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKHdhc0h5ZHJhdGVkKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoeWRyYXRlZCwgdGhlbiB3ZSdsbCBuZWVkIHRvIHNjaGVkdWxlIGFuIHVwZGF0ZSBmb3JcbiAgICAgICAgICAgIC8vIHRoZSBjb21taXQgc2lkZS1lZmZlY3RzIG9uIHRoZSByb290LlxuICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfSBlbHNlIGlmICghZmliZXJSb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIGFuIGVmZmVjdCB0byBjbGVhciB0aGlzIGNvbnRhaW5lciBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY29tbWl0LlxuICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIG9mIFJlYWN0IHJlbmRlcmluZyBpbnRvIGEgY29udGFpbmVyIHdpdGggcHJldmlvdXMgY2hpbGRyZW4uXG4gICAgICAgICAgICAvLyBJdCdzIGFsc28gc2FmZSB0byBkbyBmb3IgdXBkYXRlcyB0b28sIGJlY2F1c2UgY3VycmVudC5jaGlsZCB3b3VsZCBvbmx5IGJlIG51bGxcbiAgICAgICAgICAgIC8vIGlmIHRoZSBwcmV2aW91cyByZW5kZXIgd2FzIG51bGwgKHNvIHRoZSB0aGUgY29udGFpbmVyIHdvdWxkIGFscmVhZHkgYmUgZW1wdHkpLlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciByb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgICAgICB1cGRhdGVIb3N0Q29tcG9uZW50JDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnQucmVmICE9PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgICAgICAgIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghbmV3UHJvcHMpIHtcbiAgICAgICAgICAgIGlmICghKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBNb3ZlIGNyZWF0ZUluc3RhbmNlIHRvIGJlZ2luV29yayBhbmQga2VlcCBpdCBvbiBhIGNvbnRleHRcbiAgICAgICAgICAvLyBcInN0YWNrXCIgYXMgdGhlIHBhcmVudC4gVGhlbiBhcHBlbmQgY2hpbGRyZW4gYXMgd2UgZ28gaW4gYmVnaW5Xb3JrXG4gICAgICAgICAgLy8gb3IgY29tcGxldGVXb3JrIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIHdhbnQgdG8gYWRkIHRoZW0gdG9wLT5kb3duIG9yXG4gICAgICAgICAgLy8gYm90dG9tLT51cC4gVG9wLT5kb3duIGlzIGZhc3RlciBpbiBJRTExLlxuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZCA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBhbmQgY3JlYXRlSW5zdGFuY2Ugc3RlcCBpbnRvIHRoZSBiZWdpblBoYXNlXG4gICAgICAgICAgICAvLyB0byBjb25zb2xpZGF0ZS5cbiAgICAgICAgICAgIGlmIChwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgY2hhbmdlcyB0byB0aGUgaHlkcmF0ZWQgbm9kZSBuZWVkIHRvIGJlIGFwcGxpZWQgYXQgdGhlXG4gICAgICAgICAgICAgIC8vIGNvbW1pdC1waGFzZSB3ZSBtYXJrIHRoaXMgYXMgc3VjaC5cbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZUluc3RhbmNlKHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW4oaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIENlcnRhaW4gcmVuZGVyZXJzIHJlcXVpcmUgY29tbWl0LXRpbWUgZWZmZWN0cyBmb3IgaW5pdGlhbCBtb3VudC5cbiAgICAgICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgc3VwcG9ydHMgYXV0by1mb2N1cyBmb3IgY2VydGFpbiBlbGVtZW50cykuXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgc3VjaCByZW5kZXJlcnMgZ2V0IHNjaGVkdWxlZCBmb3IgbGF0ZXIgd29yay5cblxuICAgICAgICAgICAgaWYgKGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKGluc3RhbmNlLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJlZiBvbiBhIGhvc3Qgbm9kZSB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2tcbiAgICAgICAgICAgIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICB2YXIgbmV3VGV4dCA9IG5ld1Byb3BzO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7IC8vIElmIHdlIGhhdmUgYW4gYWx0ZXJuYXRlLCB0aGF0IG1lYW5zIHRoaXMgaXMgYW4gdXBkYXRlIGFuZCB3ZSBuZWVkXG4gICAgICAgICAgLy8gdG8gc2NoZWR1bGUgYSBzaWRlLWVmZmVjdCB0byBkbyB0aGUgdXBkYXRlcy5cblxuICAgICAgICAgIHVwZGF0ZUhvc3RUZXh0JDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV3VGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICghKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9yb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuXG4gICAgICAgICAgdmFyIF9jdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZDIgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAoX3dhc0h5ZHJhdGVkMikge1xuICAgICAgICAgICAgaWYgKHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3JlYXRlVGV4dEluc3RhbmNlKG5ld1RleHQsIF9yb290Q29udGFpbmVySW5zdGFuY2UsIF9jdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgIC8vIFNvbWV0aGluZyBzdXNwZW5kZWQuIFJlLXJlbmRlciB3aXRoIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzOyAvLyBEbyBub3QgcmVzZXQgdGhlIGVmZmVjdCBsaXN0LlxuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV4dERpZFRpbWVvdXQgPSBuZXh0U3RhdGUgIT09IG51bGw7XG4gICAgICAgIHZhciBwcmV2RGlkVGltZW91dCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHByZXZEaWRUaW1lb3V0ID0gcHJldlN0YXRlICE9PSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0ICYmICFwcmV2RGlkVGltZW91dCkge1xuICAgICAgICAgIC8vIElmIHRoaXMgc3VidHJlZWUgaXMgcnVubmluZyBpbiBibG9ja2luZyBtb2RlIHdlIGNhbiBzdXNwZW5kLFxuICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSB3b24ndCBzdXNwZW5kLlxuICAgICAgICAgIC8vIFRPRE86IFRoaXMgd2lsbCBzdGlsbCBzdXNwZW5kIGEgc3luY2hyb25vdXMgdHJlZSBpZiBhbnl0aGluZ1xuICAgICAgICAgIC8vIGluIHRoZSBjb25jdXJyZW50IHRyZWUgYWxyZWFkeSBzdXNwZW5kZWQgZHVyaW5nIHRoaXMgcmVuZGVyLlxuICAgICAgICAgIC8vIFRoaXMgaXMgYSBrbm93biBidWcuXG4gICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgYmFjayB0byB0aHJvd0V4Y2VwdGlvbiBiZWNhdXNlIHRoaXMgaXMgdG9vIGxhdGVcbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBsYXJnZSB0cmVlIHdoaWNoIGlzIGNvbW1vbiBmb3IgaW5pdGlhbCBsb2Fkcy4gV2VcbiAgICAgICAgICAgIC8vIGRvbid0IGtub3cgaWYgd2Ugc2hvdWxkIHJlc3RhcnQgYSByZW5kZXIgb3Igbm90IHVudGlsIHdlIGdldFxuICAgICAgICAgICAgLy8gdGhpcyBtYXJrZXIsIGFuZCB0aGlzIGlzIHRvbyBsYXRlLlxuICAgICAgICAgICAgLy8gSWYgdGhpcyByZW5kZXIgYWxyZWFkeSBoYWQgYSBwaW5nIG9yIGxvd2VyIHByaSB1cGRhdGVzLFxuICAgICAgICAgICAgLy8gYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2Uga25vdyB3ZSdyZSBnb2luZyB0byBzdXNwZW5kIHdlXG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgYWJsZSB0byBpbW1lZGlhdGVseSByZXN0YXJ0IGZyb20gd2l0aGluIHRocm93RXhjZXB0aW9uLlxuICAgICAgICAgICAgdmFyIGhhc0ludmlzaWJsZUNoaWxkQ29udGV4dCA9IGN1cnJlbnQgPT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGhhc0ludmlzaWJsZUNoaWxkQ29udGV4dCB8fCBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGluIGFuIGludmlzaWJsZSB0cmVlIG9yIGEgbmV3IHJlbmRlciwgdGhlbiBzaG93aW5nXG4gICAgICAgICAgICAgIC8vIHRoaXMgYm91bmRhcnkgaXMgb2suXG4gICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UncmUgZ29pbmcgdG8gaGF2ZSB0byBoaWRlIGNvbnRlbnQgc28gd2Ugc2hvdWxkXG4gICAgICAgICAgICAgIC8vIHN1c3BlbmQgZm9yIGxvbmdlciBpZiBwb3NzaWJsZS5cbiAgICAgICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUT0RPOiBPbmx5IHNjaGVkdWxlIHVwZGF0ZXMgaWYgdGhlc2UgdmFsdWVzIGFyZSBub24gZXF1YWwsIGkuZS4gaXQgY2hhbmdlZC5cbiAgICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQgfHwgcHJldkRpZFRpbWVvdXQpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgYm91bmRhcnkganVzdCB0aW1lZCBvdXQsIHNjaGVkdWxlIGFuIGVmZmVjdCB0byBhdHRhY2ggYVxuICAgICAgICAgICAgLy8gcmV0cnkgbGlzdGVuZXIgdG8gdGhlIHByb21pc2UuIFRoaXMgZmxhZyBpcyBhbHNvIHVzZWQgdG8gaGlkZSB0aGVcbiAgICAgICAgICAgIC8vIHByaW1hcnkgY2hpbGRyZW4uIEluIG11dGF0aW9uIG1vZGUsIHdlIGFsc28gbmVlZCB0aGUgZmxhZyB0b1xuICAgICAgICAgICAgLy8gKnVuaGlkZSogY2hpbGRyZW4gdGhhdCB3ZXJlIHByZXZpb3VzbHkgaGlkZGVuLCBzbyBjaGVjayBpZiB0aGlzXG4gICAgICAgICAgICAvLyBpcyBjdXJyZW50bHkgdGltZWQgb3V0LCB0b28uXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHVwZGF0ZUhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICBwcmVwYXJlUG9ydGFsTW91bnQod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgLy8gUG9wIHByb3ZpZGVyIGZpYmVyXG4gICAgICBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBTYW1lIGFzIGNsYXNzIGNvbXBvbmVudCBjYXNlLiBJIHB1dCBpdCBkb3duIGhlcmUgc28gdGhhdCB0aGUgdGFncyBhcmVcbiAgICAgICAgLy8gc2VxdWVudGlhbCB0byBlbnN1cmUgdGhpcyBzd2l0Y2ggaXMgY29tcGlsZWQgdG8gYSBqdW1wIHRhYmxlLlxuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKF9Db21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgaW4gdGhlIGRlZmF1bHQsIFwiaW5kZXBlbmRlbnRcIiBtb2RlLlxuICAgICAgICAgIC8vIFdlIGRvbid0IGRvIGFueXRoaW5nIGluIHRoaXMgbW9kZS5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaWRTdXNwZW5kQWxyZWFkeSA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuICAgICAgICB2YXIgcmVuZGVyZWRUYWlsID0gcmVuZGVyU3RhdGUucmVuZGVyaW5nO1xuXG4gICAgICAgIGlmIChyZW5kZXJlZFRhaWwgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBqdXN0IHJlbmRlcmVkIHRoZSBoZWFkLlxuICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnl0aGluZyBpcyBzdGlsbFxuICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGluIHRoZSByZW5kZXJlZCBzZXQuXG4gICAgICAgICAgICAvLyBJZiBuZXcgY29udGVudCB1bnN1c3BlbmRlZCwgYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSBjb250ZW50IHRoYXRcbiAgICAgICAgICAgIC8vIGRpZG4ndC4gVGhlbiB3ZSBuZWVkIHRvIGRvIGEgc2Vjb25kIHBhc3MgdGhhdCBmb3JjZXMgZXZlcnl0aGluZ1xuICAgICAgICAgICAgLy8gdG8ga2VlcCBzaG93aW5nIHRoZWlyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGJlIHN1c3BlbmRlZCBpZiBzb21ldGhpbmcgaW4gdGhpcyByZW5kZXIgcGFzcyBzdXNwZW5kZWQsIG9yXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgaW4gdGhlIHByZXZpb3VzIGNvbW1pdHRlZCBwYXNzIHN1c3BlbmRlZC4gT3RoZXJ3aXNlLFxuICAgICAgICAgICAgLy8gdGhlcmUncyBubyBjaGFuY2Ugc28gd2UgY2FuIHNraXAgdGhlIGV4cGVuc2l2ZSBjYWxsIHRvXG4gICAgICAgICAgICAvLyBmaW5kRmlyc3RTdXNwZW5kZWQuXG4gICAgICAgICAgICB2YXIgY2Fubm90QmVTdXNwZW5kZWQgPSByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSAmJiAoY3VycmVudCA9PT0gbnVsbCB8fCAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzKTtcblxuICAgICAgICAgICAgaWYgKCFjYW5ub3RCZVN1c3BlbmRlZCkge1xuICAgICAgICAgICAgICB2YXIgcm93ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBzdXNwZW5kZWQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocm93KTtcblxuICAgICAgICAgICAgICAgIGlmIChzdXNwZW5kZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gSWYgdGhpcyBpcyBhIG5ld2x5IHN1c3BlbmRlZCB0cmVlLCBpdCBtaWdodCBub3QgZ2V0IGNvbW1pdHRlZCBhc1xuICAgICAgICAgICAgICAgICAgLy8gcGFydCBvZiB0aGUgc2Vjb25kIHBhc3MuIEluIHRoYXQgY2FzZSBub3RoaW5nIHdpbGwgc3Vic2NyaWJlIHRvXG4gICAgICAgICAgICAgICAgICAvLyBpdHMgdGhlbm5hYmxlcy4gSW5zdGVhZCwgd2UnbGwgdHJhbnNmZXIgaXRzIHRoZW5uYWJsZXMgdG8gdGhlXG4gICAgICAgICAgICAgICAgICAvLyBTdXNwZW5zZUxpc3Qgc28gdGhhdCBpdCBjYW4gcmV0cnkgaWYgdGhleSByZXNvbHZlLlxuICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUgb2YgdGhlc2UgaW4gdGhlIGxpc3QgYnV0IHNpbmNlIHdlJ3JlXG4gICAgICAgICAgICAgICAgICAvLyBnb2luZyB0byB3YWl0IGZvciBhbGwgb2YgdGhlbSBhbnl3YXksIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlclxuICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggb25lcyBnZXRzIHRvIHBpbmcuIEluIHRoZW9yeSB3ZSBjb3VsZCBnZXQgY2xldmVyIGFuZCBrZWVwXG4gICAgICAgICAgICAgICAgICAvLyB0cmFjayBvZiBob3cgbWFueSBkZXBlbmRlbmNpZXMgcmVtYWluIGJ1dCBpdCBnZXRzIHRyaWNreSBiZWNhdXNlXG4gICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgbWVhbnRpbWUsIHdlIGNhbiBhZGQvcmVtb3ZlL2NoYW5nZSBpdGVtcyBhbmQgZGVwZW5kZW5jaWVzLlxuICAgICAgICAgICAgICAgICAgLy8gV2UgbWlnaHQgYmFpbCBvdXQgb2YgdGhlIGxvb3AgYmVmb3JlIGZpbmRpbmcgYW55IGJ1dCB0aGF0XG4gICAgICAgICAgICAgICAgICAvLyBkb2Vzbid0IG1hdHRlciBzaW5jZSB0aGF0IG1lYW5zIHRoYXQgdGhlIG90aGVyIGJvdW5kYXJpZXMgdGhhdFxuICAgICAgICAgICAgICAgICAgLy8gd2UgZGlkIGZpbmQgYWxyZWFkeSBoYXMgdGhlaXIgbGlzdGVuZXJzIGF0dGFjaGVkLlxuXG4gICAgICAgICAgICAgICAgICB2YXIgbmV3VGhlbm5hYmxlcyA9IHN1c3BlbmRlZC51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgaWYgKG5ld1RoZW5uYWJsZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBuZXdUaGVubmFibGVzO1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICAgICAgICB9IC8vIFJlcmVuZGVyIHRoZSB3aG9sZSBsaXN0LCBidXQgdGhpcyB0aW1lLCB3ZSdsbCBmb3JjZSBmYWxsYmFja3NcbiAgICAgICAgICAgICAgICAgIC8vIHRvIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGxpc3QgYmVmb3JlIGRvaW5nIHRoZSBzZWNvbmQgcGFzcyBzaW5jZSB0aGF0J3Mgbm93IGludmFsaWQuXG5cblxuICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcmVuZGVyU3RhdGUubGFzdEVmZmVjdDsgLy8gUmVzZXQgdGhlIGNoaWxkIGZpYmVycyB0byB0aGVpciBvcmlnaW5hbCBzdGF0ZS5cblxuICAgICAgICAgICAgICAgICAgcmVzZXRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpOyAvLyBTZXQgdXAgdGhlIFN1c3BlbnNlIENvbnRleHQgdG8gZm9yY2Ugc3VzcGVuc2UgYW5kIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICAgICAgICAvLyByZXJlbmRlciB0aGUgY2hpbGRyZW4uXG5cbiAgICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByb3cgPSByb3cuc2libGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCAmJiBub3coKSA+IGdldFJlbmRlclRhcmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAvLyBXZSBoYXZlIGFscmVhZHkgcGFzc2VkIG91ciBDUFUgZGVhZGxpbmUgYnV0IHdlIHN0aWxsIGhhdmUgcm93c1xuICAgICAgICAgICAgICAvLyBsZWZ0IGluIHRoZSB0YWlsLiBXZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlciBhdHRlbXB0cyB0byByZW5kZXJcbiAgICAgICAgICAgICAgLy8gdGhlIG1haW4gY29udGVudCBhbmQgb25seSByZW5kZXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpc1xuICAgICAgICAgICAgICAvLyB0byBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXNcbiAgICAgICAgICAgICAgLy8gb2YgcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXNcbiAgICAgICAgICAgICAgLy8gY29tbWl0dGVkLiBJZiBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmVcbiAgICAgICAgICAgICAgLy8gcGFpbnRlZC4gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLlxuICAgICAgICAgICAgICAvLyBXZSBjYW4gdXNlIGFueSBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZ1xuICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSdyZSBsZWF2aW5nIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7XG4gICAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIGdvaW5nIHRvIHJlbmRlciB0aGUgdGFpbC5cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFwcGVuZCB0aGUgcmVuZGVyZWQgcm93IHRvIHRoZSBjaGlsZCBsaXN0LlxuICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIHZhciBfc3VzcGVuZGVkID0gZmluZEZpcnN0U3VzcGVuZGVkKHJlbmRlcmVkVGFpbCk7XG5cbiAgICAgICAgICAgIGlmIChfc3VzcGVuZGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTsgLy8gRW5zdXJlIHdlIHRyYW5zZmVyIHRoZSB1cGRhdGUgcXVldWUgdG8gdGhlIHBhcmVudCBzbyB0aGF0IGl0IGRvZXNuJ3RcbiAgICAgICAgICAgICAgLy8gZ2V0IGxvc3QgaWYgdGhpcyByb3cgZW5kcyB1cCBkcm9wcGVkIGR1cmluZyBhIHNlY29uZCBwYXNzLlxuXG4gICAgICAgICAgICAgIHZhciBfbmV3VGhlbm5hYmxlcyA9IF9zdXNwZW5kZWQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgaWYgKF9uZXdUaGVubmFibGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBfbmV3VGhlbm5hYmxlcztcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIHRydWUpOyAvLyBUaGlzIG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZC5cblxuICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCA9PT0gbnVsbCAmJiByZW5kZXJTdGF0ZS50YWlsTW9kZSA9PT0gJ2hpZGRlbicgJiYgIXJlbmRlcmVkVGFpbC5hbHRlcm5hdGUgJiYgIWdldElzSHlkcmF0aW5nKCkgLy8gV2UgZG9uJ3QgY3V0IGl0IGlmIHdlJ3JlIGh5ZHJhdGluZy5cbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRlbGV0ZSB0aGUgcm93IHdlIGp1c3QgcmVuZGVyZWQuXG4gICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGxpc3QgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHdlIHJlbmRlcmVkIHRoaXNcbiAgICAgICAgICAgICAgICAgIC8vIGNoaWxkLiBUaGUgbmVzdGVkIGNoaWxkcmVuIGhhdmUgYWxyZWFkeSBhcHBlbmRlZCB0aGVtc2VsdmVzLlxuICAgICAgICAgICAgICAgICAgdmFyIGxhc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcmVuZGVyU3RhdGUubGFzdEVmZmVjdDsgLy8gUmVtb3ZlIGFueSBlZmZlY3RzIHRoYXQgd2VyZSBhcHBlbmRlZCBhZnRlciB0aGlzIHBvaW50LlxuXG4gICAgICAgICAgICAgICAgICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfSAvLyBXZSdyZSBkb25lLlxuXG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIC8vIFRoZSB0aW1lIGl0IHRvb2sgdG8gcmVuZGVyIGxhc3Qgcm93IGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVtYWluaW5nXG4gICAgICAgICAgICAvLyB0aW1lIHdlIGhhdmUgdG8gcmVuZGVyLiBTbyByZW5kZXJpbmcgb25lIG1vcmUgcm93IHdvdWxkIGxpa2VseVxuICAgICAgICAgICAgLy8gZXhjZWVkIGl0LlxuICAgICAgICAgICAgbm93KCkgKiAyIC0gcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID4gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpICYmIHJlbmRlckxhbmVzICE9PSBPZmZzY3JlZW5MYW5lKSB7XG4gICAgICAgICAgICAgIC8vIFdlIGhhdmUgbm93IHBhc3NlZCBvdXIgQ1BVIGRlYWRsaW5lIGFuZCB3ZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlclxuICAgICAgICAgICAgICAvLyBhdHRlbXB0cyB0byByZW5kZXIgdGhlIG1haW4gY29udGVudCBhbmQgb25seSByZW5kZXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgICAvLyBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgaXMgdXN1YWxseSBmYXN0ZXIuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzXG4gICAgICAgICAgICAgIC8vIHRvIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtc1xuICAgICAgICAgICAgICAvLyBvZiBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsXG4gICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhc1xuICAgICAgICAgICAgICAvLyBjb21taXR0ZWQuIElmIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZVxuICAgICAgICAgICAgICAvLyBwYWludGVkLiBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuXG4gICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW55IFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nXG4gICAgICAgICAgICAgIC8vIHNpbmNlIHdlJ3JlIGxlYXZpbmcgaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcmtTcGF3bmVkV29yayhTb21lUmV0cnlMYW5lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS5pc0JhY2t3YXJkcykge1xuICAgICAgICAgICAgLy8gVGhlIGVmZmVjdCBsaXN0IG9mIHRoZSBiYWNrd2FyZHMgdGFpbCB3aWxsIGhhdmUgYmVlbiBhZGRlZFxuICAgICAgICAgICAgLy8gdG8gdGhlIGVuZC4gVGhpcyBicmVha3MgdGhlIGd1YXJhbnRlZSB0aGF0IGxpZmUtY3ljbGVzIGZpcmUgaW5cbiAgICAgICAgICAgIC8vIHNpYmxpbmcgb3JkZXIgYnV0IHRoYXQgaXNuJ3QgYSBzdHJvbmcgZ3VhcmFudGVlIHByb21pc2VkIGJ5IFJlYWN0LlxuICAgICAgICAgICAgLy8gRXNwZWNpYWxseSBzaW5jZSB0aGVzZSBtaWdodCBhbHNvIGp1c3QgcG9wIGluIGR1cmluZyBmdXR1cmUgY29tbWl0cy5cbiAgICAgICAgICAgIC8vIEFwcGVuZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0LlxuICAgICAgICAgICAgcmVuZGVyZWRUYWlsLnNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJldmlvdXNTaWJsaW5nID0gcmVuZGVyU3RhdGUubGFzdDtcblxuICAgICAgICAgICAgaWYgKHByZXZpb3VzU2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBwcmV2aW91c1NpYmxpbmcuc2libGluZyA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0ID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSB0YWlsIHJvd3MgdG8gcmVuZGVyLlxuICAgICAgICAgIC8vIFBvcCBhIHJvdy5cbiAgICAgICAgICB2YXIgbmV4dCA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbmV4dDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbmV4dC5zaWJsaW5nO1xuICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0O1xuICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IG5vdygpO1xuICAgICAgICAgIG5leHQuc2libGluZyA9IG51bGw7IC8vIFJlc3RvcmUgdGhlIGNvbnRleHQuXG4gICAgICAgICAgLy8gVE9ETzogV2UgY2FuIHByb2JhYmx5IGp1c3QgYXZvaWQgcG9wcGluZyBpdCBpbnN0ZWFkIGFuZCBvbmx5XG4gICAgICAgICAgLy8gc2V0dGluZyBpdCB0aGUgZmlyc3QgdGltZSB3ZSBnbyBmcm9tIG5vdCBzdXNwZW5kZWQgdG8gc3VzcGVuZGVkLlxuXG4gICAgICAgICAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcblxuICAgICAgICAgIGlmIChkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gRG8gYSBwYXNzIG92ZXIgdGhlIG5leHQgcm93LlxuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBCbG9jazpcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9uZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBfcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBwcmV2SXNIaWRkZW4gPSBfcHJldlN0YXRlICE9PSBudWxsO1xuICAgICAgICAgIHZhciBuZXh0SXNIaWRkZW4gPSBfbmV4dFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgaWYgKHByZXZJc0hpZGRlbiAhPT0gbmV4dElzSGlkZGVuICYmIG5ld1Byb3BzLm1vZGUgIT09ICd1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZycpIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICsgd29ya0luUHJvZ3Jlc3MudGFnICsgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVud2luZFdvcmsod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IGZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgdmFyIF9mbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmICghKChfZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncykpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGUgcm9vdCBmYWlsZWQgdG8gdW5tb3VudCBhZnRlciBhbiBlcnJvci4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBfZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG4gICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogcG9wSHlkcmF0aW9uU3RhdGVcbiAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgdmFyIF9mbGFnczIgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoX2ZsYWdzMiAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IF9mbGFnczIgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7IC8vIENhcHR1cmVkIGEgc3VzcGVuc2UgZWZmZWN0LiBSZS1yZW5kZXIgdGhlIGJvdW5kYXJ5LlxuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpOyAvLyBTdXNwZW5zZUxpc3QgZG9lc24ndCBhY3R1YWxseSBjYXRjaCBhbnl0aGluZy4gSXQgc2hvdWxkJ3ZlIGJlZW5cbiAgICAgICAgLy8gY2F1Z2h0IGJ5IGEgbmVzdGVkIGJvdW5kYXJ5LiBJZiBub3QsIGl0IHNob3VsZCBidWJibGUgdGhyb3VnaC5cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICBwb3BSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrKSB7XG4gIHN3aXRjaCAoaW50ZXJydXB0ZWRXb3JrLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IGludGVycnVwdGVkV29yay50eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuXG4gICAgICAgIGlmIChjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcG9wQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcG9wUHJvdmlkZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICBwb3BSZW5kZXJMYW5lcyhpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgc291cmNlKSB7XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBhbiBlcnJvciwgY2FsbCB0aGlzIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGlzIHRocm93blxuICAvLyBzbyB0aGUgc3RhY2sgaXMgYWNjdXJhdGUuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN0YWNrOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKVxuICB9O1xufVxuXG4vLyBUaGlzIG1vZHVsZSBpcyBmb3JrZWQgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy5cbi8vIEJ5IGRlZmF1bHQsIHJldHVybiBgdHJ1ZWAgdG8gbG9nIGVycm9ycyB0byB0aGUgY29uc29sZS5cbi8vIEZvcmtzIGNhbiByZXR1cm4gYGZhbHNlYCBpZiB0aGlzIGlzbid0IGRlc2lyYWJsZS5cbmZ1bmN0aW9uIHNob3dFcnJvckRpYWxvZyhib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBsb2dDYXB0dXJlZEVycm9yKGJvdW5kYXJ5LCBlcnJvckluZm8pIHtcbiAgdHJ5IHtcbiAgICB2YXIgbG9nRXJyb3IgPSBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbyk7IC8vIEFsbG93IGluamVjdGVkIHNob3dFcnJvckRpYWxvZygpIHRvIHByZXZlbnQgZGVmYXVsdCBjb25zb2xlLmVycm9yIGxvZ2dpbmcuXG4gICAgLy8gVGhpcyBlbmFibGVzIHJlbmRlcmVycyBsaWtlIFJlYWN0TmF0aXZlIHRvIGJldHRlciBtYW5hZ2UgcmVkYm94IGJlaGF2aW9yLlxuXG4gICAgaWYgKGxvZ0Vycm9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcblxuICAgIGlmICh0cnVlKSB7XG4gICAgICB2YXIgc291cmNlID0gZXJyb3JJbmZvLnNvdXJjZTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHZhciBjb21wb25lbnRTdGFjayA9IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiAnJzsgLy8gQnJvd3NlcnMgc3VwcG9ydCBzaWxlbmNpbmcgdW5jYXVnaHQgZXJyb3JzIGJ5IGNhbGxpbmdcbiAgICAgIC8vIGBwcmV2ZW50RGVmYXVsdCgpYCBpbiB3aW5kb3cgYGVycm9yYCBoYW5kbGVyLlxuICAgICAgLy8gV2UgcmVjb3JkIHRoaXMgaW5mb3JtYXRpb24gYXMgYW4gZXhwYW5kbyBvbiB0aGUgZXJyb3IuXG5cbiAgICAgIGlmIChlcnJvciAhPSBudWxsICYmIGVycm9yLl9zdXBwcmVzc0xvZ2dpbmcpIHtcbiAgICAgICAgaWYgKGJvdW5kYXJ5LnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAvLyBUaGUgZXJyb3IgaXMgcmVjb3ZlcmFibGUgYW5kIHdhcyBzaWxlbmNlZC5cbiAgICAgICAgICAvLyBJZ25vcmUgaXQgYW5kIGRvbid0IHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cbiAgICAgICAgICAvLyBUaGlzIGlzIGhhbmR5IGZvciB0ZXN0aW5nIGVycm9yIGJvdW5kYXJpZXMgd2l0aG91dCBub2lzZS5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gVGhlIGVycm9yIGlzIGZhdGFsLiBTaW5jZSB0aGUgc2lsZW5jaW5nIG1pZ2h0IGhhdmVcbiAgICAgICAgLy8gYmVlbiBhY2NpZGVudGFsLCB3ZSdsbCBzdXJmYWNlIGl0IGFueXdheS5cbiAgICAgICAgLy8gSG93ZXZlciwgdGhlIGJyb3dzZXIgd291bGQgaGF2ZSBzaWxlbmNlZCB0aGUgb3JpZ2luYWwgZXJyb3JcbiAgICAgICAgLy8gc28gd2UnbGwgcHJpbnQgaXQgZmlyc3QsIGFuZCB0aGVuIHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cblxuXG4gICAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oZXJyb3IpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICAgICAgLy8gRm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGlzIGJsb2NrLCBzZWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEzMzg0XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gc291cmNlID8gZ2V0Q29tcG9uZW50TmFtZShzb3VyY2UudHlwZSkgOiBudWxsO1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWVNZXNzYWdlID0gY29tcG9uZW50TmFtZSA/IFwiVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIHRoZSA8XCIgKyBjb21wb25lbnROYW1lICsgXCI+IGNvbXBvbmVudDpcIiA6ICdUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50czonO1xuICAgICAgdmFyIGVycm9yQm91bmRhcnlNZXNzYWdlO1xuICAgICAgdmFyIGVycm9yQm91bmRhcnlOYW1lID0gZ2V0Q29tcG9uZW50TmFtZShib3VuZGFyeS50eXBlKTtcblxuICAgICAgaWYgKGVycm9yQm91bmRhcnlOYW1lKSB7XG4gICAgICAgIGVycm9yQm91bmRhcnlNZXNzYWdlID0gXCJSZWFjdCB3aWxsIHRyeSB0byByZWNyZWF0ZSB0aGlzIGNvbXBvbmVudCB0cmVlIGZyb20gc2NyYXRjaCBcIiArIChcInVzaW5nIHRoZSBlcnJvciBib3VuZGFyeSB5b3UgcHJvdmlkZWQsIFwiICsgZXJyb3JCb3VuZGFyeU5hbWUgKyBcIi5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9ICdDb25zaWRlciBhZGRpbmcgYW4gZXJyb3IgYm91bmRhcnkgdG8geW91ciB0cmVlIHRvIGN1c3RvbWl6ZSBlcnJvciBoYW5kbGluZyBiZWhhdmlvci5cXG4nICsgJ1Zpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9lcnJvci1ib3VuZGFyaWVzIHRvIGxlYXJuIG1vcmUgYWJvdXQgZXJyb3IgYm91bmRhcmllcy4nO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29tYmluZWRNZXNzYWdlID0gY29tcG9uZW50TmFtZU1lc3NhZ2UgKyBcIlxcblwiICsgY29tcG9uZW50U3RhY2sgKyBcIlxcblxcblwiICsgKFwiXCIgKyBlcnJvckJvdW5kYXJ5TWVzc2FnZSk7IC8vIEluIGRldmVsb3BtZW50LCB3ZSBwcm92aWRlIG91ciBvd24gbWVzc2FnZSB3aXRoIGp1c3QgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAgICAgIC8vIFdlIGRvbid0IGluY2x1ZGUgdGhlIG9yaWdpbmFsIGVycm9yIG1lc3NhZ2UgYW5kIEpTIHN0YWNrIGJlY2F1c2UgdGhlIGJyb3dzZXJcbiAgICAgIC8vIGhhcyBhbHJlYWR5IHByaW50ZWQgaXQuIEV2ZW4gaWYgdGhlIGFwcGxpY2F0aW9uIHN3YWxsb3dzIHRoZSBlcnJvciwgaXQgaXMgc3RpbGxcbiAgICAgIC8vIGRpc3BsYXllZCBieSB0aGUgYnJvd3NlciB0aGFua3MgdG8gdGhlIERFVi1vbmx5IGZha2UgZXZlbnQgdHJpY2sgaW4gUmVhY3RFcnJvclV0aWxzLlxuXG4gICAgICBjb25zb2xlWydlcnJvciddKGNvbWJpbmVkTWVzc2FnZSk7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBwcm9kdWN0aW9uLCB3ZSBwcmludCB0aGUgZXJyb3IgZGlyZWN0bHkuXG4gICAgICAvLyBUaGlzIHdpbGwgaW5jbHVkZSB0aGUgbWVzc2FnZSwgdGhlIEpTIHN0YWNrLCBhbmQgYW55dGhpbmcgdGhlIGJyb3dzZXIgd2FudHMgdG8gc2hvdy5cbiAgICAgIC8vIFdlIHBhc3MgdGhlIGVycm9yIG9iamVjdCBpbnN0ZWFkIG9mIGN1c3RvbSBtZXNzYWdlIHNvIHRoYXQgdGhlIGJyb3dzZXIgZGlzcGxheXMgdGhlIGVycm9yIG5hdGl2ZWx5LlxuICAgICAgY29uc29sZVsnZXJyb3InXShlcnJvcik7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRoaXMgbWV0aG9kIG11c3Qgbm90IHRocm93LCBvciBSZWFjdCBpbnRlcm5hbCBzdGF0ZSB3aWxsIGdldCBtZXNzZWQgdXAuXG4gICAgLy8gSWYgY29uc29sZS5lcnJvciBpcyBvdmVycmlkZGVuLCBvciBsb2dDYXB0dXJlZEVycm9yKCkgc2hvd3MgYSBkaWFsb2cgdGhhdCB0aHJvd3MsXG4gICAgLy8gd2Ugd2FudCB0byByZXBvcnQgdGhpcyBlcnJvciBvdXRzaWRlIG9mIHRoZSBub3JtYWwgc3RhY2sgYXMgYSBsYXN0IHJlc29ydC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzMTg4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xuICB9XG59XG5cbnZhciBQb3NzaWJseVdlYWtNYXAkMSA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcblxuZnVuY3Rpb24gY3JlYXRlUm9vdEVycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgbGFuZSk7IC8vIFVubW91bnQgdGhlIHJvb3QgYnkgcmVuZGVyaW5nIG51bGwuXG5cbiAgdXBkYXRlLnRhZyA9IENhcHR1cmVVcGRhdGU7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgIGVsZW1lbnQ6IG51bGxcbiAgfTtcbiAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICBvblVuY2F1Z2h0RXJyb3IoZXJyb3IpO1xuICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIGxhbmUpO1xuICB1cGRhdGUudGFnID0gQ2FwdHVyZVVwZGF0ZTtcbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9IGZpYmVyLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO1xuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGVycm9yJDEgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgICB1cGRhdGUucGF5bG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gICAgICByZXR1cm4gZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yJDEpO1xuICAgIH07XG4gIH1cblxuICB2YXIgaW5zdCA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICBpZiAoaW5zdCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdC5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAge1xuICAgICAgICBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRvIHByZXNlcnZlIHRoZSBwcmVleGlzdGluZyByZXRyeSBiZWhhdmlvciBvZiBlcnJvciBib3VuZGFyaWVzLFxuICAgICAgICAvLyB3ZSBrZWVwIHRyYWNrIG9mIHdoaWNoIG9uZXMgYWxyZWFkeSBmYWlsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAgIC8vIFRoaXMgZ2V0cyByZXNldCBiZWZvcmUgd2UgeWllbGQgYmFjayB0byB0aGUgYnJvd3Nlci5cbiAgICAgICAgLy8gVE9ETzogV2FybiBpbiBzdHJpY3QgbW9kZSBpZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgaXNcbiAgICAgICAgLy8gbm90IGRlZmluZWQuXG4gICAgICAgIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQodGhpcyk7IC8vIE9ubHkgbG9nIGhlcmUgaWYgY29tcG9uZW50RGlkQ2F0Y2ggaXMgdGhlIG9ubHkgZXJyb3IgYm91bmRhcnkgbWV0aG9kIGRlZmluZWRcblxuICAgICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXJyb3IkMSA9IGVycm9ySW5mby52YWx1ZTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHRoaXMuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IkMSwge1xuICAgICAgICBjb21wb25lbnRTdGFjazogc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnXG4gICAgICB9KTtcblxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIElmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkLFxuICAgICAgICAgIC8vIHRoZW4gaXQgbmVlZHMgdG8gY2FsbCBzZXRTdGF0ZSB0byByZWNvdmVyIGZyb20gZXJyb3JzLlxuICAgICAgICAgIC8vIElmIG5vIHN0YXRlIHVwZGF0ZSBpcyBzY2hlZHVsZWQgdGhlbiB0aGUgYm91bmRhcnkgd2lsbCBzd2FsbG93IHRoZSBlcnJvci5cbiAgICAgICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUoZmliZXIubGFuZXMsIFN5bmNMYW5lKSkge1xuICAgICAgICAgICAgZXJyb3IoJyVzOiBFcnJvciBib3VuZGFyaWVzIHNob3VsZCBpbXBsZW1lbnQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkuICcgKyAnSW4gdGhhdCBtZXRob2QsIHJldHVybiBhIHN0YXRlIHVwZGF0ZSB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugb3IgZmFsbGJhY2sgVUkuJywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG5mdW5jdGlvbiBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIGxhbmVzKSB7XG4gIC8vIEF0dGFjaCBhIGxpc3RlbmVyIHRvIHRoZSBwcm9taXNlIHRvIFwicGluZ1wiIHRoZSByb290IGFuZCByZXRyeS4gQnV0IG9ubHkgaWZcbiAgLy8gb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgZm9yIHRoZSBsYW5lcyB3ZSdyZSBjdXJyZW50bHkgcmVuZGVyaW5nICh3aGljaFxuICAvLyBhY3RzIGxpa2UgYSBcInRocmVhZCBJRFwiIGhlcmUpLlxuICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG4gIHZhciB0aHJlYWRJRHM7XG5cbiAgaWYgKHBpbmdDYWNoZSA9PT0gbnVsbCkge1xuICAgIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCQxKCk7XG4gICAgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyZWFkSURzID0gcGluZ0NhY2hlLmdldCh3YWtlYWJsZSk7XG5cbiAgICBpZiAodGhyZWFkSURzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0aHJlYWRJRHMuaGFzKGxhbmVzKSkge1xuICAgIC8vIE1lbW9pemUgdXNpbmcgdGhlIHRocmVhZCBJRCB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG4gICAgdGhyZWFkSURzLmFkZChsYW5lcyk7XG4gICAgdmFyIHBpbmcgPSBwaW5nU3VzcGVuZGVkUm9vdC5iaW5kKG51bGwsIHJvb3QsIHdha2VhYmxlLCBsYW5lcyk7XG4gICAgd2FrZWFibGUudGhlbihwaW5nLCBwaW5nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0V4Y2VwdGlvbihyb290LCByZXR1cm5GaWJlciwgc291cmNlRmliZXIsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLlxuICBzb3VyY2VGaWJlci5mbGFncyB8PSBJbmNvbXBsZXRlOyAvLyBJdHMgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gIHNvdXJjZUZpYmVyLmZpcnN0RWZmZWN0ID0gc291cmNlRmliZXIubGFzdEVmZmVjdCA9IG51bGw7XG5cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIGlzIGEgd2FrZWFibGUuXG4gICAgdmFyIHdha2VhYmxlID0gdmFsdWU7XG5cbiAgICBpZiAoKHNvdXJjZUZpYmVyLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBtZW1vaXplZFN0YXRlIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB3ZSBhdHRlbXB0ZWRcbiAgICAgIC8vIHRvIHJlbmRlciBpdC5cbiAgICAgIHZhciBjdXJyZW50U291cmNlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudFNvdXJjZSkge1xuICAgICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IGN1cnJlbnRTb3VyY2UudXBkYXRlUXVldWU7XG4gICAgICAgIHNvdXJjZUZpYmVyLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50U291cmNlLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gY3VycmVudFNvdXJjZS5sYW5lcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgICAgc291cmNlRmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhhc0ludmlzaWJsZVBhcmVudEJvdW5kYXJ5ID0gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0KTsgLy8gU2NoZWR1bGUgdGhlIG5lYXJlc3QgU3VzcGVuc2UgdG8gcmUtcmVuZGVyIHRoZSB0aW1lZCBvdXQgdmlldy5cblxuICAgIHZhciBfd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICAgIGRvIHtcbiAgICAgIGlmIChfd29ya0luUHJvZ3Jlc3MudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBzaG91bGRDYXB0dXJlU3VzcGVuc2UoX3dvcmtJblByb2dyZXNzLCBoYXNJbnZpc2libGVQYXJlbnRCb3VuZGFyeSkpIHtcbiAgICAgICAgLy8gRm91bmQgdGhlIG5lYXJlc3QgYm91bmRhcnkuXG4gICAgICAgIC8vIFN0YXNoIHRoZSBwcm9taXNlIG9uIHRoZSBib3VuZGFyeSBmaWJlci4gSWYgdGhlIGJvdW5kYXJ5IHRpbWVzIG91dCwgd2UnbGxcbiAgICAgICAgLy8gYXR0YWNoIGFub3RoZXIgbGlzdGVuZXIgdG8gZmxpcCB0aGUgYm91bmRhcnkgYmFjayB0byBpdHMgbm9ybWFsIHN0YXRlLlxuICAgICAgICB2YXIgd2FrZWFibGVzID0gX3dvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh3YWtlYWJsZXMgPT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgdXBkYXRlUXVldWUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgICBfd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YWtlYWJsZXMuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgfSAvLyBJZiB0aGUgYm91bmRhcnkgaXMgb3V0c2lkZSBvZiBibG9ja2luZyBtb2RlLCB3ZSBzaG91bGQgKm5vdCpcbiAgICAgICAgLy8gc3VzcGVuZCB0aGUgY29tbWl0LiBQcmV0ZW5kIGFzIGlmIHRoZSBzdXNwZW5kZWQgY29tcG9uZW50IHJlbmRlcmVkXG4gICAgICAgIC8vIG51bGwgYW5kIGtlZXAgcmVuZGVyaW5nLiBJbiB0aGUgY29tbWl0IHBoYXNlLCB3ZSdsbCBzY2hlZHVsZSBhXG4gICAgICAgIC8vIHN1YnNlcXVlbnQgc3luY2hyb25vdXMgdXBkYXRlIHRvIHJlLXJlbmRlciB0aGUgU3VzcGVuc2UuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIE5vdGU6IEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgdGhlIGNvbXBvbmVudCB0aGF0IHN1c3BlbmRlZCB3YXNcbiAgICAgICAgLy8gaW5zaWRlIGEgYmxvY2tpbmcgbW9kZSB0cmVlLiBJZiB0aGUgU3VzcGVuc2UgaXMgb3V0c2lkZSBvZiBpdCwgd2VcbiAgICAgICAgLy8gc2hvdWxkICpub3QqIHN1c3BlbmQgdGhlIGNvbW1pdC5cblxuXG4gICAgICAgIGlmICgoX3dvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgICBfd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICBzb3VyY2VGaWJlci5mbGFncyB8PSBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlOyAvLyBXZSdyZSBnb2luZyB0byBjb21taXQgdGhpcyBmaWJlciBldmVuIHRob3VnaCBpdCBkaWRuJ3QgY29tcGxldGUuXG4gICAgICAgICAgLy8gQnV0IHdlIHNob3VsZG4ndCBjYWxsIGFueSBsaWZlY3ljbGUgbWV0aG9kcyBvciBjYWxsYmFja3MuIFJlbW92ZVxuICAgICAgICAgIC8vIGFsbCBsaWZlY3ljbGUgZWZmZWN0IHRhZ3MuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5mbGFncyAmPSB+KExpZmVjeWNsZUVmZmVjdE1hc2sgfCBJbmNvbXBsZXRlKTtcblxuICAgICAgICAgIGlmIChzb3VyY2VGaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFNvdXJjZUZpYmVyID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudFNvdXJjZUZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgbW91bnQuIENoYW5nZSB0aGUgdGFnIHNvIGl0J3Mgbm90IG1pc3Rha2VuIGZvciBhXG4gICAgICAgICAgICAgIC8vIGNvbXBsZXRlZCBjbGFzcyBjb21wb25lbnQuIEZvciBleGFtcGxlLCB3ZSBzaG91bGQgbm90IGNhbGxcbiAgICAgICAgICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgaWYgaXQgaXMgZGVsZXRlZC5cbiAgICAgICAgICAgICAgc291cmNlRmliZXIudGFnID0gSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gV2hlbiB3ZSB0cnkgcmVuZGVyaW5nIGFnYWluLCB3ZSBzaG91bGQgbm90IHJldXNlIHRoZSBjdXJyZW50IGZpYmVyLFxuICAgICAgICAgICAgICAvLyBzaW5jZSBpdCdzIGtub3duIHRvIGJlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gVXNlIGEgZm9yY2UgdXBkYXRlIHRvXG4gICAgICAgICAgICAgIC8vIHByZXZlbnQgYSBiYWlsIG91dC5cbiAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgU3luY0xhbmUpO1xuICAgICAgICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG4gICAgICAgICAgICAgIGVucXVldWVVcGRhdGUoc291cmNlRmliZXIsIHVwZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBUaGUgc291cmNlIGZpYmVyIGRpZCBub3QgY29tcGxldGUuIE1hcmsgaXQgd2l0aCBTeW5jIHByaW9yaXR5IHRvXG4gICAgICAgICAgLy8gaW5kaWNhdGUgdGhhdCBpdCBzdGlsbCBoYXMgcGVuZGluZyB3b3JrLlxuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoc291cmNlRmliZXIubGFuZXMsIFN5bmNMYW5lKTsgLy8gRXhpdCB3aXRob3V0IHN1c3BlbmRpbmcuXG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gQ29uZmlybWVkIHRoYXQgdGhlIGJvdW5kYXJ5IGlzIGluIGEgY29uY3VycmVudCBtb2RlIHRyZWUuIENvbnRpbnVlXG4gICAgICAgIC8vIHdpdGggdGhlIG5vcm1hbCBzdXNwZW5kIHBhdGguXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEFmdGVyIHRoaXMgd2UnbGwgdXNlIGEgc2V0IG9mIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpc1xuICAgICAgICAvLyByZW5kZXIgcGFzcyB3aWxsIHJ1biB0byBjb21wbGV0aW9uIG9yIHJlc3RhcnQgb3IgXCJzdXNwZW5kXCIgdGhlIGNvbW1pdC5cbiAgICAgICAgLy8gVGhlIGFjdHVhbCBsb2dpYyBmb3IgdGhpcyBpcyBzcHJlYWQgb3V0IGluIGRpZmZlcmVudCBwbGFjZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoaXMgZmlyc3QgcHJpbmNpcGxlIGlzIHRoYXQgaWYgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCB3aGVuIHdlIGNvbXBsZXRlXG4gICAgICAgIC8vIGEgcm9vdCwgdGhlbiB3ZSBzaG91bGQgYWxzbyByZXN0YXJ0IGlmIHdlIGdldCBhbiB1cGRhdGUgb3IgcGluZyB0aGF0XG4gICAgICAgIC8vIG1pZ2h0IHVuc3VzcGVuZCBpdCwgYW5kIHZpY2UgdmVyc2EuIFRoZSBvbmx5IHJlYXNvbiB0byBzdXNwZW5kIGlzXG4gICAgICAgIC8vIGJlY2F1c2UgeW91IHRoaW5rIHlvdSBtaWdodCB3YW50IHRvIHJlc3RhcnQgYmVmb3JlIGNvbW1pdHRpbmcuIEhvd2V2ZXIsXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byByZXN0YXJ0IG9ubHkgd2hpbGUgaW4gdGhlIHBlcmlvZCB3ZSdyZSBzdXNwZW5kZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFJlc3RhcnRpbmcgdG9vIGFnZ3Jlc3NpdmVseSBpcyBhbHNvIG5vdCBnb29kIGJlY2F1c2UgaXQgc3RhcnZlcyBvdXQgYW55XG4gICAgICAgIC8vIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBTbyB3ZSB1c2UgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hlbi5cbiAgICAgICAgLy8gU3VzcGVuc2UgSGV1cmlzdGljc1xuICAgICAgICAvL1xuICAgICAgICAvLyBJZiBub3RoaW5nIHRocmV3IGEgUHJvbWlzZSBvciBhbGwgdGhlIHNhbWUgZmFsbGJhY2tzIGFyZSBhbHJlYWR5IHNob3dpbmcsXG4gICAgICAgIC8vIHRoZW4gZG9uJ3Qgc3VzcGVuZC9yZXN0YXJ0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIGluaXRpYWwgcmVuZGVyIG9mIGEgbmV3IHRyZWUgb2YgU3VzcGVuc2UgYm91bmRhcmllcyBhbmRcbiAgICAgICAgLy8gdGhvc2UgdHJpZ2dlciBhIGZhbGxiYWNrLCB0aGVuIGRvbid0IHN1c3BlbmQvcmVzdGFydC4gV2Ugd2FudCB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCB3ZSBjYW4gc2hvdyB0aGUgaW5pdGlhbCBsb2FkaW5nIHN0YXRlIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHdlIGhpdCBhIFwiRGVsYXllZFwiIGNhc2UsIHN1Y2ggYXMgd2hlbiB3ZSdkIHN3aXRjaCBmcm9tIGNvbnRlbnQgYmFjayBpbnRvXG4gICAgICAgIC8vIGEgZmFsbGJhY2ssIHRoZW4gd2Ugc2hvdWxkIGFsd2F5cyBzdXNwZW5kL3Jlc3RhcnQuIFRyYW5zaXRpb25zIGFwcGx5XG4gICAgICAgIC8vIHRvIHRoaXMgY2FzZS4gSWYgbm9uZSBpcyBkZWZpbmVkLCBKTkQgaXMgdXNlZCBpbnN0ZWFkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBhbmQgaXQgZ2V0cyBcInJldHJpZWRcIiwgYWxsb3dpbmcgdXMgdG8gc2hvd1xuICAgICAgICAvLyBhbm90aGVyIGxldmVsLCBidXQgdGhlcmUncyBzdGlsbCBhbiBpbm5lciBib3VuZGFyeSB0aGF0IHdvdWxkIHNob3cgYSBmYWxsYmFjayxcbiAgICAgICAgLy8gdGhlbiB3ZSBzdXNwZW5kL3Jlc3RhcnQgZm9yIDUwMG1zIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2Ugc2hvd2VkIGEgZmFsbGJhY2tcbiAgICAgICAgLy8gYW55d2hlcmUgaW4gdGhlIHRyZWUuIFRoaXMgZWZmZWN0aXZlbHkgdGhyb3R0bGVzIHByb2dyZXNzaXZlIGxvYWRpbmcgaW50byBhXG4gICAgICAgIC8vIGNvbnNpc3RlbnQgdHJhaW4gb2YgY29tbWl0cy4gVGhpcyBhbHNvIGdpdmVzIHVzIGFuIG9wcG9ydHVuaXR5IHRvIHJlc3RhcnQgdG9cbiAgICAgICAgLy8gZ2V0IHRvIHRoZSBjb21wbGV0ZWQgc3RhdGUgc2xpZ2h0bHkgZWFybGllci5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgdGhlcmUncyBhbWJpZ3VpdHkgZHVlIHRvIGJhdGNoaW5nIGl0J3MgcmVzb2x2ZWQgaW4gcHJlZmVyZW5jZSBvZjpcbiAgICAgICAgLy8gMSkgXCJkZWxheWVkXCIsIDIpIFwiaW5pdGlhbCByZW5kZXJcIiwgMykgXCJyZXRyeVwiLlxuICAgICAgICAvL1xuICAgICAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IGEgXCJidXN5XCIgc3RhdGUgZG9lc24ndCBnZXQgZm9yY2UgY29tbWl0dGVkLiBXZSB3YW50IHRvXG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IG5ldyBpbml0aWFsIGxvYWRpbmcgc3RhdGVzIGNhbiBjb21taXQgYXMgc29vbiBhcyBwb3NzaWJsZS5cblxuXG4gICAgICAgIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB3YWtlYWJsZSwgcm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgX3dvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgIF93b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJvb3RSZW5kZXJMYW5lcztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBUaGlzIGJvdW5kYXJ5IGFscmVhZHkgY2FwdHVyZWQgZHVyaW5nIHRoaXMgcmVuZGVyLiBDb250aW51ZSB0byB0aGUgbmV4dFxuICAgICAgLy8gYm91bmRhcnkuXG5cblxuICAgICAgX3dvcmtJblByb2dyZXNzID0gX3dvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICB9IHdoaWxlIChfd29ya0luUHJvZ3Jlc3MgIT09IG51bGwpOyAvLyBObyBib3VuZGFyeSB3YXMgZm91bmQuIEZhbGx0aHJvdWdoIHRvIGVycm9yIG1vZGUuXG4gICAgLy8gVE9ETzogVXNlIGludmFyaWFudCBzbyB0aGUgbWVzc2FnZSBpcyBzdHJpcHBlZCBpbiBwcm9kP1xuXG5cbiAgICB2YWx1ZSA9IG5ldyBFcnJvcigoZ2V0Q29tcG9uZW50TmFtZShzb3VyY2VGaWJlci50eXBlKSB8fCAnQSBSZWFjdCBjb21wb25lbnQnKSArICcgc3VzcGVuZGVkIHdoaWxlIHJlbmRlcmluZywgYnV0IG5vIGZhbGxiYWNrIFVJIHdhcyBzcGVjaWZpZWQuXFxuJyArICdcXG4nICsgJ0FkZCBhIDxTdXNwZW5zZSBmYWxsYmFjaz0uLi4+IGNvbXBvbmVudCBoaWdoZXIgaW4gdGhlIHRyZWUgdG8gJyArICdwcm92aWRlIGEgbG9hZGluZyBpbmRpY2F0b3Igb3IgcGxhY2Vob2xkZXIgdG8gZGlzcGxheS4nKTtcbiAgfSAvLyBXZSBkaWRuJ3QgZmluZCBhIGJvdW5kYXJ5IHRoYXQgY291bGQgaGFuZGxlIHRoaXMgdHlwZSBvZiBleGNlcHRpb24uIFN0YXJ0XG4gIC8vIG92ZXIgYW5kIHRyYXZlcnNlIHBhcmVudCBwYXRoIGFnYWluLCB0aGlzIHRpbWUgdHJlYXRpbmcgdGhlIGV4Y2VwdGlvblxuICAvLyBhcyBhbiBlcnJvci5cblxuXG4gIHJlbmRlckRpZEVycm9yKCk7XG4gIHZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgc291cmNlRmliZXIpO1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICBkbyB7XG4gICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2Vycm9ySW5mbyA9IHZhbHVlO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyb290UmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgbGFuZSk7XG5cbiAgICAgICAgICB2YXIgX3VwZGF0ZSA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX2Vycm9ySW5mbywgbGFuZSk7XG5cbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF91cGRhdGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAvLyBDYXB0dXJlIGFuZCByZXRyeVxuICAgICAgICB2YXIgZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgIHZhciBjdG9yID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyAmJiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcblxuICAgICAgICAgIHZhciBfbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKHJvb3RSZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMsIF9sYW5lKTsgLy8gU2NoZWR1bGUgdGhlIGVycm9yIGJvdW5kYXJ5IHRvIHJlLXJlbmRlciB1c2luZyB1cGRhdGVkIHN0YXRlXG5cbiAgICAgICAgICB2YXIgX3VwZGF0ZTIgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKHdvcmtJblByb2dyZXNzLCBlcnJvckluZm8sIF9sYW5lKTtcblxuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX3VwZGF0ZTIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICB9IHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCk7XG59XG5cbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG51bGw7XG5cbntcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBuZXcgU2V0KCk7XG59XG5cbnZhciBQb3NzaWJseVdlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtTZXQgOiBTZXQ7XG5cbnZhciBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIgPSBmdW5jdGlvbiAoY3VycmVudCwgaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG59OyAvLyBDYXB0dXJlIGVycm9ycyBzbyB0aGV5IGRvbid0IGludGVycnVwdCB1bm1vdW50aW5nLlxuXG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChjdXJyZW50LCBpbnN0YW5jZSkge1xuICB7XG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFdpdGhUaW1lciwgbnVsbCwgY3VycmVudCwgaW5zdGFuY2UpO1xuXG4gICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgIHZhciB1bm1vdW50RXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCB1bm1vdW50RXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCkge1xuICB2YXIgcmVmID0gY3VycmVudC5yZWY7XG5cbiAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCByZWYsIG51bGwsIG51bGwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgdmFyIHJlZkVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIHJlZkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxEZXN0cm95KGN1cnJlbnQsIGRlc3Ryb3kpIHtcbiAge1xuICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBkZXN0cm95LCBudWxsKTtcblxuICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uTGlmZUN5Y2xlcyhjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBTbmFwc2hvdCkge1xuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzbmFwc2hvdCA9IGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGUgPyBwcmV2UHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBwcmV2UHJvcHMpLCBwcmV2U3RhdGUpO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBkaWRXYXJuU2V0ID0gZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGU7XG5cbiAgICAgICAgICAgICAgaWYgKHNuYXBzaG90ID09PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5TZXQuaGFzKGZpbmlzaGVkV29yay50eXBlKSkge1xuICAgICAgICAgICAgICAgIGRpZFdhcm5TZXQuYWRkKGZpbmlzaGVkV29yay50eXBlKTtcblxuICAgICAgICAgICAgICAgIGVycm9yKCclcy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpOiBBIHNuYXBzaG90IHZhbHVlIChvciBudWxsKSAnICsgJ211c3QgYmUgcmV0dXJuZWQuIFlvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUgPSBzbmFwc2hvdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFNuYXBzaG90KSB7XG4gICAgICAgICAgICB2YXIgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBjbGVhckNvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIC8vIE5vdGhpbmcgdG8gZG8gZm9yIHRoZXNlIGNvbXBvbmVudCB0eXBlc1xuICAgICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudCh0YWcsIGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoKGVmZmVjdC50YWcgJiB0YWcpID09PSB0YWcpIHtcbiAgICAgICAgLy8gVW5tb3VudFxuICAgICAgICB2YXIgZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuICAgICAgICBlZmZlY3QuZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQodGFnLCBmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlZmZlY3QudGFnICYgdGFnKSA9PT0gdGFnKSB7XG4gICAgICAgIC8vIE1vdW50XG4gICAgICAgIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICAgICAgICBlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSgpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuXG4gICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZGVzdHJveSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGFkZGVuZHVtID0gdm9pZCAwO1xuXG4gICAgICAgICAgICBpZiAoZGVzdHJveSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkIG51bGwuIElmIHlvdXIgZWZmZWN0IGRvZXMgbm90IHJlcXVpcmUgY2xlYW4gJyArICd1cCwgcmV0dXJuIHVuZGVmaW5lZCAob3Igbm90aGluZykuJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc3Ryb3kudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICdcXG5cXG5JdCBsb29rcyBsaWtlIHlvdSB3cm90ZSB1c2VFZmZlY3QoYXN5bmMgKCkgPT4gLi4uKSBvciByZXR1cm5lZCBhIFByb21pc2UuICcgKyAnSW5zdGVhZCwgd3JpdGUgdGhlIGFzeW5jIGZ1bmN0aW9uIGluc2lkZSB5b3VyIGVmZmVjdCAnICsgJ2FuZCBjYWxsIGl0IGltbWVkaWF0ZWx5OlxcblxcbicgKyAndXNlRWZmZWN0KCgpID0+IHtcXG4nICsgJyAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKCkge1xcbicgKyAnICAgIC8vIFlvdSBjYW4gYXdhaXQgaGVyZVxcbicgKyAnICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgTXlBUEkuZ2V0RGF0YShzb21lSWQpO1xcbicgKyAnICAgIC8vIC4uLlxcbicgKyAnICB9XFxuJyArICcgIGZldGNoRGF0YSgpO1xcbicgKyBcIn0sIFtzb21lSWRdKTsgLy8gT3IgW10gaWYgZWZmZWN0IGRvZXNuJ3QgbmVlZCBwcm9wcyBvciBzdGF0ZVxcblxcblwiICsgJ0xlYXJuIG1vcmUgYWJvdXQgZGF0YSBmZXRjaGluZyB3aXRoIEhvb2tzOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaG9va3MtZGF0YS1mZXRjaGluZyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkOiAnICsgZGVzdHJveTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IoJ0FuIGVmZmVjdCBmdW5jdGlvbiBtdXN0IG5vdCByZXR1cm4gYW55dGhpbmcgYmVzaWRlcyBhIGZ1bmN0aW9uLCAnICsgJ3doaWNoIGlzIHVzZWQgZm9yIGNsZWFuLXVwLiVzJywgYWRkZW5kdW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgX2VmZmVjdCA9IGVmZmVjdCxcbiAgICAgICAgICBuZXh0ID0gX2VmZmVjdC5uZXh0LFxuICAgICAgICAgIHRhZyA9IF9lZmZlY3QudGFnO1xuXG4gICAgICBpZiAoKHRhZyAmIFBhc3NpdmUkMSkgIT09IE5vRmxhZ3MkMSAmJiAodGFnICYgSGFzRWZmZWN0KSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RVbm1vdW50KGZpbmlzaGVkV29yaywgZWZmZWN0KTtcbiAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdE1vdW50KGZpbmlzaGVkV29yaywgZWZmZWN0KTtcbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gbmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMaWZlQ3ljbGVzKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgZmluaXNoZWRXb3JrLCBjb21taXR0ZWRMYW5lcykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBsYXlvdXQgZWZmZWN0cyBoYXZlIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQgKGR1cmluZyBtdXRhdGlvbiBwaGFzZSkuXG4gICAgICAgIC8vIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgICAvLyBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudCBkdXJpbmcgdGhlIHNhbWUgY29tbWl0LlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChMYXlvdXQgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBzY2hlZHVsZVBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJldlByb3BzID0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZSA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlOyAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdjb21wb25lbnREaWRVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgIC8vIGNvbW1pdCBwaGFzZS4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIHR5cGUgY2hlY2suXG5cblxuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAncHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cblxuICAgICAgICAgIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgdXBkYXRlUXVldWUsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgIC8vIGNvbW1pdCBwaGFzZS4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIHR5cGUgY2hlY2suXG4gICAgICAgIHZhciBfdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKF91cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfaW5zdGFuY2UgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsuY2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UgPSBnZXRQdWJsaWNJbnN0YW5jZShmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZSA9IGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCBfdXBkYXRlUXVldWUsIF9pbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfaW5zdGFuY2UyID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTsgLy8gUmVuZGVyZXJzIG1heSBzY2hlZHVsZSB3b3JrIHRvIGJlIGRvbmUgYWZ0ZXIgaG9zdCBjb21wb25lbnRzIGFyZSBtb3VudGVkXG4gICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgbWF5IHNjaGVkdWxlIGF1dG8tZm9jdXMgZm9yIGlucHV0cyBhbmQgZm9ybSBjb250cm9scykuXG4gICAgICAgIC8vIFRoZXNlIGVmZmVjdHMgc2hvdWxkIG9ubHkgYmUgY29tbWl0dGVkIHdoZW4gY29tcG9uZW50cyBhcmUgZmlyc3QgbW91bnRlZCxcbiAgICAgICAgLy8gYWthIHdoZW4gdGhlcmUgaXMgbm8gY3VycmVudC9hbHRlcm5hdGUuXG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgJiYgZmluaXNoZWRXb3JrLmZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZTtcbiAgICAgICAgICB2YXIgcHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICBjb21taXRNb3VudChfaW5zdGFuY2UyLCB0eXBlLCBwcm9wcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICAvLyBXZSBoYXZlIG5vIGxpZmUtY3ljbGVzIGFzc29jaWF0ZWQgd2l0aCB0ZXh0LlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGhhdmUgbm8gbGlmZS1jeWNsZXMgYXNzb2NpYXRlZCB3aXRoIHBvcnRhbHMuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2ZpbmlzaGVkV29yayRtZW1vaXplMiA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICBvbkNvbW1pdCA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIub25Db21taXQsXG4gICAgICAgICAgICAgIG9uUmVuZGVyID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vblJlbmRlcjtcbiAgICAgICAgICB2YXIgZWZmZWN0RHVyYXRpb24gPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uO1xuICAgICAgICAgIHZhciBjb21taXRUaW1lID0gZ2V0Q29tbWl0VGltZSgpO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBvblJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvblJlbmRlcihmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5pZCwgY3VycmVudCA9PT0gbnVsbCA/ICdtb3VudCcgOiAndXBkYXRlJywgZmluaXNoZWRXb3JrLmFjdHVhbER1cmF0aW9uLCBmaW5pc2hlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiwgZmluaXNoZWRXb3JrLmFjdHVhbFN0YXJ0VGltZSwgY29tbWl0VGltZSwgZmluaXNoZWRSb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihmaW5pc2hlZFdvcmssIGlzSGlkZGVuKSB7XG4gIHtcbiAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBpbnNlcnRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgIHZhciBub2RlID0gZmluaXNoZWRXb3JrO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaGlkZUluc3RhbmNlKG5vZGUuc3RhdGVOb2RlLCBub2RlLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICB2YXIgX2luc3RhbmNlMyA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgIGhpZGVUZXh0SW5zdGFuY2UoX2luc3RhbmNlMyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5oaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZTMsIG5vZGUubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKG5vZGUudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQgfHwgbm9kZS50YWcgPT09IExlZ2FjeUhpZGRlbkNvbXBvbmVudCkgJiYgbm9kZS5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmIG5vZGUgIT09IGZpbmlzaGVkV29yaykgOyBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QXR0YWNoUmVmKGZpbmlzaGVkV29yaykge1xuICB2YXIgcmVmID0gZmluaXNoZWRXb3JrLnJlZjtcblxuICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICB2YXIgaW5zdGFuY2VUb1VzZTtcblxuICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBpbnN0YW5jZVRvVXNlID0gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGluc3RhbmNlO1xuICAgIH0gLy8gTW92ZWQgb3V0c2lkZSB0byBlbnN1cmUgRENFIHdvcmtzIHdpdGggdGhpcyBmbGFnXG5cbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVmKGluc3RhbmNlVG9Vc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIGlmICghcmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgICBlcnJvcignVW5leHBlY3RlZCByZWYgb2JqZWN0IHByb3ZpZGVkIGZvciAlcy4gJyArICdVc2UgZWl0aGVyIGEgcmVmLXNldHRlciBmdW5jdGlvbiBvciBSZWFjdC5jcmVhdGVSZWYoKS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVmLmN1cnJlbnQgPSBpbnN0YW5jZVRvVXNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXREZXRhY2hSZWYoY3VycmVudCkge1xuICB2YXIgY3VycmVudFJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIGlmIChjdXJyZW50UmVmICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBjdXJyZW50UmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjdXJyZW50UmVmKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufSAvLyBVc2VyLW9yaWdpbmF0aW5nIGVycm9ycyAobGlmZWN5Y2xlcyBhbmQgcmVmcykgc2hvdWxkIG5vdCBpbnRlcnJ1cHRcbi8vIGRlbGV0aW9uLCBzbyBkb24ndCBsZXQgdGhlbSB0aHJvdy4gSG9zdC1vcmlnaW5hdGluZyBlcnJvcnMgc2hvdWxkXG4vLyBpbnRlcnJ1cHQgZGVsZXRpb24sIHNvIGl0J3Mgb2theVxuXG5cbmZ1bmN0aW9uIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIG9uQ29tbWl0VW5tb3VudChjdXJyZW50KTtcblxuICBzd2l0Y2ggKGN1cnJlbnQudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgICAgICAgIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgdmFyIF9lZmZlY3QyID0gZWZmZWN0LFxuICAgICAgICAgICAgICAgICAgZGVzdHJveSA9IF9lZmZlY3QyLmRlc3Ryb3ksXG4gICAgICAgICAgICAgICAgICB0YWcgPSBfZWZmZWN0Mi50YWc7XG5cbiAgICAgICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgodGFnICYgUGFzc2l2ZSQxKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0VW5tb3VudChjdXJyZW50LCBlZmZlY3QpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVseUNhbGxEZXN0cm95KGN1cnJlbnQsIGRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgICAgICAgICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBjdXJyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KGN1cnJlbnQsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IHRoaXMgaXMgcmVjdXJzaXZlLlxuICAgICAgICAvLyBXZSBhcmUgYWxzbyBub3QgdXNpbmcgdGhpcyBwYXJlbnQgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgcG9ydGFsIHdpbGwgZ2V0IHB1c2hlZCBpbW1lZGlhdGVseS5cbiAgICAgICAge1xuICAgICAgICAgIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIERlaHlkcmF0ZWRGcmFnbWVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXROZXN0ZWRVbm1vdW50cyhmaW5pc2hlZFJvb3QsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gV2hpbGUgd2UncmUgaW5zaWRlIGEgcmVtb3ZlZCBob3N0IG5vZGUgd2UgZG9uJ3Qgd2FudCB0byBjYWxsXG4gIC8vIHJlbW92ZUNoaWxkIG9uIHRoZSBpbm5lciBub2RlcyBiZWNhdXNlIHRoZXkncmUgcmVtb3ZlZCBieSB0aGUgdG9wXG4gIC8vIGNhbGwgYW55d2F5LiBXZSBhbHNvIHdhbnQgdG8gY2FsbCBjb21wb25lbnRXaWxsVW5tb3VudCBvbiBhbGxcbiAgLy8gY29tcG9zaXRlcyBiZWZvcmUgdGhpcyBob3N0IG5vZGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLiBUaGVyZWZvcmVcbiAgLy8gd2UgZG8gYW4gaW5uZXIgbG9vcCB3aGlsZSB3ZSdyZSBzdGlsbCBpbnNpZGUgdGhlIGhvc3Qgbm9kZS5cbiAgdmFyIG5vZGUgPSByb290O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHRoZXkgbWF5IGNvbnRhaW4gbW9yZSBjb21wb3NpdGUgb3IgaG9zdCBub2Rlcy5cbiAgICAvLyBTa2lwIHBvcnRhbHMgYmVjYXVzZSBjb21taXRVbm1vdW50KCkgY3VycmVudGx5IHZpc2l0cyB0aGVtIHJlY3Vyc2l2ZWx5LlxuXG4gICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwgJiYgKCAvLyBJZiB3ZSB1c2UgbXV0YXRpb24gd2UgZHJpbGwgZG93biBpbnRvIHBvcnRhbHMgdXNpbmcgY29tbWl0VW5tb3VudCBhYm92ZS5cbiAgICAvLyBJZiB3ZSBkb24ndCB1c2UgbXV0YXRpb24gd2UgZHJpbGwgZG93biBpbnRvIHBvcnRhbHMgaGVyZSBpbnN0ZWFkLlxuICAgICBub2RlLnRhZyAhPT0gSG9zdFBvcnRhbCkpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHJvb3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0YWNoRmliZXJNdXRhdGlvbihmaWJlcikge1xuICAvLyBDdXQgb2ZmIHRoZSByZXR1cm4gcG9pbnRlcnMgdG8gZGlzY29ubmVjdCBpdCBmcm9tIHRoZSB0cmVlLiBJZGVhbGx5LCB3ZVxuICAvLyBzaG91bGQgY2xlYXIgdGhlIGNoaWxkIHBvaW50ZXIgb2YgdGhlIHBhcmVudCBhbHRlcm5hdGUgdG8gbGV0IHRoaXNcbiAgLy8gZ2V0IEdDOmVkIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIGZvciBzdXJlIHdoaWNoIHBhcmVudCBpcyB0aGUgY3VycmVudFxuICAvLyBvbmUgc28gd2UnbGwgc2V0dGxlIGZvciBHQzppbmcgdGhlIHN1YnRyZWUgb2YgdGhpcyBjaGlsZC4gVGhpcyBjaGlsZFxuICAvLyBpdHNlbGYgd2lsbCBiZSBHQzplZCB3aGVuIHRoZSBwYXJlbnQgdXBkYXRlcyB0aGUgbmV4dCB0aW1lLlxuICAvLyBOb3RlOiB3ZSBjYW5ub3QgbnVsbCBvdXQgc2libGluZyBoZXJlLCBvdGhlcndpc2UgaXQgY2FuIGNhdXNlIGlzc3Vlc1xuICAvLyB3aXRoIGZpbmRET01Ob2RlIGFuZCBob3cgaXQgcmVxdWlyZXMgdGhlIHNpYmxpbmcgZmllbGQgdG8gY2Fycnkgb3V0XG4gIC8vIHRyYXZlcnNhbCBpbiBhIGxhdGVyIGVmZmVjdC4gU2VlIFBSICMxNjgyMC4gV2Ugbm93IGNsZWFyIHRoZSBzaWJsaW5nXG4gIC8vIGZpZWxkIGFmdGVyIGVmZmVjdHMsIHNlZTogZGV0YWNoRmliZXJBZnRlckVmZmVjdHMuXG4gIC8vXG4gIC8vIERvbid0IGRpc2Nvbm5lY3Qgc3RhdGVOb2RlIG5vdzsgaXQgd2lsbCBiZSBkZXRhY2hlZCBpbiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cy5cbiAgLy8gSXQgbWF5IGJlIHJlcXVpcmVkIGlmIHRoZSBjdXJyZW50IGNvbXBvbmVudCBpcyBhbiBlcnJvciBib3VuZGFyeSxcbiAgLy8gYW5kIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgdGhyb3dzIHdoaWxlIHVubW91bnRpbmcgYSBwYXNzaXZlIGVmZmVjdC5cbiAgZmliZXIuYWx0ZXJuYXRlID0gbnVsbDtcbiAgZmliZXIuY2hpbGQgPSBudWxsO1xuICBmaWJlci5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICBmaWJlci5maXJzdEVmZmVjdCA9IG51bGw7XG4gIGZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuICBmaWJlci5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgZmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIGZpYmVyLnBlbmRpbmdQcm9wcyA9IG51bGw7XG4gIGZpYmVyLnJldHVybiA9IG51bGw7XG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICB7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RQYXJlbnRGaWJlcihmaWJlcikge1xuICB2YXIgcGFyZW50ID0gZmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICBpZiAoaXNIb3N0UGFyZW50KHBhcmVudCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHJldHVybiBmaWJlci50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgZmliZXIudGFnID09PSBIb3N0Um9vdCB8fCBmaWJlci50YWcgPT09IEhvc3RQb3J0YWw7XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RTaWJsaW5nKGZpYmVyKSB7XG4gIC8vIFdlJ3JlIGdvaW5nIHRvIHNlYXJjaCBmb3J3YXJkIGludG8gdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhIHNpYmxpbmcgaG9zdFxuICAvLyBub2RlLiBVbmZvcnR1bmF0ZWx5LCBpZiBtdWx0aXBsZSBpbnNlcnRpb25zIGFyZSBkb25lIGluIGEgcm93IHdlIGhhdmUgdG9cbiAgLy8gc2VhcmNoIHBhc3QgdGhlbS4gVGhpcyBsZWFkcyB0byBleHBvbmVudGlhbCBzZWFyY2ggZm9yIHRoZSBuZXh0IHNpYmxpbmcuXG4gIC8vIFRPRE86IEZpbmQgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZG8gdGhpcy5cbiAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICBzaWJsaW5nczogd2hpbGUgKHRydWUpIHtcbiAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZywgbGV0J3MgdHJ5IHRoZSBuZXh0IHNpYmxpbmcuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IGlzSG9zdFBhcmVudChub2RlLnJldHVybikpIHtcbiAgICAgICAgLy8gSWYgd2UgcG9wIG91dCBvZiB0aGUgcm9vdCBvciBoaXQgdGhlIHBhcmVudCB0aGUgZmliZXIgd2UgYXJlIHRoZVxuICAgICAgICAvLyBsYXN0IHNpYmxpbmcuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG5cbiAgICB3aGlsZSAobm9kZS50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgbm9kZS50YWcgIT09IEhvc3RUZXh0ICYmIG5vZGUudGFnICE9PSBEZWh5ZHJhdGVkRnJhZ21lbnQpIHtcbiAgICAgIC8vIElmIGl0IGlzIG5vdCBob3N0IG5vZGUgYW5kLCB3ZSBtaWdodCBoYXZlIGEgaG9zdCBub2RlIGluc2lkZSBpdC5cbiAgICAgIC8vIFRyeSB0byBzZWFyY2ggZG93biB1bnRpbCB3ZSBmaW5kIG9uZS5cbiAgICAgIGlmIChub2RlLmZsYWdzICYgUGxhY2VtZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBjaGlsZCwgdHJ5IHRoZSBzaWJsaW5ncyBpbnN0ZWFkLlxuICAgICAgICBjb250aW51ZSBzaWJsaW5ncztcbiAgICAgIH0gLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAvLyBXZSBhbHNvIHNraXAgcG9ydGFscyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoaXMgaG9zdCB0cmVlLlxuXG5cbiAgICAgIGlmIChub2RlLmNoaWxkID09PSBudWxsIHx8IG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgIGNvbnRpbnVlIHNpYmxpbmdzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIH1cbiAgICB9IC8vIENoZWNrIGlmIHRoaXMgaG9zdCBub2RlIGlzIHN0YWJsZSBvciBhYm91dCB0byBiZSBwbGFjZWQuXG5cblxuICAgIGlmICghKG5vZGUuZmxhZ3MgJiBQbGFjZW1lbnQpKSB7XG4gICAgICAvLyBGb3VuZCBpdCFcbiAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UGxhY2VtZW50KGZpbmlzaGVkV29yaykge1xuXG5cbiAgdmFyIHBhcmVudEZpYmVyID0gZ2V0SG9zdFBhcmVudEZpYmVyKGZpbmlzaGVkV29yayk7IC8vIE5vdGU6IHRoZXNlIHR3byB2YXJpYWJsZXMgKm11c3QqIGFsd2F5cyBiZSB1cGRhdGVkIHRvZ2V0aGVyLlxuXG4gIHZhciBwYXJlbnQ7XG4gIHZhciBpc0NvbnRhaW5lcjtcbiAgdmFyIHBhcmVudFN0YXRlTm9kZSA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcblxuICBzd2l0Y2ggKHBhcmVudEZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZTtcbiAgICAgIGlzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgIGlzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICBpc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUtbm8tZmFsbHRocm91Z2hcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGhvc3QgcGFyZW50IGZpYmVyLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG5cbiAgaWYgKHBhcmVudEZpYmVyLmZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgLy8gUmVzZXQgdGhlIHRleHQgY29udGVudCBvZiB0aGUgcGFyZW50IGJlZm9yZSBkb2luZyBhbnkgaW5zZXJ0aW9uc1xuICAgIHJlc2V0VGV4dENvbnRlbnQocGFyZW50KTsgLy8gQ2xlYXIgQ29udGVudFJlc2V0IGZyb20gdGhlIGVmZmVjdCB0YWdcblxuICAgIHBhcmVudEZpYmVyLmZsYWdzICY9IH5Db250ZW50UmVzZXQ7XG4gIH1cblxuICB2YXIgYmVmb3JlID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTsgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG5cbiAgaWYgKGlzQ29udGFpbmVyKSB7XG4gICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihmaW5pc2hlZFdvcmssIGJlZm9yZSwgcGFyZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoZmluaXNoZWRXb3JrLCBiZWZvcmUsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIHZhciBpc0hvc3QgPSB0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBIb3N0VGV4dDtcblxuICBpZiAoaXNIb3N0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICkge1xuICAgIHZhciBzdGF0ZU5vZGUgPSBpc0hvc3QgPyBub2RlLnN0YXRlTm9kZSA6IG5vZGUuc3RhdGVOb2RlLmluc3RhbmNlO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgaW5zZXJ0SW5Db250YWluZXJCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXIocGFyZW50LCBzdGF0ZU5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSB7XG4gICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihjaGlsZCwgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgdmFyIHNpYmxpbmcgPSBjaGlsZC5zaWJsaW5nO1xuXG4gICAgICB3aGlsZSAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKHNpYmxpbmcsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgICAgc2libGluZyA9IHNpYmxpbmcuc2libGluZztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZztcbiAgdmFyIGlzSG9zdCA9IHRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCB0YWcgPT09IEhvc3RUZXh0O1xuXG4gIGlmIChpc0hvc3QgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgKSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IGlzSG9zdCA/IG5vZGUuc3RhdGVOb2RlIDogbm9kZS5zdGF0ZU5vZGUuaW5zdGFuY2U7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICBpbnNlcnRCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoaWxkKHBhcmVudCwgc3RhdGVOb2RlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2Uge1xuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShjaGlsZCwgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgdmFyIHNpYmxpbmcgPSBjaGlsZC5zaWJsaW5nO1xuXG4gICAgICB3aGlsZSAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoc2libGluZywgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgICBzaWJsaW5nID0gc2libGluZy5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGRlbGV0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gIHZhciBub2RlID0gY3VycmVudDsgLy8gRWFjaCBpdGVyYXRpb24sIGN1cnJlbnRQYXJlbnQgaXMgcG9wdWxhdGVkIHdpdGggbm9kZSdzIGhvc3QgcGFyZW50IGlmIG5vdFxuICAvLyBjdXJyZW50UGFyZW50SXNWYWxpZC5cblxuICB2YXIgY3VycmVudFBhcmVudElzVmFsaWQgPSBmYWxzZTsgLy8gTm90ZTogdGhlc2UgdHdvIHZhcmlhYmxlcyAqbXVzdCogYWx3YXlzIGJlIHVwZGF0ZWQgdG9nZXRoZXIuXG5cbiAgdmFyIGN1cnJlbnRQYXJlbnQ7XG4gIHZhciBjdXJyZW50UGFyZW50SXNDb250YWluZXI7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoIWN1cnJlbnRQYXJlbnRJc1ZhbGlkKSB7XG4gICAgICB2YXIgcGFyZW50ID0gbm9kZS5yZXR1cm47XG5cbiAgICAgIGZpbmRQYXJlbnQ6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmICghKHBhcmVudCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICBzd2l0Y2ggKHBhcmVudC50YWcpIHtcbiAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICBjb21taXROZXN0ZWRVbm1vdW50cyhmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBBZnRlciBhbGwgdGhlIGNoaWxkcmVuIGhhdmUgdW5tb3VudGVkLCBpdCBpcyBub3cgc2FmZSB0byByZW1vdmUgdGhlXG4gICAgICAvLyBub2RlIGZyb20gdGhlIHRyZWUuXG5cbiAgICAgIGlmIChjdXJyZW50UGFyZW50SXNDb250YWluZXIpIHtcbiAgICAgICAgcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyKGN1cnJlbnRQYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZUNoaWxkKGN1cnJlbnRQYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gLy8gRG9uJ3QgdmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB3ZSBhbHJlYWR5IHZpc2l0ZWQgdGhlbS5cblxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdoZW4gd2UgZ28gaW50byBhIHBvcnRhbCwgaXQgYmVjb21lcyB0aGUgcGFyZW50IHRvIHJlbW92ZSBmcm9tLlxuICAgICAgICAvLyBXZSB3aWxsIHJlYXNzaWduIGl0IGJhY2sgd2hlbiB3ZSBwb3AgdGhlIHBvcnRhbCBvbiB0aGUgd2F5IHVwLlxuICAgICAgICBjdXJyZW50UGFyZW50ID0gbm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSBwb3J0YWxzIG1pZ2h0IGNvbnRhaW4gaG9zdCBjb21wb25lbnRzLlxuXG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21taXRVbm1vdW50KGZpbmlzaGVkUm9vdCwgbm9kZSk7IC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2Ugd2UgbWF5IGZpbmQgbW9yZSBob3N0IGNvbXBvbmVudHMgYmVsb3cuXG5cbiAgICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuXG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgLy8gV2hlbiB3ZSBnbyBvdXQgb2YgdGhlIHBvcnRhbCwgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBwYXJlbnQuXG4gICAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGtlZXAgYSBzdGFjayBvZiB0aGVtLCB3ZSB3aWxsIHNlYXJjaCBmb3IgaXQuXG4gICAgICAgIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RGVsZXRpb24oZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIHtcbiAgICAvLyBSZWN1cnNpdmVseSBkZWxldGUgYWxsIGhvc3Qgbm9kZXMgZnJvbSB0aGUgcGFyZW50LlxuICAgIC8vIERldGFjaCByZWZzIGFuZCBjYWxsIGNvbXBvbmVudFdpbGxVbm1vdW50KCkgb24gdGhlIHdob2xlIHN1YnRyZWUuXG4gICAgdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCk7XG4gIH1cblxuICB2YXIgYWx0ZXJuYXRlID0gY3VycmVudC5hbHRlcm5hdGU7XG4gIGRldGFjaEZpYmVyTXV0YXRpb24oY3VycmVudCk7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGRldGFjaEZpYmVyTXV0YXRpb24oYWx0ZXJuYXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRXb3JrKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuXG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgLy8gTGF5b3V0IGVmZmVjdHMgYXJlIGRlc3Ryb3llZCBkdXJpbmcgdGhlIG11dGF0aW9uIHBoYXNlIHNvIHRoYXQgYWxsXG4gICAgICAgIC8vIGRlc3Ryb3kgZnVuY3Rpb25zIGZvciBhbGwgZmliZXJzIGFyZSBjYWxsZWQgYmVmb3JlIGFueSBjcmVhdGUgZnVuY3Rpb25zLlxuICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgICAvLyBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudCBkdXJpbmcgdGhlIHNhbWUgY29tbWl0LlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KExheW91dCB8IEhhc0VmZmVjdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIENvbW1pdCB0aGUgd29yayBwcmVwYXJlZCBlYXJsaWVyLlxuICAgICAgICAgIHZhciBuZXdQcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzOyAvLyBGb3IgaHlkcmF0aW9uIHdlIHJldXNlIHRoZSB1cGRhdGUgcGF0aCBidXQgd2UgdHJlYXQgdGhlIG9sZFByb3BzXG4gICAgICAgICAgLy8gYXMgdGhlIG5ld1Byb3BzLiBUaGUgdXBkYXRlUGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIHJlYWwgY2hhbmdlIGluXG4gICAgICAgICAgLy8gdGhpcyBjYXNlLlxuXG4gICAgICAgICAgdmFyIG9sZFByb3BzID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG5ld1Byb3BzO1xuICAgICAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGU7IC8vIFRPRE86IFR5cGUgdGhlIHVwZGF0ZVF1ZXVlIHRvIGJlIHNwZWNpZmljIHRvIGhvc3QgY29tcG9uZW50cy5cblxuICAgICAgICAgIHZhciB1cGRhdGVQYXlsb2FkID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgIGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAodXBkYXRlUGF5bG9hZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29tbWl0VXBkYXRlKGluc3RhbmNlLCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIGlmICghKGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyBzaG91bGQgaGF2ZSBhIHRleHQgbm9kZSBpbml0aWFsaXplZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ZXh0SW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICB2YXIgbmV3VGV4dCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzOyAvLyBGb3IgaHlkcmF0aW9uIHdlIHJldXNlIHRoZSB1cGRhdGUgcGF0aCBidXQgd2UgdHJlYXQgdGhlIG9sZFByb3BzXG4gICAgICAgIC8vIGFzIHRoZSBuZXdQcm9wcy4gVGhlIHVwZGF0ZVBheWxvYWQgd2lsbCBjb250YWluIHRoZSByZWFsIGNoYW5nZSBpblxuICAgICAgICAvLyB0aGlzIGNhc2UuXG5cbiAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbmV3VGV4dDtcbiAgICAgICAgY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9yb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChfcm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgICAvLyBXZSd2ZSBqdXN0IGh5ZHJhdGVkLiBObyBuZWVkIHRvIGh5ZHJhdGUgYWdhaW4uXG4gICAgICAgICAgICBfcm9vdC5oeWRyYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBjb21taXRIeWRyYXRlZENvbnRhaW5lcihfcm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBjb21taXRTdXNwZW5zZUNvbXBvbmVudChmaW5pc2hlZFdvcmspO1xuICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgdmFyIGlzSGlkZGVuID0gbmV3U3RhdGUgIT09IG51bGw7XG4gICAgICAgIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKGZpbmlzaGVkV29yaywgaXNIaWRkZW4pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0U3VzcGVuc2VDb21wb25lbnQoZmluaXNoZWRXb3JrKSB7XG4gIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXdTdGF0ZSAhPT0gbnVsbCkge1xuICAgIG1hcmtDb21taXRUaW1lT2ZGYWxsYmFjaygpO1xuXG4gICAge1xuICAgICAgLy8gSGlkZSB0aGUgT2Zmc2NyZWVuIGNvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBwcmltYXJ5IGNoaWxkcmVuLiBUT0RPOlxuICAgICAgLy8gSWRlYWxseSwgdGhpcyBlZmZlY3Qgd291bGQgaGF2ZSBiZWVuIHNjaGVkdWxlZCBvbiB0aGUgT2Zmc2NyZWVuIGZpYmVyXG4gICAgICAvLyBpdHNlbGYuIFRoYXQncyBob3cgdW5oaWRpbmcgd29ya3M6IHRoZSBPZmZzY3JlZW4gY29tcG9uZW50IHNjaGVkdWxlcyBhblxuICAgICAgLy8gZWZmZWN0IG9uIGl0c2VsZi4gSG93ZXZlciwgaW4gdGhpcyBjYXNlLCB0aGUgY29tcG9uZW50IGRpZG4ndCBjb21wbGV0ZSxcbiAgICAgIC8vIHNvIHRoZSBmaWJlciB3YXMgbmV2ZXIgYWRkZWQgdG8gdGhlIGVmZmVjdCBsaXN0IGluIHRoZSBub3JtYWwgcGF0aC4gV2VcbiAgICAgIC8vIGNvdWxkIGhhdmUgYXBwZW5kZWQgaXQgdG8gdGhlIGVmZmVjdCBsaXN0IGluIHRoZSBTdXNwZW5zZSBjb21wb25lbnQnc1xuICAgICAgLy8gc2Vjb25kIHBhc3MsIGJ1dCBkb2luZyBpdCB0aGlzIHdheSBpcyBsZXNzIGNvbXBsaWNhdGVkLiBUaGlzIHdvdWxkIGJlXG4gICAgICAvLyBzaW1wbGVyIGlmIHdlIGdvdCByaWQgb2YgdGhlIGVmZmVjdCBsaXN0IGFuZCB0cmF2ZXJzZWQgdGhlIHRyZWUsIGxpa2VcbiAgICAgIC8vIHdlJ3JlIHBsYW5uaW5nIHRvIGRvLlxuICAgICAgdmFyIHByaW1hcnlDaGlsZFBhcmVudCA9IGZpbmlzaGVkV29yay5jaGlsZDtcbiAgICAgIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKHByaW1hcnlDaGlsZFBhcmVudCwgdHJ1ZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSB7XG5cbiAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5ld1N0YXRlID09PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBwcmV2U3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICBpZiAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaykge1xuICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGp1c3QgdGltZWQgb3V0LCB0aGVuIGl0IHdpbGwgaGF2ZSBhIHNldCBvZiB3YWtlYWJsZXMuXG4gIC8vIEZvciBlYWNoIHdha2VhYmxlLCBhdHRhY2ggYSBsaXN0ZW5lciBzbyB0aGF0IHdoZW4gaXQgcmVzb2x2ZXMsIFJlYWN0XG4gIC8vIGF0dGVtcHRzIHRvIHJlLXJlbmRlciB0aGUgYm91bmRhcnkgaW4gdGhlIHByaW1hcnkgKHByZS10aW1lb3V0KSBzdGF0ZS5cbiAgdmFyIHdha2VhYmxlcyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICBpZiAod2FrZWFibGVzICE9PSBudWxsKSB7XG4gICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB2YXIgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICBpZiAocmV0cnlDYWNoZSA9PT0gbnVsbCkge1xuICAgICAgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgPSBuZXcgUG9zc2libHlXZWFrU2V0KCk7XG4gICAgfVxuXG4gICAgd2FrZWFibGVzLmZvckVhY2goZnVuY3Rpb24gKHdha2VhYmxlKSB7XG4gICAgICAvLyBNZW1vaXplIHVzaW5nIHRoZSBib3VuZGFyeSBmaWJlciB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG4gICAgICB2YXIgcmV0cnkgPSByZXNvbHZlUmV0cnlXYWtlYWJsZS5iaW5kKG51bGwsIGZpbmlzaGVkV29yaywgd2FrZWFibGUpO1xuXG4gICAgICBpZiAoIXJldHJ5Q2FjaGUuaGFzKHdha2VhYmxlKSkge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdha2VhYmxlLl9fcmVhY3REb05vdFRyYWNlSW50ZXJhY3Rpb25zICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXRyeSA9IHRyYWNpbmcudW5zdGFibGVfd3JhcChyZXRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0cnlDYWNoZS5hZGQod2FrZWFibGUpO1xuICAgICAgICB3YWtlYWJsZS50aGVuKHJldHJ5LCByZXRyeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0gLy8gVGhpcyBmdW5jdGlvbiBkZXRlY3RzIHdoZW4gYSBTdXNwZW5zZSBib3VuZGFyeSBnb2VzIGZyb20gdmlzaWJsZSB0byBoaWRkZW4uXG4vLyBJdCByZXR1cm5zIGZhbHNlIGlmIHRoZSBib3VuZGFyeSBpcyBhbHJlYWR5IGhpZGRlbi5cbi8vIFRPRE86IFVzZSBhbiBlZmZlY3QgdGFnLlxuXG5cbmZ1bmN0aW9uIGlzU3VzcGVuc2VCb3VuZGFyeUJlaW5nSGlkZGVuKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBvbGRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChvbGRTdGF0ZSA9PT0gbnVsbCB8fCBvbGRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiBuZXdTdGF0ZSAhPT0gbnVsbCAmJiBuZXdTdGF0ZS5kZWh5ZHJhdGVkID09PSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY29tbWl0UmVzZXRUZXh0Q29udGVudChjdXJyZW50KSB7XG5cbiAgcmVzZXRUZXh0Q29udGVudChjdXJyZW50LnN0YXRlTm9kZSk7XG59XG5cbnZhciBDT01QT05FTlRfVFlQRSA9IDA7XG52YXIgSEFTX1BTRVVET19DTEFTU19UWVBFID0gMTtcbnZhciBST0xFX1RZUEUgPSAyO1xudmFyIFRFU1RfTkFNRV9UWVBFID0gMztcbnZhciBURVhUX1RZUEUgPSA0O1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IkMSA9IFN5bWJvbC5mb3I7XG4gIENPTVBPTkVOVF9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLmNvbXBvbmVudCcpO1xuICBIQVNfUFNFVURPX0NMQVNTX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IuaGFzX3BzZXVkb19jbGFzcycpO1xuICBST0xFX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3Iucm9sZScpO1xuICBURVNUX05BTUVfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci50ZXN0X2lkJyk7XG4gIFRFWFRfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci50ZXh0Jyk7XG59XG52YXIgY29tbWl0SG9va3MgPSBbXTtcbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdCQxKCkge1xuICB7XG4gICAgY29tbWl0SG9va3MuZm9yRWFjaChmdW5jdGlvbiAoY29tbWl0SG9vaykge1xuICAgICAgcmV0dXJuIGNvbW1pdEhvb2soKTtcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIFJlYWN0Q3VycmVudE93bmVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcixcbiAgICBJc1NvbWVSZW5kZXJlckFjdGluZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLklzU29tZVJlbmRlcmVyQWN0aW5nO1xudmFyIE5vQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAqL1xuMDtcbnZhciBCYXRjaGVkQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICovXG4xO1xudmFyIEV2ZW50Q29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgRGlzY3JldGVFdmVudENvbnRleHQgPVxuLyogICAgICAgICAqL1xuNDtcbnZhciBMZWdhY3lVbmJhdGNoZWRDb250ZXh0ID1cbi8qICAgICAgICovXG44O1xudmFyIFJlbmRlckNvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgKi9cbjE2O1xudmFyIENvbW1pdENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIFJldHJ5QWZ0ZXJFcnJvciA9XG4vKiAgICAgICAqL1xuNjQ7XG52YXIgUm9vdEluY29tcGxldGUgPSAwO1xudmFyIFJvb3RGYXRhbEVycm9yZWQgPSAxO1xudmFyIFJvb3RFcnJvcmVkID0gMjtcbnZhciBSb290U3VzcGVuZGVkID0gMztcbnZhciBSb290U3VzcGVuZGVkV2l0aERlbGF5ID0gNDtcbnZhciBSb290Q29tcGxldGVkID0gNTsgLy8gRGVzY3JpYmVzIHdoZXJlIHdlIGFyZSBpbiB0aGUgUmVhY3QgZXhlY3V0aW9uIHN0YWNrXG5cbnZhciBleGVjdXRpb25Db250ZXh0ID0gTm9Db250ZXh0OyAvLyBUaGUgcm9vdCB3ZSdyZSB3b3JraW5nIG9uXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsOyAvLyBUaGUgZmliZXIgd2UncmUgd29ya2luZyBvblxuXG52YXIgd29ya0luUHJvZ3Jlc3MgPSBudWxsOyAvLyBUaGUgbGFuZXMgd2UncmUgcmVuZGVyaW5nXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFN0YWNrIHRoYXQgYWxsb3dzIGNvbXBvbmVudHMgdG8gY2hhbmdlIHRoZSByZW5kZXIgbGFuZXMgZm9yIGl0cyBzdWJ0cmVlXG4vLyBUaGlzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgd29ya2luZyBvbiBhdCB0aGUgcm9vdC4gVGhlIG9ubHlcbi8vIGNhc2Ugd2hlcmUgaXQncyBkaWZmZXJlbnQgZnJvbSBgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNgIGlzIHdoZW4gd2Vcbi8vIGVudGVyIGEgc3VidHJlZSB0aGF0IGlzIGhpZGRlbiBhbmQgbmVlZHMgdG8gYmUgdW5oaWRkZW46IFN1c3BlbnNlIGFuZFxuLy8gT2Zmc2NyZWVuIGNvbXBvbmVudC5cbi8vXG4vLyBNb3N0IHRoaW5ncyBpbiB0aGUgd29yayBsb29wIHNob3VsZCBkZWFsIHdpdGggd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMuXG4vLyBNb3N0IHRoaW5ncyBpbiBiZWdpbi9jb21wbGV0ZSBwaGFzZXMgc2hvdWxkIGRlYWwgd2l0aCBzdWJ0cmVlUmVuZGVyTGFuZXMuXG5cbnZhciBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xudmFyIHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOb0xhbmVzKTsgLy8gV2hldGhlciB0byByb290IGNvbXBsZXRlZCwgZXJyb3JlZCwgc3VzcGVuZGVkLCBldGMuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluY29tcGxldGU7IC8vIEEgZmF0YWwgZXJyb3IsIGlmIG9uZSBpcyB0aHJvd25cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsOyAvLyBcIkluY2x1ZGVkXCIgbGFuZXMgcmVmZXIgdG8gbGFuZXMgdGhhdCB3ZXJlIHdvcmtlZCBvbiBkdXJpbmcgdGhpcyByZW5kZXIuIEl0J3Ncbi8vIHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIGByZW5kZXJMYW5lc2AgYmVjYXVzZSBgcmVuZGVyTGFuZXNgIGNhbiBjaGFuZ2UgYXMgeW91XG4vLyBlbnRlciBhbmQgZXhpdCBhbiBPZmZzY3JlZW4gdHJlZS4gVGhpcyB2YWx1ZSBpcyB0aGUgY29tYmluYXRpb24gb2YgYWxsIHJlbmRlclxuLy8gbGFuZXMgZm9yIHRoZSBlbnRpcmUgcmVuZGVyIHBoYXNlLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrIGxlZnQgb3ZlciBieSBjb21wb25lbnRzIHRoYXQgd2VyZSB2aXNpdGVkIGR1cmluZyB0aGlzIHJlbmRlci4gT25seVxuLy8gaW5jbHVkZXMgdW5wcm9jZXNzZWQgdXBkYXRlcywgbm90IHdvcmsgaW4gYmFpbGVkIG91dCBjaGlsZHJlbi5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IE5vTGFuZXM7IC8vIExhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIChpbiBhbiBpbnRlcmxlYXZlZCBldmVudCkgZHVyaW5nIHRoaXMgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gTm9MYW5lczsgLy8gTGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCAoaW4gYW4gaW50ZXJsZWF2ZWQgZXZlbnQpIGR1cmluZyB0aGlzIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gTm9MYW5lcztcbnZhciBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCA9IG51bGw7IC8vIFRoZSBtb3N0IHJlY2VudCB0aW1lIHdlIGNvbW1pdHRlZCBhIGZhbGxiYWNrLiBUaGlzIGxldHMgdXMgZW5zdXJlIGEgdHJhaW5cbi8vIG1vZGVsIHdoZXJlIHdlIGRvbid0IGNvbW1pdCBuZXcgbG9hZGluZyBzdGF0ZXMgaW4gdG9vIHF1aWNrIHN1Y2Nlc3Npb24uXG5cbnZhciBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gMDtcbnZhciBGQUxMQkFDS19USFJPVFRMRV9NUyA9IDUwMDsgLy8gVGhlIGFic29sdXRlIHRpbWUgZm9yIHdoZW4gd2Ugc2hvdWxkIHN0YXJ0IGdpdmluZyB1cCBvbiByZW5kZXJpbmdcbi8vIG1vcmUgYW5kIHByZWZlciBDUFUgc3VzcGVuc2UgaGV1cmlzdGljcyBpbnN0ZWFkLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IEluZmluaXR5OyAvLyBIb3cgbG9uZyBhIHJlbmRlciBpcyBzdXBwb3NlZCB0byB0YWtlIGJlZm9yZSB3ZSBzdGFydCBmb2xsb3dpbmcgQ1BVXG4vLyBzdXNwZW5zZSBoZXVyaXN0aWNzIGFuZCBvcHQgb3V0IG9mIHJlbmRlcmluZyBtb3JlIGNvbnRlbnQuXG5cbnZhciBSRU5ERVJfVElNRU9VVF9NUyA9IDUwMDtcblxuZnVuY3Rpb24gcmVzZXRSZW5kZXJUaW1lcigpIHtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IG5vdygpICsgUkVOREVSX1RJTUVPVVRfTVM7XG59XG5cbmZ1bmN0aW9uIGdldFJlbmRlclRhcmdldFRpbWUoKSB7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lO1xufVxudmFyIG5leHRFZmZlY3QgPSBudWxsO1xudmFyIGhhc1VuY2F1Z2h0RXJyb3IgPSBmYWxzZTtcbnZhciBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBudWxsO1xudmFyIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbnZhciByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xudmFyIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbnZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IE5vUHJpb3JpdHkkMTtcbnZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IE5vTGFuZXM7XG52YXIgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50ID0gW107XG52YXIgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQgPSBbXTtcbnZhciByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID0gbnVsbDsgLy8gVXNlIHRoZXNlIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiBuZXN0ZWQgdXBkYXRlc1xuXG52YXIgTkVTVEVEX1VQREFURV9MSU1JVCA9IDUwO1xudmFyIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbnZhciByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsO1xudmFyIE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCA9IDUwO1xudmFyIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7IC8vIE1hcmtzIHRoZSBuZWVkIHRvIHJlc2NoZWR1bGUgcGVuZGluZyBpbnRlcmFjdGlvbnMgYXQgdGhlc2UgbGFuZXNcbi8vIGR1cmluZyB0aGUgY29tbWl0IHBoYXNlLiBUaGlzIGVuYWJsZXMgdGhlbSB0byBiZSB0cmFjZWQgYWNyb3NzIGNvbXBvbmVudHNcbi8vIHRoYXQgc3Bhd24gbmV3IHdvcmsgZHVyaW5nIHJlbmRlci4gRS5nLiBoaWRkZW4gYm91bmRhcmllcywgc3VzcGVuZGVkIFNTUlxuLy8gaHlkcmF0aW9uIG9yIFN1c3BlbnNlTGlzdC5cbi8vIFRPRE86IENhbiB1c2UgYSBiaXRtYXNrIGluc3RlYWQgb2YgYW4gYXJyYXlcblxudmFyIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDsgLy8gSWYgdHdvIHVwZGF0ZXMgYXJlIHNjaGVkdWxlZCB3aXRoaW4gdGhlIHNhbWUgZXZlbnQsIHdlIHNob3VsZCB0cmVhdCB0aGVpclxuLy8gZXZlbnQgdGltZXMgYXMgc2ltdWx0YW5lb3VzLCBldmVuIGlmIHRoZSBhY3R1YWwgY2xvY2sgdGltZSBoYXMgYWR2YW5jZWRcbi8vIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbC5cblxudmFyIGN1cnJlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcbnZhciBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IE5vTGFuZXM7XG52YXIgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzID0gTm9MYW5lczsgLy8gRGV2IG9ubHkgZmxhZyB0aGF0IHRyYWNrcyBpZiBwYXNzaXZlIGVmZmVjdHMgYXJlIGN1cnJlbnRseSBiZWluZyBmbHVzaGVkLlxuLy8gV2Ugd2FybiBhYm91dCBzdGF0ZSB1cGRhdGVzIGZvciB1bm1vdW50ZWQgY29tcG9uZW50cyBkaWZmZXJlbnRseSBpbiB0aGlzIGNhc2UuXG5cbnZhciBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbnZhciBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBudWxsO1xudmFyIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCkge1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290O1xufVxuZnVuY3Rpb24gcmVxdWVzdEV2ZW50VGltZSgpIHtcbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIC8vIFdlJ3JlIGluc2lkZSBSZWFjdCwgc28gaXQncyBmaW5lIHRvIHJlYWQgdGhlIGFjdHVhbCB0aW1lLlxuICAgIHJldHVybiBub3coKTtcbiAgfSAvLyBXZSdyZSBub3QgaW5zaWRlIFJlYWN0LCBzbyB3ZSBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIGJyb3dzZXIgZXZlbnQuXG5cblxuICBpZiAoY3VycmVudEV2ZW50VGltZSAhPT0gTm9UaW1lc3RhbXApIHtcbiAgICAvLyBVc2UgdGhlIHNhbWUgc3RhcnQgdGltZSBmb3IgYWxsIHVwZGF0ZXMgdW50aWwgd2UgZW50ZXIgUmVhY3QgYWdhaW4uXG4gICAgcmV0dXJuIGN1cnJlbnRFdmVudFRpbWU7XG4gIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlIHNpbmNlIFJlYWN0IHlpZWxkZWQuIENvbXB1dGUgYSBuZXcgc3RhcnQgdGltZS5cblxuXG4gIGN1cnJlbnRFdmVudFRpbWUgPSBub3coKTtcbiAgcmV0dXJuIGN1cnJlbnRFdmVudFRpbWU7XG59XG5mdW5jdGlvbiByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcikge1xuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH0gZWxzZSBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpID09PSBJbW1lZGlhdGVQcmlvcml0eSQxID8gU3luY0xhbmUgOiBTeW5jQmF0Y2hlZExhbmU7XG4gIH0gLy8gVGhlIGFsZ29yaXRobSBmb3IgYXNzaWduaW5nIGFuIHVwZGF0ZSB0byBhIGxhbmUgc2hvdWxkIGJlIHN0YWJsZSBmb3IgYWxsXG4gIC8vIHVwZGF0ZXMgYXQgdGhlIHNhbWUgcHJpb3JpdHkgd2l0aGluIHRoZSBzYW1lIGV2ZW50LiBUbyBkbyB0aGlzLCB0aGUgaW5wdXRzXG4gIC8vIHRvIHRoZSBhbGdvcml0aG0gbXVzdCBiZSB0aGUgc2FtZS4gRm9yIGV4YW1wbGUsIHdlIHVzZSB0aGUgYHJlbmRlckxhbmVzYFxuICAvLyB0byBhdm9pZCBjaG9vc2luZyBhIGxhbmUgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgcmVuZGVyaW5nLlxuICAvL1xuICAvLyBIb3dldmVyLCB0aGUgXCJpbmNsdWRlZFwiIGxhbmVzIGNvdWxkIGJlIG11dGF0ZWQgaW4gYmV0d2VlbiB1cGRhdGVzIGluIHRoZVxuICAvLyBzYW1lIGV2ZW50LCBsaWtlIGlmIHlvdSBwZXJmb3JtIGFuIHVwZGF0ZSBpbnNpZGUgYGZsdXNoU3luY2AuIE9yIGFueSBvdGhlclxuICAvLyBjb2RlIHBhdGggdGhhdCBtaWdodCBjYWxsIGBwcmVwYXJlRnJlc2hTdGFja2AuXG4gIC8vXG4gIC8vIFRoZSB0cmljayB3ZSB1c2UgaXMgdG8gY2FjaGUgdGhlIGZpcnN0IG9mIGVhY2ggb2YgdGhlc2UgaW5wdXRzIHdpdGhpbiBhblxuICAvLyBldmVudC4gVGhlbiByZXNldCB0aGUgY2FjaGVkIHZhbHVlcyBvbmNlIHdlIGNhbiBiZSBzdXJlIHRoZSBldmVudCBpcyBvdmVyLlxuICAvLyBPdXIgaGV1cmlzdGljIGZvciB0aGF0IGlzIHdoZW5ldmVyIHdlIGVudGVyIGEgY29uY3VycmVudCB3b3JrIGxvb3AuXG4gIC8vXG4gIC8vIFdlJ2xsIGRvIHRoZSBzYW1lIGZvciBgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzYCBiZWxvdy5cblxuXG4gIGlmIChjdXJyZW50RXZlbnRXaXBMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIGN1cnJlbnRFdmVudFdpcExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcztcbiAgfVxuXG4gIHZhciBpc1RyYW5zaXRpb24gPSByZXF1ZXN0Q3VycmVudFRyYW5zaXRpb24oKSAhPT0gTm9UcmFuc2l0aW9uO1xuXG4gIGlmIChpc1RyYW5zaXRpb24pIHtcbiAgICBpZiAoY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgPSBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCAhPT0gbnVsbCA/IG1vc3RSZWNlbnRseVVwZGF0ZWRSb290LnBlbmRpbmdMYW5lcyA6IE5vTGFuZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmRUcmFuc2l0aW9uTGFuZShjdXJyZW50RXZlbnRXaXBMYW5lcywgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzKTtcbiAgfSAvLyBUT0RPOiBSZW1vdmUgdGhpcyBkZXBlbmRlbmN5IG9uIHRoZSBTY2hlZHVsZXIgcHJpb3JpdHkuXG4gIC8vIFRvIGRvIHRoYXQsIHdlJ3JlIHJlcGxhY2luZyBpdCB3aXRoIGFuIHVwZGF0ZSBsYW5lIHByaW9yaXR5LlxuXG5cbiAgdmFyIHNjaGVkdWxlclByaW9yaXR5ID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTsgLy8gVGhlIG9sZCBiZWhhdmlvciB3YXMgdXNpbmcgdGhlIHByaW9yaXR5IGxldmVsIG9mIHRoZSBTY2hlZHVsZXIuXG4gIC8vIFRoaXMgY291cGxlcyBSZWFjdCB0byB0aGUgU2NoZWR1bGVyIGludGVybmFscywgc28gd2UncmUgcmVwbGFjaW5nIGl0XG4gIC8vIHdpdGggdGhlIGN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkgYWJvdmUuIEFzIGFuIGV4YW1wbGUgb2YgaG93IHRoaXNcbiAgLy8gY291bGQgYmUgcHJvYmxlbWF0aWMsIGlmIHdlJ3JlIG5vdCBpbnNpZGUgYFNjaGVkdWxlci5ydW5XaXRoUHJpb3JpdHlgLFxuICAvLyB0aGVuIHdlJ2xsIGdldCB0aGUgcHJpb3JpdHkgb2YgdGhlIGN1cnJlbnQgcnVubmluZyBTY2hlZHVsZXIgdGFzayxcbiAgLy8gd2hpY2ggaXMgcHJvYmFibHkgbm90IHdoYXQgd2Ugd2FudC5cblxuICB2YXIgbGFuZTtcblxuICBpZiAoIC8vIFRPRE86IFRlbXBvcmFyeS4gV2UncmUgcmVtb3ZpbmcgdGhlIGNvbmNlcHQgb2YgZGlzY3JldGUgdXBkYXRlcy5cbiAgKGV4ZWN1dGlvbkNvbnRleHQgJiBEaXNjcmV0ZUV2ZW50Q29udGV4dCkgIT09IE5vQ29udGV4dCAmJiBzY2hlZHVsZXJQcmlvcml0eSA9PT0gVXNlckJsb2NraW5nUHJpb3JpdHkkMikge1xuICAgIGxhbmUgPSBmaW5kVXBkYXRlTGFuZShJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5LCBjdXJyZW50RXZlbnRXaXBMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVkdWxlckxhbmVQcmlvcml0eSA9IHNjaGVkdWxlclByaW9yaXR5VG9MYW5lUHJpb3JpdHkoc2NoZWR1bGVyUHJpb3JpdHkpO1xuXG4gICAgbGFuZSA9IGZpbmRVcGRhdGVMYW5lKHNjaGVkdWxlckxhbmVQcmlvcml0eSwgY3VycmVudEV2ZW50V2lwTGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RSZXRyeUxhbmUoZmliZXIpIHtcbiAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgYHJlcXVlc3RVcGRhdGVMYW5lYCBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIFN1c3BlbnNlXG4gIC8vIFwicmV0cmllc1wiIFx1MjAxNCBhIHNwZWNpYWwgdXBkYXRlIHRoYXQgYXR0ZW1wdHMgdG8gZmxpcCBhIFN1c3BlbnNlIGJvdW5kYXJ5XG4gIC8vIGZyb20gaXRzIHBsYWNlaG9sZGVyIHN0YXRlIHRvIGl0cyBwcmltYXJ5L3Jlc29sdmVkIHN0YXRlLlxuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH0gZWxzZSBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpID09PSBJbW1lZGlhdGVQcmlvcml0eSQxID8gU3luY0xhbmUgOiBTeW5jQmF0Y2hlZExhbmU7XG4gIH0gLy8gU2VlIGByZXF1ZXN0VXBkYXRlTGFuZWAgZm9yIGV4cGxhbmF0aW9uIG9mIGBjdXJyZW50RXZlbnRXaXBMYW5lc2BcblxuXG4gIGlmIChjdXJyZW50RXZlbnRXaXBMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIGN1cnJlbnRFdmVudFdpcExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcztcbiAgfVxuXG4gIHJldHVybiBmaW5kUmV0cnlMYW5lKGN1cnJlbnRFdmVudFdpcExhbmVzKTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpIHtcbiAgY2hlY2tGb3JOZXN0ZWRVcGRhdGVzKCk7XG4gIHdhcm5BYm91dFJlbmRlclBoYXNlVXBkYXRlc0luREVWKGZpYmVyKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgbGFuZSk7XG5cbiAgaWYgKHJvb3QgPT09IG51bGwpIHtcbiAgICB3YXJuQWJvdXRVcGRhdGVPblVubW91bnRlZEZpYmVySW5ERVYoZmliZXIpO1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE1hcmsgdGhhdCB0aGUgcm9vdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS5cblxuXG4gIG1hcmtSb290VXBkYXRlZChyb290LCBsYW5lLCBldmVudFRpbWUpO1xuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpIHtcbiAgICAvLyBSZWNlaXZlZCBhbiB1cGRhdGUgdG8gYSB0cmVlIHRoYXQncyBpbiB0aGUgbWlkZGxlIG9mIHJlbmRlcmluZy4gTWFya1xuICAgIC8vIHRoYXQgdGhlcmUgd2FzIGFuIGludGVybGVhdmVkIHVwZGF0ZSB3b3JrIG9uIHRoaXMgcm9vdC4gVW5sZXNzIHRoZVxuICAgIC8vIGBkZWZlclJlbmRlclBoYXNlVXBkYXRlVG9OZXh0QmF0Y2hgIGZsYWcgaXMgb2ZmIGFuZCB0aGlzIGlzIGEgcmVuZGVyXG4gICAgLy8gcGhhc2UgdXBkYXRlLiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHRyZWF0IHJlbmRlciBwaGFzZSB1cGRhdGVzIGFzIGlmXG4gICAgLy8gdGhleSB3ZXJlIGludGVybGVhdmVkLCBmb3IgYmFja3dhcmRzIGNvbXBhdCByZWFzb25zLlxuICAgIHtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzLCBsYW5lKTtcbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSkge1xuICAgICAgLy8gVGhlIHJvb3QgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB3aGljaCBtZWFucyB0aGlzIHJlbmRlclxuICAgICAgLy8gZGVmaW5pdGVseSB3b24ndCBmaW5pc2guIFNpbmNlIHdlIGhhdmUgYSBuZXcgdXBkYXRlLCBsZXQncyBtYXJrIGl0IGFzXG4gICAgICAvLyBzdXNwZW5kZWQgbm93LCByaWdodCBiZWZvcmUgbWFya2luZyB0aGUgaW5jb21pbmcgdXBkYXRlLiBUaGlzIGhhcyB0aGVcbiAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIGFuZCBzd2l0Y2hpbmcgdG8gdGhlIHVwZGF0ZS5cbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3Qgb3ZlcnJpZGUgcGluZ3MgdGhhdCBoYXBwZW4gd2hpbGUgd2UndmVcbiAgICAgIC8vIGFscmVhZHkgc3RhcnRlZCByZW5kZXJpbmcuXG4gICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogcmVxdWVzdFVwZGF0ZUxhbmVQcmlvcml0eSBhbHNvIHJlYWRzIHRoZSBwcmlvcml0eS4gUGFzcyB0aGVcbiAgLy8gcHJpb3JpdHkgYXMgYW4gYXJndW1lbnQgdG8gdGhhdCBmdW5jdGlvbiBhbmQgdGhpcyBvbmUuXG5cblxuICB2YXIgcHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG5cbiAgaWYgKGxhbmUgPT09IFN5bmNMYW5lKSB7XG4gICAgaWYgKCAvLyBDaGVjayBpZiB3ZSdyZSBpbnNpZGUgdW5iYXRjaGVkVXBkYXRlc1xuICAgIChleGVjdXRpb25Db250ZXh0ICYgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAvLyBDaGVjayBpZiB3ZSdyZSBub3QgYWxyZWFkeSByZW5kZXJpbmdcbiAgICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHBlbmRpbmcgaW50ZXJhY3Rpb25zIG9uIHRoZSByb290IHRvIGF2b2lkIGxvc2luZyB0cmFjZWQgaW50ZXJhY3Rpb24gZGF0YS5cbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKTsgLy8gVGhpcyBpcyBhIGxlZ2FjeSBlZGdlIGNhc2UuIFRoZSBpbml0aWFsIG1vdW50IG9mIGEgUmVhY3RET00ucmVuZGVyLWVkXG4gICAgICAvLyByb290IGluc2lkZSBvZiBiYXRjaGVkVXBkYXRlcyBzaG91bGQgYmUgc3luY2hyb25vdXMsIGJ1dCBsYXlvdXQgdXBkYXRlc1xuICAgICAgLy8gc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIGJhdGNoLlxuXG4gICAgICBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpO1xuXG4gICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAgIC8vIEZsdXNoIHRoZSBzeW5jaHJvbm91cyB3b3JrIG5vdywgdW5sZXNzIHdlJ3JlIGFscmVhZHkgd29ya2luZyBvciBpbnNpZGVcbiAgICAgICAgLy8gYSBiYXRjaC4gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGluc2lkZSBzY2hlZHVsZVVwZGF0ZU9uRmliZXIgaW5zdGVhZCBvZlxuICAgICAgICAvLyBzY2hlZHVsZUNhbGxiYWNrRm9yRmliZXIgdG8gcHJlc2VydmUgdGhlIGFiaWxpdHkgdG8gc2NoZWR1bGUgYSBjYWxsYmFja1xuICAgICAgICAvLyB3aXRob3V0IGltbWVkaWF0ZWx5IGZsdXNoaW5nIGl0LiBXZSBvbmx5IGRvIHRoaXMgZm9yIHVzZXItaW5pdGlhdGVkXG4gICAgICAgIC8vIHVwZGF0ZXMsIHRvIHByZXNlcnZlIGhpc3RvcmljYWwgYmVoYXZpb3Igb2YgbGVnYWN5IG1vZGUuXG4gICAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBTY2hlZHVsZSBhIGRpc2NyZXRlIHVwZGF0ZSBidXQgb25seSBpZiBpdCdzIG5vdCBTeW5jLlxuICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIERpc2NyZXRlRXZlbnRDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmICggLy8gT25seSB1cGRhdGVzIGF0IHVzZXItYmxvY2tpbmcgcHJpb3JpdHkgb3IgZ3JlYXRlciBhcmUgY29uc2lkZXJlZFxuICAgIC8vIGRpc2NyZXRlLCBldmVuIGluc2lkZSBhIGRpc2NyZXRlIGV2ZW50LlxuICAgIHByaW9yaXR5TGV2ZWwgPT09IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgfHwgcHJpb3JpdHlMZXZlbCA9PT0gSW1tZWRpYXRlUHJpb3JpdHkkMSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIHJlc3VsdCBvZiBhIGRpc2NyZXRlIGV2ZW50LiBUcmFjayB0aGUgbG93ZXN0IHByaW9yaXR5XG4gICAgICAvLyBkaXNjcmV0ZSB1cGRhdGUgcGVyIHJvb3Qgc28gd2UgY2FuIGZsdXNoIHRoZW0gZWFybHksIGlmIG5lZWRlZC5cbiAgICAgIGlmIChyb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID09PSBudWxsKSB7XG4gICAgICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBuZXcgU2V0KFtyb290XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmFkZChyb290KTtcbiAgICAgIH1cbiAgICB9IC8vIFNjaGVkdWxlIG90aGVyIHVwZGF0ZXMgYWZ0ZXIgaW4gY2FzZSB0aGUgY2FsbGJhY2sgaXMgc3luYy5cblxuXG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpO1xuICB9IC8vIFdlIHVzZSB0aGlzIHdoZW4gYXNzaWduaW5nIGEgbGFuZSBmb3IgYSB0cmFuc2l0aW9uIGluc2lkZVxuICAvLyBgcmVxdWVzdFVwZGF0ZUxhbmVgLiBXZSBhc3N1bWUgaXQncyB0aGUgc2FtZSBhcyB0aGUgcm9vdCBiZWluZyB1cGRhdGVkLFxuICAvLyBzaW5jZSBpbiB0aGUgY29tbW9uIGNhc2Ugb2YgYSBzaW5nbGUgcm9vdCBhcHAgaXQgcHJvYmFibHkgaXMuIElmIGl0J3Mgbm90XG4gIC8vIHRoZSBzYW1lIHJvb3QsIHRoZW4gaXQncyBub3QgYSBodWdlIGRlYWwsIHdlIGp1c3QgbWlnaHQgYmF0Y2ggbW9yZSBzdHVmZlxuICAvLyB0b2dldGhlciBtb3JlIHRoYW4gbmVjZXNzYXJ5LlxuXG5cbiAgbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QgPSByb290O1xufSAvLyBUaGlzIGlzIHNwbGl0IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB3ZSBjYW4gbWFyayBhIGZpYmVyIHdpdGggcGVuZGluZ1xuLy8gd29yayB3aXRob3V0IHRyZWF0aW5nIGl0IGFzIGEgdHlwaWNhbCB1cGRhdGUgdGhhdCBvcmlnaW5hdGVzIGZyb20gYW4gZXZlbnQ7XG4vLyBlLmcuIHJldHJ5aW5nIGEgU3VzcGVuc2UgYm91bmRhcnkgaXNuJ3QgYW4gdXBkYXRlLCBidXQgaXQgZG9lcyBzY2hlZHVsZSB3b3JrXG4vLyBvbiBhIGZpYmVyLlxuXG5mdW5jdGlvbiBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChzb3VyY2VGaWJlciwgbGFuZSkge1xuICAvLyBVcGRhdGUgdGhlIHNvdXJjZSBmaWJlcidzIGxhbmVzXG4gIHNvdXJjZUZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhzb3VyY2VGaWJlci5sYW5lcywgbGFuZSk7XG4gIHZhciBhbHRlcm5hdGUgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCBsYW5lKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAoYWx0ZXJuYXRlID09PSBudWxsICYmIChzb3VyY2VGaWJlci5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgfVxuICB9IC8vIFdhbGsgdGhlIHBhcmVudCBwYXRoIHRvIHRoZSByb290IGFuZCB1cGRhdGUgdGhlIGNoaWxkIGV4cGlyYXRpb24gdGltZS5cblxuXG4gIHZhciBub2RlID0gc291cmNlRmliZXI7XG4gIHZhciBwYXJlbnQgPSBzb3VyY2VGaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgIHBhcmVudC5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhwYXJlbnQuY2hpbGRMYW5lcywgbGFuZSk7XG4gICAgYWx0ZXJuYXRlID0gcGFyZW50LmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgbGFuZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKChwYXJlbnQuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKHNvdXJjZUZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIGlmIChub2RlLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICB2YXIgcm9vdCA9IG5vZGUuc3RhdGVOb2RlO1xuICAgIHJldHVybiByb290O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59IC8vIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNjaGVkdWxlIGEgdGFzayBmb3IgYSByb290LiBUaGVyZSdzIG9ubHkgb25lIHRhc2sgcGVyXG4vLyByb290OyBpZiBhIHRhc2sgd2FzIGFscmVhZHkgc2NoZWR1bGVkLCB3ZSdsbCBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHByaW9yaXR5XG4vLyBvZiB0aGUgZXhpc3RpbmcgdGFzayBpcyB0aGUgc2FtZSBhcyB0aGUgcHJpb3JpdHkgb2YgdGhlIG5leHQgbGV2ZWwgdGhhdCB0aGVcbi8vIHJvb3QgaGFzIHdvcmsgb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGV2ZXJ5IHVwZGF0ZSwgYW5kIHJpZ2h0IGJlZm9yZVxuLy8gZXhpdGluZyBhIHRhc2suXG5cblxuZnVuY3Rpb24gZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gIHZhciBleGlzdGluZ0NhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlOyAvLyBDaGVjayBpZiBhbnkgbGFuZXMgYXJlIGJlaW5nIHN0YXJ2ZWQgYnkgb3RoZXIgd29yay4gSWYgc28sIG1hcmsgdGhlbSBhc1xuICAvLyBleHBpcmVkIHNvIHdlIGtub3cgdG8gd29yayBvbiB0aG9zZSBuZXh0LlxuXG4gIG1hcmtTdGFydmVkTGFuZXNBc0V4cGlyZWQocm9vdCwgY3VycmVudFRpbWUpOyAvLyBEZXRlcm1pbmUgdGhlIG5leHQgbGFuZXMgdG8gd29yayBvbiwgYW5kIHRoZWlyIHByaW9yaXR5LlxuXG4gIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiBOb0xhbmVzKTsgLy8gVGhpcyByZXR1cm5zIHRoZSBwcmlvcml0eSBsZXZlbCBjb21wdXRlZCBkdXJpbmcgdGhlIGBnZXROZXh0TGFuZXNgIGNhbGwuXG5cbiAgdmFyIG5ld0NhbGxiYWNrUHJpb3JpdHkgPSByZXR1cm5OZXh0TGFuZXNQcmlvcml0eSgpO1xuXG4gIGlmIChuZXh0TGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IFRoZXJlJ3Mgbm90aGluZyB0byB3b3JrIG9uLlxuICAgIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQ2FsbGJhY2soZXhpc3RpbmdDYWxsYmFja05vZGUpO1xuICAgICAgcm9vdC5jYWxsYmFja05vZGUgPSBudWxsO1xuICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgdGFzay4gV2UgbWF5IGJlIGFibGUgdG8gcmV1c2UgaXQuXG5cblxuICBpZiAoZXhpc3RpbmdDYWxsYmFja05vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgZXhpc3RpbmdDYWxsYmFja1ByaW9yaXR5ID0gcm9vdC5jYWxsYmFja1ByaW9yaXR5O1xuXG4gICAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSA9PT0gbmV3Q2FsbGJhY2tQcmlvcml0eSkge1xuICAgICAgLy8gVGhlIHByaW9yaXR5IGhhc24ndCBjaGFuZ2VkLiBXZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIHRhc2suIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGUgcHJpb3JpdHkgY2hhbmdlZC4gQ2FuY2VsIHRoZSBleGlzdGluZyBjYWxsYmFjay4gV2UnbGwgc2NoZWR1bGUgYSBuZXdcbiAgICAvLyBvbmUgYmVsb3cuXG5cblxuICAgIGNhbmNlbENhbGxiYWNrKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgfSAvLyBTY2hlZHVsZSBhIG5ldyBjYWxsYmFjay5cblxuXG4gIHZhciBuZXdDYWxsYmFja05vZGU7XG5cbiAgaWYgKG5ld0NhbGxiYWNrUHJpb3JpdHkgPT09IFN5bmNMYW5lUHJpb3JpdHkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IFN5bmMgUmVhY3QgY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgb24gYSBzcGVjaWFsXG4gICAgLy8gaW50ZXJuYWwgcXVldWVcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZVN5bmNDYWxsYmFjayhwZXJmb3JtU3luY1dvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH0gZWxzZSBpZiAobmV3Q2FsbGJhY2tQcmlvcml0eSA9PT0gU3luY0JhdGNoZWRMYW5lUHJpb3JpdHkpIHtcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIHBlcmZvcm1TeW5jV29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCA9IGxhbmVQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkobmV3Q2FsbGJhY2tQcmlvcml0eSk7XG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVDYWxsYmFjayhzY2hlZHVsZXJQcmlvcml0eUxldmVsLCBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH1cblxuICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSBuZXdDYWxsYmFja1ByaW9yaXR5O1xuICByb290LmNhbGxiYWNrTm9kZSA9IG5ld0NhbGxiYWNrTm9kZTtcbn0gLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGV2ZXJ5IGNvbmN1cnJlbnQgdGFzaywgaS5lLiBhbnl0aGluZyB0aGF0XG4vLyBnb2VzIHRocm91Z2ggU2NoZWR1bGVyLlxuXG5cbmZ1bmN0aW9uIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdChyb290KSB7XG4gIC8vIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gYSBSZWFjdCBldmVudCwgd2UgY2FuIGNsZWFyIHRoZSBjdXJyZW50XG4gIC8vIGV2ZW50IHRpbWUuIFRoZSBuZXh0IHVwZGF0ZSB3aWxsIGNvbXB1dGUgYSBuZXcgZXZlbnQgdGltZS5cbiAgY3VycmVudEV2ZW50VGltZSA9IE5vVGltZXN0YW1wO1xuICBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9IC8vIEZsdXNoIGFueSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyBiZWZvcmUgZGVjaWRpbmcgd2hpY2ggbGFuZXMgdG8gd29yayBvbixcbiAgLy8gaW4gY2FzZSB0aGV5IHNjaGVkdWxlIGFkZGl0aW9uYWwgd29yay5cblxuXG4gIHZhciBvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICB2YXIgZGlkRmx1c2hQYXNzaXZlRWZmZWN0cyA9IGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcblxuICBpZiAoZGlkRmx1c2hQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgcGFzc2l2ZSBlZmZlY3QgcGhhc2UgbWF5IGhhdmUgY2FuY2VsZWQgdGhlIGN1cnJlbnQgdGFzay5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFzayBub2RlIGZvciB0aGlzIHJvb3Qgd2FzIGNoYW5nZWQuXG4gICAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlICE9PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdGFzayB3YXMgY2FuY2VsZWQuIEV4aXQuIFdlIGRvbid0IG5lZWQgdG8gY2FsbFxuICAgICAgLy8gYGVuc3VyZVJvb3RJc1NjaGVkdWxlZGAgYmVjYXVzZSB0aGUgY2hlY2sgYWJvdmUgaW1wbGllcyBlaXRoZXIgdGhhdFxuICAgICAgLy8gdGhlcmUncyBhIG5ldyB0YXNrLCBvciB0aGF0IHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IC8vIERldGVybWluZSB0aGUgbmV4dCBleHBpcmF0aW9uIHRpbWUgdG8gd29yayBvbiwgdXNpbmcgdGhlIGZpZWxkcyBzdG9yZWRcbiAgLy8gb24gdGhlIHJvb3QuXG5cblxuICB2YXIgbGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiBOb0xhbmVzKTtcblxuICBpZiAobGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBEZWZlbnNpdmUgY29kaW5nLiBUaGlzIGlzIG5ldmVyIGV4cGVjdGVkIHRvIGhhcHBlbi5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBleGl0U3RhdHVzID0gcmVuZGVyUm9vdENvbmN1cnJlbnQocm9vdCwgbGFuZXMpO1xuXG4gIGlmIChpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpIHtcbiAgICAvLyBUaGUgcmVuZGVyIGluY2x1ZGVkIGxhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIC8vIEZvciBleGFtcGxlLCB3aGVuIHVuaGlkaW5nIGEgaGlkZGVuIHRyZWUsIHdlIGluY2x1ZGUgYWxsIHRoZSBsYW5lc1xuICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IHNraXBwZWQgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLiBUaGF0IHNldCBvZlxuICAgIC8vIGxhbmVzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgcmVuZGVyaW5nIHdpdGguXG4gICAgLy9cbiAgICAvLyBTbyB3ZSdsbCB0aHJvdyBvdXQgdGhlIGN1cnJlbnQgd29yayBhbmQgcmVzdGFydC5cbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgfSBlbHNlIGlmIChleGl0U3RhdHVzICE9PSBSb290SW5jb21wbGV0ZSkge1xuICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZXRyeUFmdGVyRXJyb3I7IC8vIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBoeWRyYXRpb24sXG4gICAgICAvLyBkaXNjYXJkIHNlcnZlciByZXNwb25zZSBhbmQgZmFsbCBiYWNrIHRvIGNsaWVudCBzaWRlIHJlbmRlci5cblxuICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICByb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgIH0gLy8gSWYgc29tZXRoaW5nIHRocmV3IGFuIGVycm9yLCB0cnkgcmVuZGVyaW5nIG9uZSBtb3JlIHRpbWUuIFdlJ2xsIHJlbmRlclxuICAgICAgLy8gc3luY2hyb25vdXNseSB0byBibG9jayBjb25jdXJyZW50IGRhdGEgbXV0YXRpb25zLCBhbmQgd2UnbGwgaW5jbHVkZXNcbiAgICAgIC8vIGFsbCBwZW5kaW5nIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLiBJZiBpdCBzdGlsbCBmYWlscyBhZnRlciB0aGUgc2Vjb25kXG4gICAgICAvLyBhdHRlbXB0LCB3ZSdsbCBnaXZlIHVwIGFuZCBjb21taXQgdGhlIHJlc3VsdGluZyB0cmVlLlxuXG5cbiAgICAgIGxhbmVzID0gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCk7XG5cbiAgICAgIGlmIChsYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RmF0YWxFcnJvcmVkKSB7XG4gICAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICAgIHRocm93IGZhdGFsRXJyb3I7XG4gICAgfSAvLyBXZSBub3cgaGF2ZSBhIGNvbnNpc3RlbnQgdHJlZS4gVGhlIG5leHQgc3RlcCBpcyBlaXRoZXIgdG8gY29tbWl0IGl0LFxuICAgIC8vIG9yLCBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLCB3YWl0IHRvIGNvbW1pdCBpdCBhZnRlciBhIHRpbWVvdXQuXG5cblxuICAgIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuICAgIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICAgIHJvb3QuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICAgIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZXhpdFN0YXR1cywgbGFuZXMpO1xuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcblxuICBpZiAocm9vdC5jYWxsYmFja05vZGUgPT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlKSB7XG4gICAgLy8gVGhlIHRhc2sgbm9kZSBzY2hlZHVsZWQgZm9yIHRoaXMgcm9vdCBpcyB0aGUgc2FtZSBvbmUgdGhhdCdzXG4gICAgLy8gY3VycmVudGx5IGV4ZWN1dGVkLiBOZWVkIHRvIHJldHVybiBhIGNvbnRpbnVhdGlvbi5cbiAgICByZXR1cm4gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluaXNoQ29uY3VycmVudFJlbmRlcihyb290LCBleGl0U3RhdHVzLCBsYW5lcykge1xuICBzd2l0Y2ggKGV4aXRTdGF0dXMpIHtcbiAgICBjYXNlIFJvb3RJbmNvbXBsZXRlOlxuICAgIGNhc2UgUm9vdEZhdGFsRXJyb3JlZDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlJvb3QgZGlkIG5vdCBjb21wbGV0ZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIC8vIEZsb3cga25vd3MgYWJvdXQgaW52YXJpYW50LCBzbyBpdCBjb21wbGFpbnMgaWYgSSBhZGQgYSBicmVha1xuICAgIC8vIHN0YXRlbWVudCwgYnV0IGVzbGludCBkb2Vzbid0IGtub3cgYWJvdXQgaW52YXJpYW50LCBzbyBpdCBjb21wbGFpbnNcbiAgICAvLyBpZiBJIGRvLiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgIGNhc2UgUm9vdEVycm9yZWQ6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIHNob3VsZCBoYXZlIGFscmVhZHkgYXR0ZW1wdGVkIHRvIHJldHJ5IHRoaXMgdHJlZS4gSWYgd2UgcmVhY2hlZFxuICAgICAgICAvLyB0aGlzIHBvaW50LCBpdCBlcnJvcmVkIGFnYWluLiBDb21taXQgaXQuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290U3VzcGVuZGVkOlxuICAgICAge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTsgLy8gV2UgaGF2ZSBhbiBhY2NlcHRhYmxlIGxvYWRpbmcgc3RhdGUuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZVxuICAgICAgICAvLyBzaG91bGQgaW1tZWRpYXRlbHkgY29tbWl0IGl0IG9yIHdhaXQgYSBiaXQuXG5cbiAgICAgICAgaWYgKGluY2x1ZGVzT25seVJldHJpZXMobGFuZXMpICYmIC8vIGRvIG5vdCBkZWxheSBpZiB3ZSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGVcbiAgICAgICAgIXNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpKSB7XG4gICAgICAgICAgLy8gVGhpcyByZW5kZXIgb25seSBpbmNsdWRlZCByZXRyaWVzLCBubyB1cGRhdGVzLiBUaHJvdHRsZSBjb21taXR0aW5nXG4gICAgICAgICAgLy8gcmV0cmllcyBzbyB0aGF0IHdlIGRvbid0IHNob3cgdG9vIG1hbnkgbG9hZGluZyBzdGF0ZXMgdG9vIHF1aWNrbHkuXG4gICAgICAgICAgdmFyIG1zVW50aWxUaW1lb3V0ID0gZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSArIEZBTExCQUNLX1RIUk9UVExFX01TIC0gbm93KCk7IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG4gICAgICAgICAgaWYgKG1zVW50aWxUaW1lb3V0ID4gMTApIHtcbiAgICAgICAgICAgIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgTm9MYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICAgICAgLy8gVGhlcmUncyBhZGRpdGlvbmFsIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMoc3VzcGVuZGVkTGFuZXMsIGxhbmVzKSkge1xuICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgcHJlZmVyIHRvIHJlbmRlciB0aGUgZmFsbGJhY2sgb2YgYXQgdGhlIGxhc3RcbiAgICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGxldmVsLiBQaW5nIHRoZSBsYXN0IHN1c3BlbmRlZCBsZXZlbCB0byB0cnlcbiAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nIGl0IGFnYWluLlxuICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgc3VzcGVuZGVkIGxhbmVzIGFyZSBJZGxlPyBTaG91bGQgbm90IHJlc3RhcnQuXG4gICAgICAgICAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICAgICAgICAgIG1hcmtSb290UGluZ2VkKHJvb3QsIHN1c3BlbmRlZExhbmVzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIFRoZSByZW5kZXIgaXMgc3VzcGVuZGVkLCBpdCBoYXNuJ3QgdGltZWQgb3V0LCBhbmQgdGhlcmUncyBub1xuICAgICAgICAgICAgLy8gbG93ZXIgcHJpb3JpdHkgd29yayB0byBkby4gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFja1xuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YSB0byBhcnJpdmUuXG5cblxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3QuYmluZChudWxsLCByb290KSwgbXNVbnRpbFRpbWVvdXQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRoZSB3b3JrIGV4cGlyZWQuIENvbW1pdCBpbW1lZGlhdGVseS5cblxuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290U3VzcGVuZGVkV2l0aERlbGF5OlxuICAgICAge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcblxuICAgICAgICBpZiAoaW5jbHVkZXNPbmx5VHJhbnNpdGlvbnMobGFuZXMpKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIHRyYW5zaXRpb24sIHNvIHdlIHNob3VsZCBleGl0IHdpdGhvdXQgY29tbWl0dGluZyBhXG4gICAgICAgICAgLy8gcGxhY2Vob2xkZXIgYW5kIHdpdGhvdXQgc2NoZWR1bGluZyBhIHRpbWVvdXQuIERlbGF5IGluZGVmaW5pdGVseVxuICAgICAgICAgIC8vIHVudGlsIHdlIHJlY2VpdmUgbW9yZSBkYXRhLlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdHJhbnNpdGlvbiwgYnV0IHdlIGRpZCB0cmlnZ2VyIGFuIGF2b2lkZWQgc3RhdGUuXG4gICAgICAgICAgLy8gU2NoZWR1bGUgYSBwbGFjZWhvbGRlciB0byBkaXNwbGF5IGFmdGVyIGEgc2hvcnQgZGVsYXksIHVzaW5nIHRoZSBKdXN0XG4gICAgICAgICAgLy8gTm90aWNlYWJsZSBEaWZmZXJlbmNlLlxuICAgICAgICAgIC8vIFRPRE86IElzIHRoZSBKTkQgb3B0aW1pemF0aW9uIHdvcnRoIHRoZSBhZGRlZCBjb21wbGV4aXR5PyBJZiB0aGlzIGlzXG4gICAgICAgICAgLy8gdGhlIG9ubHkgcmVhc29uIHdlIHRyYWNrIHRoZSBldmVudCB0aW1lLCB0aGVuIHByb2JhYmx5IG5vdC5cbiAgICAgICAgICAvLyBDb25zaWRlciByZW1vdmluZy5cbiAgICAgICAgICB2YXIgbW9zdFJlY2VudEV2ZW50VGltZSA9IGdldE1vc3RSZWNlbnRFdmVudFRpbWUocm9vdCwgbGFuZXMpO1xuICAgICAgICAgIHZhciBldmVudFRpbWVNcyA9IG1vc3RSZWNlbnRFdmVudFRpbWU7XG4gICAgICAgICAgdmFyIHRpbWVFbGFwc2VkTXMgPSBub3coKSAtIGV2ZW50VGltZU1zO1xuXG4gICAgICAgICAgdmFyIF9tc1VudGlsVGltZW91dCA9IGpuZCh0aW1lRWxhcHNlZE1zKSAtIHRpbWVFbGFwc2VkTXM7IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG5cbiAgICAgICAgICBpZiAoX21zVW50aWxUaW1lb3V0ID4gMTApIHtcbiAgICAgICAgICAgIC8vIEluc3RlYWQgb2YgY29tbWl0dGluZyB0aGUgZmFsbGJhY2sgaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YVxuICAgICAgICAgICAgLy8gdG8gYXJyaXZlLlxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3QuYmluZChudWxsLCByb290KSwgX21zVW50aWxUaW1lb3V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBDb21taXQgdGhlIHBsYWNlaG9sZGVyLlxuXG5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RDb21wbGV0ZWQ6XG4gICAgICB7XG4gICAgICAgIC8vIFRoZSB3b3JrIGNvbXBsZXRlZC4gUmVhZHkgdG8gY29tbWl0LlxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHJvb3QgZXhpdCBzdGF0dXMuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHN1c3BlbmRlZExhbmVzKSB7XG4gIC8vIFdoZW4gc3VzcGVuZGluZywgd2Ugc2hvdWxkIGFsd2F5cyBleGNsdWRlIGxhbmVzIHRoYXQgd2VyZSBwaW5nZWQgb3IgKG1vcmVcbiAgLy8gcmFyZWx5LCBzaW5jZSB3ZSB0cnkgdG8gYXZvaWQgaXQpIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gIC8vIFRPRE86IExvbCBtYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byBmYWN0b3IgdGhpcyBiZXNpZGVzIHRoaXNcbiAgLy8gb2Jub3hpb3VzbHkgbmFtZWQgZnVuY3Rpb24gOilcbiAgc3VzcGVuZGVkTGFuZXMgPSByZW1vdmVMYW5lcyhzdXNwZW5kZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMpO1xuICBzdXNwZW5kZWRMYW5lcyA9IHJlbW92ZUxhbmVzKHN1c3BlbmRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpO1xuICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcyk7XG59IC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBzeW5jaHJvbm91cyB0YXNrcyB0aGF0IGRvbid0IGdvXG4vLyB0aHJvdWdoIFNjaGVkdWxlclxuXG5cbmZ1bmN0aW9uIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290KSB7XG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgdmFyIGxhbmVzO1xuICB2YXIgZXhpdFN0YXR1cztcblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmIGluY2x1ZGVzU29tZUxhbmUocm9vdC5leHBpcmVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSkge1xuICAgIC8vIFRoZXJlJ3MgYSBwYXJ0aWFsIHRyZWUsIGFuZCBhdCBsZWFzdCBvbmUgb2YgaXRzIGxhbmVzIGhhcyBleHBpcmVkLiBGaW5pc2hcbiAgICAvLyByZW5kZXJpbmcgaXQgYmVmb3JlIHJlbmRlcmluZyB0aGUgcmVzdCBvZiB0aGUgZXhwaXJlZCB3b3JrLlxuICAgIGxhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcblxuICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpIHtcbiAgICAgIC8vIFRoZSByZW5kZXIgaW5jbHVkZWQgbGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAvLyBGb3IgZXhhbXBsZSwgd2hlbiB1bmhpZGluZyBhIGhpZGRlbiB0cmVlLCB3ZSBpbmNsdWRlIGFsbCB0aGUgbGFuZXNcbiAgICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IHNraXBwZWQgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLiBUaGF0IHNldCBvZlxuICAgICAgLy8gbGFuZXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbGFuZXMgd2Ugc3RhcnRlZCByZW5kZXJpbmcgd2l0aC5cbiAgICAgIC8vXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbmx5IGhhcHBlbnMgd2hlbiBwYXJ0IG9mIHRoZSB0cmVlIGlzIHJlbmRlcmVkXG4gICAgICAvLyBjb25jdXJyZW50bHkuIElmIHRoZSB3aG9sZSB0cmVlIGlzIHJlbmRlcmVkIHN5bmNocm9ub3VzbHksIHRoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBubyBpbnRlcmxlYXZlZCBldmVudHMuXG4gICAgICBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBsYW5lcyk7XG4gICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBOb0xhbmVzKTtcbiAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgaWYgKHJvb3QudGFnICE9PSBMZWdhY3lSb290ICYmIGV4aXRTdGF0dXMgPT09IFJvb3RFcnJvcmVkKSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZXRyeUFmdGVyRXJyb3I7IC8vIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBoeWRyYXRpb24sXG4gICAgLy8gZGlzY2FyZCBzZXJ2ZXIgcmVzcG9uc2UgYW5kIGZhbGwgYmFjayB0byBjbGllbnQgc2lkZSByZW5kZXIuXG5cbiAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICByb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgfSAvLyBJZiBzb21ldGhpbmcgdGhyZXcgYW4gZXJyb3IsIHRyeSByZW5kZXJpbmcgb25lIG1vcmUgdGltZS4gV2UnbGwgcmVuZGVyXG4gICAgLy8gc3luY2hyb25vdXNseSB0byBibG9jayBjb25jdXJyZW50IGRhdGEgbXV0YXRpb25zLCBhbmQgd2UnbGwgaW5jbHVkZXNcbiAgICAvLyBhbGwgcGVuZGluZyB1cGRhdGVzIGFyZSBpbmNsdWRlZC4gSWYgaXQgc3RpbGwgZmFpbHMgYWZ0ZXIgdGhlIHNlY29uZFxuICAgIC8vIGF0dGVtcHQsIHdlJ2xsIGdpdmUgdXAgYW5kIGNvbW1pdCB0aGUgcmVzdWx0aW5nIHRyZWUuXG5cblxuICAgIGxhbmVzID0gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCk7XG5cbiAgICBpZiAobGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICB0aHJvdyBmYXRhbEVycm9yO1xuICB9IC8vIFdlIG5vdyBoYXZlIGEgY29uc2lzdGVudCB0cmVlLiBCZWNhdXNlIHRoaXMgaXMgYSBzeW5jIHJlbmRlciwgd2VcbiAgLy8gd2lsbCBjb21taXQgaXQgZXZlbiBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLlxuXG5cbiAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGU7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBsYW5lcztcbiAgY29tbWl0Um9vdChyb290KTsgLy8gQmVmb3JlIGV4aXRpbmcsIG1ha2Ugc3VyZSB0aGVyZSdzIGEgY2FsbGJhY2sgc2NoZWR1bGVkIGZvciB0aGUgbmV4dFxuICAvLyBwZW5kaW5nIGxldmVsLlxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZmx1c2hEaXNjcmV0ZVVwZGF0ZXMoKSB7XG4gIC8vIFRPRE86IFNob3VsZCBiZSBhYmxlIHRvIGZsdXNoIGluc2lkZSBiYXRjaGVkVXBkYXRlcywgYnV0IG5vdCBpbnNpZGUgYGFjdGAuXG4gIC8vIEhvd2V2ZXIsIGBhY3RgIHVzZXMgYGJhdGNoZWRVcGRhdGVzYCwgc28gdGhlcmUncyBubyB3YXkgdG8gZGlzdGluZ3Vpc2hcbiAgLy8gdGhvc2UgdHdvIGNhc2VzLiBOZWVkIHRvIGZpeCB0aGlzIGJlZm9yZSBleHBvc2luZyBmbHVzaERpc2NyZXRlVXBkYXRlc1xuICAvLyBhcyBhIHB1YmxpYyBBUEkuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChCYXRjaGVkQ29udGV4dCB8IFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHtcbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ3Vuc3RhYmxlX2ZsdXNoRGlzY3JldGVVcGRhdGVzOiBDYW5ub3QgZmx1c2ggdXBkYXRlcyB3aGVuIFJlYWN0IGlzICcgKyAnYWxyZWFkeSByZW5kZXJpbmcuJyk7XG4gICAgICB9XG4gICAgfSAvLyBXZSdyZSBhbHJlYWR5IHJlbmRlcmluZywgc28gd2UgY2FuJ3Qgc3luY2hyb25vdXNseSBmbHVzaCBwZW5kaW5nIHdvcmsuXG4gICAgLy8gVGhpcyBpcyBwcm9iYWJseSBhIG5lc3RlZCBldmVudCBkaXNwYXRjaCB0cmlnZ2VyZWQgYnkgYSBsaWZlY3ljbGUvZWZmZWN0LFxuICAgIC8vIGxpa2UgYGVsLmZvY3VzKClgLiBFeGl0LlxuXG5cbiAgICByZXR1cm47XG4gIH1cblxuICBmbHVzaFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMoKTsgLy8gSWYgdGhlIGRpc2NyZXRlIHVwZGF0ZXMgc2NoZWR1bGVkIHBhc3NpdmUgZWZmZWN0cywgZmx1c2ggdGhlbSBub3cgc28gdGhhdFxuICAvLyB0aGV5IGZpcmUgYmVmb3JlIHRoZSBuZXh0IHNlcmlhbCBldmVudC5cblxuICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcygpIHtcbiAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgIT09IG51bGwpIHtcbiAgICAvLyBGb3IgZWFjaCByb290IHdpdGggcGVuZGluZyBkaXNjcmV0ZSB1cGRhdGVzLCBzY2hlZHVsZSBhIGNhbGxiYWNrIHRvXG4gICAgLy8gaW1tZWRpYXRlbHkgZmx1c2ggdGhlbS5cbiAgICB2YXIgcm9vdHMgPSByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzO1xuICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBudWxsO1xuICAgIHJvb3RzLmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIG1hcmtEaXNjcmV0ZVVwZGF0ZXNFeHBpcmVkKHJvb3QpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICB9KTtcbiAgfSAvLyBOb3cgZmx1c2ggdGhlIGltbWVkaWF0ZSBxdWV1ZS5cblxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbn1cblxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMkMShmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IEJhdGNoZWRDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGJhdGNoZWRFdmVudFVwZGF0ZXMkMShmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IEV2ZW50Q29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaXNjcmV0ZVVwZGF0ZXMkMShmbiwgYSwgYiwgYywgZCkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IERpc2NyZXRlRXZlbnRDb250ZXh0O1xuXG4gIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQxKFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIsIGZuLmJpbmQobnVsbCwgYSwgYiwgYywgZCkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVuYmF0Y2hlZFVwZGF0ZXMoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCAmPSB+QmF0Y2hlZENvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gTGVnYWN5VW5iYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmbHVzaFN5bmMoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcblxuICBpZiAoKHByZXZFeGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHtcbiAgICAgIGVycm9yKCdmbHVzaFN5bmMgd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhIGxpZmVjeWNsZSBtZXRob2QuIFJlYWN0IGNhbm5vdCAnICsgJ2ZsdXNoIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuIENvbnNpZGVyIG1vdmluZyB0aGlzIGNhbGwgdG8gJyArICdhIHNjaGVkdWxlciB0YXNrIG9yIG1pY3JvIHRhc2suJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZuKGEpO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBCYXRjaGVkQ29udGV4dDtcblxuICB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEoSW1tZWRpYXRlUHJpb3JpdHkkMSwgZm4uYmluZChudWxsLCBhKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7IC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIGhhcHBlbiBldmVuIGlmIGJhdGNoZWRVcGRhdGVzIGlzIGhpZ2hlciB1cFxuICAgICAgLy8gdGhlIHN0YWNrLlxuXG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwdXNoUmVuZGVyTGFuZXMoZmliZXIsIGxhbmVzKSB7XG4gIHB1c2goc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLCBzdWJ0cmVlUmVuZGVyTGFuZXMsIGZpYmVyKTtcbiAgc3VidHJlZVJlbmRlckxhbmVzID0gbWVyZ2VMYW5lcyhzdWJ0cmVlUmVuZGVyTGFuZXMsIGxhbmVzKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgbGFuZXMpO1xufVxuZnVuY3Rpb24gcG9wUmVuZGVyTGFuZXMoZmliZXIpIHtcbiAgc3VidHJlZVJlbmRlckxhbmVzID0gc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLmN1cnJlbnQ7XG4gIHBvcChzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpIHtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuICB2YXIgdGltZW91dEhhbmRsZSA9IHJvb3QudGltZW91dEhhbmRsZTtcblxuICBpZiAodGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0KSB7XG4gICAgLy8gVGhlIHJvb3QgcHJldmlvdXMgc3VzcGVuZGVkIGFuZCBzY2hlZHVsZWQgYSB0aW1lb3V0IHRvIGNvbW1pdCBhIGZhbGxiYWNrXG4gICAgLy8gc3RhdGUuIE5vdyB0aGF0IHdlIGhhdmUgYWRkaXRpb25hbCB3b3JrLCBjYW5jZWwgdGhlIHRpbWVvdXQuXG4gICAgcm9vdC50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0OyAvLyAkRmxvd0ZpeE1lIENvbXBsYWlucyBub1RpbWVvdXQgaXMgbm90IGEgVGltZW91dElELCBkZXNwaXRlIHRoZSBjaGVjayBhYm92ZVxuXG4gICAgY2FuY2VsVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIHZhciBpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG5cbiAgICB3aGlsZSAoaW50ZXJydXB0ZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGludGVycnVwdGVkV29yayA9IGludGVycnVwdGVkV29yay5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgd29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhyb290LmN1cnJlbnQsIG51bGwpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IHN1YnRyZWVSZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBsYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJbmNvbXBsZXRlO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gTm9MYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gTm9MYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuXG4gIHtcbiAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKSB7XG4gIGRvIHtcbiAgICB2YXIgZXJyb3JlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIHRyeSB7XG4gICAgICAvLyBSZXNldCBtb2R1bGUtbGV2ZWwgc3RhdGUgdGhhdCB3YXMgc2V0IGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICByZXNldEhvb2tzQWZ0ZXJUaHJvdygpO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTsgLy8gVE9ETzogSSBmb3VuZCBhbmQgYWRkZWQgdGhpcyBtaXNzaW5nIGxpbmUgd2hpbGUgaW52ZXN0aWdhdGluZyBhXG4gICAgICAvLyBzZXBhcmF0ZSBpc3N1ZS4gV3JpdGUgYSByZWdyZXNzaW9uIHRlc3QgdXNpbmcgc3RyaW5nIHJlZnMuXG5cbiAgICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7XG5cbiAgICAgIGlmIChlcnJvcmVkV29yayA9PT0gbnVsbCB8fCBlcnJvcmVkV29yay5yZXR1cm4gPT09IG51bGwpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgdG8gYmUgd29ya2luZyBvbiBhIG5vbi1yb290IGZpYmVyLiBUaGlzIGlzIGEgZmF0YWwgZXJyb3JcbiAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSdzIG5vIGFuY2VzdG9yIHRoYXQgY2FuIGhhbmRsZSBpdDsgdGhlIHJvb3QgaXNcbiAgICAgICAgLy8gc3VwcG9zZWQgdG8gY2FwdHVyZSBhbGwgZXJyb3JzIHRoYXQgd2VyZW4ndCBjYXVnaHQgYnkgYW4gZXJyb3JcbiAgICAgICAgLy8gYm91bmRhcnkuXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RmF0YWxFcnJvcmVkO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gdGhyb3duVmFsdWU7IC8vIFNldCBgd29ya0luUHJvZ3Jlc3NgIHRvIG51bGwuIFRoaXMgcmVwcmVzZW50cyBhZHZhbmNpbmcgdG8gdGhlIG5leHRcbiAgICAgICAgLy8gc2libGluZywgb3IgdGhlIHBhcmVudCBpZiB0aGVyZSBhcmUgbm8gc2libGluZ3MuIEJ1dCBzaW5jZSB0aGUgcm9vdFxuICAgICAgICAvLyBoYXMgbm8gc2libGluZ3Mgbm9yIGEgcGFyZW50LCB3ZSBzZXQgaXQgdG8gbnVsbC4gVXN1YWxseSB0aGlzIGlzXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgYGNvbXBsZXRlVW5pdE9mV29ya2Agb3IgYHVud2luZFdvcmtgLCBidXQgc2luY2Ugd2UncmVcbiAgICAgICAgLy8gaW50ZW50aW9uYWxseSBub3QgY2FsbGluZyB0aG9zZSwgd2UgbmVlZCBzZXQgaXQgaGVyZS5cbiAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgY2FsbGluZyBgdW53aW5kV29ya2AgdG8gcG9wIHRoZSBjb250ZXh0cy5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIgJiYgZXJyb3JlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgIC8vIFJlY29yZCB0aGUgdGltZSBzcGVudCByZW5kZXJpbmcgYmVmb3JlIGFuIGVycm9yIHdhcyB0aHJvd24uIFRoaXNcbiAgICAgICAgLy8gYXZvaWRzIGluYWNjdXJhdGUgUHJvZmlsZXIgZHVyYXRpb25zIGluIHRoZSBjYXNlIG9mIGFcbiAgICAgICAgLy8gc3VzcGVuZGVkIHJlbmRlci5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShlcnJvcmVkV29yaywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93RXhjZXB0aW9uKHJvb3QsIGVycm9yZWRXb3JrLnJldHVybiwgZXJyb3JlZFdvcmssIHRocm93blZhbHVlLCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgICBjb21wbGV0ZVVuaXRPZldvcmsoZXJyb3JlZFdvcmspO1xuICAgIH0gY2F0Y2ggKHlldEFub3RoZXJUaHJvd25WYWx1ZSkge1xuICAgICAgLy8gU29tZXRoaW5nIGluIHRoZSByZXR1cm4gcGF0aCBhbHNvIHRocmV3LlxuICAgICAgdGhyb3duVmFsdWUgPSB5ZXRBbm90aGVyVGhyb3duVmFsdWU7XG5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gZXJyb3JlZFdvcmsgJiYgZXJyb3JlZFdvcmsgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBib3VuZGFyeSBoYXMgYWxyZWFkeSBlcnJvcmVkLCB0aGVuIHdlIGhhZCB0cm91YmxlIHByb2Nlc3NpbmdcbiAgICAgICAgLy8gdGhlIGVycm9yLiBCdWJibGUgaXQgdG8gdGhlIG5leHQgYm91bmRhcnkuXG4gICAgICAgIGVycm9yZWRXb3JrID0gZXJyb3JlZFdvcmsucmV0dXJuO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGVycm9yZWRXb3JrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cblxuICAgICAgY29udGludWU7XG4gICAgfSAvLyBSZXR1cm4gdG8gdGhlIG5vcm1hbCB3b3JrIGxvb3AuXG5cblxuICAgIHJldHVybjtcbiAgfSB3aGlsZSAodHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHB1c2hEaXNwYXRjaGVyKCkge1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudDtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAgaWYgKHByZXZEaXNwYXRjaGVyID09PSBudWxsKSB7XG4gICAgLy8gVGhlIFJlYWN0IGlzb21vcnBoaWMgcGFja2FnZSBkb2VzIG5vdCBpbmNsdWRlIGEgZGVmYXVsdCBkaXNwYXRjaGVyLlxuICAgIC8vIEluc3RlYWQgdGhlIGZpcnN0IHJlbmRlcmVyIHdpbGwgbGF6aWx5IGF0dGFjaCBvbmUsIGluIG9yZGVyIHRvIGdpdmVcbiAgICAvLyBuaWNlciBlcnJvciBtZXNzYWdlcy5cbiAgICByZXR1cm4gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcmV2RGlzcGF0Y2hlcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG59XG5cbmZ1bmN0aW9uIHB1c2hJbnRlcmFjdGlvbnMocm9vdCkge1xuICB7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucztcbiAgICByZXR1cm4gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucykge1xuICB7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrQ29tbWl0VGltZU9mRmFsbGJhY2soKSB7XG4gIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPSBub3coKTtcbn1cbmZ1bmN0aW9uIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMobGFuZSkge1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBtZXJnZUxhbmVzKGxhbmUsIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyk7XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZDtcbiAgfVxufVxuZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlIHx8IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheTtcbiAgfSAvLyBDaGVjayBpZiB0aGVyZSBhcmUgdXBkYXRlcyB0aGF0IHdlIHNraXBwZWQgdHJlZSB0aGF0IG1pZ2h0IGhhdmUgdW5ibG9ja2VkXG4gIC8vIHRoaXMgcmVuZGVyLlxuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gbnVsbCAmJiAoaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMpIHx8IGluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKSkpIHtcbiAgICAvLyBNYXJrIHRoZSBjdXJyZW50IHJlbmRlciBhcyBzdXNwZW5kZWQgc28gdGhhdCB3ZSBzd2l0Y2ggdG8gd29ya2luZyBvblxuICAgIC8vIHRoZSB1cGRhdGVzIHRoYXQgd2VyZSBza2lwcGVkLiBVc3VhbGx5IHdlIG9ubHkgc3VzcGVuZCBhdCB0aGUgZW5kIG9mXG4gICAgLy8gdGhlIHJlbmRlciBwaGFzZS5cbiAgICAvLyBUT0RPOiBXZSBzaG91bGQgcHJvYmFibHkgYWx3YXlzIG1hcmsgdGhlIHJvb3QgYXMgc3VzcGVuZGVkIGltbWVkaWF0ZWx5XG4gICAgLy8gKGluc2lkZSB0aGlzIGZ1bmN0aW9uKSwgc2luY2UgYnkgc3VzcGVuZGluZyBhdCB0aGUgZW5kIG9mIHRoZSByZW5kZXJcbiAgICAvLyBwaGFzZSBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIG1pc3Rha2Ugd2hlcmUgd2Ugc3VzcGVuZCBsYW5lcyB0aGF0IHdlcmVcbiAgICAvLyBwaW5nZWQgb3IgdXBkYXRlZCB3aGlsZSB3ZSB3ZXJlIHJlbmRlcmluZy5cbiAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHdvcmtJblByb2dyZXNzUm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICB9XG59XG5mdW5jdGlvbiByZW5kZXJEaWRFcnJvcigpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RDb21wbGV0ZWQpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEVycm9yZWQ7XG4gIH1cbn0gLy8gQ2FsbGVkIGR1cmluZyByZW5kZXIgdG8gZGV0ZXJtaW5lIGlmIGFueXRoaW5nIGhhcyBzdXNwZW5kZWQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHdlJ3JlIG5vdCBzdXJlLlxuXG5mdW5jdGlvbiByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSB7XG4gIC8vIElmIHNvbWV0aGluZyBlcnJvcmVkIG9yIGNvbXBsZXRlZCwgd2UgY2FuJ3QgcmVhbGx5IGJlIHN1cmUsXG4gIC8vIHNvIHRob3NlIGFyZSBmYWxzZS5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlO1xufVxuXG5mdW5jdGlvbiByZW5kZXJSb290U3luYyhyb290LCBsYW5lcykge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCk7IC8vIElmIHRoZSByb290IG9yIGxhbmVzIGhhdmUgY2hhbmdlZCwgdGhyb3cgb3V0IHRoZSBleGlzdGluZyBzdGFja1xuICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzKSB7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gIH1cblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7XG5cbiAgZG8ge1xuICAgIHRyeSB7XG4gICAgICB3b3JrTG9vcFN5bmMoKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlKSB7XG4gICAgICBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIGEgc3luYyByZW5kZXIsIHNvIHdlIHNob3VsZCBoYXZlIGZpbmlzaGVkIHRoZSB3aG9sZSB0cmVlLlxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGNvbW1pdCBhbiBpbmNvbXBsZXRlIHJvb3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG59IC8vIFRoZSB3b3JrIGxvb3AgaXMgYW4gZXh0cmVtZWx5IGhvdCBwYXRoLiBUZWxsIENsb3N1cmUgbm90IHRvIGlubGluZSBpdC5cblxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wU3luYygpIHtcbiAgLy8gQWxyZWFkeSB0aW1lZCBvdXQsIHNvIHBlcmZvcm0gd29yayB3aXRob3V0IGNoZWNraW5nIGlmIHdlIG5lZWQgdG8geWllbGQuXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcykge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCk7IC8vIElmIHRoZSByb290IG9yIGxhbmVzIGhhdmUgY2hhbmdlZCwgdGhyb3cgb3V0IHRoZSBleGlzdGluZyBzdGFja1xuICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzKSB7XG4gICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICBzdGFydFdvcmtPblBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpO1xuXG4gIGRvIHtcbiAgICB0cnkge1xuICAgICAgd29ya0xvb3BDb25jdXJyZW50KCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSkge1xuICAgICAgaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG5cbiAge1xuICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgfVxuXG4gIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpO1xuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcblxuICAgIHJldHVybiBSb290SW5jb21wbGV0ZTtcbiAgfSBlbHNlIHtcblxuXG4gICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFJldHVybiB0aGUgZmluYWwgZXhpdCBzdGF0dXMuXG5cbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgfVxufVxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wQ29uY3VycmVudCgpIHtcbiAgLy8gUGVyZm9ybSB3b3JrIHVudGlsIFNjaGVkdWxlciBhc2tzIHVzIHRvIHlpZWxkXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCAmJiAhc2hvdWxkWWllbGQoKSkge1xuICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJmb3JtVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgLy8gbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGlzLCBidXQgcmVseWluZyBvbiBpdCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3RcbiAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICB2YXIgY3VycmVudCA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlO1xuICBzZXRDdXJyZW50RmliZXIodW5pdE9mV29yayk7XG4gIHZhciBuZXh0O1xuXG4gIGlmICggKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgIG5leHQgPSBiZWdpbldvcmskMShjdXJyZW50LCB1bml0T2ZXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEodW5pdE9mV29yaywgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dCA9IGJlZ2luV29yayQxKGN1cnJlbnQsIHVuaXRPZldvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXNldEN1cnJlbnRGaWJlcigpO1xuICB1bml0T2ZXb3JrLm1lbW9pemVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcblxuICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgIC8vIElmIHRoaXMgZG9lc24ndCBzcGF3biBuZXcgd29yaywgY29tcGxldGUgdGhlIGN1cnJlbnQgd29yay5cbiAgICBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICB9XG5cbiAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgLy8gQXR0ZW1wdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCB1bml0IG9mIHdvcmssIHRoZW4gbW92ZSB0byB0aGUgbmV4dFxuICAvLyBzaWJsaW5nLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBzaWJsaW5ncywgcmV0dXJuIHRvIHRoZSBwYXJlbnQgZmliZXIuXG4gIHZhciBjb21wbGV0ZWRXb3JrID0gdW5pdE9mV29yaztcblxuICBkbyB7XG4gICAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAgIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gICAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICAgIHZhciBjdXJyZW50ID0gY29tcGxldGVkV29yay5hbHRlcm5hdGU7XG4gICAgdmFyIHJldHVybkZpYmVyID0gY29tcGxldGVkV29yay5yZXR1cm47IC8vIENoZWNrIGlmIHRoZSB3b3JrIGNvbXBsZXRlZCBvciBpZiBzb21ldGhpbmcgdGhyZXcuXG5cbiAgICBpZiAoKGNvbXBsZXRlZFdvcmsuZmxhZ3MgJiBJbmNvbXBsZXRlKSA9PT0gTm9GbGFncykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGNvbXBsZXRlZFdvcmspO1xuICAgICAgdmFyIG5leHQgPSB2b2lkIDA7XG5cbiAgICAgIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgIG5leHQgPSBjb21wbGV0ZVdvcmsoY3VycmVudCwgY29tcGxldGVkV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgbmV4dCA9IGNvbXBsZXRlV29yayhjdXJyZW50LCBjb21wbGV0ZWRXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpOyAvLyBVcGRhdGUgcmVuZGVyIGR1cmF0aW9uIGFzc3VtaW5nIHdlIGRpZG4ndCBlcnJvci5cblxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGNvbXBsZXRlZFdvcmssIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcblxuICAgICAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQ29tcGxldGluZyB0aGlzIGZpYmVyIHNwYXduZWQgbmV3IHdvcmsuIFdvcmsgb24gdGhhdCBuZXh0LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDaGlsZExhbmVzKGNvbXBsZXRlZFdvcmspO1xuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwgJiYgLy8gRG8gbm90IGFwcGVuZCBlZmZlY3RzIHRvIHBhcmVudHMgaWYgYSBzaWJsaW5nIGZhaWxlZCB0byBjb21wbGV0ZVxuICAgICAgKHJldHVybkZpYmVyLmZsYWdzICYgSW5jb21wbGV0ZSkgPT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gQXBwZW5kIGFsbCB0aGUgZWZmZWN0cyBvZiB0aGUgc3VidHJlZSBhbmQgdGhpcyBmaWJlciBvbnRvIHRoZSBlZmZlY3RcbiAgICAgICAgLy8gbGlzdCBvZiB0aGUgcGFyZW50LiBUaGUgY29tcGxldGlvbiBvcmRlciBvZiB0aGUgY2hpbGRyZW4gYWZmZWN0cyB0aGVcbiAgICAgICAgLy8gc2lkZS1lZmZlY3Qgb3JkZXIuXG4gICAgICAgIGlmIChyZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gY29tcGxldGVkV29yay5maXJzdEVmZmVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21wbGV0ZWRXb3JrLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY29tcGxldGVkV29yay5maXJzdEVmZmVjdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY29tcGxldGVkV29yay5sYXN0RWZmZWN0O1xuICAgICAgICB9IC8vIElmIHRoaXMgZmliZXIgaGFkIHNpZGUtZWZmZWN0cywgd2UgYXBwZW5kIGl0IEFGVEVSIHRoZSBjaGlsZHJlbidzXG4gICAgICAgIC8vIHNpZGUtZWZmZWN0cy4gV2UgY2FuIHBlcmZvcm0gY2VydGFpbiBzaWRlLWVmZmVjdHMgZWFybGllciBpZiBuZWVkZWQsXG4gICAgICAgIC8vIGJ5IGRvaW5nIG11bHRpcGxlIHBhc3NlcyBvdmVyIHRoZSBlZmZlY3QgbGlzdC4gV2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBzY2hlZHVsZSBvdXIgb3duIHNpZGUtZWZmZWN0IG9uIG91ciBvd24gbGlzdCBiZWNhdXNlIGlmIGVuZCB1cFxuICAgICAgICAvLyByZXVzaW5nIGNoaWxkcmVuIHdlJ2xsIHNjaGVkdWxlIHRoaXMgZWZmZWN0IG9udG8gaXRzZWxmIHNpbmNlIHdlJ3JlXG4gICAgICAgIC8vIGF0IHRoZSBlbmQuXG5cblxuICAgICAgICB2YXIgZmxhZ3MgPSBjb21wbGV0ZWRXb3JrLmZsYWdzOyAvLyBTa2lwIGJvdGggTm9Xb3JrIGFuZCBQZXJmb3JtZWRXb3JrIHRhZ3Mgd2hlbiBjcmVhdGluZyB0aGUgZWZmZWN0XG4gICAgICAgIC8vIGxpc3QuIFBlcmZvcm1lZFdvcmsgZWZmZWN0IGlzIHJlYWQgYnkgUmVhY3QgRGV2VG9vbHMgYnV0IHNob3VsZG4ndCBiZVxuICAgICAgICAvLyBjb21taXR0ZWQuXG5cbiAgICAgICAgaWYgKGZsYWdzID4gUGVyZm9ybWVkV29yaykge1xuICAgICAgICAgIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlIGJlY2F1c2Ugc29tZXRoaW5nIHRocmV3LiBQb3AgdmFsdWVzIG9mZlxuICAgICAgLy8gdGhlIHN0YWNrIHdpdGhvdXQgZW50ZXJpbmcgdGhlIGNvbXBsZXRlIHBoYXNlLiBJZiB0aGlzIGlzIGEgYm91bmRhcnksXG4gICAgICAvLyBjYXB0dXJlIHZhbHVlcyBpZiBwb3NzaWJsZS5cbiAgICAgIHZhciBfbmV4dCA9IHVud2luZFdvcmsoY29tcGxldGVkV29yayk7IC8vIEJlY2F1c2UgdGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlLCBkb24ndCByZXNldCBpdHMgZXhwaXJhdGlvbiB0aW1lLlxuXG5cbiAgICAgIGlmIChfbmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBJZiBjb21wbGV0aW5nIHRoaXMgd29yayBzcGF3bmVkIG5ldyB3b3JrLCBkbyB0aGF0IG5leHQuIFdlJ2xsIGNvbWVcbiAgICAgICAgLy8gYmFjayBoZXJlIGFnYWluLlxuICAgICAgICAvLyBTaW5jZSB3ZSdyZSByZXN0YXJ0aW5nLCByZW1vdmUgYW55dGhpbmcgdGhhdCBpcyBub3QgYSBob3N0IGVmZmVjdFxuICAgICAgICAvLyBmcm9tIHRoZSBlZmZlY3QgdGFnLlxuICAgICAgICBfbmV4dC5mbGFncyAmPSBIb3N0RWZmZWN0TWFzaztcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBfbmV4dDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAvLyBSZWNvcmQgdGhlIHJlbmRlciBkdXJhdGlvbiBmb3IgdGhlIGZpYmVyIHRoYXQgZXJyb3JlZC5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShjb21wbGV0ZWRXb3JrLCBmYWxzZSk7IC8vIEluY2x1ZGUgdGhlIHRpbWUgc3BlbnQgd29ya2luZyBvbiBmYWlsZWQgY2hpbGRyZW4gYmVmb3JlIGNvbnRpbnVpbmcuXG5cbiAgICAgICAgdmFyIGFjdHVhbER1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgdmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBhY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAvLyBNYXJrIHRoZSBwYXJlbnQgZmliZXIgYXMgaW5jb21wbGV0ZSBhbmQgY2xlYXIgaXRzIGVmZmVjdCBsaXN0LlxuICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICByZXR1cm5GaWJlci5mbGFncyB8PSBJbmNvbXBsZXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaWJsaW5nRmliZXIgPSBjb21wbGV0ZWRXb3JrLnNpYmxpbmc7XG5cbiAgICBpZiAoc2libGluZ0ZpYmVyICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gZG8gaW4gdGhpcyByZXR1cm5GaWJlciwgZG8gdGhhdCBuZXh0LlxuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBzaWJsaW5nRmliZXI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBPdGhlcndpc2UsIHJldHVybiB0byB0aGUgcGFyZW50XG5cblxuICAgIGNvbXBsZXRlZFdvcmsgPSByZXR1cm5GaWJlcjsgLy8gVXBkYXRlIHRoZSBuZXh0IHRoaW5nIHdlJ3JlIHdvcmtpbmcgb24gaW4gY2FzZSBzb21ldGhpbmcgdGhyb3dzLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrO1xuICB9IHdoaWxlIChjb21wbGV0ZWRXb3JrICE9PSBudWxsKTsgLy8gV2UndmUgcmVhY2hlZCB0aGUgcm9vdC5cblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290Q29tcGxldGVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q2hpbGRMYW5lcyhjb21wbGV0ZWRXb3JrKSB7XG4gIGlmICggLy8gVE9ETzogTW92ZSB0aGlzIGNoZWNrIG91dCBvZiB0aGUgaG90IHBhdGggYnkgbW92aW5nIGByZXNldENoaWxkTGFuZXNgXG4gIC8vIHRvIHN3aXRjaCBzdGF0ZW1lbnQgaW4gYGNvbXBsZXRlV29ya2AuXG4gIChjb21wbGV0ZWRXb3JrLnRhZyA9PT0gTGVnYWN5SGlkZGVuQ29tcG9uZW50IHx8IGNvbXBsZXRlZFdvcmsudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQpICYmIGNvbXBsZXRlZFdvcmsubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCAmJiAhaW5jbHVkZXNTb21lTGFuZShzdWJ0cmVlUmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpICYmIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTGFuZXMpIHtcbiAgICAvLyBUaGUgY2hpbGRyZW4gb2YgdGhpcyBjb21wb25lbnQgYXJlIGhpZGRlbi4gRG9uJ3QgYnViYmxlIHRoZWlyXG4gICAgLy8gZXhwaXJhdGlvbiB0aW1lcy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmV3Q2hpbGRMYW5lcyA9IE5vTGFuZXM7IC8vIEJ1YmJsZSB1cCB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lLlxuXG4gIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgLy8gSW4gcHJvZmlsaW5nIG1vZGUsIHJlc2V0Q2hpbGRFeHBpcmF0aW9uVGltZSBpcyBhbHNvIHVzZWQgdG8gcmVzZXRcbiAgICAvLyBwcm9maWxlciBkdXJhdGlvbnMuXG4gICAgdmFyIGFjdHVhbER1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICB2YXIgdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuc2VsZkJhc2VEdXJhdGlvbjsgLy8gV2hlbiBhIGZpYmVyIGlzIGNsb25lZCwgaXRzIGFjdHVhbER1cmF0aW9uIGlzIHJlc2V0IHRvIDAuIFRoaXMgdmFsdWUgd2lsbFxuICAgIC8vIG9ubHkgYmUgdXBkYXRlZCBpZiB3b3JrIGlzIGRvbmUgb24gdGhlIGZpYmVyIChpLmUuIGl0IGRvZXNuJ3QgYmFpbG91dCkuXG4gICAgLy8gV2hlbiB3b3JrIGlzIGRvbmUsIGl0IHNob3VsZCBidWJibGUgdG8gdGhlIHBhcmVudCdzIGFjdHVhbER1cmF0aW9uLiBJZlxuICAgIC8vIHRoZSBmaWJlciBoYXMgbm90IGJlZW4gY2xvbmVkIHRob3VnaCwgKG1lYW5pbmcgbm8gd29yayB3YXMgZG9uZSksIHRoZW5cbiAgICAvLyB0aGlzIHZhbHVlIHdpbGwgcmVmbGVjdCB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgd29ya2luZyBvbiBhIHByZXZpb3VzXG4gICAgLy8gcmVuZGVyLiBJbiB0aGF0IGNhc2UgaXQgc2hvdWxkIG5vdCBidWJibGUuIFdlIGRldGVybWluZSB3aGV0aGVyIGl0IHdhc1xuICAgIC8vIGNsb25lZCBieSBjb21wYXJpbmcgdGhlIGNoaWxkIHBvaW50ZXIuXG5cbiAgICB2YXIgc2hvdWxkQnViYmxlQWN0dWFsRHVyYXRpb25zID0gY29tcGxldGVkV29yay5hbHRlcm5hdGUgPT09IG51bGwgfHwgY29tcGxldGVkV29yay5jaGlsZCAhPT0gY29tcGxldGVkV29yay5hbHRlcm5hdGUuY2hpbGQ7XG4gICAgdmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbmV3Q2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobmV3Q2hpbGRMYW5lcywgbWVyZ2VMYW5lcyhjaGlsZC5sYW5lcywgY2hpbGQuY2hpbGRMYW5lcykpO1xuXG4gICAgICBpZiAoc2hvdWxkQnViYmxlQWN0dWFsRHVyYXRpb25zKSB7XG4gICAgICAgIGFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICB0cmVlQmFzZUR1cmF0aW9uICs9IGNoaWxkLnRyZWVCYXNlRHVyYXRpb247XG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgdmFyIGlzVGltZWRPdXRTdXNwZW5zZSA9IGNvbXBsZXRlZFdvcmsudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBjb21wbGV0ZWRXb3JrLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG5cbiAgICBpZiAoaXNUaW1lZE91dFN1c3BlbnNlKSB7XG4gICAgICAvLyBEb24ndCBjb3VudCB0aW1lIHNwZW50IGluIGEgdGltZWQgb3V0IFN1c3BlbnNlIHN1YnRyZWUgYXMgcGFydCBvZiB0aGUgYmFzZSBkdXJhdGlvbi5cbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgIGlmIChwcmltYXJ5Q2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgICAgICB0cmVlQmFzZUR1cmF0aW9uIC09IHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbiA9IGFjdHVhbER1cmF0aW9uO1xuICAgIGNvbXBsZXRlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiA9IHRyZWVCYXNlRHVyYXRpb247XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9jaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICB3aGlsZSAoX2NoaWxkICE9PSBudWxsKSB7XG4gICAgICBuZXdDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhuZXdDaGlsZExhbmVzLCBtZXJnZUxhbmVzKF9jaGlsZC5sYW5lcywgX2NoaWxkLmNoaWxkTGFuZXMpKTtcbiAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBsZXRlZFdvcmsuY2hpbGRMYW5lcyA9IG5ld0NoaWxkTGFuZXM7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJvb3Qocm9vdCkge1xuICB2YXIgcmVuZGVyUHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG4gIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGNvbW1pdFJvb3RJbXBsLmJpbmQobnVsbCwgcm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkpO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tbWl0Um9vdEltcGwocm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICBkbyB7XG4gICAgLy8gYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgY2FsbCBgZmx1c2hTeW5jVXBkYXRlUXVldWVgIGF0IHRoZSBlbmQsIHdoaWNoXG4gICAgLy8gbWVhbnMgYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgc29tZXRpbWVzIHJlc3VsdCBpbiBhZGRpdGlvbmFsXG4gICAgLy8gcGFzc2l2ZSBlZmZlY3RzLiBTbyB3ZSBuZWVkIHRvIGtlZXAgZmx1c2hpbmcgaW4gYSBsb29wIHVudGlsIHRoZXJlIGFyZVxuICAgIC8vIG5vIG1vcmUgcGVuZGluZyBlZmZlY3RzLlxuICAgIC8vIFRPRE86IE1pZ2h0IGJlIGJldHRlciBpZiBgZmx1c2hQYXNzaXZlRWZmZWN0c2AgZGlkIG5vdCBhdXRvbWF0aWNhbGx5XG4gICAgLy8gZmx1c2ggc3luY2hyb25vdXMgd29yayBhdCB0aGUgZW5kLCB0byBhdm9pZCBmYWN0b3JpbmcgaGF6YXJkcyBsaWtlIHRoaXMuXG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICB9IHdoaWxlIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyAhPT0gbnVsbCk7XG5cbiAgZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCk7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuZmluaXNoZWRXb3JrO1xuICB2YXIgbGFuZXMgPSByb290LmZpbmlzaGVkTGFuZXM7XG5cbiAgaWYgKGZpbmlzaGVkV29yayA9PT0gbnVsbCkge1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoZmluaXNoZWRXb3JrICE9PSByb290LmN1cnJlbnQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGNvbW1pdCB0aGUgc2FtZSB0cmVlIGFzIGJlZm9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfSAvLyBjb21taXRSb290IG5ldmVyIHJldHVybnMgYSBjb250aW51YXRpb247IGl0IGFsd2F5cyBmaW5pc2hlcyBzeW5jaHJvbm91c2x5LlxuICAvLyBTbyB3ZSBjYW4gY2xlYXIgdGhlc2Ugbm93IHRvIGFsbG93IGEgbmV3IGNhbGxiYWNrIHRvIGJlIHNjaGVkdWxlZC5cblxuXG4gIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDsgLy8gVXBkYXRlIHRoZSBmaXJzdCBhbmQgbGFzdCBwZW5kaW5nIHRpbWVzIG9uIHRoaXMgcm9vdC4gVGhlIG5ldyBmaXJzdFxuICAvLyBwZW5kaW5nIHRpbWUgaXMgd2hhdGV2ZXIgaXMgbGVmdCBvbiB0aGUgcm9vdCBmaWJlci5cblxuICB2YXIgcmVtYWluaW5nTGFuZXMgPSBtZXJnZUxhbmVzKGZpbmlzaGVkV29yay5sYW5lcywgZmluaXNoZWRXb3JrLmNoaWxkTGFuZXMpO1xuICBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzKTsgLy8gQ2xlYXIgYWxyZWFkeSBmaW5pc2hlZCBkaXNjcmV0ZSB1cGRhdGVzIGluIGNhc2UgdGhhdCBhIGxhdGVyIGNhbGwgb2ZcbiAgLy8gYGZsdXNoRGlzY3JldGVVcGRhdGVzYCBzdGFydHMgYSB1c2VsZXNzIHJlbmRlciBwYXNzIHdoaWNoIG1heSBjYW5jZWxzXG4gIC8vIGEgc2NoZWR1bGVkIHRpbWVvdXQuXG5cbiAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgIT09IG51bGwpIHtcbiAgICBpZiAoIWhhc0Rpc2NyZXRlTGFuZXMocmVtYWluaW5nTGFuZXMpICYmIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMuaGFzKHJvb3QpKSB7XG4gICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmRlbGV0ZShyb290KTtcbiAgICB9XG4gIH1cblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KSB7XG4gICAgLy8gV2UgY2FuIHJlc2V0IHRoZXNlIG5vdyB0aGF0IHRoZXkgYXJlIGZpbmlzaGVkLlxuICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgfSAvLyBHZXQgdGhlIGxpc3Qgb2YgZWZmZWN0cy5cblxuXG4gIHZhciBmaXJzdEVmZmVjdDtcblxuICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzID4gUGVyZm9ybWVkV29yaykge1xuICAgIC8vIEEgZmliZXIncyBlZmZlY3QgbGlzdCBjb25zaXN0cyBvbmx5IG9mIGl0cyBjaGlsZHJlbiwgbm90IGl0c2VsZi4gU28gaWZcbiAgICAvLyB0aGUgcm9vdCBoYXMgYW4gZWZmZWN0LCB3ZSBuZWVkIHRvIGFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LiBUaGVcbiAgICAvLyByZXN1bHRpbmcgbGlzdCBpcyB0aGUgc2V0IHRoYXQgd291bGQgYmVsb25nIHRvIHRoZSByb290J3MgcGFyZW50LCBpZiBpdFxuICAgIC8vIGhhZCBvbmU7IHRoYXQgaXMsIGFsbCB0aGUgZWZmZWN0cyBpbiB0aGUgdHJlZSBpbmNsdWRpbmcgdGhlIHJvb3QuXG4gICAgaWYgKGZpbmlzaGVkV29yay5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICBmaW5pc2hlZFdvcmsubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gZmluaXNoZWRXb3JrO1xuICAgICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGVyZSBpcyBubyBlZmZlY3Qgb24gdGhlIHJvb3QuXG4gICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gIH1cblxuICBpZiAoZmlyc3RFZmZlY3QgIT09IG51bGwpIHtcblxuICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTsgLy8gUmVzZXQgdGhpcyB0byBudWxsIGJlZm9yZSBjYWxsaW5nIGxpZmVjeWNsZXNcblxuICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7IC8vIFRoZSBjb21taXQgcGhhc2UgaXMgYnJva2VuIGludG8gc2V2ZXJhbCBzdWItcGhhc2VzLiBXZSBkbyBhIHNlcGFyYXRlIHBhc3NcbiAgICAvLyBvZiB0aGUgZWZmZWN0IGxpc3QgZm9yIGVhY2ggcGhhc2U6IGFsbCBtdXRhdGlvbiBlZmZlY3RzIGNvbWUgYmVmb3JlIGFsbFxuICAgIC8vIGxheW91dCBlZmZlY3RzLCBhbmQgc28gb24uXG4gICAgLy8gVGhlIGZpcnN0IHBoYXNlIGEgXCJiZWZvcmUgbXV0YXRpb25cIiBwaGFzZS4gV2UgdXNlIHRoaXMgcGhhc2UgdG8gcmVhZCB0aGVcbiAgICAvLyBzdGF0ZSBvZiB0aGUgaG9zdCB0cmVlIHJpZ2h0IGJlZm9yZSB3ZSBtdXRhdGUgaXQuIFRoaXMgaXMgd2hlcmVcbiAgICAvLyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSBpcyBjYWxsZWQuXG5cbiAgICBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBwcmVwYXJlRm9yQ29tbWl0KHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gZmFsc2U7XG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzLCBudWxsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBlcnJvcik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpOyAvLyBXZSBubyBsb25nZXIgbmVlZCB0byB0cmFjayB0aGUgYWN0aXZlIGluc3RhbmNlIGZpYmVyXG5cblxuICAgIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBNYXJrIHRoZSBjdXJyZW50IGNvbW1pdCB0aW1lIHRvIGJlIHNoYXJlZCBieSBhbGwgUHJvZmlsZXJzIGluIHRoaXNcbiAgICAgIC8vIGJhdGNoLiBUaGlzIGVuYWJsZXMgdGhlbSB0byBiZSBncm91cGVkIGxhdGVyLlxuICAgICAgcmVjb3JkQ29tbWl0VGltZSgpO1xuICAgIH0gLy8gVGhlIG5leHQgcGhhc2UgaXMgdGhlIG11dGF0aW9uIHBoYXNlLCB3aGVyZSB3ZSBtdXRhdGUgdGhlIGhvc3QgdHJlZS5cblxuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0TXV0YXRpb25FZmZlY3RzLCBudWxsLCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBfZXJyb3IpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTtcblxuICAgIHJlc2V0QWZ0ZXJDb21taXQocm9vdC5jb250YWluZXJJbmZvKTsgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgdHJlZSBpcyBub3cgdGhlIGN1cnJlbnQgdHJlZS4gVGhpcyBtdXN0IGNvbWUgYWZ0ZXJcbiAgICAvLyB0aGUgbXV0YXRpb24gcGhhc2UsIHNvIHRoYXQgdGhlIHByZXZpb3VzIHRyZWUgaXMgc3RpbGwgY3VycmVudCBkdXJpbmdcbiAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCwgYnV0IGJlZm9yZSB0aGUgbGF5b3V0IHBoYXNlLCBzbyB0aGF0IHRoZSBmaW5pc2hlZFxuICAgIC8vIHdvcmsgaXMgY3VycmVudCBkdXJpbmcgY29tcG9uZW50RGlkTW91bnQvVXBkYXRlLlxuXG4gICAgcm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrOyAvLyBUaGUgbmV4dCBwaGFzZSBpcyB0aGUgbGF5b3V0IHBoYXNlLCB3aGVyZSB3ZSBjYWxsIGVmZmVjdHMgdGhhdCByZWFkXG4gICAgLy8gdGhlIGhvc3QgdHJlZSBhZnRlciBpdCdzIGJlZW4gbXV0YXRlZC4gVGhlIGlkaW9tYXRpYyB1c2UgY2FzZSBmb3IgdGhpcyBpc1xuICAgIC8vIGxheW91dCwgYnV0IGNsYXNzIGNvbXBvbmVudCBsaWZlY3ljbGVzIGFsc28gZmlyZSBoZXJlIGZvciBsZWdhY3kgcmVhc29ucy5cblxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdExheW91dEVmZmVjdHMsIG51bGwsIHJvb3QsIGxhbmVzKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZXJyb3IyID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgX2Vycm9yMik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpO1xuXG4gICAgbmV4dEVmZmVjdCA9IG51bGw7IC8vIFRlbGwgU2NoZWR1bGVyIHRvIHlpZWxkIGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1lLCBzbyB0aGUgYnJvd3NlciBoYXMgYW5cbiAgICAvLyBvcHBvcnR1bml0eSB0byBwYWludC5cblxuICAgIHJlcXVlc3RQYWludCgpO1xuXG4gICAge1xuICAgICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICAgIH1cblxuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgfSBlbHNlIHtcbiAgICAvLyBObyBlZmZlY3RzLlxuICAgIHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yazsgLy8gTWVhc3VyZSB0aGVzZSBhbnl3YXkgc28gdGhlIGZsYW1lZ3JhcGggZXhwbGljaXRseSBzaG93cyB0aGF0IHRoZXJlIHdlcmVcbiAgICAvLyBubyBlZmZlY3RzLlxuICAgIC8vIFRPRE86IE1heWJlIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIHJlcG9ydCB0aGlzLlxuXG4gICAge1xuICAgICAgcmVjb3JkQ29tbWl0VGltZSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhciByb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzID0gcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHM7XG5cbiAgaWYgKHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgLy8gVGhpcyBjb21taXQgaGFzIHBhc3NpdmUgZWZmZWN0cy4gU3Rhc2ggYSByZWZlcmVuY2UgdG8gdGhlbS4gQnV0IGRvbid0XG4gICAgLy8gc2NoZWR1bGUgYSBjYWxsYmFjayB1bnRpbCBhZnRlciBmbHVzaGluZyBsYXlvdXQgd29yay5cbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICAgIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gcm9vdDtcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IGxhbmVzO1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID0gcmVuZGVyUHJpb3JpdHlMZXZlbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBhcmUgZG9uZSB3aXRoIHRoZSBlZmZlY3QgY2hhaW4gYXQgdGhpcyBwb2ludCBzbyBsZXQncyBjbGVhciB0aGVcbiAgICAvLyBuZXh0RWZmZWN0IHBvaW50ZXJzIHRvIGFzc2lzdCB3aXRoIEdDLiBJZiB3ZSBoYXZlIHBhc3NpdmUgZWZmZWN0cywgd2UnbGxcbiAgICAvLyBjbGVhciB0aGlzIGluIGZsdXNoUGFzc2l2ZUVmZmVjdHMuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXh0TmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgIG5leHRFZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG5cbiAgICAgIGlmIChuZXh0RWZmZWN0LmZsYWdzICYgRGVsZXRpb24pIHtcbiAgICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMobmV4dEVmZmVjdCk7XG4gICAgICB9XG5cbiAgICAgIG5leHRFZmZlY3QgPSBuZXh0TmV4dEVmZmVjdDtcbiAgICB9XG4gIH0gLy8gUmVhZCB0aGlzIGFnYWluLCBzaW5jZSBhbiBlZmZlY3QgbWlnaHQgaGF2ZSB1cGRhdGVkIGl0XG5cblxuICByZW1haW5pbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzOyAvLyBDaGVjayBpZiB0aGVyZSdzIHJlbWFpbmluZyB3b3JrIG9uIHRoaXMgcm9vdFxuXG4gIGlmIChyZW1haW5pbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHtcbiAgICAgIGlmIChzcGF3bmVkV29ya0R1cmluZ1JlbmRlciAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZXhwaXJhdGlvblRpbWVzID0gc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXI7XG4gICAgICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGlyYXRpb25UaW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGV4cGlyYXRpb25UaW1lc1tpXSwgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHJlbWFpbmluZ0xhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlcmUncyBubyByZW1haW5pbmcgd29yaywgd2UgY2FuIGNsZWFyIHRoZSBzZXQgb2YgYWxyZWFkeSBmYWlsZWRcbiAgICAvLyBlcnJvciBib3VuZGFyaWVzLlxuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAoIXJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBwYXNzaXZlIGVmZmVjdHMsIHRoZW4gd2UgY2FuIGNvbXBsZXRlIHRoZSBwZW5kaW5nIGludGVyYWN0aW9ucy5cbiAgICAgIC8vIE90aGVyd2lzZSwgd2UnbGwgd2FpdCB1bnRpbCBhZnRlciB0aGUgcGFzc2l2ZSBlZmZlY3RzIGFyZSBmbHVzaGVkLlxuICAgICAgLy8gV2FpdCB0byBkbyB0aGlzIHVudGlsIGFmdGVyIHJlbWFpbmluZyB3b3JrIGhhcyBiZWVuIHNjaGVkdWxlZCxcbiAgICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgcHJlbWF0dXJlbHkgc2lnbmFsIGNvbXBsZXRlIGZvciBpbnRlcmFjdGlvbnMgd2hlbiB0aGVyZSdzIGUuZy4gaGlkZGVuIHdvcmsuXG4gICAgICBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocmVtYWluaW5nTGFuZXMgPT09IFN5bmNMYW5lKSB7XG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcm9vdCBzeW5jaHJvbm91c2x5IHJlLXJlbmRlcnMgd2l0aG91dFxuICAgIC8vIGZpbmlzaGluZy4gSWYgdGhlcmUgYXJlIHRvbyBtYW55LCBpdCBpbmRpY2F0ZXMgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AuXG4gICAgaWYgKHJvb3QgPT09IHJvb3RXaXRoTmVzdGVkVXBkYXRlcykge1xuICAgICAgbmVzdGVkVXBkYXRlQ291bnQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICAgICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gcm9vdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICB9XG5cbiAgb25Db21taXRSb290KGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuXG4gIHtcbiAgICBvbkNvbW1pdFJvb3QkMSgpO1xuICB9IC8vIEFsd2F5cyBjYWxsIHRoaXMgYmVmb3JlIGV4aXRpbmcgYGNvbW1pdFJvb3RgLCB0byBlbnN1cmUgdGhhdCBhbnlcbiAgLy8gYWRkaXRpb25hbCB3b3JrIG9uIHRoaXMgcm9vdCBpcyBzY2hlZHVsZWQuXG5cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuXG4gIGlmIChoYXNVbmNhdWdodEVycm9yKSB7XG4gICAgaGFzVW5jYXVnaHRFcnJvciA9IGZhbHNlO1xuICAgIHZhciBfZXJyb3IzID0gZmlyc3RVbmNhdWdodEVycm9yO1xuICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IG51bGw7XG4gICAgdGhyb3cgX2Vycm9yMztcbiAgfVxuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIExlZ2FjeVVuYmF0Y2hlZENvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAvLyBhIFJlYWN0RE9NLnJlbmRlci1lZCByb290IGluc2lkZSBvZiBiYXRjaGVkVXBkYXRlcy4gVGhlIGNvbW1pdCBmaXJlZFxuICAgIC8vIHN5bmNocm9ub3VzbHksIGJ1dCBsYXlvdXQgdXBkYXRlcyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgdGhlIGVuZFxuICAgIC8vIG9mIHRoZSBiYXRjaC5cblxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gSWYgbGF5b3V0IHdvcmsgd2FzIHNjaGVkdWxlZCwgZmx1c2ggaXQgbm93LlxuXG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMoKSB7XG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcblxuICAgIGlmICghc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyICYmIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKChuZXh0RWZmZWN0LmZsYWdzICYgRGVsZXRpb24pICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIGlmIChkb2VzRmliZXJDb250YWluKG5leHRFZmZlY3QsIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSkpIHtcbiAgICAgICAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgb3V0IG9mIHRoZSBob3QgcGF0aCB1c2luZyBhIGRlZGljYXRlZCBlZmZlY3QgdGFnLlxuICAgICAgICBpZiAobmV4dEVmZmVjdC50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIGlzU3VzcGVuc2VCb3VuZGFyeUJlaW5nSGlkZGVuKGN1cnJlbnQsIG5leHRFZmZlY3QpICYmIGRvZXNGaWJlckNvbnRhaW4obmV4dEVmZmVjdCwgZm9jdXNlZEluc3RhbmNlSGFuZGxlKSkge1xuICAgICAgICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKChmbGFncyAmIFNuYXBzaG90KSAhPT0gTm9GbGFncykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25MaWZlQ3ljbGVzKGN1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBwYXNzaXZlIGVmZmVjdHMsIHNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gZmx1c2ggYXRcbiAgICAgIC8vIHRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eS5cbiAgICAgIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TXV0YXRpb25FZmZlY3RzKHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gVE9ETzogU2hvdWxkIHByb2JhYmx5IG1vdmUgdGhlIGJ1bGsgb2YgdGhpcyBmdW5jdGlvbiB0byBjb21taXRXb3JrLlxuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKGZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgICBjb21taXRSZXNldFRleHRDb250ZW50KG5leHRFZmZlY3QpO1xuICAgIH1cblxuICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY29tbWl0RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgfVxuICAgIH0gLy8gVGhlIGZvbGxvd2luZyBzd2l0Y2ggc3RhdGVtZW50IGlzIG9ubHkgY29uY2VybmVkIGFib3V0IHBsYWNlbWVudCxcbiAgICAvLyB1cGRhdGVzLCBhbmQgZGVsZXRpb25zLiBUbyBhdm9pZCBuZWVkaW5nIHRvIGFkZCBhIGNhc2UgZm9yIGV2ZXJ5IHBvc3NpYmxlXG4gICAgLy8gYml0bWFwIHZhbHVlLCB3ZSByZW1vdmUgdGhlIHNlY29uZGFyeSBlZmZlY3RzIGZyb20gdGhlIGVmZmVjdCB0YWcgYW5kXG4gICAgLy8gc3dpdGNoIG9uIHRoYXQgdmFsdWUuXG5cblxuICAgIHZhciBwcmltYXJ5RmxhZ3MgPSBmbGFncyAmIChQbGFjZW1lbnQgfCBVcGRhdGUgfCBEZWxldGlvbiB8IEh5ZHJhdGluZyk7XG5cbiAgICBzd2l0Y2ggKHByaW1hcnlGbGFncykge1xuICAgICAgY2FzZSBQbGFjZW1lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXRQbGFjZW1lbnQobmV4dEVmZmVjdCk7IC8vIENsZWFyIHRoZSBcInBsYWNlbWVudFwiIGZyb20gZWZmZWN0IHRhZyBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGlzIGlzXG4gICAgICAgICAgLy8gaW5zZXJ0ZWQsIGJlZm9yZSBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cbiAgICAgICAgICAvLyBUT0RPOiBmaW5kRE9NTm9kZSBkb2Vzbid0IHJlbHkgb24gdGhpcyBhbnkgbW9yZSBidXQgaXNNb3VudGVkIGRvZXNcbiAgICAgICAgICAvLyBhbmQgaXNNb3VudGVkIGlzIGRlcHJlY2F0ZWQgYW55d2F5IHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIGtpbGwgdGhpcy5cblxuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gflBsYWNlbWVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFBsYWNlbWVudEFuZFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFBsYWNlbWVudFxuICAgICAgICAgIGNvbW1pdFBsYWNlbWVudChuZXh0RWZmZWN0KTsgLy8gQ2xlYXIgdGhlIFwicGxhY2VtZW50XCIgZnJvbSBlZmZlY3QgdGFnIHNvIHRoYXQgd2Uga25vdyB0aGF0IHRoaXMgaXNcbiAgICAgICAgICAvLyBpbnNlcnRlZCwgYmVmb3JlIGFueSBsaWZlLWN5Y2xlcyBsaWtlIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkLlxuXG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+UGxhY2VtZW50OyAvLyBVcGRhdGVcblxuICAgICAgICAgIHZhciBfY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSHlkcmF0aW5nOlxuICAgICAgICB7XG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+SHlkcmF0aW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSHlkcmF0aW5nQW5kVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+SHlkcmF0aW5nOyAvLyBVcGRhdGVcblxuICAgICAgICAgIHZhciBfY3VycmVudDIgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50MiwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2N1cnJlbnQzID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudDMsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRGVsZXRpb246XG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXREZWxldGlvbihyb290LCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMYXlvdXRFZmZlY3RzKHJvb3QsIGNvbW1pdHRlZExhbmVzKSB7XG5cblxuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKGZsYWdzICYgKFVwZGF0ZSB8IENhbGxiYWNrKSkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgIGNvbW1pdExpZmVDeWNsZXMocm9vdCwgY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgIGNvbW1pdEF0dGFjaFJlZihuZXh0RWZmZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0cygpIHtcbiAgLy8gUmV0dXJucyB3aGV0aGVyIHBhc3NpdmUgZWZmZWN0cyB3ZXJlIGZsdXNoZWQuXG4gIGlmIChwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSAhPT0gTm9Qcmlvcml0eSQxKSB7XG4gICAgdmFyIHByaW9yaXR5TGV2ZWwgPSBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA+IE5vcm1hbFByaW9yaXR5JDEgPyBOb3JtYWxQcmlvcml0eSQxIDogcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHk7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSBOb1ByaW9yaXR5JDE7XG5cbiAgICB7XG4gICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCwgZmx1c2hQYXNzaXZlRWZmZWN0c0ltcGwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RNb3VudChmaWJlciwgZWZmZWN0KSB7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudC5wdXNoKGVmZmVjdCwgZmliZXIpO1xuXG4gIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdFVubW91bnQoZmliZXIsIGVmZmVjdCkge1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudC5wdXNoKGVmZmVjdCwgZmliZXIpO1xuXG4gIHtcbiAgICBmaWJlci5mbGFncyB8PSBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZS5mbGFncyB8PSBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZVBhc3NpdmVFZmZlY3RDcmVhdGUoZWZmZWN0KSB7XG4gIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICBlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSgpO1xufVxuXG5mdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCgpIHtcbiAgaWYgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHJvb3QgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cztcbiAgdmFyIGxhbmVzID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXM7XG4gIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbiAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBOb0xhbmVzO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgZmx1c2ggcGFzc2l2ZSBlZmZlY3RzIHdoaWxlIGFscmVhZHkgcmVuZGVyaW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gIH1cblxuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTsgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCBBTEwgcGVuZGluZyBwYXNzaXZlIGVmZmVjdCBkZXN0cm95IGZ1bmN0aW9ucyBhcmUgY2FsbGVkXG4gIC8vIGJlZm9yZSBBTlkgcGFzc2l2ZSBlZmZlY3QgY3JlYXRlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLlxuICAvLyBPdGhlcndpc2UgZWZmZWN0cyBpbiBzaWJsaW5nIGNvbXBvbmVudHMgbWlnaHQgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlci5cbiAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBtYXkgdW5pbnRlbnRpb25hbGx5IG92ZXJyaWRlIGEgcmVmXG4gIC8vIHZhbHVlIHNldCBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudC5cbiAgLy8gTGF5b3V0IGVmZmVjdHMgaGF2ZSB0aGUgc2FtZSBjb25zdHJhaW50LlxuICAvLyBGaXJzdCBwYXNzOiBEZXN0cm95IHN0YWxlIHBhc3NpdmUgZWZmZWN0cy5cblxuICB2YXIgdW5tb3VudEVmZmVjdHMgPSBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudDtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHVubW91bnRFZmZlY3RzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIF9lZmZlY3QgPSB1bm1vdW50RWZmZWN0c1tpXTtcbiAgICB2YXIgZmliZXIgPSB1bm1vdW50RWZmZWN0c1tpICsgMV07XG4gICAgdmFyIGRlc3Ryb3kgPSBfZWZmZWN0LmRlc3Ryb3k7XG4gICAgX2VmZmVjdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gICAge1xuICAgICAgZmliZXIuZmxhZ3MgJj0gflBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmZsYWdzICY9IH5QYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAge1xuICAgICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBkZXN0cm95LCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEoZmliZXIgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gU2Vjb25kIHBhc3M6IENyZWF0ZSBuZXcgcGFzc2l2ZSBlZmZlY3RzLlxuXG5cbiAgdmFyIG1vdW50RWZmZWN0cyA9IHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudDtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50ID0gW107XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG1vdW50RWZmZWN0cy5sZW5ndGg7IF9pICs9IDIpIHtcbiAgICB2YXIgX2VmZmVjdDIgPSBtb3VudEVmZmVjdHNbX2ldO1xuICAgIHZhciBfZmliZXIgPSBtb3VudEVmZmVjdHNbX2kgKyAxXTtcblxuICAgIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihfZmliZXIpO1xuXG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBpbnZva2VQYXNzaXZlRWZmZWN0Q3JlYXRlLCBudWxsLCBfZWZmZWN0Mik7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIGlmICghKF9maWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2Vycm9yNCA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihfZmliZXIsIF9lcnJvcjQpO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIH1cbiAgfSAvLyBOb3RlOiBUaGlzIGN1cnJlbnRseSBhc3N1bWVzIHRoZXJlIGFyZSBubyBwYXNzaXZlIGVmZmVjdHMgb24gdGhlIHJvb3QgZmliZXJcbiAgLy8gYmVjYXVzZSB0aGUgcm9vdCBpcyBub3QgcGFydCBvZiBpdHMgb3duIGVmZmVjdCBsaXN0LlxuICAvLyBUaGlzIGNvdWxkIGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuXG5cbiAgdmFyIGVmZmVjdCA9IHJvb3QuY3VycmVudC5maXJzdEVmZmVjdDtcblxuICB3aGlsZSAoZWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5leHROZXh0RWZmZWN0ID0gZWZmZWN0Lm5leHRFZmZlY3Q7IC8vIFJlbW92ZSBuZXh0RWZmZWN0IHBvaW50ZXIgdG8gYXNzaXN0IEdDXG5cbiAgICBlZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG5cbiAgICBpZiAoZWZmZWN0LmZsYWdzICYgRGVsZXRpb24pIHtcbiAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGVmZmVjdCk7XG4gICAgfVxuXG4gICAgZWZmZWN0ID0gbmV4dE5leHRFZmZlY3Q7XG4gIH1cblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICAgIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAge1xuICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7IC8vIElmIGFkZGl0aW9uYWwgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgc2NoZWR1bGVkLCBpbmNyZW1lbnQgYSBjb3VudGVyLiBJZiB0aGlzXG4gIC8vIGV4Y2VlZHMgdGhlIGxpbWl0LCB3ZSdsbCBmaXJlIGEgd2FybmluZy5cblxuICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9PT0gbnVsbCA/IDAgOiBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgKyAxO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkge1xuICByZXR1cm4gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgIT09IG51bGwgJiYgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuaGFzKGluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQoaW5zdGFuY2UpIHtcbiAgaWYgKGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID09PSBudWxsKSB7XG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBuZXcgU2V0KFtpbnN0YW5jZV0pO1xuICB9IGVsc2Uge1xuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmFkZChpbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvVGhyb3dVbmNhdWdodEVycm9yKGVycm9yKSB7XG4gIGlmICghaGFzVW5jYXVnaHRFcnJvcikge1xuICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSB0cnVlO1xuICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59XG5cbnZhciBvblVuY2F1Z2h0RXJyb3IgPSBwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3I7XG5cbmZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHJvb3RGaWJlciwgc291cmNlRmliZXIsIGVycm9yKSB7XG4gIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUocm9vdEZpYmVyLCBlcnJvckluZm8sIFN5bmNMYW5lKTtcbiAgZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIHVwZGF0ZSk7XG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qocm9vdEZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgU3luY0xhbmUsIGV2ZW50VGltZSk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIFN5bmNMYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAvLyBFcnJvciB3YXMgdGhyb3duIGF0IHRoZSByb290LiBUaGVyZSBpcyBubyBwYXJlbnQsIHNvIHRoZSByb290XG4gICAgLy8gaXRzZWxmIHNob3VsZCBjYXB0dXJlIGl0LlxuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHNvdXJjZUZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmaWJlciA9IHNvdXJjZUZpYmVyLnJldHVybjtcblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICBpZiAoZmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3QoZmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICB2YXIgY3RvciA9IGZpYmVyLnR5cGU7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkge1xuICAgICAgICB2YXIgZXJyb3JJbmZvID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZShlcnJvciwgc291cmNlRmliZXIpO1xuICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBTeW5jTGFuZSk7XG4gICAgICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICAgIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSwgZXZlbnRUaW1lKTtcbiAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICAgICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgU3luY0xhbmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoaXMgY29tcG9uZW50IGhhcyBhbHJlYWR5IGJlZW4gdW5tb3VudGVkLlxuICAgICAgICAgIC8vIFdlIGNhbid0IHNjaGVkdWxlIGFueSBmb2xsb3cgdXAgd29yayBmb3IgdGhlIHJvb3QgYmVjYXVzZSB0aGUgZmliZXIgaXMgYWxyZWFkeSB1bm1vdW50ZWQsXG4gICAgICAgICAgLy8gYnV0IHdlIGNhbiBzdGlsbCBjYWxsIHRoZSBsb2ctb25seSBib3VuZGFyeSBzbyB0aGUgZXJyb3IgaXNuJ3Qgc3dhbGxvd2VkLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVE9ETyBUaGlzIGlzIG9ubHkgYSB0ZW1wb3JhcnkgYmFuZGFpZCBmb3IgdGhlIG9sZCByZWNvbmNpbGVyIGZvcmsuXG4gICAgICAgICAgLy8gV2UgY2FuIGRlbGV0ZSB0aGlzIHNwZWNpYWwgY2FzZSBvbmNlIHRoZSBuZXcgZm9yayBpcyBtZXJnZWQuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoKGVycm9yLCBlcnJvckluZm8pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3JUb0lnbm9yZSkgey8vIFRPRE8gSWdub3JlIHRoaXMgZXJyb3I/IFJldGhyb3cgaXQ/XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMga2luZCBvZiBhbiBlZGdlIGNhc2UuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpYmVyID0gZmliZXIucmV0dXJuO1xuICB9XG59XG5mdW5jdGlvbiBwaW5nU3VzcGVuZGVkUm9vdChyb290LCB3YWtlYWJsZSwgcGluZ2VkTGFuZXMpIHtcbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuXG4gIGlmIChwaW5nQ2FjaGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgd2FrZWFibGUgcmVzb2x2ZWQsIHNvIHdlIG5vIGxvbmdlciBuZWVkIHRvIG1lbW9pemUsIGJlY2F1c2UgaXQgd2lsbFxuICAgIC8vIG5ldmVyIGJlIHRocm93biBhZ2Fpbi5cbiAgICBwaW5nQ2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIG1hcmtSb290UGluZ2VkKHJvb3QsIHBpbmdlZExhbmVzKTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ID09PSByb290ICYmIGlzU3Vic2V0T2ZMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcywgcGluZ2VkTGFuZXMpKSB7XG4gICAgLy8gUmVjZWl2ZWQgYSBwaW5nIGF0IHRoZSBzYW1lIHByaW9yaXR5IGxldmVsIGF0IHdoaWNoIHdlJ3JlIGN1cnJlbnRseVxuICAgIC8vIHJlbmRlcmluZy4gV2UgbWlnaHQgd2FudCB0byByZXN0YXJ0IHRoaXMgcmVuZGVyLiBUaGlzIHNob3VsZCBtaXJyb3JcbiAgICAvLyB0aGUgbG9naWMgb2Ygd2hldGhlciBvciBub3QgYSByb290IHN1c3BlbmRzIG9uY2UgaXQgY29tcGxldGVzLlxuICAgIC8vIFRPRE86IElmIHdlJ3JlIHJlbmRlcmluZyBzeW5jIGVpdGhlciBkdWUgdG8gU3luYywgQmF0Y2hlZCBvciBleHBpcmVkLFxuICAgIC8vIHdlIHNob3VsZCBwcm9iYWJseSBuZXZlciByZXN0YXJ0LlxuICAgIC8vIElmIHdlJ3JlIHN1c3BlbmRlZCB3aXRoIGRlbGF5LCBvciBpZiBpdCdzIGEgcmV0cnksIHdlJ2xsIGFsd2F5cyBzdXNwZW5kXG4gICAgLy8gc28gd2UgY2FuIGFsd2F5cyByZXN0YXJ0LlxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5IHx8IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQgJiYgaW5jbHVkZXNPbmx5UmV0cmllcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykgJiYgbm93KCkgLSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lIDwgRkFMTEJBQ0tfVEhST1RUTEVfTVMpIHtcbiAgICAgIC8vIFJlc3RhcnQgZnJvbSB0aGUgcm9vdC5cbiAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmVuIHRob3VnaCB3ZSBjYW4ndCByZXN0YXJ0IHJpZ2h0IG5vdywgd2UgbWlnaHQgZ2V0IGFuXG4gICAgICAvLyBvcHBvcnR1bml0eSBsYXRlci4gU28gd2UgbWFyayB0aGlzIHJlbmRlciBhcyBoYXZpbmcgYSBwaW5nLlxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzLCBwaW5nZWRMYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBwaW5nZWRMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpIHtcbiAgLy8gVGhlIGJvdW5kYXJ5IGZpYmVyIChhIFN1c3BlbnNlIGNvbXBvbmVudCBvciBTdXNwZW5zZUxpc3QgY29tcG9uZW50KVxuICAvLyBwcmV2aW91c2x5IHdhcyByZW5kZXJlZCBpbiBpdHMgZmFsbGJhY2sgc3RhdGUuIE9uZSBvZiB0aGUgcHJvbWlzZXMgdGhhdFxuICAvLyBzdXNwZW5kZWQgaXQgaGFzIHJlc29sdmVkLCB3aGljaCBtZWFucyBhdCBsZWFzdCBwYXJ0IG9mIHRoZSB0cmVlIHdhc1xuICAvLyBsaWtlbHkgdW5ibG9ja2VkLiBUcnkgcmVuZGVyaW5nIGFnYWluLCBhdCBhIG5ldyBleHBpcmF0aW9uIHRpbWUuXG4gIGlmIChyZXRyeUxhbmUgPT09IE5vTGFuZSkge1xuICAgIHJldHJ5TGFuZSA9IHJlcXVlc3RSZXRyeUxhbmUoYm91bmRhcnlGaWJlcik7XG4gIH0gLy8gVE9ETzogU3BlY2lhbCBjYXNlIGlkbGUgcHJpb3JpdHk/XG5cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgcmV0cnlMYW5lLCBldmVudFRpbWUpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCByZXRyeUxhbmUpO1xuICB9XG59XG5mdW5jdGlvbiByZXNvbHZlUmV0cnlXYWtlYWJsZShib3VuZGFyeUZpYmVyLCB3YWtlYWJsZSkge1xuICB2YXIgcmV0cnlMYW5lID0gTm9MYW5lOyAvLyBEZWZhdWx0XG5cbiAgdmFyIHJldHJ5Q2FjaGU7XG5cbiAge1xuICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgfVxuXG4gIGlmIChyZXRyeUNhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHdha2VhYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcmV0cnlDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICB9XG5cbiAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG59IC8vIENvbXB1dGVzIHRoZSBuZXh0IEp1c3QgTm90aWNlYWJsZSBEaWZmZXJlbmNlIChKTkQpIGJvdW5kYXJ5LlxuLy8gVGhlIHRoZW9yeSBpcyB0aGF0IGEgcGVyc29uIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzbWFsbCBkaWZmZXJlbmNlcyBpbiB0aW1lLlxuLy8gVGhlcmVmb3JlLCBpZiB3ZSB3YWl0IGEgYml0IGxvbmdlciB0aGFuIG5lY2Vzc2FyeSB0aGF0IHdvbid0IHRyYW5zbGF0ZSB0byBhIG5vdGljZWFibGVcbi8vIGRpZmZlcmVuY2UgaW4gdGhlIGV4cGVyaWVuY2UuIEhvd2V2ZXIsIHdhaXRpbmcgZm9yIGxvbmdlciBtaWdodCBtZWFuIHRoYXQgd2UgY2FuIGF2b2lkXG4vLyBzaG93aW5nIGFuIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBUaGUgbG9uZ2VyIHdlIGhhdmUgYWxyZWFkeSB3YWl0ZWQsIHRoZSBoYXJkZXIgaXRcbi8vIGlzIHRvIHRlbGwgc21hbGwgZGlmZmVyZW5jZXMgaW4gdGltZS4gVGhlcmVmb3JlLCB0aGUgbG9uZ2VyIHdlJ3ZlIGFscmVhZHkgd2FpdGVkLFxuLy8gdGhlIGxvbmdlciB3ZSBjYW4gd2FpdCBhZGRpdGlvbmFsbHkuIEF0IHNvbWUgcG9pbnQgd2UgaGF2ZSB0byBnaXZlIHVwIHRob3VnaC5cbi8vIFdlIHBpY2sgYSB0cmFpbiBtb2RlbCB3aGVyZSB0aGUgbmV4dCBib3VuZGFyeSBjb21taXRzIGF0IGEgY29uc2lzdGVudCBzY2hlZHVsZS5cbi8vIFRoZXNlIHBhcnRpY3VsYXIgbnVtYmVycyBhcmUgdmFndWUgZXN0aW1hdGVzLiBXZSBleHBlY3QgdG8gYWRqdXN0IHRoZW0gYmFzZWQgb24gcmVzZWFyY2guXG5cbmZ1bmN0aW9uIGpuZCh0aW1lRWxhcHNlZCkge1xuICByZXR1cm4gdGltZUVsYXBzZWQgPCAxMjAgPyAxMjAgOiB0aW1lRWxhcHNlZCA8IDQ4MCA/IDQ4MCA6IHRpbWVFbGFwc2VkIDwgMTA4MCA/IDEwODAgOiB0aW1lRWxhcHNlZCA8IDE5MjAgPyAxOTIwIDogdGltZUVsYXBzZWQgPCAzMDAwID8gMzAwMCA6IHRpbWVFbGFwc2VkIDwgNDMyMCA/IDQzMjAgOiBjZWlsKHRpbWVFbGFwc2VkIC8gMTk2MCkgKiAxOTYwO1xufVxuXG5mdW5jdGlvbiBjaGVja0Zvck5lc3RlZFVwZGF0ZXMoKSB7XG4gIGlmIChuZXN0ZWRVcGRhdGVDb3VudCA+IE5FU1RFRF9VUERBVEVfTElNSVQpIHtcbiAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IHJlcGVhdGVkbHkgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIGNvbXBvbmVudFdpbGxVcGRhdGUgb3IgY29tcG9uZW50RGlkVXBkYXRlLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiBuZXN0ZWQgdXBkYXRlcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPiBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQpIHtcbiAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7XG5cbiAgICAgIGVycm9yKCdNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgJyArIFwiY2FsbHMgc2V0U3RhdGUgaW5zaWRlIHVzZUVmZmVjdCwgYnV0IHVzZUVmZmVjdCBlaXRoZXIgZG9lc24ndCBcIiArICdoYXZlIGEgZGVwZW5kZW5jeSBhcnJheSwgb3Igb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlcyBvbiAnICsgJ2V2ZXJ5IHJlbmRlci4nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCkge1xuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZygpO1xuXG4gICAge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MoKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBudWxsO1xuXG5mdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBXZSBsZXQgdGhlIG90aGVyIHdhcm5pbmcgYWJvdXQgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgZGVhbCB3aXRoIHRoaXMgb25lLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKGZpYmVyLm1vZGUgJiAoQmxvY2tpbmdNb2RlIHwgQ29uY3VycmVudE1vZGUpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG5cbiAgICBpZiAodGFnICE9PSBJbmRldGVybWluYXRlQ29tcG9uZW50ICYmIHRhZyAhPT0gSG9zdFJvb3QgJiYgdGFnICE9PSBDbGFzc0NvbXBvbmVudCAmJiB0YWcgIT09IEZ1bmN0aW9uQ29tcG9uZW50ICYmIHRhZyAhPT0gRm9yd2FyZFJlZiAmJiB0YWcgIT09IE1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBTaW1wbGVNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gQmxvY2spIHtcbiAgICAgIC8vIE9ubHkgd2FybiBmb3IgdXNlci1kZWZpbmVkIGNvbXBvbmVudHMsIG5vdCBpbnRlcm5hbCBvbmVzIGxpa2UgU3VzcGVuc2UuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBzaG93IHRoZSB3aG9sZSBzdGFjayBidXQgZGVkdXBlIG9uIHRoZSB0b3AgY29tcG9uZW50J3MgbmFtZSBiZWNhdXNlXG4gICAgLy8gdGhlIHByb2JsZW1hdGljIGNvZGUgYWxtb3N0IGFsd2F5cyBsaWVzIGluc2lkZSB0aGF0IGNvbXBvbmVudC5cblxuXG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdSZWFjdENvbXBvbmVudCc7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBuZXcgU2V0KFtjb21wb25lbnROYW1lXSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgIGVycm9yKFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhIGNvbXBvbmVudCB0aGF0IGhhc24ndCBtb3VudGVkIHlldC4gXCIgKyAnVGhpcyBpbmRpY2F0ZXMgdGhhdCB5b3UgaGF2ZSBhIHNpZGUtZWZmZWN0IGluIHlvdXIgcmVuZGVyIGZ1bmN0aW9uIHRoYXQgJyArICdhc3luY2hyb25vdXNseSBsYXRlciBjYWxscyB0cmllcyB0byB1cGRhdGUgdGhlIGNvbXBvbmVudC4gTW92ZSB0aGlzIHdvcmsgdG8gJyArICd1c2VFZmZlY3QgaW5zdGVhZC4nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSBudWxsO1xuXG5mdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPblVubW91bnRlZEZpYmVySW5ERVYoZmliZXIpIHtcbiAge1xuICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG5cbiAgICBpZiAodGFnICE9PSBIb3N0Um9vdCAmJiB0YWcgIT09IENsYXNzQ29tcG9uZW50ICYmIHRhZyAhPT0gRnVuY3Rpb25Db21wb25lbnQgJiYgdGFnICE9PSBGb3J3YXJkUmVmICYmIHRhZyAhPT0gTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IFNpbXBsZU1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBCbG9jaykge1xuICAgICAgLy8gT25seSB3YXJuIGZvciB1c2VyLWRlZmluZWQgY29tcG9uZW50cywgbm90IGludGVybmFsIG9uZXMgbGlrZSBTdXNwZW5zZS5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHRoZXJlIGFyZSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyB1bm1vdW50cyBmb3IgdGhpcyBGaWJlcixcbiAgICAvLyB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhleSB3b3VsZCBoYXZlIHByZXZlbnRlZCB0aGlzIHVwZGF0ZS5cblxuXG4gICAgaWYgKChmaWJlci5mbGFncyAmIFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldikgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIHNob3cgdGhlIHdob2xlIHN0YWNrIGJ1dCBkZWR1cGUgb24gdGhlIHRvcCBjb21wb25lbnQncyBuYW1lIGJlY2F1c2VcbiAgICAvLyB0aGUgcHJvYmxlbWF0aWMgY29kZSBhbG1vc3QgYWx3YXlzIGxpZXMgaW5zaWRlIHRoYXQgY29tcG9uZW50LlxuXG5cbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1JlYWN0Q29tcG9uZW50JztcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0gbmV3IFNldChbY29tcG9uZW50TmFtZV0pO1xuICAgIH1cblxuICAgIGlmIChpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMpIDsgZWxzZSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgZXJyb3IoXCJDYW4ndCBwZXJmb3JtIGEgUmVhY3Qgc3RhdGUgdXBkYXRlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuIFRoaXMgXCIgKyAnaXMgYSBuby1vcCwgYnV0IGl0IGluZGljYXRlcyBhIG1lbW9yeSBsZWFrIGluIHlvdXIgYXBwbGljYXRpb24uIFRvICcgKyAnZml4LCBjYW5jZWwgYWxsIHN1YnNjcmlwdGlvbnMgYW5kIGFzeW5jaHJvbm91cyB0YXNrcyBpbiAlcy4nLCB0YWcgPT09IENsYXNzQ29tcG9uZW50ID8gJ3RoZSBjb21wb25lbnRXaWxsVW5tb3VudCBtZXRob2QnIDogJ2EgdXNlRWZmZWN0IGNsZWFudXAgZnVuY3Rpb24nKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBiZWdpbldvcmskMTtcblxue1xuICB2YXIgZHVtbXlGaWJlciA9IG51bGw7XG5cbiAgYmVnaW5Xb3JrJDEgPSBmdW5jdGlvbiAoY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpIHtcbiAgICAvLyBJZiBhIGNvbXBvbmVudCB0aHJvd3MgYW4gZXJyb3IsIHdlIHJlcGxheSBpdCBhZ2FpbiBpbiBhIHN5bmNocm9ub3VzbHlcbiAgICAvLyBkaXNwYXRjaGVkIGV2ZW50LCBzbyB0aGF0IHRoZSBkZWJ1Z2dlciB3aWxsIHRyZWF0IGl0IGFzIGFuIHVuY2F1Z2h0XG4gICAgLy8gZXJyb3IgU2VlIFJlYWN0RXJyb3JVdGlscyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjb3B5IHRoZSB3b3JrLWluLXByb2dyZXNzIG9udG8gYSBkdW1teVxuICAgIC8vIGZpYmVyLiBJZiBiZWdpbldvcmsgdGhyb3dzLCB3ZSdsbCB1c2UgdGhpcyB0byByZXNldCB0aGUgc3RhdGUuXG4gICAgdmFyIG9yaWdpbmFsV29ya0luUHJvZ3Jlc3NDb3B5ID0gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYoZHVtbXlGaWJlciwgdW5pdE9mV29yayk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGJlZ2luV29yayhjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcyk7XG4gICAgfSBjYXRjaCAob3JpZ2luYWxFcnJvcikge1xuICAgICAgaWYgKG9yaWdpbmFsRXJyb3IgIT09IG51bGwgJiYgdHlwZW9mIG9yaWdpbmFsRXJyb3IgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcmlnaW5hbEVycm9yLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRG9uJ3QgcmVwbGF5IHByb21pc2VzLiBUcmVhdCBldmVyeXRoaW5nIGVsc2UgbGlrZSBhbiBlcnJvci5cbiAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgIH0gLy8gS2VlcCB0aGlzIGNvZGUgaW4gc3luYyB3aXRoIGhhbmRsZUVycm9yOyBhbnkgY2hhbmdlcyBoZXJlIG11c3QgaGF2ZVxuICAgICAgLy8gY29ycmVzcG9uZGluZyBjaGFuZ2VzIHRoZXJlLlxuXG5cbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgcmVzZXRIb29rc0FmdGVyVGhyb3coKTsgLy8gRG9uJ3QgcmVzZXQgY3VycmVudCBkZWJ1ZyBmaWJlciwgc2luY2Ugd2UncmUgYWJvdXQgdG8gd29yayBvbiB0aGVcbiAgICAgIC8vIHNhbWUgZmliZXIgYWdhaW4uXG4gICAgICAvLyBVbndpbmQgdGhlIGZhaWxlZCBzdGFjayBmcmFtZVxuXG4gICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsodW5pdE9mV29yayk7IC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb3BlcnRpZXMgb2YgdGhlIGZpYmVyLlxuXG4gICAgICBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVih1bml0T2ZXb3JrLCBvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSk7XG5cbiAgICAgIGlmICggdW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgLy8gUmVzZXQgdGhlIHByb2ZpbGVyIHRpbWVyLlxuICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgICB9IC8vIFJ1biBiZWdpbldvcmsgYWdhaW4uXG5cblxuICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGJlZ2luV29yaywgbnVsbCwgY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpO1xuXG4gICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICB2YXIgcmVwbGF5RXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7IC8vIGBpbnZva2VHdWFyZGVkQ2FsbGJhY2tgIHNvbWV0aW1lcyBzZXRzIGFuIGV4cGFuZG8gYF9zdXBwcmVzc0xvZ2dpbmdgLlxuICAgICAgICAvLyBSZXRocm93IHRoaXMgZXJyb3IgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgb25lLlxuXG4gICAgICAgIHRocm93IHJlcGxheUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBicmFuY2ggaXMgcmVhY2hhYmxlIGlmIHRoZSByZW5kZXIgcGhhc2UgaXMgaW1wdXJlLlxuICAgICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gZmFsc2U7XG52YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50O1xuXG57XG4gIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbn1cblxuZnVuY3Rpb24gd2FybkFib3V0UmVuZGVyUGhhc2VVcGRhdGVzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmIChpc1JlbmRlcmluZyAmJiAoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgIWdldElzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2VJbkRFVigpKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSA9IHdvcmtJblByb2dyZXNzICYmIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ1Vua25vd24nOyAvLyBEZWR1cGUgYnkgdGhlIHJlbmRlcmluZyBjb21wb25lbnQgYmVjYXVzZSBpdCdzIHRoZSBvbmUgdGhhdCBuZWVkcyB0byBiZSBmaXhlZC5cblxuICAgICAgICAgICAgdmFyIGRlZHVwZUtleSA9IHJlbmRlcmluZ0NvbXBvbmVudE5hbWU7XG5cbiAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50LmhhcyhkZWR1cGVLZXkpKSB7XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5hZGQoZGVkdXBlS2V5KTtcbiAgICAgICAgICAgICAgdmFyIHNldFN0YXRlQ29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nO1xuXG4gICAgICAgICAgICAgIGVycm9yKCdDYW5ub3QgdXBkYXRlIGEgY29tcG9uZW50IChgJXNgKSB3aGlsZSByZW5kZXJpbmcgYSAnICsgJ2RpZmZlcmVudCBjb21wb25lbnQgKGAlc2ApLiBUbyBsb2NhdGUgdGhlIGJhZCBzZXRTdGF0ZSgpIGNhbGwgaW5zaWRlIGAlc2AsICcgKyAnZm9sbG93IHRoZSBzdGFjayB0cmFjZSBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NldHN0YXRlLWluLXJlbmRlcicsIHNldFN0YXRlQ29tcG9uZW50TmFtZSwgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSwgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIpIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCB1cGRhdGUgZHVyaW5nIGFuIGV4aXN0aW5nIHN0YXRlIHRyYW5zaXRpb24gKHN1Y2ggYXMgJyArICd3aXRoaW4gYHJlbmRlcmApLiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlICcgKyAnZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLicpO1xuXG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyBhICdzaGFyZWQnIHZhcmlhYmxlIHRoYXQgY2hhbmdlcyB3aGVuIGFjdCgpIG9wZW5zL2Nsb3NlcyBpbiB0ZXN0cy5cblxuXG52YXIgSXNUaGlzUmVuZGVyZXJBY3RpbmcgPSB7XG4gIGN1cnJlbnQ6IGZhbHNlXG59O1xuZnVuY3Rpb24gd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIElzU29tZVJlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IHRydWUgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCAhPT0gdHJ1ZSkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIHdyb25nIGFjdCgpIGFyb3VuZCB5b3VyIHRlc3QgaW50ZXJhY3Rpb25zLlxcblwiICsgJ0JlIHN1cmUgdG8gdXNlIHRoZSBtYXRjaGluZyB2ZXJzaW9uIG9mIGFjdCgpIGNvcnJlc3BvbmRpbmcgdG8geW91ciByZW5kZXJlcjpcXG5cXG4nICsgJy8vIGZvciByZWFjdC1kb206XFxuJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICdpbXBvcnQge2FjdH0gZnInICsgXCJvbSAncmVhY3QtZG9tL3Rlc3QtdXRpbHMnO1xcblwiICsgJy8vIC4uLlxcbicgKyAnYWN0KCgpID0+IC4uLik7XFxuXFxuJyArICcvLyBmb3IgcmVhY3QtdGVzdC1yZW5kZXJlcjpcXG4nICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgJ2ltcG9ydCBUZXN0UmVuZGVyZXIgZnInICsgXCJvbSByZWFjdC10ZXN0LXJlbmRlcmVyJztcXG5cIiArICdjb25zdCB7YWN0fSA9IFRlc3RSZW5kZXJlcjtcXG4nICsgJy8vIC4uLlxcbicgKyAnYWN0KCgpID0+IC4uLik7Jyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSkgIT09IE5vTW9kZSAmJiBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgZXJyb3IoJ0FuIHVwZGF0ZSB0byAlcyByYW4gYW4gZWZmZWN0LCBidXQgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbicgKyAnV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlICcgKyAnd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbicgKyAnYWN0KCgpID0+IHtcXG4nICsgJyAgLyogZmlyZSBldmVudHMgdGhhdCB1cGRhdGUgc3RhdGUgKi9cXG4nICsgJ30pO1xcbicgKyAnLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG4nICsgXCJUaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIFwiICsgJ2luIHRoZSBicm93c2VyLicgKyAnIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3QnLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCAmJiBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKCdBbiB1cGRhdGUgdG8gJXMgaW5zaWRlIGEgdGVzdCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuJyArICdXaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCBjYXVzZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBzaG91bGQgYmUgJyArICd3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuJyArICdhY3QoKCkgPT4ge1xcbicgKyAnICAvKiBmaXJlIGV2ZW50cyB0aGF0IHVwZGF0ZSBzdGF0ZSAqL1xcbicgKyAnfSk7XFxuJyArICcvKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcbicgKyBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgKyAnaW4gdGhlIGJyb3dzZXIuJyArICcgTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdCcsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRldiA9IHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRFVjsgLy8gSW4gdGVzdHMsIHdlIHdhbnQgdG8gZW5mb3JjZSBhIG1vY2tlZCBzY2hlZHVsZXIuXG5cbnZhciBkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9IGZhbHNlOyAvLyBUT0RPIEJlZm9yZSB3ZSByZWxlYXNlIGNvbmN1cnJlbnQgbW9kZSwgcmV2aXNpdCB0aGlzIGFuZCBkZWNpZGUgd2hldGhlciBhIG1vY2tlZFxuLy8gc2NoZWR1bGVyIGlzIHRoZSBhY3R1YWwgcmVjb21tZW5kYXRpb24uIFRoZSBhbHRlcm5hdGl2ZSBjb3VsZCBiZSBhIHRlc3RpbmcgYnVpbGQsXG4vLyBhIG5ldyBsaWIsIG9yIHdoYXRldmVyOyB3ZSBkdW5ubyBqdXN0IHlldC4gVGhpcyBtZXNzYWdlIGlzIGZvciBlYXJseSBhZG9wdGVyc1xuLy8gdG8gZ2V0IHRoZWlyIHRlc3RzIHJpZ2h0LlxuXG5mdW5jdGlvbiB3YXJuSWZVbm1vY2tlZFNjaGVkdWxlcihmaWJlcikge1xuICB7XG4gICAgaWYgKGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID09PSBmYWxzZSAmJiBTY2hlZHVsZXIudW5zdGFibGVfZmx1c2hBbGxXaXRob3V0QXNzZXJ0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChmaWJlci5tb2RlICYgQmxvY2tpbmdNb2RlIHx8IGZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ0luIENvbmN1cnJlbnQgb3IgU3luYyBtb2RlcywgdGhlIFwic2NoZWR1bGVyXCIgbW9kdWxlIG5lZWRzIHRvIGJlIG1vY2tlZCAnICsgJ3RvIGd1YXJhbnRlZSBjb25zaXN0ZW50IGJlaGF2aW91ciBhY3Jvc3MgdGVzdHMgYW5kIGJyb3dzZXJzLiAnICsgJ0ZvciBleGFtcGxlLCB3aXRoIGplc3Q6IFxcbicgKyAvLyBCcmVhayB1cCByZXF1aXJlcyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgXCJqZXN0Lm1vY2soJ3NjaGVkdWxlcicsICgpID0+IHJlcXVpcmVcIiArIFwiKCdzY2hlZHVsZXIvdW5zdGFibGVfbW9jaycpKTtcXG5cXG5cIiArICdGb3IgbW9yZSBpbmZvLCB2aXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvbW9jay1zY2hlZHVsZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZVRocmVhZElEKHJvb3QsIGxhbmUpIHtcbiAgLy8gSW50ZXJhY3Rpb24gdGhyZWFkcyBhcmUgdW5pcXVlIHBlciByb290IGFuZCBleHBpcmF0aW9uIHRpbWUuXG4gIC8vIE5PVEU6IEludGVudGlvbmFsbHkgdW5zb3VuZCBjYXN0LiBBbGwgdGhhdCBtYXR0ZXJzIGlzIHRoYXQgaXQncyBhIG51bWJlclxuICAvLyBhbmQgaXQgcmVwcmVzZW50cyBhIGJhdGNoIG9mIHdvcmsuIENvdWxkIG1ha2UgYSBoZWxwZXIgZnVuY3Rpb24gaW5zdGVhZCxcbiAgLy8gYnV0IG1laCB0aGlzIGlzIGZpbmUgZm9yIG5vdy5cbiAgcmV0dXJuIGxhbmUgKiAxMDAwICsgcm9vdC5pbnRlcmFjdGlvblRocmVhZElEO1xufVxuXG5mdW5jdGlvbiBtYXJrU3Bhd25lZFdvcmsobGFuZSkge1xuXG4gIGlmIChzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9PT0gbnVsbCkge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gW2xhbmVdO1xuICB9IGVsc2Uge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyLnB1c2gobGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSwgaW50ZXJhY3Rpb25zKSB7XG5cbiAgaWYgKGludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcDtcbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9ucyA9IHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5nZXQobGFuZSk7XG5cbiAgICBpZiAocGVuZGluZ0ludGVyYWN0aW9ucyAhPSBudWxsKSB7XG4gICAgICBpbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaWYgKCFwZW5kaW5nSW50ZXJhY3Rpb25zLmhhcyhpbnRlcmFjdGlvbikpIHtcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgcHJldmlvdXNseSB1bnNjaGVkdWxlZCBpbnRlcmFjdGlvbi5cbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICBwZW5kaW5nSW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLnNldChsYW5lLCBuZXcgU2V0KGludGVyYWN0aW9ucykpOyAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuXG4gICAgICBpbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lKTtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSkge1xuXG4gIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUsIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcykge1xuICAvLyB3ZSBjYW4gYWNjdXJhdGVseSBhdHRyaWJ1dGUgdGltZSBzcGVudCB3b3JraW5nIG9uIGl0LCBBbmQgc28gdGhhdCBjYXNjYWRpbmdcbiAgLy8gd29yayB0cmlnZ2VyZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2Ugd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggaXQuXG5cblxuICB2YXIgaW50ZXJhY3Rpb25zID0gbmV3IFNldCgpO1xuICByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsZWRJbnRlcmFjdGlvbnMsIHNjaGVkdWxlZExhbmUpIHtcbiAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShsYW5lcywgc2NoZWR1bGVkTGFuZSkpIHtcbiAgICAgIHNjaGVkdWxlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICByZXR1cm4gaW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pOyAvLyBTdG9yZSB0aGUgY3VycmVudCBzZXQgb2YgaW50ZXJhY3Rpb25zIG9uIHRoZSBGaWJlclJvb3QgZm9yIGEgZmV3IHJlYXNvbnM6XG4gIC8vIFdlIGNhbiByZS11c2UgaXQgaW4gaG90IGZ1bmN0aW9ucyBsaWtlIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdCgpXG4gIC8vIHdpdGhvdXQgaGF2aW5nIHRvIHJlY2FsY3VsYXRlIGl0LiBXZSB3aWxsIGFsc28gdXNlIGl0IGluIGNvbW1pdFdvcmsoKSB0b1xuICAvLyBwYXNzIHRvIGFueSBQcm9maWxlciBvblJlbmRlcigpIGhvb2tzLiBUaGlzIGFsc28gcHJvdmlkZXMgRGV2VG9vbHMgd2l0aCBhXG4gIC8vIHdheSB0byBhY2Nlc3MgaXQgd2hlbiB0aGUgb25Db21taXRSb290KCkgaG9vayBpcyBjYWxsZWQuXG5cbiAgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyA9IGludGVyYWN0aW9ucztcblxuICBpZiAoaW50ZXJhY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgdmFyIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGNvbW1pdHRlZExhbmVzKSB7XG5cbiAgdmFyIHJlbWFpbmluZ0xhbmVzQWZ0ZXJDb21taXQgPSByb290LnBlbmRpbmdMYW5lcztcbiAgdmFyIHN1YnNjcmliZXI7XG5cbiAgdHJ5IHtcbiAgICBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICAgIC8vIEZJWE1FOiBNb3JlIHRoYW4gb25lIGxhbmUgY2FuIGZpbmlzaCBpbiBhIHNpbmdsZSBjb21taXQuXG4gICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQocm9vdCwgY29tbWl0dGVkTGFuZXMpO1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgIHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gQ2xlYXIgY29tcGxldGVkIGludGVyYWN0aW9ucyBmcm9tIHRoZSBwZW5kaW5nIE1hcC5cbiAgICAvLyBVbmxlc3MgdGhlIHJlbmRlciB3YXMgc3VzcGVuZGVkIG9yIGNhc2NhZGluZyB3b3JrIHdhcyBzY2hlZHVsZWQsXG4gICAgLy8gSW4gd2hpY2ggY2FzZVx1MjAxMyBsZWF2ZSBwZW5kaW5nIGludGVyYWN0aW9ucyB1bnRpbCB0aGUgc3Vic2VxdWVudCByZW5kZXIuXG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwO1xuICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsZWRJbnRlcmFjdGlvbnMsIGxhbmUpIHtcbiAgICAgIC8vIE9ubHkgZGVjcmVtZW50IHRoZSBwZW5kaW5nIGludGVyYWN0aW9uIGNvdW50IGlmIHdlJ3JlIGRvbmUuXG4gICAgICAvLyBJZiB0aGVyZSdzIHN0aWxsIHdvcmsgYXQgdGhlIGN1cnJlbnQgcHJpb3JpdHksXG4gICAgICAvLyBUaGF0IGluZGljYXRlcyB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBzdXNwZW5zZSBkYXRhLlxuICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbWFpbmluZ0xhbmVzQWZ0ZXJDb21taXQsIGxhbmUpKSB7XG4gICAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5kZWxldGUobGFuZSk7XG4gICAgICAgIHNjaGVkdWxlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgICAgICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSAvLyBgYWN0YCB0ZXN0aW5nIEFQSVxuXG5mdW5jdGlvbiBzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSB7XG4gIC8vIE5ldmVyIGZvcmNlIGZsdXNoIGluIHByb2R1Y3Rpb24uIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGdldCBzdHJpcHBlZCBvdXQuXG4gIHJldHVybiAgYWN0aW5nVXBkYXRlc1Njb3BlRGVwdGggPiAwO1xufVxuLy8gc28gd2UgY2FuIHRlbGwgaWYgYW55IGFzeW5jIGFjdCgpIGNhbGxzIHRyeSB0byBydW4gaW4gcGFyYWxsZWwuXG5cblxudmFyIGFjdGluZ1VwZGF0ZXNTY29wZURlcHRoID0gMDtcblxuZnVuY3Rpb24gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpIHtcbiAgZmliZXIuc2libGluZyA9IG51bGw7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IG51bGw7XG59XG5cbnZhciByZXNvbHZlRmFtaWx5ID0gbnVsbDsgLy8gJEZsb3dGaXhNZSBGbG93IGdldHMgY29uZnVzZWQgYnkgYSBXZWFrU2V0IGZlYXR1cmUgY2hlY2sgYmVsb3cuXG5cbnZhciBmYWlsZWRCb3VuZGFyaWVzID0gbnVsbDtcbnZhciBzZXRSZWZyZXNoSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gIHtcbiAgICByZXNvbHZlRmFtaWx5ID0gaGFuZGxlcjtcbiAgfVxufTtcbmZ1bmN0aW9uIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuXG4gICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9IC8vIFVzZSB0aGUgbGF0ZXN0IGtub3duIGltcGxlbWVudGF0aW9uLlxuXG5cbiAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIC8vIE5vIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzLlxuICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgcmVhbCBmb3J3YXJkUmVmLiBEb24ndCB3YW50IHRvIGNyYXNoIGVhcmx5LlxuICAgICAgaWYgKHR5cGUgIT09IG51bGwgJiYgdHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBGb3J3YXJkUmVmIGlzIHNwZWNpYWwgYmVjYXVzZSBpdHMgcmVzb2x2ZWQgLnR5cGUgaXMgYW4gb2JqZWN0LFxuICAgICAgICAvLyBidXQgaXQncyBwb3NzaWJsZSB0aGF0IHdlIG9ubHkgaGF2ZSBpdHMgaW5uZXIgcmVuZGVyIGZ1bmN0aW9uIGluIHRoZSBtYXAuXG4gICAgICAgIC8vIElmIHRoYXQgaW5uZXIgcmVuZGVyIGZ1bmN0aW9uIGlzIGRpZmZlcmVudCwgd2UnbGwgYnVpbGQgYSBuZXcgZm9yd2FyZFJlZiB0eXBlLlxuICAgICAgICB2YXIgY3VycmVudFJlbmRlciA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlLnJlbmRlcik7XG5cbiAgICAgICAgaWYgKHR5cGUucmVuZGVyICE9PSBjdXJyZW50UmVuZGVyKSB7XG4gICAgICAgICAgdmFyIHN5bnRoZXRpY1R5cGUgPSB7XG4gICAgICAgICAgICAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSxcbiAgICAgICAgICAgIHJlbmRlcjogY3VycmVudFJlbmRlclxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzeW50aGV0aWNUeXBlLmRpc3BsYXlOYW1lID0gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3ludGhldGljVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9IC8vIFVzZSB0aGUgbGF0ZXN0IGtub3duIGltcGxlbWVudGF0aW9uLlxuXG5cbiAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhmaWJlciwgZWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHByZXZUeXBlID0gZmliZXIuZWxlbWVudFR5cGU7XG4gICAgdmFyIG5leHRUeXBlID0gZWxlbWVudC50eXBlOyAvLyBJZiB3ZSBnb3QgaGVyZSwgd2Uga25vdyB0eXBlcyBhcmVuJ3QgPT09IGVxdWFsLlxuXG4gICAgdmFyIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gZmFsc2U7XG4gICAgdmFyICQkdHlwZW9mTmV4dFR5cGUgPSB0eXBlb2YgbmV4dFR5cGUgPT09ICdvYmplY3QnICYmIG5leHRUeXBlICE9PSBudWxsID8gbmV4dFR5cGUuJCR0eXBlb2YgOiBudWxsO1xuXG4gICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5leHRUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV4dFR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB0aGUgaW5uZXIgdHlwZSB5ZXQuXG4gICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBhc3N1bWUgdGhhdCB0aGUgbGF6eSBpbm5lciB0eXBlIGlzIHN0YWJsZSxcbiAgICAgICAgICAgIC8vIGFuZCBzbyBpdCBpcyBzdWZmaWNpZW50IHRvIGF2b2lkIHJlY29uY2lsaW5nIGl0IGF3YXkuXG4gICAgICAgICAgICAvLyBXZSdyZSBub3QgZ29pbmcgdG8gdW53cmFwIG9yIGFjdHVhbGx5IHVzZSB0aGUgbmV3IGxhenkgdHlwZS5cbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgICAgICAgLy8gVE9ETzogaWYgaXQgd2FzIGJ1dCBjYW4gbm8gbG9uZ2VyIGJlIHNpbXBsZSxcbiAgICAgICAgICAgIC8vIHdlIHNob3VsZG4ndCBzZXQgdGhpcy5cbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIENoZWNrIGlmIGJvdGggdHlwZXMgaGF2ZSBhIGZhbWlseSBhbmQgaXQncyB0aGUgc2FtZSBvbmUuXG5cblxuICAgIGlmIChuZWVkc0NvbXBhcmVGYW1pbGllcykge1xuICAgICAgLy8gTm90ZTogbWVtbygpIGFuZCBmb3J3YXJkUmVmKCkgd2UnbGwgY29tcGFyZSBvdXRlciByYXRoZXIgdGhhbiBpbm5lciB0eXBlLlxuICAgICAgLy8gVGhpcyBtZWFucyBib3RoIG9mIHRoZW0gbmVlZCB0byBiZSByZWdpc3RlcmVkIHRvIHByZXNlcnZlIHN0YXRlLlxuICAgICAgLy8gSWYgd2UgdW53cmFwcGVkIGFuZCBjb21wYXJlZCB0aGUgaW5uZXIgdHlwZXMgZm9yIHdyYXBwZXJzIGluc3RlYWQsXG4gICAgICAvLyB0aGVuIHdlIHdvdWxkIHJpc2sgZmFsc2VseSBzYXlpbmcgdHdvIHNlcGFyYXRlIG1lbW8oRm9vKVxuICAgICAgLy8gY2FsbHMgYXJlIGVxdWl2YWxlbnQgYmVjYXVzZSB0aGV5IHdyYXAgdGhlIHNhbWUgRm9vIGZ1bmN0aW9uLlxuICAgICAgdmFyIHByZXZGYW1pbHkgPSByZXNvbHZlRmFtaWx5KHByZXZUeXBlKTtcblxuICAgICAgaWYgKHByZXZGYW1pbHkgIT09IHVuZGVmaW5lZCAmJiBwcmV2RmFtaWx5ID09PSByZXNvbHZlRmFtaWx5KG5leHRUeXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIFdlYWtTZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZmFpbGVkQm91bmRhcmllcyA9PT0gbnVsbCkge1xuICAgICAgZmFpbGVkQm91bmRhcmllcyA9IG5ldyBXZWFrU2V0KCk7XG4gICAgfVxuXG4gICAgZmFpbGVkQm91bmRhcmllcy5hZGQoZmliZXIpO1xuICB9XG59XG52YXIgc2NoZWR1bGVSZWZyZXNoID0gZnVuY3Rpb24gKHJvb3QsIHVwZGF0ZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHN0YWxlRmFtaWxpZXMgPSB1cGRhdGUuc3RhbGVGYW1pbGllcyxcbiAgICAgICAgdXBkYXRlZEZhbWlsaWVzID0gdXBkYXRlLnVwZGF0ZWRGYW1pbGllcztcbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgZmx1c2hTeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkocm9vdC5jdXJyZW50LCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH0pO1xuICB9XG59O1xudmFyIHNjaGVkdWxlUm9vdCA9IGZ1bmN0aW9uIChyb290LCBlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocm9vdC5jb250ZXh0ICE9PSBlbXB0eUNvbnRleHRPYmplY3QpIHtcbiAgICAgIC8vIFN1cGVyIGVkZ2UgY2FzZTogcm9vdCBoYXMgYSBsZWdhY3kgX3JlbmRlclN1YnRyZWUgY29udGV4dFxuICAgICAgLy8gYnV0IHdlIGRvbid0IGtub3cgdGhlIHBhcmVudENvbXBvbmVudCBzbyB3ZSBjYW4ndCBwYXNzIGl0LlxuICAgICAgLy8gSnVzdCBpZ25vcmUuIFdlJ2xsIGRlbGV0ZSB0aGlzIHdpdGggX3JlbmRlclN1YnRyZWUgY29kZSBwYXRoIGxhdGVyLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICBmbHVzaFN5bmMoZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIHJvb3QsIG51bGwsIG51bGwpO1xuICAgIH0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KGZpYmVyLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpIHtcbiAge1xuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGUsXG4gICAgICAgIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBjYW5kaWRhdGVUeXBlID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcmVzb2x2ZUZhbWlseSB0byBiZSBzZXQgZHVyaW5nIGhvdCByZWxvYWQuJyk7XG4gICAgfVxuXG4gICAgdmFyIG5lZWRzUmVuZGVyID0gZmFsc2U7XG4gICAgdmFyIG5lZWRzUmVtb3VudCA9IGZhbHNlO1xuXG4gICAgaWYgKGNhbmRpZGF0ZVR5cGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KGNhbmRpZGF0ZVR5cGUpO1xuXG4gICAgICBpZiAoZmFtaWx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHN0YWxlRmFtaWxpZXMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHVwZGF0ZWRGYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgIGlmICh0YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZWVkc1JlbmRlciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgIT09IG51bGwpIHtcbiAgICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzLmhhcyhmaWJlcikgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGZhaWxlZEJvdW5kYXJpZXMuaGFzKGFsdGVybmF0ZSkpIHtcbiAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmVlZHNSZW1vdW50KSB7XG4gICAgICBmaWJlci5fZGVidWdOZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChuZWVkc1JlbW91bnQgfHwgbmVlZHNSZW5kZXIpIHtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwgJiYgIW5lZWRzUmVtb3VudCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShjaGlsZCwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShzaWJsaW5nLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoID0gZnVuY3Rpb24gKHJvb3QsIGZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgaG9zdEluc3RhbmNlcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdHlwZXMgPSBuZXcgU2V0KGZhbWlsaWVzLm1hcChmdW5jdGlvbiAoZmFtaWx5KSB7XG4gICAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gICAgfSkpO1xuICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShyb290LmN1cnJlbnQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICByZXR1cm4gaG9zdEluc3RhbmNlcztcbiAgfVxufTtcblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KGZpYmVyLCB0eXBlcywgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBjYW5kaWRhdGVUeXBlID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGRpZE1hdGNoID0gZmFsc2U7XG5cbiAgICBpZiAoY2FuZGlkYXRlVHlwZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVzLmhhcyhjYW5kaWRhdGVUeXBlKSkge1xuICAgICAgICBkaWRNYXRjaCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpZE1hdGNoKSB7XG4gICAgICAvLyBXZSBoYXZlIGEgbWF0Y2guIFRoaXMgb25seSBkcmlsbHMgZG93biB0byB0aGUgY2xvc2VzdCBob3N0IGNvbXBvbmVudHMuXG4gICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gc2VhcmNoIGRlZXBlciBiZWNhdXNlIGZvciB0aGUgcHVycG9zZSBvZiBnaXZpbmdcbiAgICAgIC8vIHZpc3VhbCBmZWVkYmFjaywgXCJmbGFzaGluZ1wiIG91dGVybW9zdCBwYXJlbnQgcmVjdGFuZ2xlcyBpcyBzdWZmaWNpZW50LlxuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gbWF0Y2gsIG1heWJlIHRoZXJlIHdpbGwgYmUgb25lIGZ1cnRoZXIgZG93biBpbiB0aGUgY2hpbGQgdHJlZS5cbiAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoY2hpbGQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KHNpYmxpbmcsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGZvdW5kSG9zdEluc3RhbmNlcyA9IGZpbmRDaGlsZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG5cbiAgICBpZiAoZm91bmRIb3N0SW5zdGFuY2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnkgaG9zdCBjaGlsZHJlbiwgZmFsbGJhY2sgdG8gY2xvc2VzdCBob3N0IHBhcmVudC5cblxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIHJlYWNoIHJvb3QgZmlyc3QuJyk7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZENoaWxkSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuICAgIHZhciBmb3VuZEhvc3RJbnN0YW5jZXMgPSBmYWxzZTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgbWF0Y2guXG4gICAgICAgIGZvdW5kSG9zdEluc3RhbmNlcyA9IHRydWU7XG4gICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlKTsgLy8gVGhlcmUgbWF5IHN0aWxsIGJlIG1vcmUsIHNvIGtlZXAgc2VhcmNoaW5nLlxuICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmliZXIpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpYmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNCYWRNYXBQb2x5ZmlsbDtcblxue1xuICBoYXNCYWRNYXBQb2x5ZmlsbCA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgdmFyIG5vbkV4dGVuc2libGVPYmplY3QgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuXG4gICAgbmV3IE1hcChbW25vbkV4dGVuc2libGVPYmplY3QsIG51bGxdXSk7XG4gICAgbmV3IFNldChbbm9uRXh0ZW5zaWJsZU9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUT0RPOiBDb25zaWRlciB3YXJuaW5nIGFib3V0IGJhZCBwb2x5ZmlsbHNcbiAgICBoYXNCYWRNYXBQb2x5ZmlsbCA9IHRydWU7XG4gIH1cbn1cblxudmFyIGRlYnVnQ291bnRlciA9IDE7XG5cbmZ1bmN0aW9uIEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vIEluc3RhbmNlXG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmtleSA9IGtleTtcbiAgdGhpcy5lbGVtZW50VHlwZSA9IG51bGw7XG4gIHRoaXMudHlwZSA9IG51bGw7XG4gIHRoaXMuc3RhdGVOb2RlID0gbnVsbDsgLy8gRmliZXJcblxuICB0aGlzLnJldHVybiA9IG51bGw7XG4gIHRoaXMuY2hpbGQgPSBudWxsO1xuICB0aGlzLnNpYmxpbmcgPSBudWxsO1xuICB0aGlzLmluZGV4ID0gMDtcbiAgdGhpcy5yZWYgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcztcbiAgdGhpcy5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgdGhpcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHRoaXMubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHRoaXMuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgdGhpcy5tb2RlID0gbW9kZTsgLy8gRWZmZWN0c1xuXG4gIHRoaXMuZmxhZ3MgPSBOb0ZsYWdzO1xuICB0aGlzLm5leHRFZmZlY3QgPSBudWxsO1xuICB0aGlzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5sYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuYWx0ZXJuYXRlID0gbnVsbDtcblxuICB7XG4gICAgLy8gTm90ZTogVGhlIGZvbGxvd2luZyBpcyBkb25lIHRvIGF2b2lkIGEgdjggcGVyZm9ybWFuY2UgY2xpZmYuXG4gICAgLy9cbiAgICAvLyBJbml0aWFsaXppbmcgdGhlIGZpZWxkcyBiZWxvdyB0byBzbWlzIGFuZCBsYXRlciB1cGRhdGluZyB0aGVtIHdpdGhcbiAgICAvLyBkb3VibGUgdmFsdWVzIHdpbGwgY2F1c2UgRmliZXJzIHRvIGVuZCB1cCBoYXZpbmcgc2VwYXJhdGUgc2hhcGVzLlxuICAgIC8vIFRoaXMgYmVoYXZpb3IvYnVnIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBPYmplY3QucHJldmVudEV4dGVuc2lvbigpLlxuICAgIC8vIEZvcnR1bmF0ZWx5IHRoaXMgb25seSBpbXBhY3RzIERFViBidWlsZHMuXG4gICAgLy8gVW5mb3J0dW5hdGVseSBpdCBtYWtlcyBSZWFjdCB1bnVzYWJseSBzbG93IGZvciBzb21lIGFwcGxpY2F0aW9ucy5cbiAgICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzLCBpbml0aWFsaXplIHRoZSBmaWVsZHMgYmVsb3cgd2l0aCBkb3VibGVzLlxuICAgIC8vXG4gICAgLy8gTGVhcm4gbW9yZSBhYm91dCB0aGlzIGhlcmU6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDM2NVxuICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTg1MzhcbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IE51bWJlci5OYU47XG4gICAgdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOOyAvLyBJdCdzIG9rYXkgdG8gcmVwbGFjZSB0aGUgaW5pdGlhbCBkb3VibGVzIHdpdGggc21pcyBhZnRlciBpbml0aWFsaXphdGlvbi5cbiAgICAvLyBUaGlzIHdvbid0IHRyaWdnZXIgdGhlIHBlcmZvcm1hbmNlIGNsaWZmIG1lbnRpb25lZCBhYm92ZSxcbiAgICAvLyBhbmQgaXQgc2ltcGxpZmllcyBvdGhlciBwcm9maWxlciBjb2RlIChpbmNsdWRpbmcgRGV2VG9vbHMpLlxuXG4gICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gIH1cblxuICB7XG4gICAgLy8gVGhpcyBpc24ndCBkaXJlY3RseSB1c2VkIGJ1dCBpcyBoYW5keSBmb3IgZGVidWdnaW5nIGludGVybmFsczpcbiAgICB0aGlzLl9kZWJ1Z0lEID0gZGVidWdDb3VudGVyKys7XG4gICAgdGhpcy5fZGVidWdTb3VyY2UgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnT3duZXIgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnTmVlZHNSZW1vdW50ID0gZmFsc2U7XG4gICAgdGhpcy5fZGVidWdIb29rVHlwZXMgPSBudWxsO1xuXG4gICAgaWYgKCFoYXNCYWRNYXBQb2x5ZmlsbCAmJiB0eXBlb2YgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnModGhpcyk7XG4gICAgfVxuICB9XG59IC8vIFRoaXMgaXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgcmF0aGVyIHRoYW4gYSBQT0pPIGNvbnN0cnVjdG9yLCBzdGlsbFxuLy8gcGxlYXNlIGVuc3VyZSB3ZSBkbyB0aGUgZm9sbG93aW5nOlxuLy8gMSkgTm9ib2R5IHNob3VsZCBhZGQgYW55IGluc3RhbmNlIG1ldGhvZHMgb24gdGhpcy4gSW5zdGFuY2UgbWV0aG9kcyBjYW4gYmVcbi8vICAgIG1vcmUgZGlmZmljdWx0IHRvIHByZWRpY3Qgd2hlbiB0aGV5IGdldCBvcHRpbWl6ZWQgYW5kIHRoZXkgYXJlIGFsbW9zdFxuLy8gICAgbmV2ZXIgaW5saW5lZCBwcm9wZXJseSBpbiBzdGF0aWMgY29tcGlsZXJzLlxuLy8gMikgTm9ib2R5IHNob3VsZCByZWx5IG9uIGBpbnN0YW5jZW9mIEZpYmVyYCBmb3IgdHlwZSB0ZXN0aW5nLiBXZSBzaG91bGRcbi8vICAgIGFsd2F5cyBrbm93IHdoZW4gaXQgaXMgYSBmaWJlci5cbi8vIDMpIFdlIG1pZ2h0IHdhbnQgdG8gZXhwZXJpbWVudCB3aXRoIHVzaW5nIG51bWVyaWMga2V5cyBzaW5jZSB0aGV5IGFyZSBlYXNpZXJcbi8vICAgIHRvIG9wdGltaXplIGluIGEgbm9uLUpJVCBlbnZpcm9ubWVudC5cbi8vIDQpIFdlIGNhbiBlYXNpbHkgZ28gZnJvbSBhIGNvbnN0cnVjdG9yIHRvIGEgY3JlYXRlRmliZXIgb2JqZWN0IGxpdGVyYWwgaWYgdGhhdFxuLy8gICAgaXMgZmFzdGVyLlxuLy8gNSkgSXQgc2hvdWxkIGJlIGVhc3kgdG8gcG9ydCB0aGlzIHRvIGEgQyBzdHJ1Y3QgYW5kIGtlZXAgYSBDIGltcGxlbWVudGF0aW9uXG4vLyAgICBjb21wYXRpYmxlLlxuXG5cbnZhciBjcmVhdGVGaWJlciA9IGZ1bmN0aW9uICh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vICRGbG93Rml4TWU6IHRoZSBzaGFwZXMgYXJlIGV4YWN0IGhlcmUgYnV0IEZsb3cgZG9lc24ndCBsaWtlIGNvbnN0cnVjdG9yc1xuICByZXR1cm4gbmV3IEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdCQxKENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiYgIXNob3VsZENvbnN0cnVjdCQxKHR5cGUpICYmIHR5cGUuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2hvdWxkQ29uc3RydWN0JDEoQ29tcG9uZW50KSA/IENsYXNzQ29tcG9uZW50IDogRnVuY3Rpb25Db21wb25lbnQ7XG4gIH0gZWxzZSBpZiAoQ29tcG9uZW50ICE9PSB1bmRlZmluZWQgJiYgQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gQ29tcG9uZW50LiQkdHlwZW9mO1xuXG4gICAgaWYgKCQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKSB7XG4gICAgICByZXR1cm4gRm9yd2FyZFJlZjtcbiAgICB9XG5cbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgcmV0dXJuIE1lbW9Db21wb25lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7XG59IC8vIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgYW4gYWx0ZXJuYXRlIGZpYmVyIHRvIGRvIHdvcmsgb24uXG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIHBlbmRpbmdQcm9wcykge1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50LmFsdGVybmF0ZTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3MgPT09IG51bGwpIHtcbiAgICAvLyBXZSB1c2UgYSBkb3VibGUgYnVmZmVyaW5nIHBvb2xpbmcgdGVjaG5pcXVlIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHdlJ2xsXG4gICAgLy8gb25seSBldmVyIG5lZWQgYXQgbW9zdCB0d28gdmVyc2lvbnMgb2YgYSB0cmVlLiBXZSBwb29sIHRoZSBcIm90aGVyXCIgdW51c2VkXG4gICAgLy8gbm9kZSB0aGF0IHdlJ3JlIGZyZWUgdG8gcmV1c2UuIFRoaXMgaXMgbGF6aWx5IGNyZWF0ZWQgdG8gYXZvaWQgYWxsb2NhdGluZ1xuICAgIC8vIGV4dHJhIG9iamVjdHMgZm9yIHRoaW5ncyB0aGF0IGFyZSBuZXZlciB1cGRhdGVkLiBJdCBhbHNvIGFsbG93IHVzIHRvXG4gICAgLy8gcmVjbGFpbSB0aGUgZXh0cmEgbWVtb3J5IGlmIG5lZWRlZC5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IGNyZWF0ZUZpYmVyKGN1cnJlbnQudGFnLCBwZW5kaW5nUHJvcHMsIGN1cnJlbnQua2V5LCBjdXJyZW50Lm1vZGUpO1xuICAgIHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID0gY3VycmVudC5lbGVtZW50VHlwZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlO1xuICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuXG4gICAge1xuICAgICAgLy8gREVWLW9ubHkgZmllbGRzXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJRCA9IGN1cnJlbnQuX2RlYnVnSUQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdTb3VyY2UgPSBjdXJyZW50Ll9kZWJ1Z1NvdXJjZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyID0gY3VycmVudC5fZGVidWdPd25lcjtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IGN1cnJlbnQ7XG4gICAgY3VycmVudC5hbHRlcm5hdGUgPSB3b3JrSW5Qcm9ncmVzcztcbiAgfSBlbHNlIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7IC8vIE5lZWRlZCBiZWNhdXNlIEJsb2NrcyBzdG9yZSBkYXRhIG9uIHR5cGUuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlOyAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gYWx0ZXJuYXRlLlxuICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBOb0ZsYWdzOyAvLyBUaGUgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSByZXNldCwgcmF0aGVyIHRoYW4gY29weSwgYWN0dWFsRHVyYXRpb24gJiBhY3R1YWxTdGFydFRpbWUuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRpbWUgZnJvbSBlbmRsZXNzbHkgYWNjdW11bGF0aW5nIGluIG5ldyBjb21taXRzLlxuICAgICAgLy8gVGhpcyBoYXMgdGhlIGRvd25zaWRlIG9mIHJlc2V0dGluZyB2YWx1ZXMgZm9yIGRpZmZlcmVudCBwcmlvcml0eSByZW5kZXJzLFxuICAgICAgLy8gQnV0IHdvcmtzIGZvciB5aWVsZGluZyAodGhlIGNvbW1vbiBjYXNlKSBhbmQgc2hvdWxkIHN1cHBvcnQgcmVzdW1pbmcuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgbGFuZXM6IGN1cnJlbnREZXBlbmRlbmNpZXMubGFuZXMsXG4gICAgZmlyc3RDb250ZXh0OiBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dFxuICB9OyAvLyBUaGVzZSB3aWxsIGJlIG92ZXJyaWRkZW4gZHVyaW5nIHRoZSBwYXJlbnQncyByZWNvbmNpbGlhdGlvblxuXG4gIHdvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBjdXJyZW50LnNpYmxpbmc7XG4gIHdvcmtJblByb2dyZXNzLmluZGV4ID0gY3VycmVudC5pbmRleDtcbiAgd29ya0luUHJvZ3Jlc3MucmVmID0gY3VycmVudC5yZWY7XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgPSBjdXJyZW50Ll9kZWJ1Z05lZWRzUmVtb3VudDtcblxuICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59IC8vIFVzZWQgdG8gcmV1c2UgYSBGaWJlciBmb3IgYSBzZWNvbmQgcGFzcy5cblxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyByZXNldHMgdGhlIEZpYmVyIHRvIHdoYXQgY3JlYXRlRmliZXIgb3IgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGRcbiAgLy8gaGF2ZSBzZXQgdGhlIHZhbHVlcyB0byBiZWZvcmUgZHVyaW5nIHRoZSBmaXJzdCBwYXNzLiBJZGVhbGx5IHRoaXMgd291bGRuJ3RcbiAgLy8gYmUgbmVjZXNzYXJ5IGJ1dCB1bmZvcnR1bmF0ZWx5IG1hbnkgY29kZSBwYXRocyByZWFkcyBmcm9tIHRoZSB3b3JrSW5Qcm9ncmVzc1xuICAvLyB3aGVuIHRoZXkgc2hvdWxkIGJlIHJlYWRpbmcgZnJvbSBjdXJyZW50IGFuZCB3cml0aW5nIHRvIHdvcmtJblByb2dyZXNzLlxuICAvLyBXZSBhc3N1bWUgcGVuZGluZ1Byb3BzLCBpbmRleCwga2V5LCByZWYsIHJldHVybiBhcmUgc3RpbGwgdW50b3VjaGVkIHRvXG4gIC8vIGF2b2lkIGRvaW5nIGFub3RoZXIgcmVjb25jaWxpYXRpb24uXG4gIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnIGJ1dCBrZWVwIGFueSBQbGFjZW1lbnQgdGFncywgc2luY2UgdGhhdCdzIHNvbWV0aGluZ1xuICAvLyB0aGF0IGNoaWxkIGZpYmVyIGlzIHNldHRpbmcsIG5vdCB0aGUgcmVjb25jaWxpYXRpb24uXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IFBsYWNlbWVudDsgLy8gVGhlIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICB3b3JrSW5Qcm9ncmVzcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBSZXNldCB0byBjcmVhdGVGaWJlcidzIGluaXRpYWwgdmFsdWVzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBOb3RlOiBXZSBkb24ndCByZXNldCB0aGUgYWN0dWFsVGltZSBjb3VudHMuIEl0J3MgdXNlZnVsIHRvIGFjY3VtdWxhdGVcbiAgICAgIC8vIGFjdHVhbCB0aW1lIGFjcm9zcyBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLlxuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gUmVzZXQgdG8gdGhlIGNsb25lZCB2YWx1ZXMgdGhhdCBjcmVhdGVXb3JrSW5Qcm9ncmVzcyB3b3VsZCd2ZS5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gTmVlZGVkIGJlY2F1c2UgQmxvY2tzIHN0b3JlIGRhdGEgb24gdHlwZS5cblxuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7IC8vIENsb25lIHRoZSBkZXBlbmRlbmNpZXMgb2JqZWN0LiBUaGlzIGlzIG11dGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UsIHNvXG4gICAgLy8gaXQgY2Fubm90IGJlIHNoYXJlZCB3aXRoIHRoZSBjdXJyZW50IGZpYmVyLlxuXG4gICAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50RGVwZW5kZW5jaWVzID09PSBudWxsID8gbnVsbCA6IHtcbiAgICAgIGxhbmVzOiBjdXJyZW50RGVwZW5kZW5jaWVzLmxhbmVzLFxuICAgICAgZmlyc3RDb250ZXh0OiBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dFxuICAgIH07XG5cbiAgICB7XG4gICAgICAvLyBOb3RlOiBXZSBkb24ndCByZXNldCB0aGUgYWN0dWFsVGltZSBjb3VudHMuIEl0J3MgdXNlZnVsIHRvIGFjY3VtdWxhdGVcbiAgICAgIC8vIGFjdHVhbCB0aW1lIGFjcm9zcyBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLlxuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xufVxuZnVuY3Rpb24gY3JlYXRlSG9zdFJvb3RGaWJlcih0YWcpIHtcbiAgdmFyIG1vZGU7XG5cbiAgaWYgKHRhZyA9PT0gQ29uY3VycmVudFJvb3QpIHtcbiAgICBtb2RlID0gQ29uY3VycmVudE1vZGUgfCBCbG9ja2luZ01vZGUgfCBTdHJpY3RNb2RlO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gQmxvY2tpbmdSb290KSB7XG4gICAgbW9kZSA9IEJsb2NraW5nTW9kZSB8IFN0cmljdE1vZGU7XG4gIH0gZWxzZSB7XG4gICAgbW9kZSA9IE5vTW9kZTtcbiAgfVxuXG4gIGlmICggaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAvLyBBbHdheXMgY29sbGVjdCBwcm9maWxlIHRpbWluZ3Mgd2hlbiBEZXZUb29scyBhcmUgcHJlc2VudC5cbiAgICAvLyBUaGlzIGVuYWJsZXMgRGV2VG9vbHMgdG8gc3RhcnQgY2FwdHVyaW5nIHRpbWluZyBhdCBhbnkgcG9pbnRcdTIwMTNcbiAgICAvLyBXaXRob3V0IHNvbWUgbm9kZXMgaW4gdGhlIHRyZWUgaGF2aW5nIGVtcHR5IGJhc2UgdGltZXMuXG4gICAgbW9kZSB8PSBQcm9maWxlTW9kZTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVGaWJlcihIb3N0Um9vdCwgbnVsbCwgbnVsbCwgbW9kZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHModHlwZSwgLy8gUmVhY3QkRWxlbWVudFR5cGVcbmtleSwgcGVuZGluZ1Byb3BzLCBvd25lciwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIGZpYmVyVGFnID0gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDsgLy8gVGhlIHJlc29sdmVkIHR5cGUgaXMgc2V0IGlmIHdlIGtub3cgd2hhdCB0aGUgZmluYWwgdHlwZSB3aWxsIGJlLiBJLmUuIGl0J3Mgbm90IGxhenkuXG5cbiAgdmFyIHJlc29sdmVkVHlwZSA9IHR5cGU7XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHNob3VsZENvbnN0cnVjdCQxKHR5cGUpKSB7XG4gICAgICBmaWJlclRhZyA9IENsYXNzQ29tcG9uZW50O1xuXG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBmaWJlclRhZyA9IEhvc3RDb21wb25lbnQ7XG4gIH0gZWxzZSB7XG4gICAgZ2V0VGFnOiBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KHBlbmRpbmdQcm9wcy5jaGlsZHJlbiwgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEU6XG4gICAgICAgIGZpYmVyVGFnID0gTW9kZTtcbiAgICAgICAgbW9kZSB8PSBEZWJ1Z1RyYWNpbmdNb2RlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICBmaWJlclRhZyA9IE1vZGU7XG4gICAgICAgIG1vZGUgfD0gU3RyaWN0TW9kZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVByb2ZpbGVyKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfT0ZGU0NSRUVOX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21MZWdhY3lIaWRkZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TQ09QRV9UWVBFOlxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IENvbnRleHRQcm92aWRlcjtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnN1bWVyXG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBDb250ZXh0Q29uc3VtZXI7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IEZvcndhcmRSZWY7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IE1lbW9Db21wb25lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gTGF6eUNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBCbG9jaztcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIFwiICsgJ25hbWVkIGltcG9ydHMuJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG93bmVyTmFtZSA9IG93bmVyID8gZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSA6IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChvd25lck5hbWUpIHtcbiAgICAgICAgICAgICAgaW5mbyArPSAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQ6IGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBidXQgZ290OiBcIiArICh0eXBlID09IG51bGwgPyB0eXBlIDogdHlwZW9mIHR5cGUpICsgXCIuXCIgKyBpbmZvICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoZmliZXJUYWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSB0eXBlO1xuICBmaWJlci50eXBlID0gcmVzb2x2ZWRUeXBlO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IG93bmVyO1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCBtb2RlLCBsYW5lcykge1xuICB2YXIgb3duZXIgPSBudWxsO1xuXG4gIHtcbiAgICBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHBlbmRpbmdQcm9wcyA9IGVsZW1lbnQucHJvcHM7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh0eXBlLCBrZXksIHBlbmRpbmdQcm9wcywgb3duZXIsIG1vZGUsIGxhbmVzKTtcblxuICB7XG4gICAgZmliZXIuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50cywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihGcmFnbWVudCwgZWxlbWVudHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIHBlbmRpbmdQcm9wcy5pZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yKCdQcm9maWxlciBtdXN0IHNwZWNpZnkgYW4gXCJpZFwiIGFzIGEgcHJvcCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFByb2ZpbGVyLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSB8IFByb2ZpbGVNb2RlKTsgLy8gVE9ETzogVGhlIFByb2ZpbGVyIGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgZmliZXIudHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG5cbiAge1xuICAgIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICAgIGVmZmVjdER1cmF0aW9uOiAwLFxuICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBTdXNwZW5zZUNvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICBmaWJlci50eXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZUxpc3QocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlTGlzdENvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuXG4gIHtcbiAgICAvLyBUT0RPOiBUaGUgU3VzcGVuc2VMaXN0Q29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gICAgLy8gaW5zdGVhZC5cbiAgICBmaWJlci50eXBlID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoT2Zmc2NyZWVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBPZmZzY3JlZW5Db21wb25lbnQgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAge1xuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTtcbiAgfVxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUxlZ2FjeUhpZGRlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoTGVnYWN5SGlkZGVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBMZWdhY3lIaWRkZW4gZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAge1xuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU7XG4gIH1cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVGV4dChjb250ZW50LCBtb2RlLCBsYW5lcykge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0VGV4dCwgY29udGVudCwgbnVsbCwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUhvc3RJbnN0YW5jZUZvckRlbGV0aW9uKCkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0Q29tcG9uZW50LCBudWxsLCBudWxsLCBOb01vZGUpOyAvLyBUT0RPOiBUaGVzZSBzaG91bGQgbm90IG5lZWQgYSB0eXBlLlxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gJ0RFTEVURUQnO1xuICBmaWJlci50eXBlID0gJ0RFTEVURUQnO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCBtb2RlLCBsYW5lcykge1xuICB2YXIgcGVuZGluZ1Byb3BzID0gcG9ydGFsLmNoaWxkcmVuICE9PSBudWxsID8gcG9ydGFsLmNoaWxkcmVuIDogW107XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RQb3J0YWwsIHBlbmRpbmdQcm9wcywgcG9ydGFsLmtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICBjb250YWluZXJJbmZvOiBwb3J0YWwuY29udGFpbmVySW5mbyxcbiAgICBwZW5kaW5nQ2hpbGRyZW46IG51bGwsXG4gICAgLy8gVXNlZCBieSBwZXJzaXN0ZW50IHVwZGF0ZXNcbiAgICBpbXBsZW1lbnRhdGlvbjogcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gIH07XG4gIHJldHVybiBmaWJlcjtcbn0gLy8gVXNlZCBmb3Igc3Rhc2hpbmcgV0lQIHByb3BlcnRpZXMgdG8gcmVwbGF5IGZhaWxlZCB3b3JrIGluIERFVi5cblxuZnVuY3Rpb24gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodGFyZ2V0LCBzb3VyY2UpIHtcbiAgaWYgKHRhcmdldCA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgRmliZXIncyBpbml0aWFsIHByb3BlcnRpZXMgd2lsbCBhbHdheXMgYmUgb3ZlcndyaXR0ZW4uXG4gICAgLy8gV2Ugb25seSB1c2UgYSBGaWJlciB0byBlbnN1cmUgdGhlIHNhbWUgaGlkZGVuIGNsYXNzIHNvIERFViBpc24ndCBzbG93LlxuICAgIHRhcmdldCA9IGNyZWF0ZUZpYmVyKEluZGV0ZXJtaW5hdGVDb21wb25lbnQsIG51bGwsIG51bGwsIE5vTW9kZSk7XG4gIH0gLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IHdyaXR0ZW4gYXMgYSBsaXN0IG9mIGFsbCBwcm9wZXJ0aWVzLlxuICAvLyBXZSB0cmllZCB0byB1c2UgT2JqZWN0LmFzc2lnbigpIGluc3RlYWQgYnV0IHRoaXMgaXMgY2FsbGVkIGluXG4gIC8vIHRoZSBob3R0ZXN0IHBhdGgsIGFuZCBPYmplY3QuYXNzaWduKCkgd2FzIHRvbyBzbG93OlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyNTAyXG4gIC8vIFRoaXMgY29kZSBpcyBERVYtb25seSBzbyBzaXplIGlzIG5vdCBhIGNvbmNlcm4uXG5cblxuICB0YXJnZXQudGFnID0gc291cmNlLnRhZztcbiAgdGFyZ2V0LmtleSA9IHNvdXJjZS5rZXk7XG4gIHRhcmdldC5lbGVtZW50VHlwZSA9IHNvdXJjZS5lbGVtZW50VHlwZTtcbiAgdGFyZ2V0LnR5cGUgPSBzb3VyY2UudHlwZTtcbiAgdGFyZ2V0LnN0YXRlTm9kZSA9IHNvdXJjZS5zdGF0ZU5vZGU7XG4gIHRhcmdldC5yZXR1cm4gPSBzb3VyY2UucmV0dXJuO1xuICB0YXJnZXQuY2hpbGQgPSBzb3VyY2UuY2hpbGQ7XG4gIHRhcmdldC5zaWJsaW5nID0gc291cmNlLnNpYmxpbmc7XG4gIHRhcmdldC5pbmRleCA9IHNvdXJjZS5pbmRleDtcbiAgdGFyZ2V0LnJlZiA9IHNvdXJjZS5yZWY7XG4gIHRhcmdldC5wZW5kaW5nUHJvcHMgPSBzb3VyY2UucGVuZGluZ1Byb3BzO1xuICB0YXJnZXQubWVtb2l6ZWRQcm9wcyA9IHNvdXJjZS5tZW1vaXplZFByb3BzO1xuICB0YXJnZXQudXBkYXRlUXVldWUgPSBzb3VyY2UudXBkYXRlUXVldWU7XG4gIHRhcmdldC5tZW1vaXplZFN0YXRlID0gc291cmNlLm1lbW9pemVkU3RhdGU7XG4gIHRhcmdldC5kZXBlbmRlbmNpZXMgPSBzb3VyY2UuZGVwZW5kZW5jaWVzO1xuICB0YXJnZXQubW9kZSA9IHNvdXJjZS5tb2RlO1xuICB0YXJnZXQuZmxhZ3MgPSBzb3VyY2UuZmxhZ3M7XG4gIHRhcmdldC5uZXh0RWZmZWN0ID0gc291cmNlLm5leHRFZmZlY3Q7XG4gIHRhcmdldC5maXJzdEVmZmVjdCA9IHNvdXJjZS5maXJzdEVmZmVjdDtcbiAgdGFyZ2V0Lmxhc3RFZmZlY3QgPSBzb3VyY2UubGFzdEVmZmVjdDtcbiAgdGFyZ2V0LmxhbmVzID0gc291cmNlLmxhbmVzO1xuICB0YXJnZXQuY2hpbGRMYW5lcyA9IHNvdXJjZS5jaGlsZExhbmVzO1xuICB0YXJnZXQuYWx0ZXJuYXRlID0gc291cmNlLmFsdGVybmF0ZTtcblxuICB7XG4gICAgdGFyZ2V0LmFjdHVhbER1cmF0aW9uID0gc291cmNlLmFjdHVhbER1cmF0aW9uO1xuICAgIHRhcmdldC5hY3R1YWxTdGFydFRpbWUgPSBzb3VyY2UuYWN0dWFsU3RhcnRUaW1lO1xuICAgIHRhcmdldC5zZWxmQmFzZUR1cmF0aW9uID0gc291cmNlLnNlbGZCYXNlRHVyYXRpb247XG4gICAgdGFyZ2V0LnRyZWVCYXNlRHVyYXRpb24gPSBzb3VyY2UudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuXG4gIHRhcmdldC5fZGVidWdJRCA9IHNvdXJjZS5fZGVidWdJRDtcbiAgdGFyZ2V0Ll9kZWJ1Z1NvdXJjZSA9IHNvdXJjZS5fZGVidWdTb3VyY2U7XG4gIHRhcmdldC5fZGVidWdPd25lciA9IHNvdXJjZS5fZGVidWdPd25lcjtcbiAgdGFyZ2V0Ll9kZWJ1Z05lZWRzUmVtb3VudCA9IHNvdXJjZS5fZGVidWdOZWVkc1JlbW91bnQ7XG4gIHRhcmdldC5fZGVidWdIb29rVHlwZXMgPSBzb3VyY2UuX2RlYnVnSG9va1R5cGVzO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBGaWJlclJvb3ROb2RlKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSkge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5jb250YWluZXJJbmZvID0gY29udGFpbmVySW5mbztcbiAgdGhpcy5wZW5kaW5nQ2hpbGRyZW4gPSBudWxsO1xuICB0aGlzLmN1cnJlbnQgPSBudWxsO1xuICB0aGlzLnBpbmdDYWNoZSA9IG51bGw7XG4gIHRoaXMuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgdGhpcy50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0O1xuICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5oeWRyYXRlID0gaHlkcmF0ZTtcbiAgdGhpcy5jYWxsYmFja05vZGUgPSBudWxsO1xuICB0aGlzLmNhbGxiYWNrUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgdGhpcy5ldmVudFRpbWVzID0gY3JlYXRlTGFuZU1hcChOb0xhbmVzKTtcbiAgdGhpcy5leHBpcmF0aW9uVGltZXMgPSBjcmVhdGVMYW5lTWFwKE5vVGltZXN0YW1wKTtcbiAgdGhpcy5wZW5kaW5nTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLnN1c3BlbmRlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5waW5nZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZXhwaXJlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5tdXRhYmxlUmVhZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5lbnRhbmdsZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZW50YW5nbGVtZW50cyA9IGNyZWF0ZUxhbmVNYXAoTm9MYW5lcyk7XG5cbiAge1xuICAgIHRoaXMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgdGhpcy5pbnRlcmFjdGlvblRocmVhZElEID0gdHJhY2luZy51bnN0YWJsZV9nZXRUaHJlYWRJRCgpO1xuICAgIHRoaXMubWVtb2l6ZWRJbnRlcmFjdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgdGhpcy5wZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSBuZXcgTWFwKCk7XG4gIH1cblxuICB7XG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgQmxvY2tpbmdSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gJ2NyZWF0ZUJsb2NraW5nUm9vdCgpJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ29uY3VycmVudFJvb3Q6XG4gICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSAnY3JlYXRlUm9vdCgpJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTGVnYWN5Um9vdDpcbiAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9ICdjcmVhdGVMZWdhY3lSb290KCknO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJSb290KGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSwgaHlkcmF0aW9uQ2FsbGJhY2tzKSB7XG4gIHZhciByb290ID0gbmV3IEZpYmVyUm9vdE5vZGUoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlKTtcbiAgLy8gc3RhdGVOb2RlIGlzIGFueS5cblxuXG4gIHZhciB1bmluaXRpYWxpemVkRmliZXIgPSBjcmVhdGVIb3N0Um9vdEZpYmVyKHRhZyk7XG4gIHJvb3QuY3VycmVudCA9IHVuaW5pdGlhbGl6ZWRGaWJlcjtcbiAgdW5pbml0aWFsaXplZEZpYmVyLnN0YXRlTm9kZSA9IHJvb3Q7XG4gIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh1bmluaXRpYWxpemVkRmliZXIpO1xuICByZXR1cm4gcm9vdDtcbn1cblxuLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZlcnNpb24gdXNlZCBmb3Igc2VydmVyIHJlbmRlcmluZyBtYXRjaGVzIHRoZSBvbmVcbi8vIHRoYXQgaXMgZXZlbnR1YWxseSByZWFkIGR1cmluZyBoeWRyYXRpb24uXG4vLyBJZiB0aGV5IGRvbid0IG1hdGNoIHRoZXJlJ3MgYSBwb3RlbnRpYWwgdGVhciBhbmQgYSBmdWxsIGRlb3B0IHJlbmRlciBpcyByZXF1aXJlZC5cblxuZnVuY3Rpb24gcmVnaXN0ZXJNdXRhYmxlU291cmNlRm9ySHlkcmF0aW9uKHJvb3QsIG11dGFibGVTb3VyY2UpIHtcbiAgdmFyIGdldFZlcnNpb24gPSBtdXRhYmxlU291cmNlLl9nZXRWZXJzaW9uO1xuICB2YXIgdmVyc2lvbiA9IGdldFZlcnNpb24obXV0YWJsZVNvdXJjZS5fc291cmNlKTsgLy8gVE9ETyBDbGVhciB0aGlzIGRhdGEgb25jZSBhbGwgcGVuZGluZyBoeWRyYXRpb24gd29yayBpcyBmaW5pc2hlZC5cbiAgLy8gUmV0YWluaW5nIGl0IGZvcmV2ZXIgbWF5IGludGVyZmVyZSB3aXRoIEdDLlxuXG4gIGlmIChyb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPT0gbnVsbCkge1xuICAgIHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IFttdXRhYmxlU291cmNlLCB2ZXJzaW9uXTtcbiAgfSBlbHNlIHtcbiAgICByb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEucHVzaChtdXRhYmxlU291cmNlLCB2ZXJzaW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lckluZm8sIC8vIFRPRE86IGZpZ3VyZSBvdXQgdGhlIEFQSSBmb3IgY3Jvc3MtcmVuZGVyZXIgaW1wbGVtZW50YXRpb24uXG5pbXBsZW1lbnRhdGlvbikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBudWxsO1xuICByZXR1cm4ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93IHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBQb3J0YWxcbiAgICAkJHR5cGVvZjogUkVBQ1RfUE9SVEFMX1RZUEUsXG4gICAga2V5OiBrZXkgPT0gbnVsbCA/IG51bGwgOiAnJyArIGtleSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgY29udGFpbmVySW5mbzogY29udGFpbmVySW5mbyxcbiAgICBpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb25cbiAgfTtcbn1cblxudmFyIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXM7XG52YXIgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGU7XG5cbntcbiAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZSA9IHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpIHtcbiAgaWYgKCFwYXJlbnRDb21wb25lbnQpIHtcbiAgICByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB9XG5cbiAgdmFyIGZpYmVyID0gZ2V0KHBhcmVudENvbXBvbmVudCk7XG4gIHZhciBwYXJlbnRDb250ZXh0ID0gZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQoZmliZXIpO1xuXG4gIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgdmFyIENvbXBvbmVudCA9IGZpYmVyLnR5cGU7XG5cbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIENvbXBvbmVudCwgcGFyZW50Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnQsIG1ldGhvZE5hbWUpIHtcbiAge1xuICAgIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuXG4gICAgaWYgKGZpYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50LnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQXJndW1lbnQgYXBwZWFycyB0byBub3QgYmUgYSBSZWFjdENvbXBvbmVudC4gS2V5czogXCIgKyBPYmplY3Qua2V5cyhjb21wb25lbnQpICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcblxuICAgIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChob3N0RmliZXIubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihob3N0RmliZXIpO1xuXG4gICAgICAgICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICBlcnJvcignJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggaXMgaW5zaWRlIFN0cmljdE1vZGUuICcgKyAnSW5zdGVhZCwgYWRkIGEgcmVmIGRpcmVjdGx5IHRvIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIHJlZmVyZW5jZS4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLWZpbmQtbm9kZScsIG1ldGhvZE5hbWUsIG1ldGhvZE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcignJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggcmVuZGVycyBTdHJpY3RNb2RlIGNoaWxkcmVuLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1maW5kLW5vZGUnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgLy8gSWRlYWxseSB0aGlzIHNob3VsZCByZXNldCB0byBwcmV2aW91cyBidXQgdGhpcyBzaG91bGRuJ3QgYmUgY2FsbGVkIGluXG4gICAgICAgICAgLy8gcmVuZGVyIGFuZCB0aGVyZSdzIGFub3RoZXIgd2FybmluZyBmb3IgdGhhdCBhbnl3YXkuXG4gICAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2aW91c0ZpYmVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250YWluZXIoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlLCBoeWRyYXRpb25DYWxsYmFja3MpIHtcbiAgcmV0dXJuIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpO1xufVxuZnVuY3Rpb24gdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIGNvbnRhaW5lciwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjaykge1xuICB7XG4gICAgb25TY2hlZHVsZVJvb3QoY29udGFpbmVyLCBlbGVtZW50KTtcbiAgfVxuXG4gIHZhciBjdXJyZW50JDEgPSBjb250YWluZXIuY3VycmVudDtcbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcblxuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZlVubW9ja2VkU2NoZWR1bGVyKGN1cnJlbnQkMSk7XG4gICAgICB3YXJuSWZOb3RTY29wZWRXaXRoTWF0Y2hpbmdBY3QoY3VycmVudCQxKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGN1cnJlbnQkMSk7XG5cbiAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpO1xuXG4gIGlmIChjb250YWluZXIuY29udGV4dCA9PT0gbnVsbCkge1xuICAgIGNvbnRhaW5lci5jb250ZXh0ID0gY29udGV4dDtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIucGVuZGluZ0NvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAge1xuICAgIGlmIChpc1JlbmRlcmluZyAmJiBjdXJyZW50ICE9PSBudWxsICYmICFkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzKSB7XG4gICAgICBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gdHJ1ZTtcblxuICAgICAgZXJyb3IoJ1JlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlOyAnICsgJ3RyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVudCB1cGRhdGVzIGZyb20gcmVuZGVyIGlzIG5vdCBhbGxvd2VkLiAnICsgJ0lmIG5lY2Vzc2FyeSwgdHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiBjb21wb25lbnREaWRVcGRhdGUuXFxuXFxuJyArICdDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAlcy4nLCBnZXRDb21wb25lbnROYW1lKGN1cnJlbnQudHlwZSkgfHwgJ1Vua25vd24nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgfTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNhbGxiYWNrO1xuXG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgZW5xdWV1ZVVwZGF0ZShjdXJyZW50JDEsIHVwZGF0ZSk7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihjdXJyZW50JDEsIGxhbmUsIGV2ZW50VGltZSk7XG4gIHJldHVybiBsYW5lO1xufVxuZnVuY3Rpb24gZ2V0UHVibGljUm9vdEluc3RhbmNlKGNvbnRhaW5lcikge1xuICB2YXIgY29udGFpbmVyRmliZXIgPSBjb250YWluZXIuY3VycmVudDtcblxuICBpZiAoIWNvbnRhaW5lckZpYmVyLmNoaWxkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKGNvbnRhaW5lckZpYmVyLmNoaWxkLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBnZXRQdWJsaWNJbnN0YW5jZShjb250YWluZXJGaWJlci5jaGlsZC5zdGF0ZU5vZGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb250YWluZXJGaWJlci5jaGlsZC5zdGF0ZU5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSkge1xuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwgJiYgc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUgPSBoaWdoZXJQcmlvcml0eUxhbmUoc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUsIHJldHJ5TGFuZSk7XG4gIH1cbn0gLy8gSW5jcmVhc2VzIHRoZSBwcmlvcml0eSBvZiB0aGVubmFibGVzIHdoZW4gdGhleSByZXNvbHZlIHdpdGhpbiB0aGlzIGJvdW5kYXJ5LlxuXG5cbmZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSk7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSkge1xuICAgIG1hcmtSZXRyeUxhbmVJbXBsKGFsdGVybmF0ZSwgcmV0cnlMYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uJDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IGFuZCB0aGV5IHNob3VsZCBub3Qgc3VzcGVuZCBvbiBJL08sXG4gICAgLy8gc2luY2UgeW91IGhhdmUgdG8gd3JhcCBhbnl0aGluZyB0aGF0IG1pZ2h0IHN1c3BlbmQgaW5cbiAgICAvLyBTdXNwZW5zZS5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uJDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IGFuZCB0aGV5IHNob3VsZCBub3Qgc3VzcGVuZCBvbiBJL08sXG4gICAgLy8gc2luY2UgeW91IGhhdmUgdG8gd3JhcCBhbnl0aGluZyB0aGF0IG1pZ2h0IHN1c3BlbmQgaW5cbiAgICAvLyBTdXNwZW5zZS5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5JDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IG90aGVyIHRoYW4gc3luY2hyb25vdXNseSBmbHVzaCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBydW5XaXRoUHJpb3JpdHkkMihwcmlvcml0eSwgZm4pIHtcblxuICB0cnkge1xuICAgIHNldEN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkocHJpb3JpdHkpO1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICB9XG59XG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhmaWJlcikge1xuICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzKGZpYmVyKTtcblxuICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaG9zdEZpYmVyLnRhZyA9PT0gRnVuZGFtZW50YWxDb21wb25lbnQpIHtcbiAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZS5pbnN0YW5jZTtcbiAgfVxuXG4gIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xufVxuXG52YXIgc2hvdWxkU3VzcGVuZEltcGwgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkU3VzcGVuZChmaWJlcikge1xuICByZXR1cm4gc2hvdWxkU3VzcGVuZEltcGwoZmliZXIpO1xufVxudmFyIG92ZXJyaWRlSG9va1N0YXRlID0gbnVsbDtcbnZhciBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wcyA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gbnVsbDtcbnZhciBzY2hlZHVsZVVwZGF0ZSA9IG51bGw7XG52YXIgc2V0U3VzcGVuc2VIYW5kbGVyID0gbnVsbDtcblxue1xuICB2YXIgY29weVdpdGhEZWxldGVJbXBsID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgaW5kZXgpIHtcbiAgICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoaW5kZXggKyAxID09PSBwYXRoLmxlbmd0aCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgICAgdXBkYXRlZC5zcGxpY2Uoa2V5LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH0gLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG5cbiAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aERlbGV0ZUltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSk7XG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoRGVsZXRlID0gZnVuY3Rpb24gKG9iaiwgcGF0aCkge1xuICAgIHJldHVybiBjb3B5V2l0aERlbGV0ZUltcGwob2JqLCBwYXRoLCAwKTtcbiAgfTtcblxuICB2YXIgY29weVdpdGhSZW5hbWVJbXBsID0gZnVuY3Rpb24gKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXgpIHtcbiAgICB2YXIgb2xkS2V5ID0gb2xkUGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoaW5kZXggKyAxID09PSBvbGRQYXRoLmxlbmd0aCkge1xuICAgICAgdmFyIG5ld0tleSA9IG5ld1BhdGhbaW5kZXhdOyAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICAgIHVwZGF0ZWRbbmV3S2V5XSA9IHVwZGF0ZWRbb2xkS2V5XTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgICAgdXBkYXRlZC5zcGxpY2Uob2xkS2V5LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW29sZEtleV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICAgIHVwZGF0ZWRbb2xkS2V5XSA9IGNvcHlXaXRoUmVuYW1lSW1wbCggLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuICAgICAgb2JqW29sZEtleV0sIG9sZFBhdGgsIG5ld1BhdGgsIGluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoUmVuYW1lID0gZnVuY3Rpb24gKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIGlmIChvbGRQYXRoLmxlbmd0aCAhPT0gbmV3UGF0aC5sZW5ndGgpIHtcbiAgICAgIHdhcm4oJ2NvcHlXaXRoUmVuYW1lKCkgZXhwZWN0cyBwYXRocyBvZiB0aGUgc2FtZSBsZW5ndGgnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1BhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGlmIChvbGRQYXRoW2ldICE9PSBuZXdQYXRoW2ldKSB7XG4gICAgICAgICAgd2FybignY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIHRvIGJlIHRoZSBzYW1lIGV4Y2VwdCBmb3IgdGhlIGRlZXBlc3Qga2V5Jyk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29weVdpdGhSZW5hbWVJbXBsKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgMCk7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoU2V0SW1wbCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIGluZGV4LCB2YWx1ZSkge1xuICAgIGlmIChpbmRleCA+PSBwYXRoLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTsgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhTZXRJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEsIHZhbHVlKTtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhTZXQgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCB2YWx1ZSkge1xuICAgIHJldHVybiBjb3B5V2l0aFNldEltcGwob2JqLCBwYXRoLCAwLCB2YWx1ZSk7XG4gIH07XG5cbiAgdmFyIGZpbmRIb29rID0gZnVuY3Rpb24gKGZpYmVyLCBpZCkge1xuICAgIC8vIEZvciBub3csIHRoZSBcImlkXCIgb2Ygc3RhdGVmdWwgaG9va3MgaXMganVzdCB0aGUgc3RhdGVmdWwgaG9vayBpbmRleC5cbiAgICAvLyBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSB3aXRoIGUuZy4gbmVzdGVkIGhvb2tzLlxuICAgIHZhciBjdXJyZW50SG9vayA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgICB3aGlsZSAoY3VycmVudEhvb2sgIT09IG51bGwgJiYgaWQgPiAwKSB7XG4gICAgICBjdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gICAgICBpZC0tO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50SG9vaztcbiAgfTsgLy8gU3VwcG9ydCBEZXZUb29scyBlZGl0YWJsZSB2YWx1ZXMgZm9yIHVzZVN0YXRlIGFuZCB1c2VSZWR1Y2VyLlxuXG5cbiAgb3ZlcnJpZGVIb29rU3RhdGUgPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoLCB2YWx1ZSkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFNldChob29rLm1lbW9pemVkU3RhdGUsIHBhdGgsIHZhbHVlKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoRGVsZXRlKGhvb2subWVtb2l6ZWRTdGF0ZSwgcGF0aCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBfYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07XG5cbiAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFJlbmFtZShob29rLm1lbW9pemVkU3RhdGUsIG9sZFBhdGgsIG5ld1BhdGgpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gX2Fzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIHByb3BzIGZvciBmdW5jdGlvbiBjb21wb25lbnRzLCBmb3J3YXJkUmVmLCBtZW1vLCBob3N0IGNvbXBvbmVudHMsIGV0Yy5cblxuXG4gIG92ZXJyaWRlUHJvcHMgPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgsIHZhbHVlKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhTZXQoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCwgdmFsdWUpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aERlbGV0ZShmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhSZW5hbWUoZmliZXIubWVtb2l6ZWRQcm9wcywgb2xkUGF0aCwgbmV3UGF0aCk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBzY2hlZHVsZVVwZGF0ZSA9IGZ1bmN0aW9uIChmaWJlcikge1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBzZXRTdXNwZW5zZUhhbmRsZXIgPSBmdW5jdGlvbiAobmV3U2hvdWxkU3VzcGVuZEltcGwpIHtcbiAgICBzaG91bGRTdXNwZW5kSW1wbCA9IG5ld1Nob3VsZFN1c3BlbmRJbXBsO1xuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcihmaWJlcikge1xuICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xufVxuXG5mdW5jdGlvbiBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlKGluc3RhbmNlKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scygpIHtcbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbmZ1bmN0aW9uIGluamVjdEludG9EZXZUb29scyhkZXZUb29sc0NvbmZpZykge1xuICB2YXIgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgPSBkZXZUb29sc0NvbmZpZy5maW5kRmliZXJCeUhvc3RJbnN0YW5jZTtcbiAgdmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xuICByZXR1cm4gaW5qZWN0SW50ZXJuYWxzKHtcbiAgICBidW5kbGVUeXBlOiBkZXZUb29sc0NvbmZpZy5idW5kbGVUeXBlLFxuICAgIHZlcnNpb246IGRldlRvb2xzQ29uZmlnLnZlcnNpb24sXG4gICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogZGV2VG9vbHNDb25maWcucmVuZGVyZXJQYWNrYWdlTmFtZSxcbiAgICByZW5kZXJlckNvbmZpZzogZGV2VG9vbHNDb25maWcucmVuZGVyZXJDb25maWcsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGU6IG92ZXJyaWRlSG9va1N0YXRlLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoLFxuICAgIG92ZXJyaWRlUHJvcHM6IG92ZXJyaWRlUHJvcHMsXG4gICAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6IG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoLFxuICAgIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoOiBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCxcbiAgICBzZXRTdXNwZW5zZUhhbmRsZXI6IHNldFN1c3BlbnNlSGFuZGxlcixcbiAgICBzY2hlZHVsZVVwZGF0ZTogc2NoZWR1bGVVcGRhdGUsXG4gICAgY3VycmVudERpc3BhdGNoZXJSZWY6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6IGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyLFxuICAgIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSB8fCBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlLFxuICAgIC8vIFJlYWN0IFJlZnJlc2hcbiAgICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6ICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2ggLFxuICAgIHNjaGVkdWxlUmVmcmVzaDogIHNjaGVkdWxlUmVmcmVzaCAsXG4gICAgc2NoZWR1bGVSb290OiAgc2NoZWR1bGVSb290ICxcbiAgICBzZXRSZWZyZXNoSGFuZGxlcjogIHNldFJlZnJlc2hIYW5kbGVyICxcbiAgICAvLyBFbmFibGVzIERldlRvb2xzIHRvIGFwcGVuZCBvd25lciBzdGFja3MgdG8gZXJyb3IgbWVzc2FnZXMgaW4gREVWIG1vZGUuXG4gICAgZ2V0Q3VycmVudEZpYmVyOiAgZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMgXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBSZWFjdERPTVJvb3QoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIHRoaXMuX2ludGVybmFsUm9vdCA9IGNyZWF0ZVJvb3RJbXBsKGNvbnRhaW5lciwgQ29uY3VycmVudFJvb3QsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBSZWFjdERPTUJsb2NraW5nUm9vdChjb250YWluZXIsIHRhZywgb3B0aW9ucykge1xuICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBjcmVhdGVSb290SW1wbChjb250YWluZXIsIHRhZywgb3B0aW9ucyk7XG59XG5cblJlYWN0RE9NUm9vdC5wcm90b3R5cGUucmVuZGVyID0gUmVhY3RET01CbG9ja2luZ1Jvb3QucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcblxuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiAnICsgJ1RvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cblxuICAgIHZhciBjb250YWluZXIgPSByb290LmNvbnRhaW5lckluZm87XG5cbiAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBob3N0SW5zdGFuY2UgPSBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhyb290LmN1cnJlbnQpO1xuXG4gICAgICBpZiAoaG9zdEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChob3N0SW5zdGFuY2UucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoZSAnICsgJ3Jvb3QgY29udGFpbmVyIHdhcyByZW1vdmVkIHdpdGhvdXQgdXNpbmcgUmVhY3QuIFRoaXMgaXMgbm90ICcgKyAnc3VwcG9ydGVkIGFuZCB3aWxsIGNhdXNlIGVycm9ycy4gSW5zdGVhZCwgY2FsbCAnICsgXCJyb290LnVubW91bnQoKSB0byBlbXB0eSBhIHJvb3QncyBjb250YWluZXIuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCByb290LCBudWxsLCBudWxsKTtcbn07XG5cblJlYWN0RE9NUm9vdC5wcm90b3R5cGUudW5tb3VudCA9IFJlYWN0RE9NQmxvY2tpbmdSb290LnByb3RvdHlwZS51bm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCd1bm1vdW50KC4uLik6IGRvZXMgbm90IHN1cHBvcnQgYSBjYWxsYmFjayBhcmd1bWVudC4gJyArICdUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIGEgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcbiAgdmFyIGNvbnRhaW5lciA9IHJvb3QuY29udGFpbmVySW5mbztcbiAgdXBkYXRlQ29udGFpbmVyKG51bGwsIHJvb3QsIG51bGwsIGZ1bmN0aW9uICgpIHtcbiAgICB1bm1hcmtDb250YWluZXJBc1Jvb3QoY29udGFpbmVyKTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVSb290SW1wbChjb250YWluZXIsIHRhZywgb3B0aW9ucykge1xuICAvLyBUYWcgaXMgZWl0aGVyIExlZ2FjeVJvb3Qgb3IgQ29uY3VycmVudCBSb290XG4gIHZhciBoeWRyYXRlID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0ZSA9PT0gdHJ1ZTtcbiAgdmFyIGh5ZHJhdGlvbkNhbGxiYWNrcyA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGlvbk9wdGlvbnMgfHwgbnVsbDtcbiAgdmFyIG11dGFibGVTb3VyY2VzID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucy5tdXRhYmxlU291cmNlcyB8fCBudWxsO1xuICB2YXIgcm9vdCA9IGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXIsIHRhZywgaHlkcmF0ZSk7XG4gIG1hcmtDb250YWluZXJBc1Jvb3Qocm9vdC5jdXJyZW50LCBjb250YWluZXIpO1xuICB2YXIgY29udGFpbmVyTm9kZVR5cGUgPSBjb250YWluZXIubm9kZVR5cGU7XG5cbiAge1xuICAgIHZhciByb290Q29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXI7XG4gICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKG11dGFibGVTb3VyY2VzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtdXRhYmxlU291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG11dGFibGVTb3VyY2UgPSBtdXRhYmxlU291cmNlc1tpXTtcbiAgICAgIHJlZ2lzdGVyTXV0YWJsZVNvdXJjZUZvckh5ZHJhdGlvbihyb290LCBtdXRhYmxlU291cmNlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm9vdDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVJvb3QoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUmVhY3RET01CbG9ja2luZ1Jvb3QoY29udGFpbmVyLCBMZWdhY3lSb290LCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRDb250YWluZXIobm9kZSkge1xuICByZXR1cm4gISEobm9kZSAmJiAobm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgJiYgbm9kZS5ub2RlVmFsdWUgPT09ICcgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgJykpO1xufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIHRvcExldmVsVXBkYXRlV2FybmluZ3M7XG52YXIgd2FybmVkQWJvdXRIeWRyYXRlQVBJID0gZmFsc2U7XG5cbntcbiAgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncyA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgICBpZiAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgJiYgY29udGFpbmVyLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBob3N0SW5zdGFuY2UgPSBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lci5faW50ZXJuYWxSb290LmN1cnJlbnQpO1xuXG4gICAgICBpZiAoaG9zdEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChob3N0SW5zdGFuY2UucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoaXMgJyArICdjb250YWluZXIgd2FzIHJlbW92ZWQgd2l0aG91dCB1c2luZyBSZWFjdC4gVGhpcyBpcyBub3QgJyArICdzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgZXJyb3JzLiBJbnN0ZWFkLCBjYWxsICcgKyAnUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSB0byBlbXB0eSBhIGNvbnRhaW5lci4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0ID0gISFjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgdmFyIGhhc05vblJvb3RSZWFjdENoaWxkID0gISEocm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKSk7XG5cbiAgICBpZiAoaGFzTm9uUm9vdFJlYWN0Q2hpbGQgJiYgIWlzUm9vdFJlbmRlcmVkQnlTb21lUmVhY3QpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogUmVwbGFjaW5nIFJlYWN0LXJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSBuZXcgcm9vdCAnICsgJ2NvbXBvbmVudC4gSWYgeW91IGludGVuZGVkIHRvIHVwZGF0ZSB0aGUgY2hpbGRyZW4gb2YgdGhpcyBub2RlLCAnICsgJ3lvdSBzaG91bGQgaW5zdGVhZCBoYXZlIHRoZSBleGlzdGluZyBjaGlsZHJlbiB1cGRhdGUgdGhlaXIgc3RhdGUgJyArICdhbmQgcmVuZGVyIHRoZSBuZXcgY29tcG9uZW50cyBpbnN0ZWFkIG9mIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyLicpO1xuICAgIH1cblxuICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiBjb250YWluZXIudGFnTmFtZSAmJiBjb250YWluZXIudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnQk9EWScpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoKTogUmVuZGVyaW5nIGNvbXBvbmVudHMgZGlyZWN0bHkgaW50byBkb2N1bWVudC5ib2R5IGlzICcgKyAnZGlzY291cmFnZWQsIHNpbmNlIGl0cyBjaGlsZHJlbiBhcmUgb2Z0ZW4gbWFuaXB1bGF0ZWQgYnkgdGhpcmQtcGFydHkgJyArICdzY3JpcHRzIGFuZCBicm93c2VyIGV4dGVuc2lvbnMuIFRoaXMgbWF5IGxlYWQgdG8gc3VidGxlICcgKyAncmVjb25jaWxpYXRpb24gaXNzdWVzLiBUcnkgcmVuZGVyaW5nIGludG8gYSBjb250YWluZXIgZWxlbWVudCBjcmVhdGVkICcgKyAnZm9yIHlvdXIgYXBwLicpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb250YWluZXIuZG9jdW1lbnRFbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRIeWRyYXRlRHVlVG9MZWdhY3lIZXVyaXN0aWMoY29udGFpbmVyKSB7XG4gIHZhciByb290RWxlbWVudCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICByZXR1cm4gISEocm9vdEVsZW1lbnQgJiYgcm9vdEVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiByb290RWxlbWVudC5oYXNBdHRyaWJ1dGUoUk9PVF9BVFRSSUJVVEVfTkFNRSkpO1xufVxuXG5mdW5jdGlvbiBsZWdhY3lDcmVhdGVSb290RnJvbURPTUNvbnRhaW5lcihjb250YWluZXIsIGZvcmNlSHlkcmF0ZSkge1xuICB2YXIgc2hvdWxkSHlkcmF0ZSA9IGZvcmNlSHlkcmF0ZSB8fCBzaG91bGRIeWRyYXRlRHVlVG9MZWdhY3lIZXVyaXN0aWMoY29udGFpbmVyKTsgLy8gRmlyc3QgY2xlYXIgYW55IGV4aXN0aW5nIGNvbnRlbnQuXG5cbiAgaWYgKCFzaG91bGRIeWRyYXRlKSB7XG4gICAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICAgIHZhciByb290U2libGluZztcblxuICAgIHdoaWxlIChyb290U2libGluZyA9IGNvbnRhaW5lci5sYXN0Q2hpbGQpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCF3YXJuZWQgJiYgcm9vdFNpYmxpbmcubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiByb290U2libGluZy5oYXNBdHRyaWJ1dGUoUk9PVF9BVFRSSUJVVEVfTkFNRSkpIHtcbiAgICAgICAgICB3YXJuZWQgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ3JlbmRlcigpOiBUYXJnZXQgbm9kZSBoYXMgbWFya3VwIHJlbmRlcmVkIGJ5IFJlYWN0LCBidXQgdGhlcmUgJyArICdhcmUgdW5yZWxhdGVkIG5vZGVzIGFzIHdlbGwuIFRoaXMgaXMgbW9zdCBjb21tb25seSBjYXVzZWQgYnkgJyArICd3aGl0ZS1zcGFjZSBpbnNlcnRlZCBhcm91bmQgc2VydmVyLXJlbmRlcmVkIG1hcmt1cC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQocm9vdFNpYmxpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoc2hvdWxkSHlkcmF0ZSAmJiAhZm9yY2VIeWRyYXRlICYmICF3YXJuZWRBYm91dEh5ZHJhdGVBUEkpIHtcbiAgICAgIHdhcm5lZEFib3V0SHlkcmF0ZUFQSSA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ3JlbmRlcigpOiBDYWxsaW5nIFJlYWN0RE9NLnJlbmRlcigpIHRvIGh5ZHJhdGUgc2VydmVyLXJlbmRlcmVkIG1hcmt1cCAnICsgJ3dpbGwgc3RvcCB3b3JraW5nIGluIFJlYWN0IHYxOC4gUmVwbGFjZSB0aGUgUmVhY3RET00ucmVuZGVyKCkgY2FsbCAnICsgJ3dpdGggUmVhY3RET00uaHlkcmF0ZSgpIGlmIHlvdSB3YW50IFJlYWN0IHRvIGF0dGFjaCB0byB0aGUgc2VydmVyIEhUTUwuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUxlZ2FjeVJvb3QoY29udGFpbmVyLCBzaG91bGRIeWRyYXRlID8ge1xuICAgIGh5ZHJhdGU6IHRydWVcbiAgfSA6IHVuZGVmaW5lZCk7XG59XG5cbmZ1bmN0aW9uIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gIHtcbiAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBjaGlsZHJlbiwgY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUsIGNhbGxiYWNrKSB7XG4gIHtcbiAgICB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzKGNvbnRhaW5lcik7XG4gICAgd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaywgJ3JlbmRlcicpO1xuICB9IC8vIFRPRE86IFdpdGhvdXQgYGFueWAgdHlwZSwgRmxvdyBzYXlzIFwiUHJvcGVydHkgY2Fubm90IGJlIGFjY2Vzc2VkIG9uIGFueVxuICAvLyBtZW1iZXIgb2YgaW50ZXJzZWN0aW9uIHR5cGUuXCIgV2h5eXl5eXkuXG5cblxuICB2YXIgcm9vdCA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuICB2YXIgZmliZXJSb290O1xuXG4gIGlmICghcm9vdCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICByb290ID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPSBsZWdhY3lDcmVhdGVSb290RnJvbURPTUNvbnRhaW5lcihjb250YWluZXIsIGZvcmNlSHlkcmF0ZSk7XG4gICAgZmliZXJSb290ID0gcm9vdC5faW50ZXJuYWxSb290O1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xuICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9IC8vIEluaXRpYWwgbW91bnQgc2hvdWxkIG5vdCBiZSBiYXRjaGVkLlxuXG5cbiAgICB1bmJhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgZmliZXJSb290LCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBmaWJlclJvb3QgPSByb290Ll9pbnRlcm5hbFJvb3Q7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX29yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xuXG4gICAgICAgIF9vcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9IC8vIFVwZGF0ZVxuXG5cbiAgICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIGZpYmVyUm9vdCwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudE9yRWxlbWVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIkMy5jdXJyZW50O1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIG93bmVyLnN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIHdhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gb3duZXIuc3RhdGVOb2RlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcjtcblxuICAgICAgaWYgKCF3YXJuZWRBYm91dFJlZnNJblJlbmRlcikge1xuICAgICAgICBlcnJvcignJXMgaXMgYWNjZXNzaW5nIGZpbmRET01Ob2RlIGluc2lkZSBpdHMgcmVuZGVyKCkuICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpIHx8ICdBIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb21wb25lbnRPckVsZW1lbnQ7XG4gIH1cblxuICB7XG4gICAgcmV0dXJuIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnRPckVsZW1lbnQsICdmaW5kRE9NTm9kZScpO1xuICB9XG59XG5mdW5jdGlvbiBoeWRyYXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLmh5ZHJhdGUoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIGNyZWF0ZVJvb3QoY29udGFpbmVyLCB7aHlkcmF0ZTogdHJ1ZX0pLnJlbmRlcihlbGVtZW50KT8nKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogdGhyb3cgb3Igd2FybiBpZiB3ZSBjb3VsZG4ndCBoeWRyYXRlP1xuXG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIGVsZW1lbnQsIGNvbnRhaW5lciwgdHJ1ZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gcmVuZGVyKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLnJlbmRlcigpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgcm9vdC5yZW5kZXIoZWxlbWVudCk/Jyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIGVsZW1lbnQsIGNvbnRhaW5lciwgZmFsc2UsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lck5vZGUpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghKHBhcmVudENvbXBvbmVudCAhPSBudWxsICYmIGhhcyhwYXJlbnRDb21wb25lbnQpKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInBhcmVudENvbXBvbmVudCBtdXN0IGJlIGEgdmFsaWQgUmVhY3QgQ29tcG9uZW50XCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBmYWxzZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gdW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSgpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QudW5tb3VudCgpPycpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcikge1xuICAgIHtcbiAgICAgIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIHZhciByZW5kZXJlZEJ5RGlmZmVyZW50UmVhY3QgPSByb290RWwgJiYgIWdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKTtcblxuICAgICAgaWYgKHJlbmRlcmVkQnlEaWZmZXJlbnRSZWFjdCkge1xuICAgICAgICBlcnJvcihcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3JlIGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgYW5vdGhlciBjb3B5IG9mIFJlYWN0LicpO1xuICAgICAgfVxuICAgIH0gLy8gVW5tb3VudCBzaG91bGQgbm90IGJlIGJhdGNoZWQuXG5cblxuICAgIHVuYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgICAgbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgbnVsbCwgY29udGFpbmVyLCBmYWxzZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBgZGVsZXRlIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyYFxuICAgICAgICBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9IG51bGw7XG4gICAgICAgIHVubWFya0NvbnRhaW5lckFzUm9vdChjb250YWluZXIpO1xuICAgICAgfSk7XG4gICAgfSk7IC8vIElmIHlvdSBjYWxsIHVubW91bnRDb21wb25lbnRBdE5vZGUgdHdpY2UgaW4gcXVpY2sgc3VjY2Vzc2lvbiwgeW91J2xsXG4gICAgLy8gZ2V0IGB0cnVlYCB0d2ljZS4gVGhhdCdzIHByb2JhYmx5IGZpbmU/XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICB2YXIgX3Jvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuXG4gICAgICB2YXIgaGFzTm9uUm9vdFJlYWN0Q2hpbGQgPSAhIShfcm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUoX3Jvb3RFbCkpOyAvLyBDaGVjayBpZiB0aGUgY29udGFpbmVyIGl0c2VsZiBpcyBhIFJlYWN0IHJvb3Qgbm9kZS5cblxuICAgICAgdmFyIGlzQ29udGFpbmVyUmVhY3RSb290ID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIucGFyZW50Tm9kZSkgJiYgISFjb250YWluZXIucGFyZW50Tm9kZS5fcmVhY3RSb290Q29udGFpbmVyO1xuXG4gICAgICBpZiAoaGFzTm9uUm9vdFJlYWN0Q2hpbGQpIHtcbiAgICAgICAgZXJyb3IoXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IFJlYWN0IGFuZCBpcyBub3QgYSB0b3AtbGV2ZWwgY29udGFpbmVyLiAlcycsIGlzQ29udGFpbmVyUmVhY3RSb290ID8gJ1lvdSBtYXkgaGF2ZSBhY2NpZGVudGFsbHkgcGFzc2VkIGluIGEgUmVhY3Qgcm9vdCBub2RlIGluc3RlYWQgJyArICdvZiBpdHMgY29udGFpbmVyLicgOiAnSW5zdGVhZCwgaGF2ZSB0aGUgcGFyZW50IGNvbXBvbmVudCB1cGRhdGUgaXRzIHN0YXRlIGFuZCAnICsgJ3JlcmVuZGVyIGluIG9yZGVyIHRvIHJlbW92ZSB0aGlzIGNvbXBvbmVudC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuc2V0QXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uJDEpO1xuc2V0QXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24kMSk7XG5zZXRBdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkoYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5JDEpO1xuc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkocnVuV2l0aFByaW9yaXR5JDIpO1xudmFyIGRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsID0gZmFsc2U7XG5cbntcbiAgaWYgKHR5cGVvZiBNYXAgIT09ICdmdW5jdGlvbicgfHwgLy8gJEZsb3dJc3N1ZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBNYXAgaGFzIG5vIHByb3RvdHlwZVxuICBNYXAucHJvdG90eXBlID09IG51bGwgfHwgdHlwZW9mIE1hcC5wcm90b3R5cGUuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgU2V0ICE9PSAnZnVuY3Rpb24nIHx8IC8vICRGbG93SXNzdWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgU2V0IGhhcyBubyBwcm90b3R5cGVcbiAgU2V0LnByb3RvdHlwZSA9PSBudWxsIHx8IHR5cGVvZiBTZXQucHJvdG90eXBlLmNsZWFyICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBTZXQucHJvdG90eXBlLmZvckVhY2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICBlcnJvcignUmVhY3QgZGVwZW5kcyBvbiBNYXAgYW5kIFNldCBidWlsdC1pbiB0eXBlcy4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gIH1cbn1cblxuc2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMyk7XG5zZXRCYXRjaGluZ0ltcGxlbWVudGF0aW9uKGJhdGNoZWRVcGRhdGVzJDEsIGRpc2NyZXRlVXBkYXRlcyQxLCBmbHVzaERpc2NyZXRlVXBkYXRlcywgYmF0Y2hlZEV2ZW50VXBkYXRlcyQxKTtcblxuZnVuY3Rpb24gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lcikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBwYXNzIFJlYWN0RE9NIHBvcnRhbCBpbXBsZW1lbnRhdGlvbiBhcyB0aGlyZCBhcmd1bWVudFxuICAvLyAkRmxvd0ZpeE1lIFRoZSBGbG93IHR5cGUgaXMgb3BhcXVlIGJ1dCB0aGVyZSdzIG5vIHdheSB0byBhY3R1YWxseSBjcmVhdGUgaXQuXG5cblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXIsIG51bGwsIGtleSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcblxuICByZXR1cm4gdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVyKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwpIHtcbiAgICAgIGRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsID0gdHJ1ZTtcblxuICAgICAgd2FybignVGhlIFJlYWN0RE9NLnVuc3RhYmxlX2NyZWF0ZVBvcnRhbCgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RET00uY3JlYXRlUG9ydGFsKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSSwgJyArICdidXQgd2l0aG91dCB0aGUgXCJ1bnN0YWJsZV9cIiBwcmVmaXguJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXIsIGtleSk7XG59XG5cbnZhciBJbnRlcm5hbHMgPSB7XG4gIC8vIEtlZXAgaW4gc3luYyB3aXRoIFJlYWN0VGVzdFV0aWxzLmpzLCBhbmQgUmVhY3RUZXN0VXRpbHNBY3QuanMuXG4gIC8vIFRoaXMgaXMgYW4gYXJyYXkgZm9yIGJldHRlciBtaW5pZmljYXRpb24uXG4gIEV2ZW50czogW2dldEluc3RhbmNlRnJvbU5vZGUsIGdldE5vZGVGcm9tSW5zdGFuY2UsIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUsIGVucXVldWVTdGF0ZVJlc3RvcmUsIHJlc3RvcmVTdGF0ZUlmTmVlZGVkLCBmbHVzaFBhc3NpdmVFZmZlY3RzLCAvLyBUT0RPOiBUaGlzIGlzIHJlbGF0ZWQgdG8gYGFjdGAsIG5vdCBldmVudHMuIE1vdmUgdG8gc2VwYXJhdGUga2V5P1xuICBJc1RoaXNSZW5kZXJlckFjdGluZ11cbn07XG52YXIgZm91bmREZXZUb29scyA9IGluamVjdEludG9EZXZUb29scyh7XG4gIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxcbiAgYnVuZGxlVHlwZTogIDEgLFxuICB2ZXJzaW9uOiBSZWFjdFZlcnNpb24sXG4gIHJlbmRlcmVyUGFja2FnZU5hbWU6ICdyZWFjdC1kb20nXG59KTtcblxue1xuICBpZiAoIWZvdW5kRGV2VG9vbHMgJiYgY2FuVXNlRE9NICYmIHdpbmRvdy50b3AgPT09IHdpbmRvdy5zZWxmKSB7XG4gICAgLy8gSWYgd2UncmUgaW4gQ2hyb21lIG9yIEZpcmVmb3gsIHByb3ZpZGUgYSBkb3dubG9hZCBsaW5rIGlmIG5vdCBpbnN0YWxsZWQuXG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lJykgPiAtMSAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0VkZ2UnKSA9PT0gLTEgfHwgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdGaXJlZm94JykgPiAtMSkge1xuICAgICAgdmFyIHByb3RvY29sID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sOyAvLyBEb24ndCB3YXJuIGluIGV4b3RpYyBjYXNlcyBsaWtlIGNocm9tZS1leHRlbnNpb246Ly8uXG5cbiAgICAgIGlmICgvXihodHRwcz98ZmlsZSk6JC8udGVzdChwcm90b2NvbCkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuICAgICAgICBjb25zb2xlLmluZm8oJyVjRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xzICcgKyAnZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzJyArIChwcm90b2NvbCA9PT0gJ2ZpbGU6JyA/ICdcXG5Zb3UgbWlnaHQgbmVlZCB0byB1c2UgYSBsb2NhbCBIVFRQIHNlcnZlciAoaW5zdGVhZCBvZiBmaWxlOi8vKTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMtZmFxJyA6ICcnKSwgJ2ZvbnQtd2VpZ2h0OmJvbGQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IEludGVybmFscztcbmV4cG9ydHMuY3JlYXRlUG9ydGFsID0gY3JlYXRlUG9ydGFsJDE7XG5leHBvcnRzLmZpbmRET01Ob2RlID0gZmluZERPTU5vZGU7XG5leHBvcnRzLmZsdXNoU3luYyA9IGZsdXNoU3luYztcbmV4cG9ydHMuaHlkcmF0ZSA9IGh5ZHJhdGU7XG5leHBvcnRzLnJlbmRlciA9IHJlbmRlcjtcbmV4cG9ydHMudW5tb3VudENvbXBvbmVudEF0Tm9kZSA9IHVubW91bnRDb21wb25lbnRBdE5vZGU7XG5leHBvcnRzLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gYmF0Y2hlZFVwZGF0ZXMkMTtcbmV4cG9ydHMudW5zdGFibGVfY3JlYXRlUG9ydGFsID0gdW5zdGFibGVfY3JlYXRlUG9ydGFsO1xuZXhwb3J0cy51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciA9IHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vbGliL2hhcycpO1xuXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7IC8qKi8gfVxuICB9O1xufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cbiAqIEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5kIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBlLWNoZWNrZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gZ2V0U3RhY2sgUmV0dXJucyB0aGUgY29tcG9uZW50IHN0YWNrLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBnZXRTdGFjaykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcbiAgICAgICAgICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArXG4gICAgICAgICAgICAgICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICcgK1xuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdGYWlsZWQgJyArIGxvY2F0aW9uICsgJyB0eXBlOiAnICsgZXJyb3IubWVzc2FnZSArIChzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzZXRzIHdhcm5pbmcgY2FjaGUgd2hlbiB0ZXN0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlcztcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJy4vY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJpZ2ludDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2JpZ2ludCcpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlLCBkYXRhKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGE6IHt9O1xuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9uICcgK1xuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpLFxuICAgICAgICAgIHtleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZX1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheSwgZ290ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMuICcgK1xuICAgICAgICAgICAgJ0EgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLidcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzKHByb3BWYWx1ZSwga2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgdmFyIGNoZWNrZXJSZXN1bHQgPSBjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoY2hlY2tlclJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQuZGF0YSAmJiBoYXMoY2hlY2tlclJlc3VsdC5kYXRhLCAnZXhwZWN0ZWRUeXBlJykpIHtcbiAgICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goY2hlY2tlclJlc3VsdC5kYXRhLmV4cGVjdGVkVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBleHBlY3RlZFR5cGVzTWVzc2FnZSA9IChleHBlY3RlZFR5cGVzLmxlbmd0aCA+IDApID8gJywgZXhwZWN0ZWQgb25lIG9mIHR5cGUgWycgKyBleHBlY3RlZFR5cGVzLmpvaW4oJywgJykgKyAnXSc6ICcnO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCcgKyBleHBlY3RlZFR5cGVzTWVzc2FnZSArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgdHlwZSkge1xuICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5ICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlICsgJ2AuJ1xuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIGdldFByZWNpc2VUeXBlKGNoZWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbSBwcm9wcy5cbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmIChoYXMoc2hhcGVUeXBlcywga2V5KSAmJiB0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwgIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoYXJnKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBwYXJzZVZhbHVlKGFyZykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VWYWx1ZSAoYXJnKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gYXJnO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQ2xhc3MgKHZhbHVlLCBuZXdDbGFzcykge1xuXHRcdGlmICghbmV3Q2xhc3MpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgJyAnICsgbmV3Q2xhc3M7XG5cdFx0fVxuXHRcblx0XHRyZXR1cm4gdmFsdWUgKyBuZXdDbGFzcztcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciByZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5mdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgYmxhY2tsaXN0KSB7XG4gIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXG4gICAgaWYgKG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgIGlmIChpbmhlcml0ZWRDb21wb25lbnQgJiYgaW5oZXJpdGVkQ29tcG9uZW50ICE9PSBvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgICAgaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBpbmhlcml0ZWRDb21wb25lbnQsIGJsYWNrbGlzdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRTdGF0aWNzID0gZ2V0U3RhdGljcyh0YXJnZXRDb21wb25lbnQpO1xuICAgIHZhciBzb3VyY2VTdGF0aWNzID0gZ2V0U3RhdGljcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFLTk9XTl9TVEFUSUNTW2tleV0gJiYgIShibGFja2xpc3QgJiYgYmxhY2tsaXN0W2tleV0pICYmICEoc291cmNlU3RhdGljcyAmJiBzb3VyY2VTdGF0aWNzW2tleV0pICYmICEodGFyZ2V0U3RhdGljcyAmJiB0YXJnZXRTdGF0aWNzW2tleV0pKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb21wb25lbnQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcbiIsICIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCAiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLCAidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUdldDtcbiIsICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCAidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsICJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsICIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCAiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrR2V0O1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCAiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwgInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsICJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCAidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsICIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsICJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCAiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCAidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCAidmFyIEhhc2ggPSByZXF1aXJlKCcuL19IYXNoJyksXG4gICAgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUNsZWFyO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCAidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwgInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCAidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCAidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCAiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVBZGQ7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlSGFzO1xuIiwgInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyksXG4gICAgc2V0Q2FjaGVBZGQgPSByZXF1aXJlKCcuL19zZXRDYWNoZUFkZCcpLFxuICAgIHNldENhY2hlSGFzID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVIYXMnKTtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldENhY2hlO1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhY2hlSGFzO1xuIiwgInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlTb21lID0gcmVxdWlyZSgnLi9fYXJyYXlTb21lJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBhcnJTdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAoYXJyU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIGFyclN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBhcnJheTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxBcnJheXM7XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsICIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFRvQXJyYXk7XG4iLCAiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBtYXBUb0FycmF5ID0gcmVxdWlyZSgnLi9fbWFwVG9BcnJheScpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXG4gKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCB0YWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XG5cbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAvLyBDb2VyY2UgYm9vbGVhbnMgdG8gYDFgIG9yIGAwYCBhbmQgZGF0ZXMgdG8gbWlsbGlzZWNvbmRzLlxuICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgIHJldHVybiBlcSgrb2JqZWN0LCArb3RoZXIpO1xuXG4gICAgY2FzZSBlcnJvclRhZzpcbiAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHZhciBjb252ZXJ0ID0gbWFwVG9BcnJheTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRztcbiAgICAgIGNvbnZlcnQgfHwgKGNvbnZlcnQgPSBzZXRUb0FycmF5KTtcblxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICBiaXRtYXNrIHw9IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc7XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgdmFyIHJlc3VsdCA9IGVxdWFsQXJyYXlzKGNvbnZlcnQob2JqZWN0KSwgY29udmVydChvdGhlciksIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCkgPT0gc3ltYm9sVmFsdWVPZi5jYWxsKG90aGVyKTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxCeVRhZztcbiIsICIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlQdXNoO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCAidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRBbGxLZXlzO1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcbiIsICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5cyk7XG4gKiAvLyA9PiBbW10sIFtdXVxuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5c1swXSA9PT0gYXJyYXlzWzFdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIHN0dWJBcnJheSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJBcnJheTtcbiIsICJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsICJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLCAiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCAidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCAidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCAidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsICIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwgInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsICJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsICJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsICJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXM7XG4iLCAidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzO1xuIiwgInZhciBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChvYmpTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbE9iamVjdHM7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhVmlldztcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFByb21pc2UgPSBnZXROYXRpdmUocm9vdCwgJ1Byb21pc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsICJ2YXIgRGF0YVZpZXcgPSByZXF1aXJlKCcuL19EYXRhVmlldycpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIFByb21pc2UgPSByZXF1aXJlKCcuL19Qcm9taXNlJyksXG4gICAgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgV2Vha01hcCA9IHJlcXVpcmUoJy4vX1dlYWtNYXAnKSxcbiAgICBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKipcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG52YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUYWc7XG4iLCAidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgZXF1YWxCeVRhZyA9IHJlcXVpcmUoJy4vX2VxdWFsQnlUYWcnKSxcbiAgICBlcXVhbE9iamVjdHMgPSByZXF1aXJlKCcuL19lcXVhbE9iamVjdHMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWxEZWVwO1xuIiwgInZhciBiYXNlSXNFcXVhbERlZXAgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbERlZXAnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvblxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgfVxuICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbDtcbiIsICJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpO1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmVcbiAqIGVxdWl2YWxlbnQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLFxuICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICogc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBhcmUgY29tcGFyZWRcbiAqIGJ5IHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTVxuICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5pc0VxdWFsKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIG9iamVjdCA9PT0gb3RoZXI7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VxdWFsKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VxdWFsO1xuIiwgIi8vISBtb21lbnQuanNcbi8vISB2ZXJzaW9uIDogMi4zMC4xXG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBtb21lbnRqcy5jb21cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgYXJyTGVuID0gYXJyLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyckxlbjsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHk6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0OiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZEVyYTogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgICAgICAgICAgZXJhOiBudWxsLFxuICAgICAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgICAgICByZmMyODIyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICB2YXIgZmxhZ3MgPSBudWxsLFxuICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBmYWxzZSxcbiAgICAgICAgICAgIGlzTm93VmFsaWQgPSBtLl9kICYmICFpc05hTihtLl9kLmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChpc05vd1ZhbGlkKSB7XG4gICAgICAgICAgICBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgbW9tZW50UHJvcGVydGllc0xlbiA9IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllc0xlbiA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGFyZ0xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPVxuICAgICAgICAgICAgLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIEQ6ICdkYXRlJyxcbiAgICAgICAgZGF0ZXM6ICdkYXRlJyxcbiAgICAgICAgZGF0ZTogJ2RhdGUnLFxuICAgICAgICBkOiAnZGF5JyxcbiAgICAgICAgZGF5czogJ2RheScsXG4gICAgICAgIGRheTogJ2RheScsXG4gICAgICAgIGU6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheXM6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheTogJ3dlZWtkYXknLFxuICAgICAgICBFOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXlzOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXk6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgREREOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgZGF5b2Z5ZWFyczogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcjogJ2RheU9mWWVhcicsXG4gICAgICAgIGg6ICdob3VyJyxcbiAgICAgICAgaG91cnM6ICdob3VyJyxcbiAgICAgICAgaG91cjogJ2hvdXInLFxuICAgICAgICBtczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtaWxsaXNlY29uZDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbTogJ21pbnV0ZScsXG4gICAgICAgIG1pbnV0ZXM6ICdtaW51dGUnLFxuICAgICAgICBtaW51dGU6ICdtaW51dGUnLFxuICAgICAgICBNOiAnbW9udGgnLFxuICAgICAgICBtb250aHM6ICdtb250aCcsXG4gICAgICAgIG1vbnRoOiAnbW9udGgnLFxuICAgICAgICBROiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXJzOiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXI6ICdxdWFydGVyJyxcbiAgICAgICAgczogJ3NlY29uZCcsXG4gICAgICAgIHNlY29uZHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmQ6ICdzZWNvbmQnLFxuICAgICAgICBnZzogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXJzOiAnd2Vla1llYXInLFxuICAgICAgICB3ZWVreWVhcjogJ3dlZWtZZWFyJyxcbiAgICAgICAgR0c6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyczogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgaXNvd2Vla3llYXI6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIHc6ICd3ZWVrJyxcbiAgICAgICAgd2Vla3M6ICd3ZWVrJyxcbiAgICAgICAgd2VlazogJ3dlZWsnLFxuICAgICAgICBXOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWtzOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWs6ICdpc29XZWVrJyxcbiAgICAgICAgeTogJ3llYXInLFxuICAgICAgICB5ZWFyczogJ3llYXInLFxuICAgICAgICB5ZWFyOiAneWVhcicsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge1xuICAgICAgICBkYXRlOiA5LFxuICAgICAgICBkYXk6IDExLFxuICAgICAgICB3ZWVrZGF5OiAxMSxcbiAgICAgICAgaXNvV2Vla2RheTogMTEsXG4gICAgICAgIGRheU9mWWVhcjogNCxcbiAgICAgICAgaG91cjogMTMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAxNixcbiAgICAgICAgbWludXRlOiAxNCxcbiAgICAgICAgbW9udGg6IDgsXG4gICAgICAgIHF1YXJ0ZXI6IDcsXG4gICAgICAgIHNlY29uZDogMTUsXG4gICAgICAgIHdlZWtZZWFyOiAxLFxuICAgICAgICBpc29XZWVrWWVhcjogMSxcbiAgICAgICAgd2VlazogNSxcbiAgICAgICAgaXNvV2VlazogNSxcbiAgICAgICAgeWVhcjogMSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxID0gL1xcZC8sIC8vICAgICAgIDAgLSA5XG4gICAgICAgIG1hdGNoMiA9IC9cXGRcXGQvLCAvLyAgICAgIDAwIC0gOTlcbiAgICAgICAgbWF0Y2gzID0gL1xcZHszfS8sIC8vICAgICAwMDAgLSA5OTlcbiAgICAgICAgbWF0Y2g0ID0gL1xcZHs0fS8sIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgICAgIG1hdGNoNiA9IC9bKy1dP1xcZHs2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8yID0gL1xcZFxcZD8vLCAvLyAgICAgICAwIC0gOTlcbiAgICAgICAgbWF0Y2gzdG80ID0gL1xcZFxcZFxcZFxcZD8vLCAvLyAgICAgOTk5IC0gOTk5OVxuICAgICAgICBtYXRjaDV0bzYgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy8sIC8vICAgOTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8zID0gL1xcZHsxLDN9LywgLy8gICAgICAgMCAtIDk5OVxuICAgICAgICBtYXRjaDF0bzQgPSAvXFxkezEsNH0vLCAvLyAgICAgICAwIC0gOTk5OVxuICAgICAgICBtYXRjaDF0bzYgPSAvWystXT9cXGR7MSw2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2hVbnNpZ25lZCA9IC9cXGQrLywgLy8gICAgICAgMCAtIGluZlxuICAgICAgICBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvLCAvLyAgICAtaW5mIC0gaW5mXG4gICAgICAgIG1hdGNoT2Zmc2V0ID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpLCAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hTaG9ydE9mZnNldCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpLCAvLyArMDAgLTAwICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG4gICAgICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuICAgICAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgICAgIG1hdGNoV29yZCA9XG4gICAgICAgICAgICAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxcbiAgICAgICAgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyA9IC9eWzEtOV1cXGQ/LywgLy8gICAgICAgICAxLTk5XG4gICAgICAgIG1hdGNoMXRvMkhhc1plcm8gPSAvXihbMS05XVxcZHxcXGQpLywgLy8gICAgICAgICAgIDAtOTlcbiAgICAgICAgcmVnZXhlcztcblxuICAgIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4odG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpXG4gICAgICAgICAgICA/IHJlZ2V4XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4ID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKFxuICAgICAgICAgICAgc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIHRva2VucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBmdW5jID0gY2FsbGJhY2ssXG4gICAgICAgICAgICB0b2tlbkxlbjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbi5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGQgPSBtb20uX2QsXG4gICAgICAgICAgICBpc1VUQyA9IG1vbS5faXNVVEM7XG5cbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdNaWxsaXNlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgOiBkLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENTZWNvbmRzKCkgOiBkLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWludXRlcygpIDogZC5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICBjYXNlICdIb3Vycyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENIb3VycygpIDogZC5nZXRIb3VycygpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXRlKCkgOiBkLmdldERhdGUoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RheSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXkoKSA6IGQuZ2V0RGF5KCk7XG4gICAgICAgICAgICBjYXNlICdNb250aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNb250aCgpIDogZC5nZXRNb250aCgpO1xuICAgICAgICAgICAgY2FzZSAnRnVsbFllYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRnVsbFllYXIoKSA6IGQuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsgLy8gSnVzdCBpbiBjYXNlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIHZhciBkLCBpc1VUQywgeWVhciwgbW9udGgsIGRhdGU7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZCA9IG1vbS5fZDtcbiAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVENcbiAgICAgICAgICAgICAgICAgICAgPyBkLnNldFVUQ01pbGxpc2Vjb25kcyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBkLnNldE1pbGxpc2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENTZWNvbmRzKHZhbHVlKSA6IGQuc2V0U2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnTWludXRlcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNaW51dGVzKHZhbHVlKSA6IGQuc2V0TWludXRlcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDSG91cnModmFsdWUpIDogZC5zZXRIb3Vycyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENEYXRlKHZhbHVlKSA6IGQuc2V0RGF0ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnRGF5JzogLy8gTm90IHJlYWxcbiAgICAgICAgICAgIC8vICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF5KHZhbHVlKSA6IGQuc2V0RGF5KHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBjYXNlICdNb250aCc6IC8vIE5vdCB1c2VkIGJlY2F1c2Ugd2UgbmVlZCB0byBwYXNzIHR3byB2YXJpYWJsZXNcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ01vbnRoKHZhbHVlKSA6IGQuc2V0TW9udGgodmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gU2VlIGJlbG93IC4uLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG5cbiAgICAgICAgeWVhciA9IHZhbHVlO1xuICAgICAgICBtb250aCA9IG1vbS5tb250aCgpO1xuICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcbiAgICAgICAgZGF0ZSA9IGRhdGUgPT09IDI5ICYmIG1vbnRoID09PSAxICYmICFpc0xlYXBZZWFyKHllYXIpID8gMjggOiBkYXRlO1xuICAgICAgICB2b2lkIChpc1VUQ1xuICAgICAgICAgICAgPyBkLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBkLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKSk7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBwcmlvcml0aXplZExlbiA9IHByaW9yaXRpemVkLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZExlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID1cbiAgICAgICAgICAgICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9XG4gICAgICAgICAgICAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy8sXG4gICAgICAgIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1tcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFsnc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0W1xuICAgICAgICAgICAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykgKyAnfF4nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHNldE1vbnRoKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1vbnRoID0gdmFsdWUsXG4gICAgICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcblxuICAgICAgICBkYXRlID0gZGF0ZSA8IDI5ID8gZGF0ZSA6IE1hdGgubWluKGRhdGUsIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIG1vbnRoKSk7XG4gICAgICAgIHZvaWQgKG1vbS5faXNVVENcbiAgICAgICAgICAgID8gbW9tLl9kLnNldFVUQ01vbnRoKG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBtb20uX2Quc2V0TW9udGgobW9udGgsIGRhdGUpKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgc2hvcnRQLFxuICAgICAgICAgICAgbG9uZ1A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQID0gcmVnZXhFc2NhcGUodGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdQKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vIGNhbid0IGp1c3QgYXBwbHkoKSB0byBjcmVhdGUgYSBkYXRlOlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTgxMzQ4XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlKHkpIHtcbiAgICAgICAgdmFyIGRhdGUsIGFyZ3M7XG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsXG4gICAgICAgICAgICByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLFxuICAgICAgICAgICAgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsndycsICd3dycsICdXJywgJ1dXJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPVxuICAgICAgICAgICAgJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IGlzQXJyYXkodGhpcy5fd2Vla2RheXMpXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzW1xuICAgICAgICAgICAgICAgICAgbSAmJiBtICE9PSB0cnVlICYmIHRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHdlZWtkYXlzLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZSQxKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c01pbihcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF5ID0gZ2V0KHRoaXMsICdEYXknKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWxlTmFtZVNhbmUobmFtZSkge1xuICAgICAgICAvLyBQcmV2ZW50IG5hbWVzIHRoYXQgbG9vayBsaWtlIGZpbGVzeXN0ZW0gcGF0aHMsIGkuZSBjb250YWluICcvJyBvciAnXFwnXG4gICAgICAgIC8vIEVuc3VyZSBuYW1lIGlzIGF2YWlsYWJsZSBhbmQgZnVuY3Rpb24gcmV0dXJucyBib29sZWFuXG4gICAgICAgIHJldHVybiAhIShuYW1lICYmIG5hbWUubWF0Y2goJ15bXi9cXFxcXFxcXF0qJCcpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGwsXG4gICAgICAgICAgICBhbGlhc2VkUmVxdWlyZTtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgbW9kdWxlICYmXG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyAmJlxuICAgICAgICAgICAgaXNMb2NhbGVOYW1lU2FuZShuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2xkTG9jYWxlID0gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgbm90IGZvdW5kIHRvIGF2b2lkIHJlcGVhdGluZyBleHBlbnNpdmUgZmlsZSByZXF1aXJlIGNhbGwgY2F1c2luZyBoaWdoIENQVVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGZpbmQgZW4tVVMsIGVuX1VTLCBlbi11cyBmb3IgZXZlcnkgZm9ybWF0IGNhbGxcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbnVsbDsgLy8gbnVsbCBtZWFucyBub3QgZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gbW9tZW50LmR1cmF0aW9uLl9sb2NhbGUgPSBtb21lbnQuX2xvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnTG9jYWxlICcgKyBrZXkgKyAnIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbmVMb2NhbGVPdmVycmlkZScsXG4gICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVGYW1pbGllc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGxvY2FsZSBBRlRFUiBhbGwgY2hpbGQgbG9jYWxlcyBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGNyZWF0ZWQsIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHRoZSBjaGlsZCBsb2NhbGUgc2V0LlxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsICYmIGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGQgbG9jYWxlIGluLXBsYWNlIHRvIGF2b2lkIG1lbW9yeS1sZWFrc1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVMb2NhbGUgaXMgY2FsbGVkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGFiYnIgc28gaXQgd2lsbCBoYXZlIGEgbmFtZSAoZ2V0dGVycyByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIG90aGVyd2lzZSkuXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjb25maWcpO1xuICAgICAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBnZXRTZXRHbG9iYWxMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93KG0pIHtcbiAgICAgICAgdmFyIG92ZXJmbG93LFxuICAgICAgICAgICAgYSA9IG0uX2E7XG5cbiAgICAgICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPVxuICAgICAgICAgICAgICAgIGFbTU9OVEhdIDwgMCB8fCBhW01PTlRIXSA+IDExXG4gICAgICAgICAgICAgICAgICAgID8gTU9OVEhcbiAgICAgICAgICAgICAgICAgICAgOiBhW0RBVEVdIDwgMSB8fCBhW0RBVEVdID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pXG4gICAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gIT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID1cbiAgICAgICAgICAgIC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQsXG4gICAgICAgICAgICBpc29EYXRlc0xlbiA9IGlzb0RhdGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGlzb1RpbWVzTGVuID0gaXNvVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b2tlbkxlbjtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuICAgICAgICB0b2tlbkxlbiA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2UsXG4gICAgICAgICAgICBjb25maWdmTGVuID0gY29uZmlnLl9mLmxlbmd0aDtcblxuICAgICAgICBpZiAoY29uZmlnZkxlbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ2ZMZW47IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvcmRlckxlbiA9IG9yZGVyaW5nLmxlbmd0aDtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlckxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPVxuICAgICAgICAgICAgL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0eUxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0eUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgICA6IGRpZmYgPCAwXG4gICAgICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgICAgICAgICA6IGRpZmYgPCA3XG4gICAgICAgICAgICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihcbiAgICAgICAgWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXNOYW1lLFxuICAgICAgICAgICAgZXJhc0FiYnIsXG4gICAgICAgICAgICBlcmFzTmFycm93LFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZXJhc05hbWUgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpO1xuICAgICAgICAgICAgZXJhc0FiYnIgPSByZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpO1xuICAgICAgICAgICAgZXJhc05hcnJvdyA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KTtcblxuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc05hbWUpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYXJyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpICsgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mWWVhcihpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID1cbiAgICAgICAgICAgIE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTVcbiAgICAgICAgICAgICkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKGlucHV0IC0gZGF5T2ZZZWFyLCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdtJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpLFxuICAgICAgICBhc1NlY29uZHMgPSBtYWtlQXMoJ3MnKSxcbiAgICAgICAgYXNNaW51dGVzID0gbWFrZUFzKCdtJyksXG4gICAgICAgIGFzSG91cnMgPSBtYWtlQXMoJ2gnKSxcbiAgICAgICAgYXNEYXlzID0gbWFrZUFzKCdkJyksXG4gICAgICAgIGFzV2Vla3MgPSBtYWtlQXMoJ3cnKSxcbiAgICAgICAgYXNNb250aHMgPSBtYWtlQXMoJ00nKSxcbiAgICAgICAgYXNRdWFydGVycyA9IG1ha2VBcygnUScpLFxuICAgICAgICBhc1llYXJzID0gbWFrZUFzKCd5JyksXG4gICAgICAgIHZhbHVlT2YkMSA9IGFzTWlsbGlzZWNvbmRzO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjMwLjEnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN0cmluZywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3RyaW5nKDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaW5nO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBib29sZWFuIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBib29sZWFuLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCb29sZWFuKGZhbHNlKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQm9vbGVhbihudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYm9vbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCb29sZWFuO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE51bWJlcmAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiAqKk5vdGU6KiogVG8gZXhjbHVkZSBgSW5maW5pdHlgLCBgLUluZmluaXR5YCwgYW5kIGBOYU5gLCB3aGljaCBhcmVcbiAqIGNsYXNzaWZpZWQgYXMgbnVtYmVycywgdXNlIHRoZSBgXy5pc0Zpbml0ZWAgbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbnVtYmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNOdW1iZXIoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTnVtYmVyKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gbnVtYmVyVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc051bWJlcjtcbiIsICJ2YXIgaXNOdW1iZXIgPSByZXF1aXJlKCcuL2lzTnVtYmVyJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYE5hTmAuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gKiBbYE51bWJlci5pc05hTmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc05hTikgYW5kIGlzIG5vdCB0aGUgc2FtZSBhc1xuICogZ2xvYmFsIFtgaXNOYU5gXShodHRwczovL21kbi5pby9pc05hTikgd2hpY2ggcmV0dXJucyBgdHJ1ZWAgZm9yXG4gKiBgdW5kZWZpbmVkYCBhbmQgb3RoZXIgbm9uLW51bWJlciB2YWx1ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc05hTihOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOYU4obmV3IE51bWJlcihOYU4pKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc05hTih1bmRlZmluZWQpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOYU4odW5kZWZpbmVkKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gIC8vIEFuIGBOYU5gIHByaW1pdGl2ZSBpcyB0aGUgb25seSB2YWx1ZSB0aGF0IGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuXG4gIC8vIFBlcmZvcm0gdGhlIGB0b1N0cmluZ1RhZ2AgY2hlY2sgZmlyc3QgdG8gYXZvaWQgZXJyb3JzIHdpdGggc29tZVxuICAvLyBBY3RpdmVYIG9iamVjdHMgaW4gSUUuXG4gIHJldHVybiBpc051bWJlcih2YWx1ZSkgJiYgdmFsdWUgIT0gK3ZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTmFOO1xuIiwgIi8qISBAcHJlc2VydmVcbiAqIG51bWVyYWwuanNcbiAqIHZlcnNpb24gOiAyLjAuNlxuICogYXV0aG9yIDogQWRhbSBEcmFwZXJcbiAqIGxpY2Vuc2UgOiBNSVRcbiAqIGh0dHA6Ly9hZGFtd2RyYXBlci5naXRodWIuY29tL051bWVyYWwtanMvXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGdsb2JhbC5udW1lcmFsID0gZmFjdG9yeSgpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgVmFyaWFibGVzXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgdmFyIG51bWVyYWwsXG4gICAgICAgIF8sXG4gICAgICAgIFZFUlNJT04gPSAnMi4wLjYnLFxuICAgICAgICBmb3JtYXRzID0ge30sXG4gICAgICAgIGxvY2FsZXMgPSB7fSxcbiAgICAgICAgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICBjdXJyZW50TG9jYWxlOiAnZW4nLFxuICAgICAgICAgICAgemVyb0Zvcm1hdDogbnVsbCxcbiAgICAgICAgICAgIG51bGxGb3JtYXQ6IG51bGwsXG4gICAgICAgICAgICBkZWZhdWx0Rm9ybWF0OiAnMCwwJyxcbiAgICAgICAgICAgIHNjYWxlUGVyY2VudEJ5MTAwOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjdXJyZW50TG9jYWxlOiBkZWZhdWx0cy5jdXJyZW50TG9jYWxlLFxuICAgICAgICAgICAgemVyb0Zvcm1hdDogZGVmYXVsdHMuemVyb0Zvcm1hdCxcbiAgICAgICAgICAgIG51bGxGb3JtYXQ6IGRlZmF1bHRzLm51bGxGb3JtYXQsXG4gICAgICAgICAgICBkZWZhdWx0Rm9ybWF0OiBkZWZhdWx0cy5kZWZhdWx0Rm9ybWF0LFxuICAgICAgICAgICAgc2NhbGVQZXJjZW50QnkxMDA6IGRlZmF1bHRzLnNjYWxlUGVyY2VudEJ5MTAwXG4gICAgICAgIH07XG5cblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgQ29uc3RydWN0b3JzXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgLy8gTnVtZXJhbCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTnVtZXJhbChpbnB1dCwgbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cbiAgICAgICAgdGhpcy5fdmFsdWUgPSBudW1iZXI7XG4gICAgfVxuXG4gICAgbnVtZXJhbCA9IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHZhciB2YWx1ZSxcbiAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICB1bmZvcm1hdEZ1bmN0aW9uLFxuICAgICAgICAgICAgcmVnZXhwO1xuXG4gICAgICAgIGlmIChudW1lcmFsLmlzTnVtZXJhbChpbnB1dCkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gaW5wdXQudmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gMCB8fCB0eXBlb2YgaW5wdXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IG51bGwgfHwgXy5pc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy56ZXJvRm9ybWF0ICYmIGlucHV0ID09PSBvcHRpb25zLnplcm9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubnVsbEZvcm1hdCAmJiBpbnB1dCA9PT0gb3B0aW9ucy5udWxsRm9ybWF0IHx8ICFpbnB1dC5yZXBsYWNlKC9bXjAtOV0rL2csICcnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoa2luZCBpbiBmb3JtYXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2V4cCA9IHR5cGVvZiBmb3JtYXRzW2tpbmRdLnJlZ2V4cHMudW5mb3JtYXQgPT09ICdmdW5jdGlvbicgPyBmb3JtYXRzW2tpbmRdLnJlZ2V4cHMudW5mb3JtYXQoKSA6IGZvcm1hdHNba2luZF0ucmVnZXhwcy51bmZvcm1hdDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocmVnZXhwICYmIGlucHV0Lm1hdGNoKHJlZ2V4cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZm9ybWF0RnVuY3Rpb24gPSBmb3JtYXRzW2tpbmRdLnVuZm9ybWF0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVuZm9ybWF0RnVuY3Rpb24gPSB1bmZvcm1hdEZ1bmN0aW9uIHx8IG51bWVyYWwuXy5zdHJpbmdUb051bWJlcjtcblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdW5mb3JtYXRGdW5jdGlvbihpbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihpbnB1dCl8fCBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOdW1lcmFsKGlucHV0LCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIC8vIHZlcnNpb24gbnVtYmVyXG4gICAgbnVtZXJhbC52ZXJzaW9uID0gVkVSU0lPTjtcblxuICAgIC8vIGNvbXBhcmUgbnVtZXJhbCBvYmplY3RcbiAgICBudW1lcmFsLmlzTnVtZXJhbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgTnVtZXJhbDtcbiAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uc1xuICAgIG51bWVyYWwuXyA9IF8gPSB7XG4gICAgICAgIC8vIGZvcm1hdHMgbnVtYmVycyBzZXBhcmF0b3JzLCBkZWNpbWFscyBwbGFjZXMsIHNpZ25zLCBhYmJyZXZpYXRpb25zXG4gICAgICAgIG51bWJlclRvRm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbG9jYWxlc1tudW1lcmFsLm9wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgbmVnUCA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9wdERlYyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxlYWRpbmdDb3VudCA9IDAsXG4gICAgICAgICAgICAgICAgYWJiciA9ICcnLFxuICAgICAgICAgICAgICAgIHRyaWxsaW9uID0gMTAwMDAwMDAwMDAwMCxcbiAgICAgICAgICAgICAgICBiaWxsaW9uID0gMTAwMDAwMDAwMCxcbiAgICAgICAgICAgICAgICBtaWxsaW9uID0gMTAwMDAwMCxcbiAgICAgICAgICAgICAgICB0aG91c2FuZCA9IDEwMDAsXG4gICAgICAgICAgICAgICAgZGVjaW1hbCA9ICcnLFxuICAgICAgICAgICAgICAgIG5lZyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIGFiYnJGb3JjZSwgLy8gZm9yY2UgYWJicmV2aWF0aW9uXG4gICAgICAgICAgICAgICAgYWJzLFxuICAgICAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICAgICAgcG93ZXIsXG4gICAgICAgICAgICAgICAgaW50LFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbixcbiAgICAgICAgICAgICAgICBzaWduZWQsXG4gICAgICAgICAgICAgICAgdGhvdXNhbmRzLFxuICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIG5ldmVyIGZvcm1hdCBhIG51bGwgdmFsdWVcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgfHwgMDtcblxuICAgICAgICAgICAgYWJzID0gTWF0aC5hYnModmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBzZWUgaWYgd2Ugc2hvdWxkIHVzZSBwYXJlbnRoZXNlcyBmb3IgbmVnYXRpdmUgbnVtYmVyIG9yIGlmIHdlIHNob3VsZCBwcmVmaXggd2l0aCBhIHNpZ25cbiAgICAgICAgICAgIC8vIGlmIGJvdGggYXJlIHByZXNlbnQgd2UgZGVmYXVsdCB0byBwYXJlbnRoZXNlc1xuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcoJykpIHtcbiAgICAgICAgICAgICAgICBuZWdQID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvW1xcKHxcXCldL2csICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJysnKSB8fCBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnLScpKSB7XG4gICAgICAgICAgICAgICAgc2lnbmVkID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJysnKSA/IGZvcm1hdC5pbmRleE9mKCcrJykgOiB2YWx1ZSA8IDAgPyBmb3JtYXQuaW5kZXhPZignLScpIDogLTE7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1tcXCt8XFwtXS9nLCAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNlZSBpZiBhYmJyZXZpYXRpb24gaXMgd2FudGVkXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJ2EnKSkge1xuICAgICAgICAgICAgICAgIGFiYnJGb3JjZSA9IGZvcm1hdC5tYXRjaCgvYShrfG18Ynx0KT8vKTtcblxuICAgICAgICAgICAgICAgIGFiYnJGb3JjZSA9IGFiYnJGb3JjZSA/IGFiYnJGb3JjZVsxXSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNwYWNlIGJlZm9yZSBhYmJyZXZpYXRpb25cbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBhJykpIHtcbiAgICAgICAgICAgICAgICAgICAgYWJiciA9ICcgJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShuZXcgUmVnRXhwKGFiYnIgKyAnYVtrbWJ0XT8nKSwgJycpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFicyA+PSB0cmlsbGlvbiAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRyaWxsaW9uXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMudHJpbGxpb247XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyB0cmlsbGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFicyA8IHRyaWxsaW9uICYmIGFicyA+PSBiaWxsaW9uICYmICFhYmJyRm9yY2UgfHwgYWJickZvcmNlID09PSAnYicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYmlsbGlvblxuICAgICAgICAgICAgICAgICAgICBhYmJyICs9IGxvY2FsZS5hYmJyZXZpYXRpb25zLmJpbGxpb247XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyBiaWxsaW9uO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWJzIDwgYmlsbGlvbiAmJiBhYnMgPj0gbWlsbGlvbiAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ20nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG1pbGxpb25cbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5taWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gbWlsbGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFicyA8IG1pbGxpb24gJiYgYWJzID49IHRob3VzYW5kICYmICFhYmJyRm9yY2UgfHwgYWJickZvcmNlID09PSAnaycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhvdXNhbmRcbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy50aG91c2FuZDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIHRob3VzYW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9wdGlvbmFsIGRlY2ltYWxzXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJ1suXScpKSB7XG4gICAgICAgICAgICAgICAgb3B0RGVjID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgnWy5dJywgJy4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYnJlYWsgbnVtYmVyIGFuZCBmb3JtYXRcbiAgICAgICAgICAgIGludCA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVswXTtcbiAgICAgICAgICAgIHByZWNpc2lvbiA9IGZvcm1hdC5zcGxpdCgnLicpWzFdO1xuICAgICAgICAgICAgdGhvdXNhbmRzID0gZm9ybWF0LmluZGV4T2YoJywnKTtcbiAgICAgICAgICAgIGxlYWRpbmdDb3VudCA9IChmb3JtYXQuc3BsaXQoJy4nKVswXS5zcGxpdCgnLCcpWzBdLm1hdGNoKC8wL2cpIHx8IFtdKS5sZW5ndGg7XG5cbiAgICAgICAgICAgIGlmIChwcmVjaXNpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKHByZWNpc2lvbiwgJ1snKSkge1xuICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24ucmVwbGFjZSgnXScsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uLnNwbGl0KCdbJyk7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBudW1lcmFsLl8udG9GaXhlZCh2YWx1ZSwgKHByZWNpc2lvblswXS5sZW5ndGggKyBwcmVjaXNpb25bMV0ubGVuZ3RoKSwgcm91bmRpbmdGdW5jdGlvbiwgcHJlY2lzaW9uWzFdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9IG51bWVyYWwuXy50b0ZpeGVkKHZhbHVlLCBwcmVjaXNpb24ubGVuZ3RoLCByb3VuZGluZ0Z1bmN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpbnQgPSBkZWNpbWFsLnNwbGl0KCcuJylbMF07XG5cbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGRlY2ltYWwsICcuJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9IGxvY2FsZS5kZWxpbWl0ZXJzLmRlY2ltYWwgKyBkZWNpbWFsLnNwbGl0KCcuJylbMV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9ICcnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChvcHREZWMgJiYgTnVtYmVyKGRlY2ltYWwuc2xpY2UoMSkpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGludCA9IG51bWVyYWwuXy50b0ZpeGVkKHZhbHVlLCAwLCByb3VuZGluZ0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgYWJicmV2aWF0aW9uIGFnYWluIGFmdGVyIHJvdW5kaW5nXG4gICAgICAgICAgICBpZiAoYWJiciAmJiAhYWJickZvcmNlICYmIE51bWJlcihpbnQpID49IDEwMDAgJiYgYWJiciAhPT0gbG9jYWxlLmFiYnJldmlhdGlvbnMudHJpbGxpb24pIHtcbiAgICAgICAgICAgICAgICBpbnQgPSBTdHJpbmcoTnVtYmVyKGludCkgLyAxMDAwKTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoYWJicikge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIGxvY2FsZS5hYmJyZXZpYXRpb25zLnRob3VzYW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWJiciA9IGxvY2FsZS5hYmJyZXZpYXRpb25zLm1pbGxpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBsb2NhbGUuYWJicmV2aWF0aW9ucy5taWxsaW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWJiciA9IGxvY2FsZS5hYmJyZXZpYXRpb25zLmJpbGxpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBsb2NhbGUuYWJicmV2aWF0aW9ucy5iaWxsaW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWJiciA9IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRyaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIC8vIGZvcm1hdCBudW1iZXJcbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoaW50LCAnLScpKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gaW50LnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIG5lZyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbnQubGVuZ3RoIDwgbGVhZGluZ0NvdW50KSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGxlYWRpbmdDb3VudCAtIGludC5sZW5ndGg7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ID0gJzAnICsgaW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRob3VzYW5kcyA+IC0xKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gaW50LnRvU3RyaW5nKCkucmVwbGFjZSgvKFxcZCkoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnJDEnICsgbG9jYWxlLmRlbGltaXRlcnMudGhvdXNhbmRzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZvcm1hdC5pbmRleE9mKCcuJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpbnQgPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3V0cHV0ID0gaW50ICsgZGVjaW1hbCArIChhYmJyID8gYWJiciA6ICcnKTtcblxuICAgICAgICAgICAgaWYgKG5lZ1ApIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAobmVnUCAmJiBuZWcgPyAnKCcgOiAnJykgKyBvdXRwdXQgKyAobmVnUCAmJiBuZWcgPyAnKScgOiAnJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzaWduZWQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzaWduZWQgPT09IDAgPyAobmVnID8gJy0nIDogJysnKSArIG91dHB1dCA6IG91dHB1dCArIChuZWcgPyAnLScgOiAnKycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmVnKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICctJyArIG91dHB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHVuZm9ybWF0cyBudW1iZXJzIHNlcGFyYXRvcnMsIGRlY2ltYWxzIHBsYWNlcywgc2lnbnMsIGFiYnJldmlhdGlvbnNcbiAgICAgICAgc3RyaW5nVG9OdW1iZXI6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IGxvY2FsZXNbb3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBzdHJpbmdPcmlnaW5hbCA9IHN0cmluZyxcbiAgICAgICAgICAgICAgICBhYmJyZXZpYXRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICB0aG91c2FuZDogMyxcbiAgICAgICAgICAgICAgICAgICAgbWlsbGlvbjogNixcbiAgICAgICAgICAgICAgICAgICAgYmlsbGlvbjogOSxcbiAgICAgICAgICAgICAgICAgICAgdHJpbGxpb246IDEyXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhYmJyZXZpYXRpb24sXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICByZWdleHA7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnplcm9Gb3JtYXQgJiYgc3RyaW5nID09PSBvcHRpb25zLnplcm9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubnVsbEZvcm1hdCAmJiBzdHJpbmcgPT09IG9wdGlvbnMubnVsbEZvcm1hdCB8fCAhc3RyaW5nLnJlcGxhY2UoL1teMC05XSsvZywgJycpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZS5kZWxpbWl0ZXJzLmRlY2ltYWwgIT09ICcuJykge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFwuL2csICcnKS5yZXBsYWNlKGxvY2FsZS5kZWxpbWl0ZXJzLmRlY2ltYWwsICcuJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yIChhYmJyZXZpYXRpb24gaW4gYWJicmV2aWF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICByZWdleHAgPSBuZXcgUmVnRXhwKCdbXmEtekEtWl0nICsgbG9jYWxlLmFiYnJldmlhdGlvbnNbYWJicmV2aWF0aW9uXSArICcoPzpcXFxcKXwoXFxcXCcgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sICsgJyk/KD86XFxcXCkpPyk/JCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdPcmlnaW5hbC5tYXRjaChyZWdleHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAqPSBNYXRoLnBvdygxMCwgYWJicmV2aWF0aW9uc1thYmJyZXZpYXRpb25dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG5lZ2F0aXZlIG51bWJlclxuICAgICAgICAgICAgICAgIHZhbHVlICo9IChzdHJpbmcuc3BsaXQoJy0nKS5sZW5ndGggKyBNYXRoLm1pbihzdHJpbmcuc3BsaXQoJygnKS5sZW5ndGggLSAxLCBzdHJpbmcuc3BsaXQoJyknKS5sZW5ndGggLSAxKSkgJSAyID8gMSA6IC0xO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG5vbiBudW1iZXJzXG4gICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1teMC05XFwuXSsvZywgJycpO1xuXG4gICAgICAgICAgICAgICAgdmFsdWUgKj0gTnVtYmVyKHN0cmluZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNOYU46IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGVzOiBmdW5jdGlvbihzdHJpbmcsIHNlYXJjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5pbmRleE9mKHNlYXJjaCkgIT09IC0xO1xuICAgICAgICB9LFxuICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uKHN0cmluZywgc3ViU3RyaW5nLCBzdGFydCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5zbGljZSgwLCBzdGFydCkgKyBzdWJTdHJpbmcgKyBzdHJpbmcuc2xpY2Uoc3RhcnQpO1xuICAgICAgICB9LFxuICAgICAgICByZWR1Y2U6IGZ1bmN0aW9uKGFycmF5LCBjYWxsYmFjayAvKiwgaW5pdGlhbFZhbHVlKi8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkucHJvdG90eXBlLnJlZHVjZSBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciB0ID0gT2JqZWN0KGFycmF5KSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBrID0gMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGFyZ3VtZW50c1syXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGsgPCBsZW4gJiYgIShrIGluIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoayA+PSBsZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdFtrKytdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICAgICAgICAgIGlmIChrIGluIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgdFtrXSwgaywgdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29tcHV0ZXMgdGhlIG11bHRpcGxpZXIgbmVjZXNzYXJ5IHRvIG1ha2UgeCA+PSAxLFxuICAgICAgICAgKiBlZmZlY3RpdmVseSBlbGltaW5hdGluZyBtaXNjYWxjdWxhdGlvbnMgY2F1c2VkIGJ5XG4gICAgICAgICAqIGZpbml0ZSBwcmVjaXNpb24uXG4gICAgICAgICAqL1xuICAgICAgICBtdWx0aXBsaWVyOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0geC50b1N0cmluZygpLnNwbGl0KCcuJyk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPCAyID8gMSA6IE1hdGgucG93KDEwLCBwYXJ0c1sxXS5sZW5ndGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLCByZXR1cm5zIHRoZSBtYXhpbXVtXG4gICAgICAgICAqIG11bHRpcGxpZXIgdGhhdCBtdXN0IGJlIHVzZWQgdG8gbm9ybWFsaXplIGFuIG9wZXJhdGlvbiBpbnZvbHZpbmdcbiAgICAgICAgICogYWxsIG9mIHRoZW0uXG4gICAgICAgICAqL1xuICAgICAgICBjb3JyZWN0aW9uRmFjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgIHJldHVybiBhcmdzLnJlZHVjZShmdW5jdGlvbihhY2N1bSwgbmV4dCkge1xuICAgICAgICAgICAgICAgIHZhciBtbiA9IF8ubXVsdGlwbGllcihuZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW0gPiBtbiA/IGFjY3VtIDogbW47XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRvRml4ZWQoKSB0aGF0IHRyZWF0cyBmbG9hdHMgbW9yZSBsaWtlIGRlY2ltYWxzXG4gICAgICAgICAqXG4gICAgICAgICAqIEZpeGVzIGJpbmFyeSByb3VuZGluZyBpc3N1ZXMgKGVnLiAoMC42MTUpLnRvRml4ZWQoMikgPT09ICcwLjYxJykgdGhhdCBwcmVzZW50XG4gICAgICAgICAqIHByb2JsZW1zIGZvciBhY2NvdW50aW5nLSBhbmQgZmluYW5jZS1yZWxhdGVkIHNvZnR3YXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgdG9GaXhlZDogZnVuY3Rpb24odmFsdWUsIG1heERlY2ltYWxzLCByb3VuZGluZ0Z1bmN0aW9uLCBvcHRpb25hbHMpIHtcbiAgICAgICAgICAgIHZhciBzcGxpdFZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpLFxuICAgICAgICAgICAgICAgIG1pbkRlY2ltYWxzID0gbWF4RGVjaW1hbHMgLSAob3B0aW9uYWxzIHx8IDApLFxuICAgICAgICAgICAgICAgIGJvdW5kZWRQcmVjaXNpb24sXG4gICAgICAgICAgICAgICAgb3B0aW9uYWxzUmVnRXhwLFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgLy8gVXNlIHRoZSBzbWFsbGVzdCBwcmVjaXNpb24gdmFsdWUgcG9zc2libGUgdG8gYXZvaWQgZXJyb3JzIGZyb20gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb25cbiAgICAgICAgICAgIGlmIChzcGxpdFZhbHVlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICBib3VuZGVkUHJlY2lzaW9uID0gTWF0aC5taW4oTWF0aC5tYXgoc3BsaXRWYWx1ZVsxXS5sZW5ndGgsIG1pbkRlY2ltYWxzKSwgbWF4RGVjaW1hbHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYm91bmRlZFByZWNpc2lvbiA9IG1pbkRlY2ltYWxzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3dlciA9IE1hdGgucG93KDEwLCBib3VuZGVkUHJlY2lzaW9uKTtcblxuICAgICAgICAgICAgLy8gTXVsdGlwbHkgdXAgYnkgcHJlY2lzaW9uLCByb3VuZCBhY2N1cmF0ZWx5LCB0aGVuIGRpdmlkZSBhbmQgdXNlIG5hdGl2ZSB0b0ZpeGVkKCk6XG4gICAgICAgICAgICBvdXRwdXQgPSAocm91bmRpbmdGdW5jdGlvbih2YWx1ZSArICdlKycgKyBib3VuZGVkUHJlY2lzaW9uKSAvIHBvd2VyKS50b0ZpeGVkKGJvdW5kZWRQcmVjaXNpb24pO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9uYWxzID4gbWF4RGVjaW1hbHMgLSBib3VuZGVkUHJlY2lzaW9uKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uYWxzUmVnRXhwID0gbmV3IFJlZ0V4cCgnXFxcXC4/MHsxLCcgKyAob3B0aW9uYWxzIC0gKG1heERlY2ltYWxzIC0gYm91bmRlZFByZWNpc2lvbikpICsgJ30kJyk7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2Uob3B0aW9uYWxzUmVnRXhwLCAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYXZhbGlhYmxlIG9wdGlvbnNcbiAgICBudW1lcmFsLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgLy8gYXZhbGlhYmxlIGZvcm1hdHNcbiAgICBudW1lcmFsLmZvcm1hdHMgPSBmb3JtYXRzO1xuXG4gICAgLy8gYXZhbGlhYmxlIGZvcm1hdHNcbiAgICBudW1lcmFsLmxvY2FsZXMgPSBsb2NhbGVzO1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjdXJyZW50IGxvY2FsZS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWxcbiAgICAvLyBsb2NhbGUga2V5LlxuICAgIG51bWVyYWwubG9jYWxlID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY3VycmVudExvY2FsZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY3VycmVudExvY2FsZTtcbiAgICB9O1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGxvYWRlZCBsb2NhbGUgZGF0YS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudFxuICAgIC8vIGdsb2JhbCBsb2NhbGUgb2JqZWN0LlxuICAgIG51bWVyYWwubG9jYWxlRGF0YSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbb3B0aW9ucy5jdXJyZW50TG9jYWxlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmICghbG9jYWxlc1trZXldKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbG9jYWxlIDogJyArIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbG9jYWxlc1trZXldO1xuICAgIH07XG5cbiAgICBudW1lcmFsLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICBvcHRpb25zW3Byb3BlcnR5XSA9IGRlZmF1bHRzW3Byb3BlcnR5XTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBudW1lcmFsLnplcm9Gb3JtYXQgPSBmdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgb3B0aW9ucy56ZXJvRm9ybWF0ID0gdHlwZW9mKGZvcm1hdCkgPT09ICdzdHJpbmcnID8gZm9ybWF0IDogbnVsbDtcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5udWxsRm9ybWF0ID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICBvcHRpb25zLm51bGxGb3JtYXQgPSB0eXBlb2YoZm9ybWF0KSA9PT0gJ3N0cmluZycgPyBmb3JtYXQgOiBudWxsO1xuICAgIH07XG5cbiAgICBudW1lcmFsLmRlZmF1bHRGb3JtYXQgPSBmdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgb3B0aW9ucy5kZWZhdWx0Rm9ybWF0ID0gdHlwZW9mKGZvcm1hdCkgPT09ICdzdHJpbmcnID8gZm9ybWF0IDogJzAuMCc7XG4gICAgfTtcblxuICAgIG51bWVyYWwucmVnaXN0ZXIgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCBmb3JtYXQpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAodGhpc1t0eXBlICsgJ3MnXVtuYW1lXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihuYW1lICsgJyAnICsgdHlwZSArICcgYWxyZWFkeSByZWdpc3RlcmVkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpc1t0eXBlICsgJ3MnXVtuYW1lXSA9IGZvcm1hdDtcblxuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH07XG5cblxuICAgIG51bWVyYWwudmFsaWRhdGUgPSBmdW5jdGlvbih2YWwsIGN1bHR1cmUpIHtcbiAgICAgICAgdmFyIF9kZWNpbWFsU2VwLFxuICAgICAgICAgICAgX3Rob3VzYW5kU2VwLFxuICAgICAgICAgICAgX2N1cnJTeW1ib2wsXG4gICAgICAgICAgICBfdmFsQXJyYXksXG4gICAgICAgICAgICBfYWJick9iaixcbiAgICAgICAgICAgIF90aG91c2FuZFJlZ0V4LFxuICAgICAgICAgICAgbG9jYWxlRGF0YSxcbiAgICAgICAgICAgIHRlbXA7XG5cbiAgICAgICAgLy9jb2VyY2UgdmFsIHRvIHN0cmluZ1xuICAgICAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbCArPSAnJztcblxuICAgICAgICAgICAgaWYgKGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTnVtZXJhbC5qczogVmFsdWUgaXMgbm90IHN0cmluZy4gSXQgaGFzIGJlZW4gY28tZXJjZWQgdG86ICcsIHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL3RyaW0gd2hpdGVzcGFjZXMgZnJvbSBlaXRoZXIgc2lkZXNcbiAgICAgICAgdmFsID0gdmFsLnRyaW0oKTtcblxuICAgICAgICAvL2lmIHZhbCBpcyBqdXN0IGRpZ2l0cyByZXR1cm4gdHJ1ZVxuICAgICAgICBpZiAoISF2YWwubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdmFsIGlzIGVtcHR5IHJldHVybiBmYWxzZVxuICAgICAgICBpZiAodmFsID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9nZXQgdGhlIGRlY2ltYWwgYW5kIHRob3VzYW5kcyBzZXBhcmF0b3IgZnJvbSBudW1lcmFsLmxvY2FsZURhdGFcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vY2hlY2sgaWYgdGhlIGN1bHR1cmUgaXMgdW5kZXJzdG9vZCBieSBudW1lcmFsLiBpZiBub3QsIGRlZmF1bHQgaXQgdG8gY3VycmVudCBsb2NhbGVcbiAgICAgICAgICAgIGxvY2FsZURhdGEgPSBudW1lcmFsLmxvY2FsZURhdGEoY3VsdHVyZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvY2FsZURhdGEgPSBudW1lcmFsLmxvY2FsZURhdGEobnVtZXJhbC5sb2NhbGUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvL3NldHVwIHRoZSBkZWxpbWl0ZXJzIGFuZCBjdXJyZW5jeSBzeW1ib2wgYmFzZWQgb24gY3VsdHVyZS9sb2NhbGVcbiAgICAgICAgX2N1cnJTeW1ib2wgPSBsb2NhbGVEYXRhLmN1cnJlbmN5LnN5bWJvbDtcbiAgICAgICAgX2FiYnJPYmogPSBsb2NhbGVEYXRhLmFiYnJldmlhdGlvbnM7XG4gICAgICAgIF9kZWNpbWFsU2VwID0gbG9jYWxlRGF0YS5kZWxpbWl0ZXJzLmRlY2ltYWw7XG4gICAgICAgIGlmIChsb2NhbGVEYXRhLmRlbGltaXRlcnMudGhvdXNhbmRzID09PSAnLicpIHtcbiAgICAgICAgICAgIF90aG91c2FuZFNlcCA9ICdcXFxcLic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhvdXNhbmRTZXAgPSBsb2NhbGVEYXRhLmRlbGltaXRlcnMudGhvdXNhbmRzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWRhdGluZyBjdXJyZW5jeSBzeW1ib2xcbiAgICAgICAgdGVtcCA9IHZhbC5tYXRjaCgvXlteXFxkXSsvKTtcbiAgICAgICAgaWYgKHRlbXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zdWJzdHIoMSk7XG4gICAgICAgICAgICBpZiAodGVtcFswXSAhPT0gX2N1cnJTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL3ZhbGlkYXRpbmcgYWJicmV2aWF0aW9uIHN5bWJvbFxuICAgICAgICB0ZW1wID0gdmFsLm1hdGNoKC9bXlxcZF0rJC8pO1xuICAgICAgICBpZiAodGVtcCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsID0gdmFsLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIGlmICh0ZW1wWzBdICE9PSBfYWJick9iai50aG91c2FuZCAmJiB0ZW1wWzBdICE9PSBfYWJick9iai5taWxsaW9uICYmIHRlbXBbMF0gIT09IF9hYmJyT2JqLmJpbGxpb24gJiYgdGVtcFswXSAhPT0gX2FiYnJPYmoudHJpbGxpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfdGhvdXNhbmRSZWdFeCA9IG5ldyBSZWdFeHAoX3Rob3VzYW5kU2VwICsgJ3syfScpO1xuXG4gICAgICAgIGlmICghdmFsLm1hdGNoKC9bXlxcZC4sXS9nKSkge1xuICAgICAgICAgICAgX3ZhbEFycmF5ID0gdmFsLnNwbGl0KF9kZWNpbWFsU2VwKTtcbiAgICAgICAgICAgIGlmIChfdmFsQXJyYXkubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKF92YWxBcnJheS5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoICEhIF92YWxBcnJheVswXS5tYXRjaCgvXlxcZCsuKlxcZCQvKSAmJiAhX3ZhbEFycmF5WzBdLm1hdGNoKF90aG91c2FuZFJlZ0V4KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF92YWxBcnJheVswXS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoICEhIF92YWxBcnJheVswXS5tYXRjaCgvXlxcZCskLykgJiYgIV92YWxBcnJheVswXS5tYXRjaChfdGhvdXNhbmRSZWdFeCkgJiYgISEgX3ZhbEFycmF5WzFdLm1hdGNoKC9eXFxkKyQvKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAhISBfdmFsQXJyYXlbMF0ubWF0Y2goL15cXGQrLipcXGQkLykgJiYgIV92YWxBcnJheVswXS5tYXRjaChfdGhvdXNhbmRSZWdFeCkgJiYgISEgX3ZhbEFycmF5WzFdLm1hdGNoKC9eXFxkKyQvKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICBOdW1lcmFsIFByb3RvdHlwZVxuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIG51bWVyYWwuZm4gPSBOdW1lcmFsLnByb3RvdHlwZSA9IHtcbiAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWVyYWwodGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24oaW5wdXRTdHJpbmcsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX3ZhbHVlLFxuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGlucHV0U3RyaW5nIHx8IG9wdGlvbnMuZGVmYXVsdEZvcm1hdCxcbiAgICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBmb3JtYXRGdW5jdGlvbjtcblxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgYSByb3VuZGluZ0Z1bmN0aW9uXG4gICAgICAgICAgICByb3VuZGluZ0Z1bmN0aW9uID0gcm91bmRpbmdGdW5jdGlvbiB8fCBNYXRoLnJvdW5kO1xuXG4gICAgICAgICAgICAvLyBmb3JtYXQgYmFzZWQgb24gdmFsdWVcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiBvcHRpb25zLnplcm9Gb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvcHRpb25zLnplcm9Gb3JtYXQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsICYmIG9wdGlvbnMubnVsbEZvcm1hdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG9wdGlvbnMubnVsbEZvcm1hdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChraW5kIGluIGZvcm1hdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdC5tYXRjaChmb3JtYXRzW2tpbmRdLnJlZ2V4cHMuZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb24gPSBmb3JtYXRzW2tpbmRdLmZvcm1hdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3JtYXRGdW5jdGlvbiA9IGZvcm1hdEZ1bmN0aW9uIHx8IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdDtcblxuICAgICAgICAgICAgICAgIG91dHB1dCA9IGZvcm1hdEZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgYWRkOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBfLmNvcnJlY3Rpb25GYWN0b3IuY2FsbChudWxsLCB0aGlzLl92YWx1ZSwgdmFsdWUpO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW0gKyBNYXRoLnJvdW5kKGNvcnJGYWN0b3IgKiBjdXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdGhpcy5fdmFsdWUsIHZhbHVlXSwgY2JhY2ssIDApIC8gY29yckZhY3RvcjtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIHN1YnRyYWN0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBfLmNvcnJlY3Rpb25GYWN0b3IuY2FsbChudWxsLCB0aGlzLl92YWx1ZSwgdmFsdWUpO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW0gLSBNYXRoLnJvdW5kKGNvcnJGYWN0b3IgKiBjdXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdmFsdWVdLCBjYmFjaywgTWF0aC5yb3VuZCh0aGlzLl92YWx1ZSAqIGNvcnJGYWN0b3IpKSAvIGNvcnJGYWN0b3I7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBtdWx0aXBseTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yKGFjY3VtLCBjdXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChhY2N1bSAqIGNvcnJGYWN0b3IpICogTWF0aC5yb3VuZChjdXJyICogY29yckZhY3RvcikgLyBNYXRoLnJvdW5kKGNvcnJGYWN0b3IgKiBjb3JyRmFjdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdGhpcy5fdmFsdWUsIHZhbHVlXSwgY2JhY2ssIDEpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgZGl2aWRlOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBfLmNvcnJlY3Rpb25GYWN0b3IoYWNjdW0sIGN1cnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGFjY3VtICogY29yckZhY3RvcikgLyBNYXRoLnJvdW5kKGN1cnIgKiBjb3JyRmFjdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdGhpcy5fdmFsdWUsIHZhbHVlXSwgY2JhY2spO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgZGlmZmVyZW5jZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyhudW1lcmFsKHRoaXMuX3ZhbHVlKS5zdWJ0cmFjdCh2YWx1ZSkudmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICBEZWZhdWx0IExvY2FsZSAmJiBGb3JtYXRcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBudW1lcmFsLnJlZ2lzdGVyKCdsb2NhbGUnLCAnZW4nLCB7XG4gICAgICAgIGRlbGltaXRlcnM6IHtcbiAgICAgICAgICAgIHRob3VzYW5kczogJywnLFxuICAgICAgICAgICAgZGVjaW1hbDogJy4nXG4gICAgICAgIH0sXG4gICAgICAgIGFiYnJldmlhdGlvbnM6IHtcbiAgICAgICAgICAgIHRob3VzYW5kOiAnaycsXG4gICAgICAgICAgICBtaWxsaW9uOiAnbScsXG4gICAgICAgICAgICBiaWxsaW9uOiAnYicsXG4gICAgICAgICAgICB0cmlsbGlvbjogJ3QnXG4gICAgICAgIH0sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMDtcbiAgICAgICAgICAgIHJldHVybiAofn4obnVtYmVyICUgMTAwIC8gMTApID09PSAxKSA/ICd0aCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAxKSA/ICdzdCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAyKSA/ICduZCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAzKSA/ICdyZCcgOiAndGgnO1xuICAgICAgICB9LFxuICAgICAgICBjdXJyZW5jeToge1xuICAgICAgICAgICAgc3ltYm9sOiAnJCdcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ2JwcycsIHtcbiAgICAgICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IC8oQlBTKS8sXG4gICAgICAgICAgICAgICAgdW5mb3JtYXQ6IC8oQlBTKS9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB2YXIgc3BhY2UgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIEJQUycpID8gJyAnIDogJycsXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAxMDAwMDtcblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgQlBTXG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9CUFMvLCAnJyk7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKG91dHB1dCwgJyknKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXQoJycpO1xuXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5zcGxpY2UoLTEsIDAsIHNwYWNlICsgJ0JQUycpO1xuXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQgKyBzcGFjZSArICdCUFMnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgICAgIHJldHVybiArKG51bWVyYWwuXy5zdHJpbmdUb051bWJlcihzdHJpbmcpICogMC4wMDAxKS50b0ZpeGVkKDE1KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGRlY2ltYWwgPSB7XG4gICAgICAgICAgICBiYXNlOiAxMDAwLFxuICAgICAgICAgICAgc3VmZml4ZXM6IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddXG4gICAgICAgIH0sXG4gICAgICAgIGJpbmFyeSA9IHtcbiAgICAgICAgICAgIGJhc2U6IDEwMjQsXG4gICAgICAgICAgICBzdWZmaXhlczogWydCJywgJ0tpQicsICdNaUInLCAnR2lCJywgJ1RpQicsICdQaUInLCAnRWlCJywgJ1ppQicsICdZaUInXVxuICAgICAgICB9O1xuXG4gICAgdmFyIGFsbFN1ZmZpeGVzID0gIGRlY2ltYWwuc3VmZml4ZXMuY29uY2F0KGJpbmFyeS5zdWZmaXhlcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBkZWNpbWFsLnN1ZmZpeGVzLmluZGV4T2YoaXRlbSkgPCAwO1xuICAgICAgICB9KSk7XG4gICAgICAgIHZhciB1bmZvcm1hdFJlZ2V4ID0gYWxsU3VmZml4ZXMuam9pbignfCcpO1xuICAgICAgICAvLyBBbGxvdyBzdXBwb3J0IGZvciBCUFMgKGh0dHA6Ly93d3cuaW52ZXN0b3BlZGlhLmNvbS90ZXJtcy9iL2Jhc2lzcG9pbnQuYXNwKVxuICAgICAgICB1bmZvcm1hdFJlZ2V4ID0gJygnICsgdW5mb3JtYXRSZWdleC5yZXBsYWNlKCdCJywgJ0IoPyFQUyknKSArICcpJztcblxuICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdieXRlcycsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKFswXFxzXWk/YikvLFxuICAgICAgICAgICAgdW5mb3JtYXQ6IG5ldyBSZWdFeHAodW5mb3JtYXRSZWdleClcbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0LFxuICAgICAgICAgICAgICAgIGJ5dGVzID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJ2liJykgPyBiaW5hcnkgOiBkZWNpbWFsLFxuICAgICAgICAgICAgICAgIHN1ZmZpeCA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgYicpIHx8IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgaWInKSA/ICcgJyA6ICcnLFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgICAgICBtYXg7XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmVcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/aT9iLywgJycpO1xuXG4gICAgICAgICAgICBmb3IgKHBvd2VyID0gMDsgcG93ZXIgPD0gYnl0ZXMuc3VmZml4ZXMubGVuZ3RoOyBwb3dlcisrKSB7XG4gICAgICAgICAgICAgICAgbWluID0gTWF0aC5wb3coYnl0ZXMuYmFzZSwgcG93ZXIpO1xuICAgICAgICAgICAgICAgIG1heCA9IE1hdGgucG93KGJ5dGVzLmJhc2UsIHBvd2VyICsgMSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IDAgfHwgdmFsdWUgPj0gbWluICYmIHZhbHVlIDwgbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1ZmZpeCArPSBieXRlcy5zdWZmaXhlc1twb3dlcl07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyBtaW47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArIHN1ZmZpeDtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gbnVtZXJhbC5fLnN0cmluZ1RvTnVtYmVyKHN0cmluZyksXG4gICAgICAgICAgICAgICAgcG93ZXIsXG4gICAgICAgICAgICAgICAgYnl0ZXNNdWx0aXBsaWVyO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHBvd2VyID0gZGVjaW1hbC5zdWZmaXhlcy5sZW5ndGggLSAxOyBwb3dlciA+PSAwOyBwb3dlci0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCBkZWNpbWFsLnN1ZmZpeGVzW3Bvd2VyXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzTXVsdGlwbGllciA9IE1hdGgucG93KGRlY2ltYWwuYmFzZSwgcG93ZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCBiaW5hcnkuc3VmZml4ZXNbcG93ZXJdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNNdWx0aXBsaWVyID0gTWF0aC5wb3coYmluYXJ5LmJhc2UsIHBvd2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSAqPSAoYnl0ZXNNdWx0aXBsaWVyIHx8IDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnY3VycmVuY3knLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhcXCQpL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBudW1lcmFsLmxvY2FsZXNbbnVtZXJhbC5vcHRpb25zLmN1cnJlbnRMb2NhbGVdLFxuICAgICAgICAgICAgICAgIHN5bWJvbHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZTogZm9ybWF0Lm1hdGNoKC9eKFtcXCt8XFwtfFxcKHxcXHN8XFwkXSopLylbMF0sXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyOiBmb3JtYXQubWF0Y2goLyhbXFwrfFxcLXxcXCl8XFxzfFxcJF0qKSQvKVswXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHN5bWJvbCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICAvLyBzdHJpcCBmb3JtYXQgb2Ygc3BhY2VzIGFuZCAkXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP1xcJFxccz8vLCAnJyk7XG5cbiAgICAgICAgICAgIC8vIGZvcm1hdCB0aGUgbnVtYmVyXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgYmVmb3JlIGFuZCBhZnRlciBiYXNlZCBvbiB2YWx1ZVxuICAgICAgICAgICAgaWYgKHZhbHVlID49IDApIHtcbiAgICAgICAgICAgICAgICBzeW1ib2xzLmJlZm9yZSA9IHN5bWJvbHMuYmVmb3JlLnJlcGxhY2UoL1tcXC1cXChdLywgJycpO1xuICAgICAgICAgICAgICAgIHN5bWJvbHMuYWZ0ZXIgPSBzeW1ib2xzLmFmdGVyLnJlcGxhY2UoL1tcXC1cXCldLywgJycpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDAgJiYgKCFudW1lcmFsLl8uaW5jbHVkZXMoc3ltYm9scy5iZWZvcmUsICctJykgJiYgIW51bWVyYWwuXy5pbmNsdWRlcyhzeW1ib2xzLmJlZm9yZSwgJygnKSkpIHtcbiAgICAgICAgICAgICAgICBzeW1ib2xzLmJlZm9yZSA9ICctJyArIHN5bWJvbHMuYmVmb3JlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggZWFjaCBiZWZvcmUgc3ltYm9sXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3ltYm9scy5iZWZvcmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBzeW1ib2xzLmJlZm9yZVtpXTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoc3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLmluc2VydChvdXRwdXQsIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLmluc2VydChvdXRwdXQsICcgJywgaSArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCBlYWNoIGFmdGVyIHN5bWJvbFxuICAgICAgICAgICAgZm9yIChpID0gc3ltYm9scy5hZnRlci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IHN5bWJvbHMuYWZ0ZXJbaV07XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IGkgPT09IHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gMSA/IG91dHB1dCArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wgOiBudW1lcmFsLl8uaW5zZXJ0KG91dHB1dCwgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbCwgLShzeW1ib2xzLmFmdGVyLmxlbmd0aCAtICgxICsgaSkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IGkgPT09IHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gMSA/IG91dHB1dCArICcgJyA6IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCAnICcsIC0oc3ltYm9scy5hZnRlci5sZW5ndGggLSAoMSArIGkpICsgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbC5sZW5ndGggLSAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdleHBvbmVudGlhbCcsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKGVcXCt8ZS0pLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiAvKGVcXCt8ZS0pL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQsXG4gICAgICAgICAgICAgICAgZXhwb25lbnRpYWwgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmICFudW1lcmFsLl8uaXNOYU4odmFsdWUpID8gdmFsdWUudG9FeHBvbmVudGlhbCgpIDogJzBlKzAnLFxuICAgICAgICAgICAgICAgIHBhcnRzID0gZXhwb25lbnRpYWwuc3BsaXQoJ2UnKTtcblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL2VbXFwrfFxcLV17MX0wLywgJycpO1xuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQoTnVtYmVyKHBhcnRzWzBdKSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArICdlJyArIHBhcnRzWzFdO1xuICAgICAgICB9LFxuICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgcGFydHMgPSBudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCAnZSsnKSA/IHN0cmluZy5zcGxpdCgnZSsnKSA6IHN0cmluZy5zcGxpdCgnZS0nKSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihwYXJ0c1swXSksXG4gICAgICAgICAgICAgICAgcG93ZXIgPSBOdW1iZXIocGFydHNbMV0pO1xuXG4gICAgICAgICAgICBwb3dlciA9IG51bWVyYWwuXy5pbmNsdWRlcyhzdHJpbmcsICdlLScpID8gcG93ZXIgKj0gLTEgOiBwb3dlcjtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBudW1lcmFsLl8uY29ycmVjdGlvbkZhY3RvcihhY2N1bSwgY3VyciksXG4gICAgICAgICAgICAgICAgICAgIG51bSA9IChhY2N1bSAqIGNvcnJGYWN0b3IpICogKGN1cnIgKiBjb3JyRmFjdG9yKSAvIChjb3JyRmFjdG9yICogY29yckZhY3Rvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bWVyYWwuXy5yZWR1Y2UoW3ZhbHVlLCBNYXRoLnBvdygxMCwgcG93ZXIpXSwgY2JhY2ssIDEpO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ29yZGluYWwnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhvKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbnVtZXJhbC5sb2NhbGVzW251bWVyYWwub3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgb3JkaW5hbCA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgbycpID8gJyAnIDogJyc7XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmVcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/by8sICcnKTtcblxuICAgICAgICAgICAgb3JkaW5hbCArPSBsb2NhbGUub3JkaW5hbCh2YWx1ZSk7XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArIG9yZGluYWw7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAncGVyY2VudGFnZScsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKCUpLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiAvKCUpL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBzcGFjZSA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgJScpID8gJyAnIDogJycsXG4gICAgICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5vcHRpb25zLnNjYWxlUGVyY2VudEJ5MTAwKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDEwMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNwYWNlIGJlZm9yZSAlXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP1xcJS8sICcnKTtcblxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKG91dHB1dCwgJyknKSkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5zcGxpdCgnJyk7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQuc3BsaWNlKC0xLCAwLCBzcGFjZSArICclJyk7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuam9pbignJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dCArIHNwYWNlICsgJyUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgbnVtYmVyID0gbnVtZXJhbC5fLnN0cmluZ1RvTnVtYmVyKHN0cmluZyk7XG4gICAgICAgICAgICBpZiAobnVtZXJhbC5vcHRpb25zLnNjYWxlUGVyY2VudEJ5MTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciAqIDAuMDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ3RpbWUnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyg6KS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogLyg6KS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgaG91cnMgPSBNYXRoLmZsb29yKHZhbHVlIC8gNjAgLyA2MCksXG4gICAgICAgICAgICAgICAgbWludXRlcyA9IE1hdGguZmxvb3IoKHZhbHVlIC0gKGhvdXJzICogNjAgKiA2MCkpIC8gNjApLFxuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBNYXRoLnJvdW5kKHZhbHVlIC0gKGhvdXJzICogNjAgKiA2MCkgLSAobWludXRlcyAqIDYwKSk7XG5cbiAgICAgICAgICAgIHJldHVybiBob3VycyArICc6JyArIChtaW51dGVzIDwgMTAgPyAnMCcgKyBtaW51dGVzIDogbWludXRlcykgKyAnOicgKyAoc2Vjb25kcyA8IDEwID8gJzAnICsgc2Vjb25kcyA6IHNlY29uZHMpO1xuICAgICAgICB9LFxuICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgdGltZUFycmF5ID0gc3RyaW5nLnNwbGl0KCc6JyksXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IDA7XG5cbiAgICAgICAgICAgIC8vIHR1cm4gaG91cnMgYW5kIG1pbnV0ZXMgaW50byBzZWNvbmRzIGFuZCBhZGQgdGhlbSBhbGwgdXBcbiAgICAgICAgICAgIGlmICh0aW1lQXJyYXkubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgLy8gaG91cnNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIChOdW1iZXIodGltZUFycmF5WzBdKSAqIDYwICogNjApO1xuICAgICAgICAgICAgICAgIC8vIG1pbnV0ZXNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIChOdW1iZXIodGltZUFycmF5WzFdKSAqIDYwKTtcbiAgICAgICAgICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyBOdW1iZXIodGltZUFycmF5WzJdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGltZUFycmF5Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIC8vIG1pbnV0ZXNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIChOdW1iZXIodGltZUFycmF5WzBdKSAqIDYwKTtcbiAgICAgICAgICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyBOdW1iZXIodGltZUFycmF5WzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoc2Vjb25kcyk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cbnJldHVybiBudW1lcmFsO1xufSkpO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsICJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCAidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemU7XG4iLCAidmFyIG1lbW9pemUgPSByZXF1aXJlKCcuL21lbW9pemUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xudmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemVDYXBwZWQ7XG4iLCAidmFyIG1lbW9pemVDYXBwZWQgPSByZXF1aXJlKCcuL19tZW1vaXplQ2FwcGVkJyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZVByb3BOYW1lID0gL1teLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCQpKS9nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG52YXIgc3RyaW5nVG9QYXRoID0gbWVtb2l6ZUNhcHBlZChmdW5jdGlvbihzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ2IC8qIC4gKi8pIHtcbiAgICByZXN1bHQucHVzaCgnJyk7XG4gIH1cbiAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdUb1BhdGg7XG4iLCAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVG9TdHJpbmc7XG4iLCAidmFyIGJhc2VUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VUb1N0cmluZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9TdHJpbmc7XG4iLCAidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9QYXRoJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFBhdGg7XG4iLCAidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcbiIsICJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICB9XG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0O1xuIiwgInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpO1xuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gKiBgdW5kZWZpbmVkYCwgdGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGluIGl0cyBwbGFjZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAqXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0O1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUVhY2g7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsICJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsICJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduVmFsdWU7XG4iLCAidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduO1xuIiwgIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcbiIsICJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCAidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwgInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduSW47XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVCdWZmZXI7XG4iLCAiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwgInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyk7XG5cbi8qKlxuICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3ltYm9scztcbiIsICJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwgInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHNJbiA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgd2hpbGUgKG9iamVjdCkge1xuICAgIGFycmF5UHVzaChyZXN1bHQsIGdldFN5bWJvbHMob2JqZWN0KSk7XG4gICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlKG9iamVjdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9sc0luO1xuIiwgInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpO1xuXG4vKipcbiAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9sc0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHNJbjtcbiIsICJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzSW4sIGdldFN5bWJvbHNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5c0luO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAvLyBBZGQgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAnc3RyaW5nJyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCAnaW5kZXgnKSkge1xuICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4O1xuICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQXJyYXk7XG4iLCAidmFyIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUFycmF5QnVmZmVyO1xuIiwgInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lRGF0YVZpZXc7XG4iLCAiLyoqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGAgZmxhZ3MgZnJvbSB0aGVpciBjb2VyY2VkIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVGbGFncyA9IC9cXHcqJC87XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGByZWdleHBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcmVnZXhwIFRoZSByZWdleHAgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgcmVnZXhwLlxuICovXG5mdW5jdGlvbiBjbG9uZVJlZ0V4cChyZWdleHApIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyByZWdleHAuY29uc3RydWN0b3IocmVnZXhwLnNvdXJjZSwgcmVGbGFncy5leGVjKHJlZ2V4cCkpO1xuICByZXN1bHQubGFzdEluZGV4ID0gcmVnZXhwLmxhc3RJbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVJlZ0V4cDtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgYHN5bWJvbGAgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc3ltYm9sIFRoZSBzeW1ib2wgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHN5bWJvbCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNsb25lU3ltYm9sKHN5bWJvbCkge1xuICByZXR1cm4gc3ltYm9sVmFsdWVPZiA/IE9iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSkgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVN5bWJvbDtcbiIsICJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xuICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVR5cGVkQXJyYXk7XG4iLCAidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyksXG4gICAgY2xvbmVEYXRhVmlldyA9IHJlcXVpcmUoJy4vX2Nsb25lRGF0YVZpZXcnKSxcbiAgICBjbG9uZVJlZ0V4cCA9IHJlcXVpcmUoJy4vX2Nsb25lUmVnRXhwJyksXG4gICAgY2xvbmVTeW1ib2wgPSByZXF1aXJlKCcuL19jbG9uZVN5bWJvbCcpLFxuICAgIGNsb25lVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Nsb25lVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUgYmFzZWQgb24gaXRzIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjbG9uaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTWFwYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBgU2V0YCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LCB0YWcsIGlzRGVlcCkge1xuICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XG5cbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgcmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBmbG9hdDMyVGFnOiBjYXNlIGZsb2F0NjRUYWc6XG4gICAgY2FzZSBpbnQ4VGFnOiBjYXNlIGludDE2VGFnOiBjYXNlIGludDMyVGFnOlxuICAgIGNhc2UgdWludDhUYWc6IGNhc2UgdWludDhDbGFtcGVkVGFnOiBjYXNlIHVpbnQxNlRhZzogY2FzZSB1aW50MzJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVUeXBlZEFycmF5KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgICAgcmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgcmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVCeVRhZztcbiIsICJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY3JlYXRlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFzc2lnbmluZ1xuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbnZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxuICByZXR1cm4gZnVuY3Rpb24ocHJvdG8pIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTtcbiAgICB9XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0O1xuICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNyZWF0ZTtcbiIsICJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCAidmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWFwKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gbWFwVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hcDtcbiIsICJ2YXIgYmFzZUlzTWFwID0gcmVxdWlyZSgnLi9fYmFzZUlzTWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc01hcCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzTWFwO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTWFwYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc01hcChuZXcgTWFwKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTWFwKG5ldyBXZWFrTWFwKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc01hcCA9IG5vZGVJc01hcCA/IGJhc2VVbmFyeShub2RlSXNNYXApIDogYmFzZUlzTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFwO1xuIiwgInZhciBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHNldFRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNTZXQ7XG4iLCAidmFyIGJhc2VJc1NldCA9IHJlcXVpcmUoJy4vX2Jhc2VJc1NldCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTZXQobmV3IFNldCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1NldDtcbiIsICJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbicpLFxuICAgIGJhc2VBc3NpZ25JbiA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25JbicpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBjb3B5U3ltYm9scyA9IHJlcXVpcmUoJy4vX2NvcHlTeW1ib2xzJyksXG4gICAgY29weVN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2NvcHlTeW1ib2xzSW4nKSxcbiAgICBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpLFxuICAgIGdldEFsbEtleXNJbiA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXNJbicpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGluaXRDbG9uZUFycmF5ID0gcmVxdWlyZSgnLi9faW5pdENsb25lQXJyYXknKSxcbiAgICBpbml0Q2xvbmVCeVRhZyA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZUJ5VGFnJyksXG4gICAgaW5pdENsb25lT2JqZWN0ID0gcmVxdWlyZSgnLi9faW5pdENsb25lT2JqZWN0JyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzTWFwID0gcmVxdWlyZSgnLi9pc01hcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzU2V0ID0gcmVxdWlyZSgnLi9pc1NldCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovXG52YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxuY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbmNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAqIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gRGVlcCBjbG9uZVxuICogIDIgLSBGbGF0dGVuIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gKiAgNCAtIENsb25lIHN5bWJvbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gVGhlIGtleSBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgIGlzRnVsbCA9IGJpdG1hc2sgJiBDTE9ORV9TWU1CT0xTX0ZMQUc7XG5cbiAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgaWYgKGlzQXJyKSB7XG4gICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpO1xuICAgIGlmICghaXNEZWVwKSB7XG4gICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcblxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgIDogY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGlzRGVlcCk7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgaWYgKHN0YWNrZWQpIHtcbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgIHJlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdWJWYWx1ZSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNNYXAodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHQuc2V0KGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGtleXNGdW5jID0gaXNGdWxsXG4gICAgPyAoaXNGbGF0ID8gZ2V0QWxsS2V5c0luIDogZ2V0QWxsS2V5cylcbiAgICA6IChpc0ZsYXQgPyBrZXlzSW4gOiBrZXlzKTtcblxuICB2YXIgcHJvcHMgPSBpc0FyciA/IHVuZGVmaW5lZCA6IGtleXNGdW5jKHZhbHVlKTtcbiAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBrZXkgPSBzdWJWYWx1ZTtcbiAgICAgIHN1YlZhbHVlID0gdmFsdWVba2V5XTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ2xvbmU7XG4iLCAiLyoqXG4gKiBHZXRzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGFzdDtcbiIsICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNsaWNlO1xuIiwgInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpLFxuICAgIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgbGFzdCA9IHJlcXVpcmUoJy4vbGFzdCcpLFxuICAgIHBhcmVudCA9IHJlcXVpcmUoJy4vX3BhcmVudCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bnNldGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCB0byB1bnNldC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgaXMgZGVsZXRlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICBvYmplY3QgPSBwYXJlbnQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsIHx8IGRlbGV0ZSBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbnNldDtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsICJ2YXIgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vaXNQbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8ub21pdGAgdG8gY3VzdG9taXplIGl0cyBgXy5jbG9uZURlZXBgIHVzZSB0byBvbmx5IGNsb25lIHBsYWluXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVuY2xvbmVkIHZhbHVlIG9yIGB1bmRlZmluZWRgIHRvIGRlZmVyIGNsb25pbmcgdG8gYF8uY2xvbmVEZWVwYC5cbiAqL1xuZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKSB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHVuZGVmaW5lZCA6IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGN1c3RvbU9taXRDbG9uZTtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcHJlYWRhYmxlU3ltYm9sID0gU3ltYm9sID8gU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmbGF0dGVuYWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHxcbiAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZsYXR0ZW5hYmxlO1xuIiwgInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0ZsYXR0ZW5hYmxlID0gcmVxdWlyZSgnLi9faXNGbGF0dGVuYWJsZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZsYXR0ZW5gIHdpdGggc3VwcG9ydCBmb3IgcmVzdHJpY3RpbmcgZmxhdHRlbmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcGFyYW0ge251bWJlcn0gZGVwdGggVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJlZGljYXRlPWlzRmxhdHRlbmFibGVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1N0cmljdF0gUmVzdHJpY3QgdG8gdmFsdWVzIHRoYXQgcGFzcyBgcHJlZGljYXRlYCBjaGVja3MuXG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0PVtdXSBUaGUgaW5pdGlhbCByZXN1bHQgdmFsdWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LCBkZXB0aCwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHByZWRpY2F0ZSB8fCAocHJlZGljYXRlID0gaXNGbGF0dGVuYWJsZSk7XG4gIHJlc3VsdCB8fCAocmVzdWx0ID0gW10pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChkZXB0aCA+IDAgJiYgcHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgaWYgKGRlcHRoID4gMSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBmbGF0dGVuIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBiYXNlRmxhdHRlbih2YWx1ZSwgZGVwdGggLSAxLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXlQdXNoKHJlc3VsdCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzU3RyaWN0KSB7XG4gICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmxhdHRlbjtcbiIsICJ2YXIgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpO1xuXG4vKipcbiAqIEZsYXR0ZW5zIGBhcnJheWAgYSBzaW5nbGUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgMSkgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuO1xuIiwgIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcbiIsICJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwgIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCAidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwgIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsICJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwgInZhciBmbGF0dGVuID0gcmVxdWlyZSgnLi9mbGF0dGVuJyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCBmbGF0dGVucyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBmbGF0UmVzdChmdW5jKSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCB1bmRlZmluZWQsIGZsYXR0ZW4pLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXRSZXN0O1xuIiwgInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZUNsb25lID0gcmVxdWlyZSgnLi9fYmFzZUNsb25lJyksXG4gICAgYmFzZVVuc2V0ID0gcmVxdWlyZSgnLi9fYmFzZVVuc2V0JyksXG4gICAgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgY3VzdG9tT21pdENsb25lID0gcmVxdWlyZSgnLi9fY3VzdG9tT21pdENsb25lJyksXG4gICAgZmxhdFJlc3QgPSByZXF1aXJlKCcuL19mbGF0UmVzdCcpLFxuICAgIGdldEFsbEtleXNJbiA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXNJbicpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5waWNrYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlXG4gKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IHBhdGhzIG9mIGBvYmplY3RgIHRoYXQgYXJlIG5vdCBvbWl0dGVkLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBjb25zaWRlcmFibHkgc2xvd2VyIHRoYW4gYF8ucGlja2AuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIG9taXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLm9taXQob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAqIC8vID0+IHsgJ2InOiAnMicgfVxuICovXG52YXIgb21pdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHZhciBpc0RlZXAgPSBmYWxzZTtcbiAgcGF0aHMgPSBhcnJheU1hcChwYXRocywgZnVuY3Rpb24ocGF0aCkge1xuICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgIGlzRGVlcCB8fCAoaXNEZWVwID0gcGF0aC5sZW5ndGggPiAxKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSk7XG4gIGNvcHlPYmplY3Qob2JqZWN0LCBnZXRBbGxLZXlzSW4ob2JqZWN0KSwgcmVzdWx0KTtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJlc3VsdCA9IGJhc2VDbG9uZShyZXN1bHQsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX0ZMQVRfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9tT21pdENsb25lKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gcGF0aHMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBiYXNlVW5zZXQocmVzdWx0LCBwYXRoc1tsZW5ndGhdKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gb21pdDtcbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFIHx8IHR5cGVbMF0gPT09IFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDaGVjayBpZiB3ZSdyZSByZXF1aXJlZCB0byBhZGQgYSBwb3J0IG51bWJlci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZGVmYXVsdC1wb3J0XG4gKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IHBvcnQgUG9ydCBudW1iZXIgd2UgbmVlZCB0byBjaGVja1xuICogQHBhcmFtIHtTdHJpbmd9IHByb3RvY29sIFByb3RvY29sIHdlIG5lZWQgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJcyBpdCBhIGRlZmF1bHQgcG9ydCBmb3IgdGhlIGdpdmVuIHByb3RvY29sXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXF1aXJlZChwb3J0LCBwcm90b2NvbCkge1xuICBwcm90b2NvbCA9IHByb3RvY29sLnNwbGl0KCc6JylbMF07XG4gIHBvcnQgPSArcG9ydDtcblxuICBpZiAoIXBvcnQpIHJldHVybiBmYWxzZTtcblxuICBzd2l0Y2ggKHByb3RvY29sKSB7XG4gICAgY2FzZSAnaHR0cCc6XG4gICAgY2FzZSAnd3MnOlxuICAgIHJldHVybiBwb3J0ICE9PSA4MDtcblxuICAgIGNhc2UgJ2h0dHBzJzpcbiAgICBjYXNlICd3c3MnOlxuICAgIHJldHVybiBwb3J0ICE9PSA0NDM7XG5cbiAgICBjYXNlICdmdHAnOlxuICAgIHJldHVybiBwb3J0ICE9PSAyMTtcblxuICAgIGNhc2UgJ2dvcGhlcic6XG4gICAgcmV0dXJuIHBvcnQgIT09IDcwO1xuXG4gICAgY2FzZSAnZmlsZSc6XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQgIT09IDA7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCB1bmRlZjtcblxuLyoqXG4gKiBEZWNvZGUgYSBVUkkgZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBVUkkgZW5jb2RlZCBzdHJpbmcuXG4gKiBAcmV0dXJucyB7U3RyaW5nfE51bGx9IFRoZSBkZWNvZGVkIHN0cmluZy5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGlucHV0LnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gZW5jb2RlIGEgZ2l2ZW4gaW5wdXQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBlbmNvZGVkLlxuICogQHJldHVybnMge1N0cmluZ3xOdWxsfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFNpbXBsZSBxdWVyeSBzdHJpbmcgcGFyc2VyLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSBUaGUgcXVlcnkgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkLlxuICogQHJldHVybnMge09iamVjdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5c3RyaW5nKHF1ZXJ5KSB7XG4gIHZhciBwYXJzZXIgPSAvKFtePT8jJl0rKT0/KFteJl0qKS9nXG4gICAgLCByZXN1bHQgPSB7fVxuICAgICwgcGFydDtcblxuICB3aGlsZSAocGFydCA9IHBhcnNlci5leGVjKHF1ZXJ5KSkge1xuICAgIHZhciBrZXkgPSBkZWNvZGUocGFydFsxXSlcbiAgICAgICwgdmFsdWUgPSBkZWNvZGUocGFydFsyXSk7XG5cbiAgICAvL1xuICAgIC8vIFByZXZlbnQgb3ZlcnJpZGluZyBvZiBleGlzdGluZyBwcm9wZXJ0aWVzLiBUaGlzIGVuc3VyZXMgdGhhdCBidWlsZC1pblxuICAgIC8vIG1ldGhvZHMgbGlrZSBgdG9TdHJpbmdgIG9yIF9fcHJvdG9fXyBhcmUgbm90IG92ZXJyaWRlbiBieSBtYWxpY2lvdXNcbiAgICAvLyBxdWVyeXN0cmluZ3MuXG4gICAgLy9cbiAgICAvLyBJbiB0aGUgY2FzZSBpZiBmYWlsZWQgZGVjb2RpbmcsIHdlIHdhbnQgdG8gb21pdCB0aGUga2V5L3ZhbHVlIHBhaXJzXG4gICAgLy8gZnJvbSB0aGUgcmVzdWx0LlxuICAgIC8vXG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBrZXkgaW4gcmVzdWx0KSBjb250aW51ZTtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBxdWVyeSBzdHJpbmcgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRoYXQgc2hvdWxkIGJlIHRyYW5zZm9ybWVkLlxuICogQHBhcmFtIHtTdHJpbmd9IHByZWZpeCBPcHRpb25hbCBwcmVmaXguXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gcXVlcnlzdHJpbmdpZnkob2JqLCBwcmVmaXgpIHtcbiAgcHJlZml4ID0gcHJlZml4IHx8ICcnO1xuXG4gIHZhciBwYWlycyA9IFtdXG4gICAgLCB2YWx1ZVxuICAgICwga2V5O1xuXG4gIC8vXG4gIC8vIE9wdGlvbmFsbHkgcHJlZml4IHdpdGggYSAnPycgaWYgbmVlZGVkXG4gIC8vXG4gIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIHByZWZpeCkgcHJlZml4ID0gJz8nO1xuXG4gIGZvciAoa2V5IGluIG9iaikge1xuICAgIGlmIChoYXMuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHZhbHVlID0gb2JqW2tleV07XG5cbiAgICAgIC8vXG4gICAgICAvLyBFZGdlIGNhc2VzIHdoZXJlIHdlIGFjdHVhbGx5IHdhbnQgdG8gZW5jb2RlIHRoZSB2YWx1ZSB0byBhbiBlbXB0eVxuICAgICAgLy8gc3RyaW5nIGluc3RlYWQgb2YgdGhlIHN0cmluZ2lmaWVkIHZhbHVlLlxuICAgICAgLy9cbiAgICAgIGlmICghdmFsdWUgJiYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZiB8fCBpc05hTih2YWx1ZSkpKSB7XG4gICAgICAgIHZhbHVlID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGtleSA9IGVuY29kZShrZXkpO1xuICAgICAgdmFsdWUgPSBlbmNvZGUodmFsdWUpO1xuXG4gICAgICAvL1xuICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIGVuY29kZSB0aGUgc3RyaW5ncywgd2Ugc2hvdWxkIGJhaWwgb3V0IGFzIHdlIGRvbid0XG4gICAgICAvLyB3YW50IHRvIGFkZCBpbnZhbGlkIHN0cmluZ3MgdG8gdGhlIHF1ZXJ5LlxuICAgICAgLy9cbiAgICAgIGlmIChrZXkgPT09IG51bGwgfHwgdmFsdWUgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgcGFpcnMucHVzaChrZXkgKyc9JysgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYWlycy5sZW5ndGggPyBwcmVmaXggKyBwYWlycy5qb2luKCcmJykgOiAnJztcbn1cblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmV4cG9ydHMuc3RyaW5naWZ5ID0gcXVlcnlzdHJpbmdpZnk7XG5leHBvcnRzLnBhcnNlID0gcXVlcnlzdHJpbmc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVxdWlyZWQgPSByZXF1aXJlKCdyZXF1aXJlcy1wb3J0JylcbiAgLCBxcyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5naWZ5JylcbiAgLCBjb250cm9sT3JXaGl0ZXNwYWNlID0gL15bXFx4MDAtXFx4MjBcXHUwMGEwXFx1MTY4MFxcdTIwMDAtXFx1MjAwYVxcdTIwMjhcXHUyMDI5XFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1ZmVmZl0rL1xuICAsIENSSFRMRiA9IC9bXFxuXFxyXFx0XS9nXG4gICwgc2xhc2hlcyA9IC9eW0EtWmEtel1bQS1aYS16MC05Ky0uXSo6XFwvXFwvL1xuICAsIHBvcnQgPSAvOlxcZCskL1xuICAsIHByb3RvY29scmUgPSAvXihbYS16XVthLXowLTkuKy1dKjopPyhcXC9cXC8pPyhbXFxcXC9dKyk/KFtcXFNcXHNdKikvaVxuICAsIHdpbmRvd3NEcml2ZUxldHRlciA9IC9eW2EtekEtWl06LztcblxuLyoqXG4gKiBSZW1vdmUgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB3aGl0ZXNwYWNlIGZyb20gdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHN0ciBTdHJpbmcgdG8gdHJpbS5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IEEgbmV3IHN0cmluZyByZXByZXNlbnRpbmcgYHN0cmAgc3RyaXBwZWQgb2YgY29udHJvbFxuICogICAgIGNoYXJhY3RlcnMgYW5kIHdoaXRlc3BhY2UgZnJvbSBpdHMgYmVnaW5uaW5nLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB0cmltTGVmdChzdHIpIHtcbiAgcmV0dXJuIChzdHIgPyBzdHIgOiAnJykudG9TdHJpbmcoKS5yZXBsYWNlKGNvbnRyb2xPcldoaXRlc3BhY2UsICcnKTtcbn1cblxuLyoqXG4gKiBUaGVzZSBhcmUgdGhlIHBhcnNlIHJ1bGVzIGZvciB0aGUgVVJMIHBhcnNlciwgaXQgaW5mb3JtcyB0aGUgcGFyc2VyXG4gKiBhYm91dDpcbiAqXG4gKiAwLiBUaGUgY2hhciBpdCBOZWVkcyB0byBwYXJzZSwgaWYgaXQncyBhIHN0cmluZyBpdCBzaG91bGQgYmUgZG9uZSB1c2luZ1xuICogICAgaW5kZXhPZiwgUmVnRXhwIHVzaW5nIGV4ZWMgYW5kIE5hTiBtZWFucyBzZXQgYXMgY3VycmVudCB2YWx1ZS5cbiAqIDEuIFRoZSBwcm9wZXJ0eSB3ZSBzaG91bGQgc2V0IHdoZW4gcGFyc2luZyB0aGlzIHZhbHVlLlxuICogMi4gSW5kaWNhdGlvbiBpZiBpdCdzIGJhY2t3YXJkcyBvciBmb3J3YXJkIHBhcnNpbmcsIHdoZW4gc2V0IGFzIG51bWJlciBpdCdzXG4gKiAgICB0aGUgdmFsdWUgb2YgZXh0cmEgY2hhcnMgdGhhdCBzaG91bGQgYmUgc3BsaXQgb2ZmLlxuICogMy4gSW5oZXJpdCBmcm9tIGxvY2F0aW9uIGlmIG5vbiBleGlzdGluZyBpbiB0aGUgcGFyc2VyLlxuICogNC4gYHRvTG93ZXJDYXNlYCB0aGUgcmVzdWx0aW5nIHZhbHVlLlxuICovXG52YXIgcnVsZXMgPSBbXG4gIFsnIycsICdoYXNoJ10sICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBbJz8nLCAncXVlcnknXSwgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgZnVuY3Rpb24gc2FuaXRpemUoYWRkcmVzcywgdXJsKSB7ICAgICAvLyBTYW5pdGl6ZSB3aGF0IGlzIGxlZnQgb2YgdGhlIGFkZHJlc3NcbiAgICByZXR1cm4gaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgPyBhZGRyZXNzLnJlcGxhY2UoL1xcXFwvZywgJy8nKSA6IGFkZHJlc3M7XG4gIH0sXG4gIFsnLycsICdwYXRobmFtZSddLCAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBbJ0AnLCAnYXV0aCcsIDFdLCAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgZnJvbnQuXG4gIFtOYU4sICdob3N0JywgdW5kZWZpbmVkLCAxLCAxXSwgICAgICAgLy8gU2V0IGxlZnQgb3ZlciB2YWx1ZS5cbiAgWy86KFxcZCopJC8sICdwb3J0JywgdW5kZWZpbmVkLCAxXSwgICAgLy8gUmVnRXhwIHRoZSBiYWNrLlxuICBbTmFOLCAnaG9zdG5hbWUnLCB1bmRlZmluZWQsIDEsIDFdICAgIC8vIFNldCBsZWZ0IG92ZXIuXG5dO1xuXG4vKipcbiAqIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBiZSBjb3BpZWQgb3IgaW5oZXJpdGVkIGZyb20uIFRoaXMgaXMgb25seSBuZWVkZWRcbiAqIGZvciBhbGwgbm9uIGJsb2IgVVJMJ3MgYXMgYSBibG9iIFVSTCBkb2VzIG5vdCBpbmNsdWRlIGEgaGFzaCwgb25seSB0aGVcbiAqIG9yaWdpbi5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xudmFyIGlnbm9yZSA9IHsgaGFzaDogMSwgcXVlcnk6IDEgfTtcblxuLyoqXG4gKiBUaGUgbG9jYXRpb24gb2JqZWN0IGRpZmZlcnMgd2hlbiB5b3VyIGNvZGUgaXMgbG9hZGVkIHRocm91Z2ggYSBub3JtYWwgcGFnZSxcbiAqIFdvcmtlciBvciB0aHJvdWdoIGEgd29ya2VyIHVzaW5nIGEgYmxvYi4gQW5kIHdpdGggdGhlIGJsb2JibGUgYmVnaW5zIHRoZVxuICogdHJvdWJsZSBhcyB0aGUgbG9jYXRpb24gb2JqZWN0IHdpbGwgY29udGFpbiB0aGUgVVJMIG9mIHRoZSBibG9iLCBub3QgdGhlXG4gKiBsb2NhdGlvbiBvZiB0aGUgcGFnZSB3aGVyZSBvdXIgY29kZSBpcyBsb2FkZWQgaW4uIFRoZSBhY3R1YWwgb3JpZ2luIGlzXG4gKiBlbmNvZGVkIGluIHRoZSBgcGF0aG5hbWVgIHNvIHdlIGNhbiB0aGFua2Z1bGx5IGdlbmVyYXRlIGEgZ29vZCBcImRlZmF1bHRcIlxuICogbG9jYXRpb24gZnJvbSBpdCBzbyB3ZSBjYW4gZ2VuZXJhdGUgcHJvcGVyIHJlbGF0aXZlIFVSTCdzIGFnYWluLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gbG9jIE9wdGlvbmFsIGRlZmF1bHQgbG9jYXRpb24gb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gbG9sY2F0aW9uIG9iamVjdC5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gbG9sY2F0aW9uKGxvYykge1xuICB2YXIgZ2xvYmFsVmFyO1xuXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgZ2xvYmFsVmFyID0gd2luZG93O1xuICBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgZ2xvYmFsVmFyID0gZ2xvYmFsO1xuICBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIGdsb2JhbFZhciA9IHNlbGY7XG4gIGVsc2UgZ2xvYmFsVmFyID0ge307XG5cbiAgdmFyIGxvY2F0aW9uID0gZ2xvYmFsVmFyLmxvY2F0aW9uIHx8IHt9O1xuICBsb2MgPSBsb2MgfHwgbG9jYXRpb247XG5cbiAgdmFyIGZpbmFsZGVzdGluYXRpb24gPSB7fVxuICAgICwgdHlwZSA9IHR5cGVvZiBsb2NcbiAgICAsIGtleTtcblxuICBpZiAoJ2Jsb2I6JyA9PT0gbG9jLnByb3RvY29sKSB7XG4gICAgZmluYWxkZXN0aW5hdGlvbiA9IG5ldyBVcmwodW5lc2NhcGUobG9jLnBhdGhuYW1lKSwge30pO1xuICB9IGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlKSB7XG4gICAgZmluYWxkZXN0aW5hdGlvbiA9IG5ldyBVcmwobG9jLCB7fSk7XG4gICAgZm9yIChrZXkgaW4gaWdub3JlKSBkZWxldGUgZmluYWxkZXN0aW5hdGlvbltrZXldO1xuICB9IGVsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlKSB7XG4gICAgZm9yIChrZXkgaW4gbG9jKSB7XG4gICAgICBpZiAoa2V5IGluIGlnbm9yZSkgY29udGludWU7XG4gICAgICBmaW5hbGRlc3RpbmF0aW9uW2tleV0gPSBsb2Nba2V5XTtcbiAgICB9XG5cbiAgICBpZiAoZmluYWxkZXN0aW5hdGlvbi5zbGFzaGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbmFsZGVzdGluYXRpb24uc2xhc2hlcyA9IHNsYXNoZXMudGVzdChsb2MuaHJlZik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbmFsZGVzdGluYXRpb247XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIHByb3RvY29sIHNjaGVtZSBpcyBzcGVjaWFsLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBUaGUgcHJvdG9jb2wgc2NoZW1lIG9mIHRoZSBVUkxcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcHJvdG9jb2wgc2NoZW1lIGlzIHNwZWNpYWwsIGVsc2UgYGZhbHNlYFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNTcGVjaWFsKHNjaGVtZSkge1xuICByZXR1cm4gKFxuICAgIHNjaGVtZSA9PT0gJ2ZpbGU6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ2Z0cDonIHx8XG4gICAgc2NoZW1lID09PSAnaHR0cDonIHx8XG4gICAgc2NoZW1lID09PSAnaHR0cHM6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ3dzOicgfHxcbiAgICBzY2hlbWUgPT09ICd3c3M6J1xuICApO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIFByb3RvY29sRXh0cmFjdFxuICogQHR5cGUgT2JqZWN0XG4gKiBAcHJvcGVydHkge1N0cmluZ30gcHJvdG9jb2wgUHJvdG9jb2wgbWF0Y2hlZCBpbiB0aGUgVVJMLCBpbiBsb3dlcmNhc2UuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IHNsYXNoZXMgYHRydWVgIGlmIHByb3RvY29sIGlzIGZvbGxvd2VkIGJ5IFwiLy9cIiwgZWxzZSBgZmFsc2VgLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHJlc3QgUmVzdCBvZiB0aGUgVVJMIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIHByb3RvY29sLlxuICovXG5cbi8qKlxuICogRXh0cmFjdCBwcm90b2NvbCBpbmZvcm1hdGlvbiBmcm9tIGEgVVJMIHdpdGgvd2l0aG91dCBkb3VibGUgc2xhc2ggKFwiLy9cIikuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgVVJMIHdlIHdhbnQgdG8gZXh0cmFjdCBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IGxvY2F0aW9uXG4gKiBAcmV0dXJuIHtQcm90b2NvbEV4dHJhY3R9IEV4dHJhY3RlZCBpbmZvcm1hdGlvbi5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RQcm90b2NvbChhZGRyZXNzLCBsb2NhdGlvbikge1xuICBhZGRyZXNzID0gdHJpbUxlZnQoYWRkcmVzcyk7XG4gIGFkZHJlc3MgPSBhZGRyZXNzLnJlcGxhY2UoQ1JIVExGLCAnJyk7XG4gIGxvY2F0aW9uID0gbG9jYXRpb24gfHwge307XG5cbiAgdmFyIG1hdGNoID0gcHJvdG9jb2xyZS5leGVjKGFkZHJlc3MpO1xuICB2YXIgcHJvdG9jb2wgPSBtYXRjaFsxXSA/IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkgOiAnJztcbiAgdmFyIGZvcndhcmRTbGFzaGVzID0gISFtYXRjaFsyXTtcbiAgdmFyIG90aGVyU2xhc2hlcyA9ICEhbWF0Y2hbM107XG4gIHZhciBzbGFzaGVzQ291bnQgPSAwO1xuICB2YXIgcmVzdDtcblxuICBpZiAoZm9yd2FyZFNsYXNoZXMpIHtcbiAgICBpZiAob3RoZXJTbGFzaGVzKSB7XG4gICAgICByZXN0ID0gbWF0Y2hbMl0gKyBtYXRjaFszXSArIG1hdGNoWzRdO1xuICAgICAgc2xhc2hlc0NvdW50ID0gbWF0Y2hbMl0ubGVuZ3RoICsgbWF0Y2hbM10ubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0ID0gbWF0Y2hbMl0gKyBtYXRjaFs0XTtcbiAgICAgIHNsYXNoZXNDb3VudCA9IG1hdGNoWzJdLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG90aGVyU2xhc2hlcykge1xuICAgICAgcmVzdCA9IG1hdGNoWzNdICsgbWF0Y2hbNF07XG4gICAgICBzbGFzaGVzQ291bnQgPSBtYXRjaFszXS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3QgPSBtYXRjaFs0XVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm90b2NvbCA9PT0gJ2ZpbGU6Jykge1xuICAgIGlmIChzbGFzaGVzQ291bnQgPj0gMikge1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoMik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3BlY2lhbChwcm90b2NvbCkpIHtcbiAgICByZXN0ID0gbWF0Y2hbNF07XG4gIH0gZWxzZSBpZiAocHJvdG9jb2wpIHtcbiAgICBpZiAoZm9yd2FyZFNsYXNoZXMpIHtcbiAgICAgIHJlc3QgPSByZXN0LnNsaWNlKDIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzbGFzaGVzQ291bnQgPj0gMiAmJiBpc1NwZWNpYWwobG9jYXRpb24ucHJvdG9jb2wpKSB7XG4gICAgcmVzdCA9IG1hdGNoWzRdO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwcm90b2NvbDogcHJvdG9jb2wsXG4gICAgc2xhc2hlczogZm9yd2FyZFNsYXNoZXMgfHwgaXNTcGVjaWFsKHByb3RvY29sKSxcbiAgICBzbGFzaGVzQ291bnQ6IHNsYXNoZXNDb3VudCxcbiAgICByZXN0OiByZXN0XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHJlbGF0aXZlIFVSTCBwYXRobmFtZSBhZ2FpbnN0IGEgYmFzZSBVUkwgcGF0aG5hbWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJlbGF0aXZlIFBhdGhuYW1lIG9mIHRoZSByZWxhdGl2ZSBVUkwuXG4gKiBAcGFyYW0ge1N0cmluZ30gYmFzZSBQYXRobmFtZSBvZiB0aGUgYmFzZSBVUkwuXG4gKiBAcmV0dXJuIHtTdHJpbmd9IFJlc29sdmVkIHBhdGhuYW1lLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZShyZWxhdGl2ZSwgYmFzZSkge1xuICBpZiAocmVsYXRpdmUgPT09ICcnKSByZXR1cm4gYmFzZTtcblxuICB2YXIgcGF0aCA9IChiYXNlIHx8ICcvJykuc3BsaXQoJy8nKS5zbGljZSgwLCAtMSkuY29uY2F0KHJlbGF0aXZlLnNwbGl0KCcvJykpXG4gICAgLCBpID0gcGF0aC5sZW5ndGhcbiAgICAsIGxhc3QgPSBwYXRoW2kgLSAxXVxuICAgICwgdW5zaGlmdCA9IGZhbHNlXG4gICAgLCB1cCA9IDA7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIGlmIChwYXRoW2ldID09PSAnLicpIHtcbiAgICAgIHBhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGF0aFtpXSA9PT0gJy4uJykge1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIGlmIChpID09PSAwKSB1bnNoaWZ0ID0gdHJ1ZTtcbiAgICAgIHBhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICBpZiAodW5zaGlmdCkgcGF0aC51bnNoaWZ0KCcnKTtcbiAgaWYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSBwYXRoLnB1c2goJycpO1xuXG4gIHJldHVybiBwYXRoLmpvaW4oJy8nKTtcbn1cblxuLyoqXG4gKiBUaGUgYWN0dWFsIFVSTCBpbnN0YW5jZS4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gb2JqZWN0IHdlJ3ZlIG9wdGVkLWluIHRvXG4gKiBjcmVhdGUgYW4gYWN0dWFsIGNvbnN0cnVjdG9yIGFzIGl0J3MgbXVjaCBtb3JlIG1lbW9yeSBlZmZpY2llbnQgYW5kXG4gKiBmYXN0ZXIgYW5kIGl0IHBsZWFzZXMgbXkgT0NELlxuICpcbiAqIEl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IHdlIHNob3VsZCBub3QgdXNlIGBVUkxgIGFzIGNsYXNzIG5hbWUgdG8gcHJldmVudFxuICogY2xhc2hlcyB3aXRoIHRoZSBnbG9iYWwgVVJMIGluc3RhbmNlIHRoYXQgZ290IGludHJvZHVjZWQgaW4gYnJvd3NlcnMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyBVUkwgd2Ugd2FudCB0byBwYXJzZS5cbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gW2xvY2F0aW9uXSBMb2NhdGlvbiBkZWZhdWx0cyBmb3IgcmVsYXRpdmUgcGF0aHMuXG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IFtwYXJzZXJdIFBhcnNlciBmb3IgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFVybChhZGRyZXNzLCBsb2NhdGlvbiwgcGFyc2VyKSB7XG4gIGFkZHJlc3MgPSB0cmltTGVmdChhZGRyZXNzKTtcbiAgYWRkcmVzcyA9IGFkZHJlc3MucmVwbGFjZShDUkhUTEYsICcnKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVXJsKSkge1xuICAgIHJldHVybiBuZXcgVXJsKGFkZHJlc3MsIGxvY2F0aW9uLCBwYXJzZXIpO1xuICB9XG5cbiAgdmFyIHJlbGF0aXZlLCBleHRyYWN0ZWQsIHBhcnNlLCBpbnN0cnVjdGlvbiwgaW5kZXgsIGtleVxuICAgICwgaW5zdHJ1Y3Rpb25zID0gcnVsZXMuc2xpY2UoKVxuICAgICwgdHlwZSA9IHR5cGVvZiBsb2NhdGlvblxuICAgICwgdXJsID0gdGhpc1xuICAgICwgaSA9IDA7XG5cbiAgLy9cbiAgLy8gVGhlIGZvbGxvd2luZyBpZiBzdGF0ZW1lbnRzIGFsbG93cyB0aGlzIG1vZHVsZSB0d28gaGF2ZSBjb21wYXRpYmlsaXR5IHdpdGhcbiAgLy8gMiBkaWZmZXJlbnQgQVBJOlxuICAvL1xuICAvLyAxLiBOb2RlLmpzJ3MgYHVybC5wYXJzZWAgYXBpIHdoaWNoIGFjY2VwdHMgYSBVUkwsIGJvb2xlYW4gYXMgYXJndW1lbnRzXG4gIC8vICAgIHdoZXJlIHRoZSBib29sZWFuIGluZGljYXRlcyB0aGF0IHRoZSBxdWVyeSBzdHJpbmcgc2hvdWxkIGFsc28gYmUgcGFyc2VkLlxuICAvL1xuICAvLyAyLiBUaGUgYFVSTGAgaW50ZXJmYWNlIG9mIHRoZSBicm93c2VyIHdoaWNoIGFjY2VwdHMgYSBVUkwsIG9iamVjdCBhc1xuICAvLyAgICBhcmd1bWVudHMuIFRoZSBzdXBwbGllZCBvYmplY3Qgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHQgdmFsdWVzIC8gZmFsbC1iYWNrXG4gIC8vICAgIGZvciByZWxhdGl2ZSBwYXRocy5cbiAgLy9cbiAgaWYgKCdvYmplY3QnICE9PSB0eXBlICYmICdzdHJpbmcnICE9PSB0eXBlKSB7XG4gICAgcGFyc2VyID0gbG9jYXRpb247XG4gICAgbG9jYXRpb24gPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlciAmJiAnZnVuY3Rpb24nICE9PSB0eXBlb2YgcGFyc2VyKSBwYXJzZXIgPSBxcy5wYXJzZTtcblxuICBsb2NhdGlvbiA9IGxvbGNhdGlvbihsb2NhdGlvbik7XG5cbiAgLy9cbiAgLy8gRXh0cmFjdCBwcm90b2NvbCBpbmZvcm1hdGlvbiBiZWZvcmUgcnVubmluZyB0aGUgaW5zdHJ1Y3Rpb25zLlxuICAvL1xuICBleHRyYWN0ZWQgPSBleHRyYWN0UHJvdG9jb2woYWRkcmVzcyB8fCAnJywgbG9jYXRpb24pO1xuICByZWxhdGl2ZSA9ICFleHRyYWN0ZWQucHJvdG9jb2wgJiYgIWV4dHJhY3RlZC5zbGFzaGVzO1xuICB1cmwuc2xhc2hlcyA9IGV4dHJhY3RlZC5zbGFzaGVzIHx8IHJlbGF0aXZlICYmIGxvY2F0aW9uLnNsYXNoZXM7XG4gIHVybC5wcm90b2NvbCA9IGV4dHJhY3RlZC5wcm90b2NvbCB8fCBsb2NhdGlvbi5wcm90b2NvbCB8fCAnJztcbiAgYWRkcmVzcyA9IGV4dHJhY3RlZC5yZXN0O1xuXG4gIC8vXG4gIC8vIFdoZW4gdGhlIGF1dGhvcml0eSBjb21wb25lbnQgaXMgYWJzZW50IHRoZSBVUkwgc3RhcnRzIHdpdGggYSBwYXRoXG4gIC8vIGNvbXBvbmVudC5cbiAgLy9cbiAgaWYgKFxuICAgIGV4dHJhY3RlZC5wcm90b2NvbCA9PT0gJ2ZpbGU6JyAmJiAoXG4gICAgICBleHRyYWN0ZWQuc2xhc2hlc0NvdW50ICE9PSAyIHx8IHdpbmRvd3NEcml2ZUxldHRlci50ZXN0KGFkZHJlc3MpKSB8fFxuICAgICghZXh0cmFjdGVkLnNsYXNoZXMgJiZcbiAgICAgIChleHRyYWN0ZWQucHJvdG9jb2wgfHxcbiAgICAgICAgZXh0cmFjdGVkLnNsYXNoZXNDb3VudCA8IDIgfHxcbiAgICAgICAgIWlzU3BlY2lhbCh1cmwucHJvdG9jb2wpKSlcbiAgKSB7XG4gICAgaW5zdHJ1Y3Rpb25zWzNdID0gWy8oLiopLywgJ3BhdGhuYW1lJ107XG4gIH1cblxuICBmb3IgKDsgaSA8IGluc3RydWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zW2ldO1xuXG4gICAgaWYgKHR5cGVvZiBpbnN0cnVjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYWRkcmVzcyA9IGluc3RydWN0aW9uKGFkZHJlc3MsIHVybCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBwYXJzZSA9IGluc3RydWN0aW9uWzBdO1xuICAgIGtleSA9IGluc3RydWN0aW9uWzFdO1xuXG4gICAgaWYgKHBhcnNlICE9PSBwYXJzZSkge1xuICAgICAgdXJsW2tleV0gPSBhZGRyZXNzO1xuICAgIH0gZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBwYXJzZSkge1xuICAgICAgaW5kZXggPSBwYXJzZSA9PT0gJ0AnXG4gICAgICAgID8gYWRkcmVzcy5sYXN0SW5kZXhPZihwYXJzZSlcbiAgICAgICAgOiBhZGRyZXNzLmluZGV4T2YocGFyc2UpO1xuXG4gICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIGluc3RydWN0aW9uWzJdKSB7XG4gICAgICAgICAgdXJsW2tleV0gPSBhZGRyZXNzLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZShpbmRleCArIGluc3RydWN0aW9uWzJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cmxba2V5XSA9IGFkZHJlc3Muc2xpY2UoaW5kZXgpO1xuICAgICAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKGluZGV4ID0gcGFyc2UuZXhlYyhhZGRyZXNzKSkpIHtcbiAgICAgIHVybFtrZXldID0gaW5kZXhbMV07XG4gICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleC5pbmRleCk7XG4gICAgfVxuXG4gICAgdXJsW2tleV0gPSB1cmxba2V5XSB8fCAoXG4gICAgICByZWxhdGl2ZSAmJiBpbnN0cnVjdGlvblszXSA/IGxvY2F0aW9uW2tleV0gfHwgJycgOiAnJ1xuICAgICk7XG5cbiAgICAvL1xuICAgIC8vIEhvc3RuYW1lLCBob3N0IGFuZCBwcm90b2NvbCBzaG91bGQgYmUgbG93ZXJjYXNlZCBzbyB0aGV5IGNhbiBiZSB1c2VkIHRvXG4gICAgLy8gY3JlYXRlIGEgcHJvcGVyIGBvcmlnaW5gLlxuICAgIC8vXG4gICAgaWYgKGluc3RydWN0aW9uWzRdKSB1cmxba2V5XSA9IHVybFtrZXldLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICAvL1xuICAvLyBBbHNvIHBhcnNlIHRoZSBzdXBwbGllZCBxdWVyeSBzdHJpbmcgaW4gdG8gYW4gb2JqZWN0LiBJZiB3ZSdyZSBzdXBwbGllZFxuICAvLyB3aXRoIGEgY3VzdG9tIHBhcnNlciBhcyBmdW5jdGlvbiB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGJ1aWxkLWluXG4gIC8vIHBhcnNlci5cbiAgLy9cbiAgaWYgKHBhcnNlcikgdXJsLnF1ZXJ5ID0gcGFyc2VyKHVybC5xdWVyeSk7XG5cbiAgLy9cbiAgLy8gSWYgdGhlIFVSTCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSB0aGUgcGF0aG5hbWUgYWdhaW5zdCB0aGUgYmFzZSBVUkwuXG4gIC8vXG4gIGlmIChcbiAgICAgIHJlbGF0aXZlXG4gICAgJiYgbG9jYXRpb24uc2xhc2hlc1xuICAgICYmIHVybC5wYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJ1xuICAgICYmICh1cmwucGF0aG5hbWUgIT09ICcnIHx8IGxvY2F0aW9uLnBhdGhuYW1lICE9PSAnJylcbiAgKSB7XG4gICAgdXJsLnBhdGhuYW1lID0gcmVzb2x2ZSh1cmwucGF0aG5hbWUsIGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgfVxuXG4gIC8vXG4gIC8vIERlZmF1bHQgdG8gYSAvIGZvciBwYXRobmFtZSBpZiBub25lIGV4aXN0cy4gVGhpcyBub3JtYWxpemVzIHRoZSBVUkxcbiAgLy8gdG8gYWx3YXlzIGhhdmUgYSAvXG4gIC8vXG4gIGlmICh1cmwucGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycgJiYgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkpIHtcbiAgICB1cmwucGF0aG5hbWUgPSAnLycgKyB1cmwucGF0aG5hbWU7XG4gIH1cblxuICAvL1xuICAvLyBXZSBzaG91bGQgbm90IGFkZCBwb3J0IG51bWJlcnMgaWYgdGhleSBhcmUgYWxyZWFkeSB0aGUgZGVmYXVsdCBwb3J0IG51bWJlclxuICAvLyBmb3IgYSBnaXZlbiBwcm90b2NvbC4gQXMgdGhlIGhvc3QgYWxzbyBjb250YWlucyB0aGUgcG9ydCBudW1iZXIgd2UncmUgZ29pbmdcbiAgLy8gb3ZlcnJpZGUgaXQgd2l0aCB0aGUgaG9zdG5hbWUgd2hpY2ggY29udGFpbnMgbm8gcG9ydCBudW1iZXIuXG4gIC8vXG4gIGlmICghcmVxdWlyZWQodXJsLnBvcnQsIHVybC5wcm90b2NvbCkpIHtcbiAgICB1cmwuaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgICB1cmwucG9ydCA9ICcnO1xuICB9XG5cbiAgLy9cbiAgLy8gUGFyc2UgZG93biB0aGUgYGF1dGhgIGZvciB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLlxuICAvL1xuICB1cmwudXNlcm5hbWUgPSB1cmwucGFzc3dvcmQgPSAnJztcblxuICBpZiAodXJsLmF1dGgpIHtcbiAgICBpbmRleCA9IHVybC5hdXRoLmluZGV4T2YoJzonKTtcblxuICAgIGlmICh+aW5kZXgpIHtcbiAgICAgIHVybC51c2VybmFtZSA9IHVybC5hdXRoLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgIHVybC51c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLnVzZXJuYW1lKSk7XG5cbiAgICAgIHVybC5wYXNzd29yZCA9IHVybC5hdXRoLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgICB1cmwucGFzc3dvcmQgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC5wYXNzd29yZCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHVybC51c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLmF1dGgpKTtcbiAgICB9XG5cbiAgICB1cmwuYXV0aCA9IHVybC5wYXNzd29yZCA/IHVybC51c2VybmFtZSArJzonKyB1cmwucGFzc3dvcmQgOiB1cmwudXNlcm5hbWU7XG4gIH1cblxuICB1cmwub3JpZ2luID0gdXJsLnByb3RvY29sICE9PSAnZmlsZTonICYmIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpICYmIHVybC5ob3N0XG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgLy9cbiAgLy8gVGhlIGhyZWYgaXMganVzdCB0aGUgY29tcGlsZWQgcmVzdWx0LlxuICAvL1xuICB1cmwuaHJlZiA9IHVybC50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgY29udmVuaWVuY2UgbWV0aG9kIGZvciBjaGFuZ2luZyBwcm9wZXJ0aWVzIGluIHRoZSBVUkwgaW5zdGFuY2UgdG9cbiAqIGluc3VyZSB0aGF0IHRoZXkgYWxsIHByb3BhZ2F0ZSBjb3JyZWN0bHkuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhcnQgICAgICAgICAgUHJvcGVydHkgd2UgbmVlZCB0byBhZGp1c3QuXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAgICAgICAgICBUaGUgbmV3bHkgYXNzaWduZWQgdmFsdWUuXG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IGZuICBXaGVuIHNldHRpbmcgdGhlIHF1ZXJ5LCBpdCB3aWxsIGJlIHRoZSBmdW5jdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBwYXJzZSB0aGUgcXVlcnkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHNldHRpbmcgdGhlIHByb3RvY29sLCBkb3VibGUgc2xhc2ggd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBmcm9tIHRoZSBmaW5hbCB1cmwgaWYgaXQgaXMgdHJ1ZS5cbiAqIEByZXR1cm5zIHtVUkx9IFVSTCBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHNldChwYXJ0LCB2YWx1ZSwgZm4pIHtcbiAgdmFyIHVybCA9IHRoaXM7XG5cbiAgc3dpdGNoIChwYXJ0KSB7XG4gICAgY2FzZSAncXVlcnknOlxuICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gKGZuIHx8IHFzLnBhcnNlKSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb3J0JzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAoIXJlcXVpcmVkKHZhbHVlLCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lO1xuICAgICAgICB1cmxbcGFydF0gPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWUgKyc6JysgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaG9zdG5hbWUnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICh1cmwucG9ydCkgdmFsdWUgKz0gJzonKyB1cmwucG9ydDtcbiAgICAgIHVybC5ob3N0ID0gdmFsdWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmIChwb3J0LnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgICAgICAgdXJsLnBvcnQgPSB2YWx1ZS5wb3AoKTtcbiAgICAgICAgdXJsLmhvc3RuYW1lID0gdmFsdWUuam9pbignOicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsLmhvc3RuYW1lID0gdmFsdWU7XG4gICAgICAgIHVybC5wb3J0ID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncHJvdG9jb2wnOlxuICAgICAgdXJsLnByb3RvY29sID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHVybC5zbGFzaGVzID0gIWZuO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwYXRobmFtZSc6XG4gICAgY2FzZSAnaGFzaCc6XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGNoYXIgPSBwYXJ0ID09PSAncGF0aG5hbWUnID8gJy8nIDogJyMnO1xuICAgICAgICB1cmxbcGFydF0gPSB2YWx1ZS5jaGFyQXQoMCkgIT09IGNoYXIgPyBjaGFyICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd1c2VybmFtZSc6XG4gICAgY2FzZSAncGFzc3dvcmQnOlxuICAgICAgdXJsW3BhcnRdID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYXV0aCc6XG4gICAgICB2YXIgaW5kZXggPSB2YWx1ZS5pbmRleE9mKCc6Jyk7XG5cbiAgICAgIGlmICh+aW5kZXgpIHtcbiAgICAgICAgdXJsLnVzZXJuYW1lID0gdmFsdWUuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC51c2VybmFtZSkpO1xuXG4gICAgICAgIHVybC5wYXNzd29yZCA9IHZhbHVlLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgICAgIHVybC5wYXNzd29yZCA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLnBhc3N3b3JkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gICAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGlucyA9IHJ1bGVzW2ldO1xuXG4gICAgaWYgKGluc1s0XSkgdXJsW2luc1sxXV0gPSB1cmxbaW5zWzFdXS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgdXJsLmF1dGggPSB1cmwucGFzc3dvcmQgPyB1cmwudXNlcm5hbWUgKyc6JysgdXJsLnBhc3N3b3JkIDogdXJsLnVzZXJuYW1lO1xuXG4gIHVybC5vcmlnaW4gPSB1cmwucHJvdG9jb2wgIT09ICdmaWxlOicgJiYgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgJiYgdXJsLmhvc3RcbiAgICA/IHVybC5wcm90b2NvbCArJy8vJysgdXJsLmhvc3RcbiAgICA6ICdudWxsJztcblxuICB1cmwuaHJlZiA9IHVybC50b1N0cmluZygpO1xuXG4gIHJldHVybiB1cmw7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBwcm9wZXJ0aWVzIGJhY2sgaW4gdG8gYSB2YWxpZCBhbmQgZnVsbCBVUkwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZ2lmeSBPcHRpb25hbCBxdWVyeSBzdHJpbmdpZnkgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBDb21waWxlZCB2ZXJzaW9uIG9mIHRoZSBVUkwuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHN0cmluZ2lmeSkge1xuICBpZiAoIXN0cmluZ2lmeSB8fCAnZnVuY3Rpb24nICE9PSB0eXBlb2Ygc3RyaW5naWZ5KSBzdHJpbmdpZnkgPSBxcy5zdHJpbmdpZnk7XG5cbiAgdmFyIHF1ZXJ5XG4gICAgLCB1cmwgPSB0aGlzXG4gICAgLCBob3N0ID0gdXJsLmhvc3RcbiAgICAsIHByb3RvY29sID0gdXJsLnByb3RvY29sO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5jaGFyQXQocHJvdG9jb2wubGVuZ3RoIC0gMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIHZhciByZXN1bHQgPVxuICAgIHByb3RvY29sICtcbiAgICAoKHVybC5wcm90b2NvbCAmJiB1cmwuc2xhc2hlcykgfHwgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgPyAnLy8nIDogJycpO1xuXG4gIGlmICh1cmwudXNlcm5hbWUpIHtcbiAgICByZXN1bHQgKz0gdXJsLnVzZXJuYW1lO1xuICAgIGlmICh1cmwucGFzc3dvcmQpIHJlc3VsdCArPSAnOicrIHVybC5wYXNzd29yZDtcbiAgICByZXN1bHQgKz0gJ0AnO1xuICB9IGVsc2UgaWYgKHVybC5wYXNzd29yZCkge1xuICAgIHJlc3VsdCArPSAnOicrIHVybC5wYXNzd29yZDtcbiAgICByZXN1bHQgKz0gJ0AnO1xuICB9IGVsc2UgaWYgKFxuICAgIHVybC5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpICYmXG4gICAgIWhvc3QgJiZcbiAgICB1cmwucGF0aG5hbWUgIT09ICcvJ1xuICApIHtcbiAgICAvL1xuICAgIC8vIEFkZCBiYWNrIHRoZSBlbXB0eSB1c2VyaW5mbywgb3RoZXJ3aXNlIHRoZSBvcmlnaW5hbCBpbnZhbGlkIFVSTFxuICAgIC8vIG1pZ2h0IGJlIHRyYW5zZm9ybWVkIGludG8gYSB2YWxpZCBvbmUgd2l0aCBgdXJsLnBhdGhuYW1lYCBhcyBob3N0LlxuICAgIC8vXG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfVxuXG4gIC8vXG4gIC8vIFRyYWlsaW5nIGNvbG9uIGlzIHJlbW92ZWQgZnJvbSBgdXJsLmhvc3RgIHdoZW4gaXQgaXMgcGFyc2VkLiBJZiBpdCBzdGlsbFxuICAvLyBlbmRzIHdpdGggYSBjb2xvbiwgdGhlbiBhZGQgYmFjayB0aGUgdHJhaWxpbmcgY29sb24gdGhhdCB3YXMgcmVtb3ZlZC4gVGhpc1xuICAvLyBwcmV2ZW50cyBhbiBpbnZhbGlkIFVSTCBmcm9tIGJlaW5nIHRyYW5zZm9ybWVkIGludG8gYSB2YWxpZCBvbmUuXG4gIC8vXG4gIGlmIChob3N0W2hvc3QubGVuZ3RoIC0gMV0gPT09ICc6JyB8fCAocG9ydC50ZXN0KHVybC5ob3N0bmFtZSkgJiYgIXVybC5wb3J0KSkge1xuICAgIGhvc3QgKz0gJzonO1xuICB9XG5cbiAgcmVzdWx0ICs9IGhvc3QgKyB1cmwucGF0aG5hbWU7XG5cbiAgcXVlcnkgPSAnb2JqZWN0JyA9PT0gdHlwZW9mIHVybC5xdWVyeSA/IHN0cmluZ2lmeSh1cmwucXVlcnkpIDogdXJsLnF1ZXJ5O1xuICBpZiAocXVlcnkpIHJlc3VsdCArPSAnPycgIT09IHF1ZXJ5LmNoYXJBdCgwKSA/ICc/JysgcXVlcnkgOiBxdWVyeTtcblxuICBpZiAodXJsLmhhc2gpIHJlc3VsdCArPSB1cmwuaGFzaDtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5VcmwucHJvdG90eXBlID0geyBzZXQ6IHNldCwgdG9TdHJpbmc6IHRvU3RyaW5nIH07XG5cbi8vXG4vLyBFeHBvc2UgdGhlIFVSTCBwYXJzZXIgYW5kIHNvbWUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgYmUgdXNlZnVsIGZvclxuLy8gb3RoZXJzIG9yIHRlc3RpbmcuXG4vL1xuVXJsLmV4dHJhY3RQcm90b2NvbCA9IGV4dHJhY3RQcm90b2NvbDtcblVybC5sb2NhdGlvbiA9IGxvbGNhdGlvbjtcblVybC50cmltTGVmdCA9IHRyaW1MZWZ0O1xuVXJsLnFzID0gcXM7XG5cbm1vZHVsZS5leHBvcnRzID0gVXJsO1xuIiwgInZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZyxcbiAgICByZUhhc1JlZ0V4cENoYXIgPSBSZWdFeHAocmVSZWdFeHBDaGFyLnNvdXJjZSk7XG5cbi8qKlxuICogRXNjYXBlcyB0aGUgYFJlZ0V4cGAgc3BlY2lhbCBjaGFyYWN0ZXJzIFwiXlwiLCBcIiRcIiwgXCJcXFwiLCBcIi5cIiwgXCIqXCIsIFwiK1wiLFxuICogXCI/XCIsIFwiKFwiLCBcIilcIiwgXCJbXCIsIFwiXVwiLCBcIntcIiwgXCJ9XCIsIGFuZCBcInxcIiBpbiBgc3RyaW5nYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5lc2NhcGVSZWdFeHAoJ1tsb2Rhc2hdKGh0dHBzOi8vbG9kYXNoLmNvbS8pJyk7XG4gKiAvLyA9PiAnXFxbbG9kYXNoXFxdXFwoaHR0cHM6Ly9sb2Rhc2hcXC5jb20vXFwpJ1xuICovXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiAoc3RyaW5nICYmIHJlSGFzUmVnRXhwQ2hhci50ZXN0KHN0cmluZykpXG4gICAgPyBzdHJpbmcucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAgIDogc3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVzY2FwZVJlZ0V4cDtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSIsICIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgdGhpcyB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXJlZmxlY3QgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCA9PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmFwcGx5IHx8IChOQVRJVkVfQklORCA/IGNhbGwuYmluZChhcHBseSkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbikge1xuICAvLyBOYXNob3JuIGJ1ZzpcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEyOFxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTMwXG4gIGlmIChjbGFzc29mUmF3KGZuKSA9PT0gJ0Z1bmN0aW9uJykgcmV0dXJuIHVuY3VycnlUaGlzKGZuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIElTX0hUTUxEREEgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZDtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFsbDogZG9jdW1lbnRBbGwsXG4gIElTX0hUTUxEREE6IElTX0hUTUxEREFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRkb2N1bWVudEFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1hbGwnKTtcblxudmFyIGRvY3VtZW50QWxsID0gJGRvY3VtZW50QWxsLmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG5tb2R1bGUuZXhwb3J0cyA9ICRkb2N1bWVudEFsbC5JU19IVE1MRERBID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyICRkb2N1bWVudEFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1hbGwnKTtcblxudmFyIGRvY3VtZW50QWxsID0gJGRvY3VtZW50QWxsLmFsbDtcblxubW9kdWxlLmV4cG9ydHMgPSAkZG9jdW1lbnRBbGwuSVNfSFRNTEREQSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KSB8fCBpdCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHZhcmlhYmxlKSA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBuYXZpZ2F0b3IgIT0gJ3VuZGVmaW5lZCcgJiYgU3RyaW5nKG5hdmlnYXRvci51c2VyQWdlbnQpIHx8ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbC5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWwsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zMy4yJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjMgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zMy4yL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBiaW5kID0gdW5jdXJyeVRoaXModW5jdXJyeVRoaXMuYmluZCk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQpIHtcbiAgYUNhbGxhYmxlKGZuKTtcbiAgcmV0dXJuIHRoYXQgPT09IHVuZGVmaW5lZCA/IGZuIDogTkFUSVZFX0JJTkQgPyBiaW5kKGZuLCB0aGF0KSA6IGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIHdyYXBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChOYXRpdmVDb25zdHJ1Y3Rvcikge1xuICB2YXIgV3JhcHBlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcmFwcGVyKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIGFwcGx5KE5hdGl2ZUNvbnN0cnVjdG9yLCB0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICBXcmFwcGVyLnByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIFdyYXBwZXI7XG59O1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWwgOiBTVEFUSUMgPyBnbG9iYWxbVEFSR0VUXSA6IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBUQVJHRVQsIHt9KVtUQVJHRVRdO1xuICB2YXIgdGFyZ2V0UHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcblxuICB2YXIgRk9SQ0VELCBVU0VfTkFUSVZFLCBWSVJUVUFMX1BST1RPVFlQRTtcbiAgdmFyIGtleSwgc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5LCBuYXRpdmVQcm9wZXJ0eSwgcmVzdWx0UHJvcGVydHksIGRlc2NyaXB0b3I7XG5cbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBVU0VfTkFUSVZFID0gIUZPUkNFRCAmJiBuYXRpdmVTb3VyY2UgJiYgaGFzT3duKG5hdGl2ZVNvdXJjZSwga2V5KTtcblxuICAgIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSkgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmF0aXZlU291cmNlLCBrZXkpO1xuICAgICAgbmF0aXZlUHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIG5hdGl2ZVByb3BlcnR5ID0gbmF0aXZlU291cmNlW2tleV07XG5cbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIGltcGxlbWVudGF0aW9uXG4gICAgc291cmNlUHJvcGVydHkgPSAoVVNFX05BVElWRSAmJiBuYXRpdmVQcm9wZXJ0eSkgPyBuYXRpdmVQcm9wZXJ0eSA6IHNvdXJjZVtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUgJiYgdHlwZW9mIHRhcmdldFByb3BlcnR5ID09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIG1ldGhvZHMgdG8gZ2xvYmFsIGZvciBjYWxsaW5nIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBpZiAob3B0aW9ucy5iaW5kICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gYmluZChzb3VyY2VQcm9wZXJ0eSwgZ2xvYmFsKTtcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlcyBpbiB0aGlzIHZlcnNpb25cbiAgICBlbHNlIGlmIChvcHRpb25zLndyYXAgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSB3cmFwQ29uc3RydWN0b3Ioc291cmNlUHJvcGVydHkpO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIGVsc2UgaWYgKFBST1RPICYmIGlzQ2FsbGFibGUoc291cmNlUHJvcGVydHkpKSByZXN1bHRQcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCByZXN1bHRQcm9wZXJ0eSk7XG5cbiAgICBpZiAoUFJPVE8pIHtcbiAgICAgIFZJUlRVQUxfUFJPVE9UWVBFID0gVEFSR0VUICsgJ1Byb3RvdHlwZSc7XG4gICAgICBpZiAoIWhhc093bihwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFLCB7fSk7XG4gICAgICB9XG4gICAgICAvLyBleHBvcnQgdmlydHVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGhbVklSVFVBTF9QUk9UT1RZUEVdLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIC8vIGV4cG9ydCByZWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBpZiAob3B0aW9ucy5yZWFsICYmIHRhcmdldFByb3RvdHlwZSAmJiAoRk9SQ0VEIHx8ICF0YXJnZXRQcm90b3R5cGVba2V5XSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldFByb3RvdHlwZSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSBkZWZpbmVQcm9wZXJ0eSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGRlZmluZVByb3BlcnR5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkuc2hhbSkgZGVmaW5lUHJvcGVydHkuc2hhbSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgcHJvcGVydHlLZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChwcm9wZXJ0eUtleSBpbiBvYmplY3QpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBwcm9wZXJ0eUtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W3Byb3BlcnR5S2V5XSA9IHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIGVtcHR5ID0gW107XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAudGVzdChub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgZW1wdHksIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBhIHBhcnQgb2YgYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmIChpc0NvbnN0cnVjdG9yKEMpICYmIChDID09PSAkQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKGFycmF5U3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsQXJyYXkpKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbi8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUID0gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBbXTtcbiAgYXJyYXlbSVNfQ09OQ0FUX1NQUkVBREFCTEVdID0gZmFsc2U7XG4gIHJldHVybiBhcnJheS5jb25jYXQoKVswXSAhPT0gYXJyYXk7XG59KTtcblxudmFyIGlzQ29uY2F0U3ByZWFkYWJsZSA9IGZ1bmN0aW9uIChPKSB7XG4gIGlmICghaXNPYmplY3QoTykpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNwcmVhZGFibGUgPSBPW0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgcmV0dXJuIHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoTyk7XG59O1xuXG52YXIgRk9SQ0VEID0gIUlTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgfHwgIWFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2NvbmNhdCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvbmNhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5jb25jYXRcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBpc0NvbmNhdFNwcmVhZGFibGUgYW5kIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGNvbmNhdDogZnVuY3Rpb24gY29uY2F0KGFyZykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgdmFyIG4gPSAwO1xuICAgIHZhciBpLCBrLCBsZW5ndGgsIGxlbiwgRTtcbiAgICBmb3IgKGkgPSAtMSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBFID0gaSA9PT0gLTEgPyBPIDogYXJndW1lbnRzW2ldO1xuICAgICAgaWYgKGlzQ29uY2F0U3ByZWFkYWJsZShFKSkge1xuICAgICAgICBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShFKTtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKG4gKyBsZW4pO1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbGVuOyBrKyssIG4rKykgaWYgKGsgaW4gRSkgY3JlYXRlUHJvcGVydHkoQSwgbiwgRVtrXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIDEpO1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShBLCBuKyssIEUpO1xuICAgICAgfVxuICAgIH1cbiAgICBBLmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1rZXlzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgJiYgIVY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBwcm9wc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICB2YXIgcmVzdWx0ID0gJEFycmF5KG1heChmaW4gLSBrLCAwKSk7XG4gIHZhciBuID0gMDtcbiAgZm9yICg7IGsgPCBmaW47IGsrKywgbisrKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICByZXN1bHQubGVuZ3RoID0gbjtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZSAqL1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUnKTtcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGFycmF5U2xpY2Uod2luZG93TmFtZXMpO1xuICB9XG59O1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgY2xhc3NvZihpdCkgPT09ICdXaW5kb3cnXG4gICAgPyBnZXRXaW5kb3dOYW1lcyhpdClcbiAgICA6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVudW1lcmFibGUpIHRhcmdldFtrZXldID0gdmFsdWU7XG4gIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCB2YWx1ZSk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcikge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbmV4cG9ydHMuZiA9IHdlbGxLbm93blN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVEFHLCBTVEFUSUMsIFNFVF9NRVRIT0QpIHtcbiAgaWYgKGl0KSB7XG4gICAgdmFyIHRhcmdldCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gICAgfVxuICAgIGlmIChTRVRfTUVUSE9EICYmICFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsICd0b1N0cmluZycsIHRvU3RyaW5nKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShzZWxmKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sICYmICRTeW1ib2xbUFJPVE9UWVBFXTtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufTtcblxudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT09IDc7XG59KSA/IGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKFN5bWJvbFByb3RvdHlwZSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB7fSkpO1xuICAgICAgT1tISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzT3duKE8sIEhJRERFTikgJiYgT1tISURERU5dW2tleV0pIE9bSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBBdHRyaWJ1dGVzID0gbmF0aXZlT2JqZWN0Q3JlYXRlKEF0dHJpYnV0ZXMsIHsgZW51bWVyYWJsZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjcmlwdG9yKE8sIGtleSwgQXR0cmlidXRlcyk7XG4gIH0gcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIGtleSwgQXR0cmlidXRlcyk7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wZXJ0aWVzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMocHJvcGVydGllcykuY29uY2F0KCRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJvcGVydGllcykpO1xuICAkZm9yRWFjaChrZXlzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKCRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgcHJvcGVydGllcywga2V5KSkgJGRlZmluZVByb3BlcnR5KE8sIGtleSwgcHJvcGVydGllc1trZXldKTtcbiAgfSk7XG4gIHJldHVybiBPO1xufTtcblxudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gbmF0aXZlT2JqZWN0Q3JlYXRlKE8pIDogJGRlZmluZVByb3BlcnRpZXMobmF0aXZlT2JqZWN0Q3JlYXRlKE8pLCBQcm9wZXJ0aWVzKTtcbn07XG5cbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBQID0gdG9Qcm9wZXJ0eUtleShWKTtcbiAgdmFyIGVudW1lcmFibGUgPSBjYWxsKG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlLCB0aGlzLCBQKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywgUCkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZW51bWVyYWJsZSB8fCAhaGFzT3duKHRoaXMsIFApIHx8ICFoYXNPd24oQWxsU3ltYm9scywgUCkgfHwgaGFzT3duKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW1BdXG4gICAgPyBlbnVtZXJhYmxlIDogdHJ1ZTtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgdmFyIGl0ID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBkZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xuICBpZiAoZGVzY3JpcHRvciAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhKGhhc093bihpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSB7XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIWhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSkgcHVzaChyZXN1bHQsIGtleSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiAoTykge1xuICB2YXIgSVNfT0JKRUNUX1BST1RPVFlQRSA9IE8gPT09IE9iamVjdFByb3RvdHlwZTtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyhJU19PQkpFQ1RfUFJPVE9UWVBFID8gT2JqZWN0UHJvdG90eXBlU3ltYm9scyA6IHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgKCFJU19PQkpFQ1RfUFJPVE9UWVBFIHx8IGhhc093bihPYmplY3RQcm90b3R5cGUsIGtleSkpKSB7XG4gICAgICBwdXNoKHJlc3VsdCwgQWxsU3ltYm9sc1trZXldKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gYFN5bWJvbGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLWNvbnN0cnVjdG9yXG5pZiAoIU5BVElWRV9TWU1CT0wpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAoaXNQcm90b3R5cGVPZihTeW1ib2xQcm90b3R5cGUsIHRoaXMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSAhYXJndW1lbnRzLmxlbmd0aCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICR0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciB0YWcgPSB1aWQoZGVzY3JpcHRpb24pO1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHZhciAkdGhpcyA9IHRoaXMgPT09IHVuZGVmaW5lZCA/IGdsb2JhbCA6IHRoaXM7XG4gICAgICBpZiAoJHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSkgY2FsbChzZXR0ZXIsIE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXNPd24oJHRoaXMsIEhJRERFTikgJiYgaGFzT3duKCR0aGlzW0hJRERFTl0sIHRhZykpICR0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0U3ltYm9sRGVzY3JpcHRvcigkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgICBmYWxsYmFja0RlZmluZVByb3BlcnR5KCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIFVTRV9TRVRURVIpIHNldFN5bWJvbERlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6IHNldHRlciB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcsIGRlc2NyaXB0aW9uKTtcbiAgfTtcblxuICBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sW1BST1RPVFlQRV07XG5cbiAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnRhZztcbiAgfSk7XG5cbiAgZGVmaW5lQnVpbHRJbigkU3ltYm9sLCAnd2l0aG91dFNldHRlcicsIGZ1bmN0aW9uIChkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiB3cmFwKHVpZChkZXNjcmlwdGlvbiksIGRlc2NyaXB0aW9uKTtcbiAgfSk7XG5cbiAgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgZGVmaW5lUHJvcGVydGllc01vZHVsZS5mID0gJGRlZmluZVByb3BlcnRpZXM7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2VsbEtub3duU3ltYm9sKG5hbWUpLCBuYW1lKTtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1TeW1ib2wtZGVzY3JpcHRpb25cbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoU3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIUlTX1BVUkUpIHtcbiAgICAgIGRlZmluZUJ1aWx0SW4oT2JqZWN0UHJvdG90eXBlLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIU5BVElWRV9TWU1CT0wgfSwge1xuICBTeW1ib2w6ICRTeW1ib2xcbn0pO1xuXG4kZm9yRWFjaChvYmplY3RLZXlzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlZmluZVdlbGxLbm93blN5bWJvbChuYW1lKTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiBTWU1CT0wsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gZmFsc2U7IH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvclxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCBTWU1CT0wpO1xuXG5oaWRkZW5LZXlzW0hJRERFTl0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHNhZmUgKi9cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTCAmJiAhIVN5bWJvbFsnZm9yJ10gJiYgISFTeW1ib2wua2V5Rm9yO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5mb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcoa2V5KTtcbiAgICBpZiAoaGFzT3duKFN0cmluZ1RvU3ltYm9sUmVnaXN0cnksIHN0cmluZykpIHJldHVybiBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ107XG4gICAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKHN0cmluZyk7XG4gICAgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddID0gc3ltYm9sO1xuICAgIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltYm9sXSA9IHN0cmluZztcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wua2V5Rm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmtleWZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IG5ldyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoc3ltKSArICcgaXMgbm90IGEgc3ltYm9sJyk7XG4gICAgaWYgKGhhc093bihTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5LCBzeW0pKSByZXR1cm4gU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1dO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVwbGFjZXIpIHtcbiAgaWYgKGlzQ2FsbGFibGUocmVwbGFjZXIpKSByZXR1cm4gcmVwbGFjZXI7XG4gIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJldHVybjtcbiAgdmFyIHJhd0xlbmd0aCA9IHJlcGxhY2VyLmxlbmd0aDtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdMZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGVtZW50ID0gcmVwbGFjZXJbaV07XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKSBwdXNoKGtleXMsIGVsZW1lbnQpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdudW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdOdW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdTdHJpbmcnKSBwdXNoKGtleXMsIHRvU3RyaW5nKGVsZW1lbnQpKTtcbiAgfVxuICB2YXIga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgcm9vdCA9IHRydWU7XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChyb290KSB7XG4gICAgICByb290ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHRoaXMpKSByZXR1cm4gdmFsdWU7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzTGVuZ3RoOyBqKyspIGlmIChrZXlzW2pdID09PSBrZXkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBnZXRSZXBsYWNlckZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCdzdHJpbmdpZnkgZGV0ZWN0aW9uJyk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPT0gJ1tudWxsXSdcbiAgICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9PSAne30nXG4gICAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gZ2V0UmVwbGFjZXJGdW5jdGlvbihyZXBsYWNlcik7XG4gIGlmICghaXNDYWxsYWJsZSgkcmVwbGFjZXIpICYmIChpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICBhcmdzWzFdID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgV2ViS2l0KSBjb3VsZCBwYXNzIG51bWJlcnMgYXMga2V5c1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsICRTdHJpbmcoa2V5KSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHJldHVybiBhcHBseSgkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbn07XG5cbnZhciBmaXhJbGxGb3JtZWQgPSBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gIHZhciBwcmV2ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0ICsgMSk7XG4gIGlmICgoZXhlYyhsb3csIG1hdGNoKSAmJiAhZXhlYyhoaSwgbmV4dCkpIHx8IChleGVjKGhpLCBtYXRjaCkgJiYgIWV4ZWMobG93LCBwcmV2KSkpIHtcbiAgICByZXR1cm4gJ1xcXFx1JyArIG51bWJlclRvU3RyaW5nKGNoYXJDb2RlQXQobWF0Y2gsIDApLCAxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGFyaXR5OiAzLCBmb3JjZWQ6IFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiB8fCBJTExfRk9STUVEX1VOSUNPREUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYXBwbHkoV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID8gc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggOiAkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbiAgICAgIHJldHVybiBJTExfRk9STUVEX1VOSUNPREUgJiYgdHlwZW9mIHJlc3VsdCA9PSAnc3RyaW5nJyA/IHJlcGxhY2UocmVzdWx0LCB0ZXN0ZXIsIGZpeElsbEZvcm1lZCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZPUkNFRCA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eXN5bWJvbHNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgdmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5U3ltYm9scyA/ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHModG9PYmplY3QoaXQpKSA6IFtdO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jSXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5hc3luY2l0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jSXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmhhc0luc3RhbmNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaGFzaW5zdGFuY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaGFzSW5zdGFuY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmlzY29uY2F0c3ByZWFkYWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoQWxsYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hhbGxcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2hBbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnJlcGxhY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5yZXBsYWNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNlYXJjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNlYXJjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzZWFyY2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwZWNpZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGVjaWVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwbGl0YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BsaXRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BsaXQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wudG9QcmltaXRpdmVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3ByaW1pdGl2ZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gYFN5bWJvbC50b1N0cmluZ1RhZ2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvc3RyaW5ndGFnXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdldEJ1aWx0SW4oJ1N5bWJvbCcpLCAnU3ltYm9sJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC51bnNjb3BhYmxlc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnVuc2NvcGFibGVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBKU09OW0BAdG9TdHJpbmdUYWddIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24tQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc3BlY2llcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc3BsaXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudW5zY29wYWJsZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hdGgudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LnRvLXN0cmluZy10YWcnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAodHlwZW9mIGFyZ3VtZW50ID09ICdvYmplY3QnIHx8IGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgJFN0cmluZyhhcmd1bWVudCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgQ3JlYXRlSXRlclJlc3VsdE9iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWl0ZXJyZXN1bHRvYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBkb25lKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogZG9uZSB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICB9XG4gIHN3aXRjaCAoc3RhdGUua2luZCkge1xuICAgIGNhc2UgJ2tleXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChpbmRleCwgZmFsc2UpO1xuICAgIGNhc2UgJ3ZhbHVlcyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHRhcmdldFtpbmRleF0sIGZhbHNlKTtcbiAgfSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbaW5kZXgsIHRhcmdldFtpbmRleF1dLCBmYWxzZSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1bWVudHNvYmplY3RcbnZhciB2YWx1ZXMgPSBJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcblxuLy8gVjggfiBDaHJvbWUgNDUtIGJ1Z1xuaWYgKCFJU19QVVJFICYmIERFU0NSSVBUT1JTICYmIHZhbHVlcy5uYW1lICE9PSAndmFsdWVzJykgdHJ5IHtcbiAgZGVmaW5lUHJvcGVydHkodmFsdWVzLCAnbmFtZScsIHsgdmFsdWU6ICd2YWx1ZXMnIH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGl0ZXJhYmxlIERPTSBjb2xsZWN0aW9uc1xuLy8gZmxhZyAtIGBpdGVyYWJsZWAgaW50ZXJmYWNlIC0gJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZm9yRWFjaCcgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENTU1J1bGVMaXN0OiAwLFxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiAwLFxuICBDU1NWYWx1ZUxpc3Q6IDAsXG4gIENsaWVudFJlY3RMaXN0OiAwLFxuICBET01SZWN0TGlzdDogMCxcbiAgRE9NU3RyaW5nTGlzdDogMCxcbiAgRE9NVG9rZW5MaXN0OiAxLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogMCxcbiAgRmlsZUxpc3Q6IDAsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiAwLFxuICBIVE1MQ29sbGVjdGlvbjogMCxcbiAgSFRNTEZvcm1FbGVtZW50OiAwLFxuICBIVE1MU2VsZWN0RWxlbWVudDogMCxcbiAgTWVkaWFMaXN0OiAwLFxuICBNaW1lVHlwZUFycmF5OiAwLFxuICBOYW1lZE5vZGVNYXA6IDAsXG4gIE5vZGVMaXN0OiAxLFxuICBQYWludFJlcXVlc3RMaXN0OiAwLFxuICBQbHVnaW46IDAsXG4gIFBsdWdpbkFycmF5OiAwLFxuICBTVkdMZW5ndGhMaXN0OiAwLFxuICBTVkdOdW1iZXJMaXN0OiAwLFxuICBTVkdQYXRoU2VnTGlzdDogMCxcbiAgU1ZHUG9pbnRMaXN0OiAwLFxuICBTVkdTdHJpbmdMaXN0OiAwLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiAwLFxuICBTb3VyY2VCdWZmZXJMaXN0OiAwLFxuICBTdHlsZVNoZWV0TGlzdDogMCxcbiAgVGV4dFRyYWNrQ3VlTGlzdDogMCxcbiAgVGV4dFRyYWNrTGlzdDogMCxcbiAgVG91Y2hMaXN0OiAwXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdO1xuICB2YXIgQ29sbGVjdGlvblByb3RvdHlwZSA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlICYmIGNsYXNzb2YoQ29sbGVjdGlvblByb3RvdHlwZSkgIT09IFRPX1NUUklOR19UQUcpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgfVxuICBJdGVyYXRvcnNbQ09MTEVDVElPTl9OQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgTUVUQURBVEEgPSB3ZWxsS25vd25TeW1ib2woJ21ldGFkYXRhJyk7XG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8vIEZ1bmN0aW9uLnByb3RvdHlwZVtAQG1ldGFkYXRhXVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5pZiAoRnVuY3Rpb25Qcm90b3R5cGVbTUVUQURBVEFdID09PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE1FVEFEQVRBLCB7XG4gICAgdmFsdWU6IG51bGxcbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hc3luYy1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jRGlzcG9zZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuZGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnZGlzcG9zZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWV0YWRhdGFgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3JzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21ldGFkYXRhJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wnKTtcblxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5hc3luYy1kaXNwb3NlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuZGlzcG9zZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG52YXIga2V5Rm9yID0gU3ltYm9sLmtleUZvcjtcbnZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2wgfHwgZnVuY3Rpb24gaXNSZWdpc3RlcmVkU3ltYm9sKHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGtleUZvcih0aGlzU3ltYm9sVmFsdWUodmFsdWUpKSAhPT0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1JlZ2lzdGVyZWRTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXJlZ2lzdGVyZWQnKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUgfSwge1xuICBpc1JlZ2lzdGVyZWRTeW1ib2w6IGlzUmVnaXN0ZXJlZFN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG52YXIgJGlzV2VsbEtub3duU3ltYm9sID0gU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRCdWlsdEluKCdPYmplY3QnLCAnZ2V0T3duUHJvcGVydHlOYW1lcycpO1xudmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuZm9yICh2YXIgaSA9IDAsIHN5bWJvbEtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKFN5bWJvbCksIHN5bWJvbEtleXNMZW5ndGggPSBzeW1ib2xLZXlzLmxlbmd0aDsgaSA8IHN5bWJvbEtleXNMZW5ndGg7IGkrKykge1xuICAvLyBzb21lIG9sZCBlbmdpbmVzIHRocm93cyBvbiBhY2Nlc3MgdG8gc29tZSBrZXlzIGxpa2UgYGFyZ3VtZW50c2Agb3IgYGNhbGxlcmBcbiAgdHJ5IHtcbiAgICB2YXIgc3ltYm9sS2V5ID0gc3ltYm9sS2V5c1tpXTtcbiAgICBpZiAoaXNTeW1ib2woU3ltYm9sW3N5bWJvbEtleV0pKSB3ZWxsS25vd25TeW1ib2woc3ltYm9sS2V5KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufVxuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzV2VsbEtub3duU3ltYm9sKHZhbHVlKSB7XG4gIGlmICgkaXNXZWxsS25vd25TeW1ib2wgJiYgJGlzV2VsbEtub3duU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgdmFyIHN5bWJvbCA9IHRoaXNTeW1ib2xWYWx1ZSh2YWx1ZSk7XG4gICAgZm9yICh2YXIgaiA9IDAsIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDsgaiA8IGtleXNMZW5ndGg7IGorKykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcSAtLSBwb2x5ZmlsbGVkIHN5bWJvbHMgY2FzZVxuICAgICAgaWYgKFdlbGxLbm93blN5bWJvbHNTdG9yZVtrZXlzW2pdXSA9PSBzeW1ib2wpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duJyk7XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBpc1dlbGxLbm93blN5bWJvbDogaXNXZWxsS25vd25TeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hlcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2hlcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wub2JzZXJ2YWJsZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9ic2VydmFibGVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnb2JzZXJ2YWJsZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUmVnaXN0ZXJlZFN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZCcpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZGAgbWV0aG9kXG4vLyBvYnNvbGV0ZSB2ZXJzaW9uIG9mIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBuYW1lOiAnaXNSZWdpc3RlcmVkU3ltYm9sJyB9LCB7XG4gIGlzUmVnaXN0ZXJlZDogaXNSZWdpc3RlcmVkU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1dlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtd2VsbC1rbm93bicpO1xuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duYCBtZXRob2Rcbi8vIG9ic29sZXRlIHZlcnNpb24gb2YgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBuYW1lOiAnaXNXZWxsS25vd25TeW1ib2wnLCBmb3JjZWQ6IHRydWUgfSwge1xuICBpc1dlbGxLbm93bjogaXNXZWxsS25vd25TeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhS2V5YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21ldGFkYXRhS2V5Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucGF0dGVybk1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdwYXR0ZXJuTWF0Y2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlQWxsJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm9ic2VydmFibGUnKTtcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucmVwbGFjZS1hbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBjaGFyQXQoUywgcG9zaXRpb24pXG4gICAgICAgICAgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBzdHJpbmdTbGljZShTLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAyKVxuICAgICAgICAgIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChwb2ludCwgZmFsc2UpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbC9pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sL2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sL2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9zeW1ib2wvaXRlcmF0b3InKTtcbiIsICJpbXBvcnQgX1N5bWJvbCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiO1xuaW1wb3J0IF9TeW1ib2wkaXRlcmF0b3IgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgX1N5bWJvbCRpdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gX1N5bWJvbCAmJiBvICE9PSBfU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlJyk7XG52YXIgV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKCd0b1ByaW1pdGl2ZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wvdG8tcHJpbWl0aXZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL3N5bWJvbC90by1wcmltaXRpdmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbC90by1wcmltaXRpdmUnKTtcbiIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBfU3ltYm9sJHRvUHJpbWl0aXZlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL3RvLXByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W19TeW1ib2wkdG9QcmltaXRpdmVdO1xuICBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKF90eXBlb2YocmVzKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlcztcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7XG4gIHJldHVybiBfdHlwZW9mKGtleSkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBTdHJpbmcoa2V5KTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIF9PYmplY3QkZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChDLCBhcmdzTGVuZ3RoLCBhcmdzKSB7XG4gIGlmICghaGFzT3duKGZhY3RvcmllcywgYXJnc0xlbmd0aCkpIHtcbiAgICB2YXIgbGlzdCA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IGFyZ3NMZW5ndGg7IGkrKykgbGlzdFtpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIGZhY3Rvcmllc1thcmdzTGVuZ3RoXSA9ICRGdW5jdGlvbignQyxhJywgJ3JldHVybiBuZXcgQygnICsgam9pbihsaXN0LCAnLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2FyZ3NMZW5ndGhdKEMsIGFyZ3MpO1xufTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBkZXRlY3Rpb25cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyAkRnVuY3Rpb24uYmluZCA6IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIEYgPSBhQ2FsbGFibGUodGhpcyk7XG4gIHZhciBQcm90b3R5cGUgPSBGLnByb3RvdHlwZTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJvdW5kKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IGNvbmNhdChwYXJ0QXJncywgYXJyYXlTbGljZShhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kRnVuY3Rpb24gPyBjb25zdHJ1Y3QoRiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogRi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KFByb3RvdHlwZSkpIGJvdW5kRnVuY3Rpb24ucHJvdG90eXBlID0gUHJvdG90eXBlO1xuICByZXR1cm4gYm91bmRGdW5jdGlvbjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxuJCh7IHRhcmdldDogJ0Z1bmN0aW9uJywgcHJvdG86IHRydWUsIGZvcmNlZDogRnVuY3Rpb24uYmluZCAhPT0gYmluZCB9LCB7XG4gIGJpbmQ6IGJpbmRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SLCBNRVRIT0QpIHtcbiAgdmFyIE5hbWVzcGFjZSA9IHBhdGhbQ09OU1RSVUNUT1IgKyAnUHJvdG90eXBlJ107XG4gIHZhciBwdXJlTWV0aG9kID0gTmFtZXNwYWNlICYmIE5hbWVzcGFjZVtNRVRIT0RdO1xuICBpZiAocHVyZU1ldGhvZCkgcmV0dXJuIHB1cmVNZXRob2Q7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBOYXRpdmVQcm90b3R5cGUgJiYgTmF0aXZlUHJvdG90eXBlW01FVEhPRF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdGdW5jdGlvbicsICdiaW5kJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9uL3ZpcnR1YWwvYmluZCcpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5iaW5kO1xuICByZXR1cm4gaXQgPT09IEZ1bmN0aW9uUHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEZ1bmN0aW9uUHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBGdW5jdGlvblByb3RvdHlwZS5iaW5kKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9iaW5kXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyByZWR1Y2UsIHJlZHVjZVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfUklHSFQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhcmd1bWVudHNMZW5ndGgsIG1lbW8pIHtcbiAgICBhQ2FsbGFibGUoY2FsbGJhY2tmbik7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IElTX1JJR0hUID8gbGVuZ3RoIC0gMSA6IDA7XG4gICAgdmFyIGkgPSBJU19SSUdIVCA/IC0xIDogMTtcbiAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDwgMikgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgICAgaW5kZXggKz0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgaWYgKElTX1JJR0hUID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoO0lTX1JJR0hUID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiAgbGVmdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZXJpZ2h0XG4gIHJpZ2h0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5sZWZ0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIENIUk9NRV9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG4vLyBDaHJvbWUgODAtODIgaGFzIGEgY3JpdGljYWwgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDQ5OTgyXG52YXIgQ0hST01FX0JVRyA9ICFJU19OT0RFICYmIENIUk9NRV9WRVJTSU9OID4gNzkgJiYgQ0hST01FX1ZFUlNJT04gPCA4MztcbnZhciBGT1JDRUQgPSBDSFJPTUVfQlVHIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdyZWR1Y2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgbGVuZ3RoLCBsZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAncmVkdWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmVkdWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJlZHVjZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmVkdWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JlZHVjZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JlZHVjZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbHRlcicpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmaWx0ZXInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maWx0ZXInKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmlsdGVyO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvZmlsdGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLm1hcDtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnbWFwJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkubWFwJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ21hcCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL21hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5tYXA7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLm1hcCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9tYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9tYXBcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG5cbi8vIGBGbGF0dGVuSW50b0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gZnVuY3Rpb24gKHRhcmdldCwgb3JpZ2luYWwsIHNvdXJjZSwgc291cmNlTGVuLCBzdGFydCwgZGVwdGgsIG1hcHBlciwgdGhpc0FyZykge1xuICB2YXIgdGFyZ2V0SW5kZXggPSBzdGFydDtcbiAgdmFyIHNvdXJjZUluZGV4ID0gMDtcbiAgdmFyIG1hcEZuID0gbWFwcGVyID8gYmluZChtYXBwZXIsIHRoaXNBcmcpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBlbGVtZW50TGVuO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBpZiAoZGVwdGggPiAwICYmIGlzQXJyYXkoZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudExlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKGVsZW1lbnQpO1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgZWxlbWVudExlbiwgdGFyZ2V0SW5kZXgsIGRlcHRoIC0gMSkgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKHRhcmdldEluZGV4ICsgMSk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbkludG9BcnJheTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mbGF0TWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZsYXRtYXBcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBBO1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIEEubGVuZ3RoID0gZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mbGF0LW1hcCcpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS51bnNjb3BhYmxlcy5mbGF0LW1hcCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmbGF0TWFwJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmxhdC1tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmxhdE1hcDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmxhdE1hcCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9mbGF0LW1hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZsYXQtbWFwXCIpOyIsICJpbXBvcnQgeyBEYXRhSW50ZXJmYWNlLCBFdmVudENhbGxiYWNrcywgUGFydEl0ZW0gfSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuaW1wb3J0IHsgRGF0YVNldCB9IGZyb20gXCIuL2RhdGEtc2V0XCI7XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjb250cm9sIHRoZSBwaXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFQaXBlIHtcbiAgLyoqXG4gICAqIFRha2UgYWxsIGl0ZW1zIGZyb20gdGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcsIHRyYW5zZm9ybSB0aGVtIGFzXG4gICAqIGNvbmZpZ3VyZWQgYW5kIHVwZGF0ZSB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKi9cbiAgYWxsKCk6IHRoaXM7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9ic2VydmluZyB0aGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldywgdHJhbnNmb3JtaW5nIHRoZSBpdGVtc1xuICAgKiBhbmQgdXBkYXRpbmcgdGhlIHRhcmdldCBkYXRhIHNldC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUgc291cmNlIGRhdGEgc2V0IHdpbGwgYmUgaWdub3JlZC4gSWYgeW91IGZvclxuICAgKiBleGFtcGxlIHdhbnQgdG8gcHJvY2VzcyBhbGwgdGhlIGl0ZW1zIHRoYXQgYXJlIGFscmVhZHkgdGhlcmUgdXNlOlxuICAgKiBgcGlwZS5hbGwoKS5zdGFydCgpYC5cbiAgICovXG4gIHN0YXJ0KCk6IHRoaXM7XG5cbiAgLyoqXG4gICAqIFN0b3Agb2JzZXJ2aW5nIHRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LCB0cmFuc2Zvcm1pbmcgdGhlIGl0ZW1zXG4gICAqIGFuZCB1cGRhdGluZyB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKi9cbiAgc3RvcCgpOiB0aGlzO1xufVxuXG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwaXBlLlxuICovXG5leHBvcnQgdHlwZSBEYXRhUGlwZUZhY3RvcnkgPSBJbnN0YW5jZVR5cGU8dHlwZW9mIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24+O1xuXG4vKipcbiAqIENyZWF0ZSBuZXcgZGF0YSBwaXBlLlxuICpcbiAqIEBwYXJhbSBmcm9tIC0gVGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcuXG4gKiBAcmVtYXJrc1xuICogRXhhbXBsZSB1c2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGludGVyZmFjZSBBcHBJdGVtIHtcbiAqICAgd2hvYW1pOiBzdHJpbmc7XG4gKiAgIGFwcERhdGE6IHVua25vd247XG4gKiAgIHZpc0RhdGE6IFZpc0l0ZW07XG4gKiB9XG4gKiBpbnRlcmZhY2UgVmlzSXRlbSB7XG4gKiAgIGlkOiBudW1iZXI7XG4gKiAgIGxhYmVsOiBzdHJpbmc7XG4gKiAgIGNvbG9yOiBzdHJpbmc7XG4gKiAgIHg6IG51bWJlcjtcbiAqICAgeTogbnVtYmVyO1xuICogfVxuICpcbiAqIGNvbnN0IGRzMSA9IG5ldyBEYXRhU2V0PEFwcEl0ZW0sIFwid2hvYW1pXCI+KFtdLCB7IGZpZWxkSWQ6IFwid2hvYW1pXCIgfSk7XG4gKiBjb25zdCBkczIgPSBuZXcgRGF0YVNldDxWaXNJdGVtLCBcImlkXCI+KCk7XG4gKlxuICogY29uc3QgcGlwZSA9IGNyZWF0ZU5ld0RhdGFQaXBlRnJvbShkczEpXG4gKiAgIC5maWx0ZXIoKGl0ZW0pOiBib29sZWFuID0+IGl0ZW0uZW5hYmxlZCA9PT0gdHJ1ZSlcbiAqICAgLm1hcDxWaXNJdGVtLCBcImlkXCI+KChpdGVtKTogVmlzSXRlbSA9PiBpdGVtLnZpc0RhdGEpXG4gKiAgIC50byhkczIpO1xuICpcbiAqIHBpcGUuc3RhcnQoKTtcbiAqIGBgYFxuICogQHJldHVybnMgQSBmYWN0b3J5IHdob3NlIG1ldGhvZHMgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBwaXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTmV3RGF0YVBpcGVGcm9tPFxuICBTSSBleHRlbmRzIFBhcnRJdGVtPFNQPixcbiAgU1AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4oZnJvbTogRGF0YUludGVyZmFjZTxTSSwgU1A+KTogRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxTSSwgU1A+IHtcbiAgcmV0dXJuIG5ldyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uKGZyb20pO1xufVxuXG50eXBlIFRyYW5zZm9ybWVyPFQ+ID0gKGlucHV0OiBUW10pID0+IFRbXTtcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGlwZS4gVGhpcyBzaG91bGQgYmUgYWNjZXNzaWJsZSBvbmx5IHRocm91Z2hcbiAqIGBjcmVhdGVOZXdEYXRhUGlwZUZyb21gIGZyb20gdGhlIG91dHNpZGUuXG4gKlxuICogQHR5cGVQYXJhbSBTSSAtIFNvdXJjZSBpdGVtIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFNQIC0gU291cmNlIGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqL1xuY2xhc3MgU2ltcGxlRGF0YVBpcGU8XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyxcbiAgVEkgZXh0ZW5kcyBQYXJ0SXRlbTxUUD4sXG4gIFRQIGV4dGVuZHMgc3RyaW5nXG4+IGltcGxlbWVudHMgRGF0YVBpcGVcbntcbiAgLyoqXG4gICAqIEJvdW5kIGxpc3RlbmVycyBmb3IgdXNlIHdpdGggYERhdGFJbnRlcmZhY2VbJ29uJyB8ICdvZmYnXWAuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD4gPSB7XG4gICAgYWRkOiB0aGlzLl9hZGQuYmluZCh0aGlzKSxcbiAgICByZW1vdmU6IHRoaXMuX3JlbW92ZS5iaW5kKHRoaXMpLFxuICAgIHVwZGF0ZTogdGhpcy5fdXBkYXRlLmJpbmQodGhpcyksXG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBkYXRhIHBpcGUuXG4gICAqXG4gICAqIEBwYXJhbSBfc291cmNlIC0gVGhlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyB0aGF0IHdpbGwgYmUgb2JzZXJ2ZWQuXG4gICAqIEBwYXJhbSBfdHJhbnNmb3JtZXJzIC0gQW4gYXJyYXkgb2YgdHJhbnNmb3JtaW5nIGZ1bmN0aW9ucyB0byBiZSB1c2VkIHRvXG4gICAqIGZpbHRlciBvciB0cmFuc2Zvcm0gdGhlIGl0ZW1zIGluIHRoZSBwaXBlLlxuICAgKiBAcGFyYW0gX3RhcmdldCAtIFRoZSBkYXRhIHNldCBvciBkYXRhIHZpZXcgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NvdXJjZTogRGF0YUludGVyZmFjZTxTSSwgU1A+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zZm9ybWVyczogcmVhZG9ubHkgVHJhbnNmb3JtZXI8dW5rbm93bj5bXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YXJnZXQ6IERhdGFTZXQ8VEksIFRQPlxuICApIHt9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBhbGwoKTogdGhpcyB7XG4gICAgdGhpcy5fdGFyZ2V0LnVwZGF0ZSh0aGlzLl90cmFuc2Zvcm1JdGVtcyh0aGlzLl9zb3VyY2UuZ2V0KCkpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RhcnQoKTogdGhpcyB7XG4gICAgdGhpcy5fc291cmNlLm9uKFwiYWRkXCIsIHRoaXMuX2xpc3RlbmVycy5hZGQpO1xuICAgIHRoaXMuX3NvdXJjZS5vbihcInJlbW92ZVwiLCB0aGlzLl9saXN0ZW5lcnMucmVtb3ZlKTtcbiAgICB0aGlzLl9zb3VyY2Uub24oXCJ1cGRhdGVcIiwgdGhpcy5fbGlzdGVuZXJzLnVwZGF0ZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RvcCgpOiB0aGlzIHtcbiAgICB0aGlzLl9zb3VyY2Uub2ZmKFwiYWRkXCIsIHRoaXMuX2xpc3RlbmVycy5hZGQpO1xuICAgIHRoaXMuX3NvdXJjZS5vZmYoXCJyZW1vdmVcIiwgdGhpcy5fbGlzdGVuZXJzLnJlbW92ZSk7XG4gICAgdGhpcy5fc291cmNlLm9mZihcInVwZGF0ZVwiLCB0aGlzLl9saXN0ZW5lcnMudXBkYXRlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRoZSB0cmFuc2Zvcm1lcnMgdG8gdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbXMgLSBUaGUgaXRlbXMgdG8gYmUgdHJhbnNmb3JtZWQuXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2Zvcm1lZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX3RyYW5zZm9ybUl0ZW1zKGl0ZW1zOiB1bmtub3duW10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybWVycy5yZWR1Y2UoKGl0ZW1zLCB0cmFuc2Zvcm0pOiB1bmtub3duW10gPT4ge1xuICAgICAgcmV0dXJuIHRyYW5zZm9ybShpdGVtcyk7XG4gICAgfSwgaXRlbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiBhZGQgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgaWRzIG9mIHRoZSBhZGRlZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX2FkZChcbiAgICBfbmFtZTogUGFyYW1ldGVyczxFdmVudENhbGxiYWNrczxTSSwgU1A+W1wiYWRkXCJdPlswXSxcbiAgICBwYXlsb2FkOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJhZGRcIl0+WzFdXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXlsb2FkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90YXJnZXQuYWRkKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQocGF5bG9hZC5pdGVtcykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYW4gdXBkYXRlIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gX25hbWUgLSBJZ25vcmVkLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIGlkcyBvZiB0aGUgdXBkYXRlZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZShcbiAgICBfbmFtZTogUGFyYW1ldGVyczxFdmVudENhbGxiYWNrczxTSSwgU1A+W1widXBkYXRlXCJdPlswXSxcbiAgICBwYXlsb2FkOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJ1cGRhdGVcIl0+WzFdXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXlsb2FkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90YXJnZXQudXBkYXRlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQocGF5bG9hZC5pdGVtcykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSByZW1vdmUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgZGF0YSBvZiB0aGUgcmVtb3ZlZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX3JlbW92ZShcbiAgICBfbmFtZTogUGFyYW1ldGVyczxFdmVudENhbGxiYWNrczxTSSwgU1A+W1wicmVtb3ZlXCJdPlswXSxcbiAgICBwYXlsb2FkOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJyZW1vdmVcIl0+WzFdXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXlsb2FkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90YXJnZXQucmVtb3ZlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHBheWxvYWQub2xkRGF0YSkpO1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBpcGUgZmFjdG9yeS4gVGhpcyBzaG91bGQgYmUgYWNjZXNzaWJsZVxuICogb25seSB0aHJvdWdoIGBjcmVhdGVOZXdEYXRhUGlwZUZyb21gIGZyb20gdGhlIG91dHNpZGUuXG4gKlxuICogQHR5cGVQYXJhbSBUSSAtIFRhcmdldCBpdGVtIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gKi9cbmNsYXNzIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPiB7XG4gIC8qKlxuICAgKiBBcnJheSB0cmFuc2Zvcm1lcnMgdXNlZCB0byB0cmFuc2Zvcm0gaXRlbXMgd2l0aGluIHRoZSBwaXBlLiBUaGlzIGlzIHR5cGVkXG4gICAqIGFzIGFueSBmb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zZm9ybWVyczogVHJhbnNmb3JtZXI8YW55PltdID0gW107XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBkYXRhIHBpcGUgZmFjdG9yeS4gVGhpcyBpcyBhbiBpbnRlcm5hbCBjb25zdHJ1Y3RvciB0aGF0XG4gICAqIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIHRoaXMgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyBmb3IgdGhpcyBwaXBlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3NvdXJjZTogRGF0YUludGVyZmFjZTxTSSwgU1A+KSB7fVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIGZpbHRlcmluZyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiBnaXZlbiBpdGVtXG4gICAqIHNob3VsZCBiZSBwaXBlZCBhbmQgZmFsc2UgaWYgbm90LlxuICAgKiBAcmV0dXJucyBUaGlzIGZhY3RvcnkgZm9yIGZ1cnRoZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBmaWx0ZXIoXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gYm9vbGVhblxuICApOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFNJLCBTUD4ge1xuICAgIHRoaXMuX3RyYW5zZm9ybWVycy5wdXNoKChpbnB1dCk6IHVua25vd25bXSA9PiBpbnB1dC5maWx0ZXIoY2FsbGJhY2spKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgZWFjaCBzb3VyY2UgaXRlbSB0byBhIG5ldyB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIG1hcHBpbmcgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHNvdXJjZSBpdGVtIGFuZCByZXR1cm5zXG4gICAqIGNvcnJlc3BvbmRpbmcgbWFwcGVkIGl0ZW0uXG4gICAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICAgKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIG1hcDxUSSBleHRlbmRzIFBhcnRJdGVtPFRQPiwgVFAgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCI+KFxuICAgIGNhbGxiYWNrOiAoaXRlbTogU0kpID0+IFRJXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0Lm1hcChjYWxsYmFjaykpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxUSSwgVFA+O1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBlYWNoIHNvdXJjZSBpdGVtIHRvIHplcm8gb3IgbW9yZSBpdGVtcyBvZiBhIG5ldyB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIG1hcHBpbmcgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHNvdXJjZSBpdGVtIGFuZCByZXR1cm5zXG4gICAqIGFuIGFycmF5IG9mIGNvcnJlc3BvbmRpbmcgbWFwcGVkIGl0ZW1zLlxuICAgKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAgICogQHR5cGVQYXJhbSBUUCAtIFRhcmdldCBpdGVtIHR5cGUncyBpZCBwcm9wZXJ0eSBuYW1lLlxuICAgKiBAcmV0dXJucyBUaGlzIGZhY3RvcnkgZm9yIGZ1cnRoZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBmbGF0TWFwPFRJIGV4dGVuZHMgUGFydEl0ZW08VFA+LCBUUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIj4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gVElbXVxuICApOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD4ge1xuICAgIHRoaXMuX3RyYW5zZm9ybWVycy5wdXNoKChpbnB1dCk6IHVua25vd25bXSA9PiBpbnB1dC5mbGF0TWFwKGNhbGxiYWNrKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD47XG4gIH1cblxuICAvKipcbiAgICogQ29ubmVjdCB0aGlzIHBpcGUgdG8gZ2l2ZW4gZGF0YSBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgZGF0YSBzZXQgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGl0ZW1zIGZyb20gdGhpcyBwaXBlLlxuICAgKiBAcmV0dXJucyBUaGUgcGlwZSBjb25uZWN0ZWQgYmV0d2VlbiBnaXZlbiBkYXRhIHNldHMgYW5kIHBlcmZvcm1pbmdcbiAgICogY29uZmlndXJlZCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgcHJvY2Vzc2VkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIHRvKHRhcmdldDogRGF0YVNldDxTSSwgU1A+KTogRGF0YVBpcGUge1xuICAgIHJldHVybiBuZXcgU2ltcGxlRGF0YVBpcGUodGhpcy5fc291cmNlLCB0aGlzLl90cmFuc2Zvcm1lcnMsIHRhcmdldCk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGNhbGwoaW5uZXJSZXN1bHQsIGl0ZXJhdG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbm5lckVycm9yID0gdHJ1ZTtcbiAgICBpbm5lclJlc3VsdCA9IGVycm9yO1xuICB9XG4gIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgaWYgKGlubmVyRXJyb3IpIHRocm93IGlubmVyUmVzdWx0O1xuICBhbk9iamVjdChpbm5lclJlc3VsdCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgRU5UUklFUykge1xuICB0cnkge1xuICAgIHJldHVybiBFTlRSSUVTID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXQpKSByZXR1cm4gZ2V0TWV0aG9kKGl0LCBJVEVSQVRPUilcbiAgICB8fCBnZXRNZXRob2QoaXQsICdAQGl0ZXJhdG9yJylcbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGNhbGwoaXRlcmF0b3JNZXRob2QsIGFyZ3VtZW50KSk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgdmFyIElTX0NPTlNUUlVDVE9SID0gaXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0LCB2YWx1ZTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICEodGhpcyA9PT0gJEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6ICRBcnJheShsZW5ndGgpO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICB0cnkge1xuICAgIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIHdvcmthcm91bmQgb2Ygb2xkIFdlYktpdCArIGBldmFsYCBidWdcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG5cbnZhciBJTkNPUlJFQ1RfSVRFUkFUSU9OID0gIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYWJsZSk7XG59KTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBmcm9tOiBmcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mcm9tJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5mcm9tO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9mcm9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvZnJvbVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SXRlcmF0b3JNZXRob2Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL2VzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vc3RhYmxlL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL2FjdHVhbC9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vZnVsbC9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2RcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxuLy8gYEFycmF5LmlzQXJyYXlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5pc2FycmF5XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNBcnJheTogaXNBcnJheVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pcy1hcnJheScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguQXJyYXkuaXNBcnJheTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvYXJyYXkvaXMtYXJyYXknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9hcnJheS9pcy1hcnJheScpO1xuIiwgImltcG9ydCBfQXJyYXkkaXNBcnJheSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2lzLWFycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChfQXJyYXkkaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IGFuZCBTYWZhcmkgPD0gMTUuNCwgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTI2ODFcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkucHVzaCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9UT19MRU5HVEggfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnB1c2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucHVzaFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHB1c2g6IGZ1bmN0aW9uIHB1c2goaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGFyZ0NvdW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHtcbiAgICAgIE9bbGVuXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGxlbisrO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4pO1xuICAgIHJldHVybiBsZW47XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucHVzaCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdwdXNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcHVzaCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5wdXNoO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5wdXNoKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3B1c2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9wdXNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvaW5zdGFuY2UvcHVzaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvaW5zdGFuY2UvcHVzaCcpO1xuIiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiO1xuaW1wb3J0IF9wdXNoSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIF9TeW1ib2wgJiYgX2dldEl0ZXJhdG9yTWV0aG9kKHIpIHx8IHJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSB0KSB7XG4gICAgdmFyIGUsXG4gICAgICBuLFxuICAgICAgaSxcbiAgICAgIHUsXG4gICAgICBhID0gW10sXG4gICAgICBmID0gITAsXG4gICAgICBvID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHtcbiAgICAgICAgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuO1xuICAgICAgICBmID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoX3B1c2hJbnN0YW5jZVByb3BlcnR5KGEpLmNhbGwoYSwgZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBuYXRpdmVTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc2xpY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc2xpY2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9zbGljZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvYXJyYXkvZnJvbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2FycmF5L2Zyb20nKTtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuICByZXR1cm4gYXJyMjtcbn0iLCAiaW1wb3J0IF9zbGljZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZS5qc1wiO1xuaW1wb3J0IF9BcnJheSRmcm9tIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qc1wiO1xuaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICB2YXIgX2NvbnRleHQ7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSkuY2FsbChfY29udGV4dCwgOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gX0FycmF5JGZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsICJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59IiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiO1xuaW1wb3J0IF9BcnJheSRmcm9tIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgX1N5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBfZ2V0SXRlcmF0b3JNZXRob2QoaXRlcikgIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gX0FycmF5JGZyb20oaXRlcik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgImltcG9ydCBhcnJheVdpdGhvdXRIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlU3ByZWFkIGZyb20gXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn0iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2xcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2NvbmNhdCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2NvbmNhdCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5jb25jYXQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmNvbmNhdCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9jb25jYXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9jb25jYXRcIik7IiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc2xpY2VcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcblxuLy8gYFJlZmxlY3Qub3duS2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3Qub3dua2V5c1xuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgb3duS2V5czogb3duS2V5c1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0Lm93bi1rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5SZWZsZWN0Lm93bktleXM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3JlZmxlY3Qvb3duLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9yZWZsZWN0L293bi1rZXlzXCIpOyIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5XCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3Qva2V5c1wiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAhU1RSSUNUX01FVEhPRCA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG59IDogW10uZm9yRWFjaDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogW10uZm9yRWFjaCAhPT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2gnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnZm9yRWFjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5mb3JFYWNoO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5mb3JFYWNoKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IHVuY3VycnlUaGlzKFtdLnJldmVyc2UpO1xudmFyIHRlc3QgPSBbMSwgMl07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmV2ZXJzZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ24gLS0gZGlydHkgaGFja1xuICAgIGlmIChpc0FycmF5KHRoaXMpKSB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHJldHVybiBuYXRpdmVSZXZlcnNlKHRoaXMpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAncmV2ZXJzZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JldmVyc2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmV2ZXJzZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmV2ZXJzZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmV2ZXJzZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgaWYgKCFkZWxldGUgT1tQXSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBkZWxldGUgcHJvcGVydHkgJyArIHRyeVRvU3RyaW5nKFApICsgJyBvZiAnICsgdHJ5VG9TdHJpbmcoTykpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc3BsaWNlJyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zcGxpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc3BsaWNlXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzcGxpY2U6IGZ1bmN0aW9uIHNwbGljZShzdGFydCwgZGVsZXRlQ291bnQgLyogLCAuLi5pdGVtcyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhY3R1YWxTdGFydCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5zZXJ0Q291bnQsIGFjdHVhbERlbGV0ZUNvdW50LCBBLCBrLCBmcm9tLCB0bztcbiAgICBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAwKSB7XG4gICAgICBpbnNlcnRDb3VudCA9IGFjdHVhbERlbGV0ZUNvdW50ID0gMDtcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMSkge1xuICAgICAgaW5zZXJ0Q291bnQgPSAwO1xuICAgICAgYWN0dWFsRGVsZXRlQ291bnQgPSBsZW4gLSBhY3R1YWxTdGFydDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zZXJ0Q291bnQgPSBhcmd1bWVudHNMZW5ndGggLSAyO1xuICAgICAgYWN0dWFsRGVsZXRlQ291bnQgPSBtaW4obWF4KHRvSW50ZWdlck9ySW5maW5pdHkoZGVsZXRlQ291bnQpLCAwKSwgbGVuIC0gYWN0dWFsU3RhcnQpO1xuICAgIH1cbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgaW5zZXJ0Q291bnQgLSBhY3R1YWxEZWxldGVDb3VudCk7XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCBhY3R1YWxEZWxldGVDb3VudCk7XG4gICAgZm9yIChrID0gMDsgayA8IGFjdHVhbERlbGV0ZUNvdW50OyBrKyspIHtcbiAgICAgIGZyb20gPSBhY3R1YWxTdGFydCArIGs7XG4gICAgICBpZiAoZnJvbSBpbiBPKSBjcmVhdGVQcm9wZXJ0eShBLCBrLCBPW2Zyb21dKTtcbiAgICB9XG4gICAgQS5sZW5ndGggPSBhY3R1YWxEZWxldGVDb3VudDtcbiAgICBpZiAoaW5zZXJ0Q291bnQgPCBhY3R1YWxEZWxldGVDb3VudCkge1xuICAgICAgZm9yIChrID0gYWN0dWFsU3RhcnQ7IGsgPCBsZW4gLSBhY3R1YWxEZWxldGVDb3VudDsgaysrKSB7XG4gICAgICAgIGZyb20gPSBrICsgYWN0dWFsRGVsZXRlQ291bnQ7XG4gICAgICAgIHRvID0gayArIGluc2VydENvdW50O1xuICAgICAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgICAgIGVsc2UgZGVsZXRlUHJvcGVydHlPclRocm93KE8sIHRvKTtcbiAgICAgIH1cbiAgICAgIGZvciAoayA9IGxlbjsgayA+IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50ICsgaW5zZXJ0Q291bnQ7IGstLSkgZGVsZXRlUHJvcGVydHlPclRocm93KE8sIGsgLSAxKTtcbiAgICB9IGVsc2UgaWYgKGluc2VydENvdW50ID4gYWN0dWFsRGVsZXRlQ291bnQpIHtcbiAgICAgIGZvciAoayA9IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50OyBrID4gYWN0dWFsU3RhcnQ7IGstLSkge1xuICAgICAgICBmcm9tID0gayArIGFjdHVhbERlbGV0ZUNvdW50IC0gMTtcbiAgICAgICAgdG8gPSBrICsgaW5zZXJ0Q291bnQgLSAxO1xuICAgICAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgICAgIGVsc2UgZGVsZXRlUHJvcGVydHlPclRocm93KE8sIHRvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChrID0gMDsgayA8IGluc2VydENvdW50OyBrKyspIHtcbiAgICAgIE9bayArIGFjdHVhbFN0YXJ0XSA9IGFyZ3VtZW50c1trICsgMl07XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50ICsgaW5zZXJ0Q291bnQpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNwbGljZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzcGxpY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zcGxpY2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc3BsaWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zcGxpY2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc3BsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc3BsaWNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSBzYWZlXG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gc2hvdWxkIGhhdmUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIChFZGdlIGJ1ZylcbiAgaWYgKERFU0NSSVBUT1JTICYmICRhc3NpZ24oeyBiOiAxIH0sICRhc3NpZ24oZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYicsIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pLCB7IGI6IDIgfSkpLmIgIT09IDEpIHJldHVybiB0cnVlO1xuICAvLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1ZylcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN5bWJvbCAtLSBzYWZlXG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ2Fzc2lnbiBkZXRlY3Rpb24nKTtcbiAgdmFyIGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtzeW1ib2xdID0gNztcbiAgYWxwaGFiZXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNocikgeyBCW2Nocl0gPSBjaHI7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPT0gNyB8fCBvYmplY3RLZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPT0gYWxwaGFiZXQ7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICB2YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xuICB3aGlsZSAoYXJndW1lbnRzTGVuZ3RoID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IEluZGV4ZWRPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChvYmplY3RLZXlzKFMpLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZSwgUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtYXNzaWduJyk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBhcml0eTogMiwgZm9yY2VkOiBPYmplY3QuYXNzaWduICE9PSBhc3NpZ24gfSwge1xuICBhc3NpZ246IGFzc2lnblxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuYXNzaWduO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvYXNzaWduJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2Fzc2lnblwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldFByb3RvdHlwZU9mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUywgc2hhbTogIUNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiB9LCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiBuYXRpdmVHZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgY3JlYXRlOiBjcmVhdGVcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlKFAsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoUCwgRCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2NyZWF0ZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1qc29uIC0tIHNhZmVcbmlmICghcGF0aC5KU09OKSBwYXRoLkpTT04gPSB7IHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnkgfTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgcmV0dXJuIGFwcGx5KHBhdGguSlNPTi5zdHJpbmdpZnksIG51bGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9qc29uL3N0cmluZ2lmeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2pzb24vc3RyaW5naWZ5XCIpOyIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQnVuIC0tIERlbm8gY2FzZSAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgQnVuID09ICdmdW5jdGlvbicgJiYgQnVuICYmIHR5cGVvZiBCdW4udmVyc2lvbiA9PSAnc3RyaW5nJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFzc2VkLCByZXF1aXJlZCkge1xuICBpZiAocGFzc2VkIDwgcmVxdWlyZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuICByZXR1cm4gcGFzc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIEVOR0lORV9JU19CVU4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bicpO1xudmFyIFVTRVJfQUdFTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xuXG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG4vLyBkaXJ0eSBJRTktIGFuZCBCdW4gMC4zLjAtIGNoZWNrc1xudmFyIFdSQVAgPSAvTVNJRSAuXFwuLy50ZXN0KFVTRVJfQUdFTlQpIHx8IEVOR0lORV9JU19CVU4gJiYgKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlcnNpb24gPSBnbG9iYWwuQnVuLnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoIDwgMyB8fCB2ZXJzaW9uWzBdID09PSAnMCcgJiYgKHZlcnNpb25bMV0gPCAzIHx8IHZlcnNpb25bMV0gPT09ICczJyAmJiB2ZXJzaW9uWzJdID09PSAnMCcpO1xufSkoKTtcblxuLy8gSUU5LSAvIEJ1biAwLjMuMC0gc2V0VGltZW91dCAvIHNldEludGVydmFsIC8gc2V0SW1tZWRpYXRlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjdGltZXJzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzE2MzNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaGFzVGltZUFyZykge1xuICB2YXIgZmlyc3RQYXJhbUluZGV4ID0gaGFzVGltZUFyZyA/IDIgOiAxO1xuICByZXR1cm4gV1JBUCA/IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpID4gZmlyc3RQYXJhbUluZGV4O1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIHBhcmFtcyA9IGJvdW5kQXJncyA/IGFycmF5U2xpY2UoYXJndW1lbnRzLCBmaXJzdFBhcmFtSW5kZXgpIDogW107XG4gICAgdmFyIGNhbGxiYWNrID0gYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHRoaXMsIHBhcmFtcyk7XG4gICAgfSA6IGZuO1xuICAgIHJldHVybiBoYXNUaW1lQXJnID8gc2NoZWR1bGVyKGNhbGxiYWNrLCB0aW1lb3V0KSA6IHNjaGVkdWxlcihjYWxsYmFjayk7XG4gIH0gOiBzY2hlZHVsZXI7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRJbnRlcnZhbCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldEludGVydmFsLCB0cnVlKTtcblxuLy8gQnVuIC8gSUU5LSBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0SW50ZXJ2YWwgIT09IHNldEludGVydmFsIH0sIHtcbiAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG52YXIgc2V0VGltZW91dCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldFRpbWVvdXQsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldFRpbWVvdXQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0dGltZW91dFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0VGltZW91dCAhPT0gc2V0VGltZW91dCB9LCB7XG4gIHNldFRpbWVvdXQ6IHNldFRpbWVvdXRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnRpbWVycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0VGltZW91dDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3NldC10aW1lb3V0XCIpOyIsICJmdW5jdGlvbiBFbWl0dGVyKG9iamVjdCkge1xuXHRpZiAob2JqZWN0KSB7XG5cdFx0cmV0dXJuIG1peGluKG9iamVjdCk7XG5cdH1cblxuXHR0aGlzLl9jYWxsYmFja3MgPSBuZXcgTWFwKCk7XG59XG5cbmZ1bmN0aW9uIG1peGluKG9iamVjdCkge1xuXHRPYmplY3QuYXNzaWduKG9iamVjdCwgRW1pdHRlci5wcm90b3R5cGUpO1xuXHRvYmplY3QuX2NhbGxiYWNrcyA9IG5ldyBNYXAoKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuRW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXZlbnQsIGxpc3RlbmVyKSB7XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpID8/IFtdO1xuXHRjYWxsYmFja3MucHVzaChsaXN0ZW5lcik7XG5cdHRoaXMuX2NhbGxiYWNrcy5zZXQoZXZlbnQsIGNhbGxiYWNrcyk7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0Y29uc3Qgb24gPSAoLi4uYXJndW1lbnRzXykgPT4ge1xuXHRcdHRoaXMub2ZmKGV2ZW50LCBvbik7XG5cdFx0bGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzXyk7XG5cdH07XG5cblx0b24uZm4gPSBsaXN0ZW5lcjtcblx0dGhpcy5vbihldmVudCwgb24pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0aWYgKGV2ZW50ID09PSB1bmRlZmluZWQgJiYgbGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2NhbGxiYWNrcy5jbGVhcigpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aWYgKGxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcblx0XHR0aGlzLl9jYWxsYmFja3MuZGVsZXRlKGV2ZW50KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpO1xuXHRpZiAoY2FsbGJhY2tzKSB7XG5cdFx0Zm9yIChjb25zdCBbaW5kZXgsIGNhbGxiYWNrXSBvZiBjYWxsYmFja3MuZW50cmllcygpKSB7XG5cdFx0XHRpZiAoY2FsbGJhY2sgPT09IGxpc3RlbmVyIHx8IGNhbGxiYWNrLmZuID09PSBsaXN0ZW5lcikge1xuXHRcdFx0XHRjYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGNhbGxiYWNrcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuX2NhbGxiYWNrcy5kZWxldGUoZXZlbnQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9jYWxsYmFja3Muc2V0KGV2ZW50LCBjYWxsYmFja3MpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldmVudCwgLi4uYXJndW1lbnRzXykge1xuXHRjb25zdCBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MuZ2V0KGV2ZW50KTtcblx0aWYgKGNhbGxiYWNrcykge1xuXHRcdC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGNhbGxiYWNrcyBhcnJheSB0byBhdm9pZCBpc3N1ZXMgaWYgaXQncyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uXG5cdFx0Y29uc3QgY2FsbGJhY2tzQ29weSA9IFsuLi5jYWxsYmFja3NdO1xuXG5cdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBjYWxsYmFja3NDb3B5KSB7XG5cdFx0XHRjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCkgPz8gW107XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdGlmIChldmVudCkge1xuXHRcdHJldHVybiB0aGlzLmxpc3RlbmVycyhldmVudCkubGVuZ3RoO1xuXHR9XG5cblx0bGV0IHRvdGFsQ291bnQgPSAwO1xuXHRmb3IgKGNvbnN0IGNhbGxiYWNrcyBvZiB0aGlzLl9jYWxsYmFja3MudmFsdWVzKCkpIHtcblx0XHR0b3RhbENvdW50ICs9IGNhbGxiYWNrcy5sZW5ndGg7XG5cdH1cblxuXHRyZXR1cm4gdG90YWxDb3VudDtcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRyZXR1cm4gdGhpcy5saXN0ZW5lckNvdW50KGV2ZW50KSA+IDA7XG59O1xuXG4vLyBBbGlhc2VzXG5FbWl0dGVyLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub247XG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vZmY7XG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBFbWl0dGVyLnByb3RvdHlwZS5vZmY7XG5cbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IEVtaXR0ZXI7XG59XG4iLCAiLyohIEhhbW1lci5KUyAtIHYyLjAuMTctcmMgLSAyMDE5LTEyLTE2XG4gKiBodHRwOi8vbmF2ZXIuZ2l0aHViLmlvL2VnanNcbiAqXG4gKiBGb3JrZWQgQnkgTmF2ZXIgZWdqc1xuICogQ29weXJpZ2h0IChjKSBoYW1tZXJqc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlICovXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGV4dGVuZCBvYmplY3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgaW4gZGVzdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBvbmVzIGluIHNyYy5cbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBvYmplY3RzX3RvX2Fzc2lnblxuICogQHJldHVybnMge09iamVjdH0gdGFyZ2V0XG4gKi9cbnZhciBhc3NpZ247XG5cbmlmICh0eXBlb2YgT2JqZWN0LmFzc2lnbiAhPT0gJ2Z1bmN0aW9uJykge1xuICBhc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0KSB7XG4gICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IHRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IE9iamVjdCh0YXJnZXQpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdO1xuXG4gICAgICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQgJiYgc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIG5leHRLZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuZXh0S2V5KSkge1xuICAgICAgICAgICAgb3V0cHV0W25leHRLZXldID0gc291cmNlW25leHRLZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG59IGVsc2Uge1xuICBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xufVxuXG52YXIgYXNzaWduJDEgPSBhc3NpZ247XG5cbnZhciBWRU5ET1JfUFJFRklYRVMgPSBbJycsICd3ZWJraXQnLCAnTW96JywgJ01TJywgJ21zJywgJ28nXTtcbnZhciBURVNUX0VMRU1FTlQgPSB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyB7XG4gIHN0eWxlOiB7fVxufSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xudmFyIFRZUEVfRlVOQ1RJT04gPSAnZnVuY3Rpb24nO1xudmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICBhYnMgPSBNYXRoLmFicztcbnZhciBub3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBwcmVmaXhlZCBwcm9wZXJ0eVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7U3RyaW5nfFVuZGVmaW5lZH0gcHJlZml4ZWRcbiAqL1xuXG5mdW5jdGlvbiBwcmVmaXhlZChvYmosIHByb3BlcnR5KSB7XG4gIHZhciBwcmVmaXg7XG4gIHZhciBwcm9wO1xuICB2YXIgY2FtZWxQcm9wID0gcHJvcGVydHlbMF0udG9VcHBlckNhc2UoKSArIHByb3BlcnR5LnNsaWNlKDEpO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBWRU5ET1JfUFJFRklYRVMubGVuZ3RoKSB7XG4gICAgcHJlZml4ID0gVkVORE9SX1BSRUZJWEVTW2ldO1xuICAgIHByb3AgPSBwcmVmaXggPyBwcmVmaXggKyBjYW1lbFByb3AgOiBwcm9wZXJ0eTtcblxuICAgIGlmIChwcm9wIGluIG9iaikge1xuICAgICAgcmV0dXJuIHByb3A7XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tbmV3LWZ1bmMsIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG52YXIgd2luO1xuXG5pZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAvLyB3aW5kb3cgaXMgdW5kZWZpbmVkIGluIG5vZGUuanNcbiAgd2luID0ge307XG59IGVsc2Uge1xuICB3aW4gPSB3aW5kb3c7XG59XG5cbnZhciBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gPSBwcmVmaXhlZChURVNUX0VMRU1FTlQuc3R5bGUsICd0b3VjaEFjdGlvbicpO1xudmFyIE5BVElWRV9UT1VDSF9BQ1RJT04gPSBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gIT09IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uUHJvcHMoKSB7XG4gIGlmICghTkFUSVZFX1RPVUNIX0FDVElPTikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0b3VjaE1hcCA9IHt9O1xuICB2YXIgY3NzU3VwcG9ydHMgPSB3aW4uQ1NTICYmIHdpbi5DU1Muc3VwcG9ydHM7XG4gIFsnYXV0bycsICdtYW5pcHVsYXRpb24nLCAncGFuLXknLCAncGFuLXgnLCAncGFuLXggcGFuLXknLCAnbm9uZSddLmZvckVhY2goZnVuY3Rpb24gKHZhbCkge1xuICAgIC8vIElmIGNzcy5zdXBwb3J0cyBpcyBub3Qgc3VwcG9ydGVkIGJ1dCB0aGVyZSBpcyBuYXRpdmUgdG91Y2gtYWN0aW9uIGFzc3VtZSBpdCBzdXBwb3J0c1xuICAgIC8vIGFsbCB2YWx1ZXMuIFRoaXMgaXMgdGhlIGNhc2UgZm9yIElFIDEwIGFuZCAxMS5cbiAgICByZXR1cm4gdG91Y2hNYXBbdmFsXSA9IGNzc1N1cHBvcnRzID8gd2luLkNTUy5zdXBwb3J0cygndG91Y2gtYWN0aW9uJywgdmFsKSA6IHRydWU7XG4gIH0pO1xuICByZXR1cm4gdG91Y2hNYXA7XG59XG5cbnZhciBUT1VDSF9BQ1RJT05fQ09NUFVURSA9ICdjb21wdXRlJztcbnZhciBUT1VDSF9BQ1RJT05fQVVUTyA9ICdhdXRvJztcbnZhciBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OID0gJ21hbmlwdWxhdGlvbic7IC8vIG5vdCBpbXBsZW1lbnRlZFxuXG52YXIgVE9VQ0hfQUNUSU9OX05PTkUgPSAnbm9uZSc7XG52YXIgVE9VQ0hfQUNUSU9OX1BBTl9YID0gJ3Bhbi14JztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1kgPSAncGFuLXknO1xudmFyIFRPVUNIX0FDVElPTl9NQVAgPSBnZXRUb3VjaEFjdGlvblByb3BzKCk7XG5cbnZhciBNT0JJTEVfUkVHRVggPSAvbW9iaWxlfHRhYmxldHxpcChhZHxob25lfG9kKXxhbmRyb2lkL2k7XG52YXIgU1VQUE9SVF9UT1VDSCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbjtcbnZhciBTVVBQT1JUX1BPSU5URVJfRVZFTlRTID0gcHJlZml4ZWQod2luLCAnUG9pbnRlckV2ZW50JykgIT09IHVuZGVmaW5lZDtcbnZhciBTVVBQT1JUX09OTFlfVE9VQ0ggPSBTVVBQT1JUX1RPVUNIICYmIE1PQklMRV9SRUdFWC50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElOUFVUX1RZUEVfVE9VQ0ggPSAndG91Y2gnO1xudmFyIElOUFVUX1RZUEVfUEVOID0gJ3Blbic7XG52YXIgSU5QVVRfVFlQRV9NT1VTRSA9ICdtb3VzZSc7XG52YXIgSU5QVVRfVFlQRV9LSU5FQ1QgPSAna2luZWN0JztcbnZhciBDT01QVVRFX0lOVEVSVkFMID0gMjU7XG52YXIgSU5QVVRfU1RBUlQgPSAxO1xudmFyIElOUFVUX01PVkUgPSAyO1xudmFyIElOUFVUX0VORCA9IDQ7XG52YXIgSU5QVVRfQ0FOQ0VMID0gODtcbnZhciBESVJFQ1RJT05fTk9ORSA9IDE7XG52YXIgRElSRUNUSU9OX0xFRlQgPSAyO1xudmFyIERJUkVDVElPTl9SSUdIVCA9IDQ7XG52YXIgRElSRUNUSU9OX1VQID0gODtcbnZhciBESVJFQ1RJT05fRE9XTiA9IDE2O1xudmFyIERJUkVDVElPTl9IT1JJWk9OVEFMID0gRElSRUNUSU9OX0xFRlQgfCBESVJFQ1RJT05fUklHSFQ7XG52YXIgRElSRUNUSU9OX1ZFUlRJQ0FMID0gRElSRUNUSU9OX1VQIHwgRElSRUNUSU9OX0RPV047XG52YXIgRElSRUNUSU9OX0FMTCA9IERJUkVDVElPTl9IT1JJWk9OVEFMIHwgRElSRUNUSU9OX1ZFUlRJQ0FMO1xudmFyIFBST1BTX1hZID0gWyd4JywgJ3knXTtcbnZhciBQUk9QU19DTElFTlRfWFkgPSBbJ2NsaWVudFgnLCAnY2xpZW50WSddO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3YWxrIG9iamVjdHMgYW5kIGFycmF5c1xuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICB2YXIgaTtcblxuICBpZiAoIW9iaikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChvYmouZm9yRWFjaCkge1xuICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgfSBlbHNlIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgb2JqLmxlbmd0aCkge1xuICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgICBpKys7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgIG9iai5oYXNPd25Qcm9wZXJ0eShpKSAmJiBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogbGV0IGEgYm9vbGVhbiB2YWx1ZSBhbHNvIGJlIGEgZnVuY3Rpb24gdGhhdCBtdXN0IHJldHVybiBhIGJvb2xlYW5cbiAqIHRoaXMgZmlyc3QgaXRlbSBpbiBhcmdzIHdpbGwgYmUgdXNlZCBhcyB0aGUgY29udGV4dFxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSB2YWxcbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdzXVxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cblxuZnVuY3Rpb24gYm9vbE9yRm4odmFsLCBhcmdzKSB7XG4gIGlmICh0eXBlb2YgdmFsID09PSBUWVBFX0ZVTkNUSU9OKSB7XG4gICAgcmV0dXJuIHZhbC5hcHBseShhcmdzID8gYXJnc1swXSB8fCB1bmRlZmluZWQgOiB1bmRlZmluZWQsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc21hbGwgaW5kZXhPZiB3cmFwcGVyXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gZmluZFxuICogQHJldHVybnMge0Jvb2xlYW59IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGluU3RyKHN0ciwgZmluZCkge1xuICByZXR1cm4gc3RyLmluZGV4T2YoZmluZCkgPiAtMTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogd2hlbiB0aGUgdG91Y2hBY3Rpb25zIGFyZSBjb2xsZWN0ZWQgdGhleSBhcmUgbm90IGEgdmFsaWQgdmFsdWUsIHNvIHdlIG5lZWQgdG8gY2xlYW4gdGhpbmdzIHVwLiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWN0aW9uc1xuICogQHJldHVybnMgeyp9XG4gKi9cblxuZnVuY3Rpb24gY2xlYW5Ub3VjaEFjdGlvbnMoYWN0aW9ucykge1xuICAvLyBub25lXG4gIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTk9ORSkpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gIH1cblxuICB2YXIgaGFzUGFuWCA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWCk7XG4gIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKTsgLy8gaWYgYm90aCBwYW4teCBhbmQgcGFuLXkgYXJlIHNldCAoZGlmZmVyZW50IHJlY29nbml6ZXJzXG4gIC8vIGZvciBkaWZmZXJlbnQgZGlyZWN0aW9ucywgZS5nLiBob3Jpem9udGFsIHBhbiBidXQgdmVydGljYWwgc3dpcGU/KVxuICAvLyB3ZSBuZWVkIG5vbmUgKGFzIG90aGVyd2lzZSB3aXRoIHBhbi14IHBhbi15IGNvbWJpbmVkIG5vbmUgb2YgdGhlc2VcbiAgLy8gcmVjb2duaXplcnMgd2lsbCB3b3JrLCBzaW5jZSB0aGUgYnJvd3NlciB3b3VsZCBoYW5kbGUgYWxsIHBhbm5pbmdcblxuICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgcmV0dXJuIFRPVUNIX0FDVElPTl9OT05FO1xuICB9IC8vIHBhbi14IE9SIHBhbi15XG5cblxuICBpZiAoaGFzUGFuWCB8fCBoYXNQYW5ZKSB7XG4gICAgcmV0dXJuIGhhc1BhblggPyBUT1VDSF9BQ1RJT05fUEFOX1ggOiBUT1VDSF9BQ1RJT05fUEFOX1k7XG4gIH0gLy8gbWFuaXB1bGF0aW9uXG5cblxuICBpZiAoaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTikpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTjtcbiAgfVxuXG4gIHJldHVybiBUT1VDSF9BQ1RJT05fQVVUTztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogVG91Y2ggQWN0aW9uXG4gKiBzZXRzIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eSBvciB1c2VzIHRoZSBqcyBhbHRlcm5hdGl2ZVxuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBUb3VjaEFjdGlvbiA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRvdWNoQWN0aW9uKG1hbmFnZXIsIHZhbHVlKSB7XG4gICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICB0aGlzLnNldCh2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWUgb24gdGhlIGVsZW1lbnQgb3IgZW5hYmxlIHRoZSBwb2x5ZmlsbFxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gVG91Y2hBY3Rpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAvLyBmaW5kIG91dCB0aGUgdG91Y2gtYWN0aW9uIGJ5IHRoZSBldmVudCBoYW5kbGVyc1xuICAgIGlmICh2YWx1ZSA9PT0gVE9VQ0hfQUNUSU9OX0NPTVBVVEUpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5jb21wdXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKE5BVElWRV9UT1VDSF9BQ1RJT04gJiYgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGUgJiYgVE9VQ0hfQUNUSU9OX01BUFt2YWx1ZV0pIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbGVtZW50LnN0eWxlW1BSRUZJWEVEX1RPVUNIX0FDVElPTl0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGlvbnMgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGp1c3QgcmUtc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZVxuICAgKi9cblxuXG4gIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgdGhpcy5zZXQodGhpcy5tYW5hZ2VyLm9wdGlvbnMudG91Y2hBY3Rpb24pO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY29tcHV0ZSB0aGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgcmVjb2duaXplcidzIHNldHRpbmdzXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHZhbHVlXG4gICAqL1xuXG5cbiAgX3Byb3RvLmNvbXB1dGUgPSBmdW5jdGlvbiBjb21wdXRlKCkge1xuICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgZWFjaCh0aGlzLm1hbmFnZXIucmVjb2duaXplcnMsIGZ1bmN0aW9uIChyZWNvZ25pemVyKSB7XG4gICAgICBpZiAoYm9vbE9yRm4ocmVjb2duaXplci5vcHRpb25zLmVuYWJsZSwgW3JlY29nbml6ZXJdKSkge1xuICAgICAgICBhY3Rpb25zID0gYWN0aW9ucy5jb25jYXQocmVjb2duaXplci5nZXRUb3VjaEFjdGlvbigpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xlYW5Ub3VjaEFjdGlvbnMoYWN0aW9ucy5qb2luKCcgJykpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGVhY2ggaW5wdXQgY3ljbGUgYW5kIHByb3ZpZGVzIHRoZSBwcmV2ZW50aW5nIG9mIHRoZSBicm93c2VyIGJlaGF2aW9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by5wcmV2ZW50RGVmYXVsdHMgPSBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdHMoaW5wdXQpIHtcbiAgICB2YXIgc3JjRXZlbnQgPSBpbnB1dC5zcmNFdmVudDtcbiAgICB2YXIgZGlyZWN0aW9uID0gaW5wdXQub2Zmc2V0RGlyZWN0aW9uOyAvLyBpZiB0aGUgdG91Y2ggYWN0aW9uIGRpZCBwcmV2ZW50ZWQgb25jZSB0aGlzIHNlc3Npb25cblxuICAgIGlmICh0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQpIHtcbiAgICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgdmFyIGhhc05vbmUgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTk9ORSkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fUEFOX1ldO1xuICAgIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fUEFOX1hdO1xuXG4gICAgaWYgKGhhc05vbmUpIHtcbiAgICAgIC8vIGRvIG5vdCBwcmV2ZW50IGRlZmF1bHRzIGlmIHRoaXMgaXMgYSB0YXAgZ2VzdHVyZVxuICAgICAgdmFyIGlzVGFwUG9pbnRlciA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gMTtcbiAgICAgIHZhciBpc1RhcE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCAyO1xuICAgICAgdmFyIGlzVGFwVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgMjUwO1xuXG4gICAgICBpZiAoaXNUYXBQb2ludGVyICYmIGlzVGFwTW92ZW1lbnQgJiYgaXNUYXBUb3VjaFRpbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICAgIC8vIGBwYW4teCBwYW4teWAgbWVhbnMgYnJvd3NlciBoYW5kbGVzIGFsbCBzY3JvbGxpbmcvcGFubmluZywgZG8gbm90IHByZXZlbnRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaGFzTm9uZSB8fCBoYXNQYW5ZICYmIGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMIHx8IGhhc1BhblggJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmV2ZW50U3JjKHNyY0V2ZW50KTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYWxsIHByZXZlbnREZWZhdWx0IHRvIHByZXZlbnQgdGhlIGJyb3dzZXIncyBkZWZhdWx0IGJlaGF2aW9yIChzY3JvbGxpbmcgaW4gbW9zdCBjYXNlcylcbiAgICogQHBhcmFtIHtPYmplY3R9IHNyY0V2ZW50XG4gICAqL1xuXG5cbiAgX3Byb3RvLnByZXZlbnRTcmMgPSBmdW5jdGlvbiBwcmV2ZW50U3JjKHNyY0V2ZW50KSB7XG4gICAgdGhpcy5tYW5hZ2VyLnNlc3Npb24ucHJldmVudGVkID0gdHJ1ZTtcbiAgICBzcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuXG4gIHJldHVybiBUb3VjaEFjdGlvbjtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZmluZCBpZiBhIG5vZGUgaXMgaW4gdGhlIGdpdmVuIHBhcmVudFxuICogQG1ldGhvZCBoYXNQYXJlbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybiB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaGFzUGFyZW50KG5vZGUsIHBhcmVudCkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlID09PSBwYXJlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgY2VudGVyIG9mIGFsbCB0aGUgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtPYmplY3R9IGNlbnRlciBjb250YWlucyBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzXG4gKi9cblxuZnVuY3Rpb24gZ2V0Q2VudGVyKHBvaW50ZXJzKSB7XG4gIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDsgLy8gbm8gbmVlZCB0byBsb29wIHdoZW4gb25seSBvbmUgdG91Y2hcblxuICBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcm91bmQocG9pbnRlcnNbMF0uY2xpZW50WCksXG4gICAgICB5OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRZKVxuICAgIH07XG4gIH1cblxuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgcG9pbnRlcnNMZW5ndGgpIHtcbiAgICB4ICs9IHBvaW50ZXJzW2ldLmNsaWVudFg7XG4gICAgeSArPSBwb2ludGVyc1tpXS5jbGllbnRZO1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAvIHBvaW50ZXJzTGVuZ3RoKSxcbiAgICB5OiByb3VuZCh5IC8gcG9pbnRlcnNMZW5ndGgpXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBhIHNpbXBsZSBjbG9uZSBmcm9tIHRoZSBpbnB1dCB1c2VkIGZvciBzdG9yYWdlIG9mIGZpcnN0SW5wdXQgYW5kIGZpcnN0TXVsdGlwbGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICogQHJldHVybnMge09iamVjdH0gY2xvbmVkSW5wdXREYXRhXG4gKi9cblxuZnVuY3Rpb24gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpIHtcbiAgLy8gbWFrZSBhIHNpbXBsZSBjb3B5IG9mIHRoZSBwb2ludGVycyBiZWNhdXNlIHdlIHdpbGwgZ2V0IGEgcmVmZXJlbmNlIGlmIHdlIGRvbid0XG4gIC8vIHdlIG9ubHkgbmVlZCBjbGllbnRYWSBmb3IgdGhlIGNhbGN1bGF0aW9uc1xuICB2YXIgcG9pbnRlcnMgPSBbXTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgaW5wdXQucG9pbnRlcnMubGVuZ3RoKSB7XG4gICAgcG9pbnRlcnNbaV0gPSB7XG4gICAgICBjbGllbnRYOiByb3VuZChpbnB1dC5wb2ludGVyc1tpXS5jbGllbnRYKSxcbiAgICAgIGNsaWVudFk6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFkpXG4gICAgfTtcbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRpbWVTdGFtcDogbm93KCksXG4gICAgcG9pbnRlcnM6IHBvaW50ZXJzLFxuICAgIGNlbnRlcjogZ2V0Q2VudGVyKHBvaW50ZXJzKSxcbiAgICBkZWx0YVg6IGlucHV0LmRlbHRhWCxcbiAgICBkZWx0YVk6IGlucHV0LmRlbHRhWVxuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIGFic29sdXRlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtPYmplY3R9IHAxIHt4LCB5fVxuICogQHBhcmFtIHtPYmplY3R9IHAyIHt4LCB5fVxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICovXG5cbmZ1bmN0aW9uIGdldERpc3RhbmNlKHAxLCBwMiwgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHByb3BzID0gUFJPUFNfWFk7XG4gIH1cblxuICB2YXIgeCA9IHAyW3Byb3BzWzBdXSAtIHAxW3Byb3BzWzBdXTtcbiAgdmFyIHkgPSBwMltwcm9wc1sxXV0gLSBwMVtwcm9wc1sxXV07XG4gIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgYW5nbGUgYmV0d2VlbiB0d28gY29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMVxuICogQHBhcmFtIHtPYmplY3R9IHAyXG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGFuZ2xlXG4gKi9cblxuZnVuY3Rpb24gZ2V0QW5nbGUocDEsIHAyLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgfVxuXG4gIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dO1xuICB2YXIgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgcmV0dXJuIE1hdGguYXRhbjIoeSwgeCkgKiAxODAgLyBNYXRoLlBJO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIGRpcmVjdGlvbiBiZXR3ZWVuIHR3byBwb2ludHNcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7TnVtYmVyfSBkaXJlY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBnZXREaXJlY3Rpb24oeCwgeSkge1xuICBpZiAoeCA9PT0geSkge1xuICAgIHJldHVybiBESVJFQ1RJT05fTk9ORTtcbiAgfVxuXG4gIGlmIChhYnMoeCkgPj0gYWJzKHkpKSB7XG4gICAgcmV0dXJuIHggPCAwID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFQ7XG4gIH1cblxuICByZXR1cm4geSA8IDAgPyBESVJFQ1RJT05fVVAgOiBESVJFQ1RJT05fRE9XTjtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZURlbHRhWFkoc2Vzc2lvbiwgaW5wdXQpIHtcbiAgdmFyIGNlbnRlciA9IGlucHV0LmNlbnRlcjsgLy8gbGV0IHsgb2Zmc2V0RGVsdGE6b2Zmc2V0ID0ge30sIHByZXZEZWx0YSA9IHt9LCBwcmV2SW5wdXQgPSB7fSB9ID0gc2Vzc2lvbjtcbiAgLy8ganNjcyB0aHJvd2luZyBlcnJvciBvbiBkZWZhbHV0IGRlc3RydWN0dXJlZCB2YWx1ZXMgYW5kIHdpdGhvdXQgZGVmYXVsdHMgdGVzdHMgZmFpbFxuXG4gIHZhciBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhIHx8IHt9O1xuICB2YXIgcHJldkRlbHRhID0gc2Vzc2lvbi5wcmV2RGVsdGEgfHwge307XG4gIHZhciBwcmV2SW5wdXQgPSBzZXNzaW9uLnByZXZJbnB1dCB8fCB7fTtcblxuICBpZiAoaW5wdXQuZXZlbnRUeXBlID09PSBJTlBVVF9TVEFSVCB8fCBwcmV2SW5wdXQuZXZlbnRUeXBlID09PSBJTlBVVF9FTkQpIHtcbiAgICBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSA9IHtcbiAgICAgIHg6IHByZXZJbnB1dC5kZWx0YVggfHwgMCxcbiAgICAgIHk6IHByZXZJbnB1dC5kZWx0YVkgfHwgMFxuICAgIH07XG4gICAgb2Zmc2V0ID0gc2Vzc2lvbi5vZmZzZXREZWx0YSA9IHtcbiAgICAgIHg6IGNlbnRlci54LFxuICAgICAgeTogY2VudGVyLnlcbiAgICB9O1xuICB9XG5cbiAgaW5wdXQuZGVsdGFYID0gcHJldkRlbHRhLnggKyAoY2VudGVyLnggLSBvZmZzZXQueCk7XG4gIGlucHV0LmRlbHRhWSA9IHByZXZEZWx0YS55ICsgKGNlbnRlci55IC0gb2Zmc2V0LnkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIHZlbG9jaXR5IGJldHdlZW4gdHdvIHBvaW50cy4gdW5pdCBpcyBpbiBweCBwZXIgbXMuXG4gKiBAcGFyYW0ge051bWJlcn0gZGVsdGFUaW1lXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge09iamVjdH0gdmVsb2NpdHkgYHhgIGFuZCBgeWBcbiAqL1xuZnVuY3Rpb24gZ2V0VmVsb2NpdHkoZGVsdGFUaW1lLCB4LCB5KSB7XG4gIHJldHVybiB7XG4gICAgeDogeCAvIGRlbHRhVGltZSB8fCAwLFxuICAgIHk6IHkgLyBkZWx0YVRpbWUgfHwgMFxuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIHNjYWxlIGZhY3RvciBiZXR3ZWVuIHR3byBwb2ludGVyc2V0c1xuICogbm8gc2NhbGUgaXMgMSwgYW5kIGdvZXMgZG93biB0byAwIHdoZW4gcGluY2hlZCB0b2dldGhlciwgYW5kIGJpZ2dlciB3aGVuIHBpbmNoZWQgb3V0XG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHNjYWxlXG4gKi9cblxuZnVuY3Rpb24gZ2V0U2NhbGUoc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZ2V0RGlzdGFuY2UoZW5kWzBdLCBlbmRbMV0sIFBST1BTX0NMSUVOVF9YWSkgLyBnZXREaXN0YW5jZShzdGFydFswXSwgc3RhcnRbMV0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgcm90YXRpb24gZGVncmVlcyBiZXR3ZWVuIHR3byBwb2ludGVyc2V0c1xuICogQHBhcmFtIHtBcnJheX0gc3RhcnQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IGVuZCBhcnJheSBvZiBwb2ludGVyc1xuICogQHJldHVybiB7TnVtYmVyfSByb3RhdGlvblxuICovXG5cbmZ1bmN0aW9uIGdldFJvdGF0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGdldEFuZ2xlKGVuZFsxXSwgZW5kWzBdLCBQUk9QU19DTElFTlRfWFkpICsgZ2V0QW5nbGUoc3RhcnRbMV0sIHN0YXJ0WzBdLCBQUk9QU19DTElFTlRfWFkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB2ZWxvY2l0eSBpcyBjYWxjdWxhdGVkIGV2ZXJ5IHggbXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXNzaW9uXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuXG5mdW5jdGlvbiBjb21wdXRlSW50ZXJ2YWxJbnB1dERhdGEoc2Vzc2lvbiwgaW5wdXQpIHtcbiAgdmFyIGxhc3QgPSBzZXNzaW9uLmxhc3RJbnRlcnZhbCB8fCBpbnB1dDtcbiAgdmFyIGRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGxhc3QudGltZVN0YW1wO1xuICB2YXIgdmVsb2NpdHk7XG4gIHZhciB2ZWxvY2l0eVg7XG4gIHZhciB2ZWxvY2l0eVk7XG4gIHZhciBkaXJlY3Rpb247XG5cbiAgaWYgKGlucHV0LmV2ZW50VHlwZSAhPT0gSU5QVVRfQ0FOQ0VMICYmIChkZWx0YVRpbWUgPiBDT01QVVRFX0lOVEVSVkFMIHx8IGxhc3QudmVsb2NpdHkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICB2YXIgZGVsdGFYID0gaW5wdXQuZGVsdGFYIC0gbGFzdC5kZWx0YVg7XG4gICAgdmFyIGRlbHRhWSA9IGlucHV0LmRlbHRhWSAtIGxhc3QuZGVsdGFZO1xuICAgIHZhciB2ID0gZ2V0VmVsb2NpdHkoZGVsdGFUaW1lLCBkZWx0YVgsIGRlbHRhWSk7XG4gICAgdmVsb2NpdHlYID0gdi54O1xuICAgIHZlbG9jaXR5WSA9IHYueTtcbiAgICB2ZWxvY2l0eSA9IGFicyh2LngpID4gYWJzKHYueSkgPyB2LnggOiB2Lnk7XG4gICAgZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGRlbHRhWCwgZGVsdGFZKTtcbiAgICBzZXNzaW9uLmxhc3RJbnRlcnZhbCA9IGlucHV0O1xuICB9IGVsc2Uge1xuICAgIC8vIHVzZSBsYXRlc3QgdmVsb2NpdHkgaW5mbyBpZiBpdCBkb2Vzbid0IG92ZXJ0YWtlIGEgbWluaW11bSBwZXJpb2RcbiAgICB2ZWxvY2l0eSA9IGxhc3QudmVsb2NpdHk7XG4gICAgdmVsb2NpdHlYID0gbGFzdC52ZWxvY2l0eVg7XG4gICAgdmVsb2NpdHlZID0gbGFzdC52ZWxvY2l0eVk7XG4gICAgZGlyZWN0aW9uID0gbGFzdC5kaXJlY3Rpb247XG4gIH1cblxuICBpbnB1dC52ZWxvY2l0eSA9IHZlbG9jaXR5O1xuICBpbnB1dC52ZWxvY2l0eVggPSB2ZWxvY2l0eVg7XG4gIGlucHV0LnZlbG9jaXR5WSA9IHZlbG9jaXR5WTtcbiAgaW5wdXQuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xufVxuXG4vKipcbiogQHByaXZhdGVcbiAqIGV4dGVuZCB0aGUgZGF0YSB3aXRoIHNvbWUgdXNhYmxlIHByb3BlcnRpZXMgbGlrZSBzY2FsZSwgcm90YXRlLCB2ZWxvY2l0eSBldGNcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYW5hZ2VyXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuXG5mdW5jdGlvbiBjb21wdXRlSW5wdXREYXRhKG1hbmFnZXIsIGlucHV0KSB7XG4gIHZhciBzZXNzaW9uID0gbWFuYWdlci5zZXNzaW9uO1xuICB2YXIgcG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycztcbiAgdmFyIHBvaW50ZXJzTGVuZ3RoID0gcG9pbnRlcnMubGVuZ3RoOyAvLyBzdG9yZSB0aGUgZmlyc3QgaW5wdXQgdG8gY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBhbmQgZGlyZWN0aW9uXG5cbiAgaWYgKCFzZXNzaW9uLmZpcnN0SW5wdXQpIHtcbiAgICBzZXNzaW9uLmZpcnN0SW5wdXQgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gIH0gLy8gdG8gY29tcHV0ZSBzY2FsZSBhbmQgcm90YXRpb24gd2UgbmVlZCB0byBzdG9yZSB0aGUgbXVsdGlwbGUgdG91Y2hlc1xuXG5cbiAgaWYgKHBvaW50ZXJzTGVuZ3RoID4gMSAmJiAhc2Vzc2lvbi5maXJzdE11bHRpcGxlKSB7XG4gICAgc2Vzc2lvbi5maXJzdE11bHRpcGxlID0gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpO1xuICB9IGVsc2UgaWYgKHBvaW50ZXJzTGVuZ3RoID09PSAxKSB7XG4gICAgc2Vzc2lvbi5maXJzdE11bHRpcGxlID0gZmFsc2U7XG4gIH1cblxuICB2YXIgZmlyc3RJbnB1dCA9IHNlc3Npb24uZmlyc3RJbnB1dCxcbiAgICAgIGZpcnN0TXVsdGlwbGUgPSBzZXNzaW9uLmZpcnN0TXVsdGlwbGU7XG4gIHZhciBvZmZzZXRDZW50ZXIgPSBmaXJzdE11bHRpcGxlID8gZmlyc3RNdWx0aXBsZS5jZW50ZXIgOiBmaXJzdElucHV0LmNlbnRlcjtcbiAgdmFyIGNlbnRlciA9IGlucHV0LmNlbnRlciA9IGdldENlbnRlcihwb2ludGVycyk7XG4gIGlucHV0LnRpbWVTdGFtcCA9IG5vdygpO1xuICBpbnB1dC5kZWx0YVRpbWUgPSBpbnB1dC50aW1lU3RhbXAgLSBmaXJzdElucHV0LnRpbWVTdGFtcDtcbiAgaW5wdXQuYW5nbGUgPSBnZXRBbmdsZShvZmZzZXRDZW50ZXIsIGNlbnRlcik7XG4gIGlucHV0LmRpc3RhbmNlID0gZ2V0RGlzdGFuY2Uob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCk7XG4gIGlucHV0Lm9mZnNldERpcmVjdGlvbiA9IGdldERpcmVjdGlvbihpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG4gIHZhciBvdmVyYWxsVmVsb2NpdHkgPSBnZXRWZWxvY2l0eShpbnB1dC5kZWx0YVRpbWUsIGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5WCA9IG92ZXJhbGxWZWxvY2l0eS54O1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlZID0gb3ZlcmFsbFZlbG9jaXR5Lnk7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eSA9IGFicyhvdmVyYWxsVmVsb2NpdHkueCkgPiBhYnMob3ZlcmFsbFZlbG9jaXR5LnkpID8gb3ZlcmFsbFZlbG9jaXR5LnggOiBvdmVyYWxsVmVsb2NpdHkueTtcbiAgaW5wdXQuc2NhbGUgPSBmaXJzdE11bHRpcGxlID8gZ2V0U2NhbGUoZmlyc3RNdWx0aXBsZS5wb2ludGVycywgcG9pbnRlcnMpIDogMTtcbiAgaW5wdXQucm90YXRpb24gPSBmaXJzdE11bHRpcGxlID8gZ2V0Um90YXRpb24oZmlyc3RNdWx0aXBsZS5wb2ludGVycywgcG9pbnRlcnMpIDogMDtcbiAgaW5wdXQubWF4UG9pbnRlcnMgPSAhc2Vzc2lvbi5wcmV2SW5wdXQgPyBpbnB1dC5wb2ludGVycy5sZW5ndGggOiBpbnB1dC5wb2ludGVycy5sZW5ndGggPiBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycyA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzO1xuICBjb21wdXRlSW50ZXJ2YWxJbnB1dERhdGEoc2Vzc2lvbiwgaW5wdXQpOyAvLyBmaW5kIHRoZSBjb3JyZWN0IHRhcmdldFxuXG4gIHZhciB0YXJnZXQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG4gIHZhciBzcmNFdmVudCA9IGlucHV0LnNyY0V2ZW50O1xuICB2YXIgc3JjRXZlbnRUYXJnZXQ7XG5cbiAgaWYgKHNyY0V2ZW50LmNvbXBvc2VkUGF0aCkge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQuY29tcG9zZWRQYXRoKClbMF07XG4gIH0gZWxzZSBpZiAoc3JjRXZlbnQucGF0aCkge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQucGF0aFswXTtcbiAgfSBlbHNlIHtcbiAgICBzcmNFdmVudFRhcmdldCA9IHNyY0V2ZW50LnRhcmdldDtcbiAgfVxuXG4gIGlmIChoYXNQYXJlbnQoc3JjRXZlbnRUYXJnZXQsIHRhcmdldCkpIHtcbiAgICB0YXJnZXQgPSBzcmNFdmVudFRhcmdldDtcbiAgfVxuXG4gIGlucHV0LnRhcmdldCA9IHRhcmdldDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogaGFuZGxlIGlucHV0IGV2ZW50c1xuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRUeXBlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuXG5mdW5jdGlvbiBpbnB1dEhhbmRsZXIobWFuYWdlciwgZXZlbnRUeXBlLCBpbnB1dCkge1xuICB2YXIgcG9pbnRlcnNMZW4gPSBpbnB1dC5wb2ludGVycy5sZW5ndGg7XG4gIHZhciBjaGFuZ2VkUG9pbnRlcnNMZW4gPSBpbnB1dC5jaGFuZ2VkUG9pbnRlcnMubGVuZ3RoO1xuICB2YXIgaXNGaXJzdCA9IGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIHBvaW50ZXJzTGVuIC0gY2hhbmdlZFBvaW50ZXJzTGVuID09PSAwO1xuICB2YXIgaXNGaW5hbCA9IGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIHBvaW50ZXJzTGVuIC0gY2hhbmdlZFBvaW50ZXJzTGVuID09PSAwO1xuICBpbnB1dC5pc0ZpcnN0ID0gISFpc0ZpcnN0O1xuICBpbnB1dC5pc0ZpbmFsID0gISFpc0ZpbmFsO1xuXG4gIGlmIChpc0ZpcnN0KSB7XG4gICAgbWFuYWdlci5zZXNzaW9uID0ge307XG4gIH0gLy8gc291cmNlIGV2ZW50IGlzIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIHRoZSBkb21FdmVudHNcbiAgLy8gbGlrZSAndG91Y2hzdGFydCwgbW91c2V1cCwgcG9pbnRlcmRvd24nXG5cblxuICBpbnB1dC5ldmVudFR5cGUgPSBldmVudFR5cGU7IC8vIGNvbXB1dGUgc2NhbGUsIHJvdGF0aW9uIGV0Y1xuXG4gIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpOyAvLyBlbWl0IHNlY3JldCBldmVudFxuXG4gIG1hbmFnZXIuZW1pdCgnaGFtbWVyLmlucHV0JywgaW5wdXQpO1xuICBtYW5hZ2VyLnJlY29nbml6ZShpbnB1dCk7XG4gIG1hbmFnZXIuc2Vzc2lvbi5wcmV2SW5wdXQgPSBpbnB1dDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc3BsaXQgc3RyaW5nIG9uIHdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtBcnJheX0gd29yZHNcbiAqL1xuZnVuY3Rpb24gc3BsaXRTdHIoc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSgpLnNwbGl0KC9cXHMrL2cpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBhZGRFdmVudExpc3RlbmVyIHdpdGggbXVsdGlwbGUgZXZlbnRzIGF0IG9uY2VcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gKi9cblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcnModGFyZ2V0LCB0eXBlcywgaGFuZGxlcikge1xuICBlYWNoKHNwbGl0U3RyKHR5cGVzKSwgZnVuY3Rpb24gKHR5cGUpIHtcbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiByZW1vdmVFdmVudExpc3RlbmVyIHdpdGggbXVsdGlwbGUgZXZlbnRzIGF0IG9uY2VcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gKi9cblxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGFyZ2V0LCB0eXBlcywgaGFuZGxlcikge1xuICBlYWNoKHNwbGl0U3RyKHR5cGVzKSwgZnVuY3Rpb24gKHR5cGUpIHtcbiAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIHdpbmRvdyBvYmplY3Qgb2YgYW4gZWxlbWVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0RvY3VtZW50Vmlld3xXaW5kb3d9XG4gKi9cbmZ1bmN0aW9uIGdldFdpbmRvd0ZvckVsZW1lbnQoZWxlbWVudCkge1xuICB2YXIgZG9jID0gZWxlbWVudC5vd25lckRvY3VtZW50IHx8IGVsZW1lbnQ7XG4gIHJldHVybiBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdyB8fCB3aW5kb3c7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG52YXIgSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBJbnB1dChtYW5hZ2VyLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLmVsZW1lbnQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG4gICAgdGhpcy50YXJnZXQgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRUYXJnZXQ7IC8vIHNtYWxsZXIgd3JhcHBlciBhcm91bmQgdGhlIGhhbmRsZXIsIGZvciB0aGUgc2NvcGUgYW5kIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLFxuICAgIC8vIHNvIHdoZW4gZGlzYWJsZWQgdGhlIGlucHV0IGV2ZW50cyBhcmUgY29tcGxldGVseSBieXBhc3NlZC5cblxuICAgIHRoaXMuZG9tSGFuZGxlciA9IGZ1bmN0aW9uIChldikge1xuICAgICAgaWYgKGJvb2xPckZuKG1hbmFnZXIub3B0aW9ucy5lbmFibGUsIFttYW5hZ2VyXSkpIHtcbiAgICAgICAgc2VsZi5oYW5kbGVyKGV2KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5pbml0KCk7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNob3VsZCBoYW5kbGUgdGhlIGlucHV0RXZlbnQgZGF0YSBhbmQgdHJpZ2dlciB0aGUgY2FsbGJhY2tcbiAgICogQHZpcnR1YWxcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcigpIHt9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogYmluZCB0aGUgZXZlbnRzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmluaXQgPSBmdW5jdGlvbiBpbml0KCkge1xuICAgIHRoaXMuZXZFbCAmJiBhZGRFdmVudExpc3RlbmVycyh0aGlzLmVsZW1lbnQsIHRoaXMuZXZFbCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2VGFyZ2V0ICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMudGFyZ2V0LCB0aGlzLmV2VGFyZ2V0LCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZXaW4gJiYgYWRkRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogdW5iaW5kIHRoZSBldmVudHNcbiAgICovXG5cblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ldkVsICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZUYXJnZXQgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldldpbiAmJiByZW1vdmVFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gIH07XG5cbiAgcmV0dXJuIElucHV0O1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBmaW5kIGlmIGEgYXJyYXkgY29udGFpbnMgdGhlIG9iamVjdCB1c2luZyBpbmRleE9mIG9yIGEgc2ltcGxlIHBvbHlGaWxsXG4gKiBAcGFyYW0ge0FycmF5fSBzcmNcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcGFyYW0ge1N0cmluZ30gW2ZpbmRCeUtleV1cbiAqIEByZXR1cm4ge0Jvb2xlYW58TnVtYmVyfSBmYWxzZSB3aGVuIG5vdCBmb3VuZCwgb3IgdGhlIGluZGV4XG4gKi9cbmZ1bmN0aW9uIGluQXJyYXkoc3JjLCBmaW5kLCBmaW5kQnlLZXkpIHtcbiAgaWYgKHNyYy5pbmRleE9mICYmICFmaW5kQnlLZXkpIHtcbiAgICByZXR1cm4gc3JjLmluZGV4T2YoZmluZCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgICBpZiAoZmluZEJ5S2V5ICYmIHNyY1tpXVtmaW5kQnlLZXldID09IGZpbmQgfHwgIWZpbmRCeUtleSAmJiBzcmNbaV0gPT09IGZpbmQpIHtcbiAgICAgICAgLy8gZG8gbm90IHVzZSA9PT0gaGVyZSwgdGVzdCBmYWlsc1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiAtMTtcbiAgfVxufVxuXG52YXIgUE9JTlRFUl9JTlBVVF9NQVAgPSB7XG4gIHBvaW50ZXJkb3duOiBJTlBVVF9TVEFSVCxcbiAgcG9pbnRlcm1vdmU6IElOUFVUX01PVkUsXG4gIHBvaW50ZXJ1cDogSU5QVVRfRU5ELFxuICBwb2ludGVyY2FuY2VsOiBJTlBVVF9DQU5DRUwsXG4gIHBvaW50ZXJvdXQ6IElOUFVUX0NBTkNFTFxufTsgLy8gaW4gSUUxMCB0aGUgcG9pbnRlciB0eXBlcyBpcyBkZWZpbmVkIGFzIGFuIGVudW1cblxudmFyIElFMTBfUE9JTlRFUl9UWVBFX0VOVU0gPSB7XG4gIDI6IElOUFVUX1RZUEVfVE9VQ0gsXG4gIDM6IElOUFVUX1RZUEVfUEVOLFxuICA0OiBJTlBVVF9UWVBFX01PVVNFLFxuICA1OiBJTlBVVF9UWVBFX0tJTkVDVCAvLyBzZWUgaHR0cHM6Ly90d2l0dGVyLmNvbS9qYWNvYnJvc3NpL3N0YXR1cy80ODA1OTY0Mzg0ODk4OTA4MTZcblxufTtcbnZhciBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ3BvaW50ZXJkb3duJztcbnZhciBQT0lOVEVSX1dJTkRPV19FVkVOVFMgPSAncG9pbnRlcm1vdmUgcG9pbnRlcnVwIHBvaW50ZXJjYW5jZWwnOyAvLyBJRTEwIGhhcyBwcmVmaXhlZCBzdXBwb3J0LCBhbmQgY2FzZS1zZW5zaXRpdmVcblxuaWYgKHdpbi5NU1BvaW50ZXJFdmVudCAmJiAhd2luLlBvaW50ZXJFdmVudCkge1xuICBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ01TUG9pbnRlckRvd24nO1xuICBQT0lOVEVSX1dJTkRPV19FVkVOVFMgPSAnTVNQb2ludGVyTW92ZSBNU1BvaW50ZXJVcCBNU1BvaW50ZXJDYW5jZWwnO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUG9pbnRlciBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG5cbnZhciBQb2ludGVyRXZlbnRJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKFBvaW50ZXJFdmVudElucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIFBvaW50ZXJFdmVudElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IFBvaW50ZXJFdmVudElucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldkVsID0gUE9JTlRFUl9FTEVNRU5UX0VWRU5UUztcbiAgICBwcm90by5ldldpbiA9IFBPSU5URVJfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RvcmUgPSBfdGhpcy5tYW5hZ2VyLnNlc3Npb24ucG9pbnRlckV2ZW50cyA9IFtdO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaGFuZGxlIG1vdXNlIGV2ZW50c1xuICAgKiBAcGFyYW0ge09iamVjdH0gZXZcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciBzdG9yZSA9IHRoaXMuc3RvcmU7XG4gICAgdmFyIHJlbW92ZVBvaW50ZXIgPSBmYWxzZTtcbiAgICB2YXIgZXZlbnRUeXBlTm9ybWFsaXplZCA9IGV2LnR5cGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdtcycsICcnKTtcbiAgICB2YXIgZXZlbnRUeXBlID0gUE9JTlRFUl9JTlBVVF9NQVBbZXZlbnRUeXBlTm9ybWFsaXplZF07XG4gICAgdmFyIHBvaW50ZXJUeXBlID0gSUUxMF9QT0lOVEVSX1RZUEVfRU5VTVtldi5wb2ludGVyVHlwZV0gfHwgZXYucG9pbnRlclR5cGU7XG4gICAgdmFyIGlzVG91Y2ggPSBwb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9UT1VDSDsgLy8gZ2V0IGluZGV4IG9mIHRoZSBldmVudCBpbiB0aGUgc3RvcmVcblxuICAgIHZhciBzdG9yZUluZGV4ID0gaW5BcnJheShzdG9yZSwgZXYucG9pbnRlcklkLCAncG9pbnRlcklkJyk7IC8vIHN0YXJ0IGFuZCBtb3VzZSBtdXN0IGJlIGRvd25cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiAoZXYuYnV0dG9uID09PSAwIHx8IGlzVG91Y2gpKSB7XG4gICAgICBpZiAoc3RvcmVJbmRleCA8IDApIHtcbiAgICAgICAgc3RvcmUucHVzaChldik7XG4gICAgICAgIHN0b3JlSW5kZXggPSBzdG9yZS5sZW5ndGggLSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICAgIHJlbW92ZVBvaW50ZXIgPSB0cnVlO1xuICAgIH0gLy8gaXQgbm90IGZvdW5kLCBzbyB0aGUgcG9pbnRlciBoYXNuJ3QgYmVlbiBkb3duIChzbyBpdCdzIHByb2JhYmx5IGEgaG92ZXIpXG5cblxuICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gdXBkYXRlIHRoZSBldmVudCBpbiB0aGUgc3RvcmVcblxuXG4gICAgc3RvcmVbc3RvcmVJbmRleF0gPSBldjtcbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgZXZlbnRUeXBlLCB7XG4gICAgICBwb2ludGVyczogc3RvcmUsXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IFtldl0sXG4gICAgICBwb2ludGVyVHlwZTogcG9pbnRlclR5cGUsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcblxuICAgIGlmIChyZW1vdmVQb2ludGVyKSB7XG4gICAgICAvLyByZW1vdmUgZnJvbSB0aGUgc3RvcmVcbiAgICAgIHN0b3JlLnNwbGljZShzdG9yZUluZGV4LCAxKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBvaW50ZXJFdmVudElucHV0O1xufShJbnB1dCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNvbnZlcnQgYXJyYXktbGlrZSBvYmplY3RzIHRvIHJlYWwgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmosIDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB1bmlxdWUgYXJyYXkgd2l0aCBvYmplY3RzIGJhc2VkIG9uIGEga2V5IChsaWtlICdpZCcpIG9yIGp1c3QgYnkgdGhlIGFycmF5J3MgdmFsdWVcbiAqIEBwYXJhbSB7QXJyYXl9IHNyYyBbe2lkOjF9LHtpZDoyfSx7aWQ6MX1dXG4gKiBAcGFyYW0ge1N0cmluZ30gW2tleV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3NvcnQ9RmFsc2VdXG4gKiBAcmV0dXJucyB7QXJyYXl9IFt7aWQ6MX0se2lkOjJ9XVxuICovXG5cbmZ1bmN0aW9uIHVuaXF1ZUFycmF5KHNyYywga2V5LCBzb3J0KSB7XG4gIHZhciByZXN1bHRzID0gW107XG4gIHZhciB2YWx1ZXMgPSBbXTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgIHZhciB2YWwgPSBrZXkgPyBzcmNbaV1ba2V5XSA6IHNyY1tpXTtcblxuICAgIGlmIChpbkFycmF5KHZhbHVlcywgdmFsKSA8IDApIHtcbiAgICAgIHJlc3VsdHMucHVzaChzcmNbaV0pO1xuICAgIH1cblxuICAgIHZhbHVlc1tpXSA9IHZhbDtcbiAgICBpKys7XG4gIH1cblxuICBpZiAoc29ydCkge1xuICAgIGlmICgha2V5KSB7XG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGFba2V5XSA+IGJba2V5XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG52YXIgVE9VQ0hfSU5QVVRfTUFQID0ge1xuICB0b3VjaHN0YXJ0OiBJTlBVVF9TVEFSVCxcbiAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICB0b3VjaGNhbmNlbDogSU5QVVRfQ0FOQ0VMXG59O1xudmFyIFRPVUNIX1RBUkdFVF9FVkVOVFMgPSAndG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogTXVsdGktdXNlciB0b3VjaCBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgVG91Y2hJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRvdWNoSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gVG91Y2hJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBUb3VjaElucHV0LnByb3RvdHlwZS5ldlRhcmdldCA9IFRPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnRhcmdldElkcyA9IHt9OyAvLyB0aGlzLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUb3VjaElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgdHlwZSA9IFRPVUNIX0lOUFVUX01BUFtldi50eXBlXTtcbiAgICB2YXIgdG91Y2hlcyA9IGdldFRvdWNoZXMuY2FsbCh0aGlzLCBldiwgdHlwZSk7XG5cbiAgICBpZiAoIXRvdWNoZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBUb3VjaElucHV0O1xufShJbnB1dCk7XG5cbmZ1bmN0aW9uIGdldFRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgdmFyIGFsbFRvdWNoZXMgPSB0b0FycmF5KGV2LnRvdWNoZXMpO1xuICB2YXIgdGFyZ2V0SWRzID0gdGhpcy50YXJnZXRJZHM7IC8vIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgdG91Y2gsIHRoZSBwcm9jZXNzIGNhbiBiZSBzaW1wbGlmaWVkXG5cbiAgaWYgKHR5cGUgJiAoSU5QVVRfU1RBUlQgfCBJTlBVVF9NT1ZFKSAmJiBhbGxUb3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgIHRhcmdldElkc1thbGxUb3VjaGVzWzBdLmlkZW50aWZpZXJdID0gdHJ1ZTtcbiAgICByZXR1cm4gW2FsbFRvdWNoZXMsIGFsbFRvdWNoZXNdO1xuICB9XG5cbiAgdmFyIGk7XG4gIHZhciB0YXJnZXRUb3VjaGVzO1xuICB2YXIgY2hhbmdlZFRvdWNoZXMgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKTtcbiAgdmFyIGNoYW5nZWRUYXJnZXRUb3VjaGVzID0gW107XG4gIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDsgLy8gZ2V0IHRhcmdldCB0b3VjaGVzIGZyb20gdG91Y2hlc1xuXG4gIHRhcmdldFRvdWNoZXMgPSBhbGxUb3VjaGVzLmZpbHRlcihmdW5jdGlvbiAodG91Y2gpIHtcbiAgICByZXR1cm4gaGFzUGFyZW50KHRvdWNoLnRhcmdldCwgdGFyZ2V0KTtcbiAgfSk7IC8vIGNvbGxlY3QgdG91Y2hlc1xuXG4gIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCB0YXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgdGFyZ2V0SWRzW3RhcmdldFRvdWNoZXNbaV0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgICAgaSsrO1xuICAgIH1cbiAgfSAvLyBmaWx0ZXIgY2hhbmdlZCB0b3VjaGVzIHRvIG9ubHkgY29udGFpbiB0b3VjaGVzIHRoYXQgZXhpc3QgaW4gdGhlIGNvbGxlY3RlZCB0YXJnZXQgaWRzXG5cblxuICBpID0gMDtcblxuICB3aGlsZSAoaSA8IGNoYW5nZWRUb3VjaGVzLmxlbmd0aCkge1xuICAgIGlmICh0YXJnZXRJZHNbY2hhbmdlZFRvdWNoZXNbaV0uaWRlbnRpZmllcl0pIHtcbiAgICAgIGNoYW5nZWRUYXJnZXRUb3VjaGVzLnB1c2goY2hhbmdlZFRvdWNoZXNbaV0pO1xuICAgIH0gLy8gY2xlYW51cCByZW1vdmVkIHRvdWNoZXNcblxuXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgZGVsZXRlIHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXTtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICBpZiAoIWNoYW5nZWRUYXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBbLy8gbWVyZ2UgdGFyZ2V0VG91Y2hlcyB3aXRoIGNoYW5nZWRUYXJnZXRUb3VjaGVzIHNvIGl0IGNvbnRhaW5zIEFMTCB0b3VjaGVzLCBpbmNsdWRpbmcgJ2VuZCcgYW5kICdjYW5jZWwnXG4gIHVuaXF1ZUFycmF5KHRhcmdldFRvdWNoZXMuY29uY2F0KGNoYW5nZWRUYXJnZXRUb3VjaGVzKSwgJ2lkZW50aWZpZXInLCB0cnVlKSwgY2hhbmdlZFRhcmdldFRvdWNoZXNdO1xufVxuXG52YXIgTU9VU0VfSU5QVVRfTUFQID0ge1xuICBtb3VzZWRvd246IElOUFVUX1NUQVJULFxuICBtb3VzZW1vdmU6IElOUFVUX01PVkUsXG4gIG1vdXNldXA6IElOUFVUX0VORFxufTtcbnZhciBNT1VTRV9FTEVNRU5UX0VWRU5UUyA9ICdtb3VzZWRvd24nO1xudmFyIE1PVVNFX1dJTkRPV19FVkVOVFMgPSAnbW91c2Vtb3ZlIG1vdXNldXAnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogTW91c2UgZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIE1vdXNlSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShNb3VzZUlucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIE1vdXNlSW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gTW91c2VJbnB1dC5wcm90b3R5cGU7XG4gICAgcHJvdG8uZXZFbCA9IE1PVVNFX0VMRU1FTlRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gTU9VU0VfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMucHJlc3NlZCA9IGZhbHNlOyAvLyBtb3VzZWRvd24gc3RhdGVcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaGFuZGxlIG1vdXNlIGV2ZW50c1xuICAgKiBAcGFyYW0ge09iamVjdH0gZXZcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTW91c2VJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIGV2ZW50VHlwZSA9IE1PVVNFX0lOUFVUX01BUFtldi50eXBlXTsgLy8gb24gc3RhcnQgd2Ugd2FudCB0byBoYXZlIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBkb3duXG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgZXYuYnV0dG9uID09PSAwKSB7XG4gICAgICB0aGlzLnByZXNzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9NT1ZFICYmIGV2LndoaWNoICE9PSAxKSB7XG4gICAgICBldmVudFR5cGUgPSBJTlBVVF9FTkQ7XG4gICAgfSAvLyBtb3VzZSBtdXN0IGJlIGRvd25cblxuXG4gICAgaWYgKCF0aGlzLnByZXNzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgZXZlbnRUeXBlLCB7XG4gICAgICBwb2ludGVyczogW2V2XSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX01PVVNFLFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE1vdXNlSW5wdXQ7XG59KElucHV0KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ29tYmluZWQgdG91Y2ggYW5kIG1vdXNlIGlucHV0XG4gKlxuICogVG91Y2ggaGFzIGEgaGlnaGVyIHByaW9yaXR5IHRoZW4gbW91c2UsIGFuZCB3aGlsZSB0b3VjaGluZyBubyBtb3VzZSBldmVudHMgYXJlIGFsbG93ZWQuXG4gKiBUaGlzIGJlY2F1c2UgdG91Y2ggZGV2aWNlcyBhbHNvIGVtaXQgbW91c2UgZXZlbnRzIHdoaWxlIGRvaW5nIGEgdG91Y2guXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBERURVUF9USU1FT1VUID0gMjUwMDtcbnZhciBERURVUF9ESVNUQU5DRSA9IDI1O1xuXG5mdW5jdGlvbiBzZXRMYXN0VG91Y2goZXZlbnREYXRhKSB7XG4gIHZhciBfZXZlbnREYXRhJGNoYW5nZWRQb2kgPSBldmVudERhdGEuY2hhbmdlZFBvaW50ZXJzLFxuICAgICAgdG91Y2ggPSBfZXZlbnREYXRhJGNoYW5nZWRQb2lbMF07XG5cbiAgaWYgKHRvdWNoLmlkZW50aWZpZXIgPT09IHRoaXMucHJpbWFyeVRvdWNoKSB7XG4gICAgdmFyIGxhc3RUb3VjaCA9IHtcbiAgICAgIHg6IHRvdWNoLmNsaWVudFgsXG4gICAgICB5OiB0b3VjaC5jbGllbnRZXG4gICAgfTtcbiAgICB2YXIgbHRzID0gdGhpcy5sYXN0VG91Y2hlcztcbiAgICB0aGlzLmxhc3RUb3VjaGVzLnB1c2gobGFzdFRvdWNoKTtcblxuICAgIHZhciByZW1vdmVMYXN0VG91Y2ggPSBmdW5jdGlvbiByZW1vdmVMYXN0VG91Y2goKSB7XG4gICAgICB2YXIgaSA9IGx0cy5pbmRleE9mKGxhc3RUb3VjaCk7XG5cbiAgICAgIGlmIChpID4gLTEpIHtcbiAgICAgICAgbHRzLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2V0VGltZW91dChyZW1vdmVMYXN0VG91Y2gsIERFRFVQX1RJTUVPVVQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlY29yZFRvdWNoZXMoZXZlbnRUeXBlLCBldmVudERhdGEpIHtcbiAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUKSB7XG4gICAgdGhpcy5wcmltYXJ5VG91Y2ggPSBldmVudERhdGEuY2hhbmdlZFBvaW50ZXJzWzBdLmlkZW50aWZpZXI7XG4gICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgIHNldExhc3RUb3VjaC5jYWxsKHRoaXMsIGV2ZW50RGF0YSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTeW50aGV0aWNFdmVudChldmVudERhdGEpIHtcbiAgdmFyIHggPSBldmVudERhdGEuc3JjRXZlbnQuY2xpZW50WDtcbiAgdmFyIHkgPSBldmVudERhdGEuc3JjRXZlbnQuY2xpZW50WTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGFzdFRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdCA9IHRoaXMubGFzdFRvdWNoZXNbaV07XG4gICAgdmFyIGR4ID0gTWF0aC5hYnMoeCAtIHQueCk7XG4gICAgdmFyIGR5ID0gTWF0aC5hYnMoeSAtIHQueSk7XG5cbiAgICBpZiAoZHggPD0gREVEVVBfRElTVEFOQ0UgJiYgZHkgPD0gREVEVVBfRElTVEFOQ0UpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIFRvdWNoTW91c2VJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIHZhciBUb3VjaE1vdXNlSW5wdXQgPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShUb3VjaE1vdXNlSW5wdXQsIF9JbnB1dCk7XG5cbiAgICBmdW5jdGlvbiBUb3VjaE1vdXNlSW5wdXQoX21hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX0lucHV0LmNhbGwodGhpcywgX21hbmFnZXIsIGNhbGxiYWNrKSB8fCB0aGlzO1xuXG4gICAgICBfdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24gKG1hbmFnZXIsIGlucHV0RXZlbnQsIGlucHV0RGF0YSkge1xuICAgICAgICB2YXIgaXNUb3VjaCA9IGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9UT1VDSDtcbiAgICAgICAgdmFyIGlzTW91c2UgPSBpbnB1dERhdGEucG9pbnRlclR5cGUgPT09IElOUFVUX1RZUEVfTU9VU0U7XG5cbiAgICAgICAgaWYgKGlzTW91c2UgJiYgaW5wdXREYXRhLnNvdXJjZUNhcGFiaWxpdGllcyAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzLmZpcmVzVG91Y2hFdmVudHMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gd2hlbiB3ZSdyZSBpbiBhIHRvdWNoIGV2ZW50LCByZWNvcmQgdG91Y2hlcyB0byAgZGUtZHVwZSBzeW50aGV0aWMgbW91c2UgZXZlbnRcblxuXG4gICAgICAgIGlmIChpc1RvdWNoKSB7XG4gICAgICAgICAgcmVjb3JkVG91Y2hlcy5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTW91c2UgJiYgaXNTeW50aGV0aWNFdmVudC5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBpbnB1dERhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuY2FsbGJhY2sobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLnRvdWNoID0gbmV3IFRvdWNoSW5wdXQoX3RoaXMubWFuYWdlciwgX3RoaXMuaGFuZGxlcik7XG4gICAgICBfdGhpcy5tb3VzZSA9IG5ldyBNb3VzZUlucHV0KF90aGlzLm1hbmFnZXIsIF90aGlzLmhhbmRsZXIpO1xuICAgICAgX3RoaXMucHJpbWFyeVRvdWNoID0gbnVsbDtcbiAgICAgIF90aGlzLmxhc3RUb3VjaGVzID0gW107XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogaGFuZGxlIG1vdXNlIGFuZCB0b3VjaCBldmVudHNcbiAgICAgKiBAcGFyYW0ge0hhbW1lcn0gbWFuYWdlclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dEV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgICAqL1xuXG5cbiAgICB2YXIgX3Byb3RvID0gVG91Y2hNb3VzZUlucHV0LnByb3RvdHlwZTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogcmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lcnNcbiAgICAgKi9cbiAgICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLnRvdWNoLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMubW91c2UuZGVzdHJveSgpO1xuICAgIH07XG5cbiAgICByZXR1cm4gVG91Y2hNb3VzZUlucHV0O1xuICB9KElucHV0KTtcblxuICByZXR1cm4gVG91Y2hNb3VzZUlucHV0O1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjcmVhdGUgbmV3IGlucHV0IHR5cGUgbWFuYWdlclxuICogY2FsbGVkIGJ5IHRoZSBNYW5hZ2VyIGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0hhbW1lcn0gbWFuYWdlclxuICogQHJldHVybnMge0lucHV0fVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0SW5zdGFuY2UobWFuYWdlcikge1xuICB2YXIgVHlwZTsgLy8gbGV0IGlucHV0Q2xhc3MgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRDbGFzcztcblxuICB2YXIgaW5wdXRDbGFzcyA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dENsYXNzO1xuXG4gIGlmIChpbnB1dENsYXNzKSB7XG4gICAgVHlwZSA9IGlucHV0Q2xhc3M7XG4gIH0gZWxzZSBpZiAoU1VQUE9SVF9QT0lOVEVSX0VWRU5UUykge1xuICAgIFR5cGUgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgfSBlbHNlIGlmIChTVVBQT1JUX09OTFlfVE9VQ0gpIHtcbiAgICBUeXBlID0gVG91Y2hJbnB1dDtcbiAgfSBlbHNlIGlmICghU1VQUE9SVF9UT1VDSCkge1xuICAgIFR5cGUgPSBNb3VzZUlucHV0O1xuICB9IGVsc2Uge1xuICAgIFR5cGUgPSBUb3VjaE1vdXNlSW5wdXQ7XG4gIH1cblxuICByZXR1cm4gbmV3IFR5cGUobWFuYWdlciwgaW5wdXRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogaWYgdGhlIGFyZ3VtZW50IGlzIGFuIGFycmF5LCB3ZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZuIG9uIGVhY2ggZW50cnlcbiAqIGlmIGl0IGFpbnQgYW4gYXJyYXkgd2UgZG9uJ3Qgd2FudCB0byBkbyBhIHRoaW5nLlxuICogdGhpcyBpcyB1c2VkIGJ5IGFsbCB0aGUgbWV0aG9kcyB0aGF0IGFjY2VwdCBhIHNpbmdsZSBhbmQgYXJyYXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp8QXJyYXl9IGFyZ1xuICogQHBhcmFtIHtTdHJpbmd9IGZuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VBcnJheUFyZyhhcmcsIGZuLCBjb250ZXh0KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICBlYWNoKGFyZywgY29udGV4dFtmbl0sIGNvbnRleHQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgU1RBVEVfUE9TU0lCTEUgPSAxO1xudmFyIFNUQVRFX0JFR0FOID0gMjtcbnZhciBTVEFURV9DSEFOR0VEID0gNDtcbnZhciBTVEFURV9FTkRFRCA9IDg7XG52YXIgU1RBVEVfUkVDT0dOSVpFRCA9IFNUQVRFX0VOREVEO1xudmFyIFNUQVRFX0NBTkNFTExFRCA9IDE2O1xudmFyIFNUQVRFX0ZBSUxFRCA9IDMyO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSB1bmlxdWUgaWRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHVuaXF1ZUlkXG4gKi9cbnZhciBfdW5pcXVlSWQgPSAxO1xuZnVuY3Rpb24gdW5pcXVlSWQoKSB7XG4gIHJldHVybiBfdW5pcXVlSWQrKztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IGEgcmVjb2duaXplciBieSBuYW1lIGlmIGl0IGlzIGJvdW5kIHRvIGEgbWFuYWdlclxuICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gb3RoZXJSZWNvZ25pemVyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAqIEByZXR1cm5zIHtSZWNvZ25pemVyfVxuICovXG5mdW5jdGlvbiBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgcmVjb2duaXplcikge1xuICB2YXIgbWFuYWdlciA9IHJlY29nbml6ZXIubWFuYWdlcjtcblxuICBpZiAobWFuYWdlcikge1xuICAgIHJldHVybiBtYW5hZ2VyLmdldChvdGhlclJlY29nbml6ZXIpO1xuICB9XG5cbiAgcmV0dXJuIG90aGVyUmVjb2duaXplcjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IGEgdXNhYmxlIHN0cmluZywgdXNlZCBhcyBldmVudCBwb3N0Zml4XG4gKiBAcGFyYW0ge2NvbnN0YW50fSBzdGF0ZVxuICogQHJldHVybnMge1N0cmluZ30gc3RhdGVcbiAqL1xuXG5mdW5jdGlvbiBzdGF0ZVN0cihzdGF0ZSkge1xuICBpZiAoc3RhdGUgJiBTVEFURV9DQU5DRUxMRUQpIHtcbiAgICByZXR1cm4gJ2NhbmNlbCc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9FTkRFRCkge1xuICAgIHJldHVybiAnZW5kJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0NIQU5HRUQpIHtcbiAgICByZXR1cm4gJ21vdmUnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQkVHQU4pIHtcbiAgICByZXR1cm4gJ3N0YXJ0JztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUmVjb2duaXplciBmbG93IGV4cGxhaW5lZDsgKlxuICogQWxsIHJlY29nbml6ZXJzIGhhdmUgdGhlIGluaXRpYWwgc3RhdGUgb2YgUE9TU0lCTEUgd2hlbiBhIGlucHV0IHNlc3Npb24gc3RhcnRzLlxuICogVGhlIGRlZmluaXRpb24gb2YgYSBpbnB1dCBzZXNzaW9uIGlzIGZyb20gdGhlIGZpcnN0IGlucHV0IHVudGlsIHRoZSBsYXN0IGlucHV0LCB3aXRoIGFsbCBpdCdzIG1vdmVtZW50IGluIGl0LiAqXG4gKiBFeGFtcGxlIHNlc3Npb24gZm9yIG1vdXNlLWlucHV0OiBtb3VzZWRvd24gLT4gbW91c2Vtb3ZlIC0+IG1vdXNldXBcbiAqXG4gKiBPbiBlYWNoIHJlY29nbml6aW5nIGN5Y2xlIChzZWUgTWFuYWdlci5yZWNvZ25pemUpIHRoZSAucmVjb2duaXplKCkgbWV0aG9kIGlzIGV4ZWN1dGVkXG4gKiB3aGljaCBkZXRlcm1pbmVzIHdpdGggc3RhdGUgaXQgc2hvdWxkIGJlLlxuICpcbiAqIElmIHRoZSByZWNvZ25pemVyIGhhcyB0aGUgc3RhdGUgRkFJTEVELCBDQU5DRUxMRUQgb3IgUkVDT0dOSVpFRCAoZXF1YWxzIEVOREVEKSwgaXQgaXMgcmVzZXQgdG9cbiAqIFBPU1NJQkxFIHRvIGdpdmUgaXQgYW5vdGhlciBjaGFuZ2Ugb24gdGhlIG5leHQgY3ljbGUuXG4gKlxuICogICAgICAgICAgICAgICBQb3NzaWJsZVxuICogICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICstLS0tLSstLS0tLS0tLS0tLS0tLS0rXG4gKiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICstLS0tLSstLS0tLSsgICAgICAgICAgICAgICB8XG4gKiAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICB8XG4gKiAgIEZhaWxlZCAgICAgIENhbmNlbGxlZCAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rLS0tLS0tK1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgIFJlY29nbml6ZWQgICAgICAgQmVnYW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZGVkL1JlY29nbml6ZWRcbiAqL1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSZWNvZ25pemVyXG4gKiBFdmVyeSByZWNvZ25pemVyIG5lZWRzIHRvIGV4dGVuZCBmcm9tIHRoaXMgY2xhc3MuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKi9cblxudmFyIFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe1xuICAgICAgZW5hYmxlOiB0cnVlXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgdGhpcy5pZCA9IHVuaXF1ZUlkKCk7XG4gICAgdGhpcy5tYW5hZ2VyID0gbnVsbDsgLy8gZGVmYXVsdCBpcyBlbmFibGUgdHJ1ZVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIHRoaXMuc2ltdWx0YW5lb3VzID0ge307XG4gICAgdGhpcy5yZXF1aXJlRmFpbCA9IFtdO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtSZWNvZ25pemVyfVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICBhc3NpZ24kMSh0aGlzLm9wdGlvbnMsIG9wdGlvbnMpOyAvLyBhbHNvIHVwZGF0ZSB0aGUgdG91Y2hBY3Rpb24sIGluIGNhc2Ugc29tZXRoaW5nIGNoYW5nZWQgYWJvdXQgdGhlIGRpcmVjdGlvbnMvZW5hYmxlZCBzdGF0ZVxuXG4gICAgdGhpcy5tYW5hZ2VyICYmIHRoaXMubWFuYWdlci50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gcmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAncmVjb2duaXplV2l0aCcsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgc2ltdWx0YW5lb3VzID0gdGhpcy5zaW11bHRhbmVvdXM7XG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuXG4gICAgaWYgKCFzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSkge1xuICAgICAgc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF0gPSBvdGhlclJlY29nbml6ZXI7XG4gICAgICBvdGhlclJlY29nbml6ZXIucmVjb2duaXplV2l0aCh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGRyb3AgdGhlIHNpbXVsdGFuZW91cyBsaW5rLiBpdCBkb2VzbnQgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5kcm9wUmVjb2duaXplV2l0aCA9IGZ1bmN0aW9uIGRyb3BSZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVjb2duaXplV2l0aCcsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgZGVsZXRlIHRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZWNvZ25pemVyIGNhbiBvbmx5IHJ1biB3aGVuIGFuIG90aGVyIGlzIGZhaWxpbmdcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ucmVxdWlyZUZhaWx1cmUgPSBmdW5jdGlvbiByZXF1aXJlRmFpbHVyZShvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAncmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHJlcXVpcmVGYWlsID0gdGhpcy5yZXF1aXJlRmFpbDtcbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG5cbiAgICBpZiAoaW5BcnJheShyZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKSA9PT0gLTEpIHtcbiAgICAgIHJlcXVpcmVGYWlsLnB1c2gob3RoZXJSZWNvZ25pemVyKTtcbiAgICAgIG90aGVyUmVjb2duaXplci5yZXF1aXJlRmFpbHVyZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGRyb3AgdGhlIHJlcXVpcmVGYWlsdXJlIGxpbmsuIGl0IGRvZXMgbm90IHJlbW92ZSB0aGUgbGluayBvbiB0aGUgb3RoZXIgcmVjb2duaXplci5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8uZHJvcFJlcXVpcmVGYWlsdXJlID0gZnVuY3Rpb24gZHJvcFJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuICAgIHZhciBpbmRleCA9IGluQXJyYXkodGhpcy5yZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLnJlcXVpcmVGYWlsLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYXMgcmVxdWlyZSBmYWlsdXJlcyBib29sZWFuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5oYXNSZXF1aXJlRmFpbHVyZXMgPSBmdW5jdGlvbiBoYXNSZXF1aXJlRmFpbHVyZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoID4gMDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGlmIHRoZSByZWNvZ25pemVyIGNhbiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplclxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICovXG5cblxuICBfcHJvdG8uY2FuUmVjb2duaXplV2l0aCA9IGZ1bmN0aW9uIGNhblJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFlvdSBzaG91bGQgdXNlIGB0cnlFbWl0YCBpbnN0ZWFkIG9mIGBlbWl0YCBkaXJlY3RseSB0byBjaGVja1xuICAgKiB0aGF0IGFsbCB0aGUgbmVlZGVkIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQgYmVmb3JlIGVtaXR0aW5nLlxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTtcblxuICAgIGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICAgIHNlbGYubWFuYWdlci5lbWl0KGV2ZW50LCBpbnB1dCk7XG4gICAgfSAvLyAncGFuc3RhcnQnIGFuZCAncGFubW92ZSdcblxuXG4gICAgaWYgKHN0YXRlIDwgU1RBVEVfRU5ERUQpIHtcbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICB9XG5cbiAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCk7IC8vIHNpbXBsZSAnZXZlbnROYW1lJyBldmVudHNcblxuICAgIGlmIChpbnB1dC5hZGRpdGlvbmFsRXZlbnQpIHtcbiAgICAgIC8vIGFkZGl0aW9uYWwgZXZlbnQocGFubGVmdCwgcGFucmlnaHQsIHBpbmNoaW4sIHBpbmNob3V0Li4uKVxuICAgICAgZW1pdChpbnB1dC5hZGRpdGlvbmFsRXZlbnQpO1xuICAgIH0gLy8gcGFuZW5kIGFuZCBwYW5jYW5jZWxcblxuXG4gICAgaWYgKHN0YXRlID49IFNUQVRFX0VOREVEKSB7XG4gICAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCArIHN0YXRlU3RyKHN0YXRlKSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQ2hlY2sgdGhhdCBhbGwgdGhlIHJlcXVpcmUgZmFpbHVyZSByZWNvZ25pemVycyBoYXMgZmFpbGVkLFxuICAgKiBpZiB0cnVlLCBpdCBlbWl0cyBhIGdlc3R1cmUgZXZlbnQsXG4gICAqIG90aGVyd2lzZSwgc2V0dXAgdGhlIHN0YXRlIHRvIEZBSUxFRC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLnRyeUVtaXQgPSBmdW5jdGlvbiB0cnlFbWl0KGlucHV0KSB7XG4gICAgaWYgKHRoaXMuY2FuRW1pdCgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbWl0KGlucHV0KTtcbiAgICB9IC8vIGl0J3MgZmFpbGluZyBhbnl3YXlcblxuXG4gICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbiB3ZSBlbWl0P1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBfcHJvdG8uY2FuRW1pdCA9IGZ1bmN0aW9uIGNhbkVtaXQoKSB7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCkge1xuICAgICAgaWYgKCEodGhpcy5yZXF1aXJlRmFpbFtpXS5zdGF0ZSAmIChTVEFURV9GQUlMRUQgfCBTVEFURV9QT1NTSUJMRSkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogdXBkYXRlIHRoZSByZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgIC8vIG1ha2UgYSBuZXcgY29weSBvZiB0aGUgaW5wdXREYXRhXG4gICAgLy8gc28gd2UgY2FuIGNoYW5nZSB0aGUgaW5wdXREYXRhIHdpdGhvdXQgbWVzc2luZyB1cCB0aGUgb3RoZXIgcmVjb2duaXplcnNcbiAgICB2YXIgaW5wdXREYXRhQ2xvbmUgPSBhc3NpZ24kMSh7fSwgaW5wdXREYXRhKTsgLy8gaXMgaXMgZW5hYmxlZCBhbmQgYWxsb3cgcmVjb2duaXppbmc/XG5cbiAgICBpZiAoIWJvb2xPckZuKHRoaXMub3B0aW9ucy5lbmFibGUsIFt0aGlzLCBpbnB1dERhdGFDbG9uZV0pKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcmVzZXQgd2hlbiB3ZSd2ZSByZWFjaGVkIHRoZSBlbmRcblxuXG4gICAgaWYgKHRoaXMuc3RhdGUgJiAoU1RBVEVfUkVDT0dOSVpFRCB8IFNUQVRFX0NBTkNFTExFRCB8IFNUQVRFX0ZBSUxFRCkpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gdGhpcy5wcm9jZXNzKGlucHV0RGF0YUNsb25lKTsgLy8gdGhlIHJlY29nbml6ZXIgaGFzIHJlY29nbml6ZWQgYSBnZXN0dXJlXG4gICAgLy8gc28gdHJpZ2dlciBhbiBldmVudFxuXG4gICAgaWYgKHRoaXMuc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEIHwgU1RBVEVfRU5ERUQgfCBTVEFURV9DQU5DRUxMRUQpKSB7XG4gICAgICB0aGlzLnRyeUVtaXQoaW5wdXREYXRhQ2xvbmUpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJldHVybiB0aGUgc3RhdGUgb2YgdGhlIHJlY29nbml6ZXJcbiAgICogdGhlIGFjdHVhbCByZWNvZ25pemluZyBoYXBwZW5zIGluIHRoaXMgbWV0aG9kXG4gICAqIEB2aXJ0dWFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICogQHJldHVybnMge2NvbnN0YW50fSBTVEFURVxuICAgKi9cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5cblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXREYXRhKSB7fTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmV0dXJuIHRoZSBwcmVmZXJyZWQgdG91Y2gtYWN0aW9uXG4gICAqIEB2aXJ0dWFsXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG5cblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHt9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FsbGVkIHdoZW4gdGhlIGdlc3R1cmUgaXNuJ3QgYWxsb3dlZCB0byByZWNvZ25pemVcbiAgICogbGlrZSB3aGVuIGFub3RoZXIgaXMgYmVpbmcgcmVjb2duaXplZCBvciBpdCBpcyBkaXNhYmxlZFxuICAgKiBAdmlydHVhbFxuICAgKi9cblxuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge307XG5cbiAgcmV0dXJuIFJlY29nbml6ZXI7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEEgdGFwIGlzIHJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb2luZyBhIHNtYWxsIHRhcC9jbGljay4gTXVsdGlwbGUgdGFwcyBhcmUgcmVjb2duaXplZCBpZiB0aGV5IG9jY3VyXG4gKiBiZXR3ZWVuIHRoZSBnaXZlbiBpbnRlcnZhbCBhbmQgcG9zaXRpb24uIFRoZSBkZWxheSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcmVjb2duaXplIG11bHRpLXRhcHMgd2l0aG91dCBmaXJpbmdcbiAqIGEgc2luZ2xlIHRhcC5cbiAqXG4gKiBUaGUgZXZlbnREYXRhIGZyb20gdGhlIGVtaXR0ZWQgZXZlbnQgY29udGFpbnMgdGhlIHByb3BlcnR5IGB0YXBDb3VudGAsIHdoaWNoIGNvbnRhaW5zIHRoZSBhbW91bnQgb2ZcbiAqIG11bHRpLXRhcHMgYmVpbmcgcmVjb2duaXplZC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBUYXBSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShUYXBSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gVGFwUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3RhcCcsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIHRhcHM6IDEsXG4gICAgICBpbnRlcnZhbDogMzAwLFxuICAgICAgLy8gbWF4IHRpbWUgYmV0d2VlbiB0aGUgbXVsdGktdGFwIHRhcHNcbiAgICAgIHRpbWU6IDI1MCxcbiAgICAgIC8vIG1heCB0aW1lIG9mIHRoZSBwb2ludGVyIHRvIGJlIGRvd24gKGxpa2UgZmluZ2VyIG9uIHRoZSBzY3JlZW4pXG4gICAgICB0aHJlc2hvbGQ6IDksXG4gICAgICAvLyBhIG1pbmltYWwgbW92ZW1lbnQgaXMgb2ssIGJ1dCBrZWVwIGl0IGxvd1xuICAgICAgcG9zVGhyZXNob2xkOiAxMFxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzOyAvLyBwcmV2aW91cyB0aW1lIGFuZCBjZW50ZXIsXG4gICAgLy8gdXNlZCBmb3IgdGFwIGNvdW50aW5nXG5cbiAgICBfdGhpcy5wVGltZSA9IGZhbHNlO1xuICAgIF90aGlzLnBDZW50ZXIgPSBmYWxzZTtcbiAgICBfdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIF90aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgX3RoaXMuY291bnQgPSAwO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUYXBSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9NQU5JUFVMQVRJT05dO1xuICB9O1xuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgIHZhciB2YWxpZFRvdWNoVGltZSA9IGlucHV0LmRlbHRhVGltZSA8IG9wdGlvbnMudGltZTtcbiAgICB0aGlzLnJlc2V0KCk7XG5cbiAgICBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgdGhpcy5jb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICB9IC8vIHdlIG9ubHkgYWxsb3cgbGl0dGxlIG1vdmVtZW50XG4gICAgLy8gYW5kIHdlJ3ZlIHJlYWNoZWQgYW4gZW5kIGV2ZW50LCBzbyBhIHRhcCBpcyBwb3NzaWJsZVxuXG5cbiAgICBpZiAodmFsaWRNb3ZlbWVudCAmJiB2YWxpZFRvdWNoVGltZSAmJiB2YWxpZFBvaW50ZXJzKSB7XG4gICAgICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9PSBJTlBVVF9FTkQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbGlkSW50ZXJ2YWwgPSB0aGlzLnBUaW1lID8gaW5wdXQudGltZVN0YW1wIC0gdGhpcy5wVGltZSA8IG9wdGlvbnMuaW50ZXJ2YWwgOiB0cnVlO1xuICAgICAgdmFyIHZhbGlkTXVsdGlUYXAgPSAhdGhpcy5wQ2VudGVyIHx8IGdldERpc3RhbmNlKHRoaXMucENlbnRlciwgaW5wdXQuY2VudGVyKSA8IG9wdGlvbnMucG9zVGhyZXNob2xkO1xuICAgICAgdGhpcy5wVGltZSA9IGlucHV0LnRpbWVTdGFtcDtcbiAgICAgIHRoaXMucENlbnRlciA9IGlucHV0LmNlbnRlcjtcblxuICAgICAgaWYgKCF2YWxpZE11bHRpVGFwIHx8ICF2YWxpZEludGVydmFsKSB7XG4gICAgICAgIHRoaXMuY291bnQgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb3VudCArPSAxO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbnB1dCA9IGlucHV0OyAvLyBpZiB0YXAgY291bnQgbWF0Y2hlcyB3ZSBoYXZlIHJlY29nbml6ZWQgaXQsXG4gICAgICAvLyBlbHNlIGl0IGhhcyBiZWdhbiByZWNvZ25pemluZy4uLlxuXG4gICAgICB2YXIgdGFwQ291bnQgPSB0aGlzLmNvdW50ICUgb3B0aW9ucy50YXBzO1xuXG4gICAgICBpZiAodGFwQ291bnQgPT09IDApIHtcbiAgICAgICAgLy8gbm8gZmFpbGluZyByZXF1aXJlbWVudHMsIGltbWVkaWF0ZWx5IHRyaWdnZXIgdGhlIHRhcCBldmVudFxuICAgICAgICAvLyBvciB3YWl0IGFzIGxvbmcgYXMgdGhlIG11bHRpdGFwIGludGVydmFsIHRvIHRyaWdnZXJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1JlcXVpcmVGYWlsdXJlcygpKSB7XG4gICAgICAgICAgcmV0dXJuIFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzMi5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG5cbiAgICAgICAgICAgIF90aGlzMi50cnlFbWl0KCk7XG4gICAgICAgICAgfSwgb3B0aW9ucy5pbnRlcnZhbCk7XG4gICAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICBfcHJvdG8uZmFpbFRpbWVvdXQgPSBmdW5jdGlvbiBmYWlsVGltZW91dCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgfSwgdGhpcy5vcHRpb25zLmludGVydmFsKTtcbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICB0aGlzLl9pbnB1dC50YXBDb3VudCA9IHRoaXMuY291bnQ7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsIHRoaXMuX2lucHV0KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFRhcFJlY29nbml6ZXI7XG59KFJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUaGlzIHJlY29nbml6ZXIgaXMganVzdCB1c2VkIGFzIGEgYmFzZSBmb3IgdGhlIHNpbXBsZSBhdHRyaWJ1dGUgcmVjb2duaXplcnMuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuXG52YXIgQXR0clJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKEF0dHJSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gQXR0clJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX1JlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBwb2ludGVyczogMVxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBVc2VkIHRvIGNoZWNrIGlmIGl0IHRoZSByZWNvZ25pemVyIHJlY2VpdmVzIHZhbGlkIGlucHV0LCBsaWtlIGlucHV0LmRpc3RhbmNlID4gMTAuXG4gICAqIEBtZW1iZXJvZiBBdHRyUmVjb2duaXplclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IHJlY29nbml6ZWRcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gQXR0clJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgdmFyIG9wdGlvblBvaW50ZXJzID0gdGhpcy5vcHRpb25zLnBvaW50ZXJzO1xuICAgIHJldHVybiBvcHRpb25Qb2ludGVycyA9PT0gMCB8fCBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvblBvaW50ZXJzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogUHJvY2VzcyB0aGUgaW5wdXQgYW5kIHJldHVybiB0aGUgc3RhdGUgZm9yIHRoZSByZWNvZ25pemVyXG4gICAqIEBtZW1iZXJvZiBBdHRyUmVjb2duaXplclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICogQHJldHVybnMgeyp9IFN0YXRlXG4gICAqL1xuXG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICB2YXIgZXZlbnRUeXBlID0gaW5wdXQuZXZlbnRUeXBlO1xuICAgIHZhciBpc1JlY29nbml6ZWQgPSBzdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQpO1xuICAgIHZhciBpc1ZhbGlkID0gdGhpcy5hdHRyVGVzdChpbnB1dCk7IC8vIG9uIGNhbmNlbCBpbnB1dCBhbmQgd2UndmUgcmVjb2duaXplZCBiZWZvcmUsIHJldHVybiBTVEFURV9DQU5DRUxMRURcblxuICAgIGlmIChpc1JlY29nbml6ZWQgJiYgKGV2ZW50VHlwZSAmIElOUFVUX0NBTkNFTCB8fCAhaXNWYWxpZCkpIHtcbiAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0NBTkNFTExFRDtcbiAgICB9IGVsc2UgaWYgKGlzUmVjb2duaXplZCB8fCBpc1ZhbGlkKSB7XG4gICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0VOREVEO1xuICAgICAgfSBlbHNlIGlmICghKHN0YXRlICYgU1RBVEVfQkVHQU4pKSB7XG4gICAgICAgIHJldHVybiBTVEFURV9CRUdBTjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0hBTkdFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIHJldHVybiBBdHRyUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGRpcmVjdGlvbiBjb25zIHRvIHN0cmluZ1xuICogQHBhcmFtIHtjb25zdGFudH0gZGlyZWN0aW9uXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGRpcmVjdGlvblN0cihkaXJlY3Rpb24pIHtcbiAgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0RPV04pIHtcbiAgICByZXR1cm4gJ2Rvd24nO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX1VQKSB7XG4gICAgcmV0dXJuICd1cCc7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fTEVGVCkge1xuICAgIHJldHVybiAnbGVmdCc7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fUklHSFQpIHtcbiAgICByZXR1cm4gJ3JpZ2h0JztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUGFuXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBhbmQgbW92ZWQgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBQYW5SZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUGFuUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBQYW5SZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3BhbicsXG4gICAgICB0aHJlc2hvbGQ6IDEwLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICBkaXJlY3Rpb246IERJUkVDVElPTl9BTExcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgICBfdGhpcy5wWCA9IG51bGw7XG4gICAgX3RoaXMucFkgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQYW5SZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcbiAgICB2YXIgYWN0aW9ucyA9IFtdO1xuXG4gICAgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICBhY3Rpb25zLnB1c2goVE9VQ0hfQUNUSU9OX1BBTl9ZKTtcbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICBhY3Rpb25zLnB1c2goVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZGlyZWN0aW9uVGVzdCA9IGZ1bmN0aW9uIGRpcmVjdGlvblRlc3QoaW5wdXQpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgaGFzTW92ZWQgPSB0cnVlO1xuICAgIHZhciBkaXN0YW5jZSA9IGlucHV0LmRpc3RhbmNlO1xuICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5kaXJlY3Rpb247XG4gICAgdmFyIHggPSBpbnB1dC5kZWx0YVg7XG4gICAgdmFyIHkgPSBpbnB1dC5kZWx0YVk7IC8vIGxvY2sgdG8gYXhpcz9cblxuICAgIGlmICghKGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uKSkge1xuICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgICAgZGlyZWN0aW9uID0geCA9PT0gMCA/IERJUkVDVElPTl9OT05FIDogeCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgICAgICAgaGFzTW92ZWQgPSB4ICE9PSB0aGlzLnBYO1xuICAgICAgICBkaXN0YW5jZSA9IE1hdGguYWJzKGlucHV0LmRlbHRhWCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXJlY3Rpb24gPSB5ID09PSAwID8gRElSRUNUSU9OX05PTkUgOiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xuICAgICAgICBoYXNNb3ZlZCA9IHkgIT09IHRoaXMucFk7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFZKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgcmV0dXJuIGhhc01vdmVkICYmIGRpc3RhbmNlID4gb3B0aW9ucy50aHJlc2hvbGQgJiYgZGlyZWN0aW9uICYgb3B0aW9ucy5kaXJlY3Rpb247XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICByZXR1cm4gQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmICggLy8gcmVwbGFjZSB3aXRoIGEgc3VwZXIgY2FsbFxuICAgIHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTiB8fCAhKHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTikgJiYgdGhpcy5kaXJlY3Rpb25UZXN0KGlucHV0KSk7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdGhpcy5wWCA9IGlucHV0LmRlbHRhWDtcbiAgICB0aGlzLnBZID0gaW5wdXQuZGVsdGFZO1xuICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25TdHIoaW5wdXQuZGlyZWN0aW9uKTtcblxuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIGlucHV0LmFkZGl0aW9uYWxFdmVudCA9IHRoaXMub3B0aW9ucy5ldmVudCArIGRpcmVjdGlvbjtcbiAgICB9XG5cbiAgICBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFBhblJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogU3dpcGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBtb3ZpbmcgZmFzdCAodmVsb2NpdHkpLCB3aXRoIGVub3VnaCBkaXN0YW5jZSBpbiB0aGUgYWxsb3dlZCBkaXJlY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFN3aXBlUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFN3aXBlUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBTd2lwZVJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdzd2lwZScsXG4gICAgICB0aHJlc2hvbGQ6IDEwLFxuICAgICAgdmVsb2NpdHk6IDAuMyxcbiAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwsXG4gICAgICBwb2ludGVyczogMVxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN3aXBlUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFBhblJlY29nbml6ZXIucHJvdG90eXBlLmdldFRvdWNoQWN0aW9uLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcbiAgICB2YXIgdmVsb2NpdHk7XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgKERJUkVDVElPTl9IT1JJWk9OVEFMIHwgRElSRUNUSU9OX1ZFUlRJQ0FMKSkge1xuICAgICAgdmVsb2NpdHkgPSBpbnB1dC5vdmVyYWxsVmVsb2NpdHk7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgdmVsb2NpdHkgPSBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgZGlyZWN0aW9uICYgaW5wdXQub2Zmc2V0RGlyZWN0aW9uICYmIGlucHV0LmRpc3RhbmNlID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCAmJiBpbnB1dC5tYXhQb2ludGVycyA9PT0gdGhpcy5vcHRpb25zLnBvaW50ZXJzICYmIGFicyh2ZWxvY2l0eSkgPiB0aGlzLm9wdGlvbnMudmVsb2NpdHkgJiYgaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25TdHIoaW5wdXQub2Zmc2V0RGlyZWN0aW9uKTtcblxuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIGRpcmVjdGlvbiwgaW5wdXQpO1xuICAgIH1cblxuICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiBTd2lwZVJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUGluY2hcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVycyBhcmUgbW92aW5nIHRvd2FyZCAoem9vbS1pbikgb3IgYXdheSBmcm9tIGVhY2ggb3RoZXIgKHpvb20tb3V0KS5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgUGluY2hSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUGluY2hSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFBpbmNoUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3BpbmNoJyxcbiAgICAgIHRocmVzaG9sZDogMCxcbiAgICAgIHBvaW50ZXJzOiAyXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUGluY2hSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIChNYXRoLmFicyhpbnB1dC5zY2FsZSAtIDEpID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCB8fCB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIGlmIChpbnB1dC5zY2FsZSAhPT0gMSkge1xuICAgICAgdmFyIGluT3V0ID0gaW5wdXQuc2NhbGUgPCAxID8gJ2luJyA6ICdvdXQnO1xuICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgaW5PdXQ7XG4gICAgfVxuXG4gICAgX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5lbWl0LmNhbGwodGhpcywgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiBQaW5jaFJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUm90YXRlXG4gKiBSZWNvZ25pemVkIHdoZW4gdHdvIG9yIG1vcmUgcG9pbnRlciBhcmUgbW92aW5nIGluIGEgY2lyY3VsYXIgbW90aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBSb3RhdGVSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUm90YXRlUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBSb3RhdGVSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncm90YXRlJyxcbiAgICAgIHRocmVzaG9sZDogMCxcbiAgICAgIHBvaW50ZXJzOiAyXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUm90YXRlUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiAoTWF0aC5hYnMoaW5wdXQucm90YXRpb24pID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCB8fCB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pO1xuICB9O1xuXG4gIHJldHVybiBSb3RhdGVSZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFByZXNzXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBmb3IgeCBtcyB3aXRob3V0IGFueSBtb3ZlbWVudC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBQcmVzc1JlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFByZXNzUmVjb2duaXplciwgX1JlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFByZXNzUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3ByZXNzJyxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgdGltZTogMjUxLFxuICAgICAgLy8gbWluaW1hbCB0aW1lIG9mIHRoZSBwb2ludGVyIHRvIGJlIHByZXNzZWRcbiAgICAgIHRocmVzaG9sZDogOVxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICAgIF90aGlzLl90aW1lciA9IG51bGw7XG4gICAgX3RoaXMuX2lucHV0ID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUHJlc3NSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9BVVRPXTtcbiAgfTtcblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgIHZhciB2YWxpZE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCBvcHRpb25zLnRocmVzaG9sZDtcbiAgICB2YXIgdmFsaWRUaW1lID0gaW5wdXQuZGVsdGFUaW1lID4gb3B0aW9ucy50aW1lO1xuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIHdlIG9ubHkgYWxsb3cgbGl0dGxlIG1vdmVtZW50XG4gICAgLy8gYW5kIHdlJ3ZlIHJlYWNoZWQgYW4gZW5kIGV2ZW50LCBzbyBhIHRhcCBpcyBwb3NzaWJsZVxuXG4gICAgaWYgKCF2YWxpZE1vdmVtZW50IHx8ICF2YWxpZFBvaW50ZXJzIHx8IGlucHV0LmV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmICF2YWxpZFRpbWUpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9IGVsc2UgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX1NUQVJUKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuc3RhdGUgPSBTVEFURV9SRUNPR05JWkVEO1xuXG4gICAgICAgIF90aGlzMi50cnlFbWl0KCk7XG4gICAgICB9LCBvcHRpb25zLnRpbWUpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQgJiYgaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQgKyBcInVwXCIsIGlucHV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsIHRoaXMuX2lucHV0KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFByZXNzUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBpZiBET00gZXZlbnRzIGFyZSBiZWluZyB0cmlnZ2VyZWQuXG4gICAqIEJ1dCB0aGlzIGlzIHNsb3dlciBhbmQgdW51c2VkIGJ5IHNpbXBsZSBpbXBsZW1lbnRhdGlvbnMsIHNvIGRpc2FibGVkIGJ5IGRlZmF1bHQuXG4gICAqIEB0eXBlIHtCb29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZG9tRXZlbnRzOiBmYWxzZSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogVGhlIHZhbHVlIGZvciB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkvZmFsbGJhY2suXG4gICAqIFdoZW4gc2V0IHRvIGBjb21wdXRlYCBpdCB3aWxsIG1hZ2ljYWxseSBzZXQgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIGFkZGVkIHJlY29nbml6ZXJzLlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKiBAZGVmYXVsdCBjb21wdXRlXG4gICAqL1xuICB0b3VjaEFjdGlvbjogVE9VQ0hfQUNUSU9OX0NPTVBVVEUsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtCb29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBlbmFibGU6IHRydWUsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEVYUEVSSU1FTlRBTCBGRUFUVVJFIC0tIGNhbiBiZSByZW1vdmVkL2NoYW5nZWRcbiAgICogQ2hhbmdlIHRoZSBwYXJlbnQgaW5wdXQgdGFyZ2V0IGVsZW1lbnQuXG4gICAqIElmIE51bGwsIHRoZW4gaXQgaXMgYmVpbmcgc2V0IHRoZSB0byBtYWluIGVsZW1lbnQuXG4gICAqIEB0eXBlIHtOdWxsfEV2ZW50VGFyZ2V0fVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBpbnB1dFRhcmdldDogbnVsbCxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZm9yY2UgYW4gaW5wdXQgY2xhc3NcbiAgICogQHR5cGUge051bGx8RnVuY3Rpb259XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGlucHV0Q2xhc3M6IG51bGwsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFNvbWUgQ1NTIHByb3BlcnRpZXMgY2FuIGJlIHVzZWQgdG8gaW1wcm92ZSB0aGUgd29ya2luZyBvZiBIYW1tZXIuXG4gICAqIEFkZCB0aGVtIHRvIHRoaXMgbWV0aG9kIGFuZCB0aGV5IHdpbGwgYmUgc2V0IHdoZW4gY3JlYXRpbmcgYSBuZXcgTWFuYWdlci5cbiAgICogQG5hbWVzcGFjZVxuICAgKi9cbiAgY3NzUHJvcHM6IHtcbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGVzIHRleHQgc2VsZWN0aW9uIHRvIGltcHJvdmUgdGhlIGRyYWdnaW5nIGdlc3R1cmUuIE1haW5seSBmb3IgZGVza3RvcCBicm93c2Vycy5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlIHRoZSBXaW5kb3dzIFBob25lIGdyaXBwZXJzIHdoZW4gcHJlc3NpbmcgYW4gZWxlbWVudC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHRvdWNoU2VsZWN0OiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZXMgdGhlIGRlZmF1bHQgY2FsbG91dCBzaG93biB3aGVuIHlvdSB0b3VjaCBhbmQgaG9sZCBhIHRvdWNoIHRhcmdldC5cbiAgICAgKiBPbiBpT1MsIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0IHN1Y2ggYXMgYSBsaW5rLCBTYWZhcmkgZGlzcGxheXNcbiAgICAgKiBhIGNhbGxvdXQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGluay4gVGhpcyBwcm9wZXJ0eSBhbGxvd3MgeW91IHRvIGRpc2FibGUgdGhhdCBjYWxsb3V0LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdG91Y2hDYWxsb3V0OiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgem9vbWluZyBpcyBlbmFibGVkLiBVc2VkIGJ5IElFMTA+XG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICBjb250ZW50Wm9vbWluZzogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIFNwZWNpZmllcyB0aGF0IGFuIGVudGlyZSBlbGVtZW50IHNob3VsZCBiZSBkcmFnZ2FibGUgaW5zdGVhZCBvZiBpdHMgY29udGVudHMuIE1haW5seSBmb3IgZGVza3RvcCBicm93c2Vycy5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHVzZXJEcmFnOiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogT3ZlcnJpZGVzIHRoZSBoaWdobGlnaHQgY29sb3Igc2hvd24gd2hlbiB0aGUgdXNlciB0YXBzIGEgbGluayBvciBhIEphdmFTY3JpcHRcbiAgICAgKiBjbGlja2FibGUgZWxlbWVudCBpbiBpT1MuIFRoaXMgcHJvcGVydHkgb2JleXMgdGhlIGFscGhhIHZhbHVlLCBpZiBzcGVjaWZpZWQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAncmdiYSgwLDAsMCwwKSdcbiAgICAgKi9cbiAgICB0YXBIaWdobGlnaHRDb2xvcjogXCJyZ2JhKDAsMCwwLDApXCJcbiAgfVxufTtcbi8qKlxuICogQHByaXZhdGVcbiAqIERlZmF1bHQgcmVjb2duaXplciBzZXR1cCB3aGVuIGNhbGxpbmcgYEhhbW1lcigpYFxuICogV2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyIHRoZXNlIHdpbGwgYmUgc2tpcHBlZC5cbiAqIFRoaXMgaXMgc2VwYXJhdGVkIHdpdGggb3RoZXIgZGVmYXVsdHMgYmVjYXVzZSBvZiB0cmVlLXNoYWtpbmcuXG4gKiBAdHlwZSB7QXJyYXl9XG4gKi9cblxudmFyIHByZXNldCA9IFtbUm90YXRlUmVjb2duaXplciwge1xuICBlbmFibGU6IGZhbHNlXG59XSwgW1BpbmNoUmVjb2duaXplciwge1xuICBlbmFibGU6IGZhbHNlXG59LCBbJ3JvdGF0ZSddXSwgW1N3aXBlUmVjb2duaXplciwge1xuICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG59XSwgW1BhblJlY29nbml6ZXIsIHtcbiAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTFxufSwgWydzd2lwZSddXSwgW1RhcFJlY29nbml6ZXJdLCBbVGFwUmVjb2duaXplciwge1xuICBldmVudDogJ2RvdWJsZXRhcCcsXG4gIHRhcHM6IDJcbn0sIFsndGFwJ11dLCBbUHJlc3NSZWNvZ25pemVyXV07XG5cbnZhciBTVE9QID0gMTtcbnZhciBGT1JDRURfU1RPUCA9IDI7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBhZGQvcmVtb3ZlIHRoZSBjc3MgcHJvcGVydGllcyBhcyBkZWZpbmVkIGluIG1hbmFnZXIub3B0aW9ucy5jc3NQcm9wc1xuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGFkZFxuICovXG5cbmZ1bmN0aW9uIHRvZ2dsZUNzc1Byb3BzKG1hbmFnZXIsIGFkZCkge1xuICB2YXIgZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcblxuICBpZiAoIWVsZW1lbnQuc3R5bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcHJvcDtcbiAgZWFjaChtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgIHByb3AgPSBwcmVmaXhlZChlbGVtZW50LnN0eWxlLCBuYW1lKTtcblxuICAgIGlmIChhZGQpIHtcbiAgICAgIG1hbmFnZXIub2xkQ3NzUHJvcHNbcHJvcF0gPSBlbGVtZW50LnN0eWxlW3Byb3BdO1xuICAgICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSB8fCBcIlwiO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKCFhZGQpIHtcbiAgICBtYW5hZ2VyLm9sZENzc1Byb3BzID0ge307XG4gIH1cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqIHRyaWdnZXIgZG9tIGV2ZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gKi9cblxuXG5mdW5jdGlvbiB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpIHtcbiAgdmFyIGdlc3R1cmVFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gIGdlc3R1cmVFdmVudC5pbml0RXZlbnQoZXZlbnQsIHRydWUsIHRydWUpO1xuICBnZXN0dXJlRXZlbnQuZ2VzdHVyZSA9IGRhdGE7XG4gIGRhdGEudGFyZ2V0LmRpc3BhdGNoRXZlbnQoZ2VzdHVyZUV2ZW50KTtcbn1cbi8qKlxuKiBAcHJpdmF0ZVxuICogTWFuYWdlclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxuXG52YXIgTWFuYWdlciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE1hbmFnZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBhc3NpZ24kMSh7fSwgZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuICAgIHRoaXMub3B0aW9ucy5pbnB1dFRhcmdldCA9IHRoaXMub3B0aW9ucy5pbnB1dFRhcmdldCB8fCBlbGVtZW50O1xuICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICB0aGlzLnNlc3Npb24gPSB7fTtcbiAgICB0aGlzLnJlY29nbml6ZXJzID0gW107XG4gICAgdGhpcy5vbGRDc3NQcm9wcyA9IHt9O1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5pbnB1dCA9IGNyZWF0ZUlucHV0SW5zdGFuY2UodGhpcyk7XG4gICAgdGhpcy50b3VjaEFjdGlvbiA9IG5ldyBUb3VjaEFjdGlvbih0aGlzLCB0aGlzLm9wdGlvbnMudG91Y2hBY3Rpb24pO1xuICAgIHRvZ2dsZUNzc1Byb3BzKHRoaXMsIHRydWUpO1xuICAgIGVhY2godGhpcy5vcHRpb25zLnJlY29nbml6ZXJzLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIHJlY29nbml6ZXIgPSBfdGhpcy5hZGQobmV3IGl0ZW1bMF0oaXRlbVsxXSkpO1xuXG4gICAgICBpdGVtWzJdICYmIHJlY29nbml6ZXIucmVjb2duaXplV2l0aChpdGVtWzJdKTtcbiAgICAgIGl0ZW1bM10gJiYgcmVjb2duaXplci5yZXF1aXJlRmFpbHVyZShpdGVtWzNdKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge01hbmFnZXJ9XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IE1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQob3B0aW9ucykge1xuICAgIGFzc2lnbiQxKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7IC8vIE9wdGlvbnMgdGhhdCBuZWVkIGEgbGl0dGxlIG1vcmUgc2V0dXBcblxuICAgIGlmIChvcHRpb25zLnRvdWNoQWN0aW9uKSB7XG4gICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmlucHV0VGFyZ2V0KSB7XG4gICAgICAvLyBDbGVhbiB1cCBleGlzdGluZyBldmVudCBsaXN0ZW5lcnMgYW5kIHJlaW5pdGlhbGl6ZVxuICAgICAgdGhpcy5pbnB1dC5kZXN0cm95KCk7XG4gICAgICB0aGlzLmlucHV0LnRhcmdldCA9IG9wdGlvbnMuaW5wdXRUYXJnZXQ7XG4gICAgICB0aGlzLmlucHV0LmluaXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHN0b3AgcmVjb2duaXppbmcgZm9yIHRoaXMgc2Vzc2lvbi5cbiAgICogVGhpcyBzZXNzaW9uIHdpbGwgYmUgZGlzY2FyZGVkLCB3aGVuIGEgbmV3IFtpbnB1dF1zdGFydCBldmVudCBpcyBmaXJlZC5cbiAgICogV2hlbiBmb3JjZWQsIHRoZSByZWNvZ25pemVyIGN5Y2xlIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHkuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2ZvcmNlXVxuICAgKi9cblxuXG4gIF9wcm90by5zdG9wID0gZnVuY3Rpb24gc3RvcChmb3JjZSkge1xuICAgIHRoaXMuc2Vzc2lvbi5zdG9wcGVkID0gZm9yY2UgPyBGT1JDRURfU1RPUCA6IFNUT1A7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBydW4gdGhlIHJlY29nbml6ZXJzIVxuICAgKiBjYWxsZWQgYnkgdGhlIGlucHV0SGFuZGxlciBmdW5jdGlvbiBvbiBldmVyeSBtb3ZlbWVudCBvZiB0aGUgcG9pbnRlcnMgKHRvdWNoZXMpXG4gICAqIGl0IHdhbGtzIHRocm91Z2ggYWxsIHRoZSByZWNvZ25pemVycyBhbmQgdHJpZXMgdG8gZGV0ZWN0IHRoZSBnZXN0dXJlIHRoYXQgaXMgYmVpbmcgbWFkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZSA9IGZ1bmN0aW9uIHJlY29nbml6ZShpbnB1dERhdGEpIHtcbiAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcblxuICAgIGlmIChzZXNzaW9uLnN0b3BwZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHJ1biB0aGUgdG91Y2gtYWN0aW9uIHBvbHlmaWxsXG5cblxuICAgIHRoaXMudG91Y2hBY3Rpb24ucHJldmVudERlZmF1bHRzKGlucHV0RGF0YSk7XG4gICAgdmFyIHJlY29nbml6ZXI7XG4gICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVyczsgLy8gdGhpcyBob2xkcyB0aGUgcmVjb2duaXplciB0aGF0IGlzIGJlaW5nIHJlY29nbml6ZWQuXG4gICAgLy8gc28gdGhlIHJlY29nbml6ZXIncyBzdGF0ZSBuZWVkcyB0byBiZSBCRUdBTiwgQ0hBTkdFRCwgRU5ERUQgb3IgUkVDT0dOSVpFRFxuICAgIC8vIGlmIG5vIHJlY29nbml6ZXIgaXMgZGV0ZWN0aW5nIGEgdGhpbmcsIGl0IGlzIHNldCB0byBgbnVsbGBcblxuICAgIHZhciBjdXJSZWNvZ25pemVyID0gc2Vzc2lvbi5jdXJSZWNvZ25pemVyOyAvLyByZXNldCB3aGVuIHRoZSBsYXN0IHJlY29nbml6ZXIgaXMgcmVjb2duaXplZFxuICAgIC8vIG9yIHdoZW4gd2UncmUgaW4gYSBuZXcgc2Vzc2lvblxuXG4gICAgaWYgKCFjdXJSZWNvZ25pemVyIHx8IGN1clJlY29nbml6ZXIgJiYgY3VyUmVjb2duaXplci5zdGF0ZSAmIFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHNlc3Npb24uY3VyUmVjb2duaXplciA9IG51bGw7XG4gICAgICBjdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHJlY29nbml6ZXJzLmxlbmd0aCkge1xuICAgICAgcmVjb2duaXplciA9IHJlY29nbml6ZXJzW2ldOyAvLyBmaW5kIG91dCBpZiB3ZSBhcmUgYWxsb3dlZCB0cnkgdG8gcmVjb2duaXplIHRoZSBpbnB1dCBmb3IgdGhpcyBvbmUuXG4gICAgICAvLyAxLiAgIGFsbG93IGlmIHRoZSBzZXNzaW9uIGlzIE5PVCBmb3JjZWQgc3RvcHBlZCAoc2VlIHRoZSAuc3RvcCgpIG1ldGhvZClcbiAgICAgIC8vIDIuICAgYWxsb3cgaWYgd2Ugc3RpbGwgaGF2ZW4ndCByZWNvZ25pemVkIGEgZ2VzdHVyZSBpbiB0aGlzIHNlc3Npb24sIG9yIHRoZSB0aGlzIHJlY29nbml6ZXIgaXMgdGhlIG9uZVxuICAgICAgLy8gICAgICB0aGF0IGlzIGJlaW5nIHJlY29nbml6ZWQuXG4gICAgICAvLyAzLiAgIGFsbG93IGlmIHRoZSByZWNvZ25pemVyIGlzIGFsbG93ZWQgdG8gcnVuIHNpbXVsdGFuZW91cyB3aXRoIHRoZSBjdXJyZW50IHJlY29nbml6ZWQgcmVjb2duaXplci5cbiAgICAgIC8vICAgICAgdGhpcyBjYW4gYmUgc2V0dXAgd2l0aCB0aGUgYHJlY29nbml6ZVdpdGgoKWAgbWV0aG9kIG9uIHRoZSByZWNvZ25pemVyLlxuXG4gICAgICBpZiAoc2Vzc2lvbi5zdG9wcGVkICE9PSBGT1JDRURfU1RPUCAmJiAoIC8vIDFcbiAgICAgICFjdXJSZWNvZ25pemVyIHx8IHJlY29nbml6ZXIgPT09IGN1clJlY29nbml6ZXIgfHwgLy8gMlxuICAgICAgcmVjb2duaXplci5jYW5SZWNvZ25pemVXaXRoKGN1clJlY29nbml6ZXIpKSkge1xuICAgICAgICAvLyAzXG4gICAgICAgIHJlY29nbml6ZXIucmVjb2duaXplKGlucHV0RGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNvZ25pemVyLnJlc2V0KCk7XG4gICAgICB9IC8vIGlmIHRoZSByZWNvZ25pemVyIGhhcyBiZWVuIHJlY29nbml6aW5nIHRoZSBpbnB1dCBhcyBhIHZhbGlkIGdlc3R1cmUsIHdlIHdhbnQgdG8gc3RvcmUgdGhpcyBvbmUgYXMgdGhlXG4gICAgICAvLyBjdXJyZW50IGFjdGl2ZSByZWNvZ25pemVyLiBidXQgb25seSBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4gYWN0aXZlIHJlY29nbml6ZXJcblxuXG4gICAgICBpZiAoIWN1clJlY29nbml6ZXIgJiYgcmVjb2duaXplci5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCkpIHtcbiAgICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgICAgY3VyUmVjb2duaXplciA9IHJlY29nbml6ZXI7XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBnZXQgYSByZWNvZ25pemVyIGJ5IGl0cyBldmVudCBuYW1lLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE51bGx9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmdldCA9IGZ1bmN0aW9uIGdldChyZWNvZ25pemVyKSB7XG4gICAgaWYgKHJlY29nbml6ZXIgaW5zdGFuY2VvZiBSZWNvZ25pemVyKSB7XG4gICAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgICB9XG5cbiAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWNvZ25pemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlY29nbml6ZXJzW2ldLm9wdGlvbnMuZXZlbnQgPT09IHJlY29nbml6ZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlY29nbml6ZXJzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgYWRkIGEgcmVjb2duaXplciB0byB0aGUgbWFuYWdlclxuICAgKiBleGlzdGluZyByZWNvZ25pemVycyB3aXRoIHRoZSBzYW1lIGV2ZW50IG5hbWUgd2lsbCBiZSByZW1vdmVkXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gcmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxNYW5hZ2VyfVxuICAgKi9cblxuXG4gIF9wcm90by5hZGQgPSBmdW5jdGlvbiBhZGQocmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhyZWNvZ25pemVyLCBcImFkZFwiLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSAvLyByZW1vdmUgZXhpc3RpbmdcblxuXG4gICAgdmFyIGV4aXN0aW5nID0gdGhpcy5nZXQocmVjb2duaXplci5vcHRpb25zLmV2ZW50KTtcblxuICAgIGlmIChleGlzdGluZykge1xuICAgICAgdGhpcy5yZW1vdmUoZXhpc3RpbmcpO1xuICAgIH1cblxuICAgIHRoaXMucmVjb2duaXplcnMucHVzaChyZWNvZ25pemVyKTtcbiAgICByZWNvZ25pemVyLm1hbmFnZXIgPSB0aGlzO1xuICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgcmV0dXJuIHJlY29nbml6ZXI7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZW1vdmUgYSByZWNvZ25pemVyIGJ5IG5hbWUgb3IgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gcmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICovXG5cblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKHJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgXCJyZW1vdmVcIiwgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRSZWNvZ25pemVyID0gdGhpcy5nZXQocmVjb2duaXplcik7IC8vIGxldCdzIG1ha2Ugc3VyZSB0aGlzIHJlY29nbml6ZXIgZXhpc3RzXG5cbiAgICBpZiAocmVjb2duaXplcikge1xuICAgICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcbiAgICAgIHZhciBpbmRleCA9IGluQXJyYXkocmVjb2duaXplcnMsIHRhcmdldFJlY29nbml6ZXIpO1xuXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHJlY29nbml6ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBiaW5kIGV2ZW50XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICAgKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLm9uID0gZnVuY3Rpb24gb24oZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkIHx8IGhhbmRsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaGFuZGxlcnNbZXZlbnRdID0gaGFuZGxlcnNbZXZlbnRdIHx8IFtdO1xuICAgICAgaGFuZGxlcnNbZXZlbnRdLnB1c2goaGFuZGxlcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSB1bmJpbmQgZXZlbnQsIGxlYXZlIGVtaXQgYmxhbmsgdG8gcmVtb3ZlIGFsbCBoYW5kbGVyc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtoYW5kbGVyXVxuICAgKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLm9mZiA9IGZ1bmN0aW9uIG9mZihldmVudHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgZWFjaChzcGxpdFN0cihldmVudHMpLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICBkZWxldGUgaGFuZGxlcnNbZXZlbnRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlcnNbZXZlbnRdICYmIGhhbmRsZXJzW2V2ZW50XS5zcGxpY2UoaW5BcnJheShoYW5kbGVyc1tldmVudF0sIGhhbmRsZXIpLCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIGVtaXQgZXZlbnQgdG8gdGhlIGxpc3RlbmVyc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICovXG5cblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGRhdGEpIHtcbiAgICAvLyB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dlciBkb20gZXZlbnRzXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kb21FdmVudHMpIHtcbiAgICAgIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSk7XG4gICAgfSAvLyBubyBoYW5kbGVycywgc28gc2tpcCBpdCBhbGxcblxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc1tldmVudF0gJiYgdGhpcy5oYW5kbGVyc1tldmVudF0uc2xpY2UoKTtcblxuICAgIGlmICghaGFuZGxlcnMgfHwgIWhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGEudHlwZSA9IGV2ZW50O1xuXG4gICAgZGF0YS5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRhdGEuc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgIGhhbmRsZXJzW2ldKGRhdGEpO1xuICAgICAgaSsrO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGRlc3Ryb3kgdGhlIG1hbmFnZXIgYW5kIHVuYmluZHMgYWxsIGV2ZW50c1xuICAgKiBpdCBkb2Vzbid0IHVuYmluZCBkb20gZXZlbnRzLCB0aGF0IGlzIHRoZSB1c2VyIG93biByZXNwb25zaWJpbGl0eVxuICAgKi9cblxuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmVsZW1lbnQgJiYgdG9nZ2xlQ3NzUHJvcHModGhpcywgZmFsc2UpO1xuICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICB0aGlzLnNlc3Npb24gPSB7fTtcbiAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICB0aGlzLmVsZW1lbnQgPSBudWxsO1xuICB9O1xuXG4gIHJldHVybiBNYW5hZ2VyO1xufSgpO1xuXG52YXIgU0lOR0xFX1RPVUNIX0lOUFVUX01BUCA9IHtcbiAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gIHRvdWNobW92ZTogSU5QVVRfTU9WRSxcbiAgdG91Y2hlbmQ6IElOUFVUX0VORCxcbiAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcbnZhciBTSU5HTEVfVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0JztcbnZhciBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBUb3VjaCBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgU2luZ2xlVG91Y2hJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKFNpbmdsZVRvdWNoSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gU2luZ2xlVG91Y2hJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBTaW5nbGVUb3VjaElucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldlRhcmdldCA9IFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gU0lOR0xFX1RPVUNIX1dJTkRPV19FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU2luZ2xlVG91Y2hJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHR5cGUgPSBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBzaG91bGQgd2UgaGFuZGxlIHRoZSB0b3VjaCBldmVudHM/XG5cbiAgICBpZiAodHlwZSA9PT0gSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdG91Y2hlcyA9IG5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMuY2FsbCh0aGlzLCBldiwgdHlwZSk7IC8vIHdoZW4gZG9uZSwgcmVzZXQgdGhlIHN0YXJ0ZWQgc3RhdGVcblxuICAgIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgdG91Y2hlc1swXS5sZW5ndGggLSB0b3VjaGVzWzFdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIHR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiB0b3VjaGVzWzFdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gU2luZ2xlVG91Y2hJbnB1dDtcbn0oSW5wdXQpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVTaW5nbGVUb3VjaGVzKGV2LCB0eXBlKSB7XG4gIHZhciBhbGwgPSB0b0FycmF5KGV2LnRvdWNoZXMpO1xuICB2YXIgY2hhbmdlZCA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpO1xuXG4gIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICBhbGwgPSB1bmlxdWVBcnJheShhbGwuY29uY2F0KGNoYW5nZWQpLCAnaWRlbnRpZmllcicsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIFthbGwsIGNoYW5nZWRdO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3cmFwIGEgbWV0aG9kIHdpdGggYSBkZXByZWNhdGlvbiB3YXJuaW5nIGFuZCBzdGFjayB0cmFjZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBuZXcgZnVuY3Rpb24gd3JhcHBpbmcgdGhlIHN1cHBsaWVkIG1ldGhvZC5cbiAqL1xuZnVuY3Rpb24gZGVwcmVjYXRlKG1ldGhvZCwgbmFtZSwgbWVzc2FnZSkge1xuICB2YXIgZGVwcmVjYXRpb25NZXNzYWdlID0gXCJERVBSRUNBVEVEIE1FVEhPRDogXCIgKyBuYW1lICsgXCJcXG5cIiArIG1lc3NhZ2UgKyBcIiBBVCBcXG5cIjtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZSA9IG5ldyBFcnJvcignZ2V0LXN0YWNrLXRyYWNlJyk7XG4gICAgdmFyIHN0YWNrID0gZSAmJiBlLnN0YWNrID8gZS5zdGFjay5yZXBsYWNlKC9eW15cXChdKz9bXFxuJF0vZ20sICcnKS5yZXBsYWNlKC9eXFxzK2F0XFxzKy9nbSwgJycpLnJlcGxhY2UoL15PYmplY3QuPGFub255bW91cz5cXHMqXFwoL2dtLCAne2Fub255bW91c30oKUAnKSA6ICdVbmtub3duIFN0YWNrIFRyYWNlJztcbiAgICB2YXIgbG9nID0gd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLndhcm4gfHwgd2luZG93LmNvbnNvbGUubG9nKTtcblxuICAgIGlmIChsb2cpIHtcbiAgICAgIGxvZy5jYWxsKHdpbmRvdy5jb25zb2xlLCBkZXByZWNhdGlvbk1lc3NhZ2UsIHN0YWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGV4dGVuZCBvYmplY3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgaW4gZGVzdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBvbmVzIGluIHNyYy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXN0XG4gKiBAcGFyYW0ge09iamVjdH0gc3JjXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFttZXJnZT1mYWxzZV1cbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xuXG52YXIgZXh0ZW5kID0gZGVwcmVjYXRlKGZ1bmN0aW9uIChkZXN0LCBzcmMsIG1lcmdlKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwga2V5cy5sZW5ndGgpIHtcbiAgICBpZiAoIW1lcmdlIHx8IG1lcmdlICYmIGRlc3Rba2V5c1tpXV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVzdFtrZXlzW2ldXSA9IHNyY1trZXlzW2ldXTtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn0sICdleHRlbmQnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBtZXJnZSB0aGUgdmFsdWVzIGZyb20gc3JjIGluIHRoZSBkZXN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIHRoYXQgZXhpc3QgaW4gZGVzdCB3aWxsIG5vdCBiZSBvdmVyd3JpdHRlbiBieSBzcmNcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXN0XG4gKiBAcGFyYW0ge09iamVjdH0gc3JjXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBkZXN0XG4gKi9cblxudmFyIG1lcmdlID0gZGVwcmVjYXRlKGZ1bmN0aW9uIChkZXN0LCBzcmMpIHtcbiAgcmV0dXJuIGV4dGVuZChkZXN0LCBzcmMsIHRydWUpO1xufSwgJ21lcmdlJywgJ1VzZSBgYXNzaWduYC4nKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc2ltcGxlIGNsYXNzIGluaGVyaXRhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGlsZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYmFzZVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXVxuICovXG5cbmZ1bmN0aW9uIGluaGVyaXQoY2hpbGQsIGJhc2UsIHByb3BlcnRpZXMpIHtcbiAgdmFyIGJhc2VQID0gYmFzZS5wcm90b3R5cGU7XG4gIHZhciBjaGlsZFA7XG4gIGNoaWxkUCA9IGNoaWxkLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYmFzZVApO1xuICBjaGlsZFAuY29uc3RydWN0b3IgPSBjaGlsZDtcbiAgY2hpbGRQLl9zdXBlciA9IGJhc2VQO1xuXG4gIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgYXNzaWduJDEoY2hpbGRQLCBwcm9wZXJ0aWVzKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzaW1wbGUgZnVuY3Rpb24gYmluZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGJpbmRGbihmbiwgY29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm91bmRGbigpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogU2ltcGxlIHdheSB0byBjcmVhdGUgYSBtYW5hZ2VyIHdpdGggYSBkZWZhdWx0IHNldCBvZiByZWNvZ25pemVycy5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBIYW1tZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICB2YXIgSGFtbWVyID1cbiAgLyoqXG4gICAgKiBAcHJpdmF0ZVxuICAgICogQGNvbnN0IHtzdHJpbmd9XG4gICAgKi9cbiAgZnVuY3Rpb24gSGFtbWVyKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNYW5hZ2VyKGVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgIHJlY29nbml6ZXJzOiBwcmVzZXQuY29uY2F0KClcbiAgICB9LCBvcHRpb25zKSk7XG4gIH07XG5cbiAgSGFtbWVyLlZFUlNJT04gPSBcIjIuMC4xNy1yY1wiO1xuICBIYW1tZXIuRElSRUNUSU9OX0FMTCA9IERJUkVDVElPTl9BTEw7XG4gIEhhbW1lci5ESVJFQ1RJT05fRE9XTiA9IERJUkVDVElPTl9ET1dOO1xuICBIYW1tZXIuRElSRUNUSU9OX0xFRlQgPSBESVJFQ1RJT05fTEVGVDtcbiAgSGFtbWVyLkRJUkVDVElPTl9SSUdIVCA9IERJUkVDVElPTl9SSUdIVDtcbiAgSGFtbWVyLkRJUkVDVElPTl9VUCA9IERJUkVDVElPTl9VUDtcbiAgSGFtbWVyLkRJUkVDVElPTl9IT1JJWk9OVEFMID0gRElSRUNUSU9OX0hPUklaT05UQUw7XG4gIEhhbW1lci5ESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVkVSVElDQUw7XG4gIEhhbW1lci5ESVJFQ1RJT05fTk9ORSA9IERJUkVDVElPTl9OT05FO1xuICBIYW1tZXIuRElSRUNUSU9OX0RPV04gPSBESVJFQ1RJT05fRE9XTjtcbiAgSGFtbWVyLklOUFVUX1NUQVJUID0gSU5QVVRfU1RBUlQ7XG4gIEhhbW1lci5JTlBVVF9NT1ZFID0gSU5QVVRfTU9WRTtcbiAgSGFtbWVyLklOUFVUX0VORCA9IElOUFVUX0VORDtcbiAgSGFtbWVyLklOUFVUX0NBTkNFTCA9IElOUFVUX0NBTkNFTDtcbiAgSGFtbWVyLlNUQVRFX1BPU1NJQkxFID0gU1RBVEVfUE9TU0lCTEU7XG4gIEhhbW1lci5TVEFURV9CRUdBTiA9IFNUQVRFX0JFR0FOO1xuICBIYW1tZXIuU1RBVEVfQ0hBTkdFRCA9IFNUQVRFX0NIQU5HRUQ7XG4gIEhhbW1lci5TVEFURV9FTkRFRCA9IFNUQVRFX0VOREVEO1xuICBIYW1tZXIuU1RBVEVfUkVDT0dOSVpFRCA9IFNUQVRFX1JFQ09HTklaRUQ7XG4gIEhhbW1lci5TVEFURV9DQU5DRUxMRUQgPSBTVEFURV9DQU5DRUxMRUQ7XG4gIEhhbW1lci5TVEFURV9GQUlMRUQgPSBTVEFURV9GQUlMRUQ7XG4gIEhhbW1lci5NYW5hZ2VyID0gTWFuYWdlcjtcbiAgSGFtbWVyLklucHV0ID0gSW5wdXQ7XG4gIEhhbW1lci5Ub3VjaEFjdGlvbiA9IFRvdWNoQWN0aW9uO1xuICBIYW1tZXIuVG91Y2hJbnB1dCA9IFRvdWNoSW5wdXQ7XG4gIEhhbW1lci5Nb3VzZUlucHV0ID0gTW91c2VJbnB1dDtcbiAgSGFtbWVyLlBvaW50ZXJFdmVudElucHV0ID0gUG9pbnRlckV2ZW50SW5wdXQ7XG4gIEhhbW1lci5Ub3VjaE1vdXNlSW5wdXQgPSBUb3VjaE1vdXNlSW5wdXQ7XG4gIEhhbW1lci5TaW5nbGVUb3VjaElucHV0ID0gU2luZ2xlVG91Y2hJbnB1dDtcbiAgSGFtbWVyLlJlY29nbml6ZXIgPSBSZWNvZ25pemVyO1xuICBIYW1tZXIuQXR0clJlY29nbml6ZXIgPSBBdHRyUmVjb2duaXplcjtcbiAgSGFtbWVyLlRhcCA9IFRhcFJlY29nbml6ZXI7XG4gIEhhbW1lci5QYW4gPSBQYW5SZWNvZ25pemVyO1xuICBIYW1tZXIuU3dpcGUgPSBTd2lwZVJlY29nbml6ZXI7XG4gIEhhbW1lci5QaW5jaCA9IFBpbmNoUmVjb2duaXplcjtcbiAgSGFtbWVyLlJvdGF0ZSA9IFJvdGF0ZVJlY29nbml6ZXI7XG4gIEhhbW1lci5QcmVzcyA9IFByZXNzUmVjb2duaXplcjtcbiAgSGFtbWVyLm9uID0gYWRkRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5vZmYgPSByZW1vdmVFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLmVhY2ggPSBlYWNoO1xuICBIYW1tZXIubWVyZ2UgPSBtZXJnZTtcbiAgSGFtbWVyLmV4dGVuZCA9IGV4dGVuZDtcbiAgSGFtbWVyLmJpbmRGbiA9IGJpbmRGbjtcbiAgSGFtbWVyLmFzc2lnbiA9IGFzc2lnbiQxO1xuICBIYW1tZXIuaW5oZXJpdCA9IGluaGVyaXQ7XG4gIEhhbW1lci5iaW5kRm4gPSBiaW5kRm47XG4gIEhhbW1lci5wcmVmaXhlZCA9IHByZWZpeGVkO1xuICBIYW1tZXIudG9BcnJheSA9IHRvQXJyYXk7XG4gIEhhbW1lci5pbkFycmF5ID0gaW5BcnJheTtcbiAgSGFtbWVyLnVuaXF1ZUFycmF5ID0gdW5pcXVlQXJyYXk7XG4gIEhhbW1lci5zcGxpdFN0ciA9IHNwbGl0U3RyO1xuICBIYW1tZXIuYm9vbE9yRm4gPSBib29sT3JGbjtcbiAgSGFtbWVyLmhhc1BhcmVudCA9IGhhc1BhcmVudDtcbiAgSGFtbWVyLmFkZEV2ZW50TGlzdGVuZXJzID0gYWRkRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5yZW1vdmVFdmVudExpc3RlbmVycyA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIuZGVmYXVsdHMgPSBhc3NpZ24kMSh7fSwgZGVmYXVsdHMsIHtcbiAgICBwcmVzZXQ6IHByZXNldFxuICB9KTtcbiAgcmV0dXJuIEhhbW1lcjtcbn0oKTtcblxuLy8gIHN0eWxlIGxvYWRlciBidXQgYnkgc2NyaXB0IHRhZywgbm90IGJ5IHRoZSBsb2FkZXIuXG5cbnZhciBkZWZhdWx0cyQxID0gSGFtbWVyLmRlZmF1bHRzO1xuXG5leHBvcnQgZGVmYXVsdCBIYW1tZXI7XG5leHBvcnQgeyBJTlBVVF9TVEFSVCwgSU5QVVRfTU9WRSwgSU5QVVRfRU5ELCBJTlBVVF9DQU5DRUwsIFNUQVRFX1BPU1NJQkxFLCBTVEFURV9CRUdBTiwgU1RBVEVfQ0hBTkdFRCwgU1RBVEVfRU5ERUQsIFNUQVRFX1JFQ09HTklaRUQsIFNUQVRFX0NBTkNFTExFRCwgU1RBVEVfRkFJTEVELCBESVJFQ1RJT05fTk9ORSwgRElSRUNUSU9OX0xFRlQsIERJUkVDVElPTl9SSUdIVCwgRElSRUNUSU9OX1VQLCBESVJFQ1RJT05fRE9XTiwgRElSRUNUSU9OX0hPUklaT05UQUwsIERJUkVDVElPTl9WRVJUSUNBTCwgRElSRUNUSU9OX0FMTCwgTWFuYWdlciwgSW5wdXQsIFRvdWNoQWN0aW9uLCBUb3VjaElucHV0LCBNb3VzZUlucHV0LCBQb2ludGVyRXZlbnRJbnB1dCwgVG91Y2hNb3VzZUlucHV0LCBTaW5nbGVUb3VjaElucHV0LCBSZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwgVGFwUmVjb2duaXplciBhcyBUYXAsIFBhblJlY29nbml6ZXIgYXMgUGFuLCBTd2lwZVJlY29nbml6ZXIgYXMgU3dpcGUsIFBpbmNoUmVjb2duaXplciBhcyBQaW5jaCwgUm90YXRlUmVjb2duaXplciBhcyBSb3RhdGUsIFByZXNzUmVjb2duaXplciBhcyBQcmVzcywgYWRkRXZlbnRMaXN0ZW5lcnMgYXMgb24sIHJlbW92ZUV2ZW50TGlzdGVuZXJzIGFzIG9mZiwgZWFjaCwgbWVyZ2UsIGV4dGVuZCwgYXNzaWduJDEgYXMgYXNzaWduLCBpbmhlcml0LCBiaW5kRm4sIHByZWZpeGVkLCB0b0FycmF5LCBpbkFycmF5LCB1bmlxdWVBcnJheSwgc3BsaXRTdHIsIGJvb2xPckZuLCBoYXNQYXJlbnQsIGFkZEV2ZW50TGlzdGVuZXJzLCByZW1vdmVFdmVudExpc3RlbmVycywgZGVmYXVsdHMkMSBhcyBkZWZhdWx0cyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFtbWVyLmVzbS5qcy5tYXBcbiIsICIvKipcbiAqIHZpcy11dGlsXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdmlzanMvdmlzLXV0aWxcbiAqXG4gKiB1dGlsaXRpZSBjb2xsZWN0aW9uIGZvciB2aXNqc1xuICpcbiAqIEB2ZXJzaW9uIDUuMC43XG4gKiBAZGF0ZSAgICAyMDIzLTExLTIwVDA5OjA2OjUxLjA2N1pcbiAqXG4gKiBAY29weXJpZ2h0IChjKSAyMDExLTIwMTcgQWxtZW5kZSBCLlYsIGh0dHA6Ly9hbG1lbmRlLmNvbVxuICogQGNvcHlyaWdodCAoYykgMjAxNy0yMDE5IHZpc2pzIGNvbnRyaWJ1dG9ycywgaHR0cHM6Ly9naXRodWIuY29tL3Zpc2pzXG4gKlxuICogQGxpY2Vuc2VcbiAqIHZpcy5qcyBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIGJvdGhcbiAqXG4gKiAgIDEuIFRoZSBBcGFjaGUgMi4wIExpY2Vuc2VcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogICBhbmRcbiAqXG4gKiAgIDIuIFRoZSBNSVQgTGljZW5zZVxuICogICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4gKlxuICogdmlzLmpzIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBlaXRoZXIgbGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgRW1pdHRlciBmcm9tICdjb21wb25lbnQtZW1pdHRlcic7XG5pbXBvcnQgUmVhbEhhbW1lciBmcm9tICdAZWdqcy9oYW1tZXJqcyc7XG5cbi8qKlxyXG4gKiBVc2UgdGhpcyBzeW1ib2wgdG8gZGVsZXRlIHByb3BlcmllcyBpbiBkZWVwT2JqZWN0QXNzaWduLlxyXG4gKi9cclxuY29uc3QgREVMRVRFID0gU3ltYm9sKFwiREVMRVRFXCIpO1xyXG4vKipcclxuICogUHVyZSB2ZXJzaW9uIG9mIGRlZXBPYmplY3RBc3NpZ24sIGl0IGRvZXNuJ3QgbW9kaWZ5IGFueSBvZiBpdCdzIGFyZ3VtZW50cy5cclxuICpcclxuICogQHBhcmFtIGJhc2UgLSBUaGUgYmFzZSBvYmplY3QgdGhhdCBmdWxsZmlscyB0aGUgd2hvbGUgaW50ZXJmYWNlIFQuXHJcbiAqIEBwYXJhbSB1cGRhdGVzIC0gVXBkYXRlcyB0aGF0IG1heSBjaGFuZ2Ugb3IgZGVsZXRlIHByb3BzLlxyXG4gKiBAcmV0dXJucyBBIGJyYW5kIG5ldyBpbnN0YW5jZSB3aXRoIGFsbCB0aGUgc3VwcGxpZWQgb2JqZWN0cyBkZWVwbHkgbWVyZ2VkLlxyXG4gKi9cclxuZnVuY3Rpb24gcHVyZURlZXBPYmplY3RBc3NpZ24oYmFzZSwgLi4udXBkYXRlcykge1xyXG4gICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ24oe30sIGJhc2UsIC4uLnVwZGF0ZXMpO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIHZlcnNpb24gb2Ygb2JqZWN0IGFzc2lnbiB3aXRoIGFkZGl0aW9uYWwgZGVsZXRpbmcgYnkgdGhlIERFTEVURSBzeW1ib2wuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3RzIHRvIGJlIGRlZXBseSBtZXJnZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBvYmplY3QgZnJvbSB2YWx1ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwT2JqZWN0QXNzaWduKC4uLnZhbHVlcykge1xyXG4gICAgY29uc3QgbWVyZ2VkID0gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KC4uLnZhbHVlcyk7XHJcbiAgICBzdHJpcERlbGV0ZShtZXJnZWQpO1xyXG4gICAgcmV0dXJuIG1lcmdlZDtcclxufVxyXG4vKipcclxuICogRGVlcCB2ZXJzaW9uIG9mIG9iamVjdCBhc3NpZ24gd2l0aCBhZGRpdGlvbmFsIGRlbGV0aW5nIGJ5IHRoZSBERUxFVEUgc3ltYm9sLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBUaGlzIGRvZXNuJ3Qgc3RyaXAgdGhlIERFTEVURSBzeW1ib2xzIHNvIHRoZXkgbWF5IGVuZCB1cCBpbiB0aGUgZmluYWwgb2JqZWN0LlxyXG4gKiBAcGFyYW0gdmFsdWVzIC0gT2JqZWN0cyB0byBiZSBkZWVwbHkgbWVyZ2VkLlxyXG4gKiBAcmV0dXJucyBUaGUgZmlyc3Qgb2JqZWN0IGZyb20gdmFsdWVzLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KC4uLnZhbHVlcykge1xyXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeShkZWVwT2JqZWN0QXNzaWduKHZhbHVlc1swXSwgdmFsdWVzWzFdKSwgLi4udmFsdWVzLnNsaWNlKDIpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGEgPSB2YWx1ZXNbMF07XHJcbiAgICBjb25zdCBiID0gdmFsdWVzWzFdO1xyXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgYS5zZXRUaW1lKGIuZ2V0VGltZSgpKTtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBSZWZsZWN0Lm93bktleXMoYikpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChiLCBwcm9wKSkgO1xyXG4gICAgICAgIGVsc2UgaWYgKGJbcHJvcF0gPT09IERFTEVURSkge1xyXG4gICAgICAgICAgICBkZWxldGUgYVtwcm9wXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYVtwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICBiW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBhW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBiW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGFbcHJvcF0pICYmXHJcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoYVtwcm9wXSwgYltwcm9wXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gY2xvbmUoYltwcm9wXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgY2xvbmUgZ2l2ZW4gb2JqZWN0IG9yIGFycmF5LiBJbiBjYXNlIG9mIHByaW1pdGl2ZSBzaW1wbHkgcmV0dXJuLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIEFueXRoaW5nLlxyXG4gKiBAcmV0dXJucyBEZWVwIGNsb25lZCBvYmplY3QvYXJyYXkgb3IgdW5jaGFuZ2VkIGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBjbG9uZShhKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xyXG4gICAgICAgIHJldHVybiBhLm1hcCgodmFsdWUpID0+IGNsb25lKHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJvYmplY3RcIiAmJiBhICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShhLmdldFRpbWUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoe30sIGEpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFN0cmlwIERFTEVURSBmcm9tIGdpdmVuIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIGEgLSBPYmplY3Qgd2hpY2ggbWF5IGNvbnRhaW4gREVMRVRFIGJ1dCB3b24ndCBhZnRlciB0aGlzIGlzIGV4ZWN1dGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gc3RyaXBEZWxldGUoYSkge1xyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5rZXlzKGEpKSB7XHJcbiAgICAgICAgaWYgKGFbcHJvcF0gPT09IERFTEVURSkge1xyXG4gICAgICAgICAgICBkZWxldGUgYVtwcm9wXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiYgYVtwcm9wXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzdHJpcERlbGV0ZShhW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuLyoqXHJcbiAqIFNlZWRhYmxlLCBmYXN0IGFuZCByZWFzb25hYmx5IGdvb2QgKG5vdCBjcnlwdG8gYnV0IG1vcmUgdGhhbiBva2F5IGZvciBvdXJcclxuICogbmVlZHMpIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBBZGFwdGVkIGZyb20ge0BsaW5rIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDExMDQyOTEwMDczNi9odHRwOi8vYmFhZ29lLmNvbTo4MC9lbi9SYW5kb21NdXNpbmdzL2phdmFzY3JpcHR9LlxyXG4gKiBPcmlnaW5hbCBhbGdvcml0aG0gY3JlYXRlZCBieSBKb2hhbm5lcyBCYWFnw7hlIFxcPGJhYWdvZVxcQGJhYWdvZS5jb21cXD4gaW4gMjAxMC5cclxuICovXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBzZWVkZWQgcHNldWRvIHJhbmRvbSBnZW5lcmF0b3IgYmFzZWQgb24gQWxlYSBieSBKb2hhbm5lcyBCYWFnw7hlLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIEFsbCBzdXBwbGllZCBhcmd1bWVudHMgd2lsbCBiZSB1c2VkIGFzIGEgc2VlZC4gSW4gY2FzZSBub3RoaW5nXHJcbiAqIGlzIHN1cHBsaWVkIHRoZSBjdXJyZW50IHRpbWUgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIGdlbmVyYXRvci5cclxuICogQHJldHVybnMgQSByZWFkeSB0byB1c2Ugc2VlZGVkIGdlbmVyYXRvci5cclxuICovXHJcbmZ1bmN0aW9uIEFsZWEoLi4uc2VlZCkge1xyXG4gICAgcmV0dXJuIEFsZWFJbXBsZW1lbnRhdGlvbihzZWVkLmxlbmd0aCA/IHNlZWQgOiBbRGF0ZS5ub3coKV0pO1xyXG59XHJcbi8qKlxyXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBbW0FsZWFdXSB3aXRob3V0IHVzZXIgaW5wdXQgdmFsaWRhdGlvbi5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBUaGUgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCB0byBzZWVkIHRoZSBnZW5lcmF0b3IuXHJcbiAqIEByZXR1cm5zIEEgcmVhZHkgdG8gdXNlIHNlZWRlZCBnZW5lcmF0b3IuXHJcbiAqL1xyXG5mdW5jdGlvbiBBbGVhSW1wbGVtZW50YXRpb24oc2VlZCkge1xyXG4gICAgbGV0IFtzMCwgczEsIHMyXSA9IG1hc2hTZWVkKHNlZWQpO1xyXG4gICAgbGV0IGMgPSAxO1xyXG4gICAgY29uc3QgcmFuZG9tID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHQgPSAyMDkxNjM5ICogczAgKyBjICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcclxuICAgICAgICBzMCA9IHMxO1xyXG4gICAgICAgIHMxID0gczI7XHJcbiAgICAgICAgcmV0dXJuIChzMiA9IHQgLSAoYyA9IHQgfCAwKSk7XHJcbiAgICB9O1xyXG4gICAgcmFuZG9tLnVpbnQzMiA9ICgpID0+IHJhbmRvbSgpICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcclxuICAgIHJhbmRvbS5mcmFjdDUzID0gKCkgPT4gcmFuZG9tKCkgKyAoKHJhbmRvbSgpICogMHgyMDAwMDApIHwgMCkgKiAxLjExMDIyMzAyNDYyNTE1NjVlLTE2OyAvLyAyXi01M1xyXG4gICAgcmFuZG9tLmFsZ29yaXRobSA9IFwiQWxlYVwiO1xyXG4gICAgcmFuZG9tLnNlZWQgPSBzZWVkO1xyXG4gICAgcmFuZG9tLnZlcnNpb24gPSBcIjAuOVwiO1xyXG4gICAgcmV0dXJuIHJhbmRvbTtcclxufVxyXG4vKipcclxuICogVHVybiBhcmJpdHJhcnkgZGF0YSBpbnRvIHZhbHVlcyBbW0FsZWFJbXBsZW1lbnRhdGlvbl1dIGNhbiB1c2UgdG8gZ2VuZXJhdGVcclxuICogcmFuZG9tIG51bWJlcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gQXJiaXRyYXJ5IGRhdGEgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlZWQuXHJcbiAqIEByZXR1cm5zIFRocmVlIG51bWJlcnMgdG8gdXNlIGFzIGluaXRpYWwgdmFsdWVzIGZvciBbW0FsZWFJbXBsZW1lbnRhdGlvbl1dLlxyXG4gKi9cclxuZnVuY3Rpb24gbWFzaFNlZWQoLi4uc2VlZCkge1xyXG4gICAgY29uc3QgbWFzaCA9IE1hc2goKTtcclxuICAgIGxldCBzMCA9IG1hc2goXCIgXCIpO1xyXG4gICAgbGV0IHMxID0gbWFzaChcIiBcIik7XHJcbiAgICBsZXQgczIgPSBtYXNoKFwiIFwiKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VlZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHMwIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMwIDwgMCkge1xyXG4gICAgICAgICAgICBzMCArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzMSAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMSA8IDApIHtcclxuICAgICAgICAgICAgczEgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgczIgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczIgPCAwKSB7XHJcbiAgICAgICAgICAgIHMyICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtzMCwgczEsIHMyXTtcclxufVxyXG4vKipcclxuICogQ3JlYXRlIGEgbmV3IG1hc2ggZnVuY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm5zIEEgbm9ucHVyZSBmdW5jdGlvbiB0aGF0IHRha2VzIGFyYml0cmFyeSBbW01hc2hhYmxlXV0gZGF0YSBhbmQgdHVybnNcclxuICogdGhlbSBpbnRvIG51bWJlcnMuXHJcbiAqL1xyXG5mdW5jdGlvbiBNYXNoKCkge1xyXG4gICAgbGV0IG4gPSAweGVmYzgyNDlkO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyaW5nID0gZGF0YS50b1N0cmluZygpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG4gKz0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgICAgIGxldCBoID0gMC4wMjUxOTYwMzI4MjQxNjkzOCAqIG47XHJcbiAgICAgICAgICAgIG4gPSBoID4+PiAwO1xyXG4gICAgICAgICAgICBoIC09IG47XHJcbiAgICAgICAgICAgIGggKj0gbjtcclxuICAgICAgICAgICAgbiA9IGggPj4+IDA7XHJcbiAgICAgICAgICAgIGggLT0gbjtcclxuICAgICAgICAgICAgbiArPSBoICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChuID4+PiAwKSAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXHJcbiAgICB9O1xyXG59XG5cbi8qKlxuICogU2V0dXAgYSBtb2NrIGhhbW1lci5qcyBvYmplY3QsIGZvciB1bml0IHRlc3RpbmcuXG4gKlxuICogSW5zcGlyYXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS91YmVyL2RlY2suZ2wvcHVsbC82NThcbiAqXG4gKiBAcmV0dXJucyB7e29uOiBub29wLCBvZmY6IG5vb3AsIGRlc3Ryb3k6IG5vb3AsIGVtaXQ6IG5vb3AsIGdldDogZ2V0fX1cbiAqL1xuZnVuY3Rpb24gaGFtbWVyTW9jaygpIHtcbiAgY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4gIHJldHVybiB7XG4gICAgb246IG5vb3AsXG4gICAgb2ZmOiBub29wLFxuICAgIGRlc3Ryb3k6IG5vb3AsXG4gICAgZW1pdDogbm9vcCxcblxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldDogbm9vcCxcbiAgICAgIH07XG4gICAgfSxcbiAgfTtcbn1cblxuY29uc3QgSGFtbWVyJDEgPVxuICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgPyB3aW5kb3cuSGFtbWVyIHx8IFJlYWxIYW1tZXJcbiAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gaGFtbWVyLmpzIGlzIG9ubHkgYXZhaWxhYmxlIGluIGEgYnJvd3Nlciwgbm90IGluIG5vZGUuanMuIFJlcGxhY2luZyBpdCB3aXRoIGEgbW9jayBvYmplY3QuXG4gICAgICAgIHJldHVybiBoYW1tZXJNb2NrKCk7XG4gICAgICB9O1xuXG4vKipcbiAqIFR1cm4gYW4gZWxlbWVudCBpbnRvIGFuIGNsaWNrVG9Vc2UgZWxlbWVudC5cbiAqIFdoZW4gbm90IGFjdGl2ZSwgdGhlIGVsZW1lbnQgaGFzIGEgdHJhbnNwYXJlbnQgb3ZlcmxheS4gV2hlbiB0aGUgb3ZlcmxheSBpc1xuICogY2xpY2tlZCwgdGhlIG1vZGUgaXMgY2hhbmdlZCB0byBhY3RpdmUuXG4gKiBXaGVuIGFjdGl2ZSwgdGhlIGVsZW1lbnQgaXMgZGlzcGxheWVkIHdpdGggYSBibHVlIGJvcmRlciBhcm91bmQgaXQsIGFuZFxuICogdGhlIGludGVyYWN0aXZlIGNvbnRlbnRzIG9mIHRoZSBlbGVtZW50IGNhbiBiZSB1c2VkLiBXaGVuIGNsaWNrZWQgb3V0c2lkZVxuICogdGhlIGVsZW1lbnQsIHRoZSBlbGVtZW50cyBtb2RlIGlzIGNoYW5nZWQgdG8gaW5hY3RpdmUuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAqIEBjbGFzcyBBY3RpdmF0b3JcbiAqL1xuZnVuY3Rpb24gQWN0aXZhdG9yJDEoY29udGFpbmVyKSB7XG4gIHRoaXMuX2NsZWFudXBRdWV1ZSA9IFtdO1xuXG4gIHRoaXMuYWN0aXZlID0gZmFsc2U7XG5cbiAgdGhpcy5fZG9tID0ge1xuICAgIGNvbnRhaW5lcixcbiAgICBvdmVybGF5OiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICB9O1xuXG4gIHRoaXMuX2RvbS5vdmVybGF5LmNsYXNzTGlzdC5hZGQoXCJ2aXMtb3ZlcmxheVwiKTtcblxuICB0aGlzLl9kb20uY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgIHRoaXMuX2RvbS5vdmVybGF5LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZG9tLm92ZXJsYXkpO1xuICB9KTtcblxuICBjb25zdCBoYW1tZXIgPSBIYW1tZXIkMSh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIGhhbW1lci5vbihcInRhcFwiLCB0aGlzLl9vblRhcE92ZXJsYXkuYmluZCh0aGlzKSk7XG4gIHRoaXMuX2NsZWFudXBRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICBoYW1tZXIuZGVzdHJveSgpO1xuICAgIC8vIEZJWE1FOiBjbGVhbmluZyB1cCBoYW1tZXIgaW5zdGFuY2VzIGRvZXNuJ3Qgd29yayAoVGltZWxpbmUgbm90IHJlbW92ZWRcbiAgICAvLyBmcm9tIG1lbW9yeSlcbiAgfSk7XG5cbiAgLy8gYmxvY2sgYWxsIHRvdWNoIGV2ZW50cyAoZXhjZXB0IHRhcClcbiAgY29uc3QgZXZlbnRzID0gW1xuICAgIFwidGFwXCIsXG4gICAgXCJkb3VibGV0YXBcIixcbiAgICBcInByZXNzXCIsXG4gICAgXCJwaW5jaFwiLFxuICAgIFwicGFuXCIsXG4gICAgXCJwYW5zdGFydFwiLFxuICAgIFwicGFubW92ZVwiLFxuICAgIFwicGFuZW5kXCIsXG4gIF07XG4gIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgIGhhbW1lci5vbihldmVudCwgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5zcmNFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gYXR0YWNoIGEgY2xpY2sgZXZlbnQgdG8gdGhlIHdpbmRvdywgaW4gb3JkZXIgdG8gZGVhY3RpdmF0ZSB3aGVuIGNsaWNraW5nIG91dHNpZGUgdGhlIHRpbWVsaW5lXG4gIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5ib2R5KSB7XG4gICAgdGhpcy5fb25DbGljayA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKCFfaGFzUGFyZW50KGV2ZW50LnRhcmdldCwgY29udGFpbmVyKSkge1xuICAgICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX29uQ2xpY2spO1xuICAgIHRoaXMuX2NsZWFudXBRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX29uQ2xpY2spO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gcHJlcGFyZSBlc2NhcGUga2V5IGxpc3RlbmVyIGZvciBkZWFjdGl2YXRpbmcgd2hlbiBhY3RpdmVcbiAgdGhpcy5fZXNjTGlzdGVuZXIgPSAoZXZlbnQpID0+IHtcbiAgICBpZiAoXG4gICAgICBcImtleVwiIGluIGV2ZW50XG4gICAgICAgID8gZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiXG4gICAgICAgIDogZXZlbnQua2V5Q29kZSA9PT0gMjcgLyogdGhlIGtleUNvZGUgaXMgZm9yIElFMTEgKi9cbiAgICApIHtcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgIH1cbiAgfTtcbn1cblxuLy8gdHVybiBpbnRvIGFuIGV2ZW50IGVtaXR0ZXJcbkVtaXR0ZXIoQWN0aXZhdG9yJDEucHJvdG90eXBlKTtcblxuLy8gVGhlIGN1cnJlbnRseSBhY3RpdmUgYWN0aXZhdG9yXG5BY3RpdmF0b3IkMS5jdXJyZW50ID0gbnVsbDtcblxuLyoqXG4gKiBEZXN0cm95IHRoZSBhY3RpdmF0b3IuIENsZWFucyB1cCBhbGwgY3JlYXRlZCBET00gYW5kIGV2ZW50IGxpc3RlbmVyc1xuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5kZWFjdGl2YXRlKCk7XG5cbiAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLl9jbGVhbnVwUXVldWUuc3BsaWNlKDApLnJldmVyc2UoKSkge1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cbn07XG5cbi8qKlxuICogQWN0aXZhdGUgdGhlIGVsZW1lbnRcbiAqIE92ZXJsYXkgaXMgaGlkZGVuLCBlbGVtZW50IGlzIGRlY29yYXRlZCB3aXRoIGEgYmx1ZSBzaGFkb3cgYm9yZGVyXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gd2UgYWxsb3cgb25seSBvbmUgYWN0aXZlIGFjdGl2YXRvciBhdCBhIHRpbWVcbiAgaWYgKEFjdGl2YXRvciQxLmN1cnJlbnQpIHtcbiAgICBBY3RpdmF0b3IkMS5jdXJyZW50LmRlYWN0aXZhdGUoKTtcbiAgfVxuICBBY3RpdmF0b3IkMS5jdXJyZW50ID0gdGhpcztcblxuICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gIHRoaXMuX2RvbS5vdmVybGF5LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgdGhpcy5fZG9tLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwidmlzLWFjdGl2ZVwiKTtcblxuICB0aGlzLmVtaXQoXCJjaGFuZ2VcIik7XG4gIHRoaXMuZW1pdChcImFjdGl2YXRlXCIpO1xuXG4gIC8vIHVnbHkgaGFjazogYmluZCBFU0MgYWZ0ZXIgZW1pdHRpbmcgdGhlIGV2ZW50cywgYXMgdGhlIE5ldHdvcmsgcmViaW5kcyBhbGxcbiAgLy8ga2V5Ym9hcmQgZXZlbnRzIG9uIGEgJ2NoYW5nZScgZXZlbnRcbiAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLl9lc2NMaXN0ZW5lcik7XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGUgdGhlIGVsZW1lbnRcbiAqIE92ZXJsYXkgaXMgZGlzcGxheWVkIG9uIHRvcCBvZiB0aGUgZWxlbWVudFxuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgdGhpcy5fZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgdGhpcy5fZG9tLmNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwidmlzLWFjdGl2ZVwiKTtcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLl9lc2NMaXN0ZW5lcik7XG5cbiAgdGhpcy5lbWl0KFwiY2hhbmdlXCIpO1xuICB0aGlzLmVtaXQoXCJkZWFjdGl2YXRlXCIpO1xufTtcblxuLyoqXG4gKiBIYW5kbGUgYSB0YXAgZXZlbnQ6IGFjdGl2YXRlIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5fb25UYXBPdmVybGF5ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIC8vIGFjdGl2YXRlIHRoZSBjb250YWluZXJcbiAgdGhpcy5hY3RpdmF0ZSgpO1xuICBldmVudC5zcmNFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn07XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyB0aGUgcmVxdWVzdGVkIHBhcmVudCBlbGVtZW50IHNvbWV3aGVyZSBpblxuICogaXRzIGNoYWluIG9mIHBhcmVudCBub2Rlcy5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYXJlbnRcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgcGFyZW50IGlzIGZvdW5kIHNvbWV3aGVyZSBpbiB0aGVcbiAqICAgICAgICAgICAgICAgICAgICBjaGFpbiBvZiBwYXJlbnQgbm9kZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xuICB3aGlsZSAoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50ID09PSBwYXJlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gdXRpbGl0eSBmdW5jdGlvbnNcclxuLy8gcGFyc2UgQVNQLk5ldCBEYXRlIHBhdHRlcm4sXHJcbi8vIGZvciBleGFtcGxlICcvRGF0ZSgxMTk4OTA4NzE3MDU2KS8nIG9yICcvRGF0ZSgxMTk4OTA4NzE3MDU2LTA3MDApLydcclxuLy8gY29kZSBmcm9tIGh0dHA6Ly9tb21lbnRqcy5jb20vXHJcbmNvbnN0IEFTUERhdGVSZWdleCA9IC9eXFwvP0RhdGVcXCgoLT9cXGQrKS9pO1xyXG4vLyBDb2xvciBSRXNcclxuY29uc3QgZnVsbEhleFJFID0gL14jPyhbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KSQvaTtcclxuY29uc3Qgc2hvcnRIZXhSRSA9IC9eIz8oW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkkL2k7XHJcbmNvbnN0IHJnYlJFID0gL15yZ2JcXCggKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKlxcKSQvaTtcclxuY29uc3QgcmdiYVJFID0gL15yZ2JhXFwoICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooWzAxXXwwP1xcLlxcZCspICpcXCkkL2k7XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgbnVtYmVyLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgbnVtYmVyLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIjtcclxufVxyXG4vKipcclxuICogUmVtb3ZlIGV2ZXJ5dGhpbmcgaW4gdGhlIERPTSBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBET01vYmplY3QgLSBOb2RlIHdob3NlIGNoaWxkIG5vZGVzIHdpbGwgYmUgcmVjdXJzaXZlbHkgZGVsZXRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHJlY3Vyc2l2ZURPTURlbGV0ZShET01vYmplY3QpIHtcclxuICAgIGlmIChET01vYmplY3QpIHtcclxuICAgICAgICB3aGlsZSAoRE9Nb2JqZWN0Lmhhc0NoaWxkTm9kZXMoKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IERPTW9iamVjdC5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZURPTURlbGV0ZShjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICBET01vYmplY3QucmVtb3ZlQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgc3RyaW5nLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIjtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIG9iamVjdCAobm90IHByaW1pdGl2ZSBvciBudWxsKS5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIG5vdCBudWxsIG9iamVjdCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGw7XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBEYXRlLCBvciBhIFN0cmluZyBjb250YWluaW5nIGEgRGF0ZS5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIERhdGUgaW5zdGFuY2Ugb3Igc3RyaW5nIGRhdGUgcmVwcmVzZW50YXRpb24sIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xyXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XHJcbiAgICAgICAgLy8gdGVzdCB3aGV0aGVyIHRoaXMgc3RyaW5nIGNvbnRhaW5zIGEgZGF0ZVxyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gQVNQRGF0ZVJlZ2V4LmV4ZWModmFsdWUpO1xyXG4gICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIWlzTmFOKERhdGUucGFyc2UodmFsdWUpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuLyoqXHJcbiAqIENvcHkgcHJvcGVydHkgZnJvbSBiIHRvIGEgaWYgcHJvcGVydHkgcHJlc2VudCBpbiBhLlxyXG4gKiBJZiBwcm9wZXJ0eSBpbiBiIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwsIGRlbGV0ZSBpdCBpZiBgYWxsb3dEZWxldGlvbmAgc2V0LlxyXG4gKlxyXG4gKiBJbnRlcm5hbCBoZWxwZXIgcm91dGluZSwgc2hvdWxkIG5vdCBiZSBleHBvcnRlZC4gTm90IGFkZGVkIHRvIGBleHBvcnRzYCBmb3IgdGhhdCByZWFzb24uXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gcHJvcCAtIE5hbWUgb2YgcHJvcGVydHkgdG8gY29weSBmcm9tIGIgdG8gYS5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydHkgaW4gYSBpZiBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbikge1xyXG4gICAgbGV0IGRvRGVsZXRpb24gPSBmYWxzZTtcclxuICAgIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlKSB7XHJcbiAgICAgICAgZG9EZWxldGlvbiA9IGJbcHJvcF0gPT09IG51bGwgJiYgYVtwcm9wXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgaWYgKGRvRGVsZXRpb24pIHtcclxuICAgICAgICBkZWxldGUgYVtwcm9wXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdOyAvLyBSZW1lbWJlciwgdGhpcyBpcyBhIHJlZmVyZW5jZSBjb3B5IVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBGaWxsIGFuIG9iamVjdCB3aXRoIGEgcG9zc2libHkgcGFydGlhbGx5IGRlZmluZWQgb3RoZXIgb2JqZWN0LlxyXG4gKlxyXG4gKiBPbmx5IGNvcGllcyB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0aWVzIGFscmVhZHkgcHJlc2VudCBpbiBhLlxyXG4gKiBUaGF0IG1lYW5zIGFuIG9iamVjdCBpcyBub3QgY3JlYXRlZCBvbiBhIHByb3BlcnR5IGlmIG9ubHkgdGhlIGIgb2JqZWN0IGhhcyBpdC5cclxuICpcclxuICogQHBhcmFtIGEgLSBUaGUgb2JqZWN0IHRoYXQgd2lsbCBoYXZlIGl0J3MgcHJvcGVydGllcyB1cGRhdGVkLlxyXG4gKiBAcGFyYW0gYiAtIFRoZSBvYmplY3Qgd2l0aCBwcm9wZXJ0eSB1cGRhdGVzLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0aWVzIGluIGEgdGhhdCBhcmUgZXhwbGljaXRseSBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKi9cclxuZnVuY3Rpb24gZmlsbElmRGVmaW5lZChhLCBiLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIC8vIE5PVEU6IGl0ZXJhdGlvbiBvZiBwcm9wZXJ0aWVzIG9mIGFcclxuICAgIC8vIE5PVEU6IHByb3RvdHlwZSBwcm9wZXJ0aWVzIGl0ZXJhdGVkIG92ZXIgYXMgd2VsbFxyXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGEpIHtcclxuICAgICAgICBpZiAoYltwcm9wXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChiW3Byb3BdID09PSBudWxsIHx8IHR5cGVvZiBiW3Byb3BdICE9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBOb3RlOiB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFQcm9wID0gYVtwcm9wXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJQcm9wID0gYltwcm9wXTtcclxuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChhUHJvcCkgJiYgaXNPYmplY3QoYlByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbElmRGVmaW5lZChhUHJvcCwgYlByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgb2YgYWxsIG9mIHRoZSBlbnVtZXJhYmxlIG93biBwcm9wZXJ0aWVzIGZyb20gb25lIG9yIG1vcmUgc291cmNlIG9iamVjdHMgdG8gYVxyXG4gKiB0YXJnZXQgb2JqZWN0LiBSZXR1cm5zIHRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIHRhcmdldCBvYmplY3QgdG8gY29weSB0by5cclxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSBzb3VyY2Ugb2JqZWN0IGZyb20gd2hpY2ggdG8gY29weSBwcm9wZXJ0aWVzLlxyXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdC5cclxuICovXHJcbmNvbnN0IGV4dGVuZCA9IE9iamVjdC5hc3NpZ247XHJcbi8qKlxyXG4gKiBFeHRlbmQgb2JqZWN0IGEgd2l0aCBzZWxlY3RlZCBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiIG9yIGEgc2VyaWVzIG9mIG9iamVjdHMuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWQgdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBwcm9wcyAtIFByb3BlcnRpZXMgdG8gYmUgY29waWVkIHRvIGEuXHJcbiAqIEBwYXJhbSBhIC0gVGhlIHRhcmdldC5cclxuICogQHBhcmFtIG90aGVycyAtIFRoZSBzb3VyY2VzLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlRXh0ZW5kKHByb3BzLCBhLCAuLi5vdGhlcnMpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wcykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBcnJheSB3aXRoIHByb3BlcnR5IG5hbWVzIGV4cGVjdGVkIGFzIGZpcnN0IGFyZ3VtZW50XCIpO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBvdGhlciBvZiBvdGhlcnMpIHtcclxuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IHByb3BzLmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1twXTtcclxuICAgICAgICAgICAgaWYgKG90aGVyICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0gPSBvdGhlcltwcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBFeHRlbmQgb2JqZWN0IGEgd2l0aCBzZWxlY3RlZCBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxyXG4gKiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBQcmV2aW91cyB2ZXJzaW9uIG9mIHRoaXMgcm91dGluZSBpbXBsaWVkIHRoYXQgbXVsdGlwbGUgc291cmNlIG9iamVjdHMgY291bGRcclxuICogYmUgdXNlZDsgaG93ZXZlciwgdGhlIGltcGxlbWVudGF0aW9uIHdhcyAqKndyb25nKiouIFNpbmNlIG11bHRpcGxlIChcXD4xKVxyXG4gKiBzb3VyY2VzIHdlcmVuJ3QgdXNlZCBhbnl3aGVyZSBpbiB0aGUgYHZpcy5qc2AgY29kZSwgdGhpcyBoYXMgYmVlbiByZW1vdmVkXHJcbiAqIEBwYXJhbSBwcm9wcyAtIE5hbWVzIG9mIGZpcnN0LWxldmVsIHByb3BlcnRpZXMgdG8gY29weSBvdmVyLlxyXG4gKiBAcGFyYW0gYSAtIFRhcmdldCBvYmplY3QuXHJcbiAqIEBwYXJhbSBiIC0gU291cmNlIG9iamVjdC5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydHkgaW4gYSBpZiBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVEZWVwRXh0ZW5kKHByb3BzLCBhLCBiLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBBcnJheXMgdG8gZGVlcEV4dGVuZFxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBwID0gMDsgcCA8IHByb3BzLmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW3BdO1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkpIHtcclxuICAgICAgICAgICAgaWYgKGJbcHJvcF0gJiYgYltwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYVtwcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSwgZmFsc2UsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBFeHRlbmQgb2JqZWN0IGBhYCB3aXRoIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGBiYCwgaWdub3JpbmcgcHJvcGVydGllcyB3aGljaFxyXG4gKiBhcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgdG8gYmUgZXhjbHVkZWQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoZSBwcm9wZXJ0aWVzIG9mIGBiYCBhcmUgY29uc2lkZXJlZCBmb3IgY29weWluZy4gUHJvcGVydGllcyB3aGljaCBhcmVcclxuICogdGhlbXNlbHZlcyBvYmplY3RzIGFyZSBhcmUgYWxzbyBleHRlbmRlZC4gT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZFxyXG4gKiB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICogQHBhcmFtIHByb3BzVG9FeGNsdWRlIC0gTmFtZXMgb2YgcHJvcGVydGllcyB3aGljaCBzaG91bGQgKm5vdCogYmUgY29waWVkLlxyXG4gKiBAcGFyYW0gYSAtIE9iamVjdCB0byBleHRlbmQuXHJcbiAqIEBwYXJhbSBiIC0gT2JqZWN0IHRvIHRha2UgcHJvcGVydGllcyBmcm9tIGZvciBleHRlbnNpb24uXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnRpZXMgaW4gYSB0aGF0IGFyZSBleHBsaWNpdGx5XHJcbiAqIHNldCB0byBudWxsIGluIGIuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kKHByb3BzVG9FeGNsdWRlLCBhLCBiLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBBcnJheXMgdG8gZGVlcEV4dGVuZFxyXG4gICAgLy8gTk9URTogYXJyYXkgcHJvcGVydGllcyBoYXZlIGFuIGVsc2UtYmVsb3c7IGFwcGFyZW50bHksIHRoZXJlIGlzIGEgcHJvYmxlbSBoZXJlLlxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYikge1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHByb3ApKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gLy8gSGFuZGxlIGxvY2FsIHByb3BlcnRpZXMgb25seVxyXG4gICAgICAgIGlmIChwcm9wc1RvRXhjbHVkZS5pbmNsdWRlcyhwcm9wKSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9IC8vIEluIGV4Y2x1c2lvbiBsaXN0LCBza2lwXHJcbiAgICAgICAgaWYgKGJbcHJvcF0gJiYgYltwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0pOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJbcHJvcF0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0ucHVzaChiW3Byb3BdW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIGV4dGVuZCBhbiBvYmplY3QgYSB3aXRoIHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRhcmdldCBvYmplY3QuXHJcbiAqIEBwYXJhbSBiIC0gU291cmNlIG9iamVjdC5cclxuICogQHBhcmFtIHByb3RvRXh0ZW5kIC0gSWYgdHJ1ZSwgdGhlIHByb3RvdHlwZSB2YWx1ZXMgd2lsbCBhbHNvIGJlIGV4dGVuZGVkLlxyXG4gKiAoVGhhdCBpcyB0aGUgb3B0aW9ucyBvYmplY3RzIHRoYXQgaW5oZXJpdCBmcm9tIG90aGVycyB3aWxsIGFsc28gZ2V0IHRoZVxyXG4gKiBpbmhlcml0ZWQgb3B0aW9ucykuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgdGhlIHZhbHVlcyBvZiBmaWVsZHMgdGhhdCBhcmUgbnVsbCB3aWxsIGJlIGRlbGV0ZWQuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwRXh0ZW5kKGEsIGIsIHByb3RvRXh0ZW5kID0gZmFsc2UsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGIpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHByb3ApIHx8IHByb3RvRXh0ZW5kID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYltwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICAgICAgYltwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGJbcHJvcF0pID09PSBPYmplY3QucHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYVtwcm9wXSA9IGRlZXBFeHRlbmQoe30sIGJbcHJvcF0sIHByb3RvRXh0ZW5kKTsgLy8gTk9URTogYWxsb3dEZWxldGlvbiBub3QgcHJvcGFnYXRlZCFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBhW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYVtwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihhW3Byb3BdKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSwgcHJvdG9FeHRlbmQpOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdLnNsaWNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGFsbCBlbGVtZW50cyBpbiB0d28gYXJyYXlzIGFyZSBlcXVhbC5cclxuICpcclxuICogQHBhcmFtIGEgLSBGaXJzdCBhcnJheS5cclxuICogQHBhcmFtIGIgLSBTZWNvbmQgYXJyYXkuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgYm90aCBhcnJheXMgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYW5kIHNhbWUgZWxlbWVudHMgKDEgPSAnMScpLlxyXG4gKi9cclxuZnVuY3Rpb24gZXF1YWxBcnJheShhLCBiKSB7XHJcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG4vKipcclxuICogR2V0IHRoZSB0eXBlIG9mIGFuIG9iamVjdCwgZm9yIGV4YW1wbGUgZXhwb3J0cy5nZXRUeXBlKFtdKSByZXR1cm5zICdBcnJheScuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIERldGVjdGVkIHR5cGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUeXBlKG9iamVjdCkge1xyXG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBvYmplY3Q7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQm9vbGVhbikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJCb29sZWFuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiTnVtYmVyXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiQXJyYXlcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiRGF0ZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJPYmplY3RcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiTnVtYmVyXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJCb29sZWFuXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiBcIlN0cmluZ1wiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHR5cGU7XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gZXh0ZW5kIGFuIGFycmF5IGFuZCBjb3B5IGl0LiBUaGlzIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHBhdGhzIHJlY3Vyc2l2ZWx5LlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJyIC0gRmlyc3QgcGFydC5cclxuICogQHBhcmFtIG5ld1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIGFhZGRlZCBpbnRvIHRoZSBhcnJheS5cclxuICogQHJldHVybnMgQSBuZXcgYXJyYXkgd2l0aCBhbGwgaXRlbXMgZnJvbSBhcnIgYW5kIG5ld1ZhbHVlICh3aGljaCBpcyBsYXN0KS5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlBbmRFeHRlbmRBcnJheShhcnIsIG5ld1ZhbHVlKSB7XHJcbiAgICByZXR1cm4gWy4uLmFyciwgbmV3VmFsdWVdO1xyXG59XHJcbi8qKlxyXG4gKiBVc2VkIHRvIGV4dGVuZCBhbiBhcnJheSBhbmQgY29weSBpdC4gVGhpcyBpcyB1c2VkIHRvIHByb3BhZ2F0ZSBwYXRocyByZWN1cnNpdmVseS5cclxuICpcclxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBiZSBjb3BpZWQuXHJcbiAqIEByZXR1cm5zIFNoYWxsb3cgY29weSBvZiBhcnIuXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3B5QXJyYXkoYXJyKSB7XHJcbiAgICByZXR1cm4gYXJyLnNsaWNlKCk7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSBsZWZ0IHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBsZWZ0IHBvc2l0aW9uIG9mIHRoaXMgZWxlbWVudCBpbiB0aGUgYnJvd3NlciBwYWdlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWJzb2x1dGVMZWZ0KGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSByaWdodCB2YWx1ZSBvZiBhIERPTSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIEEgZG9tIGVsZW1lbnQsIGZvciBleGFtcGxlIGEgZGl2LlxyXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcmlnaHQgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZVJpZ2h0KGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0O1xyXG59XHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgYWJzb2x1dGUgdG9wIHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSB0b3AgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZVRvcChlbGVtKSB7XHJcbiAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcbn1cclxuLyoqXHJcbiAqIEFkZCBhIGNsYXNzTmFtZSB0byB0aGUgZ2l2ZW4gZWxlbWVudHMgc3R5bGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIGNsYXNzZXMgd2lsbCBiZSBhZGRlZC5cclxuICogQHBhcmFtIGNsYXNzTmFtZXMgLSBTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkQ2xhc3NOYW1lKGVsZW0sIGNsYXNzTmFtZXMpIHtcclxuICAgIGxldCBjbGFzc2VzID0gZWxlbS5jbGFzc05hbWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgY29uc3QgbmV3Q2xhc3NlcyA9IGNsYXNzTmFtZXMuc3BsaXQoXCIgXCIpO1xyXG4gICAgY2xhc3NlcyA9IGNsYXNzZXMuY29uY2F0KG5ld0NsYXNzZXMuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcclxuICAgICAgICByZXR1cm4gIWNsYXNzZXMuaW5jbHVkZXMoY2xhc3NOYW1lKTtcclxuICAgIH0pKTtcclxuICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgY2xhc3NOYW1lIGZyb20gdGhlIGdpdmVuIGVsZW1lbnRzIHN0eWxlLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIFRoZSBlbGVtZW50IGZyb20gd2hpY2ggdGhlIGNsYXNzZXMgd2lsbCBiZSByZW1vdmVkLlxyXG4gKiBAcGFyYW0gY2xhc3NOYW1lcyAtIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiByZW1vdmVDbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lcykge1xyXG4gICAgbGV0IGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBvbGRDbGFzc2VzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIik7XHJcbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhb2xkQ2xhc3Nlcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xyXG4gICAgfSk7XHJcbiAgICBlbGVtLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbihcIiBcIik7XHJcbn1cclxuLyoqXHJcbiAqIEZvciBlYWNoIG1ldGhvZCBmb3IgYm90aCBhcnJheXMgYW5kIG9iamVjdHMuXHJcbiAqIEluIGNhc2Ugb2YgYW4gYXJyYXksIHRoZSBidWlsdC1pbiBBcnJheS5mb3JFYWNoKCkgaXMgYXBwbGllZCAoKipObywgaXQncyBub3QhKiopLlxyXG4gKiBJbiBjYXNlIG9mIGFuIE9iamVjdCwgdGhlIG1ldGhvZCBsb29wcyBvdmVyIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBBbiBPYmplY3Qgb3IgQXJyYXkgdG8gYmUgaXRlcmF0ZWQgb3Zlci5cclxuICogQHBhcmFtIGNhbGxiYWNrIC0gQXJyYXkuZm9yRWFjaC1saWtlIGNhbGxiYWNrLlxyXG4gKi9cclxuZnVuY3Rpb24gZm9yRWFjaChvYmplY3QsIGNhbGxiYWNrKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XHJcbiAgICAgICAgLy8gYXJyYXlcclxuICAgICAgICBjb25zdCBsZW4gPSBvYmplY3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY2FsbGJhY2sob2JqZWN0W2ldLCBpLCBvYmplY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIG9iamVjdFxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sob2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBhbiBvYmplY3QgaW50byBhbiBhcnJheTogYWxsIG9iamVjdHMgcHJvcGVydGllcyBhcmUgcHV0IGludG8gdGhlIGFycmF5LiBUaGUgcmVzdWx0aW5nIGFycmF5IGlzIHVub3JkZXJlZC5cclxuICpcclxuICogQHBhcmFtIG8gLSBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy5cclxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgdW5vcmRlcmVkIHZhbHVlcy5cclxuICovXHJcbmNvbnN0IHRvQXJyYXkgPSBPYmplY3QudmFsdWVzO1xyXG4vKipcclxuICogVXBkYXRlIGEgcHJvcGVydHkgaW4gYW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gb2JqZWN0IC0gVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSB3aWxsIGJlIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSBrZXkgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBiZSB1cGRhdGVkLlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgbmV3IHZhbHVlIHRvIGJlIGFzc2lnbmVkLlxyXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB2YWx1ZSB3YXMgdXBkYXRlZCAodHJ1ZSkgb3IgYWxyZWFkeSBzdHJpY3RseSB0aGUgc2FtZSBpbiB0aGUgb3JpZ2luYWwgb2JqZWN0IChmYWxzZSkuXHJcbiAqL1xyXG5mdW5jdGlvbiB1cGRhdGVQcm9wZXJ0eShvYmplY3QsIGtleSwgdmFsdWUpIHtcclxuICAgIGlmIChvYmplY3Rba2V5XSAhPT0gdmFsdWUpIHtcclxuICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUaHJvdHRsZSB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gYmUgb25seSBleGVjdXRlZCBvbmNlIHBlciBhbmltYXRpb24gZnJhbWUuXHJcbiAqXHJcbiAqIEBwYXJhbSBmbiAtIFRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cclxuICogQHJldHVybnMgVGhlIHRocm90dGxlZCBmdW5jdGlvbi5cclxuICovXHJcbmZ1bmN0aW9uIHRocm90dGxlKGZuKSB7XHJcbiAgICBsZXQgc2NoZWR1bGVkID0gZmFsc2U7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgIGlmICghc2NoZWR1bGVkKSB7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZuKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIENhbmNlbHMgdGhlIGV2ZW50J3MgZGVmYXVsdCBhY3Rpb24gaWYgaXQgaXMgY2FuY2VsYWJsZSwgd2l0aG91dCBzdG9wcGluZyBmdXJ0aGVyIHByb3BhZ2F0aW9uIG9mIHRoZSBldmVudC5cclxuICpcclxuICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IHdob3NlIGRlZmF1bHQgYWN0aW9uIHNob3VsZCBiZSBwcmV2ZW50ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudCkge1xyXG4gICAgaWYgKCFldmVudCkge1xyXG4gICAgICAgIGV2ZW50ID0gd2luZG93LmV2ZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCFldmVudCkgO1xyXG4gICAgZWxzZSBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBub24tSUUgYnJvd3NlcnNcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIEBUT0RPOiBJRSB0eXBlcz8gRG9lcyBhbnlvbmUgY2FyZT9cclxuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlOyAvLyBJRSBicm93c2Vyc1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBHZXQgSFRNTCBlbGVtZW50IHdoaWNoIGlzIHRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQuXHJcbiAqIEByZXR1cm5zIFRoZSBlbGVtZW50IG9yIG51bGwgaWYgbm90IG9idGFpbmFibGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUYXJnZXQoZXZlbnQgPSB3aW5kb3cuZXZlbnQpIHtcclxuICAgIC8vIGNvZGUgZnJvbSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcclxuICAgIC8vIEBUT0RPOiBFdmVudFRhcmdldCBjYW4gYmUgYWxtb3N0IGFueXRoaW5nLCBpcyBpdCBva2F5IHRvIHJldHVybiBvbmx5IEVsZW1lbnRzP1xyXG4gICAgbGV0IHRhcmdldCA9IG51bGw7XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC50YXJnZXQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC50YXJnZXQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChldmVudC5zcmNFbGVtZW50KSB7XHJcbiAgICAgICAgdGFyZ2V0ID0gZXZlbnQuc3JjRWxlbWVudDtcclxuICAgIH1cclxuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGFyZ2V0Lm5vZGVUeXBlICE9IG51bGwgJiYgdGFyZ2V0Lm5vZGVUeXBlID09IDMpIHtcclxuICAgICAgICAvLyBkZWZlYXQgU2FmYXJpIGJ1Z1xyXG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn1cclxuLyoqXHJcbiAqIENoZWNrIGlmIGdpdmVuIGVsZW1lbnQgY29udGFpbnMgZ2l2ZW4gcGFyZW50IHNvbWV3aGVyZSBpbiB0aGUgRE9NIHRyZWUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gYmUgdGVzdGVkLlxyXG4gKiBAcGFyYW0gcGFyZW50IC0gVGhlIGFuY2VzdG9yIChub3QgbmVjZXNzYXJpbHkgcGFyZW50KSBvZiB0aGUgZWxlbWVudC5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBwYXJlbnQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGVsZW1lbnQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGhhc1BhcmVudChlbGVtZW50LCBwYXJlbnQpIHtcclxuICAgIGxldCBlbGVtID0gZWxlbWVudDtcclxuICAgIHdoaWxlIChlbGVtKSB7XHJcbiAgICAgICAgaWYgKGVsZW0gPT09IHBhcmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIGVsZW0gPSBlbGVtLnBhcmVudE5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmNvbnN0IG9wdGlvbiA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBib29sZWFuLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvYm9vbGVhbiwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBib29sZWFuIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0Jvb2xlYW4odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIG51bWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b251bWJlciwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogbnVtYmVyIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc051bWJlcih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKSB8fCBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzdHJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9zdHJpbmcsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIENvcnJlc3BvbmRpbmcgKipib3hlZCoqIHN0cmluZyB2YWx1ZSwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNTdHJpbmcodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgc2l6ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3NpemUsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIENvcnJlc3BvbmRpbmcgc3RyaW5nIHZhbHVlIChudW1iZXIgKyAncHgnKSwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNTaXplKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc051bWJlcih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgXCJweFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgRE9NIEVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG8gRE9NIEVsZW1lbnQsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIFRoZSBET00gRWxlbWVudCwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNFbGVtZW50KHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZSB8fCBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGhleCBjb2xvciBzdHJpbmcgaW50byBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiB7QGxpbmsgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NjIzODM4L3JnYi10by1oZXgtYW5kLWhleC10by1yZ2J9XHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nICgzIG9yIDYgZGlnaXRzLCB3aXRoIG9yIHdpdGhvdXQgIykuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBoZXhUb1JHQihoZXgpIHtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBzd2l0Y2ggKGhleC5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBzaG9ydEhleFJFLmV4ZWMoaGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdICsgcmVzdWx0WzFdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdICsgcmVzdWx0WzJdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdICsgcmVzdWx0WzNdLCAxNiksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgICAgcmVzdWx0ID0gZnVsbEhleFJFLmV4ZWMoaGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdLCAxNiksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgc3RyaW5nIGNvbG9yIGluIGhleCBvciBSR0IgZm9ybWF0IGFuZCBhZGRzIHRoZSBvcGFjaXR5LCBSR0JBIGlzIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZC5cclxuICpcclxuICogQHBhcmFtIGNvbG9yIC0gVGhlIGNvbG9yIHN0cmluZyAoaGV4LCBSR0IsIFJHQkEpLlxyXG4gKiBAcGFyYW0gb3BhY2l0eSAtIFRoZSBuZXcgb3BhY2l0eS5cclxuICogQHJldHVybnMgUkdCQSBzdHJpbmcsIGZvciBleGFtcGxlICdyZ2JhKDI1NSwgMCwgMTI3LCAwLjMpJy5cclxuICovXHJcbmZ1bmN0aW9uIG92ZXJyaWRlT3BhY2l0eShjb2xvciwgb3BhY2l0eSkge1xyXG4gICAgaWYgKGNvbG9yLmluY2x1ZGVzKFwicmdiYVwiKSkge1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbG9yLmluY2x1ZGVzKFwicmdiXCIpKSB7XHJcbiAgICAgICAgY29uc3QgcmdiID0gY29sb3JcclxuICAgICAgICAgICAgLnN1YnN0cihjb2xvci5pbmRleE9mKFwiKFwiKSArIDEpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiKVwiLCBcIlwiKVxyXG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIHJldHVybiBcInJnYmEoXCIgKyByZ2JbMF0gKyBcIixcIiArIHJnYlsxXSArIFwiLFwiICsgcmdiWzJdICsgXCIsXCIgKyBvcGFjaXR5ICsgXCIpXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihjb2xvcik7XHJcbiAgICAgICAgaWYgKHJnYiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcInJnYmEoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIsXCIgKyBvcGFjaXR5ICsgXCIpXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IFJHQiBcXDwwLCAyNTVcXD4gaW50byBoZXggY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVkIC0gUmVkIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBncmVlbiAtIEdyZWVuIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBibHVlIC0gQmx1ZSBjaGFubmVsLlxyXG4gKiBAcmV0dXJucyBIZXggY29sb3Igc3RyaW5nIChmb3IgZXhhbXBsZTogJyMwYWNkYzAnKS5cclxuICovXHJcbmZ1bmN0aW9uIFJHQlRvSGV4KHJlZCwgZ3JlZW4sIGJsdWUpIHtcclxuICAgIHJldHVybiAoXCIjXCIgKyAoKDEgPDwgMjQpICsgKHJlZCA8PCAxNikgKyAoZ3JlZW4gPDwgOCkgKyBibHVlKS50b1N0cmluZygxNikuc2xpY2UoMSkpO1xyXG59XHJcbi8qKlxyXG4gKiBQYXJzZSBhIGNvbG9yIHByb3BlcnR5IGludG8gYW4gb2JqZWN0IHdpdGggYm9yZGVyLCBiYWNrZ3JvdW5kLCBhbmQgaGlnaGxpZ2h0IGNvbG9ycy5cclxuICpcclxuICogQHBhcmFtIGlucHV0Q29sb3IgLSBTaG9ydGhhbmQgY29sb3Igc3RyaW5nIG9yIGlucHV0IGNvbG9yIG9iamVjdC5cclxuICogQHBhcmFtIGRlZmF1bHRDb2xvciAtIEZ1bGwgY29sb3Igb2JqZWN0IHRvIGZpbGwgaW4gbWlzc2luZyB2YWx1ZXMgaW4gaW5wdXRDb2xvci5cclxuICogQHJldHVybnMgQ29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gcGFyc2VDb2xvcihpbnB1dENvbG9yLCBkZWZhdWx0Q29sb3IpIHtcclxuICAgIGlmIChpc1N0cmluZyhpbnB1dENvbG9yKSkge1xyXG4gICAgICAgIGxldCBjb2xvclN0ciA9IGlucHV0Q29sb3I7XHJcbiAgICAgICAgaWYgKGlzVmFsaWRSR0IoY29sb3JTdHIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJnYiA9IGNvbG9yU3RyXHJcbiAgICAgICAgICAgICAgICAuc3Vic3RyKDQpXHJcbiAgICAgICAgICAgICAgICAuc3Vic3RyKDAsIGNvbG9yU3RyLmxlbmd0aCAtIDUpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCIsXCIpXHJcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbG9yU3RyID0gUkdCVG9IZXgocmdiWzBdLCByZ2JbMV0sIHJnYlsyXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1ZhbGlkSGV4KGNvbG9yU3RyKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBoc3YgPSBoZXhUb0hTVihjb2xvclN0cik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhTViA9IHtcclxuICAgICAgICAgICAgICAgIGg6IGhzdi5oLFxyXG4gICAgICAgICAgICAgICAgczogaHN2LnMgKiAwLjgsXHJcbiAgICAgICAgICAgICAgICB2OiBNYXRoLm1pbigxLCBoc3YudiAqIDEuMDIpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBkYXJrZXJDb2xvckhTViA9IHtcclxuICAgICAgICAgICAgICAgIGg6IGhzdi5oLFxyXG4gICAgICAgICAgICAgICAgczogTWF0aC5taW4oMSwgaHN2LnMgKiAxLjI1KSxcclxuICAgICAgICAgICAgICAgIHY6IGhzdi52ICogMC44LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBkYXJrZXJDb2xvckhleCA9IEhTVlRvSGV4KGRhcmtlckNvbG9ySFNWLmgsIGRhcmtlckNvbG9ySFNWLnMsIGRhcmtlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICBjb25zdCBsaWdodGVyQ29sb3JIZXggPSBIU1ZUb0hleChsaWdodGVyQ29sb3JIU1YuaCwgbGlnaHRlckNvbG9ySFNWLnMsIGxpZ2h0ZXJDb2xvckhTVi52KTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZGVmYXVsdENvbG9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5iYWNrZ3JvdW5kIHx8IGRlZmF1bHRDb2xvci5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmJvcmRlciB8fCBkZWZhdWx0Q29sb3IuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiBpc1N0cmluZyhpbnB1dENvbG9yLmhpZ2hsaWdodClcclxuICAgICAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5oaWdobGlnaHQgJiYgaW5wdXRDb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZCkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAoaW5wdXRDb2xvci5oaWdobGlnaHQgJiYgaW5wdXRDb2xvci5oaWdobGlnaHQuYm9yZGVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiBpc1N0cmluZyhpbnB1dENvbG9yLmhvdmVyKVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYm9yZGVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhvdmVyLmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhvdmVyLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmJvcmRlciB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiBpc1N0cmluZyhpbnB1dENvbG9yLmhvdmVyKVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYm9yZGVyKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCkgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIEhTViBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vd3d3LmphdmFzY3JpcHRlci5uZXQvZmFxL3JnYjJoc3YuaHRtfVxyXG4gKiBAcGFyYW0gcmVkIC0gUmVkIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBncmVlbiAtIEdyZWVuIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBibHVlIC0gQmx1ZSBjaGFubmVsLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IU1YocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmVkID0gcmVkIC8gMjU1O1xyXG4gICAgZ3JlZW4gPSBncmVlbiAvIDI1NTtcclxuICAgIGJsdWUgPSBibHVlIC8gMjU1O1xyXG4gICAgY29uc3QgbWluUkdCID0gTWF0aC5taW4ocmVkLCBNYXRoLm1pbihncmVlbiwgYmx1ZSkpO1xyXG4gICAgY29uc3QgbWF4UkdCID0gTWF0aC5tYXgocmVkLCBNYXRoLm1heChncmVlbiwgYmx1ZSkpO1xyXG4gICAgLy8gQmxhY2stZ3JheS13aGl0ZVxyXG4gICAgaWYgKG1pblJHQiA9PT0gbWF4UkdCKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgaDogMCwgczogMCwgdjogbWluUkdCIH07XHJcbiAgICB9XHJcbiAgICAvLyBDb2xvcnMgb3RoZXIgdGhhbiBibGFjay1ncmF5LXdoaXRlOlxyXG4gICAgY29uc3QgZCA9IHJlZCA9PT0gbWluUkdCID8gZ3JlZW4gLSBibHVlIDogYmx1ZSA9PT0gbWluUkdCID8gcmVkIC0gZ3JlZW4gOiBibHVlIC0gcmVkO1xyXG4gICAgY29uc3QgaCA9IHJlZCA9PT0gbWluUkdCID8gMyA6IGJsdWUgPT09IG1pblJHQiA/IDEgOiA1O1xyXG4gICAgY29uc3QgaHVlID0gKDYwICogKGggLSBkIC8gKG1heFJHQiAtIG1pblJHQikpKSAvIDM2MDtcclxuICAgIGNvbnN0IHNhdHVyYXRpb24gPSAobWF4UkdCIC0gbWluUkdCKSAvIG1heFJHQjtcclxuICAgIGNvbnN0IHZhbHVlID0gbWF4UkdCO1xyXG4gICAgcmV0dXJuIHsgaDogaHVlLCBzOiBzYXR1cmF0aW9uLCB2OiB2YWx1ZSB9O1xyXG59XHJcbi8qKlxyXG4gKiBTcGxpdCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgaW50byBhbiBvYmplY3Qgd2l0aCBrZXkvdmFsdWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIENTUyBzb3VyY2UgY29kZSB0byBzcGxpdCBpbnRvIGtleS92YWx1ZSBvYmplY3QuXHJcbiAqIEByZXR1cm5zIEtleS92YWx1ZSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB7QGxpbmsgY3NzVGV4dH0uXHJcbiAqL1xyXG5mdW5jdGlvbiBzcGxpdENTU1RleHQoY3NzVGV4dCkge1xyXG4gICAgY29uc3QgdG1wRWxsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgY29uc3Qgc3R5bGVzID0ge307XHJcbiAgICB0bXBFbGxlbWVudC5zdHlsZS5jc3NUZXh0ID0gY3NzVGV4dDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG1wRWxsZW1lbnQuc3R5bGUubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBzdHlsZXNbdG1wRWxsZW1lbnQuc3R5bGVbaV1dID0gdG1wRWxsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0bXBFbGxlbWVudC5zdHlsZVtpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGVzO1xyXG59XHJcbi8qKlxyXG4gKiBBcHBlbmQgYSBzdHJpbmcgd2l0aCBjc3Mgc3R5bGVzIHRvIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdGhhdCB3aWxsIHJlY2VpdmUgbmV3IHN0eWxlcy5cclxuICogQHBhcmFtIGNzc1RleHQgLSBUaGUgc3R5bGVzIHRvIGJlIGFwcGVuZGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgZnJvbSBhbiBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IGZyb20gd2hpY2ggc3R5bGVzIHNob3VsZCBiZSByZW1vdmVkLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgcmVtb3ZlZC5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNzc1RleHQoZWxlbWVudCwgY3NzVGV4dCkge1xyXG4gICAgY29uc3QgY3NzU3R5bGUgPSBzcGxpdENTU1RleHQoY3NzVGV4dCk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjc3NTdHlsZSkpIHtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgSFNWIFxcPDAsIDFcXD4gaW50byBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbWppamFja3Nvbi81MzExMjU2fVxyXG4gKiBAcGFyYW0gaCAtIEh1ZS5cclxuICogQHBhcmFtIHMgLSBTYXR1cmF0aW9uLlxyXG4gKiBAcGFyYW0gdiAtIFZhbHVlLlxyXG4gKiBAcmV0dXJucyBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gSFNWVG9SR0IoaCwgcywgdikge1xyXG4gICAgbGV0IHI7XHJcbiAgICBsZXQgZztcclxuICAgIGxldCBiO1xyXG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoaCAqIDYpO1xyXG4gICAgY29uc3QgZiA9IGggKiA2IC0gaTtcclxuICAgIGNvbnN0IHAgPSB2ICogKDEgLSBzKTtcclxuICAgIGNvbnN0IHEgPSB2ICogKDEgLSBmICogcyk7XHJcbiAgICBjb25zdCB0ID0gdiAqICgxIC0gKDEgLSBmKSAqIHMpO1xyXG4gICAgc3dpdGNoIChpICUgNikge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSB0KSwgKGIgPSBwKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAociA9IHEpLCAoZyA9IHYpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIChyID0gcCksIChnID0gdiksIChiID0gdCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSBxKSwgKGIgPSB2KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAociA9IHQpLCAoZyA9IHApLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIChyID0gdiksIChnID0gcCksIChiID0gcSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByOiBNYXRoLmZsb29yKHIgKiAyNTUpLFxyXG4gICAgICAgIGc6IE1hdGguZmxvb3IoZyAqIDI1NSksXHJcbiAgICAgICAgYjogTWF0aC5mbG9vcihiICogMjU1KSxcclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgSFNWIFxcPDAsIDFcXD4gaW50byBoZXggY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gaCAtIEh1ZS5cclxuICogQHBhcmFtIHMgLSBTYXR1cmF0aW9uLlxyXG4gKiBAcGFyYW0gdiAtIFZhbHVlLlxyXG4gKiBAcmV0dXJucyBIZXggY29sb3Igc3RyaW5nLlxyXG4gKi9cclxuZnVuY3Rpb24gSFNWVG9IZXgoaCwgcywgdikge1xyXG4gICAgY29uc3QgcmdiID0gSFNWVG9SR0IoaCwgcywgdik7XHJcbiAgICByZXR1cm4gUkdCVG9IZXgocmdiLnIsIHJnYi5nLCByZ2IuYik7XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIEhTViBcXDwwLCAxXFw+LlxyXG4gKlxyXG4gKiBAcGFyYW0gaGV4IC0gSGV4IGNvbG9yIHN0cmluZy5cclxuICogQHJldHVybnMgSFNWIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvSFNWKGhleCkge1xyXG4gICAgY29uc3QgcmdiID0gaGV4VG9SR0IoaGV4KTtcclxuICAgIGlmICghcmdiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7aGV4fScgaXMgbm90IGEgdmFsaWQgY29sb3IuYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUkdCVG9IU1YocmdiLnIsIHJnYi5nLCByZ2IuYik7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBVbmtub3duIHN0cmluZyB0aGF0IG1heSBjb250YWluIGEgY29sb3IuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNWYWxpZEhleChoZXgpIHtcclxuICAgIGNvbnN0IGlzT2sgPSAvKF4jWzAtOUEtRl17Nn0kKXwoXiNbMC05QS1GXXszfSQpL2kudGVzdChoZXgpO1xyXG4gICAgcmV0dXJuIGlzT2s7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIFJHQiBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2IgLSBVbmtub3duIHN0cmluZyB0aGF0IG1heSBjb250YWluIGEgY29sb3IuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNWYWxpZFJHQihyZ2IpIHtcclxuICAgIHJldHVybiByZ2JSRS50ZXN0KHJnYik7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIFJHQkEgY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmdiYSAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCQShyZ2JhKSB7XHJcbiAgICByZXR1cm4gcmdiYVJFLnRlc3QocmdiYSk7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gZmllbGRzIC0gTmFtZXMgb2YgcHJvcGVydGllcyB0byBiZSBicmlkZ2VkLlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgQSBuZXcgb2JqZWN0IGluaGVyaXRpbmcgZnJvbSB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlQnJpZGdlT2JqZWN0KGZpZWxkcywgcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiByZWZlcmVuY2VPYmplY3QgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAvLyAhISEgdHlwZW9mIG51bGwgPT09ICdvYmplY3QnXHJcbiAgICAgICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGZpZWxkc1tpXSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ZpZWxkc1tpXV0gPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFRvW2ZpZWxkc1tpXV0gPSBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0W2ZpZWxkc1tpXV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3RUbztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUaGlzIHJlY3Vyc2l2ZWx5IHJlZGlyZWN0cyB0aGUgcHJvdG90eXBlIG9mIEpTT04gb2JqZWN0cyB0byB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGRlZmF1bHQgb3B0aW9ucy5cclxuICpcclxuICogQHBhcmFtIHJlZmVyZW5jZU9iamVjdCAtIFRoZSBvcmlnaW5hbCBvYmplY3QuXHJcbiAqIEByZXR1cm5zIFRoZSBFbGVtZW50IGlmIHRoZSByZWZlcmVuY2VPYmplY3QgaXMgYW4gRWxlbWVudCwgb3IgYSBuZXcgb2JqZWN0IGluaGVyaXRpbmcgZnJvbSB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdCkge1xyXG4gICAgaWYgKHJlZmVyZW5jZU9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVmZXJlbmNlT2JqZWN0ICE9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0IGluc3RhbmNlb2YgRWxlbWVudCkge1xyXG4gICAgICAgIC8vIEF2b2lkIGJyaWRnaW5nIERPTSBvYmplY3RzXHJcbiAgICAgICAgcmV0dXJuIHJlZmVyZW5jZU9iamVjdDtcclxuICAgIH1cclxuICAgIGNvbnN0IG9iamVjdFRvID0gT2JqZWN0LmNyZWF0ZShyZWZlcmVuY2VPYmplY3QpO1xyXG4gICAgZm9yIChjb25zdCBpIGluIHJlZmVyZW5jZU9iamVjdCkge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVmZXJlbmNlT2JqZWN0LCBpKSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlZmVyZW5jZU9iamVjdFtpXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICBvYmplY3RUb1tpXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iamVjdFRvO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHN0YWJsZSBzb3J0IGltcGxlbWVudGF0aW9uLCB2ZXJ5IGZhc3QgZm9yIHByZXNvcnRlZCBkYXRhLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBhcnJheSB0byBiZSBzb3J0ZWQgKGluLXBsYWNlKS5cclxuICogQHBhcmFtIGNvbXBhcmUgLSBBbiBvcmRlciBjb21wYXJhdG9yLlxyXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGluc2VydFNvcnQoYSwgY29tcGFyZSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGFbaV07XHJcbiAgICAgICAgbGV0IGo7XHJcbiAgICAgICAgZm9yIChqID0gaTsgaiA+IDAgJiYgY29tcGFyZShrLCBhW2ogLSAxXSkgPCAwOyBqLS0pIHtcclxuICAgICAgICAgICAgYVtqXSA9IGFbaiAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhW2pdID0gaztcclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZSBvcHRpb25zIG9mIHN1Ym9iamVjdHMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxyXG4gKlxyXG4gKiBBIHJlcXVpcmVtZW50IG9mIHRoZXNlIHN1Ym9iamVjdHMgaXMgdGhhdCB0aGV5IGhhdmUgYW4gJ2VuYWJsZWQnIGVsZW1lbnRcclxuICogd2hpY2ggaXMgb3B0aW9uYWwgZm9yIHRoZSB1c2VyIGJ1dCBtYW5kYXRvcnkgZm9yIHRoZSBwcm9ncmFtLlxyXG4gKlxyXG4gKiBUaGUgYWRkZWQgdmFsdWUgaGVyZSBvZiB0aGUgbWVyZ2UgaXMgdGhhdCBvcHRpb24gJ2VuYWJsZWQnIGlzIHNldCBhcyByZXF1aXJlZC5cclxuICpcclxuICogQHBhcmFtIG1lcmdlVGFyZ2V0IC0gRWl0aGVyIHRoaXMub3B0aW9ucyBvciB0aGUgb3B0aW9ucyB1c2VkIGZvciB0aGUgZ3JvdXBzLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXHJcbiAqIEBwYXJhbSBvcHRpb24gLSBPcHRpb24ga2V5IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50LlxyXG4gKiBAcGFyYW0gZ2xvYmFsT3B0aW9ucyAtIEdsb2JhbCBvcHRpb25zLCBwYXNzZWQgaW4gdG8gZGV0ZXJtaW5lIHZhbHVlIG9mIG9wdGlvbiAnZW5hYmxlZCcuXHJcbiAqL1xyXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbiwgZ2xvYmFsT3B0aW9ucyA9IHt9KSB7XHJcbiAgICAvLyBMb2NhbCBoZWxwZXJzXHJcbiAgICBjb25zdCBpc1ByZXNlbnQgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiBvYmogIT09IHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBjb25zdCBpc09iamVjdCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCI7XHJcbiAgICB9O1xyXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM0NDkxMjg3LzEyMjM1MzFcclxuICAgIGNvbnN0IGlzRW1wdHkgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB4IGluIG9iaikge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgeCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICAvLyBHdWFyZHNcclxuICAgIGlmICghaXNPYmplY3QobWVyZ2VUYXJnZXQpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG1lcmdlVGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciBvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc1ByZXNlbnQob3B0aW9uKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciBvcHRpb24gbXVzdCBoYXZlIGEgdmFsdWVcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KGdsb2JhbE9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIGdsb2JhbE9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gQWN0dWFsIG1lcmdlIHJvdXRpbmUsIHNlcGFyYXRlZCBmcm9tIG1haW4gbG9naWNcclxuICAgIC8vIE9ubHkgYSBzaW5nbGUgbGV2ZWwgb2Ygb3B0aW9ucyBpcyBtZXJnZWQuIERlZXBlciBsZXZlbHMgYXJlIHJlZidkLiBUaGlzIG1heSBhY3R1YWxseSBiZSBhbiBpc3N1ZS5cclxuICAgIC8vXHJcbiAgICBjb25zdCBkb01lcmdlID0gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucywgb3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFpc09iamVjdCh0YXJnZXRbb3B0aW9uXSkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3JjID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgICAgIGNvbnN0IGRzdCA9IHRhcmdldFtvcHRpb25dO1xyXG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBzcmMpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzcmMsIHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBkc3RbcHJvcF0gPSBzcmNbcHJvcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLy8gTG9jYWwgaW5pdGlhbGl6YXRpb25cclxuICAgIGNvbnN0IHNyY09wdGlvbiA9IG9wdGlvbnNbb3B0aW9uXTtcclxuICAgIGNvbnN0IGdsb2JhbFBhc3NlZCA9IGlzT2JqZWN0KGdsb2JhbE9wdGlvbnMpICYmICFpc0VtcHR5KGdsb2JhbE9wdGlvbnMpO1xyXG4gICAgY29uc3QgZ2xvYmFsT3B0aW9uID0gZ2xvYmFsUGFzc2VkID8gZ2xvYmFsT3B0aW9uc1tvcHRpb25dIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgZ2xvYmFsRW5hYmxlZCA9IGdsb2JhbE9wdGlvbiA/IGdsb2JhbE9wdGlvbi5lbmFibGVkIDogdW5kZWZpbmVkO1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIE1haW4gcm91dGluZVxyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIGlmIChzcmNPcHRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkb1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzcmNPcHRpb24gPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICBtZXJnZVRhcmdldFtvcHRpb25dID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0uZW5hYmxlZCA9IHNyY09wdGlvbjtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoc3JjT3B0aW9uID09PSBudWxsICYmICFpc09iamVjdChtZXJnZVRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgIC8vIElmIHBvc3NpYmxlLCBleHBsaWNpdCBjb3B5IGZyb20gZ2xvYmFsc1xyXG4gICAgICAgIGlmIChpc1ByZXNlbnQoZ2xvYmFsT3B0aW9uKSkge1xyXG4gICAgICAgICAgICBtZXJnZVRhcmdldFtvcHRpb25dID0gT2JqZWN0LmNyZWF0ZShnbG9iYWxPcHRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFpc09iamVjdChzcmNPcHRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy9cclxuICAgIC8vIEVuc3VyZSB0aGF0ICdlbmFibGVkJyBpcyBwcm9wZXJseSBzZXQuIEl0IGlzIHJlcXVpcmVkIGludGVybmFsbHlcclxuICAgIC8vIE5vdGUgdGhhdCB0aGUgdmFsdWUgZnJvbSBvcHRpb25zIHdpbGwgYWx3YXlzIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgdmFsdWVcclxuICAgIC8vXHJcbiAgICBsZXQgZW5hYmxlZCA9IHRydWU7IC8vIGRlZmF1bHQgdmFsdWVcclxuICAgIGlmIChzcmNPcHRpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZW5hYmxlZCA9IHNyY09wdGlvbi5lbmFibGVkO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gVGFrZSBmcm9tIGdsb2JhbHMsIGlmIHByZXNlbnRcclxuICAgICAgICBpZiAoZ2xvYmFsRW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWQgPSBnbG9iYWxPcHRpb24uZW5hYmxlZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkb01lcmdlKG1lcmdlVGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pO1xyXG4gICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gZW5hYmxlZDtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSB2aXNpYmxlIGl0ZW0gaW4gYSBzb3J0ZWQgbGlzdC4gSWYgd2UgZmluZCBhIHZpc2libGUgaXRlbSwgdGhlIGNvZGUgdGhhdCB1c2VzXHJcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCB0aGVuIGl0ZXJhdGUgaW4gYm90aCBkaXJlY3Rpb25zIG92ZXIgdGhpcyBzb3J0ZWQgbGlzdCB0byBmaW5kIGFsbCB2aXNpYmxlIGl0ZW1zLlxyXG4gKlxyXG4gKiBAcGFyYW0gb3JkZXJlZEl0ZW1zIC0gSXRlbXMgb3JkZXJlZCBieSBzdGFydC5cclxuICogQHBhcmFtIGNvbXBhcmF0b3IgLSAtMSBpcyBsb3dlciwgMCBpcyBlcXVhbCwgMSBpcyBoaWdoZXIuXHJcbiAqIEBwYXJhbSBmaWVsZCAtIFByb3BlcnR5IG5hbWUgb24gYW4gaXRlbSAoVGhhdCBpcyBpdGVtW2ZpZWxkXSkuXHJcbiAqIEBwYXJhbSBmaWVsZDIgLSBTZWNvbmQgcHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdW2ZpZWxkMl0pLlxyXG4gKiBAcmV0dXJucyBJbmRleCBvZiB0aGUgZm91bmQgaXRlbSBvciAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC5cclxuICovXHJcbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaEN1c3RvbShvcmRlcmVkSXRlbXMsIGNvbXBhcmF0b3IsIGZpZWxkLCBmaWVsZDIpIHtcclxuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDAwMDtcclxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xyXG4gICAgbGV0IGxvdyA9IDA7XHJcbiAgICBsZXQgaGlnaCA9IG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgd2hpbGUgKGxvdyA8PSBoaWdoICYmIGl0ZXJhdGlvbiA8IG1heEl0ZXJhdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBvcmRlcmVkSXRlbXNbbWlkZGxlXTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkMiA9PT0gdW5kZWZpbmVkID8gaXRlbVtmaWVsZF0gOiBpdGVtW2ZpZWxkXVtmaWVsZDJdO1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdCA9IGNvbXBhcmF0b3IodmFsdWUpO1xyXG4gICAgICAgIGlmIChzZWFyY2hSZXN1bHQgPT0gMCkge1xyXG4gICAgICAgICAgICAvLyBqaWhhYSwgZm91bmQgYSB2aXNpYmxlIGl0ZW0hXHJcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNlYXJjaFJlc3VsdCA9PSAtMSkge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICBsb3cgPSBtaWRkbGUgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXQgaXMgdG9vIGJpZyAtLT4gZGVjcmVhc2UgaGlnaFxyXG4gICAgICAgICAgICBoaWdoID0gbWlkZGxlIC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaXRlcmF0aW9uKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGJpbmFyeSBzZWFyY2ggZm9yIGEgc3BlY2lmaWMgdmFsdWUgaW4gYSBzb3J0ZWQgYXJyYXkuXHJcbiAqIElmIGl0IGRvZXMgbm90IGV4aXN0IGJ1dCBpcyBpbiBiZXR3ZWVuIG9mIHR3byB2YWx1ZXMsIHdlIHJldHVybiBlaXRoZXIgdGhlXHJcbiAqIG9uZSBiZWZvcmUgb3IgdGhlIG9uZSBhZnRlciwgZGVwZW5kaW5nIG9uIHVzZXIgaW5wdXQgSWYgaXQgaXMgZm91bmQsIHdlXHJcbiAqIHJldHVybiB0aGUgaW5kZXgsIGVsc2UgLTEuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBTb3J0ZWQgYXJyYXkuXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgc2VhcmNoZWQgdmFsdWUuXHJcbiAqIEBwYXJhbSBmaWVsZCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IGluIGl0ZW1zIHRvIGJlIHNlYXJjaGVkLlxyXG4gKiBAcGFyYW0gc2lkZVByZWZlcmVuY2UgLSBJZiB0aGUgdGFyZ2V0IGlzIGJldHdlZW4gdHdvIHZhbHVlcywgc2hvdWxkIHRoZSBpbmRleCBvZiB0aGUgYmVmb3JlIG9yIHRoZSBhZnRlciBiZSByZXR1cm5lZD9cclxuICogQHBhcmFtIGNvbXBhcmF0b3IgLSBBbiBvcHRpb25hbCBjb21wYXJhdG9yLCByZXR1cm5pbmcgLTEsIDAsIDEgZm9yIFxcPCwgPT09LCBcXD4uXHJcbiAqIEByZXR1cm5zIFRoZSBpbmRleCBvZiBmb3VuZCB2YWx1ZSBvciAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC5cclxuICovXHJcbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaFZhbHVlKG9yZGVyZWRJdGVtcywgdGFyZ2V0LCBmaWVsZCwgc2lkZVByZWZlcmVuY2UsIGNvbXBhcmF0b3IpIHtcclxuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDAwMDtcclxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xyXG4gICAgbGV0IGxvdyA9IDA7XHJcbiAgICBsZXQgaGlnaCA9IG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgbGV0IHByZXZWYWx1ZTtcclxuICAgIGxldCB2YWx1ZTtcclxuICAgIGxldCBuZXh0VmFsdWU7XHJcbiAgICBsZXQgbWlkZGxlO1xyXG4gICAgY29tcGFyYXRvciA9XHJcbiAgICAgICAgY29tcGFyYXRvciAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBjb21wYXJhdG9yXHJcbiAgICAgICAgICAgIDogZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhID09IGIgPyAwIDogYSA8IGIgPyAtMSA6IDE7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIC8vIGdldCBhIG5ldyBndWVzc1xyXG4gICAgICAgIG1pZGRsZSA9IE1hdGguZmxvb3IoMC41ICogKGhpZ2ggKyBsb3cpKTtcclxuICAgICAgICBwcmV2VmFsdWUgPSBvcmRlcmVkSXRlbXNbTWF0aC5tYXgoMCwgbWlkZGxlIC0gMSldW2ZpZWxkXTtcclxuICAgICAgICB2YWx1ZSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdW2ZpZWxkXTtcclxuICAgICAgICBuZXh0VmFsdWUgPVxyXG4gICAgICAgICAgICBvcmRlcmVkSXRlbXNbTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpXVtmaWVsZF07XHJcbiAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPT0gMCkge1xyXG4gICAgICAgICAgICAvLyB3ZSBmb3VuZCB0aGUgdGFyZ2V0XHJcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmF0b3IocHJldlZhbHVlLCB0YXJnZXQpIDwgMCAmJlxyXG4gICAgICAgICAgICBjb21wYXJhdG9yKHZhbHVlLCB0YXJnZXQpID4gMCkge1xyXG4gICAgICAgICAgICAvLyB0YXJnZXQgaXMgaW4gYmV0d2VlbiBvZiB0aGUgcHJldmlvdXMgYW5kIHRoZSBjdXJyZW50XHJcbiAgICAgICAgICAgIHJldHVybiBzaWRlUHJlZmVyZW5jZSA9PSBcImJlZm9yZVwiID8gTWF0aC5tYXgoMCwgbWlkZGxlIC0gMSkgOiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IobmV4dFZhbHVlLCB0YXJnZXQpID4gMCkge1xyXG4gICAgICAgICAgICAvLyB0YXJnZXQgaXMgaW4gYmV0d2VlbiBvZiB0aGUgY3VycmVudCBhbmQgdGhlIG5leHRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCJcclxuICAgICAgICAgICAgICAgID8gbWlkZGxlXHJcbiAgICAgICAgICAgICAgICA6IE1hdGgubWluKG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxLCBtaWRkbGUgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGRpZG50IGZpbmQgdGhlIHRhcmdldCwgd2UgbmVlZCB0byBjaGFuZ2Ugb3VyIGJvdW5kYXJpZXMuXHJcbiAgICAgICAgICAgIGlmIChjb21wYXJhdG9yKHZhbHVlLCB0YXJnZXQpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaXQgaXMgdG9vIHNtYWxsIC0tPiBpbmNyZWFzZSBsb3dcclxuICAgICAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgICAgICBoaWdoID0gbWlkZGxlIC0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIC8vIGRpZG50IGZpbmQgYW55dGhpbmcuIFJldHVybiAtMS5cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKlxyXG4gKiBFYXNpbmcgRnVuY3Rpb25zLlxyXG4gKiBPbmx5IGNvbnNpZGVyaW5nIHRoZSB0IHZhbHVlIGZvciB0aGUgcmFuZ2UgWzAsIDFdID0+IFswLCAxXS5cclxuICpcclxuICogSW5zcGlyYXRpb246IGZyb20gaHR0cDovL2dpem1hLmNvbS9lYXNpbmcvXHJcbiAqIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2dyZS8xNjUwMjk0XHJcbiAqL1xyXG5jb25zdCBlYXNpbmdGdW5jdGlvbnMgPSB7XHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIG5vIGVhc2luZyBhbmQgbm8gYWNjZWxlcmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgbGluZWFyKHQpIHtcclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YWQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogKDIgLSB0KTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAyICogdCAqIHQgOiAtMSArICg0IC0gMiAqIHQpICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluQ3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiAtLXQgKiB0ICogdCArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJbk91dEN1YmljKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDQgKiB0ICogdCAqIHQgOiAodCAtIDEpICogKDIgKiB0IC0gMikgKiAoMiAqIHQgLSAyKSArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIGZyb20gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJblF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWFydCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAtLXQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJbk91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDggKiB0ICogdCAqIHQgKiB0IDogMSAtIDggKiAtLXQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIGZyb20gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJblF1aW50KHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiAxICsgLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gMTYgKiB0ICogdCAqIHQgKiB0ICogdCA6IDEgKyAxNiAqIC0tdCAqIHQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG59O1xyXG4vKipcclxuICogRXhwZXJpbWVudGFseSBjb21wdXRlIHRoZSB3aWR0aCBvZiB0aGUgc2Nyb2xsYmFyIGZvciB0aGlzIGJyb3dzZXIuXHJcbiAqXHJcbiAqIEByZXR1cm5zIFRoZSB3aWR0aCBpbiBwaXhlbHMuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTY3JvbGxCYXJXaWR0aCgpIHtcclxuICAgIGNvbnN0IGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICBpbm5lci5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xyXG4gICAgaW5uZXIuc3R5bGUuaGVpZ2h0ID0gXCIyMDBweFwiO1xyXG4gICAgY29uc3Qgb3V0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgb3V0ZXIuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICBvdXRlci5zdHlsZS50b3AgPSBcIjBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgIG91dGVyLnN0eWxlLndpZHRoID0gXCIyMDBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUuaGVpZ2h0ID0gXCIxNTBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlcik7XHJcbiAgICBjb25zdCB3MSA9IGlubmVyLm9mZnNldFdpZHRoO1xyXG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSBcInNjcm9sbFwiO1xyXG4gICAgbGV0IHcyID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBpZiAodzEgPT0gdzIpIHtcclxuICAgICAgICB3MiA9IG91dGVyLmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdXRlcik7XHJcbiAgICByZXR1cm4gdzEgLSB3MjtcclxufVxyXG4vLyBAVE9ETzogVGhpcyBkb2Vzbid0IHdvcmsgcHJvcGVybHkuXHJcbi8vIEl0IHdvcmtzIG9ubHkgZm9yIHNpbmdsZSBwcm9wZXJ0eSBvYmplY3RzLFxyXG4vLyBvdGhlcndpc2UgaXQgY29tYmluZXMgYWxsIG9mIHRoZSB0eXBlcyBpbiBhIHVuaW9uLlxyXG4vLyBleHBvcnQgZnVuY3Rpb24gdG9wTW9zdDxLMSBleHRlbmRzIHN0cmluZywgVjE+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxPltdLFxyXG4vLyAgIGFjY2Vzc29yczogSzEgfCBbSzFdXHJcbi8vICk6IHVuZGVmaW5lZCB8IFYxXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgVjEsIFYyPiAoXHJcbi8vICAgcGlsZTogUmVjb3JkPEsxLCB1bmRlZmluZWQgfCBWMSB8IFJlY29yZDxLMiwgdW5kZWZpbmVkIHwgVjI+PltdLFxyXG4vLyAgIGFjY2Vzc29yczogW0sxLCBLMl1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjEgfCBWMlxyXG4vLyBleHBvcnQgZnVuY3Rpb24gdG9wTW9zdDxLMSBleHRlbmRzIHN0cmluZywgSzIgZXh0ZW5kcyBzdHJpbmcsIEszIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjIsIFYzPiAoXHJcbi8vICAgcGlsZTogUmVjb3JkPEsxLCB1bmRlZmluZWQgfCBWMSB8IFJlY29yZDxLMiwgdW5kZWZpbmVkIHwgVjIgfCBSZWNvcmQ8SzMsIHVuZGVmaW5lZCB8IFYzPj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyLCBLM11cclxuLy8gKTogdW5kZWZpbmVkIHwgVjEgfCBWMiB8IFYzXHJcbi8qKlxyXG4gKiBHZXQgdGhlIHRvcCBtb3N0IHByb3BlcnR5IHZhbHVlIGZyb20gYSBwaWxlIG9mIG9iamVjdHMuXHJcbiAqXHJcbiAqIEBwYXJhbSBwaWxlIC0gQXJyYXkgb2Ygb2JqZWN0cywgbm8gcmVxdWlyZWQgZm9ybWF0LlxyXG4gKiBAcGFyYW0gYWNjZXNzb3JzIC0gQXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXHJcbiAqIEZvciBleGFtcGxlIGBvYmplY3RbJ2ZvbyddWydiYXInXWAg4oaSIGBbJ2ZvbycsICdiYXInXWAuXHJcbiAqIEByZXR1cm5zIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB3aXRoIGdpdmVuIGFjY2Vzc29ycyBwYXRoIGZyb20gdGhlIGZpcnN0IHBpbGUgaXRlbSB3aGVyZSBpdCdzIG5vdCB1bmRlZmluZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiB0b3BNb3N0KHBpbGUsIGFjY2Vzc29ycykge1xyXG4gICAgbGV0IGNhbmRpZGF0ZTtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShhY2Nlc3NvcnMpKSB7XHJcbiAgICAgICAgYWNjZXNzb3JzID0gW2FjY2Vzc29yc107XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBwaWxlKSB7XHJcbiAgICAgICAgaWYgKG1lbWJlcikge1xyXG4gICAgICAgICAgICBjYW5kaWRhdGUgPSBtZW1iZXJbYWNjZXNzb3JzWzBdXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhY2Nlc3NvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGVbYWNjZXNzb3JzW2ldXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbmRpZGF0ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FuZGlkYXRlO1xyXG59XG5cbmNvbnN0IGh0bWxDb2xvcnMgPSB7XG4gIGJsYWNrOiBcIiMwMDAwMDBcIixcbiAgbmF2eTogXCIjMDAwMDgwXCIsXG4gIGRhcmtibHVlOiBcIiMwMDAwOEJcIixcbiAgbWVkaXVtYmx1ZTogXCIjMDAwMENEXCIsXG4gIGJsdWU6IFwiIzAwMDBGRlwiLFxuICBkYXJrZ3JlZW46IFwiIzAwNjQwMFwiLFxuICBncmVlbjogXCIjMDA4MDAwXCIsXG4gIHRlYWw6IFwiIzAwODA4MFwiLFxuICBkYXJrY3lhbjogXCIjMDA4QjhCXCIsXG4gIGRlZXBza3libHVlOiBcIiMwMEJGRkZcIixcbiAgZGFya3R1cnF1b2lzZTogXCIjMDBDRUQxXCIsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiBcIiMwMEZBOUFcIixcbiAgbGltZTogXCIjMDBGRjAwXCIsXG4gIHNwcmluZ2dyZWVuOiBcIiMwMEZGN0ZcIixcbiAgYXF1YTogXCIjMDBGRkZGXCIsXG4gIGN5YW46IFwiIzAwRkZGRlwiLFxuICBtaWRuaWdodGJsdWU6IFwiIzE5MTk3MFwiLFxuICBkb2RnZXJibHVlOiBcIiMxRTkwRkZcIixcbiAgbGlnaHRzZWFncmVlbjogXCIjMjBCMkFBXCIsXG4gIGZvcmVzdGdyZWVuOiBcIiMyMjhCMjJcIixcbiAgc2VhZ3JlZW46IFwiIzJFOEI1N1wiLFxuICBkYXJrc2xhdGVncmF5OiBcIiMyRjRGNEZcIixcbiAgbGltZWdyZWVuOiBcIiMzMkNEMzJcIixcbiAgbWVkaXVtc2VhZ3JlZW46IFwiIzNDQjM3MVwiLFxuICB0dXJxdW9pc2U6IFwiIzQwRTBEMFwiLFxuICByb3lhbGJsdWU6IFwiIzQxNjlFMVwiLFxuICBzdGVlbGJsdWU6IFwiIzQ2ODJCNFwiLFxuICBkYXJrc2xhdGVibHVlOiBcIiM0ODNEOEJcIixcbiAgbWVkaXVtdHVycXVvaXNlOiBcIiM0OEQxQ0NcIixcbiAgaW5kaWdvOiBcIiM0QjAwODJcIixcbiAgZGFya29saXZlZ3JlZW46IFwiIzU1NkIyRlwiLFxuICBjYWRldGJsdWU6IFwiIzVGOUVBMFwiLFxuICBjb3JuZmxvd2VyYmx1ZTogXCIjNjQ5NUVEXCIsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IFwiIzY2Q0RBQVwiLFxuICBkaW1ncmF5OiBcIiM2OTY5NjlcIixcbiAgc2xhdGVibHVlOiBcIiM2QTVBQ0RcIixcbiAgb2xpdmVkcmFiOiBcIiM2QjhFMjNcIixcbiAgc2xhdGVncmF5OiBcIiM3MDgwOTBcIixcbiAgbGlnaHRzbGF0ZWdyYXk6IFwiIzc3ODg5OVwiLFxuICBtZWRpdW1zbGF0ZWJsdWU6IFwiIzdCNjhFRVwiLFxuICBsYXduZ3JlZW46IFwiIzdDRkMwMFwiLFxuICBjaGFydHJldXNlOiBcIiM3RkZGMDBcIixcbiAgYXF1YW1hcmluZTogXCIjN0ZGRkQ0XCIsXG4gIG1hcm9vbjogXCIjODAwMDAwXCIsXG4gIHB1cnBsZTogXCIjODAwMDgwXCIsXG4gIG9saXZlOiBcIiM4MDgwMDBcIixcbiAgZ3JheTogXCIjODA4MDgwXCIsXG4gIHNreWJsdWU6IFwiIzg3Q0VFQlwiLFxuICBsaWdodHNreWJsdWU6IFwiIzg3Q0VGQVwiLFxuICBibHVldmlvbGV0OiBcIiM4QTJCRTJcIixcbiAgZGFya3JlZDogXCIjOEIwMDAwXCIsXG4gIGRhcmttYWdlbnRhOiBcIiM4QjAwOEJcIixcbiAgc2FkZGxlYnJvd246IFwiIzhCNDUxM1wiLFxuICBkYXJrc2VhZ3JlZW46IFwiIzhGQkM4RlwiLFxuICBsaWdodGdyZWVuOiBcIiM5MEVFOTBcIixcbiAgbWVkaXVtcHVycGxlOiBcIiM5MzcwRDhcIixcbiAgZGFya3Zpb2xldDogXCIjOTQwMEQzXCIsXG4gIHBhbGVncmVlbjogXCIjOThGQjk4XCIsXG4gIGRhcmtvcmNoaWQ6IFwiIzk5MzJDQ1wiLFxuICB5ZWxsb3dncmVlbjogXCIjOUFDRDMyXCIsXG4gIHNpZW5uYTogXCIjQTA1MjJEXCIsXG4gIGJyb3duOiBcIiNBNTJBMkFcIixcbiAgZGFya2dyYXk6IFwiI0E5QTlBOVwiLFxuICBsaWdodGJsdWU6IFwiI0FERDhFNlwiLFxuICBncmVlbnllbGxvdzogXCIjQURGRjJGXCIsXG4gIHBhbGV0dXJxdW9pc2U6IFwiI0FGRUVFRVwiLFxuICBsaWdodHN0ZWVsYmx1ZTogXCIjQjBDNERFXCIsXG4gIHBvd2RlcmJsdWU6IFwiI0IwRTBFNlwiLFxuICBmaXJlYnJpY2s6IFwiI0IyMjIyMlwiLFxuICBkYXJrZ29sZGVucm9kOiBcIiNCODg2MEJcIixcbiAgbWVkaXVtb3JjaGlkOiBcIiNCQTU1RDNcIixcbiAgcm9zeWJyb3duOiBcIiNCQzhGOEZcIixcbiAgZGFya2toYWtpOiBcIiNCREI3NkJcIixcbiAgc2lsdmVyOiBcIiNDMEMwQzBcIixcbiAgbWVkaXVtdmlvbGV0cmVkOiBcIiNDNzE1ODVcIixcbiAgaW5kaWFucmVkOiBcIiNDRDVDNUNcIixcbiAgcGVydTogXCIjQ0Q4NTNGXCIsXG4gIGNob2NvbGF0ZTogXCIjRDI2OTFFXCIsXG4gIHRhbjogXCIjRDJCNDhDXCIsXG4gIGxpZ2h0Z3JleTogXCIjRDNEM0QzXCIsXG4gIHBhbGV2aW9sZXRyZWQ6IFwiI0Q4NzA5M1wiLFxuICB0aGlzdGxlOiBcIiNEOEJGRDhcIixcbiAgb3JjaGlkOiBcIiNEQTcwRDZcIixcbiAgZ29sZGVucm9kOiBcIiNEQUE1MjBcIixcbiAgY3JpbXNvbjogXCIjREMxNDNDXCIsXG4gIGdhaW5zYm9ybzogXCIjRENEQ0RDXCIsXG4gIHBsdW06IFwiI0REQTBERFwiLFxuICBidXJseXdvb2Q6IFwiI0RFQjg4N1wiLFxuICBsaWdodGN5YW46IFwiI0UwRkZGRlwiLFxuICBsYXZlbmRlcjogXCIjRTZFNkZBXCIsXG4gIGRhcmtzYWxtb246IFwiI0U5OTY3QVwiLFxuICB2aW9sZXQ6IFwiI0VFODJFRVwiLFxuICBwYWxlZ29sZGVucm9kOiBcIiNFRUU4QUFcIixcbiAgbGlnaHRjb3JhbDogXCIjRjA4MDgwXCIsXG4gIGtoYWtpOiBcIiNGMEU2OENcIixcbiAgYWxpY2VibHVlOiBcIiNGMEY4RkZcIixcbiAgaG9uZXlkZXc6IFwiI0YwRkZGMFwiLFxuICBhenVyZTogXCIjRjBGRkZGXCIsXG4gIHNhbmR5YnJvd246IFwiI0Y0QTQ2MFwiLFxuICB3aGVhdDogXCIjRjVERUIzXCIsXG4gIGJlaWdlOiBcIiNGNUY1RENcIixcbiAgd2hpdGVzbW9rZTogXCIjRjVGNUY1XCIsXG4gIG1pbnRjcmVhbTogXCIjRjVGRkZBXCIsXG4gIGdob3N0d2hpdGU6IFwiI0Y4RjhGRlwiLFxuICBzYWxtb246IFwiI0ZBODA3MlwiLFxuICBhbnRpcXVld2hpdGU6IFwiI0ZBRUJEN1wiLFxuICBsaW5lbjogXCIjRkFGMEU2XCIsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiBcIiNGQUZBRDJcIixcbiAgb2xkbGFjZTogXCIjRkRGNUU2XCIsXG4gIHJlZDogXCIjRkYwMDAwXCIsXG4gIGZ1Y2hzaWE6IFwiI0ZGMDBGRlwiLFxuICBtYWdlbnRhOiBcIiNGRjAwRkZcIixcbiAgZGVlcHBpbms6IFwiI0ZGMTQ5M1wiLFxuICBvcmFuZ2VyZWQ6IFwiI0ZGNDUwMFwiLFxuICB0b21hdG86IFwiI0ZGNjM0N1wiLFxuICBob3RwaW5rOiBcIiNGRjY5QjRcIixcbiAgY29yYWw6IFwiI0ZGN0Y1MFwiLFxuICBkYXJrb3JhbmdlOiBcIiNGRjhDMDBcIixcbiAgbGlnaHRzYWxtb246IFwiI0ZGQTA3QVwiLFxuICBvcmFuZ2U6IFwiI0ZGQTUwMFwiLFxuICBsaWdodHBpbms6IFwiI0ZGQjZDMVwiLFxuICBwaW5rOiBcIiNGRkMwQ0JcIixcbiAgZ29sZDogXCIjRkZENzAwXCIsXG4gIHBlYWNocHVmZjogXCIjRkZEQUI5XCIsXG4gIG5hdmFqb3doaXRlOiBcIiNGRkRFQURcIixcbiAgbW9jY2FzaW46IFwiI0ZGRTRCNVwiLFxuICBiaXNxdWU6IFwiI0ZGRTRDNFwiLFxuICBtaXN0eXJvc2U6IFwiI0ZGRTRFMVwiLFxuICBibGFuY2hlZGFsbW9uZDogXCIjRkZFQkNEXCIsXG4gIHBhcGF5YXdoaXA6IFwiI0ZGRUZENVwiLFxuICBsYXZlbmRlcmJsdXNoOiBcIiNGRkYwRjVcIixcbiAgc2Vhc2hlbGw6IFwiI0ZGRjVFRVwiLFxuICBjb3Juc2lsazogXCIjRkZGOERDXCIsXG4gIGxlbW9uY2hpZmZvbjogXCIjRkZGQUNEXCIsXG4gIGZsb3JhbHdoaXRlOiBcIiNGRkZBRjBcIixcbiAgc25vdzogXCIjRkZGQUZBXCIsXG4gIHllbGxvdzogXCIjRkZGRjAwXCIsXG4gIGxpZ2h0eWVsbG93OiBcIiNGRkZGRTBcIixcbiAgaXZvcnk6IFwiI0ZGRkZGMFwiLFxuICB3aGl0ZTogXCIjRkZGRkZGXCIsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGl4ZWxSYXRpbz0xXVxuICovXG5sZXQgQ29sb3JQaWNrZXIkMSA9IGNsYXNzIENvbG9yUGlja2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGl4ZWxSYXRpbz0xXVxuICAgKi9cbiAgY29uc3RydWN0b3IocGl4ZWxSYXRpbyA9IDEpIHtcbiAgICB0aGlzLnBpeGVsUmF0aW8gPSBwaXhlbFJhdGlvO1xuICAgIHRoaXMuZ2VuZXJhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5jZW50ZXJDb29yZGluYXRlcyA9IHsgeDogMjg5IC8gMiwgeTogMjg5IC8gMiB9O1xuICAgIHRoaXMuciA9IDI4OSAqIDAuNDk7XG4gICAgdGhpcy5jb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5odWVDaXJjbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pbml0aWFsQ29sb3IgPSB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGE6IDEuMCB9O1xuICAgIHRoaXMucHJldmlvdXNDb2xvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFwcGxpZWQgPSBmYWxzZTtcblxuICAgIC8vIGJvdW5kIGJ5XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayA9ICgpID0+IHt9O1xuICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9ICgpID0+IHt9O1xuXG4gICAgLy8gY3JlYXRlIGFsbCBET00gZWxlbWVudHNcbiAgICB0aGlzLl9jcmVhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGluc2VydHMgdGhlIGNvbG9yUGlja2VyIGludG8gYSBkaXYgZnJvbSB0aGUgRE9NXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyXG4gICAqL1xuICBpbnNlcnRUbyhjb250YWluZXIpIHtcbiAgICBpZiAodGhpcy5oYW1tZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5oYW1tZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy5oYW1tZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICAgIHRoaXMuX2JpbmRIYW1tZXIoKTtcblxuICAgIHRoaXMuX3NldFNpemUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgb24gYXBwbHkgYW5kIHNhdmUuIEJpbmQgaXQgdG8gdGhlIGFwcGxpY2F0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBzZXRVcGRhdGVDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRnVuY3Rpb24gYXR0ZW1wdGVkIHRvIHNldCBhcyBjb2xvclBpY2tlciB1cGRhdGUgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldENsb3NlQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRnVuY3Rpb24gYXR0ZW1wdGVkIHRvIHNldCBhcyBjb2xvclBpY2tlciBjbG9zaW5nIGNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pc0NvbG9yU3RyaW5nKGNvbG9yKSB7XG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGh0bWxDb2xvcnNbY29sb3JdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbG9yIG9mIHRoZSBjb2xvclBpY2tlclxuICAgKiBTdXBwb3J0ZWQgZm9ybWF0czpcbiAgICogJ3JlZCcgICAgICAgICAgICAgICAgICAgLS0+IEhUTUwgY29sb3Igc3RyaW5nXG4gICAqICcjZmZmZmZmJyAgICAgICAgICAgICAgIC0tPiBoZXggc3RyaW5nXG4gICAqICdyZ2IoMjU1LDI1NSwyNTUpJyAgICAgIC0tPiByZ2Igc3RyaW5nXG4gICAqICdyZ2JhKDI1NSwyNTUsMjU1LDEuMCknIC0tPiByZ2JhIHN0cmluZ1xuICAgKiB7cjoyNTUsZzoyNTUsYjoyNTV9ICAgICAtLT4gcmdiIG9iamVjdFxuICAgKiB7cjoyNTUsZzoyNTUsYjoyNTUsYToxLjB9IC0tPiByZ2JhIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG9iamVjdH0gY29sb3JcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2V0SW5pdGlhbD10cnVlXVxuICAgKi9cbiAgc2V0Q29sb3IoY29sb3IsIHNldEluaXRpYWwgPSB0cnVlKSB7XG4gICAgaWYgKGNvbG9yID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZ2JhO1xuXG4gICAgLy8gaWYgYSBodG1sIGNvbG9yIHNob3J0aGFuZCBpcyB1c2VkLCBjb252ZXJ0IHRvIGhleFxuICAgIGNvbnN0IGh0bWxDb2xvciA9IHRoaXMuX2lzQ29sb3JTdHJpbmcoY29sb3IpO1xuICAgIGlmIChodG1sQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29sb3IgPSBodG1sQ29sb3I7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9ybWF0XG4gICAgaWYgKGlzU3RyaW5nKGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKGlzVmFsaWRSR0IoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHJnYmFBcnJheSA9IGNvbG9yXG4gICAgICAgICAgLnN1YnN0cig0KVxuICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3IubGVuZ3RoIC0gNSlcbiAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xuICAgICAgICByZ2JhID0geyByOiByZ2JhQXJyYXlbMF0sIGc6IHJnYmFBcnJheVsxXSwgYjogcmdiYUFycmF5WzJdLCBhOiAxLjAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZFJHQkEoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHJnYmFBcnJheSA9IGNvbG9yXG4gICAgICAgICAgLnN1YnN0cig1KVxuICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3IubGVuZ3RoIC0gNilcbiAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xuICAgICAgICByZ2JhID0ge1xuICAgICAgICAgIHI6IHJnYmFBcnJheVswXSxcbiAgICAgICAgICBnOiByZ2JhQXJyYXlbMV0sXG4gICAgICAgICAgYjogcmdiYUFycmF5WzJdLFxuICAgICAgICAgIGE6IHJnYmFBcnJheVszXSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZEhleChjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiT2JqID0gaGV4VG9SR0IoY29sb3IpO1xuICAgICAgICByZ2JhID0geyByOiByZ2JPYmouciwgZzogcmdiT2JqLmcsIGI6IHJnYk9iai5iLCBhOiAxLjAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbG9yIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2xvci5yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb2xvci5nICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb2xvci5iICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgYWxwaGEgPSBjb2xvci5hICE9PSB1bmRlZmluZWQgPyBjb2xvci5hIDogXCIxLjBcIjtcbiAgICAgICAgICByZ2JhID0geyByOiBjb2xvci5yLCBnOiBjb2xvci5nLCBiOiBjb2xvci5iLCBhOiBhbHBoYSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbG9yXG4gICAgaWYgKHJnYmEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlVua25vd24gY29sb3IgcGFzc2VkIHRvIHRoZSBjb2xvclBpY2tlci4gU3VwcG9ydGVkIGFyZSBzdHJpbmdzOiByZ2IsIGhleCwgcmdiYS4gT2JqZWN0OiByZ2IgKHtyOnIsZzpnLGI6YixbYTphXX0pLiBTdXBwbGllZDogXCIgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNvbG9yKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0Q29sb3IocmdiYSwgc2V0SW5pdGlhbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgc2hvd3MgdGhlIGNvbG9yIHBpY2tlci5cbiAgICogVGhlIGh1ZSBjaXJjbGUgaXMgY29uc3RydWN0ZWQgb25jZSBhbmQgc3RvcmVkLlxuICAgKi9cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICB0aGlzLl9nZW5lcmF0ZUh1ZUNpcmNsZSgpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBSSVZBVEUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuICAvKipcbiAgICogSGlkZSB0aGUgcGlja2VyLiBJcyBjYWxsZWQgYnkgdGhlIGNhbmNlbCBidXR0b24uXG4gICAqIE9wdGlvbmFsIGJvb2xlYW4gdG8gc3RvcmUgdGhlIHByZXZpb3VzIGNvbG9yIGZvciBlYXN5IGFjY2VzcyBsYXRlciBvbi5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbc3RvcmVQcmV2aW91cz10cnVlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hpZGUoc3RvcmVQcmV2aW91cyA9IHRydWUpIHtcbiAgICAvLyBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIG5leHQgdGltZTtcbiAgICBpZiAoc3RvcmVQcmV2aW91cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5wcmV2aW91c0NvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXBwbGllZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmluaXRpYWxDb2xvcik7XG4gICAgfVxuXG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cbiAgICAvLyBjYWxsIHRoZSBjbG9zaW5nIGNhbGxiYWNrLCByZXN0b3JpbmcgdGhlIG9uY2xpY2sgbWV0aG9kLlxuICAgIC8vIHRoaXMgaXMgaW4gYSBzZXRUaW1lb3V0IGJlY2F1c2UgaXQgd2lsbCB0cmlnZ2VyIHRoZSBzaG93IGFnYWluIGJlZm9yZSB0aGUgY2xpY2sgaXMgZG9uZS5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcbiAgICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIGJvdW5kIHRvIHRoZSBzYXZlIGJ1dHRvbi4gU2F2ZXMgYW5kIGhpZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NhdmUoKSB7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLmFwcGxpZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9oaWRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQm91bmQgdG8gYXBwbHkgYnV0dG9uLiBTYXZlcyBidXQgZG9lcyBub3QgY2xvc2UuIElzIHVuZG9uZSBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hcHBseSgpIHtcbiAgICB0aGlzLmFwcGxpZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2sodGhpcy5jb2xvcik7XG4gICAgdGhpcy5fdXBkYXRlUGlja2VyKHRoaXMuY29sb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIGxvYWQgdGhlIGNvbG9yIGZyb20gdGhlIHByZXZpb3VzIHNlc3Npb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbG9hZExhc3QoKSB7XG4gICAgaWYgKHRoaXMucHJldmlvdXNDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldENvbG9yKHRoaXMucHJldmlvdXNDb2xvciwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGVydChcIlRoZXJlIGlzIG5vIGxhc3QgY29sb3IgdG8gbG9hZC4uLlwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBjb2xvciwgcGxhY2UgdGhlIHBpY2tlclxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0Q29sb3IocmdiYSwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICAvLyBzdG9yZSB0aGUgaW5pdGlhbCBjb2xvclxuICAgIGlmIChzZXRJbml0aWFsID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmluaXRpYWxDb2xvciA9IE9iamVjdC5hc3NpZ24oe30sIHJnYmEpO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuXG4gICAgY29uc3QgYW5nbGVDb252ZXJ0ID0gMiAqIE1hdGguUEk7XG4gICAgY29uc3QgcmFkaXVzID0gdGhpcy5yICogaHN2LnM7XG4gICAgY29uc3QgeCA9XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnggKyByYWRpdXMgKiBNYXRoLnNpbihhbmdsZUNvbnZlcnQgKiBoc3YuaCk7XG4gICAgY29uc3QgeSA9XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnkgKyByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZUNvbnZlcnQgKiBoc3YuaCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUubGVmdCA9XG4gICAgICB4IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudFdpZHRoICsgXCJweFwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS50b3AgPVxuICAgICAgeSAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG5cbiAgICB0aGlzLl91cGRhdGVQaWNrZXIocmdiYSk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gb3BhY2l0eSBjb250cm9sXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldE9wYWNpdHkodmFsdWUpIHtcbiAgICB0aGlzLmNvbG9yLmEgPSB2YWx1ZSAvIDEwMDtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gYnJpZ2h0bmVzcyBjb250cm9sXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldEJyaWdodG5lc3ModmFsdWUpIHtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVih0aGlzLmNvbG9yLnIsIHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iKTtcbiAgICBoc3YudiA9IHZhbHVlIC8gMTAwO1xuICAgIGNvbnN0IHJnYmEgPSBIU1ZUb1JHQihoc3YuaCwgaHN2LnMsIGhzdi52KTtcbiAgICByZ2JhW1wiYVwiXSA9IHRoaXMuY29sb3IuYTtcbiAgICB0aGlzLmNvbG9yID0gcmdiYTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGUgdGhlIGNvbG9yIHBpY2tlci4gQSBibGFjayBjaXJjbGUgb3ZlcmxheXMgdGhlIGh1ZSBjaXJjbGUgdG8gbWltaWMgdGhlIGJyaWdodG5lc3MgZGVjcmVhc2luZy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHJnYmFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVQaWNrZXIocmdiYSA9IHRoaXMuY29sb3IpIHtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVihyZ2JhLnIsIHJnYmEuZywgcmdiYS5iKTtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICBpZiAodGhpcy5waXhlbFJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBpeGVsUmF0aW8gPVxuICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAoY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHguYmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIDEpO1xuICAgIH1cbiAgICBjdHguc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcblxuICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICBjb25zdCB3ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBoID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRIZWlnaHQ7XG4gICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgIGN0eC5wdXRJbWFnZURhdGEodGhpcy5odWVDaXJjbGUsIDAsIDApO1xuICAgIGN0eC5maWxsU3R5bGUgPSBcInJnYmEoMCwwLDAsXCIgKyAoMSAtIGhzdi52KSArIFwiKVwiO1xuICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgY3R4LmZpbGwoKTtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gMTAwICogaHN2LnY7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UudmFsdWUgPSAxMDAgKiByZ2JhLmE7XG5cbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgXCJyZ2JhKFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5iICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gICAgdGhpcy5uZXdDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgXCJyZ2JhKFwiICtcbiAgICAgIHRoaXMuY29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5iICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB1c2VkIGJ5IGNyZWF0ZSB0byBzZXQgdGhlIHNpemUgb2YgdGhlIGNhbnZhcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRTaXplKCkge1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLnN0eWxlLmhlaWdodCA9IFwiMTAwJVwiO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy53aWR0aCA9IDI4OSAqIHRoaXMucGl4ZWxSYXRpbztcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmhlaWdodCA9IDI4OSAqIHRoaXMucGl4ZWxSYXRpbztcbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGUgYWxsIGRvbSBlbGVtZW50c1xuICAgKiBUT0RPOiBjbGVhbnVwLCBsb3RzIG9mIHNpbWlsYXIgZG9tIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlKCkge1xuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtY29sb3ItcGlja2VyXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGFzc05hbWUgPSBcInZpcy1zZWxlY3RvclwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlclNlbGVjdG9yKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckNhbnZhcyk7XG5cbiAgICBpZiAoIXRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dCkge1xuICAgICAgY29uc3Qgbm9DYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpO1xuICAgICAgbm9DYW52YXMuc3R5bGUuY29sb3IgPSBcInJlZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUucGFkZGluZyA9IFwiMTBweFwiO1xuICAgICAgbm9DYW52YXMuaW5uZXJUZXh0ID0gXCJFcnJvcjogeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTCBjYW52YXNcIjtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuYXBwZW5kQ2hpbGQobm9DYW52YXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzXG4gICAgICAgIC5nZXRDb250ZXh0KFwiMmRcIilcbiAgICAgICAgLnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5jbGFzc05hbWUgPSBcInZpcy1jb2xvclwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm9wYWNpdHlEaXYuY2xhc3NOYW1lID0gXCJ2aXMtb3BhY2l0eVwiO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuY2xhc3NOYW1lID0gXCJ2aXMtYnJpZ2h0bmVzc1wiO1xuXG4gICAgdGhpcy5hcnJvd0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcnJvd0Rpdi5jbGFzc05hbWUgPSBcInZpcy1hcnJvd1wiO1xuXG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLnR5cGUgPSBcInJhbmdlXCI7IC8vIE5vdCBzdXBwb3J0ZWQgb24gSUU5XG4gICAgICB0aGlzLm9wYWNpdHlSYW5nZS5taW4gPSBcIjBcIjtcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1heCA9IFwiMTAwXCI7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPOiBBZGQgc29tZSBlcnJvciBoYW5kbGluZy5cbiAgICB9XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UudmFsdWUgPSBcIjEwMFwiO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLmNsYXNzTmFtZSA9IFwidmlzLXJhbmdlXCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMub3BhY2l0eURpdi5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlSYW5nZSk7XG4gICAgdGhpcy5icmlnaHRuZXNzRGl2LmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc1JhbmdlKTtcblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRPcGFjaXR5KHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRPcGFjaXR5KHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fc2V0QnJpZ2h0bmVzcyh0aGlzLnZhbHVlKTtcbiAgICB9O1xuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fc2V0QnJpZ2h0bmVzcyh0aGlzLnZhbHVlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0xhYmVsLmNsYXNzTmFtZSA9IFwidmlzLWxhYmVsIHZpcy1icmlnaHRuZXNzXCI7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuaW5uZXJUZXh0ID0gXCJicmlnaHRuZXNzOlwiO1xuXG4gICAgdGhpcy5vcGFjaXR5TGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eUxhYmVsLmNsYXNzTmFtZSA9IFwidmlzLWxhYmVsIHZpcy1vcGFjaXR5XCI7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuaW5uZXJUZXh0ID0gXCJvcGFjaXR5OlwiO1xuXG4gICAgdGhpcy5uZXdDb2xvckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5uZXdDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1uZXctY29sb3JcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmlubmVyVGV4dCA9IFwibmV3XCI7XG5cbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuY2xhc3NOYW1lID0gXCJ2aXMtaW5pdGlhbC1jb2xvclwiO1xuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LmlubmVyVGV4dCA9IFwiaW5pdGlhbFwiO1xuXG4gICAgdGhpcy5jYW5jZWxCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtY2FuY2VsXCI7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uaW5uZXJUZXh0ID0gXCJjYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5faGlkZS5iaW5kKHRoaXMsIGZhbHNlKTtcblxuICAgIHRoaXMuYXBwbHlCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYXBwbHlCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1hcHBseVwiO1xuICAgIHRoaXMuYXBwbHlCdXR0b24uaW5uZXJUZXh0ID0gXCJhcHBseVwiO1xuICAgIHRoaXMuYXBwbHlCdXR0b24ub25jbGljayA9IHRoaXMuX2FwcGx5LmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnNhdmVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLXNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24uaW5uZXJUZXh0ID0gXCJzYXZlXCI7XG4gICAgdGhpcy5zYXZlQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9zYXZlLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmxvYWRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWxvYWRcIjtcbiAgICB0aGlzLmxvYWRCdXR0b24uaW5uZXJUZXh0ID0gXCJsb2FkIGxhc3RcIjtcbiAgICB0aGlzLmxvYWRCdXR0b24ub25jbGljayA9IHRoaXMuX2xvYWRMYXN0LmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY29sb3JQaWNrZXJEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5hcnJvd0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmJyaWdodG5lc3NMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmJyaWdodG5lc3NEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5vcGFjaXR5TGFiZWwpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5vcGFjaXR5RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubmV3Q29sb3JEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5pbml0aWFsQ29sb3JEaXYpO1xuXG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmNhbmNlbEJ1dHRvbik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFwcGx5QnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuc2F2ZUJ1dHRvbik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmxvYWRCdXR0b24pO1xuICB9XG5cbiAgLyoqXG4gICAqIGJpbmQgaGFtbWVyIHRvIHRoZSBjb2xvciBwaWNrZXJcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9iaW5kSGFtbWVyKCkge1xuICAgIHRoaXMuZHJhZyA9IHt9O1xuICAgIHRoaXMucGluY2ggPSB7fTtcbiAgICB0aGlzLmhhbW1lciA9IG5ldyBIYW1tZXIkMSh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcbiAgICB0aGlzLmhhbW1lci5nZXQoXCJwaW5jaFwiKS5zZXQoeyBlbmFibGU6IHRydWUgfSk7XG5cbiAgICB0aGlzLmhhbW1lci5vbihcImhhbW1lci5pbnB1dFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5pc0ZpcnN0KSB7XG4gICAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJ0YXBcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFuc3RhcnRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFubW92ZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5lbmRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlIHRoZSBodWUgY2lyY2xlLiBUaGlzIGlzIHJlbGF0aXZlbHkgaGVhdnkgKDIwMG1zKSBhbmQgaXMgZG9uZSBvbmx5IG9uY2Ugb24gdGhlIGZpcnN0IHRpbWUgaXQgaXMgc2hvd24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2VuZXJhdGVIdWVDaXJjbGUoKSB7XG4gICAgaWYgKHRoaXMuZ2VuZXJhdGVkID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgY3R4ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICBpZiAodGhpcy5waXhlbFJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgICAoY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICBjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICAxKTtcbiAgICAgIH1cbiAgICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgICAvLyBjbGVhciB0aGUgY2FudmFzXG4gICAgICBjb25zdCB3ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG5cbiAgICAgIC8vIGRyYXcgaHVlIGNpcmNsZVxuICAgICAgbGV0IHgsIHksIGh1ZSwgc2F0O1xuICAgICAgdGhpcy5jZW50ZXJDb29yZGluYXRlcyA9IHsgeDogdyAqIDAuNSwgeTogaCAqIDAuNSB9O1xuICAgICAgdGhpcy5yID0gMC40OSAqIHc7XG4gICAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAoMiAqIE1hdGguUEkpIC8gMzYwO1xuICAgICAgY29uc3QgaGZhYyA9IDEgLyAzNjA7XG4gICAgICBjb25zdCBzZmFjID0gMSAvIHRoaXMucjtcbiAgICAgIGxldCByZ2I7XG4gICAgICBmb3IgKGh1ZSA9IDA7IGh1ZSA8IDM2MDsgaHVlKyspIHtcbiAgICAgICAgZm9yIChzYXQgPSAwOyBzYXQgPCB0aGlzLnI7IHNhdCsrKSB7XG4gICAgICAgICAgeCA9IHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHNhdCAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGh1ZSk7XG4gICAgICAgICAgeSA9IHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHNhdCAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGh1ZSk7XG4gICAgICAgICAgcmdiID0gSFNWVG9SR0IoaHVlICogaGZhYywgc2F0ICogc2ZhYywgMSk7XG4gICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiKFwiICsgcmdiLnIgKyBcIixcIiArIHJnYi5nICsgXCIsXCIgKyByZ2IuYiArIFwiKVwiO1xuICAgICAgICAgIGN0eC5maWxsUmVjdCh4IC0gMC41LCB5IC0gMC41LCAyLCAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCJyZ2JhKDAsMCwwLDEpXCI7XG4gICAgICBjdHguY2lyY2xlKHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCwgdGhpcy5jZW50ZXJDb29yZGluYXRlcy55LCB0aGlzLnIpO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICB0aGlzLmh1ZUNpcmNsZSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgdywgaCk7XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtb3ZlIHRoZSBzZWxlY3Rvci4gVGhpcyBpcyBjYWxsZWQgYnkgaGFtbWVyIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbW92ZVNlbGVjdG9yKGV2ZW50KSB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuY29sb3JQaWNrZXJEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbGVmdCA9IGV2ZW50LmNlbnRlci54IC0gcmVjdC5sZWZ0O1xuICAgIGNvbnN0IHRvcCA9IGV2ZW50LmNlbnRlci55IC0gcmVjdC50b3A7XG5cbiAgICBjb25zdCBjZW50ZXJZID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgY2VudGVyWCA9IDAuNSAqIHRoaXMuY29sb3JQaWNrZXJEaXYuY2xpZW50V2lkdGg7XG5cbiAgICBjb25zdCB4ID0gbGVmdCAtIGNlbnRlclg7XG4gICAgY29uc3QgeSA9IHRvcCAtIGNlbnRlclk7XG5cbiAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIoeCwgeSk7XG4gICAgY29uc3QgcmFkaXVzID0gMC45OCAqIE1hdGgubWluKE1hdGguc3FydCh4ICogeCArIHkgKiB5KSwgY2VudGVyWCk7XG5cbiAgICBjb25zdCBuZXdUb3AgPSBNYXRoLmNvcyhhbmdsZSkgKiByYWRpdXMgKyBjZW50ZXJZO1xuICAgIGNvbnN0IG5ld0xlZnQgPSBNYXRoLnNpbihhbmdsZSkgKiByYWRpdXMgKyBjZW50ZXJYO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICBuZXdUb3AgLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50SGVpZ2h0ICsgXCJweFwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIG5ld0xlZnQgLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBsZXQgaCA9IGFuZ2xlIC8gKDIgKiBNYXRoLlBJKTtcbiAgICBoID0gaCA8IDAgPyBoICsgMSA6IGg7XG4gICAgY29uc3QgcyA9IHJhZGl1cyAvIHRoaXMucjtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVih0aGlzLmNvbG9yLnIsIHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iKTtcbiAgICBoc3YuaCA9IGg7XG4gICAgaHN2LnMgPSBzO1xuICAgIGNvbnN0IHJnYmEgPSBIU1ZUb1JHQihoc3YuaCwgaHN2LnMsIGhzdi52KTtcbiAgICByZ2JhW1wiYVwiXSA9IHRoaXMuY29sb3IuYTtcbiAgICB0aGlzLmNvbG9yID0gcmdiYTtcblxuICAgIC8vIHVwZGF0ZSBwcmV2aWV3c1xuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG59O1xuXG4vKipcbiAqIFdyYXAgZ2l2ZW4gdGV4dCAobGFzdCBhcmd1bWVudCkgaW4gSFRNTCBlbGVtZW50cyAoYWxsIHByZWNlZGluZyBhcmd1bWVudHMpLlxuICpcbiAqIEBwYXJhbSB7Li4uYW55fSByZXN0IC0gTGlzdCBvZiB0YWcgbmFtZXMgZm9sbG93ZWQgYnkgaW5uZXIgdGV4dC5cbiAqIEByZXR1cm5zIEFuIGVsZW1lbnQgb3IgYSB0ZXh0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHdyYXBJblRhZyguLi5yZXN0KSB7XG4gIGlmIChyZXN0Lmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMuXCIpO1xuICB9IGVsc2UgaWYgKHJlc3QubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlc3RbMF0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJlc3RbMF0pO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQod3JhcEluVGFnKC4uLnJlc3Quc2xpY2UoMSkpKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB3YXkgdGhpcyB3b3JrcyBpcyBmb3IgYWxsIHByb3BlcnRpZXMgb2YgdGhpcy5wb3NzaWJsZSBvcHRpb25zLCB5b3UgY2FuIHN1cHBseSB0aGUgcHJvcGVydHkgbmFtZSBpbiBhbnkgZm9ybSB0byBsaXN0IHRoZSBvcHRpb25zLlxuICogQm9vbGVhbiBvcHRpb25zIGFyZSByZWNvZ25pc2VkIGFzIEJvb2xlYW5cbiAqIE51bWJlciBvcHRpb25zIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbZGVmYXVsdCB2YWx1ZSwgbWluIHZhbHVlLCBtYXggdmFsdWUsIHN0ZXBzaXplXVxuICogQ29sb3JzIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbJ2NvbG9yJywgJyNmZmZmZmYnXVxuICogU3RyaW5ncyB3aXRoIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbb3B0aW9uMSwgb3B0aW9uMiwgb3B0aW9uMywgLi5dXG4gKlxuICogVGhlIG9wdGlvbnMgYXJlIG1hdGNoZWQgd2l0aCB0aGVpciBjb3VudGVycGFydHMgaW4gZWFjaCBvZiB0aGUgbW9kdWxlcyBhbmQgdGhlIHZhbHVlcyB1c2VkIGluIHRoZSBjb25maWd1cmF0aW9uIGFyZVxuICovXG5sZXQgQ29uZmlndXJhdG9yJDEgPSBjbGFzcyBDb25maWd1cmF0b3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudE1vZHVsZSAgICAgICAgfCB0aGUgbG9jYXRpb24gd2hlcmUgcGFyZW50TW9kdWxlLnNldE9wdGlvbnMoKSBjYW4gYmUgY2FsbGVkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0Q29udGFpbmVyICAgIHwgdGhlIGRlZmF1bHQgY29udGFpbmVyIG9mIHRoZSBtb2R1bGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ3VyZU9wdGlvbnMgICAgfCB0aGUgZnVsbHkgY29uZmlndXJlZCBhbmQgcHJlZGVmaW5lZCBvcHRpb25zIHNldCBmb3VuZCBpbiBhbGxPcHRpb25zLmpzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaXhlbFJhdGlvICAgICAgICAgIHwgY2FudmFzIHBpeGVsIHJhdGlvXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhpZGVPcHRpb24gICAgICAgIHwgY3VzdG9tIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGhpZGUgb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50TW9kdWxlLFxuICAgIGRlZmF1bHRDb250YWluZXIsXG4gICAgY29uZmlndXJlT3B0aW9ucyxcbiAgICBwaXhlbFJhdGlvID0gMSxcbiAgICBoaWRlT3B0aW9uID0gKCkgPT4gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnRNb2R1bGU7XG4gICAgdGhpcy5jaGFuZ2VkT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuY29udGFpbmVyID0gZGVmYXVsdENvbnRhaW5lcjtcbiAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmhpZGVPcHRpb24gPSBoaWRlT3B0aW9uO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMucG9wdXBDb3VudGVyID0gMDtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBmaWx0ZXI6IHRydWUsXG4gICAgICBjb250YWluZXI6IHVuZGVmaW5lZCxcbiAgICAgIHNob3dCdXR0b246IHRydWUsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmNvbmZpZ3VyZU9wdGlvbnMgPSBjb25maWd1cmVPcHRpb25zO1xuICAgIHRoaXMubW9kdWxlT3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcbiAgICB0aGlzLnBvcHVwRGl2ID0ge307XG4gICAgdGhpcy5wb3B1cExpbWl0ID0gNTtcbiAgICB0aGlzLnBvcHVwSGlzdG9yeSA9IHt9O1xuICAgIHRoaXMuY29sb3JQaWNrZXIgPSBuZXcgQ29sb3JQaWNrZXIkMShwaXhlbFJhdGlvKTtcbiAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogcmVmcmVzaCBhbGwgb3B0aW9ucy5cbiAgICogQmVjYXVzZSBhbGwgbW9kdWxlcyBwYXJzZSB0aGVpciBvcHRpb25zIGJ5IHRoZW1zZWx2ZXMsIHdlIGp1c3QgdXNlIHRoZWlyIG9wdGlvbnMuIFdlIGNvcHkgdGhlbSBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmVzZXQgdGhlIHBvcHVwIGhpc3RvcnkgYmVjYXVzZSB0aGUgaW5kaWNlcyBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQuXG4gICAgICB0aGlzLnBvcHVwSGlzdG9yeSA9IHt9O1xuICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcblxuICAgICAgbGV0IGVuYWJsZWQgPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zLmpvaW4oKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb25zIGNhbm5vdCBiZSBudWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnNob3dCdXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93QnV0dG9uID0gb3B0aW9ucy5zaG93QnV0dG9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSB0cnVlO1xuICAgICAgICBlbmFibGVkID0gb3B0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucztcbiAgICAgICAgZW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgfVxuICAgIHRoaXMuX2NsZWFuKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG1vZHVsZU9wdGlvbnNcbiAgICovXG4gIHNldE1vZHVsZU9wdGlvbnMobW9kdWxlT3B0aW9ucykge1xuICAgIHRoaXMubW9kdWxlT3B0aW9ucyA9IG1vZHVsZU9wdGlvbnM7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLl9jbGVhbigpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMub3B0aW9ucy5jb250YWluZXI7XG4gICAgICB9XG4gICAgICB0aGlzLl9jcmVhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG5cbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCBjb3VudGVyID0gMDtcbiAgICBsZXQgc2hvdyA9IGZhbHNlO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIGluIHRoaXMuY29uZmlndXJlT3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnMsIG9wdGlvbikpIHtcbiAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgIHNob3cgPSBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIob3B0aW9uLCBbXSk7XG4gICAgICAgICAgc2hvdyA9XG4gICAgICAgICAgICBzaG93IHx8XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIgPT09IHRydWUgfHwgZmlsdGVyLmluZGV4T2Yob3B0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICBzaG93ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IHRydWU7XG5cbiAgICAgICAgICAvLyBsaW5lYnJlYWsgYmV0d2VlbiBjYXRlZ29yaWVzXG4gICAgICAgICAgaWYgKGNvdW50ZXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShbXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGEgaGVhZGVyIGZvciB0aGUgY2F0ZWdvcnlcbiAgICAgICAgICB0aGlzLl9tYWtlSGVhZGVyKG9wdGlvbik7XG5cbiAgICAgICAgICAvLyBnZXQgdGhlIHN1YiBvcHRpb25zXG4gICAgICAgICAgdGhpcy5faGFuZGxlT2JqZWN0KHRoaXMuY29uZmlndXJlT3B0aW9uc1tvcHRpb25dLCBbb3B0aW9uXSk7XG4gICAgICAgIH1cbiAgICAgICAgY291bnRlcisrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9tYWtlQnV0dG9uKCk7XG4gICAgdGhpcy5fcHVzaCgpO1xuICAgIC8vfiB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKHRoaXMuY29udGFpbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBkcmF3IGFsbCBET00gZWxlbWVudHMgb24gdGhlIHNjcmVlblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3B1c2goKSB7XG4gICAgdGhpcy53cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLndyYXBwZXIuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi13cmFwcGVyXCI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy53cmFwcGVyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zaG93UG9wdXBJZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBhbGwgRE9NIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndyYXBwZXIucmVtb3ZlQ2hpbGQodGhpcy5kb21FbGVtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud3JhcHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgICAgdGhpcy53cmFwcGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmRvbUVsZW1lbnRzID0gW107XG5cbiAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgYWN0dWFsT3B0aW9ucyBpZiBpdCBleGlzdHNcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFZhbHVlKHBhdGgpIHtcbiAgICBsZXQgYmFzZSA9IHRoaXMubW9kdWxlT3B0aW9ucztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChiYXNlW3BhdGhbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYmFzZSA9IGJhc2VbcGF0aFtpXV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cblxuICAvKipcbiAgICogYWxsIG9wdGlvbiBlbGVtZW50cyBhcmUgd3JhcHBlZCBpbiBhbiBpdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge0FycmF5LjxFbGVtZW50Pn0gZG9tRWxlbWVudHNcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlSXRlbShwYXRoLCAuLi5kb21FbGVtZW50cykge1xuICAgIGlmICh0aGlzLmFsbG93Q3JlYXRpb24gPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgaXRlbS5jbGFzc05hbWUgPVxuICAgICAgICBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctaXRlbSB2aXMtY29uZmlnLXNcIiArIHBhdGgubGVuZ3RoO1xuICAgICAgZG9tRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIGhlYWRlciBmb3IgbWFqb3Igc3ViamVjdHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlSGVhZGVyKG5hbWUpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctaGVhZGVyXCI7XG4gICAgZGl2LmlubmVyVGV4dCA9IG5hbWU7XG4gICAgdGhpcy5fbWFrZUl0ZW0oW10sIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGxhYmVsLCBpZiBpdCBpcyBhbiBvYmplY3QgbGFiZWwsIGl0IGdldHMgZGlmZmVyZW50IHN0eWxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2JqZWN0TGFiZWxcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VMYWJlbChuYW1lLCBwYXRoLCBvYmplY3RMYWJlbCA9IGZhbHNlKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkaXYuY2xhc3NOYW1lID1cbiAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1sYWJlbCB2aXMtY29uZmlnLXNcIiArIHBhdGgubGVuZ3RoO1xuICAgIGlmIChvYmplY3RMYWJlbCA9PT0gdHJ1ZSkge1xuICAgICAgd2hpbGUgKGRpdi5maXJzdENoaWxkKSB7XG4gICAgICAgIGRpdi5yZW1vdmVDaGlsZChkaXYuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICBkaXYuYXBwZW5kQ2hpbGQod3JhcEluVGFnKFwiaVwiLCBcImJcIiwgbmFtZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZSArIFwiOlwiO1xuICAgIH1cbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBkcm9wZG93biBsaXN0IGZvciBtdWx0aXBsZSBwb3NzaWJsZSBzdHJpbmcgb3B0b2luc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VEcm9wZG93bihhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKTtcbiAgICBzZWxlY3QuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXNlbGVjdFwiO1xuICAgIGxldCBzZWxlY3RlZFZhbHVlID0gMDtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGFyci5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGFyci5pbmRleE9mKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcbiAgICAgIG9wdGlvbi52YWx1ZSA9IGFycltpXTtcbiAgICAgIGlmIChpID09PSBzZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IFwic2VsZWN0ZWRcIjtcbiAgICAgIH1cbiAgICAgIG9wdGlvbi5pbm5lclRleHQgPSBhcnJbaV07XG4gICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgc2VsZWN0Lm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3VwZGF0ZSh0aGlzLnZhbHVlLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgc2VsZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgcmFuZ2Ugb2JqZWN0IGZvciBudW1lcmljIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYXJyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGFyclswXTtcbiAgICBjb25zdCBtaW4gPSBhcnJbMV07XG4gICAgY29uc3QgbWF4ID0gYXJyWzJdO1xuICAgIGNvbnN0IHN0ZXAgPSBhcnJbM107XG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgcmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlXCI7XG4gICAgdHJ5IHtcbiAgICAgIHJhbmdlLnR5cGUgPSBcInJhbmdlXCI7IC8vIG5vdCBzdXBwb3J0ZWQgb24gSUU5XG4gICAgICByYW5nZS5taW4gPSBtaW47XG4gICAgICByYW5nZS5tYXggPSBtYXg7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPOiBBZGQgc29tZSBlcnJvciBoYW5kbGluZy5cbiAgICB9XG4gICAgcmFuZ2Uuc3RlcCA9IHN0ZXA7XG5cbiAgICAvLyBzZXQgdXAgdGhlIHBvcHVwIHNldHRpbmdzIGluIGNhc2UgdGhleSBhcmUgbmVlZGVkLlxuICAgIGxldCBwb3B1cFN0cmluZyA9IFwiXCI7XG4gICAgbGV0IHBvcHVwVmFsdWUgPSAwO1xuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZhY3RvciA9IDEuMjtcbiAgICAgIGlmICh2YWx1ZSA8IDAgJiYgdmFsdWUgKiBmYWN0b3IgPCBtaW4pIHtcbiAgICAgICAgcmFuZ2UubWluID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1pbjtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAvIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgLyBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgKiBmYWN0b3IgPiBtYXggJiYgbWF4ICE9PSAxKSB7XG4gICAgICAgIHJhbmdlLm1heCA9IE1hdGguY2VpbCh2YWx1ZSAqIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5tYXg7XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIHJhbmdlLnZhbHVlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGlucHV0LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1yYW5nZWlucHV0XCI7XG4gICAgaW5wdXQudmFsdWUgPSByYW5nZS52YWx1ZTtcblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICByYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIG1lLl91cGRhdGUoTnVtYmVyKHRoaXMudmFsdWUpLCBwYXRoKTtcbiAgICB9O1xuICAgIHJhbmdlLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIHJhbmdlLCBpbnB1dCk7XG5cbiAgICAvLyBpZiBhIHBvcHVwIGlzIG5lZWRlZCBBTkQgaXQgaGFzIG5vdCBiZWVuIHNob3duIGZvciB0aGlzIHZhbHVlLCBzaG93IGl0LlxuICAgIGlmIChwb3B1cFN0cmluZyAhPT0gXCJcIiAmJiB0aGlzLnBvcHVwSGlzdG9yeVtpdGVtSW5kZXhdICE9PSBwb3B1cFZhbHVlKSB7XG4gICAgICB0aGlzLnBvcHVwSGlzdG9yeVtpdGVtSW5kZXhdID0gcG9wdXBWYWx1ZTtcbiAgICAgIHRoaXMuX3NldHVwUG9wdXAocG9wdXBTdHJpbmcsIGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBidXR0b24gb2JqZWN0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUJ1dHRvbigpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNob3dCdXR0b24gPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGdlbmVyYXRlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLmlubmVyVGV4dCA9IFwiZ2VuZXJhdGUgb3B0aW9uc1wiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24ub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcHJpbnRPcHRpb25zKCk7XG4gICAgICB9O1xuICAgICAgZ2VuZXJhdGVCdXR0b24ub25tb3VzZW92ZXIgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b24gaG92ZXJcIjtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3V0ID0gKCkgPT4ge1xuICAgICAgICBnZW5lcmF0ZUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctYnV0dG9uXCI7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5vcHRpb25zQ29udGFpbmVyLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1vcHRpb24tY29udGFpbmVyXCI7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaCh0aGlzLm9wdGlvbnNDb250YWluZXIpO1xuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKGdlbmVyYXRlQnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcHJlcGFyZSB0aGUgcG9wdXBcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXR1cFBvcHVwKHN0cmluZywgaW5kZXgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmluaXRpYWxpemVkID09PSB0cnVlICYmXG4gICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPT09IHRydWUgJiZcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyIDwgdGhpcy5wb3B1cExpbWl0XG4gICAgKSB7XG4gICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZGl2LmlkID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24tcG9wdXBcIjtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBzdHJpbmc7XG4gICAgICBkaXYub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnBvcHVwQ291bnRlciArPSAxO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHsgaHRtbDogZGl2LCBpbmRleDogaW5kZXggfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcmVtb3ZlIHRoZSBwb3B1cCBmcm9tIHRoZSBkb21cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVQb3B1cCgpIHtcbiAgICBpZiAodGhpcy5wb3B1cERpdi5odG1sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9wdXBEaXYuaHRtbCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cERpdi5kZWxldGVUaW1lb3V0KTtcbiAgICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgaWYgaXQgaXMgbmVlZGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Nob3dQb3B1cElmTmVlZGVkKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29ycmVzcG9uZGluZ0VsZW1lbnQgPSB0aGlzLmRvbUVsZW1lbnRzW3RoaXMucG9wdXBEaXYuaW5kZXhdO1xuICAgICAgY29uc3QgcmVjdCA9IGNvcnJlc3BvbmRpbmdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyBcInB4XCI7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUudG9wID0gcmVjdC50b3AgLSAzMCArIFwicHhcIjsgLy8gMzAgaXMgdGhlIGhlaWdodDtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuaGlkZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgICAgfSwgMTUwMCk7XG4gICAgICB0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcbiAgICAgIH0sIDE4MDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY2hlY2tib3ggZm9yIGJvb2xlYW4gb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNoZWNrYm94KGRlZmF1bHRWYWx1ZSwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBjaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBjaGVja2JveC50eXBlID0gXCJjaGVja2JveFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jaGVja2JveFwiO1xuICAgIGNoZWNrYm94LmNoZWNrZWQgPSBkZWZhdWx0VmFsdWU7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY2hlY2tib3gub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMuY2hlY2tlZCwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgdGV4dCBpbnB1dCBmaWVsZCBmb3Igc3RyaW5nIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWZhdWx0VmFsdWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VUZXh0SW5wdXQoZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcInRleHRcIjtcbiAgICBjaGVja2JveC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctdGV4dFwiO1xuICAgIGNoZWNrYm94LnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY2hlY2tib3gub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBjaGVja2JveCk7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGNvbG9yIGZpZWxkIHdpdGggYSBjb2xvciBwaWNrZXIgZm9yIGNvbG9yIGZpZWxkc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VDb2xvckZpZWxkKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29sb3IgPSBhcnJbMV07XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBkZWZhdWx0Q29sb3IgOiB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAhPT0gXCJub25lXCIpIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9ja1wiO1xuICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNvbG9yQmxvY2sgbm9uZVwiO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBkaXYpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgdGhlIGNvbG9yIGJ1dHRvbnMgdG8gY2FsbCB0aGUgY29sb3IgcGlja2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZGl2XG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKSB7XG4gICAgLy8gY2xlYXIgdGhlIGNhbGxiYWNrIGZyb20gdGhpcyBkaXZcbiAgICBkaXYub25jbGljayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgdGhpcy5jb2xvclBpY2tlci5pbnNlcnRUbyhkaXYpO1xuICAgIHRoaXMuY29sb3JQaWNrZXIuc2hvdygpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRDb2xvcih2YWx1ZSk7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRVcGRhdGVDYWxsYmFjaygoY29sb3IpID0+IHtcbiAgICAgIGNvbnN0IGNvbG9yU3RyaW5nID1cbiAgICAgICAgXCJyZ2JhKFwiICsgY29sb3IuciArIFwiLFwiICsgY29sb3IuZyArIFwiLFwiICsgY29sb3IuYiArIFwiLFwiICsgY29sb3IuYSArIFwiKVwiO1xuICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yU3RyaW5nO1xuICAgICAgdGhpcy5fdXBkYXRlKGNvbG9yU3RyaW5nLCBwYXRoKTtcbiAgICB9KTtcblxuICAgIC8vIG9uIGNsb3NlIG9mIHRoZSBjb2xvcnBpY2tlciwgcmVzdG9yZSB0aGUgY2FsbGJhY2suXG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRDbG9zZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHBhcnNlIGFuIG9iamVjdCBhbmQgZHJhdyB0aGUgY29ycmVjdCBpdGVtc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtwYXRoPVtdXSAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrT25seT1mYWxzZV1cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGFuZGxlT2JqZWN0KG9iaiwgcGF0aCA9IFtdLCBjaGVja09ubHkgPSBmYWxzZSkge1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5vcHRpb25zLmZpbHRlcjtcbiAgICBsZXQgdmlzaWJsZUluU2V0ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBzdWJPYmogaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgc3ViT2JqKSkge1xuICAgICAgICBzaG93ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaXRlbSA9IG9ialtzdWJPYmpdO1xuICAgICAgICBjb25zdCBuZXdQYXRoID0gY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIHN1Yk9iaik7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBzaG93ID0gZmlsdGVyKHN1Yk9iaiwgcGF0aCk7XG5cbiAgICAgICAgICAvLyBpZiBuZWVkZWQgd2UgbXVzdCBnbyBkZWVwZXIgaW50byB0aGUgb2JqZWN0LlxuICAgICAgICAgIGlmIChzaG93ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShpdGVtKSAmJlxuICAgICAgICAgICAgICB0eXBlb2YgaXRlbSAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICB0eXBlb2YgaXRlbSAhPT0gXCJib29sZWFuXCIgJiZcbiAgICAgICAgICAgICAgaXRlbSBpbnN0YW5jZW9mIE9iamVjdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICBzaG93ID0gdGhpcy5faGFuZGxlT2JqZWN0KGl0ZW0sIG5ld1BhdGgsIHRydWUpO1xuICAgICAgICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBjaGVja09ubHkgPT09IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHZpc2libGVJblNldCA9IHRydWU7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZShuZXdQYXRoKTtcblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBcnJheShpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZVRleHRJbnB1dChpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VDaGVja2JveChpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBza2lwIHRoZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBlbmFibGVkXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGlkZU9wdGlvbihwYXRoLCBzdWJPYmosIHRoaXMubW9kdWxlT3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgLy8gaW5pdGlhbGx5IGNvbGxhcHNlIG9wdGlvbnMgd2l0aCBhbiBkaXNhYmxlZCBlbmFibGVkIG9wdGlvbi5cbiAgICAgICAgICAgICAgaWYgKGl0ZW0uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFBhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkobmV3UGF0aCwgXCJlbmFibGVkXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuYWJsZWRWYWx1ZSA9IHRoaXMuX2dldFZhbHVlKGVuYWJsZWRQYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZFZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChzdWJPYmosIG5ld1BhdGgsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUl0ZW0obmV3UGF0aCwgbGFiZWwpO1xuICAgICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlT2JqZWN0KGl0ZW0sIG5ld1BhdGgpIHx8IHZpc2libGVJblNldDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIGVuYWJsZWRWYWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFrZUl0ZW0obmV3UGF0aCwgbGFiZWwpO1xuICAgICAgICAgICAgICAgIHZpc2libGVJblNldCA9XG4gICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJkb250IGtub3cgaG93IHRvIGhhbmRsZVwiLCBpdGVtLCBzdWJPYmosIG5ld1BhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZUluU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSB0aGUgYXJyYXkgdHlwZSBvZiBvcHRpb25cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYXJyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVBcnJheShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHR5cGVvZiBhcnJbMF0gPT09IFwic3RyaW5nXCIgJiYgYXJyWzBdID09PSBcImNvbG9yXCIpIHtcbiAgICAgIHRoaXMuX21ha2VDb2xvckZpZWxkKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclsxXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5fbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclswXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdGhpcy5fbWFrZVJhbmdlKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclswXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IE51bWJlcih2YWx1ZSkgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxlZCB0byB1cGRhdGUgdGhlIG5ldHdvcmsgd2l0aCB0aGUgbmV3IHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlKHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2NvbnN0cnVjdE9wdGlvbnModmFsdWUsIHBhdGgpO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5wYXJlbnQuYm9keSAmJlxuICAgICAgdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdFxuICAgICkge1xuICAgICAgdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyLmVtaXQoXCJjb25maWdDaGFuZ2VcIiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMucGFyZW50LnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBib29sZWFufSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBwYXJhbSB7e319IG9wdGlvbnNPYmpcbiAgICogQHJldHVybnMge3t9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbnN0cnVjdE9wdGlvbnModmFsdWUsIHBhdGgsIG9wdGlvbnNPYmogPSB7fSkge1xuICAgIGxldCBwb2ludGVyID0gb3B0aW9uc09iajtcblxuICAgIC8vIHdoZW4gZHJvcGRvd24gYm94ZXMgY2FuIGJlIHN0cmluZyBvciBib29sZWFuLCB3ZSB0eXBlY2FzdCBpdCBpbnRvIGNvcnJlY3QgdHlwZXNcbiAgICB2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiA/IHRydWUgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHZhbHVlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGF0aFtpXSAhPT0gXCJnbG9iYWxcIikge1xuICAgICAgICBpZiAocG9pbnRlcltwYXRoW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcG9pbnRlcltwYXRoW2ldXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpICE9PSBwYXRoLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBwb2ludGVyID0gcG9pbnRlcltwYXRoW2ldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnNPYmo7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcmludE9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuXG4gICAgd2hpbGUgKHRoaXMub3B0aW9uc0NvbnRhaW5lci5maXJzdENoaWxkKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuYXBwZW5kQ2hpbGQoXG4gICAgICB3cmFwSW5UYWcoXCJwcmVcIiwgXCJjb25zdCBvcHRpb25zID0gXCIgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zLCBudWxsLCAyKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHt7fX0gb3B0aW9uc1xuICAgKi9cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoYW5nZWRPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLl9jb25zdHJ1Y3RPcHRpb25zKFxuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zW2ldLnZhbHVlLFxuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zW2ldLnBhdGgsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG59O1xuXG4vKipcbiAqIFBvcHVwIGlzIGEgY2xhc3MgdG8gY3JlYXRlIGEgcG9wdXAgd2luZG93IHdpdGggc29tZSB0ZXh0XG4gKi9cbmxldCBQb3B1cCQxID0gY2xhc3MgUG9wdXAge1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXIgICAgICAgVGhlIGNvbnRhaW5lciBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgb3ZlcmZsb3dNZXRob2QgIEhvdyB0aGUgcG9wdXAgc2hvdWxkIGFjdCB0byBvdmVyZmxvd2luZyAoJ2ZsaXAnIG9yICdjYXAnKVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCBvdmVyZmxvd01ldGhvZCkge1xuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMub3ZlcmZsb3dNZXRob2QgPSBvdmVyZmxvd01ldGhvZCB8fCBcImNhcFwiO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xuICAgIHRoaXMucGFkZGluZyA9IDU7XG4gICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgZnJhbWVcbiAgICB0aGlzLmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmZyYW1lLmNsYXNzTmFtZSA9IFwidmlzLXRvb2x0aXBcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCAgIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKiBAcGFyYW0ge251bWJlcn0geSAgIFZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIHNldFBvc2l0aW9uKHgsIHkpIHtcbiAgICB0aGlzLnggPSBwYXJzZUludCh4KTtcbiAgICB0aGlzLnkgPSBwYXJzZUludCh5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbnRlbnQgZm9yIHRoZSBwb3B1cCB3aW5kb3cuIFRoaXMgY2FuIGJlIEhUTUwgY29kZSBvciB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEVsZW1lbnR9IGNvbnRlbnRcbiAgICovXG4gIHNldFRleHQoY29udGVudCkge1xuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgd2hpbGUgKHRoaXMuZnJhbWUuZmlyc3RDaGlsZCkge1xuICAgICAgICB0aGlzLmZyYW1lLnJlbW92ZUNoaWxkKHRoaXMuZnJhbWUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdHJpbmcgY29udGFpbmluZyBsaXRlcmFsIHRleHQsIGVsZW1lbnQgaGFzIHRvIGJlIHVzZWQgZm9yIEhUTUwgZHVlIHRvXG4gICAgICAvLyBYU1Mgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGlubmVySFRNTCAoaS5lLiBwcmV2ZW50IFhTUyBieSBhY2NpZGVudCkuXG4gICAgICB0aGlzLmZyYW1lLmlubmVyVGV4dCA9IGNvbnRlbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIHBvcHVwIHdpbmRvd1xuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkb1Nob3ddICAgIFNob3cgb3IgaGlkZSB0aGUgd2luZG93XG4gICAqL1xuICBzaG93KGRvU2hvdykge1xuICAgIGlmIChkb1Nob3cgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZG9TaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZG9TaG93ID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmZyYW1lLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5mcmFtZS5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZnJhbWUucGFyZW50Tm9kZS5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuZnJhbWUucGFyZW50Tm9kZS5jbGllbnRXaWR0aDtcblxuICAgICAgbGV0IGxlZnQgPSAwLFxuICAgICAgICB0b3AgPSAwO1xuXG4gICAgICBpZiAodGhpcy5vdmVyZmxvd01ldGhvZCA9PSBcImZsaXBcIikge1xuICAgICAgICBsZXQgaXNMZWZ0ID0gZmFsc2UsXG4gICAgICAgICAgaXNUb3AgPSB0cnVlOyAvLyBXaGVyZSBhcm91bmQgdGhlIHBvc2l0aW9uIGl0J3MgbG9jYXRlZFxuXG4gICAgICAgIGlmICh0aGlzLnkgLSBoZWlnaHQgPCB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICBpc1RvcCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMueCArIHdpZHRoID4gbWF4V2lkdGggLSB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICBpc0xlZnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTGVmdCkge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLnggLSB3aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZWZ0ID0gdGhpcy54O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVG9wKSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55IC0gaGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvcCA9IHRoaXMueTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gdGhpcy55IC0gaGVpZ2h0O1xuICAgICAgICBpZiAodG9wICsgaGVpZ2h0ICsgdGhpcy5wYWRkaW5nID4gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgdG9wID0gbWF4SGVpZ2h0IC0gaGVpZ2h0IC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3AgPCB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBsZWZ0ID0gdGhpcy54O1xuICAgICAgICBpZiAobGVmdCArIHdpZHRoICsgdGhpcy5wYWRkaW5nID4gbWF4V2lkdGgpIHtcbiAgICAgICAgICBsZWZ0ID0gbWF4V2lkdGggLSB3aWR0aCAtIHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVmdCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS5sZWZ0ID0gbGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gdG9wICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG4gICAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGlkZSB0aGUgcG9wdXAgd2luZG93XG4gICAqL1xuICBoaWRlKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICB0aGlzLmZyYW1lLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5mcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZnJhbWUpOyAvLyBSZW1vdmUgZWxlbWVudCBmcm9tIERPTVxuICB9XG59O1xuXG5sZXQgZXJyb3JGb3VuZCA9IGZhbHNlO1xubGV0IGFsbE9wdGlvbnM7XG5cbmNvbnN0IFZBTElEQVRPUl9QUklOVF9TVFlMRSQxID0gXCJiYWNrZ3JvdW5kOiAjRkZlZWVlOyBjb2xvcjogI2RkMDAwMFwiO1xuXG4vKipcbiAqICBVc2VkIHRvIHZhbGlkYXRlIG9wdGlvbnMuXG4gKi9cbmxldCBWYWxpZGF0b3IkMSA9IGNsYXNzIFZhbGlkYXRvciB7XG4gIC8qKlxuICAgKiBNYWluIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gcmVmZXJlbmNlT3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gc3ViT2JqZWN0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGUob3B0aW9ucywgcmVmZXJlbmNlT3B0aW9ucywgc3ViT2JqZWN0KSB7XG4gICAgZXJyb3JGb3VuZCA9IGZhbHNlO1xuICAgIGFsbE9wdGlvbnMgPSByZWZlcmVuY2VPcHRpb25zO1xuICAgIGxldCB1c2VkT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgaWYgKHN1Yk9iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1c2VkT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnNbc3ViT2JqZWN0XTtcbiAgICB9XG4gICAgVmFsaWRhdG9yLnBhcnNlKG9wdGlvbnMsIHVzZWRPcHRpb25zLCBbXSk7XG4gICAgcmV0dXJuIGVycm9yRm91bmQ7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCB0cmF2ZXJzZSBhbiBvYmplY3QgcmVjdXJzaXZlbHkgYW5kIGNoZWNrIGV2ZXJ5IHZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcGFyc2Uob3B0aW9ucywgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCkge1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICBWYWxpZGF0b3IuY2hlY2sob3B0aW9uLCBvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZXZlcnkgdmFsdWUuIElmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QsIGNhbGwgdGhlIHBhcnNlIGZ1bmN0aW9uIG9uIHRoYXQgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgY2hlY2sob3B0aW9uLCBvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgaWYgKFxuICAgICAgcmVmZXJlbmNlT3B0aW9uc1tvcHRpb25dID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMuX19hbnlfXyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBWYWxpZGF0b3IuZ2V0U3VnZ2VzdGlvbihvcHRpb24sIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZWZlcmVuY2VPcHRpb24gPSBvcHRpb247XG4gICAgbGV0IGlzX29iamVjdCA9IHRydWU7XG5cbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgb25seSB0cmlnZ2VycyBpZiB0aGUgX19hbnlfXyBpcyBpbiB0aGUgdG9wIGxldmVsIG9mIHRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgIC8vICAgICAgIFRIQVQnUyBBIFJFQUxMWSBCQUQgUExBQ0UgVE8gQUxMT1cgSVQhISEhXG4gICAgICAvLyBUT0RPOiBFeGFtaW5lIGlmIG5lZWRlZCwgcmVtb3ZlIGlmIHBvc3NpYmxlXG5cbiAgICAgIC8vIF9fYW55X18gaXMgYSB3aWxkY2FyZC4gQW55IHZhbHVlIGlzIGFjY2VwdGVkIGFuZCB3aWxsIGJlIGZ1cnRoZXIgYW5hbHlzZWQgYnkgcmVmZXJlbmNlLlxuICAgICAgcmVmZXJlbmNlT3B0aW9uID0gXCJfX2FueV9fXCI7XG5cbiAgICAgIC8vIGlmIHRoZSBhbnktc3ViZ3JvdXAgaXMgbm90IGEgcHJlZGVmaW5lZCBvYmplY3QgaW4gdGhlIGNvbmZpZ3VyYXRvcixcbiAgICAgIC8vIHdlIGRvIG5vdCBsb29rIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICBpc19vYmplY3QgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pID09PSBcIm9iamVjdFwiO1xuICAgIH1cblxuICAgIGxldCByZWZPcHRpb25PYmogPSByZWZlcmVuY2VPcHRpb25zW3JlZmVyZW5jZU9wdGlvbl07XG4gICAgaWYgKGlzX29iamVjdCAmJiByZWZPcHRpb25PYmouX190eXBlX18gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVmT3B0aW9uT2JqID0gcmVmT3B0aW9uT2JqLl9fdHlwZV9fO1xuICAgIH1cblxuICAgIFZhbGlkYXRvci5jaGVja0ZpZWxkcyhcbiAgICAgIG9wdGlvbixcbiAgICAgIG9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb25zLFxuICAgICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgICAgcmVmT3B0aW9uT2JqLFxuICAgICAgcGF0aFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvcHRpb24gICAgICAgICAgIHwgdGhlIG9wdGlvbiBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge29iamVjdH0gIG9wdGlvbnMgICAgICAgICAgfCBUaGUgc3VwcGxpZWQgb3B0aW9ucyBvYmplY3RcbiAgICogQHBhcmFtIHtvYmplY3R9ICByZWZlcmVuY2VPcHRpb25zIHwgVGhlIHJlZmVyZW5jZSBvcHRpb25zIGNvbnRhaW5pbmcgYWxsIG9wdGlvbnMgYW5kIHRoZWlyIGFsbG93ZWQgZm9ybWF0c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZmVyZW5jZU9wdGlvbiAgfCBVc3VhbGx5IHRoaXMgaXMgdGhlIHNhbWUgYXMgb3B0aW9uLCBleGNlcHQgd2hlbiBoYW5kbGluZyBhbiBfX2FueV9fIHRhZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICByZWZPcHRpb25PYmogICAgIHwgVGhpcyBpcyB0aGUgdHlwZSBvYmplY3QgZnJvbSB0aGUgcmVmZXJlbmNlIG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gICBwYXRoICAgICAgICAgICAgIHwgd2hlcmUgaW4gdGhlIG9iamVjdCBpcyB0aGUgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVja0ZpZWxkcyhcbiAgICBvcHRpb24sXG4gICAgb3B0aW9ucyxcbiAgICByZWZlcmVuY2VPcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbixcbiAgICByZWZPcHRpb25PYmosXG4gICAgcGF0aFxuICApIHtcbiAgICBjb25zdCBsb2cgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCIlY1wiICsgbWVzc2FnZSArIFZhbGlkYXRvci5wcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiksXG4gICAgICAgIFZBTElEQVRPUl9QUklOVF9TVFlMRSQxXG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25UeXBlID0gVmFsaWRhdG9yLmdldFR5cGUob3B0aW9uc1tvcHRpb25dKTtcbiAgICBjb25zdCByZWZPcHRpb25UeXBlID0gcmVmT3B0aW9uT2JqW29wdGlvblR5cGVdO1xuXG4gICAgaWYgKHJlZk9wdGlvblR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaWYgdGhlIHR5cGUgaXMgY29ycmVjdCwgd2UgY2hlY2sgaWYgaXQgaXMgc3VwcG9zZWQgdG8gYmUgb25lIG9mIGEgZmV3IHNlbGVjdCB2YWx1ZXNcbiAgICAgIGlmIChcbiAgICAgICAgVmFsaWRhdG9yLmdldFR5cGUocmVmT3B0aW9uVHlwZSkgPT09IFwiYXJyYXlcIiAmJlxuICAgICAgICByZWZPcHRpb25UeXBlLmluZGV4T2Yob3B0aW9uc1tvcHRpb25dKSA9PT0gLTFcbiAgICAgICkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgJ0ludmFsaWQgb3B0aW9uIGRldGVjdGVkIGluIFwiJyArXG4gICAgICAgICAgICBvcHRpb24gK1xuICAgICAgICAgICAgJ1wiLicgK1xuICAgICAgICAgICAgXCIgQWxsb3dlZCB2YWx1ZXMgYXJlOlwiICtcbiAgICAgICAgICAgIFZhbGlkYXRvci5wcmludChyZWZPcHRpb25UeXBlKSArXG4gICAgICAgICAgICAnIG5vdCBcIicgK1xuICAgICAgICAgICAgb3B0aW9uc1tvcHRpb25dICtcbiAgICAgICAgICAgICdcIi4gJ1xuICAgICAgICApO1xuICAgICAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9uVHlwZSA9PT0gXCJvYmplY3RcIiAmJiByZWZlcmVuY2VPcHRpb24gIT09IFwiX19hbnlfX1wiKSB7XG4gICAgICAgIHBhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgb3B0aW9uKTtcbiAgICAgICAgVmFsaWRhdG9yLnBhcnNlKFxuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSxcbiAgICAgICAgICByZWZlcmVuY2VPcHRpb25zW3JlZmVyZW5jZU9wdGlvbl0sXG4gICAgICAgICAgcGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVmT3B0aW9uT2JqW1wiYW55XCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHR5cGUgb2YgdGhlIGZpZWxkIGlzIGluY29ycmVjdCBhbmQgdGhlIGZpZWxkIGNhbm5vdCBiZSBhbnlcbiAgICAgIGxvZyhcbiAgICAgICAgJ0ludmFsaWQgdHlwZSByZWNlaXZlZCBmb3IgXCInICtcbiAgICAgICAgICBvcHRpb24gK1xuICAgICAgICAgICdcIi4gRXhwZWN0ZWQ6ICcgK1xuICAgICAgICAgIFZhbGlkYXRvci5wcmludChPYmplY3Qua2V5cyhyZWZPcHRpb25PYmopKSArXG4gICAgICAgICAgXCIuIFJlY2VpdmVkIFtcIiArXG4gICAgICAgICAgb3B0aW9uVHlwZSArXG4gICAgICAgICAgJ10gXCInICtcbiAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICdcIidcbiAgICAgICk7XG4gICAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3QgfCBib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgQXJyYXkuPG51bWJlcj4gfCBEYXRlIHwgTm9kZSB8IE1vbWVudCB8IHVuZGVmaW5lZCB8IG51bGx9IG9iamVjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgZ2V0VHlwZShvYmplY3QpIHtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcblxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZiAob2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIFwiZGF0ZVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdC5ub2RlVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBcImRvbVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdC5faXNBTW9tZW50T2JqZWN0ID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBcIm1vbWVudFwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwib2JqZWN0XCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcGF0aFxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgZ2V0U3VnZ2VzdGlvbihvcHRpb24sIG9wdGlvbnMsIHBhdGgpIHtcbiAgICBjb25zdCBsb2NhbFNlYXJjaCA9IFZhbGlkYXRvci5maW5kSW5PcHRpb25zKG9wdGlvbiwgb3B0aW9ucywgcGF0aCwgZmFsc2UpO1xuICAgIGNvbnN0IGdsb2JhbFNlYXJjaCA9IFZhbGlkYXRvci5maW5kSW5PcHRpb25zKG9wdGlvbiwgYWxsT3B0aW9ucywgW10sIHRydWUpO1xuXG4gICAgY29uc3QgbG9jYWxTZWFyY2hUaHJlc2hvbGQgPSA4O1xuICAgIGNvbnN0IGdsb2JhbFNlYXJjaFRocmVzaG9sZCA9IDQ7XG5cbiAgICBsZXQgbXNnO1xuICAgIGlmIChsb2NhbFNlYXJjaC5pbmRleE1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1zZyA9XG4gICAgICAgIFwiIGluIFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uLCBcIlwiKSArXG4gICAgICAgICdQZXJoYXBzIGl0IHdhcyBpbmNvbXBsZXRlPyBEaWQgeW91IG1lYW46IFwiJyArXG4gICAgICAgIGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggK1xuICAgICAgICAnXCI/XFxuXFxuJztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZ2xvYmFsU2VhcmNoLmRpc3RhbmNlIDw9IGdsb2JhbFNlYXJjaFRocmVzaG9sZCAmJlxuICAgICAgbG9jYWxTZWFyY2guZGlzdGFuY2UgPiBnbG9iYWxTZWFyY2guZGlzdGFuY2VcbiAgICApIHtcbiAgICAgIG1zZyA9XG4gICAgICAgIFwiIGluIFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uLCBcIlwiKSArXG4gICAgICAgIFwiUGVyaGFwcyBpdCB3YXMgbWlzcGxhY2VkPyBNYXRjaGluZyBvcHRpb24gZm91bmQgYXQ6IFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24oXG4gICAgICAgICAgZ2xvYmFsU2VhcmNoLnBhdGgsXG4gICAgICAgICAgZ2xvYmFsU2VhcmNoLmNsb3Nlc3RNYXRjaCxcbiAgICAgICAgICBcIlwiXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChsb2NhbFNlYXJjaC5kaXN0YW5jZSA8PSBsb2NhbFNlYXJjaFRocmVzaG9sZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgJy4gRGlkIHlvdSBtZWFuIFwiJyArXG4gICAgICAgIGxvY2FsU2VhcmNoLmNsb3Nlc3RNYXRjaCArXG4gICAgICAgICdcIj8nICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIuIERpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U6IFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKG9wdGlvbnMpKSArXG4gICAgICAgIFZhbGlkYXRvci5wcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbik7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICclY1Vua25vd24gb3B0aW9uIGRldGVjdGVkOiBcIicgKyBvcHRpb24gKyAnXCInICsgbXNnLFxuICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICApO1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHRyYXZlcnNlIHRoZSBvcHRpb25zIGluIHNlYXJjaCBmb3IgYSBtYXRjaC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVjdXJzaXZlPWZhbHNlXVxuICAgKiBAcmV0dXJucyB7e2Nsb3Nlc3RNYXRjaDogc3RyaW5nLCBwYXRoOiBBcnJheSwgZGlzdGFuY2U6IG51bWJlcn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBmaW5kSW5PcHRpb25zKG9wdGlvbiwgb3B0aW9ucywgcGF0aCwgcmVjdXJzaXZlID0gZmFsc2UpIHtcbiAgICBsZXQgbWluID0gMWU5O1xuICAgIGxldCBjbG9zZXN0TWF0Y2ggPSBcIlwiO1xuICAgIGxldCBjbG9zZXN0TWF0Y2hQYXRoID0gW107XG4gICAgY29uc3QgbG93ZXJDYXNlT3B0aW9uID0gb3B0aW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgbGV0IGluZGV4TWF0Y2ggPSB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBvcCBpbiBvcHRpb25zKSB7XG4gICAgICBsZXQgZGlzdGFuY2U7XG4gICAgICBpZiAob3B0aW9uc1tvcF0uX190eXBlX18gIT09IHVuZGVmaW5lZCAmJiByZWN1cnNpdmUgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMoXG4gICAgICAgICAgb3B0aW9uLFxuICAgICAgICAgIG9wdGlvbnNbb3BdLFxuICAgICAgICAgIGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pbiA+IHJlc3VsdC5kaXN0YW5jZSkge1xuICAgICAgICAgIGNsb3Nlc3RNYXRjaCA9IHJlc3VsdC5jbG9zZXN0TWF0Y2g7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoUGF0aCA9IHJlc3VsdC5wYXRoO1xuICAgICAgICAgIG1pbiA9IHJlc3VsdC5kaXN0YW5jZTtcbiAgICAgICAgICBpbmRleE1hdGNoID0gcmVzdWx0LmluZGV4TWF0Y2g7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcC50b0xvd2VyQ2FzZSgpLmluZGV4T2YobG93ZXJDYXNlT3B0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICBpbmRleE1hdGNoID0gb3A7XG4gICAgICAgIH1cbiAgICAgICAgZGlzdGFuY2UgPSBWYWxpZGF0b3IubGV2ZW5zaHRlaW5EaXN0YW5jZShvcHRpb24sIG9wKTtcbiAgICAgICAgaWYgKG1pbiA+IGRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gb3A7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoUGF0aCA9IGNvcHlBcnJheShwYXRoKTtcbiAgICAgICAgICBtaW4gPSBkaXN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY2xvc2VzdE1hdGNoOiBjbG9zZXN0TWF0Y2gsXG4gICAgICBwYXRoOiBjbG9zZXN0TWF0Y2hQYXRoLFxuICAgICAgZGlzdGFuY2U6IG1pbixcbiAgICAgIGluZGV4TWF0Y2g6IGluZGV4TWF0Y2gsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcHJpbnRMb2NhdGlvbihwYXRoLCBvcHRpb24sIHByZWZpeCA9IFwiUHJvYmxlbSB2YWx1ZSBmb3VuZCBhdDogXFxuXCIpIHtcbiAgICBsZXQgc3RyID0gXCJcXG5cXG5cIiArIHByZWZpeCArIFwib3B0aW9ucyA9IHtcXG5cIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaSArIDE7IGorKykge1xuICAgICAgICBzdHIgKz0gXCIgIFwiO1xuICAgICAgfVxuICAgICAgc3RyICs9IHBhdGhbaV0gKyBcIjoge1xcblwiO1xuICAgIH1cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhdGgubGVuZ3RoICsgMTsgaisrKSB7XG4gICAgICBzdHIgKz0gXCIgIFwiO1xuICAgIH1cbiAgICBzdHIgKz0gb3B0aW9uICsgXCJcXG5cIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoICsgMTsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhdGgubGVuZ3RoIC0gaTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gXCJ9XFxuXCI7XG4gICAgfVxuICAgIHJldHVybiBzdHIgKyBcIlxcblxcblwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludChvcHRpb25zKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXG4gICAgICAucmVwbGFjZSgvKFwiKXwoXFxbKXwoXFxdKXwoLFwiX190eXBlX19cIikvZywgXCJcIilcbiAgICAgIC5yZXBsYWNlKC8oLCkvZywgXCIsIFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQ29tcHV0ZSB0aGUgZWRpdCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gc3RyaW5nc1xuICAgKiBodHRwOi8vZW4ud2lraWJvb2tzLm9yZy93aWtpL0FsZ29yaXRobV9JbXBsZW1lbnRhdGlvbi9TdHJpbmdzL0xldmVuc2h0ZWluX2Rpc3RhbmNlI0phdmFTY3JpcHRcbiAgICpcbiAgICogQ29weXJpZ2h0IChjKSAyMDExIEFuZHJlaSBNYWNrZW56aWVcbiAgICpcbiAgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAgICpcbiAgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gICAqXG4gICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBsZXZlbnNodGVpbkRpc3RhbmNlKGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggPT09IDApIHJldHVybiBiLmxlbmd0aDtcbiAgICBpZiAoYi5sZW5ndGggPT09IDApIHJldHVybiBhLmxlbmd0aDtcblxuICAgIGNvbnN0IG1hdHJpeCA9IFtdO1xuXG4gICAgLy8gaW5jcmVtZW50IGFsb25nIHRoZSBmaXJzdCBjb2x1bW4gb2YgZWFjaCByb3dcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hdHJpeFtpXSA9IFtpXTtcbiAgICB9XG5cbiAgICAvLyBpbmNyZW1lbnQgZWFjaCBjb2x1bW4gaW4gdGhlIGZpcnN0IHJvd1xuICAgIGxldCBqO1xuICAgIGZvciAoaiA9IDA7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgbWF0cml4WzBdW2pdID0gajtcbiAgICB9XG5cbiAgICAvLyBGaWxsIGluIHRoZSByZXN0IG9mIHRoZSBtYXRyaXhcbiAgICBmb3IgKGkgPSAxOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAoaiA9IDE7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoYi5jaGFyQXQoaSAtIDEpID09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtpIC0gMV1baiAtIDFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqIC0gMV0gKyAxLCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgICBtYXRyaXhbaV1baiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgIG1hdHJpeFtpIC0gMV1bal0gKyAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTsgLy8gZGVsZXRpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRyaXhbYi5sZW5ndGhdW2EubGVuZ3RoXTtcbiAgfVxufTtcblxuY29uc3QgQWN0aXZhdG9yID0gQWN0aXZhdG9yJDE7XHJcbmNvbnN0IENvbG9yUGlja2VyID0gQ29sb3JQaWNrZXIkMTtcclxuY29uc3QgQ29uZmlndXJhdG9yID0gQ29uZmlndXJhdG9yJDE7XHJcbmNvbnN0IEhhbW1lciA9IEhhbW1lciQxO1xyXG5jb25zdCBQb3B1cCA9IFBvcHVwJDE7XHJcbmNvbnN0IFZBTElEQVRPUl9QUklOVF9TVFlMRSA9IFZBTElEQVRPUl9QUklOVF9TVFlMRSQxO1xyXG5jb25zdCBWYWxpZGF0b3IgPSBWYWxpZGF0b3IkMTtcblxuZXhwb3J0IHsgQWN0aXZhdG9yLCBBbGVhLCBDb2xvclBpY2tlciwgQ29uZmlndXJhdG9yLCBERUxFVEUsIEhTVlRvSGV4LCBIU1ZUb1JHQiwgSGFtbWVyLCBQb3B1cCwgUkdCVG9IU1YsIFJHQlRvSGV4LCBWQUxJREFUT1JfUFJJTlRfU1RZTEUsIFZhbGlkYXRvciwgYWRkQ2xhc3NOYW1lLCBhZGRDc3NUZXh0LCBiaW5hcnlTZWFyY2hDdXN0b20sIGJpbmFyeVNlYXJjaFZhbHVlLCBicmlkZ2VPYmplY3QsIGNvcHlBbmRFeHRlbmRBcnJheSwgY29weUFycmF5LCBkZWVwRXh0ZW5kLCBkZWVwT2JqZWN0QXNzaWduLCBlYXNpbmdGdW5jdGlvbnMsIGVxdWFsQXJyYXksIGV4dGVuZCwgZmlsbElmRGVmaW5lZCwgZm9yRWFjaCwgZ2V0QWJzb2x1dGVMZWZ0LCBnZXRBYnNvbHV0ZVJpZ2h0LCBnZXRBYnNvbHV0ZVRvcCwgZ2V0U2Nyb2xsQmFyV2lkdGgsIGdldFRhcmdldCwgZ2V0VHlwZSwgaGFzUGFyZW50LCBoZXhUb0hTViwgaGV4VG9SR0IsIGluc2VydFNvcnQsIGlzRGF0ZSwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1N0cmluZywgaXNWYWxpZEhleCwgaXNWYWxpZFJHQiwgaXNWYWxpZFJHQkEsIG1lcmdlT3B0aW9ucywgb3B0aW9uLCBvdmVycmlkZU9wYWNpdHksIHBhcnNlQ29sb3IsIHByZXZlbnREZWZhdWx0LCBwdXJlRGVlcE9iamVjdEFzc2lnbiwgcmVjdXJzaXZlRE9NRGVsZXRlLCByZW1vdmVDbGFzc05hbWUsIHJlbW92ZUNzc1RleHQsIHNlbGVjdGl2ZUJyaWRnZU9iamVjdCwgc2VsZWN0aXZlRGVlcEV4dGVuZCwgc2VsZWN0aXZlRXh0ZW5kLCBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kLCB0aHJvdHRsZSwgdG9BcnJheSwgdG9wTW9zdCwgdXBkYXRlUHJvcGVydHkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZpcy11dGlsLmpzLm1hcFxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIG5hdGl2ZUNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYFJlZmxlY3QuY29uc3RydWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5jb25zdHJ1Y3Rcbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKG5hdGl2ZUNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG5cbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIG5hdGl2ZUNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbnZhciBGT1JDRUQgPSBORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRztcblxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogRk9SQ0VEIH0sIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUNvbnN0cnVjdG9yKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUNvbnN0cnVjdG9yKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIG5hdGl2ZUNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgYXBwbHkocHVzaCwgJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYXBwbHkoYmluZCwgVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0UHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gYXBwbHkoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LmNvbnN0cnVjdCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUmVmbGVjdC5jb25zdHJ1Y3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3JlZmxlY3QvY29uc3RydWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvcmVmbGVjdC9jb25zdHJ1Y3RcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9sc1wiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEZPUkNFRCA9ICFERVNDUklQVE9SUyB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0luZGV4ZWRPYmplY3QoaXQpLCBrZXkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbn07XG5cbmlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0pIGdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnNcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKS5mO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzICE9PSBkZWZpbmVQcm9wZXJ0aWVzLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0aWVzOiBkZWZpbmVQcm9wZXJ0aWVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKFQsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQsIEQpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLnNoYW0pIGRlZmluZVByb3BlcnRpZXMuc2hhbSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydGllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydGllc1wiKTsiLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvb2JqZWN0L2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L2NyZWF0ZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2ZcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgc2V0UHJvdG90eXBlT2Y6IHNldFByb3RvdHlwZU9mXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9pbnN0YW5jZS9iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9iaW5kJyk7XG4iLCAiaW1wb3J0IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIHZhciBfY29udGV4dDtcbiAgX3NldFByb3RvdHlwZU9mID0gX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YpLmNhbGwoX2NvbnRleHQpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwgImltcG9ydCBfT2JqZWN0JGNyZWF0ZSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanNcIjtcbmltcG9ydCBfT2JqZWN0JGRlZmluZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBfT2JqZWN0JGNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG4iLCAiaW1wb3J0IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmltcG9ydCBfT2JqZWN0JGdldFByb3RvdHlwZU9mIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIHZhciBfY29udGV4dDtcbiAgX2dldFByb3RvdHlwZU9mID0gX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3QkZ2V0UHJvdG90eXBlT2YpLmNhbGwoX2NvbnRleHQpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgX09iamVjdCRnZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCAidmFyIF9TeW1ib2wgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiKTtcbnZhciBfU3ltYm9sJGl0ZXJhdG9yID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanNcIik7XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL2luc3RhbmNlL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9mb3ItZWFjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxuLy8gYEluc3RhbGxFcnJvckNhdXNlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1lcnJvci1jYXVzZS8jc2VjLWVycm9yb2JqZWN0cy1pbnN0YWxsLWVycm9yLWNhdXNlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBvcHRpb25zKSB7XG4gIGlmIChpc09iamVjdChvcHRpb25zKSAmJiAnY2F1c2UnIGluIG9wdGlvbnMpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywgJ2NhdXNlJywgb3B0aW9ucy5jYXVzZSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgJEVycm9yID0gRXJyb3I7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xuXG52YXIgVEVTVCA9IChmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBTdHJpbmcobmV3ICRFcnJvcihhcmcpLnN0YWNrKTsgfSkoJ3p4Y2FzZCcpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZG9zL25vLXZ1bG5lcmFibGUgLS0gc2FmZVxudmFyIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSA9IC9cXG5cXHMqYXQgW146XSo6W15cXG5dKi87XG52YXIgSVNfVjhfT1JfQ0hBS1JBX1NUQUNLID0gVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZLnRlc3QoVEVTVCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoSVNfVjhfT1JfQ0hBS1JBX1NUQUNLICYmIHR5cGVvZiBzdGFjayA9PSAnc3RyaW5nJyAmJiAhJEVycm9yLnByZXBhcmVTdGFja1RyYWNlKSB7XG4gICAgd2hpbGUgKGRyb3BFbnRyaWVzLS0pIHN0YWNrID0gcmVwbGFjZShzdGFjaywgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZLCAnJyk7XG4gIH0gcmV0dXJuIHN0YWNrO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ2EnKTtcbiAgaWYgKCEoJ3N0YWNrJyBpbiBlcnJvcikpIHJldHVybiB0cnVlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgNykpO1xuICByZXR1cm4gZXJyb3Iuc3RhY2sgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGNsZWFyRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhcicpO1xudmFyIEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlJyk7XG5cbi8vIG5vbi1zdGFuZGFyZCBWOFxudmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGVycm9yLCBDLCBzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFKSB7XG4gICAgaWYgKGNhcHR1cmVTdGFja1RyYWNlKSBjYXB0dXJlU3RhY2tUcmFjZShlcnJvciwgQyk7XG4gICAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNsZWFyRXJyb3JTdGFjayhzdGFjaywgZHJvcEVudHJpZXMpKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIFJlc3VsdFByb3RvdHlwZSA9IFJlc3VsdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19SRUNPUkQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfUkVDT1JEKTtcbiAgdmFyIElTX0lURVJBVE9SID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX0lURVJBVE9SKTtcbiAgdmFyIElOVEVSUlVQVEVEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklOVEVSUlVQVEVEKTtcbiAgdmFyIGZuID0gYmluZCh1bmJvdW5kRnVuY3Rpb24sIHRoYXQpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIHZhciBzdG9wID0gZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgIGlmIChpdGVyYXRvcikgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgY29uZGl0aW9uKTtcbiAgfTtcblxuICB2YXIgY2FsbEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKEFTX0VOVFJJRVMpIHtcbiAgICAgIGFuT2JqZWN0KHZhbHVlKTtcbiAgICAgIHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSwgc3RvcCkgOiBmbih2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgIH0gcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWUsIHN0b3ApIDogZm4odmFsdWUpO1xuICB9O1xuXG4gIGlmIChJU19SRUNPUkQpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlLml0ZXJhdG9yO1xuICB9IGVsc2UgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKCFpdGVyRm4pIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gSVNfUkVDT1JEID8gaXRlcmFibGUubmV4dCA6IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsRm4oc3RlcC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgJGRlZmF1bHQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID09PSB1bmRlZmluZWQgPyBhcmd1bWVudHMubGVuZ3RoIDwgMiA/ICcnIDogJGRlZmF1bHQgOiB0b1N0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGluc3RhbGxFcnJvckNhdXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UnKTtcbnZhciBpbnN0YWxsRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciBwdXNoID0gW10ucHVzaDtcblxudmFyICRBZ2dyZWdhdGVFcnJvciA9IGZ1bmN0aW9uIEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgbWVzc2FnZSAvKiAsIG9wdGlvbnMgKi8pIHtcbiAgdmFyIGlzSW5zdGFuY2UgPSBpc1Byb3RvdHlwZU9mKEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlLCB0aGlzKTtcbiAgdmFyIHRoYXQ7XG4gIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgIHRoYXQgPSBzZXRQcm90b3R5cGVPZihuZXcgJEVycm9yKCksIGlzSW5zdGFuY2UgPyBnZXRQcm90b3R5cGVPZih0aGlzKSA6IEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGF0ID0gaXNJbnN0YW5jZSA/IHRoaXMgOiBjcmVhdGUoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUpO1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCBUT19TVFJJTkdfVEFHLCAnRXJyb3InKTtcbiAgfVxuICBpZiAobWVzc2FnZSAhPT0gdW5kZWZpbmVkKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgJ21lc3NhZ2UnLCBub3JtYWxpemVTdHJpbmdBcmd1bWVudChtZXNzYWdlKSk7XG4gIGluc3RhbGxFcnJvclN0YWNrKHRoYXQsICRBZ2dyZWdhdGVFcnJvciwgdGhhdC5zdGFjaywgMSk7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikgaW5zdGFsbEVycm9yQ2F1c2UodGhhdCwgYXJndW1lbnRzWzJdKTtcbiAgdmFyIGVycm9yc0FycmF5ID0gW107XG4gIGl0ZXJhdGUoZXJyb3JzLCBwdXNoLCB7IHRoYXQ6IGVycm9yc0FycmF5IH0pO1xuICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgJ2Vycm9ycycsIGVycm9yc0FycmF5KTtcbiAgcmV0dXJuIHRoYXQ7XG59O1xuXG5pZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKCRBZ2dyZWdhdGVFcnJvciwgJEVycm9yKTtcbmVsc2UgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcygkQWdncmVnYXRlRXJyb3IsICRFcnJvciwgeyBuYW1lOiB0cnVlIH0pO1xuXG52YXIgQWdncmVnYXRlRXJyb3JQcm90b3R5cGUgPSAkQWdncmVnYXRlRXJyb3IucHJvdG90eXBlID0gY3JlYXRlKCRFcnJvci5wcm90b3R5cGUsIHtcbiAgY29uc3RydWN0b3I6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAkQWdncmVnYXRlRXJyb3IpLFxuICBtZXNzYWdlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJycpLFxuICBuYW1lOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJ0FnZ3JlZ2F0ZUVycm9yJylcbn0pO1xuXG4vLyBgQWdncmVnYXRlRXJyb3JgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFnZ3JlZ2F0ZS1lcnJvci1jb25zdHJ1Y3RvclxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAyIH0sIHtcbiAgQWdncmVnYXRlRXJyb3I6ICRBZ2dyZWdhdGVFcnJvclxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUHJvdG90eXBlKSB7XG4gIGlmIChpc1Byb3RvdHlwZU9mKFByb3RvdHlwZSwgaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgaXNOdWxsT3JVbmRlZmluZWQoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFDb25zdHJ1Y3RvcihTKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IC8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIHNldCA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIEZ1bmN0aW9uID0gZ2xvYmFsLkZ1bmN0aW9uO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciAkbG9jYXRpb24sIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG5mYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIERlbm8gdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3Igb24gYGxvY2F0aW9uYCBhY2Nlc3Mgd2l0aG91dCBgLS1sb2NhdGlvbmAgZmxhZ1xuICAkbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG59KTtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaGFzT3duKHF1ZXVlLCBpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBldmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBnbG9iYWxQb3N0TWVzc2FnZURlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWwucG9zdE1lc3NhZ2UoU3RyaW5nKGlkKSwgJGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArICRsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoaGFuZGxlcikge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwcGx5KGZuLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKElTX05PREUpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZXZlbnRMaXN0ZW5lcjtcbiAgICBkZWZlciA9IGJpbmQocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKFxuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmXG4gICAgaXNDYWxsYWJsZShnbG9iYWwucG9zdE1lc3NhZ2UpICYmXG4gICAgIWdsb2JhbC5pbXBvcnRTY3JpcHRzICYmXG4gICAgJGxvY2F0aW9uICYmICRsb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgICFmYWlscyhnbG9iYWxQb3N0TWVzc2FnZURlZmVyKVxuICApIHtcbiAgICBkZWZlciA9IGdsb2JhbFBvc3RNZXNzYWdlRGVmZXI7XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oZWFkID0gbnVsbDtcbiAgdGhpcy50YWlsID0gbnVsbDtcbn07XG5cblF1ZXVlLnByb3RvdHlwZSA9IHtcbiAgYWRkOiBmdW5jdGlvbiAoaXRlbSkge1xuICAgIHZhciBlbnRyeSA9IHsgaXRlbTogaXRlbSwgbmV4dDogbnVsbCB9O1xuICAgIHZhciB0YWlsID0gdGhpcy50YWlsO1xuICAgIGlmICh0YWlsKSB0YWlsLm5leHQgPSBlbnRyeTtcbiAgICBlbHNlIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgIHRoaXMudGFpbCA9IGVudHJ5O1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZW50cnkgPSB0aGlzLmhlYWQ7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICB2YXIgbmV4dCA9IHRoaXMuaGVhZCA9IGVudHJ5Lm5leHQ7XG4gICAgICBpZiAobmV4dCA9PT0gbnVsbCkgdGhpcy50YWlsID0gbnVsbDtcbiAgICAgIHJldHVybiBlbnRyeS5pdGVtO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWV1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KHVzZXJBZ2VudCkgJiYgdHlwZW9mIFBlYmJsZSAhPSAndW5kZWZpbmVkJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdCh1c2VyQWdlbnQpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcXVldWUnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX0lPU19QRUJCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUnKTtcbnZhciBJU19XRUJPU19XRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLXdlYm9zLXdlYmtpdCcpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuLy8gTm9kZS5qcyAxMSBzaG93cyBFeHBlcmltZW50YWxXYXJuaW5nIG9uIGdldHRpbmcgYHF1ZXVlTWljcm90YXNrYFxudmFyIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdxdWV1ZU1pY3JvdGFzaycpO1xudmFyIG1pY3JvdGFzayA9IHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciAmJiBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWU7XG52YXIgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIW1pY3JvdGFzaykge1xuICB2YXIgcXVldWUgPSBuZXcgUXVldWUoKTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKElTX05PREUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoZm4gPSBxdWV1ZS5nZXQoKSkgdHJ5IHtcbiAgICAgIGZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIC8vIGFsc28gZXhjZXB0IFdlYk9TIFdlYmtpdCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODk4XG4gIGlmICghSVNfSU9TICYmICFJU19OT0RFICYmICFJU19XRUJPU19XRUJLSVQgJiYgTXV0YXRpb25PYnNlcnZlciAmJiBkb2N1bWVudCkge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKCFJU19JT1NfUEVCQkxFICYmIFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgLy8gd29ya2Fyb3VuZCBvZiBXZWJLaXQgfiBpT1MgU2FmYXJpIDEwLjEgYnVnXG4gICAgcHJvbWlzZS5jb25zdHJ1Y3RvciA9IFByb21pc2U7XG4gICAgdGhlbiA9IGJpbmQocHJvbWlzZS50aGVuLCBwcm9taXNlKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBOb2RlLmpzIHdpdGhvdXQgcHJvbWlzZXNcbiAgfSBlbHNlIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnZVxuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICAvLyBgd2VicGFja2AgZGV2IHNlcnZlciBidWcgb24gSUUgZ2xvYmFsIG1ldGhvZHMgLSB1c2UgYmluZChmbiwgZ2xvYmFsKVxuICAgIG1hY3JvdGFzayA9IGJpbmQobWFjcm90YXNrLCBnbG9iYWwpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hY3JvdGFzayhmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIG1pY3JvdGFzayA9IGZ1bmN0aW9uIChmbikge1xuICAgIGlmICghcXVldWUuaGVhZCkgbm90aWZ5KCk7XG4gICAgcXVldWUuYWRkKGZuKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtaWNyb3Rhc2s7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYSwgYikge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlIC0tIHNhZmVcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY29uc29sZS5lcnJvcihhKSA6IGNvbnNvbGUuZXJyb3IoYSwgYik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSwgdmFsdWU6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCB2YWx1ZTogZXJyb3IgfTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5Qcm9taXNlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBEZW5vIC0tIERlbm8gY2FzZSAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgRGVubyA9PSAnb2JqZWN0JyAmJiBEZW5vICYmIHR5cGVvZiBEZW5vLnZlcnNpb24gPT0gJ29iamVjdCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX0RFTk8gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8nKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIUlTX0RFTk8gJiYgIUlTX05PREVcbiAgJiYgdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0J1xuICAmJiB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX0JST1dTRVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXInKTtcbnZhciBJU19ERU5PID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBTVUJDTEFTU0lORyA9IGZhbHNlO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IGlzQ2FsbGFibGUoZ2xvYmFsLlByb21pc2VSZWplY3Rpb25FdmVudCk7XG5cbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IGlzRm9yY2VkKCdQcm9taXNlJywgZnVuY3Rpb24gKCkge1xuICB2YXIgUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UgPSBpbnNwZWN0U291cmNlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIHZhciBHTE9CQUxfQ09SRV9KU19QUk9NSVNFID0gUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UgIT09IFN0cmluZyhOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpO1xuICAvLyBWOCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAvLyBXZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICBpZiAoIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgVjhfVkVSU0lPTiA9PT0gNjYpIHJldHVybiB0cnVlO1xuICAvLyBXZSBuZWVkIFByb21pc2UjeyBjYXRjaCwgZmluYWxseSB9IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gJiYgTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddKSkgcmV0dXJuIHRydWU7XG4gIC8vIFdlIGNhbid0IHVzZSBAQHNwZWNpZXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG4gIGlmICghVjhfVkVSU0lPTiB8fCBWOF9WRVJTSU9OIDwgNTEgfHwgIS9uYXRpdmUgY29kZS8udGVzdChQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSkpIHtcbiAgICAvLyBEZXRlY3QgY29ycmVjdG5lc3Mgb2Ygc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gbmV3IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKDEpOyB9KTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gICAgfTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBwcm9taXNlLmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBGYWtlUHJvbWlzZTtcbiAgICBTVUJDTEFTU0lORyA9IHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pIGluc3RhbmNlb2YgRmFrZVByb21pc2U7XG4gICAgaWYgKCFTVUJDTEFTU0lORykgcmV0dXJuIHRydWU7XG4gIC8vIFVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgfSByZXR1cm4gIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgKElTX0JST1dTRVIgfHwgSVNfREVOTykgJiYgIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ09OU1RSVUNUT1I6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SLFxuICBSRUpFQ1RJT05fRVZFTlQ6IE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCxcbiAgU1VCQ0xBU1NJTkc6IFNVQkNMQVNTSU5HXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUNhbGxhYmxlKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFDYWxsYWJsZShyZWplY3QpO1xufTtcblxuLy8gYE5ld1Byb21pc2VDYXBhYmlsaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbmV3cHJvbWlzZWNhcGFiaWxpdHlcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21pY3JvdGFzaycpO1xudmFyIGhvc3RSZXBvcnRFcnJvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzJyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcXVldWUnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5DT05TVFJVQ1RPUjtcbnZhciBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uUkVKRUNUSU9OX0VWRU5UO1xudmFyIE5BVElWRV9QUk9NSVNFX1NVQkNMQVNTSU5HID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLlNVQkNMQVNTSU5HO1xudmFyIGdldEludGVybmFsUHJvbWlzZVN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUFJPTUlTRSk7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3IgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3I7XG52YXIgUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGU7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xuXG52YXIgRElTUEFUQ0hfRVZFTlQgPSAhIShkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiBnbG9iYWwuZGlzcGF0Y2hFdmVudCk7XG52YXIgVU5IQU5ETEVEX1JFSkVDVElPTiA9ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudmFyIFJFSkVDVElPTl9IQU5ETEVEID0gJ3JlamVjdGlvbmhhbmRsZWQnO1xudmFyIFBFTkRJTkcgPSAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xudmFyIEhBTkRMRUQgPSAxO1xudmFyIFVOSEFORExFRCA9IDI7XG5cbnZhciBJbnRlcm5hbCwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFByb21pc2VXcmFwcGVyLCBuYXRpdmVUaGVuO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiBpc0NhbGxhYmxlKHRoZW4gPSBpdC50aGVuKSA/IHRoZW4gOiBmYWxzZTtcbn07XG5cbnZhciBjYWxsUmVhY3Rpb24gPSBmdW5jdGlvbiAocmVhY3Rpb24sIHN0YXRlKSB7XG4gIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICB2YXIgb2sgPSBzdGF0ZS5zdGF0ZSA9PT0gRlVMRklMTEVEO1xuICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgdHJ5IHtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgaWYgKCFvaykge1xuICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHN0YXRlKTtcbiAgICAgICAgc3RhdGUucmVqZWN0aW9uID0gSEFORExFRDtcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgIGNhbGwodGhlbiwgcmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgfVxufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVhY3Rpb25zID0gc3RhdGUucmVhY3Rpb25zO1xuICAgIHZhciByZWFjdGlvbjtcbiAgICB3aGlsZSAocmVhY3Rpb24gPSByZWFjdGlvbnMuZ2V0KCkpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5ub3RpZmllZCA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhc3RhdGUucmVqZWN0aW9uKSBvblVuaGFuZGxlZChzdGF0ZSk7XG4gIH0pO1xufTtcblxudmFyIGRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAobmFtZSwgcHJvbWlzZSwgcmVhc29uKSB7XG4gIHZhciBldmVudCwgaGFuZGxlcjtcbiAgaWYgKERJU1BBVENIX0VWRU5UKSB7XG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICBldmVudC5wcm9taXNlID0gcHJvbWlzZTtcbiAgICBldmVudC5yZWFzb24gPSByZWFzb247XG4gICAgZXZlbnQuaW5pdEV2ZW50KG5hbWUsIGZhbHNlLCB0cnVlKTtcbiAgICBnbG9iYWwuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH0gZWxzZSBldmVudCA9IHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiByZWFzb24gfTtcbiAgaWYgKCFOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgJiYgKGhhbmRsZXIgPSBnbG9iYWxbJ29uJyArIG5hbWVdKSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgICB2YXIgSVNfVU5IQU5ETEVEID0gaXNVbmhhbmRsZWQoc3RhdGUpO1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKElTX1VOSEFORExFRCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChJU19OT0RFKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFVOSEFORExFRF9SRUpFQ1RJT04sIHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHN0YXRlLnJlamVjdGlvbiA9IElTX05PREUgfHwgaXNVbmhhbmRsZWQoc3RhdGUpID8gVU5IQU5ETEVEIDogSEFORExFRDtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5yZWplY3Rpb24gIT09IEhBTkRMRUQgJiYgIXN0YXRlLnBhcmVudDtcbn07XG5cbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIGlmIChJU19OT0RFKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChSRUpFQ1RJT05fSEFORExFRCwgcHJvbWlzZSwgc3RhdGUudmFsdWUpO1xuICB9KTtcbn07XG5cbnZhciBiaW5kID0gZnVuY3Rpb24gKGZuLCBzdGF0ZSwgdW53cmFwKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBmbihzdGF0ZSwgdmFsdWUsIHVud3JhcCk7XG4gIH07XG59O1xuXG52YXIgaW50ZXJuYWxSZWplY3QgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICBzdGF0ZS5zdGF0ZSA9IFJFSkVDVEVEO1xuICBub3RpZnkoc3RhdGUsIHRydWUpO1xufTtcblxudmFyIGludGVybmFsUmVzb2x2ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHRyeSB7XG4gICAgaWYgKHN0YXRlLmZhY2FkZSA9PT0gdmFsdWUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICB2YXIgdGhlbiA9IGlzVGhlbmFibGUodmFsdWUpO1xuICAgIGlmICh0aGVuKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsKHRoZW4sIHZhbHVlLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlc29sdmUsIHdyYXBwZXIsIHN0YXRlKSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZWplY3QsIHdyYXBwZXIsIHN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaW50ZXJuYWxSZWplY3Qod3JhcHBlciwgZXJyb3IsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gICAgICBzdGF0ZS5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICAgIG5vdGlmeShzdGF0ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnRlcm5hbFJlamVjdCh7IGRvbmU6IGZhbHNlIH0sIGVycm9yLCBzdGF0ZSk7XG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgUHJvbWlzZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgYUNhbGxhYmxlKGV4ZWN1dG9yKTtcbiAgICBjYWxsKEludGVybmFsLCB0aGlzKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKSwgYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaW50ZXJuYWxSZWplY3Qoc3RhdGUsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgUHJvbWlzZVByb3RvdHlwZSA9IFByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICB0eXBlOiBQUk9NSVNFLFxuICAgICAgZG9uZTogZmFsc2UsXG4gICAgICBub3RpZmllZDogZmFsc2UsXG4gICAgICBwYXJlbnQ6IGZhbHNlLFxuICAgICAgcmVhY3Rpb25zOiBuZXcgUXVldWUoKSxcbiAgICAgIHJlamVjdGlvbjogZmFsc2UsXG4gICAgICBzdGF0ZTogUEVORElORyxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgfTtcblxuICAvLyBgUHJvbWlzZS5wcm90b3R5cGUudGhlbmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICBJbnRlcm5hbC5wcm90b3R5cGUgPSBkZWZpbmVCdWlsdEluKFByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IpKTtcbiAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgIHJlYWN0aW9uLm9rID0gaXNDYWxsYWJsZShvbkZ1bGZpbGxlZCkgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgcmVhY3Rpb24uZmFpbCA9IGlzQ2FsbGFibGUob25SZWplY3RlZCkgJiYgb25SZWplY3RlZDtcbiAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHN0YXRlLnN0YXRlID09PSBQRU5ESU5HKSBzdGF0ZS5yZWFjdGlvbnMuYWRkKHJlYWN0aW9uKTtcbiAgICBlbHNlIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgfSk7XG5cbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSk7XG4gIH07XG5cbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yIHx8IEMgPT09IFByb21pc2VXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG5cbiAgaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGUudGhlbjtcblxuICAgIGlmICghTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcpIHtcbiAgICAgIC8vIG1ha2UgYFByb21pc2UjdGhlbmAgcmV0dXJuIGEgcG9seWZpbGxlZCBgUHJvbWlzZWAgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGNhbGwobmF0aXZlVGhlbiwgdGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjQwXG4gICAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIGAuY29uc3RydWN0b3IgPT09IFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICB0cnkge1xuICAgICAgZGVsZXRlIE5hdGl2ZVByb21pc2VQcm90b3R5cGUuY29uc3RydWN0b3I7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gICAgLy8gbWFrZSBgaW5zdGFuY2VvZiBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICBzZXRQcm90b3R5cGVPZihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICBQcm9taXNlOiBQcm9taXNlQ29uc3RydWN0b3Jcbn0pO1xuXG5zZXRUb1N0cmluZ1RhZyhQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UsIGZhbHNlLCB0cnVlKTtcbnNldFNwZWNpZXMoUFJPTUlTRSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIHx8ICFjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5hbGwoaXRlcmFibGUpLnRoZW4odW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxuLy8gYFByb21pc2UuYWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5jYXRjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmNhdGNoXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SLCByZWFsOiB0cnVlIH0sIHtcbiAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNjYXRjaGAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG5pZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpKSB7XG4gIHZhciBtZXRob2QgPSBnZXRCdWlsdEluKCdQcm9taXNlJykucHJvdG90eXBlWydjYXRjaCddO1xuICBpZiAoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSAhPT0gbWV0aG9kKSB7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnY2F0Y2gnLCBtZXRob2QsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxuLy8gYFByb21pc2UucmFjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmFjZVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIGNhbGwoJHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xuXG4vLyBgUHJvbWlzZS5yZWplY3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlamVjdFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICBjYWxsKGNhcGFiaWxpdHkucmVqZWN0LCB1bmRlZmluZWQsIHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xuXG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKTtcbnZhciBDSEVDS19XUkFQUEVSID0gSVNfUFVSRSAmJiAhRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlc29sdmVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIHx8IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKENIRUNLX1dSQVBQRVIgJiYgdGhpcyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA/IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxTZXR0bGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxzZXR0bGVkXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGxTZXR0bGVkOiBmdW5jdGlvbiBhbGxTZXR0bGVkKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdmdWxmaWxsZWQnLCB2YWx1ZTogdmFsdWUgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAncmVqZWN0ZWQnLCByZWFzb246IGVycm9yIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxudmFyIFBST01JU0VfQU5ZX0VSUk9SID0gJ05vIG9uZSBwcm9taXNlIHJlc29sdmVkJztcblxuLy8gYFByb21pc2UuYW55YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFueTogZnVuY3Rpb24gYW55KGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBBZ2dyZWdhdGVFcnJvciA9IGdldEJ1aWx0SW4oJ0FnZ3JlZ2F0ZUVycm9yJyk7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciBlcnJvcnMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgdmFyIGFscmVhZHlSZXNvbHZlZCA9IGZhbHNlO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeVJlamVjdGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5UmVqZWN0ZWQgfHwgYWxyZWFkeVJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeVJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGVycm9yc1tpbmRleF0gPSBlcnJvcjtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZWplY3QobmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgUFJPTUlTRV9BTllfRVJST1IpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBTYWZhcmkgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4MjlcbnZhciBOT05fR0VORVJJQyA9ICEhTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdGhlbmFibGUgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddLmNhbGwoeyB0aGVuOiBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmZpbmFsbHlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogTk9OX0dFTkVSSUMgfSwge1xuICAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBnZXRCdWlsdEluKCdQcm9taXNlJykpO1xuICAgIHZhciBpc0Z1bmN0aW9uID0gaXNDYWxsYWJsZShvbkZpbmFsbHkpO1xuICAgIHJldHVybiB0aGlzLnRoZW4oXG4gICAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseSxcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICAgIH0gOiBvbkZpbmFsbHlcbiAgICApO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjZmluYWxseWAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG5pZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpKSB7XG4gIHZhciBtZXRob2QgPSBnZXRCdWlsdEluKCdQcm9taXNlJykucHJvdG90eXBlWydmaW5hbGx5J107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2ZpbmFsbHknLCBtZXRob2QsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbnknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUHJvbWlzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxuLy8gYFByb21pc2Uud2l0aFJlc29sdmVyc2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXdpdGgtcmVzb2x2ZXJzXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUgfSwge1xuICB3aXRoUmVzb2x2ZXJzOiBmdW5jdGlvbiB3aXRoUmVzb2x2ZXJzKCkge1xuICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb21pc2U6IHByb21pc2VDYXBhYmlsaXR5LnByb21pc2UsXG4gICAgICByZXNvbHZlOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlLFxuICAgICAgcmVqZWN0OiBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3RcbiAgICB9O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3Byb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnByb21pc2Uud2l0aC1yZXNvbHZlcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcblxuLy8gYFByb21pc2UudHJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gICAgKHJlc3VsdC5lcnJvciA/IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvcHJvbWlzZScpO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LmFnZ3JlZ2F0ZS1lcnJvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnByb21pc2UuYW55Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9wcm9taXNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvaW5zdGFuY2UvcmV2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvaW5zdGFuY2UvcmV2ZXJzZScpO1xuIiwgInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciBfT2JqZWN0JGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCIpO1xudmFyIF9TeW1ib2wgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiKTtcbnZhciBfT2JqZWN0JGNyZWF0ZSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qc1wiKTtcbnZhciBfT2JqZWN0JGdldFByb3RvdHlwZU9mID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qc1wiKTtcbnZhciBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2Zvci1lYWNoLmpzXCIpO1xudmFyIF9wdXNoSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcHVzaC5qc1wiKTtcbnZhciBfT2JqZWN0JHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qc1wiKTtcbnZhciBfUHJvbWlzZSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvcHJvbWlzZS9pbmRleC5qc1wiKTtcbnZhciBfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JldmVyc2UuanNcIik7XG52YXIgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanNcIik7XG5mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICBcInVzZSBzdHJpY3RcIjsgLyohIHJlZ2VuZXJhdG9yLXJ1bnRpbWUgLS0gQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuIC0tIGxpY2Vuc2UgKE1JVCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vTElDRU5TRSAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUgPSBmdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICAgIHJldHVybiBlO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHZhciB0LFxuICAgIGUgPSB7fSxcbiAgICByID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICBuID0gci5oYXNPd25Qcm9wZXJ0eSxcbiAgICBvID0gX09iamVjdCRkZWZpbmVQcm9wZXJ0eSB8fCBmdW5jdGlvbiAodCwgZSwgcikge1xuICAgICAgdFtlXSA9IHIudmFsdWU7XG4gICAgfSxcbiAgICBpID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sID8gX1N5bWJvbCA6IHt9LFxuICAgIGEgPSBpLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiLFxuICAgIGMgPSBpLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIixcbiAgICB1ID0gaS50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICByZXR1cm4gX09iamVjdCRkZWZpbmVQcm9wZXJ0eSh0LCBlLCB7XG4gICAgICB2YWx1ZTogcixcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgIHdyaXRhYmxlOiAhMFxuICAgIH0pLCB0W2VdO1xuICB9XG4gIHRyeSB7XG4gICAgZGVmaW5lKHt9LCBcIlwiKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZSh0LCBlLCByKSB7XG4gICAgICByZXR1cm4gdFtlXSA9IHI7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB3cmFwKHQsIGUsIHIsIG4pIHtcbiAgICB2YXIgaSA9IGUgJiYgZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBlIDogR2VuZXJhdG9yLFxuICAgICAgYSA9IF9PYmplY3QkY3JlYXRlKGkucHJvdG90eXBlKSxcbiAgICAgIGMgPSBuZXcgQ29udGV4dChuIHx8IFtdKTtcbiAgICByZXR1cm4gbyhhLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QodCwgciwgYylcbiAgICB9KSwgYTtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaCh0LCBlLCByKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogdC5jYWxsKGUsIHIpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiB0XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBlLndyYXAgPSB3cmFwO1xuICB2YXIgaCA9IFwic3VzcGVuZGVkU3RhcnRcIixcbiAgICBsID0gXCJzdXNwZW5kZWRZaWVsZFwiLFxuICAgIGYgPSBcImV4ZWN1dGluZ1wiLFxuICAgIHMgPSBcImNvbXBsZXRlZFwiLFxuICAgIHkgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBwID0ge307XG4gIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZCA9IF9PYmplY3QkZ2V0UHJvdG90eXBlT2YsXG4gICAgdiA9IGQgJiYgZChkKHZhbHVlcyhbXSkpKTtcbiAgdiAmJiB2ICE9PSByICYmIG4uY2FsbCh2LCBhKSAmJiAocCA9IHYpO1xuICB2YXIgZyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9IEdlbmVyYXRvci5wcm90b3R5cGUgPSBfT2JqZWN0JGNyZWF0ZShwKTtcbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHQpIHtcbiAgICB2YXIgX2NvbnRleHQ7XG4gICAgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdKS5jYWxsKF9jb250ZXh0LCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGVmaW5lKHQsIGUsIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UoZSwgdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKHQsIGUpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UociwgbywgaSwgYSkge1xuICAgICAgdmFyIGMgPSB0cnlDYXRjaCh0W3JdLCB0LCBvKTtcbiAgICAgIGlmIChcInRocm93XCIgIT09IGMudHlwZSkge1xuICAgICAgICB2YXIgdSA9IGMuYXJnLFxuICAgICAgICAgIGggPSB1LnZhbHVlO1xuICAgICAgICByZXR1cm4gaCAmJiBcIm9iamVjdFwiID09IF90eXBlb2YoaCkgJiYgbi5jYWxsKGgsIFwiX19hd2FpdFwiKSA/IGUucmVzb2x2ZShoLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHQsIGksIGEpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGludm9rZShcInRocm93XCIsIHQsIGksIGEpO1xuICAgICAgICB9KSA6IGUucmVzb2x2ZShoKS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgdS52YWx1ZSA9IHQsIGkodSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIHQsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGEoYy5hcmcpO1xuICAgIH1cbiAgICB2YXIgcjtcbiAgICBvKHRoaXMsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodCwgbikge1xuICAgICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IGUoZnVuY3Rpb24gKGUsIHIpIHtcbiAgICAgICAgICAgIGludm9rZSh0LCBuLCBlLCByKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gciA9IHIgPyByLnRoZW4oY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChlLCByLCBuKSB7XG4gICAgdmFyIG8gPSBoO1xuICAgIHJldHVybiBmdW5jdGlvbiAoaSwgYSkge1xuICAgICAgaWYgKG8gPT09IGYpIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAobyA9PT0gcykge1xuICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBpKSB0aHJvdyBhO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB0LFxuICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmb3IgKG4ubWV0aG9kID0gaSwgbi5hcmcgPSBhOzspIHtcbiAgICAgICAgdmFyIGMgPSBuLmRlbGVnYXRlO1xuICAgICAgICBpZiAoYykge1xuICAgICAgICAgIHZhciB1ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShjLCBuKTtcbiAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgaWYgKHUgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gbi5tZXRob2QpIG4uc2VudCA9IG4uX3NlbnQgPSBuLmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IG4ubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKG8gPT09IGgpIHRocm93IG8gPSBzLCBuLmFyZztcbiAgICAgICAgICBuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IG4ubWV0aG9kICYmIG4uYWJydXB0KFwicmV0dXJuXCIsIG4uYXJnKTtcbiAgICAgICAgbyA9IGY7XG4gICAgICAgIHZhciBwID0gdHJ5Q2F0Y2goZSwgciwgbik7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSBwLnR5cGUpIHtcbiAgICAgICAgICBpZiAobyA9IG4uZG9uZSA/IHMgOiBsLCBwLmFyZyA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBwLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IG4uZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSBwLnR5cGUgJiYgKG8gPSBzLCBuLm1ldGhvZCA9IFwidGhyb3dcIiwgbi5hcmcgPSBwLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpIHtcbiAgICB2YXIgbiA9IHIubWV0aG9kLFxuICAgICAgbyA9IGUuaXRlcmF0b3Jbbl07XG4gICAgaWYgKG8gPT09IHQpIHJldHVybiByLmRlbGVnYXRlID0gbnVsbCwgXCJ0aHJvd1wiID09PSBuICYmIGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKHIubWV0aG9kID0gXCJyZXR1cm5cIiwgci5hcmcgPSB0LCBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpLCBcInRocm93XCIgPT09IHIubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBuICYmIChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBuICsgXCInIG1ldGhvZFwiKSksIHk7XG4gICAgdmFyIGkgPSB0cnlDYXRjaChvLCBlLml0ZXJhdG9yLCByLmFyZyk7XG4gICAgaWYgKFwidGhyb3dcIiA9PT0gaS50eXBlKSByZXR1cm4gci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gaS5hcmcsIHIuZGVsZWdhdGUgPSBudWxsLCB5O1xuICAgIHZhciBhID0gaS5hcmc7XG4gICAgcmV0dXJuIGEgPyBhLmRvbmUgPyAocltlLnJlc3VsdE5hbWVdID0gYS52YWx1ZSwgci5uZXh0ID0gZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSByLm1ldGhvZCAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpIDogYSA6IChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIHIuZGVsZWdhdGUgPSBudWxsLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkodCkge1xuICAgIHZhciBfY29udGV4dDI7XG4gICAgdmFyIGUgPSB7XG4gICAgICB0cnlMb2M6IHRbMF1cbiAgICB9O1xuICAgIDEgaW4gdCAmJiAoZS5jYXRjaExvYyA9IHRbMV0pLCAyIGluIHQgJiYgKGUuZmluYWxseUxvYyA9IHRbMl0sIGUuYWZ0ZXJMb2MgPSB0WzNdKSwgX3B1c2hJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0MiA9IHRoaXMudHJ5RW50cmllcykuY2FsbChfY29udGV4dDIsIGUpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkodCkge1xuICAgIHZhciBlID0gdC5jb21wbGV0aW9uIHx8IHt9O1xuICAgIGUudHlwZSA9IFwibm9ybWFsXCIsIGRlbGV0ZSBlLmFyZywgdC5jb21wbGV0aW9uID0gZTtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHQpIHtcbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgdHJ5TG9jOiBcInJvb3RcIlxuICAgIH1dLCBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkodCkuY2FsbCh0LCBwdXNoVHJ5RW50cnksIHRoaXMpLCB0aGlzLnJlc2V0KCEwKTtcbiAgfVxuICBmdW5jdGlvbiB2YWx1ZXMoZSkge1xuICAgIGlmIChlIHx8IFwiXCIgPT09IGUpIHtcbiAgICAgIHZhciByID0gZVthXTtcbiAgICAgIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZS5uZXh0KSByZXR1cm4gZTtcbiAgICAgIGlmICghaXNOYU4oZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBvID0gLTEsXG4gICAgICAgICAgaSA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICBmb3IgKDsgKytvIDwgZS5sZW5ndGg7KSBpZiAobi5jYWxsKGUsIG8pKSByZXR1cm4gbmV4dC52YWx1ZSA9IGVbb10sIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaS5uZXh0ID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfdHlwZW9mKGUpICsgXCIgaXMgbm90IGl0ZXJhYmxlXCIpO1xuICB9XG4gIHJldHVybiBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgbyhnLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgbyhHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGVmaW5lKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCB1LCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpLCBlLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiB0ICYmIHQuY29uc3RydWN0b3I7XG4gICAgcmV0dXJuICEhZSAmJiAoZSA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHwgXCJHZW5lcmF0b3JGdW5jdGlvblwiID09PSAoZS5kaXNwbGF5TmFtZSB8fCBlLm5hbWUpKTtcbiAgfSwgZS5tYXJrID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YodCwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpIDogKHQuX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZSh0LCB1LCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgdC5wcm90b3R5cGUgPSBfT2JqZWN0JGNyZWF0ZShnKSwgdDtcbiAgfSwgZS5hd3JhcCA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXdhaXQ6IHRcbiAgICB9O1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpLCBkZWZpbmUoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUsIGMsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3IsIGUuYXN5bmMgPSBmdW5jdGlvbiAodCwgciwgbiwgbywgaSkge1xuICAgIHZvaWQgMCA9PT0gaSAmJiAoaSA9IF9Qcm9taXNlKTtcbiAgICB2YXIgYSA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAodCwgciwgbiwgbyksIGkpO1xuICAgIHJldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocikgPyBhIDogYS5uZXh0KCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQuZG9uZSA/IHQudmFsdWUgOiBhLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKGcpLCBkZWZpbmUoZywgdSwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShnLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoZywgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBlLmtleXMgPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gT2JqZWN0KHQpLFxuICAgICAgciA9IFtdO1xuICAgIGZvciAodmFyIG4gaW4gZSkgX3B1c2hJbnN0YW5jZVByb3BlcnR5KHIpLmNhbGwociwgbik7XG4gICAgcmV0dXJuIF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eShyKS5jYWxsKHIpLCBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgZm9yICg7IHIubGVuZ3RoOykge1xuICAgICAgICB2YXIgdCA9IHIucG9wKCk7XG4gICAgICAgIGlmICh0IGluIGUpIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgfTtcbiAgfSwgZS52YWx1ZXMgPSB2YWx1ZXMsIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChlKSB7XG4gICAgICB2YXIgX2NvbnRleHQzO1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB0LCB0aGlzLmRvbmUgPSAhMSwgdGhpcy5kZWxlZ2F0ZSA9IG51bGwsIHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMuYXJnID0gdCwgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0MyA9IHRoaXMudHJ5RW50cmllcykuY2FsbChfY29udGV4dDMsIHJlc2V0VHJ5RW50cnkpLCAhZSkgZm9yICh2YXIgciBpbiB0aGlzKSBcInRcIiA9PT0gci5jaGFyQXQoMCkgJiYgbi5jYWxsKHRoaXMsIHIpICYmICFpc05hTigrX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eShyKS5jYWxsKHIsIDEpKSAmJiAodGhpc1tyXSA9IHQpO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHRoaXMuZG9uZSA9ICEwO1xuICAgICAgdmFyIHQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGUpIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGU7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobiwgbykge1xuICAgICAgICByZXR1cm4gYS50eXBlID0gXCJ0aHJvd1wiLCBhLmFyZyA9IGUsIHIubmV4dCA9IG4sIG8gJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksICEhbztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIG8gPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgbyA+PSAwOyAtLW8pIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLnRyeUVudHJpZXNbb10sXG4gICAgICAgICAgYSA9IGkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBpLnRyeUxvYykgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgaWYgKGkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBjID0gbi5jYWxsKGksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICB1ID0gbi5jYWxsKGksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoYyAmJiB1KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdSkgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uIGFicnVwdCh0LCBlKSB7XG4gICAgICBmb3IgKHZhciByID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IHIgPj0gMDsgLS1yKSB7XG4gICAgICAgIHZhciBvID0gdGhpcy50cnlFbnRyaWVzW3JdO1xuICAgICAgICBpZiAoby50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIG4uY2FsbChvLCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgby5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGkgPSBvO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpICYmIChcImJyZWFrXCIgPT09IHQgfHwgXCJjb250aW51ZVwiID09PSB0KSAmJiBpLnRyeUxvYyA8PSBlICYmIGUgPD0gaS5maW5hbGx5TG9jICYmIChpID0gbnVsbCk7XG4gICAgICB2YXIgYSA9IGkgPyBpLmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJldHVybiBhLnR5cGUgPSB0LCBhLmFyZyA9IGUsIGkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gaS5maW5hbGx5TG9jLCB5KSA6IHRoaXMuY29tcGxldGUoYSk7XG4gICAgfSxcbiAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodCwgZSkge1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZztcbiAgICAgIHJldHVybiBcImJyZWFrXCIgPT09IHQudHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHQudHlwZSA/IHRoaXMubmV4dCA9IHQuYXJnIDogXCJyZXR1cm5cIiA9PT0gdC50eXBlID8gKHRoaXMucnZhbCA9IHRoaXMuYXJnID0gdC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSB0LnR5cGUgJiYgZSAmJiAodGhpcy5uZXh0ID0gZSksIHk7XG4gICAgfSxcbiAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci5maW5hbGx5TG9jID09PSB0KSByZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sIHIuYWZ0ZXJMb2MpLCByZXNldFRyeUVudHJ5KHIpLCB5O1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godCkge1xuICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMudHJ5RW50cmllc1tlXTtcbiAgICAgICAgaWYgKHIudHJ5TG9jID09PSB0KSB7XG4gICAgICAgICAgdmFyIG4gPSByLmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gbi50eXBlKSB7XG4gICAgICAgICAgICB2YXIgbyA9IG4uYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoZSwgciwgbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHIsXG4gICAgICAgIG5leHRMb2M6IG5cbiAgICAgIH0sIFwibmV4dFwiID09PSB0aGlzLm1ldGhvZCAmJiAodGhpcy5hcmcgPSB0KSwgeTtcbiAgICB9XG4gIH0sIGU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiLy8gVE9ETyhCYWJlbCA4KTogUmVtb3ZlIHRoaXMgZmlsZS5cblxudmFyIHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWVcIikoKTtcbm1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcblxuLy8gQ29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9wYWNrYWdlcy9ydW50aW1lL3J1bnRpbWUuanMjTDczNj1cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBnbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG4gIH0gZWxzZSB7XG4gICAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIEZGMjYtIGJ1ZzogQXJyYXlCdWZmZXJzIGFyZSBub24tZXh0ZW5zaWJsZSwgYnV0IE9iamVjdC5pc0V4dGVuc2libGUgZG9lcyBub3QgcmVwb3J0IGl0XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoYnVmZmVyKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1ZmZlciwgJ2EnLCB7IHZhbHVlOiA4IH0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSAtLSBzYWZlXG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgJGlzRXh0ZW5zaWJsZSgxKTsgfSk7XG5cbi8vIGBPYmplY3QuaXNFeHRlbnNpYmxlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmlzZXh0ZW5zaWJsZVxubW9kdWxlLmV4cG9ydHMgPSAoRkFJTFNfT05fUFJJTUlUSVZFUyB8fCBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUpID8gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgJiYgY2xhc3NvZihpdCkgPT09ICdBcnJheUJ1ZmZlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWU7XG59IDogJGlzRXh0ZW5zaWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGlzRXh0ZW5zaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xuXG52YXIgUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBNRVRBREFUQSA9IHVpZCgnbWV0YScpO1xudmFyIGlkID0gMDtcblxudmFyIHNldE1ldGFkYXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIGRlZmluZVByb3BlcnR5KGl0LCBNRVRBREFUQSwgeyB2YWx1ZToge1xuICAgIG9iamVjdElEOiAnTycgKyBpZCsrLCAvLyBvYmplY3QgSURcbiAgICB3ZWFrRGF0YToge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG5cbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIGEgcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBREFUQV0ub2JqZWN0SUQ7XG59O1xuXG52YXIgZ2V0V2Vha0RhdGEgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIHRoZSBzdG9yZSBvZiB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBREFUQV0ud2Vha0RhdGE7XG59O1xuXG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpJTkcgJiYgUkVRVUlSRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzT3duKGl0LCBNRVRBREFUQSkpIHNldE1ldGFkYXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxudmFyIGVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgbWV0YS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4gIFJFUVVJUkVEID0gdHJ1ZTtcbiAgdmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmY7XG4gIHZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xuICB2YXIgdGVzdCA9IHt9O1xuICB0ZXN0W01FVEFEQVRBXSA9IDE7XG5cbiAgLy8gcHJldmVudCBleHBvc2luZyBvZiBtZXRhZGF0YSBrZXlcbiAgaWYgKGdldE93blByb3BlcnR5TmFtZXModGVzdCkubGVuZ3RoKSB7XG4gICAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHRbaV0gPT09IE1FVEFEQVRBKSB7XG4gICAgICAgICAgc3BsaWNlKHJlc3VsdCwgaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUuZlxuICAgIH0pO1xuICB9XG59O1xuXG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBlbmFibGU6IGVuYWJsZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2Vha0RhdGE6IGdldFdlYWtEYXRhLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cbmhpZGRlbktleXNbTUVUQURBVEFdID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUsIHdyYXBwZXIsIGNvbW1vbikge1xuICB2YXIgSVNfTUFQID0gQ09OU1RSVUNUT1JfTkFNRS5pbmRleE9mKCdNYXAnKSAhPT0gLTE7XG4gIHZhciBJU19XRUFLID0gQ09OU1RSVUNUT1JfTkFNRS5pbmRleE9mKCdXZWFrJykgIT09IC0xO1xuICB2YXIgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnO1xuICB2YXIgTmF0aXZlQ29uc3RydWN0b3IgPSBnbG9iYWxbQ09OU1RSVUNUT1JfTkFNRV07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHZhciBleHBvcnRlZCA9IHt9O1xuICB2YXIgQ29uc3RydWN0b3I7XG5cbiAgaWYgKCFERVNDUklQVE9SUyB8fCAhaXNDYWxsYWJsZShOYXRpdmVDb25zdHJ1Y3RvcilcbiAgICB8fCAhKElTX1dFQUsgfHwgTmF0aXZlUHJvdG90eXBlLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHsgbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCkuZW50cmllcygpLm5leHQoKTsgfSkpXG4gICkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQ29uc3RydWN0b3IgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZS5lbmFibGUoKTtcbiAgfSBlbHNlIHtcbiAgICBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgIHNldEludGVybmFsU3RhdGUoYW5JbnN0YW5jZSh0YXJnZXQsIFByb3RvdHlwZSksIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgY29sbGVjdGlvbjogbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKClcbiAgICAgIH0pO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRhcmdldFtBRERFUl0sIHsgdGhhdDogdGFyZ2V0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgUHJvdG90eXBlID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgdmFyIGdldEludGVybmFsU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gICAgZm9yRWFjaChbJ2FkZCcsICdjbGVhcicsICdkZWxldGUnLCAnZm9yRWFjaCcsICdnZXQnLCAnaGFzJywgJ3NldCcsICdrZXlzJywgJ3ZhbHVlcycsICdlbnRyaWVzJ10sIGZ1bmN0aW9uIChLRVkpIHtcbiAgICAgIHZhciBJU19BRERFUiA9IEtFWSA9PT0gJ2FkZCcgfHwgS0VZID09PSAnc2V0JztcbiAgICAgIGlmIChLRVkgaW4gTmF0aXZlUHJvdG90eXBlICYmICEoSVNfV0VBSyAmJiBLRVkgPT09ICdjbGVhcicpKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShQcm90b3R5cGUsIEtFWSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICB2YXIgY29sbGVjdGlvbiA9IGdldEludGVybmFsU3RhdGUodGhpcykuY29sbGVjdGlvbjtcbiAgICAgICAgICBpZiAoIUlTX0FEREVSICYmIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpKSByZXR1cm4gS0VZID09PSAnZ2V0JyA/IHVuZGVmaW5lZCA6IGZhbHNlO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBjb2xsZWN0aW9uW0tFWV0oYSA9PT0gMCA/IDAgOiBhLCBiKTtcbiAgICAgICAgICByZXR1cm4gSVNfQURERVIgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIElTX1dFQUsgfHwgZGVmaW5lUHJvcGVydHkoUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5jb2xsZWN0aW9uLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgZmFsc2UsIHRydWUpO1xuXG4gIGV4cG9ydGVkW0NPTlNUUlVDVE9SX05BTUVdID0gQ29uc3RydWN0b3I7XG4gICQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCBleHBvcnRlZCk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBvcHRpb25zKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnVuc2FmZSAmJiB0YXJnZXRba2V5XSkgdGFyZ2V0W2tleV0gPSBzcmNba2V5XTtcbiAgICBlbHNlIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgfSByZXR1cm4gdGFyZ2V0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLmZhc3RLZXk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIFByb3RvdHlwZSk7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgaW5kZXg6IGNyZWF0ZShudWxsKSxcbiAgICAgICAgZmlyc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlbW92ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RhdGUuZmlyc3QpIHN0YXRlLmZpcnN0ID0gZW50cnk7XG4gICAgICAgIGlmIChwcmV2aW91cykgcHJldmlvdXMubmV4dCA9IGVudHJ5O1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUrKztcbiAgICAgICAgZWxzZSB0aGF0LnNpemUrKztcbiAgICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSBzdGF0ZS5pbmRleFtpbmRleF0gPSBlbnRyeTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIHZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAvLyBmYXN0IGNhc2VcbiAgICAgIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgICAgIHZhciBlbnRyeTtcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gc3RhdGUuaW5kZXhbaW5kZXhdO1xuICAgICAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gICAgICBmb3IgKGVudHJ5ID0gc3RhdGUuZmlyc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm5leHQpIHtcbiAgICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSByZXR1cm4gZW50cnk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuY2xlYXIoKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmNsZWFyXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZGF0YSA9IHN0YXRlLmluZGV4O1xuICAgICAgICB2YXIgZW50cnkgPSBzdGF0ZS5maXJzdDtcbiAgICAgICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnByZXZpb3VzKSBlbnRyeS5wcmV2aW91cyA9IGVudHJ5LnByZXZpb3VzLm5leHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5maXJzdCA9IHN0YXRlLmxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSA9IDA7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgICBkZWxldGUgc3RhdGUuaW5kZXhbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnByZXZpb3VzID0gcHJldjtcbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3QgPT09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICAgICAgdmFyIGVudHJ5ID0gc3RhdGUubGFzdDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCFzdGF0ZS50YXJnZXQgfHwgIShzdGF0ZS5sYXN0ID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5zdGF0ZS5maXJzdCkpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT09ICdrZXlzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkua2V5LCBmYWxzZSk7XG4gICAgICBpZiAoa2luZCA9PT0gJ3ZhbHVlcycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LnZhbHVlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbZW50cnkua2V5LCBlbnRyeS52YWx1ZV0sIGZhbHNlKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZVtAQHNwZWNpZXNdYCBhY2Nlc3NvcnNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1tYXAtQEBzcGVjaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtc2V0LUBAc3BlY2llc1xuICAgIHNldFNwZWNpZXMoQ09OU1RSVUNUT1JfTkFNRSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYE1hcGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLW9iamVjdHNcbmNvbGxlY3Rpb24oJ01hcCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXAnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk1hcDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvbWFwJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9tYXBcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLnNvbWU7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29tZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfSwge1xuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb21lJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NvbWUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb21lJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvbWU7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNvbWUpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc29tZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvbWVcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdrZXlzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwva2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwva2V5cycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5rZXlzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5rZXlzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9rZXlzXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxudmFyIG1lcmdlU29ydCA9IGZ1bmN0aW9uIChhcnJheSwgY29tcGFyZWZuKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHZhciBtaWRkbGUgPSBmbG9vcihsZW5ndGggLyAyKTtcbiAgcmV0dXJuIGxlbmd0aCA8IDggPyBpbnNlcnRpb25Tb3J0KGFycmF5LCBjb21wYXJlZm4pIDogbWVyZ2UoXG4gICAgYXJyYXksXG4gICAgbWVyZ2VTb3J0KGFycmF5U2xpY2UoYXJyYXksIDAsIG1pZGRsZSksIGNvbXBhcmVmbiksXG4gICAgbWVyZ2VTb3J0KGFycmF5U2xpY2UoYXJyYXksIG1pZGRsZSksIGNvbXBhcmVmbiksXG4gICAgY29tcGFyZWZuXG4gICk7XG59O1xuXG52YXIgaW5zZXJ0aW9uU29ydCA9IGZ1bmN0aW9uIChhcnJheSwgY29tcGFyZWZuKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHZhciBpID0gMTtcbiAgdmFyIGVsZW1lbnQsIGo7XG5cbiAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICBqID0gaTtcbiAgICBlbGVtZW50ID0gYXJyYXlbaV07XG4gICAgd2hpbGUgKGogJiYgY29tcGFyZWZuKGFycmF5W2ogLSAxXSwgZWxlbWVudCkgPiAwKSB7XG4gICAgICBhcnJheVtqXSA9IGFycmF5Wy0tal07XG4gICAgfVxuICAgIGlmIChqICE9PSBpKyspIGFycmF5W2pdID0gZWxlbWVudDtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG52YXIgbWVyZ2UgPSBmdW5jdGlvbiAoYXJyYXksIGxlZnQsIHJpZ2h0LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxsZW5ndGggPSBsZWZ0Lmxlbmd0aDtcbiAgdmFyIHJsZW5ndGggPSByaWdodC5sZW5ndGg7XG4gIHZhciBsaW5kZXggPSAwO1xuICB2YXIgcmluZGV4ID0gMDtcblxuICB3aGlsZSAobGluZGV4IDwgbGxlbmd0aCB8fCByaW5kZXggPCBybGVuZ3RoKSB7XG4gICAgYXJyYXlbbGluZGV4ICsgcmluZGV4XSA9IChsaW5kZXggPCBsbGVuZ3RoICYmIHJpbmRleCA8IHJsZW5ndGgpXG4gICAgICA/IGNvbXBhcmVmbihsZWZ0W2xpbmRleF0sIHJpZ2h0W3JpbmRleF0pIDw9IDAgPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXVxuICAgICAgOiBsaW5kZXggPCBsbGVuZ3RoID8gbGVmdFtsaW5kZXgrK10gOiByaWdodFtyaW5kZXgrK107XG4gIH0gcmV0dXJuIGFycmF5O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXJnZVNvcnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgZmlyZWZveCA9IHVzZXJBZ2VudC5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS9pKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIWZpcmVmb3ggJiYgK2ZpcmVmb3hbMV07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFVBID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL01TSUV8VHJpZGVudC8udGVzdChVQSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgd2Via2l0ID0gdXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdFxcLyhcXGQrKVxcLi8pO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhd2Via2l0ICYmICt3ZWJraXRbMV07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVybmFsU29ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zb3J0Jyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgRkYgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24nKTtcbnZhciBJRV9PUl9FREdFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlJyk7XG52YXIgVjggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBXRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uJyk7XG5cbnZhciB0ZXN0ID0gW107XG52YXIgbmF0aXZlU29ydCA9IHVuY3VycnlUaGlzKHRlc3Quc29ydCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKHRlc3QucHVzaCk7XG5cbi8vIElFOC1cbnZhciBGQUlMU19PTl9VTkRFRklORUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSk7XG4vLyBWOCBidWdcbnZhciBGQUlMU19PTl9OVUxMID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQobnVsbCk7XG59KTtcbi8vIE9sZCBXZWJLaXRcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29ydCcpO1xuXG52YXIgU1RBQkxFX1NPUlQgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBmZWF0dXJlIGRldGVjdGlvbiBjYW4gYmUgdG9vIHNsb3csIHNvIGNoZWNrIGVuZ2luZXMgdmVyc2lvbnNcbiAgaWYgKFY4KSByZXR1cm4gVjggPCA3MDtcbiAgaWYgKEZGICYmIEZGID4gMykgcmV0dXJuO1xuICBpZiAoSUVfT1JfRURHRSkgcmV0dXJuIHRydWU7XG4gIGlmIChXRUJLSVQpIHJldHVybiBXRUJLSVQgPCA2MDM7XG5cbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgY29kZSwgY2hyLCB2YWx1ZSwgaW5kZXg7XG5cbiAgLy8gZ2VuZXJhdGUgYW4gYXJyYXkgd2l0aCBtb3JlIDUxMiBlbGVtZW50cyAoQ2hha3JhIGFuZCBvbGQgVjggZmFpbHMgb25seSBpbiB0aGlzIGNhc2UpXG4gIGZvciAoY29kZSA9IDY1OyBjb2RlIDwgNzY7IGNvZGUrKykge1xuICAgIGNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgIGNhc2UgNjY6IGNhc2UgNjk6IGNhc2UgNzA6IGNhc2UgNzI6IHZhbHVlID0gMzsgYnJlYWs7XG4gICAgICBjYXNlIDY4OiBjYXNlIDcxOiB2YWx1ZSA9IDQ7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogdmFsdWUgPSAyO1xuICAgIH1cblxuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDQ3OyBpbmRleCsrKSB7XG4gICAgICB0ZXN0LnB1c2goeyBrOiBjaHIgKyBpbmRleCwgdjogdmFsdWUgfSk7XG4gICAgfVxuICB9XG5cbiAgdGVzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLnYgLSBhLnY7IH0pO1xuXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRlc3QubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY2hyID0gdGVzdFtpbmRleF0uay5jaGFyQXQoMCk7XG4gICAgaWYgKHJlc3VsdC5jaGFyQXQocmVzdWx0Lmxlbmd0aCAtIDEpICE9PSBjaHIpIHJlc3VsdCArPSBjaHI7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0ICE9PSAnREdCRUZIQUNJSksnO1xufSk7XG5cbnZhciBGT1JDRUQgPSBGQUlMU19PTl9VTkRFRklORUQgfHwgIUZBSUxTX09OX05VTEwgfHwgIVNUUklDVF9NRVRIT0QgfHwgIVNUQUJMRV9TT1JUO1xuXG52YXIgZ2V0U29ydENvbXBhcmUgPSBmdW5jdGlvbiAoY29tcGFyZWZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoeCwgeSkge1xuICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHJldHVybiAtMTtcbiAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIHJldHVybiArY29tcGFyZWZuKHgsIHkpIHx8IDA7XG4gICAgcmV0dXJuIHRvU3RyaW5nKHgpID4gdG9TdHJpbmcoeSkgPyAxIDogLTE7XG4gIH07XG59O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29ydFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIGFDYWxsYWJsZShjb21wYXJlZm4pO1xuXG4gICAgdmFyIGFycmF5ID0gdG9PYmplY3QodGhpcyk7XG5cbiAgICBpZiAoU1RBQkxFX1NPUlQpIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZCA/IG5hdGl2ZVNvcnQoYXJyYXkpIDogbmF0aXZlU29ydChhcnJheSwgY29tcGFyZWZuKTtcblxuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciBhcnJheUxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGFycmF5KTtcbiAgICB2YXIgaXRlbXNMZW5ndGgsIGluZGV4O1xuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChpbmRleCBpbiBhcnJheSkgcHVzaChpdGVtcywgYXJyYXlbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBpbnRlcm5hbFNvcnQoaXRlbXMsIGdldFNvcnRDb21wYXJlKGNvbXBhcmVmbikpO1xuXG4gICAgaXRlbXNMZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVtcyk7XG4gICAgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgaXRlbXNMZW5ndGgpIGFycmF5W2luZGV4XSA9IGl0ZW1zW2luZGV4KytdO1xuICAgIHdoaWxlIChpbmRleCA8IGFycmF5TGVuZ3RoKSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coYXJyYXksIGluZGV4KyspO1xuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvcnQnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc29ydCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvcnQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29ydDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29ydCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb3J0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29ydFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3ZhbHVlcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnZhbHVlcztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUudmFsdWVzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXNcIik7IiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sL2l0ZXJhdG9yXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnZW50cmllcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2VudHJpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2VudHJpZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZW50cmllcztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZW50cmllcylcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZW50cmllc1wiKTsiLCAiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG5sZXQgZ2V0UmFuZG9tVmFsdWVzO1xuY29uc3Qgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cbiAgICBnZXRSYW5kb21WYWx1ZXMgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pO1xuXG4gICAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbn0iLCAiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5cbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICByZXR1cm4gYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV07XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7IiwgImNvbnN0IHJhbmRvbVVVSUQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCAmJiBjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byk7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHJhbmRvbVVVSURcbn07IiwgImltcG9ydCBuYXRpdmUgZnJvbSAnLi9uYXRpdmUuanMnO1xuaW1wb3J0IHJuZyBmcm9tICcuL3JuZy5qcyc7XG5pbXBvcnQgeyB1bnNhZmVTdHJpbmdpZnkgfSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChuYXRpdmUucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5hdGl2ZS5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3Qgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7IC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIHJldHVybiB1bnNhZmVTdHJpbmdpZnkocm5kcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHY0OyIsICJpbXBvcnQgeyBBc3NpZ25hYmxlIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgRGF0YVNldCB9IGZyb20gXCIuL2RhdGEtc2V0XCI7XG5pbXBvcnQgeyBEYXRhU3RyZWFtIH0gZnJvbSBcIi4vZGF0YS1zdHJlYW1cIjtcblxudHlwZSBWYWx1ZU9mPFQ+ID0gVFtrZXlvZiBUXTtcblxuLyoqIFZhbGlkIGlkIHR5cGUuICovXG5leHBvcnQgdHlwZSBJZCA9IG51bWJlciB8IHN0cmluZztcbi8qKiBOdWxsYWJsZSBpZCB0eXBlLiAqL1xuZXhwb3J0IHR5cGUgT3B0SWQgPSB1bmRlZmluZWQgfCBudWxsIHwgSWQ7XG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIGEgdmFsdWUgY2FuIGJlIHVzZWQgYXMgYW4gaWQuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdmFsaWQgaWQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBJZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xufVxuXG4vKipcbiAqIE1ha2UgYW4gb2JqZWN0IGRlZXBseSBwYXJ0aWFsLlxuICovXG5leHBvcnQgdHlwZSBEZWVwUGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBhbnlbXSB8IEZ1bmN0aW9uIHwgTm9kZVxuICA/IFRcbiAgOiBUIGV4dGVuZHMgb2JqZWN0XG4gID8geyBba2V5IGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtrZXldPiB9XG4gIDogVDtcblxuLyoqXG4gKiBBbiBpdGVtIHRoYXQgbWF5ICh7QGxpbmsgSWR9KSBvciBtYXkgbm90IChhYnNlbnQsIHVuZGVmaW5lZCBvciBudWxsKSBoYXZlIGFuIGlkIHByb3BlcnR5LlxuICpcbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCB0eXBlIFBhcnRJdGVtPElkUHJvcCBleHRlbmRzIHN0cmluZz4gPSBQYXJ0aWFsPFJlY29yZDxJZFByb3AsIE9wdElkPj47XG4vKipcbiAqIEFuIGl0ZW0gdGhhdCBoYXMgYSBwcm9wZXJ0eSBjb250YWluaW5nIGFuIGlkIGFuZCBhbGwgb3RoZXIgcmVxdWlyZWQgcHJvcGVydGllcyBvZiBnaXZlbiBpdGVtIHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCB0eXBlIEZ1bGxJdGVtPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+ID0gSXRlbSAmIFJlY29yZDxJZFByb3AsIElkPjtcbi8qKlxuICogQW4gaXRlbSB0aGF0IGhhcyBhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gaWQgYW5kIG9wdGlvbmFsbHkgb3RoZXIgcHJvcGVydGllcyBvZiBnaXZlbiBpdGVtIHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCB0eXBlIFVwZGF0ZUl0ZW08XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gPSBBc3NpZ25hYmxlPEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+ICYgUmVjb3JkPElkUHJvcCwgSWQ+O1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciBhbiBpdGVtIGhhcyBhbiBpZCAoaXMgYSB7QGxpbmsgRnVsbEl0ZW19KS5cbiAqXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBpdGVtIHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSBpZFByb3AgLSBOYW1lIG9mIHRoZSBpZCBwcm9wZXJ0eS5cbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGlzIHZhbHVlIGlzIGEge0BsaW5rIEZ1bGxJdGVtfSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGdWxsSXRlbTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPihpdGVtOiBJdGVtLCBpZFByb3A6IElkUHJvcCk6IGl0ZW0gaXMgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB7XG4gIHJldHVybiBpdGVtW2lkUHJvcF0gIT0gbnVsbDtcbn1cblxuLyoqIEFkZCBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRFdmVudFBheWxvYWQge1xuICAvKiogSWRzIG9mIGFkZGVkIGl0ZW1zLiAqL1xuICBpdGVtczogSWRbXTtcbn1cbi8qKiBVcGRhdGUgZXZlbnQgcGF5bG9hZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlRXZlbnRQYXlsb2FkPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IHtcbiAgLyoqIElkcyBvZiB1cGRhdGVkIGl0ZW1zLiAqL1xuICBpdGVtczogSWRbXTtcbiAgLyoqIEl0ZW1zIGFzIHRoZXkgd2VyZSBiZWZvcmUgdGhpcyB1cGRhdGUuICovXG4gIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEl0ZW1zIGFzIHRoZXkgYXJlIG5vdy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgSnVzdCBnZXQgdGhlIGRhdGEgZnJvbSB0aGUgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LlxuICAgKi9cbiAgZGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xufVxuLyoqIFJlbW92ZSBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW1vdmVFdmVudFBheWxvYWQ8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKiogSWRzIG9mIHJlbW92ZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xuICAvKiogSXRlbXMgYXMgdGhleSB3ZXJlIGJlZm9yZSB0aGVpciByZW1vdmFsLiAqL1xuICBvbGREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG59XG5cbi8qKlxuICogTWFwIG9mIGV2ZW50IHBheWxvYWQgdHlwZXMgKGV2ZW50IG5hbWUg4oaSIHBheWxvYWQpLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50UGF5bG9hZHM8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICBhZGQ6IEFkZEV2ZW50UGF5bG9hZDtcbiAgdXBkYXRlOiBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPjtcbiAgcmVtb3ZlOiBSZW1vdmVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPjtcbn1cbi8qKlxuICogTWFwIG9mIGV2ZW50IHBheWxvYWQgdHlwZXMgaW5jbHVkaW5nIGFueSBldmVudCAoZXZlbnQgbmFtZSDihpIgcGF5bG9hZCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQYXlsb2Fkc1dpdGhBbnk8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gZXh0ZW5kcyBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD4ge1xuICBcIipcIjogVmFsdWVPZjxFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD4+O1xufVxuXG4vKipcbiAqIE1hcCBvZiBldmVudCBjYWxsYmFjayB0eXBlcyAoZXZlbnQgbmFtZSDihpIgY2FsbGJhY2spLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Q2FsbGJhY2tzPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IHtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIGFkZChuYW1lOiBcImFkZFwiLCBwYXlsb2FkOiBBZGRFdmVudFBheWxvYWQgfCBudWxsLCBzZW5kZXJJZD86IElkIHwgbnVsbCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCAoe0BsaW5rIEV2ZW50TmFtZX0pLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIERhdGEgYWJvdXQgdGhlIGl0ZW1zIGFmZmVjdGVkIGJ5IHRoaXMgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIEEgc2VuZGVySWQsIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2hpY2ggdHJpZ2dlcmVkIHRoZSBldmVudC4gSWYgc2VuZGVySWQgaXMgbm90IHByb3ZpZGVkLCB0aGUgYXJndW1lbnQgd2lsbCBiZSBgbnVsbGAuXG4gICAqL1xuICB1cGRhdGUoXG4gICAgbmFtZTogXCJ1cGRhdGVcIixcbiAgICBwYXlsb2FkOiBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPiB8IG51bGwsXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHJlbW92ZShcbiAgICBuYW1lOiBcInJlbW92ZVwiLFxuICAgIHBheWxvYWQ6IFJlbW92ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+IHwgbnVsbCxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xufVxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgY2FsbGJhY2sgdHlwZXMgaW5jbHVkaW5nIGFueSBldmVudCAoZXZlbnQgbmFtZSDihpIgY2FsbGJhY2spLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBleHRlbmRzIEV2ZW50Q2FsbGJhY2tzPEl0ZW0sIElkUHJvcD4ge1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgXCIqXCI8TiBleHRlbmRzIGtleW9mIEV2ZW50Q2FsbGJhY2tzPEl0ZW0sIElkUHJvcD4+KFxuICAgIG5hbWU6IE4sXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W05dLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG59XG5cbi8qKiBBdmFpbGFibGUgZXZlbnQgbmFtZXMuICovXG5leHBvcnQgdHlwZSBFdmVudE5hbWUgPSBrZXlvZiBFdmVudFBheWxvYWRzPG5ldmVyLCBcIlwiPjtcbi8qKiBBdmFpbGFibGUgZXZlbnQgbmFtZXMgYW5kICcqJyB0byBsaXN0ZW4gZm9yIGFsbC4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50TmFtZVdpdGhBbnkgPSBrZXlvZiBFdmVudFBheWxvYWRzV2l0aEFueTxuZXZlciwgXCJcIj47XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2Ugb3JkZXIgcGFyYW1ldGVyLlxuICogLSBBIHN0cmluZyB2YWx1ZSBkZXRlcm1pbmVzIHdoaWNoIHByb3BlcnR5IHdpbGwgYmUgdXNlZCBmb3Igc29ydGluZyAodXNpbmcgPCBhbmQgPiBvcGVyYXRvcnMgZm9yIG51bWVyaWMgY29tcGFyaXNvbikuXG4gKiAtIEEgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRoZSBzYW1lIHdheSBhcyBpbiBBcnJheS5zb3J0LlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPiA9XG4gIHwga2V5b2YgSXRlbVxuICB8ICgoYTogSXRlbSwgYjogSXRlbSkgPT4gbnVtYmVyKTtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJuIHR5cGUgaW5kZXBlbmRlbnQpLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqXG4gICAqIEFuIGFycmF5IHdpdGggZmllbGQgbmFtZXMsIG9yIGFuIG9iamVjdCB3aXRoIGN1cnJlbnQgZmllbGQgbmFtZSBhbmQgbmV3IGZpZWxkIG5hbWUgdGhhdCB0aGUgZmllbGQgaXMgcmV0dXJuZWQgYXMuIEJ5IGRlZmF1bHQsIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtcyBhcmUgZW1pdHRlZC4gV2hlbiBmaWVsZHMgaXMgZGVmaW5lZCwgb25seSB0aGUgcHJvcGVydGllcyB3aG9zZSBuYW1lIGlzIHNwZWNpZmllZCBpbiBmaWVsZHMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgaXRlbXMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFdhcm5pbmcqKjogVGhlcmUgaXMgbm8gVHlwZVNjcmlwdCBzdXBwb3J0IGZvciB0aGlzLlxuICAgKi9cbiAgZmllbGRzPzogc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogSXRlbXMgY2FuIGJlIGZpbHRlcmVkIG9uIHNwZWNpZmljIHByb3BlcnRpZXMgYnkgcHJvdmlkaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLiBBIGZpbHRlciBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgaXRlbXMgaW4gdGhlIERhdGFTZXQsIGFuZCBpcyBjYWxsZWQgd2l0aCB0aGUgaXRlbSBhcyBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIGJvb2xlYW4uIEFsbCBpdGVtcyBmb3Igd2hpY2ggdGhlIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2lsbCBiZSBlbWl0dGVkLiAqL1xuICBmaWx0ZXI/OiAoaXRlbTogSXRlbSkgPT4gYm9vbGVhbjtcbiAgLyoqIE9yZGVyIHRoZSBpdGVtcyBieSBhIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uICovXG4gIG9yZGVyPzogRGF0YUludGVyZmFjZU9yZGVyPEl0ZW0+O1xufVxuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm5zIGEgc2luZ2xlIGl0ZW0gb3IgYW4gYXJyYXkpLlxuICpcbiAqIEByZW1hcmtzXG4gKiBXaGV0aGVyIGFuIGl0ZW0gb3IgYW5kIGFycmF5IG9mIGl0ZW1zIGlzIHJldHVybmVkIGlzIGRldGVybWluZWQgYnkgdGhlIHR5cGUgb2YgdGhlIGlkKHMpIGFyZ3VtZW50LlxuICogSWYgYW4gYXJyYXkgb2YgaWRzIGlzIHJlcXVlc3RlZCBhbiBhcnJheSBvZiBpdGVtcyB3aWxsIGJlIHJldHVybmVkLlxuICogSWYgYSBzaW5nbGUgaWQgaXMgcmVxdWVzdGVkIGEgc2luZ2xlIGl0ZW0gKG9yIG51bGwgaWYgdGhlIGlkIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSkgd2lsbCBiZSByZXR1cm5lZC5cbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICBleHRlbmRzIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQmFzZTxJdGVtPiB7XG4gIC8qKiBJdGVtcyB3aWxsIGJlIHJldHVybmVkIGFzIGEgc2luZ2xlIGl0ZW0gKGlmIGludm9rZWQgd2l0aCBhbiBpZCkgb3IgYW4gYXJyYXkgb2YgaXRlbXMgKGlmIGludm9rZWQgd2l0aCBhbiBhcnJheSBvZiBpZHMpLiAqL1xuICByZXR1cm5UeXBlPzogdW5kZWZpbmVkIHwgXCJBcnJheVwiO1xufVxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJucyBhbiBvYmplY3QpLlxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgcmV0dXJuZWQgb2JqZWN0IGhhcyBpZHMgYXMga2V5cyBhbmQgaXRlbXMgYXMgdmFsdWVzIG9mIGNvcnJlc3BvbmRpbmcgaWRzLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICBleHRlbmRzIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQmFzZTxJdGVtPiB7XG4gIC8qKiBJdGVtcyB3aWxsIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBtYXAgKGlkIOKGkiBpdGVtKS4gKi9cbiAgcmV0dXJuVHlwZTogXCJPYmplY3RcIjtcbn1cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZ2V0IG9wdGlvbnMgKHJldHVybnMgc2luZ2xlIGl0ZW0sIGFuIGFycmF5IG9yIG9iamVjdCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gPVxuICB8IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgfCBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPjtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgaWRzIG9wdGlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9uczxJdGVtPiB7XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZm9yIGVhY2ggb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPiB7XG4gIC8qKiBBbiBhcnJheSB3aXRoIGZpZWxkIG5hbWVzLCBvciBhbiBvYmplY3Qgd2l0aCBjdXJyZW50IGZpZWxkIG5hbWUgYW5kIG5ldyBmaWVsZCBuYW1lIHRoYXQgdGhlIGZpZWxkIGlzIHJldHVybmVkIGFzLiBCeSBkZWZhdWx0LCBhbGwgcHJvcGVydGllcyBvZiB0aGUgaXRlbXMgYXJlIGVtaXR0ZWQuIFdoZW4gZmllbGRzIGlzIGRlZmluZWQsIG9ubHkgdGhlIHByb3BlcnRpZXMgd2hvc2UgbmFtZSBpcyBzcGVjaWZpZWQgaW4gZmllbGRzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIGl0ZW1zLiAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgbWFwIG9wcmlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBPcmlnaW5hbCAtIFRoZSBvcmlnaW5hbCBpdGVtIHR5cGUgaW4gdGhlIGRhdGEuXG4gKiBAdHlwZVBhcmFtIE1hcHBlZCAtIFRoZSB0eXBlIGFmdGVyIG1hcHBpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8T3JpZ2luYWwsIE1hcHBlZD4ge1xuICAvKiogQW4gYXJyYXkgd2l0aCBmaWVsZCBuYW1lcywgb3IgYW4gb2JqZWN0IHdpdGggY3VycmVudCBmaWVsZCBuYW1lIGFuZCBuZXcgZmllbGQgbmFtZSB0aGF0IHRoZSBmaWVsZCBpcyByZXR1cm5lZCBhcy4gQnkgZGVmYXVsdCwgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW1zIGFyZSBlbWl0dGVkLiBXaGVuIGZpZWxkcyBpcyBkZWZpbmVkLCBvbmx5IHRoZSBwcm9wZXJ0aWVzIHdob3NlIG5hbWUgaXMgc3BlY2lmaWVkIGluIGZpZWxkcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBpdGVtcy4gKi9cbiAgZmllbGRzPzogc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogSXRlbXMgY2FuIGJlIGZpbHRlcmVkIG9uIHNwZWNpZmljIHByb3BlcnRpZXMgYnkgcHJvdmlkaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLiBBIGZpbHRlciBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgaXRlbXMgaW4gdGhlIERhdGFTZXQsIGFuZCBpcyBjYWxsZWQgd2l0aCB0aGUgaXRlbSBhcyBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIGJvb2xlYW4uIEFsbCBpdGVtcyBmb3Igd2hpY2ggdGhlIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2lsbCBiZSBlbWl0dGVkLiAqL1xuICBmaWx0ZXI/OiAoaXRlbTogT3JpZ2luYWwpID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxNYXBwZWQ+O1xufVxuXG4vKipcbiAqIENvbW1vbiBpbnRlcmZhY2UgZm9yIGRhdGEgc2V0cyBhbmQgZGF0YSB2aWV3LlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQgKG1pc3NpbmcgaWRzIHdpbGwgYmUgZ2VuZXJhdGVkIHVwb24gaW5zZXJ0aW9uKS5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgb24gdGhlIEl0ZW0gdHlwZSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+IHtcbiAgLyoqIFRoZSBudW1iZXIgb2YgaXRlbXMuICovXG4gIGxlbmd0aDogbnVtYmVyO1xuXG4gIC8qKiBUaGUga2V5IG9mIGlkIHByb3BlcnR5LiAqL1xuICBpZFByb3A6IElkUHJvcDtcblxuICAvKipcbiAgICogQWRkIGEgdW5pdmVyc2FsIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYCpgIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIGFueSBvZiB0aGUgZXZlbnRzIGBhZGRgLCBgdXBkYXRlYCwgYW5kIGByZW1vdmVgIG9jY3Vycy5cbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvbihldmVudDogXCIqXCIsIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl0pOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGFuIGBhZGRgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYGFkZGAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gaXRlbSBvciBhIHNldCBvZiBpdGVtcyBpcyBhZGRlZCwgb3Igd2hlbiBhbiBpdGVtIGlzIHVwZGF0ZWQgd2hpbGUgbm90IHlldCBleGlzdGluZy5cbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvbihldmVudDogXCJhZGRcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiYWRkXCJdKTogdm9pZDtcbiAgLyoqXG4gICAqIEFkZCBhIGByZW1vdmVgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYHJlbW92ZWAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gaXRlbSBvciBhIHNldCBvZiBpdGVtcyBpcyByZW1vdmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXVxuICApOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGFuIGB1cGRhdGVgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYHVwZGF0ZWAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gZXhpc3RpbmcgaXRlbSBvciBhIHNldCBvZiBleGlzdGluZyBpdGVtcyBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSB1bml2ZXJzYWwgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKGV2ZW50OiBcIipcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYGFkZGAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKGV2ZW50OiBcImFkZFwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl0pOiB2b2lkO1xuICAvKipcbiAgICogUmVtb3ZlIGEgYHJlbW92ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXVxuICApOiB2b2lkO1xuICAvKipcbiAgICogUmVtb3ZlIGFuIGB1cGRhdGVgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9mZihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl1cbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogR2V0IGFsbCB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcy5cbiAgICovXG4gIGdldCgpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgcmVxdWVzdGVkIGl0ZW1zLlxuICAgKi9cbiAgZ2V0KG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT4pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgdGhlcmUgYXJlIG5vIGl0ZW1zKS5cbiAgICovXG4gIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IGFsbCB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIHJlcXVlc3RlZCBpdGVtcyBvciBpZiByZXF1ZXN0ZWQgYW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBhcmUgbm8gaXRlbXMpLlxuICAgKi9cbiAgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0gb3IgbnVsbCBpZiB0aGUgaWQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBpdGVtLlxuICAgKi9cbiAgZ2V0KGlkOiBJZCk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKipcbiAgICogR2V0IG9uZSBpdGVtLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIGl0ZW0uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBvciBudWxsIGlmIHRoZSBpZCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGl0ZW0uXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG9uZSBpdGVtLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIGl0ZW0uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBpZiBmb3VuZCBvciBudWxsIG90aGVyd2lzZS4gSWYgcmVxdWVzdGVkIGFuIG9iamVjdCBtYXAgd2l0aCAwIHRvIDEgaXRlbXMuXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBtdWx0aXBsZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGlkcyAtIEFuIGFycmF5IG9mIHJlcXVlc3RlZCBpZHMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZvdW5kIGl0ZW1zIChpZHMgdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSBhcmUgb21pdHRlZCkuXG4gICAqL1xuICBnZXQoaWRzOiBJZFtdKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZvdW5kIGl0ZW1zIChpZHMgdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSBhcmUgb21pdHRlZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZvdW5kIGl0ZW1zIChpZHMgdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSBhcmUgb21pdHRlZCkuXG4gICAqIElmIHJlcXVlc3RlZCBhbiBvYmplY3QgbWFwIG9mIGl0ZW1zIChtYXkgYmUgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIGl0ZW0gd2FzIGZvdW5kKS5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGlkcyAtIElkIG9yIGlkcyB0byBiZSByZXR1cm5lZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHNwZWNpZnkgaXRlcmF0aW9uIGRldGFpbHMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtcyAoZm9ybWF0IGlzIGRldGVybWluZWQgYnkgaWRzIChzaW5nbGUgb3IgYXJyYXkpIGFuZCB0aGUgb3B0aW9ucy5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkIHwgSWRbXSxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcblxuICAvKipcbiAgICogR2V0IHRoZSBEYXRhU2V0IHRvIHdoaWNoIHRoZSBpbnN0YW5jZSBpbXBsZW1lbnRpbmcgdGhpcyBpbnRlcmZhY2UgaXMgY29ubmVjdGVkLlxuICAgKiBJbiBjYXNlIHRoZXJlIGlzIGEgY2hhaW4gb2YgbXVsdGlwbGUgRGF0YVZpZXdzLCB0aGUgcm9vdCBEYXRhU2V0IG9mIHRoaXMgY2hhaW4gaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBkYXRhIHNldCB0aGF0IGFjdHVhbGx5IGNvbnRhaW5zIHRoZSBkYXRhLlxuICAgKi9cbiAgZ2V0RGF0YVNldCgpOiBEYXRhU2V0PEl0ZW0sIElkUHJvcD47XG5cbiAgLyoqXG4gICAqIEdldCBpZHMgb2YgaXRlbXMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIE5vIGd1YXJhbnRlZSBpcyBnaXZlbiBhYm91dCB0aGUgb3JkZXIgb2YgcmV0dXJuZWQgaWRzIHVubGVzcyBhbiBvcmRlcmluZyBmdW5jdGlvbiBpcyBzdXBwbGllZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHJlcXVlc3RlZCBpZHMuXG4gICAqL1xuICBnZXRJZHMob3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+KTogSWRbXTtcblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIE5vIGd1YXJhbnRlZSBpcyBnaXZlbiBhYm91dCB0aGUgb3JkZXIgb2YgaXRlcmF0aW9uIHVubGVzcyBhbiBvcmRlcmluZyBmdW5jdGlvbiBpcyBzdXBwbGllZC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gRXhlY3V0ZWQgaW4gc2ltaWxhciBmYXNoaW9uIHRvIEFycmF5LmZvckVhY2ggY2FsbGJhY2ssIGJ1dCBpbnN0ZWFkIG9mIGl0ZW0sIGluZGV4LCBhcnJheSByZWNlaXZlcyBpdGVtLCBpZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHNwZWNpZnkgaXRlcmF0aW9uIGRldGFpbHMuXG4gICAqL1xuICBmb3JFYWNoKFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiB2b2lkLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnM8SXRlbT5cbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogTWFwIGVhY2ggaXRlbSBpbnRvIGRpZmZlcmVudCBpdGVtIGFuZCByZXR1cm4gdGhlbSBhcyBhbiBhcnJheS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiBpdGVyYXRpb24gZXZlbiBpZiBvcmRlcmluZyBmdW5jdGlvbiBpcyBzdXBwbGllZCAodGhlIGl0ZW1zIGFyZSBzb3J0ZWQgYWZ0ZXIgdGhlIG1hcHBpbmcpLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBcnJheS5tYXAtbGlrZSBjYWxsYmFjaywgYnV0IG9ubHkgd2l0aCB0aGUgZmlyc3QgdHdvIHBhcmFtcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHNwZWNpZnkgaXRlcmF0aW9uIGRldGFpbHMuXG4gICAqIEByZXR1cm5zIFRoZSBtYXBwZWQgaXRlbXMuXG4gICAqL1xuICBtYXA8VD4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IFQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VNYXBPcHRpb25zPEl0ZW0sIFQ+XG4gICk6IFRbXTtcblxuICAvKipcbiAgICogU3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gSWRzIG9mIHRoZSBpdGVtcyB0byBiZSBpbmNsdWRlZCBpbiB0aGlzIHN0cmVhbSAobWlzc2luZyBhcmUgaWdub3JlZCksIGFsbCBpZiBvbWl0dGVkLlxuICAgKiBAcmV0dXJucyBUaGUgZGF0YSBzdHJlYW0gZm9yIHRoaXMgZGF0YSBzZXQuXG4gICAqL1xuICBzdHJlYW0oaWRzPzogSXRlcmFibGU8SWQ+KTogRGF0YVN0cmVhbTxJdGVtPjtcbn1cbiIsICIvKiogUXVldWUgY29uZmlndXJhdGlvbiBvYmplY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlT3B0aW9ucyB7XG4gIC8qKiBUaGUgcXVldWUgd2lsbCBiZSBmbHVzaGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgYW4gaW5hY3Rpdml0eSBvZiB0aGlzIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4gQnkgZGVmYXVsdCB0aGVyZSBpcyBubyBhdXRvbWF0aWMgZmx1c2hpbmcgKGBudWxsYCkuICovXG4gIGRlbGF5PzogbnVsbCB8IG51bWJlcjtcbiAgLyoqIFdoZW4gdGhlIHF1ZXVlIGV4Y2VlZHMgdGhlIGdpdmVuIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMsIHRoZSBxdWV1ZSBpcyBmbHVzaGVkIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQgdmFsdWUgaXMgYEluZmluaXR5YC4gKi9cbiAgbWF4PzogbnVtYmVyO1xufVxuLyoqXG4gKiBRdWV1ZSBleHRlbmRpbmcgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBtZXRob2QgbmFtZXMgdG8gYmUgcmVwbGFjZWQgYnkgcXVldWVkIHZlcnNpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlRXh0ZW5kT3B0aW9uczxUPiB7XG4gIC8qKiBBIGxpc3Qgd2l0aCBtZXRob2QgbmFtZXMgb2YgdGhlIG1ldGhvZHMgb24gdGhlIG9iamVjdCB0byBiZSByZXBsYWNlZCB3aXRoIHF1ZXVlZCBvbmVzLiAqL1xuICByZXBsYWNlOiBUW107XG4gIC8qKiBXaGVuIHByb3ZpZGVkLCB0aGUgcXVldWUgd2lsbCBiZSBmbHVzaGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgYW4gaW5hY3Rpdml0eSBvZiB0aGlzIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdCB2YWx1ZSBpcyBudWxsLiAqL1xuICBkZWxheT86IG51bWJlcjtcbiAgLyoqIFdoZW4gdGhlIHF1ZXVlIGV4Y2VlZHMgdGhlIGdpdmVuIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMsIHRoZSBxdWV1ZSBpcyBmbHVzaGVkIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQgdmFsdWUgb2YgbWF4IGlzIEluZmluaXR5LiAqL1xuICBtYXg/OiBudW1iZXI7XG59XG4vKipcbiAqIFF1ZXVlIGNhbGwgZW50cnkuXG4gKiAtIEEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQuXG4gKiAtIEFuIG9iamVjdCB3aXRoIGZ1bmN0aW9uLCBhcmdzLCBjb250ZXh0IChsaWtlIGZ1bmN0aW9uLmJpbmQoY29udGV4dCwgLi4uYXJncykpLlxuICovXG50eXBlIFF1ZXVlQ2FsbEVudHJ5ID1cbiAgfCBGdW5jdGlvblxuICB8IHtcbiAgICAgIGZuOiBGdW5jdGlvbjtcbiAgICAgIGFyZ3M6IHVua25vd25bXTtcbiAgICB9XG4gIHwge1xuICAgICAgZm46IEZ1bmN0aW9uO1xuICAgICAgYXJnczogdW5rbm93bltdO1xuICAgICAgY29udGV4dDogdW5rbm93bjtcbiAgICB9O1xuXG5pbnRlcmZhY2UgUXVldWVFeHRlbmRlZDxPPiB7XG4gIG9iamVjdDogTztcbiAgbWV0aG9kczoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBvcmlnaW5hbDogdW5rbm93bjtcbiAgfVtdO1xufVxuXG4vKipcbiAqIEEgcXVldWUuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgbWV0aG9kIG5hbWVzIHRvIGJlIHJlcGxhY2VkIGJ5IHF1ZXVlZCB2ZXJzaW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXVlPFQgPSBuZXZlcj4ge1xuICAvKiogRGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBJZiBkZWZpbmVkIHRoZSBxdWV1ZSB3aWxsIGJlIHBlcmlvZGljYWxseSBmbHVzaGVkLiAqL1xuICBwdWJsaWMgZGVsYXk6IG51bGwgfCBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBxdWV1ZSBiZWZvcmUgaXQgd2lsbCBiZSBmbHVzaGVkLiAqL1xuICBwdWJsaWMgbWF4OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcXVldWU6IHtcbiAgICBmbjogRnVuY3Rpb247XG4gICAgYXJncz86IHVua25vd25bXTtcbiAgICBjb250ZXh0PzogdW5rbm93bjtcbiAgfVtdID0gW107XG5cbiAgcHJpdmF0ZSBfdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZXh0ZW5kZWQ6IG51bGwgfCBRdWV1ZUV4dGVuZGVkPFQ+ID0gbnVsbDtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IFF1ZXVlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFF1ZXVlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9ucz86IFF1ZXVlT3B0aW9ucykge1xuICAgIC8vIG9wdGlvbnNcbiAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICB0aGlzLm1heCA9IEluZmluaXR5O1xuXG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcXVldWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUXVldWUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM/OiBRdWV1ZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5kZWxheSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5kZWxheSA9IG9wdGlvbnMuZGVsYXk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5tYXggPSBvcHRpb25zLm1heDtcbiAgICB9XG5cbiAgICB0aGlzLl9mbHVzaElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogRXh0ZW5kIGFuIG9iamVjdCB3aXRoIHF1ZXVpbmcgZnVuY3Rpb25hbGl0eS5cbiAgICogVGhlIG9iamVjdCB3aWxsIGJlIGV4dGVuZGVkIHdpdGggYSBmdW5jdGlvbiBmbHVzaCwgYW5kIHRoZSBtZXRob2RzIHByb3ZpZGVkIGluIG9wdGlvbnMucmVwbGFjZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggcXVldWVkIG9uZXMuXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgcXVldWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGV4dGVuZDxPIGV4dGVuZHMgeyBmbHVzaD86ICgpID0+IHZvaWQgfSwgSyBleHRlbmRzIHN0cmluZz4oXG4gICAgb2JqZWN0OiBPLFxuICAgIG9wdGlvbnM6IFF1ZXVlRXh0ZW5kT3B0aW9uczxLPlxuICApOiBRdWV1ZTxPPiB7XG4gICAgY29uc3QgcXVldWUgPSBuZXcgUXVldWU8Tz4ob3B0aW9ucyk7XG5cbiAgICBpZiAob2JqZWN0LmZsdXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhcmdldCBvYmplY3QgYWxyZWFkeSBoYXMgYSBwcm9wZXJ0eSBmbHVzaFwiKTtcbiAgICB9XG4gICAgb2JqZWN0LmZsdXNoID0gKCk6IHZvaWQgPT4ge1xuICAgICAgcXVldWUuZmx1c2goKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWV0aG9kczogUXVldWVFeHRlbmRlZDxPPltcIm1ldGhvZHNcIl0gPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiZmx1c2hcIixcbiAgICAgICAgb3JpZ2luYWw6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmVwbGFjZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLnJlcGxhY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IG9wdGlvbnMucmVwbGFjZVtpXTtcbiAgICAgICAgbWV0aG9kcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIC8vIEBUT0RPOiBiZXR0ZXIgc29sdXRpb24/XG4gICAgICAgICAgb3JpZ2luYWw6IChvYmplY3QgYXMgdW5rbm93biBhcyBSZWNvcmQ8SywgKCkgPT4gdm9pZD4pW25hbWVdLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgcXVldWUucmVwbGFjZShvYmplY3QgYXMgdW5rbm93biBhcyBSZWNvcmQ8SywgKCkgPT4gdm9pZD4sIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHF1ZXVlLl9leHRlbmRlZCA9IHtcbiAgICAgIG9iamVjdDogb2JqZWN0LFxuICAgICAgbWV0aG9kczogbWV0aG9kcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHF1ZXVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgdGhlIHF1ZXVlLiBUaGUgcXVldWUgd2lsbCBmaXJzdCBmbHVzaCBhbGwgcXVldWVkIGFjdGlvbnMsIGFuZCBpbiBjYXNlIGl0IGhhcyBleHRlbmRlZCBhbiBvYmplY3QsIHdpbGwgcmVzdG9yZSB0aGUgb3JpZ2luYWwgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5mbHVzaCgpO1xuXG4gICAgaWYgKHRoaXMuX2V4dGVuZGVkKSB7XG4gICAgICBjb25zdCBvYmplY3QgPSB0aGlzLl9leHRlbmRlZC5vYmplY3Q7XG4gICAgICBjb25zdCBtZXRob2RzID0gdGhpcy5fZXh0ZW5kZWQubWV0aG9kcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBtZXRob2QgPSBtZXRob2RzW2ldO1xuICAgICAgICBpZiAobWV0aG9kLm9yaWdpbmFsKSB7XG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICAob2JqZWN0IGFzIGFueSlbbWV0aG9kLm5hbWVdID0gbWV0aG9kLm9yaWdpbmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEBUT0RPOiBiZXR0ZXIgc29sdXRpb24/XG4gICAgICAgICAgZGVsZXRlIChvYmplY3QgYXMgYW55KVttZXRob2QubmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX2V4dGVuZGVkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhIG1ldGhvZCBvbiBhbiBvYmplY3Qgd2l0aCBhIHF1ZXVlZCB2ZXJzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IGhhdmluZyB0aGUgbWV0aG9kLlxuICAgKiBAcGFyYW0gbWV0aG9kIC0gVGhlIG1ldGhvZCBuYW1lLlxuICAgKi9cbiAgcHVibGljIHJlcGxhY2U8TSBleHRlbmRzIHN0cmluZz4oXG4gICAgb2JqZWN0OiBSZWNvcmQ8TSwgKCkgPT4gdm9pZD4sXG4gICAgbWV0aG9kOiBNXG4gICk6IHZvaWQge1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcyAtLSBGdW5jdGlvbiB0aGlzIGlzIG5lY2Vzc2FyeSBpbiB0aGUgZnVuY3Rpb24gYmVsbG93LCBzbyBjbGFzcyB0aGlzIGhhcyB0byBiZSBzYXZlZCBpbnRvIGEgdmFyaWFibGUgaGVyZS4gKi9cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kXTtcbiAgICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2QgXCIgKyBtZXRob2QgKyBcIiB1bmRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgb2JqZWN0W21ldGhvZF0gPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAvLyBhZGQgdGhpcyBjYWxsIHRvIHRoZSBxdWV1ZVxuICAgICAgbWUucXVldWUoe1xuICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICBmbjogb3JpZ2luYWwsXG4gICAgICAgIGNvbnRleHQ6IHRoaXMsXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFF1ZXVlIGEgY2FsbC5cbiAgICpcbiAgICogQHBhcmFtIGVudHJ5IC0gVGhlIGZ1bmN0aW9uIG9yIGVudHJ5IHRvIGJlIHF1ZXVlZC5cbiAgICovXG4gIHB1YmxpYyBxdWV1ZShlbnRyeTogUXVldWVDYWxsRW50cnkpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goeyBmbjogZW50cnkgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goZW50cnkpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZsdXNoSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBxdWV1ZSBuZWVkcyB0byBiZSBmbHVzaGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmx1c2hJZk5lZWRlZCgpOiB2b2lkIHtcbiAgICAvLyBmbHVzaCB3aGVuIHRoZSBtYXhpbXVtIGlzIGV4Y2VlZGVkLlxuICAgIGlmICh0aGlzLl9xdWV1ZS5sZW5ndGggPiB0aGlzLm1heCkge1xuICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICAgIC8vIGZsdXNoIGFmdGVyIGEgcGVyaW9kIG9mIGluYWN0aXZpdHkgd2hlbiBhIGRlbGF5IGlzIGNvbmZpZ3VyZWRcbiAgICBpZiAodGhpcy5fdGltZW91dCAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiB0eXBlb2YgdGhpcy5kZWxheSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9LCB0aGlzLmRlbGF5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggYWxsIHF1ZXVlZCBjYWxsc1xuICAgKi9cbiAgcHVibGljIGZsdXNoKCk6IHZvaWQge1xuICAgIHRoaXMuX3F1ZXVlLnNwbGljZSgwKS5mb3JFYWNoKChlbnRyeSk6IHZvaWQgPT4ge1xuICAgICAgZW50cnkuZm4uYXBwbHkoZW50cnkuY29udGV4dCB8fCBlbnRyeS5mbiwgZW50cnkuYXJncyB8fCBbXSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBEYXRhSW50ZXJmYWNlLFxuICBFdmVudENhbGxiYWNrc1dpdGhBbnksXG4gIEV2ZW50TmFtZSxcbiAgRXZlbnROYW1lV2l0aEFueSxcbiAgRXZlbnRQYXlsb2FkcyxcbiAgSWQsXG4gIFBhcnRJdGVtLFxufSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG50eXBlIEV2ZW50U3Vic2NyaWJlcnM8SXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sIElkUHJvcCBleHRlbmRzIHN0cmluZz4gPSB7XG4gIFtOYW1lIGluIGtleW9mIEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+XTogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xufTtcblxuLyoqXG4gKiB7QGxpbmsgRGF0YVNldH0gY29kZSB0aGF0IGNhbiBiZSByZXVzZWQgaW4ge0BsaW5rIERhdGFWaWV3fSBvciBvdGhlciBzaW1pbGFyIGltcGxlbWVudGF0aW9ucyBvZiB7QGxpbmsgRGF0YUludGVyZmFjZX0uXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhU2V0UGFydDxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBpbXBsZW1lbnRzIFBpY2s8RGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+LCBcIm9uXCIgfCBcIm9mZlwiPlxue1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpYmVyczoge1xuICAgIFtOYW1lIGluIEV2ZW50TmFtZVdpdGhBbnldOiBFdmVudFN1YnNjcmliZXJzPEl0ZW0sIElkUHJvcD5bTmFtZV1bXTtcbiAgfSA9IHtcbiAgICBcIipcIjogW10sXG4gICAgYWRkOiBbXSxcbiAgICByZW1vdmU6IFtdLFxuICAgIHVwZGF0ZTogW10sXG4gIH07XG5cbiAgcHJvdGVjdGVkIF90cmlnZ2VyKFxuICAgIGV2ZW50OiBcImFkZFwiLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltcImFkZFwiXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICBwcm90ZWN0ZWQgX3RyaWdnZXIoXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG4gIHByb3RlY3RlZCBfdHJpZ2dlcihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIFRyaWdnZXIgYW4gZXZlbnRcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBFdmVudCBwYXlsb2FkLlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBJZCBvZiB0aGUgc2VuZGVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIF90cmlnZ2VyPE5hbWUgZXh0ZW5kcyBFdmVudE5hbWU+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltOYW1lXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkIHtcbiAgICBpZiAoKGV2ZW50IGFzIHN0cmluZykgPT09IFwiKlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdHJpZ2dlciBldmVudCAqXCIpO1xuICAgIH1cblxuICAgIFsuLi50aGlzLl9zdWJzY3JpYmVyc1tldmVudF0sIC4uLnRoaXMuX3N1YnNjcmliZXJzW1wiKlwiXV0uZm9yRWFjaChcbiAgICAgIChzdWJzY3JpYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIHN1YnNjcmliZXIoZXZlbnQsIHBheWxvYWQsIHNlbmRlcklkICE9IG51bGwgPyBzZW5kZXJJZCA6IG51bGwpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9uKFxuICAgIGV2ZW50OiBcIipcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwiYWRkXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiYWRkXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gYW4gZXZlbnQsIGFkZCBhbiBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHJlbWFya3MgTm9uLWZ1bmN0aW9uIGNhbGxiYWNrcyBhcmUgaWdub3JlZC5cbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgbWV0aG9kLlxuICAgKi9cbiAgcHVibGljIG9uPE5hbWUgZXh0ZW5kcyBFdmVudE5hbWVXaXRoQW55PihcbiAgICBldmVudDogTmFtZSxcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bTmFtZV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0ucHVzaChjYWxsYmFjayk7XG4gICAgfVxuICAgIC8vIEBUT0RPOiBNYXliZSB0aHJvdyBmb3IgaW52YWxpZCBjYWxsYmFja3M/XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCIqXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXVxuICApOiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCJhZGRcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvZmYoXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSBhbiBldmVudCwgcmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBJZiB0aGUgc2FtZSBjYWxsYmFjayB3YXMgc3Vic2NyaWJlZCBtb3JlIHRoYW4gb25jZSAqKmFsbCoqIG9jY3VyZW5jZXMgd2lsbCBiZSByZW1vdmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgb2ZmPE5hbWUgZXh0ZW5kcyBFdmVudE5hbWVXaXRoQW55PihcbiAgICBldmVudDogTmFtZSxcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bTmFtZV1cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaWJlcnNbZXZlbnRdID0gdGhpcy5fc3Vic2NyaWJlcnNbZXZlbnRdLmZpbHRlcihcbiAgICAgIChzdWJzY3JpYmVyKTogYm9vbGVhbiA9PiBzdWJzY3JpYmVyICE9PSBjYWxsYmFja1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9uIGluc3RlYWQgKFBTOiBEYXRhVmlldy5zdWJzY3JpYmUgPT09IERhdGFWaWV3Lm9uKS5cbiAgICovXG4gIHB1YmxpYyBzdWJzY3JpYmU6IERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5bXCJvblwiXSA9IERhdGFTZXRQYXJ0LnByb3RvdHlwZS5vbjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvZmYgaW5zdGVhZCAoUFM6IERhdGFWaWV3LnVuc3Vic2NyaWJlID09PSBEYXRhVmlldy5vZmYpLlxuICAgKi9cbiAgcHVibGljIHVuc3Vic2NyaWJlOiBEYXRhU2V0UGFydDxJdGVtLCBJZFByb3A+W1wib2ZmXCJdID1cbiAgICBEYXRhU2V0UGFydC5wcm90b3R5cGUub2ZmO1xuXG4gIC8qIGRldmVsYmxvY2s6c3RhcnQgKi9cbiAgcHVibGljIGdldCB0ZXN0TGVha1N1YnNjcmliZXJzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZXJzO1xuICB9XG4gIC8qIGRldmVsYmxvY2s6ZW5kICovXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYFNldGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LW9iamVjdHNcbmNvbGxlY3Rpb24oJ1NldCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlNldDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc2V0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zZXRcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SXRlcmF0b3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL2VzL2dldC1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi9zdGFibGUvZ2V0LWl0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi9hY3R1YWwvZ2V0LWl0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vZnVsbC9nZXQtaXRlcmF0b3InKTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yXCIpOyIsICJpbXBvcnQgeyBJZCB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbi8qKlxuICogRGF0YSBzdHJlYW1cbiAqXG4gKiBAcmVtYXJrc1xuICoge0BsaW5rIERhdGFTdHJlYW19IG9mZmVycyBhbiBhbHdheXMgdXAgdG8gZGF0ZSBzdHJlYW0gb2YgaXRlbXMgZnJvbSBhIHtAbGluayBEYXRhU2V0fSBvciB7QGxpbmsgRGF0YVZpZXd9LlxuICogVGhhdCBtZWFucyB0aGF0IHRoZSBzdHJlYW0gaXMgZXZhbHVhdGVkIGF0IHRoZSB0aW1lIG9mIGl0ZXJhdGlvbiwgY29udmVyc2lvbiB0byBhbm90aGVyIGRhdGEgdHlwZSBvciB3aGVuIHtAbGluayBjYWNoZX0gaXMgY2FsbGVkLCBub3Qgd2hlbiB0aGUge0BsaW5rIERhdGFTdHJlYW19IHdhcyBjcmVhdGVkLlxuICogTXVsdGlwbGUgaW52b2NhdGlvbnMgb2YgZm9yIGV4YW1wbGUge0BsaW5rIHRvSXRlbUFycmF5fSBtYXkgeWllbGQgZGlmZmVyZW50IHJlc3VsdHMgKGlmIHRoZSBkYXRhIHNvdXJjZSBsaWtlIGZvciBleGFtcGxlIHtAbGluayBEYXRhU2V0fSBnZXRzIG1vZGlmaWVkKS5cbiAqIEB0eXBlUGFyYW0gSXRlbSAtIFRoZSBpdGVtIHR5cGUgdGhpcyBzdHJlYW0gaXMgZ29pbmcgdG8gd29yayB3aXRoLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVN0cmVhbTxJdGVtPiBpbXBsZW1lbnRzIEl0ZXJhYmxlPFtJZCwgSXRlbV0+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFpcnM6IEl0ZXJhYmxlPFtJZCwgSXRlbV0+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgZGF0YSBzdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBwYWlycyAtIFRoZSBpZCwgaXRlbSBwYWlycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYWlyczogSXRlcmFibGU8W0lkLCBJdGVtXT4pIHtcbiAgICB0aGlzLl9wYWlycyA9IHBhaXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVyYWJsZSBvZiBrZXksIHZhbHVlIHBhaXJzIGZvciBldmVyeSBlbnRyeSBpbiB0aGUgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+IHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHlpZWxkIFtpZCwgaXRlbV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVyYWJsZSBvZiBrZXksIHZhbHVlIHBhaXJzIGZvciBldmVyeSBlbnRyeSBpbiB0aGUgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljICplbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBJdGVtXT4ge1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgeWllbGQgW2lkLCBpdGVtXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGl0ZXJhYmxlIG9mIGtleXMgaW4gdGhlIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyAqa2V5cygpOiBJdGVyYWJsZUl0ZXJhdG9yPElkPiB7XG4gICAgZm9yIChjb25zdCBbaWRdIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICB5aWVsZCBpZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGl0ZXJhYmxlIG9mIHZhbHVlcyBpbiB0aGUgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljICp2YWx1ZXMoKTogSXRlcmFibGVJdGVyYXRvcjxJdGVtPiB7XG4gICAgZm9yIChjb25zdCBbLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgeWllbGQgaXRlbTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBpZHMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBhcnJheSBtYXkgY29udGFpbiBkdXBsaWNpdGllcy5cbiAgICogQHJldHVybnMgVGhlIGFycmF5IHdpdGggYWxsIGlkcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvSWRBcnJheSgpOiBJZFtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3BhaXJzXS5tYXAoKHBhaXIpOiBJZCA9PiBwYWlyWzBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYXJyYXkgbWF5IGNvbnRhaW4gZHVwbGljaXRpZXMuXG4gICAqIEByZXR1cm5zIFRoZSBhcnJheSB3aXRoIGFsbCBpdGVtcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvSXRlbUFycmF5KCk6IEl0ZW1bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9wYWlyc10ubWFwKChwYWlyKTogSXRlbSA9PiBwYWlyWzFdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGVudHJpZXMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBhcnJheSBtYXkgY29udGFpbiBkdXBsaWNpdGllcy5cbiAgICogQHJldHVybnMgVGhlIGFycmF5IHdpdGggYWxsIGVudHJpZXMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0VudHJ5QXJyYXkoKTogW0lkLCBJdGVtXVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3BhaXJzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IG1hcCBjb250YWluaW5nIGFsbCB0aGUgaXRlbXMgaW4gdGhpcyBzdHJlYW0gYWNjZXNzaWJsZSBieSBpZHMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEluIGNhc2Ugb2YgZHVwbGljYXRlIGlkcyAoY29lcmNlZCB0byBzdHJpbmcgc28gYDcgPT0gJzcnYCkgdGhlIGxhc3QgZW5jb3V0ZXJlZCBhcHBlYXJzIGluIHRoZSByZXR1cm5lZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIFRoZSBvYmplY3QgbWFwIG9mIGFsbCBpZCDihpIgaXRlbSBwYWlycyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvT2JqZWN0TWFwKCk6IFJlY29yZDxJZCwgSXRlbT4ge1xuICAgIGNvbnN0IG1hcDogUmVjb3JkPElkLCBJdGVtPiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICBtYXBbaWRdID0gaXRlbTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtYXAgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIGluIHRoaXMgc3RyZWFtIGFjY2Vzc2libGUgYnkgaWRzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbWFwIG9mIGFsbCBpZCDihpIgaXRlbSBwYWlycyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvTWFwKCk6IE1hcDxJZCwgSXRlbT4ge1xuICAgIHJldHVybiBuZXcgTWFwKHRoaXMuX3BhaXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBzZXQgY29udGFpbmluZyBhbGwgdGhlICh1bmlxdWUpIGlkcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNldCBvZiBhbGwgaWRzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9JZFNldCgpOiBTZXQ8SWQ+IHtcbiAgICByZXR1cm4gbmV3IFNldCh0aGlzLnRvSWRBcnJheSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBzZXQgY29udGFpbmluZyBhbGwgdGhlICh1bmlxdWUpIGl0ZW1zIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2V0IG9mIGFsbCBpdGVtcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvSXRlbVNldCgpOiBTZXQ8SXRlbT4ge1xuICAgIHJldHVybiBuZXcgU2V0KHRoaXMudG9JdGVtQXJyYXkoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FjaGUgdGhlIGl0ZW1zIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgbWV0aG9kIGFsbG93cyBmb3IgaXRlbXMgdG8gYmUgZmV0Y2hlZCBpbW1lZGlhdGVsbHkgYW5kIHVzZWQgKHBvc3NpYmx5IG11bHRpcGxlIHRpbWVzKSBsYXRlci5cbiAgICogSXQgY2FuIGFsc28gYmUgdXNlZCB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBhcyB7QGxpbmsgRGF0YVN0cmVhbX0gd291bGQgb3RoZXJ3aXNlIHJlZXZhbHVhdGUgZXZlcnl0aGluZyB1cG9uIGVhY2ggaXRlcmF0aW9uLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogY29uc3QgZHMgPSBuZXcgRGF0YVNldChb4oCmXSlcbiAgICpcbiAgICogY29uc3QgY2FjaGVkU3RyZWFtID0gZHMuc3RyZWFtKClcbiAgICogICAuZmlsdGVyKOKApilcbiAgICogICAuc29ydCjigKYpXG4gICAqICAgLm1hcCjigKYpXG4gICAqICAgLmNhY2hlZCjigKYpIC8vIERhdGEgYXJlIGZldGNoZWQsIHByb2Nlc3NlZCBhbmQgY2FjaGVkIGhlcmUuXG4gICAqXG4gICAqIGRzLmNsZWFyKClcbiAgICogY2hhY2hlZFN0cmVhbSAvLyBTdGlsbCBoYXMgYWxsIHRoZSBpdGVtcy5cbiAgICogYGBgXG4gICAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBEYXRhU3RyZWFtfSB3aXRoIGNhY2hlZCBpdGVtcyAoZGV0YWNoZWQgZnJvbSB0aGUgb3JpZ2luYWwge0BsaW5rIERhdGFTZXR9KS5cbiAgICovXG4gIHB1YmxpYyBjYWNoZSgpOiBEYXRhU3RyZWFtPEl0ZW0+IHtcbiAgICByZXR1cm4gbmV3IERhdGFTdHJlYW0oWy4uLnRoaXMuX3BhaXJzXSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkaXN0aW5jdCB2YWx1ZXMgb2YgZ2l2ZW4gcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IHBpY2tzIGFuZCBwb3NzaWJseSBjb252ZXJ0cyB0aGUgcHJvcGVydHkuXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBkaXN0aW5jdCB2YWx1ZS5cbiAgICogQHJldHVybnMgQSBzZXQgb2YgYWxsIGRpc3RpbmN0IHByb3BlcnRpZXMuXG4gICAqL1xuICBwdWJsaWMgZGlzdGluY3Q8VD4oY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IFQpOiBTZXQ8VD4ge1xuICAgIGNvbnN0IHNldCA9IG5ldyBTZXQ8VD4oKTtcblxuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgc2V0LmFkZChjYWxsYmFjayhpdGVtLCBpZCkpO1xuICAgIH1cblxuICAgIHJldHVybiBzZXQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIHRoZSBpdGVtcyBvZiB0aGUgc3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBkZWNpZGVzIHdoZXRoZXIgYW4gaXRlbSB3aWxsIGJlIGluY2x1ZGVkLlxuICAgKiBAcmV0dXJucyBBIG5ldyBkYXRhIHN0cmVhbSB3aXRoIHRoZSBmaWx0ZXJlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBmaWx0ZXIoY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IGJvb2xlYW4pOiBEYXRhU3RyZWFtPEl0ZW0+IHtcbiAgICBjb25zdCBwYWlycyA9IHRoaXMuX3BhaXJzO1xuICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbTxJdGVtPih7XG4gICAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiB7XG4gICAgICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiBwYWlycykge1xuICAgICAgICAgIGlmIChjYWxsYmFjayhpdGVtLCBpZCkpIHtcbiAgICAgICAgICAgIHlpZWxkIFtpZCwgaXRlbV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBpdGVtIG9mIHRoZSBzdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCBmb3IgZWFjaCBpdGVtLlxuICAgKi9cbiAgcHVibGljIGZvckVhY2goY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFwIHRoZSBpdGVtcyBpbnRvIGEgZGlmZmVyZW50IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGNvbnZlcnNpb24uXG4gICAqIEB0eXBlUGFyYW0gTWFwcGVkIC0gVGhlIHR5cGUgb2YgdGhlIGl0ZW0gYWZ0ZXIgbWFwcGluZy5cbiAgICogQHJldHVybnMgQSBuZXcgZGF0YSBzdHJlYW0gd2l0aCB0aGUgbWFwcGVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIG1hcDxNYXBwZWQ+KFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBNYXBwZWRcbiAgKTogRGF0YVN0cmVhbTxNYXBwZWQ+IHtcbiAgICBjb25zdCBwYWlycyA9IHRoaXMuX3BhaXJzO1xuICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbTxNYXBwZWQ+KHtcbiAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgTWFwcGVkXT4ge1xuICAgICAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgcGFpcnMpIHtcbiAgICAgICAgICB5aWVsZCBbaWQsIGNhbGxiYWNrKGl0ZW0sIGlkKV07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpdGVtIHdpdGggdGhlIG1heGltdW0gdmFsdWUgb2YgZ2l2ZW4gcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IHBpY2tzIGFuZCBwb3NzaWJseSBjb252ZXJ0cyB0aGUgcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIHdpdGggdGhlIG1heGltdW0gaWYgZm91bmQgb3RoZXJ3aXNlIG51bGwuXG4gICAqL1xuICBwdWJsaWMgbWF4KGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBudW1iZXIpOiBJdGVtIHwgbnVsbCB7XG4gICAgY29uc3QgaXRlciA9IHRoaXMuX3BhaXJzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBsZXQgY3VyciA9IGl0ZXIubmV4dCgpO1xuICAgIGlmIChjdXJyLmRvbmUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBtYXhJdGVtOiBJdGVtID0gY3Vyci52YWx1ZVsxXTtcbiAgICBsZXQgbWF4VmFsdWU6IG51bWJlciA9IGNhbGxiYWNrKGN1cnIudmFsdWVbMV0sIGN1cnIudmFsdWVbMF0pO1xuICAgIHdoaWxlICghKGN1cnIgPSBpdGVyLm5leHQoKSkuZG9uZSkge1xuICAgICAgY29uc3QgW2lkLCBpdGVtXSA9IGN1cnIudmFsdWU7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICAgIGlmICh2YWx1ZSA+IG1heFZhbHVlKSB7XG4gICAgICAgIG1heFZhbHVlID0gdmFsdWU7XG4gICAgICAgIG1heEl0ZW0gPSBpdGVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXhJdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaXRlbSB3aXRoIHRoZSBtaW5pbXVtIHZhbHVlIG9mIGdpdmVuIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBwaWNrcyBhbmQgcG9zc2libHkgY29udmVydHMgdGhlIHByb3BlcnR5LlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSB3aXRoIHRoZSBtaW5pbXVtIGlmIGZvdW5kIG90aGVyd2lzZSBudWxsLlxuICAgKi9cbiAgcHVibGljIG1pbihjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gbnVtYmVyKTogSXRlbSB8IG51bGwge1xuICAgIGNvbnN0IGl0ZXIgPSB0aGlzLl9wYWlyc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgbGV0IGN1cnIgPSBpdGVyLm5leHQoKTtcbiAgICBpZiAoY3Vyci5kb25lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgbWluSXRlbTogSXRlbSA9IGN1cnIudmFsdWVbMV07XG4gICAgbGV0IG1pblZhbHVlOiBudW1iZXIgPSBjYWxsYmFjayhjdXJyLnZhbHVlWzFdLCBjdXJyLnZhbHVlWzBdKTtcbiAgICB3aGlsZSAoIShjdXJyID0gaXRlci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGNvbnN0IFtpZCwgaXRlbV0gPSBjdXJyLnZhbHVlO1xuICAgICAgY29uc3QgdmFsdWUgPSBjYWxsYmFjayhpdGVtLCBpZCk7XG4gICAgICBpZiAodmFsdWUgPCBtaW5WYWx1ZSkge1xuICAgICAgICBtaW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICBtaW5JdGVtID0gaXRlbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWluSXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWR1Y2UgdGhlIGl0ZW1zIGludG8gYSBzaW5nbGUgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIHJlZHVjdGlvbi5cbiAgICogQHBhcmFtIGFjY3VtdWxhdG9yIC0gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGFjY3VtdWxhdG9yLlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoZSByZWR1Y2VkIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIHJlZHVjZTxUPihcbiAgICBjYWxsYmFjazogKGFjY3VtdWxhdG9yOiBULCBpdGVtOiBJdGVtLCBpZDogSWQpID0+IFQsXG4gICAgYWNjdW11bGF0b3I6IFRcbiAgKTogVCB7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICBhY2N1bXVsYXRvciA9IGNhbGxiYWNrKGFjY3VtdWxhdG9yLCBpdGVtLCBpZCk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0IHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gSXRlbSBjb21wYXJhdG9yLlxuICAgKiBAcmV0dXJucyBBIG5ldyBzdHJlYW0gd2l0aCBzb3J0ZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgc29ydChcbiAgICBjYWxsYmFjazogKGl0ZW1BOiBJdGVtLCBpdGVtQjogSXRlbSwgaWRBOiBJZCwgaWRCOiBJZCkgPT4gbnVtYmVyXG4gICk6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbSh7XG4gICAgICBbU3ltYm9sLml0ZXJhdG9yXTogKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBJdGVtXT4gPT5cbiAgICAgICAgWy4uLnRoaXMuX3BhaXJzXVxuICAgICAgICAgIC5zb3J0KChbaWRBLCBpdGVtQV0sIFtpZEIsIGl0ZW1CXSk6IG51bWJlciA9PlxuICAgICAgICAgICAgY2FsbGJhY2soaXRlbUEsIGl0ZW1CLCBpZEEsIGlkQilcbiAgICAgICAgICApXG4gICAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl0oKSxcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IHY0IGFzIHV1aWQ0IH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IHB1cmVEZWVwT2JqZWN0QXNzaWduIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG5pbXBvcnQge1xuICBEYXRhSW50ZXJmYWNlLFxuICBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheSxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3QsXG4gIERhdGFJbnRlcmZhY2VNYXBPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlT3JkZXIsXG4gIERlZXBQYXJ0aWFsLFxuICBFdmVudFBheWxvYWRzLFxuICBGdWxsSXRlbSxcbiAgSWQsXG4gIE9wdElkLFxuICBQYXJ0SXRlbSxcbiAgVXBkYXRlSXRlbSxcbiAgaXNJZCxcbn0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcblxuaW1wb3J0IHsgUXVldWUsIFF1ZXVlT3B0aW9ucyB9IGZyb20gXCIuL3F1ZXVlXCI7XG5pbXBvcnQgeyBEYXRhU2V0UGFydCB9IGZyb20gXCIuL2RhdGEtc2V0LXBhcnRcIjtcbmltcG9ydCB7IERhdGFTdHJlYW0gfSBmcm9tIFwiLi9kYXRhLXN0cmVhbVwiO1xuXG4vKipcbiAqIEluaXRpYWwgRGF0YVNldCBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAqXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3AgZXh0ZW5kcyBzdHJpbmc+IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCBjb250YWluaW5nIHRoZSBpZCBvZiB0aGUgaXRlbXMuIFdoZW4gZGF0YSBpcyBmZXRjaGVkIGZyb20gYSBzZXJ2ZXIgd2hpY2ggdXNlcyBzb21lIHNwZWNpZmljIGZpZWxkIHRvIGlkZW50aWZ5IGl0ZW1zLCB0aGlzIGZpZWxkIG5hbWUgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgRGF0YVNldCB1c2luZyB0aGUgb3B0aW9uIGBmaWVsZElkYC4gRm9yIGV4YW1wbGUgW0NvdWNoREJdKGh0dHA6Ly9jb3VjaGRiLmFwYWNoZS5vcmcvKSB1c2VzIHRoZSBmaWVsZCBgJ19pZCdgIHRvIGlkZW50aWZ5IGRvY3VtZW50cy5cbiAgICovXG4gIGZpZWxkSWQ/OiBJZFByb3A7XG4gIC8qKlxuICAgKiBRdWV1ZSBkYXRhIGNoYW5nZXMgKCdhZGQnLCAndXBkYXRlJywgJ3JlbW92ZScpIGFuZCBmbHVzaCB0aGVtIGF0IG9uY2UuIFRoZSBxdWV1ZSBjYW4gYmUgZmx1c2hlZCBtYW51YWxseSBieSBjYWxsaW5nIGBEYXRhU2V0LmZsdXNoKClgLCBvciBjYW4gYmUgZmx1c2hlZCBhZnRlciBhIGNvbmZpZ3VyZWQgZGVsYXkgb3IgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcy5cbiAgICpcbiAgICogV2hlbiBxdWV1ZSBpcyB0cnVlLCBhIHF1ZXVlIGlzIGNyZWF0ZWQgd2l0aCBkZWZhdWx0IG9wdGlvbnMuIE9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBieSBwcm92aWRpbmcgYW4gb2JqZWN0LlxuICAgKi9cbiAgcXVldWU/OiBRdWV1ZU9wdGlvbnMgfCBmYWxzZTtcbn1cbi8qKiBEYXRhU2V0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBRdWV1ZSBjb25maWd1cmF0aW9uIG9iamVjdCBvciBmYWxzZSBpZiBubyBxdWV1ZSBzaG91bGQgYmUgdXNlZC5cbiAgICpcbiAgICogLSBJZiBmYWxzZSBhbmQgdGhlcmUgd2FzIGEgcXVldWUgYmVmb3JlIGl0IHdpbGwgYmUgZmx1c2hlZCBhbmQgdGhlbiByZW1vdmVkLlxuICAgKiAtIElmIHtAbGluayBRdWV1ZU9wdGlvbnN9IHRoZSBleGlzdGluZyBxdWV1ZSB3aWxsIGJlIHJlY29uZmlndXJlZCBvciBhIG5ldyBxdWV1ZSB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBxdWV1ZT86IFF1ZXVlIHwgUXVldWVPcHRpb25zIHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGFuIGlkIHRvIGdpdmVuIGl0ZW0gaWYgaXQgZG9lc24ndCBoYXZlIG9uZSBhbHJlYWR5LlxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgaXRlbSB3aWxsIGJlIG1vZGlmaWVkLlxuICogQHBhcmFtIGl0ZW0gLSBUaGUgaXRlbSB0aGF0IHdpbGwgaGF2ZSBhbiBpZCBhZnRlciBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSBpZFByb3AgLSBUaGUga2V5IG9mIHRoZSBpZCBwcm9wZXJ0eS5cbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICogQHJldHVybnMgdHJ1ZVxuICovXG5mdW5jdGlvbiBlbnN1cmVGdWxsSXRlbTxJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPiwgSWRQcm9wIGV4dGVuZHMgc3RyaW5nPihcbiAgaXRlbTogSXRlbSxcbiAgaWRQcm9wOiBJZFByb3Bcbik6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4ge1xuICBpZiAoaXRlbVtpZFByb3BdID09IG51bGwpIHtcbiAgICAvLyBnZW5lcmF0ZSBhbiBpZFxuICAgIGl0ZW1baWRQcm9wXSA9IHV1aWQ0KCkgYXMgYW55O1xuICB9XG5cbiAgcmV0dXJuIGl0ZW0gYXMgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbn1cblxuLyoqXG4gKiAjIERhdGFTZXRcbiAqXG4gKiBWaXMuanMgY29tZXMgd2l0aCBhIGZsZXhpYmxlIERhdGFTZXQsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGhvbGQgYW5kXG4gKiBtYW5pcHVsYXRlIHVuc3RydWN0dXJlZCBkYXRhIGFuZCBsaXN0ZW4gZm9yIGNoYW5nZXMgaW4gdGhlIGRhdGEuIFRoZSBEYXRhU2V0XG4gKiBpcyBrZXkvdmFsdWUgYmFzZWQuIERhdGEgaXRlbXMgY2FuIGJlIGFkZGVkLCB1cGRhdGVkIGFuZCByZW1vdmVkIGZyb20gdGhlXG4gKiBEYXRhU2V0LCBhbmQgb25lIGNhbiBzdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiB0aGUgRGF0YVNldC4gVGhlIGRhdGEgaW4gdGhlXG4gKiBEYXRhU2V0IGNhbiBiZSBmaWx0ZXJlZCBhbmQgb3JkZXJlZC4gRGF0YSBjYW4gYmUgbm9ybWFsaXplZCB3aGVuIGFwcGVuZGluZyBpdFxuICogdG8gdGhlIERhdGFTZXQgYXMgd2VsbC5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byB1c2UgYSBEYXRhU2V0LlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAqIHZhciBvcHRpb25zID0ge307XG4gKiB2YXIgZGF0YSA9IG5ldyB2aXMuRGF0YVNldChvcHRpb25zKTtcbiAqXG4gKiAvLyBhZGQgaXRlbXNcbiAqIC8vIG5vdGUgdGhhdCB0aGUgZGF0YSBpdGVtcyBjYW4gY29udGFpbiBkaWZmZXJlbnQgcHJvcGVydGllcyBhbmQgZGF0YSBmb3JtYXRzXG4gKiBkYXRhLmFkZChbXG4gKiAgIHtpZDogMSwgdGV4dDogJ2l0ZW0gMScsIGRhdGU6IG5ldyBEYXRlKDIwMTMsIDYsIDIwKSwgZ3JvdXA6IDEsIGZpcnN0OiB0cnVlfSxcbiAqICAge2lkOiAyLCB0ZXh0OiAnaXRlbSAyJywgZGF0ZTogJzIwMTMtMDYtMjMnLCBncm91cDogMn0sXG4gKiAgIHtpZDogMywgdGV4dDogJ2l0ZW0gMycsIGRhdGU6ICcyMDEzLTA2LTI1JywgZ3JvdXA6IDJ9LFxuICogICB7aWQ6IDQsIHRleHQ6ICdpdGVtIDQnfVxuICogXSk7XG4gKlxuICogLy8gc3Vic2NyaWJlIHRvIGFueSBjaGFuZ2UgaW4gdGhlIERhdGFTZXRcbiAqIGRhdGEub24oJyonLCBmdW5jdGlvbiAoZXZlbnQsIHByb3BlcnRpZXMsIHNlbmRlcklkKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdldmVudCcsIGV2ZW50LCBwcm9wZXJ0aWVzKTtcbiAqIH0pO1xuICpcbiAqIC8vIHVwZGF0ZSBhbiBleGlzdGluZyBpdGVtXG4gKiBkYXRhLnVwZGF0ZSh7aWQ6IDIsIGdyb3VwOiAxfSk7XG4gKlxuICogLy8gcmVtb3ZlIGFuIGl0ZW1cbiAqIGRhdGEucmVtb3ZlKDQpO1xuICpcbiAqIC8vIGdldCBhbGwgaWRzXG4gKiB2YXIgaWRzID0gZGF0YS5nZXRJZHMoKTtcbiAqIGNvbnNvbGUubG9nKCdpZHMnLCBpZHMpO1xuICpcbiAqIC8vIGdldCBhIHNwZWNpZmljIGl0ZW1cbiAqIHZhciBpdGVtMSA9IGRhdGEuZ2V0KDEpO1xuICogY29uc29sZS5sb2coJ2l0ZW0xJywgaXRlbTEpO1xuICpcbiAqIC8vIHJldHJpZXZlIGEgZmlsdGVyZWQgc3Vic2V0IG9mIHRoZSBkYXRhXG4gKiB2YXIgaXRlbXMgPSBkYXRhLmdldCh7XG4gKiAgIGZpbHRlcjogZnVuY3Rpb24gKGl0ZW0pIHtcbiAqICAgICByZXR1cm4gaXRlbS5ncm91cCA9PSAxO1xuICogICB9XG4gKiB9KTtcbiAqIGNvbnNvbGUubG9nKCdmaWx0ZXJlZCBpdGVtcycsIGl0ZW1zKTtcbiAqIGBgYFxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVNldDxcbiAgICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbiAgPlxuICBleHRlbmRzIERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5cbiAgaW1wbGVtZW50cyBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD5cbntcbiAgLyoqIEZsdXNoIGFsbCBxdWV1ZWQgY2FsbHMuICovXG4gIHB1YmxpYyBmbHVzaD86ICgpID0+IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgbGVuZ3RoOiBudW1iZXI7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0IGlkUHJvcCgpOiBJZFByb3Age1xuICAgIHJldHVybiB0aGlzLl9pZFByb3A7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YTogTWFwPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaWRQcm9wOiBJZFByb3A7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZTx0aGlzPiB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIERhdGFTZXQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD4pO1xuICAvKipcbiAgICogQHBhcmFtIGRhdGEgLSBBbiBpbml0aWFsIHNldCBvZiBpdGVtcyBmb3IgdGhlIG5ldyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBEYXRhU2V0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoZGF0YTogSXRlbVtdLCBvcHRpb25zPzogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD4pO1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IERhdGFTZXQuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gSW5pdGlhbCBkYXRhIG9yIG9wdGlvbnMuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyAodHlwZSBlcnJvciBpZiBkYXRhIGlzIGFsc28gb3B0aW9ucykuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgZGF0YT86IEl0ZW1bXSB8IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+LFxuICAgIG9wdGlvbnM/OiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPlxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgLy8gY29ycmVjdGx5IHJlYWQgb3B0aW9uYWwgYXJndW1lbnRzXG4gICAgaWYgKGRhdGEgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIG9wdGlvbnMgPSBkYXRhO1xuICAgICAgZGF0YSA9IFtdO1xuICAgIH1cblxuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRoaXMuX2RhdGEgPSBuZXcgTWFwKCk7IC8vIG1hcCB3aXRoIGRhdGEgaW5kZXhlZCBieSBpZFxuICAgIHRoaXMubGVuZ3RoID0gMDsgLy8gbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBEYXRhU2V0XG4gICAgdGhpcy5faWRQcm9wID0gdGhpcy5fb3B0aW9ucy5maWVsZElkIHx8IChcImlkXCIgYXMgSWRQcm9wKTsgLy8gbmFtZSBvZiB0aGUgZmllbGQgY29udGFpbmluZyBpZFxuXG4gICAgLy8gYWRkIGluaXRpYWwgZGF0YSB3aGVuIHByb3ZpZGVkXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYWRkKGRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbmV3IG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG5ldyBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIHNldE9wdGlvbnMob3B0aW9ucz86IERhdGFTZXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5xdWV1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy5xdWV1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gZGVsZXRlIHF1ZXVlIGlmIGxvYWRlZFxuICAgICAgICBpZiAodGhpcy5fcXVldWUpIHtcbiAgICAgICAgICB0aGlzLl9xdWV1ZS5kZXN0cm95KCk7XG4gICAgICAgICAgdGhpcy5fcXVldWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgcXVldWUgYW5kIHVwZGF0ZSBpdHMgb3B0aW9uc1xuICAgICAgICBpZiAoIXRoaXMuX3F1ZXVlKSB7XG4gICAgICAgICAgdGhpcy5fcXVldWUgPSBRdWV1ZS5leHRlbmQodGhpcywge1xuICAgICAgICAgICAgcmVwbGFjZTogW1wiYWRkXCIsIFwidXBkYXRlXCIsIFwicmVtb3ZlXCJdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucXVldWUgJiYgdHlwZW9mIG9wdGlvbnMucXVldWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICB0aGlzLl9xdWV1ZS5zZXRPcHRpb25zKG9wdGlvbnMucXVldWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGRhdGEgaXRlbSBvciBhbiBhcnJheSB3aXRoIGl0ZW1zLlxuICAgKlxuICAgKiBBZnRlciB0aGUgaXRlbXMgYXJlIGFkZGVkIHRvIHRoZSBEYXRhU2V0LCB0aGUgRGF0YVNldCB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYGFkZGAuIFdoZW4gYSBgc2VuZGVySWRgIGlzIHByb3ZpZGVkLCB0aGlzIGlkIHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIHRyaWdnZXJlZCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gICAqIGNvbnN0IGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQoKVxuICAgKlxuICAgKiAvLyBhZGQgaXRlbXNcbiAgICogY29uc3QgaWRzID0gZGF0YS5hZGQoW1xuICAgKiAgIHsgaWQ6IDEsIHRleHQ6ICdpdGVtIDEnIH0sXG4gICAqICAgeyBpZDogMiwgdGV4dDogJ2l0ZW0gMicgfSxcbiAgICogICB7IHRleHQ6ICdpdGVtIHdpdGhvdXQgYW4gaWQnIH1cbiAgICogXSlcbiAgICpcbiAgICogY29uc29sZS5sb2coaWRzKSAvLyBbMSwgMiwgJzxVVUlEdjQ+J11cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gSXRlbXMgdG8gYmUgYWRkZWQgKGlkcyB3aWxsIGJlIGdlbmVyYXRlZCBpZiBtaXNzaW5nKS5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gU2VuZGVyIGlkLlxuICAgKiBAcmV0dXJucyBhZGRlZElkcyAtIEFycmF5IHdpdGggdGhlIGlkcyAoZ2VuZXJhdGVkIGlmIG5vdCBwcmVzZW50KSBvZiB0aGUgYWRkZWQgaXRlbXMuXG4gICAqIEB0aHJvd3MgV2hlbiBhbiBpdGVtIHdpdGggdGhlIHNhbWUgaWQgYXMgYW55IG9mIHRoZSBhZGRlZCBpdGVtcyBhbHJlYWR5IGV4aXN0cy5cbiAgICovXG4gIHB1YmxpYyBhZGQoZGF0YTogSXRlbSB8IEl0ZW1bXSwgc2VuZGVySWQ/OiBJZCB8IG51bGwpOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHtcbiAgICBjb25zdCBhZGRlZElkczogSWRbXSA9IFtdO1xuICAgIGxldCBpZDogSWQ7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgLy8gQXJyYXlcbiAgICAgIGNvbnN0IGlkc1RvQWRkOiBJZFtdID0gZGF0YS5tYXAoKGQpID0+IGRbdGhpcy5faWRQcm9wXSBhcyBJZCk7XG4gICAgICBpZiAoaWRzVG9BZGQuc29tZSgoaWQpID0+IHRoaXMuX2RhdGEuaGFzKGlkKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBkdXBsaWNhdGUgaWQgd2FzIGZvdW5kIGluIHRoZSBwYXJhbWV0ZXIgYXJyYXkuXCIpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWQgPSB0aGlzLl9hZGRJdGVtKGRhdGFbaV0pO1xuICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIC8vIFNpbmdsZSBpdGVtXG4gICAgICBpZCA9IHRoaXMuX2FkZEl0ZW0oZGF0YSk7XG4gICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBkYXRhVHlwZVwiKTtcbiAgICB9XG5cbiAgICBpZiAoYWRkZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGFkZGVkSWRzIH0sIHNlbmRlcklkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkZWRJZHM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGV4aXN0aW5nIGl0ZW1zLiBXaGVuIGFuIGl0ZW0gZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIHByb3ZpZGVkIHByb3BlcnRpZXMgd2lsbCBiZSBtZXJnZWQgaW4gdGhlIGV4aXN0aW5nIGl0ZW0uIFdoZW4gYW4gaXRlbSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBBZnRlciB0aGUgaXRlbXMgYXJlIHVwZGF0ZWQsIHRoZSBEYXRhU2V0IHdpbGwgdHJpZ2dlciBhbiBldmVudCBgYWRkYCBmb3IgdGhlIGFkZGVkIGl0ZW1zLCBhbmQgYW4gZXZlbnQgYHVwZGF0ZWAuIFdoZW4gYSBgc2VuZGVySWRgIGlzIHByb3ZpZGVkLCB0aGlzIGlkIHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIHRyaWdnZXJlZCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gICAqIGNvbnN0IGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQoW1xuICAgKiAgIHsgaWQ6IDEsIHRleHQ6ICdpdGVtIDEnIH0sXG4gICAqICAgeyBpZDogMiwgdGV4dDogJ2l0ZW0gMicgfSxcbiAgICogICB7IGlkOiAzLCB0ZXh0OiAnaXRlbSAzJyB9XG4gICAqIF0pXG4gICAqXG4gICAqIC8vIHVwZGF0ZSBpdGVtc1xuICAgKiBjb25zdCBpZHMgPSBkYXRhLnVwZGF0ZShbXG4gICAqICAgeyBpZDogMiwgdGV4dDogJ2l0ZW0gMiAodXBkYXRlZCknIH0sXG4gICAqICAgeyBpZDogNCwgdGV4dDogJ2l0ZW0gNCAobmV3KScgfVxuICAgKiBdKVxuICAgKlxuICAgKiBjb25zb2xlLmxvZyhpZHMpIC8vIFsyLCA0XVxuICAgKiBgYGBcbiAgICpcbiAgICogIyMgV2FybmluZyBmb3IgVHlwZVNjcmlwdCB1c2Vyc1xuICAgKiBUaGlzIG1ldGhvZCBtYXkgaW50cm9kdWNlIHBhcnRpYWwgaXRlbXMgaW50byB0aGUgZGF0YSBzZXQuIFVzZSBhZGQgb3IgdXBkYXRlT25seSBpbnN0ZWFkIGZvciBiZXR0ZXIgdHlwZSBzYWZldHkuXG4gICAqIEBwYXJhbSBkYXRhIC0gSXRlbXMgdG8gYmUgdXBkYXRlZCAoaWYgdGhlIGlkIGlzIGFscmVhZHkgcHJlc2VudCkgb3IgYWRkZWQgKGlmIHRoZSBpZCBpcyBtaXNzaW5nKS5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gU2VuZGVyIGlkLlxuICAgKiBAcmV0dXJucyB1cGRhdGVkSWRzIC0gVGhlIGlkcyBvZiB0aGUgYWRkZWQgKHRoZXNlIG1heSBiZSBuZXdseSBnZW5lcmF0ZWQgaWYgdGhlcmUgd2FzIG5vIGlkIGluIHRoZSBpdGVtIGZyb20gdGhlIGRhdGEpIG9yIHVwZGF0ZWQgaXRlbXMuXG4gICAqIEB0aHJvd3MgV2hlbiB0aGUgc3VwcGxpZWQgZGF0YSBpcyBuZWl0aGVyIGFuIGl0ZW0gbm9yIGFuIGFycmF5IG9mIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZShcbiAgICBkYXRhOiBEZWVwUGFydGlhbDxJdGVtPiB8IERlZXBQYXJ0aWFsPEl0ZW0+W10sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogSWRbXSB7XG4gICAgY29uc3QgYWRkZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCB1cGRhdGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3Qgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG4gICAgY29uc3QgdXBkYXRlZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGNvbnN0IGlkUHJvcCA9IHRoaXMuX2lkUHJvcDtcblxuICAgIGNvbnN0IGFkZE9yVXBkYXRlID0gKGl0ZW06IERlZXBQYXJ0aWFsPEl0ZW0+KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBvcmlnSWQ6IE9wdElkID0gaXRlbVtpZFByb3BdO1xuICAgICAgaWYgKG9yaWdJZCAhPSBudWxsICYmIHRoaXMuX2RhdGEuaGFzKG9yaWdJZCkpIHtcbiAgICAgICAgY29uc3QgZnVsbEl0ZW0gPSBpdGVtIGFzIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47IC8vIGl0IGhhcyBhbiBpZCwgdGhlcmVmb3JlIGl0IGlzIGEgZnVsbGl0ZW1cbiAgICAgICAgY29uc3Qgb2xkSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RhdGEuZ2V0KG9yaWdJZCkpO1xuICAgICAgICAvLyB1cGRhdGUgaXRlbVxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3VwZGF0ZUl0ZW0oZnVsbEl0ZW0pO1xuICAgICAgICB1cGRhdGVkSWRzLnB1c2goaWQpO1xuICAgICAgICB1cGRhdGVkRGF0YS5wdXNoKGZ1bGxJdGVtKTtcbiAgICAgICAgb2xkRGF0YS5wdXNoKG9sZEl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYWRkIG5ldyBpdGVtXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5fYWRkSXRlbShpdGVtIGFzIGFueSk7XG4gICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgLy8gQXJyYXlcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBkYXRhLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmIChkYXRhW2ldICYmIHR5cGVvZiBkYXRhW2ldID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgYWRkT3JVcGRhdGUoZGF0YVtpXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJJZ25vcmluZyBpbnB1dCBpdGVtLCB3aGljaCBpcyBub3QgYW4gb2JqZWN0IGF0IGluZGV4IFwiICsgaVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIC8vIFNpbmdsZSBpdGVtXG4gICAgICBhZGRPclVwZGF0ZShkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBkYXRhVHlwZVwiKTtcbiAgICB9XG5cbiAgICBpZiAoYWRkZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGFkZGVkSWRzIH0sIHNlbmRlcklkKTtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZWRJZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcm9wcyA9IHsgaXRlbXM6IHVwZGF0ZWRJZHMsIG9sZERhdGE6IG9sZERhdGEsIGRhdGE6IHVwZGF0ZWREYXRhIH07XG4gICAgICAvLyBUT0RPOiByZW1vdmUgZGVwcmVjYXRlZCBwcm9wZXJ0eSAnZGF0YScgc29tZSBkYXlcbiAgICAgIC8vT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAnZGF0YScsIHtcbiAgICAgIC8vICAnZ2V0JzogKGZ1bmN0aW9uKCkge1xuICAgICAgLy8gICAgY29uc29sZS53YXJuKCdQcm9wZXJ0eSBkYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBEYXRhU2V0LmdldChpZHMpIHRvIHJldHJpZXZlIHRoZSBuZXcgZGF0YSwgdXNlIHRoZSBvbGREYXRhIHByb3BlcnR5IG9uIHRoaXMgb2JqZWN0IHRvIGdldCB0aGUgb2xkIGRhdGEnKTtcbiAgICAgIC8vICAgIHJldHVybiB1cGRhdGVkRGF0YTtcbiAgICAgIC8vICB9KS5iaW5kKHRoaXMpXG4gICAgICAvL30pO1xuICAgICAgdGhpcy5fdHJpZ2dlcihcInVwZGF0ZVwiLCBwcm9wcywgc2VuZGVySWQpO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRlZElkcy5jb25jYXQodXBkYXRlZElkcyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGV4aXN0aW5nIGl0ZW1zLiBXaGVuIGFuIGl0ZW0gZG9lcyBub3QgZXhpc3QsIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgcHJvdmlkZWQgcHJvcGVydGllcyB3aWxsIGJlIGRlZXBseSBtZXJnZWQgaW50byB0aGUgZXhpc3RpbmcgaXRlbS5cbiAgICogV2hlbiBhbiBpdGVtIGRvZXMgbm90IGV4aXN0IChpZCBub3QgcHJlc2VudCBpbiB0aGUgZGF0YSBzZXQgb3IgYWJzZW50KSwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24gYW5kIG5vdGhpbmcgd2lsbCBiZSBjaGFuZ2VkLlxuICAgKlxuICAgKiBBZnRlciB0aGUgaXRlbXMgYXJlIHVwZGF0ZWQsIHRoZSBEYXRhU2V0IHdpbGwgdHJpZ2dlciBhbiBldmVudCBgdXBkYXRlYC5cbiAgICogV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAgICogY29uc3QgZGF0YSA9IG5ldyB2aXMuRGF0YVNldChbXG4gICAqICAgeyBpZDogMSwgdGV4dDogJ2l0ZW0gMScgfSxcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyJyB9LFxuICAgKiAgIHsgaWQ6IDMsIHRleHQ6ICdpdGVtIDMnIH0sXG4gICAqIF0pXG4gICAqXG4gICAqIC8vIHVwZGF0ZSBpdGVtc1xuICAgKiBjb25zdCBpZHMgPSBkYXRhLnVwZGF0ZShbXG4gICAqICAgeyBpZDogMiwgdGV4dDogJ2l0ZW0gMiAodXBkYXRlZCknIH0sIC8vIHdvcmtzXG4gICAqICAgLy8geyBpZDogNCwgdGV4dDogJ2l0ZW0gNCAobmV3KScgfSwgLy8gd291bGQgdGhyb3dcbiAgICogICAvLyB7IHRleHQ6ICdpdGVtIDQgKG5ldyknIH0sIC8vIHdvdWxkIGFsc28gdGhyb3dcbiAgICogXSlcbiAgICpcbiAgICogY29uc29sZS5sb2coaWRzKSAvLyBbMl1cbiAgICogYGBgXG4gICAqIEBwYXJhbSBkYXRhIC0gVXBkYXRlcyAodGhlIGlkIGFuZCBvcHRpb25hbGx5IG90aGVyIHByb3BzKSB0byB0aGUgaXRlbXMgaW4gdGhpcyBkYXRhIHNldC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gU2VuZGVyIGlkLlxuICAgKiBAcmV0dXJucyB1cGRhdGVkSWRzIC0gVGhlIGlkcyBvZiB0aGUgdXBkYXRlZCBpdGVtcy5cbiAgICogQHRocm93cyBXaGVuIHRoZSBzdXBwbGllZCBkYXRhIGlzIG5laXRoZXIgYW4gaXRlbSBub3IgYW4gYXJyYXkgb2YgaXRlbXMsIHdoZW4gdGhlIGlkcyBhcmUgbWlzc2luZy5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVPbmx5KFxuICAgIGRhdGE6IFVwZGF0ZUl0ZW08SXRlbSwgSWRQcm9wPiB8IFVwZGF0ZUl0ZW08SXRlbSwgSWRQcm9wPltdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IElkW10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVFdmVudERhdGEgPSBkYXRhXG4gICAgICAubWFwKFxuICAgICAgICAoXG4gICAgICAgICAgdXBkYXRlXG4gICAgICAgICk6IHtcbiAgICAgICAgICBvbGREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAgICAgICAgIHVwZGF0ZTogVXBkYXRlSXRlbTxJdGVtLCBJZFByb3A+O1xuICAgICAgICB9ID0+IHtcbiAgICAgICAgICBjb25zdCBvbGREYXRhID0gdGhpcy5fZGF0YS5nZXQodXBkYXRlW3RoaXMuX2lkUHJvcF0pO1xuICAgICAgICAgIGlmIChvbGREYXRhID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVwZGF0aW5nIG5vbi1leGlzdGVudCBpdGVtcyBpcyBub3QgYWxsb3dlZC5cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IG9sZERhdGEsIHVwZGF0ZSB9O1xuICAgICAgICB9XG4gICAgICApXG4gICAgICAubWFwKFxuICAgICAgICAoe1xuICAgICAgICAgIG9sZERhdGEsXG4gICAgICAgICAgdXBkYXRlLFxuICAgICAgICB9KToge1xuICAgICAgICAgIGlkOiBJZDtcbiAgICAgICAgICBvbGREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAgICAgICAgIHVwZGF0ZWREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAgICAgICB9ID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IG9sZERhdGFbdGhpcy5faWRQcm9wXTtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkRGF0YSA9IHB1cmVEZWVwT2JqZWN0QXNzaWduKG9sZERhdGEsIHVwZGF0ZSk7XG5cbiAgICAgICAgICB0aGlzLl9kYXRhLnNldChpZCwgdXBkYXRlZERhdGEpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgb2xkRGF0YTogb2xkRGF0YSxcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICBpZiAodXBkYXRlRXZlbnREYXRhLmxlbmd0aCkge1xuICAgICAgY29uc3QgcHJvcHM6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXSA9IHtcbiAgICAgICAgaXRlbXM6IHVwZGF0ZUV2ZW50RGF0YS5tYXAoKHZhbHVlKTogSWQgPT4gdmFsdWUuaWQpLFxuICAgICAgICBvbGREYXRhOiB1cGRhdGVFdmVudERhdGEubWFwKFxuICAgICAgICAgICh2YWx1ZSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gPT4gdmFsdWUub2xkRGF0YVxuICAgICAgICApLFxuICAgICAgICBkYXRhOiB1cGRhdGVFdmVudERhdGEubWFwKFxuICAgICAgICAgICh2YWx1ZSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gPT4gdmFsdWUudXBkYXRlZERhdGFcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgICAvLyBUT0RPOiByZW1vdmUgZGVwcmVjYXRlZCBwcm9wZXJ0eSAnZGF0YScgc29tZSBkYXlcbiAgICAgIC8vT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAnZGF0YScsIHtcbiAgICAgIC8vICAnZ2V0JzogKGZ1bmN0aW9uKCkge1xuICAgICAgLy8gICAgY29uc29sZS53YXJuKCdQcm9wZXJ0eSBkYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBEYXRhU2V0LmdldChpZHMpIHRvIHJldHJpZXZlIHRoZSBuZXcgZGF0YSwgdXNlIHRoZSBvbGREYXRhIHByb3BlcnR5IG9uIHRoaXMgb2JqZWN0IHRvIGdldCB0aGUgb2xkIGRhdGEnKTtcbiAgICAgIC8vICAgIHJldHVybiB1cGRhdGVkRGF0YTtcbiAgICAgIC8vICB9KS5iaW5kKHRoaXMpXG4gICAgICAvL30pO1xuICAgICAgdGhpcy5fdHJpZ2dlcihcInVwZGF0ZVwiLCBwcm9wcywgc2VuZGVySWQpO1xuXG4gICAgICByZXR1cm4gcHJvcHMuaXRlbXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCgpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChpZDogSWQpOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChpZHM6IElkW10pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkIHwgSWRbXSxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBmaXJzdD86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+IHwgSWQgfCBJZFtdLFxuICAgIHNlY29uZD86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6XG4gICAgfCBudWxsXG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+XG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W11cbiAgICB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4ge1xuICAgIC8vIEBUT0RPOiBXb3Vkbid0IGl0IGJlIGJldHRlciB0byBzcGxpdCB0aGlzIGludG8gbXVsdGlwbGUgbWV0aG9kcz9cblxuICAgIC8vIHBhcnNlIHRoZSBhcmd1bWVudHNcbiAgICBsZXQgaWQ6IElkIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBpZHM6IElkW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc0lkKGZpcnN0KSkge1xuICAgICAgLy8gZ2V0KGlkIFssIG9wdGlvbnNdKVxuICAgICAgaWQgPSBmaXJzdDtcbiAgICAgIG9wdGlvbnMgPSBzZWNvbmQ7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGZpcnN0KSkge1xuICAgICAgLy8gZ2V0KGlkcyBbLCBvcHRpb25zXSlcbiAgICAgIGlkcyA9IGZpcnN0O1xuICAgICAgb3B0aW9ucyA9IHNlY29uZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZ2V0KFssIG9wdGlvbnNdKVxuICAgICAgb3B0aW9ucyA9IGZpcnN0O1xuICAgIH1cblxuICAgIC8vIGRldGVybWluZSB0aGUgcmV0dXJuIHR5cGVcbiAgICBjb25zdCByZXR1cm5UeXBlID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5yZXR1cm5UeXBlID09PSBcIk9iamVjdFwiID8gXCJPYmplY3RcIiA6IFwiQXJyYXlcIjtcbiAgICAvLyBAVE9ETzogV1RGIGlzIHRoaXM/IE9yIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/XG4gICAgLy8gdmFyIHJldHVyblR5cGVcbiAgICAvLyBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJldHVyblR5cGUpIHtcbiAgICAvLyAgIHZhciBhbGxvd2VkVmFsdWVzID0gWydBcnJheScsICdPYmplY3QnXVxuICAgIC8vICAgcmV0dXJuVHlwZSA9XG4gICAgLy8gICAgIGFsbG93ZWRWYWx1ZXMuaW5kZXhPZihvcHRpb25zLnJldHVyblR5cGUpID09IC0xXG4gICAgLy8gICAgICAgPyAnQXJyYXknXG4gICAgLy8gICAgICAgOiBvcHRpb25zLnJldHVyblR5cGVcbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgcmV0dXJuVHlwZSA9ICdBcnJheSdcbiAgICAvLyB9XG5cbiAgICAvLyBidWlsZCBvcHRpb25zXG4gICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICBjb25zdCBpdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG4gICAgbGV0IGl0ZW06IHVuZGVmaW5lZCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gPSB1bmRlZmluZWQ7XG4gICAgbGV0IGl0ZW1JZHM6IHVuZGVmaW5lZCB8IElkW10gPSB1bmRlZmluZWQ7XG4gICAgbGV0IGl0ZW1JZDogdW5kZWZpbmVkIHwgSWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBjb252ZXJ0IGl0ZW1zXG4gICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgIC8vIHJldHVybiBhIHNpbmdsZSBpdGVtXG4gICAgICBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgICAgaWYgKGl0ZW0gJiYgZmlsdGVyICYmICFmaWx0ZXIoaXRlbSkpIHtcbiAgICAgICAgaXRlbSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlkcyAhPSBudWxsKSB7XG4gICAgICAvLyByZXR1cm4gYSBzdWJzZXQgb2YgaXRlbXNcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkc1tpXSk7XG4gICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGl0ZW0pKSkge1xuICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGFsbCBpdGVtc1xuICAgICAgaXRlbUlkcyA9IFsuLi50aGlzLl9kYXRhLmtleXMoKV07XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpdGVtSWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaXRlbUlkKTtcbiAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoaXRlbSkpKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9yZGVyIHRoZSByZXN1bHRzXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlciAmJiBpZCA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3NvcnQoaXRlbXMsIG9wdGlvbnMub3JkZXIpO1xuICAgIH1cblxuICAgIC8vIGZpbHRlciBmaWVsZHMgb2YgdGhlIGl0ZW1zXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5maWVsZHMpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IG9wdGlvbnMuZmllbGRzO1xuICAgICAgaWYgKGlkICE9IHVuZGVmaW5lZCAmJiBpdGVtICE9IG51bGwpIHtcbiAgICAgICAgaXRlbSA9IHRoaXMuX2ZpbHRlckZpZWxkcyhpdGVtLCBmaWVsZHMpIGFzIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpdGVtc1tpXSA9IHRoaXMuX2ZpbHRlckZpZWxkcyhpdGVtc1tpXSwgZmllbGRzKSBhcyBGdWxsSXRlbTxcbiAgICAgICAgICAgIEl0ZW0sXG4gICAgICAgICAgICBJZFByb3BcbiAgICAgICAgICA+O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIHRoZSByZXN1bHRzXG4gICAgaWYgKHJldHVyblR5cGUgPT0gXCJPYmplY3RcIikge1xuICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PiA9IHt9O1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdGFudCA9IGl0ZW1zW2ldO1xuICAgICAgICAvLyBAVE9ETzogU2hvdWRuJ3QgdGhpcyBiZSB0aGlzLl9maWVsZElkP1xuICAgICAgICAvLyByZXN1bHRbcmVzdWx0YW50LmlkXSA9IHJlc3VsdGFudFxuICAgICAgICBjb25zdCBpZDogSWQgPSByZXN1bHRhbnRbdGhpcy5faWRQcm9wXTtcbiAgICAgICAgcmVzdWx0W2lkXSA9IHJlc3VsdGFudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgIC8vIGEgc2luZ2xlIGl0ZW1cbiAgICAgICAgcmV0dXJuIGl0ZW0gPz8gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGp1c3QgcmV0dXJuIG91ciBhcnJheVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRJZHMob3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+KTogSWRbXSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICBjb25zdCBvcmRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcjtcbiAgICBjb25zdCBpdGVtSWRzID0gWy4uLmRhdGEua2V5cygpXTtcbiAgICBjb25zdCBpZHM6IElkW10gPSBbXTtcblxuICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgIC8vIGdldCBmaWx0ZXJlZCBpdGVtc1xuICAgICAgaWYgKG9yZGVyKSB7XG4gICAgICAgIC8vIGNyZWF0ZSBvcmRlcmVkIGxpc3RcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmIGZpbHRlcihpdGVtKSkge1xuICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zb3J0KGl0ZW1zLCBvcmRlcik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaWRzLnB1c2goaXRlbXNbaV1bdGhpcy5faWRQcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNyZWF0ZSB1bm9yZGVyZWQgbGlzdFxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgZmlsdGVyKGl0ZW0pKSB7XG4gICAgICAgICAgICBpZHMucHVzaChpdGVtW3RoaXMuX2lkUHJvcF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBnZXQgYWxsIGl0ZW1zXG4gICAgICBpZiAob3JkZXIpIHtcbiAgICAgICAgLy8gY3JlYXRlIGFuIG9yZGVyZWQgbGlzdFxuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgICBpdGVtcy5wdXNoKGRhdGEuZ2V0KGlkKSEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc29ydChpdGVtcywgb3JkZXIpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlkcy5wdXNoKGl0ZW1zW2ldW3RoaXMuX2lkUHJvcF0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgdW5vcmRlcmVkIGxpc3RcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IGRhdGEuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZHMucHVzaChpdGVtW3RoaXMuX2lkUHJvcF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldERhdGFTZXQoKTogRGF0YVNldDxJdGVtLCBJZFByb3A+IHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZm9yRWFjaChcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gdm9pZCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zPEl0ZW0+XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgY29uc3QgaXRlbUlkcyA9IFsuLi5kYXRhLmtleXMoKV07XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyKSB7XG4gICAgICAvLyBleGVjdXRlIGZvckVhY2ggb24gb3JkZXJlZCBsaXN0XG4gICAgICBjb25zdCBpdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gdGhpcy5nZXQob3B0aW9ucyk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgIGNvbnN0IGlkID0gaXRlbVt0aGlzLl9pZFByb3BdO1xuICAgICAgICBjYWxsYmFjayhpdGVtLCBpZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVub3JkZXJlZFxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmICghZmlsdGVyIHx8IGZpbHRlcihpdGVtKSkpIHtcbiAgICAgICAgICBjYWxsYmFjayhpdGVtLCBpZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG1hcDxUPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5cbiAgKTogVFtdIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IG1hcHBlZEl0ZW1zOiBUW10gPSBbXTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICBjb25zdCBpdGVtSWRzID0gWy4uLmRhdGEua2V5cygpXTtcblxuICAgIC8vIGNvbnZlcnQgYW5kIGZpbHRlciBpdGVtc1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoaXRlbSkpKSB7XG4gICAgICAgIG1hcHBlZEl0ZW1zLnB1c2goY2FsbGJhY2soaXRlbSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvcmRlciBpdGVtc1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMub3JkZXIpIHtcbiAgICAgIHRoaXMuX3NvcnQobWFwcGVkSXRlbXMsIG9wdGlvbnMub3JkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXBwZWRJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkczxLIGV4dGVuZHMgc3RyaW5nPihpdGVtOiBudWxsLCBmaWVsZHM6IEtbXSk6IG51bGw7XG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkczxLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpdGVtOiBSZWNvcmQ8SywgdW5rbm93bj4sXG4gICAgZmllbGRzOiBLW11cbiAgKTogUmVjb3JkPEssIHVua25vd24+O1xuICBwcml2YXRlIF9maWx0ZXJGaWVsZHM8SyBleHRlbmRzIHN0cmluZz4oXG4gICAgaXRlbTogUmVjb3JkPEssIHVua25vd24+LFxuICAgIGZpZWxkczogS1tdIHwgUmVjb3JkPEssIHN0cmluZz5cbiAgKTogYW55O1xuICAvKipcbiAgICogRmlsdGVyIHRoZSBmaWVsZHMgb2YgYW4gaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW0gLSBUaGUgaXRlbSB3aG9zZSBmaWVsZHMgc2hvdWxkIGJlIGZpbHRlcmVkLlxuICAgKiBAcGFyYW0gZmllbGRzIC0gVGhlIG5hbWVzIG9mIHRoZSBmaWVsZHMgdGhhdCB3aWxsIGJlIGtlcHQuXG4gICAqIEB0eXBlUGFyYW0gSyAtIEZpZWxkIG5hbWUgdHlwZS5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0gd2l0aG91dCBhbnkgYWRkaXRpb25hbCBmaWVsZHMuXG4gICAqL1xuICBwcml2YXRlIF9maWx0ZXJGaWVsZHM8SyBleHRlbmRzIHN0cmluZz4oXG4gICAgaXRlbTogUmVjb3JkPEssIHVua25vd24+IHwgbnVsbCxcbiAgICBmaWVsZHM6IEtbXSB8IFJlY29yZDxLLCB1bmtub3duPlxuICApOiBSZWNvcmQ8SywgdW5rbm93bj4gfCBudWxsIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIC8vIGl0ZW0gaXMgbnVsbFxuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIEFycmF5LmlzQXJyYXkoZmllbGRzKVxuICAgICAgICA/IC8vIFVzZSB0aGUgc3VwcGxpZWQgYXJyYXlcbiAgICAgICAgICBmaWVsZHNcbiAgICAgICAgOiAvLyBVc2UgdGhlIGtleXMgb2YgdGhlIHN1cHBsaWVkIG9iamVjdFxuICAgICAgICAgIChPYmplY3Qua2V5cyhmaWVsZHMpIGFzIEtbXSlcbiAgICApLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgICAoZmlsdGVyZWRJdGVtLCBmaWVsZCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgICAgICAgZmlsdGVyZWRJdGVtW2ZpZWxkXSA9IGl0ZW1bZmllbGRdO1xuICAgICAgICByZXR1cm4gZmlsdGVyZWRJdGVtO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0IHRoZSBwcm92aWRlZCBhcnJheSB3aXRoIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbXMgLSBJdGVtcyB0byBiZSBzb3J0ZWQgaW4gcGxhY2UuXG4gICAqIEBwYXJhbSBvcmRlciAtIEEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi5cbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGl0ZW1zIGluIHRoZSBpdGVtcyBhcnJheS5cbiAgICovXG4gIHByaXZhdGUgX3NvcnQ8VD4oaXRlbXM6IFRbXSwgb3JkZXI6IERhdGFJbnRlcmZhY2VPcmRlcjxUPik6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygb3JkZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIG9yZGVyIGJ5IHByb3ZpZGVkIGZpZWxkIG5hbWVcbiAgICAgIGNvbnN0IG5hbWUgPSBvcmRlcjsgLy8gZmllbGQgbmFtZVxuICAgICAgaXRlbXMuc29ydCgoYSwgYik6IC0xIHwgMCB8IDEgPT4ge1xuICAgICAgICAvLyBAVE9ETzogSG93IHRvIHRyZWF0IG1pc3NpbmcgcHJvcGVydGllcz9cbiAgICAgICAgY29uc3QgYXYgPSAoYSBhcyBhbnkpW25hbWVdO1xuICAgICAgICBjb25zdCBidiA9IChiIGFzIGFueSlbbmFtZV07XG4gICAgICAgIHJldHVybiBhdiA+IGJ2ID8gMSA6IGF2IDwgYnYgPyAtMSA6IDA7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcmRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAvLyBvcmRlciBieSBzb3J0IGZ1bmN0aW9uXG4gICAgICBpdGVtcy5zb3J0KG9yZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETzogZXh0ZW5kIG9yZGVyIGJ5IGFuIE9iamVjdCB7ZmllbGQ6c3RyaW5nLCBkaXJlY3Rpb246c3RyaW5nfVxuICAgICAgLy8gICAgICAgd2hlcmUgZGlyZWN0aW9uIGNhbiBiZSAnYXNjJyBvciAnZGVzYydcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPcmRlciBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmdcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpdGVtIG9yIG11bHRpcGxlIGl0ZW1zIGJ5IOKAnHJlZmVyZW5jZeKAnSAob25seSB0aGUgaWQgaXMgdXNlZCkgb3IgYnkgaWQuXG4gICAqXG4gICAqIFRoZSBtZXRob2QgaWdub3JlcyByZW1vdmFsIG9mIG5vbi1leGlzdGluZyBpdGVtcywgYW5kIHJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgaWRzIG9mIHRoZSBpdGVtcyB3aGljaCBhcmUgYWN0dWFsbHkgcmVtb3ZlZCBmcm9tIHRoZSBEYXRhU2V0LlxuICAgKlxuICAgKiBBZnRlciB0aGUgaXRlbXMgYXJlIHJlbW92ZWQsIHRoZSBEYXRhU2V0IHdpbGwgdHJpZ2dlciBhbiBldmVudCBgcmVtb3ZlYCBmb3IgdGhlIHJlbW92ZWQgaXRlbXMuIFdoZW4gYSBgc2VuZGVySWRgIGlzIHByb3ZpZGVkLCB0aGlzIGlkIHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIHRyaWdnZXJlZCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gICAqIGNvbnN0IGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQoW1xuICAgKiAgIHsgaWQ6IDEsIHRleHQ6ICdpdGVtIDEnIH0sXG4gICAqICAgeyBpZDogMiwgdGV4dDogJ2l0ZW0gMicgfSxcbiAgICogICB7IGlkOiAzLCB0ZXh0OiAnaXRlbSAzJyB9XG4gICAqIF0pXG4gICAqXG4gICAqIC8vIHJlbW92ZSBpdGVtc1xuICAgKiBjb25zdCBpZHMgPSBkYXRhLnJlbW92ZShbMiwgeyBpZDogMyB9LCA0XSlcbiAgICpcbiAgICogY29uc29sZS5sb2coaWRzKSAvLyBbMiwgM11cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIE9uZSBvciBtb3JlIGl0ZW1zIG9yIGlkcyBvZiBpdGVtcyB0byBiZSByZW1vdmVkLlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIFRoZSBpZHMgb2YgdGhlIHJlbW92ZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlKGlkOiBJZCB8IEl0ZW0gfCAoSWQgfCBJdGVtKVtdLCBzZW5kZXJJZD86IElkIHwgbnVsbCk6IElkW10ge1xuICAgIGNvbnN0IHJlbW92ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCByZW1vdmVkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuXG4gICAgLy8gZm9yY2UgZXZlcnl0aGluZyB0byBiZSBhbiBhcnJheSBmb3Igc2ltcGxpY2l0eVxuICAgIGNvbnN0IGlkcyA9IEFycmF5LmlzQXJyYXkoaWQpID8gaWQgOiBbaWRdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3JlbW92ZShpZHNbaV0pO1xuICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgY29uc3QgaXRlbUlkOiBPcHRJZCA9IGl0ZW1bdGhpcy5faWRQcm9wXTtcbiAgICAgICAgaWYgKGl0ZW1JZCAhPSBudWxsKSB7XG4gICAgICAgICAgcmVtb3ZlZElkcy5wdXNoKGl0ZW1JZCk7XG4gICAgICAgICAgcmVtb3ZlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVtb3ZlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgIFwicmVtb3ZlXCIsXG4gICAgICAgIHsgaXRlbXM6IHJlbW92ZWRJZHMsIG9sZERhdGE6IHJlbW92ZWRJdGVtcyB9LFxuICAgICAgICBzZW5kZXJJZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVtb3ZlZElkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaXRlbSBieSBpdHMgaWQgb3IgcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBJZCBvZiBhbiBpdGVtIG9yIHRoZSBpdGVtIGl0c2VsZi5cbiAgICogQHJldHVybnMgVGhlIHJlbW92ZWQgaXRlbSBpZiByZW1vdmVkLCBudWxsIG90aGVyd2lzZS5cbiAgICovXG4gIHByaXZhdGUgX3JlbW92ZShpZDogSWQgfCBJdGVtKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB8IG51bGwge1xuICAgIC8vIEBUT0RPOiBJdCBvcmlnaWFubGx5IHJldHVybmVkIHRoZSBpdGVtIGFsdGhvdWdoIHRoZSBkb2NzIHNheSBpZC5cbiAgICAvLyBUaGUgY29kZSBleHBlY3RzIHRoZSBpdGVtLCBzbyBwcm9iYWJseSBhbiBlcnJvciBpbiB0aGUgZG9jcy5cbiAgICBsZXQgaWRlbnQ6IE9wdElkO1xuXG4gICAgLy8gY29uZmlybSB0aGUgaWQgdG8gdXNlIGJhc2VkIG9uIHRoZSBhcmdzIHR5cGVcbiAgICBpZiAoaXNJZChpZCkpIHtcbiAgICAgIGlkZW50ID0gaWQ7XG4gICAgfSBlbHNlIGlmIChpZCAmJiB0eXBlb2YgaWQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlkZW50ID0gaWRbdGhpcy5faWRQcm9wXTsgLy8gbG9vayBmb3IgdGhlIGlkZW50aWZpZXIgZmllbGQgdXNpbmcgLl9pZFByb3BcbiAgICB9XG5cbiAgICAvLyBkbyB0aGUgcmVtb3ZpbmcgaWYgdGhlIGl0ZW0gaXMgZm91bmRcbiAgICBpZiAoaWRlbnQgIT0gbnVsbCAmJiB0aGlzLl9kYXRhLmhhcyhpZGVudCkpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZGVudCkgfHwgbnVsbDtcbiAgICAgIHRoaXMuX2RhdGEuZGVsZXRlKGlkZW50KTtcbiAgICAgIC0tdGhpcy5sZW5ndGg7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgZW50aXJlIGRhdGEgc2V0LlxuICAgKlxuICAgKiBBZnRlciB0aGUgaXRlbXMgYXJlIHJlbW92ZWQsIHRoZSB7QGxpbmsgRGF0YVNldH0gd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGByZW1vdmVgIGZvciBhbGwgcmVtb3ZlZCBpdGVtcy4gV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogQHBhcmFtIHNlbmRlcklkIC0gU2VuZGVyIGlkLlxuICAgKiBAcmV0dXJucyByZW1vdmVkSWRzIC0gVGhlIGlkcyBvZiBhbGwgcmVtb3ZlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBjbGVhcihzZW5kZXJJZD86IElkIHwgbnVsbCk6IElkW10ge1xuICAgIGNvbnN0IGlkcyA9IFsuLi50aGlzLl9kYXRhLmtleXMoKV07XG4gICAgY29uc3QgaXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaXRlbXMucHVzaCh0aGlzLl9kYXRhLmdldChpZHNbaV0pISk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YS5jbGVhcigpO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX3RyaWdnZXIoXCJyZW1vdmVcIiwgeyBpdGVtczogaWRzLCBvbGREYXRhOiBpdGVtcyB9LCBzZW5kZXJJZCk7XG5cbiAgICByZXR1cm4gaWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGl0ZW0gd2l0aCBtYXhpbXVtIHZhbHVlIG9mIGEgc3BlY2lmaWVkIGZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZmllbGQgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHNob3VsZCBiZSBzZWFyY2hlZCBmb3IgbWF4IHZhbHVlLlxuICAgKiBAcmV0dXJucyBJdGVtIGNvbnRhaW5pbmcgbWF4IHZhbHVlLCBvciBudWxsIGlmIG5vIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIG1heChmaWVsZDoga2V5b2YgSXRlbSk6IEl0ZW0gfCBudWxsIHtcbiAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICBsZXQgbWF4RmllbGQgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuX2RhdGEudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGl0ZW1GaWVsZCA9IGl0ZW1bZmllbGRdO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgaXRlbUZpZWxkID09PSBcIm51bWJlclwiICYmXG4gICAgICAgIChtYXhGaWVsZCA9PSBudWxsIHx8IGl0ZW1GaWVsZCA+IG1heEZpZWxkKVxuICAgICAgKSB7XG4gICAgICAgIG1heCA9IGl0ZW07XG4gICAgICAgIG1heEZpZWxkID0gaXRlbUZpZWxkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXggfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBpdGVtIHdpdGggbWluaW11bSB2YWx1ZSBvZiBhIHNwZWNpZmllZCBmaWVsZC5cbiAgICpcbiAgICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBzaG91bGQgYmUgc2VhcmNoZWQgZm9yIG1pbiB2YWx1ZS5cbiAgICogQHJldHVybnMgSXRlbSBjb250YWluaW5nIG1pbiB2YWx1ZSwgb3IgbnVsbCBpZiBubyBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBtaW4oZmllbGQ6IGtleW9mIEl0ZW0pOiBJdGVtIHwgbnVsbCB7XG4gICAgbGV0IG1pbiA9IG51bGw7XG4gICAgbGV0IG1pbkZpZWxkID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLl9kYXRhLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBpdGVtRmllbGQgPSBpdGVtW2ZpZWxkXTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGl0ZW1GaWVsZCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAobWluRmllbGQgPT0gbnVsbCB8fCBpdGVtRmllbGQgPCBtaW5GaWVsZClcbiAgICAgICkge1xuICAgICAgICBtaW4gPSBpdGVtO1xuICAgICAgICBtaW5GaWVsZCA9IGl0ZW1GaWVsZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWluIHx8IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZGlzdGluY3Q8VCBleHRlbmRzIGtleW9mIEl0ZW0+KHByb3A6IFQpOiBJdGVtW1RdW107XG4gIHB1YmxpYyBkaXN0aW5jdChwcm9wOiBzdHJpbmcpOiB1bmtub3duW107XG4gIC8qKlxuICAgKiBGaW5kIGFsbCBkaXN0aW5jdCB2YWx1ZXMgb2YgYSBzcGVjaWZpZWQgZmllbGRcbiAgICpcbiAgICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB3aG9zZSBkaXN0aW5jdCB2YWx1ZXMgc2hvdWxkIGJlIHJldHVybmVkLlxuICAgKiBAcmV0dXJucyBVbm9yZGVyZWQgYXJyYXkgY29udGFpbmluZyBhbGwgZGlzdGluY3QgdmFsdWVzLiBJdGVtcyB3aXRob3V0IHNwZWNpZmllZCBwcm9wZXJ0eSBhcmUgaWdub3JlZC5cbiAgICovXG4gIHB1YmxpYyBkaXN0aW5jdDxUIGV4dGVuZHMgc3RyaW5nPihwcm9wOiBUKTogdW5rbm93bltdIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICBjb25zdCBpdGVtSWRzID0gWy4uLmRhdGEua2V5cygpXTtcbiAgICBjb25zdCB2YWx1ZXM6IHVua25vd25bXSA9IFtdO1xuICAgIGxldCBjb3VudCA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgY29uc3QgaXRlbSA9IGRhdGEuZ2V0KGlkKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gKGl0ZW0gYXMgYW55KVtwcm9wXTtcbiAgICAgIGxldCBleGlzdHMgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICBpZiAodmFsdWVzW2pdID09IHZhbHVlKSB7XG4gICAgICAgICAgZXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFleGlzdHMgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZXNbY291bnRdID0gdmFsdWU7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzaW5nbGUgaXRlbS4gV2lsbCBmYWlsIHdoZW4gYW4gaXRlbSB3aXRoIHRoZSBzYW1lIGlkIGFscmVhZHkgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSAtIEEgbmV3IGl0ZW0gdG8gYmUgYWRkZWQuXG4gICAqIEByZXR1cm5zIEFkZGVkIGl0ZW0ncyBpZC4gQW4gaWQgaXMgZ2VuZXJhdGVkIHdoZW4gaXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGl0ZW0uXG4gICAqL1xuICBwcml2YXRlIF9hZGRJdGVtKGl0ZW06IEl0ZW0pOiBJZCB7XG4gICAgY29uc3QgZnVsbEl0ZW0gPSBlbnN1cmVGdWxsSXRlbShpdGVtLCB0aGlzLl9pZFByb3ApO1xuICAgIGNvbnN0IGlkID0gZnVsbEl0ZW1bdGhpcy5faWRQcm9wXTtcblxuICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhpcyBpZCBpcyBhbHJlYWR5IHRha2VuXG4gICAgaWYgKHRoaXMuX2RhdGEuaGFzKGlkKSkge1xuICAgICAgLy8gaXRlbSBhbHJlYWR5IGV4aXN0c1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBhZGQgaXRlbTogaXRlbSB3aXRoIGlkIFwiICsgaWQgKyBcIiBhbHJlYWR5IGV4aXN0c1wiXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGEuc2V0KGlkLCBmdWxsSXRlbSk7XG4gICAgKyt0aGlzLmxlbmd0aDtcblxuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYSBzaW5nbGUgaXRlbTogbWVyZ2Ugd2l0aCBleGlzdGluZyBpdGVtLlxuICAgKiBXaWxsIGZhaWwgd2hlbiB0aGUgaXRlbSBoYXMgbm8gaWQsIG9yIHdoZW4gdGhlcmUgZG9lcyBub3QgZXhpc3QgYW4gaXRlbSB3aXRoIHRoZSBzYW1lIGlkLlxuICAgKlxuICAgKiBAcGFyYW0gdXBkYXRlIC0gVGhlIG5ldyBpdGVtXG4gICAqIEByZXR1cm5zIFRoZSBpZCBvZiB0aGUgdXBkYXRlZCBpdGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlSXRlbSh1cGRhdGU6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4pOiBJZCB7XG4gICAgY29uc3QgaWQ6IE9wdElkID0gdXBkYXRlW3RoaXMuX2lkUHJvcF07XG4gICAgaWYgKGlkID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgdXBkYXRlIGl0ZW06IGl0ZW0gaGFzIG5vIGlkIChpdGVtOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodXBkYXRlKSArXG4gICAgICAgICAgXCIpXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICAvLyBpdGVtIGRvZXNuJ3QgZXhpc3RcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1cGRhdGUgaXRlbTogbm8gaXRlbSB3aXRoIGlkIFwiICsgaWQgKyBcIiBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhLnNldChpZCwgeyAuLi5pdGVtLCAuLi51cGRhdGUgfSk7XG5cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHN0cmVhbShpZHM/OiBJdGVyYWJsZTxJZD4pOiBEYXRhU3RyZWFtPEl0ZW0+IHtcbiAgICBpZiAoaWRzKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcblxuICAgICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtPEl0ZW0+KHtcbiAgICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBJdGVtXT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YS5nZXQoaWQpO1xuICAgICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICB5aWVsZCBbaWQsIGl0ZW1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IERhdGFTdHJlYW0oe1xuICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXTogdGhpcy5fZGF0YS5lbnRyaWVzLmJpbmQodGhpcy5fZGF0YSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiBkZXZlbGJsb2NrOnN0YXJ0ICovXG4gIHB1YmxpYyBnZXQgdGVzdExlYWtEYXRhKCk6IE1hcDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG4gIHB1YmxpYyBnZXQgdGVzdExlYWtJZFByb3AoKTogSWRQcm9wIHtcbiAgICByZXR1cm4gdGhpcy5faWRQcm9wO1xuICB9XG4gIHB1YmxpYyBnZXQgdGVzdExlYWtPcHRpb25zKCk6IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+IHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuICBwdWJsaWMgZ2V0IHRlc3RMZWFrUXVldWUoKTogUXVldWU8dGhpcz4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWU7XG4gIH1cbiAgcHVibGljIHNldCB0ZXN0TGVha1F1ZXVlKHY6IFF1ZXVlPHRoaXM+IHwgbnVsbCkge1xuICAgIHRoaXMuX3F1ZXVlID0gdjtcbiAgfVxuICAvKiBkZXZlbGJsb2NrOmVuZCAqL1xufVxuIiwgImltcG9ydCB7XG4gIERhdGFJbnRlcmZhY2UsXG4gIERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldElkc09wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5LFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdCxcbiAgRGF0YUludGVyZmFjZU1hcE9wdGlvbnMsXG4gIEV2ZW50Q2FsbGJhY2tzV2l0aEFueSxcbiAgRXZlbnROYW1lLFxuICBFdmVudFBheWxvYWRzLFxuICBGdWxsSXRlbSxcbiAgSWQsXG4gIFBhcnRJdGVtLFxuICBSZW1vdmVFdmVudFBheWxvYWQsXG4gIFVwZGF0ZUV2ZW50UGF5bG9hZCxcbiAgaXNJZCxcbn0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcblxuaW1wb3J0IHsgRGF0YVNldCB9IGZyb20gXCIuL2RhdGEtc2V0XCI7XG5pbXBvcnQgeyBEYXRhU2V0UGFydCB9IGZyb20gXCIuL2RhdGEtc2V0LXBhcnRcIjtcbmltcG9ydCB7IERhdGFTdHJlYW0gfSBmcm9tIFwiLi9kYXRhLXN0cmVhbVwiO1xuXG4vKipcbiAqIERhdGEgdmlldyBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFWaWV3T3B0aW9uczxJdGVtLCBJZFByb3AgZXh0ZW5kcyBzdHJpbmc+IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCBjb250YWluaW5nIHRoZSBpZCBvZiB0aGUgaXRlbXMuIFdoZW4gZGF0YSBpcyBmZXRjaGVkIGZyb20gYSBzZXJ2ZXIgd2hpY2ggdXNlcyBzb21lIHNwZWNpZmljIGZpZWxkIHRvIGlkZW50aWZ5IGl0ZW1zLCB0aGlzIGZpZWxkIG5hbWUgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgRGF0YVNldCB1c2luZyB0aGUgb3B0aW9uIGBmaWVsZElkYC4gRm9yIGV4YW1wbGUgW0NvdWNoREJdKGh0dHA6Ly9jb3VjaGRiLmFwYWNoZS5vcmcvKSB1c2VzIHRoZSBmaWVsZCBgJ19pZCdgIHRvIGlkZW50aWZ5IGRvY3VtZW50cy5cbiAgICovXG4gIGZpZWxkSWQ/OiBJZFByb3A7XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xufVxuXG4vKipcbiAqIERhdGFWaWV3XG4gKlxuICogQSBEYXRhVmlldyBvZmZlcnMgYSBmaWx0ZXJlZCBhbmQvb3IgZm9ybWF0dGVkIHZpZXcgb24gYSBEYXRhU2V0LiBPbmUgY2FuIHN1YnNjcmliZSB0byBjaGFuZ2VzIGluIGEgRGF0YVZpZXcsIGFuZCBlYXNpbHkgZ2V0IGZpbHRlcmVkIG9yIGZvcm1hdHRlZCBkYXRhIHdpdGhvdXQgaGF2aW5nIHRvIHNwZWNpZnkgZmlsdGVycyBhbmQgZmllbGQgdHlwZXMgYWxsIHRoZSB0aW1lLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqIGBgYGphdmFzY3JpcHRcbiAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAqIHZhciBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KCk7XG4gKiBkYXRhLmFkZChbXG4gKiAgIHtpZDogMSwgdGV4dDogJ2l0ZW0gMScsIGRhdGU6IG5ldyBEYXRlKDIwMTMsIDYsIDIwKSwgZ3JvdXA6IDEsIGZpcnN0OiB0cnVlfSxcbiAqICAge2lkOiAyLCB0ZXh0OiAnaXRlbSAyJywgZGF0ZTogJzIwMTMtMDYtMjMnLCBncm91cDogMn0sXG4gKiAgIHtpZDogMywgdGV4dDogJ2l0ZW0gMycsIGRhdGU6ICcyMDEzLTA2LTI1JywgZ3JvdXA6IDJ9LFxuICogICB7aWQ6IDQsIHRleHQ6ICdpdGVtIDQnfVxuICogXSk7XG4gKlxuICogLy8gY3JlYXRlIGEgRGF0YVZpZXdcbiAqIC8vIHRoZSB2aWV3IHdpbGwgb25seSBjb250YWluIGl0ZW1zIGhhdmluZyBhIHByb3BlcnR5IGdyb3VwIHdpdGggdmFsdWUgMSxcbiAqIC8vIGFuZCB3aWxsIG9ubHkgb3V0cHV0IGZpZWxkcyBpZCwgdGV4dCwgYW5kIGRhdGUuXG4gKiB2YXIgdmlldyA9IG5ldyB2aXMuRGF0YVZpZXcoZGF0YSwge1xuICogICBmaWx0ZXI6IGZ1bmN0aW9uIChpdGVtKSB7XG4gKiAgICAgcmV0dXJuIChpdGVtLmdyb3VwID09IDEpO1xuICogICB9LFxuICogICBmaWVsZHM6IFsnaWQnLCAndGV4dCcsICdkYXRlJ11cbiAqIH0pO1xuICpcbiAqIC8vIHN1YnNjcmliZSB0byBhbnkgY2hhbmdlIGluIHRoZSBEYXRhVmlld1xuICogdmlldy5vbignKicsIGZ1bmN0aW9uIChldmVudCwgcHJvcGVydGllcywgc2VuZGVySWQpIHtcbiAqICAgY29uc29sZS5sb2coJ2V2ZW50JywgZXZlbnQsIHByb3BlcnRpZXMpO1xuICogfSk7XG4gKlxuICogLy8gdXBkYXRlIGFuIGl0ZW0gaW4gdGhlIGRhdGEgc2V0XG4gKiBkYXRhLnVwZGF0ZSh7aWQ6IDIsIGdyb3VwOiAxfSk7XG4gKlxuICogLy8gZ2V0IGFsbCBpZHMgaW4gdGhlIHZpZXdcbiAqIHZhciBpZHMgPSB2aWV3LmdldElkcygpO1xuICogY29uc29sZS5sb2coJ2lkcycsIGlkcyk7IC8vIHdpbGwgb3V0cHV0IFsxLCAyXVxuICpcbiAqIC8vIGdldCBhbGwgaXRlbXMgaW4gdGhlIHZpZXdcbiAqIHZhciBpdGVtcyA9IHZpZXcuZ2V0KCk7XG4gKiBgYGBcbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFWaWV3PFxuICAgIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICAgIElkUHJvcCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuICA+XG4gIGV4dGVuZHMgRGF0YVNldFBhcnQ8SXRlbSwgSWRQcm9wPlxuICBpbXBsZW1lbnRzIERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPlxue1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGxlbmd0aCA9IDA7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0IGlkUHJvcCgpOiBJZFByb3Age1xuICAgIHJldHVybiB0aGlzLmdldERhdGFTZXQoKS5pZFByb3A7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcjogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdO1xuICBwcml2YXRlIF9kYXRhITogRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+OyAvLyBjb25zdHJ1Y3RvciDihpIgc2V0RGF0YVxuICBwcml2YXRlIHJlYWRvbmx5IF9pZHM6IFNldDxJZD4gPSBuZXcgU2V0KCk7IC8vIGlkcyBvZiB0aGUgaXRlbXMgY3VycmVudGx5IGluIG1lbW9yeSAoanVzdCBjb250YWlucyBhIGJvb2xlYW4gdHJ1ZSlcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogRGF0YVZpZXdPcHRpb25zPEl0ZW0sIElkUHJvcD47XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGFWaWV3LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBpbnN0YW5jZSBjb250YWluaW5nIGRhdGEgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIHRoaXMgZGF0YSB2aWV3LlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIGRhdGE6IERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPixcbiAgICBvcHRpb25zPzogRGF0YVZpZXdPcHRpb25zPEl0ZW0sIElkUHJvcD5cbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgdGhpcy5fbGlzdGVuZXIgPSB0aGlzLl9vbkV2ZW50LmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnNldERhdGEoZGF0YSk7XG4gIH1cblxuICAvLyBUT0RPOiBpbXBsZW1lbnQgYSBmdW5jdGlvbiAuY29uZmlnKCkgdG8gZHluYW1pY2FsbHkgdXBkYXRlIHRoaW5ncyBsaWtlIGNvbmZpZ3VyZWQgZmlsdGVyXG4gIC8vIGFuZCB0cmlnZ2VyIGNoYW5nZXMgYWNjb3JkaW5nbHlcblxuICAvKipcbiAgICogU2V0IGEgZGF0YSBzb3VyY2UgZm9yIHRoZSB2aWV3LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBpbnN0YW5jZSBjb250YWluaW5nIGRhdGEgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpLlxuICAgKiBAcmVtYXJrc1xuICAgKiBOb3RlIHRoYXQgd2hlbiB0aGUgZGF0YSB2aWV3IGlzIGJvdW5kIHRvIGEgZGF0YSBzZXQgaXQgd29uJ3QgYmUgZ2FyYmFnZVxuICAgKiBjb2xsZWN0ZWQgdW5sZXNzIHRoZSBkYXRhIHNldCBpcyB0b28uIFVzZSBgZGF0YVZpZXcuc2V0RGF0YShudWxsKWAgb3JcbiAgICogYGRhdGFWaWV3LmRpc3Bvc2UoKWAgdG8gZW5hYmxlIGdhcmJhZ2UgY29sbGVjdGlvbiBiZWZvcmUgeW91IGxvc2UgdGhlIGxhc3RcbiAgICogcmVmZXJlbmNlLlxuICAgKi9cbiAgcHVibGljIHNldERhdGEoZGF0YTogRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICAgIC8vIHVuc3Vic2NyaWJlIGZyb20gY3VycmVudCBkYXRhc2V0XG4gICAgICBpZiAodGhpcy5fZGF0YS5vZmYpIHtcbiAgICAgICAgdGhpcy5fZGF0YS5vZmYoXCIqXCIsIHRoaXMuX2xpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gdHJpZ2dlciBhIHJlbW92ZSBvZiBhbGwgaXRlbXMgaW4gbWVtb3J5XG4gICAgICBjb25zdCBpZHMgPSB0aGlzLl9kYXRhLmdldElkcyh7IGZpbHRlcjogdGhpcy5fb3B0aW9ucy5maWx0ZXIgfSk7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2RhdGEuZ2V0KGlkcyk7XG5cbiAgICAgIHRoaXMuX2lkcy5jbGVhcigpO1xuICAgICAgdGhpcy5sZW5ndGggPSAwO1xuICAgICAgdGhpcy5fdHJpZ2dlcihcInJlbW92ZVwiLCB7IGl0ZW1zOiBpZHMsIG9sZERhdGE6IGl0ZW1zIH0pO1xuICAgIH1cblxuICAgIGlmIChkYXRhICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuXG4gICAgICAvLyB0cmlnZ2VyIGFuIGFkZCBvZiBhbGwgYWRkZWQgaXRlbXNcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuX2RhdGEuZ2V0SWRzKHsgZmlsdGVyOiB0aGlzLl9vcHRpb25zLmZpbHRlciB9KTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgIHRoaXMuX2lkcy5hZGQoaWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5sZW5ndGggPSBpZHMubGVuZ3RoO1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBpZHMgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEgPSBuZXcgRGF0YVNldDxJdGVtLCBJZFByb3A+KCk7XG4gICAgfVxuXG4gICAgLy8gc3Vic2NyaWJlIHRvIG5ldyBkYXRhc2V0XG4gICAgaWYgKHRoaXMuX2RhdGEub24pIHtcbiAgICAgIHRoaXMuX2RhdGEub24oXCIqXCIsIHRoaXMuX2xpc3RlbmVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgRGF0YVZpZXcuXG4gICAqIFVzZWZ1bCB3aGVuIHRoZSBEYXRhVmlldyBoYXMgYSBmaWx0ZXIgZnVuY3Rpb24gY29udGFpbmluZyBhIHZhcmlhYmxlIHBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyByZWZyZXNoKCk6IHZvaWQge1xuICAgIGNvbnN0IGlkcyA9IHRoaXMuX2RhdGEuZ2V0SWRzKHtcbiAgICAgIGZpbHRlcjogdGhpcy5fb3B0aW9ucy5maWx0ZXIsXG4gICAgfSk7XG4gICAgY29uc3Qgb2xkSWRzID0gWy4uLnRoaXMuX2lkc107XG4gICAgY29uc3QgbmV3SWRzOiBSZWNvcmQ8SWQsIGJvb2xlYW4+ID0ge307XG4gICAgY29uc3QgYWRkZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCByZW1vdmVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcblxuICAgIC8vIGNoZWNrIGZvciBhZGRpdGlvbnNcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgIG5ld0lkc1tpZF0gPSB0cnVlO1xuICAgICAgaWYgKCF0aGlzLl9pZHMuaGFzKGlkKSkge1xuICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgdGhpcy5faWRzLmFkZChpZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9yIHJlbW92YWxzXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG9sZElkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBvbGRJZHNbaV07XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkge1xuICAgICAgICAvLyBAVE9ETzogSW52ZXN0aWdhdGUuXG4gICAgICAgIC8vIERvZXNuJ3QgaGFwcGVuIGR1cmluZyB0ZXN0cyBvciBleGFtcGxlcy5cbiAgICAgICAgLy8gSXMgaXQgcmVhbGx5IGltcG9zc2libGUgb3IgY291bGQgaXQgZXZlbnR1YWxseSBoYXBwZW4/XG4gICAgICAgIC8vIEhvdyB0byBoYW5kbGUgaXQgaWYgaXQgZG9lcz8gVGhlIHR5cGVzIGd1YXJhbnRlZSBub24tbnVsbGFibGUgaXRlbXMuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJZiB5b3Ugc2VlIHRoaXMsIHJlcG9ydCBpdCBwbGVhc2UuXCIpO1xuICAgICAgfSBlbHNlIGlmICghbmV3SWRzW2lkXSkge1xuICAgICAgICByZW1vdmVkSWRzLnB1c2goaWQpO1xuICAgICAgICByZW1vdmVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgdGhpcy5faWRzLmRlbGV0ZShpZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggKz0gYWRkZWRJZHMubGVuZ3RoIC0gcmVtb3ZlZElkcy5sZW5ndGg7XG5cbiAgICAvLyB0cmlnZ2VyIGV2ZW50c1xuICAgIGlmIChhZGRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogYWRkZWRJZHMgfSk7XG4gICAgfVxuICAgIGlmIChyZW1vdmVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcInJlbW92ZVwiLCB7IGl0ZW1zOiByZW1vdmVkSWRzLCBvbGREYXRhOiByZW1vdmVkSXRlbXMgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoaWQ6IElkKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoaWRzOiBJZFtdKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZCB8IElkW10sXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6XG4gICAgfCBudWxsXG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+XG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W11cbiAgICB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgZmlyc3Q/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiB8IElkIHwgSWRbXSxcbiAgICBzZWNvbmQ/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8c3RyaW5nLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PiB7XG4gICAgaWYgKHRoaXMuX2RhdGEgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gcGFyc2UgdGhlIGFyZ3VtZW50c1xuICAgIGxldCBpZHM6IElkIHwgSWRbXSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBvcHRpb25zOiBhbnk7XG4gICAgaWYgKGlzSWQoZmlyc3QpIHx8IEFycmF5LmlzQXJyYXkoZmlyc3QpKSB7XG4gICAgICBpZHMgPSBmaXJzdDtcbiAgICAgIG9wdGlvbnMgPSBzZWNvbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMgPSBmaXJzdDtcbiAgICB9XG5cbiAgICAvLyBleHRlbmQgdGhlIG9wdGlvbnMgd2l0aCB0aGUgZGVmYXVsdCBvcHRpb25zIGFuZCBwcm92aWRlZCBvcHRpb25zXG4gICAgY29uc3Qgdmlld09wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgdGhpcy5fb3B0aW9ucyxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuXG4gICAgLy8gY3JlYXRlIGEgY29tYmluZWQgZmlsdGVyIG1ldGhvZCB3aGVuIG5lZWRlZFxuICAgIGNvbnN0IHRoaXNGaWx0ZXIgPSB0aGlzLl9vcHRpb25zLmZpbHRlcjtcbiAgICBjb25zdCBvcHRpb25zRmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICBpZiAodGhpc0ZpbHRlciAmJiBvcHRpb25zRmlsdGVyKSB7XG4gICAgICB2aWV3T3B0aW9ucy5maWx0ZXIgPSAoaXRlbSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICByZXR1cm4gdGhpc0ZpbHRlcihpdGVtKSAmJiBvcHRpb25zRmlsdGVyKGl0ZW0pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaWRzID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kYXRhLmdldCh2aWV3T3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9kYXRhLmdldChpZHMsIHZpZXdPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldElkcyhvcHRpb25zPzogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT4pOiBJZFtdIHtcbiAgICBpZiAodGhpcy5fZGF0YS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSB0aGlzLl9vcHRpb25zLmZpbHRlcjtcbiAgICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXIgPSBvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmZpbHRlciA6IG51bGw7XG4gICAgICBsZXQgZmlsdGVyOiBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9uczxJdGVtPltcImZpbHRlclwiXTtcblxuICAgICAgaWYgKG9wdGlvbnNGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXIpIHtcbiAgICAgICAgICBmaWx0ZXIgPSAoaXRlbSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGaWx0ZXIoaXRlbSkgJiYgb3B0aW9uc0ZpbHRlcihpdGVtKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbHRlciA9IG9wdGlvbnNGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9kYXRhLmdldElkcyh7XG4gICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICBvcmRlcjogb3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGZvckVhY2goXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPlxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IHRoaXMuX29wdGlvbnMuZmlsdGVyO1xuICAgICAgY29uc3Qgb3B0aW9uc0ZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgICBsZXQgZmlsdGVyOiB1bmRlZmluZWQgfCAoKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW4pO1xuXG4gICAgICBpZiAob3B0aW9uc0ZpbHRlcikge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgIGZpbHRlciA9IGZ1bmN0aW9uIChpdGVtOiBJdGVtKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZpbHRlcihpdGVtKSAmJiBvcHRpb25zRmlsdGVyKGl0ZW0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVyID0gb3B0aW9uc0ZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZGF0YS5mb3JFYWNoKGNhbGxiYWNrLCB7XG4gICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICBvcmRlcjogb3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBtYXA8VD4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IFQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VNYXBPcHRpb25zPEl0ZW0sIFQ+XG4gICk6IFRbXSB7XG4gICAgdHlwZSBGaWx0ZXIgPSBOb25OdWxsYWJsZTxEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxJdGVtLCBUPltcImZpbHRlclwiXT47XG5cbiAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IHRoaXMuX29wdGlvbnMuZmlsdGVyO1xuICAgICAgY29uc3Qgb3B0aW9uc0ZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgICBsZXQgZmlsdGVyOiB1bmRlZmluZWQgfCBGaWx0ZXI7XG5cbiAgICAgIGlmIChvcHRpb25zRmlsdGVyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgZmlsdGVyID0gKGl0ZW0pOiBSZXR1cm5UeXBlPEZpbHRlcj4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGaWx0ZXIoaXRlbSkgJiYgb3B0aW9uc0ZpbHRlcihpdGVtKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbHRlciA9IG9wdGlvbnNGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9kYXRhLm1hcChjYWxsYmFjaywge1xuICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgb3JkZXI6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXREYXRhU2V0KCk6IERhdGFTZXQ8SXRlbSwgSWRQcm9wPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0RGF0YVNldCgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdHJlYW0oaWRzPzogSXRlcmFibGU8SWQ+KTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuc3RyZWFtKFxuICAgICAgaWRzIHx8IHtcbiAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06IHRoaXMuX2lkcy5rZXlzLmJpbmQodGhpcy5faWRzKSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgaW5zdGFuY2UgdW51c2FibGUgcHJpb3IgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgaW50ZW50aW9uIG9mIHRoaXMgbWV0aG9kIGlzIHRvIGhlbHAgZGlzY292ZXIgc2NlbmFyaW9zIHdoZXJlIHRoZSBkYXRhXG4gICAqIHZpZXcgaXMgYmVpbmcgdXNlZCB3aGVuIHRoZSBwcm9ncmFtbWVyIHRoaW5rcyBpdCBoYXMgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZFxuICAgKiBhbHJlYWR5LiBJdCdzIHN0cmljdGVyIHZlcnNpb24gb2YgYGRhdGFWaWV3LnNldERhdGEobnVsbClgLlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RhdGE/Lm9mZikge1xuICAgICAgdGhpcy5fZGF0YS5vZmYoXCIqXCIsIHRoaXMuX2xpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gXCJUaGlzIGRhdGEgdmlldyBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9mLlwiO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50ID0ge1xuICAgICAgZ2V0OiAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0sXG4gICAgICBzZXQ6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfSxcblxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICB9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhEYXRhVmlldy5wcm90b3R5cGUpKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCByZXBsYWNlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGxpc3RlbmVyLiBXaWxsIHByb3BhZ2F0ZSBhbGwgZXZlbnRzIGZyb20gdGhlIGNvbm5lY3RlZCBkYXRhIHNldCB0byB0aGUgc3Vic2NyaWJlcnMgb2YgdGhlIERhdGFWaWV3LCBidXQgd2lsbCBmaWx0ZXIgdGhlIGl0ZW1zIGFuZCBvbmx5IHRyaWdnZXIgd2hlbiB0aGVyZSBhcmUgY2hhbmdlcyBpbiB0aGUgZmlsdGVyZWQgZGF0YSBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBJZCBzdXBwbGllZCBieSB0aGUgc2VuZGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBfb25FdmVudDxFTiBleHRlbmRzIEV2ZW50TmFtZT4oXG4gICAgZXZlbnQ6IEVOLFxuICAgIHBhcmFtczogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W0VOXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLml0ZW1zIHx8ICF0aGlzLl9kYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaWRzID0gcGFyYW1zLml0ZW1zO1xuICAgIGNvbnN0IGFkZGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgdXBkYXRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCBvbGRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG4gICAgY29uc3QgdXBkYXRlZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBjb25zdCByZW1vdmVkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuXG4gICAgc3dpdGNoIChldmVudCkge1xuICAgICAgY2FzZSBcImFkZFwiOlxuICAgICAgICAvLyBmaWx0ZXIgdGhlIGlkcyBvZiB0aGUgYWRkZWQgaXRlbXNcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldChpZCk7XG4gICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuX2lkcy5hZGQoaWQpO1xuICAgICAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcbiAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBldmVudCBmcm9tIHRoZSB2aWV3cyB2aWV3cG9pbnQ6IGFuIHVwZGF0ZWRcbiAgICAgICAgLy8gaXRlbSBjYW4gYmUgYWRkZWQsIHVwZGF0ZWQsIG9yIHJlbW92ZWQgZnJvbSB0aGlzIHZpZXcuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXQoaWQpO1xuXG4gICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgICB1cGRhdGVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgICAgICB1cGRhdGVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAocGFyYW1zIGFzIFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+KS5kYXRhW2ldXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIG9sZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgKHBhcmFtcyBhcyBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPikub2xkRGF0YVtpXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5faWRzLmFkZChpZCk7XG4gICAgICAgICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5faWRzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgIHJlbW92ZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgICAgIHJlbW92ZWRJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgIChwYXJhbXMgYXMgVXBkYXRlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4pLm9sZERhdGFbaV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIG5vdGhpbmcgaW50ZXJlc3RpbmcgZm9yIG1lIDotKFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwicmVtb3ZlXCI6XG4gICAgICAgIC8vIGZpbHRlciB0aGUgaWRzIG9mIHRoZSByZW1vdmVkIGl0ZW1zXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICBpZiAodGhpcy5faWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2lkcy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgcmVtb3ZlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgIHJlbW92ZWRJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAocGFyYW1zIGFzIFJlbW92ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+KS5vbGREYXRhW2ldXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoICs9IGFkZGVkSWRzLmxlbmd0aCAtIHJlbW92ZWRJZHMubGVuZ3RoO1xuXG4gICAgaWYgKGFkZGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBhZGRlZElkcyB9LCBzZW5kZXJJZCk7XG4gICAgfVxuICAgIGlmICh1cGRhdGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgXCJ1cGRhdGVcIixcbiAgICAgICAgeyBpdGVtczogdXBkYXRlZElkcywgb2xkRGF0YTogb2xkSXRlbXMsIGRhdGE6IHVwZGF0ZWRJdGVtcyB9LFxuICAgICAgICBzZW5kZXJJZFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJlbW92ZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICBcInJlbW92ZVwiLFxuICAgICAgICB7IGl0ZW1zOiByZW1vdmVkSWRzLCBvbGREYXRhOiByZW1vdmVkSXRlbXMgfSxcbiAgICAgICAgc2VuZGVySWRcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgUGFydEl0ZW0gfSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuaW1wb3J0IHsgRGF0YVNldCB9IGZyb20gXCIuL2RhdGEtc2V0XCI7XG5cbi8qKlxuICogQ2hlY2sgdGhhdCBnaXZlbiB2YWx1ZSBpcyBjb21wYXRpYmxlIHdpdGggVmlzIERhdGEgU2V0IGludGVyZmFjZS5cbiAqXG4gKiBAcGFyYW0gaWRQcm9wIC0gVGhlIGV4cGVjdGVkIHByb3BlcnR5IHRvIGNvbnRhaW4gaXRlbSBpZC5cbiAqIEBwYXJhbSB2IC0gVGhlIHZhbHVlIHRvIGJlIHRlc3RlZC5cbiAqIEByZXR1cm5zIFRydWUgaWYgYWxsIGV4cGVjdGVkIHZhbHVlcyBhbmQgbWV0aG9kcyBtYXRjaCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhU2V0TGlrZTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPihpZFByb3A6IElkUHJvcCwgdjogYW55KTogdiBpcyBEYXRhU2V0PEl0ZW0sIElkUHJvcD4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgdiAhPT0gbnVsbCAmJlxuICAgIGlkUHJvcCA9PT0gdi5pZFByb3AgJiZcbiAgICB0eXBlb2Ygdi5hZGQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmNsZWFyID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5kaXN0aW5jdCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZm9yRWFjaCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXREYXRhU2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXRJZHMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiB2Lm1hcCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYubWF4ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5taW4gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm9mZiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYub24gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnJlbW92ZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuc2V0T3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuc3RyZWFtID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi51cGRhdGUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnVwZGF0ZU9ubHkgPT09IFwiZnVuY3Rpb25cIlxuICApO1xufVxuIiwgImltcG9ydCB7IERhdGFWaWV3IH0gZnJvbSBcIi4vZGF0YS12aWV3XCI7XG5pbXBvcnQgeyBQYXJ0SXRlbSB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBpc0RhdGFTZXRMaWtlIH0gZnJvbSBcIi4vZGF0YS1zZXQtY2hlY2tcIjtcblxuLyoqXG4gKiBDaGVjayB0aGF0IGdpdmVuIHZhbHVlIGlzIGNvbXBhdGlibGUgd2l0aCBWaXMgRGF0YSBWaWV3IGludGVyZmFjZS5cbiAqXG4gKiBAcGFyYW0gaWRQcm9wIC0gVGhlIGV4cGVjdGVkIHByb3BlcnR5IHRvIGNvbnRhaW4gaXRlbSBpZC5cbiAqIEBwYXJhbSB2IC0gVGhlIHZhbHVlIHRvIGJlIHRlc3RlZC5cbiAqIEByZXR1cm5zIFRydWUgaWYgYWxsIGV4cGVjdGVkIHZhbHVlcyBhbmQgbWV0aG9kcyBtYXRjaCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhVmlld0xpa2U8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4oaWRQcm9wOiBJZFByb3AsIHY6IGFueSk6IHYgaXMgRGF0YVZpZXc8SXRlbSwgSWRQcm9wPiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiZcbiAgICB2ICE9PSBudWxsICYmXG4gICAgaWRQcm9wID09PSB2LmlkUHJvcCAmJlxuICAgIHR5cGVvZiB2LmZvckVhY2ggPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0RGF0YVNldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0SWRzID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICB0eXBlb2Ygdi5tYXAgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm9mZiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYub24gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnN0cmVhbSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgaXNEYXRhU2V0TGlrZShpZFByb3AsIHYuZ2V0RGF0YVNldCgpKVxuICApO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCB0aGlzIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG4gIC8vIE5hc2hvcm4gYnVnOlxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTI4XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMzBcbiAgaWYgKGNsYXNzb2ZSYXcoZm4pID09PSAnRnVuY3Rpb24nKSByZXR1cm4gdW5jdXJyeVRoaXMoZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgSVNfSFRNTEREQSA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWxsOiBkb2N1bWVudEFsbCxcbiAgSVNfSFRNTEREQTogSVNfSFRNTEREQVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJGRvY3VtZW50QWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCcpO1xuXG52YXIgZG9jdW1lbnRBbGwgPSAkZG9jdW1lbnRBbGwuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbm1vZHVsZS5leHBvcnRzID0gJGRvY3VtZW50QWxsLklTX0hUTUxEREEgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbC5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgJGRvY3VtZW50QWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCcpO1xuXG52YXIgZG9jdW1lbnRBbGwgPSAkZG9jdW1lbnRBbGwuYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRkb2N1bWVudEFsbC5JU19IVE1MRERBID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpIHx8IGl0ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodmFyaWFibGUpID8gdmFyaWFibGUgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24ocGF0aFtuYW1lc3BhY2VdKSB8fCBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pXG4gICAgOiBwYXRoW25hbWVzcGFjZV0gJiYgcGF0aFtuYW1lc3BhY2VdW21ldGhvZF0gfHwgZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIG5hdmlnYXRvciAhPSAndW5kZWZpbmVkJyAmJiBTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzMuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDIzIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzMuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgYmluZCA9IHVuY3VycnlUaGlzKHVuY3VycnlUaGlzLmJpbmQpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0KSB7XG4gIGFDYWxsYWJsZShmbik7XG4gIHJldHVybiB0aGF0ID09PSB1bmRlZmluZWQgPyBmbiA6IE5BVElWRV9CSU5EID8gYmluZChmbiwgdGhhdCkgOiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciB3cmFwQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoTmF0aXZlQ29uc3RydWN0b3IpIHtcbiAgdmFyIFdyYXBwZXIgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgV3JhcHBlcikge1xuICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhLCBiKTtcbiAgICAgIH0gcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhLCBiLCBjKTtcbiAgICB9IHJldHVybiBhcHBseShOYXRpdmVDb25zdHJ1Y3RvciwgdGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgV3JhcHBlci5wcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBXcmFwcGVyO1xufTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIFBST1RPID0gb3B0aW9ucy5wcm90bztcblxuICB2YXIgbmF0aXZlU291cmNlID0gR0xPQkFMID8gZ2xvYmFsIDogU1RBVElDID8gZ2xvYmFsW1RBUkdFVF0gOiAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcblxuICB2YXIgdGFyZ2V0ID0gR0xPQkFMID8gcGF0aCA6IHBhdGhbVEFSR0VUXSB8fCBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVEFSR0VULCB7fSlbVEFSR0VUXTtcbiAgdmFyIHRhcmdldFByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG5cbiAgdmFyIEZPUkNFRCwgVVNFX05BVElWRSwgVklSVFVBTF9QUk9UT1RZUEU7XG4gIHZhciBrZXksIHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSwgbmF0aXZlUHJvcGVydHksIHJlc3VsdFByb3BlcnR5LCBkZXNjcmlwdG9yO1xuXG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgVVNFX05BVElWRSA9ICFGT1JDRUQgJiYgbmF0aXZlU291cmNlICYmIGhhc093bihuYXRpdmVTb3VyY2UsIGtleSk7XG5cbiAgICB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUpIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hdGl2ZVNvdXJjZSwga2V5KTtcbiAgICAgIG5hdGl2ZVByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSBuYXRpdmVQcm9wZXJ0eSA9IG5hdGl2ZVNvdXJjZVtrZXldO1xuXG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBpbXBsZW1lbnRhdGlvblxuICAgIHNvdXJjZVByb3BlcnR5ID0gKFVTRV9OQVRJVkUgJiYgbmF0aXZlUHJvcGVydHkpID8gbmF0aXZlUHJvcGVydHkgOiBzb3VyY2Vba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFICYmIHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSA9PSB0eXBlb2Ygc291cmNlUHJvcGVydHkpIGNvbnRpbnVlO1xuXG4gICAgLy8gYmluZCBtZXRob2RzIHRvIGdsb2JhbCBmb3IgY2FsbGluZyBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgaWYgKG9wdGlvbnMuYmluZCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IGJpbmQoc291cmNlUHJvcGVydHksIGdsb2JhbCk7XG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uXG4gICAgZWxzZSBpZiAob3B0aW9ucy53cmFwICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gd3JhcENvbnN0cnVjdG9yKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICBlbHNlIGlmIChQUk9UTyAmJiBpc0NhbGxhYmxlKHNvdXJjZVByb3BlcnR5KSkgcmVzdWx0UHJvcGVydHkgPSB1bmN1cnJ5VGhpcyhzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gZGVmYXVsdCBjYXNlXG4gICAgZWxzZSByZXN1bHRQcm9wZXJ0eSA9IHNvdXJjZVByb3BlcnR5O1xuXG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHNvdXJjZVByb3BlcnR5ICYmIHNvdXJjZVByb3BlcnR5LnNoYW0pIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdFByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cblxuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgcmVzdWx0UHJvcGVydHkpO1xuXG4gICAgaWYgKFBST1RPKSB7XG4gICAgICBWSVJUVUFMX1BST1RPVFlQRSA9IFRBUkdFVCArICdQcm90b3R5cGUnO1xuICAgICAgaWYgKCFoYXNPd24ocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUpKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSwge30pO1xuICAgICAgfVxuICAgICAgLy8gZXhwb3J0IHZpcnR1YWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoW1ZJUlRVQUxfUFJPVE9UWVBFXSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICAvLyBleHBvcnQgcmVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgaWYgKG9wdGlvbnMucmVhbCAmJiB0YXJnZXRQcm90b3R5cGUgJiYgKEZPUkNFRCB8fCAhdGFyZ2V0UHJvdG90eXBlW2tleV0pKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXRQcm90b3R5cGUsIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gc2FmZVxudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHNob3VsZCBoYXZlIGNvcnJlY3Qgb3JkZXIgb2Ygb3BlcmF0aW9ucyAoRWRnZSBidWcpXG4gIGlmIChERVNDUklQVE9SUyAmJiAkYXNzaWduKHsgYjogMSB9LCAkYXNzaWduKGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgJ2InLCB7XG4gICAgICAgIHZhbHVlOiAzLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9KSwgeyBiOiAyIH0pKS5iICE9PSAxKSByZXR1cm4gdHJ1ZTtcbiAgLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zeW1ib2wgLS0gc2FmZVxuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdhc3NpZ24gZGV0ZWN0aW9uJyk7XG4gIHZhciBhbHBoYWJldCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbc3ltYm9sXSA9IDc7XG4gIGFscGhhYmV0LnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChjaHIpIHsgQltjaHJdID0gY2hyOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW3N5bWJvbF0gIT09IDcgfHwgb2JqZWN0S2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT09IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQob2JqZWN0S2V5cyhTKSwgZ2V0T3duUHJvcGVydHlTeW1ib2xzKFMpKSA6IG9iamVjdEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwocHJvcGVydHlJc0VudW1lcmFibGUsIFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgYXJpdHk6IDIsIGZvcmNlZDogT2JqZWN0LmFzc2lnbiAhPT0gYXNzaWduIH0sIHtcbiAgYXNzaWduOiBhc3NpZ25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmFzc2lnbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChDLCBhcmdzTGVuZ3RoLCBhcmdzKSB7XG4gIGlmICghaGFzT3duKGZhY3RvcmllcywgYXJnc0xlbmd0aCkpIHtcbiAgICB2YXIgbGlzdCA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IGFyZ3NMZW5ndGg7IGkrKykgbGlzdFtpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIGZhY3Rvcmllc1thcmdzTGVuZ3RoXSA9ICRGdW5jdGlvbignQyxhJywgJ3JldHVybiBuZXcgQygnICsgam9pbihsaXN0LCAnLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2FyZ3NMZW5ndGhdKEMsIGFyZ3MpO1xufTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBkZXRlY3Rpb25cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyAkRnVuY3Rpb24uYmluZCA6IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIEYgPSBhQ2FsbGFibGUodGhpcyk7XG4gIHZhciBQcm90b3R5cGUgPSBGLnByb3RvdHlwZTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJvdW5kKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IGNvbmNhdChwYXJ0QXJncywgYXJyYXlTbGljZShhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kRnVuY3Rpb24gPyBjb25zdHJ1Y3QoRiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogRi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KFByb3RvdHlwZSkpIGJvdW5kRnVuY3Rpb24ucHJvdG90eXBlID0gUHJvdG90eXBlO1xuICByZXR1cm4gYm91bmRGdW5jdGlvbjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxuJCh7IHRhcmdldDogJ0Z1bmN0aW9uJywgcHJvdG86IHRydWUsIGZvcmNlZDogRnVuY3Rpb24uYmluZCAhPT0gYmluZCB9LCB7XG4gIGJpbmQ6IGJpbmRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1IpIHtcbiAgcmV0dXJuIHBhdGhbQ09OU1RSVUNUT1IgKyAnUHJvdG90eXBlJ107XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdGdW5jdGlvbicpLmJpbmQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9uL3ZpcnR1YWwvYmluZCcpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5iaW5kO1xuICByZXR1cm4gaXQgPT09IEZ1bmN0aW9uUHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEZ1bmN0aW9uUHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBGdW5jdGlvblByb3RvdHlwZS5iaW5kKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9iaW5kXCIpOyIsICIvKipcbiAqIERyYXcgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0NpcmNsZShcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICByOiBudW1iZXJcbik6IHZvaWQge1xuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5hcmMoeCwgeSwgciwgMCwgMiAqIE1hdGguUEksIGZhbHNlKTtcbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG4vKipcbiAqIERyYXcgYSBzcXVhcmUuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gSGFsZiBvZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgc3F1YXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd1NxdWFyZShcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICByOiBudW1iZXJcbik6IHZvaWQge1xuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5yZWN0KHggLSByLCB5IC0gciwgciAqIDIsIHIgKiAyKTtcbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG4vKipcbiAqIERyYXcgYW4gZXF1aWxhdGVyYWwgdHJpYW5nbGUgc3RhbmRpbmcgb24gYSBzaWRlLlxuICpcbiAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGlzIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgdG8uXG4gKiBAcGFyYW0geCAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0geSAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB5IGF4aXMuXG4gKiBAcGFyYW0gciAtIEhhbGYgb2YgdGhlIGxlbmd0aCBvZiB0aGUgc2lkZXMuXG4gKiBAcmVtYXJrc1xuICogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FcXVpbGF0ZXJhbF90cmlhbmdsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd1RyaWFuZ2xlKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcblxuICAvLyB0aGUgY2hhbmdlIGluIHJhZGl1cyBhbmQgdGhlIG9mZnNldCBpcyBoZXJlIHRvIGNlbnRlciB0aGUgc2hhcGVcbiAgciAqPSAxLjE1O1xuICB5ICs9IDAuMjc1ICogcjtcblxuICBjb25zdCBzID0gciAqIDI7XG4gIGNvbnN0IHMyID0gcyAvIDI7XG4gIGNvbnN0IGlyID0gKE1hdGguc3FydCgzKSAvIDYpICogczsgLy8gcmFkaXVzIG9mIGlubmVyIGNpcmNsZVxuICBjb25zdCBoID0gTWF0aC5zcXJ0KHMgKiBzIC0gczIgKiBzMik7IC8vIGhlaWdodFxuXG4gIGN0eC5tb3ZlVG8oeCwgeSAtIChoIC0gaXIpKTtcbiAgY3R4LmxpbmVUbyh4ICsgczIsIHkgKyBpcik7XG4gIGN0eC5saW5lVG8oeCAtIHMyLCB5ICsgaXIpO1xuICBjdHgubGluZVRvKHgsIHkgLSAoaCAtIGlyKSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGFuIGVxdWlsYXRlcmFsIHRyaWFuZ2xlIHN0YW5kaW5nIG9uIGEgdmVydGV4LlxuICpcbiAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGlzIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgdG8uXG4gKiBAcGFyYW0geCAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0geSAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB5IGF4aXMuXG4gKiBAcGFyYW0gciAtIEhhbGYgb2YgdGhlIGxlbmd0aCBvZiB0aGUgc2lkZXMuXG4gKiBAcmVtYXJrc1xuICogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FcXVpbGF0ZXJhbF90cmlhbmdsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd1RyaWFuZ2xlRG93bihcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICByOiBudW1iZXJcbik6IHZvaWQge1xuICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgLy8gdGhlIGNoYW5nZSBpbiByYWRpdXMgYW5kIHRoZSBvZmZzZXQgaXMgaGVyZSB0byBjZW50ZXIgdGhlIHNoYXBlXG4gIHIgKj0gMS4xNTtcbiAgeSAtPSAwLjI3NSAqIHI7XG5cbiAgY29uc3QgcyA9IHIgKiAyO1xuICBjb25zdCBzMiA9IHMgLyAyO1xuICBjb25zdCBpciA9IChNYXRoLnNxcnQoMykgLyA2KSAqIHM7IC8vIHJhZGl1cyBvZiBpbm5lciBjaXJjbGVcbiAgY29uc3QgaCA9IE1hdGguc3FydChzICogcyAtIHMyICogczIpOyAvLyBoZWlnaHRcblxuICBjdHgubW92ZVRvKHgsIHkgKyAoaCAtIGlyKSk7XG4gIGN0eC5saW5lVG8oeCArIHMyLCB5IC0gaXIpO1xuICBjdHgubGluZVRvKHggLSBzMiwgeSAtIGlyKTtcbiAgY3R4LmxpbmVUbyh4LCB5ICsgKGggLSBpcikpO1xuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhIHN0YXIuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gVGhlIG91dGVyIHJhZGl1cyBvZiB0aGUgc3Rhci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYXdTdGFyKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIC8vIGh0dHA6Ly93d3cuaHRtbDVjYW52YXN0dXRvcmlhbHMuY29tL2xhYnMvaHRtbDUtY2FudmFzLXN0YXItc3Bpbm5lci9cbiAgY3R4LmJlZ2luUGF0aCgpO1xuXG4gIC8vIHRoZSBjaGFuZ2UgaW4gcmFkaXVzIGFuZCB0aGUgb2Zmc2V0IGlzIGhlcmUgdG8gY2VudGVyIHRoZSBzaGFwZVxuICByICo9IDAuODI7XG4gIHkgKz0gMC4xICogcjtcblxuICBmb3IgKGxldCBuID0gMDsgbiA8IDEwOyBuKyspIHtcbiAgICBjb25zdCByYWRpdXMgPSBuICUgMiA9PT0gMCA/IHIgKiAxLjMgOiByICogMC41O1xuICAgIGN0eC5saW5lVG8oXG4gICAgICB4ICsgcmFkaXVzICogTWF0aC5zaW4oKG4gKiAyICogTWF0aC5QSSkgLyAxMCksXG4gICAgICB5IC0gcmFkaXVzICogTWF0aC5jb3MoKG4gKiAyICogTWF0aC5QSSkgLyAxMClcbiAgICApO1xuICB9XG5cbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG4vKipcbiAqIERyYXcgYSBkaWFtb25kLlxuICpcbiAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGlzIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgdG8uXG4gKiBAcGFyYW0geCAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0geSAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB5IGF4aXMuXG4gKiBAcGFyYW0gciAtIEhhbGYgb2YgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGRpYW1vbmQuXG4gKiBAcmVtYXJrc1xuICogaHR0cDovL3d3dy5odG1sNWNhbnZhc3R1dG9yaWFscy5jb20vbGFicy9odG1sNS1jYW52YXMtc3Rhci1zcGlubmVyL1xuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0RpYW1vbmQoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY3R4LmJlZ2luUGF0aCgpO1xuXG4gIGN0eC5saW5lVG8oeCwgeSArIHIpO1xuICBjdHgubGluZVRvKHggKyByLCB5KTtcbiAgY3R4LmxpbmVUbyh4LCB5IC0gcik7XG4gIGN0eC5saW5lVG8oeCAtIHIsIHkpO1xuXG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGEgcmVjdGFuZ2xlIHdpdGggcm91bmRlZCBjb3JuZXJzLlxuICpcbiAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGlzIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgdG8uXG4gKiBAcGFyYW0geCAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0geSAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB5IGF4aXMuXG4gKiBAcGFyYW0gdyAtIFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLlxuICogQHBhcmFtIGggLSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUuXG4gKiBAcGFyYW0gciAtIFRoZSByYWRpdXMgb2YgdGhlIGNvcm5lcnMuXG4gKiBAcmVtYXJrc1xuICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMjU1NTEyL2hvdy10by1kcmF3LWEtcm91bmRlZC1yZWN0YW5nbGUtb24taHRtbC1jYW52YXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYXdSb3VuZFJlY3QoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgdzogbnVtYmVyLFxuICBoOiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGNvbnN0IHIyZCA9IE1hdGguUEkgLyAxODA7XG4gIGlmICh3IC0gMiAqIHIgPCAwKSB7XG4gICAgciA9IHcgLyAyO1xuICB9IC8vZW5zdXJlIHRoYXQgdGhlIHJhZGl1cyBpc24ndCB0b28gbGFyZ2UgZm9yIHhcbiAgaWYgKGggLSAyICogciA8IDApIHtcbiAgICByID0gaCAvIDI7XG4gIH0gLy9lbnN1cmUgdGhhdCB0aGUgcmFkaXVzIGlzbid0IHRvbyBsYXJnZSBmb3IgeVxuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5tb3ZlVG8oeCArIHIsIHkpO1xuICBjdHgubGluZVRvKHggKyB3IC0gciwgeSk7XG4gIGN0eC5hcmMoeCArIHcgLSByLCB5ICsgciwgciwgcjJkICogMjcwLCByMmQgKiAzNjAsIGZhbHNlKTtcbiAgY3R4LmxpbmVUbyh4ICsgdywgeSArIGggLSByKTtcbiAgY3R4LmFyYyh4ICsgdyAtIHIsIHkgKyBoIC0gciwgciwgMCwgcjJkICogOTAsIGZhbHNlKTtcbiAgY3R4LmxpbmVUbyh4ICsgciwgeSArIGgpO1xuICBjdHguYXJjKHggKyByLCB5ICsgaCAtIHIsIHIsIHIyZCAqIDkwLCByMmQgKiAxODAsIGZhbHNlKTtcbiAgY3R4LmxpbmVUbyh4LCB5ICsgcik7XG4gIGN0eC5hcmMoeCArIHIsIHkgKyByLCByLCByMmQgKiAxODAsIHIyZCAqIDI3MCwgZmFsc2UpO1xuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhbiBlbGxpcHNlLlxuICpcbiAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGlzIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgdG8uXG4gKiBAcGFyYW0geCAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0geSAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB5IGF4aXMuXG4gKiBAcGFyYW0gdyAtIFRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzZS5cbiAqIEBwYXJhbSBoIC0gVGhlIGhlaWdodCBvZiB0aGUgZWxsaXBzZS5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcbiAqXG4gKiBQb3N0Zml4ICdfdmlzJyBhZGRlZCB0byBkaXNjZXJuIGl0IGZyb20gc3RhbmRhcmQgbWV0aG9kIGVsbGlwc2UoKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYXdFbGxpcHNlKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHc6IG51bWJlcixcbiAgaDogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY29uc3Qga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICB4ZSA9IHggKyB3LCAvLyB4LWVuZFxuICAgIHllID0geSArIGgsIC8vIHktZW5kXG4gICAgeG0gPSB4ICsgdyAvIDIsIC8vIHgtbWlkZGxlXG4gICAgeW0gPSB5ICsgaCAvIDI7IC8vIHktbWlkZGxlXG5cbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBjdHgubW92ZVRvKHgsIHltKTtcbiAgY3R4LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgY3R4LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhbiBpc29tZXRyaWMgY3lsaW5kZXIuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSB3IC0gVGhlIHdpZHRoIG9mIHRoZSBkYXRhYmFzZS5cbiAqIEBwYXJhbSBoIC0gVGhlIGhlaWdodCBvZiB0aGUgZGF0YWJhc2UuXG4gKiBAcmVtYXJrc1xuICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RGF0YWJhc2UoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgdzogbnVtYmVyLFxuICBoOiBudW1iZXJcbik6IHZvaWQge1xuICBjb25zdCBmID0gMSAvIDM7XG4gIGNvbnN0IHdFbGxpcHNlID0gdztcbiAgY29uc3QgaEVsbGlwc2UgPSBoICogZjtcblxuICBjb25zdCBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICBveCA9ICh3RWxsaXBzZSAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICBveSA9IChoRWxsaXBzZSAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgeGUgPSB4ICsgd0VsbGlwc2UsIC8vIHgtZW5kXG4gICAgeWUgPSB5ICsgaEVsbGlwc2UsIC8vIHktZW5kXG4gICAgeG0gPSB4ICsgd0VsbGlwc2UgLyAyLCAvLyB4LW1pZGRsZVxuICAgIHltID0geSArIGhFbGxpcHNlIC8gMiwgLy8geS1taWRkbGVcbiAgICB5bWIgPSB5ICsgKGggLSBoRWxsaXBzZSAvIDIpLCAvLyB5LW1pZGxsZSwgYm90dG9tIGVsbGlwc2VcbiAgICB5ZWIgPSB5ICsgaDsgLy8geS1lbmQsIGJvdHRvbSBlbGxpcHNlXG5cbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBjdHgubW92ZVRvKHhlLCB5bSk7XG5cbiAgY3R4LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuXG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgY3R4LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG5cbiAgY3R4LmxpbmVUbyh4ZSwgeW1iKTtcblxuICBjdHguYmV6aWVyQ3VydmVUbyh4ZSwgeW1iICsgb3ksIHhtICsgb3gsIHllYiwgeG0sIHllYik7XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllYiwgeCwgeW1iICsgb3ksIHgsIHltYik7XG5cbiAgY3R4LmxpbmVUbyh4LCB5bSk7XG59XG5cbi8qKlxuICogRHJhdyBhIGRhc2hlZCBsaW5lLlxuICpcbiAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGlzIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgdG8uXG4gKiBAcGFyYW0geCAtIFRoZSBzdGFydCBwb3NpdGlvbiBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgc3RhcnQgcG9zaXRpb24gb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSB4MiAtIFRoZSBlbmQgcG9zaXRpb24gb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5MiAtIFRoZSBlbmQgcG9zaXRpb24gb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSBwYXR0ZXJuIC0gTGlzdCBvZiBsZW5ndGhzIHN0YXJ0aW5nIHdpdGggbGluZSBhbmQgdGhlbiBhbHRlcm5hdGluZyBiZXR3ZWVuIHNwYWNlIGFuZCBsaW5lLlxuICogQGF1dGhvciBEYXZpZCBKb3JkYW5cbiAqIEByZW1hcmtzXG4gKiBkYXRlIDIwMTItMDgtMDhcbiAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDU3NjcyNC9kb3R0ZWQtc3Ryb2tlLWluLWNhbnZhc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0Rhc2hlZExpbmUoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgeDI6IG51bWJlcixcbiAgeTI6IG51bWJlcixcbiAgcGF0dGVybjogbnVtYmVyW11cbik6IHZvaWQge1xuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5tb3ZlVG8oeCwgeSk7XG5cbiAgY29uc3QgcGF0dGVybkxlbmd0aCA9IHBhdHRlcm4ubGVuZ3RoO1xuICBjb25zdCBkeCA9IHgyIC0geDtcbiAgY29uc3QgZHkgPSB5MiAtIHk7XG4gIGNvbnN0IHNsb3BlID0gZHkgLyBkeDtcbiAgbGV0IGRpc3RSZW1haW5pbmcgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICBsZXQgcGF0dGVybkluZGV4ID0gMDtcbiAgbGV0IGRyYXcgPSB0cnVlO1xuICBsZXQgeFN0ZXAgPSAwO1xuICBsZXQgZGFzaExlbmd0aCA9ICtwYXR0ZXJuWzBdO1xuXG4gIHdoaWxlIChkaXN0UmVtYWluaW5nID49IDAuMSkge1xuICAgIGRhc2hMZW5ndGggPSArcGF0dGVybltwYXR0ZXJuSW5kZXgrKyAlIHBhdHRlcm5MZW5ndGhdO1xuICAgIGlmIChkYXNoTGVuZ3RoID4gZGlzdFJlbWFpbmluZykge1xuICAgICAgZGFzaExlbmd0aCA9IGRpc3RSZW1haW5pbmc7XG4gICAgfVxuXG4gICAgeFN0ZXAgPSBNYXRoLnNxcnQoKGRhc2hMZW5ndGggKiBkYXNoTGVuZ3RoKSAvICgxICsgc2xvcGUgKiBzbG9wZSkpO1xuICAgIHhTdGVwID0gZHggPCAwID8gLXhTdGVwIDogeFN0ZXA7XG4gICAgeCArPSB4U3RlcDtcbiAgICB5ICs9IHNsb3BlICogeFN0ZXA7XG5cbiAgICBpZiAoZHJhdyA9PT0gdHJ1ZSkge1xuICAgICAgY3R4LmxpbmVUbyh4LCB5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICB9XG5cbiAgICBkaXN0UmVtYWluaW5nIC09IGRhc2hMZW5ndGg7XG4gICAgZHJhdyA9ICFkcmF3O1xuICB9XG59XG5cbi8qKlxuICogRHJhdyBhIGhleGFnb24uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gVGhlIHJhZGl1cyBvZiB0aGUgaGV4YWdvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYXdIZXhhZ29uKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY29uc3Qgc2lkZXMgPSA2O1xuICBjb25zdCBhID0gKE1hdGguUEkgKiAyKSAvIHNpZGVzO1xuICBjdHgubW92ZVRvKHggKyByLCB5KTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBzaWRlczsgaSsrKSB7XG4gICAgY3R4LmxpbmVUbyh4ICsgciAqIE1hdGguY29zKGEgKiBpKSwgeSArIHIgKiBNYXRoLnNpbihhICogaSkpO1xuICB9XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuY29uc3Qgc2hhcGVNYXAgPSB7XG4gIGNpcmNsZTogZHJhd0NpcmNsZSxcbiAgZGFzaGVkTGluZTogZHJhd0Rhc2hlZExpbmUsXG4gIGRhdGFiYXNlOiBkcmF3RGF0YWJhc2UsXG4gIGRpYW1vbmQ6IGRyYXdEaWFtb25kLFxuICBlbGxpcHNlOiBkcmF3RWxsaXBzZSxcbiAgZWxsaXBzZV92aXM6IGRyYXdFbGxpcHNlLFxuICBoZXhhZ29uOiBkcmF3SGV4YWdvbixcbiAgcm91bmRSZWN0OiBkcmF3Um91bmRSZWN0LFxuICBzcXVhcmU6IGRyYXdTcXVhcmUsXG4gIHN0YXI6IGRyYXdTdGFyLFxuICB0cmlhbmdsZTogZHJhd1RyaWFuZ2xlLFxuICB0cmlhbmdsZURvd246IGRyYXdUcmlhbmdsZURvd24sXG59O1xuXG4vKipcbiAqIFJldHVybnMgZWl0aGVyIGN1c3RvbSBvciBuYXRpdmUgZHJhd2luZyBmdW5jdGlvbiBiYXNlIG9uIHN1cHBsaWVkIG5hbWUuXG4gKlxuICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24uIEVpdGhlciB0aGUgbmFtZSBvZiBhXG4gKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgcHJvcGVydHkgb3IgYW4gZXhwb3J0IGZyb20gc2hhcGVzLnRzIHdpdGhvdXQgdGhlXG4gKiBkcmF3IHByZWZpeC5cbiAqIEByZXR1cm5zIFRoZSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGZvciByZW5kZXJpbmcuIEluIGNhc2Ugb2YgbmF0aXZlXG4gKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgZnVuY3Rpb24gdGhlIEFQSSBpcyBub3JtYWxpemVkIHRvXG4gKiBgKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCAuLi5vcmlnaW5hbEFyZ3MpID0+IHZvaWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hhcGUoXG4gIG5hbWU6IGtleW9mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IGtleW9mIHR5cGVvZiBzaGFwZU1hcFxuKTogYW55IHtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzaGFwZU1hcCwgbmFtZSkpIHtcbiAgICByZXR1cm4gKHNoYXBlTWFwIGFzIGFueSlbbmFtZV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgIChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlIGFzIGFueSlbbmFtZV0uY2FsbChjdHgsIGFyZ3MpO1xuICAgIH07XG4gIH1cbn1cbiIsICJcclxuLyoqXHJcbiAqIEV4cG9zZSBgRW1pdHRlcmAuXHJcbiAqL1xyXG5cclxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgbW9kdWxlLmV4cG9ydHMgPSBFbWl0dGVyO1xyXG59XHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZSBhIG5ldyBgRW1pdHRlcmAuXHJcbiAqXHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gRW1pdHRlcihvYmopIHtcclxuICBpZiAob2JqKSByZXR1cm4gbWl4aW4ob2JqKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNaXhpbiB0aGUgZW1pdHRlciBwcm9wZXJ0aWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXHJcbiAqIEByZXR1cm4ge09iamVjdH1cclxuICogQGFwaSBwcml2YXRlXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gbWl4aW4ob2JqKSB7XHJcbiAgZm9yICh2YXIga2V5IGluIEVtaXR0ZXIucHJvdG90eXBlKSB7XHJcbiAgICBvYmpba2V5XSA9IEVtaXR0ZXIucHJvdG90eXBlW2tleV07XHJcbiAgfVxyXG4gIHJldHVybiBvYmo7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMaXN0ZW4gb24gdGhlIGdpdmVuIGBldmVudGAgd2l0aCBgZm5gLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cclxuICogQHJldHVybiB7RW1pdHRlcn1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5FbWl0dGVyLnByb3RvdHlwZS5vbiA9XHJcbkVtaXR0ZXIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgZm4pe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuICAodGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSA9IHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF0gfHwgW10pXHJcbiAgICAucHVzaChmbik7XHJcbiAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBgZXZlbnRgIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBpbnZva2VkIGEgc2luZ2xlXHJcbiAqIHRpbWUgdGhlbiBhdXRvbWF0aWNhbGx5IHJlbW92ZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxyXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbihldmVudCwgZm4pe1xyXG4gIGZ1bmN0aW9uIG9uKCkge1xyXG4gICAgdGhpcy5vZmYoZXZlbnQsIG9uKTtcclxuICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgfVxyXG5cclxuICBvbi5mbiA9IGZuO1xyXG4gIHRoaXMub24oZXZlbnQsIG9uKTtcclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgdGhlIGdpdmVuIGNhbGxiYWNrIGZvciBgZXZlbnRgIG9yIGFsbFxyXG4gKiByZWdpc3RlcmVkIGNhbGxiYWNrcy5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXHJcbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuRW1pdHRlci5wcm90b3R5cGUub2ZmID1cclxuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxyXG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxyXG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQsIGZuKXtcclxuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XHJcblxyXG4gIC8vIGFsbFxyXG4gIGlmICgwID09IGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9O1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyBzcGVjaWZpYyBldmVudFxyXG4gIHZhciBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdO1xyXG4gIGlmICghY2FsbGJhY2tzKSByZXR1cm4gdGhpcztcclxuXHJcbiAgLy8gcmVtb3ZlIGFsbCBoYW5kbGVyc1xyXG4gIGlmICgxID09IGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyByZW1vdmUgc3BlY2lmaWMgaGFuZGxlclxyXG4gIHZhciBjYjtcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgY2IgPSBjYWxsYmFja3NbaV07XHJcbiAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xyXG4gICAgICBjYWxsYmFja3Muc3BsaWNlKGksIDEpO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFJlbW92ZSBldmVudCBzcGVjaWZpYyBhcnJheXMgZm9yIGV2ZW50IHR5cGVzIHRoYXQgbm9cclxuICAvLyBvbmUgaXMgc3Vic2NyaWJlZCBmb3IgdG8gYXZvaWQgbWVtb3J5IGxlYWsuXHJcbiAgaWYgKGNhbGxiYWNrcy5sZW5ndGggPT09IDApIHtcclxuICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogRW1pdCBgZXZlbnRgIHdpdGggdGhlIGdpdmVuIGFyZ3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcGFyYW0ge01peGVkfSAuLi5cclxuICogQHJldHVybiB7RW1pdHRlcn1cclxuICovXHJcblxyXG5FbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24oZXZlbnQpe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuXHJcbiAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpXHJcbiAgICAsIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcblxyXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcclxuICB9XHJcblxyXG4gIGlmIChjYWxsYmFja3MpIHtcclxuICAgIGNhbGxiYWNrcyA9IGNhbGxiYWNrcy5zbGljZSgwKTtcclxuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBjYWxsYmFja3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcclxuICAgICAgY2FsbGJhY2tzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJuIGFycmF5IG9mIGNhbGxiYWNrcyBmb3IgYGV2ZW50YC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEByZXR1cm4ge0FycmF5fVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uKGV2ZW50KXtcclxuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XHJcbiAgcmV0dXJuIHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF0gfHwgW107XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdGhpcyBlbWl0dGVyIGhhcyBgZXZlbnRgIGhhbmRsZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHJldHVybiB7Qm9vbGVhbn1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5FbWl0dGVyLnByb3RvdHlwZS5oYXNMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudCl7XHJcbiAgcmV0dXJuICEhIHRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGg7XHJcbn07XHJcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9ICRPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9ICFpc09iamVjdChJdGVyYXRvclByb3RvdHlwZSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdGVzdCA9IHt9O1xuICAvLyBGRjQ0LSBsZWdhY3kgaXRlcmF0b3JzIGNhc2VcbiAgcmV0dXJuIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXS5jYWxsKHRlc3QpICE9PSB0ZXN0O1xufSk7XG5cbmlmIChORVdfSVRFUkFUT1JfUFJPVE9UWVBFKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1AQGl0ZXJhdG9yXG5pZiAoIWlzQ2FsbGFibGUoSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICBkZWZpbmVCdWlsdEluKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gJE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyAkT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzT3duKG9iamVjdCwgSUVfUFJPVE8pKSByZXR1cm4gb2JqZWN0W0lFX1BST1RPXTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBpZiAoaXNDYWxsYWJsZShjb25zdHJ1Y3RvcikgJiYgb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiAkT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW51bWVyYWJsZSkgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVEFHLCBTVEFUSUMsIFNFVF9NRVRIT0QpIHtcbiAgaWYgKGl0KSB7XG4gICAgdmFyIHRhcmdldCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gICAgfVxuICAgIGlmIChTRVRfTUVUSE9EICYmICFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsICd0b1N0cmluZycsIHRvU3RyaW5nKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQsIEVOVU1FUkFCTEVfTkVYVCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCshRU5VTUVSQUJMRV9ORVhULCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKHR5cGVvZiBhcmd1bWVudCA9PSAnb2JqZWN0JyB8fCBpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LXNldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgc2V0dGVyID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJywgJ3NldCcpO1xuICAgIHNldHRlcih0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuXG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvciwgeyBuYW1lOiBERUZBVUxUIH0pO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYENyZWF0ZUl0ZXJSZXN1bHRPYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVpdGVycmVzdWx0b2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IGRvbmUgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcblxudmFyIFNUUklOR19JVEVSQVRPUiA9ICdTdHJpbmcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1RSSU5HX0lURVJBVE9SKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLUBAaXRlcmF0b3JcbmRlZmluZUl0ZXJhdG9yKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTVFJJTkdfSVRFUkFUT1IsXG4gICAgc3RyaW5nOiB0b1N0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXN0cmluZ2l0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc3RyaW5nID0gc3RhdGUuc3RyaW5nO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleDtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocG9pbnQsIGZhbHNlKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBlbXB0eSA9IFtdO1xudmFyIGNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgY29uc3RydWN0b3JSZWdFeHAgPSAvXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKTtcbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gIWNvbnN0cnVjdG9yUmVnRXhwLnRlc3Qobm9vcCk7XG5cbnZhciBpc0NvbnN0cnVjdG9yTW9kZXJuID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3RydWN0KG5vb3AsIGVtcHR5LCBhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgaXNDb25zdHJ1Y3RvckxlZ2FjeSA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGNsYXNzb2YoYXJndW1lbnQpKSB7XG4gICAgY2FzZSAnQXN5bmNGdW5jdGlvbic6XG4gICAgY2FzZSAnR2VuZXJhdG9yRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nOiByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyB3ZSBjYW4ndCBjaGVjayAucHJvdG90eXBlIHNpbmNlIGNvbnN0cnVjdG9ycyBwcm9kdWNlZCBieSAuYmluZCBoYXZlbid0IGl0XG4gICAgLy8gYEZ1bmN0aW9uI3RvU3RyaW5nYCB0aHJvd3Mgb24gc29tZSBidWlsdC1pdCBmdW5jdGlvbiBpbiBzb21lIGxlZ2FjeSBlbmdpbmVzXG4gICAgLy8gKGZvciBleGFtcGxlLCBgRE9NUXVhZGAgYW5kIHNpbWlsYXIgaW4gRkY0MS0pXG4gICAgcmV0dXJuIElOQ09SUkVDVF9UT19TVFJJTkcgfHwgISFleGVjKGNvbnN0cnVjdG9yUmVnRXhwLCBpbnNwZWN0U291cmNlKGFyZ3VtZW50KSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmlzQ29uc3RydWN0b3JMZWdhY3kuc2hhbSA9IHRydWU7XG5cbi8vIGBJc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSAhY29uc3RydWN0IHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNhbGxlZDtcbiAgcmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKE9iamVjdClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRydWU7IH0pXG4gICAgfHwgY2FsbGVkO1xufSkgPyBpc0NvbnN0cnVjdG9yTGVnYWN5IDogaXNDb25zdHJ1Y3Rvck1vZGVybjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgcHJvcGVydHlLZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChwcm9wZXJ0eUtleSBpbiBvYmplY3QpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBwcm9wZXJ0eUtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W3Byb3BlcnR5S2V5XSA9IHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgcmV0dXJuIGdldE1ldGhvZChpdCwgSVRFUkFUT1IpXG4gICAgfHwgZ2V0TWV0aG9kKGl0LCAnQEBpdGVyYXRvcicpXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCB1c2luZ0l0ZXJhdG9yKSB7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gZ2V0SXRlcmF0b3JNZXRob2QoYXJndW1lbnQpIDogdXNpbmdJdGVyYXRvcjtcbiAgaWYgKGFDYWxsYWJsZShpdGVyYXRvck1ldGhvZCkpIHJldHVybiBhbk9iamVjdChjYWxsKGl0ZXJhdG9yTWV0aG9kLCBhcmd1bWVudCkpO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gIHZhciBJU19DT05TVFJVQ1RPUiA9IGlzQ29uc3RydWN0b3IodGhpcyk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWFwZm4gPSBhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gIGlmIChtYXBwaW5nKSBtYXBmbiA9IGJpbmQobWFwZm4sIGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBnZXRJdGVyYXRvck1ldGhvZChPKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvciwgbmV4dCwgdmFsdWU7XG4gIC8vIGlmIHRoZSB0YXJnZXQgaXMgbm90IGl0ZXJhYmxlIG9yIGl0J3MgYW4gYXJyYXkgd2l0aCB0aGUgZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBhIHNpbXBsZSBjYXNlXG4gIGlmIChpdGVyYXRvck1ldGhvZCAmJiAhKHRoaXMgPT09ICRBcnJheSAmJiBpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlcmF0b3JNZXRob2QpKSkge1xuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoTywgaXRlcmF0b3JNZXRob2QpO1xuICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMoKSA6IFtdO1xuICAgIGZvciAoOyEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKGxlbmd0aCkgOiAkQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgY2FsbGVkID0gMDtcbiAgdmFyIGl0ZXJhdG9yV2l0aFJldHVybiA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBkb25lOiAhIWNhbGxlZCsrIH07XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKCkge1xuICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIGl0ZXJhdG9yV2l0aFJldHVybltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBuby10aHJvdy1saXRlcmFsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmF0b3JXaXRoUmV0dXJuLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBTS0lQX0NMT1NJTkcpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IHJldHVybiBmYWxzZTsgfSAvLyB3b3JrYXJvdW5kIG9mIG9sZCBXZWJLaXQgKyBgZXZhbGAgYnVnXG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mcm9tJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xuXG52YXIgSU5DT1JSRUNUX0lURVJBVElPTiA9ICFjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmFibGUpO1xufSk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxuJCh7IHRhcmdldDogJ0FycmF5Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgZnJvbTogZnJvbVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZnJvbScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguQXJyYXkuZnJvbTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvYXJyYXkvZnJvbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2Zyb21cIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoaW5kZXgsIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh0YXJnZXRbaW5kZXhdLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZmFsc2UpO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG52YXIgdmFsdWVzID0gSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDQ1LSBidWdcbmlmICghSVNfUFVSRSAmJiBERVNDUklQVE9SUyAmJiB2YWx1ZXMubmFtZSAhPT0gJ3ZhbHVlcycpIHRyeSB7XG4gIGRlZmluZVByb3BlcnR5KHZhbHVlcywgJ25hbWUnLCB7IHZhbHVlOiAndmFsdWVzJyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvck1ldGhvZDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSAmJiBjbGFzc29mKENvbGxlY3Rpb25Qcm90b3R5cGUpICE9PSBUT19TVFJJTkdfVEFHKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIENPTExFQ1RJT05fTkFNRSk7XG4gIH1cbiAgSXRlcmF0b3JzW0NPTExFQ1RJT05fTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL2VzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Z1bGwvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kXCIpOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAhPT0gZGVmaW5lUHJvcGVydHksIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnR5OiBkZWZpbmVQcm9wZXJ0eVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5LnNoYW0pIGRlZmluZVByb3BlcnR5LnNoYW0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIGxlbik7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgMSk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICB2YXIgcmVzdWx0ID0gJEFycmF5KG1heChmaW4gLSBrLCAwKSk7XG4gIHZhciBuID0gMDtcbiAgZm9yICg7IGsgPCBmaW47IGsrKywgbisrKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICByZXN1bHQubGVuZ3RoID0gbjtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZSAqL1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUnKTtcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGFycmF5U2xpY2Uod2luZG93TmFtZXMpO1xuICB9XG59O1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgY2xhc3NvZihpdCkgPT09ICdXaW5kb3cnXG4gICAgPyBnZXRXaW5kb3dOYW1lcyhpdClcbiAgICA6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG5leHBvcnRzLmYgPSB3ZWxsS25vd25TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgdmFyIFN5bWJvbCA9IHBhdGguU3ltYm9sIHx8IChwYXRoLlN5bWJvbCA9IHt9KTtcbiAgaWYgKCFoYXNPd24oU3ltYm9sLCBOQU1FKSkgZGVmaW5lUHJvcGVydHkoU3ltYm9sLCBOQU1FLCB7XG4gICAgdmFsdWU6IHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZihOQU1FKVxuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgdmFyIFN5bWJvbFByb3RvdHlwZSA9IFN5bWJvbCAmJiBTeW1ib2wucHJvdG90eXBlO1xuICB2YXIgdmFsdWVPZiA9IFN5bWJvbFByb3RvdHlwZSAmJiBTeW1ib2xQcm90b3R5cGUudmFsdWVPZjtcbiAgdmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuICBpZiAoU3ltYm9sUHJvdG90eXBlICYmICFTeW1ib2xQcm90b3R5cGVbVE9fUFJJTUlUSVZFXSkge1xuICAgIC8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgLmxlbmd0aFxuICAgIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCBUT19QUklNSVRJVkUsIGZ1bmN0aW9uIChoaW50KSB7XG4gICAgICByZXR1cm4gY2FsbCh2YWx1ZU9mLCB0aGlzKTtcbiAgICB9LCB7IGFyaXR5OiAxIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlclJlamVjdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9SRUpFQ1QgPSBUWVBFID09PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgfHwgSVNfRklMVEVSX1JFSkVDVCA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gZXZlcnlcbiAgICAgICAgICBjYXNlIDc6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyUmVqZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJSZWplY3RgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbiAgZmlsdGVyUmVqZWN0OiBjcmVhdGVNZXRob2QoNylcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIG5hdGl2ZU9iamVjdENyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG5cbnZhciBISURERU4gPSBzaGFyZWRLZXkoJ2hpZGRlbicpO1xudmFyIFNZTUJPTCA9ICdTeW1ib2wnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTWU1CT0wpO1xuXG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbCAmJiAkU3ltYm9sW1BST1RPVFlQRV07XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmY7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90b3R5cGVTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoTywgUCwgQXR0cmlidXRlcykge1xuICB2YXIgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIFApO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcikgZGVsZXRlIE9iamVjdFByb3RvdHlwZVtQXTtcbiAgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yICYmIE8gIT09IE9iamVjdFByb3RvdHlwZSkge1xuICAgIG5hdGl2ZURlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZSwgUCwgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcik7XG4gIH1cbn07XG5cbnZhciBzZXRTeW1ib2xEZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0Q3JlYXRlKG5hdGl2ZURlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9PSA3O1xufSkgPyBmYWxsYmFja0RlZmluZVByb3BlcnR5IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZShTeW1ib2xQcm90b3R5cGUpO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgaWYgKE8gPT09IE9iamVjdFByb3RvdHlwZSkgJGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFAsIEF0dHJpYnV0ZXMpO1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUF0dHJpYnV0ZXMuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXNPd24oTywgSElEREVOKSkgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgSElEREVOLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwge30pKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBjYWxsKHNldHRlciwgT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhc093bih0aGlzLCBISURERU4pICYmIGhhc093bih0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSh0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIFVTRV9TRVRURVIpIHNldFN5bWJvbERlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6IHNldHRlciB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcsIGRlc2NyaXB0aW9uKTtcbiAgfTtcblxuICBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sW1BST1RPVFlQRV07XG5cbiAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnRhZztcbiAgfSk7XG5cbiAgZGVmaW5lQnVpbHRJbigkU3ltYm9sLCAnd2l0aG91dFNldHRlcicsIGZ1bmN0aW9uIChkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiB3cmFwKHVpZChkZXNjcmlwdGlvbiksIGRlc2NyaXB0aW9uKTtcbiAgfSk7XG5cbiAgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgZGVmaW5lUHJvcGVydGllc01vZHVsZS5mID0gJGRlZmluZVByb3BlcnRpZXM7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2VsbEtub3duU3ltYm9sKG5hbWUpLCBuYW1lKTtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1TeW1ib2wtZGVzY3JpcHRpb25cbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoU3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIUlTX1BVUkUpIHtcbiAgICAgIGRlZmluZUJ1aWx0SW4oT2JqZWN0UHJvdG90eXBlLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIU5BVElWRV9TWU1CT0wgfSwge1xuICBTeW1ib2w6ICRTeW1ib2xcbn0pO1xuXG4kZm9yRWFjaChvYmplY3RLZXlzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlZmluZVdlbGxLbm93blN5bWJvbChuYW1lKTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiBTWU1CT0wsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gZmFsc2U7IH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvclxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCBTWU1CT0wpO1xuXG5oaWRkZW5LZXlzW0hJRERFTl0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHNhZmUgKi9cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTCAmJiAhIVN5bWJvbFsnZm9yJ10gJiYgISFTeW1ib2wua2V5Rm9yO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5mb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcoa2V5KTtcbiAgICBpZiAoaGFzT3duKFN0cmluZ1RvU3ltYm9sUmVnaXN0cnksIHN0cmluZykpIHJldHVybiBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ107XG4gICAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKHN0cmluZyk7XG4gICAgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddID0gc3ltYm9sO1xuICAgIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltYm9sXSA9IHN0cmluZztcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wua2V5Rm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmtleWZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IG5ldyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoc3ltKSArICcgaXMgbm90IGEgc3ltYm9sJyk7XG4gICAgaWYgKGhhc093bihTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5LCBzeW0pKSByZXR1cm4gU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1dO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcGxhY2VyKSB7XG4gIGlmIChpc0NhbGxhYmxlKHJlcGxhY2VyKSkgcmV0dXJuIHJlcGxhY2VyO1xuICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXR1cm47XG4gIHZhciByYXdMZW5ndGggPSByZXBsYWNlci5sZW5ndGg7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlbWVudCA9IHJlcGxhY2VyW2ldO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykgcHVzaChrZXlzLCBlbGVtZW50KTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnbnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnTnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbicpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbnZhciB0ZXN0ZXIgPSAvW1xcdUQ4MDAtXFx1REZGRl0vZztcbnZhciBsb3cgPSAvXltcXHVEODAwLVxcdURCRkZdJC87XG52YXIgaGkgPSAvXltcXHVEQzAwLVxcdURGRkZdJC87XG5cbnZhciBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKSgnc3RyaW5naWZ5IGRldGVjdGlvbicpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT09ICdbbnVsbF0nXG4gICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT09ICd7fSc7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG52YXIgSUxMX0ZPUk1FRF9VTklDT0RFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxudmFyIHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4ID0gZnVuY3Rpb24gKGl0LCByZXBsYWNlcikge1xuICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgdmFyICRyZXBsYWNlciA9IGdldFJlcGxhY2VyRnVuY3Rpb24ocmVwbGFjZXIpO1xuICBpZiAoIWlzQ2FsbGFibGUoJHJlcGxhY2VyKSAmJiAoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgYXJnc1sxXSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gc29tZSBvbGQgaW1wbGVtZW50YXRpb25zIChsaWtlIFdlYktpdCkgY291bGQgcGFzcyBudW1iZXJzIGFzIGtleXNcbiAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCAkU3RyaW5nKGtleSksIHZhbHVlKTtcbiAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9O1xuICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG59O1xuXG52YXIgZml4SWxsRm9ybWVkID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCArIDEpO1xuICBpZiAoKGV4ZWMobG93LCBtYXRjaCkgJiYgIWV4ZWMoaGksIG5leHQpKSB8fCAoZXhlYyhoaSwgbWF0Y2gpICYmICFleGVjKGxvdywgcHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBudW1iZXJUb1N0cmluZyhjaGFyQ29kZUF0KG1hdGNoLCAwKSwgMTYpO1xuICB9IHJldHVybiBtYXRjaDtcbn07XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBhcml0eTogMywgZm9yY2VkOiBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gfHwgSUxMX0ZPUk1FRF9VTklDT0RFIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFwcGx5KFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA/IHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IDogJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgICByZXR1cm4gSUxMX0ZPUk1FRF9VTklDT0RFICYmIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXBsYWNlKHJlc3VsdCwgdGVzdGVyLCBmaXhJbGxGb3JtZWQpIDogcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0l0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuYXN5bmNpdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5oYXNJbnN0YW5jZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmhhc2luc3RhbmNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2hhc0luc3RhbmNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pc2NvbmNhdHNwcmVhZGFibGVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLml0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaEFsbGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoYWxsXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoQWxsJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5yZXBsYWNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucmVwbGFjZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zZWFyY2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zZWFyY2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc2VhcmNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGVjaWVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BlY2llc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGxpdGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwbGl0XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwbGl0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnRvUHJpbWl0aXZlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9wcmltaXRpdmVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIGBTeW1ib2wudG9TdHJpbmdUYWdgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3N0cmluZ3RhZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnZXRCdWlsdEluKCdTeW1ib2wnKSwgJ1N5bWJvbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wudW5zY29wYWJsZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC51bnNjb3BhYmxlc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gSlNPTltAQHRvU3RyaW5nVGFnXSBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXMtY29uY2F0LXNwcmVhZGFibGUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXRoLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC50by1zdHJpbmctdGFnJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIE1FVEFEQVRBID0gd2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vLyBGdW5jdGlvbi5wcm90b3R5cGVbQEBtZXRhZGF0YV1cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuaWYgKEZ1bmN0aW9uUHJvdG90eXBlW01FVEFEQVRBXSA9PT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEZ1bmN0aW9uUHJvdG90eXBlLCBNRVRBREFUQSwge1xuICAgIHZhbHVlOiBudWxsXG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXN5bmMtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0Rpc3Bvc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmRpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2Rpc3Bvc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvcnNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3N5bWJvbCcpO1xuXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5mdW5jdGlvbi5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciBrZXlGb3IgPSBTeW1ib2wua2V5Rm9yO1xudmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbCB8fCBmdW5jdGlvbiBpc1JlZ2lzdGVyZWRTeW1ib2wodmFsdWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4ga2V5Rm9yKHRoaXNTeW1ib2xWYWx1ZSh2YWx1ZSkpICE9PSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUmVnaXN0ZXJlZFN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZCcpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzUmVnaXN0ZXJlZFN5bWJvbDogaXNSZWdpc3RlcmVkU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciAkaXNXZWxsS25vd25TeW1ib2wgPSBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2w7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldEJ1aWx0SW4oJ09iamVjdCcsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyk7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG5mb3IgKHZhciBpID0gMCwgc3ltYm9sS2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKSwgc3ltYm9sS2V5c0xlbmd0aCA9IHN5bWJvbEtleXMubGVuZ3RoOyBpIDwgc3ltYm9sS2V5c0xlbmd0aDsgaSsrKSB7XG4gIC8vIHNvbWUgb2xkIGVuZ2luZXMgdGhyb3dzIG9uIGFjY2VzcyB0byBzb21lIGtleXMgbGlrZSBgYXJndW1lbnRzYCBvciBgY2FsbGVyYFxuICB0cnkge1xuICAgIHZhciBzeW1ib2xLZXkgPSBzeW1ib2xLZXlzW2ldO1xuICAgIGlmIChpc1N5bWJvbChTeW1ib2xbc3ltYm9sS2V5XSkpIHdlbGxLbm93blN5bWJvbChzeW1ib2xLZXkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNXZWxsS25vd25TeW1ib2wodmFsdWUpIHtcbiAgaWYgKCRpc1dlbGxLbm93blN5bWJvbCAmJiAkaXNXZWxsS25vd25TeW1ib2wodmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICB2YXIgc3ltYm9sID0gdGhpc1N5bWJvbFZhbHVlKHZhbHVlKTtcbiAgICBmb3IgKHZhciBqID0gMCwga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoOyBqIDwga2V5c0xlbmd0aDsgaisrKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxIC0tIHBvbHlmaWxsZWQgc3ltYm9scyBjYXNlXG4gICAgICBpZiAoV2VsbEtub3duU3ltYm9sc1N0b3JlW2tleXNbal1dID09IHN5bWJvbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duU3ltYm9sOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGVyYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaGVyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5vYnNlcnZhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdvYnNlcnZhYmxlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkYCBtZXRob2Rcbi8vIG9ic29sZXRlIHZlcnNpb24gb2YgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1JlZ2lzdGVyZWRTeW1ib2wnIH0sIHtcbiAgaXNSZWdpc3RlcmVkOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duJyk7XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25gIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1dlbGxLbm93blN5bWJvbCcsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YUtleWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YUtleScpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnBhdHRlcm5NYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncGF0dGVybk1hdGNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZUFsbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1hdGNoZXInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEta2V5Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucGF0dGVybi1tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG52YXIgV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKCdpdGVyYXRvcicpO1xuIiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX1N5bWJvbCRpdGVyYXRvciBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBfU3ltYm9sJGl0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBfU3ltYm9sICYmIG8gIT09IF9TeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufSIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ3RvUHJpbWl0aXZlJyk7XG4iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBfU3ltYm9sJHRvUHJpbWl0aXZlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL3RvLXByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W19TeW1ib2wkdG9QcmltaXRpdmVdO1xuICBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKF90eXBlb2YocmVzKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlcztcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7XG59IiwgImltcG9ydCBfT2JqZWN0JGRlZmluZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxuLy8gYEFycmF5LmlzQXJyYXlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5pc2FycmF5XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNBcnJheTogaXNBcnJheVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pcy1hcnJheScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguQXJyYXkuaXNBcnJheTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvYXJyYXkvaXMtYXJyYXknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IGFuZCBTYWZhcmkgPD0gMTUuNCwgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTI2ODFcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkucHVzaCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9UT19MRU5HVEggfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnB1c2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucHVzaFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHB1c2g6IGZ1bmN0aW9uIHB1c2goaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGFyZ0NvdW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHtcbiAgICAgIE9bbGVuXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGxlbisrO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4pO1xuICAgIHJldHVybiBsZW47XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucHVzaCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnB1c2g7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcHVzaCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5wdXNoO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5wdXNoKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3B1c2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBuYXRpdmVTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zbGljZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc2xpY2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59IiwgImltcG9ydCBfc2xpY2VJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanNcIjtcbmltcG9ydCBfQXJyYXkkZnJvbSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2Zyb20uanNcIjtcbmltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgdmFyIF9jb250ZXh0O1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IF9zbGljZUluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykpLmNhbGwoX2NvbnRleHQsIDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIF9BcnJheSRmcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCAiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwgImltcG9ydCBfQXJyYXkkaXNBcnJheSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2lzLWFycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChfQXJyYXkkaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsICJpbXBvcnQgX1N5bWJvbCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiO1xuaW1wb3J0IF9nZXRJdGVyYXRvck1ldGhvZCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanNcIjtcbmltcG9ydCBfcHVzaEluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9wdXNoLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkge1xuICB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBfU3ltYm9sICYmIF9nZXRJdGVyYXRvck1ldGhvZChyKSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKF9wdXNoSW5zdGFuY2VQcm9wZXJ0eShhKS5jYWxsKGEsIGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgbyA9ICEwLCBuID0gcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmICYmIG51bGwgIT0gdFtcInJldHVyblwiXSAmJiAodSA9IHRbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG8pIHRocm93IG47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgImltcG9ydCBhcnJheVdpdGhvdXRIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlU3ByZWFkIGZyb20gXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn0iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59IiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiO1xuaW1wb3J0IF9BcnJheSRmcm9tIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgX1N5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBfZ2V0SXRlcmF0b3JNZXRob2QoaXRlcikgIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gX0FycmF5JGZyb20oaXRlcik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmNvbmNhdDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9jb25jYXQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuY29uY2F0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5jb25jYXQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvY29uY2F0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc2xpY2VcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvaXMtYXJyYXlcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5tYXAnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5tYXA7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvbWFwJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0Lm1hcDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUubWFwKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL21hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRGF0ZSA9IERhdGU7XG52YXIgdGhpc1RpbWVWYWx1ZSA9IHVuY3VycnlUaGlzKCREYXRlLnByb3RvdHlwZS5nZXRUaW1lKTtcblxuLy8gYERhdGUubm93YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5ub3dcbiQoeyB0YXJnZXQ6ICdEYXRlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIG5vdzogZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiB0aGlzVGltZVZhbHVlKG5ldyAkRGF0ZSgpKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5kYXRlLm5vdycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguRGF0ZS5ub3c7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2ZvckVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbm1vZHVsZS5leHBvcnRzID0gIVNUUklDVF9NRVRIT0QgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxufSA6IFtdLmZvckVhY2g7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT09IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZm9yRWFjaDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZm9yRWFjaClcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2hcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyIG5hdGl2ZVJldmVyc2UgPSB1bmN1cnJ5VGhpcyhbXS5yZXZlcnNlKTtcbnZhciB0ZXN0ID0gWzEsIDJdO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJldmVyc2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmV2ZXJzZVxuLy8gZml4IGZvciBTYWZhcmkgMTIuMCBidWdcbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg3OTRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFN0cmluZyh0ZXN0KSA9PT0gU3RyaW5nKHRlc3QucmV2ZXJzZSgpKSB9LCB7XG4gIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduIC0tIGRpcnR5IGhhY2tcbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbmF0aXZlUmV2ZXJzZSh0aGlzKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykucmV2ZXJzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9yZXZlcnNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJldmVyc2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJldmVyc2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmV2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgUCkge1xuICBpZiAoIWRlbGV0ZSBPW1BdKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAnICsgdHJ5VG9TdHJpbmcoUCkgKyAnIG9mICcgKyB0cnlUb1N0cmluZyhPKSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzcGxpY2UnKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNwbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zcGxpY2Vcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNwbGljZTogZnVuY3Rpb24gc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCAvKiAsIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFjdHVhbFN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpbnNlcnRDb3VudCwgYWN0dWFsRGVsZXRlQ291bnQsIEEsIGssIGZyb20sIHRvO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgIGluc2VydENvdW50ID0gYWN0dWFsRGVsZXRlQ291bnQgPSAwO1xuICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgICBpbnNlcnRDb3VudCA9IDA7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IGxlbiAtIGFjdHVhbFN0YXJ0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnNlcnRDb3VudCA9IGFyZ3VtZW50c0xlbmd0aCAtIDI7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IG1pbihtYXgodG9JbnRlZ2VyT3JJbmZpbml0eShkZWxldGVDb3VudCksIDApLCBsZW4gLSBhY3R1YWxTdGFydCk7XG4gICAgfVxuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBpbnNlcnRDb3VudCAtIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBmb3IgKGsgPSAwOyBrIDwgYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgZnJvbSA9IGFjdHVhbFN0YXJ0ICsgaztcbiAgICAgIGlmIChmcm9tIGluIE8pIGNyZWF0ZVByb3BlcnR5KEEsIGssIE9bZnJvbV0pO1xuICAgIH1cbiAgICBBLmxlbmd0aCA9IGFjdHVhbERlbGV0ZUNvdW50O1xuICAgIGlmIChpbnNlcnRDb3VudCA8IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBhY3R1YWxTdGFydDsgayA8IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50OyBrKyspIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudDtcbiAgICAgICAgdG8gPSBrICsgaW5zZXJ0Q291bnQ7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgICAgZm9yIChrID0gbGVuOyBrID4gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudDsgay0tKSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgayAtIDEpO1xuICAgIH0gZWxzZSBpZiAoaW5zZXJ0Q291bnQgPiBhY3R1YWxEZWxldGVDb3VudCkge1xuICAgICAgZm9yIChrID0gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsgPiBhY3R1YWxTdGFydDsgay0tKSB7XG4gICAgICAgIGZyb20gPSBrICsgYWN0dWFsRGVsZXRlQ291bnQgLSAxO1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudCAtIDE7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGsgPSAwOyBrIDwgaW5zZXJ0Q291bnQ7IGsrKykge1xuICAgICAgT1trICsgYWN0dWFsU3RhcnRdID0gYXJndW1lbnRzW2sgKyAyXTtcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudCk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5Jykuc3BsaWNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NwbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zcGxpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNwbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zcGxpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5jbHVkZXM7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG4vLyBGRjk5KyBidWdcbnZhciBCUk9LRU5fT05fU1BBUlNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWluY2x1ZGVzIC0tIGRldGVjdGlvblxuICByZXR1cm4gIUFycmF5KDEpLmluY2x1ZGVzKCk7XG59KTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogQlJPS0VOX09OX1NQQVJTRSB9LCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdpbmNsdWRlcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5pbmNsdWRlcztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbi8vIGBJc1JlZ0V4cGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzcmVnZXhwXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjbGFzc29mKGl0KSA9PT0gJ1JlZ0V4cCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcmVnZXhwJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNSZWdFeHAoaXQpKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJUaGUgbWV0aG9kIGRvZXNuJ3QgYWNjZXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnNcIik7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgdmFyIHJlZ2V4cCA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tNRVRIT0RfTkFNRV0ocmVnZXhwKTtcbiAgfSBjYXRjaCAoZXJyb3IxKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlZ2V4cFtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAnLy4vJ1tNRVRIT0RfTkFNRV0ocmVnZXhwKTtcbiAgICB9IGNhdGNoIChlcnJvcjIpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgbm90QVJlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3QtYS1yZWdleHAnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNvcnJlY3RJc1JlZ0V4cExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljJyk7XG5cbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFjb3JyZWN0SXNSZWdFeHBMb2dpYygnaW5jbHVkZXMnKSB9LCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+c3RyaW5nSW5kZXhPZihcbiAgICAgIHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpLFxuICAgICAgdG9TdHJpbmcobm90QVJlZ0V4cChzZWFyY2hTdHJpbmcpKSxcbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnU3RyaW5nJykuaW5jbHVkZXM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9pbmNsdWRlcycpO1xudmFyIHN0cmluZ01ldGhvZCA9IHJlcXVpcmUoJy4uL3N0cmluZy92aXJ0dWFsL2luY2x1ZGVzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcbnZhciBTdHJpbmdQcm90b3R5cGUgPSBTdHJpbmcucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuaW5jbHVkZXM7XG4gIGlmIChpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmluY2x1ZGVzKSkgcmV0dXJuIGFycmF5TWV0aG9kO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnIHx8IGl0ID09PSBTdHJpbmdQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoU3RyaW5nUHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBTdHJpbmdQcm90b3R5cGUuaW5jbHVkZXMpKSB7XG4gICAgcmV0dXJuIHN0cmluZ01ldGhvZDtcbiAgfSByZXR1cm4gb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvaW5jbHVkZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldFByb3RvdHlwZU9mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUywgc2hhbTogIUNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiB9LCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiBuYXRpdmVHZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZlwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbHRlcicpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmZpbHRlcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maWx0ZXInKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmlsdGVyO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvZmlsdGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ15bJyArIHdoaXRlc3BhY2VzICsgJ10rJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoJyhefFteJyArIHdoaXRlc3BhY2VzICsgJ10pWycgKyB3aGl0ZXNwYWNlcyArICddKyQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgcnRyaW0sICckMScpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgJHBhcnNlSW50ID0gZ2xvYmFsLnBhcnNlSW50O1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgSVRFUkFUT1IgPSBTeW1ib2wgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIGhleCA9IC9eWystXT8weC9pO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhoZXguZXhlYyk7XG52YXIgRk9SQ0VEID0gJHBhcnNlSW50KHdoaXRlc3BhY2VzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdoaXRlc3BhY2VzICsgJzB4MTYnKSAhPT0gMjJcbiAgLy8gTVMgRWRnZSAxOC0gYnJva2VuIHdpdGggYm94ZWQgc3ltYm9sc1xuICB8fCAoSVRFUkFUT1IgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHsgJHBhcnNlSW50KE9iamVjdChJVEVSQVRPUikpOyB9KSk7XG5cbi8vIGBwYXJzZUludGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlaW50LXN0cmluZy1yYWRpeFxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRUQgPyBmdW5jdGlvbiBwYXJzZUludChzdHJpbmcsIHJhZGl4KSB7XG4gIHZhciBTID0gdHJpbSh0b1N0cmluZyhzdHJpbmcpKTtcbiAgcmV0dXJuICRwYXJzZUludChTLCAocmFkaXggPj4+IDApIHx8IChleGVjKGhleCwgUykgPyAxNiA6IDEwKSk7XG59IDogJHBhcnNlSW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9udW1iZXItcGFyc2UtaW50Jyk7XG5cbi8vIGBwYXJzZUludGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlaW50LXN0cmluZy1yYWRpeFxuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiBwYXJzZUludCAhPT0gJHBhcnNlSW50IH0sIHtcbiAgcGFyc2VJbnQ6ICRwYXJzZUludFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wYXJzZS1pbnQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLnBhcnNlSW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1pbmRleG9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgbmF0aXZlSW5kZXhPZiA9IHVuY3VycnlUaGlzKFtdLmluZGV4T2YpO1xuXG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhbmF0aXZlSW5kZXhPZiAmJiAxIC8gbmF0aXZlSW5kZXhPZihbMV0sIDEsIC0wKSA8IDA7XG52YXIgRk9SQ0VEID0gTkVHQVRJVkVfWkVSTyB8fCAhYXJyYXlNZXRob2RJc1N0cmljdCgnaW5kZXhPZicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHZhciBmcm9tSW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyBuYXRpdmVJbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCkgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBmcm9tSW5kZXgpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmluZGV4LW9mJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuaW5kZXhPZjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9pbmRleC1vZicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5pbmRleE9mO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5pbmRleE9mKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2luZGV4LW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGNyZWF0ZTogY3JlYXRlXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZShQLCBEKSB7XG4gIHJldHVybiBPYmplY3QuY3JlYXRlKFAsIEQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9jcmVhdGVcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tanNvbiAtLSBzYWZlXG5pZiAoIXBhdGguSlNPTikgcGF0aC5KU09OID0geyBzdHJpbmdpZnk6IEpTT04uc3RyaW5naWZ5IH07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gIHJldHVybiBhcHBseShwYXRoLkpTT04uc3RyaW5naWZ5LCBudWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvanNvbi9zdHJpbmdpZnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEJ1biAtLSBEZW5vIGNhc2UgKi9cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIEJ1biA9PSAnZnVuY3Rpb24nICYmIEJ1biAmJiB0eXBlb2YgQnVuLnZlcnNpb24gPT0gJ3N0cmluZyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhc3NlZCwgcmVxdWlyZWQpIHtcbiAgaWYgKHBhc3NlZCA8IHJlcXVpcmVkKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignTm90IGVub3VnaCBhcmd1bWVudHMnKTtcbiAgcmV0dXJuIHBhc3NlZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBFTkdJTkVfSVNfQlVOID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1idW4nKTtcbnZhciBVU0VSX0FHRU5UID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcblxudmFyIEZ1bmN0aW9uID0gZ2xvYmFsLkZ1bmN0aW9uO1xuLy8gZGlydHkgSUU5LSBhbmQgQnVuIDAuMy4wLSBjaGVja3NcbnZhciBXUkFQID0gL01TSUUgLlxcLi8udGVzdChVU0VSX0FHRU5UKSB8fCBFTkdJTkVfSVNfQlVOICYmIChmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZXJzaW9uID0gZ2xvYmFsLkJ1bi52ZXJzaW9uLnNwbGl0KCcuJyk7XG4gIHJldHVybiB2ZXJzaW9uLmxlbmd0aCA8IDMgfHwgdmVyc2lvblswXSA9PT0gJzAnICYmICh2ZXJzaW9uWzFdIDwgMyB8fCB2ZXJzaW9uWzFdID09PSAnMycgJiYgdmVyc2lvblsyXSA9PT0gJzAnKTtcbn0pKCk7XG5cbi8vIElFOS0gLyBCdW4gMC4zLjAtIHNldFRpbWVvdXQgLyBzZXRJbnRlcnZhbCAvIHNldEltbWVkaWF0ZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI3RpbWVyc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL292ZW4tc2gvYnVuL2lzc3Vlcy8xNjMzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGhhc1RpbWVBcmcpIHtcbiAgdmFyIGZpcnN0UGFyYW1JbmRleCA9IGhhc1RpbWVBcmcgPyAyIDogMTtcbiAgcmV0dXJuIFdSQVAgPyBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCAvKiAsIC4uLmFyZ3VtZW50cyAqLykge1xuICAgIHZhciBib3VuZEFyZ3MgPSB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKSA+IGZpcnN0UGFyYW1JbmRleDtcbiAgICB2YXIgZm4gPSBpc0NhbGxhYmxlKGhhbmRsZXIpID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpO1xuICAgIHZhciBwYXJhbXMgPSBib3VuZEFyZ3MgPyBhcnJheVNsaWNlKGFyZ3VtZW50cywgZmlyc3RQYXJhbUluZGV4KSA6IFtdO1xuICAgIHZhciBjYWxsYmFjayA9IGJvdW5kQXJncyA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwcGx5KGZuLCB0aGlzLCBwYXJhbXMpO1xuICAgIH0gOiBmbjtcbiAgICByZXR1cm4gaGFzVGltZUFyZyA/IHNjaGVkdWxlcihjYWxsYmFjaywgdGltZW91dCkgOiBzY2hlZHVsZXIoY2FsbGJhY2spO1xuICB9IDogc2NoZWR1bGVyO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG52YXIgc2V0SW50ZXJ2YWwgPSBzY2hlZHVsZXJzRml4KGdsb2JhbC5zZXRJbnRlcnZhbCwgdHJ1ZSk7XG5cbi8vIEJ1biAvIElFOS0gc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0aW50ZXJ2YWxcbiQoeyBnbG9iYWw6IHRydWUsIGJpbmQ6IHRydWUsIGZvcmNlZDogZ2xvYmFsLnNldEludGVydmFsICE9PSBzZXRJbnRlcnZhbCB9LCB7XG4gIHNldEludGVydmFsOiBzZXRJbnRlcnZhbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxudmFyIHNldFRpbWVvdXQgPSBzY2hlZHVsZXJzRml4KGdsb2JhbC5zZXRUaW1lb3V0LCB0cnVlKTtcblxuLy8gQnVuIC8gSUU5LSBzZXRUaW1lb3V0IGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldHRpbWVvdXRcbiQoeyBnbG9iYWw6IHRydWUsIGJpbmQ6IHRydWUsIGZvcmNlZDogZ2xvYmFsLnNldFRpbWVvdXQgIT09IHNldFRpbWVvdXQgfSwge1xuICBzZXRUaW1lb3V0OiBzZXRUaW1lb3V0XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi50aW1lcnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLnNldFRpbWVvdXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsbGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWxsXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZpbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZmlsbCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWxsXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGZpbGw6IGZpbGxcbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdmaWxsJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maWxsJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmlsbDtcbiIsICIvKiEgSGFtbWVyLkpTIC0gdjIuMC4xNy1yYyAtIDIwMTktMTItMTZcbiAqIGh0dHA6Ly9uYXZlci5naXRodWIuaW8vZWdqc1xuICpcbiAqIEZvcmtlZCBCeSBOYXZlciBlZ2pzXG4gKiBDb3B5cmlnaHQgKGMpIGhhbW1lcmpzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKi9cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IG9iamVjdHNfdG9fYXNzaWduXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB0YXJnZXRcbiAqL1xudmFyIGFzc2lnbjtcblxuaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF07XG5cbiAgICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSB7XG4gICAgICAgICAgICBvdXRwdXRbbmV4dEtleV0gPSBzb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcbn0gZWxzZSB7XG4gIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG59XG5cbnZhciBhc3NpZ24kMSA9IGFzc2lnbjtcblxudmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xudmFyIFRFU1RfRUxFTUVOVCA9IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IHtcbiAgc3R5bGU6IHt9XG59IDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgVFlQRV9GVU5DVElPTiA9ICdmdW5jdGlvbic7XG52YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgIGFicyA9IE1hdGguYWJzO1xudmFyIG5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIHByZWZpeGVkIHByb3BlcnR5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAqIEByZXR1cm5zIHtTdHJpbmd8VW5kZWZpbmVkfSBwcmVmaXhlZFxuICovXG5cbmZ1bmN0aW9uIHByZWZpeGVkKG9iaiwgcHJvcGVydHkpIHtcbiAgdmFyIHByZWZpeDtcbiAgdmFyIHByb3A7XG4gIHZhciBjYW1lbFByb3AgPSBwcm9wZXJ0eVswXS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICBwcmVmaXggPSBWRU5ET1JfUFJFRklYRVNbaV07XG4gICAgcHJvcCA9IHByZWZpeCA/IHByZWZpeCArIGNhbWVsUHJvcCA6IHByb3BlcnR5O1xuXG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYywgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbnZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gIC8vIHdpbmRvdyBpcyB1bmRlZmluZWQgaW4gbm9kZS5qc1xuICB3aW4gPSB7fTtcbn0gZWxzZSB7XG4gIHdpbiA9IHdpbmRvdztcbn1cblxudmFyIFBSRUZJWEVEX1RPVUNIX0FDVElPTiA9IHByZWZpeGVkKFRFU1RfRUxFTUVOVC5zdHlsZSwgJ3RvdWNoQWN0aW9uJyk7XG52YXIgTkFUSVZFX1RPVUNIX0FDVElPTiA9IFBSRUZJWEVEX1RPVUNIX0FDVElPTiAhPT0gdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpIHtcbiAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRvdWNoTWFwID0ge307XG4gIHZhciBjc3NTdXBwb3J0cyA9IHdpbi5DU1MgJiYgd2luLkNTUy5zdXBwb3J0cztcbiAgWydhdXRvJywgJ21hbmlwdWxhdGlvbicsICdwYW4teScsICdwYW4teCcsICdwYW4teCBwYW4teScsICdub25lJ10uZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgLy8gYWxsIHZhbHVlcy4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgSUUgMTAgYW5kIDExLlxuICAgIHJldHVybiB0b3VjaE1hcFt2YWxdID0gY3NzU3VwcG9ydHMgPyB3aW4uQ1NTLnN1cHBvcnRzKCd0b3VjaC1hY3Rpb24nLCB2YWwpIDogdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiB0b3VjaE1hcDtcbn1cblxudmFyIFRPVUNIX0FDVElPTl9DT01QVVRFID0gJ2NvbXB1dGUnO1xudmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xudmFyIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04gPSAnbWFuaXB1bGF0aW9uJzsgLy8gbm90IGltcGxlbWVudGVkXG5cbnZhciBUT1VDSF9BQ1RJT05fTk9ORSA9ICdub25lJztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1ggPSAncGFuLXgnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWSA9ICdwYW4teSc7XG52YXIgVE9VQ0hfQUNUSU9OX01BUCA9IGdldFRvdWNoQWN0aW9uUHJvcHMoKTtcblxudmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcbnZhciBTVVBQT1JUX1RPVUNIID0gJ29udG91Y2hzdGFydCcgaW4gd2luO1xudmFyIFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMgPSBwcmVmaXhlZCh3aW4sICdQb2ludGVyRXZlbnQnKSAhPT0gdW5kZWZpbmVkO1xudmFyIFNVUFBPUlRfT05MWV9UT1VDSCA9IFNVUFBPUlRfVE9VQ0ggJiYgTU9CSUxFX1JFR0VYLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSU5QVVRfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG52YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbnZhciBJTlBVVF9UWVBFX01PVVNFID0gJ21vdXNlJztcbnZhciBJTlBVVF9UWVBFX0tJTkVDVCA9ICdraW5lY3QnO1xudmFyIENPTVBVVEVfSU5URVJWQUwgPSAyNTtcbnZhciBJTlBVVF9TVEFSVCA9IDE7XG52YXIgSU5QVVRfTU9WRSA9IDI7XG52YXIgSU5QVVRfRU5EID0gNDtcbnZhciBJTlBVVF9DQU5DRUwgPSA4O1xudmFyIERJUkVDVElPTl9OT05FID0gMTtcbnZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG52YXIgRElSRUNUSU9OX1JJR0hUID0gNDtcbnZhciBESVJFQ1RJT05fVVAgPSA4O1xudmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG52YXIgRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fTEVGVCB8IERJUkVDVElPTl9SSUdIVDtcbnZhciBESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVVAgfCBESVJFQ1RJT05fRE9XTjtcbnZhciBESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUw7XG52YXIgUFJPUFNfWFkgPSBbJ3gnLCAneSddO1xudmFyIFBST1BTX0NMSUVOVF9YWSA9IFsnY2xpZW50WCcsICdjbGllbnRZJ107XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdhbGsgb2JqZWN0cyBhbmQgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gIHZhciBpO1xuXG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9iai5mb3JFYWNoKSB7XG4gICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICB9IGVsc2UgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBvYmoubGVuZ3RoKSB7XG4gICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpIGluIG9iaikge1xuICAgICAgb2JqLmhhc093blByb3BlcnR5KGkpICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBsZXQgYSBib29sZWFuIHZhbHVlIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IG11c3QgcmV0dXJuIGEgYm9vbGVhblxuICogdGhpcyBmaXJzdCBpdGVtIGluIGFyZ3Mgd2lsbCBiZSB1c2VkIGFzIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IHZhbFxuICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBib29sT3JGbih2YWwsIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFRZUEVfRlVOQ1RJT04pIHtcbiAgICByZXR1cm4gdmFsLmFwcGx5KGFyZ3MgPyBhcmdzWzBdIHx8IHVuZGVmaW5lZCA6IHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzbWFsbCBpbmRleE9mIHdyYXBwZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaW5TdHIoc3RyLCBmaW5kKSB7XG4gIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3aGVuIHRoZSB0b3VjaEFjdGlvbnMgYXJlIGNvbGxlY3RlZCB0aGV5IGFyZSBub3QgYSB2YWxpZCB2YWx1ZSwgc28gd2UgbmVlZCB0byBjbGVhbiB0aGluZ3MgdXAuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuXG5mdW5jdGlvbiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zKSB7XG4gIC8vIG5vbmVcbiAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTk9ORTtcbiAgfVxuXG4gIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpOyAvLyBpZiBib3RoIHBhbi14IGFuZCBwYW4teSBhcmUgc2V0IChkaWZmZXJlbnQgcmVjb2duaXplcnNcbiAgLy8gZm9yIGRpZmZlcmVudCBkaXJlY3Rpb25zLCBlLmcuIGhvcml6b250YWwgcGFuIGJ1dCB2ZXJ0aWNhbCBzd2lwZT8pXG4gIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAvLyByZWNvZ25pemVycyB3aWxsIHdvcmssIHNpbmNlIHRoZSBicm93c2VyIHdvdWxkIGhhbmRsZSBhbGwgcGFubmluZ1xuXG4gIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gIH0gLy8gcGFuLXggT1IgcGFuLXlcblxuXG4gIGlmIChoYXNQYW5YIHx8IGhhc1BhblkpIHtcbiAgICByZXR1cm4gaGFzUGFuWCA/IFRPVUNIX0FDVElPTl9QQU5fWCA6IFRPVUNIX0FDVElPTl9QQU5fWTtcbiAgfSAvLyBtYW5pcHVsYXRpb25cblxuXG4gIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OO1xuICB9XG5cbiAgcmV0dXJuIFRPVUNIX0FDVElPTl9BVVRPO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUb3VjaCBBY3Rpb25cbiAqIHNldHMgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IG9yIHVzZXMgdGhlIGpzIGFsdGVybmF0aXZlXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIFRvdWNoQWN0aW9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG91Y2hBY3Rpb24obWFuYWdlciwgdmFsdWUpIHtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuc2V0KHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZSBvbiB0aGUgZWxlbWVudCBvciBlbmFibGUgdGhlIHBvbHlmaWxsXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBUb3VjaEFjdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIGZpbmQgb3V0IHRoZSB0b3VjaC1hY3Rpb24gYnkgdGhlIGV2ZW50IGhhbmRsZXJzXG4gICAgaWYgKHZhbHVlID09PSBUT1VDSF9BQ1RJT05fQ09NUFVURSkge1xuICAgICAgdmFsdWUgPSB0aGlzLmNvbXB1dGUoKTtcbiAgICB9XG5cbiAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbUFJFRklYRURfVE9VQ0hfQUNUSU9OXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICoganVzdCByZS1zZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlXG4gICAqL1xuXG5cbiAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjb21wdXRlIHRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IGJhc2VkIG9uIHRoZSByZWNvZ25pemVyJ3Mgc2V0dGluZ3NcbiAgICogQHJldHVybnMge1N0cmluZ30gdmFsdWVcbiAgICovXG5cblxuICBfcHJvdG8uY29tcHV0ZSA9IGZ1bmN0aW9uIGNvbXB1dGUoKSB7XG4gICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICBlYWNoKHRoaXMubWFuYWdlci5yZWNvZ25pemVycywgZnVuY3Rpb24gKHJlY29nbml6ZXIpIHtcbiAgICAgIGlmIChib29sT3JGbihyZWNvZ25pemVyLm9wdGlvbnMuZW5hYmxlLCBbcmVjb2duaXplcl0pKSB7XG4gICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zLmpvaW4oJyAnKSk7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gZWFjaCBpbnB1dCBjeWNsZSBhbmQgcHJvdmlkZXMgdGhlIHByZXZlbnRpbmcgb2YgdGhlIGJyb3dzZXIgYmVoYXZpb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLnByZXZlbnREZWZhdWx0cyA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhpbnB1dCkge1xuICAgIHZhciBzcmNFdmVudCA9IGlucHV0LnNyY0V2ZW50O1xuICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5vZmZzZXREaXJlY3Rpb247IC8vIGlmIHRoZSB0b3VjaCBhY3Rpb24gZGlkIHByZXZlbnRlZCBvbmNlIHRoaXMgc2Vzc2lvblxuXG4gICAgaWYgKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCkge1xuICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWV07XG4gICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWF07XG5cbiAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgLy8gZG8gbm90IHByZXZlbnQgZGVmYXVsdHMgaWYgdGhpcyBpcyBhIHRhcCBnZXN0dXJlXG4gICAgICB2YXIgaXNUYXBQb2ludGVyID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSAxO1xuICAgICAgdmFyIGlzVGFwTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IDI7XG4gICAgICB2YXIgaXNUYXBUb3VjaFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPCAyNTA7XG5cbiAgICAgIGlmIChpc1RhcFBvaW50ZXIgJiYgaXNUYXBNb3ZlbWVudCAmJiBpc1RhcFRvdWNoVGltZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgLy8gYHBhbi14IHBhbi15YCBtZWFucyBicm93c2VyIGhhbmRsZXMgYWxsIHNjcm9sbGluZy9wYW5uaW5nLCBkbyBub3QgcHJldmVudFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChoYXNOb25lIHx8IGhhc1BhblkgJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwgfHwgaGFzUGFuWCAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZlbnRTcmMoc3JjRXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbGwgcHJldmVudERlZmF1bHQgdG8gcHJldmVudCB0aGUgYnJvd3NlcidzIGRlZmF1bHQgYmVoYXZpb3IgKHNjcm9sbGluZyBpbiBtb3N0IGNhc2VzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICovXG5cblxuICBfcHJvdG8ucHJldmVudFNyYyA9IGZ1bmN0aW9uIHByZXZlbnRTcmMoc3JjRXZlbnQpIHtcbiAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoQWN0aW9uO1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBmaW5kIGlmIGEgbm9kZSBpcyBpbiB0aGUgZ2l2ZW4gcGFyZW50XG4gKiBAbWV0aG9kIGhhc1BhcmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBjZW50ZXIgb2YgYWxsIHRoZSBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gcG9pbnRlcnNcbiAqIEByZXR1cm4ge09iamVjdH0gY2VudGVyIGNvbnRhaW5zIGB4YCBhbmQgYHlgIHByb3BlcnRpZXNcbiAqL1xuXG5mdW5jdGlvbiBnZXRDZW50ZXIocG9pbnRlcnMpIHtcbiAgdmFyIHBvaW50ZXJzTGVuZ3RoID0gcG9pbnRlcnMubGVuZ3RoOyAvLyBubyBuZWVkIHRvIGxvb3Agd2hlbiBvbmx5IG9uZSB0b3VjaFxuXG4gIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRYKSxcbiAgICAgIHk6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFkpXG4gICAgfTtcbiAgfVxuXG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBwb2ludGVyc0xlbmd0aCkge1xuICAgIHggKz0gcG9pbnRlcnNbaV0uY2xpZW50WDtcbiAgICB5ICs9IHBvaW50ZXJzW2ldLmNsaWVudFk7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4IC8gcG9pbnRlcnNMZW5ndGgpLFxuICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIGEgc2ltcGxlIGNsb25lIGZyb20gdGhlIGlucHV0IHVzZWQgZm9yIHN0b3JhZ2Ugb2YgZmlyc3RJbnB1dCBhbmQgZmlyc3RNdWx0aXBsZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBjbG9uZWRJbnB1dERhdGFcbiAqL1xuXG5mdW5jdGlvbiBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCkge1xuICAvLyBtYWtlIGEgc2ltcGxlIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgYSByZWZlcmVuY2UgaWYgd2UgZG9uJ3RcbiAgLy8gd2Ugb25seSBuZWVkIGNsaWVudFhZIGZvciB0aGUgY2FsY3VsYXRpb25zXG4gIHZhciBwb2ludGVycyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBpbnB1dC5wb2ludGVycy5sZW5ndGgpIHtcbiAgICBwb2ludGVyc1tpXSA9IHtcbiAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgY2xpZW50WTogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WSlcbiAgICB9O1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGltZVN0YW1wOiBub3coKSxcbiAgICBwb2ludGVyczogcG9pbnRlcnMsXG4gICAgY2VudGVyOiBnZXRDZW50ZXIocG9pbnRlcnMpLFxuICAgIGRlbHRhWDogaW5wdXQuZGVsdGFYLFxuICAgIGRlbHRhWTogaW5wdXQuZGVsdGFZXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gcDEge3gsIHl9XG4gKiBAcGFyYW0ge09iamVjdH0gcDIge3gsIHl9XG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgfVxuXG4gIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dO1xuICB2YXIgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBhbmdsZSBiZXR3ZWVuIHR3byBjb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IHAxXG4gKiBAcGFyYW0ge09iamVjdH0gcDJcbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gYW5nbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRBbmdsZShwMSwgcDIsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IFBST1BTX1hZO1xuICB9XG5cbiAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV07XG4gIHZhciB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KSAqIDE4MCAvIE1hdGguUEk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgZGlyZWN0aW9uIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpcmVjdGlvblxuICovXG5cbmZ1bmN0aW9uIGdldERpcmVjdGlvbih4LCB5KSB7XG4gIGlmICh4ID09PSB5KSB7XG4gICAgcmV0dXJuIERJUkVDVElPTl9OT05FO1xuICB9XG5cbiAgaWYgKGFicyh4KSA+PSBhYnMoeSkpIHtcbiAgICByZXR1cm4geCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgfVxuXG4gIHJldHVybiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyOyAvLyBsZXQgeyBvZmZzZXREZWx0YTpvZmZzZXQgPSB7fSwgcHJldkRlbHRhID0ge30sIHByZXZJbnB1dCA9IHt9IH0gPSBzZXNzaW9uO1xuICAvLyBqc2NzIHRocm93aW5nIGVycm9yIG9uIGRlZmFsdXQgZGVzdHJ1Y3R1cmVkIHZhbHVlcyBhbmQgd2l0aG91dCBkZWZhdWx0cyB0ZXN0cyBmYWlsXG5cbiAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gIHZhciBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSB8fCB7fTtcbiAgdmFyIHByZXZJbnB1dCA9IHNlc3Npb24ucHJldklucHV0IHx8IHt9O1xuXG4gIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhID0ge1xuICAgICAgeDogcHJldklucHV0LmRlbHRhWCB8fCAwLFxuICAgICAgeTogcHJldklucHV0LmRlbHRhWSB8fCAwXG4gICAgfTtcbiAgICBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhID0ge1xuICAgICAgeDogY2VudGVyLngsXG4gICAgICB5OiBjZW50ZXIueVxuICAgIH07XG4gIH1cblxuICBpbnB1dC5kZWx0YVggPSBwcmV2RGVsdGEueCArIChjZW50ZXIueCAtIG9mZnNldC54KTtcbiAgaW5wdXQuZGVsdGFZID0gcHJldkRlbHRhLnkgKyAoY2VudGVyLnkgLSBvZmZzZXQueSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYmV0d2VlbiB0d28gcG9pbnRzLiB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIHgsIHkpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgeTogeSAvIGRlbHRhVGltZSB8fCAwXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgc2NhbGUgZmFjdG9yIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBubyBzY2FsZSBpcyAxLCBhbmQgZ29lcyBkb3duIHRvIDAgd2hlbiBwaW5jaGVkIHRvZ2V0aGVyLCBhbmQgYmlnZ2VyIHdoZW4gcGluY2hlZCBvdXRcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gc2NhbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRTY2FsZShzdGFydCwgZW5kKSB7XG4gIHJldHVybiBnZXREaXN0YW5jZShlbmRbMF0sIGVuZFsxXSwgUFJPUFNfQ0xJRU5UX1hZKSAvIGdldERpc3RhbmNlKHN0YXJ0WzBdLCBzdGFydFsxXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSByb3RhdGlvbiBkZWdyZWVzIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHJvdGF0aW9uXG4gKi9cblxuZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZ2V0QW5nbGUoZW5kWzFdLCBlbmRbMF0sIFBST1BTX0NMSUVOVF9YWSkgKyBnZXRBbmdsZShzdGFydFsxXSwgc3RhcnRbMF0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHZlbG9jaXR5IGlzIGNhbGN1bGF0ZWQgZXZlcnkgeCBtc1xuICogQHBhcmFtIHtPYmplY3R9IHNlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgbGFzdCA9IHNlc3Npb24ubGFzdEludGVydmFsIHx8IGlucHV0O1xuICB2YXIgZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gbGFzdC50aW1lU3RhbXA7XG4gIHZhciB2ZWxvY2l0eTtcbiAgdmFyIHZlbG9jaXR5WDtcbiAgdmFyIHZlbG9jaXR5WTtcbiAgdmFyIGRpcmVjdGlvbjtcblxuICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9PSBJTlBVVF9DQU5DRUwgJiYgKGRlbHRhVGltZSA+IENPTVBVVEVfSU5URVJWQUwgfHwgbGFzdC52ZWxvY2l0eSA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHZhciBkZWx0YVggPSBpbnB1dC5kZWx0YVggLSBsYXN0LmRlbHRhWDtcbiAgICB2YXIgZGVsdGFZID0gaW5wdXQuZGVsdGFZIC0gbGFzdC5kZWx0YVk7XG4gICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICB2ZWxvY2l0eVggPSB2Lng7XG4gICAgdmVsb2NpdHlZID0gdi55O1xuICAgIHZlbG9jaXR5ID0gYWJzKHYueCkgPiBhYnModi55KSA/IHYueCA6IHYueTtcbiAgICBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpO1xuICAgIHNlc3Npb24ubGFzdEludGVydmFsID0gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIGxhdGVzdCB2ZWxvY2l0eSBpbmZvIGlmIGl0IGRvZXNuJ3Qgb3ZlcnRha2UgYSBtaW5pbXVtIHBlcmlvZFxuICAgIHZlbG9jaXR5ID0gbGFzdC52ZWxvY2l0eTtcbiAgICB2ZWxvY2l0eVggPSBsYXN0LnZlbG9jaXR5WDtcbiAgICB2ZWxvY2l0eVkgPSBsYXN0LnZlbG9jaXR5WTtcbiAgICBkaXJlY3Rpb24gPSBsYXN0LmRpcmVjdGlvbjtcbiAgfVxuXG4gIGlucHV0LnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gIGlucHV0LnZlbG9jaXR5WCA9IHZlbG9jaXR5WDtcbiAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG59XG5cbi8qKlxuKiBAcHJpdmF0ZVxuICogZXh0ZW5kIHRoZSBkYXRhIHdpdGggc29tZSB1c2FibGUgcHJvcGVydGllcyBsaWtlIHNjYWxlLCByb3RhdGUsIHZlbG9jaXR5IGV0Y1xuICogQHBhcmFtIHtPYmplY3R9IG1hbmFnZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpIHtcbiAgdmFyIHNlc3Npb24gPSBtYW5hZ2VyLnNlc3Npb247XG4gIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIHN0b3JlIHRoZSBmaXJzdCBpbnB1dCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGFuZCBkaXJlY3Rpb25cblxuICBpZiAoIXNlc3Npb24uZmlyc3RJbnB1dCkge1xuICAgIHNlc3Npb24uZmlyc3RJbnB1dCA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgfSAvLyB0byBjb21wdXRlIHNjYWxlIGFuZCByb3RhdGlvbiB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBtdWx0aXBsZSB0b3VjaGVzXG5cblxuICBpZiAocG9pbnRlcnNMZW5ndGggPiAxICYmICFzZXNzaW9uLmZpcnN0TXVsdGlwbGUpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gIH0gZWxzZSBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBmaXJzdElucHV0ID0gc2Vzc2lvbi5maXJzdElucHV0LFxuICAgICAgZmlyc3RNdWx0aXBsZSA9IHNlc3Npb24uZmlyc3RNdWx0aXBsZTtcbiAgdmFyIG9mZnNldENlbnRlciA9IGZpcnN0TXVsdGlwbGUgPyBmaXJzdE11bHRpcGxlLmNlbnRlciA6IGZpcnN0SW5wdXQuY2VudGVyO1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyID0gZ2V0Q2VudGVyKHBvaW50ZXJzKTtcbiAgaW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gIGlucHV0LmRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGZpcnN0SW5wdXQudGltZVN0YW1wO1xuICBpbnB1dC5hbmdsZSA9IGdldEFuZ2xlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgaW5wdXQuZGlzdGFuY2UgPSBnZXREaXN0YW5jZShvZmZzZXRDZW50ZXIsIGNlbnRlcik7XG4gIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KTtcbiAgaW5wdXQub2Zmc2V0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgdmFyIG92ZXJhbGxWZWxvY2l0eSA9IGdldFZlbG9jaXR5KGlucHV0LmRlbHRhVGltZSwgaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYID0gb3ZlcmFsbFZlbG9jaXR5Lng7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVkgPSBvdmVyYWxsVmVsb2NpdHkueTtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5ID0gYWJzKG92ZXJhbGxWZWxvY2l0eS54KSA+IGFicyhvdmVyYWxsVmVsb2NpdHkueSkgPyBvdmVyYWxsVmVsb2NpdHkueCA6IG92ZXJhbGxWZWxvY2l0eS55O1xuICBpbnB1dC5zY2FsZSA9IGZpcnN0TXVsdGlwbGUgPyBnZXRTY2FsZShmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAxO1xuICBpbnB1dC5yb3RhdGlvbiA9IGZpcnN0TXVsdGlwbGUgPyBnZXRSb3RhdGlvbihmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAwO1xuICBpbnB1dC5tYXhQb2ludGVycyA9ICFzZXNzaW9uLnByZXZJbnB1dCA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA+IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnM7XG4gIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCk7IC8vIGZpbmQgdGhlIGNvcnJlY3QgdGFyZ2V0XG5cbiAgdmFyIHRhcmdldCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gIHZhciBzcmNFdmVudFRhcmdldDtcblxuICBpZiAoc3JjRXZlbnQuY29tcG9zZWRQYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5jb21wb3NlZFBhdGgoKVswXTtcbiAgfSBlbHNlIGlmIChzcmNFdmVudC5wYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5wYXRoWzBdO1xuICB9IGVsc2Uge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQudGFyZ2V0O1xuICB9XG5cbiAgaWYgKGhhc1BhcmVudChzcmNFdmVudFRhcmdldCwgdGFyZ2V0KSkge1xuICAgIHRhcmdldCA9IHNyY0V2ZW50VGFyZ2V0O1xuICB9XG5cbiAgaW5wdXQudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBoYW5kbGUgaW5wdXQgZXZlbnRzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGlucHV0SGFuZGxlcihtYW5hZ2VyLCBldmVudFR5cGUsIGlucHV0KSB7XG4gIHZhciBwb2ludGVyc0xlbiA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aDtcbiAgdmFyIGNoYW5nZWRQb2ludGVyc0xlbiA9IGlucHV0LmNoYW5nZWRQb2ludGVycy5sZW5ndGg7XG4gIHZhciBpc0ZpcnN0ID0gZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIHZhciBpc0ZpbmFsID0gZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIGlucHV0LmlzRmlyc3QgPSAhIWlzRmlyc3Q7XG4gIGlucHV0LmlzRmluYWwgPSAhIWlzRmluYWw7XG5cbiAgaWYgKGlzRmlyc3QpIHtcbiAgICBtYW5hZ2VyLnNlc3Npb24gPSB7fTtcbiAgfSAvLyBzb3VyY2UgZXZlbnQgaXMgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgb2YgdGhlIGRvbUV2ZW50c1xuICAvLyBsaWtlICd0b3VjaHN0YXJ0LCBtb3VzZXVwLCBwb2ludGVyZG93bidcblxuXG4gIGlucHV0LmV2ZW50VHlwZSA9IGV2ZW50VHlwZTsgLy8gY29tcHV0ZSBzY2FsZSwgcm90YXRpb24gZXRjXG5cbiAgY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCk7IC8vIGVtaXQgc2VjcmV0IGV2ZW50XG5cbiAgbWFuYWdlci5lbWl0KCdoYW1tZXIuaW5wdXQnLCBpbnB1dCk7XG4gIG1hbmFnZXIucmVjb2duaXplKGlucHV0KTtcbiAgbWFuYWdlci5zZXNzaW9uLnByZXZJbnB1dCA9IGlucHV0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzcGxpdCBzdHJpbmcgb24gd2hpdGVzcGFjZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge0FycmF5fSB3b3Jkc1xuICovXG5mdW5jdGlvbiBzcGxpdFN0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltKCkuc3BsaXQoL1xccysvZyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZEV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgd2luZG93IG9iamVjdCBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RG9jdW1lbnRWaWV3fFdpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93Rm9yRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZWxlbWVudDtcbiAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93IHx8IHdpbmRvdztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIElucHV0KG1hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgICB0aGlzLnRhcmdldCA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dFRhcmdldDsgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuXG4gICAgdGhpcy5kb21IYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICBpZiAoYm9vbE9yRm4obWFuYWdlci5vcHRpb25zLmVuYWJsZSwgW21hbmFnZXJdKSkge1xuICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2hvdWxkIGhhbmRsZSB0aGUgaW5wdXRFdmVudCBkYXRhIGFuZCB0cmlnZ2VyIHRoZSBjYWxsYmFja1xuICAgKiBAdmlydHVhbFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBiaW5kIHRoZSBldmVudHNcbiAgICovXG5cblxuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdGhpcy5ldkVsICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZUYXJnZXQgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldldpbiAmJiBhZGRFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgKi9cblxuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldlRhcmdldCAmJiByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2V2luICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4gSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGZpbmQgaWYgYSBhcnJheSBjb250YWlucyB0aGUgb2JqZWN0IHVzaW5nIGluZGV4T2Ygb3IgYSBzaW1wbGUgcG9seUZpbGxcbiAqIEBwYXJhbSB7QXJyYXl9IHNyY1xuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmluZEJ5S2V5XVxuICogQHJldHVybiB7Qm9vbGVhbnxOdW1iZXJ9IGZhbHNlIHdoZW4gbm90IGZvdW5kLCBvciB0aGUgaW5kZXhcbiAqL1xuZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICBpZiAoc3JjLmluZGV4T2YgJiYgIWZpbmRCeUtleSkge1xuICAgIHJldHVybiBzcmMuaW5kZXhPZihmaW5kKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICAgIGlmIChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCB8fCAhZmluZEJ5S2V5ICYmIHNyY1tpXSA9PT0gZmluZCkge1xuICAgICAgICAvLyBkbyBub3QgdXNlID09PSBoZXJlLCB0ZXN0IGZhaWxzXG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG5cbnZhciBQT0lOVEVSX0lOUFVUX01BUCA9IHtcbiAgcG9pbnRlcmRvd246IElOUFVUX1NUQVJULFxuICBwb2ludGVybW92ZTogSU5QVVRfTU9WRSxcbiAgcG9pbnRlcnVwOiBJTlBVVF9FTkQsXG4gIHBvaW50ZXJjYW5jZWw6IElOUFVUX0NBTkNFTCxcbiAgcG9pbnRlcm91dDogSU5QVVRfQ0FOQ0VMXG59OyAvLyBpbiBJRTEwIHRoZSBwb2ludGVyIHR5cGVzIGlzIGRlZmluZWQgYXMgYW4gZW51bVxuXG52YXIgSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSA9IHtcbiAgMjogSU5QVVRfVFlQRV9UT1VDSCxcbiAgMzogSU5QVVRfVFlQRV9QRU4sXG4gIDQ6IElOUFVUX1RZUEVfTU9VU0UsXG4gIDU6IElOUFVUX1RZUEVfS0lORUNUIC8vIHNlZSBodHRwczovL3R3aXR0ZXIuY29tL2phY29icm9zc2kvc3RhdHVzLzQ4MDU5NjQzODQ4OTg5MDgxNlxuXG59O1xudmFyIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAncG9pbnRlcmRvd24nO1xudmFyIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdwb2ludGVybW92ZSBwb2ludGVydXAgcG9pbnRlcmNhbmNlbCc7IC8vIElFMTAgaGFzIHByZWZpeGVkIHN1cHBvcnQsIGFuZCBjYXNlLXNlbnNpdGl2ZVxuXG5pZiAod2luLk1TUG9pbnRlckV2ZW50ICYmICF3aW4uUG9pbnRlckV2ZW50KSB7XG4gIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAnTVNQb2ludGVyRG93bic7XG4gIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCc7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBQb2ludGVyIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cblxudmFyIFBvaW50ZXJFdmVudElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUG9pbnRlckV2ZW50SW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2RWwgPSBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5zdG9yZSA9IF90aGlzLm1hbmFnZXIuc2Vzc2lvbi5wb2ludGVyRXZlbnRzID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICB2YXIgcmVtb3ZlUG9pbnRlciA9IGZhbHNlO1xuICAgIHZhciBldmVudFR5cGVOb3JtYWxpemVkID0gZXYudHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ21zJywgJycpO1xuICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICB2YXIgcG9pbnRlclR5cGUgPSBJRTEwX1BPSU5URVJfVFlQRV9FTlVNW2V2LnBvaW50ZXJUeXBlXSB8fCBldi5wb2ludGVyVHlwZTtcbiAgICB2YXIgaXNUb3VjaCA9IHBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIOyAvLyBnZXQgaW5kZXggb2YgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG4gICAgdmFyIHN0b3JlSW5kZXggPSBpbkFycmF5KHN0b3JlLCBldi5wb2ludGVySWQsICdwb2ludGVySWQnKTsgLy8gc3RhcnQgYW5kIG1vdXNlIG11c3QgYmUgZG93blxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIChldi5idXR0b24gPT09IDAgfHwgaXNUb3VjaCkpIHtcbiAgICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgICAgc3RvcmVJbmRleCA9IHN0b3JlLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgcmVtb3ZlUG9pbnRlciA9IHRydWU7XG4gICAgfSAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcblxuXG4gICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG5cbiAgICBzdG9yZVtzdG9yZUluZGV4XSA9IGV2O1xuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiBwb2ludGVyVHlwZSxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuXG4gICAgaWYgKHJlbW92ZVBvaW50ZXIpIHtcbiAgICAgIC8vIHJlbW92ZSBmcm9tIHRoZSBzdG9yZVxuICAgICAgc3RvcmUuc3BsaWNlKHN0b3JlSW5kZXgsIDEpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUG9pbnRlckV2ZW50SW5wdXQ7XG59KElucHV0KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gcmVhbCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaiwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHVuaXF1ZSBhcnJheSB3aXRoIG9iamVjdHMgYmFzZWQgb24gYSBrZXkgKGxpa2UgJ2lkJykgb3IganVzdCBieSB0aGUgYXJyYXkncyB2YWx1ZVxuICogQHBhcmFtIHtBcnJheX0gc3JjIFt7aWQ6MX0se2lkOjJ9LHtpZDoxfV1cbiAqIEBwYXJhbSB7U3RyaW5nfSBba2V5XVxuICogQHBhcmFtIHtCb29sZWFufSBbc29ydD1GYWxzZV1cbiAqIEByZXR1cm5zIHtBcnJheX0gW3tpZDoxfSx7aWQ6Mn1dXG4gKi9cblxuZnVuY3Rpb24gdW5pcXVlQXJyYXkoc3JjLCBrZXksIHNvcnQpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgdmFyIHZhbCA9IGtleSA/IHNyY1tpXVtrZXldIDogc3JjW2ldO1xuXG4gICAgaWYgKGluQXJyYXkodmFsdWVzLCB2YWwpIDwgMCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHNyY1tpXSk7XG4gICAgfVxuXG4gICAgdmFsdWVzW2ldID0gdmFsO1xuICAgIGkrKztcbiAgfVxuXG4gIGlmIChzb3J0KSB7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYVtrZXldID4gYltrZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbnZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICB0b3VjaG1vdmU6IElOUFVUX01PVkUsXG4gIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG52YXIgVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNdWx0aS11c2VyIHRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIFRvdWNoSW5wdXQucHJvdG90eXBlLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMudGFyZ2V0SWRzID0ge307IC8vIHRoaXMuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRvdWNoSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciB0eXBlID0gVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuICAgIHZhciB0b3VjaGVzID0gZ2V0VG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTtcblxuICAgIGlmICghdG91Y2hlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoSW5wdXQ7XG59KElucHV0KTtcblxuZnVuY3Rpb24gZ2V0VG91Y2hlcyhldiwgdHlwZSkge1xuICB2YXIgYWxsVG91Y2hlcyA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciB0YXJnZXRJZHMgPSB0aGlzLnRhcmdldElkczsgLy8gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSB0b3VjaCwgdGhlIHByb2Nlc3MgY2FuIGJlIHNpbXBsaWZpZWRcblxuICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgdGFyZ2V0SWRzW2FsbFRvdWNoZXNbMF0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgIHJldHVybiBbYWxsVG91Y2hlcywgYWxsVG91Y2hlc107XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIHRhcmdldFRvdWNoZXM7XG4gIHZhciBjaGFuZ2VkVG91Y2hlcyA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpO1xuICB2YXIgY2hhbmdlZFRhcmdldFRvdWNoZXMgPSBbXTtcbiAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0OyAvLyBnZXQgdGFyZ2V0IHRvdWNoZXMgZnJvbSB0b3VjaGVzXG5cbiAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uICh0b3VjaCkge1xuICAgIHJldHVybiBoYXNQYXJlbnQodG91Y2gudGFyZ2V0LCB0YXJnZXQpO1xuICB9KTsgLy8gY29sbGVjdCB0b3VjaGVzXG5cbiAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICBpKys7XG4gICAgfVxuICB9IC8vIGZpbHRlciBjaGFuZ2VkIHRvdWNoZXMgdG8gb25seSBjb250YWluIHRvdWNoZXMgdGhhdCBleGlzdCBpbiB0aGUgY29sbGVjdGVkIHRhcmdldCBpZHNcblxuXG4gIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgY2hhbmdlZFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMucHVzaChjaGFuZ2VkVG91Y2hlc1tpXSk7XG4gICAgfSAvLyBjbGVhbnVwIHJlbW92ZWQgdG91Y2hlc1xuXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIGlmICghY2hhbmdlZFRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIFsvLyBtZXJnZSB0YXJnZXRUb3VjaGVzIHdpdGggY2hhbmdlZFRhcmdldFRvdWNoZXMgc28gaXQgY29udGFpbnMgQUxMIHRvdWNoZXMsIGluY2x1ZGluZyAnZW5kJyBhbmQgJ2NhbmNlbCdcbiAgdW5pcXVlQXJyYXkodGFyZ2V0VG91Y2hlcy5jb25jYXQoY2hhbmdlZFRhcmdldFRvdWNoZXMpLCAnaWRlbnRpZmllcicsIHRydWUpLCBjaGFuZ2VkVGFyZ2V0VG91Y2hlc107XG59XG5cbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gIG1vdXNlZG93bjogSU5QVVRfU1RBUlQsXG4gIG1vdXNlbW92ZTogSU5QVVRfTU9WRSxcbiAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xudmFyIE1PVVNFX0VMRU1FTlRfRVZFTlRTID0gJ21vdXNlZG93bic7XG52YXIgTU9VU0VfV0lORE9XX0VWRU5UUyA9ICdtb3VzZW1vdmUgbW91c2V1cCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNb3VzZSBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgTW91c2VJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKE1vdXNlSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gTW91c2VJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldkVsID0gTU9VU0VfRUxFTUVOVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBNT1VTRV9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5wcmVzc2VkID0gZmFsc2U7IC8vIG1vdXNlZG93biBzdGF0ZVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBvbiBzdGFydCB3ZSB3YW50IHRvIGhhdmUgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGRvd25cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPT09IDApIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX01PVkUgJiYgZXYud2hpY2ggIT09IDEpIHtcbiAgICAgIGV2ZW50VHlwZSA9IElOUFVUX0VORDtcbiAgICB9IC8vIG1vdXNlIG11c3QgYmUgZG93blxuXG5cbiAgICBpZiAoIXRoaXMucHJlc3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBbZXZdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTW91c2VJbnB1dDtcbn0oSW5wdXQpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDb21iaW5lZCB0b3VjaCBhbmQgbW91c2UgaW5wdXRcbiAqXG4gKiBUb3VjaCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhlbiBtb3VzZSwgYW5kIHdoaWxlIHRvdWNoaW5nIG5vIG1vdXNlIGV2ZW50cyBhcmUgYWxsb3dlZC5cbiAqIFRoaXMgYmVjYXVzZSB0b3VjaCBkZXZpY2VzIGFsc28gZW1pdCBtb3VzZSBldmVudHMgd2hpbGUgZG9pbmcgYSB0b3VjaC5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIERFRFVQX1RJTUVPVVQgPSAyNTAwO1xudmFyIERFRFVQX0RJU1RBTkNFID0gMjU7XG5cbmZ1bmN0aW9uIHNldExhc3RUb3VjaChldmVudERhdGEpIHtcbiAgdmFyIF9ldmVudERhdGEkY2hhbmdlZFBvaSA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnMsXG4gICAgICB0b3VjaCA9IF9ldmVudERhdGEkY2hhbmdlZFBvaVswXTtcblxuICBpZiAodG91Y2guaWRlbnRpZmllciA9PT0gdGhpcy5wcmltYXJ5VG91Y2gpIHtcbiAgICB2YXIgbGFzdFRvdWNoID0ge1xuICAgICAgeDogdG91Y2guY2xpZW50WCxcbiAgICAgIHk6IHRvdWNoLmNsaWVudFlcbiAgICB9O1xuICAgIHZhciBsdHMgPSB0aGlzLmxhc3RUb3VjaGVzO1xuICAgIHRoaXMubGFzdFRvdWNoZXMucHVzaChsYXN0VG91Y2gpO1xuXG4gICAgdmFyIHJlbW92ZUxhc3RUb3VjaCA9IGZ1bmN0aW9uIHJlbW92ZUxhc3RUb3VjaCgpIHtcbiAgICAgIHZhciBpID0gbHRzLmluZGV4T2YobGFzdFRvdWNoKTtcblxuICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkVG91Y2hlcyhldmVudFR5cGUsIGV2ZW50RGF0YSkge1xuICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICB0aGlzLnByaW1hcnlUb3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcjtcbiAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KGV2ZW50RGF0YSkge1xuICB2YXIgeCA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRYO1xuICB2YXIgeSA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRZO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sYXN0VG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0ID0gdGhpcy5sYXN0VG91Y2hlc1tpXTtcbiAgICB2YXIgZHggPSBNYXRoLmFicyh4IC0gdC54KTtcbiAgICB2YXIgZHkgPSBNYXRoLmFicyh5IC0gdC55KTtcblxuICAgIGlmIChkeCA8PSBERURVUF9ESVNUQU5DRSAmJiBkeSA8PSBERURVUF9ESVNUQU5DRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgVG91Y2hNb3VzZUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIFRvdWNoTW91c2VJbnB1dCA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9JbnB1dCkge1xuICAgIF9pbmhlcml0c0xvb3NlKFRvdWNoTW91c2VJbnB1dCwgX0lucHV0KTtcblxuICAgIGZ1bmN0aW9uIFRvdWNoTW91c2VJbnB1dChfbWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfSW5wdXQuY2FsbCh0aGlzLCBfbWFuYWdlciwgY2FsbGJhY2spIHx8IHRoaXM7XG5cbiAgICAgIF90aGlzLmhhbmRsZXIgPSBmdW5jdGlvbiAobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBpc1RvdWNoID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIO1xuICAgICAgICB2YXIgaXNNb3VzZSA9IGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9NT1VTRTtcblxuICAgICAgICBpZiAoaXNNb3VzZSAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyB3aGVuIHdlJ3JlIGluIGEgdG91Y2ggZXZlbnQsIHJlY29yZCB0b3VjaGVzIHRvICBkZS1kdXBlIHN5bnRoZXRpYyBtb3VzZSBldmVudFxuXG5cbiAgICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgICByZWNvcmRUb3VjaGVzLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RGF0YSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5jYWxsYmFjayhtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMudG91Y2ggPSBuZXcgVG91Y2hJbnB1dChfdGhpcy5tYW5hZ2VyLCBfdGhpcy5oYW5kbGVyKTtcbiAgICAgIF90aGlzLm1vdXNlID0gbmV3IE1vdXNlSW5wdXQoX3RoaXMubWFuYWdlciwgX3RoaXMuaGFuZGxlcik7XG4gICAgICBfdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgICAgX3RoaXMubGFzdFRvdWNoZXMgPSBbXTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBoYW5kbGUgbW91c2UgYW5kIHRvdWNoIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0RXZlbnRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG5cblxuICAgIHZhciBfcHJvdG8gPSBUb3VjaE1vdXNlSW5wdXQucHJvdG90eXBlO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAqL1xuICAgIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHRoaXMudG91Y2guZGVzdHJveSgpO1xuICAgICAgdGhpcy5tb3VzZS5kZXN0cm95KCk7XG4gICAgfTtcblxuICAgIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG4gIH0oSW5wdXQpO1xuXG4gIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBjYWxsZWQgYnkgdGhlIE1hbmFnZXIgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gIHZhciBUeXBlOyAvLyBsZXQgaW5wdXRDbGFzcyA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dENsYXNzO1xuXG4gIHZhciBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgaWYgKGlucHV0Q2xhc3MpIHtcbiAgICBUeXBlID0gaW5wdXRDbGFzcztcbiAgfSBlbHNlIGlmIChTVVBQT1JUX1BPSU5URVJfRVZFTlRTKSB7XG4gICAgVHlwZSA9IFBvaW50ZXJFdmVudElucHV0O1xuICB9IGVsc2UgaWYgKFNVUFBPUlRfT05MWV9UT1VDSCkge1xuICAgIFR5cGUgPSBUb3VjaElucHV0O1xuICB9IGVsc2UgaWYgKCFTVVBQT1JUX1RPVUNIKSB7XG4gICAgVHlwZSA9IE1vdXNlSW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgVHlwZSA9IFRvdWNoTW91c2VJbnB1dDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZShtYW5hZ2VyLCBpbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZm4gb24gZWFjaCBlbnRyeVxuICogaWYgaXQgYWludCBhbiBhcnJheSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGhpbmcuXG4gKiB0aGlzIGlzIHVzZWQgYnkgYWxsIHRoZSBtZXRob2RzIHRoYXQgYWNjZXB0IGEgc2luZ2xlIGFuZCBhcnJheSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7KnxBcnJheX0gYXJnXG4gKiBAcGFyYW0ge1N0cmluZ30gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF1cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGludm9rZUFycmF5QXJnKGFyZywgZm4sIGNvbnRleHQpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIGVhY2goYXJnLCBjb250ZXh0W2ZuXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBTVEFURV9QT1NTSUJMRSA9IDE7XG52YXIgU1RBVEVfQkVHQU4gPSAyO1xudmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xudmFyIFNUQVRFX0VOREVEID0gODtcbnZhciBTVEFURV9SRUNPR05JWkVEID0gU1RBVEVfRU5ERUQ7XG52YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG52YXIgU1RBVEVfRkFJTEVEID0gMzI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHVuaXF1ZSBpZFxuICogQHJldHVybnMge251bWJlcn0gdW5pcXVlSWRcbiAqL1xudmFyIF91bmlxdWVJZCA9IDE7XG5mdW5jdGlvbiB1bmlxdWVJZCgpIHtcbiAgcmV0dXJuIF91bmlxdWVJZCsrO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSByZWNvZ25pemVyIGJ5IG5hbWUgaWYgaXQgaXMgYm91bmQgdG8gYSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSBvdGhlclJlY29nbml6ZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcn0gcmVjb2duaXplclxuICogQHJldHVybnMge1JlY29nbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCByZWNvZ25pemVyKSB7XG4gIHZhciBtYW5hZ2VyID0gcmVjb2duaXplci5tYW5hZ2VyO1xuXG4gIGlmIChtYW5hZ2VyKSB7XG4gICAgcmV0dXJuIG1hbmFnZXIuZ2V0KG90aGVyUmVjb2duaXplcik7XG4gIH1cblxuICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSB1c2FibGUgc3RyaW5nLCB1c2VkIGFzIGV2ZW50IHBvc3RmaXhcbiAqIEBwYXJhbSB7Y29uc3RhbnR9IHN0YXRlXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdGF0ZVxuICovXG5cbmZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gIGlmIChzdGF0ZSAmIFNUQVRFX0NBTkNFTExFRCkge1xuICAgIHJldHVybiAnY2FuY2VsJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0VOREVEKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQ0hBTkdFRCkge1xuICAgIHJldHVybiAnbW92ZSc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9CRUdBTikge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSZWNvZ25pemVyIGZsb3cgZXhwbGFpbmVkOyAqXG4gKiBBbGwgcmVjb2duaXplcnMgaGF2ZSB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBQT1NTSUJMRSB3aGVuIGEgaW5wdXQgc2Vzc2lvbiBzdGFydHMuXG4gKiBUaGUgZGVmaW5pdGlvbiBvZiBhIGlucHV0IHNlc3Npb24gaXMgZnJvbSB0aGUgZmlyc3QgaW5wdXQgdW50aWwgdGhlIGxhc3QgaW5wdXQsIHdpdGggYWxsIGl0J3MgbW92ZW1lbnQgaW4gaXQuICpcbiAqIEV4YW1wbGUgc2Vzc2lvbiBmb3IgbW91c2UtaW5wdXQ6IG1vdXNlZG93biAtPiBtb3VzZW1vdmUgLT4gbW91c2V1cFxuICpcbiAqIE9uIGVhY2ggcmVjb2duaXppbmcgY3ljbGUgKHNlZSBNYW5hZ2VyLnJlY29nbml6ZSkgdGhlIC5yZWNvZ25pemUoKSBtZXRob2QgaXMgZXhlY3V0ZWRcbiAqIHdoaWNoIGRldGVybWluZXMgd2l0aCBzdGF0ZSBpdCBzaG91bGQgYmUuXG4gKlxuICogSWYgdGhlIHJlY29nbml6ZXIgaGFzIHRoZSBzdGF0ZSBGQUlMRUQsIENBTkNFTExFRCBvciBSRUNPR05JWkVEIChlcXVhbHMgRU5ERUQpLCBpdCBpcyByZXNldCB0b1xuICogUE9TU0lCTEUgdG8gZ2l2ZSBpdCBhbm90aGVyIGNoYW5nZSBvbiB0aGUgbmV4dCBjeWNsZS5cbiAqXG4gKiAgICAgICAgICAgICAgIFBvc3NpYmxlXG4gKiAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgKy0tLS0tKy0tLS0tLS0tLS0tLS0tLStcbiAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgKy0tLS0tKy0tLS0tKyAgICAgICAgICAgICAgIHxcbiAqICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgIHxcbiAqICAgRmFpbGVkICAgICAgQ2FuY2VsbGVkICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0rXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgUmVjb2duaXplZCAgICAgICBCZWdhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kZWQvUmVjb2duaXplZFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJlY29nbml6ZXJcbiAqIEV2ZXJ5IHJlY29nbml6ZXIgbmVlZHMgdG8gZXh0ZW5kIGZyb20gdGhpcyBjbGFzcy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuXG52YXIgUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7XG4gICAgICBlbmFibGU6IHRydWVcbiAgICB9LCBvcHRpb25zKTtcbiAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsOyAvLyBkZWZhdWx0IGlzIGVuYWJsZSB0cnVlXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgdGhpcy5zaW11bHRhbmVvdXMgPSB7fTtcbiAgICB0aGlzLnJlcXVpcmVGYWlsID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1JlY29nbml6ZXJ9XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQob3B0aW9ucykge1xuICAgIGFzc2lnbiQxKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7IC8vIGFsc28gdXBkYXRlIHRoZSB0b3VjaEFjdGlvbiwgaW4gY2FzZSBzb21ldGhpbmcgY2hhbmdlZCBhYm91dCB0aGUgZGlyZWN0aW9ucy9lbmFibGVkIHN0YXRlXG5cbiAgICB0aGlzLm1hbmFnZXIgJiYgdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiByZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzaW11bHRhbmVvdXMgPSB0aGlzLnNpbXVsdGFuZW91cztcbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG5cbiAgICBpZiAoIXNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdKSB7XG4gICAgICBzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSA9IG90aGVyUmVjb2duaXplcjtcbiAgICAgIG90aGVyUmVjb2duaXplci5yZWNvZ25pemVXaXRoKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgc2ltdWx0YW5lb3VzIGxpbmsuIGl0IGRvZXNudCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRyb3BSZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gZHJvcFJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICBkZWxldGUgdGhpcy5zaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlY29nbml6ZXIgY2FuIG9ubHkgcnVuIHdoZW4gYW4gb3RoZXIgaXMgZmFpbGluZ1xuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5yZXF1aXJlRmFpbHVyZSA9IGZ1bmN0aW9uIHJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcblxuICAgIGlmIChpbkFycmF5KHJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpID09PSAtMSkge1xuICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgcmVxdWlyZUZhaWx1cmUgbGluay4gaXQgZG9lcyBub3QgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5kcm9wUmVxdWlyZUZhaWx1cmUgPSBmdW5jdGlvbiBkcm9wUmVxdWlyZUZhaWx1cmUob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgdmFyIGluZGV4ID0gaW5BcnJheSh0aGlzLnJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhcyByZXF1aXJlIGZhaWx1cmVzIGJvb2xlYW5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmhhc1JlcXVpcmVGYWlsdXJlcyA9IGZ1bmN0aW9uIGhhc1JlcXVpcmVGYWlsdXJlcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaWYgdGhlIHJlY29nbml6ZXIgY2FuIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5SZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gY2FuUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gISF0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogWW91IHNob3VsZCB1c2UgYHRyeUVtaXRgIGluc3RlYWQgb2YgYGVtaXRgIGRpcmVjdGx5IHRvIGNoZWNrXG4gICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgc2VsZi5tYW5hZ2VyLmVtaXQoZXZlbnQsIGlucHV0KTtcbiAgICB9IC8vICdwYW5zdGFydCcgYW5kICdwYW5tb3ZlJ1xuXG5cbiAgICBpZiAoc3RhdGUgPCBTVEFURV9FTkRFRCkge1xuICAgICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQgKyBzdGF0ZVN0cihzdGF0ZSkpO1xuICAgIH1cblxuICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgaWYgKGlucHV0LmFkZGl0aW9uYWxFdmVudCkge1xuICAgICAgLy8gYWRkaXRpb25hbCBldmVudChwYW5sZWZ0LCBwYW5yaWdodCwgcGluY2hpbiwgcGluY2hvdXQuLi4pXG4gICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgfSAvLyBwYW5lbmQgYW5kIHBhbmNhbmNlbFxuXG5cbiAgICBpZiAoc3RhdGUgPj0gU1RBVEVfRU5ERUQpIHtcbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgcmVxdWlyZSBmYWlsdXJlIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQsXG4gICAqIGlmIHRydWUsIGl0IGVtaXRzIGEgZ2VzdHVyZSBldmVudCxcbiAgICogb3RoZXJ3aXNlLCBzZXR1cCB0aGUgc3RhdGUgdG8gRkFJTEVELlxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8udHJ5RW1pdCA9IGZ1bmN0aW9uIHRyeUVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5jYW5FbWl0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgIH0gLy8gaXQncyBmYWlsaW5nIGFueXdheVxuXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FuIHdlIGVtaXQ/XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5FbWl0ID0gZnVuY3Rpb24gY2FuRW1pdCgpIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoKSB7XG4gICAgICBpZiAoISh0aGlzLnJlcXVpcmVGYWlsW2ldLnN0YXRlICYgKFNUQVRFX0ZBSUxFRCB8IFNUQVRFX1BPU1NJQkxFKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemUgPSBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgLy8gbWFrZSBhIG5ldyBjb3B5IG9mIHRoZSBpbnB1dERhdGFcbiAgICAvLyBzbyB3ZSBjYW4gY2hhbmdlIHRoZSBpbnB1dERhdGEgd2l0aG91dCBtZXNzaW5nIHVwIHRoZSBvdGhlciByZWNvZ25pemVyc1xuICAgIHZhciBpbnB1dERhdGFDbG9uZSA9IGFzc2lnbiQxKHt9LCBpbnB1dERhdGEpOyAvLyBpcyBpcyBlbmFibGVkIGFuZCBhbGxvdyByZWNvZ25pemluZz9cblxuICAgIGlmICghYm9vbE9yRm4odGhpcy5vcHRpb25zLmVuYWJsZSwgW3RoaXMsIGlucHV0RGF0YUNsb25lXSkpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyByZXNldCB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZFxuXG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9SRUNPR05JWkVEIHwgU1RBVEVfQ0FOQ0VMTEVEIHwgU1RBVEVfRkFJTEVEKSkge1xuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnByb2Nlc3MoaW5wdXREYXRhQ2xvbmUpOyAvLyB0aGUgcmVjb2duaXplciBoYXMgcmVjb2duaXplZCBhIGdlc3R1cmVcbiAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCB8IFNUQVRFX0NBTkNFTExFRCkpIHtcbiAgICAgIHRoaXMudHJ5RW1pdChpbnB1dERhdGFDbG9uZSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgcmVjb2duaXplclxuICAgKiB0aGUgYWN0dWFsIHJlY29nbml6aW5nIGhhcHBlbnMgaW4gdGhpcyBtZXRob2RcbiAgICogQHZpcnR1YWxcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKiBAcmV0dXJucyB7Y29uc3RhbnR9IFNUQVRFXG4gICAqL1xuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cblxuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dERhdGEpIHt9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZXR1cm4gdGhlIHByZWZlcnJlZCB0b3VjaC1hY3Rpb25cbiAgICogQHZpcnR1YWxcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cblxuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYWxsZWQgd2hlbiB0aGUgZ2VzdHVyZSBpc24ndCBhbGxvd2VkIHRvIHJlY29nbml6ZVxuICAgKiBsaWtlIHdoZW4gYW5vdGhlciBpcyBiZWluZyByZWNvZ25pemVkIG9yIGl0IGlzIGRpc2FibGVkXG4gICAqIEB2aXJ0dWFsXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7fTtcblxuICByZXR1cm4gUmVjb2duaXplcjtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQSB0YXAgaXMgcmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvaW5nIGEgc21hbGwgdGFwL2NsaWNrLiBNdWx0aXBsZSB0YXBzIGFyZSByZWNvZ25pemVkIGlmIHRoZXkgb2NjdXJcbiAqIGJldHdlZW4gdGhlIGdpdmVuIGludGVydmFsIGFuZCBwb3NpdGlvbi4gVGhlIGRlbGF5IG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvZ25pemUgbXVsdGktdGFwcyB3aXRob3V0IGZpcmluZ1xuICogYSBzaW5nbGUgdGFwLlxuICpcbiAqIFRoZSBldmVudERhdGEgZnJvbSB0aGUgZW1pdHRlZCBldmVudCBjb250YWlucyB0aGUgcHJvcGVydHkgYHRhcENvdW50YCwgd2hpY2ggY29udGFpbnMgdGhlIGFtb3VudCBvZlxuICogbXVsdGktdGFwcyBiZWluZyByZWNvZ25pemVkLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFRhcFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFRhcFJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBUYXBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAndGFwJyxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgdGFwczogMSxcbiAgICAgIGludGVydmFsOiAzMDAsXG4gICAgICAvLyBtYXggdGltZSBiZXR3ZWVuIHRoZSBtdWx0aS10YXAgdGFwc1xuICAgICAgdGltZTogMjUwLFxuICAgICAgLy8gbWF4IHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgZG93biAobGlrZSBmaW5nZXIgb24gdGhlIHNjcmVlbilcbiAgICAgIHRocmVzaG9sZDogOSxcbiAgICAgIC8vIGEgbWluaW1hbCBtb3ZlbWVudCBpcyBvaywgYnV0IGtlZXAgaXQgbG93XG4gICAgICBwb3NUaHJlc2hvbGQ6IDEwXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7IC8vIHByZXZpb3VzIHRpbWUgYW5kIGNlbnRlcixcbiAgICAvLyB1c2VkIGZvciB0YXAgY291bnRpbmdcblxuICAgIF90aGlzLnBUaW1lID0gZmFsc2U7XG4gICAgX3RoaXMucENlbnRlciA9IGZhbHNlO1xuICAgIF90aGlzLl90aW1lciA9IG51bGw7XG4gICAgX3RoaXMuX2lucHV0ID0gbnVsbDtcbiAgICBfdGhpcy5jb3VudCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRhcFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTl07XG4gIH07XG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgdmFyIHZhbGlkVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgb3B0aW9ucy50aW1lO1xuICAgIHRoaXMucmVzZXQoKTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiB0aGlzLmNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgIH0gLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cblxuICAgIGlmICh2YWxpZE1vdmVtZW50ICYmIHZhbGlkVG91Y2hUaW1lICYmIHZhbGlkUG9pbnRlcnMpIHtcbiAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT09IElOUFVUX0VORCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFsaWRJbnRlcnZhbCA9IHRoaXMucFRpbWUgPyBpbnB1dC50aW1lU3RhbXAgLSB0aGlzLnBUaW1lIDwgb3B0aW9ucy5pbnRlcnZhbCA6IHRydWU7XG4gICAgICB2YXIgdmFsaWRNdWx0aVRhcCA9ICF0aGlzLnBDZW50ZXIgfHwgZ2V0RGlzdGFuY2UodGhpcy5wQ2VudGVyLCBpbnB1dC5jZW50ZXIpIDwgb3B0aW9ucy5wb3NUaHJlc2hvbGQ7XG4gICAgICB0aGlzLnBUaW1lID0gaW5wdXQudGltZVN0YW1wO1xuICAgICAgdGhpcy5wQ2VudGVyID0gaW5wdXQuY2VudGVyO1xuXG4gICAgICBpZiAoIXZhbGlkTXVsdGlUYXAgfHwgIXZhbGlkSW50ZXJ2YWwpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIGlmIHRhcCBjb3VudCBtYXRjaGVzIHdlIGhhdmUgcmVjb2duaXplZCBpdCxcbiAgICAgIC8vIGVsc2UgaXQgaGFzIGJlZ2FuIHJlY29nbml6aW5nLi4uXG5cbiAgICAgIHZhciB0YXBDb3VudCA9IHRoaXMuY291bnQgJSBvcHRpb25zLnRhcHM7XG5cbiAgICAgIGlmICh0YXBDb3VudCA9PT0gMCkge1xuICAgICAgICAvLyBubyBmYWlsaW5nIHJlcXVpcmVtZW50cywgaW1tZWRpYXRlbHkgdHJpZ2dlciB0aGUgdGFwIGV2ZW50XG4gICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZUZhaWx1cmVzKCkpIHtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcblxuICAgICAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgICAgICB9LCBvcHRpb25zLmludGVydmFsKTtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5mYWlsVGltZW91dCA9IGZ1bmN0aW9uIGZhaWxUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LCB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHRoaXMuX2lucHV0LnRhcENvdW50ID0gdGhpcy5jb3VudDtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVGFwUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFRoaXMgcmVjb2duaXplciBpcyBqdXN0IHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgc2ltcGxlIGF0dHJpYnV0ZSByZWNvZ25pemVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBBdHRyUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoQXR0clJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBBdHRyUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFVzZWQgdG8gY2hlY2sgaWYgaXQgdGhlIHJlY29nbml6ZXIgcmVjZWl2ZXMgdmFsaWQgaW5wdXQsIGxpa2UgaW5wdXQuZGlzdGFuY2UgPiAxMC5cbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gcmVjb2duaXplZFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBBdHRyUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICB2YXIgb3B0aW9uUG9pbnRlcnMgPSB0aGlzLm9wdGlvbnMucG9pbnRlcnM7XG4gICAgcmV0dXJuIG9wdGlvblBvaW50ZXJzID09PSAwIHx8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9uUG9pbnRlcnM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICovXG5cblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIHZhciBldmVudFR5cGUgPSBpbnB1dC5ldmVudFR5cGU7XG4gICAgdmFyIGlzUmVjb2duaXplZCA9IHN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCk7XG4gICAgdmFyIGlzVmFsaWQgPSB0aGlzLmF0dHJUZXN0KGlucHV0KTsgLy8gb24gY2FuY2VsIGlucHV0IGFuZCB3ZSd2ZSByZWNvZ25pemVkIGJlZm9yZSwgcmV0dXJuIFNUQVRFX0NBTkNFTExFRFxuXG4gICAgaWYgKGlzUmVjb2duaXplZCAmJiAoZXZlbnRUeXBlICYgSU5QVVRfQ0FOQ0VMIHx8ICFpc1ZhbGlkKSkge1xuICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0FOQ0VMTEVEO1xuICAgIH0gZWxzZSBpZiAoaXNSZWNvZ25pemVkIHx8IGlzVmFsaWQpIHtcbiAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfRU5ERUQ7XG4gICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgcmV0dXJuIEF0dHJSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZGlyZWN0aW9uIGNvbnMgdG8gc3RyaW5nXG4gKiBAcGFyYW0ge2NvbnN0YW50fSBkaXJlY3Rpb25cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZGlyZWN0aW9uU3RyKGRpcmVjdGlvbikge1xuICBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fRE9XTikge1xuICAgIHJldHVybiAnZG93bic7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fVVApIHtcbiAgICByZXR1cm4gJ3VwJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgcmV0dXJuICdsZWZ0JztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9SSUdIVCkge1xuICAgIHJldHVybiAncmlnaHQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQYW5cbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGFuZCBtb3ZlZCBpbiB0aGUgYWxsb3dlZCBkaXJlY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFBhblJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQYW5SZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFBhblJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGFuJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0FMTFxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICAgIF90aGlzLnBYID0gbnVsbDtcbiAgICBfdGhpcy5wWSA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFBhblJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciBhY3Rpb25zID0gW107XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1kpO1xuICAgIH1cblxuICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9O1xuXG4gIF9wcm90by5kaXJlY3Rpb25UZXN0ID0gZnVuY3Rpb24gZGlyZWN0aW9uVGVzdChpbnB1dCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBoYXNNb3ZlZCA9IHRydWU7XG4gICAgdmFyIGRpc3RhbmNlID0gaW5wdXQuZGlzdGFuY2U7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0LmRpcmVjdGlvbjtcbiAgICB2YXIgeCA9IGlucHV0LmRlbHRhWDtcbiAgICB2YXIgeSA9IGlucHV0LmRlbHRhWTsgLy8gbG9jayB0byBheGlzP1xuXG4gICAgaWYgKCEoZGlyZWN0aW9uICYgb3B0aW9ucy5kaXJlY3Rpb24pKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICBkaXJlY3Rpb24gPSB4ID09PSAwID8gRElSRUNUSU9OX05PTkUgOiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgICAgICBoYXNNb3ZlZCA9IHggIT09IHRoaXMucFg7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFYKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IHkgPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG4gICAgICAgIGhhc01vdmVkID0geSAhPT0gdGhpcy5wWTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gaGFzTW92ZWQgJiYgZGlzdGFuY2UgPiBvcHRpb25zLnRocmVzaG9sZCAmJiBkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBBdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKCAvLyByZXBsYWNlIHdpdGggYSBzdXBlciBjYWxsXG4gICAgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOIHx8ICEodGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKSAmJiB0aGlzLmRpcmVjdGlvblRlc3QoaW5wdXQpKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB0aGlzLnBYID0gaW5wdXQuZGVsdGFYO1xuICAgIHRoaXMucFkgPSBpbnB1dC5kZWx0YVk7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5kaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gUGFuUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTd2lwZVxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIG1vdmluZyBmYXN0ICh2ZWxvY2l0eSksIHdpdGggZW5vdWdoIGRpc3RhbmNlIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgU3dpcGVSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoU3dpcGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFN3aXBlUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICB2ZWxvY2l0eTogMC4zLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpcGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciB2ZWxvY2l0eTtcblxuICAgIGlmIChkaXJlY3Rpb24gJiAoRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5WTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiBkaXJlY3Rpb24gJiBpbnB1dC5vZmZzZXREaXJlY3Rpb24gJiYgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmIGlucHV0Lm1heFBvaW50ZXJzID09PSB0aGlzLm9wdGlvbnMucG9pbnRlcnMgJiYgYWJzKHZlbG9jaXR5KSA+IHRoaXMub3B0aW9ucy52ZWxvY2l0eSAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQ7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5vZmZzZXREaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uLCBpbnB1dCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFN3aXBlUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQaW5jaFxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXJzIGFyZSBtb3ZpbmcgdG93YXJkICh6b29tLWluKSBvciBhd2F5IGZyb20gZWFjaCBvdGhlciAoem9vbS1vdXQpLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBQaW5jaFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQaW5jaFJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUGluY2hSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGluY2gnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQaW5jaFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnNjYWxlIC0gMSkgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnNjYWxlICE9PSAxKSB7XG4gICAgICB2YXIgaW5PdXQgPSBpbnB1dC5zY2FsZSA8IDEgPyAnaW4nIDogJ291dCc7XG4gICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICB9XG5cbiAgICBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFBpbmNoUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSb3RhdGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVyIGFyZSBtb3ZpbmcgaW4gYSBjaXJjdWxhciBtb3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFJvdGF0ZVJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShSb3RhdGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFJvdGF0ZVJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdyb3RhdGUnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSb3RhdGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIChNYXRoLmFicyhpbnB1dC5yb3RhdGlvbikgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgcmV0dXJuIFJvdGF0ZVJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUHJlc3NcbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGZvciB4IG1zIHdpdGhvdXQgYW55IG1vdmVtZW50LlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFByZXNzUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUHJlc3NSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUHJlc3NSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncHJlc3MnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0aW1lOiAyNTEsXG4gICAgICAvLyBtaW5pbWFsIHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgcHJlc3NlZFxuICAgICAgdGhyZXNob2xkOiA5XG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gICAgX3RoaXMuX3RpbWVyID0gbnVsbDtcbiAgICBfdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQcmVzc1JlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX0FVVE9dO1xuICB9O1xuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgIHZhciB2YWxpZFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPiBvcHRpb25zLnRpbWU7XG4gICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cbiAgICBpZiAoIXZhbGlkTW92ZW1lbnQgfHwgIXZhbGlkUG9pbnRlcnMgfHwgaW5wdXQuZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgIXZhbGlkVGltZSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG5cbiAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgIH0sIG9wdGlvbnMudGltZSk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpbnB1dCAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIFwidXBcIiwgaW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUHJlc3NSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IGlmIERPTSBldmVudHMgYXJlIGJlaW5nIHRyaWdnZXJlZC5cbiAgICogQnV0IHRoaXMgaXMgc2xvd2VyIGFuZCB1bnVzZWQgYnkgc2ltcGxlIGltcGxlbWVudGF0aW9ucywgc28gZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkb21FdmVudHM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eS9mYWxsYmFjay5cbiAgICogV2hlbiBzZXQgdG8gYGNvbXB1dGVgIGl0IHdpbGwgbWFnaWNhbGx5IHNldCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgYWRkZWQgcmVjb2duaXplcnMuXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqIEBkZWZhdWx0IGNvbXB1dGVcbiAgICovXG4gIHRvdWNoQWN0aW9uOiBUT1VDSF9BQ1RJT05fQ09NUFVURSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGVuYWJsZTogdHJ1ZSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogRVhQRVJJTUVOVEFMIEZFQVRVUkUgLS0gY2FuIGJlIHJlbW92ZWQvY2hhbmdlZFxuICAgKiBDaGFuZ2UgdGhlIHBhcmVudCBpbnB1dCB0YXJnZXQgZWxlbWVudC5cbiAgICogSWYgTnVsbCwgdGhlbiBpdCBpcyBiZWluZyBzZXQgdGhlIHRvIG1haW4gZWxlbWVudC5cbiAgICogQHR5cGUge051bGx8RXZlbnRUYXJnZXR9XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGlucHV0VGFyZ2V0OiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBmb3JjZSBhbiBpbnB1dCBjbGFzc1xuICAgKiBAdHlwZSB7TnVsbHxGdW5jdGlvbn1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5wdXRDbGFzczogbnVsbCxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogU29tZSBDU1MgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB3b3JraW5nIG9mIEhhbW1lci5cbiAgICogQWRkIHRoZW0gdG8gdGhpcyBtZXRob2QgYW5kIHRoZXkgd2lsbCBiZSBzZXQgd2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyLlxuICAgKiBAbmFtZXNwYWNlXG4gICAqL1xuICBjc3NQcm9wczoge1xuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZXMgdGV4dCBzZWxlY3Rpb24gdG8gaW1wcm92ZSB0aGUgZHJhZ2dpbmcgZ2VzdHVyZS4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlclNlbGVjdDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGUgdGhlIFdpbmRvd3MgUGhvbmUgZ3JpcHBlcnMgd2hlbiBwcmVzc2luZyBhbiBlbGVtZW50LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdG91Y2hTZWxlY3Q6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlcyB0aGUgZGVmYXVsdCBjYWxsb3V0IHNob3duIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0LlxuICAgICAqIE9uIGlPUywgd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQgc3VjaCBhcyBhIGxpbmssIFNhZmFyaSBkaXNwbGF5c1xuICAgICAqIGEgY2FsbG91dCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rLiBUaGlzIHByb3BlcnR5IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGF0IGNhbGxvdXQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB0b3VjaENhbGxvdXQ6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB6b29taW5nIGlzIGVuYWJsZWQuIFVzZWQgYnkgSUUxMD5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIGNvbnRlbnRab29taW5nOiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlckRyYWc6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBPdmVycmlkZXMgdGhlIGhpZ2hsaWdodCBjb2xvciBzaG93biB3aGVuIHRoZSB1c2VyIHRhcHMgYSBsaW5rIG9yIGEgSmF2YVNjcmlwdFxuICAgICAqIGNsaWNrYWJsZSBlbGVtZW50IGluIGlPUy4gVGhpcyBwcm9wZXJ0eSBvYmV5cyB0aGUgYWxwaGEgdmFsdWUsIGlmIHNwZWNpZmllZC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdyZ2JhKDAsMCwwLDApJ1xuICAgICAqL1xuICAgIHRhcEhpZ2hsaWdodENvbG9yOiBcInJnYmEoMCwwLDAsMClcIlxuICB9XG59O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogRGVmYXVsdCByZWNvZ25pemVyIHNldHVwIHdoZW4gY2FsbGluZyBgSGFtbWVyKClgXG4gKiBXaGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIgdGhlc2Ugd2lsbCBiZSBza2lwcGVkLlxuICogVGhpcyBpcyBzZXBhcmF0ZWQgd2l0aCBvdGhlciBkZWZhdWx0cyBiZWNhdXNlIG9mIHRyZWUtc2hha2luZy5cbiAqIEB0eXBlIHtBcnJheX1cbiAqL1xuXG52YXIgcHJlc2V0ID0gW1tSb3RhdGVSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn1dLCBbUGluY2hSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn0sIFsncm90YXRlJ11dLCBbU3dpcGVSZWNvZ25pemVyLCB7XG4gIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUxcbn1dLCBbUGFuUmVjb2duaXplciwge1xuICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG59LCBbJ3N3aXBlJ11dLCBbVGFwUmVjb2duaXplcl0sIFtUYXBSZWNvZ25pemVyLCB7XG4gIGV2ZW50OiAnZG91YmxldGFwJyxcbiAgdGFwczogMlxufSwgWyd0YXAnXV0sIFtQcmVzc1JlY29nbml6ZXJdXTtcblxudmFyIFNUT1AgPSAxO1xudmFyIEZPUkNFRF9TVE9QID0gMjtcbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZC9yZW1vdmUgdGhlIGNzcyBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gbWFuYWdlci5vcHRpb25zLmNzc1Byb3BzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYWRkXG4gKi9cblxuZnVuY3Rpb24gdG9nZ2xlQ3NzUHJvcHMobWFuYWdlciwgYWRkKSB7XG4gIHZhciBlbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuXG4gIGlmICghZWxlbWVudC5zdHlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwcm9wO1xuICBlYWNoKG1hbmFnZXIub3B0aW9ucy5jc3NQcm9wcywgZnVuY3Rpb24gKHZhbHVlLCBuYW1lKSB7XG4gICAgcHJvcCA9IHByZWZpeGVkKGVsZW1lbnQuc3R5bGUsIG5hbWUpO1xuXG4gICAgaWYgKGFkZCkge1xuICAgICAgbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSA9IGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSBtYW5hZ2VyLm9sZENzc1Byb3BzW3Byb3BdIHx8IFwiXCI7XG4gICAgfVxuICB9KTtcblxuICBpZiAoIWFkZCkge1xuICAgIG1hbmFnZXIub2xkQ3NzUHJvcHMgPSB7fTtcbiAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdHJpZ2dlciBkb20gZXZlbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqL1xuXG5cbmZ1bmN0aW9uIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSkge1xuICB2YXIgZ2VzdHVyZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgZ2VzdHVyZUV2ZW50LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gIGdlc3R1cmVFdmVudC5nZXN0dXJlID0gZGF0YTtcbiAgZGF0YS50YXJnZXQuZGlzcGF0Y2hFdmVudChnZXN0dXJlRXZlbnQpO1xufVxuLyoqXG4qIEBwcml2YXRlXG4gKiBNYW5hZ2VyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG5cbnZhciBNYW5hZ2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMub3B0aW9ucyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMucmVjb2duaXplcnMgPSBbXTtcbiAgICB0aGlzLm9sZENzc1Byb3BzID0ge307XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmlucHV0ID0gY3JlYXRlSW5wdXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnRvdWNoQWN0aW9uID0gbmV3IFRvdWNoQWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG4gICAgZWFjaCh0aGlzLm9wdGlvbnMucmVjb2duaXplcnMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgcmVjb2duaXplciA9IF90aGlzLmFkZChuZXcgaXRlbVswXShpdGVtWzFdKSk7XG5cbiAgICAgIGl0ZW1bMl0gJiYgcmVjb2duaXplci5yZWNvZ25pemVXaXRoKGl0ZW1bMl0pO1xuICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgYXNzaWduJDEodGhpcy5vcHRpb25zLCBvcHRpb25zKTsgLy8gT3B0aW9ucyB0aGF0IG5lZWQgYSBsaXR0bGUgbW9yZSBzZXR1cFxuXG4gICAgaWYgKG9wdGlvbnMudG91Y2hBY3Rpb24pIHtcbiAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaW5wdXRUYXJnZXQpIHtcbiAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaW5wdXQudGFyZ2V0ID0gb3B0aW9ucy5pbnB1dFRhcmdldDtcbiAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc3RvcCByZWNvZ25pemluZyBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBUaGlzIHNlc3Npb24gd2lsbCBiZSBkaXNjYXJkZWQsIHdoZW4gYSBuZXcgW2lucHV0XXN0YXJ0IGV2ZW50IGlzIGZpcmVkLlxuICAgKiBXaGVuIGZvcmNlZCwgdGhlIHJlY29nbml6ZXIgY3ljbGUgaXMgc3RvcHBlZCBpbW1lZGlhdGVseS5cbiAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VdXG4gICAqL1xuXG5cbiAgX3Byb3RvLnN0b3AgPSBmdW5jdGlvbiBzdG9wKGZvcmNlKSB7XG4gICAgdGhpcy5zZXNzaW9uLnN0b3BwZWQgPSBmb3JjZSA/IEZPUkNFRF9TVE9QIDogU1RPUDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJ1biB0aGUgcmVjb2duaXplcnMhXG4gICAqIGNhbGxlZCBieSB0aGUgaW5wdXRIYW5kbGVyIGZ1bmN0aW9uIG9uIGV2ZXJ5IG1vdmVtZW50IG9mIHRoZSBwb2ludGVycyAodG91Y2hlcylcbiAgICogaXQgd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIHJlY29nbml6ZXJzIGFuZCB0cmllcyB0byBkZXRlY3QgdGhlIGdlc3R1cmUgdGhhdCBpcyBiZWluZyBtYWRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuXG4gICAgaWYgKHNlc3Npb24uc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcnVuIHRoZSB0b3VjaC1hY3Rpb24gcG9seWZpbGxcblxuXG4gICAgdGhpcy50b3VjaEFjdGlvbi5wcmV2ZW50RGVmYXVsdHMoaW5wdXREYXRhKTtcbiAgICB2YXIgcmVjb2duaXplcjtcbiAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzOyAvLyB0aGlzIGhvbGRzIHRoZSByZWNvZ25pemVyIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAvLyBzbyB0aGUgcmVjb2duaXplcidzIHN0YXRlIG5lZWRzIHRvIGJlIEJFR0FOLCBDSEFOR0VELCBFTkRFRCBvciBSRUNPR05JWkVEXG4gICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuXG4gICAgdmFyIGN1clJlY29nbml6ZXIgPSBzZXNzaW9uLmN1clJlY29nbml6ZXI7IC8vIHJlc2V0IHdoZW4gdGhlIGxhc3QgcmVjb2duaXplciBpcyByZWNvZ25pemVkXG4gICAgLy8gb3Igd2hlbiB3ZSdyZSBpbiBhIG5ldyBzZXNzaW9uXG5cbiAgICBpZiAoIWN1clJlY29nbml6ZXIgfHwgY3VyUmVjb2duaXplciAmJiBjdXJSZWNvZ25pemVyLnN0YXRlICYgU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICAgIGN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgcmVjb2duaXplcnMubGVuZ3RoKSB7XG4gICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07IC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgIC8vIDEuICAgYWxsb3cgaWYgdGhlIHNlc3Npb24gaXMgTk9UIGZvcmNlZCBzdG9wcGVkIChzZWUgdGhlIC5zdG9wKCkgbWV0aG9kKVxuICAgICAgLy8gMi4gICBhbGxvdyBpZiB3ZSBzdGlsbCBoYXZlbid0IHJlY29nbml6ZWQgYSBnZXN0dXJlIGluIHRoaXMgc2Vzc2lvbiwgb3IgdGhlIHRoaXMgcmVjb2duaXplciBpcyB0aGUgb25lXG4gICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgIC8vIDMuICAgYWxsb3cgaWYgdGhlIHJlY29nbml6ZXIgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzIHdpdGggdGhlIGN1cnJlbnQgcmVjb2duaXplZCByZWNvZ25pemVyLlxuICAgICAgLy8gICAgICB0aGlzIGNhbiBiZSBzZXR1cCB3aXRoIHRoZSBgcmVjb2duaXplV2l0aCgpYCBtZXRob2Qgb24gdGhlIHJlY29nbml6ZXIuXG5cbiAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQgIT09IEZPUkNFRF9TVE9QICYmICggLy8gMVxuICAgICAgIWN1clJlY29nbml6ZXIgfHwgcmVjb2duaXplciA9PT0gY3VyUmVjb2duaXplciB8fCAvLyAyXG4gICAgICByZWNvZ25pemVyLmNhblJlY29nbml6ZVdpdGgoY3VyUmVjb2duaXplcikpKSB7XG4gICAgICAgIC8vIDNcbiAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemUoaW5wdXREYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29nbml6ZXIucmVzZXQoKTtcbiAgICAgIH0gLy8gaWYgdGhlIHJlY29nbml6ZXIgaGFzIGJlZW4gcmVjb2duaXppbmcgdGhlIGlucHV0IGFzIGEgdmFsaWQgZ2VzdHVyZSwgd2Ugd2FudCB0byBzdG9yZSB0aGlzIG9uZSBhcyB0aGVcbiAgICAgIC8vIGN1cnJlbnQgYWN0aXZlIHJlY29nbml6ZXIuIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBhY3RpdmUgcmVjb2duaXplclxuXG5cbiAgICAgIGlmICghY3VyUmVjb2duaXplciAmJiByZWNvZ25pemVyLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEKSkge1xuICAgICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSByZWNvZ25pemVyO1xuICAgICAgICBjdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGdldCBhIHJlY29nbml6ZXIgYnkgaXRzIGV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TnVsbH1cbiAgICovXG5cblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHJlY29nbml6ZXIpIHtcbiAgICBpZiAocmVjb2duaXplciBpbnN0YW5jZW9mIFJlY29nbml6ZXIpIHtcbiAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgIH1cblxuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVjb2duaXplcnNbaV0ub3B0aW9ucy5ldmVudCA9PT0gcmVjb2duaXplcikge1xuICAgICAgICByZXR1cm4gcmVjb2duaXplcnNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSBhZGQgYSByZWNvZ25pemVyIHRvIHRoZSBtYW5hZ2VyXG4gICAqIGV4aXN0aW5nIHJlY29nbml6ZXJzIHdpdGggdGhlIHNhbWUgZXZlbnQgbmFtZSB3aWxsIGJlIHJlbW92ZWRcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE1hbmFnZXJ9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChyZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsIFwiYWRkXCIsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IC8vIHJlbW92ZSBleGlzdGluZ1xuXG5cbiAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLnJlbW92ZShleGlzdGluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWNvZ25pemVycy5wdXNoKHJlY29nbml6ZXIpO1xuICAgIHJlY29nbml6ZXIubWFuYWdlciA9IHRoaXM7XG4gICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlbW92ZSBhIHJlY29nbml6ZXIgYnkgbmFtZSBvciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgKi9cblxuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhyZWNvZ25pemVyLCBcInJlbW92ZVwiLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFJlY29nbml6ZXIgPSB0aGlzLmdldChyZWNvZ25pemVyKTsgLy8gbGV0J3MgbWFrZSBzdXJlIHRoaXMgcmVjb2duaXplciBleGlzdHNcblxuICAgIGlmIChyZWNvZ25pemVyKSB7XG4gICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuICAgICAgdmFyIGluZGV4ID0gaW5BcnJheShyZWNvZ25pemVycywgdGFyZ2V0UmVjb2duaXplcik7XG5cbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGJpbmQgZXZlbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub24gPSBmdW5jdGlvbiBvbihldmVudHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQgfHwgaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBoYW5kbGVyc1tldmVudF0gPSBoYW5kbGVyc1tldmVudF0gfHwgW107XG4gICAgICBoYW5kbGVyc1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIHVuYmluZCBldmVudCwgbGVhdmUgZW1pdCBibGFuayB0byByZW1vdmUgYWxsIGhhbmRsZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2hhbmRsZXJdXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub2ZmID0gZnVuY3Rpb24gb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVyc1tldmVudF0gJiYgaGFuZGxlcnNbZXZlbnRdLnNwbGljZShpbkFycmF5KGhhbmRsZXJzW2V2ZW50XSwgaGFuZGxlciksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgZGF0YSkge1xuICAgIC8vIHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGRvbSBldmVudHNcbiAgICBpZiAodGhpcy5vcHRpb25zLmRvbUV2ZW50cykge1xuICAgICAgdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKTtcbiAgICB9IC8vIG5vIGhhbmRsZXJzLCBzbyBza2lwIGl0IGFsbFxuXG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzW2V2ZW50XSAmJiB0aGlzLmhhbmRsZXJzW2V2ZW50XS5zbGljZSgpO1xuXG4gICAgaWYgKCFoYW5kbGVycyB8fCAhaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGF0YS50eXBlID0gZXZlbnQ7XG5cbiAgICBkYXRhLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGF0YS5zcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgaGFuZGxlcnNbaV0oZGF0YSk7XG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZGVzdHJveSB0aGUgbWFuYWdlciBhbmQgdW5iaW5kcyBhbGwgZXZlbnRzXG4gICAqIGl0IGRvZXNuJ3QgdW5iaW5kIGRvbSBldmVudHMsIHRoYXQgaXMgdGhlIHVzZXIgb3duIHJlc3BvbnNpYmlsaXR5XG4gICAqL1xuXG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuZWxlbWVudCAmJiB0b2dnbGVDc3NQcm9wcyh0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIE1hbmFnZXI7XG59KCk7XG5cbnZhciBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQID0ge1xuICB0b3VjaHN0YXJ0OiBJTlBVVF9TVEFSVCxcbiAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICB0b3VjaGNhbmNlbDogSU5QVVRfQ0FOQ0VMXG59O1xudmFyIFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQnO1xudmFyIFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcbi8qKlxuICogQHByaXZhdGVcbiAqIFRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBTaW5nbGVUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU2luZ2xlVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBTaW5nbGVUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IFNpbmdsZVRvdWNoSW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2VGFyZ2V0ID0gU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTaW5nbGVUb3VjaElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgdHlwZSA9IFNJTkdMRV9UT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07IC8vIHNob3VsZCB3ZSBoYW5kbGUgdGhlIHRvdWNoIGV2ZW50cz9cblxuICAgIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3VjaGVzID0gbm9ybWFsaXplU2luZ2xlVG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTsgLy8gd2hlbiBkb25lLCByZXNldCB0aGUgc3RhcnRlZCBzdGF0ZVxuXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiB0b3VjaGVzWzBdLmxlbmd0aCAtIHRvdWNoZXNbMV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBTaW5nbGVUb3VjaElucHV0O1xufShJbnB1dCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgdmFyIGFsbCA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciBjaGFuZ2VkID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG5cbiAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgIGFsbCA9IHVuaXF1ZUFycmF5KGFsbC5jb25jYXQoY2hhbmdlZCksICdpZGVudGlmaWVyJywgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gW2FsbCwgY2hhbmdlZF07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdyYXAgYSBtZXRob2Qgd2l0aCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgYW5kIHN0YWNrIHRyYWNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB3cmFwcGluZyB0aGUgc3VwcGxpZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBkZXByZWNhdGUobWV0aG9kLCBuYW1lLCBtZXNzYWdlKSB7XG4gIHZhciBkZXByZWNhdGlvbk1lc3NhZ2UgPSBcIkRFUFJFQ0FURUQgTUVUSE9EOiBcIiArIG5hbWUgKyBcIlxcblwiICsgbWVzc2FnZSArIFwiIEFUIFxcblwiO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICB2YXIgc3RhY2sgPSBlICYmIGUuc3RhY2sgPyBlLnN0YWNrLnJlcGxhY2UoL15bXlxcKF0rP1tcXG4kXS9nbSwgJycpLnJlcGxhY2UoL15cXHMrYXRcXHMrL2dtLCAnJykucmVwbGFjZSgvXk9iamVjdC48YW5vbnltb3VzPlxccypcXCgvZ20sICd7YW5vbnltb3VzfSgpQCcpIDogJ1Vua25vd24gU3RhY2sgVHJhY2UnO1xuICAgIHZhciBsb2cgPSB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUud2FybiB8fCB3aW5kb3cuY29uc29sZS5sb2cpO1xuXG4gICAgaWYgKGxvZykge1xuICAgICAgbG9nLmNhbGwod2luZG93LmNvbnNvbGUsIGRlcHJlY2F0aW9uTWVzc2FnZSwgc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW21lcmdlPWZhbHNlXVxuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG5cbnZhciBleHRlbmQgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYywgbWVyZ2UpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBrZXlzLmxlbmd0aCkge1xuICAgIGlmICghbWVyZ2UgfHwgbWVyZ2UgJiYgZGVzdFtrZXlzW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXN0W2tleXNbaV1dID0gc3JjW2tleXNbaV1dO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufSwgJ2V4dGVuZCcsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgdGhhdCBleGlzdCBpbiBkZXN0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIGJ5IHNyY1xuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xuXG52YXIgbWVyZ2UgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYykge1xuICByZXR1cm4gZXh0ZW5kKGRlc3QsIHNyYywgdHJ1ZSk7XG59LCAnbWVyZ2UnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzaW1wbGUgY2xhc3MgaW5oZXJpdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBiYXNlXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdXG4gKi9cblxuZnVuY3Rpb24gaW5oZXJpdChjaGlsZCwgYmFzZSwgcHJvcGVydGllcykge1xuICB2YXIgYmFzZVAgPSBiYXNlLnByb3RvdHlwZTtcbiAgdmFyIGNoaWxkUDtcbiAgY2hpbGRQID0gY2hpbGQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShiYXNlUCk7XG4gIGNoaWxkUC5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuICBjaGlsZFAuX3N1cGVyID0gYmFzZVA7XG5cbiAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICBhc3NpZ24kMShjaGlsZFAsIHByb3BlcnRpZXMpO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNpbXBsZSBmdW5jdGlvbiBiaW5kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gYmluZEZuKGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBib3VuZEZuKCkge1xuICAgIHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIG1hbmFnZXIgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHJlY29nbml6ZXJzLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIEhhbW1lciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIHZhciBIYW1tZXIgPVxuICAvKipcbiAgICAqIEBwcml2YXRlXG4gICAgKiBAY29uc3Qge3N0cmluZ31cbiAgICAqL1xuICBmdW5jdGlvbiBIYW1tZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hbmFnZXIoZWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgcmVjb2duaXplcnM6IHByZXNldC5jb25jYXQoKVxuICAgIH0sIG9wdGlvbnMpKTtcbiAgfTtcblxuICBIYW1tZXIuVkVSU0lPTiA9IFwiMi4wLjE3LXJjXCI7XG4gIEhhbW1lci5ESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0FMTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9ET1dOID0gRElSRUNUSU9OX0RPV047XG4gIEhhbW1lci5ESVJFQ1RJT05fTEVGVCA9IERJUkVDVElPTl9MRUZUO1xuICBIYW1tZXIuRElSRUNUSU9OX1JJR0hUID0gRElSRUNUSU9OX1JJR0hUO1xuICBIYW1tZXIuRElSRUNUSU9OX1VQID0gRElSRUNUSU9OX1VQO1xuICBIYW1tZXIuRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9WRVJUSUNBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9OT05FID0gRElSRUNUSU9OX05PTkU7XG4gIEhhbW1lci5ESVJFQ1RJT05fRE9XTiA9IERJUkVDVElPTl9ET1dOO1xuICBIYW1tZXIuSU5QVVRfU1RBUlQgPSBJTlBVVF9TVEFSVDtcbiAgSGFtbWVyLklOUFVUX01PVkUgPSBJTlBVVF9NT1ZFO1xuICBIYW1tZXIuSU5QVVRfRU5EID0gSU5QVVRfRU5EO1xuICBIYW1tZXIuSU5QVVRfQ0FOQ0VMID0gSU5QVVRfQ0FOQ0VMO1xuICBIYW1tZXIuU1RBVEVfUE9TU0lCTEUgPSBTVEFURV9QT1NTSUJMRTtcbiAgSGFtbWVyLlNUQVRFX0JFR0FOID0gU1RBVEVfQkVHQU47XG4gIEhhbW1lci5TVEFURV9DSEFOR0VEID0gU1RBVEVfQ0hBTkdFRDtcbiAgSGFtbWVyLlNUQVRFX0VOREVEID0gU1RBVEVfRU5ERUQ7XG4gIEhhbW1lci5TVEFURV9SRUNPR05JWkVEID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgSGFtbWVyLlNUQVRFX0NBTkNFTExFRCA9IFNUQVRFX0NBTkNFTExFRDtcbiAgSGFtbWVyLlNUQVRFX0ZBSUxFRCA9IFNUQVRFX0ZBSUxFRDtcbiAgSGFtbWVyLk1hbmFnZXIgPSBNYW5hZ2VyO1xuICBIYW1tZXIuSW5wdXQgPSBJbnB1dDtcbiAgSGFtbWVyLlRvdWNoQWN0aW9uID0gVG91Y2hBY3Rpb247XG4gIEhhbW1lci5Ub3VjaElucHV0ID0gVG91Y2hJbnB1dDtcbiAgSGFtbWVyLk1vdXNlSW5wdXQgPSBNb3VzZUlucHV0O1xuICBIYW1tZXIuUG9pbnRlckV2ZW50SW5wdXQgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgSGFtbWVyLlRvdWNoTW91c2VJbnB1dCA9IFRvdWNoTW91c2VJbnB1dDtcbiAgSGFtbWVyLlNpbmdsZVRvdWNoSW5wdXQgPSBTaW5nbGVUb3VjaElucHV0O1xuICBIYW1tZXIuUmVjb2duaXplciA9IFJlY29nbml6ZXI7XG4gIEhhbW1lci5BdHRyUmVjb2duaXplciA9IEF0dHJSZWNvZ25pemVyO1xuICBIYW1tZXIuVGFwID0gVGFwUmVjb2duaXplcjtcbiAgSGFtbWVyLlBhbiA9IFBhblJlY29nbml6ZXI7XG4gIEhhbW1lci5Td2lwZSA9IFN3aXBlUmVjb2duaXplcjtcbiAgSGFtbWVyLlBpbmNoID0gUGluY2hSZWNvZ25pemVyO1xuICBIYW1tZXIuUm90YXRlID0gUm90YXRlUmVjb2duaXplcjtcbiAgSGFtbWVyLlByZXNzID0gUHJlc3NSZWNvZ25pemVyO1xuICBIYW1tZXIub24gPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLm9mZiA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIuZWFjaCA9IGVhY2g7XG4gIEhhbW1lci5tZXJnZSA9IG1lcmdlO1xuICBIYW1tZXIuZXh0ZW5kID0gZXh0ZW5kO1xuICBIYW1tZXIuYmluZEZuID0gYmluZEZuO1xuICBIYW1tZXIuYXNzaWduID0gYXNzaWduJDE7XG4gIEhhbW1lci5pbmhlcml0ID0gaW5oZXJpdDtcbiAgSGFtbWVyLmJpbmRGbiA9IGJpbmRGbjtcbiAgSGFtbWVyLnByZWZpeGVkID0gcHJlZml4ZWQ7XG4gIEhhbW1lci50b0FycmF5ID0gdG9BcnJheTtcbiAgSGFtbWVyLmluQXJyYXkgPSBpbkFycmF5O1xuICBIYW1tZXIudW5pcXVlQXJyYXkgPSB1bmlxdWVBcnJheTtcbiAgSGFtbWVyLnNwbGl0U3RyID0gc3BsaXRTdHI7XG4gIEhhbW1lci5ib29sT3JGbiA9IGJvb2xPckZuO1xuICBIYW1tZXIuaGFzUGFyZW50ID0gaGFzUGFyZW50O1xuICBIYW1tZXIuYWRkRXZlbnRMaXN0ZW5lcnMgPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLnJlbW92ZUV2ZW50TGlzdGVuZXJzID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5kZWZhdWx0cyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywge1xuICAgIHByZXNldDogcHJlc2V0XG4gIH0pO1xuICByZXR1cm4gSGFtbWVyO1xufSgpO1xuXG4vLyAgc3R5bGUgbG9hZGVyIGJ1dCBieSBzY3JpcHQgdGFnLCBub3QgYnkgdGhlIGxvYWRlci5cblxudmFyIGRlZmF1bHRzJDEgPSBIYW1tZXIuZGVmYXVsdHM7XG5cbmV4cG9ydCBkZWZhdWx0IEhhbW1lcjtcbmV4cG9ydCB7IElOUFVUX1NUQVJULCBJTlBVVF9NT1ZFLCBJTlBVVF9FTkQsIElOUFVUX0NBTkNFTCwgU1RBVEVfUE9TU0lCTEUsIFNUQVRFX0JFR0FOLCBTVEFURV9DSEFOR0VELCBTVEFURV9FTkRFRCwgU1RBVEVfUkVDT0dOSVpFRCwgU1RBVEVfQ0FOQ0VMTEVELCBTVEFURV9GQUlMRUQsIERJUkVDVElPTl9OT05FLCBESVJFQ1RJT05fTEVGVCwgRElSRUNUSU9OX1JJR0hULCBESVJFQ1RJT05fVVAsIERJUkVDVElPTl9ET1dOLCBESVJFQ1RJT05fSE9SSVpPTlRBTCwgRElSRUNUSU9OX1ZFUlRJQ0FMLCBESVJFQ1RJT05fQUxMLCBNYW5hZ2VyLCBJbnB1dCwgVG91Y2hBY3Rpb24sIFRvdWNoSW5wdXQsIE1vdXNlSW5wdXQsIFBvaW50ZXJFdmVudElucHV0LCBUb3VjaE1vdXNlSW5wdXQsIFNpbmdsZVRvdWNoSW5wdXQsIFJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCBUYXBSZWNvZ25pemVyIGFzIFRhcCwgUGFuUmVjb2duaXplciBhcyBQYW4sIFN3aXBlUmVjb2duaXplciBhcyBTd2lwZSwgUGluY2hSZWNvZ25pemVyIGFzIFBpbmNoLCBSb3RhdGVSZWNvZ25pemVyIGFzIFJvdGF0ZSwgUHJlc3NSZWNvZ25pemVyIGFzIFByZXNzLCBhZGRFdmVudExpc3RlbmVycyBhcyBvbiwgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMgYXMgb2ZmLCBlYWNoLCBtZXJnZSwgZXh0ZW5kLCBhc3NpZ24kMSBhcyBhc3NpZ24sIGluaGVyaXQsIGJpbmRGbiwgcHJlZml4ZWQsIHRvQXJyYXksIGluQXJyYXksIHVuaXF1ZUFycmF5LCBzcGxpdFN0ciwgYm9vbE9yRm4sIGhhc1BhcmVudCwgYWRkRXZlbnRMaXN0ZW5lcnMsIHJlbW92ZUV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0cyQxIGFzIGRlZmF1bHRzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW1tZXIuZXNtLmpzLm1hcFxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbGwnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmlsbDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmlsbCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIi8qKlxuICogdmlzLXV0aWxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqcy92aXMtdXRpbFxuICpcbiAqIHV0aWxpdGllIGNvbGxlY3Rpb24gZm9yIHZpc2pzXG4gKlxuICogQHZlcnNpb24gNS4wLjVcbiAqIEBkYXRlICAgIDIwMjMtMTAtMDNUMTg6NDc6NTguMDYxWlxuICpcbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTEtMjAxNyBBbG1lbmRlIEIuViwgaHR0cDovL2FsbWVuZGUuY29tXG4gKiBAY29weXJpZ2h0IChjKSAyMDE3LTIwMTkgdmlzanMgY29udHJpYnV0b3JzLCBodHRwczovL2dpdGh1Yi5jb20vdmlzanNcbiAqXG4gKiBAbGljZW5zZVxuICogdmlzLmpzIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aFxuICpcbiAqICAgMS4gVGhlIEFwYWNoZSAyLjAgTGljZW5zZVxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgIGFuZFxuICpcbiAqICAgMi4gVGhlIE1JVCBMaWNlbnNlXG4gKiAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiB2aXMuanMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGVpdGhlciBsaWNlbnNlLlxuICovXG5cbmltcG9ydCBFbWl0dGVyIGZyb20gJ2NvbXBvbmVudC1lbWl0dGVyJztcbmltcG9ydCBSZWFsSGFtbWVyIGZyb20gJ0BlZ2pzL2hhbW1lcmpzJztcblxuLyoqXHJcbiAqIFVzZSB0aGlzIHN5bWJvbCB0byBkZWxldGUgcHJvcGVyaWVzIGluIGRlZXBPYmplY3RBc3NpZ24uXHJcbiAqL1xyXG5jb25zdCBERUxFVEUgPSBTeW1ib2woXCJERUxFVEVcIik7XHJcbi8qKlxyXG4gKiBQdXJlIHZlcnNpb24gb2YgZGVlcE9iamVjdEFzc2lnbiwgaXQgZG9lc24ndCBtb2RpZnkgYW55IG9mIGl0J3MgYXJndW1lbnRzLlxyXG4gKlxyXG4gKiBAcGFyYW0gYmFzZSAtIFRoZSBiYXNlIG9iamVjdCB0aGF0IGZ1bGxmaWxzIHRoZSB3aG9sZSBpbnRlcmZhY2UgVC5cclxuICogQHBhcmFtIHVwZGF0ZXMgLSBVcGRhdGVzIHRoYXQgbWF5IGNoYW5nZSBvciBkZWxldGUgcHJvcHMuXHJcbiAqIEByZXR1cm5zIEEgYnJhbmQgbmV3IGluc3RhbmNlIHdpdGggYWxsIHRoZSBzdXBwbGllZCBvYmplY3RzIGRlZXBseSBtZXJnZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwdXJlRGVlcE9iamVjdEFzc2lnbihiYXNlLCAuLi51cGRhdGVzKSB7XHJcbiAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbih7fSwgYmFzZSwgLi4udXBkYXRlcyk7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgdmVyc2lvbiBvZiBvYmplY3QgYXNzaWduIHdpdGggYWRkaXRpb25hbCBkZWxldGluZyBieSB0aGUgREVMRVRFIHN5bWJvbC5cclxuICpcclxuICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdHMgdG8gYmUgZGVlcGx5IG1lcmdlZC5cclxuICogQHJldHVybnMgVGhlIGZpcnN0IG9iamVjdCBmcm9tIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBPYmplY3RBc3NpZ24oLi4udmFsdWVzKSB7XHJcbiAgICBjb25zdCBtZXJnZWQgPSBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKTtcclxuICAgIHN0cmlwRGVsZXRlKG1lcmdlZCk7XHJcbiAgICByZXR1cm4gbWVyZ2VkO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIHZlcnNpb24gb2Ygb2JqZWN0IGFzc2lnbiB3aXRoIGFkZGl0aW9uYWwgZGVsZXRpbmcgYnkgdGhlIERFTEVURSBzeW1ib2wuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoaXMgZG9lc24ndCBzdHJpcCB0aGUgREVMRVRFIHN5bWJvbHMgc28gdGhleSBtYXkgZW5kIHVwIGluIHRoZSBmaW5hbCBvYmplY3QuXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3RzIHRvIGJlIGRlZXBseSBtZXJnZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBvYmplY3QgZnJvbSB2YWx1ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKSB7XHJcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KGRlZXBPYmplY3RBc3NpZ24odmFsdWVzWzBdLCB2YWx1ZXNbMV0pLCAuLi52YWx1ZXMuc2xpY2UoMikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYSA9IHZhbHVlc1swXTtcclxuICAgIGNvbnN0IGIgPSB2YWx1ZXNbMV07XHJcbiAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICBhLnNldFRpbWUoYi5nZXRUaW1lKCkpO1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIFJlZmxlY3Qub3duS2V5cyhiKSkge1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGIsIHByb3ApKSA7XHJcbiAgICAgICAgZWxzZSBpZiAoYltwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIGJbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGJbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYVtwcm9wXSkgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeShhW3Byb3BdLCBiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBjbG9uZShiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRGVlcCBjbG9uZSBnaXZlbiBvYmplY3Qgb3IgYXJyYXkuIEluIGNhc2Ugb2YgcHJpbWl0aXZlIHNpbXBseSByZXR1cm4uXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gQW55dGhpbmcuXHJcbiAqIEByZXR1cm5zIERlZXAgY2xvbmVkIG9iamVjdC9hcnJheSBvciB1bmNoYW5nZWQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGNsb25lKGEpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIGEubWFwKCh2YWx1ZSkgPT4gY2xvbmUodmFsdWUpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBhID09PSBcIm9iamVjdFwiICYmIGEgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGEuZ2V0VGltZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSh7fSwgYSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogU3RyaXAgREVMRVRFIGZyb20gZ2l2ZW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIE9iamVjdCB3aGljaCBtYXkgY29udGFpbiBERUxFVEUgYnV0IHdvbid0IGFmdGVyIHRoaXMgaXMgZXhlY3V0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBzdHJpcERlbGV0ZShhKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoYSkpIHtcclxuICAgICAgICBpZiAoYVtwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJiBhW3Byb3BdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHN0cmlwRGVsZXRlKGFbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG4vKipcclxuICogU2VlZGFibGUsIGZhc3QgYW5kIHJlYXNvbmFibHkgZ29vZCAobm90IGNyeXB0byBidXQgbW9yZSB0aGFuIG9rYXkgZm9yIG91clxyXG4gKiBuZWVkcykgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIEFkYXB0ZWQgZnJvbSB7QGxpbmsgaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTEwNDI5MTAwNzM2L2h0dHA6Ly9iYWFnb2UuY29tOjgwL2VuL1JhbmRvbU11c2luZ3MvamF2YXNjcmlwdH0uXHJcbiAqIE9yaWdpbmFsIGFsZ29yaXRobSBjcmVhdGVkIGJ5IEpvaGFubmVzIEJhYWfDuGUgXFw8YmFhZ29lXFxAYmFhZ29lLmNvbVxcPiBpbiAyMDEwLlxyXG4gKi9cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIGdlbmVyYXRvciBiYXNlZCBvbiBBbGVhIGJ5IEpvaGFubmVzIEJhYWfDuGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gQWxsIHN1cHBsaWVkIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWQgYXMgYSBzZWVkLiBJbiBjYXNlIG5vdGhpbmdcclxuICogaXMgc3VwcGxpZWQgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJucyBBIHJlYWR5IHRvIHVzZSBzZWVkZWQgZ2VuZXJhdG9yLlxyXG4gKi9cclxuZnVuY3Rpb24gQWxlYSguLi5zZWVkKSB7XHJcbiAgICByZXR1cm4gQWxlYUltcGxlbWVudGF0aW9uKHNlZWQubGVuZ3RoID8gc2VlZCA6IFtEYXRlLm5vdygpXSk7XHJcbn1cclxuLyoqXHJcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIFtbQWxlYV1dIHdpdGhvdXQgdXNlciBpbnB1dCB2YWxpZGF0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIFRoZSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIGdlbmVyYXRvci5cclxuICogQHJldHVybnMgQSByZWFkeSB0byB1c2Ugc2VlZGVkIGdlbmVyYXRvci5cclxuICovXHJcbmZ1bmN0aW9uIEFsZWFJbXBsZW1lbnRhdGlvbihzZWVkKSB7XHJcbiAgICBsZXQgW3MwLCBzMSwgczJdID0gbWFzaFNlZWQoc2VlZCk7XHJcbiAgICBsZXQgYyA9IDE7XHJcbiAgICBjb25zdCByYW5kb20gPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxyXG4gICAgICAgIHMwID0gczE7XHJcbiAgICAgICAgczEgPSBzMjtcclxuICAgICAgICByZXR1cm4gKHMyID0gdCAtIChjID0gdCB8IDApKTtcclxuICAgIH07XHJcbiAgICByYW5kb20udWludDMyID0gKCkgPT4gcmFuZG9tKCkgKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgcmFuZG9tLmZyYWN0NTMgPSAoKSA9PiByYW5kb20oKSArICgocmFuZG9tKCkgKiAweDIwMDAwMCkgfCAwKSAqIDEuMTEwMjIzMDI0NjI1MTU2NWUtMTY7IC8vIDJeLTUzXHJcbiAgICByYW5kb20uYWxnb3JpdGhtID0gXCJBbGVhXCI7XHJcbiAgICByYW5kb20uc2VlZCA9IHNlZWQ7XHJcbiAgICByYW5kb20udmVyc2lvbiA9IFwiMC45XCI7XHJcbiAgICByZXR1cm4gcmFuZG9tO1xyXG59XHJcbi8qKlxyXG4gKiBUdXJuIGFyYml0cmFyeSBkYXRhIGludG8gdmFsdWVzIFtbQWxlYUltcGxlbWVudGF0aW9uXV0gY2FuIHVzZSB0byBnZW5lcmF0ZVxyXG4gKiByYW5kb20gbnVtYmVycy5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBBcmJpdHJhcnkgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgc2VlZC5cclxuICogQHJldHVybnMgVGhyZWUgbnVtYmVycyB0byB1c2UgYXMgaW5pdGlhbCB2YWx1ZXMgZm9yIFtbQWxlYUltcGxlbWVudGF0aW9uXV0uXHJcbiAqL1xyXG5mdW5jdGlvbiBtYXNoU2VlZCguLi5zZWVkKSB7XHJcbiAgICBjb25zdCBtYXNoID0gTWFzaCgpO1xyXG4gICAgbGV0IHMwID0gbWFzaChcIiBcIik7XHJcbiAgICBsZXQgczEgPSBtYXNoKFwiIFwiKTtcclxuICAgIGxldCBzMiA9IG1hc2goXCIgXCIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgczAgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczAgPCAwKSB7XHJcbiAgICAgICAgICAgIHMwICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMxIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMxIDwgMCkge1xyXG4gICAgICAgICAgICBzMSArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzMiAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMiA8IDApIHtcclxuICAgICAgICAgICAgczIgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW3MwLCBzMSwgczJdO1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWFzaCBmdW5jdGlvbi5cclxuICpcclxuICogQHJldHVybnMgQSBub25wdXJlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYXJiaXRyYXJ5IFtbTWFzaGFibGVdXSBkYXRhIGFuZCB0dXJuc1xyXG4gKiB0aGVtIGludG8gbnVtYmVycy5cclxuICovXHJcbmZ1bmN0aW9uIE1hc2goKSB7XHJcbiAgICBsZXQgbiA9IDB4ZWZjODI0OWQ7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICBjb25zdCBzdHJpbmcgPSBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbiArPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgbGV0IGggPSAwLjAyNTE5NjAzMjgyNDE2OTM4ICogbjtcclxuICAgICAgICAgICAgbiA9IGggPj4+IDA7XHJcbiAgICAgICAgICAgIGggLT0gbjtcclxuICAgICAgICAgICAgaCAqPSBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBuICs9IGggKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcclxuICAgIH07XHJcbn1cblxuLyoqXG4gKiBTZXR1cCBhIG1vY2sgaGFtbWVyLmpzIG9iamVjdCwgZm9yIHVuaXQgdGVzdGluZy5cbiAqXG4gKiBJbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3ViZXIvZGVjay5nbC9wdWxsLzY1OFxuICpcbiAqIEByZXR1cm5zIHt7b246IG5vb3AsIG9mZjogbm9vcCwgZGVzdHJveTogbm9vcCwgZW1pdDogbm9vcCwgZ2V0OiBnZXR9fVxuICovXG5mdW5jdGlvbiBoYW1tZXJNb2NrKCkge1xuICBjb25zdCBub29wID0gKCkgPT4ge307XG5cbiAgcmV0dXJuIHtcbiAgICBvbjogbm9vcCxcbiAgICBvZmY6IG5vb3AsXG4gICAgZGVzdHJveTogbm9vcCxcbiAgICBlbWl0OiBub29wLFxuXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0OiBub29wLFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBIYW1tZXIkMSA9XG4gIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IHdpbmRvdy5IYW1tZXIgfHwgUmVhbEhhbW1lclxuICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBoYW1tZXIuanMgaXMgb25seSBhdmFpbGFibGUgaW4gYSBicm93c2VyLCBub3QgaW4gbm9kZS5qcy4gUmVwbGFjaW5nIGl0IHdpdGggYSBtb2NrIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIGhhbW1lck1vY2soKTtcbiAgICAgIH07XG5cbi8qKlxuICogVHVybiBhbiBlbGVtZW50IGludG8gYW4gY2xpY2tUb1VzZSBlbGVtZW50LlxuICogV2hlbiBub3QgYWN0aXZlLCB0aGUgZWxlbWVudCBoYXMgYSB0cmFuc3BhcmVudCBvdmVybGF5LiBXaGVuIHRoZSBvdmVybGF5IGlzXG4gKiBjbGlja2VkLCB0aGUgbW9kZSBpcyBjaGFuZ2VkIHRvIGFjdGl2ZS5cbiAqIFdoZW4gYWN0aXZlLCB0aGUgZWxlbWVudCBpcyBkaXNwbGF5ZWQgd2l0aCBhIGJsdWUgYm9yZGVyIGFyb3VuZCBpdCwgYW5kXG4gKiB0aGUgaW50ZXJhY3RpdmUgY29udGVudHMgb2YgdGhlIGVsZW1lbnQgY2FuIGJlIHVzZWQuIFdoZW4gY2xpY2tlZCBvdXRzaWRlXG4gKiB0aGUgZWxlbWVudCwgdGhlIGVsZW1lbnRzIG1vZGUgaXMgY2hhbmdlZCB0byBpbmFjdGl2ZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lclxuICogQGNsYXNzIEFjdGl2YXRvclxuICovXG5mdW5jdGlvbiBBY3RpdmF0b3IkMShjb250YWluZXIpIHtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlID0gW107XG5cbiAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuICB0aGlzLl9kb20gPSB7XG4gICAgY29udGFpbmVyLFxuICAgIG92ZXJsYXk6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gIH07XG5cbiAgdGhpcy5fZG9tLm92ZXJsYXkuY2xhc3NMaXN0LmFkZChcInZpcy1vdmVybGF5XCIpO1xuXG4gIHRoaXMuX2RvbS5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZG9tLm92ZXJsYXkpO1xuICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgdGhpcy5fZG9tLm92ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIH0pO1xuXG4gIGNvbnN0IGhhbW1lciA9IEhhbW1lciQxKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgaGFtbWVyLm9uKFwidGFwXCIsIHRoaXMuX29uVGFwT3ZlcmxheS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgIGhhbW1lci5kZXN0cm95KCk7XG4gICAgLy8gRklYTUU6IGNsZWFuaW5nIHVwIGhhbW1lciBpbnN0YW5jZXMgZG9lc24ndCB3b3JrIChUaW1lbGluZSBub3QgcmVtb3ZlZFxuICAgIC8vIGZyb20gbWVtb3J5KVxuICB9KTtcblxuICAvLyBibG9jayBhbGwgdG91Y2ggZXZlbnRzIChleGNlcHQgdGFwKVxuICBjb25zdCBldmVudHMgPSBbXG4gICAgXCJ0YXBcIixcbiAgICBcImRvdWJsZXRhcFwiLFxuICAgIFwicHJlc3NcIixcbiAgICBcInBpbmNoXCIsXG4gICAgXCJwYW5cIixcbiAgICBcInBhbnN0YXJ0XCIsXG4gICAgXCJwYW5tb3ZlXCIsXG4gICAgXCJwYW5lbmRcIixcbiAgXTtcbiAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgaGFtbWVyLm9uKGV2ZW50LCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBhdHRhY2ggYSBjbGljayBldmVudCB0byB0aGUgd2luZG93LCBpbiBvcmRlciB0byBkZWFjdGl2YXRlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSB0aGUgdGltZWxpbmVcbiAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmJvZHkpIHtcbiAgICB0aGlzLl9vbkNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIV9oYXNQYXJlbnQoZXZlbnQudGFyZ2V0LCBjb250YWluZXIpKSB7XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBwcmVwYXJlIGVzY2FwZSBrZXkgbGlzdGVuZXIgZm9yIGRlYWN0aXZhdGluZyB3aGVuIGFjdGl2ZVxuICB0aGlzLl9lc2NMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIFwia2V5XCIgaW4gZXZlbnRcbiAgICAgICAgPyBldmVudC5rZXkgPT09IFwiRXNjYXBlXCJcbiAgICAgICAgOiBldmVudC5rZXlDb2RlID09PSAyNyAvKiB0aGUga2V5Q29kZSBpcyBmb3IgSUUxMSAqL1xuICAgICkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgfVxuICB9O1xufVxuXG4vLyB0dXJuIGludG8gYW4gZXZlbnQgZW1pdHRlclxuRW1pdHRlcihBY3RpdmF0b3IkMS5wcm90b3R5cGUpO1xuXG4vLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBhY3RpdmF0b3JcbkFjdGl2YXRvciQxLmN1cnJlbnQgPSBudWxsO1xuXG4vKipcbiAqIERlc3Ryb3kgdGhlIGFjdGl2YXRvci4gQ2xlYW5zIHVwIGFsbCBjcmVhdGVkIERPTSBhbmQgZXZlbnQgbGlzdGVuZXJzXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmRlYWN0aXZhdGUoKTtcblxuICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2NsZWFudXBRdWV1ZS5zcGxpY2UoMCkucmV2ZXJzZSgpKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBoaWRkZW4sIGVsZW1lbnQgaXMgZGVjb3JhdGVkIHdpdGggYSBibHVlIHNoYWRvdyBib3JkZXJcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICAvLyB3ZSBhbGxvdyBvbmx5IG9uZSBhY3RpdmUgYWN0aXZhdG9yIGF0IGEgdGltZVxuICBpZiAoQWN0aXZhdG9yJDEuY3VycmVudCkge1xuICAgIEFjdGl2YXRvciQxLmN1cnJlbnQuZGVhY3RpdmF0ZSgpO1xuICB9XG4gIEFjdGl2YXRvciQxLmN1cnJlbnQgPSB0aGlzO1xuXG4gIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgdGhpcy5fZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ2aXMtYWN0aXZlXCIpO1xuXG4gIHRoaXMuZW1pdChcImNoYW5nZVwiKTtcbiAgdGhpcy5lbWl0KFwiYWN0aXZhdGVcIik7XG5cbiAgLy8gdWdseSBoYWNrOiBiaW5kIEVTQyBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnRzLCBhcyB0aGUgTmV0d29yayByZWJpbmRzIGFsbFxuICAvLyBrZXlib2FyZCBldmVudHMgb24gYSAnY2hhbmdlJyBldmVudFxuICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24gdG9wIG9mIHRoZSBlbGVtZW50XG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB0aGlzLl9kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJ2aXMtYWN0aXZlXCIpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcblxuICB0aGlzLmVtaXQoXCJjaGFuZ2VcIik7XG4gIHRoaXMuZW1pdChcImRlYWN0aXZhdGVcIik7XG59O1xuXG4vKipcbiAqIEhhbmRsZSBhIHRhcCBldmVudDogYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLl9vblRhcE92ZXJsYXkgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICB0aGlzLmFjdGl2YXRlKCk7XG4gIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIHRoZSByZXF1ZXN0ZWQgcGFyZW50IGVsZW1lbnQgc29tZXdoZXJlIGluXG4gKiBpdHMgY2hhaW4gb2YgcGFyZW50IG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwYXJlbnQgaXMgZm91bmQgc29tZXdoZXJlIGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgIGNoYWluIG9mIHBhcmVudCBub2Rlcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9oYXNQYXJlbnQoZWxlbWVudCwgcGFyZW50KSB7XG4gIHdoaWxlIChlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyB1dGlsaXR5IGZ1bmN0aW9uc1xyXG4vLyBwYXJzZSBBU1AuTmV0IERhdGUgcGF0dGVybixcclxuLy8gZm9yIGV4YW1wbGUgJy9EYXRlKDExOTg5MDg3MTcwNTYpLycgb3IgJy9EYXRlKDExOTg5MDg3MTcwNTYtMDcwMCkvJ1xyXG4vLyBjb2RlIGZyb20gaHR0cDovL21vbWVudGpzLmNvbS9cclxuY29uc3QgQVNQRGF0ZVJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2k7XHJcbi8vIENvbG9yIFJFc1xyXG5jb25zdCBmdWxsSGV4UkUgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pO1xyXG5jb25zdCBzaG9ydEhleFJFID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcclxuY29uc3QgcmdiUkUgPSAvXnJnYlxcKCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqXFwpJC9pO1xyXG5jb25zdCByZ2JhUkUgPSAvXnJnYmFcXCggKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKihbMDFdfDA/XFwuXFxkKykgKlxcKSQvaTtcclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBudW1iZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBudW1iZXIsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgZXZlcnl0aGluZyBpbiB0aGUgRE9NIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIERPTW9iamVjdCAtIE5vZGUgd2hvc2UgY2hpbGQgbm9kZXMgd2lsbCBiZSByZWN1cnNpdmVseSBkZWxldGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVjdXJzaXZlRE9NRGVsZXRlKERPTW9iamVjdCkge1xyXG4gICAgaWYgKERPTW9iamVjdCkge1xyXG4gICAgICAgIHdoaWxlIChET01vYmplY3QuaGFzQ2hpbGROb2RlcygpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gRE9Nb2JqZWN0LmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlRE9NRGVsZXRlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIERPTW9iamVjdC5yZW1vdmVDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgb2JqZWN0IChub3QgcHJpbWl0aXZlIG9yIG51bGwpLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgbm90IG51bGwgb2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIERhdGUsIG9yIGEgU3RyaW5nIGNvbnRhaW5pbmcgYSBEYXRlLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgRGF0ZSBpbnN0YW5jZSBvciBzdHJpbmcgZGF0ZSByZXByZXNlbnRhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAvLyB0ZXN0IHdoZXRoZXIgdGhpcyBzdHJpbmcgY29udGFpbnMgYSBkYXRlXHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBBU1BEYXRlUmVnZXguZXhlYyh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG4vKipcclxuICogQ29weSBwcm9wZXJ0eSBmcm9tIGIgdG8gYSBpZiBwcm9wZXJ0eSBwcmVzZW50IGluIGEuXHJcbiAqIElmIHByb3BlcnR5IGluIGIgZXhwbGljaXRseSBzZXQgdG8gbnVsbCwgZGVsZXRlIGl0IGlmIGBhbGxvd0RlbGV0aW9uYCBzZXQuXHJcbiAqXHJcbiAqIEludGVybmFsIGhlbHBlciByb3V0aW5lLCBzaG91bGQgbm90IGJlIGV4cG9ydGVkLiBOb3QgYWRkZWQgdG8gYGV4cG9ydHNgIGZvciB0aGF0IHJlYXNvbi5cclxuICpcclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBwcm9wIC0gTmFtZSBvZiBwcm9wZXJ0eSB0byBjb3B5IGZyb20gYiB0byBhLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKSB7XHJcbiAgICBsZXQgZG9EZWxldGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUpIHtcclxuICAgICAgICBkb0RlbGV0aW9uID0gYltwcm9wXSA9PT0gbnVsbCAmJiBhW3Byb3BdICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoZG9EZWxldGlvbikge1xyXG4gICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF07IC8vIFJlbWVtYmVyLCB0aGlzIGlzIGEgcmVmZXJlbmNlIGNvcHkhXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEZpbGwgYW4gb2JqZWN0IHdpdGggYSBwb3NzaWJseSBwYXJ0aWFsbHkgZGVmaW5lZCBvdGhlciBvYmplY3QuXHJcbiAqXHJcbiAqIE9ubHkgY29waWVzIHZhbHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgYWxyZWFkeSBwcmVzZW50IGluIGEuXHJcbiAqIFRoYXQgbWVhbnMgYW4gb2JqZWN0IGlzIG5vdCBjcmVhdGVkIG9uIGEgcHJvcGVydHkgaWYgb25seSB0aGUgYiBvYmplY3QgaGFzIGl0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBvYmplY3QgdGhhdCB3aWxsIGhhdmUgaXQncyBwcm9wZXJ0aWVzIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSBiIC0gVGhlIG9iamVjdCB3aXRoIHByb3BlcnR5IHVwZGF0ZXMuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnRpZXMgaW4gYSB0aGF0IGFyZSBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqL1xyXG5mdW5jdGlvbiBmaWxsSWZEZWZpbmVkKGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gTk9URTogaXRlcmF0aW9uIG9mIHByb3BlcnRpZXMgb2YgYVxyXG4gICAgLy8gTk9URTogcHJvdG90eXBlIHByb3BlcnRpZXMgaXRlcmF0ZWQgb3ZlciBhcyB3ZWxsXHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYSkge1xyXG4gICAgICAgIGlmIChiW3Byb3BdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGJbcHJvcF0gPT09IG51bGwgfHwgdHlwZW9mIGJbcHJvcF0gIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIE5vdGU6IHR5cGVvZiBudWxsID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYVByb3AgPSBhW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYlByb3AgPSBiW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGFQcm9wKSAmJiBpc09iamVjdChiUHJvcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsSWZEZWZpbmVkKGFQcm9wLCBiUHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhXHJcbiAqIHRhcmdldCBvYmplY3QuIFJldHVybnMgdGhlIHRhcmdldCBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxyXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXHJcbiAqIEByZXR1cm5zIFRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gKi9cclxuY29uc3QgZXh0ZW5kID0gT2JqZWN0LmFzc2lnbjtcclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIgb3IgYSBzZXJpZXMgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHJlbWFya3NcclxuICogT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICogQHBhcmFtIHByb3BzIC0gUHJvcGVydGllcyB0byBiZSBjb3BpZWQgdG8gYS5cclxuICogQHBhcmFtIGEgLSBUaGUgdGFyZ2V0LlxyXG4gKiBAcGFyYW0gb3RoZXJzIC0gVGhlIHNvdXJjZXMuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVFeHRlbmQocHJvcHMsIGEsIC4uLm90aGVycykge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFycmF5IHdpdGggcHJvcGVydHkgbmFtZXMgZXhwZWN0ZWQgYXMgZmlyc3QgYXJndW1lbnRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG90aGVyIG9mIG90aGVycykge1xyXG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW3BdO1xyXG4gICAgICAgICAgICBpZiAob3RoZXIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBwcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IG90aGVyW3Byb3BdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWQgdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyByb3V0aW5lIGltcGxpZWQgdGhhdCBtdWx0aXBsZSBzb3VyY2Ugb2JqZWN0cyBjb3VsZFxyXG4gKiBiZSB1c2VkOyBob3dldmVyLCB0aGUgaW1wbGVtZW50YXRpb24gd2FzICoqd3JvbmcqKi4gU2luY2UgbXVsdGlwbGUgKFxcPjEpXHJcbiAqIHNvdXJjZXMgd2VyZW4ndCB1c2VkIGFueXdoZXJlIGluIHRoZSBgdmlzLmpzYCBjb2RlLCB0aGlzIGhhcyBiZWVuIHJlbW92ZWRcclxuICogQHBhcmFtIHByb3BzIC0gTmFtZXMgb2YgZmlyc3QtbGV2ZWwgcHJvcGVydGllcyB0byBjb3B5IG92ZXIuXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZURlZXBFeHRlbmQocHJvcHMsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbcF07XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSkge1xyXG4gICAgICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBmYWxzZSwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYGFgIHdpdGggcHJvcGVydGllcyBvZiBvYmplY3QgYGJgLCBpZ25vcmluZyBwcm9wZXJ0aWVzIHdoaWNoXHJcbiAqIGFyZSBleHBsaWNpdGx5IHNwZWNpZmllZCB0byBiZSBleGNsdWRlZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhlIHByb3BlcnRpZXMgb2YgYGJgIGFyZSBjb25zaWRlcmVkIGZvciBjb3B5aW5nLiBQcm9wZXJ0aWVzIHdoaWNoIGFyZVxyXG4gKiB0aGVtc2VsdmVzIG9iamVjdHMgYXJlIGFyZSBhbHNvIGV4dGVuZGVkLiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkXHJcbiAqIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKiBAcGFyYW0gcHJvcHNUb0V4Y2x1ZGUgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHdoaWNoIHNob3VsZCAqbm90KiBiZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBhIC0gT2JqZWN0IHRvIGV4dGVuZC5cclxuICogQHBhcmFtIGIgLSBPYmplY3QgdG8gdGFrZSBwcm9wZXJ0aWVzIGZyb20gZm9yIGV4dGVuc2lvbi5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydGllcyBpbiBhIHRoYXQgYXJlIGV4cGxpY2l0bHlcclxuICogc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQocHJvcHNUb0V4Y2x1ZGUsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICAvLyBOT1RFOiBhcnJheSBwcm9wZXJ0aWVzIGhhdmUgYW4gZWxzZS1iZWxvdzsgYXBwYXJlbnRseSwgdGhlcmUgaXMgYSBwcm9ibGVtIGhlcmUuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBiKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSAvLyBIYW5kbGUgbG9jYWwgcHJvcGVydGllcyBvbmx5XHJcbiAgICAgICAgaWYgKHByb3BzVG9FeGNsdWRlLmluY2x1ZGVzKHByb3ApKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gLy8gSW4gZXhjbHVzaW9uIGxpc3QsIHNraXBcclxuICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYltwcm9wXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXS5wdXNoKGJbcHJvcF1baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgZXh0ZW5kIGFuIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gcHJvdG9FeHRlbmQgLSBJZiB0cnVlLCB0aGUgcHJvdG90eXBlIHZhbHVlcyB3aWxsIGFsc28gYmUgZXh0ZW5kZWQuXHJcbiAqIChUaGF0IGlzIHRoZSBvcHRpb25zIG9iamVjdHMgdGhhdCBpbmhlcml0IGZyb20gb3RoZXJzIHdpbGwgYWxzbyBnZXQgdGhlXHJcbiAqIGluaGVyaXRlZCBvcHRpb25zKS5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCB0aGUgdmFsdWVzIG9mIGZpZWxkcyB0aGF0IGFyZSBudWxsIHdpbGwgYmUgZGVsZXRlZC5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBFeHRlbmQoYSwgYiwgcHJvdG9FeHRlbmQgPSBmYWxzZSwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYikge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkgfHwgcHJvdG9FeHRlbmQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICBiW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYltwcm9wXSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0gZGVlcEV4dGVuZCh7fSwgYltwcm9wXSwgcHJvdG9FeHRlbmQpOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFbcHJvcF0pID09PSBPYmplY3QucHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBwcm90b0V4dGVuZCk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF0uc2xpY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgYWxsIGVsZW1lbnRzIGluIHR3byBhcnJheXMgYXJlIGVxdWFsLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIEZpcnN0IGFycmF5LlxyXG4gKiBAcGFyYW0gYiAtIFNlY29uZCBhcnJheS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBib3RoIGFycmF5cyBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2FtZSBlbGVtZW50cyAoMSA9ICcxJykuXHJcbiAqL1xyXG5mdW5jdGlvbiBlcXVhbEFycmF5KGEsIGIpIHtcclxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBHZXQgdGhlIHR5cGUgb2YgYW4gb2JqZWN0LCBmb3IgZXhhbXBsZSBleHBvcnRzLmdldFR5cGUoW10pIHJldHVybnMgJ0FycmF5Jy5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgRGV0ZWN0ZWQgdHlwZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFR5cGUob2JqZWN0KSB7XHJcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcclxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJTdHJpbmdcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJBcnJheVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJEYXRlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIk9iamVjdFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZTtcclxufVxyXG4vKipcclxuICogVXNlZCB0byBleHRlbmQgYW4gYXJyYXkgYW5kIGNvcHkgaXQuIFRoaXMgaXMgdXNlZCB0byBwcm9wYWdhdGUgcGF0aHMgcmVjdXJzaXZlbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcnIgLSBGaXJzdCBwYXJ0LlxyXG4gKiBAcGFyYW0gbmV3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgYWFkZGVkIGludG8gdGhlIGFycmF5LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aXRoIGFsbCBpdGVtcyBmcm9tIGFyciBhbmQgbmV3VmFsdWUgKHdoaWNoIGlzIGxhc3QpLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weUFuZEV4dGVuZEFycmF5KGFyciwgbmV3VmFsdWUpIHtcclxuICAgIHJldHVybiBbLi4uYXJyLCBuZXdWYWx1ZV07XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gZXh0ZW5kIGFuIGFycmF5IGFuZCBjb3B5IGl0LiBUaGlzIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHBhdGhzIHJlY3Vyc2l2ZWx5LlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIGJlIGNvcGllZC5cclxuICogQHJldHVybnMgU2hhbGxvdyBjb3B5IG9mIGFyci5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlBcnJheShhcnIpIHtcclxuICAgIHJldHVybiBhcnIuc2xpY2UoKTtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIGxlZnQgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIGxlZnQgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZUxlZnQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIHJpZ2h0IHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSByaWdodCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlUmlnaHQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSB0b3AgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHRvcCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlVG9wKGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxufVxyXG4vKipcclxuICogQWRkIGEgY2xhc3NOYW1lIHRvIHRoZSBnaXZlbiBlbGVtZW50cyBzdHlsZS5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIGFkZGVkLlxyXG4gKiBAcGFyYW0gY2xhc3NOYW1lcyAtIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lcykge1xyXG4gICAgbGV0IGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBuZXdDbGFzc2VzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIik7XHJcbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5jb25jYXQobmV3Q2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhY2xhc3Nlcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xyXG4gICAgfSkpO1xyXG4gICAgZWxlbS5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgYSBjbGFzc05hbWUgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudHMgc3R5bGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjbGFzc05hbWVzIC0gU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNsYXNzTmFtZShlbGVtLCBjbGFzc05hbWVzKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IGVsZW0uY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IG9sZENsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KFwiIFwiKTtcclxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICFvbGRDbGFzc2VzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XHJcbiAgICB9KTtcclxuICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcclxufVxyXG4vKipcclxuICogRm9yIGVhY2ggbWV0aG9kIGZvciBib3RoIGFycmF5cyBhbmQgb2JqZWN0cy5cclxuICogSW4gY2FzZSBvZiBhbiBhcnJheSwgdGhlIGJ1aWx0LWluIEFycmF5LmZvckVhY2goKSBpcyBhcHBsaWVkICgqKk5vLCBpdCdzIG5vdCEqKikuXHJcbiAqIEluIGNhc2Ugb2YgYW4gT2JqZWN0LCB0aGUgbWV0aG9kIGxvb3BzIG92ZXIgYWxsIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIEFuIE9iamVjdCBvciBBcnJheSB0byBiZSBpdGVyYXRlZCBvdmVyLlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBBcnJheS5mb3JFYWNoLWxpa2UgY2FsbGJhY2suXHJcbiAqL1xyXG5mdW5jdGlvbiBmb3JFYWNoKG9iamVjdCwgY2FsbGJhY2spIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcclxuICAgICAgICAvLyBhcnJheVxyXG4gICAgICAgIGNvbnN0IGxlbiA9IG9iamVjdC5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhvYmplY3RbaV0sIGksIG9iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gb2JqZWN0XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGFuIGFycmF5OiBhbGwgb2JqZWN0cyBwcm9wZXJ0aWVzIGFyZSBwdXQgaW50byB0aGUgYXJyYXkuIFRoZSByZXN1bHRpbmcgYXJyYXkgaXMgdW5vcmRlcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbyAtIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bm9yZGVyZWQgdmFsdWVzLlxyXG4gKi9cclxuY29uc3QgdG9BcnJheSA9IE9iamVjdC52YWx1ZXM7XHJcbi8qKlxyXG4gKiBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IHdpbGwgYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIGtleSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgYXNzaWduZWQuXHJcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIHdhcyB1cGRhdGVkICh0cnVlKSBvciBhbHJlYWR5IHN0cmljdGx5IHRoZSBzYW1lIGluIHRoZSBvcmlnaW5hbCBvYmplY3QgKGZhbHNlKS5cclxuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KG9iamVjdCwga2V5LCB2YWx1ZSkge1xyXG4gICAgaWYgKG9iamVjdFtrZXldICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRocm90dGxlIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBiZSBvbmx5IGV4ZWN1dGVkIG9uY2UgcGVyIGFuaW1hdGlvbiBmcmFtZS5cclxuICpcclxuICogQHBhcmFtIGZuIC0gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxyXG4gKiBAcmV0dXJucyBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uLlxyXG4gKi9cclxuZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcclxuICAgIGxldCBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzY2hlZHVsZWQpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm4oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQWRkIGFuZCBldmVudCBsaXN0ZW5lci4gV29ya3MgZm9yIGFsbCBicm93c2Vycy5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiaW5kIHRoZSBldmVudCBsaXN0ZW5lciB0by5cclxuICogQHBhcmFtIGFjdGlvbiAtIFNhbWUgYXMgRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGFjdGlvbiwg4oCULCDigJQpLlxyXG4gKiBAcGFyYW0gbGlzdGVuZXIgLSBTYW1lIGFzIEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcijigJQsIGxpc3RlbmVyLCDigJQpLlxyXG4gKiBAcGFyYW0gdXNlQ2FwdHVyZSAtIFNhbWUgYXMgRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKOKAlCwg4oCULCB1c2VDYXB0dXJlKS5cclxuICovXHJcbmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgYWN0aW9uLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkge1xyXG4gICAgaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikge1xyXG4gICAgICAgIGlmICh1c2VDYXB0dXJlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdXNlQ2FwdHVyZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWN0aW9uID09PSBcIm1vdXNld2hlZWxcIiAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluY2x1ZGVzKFwiRmlyZWZveFwiKSkge1xyXG4gICAgICAgICAgICBhY3Rpb24gPSBcIkRPTU1vdXNlU2Nyb2xsXCI7IC8vIEZvciBGaXJlZm94XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihhY3Rpb24sIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIEBUT0RPOiBJRSB0eXBlcz8gRG9lcyBhbnlvbmUgY2FyZT9cclxuICAgICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KFwib25cIiArIGFjdGlvbiwgbGlzdGVuZXIpOyAvLyBJRSBicm93c2Vyc1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIgZnJvbSBhbiBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGJpbmQgdGhlIGV2ZW50IGxpc3RlbmVyIHRvLlxyXG4gKiBAcGFyYW0gYWN0aW9uIC0gU2FtZSBhcyBFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYWN0aW9uLCDigJQsIOKAlCkuXHJcbiAqIEBwYXJhbSBsaXN0ZW5lciAtIFNhbWUgYXMgRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKOKAlCwgbGlzdGVuZXIsIOKAlCkuXHJcbiAqIEBwYXJhbSB1c2VDYXB0dXJlIC0gU2FtZSBhcyBFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIo4oCULCDigJQsIHVzZUNhcHR1cmUpLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihlbGVtZW50LCBhY3Rpb24sIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSB7XHJcbiAgICBpZiAoZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKSB7XHJcbiAgICAgICAgLy8gbm9uLUlFIGJyb3dzZXJzXHJcbiAgICAgICAgaWYgKHVzZUNhcHR1cmUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB1c2VDYXB0dXJlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhY3Rpb24gPT09IFwibW91c2V3aGVlbFwiICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJGaXJlZm94XCIpKSB7XHJcbiAgICAgICAgICAgIGFjdGlvbiA9IFwiRE9NTW91c2VTY3JvbGxcIjsgLy8gRm9yIEZpcmVmb3hcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGFjdGlvbiwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGVsZW1lbnQuZGV0YWNoRXZlbnQoXCJvblwiICsgYWN0aW9uLCBsaXN0ZW5lcik7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENhbmNlbHMgdGhlIGV2ZW50J3MgZGVmYXVsdCBhY3Rpb24gaWYgaXQgaXMgY2FuY2VsYWJsZSwgd2l0aG91dCBzdG9wcGluZyBmdXJ0aGVyIHByb3BhZ2F0aW9uIG9mIHRoZSBldmVudC5cclxuICpcclxuICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IHdob3NlIGRlZmF1bHQgYWN0aW9uIHNob3VsZCBiZSBwcmV2ZW50ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudCkge1xyXG4gICAgaWYgKCFldmVudCkge1xyXG4gICAgICAgIGV2ZW50ID0gd2luZG93LmV2ZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCFldmVudCkgO1xyXG4gICAgZWxzZSBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBub24tSUUgYnJvd3NlcnNcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIEBUT0RPOiBJRSB0eXBlcz8gRG9lcyBhbnlvbmUgY2FyZT9cclxuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlOyAvLyBJRSBicm93c2Vyc1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBHZXQgSFRNTCBlbGVtZW50IHdoaWNoIGlzIHRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQuXHJcbiAqIEByZXR1cm5zIFRoZSBlbGVtZW50IG9yIG51bGwgaWYgbm90IG9idGFpbmFibGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUYXJnZXQoZXZlbnQgPSB3aW5kb3cuZXZlbnQpIHtcclxuICAgIC8vIGNvZGUgZnJvbSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcclxuICAgIC8vIEBUT0RPOiBFdmVudFRhcmdldCBjYW4gYmUgYWxtb3N0IGFueXRoaW5nLCBpcyBpdCBva2F5IHRvIHJldHVybiBvbmx5IEVsZW1lbnRzP1xyXG4gICAgbGV0IHRhcmdldCA9IG51bGw7XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC50YXJnZXQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC50YXJnZXQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChldmVudC5zcmNFbGVtZW50KSB7XHJcbiAgICAgICAgdGFyZ2V0ID0gZXZlbnQuc3JjRWxlbWVudDtcclxuICAgIH1cclxuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGFyZ2V0Lm5vZGVUeXBlICE9IG51bGwgJiYgdGFyZ2V0Lm5vZGVUeXBlID09IDMpIHtcclxuICAgICAgICAvLyBkZWZlYXQgU2FmYXJpIGJ1Z1xyXG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn1cclxuLyoqXHJcbiAqIENoZWNrIGlmIGdpdmVuIGVsZW1lbnQgY29udGFpbnMgZ2l2ZW4gcGFyZW50IHNvbWV3aGVyZSBpbiB0aGUgRE9NIHRyZWUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gYmUgdGVzdGVkLlxyXG4gKiBAcGFyYW0gcGFyZW50IC0gVGhlIGFuY2VzdG9yIChub3QgbmVjZXNzYXJpbHkgcGFyZW50KSBvZiB0aGUgZWxlbWVudC5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBwYXJlbnQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGVsZW1lbnQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGhhc1BhcmVudChlbGVtZW50LCBwYXJlbnQpIHtcclxuICAgIGxldCBlbGVtID0gZWxlbWVudDtcclxuICAgIHdoaWxlIChlbGVtKSB7XHJcbiAgICAgICAgaWYgKGVsZW0gPT09IHBhcmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIGVsZW0gPSBlbGVtLnBhcmVudE5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmNvbnN0IG9wdGlvbiA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBib29sZWFuLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvYm9vbGVhbiwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBib29sZWFuIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0Jvb2xlYW4odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIG51bWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b251bWJlciwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogbnVtYmVyIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc051bWJlcih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKSB8fCBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzdHJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9zdHJpbmcsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIENvcnJlc3BvbmRpbmcgKipib3hlZCoqIHN0cmluZyB2YWx1ZSwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNTdHJpbmcodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgc2l6ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3NpemUsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIENvcnJlc3BvbmRpbmcgc3RyaW5nIHZhbHVlIChudW1iZXIgKyAncHgnKSwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNTaXplKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc051bWJlcih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgXCJweFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgRE9NIEVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG8gRE9NIEVsZW1lbnQsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIFRoZSBET00gRWxlbWVudCwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNFbGVtZW50KHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZSB8fCBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGhleCBjb2xvciBzdHJpbmcgaW50byBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiB7QGxpbmsgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NjIzODM4L3JnYi10by1oZXgtYW5kLWhleC10by1yZ2J9XHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nICgzIG9yIDYgZGlnaXRzLCB3aXRoIG9yIHdpdGhvdXQgIykuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBoZXhUb1JHQihoZXgpIHtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBzd2l0Y2ggKGhleC5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBzaG9ydEhleFJFLmV4ZWMoaGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdICsgcmVzdWx0WzFdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdICsgcmVzdWx0WzJdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdICsgcmVzdWx0WzNdLCAxNiksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgICAgcmVzdWx0ID0gZnVsbEhleFJFLmV4ZWMoaGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdLCAxNiksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgc3RyaW5nIGNvbG9yIGluIGhleCBvciBSR0IgZm9ybWF0IGFuZCBhZGRzIHRoZSBvcGFjaXR5LCBSR0JBIGlzIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZC5cclxuICpcclxuICogQHBhcmFtIGNvbG9yIC0gVGhlIGNvbG9yIHN0cmluZyAoaGV4LCBSR0IsIFJHQkEpLlxyXG4gKiBAcGFyYW0gb3BhY2l0eSAtIFRoZSBuZXcgb3BhY2l0eS5cclxuICogQHJldHVybnMgUkdCQSBzdHJpbmcsIGZvciBleGFtcGxlICdyZ2JhKDI1NSwgMCwgMTI3LCAwLjMpJy5cclxuICovXHJcbmZ1bmN0aW9uIG92ZXJyaWRlT3BhY2l0eShjb2xvciwgb3BhY2l0eSkge1xyXG4gICAgaWYgKGNvbG9yLmluY2x1ZGVzKFwicmdiYVwiKSkge1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbG9yLmluY2x1ZGVzKFwicmdiXCIpKSB7XHJcbiAgICAgICAgY29uc3QgcmdiID0gY29sb3JcclxuICAgICAgICAgICAgLnN1YnN0cihjb2xvci5pbmRleE9mKFwiKFwiKSArIDEpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiKVwiLCBcIlwiKVxyXG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIHJldHVybiBcInJnYmEoXCIgKyByZ2JbMF0gKyBcIixcIiArIHJnYlsxXSArIFwiLFwiICsgcmdiWzJdICsgXCIsXCIgKyBvcGFjaXR5ICsgXCIpXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihjb2xvcik7XHJcbiAgICAgICAgaWYgKHJnYiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcInJnYmEoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIsXCIgKyBvcGFjaXR5ICsgXCIpXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IFJHQiBcXDwwLCAyNTVcXD4gaW50byBoZXggY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVkIC0gUmVkIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBncmVlbiAtIEdyZWVuIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBibHVlIC0gQmx1ZSBjaGFubmVsLlxyXG4gKiBAcmV0dXJucyBIZXggY29sb3Igc3RyaW5nIChmb3IgZXhhbXBsZTogJyMwYWNkYzAnKS5cclxuICovXHJcbmZ1bmN0aW9uIFJHQlRvSGV4KHJlZCwgZ3JlZW4sIGJsdWUpIHtcclxuICAgIHJldHVybiAoXCIjXCIgKyAoKDEgPDwgMjQpICsgKHJlZCA8PCAxNikgKyAoZ3JlZW4gPDwgOCkgKyBibHVlKS50b1N0cmluZygxNikuc2xpY2UoMSkpO1xyXG59XHJcbi8qKlxyXG4gKiBQYXJzZSBhIGNvbG9yIHByb3BlcnR5IGludG8gYW4gb2JqZWN0IHdpdGggYm9yZGVyLCBiYWNrZ3JvdW5kLCBhbmQgaGlnaGxpZ2h0IGNvbG9ycy5cclxuICpcclxuICogQHBhcmFtIGlucHV0Q29sb3IgLSBTaG9ydGhhbmQgY29sb3Igc3RyaW5nIG9yIGlucHV0IGNvbG9yIG9iamVjdC5cclxuICogQHBhcmFtIGRlZmF1bHRDb2xvciAtIEZ1bGwgY29sb3Igb2JqZWN0IHRvIGZpbGwgaW4gbWlzc2luZyB2YWx1ZXMgaW4gaW5wdXRDb2xvci5cclxuICogQHJldHVybnMgQ29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gcGFyc2VDb2xvcihpbnB1dENvbG9yLCBkZWZhdWx0Q29sb3IpIHtcclxuICAgIGlmIChpc1N0cmluZyhpbnB1dENvbG9yKSkge1xyXG4gICAgICAgIGxldCBjb2xvclN0ciA9IGlucHV0Q29sb3I7XHJcbiAgICAgICAgaWYgKGlzVmFsaWRSR0IoY29sb3JTdHIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJnYiA9IGNvbG9yU3RyXHJcbiAgICAgICAgICAgICAgICAuc3Vic3RyKDQpXHJcbiAgICAgICAgICAgICAgICAuc3Vic3RyKDAsIGNvbG9yU3RyLmxlbmd0aCAtIDUpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCIsXCIpXHJcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbG9yU3RyID0gUkdCVG9IZXgocmdiWzBdLCByZ2JbMV0sIHJnYlsyXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1ZhbGlkSGV4KGNvbG9yU3RyKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBoc3YgPSBoZXhUb0hTVihjb2xvclN0cik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhTViA9IHtcclxuICAgICAgICAgICAgICAgIGg6IGhzdi5oLFxyXG4gICAgICAgICAgICAgICAgczogaHN2LnMgKiAwLjgsXHJcbiAgICAgICAgICAgICAgICB2OiBNYXRoLm1pbigxLCBoc3YudiAqIDEuMDIpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBkYXJrZXJDb2xvckhTViA9IHtcclxuICAgICAgICAgICAgICAgIGg6IGhzdi5oLFxyXG4gICAgICAgICAgICAgICAgczogTWF0aC5taW4oMSwgaHN2LnMgKiAxLjI1KSxcclxuICAgICAgICAgICAgICAgIHY6IGhzdi52ICogMC44LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBkYXJrZXJDb2xvckhleCA9IEhTVlRvSGV4KGRhcmtlckNvbG9ySFNWLmgsIGRhcmtlckNvbG9ySFNWLnMsIGRhcmtlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICBjb25zdCBsaWdodGVyQ29sb3JIZXggPSBIU1ZUb0hleChsaWdodGVyQ29sb3JIU1YuaCwgbGlnaHRlckNvbG9ySFNWLnMsIGxpZ2h0ZXJDb2xvckhTVi52KTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZGVmYXVsdENvbG9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5iYWNrZ3JvdW5kIHx8IGRlZmF1bHRDb2xvci5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmJvcmRlciB8fCBkZWZhdWx0Q29sb3IuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiBpc1N0cmluZyhpbnB1dENvbG9yLmhpZ2hsaWdodClcclxuICAgICAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5oaWdobGlnaHQgJiYgaW5wdXRDb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZCkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAoaW5wdXRDb2xvci5oaWdobGlnaHQgJiYgaW5wdXRDb2xvci5oaWdobGlnaHQuYm9yZGVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiBpc1N0cmluZyhpbnB1dENvbG9yLmhvdmVyKVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYm9yZGVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhvdmVyLmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhvdmVyLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmJvcmRlciB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiBpc1N0cmluZyhpbnB1dENvbG9yLmhvdmVyKVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYm9yZGVyKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCkgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIEhTViBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vd3d3LmphdmFzY3JpcHRlci5uZXQvZmFxL3JnYjJoc3YuaHRtfVxyXG4gKiBAcGFyYW0gcmVkIC0gUmVkIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBncmVlbiAtIEdyZWVuIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBibHVlIC0gQmx1ZSBjaGFubmVsLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IU1YocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmVkID0gcmVkIC8gMjU1O1xyXG4gICAgZ3JlZW4gPSBncmVlbiAvIDI1NTtcclxuICAgIGJsdWUgPSBibHVlIC8gMjU1O1xyXG4gICAgY29uc3QgbWluUkdCID0gTWF0aC5taW4ocmVkLCBNYXRoLm1pbihncmVlbiwgYmx1ZSkpO1xyXG4gICAgY29uc3QgbWF4UkdCID0gTWF0aC5tYXgocmVkLCBNYXRoLm1heChncmVlbiwgYmx1ZSkpO1xyXG4gICAgLy8gQmxhY2stZ3JheS13aGl0ZVxyXG4gICAgaWYgKG1pblJHQiA9PT0gbWF4UkdCKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgaDogMCwgczogMCwgdjogbWluUkdCIH07XHJcbiAgICB9XHJcbiAgICAvLyBDb2xvcnMgb3RoZXIgdGhhbiBibGFjay1ncmF5LXdoaXRlOlxyXG4gICAgY29uc3QgZCA9IHJlZCA9PT0gbWluUkdCID8gZ3JlZW4gLSBibHVlIDogYmx1ZSA9PT0gbWluUkdCID8gcmVkIC0gZ3JlZW4gOiBibHVlIC0gcmVkO1xyXG4gICAgY29uc3QgaCA9IHJlZCA9PT0gbWluUkdCID8gMyA6IGJsdWUgPT09IG1pblJHQiA/IDEgOiA1O1xyXG4gICAgY29uc3QgaHVlID0gKDYwICogKGggLSBkIC8gKG1heFJHQiAtIG1pblJHQikpKSAvIDM2MDtcclxuICAgIGNvbnN0IHNhdHVyYXRpb24gPSAobWF4UkdCIC0gbWluUkdCKSAvIG1heFJHQjtcclxuICAgIGNvbnN0IHZhbHVlID0gbWF4UkdCO1xyXG4gICAgcmV0dXJuIHsgaDogaHVlLCBzOiBzYXR1cmF0aW9uLCB2OiB2YWx1ZSB9O1xyXG59XHJcbi8qKlxyXG4gKiBTcGxpdCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgaW50byBhbiBvYmplY3Qgd2l0aCBrZXkvdmFsdWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIENTUyBzb3VyY2UgY29kZSB0byBzcGxpdCBpbnRvIGtleS92YWx1ZSBvYmplY3QuXHJcbiAqIEByZXR1cm5zIEtleS92YWx1ZSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB7QGxpbmsgY3NzVGV4dH0uXHJcbiAqL1xyXG5mdW5jdGlvbiBzcGxpdENTU1RleHQoY3NzVGV4dCkge1xyXG4gICAgY29uc3QgdG1wRWxsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgY29uc3Qgc3R5bGVzID0ge307XHJcbiAgICB0bXBFbGxlbWVudC5zdHlsZS5jc3NUZXh0ID0gY3NzVGV4dDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG1wRWxsZW1lbnQuc3R5bGUubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBzdHlsZXNbdG1wRWxsZW1lbnQuc3R5bGVbaV1dID0gdG1wRWxsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0bXBFbGxlbWVudC5zdHlsZVtpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGVzO1xyXG59XHJcbi8qKlxyXG4gKiBBcHBlbmQgYSBzdHJpbmcgd2l0aCBjc3Mgc3R5bGVzIHRvIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdGhhdCB3aWxsIHJlY2VpdmUgbmV3IHN0eWxlcy5cclxuICogQHBhcmFtIGNzc1RleHQgLSBUaGUgc3R5bGVzIHRvIGJlIGFwcGVuZGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgZnJvbSBhbiBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IGZyb20gd2hpY2ggc3R5bGVzIHNob3VsZCBiZSByZW1vdmVkLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgcmVtb3ZlZC5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNzc1RleHQoZWxlbWVudCwgY3NzVGV4dCkge1xyXG4gICAgY29uc3QgY3NzU3R5bGUgPSBzcGxpdENTU1RleHQoY3NzVGV4dCk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjc3NTdHlsZSkpIHtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgSFNWIFxcPDAsIDFcXD4gaW50byBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbWppamFja3Nvbi81MzExMjU2fVxyXG4gKiBAcGFyYW0gaCAtIEh1ZS5cclxuICogQHBhcmFtIHMgLSBTYXR1cmF0aW9uLlxyXG4gKiBAcGFyYW0gdiAtIFZhbHVlLlxyXG4gKiBAcmV0dXJucyBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gSFNWVG9SR0IoaCwgcywgdikge1xyXG4gICAgbGV0IHI7XHJcbiAgICBsZXQgZztcclxuICAgIGxldCBiO1xyXG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoaCAqIDYpO1xyXG4gICAgY29uc3QgZiA9IGggKiA2IC0gaTtcclxuICAgIGNvbnN0IHAgPSB2ICogKDEgLSBzKTtcclxuICAgIGNvbnN0IHEgPSB2ICogKDEgLSBmICogcyk7XHJcbiAgICBjb25zdCB0ID0gdiAqICgxIC0gKDEgLSBmKSAqIHMpO1xyXG4gICAgc3dpdGNoIChpICUgNikge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSB0KSwgKGIgPSBwKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAociA9IHEpLCAoZyA9IHYpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIChyID0gcCksIChnID0gdiksIChiID0gdCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSBxKSwgKGIgPSB2KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAociA9IHQpLCAoZyA9IHApLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIChyID0gdiksIChnID0gcCksIChiID0gcSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByOiBNYXRoLmZsb29yKHIgKiAyNTUpLFxyXG4gICAgICAgIGc6IE1hdGguZmxvb3IoZyAqIDI1NSksXHJcbiAgICAgICAgYjogTWF0aC5mbG9vcihiICogMjU1KSxcclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgSFNWIFxcPDAsIDFcXD4gaW50byBoZXggY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gaCAtIEh1ZS5cclxuICogQHBhcmFtIHMgLSBTYXR1cmF0aW9uLlxyXG4gKiBAcGFyYW0gdiAtIFZhbHVlLlxyXG4gKiBAcmV0dXJucyBIZXggY29sb3Igc3RyaW5nLlxyXG4gKi9cclxuZnVuY3Rpb24gSFNWVG9IZXgoaCwgcywgdikge1xyXG4gICAgY29uc3QgcmdiID0gSFNWVG9SR0IoaCwgcywgdik7XHJcbiAgICByZXR1cm4gUkdCVG9IZXgocmdiLnIsIHJnYi5nLCByZ2IuYik7XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIEhTViBcXDwwLCAxXFw+LlxyXG4gKlxyXG4gKiBAcGFyYW0gaGV4IC0gSGV4IGNvbG9yIHN0cmluZy5cclxuICogQHJldHVybnMgSFNWIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvSFNWKGhleCkge1xyXG4gICAgY29uc3QgcmdiID0gaGV4VG9SR0IoaGV4KTtcclxuICAgIGlmICghcmdiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7aGV4fScgaXMgbm90IGEgdmFsaWQgY29sb3IuYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUkdCVG9IU1YocmdiLnIsIHJnYi5nLCByZ2IuYik7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBVbmtub3duIHN0cmluZyB0aGF0IG1heSBjb250YWluIGEgY29sb3IuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNWYWxpZEhleChoZXgpIHtcclxuICAgIGNvbnN0IGlzT2sgPSAvKF4jWzAtOUEtRl17Nn0kKXwoXiNbMC05QS1GXXszfSQpL2kudGVzdChoZXgpO1xyXG4gICAgcmV0dXJuIGlzT2s7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIFJHQiBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2IgLSBVbmtub3duIHN0cmluZyB0aGF0IG1heSBjb250YWluIGEgY29sb3IuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNWYWxpZFJHQihyZ2IpIHtcclxuICAgIHJldHVybiByZ2JSRS50ZXN0KHJnYik7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIFJHQkEgY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmdiYSAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCQShyZ2JhKSB7XHJcbiAgICByZXR1cm4gcmdiYVJFLnRlc3QocmdiYSk7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gZmllbGRzIC0gTmFtZXMgb2YgcHJvcGVydGllcyB0byBiZSBicmlkZ2VkLlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgQSBuZXcgb2JqZWN0IGluaGVyaXRpbmcgZnJvbSB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlQnJpZGdlT2JqZWN0KGZpZWxkcywgcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiByZWZlcmVuY2VPYmplY3QgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAvLyAhISEgdHlwZW9mIG51bGwgPT09ICdvYmplY3QnXHJcbiAgICAgICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGZpZWxkc1tpXSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ZpZWxkc1tpXV0gPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFRvW2ZpZWxkc1tpXV0gPSBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0W2ZpZWxkc1tpXV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3RUbztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUaGlzIHJlY3Vyc2l2ZWx5IHJlZGlyZWN0cyB0aGUgcHJvdG90eXBlIG9mIEpTT04gb2JqZWN0cyB0byB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGRlZmF1bHQgb3B0aW9ucy5cclxuICpcclxuICogQHBhcmFtIHJlZmVyZW5jZU9iamVjdCAtIFRoZSBvcmlnaW5hbCBvYmplY3QuXHJcbiAqIEByZXR1cm5zIFRoZSBFbGVtZW50IGlmIHRoZSByZWZlcmVuY2VPYmplY3QgaXMgYW4gRWxlbWVudCwgb3IgYSBuZXcgb2JqZWN0IGluaGVyaXRpbmcgZnJvbSB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdCkge1xyXG4gICAgaWYgKHJlZmVyZW5jZU9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVmZXJlbmNlT2JqZWN0ICE9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0IGluc3RhbmNlb2YgRWxlbWVudCkge1xyXG4gICAgICAgIC8vIEF2b2lkIGJyaWRnaW5nIERPTSBvYmplY3RzXHJcbiAgICAgICAgcmV0dXJuIHJlZmVyZW5jZU9iamVjdDtcclxuICAgIH1cclxuICAgIGNvbnN0IG9iamVjdFRvID0gT2JqZWN0LmNyZWF0ZShyZWZlcmVuY2VPYmplY3QpO1xyXG4gICAgZm9yIChjb25zdCBpIGluIHJlZmVyZW5jZU9iamVjdCkge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVmZXJlbmNlT2JqZWN0LCBpKSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlZmVyZW5jZU9iamVjdFtpXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICBvYmplY3RUb1tpXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iamVjdFRvO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHN0YWJsZSBzb3J0IGltcGxlbWVudGF0aW9uLCB2ZXJ5IGZhc3QgZm9yIHByZXNvcnRlZCBkYXRhLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBhcnJheSB0byBiZSBzb3J0ZWQgKGluLXBsYWNlKS5cclxuICogQHBhcmFtIGNvbXBhcmUgLSBBbiBvcmRlciBjb21wYXJhdG9yLlxyXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGluc2VydFNvcnQoYSwgY29tcGFyZSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGFbaV07XHJcbiAgICAgICAgbGV0IGo7XHJcbiAgICAgICAgZm9yIChqID0gaTsgaiA+IDAgJiYgY29tcGFyZShrLCBhW2ogLSAxXSkgPCAwOyBqLS0pIHtcclxuICAgICAgICAgICAgYVtqXSA9IGFbaiAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhW2pdID0gaztcclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZSBvcHRpb25zIG9mIHN1Ym9iamVjdHMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxyXG4gKlxyXG4gKiBBIHJlcXVpcmVtZW50IG9mIHRoZXNlIHN1Ym9iamVjdHMgaXMgdGhhdCB0aGV5IGhhdmUgYW4gJ2VuYWJsZWQnIGVsZW1lbnRcclxuICogd2hpY2ggaXMgb3B0aW9uYWwgZm9yIHRoZSB1c2VyIGJ1dCBtYW5kYXRvcnkgZm9yIHRoZSBwcm9ncmFtLlxyXG4gKlxyXG4gKiBUaGUgYWRkZWQgdmFsdWUgaGVyZSBvZiB0aGUgbWVyZ2UgaXMgdGhhdCBvcHRpb24gJ2VuYWJsZWQnIGlzIHNldCBhcyByZXF1aXJlZC5cclxuICpcclxuICogQHBhcmFtIG1lcmdlVGFyZ2V0IC0gRWl0aGVyIHRoaXMub3B0aW9ucyBvciB0aGUgb3B0aW9ucyB1c2VkIGZvciB0aGUgZ3JvdXBzLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXHJcbiAqIEBwYXJhbSBvcHRpb24gLSBPcHRpb24ga2V5IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50LlxyXG4gKiBAcGFyYW0gZ2xvYmFsT3B0aW9ucyAtIEdsb2JhbCBvcHRpb25zLCBwYXNzZWQgaW4gdG8gZGV0ZXJtaW5lIHZhbHVlIG9mIG9wdGlvbiAnZW5hYmxlZCcuXHJcbiAqL1xyXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbiwgZ2xvYmFsT3B0aW9ucyA9IHt9KSB7XHJcbiAgICAvLyBMb2NhbCBoZWxwZXJzXHJcbiAgICBjb25zdCBpc1ByZXNlbnQgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiBvYmogIT09IHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBjb25zdCBpc09iamVjdCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCI7XHJcbiAgICB9O1xyXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM0NDkxMjg3LzEyMjM1MzFcclxuICAgIGNvbnN0IGlzRW1wdHkgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB4IGluIG9iaikge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgeCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICAvLyBHdWFyZHNcclxuICAgIGlmICghaXNPYmplY3QobWVyZ2VUYXJnZXQpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG1lcmdlVGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciBvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc1ByZXNlbnQob3B0aW9uKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciBvcHRpb24gbXVzdCBoYXZlIGEgdmFsdWVcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KGdsb2JhbE9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIGdsb2JhbE9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gQWN0dWFsIG1lcmdlIHJvdXRpbmUsIHNlcGFyYXRlZCBmcm9tIG1haW4gbG9naWNcclxuICAgIC8vIE9ubHkgYSBzaW5nbGUgbGV2ZWwgb2Ygb3B0aW9ucyBpcyBtZXJnZWQuIERlZXBlciBsZXZlbHMgYXJlIHJlZidkLiBUaGlzIG1heSBhY3R1YWxseSBiZSBhbiBpc3N1ZS5cclxuICAgIC8vXHJcbiAgICBjb25zdCBkb01lcmdlID0gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucywgb3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFpc09iamVjdCh0YXJnZXRbb3B0aW9uXSkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3JjID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgICAgIGNvbnN0IGRzdCA9IHRhcmdldFtvcHRpb25dO1xyXG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBzcmMpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzcmMsIHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBkc3RbcHJvcF0gPSBzcmNbcHJvcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLy8gTG9jYWwgaW5pdGlhbGl6YXRpb25cclxuICAgIGNvbnN0IHNyY09wdGlvbiA9IG9wdGlvbnNbb3B0aW9uXTtcclxuICAgIGNvbnN0IGdsb2JhbFBhc3NlZCA9IGlzT2JqZWN0KGdsb2JhbE9wdGlvbnMpICYmICFpc0VtcHR5KGdsb2JhbE9wdGlvbnMpO1xyXG4gICAgY29uc3QgZ2xvYmFsT3B0aW9uID0gZ2xvYmFsUGFzc2VkID8gZ2xvYmFsT3B0aW9uc1tvcHRpb25dIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgZ2xvYmFsRW5hYmxlZCA9IGdsb2JhbE9wdGlvbiA/IGdsb2JhbE9wdGlvbi5lbmFibGVkIDogdW5kZWZpbmVkO1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIE1haW4gcm91dGluZVxyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIGlmIChzcmNPcHRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkb1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzcmNPcHRpb24gPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICBtZXJnZVRhcmdldFtvcHRpb25dID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0uZW5hYmxlZCA9IHNyY09wdGlvbjtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoc3JjT3B0aW9uID09PSBudWxsICYmICFpc09iamVjdChtZXJnZVRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgIC8vIElmIHBvc3NpYmxlLCBleHBsaWNpdCBjb3B5IGZyb20gZ2xvYmFsc1xyXG4gICAgICAgIGlmIChpc1ByZXNlbnQoZ2xvYmFsT3B0aW9uKSkge1xyXG4gICAgICAgICAgICBtZXJnZVRhcmdldFtvcHRpb25dID0gT2JqZWN0LmNyZWF0ZShnbG9iYWxPcHRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFpc09iamVjdChzcmNPcHRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy9cclxuICAgIC8vIEVuc3VyZSB0aGF0ICdlbmFibGVkJyBpcyBwcm9wZXJseSBzZXQuIEl0IGlzIHJlcXVpcmVkIGludGVybmFsbHlcclxuICAgIC8vIE5vdGUgdGhhdCB0aGUgdmFsdWUgZnJvbSBvcHRpb25zIHdpbGwgYWx3YXlzIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgdmFsdWVcclxuICAgIC8vXHJcbiAgICBsZXQgZW5hYmxlZCA9IHRydWU7IC8vIGRlZmF1bHQgdmFsdWVcclxuICAgIGlmIChzcmNPcHRpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZW5hYmxlZCA9IHNyY09wdGlvbi5lbmFibGVkO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gVGFrZSBmcm9tIGdsb2JhbHMsIGlmIHByZXNlbnRcclxuICAgICAgICBpZiAoZ2xvYmFsRW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWQgPSBnbG9iYWxPcHRpb24uZW5hYmxlZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkb01lcmdlKG1lcmdlVGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pO1xyXG4gICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gZW5hYmxlZDtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSB2aXNpYmxlIGl0ZW0gaW4gYSBzb3J0ZWQgbGlzdC4gSWYgd2UgZmluZCBhIHZpc2libGUgaXRlbSwgdGhlIGNvZGUgdGhhdCB1c2VzXHJcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCB0aGVuIGl0ZXJhdGUgaW4gYm90aCBkaXJlY3Rpb25zIG92ZXIgdGhpcyBzb3J0ZWQgbGlzdCB0byBmaW5kIGFsbCB2aXNpYmxlIGl0ZW1zLlxyXG4gKlxyXG4gKiBAcGFyYW0gb3JkZXJlZEl0ZW1zIC0gSXRlbXMgb3JkZXJlZCBieSBzdGFydC5cclxuICogQHBhcmFtIGNvbXBhcmF0b3IgLSAtMSBpcyBsb3dlciwgMCBpcyBlcXVhbCwgMSBpcyBoaWdoZXIuXHJcbiAqIEBwYXJhbSBmaWVsZCAtIFByb3BlcnR5IG5hbWUgb24gYW4gaXRlbSAoVGhhdCBpcyBpdGVtW2ZpZWxkXSkuXHJcbiAqIEBwYXJhbSBmaWVsZDIgLSBTZWNvbmQgcHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdW2ZpZWxkMl0pLlxyXG4gKiBAcmV0dXJucyBJbmRleCBvZiB0aGUgZm91bmQgaXRlbSBvciAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC5cclxuICovXHJcbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaEN1c3RvbShvcmRlcmVkSXRlbXMsIGNvbXBhcmF0b3IsIGZpZWxkLCBmaWVsZDIpIHtcclxuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDAwMDtcclxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xyXG4gICAgbGV0IGxvdyA9IDA7XHJcbiAgICBsZXQgaGlnaCA9IG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgd2hpbGUgKGxvdyA8PSBoaWdoICYmIGl0ZXJhdGlvbiA8IG1heEl0ZXJhdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBvcmRlcmVkSXRlbXNbbWlkZGxlXTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkMiA9PT0gdW5kZWZpbmVkID8gaXRlbVtmaWVsZF0gOiBpdGVtW2ZpZWxkXVtmaWVsZDJdO1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdCA9IGNvbXBhcmF0b3IodmFsdWUpO1xyXG4gICAgICAgIGlmIChzZWFyY2hSZXN1bHQgPT0gMCkge1xyXG4gICAgICAgICAgICAvLyBqaWhhYSwgZm91bmQgYSB2aXNpYmxlIGl0ZW0hXHJcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNlYXJjaFJlc3VsdCA9PSAtMSkge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICBsb3cgPSBtaWRkbGUgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXQgaXMgdG9vIGJpZyAtLT4gZGVjcmVhc2UgaGlnaFxyXG4gICAgICAgICAgICBoaWdoID0gbWlkZGxlIC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaXRlcmF0aW9uKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGJpbmFyeSBzZWFyY2ggZm9yIGEgc3BlY2lmaWMgdmFsdWUgaW4gYSBzb3J0ZWQgYXJyYXkuXHJcbiAqIElmIGl0IGRvZXMgbm90IGV4aXN0IGJ1dCBpcyBpbiBiZXR3ZWVuIG9mIHR3byB2YWx1ZXMsIHdlIHJldHVybiBlaXRoZXIgdGhlXHJcbiAqIG9uZSBiZWZvcmUgb3IgdGhlIG9uZSBhZnRlciwgZGVwZW5kaW5nIG9uIHVzZXIgaW5wdXQgSWYgaXQgaXMgZm91bmQsIHdlXHJcbiAqIHJldHVybiB0aGUgaW5kZXgsIGVsc2UgLTEuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBTb3J0ZWQgYXJyYXkuXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgc2VhcmNoZWQgdmFsdWUuXHJcbiAqIEBwYXJhbSBmaWVsZCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IGluIGl0ZW1zIHRvIGJlIHNlYXJjaGVkLlxyXG4gKiBAcGFyYW0gc2lkZVByZWZlcmVuY2UgLSBJZiB0aGUgdGFyZ2V0IGlzIGJldHdlZW4gdHdvIHZhbHVlcywgc2hvdWxkIHRoZSBpbmRleCBvZiB0aGUgYmVmb3JlIG9yIHRoZSBhZnRlciBiZSByZXR1cm5lZD9cclxuICogQHBhcmFtIGNvbXBhcmF0b3IgLSBBbiBvcHRpb25hbCBjb21wYXJhdG9yLCByZXR1cm5pbmcgLTEsIDAsIDEgZm9yIFxcPCwgPT09LCBcXD4uXHJcbiAqIEByZXR1cm5zIFRoZSBpbmRleCBvZiBmb3VuZCB2YWx1ZSBvciAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC5cclxuICovXHJcbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaFZhbHVlKG9yZGVyZWRJdGVtcywgdGFyZ2V0LCBmaWVsZCwgc2lkZVByZWZlcmVuY2UsIGNvbXBhcmF0b3IpIHtcclxuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDAwMDtcclxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xyXG4gICAgbGV0IGxvdyA9IDA7XHJcbiAgICBsZXQgaGlnaCA9IG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgbGV0IHByZXZWYWx1ZTtcclxuICAgIGxldCB2YWx1ZTtcclxuICAgIGxldCBuZXh0VmFsdWU7XHJcbiAgICBsZXQgbWlkZGxlO1xyXG4gICAgY29tcGFyYXRvciA9XHJcbiAgICAgICAgY29tcGFyYXRvciAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBjb21wYXJhdG9yXHJcbiAgICAgICAgICAgIDogZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhID09IGIgPyAwIDogYSA8IGIgPyAtMSA6IDE7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIC8vIGdldCBhIG5ldyBndWVzc1xyXG4gICAgICAgIG1pZGRsZSA9IE1hdGguZmxvb3IoMC41ICogKGhpZ2ggKyBsb3cpKTtcclxuICAgICAgICBwcmV2VmFsdWUgPSBvcmRlcmVkSXRlbXNbTWF0aC5tYXgoMCwgbWlkZGxlIC0gMSldW2ZpZWxkXTtcclxuICAgICAgICB2YWx1ZSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdW2ZpZWxkXTtcclxuICAgICAgICBuZXh0VmFsdWUgPVxyXG4gICAgICAgICAgICBvcmRlcmVkSXRlbXNbTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpXVtmaWVsZF07XHJcbiAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPT0gMCkge1xyXG4gICAgICAgICAgICAvLyB3ZSBmb3VuZCB0aGUgdGFyZ2V0XHJcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmF0b3IocHJldlZhbHVlLCB0YXJnZXQpIDwgMCAmJlxyXG4gICAgICAgICAgICBjb21wYXJhdG9yKHZhbHVlLCB0YXJnZXQpID4gMCkge1xyXG4gICAgICAgICAgICAvLyB0YXJnZXQgaXMgaW4gYmV0d2VlbiBvZiB0aGUgcHJldmlvdXMgYW5kIHRoZSBjdXJyZW50XHJcbiAgICAgICAgICAgIHJldHVybiBzaWRlUHJlZmVyZW5jZSA9PSBcImJlZm9yZVwiID8gTWF0aC5tYXgoMCwgbWlkZGxlIC0gMSkgOiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IobmV4dFZhbHVlLCB0YXJnZXQpID4gMCkge1xyXG4gICAgICAgICAgICAvLyB0YXJnZXQgaXMgaW4gYmV0d2VlbiBvZiB0aGUgY3VycmVudCBhbmQgdGhlIG5leHRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCJcclxuICAgICAgICAgICAgICAgID8gbWlkZGxlXHJcbiAgICAgICAgICAgICAgICA6IE1hdGgubWluKG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxLCBtaWRkbGUgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGRpZG50IGZpbmQgdGhlIHRhcmdldCwgd2UgbmVlZCB0byBjaGFuZ2Ugb3VyIGJvdW5kYXJpZXMuXHJcbiAgICAgICAgICAgIGlmIChjb21wYXJhdG9yKHZhbHVlLCB0YXJnZXQpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaXQgaXMgdG9vIHNtYWxsIC0tPiBpbmNyZWFzZSBsb3dcclxuICAgICAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgICAgICBoaWdoID0gbWlkZGxlIC0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIC8vIGRpZG50IGZpbmQgYW55dGhpbmcuIFJldHVybiAtMS5cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKlxyXG4gKiBFYXNpbmcgRnVuY3Rpb25zLlxyXG4gKiBPbmx5IGNvbnNpZGVyaW5nIHRoZSB0IHZhbHVlIGZvciB0aGUgcmFuZ2UgWzAsIDFdID0+IFswLCAxXS5cclxuICpcclxuICogSW5zcGlyYXRpb246IGZyb20gaHR0cDovL2dpem1hLmNvbS9lYXNpbmcvXHJcbiAqIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2dyZS8xNjUwMjk0XHJcbiAqL1xyXG5jb25zdCBlYXNpbmdGdW5jdGlvbnMgPSB7XHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIG5vIGVhc2luZyBhbmQgbm8gYWNjZWxlcmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgbGluZWFyKHQpIHtcclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YWQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogKDIgLSB0KTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAyICogdCAqIHQgOiAtMSArICg0IC0gMiAqIHQpICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluQ3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiAtLXQgKiB0ICogdCArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJbk91dEN1YmljKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDQgKiB0ICogdCAqIHQgOiAodCAtIDEpICogKDIgKiB0IC0gMikgKiAoMiAqIHQgLSAyKSArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIGZyb20gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJblF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWFydCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAtLXQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJbk91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDggKiB0ICogdCAqIHQgKiB0IDogMSAtIDggKiAtLXQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIGZyb20gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJblF1aW50KHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiAxICsgLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gMTYgKiB0ICogdCAqIHQgKiB0ICogdCA6IDEgKyAxNiAqIC0tdCAqIHQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG59O1xyXG4vKipcclxuICogRXhwZXJpbWVudGFseSBjb21wdXRlIHRoZSB3aWR0aCBvZiB0aGUgc2Nyb2xsYmFyIGZvciB0aGlzIGJyb3dzZXIuXHJcbiAqXHJcbiAqIEByZXR1cm5zIFRoZSB3aWR0aCBpbiBwaXhlbHMuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTY3JvbGxCYXJXaWR0aCgpIHtcclxuICAgIGNvbnN0IGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICBpbm5lci5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xyXG4gICAgaW5uZXIuc3R5bGUuaGVpZ2h0ID0gXCIyMDBweFwiO1xyXG4gICAgY29uc3Qgb3V0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgb3V0ZXIuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICBvdXRlci5zdHlsZS50b3AgPSBcIjBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgIG91dGVyLnN0eWxlLndpZHRoID0gXCIyMDBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUuaGVpZ2h0ID0gXCIxNTBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlcik7XHJcbiAgICBjb25zdCB3MSA9IGlubmVyLm9mZnNldFdpZHRoO1xyXG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSBcInNjcm9sbFwiO1xyXG4gICAgbGV0IHcyID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBpZiAodzEgPT0gdzIpIHtcclxuICAgICAgICB3MiA9IG91dGVyLmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdXRlcik7XHJcbiAgICByZXR1cm4gdzEgLSB3MjtcclxufVxyXG4vLyBAVE9ETzogVGhpcyBkb2Vzbid0IHdvcmsgcHJvcGVybHkuXHJcbi8vIEl0IHdvcmtzIG9ubHkgZm9yIHNpbmdsZSBwcm9wZXJ0eSBvYmplY3RzLFxyXG4vLyBvdGhlcndpc2UgaXQgY29tYmluZXMgYWxsIG9mIHRoZSB0eXBlcyBpbiBhIHVuaW9uLlxyXG4vLyBleHBvcnQgZnVuY3Rpb24gdG9wTW9zdDxLMSBleHRlbmRzIHN0cmluZywgVjE+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxPltdLFxyXG4vLyAgIGFjY2Vzc29yczogSzEgfCBbSzFdXHJcbi8vICk6IHVuZGVmaW5lZCB8IFYxXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgVjEsIFYyPiAoXHJcbi8vICAgcGlsZTogUmVjb3JkPEsxLCB1bmRlZmluZWQgfCBWMSB8IFJlY29yZDxLMiwgdW5kZWZpbmVkIHwgVjI+PltdLFxyXG4vLyAgIGFjY2Vzc29yczogW0sxLCBLMl1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjEgfCBWMlxyXG4vLyBleHBvcnQgZnVuY3Rpb24gdG9wTW9zdDxLMSBleHRlbmRzIHN0cmluZywgSzIgZXh0ZW5kcyBzdHJpbmcsIEszIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjIsIFYzPiAoXHJcbi8vICAgcGlsZTogUmVjb3JkPEsxLCB1bmRlZmluZWQgfCBWMSB8IFJlY29yZDxLMiwgdW5kZWZpbmVkIHwgVjIgfCBSZWNvcmQ8SzMsIHVuZGVmaW5lZCB8IFYzPj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyLCBLM11cclxuLy8gKTogdW5kZWZpbmVkIHwgVjEgfCBWMiB8IFYzXHJcbi8qKlxyXG4gKiBHZXQgdGhlIHRvcCBtb3N0IHByb3BlcnR5IHZhbHVlIGZyb20gYSBwaWxlIG9mIG9iamVjdHMuXHJcbiAqXHJcbiAqIEBwYXJhbSBwaWxlIC0gQXJyYXkgb2Ygb2JqZWN0cywgbm8gcmVxdWlyZWQgZm9ybWF0LlxyXG4gKiBAcGFyYW0gYWNjZXNzb3JzIC0gQXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXHJcbiAqIEZvciBleGFtcGxlIGBvYmplY3RbJ2ZvbyddWydiYXInXWAg4oaSIGBbJ2ZvbycsICdiYXInXWAuXHJcbiAqIEByZXR1cm5zIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB3aXRoIGdpdmVuIGFjY2Vzc29ycyBwYXRoIGZyb20gdGhlIGZpcnN0IHBpbGUgaXRlbSB3aGVyZSBpdCdzIG5vdCB1bmRlZmluZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiB0b3BNb3N0KHBpbGUsIGFjY2Vzc29ycykge1xyXG4gICAgbGV0IGNhbmRpZGF0ZTtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShhY2Nlc3NvcnMpKSB7XHJcbiAgICAgICAgYWNjZXNzb3JzID0gW2FjY2Vzc29yc107XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBwaWxlKSB7XHJcbiAgICAgICAgaWYgKG1lbWJlcikge1xyXG4gICAgICAgICAgICBjYW5kaWRhdGUgPSBtZW1iZXJbYWNjZXNzb3JzWzBdXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhY2Nlc3NvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGVbYWNjZXNzb3JzW2ldXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbmRpZGF0ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FuZGlkYXRlO1xyXG59XG5cbmNvbnN0IGh0bWxDb2xvcnMgPSB7XG4gIGJsYWNrOiBcIiMwMDAwMDBcIixcbiAgbmF2eTogXCIjMDAwMDgwXCIsXG4gIGRhcmtibHVlOiBcIiMwMDAwOEJcIixcbiAgbWVkaXVtYmx1ZTogXCIjMDAwMENEXCIsXG4gIGJsdWU6IFwiIzAwMDBGRlwiLFxuICBkYXJrZ3JlZW46IFwiIzAwNjQwMFwiLFxuICBncmVlbjogXCIjMDA4MDAwXCIsXG4gIHRlYWw6IFwiIzAwODA4MFwiLFxuICBkYXJrY3lhbjogXCIjMDA4QjhCXCIsXG4gIGRlZXBza3libHVlOiBcIiMwMEJGRkZcIixcbiAgZGFya3R1cnF1b2lzZTogXCIjMDBDRUQxXCIsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiBcIiMwMEZBOUFcIixcbiAgbGltZTogXCIjMDBGRjAwXCIsXG4gIHNwcmluZ2dyZWVuOiBcIiMwMEZGN0ZcIixcbiAgYXF1YTogXCIjMDBGRkZGXCIsXG4gIGN5YW46IFwiIzAwRkZGRlwiLFxuICBtaWRuaWdodGJsdWU6IFwiIzE5MTk3MFwiLFxuICBkb2RnZXJibHVlOiBcIiMxRTkwRkZcIixcbiAgbGlnaHRzZWFncmVlbjogXCIjMjBCMkFBXCIsXG4gIGZvcmVzdGdyZWVuOiBcIiMyMjhCMjJcIixcbiAgc2VhZ3JlZW46IFwiIzJFOEI1N1wiLFxuICBkYXJrc2xhdGVncmF5OiBcIiMyRjRGNEZcIixcbiAgbGltZWdyZWVuOiBcIiMzMkNEMzJcIixcbiAgbWVkaXVtc2VhZ3JlZW46IFwiIzNDQjM3MVwiLFxuICB0dXJxdW9pc2U6IFwiIzQwRTBEMFwiLFxuICByb3lhbGJsdWU6IFwiIzQxNjlFMVwiLFxuICBzdGVlbGJsdWU6IFwiIzQ2ODJCNFwiLFxuICBkYXJrc2xhdGVibHVlOiBcIiM0ODNEOEJcIixcbiAgbWVkaXVtdHVycXVvaXNlOiBcIiM0OEQxQ0NcIixcbiAgaW5kaWdvOiBcIiM0QjAwODJcIixcbiAgZGFya29saXZlZ3JlZW46IFwiIzU1NkIyRlwiLFxuICBjYWRldGJsdWU6IFwiIzVGOUVBMFwiLFxuICBjb3JuZmxvd2VyYmx1ZTogXCIjNjQ5NUVEXCIsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IFwiIzY2Q0RBQVwiLFxuICBkaW1ncmF5OiBcIiM2OTY5NjlcIixcbiAgc2xhdGVibHVlOiBcIiM2QTVBQ0RcIixcbiAgb2xpdmVkcmFiOiBcIiM2QjhFMjNcIixcbiAgc2xhdGVncmF5OiBcIiM3MDgwOTBcIixcbiAgbGlnaHRzbGF0ZWdyYXk6IFwiIzc3ODg5OVwiLFxuICBtZWRpdW1zbGF0ZWJsdWU6IFwiIzdCNjhFRVwiLFxuICBsYXduZ3JlZW46IFwiIzdDRkMwMFwiLFxuICBjaGFydHJldXNlOiBcIiM3RkZGMDBcIixcbiAgYXF1YW1hcmluZTogXCIjN0ZGRkQ0XCIsXG4gIG1hcm9vbjogXCIjODAwMDAwXCIsXG4gIHB1cnBsZTogXCIjODAwMDgwXCIsXG4gIG9saXZlOiBcIiM4MDgwMDBcIixcbiAgZ3JheTogXCIjODA4MDgwXCIsXG4gIHNreWJsdWU6IFwiIzg3Q0VFQlwiLFxuICBsaWdodHNreWJsdWU6IFwiIzg3Q0VGQVwiLFxuICBibHVldmlvbGV0OiBcIiM4QTJCRTJcIixcbiAgZGFya3JlZDogXCIjOEIwMDAwXCIsXG4gIGRhcmttYWdlbnRhOiBcIiM4QjAwOEJcIixcbiAgc2FkZGxlYnJvd246IFwiIzhCNDUxM1wiLFxuICBkYXJrc2VhZ3JlZW46IFwiIzhGQkM4RlwiLFxuICBsaWdodGdyZWVuOiBcIiM5MEVFOTBcIixcbiAgbWVkaXVtcHVycGxlOiBcIiM5MzcwRDhcIixcbiAgZGFya3Zpb2xldDogXCIjOTQwMEQzXCIsXG4gIHBhbGVncmVlbjogXCIjOThGQjk4XCIsXG4gIGRhcmtvcmNoaWQ6IFwiIzk5MzJDQ1wiLFxuICB5ZWxsb3dncmVlbjogXCIjOUFDRDMyXCIsXG4gIHNpZW5uYTogXCIjQTA1MjJEXCIsXG4gIGJyb3duOiBcIiNBNTJBMkFcIixcbiAgZGFya2dyYXk6IFwiI0E5QTlBOVwiLFxuICBsaWdodGJsdWU6IFwiI0FERDhFNlwiLFxuICBncmVlbnllbGxvdzogXCIjQURGRjJGXCIsXG4gIHBhbGV0dXJxdW9pc2U6IFwiI0FGRUVFRVwiLFxuICBsaWdodHN0ZWVsYmx1ZTogXCIjQjBDNERFXCIsXG4gIHBvd2RlcmJsdWU6IFwiI0IwRTBFNlwiLFxuICBmaXJlYnJpY2s6IFwiI0IyMjIyMlwiLFxuICBkYXJrZ29sZGVucm9kOiBcIiNCODg2MEJcIixcbiAgbWVkaXVtb3JjaGlkOiBcIiNCQTU1RDNcIixcbiAgcm9zeWJyb3duOiBcIiNCQzhGOEZcIixcbiAgZGFya2toYWtpOiBcIiNCREI3NkJcIixcbiAgc2lsdmVyOiBcIiNDMEMwQzBcIixcbiAgbWVkaXVtdmlvbGV0cmVkOiBcIiNDNzE1ODVcIixcbiAgaW5kaWFucmVkOiBcIiNDRDVDNUNcIixcbiAgcGVydTogXCIjQ0Q4NTNGXCIsXG4gIGNob2NvbGF0ZTogXCIjRDI2OTFFXCIsXG4gIHRhbjogXCIjRDJCNDhDXCIsXG4gIGxpZ2h0Z3JleTogXCIjRDNEM0QzXCIsXG4gIHBhbGV2aW9sZXRyZWQ6IFwiI0Q4NzA5M1wiLFxuICB0aGlzdGxlOiBcIiNEOEJGRDhcIixcbiAgb3JjaGlkOiBcIiNEQTcwRDZcIixcbiAgZ29sZGVucm9kOiBcIiNEQUE1MjBcIixcbiAgY3JpbXNvbjogXCIjREMxNDNDXCIsXG4gIGdhaW5zYm9ybzogXCIjRENEQ0RDXCIsXG4gIHBsdW06IFwiI0REQTBERFwiLFxuICBidXJseXdvb2Q6IFwiI0RFQjg4N1wiLFxuICBsaWdodGN5YW46IFwiI0UwRkZGRlwiLFxuICBsYXZlbmRlcjogXCIjRTZFNkZBXCIsXG4gIGRhcmtzYWxtb246IFwiI0U5OTY3QVwiLFxuICB2aW9sZXQ6IFwiI0VFODJFRVwiLFxuICBwYWxlZ29sZGVucm9kOiBcIiNFRUU4QUFcIixcbiAgbGlnaHRjb3JhbDogXCIjRjA4MDgwXCIsXG4gIGtoYWtpOiBcIiNGMEU2OENcIixcbiAgYWxpY2VibHVlOiBcIiNGMEY4RkZcIixcbiAgaG9uZXlkZXc6IFwiI0YwRkZGMFwiLFxuICBhenVyZTogXCIjRjBGRkZGXCIsXG4gIHNhbmR5YnJvd246IFwiI0Y0QTQ2MFwiLFxuICB3aGVhdDogXCIjRjVERUIzXCIsXG4gIGJlaWdlOiBcIiNGNUY1RENcIixcbiAgd2hpdGVzbW9rZTogXCIjRjVGNUY1XCIsXG4gIG1pbnRjcmVhbTogXCIjRjVGRkZBXCIsXG4gIGdob3N0d2hpdGU6IFwiI0Y4RjhGRlwiLFxuICBzYWxtb246IFwiI0ZBODA3MlwiLFxuICBhbnRpcXVld2hpdGU6IFwiI0ZBRUJEN1wiLFxuICBsaW5lbjogXCIjRkFGMEU2XCIsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiBcIiNGQUZBRDJcIixcbiAgb2xkbGFjZTogXCIjRkRGNUU2XCIsXG4gIHJlZDogXCIjRkYwMDAwXCIsXG4gIGZ1Y2hzaWE6IFwiI0ZGMDBGRlwiLFxuICBtYWdlbnRhOiBcIiNGRjAwRkZcIixcbiAgZGVlcHBpbms6IFwiI0ZGMTQ5M1wiLFxuICBvcmFuZ2VyZWQ6IFwiI0ZGNDUwMFwiLFxuICB0b21hdG86IFwiI0ZGNjM0N1wiLFxuICBob3RwaW5rOiBcIiNGRjY5QjRcIixcbiAgY29yYWw6IFwiI0ZGN0Y1MFwiLFxuICBkYXJrb3JhbmdlOiBcIiNGRjhDMDBcIixcbiAgbGlnaHRzYWxtb246IFwiI0ZGQTA3QVwiLFxuICBvcmFuZ2U6IFwiI0ZGQTUwMFwiLFxuICBsaWdodHBpbms6IFwiI0ZGQjZDMVwiLFxuICBwaW5rOiBcIiNGRkMwQ0JcIixcbiAgZ29sZDogXCIjRkZENzAwXCIsXG4gIHBlYWNocHVmZjogXCIjRkZEQUI5XCIsXG4gIG5hdmFqb3doaXRlOiBcIiNGRkRFQURcIixcbiAgbW9jY2FzaW46IFwiI0ZGRTRCNVwiLFxuICBiaXNxdWU6IFwiI0ZGRTRDNFwiLFxuICBtaXN0eXJvc2U6IFwiI0ZGRTRFMVwiLFxuICBibGFuY2hlZGFsbW9uZDogXCIjRkZFQkNEXCIsXG4gIHBhcGF5YXdoaXA6IFwiI0ZGRUZENVwiLFxuICBsYXZlbmRlcmJsdXNoOiBcIiNGRkYwRjVcIixcbiAgc2Vhc2hlbGw6IFwiI0ZGRjVFRVwiLFxuICBjb3Juc2lsazogXCIjRkZGOERDXCIsXG4gIGxlbW9uY2hpZmZvbjogXCIjRkZGQUNEXCIsXG4gIGZsb3JhbHdoaXRlOiBcIiNGRkZBRjBcIixcbiAgc25vdzogXCIjRkZGQUZBXCIsXG4gIHllbGxvdzogXCIjRkZGRjAwXCIsXG4gIGxpZ2h0eWVsbG93OiBcIiNGRkZGRTBcIixcbiAgaXZvcnk6IFwiI0ZGRkZGMFwiLFxuICB3aGl0ZTogXCIjRkZGRkZGXCIsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGl4ZWxSYXRpbz0xXVxuICovXG5sZXQgQ29sb3JQaWNrZXIkMSA9IGNsYXNzIENvbG9yUGlja2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGl4ZWxSYXRpbz0xXVxuICAgKi9cbiAgY29uc3RydWN0b3IocGl4ZWxSYXRpbyA9IDEpIHtcbiAgICB0aGlzLnBpeGVsUmF0aW8gPSBwaXhlbFJhdGlvO1xuICAgIHRoaXMuZ2VuZXJhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5jZW50ZXJDb29yZGluYXRlcyA9IHsgeDogMjg5IC8gMiwgeTogMjg5IC8gMiB9O1xuICAgIHRoaXMuciA9IDI4OSAqIDAuNDk7XG4gICAgdGhpcy5jb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5odWVDaXJjbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pbml0aWFsQ29sb3IgPSB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGE6IDEuMCB9O1xuICAgIHRoaXMucHJldmlvdXNDb2xvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFwcGxpZWQgPSBmYWxzZTtcblxuICAgIC8vIGJvdW5kIGJ5XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayA9ICgpID0+IHt9O1xuICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9ICgpID0+IHt9O1xuXG4gICAgLy8gY3JlYXRlIGFsbCBET00gZWxlbWVudHNcbiAgICB0aGlzLl9jcmVhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGluc2VydHMgdGhlIGNvbG9yUGlja2VyIGludG8gYSBkaXYgZnJvbSB0aGUgRE9NXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyXG4gICAqL1xuICBpbnNlcnRUbyhjb250YWluZXIpIHtcbiAgICBpZiAodGhpcy5oYW1tZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5oYW1tZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy5oYW1tZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICAgIHRoaXMuX2JpbmRIYW1tZXIoKTtcblxuICAgIHRoaXMuX3NldFNpemUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgb24gYXBwbHkgYW5kIHNhdmUuIEJpbmQgaXQgdG8gdGhlIGFwcGxpY2F0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBzZXRVcGRhdGVDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRnVuY3Rpb24gYXR0ZW1wdGVkIHRvIHNldCBhcyBjb2xvclBpY2tlciB1cGRhdGUgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldENsb3NlQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRnVuY3Rpb24gYXR0ZW1wdGVkIHRvIHNldCBhcyBjb2xvclBpY2tlciBjbG9zaW5nIGNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pc0NvbG9yU3RyaW5nKGNvbG9yKSB7XG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGh0bWxDb2xvcnNbY29sb3JdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbG9yIG9mIHRoZSBjb2xvclBpY2tlclxuICAgKiBTdXBwb3J0ZWQgZm9ybWF0czpcbiAgICogJ3JlZCcgICAgICAgICAgICAgICAgICAgLS0+IEhUTUwgY29sb3Igc3RyaW5nXG4gICAqICcjZmZmZmZmJyAgICAgICAgICAgICAgIC0tPiBoZXggc3RyaW5nXG4gICAqICdyZ2IoMjU1LDI1NSwyNTUpJyAgICAgIC0tPiByZ2Igc3RyaW5nXG4gICAqICdyZ2JhKDI1NSwyNTUsMjU1LDEuMCknIC0tPiByZ2JhIHN0cmluZ1xuICAgKiB7cjoyNTUsZzoyNTUsYjoyNTV9ICAgICAtLT4gcmdiIG9iamVjdFxuICAgKiB7cjoyNTUsZzoyNTUsYjoyNTUsYToxLjB9IC0tPiByZ2JhIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG9iamVjdH0gY29sb3JcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2V0SW5pdGlhbD10cnVlXVxuICAgKi9cbiAgc2V0Q29sb3IoY29sb3IsIHNldEluaXRpYWwgPSB0cnVlKSB7XG4gICAgaWYgKGNvbG9yID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZ2JhO1xuXG4gICAgLy8gaWYgYSBodG1sIGNvbG9yIHNob3J0aGFuZCBpcyB1c2VkLCBjb252ZXJ0IHRvIGhleFxuICAgIGNvbnN0IGh0bWxDb2xvciA9IHRoaXMuX2lzQ29sb3JTdHJpbmcoY29sb3IpO1xuICAgIGlmIChodG1sQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29sb3IgPSBodG1sQ29sb3I7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9ybWF0XG4gICAgaWYgKGlzU3RyaW5nKGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKGlzVmFsaWRSR0IoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHJnYmFBcnJheSA9IGNvbG9yXG4gICAgICAgICAgLnN1YnN0cig0KVxuICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3IubGVuZ3RoIC0gNSlcbiAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xuICAgICAgICByZ2JhID0geyByOiByZ2JhQXJyYXlbMF0sIGc6IHJnYmFBcnJheVsxXSwgYjogcmdiYUFycmF5WzJdLCBhOiAxLjAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZFJHQkEoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHJnYmFBcnJheSA9IGNvbG9yXG4gICAgICAgICAgLnN1YnN0cig1KVxuICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3IubGVuZ3RoIC0gNilcbiAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xuICAgICAgICByZ2JhID0ge1xuICAgICAgICAgIHI6IHJnYmFBcnJheVswXSxcbiAgICAgICAgICBnOiByZ2JhQXJyYXlbMV0sXG4gICAgICAgICAgYjogcmdiYUFycmF5WzJdLFxuICAgICAgICAgIGE6IHJnYmFBcnJheVszXSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZEhleChjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiT2JqID0gaGV4VG9SR0IoY29sb3IpO1xuICAgICAgICByZ2JhID0geyByOiByZ2JPYmouciwgZzogcmdiT2JqLmcsIGI6IHJnYk9iai5iLCBhOiAxLjAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbG9yIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2xvci5yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb2xvci5nICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb2xvci5iICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgYWxwaGEgPSBjb2xvci5hICE9PSB1bmRlZmluZWQgPyBjb2xvci5hIDogXCIxLjBcIjtcbiAgICAgICAgICByZ2JhID0geyByOiBjb2xvci5yLCBnOiBjb2xvci5nLCBiOiBjb2xvci5iLCBhOiBhbHBoYSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbG9yXG4gICAgaWYgKHJnYmEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlVua25vd24gY29sb3IgcGFzc2VkIHRvIHRoZSBjb2xvclBpY2tlci4gU3VwcG9ydGVkIGFyZSBzdHJpbmdzOiByZ2IsIGhleCwgcmdiYS4gT2JqZWN0OiByZ2IgKHtyOnIsZzpnLGI6YixbYTphXX0pLiBTdXBwbGllZDogXCIgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNvbG9yKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0Q29sb3IocmdiYSwgc2V0SW5pdGlhbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgc2hvd3MgdGhlIGNvbG9yIHBpY2tlci5cbiAgICogVGhlIGh1ZSBjaXJjbGUgaXMgY29uc3RydWN0ZWQgb25jZSBhbmQgc3RvcmVkLlxuICAgKi9cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICB0aGlzLl9nZW5lcmF0ZUh1ZUNpcmNsZSgpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBSSVZBVEUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuICAvKipcbiAgICogSGlkZSB0aGUgcGlja2VyLiBJcyBjYWxsZWQgYnkgdGhlIGNhbmNlbCBidXR0b24uXG4gICAqIE9wdGlvbmFsIGJvb2xlYW4gdG8gc3RvcmUgdGhlIHByZXZpb3VzIGNvbG9yIGZvciBlYXN5IGFjY2VzcyBsYXRlciBvbi5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbc3RvcmVQcmV2aW91cz10cnVlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hpZGUoc3RvcmVQcmV2aW91cyA9IHRydWUpIHtcbiAgICAvLyBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIG5leHQgdGltZTtcbiAgICBpZiAoc3RvcmVQcmV2aW91cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5wcmV2aW91c0NvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXBwbGllZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmluaXRpYWxDb2xvcik7XG4gICAgfVxuXG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cbiAgICAvLyBjYWxsIHRoZSBjbG9zaW5nIGNhbGxiYWNrLCByZXN0b3JpbmcgdGhlIG9uY2xpY2sgbWV0aG9kLlxuICAgIC8vIHRoaXMgaXMgaW4gYSBzZXRUaW1lb3V0IGJlY2F1c2UgaXQgd2lsbCB0cmlnZ2VyIHRoZSBzaG93IGFnYWluIGJlZm9yZSB0aGUgY2xpY2sgaXMgZG9uZS5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcbiAgICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIGJvdW5kIHRvIHRoZSBzYXZlIGJ1dHRvbi4gU2F2ZXMgYW5kIGhpZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NhdmUoKSB7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLmFwcGxpZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9oaWRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQm91bmQgdG8gYXBwbHkgYnV0dG9uLiBTYXZlcyBidXQgZG9lcyBub3QgY2xvc2UuIElzIHVuZG9uZSBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hcHBseSgpIHtcbiAgICB0aGlzLmFwcGxpZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2sodGhpcy5jb2xvcik7XG4gICAgdGhpcy5fdXBkYXRlUGlja2VyKHRoaXMuY29sb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIGxvYWQgdGhlIGNvbG9yIGZyb20gdGhlIHByZXZpb3VzIHNlc3Npb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbG9hZExhc3QoKSB7XG4gICAgaWYgKHRoaXMucHJldmlvdXNDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldENvbG9yKHRoaXMucHJldmlvdXNDb2xvciwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGVydChcIlRoZXJlIGlzIG5vIGxhc3QgY29sb3IgdG8gbG9hZC4uLlwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBjb2xvciwgcGxhY2UgdGhlIHBpY2tlclxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0Q29sb3IocmdiYSwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICAvLyBzdG9yZSB0aGUgaW5pdGlhbCBjb2xvclxuICAgIGlmIChzZXRJbml0aWFsID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmluaXRpYWxDb2xvciA9IE9iamVjdC5hc3NpZ24oe30sIHJnYmEpO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuXG4gICAgY29uc3QgYW5nbGVDb252ZXJ0ID0gMiAqIE1hdGguUEk7XG4gICAgY29uc3QgcmFkaXVzID0gdGhpcy5yICogaHN2LnM7XG4gICAgY29uc3QgeCA9XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnggKyByYWRpdXMgKiBNYXRoLnNpbihhbmdsZUNvbnZlcnQgKiBoc3YuaCk7XG4gICAgY29uc3QgeSA9XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnkgKyByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZUNvbnZlcnQgKiBoc3YuaCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUubGVmdCA9XG4gICAgICB4IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudFdpZHRoICsgXCJweFwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS50b3AgPVxuICAgICAgeSAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG5cbiAgICB0aGlzLl91cGRhdGVQaWNrZXIocmdiYSk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gb3BhY2l0eSBjb250cm9sXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldE9wYWNpdHkodmFsdWUpIHtcbiAgICB0aGlzLmNvbG9yLmEgPSB2YWx1ZSAvIDEwMDtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gYnJpZ2h0bmVzcyBjb250cm9sXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldEJyaWdodG5lc3ModmFsdWUpIHtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVih0aGlzLmNvbG9yLnIsIHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iKTtcbiAgICBoc3YudiA9IHZhbHVlIC8gMTAwO1xuICAgIGNvbnN0IHJnYmEgPSBIU1ZUb1JHQihoc3YuaCwgaHN2LnMsIGhzdi52KTtcbiAgICByZ2JhW1wiYVwiXSA9IHRoaXMuY29sb3IuYTtcbiAgICB0aGlzLmNvbG9yID0gcmdiYTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGUgdGhlIGNvbG9yIHBpY2tlci4gQSBibGFjayBjaXJjbGUgb3ZlcmxheXMgdGhlIGh1ZSBjaXJjbGUgdG8gbWltaWMgdGhlIGJyaWdodG5lc3MgZGVjcmVhc2luZy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHJnYmFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVQaWNrZXIocmdiYSA9IHRoaXMuY29sb3IpIHtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVihyZ2JhLnIsIHJnYmEuZywgcmdiYS5iKTtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICBpZiAodGhpcy5waXhlbFJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBpeGVsUmF0aW8gPVxuICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAoY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHguYmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIDEpO1xuICAgIH1cbiAgICBjdHguc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcblxuICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICBjb25zdCB3ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBoID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRIZWlnaHQ7XG4gICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgIGN0eC5wdXRJbWFnZURhdGEodGhpcy5odWVDaXJjbGUsIDAsIDApO1xuICAgIGN0eC5maWxsU3R5bGUgPSBcInJnYmEoMCwwLDAsXCIgKyAoMSAtIGhzdi52KSArIFwiKVwiO1xuICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgY3R4LmZpbGwoKTtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gMTAwICogaHN2LnY7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UudmFsdWUgPSAxMDAgKiByZ2JhLmE7XG5cbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgXCJyZ2JhKFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5iICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gICAgdGhpcy5uZXdDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgXCJyZ2JhKFwiICtcbiAgICAgIHRoaXMuY29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5iICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB1c2VkIGJ5IGNyZWF0ZSB0byBzZXQgdGhlIHNpemUgb2YgdGhlIGNhbnZhcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRTaXplKCkge1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLnN0eWxlLmhlaWdodCA9IFwiMTAwJVwiO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy53aWR0aCA9IDI4OSAqIHRoaXMucGl4ZWxSYXRpbztcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmhlaWdodCA9IDI4OSAqIHRoaXMucGl4ZWxSYXRpbztcbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGUgYWxsIGRvbSBlbGVtZW50c1xuICAgKiBUT0RPOiBjbGVhbnVwLCBsb3RzIG9mIHNpbWlsYXIgZG9tIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlKCkge1xuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtY29sb3ItcGlja2VyXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGFzc05hbWUgPSBcInZpcy1zZWxlY3RvclwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlclNlbGVjdG9yKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckNhbnZhcyk7XG5cbiAgICBpZiAoIXRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dCkge1xuICAgICAgY29uc3Qgbm9DYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpO1xuICAgICAgbm9DYW52YXMuc3R5bGUuY29sb3IgPSBcInJlZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUucGFkZGluZyA9IFwiMTBweFwiO1xuICAgICAgbm9DYW52YXMuaW5uZXJUZXh0ID0gXCJFcnJvcjogeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTCBjYW52YXNcIjtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuYXBwZW5kQ2hpbGQobm9DYW52YXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzXG4gICAgICAgIC5nZXRDb250ZXh0KFwiMmRcIilcbiAgICAgICAgLnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5jbGFzc05hbWUgPSBcInZpcy1jb2xvclwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm9wYWNpdHlEaXYuY2xhc3NOYW1lID0gXCJ2aXMtb3BhY2l0eVwiO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuY2xhc3NOYW1lID0gXCJ2aXMtYnJpZ2h0bmVzc1wiO1xuXG4gICAgdGhpcy5hcnJvd0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcnJvd0Rpdi5jbGFzc05hbWUgPSBcInZpcy1hcnJvd1wiO1xuXG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLnR5cGUgPSBcInJhbmdlXCI7IC8vIE5vdCBzdXBwb3J0ZWQgb24gSUU5XG4gICAgICB0aGlzLm9wYWNpdHlSYW5nZS5taW4gPSBcIjBcIjtcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1heCA9IFwiMTAwXCI7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPOiBBZGQgc29tZSBlcnJvciBoYW5kbGluZy5cbiAgICB9XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UudmFsdWUgPSBcIjEwMFwiO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLmNsYXNzTmFtZSA9IFwidmlzLXJhbmdlXCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMub3BhY2l0eURpdi5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlSYW5nZSk7XG4gICAgdGhpcy5icmlnaHRuZXNzRGl2LmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc1JhbmdlKTtcblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRPcGFjaXR5KHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRPcGFjaXR5KHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fc2V0QnJpZ2h0bmVzcyh0aGlzLnZhbHVlKTtcbiAgICB9O1xuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fc2V0QnJpZ2h0bmVzcyh0aGlzLnZhbHVlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0xhYmVsLmNsYXNzTmFtZSA9IFwidmlzLWxhYmVsIHZpcy1icmlnaHRuZXNzXCI7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuaW5uZXJUZXh0ID0gXCJicmlnaHRuZXNzOlwiO1xuXG4gICAgdGhpcy5vcGFjaXR5TGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eUxhYmVsLmNsYXNzTmFtZSA9IFwidmlzLWxhYmVsIHZpcy1vcGFjaXR5XCI7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuaW5uZXJUZXh0ID0gXCJvcGFjaXR5OlwiO1xuXG4gICAgdGhpcy5uZXdDb2xvckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5uZXdDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1uZXctY29sb3JcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmlubmVyVGV4dCA9IFwibmV3XCI7XG5cbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuY2xhc3NOYW1lID0gXCJ2aXMtaW5pdGlhbC1jb2xvclwiO1xuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LmlubmVyVGV4dCA9IFwiaW5pdGlhbFwiO1xuXG4gICAgdGhpcy5jYW5jZWxCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtY2FuY2VsXCI7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uaW5uZXJUZXh0ID0gXCJjYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5faGlkZS5iaW5kKHRoaXMsIGZhbHNlKTtcblxuICAgIHRoaXMuYXBwbHlCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYXBwbHlCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1hcHBseVwiO1xuICAgIHRoaXMuYXBwbHlCdXR0b24uaW5uZXJUZXh0ID0gXCJhcHBseVwiO1xuICAgIHRoaXMuYXBwbHlCdXR0b24ub25jbGljayA9IHRoaXMuX2FwcGx5LmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnNhdmVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLXNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24uaW5uZXJUZXh0ID0gXCJzYXZlXCI7XG4gICAgdGhpcy5zYXZlQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9zYXZlLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmxvYWRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWxvYWRcIjtcbiAgICB0aGlzLmxvYWRCdXR0b24uaW5uZXJUZXh0ID0gXCJsb2FkIGxhc3RcIjtcbiAgICB0aGlzLmxvYWRCdXR0b24ub25jbGljayA9IHRoaXMuX2xvYWRMYXN0LmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY29sb3JQaWNrZXJEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5hcnJvd0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmJyaWdodG5lc3NMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmJyaWdodG5lc3NEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5vcGFjaXR5TGFiZWwpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5vcGFjaXR5RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubmV3Q29sb3JEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5pbml0aWFsQ29sb3JEaXYpO1xuXG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmNhbmNlbEJ1dHRvbik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFwcGx5QnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuc2F2ZUJ1dHRvbik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmxvYWRCdXR0b24pO1xuICB9XG5cbiAgLyoqXG4gICAqIGJpbmQgaGFtbWVyIHRvIHRoZSBjb2xvciBwaWNrZXJcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9iaW5kSGFtbWVyKCkge1xuICAgIHRoaXMuZHJhZyA9IHt9O1xuICAgIHRoaXMucGluY2ggPSB7fTtcbiAgICB0aGlzLmhhbW1lciA9IG5ldyBIYW1tZXIkMSh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcbiAgICB0aGlzLmhhbW1lci5nZXQoXCJwaW5jaFwiKS5zZXQoeyBlbmFibGU6IHRydWUgfSk7XG5cbiAgICB0aGlzLmhhbW1lci5vbihcImhhbW1lci5pbnB1dFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5pc0ZpcnN0KSB7XG4gICAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJ0YXBcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFuc3RhcnRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFubW92ZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5lbmRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlIHRoZSBodWUgY2lyY2xlLiBUaGlzIGlzIHJlbGF0aXZlbHkgaGVhdnkgKDIwMG1zKSBhbmQgaXMgZG9uZSBvbmx5IG9uY2Ugb24gdGhlIGZpcnN0IHRpbWUgaXQgaXMgc2hvd24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2VuZXJhdGVIdWVDaXJjbGUoKSB7XG4gICAgaWYgKHRoaXMuZ2VuZXJhdGVkID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgY3R4ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICBpZiAodGhpcy5waXhlbFJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgICAoY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICBjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICAxKTtcbiAgICAgIH1cbiAgICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgICAvLyBjbGVhciB0aGUgY2FudmFzXG4gICAgICBjb25zdCB3ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG5cbiAgICAgIC8vIGRyYXcgaHVlIGNpcmNsZVxuICAgICAgbGV0IHgsIHksIGh1ZSwgc2F0O1xuICAgICAgdGhpcy5jZW50ZXJDb29yZGluYXRlcyA9IHsgeDogdyAqIDAuNSwgeTogaCAqIDAuNSB9O1xuICAgICAgdGhpcy5yID0gMC40OSAqIHc7XG4gICAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAoMiAqIE1hdGguUEkpIC8gMzYwO1xuICAgICAgY29uc3QgaGZhYyA9IDEgLyAzNjA7XG4gICAgICBjb25zdCBzZmFjID0gMSAvIHRoaXMucjtcbiAgICAgIGxldCByZ2I7XG4gICAgICBmb3IgKGh1ZSA9IDA7IGh1ZSA8IDM2MDsgaHVlKyspIHtcbiAgICAgICAgZm9yIChzYXQgPSAwOyBzYXQgPCB0aGlzLnI7IHNhdCsrKSB7XG4gICAgICAgICAgeCA9IHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHNhdCAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGh1ZSk7XG4gICAgICAgICAgeSA9IHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHNhdCAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGh1ZSk7XG4gICAgICAgICAgcmdiID0gSFNWVG9SR0IoaHVlICogaGZhYywgc2F0ICogc2ZhYywgMSk7XG4gICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiKFwiICsgcmdiLnIgKyBcIixcIiArIHJnYi5nICsgXCIsXCIgKyByZ2IuYiArIFwiKVwiO1xuICAgICAgICAgIGN0eC5maWxsUmVjdCh4IC0gMC41LCB5IC0gMC41LCAyLCAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCJyZ2JhKDAsMCwwLDEpXCI7XG4gICAgICBjdHguY2lyY2xlKHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCwgdGhpcy5jZW50ZXJDb29yZGluYXRlcy55LCB0aGlzLnIpO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICB0aGlzLmh1ZUNpcmNsZSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgdywgaCk7XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtb3ZlIHRoZSBzZWxlY3Rvci4gVGhpcyBpcyBjYWxsZWQgYnkgaGFtbWVyIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbW92ZVNlbGVjdG9yKGV2ZW50KSB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuY29sb3JQaWNrZXJEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbGVmdCA9IGV2ZW50LmNlbnRlci54IC0gcmVjdC5sZWZ0O1xuICAgIGNvbnN0IHRvcCA9IGV2ZW50LmNlbnRlci55IC0gcmVjdC50b3A7XG5cbiAgICBjb25zdCBjZW50ZXJZID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgY2VudGVyWCA9IDAuNSAqIHRoaXMuY29sb3JQaWNrZXJEaXYuY2xpZW50V2lkdGg7XG5cbiAgICBjb25zdCB4ID0gbGVmdCAtIGNlbnRlclg7XG4gICAgY29uc3QgeSA9IHRvcCAtIGNlbnRlclk7XG5cbiAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIoeCwgeSk7XG4gICAgY29uc3QgcmFkaXVzID0gMC45OCAqIE1hdGgubWluKE1hdGguc3FydCh4ICogeCArIHkgKiB5KSwgY2VudGVyWCk7XG5cbiAgICBjb25zdCBuZXdUb3AgPSBNYXRoLmNvcyhhbmdsZSkgKiByYWRpdXMgKyBjZW50ZXJZO1xuICAgIGNvbnN0IG5ld0xlZnQgPSBNYXRoLnNpbihhbmdsZSkgKiByYWRpdXMgKyBjZW50ZXJYO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICBuZXdUb3AgLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50SGVpZ2h0ICsgXCJweFwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIG5ld0xlZnQgLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBsZXQgaCA9IGFuZ2xlIC8gKDIgKiBNYXRoLlBJKTtcbiAgICBoID0gaCA8IDAgPyBoICsgMSA6IGg7XG4gICAgY29uc3QgcyA9IHJhZGl1cyAvIHRoaXMucjtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVih0aGlzLmNvbG9yLnIsIHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iKTtcbiAgICBoc3YuaCA9IGg7XG4gICAgaHN2LnMgPSBzO1xuICAgIGNvbnN0IHJnYmEgPSBIU1ZUb1JHQihoc3YuaCwgaHN2LnMsIGhzdi52KTtcbiAgICByZ2JhW1wiYVwiXSA9IHRoaXMuY29sb3IuYTtcbiAgICB0aGlzLmNvbG9yID0gcmdiYTtcblxuICAgIC8vIHVwZGF0ZSBwcmV2aWV3c1xuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG59O1xuXG4vKipcbiAqIFdyYXAgZ2l2ZW4gdGV4dCAobGFzdCBhcmd1bWVudCkgaW4gSFRNTCBlbGVtZW50cyAoYWxsIHByZWNlZGluZyBhcmd1bWVudHMpLlxuICpcbiAqIEBwYXJhbSB7Li4uYW55fSByZXN0IC0gTGlzdCBvZiB0YWcgbmFtZXMgZm9sbG93ZWQgYnkgaW5uZXIgdGV4dC5cbiAqIEByZXR1cm5zIEFuIGVsZW1lbnQgb3IgYSB0ZXh0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHdyYXBJblRhZyguLi5yZXN0KSB7XG4gIGlmIChyZXN0Lmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMuXCIpO1xuICB9IGVsc2UgaWYgKHJlc3QubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlc3RbMF0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJlc3RbMF0pO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQod3JhcEluVGFnKC4uLnJlc3Quc2xpY2UoMSkpKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB3YXkgdGhpcyB3b3JrcyBpcyBmb3IgYWxsIHByb3BlcnRpZXMgb2YgdGhpcy5wb3NzaWJsZSBvcHRpb25zLCB5b3UgY2FuIHN1cHBseSB0aGUgcHJvcGVydHkgbmFtZSBpbiBhbnkgZm9ybSB0byBsaXN0IHRoZSBvcHRpb25zLlxuICogQm9vbGVhbiBvcHRpb25zIGFyZSByZWNvZ25pc2VkIGFzIEJvb2xlYW5cbiAqIE51bWJlciBvcHRpb25zIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbZGVmYXVsdCB2YWx1ZSwgbWluIHZhbHVlLCBtYXggdmFsdWUsIHN0ZXBzaXplXVxuICogQ29sb3JzIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbJ2NvbG9yJywgJyNmZmZmZmYnXVxuICogU3RyaW5ncyB3aXRoIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbb3B0aW9uMSwgb3B0aW9uMiwgb3B0aW9uMywgLi5dXG4gKlxuICogVGhlIG9wdGlvbnMgYXJlIG1hdGNoZWQgd2l0aCB0aGVpciBjb3VudGVycGFydHMgaW4gZWFjaCBvZiB0aGUgbW9kdWxlcyBhbmQgdGhlIHZhbHVlcyB1c2VkIGluIHRoZSBjb25maWd1cmF0aW9uIGFyZVxuICovXG5sZXQgQ29uZmlndXJhdG9yJDEgPSBjbGFzcyBDb25maWd1cmF0b3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudE1vZHVsZSAgICAgICAgfCB0aGUgbG9jYXRpb24gd2hlcmUgcGFyZW50TW9kdWxlLnNldE9wdGlvbnMoKSBjYW4gYmUgY2FsbGVkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0Q29udGFpbmVyICAgIHwgdGhlIGRlZmF1bHQgY29udGFpbmVyIG9mIHRoZSBtb2R1bGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ3VyZU9wdGlvbnMgICAgfCB0aGUgZnVsbHkgY29uZmlndXJlZCBhbmQgcHJlZGVmaW5lZCBvcHRpb25zIHNldCBmb3VuZCBpbiBhbGxPcHRpb25zLmpzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaXhlbFJhdGlvICAgICAgICAgIHwgY2FudmFzIHBpeGVsIHJhdGlvXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhpZGVPcHRpb24gICAgICAgIHwgY3VzdG9tIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGhpZGUgb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50TW9kdWxlLFxuICAgIGRlZmF1bHRDb250YWluZXIsXG4gICAgY29uZmlndXJlT3B0aW9ucyxcbiAgICBwaXhlbFJhdGlvID0gMSxcbiAgICBoaWRlT3B0aW9uID0gKCkgPT4gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnRNb2R1bGU7XG4gICAgdGhpcy5jaGFuZ2VkT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuY29udGFpbmVyID0gZGVmYXVsdENvbnRhaW5lcjtcbiAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmhpZGVPcHRpb24gPSBoaWRlT3B0aW9uO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMucG9wdXBDb3VudGVyID0gMDtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBmaWx0ZXI6IHRydWUsXG4gICAgICBjb250YWluZXI6IHVuZGVmaW5lZCxcbiAgICAgIHNob3dCdXR0b246IHRydWUsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmNvbmZpZ3VyZU9wdGlvbnMgPSBjb25maWd1cmVPcHRpb25zO1xuICAgIHRoaXMubW9kdWxlT3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcbiAgICB0aGlzLnBvcHVwRGl2ID0ge307XG4gICAgdGhpcy5wb3B1cExpbWl0ID0gNTtcbiAgICB0aGlzLnBvcHVwSGlzdG9yeSA9IHt9O1xuICAgIHRoaXMuY29sb3JQaWNrZXIgPSBuZXcgQ29sb3JQaWNrZXIkMShwaXhlbFJhdGlvKTtcbiAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogcmVmcmVzaCBhbGwgb3B0aW9ucy5cbiAgICogQmVjYXVzZSBhbGwgbW9kdWxlcyBwYXJzZSB0aGVpciBvcHRpb25zIGJ5IHRoZW1zZWx2ZXMsIHdlIGp1c3QgdXNlIHRoZWlyIG9wdGlvbnMuIFdlIGNvcHkgdGhlbSBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmVzZXQgdGhlIHBvcHVwIGhpc3RvcnkgYmVjYXVzZSB0aGUgaW5kaWNlcyBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQuXG4gICAgICB0aGlzLnBvcHVwSGlzdG9yeSA9IHt9O1xuICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcblxuICAgICAgbGV0IGVuYWJsZWQgPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zLmpvaW4oKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb25zIGNhbm5vdCBiZSBudWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnNob3dCdXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93QnV0dG9uID0gb3B0aW9ucy5zaG93QnV0dG9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSB0cnVlO1xuICAgICAgICBlbmFibGVkID0gb3B0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucztcbiAgICAgICAgZW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgfVxuICAgIHRoaXMuX2NsZWFuKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG1vZHVsZU9wdGlvbnNcbiAgICovXG4gIHNldE1vZHVsZU9wdGlvbnMobW9kdWxlT3B0aW9ucykge1xuICAgIHRoaXMubW9kdWxlT3B0aW9ucyA9IG1vZHVsZU9wdGlvbnM7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLl9jbGVhbigpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMub3B0aW9ucy5jb250YWluZXI7XG4gICAgICB9XG4gICAgICB0aGlzLl9jcmVhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG5cbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCBjb3VudGVyID0gMDtcbiAgICBsZXQgc2hvdyA9IGZhbHNlO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIGluIHRoaXMuY29uZmlndXJlT3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnMsIG9wdGlvbikpIHtcbiAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgIHNob3cgPSBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIob3B0aW9uLCBbXSk7XG4gICAgICAgICAgc2hvdyA9XG4gICAgICAgICAgICBzaG93IHx8XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIgPT09IHRydWUgfHwgZmlsdGVyLmluZGV4T2Yob3B0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICBzaG93ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IHRydWU7XG5cbiAgICAgICAgICAvLyBsaW5lYnJlYWsgYmV0d2VlbiBjYXRlZ29yaWVzXG4gICAgICAgICAgaWYgKGNvdW50ZXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShbXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGEgaGVhZGVyIGZvciB0aGUgY2F0ZWdvcnlcbiAgICAgICAgICB0aGlzLl9tYWtlSGVhZGVyKG9wdGlvbik7XG5cbiAgICAgICAgICAvLyBnZXQgdGhlIHN1YiBvcHRpb25zXG4gICAgICAgICAgdGhpcy5faGFuZGxlT2JqZWN0KHRoaXMuY29uZmlndXJlT3B0aW9uc1tvcHRpb25dLCBbb3B0aW9uXSk7XG4gICAgICAgIH1cbiAgICAgICAgY291bnRlcisrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9tYWtlQnV0dG9uKCk7XG4gICAgdGhpcy5fcHVzaCgpO1xuICAgIC8vfiB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKHRoaXMuY29udGFpbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBkcmF3IGFsbCBET00gZWxlbWVudHMgb24gdGhlIHNjcmVlblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3B1c2goKSB7XG4gICAgdGhpcy53cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLndyYXBwZXIuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi13cmFwcGVyXCI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy53cmFwcGVyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zaG93UG9wdXBJZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBhbGwgRE9NIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndyYXBwZXIucmVtb3ZlQ2hpbGQodGhpcy5kb21FbGVtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud3JhcHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgICAgdGhpcy53cmFwcGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmRvbUVsZW1lbnRzID0gW107XG5cbiAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgYWN0dWFsT3B0aW9ucyBpZiBpdCBleGlzdHNcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFZhbHVlKHBhdGgpIHtcbiAgICBsZXQgYmFzZSA9IHRoaXMubW9kdWxlT3B0aW9ucztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChiYXNlW3BhdGhbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYmFzZSA9IGJhc2VbcGF0aFtpXV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cblxuICAvKipcbiAgICogYWxsIG9wdGlvbiBlbGVtZW50cyBhcmUgd3JhcHBlZCBpbiBhbiBpdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge0FycmF5LjxFbGVtZW50Pn0gZG9tRWxlbWVudHNcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlSXRlbShwYXRoLCAuLi5kb21FbGVtZW50cykge1xuICAgIGlmICh0aGlzLmFsbG93Q3JlYXRpb24gPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgaXRlbS5jbGFzc05hbWUgPVxuICAgICAgICBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctaXRlbSB2aXMtY29uZmlnLXNcIiArIHBhdGgubGVuZ3RoO1xuICAgICAgZG9tRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIGhlYWRlciBmb3IgbWFqb3Igc3ViamVjdHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlSGVhZGVyKG5hbWUpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctaGVhZGVyXCI7XG4gICAgZGl2LmlubmVyVGV4dCA9IG5hbWU7XG4gICAgdGhpcy5fbWFrZUl0ZW0oW10sIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGxhYmVsLCBpZiBpdCBpcyBhbiBvYmplY3QgbGFiZWwsIGl0IGdldHMgZGlmZmVyZW50IHN0eWxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2JqZWN0TGFiZWxcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VMYWJlbChuYW1lLCBwYXRoLCBvYmplY3RMYWJlbCA9IGZhbHNlKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkaXYuY2xhc3NOYW1lID1cbiAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1sYWJlbCB2aXMtY29uZmlnLXNcIiArIHBhdGgubGVuZ3RoO1xuICAgIGlmIChvYmplY3RMYWJlbCA9PT0gdHJ1ZSkge1xuICAgICAgd2hpbGUgKGRpdi5maXJzdENoaWxkKSB7XG4gICAgICAgIGRpdi5yZW1vdmVDaGlsZChkaXYuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICBkaXYuYXBwZW5kQ2hpbGQod3JhcEluVGFnKFwiaVwiLCBcImJcIiwgbmFtZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZSArIFwiOlwiO1xuICAgIH1cbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBkcm9wZG93biBsaXN0IGZvciBtdWx0aXBsZSBwb3NzaWJsZSBzdHJpbmcgb3B0b2luc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VEcm9wZG93bihhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKTtcbiAgICBzZWxlY3QuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXNlbGVjdFwiO1xuICAgIGxldCBzZWxlY3RlZFZhbHVlID0gMDtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGFyci5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGFyci5pbmRleE9mKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcbiAgICAgIG9wdGlvbi52YWx1ZSA9IGFycltpXTtcbiAgICAgIGlmIChpID09PSBzZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IFwic2VsZWN0ZWRcIjtcbiAgICAgIH1cbiAgICAgIG9wdGlvbi5pbm5lclRleHQgPSBhcnJbaV07XG4gICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgc2VsZWN0Lm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3VwZGF0ZSh0aGlzLnZhbHVlLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgc2VsZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgcmFuZ2Ugb2JqZWN0IGZvciBudW1lcmljIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYXJyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGFyclswXTtcbiAgICBjb25zdCBtaW4gPSBhcnJbMV07XG4gICAgY29uc3QgbWF4ID0gYXJyWzJdO1xuICAgIGNvbnN0IHN0ZXAgPSBhcnJbM107XG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgcmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlXCI7XG4gICAgdHJ5IHtcbiAgICAgIHJhbmdlLnR5cGUgPSBcInJhbmdlXCI7IC8vIG5vdCBzdXBwb3J0ZWQgb24gSUU5XG4gICAgICByYW5nZS5taW4gPSBtaW47XG4gICAgICByYW5nZS5tYXggPSBtYXg7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPOiBBZGQgc29tZSBlcnJvciBoYW5kbGluZy5cbiAgICB9XG4gICAgcmFuZ2Uuc3RlcCA9IHN0ZXA7XG5cbiAgICAvLyBzZXQgdXAgdGhlIHBvcHVwIHNldHRpbmdzIGluIGNhc2UgdGhleSBhcmUgbmVlZGVkLlxuICAgIGxldCBwb3B1cFN0cmluZyA9IFwiXCI7XG4gICAgbGV0IHBvcHVwVmFsdWUgPSAwO1xuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZhY3RvciA9IDEuMjtcbiAgICAgIGlmICh2YWx1ZSA8IDAgJiYgdmFsdWUgKiBmYWN0b3IgPCBtaW4pIHtcbiAgICAgICAgcmFuZ2UubWluID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1pbjtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAvIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgLyBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgKiBmYWN0b3IgPiBtYXggJiYgbWF4ICE9PSAxKSB7XG4gICAgICAgIHJhbmdlLm1heCA9IE1hdGguY2VpbCh2YWx1ZSAqIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5tYXg7XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIHJhbmdlLnZhbHVlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGlucHV0LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1yYW5nZWlucHV0XCI7XG4gICAgaW5wdXQudmFsdWUgPSByYW5nZS52YWx1ZTtcblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICByYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIG1lLl91cGRhdGUoTnVtYmVyKHRoaXMudmFsdWUpLCBwYXRoKTtcbiAgICB9O1xuICAgIHJhbmdlLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIHJhbmdlLCBpbnB1dCk7XG5cbiAgICAvLyBpZiBhIHBvcHVwIGlzIG5lZWRlZCBBTkQgaXQgaGFzIG5vdCBiZWVuIHNob3duIGZvciB0aGlzIHZhbHVlLCBzaG93IGl0LlxuICAgIGlmIChwb3B1cFN0cmluZyAhPT0gXCJcIiAmJiB0aGlzLnBvcHVwSGlzdG9yeVtpdGVtSW5kZXhdICE9PSBwb3B1cFZhbHVlKSB7XG4gICAgICB0aGlzLnBvcHVwSGlzdG9yeVtpdGVtSW5kZXhdID0gcG9wdXBWYWx1ZTtcbiAgICAgIHRoaXMuX3NldHVwUG9wdXAocG9wdXBTdHJpbmcsIGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBidXR0b24gb2JqZWN0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUJ1dHRvbigpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNob3dCdXR0b24gPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGdlbmVyYXRlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLmlubmVyVGV4dCA9IFwiZ2VuZXJhdGUgb3B0aW9uc1wiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24ub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcHJpbnRPcHRpb25zKCk7XG4gICAgICB9O1xuICAgICAgZ2VuZXJhdGVCdXR0b24ub25tb3VzZW92ZXIgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b24gaG92ZXJcIjtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3V0ID0gKCkgPT4ge1xuICAgICAgICBnZW5lcmF0ZUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctYnV0dG9uXCI7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5vcHRpb25zQ29udGFpbmVyLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1vcHRpb24tY29udGFpbmVyXCI7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaCh0aGlzLm9wdGlvbnNDb250YWluZXIpO1xuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKGdlbmVyYXRlQnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcHJlcGFyZSB0aGUgcG9wdXBcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXR1cFBvcHVwKHN0cmluZywgaW5kZXgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmluaXRpYWxpemVkID09PSB0cnVlICYmXG4gICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPT09IHRydWUgJiZcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyIDwgdGhpcy5wb3B1cExpbWl0XG4gICAgKSB7XG4gICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZGl2LmlkID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24tcG9wdXBcIjtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBzdHJpbmc7XG4gICAgICBkaXYub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnBvcHVwQ291bnRlciArPSAxO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHsgaHRtbDogZGl2LCBpbmRleDogaW5kZXggfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcmVtb3ZlIHRoZSBwb3B1cCBmcm9tIHRoZSBkb21cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVQb3B1cCgpIHtcbiAgICBpZiAodGhpcy5wb3B1cERpdi5odG1sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9wdXBEaXYuaHRtbCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cERpdi5kZWxldGVUaW1lb3V0KTtcbiAgICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgaWYgaXQgaXMgbmVlZGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Nob3dQb3B1cElmTmVlZGVkKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29ycmVzcG9uZGluZ0VsZW1lbnQgPSB0aGlzLmRvbUVsZW1lbnRzW3RoaXMucG9wdXBEaXYuaW5kZXhdO1xuICAgICAgY29uc3QgcmVjdCA9IGNvcnJlc3BvbmRpbmdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyBcInB4XCI7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUudG9wID0gcmVjdC50b3AgLSAzMCArIFwicHhcIjsgLy8gMzAgaXMgdGhlIGhlaWdodDtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuaGlkZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgICAgfSwgMTUwMCk7XG4gICAgICB0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcbiAgICAgIH0sIDE4MDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY2hlY2tib3ggZm9yIGJvb2xlYW4gb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNoZWNrYm94KGRlZmF1bHRWYWx1ZSwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBjaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBjaGVja2JveC50eXBlID0gXCJjaGVja2JveFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jaGVja2JveFwiO1xuICAgIGNoZWNrYm94LmNoZWNrZWQgPSBkZWZhdWx0VmFsdWU7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY2hlY2tib3gub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMuY2hlY2tlZCwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgdGV4dCBpbnB1dCBmaWVsZCBmb3Igc3RyaW5nIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWZhdWx0VmFsdWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VUZXh0SW5wdXQoZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcInRleHRcIjtcbiAgICBjaGVja2JveC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctdGV4dFwiO1xuICAgIGNoZWNrYm94LnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY2hlY2tib3gub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBjaGVja2JveCk7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGNvbG9yIGZpZWxkIHdpdGggYSBjb2xvciBwaWNrZXIgZm9yIGNvbG9yIGZpZWxkc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VDb2xvckZpZWxkKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29sb3IgPSBhcnJbMV07XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBkZWZhdWx0Q29sb3IgOiB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAhPT0gXCJub25lXCIpIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9ja1wiO1xuICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNvbG9yQmxvY2sgbm9uZVwiO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBkaXYpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgdGhlIGNvbG9yIGJ1dHRvbnMgdG8gY2FsbCB0aGUgY29sb3IgcGlja2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZGl2XG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKSB7XG4gICAgLy8gY2xlYXIgdGhlIGNhbGxiYWNrIGZyb20gdGhpcyBkaXZcbiAgICBkaXYub25jbGljayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgdGhpcy5jb2xvclBpY2tlci5pbnNlcnRUbyhkaXYpO1xuICAgIHRoaXMuY29sb3JQaWNrZXIuc2hvdygpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRDb2xvcih2YWx1ZSk7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRVcGRhdGVDYWxsYmFjaygoY29sb3IpID0+IHtcbiAgICAgIGNvbnN0IGNvbG9yU3RyaW5nID1cbiAgICAgICAgXCJyZ2JhKFwiICsgY29sb3IuciArIFwiLFwiICsgY29sb3IuZyArIFwiLFwiICsgY29sb3IuYiArIFwiLFwiICsgY29sb3IuYSArIFwiKVwiO1xuICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yU3RyaW5nO1xuICAgICAgdGhpcy5fdXBkYXRlKGNvbG9yU3RyaW5nLCBwYXRoKTtcbiAgICB9KTtcblxuICAgIC8vIG9uIGNsb3NlIG9mIHRoZSBjb2xvcnBpY2tlciwgcmVzdG9yZSB0aGUgY2FsbGJhY2suXG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRDbG9zZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHBhcnNlIGFuIG9iamVjdCBhbmQgZHJhdyB0aGUgY29ycmVjdCBpdGVtc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtwYXRoPVtdXSAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrT25seT1mYWxzZV1cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGFuZGxlT2JqZWN0KG9iaiwgcGF0aCA9IFtdLCBjaGVja09ubHkgPSBmYWxzZSkge1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5vcHRpb25zLmZpbHRlcjtcbiAgICBsZXQgdmlzaWJsZUluU2V0ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBzdWJPYmogaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgc3ViT2JqKSkge1xuICAgICAgICBzaG93ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaXRlbSA9IG9ialtzdWJPYmpdO1xuICAgICAgICBjb25zdCBuZXdQYXRoID0gY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIHN1Yk9iaik7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBzaG93ID0gZmlsdGVyKHN1Yk9iaiwgcGF0aCk7XG5cbiAgICAgICAgICAvLyBpZiBuZWVkZWQgd2UgbXVzdCBnbyBkZWVwZXIgaW50byB0aGUgb2JqZWN0LlxuICAgICAgICAgIGlmIChzaG93ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShpdGVtKSAmJlxuICAgICAgICAgICAgICB0eXBlb2YgaXRlbSAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICB0eXBlb2YgaXRlbSAhPT0gXCJib29sZWFuXCIgJiZcbiAgICAgICAgICAgICAgaXRlbSBpbnN0YW5jZW9mIE9iamVjdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICBzaG93ID0gdGhpcy5faGFuZGxlT2JqZWN0KGl0ZW0sIG5ld1BhdGgsIHRydWUpO1xuICAgICAgICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBjaGVja09ubHkgPT09IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHZpc2libGVJblNldCA9IHRydWU7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZShuZXdQYXRoKTtcblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBcnJheShpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZVRleHRJbnB1dChpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VDaGVja2JveChpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBza2lwIHRoZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBlbmFibGVkXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGlkZU9wdGlvbihwYXRoLCBzdWJPYmosIHRoaXMubW9kdWxlT3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgLy8gaW5pdGlhbGx5IGNvbGxhcHNlIG9wdGlvbnMgd2l0aCBhbiBkaXNhYmxlZCBlbmFibGVkIG9wdGlvbi5cbiAgICAgICAgICAgICAgaWYgKGl0ZW0uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFBhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkobmV3UGF0aCwgXCJlbmFibGVkXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuYWJsZWRWYWx1ZSA9IHRoaXMuX2dldFZhbHVlKGVuYWJsZWRQYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZFZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChzdWJPYmosIG5ld1BhdGgsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUl0ZW0obmV3UGF0aCwgbGFiZWwpO1xuICAgICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlT2JqZWN0KGl0ZW0sIG5ld1BhdGgpIHx8IHZpc2libGVJblNldDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIGVuYWJsZWRWYWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFrZUl0ZW0obmV3UGF0aCwgbGFiZWwpO1xuICAgICAgICAgICAgICAgIHZpc2libGVJblNldCA9XG4gICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJkb250IGtub3cgaG93IHRvIGhhbmRsZVwiLCBpdGVtLCBzdWJPYmosIG5ld1BhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZUluU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSB0aGUgYXJyYXkgdHlwZSBvZiBvcHRpb25cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYXJyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVBcnJheShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHR5cGVvZiBhcnJbMF0gPT09IFwic3RyaW5nXCIgJiYgYXJyWzBdID09PSBcImNvbG9yXCIpIHtcbiAgICAgIHRoaXMuX21ha2VDb2xvckZpZWxkKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclsxXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5fbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclswXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdGhpcy5fbWFrZVJhbmdlKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclswXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IE51bWJlcih2YWx1ZSkgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxlZCB0byB1cGRhdGUgdGhlIG5ldHdvcmsgd2l0aCB0aGUgbmV3IHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlKHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2NvbnN0cnVjdE9wdGlvbnModmFsdWUsIHBhdGgpO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5wYXJlbnQuYm9keSAmJlxuICAgICAgdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdFxuICAgICkge1xuICAgICAgdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyLmVtaXQoXCJjb25maWdDaGFuZ2VcIiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMucGFyZW50LnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBib29sZWFufSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBwYXJhbSB7e319IG9wdGlvbnNPYmpcbiAgICogQHJldHVybnMge3t9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbnN0cnVjdE9wdGlvbnModmFsdWUsIHBhdGgsIG9wdGlvbnNPYmogPSB7fSkge1xuICAgIGxldCBwb2ludGVyID0gb3B0aW9uc09iajtcblxuICAgIC8vIHdoZW4gZHJvcGRvd24gYm94ZXMgY2FuIGJlIHN0cmluZyBvciBib29sZWFuLCB3ZSB0eXBlY2FzdCBpdCBpbnRvIGNvcnJlY3QgdHlwZXNcbiAgICB2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiA/IHRydWUgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHZhbHVlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGF0aFtpXSAhPT0gXCJnbG9iYWxcIikge1xuICAgICAgICBpZiAocG9pbnRlcltwYXRoW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcG9pbnRlcltwYXRoW2ldXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpICE9PSBwYXRoLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBwb2ludGVyID0gcG9pbnRlcltwYXRoW2ldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnNPYmo7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcmludE9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuXG4gICAgd2hpbGUgKHRoaXMub3B0aW9uc0NvbnRhaW5lci5maXJzdENoaWxkKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuYXBwZW5kQ2hpbGQoXG4gICAgICB3cmFwSW5UYWcoXCJwcmVcIiwgXCJjb25zdCBvcHRpb25zID0gXCIgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zLCBudWxsLCAyKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHt7fX0gb3B0aW9uc1xuICAgKi9cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoYW5nZWRPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLl9jb25zdHJ1Y3RPcHRpb25zKFxuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zW2ldLnZhbHVlLFxuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zW2ldLnBhdGgsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG59O1xuXG4vKipcbiAqIFBvcHVwIGlzIGEgY2xhc3MgdG8gY3JlYXRlIGEgcG9wdXAgd2luZG93IHdpdGggc29tZSB0ZXh0XG4gKi9cbmxldCBQb3B1cCQxID0gY2xhc3MgUG9wdXAge1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXIgICAgICAgVGhlIGNvbnRhaW5lciBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgb3ZlcmZsb3dNZXRob2QgIEhvdyB0aGUgcG9wdXAgc2hvdWxkIGFjdCB0byBvdmVyZmxvd2luZyAoJ2ZsaXAnIG9yICdjYXAnKVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCBvdmVyZmxvd01ldGhvZCkge1xuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMub3ZlcmZsb3dNZXRob2QgPSBvdmVyZmxvd01ldGhvZCB8fCBcImNhcFwiO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xuICAgIHRoaXMucGFkZGluZyA9IDU7XG4gICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgZnJhbWVcbiAgICB0aGlzLmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmZyYW1lLmNsYXNzTmFtZSA9IFwidmlzLXRvb2x0aXBcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCAgIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKiBAcGFyYW0ge251bWJlcn0geSAgIFZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIHNldFBvc2l0aW9uKHgsIHkpIHtcbiAgICB0aGlzLnggPSBwYXJzZUludCh4KTtcbiAgICB0aGlzLnkgPSBwYXJzZUludCh5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbnRlbnQgZm9yIHRoZSBwb3B1cCB3aW5kb3cuIFRoaXMgY2FuIGJlIEhUTUwgY29kZSBvciB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEVsZW1lbnR9IGNvbnRlbnRcbiAgICovXG4gIHNldFRleHQoY29udGVudCkge1xuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgd2hpbGUgKHRoaXMuZnJhbWUuZmlyc3RDaGlsZCkge1xuICAgICAgICB0aGlzLmZyYW1lLnJlbW92ZUNoaWxkKHRoaXMuZnJhbWUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdHJpbmcgY29udGFpbmluZyBsaXRlcmFsIHRleHQsIGVsZW1lbnQgaGFzIHRvIGJlIHVzZWQgZm9yIEhUTUwgZHVlIHRvXG4gICAgICAvLyBYU1Mgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGlubmVySFRNTCAoaS5lLiBwcmV2ZW50IFhTUyBieSBhY2NpZGVudCkuXG4gICAgICB0aGlzLmZyYW1lLmlubmVyVGV4dCA9IGNvbnRlbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIHBvcHVwIHdpbmRvd1xuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkb1Nob3ddICAgIFNob3cgb3IgaGlkZSB0aGUgd2luZG93XG4gICAqL1xuICBzaG93KGRvU2hvdykge1xuICAgIGlmIChkb1Nob3cgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZG9TaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZG9TaG93ID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmZyYW1lLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5mcmFtZS5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZnJhbWUucGFyZW50Tm9kZS5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuZnJhbWUucGFyZW50Tm9kZS5jbGllbnRXaWR0aDtcblxuICAgICAgbGV0IGxlZnQgPSAwLFxuICAgICAgICB0b3AgPSAwO1xuXG4gICAgICBpZiAodGhpcy5vdmVyZmxvd01ldGhvZCA9PSBcImZsaXBcIikge1xuICAgICAgICBsZXQgaXNMZWZ0ID0gZmFsc2UsXG4gICAgICAgICAgaXNUb3AgPSB0cnVlOyAvLyBXaGVyZSBhcm91bmQgdGhlIHBvc2l0aW9uIGl0J3MgbG9jYXRlZFxuXG4gICAgICAgIGlmICh0aGlzLnkgLSBoZWlnaHQgPCB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICBpc1RvcCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMueCArIHdpZHRoID4gbWF4V2lkdGggLSB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICBpc0xlZnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTGVmdCkge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLnggLSB3aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZWZ0ID0gdGhpcy54O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVG9wKSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55IC0gaGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvcCA9IHRoaXMueTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gdGhpcy55IC0gaGVpZ2h0O1xuICAgICAgICBpZiAodG9wICsgaGVpZ2h0ICsgdGhpcy5wYWRkaW5nID4gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgdG9wID0gbWF4SGVpZ2h0IC0gaGVpZ2h0IC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3AgPCB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBsZWZ0ID0gdGhpcy54O1xuICAgICAgICBpZiAobGVmdCArIHdpZHRoICsgdGhpcy5wYWRkaW5nID4gbWF4V2lkdGgpIHtcbiAgICAgICAgICBsZWZ0ID0gbWF4V2lkdGggLSB3aWR0aCAtIHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVmdCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS5sZWZ0ID0gbGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gdG9wICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG4gICAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGlkZSB0aGUgcG9wdXAgd2luZG93XG4gICAqL1xuICBoaWRlKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICB0aGlzLmZyYW1lLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5mcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZnJhbWUpOyAvLyBSZW1vdmUgZWxlbWVudCBmcm9tIERPTVxuICB9XG59O1xuXG5sZXQgZXJyb3JGb3VuZCA9IGZhbHNlO1xubGV0IGFsbE9wdGlvbnM7XG5cbmNvbnN0IFZBTElEQVRPUl9QUklOVF9TVFlMRSQxID0gXCJiYWNrZ3JvdW5kOiAjRkZlZWVlOyBjb2xvcjogI2RkMDAwMFwiO1xuXG4vKipcbiAqICBVc2VkIHRvIHZhbGlkYXRlIG9wdGlvbnMuXG4gKi9cbmxldCBWYWxpZGF0b3IkMSA9IGNsYXNzIFZhbGlkYXRvciB7XG4gIC8qKlxuICAgKiBNYWluIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gcmVmZXJlbmNlT3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gc3ViT2JqZWN0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGUob3B0aW9ucywgcmVmZXJlbmNlT3B0aW9ucywgc3ViT2JqZWN0KSB7XG4gICAgZXJyb3JGb3VuZCA9IGZhbHNlO1xuICAgIGFsbE9wdGlvbnMgPSByZWZlcmVuY2VPcHRpb25zO1xuICAgIGxldCB1c2VkT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgaWYgKHN1Yk9iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1c2VkT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnNbc3ViT2JqZWN0XTtcbiAgICB9XG4gICAgVmFsaWRhdG9yLnBhcnNlKG9wdGlvbnMsIHVzZWRPcHRpb25zLCBbXSk7XG4gICAgcmV0dXJuIGVycm9yRm91bmQ7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCB0cmF2ZXJzZSBhbiBvYmplY3QgcmVjdXJzaXZlbHkgYW5kIGNoZWNrIGV2ZXJ5IHZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcGFyc2Uob3B0aW9ucywgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCkge1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICBWYWxpZGF0b3IuY2hlY2sob3B0aW9uLCBvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZXZlcnkgdmFsdWUuIElmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QsIGNhbGwgdGhlIHBhcnNlIGZ1bmN0aW9uIG9uIHRoYXQgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgY2hlY2sob3B0aW9uLCBvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgaWYgKFxuICAgICAgcmVmZXJlbmNlT3B0aW9uc1tvcHRpb25dID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMuX19hbnlfXyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBWYWxpZGF0b3IuZ2V0U3VnZ2VzdGlvbihvcHRpb24sIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZWZlcmVuY2VPcHRpb24gPSBvcHRpb247XG4gICAgbGV0IGlzX29iamVjdCA9IHRydWU7XG5cbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgb25seSB0cmlnZ2VycyBpZiB0aGUgX19hbnlfXyBpcyBpbiB0aGUgdG9wIGxldmVsIG9mIHRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgIC8vICAgICAgIFRIQVQnUyBBIFJFQUxMWSBCQUQgUExBQ0UgVE8gQUxMT1cgSVQhISEhXG4gICAgICAvLyBUT0RPOiBFeGFtaW5lIGlmIG5lZWRlZCwgcmVtb3ZlIGlmIHBvc3NpYmxlXG5cbiAgICAgIC8vIF9fYW55X18gaXMgYSB3aWxkY2FyZC4gQW55IHZhbHVlIGlzIGFjY2VwdGVkIGFuZCB3aWxsIGJlIGZ1cnRoZXIgYW5hbHlzZWQgYnkgcmVmZXJlbmNlLlxuICAgICAgcmVmZXJlbmNlT3B0aW9uID0gXCJfX2FueV9fXCI7XG5cbiAgICAgIC8vIGlmIHRoZSBhbnktc3ViZ3JvdXAgaXMgbm90IGEgcHJlZGVmaW5lZCBvYmplY3QgaW4gdGhlIGNvbmZpZ3VyYXRvcixcbiAgICAgIC8vIHdlIGRvIG5vdCBsb29rIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICBpc19vYmplY3QgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pID09PSBcIm9iamVjdFwiO1xuICAgIH1cblxuICAgIGxldCByZWZPcHRpb25PYmogPSByZWZlcmVuY2VPcHRpb25zW3JlZmVyZW5jZU9wdGlvbl07XG4gICAgaWYgKGlzX29iamVjdCAmJiByZWZPcHRpb25PYmouX190eXBlX18gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVmT3B0aW9uT2JqID0gcmVmT3B0aW9uT2JqLl9fdHlwZV9fO1xuICAgIH1cblxuICAgIFZhbGlkYXRvci5jaGVja0ZpZWxkcyhcbiAgICAgIG9wdGlvbixcbiAgICAgIG9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb25zLFxuICAgICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgICAgcmVmT3B0aW9uT2JqLFxuICAgICAgcGF0aFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvcHRpb24gICAgICAgICAgIHwgdGhlIG9wdGlvbiBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge29iamVjdH0gIG9wdGlvbnMgICAgICAgICAgfCBUaGUgc3VwcGxpZWQgb3B0aW9ucyBvYmplY3RcbiAgICogQHBhcmFtIHtvYmplY3R9ICByZWZlcmVuY2VPcHRpb25zIHwgVGhlIHJlZmVyZW5jZSBvcHRpb25zIGNvbnRhaW5pbmcgYWxsIG9wdGlvbnMgYW5kIHRoZWlyIGFsbG93ZWQgZm9ybWF0c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZmVyZW5jZU9wdGlvbiAgfCBVc3VhbGx5IHRoaXMgaXMgdGhlIHNhbWUgYXMgb3B0aW9uLCBleGNlcHQgd2hlbiBoYW5kbGluZyBhbiBfX2FueV9fIHRhZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICByZWZPcHRpb25PYmogICAgIHwgVGhpcyBpcyB0aGUgdHlwZSBvYmplY3QgZnJvbSB0aGUgcmVmZXJlbmNlIG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gICBwYXRoICAgICAgICAgICAgIHwgd2hlcmUgaW4gdGhlIG9iamVjdCBpcyB0aGUgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVja0ZpZWxkcyhcbiAgICBvcHRpb24sXG4gICAgb3B0aW9ucyxcbiAgICByZWZlcmVuY2VPcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbixcbiAgICByZWZPcHRpb25PYmosXG4gICAgcGF0aFxuICApIHtcbiAgICBjb25zdCBsb2cgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCIlY1wiICsgbWVzc2FnZSArIFZhbGlkYXRvci5wcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiksXG4gICAgICAgIFZBTElEQVRPUl9QUklOVF9TVFlMRSQxXG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25UeXBlID0gVmFsaWRhdG9yLmdldFR5cGUob3B0aW9uc1tvcHRpb25dKTtcbiAgICBjb25zdCByZWZPcHRpb25UeXBlID0gcmVmT3B0aW9uT2JqW29wdGlvblR5cGVdO1xuXG4gICAgaWYgKHJlZk9wdGlvblR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaWYgdGhlIHR5cGUgaXMgY29ycmVjdCwgd2UgY2hlY2sgaWYgaXQgaXMgc3VwcG9zZWQgdG8gYmUgb25lIG9mIGEgZmV3IHNlbGVjdCB2YWx1ZXNcbiAgICAgIGlmIChcbiAgICAgICAgVmFsaWRhdG9yLmdldFR5cGUocmVmT3B0aW9uVHlwZSkgPT09IFwiYXJyYXlcIiAmJlxuICAgICAgICByZWZPcHRpb25UeXBlLmluZGV4T2Yob3B0aW9uc1tvcHRpb25dKSA9PT0gLTFcbiAgICAgICkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgJ0ludmFsaWQgb3B0aW9uIGRldGVjdGVkIGluIFwiJyArXG4gICAgICAgICAgICBvcHRpb24gK1xuICAgICAgICAgICAgJ1wiLicgK1xuICAgICAgICAgICAgXCIgQWxsb3dlZCB2YWx1ZXMgYXJlOlwiICtcbiAgICAgICAgICAgIFZhbGlkYXRvci5wcmludChyZWZPcHRpb25UeXBlKSArXG4gICAgICAgICAgICAnIG5vdCBcIicgK1xuICAgICAgICAgICAgb3B0aW9uc1tvcHRpb25dICtcbiAgICAgICAgICAgICdcIi4gJ1xuICAgICAgICApO1xuICAgICAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9uVHlwZSA9PT0gXCJvYmplY3RcIiAmJiByZWZlcmVuY2VPcHRpb24gIT09IFwiX19hbnlfX1wiKSB7XG4gICAgICAgIHBhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgb3B0aW9uKTtcbiAgICAgICAgVmFsaWRhdG9yLnBhcnNlKFxuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSxcbiAgICAgICAgICByZWZlcmVuY2VPcHRpb25zW3JlZmVyZW5jZU9wdGlvbl0sXG4gICAgICAgICAgcGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVmT3B0aW9uT2JqW1wiYW55XCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHR5cGUgb2YgdGhlIGZpZWxkIGlzIGluY29ycmVjdCBhbmQgdGhlIGZpZWxkIGNhbm5vdCBiZSBhbnlcbiAgICAgIGxvZyhcbiAgICAgICAgJ0ludmFsaWQgdHlwZSByZWNlaXZlZCBmb3IgXCInICtcbiAgICAgICAgICBvcHRpb24gK1xuICAgICAgICAgICdcIi4gRXhwZWN0ZWQ6ICcgK1xuICAgICAgICAgIFZhbGlkYXRvci5wcmludChPYmplY3Qua2V5cyhyZWZPcHRpb25PYmopKSArXG4gICAgICAgICAgXCIuIFJlY2VpdmVkIFtcIiArXG4gICAgICAgICAgb3B0aW9uVHlwZSArXG4gICAgICAgICAgJ10gXCInICtcbiAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICdcIidcbiAgICAgICk7XG4gICAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3QgfCBib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgQXJyYXkuPG51bWJlcj4gfCBEYXRlIHwgTm9kZSB8IE1vbWVudCB8IHVuZGVmaW5lZCB8IG51bGx9IG9iamVjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgZ2V0VHlwZShvYmplY3QpIHtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcblxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZiAob2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIFwiZGF0ZVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdC5ub2RlVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBcImRvbVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdC5faXNBTW9tZW50T2JqZWN0ID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBcIm1vbWVudFwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwib2JqZWN0XCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcGF0aFxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgZ2V0U3VnZ2VzdGlvbihvcHRpb24sIG9wdGlvbnMsIHBhdGgpIHtcbiAgICBjb25zdCBsb2NhbFNlYXJjaCA9IFZhbGlkYXRvci5maW5kSW5PcHRpb25zKG9wdGlvbiwgb3B0aW9ucywgcGF0aCwgZmFsc2UpO1xuICAgIGNvbnN0IGdsb2JhbFNlYXJjaCA9IFZhbGlkYXRvci5maW5kSW5PcHRpb25zKG9wdGlvbiwgYWxsT3B0aW9ucywgW10sIHRydWUpO1xuXG4gICAgY29uc3QgbG9jYWxTZWFyY2hUaHJlc2hvbGQgPSA4O1xuICAgIGNvbnN0IGdsb2JhbFNlYXJjaFRocmVzaG9sZCA9IDQ7XG5cbiAgICBsZXQgbXNnO1xuICAgIGlmIChsb2NhbFNlYXJjaC5pbmRleE1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1zZyA9XG4gICAgICAgIFwiIGluIFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uLCBcIlwiKSArXG4gICAgICAgICdQZXJoYXBzIGl0IHdhcyBpbmNvbXBsZXRlPyBEaWQgeW91IG1lYW46IFwiJyArXG4gICAgICAgIGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggK1xuICAgICAgICAnXCI/XFxuXFxuJztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZ2xvYmFsU2VhcmNoLmRpc3RhbmNlIDw9IGdsb2JhbFNlYXJjaFRocmVzaG9sZCAmJlxuICAgICAgbG9jYWxTZWFyY2guZGlzdGFuY2UgPiBnbG9iYWxTZWFyY2guZGlzdGFuY2VcbiAgICApIHtcbiAgICAgIG1zZyA9XG4gICAgICAgIFwiIGluIFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uLCBcIlwiKSArXG4gICAgICAgIFwiUGVyaGFwcyBpdCB3YXMgbWlzcGxhY2VkPyBNYXRjaGluZyBvcHRpb24gZm91bmQgYXQ6IFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24oXG4gICAgICAgICAgZ2xvYmFsU2VhcmNoLnBhdGgsXG4gICAgICAgICAgZ2xvYmFsU2VhcmNoLmNsb3Nlc3RNYXRjaCxcbiAgICAgICAgICBcIlwiXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChsb2NhbFNlYXJjaC5kaXN0YW5jZSA8PSBsb2NhbFNlYXJjaFRocmVzaG9sZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgJy4gRGlkIHlvdSBtZWFuIFwiJyArXG4gICAgICAgIGxvY2FsU2VhcmNoLmNsb3Nlc3RNYXRjaCArXG4gICAgICAgICdcIj8nICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIuIERpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U6IFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKG9wdGlvbnMpKSArXG4gICAgICAgIFZhbGlkYXRvci5wcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbik7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICclY1Vua25vd24gb3B0aW9uIGRldGVjdGVkOiBcIicgKyBvcHRpb24gKyAnXCInICsgbXNnLFxuICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICApO1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHRyYXZlcnNlIHRoZSBvcHRpb25zIGluIHNlYXJjaCBmb3IgYSBtYXRjaC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVjdXJzaXZlPWZhbHNlXVxuICAgKiBAcmV0dXJucyB7e2Nsb3Nlc3RNYXRjaDogc3RyaW5nLCBwYXRoOiBBcnJheSwgZGlzdGFuY2U6IG51bWJlcn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBmaW5kSW5PcHRpb25zKG9wdGlvbiwgb3B0aW9ucywgcGF0aCwgcmVjdXJzaXZlID0gZmFsc2UpIHtcbiAgICBsZXQgbWluID0gMWU5O1xuICAgIGxldCBjbG9zZXN0TWF0Y2ggPSBcIlwiO1xuICAgIGxldCBjbG9zZXN0TWF0Y2hQYXRoID0gW107XG4gICAgY29uc3QgbG93ZXJDYXNlT3B0aW9uID0gb3B0aW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgbGV0IGluZGV4TWF0Y2ggPSB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBvcCBpbiBvcHRpb25zKSB7XG4gICAgICBsZXQgZGlzdGFuY2U7XG4gICAgICBpZiAob3B0aW9uc1tvcF0uX190eXBlX18gIT09IHVuZGVmaW5lZCAmJiByZWN1cnNpdmUgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMoXG4gICAgICAgICAgb3B0aW9uLFxuICAgICAgICAgIG9wdGlvbnNbb3BdLFxuICAgICAgICAgIGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pbiA+IHJlc3VsdC5kaXN0YW5jZSkge1xuICAgICAgICAgIGNsb3Nlc3RNYXRjaCA9IHJlc3VsdC5jbG9zZXN0TWF0Y2g7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoUGF0aCA9IHJlc3VsdC5wYXRoO1xuICAgICAgICAgIG1pbiA9IHJlc3VsdC5kaXN0YW5jZTtcbiAgICAgICAgICBpbmRleE1hdGNoID0gcmVzdWx0LmluZGV4TWF0Y2g7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcC50b0xvd2VyQ2FzZSgpLmluZGV4T2YobG93ZXJDYXNlT3B0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICBpbmRleE1hdGNoID0gb3A7XG4gICAgICAgIH1cbiAgICAgICAgZGlzdGFuY2UgPSBWYWxpZGF0b3IubGV2ZW5zaHRlaW5EaXN0YW5jZShvcHRpb24sIG9wKTtcbiAgICAgICAgaWYgKG1pbiA+IGRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gb3A7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoUGF0aCA9IGNvcHlBcnJheShwYXRoKTtcbiAgICAgICAgICBtaW4gPSBkaXN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY2xvc2VzdE1hdGNoOiBjbG9zZXN0TWF0Y2gsXG4gICAgICBwYXRoOiBjbG9zZXN0TWF0Y2hQYXRoLFxuICAgICAgZGlzdGFuY2U6IG1pbixcbiAgICAgIGluZGV4TWF0Y2g6IGluZGV4TWF0Y2gsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcHJpbnRMb2NhdGlvbihwYXRoLCBvcHRpb24sIHByZWZpeCA9IFwiUHJvYmxlbSB2YWx1ZSBmb3VuZCBhdDogXFxuXCIpIHtcbiAgICBsZXQgc3RyID0gXCJcXG5cXG5cIiArIHByZWZpeCArIFwib3B0aW9ucyA9IHtcXG5cIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaSArIDE7IGorKykge1xuICAgICAgICBzdHIgKz0gXCIgIFwiO1xuICAgICAgfVxuICAgICAgc3RyICs9IHBhdGhbaV0gKyBcIjoge1xcblwiO1xuICAgIH1cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhdGgubGVuZ3RoICsgMTsgaisrKSB7XG4gICAgICBzdHIgKz0gXCIgIFwiO1xuICAgIH1cbiAgICBzdHIgKz0gb3B0aW9uICsgXCJcXG5cIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoICsgMTsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhdGgubGVuZ3RoIC0gaTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gXCJ9XFxuXCI7XG4gICAgfVxuICAgIHJldHVybiBzdHIgKyBcIlxcblxcblwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludChvcHRpb25zKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXG4gICAgICAucmVwbGFjZSgvKFwiKXwoXFxbKXwoXFxdKXwoLFwiX190eXBlX19cIikvZywgXCJcIilcbiAgICAgIC5yZXBsYWNlKC8oLCkvZywgXCIsIFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQ29tcHV0ZSB0aGUgZWRpdCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gc3RyaW5nc1xuICAgKiBodHRwOi8vZW4ud2lraWJvb2tzLm9yZy93aWtpL0FsZ29yaXRobV9JbXBsZW1lbnRhdGlvbi9TdHJpbmdzL0xldmVuc2h0ZWluX2Rpc3RhbmNlI0phdmFTY3JpcHRcbiAgICpcbiAgICogQ29weXJpZ2h0IChjKSAyMDExIEFuZHJlaSBNYWNrZW56aWVcbiAgICpcbiAgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAgICpcbiAgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gICAqXG4gICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBsZXZlbnNodGVpbkRpc3RhbmNlKGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggPT09IDApIHJldHVybiBiLmxlbmd0aDtcbiAgICBpZiAoYi5sZW5ndGggPT09IDApIHJldHVybiBhLmxlbmd0aDtcblxuICAgIGNvbnN0IG1hdHJpeCA9IFtdO1xuXG4gICAgLy8gaW5jcmVtZW50IGFsb25nIHRoZSBmaXJzdCBjb2x1bW4gb2YgZWFjaCByb3dcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hdHJpeFtpXSA9IFtpXTtcbiAgICB9XG5cbiAgICAvLyBpbmNyZW1lbnQgZWFjaCBjb2x1bW4gaW4gdGhlIGZpcnN0IHJvd1xuICAgIGxldCBqO1xuICAgIGZvciAoaiA9IDA7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgbWF0cml4WzBdW2pdID0gajtcbiAgICB9XG5cbiAgICAvLyBGaWxsIGluIHRoZSByZXN0IG9mIHRoZSBtYXRyaXhcbiAgICBmb3IgKGkgPSAxOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAoaiA9IDE7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoYi5jaGFyQXQoaSAtIDEpID09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtpIC0gMV1baiAtIDFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqIC0gMV0gKyAxLCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgICBtYXRyaXhbaV1baiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgIG1hdHJpeFtpIC0gMV1bal0gKyAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTsgLy8gZGVsZXRpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRyaXhbYi5sZW5ndGhdW2EubGVuZ3RoXTtcbiAgfVxufTtcblxuY29uc3QgQWN0aXZhdG9yID0gQWN0aXZhdG9yJDE7XHJcbmNvbnN0IENvbG9yUGlja2VyID0gQ29sb3JQaWNrZXIkMTtcclxuY29uc3QgQ29uZmlndXJhdG9yID0gQ29uZmlndXJhdG9yJDE7XHJcbmNvbnN0IEhhbW1lciA9IEhhbW1lciQxO1xyXG5jb25zdCBQb3B1cCA9IFBvcHVwJDE7XHJcbmNvbnN0IFZBTElEQVRPUl9QUklOVF9TVFlMRSA9IFZBTElEQVRPUl9QUklOVF9TVFlMRSQxO1xyXG5jb25zdCBWYWxpZGF0b3IgPSBWYWxpZGF0b3IkMTtcblxuZXhwb3J0IHsgQWN0aXZhdG9yLCBBbGVhLCBDb2xvclBpY2tlciwgQ29uZmlndXJhdG9yLCBERUxFVEUsIEhTVlRvSGV4LCBIU1ZUb1JHQiwgSGFtbWVyLCBQb3B1cCwgUkdCVG9IU1YsIFJHQlRvSGV4LCBWQUxJREFUT1JfUFJJTlRfU1RZTEUsIFZhbGlkYXRvciwgYWRkQ2xhc3NOYW1lLCBhZGRDc3NUZXh0LCBhZGRFdmVudExpc3RlbmVyLCBiaW5hcnlTZWFyY2hDdXN0b20sIGJpbmFyeVNlYXJjaFZhbHVlLCBicmlkZ2VPYmplY3QsIGNvcHlBbmRFeHRlbmRBcnJheSwgY29weUFycmF5LCBkZWVwRXh0ZW5kLCBkZWVwT2JqZWN0QXNzaWduLCBlYXNpbmdGdW5jdGlvbnMsIGVxdWFsQXJyYXksIGV4dGVuZCwgZmlsbElmRGVmaW5lZCwgZm9yRWFjaCwgZ2V0QWJzb2x1dGVMZWZ0LCBnZXRBYnNvbHV0ZVJpZ2h0LCBnZXRBYnNvbHV0ZVRvcCwgZ2V0U2Nyb2xsQmFyV2lkdGgsIGdldFRhcmdldCwgZ2V0VHlwZSwgaGFzUGFyZW50LCBoZXhUb0hTViwgaGV4VG9SR0IsIGluc2VydFNvcnQsIGlzRGF0ZSwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1N0cmluZywgaXNWYWxpZEhleCwgaXNWYWxpZFJHQiwgaXNWYWxpZFJHQkEsIG1lcmdlT3B0aW9ucywgb3B0aW9uLCBvdmVycmlkZU9wYWNpdHksIHBhcnNlQ29sb3IsIHByZXZlbnREZWZhdWx0LCBwdXJlRGVlcE9iamVjdEFzc2lnbiwgcmVjdXJzaXZlRE9NRGVsZXRlLCByZW1vdmVDbGFzc05hbWUsIHJlbW92ZUNzc1RleHQsIHJlbW92ZUV2ZW50TGlzdGVuZXIsIHNlbGVjdGl2ZUJyaWRnZU9iamVjdCwgc2VsZWN0aXZlRGVlcEV4dGVuZCwgc2VsZWN0aXZlRXh0ZW5kLCBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kLCB0aHJvdHRsZSwgdG9BcnJheSwgdG9wTW9zdCwgdXBkYXRlUHJvcGVydHkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZpcy11dGlsLmpzLm1hcFxuIiwgIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuXG4vKipcbiAqIFBhcnNlIGEgdGV4dCBzb3VyY2UgY29udGFpbmluZyBkYXRhIGluIERPVCBsYW5ndWFnZSBpbnRvIGEgSlNPTiBvYmplY3QuXG4gKiBUaGUgb2JqZWN0IGNvbnRhaW5zIHR3byBsaXN0czogb25lIHdpdGggbm9kZXMgYW5kIG9uZSB3aXRoIGVkZ2VzLlxuICpcbiAqIERPVCBsYW5ndWFnZSByZWZlcmVuY2U6IGh0dHA6Ly93d3cuZ3JhcGh2aXoub3JnL2RvYy9pbmZvL2xhbmcuaHRtbFxuICpcbiAqIERPVCBsYW5ndWFnZSBhdHRyaWJ1dGVzOiBodHRwOi8vZ3JhcGh2aXoub3JnL2NvbnRlbnQvYXR0cnNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAgICAgVGV4dCBjb250YWluaW5nIGEgZ3JhcGggaW4gRE9ULW5vdGF0aW9uXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBncmFwaCAgIEFuIG9iamVjdCBjb250YWluaW5nIHR3byBwYXJhbWV0ZXJzOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHtPYmplY3RbXX0gbm9kZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB7T2JqZWN0W119IGVkZ2VzXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVE9ET1xuICogPT09PVxuICpcbiAqIEZvciBsYWJlbCBoYW5kbGluZywgdGhpcyBpcyBhbiBpbmNvbXBsZXRlIGltcGxlbWVudGF0aW9uLiBGcm9tIGRvY3MgKHF1b3RlICMzMDE1KTpcbiAqXG4gKiA+IHRoZSBlc2NhcGUgc2VxdWVuY2VzIFwiXFxuXCIsIFwiXFxsXCIgYW5kIFwiXFxyXCIgZGl2aWRlIHRoZSBsYWJlbCBpbnRvIGxpbmVzLCBjZW50ZXJlZCxcbiAqID4gbGVmdC1qdXN0aWZpZWQsIGFuZCByaWdodC1qdXN0aWZpZWQsIHJlc3BlY3RpdmVseS5cbiAqXG4gKiBTb3VyY2U6IGh0dHA6Ly93d3cuZ3JhcGh2aXoub3JnL2NvbnRlbnQvYXR0cnMja2VzY1N0cmluZ1xuICpcbiAqID4gQXMgYW5vdGhlciBhaWQgZm9yIHJlYWRhYmlsaXR5LCBkb3QgYWxsb3dzIGRvdWJsZS1xdW90ZWQgc3RyaW5ncyB0byBzcGFuIG11bHRpcGxlIHBoeXNpY2FsXG4gKiA+IGxpbmVzIHVzaW5nIHRoZSBzdGFuZGFyZCBDIGNvbnZlbnRpb24gb2YgYSBiYWNrc2xhc2ggaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGEgbmV3bGluZVxuICogPiBjaGFyYWN0ZXJcbiAqID4gSW4gYWRkaXRpb24sIGRvdWJsZS1xdW90ZWQgc3RyaW5ncyBjYW4gYmUgY29uY2F0ZW5hdGVkIHVzaW5nIGEgJysnIG9wZXJhdG9yLlxuICogPiBBcyBIVE1MIHN0cmluZ3MgY2FuIGNvbnRhaW4gbmV3bGluZSBjaGFyYWN0ZXJzLCB3aGljaCBhcmUgdXNlZCBzb2xlbHkgZm9yIGZvcm1hdHRpbmcsXG4gKiA+IHRoZSBsYW5ndWFnZSBkb2VzIG5vdCBhbGxvdyBlc2NhcGVkIG5ld2xpbmVzIG9yIGNvbmNhdGVuYXRpb24gb3BlcmF0b3JzIHRvIGJlIHVzZWRcbiAqID4gd2l0aGluIHRoZW0uXG4gKlxuICogLSBDdXJyZW50bHksIG9ubHkgJ1xcXFxuJyBpcyBoYW5kbGVkXG4gKiAtIE5vdGUgdGhhdCB0ZXh0IGV4cGxpY2l0bHkgc2F5cyAnbGFiZWxzJzsgdGhlIGRvdCBwYXJzZXIgY3VycmVudGx5IGhhbmRsZXMgZXNjYXBlXG4gKiAgIHNlcXVlbmNlcyBpbiAqKmFsbCoqIHN0cmluZ3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURPVChkYXRhKSB7XG4gIGRvdCA9IGRhdGE7XG4gIHJldHVybiBwYXJzZUdyYXBoKCk7XG59XG5cbi8vIG1hcHBpbmcgb2YgYXR0cmlidXRlcyBmcm9tIERPVCAodGhlIGtleXMpIHRvIHZpcy5qcyAodGhlIHZhbHVlcylcbnZhciBOT0RFX0FUVFJfTUFQUElORyA9IHtcbiAgZm9udHNpemU6IFwiZm9udC5zaXplXCIsXG4gIGZvbnRjb2xvcjogXCJmb250LmNvbG9yXCIsXG4gIGxhYmVsZm9udGNvbG9yOiBcImZvbnQuY29sb3JcIixcbiAgZm9udG5hbWU6IFwiZm9udC5mYWNlXCIsXG4gIGNvbG9yOiBbXCJjb2xvci5ib3JkZXJcIiwgXCJjb2xvci5iYWNrZ3JvdW5kXCJdLFxuICBmaWxsY29sb3I6IFwiY29sb3IuYmFja2dyb3VuZFwiLFxuICB0b29sdGlwOiBcInRpdGxlXCIsXG4gIGxhYmVsdG9vbHRpcDogXCJ0aXRsZVwiLFxufTtcbnZhciBFREdFX0FUVFJfTUFQUElORyA9IE9iamVjdC5jcmVhdGUoTk9ERV9BVFRSX01BUFBJTkcpO1xuRURHRV9BVFRSX01BUFBJTkcuY29sb3IgPSBcImNvbG9yLmNvbG9yXCI7XG5FREdFX0FUVFJfTUFQUElORy5zdHlsZSA9IFwiZGFzaGVzXCI7XG5cbi8vIHRva2VuIHR5cGVzIGVudW1lcmF0aW9uXG52YXIgVE9LRU5UWVBFID0ge1xuICBOVUxMOiAwLFxuICBERUxJTUlURVI6IDEsXG4gIElERU5USUZJRVI6IDIsXG4gIFVOS05PV046IDMsXG59O1xuXG4vLyBtYXAgd2l0aCBhbGwgZGVsaW1pdGVyc1xudmFyIERFTElNSVRFUlMgPSB7XG4gIFwie1wiOiB0cnVlLFxuICBcIn1cIjogdHJ1ZSxcbiAgXCJbXCI6IHRydWUsXG4gIFwiXVwiOiB0cnVlLFxuICBcIjtcIjogdHJ1ZSxcbiAgXCI9XCI6IHRydWUsXG4gIFwiLFwiOiB0cnVlLFxuXG4gIFwiLT5cIjogdHJ1ZSxcbiAgXCItLVwiOiB0cnVlLFxufTtcblxudmFyIGRvdCA9IFwiXCI7IC8vIGN1cnJlbnQgZG90IGZpbGVcbnZhciBpbmRleCA9IDA7IC8vIGN1cnJlbnQgaW5kZXggaW4gZG90IGZpbGVcbnZhciBjID0gXCJcIjsgLy8gY3VycmVudCB0b2tlbiBjaGFyYWN0ZXIgaW4gZXhwclxudmFyIHRva2VuID0gXCJcIjsgLy8gY3VycmVudCB0b2tlblxudmFyIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5OVUxMOyAvLyB0eXBlIG9mIHRoZSB0b2tlblxuXG4vKipcbiAqIEdldCB0aGUgZmlyc3QgY2hhcmFjdGVyIGZyb20gdGhlIGRvdCBmaWxlLlxuICogVGhlIGNoYXJhY3RlciBpcyBzdG9yZWQgaW50byB0aGUgY2hhciBjLiBJZiB0aGUgZW5kIG9mIHRoZSBkb3QgZmlsZSBpc1xuICogcmVhY2hlZCwgdGhlIGZ1bmN0aW9uIHB1dHMgYW4gZW1wdHkgc3RyaW5nIGluIGMuXG4gKi9cbmZ1bmN0aW9uIGZpcnN0KCkge1xuICBpbmRleCA9IDA7XG4gIGMgPSBkb3QuY2hhckF0KDApO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgZG90IGZpbGUuXG4gKiBUaGUgY2hhcmFjdGVyIGlzIHN0b3JlZCBpbnRvIHRoZSBjaGFyIGMuIElmIHRoZSBlbmQgb2YgdGhlIGRvdCBmaWxlIGlzXG4gKiByZWFjaGVkLCB0aGUgZnVuY3Rpb24gcHV0cyBhbiBlbXB0eSBzdHJpbmcgaW4gYy5cbiAqL1xuZnVuY3Rpb24gbmV4dCgpIHtcbiAgaW5kZXgrKztcbiAgYyA9IGRvdC5jaGFyQXQoaW5kZXgpO1xufVxuXG4vKipcbiAqIFByZXZpZXcgdGhlIG5leHQgY2hhcmFjdGVyIGZyb20gdGhlIGRvdCBmaWxlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNOZXh0XG4gKi9cbmZ1bmN0aW9uIG5leHRQcmV2aWV3KCkge1xuICByZXR1cm4gZG90LmNoYXJBdChpbmRleCArIDEpO1xufVxuXG4vKipcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBjaGFyYWN0ZXIgaXMgYWxwaGFiZXRpYyBvciBudW1lcmljICggYS16QS1aXzAtOS46IyApXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNcbiAqIEByZXR1cm5zIHtib29sZWFufSBpc0FscGhhTnVtZXJpY1xuICovXG5mdW5jdGlvbiBpc0FscGhhTnVtZXJpYyhjKSB7XG4gIHZhciBjaGFyQ29kZSA9IGMuY2hhckNvZGVBdCgwKTtcblxuICBpZiAoY2hhckNvZGUgPCA0Nykge1xuICAgIC8vICMuXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSAzNSB8fCBjaGFyQ29kZSA9PT0gNDY7XG4gIH1cbiAgaWYgKGNoYXJDb2RlIDwgNTkpIHtcbiAgICAvLyAwLTkgYW5kIDpcbiAgICByZXR1cm4gY2hhckNvZGUgPiA0NztcbiAgfVxuICBpZiAoY2hhckNvZGUgPCA5MSkge1xuICAgIC8vIEEtWlxuICAgIHJldHVybiBjaGFyQ29kZSA+IDY0O1xuICB9XG4gIGlmIChjaGFyQ29kZSA8IDk2KSB7XG4gICAgLy8gX1xuICAgIHJldHVybiBjaGFyQ29kZSA9PT0gOTU7XG4gIH1cbiAgaWYgKGNoYXJDb2RlIDwgMTIzKSB7XG4gICAgLy8gYS16XG4gICAgcmV0dXJuIGNoYXJDb2RlID4gOTY7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogTWVyZ2UgYWxsIG9wdGlvbnMgb2Ygb2JqZWN0IGIgaW50byBvYmplY3QgYlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBhXG4gKiBAcGFyYW0ge29iamVjdH0gYlxuICogQHJldHVybnMge29iamVjdH0gYVxuICovXG5mdW5jdGlvbiBtZXJnZShhLCBiKSB7XG4gIGlmICghYSkge1xuICAgIGEgPSB7fTtcbiAgfVxuXG4gIGlmIChiKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiBiKSB7XG4gICAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBhW25hbWVdID0gYltuYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogU2V0IGEgdmFsdWUgaW4gYW4gb2JqZWN0LCB3aGVyZSB0aGUgcHJvdmlkZWQgcGFyYW1ldGVyIG5hbWUgY2FuIGJlIGFcbiAqIHBhdGggd2l0aCBuZXN0ZWQgcGFyYW1ldGVycy4gRm9yIGV4YW1wbGU6XG4gKlxuICogICAgIHZhciBvYmogPSB7YTogMn07XG4gKiAgICAgc2V0VmFsdWUob2JqLCAnYi5jJywgMyk7ICAgICAvLyBvYmogPSB7YTogMiwgYjoge2M6IDN9fVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoICBBIHBhcmFtZXRlciBuYW1lIG9yIGRvdC1zZXBhcmF0ZWQgcGFyYW1ldGVyIHBhdGgsXG4gKiAgICAgICAgICAgICAgICAgICAgICBsaWtlIFwiY29sb3IuaGlnaGxpZ2h0LmJvcmRlclwiLlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5mdW5jdGlvbiBzZXRWYWx1ZShvYmosIHBhdGgsIHZhbHVlKSB7XG4gIHZhciBrZXlzID0gcGF0aC5zcGxpdChcIi5cIik7XG4gIHZhciBvID0gb2JqO1xuICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICB2YXIga2V5ID0ga2V5cy5zaGlmdCgpO1xuICAgIGlmIChrZXlzLmxlbmd0aCkge1xuICAgICAgLy8gdGhpcyBpc24ndCB0aGUgZW5kIHBvaW50XG4gICAgICBpZiAoIW9ba2V5XSkge1xuICAgICAgICBvW2tleV0gPSB7fTtcbiAgICAgIH1cbiAgICAgIG8gPSBvW2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMgaXMgdGhlIGVuZCBwb2ludFxuICAgICAgb1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWRkIGEgbm9kZSB0byBhIGdyYXBoIG9iamVjdC4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIG5vZGUgd2l0aFxuICogdGhlIHNhbWUgaWQsIHRoZWlyIGF0dHJpYnV0ZXMgd2lsbCBiZSBtZXJnZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGdyYXBoXG4gKiBAcGFyYW0ge29iamVjdH0gbm9kZVxuICovXG5mdW5jdGlvbiBhZGROb2RlKGdyYXBoLCBub2RlKSB7XG4gIHZhciBpLCBsZW47XG4gIHZhciBjdXJyZW50ID0gbnVsbDtcblxuICAvLyBmaW5kIHJvb3QgZ3JhcGggKGluIGNhc2Ugb2Ygc3ViZ3JhcGgpXG4gIHZhciBncmFwaHMgPSBbZ3JhcGhdOyAvLyBsaXN0IHdpdGggYWxsIGdyYXBocyBmcm9tIGN1cnJlbnQgZ3JhcGggdG8gcm9vdCBncmFwaFxuICB2YXIgcm9vdCA9IGdyYXBoO1xuICB3aGlsZSAocm9vdC5wYXJlbnQpIHtcbiAgICBncmFwaHMucHVzaChyb290LnBhcmVudCk7XG4gICAgcm9vdCA9IHJvb3QucGFyZW50O1xuICB9XG5cbiAgLy8gZmluZCBleGlzdGluZyBub2RlIChhdCByb290IGxldmVsKSBieSBpdHMgaWRcbiAgaWYgKHJvb3Qubm9kZXMpIHtcbiAgICBmb3IgKGkgPSAwLCBsZW4gPSByb290Lm5vZGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAobm9kZS5pZCA9PT0gcm9vdC5ub2Rlc1tpXS5pZCkge1xuICAgICAgICBjdXJyZW50ID0gcm9vdC5ub2Rlc1tpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjdXJyZW50KSB7XG4gICAgLy8gdGhpcyBpcyBhIG5ldyBub2RlXG4gICAgY3VycmVudCA9IHtcbiAgICAgIGlkOiBub2RlLmlkLFxuICAgIH07XG4gICAgaWYgKGdyYXBoLm5vZGUpIHtcbiAgICAgIC8vIGNsb25lIGRlZmF1bHQgYXR0cmlidXRlc1xuICAgICAgY3VycmVudC5hdHRyID0gbWVyZ2UoY3VycmVudC5hdHRyLCBncmFwaC5ub2RlKTtcbiAgICB9XG4gIH1cblxuICAvLyBhZGQgbm9kZSB0byB0aGlzIChzdWIpZ3JhcGggYW5kIGFsbCBpdHMgcGFyZW50IGdyYXBoc1xuICBmb3IgKGkgPSBncmFwaHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgZyA9IGdyYXBoc1tpXTtcblxuICAgIGlmICghZy5ub2Rlcykge1xuICAgICAgZy5ub2RlcyA9IFtdO1xuICAgIH1cbiAgICBpZiAoZy5ub2Rlcy5pbmRleE9mKGN1cnJlbnQpID09PSAtMSkge1xuICAgICAgZy5ub2Rlcy5wdXNoKGN1cnJlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlIGF0dHJpYnV0ZXNcbiAgaWYgKG5vZGUuYXR0cikge1xuICAgIGN1cnJlbnQuYXR0ciA9IG1lcmdlKGN1cnJlbnQuYXR0ciwgbm9kZS5hdHRyKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBhbiBlZGdlIHRvIGEgZ3JhcGggb2JqZWN0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGdyYXBoXG4gKiBAcGFyYW0ge29iamVjdH0gZWRnZVxuICovXG5mdW5jdGlvbiBhZGRFZGdlKGdyYXBoLCBlZGdlKSB7XG4gIGlmICghZ3JhcGguZWRnZXMpIHtcbiAgICBncmFwaC5lZGdlcyA9IFtdO1xuICB9XG4gIGdyYXBoLmVkZ2VzLnB1c2goZWRnZSk7XG4gIGlmIChncmFwaC5lZGdlKSB7XG4gICAgdmFyIGF0dHIgPSBtZXJnZSh7fSwgZ3JhcGguZWRnZSk7IC8vIGNsb25lIGRlZmF1bHQgYXR0cmlidXRlc1xuICAgIGVkZ2UuYXR0ciA9IG1lcmdlKGF0dHIsIGVkZ2UuYXR0cik7IC8vIG1lcmdlIGF0dHJpYnV0ZXNcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBlZGdlIHRvIGEgZ3JhcGggb2JqZWN0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGdyYXBoXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IG9iamVjdH0gZnJvbVxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBvYmplY3R9IHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBhdHRyXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBlZGdlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVkZ2UoZ3JhcGgsIGZyb20sIHRvLCB0eXBlLCBhdHRyKSB7XG4gIHZhciBlZGdlID0ge1xuICAgIGZyb206IGZyb20sXG4gICAgdG86IHRvLFxuICAgIHR5cGU6IHR5cGUsXG4gIH07XG5cbiAgaWYgKGdyYXBoLmVkZ2UpIHtcbiAgICBlZGdlLmF0dHIgPSBtZXJnZSh7fSwgZ3JhcGguZWRnZSk7IC8vIGNsb25lIGRlZmF1bHQgYXR0cmlidXRlc1xuICB9XG4gIGVkZ2UuYXR0ciA9IG1lcmdlKGVkZ2UuYXR0ciB8fCB7fSwgYXR0cik7IC8vIG1lcmdlIGF0dHJpYnV0ZXNcblxuICAvLyBNb3ZlIGFycm93cyBhdHRyaWJ1dGUgZnJvbSBhdHRyIHRvIGVkZ2UgdGVtcG9yYWxseSBjcmVhdGVkIGluXG4gIC8vIHBhcnNlQXR0cmlidXRlTGlzdCgpLlxuICBpZiAoYXR0ciAhPSBudWxsKSB7XG4gICAgaWYgKGF0dHIuaGFzT3duUHJvcGVydHkoXCJhcnJvd3NcIikgJiYgYXR0cltcImFycm93c1wiXSAhPSBudWxsKSB7XG4gICAgICBlZGdlW1wiYXJyb3dzXCJdID0geyB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBhdHRyLmFycm93cy50eXBlIH0gfTtcbiAgICAgIGF0dHJbXCJhcnJvd3NcIl0gPSBudWxsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWRnZTtcbn1cblxuLyoqXG4gKiBHZXQgbmV4dCB0b2tlbiBpbiB0aGUgY3VycmVudCBkb3QgZmlsZS5cbiAqIFRoZSB0b2tlbiBhbmQgdG9rZW4gdHlwZSBhcmUgYXZhaWxhYmxlIGFzIHRva2VuIGFuZCB0b2tlblR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0VG9rZW4oKSB7XG4gIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5OVUxMO1xuICB0b2tlbiA9IFwiXCI7XG5cbiAgLy8gc2tpcCBvdmVyIHdoaXRlc3BhY2VzXG4gIHdoaWxlIChjID09PSBcIiBcIiB8fCBjID09PSBcIlxcdFwiIHx8IGMgPT09IFwiXFxuXCIgfHwgYyA9PT0gXCJcXHJcIikge1xuICAgIC8vIHNwYWNlLCB0YWIsIGVudGVyXG4gICAgbmV4dCgpO1xuICB9XG5cbiAgZG8ge1xuICAgIHZhciBpc0NvbW1lbnQgPSBmYWxzZTtcblxuICAgIC8vIHNraXAgY29tbWVudFxuICAgIGlmIChjID09PSBcIiNcIikge1xuICAgICAgLy8gZmluZCB0aGUgcHJldmlvdXMgbm9uLXNwYWNlIGNoYXJhY3RlclxuICAgICAgdmFyIGkgPSBpbmRleCAtIDE7XG4gICAgICB3aGlsZSAoZG90LmNoYXJBdChpKSA9PT0gXCIgXCIgfHwgZG90LmNoYXJBdChpKSA9PT0gXCJcXHRcIikge1xuICAgICAgICBpLS07XG4gICAgICB9XG4gICAgICBpZiAoZG90LmNoYXJBdChpKSA9PT0gXCJcXG5cIiB8fCBkb3QuY2hhckF0KGkpID09PSBcIlwiKSB7XG4gICAgICAgIC8vIHRoZSAjIGlzIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUsIHRoaXMgaXMgaW5kZWVkIGEgbGluZSBjb21tZW50XG4gICAgICAgIHdoaWxlIChjICE9IFwiXCIgJiYgYyAhPSBcIlxcblwiKSB7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlzQ29tbWVudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjID09PSBcIi9cIiAmJiBuZXh0UHJldmlldygpID09PSBcIi9cIikge1xuICAgICAgLy8gc2tpcCBsaW5lIGNvbW1lbnRcbiAgICAgIHdoaWxlIChjICE9IFwiXCIgJiYgYyAhPSBcIlxcblwiKSB7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGlzQ29tbWVudCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChjID09PSBcIi9cIiAmJiBuZXh0UHJldmlldygpID09PSBcIipcIikge1xuICAgICAgLy8gc2tpcCBibG9jayBjb21tZW50XG4gICAgICB3aGlsZSAoYyAhPSBcIlwiKSB7XG4gICAgICAgIGlmIChjID09PSBcIipcIiAmJiBuZXh0UHJldmlldygpID09PSBcIi9cIikge1xuICAgICAgICAgIC8vIGVuZCBvZiBibG9jayBjb21tZW50IGZvdW5kLiBza2lwIHRoZXNlIGxhc3QgdHdvIGNoYXJhY3RlcnNcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaXNDb21tZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBza2lwIG92ZXIgd2hpdGVzcGFjZXNcbiAgICB3aGlsZSAoYyA9PT0gXCIgXCIgfHwgYyA9PT0gXCJcXHRcIiB8fCBjID09PSBcIlxcblwiIHx8IGMgPT09IFwiXFxyXCIpIHtcbiAgICAgIC8vIHNwYWNlLCB0YWIsIGVudGVyXG4gICAgICBuZXh0KCk7XG4gICAgfVxuICB9IHdoaWxlIChpc0NvbW1lbnQpO1xuXG4gIC8vIGNoZWNrIGZvciBlbmQgb2YgZG90IGZpbGVcbiAgaWYgKGMgPT09IFwiXCIpIHtcbiAgICAvLyB0b2tlbiBpcyBzdGlsbCBlbXB0eVxuICAgIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gY2hlY2sgZm9yIGRlbGltaXRlcnMgY29uc2lzdGluZyBvZiAyIGNoYXJhY3RlcnNcbiAgdmFyIGMyID0gYyArIG5leHRQcmV2aWV3KCk7XG4gIGlmIChERUxJTUlURVJTW2MyXSkge1xuICAgIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgdG9rZW4gPSBjMjtcbiAgICBuZXh0KCk7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGNoZWNrIGZvciBkZWxpbWl0ZXJzIGNvbnNpc3Rpbmcgb2YgMSBjaGFyYWN0ZXJcbiAgaWYgKERFTElNSVRFUlNbY10pIHtcbiAgICB0b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSO1xuICAgIHRva2VuID0gYztcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gY2hlY2sgZm9yIGFuIGlkZW50aWZpZXIgKG51bWJlciBvciBzdHJpbmcpXG4gIC8vIFRPRE86IG1vcmUgcHJlY2lzZSBwYXJzaW5nIG9mIG51bWJlcnMvc3RyaW5ncyAoYW5kIHRoZSBwb3J0IHNlcGFyYXRvciAnOicpXG4gIGlmIChpc0FscGhhTnVtZXJpYyhjKSB8fCBjID09PSBcIi1cIikge1xuICAgIHRva2VuICs9IGM7XG4gICAgbmV4dCgpO1xuXG4gICAgd2hpbGUgKGlzQWxwaGFOdW1lcmljKGMpKSB7XG4gICAgICB0b2tlbiArPSBjO1xuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICBpZiAodG9rZW4gPT09IFwiZmFsc2VcIikge1xuICAgICAgdG9rZW4gPSBmYWxzZTsgLy8gY29udmVydCB0byBib29sZWFuXG4gICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIHRva2VuID0gdHJ1ZTsgLy8gY29udmVydCB0byBib29sZWFuXG4gICAgfSBlbHNlIGlmICghaXNOYU4oTnVtYmVyKHRva2VuKSkpIHtcbiAgICAgIHRva2VuID0gTnVtYmVyKHRva2VuKTsgLy8gY29udmVydCB0byBudW1iZXJcbiAgICB9XG4gICAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLklERU5USUZJRVI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gY2hlY2sgZm9yIGEgc3RyaW5nIGVuY2xvc2VkIGJ5IGRvdWJsZSBxdW90ZXNcbiAgaWYgKGMgPT09ICdcIicpIHtcbiAgICBuZXh0KCk7XG4gICAgd2hpbGUgKGMgIT0gXCJcIiAmJiAoYyAhPSAnXCInIHx8IChjID09PSAnXCInICYmIG5leHRQcmV2aWV3KCkgPT09ICdcIicpKSkge1xuICAgICAgaWYgKGMgPT09ICdcIicpIHtcbiAgICAgICAgLy8gc2tpcCB0aGUgZXNjYXBlIGNoYXJhY3RlclxuICAgICAgICB0b2tlbiArPSBjO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2UgaWYgKGMgPT09IFwiXFxcXFwiICYmIG5leHRQcmV2aWV3KCkgPT09IFwiblwiKSB7XG4gICAgICAgIC8vIEhvbm9yIGEgbmV3bGluZSBlc2NhcGUgc2VxdWVuY2VcbiAgICAgICAgdG9rZW4gKz0gXCJcXG5cIjtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9rZW4gKz0gYztcbiAgICAgIH1cbiAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgaWYgKGMgIT0gJ1wiJykge1xuICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoJ0VuZCBvZiBzdHJpbmcgXCIgZXhwZWN0ZWQnKTtcbiAgICB9XG4gICAgbmV4dCgpO1xuICAgIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5JREVOVElGSUVSO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHNvbWV0aGluZyB1bmtub3duIGlzIGZvdW5kLCB3cm9uZyBjaGFyYWN0ZXJzLCBhIHN5bnRheCBlcnJvclxuICB0b2tlblR5cGUgPSBUT0tFTlRZUEUuVU5LTk9XTjtcbiAgd2hpbGUgKGMgIT0gXCJcIikge1xuICAgIHRva2VuICs9IGM7XG4gICAgbmV4dCgpO1xuICB9XG4gIHRocm93IG5ldyBTeW50YXhFcnJvcignU3ludGF4IGVycm9yIGluIHBhcnQgXCInICsgY2hvcCh0b2tlbiwgMzApICsgJ1wiJyk7XG59XG5cbi8qKlxuICogUGFyc2UgYSBncmFwaC5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBncmFwaFxuICovXG5mdW5jdGlvbiBwYXJzZUdyYXBoKCkge1xuICB2YXIgZ3JhcGggPSB7fTtcblxuICBmaXJzdCgpO1xuICBnZXRUb2tlbigpO1xuXG4gIC8vIG9wdGlvbmFsIHN0cmljdCBrZXl3b3JkXG4gIGlmICh0b2tlbiA9PT0gXCJzdHJpY3RcIikge1xuICAgIGdyYXBoLnN0cmljdCA9IHRydWU7XG4gICAgZ2V0VG9rZW4oKTtcbiAgfVxuXG4gIC8vIGdyYXBoIG9yIGRpZ3JhcGgga2V5d29yZFxuICBpZiAodG9rZW4gPT09IFwiZ3JhcGhcIiB8fCB0b2tlbiA9PT0gXCJkaWdyYXBoXCIpIHtcbiAgICBncmFwaC50eXBlID0gdG9rZW47XG4gICAgZ2V0VG9rZW4oKTtcbiAgfVxuXG4gIC8vIG9wdGlvbmFsIGdyYXBoIGlkXG4gIGlmICh0b2tlblR5cGUgPT09IFRPS0VOVFlQRS5JREVOVElGSUVSKSB7XG4gICAgZ3JhcGguaWQgPSB0b2tlbjtcbiAgICBnZXRUb2tlbigpO1xuICB9XG5cbiAgLy8gb3BlbiBhbmdsZSBicmFja2V0XG4gIGlmICh0b2tlbiAhPSBcIntcIikge1xuICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiQW5nbGUgYnJhY2tldCB7IGV4cGVjdGVkXCIpO1xuICB9XG4gIGdldFRva2VuKCk7XG5cbiAgLy8gc3RhdGVtZW50c1xuICBwYXJzZVN0YXRlbWVudHMoZ3JhcGgpO1xuXG4gIC8vIGNsb3NlIGFuZ2xlIGJyYWNrZXRcbiAgaWYgKHRva2VuICE9IFwifVwiKSB7XG4gICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJBbmdsZSBicmFja2V0IH0gZXhwZWN0ZWRcIik7XG4gIH1cbiAgZ2V0VG9rZW4oKTtcblxuICAvLyBlbmQgb2YgZmlsZVxuICBpZiAodG9rZW4gIT09IFwiXCIpIHtcbiAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkVuZCBvZiBmaWxlIGV4cGVjdGVkXCIpO1xuICB9XG4gIGdldFRva2VuKCk7XG5cbiAgLy8gcmVtb3ZlIHRlbXBvcmFyeSBkZWZhdWx0IG9wdGlvbnNcbiAgZGVsZXRlIGdyYXBoLm5vZGU7XG4gIGRlbGV0ZSBncmFwaC5lZGdlO1xuICBkZWxldGUgZ3JhcGguZ3JhcGg7XG5cbiAgcmV0dXJuIGdyYXBoO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgbGlzdCB3aXRoIHN0YXRlbWVudHMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGdyYXBoXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50cyhncmFwaCkge1xuICB3aGlsZSAodG9rZW4gIT09IFwiXCIgJiYgdG9rZW4gIT0gXCJ9XCIpIHtcbiAgICBwYXJzZVN0YXRlbWVudChncmFwaCk7XG4gICAgaWYgKHRva2VuID09PSBcIjtcIikge1xuICAgICAgZ2V0VG9rZW4oKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhIHNpbmdsZSBzdGF0ZW1lbnQuIENhbiBiZSBhIGFuIGF0dHJpYnV0ZSBzdGF0ZW1lbnQsIG5vZGVcbiAqIHN0YXRlbWVudCwgYSBzZXJpZXMgb2Ygbm9kZSBzdGF0ZW1lbnRzIGFuZCBlZGdlIHN0YXRlbWVudHMsIG9yIGFcbiAqIHBhcmFtZXRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqL1xuZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnQoZ3JhcGgpIHtcbiAgLy8gcGFyc2Ugc3ViZ3JhcGhcbiAgdmFyIHN1YmdyYXBoID0gcGFyc2VTdWJncmFwaChncmFwaCk7XG4gIGlmIChzdWJncmFwaCkge1xuICAgIC8vIGVkZ2Ugc3RhdGVtZW50c1xuICAgIHBhcnNlRWRnZShncmFwaCwgc3ViZ3JhcGgpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gcGFyc2UgYW4gYXR0cmlidXRlIHN0YXRlbWVudFxuICB2YXIgYXR0ciA9IHBhcnNlQXR0cmlidXRlU3RhdGVtZW50KGdyYXBoKTtcbiAgaWYgKGF0dHIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBwYXJzZSBub2RlXG4gIGlmICh0b2tlblR5cGUgIT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIklkZW50aWZpZXIgZXhwZWN0ZWRcIik7XG4gIH1cbiAgdmFyIGlkID0gdG9rZW47IC8vIGlkIGNhbiBiZSBhIHN0cmluZyBvciBhIG51bWJlclxuICBnZXRUb2tlbigpO1xuXG4gIGlmICh0b2tlbiA9PT0gXCI9XCIpIHtcbiAgICAvLyBpZCBzdGF0ZW1lbnRcbiAgICBnZXRUb2tlbigpO1xuICAgIGlmICh0b2tlblR5cGUgIT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiSWRlbnRpZmllciBleHBlY3RlZFwiKTtcbiAgICB9XG4gICAgZ3JhcGhbaWRdID0gdG9rZW47XG4gICAgZ2V0VG9rZW4oKTtcbiAgICAvLyBUT0RPOiBpbXBsZW1lbnQgY29tbWEgc2VwYXJhdGVkIGxpc3Qgd2l0aCBcImFfbGlzdDogSUQ9SUQgWycsJ10gW2FfbGlzdF0gXCJcbiAgfSBlbHNlIHtcbiAgICBwYXJzZU5vZGVTdGF0ZW1lbnQoZ3JhcGgsIGlkKTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGEgc3ViZ3JhcGhcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGggICAgcGFyZW50IGdyYXBoIG9iamVjdFxuICogQHJldHVybnMge29iamVjdCB8IG51bGx9IHN1YmdyYXBoXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3ViZ3JhcGgoZ3JhcGgpIHtcbiAgdmFyIHN1YmdyYXBoID0gbnVsbDtcblxuICAvLyBvcHRpb25hbCBzdWJncmFwaCBrZXl3b3JkXG4gIGlmICh0b2tlbiA9PT0gXCJzdWJncmFwaFwiKSB7XG4gICAgc3ViZ3JhcGggPSB7fTtcbiAgICBzdWJncmFwaC50eXBlID0gXCJzdWJncmFwaFwiO1xuICAgIGdldFRva2VuKCk7XG5cbiAgICAvLyBvcHRpb25hbCBncmFwaCBpZFxuICAgIGlmICh0b2tlblR5cGUgPT09IFRPS0VOVFlQRS5JREVOVElGSUVSKSB7XG4gICAgICBzdWJncmFwaC5pZCA9IHRva2VuO1xuICAgICAgZ2V0VG9rZW4oKTtcbiAgICB9XG4gIH1cblxuICAvLyBvcGVuIGFuZ2xlIGJyYWNrZXRcbiAgaWYgKHRva2VuID09PSBcIntcIikge1xuICAgIGdldFRva2VuKCk7XG5cbiAgICBpZiAoIXN1YmdyYXBoKSB7XG4gICAgICBzdWJncmFwaCA9IHt9O1xuICAgIH1cbiAgICBzdWJncmFwaC5wYXJlbnQgPSBncmFwaDtcbiAgICBzdWJncmFwaC5ub2RlID0gZ3JhcGgubm9kZTtcbiAgICBzdWJncmFwaC5lZGdlID0gZ3JhcGguZWRnZTtcbiAgICBzdWJncmFwaC5ncmFwaCA9IGdyYXBoLmdyYXBoO1xuXG4gICAgLy8gc3RhdGVtZW50c1xuICAgIHBhcnNlU3RhdGVtZW50cyhzdWJncmFwaCk7XG5cbiAgICAvLyBjbG9zZSBhbmdsZSBicmFja2V0XG4gICAgaWYgKHRva2VuICE9IFwifVwiKSB7XG4gICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkFuZ2xlIGJyYWNrZXQgfSBleHBlY3RlZFwiKTtcbiAgICB9XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIC8vIHJlbW92ZSB0ZW1wb3JhcnkgZGVmYXVsdCBvcHRpb25zXG4gICAgZGVsZXRlIHN1YmdyYXBoLm5vZGU7XG4gICAgZGVsZXRlIHN1YmdyYXBoLmVkZ2U7XG4gICAgZGVsZXRlIHN1YmdyYXBoLmdyYXBoO1xuICAgIGRlbGV0ZSBzdWJncmFwaC5wYXJlbnQ7XG5cbiAgICAvLyByZWdpc3RlciBhdCB0aGUgcGFyZW50IGdyYXBoXG4gICAgaWYgKCFncmFwaC5zdWJncmFwaHMpIHtcbiAgICAgIGdyYXBoLnN1YmdyYXBocyA9IFtdO1xuICAgIH1cbiAgICBncmFwaC5zdWJncmFwaHMucHVzaChzdWJncmFwaCk7XG4gIH1cblxuICByZXR1cm4gc3ViZ3JhcGg7XG59XG5cbi8qKlxuICogcGFyc2UgYW4gYXR0cmlidXRlIHN0YXRlbWVudCBsaWtlIFwibm9kZSBbc2hhcGU9Y2lyY2xlIGZvbnRTaXplPTE2XVwiLlxuICogQXZhaWxhYmxlIGtleXdvcmRzIGFyZSAnbm9kZScsICdlZGdlJywgJ2dyYXBoJy5cbiAqIFRoZSBwcmV2aW91cyBsaXN0IHdpdGggZGVmYXVsdCBhdHRyaWJ1dGVzIHdpbGwgYmUgcmVwbGFjZWRcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfSBrZXl3b3JkIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBhcnNlZCBhdHRyaWJ1dGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub2RlLCBlZGdlLCBncmFwaCksIG9yIG51bGwgaWYgbm90aGluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcGFyc2VkLlxuICovXG5mdW5jdGlvbiBwYXJzZUF0dHJpYnV0ZVN0YXRlbWVudChncmFwaCkge1xuICAvLyBhdHRyaWJ1dGUgc3RhdGVtZW50c1xuICBpZiAodG9rZW4gPT09IFwibm9kZVwiKSB7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIC8vIG5vZGUgYXR0cmlidXRlc1xuICAgIGdyYXBoLm5vZGUgPSBwYXJzZUF0dHJpYnV0ZUxpc3QoKTtcbiAgICByZXR1cm4gXCJub2RlXCI7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09IFwiZWRnZVwiKSB7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIC8vIGVkZ2UgYXR0cmlidXRlc1xuICAgIGdyYXBoLmVkZ2UgPSBwYXJzZUF0dHJpYnV0ZUxpc3QoKTtcbiAgICByZXR1cm4gXCJlZGdlXCI7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09IFwiZ3JhcGhcIikge1xuICAgIGdldFRva2VuKCk7XG5cbiAgICAvLyBncmFwaCBhdHRyaWJ1dGVzXG4gICAgZ3JhcGguZ3JhcGggPSBwYXJzZUF0dHJpYnV0ZUxpc3QoKTtcbiAgICByZXR1cm4gXCJncmFwaFwiO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogcGFyc2UgYSBub2RlIHN0YXRlbWVudFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGlkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTm9kZVN0YXRlbWVudChncmFwaCwgaWQpIHtcbiAgLy8gbm9kZSBzdGF0ZW1lbnRcbiAgdmFyIG5vZGUgPSB7XG4gICAgaWQ6IGlkLFxuICB9O1xuICB2YXIgYXR0ciA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuICBpZiAoYXR0cikge1xuICAgIG5vZGUuYXR0ciA9IGF0dHI7XG4gIH1cbiAgYWRkTm9kZShncmFwaCwgbm9kZSk7XG5cbiAgLy8gZWRnZSBzdGF0ZW1lbnRzXG4gIHBhcnNlRWRnZShncmFwaCwgaWQpO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuIGVkZ2Ugb3IgYSBzZXJpZXMgb2YgZWRnZXNcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBmcm9tICAgICAgICBJZCBvZiB0aGUgZnJvbSBub2RlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRWRnZShncmFwaCwgZnJvbSkge1xuICB3aGlsZSAodG9rZW4gPT09IFwiLT5cIiB8fCB0b2tlbiA9PT0gXCItLVwiKSB7XG4gICAgdmFyIHRvO1xuICAgIHZhciB0eXBlID0gdG9rZW47XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIHZhciBzdWJncmFwaCA9IHBhcnNlU3ViZ3JhcGgoZ3JhcGgpO1xuICAgIGlmIChzdWJncmFwaCkge1xuICAgICAgdG8gPSBzdWJncmFwaDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRva2VuVHlwZSAhPSBUT0tFTlRZUEUuSURFTlRJRklFUikge1xuICAgICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIklkZW50aWZpZXIgb3Igc3ViZ3JhcGggZXhwZWN0ZWRcIik7XG4gICAgICB9XG4gICAgICB0byA9IHRva2VuO1xuICAgICAgYWRkTm9kZShncmFwaCwge1xuICAgICAgICBpZDogdG8sXG4gICAgICB9KTtcbiAgICAgIGdldFRva2VuKCk7XG4gICAgfVxuXG4gICAgLy8gcGFyc2UgZWRnZSBhdHRyaWJ1dGVzXG4gICAgdmFyIGF0dHIgPSBwYXJzZUF0dHJpYnV0ZUxpc3QoKTtcblxuICAgIC8vIGNyZWF0ZSBlZGdlXG4gICAgdmFyIGVkZ2UgPSBjcmVhdGVFZGdlKGdyYXBoLCBmcm9tLCB0bywgdHlwZSwgYXR0cik7XG4gICAgYWRkRWRnZShncmFwaCwgZWRnZSk7XG5cbiAgICBmcm9tID0gdG87XG4gIH1cbn1cblxuLyoqXG4gKiBBcyBleHBsYWluZWQgaW4gWzFdLCBncmFwaHZpeiBoYXMgbGltaXRhdGlvbnMgZm9yIGNvbWJpbmF0aW9uIG9mXG4gKiBhcnJvd1toZWFkfHRhaWxdIGFuZCBkaXIuIElmIGF0dHJpYnV0ZSBsaXN0IGluY2x1ZGVzICdkaXInLFxuICogZm9sbG93aW5nIGNhc2VzIGp1c3QgYmUgc3VwcG9ydGVkLlxuICogICAxLiBib3RoIG9yIG5vbmUgKyBhcnJvd2hlYWQsIGFycm93dGFpbFxuICogICAyLiBmb3J3YXJkICsgYXJyb3doZWFkIChhcnJvd3RhaWwgaXMgbm90IGFmZmVkdGVkKVxuICogICAzLiBiYWNrICsgYXJyb3d0YWlsIChhcnJvd2hlYWQgaXMgbm90IGFmZmVjdGVkKVxuICogWzFdIGh0dHBzOi8vd3d3LmdyYXBodml6Lm9yZy9kb2MvaW5mby9hdHRycy5odG1sI2g6dW5kaXJfbm90ZVxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcGFyc2VBdHRyaWJ1dGVMaXN0KCkgdG8gcGFyc2UgJ2RpcidcbiAqIGF0dHJpYnV0ZSB3aXRoIGdpdmVuICdhdHRyX25hbWVzJyBhbmQgJ2F0dHJfbGlzdCcuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGF0dHJfbmFtZXMgIEFycmF5IG9mIGF0dHJpYnV0ZSBuYW1lc1xuICogQHBhcmFtIHtvYmplY3R9IGF0dHJfbGlzdCAgQXJyYXkgb2Ygb2JqZWN0cyBvZiBhdHRyaWJ1dGUgc2V0XG4gKiBAcmV0dXJucyB7b2JqZWN0fSBhdHRyX2xpc3QgIFVwZGF0ZWQgYXR0cl9saXN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlRGlyQXR0cmlidXRlKGF0dHJfbmFtZXMsIGF0dHJfbGlzdCkge1xuICB2YXIgaTtcbiAgaWYgKGF0dHJfbmFtZXMuaW5jbHVkZXMoXCJkaXJcIikpIHtcbiAgICB2YXIgaWR4ID0ge307IC8vIGdldCBpbmRleCBvZiAnYXJyb3dzJyBhbmQgJ2RpcidcbiAgICBpZHguYXJyb3dzID0ge307XG4gICAgZm9yIChpID0gMDsgaSA8IGF0dHJfbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGF0dHJfbGlzdFtpXS5uYW1lID09PSBcImFycm93c1wiKSB7XG4gICAgICAgIGlmIChhdHRyX2xpc3RbaV0udmFsdWUudG8gIT0gbnVsbCkge1xuICAgICAgICAgIGlkeC5hcnJvd3MudG8gPSBpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0dHJfbGlzdFtpXS52YWx1ZS5mcm9tICE9IG51bGwpIHtcbiAgICAgICAgICBpZHguYXJyb3dzLmZyb20gPSBpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiSW52YWxpZCB2YWx1ZSBvZiBhcnJvd3NcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwiZGlyXCIpIHtcbiAgICAgICAgaWR4LmRpciA9IGk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZmlyc3QsIGFkZCBkZWZhdWx0IGFycm93IHNoYXBlIGlmIGl0IGlzIG5vdCBhc3NpZ25lZCB0byBhdm9pZCBlcnJvclxuICAgIHZhciBkaXJfdHlwZSA9IGF0dHJfbGlzdFtpZHguZGlyXS52YWx1ZTtcbiAgICBpZiAoIWF0dHJfbmFtZXMuaW5jbHVkZXMoXCJhcnJvd3NcIikpIHtcbiAgICAgIGlmIChkaXJfdHlwZSA9PT0gXCJib3RoXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgdG86IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICAgIGF0dHJfbGlzdC5wdXNoKHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmRpcl0uYXR0cixcbiAgICAgICAgICBuYW1lOiBcImFycm93c1wiLFxuICAgICAgICAgIHZhbHVlOiB7IGZyb206IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLmZyb20gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSBpZiAoZGlyX3R5cGUgPT09IFwiZm9yd2FyZFwiKSB7XG4gICAgICAgIGF0dHJfbGlzdC5wdXNoKHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmRpcl0uYXR0cixcbiAgICAgICAgICBuYW1lOiBcImFycm93c1wiLFxuICAgICAgICAgIHZhbHVlOiB7IHRvOiB7IGVuYWJsZWQ6IHRydWUgfSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWR4LmFycm93cy50byA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJiYWNrXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgZnJvbTogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJub25lXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcignSW52YWxpZCBkaXIgdHlwZSBcIicgKyBkaXJfdHlwZSArICdcIicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmcm9tX3R5cGU7XG4gICAgdmFyIHRvX3R5cGU7XG4gICAgLy8gdXBkYXRlICdhcnJvd3MnIGF0dHJpYnV0ZSBmcm9tICdkaXInLlxuICAgIGlmIChkaXJfdHlwZSA9PT0gXCJib3RoXCIpIHtcbiAgICAgIC8vIGJvdGggb2Ygc2hhcGVzIG9mICdmcm9tJyBhbmQgJ3RvJyBhcmUgZ2l2ZW5cbiAgICAgIGlmIChpZHguYXJyb3dzLnRvICYmIGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGF0dHJfbGlzdC5zcGxpY2UoaWR4LmFycm93cy5mcm9tLCAxKTtcblxuICAgICAgICAvLyBzaGFwZSBvZiAndG8nIGlzIGFzc2lnbmVkIGFuZCB1c2UgZGVmYXVsdCB0byAnZnJvbSdcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiYXJyb3dcIjtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gb25seSBzaGFwZSBvZiAnZnJvbScgaXMgYXNzaWduZWQgYW5kIHVzZSBkZWZhdWx0IGZvciAndG8nXG4gICAgICB9IGVsc2UgaWYgKGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlyX3R5cGUgPT09IFwiYmFja1wiKSB7XG4gICAgICAvLyBnaXZlbiBib3RoIG9mIHNoYXBlcywgYnV0IHVzZSBvbmx5ICdmcm9tJ1xuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGdpdmVuIHNoYXBlIG9mICd0bycsIGJ1dCBkb2VzIG5vdCB1c2UgaXRcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gXCJcIjtcbiAgICAgICAgZnJvbV90eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBpZHguYXJyb3dzLmZyb20gPSBpZHguYXJyb3dzLnRvO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBhc3NpZ24gZ2l2ZW4gJ2Zyb20nIHNoYXBlXG4gICAgICB9IGVsc2UgaWYgKGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gXCJcIjtcbiAgICAgICAgZnJvbV90eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0udmFsdWUuZnJvbS50eXBlO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGZyb206IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJub25lXCIpIHtcbiAgICAgIHZhciBpZHhfYXJyb3c7XG4gICAgICBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICBpZHhfYXJyb3cgPSBpZHguYXJyb3dzLnRvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWR4X2Fycm93ID0gaWR4LmFycm93cy5mcm9tO1xuICAgICAgfVxuXG4gICAgICBhdHRyX2xpc3RbaWR4X2Fycm93XSA9IHtcbiAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeF9hcnJvd10uYXR0cixcbiAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeF9hcnJvd10ubmFtZSxcbiAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoZGlyX3R5cGUgPT09IFwiZm9yd2FyZFwiKSB7XG4gICAgICAvLyBnaXZlbiBib3RoIG9mIHNoYXBlcywgYnV0IHVzZSBvbmx5ICd0bydcbiAgICAgIGlmIChpZHguYXJyb3dzLnRvICYmIGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFzc2lnbiBnaXZlbiAndG8nIHNoYXBlXG4gICAgICB9IGVsc2UgaWYgKGlkeC5hcnJvd3MudG8pIHtcbiAgICAgICAgdG9fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS52YWx1ZS50by50eXBlO1xuICAgICAgICBmcm9tX3R5cGUgPSBcIlwiO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBnaXZlbiBzaGFwZSBvZiAnZnJvbScsIGJ1dCBkb2VzIG5vdCB1c2UgaXRcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBpZHguYXJyb3dzLmZyb207XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICB0bzoge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS52YWx1ZS50by50eXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcignSW52YWxpZCBkaXIgdHlwZSBcIicgKyBkaXJfdHlwZSArICdcIicpO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSAnZGlyJyBhdHRyaWJ1dGUgbm8gbmVlZCBhbnltb3JlXG4gICAgYXR0cl9saXN0LnNwbGljZShpZHguZGlyLCAxKTtcbiAgfVxuICByZXR1cm4gYXR0cl9saXN0O1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc2V0IHdpdGggYXR0cmlidXRlcyxcbiAqIGZvciBleGFtcGxlIFtsYWJlbD1cIjEuMDAwXCIsIHNoYXBlPXNvbGlkXVxuICpcbiAqIEByZXR1cm5zIHtvYmplY3QgfCBudWxsfSBhdHRyXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlTGlzdCgpIHtcbiAgdmFyIGk7XG4gIHZhciBhdHRyID0gbnVsbDtcblxuICAvLyBlZGdlIHN0eWxlcyBvZiBkb3QgYW5kIHZpc1xuICB2YXIgZWRnZVN0eWxlcyA9IHtcbiAgICBkYXNoZWQ6IHRydWUsXG4gICAgc29saWQ6IGZhbHNlLFxuICAgIGRvdHRlZDogWzEsIDVdLFxuICB9O1xuXG4gIC8qKlxuICAgKiBEZWZpbmUgYXJyb3cgdHlwZXMuXG4gICAqIHZpcyBjdXJyZW50bHkgc3VwcG9ydHMgdHlwZXMgZGVmaW5lZCBpbiAnYXJyb3dUeXBlcycuXG4gICAqIERldGFpbHMgb2YgYXJyb3cgc2hhcGVzIGFyZSBkZXNjcmliZWQgaW5cbiAgICogaHR0cDovL3d3dy5ncmFwaHZpei5vcmcvY29udGVudC9hcnJvdy1zaGFwZXNcbiAgICovXG4gIHZhciBhcnJvd1R5cGVzID0ge1xuICAgIGRvdDogXCJjaXJjbGVcIixcbiAgICBib3g6IFwiYm94XCIsXG4gICAgY3JvdzogXCJjcm93XCIsXG4gICAgY3VydmU6IFwiY3VydmVcIixcbiAgICBpY3VydmU6IFwiaW52X2N1cnZlXCIsXG4gICAgbm9ybWFsOiBcInRyaWFuZ2xlXCIsXG4gICAgaW52OiBcImludl90cmlhbmdsZVwiLFxuICAgIGRpYW1vbmQ6IFwiZGlhbW9uZFwiLFxuICAgIHRlZTogXCJiYXJcIixcbiAgICB2ZWU6IFwidmVlXCIsXG4gIH07XG5cbiAgLyoqXG4gICAqICdhdHRyX2xpc3QnIGNvbnRhaW5zIGF0dHJpYnV0ZXMgZm9yIGNoZWNraW5nIGlmIHNvbWUgb2YgdGhlbSBhcmUgYWZmZWN0ZWRcbiAgICogbGF0ZXIuIEZvciBpbnN0YW5jZSwgYm90aCBvZiAnYXJyb3doZWFkJyBhbmQgJ2RpcicgKGVkZ2Ugc3R5bGUgZGVmaW5lZFxuICAgKiBpbiBET1QpIG1ha2UgY2hhbmdlcyB0byAnYXJyb3dzJyBhdHRyaWJ1dGUgaW4gdmlzLlxuICAgKi9cbiAgdmFyIGF0dHJfbGlzdCA9IG5ldyBBcnJheSgpO1xuICB2YXIgYXR0cl9uYW1lcyA9IG5ldyBBcnJheSgpOyAvLyB1c2VkIGZvciBjaGVja2luZyB0aGUgY2FzZS5cblxuICAvLyBwYXJzZSBhdHRyaWJ1dGVzXG4gIHdoaWxlICh0b2tlbiA9PT0gXCJbXCIpIHtcbiAgICBnZXRUb2tlbigpO1xuICAgIGF0dHIgPSB7fTtcbiAgICB3aGlsZSAodG9rZW4gIT09IFwiXCIgJiYgdG9rZW4gIT0gXCJdXCIpIHtcbiAgICAgIGlmICh0b2tlblR5cGUgIT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJBdHRyaWJ1dGUgbmFtZSBleHBlY3RlZFwiKTtcbiAgICAgIH1cbiAgICAgIHZhciBuYW1lID0gdG9rZW47XG5cbiAgICAgIGdldFRva2VuKCk7XG4gICAgICBpZiAodG9rZW4gIT0gXCI9XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJFcXVhbCBzaWduID0gZXhwZWN0ZWRcIik7XG4gICAgICB9XG4gICAgICBnZXRUb2tlbigpO1xuXG4gICAgICBpZiAodG9rZW5UeXBlICE9IFRPS0VOVFlQRS5JREVOVElGSUVSKSB7XG4gICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiQXR0cmlidXRlIHZhbHVlIGV4cGVjdGVkXCIpO1xuICAgICAgfVxuICAgICAgdmFyIHZhbHVlID0gdG9rZW47XG5cbiAgICAgIC8vIGNvbnZlcnQgZnJvbSBkb3Qgc3R5bGUgdG8gdmlzXG4gICAgICBpZiAobmFtZSA9PT0gXCJzdHlsZVwiKSB7XG4gICAgICAgIHZhbHVlID0gZWRnZVN0eWxlc1t2YWx1ZV07XG4gICAgICB9XG5cbiAgICAgIHZhciBhcnJvd1R5cGU7XG4gICAgICBpZiAobmFtZSA9PT0gXCJhcnJvd2hlYWRcIikge1xuICAgICAgICBhcnJvd1R5cGUgPSBhcnJvd1R5cGVzW3ZhbHVlXTtcbiAgICAgICAgbmFtZSA9IFwiYXJyb3dzXCI7XG4gICAgICAgIHZhbHVlID0geyB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBhcnJvd1R5cGUgfSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSA9PT0gXCJhcnJvd3RhaWxcIikge1xuICAgICAgICBhcnJvd1R5cGUgPSBhcnJvd1R5cGVzW3ZhbHVlXTtcbiAgICAgICAgbmFtZSA9IFwiYXJyb3dzXCI7XG4gICAgICAgIHZhbHVlID0geyBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGFycm93VHlwZSB9IH07XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdC5wdXNoKHsgYXR0cjogYXR0ciwgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgYXR0cl9uYW1lcy5wdXNoKG5hbWUpO1xuXG4gICAgICBnZXRUb2tlbigpO1xuICAgICAgaWYgKHRva2VuID09IFwiLFwiKSB7XG4gICAgICAgIGdldFRva2VuKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRva2VuICE9IFwiXVwiKSB7XG4gICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkJyYWNrZXQgXSBleHBlY3RlZFwiKTtcbiAgICB9XG4gICAgZ2V0VG9rZW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcyBleHBsYWluZWQgaW4gWzFdLCBncmFwaHZpeiBoYXMgbGltaXRhdGlvbnMgZm9yIGNvbWJpbmF0aW9uIG9mXG4gICAqIGFycm93W2hlYWR8dGFpbF0gYW5kIGRpci4gSWYgYXR0cmlidXRlIGxpc3QgaW5jbHVkZXMgJ2RpcicsXG4gICAqIGZvbGxvd2luZyBjYXNlcyBqdXN0IGJlIHN1cHBvcnRlZC5cbiAgICogICAxLiBib3RoIG9yIG5vbmUgKyBhcnJvd2hlYWQsIGFycm93dGFpbFxuICAgKiAgIDIuIGZvcndhcmQgKyBhcnJvd2hlYWQgKGFycm93dGFpbCBpcyBub3QgYWZmZWR0ZWQpXG4gICAqICAgMy4gYmFjayArIGFycm93dGFpbCAoYXJyb3doZWFkIGlzIG5vdCBhZmZlY3RlZClcbiAgICogWzFdIGh0dHBzOi8vd3d3LmdyYXBodml6Lm9yZy9kb2MvaW5mby9hdHRycy5odG1sI2g6dW5kaXJfbm90ZVxuICAgKi9cbiAgaWYgKGF0dHJfbmFtZXMuaW5jbHVkZXMoXCJkaXJcIikpIHtcbiAgICB2YXIgaWR4ID0ge307IC8vIGdldCBpbmRleCBvZiAnYXJyb3dzJyBhbmQgJ2RpcidcbiAgICBpZHguYXJyb3dzID0ge307XG4gICAgZm9yIChpID0gMDsgaSA8IGF0dHJfbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGF0dHJfbGlzdFtpXS5uYW1lID09PSBcImFycm93c1wiKSB7XG4gICAgICAgIGlmIChhdHRyX2xpc3RbaV0udmFsdWUudG8gIT0gbnVsbCkge1xuICAgICAgICAgIGlkeC5hcnJvd3MudG8gPSBpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0dHJfbGlzdFtpXS52YWx1ZS5mcm9tICE9IG51bGwpIHtcbiAgICAgICAgICBpZHguYXJyb3dzLmZyb20gPSBpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiSW52YWxpZCB2YWx1ZSBvZiBhcnJvd3NcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwiZGlyXCIpIHtcbiAgICAgICAgaWR4LmRpciA9IGk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZmlyc3QsIGFkZCBkZWZhdWx0IGFycm93IHNoYXBlIGlmIGl0IGlzIG5vdCBhc3NpZ25lZCB0byBhdm9pZCBlcnJvclxuICAgIHZhciBkaXJfdHlwZSA9IGF0dHJfbGlzdFtpZHguZGlyXS52YWx1ZTtcbiAgICBpZiAoIWF0dHJfbmFtZXMuaW5jbHVkZXMoXCJhcnJvd3NcIikpIHtcbiAgICAgIGlmIChkaXJfdHlwZSA9PT0gXCJib3RoXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgdG86IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICAgIGF0dHJfbGlzdC5wdXNoKHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmRpcl0uYXR0cixcbiAgICAgICAgICBuYW1lOiBcImFycm93c1wiLFxuICAgICAgICAgIHZhbHVlOiB7IGZyb206IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLmZyb20gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSBpZiAoZGlyX3R5cGUgPT09IFwiZm9yd2FyZFwiKSB7XG4gICAgICAgIGF0dHJfbGlzdC5wdXNoKHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmRpcl0uYXR0cixcbiAgICAgICAgICBuYW1lOiBcImFycm93c1wiLFxuICAgICAgICAgIHZhbHVlOiB7IHRvOiB7IGVuYWJsZWQ6IHRydWUgfSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWR4LmFycm93cy50byA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJiYWNrXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgZnJvbTogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJub25lXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcignSW52YWxpZCBkaXIgdHlwZSBcIicgKyBkaXJfdHlwZSArICdcIicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmcm9tX3R5cGU7XG4gICAgdmFyIHRvX3R5cGU7XG4gICAgLy8gdXBkYXRlICdhcnJvd3MnIGF0dHJpYnV0ZSBmcm9tICdkaXInLlxuICAgIGlmIChkaXJfdHlwZSA9PT0gXCJib3RoXCIpIHtcbiAgICAgIC8vIGJvdGggb2Ygc2hhcGVzIG9mICdmcm9tJyBhbmQgJ3RvJyBhcmUgZ2l2ZW5cbiAgICAgIGlmIChpZHguYXJyb3dzLnRvICYmIGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGF0dHJfbGlzdC5zcGxpY2UoaWR4LmFycm93cy5mcm9tLCAxKTtcblxuICAgICAgICAvLyBzaGFwZSBvZiAndG8nIGlzIGFzc2lnbmVkIGFuZCB1c2UgZGVmYXVsdCB0byAnZnJvbSdcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiYXJyb3dcIjtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gb25seSBzaGFwZSBvZiAnZnJvbScgaXMgYXNzaWduZWQgYW5kIHVzZSBkZWZhdWx0IGZvciAndG8nXG4gICAgICB9IGVsc2UgaWYgKGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlyX3R5cGUgPT09IFwiYmFja1wiKSB7XG4gICAgICAvLyBnaXZlbiBib3RoIG9mIHNoYXBlcywgYnV0IHVzZSBvbmx5ICdmcm9tJ1xuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGdpdmVuIHNoYXBlIG9mICd0bycsIGJ1dCBkb2VzIG5vdCB1c2UgaXRcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gXCJcIjtcbiAgICAgICAgZnJvbV90eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBpZHguYXJyb3dzLmZyb20gPSBpZHguYXJyb3dzLnRvO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBhc3NpZ24gZ2l2ZW4gJ2Zyb20nIHNoYXBlXG4gICAgICB9IGVsc2UgaWYgKGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gXCJcIjtcbiAgICAgICAgZnJvbV90eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0udmFsdWUuZnJvbS50eXBlO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGZyb206IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJub25lXCIpIHtcbiAgICAgIHZhciBpZHhfYXJyb3c7XG4gICAgICBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICBpZHhfYXJyb3cgPSBpZHguYXJyb3dzLnRvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWR4X2Fycm93ID0gaWR4LmFycm93cy5mcm9tO1xuICAgICAgfVxuXG4gICAgICBhdHRyX2xpc3RbaWR4X2Fycm93XSA9IHtcbiAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeF9hcnJvd10uYXR0cixcbiAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeF9hcnJvd10ubmFtZSxcbiAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoZGlyX3R5cGUgPT09IFwiZm9yd2FyZFwiKSB7XG4gICAgICAvLyBnaXZlbiBib3RoIG9mIHNoYXBlcywgYnV0IHVzZSBvbmx5ICd0bydcbiAgICAgIGlmIChpZHguYXJyb3dzLnRvICYmIGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFzc2lnbiBnaXZlbiAndG8nIHNoYXBlXG4gICAgICB9IGVsc2UgaWYgKGlkeC5hcnJvd3MudG8pIHtcbiAgICAgICAgdG9fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS52YWx1ZS50by50eXBlO1xuICAgICAgICBmcm9tX3R5cGUgPSBcIlwiO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBnaXZlbiBzaGFwZSBvZiAnZnJvbScsIGJ1dCBkb2VzIG5vdCB1c2UgaXRcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBpZHguYXJyb3dzLmZyb207XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZSB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoJ0ludmFsaWQgZGlyIHR5cGUgXCInICsgZGlyX3R5cGUgKyAnXCInKTtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgJ2RpcicgYXR0cmlidXRlIG5vIG5lZWQgYW55bW9yZVxuICAgIGF0dHJfbGlzdC5zcGxpY2UoaWR4LmRpciwgMSk7XG4gIH1cblxuICAvLyBwYXJzZSAncGVud2lkdGgnXG4gIHZhciBub2ZfYXR0cl9saXN0O1xuICBpZiAoYXR0cl9uYW1lcy5pbmNsdWRlcyhcInBlbndpZHRoXCIpKSB7XG4gICAgdmFyIHRtcF9hdHRyX2xpc3QgPSBbXTtcblxuICAgIG5vZl9hdHRyX2xpc3QgPSBhdHRyX2xpc3QubGVuZ3RoO1xuICAgIGZvciAoaSA9IDA7IGkgPCBub2ZfYXR0cl9saXN0OyBpKyspIHtcbiAgICAgIC8vIGV4Y2x1ZGUgJ3dpZHRoJyBmcm9tIGF0dHJfbGlzdCBpZiAncGVud2lkdGgnIGV4aXN0c1xuICAgICAgaWYgKGF0dHJfbGlzdFtpXS5uYW1lICE9PSBcIndpZHRoXCIpIHtcbiAgICAgICAgaWYgKGF0dHJfbGlzdFtpXS5uYW1lID09PSBcInBlbndpZHRoXCIpIHtcbiAgICAgICAgICBhdHRyX2xpc3RbaV0ubmFtZSA9IFwid2lkdGhcIjtcbiAgICAgICAgfVxuICAgICAgICB0bXBfYXR0cl9saXN0LnB1c2goYXR0cl9saXN0W2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXR0cl9saXN0ID0gdG1wX2F0dHJfbGlzdDtcbiAgfVxuXG4gIG5vZl9hdHRyX2xpc3QgPSBhdHRyX2xpc3QubGVuZ3RoO1xuICBmb3IgKGkgPSAwOyBpIDwgbm9mX2F0dHJfbGlzdDsgaSsrKSB7XG4gICAgc2V0VmFsdWUoYXR0cl9saXN0W2ldLmF0dHIsIGF0dHJfbGlzdFtpXS5uYW1lLCBhdHRyX2xpc3RbaV0udmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGF0dHI7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgc3ludGF4IGVycm9yIHdpdGggZXh0cmEgaW5mb3JtYXRpb24gb24gY3VycmVudCB0b2tlbiBhbmQgaW5kZXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtTeW50YXhFcnJvcn0gZXJyXG4gKi9cbmZ1bmN0aW9uIG5ld1N5bnRheEVycm9yKG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBTeW50YXhFcnJvcihcbiAgICBtZXNzYWdlICsgJywgZ290IFwiJyArIGNob3AodG9rZW4sIDMwKSArICdcIiAoY2hhciAnICsgaW5kZXggKyBcIilcIlxuICApO1xufVxuXG4vKipcbiAqIENob3Agb2ZmIHRleHQgYWZ0ZXIgYSBtYXhpbXVtIGxlbmd0aFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge251bWJlcn0gbWF4TGVuZ3RoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjaG9wKHRleHQsIG1heExlbmd0aCkge1xuICByZXR1cm4gdGV4dC5sZW5ndGggPD0gbWF4TGVuZ3RoID8gdGV4dCA6IHRleHQuc3Vic3RyKDAsIDI3KSArIFwiLi4uXCI7XG59XG5cbi8qKlxuICogRXhlY3V0ZSBhIGZ1bmN0aW9uIGZuIGZvciBlYWNoIHBhaXIgb2YgZWxlbWVudHMgaW4gdHdvIGFycmF5c1xuICpcbiAqIEBwYXJhbSB7QXJyYXkgfCAqfSBhcnJheTFcbiAqIEBwYXJhbSB7QXJyYXkgfCAqfSBhcnJheTJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gyKGFycmF5MSwgYXJyYXkyLCBmbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheTEpKSB7XG4gICAgYXJyYXkxLmZvckVhY2goZnVuY3Rpb24gKGVsZW0xKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheTIpKSB7XG4gICAgICAgIGFycmF5Mi5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtMikge1xuICAgICAgICAgIGZuKGVsZW0xLCBlbGVtMik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm4oZWxlbTEsIGFycmF5Mik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXkyKSkge1xuICAgICAgYXJyYXkyLmZvckVhY2goZnVuY3Rpb24gKGVsZW0yKSB7XG4gICAgICAgIGZuKGFycmF5MSwgZWxlbTIpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZuKGFycmF5MSwgYXJyYXkyKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTZXQgYSBuZXN0ZWQgcHJvcGVydHkgb24gYW4gb2JqZWN0XG4gKiBXaGVuIG5lc3RlZCBvYmplY3RzIGFyZSBtaXNzaW5nLCB0aGV5IHdpbGwgYmUgY3JlYXRlZC5cbiAqIEZvciBleGFtcGxlIHNldFByb3Aoe30sICdmb250LmNvbG9yJywgJ3JlZCcpIHdpbGwgcmV0dXJuIHtmb250OiB7Y29sb3I6ICdyZWQnfX1cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAgIEEgZG90IHNlcGFyYXRlZCBzdHJpbmcgbGlrZSAnZm9udC5jb2xvcidcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgICAgICAgVmFsdWUgZm9yIHRoZSBwcm9wZXJ0eVxuICogQHJldHVybnMge29iamVjdH0gUmV0dXJucyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBhbGxvd3MgZm9yIGNoYWluaW5nLlxuICovXG5mdW5jdGlvbiBzZXRQcm9wKG9iamVjdCwgcGF0aCwgdmFsdWUpIHtcbiAgdmFyIG5hbWVzID0gcGF0aC5zcGxpdChcIi5cIik7XG4gIHZhciBwcm9wID0gbmFtZXMucG9wKCk7XG5cbiAgLy8gdHJhdmVyc2Ugb3ZlciB0aGUgbmVzdGVkIG9iamVjdHNcbiAgdmFyIG9iaiA9IG9iamVjdDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBuYW1lID0gbmFtZXNbaV07XG4gICAgaWYgKCEobmFtZSBpbiBvYmopKSB7XG4gICAgICBvYmpbbmFtZV0gPSB7fTtcbiAgICB9XG4gICAgb2JqID0gb2JqW25hbWVdO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICBvYmpbcHJvcF0gPSB2YWx1ZTtcblxuICByZXR1cm4gb2JqZWN0O1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gb2JqZWN0IHdpdGggRE9UIGF0dHJpYnV0ZXMgdG8gdGhlaXIgdmlzLmpzIGVxdWl2YWxlbnRzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBhdHRyICAgICBPYmplY3Qgd2l0aCBET1QgYXR0cmlidXRlc1xuICogQHBhcmFtIHtvYmplY3R9IG1hcHBpbmdcbiAqIEByZXR1cm5zIHtvYmplY3R9ICAgICAgICAgUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB2aXMuanMgYXR0cmlidXRlc1xuICovXG5mdW5jdGlvbiBjb252ZXJ0QXR0cihhdHRyLCBtYXBwaW5nKSB7XG4gIHZhciBjb252ZXJ0ZWQgPSB7fTtcblxuICBmb3IgKHZhciBwcm9wIGluIGF0dHIpIHtcbiAgICBpZiAoYXR0ci5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgdmFyIHZpc1Byb3AgPSBtYXBwaW5nW3Byb3BdO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmlzUHJvcCkpIHtcbiAgICAgICAgdmlzUHJvcC5mb3JFYWNoKGZ1bmN0aW9uICh2aXNQcm9wSSkge1xuICAgICAgICAgIHNldFByb3AoY29udmVydGVkLCB2aXNQcm9wSSwgYXR0cltwcm9wXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmlzUHJvcCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzZXRQcm9wKGNvbnZlcnRlZCwgdmlzUHJvcCwgYXR0cltwcm9wXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRQcm9wKGNvbnZlcnRlZCwgcHJvcCwgYXR0cltwcm9wXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbnZlcnRlZDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBncmFwaCBpbiBET1QgbGFuZ3VhZ2UgaW50byBhIG1hcCBjb250YWluaW5nXG4gKiB3aXRoIG5vZGVzIGFuZCBlZGdlcyBpbiB0aGUgZm9ybWF0IG9mIGdyYXBoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhICAgICAgICAgVGV4dCBjb250YWluaW5nIGEgZ3JhcGggaW4gRE9ULW5vdGF0aW9uXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBncmFwaERhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERPVFRvR3JhcGgoZGF0YSkge1xuICAvLyBwYXJzZSB0aGUgRE9UIGZpbGVcbiAgdmFyIGRvdERhdGEgPSBwYXJzZURPVChkYXRhKTtcbiAgdmFyIGdyYXBoRGF0YSA9IHtcbiAgICBub2RlczogW10sXG4gICAgZWRnZXM6IFtdLFxuICAgIG9wdGlvbnM6IHt9LFxuICB9O1xuXG4gIC8vIGNvcHkgdGhlIG5vZGVzXG4gIGlmIChkb3REYXRhLm5vZGVzKSB7XG4gICAgZG90RGF0YS5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChkb3ROb2RlKSB7XG4gICAgICB2YXIgZ3JhcGhOb2RlID0ge1xuICAgICAgICBpZDogZG90Tm9kZS5pZCxcbiAgICAgICAgbGFiZWw6IFN0cmluZyhkb3ROb2RlLmxhYmVsIHx8IGRvdE5vZGUuaWQpLFxuICAgICAgfTtcbiAgICAgIG1lcmdlKGdyYXBoTm9kZSwgY29udmVydEF0dHIoZG90Tm9kZS5hdHRyLCBOT0RFX0FUVFJfTUFQUElORykpO1xuICAgICAgaWYgKGdyYXBoTm9kZS5pbWFnZSkge1xuICAgICAgICBncmFwaE5vZGUuc2hhcGUgPSBcImltYWdlXCI7XG4gICAgICB9XG4gICAgICBncmFwaERhdGEubm9kZXMucHVzaChncmFwaE5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gY29weSB0aGUgZWRnZXNcbiAgaWYgKGRvdERhdGEuZWRnZXMpIHtcbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGFuIGVkZ2UgaW4gRE9UIGZvcm1hdCB0byBhbiBlZGdlIHdpdGggVmlzR3JhcGggZm9ybWF0XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZG90RWRnZVxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9IGdyYXBoRWRnZVxuICAgICAqL1xuICAgIHZhciBjb252ZXJ0RWRnZSA9IGZ1bmN0aW9uIChkb3RFZGdlKSB7XG4gICAgICB2YXIgZ3JhcGhFZGdlID0ge1xuICAgICAgICBmcm9tOiBkb3RFZGdlLmZyb20sXG4gICAgICAgIHRvOiBkb3RFZGdlLnRvLFxuICAgICAgfTtcbiAgICAgIG1lcmdlKGdyYXBoRWRnZSwgY29udmVydEF0dHIoZG90RWRnZS5hdHRyLCBFREdFX0FUVFJfTUFQUElORykpO1xuXG4gICAgICAvLyBBZGQgYXJyb3dzIGF0dHJpYnV0ZSB0byBkZWZhdWx0IHN0eWxlZCBhcnJvdy5cbiAgICAgIC8vIFRoZSByZWFzb24gd2h5IGRlZmF1bHQgc3R5bGUgaXMgbm90IGFkZGVkIGluIHBhcnNlQXR0cmlidXRlTGlzdCgpIGlzXG4gICAgICAvLyBiZWNhdXNlIG9ubHkgZGVmYXVsdCBpcyBjbGVhcmVkIGJlZm9yZSBoZXJlLlxuICAgICAgaWYgKGdyYXBoRWRnZS5hcnJvd3MgPT0gbnVsbCAmJiBkb3RFZGdlLnR5cGUgPT09IFwiLT5cIikge1xuICAgICAgICBncmFwaEVkZ2UuYXJyb3dzID0gXCJ0b1wiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZ3JhcGhFZGdlO1xuICAgIH07XG5cbiAgICBkb3REYXRhLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGRvdEVkZ2UpIHtcbiAgICAgIHZhciBmcm9tLCB0bztcbiAgICAgIGlmIChkb3RFZGdlLmZyb20gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgZnJvbSA9IGRvdEVkZ2UuZnJvbS5ub2RlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyb20gPSB7XG4gICAgICAgICAgaWQ6IGRvdEVkZ2UuZnJvbSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRvdEVkZ2UudG8gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdG8gPSBkb3RFZGdlLnRvLm5vZGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG8gPSB7XG4gICAgICAgICAgaWQ6IGRvdEVkZ2UudG8sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChkb3RFZGdlLmZyb20gaW5zdGFuY2VvZiBPYmplY3QgJiYgZG90RWRnZS5mcm9tLmVkZ2VzKSB7XG4gICAgICAgIGRvdEVkZ2UuZnJvbS5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJFZGdlKSB7XG4gICAgICAgICAgdmFyIGdyYXBoRWRnZSA9IGNvbnZlcnRFZGdlKHN1YkVkZ2UpO1xuICAgICAgICAgIGdyYXBoRGF0YS5lZGdlcy5wdXNoKGdyYXBoRWRnZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmb3JFYWNoMihmcm9tLCB0bywgZnVuY3Rpb24gKGZyb20sIHRvKSB7XG4gICAgICAgIHZhciBzdWJFZGdlID0gY3JlYXRlRWRnZShcbiAgICAgICAgICBncmFwaERhdGEsXG4gICAgICAgICAgZnJvbS5pZCxcbiAgICAgICAgICB0by5pZCxcbiAgICAgICAgICBkb3RFZGdlLnR5cGUsXG4gICAgICAgICAgZG90RWRnZS5hdHRyXG4gICAgICAgICk7XG4gICAgICAgIHZhciBncmFwaEVkZ2UgPSBjb252ZXJ0RWRnZShzdWJFZGdlKTtcbiAgICAgICAgZ3JhcGhEYXRhLmVkZ2VzLnB1c2goZ3JhcGhFZGdlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZG90RWRnZS50byBpbnN0YW5jZW9mIE9iamVjdCAmJiBkb3RFZGdlLnRvLmVkZ2VzKSB7XG4gICAgICAgIGRvdEVkZ2UudG8uZWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoc3ViRWRnZSkge1xuICAgICAgICAgIHZhciBncmFwaEVkZ2UgPSBjb252ZXJ0RWRnZShzdWJFZGdlKTtcbiAgICAgICAgICBncmFwaERhdGEuZWRnZXMucHVzaChncmFwaEVkZ2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGNvcHkgdGhlIG9wdGlvbnNcbiAgaWYgKGRvdERhdGEuYXR0cikge1xuICAgIGdyYXBoRGF0YS5vcHRpb25zID0gZG90RGF0YS5hdHRyO1xuICB9XG5cbiAgcmV0dXJuIGdyYXBoRGF0YTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuby12YXIgKi9cbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1lbmFibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4iLCAiZXhwb3J0IHR5cGUgSWQgPSBudW1iZXIgfCBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JPYmplY3Qge1xuICBiYWNrZ3JvdW5kOiBzdHJpbmc7XG4gIGJvcmRlcjogc3RyaW5nO1xuICBoaWdobGlnaHQ6IHtcbiAgICBiYWNrZ3JvdW5kOiBzdHJpbmc7XG4gICAgYm9yZGVyOiBzdHJpbmc7XG4gIH07XG4gIGhvdmVyOiB7XG4gICAgYmFja2dyb3VuZDogc3RyaW5nO1xuICAgIGJvcmRlcjogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlcGhpRGF0YSB7XG4gIG5vZGVzOiBHZXBoaU5vZGVbXTtcbiAgZWRnZXM6IEdlcGhpRWRnZVtdO1xufVxuZXhwb3J0IGludGVyZmFjZSBHZXBoaVBhcnNlT3B0aW9ucyB7XG4gIGZpeGVkPzogYm9vbGVhbjtcbiAgaW5oZXJpdENvbG9yPzogYm9vbGVhbjtcbiAgcGFyc2VDb2xvcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VwaGlOb2RlIHtcbiAgaWQ6IElkO1xuXG4gIGF0dHJpYnV0ZXM/OiB7IHRpdGxlPzogc3RyaW5nIH07XG4gIGNvbG9yPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgc2l6ZT86IG51bWJlcjtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEdlcGhpRWRnZSB7XG4gIGlkOiBJZDtcbiAgc291cmNlOiBJZDtcbiAgdGFyZ2V0OiBJZDtcblxuICBhdHRyaWJ1dGVzPzogeyB0aXRsZT86IHN0cmluZyB9O1xuICBjb2xvcj86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlzRGF0YSB7XG4gIG5vZGVzOiBWaXNOb2RlW107XG4gIGVkZ2VzOiBWaXNFZGdlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlzTm9kZSB7XG4gIGlkOiBJZDtcbiAgZml4ZWQ6IGJvb2xlYW47XG5cbiAgY29sb3I/OiBzdHJpbmcgfCBDb2xvck9iamVjdDtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHNpemU/OiBudW1iZXI7XG4gIHRpdGxlPzogc3RyaW5nO1xuICB4PzogbnVtYmVyO1xuICB5PzogbnVtYmVyO1xuXG4gIGF0dHJpYnV0ZXM/OiB1bmtub3duO1xufVxuZXhwb3J0IGludGVyZmFjZSBWaXNFZGdlIHtcbiAgaWQ6IElkO1xuICBmcm9tOiBJZDtcbiAgdG86IElkO1xuXG4gIGFycm93cz86IFwidG9cIjtcbiAgY29sb3I/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcblxuICBhdHRyaWJ1dGVzPzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IEdlcGhpIHRvIFZpcy5cbiAqXG4gKiBAcGFyYW0gZ2VwaGlKU09OIC0gVGhlIHBhcnNlZCBKU09OIGRhdGEgaW4gR2VwaGkgZm9ybWF0LlxuICogQHBhcmFtIG9wdGlvbnNPYmogLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIGRhdGEgcmVhZHkgdG8gYmUgdXNlZCBpbiBWaXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUdlcGhpKFxuICBnZXBoaUpTT046IEdlcGhpRGF0YSxcbiAgb3B0aW9uc09iaj86IEdlcGhpUGFyc2VPcHRpb25zXG4pOiBWaXNEYXRhIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBlZGdlczoge1xuICAgICAgaW5oZXJpdENvbG9yOiBmYWxzZSxcbiAgICB9LFxuICAgIG5vZGVzOiB7XG4gICAgICBmaXhlZDogZmFsc2UsXG4gICAgICBwYXJzZUNvbG9yOiBmYWxzZSxcbiAgICB9LFxuICB9O1xuXG4gIGlmIChvcHRpb25zT2JqICE9IG51bGwpIHtcbiAgICBpZiAob3B0aW9uc09iai5maXhlZCAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLm5vZGVzLmZpeGVkID0gb3B0aW9uc09iai5maXhlZDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnNPYmoucGFyc2VDb2xvciAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLm5vZGVzLnBhcnNlQ29sb3IgPSBvcHRpb25zT2JqLnBhcnNlQ29sb3I7XG4gICAgfVxuICAgIGlmIChvcHRpb25zT2JqLmluaGVyaXRDb2xvciAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLmVkZ2VzLmluaGVyaXRDb2xvciA9IG9wdGlvbnNPYmouaW5oZXJpdENvbG9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGdFZGdlcyA9IGdlcGhpSlNPTi5lZGdlcztcbiAgY29uc3QgdkVkZ2VzID0gZ0VkZ2VzLm1hcCgoZ0VkZ2UpOiBWaXNFZGdlID0+IHtcbiAgICBjb25zdCB2RWRnZTogVmlzRWRnZSA9IHtcbiAgICAgIGZyb206IGdFZGdlLnNvdXJjZSxcbiAgICAgIGlkOiBnRWRnZS5pZCxcbiAgICAgIHRvOiBnRWRnZS50YXJnZXQsXG4gICAgfTtcblxuICAgIGlmIChnRWRnZS5hdHRyaWJ1dGVzICE9IG51bGwpIHtcbiAgICAgIHZFZGdlLmF0dHJpYnV0ZXMgPSBnRWRnZS5hdHRyaWJ1dGVzO1xuICAgIH1cbiAgICBpZiAoZ0VkZ2UubGFiZWwgIT0gbnVsbCkge1xuICAgICAgdkVkZ2UubGFiZWwgPSBnRWRnZS5sYWJlbDtcbiAgICB9XG4gICAgaWYgKGdFZGdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBnRWRnZS5hdHRyaWJ1dGVzLnRpdGxlICE9IG51bGwpIHtcbiAgICAgIHZFZGdlLnRpdGxlID0gZ0VkZ2UuYXR0cmlidXRlcy50aXRsZTtcbiAgICB9XG4gICAgaWYgKGdFZGdlLnR5cGUgPT09IFwiRGlyZWN0ZWRcIikge1xuICAgICAgdkVkZ2UuYXJyb3dzID0gXCJ0b1wiO1xuICAgIH1cbiAgICAvLyBlZGdlWyd2YWx1ZSddID0gZ0VkZ2UuYXR0cmlidXRlcyAhPSBudWxsID8gZ0VkZ2UuYXR0cmlidXRlcy5XZWlnaHQgOiB1bmRlZmluZWQ7XG4gICAgLy8gZWRnZVsnd2lkdGgnXSA9IGVkZ2VbJ3ZhbHVlJ10gIT0gbnVsbCA/IHVuZGVmaW5lZCA6IGVkZ2VnRWRnZS5zaXplO1xuICAgIGlmIChnRWRnZS5jb2xvciAmJiBvcHRpb25zLmVkZ2VzLmluaGVyaXRDb2xvciA9PT0gZmFsc2UpIHtcbiAgICAgIHZFZGdlLmNvbG9yID0gZ0VkZ2UuY29sb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZFZGdlO1xuICB9KTtcblxuICBjb25zdCB2Tm9kZXMgPSBnZXBoaUpTT04ubm9kZXMubWFwKChnTm9kZSk6IFZpc05vZGUgPT4ge1xuICAgIGNvbnN0IHZOb2RlOiBWaXNOb2RlID0ge1xuICAgICAgaWQ6IGdOb2RlLmlkLFxuICAgICAgZml4ZWQ6IG9wdGlvbnMubm9kZXMuZml4ZWQgJiYgZ05vZGUueCAhPSBudWxsICYmIGdOb2RlLnkgIT0gbnVsbCxcbiAgICB9O1xuXG4gICAgaWYgKGdOb2RlLmF0dHJpYnV0ZXMgIT0gbnVsbCkge1xuICAgICAgdk5vZGUuYXR0cmlidXRlcyA9IGdOb2RlLmF0dHJpYnV0ZXM7XG4gICAgfVxuICAgIGlmIChnTm9kZS5sYWJlbCAhPSBudWxsKSB7XG4gICAgICB2Tm9kZS5sYWJlbCA9IGdOb2RlLmxhYmVsO1xuICAgIH1cbiAgICBpZiAoZ05vZGUuc2l6ZSAhPSBudWxsKSB7XG4gICAgICB2Tm9kZS5zaXplID0gZ05vZGUuc2l6ZTtcbiAgICB9XG4gICAgaWYgKGdOb2RlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBnTm9kZS5hdHRyaWJ1dGVzLnRpdGxlICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLnRpdGxlID0gZ05vZGUuYXR0cmlidXRlcy50aXRsZTtcbiAgICB9XG4gICAgaWYgKGdOb2RlLnRpdGxlICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLnRpdGxlID0gZ05vZGUudGl0bGU7XG4gICAgfVxuICAgIGlmIChnTm9kZS54ICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLnggPSBnTm9kZS54O1xuICAgIH1cbiAgICBpZiAoZ05vZGUueSAhPSBudWxsKSB7XG4gICAgICB2Tm9kZS55ID0gZ05vZGUueTtcbiAgICB9XG4gICAgaWYgKGdOb2RlLmNvbG9yICE9IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLm5vZGVzLnBhcnNlQ29sb3IgPT09IHRydWUpIHtcbiAgICAgICAgdk5vZGUuY29sb3IgPSBnTm9kZS5jb2xvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZOb2RlLmNvbG9yID0ge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGdOb2RlLmNvbG9yLFxuICAgICAgICAgIGJvcmRlcjogZ05vZGUuY29sb3IsXG4gICAgICAgICAgaGlnaGxpZ2h0OiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBnTm9kZS5jb2xvcixcbiAgICAgICAgICAgIGJvcmRlcjogZ05vZGUuY29sb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBob3Zlcjoge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogZ05vZGUuY29sb3IsXG4gICAgICAgICAgICBib3JkZXI6IGdOb2RlLmNvbG9yLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZOb2RlO1xuICB9KTtcblxuICByZXR1cm4geyBub2Rlczogdk5vZGVzLCBlZGdlczogdkVkZ2VzIH07XG59XG4iLCAiZXhwb3J0IGludGVyZmFjZSBMb2NhbGUge1xuICBhZGREZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhZGRFZGdlOiBzdHJpbmc7XG4gIGFkZE5vZGU6IHN0cmluZztcbiAgYmFjazogc3RyaW5nO1xuICBjbG9zZTogc3RyaW5nO1xuICBjcmVhdGVFZGdlRXJyb3I6IHN0cmluZztcbiAgZGVsOiBzdHJpbmc7XG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogc3RyaW5nO1xuICBlZGdlRGVzY3JpcHRpb246IHN0cmluZztcbiAgZWRpdDogc3RyaW5nO1xuICBlZGl0Q2x1c3RlckVycm9yOiBzdHJpbmc7XG4gIGVkaXRFZGdlOiBzdHJpbmc7XG4gIGVkaXRFZGdlRGVzY3JpcHRpb246IHN0cmluZztcbiAgZWRpdE5vZGU6IHN0cmluZztcbn1cbmV4cG9ydCB0eXBlIExvY2FsZXMgPSBSZWNvcmQ8c3RyaW5nLCBMb2NhbGU+O1xuXG4vLyBFbmdsaXNoXG5leHBvcnQgY29uc3QgZW46IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiQ2xpY2sgaW4gYW4gZW1wdHkgc3BhY2UgdG8gcGxhY2UgYSBuZXcgbm9kZS5cIixcbiAgYWRkRWRnZTogXCJBZGQgRWRnZVwiLFxuICBhZGROb2RlOiBcIkFkZCBOb2RlXCIsXG4gIGJhY2s6IFwiQmFja1wiLFxuICBjbG9zZTogXCJDbG9zZVwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwiQ2Fubm90IGxpbmsgZWRnZXMgdG8gYSBjbHVzdGVyLlwiLFxuICBkZWw6IFwiRGVsZXRlIHNlbGVjdGVkXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBjYW5ub3QgYmUgZGVsZXRlZC5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpY2sgb24gYSBub2RlIGFuZCBkcmFnIHRoZSBlZGdlIHRvIGFub3RoZXIgbm9kZSB0byBjb25uZWN0IHRoZW0uXCIsXG4gIGVkaXQ6IFwiRWRpdFwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIkNsdXN0ZXJzIGNhbm5vdCBiZSBlZGl0ZWQuXCIsXG4gIGVkaXRFZGdlOiBcIkVkaXQgRWRnZVwiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpY2sgb24gdGhlIGNvbnRyb2wgcG9pbnRzIGFuZCBkcmFnIHRoZW0gdG8gYSBub2RlIHRvIGNvbm5lY3QgdG8gaXQuXCIsXG4gIGVkaXROb2RlOiBcIkVkaXQgTm9kZVwiLFxufTtcblxuLy8gR2VybWFuXG5leHBvcnQgY29uc3QgZGU6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246XG4gICAgXCJLbGlja2UgYXVmIGVpbmUgZnJlaWUgU3RlbGxlLCB1bSBlaW5lbiBuZXVlbiBLbm90ZW4genUgcGxhemllcmVuLlwiLFxuICBhZGRFZGdlOiBcIkthbnRlIGhpbnp1ZlxcdTAwZmNnZW5cIixcbiAgYWRkTm9kZTogXCJLbm90ZW4gaGluenVmXFx1MDBmY2dlblwiLFxuICBiYWNrOiBcIlp1clxcdTAwZmNja1wiLFxuICBjbG9zZTogXCJTY2hsaWXDn2VuXCIsXG4gIGNyZWF0ZUVkZ2VFcnJvcjpcbiAgICBcIkVzIGlzdCBuaWNodCBtXFx1MDBmNmdsaWNoLCBLYW50ZW4gbWl0IENsdXN0ZXJuIHp1IHZlcmJpbmRlbi5cIixcbiAgZGVsOiBcIkxcXHUwMGY2c2NoZSBBdXN3YWhsXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJDbHVzdGVyIGtcXHUwMGY2bm5lbiBuaWNodCBnZWxcXHUwMGY2c2NodCB3ZXJkZW4uXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIktsaWNrZSBhdWYgZWluZW4gS25vdGVuIHVuZCB6aWVoZSBkaWUgS2FudGUgenUgZWluZW0gYW5kZXJlbiBLbm90ZW4sIHVtIGRpZXNlIHp1IHZlcmJpbmRlbi5cIixcbiAgZWRpdDogXCJFZGl0aWVyZW5cIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJDbHVzdGVyIGtcXHUwMGY2bm5lbiBuaWNodCBlZGl0aWVydCB3ZXJkZW4uXCIsXG4gIGVkaXRFZGdlOiBcIkthbnRlIGVkaXRpZXJlblwiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOlxuICAgIFwiS2xpY2tlIGF1ZiBkaWUgVmVyYmluZHVuZ3NwdW5rdGUgdW5kIHppZWhlIGRpZXNlIGF1ZiBlaW5lbiBLbm90ZW4sIHVtIHNpZSB6dSB2ZXJiaW5kZW4uXCIsXG4gIGVkaXROb2RlOiBcIktub3RlbiBlZGl0aWVyZW5cIixcbn07XG5cbi8vIFNwYW5pc2hcbmV4cG9ydCBjb25zdCBlczogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjpcbiAgICBcIkhhZ2EgY2xpYyBlbiB1biBsdWdhciB2YWNcXHUwMGVkbyBwYXJhIGNvbG9jYXIgdW4gbnVldm8gbm9kby5cIixcbiAgYWRkRWRnZTogXCJBXFx1MDBmMWFkaXIgYXJpc3RhXCIsXG4gIGFkZE5vZGU6IFwiQVxcdTAwZjFhZGlyIG5vZG9cIixcbiAgYmFjazogXCJBdHJcXHUwMGUxc1wiLFxuICBjbG9zZTogXCJDZXJyYXJcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIk5vIHNlIHB1ZWRlIGNvbmVjdGFyIHVuYSBhcmlzdGEgYSB1biBncnVwby5cIixcbiAgZGVsOiBcIkVsaW1pbmFyIHNlbGVjY2lcXHUwMGYzblwiLFxuICBkZWxldGVDbHVzdGVyRXJyb3I6IFwiTm8gZXMgcG9zaWJsZSBlbGltaW5hciBncnVwb3MuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkhhZ2EgY2xpYyBlbiB1biBub2RvIHkgYXJyYXN0cmUgbGEgYXJpc3RhIGhhY2lhIG90cm8gbm9kbyBwYXJhIGNvbmVjdGFybG9zLlwiLFxuICBlZGl0OiBcIkVkaXRhclwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIk5vIGVzIHBvc2libGUgZWRpdGFyIGdydXBvcy5cIixcbiAgZWRpdEVkZ2U6IFwiRWRpdGFyIGFyaXN0YVwiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOlxuICAgIFwiSGFnYSBjbGljIGVuIHVuIHB1bnRvIGRlIGNvbnRyb2wgeSBhcnJhc3RyZWxvIGEgdW4gbm9kbyBwYXJhIGNvbmVjdGFybG8uXCIsXG4gIGVkaXROb2RlOiBcIkVkaXRhciBub2RvXCIsXG59O1xuXG4vL0l0YWxpYW5vXG5leHBvcnQgY29uc3QgaXQ6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiQ2xpY2NhIHBlciBhZ2dpdW5nZXJlIHVuIG51b3ZvIG5vZG9cIixcbiAgYWRkRWRnZTogXCJBZ2dpdW5naSB1biB2ZXJ0aWNlXCIsXG4gIGFkZE5vZGU6IFwiQWdnaXVuZ2kgdW4gbm9kb1wiLFxuICBiYWNrOiBcIkluZGlldHJvXCIsXG4gIGNsb3NlOiBcIkNoaXVkZXJlXCIsXG4gIGNyZWF0ZUVkZ2VFcnJvcjogXCJOb24gc2kgcG9zc29ubyBjb2xsZWdhcmUgdmVydGljaSBhZCB1biBjbHVzdGVyXCIsXG4gIGRlbDogXCJDYW5jZWxsYSBsYSBzZWxlemlvbmVcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIkkgY2x1c3RlciBub24gcG9zc29ubyBlc3NlcmUgY2FuY2VsbGF0aVwiLFxuICBlZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGljY2Egc3UgdW4gbm9kbyBlIHRyYXNjaW5hbG8gYWQgdW4gYWx0cm8gbm9kbyBwZXIgY29ubmV0dGVybGkuXCIsXG4gIGVkaXQ6IFwiTW9kaWZpY2FcIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJJIGNsdXN0ZXJzIG5vbiBwb3Nzb25vIGVzc2VyZSBtb2RpZmljYXRpLlwiLFxuICBlZGl0RWRnZTogXCJNb2RpZmljYSBpbCB2ZXJ0aWNlXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGljY2Egc3VpIFB1bnRpIGRpIGNvbnRyb2xsbyBlIHRyYXNjaW5hbGkgYWQgdW4gbm9kbyBwZXIgY29ubmV0dGVybGkuXCIsXG4gIGVkaXROb2RlOiBcIk1vZGlmaWNhIGlsIG5vZG9cIixcbn07XG5cbi8vIER1dGNoXG5leHBvcnQgY29uc3Qgbmw6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiS2xpayBvcCBlZW4gbGVlZyBnZWJpZWQgb20gZWVuIG5pZXV3ZSBub2RlIHRlIG1ha2VuLlwiLFxuICBhZGRFZGdlOiBcIkxpbmsgdG9ldm9lZ2VuXCIsXG4gIGFkZE5vZGU6IFwiTm9kZSB0b2V2b2VnZW5cIixcbiAgYmFjazogXCJUZXJ1Z1wiLFxuICBjbG9zZTogXCJTbHVpdGVuXCIsXG4gIGNyZWF0ZUVkZ2VFcnJvcjogXCJLYW4gZ2VlbiBsaW5rIG1ha2VuIG5hYXIgZWVuIGNsdXN0ZXIuXCIsXG4gIGRlbDogXCJTZWxlY3RpZSB2ZXJ3aWpkZXJlblwiLFxuICBkZWxldGVDbHVzdGVyRXJyb3I6IFwiQ2x1c3RlcnMga3VubmVuIG5pZXQgd29yZGVuIHZlcndpamRlcmQuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIktsaWsgb3AgZWVuIG5vZGUgZW4gc2xlZXAgZGUgbGluayBuYWFyIGVlbiBhbmRlcmUgbm9kZSBvbSB6ZSB0ZSB2ZXJiaW5kZW4uXCIsXG4gIGVkaXQ6IFwiV2lqemlnZW5cIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBrdW5uZW4gbmlldCB3b3JkZW4gYWFuZ2VwYXN0LlwiLFxuICBlZGl0RWRnZTogXCJMaW5rIHdpanppZ2VuXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJLbGlrIG9wIGRlIHZlcmJpbmRpbmdzcHVudGVuIGVuIHNsZWVwIHplIG5hYXIgZWVuIG5vZGUgb20gZGFhcm1lZSB0ZSB2ZXJiaW5kZW4uXCIsXG4gIGVkaXROb2RlOiBcIk5vZGUgd2lqemlnZW5cIixcbn07XG5cbi8vIFBvcnR1Z3Vlc2UgQnJhemlsXG5leHBvcnQgY29uc3QgcHQ6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiQ2xpcXVlIGVtIHVtIGVzcGHDp28gZW0gYnJhbmNvIHBhcmEgYWRpY2lvbmFyIHVtIG5vdm8gbsOzXCIsXG4gIGFkZEVkZ2U6IFwiQWRpY2lvbmFyIGFyZXN0YVwiLFxuICBhZGROb2RlOiBcIkFkaWNpb25hciBuw7NcIixcbiAgYmFjazogXCJWb2x0YXJcIixcbiAgY2xvc2U6IFwiRmVjaGFyXCIsXG4gIGNyZWF0ZUVkZ2VFcnJvcjogXCJOw6NvIGZvaSBwb3Nzw612ZWwgbGlua2FyIGFyZXN0YXMgYSB1bSBjbHVzdGVyLlwiLFxuICBkZWw6IFwiUmVtb3ZlciBzZWxlY2lvbmFkb1wiLFxuICBkZWxldGVDbHVzdGVyRXJyb3I6IFwiQ2x1c3RlcnMgbsOjbyBwdWRlcmFtIHNlciByZW1vdmlkb3MuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkNsaXF1ZSBlbSB1bSBuw7MgZSBhcnJhc3RlIGEgYXJlc3RhIGF0w6kgb3V0cm8gbsOzIHBhcmEgY29uZWN0w6EtbG9zXCIsXG4gIGVkaXQ6IFwiRWRpdGFyXCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwiQ2x1c3RlcnMgbsOjbyBwdWRlcmFtIHNlciBlZGl0YWRvcy5cIixcbiAgZWRpdEVkZ2U6IFwiRWRpdGFyIGFyZXN0YVwiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpcXVlIG5vcyBwb250b3MgZGUgY29udHJvbGUgZSBvcyBhcnJhc3RlIHBhcmEgdW0gbsOzIHBhcmEgY29uZWN0w6EtbG9zXCIsXG4gIGVkaXROb2RlOiBcIkVkaXRhciBuw7NcIixcbn07XG5cbi8vIFJ1c3NpYW5cbmV4cG9ydCBjb25zdCBydTogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCLQmtC70LjQutC90LjRgtC1INCyINGB0LLQvtCx0L7QtNC90L7QtSDQvNC10YHRgtC+LCDRh9GC0L7QsdGLINC00L7QsdCw0LLQuNGC0Ywg0L3QvtCy0YvQuSDRg9C30LXQuy5cIixcbiAgYWRkRWRnZTogXCLQlNC+0LHQsNCy0LjRgtGMINGA0LXQsdGA0L5cIixcbiAgYWRkTm9kZTogXCLQlNC+0LHQsNCy0LjRgtGMINGD0LfQtdC7XCIsXG4gIGJhY2s6IFwi0J3QsNC30LDQtFwiLFxuICBjbG9zZTogXCLQl9Cw0LrRgNGL0LLQsNGC0YxcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcItCd0LXQstC+0LfQvNC+0LbQvdC+INGB0L7QtdC00LjQvdC40YLRjCDRgNC10LHRgNCwINCyINC60LvQsNGB0YLQtdGALlwiLFxuICBkZWw6IFwi0KPQtNCw0LvQuNGC0Ywg0LLRi9Cx0YDQsNC90L3QvtC1XCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCLQmtC70LDRgdGC0LXRgNGLINC90LUg0LzQvtCz0YPRgiDQsdGL0YLRjCDRg9C00LDQu9C10L3Ri1wiLFxuICBlZGdlRGVzY3JpcHRpb246XG4gICAgXCLQmtC70LjQutC90LjRgtC1INC90LAg0YPQt9C10Lsg0Lgg0L/RgNC+0YLRj9C90LjRgtC1INGA0LXQsdGA0L4g0Log0LTRgNGD0LPQvtC80YMg0YPQt9C70YMsINGH0YLQvtCx0Ysg0YHQvtC10LTQuNC90LjRgtGMINC40YUuXCIsXG4gIGVkaXQ6IFwi0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YxcIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCLQmtC70LDRgdGC0LXRgNGLINC90LXQtNC+0YHRgtGD0L/QvdGLINC00LvRjyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPLlwiLFxuICBlZGl0RWRnZTogXCLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgNC10LHRgNC+XCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCLQmtC70LjQutC90LjRgtC1INC90LAg0LrQvtC90YLRgNC+0LvRjNC90YvQtSDRgtC+0YfQutC4INC4INC/0LXRgNC10YLQsNGJ0LjRgtC1INC40YUg0LIg0YPQt9C10LssINGH0YLQvtCx0Ysg0L/QvtC00LrQu9GO0YfQuNGC0YzRgdGPINC6INC90LXQvNGDLlwiLFxuICBlZGl0Tm9kZTogXCLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRg9C30LXQu1wiLFxufTtcblxuLy8gQ2hpbmVzZVxuZXhwb3J0IGNvbnN0IGNuOiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOiBcIuWNleWHu+epuueZveWkhOaUvue9ruaWsOiKgueCueOAglwiLFxuICBhZGRFZGdlOiBcIua3u+WKoOi/nuaOpee6v1wiLFxuICBhZGROb2RlOiBcIua3u+WKoOiKgueCuVwiLFxuICBiYWNrOiBcIui/lOWbnlwiLFxuICBjbG9zZTogXCLpl5zplolcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIuaXoOazleWwhui/nuaOpee6v+i/nuaOpeWIsOe+pOmbhuOAglwiLFxuICBkZWw6IFwi5Yig6Zmk6YCJ5a6aXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCLml6Dms5XliKDpmaTnvqTpm4bjgIJcIixcbiAgZWRnZURlc2NyaXB0aW9uOiBcIuWNleWHu+afkOS4quiKgueCueW5tuWwhuivpei/nuaOpee6v+aLluWKqOWIsOWPpuS4gOS4quiKgueCueS7pei/nuaOpeWug+S7rOOAglwiLFxuICBlZGl0OiBcIue8lui+kVwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIuaXoOazlee8lui+kee+pOmbhuOAglwiLFxuICBlZGl0RWRnZTogXCLnvJbovpHov57mjqXnur9cIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjogXCLljZXlh7vmjqfliLboioLngrnlubblsIblroPku6zmi5bliLDoioLngrnkuIrov57mjqXjgIJcIixcbiAgZWRpdE5vZGU6IFwi57yW6L6R6IqC54K5XCIsXG59O1xuXG4vLyBVa3JhaW5pYW5cbmV4cG9ydCBjb25zdCB1azogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJL0LvRltC60L3RltGC0Ywg0L3QsCDQstGW0LvRjNC90LUg0LzRltGB0YbQtSwg0YnQvtCxINC00L7QtNCw0YLQuCDQvdC+0LLQuNC5INCy0YPQt9C+0LsuXCIsXG4gIGFkZEVkZ2U6IFwi0JTQvtC00LDRgtC4INC60YDQsNC5XCIsXG4gIGFkZE5vZGU6IFwi0JTQvtC00LDRgtC4INCy0YPQt9C+0LtcIixcbiAgYmFjazogXCLQndCw0LfQsNC0XCIsXG4gIGNsb3NlOiBcItCX0LDQutGA0LjRgtC4XCIsXG4gIGNyZWF0ZUVkZ2VFcnJvcjogXCLQndC1INC80L7QttC70LjQstC+INC+0LEn0ZTQtNC90LDRgtC4INC60YDQsNGXINCyINCz0YDRg9C/0YMuXCIsXG4gIGRlbDogXCLQktC40LTQsNC70LjRgtC4INC+0LHRgNCw0L3QtVwiLFxuICBkZWxldGVDbHVzdGVyRXJyb3I6IFwi0JPRgNGD0L/QuCDQvdC1INC80L7QttGD0YLRjCDQsdGD0YLQuCDQstC40LTQsNC70LXQvdGWLlwiLFxuICBlZGdlRGVzY3JpcHRpb246XG4gICAgXCLQmtC70ZbQutC90ZbRgtGMINC90LAg0LLRg9C30L7QuyDRliDQv9C10YDQtdGC0Y/Qs9C90ZbRgtGMINC60YDQsNC5INC00L4g0ZbQvdGI0L7Qs9C+INCy0YPQt9C70LAsINGJ0L7QsSDRl9GFINC3J9GU0LTQvdCw0YLQuC5cIixcbiAgZWRpdDogXCLQoNC10LTQsNCz0YPQstCw0YLQuFwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcItCT0YDRg9C/0Lgg0L3QtdC00L7RgdGC0YPQv9C90ZYg0LTQu9GPINGA0LXQtNCw0LPRg9Cy0LDQvdC90Y8uXCIsXG4gIGVkaXRFZGdlOiBcItCg0LXQtNCw0LPRg9Cy0LDRgtC4INC60YDQsNC5XCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCLQmtC70ZbQutC90ZbRgtGMINC90LAg0LrQvtC90YLRgNC+0LvRjNC90ZYg0YLQvtGH0LrQuCDRliDQv9C10YDQtdGC0Y/Qs9C90ZbRgtGMINGX0YUg0YMg0LLRg9C30L7Quywg0YnQvtCxINC/0ZbQtNC60LvRjtGH0LjRgtC40YHRjyDQtNC+INC90YzQvtCz0L4uXCIsXG4gIGVkaXROb2RlOiBcItCg0LXQtNCw0LPRg9Cy0LDRgtC4INCy0YPQt9C+0LtcIixcbn07XG5cbi8vIEZyZW5jaFxuZXhwb3J0IGNvbnN0IGZyOiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOiBcIkNsaXF1ZXogZGFucyB1biBlbmRyb2l0IHZpZGUgcG91ciBwbGFjZXIgdW4gbsWTdWQuXCIsXG4gIGFkZEVkZ2U6IFwiQWpvdXRlciB1biBsaWVuXCIsXG4gIGFkZE5vZGU6IFwiQWpvdXRlciB1biBuxZN1ZFwiLFxuICBiYWNrOiBcIlJldG91clwiLFxuICBjbG9zZTogXCJGZXJtZXJcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIkltcG9zc2libGUgZGUgY3LDqWVyIHVuIGxpZW4gdmVycyB1biBjbHVzdGVyLlwiLFxuICBkZWw6IFwiRWZmYWNlciBsYSBzw6lsZWN0aW9uXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJMZXMgY2x1c3RlcnMgbmUgcGV1dmVudCBwYXMgw6p0cmUgZWZmYWPDqXMuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkNsaXF1ZXogc3VyIHVuIG7Fk3VkIGV0IGdsaXNzZXogbGUgbGllbiB2ZXJzIHVuIGF1dHJlIG7Fk3VkIHBvdXIgbGVzIGNvbm5lY3Rlci5cIixcbiAgZWRpdDogXCLDiWRpdGVyXCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwiTGVzIGNsdXN0ZXJzIG5lIHBldXZlbnQgcGFzIMOqdHJlIMOpZGl0w6lzLlwiLFxuICBlZGl0RWRnZTogXCLDiWRpdGVyIGxlIGxpZW5cIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkNsaXF1ZXogc3VyIGxlcyBwb2ludHMgZGUgY29udHLDtGxlIGV0IGdsaXNzZXotbGVzIHBvdXIgY29ubmVjdGVyIHVuIG7Fk3VkLlwiLFxuICBlZGl0Tm9kZTogXCLDiWRpdGVyIGxlIG7Fk3VkXCIsXG59O1xuXG4vLyBDemVjaFxuZXhwb3J0IGNvbnN0IGNzOiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOiBcIktsdWtudXTDrW0gZG8gcHLDoXpkbsOpaG8gcHJvc3RvcnUgbcWvxb5ldGUgcMWZaWRhdCBub3bDvSB2cmNob2wuXCIsXG4gIGFkZEVkZ2U6IFwiUMWZaWRhdCBocmFudVwiLFxuICBhZGROb2RlOiBcIlDFmWlkYXQgdnJjaG9sXCIsXG4gIGJhY2s6IFwiWnDEm3RcIixcbiAgY2xvc2U6IFwiWmF2xZnDrXRcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIk5lbHplIHDFmWlwb2ppdCBocmFudSBrZSBzaGx1a3UuXCIsXG4gIGRlbDogXCJTbWF6YXQgdsO9YsSbclwiLFxuICBkZWxldGVDbHVzdGVyRXJyb3I6IFwiTmVsemUgbWF6YXQgc2hsdWt5LlwiLFxuICBlZGdlRGVzY3JpcHRpb246XG4gICAgXCJQxZlldGHFvmVuw61tIHogamVkbm9obyB2cmNob2x1IGRvIGRydWjDqWhvIG3Fr8W+ZXRlIHNwb2ppdCB0eXRvIHZyY2hvbHkgbm92b3UgaHJhbm91LlwiLFxuICBlZGl0OiBcIlVwcmF2aXRcIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJOZWx6ZSB1cHJhdm92YXQgc2hsdWt5LlwiLFxuICBlZGl0RWRnZTogXCJVcHJhdml0IGhyYW51XCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJQxZlldGHFvmVuw61tIGtvbnRyb2xuw61obyB2cmNob2x1IGhyYW55IGppIG3Fr8W+ZXRlIHDFmWlwb2ppdCBrIGppbsOpbXUgdnJjaG9sdS5cIixcbiAgZWRpdE5vZGU6IFwiVXByYXZpdCB2cmNob2xcIixcbn07XG4iLCAiLyoqXG4gKiBBc3NvY2lhdGVzIGEgY2FudmFzIHRvIGEgZ2l2ZW4gaW1hZ2UsIGNvbnRhaW5pbmcgYSBudW1iZXIgb2YgcmVuZGVyaW5nc1xuICogb2YgdGhlIGltYWdlIGF0IHZhcmlvdXMgc2l6ZXMuXG4gKlxuICogVGhpcyB0ZWNobmlxdWUgaXMga25vd24gYXMgJ21pcG1hcHBpbmcnLlxuICpcbiAqIE5PVEU6IEltYWdlcyBjYW4gYWxzbyBiZSBvZiB0eXBlICdkYXRhOnN2Zyt4bWxgLiBUaGlzIGNvZGUgYWxzbyB3b3Jrc1xuICogICAgICAgZm9yIHN2ZywgYnV0IHRoZSBtaXBtYXBwaW5nIG1heSBub3QgYmUgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlXG4gKi9cbmNsYXNzIENhY2hlZEltYWdlIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuTlVNX0lURVJBVElPTlMgPSA0OyAvLyBOdW1iZXIgb2YgaXRlbXMgaW4gdGhlIGNvb3JkaW5hdGVzIGFycmF5XG5cbiAgICB0aGlzLmltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBpbWFnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICAgKi9cbiAgaW5pdCgpIHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCgpKSByZXR1cm47XG5cbiAgICB0aGlzLnNyYyA9IHRoaXMuaW1hZ2Uuc3JjOyAvLyBGb3Igc2FtZSBpbnRlcmZhY2Ugd2l0aCBJbWFnZVxuICAgIGNvbnN0IHcgPSB0aGlzLmltYWdlLndpZHRoO1xuICAgIGNvbnN0IGggPSB0aGlzLmltYWdlLmhlaWdodDtcblxuICAgIC8vIEVhc2UgZXh0ZXJuYWwgYWNjZXNzXG4gICAgdGhpcy53aWR0aCA9IHc7XG4gICAgdGhpcy5oZWlnaHQgPSBoO1xuXG4gICAgY29uc3QgaDIgPSBNYXRoLmZsb29yKGggLyAyKTtcbiAgICBjb25zdCBoNCA9IE1hdGguZmxvb3IoaCAvIDQpO1xuICAgIGNvbnN0IGg4ID0gTWF0aC5mbG9vcihoIC8gOCk7XG4gICAgY29uc3QgaDE2ID0gTWF0aC5mbG9vcihoIC8gMTYpO1xuXG4gICAgY29uc3QgdzIgPSBNYXRoLmZsb29yKHcgLyAyKTtcbiAgICBjb25zdCB3NCA9IE1hdGguZmxvb3IodyAvIDQpO1xuICAgIGNvbnN0IHc4ID0gTWF0aC5mbG9vcih3IC8gOCk7XG4gICAgY29uc3QgdzE2ID0gTWF0aC5mbG9vcih3IC8gMTYpO1xuXG4gICAgLy8gTWFrZSBjYW52YXMgYXMgc21hbGwgYXMgcG9zc2libGVcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IDMgKiB3NDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoMjtcblxuICAgIC8vIENvb3JkaW5hdGVzIGFuZCBzaXplcyBvZiBpbWFnZXMgY29udGFpbmVkIGluIHRoZSBjYW52YXNcbiAgICAvLyBWYWx1ZXMgcGVyIHJvdzogIFt0b3AgeCwgbGVmdCB5LCB3aWR0aCwgaGVpZ2h0XVxuXG4gICAgdGhpcy5jb29yZGluYXRlcyA9IFtcbiAgICAgIFswLCAwLCB3MiwgaDJdLFxuICAgICAgW3cyLCAwLCB3NCwgaDRdLFxuICAgICAgW3cyLCBoNCwgdzgsIGg4XSxcbiAgICAgIFs1ICogdzgsIGg0LCB3MTYsIGgxNl0sXG4gICAgXTtcblxuICAgIHRoaXMuX2ZpbGxNaXBNYXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBpbml0KCkgaGFzIGJlZW4gY2FsbGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBpbml0aWFsaXplZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb29yZGluYXRlcyAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBtYWluIGltYWdlIGluIHZhcmlvdXMgc2l6ZXMgdG8gdGhlIGNvbnRleHQuXG4gICAqXG4gICAqIFRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgaXMgdG8gcmVkdWNlIGFydGVmYWN0cyBkdWUgdG8gaW50ZXJwb2xhdGlvblxuICAgKiBhdCBkaWZmZXJpbmcgem9vbSBsZXZlbHMuXG4gICAqXG4gICAqIFNvdXJjZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTg3NjE0MDQvMTIyMzUzMVxuICAgKlxuICAgKiBUaGlzIG1ldGhvZHMgdGFrZXMgdGhlIHJlc2l6aW5nIG91dCBvZiB0aGUgZHJhd2luZyBsb29wLCBpbiBvcmRlciB0b1xuICAgKiByZWR1Y2UgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuXG4gICAqXG4gICAqIFRPRE86IFRoZSBjb2RlIGFzc3VtZXMgdGhhdCBhIDJEIGNvbnRleHQgY2FuIGFsd2F5cyBiZSBnb3R0ZW4uIFRoaXMgaXNcbiAgICogICAgICAgbm90IG5lY2Vzc2FyaWx5IHRydWUhIE9UT0gsIGlmIG5vdCB0cnVlIHRoZW4gdXNhZ2Ugb2YgdGhpcyBjbGFzc1xuICAgKiAgICAgICBpcyBzZW5zZWxlc3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmlsbE1pcE1hcCgpIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG5cbiAgICAvLyBGaXJzdCB6b29tLWxldmVsIGNvbWVzIGZyb20gdGhlIGltYWdlXG4gICAgY29uc3QgdG8gPSB0aGlzLmNvb3JkaW5hdGVzWzBdO1xuICAgIGN0eC5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgdG9bMF0sIHRvWzFdLCB0b1syXSwgdG9bM10pO1xuXG4gICAgLy8gVGhlIHJlc3QgYXJlIGNvcHkgYWN0aW9ucyBpbnRlcm5hbCB0byB0aGUgY2FudmFzL2NvbnRleHRcbiAgICBmb3IgKGxldCBpdGVyYXRpb25zID0gMTsgaXRlcmF0aW9ucyA8IHRoaXMuTlVNX0lURVJBVElPTlM7IGl0ZXJhdGlvbnMrKykge1xuICAgICAgY29uc3QgZnJvbSA9IHRoaXMuY29vcmRpbmF0ZXNbaXRlcmF0aW9ucyAtIDFdO1xuICAgICAgY29uc3QgdG8gPSB0aGlzLmNvb3JkaW5hdGVzW2l0ZXJhdGlvbnNdO1xuXG4gICAgICBjdHguZHJhd0ltYWdlKFxuICAgICAgICB0aGlzLmNhbnZhcyxcbiAgICAgICAgZnJvbVswXSxcbiAgICAgICAgZnJvbVsxXSxcbiAgICAgICAgZnJvbVsyXSxcbiAgICAgICAgZnJvbVszXSxcbiAgICAgICAgdG9bMF0sXG4gICAgICAgIHRvWzFdLFxuICAgICAgICB0b1syXSxcbiAgICAgICAgdG9bM11cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERyYXcgdGhlIGltYWdlLCB1c2luZyB0aGUgbWlwbWFwIGlmIG5lY2Vzc2FyeS5cbiAgICpcbiAgICogTWlwTWFwIGlzIG9ubHkgdXNlZCBpZiBwYXJhbSBmYWN0b3IgPiAyOyBvdGhlcndpc2UsIG9yaWdpbmFsIGJpdG1hcFxuICAgKiBpcyByZXNpemVkLiBUaGlzIGlzIGFsc28gdXNlZCB0byBza2lwIG1pcG1hcCB1c2FnZSwgZS5nLiBieSBzZXR0aW5nIGZhY3RvciA9IDFcbiAgICpcbiAgICogQ3JlZGl0cyB0byAnQWxleCBkZSBNdWxkZXInIGZvciBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAgY29udGV4dCBvbiB3aGljaCB0byBkcmF3IHpvb21lZCBpbWFnZVxuICAgKiBAcGFyYW0ge0Zsb2F0fSBmYWN0b3Igc2NhbGUgZmFjdG9yIGF0IHdoaWNoIHRvIGRyYXdcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxlZnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvcFxuICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICAgKi9cbiAgZHJhd0ltYWdlQXRQb3NpdGlvbihjdHgsIGZhY3RvciwgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKCkpIHJldHVybjsgLy9jYW4ndCBkcmF3IGltYWdlIHlldCBub3QgaW50aWFsaXplZFxuXG4gICAgaWYgKGZhY3RvciA+IDIpIHtcbiAgICAgIC8vIERldGVybWluZSB3aGljaCB6b29tZWQgaW1hZ2UgdG8gdXNlXG4gICAgICBmYWN0b3IgKj0gMC41O1xuICAgICAgbGV0IGl0ZXJhdGlvbnMgPSAwO1xuICAgICAgd2hpbGUgKGZhY3RvciA+IDIgJiYgaXRlcmF0aW9ucyA8IHRoaXMuTlVNX0lURVJBVElPTlMpIHtcbiAgICAgICAgZmFjdG9yICo9IDAuNTtcbiAgICAgICAgaXRlcmF0aW9ucyArPSAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlcmF0aW9ucyA+PSB0aGlzLk5VTV9JVEVSQVRJT05TKSB7XG4gICAgICAgIGl0ZXJhdGlvbnMgPSB0aGlzLk5VTV9JVEVSQVRJT05TIC0gMTtcbiAgICAgIH1cbiAgICAgIC8vY29uc29sZS5sb2coXCJpdGVyYXRpb25zOiBcIiArIGl0ZXJhdGlvbnMpO1xuXG4gICAgICBjb25zdCBmcm9tID0gdGhpcy5jb29yZGluYXRlc1tpdGVyYXRpb25zXTtcbiAgICAgIGN0eC5kcmF3SW1hZ2UoXG4gICAgICAgIHRoaXMuY2FudmFzLFxuICAgICAgICBmcm9tWzBdLFxuICAgICAgICBmcm9tWzFdLFxuICAgICAgICBmcm9tWzJdLFxuICAgICAgICBmcm9tWzNdLFxuICAgICAgICBsZWZ0LFxuICAgICAgICB0b3AsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERyYXcgaW1hZ2UgZGlyZWN0bHlcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FjaGVkSW1hZ2U7XG4iLCAiaW1wb3J0IENhY2hlZEltYWdlIGZyb20gXCIuL0NhY2hlZEltYWdlXCI7XG5cbi8qKlxuICogVGhpcyBjYWxsYmFjayBpcyBhIGNhbGxiYWNrIHRoYXQgYWNjZXB0cyBhbiBJbWFnZS5cbiAqXG4gKiBAY2FsbGJhY2sgSW1hZ2VDYWxsYmFja1xuICogQHBhcmFtIHtJbWFnZX0gaW1hZ2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgbG9hZHMgaW1hZ2VzIGFuZCBrZWVwcyB0aGVtIHN0b3JlZC5cbiAqXG4gKiBAcGFyYW0ge0ltYWdlQ2FsbGJhY2t9IGNhbGxiYWNrXG4gKi9cbmNsYXNzIEltYWdlcyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0ltYWdlQ2FsbGJhY2t9IGNhbGxiYWNrXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIHRoaXMuaW1hZ2VzID0ge307XG4gICAgdGhpcy5pbWFnZUJyb2tlbiA9IHt9O1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsICAgICAgICAgICAgICAgICAgICAgIFRoZSBvcmlnaW5hbCBVcmwgdGhhdCBmYWlsZWQgdG8gbG9hZCwgaWYgdGhlIGJyb2tlbiBpbWFnZSBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNhY2hlIHVzaW5nIHRoaXMgVXJsIGFzIHRoZSBrZXkgc28gdGhhdCBzdWJzZXF1ZW50IHJlcXVlc3RzIGZvciB0aGlzIFVybCB3aWxsIHJldHVybiB0aGUgYnJva2VuIGltYWdlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBicm9rZW5VcmwgICAgICAgICAgICAgICAgVXJsIHRoZSBicm9rZW4gaW1hZ2UgdG8gdHJ5IGFuZCBsb2FkXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlVG9Mb2FkQnJva2VuVXJsT24gICBUaGUgaW1hZ2Ugb2JqZWN0XG4gICAqL1xuICBfdHJ5bG9hZEJyb2tlblVybCh1cmwsIGJyb2tlblVybCwgaW1hZ2VUb0xvYWRCcm9rZW5VcmxPbikge1xuICAgIC8vSWYgdGhlc2UgcGFyYW1ldGVycyBhcmVuJ3Qgc3BlY2lmaWVkIHRoZW4gZXhpdCB0aGUgZnVuY3Rpb24gYmVjYXVzZSBub3RoaW5nIGNvbnN0cnVjdGl2ZSBjYW4gYmUgZG9uZVxuICAgIGlmICh1cmwgPT09IHVuZGVmaW5lZCB8fCBpbWFnZVRvTG9hZEJyb2tlblVybE9uID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBpZiAoYnJva2VuVXJsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIk5vIGJyb2tlbiB1cmwgaW1hZ2UgZGVmaW5lZFwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL0NsZWFyIHRoZSBvbGQgc3Vic2NyaXB0aW9uIHRvIHRoZSBlcnJvciBldmVudCBhbmQgcHV0IGEgbmV3IGluIHBsYWNlIHRoYXQgb25seSBoYW5kbGUgZXJyb3JzIGluIGxvYWRpbmcgdGhlIGJyb2tlbkltYWdlVXJsXG4gICAgaW1hZ2VUb0xvYWRCcm9rZW5VcmxPbi5pbWFnZS5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIGJyb2tlbkltYWdlOlwiLCBicm9rZW5VcmwpO1xuICAgICAgLy8gY2FjaGUgaXRlbSB3aWxsIGNvbnRhaW4gZW1wdHkgaW1hZ2UsIHRoaXMgc2hvdWxkIGJlIE9LIGZvciBkZWZhdWx0XG4gICAgfTtcblxuICAgIC8vU2V0IHRoZSBzb3VyY2Ugb2YgdGhlIGltYWdlIHRvIHRoZSBicm9rZW5VcmwsIHRoaXMgaXMgYWN0dWFsbHkgd2hhdCBraWNrcyBvZmYgdGhlIGxvYWRpbmcgb2YgdGhlIGJyb2tlbiBpbWFnZVxuICAgIGltYWdlVG9Mb2FkQnJva2VuVXJsT24uaW1hZ2Uuc3JjID0gYnJva2VuVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkltYWdlfSBpbWFnZVRvUmVkcmF3V2l0aFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlZHJhd1dpdGhJbWFnZShpbWFnZVRvUmVkcmF3V2l0aCkge1xuICAgIGlmICh0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrKGltYWdlVG9SZWRyYXdXaXRoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAgICAgICAgICBVcmwgb2YgdGhlIGltYWdlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBicm9rZW5VcmwgICAgVXJsIG9mIGFuIGltYWdlIHRvIHVzZSBpZiB0aGUgdXJsIGltYWdlIGlzIG5vdCBmb3VuZFxuICAgKiBAcmV0dXJucyB7SW1hZ2V9IGltZyAgICAgICAgICBUaGUgaW1hZ2Ugb2JqZWN0XG4gICAqL1xuICBsb2FkKHVybCwgYnJva2VuVXJsKSB7XG4gICAgLy9UcnkgYW5kIGdldCB0aGUgaW1hZ2UgZnJvbSB0aGUgY2FjaGUsIGlmIHN1Y2Nlc3NmdWwgdGhlbiByZXR1cm4gdGhlIGNhY2hlZCBpbWFnZVxuICAgIGNvbnN0IGNhY2hlZEltYWdlID0gdGhpcy5pbWFnZXNbdXJsXTtcbiAgICBpZiAoY2FjaGVkSW1hZ2UpIHJldHVybiBjYWNoZWRJbWFnZTtcblxuICAgIC8vQ3JlYXRlIGEgbmV3IGltYWdlXG4gICAgY29uc3QgaW1nID0gbmV3IENhY2hlZEltYWdlKCk7XG5cbiAgICAvLyBOZWVkIHRvIGFkZCB0byBjYWNoZSBoZXJlLCBvdGhlcndpc2UgZmluYWwgcmV0dXJuIHdpbGwgc3Bhd24gZGlmZmVyZW50IGNvcGllcyBvZiB0aGUgc2FtZSBpbWFnZSxcbiAgICAvLyBBbHNvLCB0aGVyZSB3aWxsIGJlIG11bHRpcGxlIGxvYWRzIG9mIHRoZSBzYW1lIGltYWdlLlxuICAgIHRoaXMuaW1hZ2VzW3VybF0gPSBpbWc7XG5cbiAgICAvL1N1YnNjcmliZSB0byB0aGUgZXZlbnQgdGhhdCBpcyByYWlzZWQgaWYgdGhlIGltYWdlIGxvYWRzIHN1Y2Nlc3NmdWxseVxuICAgIGltZy5pbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAvLyBQcm9wZXJseSBpbml0IHRoZSBjYWNoZWQgaXRlbSBhbmQgdGhlbiByZXF1ZXN0IGEgcmVkcmF3XG4gICAgICB0aGlzLl9maXhJbWFnZUNvb3JkaW5hdGVzKGltZy5pbWFnZSk7XG4gICAgICBpbWcuaW5pdCgpO1xuICAgICAgdGhpcy5fcmVkcmF3V2l0aEltYWdlKGltZyk7XG4gICAgfTtcblxuICAgIC8vU3Vic2NyaWJlIHRvIHRoZSBldmVudCB0aGF0IGlzIHJhaXNlZCBpZiB0aGUgaW1hZ2UgZmFpbHMgdG8gbG9hZFxuICAgIGltZy5pbWFnZS5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIGltYWdlOlwiLCB1cmwpO1xuICAgICAgLy9UcnkgYW5kIGxvYWQgdGhlIGltYWdlIHNwZWNpZmllZCBieSB0aGUgYnJva2VuVXJsIHVzaW5nXG4gICAgICB0aGlzLl90cnlsb2FkQnJva2VuVXJsKHVybCwgYnJva2VuVXJsLCBpbWcpO1xuICAgIH07XG5cbiAgICAvL1NldCB0aGUgc291cmNlIG9mIHRoZSBpbWFnZSB0byB0aGUgdXJsLCB0aGlzIGlzIHdoYXQgYWN0dWFsbHkga2lja3Mgb2ZmIHRoZSBsb2FkaW5nIG9mIHRoZSBpbWFnZVxuICAgIGltZy5pbWFnZS5zcmMgPSB1cmw7XG5cbiAgICAvL1JldHVybiB0aGUgbmV3IGltYWdlXG4gICAgcmV0dXJuIGltZztcbiAgfVxuXG4gIC8qKlxuICAgKiBJRTExIGZpeCAtLSB0aGFua3MgZHBvbmNoIVxuICAgKlxuICAgKiBMb2NhbCBoZWxwZXIgZnVuY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHt2aXMuSW1hZ2V9IGltYWdlVG9DYWNoZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpeEltYWdlQ29vcmRpbmF0ZXMoaW1hZ2VUb0NhY2hlKSB7XG4gICAgaWYgKGltYWdlVG9DYWNoZS53aWR0aCA9PT0gMCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbWFnZVRvQ2FjaGUpO1xuICAgICAgaW1hZ2VUb0NhY2hlLndpZHRoID0gaW1hZ2VUb0NhY2hlLm9mZnNldFdpZHRoO1xuICAgICAgaW1hZ2VUb0NhY2hlLmhlaWdodCA9IGltYWdlVG9DYWNoZS5vZmZzZXRIZWlnaHQ7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGltYWdlVG9DYWNoZSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlcztcbiIsICIndXNlIHN0cmljdCc7XG4vLyBGRjI2LSBidWc6IEFycmF5QnVmZmVycyBhcmUgbm9uLWV4dGVuc2libGUsIGJ1dCBPYmplY3QuaXNFeHRlbnNpYmxlIGRvZXMgbm90IHJlcG9ydCBpdFxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyID09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKGJ1ZmZlcikpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidWZmZXIsICdhJywgeyB2YWx1ZTogOCB9KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRpc0V4dGVuc2libGUoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmlzRXh0ZW5zaWJsZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5pc2V4dGVuc2libGVcbm1vZHVsZS5leHBvcnRzID0gKEZBSUxTX09OX1BSSU1JVElWRVMgfHwgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFKSA/IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFICYmIGNsYXNzb2YoaXQpID09PSAnQXJyYXlCdWZmZXInKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlO1xufSA6ICRpc0V4dGVuc2libGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1wcmV2ZW50ZXh0ZW5zaW9ucyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBpc0V4dGVuc2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcblxudmFyIFJFUVVJUkVEID0gZmFsc2U7XG52YXIgTUVUQURBVEEgPSB1aWQoJ21ldGEnKTtcbnZhciBpZCA9IDA7XG5cbnZhciBzZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBkZWZpbmVQcm9wZXJ0eShpdCwgTUVUQURBVEEsIHsgdmFsdWU6IHtcbiAgICBvYmplY3RJRDogJ08nICsgaWQrKywgLy8gb2JqZWN0IElEXG4gICAgd2Vha0RhdGE6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xuXG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBhIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLm9iamVjdElEO1xufTtcblxudmFyIGdldFdlYWtEYXRhID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiB0aGUgc3RvcmUgb2Ygd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLndlYWtEYXRhO1xufTtcblxuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaSU5HICYmIFJFUVVJUkVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhc093bihpdCwgTUVUQURBVEEpKSBzZXRNZXRhZGF0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cbnZhciBlbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gIG1ldGEuZW5hYmxlID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuICBSRVFVSVJFRCA9IHRydWU7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mO1xuICB2YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdGVzdFtNRVRBREFUQV0gPSAxO1xuXG4gIC8vIHByZXZlbnQgZXhwb3Npbmcgb2YgbWV0YWRhdGEga2V5XG4gIGlmIChnZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QpLmxlbmd0aCkge1xuICAgIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocmVzdWx0W2ldID09PSBNRVRBREFUQSkge1xuICAgICAgICAgIHNwbGljZShyZXN1bHQsIGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlLmZcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5hYmxlOiBlbmFibGUsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWtEYXRhOiBnZXRXZWFrRGF0YSxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5oaWRkZW5LZXlzW01FVEFEQVRBXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBSZXN1bHRQcm90b3R5cGUgPSBSZXN1bHQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgdW5ib3VuZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoYXQ7XG4gIHZhciBBU19FTlRSSUVTID0gISEob3B0aW9ucyAmJiBvcHRpb25zLkFTX0VOVFJJRVMpO1xuICB2YXIgSVNfUkVDT1JEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX1JFQ09SRCk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0KTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBjb25kaXRpb24pO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfUkVDT1JEKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZS5pdGVyYXRvcjtcbiAgfSBlbHNlIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICghaXRlckZuKSB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhpdGVyYWJsZSkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlcmFibGUpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBjYWxsRm4oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlLCBpdGVyRm4pO1xuICB9XG5cbiAgbmV4dCA9IElTX1JFQ09SRCA/IGl0ZXJhYmxlLm5leHQgOiBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSwgd3JhcHBlciwgY29tbW9uKSB7XG4gIHZhciBJU19NQVAgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ01hcCcpICE9PSAtMTtcbiAgdmFyIElTX1dFQUsgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ1dlYWsnKSAhPT0gLTE7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl9OQU1FXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgdmFyIGV4cG9ydGVkID0ge307XG4gIHZhciBDb25zdHJ1Y3RvcjtcblxuICBpZiAoIURFU0NSSVBUT1JTIHx8ICFpc0NhbGxhYmxlKE5hdGl2ZUNvbnN0cnVjdG9yKVxuICAgIHx8ICEoSVNfV0VBSyB8fCBOYXRpdmVQcm90b3R5cGUuZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKS5lbnRyaWVzKCkubmV4dCgpOyB9KSlcbiAgKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDb25zdHJ1Y3RvciA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB9IGVsc2Uge1xuICAgIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZShhbkluc3RhbmNlKHRhcmdldCwgUHJvdG90eXBlKSwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBjb2xsZWN0aW9uOiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGFyZ2V0W0FEREVSXSwgeyB0aGF0OiB0YXJnZXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICBmb3JFYWNoKFsnYWRkJywgJ2NsZWFyJywgJ2RlbGV0ZScsICdmb3JFYWNoJywgJ2dldCcsICdoYXMnLCAnc2V0JywgJ2tleXMnLCAndmFsdWVzJywgJ2VudHJpZXMnXSwgZnVuY3Rpb24gKEtFWSkge1xuICAgICAgdmFyIElTX0FEREVSID0gS0VZID09PSAnYWRkJyB8fCBLRVkgPT09ICdzZXQnO1xuICAgICAgaWYgKEtFWSBpbiBOYXRpdmVQcm90b3R5cGUgJiYgIShJU19XRUFLICYmIEtFWSA9PT0gJ2NsZWFyJykpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFByb3RvdHlwZSwgS0VZLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5jb2xsZWN0aW9uO1xuICAgICAgICAgIGlmICghSVNfQURERVIgJiYgSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkpIHJldHVybiBLRVkgPT09ICdnZXQnID8gdW5kZWZpbmVkIDogZmFsc2U7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGNvbGxlY3Rpb25bS0VZXShhID09PSAwID8gMCA6IGEsIGIpO1xuICAgICAgICAgIHJldHVybiBJU19BRERFUiA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgSVNfV0VBSyB8fCBkZWZpbmVQcm9wZXJ0eShQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb24uc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgZXhwb3J0ZWRbQ09OU1RSVUNUT1JfTkFNRV0gPSBDb25zdHJ1Y3RvcjtcbiAgJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIGV4cG9ydGVkKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5zYWZlICYmIHRhcmdldFtrZXldKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICB9IHJldHVybiB0YXJnZXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5mYXN0S2V5O1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGluZGV4OiBjcmVhdGUobnVsbCksXG4gICAgICAgIGZpcnN0OiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgc2l6ZTogMFxuICAgICAgfSk7XG4gICAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGF0LnNpemUgPSAwO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICB2YXIgZGVmaW5lID0gZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgdmFyIHByZXZpb3VzLCBpbmRleDtcbiAgICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sYXN0ID0gZW50cnkgPSB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91czogcHJldmlvdXMgPSBzdGF0ZS5sYXN0LFxuICAgICAgICAgIG5leHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXN0YXRlLmZpcnN0KSBzdGF0ZS5maXJzdCA9IGVudHJ5O1xuICAgICAgICBpZiAocHJldmlvdXMpIHByZXZpb3VzLm5leHQgPSBlbnRyeTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplKys7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplKys7XG4gICAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09ICdGJykgc3RhdGUuaW5kZXhbaW5kZXhdID0gZW50cnk7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgLy8gZmFzdCBjYXNlXG4gICAgICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gICAgICB2YXIgZW50cnk7XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHN0YXRlLmluZGV4W2luZGV4XTtcbiAgICAgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICAgICAgZm9yIChlbnRyeSA9IHN0YXRlLmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uZXh0KSB7XG4gICAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmNsZWFyKClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5jbGVhclxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmNsZWFyXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGRhdGEgPSBzdGF0ZS5pbmRleDtcbiAgICAgICAgdmFyIGVudHJ5ID0gc3RhdGUuZmlyc3Q7XG4gICAgICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wcmV2aW91cykgZW50cnkucHJldmlvdXMgPSBlbnRyeS5wcmV2aW91cy5uZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmlyc3QgPSBzdGF0ZS5sYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUgPSAwO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5kZWxldGVcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uZXh0O1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgICAgZGVsZXRlIHN0YXRlLmluZGV4W2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uZXh0ID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wcmV2aW91cyA9IHByZXY7XG4gICAgICAgICAgaWYgKHN0YXRlLmZpcnN0ID09PSBlbnRyeSkgc3RhdGUuZmlyc3QgPSBuZXh0O1xuICAgICAgICAgIGlmIChzdGF0ZS5sYXN0ID09PSBlbnRyeSkgc3RhdGUubGFzdCA9IHByZXY7XG4gICAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplLS07XG4gICAgICAgICAgZWxzZSB0aGF0LnNpemUtLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5maXJzdCkge1xuICAgICAgICAgIGJvdW5kRnVuY3Rpb24oZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuaGFzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuaGFzXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmdldFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52YWx1ZTtcbiAgICAgIH0sXG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IDoge1xuICAgICAgLy8gYFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKSB7XG4gICAgdmFyIElURVJBVE9SX05BTUUgPSBDT05TVFJVQ1RPUl9OQU1FICsgJyBJdGVyYXRvcic7XG4gICAgdmFyIGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICB2YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihJVEVSQVRPUl9OQU1FKTtcbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS57IGtleXMsIHZhbHVlcywgZW50cmllcywgQEBpdGVyYXRvciB9KClgIG1ldGhvZHNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIGRlZmluZUl0ZXJhdG9yKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgICB0eXBlOiBJVEVSQVRPUl9OQU1FLFxuICAgICAgICB0YXJnZXQ6IGl0ZXJhdGVkLFxuICAgICAgICBzdGF0ZTogZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUoaXRlcmF0ZWQpLFxuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmxhc3Q7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghc3RhdGUudGFyZ2V0IHx8ICEoc3RhdGUubGFzdCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuc3RhdGUuZmlyc3QpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09PSAna2V5cycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LmtleSwgZmFsc2UpO1xuICAgICAgaWYgKGtpbmQgPT09ICd2YWx1ZXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS52YWx1ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2VudHJ5LmtleSwgZW50cnkudmFsdWVdLCBmYWxzZSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGVbQEBzcGVjaWVzXWAgYWNjZXNzb3JzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtbWFwLUBAc3BlY2llc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXNldC1AQHNwZWNpZXNcbiAgICBzZXRTcGVjaWVzKENPTlNUUlVDVE9SX05BTUUpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uU3Ryb25nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIGBNYXBgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC1vYmplY3RzXG5jb2xsZWN0aW9uKCdNYXAnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIGNvbGxlY3Rpb25TdHJvbmcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubWFwJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5NYXA7XG4iLCAiLyoqXG4gKiBUaGlzIGNsYXNzIGNhbiBzdG9yZSBncm91cHMgYW5kIG9wdGlvbnMgc3BlY2lmaWMgZm9yIGdyb3Vwcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdyb3VwcyB7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5fZGVmYXVsdEluZGV4ID0gMDtcbiAgICB0aGlzLl9ncm91cEluZGV4ID0gMDtcblxuICAgIHRoaXMuX2RlZmF1bHRHcm91cHMgPSBbXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjMkI3Q0U5XCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzk3QzJGQ1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiMyQjdDRTlcIiwgYmFja2dyb3VuZDogXCIjRDJFNUZGXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiMyQjdDRTlcIiwgYmFja2dyb3VuZDogXCIjRDJFNUZGXCIgfSxcbiAgICAgIH0sIC8vIDA6IGJsdWVcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNGRkE1MDBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkZGRjAwXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0ZGQTUwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRkZGQTNcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0ZGQTUwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRkZGQTNcIiB9LFxuICAgICAgfSwgLy8gMTogeWVsbG93XG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjRkEwQTEwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0ZCN0U4MVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNGQTBBMTBcIiwgYmFja2dyb3VuZDogXCIjRkZBRkIxXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNGQTBBMTBcIiwgYmFja2dyb3VuZDogXCIjRkZBRkIxXCIgfSxcbiAgICAgIH0sIC8vIDI6IHJlZFxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzQxQTkwNlwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM3QkUxNDFcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjNDFBOTA2XCIsIGJhY2tncm91bmQ6IFwiI0ExRUM3NlwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjNDFBOTA2XCIsIGJhY2tncm91bmQ6IFwiI0ExRUM3NlwiIH0sXG4gICAgICB9LCAvLyAzOiBncmVlblxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0UxMjlGMFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNFQjdERjRcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRTEyOUYwXCIsIGJhY2tncm91bmQ6IFwiI0YwQjNGNVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRTEyOUYwXCIsIGJhY2tncm91bmQ6IFwiI0YwQjNGNVwiIH0sXG4gICAgICB9LCAvLyA0OiBtYWdlbnRhXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjN0MyOUYwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0FEODVFNFwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiM3QzI5RjBcIiwgYmFja2dyb3VuZDogXCIjRDNCREYwXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiM3QzI5RjBcIiwgYmFja2dyb3VuZDogXCIjRDNCREYwXCIgfSxcbiAgICAgIH0sIC8vIDU6IHB1cnBsZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0MzN0YwMFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRkE4MDdcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjQzM3RjAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGQ0E2NlwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjQzM3RjAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGQ0E2NlwiIH0sXG4gICAgICB9LCAvLyA2OiBvcmFuZ2VcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiM0MjIwRkJcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjNkU2RUZEXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiIzQyMjBGQlwiLCBiYWNrZ3JvdW5kOiBcIiM5QjlCRkRcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiIzQyMjBGQlwiLCBiYWNrZ3JvdW5kOiBcIiM5QjlCRkRcIiB9LFxuICAgICAgfSwgLy8gNzogZGFya2JsdWVcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNGRDVBNzdcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkZDMENCXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0ZENUE3N1wiLCBiYWNrZ3JvdW5kOiBcIiNGRkQxRDlcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0ZENUE3N1wiLCBiYWNrZ3JvdW5kOiBcIiNGRkQxRDlcIiB9LFxuICAgICAgfSwgLy8gODogcGlua1xuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzRBRDYzQVwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNDMkZBQkNcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjNEFENjNBXCIsIGJhY2tncm91bmQ6IFwiI0U2RkZFM1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjNEFENjNBXCIsIGJhY2tncm91bmQ6IFwiI0U2RkZFM1wiIH0sXG4gICAgICB9LCAvLyA5OiBtaW50XG5cbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiM5OTAwMDBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRUUwMDAwXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0JCMDAwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjMzMzNcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0JCMDAwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjMzMzNcIiB9LFxuICAgICAgfSwgLy8gMTA6YnJpZ2h0IHJlZFxuXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjRkY2MDAwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0ZGNjAwMFwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNGRjYwMDBcIiwgYmFja2dyb3VuZDogXCIjRkY2MDAwXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNGRjYwMDBcIiwgYmFja2dyb3VuZDogXCIjRkY2MDAwXCIgfSxcbiAgICAgIH0sIC8vIDEyOiByZWFsIG9yYW5nZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzk3QzJGQ1wiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiMyQjdDRTlcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRDJFNUZGXCIsIGJhY2tncm91bmQ6IFwiIzJCN0NFOVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRDJFNUZGXCIsIGJhY2tncm91bmQ6IFwiIzJCN0NFOVwiIH0sXG4gICAgICB9LCAvLyAxMzogYmx1ZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzM5OTYwNVwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiMyNTVDMDNcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjMzk5NjA1XCIsIGJhY2tncm91bmQ6IFwiIzI1NUMwM1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjMzk5NjA1XCIsIGJhY2tncm91bmQ6IFwiIzI1NUMwM1wiIH0sXG4gICAgICB9LCAvLyAxNDogZ3JlZW5cbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNCNzAwNTRcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkYwMDdFXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0I3MDA1NFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjAwN0VcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0I3MDA1NFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjAwN0VcIiB9LFxuICAgICAgfSwgLy8gMTU6IG1hZ2VudGFcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNBRDg1RTRcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjN0MyOUYwXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0QzQkRGMFwiLCBiYWNrZ3JvdW5kOiBcIiM3QzI5RjBcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0QzQkRGMFwiLCBiYWNrZ3JvdW5kOiBcIiM3QzI5RjBcIiB9LFxuICAgICAgfSwgLy8gMTY6IHB1cnBsZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzQ1NTdGQVwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiMwMDBFQTFcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjNkU2RUZEXCIsIGJhY2tncm91bmQ6IFwiIzAwMEVBMVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjNkU2RUZEXCIsIGJhY2tncm91bmQ6IFwiIzAwMEVBMVwiIH0sXG4gICAgICB9LCAvLyAxNzogZGFya2JsdWVcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNGRkMwQ0JcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkQ1QTc3XCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0ZGRDFEOVwiLCBiYWNrZ3JvdW5kOiBcIiNGRDVBNzdcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0ZGRDFEOVwiLCBiYWNrZ3JvdW5kOiBcIiNGRDVBNzdcIiB9LFxuICAgICAgfSwgLy8gMTg6IHBpbmtcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNDMkZBQkNcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjNzRENjZBXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0U2RkZFM1wiLCBiYWNrZ3JvdW5kOiBcIiM3NEQ2NkFcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0U2RkZFM1wiLCBiYWNrZ3JvdW5kOiBcIiM3NEQ2NkFcIiB9LFxuICAgICAgfSwgLy8gMTk6IG1pbnRcblxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0VFMDAwMFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM5OTAwMDBcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRkYzMzMzXCIsIGJhY2tncm91bmQ6IFwiI0JCMDAwMFwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRkYzMzMzXCIsIGJhY2tncm91bmQ6IFwiI0JCMDAwMFwiIH0sXG4gICAgICB9LCAvLyAyMDpicmlnaHQgcmVkXG4gICAgXTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICB1c2VEZWZhdWx0R3JvdXBzOiB0cnVlLFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvcHRpb25GaWVsZHMgPSBbXCJ1c2VEZWZhdWx0R3JvdXBzXCJdO1xuXG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBncm91cE5hbWUgaW4gb3B0aW9ucykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsIGdyb3VwTmFtZSkpIHtcbiAgICAgICAgICBpZiAob3B0aW9uRmllbGRzLmluZGV4T2YoZ3JvdXBOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uc1tncm91cE5hbWVdO1xuICAgICAgICAgICAgdGhpcy5hZGQoZ3JvdXBOYW1lLCBncm91cCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBncm91cHNcbiAgICovXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuX2dyb3VwcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9ncm91cE5hbWVzID0gW107XG4gIH1cblxuICAvKipcbiAgICogR2V0IGdyb3VwIG9wdGlvbnMgb2YgYSBncm91cG5hbWUuXG4gICAqIElmIGdyb3VwbmFtZSBpcyBub3QgZm91bmQsIGEgbmV3IGdyb3VwIG1heSBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0geyp9ICAgICAgIGdyb3VwbmFtZSAgICAgQ2FuIGJlIGEgbnVtYmVyLCBzdHJpbmcsIERhdGUsIGV0Yy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc2hvdWxkQ3JlYXRlPXRydWVdIElmIHRydWUsIGNyZWF0ZSBhIG5ldyBncm91cFxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgZm91bmQgb3IgY3JlYXRlZCBncm91cFxuICAgKi9cbiAgZ2V0KGdyb3VwbmFtZSwgc2hvdWxkQ3JlYXRlID0gdHJ1ZSkge1xuICAgIGxldCBncm91cCA9IHRoaXMuX2dyb3Vwcy5nZXQoZ3JvdXBuYW1lKTtcblxuICAgIGlmIChncm91cCA9PT0gdW5kZWZpbmVkICYmIHNob3VsZENyZWF0ZSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm9wdGlvbnMudXNlRGVmYXVsdEdyb3VwcyA9PT0gZmFsc2UgJiZcbiAgICAgICAgdGhpcy5fZ3JvdXBOYW1lcy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgLy8gY3JlYXRlIG5ldyBncm91cFxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2dyb3VwSW5kZXggJSB0aGlzLl9ncm91cE5hbWVzLmxlbmd0aDtcbiAgICAgICAgKyt0aGlzLl9ncm91cEluZGV4O1xuICAgICAgICBncm91cCA9IHt9O1xuICAgICAgICBncm91cC5jb2xvciA9IHRoaXMuX2dyb3Vwcy5nZXQodGhpcy5fZ3JvdXBOYW1lc1tpbmRleF0pO1xuICAgICAgICB0aGlzLl9ncm91cHMuc2V0KGdyb3VwbmFtZSwgZ3JvdXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIG5ldyBncm91cFxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2RlZmF1bHRJbmRleCAlIHRoaXMuX2RlZmF1bHRHcm91cHMubGVuZ3RoO1xuICAgICAgICB0aGlzLl9kZWZhdWx0SW5kZXgrKztcbiAgICAgICAgZ3JvdXAgPSB7fTtcbiAgICAgICAgZ3JvdXAuY29sb3IgPSB0aGlzLl9kZWZhdWx0R3JvdXBzW2luZGV4XTtcbiAgICAgICAgdGhpcy5fZ3JvdXBzLnNldChncm91cG5hbWUsIGdyb3VwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGN1c3RvbSBncm91cCBzdHlsZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBncm91cCwgYSBuZXcgZ3JvdXAgd2lsbCBiZVxuICAgKiBjcmVhdGVkIGlmIGEgZ3JvdXAgd2l0aCB0aGUgc2FtZSBuYW1lIGRvZXNuJ3QgZXhpc3QsIG90aGVyd2lzZSB0aGUgb2xkXG4gICAqIGdyb3VwcyBzdHlsZSB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGUgLSBBbiBvYmplY3QgY29udGFpbmluZyBib3JkZXJDb2xvciwgYmFja2dyb3VuZENvbG9yLFxuICAgKiBldGMuXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBjcmVhdGVkIGdyb3VwIG9iamVjdC5cbiAgICovXG4gIGFkZChncm91cE5hbWUsIHN0eWxlKSB7XG4gICAgLy8gT25seSBwdXNoIGdyb3VwIG5hbWUgb25jZSB0byBwcmV2ZW50IGR1cGxpY2F0ZXMgd2hpY2ggd291bGQgY29uc3VtZSBtb3JlXG4gICAgLy8gUkFNIGFuZCBhbHNvIHNrZXcgdGhlIGRpc3RyaWJ1dGlvbiB0b3dhcmRzIG1vcmUgb2Z0ZW4gdXBkYXRlZCBncm91cHMsXG4gICAgLy8gbmVpdGhlciBvZiB3aGljaCBpcyBkZXNpcmFibGUuXG4gICAgaWYgKCF0aGlzLl9ncm91cHMuaGFzKGdyb3VwTmFtZSkpIHtcbiAgICAgIHRoaXMuX2dyb3VwTmFtZXMucHVzaChncm91cE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLl9ncm91cHMuc2V0KGdyb3VwTmFtZSwgc3R5bGUpO1xuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBgTnVtYmVyLmlzTmFOYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLmlzbmFuXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIHJldHVybiBudW1iZXIgIT09IG51bWJlcjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5udW1iZXIuaXMtbmFuJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5OdW1iZXIuaXNOYU47XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGdsb2JhbElzRmluaXRlID0gZ2xvYmFsLmlzRmluaXRlO1xuXG4vLyBgTnVtYmVyLmlzRmluaXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLmlzZmluaXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbnVtYmVyLWlzZmluaXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzRmluaXRlIHx8IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgZ2xvYmFsSXNGaW5pdGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBudW1iZXJJc0Zpbml0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9udW1iZXItaXMtZmluaXRlJyk7XG5cbi8vIGBOdW1iZXIuaXNGaW5pdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNmaW5pdGVcbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHsgaXNGaW5pdGU6IG51bWJlcklzRmluaXRlIH0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubnVtYmVyLmlzLWZpbml0ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguTnVtYmVyLmlzRmluaXRlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLnNvbWU7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29tZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfSwge1xuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb21lJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5Jykuc29tZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb21lJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvbWU7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNvbWUpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc29tZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xufTtcblxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSkgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIga2V5LCBkZXNjcmlwdG9yO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSA9IGtleXNbaW5kZXgrK10pO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyAhPT0gZGVmaW5lUHJvcGVydGllcywgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydGllczogZGVmaW5lUHJvcGVydGllc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydGllcyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhULCBEKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhULCBEKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydGllcy5zaGFtKSBkZWZpbmVQcm9wZXJ0aWVzLnNoYW0gPSB0cnVlO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTsiLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciAkcGFyc2VGbG9hdCA9IGdsb2JhbC5wYXJzZUZsb2F0O1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgSVRFUkFUT1IgPSBTeW1ib2wgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZPUkNFRCA9IDEgLyAkcGFyc2VGbG9hdCh3aGl0ZXNwYWNlcyArICctMCcpICE9PSAtSW5maW5pdHlcbiAgLy8gTVMgRWRnZSAxOC0gYnJva2VuIHdpdGggYm94ZWQgc3ltYm9sc1xuICB8fCAoSVRFUkFUT1IgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHsgJHBhcnNlRmxvYXQoT2JqZWN0KElURVJBVE9SKSk7IH0pKTtcblxuLy8gYHBhcnNlRmxvYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wYXJzZWZsb2F0LXN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBGT1JDRUQgPyBmdW5jdGlvbiBwYXJzZUZsb2F0KHN0cmluZykge1xuICB2YXIgdHJpbW1lZFN0cmluZyA9IHRyaW0odG9TdHJpbmcoc3RyaW5nKSk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdCh0cmltbWVkU3RyaW5nKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gMCAmJiBjaGFyQXQodHJpbW1lZFN0cmluZywgMCkgPT09ICctJyA/IC0wIDogcmVzdWx0O1xufSA6ICRwYXJzZUZsb2F0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1wYXJzZS1mbG9hdCcpO1xuXG4vLyBgcGFyc2VGbG9hdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlZmxvYXQtc3RyaW5nXG4kKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHBhcnNlRmxvYXQgIT09ICRwYXJzZUZsb2F0IH0sIHtcbiAgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucGFyc2UtZmxvYXQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLnBhcnNlRmxvYXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJykuZjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuICFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcygxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktbmFtZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiaW1wb3J0IHsgdG9wTW9zdCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBjb21wb25lbnRzXG4gKi9cblxuLyoqXG4gKiBEZXRlcm1pbmUgdmFsdWVzIHRvIHVzZSBmb3IgKHN1YilvcHRpb25zIG9mICdjaG9zZW4nLlxuICpcbiAqIFRoaXMgb3B0aW9uIGlzIGVpdGhlciBhIGJvb2xlYW4gb3IgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBzaG91bGQgYmUgZXhhbWluZWQgZnVydGhlci5cbiAqIFRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFyZTpcbiAqXG4gKiAtIGNob3NlbjogPGJvb2xlYW4gdmFsdWU+XG4gKiAtIGNob3NlbjogeyBzdWJPcHRpb246IDxib29sZWFuIG9yIGZ1bmN0aW9uPiB9XG4gKlxuICogV2hlcmUgc3ViT3B0aW9uIGlzICdub2RlJywgJ2VkZ2UnIG9yICdsYWJlbCcuXG4gKlxuICogVGhlIGludGVudGlvbiBvZiB0aGlzIG1ldGhvZCBhcHBlYXJzIHRvIGJlIHRvIHNldCBhIHNwZWNpZmljIHByaW9yaXR5IHRvIHRoZSBvcHRpb25zO1xuICogU2luY2UgbW9zdCBwcm9wZXJ0aWVzIGFyZSBlaXRoZXIgYnJpZGdlZCBvciBtZXJnZWQgaW50byB0aGUgbG9jYWwgb3B0aW9ucyBvYmplY3RzLCB0aGVyZVxuICogaXMgbm90IG11Y2ggcG9pbnQgaW4gaGFuZGxpbmcgdGhlbSBzZXBhcmF0ZWx5LlxuICogVE9ETzogZXhhbWluZSBpZiAnbW9zdCcgaW4gcHJldmlvdXMgc2VudGVuY2UgY2FuIGJlIHJlcGxhY2VkIHdpdGggJ2FsbCcuIEluIHRoYXQgY2FzZSwgd2VcbiAqICAgICAgIHNob3VsZCBiZSBhYmxlIHRvIGdldCByaWQgb2YgdGhpcyBtZXRob2QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9ICBzdWJPcHRpb24gIG9wdGlvbiB3aXRoaW4gb2JqZWN0ICdjaG9zZW4nIHRvIGNvbnNpZGVyOyBlaXRoZXIgJ25vZGUnLCAnZWRnZScgb3IgJ2xhYmVsJ1xuICogQHBhcmFtIHtvYmplY3R9ICBwaWxlICAgICAgIGFycmF5IG9mIG9wdGlvbnMgb2JqZWN0cyB0byBjb25zaWRlclxuICogQHJldHVybnMge2Jvb2xlYW4gfCBGdW5jdGlvbn0gIHZhbHVlIGZvciBwYXNzZWQgc3ViT3B0aW9uIG9mICdjaG9zZW4nIHRvIHVzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hvb3NpZnkoc3ViT3B0aW9uLCBwaWxlKSB7XG4gIC8vIGFsbG93ZWQgdmFsdWVzIGZvciBzdWJPcHRpb25cbiAgY29uc3QgYWxsb3dlZCA9IFtcIm5vZGVcIiwgXCJlZGdlXCIsIFwibGFiZWxcIl07XG4gIGxldCB2YWx1ZSA9IHRydWU7XG5cbiAgY29uc3QgY2hvc2VuID0gdG9wTW9zdChwaWxlLCBcImNob3NlblwiKTtcbiAgaWYgKHR5cGVvZiBjaG9zZW4gPT09IFwiYm9vbGVhblwiKSB7XG4gICAgdmFsdWUgPSBjaG9zZW47XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNob3NlbiA9PT0gXCJvYmplY3RcIikge1xuICAgIGlmIChhbGxvd2VkLmluZGV4T2Yoc3ViT3B0aW9uKSA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJjaG9vc2lmeTogc3ViT3B0aW9uICdcIiArXG4gICAgICAgICAgc3ViT3B0aW9uICtcbiAgICAgICAgICBcIicgc2hvdWxkIGJlIG9uZSBvZiBcIiArXG4gICAgICAgICAgXCInXCIgK1xuICAgICAgICAgIGFsbG93ZWQuam9pbihcIicsICdcIikgK1xuICAgICAgICAgIFwiJ1wiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNob3NlbkVkZ2UgPSB0b3BNb3N0KHBpbGUsIFtcImNob3NlblwiLCBzdWJPcHRpb25dKTtcbiAgICBpZiAodHlwZW9mIGNob3NlbkVkZ2UgPT09IFwiYm9vbGVhblwiIHx8IHR5cGVvZiBjaG9zZW5FZGdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHZhbHVlID0gY2hvc2VuRWRnZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHBvaW50IGZhbGxzIHdpdGhpbiB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLlxuICpcbiAqIEBwYXJhbSB7cmVjdH0gcmVjdFxuICogQHBhcmFtIHtwb2ludH0gcG9pbnRcbiAqIEBwYXJhbSB7cm90YXRpb25Qb2ludH0gW3JvdGF0aW9uUG9pbnRdIGlmIHNwZWNpZmllZCwgdGhlIHJvdGF0aW9uIHRoYXQgYXBwbGllcyB0byB0aGUgcmVjdGFuZ2xlLlxuICogQHJldHVybnMge2Jvb2xlYW59ICB0cnVlIGlmIHBvaW50IHdpdGhpbiByZWN0YW5nbGUsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9pbnRJblJlY3QocmVjdCwgcG9pbnQsIHJvdGF0aW9uUG9pbnQpIHtcbiAgaWYgKHJlY3Qud2lkdGggPD0gMCB8fCByZWN0LmhlaWdodCA8PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBlYXJseSBvdXRcbiAgfVxuXG4gIGlmIChyb3RhdGlvblBvaW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBSb3RhdGUgdGhlIHBvaW50IHRoZSBzYW1lIGFtb3VudCBhcyB0aGUgcmVjdGFuZ2xlXG4gICAgY29uc3QgdG1wID0ge1xuICAgICAgeDogcG9pbnQueCAtIHJvdGF0aW9uUG9pbnQueCxcbiAgICAgIHk6IHBvaW50LnkgLSByb3RhdGlvblBvaW50LnksXG4gICAgfTtcblxuICAgIGlmIChyb3RhdGlvblBvaW50LmFuZ2xlICE9PSAwKSB7XG4gICAgICAvLyBJbiBvcmRlciB0byBnZXQgdGhlIGNvb3JkaW5hdGVzIHRoZSBzYW1lLCB5b3UgbmVlZCB0b1xuICAgICAgLy8gcm90YXRlIGluIHRoZSByZXZlcnNlIGRpcmVjdGlvblxuICAgICAgY29uc3QgYW5nbGUgPSAtcm90YXRpb25Qb2ludC5hbmdsZTtcblxuICAgICAgY29uc3QgdG1wMiA9IHtcbiAgICAgICAgeDogTWF0aC5jb3MoYW5nbGUpICogdG1wLnggLSBNYXRoLnNpbihhbmdsZSkgKiB0bXAueSxcbiAgICAgICAgeTogTWF0aC5zaW4oYW5nbGUpICogdG1wLnggKyBNYXRoLmNvcyhhbmdsZSkgKiB0bXAueSxcbiAgICAgIH07XG4gICAgICBwb2ludCA9IHRtcDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvaW50ID0gdG1wO1xuICAgIH1cblxuICAgIC8vIE5vdGUgdGhhdCBpZiBhIHJvdGF0aW9uIGlzIHNwZWNpZmllZCwgdGhlIHJlY3RhbmdsZSBjb29yZGluYXRlc1xuICAgIC8vIGFyZSAqKm5vdCogdGhlIGZ1bGwgY2FudmFzIGNvb3JkaW5hdGVzLiBUaGV5IGFyZSByZWxhdGl2ZSB0byB0aGVcbiAgICAvLyByb3RhdGlvblBvaW50LiBIZW5jZSwgdGhlIHBvaW50IGNvb3JkaW5hdGVzIG5lZWQgbm90IGJlIHRyYW5zbGF0ZWRcbiAgICAvLyBiYWNrIGluIHRoaXMgY2FzZS5cbiAgfVxuXG4gIGNvbnN0IHJpZ2h0ID0gcmVjdC54ICsgcmVjdC53aWR0aDtcbiAgY29uc3QgYm90dG9tID0gcmVjdC55ICsgcmVjdC53aWR0aDtcblxuICByZXR1cm4gKFxuICAgIHJlY3QubGVmdCA8IHBvaW50LnggJiZcbiAgICByaWdodCA+IHBvaW50LnggJiZcbiAgICByZWN0LnRvcCA8IHBvaW50LnkgJiZcbiAgICBib3R0b20gPiBwb2ludC55XG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgZ2l2ZW4gdmFsdWUgaXMgYWNjZXB0YWJsZSBhcyBhIGxhYmVsIHRleHQuXG4gKlxuICogQHBhcmFtIHsqfSB0ZXh0IHZhbHVlIHRvIGNoZWNrOyBjYW4gYmUgYW55dGhpbmcgYXQgdGhpcyBwb2ludFxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdmFsaWQgbGFiZWwgdmFsdWUsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZExhYmVsKHRleHQpIHtcbiAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgcXVpdGUgc3RyaWN0OiB0eXBlcyB0aGF0ICptaWdodCogYmUgY29udmVydGVkIHRvIHN0cmluZyBhcmUgZGlzYWxsb3dlZFxuICByZXR1cm4gdHlwZW9mIHRleHQgPT09IFwic3RyaW5nXCIgJiYgdGV4dCAhPT0gXCJcIjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHgsIHkgb2Ygc2VsZiByZWZlcmVuY2UgY2lyY2xlIGJhc2VkIG9uIHByb3ZpZGVkIGFuZ2xlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGN0eFxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkaXVzXG4gKiBAcGFyYW0ge1Zpc05vZGV9IG5vZGVcbiAqIEByZXR1cm5zIHtvYmplY3R9IHggYW5kIHkgY29vcmRpbmF0ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGZSZWZDb29yZGluYXRlcyhjdHgsIGFuZ2xlLCByYWRpdXMsIG5vZGUpIHtcbiAgbGV0IHggPSBub2RlLng7XG4gIGxldCB5ID0gbm9kZS55O1xuXG4gIGlmICh0eXBlb2Ygbm9kZS5kaXN0YW5jZVRvQm9yZGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAvL2NhbGN1bGF0aW5nIG9wcG9zaXRlIGFuZCBhZGphY2VudFxuICAgIC8vZGlzdGFuZVRvQm9yZGVyIGJlY29tZXMgSHlwb3RlbnVzZS5cbiAgICAvL0Zvcm11bGFzIHNpbihhKSA9IE9wcG9zaXRlIC8gSHlwb3RlbnVzZSBhbmQgY29zKGEpID0gQWRqYWNlbnQgLyBIeXBvdGVudXNlXG4gICAgY29uc3QgdG9Cb3JkZXJEaXN0ID0gbm9kZS5kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICAgIGNvbnN0IHlGcm9tTm9kZUNlbnRlciA9IE1hdGguc2luKGFuZ2xlKSAqIHRvQm9yZGVyRGlzdDtcbiAgICBjb25zdCB4RnJvbU5vZGVDZW50ZXIgPSBNYXRoLmNvcyhhbmdsZSkgKiB0b0JvcmRlckRpc3Q7XG4gICAgLy94RnJvbU5vZGVDZW50ZXIgaXMgYmFzaWNhbGx5IHggYW5kIGlmIHhGcm9tTm9kZUNlbnRlciBlcXVhbHMgdG8gdGhlIGRpc3RhbmNlIHRvIGJvcmRlciB0aGVuIGl0IG1lYW5zXG4gICAgLy90aGF0IHkgZG9lcyBub3QgbmVlZCBjYWxjdWxhdGlvbiBiZWNhdXNlIGl0IGlzIGVxdWFsIG5vZGUuaGVpZ2h0IC8gMiBvciBub2RlLnlcbiAgICAvL3NhbWUgdGhpbmcgd2l0aCB5RnJvbU5vZGVDZW50ZXIgYW5kIGlmIHlGcm9tTm9kZUNlbnRlciBlcXVhbHMgdG8gdGhlIGRpc3RhbmNlIHRvIGJvcmRlciB0aGVuIGl0IG1lYW5zXG4gICAgLy90aGF0IHggaXMgZXF1YWwgbm9kZS53aWR0aCAvIDIgb3Igbm9kZS54XG4gICAgaWYgKHhGcm9tTm9kZUNlbnRlciA9PT0gdG9Cb3JkZXJEaXN0KSB7XG4gICAgICB4ICs9IHRvQm9yZGVyRGlzdDtcbiAgICAgIHkgPSBub2RlLnk7XG4gICAgfSBlbHNlIGlmICh5RnJvbU5vZGVDZW50ZXIgPT09IHRvQm9yZGVyRGlzdCkge1xuICAgICAgeCA9IG5vZGUueDtcbiAgICAgIHkgLT0gdG9Cb3JkZXJEaXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB4ICs9IHhGcm9tTm9kZUNlbnRlcjtcbiAgICAgIHkgLT0geUZyb21Ob2RlQ2VudGVyO1xuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlLnNoYXBlLndpZHRoID4gbm9kZS5zaGFwZS5oZWlnaHQpIHtcbiAgICB4ID0gbm9kZS54ICsgbm9kZS5zaGFwZS53aWR0aCAqIDAuNTtcbiAgICB5ID0gbm9kZS55IC0gcmFkaXVzO1xuICB9IGVsc2Uge1xuICAgIHggPSBub2RlLnggKyByYWRpdXM7XG4gICAgeSA9IG5vZGUueSAtIG5vZGUuc2hhcGUuaGVpZ2h0ICogMC41O1xuICB9XG5cbiAgcmV0dXJuIHsgeCwgeSB9O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnZhbHVlcztcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnZhbHVlcztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUudmFsdWVzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdmFsdWVzXCIpOyIsICIvKipcbiAqIENhbGxiYWNrIHRvIGRldGVybWluZSB0ZXh0IGRpbWVuc2lvbnMsIHVzaW5nIHRoZSBwYXJlbnQgbGFiZWwgc2V0dGluZ3MuXG4gKlxuICogQGNhbGxiYWNrIE1lYXN1cmVUZXh0XG4gKiBAcGFyYW0ge3RleHR9IHRleHRcbiAqIEBwYXJhbSB7dGV4dH0gbW9kXG4gKiBAcmV0dXJucyB7b2JqZWN0fSB7IHdpZHRoLCB2YWx1ZXN9IHdpZHRoIGluIHBpeGVscyBhbmQgZm9udCBhdHRyaWJ1dGVzXG4gKi9cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIExhYmVsIHdoaWNoIGNvbGxlY3RzIHJlc3VsdHMgb2Ygc3BsaXR0aW5nIGxhYmVscyBpbnRvIGxpbmVzIGFuZCBibG9ja3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgTGFiZWxBY2N1bXVsYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge01lYXN1cmVUZXh0fSBtZWFzdXJlVGV4dFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVhc3VyZVRleHQpIHtcbiAgICB0aGlzLm1lYXN1cmVUZXh0ID0gbWVhc3VyZVRleHQ7XG4gICAgdGhpcy5jdXJyZW50ID0gMDtcbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG4gICAgdGhpcy5saW5lcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZCBnaXZlbiB0ZXh0IHRvIHRoZSBnaXZlbiBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gIGwgICAgaW5kZXggb2YgbGluZSB0byBhZGQgdG9cbiAgICogQHBhcmFtIHtzdHJpbmd9ICB0ZXh0IHN0cmluZyB0byBhcHBlbmQgdG8gbGluZVxuICAgKiBAcGFyYW0geydib2xkJ3wnaXRhbCd8J2JvbGRpdGFsJ3wnbW9ubyd8J25vcm1hbCd9IFttb2Q9J25vcm1hbCddXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWRkKGwsIHRleHQsIG1vZCA9IFwibm9ybWFsXCIpIHtcbiAgICBpZiAodGhpcy5saW5lc1tsXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxpbmVzW2xdID0ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBibG9ja3M6IFtdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBXZSBzdGlsbCBuZWVkIHRvIHNldCBhIGJsb2NrIGZvciB1bmRlZmluZWQgYW5kIGVtcHR5IHRleHRzLCBoZW5jZSByZXR1cm4gYXQgdGhpcyBwb2ludFxuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBhdCB0aGlzIHBvaW50IGlmIHdlJ3JlIGF0IHRoZVxuICAgIC8vIHN0YXJ0IG9mIGFuIGVtcHR5IGxpbmUgb3Igbm90LlxuICAgIC8vIFRvIGNvbXBlbnNhdGUsIGVtcHR5IGJsb2NrcyBhcmUgcmVtb3ZlZCBpbiBgZmluYWxpemUoKWAuXG4gICAgLy9cbiAgICAvLyBFbXB0eSBzdHJpbmdzIHNob3VsZCBzdGlsbCBoYXZlIGEgaGVpZ2h0XG4gICAgbGV0IHRtcFRleHQgPSB0ZXh0O1xuICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQgfHwgdGV4dCA9PT0gXCJcIikgdG1wVGV4dCA9IFwiIFwiO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHdpZHRoIGFuZCBnZXQgdGhlIGZvbnQgcHJvcGVydGllc1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWVhc3VyZVRleHQodG1wVGV4dCwgbW9kKTtcbiAgICBjb25zdCBibG9jayA9IE9iamVjdC5hc3NpZ24oe30sIHJlc3VsdC52YWx1ZXMpO1xuICAgIGJsb2NrLnRleHQgPSB0ZXh0O1xuICAgIGJsb2NrLndpZHRoID0gcmVzdWx0LndpZHRoO1xuICAgIGJsb2NrLm1vZCA9IG1vZDtcblxuICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQgfHwgdGV4dCA9PT0gXCJcIikge1xuICAgICAgYmxvY2sud2lkdGggPSAwO1xuICAgIH1cblxuICAgIHRoaXMubGluZXNbbF0uYmxvY2tzLnB1c2goYmxvY2spO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBsaW5lIHdpZHRoLiBXZSBuZWVkIHRoaXMgZm9yIGRldGVybWluaW5nIGlmIGEgc3RyaW5nIGdvZXMgb3ZlciBtYXggd2lkdGhcbiAgICB0aGlzLmxpbmVzW2xdLndpZHRoICs9IGJsb2NrLndpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHdpZHRoIGluIHBpeGVscyBvZiB0aGUgY3VycmVudCBsaW5lLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgY3VyV2lkdGgoKSB7XG4gICAgY29uc3QgbGluZSA9IHRoaXMubGluZXNbdGhpcy5jdXJyZW50XTtcbiAgICBpZiAobGluZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcblxuICAgIHJldHVybiBsaW5lLndpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0ZXh0IGluIGJsb2NrIHRvIGN1cnJlbnQgbGluZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcGFyYW0geydib2xkJ3wnaXRhbCd8J2JvbGRpdGFsJ3wnbW9ubyd8J25vcm1hbCd9IFttb2Q9J25vcm1hbCddXG4gICAqL1xuICBhcHBlbmQodGV4dCwgbW9kID0gXCJub3JtYWxcIikge1xuICAgIHRoaXMuX2FkZCh0aGlzLmN1cnJlbnQsIHRleHQsIG1vZCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRleHQgaW4gYmxvY2sgdG8gY3VycmVudCBsaW5lIGFuZCBzdGFydCBhIG5ldyBsaW5lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7J2JvbGQnfCdpdGFsJ3wnYm9sZGl0YWwnfCdtb25vJ3wnbm9ybWFsJ30gW21vZD0nbm9ybWFsJ11cbiAgICovXG4gIG5ld0xpbmUodGV4dCwgbW9kID0gXCJub3JtYWxcIikge1xuICAgIHRoaXMuX2FkZCh0aGlzLmN1cnJlbnQsIHRleHQsIG1vZCk7XG4gICAgdGhpcy5jdXJyZW50Kys7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGFuZCBzZXQgdGhlIGhlaWdodHMgb2YgYWxsIHRoZSBsaW5lcyBjdXJyZW50bHkgY29udGFpbmVkIGluIHRoaXMgaW5zdGFuY2VcbiAgICpcbiAgICogTm90ZSB0aGF0IHdpZHRoIGhhcyBhbHJlYWR5IGJlZW4gc2V0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGV0ZXJtaW5lTGluZUhlaWdodHMoKSB7XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaysrKSB7XG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1trXTtcblxuICAgICAgLy8gTG9va2luZyBmb3IgbWF4IGhlaWdodCBvZiBibG9ja3MgaW4gbGluZVxuICAgICAgbGV0IGhlaWdodCA9IDA7XG5cbiAgICAgIGlmIChsaW5lLmJsb2NrcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIENhbiBoYXBwZW4gaWYgdGV4dCBjb250YWlucyBlLmcuICdcXG4gJ1xuICAgICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGxpbmUuYmxvY2tzLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgICAgY29uc3QgYmxvY2sgPSBsaW5lLmJsb2Nrc1tsXTtcblxuICAgICAgICAgIGlmIChoZWlnaHQgPCBibG9jay5oZWlnaHQpIHtcbiAgICAgICAgICAgIGhlaWdodCA9IGJsb2NrLmhlaWdodDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGluZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgZnVsbCBzaXplIG9mIHRoZSBsYWJlbCB0ZXh0LCBhcyBkZXRlcm1pbmVkIGJ5IGN1cnJlbnQgbGluZXMgYW5kIGJsb2Nrc1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGV0ZXJtaW5lTGFiZWxTaXplKCkge1xuICAgIGxldCB3aWR0aCA9IDA7XG4gICAgbGV0IGhlaWdodCA9IDA7XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaysrKSB7XG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1trXTtcblxuICAgICAgaWYgKGxpbmUud2lkdGggPiB3aWR0aCkge1xuICAgICAgICB3aWR0aCA9IGxpbmUud2lkdGg7XG4gICAgICB9XG4gICAgICBoZWlnaHQgKz0gbGluZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgZW1wdHkgYmxvY2tzIGFuZCBlbXB0eSBsaW5lcyB3ZSBkb24ndCBuZWVkXG4gICAqXG4gICAqIFRoaXMgbXVzdCBiZSBkb25lIGFmdGVyIHRoZSB3aWR0aC9oZWlnaHQgZGV0ZXJtaW5hdGlvbixcbiAgICogc28gdGhhdCB0aGVzZSBhcmUgc2V0IHByb3Blcmx5IGZvciBwcm9jZXNzaW5nIGhlcmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheTxMaW5lPn0gTGluZXMgd2l0aCBlbXB0eSBibG9ja3MgKGFuZCBzb21lIGVtcHR5IGxpbmVzKSByZW1vdmVkXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZW1vdmVFbXB0eUJsb2NrcygpIHtcbiAgICBjb25zdCB0bXBMaW5lcyA9IFtdO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy5saW5lcy5sZW5ndGg7IGsrKykge1xuICAgICAgY29uc3QgbGluZSA9IHRoaXMubGluZXNba107XG5cbiAgICAgIC8vIE5vdGU6IGFuIGVtcHR5IGxpbmUgaW4gYmV0d2VlbiB0ZXh0IGhhcyB3aWR0aCB6ZXJvIGJ1dCBpcyBzdGlsbCByZWxldmFudCB0byBsYXlvdXQuXG4gICAgICAvLyBTbyB3ZSBjYW4ndCB1c2Ugd2lkdGggZm9yIHRlc3RpbmcgZW1wdHkgbGluZSBoZXJlXG4gICAgICBpZiAobGluZS5ibG9ja3MubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgLy8gRGlzY2FyZCBmaW5hbCBlbXB0eSBsaW5lIGFsd2F5c1xuICAgICAgaWYgKGsgPT09IHRoaXMubGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICBpZiAobGluZS53aWR0aCA9PT0gMCkgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRtcExpbmUgPSB7fTtcbiAgICAgIE9iamVjdC5hc3NpZ24odG1wTGluZSwgbGluZSk7XG4gICAgICB0bXBMaW5lLmJsb2NrcyA9IFtdO1xuXG4gICAgICBsZXQgZmlyc3RFbXB0eUJsb2NrO1xuICAgICAgY29uc3QgdG1wQmxvY2tzID0gW107XG4gICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGxpbmUuYmxvY2tzLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgIGNvbnN0IGJsb2NrID0gbGluZS5ibG9ja3NbbF07XG4gICAgICAgIGlmIChibG9jay53aWR0aCAhPT0gMCkge1xuICAgICAgICAgIHRtcEJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlyc3RFbXB0eUJsb2NrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpcnN0RW1wdHlCbG9jayA9IGJsb2NrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBFbnN1cmUgdGhhdCB0aGVyZSBpcyAqc29tZSogdGV4dCBwcmVzZW50XG4gICAgICBpZiAodG1wQmxvY2tzLmxlbmd0aCA9PT0gMCAmJiBmaXJzdEVtcHR5QmxvY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0bXBCbG9ja3MucHVzaChmaXJzdEVtcHR5QmxvY2spO1xuICAgICAgfVxuXG4gICAgICB0bXBMaW5lLmJsb2NrcyA9IHRtcEJsb2NrcztcblxuICAgICAgdG1wTGluZXMucHVzaCh0bXBMaW5lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG1wTGluZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzaXplcyBmb3IgYWxsIGxpbmVzIGFuZCB0aGUgd2hvbGUgdGhpbmcuXG4gICAqXG4gICAqIEByZXR1cm5zIHt7d2lkdGg6IChudW1iZXJ8KiksIGhlaWdodDogKG51bWJlcnwqKSwgbGluZXM6IEFycmF5fX1cbiAgICovXG4gIGZpbmFsaXplKCkge1xuICAgIC8vY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy5saW5lcywgbnVsbCwgMikpO1xuXG4gICAgdGhpcy5kZXRlcm1pbmVMaW5lSGVpZ2h0cygpO1xuICAgIHRoaXMuZGV0ZXJtaW5lTGFiZWxTaXplKCk7XG4gICAgY29uc3QgdG1wTGluZXMgPSB0aGlzLnJlbW92ZUVtcHR5QmxvY2tzKCk7XG5cbiAgICAvLyBSZXR1cm4gYSBzaW1wbGUgaGFzaCBvYmplY3QgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgbGluZXM6IHRtcExpbmVzLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGFiZWxBY2N1bXVsYXRvcjtcbiIsICJpbXBvcnQgTGFiZWxBY2N1bXVsYXRvciBmcm9tIFwiLi9MYWJlbEFjY3VtdWxhdG9yXCI7XG5pbXBvcnQgeyBpc1ZhbGlkTGFiZWwgfSBmcm9tIFwiLi9Db21wb25lbnRVdGlsXCI7XG5cbi8vIEhhc2ggb2YgcHJlcGFyZWQgcmVnZXhwJ3MgZm9yIHRhZ3NcbmNvbnN0IHRhZ1BhdHRlcm4gPSB7XG4gIC8vIEhUTUxcbiAgXCI8Yj5cIjogLzxiPi8sXG4gIFwiPGk+XCI6IC88aT4vLFxuICBcIjxjb2RlPlwiOiAvPGNvZGU+LyxcbiAgXCI8L2I+XCI6IC88XFwvYj4vLFxuICBcIjwvaT5cIjogLzxcXC9pPi8sXG4gIFwiPC9jb2RlPlwiOiAvPFxcL2NvZGU+LyxcbiAgLy8gTWFya2Rvd25cbiAgXCIqXCI6IC9cXCovLCAvLyBib2xkXG4gIF86IC9fLywgLy8gaXRhbFxuICBcImBcIjogL2AvLCAvLyBtb25vXG4gIGFmdGVyQm9sZDogL1teKl0vLFxuICBhZnRlckl0YWw6IC9bXl9dLyxcbiAgYWZ0ZXJNb25vOiAvW15gXS8sXG59O1xuXG4vKipcbiAqIEludGVybmFsIGhlbHBlciBjbGFzcyBmb3IgcGFyc2luZyB0aGUgbWFya3VwIHRhZ3MgZm9yIEhUTUwgYW5kIE1hcmtkb3duLlxuICpcbiAqIE5PVEU6IFNlcXVlbmNlcyBvZiB0YWJzIGFuZCBzcGFjZXMgYXJlIHJlZHVjZWQgdG8gc2luZ2xlIHNwYWNlLlxuICogICAgICAgU2NhbiB1c2FnZSBvZiBgdGhpcy5zcGFjaW5nYCB3aXRoaW4gbWV0aG9kXG4gKi9cbmNsYXNzIE1hcmt1cEFjY3VtdWxhdG9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnN0YW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAgdGV4dCB0byBwYXJzZSBmb3IgbWFya3VwXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLmJvbGQgPSBmYWxzZTtcbiAgICB0aGlzLml0YWwgPSBmYWxzZTtcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcbiAgICB0aGlzLnNwYWNpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XG4gICAgdGhpcy5tb2RTdGFjayA9IFtdO1xuXG4gICAgdGhpcy5ibG9ja3MgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1vZCBsYWJlbCBjdXJyZW50bHkgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gIGxhYmVsIG9mIHRvcG1vc3QgbW9kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtb2QoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kU3RhY2subGVuZ3RoID09PSAwID8gXCJub3JtYWxcIiA6IHRoaXMubW9kU3RhY2tbMF07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBtb2QgbGFiZWwgY3VycmVudGx5IGFjdGl2ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAgbGFiZWwgb2YgYWN0aXZlIG1vZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbW9kTmFtZSgpIHtcbiAgICBpZiAodGhpcy5tb2RTdGFjay5sZW5ndGggPT09IDApIHJldHVybiBcIm5vcm1hbFwiO1xuICAgIGVsc2UgaWYgKHRoaXMubW9kU3RhY2tbMF0gPT09IFwibW9ub1wiKSByZXR1cm4gXCJtb25vXCI7XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5ib2xkICYmIHRoaXMuaXRhbCkge1xuICAgICAgICByZXR1cm4gXCJib2xkaXRhbFwiO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmJvbGQpIHtcbiAgICAgICAgcmV0dXJuIFwiYm9sZFwiO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLml0YWwpIHtcbiAgICAgICAgcmV0dXJuIFwiaXRhbFwiO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdEJsb2NrKCkge1xuICAgIGlmICh0aGlzLnNwYWNpbmcpIHtcbiAgICAgIHRoaXMuYWRkKFwiIFwiKTtcbiAgICAgIHRoaXMuc3BhY2luZyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5ibG9ja3MucHVzaCh7IHRleHQ6IHRoaXMuYnVmZmVyLCBtb2Q6IHRoaXMubW9kTmFtZSgpIH0pO1xuICAgICAgdGhpcy5idWZmZXIgPSBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXQgdGV4dCB0byBidWZmZXJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgIHRleHQgdG8gYWRkXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhZGQodGV4dCkge1xuICAgIGlmICh0ZXh0ID09PSBcIiBcIikge1xuICAgICAgdGhpcy5zcGFjaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3BhY2luZykge1xuICAgICAgdGhpcy5idWZmZXIgKz0gXCIgXCI7XG4gICAgICB0aGlzLnNwYWNpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRleHQgIT0gXCIgXCIpIHtcbiAgICAgIHRoaXMuYnVmZmVyICs9IHRleHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBwYXJzaW5nIG9mIHdoaXRlc3BhY2VcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoICB0aGUgY2hhcmFjdGVyIHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBjaGFyYWN0ZXIgd2FzIHByb2Nlc3NlZCBhcyB3aGl0ZXNwYWNlLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHBhcnNlV1MoY2gpIHtcbiAgICBpZiAoL1sgXFx0XS8udGVzdChjaCkpIHtcbiAgICAgIGlmICghdGhpcy5tb25vKSB7XG4gICAgICAgIHRoaXMuc3BhY2luZyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFkZChjaCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgIGxhYmVsIGZvciBibG9jayB0eXBlIHRvIHNldFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2V0VGFnKHRhZ05hbWUpIHtcbiAgICB0aGlzLmVtaXRCbG9jaygpO1xuICAgIHRoaXNbdGFnTmFtZV0gPSB0cnVlO1xuICAgIHRoaXMubW9kU3RhY2sudW5zaGlmdCh0YWdOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAgbGFiZWwgZm9yIGJsb2NrIHR5cGUgdG8gdW5zZXRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVuc2V0VGFnKHRhZ05hbWUpIHtcbiAgICB0aGlzLmVtaXRCbG9jaygpO1xuICAgIHRoaXNbdGFnTmFtZV0gPSBmYWxzZTtcbiAgICB0aGlzLm1vZFN0YWNrLnNoaWZ0KCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgbGFiZWwgZm9yIGJsb2NrIHR5cGUgd2UgYXJlIGN1cnJlbnRseSBwcm9jZXNzaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdGFnIHN0cmluZyB0byBtYXRjaCBpbiB0ZXh0XG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSB0YWcgd2FzIHByb2Nlc3NlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwYXJzZVN0YXJ0VGFnKHRhZ05hbWUsIHRhZykge1xuICAgIC8vIE5vdGU6IGlmICdtb25vJyBwYXNzZWQgYXMgdGFnTmFtZSwgdGhlcmUgaXMgYSBkb3VibGUgY2hlY2sgaGVyZS4gVGhpcyBpcyBPS1xuICAgIGlmICghdGhpcy5tb25vICYmICF0aGlzW3RhZ05hbWVdICYmIHRoaXMubWF0Y2godGFnKSkge1xuICAgICAgdGhpcy5zZXRUYWcodGFnTmFtZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB0YWdcbiAgICogQHBhcmFtIHtudW1iZXJ9IFthZHZhbmNlPXRydWVdIGlmIHNldCwgYWR2YW5jZSBjdXJyZW50IHBvc2l0aW9uIGluIHRleHRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgbWF0Y2ggYXQgZ2l2ZW4gcG9zaXRpb24sIGZhbHNlIG90aGVyd2lzZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbWF0Y2godGFnLCBhZHZhbmNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IFtyZWdFeHAsIGxlbmd0aF0gPSB0aGlzLnByZXBhcmVSZWdFeHAodGFnKTtcbiAgICBjb25zdCBtYXRjaGVkID0gcmVnRXhwLnRlc3QodGhpcy50ZXh0LnN1YnN0cih0aGlzLnBvc2l0aW9uLCBsZW5ndGgpKTtcblxuICAgIGlmIChtYXRjaGVkICYmIGFkdmFuY2UpIHtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSBsYWJlbCBmb3IgYmxvY2sgdHlwZSB3ZSBhcmUgY3VycmVudGx5IHByb2Nlc3NpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB0YWcgc3RyaW5nIHRvIG1hdGNoIGluIHRleHRcbiAgICogQHBhcmFtIHtSZWdFeHB9IFtuZXh0VGFnXSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggZm9yIGNoYXJhY3RlcnMgKmZvbGxvd2luZyogdGhlIGN1cnJlbnQgdGFnXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSB0YWcgd2FzIHByb2Nlc3NlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwYXJzZUVuZFRhZyh0YWdOYW1lLCB0YWcsIG5leHRUYWcpIHtcbiAgICBsZXQgY2hlY2tUYWcgPSB0aGlzLm1vZCgpID09PSB0YWdOYW1lO1xuICAgIGlmICh0YWdOYW1lID09PSBcIm1vbm9cIikge1xuICAgICAgLy8gc3BlY2lhbCBoYW5kbGluZyBmb3IgJ21vbm8nXG4gICAgICBjaGVja1RhZyA9IGNoZWNrVGFnICYmIHRoaXMubW9ubztcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2tUYWcgPSBjaGVja1RhZyAmJiAhdGhpcy5tb25vO1xuICAgIH1cblxuICAgIGlmIChjaGVja1RhZyAmJiB0aGlzLm1hdGNoKHRhZykpIHtcbiAgICAgIGlmIChuZXh0VGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gUHVycG9zZSBvZiB0aGUgZm9sbG93aW5nIG1hdGNoIGlzIHRvIHByZXZlbnQgYSBkaXJlY3QgdW5zZXQvc2V0IG9mIGEgZ2l2ZW4gdGFnXG4gICAgICAgIC8vIEUuZy4gJypib2xkICoqc3RpbGwgYm9sZConID0+ICcqYm9sZCBzdGlsbCBib2xkKidcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMucG9zaXRpb24gPT09IHRoaXMudGV4dC5sZW5ndGggLSAxIHx8XG4gICAgICAgICAgdGhpcy5tYXRjaChuZXh0VGFnLCBmYWxzZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy51bnNldFRhZyh0YWdOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51bnNldFRhZyh0YWdOYW1lKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdGFnICBzdHJpbmcgdG8gbWF0Y2ggaW4gdGV4dFxuICAgKiBAcGFyYW0ge3ZhbHVlfSB2YWx1ZSAgc3RyaW5nIHRvIHJlcGxhY2UgdGFnIHdpdGgsIGlmIGZvdW5kIGF0IGN1cnJlbnQgcG9zaXRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHRhZyB3YXMgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHJlcGxhY2UodGFnLCB2YWx1ZSkge1xuICAgIGlmICh0aGlzLm1hdGNoKHRhZykpIHtcbiAgICAgIHRoaXMuYWRkKHZhbHVlKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoIC0gMTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHRoZSB0YWcgaWYgaXQgaXNuJ3QgYWxyZWFkeSBvbmUuXG4gICAqXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gYXJyYXkgYFtSZWdFeHAsIG51bWJlcl1gLCB3aXRoIGV4YWN0bHkgdHdvIHZhbHVlLCB3aGVyZTpcbiAgICogIC0gUmVnRXhwIGlzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gdXNlXG4gICAqICAtIG51bWJlciBpcyB0aGUgbGVudGggb2YgdGhlIGlucHV0IHN0cmluZyB0byBtYXRjaFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHRhZyAgc3RyaW5nIHRvIG1hdGNoIGluIHRleHRcbiAgICogQHJldHVybnMge0FycmF5fSAgcmVndWxhciBleHByZXNzaW9uIHRvIHVzZSBhbmQgbGVuZ3RoIG9mIGlucHV0IHN0cmluZyB0byBtYXRjaFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJlcGFyZVJlZ0V4cCh0YWcpIHtcbiAgICBsZXQgbGVuZ3RoO1xuICAgIGxldCByZWdFeHA7XG4gICAgaWYgKHRhZyBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgcmVnRXhwID0gdGFnO1xuICAgICAgbGVuZ3RoID0gMTsgLy8gQVNTVU1QVElPTjogcmVnZXhwIG9ubHkgdGVzdHMgb25lIGNoYXJhY3RlclxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2UgcHJlcGFyZWQgcmVnZXhwIGlmIHByZXNlbnRcbiAgICAgIGNvbnN0IHByZXBhcmVkID0gdGFnUGF0dGVyblt0YWddO1xuICAgICAgaWYgKHByZXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVnRXhwID0gcHJlcGFyZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKHRhZyk7XG4gICAgICB9XG5cbiAgICAgIGxlbmd0aCA9IHRhZy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtyZWdFeHAsIGxlbmd0aF07XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIExhYmVsIHdoaWNoIGV4cGxvZGVzIHRoZSBsYWJlbCB0ZXh0IGludG8gbGluZXMgYW5kIGJsb2NrcyB3aXRoaW4gbGluZXNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBMYWJlbFNwbGl0dGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHggQ2FudmFzIHJlbmRlcmluZyBjb250ZXh0XG4gICAqIEBwYXJhbSB7TGFiZWx9IHBhcmVudCByZWZlcmVuY2UgdG8gdGhlIExhYmVsIGluc3RhbmNlIHVzaW5nIGN1cnJlbnQgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjdHgsIHBhcmVudCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgdGhpcy5jdHggPSBjdHg7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgIHRoaXMuaG92ZXIgPSBob3ZlcjtcblxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGRldGVybWluZSB0ZXh0IHdpZHRoOyBwYXNzZWQgdG8gTGFiZWxBY2N1bXVsYXRvciBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB0ZXh0IHN0cmluZyB0byBkZXRlcm1pbmUgd2lkdGggb2ZcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG1vZCAgZm9udCB0eXBlIHRvIHVzZSBmb3IgdGhpcyB0ZXh0XG4gICAgICogQHJldHVybnMge29iamVjdH0geyB3aWR0aCwgdmFsdWVzfSB3aWR0aCBpbiBwaXhlbHMgYW5kIGZvbnQgYXR0cmlidXRlc1xuICAgICAqL1xuICAgIGNvbnN0IHRleHRXaWR0aCA9ICh0ZXh0LCBtb2QpID0+IHtcbiAgICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuXG4gICAgICAvLyBUT0RPOiBUaGlzIGNhbiBiZSBkb25lIG1vcmUgZWZmaWNpZW50bHkgd2l0aCBjYWNoaW5nXG4gICAgICAvLyBUaGlzIHdpbGwgc2V0IHRoZSBjdHguZm9udCBjb3JyZWN0bHksIGRlcGVuZGluZyBvbiBzZWxlY3RlZC9ob3ZlciBhbmQgbW9kIC0gc28gdGhhdCBjdHgubWVhc3VyZVRleHQoKSB3aWxsIGJlIGFjY3VyYXRlLlxuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5wYXJlbnQuZ2V0Rm9ybWF0dGluZ1ZhbHVlcyhjdHgsIHNlbGVjdGVkLCBob3ZlciwgbW9kKTtcblxuICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgIGlmICh0ZXh0ICE9PSBcIlwiKSB7XG4gICAgICAgIGNvbnN0IG1lYXN1cmUgPSB0aGlzLmN0eC5tZWFzdXJlVGV4dCh0ZXh0KTtcbiAgICAgICAgd2lkdGggPSBtZWFzdXJlLndpZHRoO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyB3aWR0aCwgdmFsdWVzOiB2YWx1ZXMgfTtcbiAgICB9O1xuXG4gICAgdGhpcy5saW5lcyA9IG5ldyBMYWJlbEFjY3VtdWxhdG9yKHRleHRXaWR0aCk7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgcGFzc2VkIHRleHQgb2YgYSBsYWJlbCBpbnRvIGxpbmVzIGFuZCBibG9ja3MuXG4gICAqXG4gICAqICMgTk9URVxuICAgKlxuICAgKiBUaGUgaGFuZGxpbmcgb2Ygc3BhY2luZyBpcyBvcHRpb24gZGVwZW5kZW50OlxuICAgKlxuICAgKiAtIGlmIGBmb250Lm11bHRpIDogZmFsc2VgLCBhbGwgc3BhY2VzIGFyZSByZXRhaW5lZFxuICAgKiAtIGlmIGBmb250Lm11bHRpIDogdHJ1ZWAsIGV2ZXJ5IHNlcXVlbmNlIG9mIHNwYWNlcyBpcyBjb21wcmVzc2VkIHRvIGEgc2luZ2xlIHNwYWNlXG4gICAqXG4gICAqIFRoaXMgbWlnaHQgbm90IGJlIHRoZSBiZXN0IHdheSB0byBkbyBpdCwgYnV0IHRoaXMgaXMgYXMgaXQgaGFzIGJlZW4gd29ya2luZyB0aWxsIG5vdy5cbiAgICogSW4gb3JkZXIgbm90IHRvIGJyZWFrIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHksIGZvciB0aGUgdGltZSBiZWluZyB0aGlzIGJlaGF2aW91ciB3aWxsXG4gICAqIGJlIHJldGFpbmVkIGluIGFueSBjb2RlIGNoYW5nZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0ICB0ZXh0IHRvIHNwbGl0XG4gICAqIEByZXR1cm5zIHtBcnJheTxsaW5lPn1cbiAgICovXG4gIHByb2Nlc3ModGV4dCkge1xuICAgIGlmICghaXNWYWxpZExhYmVsKHRleHQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5saW5lcy5maW5hbGl6ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbnQgPSB0aGlzLnBhcmVudC5mb250T3B0aW9ucztcblxuICAgIC8vIE5vcm1hbGl6ZSB0aGUgZW5kLW9mLWxpbmUncyB0byBhIHNpbmdsZSByZXByZXNlbnRhdGlvbiAtIG9yZGVyIGltcG9ydGFudFxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcclxcbi9nLCBcIlxcblwiKTsgLy8gRG9zIEVPTCdzXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxyL2csIFwiXFxuXCIpOyAvLyBNYWMgRU9MJ3NcblxuICAgIC8vIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCB0aGVyZSBjYW4gYmUgbm8gXFxyJ3MgaW4gdGhlIHRleHQuXG4gICAgLy8gVGhpcyBpcyB1c2VkIGxhdGVyIG9uIHNwbGl0U3RyaW5nSW50b0xpbmVzKCkgdG8gc3BsaXQgbXVsdGlmb250IHRleHRzLlxuXG4gICAgY29uc3QgbmxMaW5lcyA9IFN0cmluZyh0ZXh0KS5zcGxpdChcIlxcblwiKTtcbiAgICBjb25zdCBsaW5lQ291bnQgPSBubExpbmVzLmxlbmd0aDtcblxuICAgIGlmIChmb250Lm11bHRpKSB7XG4gICAgICAvLyBNdWx0aS1mb250IGNhc2U6IHN0eWxpbmcgdGFncyBhY3RpdmVcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZUNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgYmxvY2tzID0gdGhpcy5zcGxpdEJsb2NrcyhubExpbmVzW2ldLCBmb250Lm11bHRpKTtcbiAgICAgICAgLy8gUG9zdDogU2VxdWVuY2VzIG9mIHRhYnMgYW5kIHNwYWNlcyBhcmUgcmVkdWNlZCB0byBzaW5nbGUgc3BhY2VcblxuICAgICAgICBpZiAoYmxvY2tzID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmIChibG9ja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5saW5lcy5uZXdMaW5lKFwiXCIpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvbnQubWF4V2R0ID4gMCkge1xuICAgICAgICAgIC8vIHdpZHRoQ29uc3RyYWludC5tYXhpbXVtIGRlZmluZWRcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdSdW5uaW5nIHdpZHRoQ29uc3RyYWludCBtdWx0aSwgbWF4OiAnICsgdGhpcy5mb250T3B0aW9ucy5tYXhXZHQpO1xuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYmxvY2tzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBtb2QgPSBibG9ja3Nbal0ubW9kO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGJsb2Nrc1tqXS50ZXh0O1xuICAgICAgICAgICAgdGhpcy5zcGxpdFN0cmluZ0ludG9MaW5lcyh0ZXh0LCBtb2QsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB3aWR0aENvbnN0cmFpbnQubWF4aW11bSBOT1QgZGVmaW5lZFxuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYmxvY2tzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBtb2QgPSBibG9ja3Nbal0ubW9kO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGJsb2Nrc1tqXS50ZXh0O1xuICAgICAgICAgICAgdGhpcy5saW5lcy5hcHBlbmQodGV4dCwgbW9kKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpbmVzLm5ld0xpbmUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2luZ2xlLWZvbnQgY2FzZVxuICAgICAgaWYgKGZvbnQubWF4V2R0ID4gMCkge1xuICAgICAgICAvLyB3aWR0aENvbnN0cmFpbnQubWF4aW11bSBkZWZpbmVkXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdSdW5uaW5nIHdpZHRoQ29uc3RyYWludCBub3JtYWwsIG1heDogJyArIHRoaXMuZm9udE9wdGlvbnMubWF4V2R0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lQ291bnQ7IGkrKykge1xuICAgICAgICAgIHRoaXMuc3BsaXRTdHJpbmdJbnRvTGluZXMobmxMaW5lc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdpZHRoQ29uc3RyYWludC5tYXhpbXVtIE5PVCBkZWZpbmVkXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZUNvdW50OyBpKyspIHtcbiAgICAgICAgICB0aGlzLmxpbmVzLm5ld0xpbmUobmxMaW5lc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5saW5lcy5maW5hbGl6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIG5vcm1hbGl6ZSB0aGUgbWFya3VwIHN5c3RlbVxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW58J21kJ3wnbWFya2Rvd24nfCdodG1sJ30gbWFya3VwU3lzdGVtXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBkZWNvZGVNYXJrdXBTeXN0ZW0obWFya3VwU3lzdGVtKSB7XG4gICAgbGV0IHN5c3RlbSA9IFwibm9uZVwiO1xuICAgIGlmIChtYXJrdXBTeXN0ZW0gPT09IFwibWFya2Rvd25cIiB8fCBtYXJrdXBTeXN0ZW0gPT09IFwibWRcIikge1xuICAgICAgc3lzdGVtID0gXCJtYXJrZG93blwiO1xuICAgIH0gZWxzZSBpZiAobWFya3VwU3lzdGVtID09PSB0cnVlIHx8IG1hcmt1cFN5c3RlbSA9PT0gXCJodG1sXCIpIHtcbiAgICAgIHN5c3RlbSA9IFwiaHRtbFwiO1xuICAgIH1cbiAgICByZXR1cm4gc3lzdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIHNwbGl0SHRtbEJsb2Nrcyh0ZXh0KSB7XG4gICAgY29uc3QgcyA9IG5ldyBNYXJrdXBBY2N1bXVsYXRvcih0ZXh0KTtcblxuICAgIGNvbnN0IHBhcnNlRW50aXRpZXMgPSAoY2gpID0+IHtcbiAgICAgIGlmICgvJi8udGVzdChjaCkpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID1cbiAgICAgICAgICBzLnJlcGxhY2Uocy50ZXh0LCBcIiZsdDtcIiwgXCI8XCIpIHx8IHMucmVwbGFjZShzLnRleHQsIFwiJmFtcDtcIiwgXCImXCIpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgcy5hZGQoXCImXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgd2hpbGUgKHMucG9zaXRpb24gPCBzLnRleHQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjaCA9IHMudGV4dC5jaGFyQXQocy5wb3NpdGlvbik7XG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9XG4gICAgICAgIHMucGFyc2VXUyhjaCkgfHxcbiAgICAgICAgKC88Ly50ZXN0KGNoKSAmJlxuICAgICAgICAgIChzLnBhcnNlU3RhcnRUYWcoXCJib2xkXCIsIFwiPGI+XCIpIHx8XG4gICAgICAgICAgICBzLnBhcnNlU3RhcnRUYWcoXCJpdGFsXCIsIFwiPGk+XCIpIHx8XG4gICAgICAgICAgICBzLnBhcnNlU3RhcnRUYWcoXCJtb25vXCIsIFwiPGNvZGU+XCIpIHx8XG4gICAgICAgICAgICBzLnBhcnNlRW5kVGFnKFwiYm9sZFwiLCBcIjwvYj5cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VFbmRUYWcoXCJpdGFsXCIsIFwiPC9pPlwiKSB8fFxuICAgICAgICAgICAgcy5wYXJzZUVuZFRhZyhcIm1vbm9cIiwgXCI8L2NvZGU+XCIpKSkgfHxcbiAgICAgICAgcGFyc2VFbnRpdGllcyhjaCk7XG5cbiAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIHMuYWRkKGNoKTtcbiAgICAgIH1cbiAgICAgIHMucG9zaXRpb24rKztcbiAgICB9XG4gICAgcy5lbWl0QmxvY2soKTtcbiAgICByZXR1cm4gcy5ibG9ja3M7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgc3BsaXRNYXJrZG93bkJsb2Nrcyh0ZXh0KSB7XG4gICAgY29uc3QgcyA9IG5ldyBNYXJrdXBBY2N1bXVsYXRvcih0ZXh0KTtcbiAgICBsZXQgYmVnaW5hYmxlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHBhcnNlT3ZlcnJpZGUgPSAoY2gpID0+IHtcbiAgICAgIGlmICgvXFxcXC8udGVzdChjaCkpIHtcbiAgICAgICAgaWYgKHMucG9zaXRpb24gPCB0aGlzLnRleHQubGVuZ3RoICsgMSkge1xuICAgICAgICAgIHMucG9zaXRpb24rKztcbiAgICAgICAgICBjaCA9IHRoaXMudGV4dC5jaGFyQXQocy5wb3NpdGlvbik7XG4gICAgICAgICAgaWYgKC8gXFx0Ly50ZXN0KGNoKSkge1xuICAgICAgICAgICAgcy5zcGFjaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcy5hZGQoY2gpO1xuICAgICAgICAgICAgYmVnaW5hYmxlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgd2hpbGUgKHMucG9zaXRpb24gPCBzLnRleHQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjaCA9IHMudGV4dC5jaGFyQXQocy5wb3NpdGlvbik7XG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9XG4gICAgICAgIHMucGFyc2VXUyhjaCkgfHxcbiAgICAgICAgcGFyc2VPdmVycmlkZShjaCkgfHxcbiAgICAgICAgKChiZWdpbmFibGUgfHwgcy5zcGFjaW5nKSAmJlxuICAgICAgICAgIChzLnBhcnNlU3RhcnRUYWcoXCJib2xkXCIsIFwiKlwiKSB8fFxuICAgICAgICAgICAgcy5wYXJzZVN0YXJ0VGFnKFwiaXRhbFwiLCBcIl9cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VTdGFydFRhZyhcIm1vbm9cIiwgXCJgXCIpKSkgfHxcbiAgICAgICAgcy5wYXJzZUVuZFRhZyhcImJvbGRcIiwgXCIqXCIsIFwiYWZ0ZXJCb2xkXCIpIHx8XG4gICAgICAgIHMucGFyc2VFbmRUYWcoXCJpdGFsXCIsIFwiX1wiLCBcImFmdGVySXRhbFwiKSB8fFxuICAgICAgICBzLnBhcnNlRW5kVGFnKFwibW9ub1wiLCBcImBcIiwgXCJhZnRlck1vbm9cIik7XG5cbiAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIHMuYWRkKGNoKTtcbiAgICAgICAgYmVnaW5hYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBzLnBvc2l0aW9uKys7XG4gICAgfVxuICAgIHMuZW1pdEJsb2NrKCk7XG4gICAgcmV0dXJuIHMuYmxvY2tzO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxvZGVzIGEgcGllY2Ugb2YgdGV4dCBpbnRvIHNpbmdsZS1mb250IGJsb2NrcyB1c2luZyBhIGdpdmVuIG1hcmt1cFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcGFyYW0ge2Jvb2xlYW58J21kJ3wnbWFya2Rvd24nfCdodG1sJ30gbWFya3VwU3lzdGVtXG4gICAqIEByZXR1cm5zIHtBcnJheS48e3RleHQ6IHN0cmluZywgbW9kOiBzdHJpbmd9Pn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNwbGl0QmxvY2tzKHRleHQsIG1hcmt1cFN5c3RlbSkge1xuICAgIGNvbnN0IHN5c3RlbSA9IHRoaXMuZGVjb2RlTWFya3VwU3lzdGVtKG1hcmt1cFN5c3RlbSk7XG4gICAgaWYgKHN5c3RlbSA9PT0gXCJub25lXCIpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIG1vZDogXCJub3JtYWxcIixcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSBlbHNlIGlmIChzeXN0ZW0gPT09IFwibWFya2Rvd25cIikge1xuICAgICAgcmV0dXJuIHRoaXMuc3BsaXRNYXJrZG93bkJsb2Nrcyh0ZXh0KTtcbiAgICB9IGVsc2UgaWYgKHN5c3RlbSA9PT0gXCJodG1sXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLnNwbGl0SHRtbEJsb2Nrcyh0ZXh0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGV4dCBsZW5ndGggb3ZlciB0aGUgY3VycmVudCBtYXggd2l0aFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb3Zlck1heFdpZHRoKHRleHQpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRleHQpLndpZHRoO1xuICAgIHJldHVybiB0aGlzLmxpbmVzLmN1cldpZHRoKCkgKyB3aWR0aCA+IHRoaXMucGFyZW50LmZvbnRPcHRpb25zLm1heFdkdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGxvbmdlc3QgcGFydCBvZiB0aGUgc2VudGVuY2Ugd2hpY2ggc3RpbGwgZml0cyBpbiB0aGVcbiAgICogY3VycmVudCBtYXggd2lkdGguXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzICBBcnJheSBvZiBzdHJpbmdzIHNpZ25pZnlpbmcgYSB0ZXh0IGxpbmVzXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9ICAgICAgaW5kZXggb2YgZmlyc3QgaXRlbSBpbiBzdHJpbmcgbWFraW5nIHN0cmluZyBnbyBvdmVyIG1heFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0TG9uZ2VzdEZpdCh3b3Jkcykge1xuICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICBsZXQgdyA9IDA7XG5cbiAgICB3aGlsZSAodyA8IHdvcmRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgcHJlID0gdGV4dCA9PT0gXCJcIiA/IFwiXCIgOiBcIiBcIjtcbiAgICAgIGNvbnN0IG5ld1RleHQgPSB0ZXh0ICsgcHJlICsgd29yZHNbd107XG5cbiAgICAgIGlmICh0aGlzLm92ZXJNYXhXaWR0aChuZXdUZXh0KSkgYnJlYWs7XG4gICAgICB0ZXh0ID0gbmV3VGV4dDtcbiAgICAgIHcrKztcbiAgICB9XG5cbiAgICByZXR1cm4gdztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGxvbmdlc3QgcGFydCBvZiB0aGUgc3RyaW5nIHdoaWNoIHN0aWxsIGZpdHMgaW4gdGhlXG4gICAqIGN1cnJlbnQgbWF4IHdpZHRoLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSB3b3JkcyBBcnJheSBvZiBzdHJpbmdzIHNpZ25pZnlpbmcgYSB0ZXh0IGxpbmVzXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IGluZGV4IG9mIGZpcnN0IGl0ZW0gaW4gc3RyaW5nIG1ha2luZyBzdHJpbmcgZ28gb3ZlciBtYXhcbiAgICovXG4gIGdldExvbmdlc3RGaXRXb3JkKHdvcmRzKSB7XG4gICAgbGV0IHcgPSAwO1xuXG4gICAgd2hpbGUgKHcgPCB3b3Jkcy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLm92ZXJNYXhXaWR0aCh3b3Jkcy5zbGljZSgwLCB3KSkpIGJyZWFrO1xuICAgICAgdysrO1xuICAgIH1cblxuICAgIHJldHVybiB3O1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IHRoZSBwYXNzZWQgdGV4dCBpbnRvIGxpbmVzLCBhY2NvcmRpbmcgdG8gd2lkdGggY29uc3RyYWludCAoaWYgYW55KS5cbiAgICpcbiAgICogVGhlIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIGlucHV0IHN0cmluZyBpcyBhIHNpbmdsZSBsaW5lLCBpLmUuIHdpdGhvdXQgbGluZXMgYnJlYWsuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHJldGFpbnMgc3BhY2VzLCBpZiBzdGlsbCBwcmVzZW50IChjYXNlIGBmb250Lm11bHRpOiBmYWxzZWApLlxuICAgKiBBIHNwYWNlIHdoaWNoIGZhbGxzIG9uIGFuIGludGVybmFsIGxpbmUgYnJlYWssIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBuZXdsaW5lLlxuICAgKiBUaGVyZSBpcyBubyBzcGVjaWFsIGhhbmRsaW5nIG9mIHRhYnM7IHRoZXNlIGdvIGFsb25nIHdpdGggdGhlIGZsb3cuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFttb2Q9J25vcm1hbCddXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FwcGVuZExhc3Q9ZmFsc2VdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzcGxpdFN0cmluZ0ludG9MaW5lcyhzdHIsIG1vZCA9IFwibm9ybWFsXCIsIGFwcGVuZExhc3QgPSBmYWxzZSkge1xuICAgIC8vIFNldCB0aGUgY2FudmFzIGNvbnRleHQgZm9udCwgYmFzZWQgdXBvbiB0aGUgY3VycmVudCBzZWxlY3RlZC9ob3ZlciBzdGF0ZVxuICAgIC8vIGFuZCB0aGUgcHJvdmlkZWQgbW9kLCBzbyB0aGUgdGV4dCBtZWFzdXJlbWVudCBwZXJmb3JtZWQgYnkgZ2V0TG9uZ2VzdEZpdFxuICAgIC8vIHdpbGwgYmUgYWNjdXJhdGUgLSBhbmQgbm90IGp1c3QgdXNlIHRoZSBmb250IG9mIHdob2V2ZXIgbGFzdCB1c2VkIHRoZSBjYW52YXMuXG4gICAgdGhpcy5wYXJlbnQuZ2V0Rm9ybWF0dGluZ1ZhbHVlcyh0aGlzLmN0eCwgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3ZlciwgbW9kKTtcblxuICAgIC8vIFN0aWxsLXByZXNlbnQgc3BhY2VzIGFyZSByZWxldmFudCwgcmV0YWluIHRoZW1cbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXiggKykvZywgXCIkMVxcclwiKTtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvKFteXFxyXVteIF0qKSggKykvZywgXCIkMVxcciQyXFxyXCIpO1xuICAgIGxldCB3b3JkcyA9IHN0ci5zcGxpdChcIlxcclwiKTtcblxuICAgIHdoaWxlICh3b3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgdyA9IHRoaXMuZ2V0TG9uZ2VzdEZpdCh3b3Jkcyk7XG5cbiAgICAgIGlmICh3ID09PSAwKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgY2FzZTogdGhlIGZpcnN0IHdvcmQgaXMgYWxyZWFkeSBsYXJnZXIgdGhhbiB0aGUgbWF4IHdpZHRoLlxuICAgICAgICBjb25zdCB3b3JkID0gd29yZHNbMF07XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIHdvcmQgdG8gdGhlIGxhcmdlc3QgcGFydCB0aGF0IGZpdHMgdGhlIGxpbmVcbiAgICAgICAgY29uc3QgeCA9IHRoaXMuZ2V0TG9uZ2VzdEZpdFdvcmQod29yZCk7XG4gICAgICAgIHRoaXMubGluZXMubmV3TGluZSh3b3JkLnNsaWNlKDAsIHgpLCBtb2QpO1xuXG4gICAgICAgIC8vIEFkanVzdCB0aGUgd29yZCwgc28gdGhhdCB0aGUgcmVzdCB3aWxsIGJlIGRvbmUgbmV4dCBpdGVyYXRpb25cbiAgICAgICAgd29yZHNbMF0gPSB3b3JkLnNsaWNlKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc2tpcCBhbnkgc3BhY2UgdGhhdCBpcyByZXBsYWNlZCBieSBhIG5ld2xpbmVcbiAgICAgICAgbGV0IG5ld1cgPSB3O1xuICAgICAgICBpZiAod29yZHNbdyAtIDFdID09PSBcIiBcIikge1xuICAgICAgICAgIHctLTtcbiAgICAgICAgfSBlbHNlIGlmICh3b3Jkc1tuZXdXXSA9PT0gXCIgXCIpIHtcbiAgICAgICAgICBuZXdXKys7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0ID0gd29yZHMuc2xpY2UoMCwgdykuam9pbihcIlwiKTtcblxuICAgICAgICBpZiAodyA9PSB3b3Jkcy5sZW5ndGggJiYgYXBwZW5kTGFzdCkge1xuICAgICAgICAgIHRoaXMubGluZXMuYXBwZW5kKHRleHQsIG1vZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5saW5lcy5uZXdMaW5lKHRleHQsIG1vZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGp1c3QgdGhlIHdvcmQsIHNvIHRoYXQgdGhlIHJlc3Qgd2lsbCBiZSBkb25lIG5leHQgaXRlcmF0aW9uXG4gICAgICAgIHdvcmRzID0gd29yZHMuc2xpY2UobmV3Vyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExhYmVsU3BsaXR0ZXI7XG4iLCAiaW1wb3J0IHsgZGVlcEV4dGVuZCwgZm9yRWFjaCwgb3ZlcnJpZGVPcGFjaXR5LCB0b3BNb3N0IH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgY2hvb3NpZnksIGlzVmFsaWRMYWJlbCB9IGZyb20gXCIuL0NvbXBvbmVudFV0aWxcIjtcbmltcG9ydCBMYWJlbFNwbGl0dGVyIGZyb20gXCIuL0xhYmVsU3BsaXR0ZXJcIjtcblxuLyoqXG4gKiBMaXN0IG9mIHNwZWNpYWwgc3R5bGVzIGZvciBtdWx0aS1mb250c1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IG11bHRpRm9udFN0eWxlID0gW1wiYm9sZFwiLCBcIml0YWxcIiwgXCJib2xkaXRhbFwiLCBcIm1vbm9cIl07XG5cbi8qKlxuICogQSBMYWJlbCB0byBiZSB1c2VkIGZvciBOb2RlcyBvciBFZGdlcy5cbiAqL1xuY2xhc3MgTGFiZWwge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZWRnZWxhYmVsPWZhbHNlXVxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgb3B0aW9ucywgZWRnZWxhYmVsID0gZmFsc2UpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucG9pbnRUb1NlbGYgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2VTaXplID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZm9udE9wdGlvbnMgPSB7fTsgLy8gaW5zdGFuY2UgdmFyaWFibGUgY29udGFpbmluZyB0aGUgKmluc3RhbmNlLWxvY2FsKiBmb250IG9wdGlvbnNcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgdGhpcy5zaXplID0geyB0b3A6IDAsIGxlZnQ6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHlMaW5lOiAwIH07XG4gICAgdGhpcy5pc0VkZ2VMYWJlbCA9IGVkZ2VsYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyB0aGUgb3B0aW9ucyBvZiB0aGUgcGFyZW50IE5vZGUtaW5zdGFuY2VcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMuZWxlbWVudE9wdGlvbnMgPSBvcHRpb25zOyAvLyBSZWZlcmVuY2UgdG8gdGhlIG9wdGlvbnMgb2YgdGhlIHBhcmVudCBOb2RlLWluc3RhbmNlXG5cbiAgICB0aGlzLmluaXRGb250T3B0aW9ucyhvcHRpb25zLmZvbnQpO1xuXG4gICAgaWYgKGlzVmFsaWRMYWJlbChvcHRpb25zLmxhYmVsKSkge1xuICAgICAgdGhpcy5sYWJlbERpcnR5ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQmFkIGxhYmVsISBDaGFuZ2UgdGhlIG9wdGlvbiB2YWx1ZSB0byBwcmV2ZW50IGJhZCBzdHVmZiBoYXBwZW5pbmdcbiAgICAgIG9wdGlvbnMubGFiZWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZm9udCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuZm9udCAhPT0gbnVsbCkge1xuICAgICAgLy8gZm9udCBvcHRpb25zIGNhbiBiZSBkZWxldGVkIGF0IHZhcmlvdXMgbGV2ZWxzXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZm9udCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aGlzLmJhc2VTaXplID0gdGhpcy5mb250T3B0aW9ucy5zaXplO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5mb250ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSBvcHRpb25zLmZvbnQuc2l6ZTtcblxuICAgICAgICBpZiAoc2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5iYXNlU2l6ZSA9IHNpemU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdCB0aGUgZm9udCBPcHRpb25zIHN0cnVjdHVyZS5cbiAgICpcbiAgICogTWVtYmVyIGZvbnRPcHRpb25zIHNlcnZlcyBhcyBhbiBhY2N1bXVsYXRvciBmb3IgdGhlIGN1cnJlbnQgZm9udCBvcHRpb25zLlxuICAgKiBBcyBzdWNoLCBpdCBuZWVkcyB0byBiZSBjb21wbGV0ZWx5IHNlcGFyYXRlZCBmcm9tIHRoZSBub2RlIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdGb250T3B0aW9ucyB0aGUgbmV3IGZvbnQgb3B0aW9ucyB0byBwcm9jZXNzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpbml0Rm9udE9wdGlvbnMobmV3Rm9udE9wdGlvbnMpIHtcbiAgICAvLyBQcmVwYXJlIHRoZSBtdWx0aS1mb250IG9wdGlvbiBvYmplY3RzLlxuICAgIC8vIFRoZXNlIHdpbGwgYmUgZmlsbGVkIGluIHByb3BhZ2F0ZUZvbnRzKCksIGlmIHJlcXVpcmVkXG4gICAgZm9yRWFjaChtdWx0aUZvbnRTdHlsZSwgKHN0eWxlKSA9PiB7XG4gICAgICB0aGlzLmZvbnRPcHRpb25zW3N0eWxlXSA9IHt9O1xuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIHNob3J0aGFuZCBvcHRpb24sIGlmIHByZXNlbnRcbiAgICBpZiAoTGFiZWwucGFyc2VGb250U3RyaW5nKHRoaXMuZm9udE9wdGlvbnMsIG5ld0ZvbnRPcHRpb25zKSkge1xuICAgICAgdGhpcy5mb250T3B0aW9ucy52YWRqdXN0ID0gMDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDb3B5IG92ZXIgdGhlIG5vbi1tdWx0aWZvbnQgb3B0aW9ucywgaWYgc3BlY2lmaWVkXG4gICAgZm9yRWFjaChuZXdGb250T3B0aW9ucywgKHByb3AsIG4pID0+IHtcbiAgICAgIGlmIChwcm9wICE9PSB1bmRlZmluZWQgJiYgcHJvcCAhPT0gbnVsbCAmJiB0eXBlb2YgcHJvcCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aGlzLmZvbnRPcHRpb25zW25dID0gcHJvcDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBpbi12YXJpYWJsZSBpcyBhIHN0cmluZywgcGFyc2UgaXQgYXMgYSBmb250IHNwZWNpZmllci5cbiAgICpcbiAgICogTm90ZSB0aGF0IGZvbGxvd2luZyBpcyBub3QgZG9uZSBoZXJlIGFuZCBoYXZlIHRvIGJlIGRvbmUgYWZ0ZXIgdGhlIGNhbGw6XG4gICAqIC0gTm90IGFsbCBmb250IG9wdGlvbnMgYXJlIHNldCAodmFkanVzdCwgbW9kKVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3V0T3B0aW9ucyAgb3V0LXBhcmFtZXRlciwgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBwYXJzZSByZXN1bHRzIChpZiBhbnkpXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbk9wdGlvbnMgIGZvbnQgb3B0aW9ucyB0byBwYXJzZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBmb250IHBhcnNlZCBhcyBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcGFyc2VGb250U3RyaW5nKG91dE9wdGlvbnMsIGluT3B0aW9ucykge1xuICAgIGlmICghaW5PcHRpb25zIHx8IHR5cGVvZiBpbk9wdGlvbnMgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IG5ld09wdGlvbnNBcnJheSA9IGluT3B0aW9ucy5zcGxpdChcIiBcIik7XG5cbiAgICBvdXRPcHRpb25zLnNpemUgPSArbmV3T3B0aW9uc0FycmF5WzBdLnJlcGxhY2UoXCJweFwiLCBcIlwiKTtcbiAgICBvdXRPcHRpb25zLmZhY2UgPSBuZXdPcHRpb25zQXJyYXlbMV07XG4gICAgb3V0T3B0aW9ucy5jb2xvciA9IG5ld09wdGlvbnNBcnJheVsyXTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgd2lkdGggYW5kIGhlaWdodCBjb25zdHJhaW50cyBiYXNlZCBvbiAnbmVhcmVzdCcgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGlsZSBhcnJheSBvZiBvcHRpb24gb2JqZWN0cyB0byBjb25zaWRlclxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSB0aGUgYWN0dWFsIGNvbnN0cmFpbnQgdmFsdWVzIHRvIHVzZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RyYWluKHBpbGUpIHtcbiAgICAvLyBOT1RFOiBjb25zdHJhaW5XaWR0aCBhbmQgIGNvbnN0cmFpbkhlaWdodCBuZXZlciBzZXQhXG4gICAgLy8gTk9URTogZm9yIGVkZ2UgbGFiZWxzLCBvbmx5ICdtYXhXZHQnIHNldFxuICAgIC8vIE5vZGUgbGFiZWxzIGNhbiBzZXQgYWxsIHRoZSBmaWVsZHNcbiAgICBjb25zdCBmb250T3B0aW9ucyA9IHtcbiAgICAgIGNvbnN0cmFpbldpZHRoOiBmYWxzZSxcbiAgICAgIG1heFdkdDogLTEsXG4gICAgICBtaW5XZHQ6IC0xLFxuICAgICAgY29uc3RyYWluSGVpZ2h0OiBmYWxzZSxcbiAgICAgIG1pbkhndDogLTEsXG4gICAgICB2YWxpZ246IFwibWlkZGxlXCIsXG4gICAgfTtcblxuICAgIGNvbnN0IHdpZHRoQ29uc3RyYWludCA9IHRvcE1vc3QocGlsZSwgXCJ3aWR0aENvbnN0cmFpbnRcIik7XG4gICAgaWYgKHR5cGVvZiB3aWR0aENvbnN0cmFpbnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGZvbnRPcHRpb25zLm1heFdkdCA9IE51bWJlcih3aWR0aENvbnN0cmFpbnQpO1xuICAgICAgZm9udE9wdGlvbnMubWluV2R0ID0gTnVtYmVyKHdpZHRoQ29uc3RyYWludCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygd2lkdGhDb25zdHJhaW50ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjb25zdCB3aWR0aENvbnN0cmFpbnRNYXhpbXVtID0gdG9wTW9zdChwaWxlLCBbXG4gICAgICAgIFwid2lkdGhDb25zdHJhaW50XCIsXG4gICAgICAgIFwibWF4aW11bVwiLFxuICAgICAgXSk7XG4gICAgICBpZiAodHlwZW9mIHdpZHRoQ29uc3RyYWludE1heGltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZm9udE9wdGlvbnMubWF4V2R0ID0gTnVtYmVyKHdpZHRoQ29uc3RyYWludE1heGltdW0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgd2lkdGhDb25zdHJhaW50TWluaW11bSA9IHRvcE1vc3QocGlsZSwgW1xuICAgICAgICBcIndpZHRoQ29uc3RyYWludFwiLFxuICAgICAgICBcIm1pbmltdW1cIixcbiAgICAgIF0pO1xuICAgICAgaWYgKHR5cGVvZiB3aWR0aENvbnN0cmFpbnRNaW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGZvbnRPcHRpb25zLm1pbldkdCA9IE51bWJlcih3aWR0aENvbnN0cmFpbnRNaW5pbXVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoZWlnaHRDb25zdHJhaW50ID0gdG9wTW9zdChwaWxlLCBcImhlaWdodENvbnN0cmFpbnRcIik7XG4gICAgaWYgKHR5cGVvZiBoZWlnaHRDb25zdHJhaW50ID09PSBcIm51bWJlclwiKSB7XG4gICAgICBmb250T3B0aW9ucy5taW5IZ3QgPSBOdW1iZXIoaGVpZ2h0Q29uc3RyYWludCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaGVpZ2h0Q29uc3RyYWludCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgY29uc3QgaGVpZ2h0Q29uc3RyYWludE1pbmltdW0gPSB0b3BNb3N0KHBpbGUsIFtcbiAgICAgICAgXCJoZWlnaHRDb25zdHJhaW50XCIsXG4gICAgICAgIFwibWluaW11bVwiLFxuICAgICAgXSk7XG4gICAgICBpZiAodHlwZW9mIGhlaWdodENvbnN0cmFpbnRNaW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGZvbnRPcHRpb25zLm1pbkhndCA9IE51bWJlcihoZWlnaHRDb25zdHJhaW50TWluaW11bSk7XG4gICAgICB9XG4gICAgICBjb25zdCBoZWlnaHRDb25zdHJhaW50VmFsaWduID0gdG9wTW9zdChwaWxlLCBbXG4gICAgICAgIFwiaGVpZ2h0Q29uc3RyYWludFwiLFxuICAgICAgICBcInZhbGlnblwiLFxuICAgICAgXSk7XG4gICAgICBpZiAodHlwZW9mIGhlaWdodENvbnN0cmFpbnRWYWxpZ24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGhlaWdodENvbnN0cmFpbnRWYWxpZ24gPT09IFwidG9wXCIgfHxcbiAgICAgICAgICBoZWlnaHRDb25zdHJhaW50VmFsaWduID09PSBcImJvdHRvbVwiXG4gICAgICAgICkge1xuICAgICAgICAgIGZvbnRPcHRpb25zLnZhbGlnbiA9IGhlaWdodENvbnN0cmFpbnRWYWxpZ247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm9udE9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG9wdGlvbnMgYW5kIHVwZGF0ZSBpbnRlcm5hbCBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgb3B0aW9ucyB0byBzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gIHBpbGUgICAgIGFycmF5IG9mIG9wdGlvbiBvYmplY3RzIHRvIGNvbnNpZGVyIGZvciBvcHRpb24gJ2Nob3NlbidcbiAgICovXG4gIHVwZGF0ZShvcHRpb25zLCBwaWxlKSB7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMsIHRydWUpO1xuICAgIHRoaXMucHJvcGFnYXRlRm9udHMocGlsZSk7XG4gICAgZGVlcEV4dGVuZCh0aGlzLmZvbnRPcHRpb25zLCB0aGlzLmNvbnN0cmFpbihwaWxlKSk7XG4gICAgdGhpcy5mb250T3B0aW9ucy5jaG9vc2VyID0gY2hvb3NpZnkoXCJsYWJlbFwiLCBwaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIG1hcmdpbnMgYXJlIHNldCBpbiBhbiBlbGVtZW50LCBhZGp1c3Qgc2l6ZXMgaXMgY2FsbGVkIHRvIHJlbW92ZSB0aGVtXG4gICAqIGZyb20gdGhlIHdpZHRoL2hlaWdodCBjb25zdHJhaW50cy4gVGhpcyBtdXN0IGJlIGRvbmUgcHJpb3IgdG8gbGFiZWwgc2l6aW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3t0b3A6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYm90dG9tOiBudW1iZXIsIGxlZnQ6IG51bWJlcn19IG1hcmdpbnNcbiAgICovXG4gIGFkanVzdFNpemVzKG1hcmdpbnMpIHtcbiAgICBjb25zdCB3aWR0aEJpYXMgPSBtYXJnaW5zID8gbWFyZ2lucy5yaWdodCArIG1hcmdpbnMubGVmdCA6IDA7XG4gICAgaWYgKHRoaXMuZm9udE9wdGlvbnMuY29uc3RyYWluV2lkdGgpIHtcbiAgICAgIHRoaXMuZm9udE9wdGlvbnMubWF4V2R0IC09IHdpZHRoQmlhcztcbiAgICAgIHRoaXMuZm9udE9wdGlvbnMubWluV2R0IC09IHdpZHRoQmlhcztcbiAgICB9XG4gICAgY29uc3QgaGVpZ2h0QmlhcyA9IG1hcmdpbnMgPyBtYXJnaW5zLnRvcCArIG1hcmdpbnMuYm90dG9tIDogMDtcbiAgICBpZiAodGhpcy5mb250T3B0aW9ucy5jb25zdHJhaW5IZWlnaHQpIHtcbiAgICAgIHRoaXMuZm9udE9wdGlvbnMubWluSGd0IC09IGhlaWdodEJpYXM7XG4gICAgfVxuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIE1ldGhvZHMgZm9yIGhhbmRsaW5nIG9wdGlvbnMgcGlsZXNcbiAgLy8gRXZlbnR1YWxseSwgdGhlc2Ugd2lsbCBiZSBtb3ZlZCB0byBhIHNlcGFyYXRlIGNsYXNzXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGZvbnQgbWVtYmVycyBvZiB0aGUgcGFzc2VkIGxpc3Qgb2Ygb3B0aW9uIG9iamVjdHMgdG8gdGhlIHBpbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UGlsZX0gZHN0UGlsZSAgcGlsZSBvZiBvcHRpb24gb2JqZWN0cyBhZGQgdG9cbiAgICogQHBhcmFtIHtQaWxlfSBzcmNQaWxlICBwaWxlIG9mIG9wdGlvbiBvYmplY3RzIHRvIHRha2UgZm9udCBvcHRpb25zIGZyb21cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFkZEZvbnRPcHRpb25zVG9QaWxlKGRzdFBpbGUsIHNyY1BpbGUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyY1BpbGUubGVuZ3RoOyArK2kpIHtcbiAgICAgIHRoaXMuYWRkRm9udFRvUGlsZShkc3RQaWxlLCBzcmNQaWxlW2ldKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGdpdmVuIGZvbnQgb3B0aW9uIG9iamVjdCB0byB0aGUgbGlzdCBvZiBvYmplY3RzICh0aGUgJ3BpbGUnKSB0byBjb25zaWRlciBmb3IgZGV0ZXJtaW5pbmdcbiAgICogbXVsdGktZm9udCBvcHRpb24gdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BpbGV9IHBpbGUgIHBpbGUgb2Ygb3B0aW9uIG9iamVjdHMgdG8gdXNlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICBpbnN0YW5jZSB0byBhZGQgdG8gcGlsZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkRm9udFRvUGlsZShwaWxlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIGlmIChvcHRpb25zLmZvbnQgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmZvbnQgPT09IG51bGwpIHJldHVybjtcblxuICAgIGNvbnN0IGl0ZW0gPSBvcHRpb25zLmZvbnQ7XG4gICAgcGlsZS5wdXNoKGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3QgYWxsIG93bi1wcm9wZXJ0eSB2YWx1ZXMgZnJvbSB0aGUgZm9udCBwaWxlIHRoYXQgYXJlbid0IG11bHRpLWZvbnQgb3B0aW9uIG9iamVjdHNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BpbGV9IHBpbGUgIHBpbGUgb2Ygb3B0aW9uIG9iamVjdHMgdG8gdXNlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IG9iamVjdCB3aXRoIGFsbCBjdXJyZW50IG93biBiYXNpYyBmb250IHByb3BlcnRpZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldEJhc2ljT3B0aW9ucyhwaWxlKSB7XG4gICAgY29uc3QgcmV0ID0ge307XG5cbiAgICAvLyBTY2FucyB0aGUgd2hvbGUgcGlsZSB0byBnZXQgYWxsIG9wdGlvbnMgcHJlc2VudFxuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcGlsZS5sZW5ndGg7ICsrbikge1xuICAgICAgbGV0IGZvbnRPcHRpb25zID0gcGlsZVtuXTtcblxuICAgICAgLy8gQ29udmVydCBzaG9ydGhhbmQgaWYgbmVjZXNzYXJ5XG4gICAgICBjb25zdCB0bXBTaG9ydGhhbmQgPSB7fTtcbiAgICAgIGlmIChMYWJlbC5wYXJzZUZvbnRTdHJpbmcodG1wU2hvcnRoYW5kLCBmb250T3B0aW9ucykpIHtcbiAgICAgICAgZm9udE9wdGlvbnMgPSB0bXBTaG9ydGhhbmQ7XG4gICAgICB9XG5cbiAgICAgIGZvckVhY2goZm9udE9wdGlvbnMsIChvcHQsIG5hbWUpID0+IHtcbiAgICAgICAgaWYgKG9wdCA9PT0gdW5kZWZpbmVkKSByZXR1cm47IC8vIG11bHRpLWZvbnQgb3B0aW9uIG5lZWQgbm90IGJlIHByZXNlbnRcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXQsIG5hbWUpKSByZXR1cm47IC8vIEtlZXAgZmlyc3QgdmFsdWUgd2UgZW5jb3VudGVyXG5cbiAgICAgICAgaWYgKG11bHRpRm9udFN0eWxlLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgLy8gU2tpcCBtdWx0aS1mb250IHByb3BlcnRpZXMgYnV0IHdlIGRvIG5lZWQgdGhlIHN0cnVjdHVyZVxuICAgICAgICAgIHJldFtuYW1lXSA9IHt9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldFtuYW1lXSA9IG9wdDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIGZvciBnaXZlbiBvcHRpb24gZm9yIHRoZSBnaXZlbiBtdWx0aS1mb250LlxuICAgKlxuICAgKiBBbGwgYXZhaWxhYmxlIG9wdGlvbiBvYmplY3RzIGFyZSB0cmF3bGVkIGluIHRoZSBzZXQgb3JkZXIgdG8gY29uc3RydWN0IHRoZSBvcHRpb24gdmFsdWVzLlxuICAgKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogIyMgVHJhdmVyc2FsIG9mIHBpbGUgZm9yIG11bHRpLWZvbnRzXG4gICAqXG4gICAqIFRoZSBkZXRlcm1pbmF0aW9uIG9mIG11bHRpLWZvbnQgb3B0aW9uIHZhbHVlcyBpcyBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSBhbnkgdmFsdWVzIG5vdFxuICAgKiBwcmVzZW50IGluIHRoZSBtdWx0aS1mb250IG9wdGlvbnMgc2hvdWxkIGJ5IGRlZmluaXRpb24gYmUgdGFrZW4gZnJvbSB0aGUgbWFpbiBmb250IG9wdGlvbnMsXG4gICAqIGkuZS4gZnJvbSB0aGUgY3VycmVudCAncGFyZW50JyBvYmplY3Qgb2YgdGhlIG11bHRpLWZvbnQgb3B0aW9uLlxuICAgKlxuICAgKiAjIyMgU2VhcmNoIG9yZGVyIGZvciBtdWx0aS1mb250c1xuICAgKlxuICAgKiAnYm9sZCcgdXNlZCBhcyBleGFtcGxlOlxuICAgKlxuICAgKiAgIC0gc2VhcmNoIGluIG9wdGlvbiBncm91cCAnYm9sZCcgaW4gbG9jYWwgcHJvcGVydGllc1xuICAgKiAgIC0gc2VhcmNoIGluIG1haW4gZm9udCBvcHRpb24gZ3JvdXAgaW4gbG9jYWwgcHJvcGVydGllc1xuICAgKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICpcbiAgICogQHBhcmFtIHtQaWxlfSBwaWxlICBwaWxlIG9mIG9wdGlvbiBvYmplY3RzIHRvIHVzZVxuICAgKiBAcGFyYW0ge011bHRpRm9udFN0eWxlfSBtdWx0aU5hbWUgc3ViIHBhdGggZm9yIHRoZSBtdWx0aS1mb250XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb24gIHRoZSBvcHRpb24gdG8gc2VhcmNoIGZvciwgZm9yIHRoZSBnaXZlbiBtdWx0aS1mb250XG4gICAqIEByZXR1cm5zIHtzdHJpbmd8bnVtYmVyfSB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldEZvbnRPcHRpb24ocGlsZSwgbXVsdGlOYW1lLCBvcHRpb24pIHtcbiAgICBsZXQgbXVsdGlGb250O1xuXG4gICAgLy8gU2VhcmNoIG11bHRpIGZvbnQgaW4gbG9jYWwgcHJvcGVydGllc1xuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcGlsZS5sZW5ndGg7ICsrbikge1xuICAgICAgY29uc3QgZm9udE9wdGlvbnMgPSBwaWxlW25dO1xuXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZvbnRPcHRpb25zLCBtdWx0aU5hbWUpKSB7XG4gICAgICAgIG11bHRpRm9udCA9IGZvbnRPcHRpb25zW211bHRpTmFtZV07XG4gICAgICAgIGlmIChtdWx0aUZvbnQgPT09IHVuZGVmaW5lZCB8fCBtdWx0aUZvbnQgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIENvbnZlcnQgc2hvcnRoYW5kIGlmIG5lY2Vzc2FyeVxuICAgICAgICAvLyBUT0RPOiBpbmVmZmljaWVudCB0byBkbyB0aGlzIGNvbnZlcnNpb24gZXZlcnkgdGltZTsgZmluZCBhIGJldHRlciB3YXkuXG4gICAgICAgIGNvbnN0IHRtcFNob3J0aGFuZCA9IHt9O1xuICAgICAgICBpZiAoTGFiZWwucGFyc2VGb250U3RyaW5nKHRtcFNob3J0aGFuZCwgbXVsdGlGb250KSkge1xuICAgICAgICAgIG11bHRpRm9udCA9IHRtcFNob3J0aGFuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobXVsdGlGb250LCBvcHRpb24pKSB7XG4gICAgICAgICAgcmV0dXJuIG11bHRpRm9udFtvcHRpb25dO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3B0aW9uIGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlIG11bHRpIGZvbnQgb3B0aW9uczsgdGFrZSBpdCBmcm9tIHRoZSBwYXJlbnQgZm9udCBvcHRpb25zLlxuICAgIC8vIFRoZXNlIGhhdmUgYWxyZWFkeSBiZWVuIGNvbnZlcnRlZCB3aXRoIGdldEJhc2ljT3B0aW9ucygpLCBzbyB1c2UgdGhlIGNvbnZlcnRlZCB2YWx1ZXMuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmZvbnRPcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb250T3B0aW9uc1tvcHRpb25dO1xuICAgIH1cblxuICAgIC8vIEEgdmFsdWUgKiptdXN0KiogYmUgZm91bmQ7IHlvdSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJEaWQgbm90IGZpbmQgdmFsdWUgZm9yIG11bHRpLWZvbnQgZm9yIHByb3BlcnR5OiAnXCIgKyBvcHRpb24gKyBcIidcIlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBvcHRpb25zIHZhbHVlcyBmb3IgdGhlIGdpdmVuIG11bHRpLWZvbnQuXG4gICAqXG4gICAqIEFsbCBhdmFpbGFibGUgb3B0aW9uIG9iamVjdHMgYXJlIHRyYXdsZWQgaW4gdGhlIHNldCBvcmRlciB0byBjb25zdHJ1Y3QgdGhlIG9wdGlvbiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UGlsZX0gcGlsZSAgcGlsZSBvZiBvcHRpb24gb2JqZWN0cyB0byB1c2VcbiAgICogQHBhcmFtIHtNdWx0aUZvbnRTdHlsZX0gbXVsdGlOYW1lIHN1YiBwYXRoIGZvciB0aGUgbW9kLWZvbnRcbiAgICogQHJldHVybnMge011bHRpRm9udE9wdGlvbnN9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRGb250T3B0aW9ucyhwaWxlLCBtdWx0aU5hbWUpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCBvcHRpb25OYW1lcyA9IFtcImNvbG9yXCIsIFwic2l6ZVwiLCBcImZhY2VcIiwgXCJtb2RcIiwgXCJ2YWRqdXN0XCJdOyAvLyBMaXN0IG9mIGFsbG93ZWQgb3B0aW9ucyBwZXIgbXVsdGktZm9udFxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25OYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgbW9kID0gb3B0aW9uTmFtZXNbaV07XG4gICAgICByZXN1bHRbbW9kXSA9IHRoaXMuZ2V0Rm9udE9wdGlvbihwaWxlLCBtdWx0aU5hbWUsIG1vZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBFbmQgbWV0aG9kcyBmb3IgaGFuZGxpbmcgb3B0aW9ucyBwaWxlc1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICogQ29sbGFwc2UgdGhlIGZvbnQgb3B0aW9ucyBmb3IgdGhlIG11bHRpLWZvbnQgdG8gc2luZ2xlIG9iamVjdHMsIGZyb21cbiAgICogdGhlIGNoYWluIG9mIG9wdGlvbiBvYmplY3RzIHBhc3NlZCAodGhlICdwaWxlJykuXG4gICAqXG4gICAqIEBwYXJhbSB7UGlsZX0gcGlsZSAgc2VxdWVuY2Ugb2Ygb3B0aW9uIG9iamVjdHMgdG8gY29uc2lkZXIuXG4gICAqICAgICAgICAgICAgICAgICAgICAgRmlyc3QgaXRlbSBpbiBsaXN0IGFzc3VtZWQgdG8gYmUgdGhlIG5ld2x5IHNldCBvcHRpb25zLlxuICAgKi9cbiAgcHJvcGFnYXRlRm9udHMocGlsZSkge1xuICAgIGNvbnN0IGZvbnRQaWxlID0gW107IC8vIHNlcXVlbmNlIG9mIGZvbnQgb2JqZWN0cyB0byBjb25zaWRlciwgb3JkZXIgaW1wb3J0YW50XG5cbiAgICAvLyBOb3RlIHRoYXQgdGhpcy5lbGVtZW50T3B0aW9ucyBpcyBub3QgdXNlZCBoZXJlLlxuICAgIHRoaXMuYWRkRm9udE9wdGlvbnNUb1BpbGUoZm9udFBpbGUsIHBpbGUpO1xuICAgIHRoaXMuZm9udE9wdGlvbnMgPSB0aGlzLmdldEJhc2ljT3B0aW9ucyhmb250UGlsZSk7XG5cbiAgICAvLyBXZSBzZXQgbXVsdGlmb250IHZhbHVlcyBldmVuIGlmIG11bHRpID09PSBmYWxzZSwgZm9yIGNvbnNpc3RlbmN5ICh0aGluZ3MgYnJlYWsgb3RoZXJ3aXNlKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXVsdGlGb250U3R5bGUubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IG1vZCA9IG11bHRpRm9udFN0eWxlW2ldO1xuICAgICAgY29uc3QgbW9kT3B0aW9ucyA9IHRoaXMuZm9udE9wdGlvbnNbbW9kXTtcbiAgICAgIGNvbnN0IHRtcE11bHRpRm9udE9wdGlvbnMgPSB0aGlzLmdldEZvbnRPcHRpb25zKGZvbnRQaWxlLCBtb2QpO1xuXG4gICAgICAvLyBDb3B5IG92ZXIgZm91bmQgdmFsdWVzXG4gICAgICBmb3JFYWNoKHRtcE11bHRpRm9udE9wdGlvbnMsIChvcHRpb24sIG4pID0+IHtcbiAgICAgICAgbW9kT3B0aW9uc1tuXSA9IG9wdGlvbjtcbiAgICAgIH0pO1xuXG4gICAgICBtb2RPcHRpb25zLnNpemUgPSBOdW1iZXIobW9kT3B0aW9ucy5zaXplKTtcbiAgICAgIG1vZE9wdGlvbnMudmFkanVzdCA9IE51bWJlcihtb2RPcHRpb25zLnZhZGp1c3QpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWluIGZ1bmN0aW9uLiBUaGlzIGlzIGNhbGxlZCBmcm9tIGFueXRoaW5nIHRoYXQgd2FudHMgdG8gZHJhdyBhIGxhYmVsLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Jhc2VsaW5lPSdtaWRkbGUnXVxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgYmFzZWxpbmUgPSBcIm1pZGRsZVwiKSB7XG4gICAgLy8gaWYgbm8gbGFiZWwsIHJldHVyblxuICAgIGlmICh0aGlzLmVsZW1lbnRPcHRpb25zLmxhYmVsID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgdG8gcmVuZGVyIHRoZSBsYWJlbFxuICAgIGxldCB2aWV3Rm9udFNpemUgPSB0aGlzLmZvbnRPcHRpb25zLnNpemUgKiB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmVsZW1lbnRPcHRpb25zLmxhYmVsICYmXG4gICAgICB2aWV3Rm9udFNpemUgPCB0aGlzLmVsZW1lbnRPcHRpb25zLnNjYWxpbmcubGFiZWwuZHJhd1RocmVzaG9sZCAtIDFcbiAgICApXG4gICAgICByZXR1cm47XG5cbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB0aGVyZSB3aWxsIG5vdCBiZSBIVUdFIGxldHRlcnMgb24gc2NyZWVuXG4gICAgLy8gYnkgc2V0dGluZyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgdmlzaWJsZSB0ZXh0IHNpemUgKHJlZ2FyZGxlc3Mgb2Ygem9vbUxldmVsKVxuICAgIGlmICh2aWV3Rm9udFNpemUgPj0gdGhpcy5lbGVtZW50T3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1heFZpc2libGUpIHtcbiAgICAgIHZpZXdGb250U2l6ZSA9XG4gICAgICAgIE51bWJlcih0aGlzLmVsZW1lbnRPcHRpb25zLnNjYWxpbmcubGFiZWwubWF4VmlzaWJsZSkgL1xuICAgICAgICB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNpemUgY2FjaGUgaWYgcmVxdWlyZWRcbiAgICB0aGlzLmNhbGN1bGF0ZUxhYmVsU2l6ZShjdHgsIHNlbGVjdGVkLCBob3ZlciwgeCwgeSwgYmFzZWxpbmUpO1xuICAgIHRoaXMuX2RyYXdCYWNrZ3JvdW5kKGN0eCk7XG4gICAgdGhpcy5fZHJhd1RleHQoY3R4LCB4LCB0aGlzLnNpemUueUxpbmUsIGJhc2VsaW5lLCB2aWV3Rm9udFNpemUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyYXdzIHRoZSBsYWJlbCBiYWNrZ3JvdW5kXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3QmFja2dyb3VuZChjdHgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvbnRPcHRpb25zLmJhY2tncm91bmQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5mb250T3B0aW9ucy5iYWNrZ3JvdW5kICE9PSBcIm5vbmVcIlxuICAgICkge1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuZm9udE9wdGlvbnMuYmFja2dyb3VuZDtcbiAgICAgIGNvbnN0IHNpemUgPSB0aGlzLmdldFNpemUoKTtcbiAgICAgIGN0eC5maWxsUmVjdChzaXplLmxlZnQsIHNpemUudG9wLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtiYXNlbGluZT0nbWlkZGxlJ11cbiAgICogQHBhcmFtIHtudW1iZXJ9IHZpZXdGb250U2l6ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdUZXh0KGN0eCwgeCwgeSwgYmFzZWxpbmUgPSBcIm1pZGRsZVwiLCB2aWV3Rm9udFNpemUpIHtcbiAgICBbeCwgeV0gPSB0aGlzLl9zZXRBbGlnbm1lbnQoY3R4LCB4LCB5LCBiYXNlbGluZSk7XG5cbiAgICBjdHgudGV4dEFsaWduID0gXCJsZWZ0XCI7XG4gICAgeCA9IHggLSB0aGlzLnNpemUud2lkdGggLyAyOyAvLyBTaGlmdCBsYWJlbCAxLzItZGlzdGFuY2UgdG8gdGhlIGxlZnRcbiAgICBpZiAodGhpcy5mb250T3B0aW9ucy52YWxpZ24gJiYgdGhpcy5zaXplLmhlaWdodCA+IHRoaXMuc2l6ZS5sYWJlbEhlaWdodCkge1xuICAgICAgaWYgKHRoaXMuZm9udE9wdGlvbnMudmFsaWduID09PSBcInRvcFwiKSB7XG4gICAgICAgIHkgLT0gKHRoaXMuc2l6ZS5oZWlnaHQgLSB0aGlzLnNpemUubGFiZWxIZWlnaHQpIC8gMjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLnZhbGlnbiA9PT0gXCJib3R0b21cIikge1xuICAgICAgICB5ICs9ICh0aGlzLnNpemUuaGVpZ2h0IC0gdGhpcy5zaXplLmxhYmVsSGVpZ2h0KSAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZHJhdyB0aGUgdGV4dFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5saW5lQ291bnQ7IGkrKykge1xuICAgICAgY29uc3QgbGluZSA9IHRoaXMubGluZXNbaV07XG4gICAgICBpZiAobGluZSAmJiBsaW5lLmJsb2Nrcykge1xuICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICBpZiAodGhpcy5pc0VkZ2VMYWJlbCB8fCB0aGlzLmZvbnRPcHRpb25zLmFsaWduID09PSBcImNlbnRlclwiKSB7XG4gICAgICAgICAgd2lkdGggKz0gKHRoaXMuc2l6ZS53aWR0aCAtIGxpbmUud2lkdGgpIC8gMjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZvbnRPcHRpb25zLmFsaWduID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICB3aWR0aCArPSB0aGlzLnNpemUud2lkdGggLSBsaW5lLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGluZS5ibG9ja3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBibG9jayA9IGxpbmUuYmxvY2tzW2pdO1xuICAgICAgICAgIGN0eC5mb250ID0gYmxvY2suZm9udDtcbiAgICAgICAgICBjb25zdCBbZm9udENvbG9yLCBzdHJva2VDb2xvcl0gPSB0aGlzLl9nZXRDb2xvcihcbiAgICAgICAgICAgIGJsb2NrLmNvbG9yLFxuICAgICAgICAgICAgdmlld0ZvbnRTaXplLFxuICAgICAgICAgICAgYmxvY2suc3Ryb2tlQ29sb3JcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChibG9jay5zdHJva2VXaWR0aCA+IDApIHtcbiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBibG9jay5zdHJva2VXaWR0aDtcbiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZUNvbG9yO1xuICAgICAgICAgICAgY3R4LmxpbmVKb2luID0gXCJyb3VuZFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gZm9udENvbG9yO1xuXG4gICAgICAgICAgaWYgKGJsb2NrLnN0cm9rZVdpZHRoID4gMCkge1xuICAgICAgICAgICAgY3R4LnN0cm9rZVRleHQoYmxvY2sudGV4dCwgeCArIHdpZHRoLCB5ICsgYmxvY2sudmFkanVzdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN0eC5maWxsVGV4dChibG9jay50ZXh0LCB4ICsgd2lkdGgsIHkgKyBibG9jay52YWRqdXN0KTtcbiAgICAgICAgICB3aWR0aCArPSBibG9jay53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICB5ICs9IGxpbmUuaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlbGluZVxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QWxpZ25tZW50KGN0eCwgeCwgeSwgYmFzZWxpbmUpIHtcbiAgICAvLyBjaGVjayBmb3IgbGFiZWwgYWxpZ25tZW50IChmb3IgZWRnZXMpXG4gICAgLy8gVE9ETzogbWFrZSBhbGlnbm1lbnQgZm9yIG5vZGVzXG4gICAgaWYgKFxuICAgICAgdGhpcy5pc0VkZ2VMYWJlbCAmJlxuICAgICAgdGhpcy5mb250T3B0aW9ucy5hbGlnbiAhPT0gXCJob3Jpem9udGFsXCIgJiZcbiAgICAgIHRoaXMucG9pbnRUb1NlbGYgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICB4ID0gMDtcbiAgICAgIHkgPSAwO1xuXG4gICAgICBjb25zdCBsaW5lTWFyZ2luID0gMjtcbiAgICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLmFsaWduID09PSBcInRvcFwiKSB7XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSBcImFscGhhYmV0aWNcIjtcbiAgICAgICAgeSAtPSAyICogbGluZU1hcmdpbjsgLy8gZGlzdGFuY2UgZnJvbSBlZGdlLCByZXF1aXJlZCBiZWNhdXNlIHdlIHVzZSBhbHBoYWJldGljLiBBbHBoYWJldGljIGhhcyBsZXNzIGRpZmZlcmVuY2UgYmV0d2VlbiBicm93c2Vyc1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmZvbnRPcHRpb25zLmFsaWduID09PSBcImJvdHRvbVwiKSB7XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSBcImhhbmdpbmdcIjtcbiAgICAgICAgeSArPSAyICogbGluZU1hcmdpbjsgLy8gZGlzdGFuY2UgZnJvbSBlZGdlLCByZXF1aXJlZCBiZWNhdXNlIHdlIHVzZSBoYW5naW5nLiBIYW5naW5nIGhhcyBsZXNzIGRpZmZlcmVuY2UgYmV0d2VlbiBicm93c2Vyc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSBiYXNlbGluZTtcbiAgICB9XG4gICAgcmV0dXJuIFt4LCB5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBmYWRlIGluIHdoZW4gcmVsYXRpdmUgc2NhbGUgaXMgYmV0d2VlbiB0aHJlc2hvbGQgYW5kIHRocmVzaG9sZCAtIDEuXG4gICAqIElmIHRoZSByZWxhdGl2ZSBzY2FsZSB3b3VsZCBiZSBzbWFsbGVyIHRoYW4gdGhyZXNob2xkIC0xIHRoZSBkcmF3IGZ1bmN0aW9uIHdvdWxkIGhhdmUgcmV0dXJuZWQgYmVmb3JlIGNvbWluZyBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgIFRoZSBmb250IGNvbG9yIHRvIHVzZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmlld0ZvbnRTaXplXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbml0aWFsU3Ryb2tlQ29sb3JcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBmb250IGNvbG9yIGFuZCBzdHJva2UgY29sb3JcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRDb2xvcihjb2xvciwgdmlld0ZvbnRTaXplLCBpbml0aWFsU3Ryb2tlQ29sb3IpIHtcbiAgICBsZXQgZm9udENvbG9yID0gY29sb3IgfHwgXCIjMDAwMDAwXCI7XG4gICAgbGV0IHN0cm9rZUNvbG9yID0gaW5pdGlhbFN0cm9rZUNvbG9yIHx8IFwiI2ZmZmZmZlwiO1xuICAgIGlmICh2aWV3Rm9udFNpemUgPD0gdGhpcy5lbGVtZW50T3B0aW9ucy5zY2FsaW5nLmxhYmVsLmRyYXdUaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBNYXRoLm1heChcbiAgICAgICAgMCxcbiAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgMSxcbiAgICAgICAgICAxIC0gKHRoaXMuZWxlbWVudE9wdGlvbnMuc2NhbGluZy5sYWJlbC5kcmF3VGhyZXNob2xkIC0gdmlld0ZvbnRTaXplKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgZm9udENvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KGZvbnRDb2xvciwgb3BhY2l0eSk7XG4gICAgICBzdHJva2VDb2xvciA9IG92ZXJyaWRlT3BhY2l0eShzdHJva2VDb2xvciwgb3BhY2l0eSk7XG4gICAgfVxuICAgIHJldHVybiBbZm9udENvbG9yLCBzdHJva2VDb2xvcl07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHJldHVybnMge3t3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcn19XG4gICAqL1xuICBnZXRUZXh0U2l6ZShjdHgsIHNlbGVjdGVkID0gZmFsc2UsIGhvdmVyID0gZmFsc2UpIHtcbiAgICB0aGlzLl9wcm9jZXNzTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogdGhpcy5zaXplLndpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLnNpemUuaGVpZ2h0LFxuICAgICAgbGluZUNvdW50OiB0aGlzLmxpbmVDb3VudCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBkaW1lbnNpb25zIG9mIHRoZSBsYWJlbFxuICAgKlxuICAgKiBAcmV0dXJucyB7cmVjdH1cbiAgICovXG4gIGdldFNpemUoKSB7XG4gICAgY29uc3QgbGluZU1hcmdpbiA9IDI7XG4gICAgbGV0IHggPSB0aGlzLnNpemUubGVmdDsgLy8gZGVmYXVsdCB2YWx1ZXMgd2hpY2ggbWlnaHQgYmUgb3ZlcnJpZGRlbiBiZWxvd1xuICAgIGxldCB5ID0gdGhpcy5zaXplLnRvcCAtIDAuNSAqIGxpbmVNYXJnaW47IC8vIGlkZW1cblxuICAgIGlmICh0aGlzLmlzRWRnZUxhYmVsKSB7XG4gICAgICBjb25zdCB4MiA9IC10aGlzLnNpemUud2lkdGggKiAwLjU7XG5cbiAgICAgIHN3aXRjaCAodGhpcy5mb250T3B0aW9ucy5hbGlnbikge1xuICAgICAgICBjYXNlIFwibWlkZGxlXCI6XG4gICAgICAgICAgeCA9IHgyO1xuICAgICAgICAgIHkgPSAtdGhpcy5zaXplLmhlaWdodCAqIDAuNTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRvcFwiOlxuICAgICAgICAgIHggPSB4MjtcbiAgICAgICAgICB5ID0gLSh0aGlzLnNpemUuaGVpZ2h0ICsgbGluZU1hcmdpbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJib3R0b21cIjpcbiAgICAgICAgICB4ID0geDI7XG4gICAgICAgICAgeSA9IGxpbmVNYXJnaW47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0ge1xuICAgICAgbGVmdDogeCxcbiAgICAgIHRvcDogeSxcbiAgICAgIHdpZHRoOiB0aGlzLnNpemUud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuc2l6ZS5oZWlnaHQsXG4gICAgfTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXVxuICAgKiBAcGFyYW0geydtaWRkbGUnfCdoYW5naW5nJ30gW2Jhc2VsaW5lPSdtaWRkbGUnXVxuICAgKi9cbiAgY2FsY3VsYXRlTGFiZWxTaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyLCB4ID0gMCwgeSA9IDAsIGJhc2VsaW5lID0gXCJtaWRkbGVcIikge1xuICAgIHRoaXMuX3Byb2Nlc3NMYWJlbChjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5zaXplLmxlZnQgPSB4IC0gdGhpcy5zaXplLndpZHRoICogMC41O1xuICAgIHRoaXMuc2l6ZS50b3AgPSB5IC0gdGhpcy5zaXplLmhlaWdodCAqIDAuNTtcbiAgICB0aGlzLnNpemUueUxpbmUgPSB5ICsgKDEgLSB0aGlzLmxpbmVDb3VudCkgKiAwLjUgKiB0aGlzLmZvbnRPcHRpb25zLnNpemU7XG4gICAgaWYgKGJhc2VsaW5lID09PSBcImhhbmdpbmdcIikge1xuICAgICAgdGhpcy5zaXplLnRvcCArPSAwLjUgKiB0aGlzLmZvbnRPcHRpb25zLnNpemU7XG4gICAgICB0aGlzLnNpemUudG9wICs9IDQ7IC8vIGRpc3RhbmNlIGZyb20gbm9kZSwgcmVxdWlyZWQgYmVjYXVzZSB3ZSB1c2UgaGFuZ2luZy4gSGFuZ2luZyBoYXMgbGVzcyBkaWZmZXJlbmNlIGJldHdlZW4gYnJvd3NlcnNcbiAgICAgIHRoaXMuc2l6ZS55TGluZSArPSA0OyAvLyBkaXN0YW5jZSBmcm9tIG5vZGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZFxuICAgKiBAcmV0dXJucyB7e2NvbG9yLCBzaXplLCBmYWNlLCBtb2QsIHZhZGp1c3QsIHN0cm9rZVdpZHRoOiAqLCBzdHJva2VDb2xvcjogKCp8c3RyaW5nfGFsbE9wdGlvbnMuZWRnZXMuZm9udC5zdHJva2VDb2xvcnx7c3RyaW5nfXxhbGxPcHRpb25zLm5vZGVzLmZvbnQuc3Ryb2tlQ29sb3J8QXJyYXkpfX1cbiAgICovXG4gIGdldEZvcm1hdHRpbmdWYWx1ZXMoY3R4LCBzZWxlY3RlZCwgaG92ZXIsIG1vZCkge1xuICAgIGNvbnN0IGdldFZhbHVlID0gZnVuY3Rpb24gKGZvbnRPcHRpb25zLCBtb2QsIG9wdGlvbikge1xuICAgICAgaWYgKG1vZCA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICBpZiAob3B0aW9uID09PSBcIm1vZFwiKSByZXR1cm4gXCJcIjtcbiAgICAgICAgcmV0dXJuIGZvbnRPcHRpb25zW29wdGlvbl07XG4gICAgICB9XG5cbiAgICAgIGlmIChmb250T3B0aW9uc1ttb2RdW29wdGlvbl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBHcnVtYmwgbGVhdmluZyBvdXQgdGVzdCBvbiB1bmRlZmluZWQgZXF1YWxzIGZhbHNlIGZvciBcIlwiXG4gICAgICAgIHJldHVybiBmb250T3B0aW9uc1ttb2RdW29wdGlvbl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUYWtlIGZyb20gcGFyZW50IGZvbnQgb3B0aW9uXG4gICAgICAgIHJldHVybiBmb250T3B0aW9uc1tvcHRpb25dO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB2YWx1ZXMgPSB7XG4gICAgICBjb2xvcjogZ2V0VmFsdWUodGhpcy5mb250T3B0aW9ucywgbW9kLCBcImNvbG9yXCIpLFxuICAgICAgc2l6ZTogZ2V0VmFsdWUodGhpcy5mb250T3B0aW9ucywgbW9kLCBcInNpemVcIiksXG4gICAgICBmYWNlOiBnZXRWYWx1ZSh0aGlzLmZvbnRPcHRpb25zLCBtb2QsIFwiZmFjZVwiKSxcbiAgICAgIG1vZDogZ2V0VmFsdWUodGhpcy5mb250T3B0aW9ucywgbW9kLCBcIm1vZFwiKSxcbiAgICAgIHZhZGp1c3Q6IGdldFZhbHVlKHRoaXMuZm9udE9wdGlvbnMsIG1vZCwgXCJ2YWRqdXN0XCIpLFxuICAgICAgc3Ryb2tlV2lkdGg6IHRoaXMuZm9udE9wdGlvbnMuc3Ryb2tlV2lkdGgsXG4gICAgICBzdHJva2VDb2xvcjogdGhpcy5mb250T3B0aW9ucy5zdHJva2VDb2xvcixcbiAgICB9O1xuICAgIGlmIChzZWxlY3RlZCB8fCBob3Zlcikge1xuICAgICAgaWYgKFxuICAgICAgICBtb2QgPT09IFwibm9ybWFsXCIgJiZcbiAgICAgICAgdGhpcy5mb250T3B0aW9ucy5jaG9vc2VyID09PSB0cnVlICYmXG4gICAgICAgIHRoaXMuZWxlbWVudE9wdGlvbnMubGFiZWxIaWdobGlnaHRCb2xkXG4gICAgICApIHtcbiAgICAgICAgdmFsdWVzLm1vZCA9IFwiYm9sZFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvbnRPcHRpb25zLmNob29zZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHRoaXMuZm9udE9wdGlvbnMuY2hvb3NlcihcbiAgICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudE9wdGlvbnMuaWQsXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgIGhvdmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmb250U3RyaW5nID0gXCJcIjtcbiAgICBpZiAodmFsdWVzLm1vZCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlcy5tb2QgIT09IFwiXCIpIHtcbiAgICAgIC8vIHNhZmVndWFyZCBmb3IgdW5kZWZpbmVkIC0gdGhpcyBoYXBwZW5lZFxuICAgICAgZm9udFN0cmluZyArPSB2YWx1ZXMubW9kICsgXCIgXCI7XG4gICAgfVxuICAgIGZvbnRTdHJpbmcgKz0gdmFsdWVzLnNpemUgKyBcInB4IFwiICsgdmFsdWVzLmZhY2U7XG5cbiAgICBjdHguZm9udCA9IGZvbnRTdHJpbmcucmVwbGFjZSgvXCIvZywgXCJcIik7XG4gICAgdmFsdWVzLmZvbnQgPSBjdHguZm9udDtcbiAgICB2YWx1ZXMuaGVpZ2h0ID0gdmFsdWVzLnNpemU7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBkaWZmZXJlbnRTdGF0ZShzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICByZXR1cm4gc2VsZWN0ZWQgIT09IHRoaXMuc2VsZWN0ZWRTdGF0ZSB8fCBob3ZlciAhPT0gdGhpcy5ob3ZlclN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXhwbG9kZXMgdGhlIHBhc3NlZCB0ZXh0IGludG8gbGluZXMgYW5kIGRldGVybWluZXMgdGhlIHdpZHRoLCBoZWlnaHQgYW5kIG51bWJlciBvZiBsaW5lcy5cbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGluVGV4dCAgdGhlIHRleHQgdG8gZXhwbG9kZVxuICAgKiBAcmV0dXJucyB7e3dpZHRoLCBoZWlnaHQsIGxpbmVzfXwqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Byb2Nlc3NMYWJlbFRleHQoY3R4LCBzZWxlY3RlZCwgaG92ZXIsIGluVGV4dCkge1xuICAgIGNvbnN0IHNwbGl0dGVyID0gbmV3IExhYmVsU3BsaXR0ZXIoY3R4LCB0aGlzLCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHJldHVybiBzcGxpdHRlci5wcm9jZXNzKGluVGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBleHBsb2RlcyB0aGUgbGFiZWwgc3RyaW5nIGludG8gbGluZXMgYW5kIHNldHMgdGhlIHdpZHRoLCBoZWlnaHQgYW5kIG51bWJlciBvZiBsaW5lcy5cbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcm9jZXNzTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAodGhpcy5sYWJlbERpcnR5ID09PSBmYWxzZSAmJiAhdGhpcy5kaWZmZXJlbnRTdGF0ZShzZWxlY3RlZCwgaG92ZXIpKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9wcm9jZXNzTGFiZWxUZXh0KFxuICAgICAgY3R4LFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBob3ZlcixcbiAgICAgIHRoaXMuZWxlbWVudE9wdGlvbnMubGFiZWxcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuZm9udE9wdGlvbnMubWluV2R0ID4gMCAmJiBzdGF0ZS53aWR0aCA8IHRoaXMuZm9udE9wdGlvbnMubWluV2R0KSB7XG4gICAgICBzdGF0ZS53aWR0aCA9IHRoaXMuZm9udE9wdGlvbnMubWluV2R0O1xuICAgIH1cblxuICAgIHRoaXMuc2l6ZS5sYWJlbEhlaWdodCA9IHN0YXRlLmhlaWdodDtcbiAgICBpZiAodGhpcy5mb250T3B0aW9ucy5taW5IZ3QgPiAwICYmIHN0YXRlLmhlaWdodCA8IHRoaXMuZm9udE9wdGlvbnMubWluSGd0KSB7XG4gICAgICBzdGF0ZS5oZWlnaHQgPSB0aGlzLmZvbnRPcHRpb25zLm1pbkhndDtcbiAgICB9XG5cbiAgICB0aGlzLmxpbmVzID0gc3RhdGUubGluZXM7XG4gICAgdGhpcy5saW5lQ291bnQgPSBzdGF0ZS5saW5lcy5sZW5ndGg7XG4gICAgdGhpcy5zaXplLndpZHRoID0gc3RhdGUud2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IHN0YXRlLmhlaWdodDtcbiAgICB0aGlzLnNlbGVjdGVkU3RhdGUgPSBzZWxlY3RlZDtcbiAgICB0aGlzLmhvdmVyU3RhdGUgPSBob3ZlcjtcblxuICAgIHRoaXMubGFiZWxEaXJ0eSA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgbGFiZWwgaXMgdmlzaWJsZVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGlzIGxhYmVsIHdpbGwgYmUgc2hvdywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICB2aXNpYmxlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc2l6ZS53aWR0aCA9PT0gMCB8fFxuICAgICAgdGhpcy5zaXplLmhlaWdodCA9PT0gMCB8fFxuICAgICAgdGhpcy5lbGVtZW50T3B0aW9ucy5sYWJlbCA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7IC8vIG5vdGhpbmcgdG8gZGlzcGxheVxuICAgIH1cblxuICAgIGNvbnN0IHZpZXdGb250U2l6ZSA9IHRoaXMuZm9udE9wdGlvbnMuc2l6ZSAqIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgIGlmICh2aWV3Rm9udFNpemUgPCB0aGlzLmVsZW1lbnRPcHRpb25zLnNjYWxpbmcubGFiZWwuZHJhd1RocmVzaG9sZCAtIDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gVG9vIHNtYWxsIG9yIHRvbyBmYXIgYXdheSB0byBzaG93XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGFiZWw7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ29uc3RydWN0b3IoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgbmF0aXZlQ29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgUmVmbGVjdC5jb25zdHJ1Y3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmNvbnN0cnVjdFxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEobmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcblxudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxudmFyIEZPUkNFRCA9IE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHO1xuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiBGT1JDRUQgfSwge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhQ29uc3RydWN0b3IoVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhQ29uc3RydWN0b3IoYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gbmF0aXZlQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICBhcHBseShwdXNoLCAkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChhcHBseShiaW5kLCBUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3RQcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBhcHBseShUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5SZWZsZWN0LmNvbnN0cnVjdDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBzZXRQcm90b3R5cGVPZjogc2V0UHJvdG90eXBlT2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiaW1wb3J0IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIHZhciBfY29udGV4dDtcbiAgX3NldFByb3RvdHlwZU9mID0gX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YpLmNhbGwoX2NvbnRleHQpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwgImltcG9ydCBfT2JqZWN0JGNyZWF0ZSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanNcIjtcbmltcG9ydCBfT2JqZWN0JGRlZmluZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBfT2JqZWN0JGNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZ2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfZ2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRnZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBfT2JqZWN0JGdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsICIvKipcbiAqIFRoZSBCYXNlIGNsYXNzIGZvciBhbGwgTm9kZXMuXG4gKi9cbmNsYXNzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5sYWJlbE1vZHVsZSA9IGxhYmVsTW9kdWxlO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLnRvcCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxlZnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5oZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJhZGl1cyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1hcmdpbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlZnJlc2hOZWVkZWQgPSB0cnVlO1xuICAgIHRoaXMuYm91bmRpbmdCb3ggPSB7IHRvcDogMCwgbGVmdDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0TWFyZ2lucyhsYWJlbE1vZHVsZSkge1xuICAgIHRoaXMubWFyZ2luID0ge307XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXJnaW4pIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLm1hcmdpbiA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRoaXMubWFyZ2luLnRvcCA9IHRoaXMub3B0aW9ucy5tYXJnaW4udG9wO1xuICAgICAgICB0aGlzLm1hcmdpbi5yaWdodCA9IHRoaXMub3B0aW9ucy5tYXJnaW4ucmlnaHQ7XG4gICAgICAgIHRoaXMubWFyZ2luLmJvdHRvbSA9IHRoaXMub3B0aW9ucy5tYXJnaW4uYm90dG9tO1xuICAgICAgICB0aGlzLm1hcmdpbi5sZWZ0ID0gdGhpcy5vcHRpb25zLm1hcmdpbi5sZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tYXJnaW4udG9wID0gdGhpcy5vcHRpb25zLm1hcmdpbjtcbiAgICAgICAgdGhpcy5tYXJnaW4ucmlnaHQgPSB0aGlzLm9wdGlvbnMubWFyZ2luO1xuICAgICAgICB0aGlzLm1hcmdpbi5ib3R0b20gPSB0aGlzLm9wdGlvbnMubWFyZ2luO1xuICAgICAgICB0aGlzLm1hcmdpbi5sZWZ0ID0gdGhpcy5vcHRpb25zLm1hcmdpbjtcbiAgICAgIH1cbiAgICB9XG4gICAgbGFiZWxNb2R1bGUuYWRqdXN0U2l6ZXModGhpcy5tYXJnaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgY29uc3QgYm9yZGVyV2lkdGggPSB0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGg7XG4gICAgaWYgKGN0eCkge1xuICAgICAgdGhpcy5yZXNpemUoY3R4KTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIE1hdGgubWluKFxuICAgICAgICBNYXRoLmFicyh0aGlzLndpZHRoIC8gMiAvIE1hdGguY29zKGFuZ2xlKSksXG4gICAgICAgIE1hdGguYWJzKHRoaXMuaGVpZ2h0IC8gMiAvIE1hdGguc2luKGFuZ2xlKSlcbiAgICAgICkgKyBib3JkZXJXaWR0aFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBlbmFibGVTaGFkb3coY3R4LCB2YWx1ZXMpIHtcbiAgICBpZiAodmFsdWVzLnNoYWRvdykge1xuICAgICAgY3R4LnNoYWRvd0NvbG9yID0gdmFsdWVzLnNoYWRvd0NvbG9yO1xuICAgICAgY3R4LnNoYWRvd0JsdXIgPSB2YWx1ZXMuc2hhZG93U2l6ZTtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gdmFsdWVzLnNoYWRvd1g7XG4gICAgICBjdHguc2hhZG93T2Zmc2V0WSA9IHZhbHVlcy5zaGFkb3dZO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpIHtcbiAgICBpZiAodmFsdWVzLnNoYWRvdykge1xuICAgICAgY3R4LnNoYWRvd0NvbG9yID0gXCJyZ2JhKDAsMCwwLDApXCI7XG4gICAgICBjdHguc2hhZG93Qmx1ciA9IDA7XG4gICAgICBjdHguc2hhZG93T2Zmc2V0WCA9IDA7XG4gICAgICBjdHguc2hhZG93T2Zmc2V0WSA9IDA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZW5hYmxlQm9yZGVyRGFzaGVzKGN0eCwgdmFsdWVzKSB7XG4gICAgaWYgKHZhbHVlcy5ib3JkZXJEYXNoZXMgIT09IGZhbHNlKSB7XG4gICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IGRhc2hlcyA9IHZhbHVlcy5ib3JkZXJEYXNoZXM7XG4gICAgICAgIGlmIChkYXNoZXMgPT09IHRydWUpIHtcbiAgICAgICAgICBkYXNoZXMgPSBbNSwgMTVdO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5zZXRMaW5lRGFzaChkYXNoZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwic2V0TGluZURhc2ggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXIuIFRoZSBkYXNoZWQgYm9yZGVycyBjYW5ub3QgYmUgdXNlZC5cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmJvcmRlckRhc2hlcyA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMuYm9yZGVyRGFzaGVzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZGlzYWJsZUJvcmRlckRhc2hlcyhjdHgsIHZhbHVlcykge1xuICAgIGlmICh2YWx1ZXMuYm9yZGVyRGFzaGVzICE9PSBmYWxzZSkge1xuICAgICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN0eC5zZXRMaW5lRGFzaChbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwic2V0TGluZURhc2ggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXIuIFRoZSBkYXNoZWQgYm9yZGVycyBjYW5ub3QgYmUgdXNlZC5cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmJvcmRlckRhc2hlcyA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMuYm9yZGVyRGFzaGVzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpZiB0aGUgc2hhcGUgb2YgYSBub2RlIG5lZWRzIHRvIGJlIHJlY2FsY3VsYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBuZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgaWYgKHRoaXMucmVmcmVzaE5lZWRlZCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSBub3QgdGhlIGJlc3QgbG9jYXRpb24gdG8gcmVzZXQgdGhpcyBtZW1iZXIuXG4gICAgICAvLyBIb3dldmVyLCBpbiB0aGUgY3VycmVudCBsb2dpYywgaXQgaXMgdGhlIG1vc3QgY29udmVuaWVudCBvbmUuXG4gICAgICB0aGlzLnJlZnJlc2hOZWVkZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLndpZHRoID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMubGFiZWxNb2R1bGUuZGlmZmVyZW50U3RhdGUoc2VsZWN0ZWQsIGhvdmVyKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBpbml0Q29udGV4dEZvckRyYXcoY3R4LCB2YWx1ZXMpIHtcbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IHZhbHVlcy5ib3JkZXJXaWR0aCAvIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuXG4gICAgY3R4LmxpbmVXaWR0aCA9IE1hdGgubWluKHRoaXMud2lkdGgsIGJvcmRlcldpZHRoKTtcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSB2YWx1ZXMuYm9yZGVyQ29sb3I7XG4gICAgY3R4LmZpbGxTdHlsZSA9IHZhbHVlcy5jb2xvcjtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIHBlcmZvcm1TdHJva2UoY3R4LCB2YWx1ZXMpIHtcbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IHZhbHVlcy5ib3JkZXJXaWR0aCAvIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuXG4gICAgLy9kcmF3IGRhc2hlZCBib3JkZXIgaWYgZW5hYmxlZCwgc2F2ZSBhbmQgcmVzdG9yZSBpcyByZXF1aXJlZCBmb3IgZmlyZWZveCBub3QgdG8gY3Jhc2ggb24gdW5peC5cbiAgICBjdHguc2F2ZSgpO1xuICAgIC8vIGlmIGJvcmRlcnMgYXJlIHplcm8gd2lkdGgsIHRoZXkgd2lsbCBiZSBkcmF3biB3aXRoIHdpZHRoIDEgYnkgZGVmYXVsdC4gVGhpcyBwcmV2ZW50cyB0aGF0XG4gICAgaWYgKGJvcmRlcldpZHRoID4gMCkge1xuICAgICAgdGhpcy5lbmFibGVCb3JkZXJEYXNoZXMoY3R4LCB2YWx1ZXMpO1xuICAgICAgLy9kcmF3IHRoZSBib3JkZXJcbiAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgIC8vZGlzYWJsZSBkYXNoZWQgYm9yZGVyIGZvciBvdGhlciBlbGVtZW50c1xuICAgICAgdGhpcy5kaXNhYmxlQm9yZGVyRGFzaGVzKGN0eCwgdmFsdWVzKTtcbiAgICB9XG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIHBlcmZvcm1GaWxsKGN0eCwgdmFsdWVzKSB7XG4gICAgY3R4LnNhdmUoKTtcbiAgICBjdHguZmlsbFN0eWxlID0gdmFsdWVzLmNvbG9yO1xuICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICB0aGlzLmVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgLy8gZHJhdyB0aGUgYmFja2dyb3VuZFxuICAgIGN0eC5maWxsKCk7XG4gICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuXG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgICB0aGlzLnBlcmZvcm1TdHJva2UoY3R4LCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXJnaW5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRCb3VuZGluZ0JveE1hcmdpbihtYXJnaW4pIHtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgLT0gbWFyZ2luO1xuICAgIHRoaXMuYm91bmRpbmdCb3gudG9wIC09IG1hcmdpbjtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSArPSBtYXJnaW47XG4gICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCArPSBtYXJnaW47XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIGNhbGwuXG4gICAqXG4gICAqIERvaW5nIGl0IGxpa2UgdGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gb3ZlcnJpZGVcbiAgICogaW4gdGhlIGNoaWxkIGNsYXNzZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgaWYgKGN0eCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgfVxuXG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcblxuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHRoaXMubGVmdDtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHRoaXMudG9wO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0gdGhpcy50b3AgKyB0aGlzLmhlaWdodDtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gdGhpcy5sZWZ0ICsgdGhpcy53aWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIGNhbGwuXG4gICAqIFRoaXMgYWN0cyBhcyBhIHN0dWIgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSwgY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICB0aGlzLl91cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBkaW1lbnNpb25zIHRvIHVzZSBmb3Igbm9kZXMgd2l0aCBhbiBpbnRlcm5hbCBsYWJlbFxuICAgKlxuICAgKiBDdXJyZW50bHksIHRoZXNlIGFyZTogQ2lyY2xlLCBFbGxpcHNlLCBEYXRhYmFzZSwgQm94XG4gICAqIFRoZSBvdGhlciBub2RlcyBoYXZlIGV4dGVybmFsIGxhYmVscywgYW5kIHdpbGwgbm90IGNhbGwgdGhpcyBtZXRob2RcbiAgICpcbiAgICogSWYgdGhlcmUgaXMgbm8gbGFiZWwsIGRlY2VudCBkZWZhdWx0IHZhbHVlcyBhcmUgc3VwcGxpZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2VsZWN0ZWRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hvdmVyXVxuICAgKiBAcmV0dXJucyB7e3dpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlcn19XG4gICAqL1xuICBnZXREaW1lbnNpb25zRnJvbUxhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgLy8gTk9URTogcHJldmlvdXNseSAndGV4dFNpemUnIHdhcyBub3QgcHV0IGluICd0aGlzJyBmb3IgRWxsaXBzZVxuICAgIC8vIFRPRE86IGV4YW1pbmUgdGhlIGNvbnNlcXVlbmNlcy5cbiAgICB0aGlzLnRleHRTaXplID0gdGhpcy5sYWJlbE1vZHVsZS5nZXRUZXh0U2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgbGV0IHdpZHRoID0gdGhpcy50ZXh0U2l6ZS53aWR0aDtcbiAgICBsZXQgaGVpZ2h0ID0gdGhpcy50ZXh0U2l6ZS5oZWlnaHQ7XG5cbiAgICBjb25zdCBERUZBVUxUX1NJWkUgPSAxNDtcbiAgICBpZiAod2lkdGggPT09IDApIHtcbiAgICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuIHRoZXJlIGlzIG5vIGxhYmVsIHRleHQgc2V0XG4gICAgICB3aWR0aCA9IERFRkFVTFRfU0laRTsgLy8gdXNlIGEgZGVjZW50IGRlZmF1bHRcbiAgICAgIGhlaWdodCA9IERFRkFVTFRfU0laRTsgLy8gaWYgd2lkdGggemVybywgdGhlbiBoZWlnaHQgYWxzbyBhbHdheXMgemVyb1xuICAgIH1cblxuICAgIHJldHVybiB7IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBOb2RlQmFzZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vZGVCYXNlIGZyb20gXCIuLi91dGlsL05vZGVCYXNlXCI7XG5pbXBvcnQgeyBkcmF3Um91bmRSZWN0IH0gZnJvbSBcIi4uL3V0aWwvc2hhcGVzXCI7XG5cbi8qKlxuICogQSBCb3ggTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBOb2RlQmFzZVxuICovXG5jbGFzcyBCb3ggZXh0ZW5kcyBOb2RlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gICAgdGhpcy5fc2V0TWFyZ2lucyhsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsIGhvdmVyID0gdGhpcy5ob3Zlcikge1xuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5nZXREaW1lbnNpb25zRnJvbUxhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcblxuICAgICAgdGhpcy53aWR0aCA9IGRpbWVuc2lvbnMud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQ7XG4gICAgICB0aGlzLmhlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0ICsgdGhpcy5tYXJnaW4udG9wICsgdGhpcy5tYXJnaW4uYm90dG9tO1xuICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLndpZHRoIC8gMjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgdGhpcy5pbml0Q29udGV4dEZvckRyYXcoY3R4LCB2YWx1ZXMpO1xuICAgIGRyYXdSb3VuZFJlY3QoXG4gICAgICBjdHgsXG4gICAgICB0aGlzLmxlZnQsXG4gICAgICB0aGlzLnRvcCxcbiAgICAgIHRoaXMud2lkdGgsXG4gICAgICB0aGlzLmhlaWdodCxcbiAgICAgIHZhbHVlcy5ib3JkZXJSYWRpdXNcbiAgICApO1xuICAgIHRoaXMucGVyZm9ybUZpbGwoY3R4LCB2YWx1ZXMpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KFxuICAgICAgY3R4LFxuICAgICAgdGhpcy5sZWZ0ICsgdGhpcy50ZXh0U2l6ZS53aWR0aCAvIDIgKyB0aGlzLm1hcmdpbi5sZWZ0LFxuICAgICAgdGhpcy50b3AgKyB0aGlzLnRleHRTaXplLmhlaWdodCAvIDIgKyB0aGlzLm1hcmdpbi50b3AsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICovXG4gIHVwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgdGhpcy5fdXBkYXRlQm91bmRpbmdCb3goeCwgeSwgY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgY29uc3QgYm9yZGVyUmFkaXVzID0gdGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5ib3JkZXJSYWRpdXM7IC8vIG9ubHkgZWZmZWN0aXZlIGZvciBib3hcbiAgICB0aGlzLl9hZGRCb3VuZGluZ0JveE1hcmdpbihib3JkZXJSYWRpdXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aDtcblxuICAgIHJldHVybiAoXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgTWF0aC5hYnModGhpcy53aWR0aCAvIDIgLyBNYXRoLmNvcyhhbmdsZSkpLFxuICAgICAgICBNYXRoLmFicyh0aGlzLmhlaWdodCAvIDIgLyBNYXRoLnNpbihhbmdsZSkpXG4gICAgICApICsgYm9yZGVyV2lkdGhcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJveDtcbiIsICJpbXBvcnQgTm9kZUJhc2UgZnJvbSBcIi4vTm9kZUJhc2VcIjtcbmltcG9ydCB7IGRyYXdDaXJjbGUgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuLyoqXG4gKiBOT1RFOiBUaGlzIGlzIGEgYmFkIGJhc2UgY2xhc3NcbiAqXG4gKiBDaGlsZCBjbGFzc2VzIGFyZTpcbiAqXG4gKiAgIEltYWdlICAgICAgIC0gdXNlcyAqb25seSogaW1hZ2UgbWV0aG9kc1xuICogICBDaXJjbGUgICAgICAtIHVzZXMgKm9ubHkqIF9kcmF3UmF3Q2lyY2xlXG4gKiAgIENpcmNsZUltYWdlIC0gdXNlcyBhbGxcbiAqXG4gKiBUT0RPOiBSZWZhY3RvciwgbW92ZSBfZHJhd1Jhd0NpcmNsZSB0byBkaWZmZXJlbnQgbW9kdWxlLCBkZXJpdmUgQ2lyY2xlIGZyb20gTm9kZUJhc2VcbiAqICAgICAgIFJlbmFtZSB0aGlzIHRvIEltYWdlQmFzZVxuICogICAgICAgQ29uc29saWRhdGUgY29tbW9uIGNvZGUgaW4gSW1hZ2UgYW5kIENpcmNsZUltYWdlIHRvIGJhc2UgY2xhc3NcbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgQ2lyY2xlSW1hZ2VCYXNlIGV4dGVuZHMgTm9kZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICAgIHRoaXMubGFiZWxPZmZzZXQgPSAwO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gW2ltYWdlT2JqXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2ltYWdlT2JqQWx0XVxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zLCBpbWFnZU9iaiwgaW1hZ2VPYmpBbHQpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKCEoaW1hZ2VPYmogPT09IHVuZGVmaW5lZCAmJiBpbWFnZU9iakFsdCA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgdGhpcy5zZXRJbWFnZXMoaW1hZ2VPYmosIGltYWdlT2JqQWx0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBpbWFnZXMgZm9yIHRoaXMgbm9kZS5cbiAgICpcbiAgICogVGhlIGltYWdlcyBjYW4gYmUgdXBkYXRlZCBhZnRlciB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIG9wdGlvbnM7XG4gICAqIHRoZXJlZm9yZSwgdGhpcyBtZXRob2QgbmVlZHMgdG8gYmUgcmVlbnRyYW50LlxuICAgKlxuICAgKiBGb3IgY29ycmVjdCB3b3JraW5nIGluIGVycm9yIGNhc2VzLCBpdCBpcyBuZWNlc3NhcnkgdG8gcHJvcGVybHkgc2V0XG4gICAqIGZpZWxkICdub2Rlcy5icm9rZW5JbWFnZScgaW4gdGhlIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqICByZXF1aXJlZDsgbWFpbiBpbWFnZSB0byBzaG93IGZvciB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtJbWFnZXx1bmRlZmluZWR9IGltYWdlT2JqQWx0IG9wdGlvbmFsOyBpbWFnZSB0byBzaG93IHdoZW4gbm9kZSBpcyBzZWxlY3RlZFxuICAgKi9cbiAgc2V0SW1hZ2VzKGltYWdlT2JqLCBpbWFnZU9iakFsdCkge1xuICAgIGlmIChpbWFnZU9iakFsdCAmJiB0aGlzLnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmltYWdlT2JqID0gaW1hZ2VPYmpBbHQ7XG4gICAgICB0aGlzLmltYWdlT2JqQWx0ID0gaW1hZ2VPYmo7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW1hZ2VPYmogPSBpbWFnZU9iajtcbiAgICAgIHRoaXMuaW1hZ2VPYmpBbHQgPSBpbWFnZU9iakFsdDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHNlbGVjdGlvbiBhbmQgc3dpdGNoIGJldHdlZW4gdGhlIGJhc2UgYW5kIHRoZSBzZWxlY3RlZCBpbWFnZS5cbiAgICpcbiAgICogRG8gdGhlIHN3aXRjaCBvbmx5IGlmIGltYWdlT2JqQWx0IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZCB2YWx1ZSBvZiBuZXcgc2VsZWN0ZWQgc3RhdGUgZm9yIGN1cnJlbnQgbm9kZVxuICAgKi9cbiAgc3dpdGNoSW1hZ2VzKHNlbGVjdGVkKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uX2NoYW5nZWQgPVxuICAgICAgKHNlbGVjdGVkICYmICF0aGlzLnNlbGVjdGVkKSB8fCAoIXNlbGVjdGVkICYmIHRoaXMuc2VsZWN0ZWQpO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBzZWxlY3RlZDsgLy8gUmVtZW1iZXIgbmV3IHNlbGVjdGlvblxuXG4gICAgaWYgKHRoaXMuaW1hZ2VPYmpBbHQgIT09IHVuZGVmaW5lZCAmJiBzZWxlY3Rpb25fY2hhbmdlZCkge1xuICAgICAgY29uc3QgaW1hZ2VUbXAgPSB0aGlzLmltYWdlT2JqO1xuICAgICAgdGhpcy5pbWFnZU9iaiA9IHRoaXMuaW1hZ2VPYmpBbHQ7XG4gICAgICB0aGlzLmltYWdlT2JqQWx0ID0gaW1hZ2VUbXA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgSW1hZ2UgUGFkZGluZyBmcm9tIG5vZGUgb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7e3RvcDogbnVtYmVyLGxlZnQ6IG51bWJlcixib3R0b206IG51bWJlcixyaWdodDogbnVtYmVyfX0gaW1hZ2UgcGFkZGluZyBpbnNpZGUgdGhpcyBzaGFwZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEltYWdlUGFkZGluZygpIHtcbiAgICBjb25zdCBpbWdQYWRkaW5nID0geyB0b3A6IDAsIHJpZ2h0OiAwLCBib3R0b206IDAsIGxlZnQ6IDAgfTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmltYWdlUGFkZGluZykge1xuICAgICAgY29uc3Qgb3B0SW1nUGFkZGluZyA9IHRoaXMub3B0aW9ucy5pbWFnZVBhZGRpbmc7XG4gICAgICBpZiAodHlwZW9mIG9wdEltZ1BhZGRpbmcgPT0gXCJvYmplY3RcIikge1xuICAgICAgICBpbWdQYWRkaW5nLnRvcCA9IG9wdEltZ1BhZGRpbmcudG9wO1xuICAgICAgICBpbWdQYWRkaW5nLnJpZ2h0ID0gb3B0SW1nUGFkZGluZy5yaWdodDtcbiAgICAgICAgaW1nUGFkZGluZy5ib3R0b20gPSBvcHRJbWdQYWRkaW5nLmJvdHRvbTtcbiAgICAgICAgaW1nUGFkZGluZy5sZWZ0ID0gb3B0SW1nUGFkZGluZy5sZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW1nUGFkZGluZy50b3AgPSBvcHRJbWdQYWRkaW5nO1xuICAgICAgICBpbWdQYWRkaW5nLnJpZ2h0ID0gb3B0SW1nUGFkZGluZztcbiAgICAgICAgaW1nUGFkZGluZy5ib3R0b20gPSBvcHRJbWdQYWRkaW5nO1xuICAgICAgICBpbWdQYWRkaW5nLmxlZnQgPSBvcHRJbWdQYWRkaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbWdQYWRkaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdCB0aGUgbm9kZSBkaW1lbnNpb25zIGZvciBhIGxvYWRlZCBpbWFnZS5cbiAgICpcbiAgICogUHJlOiB0aGlzLmltYWdlT2JqIGlzIHZhbGlkXG4gICAqL1xuICBfcmVzaXplSW1hZ2UoKSB7XG4gICAgbGV0IHdpZHRoLCBoZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy51c2VJbWFnZVNpemUgPT09IGZhbHNlKSB7XG4gICAgICAvLyBVc2UgdGhlIHNpemUgcHJvcGVydHlcbiAgICAgIGxldCByYXRpb193aWR0aCA9IDE7XG4gICAgICBsZXQgcmF0aW9faGVpZ2h0ID0gMTtcblxuICAgICAgLy8gT25seSBjYWxjdWxhdGUgdGhlIHByb3BlciByYXRpbyBpZiBib3RoIHdpZHRoIGFuZCBoZWlnaHQgbm90IHplcm9cbiAgICAgIGlmICh0aGlzLmltYWdlT2JqLndpZHRoICYmIHRoaXMuaW1hZ2VPYmouaGVpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlT2JqLndpZHRoID4gdGhpcy5pbWFnZU9iai5oZWlnaHQpIHtcbiAgICAgICAgICByYXRpb193aWR0aCA9IHRoaXMuaW1hZ2VPYmoud2lkdGggLyB0aGlzLmltYWdlT2JqLmhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByYXRpb19oZWlnaHQgPSB0aGlzLmltYWdlT2JqLmhlaWdodCAvIHRoaXMuaW1hZ2VPYmoud2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd2lkdGggPSB0aGlzLm9wdGlvbnMuc2l6ZSAqIDIgKiByYXRpb193aWR0aDtcbiAgICAgIGhlaWdodCA9IHRoaXMub3B0aW9ucy5zaXplICogMiAqIHJhdGlvX2hlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXNlIHRoZSBpbWFnZSBzaXplIHdpdGggaW1hZ2UgcGFkZGluZ1xuICAgICAgY29uc3QgaW1nUGFkZGluZyA9IHRoaXMuX2dldEltYWdlUGFkZGluZygpO1xuICAgICAgd2lkdGggPSB0aGlzLmltYWdlT2JqLndpZHRoICsgaW1nUGFkZGluZy5sZWZ0ICsgaW1nUGFkZGluZy5yaWdodDtcbiAgICAgIGhlaWdodCA9IHRoaXMuaW1hZ2VPYmouaGVpZ2h0ICsgaW1nUGFkZGluZy50b3AgKyBpbWdQYWRkaW5nLmJvdHRvbTtcbiAgICB9XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3UmF3Q2lyY2xlKGN0eCwgeCwgeSwgdmFsdWVzKSB7XG4gICAgdGhpcy5pbml0Q29udGV4dEZvckRyYXcoY3R4LCB2YWx1ZXMpO1xuICAgIGRyYXdDaXJjbGUoY3R4LCB4LCB5LCB2YWx1ZXMuc2l6ZSk7XG4gICAgdGhpcy5wZXJmb3JtRmlsbChjdHgsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd0ltYWdlQXRQb3NpdGlvbihjdHgsIHZhbHVlcykge1xuICAgIGlmICh0aGlzLmltYWdlT2JqLndpZHRoICE9IDApIHtcbiAgICAgIC8vIGRyYXcgdGhlIGltYWdlXG4gICAgICBjdHguZ2xvYmFsQWxwaGEgPSB2YWx1ZXMub3BhY2l0eSAhPT0gdW5kZWZpbmVkID8gdmFsdWVzLm9wYWNpdHkgOiAxO1xuXG4gICAgICAvLyBkcmF3IHNoYWRvdyBpZiBlbmFibGVkXG4gICAgICB0aGlzLmVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG5cbiAgICAgIGxldCBmYWN0b3IgPSAxO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuaW50ZXJwb2xhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICBmYWN0b3IgPSB0aGlzLmltYWdlT2JqLndpZHRoIC8gdGhpcy53aWR0aCAvIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbWdQYWRkaW5nID0gdGhpcy5fZ2V0SW1hZ2VQYWRkaW5nKCk7XG5cbiAgICAgIGNvbnN0IGltZ1Bvc0xlZnQgPSB0aGlzLmxlZnQgKyBpbWdQYWRkaW5nLmxlZnQ7XG4gICAgICBjb25zdCBpbWdQb3NUb3AgPSB0aGlzLnRvcCArIGltZ1BhZGRpbmcudG9wO1xuICAgICAgY29uc3QgaW1nV2lkdGggPSB0aGlzLndpZHRoIC0gaW1nUGFkZGluZy5sZWZ0IC0gaW1nUGFkZGluZy5yaWdodDtcbiAgICAgIGNvbnN0IGltZ0hlaWdodCA9IHRoaXMuaGVpZ2h0IC0gaW1nUGFkZGluZy50b3AgLSBpbWdQYWRkaW5nLmJvdHRvbTtcbiAgICAgIHRoaXMuaW1hZ2VPYmouZHJhd0ltYWdlQXRQb3NpdGlvbihcbiAgICAgICAgY3R4LFxuICAgICAgICBmYWN0b3IsXG4gICAgICAgIGltZ1Bvc0xlZnQsXG4gICAgICAgIGltZ1Bvc1RvcCxcbiAgICAgICAgaW1nV2lkdGgsXG4gICAgICAgIGltZ0hlaWdodFxuICAgICAgKTtcblxuICAgICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdJbWFnZUxhYmVsKGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgbGV0IG9mZnNldCA9IDA7XG5cbiAgICBpZiAodGhpcy5oZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2Zmc2V0ID0gdGhpcy5oZWlnaHQgKiAwLjU7XG4gICAgICBjb25zdCBsYWJlbERpbWVuc2lvbnMgPSB0aGlzLmxhYmVsTW9kdWxlLmdldFRleHRTaXplKFxuICAgICAgICBjdHgsXG4gICAgICAgIHNlbGVjdGVkLFxuICAgICAgICBob3ZlclxuICAgICAgKTtcbiAgICAgIGlmIChsYWJlbERpbWVuc2lvbnMubGluZUNvdW50ID49IDEpIHtcbiAgICAgICAgb2Zmc2V0ICs9IGxhYmVsRGltZW5zaW9ucy5oZWlnaHQgLyAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHlMYWJlbCA9IHkgKyBvZmZzZXQ7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsKSB7XG4gICAgICB0aGlzLmxhYmVsT2Zmc2V0ID0gb2Zmc2V0O1xuICAgIH1cbiAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoY3R4LCB4LCB5TGFiZWwsIHNlbGVjdGVkLCBob3ZlciwgXCJoYW5naW5nXCIpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENpcmNsZUltYWdlQmFzZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IENpcmNsZUltYWdlQmFzZSBmcm9tIFwiLi4vdXRpbC9DaXJjbGVJbWFnZUJhc2VcIjtcblxuLyoqXG4gKiBBIENpcmNsZSBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIENpcmNsZUltYWdlQmFzZVxuICovXG5jbGFzcyBDaXJjbGUgZXh0ZW5kcyBDaXJjbGVJbWFnZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICAgIHRoaXMuX3NldE1hcmdpbnMobGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2VsZWN0ZWRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hvdmVyXVxuICAgKi9cbiAgcmVzaXplKGN0eCwgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkLCBob3ZlciA9IHRoaXMuaG92ZXIpIHtcbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgY29uc3QgZGltZW5zaW9ucyA9IHRoaXMuZ2V0RGltZW5zaW9uc0Zyb21MYWJlbChjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG5cbiAgICAgIGNvbnN0IGRpYW1ldGVyID0gTWF0aC5tYXgoXG4gICAgICAgIGRpbWVuc2lvbnMud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQsXG4gICAgICAgIGRpbWVuc2lvbnMuaGVpZ2h0ICsgdGhpcy5tYXJnaW4udG9wICsgdGhpcy5tYXJnaW4uYm90dG9tXG4gICAgICApO1xuXG4gICAgICB0aGlzLm9wdGlvbnMuc2l6ZSA9IGRpYW1ldGVyIC8gMjsgLy8gTk9URTogdGhpcyBzaXplIGZpZWxkIG9ubHkgc2V0IGhlcmUsIG5vdCBpbiBFbGxpcHNlLCBEYXRhYmFzZSwgQm94XG4gICAgICB0aGlzLndpZHRoID0gZGlhbWV0ZXI7XG4gICAgICB0aGlzLmhlaWdodCA9IGRpYW1ldGVyO1xuICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLndpZHRoIC8gMjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgdGhpcy5fZHJhd1Jhd0NpcmNsZShjdHgsIHgsIHksIHZhbHVlcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpO1xuICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhcbiAgICAgIGN0eCxcbiAgICAgIHRoaXMubGVmdCArIHRoaXMudGV4dFNpemUud2lkdGggLyAyICsgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgIHksXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICovXG4gIHVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpIHtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHkgLSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSB4IC0gdGhpcy5vcHRpb25zLnNpemU7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IHggKyB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IHkgKyB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCkge1xuICAgIGlmIChjdHgpIHtcbiAgICAgIHRoaXMucmVzaXplKGN0eCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLndpZHRoICogMC41O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENpcmNsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IENpcmNsZUltYWdlQmFzZSBmcm9tIFwiLi4vdXRpbC9DaXJjbGVJbWFnZUJhc2VcIjtcblxuLyoqXG4gKiBBIENpcmN1bGFySW1hZ2UgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBDaXJjbGVJbWFnZUJhc2VcbiAqL1xuY2xhc3MgQ2lyY3VsYXJJbWFnZSBleHRlbmRzIENpcmNsZUltYWdlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKiBAcGFyYW0ge0ltYWdlfSBpbWFnZU9ialxuICAgKiBAcGFyYW0ge0ltYWdlfSBpbWFnZU9iakFsdFxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUsIGltYWdlT2JqLCBpbWFnZU9iakFsdCkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcblxuICAgIHRoaXMuc2V0SW1hZ2VzKGltYWdlT2JqLCBpbWFnZU9iakFsdCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsIGhvdmVyID0gdGhpcy5ob3Zlcikge1xuICAgIGNvbnN0IGltYWdlQWJzZW50ID1cbiAgICAgIHRoaXMuaW1hZ2VPYmouc3JjID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuaW1hZ2VPYmoud2lkdGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5pbWFnZU9iai5oZWlnaHQgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpbWFnZUFic2VudCkge1xuICAgICAgY29uc3QgZGlhbWV0ZXIgPSB0aGlzLm9wdGlvbnMuc2l6ZSAqIDI7XG4gICAgICB0aGlzLndpZHRoID0gZGlhbWV0ZXI7XG4gICAgICB0aGlzLmhlaWdodCA9IGRpYW1ldGVyO1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIGFuIGltYWdlIGlzIHByZXNlbnQsIGkuZS4gdGhpcy5pbWFnZU9iaiBpcyB2YWxpZC5cbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy5fcmVzaXplSW1hZ2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMuc3dpdGNoSW1hZ2VzKHNlbGVjdGVkKTtcbiAgICB0aGlzLnJlc2l6ZSgpO1xuXG4gICAgbGV0IGxhYmVsWCA9IHgsXG4gICAgICBsYWJlbFkgPSB5O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuY29vcmRpbmF0ZU9yaWdpbiA9PT0gXCJ0b3AtbGVmdFwiKSB7XG4gICAgICB0aGlzLmxlZnQgPSB4O1xuICAgICAgdGhpcy50b3AgPSB5O1xuICAgICAgbGFiZWxYICs9IHRoaXMud2lkdGggLyAyO1xuICAgICAgbGFiZWxZICs9IHRoaXMuaGVpZ2h0IC8gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuICAgIH1cblxuICAgIC8vIGRyYXcgdGhlIGJhY2tncm91bmQgY2lyY2xlLiBJTVBPUlRBTlQ6IHRoZSBzdHJva2UgaW4gdGhpcyBtZXRob2QgaXMgdXNlZCBieSB0aGUgY2xpcCBtZXRob2QgYmVsb3cuXG4gICAgdGhpcy5fZHJhd1Jhd0NpcmNsZShjdHgsIGxhYmVsWCwgbGFiZWxZLCB2YWx1ZXMpO1xuXG4gICAgLy8gbm93IHdlIGRyYXcgaW4gdGhlIGNpcmNsZSwgd2Ugc2F2ZSBzbyB3ZSBjYW4gcmV2ZXJ0IHRoZSBjbGlwIG9wZXJhdGlvbiBhZnRlciBkcmF3aW5nLlxuICAgIGN0eC5zYXZlKCk7XG4gICAgLy8gY2xpcCBpcyB1c2VkIHRvIHVzZSB0aGUgc3Ryb2tlIGluIGRyYXdSYXdDaXJjbGUgYXMgYW4gYXJlYSB0aGF0IHdlIGNhbiBkcmF3IGluLlxuICAgIGN0eC5jbGlwKCk7XG4gICAgLy8gZHJhdyB0aGUgaW1hZ2VcbiAgICB0aGlzLl9kcmF3SW1hZ2VBdFBvc2l0aW9uKGN0eCwgdmFsdWVzKTtcbiAgICAvLyByZXN0b3JlIHNvIHdlIGNhbiBhZ2FpbiBkcmF3IG9uIHRoZSBmdWxsIGNhbnZhc1xuICAgIGN0eC5yZXN0b3JlKCk7XG5cbiAgICB0aGlzLl9kcmF3SW1hZ2VMYWJlbChjdHgsIGxhYmVsWCwgbGFiZWxZLCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5KTtcbiAgfVxuXG4gIC8vIFRPRE86IGNvbXBhcmUgd2l0aCBDaXJjbGUudXBkYXRlQm91bmRpbmdCb3goKSwgY29uc29saWRhdGU/IE1vcmUgc3R1ZmYgaXMgaGFwcGVuaW5nIGhlcmVcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW4gPT09IFwidG9wLWxlZnRcIikge1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC50b3AgPSB5O1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0geDtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB4ICsgdGhpcy5vcHRpb25zLnNpemUgKiAyO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSB5ICsgdGhpcy5vcHRpb25zLnNpemUgKiAyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHkgLSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHggLSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB4ICsgdGhpcy5vcHRpb25zLnNpemU7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IHkgKyB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBjb21wYXJlIHdpdGggSW1hZ2UudXBkYXRlQm91bmRpbmdCb3goKSwgY29uc29saWRhdGU/XG4gICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0gTWF0aC5taW4oXG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQsXG4gICAgICB0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdFxuICAgICk7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IE1hdGgubWF4KFxuICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCxcbiAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0ICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoXG4gICAgKTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IE1hdGgubWF4KFxuICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20sXG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSArIHRoaXMubGFiZWxPZmZzZXRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4KSB7XG4gICAgaWYgKGN0eCkge1xuICAgICAgdGhpcy5yZXNpemUoY3R4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud2lkdGggKiAwLjU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2lyY3VsYXJJbWFnZTtcbiIsICJpbXBvcnQgTm9kZUJhc2UgZnJvbSBcIi4uL3V0aWwvTm9kZUJhc2VcIjtcbmltcG9ydCB7IGdldFNoYXBlIH0gZnJvbSBcIi4vc2hhcGVzXCI7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgY29uc3RydWN0aW5nIE5vZGUvQ2x1c3RlciBTaGFwZXMuXG4gKlxuICogQGF1Z21lbnRzIE5vZGVCYXNlXG4gKi9cbmNsYXNzIFNoYXBlQmFzZSBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbGVjdGVkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3Zlcl1cbiAgICogQHBhcmFtIHtvYmplY3R9IFt2YWx1ZXM9e3NpemU6IHRoaXMub3B0aW9ucy5zaXplfV1cbiAgICovXG4gIHJlc2l6ZShcbiAgICBjdHgsXG4gICAgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkLFxuICAgIGhvdmVyID0gdGhpcy5ob3ZlcixcbiAgICB2YWx1ZXMgPSB7IHNpemU6IHRoaXMub3B0aW9ucy5zaXplIH1cbiAgKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIHRoaXMubGFiZWxNb2R1bGUuZ2V0VGV4dFNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgICAgY29uc3Qgc2l6ZSA9IDIgKiB2YWx1ZXMuc2l6ZTtcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLmN1c3RvbVNpemVXaWR0aCA/PyBzaXplO1xuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmN1c3RvbVNpemVIZWlnaHQgPz8gc2l6ZTtcbiAgICAgIHRoaXMucmFkaXVzID0gMC41ICogdGhpcy53aWR0aDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2hhcGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVNdWx0aXBsaWVyIC0gVW51c2VkISBUT0RPOiBSZW1vdmUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGhpZ2hlciBsYXllcnMuXG4gICAqL1xuICBfZHJhd1NoYXBlKGN0eCwgc2hhcGUsIHNpemVNdWx0aXBsaWVyLCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICB0aGlzLmluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcyk7XG4gICAgZ2V0U2hhcGUoc2hhcGUpKGN0eCwgeCwgeSwgdmFsdWVzLnNpemUpO1xuICAgIHRoaXMucGVyZm9ybUZpbGwoY3R4LCB2YWx1ZXMpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pY29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWNvbi5jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3R4LmZvbnQgPVxuICAgICAgICAgIChzZWxlY3RlZCA/IFwiYm9sZCBcIiA6IFwiXCIpICtcbiAgICAgICAgICB0aGlzLmhlaWdodCAvIDIgK1xuICAgICAgICAgIFwicHggXCIgK1xuICAgICAgICAgICh0aGlzLm9wdGlvbnMuaWNvbi5mYWNlIHx8IFwiRm9udEF3ZXNvbWVcIik7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLm9wdGlvbnMuaWNvbi5jb2xvciB8fCBcImJsYWNrXCI7XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSBcImNlbnRlclwiO1xuICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcbiAgICAgICAgY3R4LmZpbGxUZXh0KHRoaXMub3B0aW9ucy5pY29uLmNvZGUsIHgsIHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkcmF3RXh0ZXJuYWxMYWJlbDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgZm9sbG93aW5nIGhlcmUgaW4gb3JkZXIgdG8gZW5zdXJlIHZhbHVlIGZvclxuICAgICAgICAgIC8vIGB0aGlzLmxhYmVsTW9kdWxlLnNpemUuaGVpZ2h0YC5cbiAgICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLmNhbGN1bGF0ZUxhYmVsU2l6ZShcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgaG92ZXIsXG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgeSxcbiAgICAgICAgICAgIFwiaGFuZ2luZ1wiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB5TGFiZWwgPVxuICAgICAgICAgICAgeSArIDAuNSAqIHRoaXMuaGVpZ2h0ICsgMC41ICogdGhpcy5sYWJlbE1vZHVsZS5zaXplLmhlaWdodDtcbiAgICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoY3R4LCB4LCB5TGFiZWwsIHNlbGVjdGVkLCBob3ZlciwgXCJoYW5naW5nXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSkge1xuICAgIHRoaXMuYm91bmRpbmdCb3gudG9wID0geSAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHggLSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0geCArIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0geSArIHRoaXMub3B0aW9ucy5zaXplO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS53aWR0aCA+IDApIHtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IE1hdGgubWluKFxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQsXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0XG4gICAgICApO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IE1hdGgubWF4KFxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0LFxuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdCArIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS53aWR0aFxuICAgICAgKTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0gTWF0aC5tYXgoXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tLFxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSArIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5oZWlnaHRcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNoYXBlQmFzZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNoYXBlQmFzZSBmcm9tIFwiLi4vdXRpbC9TaGFwZUJhc2VcIjtcblxuLyoqXG4gKiBBIEN1c3RvbVNoYXBlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIEN1c3RvbVNoYXBlIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGN0eFJlbmRlcmVyXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSwgY3R4UmVuZGVyZXIpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSwgY3R4UmVuZGVyZXIpO1xuICAgIHRoaXMuY3R4UmVuZGVyZXIgPSBjdHhSZW5kZXJlcjtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBkaWZmZXJlbnQgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcblxuICAgIC8vIEd1YXJkIHJpZ2h0IGF3YXkgYmVjYXVzZSBzb21lb25lIG1heSBqdXN0IGRyYXcgaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi5cbiAgICBjdHguc2F2ZSgpO1xuICAgIGNvbnN0IGRyYXdMYXRlciA9IHRoaXMuY3R4UmVuZGVyZXIoe1xuICAgICAgY3R4LFxuICAgICAgaWQ6IHRoaXMub3B0aW9ucy5pZCxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgc3RhdGU6IHsgc2VsZWN0ZWQsIGhvdmVyIH0sXG4gICAgICBzdHlsZTogeyAuLi52YWx1ZXMgfSxcbiAgICAgIGxhYmVsOiB0aGlzLm9wdGlvbnMubGFiZWwsXG4gICAgfSk7XG4gICAgLy8gUmVuZGVyIHRoZSBub2RlIHNoYXBlIGJlbGxvdyBhcnJvd3MuXG4gICAgaWYgKGRyYXdMYXRlci5kcmF3Tm9kZSAhPSBudWxsKSB7XG4gICAgICBkcmF3TGF0ZXIuZHJhd05vZGUoKTtcbiAgICB9XG4gICAgY3R4LnJlc3RvcmUoKTtcblxuICAgIGlmIChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwpIHtcbiAgICAgIC8vIEd1YXJkIHRoZSBleHRlcm5hbCBsYWJlbCAoYWJvdmUgYXJyb3dzKSBkcmF3aW5nIGZ1bmN0aW9uLlxuICAgICAgY29uc3QgZHJhd0V4dGVybmFsTGFiZWwgPSBkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWw7XG4gICAgICBkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwgPSAoKSA9PiB7XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGRyYXdFeHRlcm5hbExhYmVsKCk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChkcmF3TGF0ZXIubm9kZURpbWVuc2lvbnMpIHtcbiAgICAgIHRoaXMuY3VzdG9tU2l6ZVdpZHRoID0gZHJhd0xhdGVyLm5vZGVEaW1lbnNpb25zLndpZHRoO1xuICAgICAgdGhpcy5jdXN0b21TaXplSGVpZ2h0ID0gZHJhd0xhdGVyLm5vZGVEaW1lbnNpb25zLmhlaWdodDtcbiAgICB9XG5cbiAgICByZXR1cm4gZHJhd0xhdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDdXN0b21TaGFwZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vZGVCYXNlIGZyb20gXCIuLi91dGlsL05vZGVCYXNlXCI7XG5pbXBvcnQgeyBkcmF3RGF0YWJhc2UgfSBmcm9tIFwiLi4vdXRpbC9zaGFwZXNcIjtcblxuLyoqXG4gKiBBIERhdGFiYXNlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgRGF0YWJhc2UgZXh0ZW5kcyBOb2RlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gICAgdGhpcy5fc2V0TWFyZ2lucyhsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICovXG4gIHJlc2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcikge1xuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5nZXREaW1lbnNpb25zRnJvbUxhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICAgIGNvbnN0IHNpemUgPSBkaW1lbnNpb25zLndpZHRoICsgdGhpcy5tYXJnaW4ucmlnaHQgKyB0aGlzLm1hcmdpbi5sZWZ0O1xuXG4gICAgICB0aGlzLndpZHRoID0gc2l6ZTtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gc2l6ZTtcbiAgICAgIHRoaXMucmFkaXVzID0gdGhpcy53aWR0aCAvIDI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICB0aGlzLnJlc2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcblxuICAgIHRoaXMuaW5pdENvbnRleHRGb3JEcmF3KGN0eCwgdmFsdWVzKTtcbiAgICBkcmF3RGF0YWJhc2UoXG4gICAgICBjdHgsXG4gICAgICB4IC0gdGhpcy53aWR0aCAvIDIsXG4gICAgICB5IC0gdGhpcy5oZWlnaHQgLyAyLFxuICAgICAgdGhpcy53aWR0aCxcbiAgICAgIHRoaXMuaGVpZ2h0XG4gICAgKTtcbiAgICB0aGlzLnBlcmZvcm1GaWxsKGN0eCwgdmFsdWVzKTtcblxuICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goeCwgeSwgY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhcbiAgICAgIGN0eCxcbiAgICAgIHRoaXMubGVmdCArIHRoaXMudGV4dFNpemUud2lkdGggLyAyICsgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgIHRoaXMudG9wICsgdGhpcy50ZXh0U2l6ZS5oZWlnaHQgLyAyICsgdGhpcy5tYXJnaW4udG9wLFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBob3ZlclxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRhYmFzZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNoYXBlQmFzZSBmcm9tIFwiLi4vdXRpbC9TaGFwZUJhc2VcIjtcblxuLyoqXG4gKiBBIERpYW1vbmQgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgRGlhbW9uZCBleHRlbmRzIFNoYXBlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHJldHVybiB0aGlzLl9kcmF3U2hhcGUoY3R4LCBcImRpYW1vbmRcIiwgNCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEaWFtb25kO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgRG90IE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIERvdCBleHRlbmRzIFNoYXBlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHJldHVybiB0aGlzLl9kcmF3U2hhcGUoY3R4LCBcImNpcmNsZVwiLCAyLCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgpIHtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNpemU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRG90O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9kZUJhc2UgZnJvbSBcIi4uL3V0aWwvTm9kZUJhc2VcIjtcbmltcG9ydCB7IGRyYXdFbGxpcHNlIH0gZnJvbSBcIi4uL3V0aWwvc2hhcGVzXCI7XG5cbi8qKlxuICogQW0gRWxsaXBzZSBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIE5vZGVCYXNlXG4gKi9cbmNsYXNzIEVsbGlwc2UgZXh0ZW5kcyBOb2RlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsIGhvdmVyID0gdGhpcy5ob3Zlcikge1xuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5nZXREaW1lbnNpb25zRnJvbUxhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcblxuICAgICAgdGhpcy5oZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdodCAqIDI7XG4gICAgICB0aGlzLndpZHRoID0gZGltZW5zaW9ucy53aWR0aCArIGRpbWVuc2lvbnMuaGVpZ2h0O1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoICogMC41O1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0ICogMC41O1xuXG4gICAgdGhpcy5pbml0Q29udGV4dEZvckRyYXcoY3R4LCB2YWx1ZXMpO1xuICAgIGRyYXdFbGxpcHNlKGN0eCwgdGhpcy5sZWZ0LCB0aGlzLnRvcCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIHRoaXMucGVyZm9ybUZpbGwoY3R4LCB2YWx1ZXMpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgaWYgKGN0eCkge1xuICAgICAgdGhpcy5yZXNpemUoY3R4KTtcbiAgICB9XG4gICAgY29uc3QgYSA9IHRoaXMud2lkdGggKiAwLjU7XG4gICAgY29uc3QgYiA9IHRoaXMuaGVpZ2h0ICogMC41O1xuICAgIGNvbnN0IHcgPSBNYXRoLnNpbihhbmdsZSkgKiBhO1xuICAgIGNvbnN0IGggPSBNYXRoLmNvcyhhbmdsZSkgKiBiO1xuICAgIHJldHVybiAoYSAqIGIpIC8gTWF0aC5zcXJ0KHcgKiB3ICsgaCAqIGgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVsbGlwc2U7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi4vdXRpbC9Ob2RlQmFzZVwiO1xuXG4vKipcbiAqIEFuIGljb24gcmVwbGFjZW1lbnQgZm9yIHRoZSBkZWZhdWx0IE5vZGUgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIE5vZGVCYXNlXG4gKi9cbmNsYXNzIEljb24gZXh0ZW5kcyBOb2RlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gICAgdGhpcy5fc2V0TWFyZ2lucyhsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFVudXNlZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc2VsZWN0ZWRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hvdmVyXVxuICAgKi9cbiAgcmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIHRoaXMuaWNvblNpemUgPSB7XG4gICAgICAgIHdpZHRoOiBOdW1iZXIodGhpcy5vcHRpb25zLmljb24uc2l6ZSksXG4gICAgICAgIGhlaWdodDogTnVtYmVyKHRoaXMub3B0aW9ucy5pY29uLnNpemUpLFxuICAgICAgfTtcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLmljb25TaXplLndpZHRoICsgdGhpcy5tYXJnaW4ucmlnaHQgKyB0aGlzLm1hcmdpbi5sZWZ0O1xuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmljb25TaXplLmhlaWdodCArIHRoaXMubWFyZ2luLnRvcCArIHRoaXMubWFyZ2luLmJvdHRvbTtcbiAgICAgIHRoaXMucmFkaXVzID0gMC41ICogdGhpcy53aWR0aDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLm9wdGlvbnMuaWNvbi5zaXplID0gdGhpcy5vcHRpb25zLmljb24uc2l6ZSB8fCA1MDtcblxuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG4gICAgdGhpcy5faWNvbihjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkcmF3RXh0ZXJuYWxMYWJlbDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBpY29uVGV4dFNwYWNpbmcgPSA1O1xuICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIHRoaXMubGVmdCArIHRoaXMuaWNvblNpemUud2lkdGggLyAyICsgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgICAgICAgIHkgKyB0aGlzLmhlaWdodCAvIDIgKyBpY29uVGV4dFNwYWNpbmcsXG4gICAgICAgICAgICBzZWxlY3RlZFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5KSB7XG4gICAgdGhpcy5ib3VuZGluZ0JveC50b3AgPSB5IC0gdGhpcy5vcHRpb25zLmljb24uc2l6ZSAqIDAuNTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSB4IC0gdGhpcy5vcHRpb25zLmljb24uc2l6ZSAqIDAuNTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0geCArIHRoaXMub3B0aW9ucy5pY29uLnNpemUgKiAwLjU7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSB5ICsgdGhpcy5vcHRpb25zLmljb24uc2l6ZSAqIDAuNTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGggPiAwKSB7XG4gICAgICBjb25zdCBpY29uVGV4dFNwYWNpbmcgPSA1O1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0gTWF0aC5taW4oXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnRcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQsXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0ICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoXG4gICAgICApO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20sXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmhlaWdodCArIGljb25UZXh0U3BhY2luZ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyIC0gVW51c2VkXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIF9pY29uKGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICBjb25zdCBpY29uU2l6ZSA9IE51bWJlcih0aGlzLm9wdGlvbnMuaWNvbi5zaXplKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaWNvbi5jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGN0eC5mb250ID0gW1xuICAgICAgICB0aGlzLm9wdGlvbnMuaWNvbi53ZWlnaHQgIT0gbnVsbFxuICAgICAgICAgID8gdGhpcy5vcHRpb25zLmljb24ud2VpZ2h0XG4gICAgICAgICAgOiBzZWxlY3RlZFxuICAgICAgICAgID8gXCJib2xkXCJcbiAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIC8vIElmIHRoZSB3ZWlnaHQgaXMgZm9yY2VkIChmb3IgZXhhbXBsZSB0byBtYWtlIEZvbnQgQXdlc29tZSA1IHdvcmtcbiAgICAgICAgLy8gcHJvcGVybHkpIHN1YnN0aXR1dGUgc2xpZ2h0bHkgYmlnZ2VyIHNpemUgZm9yIGJvbGQgZm9udCBmYWNlLlxuICAgICAgICAodGhpcy5vcHRpb25zLmljb24ud2VpZ2h0ICE9IG51bGwgJiYgc2VsZWN0ZWQgPyA1IDogMCkgK1xuICAgICAgICAgIGljb25TaXplICtcbiAgICAgICAgICBcInB4XCIsXG4gICAgICAgIHRoaXMub3B0aW9ucy5pY29uLmZhY2UsXG4gICAgICBdLmpvaW4oXCIgXCIpO1xuXG4gICAgICAvLyBkcmF3IGljb25cbiAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLm9wdGlvbnMuaWNvbi5jb2xvciB8fCBcImJsYWNrXCI7XG4gICAgICBjdHgudGV4dEFsaWduID0gXCJjZW50ZXJcIjtcbiAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuXG4gICAgICAvLyBkcmF3IHNoYWRvdyBpZiBlbmFibGVkXG4gICAgICB0aGlzLmVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgICBjdHguZmlsbFRleHQodGhpcy5vcHRpb25zLmljb24uY29kZSwgeCwgeSk7XG5cbiAgICAgIC8vIGRpc2FibGUgc2hhZG93cyBmb3Igb3RoZXIgZWxlbWVudHMuXG4gICAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIldoZW4gdXNpbmcgdGhlIGljb24gc2hhcGUsIHlvdSBuZWVkIHRvIGRlZmluZSB0aGUgY29kZSBpbiB0aGUgaWNvbiBvcHRpb25zIG9iamVjdC4gVGhpcyBjYW4gYmUgZG9uZSBwZXIgbm9kZSBvciBnbG9iYWxseS5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb247XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBDaXJjbGVJbWFnZUJhc2UgZnJvbSBcIi4uL3V0aWwvQ2lyY2xlSW1hZ2VCYXNlXCI7XG5pbXBvcnQgeyBvdmVycmlkZU9wYWNpdHkgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogQW4gaW1hZ2UtYmFzZWQgcmVwbGFjZW1lbnQgZm9yIHRoZSBkZWZhdWx0IE5vZGUgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIENpcmNsZUltYWdlQmFzZVxuICovXG5jbGFzcyBJbWFnZSBleHRlbmRzIENpcmNsZUltYWdlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKiBAcGFyYW0ge0ltYWdlfSBpbWFnZU9ialxuICAgKiBAcGFyYW0ge0ltYWdlfSBpbWFnZU9iakFsdFxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUsIGltYWdlT2JqLCBpbWFnZU9iakFsdCkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcblxuICAgIHRoaXMuc2V0SW1hZ2VzKGltYWdlT2JqLCBpbWFnZU9iakFsdCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFVudXNlZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc2VsZWN0ZWRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hvdmVyXVxuICAgKi9cbiAgcmVzaXplKGN0eCwgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkLCBob3ZlciA9IHRoaXMuaG92ZXIpIHtcbiAgICBjb25zdCBpbWFnZUFic2VudCA9XG4gICAgICB0aGlzLmltYWdlT2JqLnNyYyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLmltYWdlT2JqLndpZHRoID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuaW1hZ2VPYmouaGVpZ2h0ID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaW1hZ2VBYnNlbnQpIHtcbiAgICAgIGNvbnN0IHNpZGUgPSB0aGlzLm9wdGlvbnMuc2l6ZSAqIDI7XG4gICAgICB0aGlzLndpZHRoID0gc2lkZTtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gc2lkZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy5fcmVzaXplSW1hZ2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIGN0eC5zYXZlKCk7XG4gICAgdGhpcy5zd2l0Y2hJbWFnZXMoc2VsZWN0ZWQpO1xuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICBsZXQgbGFiZWxYID0geCxcbiAgICAgIGxhYmVsWSA9IHk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5jb29yZGluYXRlT3JpZ2luID09PSBcInRvcC1sZWZ0XCIpIHtcbiAgICAgIHRoaXMubGVmdCA9IHg7XG4gICAgICB0aGlzLnRvcCA9IHk7XG4gICAgICBsYWJlbFggKz0gdGhpcy53aWR0aCAvIDI7XG4gICAgICBsYWJlbFkgKz0gdGhpcy5oZWlnaHQgLyAyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMudXNlQm9yZGVyV2l0aEltYWdlID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBuZXV0cmFsYm9yZGVyV2lkdGggPSB0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGg7XG4gICAgICBjb25zdCBzZWxlY3Rpb25MaW5lV2lkdGggPVxuICAgICAgICB0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGhTZWxlY3RlZCB8fCAyICogdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoO1xuICAgICAgY29uc3QgYm9yZGVyV2lkdGggPVxuICAgICAgICAoc2VsZWN0ZWQgPyBzZWxlY3Rpb25MaW5lV2lkdGggOiBuZXV0cmFsYm9yZGVyV2lkdGgpIC9cbiAgICAgICAgdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgICBjdHgubGluZVdpZHRoID0gTWF0aC5taW4odGhpcy53aWR0aCwgYm9yZGVyV2lkdGgpO1xuXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBsZXQgc3Ryb2tlU3R5bGUgPSBzZWxlY3RlZFxuICAgICAgICA/IHRoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyXG4gICAgICAgIDogaG92ZXJcbiAgICAgICAgPyB0aGlzLm9wdGlvbnMuY29sb3IuaG92ZXIuYm9yZGVyXG4gICAgICAgIDogdGhpcy5vcHRpb25zLmNvbG9yLmJvcmRlcjtcbiAgICAgIGxldCBmaWxsU3R5bGUgPSBzZWxlY3RlZFxuICAgICAgICA/IHRoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZFxuICAgICAgICA6IGhvdmVyXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyLmJhY2tncm91bmRcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuY29sb3IuYmFja2dyb3VuZDtcblxuICAgICAgaWYgKHZhbHVlcy5vcGFjaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3Ryb2tlU3R5bGUgPSBvdmVycmlkZU9wYWNpdHkoc3Ryb2tlU3R5bGUsIHZhbHVlcy5vcGFjaXR5KTtcbiAgICAgICAgZmlsbFN0eWxlID0gb3ZlcnJpZGVPcGFjaXR5KGZpbGxTdHlsZSwgdmFsdWVzLm9wYWNpdHkpO1xuICAgICAgfVxuICAgICAgLy8gc2V0dXAgdGhlIGxpbmUgcHJvcGVydGllcy5cbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZVN0eWxlO1xuXG4gICAgICAvLyBzZXQgYSBmaWxsc3R5bGVcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBmaWxsU3R5bGU7XG5cbiAgICAgIC8vIGRyYXcgYSByZWN0YW5nbGUgdG8gZm9ybSB0aGUgYm9yZGVyIGFyb3VuZC4gVGhpcyByZWN0YW5nbGUgaXMgZmlsbGVkIHNvIHRoZSBvcGFjaXR5IG9mIGEgcGljdHVyZSAoaW4gZnV0dXJlIHZpcyByZWxlYXNlcz8pIGNhbiBiZSB1c2VkIHRvIHRpbnQgdGhlIGltYWdlXG4gICAgICBjdHgucmVjdChcbiAgICAgICAgdGhpcy5sZWZ0IC0gMC41ICogY3R4LmxpbmVXaWR0aCxcbiAgICAgICAgdGhpcy50b3AgLSAwLjUgKiBjdHgubGluZVdpZHRoLFxuICAgICAgICB0aGlzLndpZHRoICsgY3R4LmxpbmVXaWR0aCxcbiAgICAgICAgdGhpcy5oZWlnaHQgKyBjdHgubGluZVdpZHRoXG4gICAgICApO1xuICAgICAgY3R4LmZpbGwoKTtcblxuICAgICAgdGhpcy5wZXJmb3JtU3Ryb2tlKGN0eCwgdmFsdWVzKTtcblxuICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgIH1cblxuICAgIHRoaXMuX2RyYXdJbWFnZUF0UG9zaXRpb24oY3R4LCB2YWx1ZXMpO1xuXG4gICAgdGhpcy5fZHJhd0ltYWdlTGFiZWwoY3R4LCBsYWJlbFgsIGxhYmVsWSwgc2VsZWN0ZWQsIGhvdmVyKTtcblxuICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goeCwgeSk7XG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSkge1xuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5jb29yZGluYXRlT3JpZ2luID09PSBcInRvcC1sZWZ0XCIpIHtcbiAgICAgIHRoaXMubGVmdCA9IHg7XG4gICAgICB0aGlzLnRvcCA9IHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcbiAgICB9XG5cbiAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSB0aGlzLmxlZnQ7XG4gICAgdGhpcy5ib3VuZGluZ0JveC50b3AgPSB0aGlzLnRvcDtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IHRoaXMudG9wICsgdGhpcy5oZWlnaHQ7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IHRoaXMubGVmdCArIHRoaXMud2lkdGg7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoID4gMCkge1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0gTWF0aC5taW4oXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnRcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQsXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0ICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoXG4gICAgICApO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20sXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICsgdGhpcy5sYWJlbE9mZnNldFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgU3F1YXJlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIFNxdWFyZSBleHRlbmRzIFNoYXBlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHJldHVybiB0aGlzLl9kcmF3U2hhcGUoY3R4LCBcInNxdWFyZVwiLCAyLCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNxdWFyZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNoYXBlQmFzZSBmcm9tIFwiLi4vdXRpbC9TaGFwZUJhc2VcIjtcblxuLyoqXG4gKiBBIEhleGFnb24gTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgSGV4YWdvbiBleHRlbmRzIFNoYXBlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHJldHVybiB0aGlzLl9kcmF3U2hhcGUoY3R4LCBcImhleGFnb25cIiwgNCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIZXhhZ29uO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgU3RhciBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIFNoYXBlQmFzZVxuICovXG5jbGFzcyBTdGFyIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwic3RhclwiLCA0LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0YXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi4vdXRpbC9Ob2RlQmFzZVwiO1xuXG4vKipcbiAqIEEgdGV4dC1iYXNlZCByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgTm9kZSBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgVGV4dCBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgICB0aGlzLl9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKi9cbiAgcmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIHRoaXMudGV4dFNpemUgPSB0aGlzLmxhYmVsTW9kdWxlLmdldFRleHRTaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRleHRTaXplLndpZHRoICsgdGhpcy5tYXJnaW4ucmlnaHQgKyB0aGlzLm1hcmdpbi5sZWZ0O1xuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRleHRTaXplLmhlaWdodCArIHRoaXMubWFyZ2luLnRvcCArIHRoaXMubWFyZ2luLmJvdHRvbTtcbiAgICAgIHRoaXMucmFkaXVzID0gMC41ICogdGhpcy53aWR0aDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoXG4gICAgICBjdHgsXG4gICAgICB0aGlzLmxlZnQgKyB0aGlzLnRleHRTaXplLndpZHRoIC8gMiArIHRoaXMubWFyZ2luLmxlZnQsXG4gICAgICB0aGlzLnRvcCArIHRoaXMudGV4dFNpemUuaGVpZ2h0IC8gMiArIHRoaXMubWFyZ2luLnRvcCxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgaG92ZXJcbiAgICApO1xuXG4gICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRleHQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaGFwZUJhc2UgZnJvbSBcIi4uL3V0aWwvU2hhcGVCYXNlXCI7XG5cbi8qKlxuICogQSBUcmlhbmdsZSBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIFNoYXBlQmFzZVxuICovXG5jbGFzcyBUcmlhbmdsZSBleHRlbmRzIFNoYXBlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwidHJpYW5nbGVcIiwgMywgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUcmlhbmdsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNoYXBlQmFzZSBmcm9tIFwiLi4vdXRpbC9TaGFwZUJhc2VcIjtcblxuLyoqXG4gKiBBIGRvd253YXJkIGZhY2luZyBUcmlhbmdsZSBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIFNoYXBlQmFzZVxuICovXG5jbGFzcyBUcmlhbmdsZURvd24gZXh0ZW5kcyBTaGFwZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHJldHVybiB0aGlzLl9kcmF3U2hhcGUoXG4gICAgICBjdHgsXG4gICAgICBcInRyaWFuZ2xlRG93blwiLFxuICAgICAgMyxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBob3ZlcixcbiAgICAgIHZhbHVlc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyaWFuZ2xlRG93bjtcbiIsICJpbXBvcnQge1xuICBWQUxJREFUT1JfUFJJTlRfU1RZTEUsXG4gIGJyaWRnZU9iamVjdCxcbiAgZmlsbElmRGVmaW5lZCxcbiAgbWVyZ2VPcHRpb25zLFxuICBvdmVycmlkZU9wYWNpdHksXG4gIHBhcnNlQ29sb3IsXG4gIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsXG59IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuaW1wb3J0IExhYmVsIGZyb20gXCIuL3NoYXJlZC9MYWJlbFwiO1xuaW1wb3J0IHsgY2hvb3NpZnksIHBvaW50SW5SZWN0IH0gZnJvbSBcIi4vc2hhcmVkL0NvbXBvbmVudFV0aWxcIjtcbmltcG9ydCBCb3ggZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0JveFwiO1xuaW1wb3J0IENpcmNsZSBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvQ2lyY2xlXCI7XG5pbXBvcnQgQ2lyY3VsYXJJbWFnZSBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvQ2lyY3VsYXJJbWFnZVwiO1xuaW1wb3J0IEN1c3RvbVNoYXBlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9DdXN0b21TaGFwZVwiO1xuaW1wb3J0IERhdGFiYXNlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9EYXRhYmFzZVwiO1xuaW1wb3J0IERpYW1vbmQgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0RpYW1vbmRcIjtcbmltcG9ydCBEb3QgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0RvdFwiO1xuaW1wb3J0IEVsbGlwc2UgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0VsbGlwc2VcIjtcbmltcG9ydCBJY29uIGZyb20gXCIuL25vZGVzL3NoYXBlcy9JY29uXCI7XG5pbXBvcnQgSW1hZ2UgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0ltYWdlXCI7XG5pbXBvcnQgU3F1YXJlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9TcXVhcmVcIjtcbmltcG9ydCBIZXhhZ29uIGZyb20gXCIuL25vZGVzL3NoYXBlcy9IZXhhZ29uXCI7XG5pbXBvcnQgU3RhciBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvU3RhclwiO1xuaW1wb3J0IFRleHQgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL1RleHRcIjtcbmltcG9ydCBUcmlhbmdsZSBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvVHJpYW5nbGVcIjtcbmltcG9ydCBUcmlhbmdsZURvd24gZnJvbSBcIi4vbm9kZXMvc2hhcGVzL1RyaWFuZ2xlRG93blwiO1xuXG4vKipcbiAqIEEgbm9kZS4gQSBub2RlIGNhbiBiZSBjb25uZWN0ZWQgdG8gb3RoZXIgbm9kZXMgdmlhIG9uZSBvciBtdWx0aXBsZSBlZGdlcy5cbiAqL1xuY2xhc3MgTm9kZSB7XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBBbiBvYmplY3QgY29udGFpbmluZyBvcHRpb25zIGZvciB0aGUgbm9kZS4gQWxsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgYXJlIG9wdGlvbmFsLCBleGNlcHQgZm9yIHRoZSBpZC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBpZCAgICAgSWQgb2YgdGhlIG5vZGUuIFJlcXVpcmVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbGFiZWwgIFRleHQgbGFiZWwgZm9yIHRoZSBub2RlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge251bWJlcn0geCAgICAgIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIG5vZGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSB5ICAgICAgVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIG5vZGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBzaGFwZSAgTm9kZSBzaGFwZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IGltYWdlICBBbiBpbWFnZSB1cmxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSB0aXRsZSAgQSB0aXRsZSB0ZXh0LCBjYW4gYmUgSFRNTFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthbnl0eXBlfSBncm91cCBBIGdyb3VwIG5hbWUgb3IgbnVtYmVyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5ICAgICAgICAgICAgICAgU2hhcmVkIHN0YXRlIG9mIGN1cnJlbnQgbmV0d29yayBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge05ldHdvcmsuSW1hZ2VzfSBpbWFnZWxpc3QgIEEgbGlzdCB3aXRoIGltYWdlcy4gT25seSBuZWVkZWQgd2hlbiB0aGUgbm9kZSBoYXMgYW4gaW1hZ2VcbiAgICogQHBhcmFtIHtHcm91cHN9IGdyb3VwbGlzdCAgICAgICAgICBBIGxpc3Qgd2l0aCBncm91cHMuIE5lZWRlZCBmb3IgcmV0cmlldmluZyBncm91cCBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBnbG9iYWxPcHRpb25zICAgICAgQ3VycmVudCBnbG9iYWwgbm9kZSBvcHRpb25zOyB0aGVzZSBzZXJ2ZSBhcyBkZWZhdWx0cyBmb3IgdGhlIG5vZGUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRPcHRpb25zICAgICBHbG9iYWwgZGVmYXVsdCBvcHRpb25zIGZvciBub2Rlczsgbm90ZSB0aGF0IHRoaXMgaXMgYWxzbyB0aGUgcHJvdG90eXBlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBgZ2xvYmFsT3B0aW9uc2AuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zLFxuICAgIGJvZHksXG4gICAgaW1hZ2VsaXN0LFxuICAgIGdyb3VwbGlzdCxcbiAgICBnbG9iYWxPcHRpb25zLFxuICAgIGRlZmF1bHRPcHRpb25zXG4gICkge1xuICAgIHRoaXMub3B0aW9ucyA9IGJyaWRnZU9iamVjdChnbG9iYWxPcHRpb25zKTtcbiAgICB0aGlzLmdsb2JhbE9wdGlvbnMgPSBnbG9iYWxPcHRpb25zO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuXG4gICAgdGhpcy5lZGdlcyA9IFtdOyAvLyBhbGwgZWRnZXMgY29ubmVjdGVkIHRvIHRoaXMgbm9kZVxuXG4gICAgLy8gc2V0IGRlZmF1bHRzIGZvciB0aGUgb3B0aW9uc1xuICAgIHRoaXMuaWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pbWFnZWxpc3QgPSBpbWFnZWxpc3Q7XG4gICAgdGhpcy5ncm91cGxpc3QgPSBncm91cGxpc3Q7XG5cbiAgICAvLyBzdGF0ZSBvcHRpb25zXG4gICAgdGhpcy54ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMueSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmJhc2VTaXplID0gdGhpcy5vcHRpb25zLnNpemU7XG4gICAgdGhpcy5iYXNlRm9udFNpemUgPSB0aGlzLm9wdGlvbnMuZm9udC5zaXplO1xuICAgIHRoaXMucHJlZGVmaW5lZFBvc2l0aW9uID0gZmFsc2U7IC8vIHVzZWQgdG8gY2hlY2sgaWYgaW5pdGlhbCBmaXQgc2hvdWxkIGp1c3QgdGFrZSB0aGUgcmFuZ2Ugb3IgYXBwcm94aW1hdGVcbiAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5ob3ZlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5sYWJlbE1vZHVsZSA9IG5ldyBMYWJlbChcbiAgICAgIHRoaXMuYm9keSxcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIGZhbHNlIC8qIE5vdCBlZGdlIGxhYmVsICovXG4gICAgKTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoIGEgZWRnZSB0byB0aGUgbm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge0VkZ2V9IGVkZ2VcbiAgICovXG4gIGF0dGFjaEVkZ2UoZWRnZSkge1xuICAgIGlmICh0aGlzLmVkZ2VzLmluZGV4T2YoZWRnZSkgPT09IC0xKSB7XG4gICAgICB0aGlzLmVkZ2VzLnB1c2goZWRnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGFjaCBhIGVkZ2UgZnJvbSB0aGUgbm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge0VkZ2V9IGVkZ2VcbiAgICovXG4gIGRldGFjaEVkZ2UoZWRnZSkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5lZGdlcy5pbmRleE9mKGVkZ2UpO1xuICAgIGlmIChpbmRleCAhPSAtMSkge1xuICAgICAgdGhpcy5lZGdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgb3Igb3ZlcndyaXRlIG9wdGlvbnMgZm9yIHRoZSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIGFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAgICogQHJldHVybnMge251bGx8Ym9vbGVhbn1cbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IGN1cnJlbnRTaGFwZSA9IHRoaXMub3B0aW9ucy5zaGFwZTtcblxuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgcmV0dXJuOyAvLyBOb3RlIHRoYXQgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlICd1bmRlZmluZWQnISBUaGlzIGlzIE9LLlxuICAgIH1cblxuICAgIC8vIFNhdmUgdGhlIGNvbG9yIGZvciBsYXRlci5cbiAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBwcmV2ZW50IGxvY2FsIGNvbG9yIGZyb20gYmVpbmcgb3ZlcndyaXR0ZW4gYnkgZ3JvdXAgY29sb3IuXG4gICAgLy8gVE9ETzogVG8gcHJldmVudCBzdWNoIHdvcmthcm91bmRzIHRoZSB3YXkgb3B0aW9ucyBhcmUgaGFuZGxlZCBzaG91bGQgYmUgcmV3cml0dGVuIGZyb20gc2NyYXRjaC5cbiAgICAvLyBUaGlzIGlzIG5vdCB0aGUgb25seSBwcm9ibGVtIHdpdGggY3VycmVudCBvcHRpb25zIGhhbmRsaW5nLlxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb2xvciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5fbG9jYWxDb2xvciA9IG9wdGlvbnMuY29sb3I7XG4gICAgfVxuXG4gICAgLy8gYmFzaWMgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vZGUgbXVzdCBoYXZlIGFuIGlkXCIpO1xuICAgIH1cblxuICAgIE5vZGUuY2hlY2tNYXNzKG9wdGlvbnMsIHRoaXMuaWQpO1xuXG4gICAgLy8gc2V0IHRoZXNlIG9wdGlvbnMgbG9jYWxseVxuICAgIC8vIGNsZWFyIHggYW5kIHkgcG9zaXRpb25zXG4gICAgaWYgKG9wdGlvbnMueCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy54ID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMueCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMueCA9IHBhcnNlSW50KG9wdGlvbnMueCk7XG4gICAgICAgIHRoaXMucHJlZGVmaW5lZFBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMueSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy55ID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMueSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMueSA9IHBhcnNlSW50KG9wdGlvbnMueSk7XG4gICAgICAgIHRoaXMucHJlZGVmaW5lZFBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJhc2VTaXplID0gb3B0aW9ucy5zaXplO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLnZhbHVlID0gcGFyc2VGbG9hdChvcHRpb25zLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHRyYW5zZm9ybXMgYWxsIHNob3J0aGFuZHMgaW50byBmdWxseSBkZWZpbmVkIG9wdGlvbnNcbiAgICBOb2RlLnBhcnNlT3B0aW9ucyhcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIG9wdGlvbnMsXG4gICAgICB0cnVlLFxuICAgICAgdGhpcy5nbG9iYWxPcHRpb25zLFxuICAgICAgdGhpcy5ncm91cGxpc3RcbiAgICApO1xuXG4gICAgY29uc3QgcGlsZSA9IFtvcHRpb25zLCB0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnNdO1xuICAgIHRoaXMuY2hvb3NlciA9IGNob29zaWZ5KFwibm9kZVwiLCBwaWxlKTtcblxuICAgIHRoaXMuX2xvYWRfaW1hZ2VzKCk7XG4gICAgdGhpcy51cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKTtcblxuICAgIC8vIE5lZWQgdG8gc2V0IGxvY2FsIG9wYWNpdHkgYWZ0ZXIgYHRoaXMudXBkYXRlTGFiZWxNb2R1bGUob3B0aW9ucyk7YCBiZWNhdXNlIGB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKG9wdGlvbnMpO2Agb3ZlcnJpdGVzIGxvY2FsIG9wYWNpdHkgd2l0aCBncm91cCBvcGFjaXR5XG4gICAgaWYgKG9wdGlvbnMub3BhY2l0eSAhPT0gdW5kZWZpbmVkICYmIE5vZGUuY2hlY2tPcGFjaXR5KG9wdGlvbnMub3BhY2l0eSkpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5O1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU2hhcGUoY3VycmVudFNoYXBlKTtcblxuICAgIHJldHVybiBvcHRpb25zLmhpZGRlbiAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMucGh5c2ljcyAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGltYWdlcyBmcm9tIHRoZSBvcHRpb25zLCBmb3IgdGhlIG5vZGVzIHRoYXQgbmVlZCB0aGVtLlxuICAgKlxuICAgKiBJbWFnZXMgYXJlIGFsd2F5cyBsb2FkZWQsIGV2ZW4gaWYgdGhleSBhcmUgbm90IHVzZWQgaW4gdGhlIGN1cnJlbnQgc2hhcGUuXG4gICAqIFRoZSB1c2VyIG1heSBzd2l0Y2ggdG8gYW4gaW1hZ2Ugc2hhcGUgbGF0ZXIgb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbG9hZF9pbWFnZXMoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLnNoYXBlID09PSBcImNpcmN1bGFySW1hZ2VcIiB8fFxuICAgICAgdGhpcy5vcHRpb25zLnNoYXBlID09PSBcImltYWdlXCJcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW1hZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJPcHRpb24gaW1hZ2UgbXVzdCBiZSBkZWZpbmVkIGZvciBub2RlIHR5cGUgJ1wiICtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zaGFwZSArXG4gICAgICAgICAgICBcIidcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaW1hZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmltYWdlbGlzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnRlcm5hbCBFcnJvcjogTm8gaW1hZ2VzIHByb3ZpZGVkXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmltYWdlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLmltYWdlT2JqID0gdGhpcy5pbWFnZWxpc3QubG9hZChcbiAgICAgICAgdGhpcy5vcHRpb25zLmltYWdlLFxuICAgICAgICB0aGlzLm9wdGlvbnMuYnJva2VuSW1hZ2UsXG4gICAgICAgIHRoaXMuaWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW1hZ2UudW5zZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHVuc2VsZWN0ZWQgaW1hZ2UgcHJvdmlkZWRcIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW1hZ2VPYmogPSB0aGlzLmltYWdlbGlzdC5sb2FkKFxuICAgICAgICB0aGlzLm9wdGlvbnMuaW1hZ2UudW5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5vcHRpb25zLmJyb2tlbkltYWdlLFxuICAgICAgICB0aGlzLmlkXG4gICAgICApO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmltYWdlLnNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbWFnZU9iakFsdCA9IHRoaXMuaW1hZ2VsaXN0LmxvYWQoXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmltYWdlLnNlbGVjdGVkLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5icm9rZW5JbWFnZSxcbiAgICAgICAgICB0aGlzLmlkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmltYWdlT2JqQWx0ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGF0IG9wYWNpdHkgaXMgb25seSBiZXR3ZWVuIDAgYW5kIDFcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9wYWNpdHlcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgY2hlY2tPcGFjaXR5KG9wYWNpdHkpIHtcbiAgICByZXR1cm4gMCA8PSBvcGFjaXR5ICYmIG9wYWNpdHkgPD0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGF0IG9yaWdpbiBpcyAnY2VudGVyJyBvciAndG9wLWxlZnQnXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgY2hlY2tDb29yZGluYXRlT3JpZ2luKG9yaWdpbikge1xuICAgIHJldHVybiBvcmlnaW4gPT09IHVuZGVmaW5lZCB8fCBvcmlnaW4gPT09IFwiY2VudGVyXCIgfHwgb3JpZ2luID09PSBcInRvcC1sZWZ0XCI7XG4gIH1cblxuICAvKipcbiAgICogQ29weSBncm91cCBvcHRpb24gdmFsdWVzIGludG8gdGhlIG5vZGUgb3B0aW9ucy5cbiAgICpcbiAgICogVGhlIGdyb3VwIG9wdGlvbnMgb3ZlcnJpZGUgdGhlIGdsb2JhbCBub2RlIG9wdGlvbnMsIHNvIHRoZSBjb3B5IG9mIGdyb3VwIG9wdGlvbnNcbiAgICogIG11c3QgaGFwcGVuICphZnRlciogdGhlIGdsb2JhbCBub2RlIG9wdGlvbnMgaGF2ZSBiZWVuIHNldC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgbXVzdCBhbHNvIGJlIGNhbGxlZCBhbHNvIGlmIHRoZSBnbG9iYWwgbm9kZSBvcHRpb25zIGhhdmUgY2hhbmdlZCBhbmQgdGhlIGdyb3VwIG9wdGlvbnMgZGlkIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudE9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld09wdGlvbnMgIG5ldyB2YWx1ZXMgZm9yIHRoZSBvcHRpb25zLCBjdXJyZW50bHkgb25seSBwYXNzZWQgaW4gZm9yIGNoZWNrXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBncm91cExpc3RcbiAgICovXG4gIHN0YXRpYyB1cGRhdGVHcm91cE9wdGlvbnMocGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgZ3JvdXBMaXN0KSB7XG4gICAgaWYgKGdyb3VwTGlzdCA9PT0gdW5kZWZpbmVkKSByZXR1cm47IC8vIE5vIGdyb3Vwcywgbm90aGluZyB0byBkb1xuXG4gICAgY29uc3QgZ3JvdXAgPSBwYXJlbnRPcHRpb25zLmdyb3VwO1xuXG4gICAgLy8gcGFyYW5vaWE6IHRoZSBzZWxlY3RlZCBncm91cCBpcyBhbHJlYWR5IG1lcmdlZCBpbnRvIG5vZGUgb3B0aW9ucywgY2hlY2suXG4gICAgaWYgKFxuICAgICAgbmV3T3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBuZXdPcHRpb25zLmdyb3VwICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGdyb3VwICE9PSBuZXdPcHRpb25zLmdyb3VwXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwidXBkYXRlR3JvdXBPcHRpb25zOiBncm91cCB2YWx1ZXMgaW4gb3B0aW9ucyBkb24ndCBtYXRjaC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNHcm91cCA9XG4gICAgICB0eXBlb2YgZ3JvdXAgPT09IFwibnVtYmVyXCIgfHwgKHR5cGVvZiBncm91cCA9PT0gXCJzdHJpbmdcIiAmJiBncm91cCAhPSBcIlwiKTtcbiAgICBpZiAoIWhhc0dyb3VwKSByZXR1cm47IC8vIGN1cnJlbnQgbm9kZSBoYXMgbm8gZ3JvdXAsIG5vIG5lZWQgdG8gbWVyZ2VcblxuICAgIGNvbnN0IGdyb3VwT2JqID0gZ3JvdXBMaXN0LmdldChncm91cCk7XG5cbiAgICBpZiAoZ3JvdXBPYmoub3BhY2l0eSAhPT0gdW5kZWZpbmVkICYmIG5ld09wdGlvbnMub3BhY2l0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIU5vZGUuY2hlY2tPcGFjaXR5KGdyb3VwT2JqLm9wYWNpdHkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIG9wdGlvbiBmb3Igbm9kZSBvcGFjaXR5LiBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZm91bmQ6IFwiICtcbiAgICAgICAgICAgIGdyb3VwT2JqLm9wYWNpdHlcbiAgICAgICAgKTtcbiAgICAgICAgZ3JvdXBPYmoub3BhY2l0eSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTa2lwIGFueSBuZXcgb3B0aW9uIHRvIGF2b2lkIHRoZW0gYmVpbmcgb3ZlcnJpZGRlbiBieSB0aGUgZ3JvdXAgb3B0aW9ucy5cbiAgICBjb25zdCBza2lwUHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG5ld09wdGlvbnMpLmZpbHRlcihcbiAgICAgIChwKSA9PiBuZXdPcHRpb25zW3BdICE9IG51bGxcbiAgICApO1xuICAgIC8vIEFsd2F5cyBza2lwIG1lcmdpbmcgZ3JvdXAgZm9udCBvcHRpb25zIGludG8gcGFyZW50OyB0aGVzZSBhcmUgcmVxdWlyZWQgdG8gYmUgZGlzdGluY3QgZm9yIGxhYmVsc1xuICAgIHNraXBQcm9wZXJ0aWVzLnB1c2goXCJmb250XCIpO1xuICAgIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQoc2tpcFByb3BlcnRpZXMsIHBhcmVudE9wdGlvbnMsIGdyb3VwT2JqKTtcblxuICAgIC8vIHRoZSBjb2xvciBvYmplY3QgbmVlZHMgdG8gYmUgY29tcGxldGVseSBkZWZpbmVkLlxuICAgIC8vIFNpbmNlIGdyb3VwcyBjYW4gcGFydGlhbGx5IG92ZXJ3cml0ZSB0aGUgY29sb3JzLCB3ZSBwYXJzZSBpdCBhZ2FpbiwganVzdCBpbiBjYXNlLlxuICAgIHBhcmVudE9wdGlvbnMuY29sb3IgPSBwYXJzZUNvbG9yKHBhcmVudE9wdGlvbnMuY29sb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvY2VzcyBhbGwgcG9zc2libGUgc2hvcnRoYW5kcyBpbiB0aGUgbmV3IG9wdGlvbnMgYW5kIG1ha2VzIHN1cmUgdGhhdCB0aGUgcGFyZW50T3B0aW9ucyBhcmUgZnVsbHkgZGVmaW5lZC5cbiAgICogU3RhdGljIHNvIGl0IGNhbiBhbHNvIGJlIHVzZWQgYnkgdGhlIGhhbmRsZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdPcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93RGVsZXRpb249ZmFsc2VdXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbZ2xvYmFsT3B0aW9ucz17fV1cbiAgICogQHBhcmFtIHtvYmplY3R9IFtncm91cExpc3RdXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZU9wdGlvbnMoXG4gICAgcGFyZW50T3B0aW9ucyxcbiAgICBuZXdPcHRpb25zLFxuICAgIGFsbG93RGVsZXRpb24gPSBmYWxzZSxcbiAgICBnbG9iYWxPcHRpb25zID0ge30sXG4gICAgZ3JvdXBMaXN0XG4gICkge1xuICAgIGNvbnN0IGZpZWxkcyA9IFtcImNvbG9yXCIsIFwiZml4ZWRcIiwgXCJzaGFkb3dcIl07XG4gICAgc2VsZWN0aXZlTm90RGVlcEV4dGVuZChmaWVsZHMsIHBhcmVudE9wdGlvbnMsIG5ld09wdGlvbnMsIGFsbG93RGVsZXRpb24pO1xuXG4gICAgTm9kZS5jaGVja01hc3MobmV3T3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW50T3B0aW9ucy5vcGFjaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghTm9kZS5jaGVja09wYWNpdHkocGFyZW50T3B0aW9ucy5vcGFjaXR5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiSW52YWxpZCBvcHRpb24gZm9yIG5vZGUgb3BhY2l0eS4gVmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEsIGZvdW5kOiBcIiArXG4gICAgICAgICAgICBwYXJlbnRPcHRpb25zLm9wYWNpdHlcbiAgICAgICAgKTtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5vcGFjaXR5ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZXdPcHRpb25zLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFOb2RlLmNoZWNrT3BhY2l0eShuZXdPcHRpb25zLm9wYWNpdHkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIG9wdGlvbiBmb3Igbm9kZSBvcGFjaXR5LiBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZm91bmQ6IFwiICtcbiAgICAgICAgICAgIG5ld09wdGlvbnMub3BhY2l0eVxuICAgICAgICApO1xuICAgICAgICBuZXdPcHRpb25zLm9wYWNpdHkgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgbmV3T3B0aW9ucy5zaGFwZVByb3BlcnRpZXMgJiZcbiAgICAgICFOb2RlLmNoZWNrQ29vcmRpbmF0ZU9yaWdpbihuZXdPcHRpb25zLnNoYXBlUHJvcGVydGllcy5jb29yZGluYXRlT3JpZ2luKVxuICAgICkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJJbnZhbGlkIG9wdGlvbiBmb3Igbm9kZSBjb29yZGluYXRlT3JpZ2luLCBmb3VuZDogXCIgK1xuICAgICAgICAgIG5ld09wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gbWVyZ2UgdGhlIHNoYWRvdyBvcHRpb25zIGludG8gdGhlIHBhcmVudC5cbiAgICBtZXJnZU9wdGlvbnMocGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgXCJzaGFkb3dcIiwgZ2xvYmFsT3B0aW9ucyk7XG5cbiAgICAvLyBpbmRpdmlkdWFsIHNoYXBlIG5ld09wdGlvbnNcbiAgICBpZiAobmV3T3B0aW9ucy5jb2xvciAhPT0gdW5kZWZpbmVkICYmIG5ld09wdGlvbnMuY29sb3IgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZENvbG9yID0gcGFyc2VDb2xvcihuZXdPcHRpb25zLmNvbG9yKTtcbiAgICAgIGZpbGxJZkRlZmluZWQocGFyZW50T3B0aW9ucy5jb2xvciwgcGFyc2VkQ29sb3IpO1xuICAgIH0gZWxzZSBpZiAoYWxsb3dEZWxldGlvbiA9PT0gdHJ1ZSAmJiBuZXdPcHRpb25zLmNvbG9yID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmNvbG9yID0gYnJpZGdlT2JqZWN0KGdsb2JhbE9wdGlvbnMuY29sb3IpOyAvLyBzZXQgdGhlIG9iamVjdCBiYWNrIHRvIHRoZSBnbG9iYWwgb3B0aW9uc1xuICAgIH1cblxuICAgIC8vIGhhbmRsZSB0aGUgZml4ZWQgb3B0aW9uc1xuICAgIGlmIChuZXdPcHRpb25zLmZpeGVkICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5maXhlZCAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBuZXdPcHRpb25zLmZpeGVkID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICBwYXJlbnRPcHRpb25zLmZpeGVkLnggPSBuZXdPcHRpb25zLmZpeGVkO1xuICAgICAgICBwYXJlbnRPcHRpb25zLmZpeGVkLnkgPSBuZXdPcHRpb25zLmZpeGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5ld09wdGlvbnMuZml4ZWQueCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdHlwZW9mIG5ld09wdGlvbnMuZml4ZWQueCA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGFyZW50T3B0aW9ucy5maXhlZC54ID0gbmV3T3B0aW9ucy5maXhlZC54O1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBuZXdPcHRpb25zLmZpeGVkLnkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHR5cGVvZiBuZXdPcHRpb25zLmZpeGVkLnkgPT09IFwiYm9vbGVhblwiXG4gICAgICAgICkge1xuICAgICAgICAgIHBhcmVudE9wdGlvbnMuZml4ZWQueSA9IG5ld09wdGlvbnMuZml4ZWQueTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuZm9udCA9PT0gbnVsbCkge1xuICAgICAgcGFyZW50T3B0aW9ucy5mb250ID0gYnJpZGdlT2JqZWN0KGdsb2JhbE9wdGlvbnMuZm9udCk7IC8vIHNldCB0aGUgb2JqZWN0IGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb25zXG4gICAgfVxuXG4gICAgTm9kZS51cGRhdGVHcm91cE9wdGlvbnMocGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgZ3JvdXBMaXN0KTtcblxuICAgIC8vIGhhbmRsZSB0aGUgc2NhbGluZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGxhYmVsIHBhcnRcbiAgICBpZiAobmV3T3B0aW9ucy5zY2FsaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1lcmdlT3B0aW9ucyhcbiAgICAgICAgcGFyZW50T3B0aW9ucy5zY2FsaW5nLFxuICAgICAgICBuZXdPcHRpb25zLnNjYWxpbmcsXG4gICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgZ2xvYmFsT3B0aW9ucy5zY2FsaW5nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7e2NvbG9yOiAqLCBib3JkZXJXaWR0aDogKiwgYm9yZGVyQ29sb3I6ICosIHNpemU6ICosIGJvcmRlckRhc2hlczogKGJvb2xlYW58QXJyYXl8YWxsT3B0aW9ucy5ub2Rlcy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyRGFzaGVzfHtib29sZWFuLCBhcnJheX0pLCBib3JkZXJSYWRpdXM6IChudW1iZXJ8YWxsT3B0aW9ucy5ub2Rlcy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzfHtudW1iZXJ9fEFycmF5KSwgc2hhZG93OiAqLCBzaGFkb3dDb2xvcjogKiwgc2hhZG93U2l6ZTogKiwgc2hhZG93WDogKiwgc2hhZG93WTogKn19XG4gICAqL1xuICBnZXRGb3JtYXR0aW5nVmFsdWVzKCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHtcbiAgICAgIGNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IuYmFja2dyb3VuZCxcbiAgICAgIG9wYWNpdHk6IHRoaXMub3B0aW9ucy5vcGFjaXR5LFxuICAgICAgYm9yZGVyV2lkdGg6IHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aCxcbiAgICAgIGJvcmRlckNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IuYm9yZGVyLFxuICAgICAgc2l6ZTogdGhpcy5vcHRpb25zLnNpemUsXG4gICAgICBib3JkZXJEYXNoZXM6IHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyRGFzaGVzLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmJvcmRlclJhZGl1cyxcbiAgICAgIHNoYWRvdzogdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkLFxuICAgICAgc2hhZG93Q29sb3I6IHRoaXMub3B0aW9ucy5zaGFkb3cuY29sb3IsXG4gICAgICBzaGFkb3dTaXplOiB0aGlzLm9wdGlvbnMuc2hhZG93LnNpemUsXG4gICAgICBzaGFkb3dYOiB0aGlzLm9wdGlvbnMuc2hhZG93LngsXG4gICAgICBzaGFkb3dZOiB0aGlzLm9wdGlvbnMuc2hhZG93LnksXG4gICAgfTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZCB8fCB0aGlzLmhvdmVyKSB7XG4gICAgICBpZiAodGhpcy5jaG9vc2VyID09PSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aFNlbGVjdGVkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhbHVlcy5ib3JkZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aFNlbGVjdGVkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXMuYm9yZGVyV2lkdGggKj0gMjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWVzLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kO1xuICAgICAgICAgIHZhbHVlcy5ib3JkZXJDb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyO1xuICAgICAgICAgIHZhbHVlcy5zaGFkb3cgPSB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ob3Zlcikge1xuICAgICAgICAgIHZhbHVlcy5jb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvci5ob3Zlci5iYWNrZ3JvdW5kO1xuICAgICAgICAgIHZhbHVlcy5ib3JkZXJDb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvci5ob3Zlci5ib3JkZXI7XG4gICAgICAgICAgdmFsdWVzLnNoYWRvdyA9IHRoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5jaG9vc2VyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5jaG9vc2VyKHZhbHVlcywgdGhpcy5vcHRpb25zLmlkLCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyKTtcbiAgICAgICAgaWYgKHZhbHVlcy5zaGFkb3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsdWVzLnNoYWRvd0NvbG9yICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LmNvbG9yIHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93U2l6ZSAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy5zaXplIHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93WCAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy54IHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93WSAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy55XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVzLnNoYWRvdyA9IHRoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZDtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5vcGFjaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSB0aGlzLm9wdGlvbnMub3BhY2l0eTtcbiAgICAgIHZhbHVlcy5ib3JkZXJDb2xvciA9IG92ZXJyaWRlT3BhY2l0eSh2YWx1ZXMuYm9yZGVyQ29sb3IsIG9wYWNpdHkpO1xuICAgICAgdmFsdWVzLmNvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KHZhbHVlcy5jb2xvciwgb3BhY2l0eSk7XG4gICAgICB2YWx1ZXMuc2hhZG93Q29sb3IgPSBvdmVycmlkZU9wYWNpdHkodmFsdWVzLnNoYWRvd0NvbG9yLCBvcGFjaXR5KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgdXBkYXRlTGFiZWxNb2R1bGUob3B0aW9ucykge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgPT09IHVuZGVmaW5lZCB8fCB0aGlzLm9wdGlvbnMubGFiZWwgPT09IG51bGwpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5sYWJlbCA9IFwiXCI7XG4gICAgfVxuXG4gICAgTm9kZS51cGRhdGVHcm91cE9wdGlvbnMoXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGNvbG9yOiAob3B0aW9ucyAmJiBvcHRpb25zLmNvbG9yKSB8fCB0aGlzLl9sb2NhbENvbG9yIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICB0aGlzLmdyb3VwbGlzdFxuICAgICk7XG5cbiAgICAvL1xuICAgIC8vIE5vdGU6VGhlIHByb3RvdHlwZSBjaGFpbiBmb3IgdGhpcy5vcHRpb25zIGlzOlxuICAgIC8vXG4gICAgLy8gdGhpcy5vcHRpb25zIC0+ICAgIE5vZGVzSGFuZGxlci5vcHRpb25zICAgIC0+IE5vZGVzSGFuZGxlci5kZWZhdWx0T3B0aW9uc1xuICAgIC8vICAgICAgICAgICAgICAgICAoYWxzbzogdGhpcy5nbG9iYWxPcHRpb25zKVxuICAgIC8vXG4gICAgLy8gTm90ZSB0aGF0IHRoZSBwcm90b3R5cGVzIGFyZSBtZW50aW9uZWQgZXhwbGljaXRseSBpbiB0aGUgcGlsZSBsaXN0IGJlbG93O1xuICAgIC8vIFdFIERPTidUIFdBTlQgVEhFIE9SREVSIE9GIFRIRSBQUk9UT1RZUEVTISEhISBBdCBsZWFzdCwgbm90IGZvciBmb250IGhhbmRsaW5nIG9mIGxhYmVscy5cbiAgICAvLyBUaGlzIGlzIGEgZ29vZCBpbmRpY2F0aW9uIHRoYXQgdGhlIHByb3RvdHlwZSB1c2FnZSBvZiBvcHRpb25zIGlzIGRlZmljaWVudC5cbiAgICAvL1xuICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBsaXN0LmdldCh0aGlzLm9wdGlvbnMuZ3JvdXAsIGZhbHNlKTtcbiAgICBjb25zdCBwaWxlID0gW1xuICAgICAgb3B0aW9ucywgLy8gbmV3IG9wdGlvbnNcbiAgICAgIHRoaXMub3B0aW9ucywgLy8gY3VycmVudCBub2RlIG9wdGlvbnMsIHNlZSBjb21tZW50IGFib3ZlIGZvciBwcm90b3R5cGVcbiAgICAgIGN1cnJlbnRHcm91cCwgLy8gZ3JvdXAgb3B0aW9ucywgaWYgYW55XG4gICAgICB0aGlzLmdsb2JhbE9wdGlvbnMsIC8vIEN1cnJlbnRseSBzZXQgZ2xvYmFsIG5vZGUgb3B0aW9uc1xuICAgICAgdGhpcy5kZWZhdWx0T3B0aW9ucywgLy8gRGVmYXVsdCBnbG9iYWwgbm9kZSBvcHRpb25zXG4gICAgXTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlLnVwZGF0ZSh0aGlzLm9wdGlvbnMsIHBpbGUpO1xuXG4gICAgaWYgKHRoaXMubGFiZWxNb2R1bGUuYmFzZVNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5iYXNlRm9udFNpemUgPSB0aGlzLmxhYmVsTW9kdWxlLmJhc2VTaXplO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudFNoYXBlXG4gICAqL1xuICB1cGRhdGVTaGFwZShjdXJyZW50U2hhcGUpIHtcbiAgICBpZiAoY3VycmVudFNoYXBlID09PSB0aGlzLm9wdGlvbnMuc2hhcGUgJiYgdGhpcy5zaGFwZSkge1xuICAgICAgdGhpcy5zaGFwZS5zZXRPcHRpb25zKHRoaXMub3B0aW9ucywgdGhpcy5pbWFnZU9iaiwgdGhpcy5pbWFnZU9iakFsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNob29zZSBkcmF3IG1ldGhvZCBkZXBlbmRpbmcgb24gdGhlIHNoYXBlXG4gICAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5zaGFwZSkge1xuICAgICAgICBjYXNlIFwiYm94XCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBCb3godGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY2lyY2xlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBDaXJjbGUodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY2lyY3VsYXJJbWFnZVwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgQ2lyY3VsYXJJbWFnZShcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGUsXG4gICAgICAgICAgICB0aGlzLmltYWdlT2JqLFxuICAgICAgICAgICAgdGhpcy5pbWFnZU9iakFsdFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjdXN0b21cIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEN1c3RvbVNoYXBlKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZSxcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jdHhSZW5kZXJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkYXRhYmFzZVwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgRGF0YWJhc2UodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGlhbW9uZFwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgRGlhbW9uZCh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkb3RcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IERvdCh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJlbGxpcHNlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBFbGxpcHNlKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImljb25cIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEljb24odGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW1hZ2VcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEltYWdlKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZSxcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VPYmosXG4gICAgICAgICAgICB0aGlzLmltYWdlT2JqQWx0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInNxdWFyZVwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgU3F1YXJlKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImhleGFnb25cIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEhleGFnb24odGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3RhclwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgU3Rhcih0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBUZXh0KHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRyaWFuZ2xlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBUcmlhbmdsZSh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ0cmlhbmdsZURvd25cIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IFRyaWFuZ2xlRG93bihcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgRWxsaXBzZSh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubmVlZHNSZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogc2VsZWN0IHRoaXMgbm9kZVxuICAgKi9cbiAgc2VsZWN0KCkge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMubmVlZHNSZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogdW5zZWxlY3QgdGhpcyBub2RlXG4gICAqL1xuICB1bnNlbGVjdCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5uZWVkc1JlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgY2FsY3VsYXRlZCBzaXplIG9mIHRoZSBub2RlLCBmb3JjZXMgaXQgdG8gcmVjYWxjdWxhdGUgaXRzIHNpemVcbiAgICovXG4gIG5lZWRzUmVmcmVzaCgpIHtcbiAgICB0aGlzLnNoYXBlLnJlZnJlc2hOZWVkZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgdGl0bGUgb2YgdGhpcyBub2RlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aXRsZSAgICBUaGUgdGl0bGUgb2YgdGhlIG5vZGUsIG9yIHVuZGVmaW5lZCB3aGVuIG5vIHRpdGxlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gc2V0LlxuICAgKi9cbiAgZ2V0VGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50aXRsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIHRvIHRoZSBib3JkZXIgb2YgdGhlIE5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAgICAgICAgQW5nbGUgaW4gcmFkaWFuc1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBkaXN0YW5jZSAgIERpc3RhbmNlIHRvIHRoZSBib3JkZXIgaW4gcGl4ZWxzXG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFwZS5kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgbm9kZSBoYXMgYSBmaXhlZCB4IGFuZCB5IHBvc2l0aW9uXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAgICAgIHRydWUgaWYgZml4ZWQsIGZhbHNlIGlmIG5vdFxuICAgKi9cbiAgaXNGaXhlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpeGVkLnggJiYgdGhpcy5vcHRpb25zLmZpeGVkLnk7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2sgaWYgdGhpcyBub2RlIGlzIHNlbGVjdGVcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHNlbGVjdGVkICAgVHJ1ZSBpZiBub2RlIGlzIHNlbGVjdGVkLCBlbHNlIGZhbHNlXG4gICAqL1xuICBpc1NlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiB0aGUgbm9kZS4gQ2FuIGJlIHVuZGVmaW5lZFxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSB2YWx1ZVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgZGltZW5zaW9ucyBvZiB0aGUgbGFiZWxcbiAgICpcbiAgICogQHJldHVybnMge3JlY3R9XG4gICAqL1xuICBnZXRMYWJlbFNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxNb2R1bGUuc2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdCB0aGUgdmFsdWUgcmFuZ2Ugb2YgdGhlIG5vZGUuIFRoZSBub2RlIHdpbGwgYWRqdXN0IGl0J3Mgc2l6ZVxuICAgKiBiYXNlZCBvbiBpdHMgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heFxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxcbiAgICovXG4gIHNldFZhbHVlUmFuZ2UobWluLCBtYXgsIHRvdGFsKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzY2FsZSA9IHRoaXMub3B0aW9ucy5zY2FsaW5nLmN1c3RvbVNjYWxpbmdGdW5jdGlvbihcbiAgICAgICAgbWluLFxuICAgICAgICBtYXgsXG4gICAgICAgIHRvdGFsLFxuICAgICAgICB0aGlzLm9wdGlvbnMudmFsdWVcbiAgICAgICk7XG4gICAgICBjb25zdCBzaXplRGlmZiA9IHRoaXMub3B0aW9ucy5zY2FsaW5nLm1heCAtIHRoaXMub3B0aW9ucy5zY2FsaW5nLm1pbjtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGZvbnREaWZmID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5tYXggLSB0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5taW47XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb250LnNpemUgPVxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1pbiArIHNjYWxlICogZm9udERpZmY7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMuc2l6ZSA9IHRoaXMub3B0aW9ucy5zY2FsaW5nLm1pbiArIHNjYWxlICogc2l6ZURpZmY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9ucy5zaXplID0gdGhpcy5iYXNlU2l6ZTtcbiAgICAgIHRoaXMub3B0aW9ucy5mb250LnNpemUgPSB0aGlzLmJhc2VGb250U2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKCk7XG4gIH1cblxuICAvKipcbiAgICogRHJhdyB0aGlzIG5vZGUgaW4gdGhlIGdpdmVuIGNhbnZhc1xuICAgKiBUaGUgMmQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGhpZ2hlciBsYXllcnMuXG4gICAqL1xuICBkcmF3KGN0eCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0Rm9ybWF0dGluZ1ZhbHVlcygpO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNoYXBlLmRyYXcoY3R4LCB0aGlzLngsIHRoaXMueSwgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3ZlciwgdmFsdWVzKSB8fFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBzaGFwZVxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gICBjdHhcbiAgICovXG4gIHVwZGF0ZUJvdW5kaW5nQm94KGN0eCkge1xuICAgIHRoaXMuc2hhcGUudXBkYXRlQm91bmRpbmdCb3godGhpcy54LCB0aGlzLnksIGN0eCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhpcyBub2RlIGluIHRoZSBnaXZlbiBjYW52YXNcbiAgICogVGhlIDJkIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhcyBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSAgIGN0eFxuICAgKi9cbiAgcmVzaXplKGN0eCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0Rm9ybWF0dGluZ1ZhbHVlcygpO1xuICAgIHRoaXMuc2hhcGUucmVzaXplKGN0eCwgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3ZlciwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgYWxsIHZpc3VhbCBlbGVtZW50cyBvZiB0aGlzIG5vZGUgaW5zdGFuY2UsIGluIHdoaWNoIHRoZSBnaXZlblxuICAgKiBwb2ludCBmYWxscyB3aXRoaW4gdGhlIGJvdW5kaW5nIHNoYXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb2ludFxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG5vZGVDbGlja0l0ZW18bm9kZUxhYmVsQ2xpY2tJdGVtPn0gbGlzdCB3aXRoIHRoZSBpdGVtcyB3aGljaCBhcmUgb24gdGhlIHBvaW50XG4gICAqL1xuICBnZXRJdGVtc09uUG9pbnQocG9pbnQpIHtcbiAgICBjb25zdCByZXQgPSBbXTtcblxuICAgIGlmICh0aGlzLmxhYmVsTW9kdWxlLnZpc2libGUoKSkge1xuICAgICAgaWYgKHBvaW50SW5SZWN0KHRoaXMubGFiZWxNb2R1bGUuZ2V0U2l6ZSgpLCBwb2ludCkpIHtcbiAgICAgICAgcmV0LnB1c2goeyBub2RlSWQ6IHRoaXMuaWQsIGxhYmVsSWQ6IDAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvaW50SW5SZWN0KHRoaXMuc2hhcGUuYm91bmRpbmdCb3gsIHBvaW50KSkge1xuICAgICAgcmV0LnB1c2goeyBub2RlSWQ6IHRoaXMuaWQgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIG9iamVjdCBpcyBvdmVybGFwcGluZyB3aXRoIHRoZSBwcm92aWRlZCBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iaiAgIGFuIG9iamVjdCB3aXRoIHBhcmFtZXRlcnMgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAgICAgVHJ1ZSBpZiBsb2NhdGlvbiBpcyBsb2NhdGVkIG9uIG5vZGVcbiAgICovXG4gIGlzT3ZlcmxhcHBpbmdXaXRoKG9iaikge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNoYXBlLmxlZnQgPCBvYmoucmlnaHQgJiZcbiAgICAgIHRoaXMuc2hhcGUubGVmdCArIHRoaXMuc2hhcGUud2lkdGggPiBvYmoubGVmdCAmJlxuICAgICAgdGhpcy5zaGFwZS50b3AgPCBvYmouYm90dG9tICYmXG4gICAgICB0aGlzLnNoYXBlLnRvcCArIHRoaXMuc2hhcGUuaGVpZ2h0ID4gb2JqLnRvcFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBvYmplY3QgaXMgb3ZlcmxhcHBpbmcgd2l0aCB0aGUgcHJvdmlkZWQgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmogICBhbiBvYmplY3Qgd2l0aCBwYXJhbWV0ZXJzIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gICAgIFRydWUgaWYgbG9jYXRpb24gaXMgbG9jYXRlZCBvbiBub2RlXG4gICAqL1xuICBpc0JvdW5kaW5nQm94T3ZlcmxhcHBpbmdXaXRoKG9iaikge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNoYXBlLmJvdW5kaW5nQm94LmxlZnQgPCBvYmoucmlnaHQgJiZcbiAgICAgIHRoaXMuc2hhcGUuYm91bmRpbmdCb3gucmlnaHQgPiBvYmoubGVmdCAmJlxuICAgICAgdGhpcy5zaGFwZS5ib3VuZGluZ0JveC50b3AgPCBvYmouYm90dG9tICYmXG4gICAgICB0aGlzLnNoYXBlLmJvdW5kaW5nQm94LmJvdHRvbSA+IG9iai50b3BcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHZhbGlkIHZhbHVlcyBmb3IgbWFzc1xuICAgKlxuICAgKiBUaGUgbWFzcyBtYXkgbm90IGJlIG5lZ2F0aXZlIG9yIHplcm8uIElmIGl0IGlzLCByZXNldCB0byAxXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gaWRcbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNoZWNrTWFzcyhvcHRpb25zLCBpZCkge1xuICAgIGlmIChvcHRpb25zLm1hc3MgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLm1hc3MgPD0gMCkge1xuICAgICAgbGV0IHN0cklkID0gXCJcIjtcbiAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHN0cklkID0gXCIgaW4gbm9kZSBpZDogXCIgKyBpZDtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiJWNOZWdhdGl2ZSBvciB6ZXJvIG1hc3MgZGlzYWxsb3dlZFwiICsgc3RySWQgKyBcIiwgc2V0dGluZyBtYXNzIHRvIDEuXCIsXG4gICAgICAgIFZBTElEQVRPUl9QUklOVF9TVFlMRVxuICAgICAgKTtcbiAgICAgIG9wdGlvbnMubWFzcyA9IDE7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5vZGU7XG4iLCAiaW1wb3J0IHsgYnJpZGdlT2JqZWN0LCBmb3JFYWNoIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgRGF0YVNldCwgaXNEYXRhVmlld0xpa2UgfSBmcm9tIFwidmlzLWRhdGEvZXNuZXh0XCI7XG5pbXBvcnQgTm9kZSBmcm9tIFwiLi9jb21wb25lbnRzL05vZGVcIjtcblxuLyoqXG4gKiBIYW5kbGVyIGZvciBOb2Rlc1xuICovXG5jbGFzcyBOb2Rlc0hhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtJbWFnZXN9IGltYWdlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxHcm91cD59IGdyb3Vwc1xuICAgKiBAcGFyYW0ge0xheW91dEVuZ2luZX0gbGF5b3V0RW5naW5lXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBpbWFnZXMsIGdyb3VwcywgbGF5b3V0RW5naW5lKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmltYWdlcyA9IGltYWdlcztcbiAgICB0aGlzLmdyb3VwcyA9IGdyb3VwcztcbiAgICB0aGlzLmxheW91dEVuZ2luZSA9IGxheW91dEVuZ2luZTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgbm9kZSBBUEkgaW4gdGhlIGJvZHkgY29udGFpbmVyXG4gICAgdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVOb2RlID0gdGhpcy5jcmVhdGUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubm9kZXNMaXN0ZW5lcnMgPSB7XG4gICAgICBhZGQ6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkKHBhcmFtcy5pdGVtcyk7XG4gICAgICB9LFxuICAgICAgdXBkYXRlOiAoZXZlbnQsIHBhcmFtcykgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZShwYXJhbXMuaXRlbXMsIHBhcmFtcy5kYXRhLCBwYXJhbXMub2xkRGF0YSk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlOiAoZXZlbnQsIHBhcmFtcykgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZShwYXJhbXMuaXRlbXMpO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgYm9yZGVyV2lkdGhTZWxlY3RlZDogdW5kZWZpbmVkLFxuICAgICAgYnJva2VuSW1hZ2U6IHVuZGVmaW5lZCxcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIGJvcmRlcjogXCIjMkI3Q0U5XCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzk3QzJGQ1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHtcbiAgICAgICAgICBib3JkZXI6IFwiIzJCN0NFOVwiLFxuICAgICAgICAgIGJhY2tncm91bmQ6IFwiI0QyRTVGRlwiLFxuICAgICAgICB9LFxuICAgICAgICBob3Zlcjoge1xuICAgICAgICAgIGJvcmRlcjogXCIjMkI3Q0U5XCIsXG4gICAgICAgICAgYmFja2dyb3VuZDogXCIjRDJFNUZGXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgb3BhY2l0eTogdW5kZWZpbmVkLCAvLyBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG4gICAgICBmaXhlZDoge1xuICAgICAgICB4OiBmYWxzZSxcbiAgICAgICAgeTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZm9udDoge1xuICAgICAgICBjb2xvcjogXCIjMzQzNDM0XCIsXG4gICAgICAgIHNpemU6IDE0LCAvLyBweFxuICAgICAgICBmYWNlOiBcImFyaWFsXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwibm9uZVwiLFxuICAgICAgICBzdHJva2VXaWR0aDogMCwgLy8gcHhcbiAgICAgICAgc3Ryb2tlQ29sb3I6IFwiI2ZmZmZmZlwiLFxuICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgdmFkanVzdDogMCxcbiAgICAgICAgbXVsdGk6IGZhbHNlLFxuICAgICAgICBib2xkOiB7XG4gICAgICAgICAgbW9kOiBcImJvbGRcIixcbiAgICAgICAgfSxcbiAgICAgICAgYm9sZGl0YWw6IHtcbiAgICAgICAgICBtb2Q6IFwiYm9sZCBpdGFsaWNcIixcbiAgICAgICAgfSxcbiAgICAgICAgaXRhbDoge1xuICAgICAgICAgIG1vZDogXCJpdGFsaWNcIixcbiAgICAgICAgfSxcbiAgICAgICAgbW9ubzoge1xuICAgICAgICAgIG1vZDogXCJcIixcbiAgICAgICAgICBzaXplOiAxNSwgLy8gcHhcbiAgICAgICAgICBmYWNlOiBcIm1vbm9zcGFjZVwiLFxuICAgICAgICAgIHZhZGp1c3Q6IDIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZ3JvdXA6IHVuZGVmaW5lZCxcbiAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICBpY29uOiB7XG4gICAgICAgIGZhY2U6IFwiRm9udEF3ZXNvbWVcIiwgLy8nRm9udEF3ZXNvbWUnLFxuICAgICAgICBjb2RlOiB1bmRlZmluZWQsIC8vJ1xcdWYwMDcnLFxuICAgICAgICBzaXplOiA1MCwgLy81MCxcbiAgICAgICAgY29sb3I6IFwiIzJCN0NFOVwiLCAvLycjYWEwMGZmJ1xuICAgICAgfSxcbiAgICAgIGltYWdlOiB1bmRlZmluZWQsIC8vIC0tPiBVUkxcbiAgICAgIGltYWdlUGFkZGluZzoge1xuICAgICAgICAvLyBvbmx5IGZvciBpbWFnZSBzaGFwZVxuICAgICAgICB0b3A6IDAsXG4gICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICBib3R0b206IDAsXG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICB9LFxuICAgICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogdHJ1ZSxcbiAgICAgIGxldmVsOiB1bmRlZmluZWQsXG4gICAgICBtYXJnaW46IHtcbiAgICAgICAgdG9wOiA1LFxuICAgICAgICByaWdodDogNSxcbiAgICAgICAgYm90dG9tOiA1LFxuICAgICAgICBsZWZ0OiA1LFxuICAgICAgfSxcbiAgICAgIG1hc3M6IDEsXG4gICAgICBwaHlzaWNzOiB0cnVlLFxuICAgICAgc2NhbGluZzoge1xuICAgICAgICBtaW46IDEwLFxuICAgICAgICBtYXg6IDMwLFxuICAgICAgICBsYWJlbDoge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgIG1pbjogMTQsXG4gICAgICAgICAgbWF4OiAzMCxcbiAgICAgICAgICBtYXhWaXNpYmxlOiAzMCxcbiAgICAgICAgICBkcmF3VGhyZXNob2xkOiA1LFxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21TY2FsaW5nRnVuY3Rpb246IGZ1bmN0aW9uIChtaW4sIG1heCwgdG90YWwsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKG1heCA9PT0gbWluKSB7XG4gICAgICAgICAgICByZXR1cm4gMC41O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9IDEgLyAobWF4IC0gbWluKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCAodmFsdWUgLSBtaW4pICogc2NhbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzaGFkb3c6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGNvbG9yOiBcInJnYmEoMCwwLDAsMC41KVwiLFxuICAgICAgICBzaXplOiAxMCxcbiAgICAgICAgeDogNSxcbiAgICAgICAgeTogNSxcbiAgICAgIH0sXG4gICAgICBzaGFwZTogXCJlbGxpcHNlXCIsXG4gICAgICBzaGFwZVByb3BlcnRpZXM6IHtcbiAgICAgICAgYm9yZGVyRGFzaGVzOiBmYWxzZSwgLy8gb25seSBmb3IgYm9yZGVyc1xuICAgICAgICBib3JkZXJSYWRpdXM6IDYsIC8vIG9ubHkgZm9yIGJveCBzaGFwZVxuICAgICAgICBpbnRlcnBvbGF0aW9uOiB0cnVlLCAvLyBvbmx5IGZvciBpbWFnZSBhbmQgY2lyY3VsYXJJbWFnZSBzaGFwZXNcbiAgICAgICAgdXNlSW1hZ2VTaXplOiBmYWxzZSwgLy8gb25seSBmb3IgaW1hZ2UgYW5kIGNpcmN1bGFySW1hZ2Ugc2hhcGVzXG4gICAgICAgIHVzZUJvcmRlcldpdGhJbWFnZTogZmFsc2UsIC8vIG9ubHkgZm9yIGltYWdlIHNoYXBlXG4gICAgICAgIGNvb3JkaW5hdGVPcmlnaW46IFwiY2VudGVyXCIsIC8vIG9ubHkgZm9yIGltYWdlIGFuZCBjaXJjdWxhckltYWdlIHNoYXBlc1xuICAgICAgfSxcbiAgICAgIHNpemU6IDI1LFxuICAgICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB4OiB1bmRlZmluZWQsXG4gICAgICB5OiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIC8vIFByb3RlY3QgZnJvbSBpZGlvY3lcbiAgICBpZiAodGhpcy5kZWZhdWx0T3B0aW9ucy5tYXNzIDw9IDApIHtcbiAgICAgIHRocm93IFwiSW50ZXJuYWwgZXJyb3I6IG1hc3MgaW4gZGVmYXVsdE9wdGlvbnMgb2YgTm9kZXNIYW5kbGVyIG1heSBub3QgYmUgemVybyBvciBuZWdhdGl2ZVwiO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IGJyaWRnZU9iamVjdCh0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgLy8gcmVmcmVzaCB0aGUgbm9kZXMuIFVzZWQgd2hlbiByZXZlcnRpbmcgZnJvbSBoaWVyYXJjaGljYWwgbGF5b3V0XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJyZWZyZXNoTm9kZXNcIiwgdGhpcy5yZWZyZXNoLmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwicmVmcmVzaFwiLCB0aGlzLnJlZnJlc2guYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZXN0cm95XCIsICgpID0+IHtcbiAgICAgIGZvckVhY2godGhpcy5ub2Rlc0xpc3RlbmVycywgKGNhbGxiYWNrLCBldmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ib2R5LmRhdGEubm9kZXMpIHRoaXMuYm9keS5kYXRhLm5vZGVzLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgICBkZWxldGUgdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVOb2RlO1xuICAgICAgZGVsZXRlIHRoaXMubm9kZXNMaXN0ZW5lcnMuYWRkO1xuICAgICAgZGVsZXRlIHRoaXMubm9kZXNMaXN0ZW5lcnMudXBkYXRlO1xuICAgICAgZGVsZXRlIHRoaXMubm9kZXNMaXN0ZW5lcnMucmVtb3ZlO1xuICAgICAgZGVsZXRlIHRoaXMubm9kZXNMaXN0ZW5lcnM7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIE5vZGUucGFyc2VPcHRpb25zKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgIC8vIE5lZWQgdG8gc2V0IG9wYWNpdHkgaGVyZSBiZWNhdXNlIE5vZGUucGFyc2VPcHRpb25zIGlzIGFsc28gdXNlZCBmb3IgZ3JvdXBzLFxuICAgICAgLy8gaWYgeW91IHNldCBvcGFjaXR5IGluIE5vZGUucGFyc2VPcHRpb25zIGl0IG92ZXJ3cml0ZXMgZ3JvdXAgb3BhY2l0eS5cbiAgICAgIGlmIChvcHRpb25zLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgTnVtYmVyLmlzTmFOKG9wdGlvbnMub3BhY2l0eSkgfHxcbiAgICAgICAgICAhTnVtYmVyLmlzRmluaXRlKG9wdGlvbnMub3BhY2l0eSkgfHxcbiAgICAgICAgICBvcHRpb25zLm9wYWNpdHkgPCAwIHx8XG4gICAgICAgICAgb3B0aW9ucy5vcGFjaXR5ID4gMVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIG9wdGlvbiBmb3Igbm9kZSBvcGFjaXR5LiBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZm91bmQ6IFwiICtcbiAgICAgICAgICAgICAgb3B0aW9ucy5vcGFjaXR5XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMub3BhY2l0eSA9IG9wdGlvbnMub3BhY2l0eTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgdGhlIHNoYXBlIGluIGFsbCBub2Rlc1xuICAgICAgaWYgKG9wdGlvbnMuc2hhcGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0aGlzLmJvZHkubm9kZXMpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5ub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0udXBkYXRlU2hhcGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIHRoZSBsYWJlbHMgb2Ygbm9kZXMgaWYgYW55IHJlbGV2YW50IG9wdGlvbnMgY2hhbmdlZC5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMuZm9udCAhPT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy53aWR0aENvbnN0cmFpbnQgIT09IFwidW5kZWZpbmVkXCIgfHxcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMuaGVpZ2h0Q29uc3RyYWludCAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlkIG9mIE9iamVjdC5rZXlzKHRoaXMuYm9keS5ub2RlcykpIHtcbiAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS51cGRhdGVMYWJlbE1vZHVsZSgpO1xuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLm5lZWRzUmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgc2hhcGUgc2l6ZSBpbiBhbGwgbm9kZXNcbiAgICAgIGlmIChvcHRpb25zLnNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0aGlzLmJvZHkubm9kZXMpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5ub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0ubmVlZHNSZWZyZXNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIHZhcmlhYmxlcyBpZiBuZWVkZWRcbiAgICAgIGlmIChvcHRpb25zLmhpZGRlbiAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMucGh5c2ljcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGRhdGEgc2V0IHdpdGggbm9kZXMgZm9yIHRoZSBuZXR3b3JrXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBEYXRhU2V0IHwgRGF0YVZpZXd9IG5vZGVzICAgICAgICAgVGhlIGRhdGEgY29udGFpbmluZyB0aGUgbm9kZXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvTm90RW1pdD1mYWxzZV0gLSBTdXBwcmVzcyBkYXRhIGNoYW5nZWQgZXZlbnQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXREYXRhKG5vZGVzLCBkb05vdEVtaXQgPSBmYWxzZSkge1xuICAgIGNvbnN0IG9sZE5vZGVzRGF0YSA9IHRoaXMuYm9keS5kYXRhLm5vZGVzO1xuXG4gICAgaWYgKGlzRGF0YVZpZXdMaWtlKFwiaWRcIiwgbm9kZXMpKSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5ub2RlcyA9IG5vZGVzO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShub2RlcykpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzID0gbmV3IERhdGFTZXQoKTtcbiAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzLmFkZChub2Rlcyk7XG4gICAgfSBlbHNlIGlmICghbm9kZXMpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzID0gbmV3IERhdGFTZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5IG9yIERhdGFTZXQgZXhwZWN0ZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKG9sZE5vZGVzRGF0YSkge1xuICAgICAgLy8gdW5zdWJzY3JpYmUgZnJvbSBvbGQgZGF0YXNldFxuICAgICAgZm9yRWFjaCh0aGlzLm5vZGVzTGlzdGVuZXJzLCBmdW5jdGlvbiAoY2FsbGJhY2ssIGV2ZW50KSB7XG4gICAgICAgIG9sZE5vZGVzRGF0YS5vZmYoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSBkcmF3biBub2Rlc1xuICAgIHRoaXMuYm9keS5ub2RlcyA9IHt9O1xuXG4gICAgaWYgKHRoaXMuYm9keS5kYXRhLm5vZGVzKSB7XG4gICAgICAvLyBzdWJzY3JpYmUgdG8gbmV3IGRhdGFzZXRcbiAgICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICAgIGZvckVhY2godGhpcy5ub2Rlc0xpc3RlbmVycywgZnVuY3Rpb24gKGNhbGxiYWNrLCBldmVudCkge1xuICAgICAgICBtZS5ib2R5LmRhdGEubm9kZXMub24oZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBkcmF3IGFsbCBuZXcgbm9kZXNcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldElkcygpO1xuICAgICAgdGhpcy5hZGQoaWRzLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoZG9Ob3RFbWl0ID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIG5vZGVzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvTm90RW1pdD1mYWxzZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFkZChpZHMsIGRvTm90RW1pdCA9IGZhbHNlKSB7XG4gICAgbGV0IGlkO1xuICAgIGNvbnN0IG5ld05vZGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlkID0gaWRzW2ldO1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldChpZCk7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGUocHJvcGVydGllcyk7XG4gICAgICBuZXdOb2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgdGhpcy5ib2R5Lm5vZGVzW2lkXSA9IG5vZGU7IC8vIG5vdGU6IHRoaXMgbWF5IHJlcGxhY2UgYW4gZXhpc3Rpbmcgbm9kZVxuICAgIH1cblxuICAgIHRoaXMubGF5b3V0RW5naW5lLnBvc2l0aW9uSW5pdGlhbGx5KG5ld05vZGVzKTtcblxuICAgIGlmIChkb05vdEVtaXQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZXhpc3Rpbmcgbm9kZXMsIG9yIGNyZWF0ZSB0aGVtIHdoZW4gbm90IHlldCBleGlzdGluZ1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgc3RyaW5nW119IGlkcyBpZCdzIG9mIGNoYW5nZWQgbm9kZXNcbiAgICogQHBhcmFtIHtBcnJheX0gY2hhbmdlZERhdGEgYXJyYXkgd2l0aCBjaGFuZ2VkIGRhdGFcbiAgICogQHBhcmFtIHtBcnJheXx1bmRlZmluZWR9IG9sZERhdGEgb3B0aW9uYWw7IGFycmF5IHdpdGggcHJldmlvdXMgZGF0YVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlKGlkcywgY2hhbmdlZERhdGEsIG9sZERhdGEpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBsZXQgZGF0YUNoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICBsZXQgbm9kZSA9IG5vZGVzW2lkXTtcbiAgICAgIGNvbnN0IGRhdGEgPSBjaGFuZ2VkRGF0YVtpXTtcbiAgICAgIGlmIChub2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gdXBkYXRlIG5vZGVcbiAgICAgICAgaWYgKG5vZGUuc2V0T3B0aW9ucyhkYXRhKSkge1xuICAgICAgICAgIGRhdGFDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAvLyBjcmVhdGUgbm9kZVxuICAgICAgICBub2RlID0gdGhpcy5jcmVhdGUoZGF0YSk7XG4gICAgICAgIG5vZGVzW2lkXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhQ2hhbmdlZCAmJiBvbGREYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENoZWNrIGZvciBhbnkgY2hhbmdlcyB3aGljaCBzaG91bGQgdHJpZ2dlciBhIGxheW91dCByZWNhbGN1bGF0aW9uXG4gICAgICAvLyBGb3Igbm93LCB0aGlzIGlzIGp1c3QgJ2xldmVsJyBmb3IgaGllcmFyY2hpY2FsIGxheW91dFxuICAgICAgLy8gQXNzdW1wdGlvbjogb2xkIGFuZCBuZXcgZGF0YSBhcnJhbmdlZCBpbiBzYW1lIG9yZGVyOyBhdCB0aW1lIG9mIHdyaXRpbmcsIHRoaXMgaG9sZHMuXG4gICAgICBkYXRhQ2hhbmdlZCA9IGNoYW5nZWREYXRhLnNvbWUoZnVuY3Rpb24gKG5ld1ZhbHVlLCBpbmRleCkge1xuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IG9sZERhdGFbaW5kZXhdO1xuICAgICAgICByZXR1cm4gb2xkVmFsdWUgJiYgb2xkVmFsdWUubGV2ZWwgIT09IG5ld1ZhbHVlLmxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGFDaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFVcGRhdGVkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZXhpc3Rpbmcgbm9kZXMuIElmIG5vZGVzIGRvIG5vdCBleGlzdCwgdGhlIG1ldGhvZCB3aWxsIGp1c3QgaWdub3JlIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgc3RyaW5nW119IGlkc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVtb3ZlKGlkcykge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgZGVsZXRlIG5vZGVzW2lkXTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHByb3BlcnRpZXNcbiAgICogQHBhcmFtIHtjbGFzc30gW2NvbnN0cnVjdG9yQ2xhc3M9Tm9kZS5kZWZhdWx0XVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGNyZWF0ZShwcm9wZXJ0aWVzLCBjb25zdHJ1Y3RvckNsYXNzID0gTm9kZSkge1xuICAgIHJldHVybiBuZXcgY29uc3RydWN0b3JDbGFzcyhcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICB0aGlzLmJvZHksXG4gICAgICB0aGlzLmltYWdlcyxcbiAgICAgIHRoaXMuZ3JvdXBzLFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgdGhpcy5kZWZhdWx0T3B0aW9uc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbY2xlYXJQb3NpdGlvbnM9ZmFsc2VdXG4gICAqL1xuICByZWZyZXNoKGNsZWFyUG9zaXRpb25zID0gZmFsc2UpIHtcbiAgICBmb3JFYWNoKHRoaXMuYm9keS5ub2RlcywgKG5vZGUsIG5vZGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldChub2RlSWQpO1xuICAgICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2xlYXJQb3NpdGlvbnMgPT09IHRydWUpIHtcbiAgICAgICAgICBub2RlLnNldE9wdGlvbnMoeyB4OiBudWxsLCB5OiBudWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuc2V0T3B0aW9ucyh7IGZpeGVkOiBmYWxzZSB9KTtcbiAgICAgICAgbm9kZS5zZXRPcHRpb25zKGRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBvc2l0aW9ucyBvZiB0aGUgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGUuaWQ+IHwgc3RyaW5nfSBbaWRzXSAgLS0+IG9wdGlvbmFsLCBjYW4gYmUgYXJyYXkgb2Ygbm9kZUlkcywgY2FuIGJlIHN0cmluZ1xuICAgKiBAcmV0dXJucyB7e319XG4gICAqL1xuICBnZXRQb3NpdGlvbnMoaWRzKSB7XG4gICAgY29uc3QgZGF0YUFycmF5ID0ge307XG4gICAgaWYgKGlkcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpZHMpID09PSB0cnVlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tpZHNbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbaWRzW2ldXTtcbiAgICAgICAgICAgIGRhdGFBcnJheVtpZHNbaV1dID0ge1xuICAgICAgICAgICAgICB4OiBNYXRoLnJvdW5kKG5vZGUueCksXG4gICAgICAgICAgICAgIHk6IE1hdGgucm91bmQobm9kZS55KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW2lkc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbaWRzXTtcbiAgICAgICAgICBkYXRhQXJyYXlbaWRzXSA9IHsgeDogTWF0aC5yb3VuZChub2RlLngpLCB5OiBNYXRoLnJvdW5kKG5vZGUueSkgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV07XG4gICAgICAgIGRhdGFBcnJheVt0aGlzLmJvZHkubm9kZUluZGljZXNbaV1dID0ge1xuICAgICAgICAgIHg6IE1hdGgucm91bmQobm9kZS54KSxcbiAgICAgICAgICB5OiBNYXRoLnJvdW5kKG5vZGUueSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhQXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB4IHkgcG9zaXRpb24gb2YgYSBzcGVjaWZpYyBpZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBpZCB0byByZXRyaWV2ZS5cbiAgICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBubyBpZCBpcyBpbmNsdWRlZC5cbiAgICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IElmIGFuIGludmFsaWQgaWQgaXMgcHJvdmlkZWQuXG4gICAqIEByZXR1cm5zIHt7IHg6IG51bWJlciwgeTogbnVtYmVyIH19IFJldHVybnMgWCwgWSBjYW52YXMgcG9zaXRpb24gb2YgdGhlIG5vZGUgd2l0aCBnaXZlbiBpZC5cbiAgICovXG4gIGdldFBvc2l0aW9uKGlkKSB7XG4gICAgaWYgKGlkID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIGlkIHdhcyBzcGVjaWZpZWQgZm9yIGdldFBvc2l0aW9uIG1ldGhvZC5cIik7XG4gICAgfSBlbHNlIGlmICh0aGlzLmJvZHkubm9kZXNbaWRdID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICBgTm9kZUlkIHByb3ZpZGVkIGZvciBnZXRQb3NpdGlvbiBkb2VzIG5vdCBleGlzdC4gUHJvdmlkZWQ6ICR7aWR9YFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogTWF0aC5yb3VuZCh0aGlzLmJvZHkubm9kZXNbaWRdLngpLFxuICAgICAgICB5OiBNYXRoLnJvdW5kKHRoaXMuYm9keS5ub2Rlc1tpZF0ueSksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBYWSBwb3NpdGlvbnMgb2YgdGhlIG5vZGVzIGludG8gdGhlIGRhdGFzZXQuXG4gICAqL1xuICBzdG9yZVBvc2l0aW9ucygpIHtcbiAgICAvLyB0b2RvOiBhZGQgc3VwcG9ydCBmb3IgY2x1c3RlcnMgYW5kIGhpZXJhcmNoaWNhbC5cbiAgICBjb25zdCBkYXRhQXJyYXkgPSBbXTtcbiAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpO1xuXG4gICAgZm9yIChjb25zdCBkc05vZGUgb2YgZGF0YXNldC5nZXQoKSkge1xuICAgICAgY29uc3QgaWQgPSBkc05vZGUuaWQ7XG4gICAgICBjb25zdCBib2R5Tm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpZF07XG4gICAgICBjb25zdCB4ID0gTWF0aC5yb3VuZChib2R5Tm9kZS54KTtcbiAgICAgIGNvbnN0IHkgPSBNYXRoLnJvdW5kKGJvZHlOb2RlLnkpO1xuXG4gICAgICBpZiAoZHNOb2RlLnggIT09IHggfHwgZHNOb2RlLnkgIT09IHkpIHtcbiAgICAgICAgZGF0YUFycmF5LnB1c2goeyBpZCwgeCwgeSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRhc2V0LnVwZGF0ZShkYXRhQXJyYXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgYm91bmRpbmcgYm94IG9mIGEgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge2p8Kn1cbiAgICovXG4gIGdldEJvdW5kaW5nQm94KG5vZGVJZCkge1xuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0uc2hhcGUuYm91bmRpbmdCb3g7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSWRzIG9mIG5vZGVzIGNvbm5lY3RlZCB0byB0aGlzIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEBwYXJhbSB7J3RvJ3wnZnJvbSd8dW5kZWZpbmVkfSBkaXJlY3Rpb24gdmFsdWVzICdmcm9tJyBhbmQgJ3RvJyBzZWxlY3QgcmVzcGVjdGl2ZWx5IHBhcmVudCBhbmQgY2hpbGQgbm9kZXMgb25seS5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnkgb3RoZXIgdmFsdWUgcmV0dXJucyBib3RoIHBhcmVudCBhbmQgY2hpbGQgbm9kZXMuXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGdldENvbm5lY3RlZE5vZGVzKG5vZGVJZCwgZGlyZWN0aW9uKSB7XG4gICAgY29uc3Qgbm9kZUxpc3QgPSBbXTtcbiAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgY29uc3Qgbm9kZU9iaiA9IHt9OyAvLyB1c2VkIHRvIHF1aWNrbHkgY2hlY2sgaWYgbm9kZSBhbHJlYWR5IGV4aXN0c1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBub2RlLmVkZ2VzW2ldO1xuICAgICAgICBpZiAoZGlyZWN0aW9uICE9PSBcInRvXCIgJiYgZWRnZS50b0lkID09IG5vZGUuaWQpIHtcbiAgICAgICAgICAvLyB0aGVzZSBhcmUgZG91YmxlIGVxdWFscyBzaW5jZSBpZHMgY2FuIGJlIG51bWVyaWMgb3Igc3RyaW5nXG4gICAgICAgICAgaWYgKG5vZGVPYmpbZWRnZS5mcm9tSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5vZGVMaXN0LnB1c2goZWRnZS5mcm9tSWQpO1xuICAgICAgICAgICAgbm9kZU9ialtlZGdlLmZyb21JZF0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gIT09IFwiZnJvbVwiICYmIGVkZ2UuZnJvbUlkID09IG5vZGUuaWQpIHtcbiAgICAgICAgICAvLyB0aGVzZSBhcmUgZG91YmxlIGVxdWFscyBzaW5jZSBpZHMgY2FuIGJlIG51bWVyaWMgb3Igc3RyaW5nXG4gICAgICAgICAgaWYgKG5vZGVPYmpbZWRnZS50b0lkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBub2RlTGlzdC5wdXNoKGVkZ2UudG9JZCk7XG4gICAgICAgICAgICBub2RlT2JqW2VkZ2UudG9JZF0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZUxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpZHMgb2YgdGhlIGVkZ2VzIGNvbm5lY3RlZCB0byB0aGlzIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZ2V0Q29ubmVjdGVkRWRnZXMobm9kZUlkKSB7XG4gICAgY29uc3QgZWRnZUxpc3QgPSBbXTtcbiAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVkZ2VMaXN0LnB1c2gobm9kZS5lZGdlc1tpXS5pZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiTm9kZUlkIHByb3ZpZGVkIGZvciBnZXRDb25uZWN0ZWRFZGdlcyBkb2VzIG5vdCBleGlzdC4gUHJvdmlkZWQ6IFwiLFxuICAgICAgICBub2RlSWRcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBlZGdlTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIGEgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICovXG4gIG1vdmVOb2RlKG5vZGVJZCwgeCwgeSkge1xuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS54ID0gTnVtYmVyKHgpO1xuICAgICAgdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0ueSA9IE51bWJlcih5KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwic3RhcnRTaW11bGF0aW9uXCIpO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiTm9kZSBpZCBzdXBwbGllZCB0byBtb3ZlTm9kZSBkb2VzIG5vdCBleGlzdC4gUHJvdmlkZWQ6IFwiLFxuICAgICAgICBub2RlSWRcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5vZGVzSGFuZGxlcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZGVzY3JpcHRvcikge1xuICByZXR1cm4gZGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkICYmIChoYXNPd24oZGVzY3JpcHRvciwgJ3ZhbHVlJykgfHwgaGFzT3duKGRlc2NyaXB0b3IsICd3cml0YWJsZScpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNEYXRhRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1kYXRhLWRlc2NyaXB0b3InKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIGBSZWZsZWN0LmdldGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QuZ2V0XG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzY3JpcHRvciwgcHJvdG90eXBlO1xuICBpZiAoYW5PYmplY3QodGFyZ2V0KSA9PT0gcmVjZWl2ZXIpIHJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gIGlmIChkZXNjcmlwdG9yKSByZXR1cm4gaXNEYXRhRGVzY3JpcHRvcihkZXNjcmlwdG9yKVxuICAgID8gZGVzY3JpcHRvci52YWx1ZVxuICAgIDogZGVzY3JpcHRvci5nZXQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGNhbGwoZGVzY3JpcHRvci5nZXQsIHJlY2VpdmVyKTtcbiAgaWYgKGlzT2JqZWN0KHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSByZXR1cm4gZ2V0KHByb3RvdHlwZSwgcHJvcGVydHlLZXksIHJlY2VpdmVyKTtcbn1cblxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZ2V0OiBnZXRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC5nZXQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlJlZmxlY3QuZ2V0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgX1JlZmxlY3QkZ2V0IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvcmVmbGVjdC9nZXQuanNcIjtcbmltcG9ydCBfYmluZEluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9iaW5kLmpzXCI7XG5pbXBvcnQgX09iamVjdCRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzXCI7XG5pbXBvcnQgc3VwZXJQcm9wQmFzZSBmcm9tIFwiLi9zdXBlclByb3BCYXNlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0KCkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgX1JlZmxlY3QkZ2V0KSB7XG4gICAgdmFyIF9jb250ZXh0O1xuICAgIF9nZXQgPSBfYmluZEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBfUmVmbGVjdCRnZXQpLmNhbGwoX2NvbnRleHQpO1xuICB9IGVsc2Uge1xuICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICB2YXIgYmFzZSA9IHN1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgICBpZiAoIWJhc2UpIHJldHVybjtcbiAgICAgIHZhciBkZXNjID0gX09iamVjdCRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogcmVjZWl2ZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gX2dldC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsICJpbXBvcnQgZ2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vZ2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgd2hpbGUgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpIHtcbiAgICBvYmplY3QgPSBnZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC1oeXBvdCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyICRoeXBvdCA9IE1hdGguaHlwb3Q7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgc3FydCA9IE1hdGguc3FydDtcblxuLy8gQ2hyb21lIDc3IGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9OTU0NlxudmFyIEZPUkNFRCA9ICEhJGh5cG90ICYmICRoeXBvdChJbmZpbml0eSwgTmFOKSAhPT0gSW5maW5pdHk7XG5cbi8vIGBNYXRoLmh5cG90YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5oeXBvdFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlLCBhcml0eTogMiwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBoeXBvdDogZnVuY3Rpb24gaHlwb3QodmFsdWUxLCB2YWx1ZTIpIHtcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIHNxcnQoc3VtKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXRoLmh5cG90Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5NYXRoLmh5cG90O1xuIiwgIi8qKlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogTG9jYXRpb24gb2YgYWxsIHRoZSBlbmRwb2ludCBkcmF3aW5nIHJvdXRpbmVzLlxuICpcbiAqIEV2ZXJ5IGVuZHBvaW50IGhhcyBpdHMgb3duIGRyYXdpbmcgcm91dGluZSwgd2hpY2ggY29udGFpbnMgYW4gZW5kcG9pbnQgZGVmaW5pdGlvbi5cbiAqXG4gKiBUaGUgZW5kcG9pbnQgZGVmaW5pdGlvbnMgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVyaWVzOlxuICpcbiAqIC0gKDAsMCkgaXMgdGhlIGNvbm5lY3Rpb24gcG9pbnQgdG8gdGhlIG5vZGUgaXQgYXR0YWNoZXMgdG9cbiAqIC0gVGhlIGVuZHBvaW50cyBhcmUgb3JpZW50YXRlZCB0byB0aGUgcG9zaXRpdmUgeC1kaXJlY3Rpb25cbiAqIC0gVGhlIGxlbmd0aCBvZiB0aGUgZW5kcG9pbnQgaXMgYXQgbW9zdCAxXG4gKlxuICogQXMgbG9uZyBhcyB0aGUgZW5kcG9pbnQgY2xhc3NlcyByZW1haW4gc2ltcGxlIGFuZCBub3QgdG9vIG51bWVyb3VzLCB0aGV5IHdpbGxcbiAqIGJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBtb2R1bGUuXG4gKiBBbGwgY2xhc3NlcyBoZXJlIGV4Y2VwdCBgRW5kUG9pbnRzYCBzaG91bGQgYmUgY29uc2lkZXJlZCBhcyBwcml2YXRlIHRvIHRoaXMgbW9kdWxlLlxuICpcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiAjIyMgRnVydGhlciBBY3Rpb25zXG4gKlxuICogQWZ0ZXIgYWRkaW5nIGEgbmV3IGVuZHBvaW50IGhlcmUsIHlvdSBhbHNvIG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZyB0aGluZ3M6XG4gKlxuICogLSBBZGQgdGhlIG5ldyBlbmRwb2ludCBuYW1lIHRvIGBuZXR3b3JrL29wdGlvbnMuanNgIGluIGFycmF5IGBlbmRQb2ludHNgLlxuICogLSBBZGQgdGhlIG5ldyBlbmRwb2ludCBuYW1lIHRvIHRoZSBkb2N1bWVudGF0aW9uLlxuICogICBTY2FuIGZvciAnYXJyb3dzLnRvLnR5cGVgIGFuZCBhZGQgaXQgdG8gdGhlIGRlc2NyaXB0aW9uLlxuICogLSBBZGQgdGhlIGVuZHBvaW50IHRvIHRoZSBleGFtcGxlcy4gQXQgdGhlIHZlcnkgbGVhc3QsIGFkZCBpdCB0byBleGFtcGxlXG4gKiAgIGBlZGdlU3R5bGVzL2Fycm93VHlwZXNgLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQgeyBBcnJvd0RhdGEsIFBvaW50IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGRyYXdDaXJjbGUgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuLyoqXG4gKiBDb21tb24gbWV0aG9kcyBmb3IgZW5kcG9pbnRzXG4gKlxuICogQGNsYXNzXG4gKi9cbmNsYXNzIEVuZFBvaW50IHtcbiAgLyoqXG4gICAqIEFwcGx5IHRyYW5zZm9ybWF0aW9uIG9uIHBvaW50cyBmb3IgZGlzcGxheS5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBpcyBkb25lOlxuICAgKiAtIHJvdGF0ZSBieSB0aGUgc3BlY2lmaWVkIGFuZ2xlXG4gICAqIC0gbXVsdGlwbHkgdGhlIChub3JtYWxpemVkKSBjb29yZGluYXRlcyBieSB0aGUgcGFzc2VkIGxlbmd0aFxuICAgKiAtIG9mZnNldCBieSB0aGUgdGFyZ2V0IGNvb3JkaW5hdGVzXG4gICAqXG4gICAqIEBwYXJhbSBwb2ludHMgLSBUaGUgcG9pbnQocykgdG8gYmUgdHJhbnNmb3JtZWQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgcmVzdWx0IG9mIHRoZSB0cmFuc2Zvcm1hdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdHJhbnNmb3JtKHBvaW50czogUG9pbnQgfCBQb2ludFtdLCBhcnJvd0RhdGE6IEFycm93RGF0YSk6IHZvaWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKSB7XG4gICAgICBwb2ludHMgPSBbcG9pbnRzXTtcbiAgICB9XG5cbiAgICBjb25zdCB4ID0gYXJyb3dEYXRhLnBvaW50Lng7XG4gICAgY29uc3QgeSA9IGFycm93RGF0YS5wb2ludC55O1xuICAgIGNvbnN0IGFuZ2xlID0gYXJyb3dEYXRhLmFuZ2xlO1xuICAgIGNvbnN0IGxlbmd0aCA9IGFycm93RGF0YS5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgcCA9IHBvaW50c1tpXTtcbiAgICAgIGNvbnN0IHh0ID0gcC54ICogTWF0aC5jb3MoYW5nbGUpIC0gcC55ICogTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgY29uc3QgeXQgPSBwLnggKiBNYXRoLnNpbihhbmdsZSkgKyBwLnkgKiBNYXRoLmNvcyhhbmdsZSk7XG5cbiAgICAgIHAueCA9IHggKyBsZW5ndGggKiB4dDtcbiAgICAgIHAueSA9IHkgKyBsZW5ndGggKiB5dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhdyBhIGNsb3NlZCBwYXRoIHVzaW5nIHRoZSBnaXZlbiByZWFsIGNvb3JkaW5hdGVzLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHBhdGggd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIHBvaW50cyAtIFRoZSBwb2ludHMgb2YgdGhlIHBhdGguXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXdQYXRoKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBwb2ludHM6IFBvaW50W10pOiB2b2lkIHtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyhwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnkpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjdHgubGluZVRvKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XG4gICAgfVxuICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGFycm93IGVuZHBvaW50LlxuICovXG5jbGFzcyBJbWFnZSBleHRlbmRzIEVuZFBvaW50IHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBGYWxzZSBhcyB0aGVyZSBpcyBubyB3YXkgdG8gZmlsbCBhbiBpbWFnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiBmYWxzZSB7XG4gICAgaWYgKGFycm93RGF0YS5pbWFnZSkge1xuICAgICAgY3R4LnNhdmUoKTtcblxuICAgICAgY3R4LnRyYW5zbGF0ZShhcnJvd0RhdGEucG9pbnQueCwgYXJyb3dEYXRhLnBvaW50LnkpO1xuICAgICAgY3R4LnJvdGF0ZShNYXRoLlBJIC8gMiArIGFycm93RGF0YS5hbmdsZSk7XG5cbiAgICAgIGNvbnN0IHdpZHRoID1cbiAgICAgICAgYXJyb3dEYXRhLmltYWdlV2lkdGggIT0gbnVsbFxuICAgICAgICAgID8gYXJyb3dEYXRhLmltYWdlV2lkdGhcbiAgICAgICAgICA6IGFycm93RGF0YS5pbWFnZS53aWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodCA9XG4gICAgICAgIGFycm93RGF0YS5pbWFnZUhlaWdodCAhPSBudWxsXG4gICAgICAgICAgPyBhcnJvd0RhdGEuaW1hZ2VIZWlnaHRcbiAgICAgICAgICA6IGFycm93RGF0YS5pbWFnZS5oZWlnaHQ7XG5cbiAgICAgIGFycm93RGF0YS5pbWFnZS5kcmF3SW1hZ2VBdFBvc2l0aW9uKFxuICAgICAgICBjdHgsXG4gICAgICAgIDEsIC8vIHNjYWxlXG4gICAgICAgIC13aWR0aCAvIDIsIC8vIHhcbiAgICAgICAgMCwgLy8geVxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICApO1xuXG4gICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGFycm93IGVuZHBvaW50LlxuICovXG5jbGFzcyBBcnJvdyBleHRlbmRzIEVuZFBvaW50IHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvLyBOb3JtYWxpemVkIHBvaW50cyBvZiBjbG9zZWQgcGF0aCwgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZHJhd24uXG4gICAgLy8gKDAsIDApIGlzIHRoZSBhdHRhY2htZW50IHBvaW50LCBhbmQgdGhlIHBvaW50IGFyb3VuZCB3aGljaCBzaG91bGQgYmUgcm90YXRlZFxuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgICAgeyB4OiAtMSwgeTogMC4zIH0sXG4gICAgICB7IHg6IC0wLjksIHk6IDAgfSxcbiAgICAgIHsgeDogLTEsIHk6IC0wLjMgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGNyb3cgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIENyb3cge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIC8vIE5vcm1hbGl6ZWQgcG9pbnRzIG9mIGNsb3NlZCBwYXRoLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkcmF3bi5cbiAgICAvLyAoMCwgMCkgaXMgdGhlIGF0dGFjaG1lbnQgcG9pbnQsIGFuZCB0aGUgcG9pbnQgYXJvdW5kIHdoaWNoIHNob3VsZCBiZSByb3RhdGVkXG4gICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgeyB4OiAtMSwgeTogMCB9LFxuICAgICAgeyB4OiAwLCB5OiAwLjMgfSxcbiAgICAgIHsgeDogLTAuNCwgeTogMCB9LFxuICAgICAgeyB4OiAwLCB5OiAtMC4zIH0sXG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgRW5kUG9pbnQuZHJhd1BhdGgoY3R4LCBwb2ludHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBjdXJ2ZSBlbmRwb2ludC5cbiAqL1xuY2xhc3MgQ3VydmUge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIC8vIE5vcm1hbGl6ZWQgcG9pbnRzIG9mIGNsb3NlZCBwYXRoLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkcmF3bi5cbiAgICAvLyAoMCwgMCkgaXMgdGhlIGF0dGFjaG1lbnQgcG9pbnQsIGFuZCB0aGUgcG9pbnQgYXJvdW5kIHdoaWNoIHNob3VsZCBiZSByb3RhdGVkXG4gICAgY29uc3QgcG9pbnQgPSB7IHg6IC0wLjQsIHk6IDAgfTtcbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnQsIGFycm93RGF0YSk7XG5cbiAgICAvLyBVcGRhdGUgZW5kcG9pbnQgc3R5bGUgZm9yIGRyYXdpbmcgdHJhbnNwYXJlbnQgYXJjLlxuICAgIGN0eC5zdHJva2VTdHlsZSA9IGN0eC5maWxsU3R5bGU7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLCAwLCAwLCAwKVwiO1xuXG4gICAgLy8gRGVmaW5lIGN1cnZlIGVuZHBvaW50IGFzIHNlbWljaXJjbGUuXG4gICAgY29uc3QgcGkgPSBNYXRoLlBJO1xuICAgIGNvbnN0IHN0YXJ0QW5nbGUgPSBhcnJvd0RhdGEuYW5nbGUgLSBwaSAvIDI7XG4gICAgY29uc3QgZW5kQW5nbGUgPSBhcnJvd0RhdGEuYW5nbGUgKyBwaSAvIDI7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5hcmMoXG4gICAgICBwb2ludC54LFxuICAgICAgcG9pbnQueSxcbiAgICAgIGFycm93RGF0YS5sZW5ndGggKiAwLjQsXG4gICAgICBzdGFydEFuZ2xlLFxuICAgICAgZW5kQW5nbGUsXG4gICAgICBmYWxzZVxuICAgICk7XG4gICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBpbnZlcnRlZCBjdXJ2ZSBlbmRwb2ludC5cbiAqL1xuY2xhc3MgSW52ZXJ0ZWRDdXJ2ZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludCA9IHsgeDogLTAuMywgeTogMCB9O1xuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludCwgYXJyb3dEYXRhKTtcblxuICAgIC8vIFVwZGF0ZSBlbmRwb2ludCBzdHlsZSBmb3IgZHJhd2luZyB0cmFuc3BhcmVudCBhcmMuXG4gICAgY3R4LnN0cm9rZVN0eWxlID0gY3R4LmZpbGxTdHlsZTtcbiAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2JhKDAsIDAsIDAsIDApXCI7XG5cbiAgICAvLyBEZWZpbmUgaW52ZXJ0ZWQgY3VydmUgZW5kcG9pbnQgYXMgc2VtaWNpcmNsZS5cbiAgICBjb25zdCBwaSA9IE1hdGguUEk7XG4gICAgY29uc3Qgc3RhcnRBbmdsZSA9IGFycm93RGF0YS5hbmdsZSArIHBpIC8gMjtcbiAgICBjb25zdCBlbmRBbmdsZSA9IGFycm93RGF0YS5hbmdsZSArICgzICogcGkpIC8gMjtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyhcbiAgICAgIHBvaW50LngsXG4gICAgICBwb2ludC55LFxuICAgICAgYXJyb3dEYXRhLmxlbmd0aCAqIDAuNCxcbiAgICAgIHN0YXJ0QW5nbGUsXG4gICAgICBlbmRBbmdsZSxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIHRyaW5hZ2xlIGVuZHBvaW50LlxuICovXG5jbGFzcyBUcmlhbmdsZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IDAuMDIsIHk6IDAgfSxcbiAgICAgIHsgeDogLTEsIHk6IDAuMyB9LFxuICAgICAgeyB4OiAtMSwgeTogLTAuMyB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgaW52ZXJ0ZWQgdHJpbmFnbGUgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIEludmVydGVkVHJpYW5nbGUge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIC8vIE5vcm1hbGl6ZWQgcG9pbnRzIG9mIGNsb3NlZCBwYXRoLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkcmF3bi5cbiAgICAvLyAoMCwgMCkgaXMgdGhlIGF0dGFjaG1lbnQgcG9pbnQsIGFuZCB0aGUgcG9pbnQgYXJvdW5kIHdoaWNoIHNob3VsZCBiZSByb3RhdGVkXG4gICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgeyB4OiAwLCB5OiAwLjMgfSxcbiAgICAgIHsgeDogMCwgeTogLTAuMyB9LFxuICAgICAgeyB4OiAtMSwgeTogMCB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgY2lyY2xlIGVuZHBvaW50LlxuICovXG5jbGFzcyBDaXJjbGUge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIGNvbnN0IHBvaW50ID0geyB4OiAtMC40LCB5OiAwIH07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnQsIGFycm93RGF0YSk7XG4gICAgZHJhd0NpcmNsZShjdHgsIHBvaW50LngsIHBvaW50LnksIGFycm93RGF0YS5sZW5ndGggKiAwLjQpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBiYXIgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIEJhciB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLypcbiAgICB2YXIgcG9pbnRzID0gW1xuICAgICAge3g6MCwgeTowLjV9LFxuICAgICAge3g6MCwgeTotMC41fVxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XG4gICAgY3R4LmxpbmVUbyhwb2ludHNbMV0ueCwgcG9pbnRzWzFdLnkpO1xuICAgIGN0eC5zdHJva2UoKTtcbiovXG5cbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IDAsIHk6IDAuNSB9LFxuICAgICAgeyB4OiAwLCB5OiAtMC41IH0sXG4gICAgICB7IHg6IC0wLjE1LCB5OiAtMC41IH0sXG4gICAgICB7IHg6IC0wLjE1LCB5OiAwLjUgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGJveCBlbmRwb2ludC5cbiAqL1xuY2xhc3MgQm94IHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IDAsIHk6IDAuMyB9LFxuICAgICAgeyB4OiAwLCB5OiAtMC4zIH0sXG4gICAgICB7IHg6IC0wLjYsIHk6IC0wLjMgfSxcbiAgICAgIHsgeDogLTAuNiwgeTogMC4zIH0sXG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgRW5kUG9pbnQuZHJhd1BhdGgoY3R4LCBwb2ludHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBkaWFtb25kIGVuZHBvaW50LlxuICovXG5jbGFzcyBEaWFtb25kIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIHsgeDogLTAuNSwgeTogLTAuMyB9LFxuICAgICAgeyB4OiAtMSwgeTogMCB9LFxuICAgICAgeyB4OiAtMC41LCB5OiAwLjMgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIHZlZSBlbmRwb2ludC5cbiAqL1xuY2xhc3MgVmVlIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvLyBOb3JtYWxpemVkIHBvaW50cyBvZiBjbG9zZWQgcGF0aCwgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZHJhd24uXG4gICAgLy8gKDAsIDApIGlzIHRoZSBhdHRhY2htZW50IHBvaW50LCBhbmQgdGhlIHBvaW50IGFyb3VuZCB3aGljaCBzaG91bGQgYmUgcm90YXRlZFxuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogLTEsIHk6IDAuMyB9LFxuICAgICAgeyB4OiAtMC41LCB5OiAwIH0sXG4gICAgICB7IHg6IC0xLCB5OiAtMC4zIH0sXG4gICAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGVuZHBvaW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVuZFBvaW50cyB7XG4gIC8qKlxuICAgKiBEcmF3IGFuIGVuZHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCB0eXBlO1xuICAgIGlmIChhcnJvd0RhdGEudHlwZSkge1xuICAgICAgdHlwZSA9IGFycm93RGF0YS50eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiaW1hZ2VcIjpcbiAgICAgICAgcmV0dXJuIEltYWdlLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuICAgICAgY2FzZSBcImNpcmNsZVwiOlxuICAgICAgICByZXR1cm4gQ2lyY2xlLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuICAgICAgY2FzZSBcImJveFwiOlxuICAgICAgICByZXR1cm4gQm94LmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuICAgICAgY2FzZSBcImNyb3dcIjpcbiAgICAgICAgcmV0dXJuIENyb3cuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiY3VydmVcIjpcbiAgICAgICAgcmV0dXJuIEN1cnZlLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuICAgICAgY2FzZSBcImRpYW1vbmRcIjpcbiAgICAgICAgcmV0dXJuIERpYW1vbmQuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiaW52X2N1cnZlXCI6XG4gICAgICAgIHJldHVybiBJbnZlcnRlZEN1cnZlLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuICAgICAgY2FzZSBcInRyaWFuZ2xlXCI6XG4gICAgICAgIHJldHVybiBUcmlhbmdsZS5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJpbnZfdHJpYW5nbGVcIjpcbiAgICAgICAgcmV0dXJuIEludmVydGVkVHJpYW5nbGUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiYmFyXCI6XG4gICAgICAgIHJldHVybiBCYXIuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwidmVlXCI6XG4gICAgICAgIHJldHVybiBWZWUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiYXJyb3dcIjogLy8gZmFsbC10aHJvdWdoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gQXJyb3cuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgb3ZlcnJpZGVPcGFjaXR5IH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgRW5kUG9pbnRzIH0gZnJvbSBcIi4vZW5kLXBvaW50c1wiO1xuaW1wb3J0IHtcbiAgQXJyb3dEYXRhLFxuICBBcnJvd0RhdGFXaXRoQ29yZSxcbiAgQXJyb3dUeXBlLFxuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgRWRnZVR5cGUsXG4gIElkLFxuICBMYWJlbCxcbiAgRWRnZU9wdGlvbnMsXG4gIFBvaW50LFxuICBQb2ludFQsXG4gIFNlbGVjdGl2ZVJlcXVpcmVkLFxuICBWQm9keSxcbiAgVk5vZGUsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBkcmF3RGFzaGVkTGluZSB9IGZyb20gXCIuL3NoYXBlc1wiO1xuaW1wb3J0IHsgZ2V0U2VsZlJlZkNvb3JkaW5hdGVzIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9Db21wb25lbnRVdGlsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmluZEJvcmRlclBvc2l0aW9uT3B0aW9uczxWaWE+IHtcbiAgdmlhOiBWaWE7XG59XG5leHBvcnQgaW50ZXJmYWNlIEZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZU9wdGlvbnMge1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgbG93OiBudW1iZXI7XG4gIGhpZ2g6IG51bWJlcjtcbiAgZGlyZWN0aW9uOiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIEJhc2UgQ2xhc3MgZm9yIGFsbCBlZGdlcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVkZ2VCYXNlPFZpYSA9IHVuZGVmaW5lZD4gaW1wbGVtZW50cyBFZGdlVHlwZSB7XG4gIHB1YmxpYyBmcm9tITogVk5vZGU7IC8vIEluaXRpYWxpemVkIGluIHNldE9wdGlvbnNcbiAgcHVibGljIGZyb21Qb2ludDogUG9pbnQ7XG4gIHB1YmxpYyB0byE6IFZOb2RlOyAvLyBJbml0aWFsaXplZCBpbiBzZXRPcHRpb25zXG4gIHB1YmxpYyB0b1BvaW50OiBQb2ludDtcbiAgcHVibGljIHZpYT86IFZOb2RlO1xuXG4gIHB1YmxpYyBjb2xvcjogdW5rbm93biA9IHt9O1xuICBwdWJsaWMgY29sb3JEaXJ0eSA9IHRydWU7XG4gIHB1YmxpYyBpZCE6IElkOyAvLyBJbml0aWFsaXplZCBpbiBzZXRPcHRpb25zXG4gIHB1YmxpYyBvcHRpb25zITogRWRnZU9wdGlvbnM7IC8vIEluaXRpYWxpemVkIGluIHNldE9wdGlvbnNcbiAgcHVibGljIGhvdmVyV2lkdGggPSAxLjU7XG4gIHB1YmxpYyBzZWxlY3Rpb25XaWR0aCA9IDI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIF9ib2R5IC0gVGhlIGJvZHkgb2YgdGhlIG5ldHdvcmsuXG4gICAqIEBwYXJhbSBfbGFiZWxNb2R1bGUgLSBMYWJlbCBtb2R1bGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgb3B0aW9uczogRWRnZU9wdGlvbnMsXG4gICAgcHJvdGVjdGVkIF9ib2R5OiBWQm9keSxcbiAgICBwcm90ZWN0ZWQgX2xhYmVsTW9kdWxlOiBMYWJlbFxuICApIHtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICB0aGlzLmZyb21Qb2ludCA9IHRoaXMuZnJvbTtcbiAgICB0aGlzLnRvUG9pbnQgPSB0aGlzLnRvO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBib3JkZXIgb2YgdGhlIG5vZGUgYW5kIHRoZSBlZGdlLlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlIChlaXRoZXIgZnJvbSBvciB0byBub2RlIG9mIHRoZSBlZGdlKS5cbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBib3JkZXIgb2YgdGhlIG5vZGUgYW5kIHRoZSBlZGdlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IF9maW5kQm9yZGVyUG9zaXRpb24oXG4gICAgbm9kZTogVk5vZGUsXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgb3B0aW9ucz86IEZpbmRCb3JkZXJQb3NpdGlvbk9wdGlvbnM8VmlhPlxuICApOiBQb2ludFQ7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhZGRpdGlvbmFsIHBvaW50KHMpIHRoZSBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50KHMpIHRoZSBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGdldFZpYU5vZGUoKTogVmlhO1xuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZ2V0UG9pbnQocG9zaXRpb246IG51bWJlciwgdmlhTm9kZT86IFZpYSk6IFBvaW50O1xuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgY29ubmVjdCgpOiB2b2lkIHtcbiAgICB0aGlzLmZyb20gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy5mcm9tXTtcbiAgICB0aGlzLnRvID0gdGhpcy5fYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMudG9dO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBjbGVhbnVwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbmV3IGVkZ2Ugb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgbmV3IGVkZ2Ugb3B0aW9ucyBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zOiBFZGdlT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICB0aGlzLmZyb20gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy5mcm9tXTtcbiAgICB0aGlzLnRvID0gdGhpcy5fYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMudG9dO1xuICAgIHRoaXMuaWQgPSB0aGlzLm9wdGlvbnMuaWQ7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGRyYXdMaW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIHwgXCJjb2xvclwiXG4gICAgICB8IFwib3BhY2l0eVwiXG4gICAgICB8IFwic2hhZG93Q29sb3JcIlxuICAgICAgfCBcInNoYWRvd1NpemVcIlxuICAgICAgfCBcInNoYWRvd1hcIlxuICAgICAgfCBcInNoYWRvd1lcIlxuICAgICAgfCBcIndpZHRoXCJcbiAgICA+LFxuICAgIF9zZWxlY3RlZD86IGJvb2xlYW4sXG4gICAgX2hvdmVyPzogYm9vbGVhbixcbiAgICB2aWFOb2RlOiBWaWEgPSB0aGlzLmdldFZpYU5vZGUoKVxuICApOiB2b2lkIHtcbiAgICAvLyBzZXQgc3R5bGVcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmdldENvbG9yKGN0eCwgdmFsdWVzKTtcbiAgICBjdHgubGluZVdpZHRoID0gdmFsdWVzLndpZHRoO1xuXG4gICAgaWYgKHZhbHVlcy5kYXNoZXMgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9kcmF3RGFzaGVkTGluZShjdHgsIHZhbHVlcywgdmlhTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RyYXdMaW5lKGN0eCwgdmFsdWVzLCB2aWFOb2RlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhdyBhIGxpbmUgd2l0aCBnaXZlbiBzdHlsZSBiZXR3ZWVuIHR3byBub2RlcyB0aHJvdWdoIHN1cHBsaWVkIG5vZGUocykuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgbGlrZSBjb2xvciwgb3BhY2l0eSBvciBzaGFkb3cuXG4gICAqIEBwYXJhbSB2aWFOb2RlIC0gQWRkaXRpb25hbCBjb250cm9sIHBvaW50KHMpIGZvciB0aGUgZWRnZS5cbiAgICogQHBhcmFtIGZyb21Qb2ludCAtIFRPRE86IFNlZW1zIGlnbm9yZWQsIHJlbW92ZT9cbiAgICogQHBhcmFtIHRvUG9pbnQgLSBUT0RPOiBTZWVtcyBpZ25vcmVkLCByZW1vdmU/XG4gICAqL1xuICBwcml2YXRlIF9kcmF3TGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcInNoYWRvd0NvbG9yXCIgfCBcInNoYWRvd1NpemVcIiB8IFwic2hhZG93WFwiIHwgXCJzaGFkb3dZXCJcbiAgICA+LFxuICAgIHZpYU5vZGU6IFZpYSxcbiAgICBmcm9tUG9pbnQ/OiBQb2ludCxcbiAgICB0b1BvaW50PzogUG9pbnRcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZnJvbSAhPSB0aGlzLnRvKSB7XG4gICAgICAvLyBkcmF3IGxpbmVcbiAgICAgIHRoaXMuX2xpbmUoY3R4LCB2YWx1ZXMsIHZpYU5vZGUsIGZyb21Qb2ludCwgdG9Qb2ludCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IFt4LCB5LCByYWRpdXNdID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YShjdHgpO1xuICAgICAgdGhpcy5fY2lyY2xlKGN0eCwgdmFsdWVzLCB4LCB5LCByYWRpdXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGEgZGFzaGVkIGxpbmUgd2l0aCBnaXZlbiBzdHlsZSBiZXR3ZWVuIHR3byBub2RlcyB0aHJvdWdoIHN1cHBsaWVkIG5vZGUocykuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgbGlrZSBjb2xvciwgb3BhY2l0eSBvciBzaGFkb3cuXG4gICAqIEBwYXJhbSB2aWFOb2RlIC0gQWRkaXRpb25hbCBjb250cm9sIHBvaW50KHMpIGZvciB0aGUgZWRnZS5cbiAgICogQHBhcmFtIF9mcm9tUG9pbnQgLSBJZ25vcmVkIChUT0RPOiByZW1vdmUgaW4gdGhlIGZ1dHVyZSkuXG4gICAqIEBwYXJhbSBfdG9Qb2ludCAtIElnbm9yZWQgKFRPRE86IHJlbW92ZSBpbiB0aGUgZnV0dXJlKS5cbiAgICovXG4gIHByaXZhdGUgX2RyYXdEYXNoZWRMaW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwic2hhZG93Q29sb3JcIiB8IFwic2hhZG93U2l6ZVwiIHwgXCJzaGFkb3dYXCIgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZTogVmlhLFxuICAgIF9mcm9tUG9pbnQ/OiBQb2ludCxcbiAgICBfdG9Qb2ludD86IFBvaW50XG4gICk6IHZvaWQge1xuICAgIGN0eC5saW5lQ2FwID0gXCJyb3VuZFwiO1xuICAgIGNvbnN0IHBhdHRlcm4gPSBBcnJheS5pc0FycmF5KHZhbHVlcy5kYXNoZXMpID8gdmFsdWVzLmRhc2hlcyA6IFs1LCA1XTtcblxuICAgIC8vIG9ubHkgZmlyZWZveCBhbmQgY2hyb21lIHN1cHBvcnQgdGhpcyBtZXRob2QsIGVsc2Ugd2UgdXNlIHRoZSBsZWdhY3kgb25lLlxuICAgIGlmIChjdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3R4LnNhdmUoKTtcblxuICAgICAgLy8gc2V0IGRhc2ggc2V0dGluZ3MgZm9yIGNocm9tZSBvciBmaXJlZm94XG4gICAgICBjdHguc2V0TGluZURhc2gocGF0dGVybik7XG4gICAgICBjdHgubGluZURhc2hPZmZzZXQgPSAwO1xuXG4gICAgICAvLyBkcmF3IHRoZSBsaW5lXG4gICAgICBpZiAodGhpcy5mcm9tICE9IHRoaXMudG8pIHtcbiAgICAgICAgLy8gZHJhdyBsaW5lXG4gICAgICAgIHRoaXMuX2xpbmUoY3R4LCB2YWx1ZXMsIHZpYU5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgW3gsIHksIHJhZGl1c10gPSB0aGlzLl9nZXRDaXJjbGVEYXRhKGN0eCk7XG4gICAgICAgIHRoaXMuX2NpcmNsZShjdHgsIHZhbHVlcywgeCwgeSwgcmFkaXVzKTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVzdG9yZSB0aGUgZGFzaCBzZXR0aW5ncy5cbiAgICAgIGN0eC5zZXRMaW5lRGFzaChbMF0pO1xuICAgICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gMDtcbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVuc3VwcG9ydGluZyBzbW9vdGggbGluZXNcbiAgICAgIGlmICh0aGlzLmZyb20gIT0gdGhpcy50bykge1xuICAgICAgICAvLyBkcmF3IGxpbmVcbiAgICAgICAgZHJhd0Rhc2hlZExpbmUoXG4gICAgICAgICAgY3R4LFxuICAgICAgICAgIHRoaXMuZnJvbS54LFxuICAgICAgICAgIHRoaXMuZnJvbS55LFxuICAgICAgICAgIHRoaXMudG8ueCxcbiAgICAgICAgICB0aGlzLnRvLnksXG4gICAgICAgICAgcGF0dGVyblxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgW3gsIHksIHJhZGl1c10gPSB0aGlzLl9nZXRDaXJjbGVEYXRhKGN0eCk7XG4gICAgICAgIHRoaXMuX2NpcmNsZShjdHgsIHZhbHVlcywgeCwgeSwgcmFkaXVzKTtcbiAgICAgIH1cbiAgICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcblxuICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhdyBhIGxpbmUgd2l0aCBnaXZlbiBzdHlsZSBiZXR3ZWVuIHR3byBub2RlcyB0aHJvdWdoIHN1cHBsaWVkIG5vZGUocykuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgbGlrZSBjb2xvciwgb3BhY2l0eSBvciBzaGFkb3cuXG4gICAqIEBwYXJhbSB2aWFOb2RlIC0gQWRkaXRpb25hbCBjb250cm9sIHBvaW50KHMpIGZvciB0aGUgZWRnZS5cbiAgICogQHBhcmFtIGZyb21Qb2ludCAtIFRPRE86IFNlZW1zIGlnbm9yZWQsIHJlbW92ZT9cbiAgICogQHBhcmFtIHRvUG9pbnQgLSBUT0RPOiBTZWVtcyBpZ25vcmVkLCByZW1vdmU/XG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2xpbmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICB2aWFOb2RlOiBWaWEsXG4gICAgZnJvbVBvaW50PzogUG9pbnQsXG4gICAgdG9Qb2ludD86IFBvaW50XG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBib3JkZXIgb2YgdGhlIG5vZGUgYW5kIHRoZSBlZGdlLlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlIChlaXRoZXIgZnJvbSBvciB0byBub2RlIG9mIHRoZSBlZGdlKS5cbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBib3JkZXIgb2YgdGhlIG5vZGUgYW5kIHRoZSBlZGdlLlxuICAgKi9cbiAgcHVibGljIGZpbmRCb3JkZXJQb3NpdGlvbihcbiAgICBub2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBvcHRpb25zPzogRmluZEJvcmRlclBvc2l0aW9uT3B0aW9uczxWaWE+IHwgRmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlT3B0aW9uc1xuICApOiBQb2ludFQge1xuICAgIGlmICh0aGlzLmZyb20gIT0gdGhpcy50bykge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbihub2RlLCBjdHgsIG9wdGlvbnMgYXMgYW55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZShub2RlLCBjdHgsIG9wdGlvbnMgYXMgYW55KTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGZpbmRCb3JkZXJQb3NpdGlvbnMoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOiB7XG4gICAgZnJvbTogUG9pbnQ7XG4gICAgdG86IFBvaW50O1xuICB9IHtcbiAgICBpZiAodGhpcy5mcm9tICE9IHRoaXMudG8pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZyb206IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbih0aGlzLmZyb20sIGN0eCksXG4gICAgICAgIHRvOiB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb24odGhpcy50bywgY3R4KSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IFt4LCB5XSA9IHRoaXMuX2dldENpcmNsZURhdGEoY3R4KS5zbGljZSgwLCAyKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbTogdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlKHRoaXMuZnJvbSwgY3R4LCB7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5LFxuICAgICAgICAgIGxvdzogMC4yNSxcbiAgICAgICAgICBoaWdoOiAwLjYsXG4gICAgICAgICAgZGlyZWN0aW9uOiAtMSxcbiAgICAgICAgfSksXG4gICAgICAgIHRvOiB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgbG93OiAwLjYsXG4gICAgICAgICAgaGlnaDogMC44LFxuICAgICAgICAgIGRpcmVjdGlvbjogMSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBjZW50ZXIgcG9pbnQgYW5kIHJhZGl1cyBvZiBhbiBlZGdlIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBub2RlIGF0IGJvdGggZW5kcy5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEByZXR1cm5zIGBbeCwgeSwgcmFkaXVzXWBcbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0Q2lyY2xlRGF0YShcbiAgICBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcbiAgKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5zaXplO1xuXG4gICAgaWYgKGN0eCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5mcm9tLnNoYXBlLndpZHRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5mcm9tLnNoYXBlLnJlc2l6ZShjdHgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGdldCBjaXJjbGUgY29vcmRpbmF0ZXNcbiAgICBjb25zdCBjb29yZGluYXRlcyA9IGdldFNlbGZSZWZDb29yZGluYXRlcyhcbiAgICAgIGN0eCxcbiAgICAgIHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlLFxuICAgICAgcmFkaXVzLFxuICAgICAgdGhpcy5mcm9tXG4gICAgKTtcblxuICAgIHJldHVybiBbY29vcmRpbmF0ZXMueCwgY29vcmRpbmF0ZXMueSwgcmFkaXVzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBwb2ludCBvbiBhIGNpcmNsZS5cbiAgICpcbiAgICogQHBhcmFtIHggLSBDZW50ZXIgb2YgdGhlIGNpcmNsZSBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geSAtIENlbnRlciBvZiB0aGUgY2lyY2xlIG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSByYWRpdXMgLSBSYWRpdXMgb2YgdGhlIGNpcmNsZS5cbiAgICogQHBhcmFtIHBvc2l0aW9uIC0gVmFsdWUgYmV0d2VlbiAwIChsaW5lIHN0YXJ0KSBhbmQgMSAobGluZSBlbmQpLlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgcmVxdWVzdGVkIHBvaW50IG9uIHRoZSBjaXJjbGUuXG4gICAqL1xuICBwcml2YXRlIF9wb2ludE9uQ2lyY2xlKFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgcmFkaXVzOiBudW1iZXIsXG4gICAgcG9zaXRpb246IG51bWJlclxuICApOiBQb2ludCB7XG4gICAgY29uc3QgYW5nbGUgPSBwb3NpdGlvbiAqIDIgKiBNYXRoLlBJO1xuICAgIHJldHVybiB7XG4gICAgICB4OiB4ICsgcmFkaXVzICogTWF0aC5jb3MoYW5nbGUpLFxuICAgICAgeTogeSAtIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBib3JkZXIgb2YgdGhlIG5vZGUgYW5kIHRoZSBlZGdlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgYmluYXJ5IHNlYXJjaCB0byBsb29rIGZvciB0aGUgcG9pbnQgd2hlcmUgdGhlIGNpcmNsZSBjcm9zc2VzIHRoZSBib3JkZXIgb2YgdGhlIG5vZGUuXG4gICAqIEBwYXJhbSBuZWFyTm9kZSAtIFRoZSBub2RlIChlaXRoZXIgZnJvbSBvciB0byBub2RlIG9mIHRoZSBlZGdlKS5cbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBib3JkZXIgb2YgdGhlIG5vZGUgYW5kIHRoZSBlZGdlLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlKFxuICAgIG5lYXJOb2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBvcHRpb25zOiBGaW5kQm9yZGVyUG9zaXRpb25DaXJjbGVPcHRpb25zXG4gICk6IFBvaW50VCB7XG4gICAgY29uc3QgeCA9IG9wdGlvbnMueDtcbiAgICBjb25zdCB5ID0gb3B0aW9ucy55O1xuICAgIGxldCBsb3cgPSBvcHRpb25zLmxvdztcbiAgICBsZXQgaGlnaCA9IG9wdGlvbnMuaGlnaDtcbiAgICBjb25zdCBkaXJlY3Rpb24gPSBvcHRpb25zLmRpcmVjdGlvbjtcblxuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5zaXplO1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IDAuMDU7XG4gICAgbGV0IHBvczogUG9pbnQ7XG5cbiAgICBsZXQgbWlkZGxlID0gKGxvdyArIGhpZ2gpICogMC41O1xuXG4gICAgbGV0IGVuZFBvaW50T2Zmc2V0ID0gMDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmFycm93U3RyaWtldGhyb3VnaCA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgZW5kUG9pbnRPZmZzZXQgPSB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbTtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAxKSB7XG4gICAgICAgIGVuZFBvaW50T2Zmc2V0ID0gdGhpcy5vcHRpb25zLmVuZFBvaW50T2Zmc2V0LnRvO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xuICAgIGRvIHtcbiAgICAgIG1pZGRsZSA9IChsb3cgKyBoaWdoKSAqIDAuNTtcblxuICAgICAgcG9zID0gdGhpcy5fcG9pbnRPbkNpcmNsZSh4LCB5LCByYWRpdXMsIG1pZGRsZSk7XG4gICAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIobmVhck5vZGUueSAtIHBvcy55LCBuZWFyTm9kZS54IC0gcG9zLngpO1xuXG4gICAgICBjb25zdCBkaXN0YW5jZVRvQm9yZGVyID1cbiAgICAgICAgbmVhck5vZGUuZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSArIGVuZFBvaW50T2Zmc2V0O1xuXG4gICAgICBjb25zdCBkaXN0YW5jZVRvUG9pbnQgPSBNYXRoLnNxcnQoXG4gICAgICAgIE1hdGgucG93KHBvcy54IC0gbmVhck5vZGUueCwgMikgKyBNYXRoLnBvdyhwb3MueSAtIG5lYXJOb2RlLnksIDIpXG4gICAgICApO1xuICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IGRpc3RhbmNlVG9Cb3JkZXIgLSBkaXN0YW5jZVRvUG9pbnQ7XG4gICAgICBpZiAoTWF0aC5hYnMoZGlmZmVyZW5jZSkgPCB0aHJlc2hvbGQpIHtcbiAgICAgICAgYnJlYWs7IC8vIGZvdW5kXG4gICAgICB9IGVsc2UgaWYgKGRpZmZlcmVuY2UgPiAwKSB7XG4gICAgICAgIC8vIGRpc3RhbmNlIHRvIG5vZGVzIGlzIGxhcmdlciB0aGFuIGRpc3RhbmNlIHRvIGJvcmRlciAtLT4gdCBuZWVkcyB0byBiZSBiaWdnZXIgaWYgd2UncmUgbG9va2luZyBhdCB0aGUgdG8gbm9kZS5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA+IDApIHtcbiAgICAgICAgICBsb3cgPSBtaWRkbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaCA9IG1pZGRsZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA+IDApIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICArK2l0ZXJhdGlvbjtcbiAgICB9IHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wb3MsXG4gICAgICB0OiBtaWRkbGUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxpbmUgd2lkdGggb2YgdGhlIGVkZ2UuIERlcGVuZHMgb24gd2lkdGggYW5kIHdoZXRoZXIgb25lIG9mIHRoZSBjb25uZWN0ZWQgbm9kZXMgaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzZWxlY3RlZCAtIERldGVybWluZXMgd2hldGVyIHRoZSBsaW5lIGlzIHNlbGVjdGVkLlxuICAgKiBAcGFyYW0gaG92ZXIgLSBEZXRlcm1pbmVzIHdoZXRlciB0aGUgbGluZSBpcyBiZWluZyBob3ZlcmVkLCBvbmx5IGFwcGxpZXMgaWYgc2VsZWN0ZWQgaXMgZmFsc2UuXG4gICAqIEByZXR1cm5zIFRoZSB3aWR0aCBvZiB0aGUgbGluZS5cbiAgICovXG4gIHB1YmxpYyBnZXRMaW5lV2lkdGgoc2VsZWN0ZWQ6IGJvb2xlYW4sIGhvdmVyOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICBpZiAoc2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLnNlbGVjdGlvbldpZHRoLCAwLjMgLyB0aGlzLl9ib2R5LnZpZXcuc2NhbGUpO1xuICAgIH0gZWxzZSBpZiAoaG92ZXIgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmhvdmVyV2lkdGgsIDAuMyAvIHRoaXMuX2JvZHkudmlldy5zY2FsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLm9wdGlvbnMud2lkdGgsIDAuMyAvIHRoaXMuX2JvZHkudmlldy5zY2FsZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGNvbG9yIG9yIGdyYWRpZW50IGZvciBnaXZlbiBlZGdlLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIHZhbHVlcyAtIEZvcm1hdHRpbmcgdmFsdWVzIGxpa2UgY29sb3IsIG9wYWNpdHkgb3Igc2hhZG93LlxuICAgKiBAcGFyYW0gX3NlbGVjdGVkIC0gSWdub3JlZCAoVE9ETzogcmVtb3ZlIGluIHRoZSBmdXR1cmUpLlxuICAgKiBAcGFyYW0gX2hvdmVyIC0gSWdub3JlZCAoVE9ETzogcmVtb3ZlIGluIHRoZSBmdXR1cmUpLlxuICAgKiBAcmV0dXJucyBDb2xvciBzdHJpbmcgaWYgc2luZ2xlIGNvbG9yIGlzIGluaGVyaXRlZCBvciBncmFkaWVudCBpZiB0d28uXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29sb3IoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxFZGdlRm9ybWF0dGluZ1ZhbHVlcywgXCJjb2xvclwiIHwgXCJvcGFjaXR5XCI+XG4gICk6IHN0cmluZyB8IENhbnZhc0dyYWRpZW50IHtcbiAgICBpZiAodmFsdWVzLmluaGVyaXRzQ29sb3IgIT09IGZhbHNlKSB7XG4gICAgICAvLyB3aGVuIHRoaXMgaXMgYSBsb29wIGVkZ2UsIGp1c3QgdXNlIHRoZSAnZnJvbScgbWV0aG9kXG4gICAgICBpZiAodmFsdWVzLmluaGVyaXRzQ29sb3IgPT09IFwiYm90aFwiICYmIHRoaXMuZnJvbS5pZCAhPT0gdGhpcy50by5pZCkge1xuICAgICAgICBjb25zdCBncmQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoXG4gICAgICAgICAgdGhpcy5mcm9tLngsXG4gICAgICAgICAgdGhpcy5mcm9tLnksXG4gICAgICAgICAgdGhpcy50by54LFxuICAgICAgICAgIHRoaXMudG8ueVxuICAgICAgICApO1xuICAgICAgICBsZXQgZnJvbUNvbG9yID0gdGhpcy5mcm9tLm9wdGlvbnMuY29sb3IuaGlnaGxpZ2h0LmJvcmRlcjtcbiAgICAgICAgbGV0IHRvQ29sb3IgPSB0aGlzLnRvLm9wdGlvbnMuY29sb3IuaGlnaGxpZ2h0LmJvcmRlcjtcblxuICAgICAgICBpZiAodGhpcy5mcm9tLnNlbGVjdGVkID09PSBmYWxzZSAmJiB0aGlzLnRvLnNlbGVjdGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIGZyb21Db2xvciA9IG92ZXJyaWRlT3BhY2l0eShcbiAgICAgICAgICAgIHRoaXMuZnJvbS5vcHRpb25zLmNvbG9yLmJvcmRlcixcbiAgICAgICAgICAgIHZhbHVlcy5vcGFjaXR5XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0b0NvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KFxuICAgICAgICAgICAgdGhpcy50by5vcHRpb25zLmNvbG9yLmJvcmRlcixcbiAgICAgICAgICAgIHZhbHVlcy5vcGFjaXR5XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZyb20uc2VsZWN0ZWQgPT09IHRydWUgJiYgdGhpcy50by5zZWxlY3RlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0b0NvbG9yID0gdGhpcy50by5vcHRpb25zLmNvbG9yLmJvcmRlcjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZyb20uc2VsZWN0ZWQgPT09IGZhbHNlICYmIHRoaXMudG8uc2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICBmcm9tQ29sb3IgPSB0aGlzLmZyb20ub3B0aW9ucy5jb2xvci5ib3JkZXI7XG4gICAgICAgIH1cbiAgICAgICAgZ3JkLmFkZENvbG9yU3RvcCgwLCBmcm9tQ29sb3IpO1xuICAgICAgICBncmQuYWRkQ29sb3JTdG9wKDEsIHRvQ29sb3IpO1xuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIHRoaXMgcmV0dXJucyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuICAgICAgICByZXR1cm4gZ3JkO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVzLmluaGVyaXRzQ29sb3IgPT09IFwidG9cIikge1xuICAgICAgICByZXR1cm4gb3ZlcnJpZGVPcGFjaXR5KHRoaXMudG8ub3B0aW9ucy5jb2xvci5ib3JkZXIsIHZhbHVlcy5vcGFjaXR5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwiZnJvbVwiXG4gICAgICAgIHJldHVybiBvdmVycmlkZU9wYWNpdHkodGhpcy5mcm9tLm9wdGlvbnMuY29sb3IuYm9yZGVyLCB2YWx1ZXMub3BhY2l0eSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvdmVycmlkZU9wYWNpdHkodmFsdWVzLmNvbG9yLCB2YWx1ZXMub3BhY2l0eSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERyYXcgYSBsaW5lIGZyb20gYSBub2RlIHRvIGl0c2VsZiwgYSBjaXJjbGUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgbGlrZSBjb2xvciwgb3BhY2l0eSBvciBzaGFkb3cuXG4gICAqIEBwYXJhbSB4IC0gQ2VudGVyIG9mIHRoZSBjaXJjbGUgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkgLSBDZW50ZXIgb2YgdGhlIGNpcmNsZSBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0gcmFkaXVzIC0gUmFkaXVzIG9mIHRoZSBjaXJjbGUuXG4gICAqL1xuICBwcml2YXRlIF9jaXJjbGUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJzaGFkb3dDb2xvclwiIHwgXCJzaGFkb3dTaXplXCIgfCBcInNoYWRvd1hcIiB8IFwic2hhZG93WVwiXG4gICAgPixcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHJhZGl1czogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICB0aGlzLmVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG5cbiAgICAvL2Z1bGwgY2lyY2xlXG4gICAgbGV0IGFuZ2xlRnJvbSA9IDA7XG4gICAgbGV0IGFuZ2xlVG8gPSBNYXRoLlBJICogMjtcblxuICAgIGlmICghdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UucmVuZGVyQmVoaW5kVGhlTm9kZSkge1xuICAgICAgLy9yZW5kZXIgb25seSBwYXJ0cyB3aGljaCBhcmUgbm90IG92ZXJsYXBpbmcgd2l0aCBwYXJlbnQgbm9kZVxuICAgICAgLy9uZWVkIHRvIGZpbmQgeCx5IG9mIGZyb20gcG9pbnQgYW5kIHgseSB0byBwb2ludFxuICAgICAgLy9jYWxjdWxhdGluZyByYWRpYW5zXG4gICAgICBjb25zdCBsb3cgPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZTtcbiAgICAgIGNvbnN0IGhpZ2ggPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZSArIE1hdGguUEk7XG4gICAgICBjb25zdCBwb2ludFRGcm9tID0gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlKHRoaXMuZnJvbSwgY3R4LCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIGxvdyxcbiAgICAgICAgaGlnaCxcbiAgICAgICAgZGlyZWN0aW9uOiAtMSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcG9pbnRUVG8gPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbG93LFxuICAgICAgICBoaWdoLFxuICAgICAgICBkaXJlY3Rpb246IDEsXG4gICAgICB9KTtcbiAgICAgIGFuZ2xlRnJvbSA9IE1hdGguYXRhbjIocG9pbnRURnJvbS55IC0geSwgcG9pbnRURnJvbS54IC0geCk7XG4gICAgICBhbmdsZVRvID0gTWF0aC5hdGFuMihwb2ludFRUby55IC0geSwgcG9pbnRUVG8ueCAtIHgpO1xuICAgIH1cblxuICAgIC8vIGRyYXcgYSBjaXJjbGVcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyh4LCB5LCByYWRpdXMsIGFuZ2xlRnJvbSwgYW5nbGVUbywgZmFsc2UpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIC8vIGRpc2FibGUgc2hhZG93cyBmb3Igb3RoZXIgZWxlbWVudHMuXG4gICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKiBAcmVtYXJrc1xuICAgKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg0OTIxMS9zaG9ydGVzdC1kaXN0YW5jYWUtYmV0d2Vlbi1hLXBvaW50LWFuZC1hLWxpbmUtc2VnbWVudFxuICAgKi9cbiAgcHVibGljIGdldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyXG4gICk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuZnJvbSAhPSB0aGlzLnRvKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RGlzdGFuY2VUb0VkZ2UoeDEsIHkxLCB4MiwgeTIsIHgzLCB5Myk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IFt4LCB5LCByYWRpdXNdID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YSh1bmRlZmluZWQpO1xuICAgICAgY29uc3QgZHggPSB4IC0geDM7XG4gICAgICBjb25zdCBkeSA9IHkgLSB5MztcbiAgICAgIHJldHVybiBNYXRoLmFicyhNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpIC0gcmFkaXVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGEgcG9pbnQgKHgzLCB5MykgYW5kIGEgbGluZSBzZWdtZW50IGZyb20gKHgxLCB5MSkgdG8gKHgyLCB5MikuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODQ5MjExL3Nob3J0ZXN0LWRpc3RhbmNhZS1iZXR3ZWVuLWEtcG9pbnQtYW5kLWEtbGluZS1zZWdtZW50XG4gICAqIEBwYXJhbSB4MSAtIEZpcnN0IGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MSAtIEZpcnN0IGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB4MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTIgLSBTZWNvbmQgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MyAtIFBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0gdmlhIC0gQWRkaXRpb25hbCBjb250cm9sIHBvaW50KHMpIGZvciB0aGUgZWRnZS5cbiAgICogQHJldHVybnMgVGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGxpbmUgc2VnbWVudCBhbmQgdGhlIHBvaW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IF9nZXREaXN0YW5jZVRvRWRnZShcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlcixcbiAgICB2aWE/OiBWaWFcbiAgKTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCAoeDMsIHkzKSBhbmQgYSBsaW5lIHNlZ21lbnQgZnJvbSAoeDEsIHkxKSB0byAoeDIsIHkyKS5cbiAgICpcbiAgICogQHBhcmFtIHgxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEByZXR1cm5zIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBsaW5lIHNlZ21lbnQgYW5kIHRoZSBwb2ludC5cbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0RGlzdGFuY2VUb0xpbmUoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXJcbiAgKTogbnVtYmVyIHtcbiAgICBjb25zdCBweCA9IHgyIC0geDE7XG4gICAgY29uc3QgcHkgPSB5MiAtIHkxO1xuICAgIGNvbnN0IHNvbWV0aGluZyA9IHB4ICogcHggKyBweSAqIHB5O1xuICAgIGxldCB1ID0gKCh4MyAtIHgxKSAqIHB4ICsgKHkzIC0geTEpICogcHkpIC8gc29tZXRoaW5nO1xuXG4gICAgaWYgKHUgPiAxKSB7XG4gICAgICB1ID0gMTtcbiAgICB9IGVsc2UgaWYgKHUgPCAwKSB7XG4gICAgICB1ID0gMDtcbiAgICB9XG5cbiAgICBjb25zdCB4ID0geDEgKyB1ICogcHg7XG4gICAgY29uc3QgeSA9IHkxICsgdSAqIHB5O1xuICAgIGNvbnN0IGR4ID0geCAtIHgzO1xuICAgIGNvbnN0IGR5ID0geSAtIHkzO1xuXG4gICAgLy8jIE5vdGU6IElmIHRoZSBhY3R1YWwgZGlzdGFuY2UgZG9lcyBub3QgbWF0dGVyLFxuICAgIC8vIyBpZiB5b3Ugb25seSB3YW50IHRvIGNvbXBhcmUgd2hhdCB0aGlzIGZ1bmN0aW9uXG4gICAgLy8jIHJldHVybnMgdG8gb3RoZXIgcmVzdWx0cyBvZiB0aGlzIGZ1bmN0aW9uLCB5b3VcbiAgICAvLyMgY2FuIGp1c3QgcmV0dXJuIHRoZSBzcXVhcmVkIGRpc3RhbmNlIGluc3RlYWRcbiAgICAvLyMgKGkuZS4gcmVtb3ZlIHRoZSBzcXJ0KSB0byBnYWluIGEgbGl0dGxlIHBlcmZvcm1hbmNlXG5cbiAgICByZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0QXJyb3dEYXRhKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHBvc2l0aW9uOiBcIm1pZGRsZVwiLFxuICAgIHZpYU5vZGU6IFZOb2RlLFxuICAgIHNlbGVjdGVkOiBib29sZWFuLFxuICAgIGhvdmVyOiBib29sZWFuLFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwibWlkZGxlQXJyb3dUeXBlXCIgfCBcIm1pZGRsZUFycm93U2NhbGVcIiB8IFwid2lkdGhcIlxuICAgID5cbiAgKTogQXJyb3dEYXRhV2l0aENvcmU7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0QXJyb3dEYXRhKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHBvc2l0aW9uOiBcInRvXCIsXG4gICAgdmlhTm9kZTogVk5vZGUsXG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgaG92ZXI6IGJvb2xlYW4sXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJ0b0Fycm93VHlwZVwiIHwgXCJ0b0Fycm93U2NhbGVcIiB8IFwid2lkdGhcIlxuICAgID5cbiAgKTogQXJyb3dEYXRhV2l0aENvcmU7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0QXJyb3dEYXRhKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHBvc2l0aW9uOiBcImZyb21cIixcbiAgICB2aWFOb2RlOiBWTm9kZSxcbiAgICBzZWxlY3RlZDogYm9vbGVhbixcbiAgICBob3ZlcjogYm9vbGVhbixcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcImZyb21BcnJvd1R5cGVcIiB8IFwiZnJvbUFycm93U2NhbGVcIiB8IFwid2lkdGhcIlxuICAgID5cbiAgKTogQXJyb3dEYXRhV2l0aENvcmU7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0QXJyb3dEYXRhKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHBvc2l0aW9uOiBcImZyb21cIiB8IFwidG9cIiB8IFwibWlkZGxlXCIsXG4gICAgdmlhTm9kZTogVk5vZGUsXG4gICAgX3NlbGVjdGVkOiBib29sZWFuLFxuICAgIF9ob3ZlcjogYm9vbGVhbixcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPEVkZ2VGb3JtYXR0aW5nVmFsdWVzLCBcIndpZHRoXCI+XG4gICk6IEFycm93RGF0YVdpdGhDb3JlIHtcbiAgICAvLyBzZXQgbGV0c1xuICAgIGxldCBhbmdsZTogbnVtYmVyO1xuICAgIGxldCBhcnJvd1BvaW50OiBQb2ludDtcbiAgICBsZXQgbm9kZTE6IFZOb2RlO1xuICAgIGxldCBub2RlMjogVk5vZGU7XG4gICAgbGV0IHJldmVyc2VkOiBib29sZWFuO1xuICAgIGxldCBzY2FsZUZhY3RvcjogbnVtYmVyO1xuICAgIGxldCB0eXBlOiBBcnJvd1R5cGU7XG4gICAgY29uc3QgbGluZVdpZHRoOiBudW1iZXIgPSB2YWx1ZXMud2lkdGg7XG5cbiAgICBpZiAocG9zaXRpb24gPT09IFwiZnJvbVwiKSB7XG4gICAgICBub2RlMSA9IHRoaXMuZnJvbTtcbiAgICAgIG5vZGUyID0gdGhpcy50bztcbiAgICAgIHJldmVyc2VkID0gdmFsdWVzLmZyb21BcnJvd1NjYWxlISA8IDA7XG4gICAgICBzY2FsZUZhY3RvciA9IE1hdGguYWJzKHZhbHVlcy5mcm9tQXJyb3dTY2FsZSEpO1xuICAgICAgdHlwZSA9IHZhbHVlcy5mcm9tQXJyb3dUeXBlITtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSBcInRvXCIpIHtcbiAgICAgIG5vZGUxID0gdGhpcy50bztcbiAgICAgIG5vZGUyID0gdGhpcy5mcm9tO1xuICAgICAgcmV2ZXJzZWQgPSB2YWx1ZXMudG9BcnJvd1NjYWxlISA8IDA7XG4gICAgICBzY2FsZUZhY3RvciA9IE1hdGguYWJzKHZhbHVlcy50b0Fycm93U2NhbGUhKTtcbiAgICAgIHR5cGUgPSB2YWx1ZXMudG9BcnJvd1R5cGUhO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlMSA9IHRoaXMudG87XG4gICAgICBub2RlMiA9IHRoaXMuZnJvbTtcbiAgICAgIHJldmVyc2VkID0gdmFsdWVzLm1pZGRsZUFycm93U2NhbGUhIDwgMDtcbiAgICAgIHNjYWxlRmFjdG9yID0gTWF0aC5hYnModmFsdWVzLm1pZGRsZUFycm93U2NhbGUhKTtcbiAgICAgIHR5cGUgPSB2YWx1ZXMubWlkZGxlQXJyb3dUeXBlITtcbiAgICB9XG5cbiAgICBjb25zdCBsZW5ndGggPSAxNSAqIHNjYWxlRmFjdG9yICsgMyAqIGxpbmVXaWR0aDsgLy8gMyogbGluZVdpZHRoIGlzIHRoZSB3aWR0aCBvZiB0aGUgZWRnZS5cblxuICAgIC8vIGlmIG5vdCBjb25uZWN0ZWQgdG8gaXRzZWxmXG4gICAgaWYgKG5vZGUxICE9IG5vZGUyKSB7XG4gICAgICBjb25zdCBhcHByb3hpbWF0ZUVkZ2VMZW5ndGggPSBNYXRoLmh5cG90KFxuICAgICAgICBub2RlMS54IC0gbm9kZTIueCxcbiAgICAgICAgbm9kZTEueSAtIG5vZGUyLnlcbiAgICAgICk7XG4gICAgICBjb25zdCByZWxhdGl2ZUxlbmd0aCA9IGxlbmd0aCAvIGFwcHJveGltYXRlRWRnZUxlbmd0aDtcblxuICAgICAgaWYgKHBvc2l0aW9uICE9PSBcIm1pZGRsZVwiKSB7XG4gICAgICAgIC8vIGRyYXcgYXJyb3cgaGVhZFxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNtb290aC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3QgcG9pbnRUID0gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uKG5vZGUxLCBjdHgsIHsgdmlhOiB2aWFOb2RlIH0pO1xuICAgICAgICAgIGNvbnN0IGd1aWRlUG9zID0gdGhpcy5nZXRQb2ludChcbiAgICAgICAgICAgIHBvaW50VC50ICsgcmVsYXRpdmVMZW5ndGggKiAocG9zaXRpb24gPT09IFwiZnJvbVwiID8gMSA6IC0xKSxcbiAgICAgICAgICAgIHZpYU5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGFuZ2xlID0gTWF0aC5hdGFuMihwb2ludFQueSAtIGd1aWRlUG9zLnksIHBvaW50VC54IC0gZ3VpZGVQb3MueCk7XG4gICAgICAgICAgYXJyb3dQb2ludCA9IHBvaW50VDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbmdsZSA9IE1hdGguYXRhbjIobm9kZTEueSAtIG5vZGUyLnksIG5vZGUxLnggLSBub2RlMi54KTtcbiAgICAgICAgICBhcnJvd1BvaW50ID0gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uKG5vZGUxLCBjdHgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBOZWdhdGl2ZSBoYWxmIGxlbmd0aCByZXZlcnNlcyBhcnJvdyBkaXJlY3Rpb24uXG4gICAgICAgIGNvbnN0IGhhbGZMZW5ndGggPSAocmV2ZXJzZWQgPyAtcmVsYXRpdmVMZW5ndGggOiByZWxhdGl2ZUxlbmd0aCkgLyAyO1xuICAgICAgICBjb25zdCBndWlkZVBvczEgPSB0aGlzLmdldFBvaW50KDAuNSArIGhhbGZMZW5ndGgsIHZpYU5vZGUpO1xuICAgICAgICBjb25zdCBndWlkZVBvczIgPSB0aGlzLmdldFBvaW50KDAuNSAtIGhhbGZMZW5ndGgsIHZpYU5vZGUpO1xuICAgICAgICBhbmdsZSA9IE1hdGguYXRhbjIoXG4gICAgICAgICAgZ3VpZGVQb3MxLnkgLSBndWlkZVBvczIueSxcbiAgICAgICAgICBndWlkZVBvczEueCAtIGd1aWRlUG9zMi54XG4gICAgICAgICk7XG4gICAgICAgIGFycm93UG9pbnQgPSB0aGlzLmdldFBvaW50KDAuNSwgdmlhTm9kZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRyYXcgY2lyY2xlXG4gICAgICBjb25zdCBbeCwgeSwgcmFkaXVzXSA9IHRoaXMuX2dldENpcmNsZURhdGEoY3R4KTtcblxuICAgICAgaWYgKHBvc2l0aW9uID09PSBcImZyb21cIikge1xuICAgICAgICBjb25zdCBsb3cgPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZTtcbiAgICAgICAgY29uc3QgaGlnaCA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlICsgTWF0aC5QSTtcblxuICAgICAgICBjb25zdCBwb2ludFQgPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgbG93LFxuICAgICAgICAgIGhpZ2gsXG4gICAgICAgICAgZGlyZWN0aW9uOiAtMSxcbiAgICAgICAgfSk7XG4gICAgICAgIGFuZ2xlID0gcG9pbnRULnQgKiAtMiAqIE1hdGguUEkgKyAxLjUgKiBNYXRoLlBJICsgMC4xICogTWF0aC5QSTtcbiAgICAgICAgYXJyb3dQb2ludCA9IHBvaW50VDtcbiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09IFwidG9cIikge1xuICAgICAgICBjb25zdCBsb3cgPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZTtcbiAgICAgICAgY29uc3QgaGlnaCA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlICsgTWF0aC5QSTtcblxuICAgICAgICBjb25zdCBwb2ludFQgPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgbG93LFxuICAgICAgICAgIGhpZ2gsXG4gICAgICAgICAgZGlyZWN0aW9uOiAxLFxuICAgICAgICB9KTtcbiAgICAgICAgYW5nbGUgPSBwb2ludFQudCAqIC0yICogTWF0aC5QSSArIDEuNSAqIE1hdGguUEkgLSAxLjEgKiBNYXRoLlBJO1xuICAgICAgICBhcnJvd1BvaW50ID0gcG9pbnRUO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUgLyAoMiAqIE1hdGguUEkpO1xuICAgICAgICBhcnJvd1BvaW50ID0gdGhpcy5fcG9pbnRPbkNpcmNsZSh4LCB5LCByYWRpdXMsIHBvcyk7XG4gICAgICAgIGFuZ2xlID0gcG9zICogLTIgKiBNYXRoLlBJICsgMS41ICogTWF0aC5QSSArIDAuMSAqIE1hdGguUEk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeGkgPSBhcnJvd1BvaW50LnggLSBsZW5ndGggKiAwLjkgKiBNYXRoLmNvcyhhbmdsZSk7XG4gICAgY29uc3QgeWkgPSBhcnJvd1BvaW50LnkgLSBsZW5ndGggKiAwLjkgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgY29uc3QgYXJyb3dDb3JlID0geyB4OiB4aSwgeTogeWkgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBwb2ludDogYXJyb3dQb2ludCxcbiAgICAgIGNvcmU6IGFycm93Q29yZSxcbiAgICAgIGFuZ2xlOiBhbmdsZSxcbiAgICAgIGxlbmd0aDogbGVuZ3RoLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBkcmF3QXJyb3dIZWFkKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIHwgXCJjb2xvclwiXG4gICAgICB8IFwib3BhY2l0eVwiXG4gICAgICB8IFwic2hhZG93Q29sb3JcIlxuICAgICAgfCBcInNoYWRvd1NpemVcIlxuICAgICAgfCBcInNoYWRvd1hcIlxuICAgICAgfCBcInNoYWRvd1lcIlxuICAgICAgfCBcIndpZHRoXCJcbiAgICA+LFxuICAgIF9zZWxlY3RlZDogYm9vbGVhbixcbiAgICBfaG92ZXI6IGJvb2xlYW4sXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdm9pZCB7XG4gICAgLy8gc2V0IHN0eWxlXG4gICAgY3R4LnN0cm9rZVN0eWxlID0gdGhpcy5nZXRDb2xvcihjdHgsIHZhbHVlcyk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IGN0eC5zdHJva2VTdHlsZTtcbiAgICBjdHgubGluZVdpZHRoID0gdmFsdWVzLndpZHRoO1xuXG4gICAgY29uc3QgY2FuRmlsbCA9IEVuZFBvaW50cy5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcblxuICAgIGlmIChjYW5GaWxsKSB7XG4gICAgICAvLyBkcmF3IHNoYWRvdyBpZiBlbmFibGVkXG4gICAgICB0aGlzLmVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgICBjdHguZmlsbCgpO1xuICAgICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc2hhZG93IGZvcm1hdHRpbmcgdmFsdWVzIGluIHRoZSBjb250ZXh0IGlmIGVuYWJsZWQsIGRvIG5vdGhpbmcgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIHZhbHVlcyAtIEZvcm1hdHRpbmcgdmFsdWVzIGZvciB0aGUgc2hhZG93LlxuICAgKi9cbiAgcHVibGljIGVuYWJsZVNoYWRvdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcInNoYWRvd0NvbG9yXCIgfCBcInNoYWRvd1NpemVcIiB8IFwic2hhZG93WFwiIHwgXCJzaGFkb3dZXCJcbiAgICA+XG4gICk6IHZvaWQge1xuICAgIGlmICh2YWx1ZXMuc2hhZG93ID09PSB0cnVlKSB7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSB2YWx1ZXMuc2hhZG93Q29sb3I7XG4gICAgICBjdHguc2hhZG93Qmx1ciA9IHZhbHVlcy5zaGFkb3dTaXplO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFggPSB2YWx1ZXMuc2hhZG93WDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gdmFsdWVzLnNoYWRvd1k7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBzaGFkb3cgZm9ybWF0dGluZyB2YWx1ZXMgaW4gdGhlIGNvbnRleHQgaWYgZW5hYmxlZCwgZG8gbm90aGluZyBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgZm9yIHRoZSBzaGFkb3cuXG4gICAqL1xuICBwdWJsaWMgZGlzYWJsZVNoYWRvdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IEVkZ2VGb3JtYXR0aW5nVmFsdWVzXG4gICk6IHZvaWQge1xuICAgIGlmICh2YWx1ZXMuc2hhZG93ID09PSB0cnVlKSB7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSBcInJnYmEoMCwwLDAsMClcIjtcbiAgICAgIGN0eC5zaGFkb3dCbHVyID0gMDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gMDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBiYWNrZ3JvdW5kIGFjY29yZGluZyB0byB0aGUgZm9ybWF0dGluZyB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgZm9yIHRoZSBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgcHVibGljIGRyYXdCYWNrZ3JvdW5kKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwiYmFja2dyb3VuZENvbG9yXCIgfCBcImJhY2tncm91bmRTaXplXCJcbiAgICA+XG4gICk6IHZvaWQge1xuICAgIGlmICh2YWx1ZXMuYmFja2dyb3VuZCAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIHNhdmUgb3JpZ2luYWwgbGluZSBhdHRyc1xuICAgICAgY29uc3Qgb3JpZ0N0eEF0dHIgPSB7XG4gICAgICAgIHN0cm9rZVN0eWxlOiBjdHguc3Ryb2tlU3R5bGUsXG4gICAgICAgIGxpbmVXaWR0aDogY3R4LmxpbmVXaWR0aCxcbiAgICAgICAgZGFzaGVzOiAoY3R4IGFzIGFueSkuZGFzaGVzLFxuICAgICAgfTtcblxuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gdmFsdWVzLmJhY2tncm91bmRDb2xvcjtcbiAgICAgIGN0eC5saW5lV2lkdGggPSB2YWx1ZXMuYmFja2dyb3VuZFNpemU7XG4gICAgICB0aGlzLnNldFN0cm9rZURhc2hlZChjdHgsIHZhbHVlcy5iYWNrZ3JvdW5kRGFzaGVzKTtcblxuICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICAvLyByZXN0b3JlIG9yaWdpbmFsIGxpbmUgYXR0cnNcbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IG9yaWdDdHhBdHRyLnN0cm9rZVN0eWxlO1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IG9yaWdDdHhBdHRyLmxpbmVXaWR0aDtcbiAgICAgIChjdHggYXMgYW55KS5kYXNoZXMgPSBvcmlnQ3R4QXR0ci5kYXNoZXM7XG4gICAgICB0aGlzLnNldFN0cm9rZURhc2hlZChjdHgsIHZhbHVlcy5kYXNoZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGxpbmUgZGFzaCBwYXR0ZXJuIGlmIHN1cHBvcnRlZC4gTG9ncyBhIHdhcm5pbmcgdG8gdGhlIGNvbnNvbGUgaWYgaXQgaXNuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIGRhc2hlcyAtIFRoZSBwYXR0ZXJuIFtsaW5lLCBzcGFjZSwgbGluZeKApl0sIHRydWUgZm9yIGRlZmF1bHQgZGFzaGVkIGxpbmUgb3IgZmFsc2UgZm9yIG5vcm1hbCBsaW5lLlxuICAgKi9cbiAgcHVibGljIHNldFN0cm9rZURhc2hlZChcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBkYXNoZXM/OiBib29sZWFuIHwgbnVtYmVyW11cbiAgKTogdm9pZCB7XG4gICAgaWYgKGRhc2hlcyAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChjdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gQXJyYXkuaXNBcnJheShkYXNoZXMpID8gZGFzaGVzIDogWzUsIDVdO1xuICAgICAgICBjdHguc2V0TGluZURhc2gocGF0dGVybik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJzZXRMaW5lRGFzaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4gVGhlIGRhc2hlZCBzdHJva2UgY2Fubm90IGJlIHVzZWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN0eC5zZXRMaW5lRGFzaChbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJzZXRMaW5lRGFzaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4gVGhlIGRhc2hlZCBzdHJva2UgY2Fubm90IGJlIHVzZWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFZGdlQmFzZSB9IGZyb20gXCIuL2VkZ2UtYmFzZVwiO1xuaW1wb3J0IHtcbiAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBUaGUgQmFzZSBDbGFzcyBmb3IgYWxsIEJlemllciBlZGdlcy5cbiAqIEJlemllciBjdXJ2ZXMgYXJlIHVzZWQgdG8gbW9kZWwgc21vb3RoIGdyYWR1YWwgY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCZXppZXJFZGdlQmFzZTxWaWE+IGV4dGVuZHMgRWRnZUJhc2U8VmlhPiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IG9mIGdpdmVuIGVkZ2UuXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIGJvZHkgb2YgdGhlIG5ldHdvcmsuXG4gICAqIEBwYXJhbSBsYWJlbE1vZHVsZSAtIExhYmVsIG1vZHVsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBFZGdlT3B0aW9ucywgYm9keTogVkJvZHksIGxhYmVsTW9kdWxlOiBMYWJlbCkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGFkZGl0aW9uYWwgcG9pbnQocykgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQocykgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2dldFZpYUNvb3JkaW5hdGVzKCk6IFZpYTtcblxuICAvKipcbiAgICogRmluZCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgZnVuY3Rpb24gdXNlcyBiaW5hcnkgc2VhcmNoIHRvIGxvb2sgZm9yIHRoZSBwb2ludCB3aGVyZSB0aGUgYmV6aWVyIGN1cnZlIGNyb3NzZXMgdGhlIGJvcmRlciBvZiB0aGUgbm9kZS5cbiAgICogQHBhcmFtIG5lYXJOb2RlIC0gVGhlIG5vZGUgKGVpdGhlciBmcm9tIG9yIHRvIG5vZGUgb2YgdGhlIGVkZ2UpLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIHZpYU5vZGUgLSBBZGRpdGlvbmFsIG5vZGUocykgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2ZpbmRCb3JkZXJQb3NpdGlvbkJlemllcihcbiAgICBuZWFyTm9kZTogVk5vZGUsXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmlhTm9kZTogVmlhID0gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKVxuICApOiBQb2ludFQge1xuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSAwLjI7XG4gICAgbGV0IGZyb20gPSBmYWxzZTtcbiAgICBsZXQgaGlnaCA9IDE7XG4gICAgbGV0IGxvdyA9IDA7XG4gICAgbGV0IG5vZGUgPSB0aGlzLnRvO1xuICAgIGxldCBwb3M6IFBvaW50O1xuICAgIGxldCBtaWRkbGU6IG51bWJlcjtcblxuICAgIGxldCBlbmRQb2ludE9mZnNldCA9IHRoaXMub3B0aW9ucy5lbmRQb2ludE9mZnNldFxuICAgICAgPyB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG9cbiAgICAgIDogMDtcblxuICAgIGlmIChuZWFyTm9kZS5pZCA9PT0gdGhpcy5mcm9tLmlkKSB7XG4gICAgICBub2RlID0gdGhpcy5mcm9tO1xuICAgICAgZnJvbSA9IHRydWU7XG5cbiAgICAgIGVuZFBvaW50T2Zmc2V0ID0gdGhpcy5vcHRpb25zLmVuZFBvaW50T2Zmc2V0XG4gICAgICAgID8gdGhpcy5vcHRpb25zLmVuZFBvaW50T2Zmc2V0LmZyb21cbiAgICAgICAgOiAwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXJyb3dTdHJpa2V0aHJvdWdoID09PSBmYWxzZSkge1xuICAgICAgZW5kUG9pbnRPZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xuICAgIGRvIHtcbiAgICAgIG1pZGRsZSA9IChsb3cgKyBoaWdoKSAqIDAuNTtcblxuICAgICAgcG9zID0gdGhpcy5nZXRQb2ludChtaWRkbGUsIHZpYU5vZGUpO1xuICAgICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKG5vZGUueSAtIHBvcy55LCBub2RlLnggLSBwb3MueCk7XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9Cb3JkZXIgPVxuICAgICAgICBub2RlLmRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkgKyBlbmRQb2ludE9mZnNldDtcblxuICAgICAgY29uc3QgZGlzdGFuY2VUb1BvaW50ID0gTWF0aC5zcXJ0KFxuICAgICAgICBNYXRoLnBvdyhwb3MueCAtIG5vZGUueCwgMikgKyBNYXRoLnBvdyhwb3MueSAtIG5vZGUueSwgMilcbiAgICAgICk7XG4gICAgICBjb25zdCBkaWZmZXJlbmNlID0gZGlzdGFuY2VUb0JvcmRlciAtIGRpc3RhbmNlVG9Qb2ludDtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmZXJlbmNlKSA8IHRocmVzaG9sZCkge1xuICAgICAgICBicmVhazsgLy8gZm91bmRcbiAgICAgIH0gZWxzZSBpZiAoZGlmZmVyZW5jZSA8IDApIHtcbiAgICAgICAgLy8gZGlzdGFuY2UgdG8gbm9kZXMgaXMgbGFyZ2VyIHRoYW4gZGlzdGFuY2UgdG8gYm9yZGVyIC0tPiB0IG5lZWRzIHRvIGJlIGJpZ2dlciBpZiB3ZSdyZSBsb29raW5nIGF0IHRoZSB0byBub2RlLlxuICAgICAgICBpZiAoZnJvbSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBsb3cgPSBtaWRkbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaCA9IG1pZGRsZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZyb20gPT09IGZhbHNlKSB7XG4gICAgICAgICAgaGlnaCA9IG1pZGRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb3cgPSBtaWRkbGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgKytpdGVyYXRpb247XG4gICAgfSB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucG9zLFxuICAgICAgdDogbWlkZGxlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGEgcG9pbnQgKHgzLHkzKSBhbmQgYSBsaW5lIHNlZ21lbnQgZnJvbSAoeDEseTEpIHRvICh4Mix5MikuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODQ5MjExL3Nob3J0ZXN0LWRpc3RhbmNhZS1iZXR3ZWVuLWEtcG9pbnQtYW5kLWEtbGluZS1zZWdtZW50XG4gICAqIEBwYXJhbSB4MSAtIEZpcnN0IGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MSAtIEZpcnN0IGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB4MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTIgLSBTZWNvbmQgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MyAtIFBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0gdmlhIC0gVGhlIGNvbnRyb2wgcG9pbnQgZm9yIHRoZSBlZGdlLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbGluZSBzZWdtZW50IGFuZCB0aGUgcG9pbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9CZXppZXJFZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyLFxuICAgIHZpYTogUG9pbnRcbiAgKTogbnVtYmVyIHtcbiAgICAvLyB4Myx5MyBpcyB0aGUgcG9pbnRcbiAgICBsZXQgbWluRGlzdGFuY2UgPSAxZTk7XG4gICAgbGV0IGRpc3RhbmNlO1xuICAgIGxldCBpLCB0LCB4LCB5O1xuICAgIGxldCBsYXN0WCA9IHgxO1xuICAgIGxldCBsYXN0WSA9IHkxO1xuICAgIGZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKSB7XG4gICAgICB0ID0gMC4xICogaTtcbiAgICAgIHggPVxuICAgICAgICBNYXRoLnBvdygxIC0gdCwgMikgKiB4MSArIDIgKiB0ICogKDEgLSB0KSAqIHZpYS54ICsgTWF0aC5wb3codCwgMikgKiB4MjtcbiAgICAgIHkgPVxuICAgICAgICBNYXRoLnBvdygxIC0gdCwgMikgKiB5MSArIDIgKiB0ICogKDEgLSB0KSAqIHZpYS55ICsgTWF0aC5wb3codCwgMikgKiB5MjtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBkaXN0YW5jZSA9IHRoaXMuX2dldERpc3RhbmNlVG9MaW5lKGxhc3RYLCBsYXN0WSwgeCwgeSwgeDMsIHkzKTtcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZSA8IG1pbkRpc3RhbmNlID8gZGlzdGFuY2UgOiBtaW5EaXN0YW5jZTtcbiAgICAgIH1cbiAgICAgIGxhc3RYID0geDtcbiAgICAgIGxhc3RZID0geTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWluRGlzdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIGEgYmV6aWVyIGN1cnZlIGJldHdlZW4gdHdvIG5vZGVzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgbWV0aG9kIGFjY2VwdHMgemVybywgb25lIG9yIHR3byBjb250cm9sIHBvaW50cy5cbiAgICogUGFzc2luZyB6ZXJvIGNvbnRyb2wgcG9pbnRzIGp1c3QgZHJhd3MgYSBzdHJhaWdodCBsaW5lLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIHZhbHVlcyAtIFN0eWxlIG9wdGlvbnMgZm9yIGVkZ2UgZHJhd2luZy5cbiAgICogQHBhcmFtIHZpYU5vZGUxIC0gRmlyc3QgY29udHJvbCBwb2ludCBmb3IgY3VydmUgZHJhd2luZy5cbiAgICogQHBhcmFtIHZpYU5vZGUyIC0gU2Vjb25kIGNvbnRyb2wgcG9pbnQgZm9yIGN1cnZlIGRyYXdpbmcuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2JlemllckN1cnZlKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIHwgXCJiYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgfCBcImJhY2tncm91bmRTaXplXCJcbiAgICAgIHwgXCJzaGFkb3dDb2xvclwiXG4gICAgICB8IFwic2hhZG93U2l6ZVwiXG4gICAgICB8IFwic2hhZG93WFwiXG4gICAgICB8IFwic2hhZG93WVwiXG4gICAgPixcbiAgICB2aWFOb2RlMT86IFBvaW50LFxuICAgIHZpYU5vZGUyPzogUG9pbnRcbiAgKTogdm9pZCB7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5tb3ZlVG8odGhpcy5mcm9tUG9pbnQueCwgdGhpcy5mcm9tUG9pbnQueSk7XG5cbiAgICBpZiAodmlhTm9kZTEgIT0gbnVsbCAmJiB2aWFOb2RlMS54ICE9IG51bGwpIHtcbiAgICAgIGlmICh2aWFOb2RlMiAhPSBudWxsICYmIHZpYU5vZGUyLnggIT0gbnVsbCkge1xuICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyhcbiAgICAgICAgICB2aWFOb2RlMS54LFxuICAgICAgICAgIHZpYU5vZGUxLnksXG4gICAgICAgICAgdmlhTm9kZTIueCxcbiAgICAgICAgICB2aWFOb2RlMi55LFxuICAgICAgICAgIHRoaXMudG9Qb2ludC54LFxuICAgICAgICAgIHRoaXMudG9Qb2ludC55XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHgucXVhZHJhdGljQ3VydmVUbyhcbiAgICAgICAgICB2aWFOb2RlMS54LFxuICAgICAgICAgIHZpYU5vZGUxLnksXG4gICAgICAgICAgdGhpcy50b1BvaW50LngsXG4gICAgICAgICAgdGhpcy50b1BvaW50LnlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbGJhY2sgdG8gbm9ybWFsIHN0cmFpZ2h0IGVkZ2VcbiAgICAgIGN0eC5saW5lVG8odGhpcy50b1BvaW50LngsIHRoaXMudG9Qb2ludC55KTtcbiAgICB9XG5cbiAgICAvLyBkcmF3IGEgYmFja2dyb3VuZFxuICAgIHRoaXMuZHJhd0JhY2tncm91bmQoY3R4LCB2YWx1ZXMpO1xuXG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICBjdHguc3Ryb2tlKCk7XG4gICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0VmlhTm9kZSgpOiBWaWEge1xuICAgIHJldHVybiB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgQmV6aWVyRWRnZUJhc2UgfSBmcm9tIFwiLi91dGlsL2Jlemllci1lZGdlLWJhc2VcIjtcbmltcG9ydCB7XG4gIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICBMYWJlbCxcbiAgRWRnZU9wdGlvbnMsXG4gIFBvaW50LFxuICBQb2ludFQsXG4gIFNlbGVjdGl2ZVJlcXVpcmVkLFxuICBWQm9keSxcbiAgVk5vZGUsXG59IGZyb20gXCIuL3V0aWwvdHlwZXNcIjtcblxuLyoqXG4gKiBBIER5bmFtaWMgQmV6aWVyIEVkZ2UuIEJlemllciBjdXJ2ZXMgYXJlIHVzZWQgdG8gbW9kZWwgc21vb3RoIGdyYWR1YWxcbiAqIGN1cnZlcyBpbiBwYXRocyBiZXR3ZWVuIG5vZGVzLiBUaGUgRHluYW1pYyBwaWVjZSByZWZlcnMgdG8gaG93IHRoZSBjdXJ2ZVxuICogcmVhY3RzIHRvIHBoeXNpY3MgY2hhbmdlcy5cbiAqXG4gKiBAYXVnbWVudHMgQmV6aWVyRWRnZUJhc2VcbiAqL1xuZXhwb3J0IGNsYXNzIEJlemllckVkZ2VEeW5hbWljIGV4dGVuZHMgQmV6aWVyRWRnZUJhc2U8UG9pbnQ+IHtcbiAgcHVibGljIHZpYTogVk5vZGUgPSB0aGlzLnZpYTsgLy8gY29uc3RydWN0b3Ig4oaSIHN1cGVyIOKGkiBzdXBlciDihpIgc2V0T3B0aW9ucyDihpIgc2V0dXBTdXBwb3J0Tm9kZVxuICBwcml2YXRlIHJlYWRvbmx5IF9ib3VuZEZ1bmN0aW9uOiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IG9mIGdpdmVuIGVkZ2UuXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIGJvZHkgb2YgdGhlIG5ldHdvcmsuXG4gICAqIEBwYXJhbSBsYWJlbE1vZHVsZSAtIExhYmVsIG1vZHVsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBFZGdlT3B0aW9ucywgYm9keTogVkJvZHksIGxhYmVsTW9kdWxlOiBMYWJlbCkge1xuICAgIC8vdGhpcy52aWEgPSB1bmRlZmluZWQ7IC8vIEhlcmUgZm9yIGNvbXBsZXRlbmVzcyBidXQgbm90IGFsbG93ZWQgdG8gZGVmaW5lZCBiZWZvcmUgc3VwZXIoKSBpcyBpbnZva2VkLlxuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTsgLy8gLS0+IHRoaXMgY2FsbHMgdGhlIHNldE9wdGlvbnMgYmVsb3dcbiAgICB0aGlzLl9ib3VuZEZ1bmN0aW9uID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy5wb3NpdGlvbkJlemllck5vZGUoKTtcbiAgICB9O1xuICAgIHRoaXMuX2JvZHkuZW1pdHRlci5vbihcIl9yZXBvc2l0aW9uQmV6aWVyTm9kZXNcIiwgdGhpcy5fYm91bmRGdW5jdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHNldE9wdGlvbnMob3B0aW9uczogRWRnZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBzdXBlci5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgLy8gY2hlY2sgaWYgdGhlIHBoeXNpY3MgaGFzIGNoYW5nZWQuXG4gICAgbGV0IHBoeXNpY3NDaGFuZ2UgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5vcHRpb25zLnBoeXNpY3MgIT09IG9wdGlvbnMucGh5c2ljcykge1xuICAgICAgcGh5c2ljc0NoYW5nZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBvcHRpb25zIGFuZCB0aGUgdG8gYW5kIGZyb20gbm9kZXNcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuaWQgPSB0aGlzLm9wdGlvbnMuaWQ7XG4gICAgdGhpcy5mcm9tID0gdGhpcy5fYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMuZnJvbV07XG4gICAgdGhpcy50byA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLnRvXTtcblxuICAgIC8vIHNldHVwIHRoZSBzdXBwb3J0IG5vZGUgYW5kIGNvbm5lY3RcbiAgICB0aGlzLnNldHVwU3VwcG9ydE5vZGUoKTtcbiAgICB0aGlzLmNvbm5lY3QoKTtcblxuICAgIC8vIHdoZW4gd2UgY2hhbmdlIHRoZSBwaHlzaWNzIHN0YXRlIG9mIHRoZSBlZGdlLCB3ZSByZXBvc2l0aW9uIHRoZSBzdXBwb3J0IG5vZGUuXG4gICAgaWYgKHBoeXNpY3NDaGFuZ2UgPT09IHRydWUpIHtcbiAgICAgIHRoaXMudmlhLnNldE9wdGlvbnMoeyBwaHlzaWNzOiB0aGlzLm9wdGlvbnMucGh5c2ljcyB9KTtcbiAgICAgIHRoaXMucG9zaXRpb25CZXppZXJOb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBjb25uZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuZnJvbSA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLmZyb21dO1xuICAgIHRoaXMudG8gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy50b107XG4gICAgaWYgKFxuICAgICAgdGhpcy5mcm9tID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMudG8gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5vcHRpb25zLnBoeXNpY3MgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICB0aGlzLnZpYS5zZXRPcHRpb25zKHsgcGh5c2ljczogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpeCB3ZWlyZCBiZWhhdmlvdXIgd2hlcmUgYSBzZWxmIHJlZmVyZW5jaW5nIG5vZGUgaGFzIHBoeXNpY3MgZW5hYmxlZFxuICAgICAgaWYgKHRoaXMuZnJvbS5pZCA9PT0gdGhpcy50by5pZCkge1xuICAgICAgICB0aGlzLnZpYS5zZXRPcHRpb25zKHsgcGh5c2ljczogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZpYS5zZXRPcHRpb25zKHsgcGh5c2ljczogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGNsZWFudXAoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5fYm9keS5lbWl0dGVyLm9mZihcIl9yZXBvc2l0aW9uQmV6aWVyTm9kZXNcIiwgdGhpcy5fYm91bmRGdW5jdGlvbik7XG4gICAgaWYgKHRoaXMudmlhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMudmlhLmlkXTtcbiAgICAgIHRoaXMudmlhID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW5kIGFkZCBhIHN1cHBvcnQgbm9kZSBpZiBub3QgYWxyZWFkeSBwcmVzZW50LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBCZXppZXIgY3VydmVzIHJlcXVpcmUgYW4gYW5jaG9yIHBvaW50IHRvIGNhbGN1bGF0ZSB0aGUgc21vb3RoIGZsb3cuXG4gICAqIFRoZXNlIHBvaW50cyBhcmUgbm9kZXMuXG4gICAqIFRoZXNlIG5vZGVzIGFyZSBpbnZpc2libGUgYnV0IGFyZSB1c2VkIGZvciB0aGUgZm9yY2UgY2FsY3VsYXRpb24uXG4gICAqXG4gICAqIFRoZSBjaGFuZ2VkIGRhdGEgaXMgbm90IGNhbGxlZCwgaWYgbmVlZGVkLCBpdCBpcyByZXR1cm5lZCBieSB0aGUgbWFpbiBlZGdlIGNvbnN0cnVjdG9yLlxuICAgKi9cbiAgcHVibGljIHNldHVwU3VwcG9ydE5vZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IFwiZWRnZUlkOlwiICsgdGhpcy5pZDtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9ib2R5LmZ1bmN0aW9ucy5jcmVhdGVOb2RlKHtcbiAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBoeXNpY3M6IHRydWUsXG4gICAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fYm9keS5ub2Rlc1tub2RlSWRdID0gbm9kZTtcbiAgICAgIHRoaXMudmlhID0gbm9kZTtcbiAgICAgIHRoaXMudmlhLnBhcmVudEVkZ2VJZCA9IHRoaXMuaWQ7XG4gICAgICB0aGlzLnBvc2l0aW9uQmV6aWVyTm9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQb3NpdGlvbiBiZXppZXIgbm9kZS5cbiAgICovXG4gIHB1YmxpYyBwb3NpdGlvbkJlemllck5vZGUoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy52aWEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5mcm9tICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMudG8gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhpcy52aWEueCA9IDAuNSAqICh0aGlzLmZyb20ueCArIHRoaXMudG8ueCk7XG4gICAgICB0aGlzLnZpYS55ID0gMC41ICogKHRoaXMuZnJvbS55ICsgdGhpcy50by55KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudmlhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudmlhLnggPSAwO1xuICAgICAgdGhpcy52aWEueSA9IDA7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICB8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAgICAgIHwgXCJiYWNrZ3JvdW5kU2l6ZVwiXG4gICAgICB8IFwic2hhZG93Q29sb3JcIlxuICAgICAgfCBcInNoYWRvd1NpemVcIlxuICAgICAgfCBcInNoYWRvd1hcIlxuICAgICAgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZTogVk5vZGVcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fYmV6aWVyQ3VydmUoY3R4LCB2YWx1ZXMsIHZpYU5vZGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfZ2V0VmlhQ29vcmRpbmF0ZXMoKTogUG9pbnQge1xuICAgIHJldHVybiB0aGlzLnZpYTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0VmlhTm9kZSgpOiBQb2ludCB7XG4gICAgcmV0dXJuIHRoaXMudmlhO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRQb2ludChwb3NpdGlvbjogbnVtYmVyLCB2aWFOb2RlOiBQb2ludCA9IHRoaXMudmlhKTogUG9pbnQge1xuICAgIGlmICh0aGlzLmZyb20gPT09IHRoaXMudG8pIHtcbiAgICAgIGNvbnN0IFtjeCwgY3ksIGNyXSA9IHRoaXMuX2dldENpcmNsZURhdGEoKTtcbiAgICAgIGNvbnN0IGEgPSAyICogTWF0aC5QSSAqICgxIC0gcG9zaXRpb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogY3ggKyBjciAqIE1hdGguc2luKGEpLFxuICAgICAgICB5OiBjeSArIGNyIC0gY3IgKiAoMSAtIE1hdGguY29zKGEpKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6XG4gICAgICAgICAgTWF0aC5wb3coMSAtIHBvc2l0aW9uLCAyKSAqIHRoaXMuZnJvbVBvaW50LnggK1xuICAgICAgICAgIDIgKiBwb3NpdGlvbiAqICgxIC0gcG9zaXRpb24pICogdmlhTm9kZS54ICtcbiAgICAgICAgICBNYXRoLnBvdyhwb3NpdGlvbiwgMikgKiB0aGlzLnRvUG9pbnQueCxcbiAgICAgICAgeTpcbiAgICAgICAgICBNYXRoLnBvdygxIC0gcG9zaXRpb24sIDIpICogdGhpcy5mcm9tUG9pbnQueSArXG4gICAgICAgICAgMiAqIHBvc2l0aW9uICogKDEgLSBwb3NpdGlvbikgKiB2aWFOb2RlLnkgK1xuICAgICAgICAgIE1hdGgucG93KHBvc2l0aW9uLCAyKSAqIHRoaXMudG9Qb2ludC55LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9maW5kQm9yZGVyUG9zaXRpb24oXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXG4gICk6IFBvaW50VCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkJlemllcihuZWFyTm9kZSwgY3R4LCB0aGlzLnZpYSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9nZXREaXN0YW5jZVRvRWRnZShcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlclxuICApOiBudW1iZXIge1xuICAgIC8vIHgzLHkzIGlzIHRoZSBwb2ludFxuICAgIHJldHVybiB0aGlzLl9nZXREaXN0YW5jZVRvQmV6aWVyRWRnZSh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB0aGlzLnZpYSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCZXppZXJFZGdlQmFzZSB9IGZyb20gXCIuL3V0aWwvYmV6aWVyLWVkZ2UtYmFzZVwiO1xuaW1wb3J0IHtcbiAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdXRpbC90eXBlc1wiO1xuXG4vKipcbiAqIEEgU3RhdGljIEJlemllciBFZGdlLiBCZXppZXIgY3VydmVzIGFyZSB1c2VkIHRvIG1vZGVsIHNtb290aCBncmFkdWFsIGN1cnZlcyBpbiBwYXRocyBiZXR3ZWVuIG5vZGVzLlxuICovXG5leHBvcnQgY2xhc3MgQmV6aWVyRWRnZVN0YXRpYyBleHRlbmRzIEJlemllckVkZ2VCYXNlPFBvaW50PiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IG9mIGdpdmVuIGVkZ2UuXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIGJvZHkgb2YgdGhlIG5ldHdvcmsuXG4gICAqIEBwYXJhbSBsYWJlbE1vZHVsZSAtIExhYmVsIG1vZHVsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBFZGdlT3B0aW9ucywgYm9keTogVkJvZHksIGxhYmVsTW9kdWxlOiBMYWJlbCkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2xpbmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImJhY2tncm91bmRDb2xvclwiXG4gICAgICB8IFwiYmFja2dyb3VuZFNpemVcIlxuICAgICAgfCBcInNoYWRvd0NvbG9yXCJcbiAgICAgIHwgXCJzaGFkb3dTaXplXCJcbiAgICAgIHwgXCJzaGFkb3dYXCJcbiAgICAgIHwgXCJzaGFkb3dZXCJcbiAgICA+LFxuICAgIHZpYU5vZGU6IFBvaW50XG4gICk6IHZvaWQge1xuICAgIHRoaXMuX2JlemllckN1cnZlKGN0eCwgdmFsdWVzLCB2aWFOb2RlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0VmlhTm9kZSgpOiBQb2ludCB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHZpYSBub2RlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBXZSBkbyBub3QgdXNlIHRoZSB0byBhbmQgZnJvbVBvaW50cyBoZXJlIHRvIG1ha2UgdGhlIHZpYSBub2RlcyB0aGUgc2FtZSBhcyBlZGdlcyB3aXRob3V0IGFycm93cy5cbiAgICogQHJldHVybnMgQ2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIHRoZSB2aWEgbm9kZS5cbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0VmlhQ29vcmRpbmF0ZXMoKTogUG9pbnQge1xuICAgIC8vIEFzc3VtcHRpb246IHgveSBjb29yZGluYXRlcyBpbiBmcm9tL3RvIGFsd2F5cyBkZWZpbmVkXG4gICAgY29uc3QgZmFjdG9yID0gdGhpcy5vcHRpb25zLnNtb290aC5yb3VuZG5lc3M7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMub3B0aW9ucy5zbW9vdGgudHlwZTtcbiAgICBsZXQgZHggPSBNYXRoLmFicyh0aGlzLmZyb20ueCAtIHRoaXMudG8ueCk7XG4gICAgbGV0IGR5ID0gTWF0aC5hYnModGhpcy5mcm9tLnkgLSB0aGlzLnRvLnkpO1xuICAgIGlmICh0eXBlID09PSBcImRpc2NyZXRlXCIgfHwgdHlwZSA9PT0gXCJkaWFnb25hbENyb3NzXCIpIHtcbiAgICAgIGxldCBzdGVwWDtcbiAgICAgIGxldCBzdGVwWTtcblxuICAgICAgaWYgKGR4IDw9IGR5KSB7XG4gICAgICAgIHN0ZXBYID0gc3RlcFkgPSBmYWN0b3IgKiBkeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZXBYID0gc3RlcFkgPSBmYWN0b3IgKiBkeDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZnJvbS54ID4gdGhpcy50by54KSB7XG4gICAgICAgIHN0ZXBYID0gLXN0ZXBYO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZnJvbS55ID49IHRoaXMudG8ueSkge1xuICAgICAgICBzdGVwWSA9IC1zdGVwWTtcbiAgICAgIH1cblxuICAgICAgbGV0IHhWaWEgPSB0aGlzLmZyb20ueCArIHN0ZXBYO1xuICAgICAgbGV0IHlWaWEgPSB0aGlzLmZyb20ueSArIHN0ZXBZO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJkaXNjcmV0ZVwiKSB7XG4gICAgICAgIGlmIChkeCA8PSBkeSkge1xuICAgICAgICAgIHhWaWEgPSBkeCA8IGZhY3RvciAqIGR5ID8gdGhpcy5mcm9tLnggOiB4VmlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlWaWEgPSBkeSA8IGZhY3RvciAqIGR4ID8gdGhpcy5mcm9tLnkgOiB5VmlhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHg6IHhWaWEsIHk6IHlWaWEgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic3RyYWlnaHRDcm9zc1wiKSB7XG4gICAgICBsZXQgc3RlcFggPSAoMSAtIGZhY3RvcikgKiBkeDtcbiAgICAgIGxldCBzdGVwWSA9ICgxIC0gZmFjdG9yKSAqIGR5O1xuXG4gICAgICBpZiAoZHggPD0gZHkpIHtcbiAgICAgICAgLy8gdXAgLSBkb3duXG4gICAgICAgIHN0ZXBYID0gMDtcbiAgICAgICAgaWYgKHRoaXMuZnJvbS55IDwgdGhpcy50by55KSB7XG4gICAgICAgICAgc3RlcFkgPSAtc3RlcFk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGxlZnQgLSByaWdodFxuICAgICAgICBpZiAodGhpcy5mcm9tLnggPCB0aGlzLnRvLngpIHtcbiAgICAgICAgICBzdGVwWCA9IC1zdGVwWDtcbiAgICAgICAgfVxuICAgICAgICBzdGVwWSA9IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHRoaXMudG8ueCArIHN0ZXBYLFxuICAgICAgICB5OiB0aGlzLnRvLnkgKyBzdGVwWSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgbGV0IHN0ZXBYID0gKDEgLSBmYWN0b3IpICogZHg7XG4gICAgICBpZiAodGhpcy5mcm9tLnggPCB0aGlzLnRvLngpIHtcbiAgICAgICAgc3RlcFggPSAtc3RlcFg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHRoaXMudG8ueCArIHN0ZXBYLFxuICAgICAgICB5OiB0aGlzLmZyb20ueSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgIGxldCBzdGVwWSA9ICgxIC0gZmFjdG9yKSAqIGR5O1xuICAgICAgaWYgKHRoaXMuZnJvbS55IDwgdGhpcy50by55KSB7XG4gICAgICAgIHN0ZXBZID0gLXN0ZXBZO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiB0aGlzLmZyb20ueCxcbiAgICAgICAgeTogdGhpcy50by55ICsgc3RlcFksXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJjdXJ2ZWRDV1wiKSB7XG4gICAgICBkeCA9IHRoaXMudG8ueCAtIHRoaXMuZnJvbS54O1xuICAgICAgZHkgPSB0aGlzLmZyb20ueSAtIHRoaXMudG8ueTtcbiAgICAgIGNvbnN0IHJhZGl1cyA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgICBjb25zdCBwaSA9IE1hdGguUEk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsQW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCk7XG4gICAgICBjb25zdCBteUFuZ2xlID0gKG9yaWdpbmFsQW5nbGUgKyAoZmFjdG9yICogMC41ICsgMC41KSAqIHBpKSAlICgyICogcGkpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiB0aGlzLmZyb20ueCArIChmYWN0b3IgKiAwLjUgKyAwLjUpICogcmFkaXVzICogTWF0aC5zaW4obXlBbmdsZSksXG4gICAgICAgIHk6IHRoaXMuZnJvbS55ICsgKGZhY3RvciAqIDAuNSArIDAuNSkgKiByYWRpdXMgKiBNYXRoLmNvcyhteUFuZ2xlKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcImN1cnZlZENDV1wiKSB7XG4gICAgICBkeCA9IHRoaXMudG8ueCAtIHRoaXMuZnJvbS54O1xuICAgICAgZHkgPSB0aGlzLmZyb20ueSAtIHRoaXMudG8ueTtcbiAgICAgIGNvbnN0IHJhZGl1cyA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgICBjb25zdCBwaSA9IE1hdGguUEk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsQW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCk7XG4gICAgICBjb25zdCBteUFuZ2xlID0gKG9yaWdpbmFsQW5nbGUgKyAoLWZhY3RvciAqIDAuNSArIDAuNSkgKiBwaSkgJSAoMiAqIHBpKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogdGhpcy5mcm9tLnggKyAoZmFjdG9yICogMC41ICsgMC41KSAqIHJhZGl1cyAqIE1hdGguc2luKG15QW5nbGUpLFxuICAgICAgICB5OiB0aGlzLmZyb20ueSArIChmYWN0b3IgKiAwLjUgKyAwLjUpICogcmFkaXVzICogTWF0aC5jb3MobXlBbmdsZSksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb250aW51b3VzXG4gICAgICBsZXQgc3RlcFg7XG4gICAgICBsZXQgc3RlcFk7XG5cbiAgICAgIGlmIChkeCA8PSBkeSkge1xuICAgICAgICBzdGVwWCA9IHN0ZXBZID0gZmFjdG9yICogZHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGVwWCA9IHN0ZXBZID0gZmFjdG9yICogZHg7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZyb20ueCA+IHRoaXMudG8ueCkge1xuICAgICAgICBzdGVwWCA9IC1zdGVwWDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZyb20ueSA+PSB0aGlzLnRvLnkpIHtcbiAgICAgICAgc3RlcFkgPSAtc3RlcFk7XG4gICAgICB9XG5cbiAgICAgIGxldCB4VmlhID0gdGhpcy5mcm9tLnggKyBzdGVwWDtcbiAgICAgIGxldCB5VmlhID0gdGhpcy5mcm9tLnkgKyBzdGVwWTtcblxuICAgICAgaWYgKGR4IDw9IGR5KSB7XG4gICAgICAgIGlmICh0aGlzLmZyb20ueCA8PSB0aGlzLnRvLngpIHtcbiAgICAgICAgICB4VmlhID0gdGhpcy50by54IDwgeFZpYSA/IHRoaXMudG8ueCA6IHhWaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeFZpYSA9IHRoaXMudG8ueCA+IHhWaWEgPyB0aGlzLnRvLnggOiB4VmlhO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5mcm9tLnkgPj0gdGhpcy50by55KSB7XG4gICAgICAgICAgeVZpYSA9IHRoaXMudG8ueSA+IHlWaWEgPyB0aGlzLnRvLnkgOiB5VmlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlWaWEgPSB0aGlzLnRvLnkgPCB5VmlhID8gdGhpcy50by55IDogeVZpYTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4geyB4OiB4VmlhLCB5OiB5VmlhIH07XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfZmluZEJvcmRlclBvc2l0aW9uKFxuICAgIG5lYXJOb2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBvcHRpb25zOiB7IHZpYT86IFBvaW50IH0gPSB7fVxuICApOiBQb2ludFQge1xuICAgIHJldHVybiB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25CZXppZXIobmVhck5vZGUsIGN0eCwgb3B0aW9ucy52aWEpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXIsXG4gICAgdmlhTm9kZSA9IHRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKClcbiAgKSB7XG4gICAgLy8geDMseTMgaXMgdGhlIHBvaW50XG4gICAgcmV0dXJuIHRoaXMuX2dldERpc3RhbmNlVG9CZXppZXJFZGdlKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHZpYU5vZGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRQb2ludChcbiAgICBwb3NpdGlvbjogbnVtYmVyLFxuICAgIHZpYU5vZGU6IFBvaW50ID0gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKVxuICApOiBQb2ludCB7XG4gICAgY29uc3QgdCA9IHBvc2l0aW9uO1xuICAgIGNvbnN0IHggPVxuICAgICAgTWF0aC5wb3coMSAtIHQsIDIpICogdGhpcy5mcm9tUG9pbnQueCArXG4gICAgICAyICogdCAqICgxIC0gdCkgKiB2aWFOb2RlLnggK1xuICAgICAgTWF0aC5wb3codCwgMikgKiB0aGlzLnRvUG9pbnQueDtcbiAgICBjb25zdCB5ID1cbiAgICAgIE1hdGgucG93KDEgLSB0LCAyKSAqIHRoaXMuZnJvbVBvaW50LnkgK1xuICAgICAgMiAqIHQgKiAoMSAtIHQpICogdmlhTm9kZS55ICtcbiAgICAgIE1hdGgucG93KHQsIDIpICogdGhpcy50b1BvaW50Lnk7XG5cbiAgICByZXR1cm4geyB4OiB4LCB5OiB5IH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCZXppZXJFZGdlQmFzZSB9IGZyb20gXCIuL2Jlemllci1lZGdlLWJhc2VcIjtcbmltcG9ydCB7IExhYmVsLCBFZGdlT3B0aW9ucywgUG9pbnQsIFZCb2R5IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBBIEJhc2UgQ2xhc3MgZm9yIGFsbCBDdWJpYyBCZXppZXIgRWRnZXMuIEJlemllciBjdXJ2ZXMgYXJlIHVzZWQgdG8gbW9kZWxcbiAqIHNtb290aCBncmFkdWFsIGN1cnZlcyBpbiBwYXRocyBiZXR3ZWVuIG5vZGVzLlxuICpcbiAqIEBhdWdtZW50cyBCZXppZXJFZGdlQmFzZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3ViaWNCZXppZXJFZGdlQmFzZTxWaWE+IGV4dGVuZHMgQmV6aWVyRWRnZUJhc2U8VmlhPiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IG9mIGdpdmVuIGVkZ2UuXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIGJvZHkgb2YgdGhlIG5ldHdvcmsuXG4gICAqIEBwYXJhbSBsYWJlbE1vZHVsZSAtIExhYmVsIG1vZHVsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBFZGdlT3B0aW9ucywgYm9keTogVkJvZHksIGxhYmVsTW9kdWxlOiBMYWJlbCkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCAoeDMseTMpIGFuZCBhIGxpbmUgc2VnbWVudCBmcm9tICh4MSx5MSkgdG8gKHgyLHkyKS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84NDkyMTEvc2hvcnRlc3QtZGlzdGFuY2FlLWJldHdlZW4tYS1wb2ludC1hbmQtYS1saW5lLXNlZ21lbnRcbiAgICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQiVDMyVBOXppZXJfY3VydmVcbiAgICogQHBhcmFtIHgxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB2aWExIC0gVGhlIGZpcnN0IHBvaW50IHRoaXMgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICogQHBhcmFtIHZpYTIgLSBUaGUgc2Vjb25kIHBvaW50IHRoaXMgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICogQHJldHVybnMgVGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGxpbmUgc2VnbWVudCBhbmQgdGhlIHBvaW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXREaXN0YW5jZVRvQmV6aWVyRWRnZTIoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXIsXG4gICAgdmlhMTogUG9pbnQsXG4gICAgdmlhMjogUG9pbnRcbiAgKTogbnVtYmVyIHtcbiAgICAvLyB4Myx5MyBpcyB0aGUgcG9pbnRcbiAgICBsZXQgbWluRGlzdGFuY2UgPSAxZTk7XG4gICAgbGV0IGxhc3RYID0geDE7XG4gICAgbGV0IGxhc3RZID0geTE7XG4gICAgY29uc3QgdmVjID0gWzAsIDAsIDAsIDBdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMTA7IGkrKykge1xuICAgICAgY29uc3QgdCA9IDAuMSAqIGk7XG4gICAgICB2ZWNbMF0gPSBNYXRoLnBvdygxIC0gdCwgMyk7XG4gICAgICB2ZWNbMV0gPSAzICogdCAqIE1hdGgucG93KDEgLSB0LCAyKTtcbiAgICAgIHZlY1syXSA9IDMgKiBNYXRoLnBvdyh0LCAyKSAqICgxIC0gdCk7XG4gICAgICB2ZWNbM10gPSBNYXRoLnBvdyh0LCAzKTtcbiAgICAgIGNvbnN0IHggPSB2ZWNbMF0gKiB4MSArIHZlY1sxXSAqIHZpYTEueCArIHZlY1syXSAqIHZpYTIueCArIHZlY1szXSAqIHgyO1xuICAgICAgY29uc3QgeSA9IHZlY1swXSAqIHkxICsgdmVjWzFdICogdmlhMS55ICsgdmVjWzJdICogdmlhMi55ICsgdmVjWzNdICogeTI7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSB0aGlzLl9nZXREaXN0YW5jZVRvTGluZShsYXN0WCwgbGFzdFksIHgsIHksIHgzLCB5Myk7XG4gICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2UgPCBtaW5EaXN0YW5jZSA/IGRpc3RhbmNlIDogbWluRGlzdGFuY2U7XG4gICAgICB9XG4gICAgICBsYXN0WCA9IHg7XG4gICAgICBsYXN0WSA9IHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbkRpc3RhbmNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgQ3ViaWNCZXppZXJFZGdlQmFzZSB9IGZyb20gXCIuL3V0aWwvY3ViaWMtYmV6aWVyLWVkZ2UtYmFzZVwiO1xuaW1wb3J0IHtcbiAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdXRpbC90eXBlc1wiO1xuXG4vKipcbiAqIEEgQ3ViaWMgQmV6aWVyIEVkZ2UuIEJlemllciBjdXJ2ZXMgYXJlIHVzZWQgdG8gbW9kZWwgc21vb3RoIGdyYWR1YWwgY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDdWJpY0JlemllckVkZ2UgZXh0ZW5kcyBDdWJpY0JlemllckVkZ2VCYXNlPFtQb2ludCwgUG9pbnRdPiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IG9mIGdpdmVuIGVkZ2UuXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIGJvZHkgb2YgdGhlIG5ldHdvcmsuXG4gICAqIEBwYXJhbSBsYWJlbE1vZHVsZSAtIExhYmVsIG1vZHVsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBFZGdlT3B0aW9ucywgYm9keTogVkJvZHksIGxhYmVsTW9kdWxlOiBMYWJlbCkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2xpbmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImJhY2tncm91bmRDb2xvclwiXG4gICAgICB8IFwiYmFja2dyb3VuZFNpemVcIlxuICAgICAgfCBcInNoYWRvd0NvbG9yXCJcbiAgICAgIHwgXCJzaGFkb3dTaXplXCJcbiAgICAgIHwgXCJzaGFkb3dYXCJcbiAgICAgIHwgXCJzaGFkb3dZXCJcbiAgICA+LFxuICAgIHZpYU5vZGVzOiBbUG9pbnQsIFBvaW50XVxuICApOiB2b2lkIHtcbiAgICAvLyBnZXQgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBzdXBwb3J0IHBvaW50cy5cbiAgICBjb25zdCB2aWExID0gdmlhTm9kZXNbMF07XG4gICAgY29uc3QgdmlhMiA9IHZpYU5vZGVzWzFdO1xuICAgIHRoaXMuX2JlemllckN1cnZlKGN0eCwgdmFsdWVzLCB2aWExLCB2aWEyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBhZGRpdGlvbmFsIHBvaW50cyB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICpcbiAgICogQHJldHVybnMgQ2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludHMgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqL1xuICBwcm90ZWN0ZWQgX2dldFZpYUNvb3JkaW5hdGVzKCk6IFtQb2ludCwgUG9pbnRdIHtcbiAgICBjb25zdCBkeCA9IHRoaXMuZnJvbS54IC0gdGhpcy50by54O1xuICAgIGNvbnN0IGR5ID0gdGhpcy5mcm9tLnkgLSB0aGlzLnRvLnk7XG5cbiAgICBsZXQgeDE6IG51bWJlcjtcbiAgICBsZXQgeTE6IG51bWJlcjtcbiAgICBsZXQgeDI6IG51bWJlcjtcbiAgICBsZXQgeTI6IG51bWJlcjtcbiAgICBjb25zdCByb3VuZG5lc3MgPSB0aGlzLm9wdGlvbnMuc21vb3RoLnJvdW5kbmVzcztcblxuICAgIC8vIGhvcml6b250YWwgaWYgeCA+IHkgb3IgaWYgZGlyZWN0aW9uIGlzIGZvcmNlZCBvciBpZiBkaXJlY3Rpb24gaXMgaG9yaXpvbnRhbFxuICAgIGlmIChcbiAgICAgIChNYXRoLmFicyhkeCkgPiBNYXRoLmFicyhkeSkgfHxcbiAgICAgICAgdGhpcy5vcHRpb25zLnNtb290aC5mb3JjZURpcmVjdGlvbiA9PT0gdHJ1ZSB8fFxuICAgICAgICB0aGlzLm9wdGlvbnMuc21vb3RoLmZvcmNlRGlyZWN0aW9uID09PSBcImhvcml6b250YWxcIikgJiZcbiAgICAgIHRoaXMub3B0aW9ucy5zbW9vdGguZm9yY2VEaXJlY3Rpb24gIT09IFwidmVydGljYWxcIlxuICAgICkge1xuICAgICAgeTEgPSB0aGlzLmZyb20ueTtcbiAgICAgIHkyID0gdGhpcy50by55O1xuICAgICAgeDEgPSB0aGlzLmZyb20ueCAtIHJvdW5kbmVzcyAqIGR4O1xuICAgICAgeDIgPSB0aGlzLnRvLnggKyByb3VuZG5lc3MgKiBkeDtcbiAgICB9IGVsc2Uge1xuICAgICAgeTEgPSB0aGlzLmZyb20ueSAtIHJvdW5kbmVzcyAqIGR5O1xuICAgICAgeTIgPSB0aGlzLnRvLnkgKyByb3VuZG5lc3MgKiBkeTtcbiAgICAgIHgxID0gdGhpcy5mcm9tLng7XG4gICAgICB4MiA9IHRoaXMudG8ueDtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgeyB4OiB4MSwgeTogeTEgfSxcbiAgICAgIHsgeDogeDIsIHk6IHkyIH0sXG4gICAgXTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0VmlhTm9kZSgpOiBbUG9pbnQsIFBvaW50XSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9maW5kQm9yZGVyUG9zaXRpb24oXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXG4gICk6IFBvaW50VCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkJlemllcihuZWFyTm9kZSwgY3R4KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyLFxuICAgIFt2aWExLCB2aWEyXTogW1BvaW50LCBQb2ludF0gPSB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpXG4gICk6IG51bWJlciB7XG4gICAgLy8geDMseTMgaXMgdGhlIHBvaW50XG4gICAgcmV0dXJuIHRoaXMuX2dldERpc3RhbmNlVG9CZXppZXJFZGdlMih4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB2aWExLCB2aWEyKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0UG9pbnQoXG4gICAgcG9zaXRpb246IG51bWJlcixcbiAgICBbdmlhMSwgdmlhMl06IFtQb2ludCwgUG9pbnRdID0gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKVxuICApOiBQb2ludCB7XG4gICAgY29uc3QgdCA9IHBvc2l0aW9uO1xuICAgIGNvbnN0IHZlYzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgICBNYXRoLnBvdygxIC0gdCwgMyksXG4gICAgICAzICogdCAqIE1hdGgucG93KDEgLSB0LCAyKSxcbiAgICAgIDMgKiBNYXRoLnBvdyh0LCAyKSAqICgxIC0gdCksXG4gICAgICBNYXRoLnBvdyh0LCAzKSxcbiAgICBdO1xuICAgIGNvbnN0IHggPVxuICAgICAgdmVjWzBdICogdGhpcy5mcm9tUG9pbnQueCArXG4gICAgICB2ZWNbMV0gKiB2aWExLnggK1xuICAgICAgdmVjWzJdICogdmlhMi54ICtcbiAgICAgIHZlY1szXSAqIHRoaXMudG9Qb2ludC54O1xuICAgIGNvbnN0IHkgPVxuICAgICAgdmVjWzBdICogdGhpcy5mcm9tUG9pbnQueSArXG4gICAgICB2ZWNbMV0gKiB2aWExLnkgK1xuICAgICAgdmVjWzJdICogdmlhMi55ICtcbiAgICAgIHZlY1szXSAqIHRoaXMudG9Qb2ludC55O1xuXG4gICAgcmV0dXJuIHsgeDogeCwgeTogeSB9O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgRWRnZUJhc2UgfSBmcm9tIFwiLi91dGlsL2VkZ2UtYmFzZVwiO1xuaW1wb3J0IHtcbiAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdXRpbC90eXBlc1wiO1xuXG4vKipcbiAqIEEgU3RyYWlnaHQgRWRnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0cmFpZ2h0RWRnZSBleHRlbmRzIEVkZ2VCYXNlIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcInNoYWRvd0NvbG9yXCIgfCBcInNoYWRvd1NpemVcIiB8IFwic2hhZG93WFwiIHwgXCJzaGFkb3dZXCJcbiAgICA+XG4gICk6IHZvaWQge1xuICAgIC8vIGRyYXcgYSBzdHJhaWdodCBsaW5lXG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5tb3ZlVG8odGhpcy5mcm9tUG9pbnQueCwgdGhpcy5mcm9tUG9pbnQueSk7XG4gICAgY3R4LmxpbmVUbyh0aGlzLnRvUG9pbnQueCwgdGhpcy50b1BvaW50LnkpO1xuICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICB0aGlzLmVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgY3R4LnN0cm9rZSgpO1xuICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldFZpYU5vZGUoKTogdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRQb2ludChwb3NpdGlvbjogbnVtYmVyKTogUG9pbnQge1xuICAgIHJldHVybiB7XG4gICAgICB4OiAoMSAtIHBvc2l0aW9uKSAqIHRoaXMuZnJvbVBvaW50LnggKyBwb3NpdGlvbiAqIHRoaXMudG9Qb2ludC54LFxuICAgICAgeTogKDEgLSBwb3NpdGlvbikgKiB0aGlzLmZyb21Qb2ludC55ICsgcG9zaXRpb24gKiB0aGlzLnRvUG9pbnQueSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfZmluZEJvcmRlclBvc2l0aW9uKFxuICAgIG5lYXJOb2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFxuICApOiBQb2ludFQge1xuICAgIGxldCBub2RlMSA9IHRoaXMudG87XG4gICAgbGV0IG5vZGUyID0gdGhpcy5mcm9tO1xuICAgIGlmIChuZWFyTm9kZS5pZCA9PT0gdGhpcy5mcm9tLmlkKSB7XG4gICAgICBub2RlMSA9IHRoaXMuZnJvbTtcbiAgICAgIG5vZGUyID0gdGhpcy50bztcbiAgICB9XG5cbiAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIobm9kZTEueSAtIG5vZGUyLnksIG5vZGUxLnggLSBub2RlMi54KTtcbiAgICBjb25zdCBkeCA9IG5vZGUxLnggLSBub2RlMi54O1xuICAgIGNvbnN0IGR5ID0gbm9kZTEueSAtIG5vZGUyLnk7XG4gICAgY29uc3QgZWRnZVNlZ21lbnRMZW5ndGggPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICAgIGNvbnN0IHRvQm9yZGVyRGlzdCA9IG5lYXJOb2RlLmRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gICAgY29uc3QgdG9Cb3JkZXJQb2ludCA9XG4gICAgICAoZWRnZVNlZ21lbnRMZW5ndGggLSB0b0JvcmRlckRpc3QpIC8gZWRnZVNlZ21lbnRMZW5ndGg7XG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogKDEgLSB0b0JvcmRlclBvaW50KSAqIG5vZGUyLnggKyB0b0JvcmRlclBvaW50ICogbm9kZTEueCxcbiAgICAgIHk6ICgxIC0gdG9Cb3JkZXJQb2ludCkgKiBub2RlMi55ICsgdG9Cb3JkZXJQb2ludCAqIG5vZGUxLnksXG4gICAgICB0OiAwLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9nZXREaXN0YW5jZVRvRWRnZShcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlclxuICApOiBudW1iZXIge1xuICAgIC8vIHgzLHkzIGlzIHRoZSBwb2ludFxuICAgIHJldHVybiB0aGlzLl9nZXREaXN0YW5jZVRvTGluZSh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKTtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIGJyaWRnZU9iamVjdCxcbiAgZGVlcEV4dGVuZCxcbiAgaXNTdHJpbmcsXG4gIG1lcmdlT3B0aW9ucyxcbiAgc2VsZWN0aXZlRGVlcEV4dGVuZCxcbn0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IExhYmVsIGZyb20gXCIuL3NoYXJlZC9MYWJlbFwiO1xuaW1wb3J0IHtcbiAgY2hvb3NpZnksXG4gIGdldFNlbGZSZWZDb29yZGluYXRlcyxcbiAgaXNWYWxpZExhYmVsLFxuICBwb2ludEluUmVjdCxcbn0gZnJvbSBcIi4vc2hhcmVkL0NvbXBvbmVudFV0aWxcIjtcbmltcG9ydCB7XG4gIEJlemllckVkZ2VEeW5hbWljLFxuICBCZXppZXJFZGdlU3RhdGljLFxuICBDdWJpY0JlemllckVkZ2UsXG4gIFN0cmFpZ2h0RWRnZSxcbn0gZnJvbSBcIi4vZWRnZXNcIjtcblxuLyoqXG4gKiBBbiBlZGdlIGNvbm5lY3RzIHR3byBub2RlcyBhbmQgaGFzIGEgc3BlY2lmaWMgZGlyZWN0aW9uLlxuICovXG5jbGFzcyBFZGdlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICAgICAgICB2YWx1ZXMgc3BlY2lmaWMgdG8gdGhpcyBlZGdlLCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJ2Zyb20nIGFuZCAndG8nXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5ICAgICAgICAgICBzaGFyZWQgc3RhdGUgZnJvbSBOZXR3b3JrIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7TmV0d29yay5JbWFnZXN9IGltYWdlbGlzdCAgQSBsaXN0IHdpdGggaW1hZ2VzLiBPbmx5IG5lZWRlZCB3aGVuIHRoZSBlZGdlIGhhcyBpbWFnZSBhcnJvd3MuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBnbG9iYWxPcHRpb25zICBvcHRpb25zIGZyb20gdGhlIEVkZ2VzSGFuZGxlciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdE9wdGlvbnMgZGVmYXVsdCBvcHRpb25zIGZyb20gdGhlIEVkZ2VIYW5kbGVyIGluc3RhbmNlLiBWYWx1ZSBhbmQgcmVmZXJlbmNlIGFyZSBjb25zdGFudFxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgaW1hZ2VsaXN0LCBnbG9iYWxPcHRpb25zLCBkZWZhdWx0T3B0aW9ucykge1xuICAgIGlmIChib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGJvZHkgcHJvdmlkZWRcIik7XG4gICAgfVxuXG4gICAgLy8gU2luY2UgZ2xvYmFsT3B0aW9ucyBpcyBjb25zdGFudCBpbiB2YWx1ZXMgYXMgd2VsbCBhcyByZWZlcmVuY2UsXG4gICAgLy8gRm9sbG93aW5nIG5lZWRzIHRvIGJlIGRvbmUgb25seSBvbmNlLlxuXG4gICAgdGhpcy5vcHRpb25zID0gYnJpZGdlT2JqZWN0KGdsb2JhbE9wdGlvbnMpO1xuICAgIHRoaXMuZ2xvYmFsT3B0aW9ucyA9IGdsb2JhbE9wdGlvbnM7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5pbWFnZWxpc3QgPSBpbWFnZWxpc3Q7XG5cbiAgICAvLyBpbml0aWFsaXplIHZhcmlhYmxlc1xuICAgIHRoaXMuaWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mcm9tSWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50b0lkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhvdmVyID0gZmFsc2U7XG4gICAgdGhpcy5sYWJlbERpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuYmFzZVdpZHRoID0gdGhpcy5vcHRpb25zLndpZHRoO1xuICAgIHRoaXMuYmFzZUZvbnRTaXplID0gdGhpcy5vcHRpb25zLmZvbnQuc2l6ZTtcblxuICAgIHRoaXMuZnJvbSA9IHVuZGVmaW5lZDsgLy8gYSBub2RlXG4gICAgdGhpcy50byA9IHVuZGVmaW5lZDsgLy8gYSBub2RlXG5cbiAgICB0aGlzLmVkZ2VUeXBlID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubGFiZWxNb2R1bGUgPSBuZXcgTGFiZWwoXG4gICAgICB0aGlzLmJvZHksXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0cnVlIC8qIEl0J3MgYW4gZWRnZSBsYWJlbCAqL1xuICAgICk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBvciBvdmVyd3JpdGUgb3B0aW9ucyBmb3IgdGhlIGVkZ2VcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgIGFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAgICogQHJldHVybnMge3VuZGVmaW5lZHxib29sZWFufSB1bmRlZmluZWQgaWYgbm8gb3B0aW9ucywgdHJ1ZSBpZiBsYXlvdXQgYWZmZWN0aW5nIGRhdGEgY2hhbmdlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9sbG93aW5nIG9wdGlvbnMgaWYgY2hhbmdlZCBhZmZlY3QgdGhlIGxheW91dC5cbiAgICBsZXQgYWZmZWN0c0xheW91dCA9XG4gICAgICAodHlwZW9mIG9wdGlvbnMucGh5c2ljcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0aGlzLm9wdGlvbnMucGh5c2ljcyAhPT0gb3B0aW9ucy5waHlzaWNzKSB8fFxuICAgICAgKHR5cGVvZiBvcHRpb25zLmhpZGRlbiAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAodGhpcy5vcHRpb25zLmhpZGRlbiB8fCBmYWxzZSkgIT09IChvcHRpb25zLmhpZGRlbiB8fCBmYWxzZSkpIHx8XG4gICAgICAodHlwZW9mIG9wdGlvbnMuZnJvbSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0aGlzLm9wdGlvbnMuZnJvbSAhPT0gb3B0aW9ucy5mcm9tKSB8fFxuICAgICAgKHR5cGVvZiBvcHRpb25zLnRvICE9PSBcInVuZGVmaW5lZFwiICYmIHRoaXMub3B0aW9ucy50byAhPT0gb3B0aW9ucy50byk7XG5cbiAgICBFZGdlLnBhcnNlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG9wdGlvbnMsIHRydWUsIHRoaXMuZ2xvYmFsT3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucy5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlkID0gb3B0aW9ucy5pZDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZnJvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZyb21JZCA9IG9wdGlvbnMuZnJvbTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy50b0lkID0gb3B0aW9ucy50bztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy50aXRsZSA9IG9wdGlvbnMudGl0bGU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMudmFsdWUgPSBwYXJzZUZsb2F0KG9wdGlvbnMudmFsdWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHBpbGUgPSBbb3B0aW9ucywgdGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zXTtcbiAgICB0aGlzLmNob29zZXIgPSBjaG9vc2lmeShcImVkZ2VcIiwgcGlsZSk7XG5cbiAgICAvLyB1cGRhdGUgbGFiZWwgTW9kdWxlXG4gICAgdGhpcy51cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKTtcblxuICAgIC8vIFVwZGF0ZSBlZGdlIHR5cGUsIHRoaXMgaWYgY2hhbmdlZCBhZmZlY3RzIHRoZSBsYXlvdXQuXG4gICAgYWZmZWN0c0xheW91dCA9IHRoaXMudXBkYXRlRWRnZVR5cGUoKSB8fCBhZmZlY3RzTGF5b3V0O1xuXG4gICAgLy8gaWYgYW55dGhpbmcgaGFzIGJlZW4gdXBkYXRlcywgcmVzZXQgdGhlIHNlbGVjdGlvbiB3aWR0aCBhbmQgdGhlIGhvdmVyIHdpZHRoXG4gICAgdGhpcy5fc2V0SW50ZXJhY3Rpb25XaWR0aHMoKTtcblxuICAgIC8vIEEgbm9kZSBpcyBjb25uZWN0ZWQgd2hlbiBpdCBoYXMgYSBmcm9tIGFuZCB0byBub2RlIHRoYXQgYm90aCBleGlzdCBpbiB0aGUgbmV0d29yay5ib2R5Lm5vZGVzLlxuICAgIHRoaXMuY29ubmVjdCgpO1xuXG4gICAgcmV0dXJuIGFmZmVjdHNMYXlvdXQ7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudE9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld09wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dEZWxldGlvbj1mYWxzZV1cbiAgICogQHBhcmFtIHtvYmplY3R9IFtnbG9iYWxPcHRpb25zPXt9XVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb3B5RnJvbUdsb2JhbHM9ZmFsc2VdXG4gICAqL1xuICBzdGF0aWMgcGFyc2VPcHRpb25zKFxuICAgIHBhcmVudE9wdGlvbnMsXG4gICAgbmV3T3B0aW9ucyxcbiAgICBhbGxvd0RlbGV0aW9uID0gZmFsc2UsXG4gICAgZ2xvYmFsT3B0aW9ucyA9IHt9LFxuICAgIGNvcHlGcm9tR2xvYmFscyA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IGZpZWxkcyA9IFtcbiAgICAgIFwiZW5kUG9pbnRPZmZzZXRcIixcbiAgICAgIFwiYXJyb3dTdHJpa2V0aHJvdWdoXCIsXG4gICAgICBcImlkXCIsXG4gICAgICBcImZyb21cIixcbiAgICAgIFwiaGlkZGVuXCIsXG4gICAgICBcImhvdmVyV2lkdGhcIixcbiAgICAgIFwibGFiZWxIaWdobGlnaHRCb2xkXCIsXG4gICAgICBcImxlbmd0aFwiLFxuICAgICAgXCJsaW5lXCIsXG4gICAgICBcIm9wYWNpdHlcIixcbiAgICAgIFwicGh5c2ljc1wiLFxuICAgICAgXCJzY2FsaW5nXCIsXG4gICAgICBcInNlbGVjdGlvbldpZHRoXCIsXG4gICAgICBcInNlbGZSZWZlcmVuY2VTaXplXCIsXG4gICAgICBcInNlbGZSZWZlcmVuY2VcIixcbiAgICAgIFwidG9cIixcbiAgICAgIFwidGl0bGVcIixcbiAgICAgIFwidmFsdWVcIixcbiAgICAgIFwid2lkdGhcIixcbiAgICAgIFwiZm9udFwiLFxuICAgICAgXCJjaG9zZW5cIixcbiAgICAgIFwid2lkdGhDb25zdHJhaW50XCIsXG4gICAgXTtcblxuICAgIC8vIG9ubHkgZGVlcCBleHRlbmQgdGhlIGl0ZW1zIGluIHRoZSBmaWVsZCBhcnJheS4gVGhlc2UgZG8gbm90IGhhdmUgc2hvcnRoYW5kLlxuICAgIHNlbGVjdGl2ZURlZXBFeHRlbmQoZmllbGRzLCBwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBhbGxvd0RlbGV0aW9uKTtcblxuICAgIC8vIE9ubHkgdXNlIGVuZFBvaW50T2Zmc2V0IHZhbHVlcyAoZnJvbSBhbmQgdG8pIGlmIGl0J3MgdmFsaWQgdmFsdWVzXG4gICAgaWYgKFxuICAgICAgbmV3T3B0aW9ucy5lbmRQb2ludE9mZnNldCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0LmZyb20gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0LmZyb20pKSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbSA9IG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbSA9XG4gICAgICAgICAgZ2xvYmFsT3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZ2xvYmFsT3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tXG4gICAgICAgICAgICA6IDA7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJlbmRQb2ludE9mZnNldC5mcm9tIGlzIG5vdCBhIHZhbGlkIG51bWJlclwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG8gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0LnRvKSkge1xuICAgICAgICBwYXJlbnRPcHRpb25zLmVuZFBvaW50T2Zmc2V0LnRvID0gbmV3T3B0aW9ucy5lbmRQb2ludE9mZnNldC50bztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG8gPVxuICAgICAgICAgIGdsb2JhbE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG8gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBnbG9iYWxPcHRpb25zLmVuZFBvaW50T2Zmc2V0LnRvXG4gICAgICAgICAgICA6IDA7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJlbmRQb2ludE9mZnNldC50byBpcyBub3QgYSB2YWxpZCBudW1iZXJcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSBjb3B5IGxhYmVsIGlmIGl0J3MgYSBsZWdhbCB2YWx1ZS5cbiAgICBpZiAoaXNWYWxpZExhYmVsKG5ld09wdGlvbnMubGFiZWwpKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmxhYmVsID0gbmV3T3B0aW9ucy5sYWJlbDtcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkTGFiZWwocGFyZW50T3B0aW9ucy5sYWJlbCkpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMubGFiZWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbWVyZ2VPcHRpb25zKHBhcmVudE9wdGlvbnMsIG5ld09wdGlvbnMsIFwic21vb3RoXCIsIGdsb2JhbE9wdGlvbnMpO1xuICAgIG1lcmdlT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBcInNoYWRvd1wiLCBnbG9iYWxPcHRpb25zKTtcbiAgICBtZXJnZU9wdGlvbnMocGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgXCJiYWNrZ3JvdW5kXCIsIGdsb2JhbE9wdGlvbnMpO1xuXG4gICAgaWYgKG5ld09wdGlvbnMuZGFzaGVzICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5kYXNoZXMgIT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuZGFzaGVzID0gbmV3T3B0aW9ucy5kYXNoZXM7XG4gICAgfSBlbHNlIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuZGFzaGVzID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmRhc2hlcyA9IE9iamVjdC5jcmVhdGUoZ2xvYmFsT3B0aW9ucy5kYXNoZXMpOyAvLyB0aGlzIHNldHMgdGhlIHBvaW50ZXIgb2YgdGhlIG9wdGlvbiBiYWNrIHRvIHRoZSBnbG9iYWwgb3B0aW9uLlxuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2NhbGluZyBuZXdPcHRpb25zXG4gICAgaWYgKG5ld09wdGlvbnMuc2NhbGluZyAhPT0gdW5kZWZpbmVkICYmIG5ld09wdGlvbnMuc2NhbGluZyAhPT0gbnVsbCkge1xuICAgICAgaWYgKG5ld09wdGlvbnMuc2NhbGluZy5taW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXJlbnRPcHRpb25zLnNjYWxpbmcubWluID0gbmV3T3B0aW9ucy5zY2FsaW5nLm1pbjtcbiAgICAgIH1cbiAgICAgIGlmIChuZXdPcHRpb25zLnNjYWxpbmcubWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5zY2FsaW5nLm1heCA9IG5ld09wdGlvbnMuc2NhbGluZy5tYXg7XG4gICAgICB9XG4gICAgICBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHBhcmVudE9wdGlvbnMuc2NhbGluZyxcbiAgICAgICAgbmV3T3B0aW9ucy5zY2FsaW5nLFxuICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgIGdsb2JhbE9wdGlvbnMuc2NhbGluZ1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUgJiYgbmV3T3B0aW9ucy5zY2FsaW5nID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLnNjYWxpbmcgPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbnMuc2NhbGluZyk7IC8vIHRoaXMgc2V0cyB0aGUgcG9pbnRlciBvZiB0aGUgb3B0aW9uIGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb24uXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIG11bHRpcGxlIGlucHV0IGNhc2VzIGZvciBhcnJvd3NcbiAgICBpZiAobmV3T3B0aW9ucy5hcnJvd3MgIT09IHVuZGVmaW5lZCAmJiBuZXdPcHRpb25zLmFycm93cyAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBuZXdPcHRpb25zLmFycm93cyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBhcnJvd3MgPSBuZXdPcHRpb25zLmFycm93cy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cy50by5lbmFibGVkID0gYXJyb3dzLmluZGV4T2YoXCJ0b1wiKSAhPSAtMTtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5hcnJvd3MubWlkZGxlLmVuYWJsZWQgPSBhcnJvd3MuaW5kZXhPZihcIm1pZGRsZVwiKSAhPSAtMTtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5hcnJvd3MuZnJvbS5lbmFibGVkID0gYXJyb3dzLmluZGV4T2YoXCJmcm9tXCIpICE9IC0xO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmV3T3B0aW9ucy5hcnJvd3MgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgbWVyZ2VPcHRpb25zKFxuICAgICAgICAgIHBhcmVudE9wdGlvbnMuYXJyb3dzLFxuICAgICAgICAgIG5ld09wdGlvbnMuYXJyb3dzLFxuICAgICAgICAgIFwidG9cIixcbiAgICAgICAgICBnbG9iYWxPcHRpb25zLmFycm93c1xuICAgICAgICApO1xuICAgICAgICBtZXJnZU9wdGlvbnMoXG4gICAgICAgICAgcGFyZW50T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgbmV3T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgXCJtaWRkbGVcIixcbiAgICAgICAgICBnbG9iYWxPcHRpb25zLmFycm93c1xuICAgICAgICApO1xuICAgICAgICBtZXJnZU9wdGlvbnMoXG4gICAgICAgICAgcGFyZW50T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgbmV3T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgXCJmcm9tXCIsXG4gICAgICAgICAgZ2xvYmFsT3B0aW9ucy5hcnJvd3NcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRoZSBhcnJvdyBuZXdPcHRpb25zIGNhbiBvbmx5IGJlIGFuIG9iamVjdCBvciBhIHN0cmluZy4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24uIFlvdSB1c2VkOlwiICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG5ld09wdGlvbnMuYXJyb3dzKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWxsb3dEZWxldGlvbiA9PT0gdHJ1ZSAmJiBuZXdPcHRpb25zLmFycm93cyA9PT0gbnVsbCkge1xuICAgICAgcGFyZW50T3B0aW9ucy5hcnJvd3MgPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbnMuYXJyb3dzKTsgLy8gdGhpcyBzZXRzIHRoZSBwb2ludGVyIG9mIHRoZSBvcHRpb24gYmFjayB0byB0aGUgZ2xvYmFsIG9wdGlvbi5cbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbXVsdGlwbGUgaW5wdXQgY2FzZXMgZm9yIGNvbG9yXG4gICAgaWYgKG5ld09wdGlvbnMuY29sb3IgIT09IHVuZGVmaW5lZCAmJiBuZXdPcHRpb25zLmNvbG9yICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmcm9tQ29sb3IgPSBpc1N0cmluZyhuZXdPcHRpb25zLmNvbG9yKVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGNvbG9yOiBuZXdPcHRpb25zLmNvbG9yLFxuICAgICAgICAgICAgaGlnaGxpZ2h0OiBuZXdPcHRpb25zLmNvbG9yLFxuICAgICAgICAgICAgaG92ZXI6IG5ld09wdGlvbnMuY29sb3IsXG4gICAgICAgICAgICBpbmhlcml0OiBmYWxzZSxcbiAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgfVxuICAgICAgICA6IG5ld09wdGlvbnMuY29sb3I7XG4gICAgICBjb25zdCB0b0NvbG9yID0gcGFyZW50T3B0aW9ucy5jb2xvcjtcblxuICAgICAgLy8gSWYgcGFzc2VkLCBmaWxsIGluIHZhbHVlcyBmcm9tIGRlZmF1bHQgb3B0aW9ucyAtIHJlcXVpcmVkIGluIHRoZSBjYXNlIG9mIG5vIHByb3RvdHlwZSBicmlkZ2luZ1xuICAgICAgaWYgKGNvcHlGcm9tR2xvYmFscykge1xuICAgICAgICBkZWVwRXh0ZW5kKHRvQ29sb3IsIGdsb2JhbE9wdGlvbnMuY29sb3IsIGZhbHNlLCBhbGxvd0RlbGV0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENsZWFyIGxvY2FsIHByb3BlcnRpZXMgLSBuZWVkIHRvIGRvIGl0IGxpa2UgdGhpcyBpbiBvcmRlciB0byByZXRhaW4gcHJvdG90eXBlIGJyaWRnZXNcbiAgICAgICAgZm9yIChjb25zdCBpIGluIHRvQ29sb3IpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRvQ29sb3IsIGkpKSB7XG4gICAgICAgICAgICBkZWxldGUgdG9Db2xvcltpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzU3RyaW5nKHRvQ29sb3IpKSB7XG4gICAgICAgIHRvQ29sb3IuY29sb3IgPSB0b0NvbG9yO1xuICAgICAgICB0b0NvbG9yLmhpZ2hsaWdodCA9IHRvQ29sb3I7XG4gICAgICAgIHRvQ29sb3IuaG92ZXIgPSB0b0NvbG9yO1xuICAgICAgICB0b0NvbG9yLmluaGVyaXQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZyb21Db2xvci5vcGFjaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0b0NvbG9yLm9wYWNpdHkgPSAxLjA7IC8vIHNldCBkZWZhdWx0XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb2xvcnNEZWZpbmVkID0gZmFsc2U7XG4gICAgICAgIGlmIChmcm9tQ29sb3IuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3IuY29sb3IgPSBmcm9tQ29sb3IuY29sb3I7XG4gICAgICAgICAgY29sb3JzRGVmaW5lZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyb21Db2xvci5oaWdobGlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3IuaGlnaGxpZ2h0ID0gZnJvbUNvbG9yLmhpZ2hsaWdodDtcbiAgICAgICAgICBjb2xvcnNEZWZpbmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZnJvbUNvbG9yLmhvdmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0b0NvbG9yLmhvdmVyID0gZnJvbUNvbG9yLmhvdmVyO1xuICAgICAgICAgIGNvbG9yc0RlZmluZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tQ29sb3IuaW5oZXJpdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG9Db2xvci5pbmhlcml0ID0gZnJvbUNvbG9yLmluaGVyaXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyb21Db2xvci5vcGFjaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0b0NvbG9yLm9wYWNpdHkgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBmcm9tQ29sb3Iub3BhY2l0eSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbG9yc0RlZmluZWQgPT09IHRydWUpIHtcbiAgICAgICAgICB0b0NvbG9yLmluaGVyaXQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodG9Db2xvci5pbmhlcml0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRvQ29sb3IuaW5oZXJpdCA9IFwiZnJvbVwiOyAvLyBTZXQgZGVmYXVsdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWxsb3dEZWxldGlvbiA9PT0gdHJ1ZSAmJiBuZXdPcHRpb25zLmNvbG9yID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmNvbG9yID0gYnJpZGdlT2JqZWN0KGdsb2JhbE9wdGlvbnMuY29sb3IpOyAvLyBzZXQgdGhlIG9iamVjdCBiYWNrIHRvIHRoZSBnbG9iYWwgb3B0aW9uc1xuICAgIH1cblxuICAgIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuZm9udCA9PT0gbnVsbCkge1xuICAgICAgcGFyZW50T3B0aW9ucy5mb250ID0gYnJpZGdlT2JqZWN0KGdsb2JhbE9wdGlvbnMuZm9udCk7IC8vIHNldCB0aGUgb2JqZWN0IGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb25zXG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdPcHRpb25zLCBcInNlbGZSZWZlcmVuY2VTaXplXCIpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiVGhlIHNlbGZSZWZlcmVuY2VTaXplIHByb3BlcnR5IGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2Ugc2VsZlJlZmVyZW5jZSBwcm9wZXJ0eSBpbnN0ZWFkLiBUaGUgc2VsZlJlZmVyZW5jZSBjYW4gYmUgc2V0IGxpa2UgdGhpc2Ugc2VsZlJlZmVyZW5jZTp7c2l6ZTozMCwgYW5nbGU6TWF0aC5QSSAvIDR9XCJcbiAgICAgICk7XG4gICAgICBwYXJlbnRPcHRpb25zLnNlbGZSZWZlcmVuY2Uuc2l6ZSA9IG5ld09wdGlvbnMuc2VsZlJlZmVyZW5jZVNpemU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJvd09wdGlvbnN9XG4gICAqL1xuICBnZXRGb3JtYXR0aW5nVmFsdWVzKCkge1xuICAgIGNvbnN0IHRvQXJyb3cgPVxuICAgICAgdGhpcy5vcHRpb25zLmFycm93cy50byA9PT0gdHJ1ZSB8fFxuICAgICAgdGhpcy5vcHRpb25zLmFycm93cy50by5lbmFibGVkID09PSB0cnVlO1xuICAgIGNvbnN0IGZyb21BcnJvdyA9XG4gICAgICB0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20gPT09IHRydWUgfHxcbiAgICAgIHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbS5lbmFibGVkID09PSB0cnVlO1xuICAgIGNvbnN0IG1pZGRsZUFycm93ID1cbiAgICAgIHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlID09PSB0cnVlIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuYXJyb3dzLm1pZGRsZS5lbmFibGVkID09PSB0cnVlO1xuICAgIGNvbnN0IGluaGVyaXRzQ29sb3IgPSB0aGlzLm9wdGlvbnMuY29sb3IuaW5oZXJpdDtcbiAgICBjb25zdCB2YWx1ZXMgPSB7XG4gICAgICB0b0Fycm93OiB0b0Fycm93LFxuICAgICAgdG9BcnJvd1NjYWxlOiB0aGlzLm9wdGlvbnMuYXJyb3dzLnRvLnNjYWxlRmFjdG9yLFxuICAgICAgdG9BcnJvd1R5cGU6IHRoaXMub3B0aW9ucy5hcnJvd3MudG8udHlwZSxcbiAgICAgIHRvQXJyb3dTcmM6IHRoaXMub3B0aW9ucy5hcnJvd3MudG8uc3JjLFxuICAgICAgdG9BcnJvd0ltYWdlV2lkdGg6IHRoaXMub3B0aW9ucy5hcnJvd3MudG8uaW1hZ2VXaWR0aCxcbiAgICAgIHRvQXJyb3dJbWFnZUhlaWdodDogdGhpcy5vcHRpb25zLmFycm93cy50by5pbWFnZUhlaWdodCxcbiAgICAgIG1pZGRsZUFycm93OiBtaWRkbGVBcnJvdyxcbiAgICAgIG1pZGRsZUFycm93U2NhbGU6IHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLnNjYWxlRmFjdG9yLFxuICAgICAgbWlkZGxlQXJyb3dUeXBlOiB0aGlzLm9wdGlvbnMuYXJyb3dzLm1pZGRsZS50eXBlLFxuICAgICAgbWlkZGxlQXJyb3dTcmM6IHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLnNyYyxcbiAgICAgIG1pZGRsZUFycm93SW1hZ2VXaWR0aDogdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUuaW1hZ2VXaWR0aCxcbiAgICAgIG1pZGRsZUFycm93SW1hZ2VIZWlnaHQ6IHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLmltYWdlSGVpZ2h0LFxuICAgICAgZnJvbUFycm93OiBmcm9tQXJyb3csXG4gICAgICBmcm9tQXJyb3dTY2FsZTogdGhpcy5vcHRpb25zLmFycm93cy5mcm9tLnNjYWxlRmFjdG9yLFxuICAgICAgZnJvbUFycm93VHlwZTogdGhpcy5vcHRpb25zLmFycm93cy5mcm9tLnR5cGUsXG4gICAgICBmcm9tQXJyb3dTcmM6IHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbS5zcmMsXG4gICAgICBmcm9tQXJyb3dJbWFnZVdpZHRoOiB0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20uaW1hZ2VXaWR0aCxcbiAgICAgIGZyb21BcnJvd0ltYWdlSGVpZ2h0OiB0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20uaW1hZ2VIZWlnaHQsXG4gICAgICBhcnJvd1N0cmlrZXRocm91Z2g6IHRoaXMub3B0aW9ucy5hcnJvd1N0cmlrZXRocm91Z2gsXG4gICAgICBjb2xvcjogaW5oZXJpdHNDb2xvciA/IHVuZGVmaW5lZCA6IHRoaXMub3B0aW9ucy5jb2xvci5jb2xvcixcbiAgICAgIGluaGVyaXRzQ29sb3I6IGluaGVyaXRzQ29sb3IsXG4gICAgICBvcGFjaXR5OiB0aGlzLm9wdGlvbnMuY29sb3Iub3BhY2l0eSxcbiAgICAgIGhpZGRlbjogdGhpcy5vcHRpb25zLmhpZGRlbixcbiAgICAgIGxlbmd0aDogdGhpcy5vcHRpb25zLmxlbmd0aCxcbiAgICAgIHNoYWRvdzogdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkLFxuICAgICAgc2hhZG93Q29sb3I6IHRoaXMub3B0aW9ucy5zaGFkb3cuY29sb3IsXG4gICAgICBzaGFkb3dTaXplOiB0aGlzLm9wdGlvbnMuc2hhZG93LnNpemUsXG4gICAgICBzaGFkb3dYOiB0aGlzLm9wdGlvbnMuc2hhZG93LngsXG4gICAgICBzaGFkb3dZOiB0aGlzLm9wdGlvbnMuc2hhZG93LnksXG4gICAgICBkYXNoZXM6IHRoaXMub3B0aW9ucy5kYXNoZXMsXG4gICAgICB3aWR0aDogdGhpcy5vcHRpb25zLndpZHRoLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy5vcHRpb25zLmJhY2tncm91bmQuZW5hYmxlZCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5vcHRpb25zLmJhY2tncm91bmQuY29sb3IsXG4gICAgICBiYWNrZ3JvdW5kU2l6ZTogdGhpcy5vcHRpb25zLmJhY2tncm91bmQuc2l6ZSxcbiAgICAgIGJhY2tncm91bmREYXNoZXM6IHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kLmRhc2hlcyxcbiAgICB9O1xuICAgIGlmICh0aGlzLnNlbGVjdGVkIHx8IHRoaXMuaG92ZXIpIHtcbiAgICAgIGlmICh0aGlzLmNob29zZXIgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZFdpZHRoID0gdGhpcy5vcHRpb25zLnNlbGVjdGlvbldpZHRoO1xuICAgICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0ZWRXaWR0aCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB2YWx1ZXMud2lkdGggPSBzZWxlY3RlZFdpZHRoKHZhbHVlcy53aWR0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZWN0ZWRXaWR0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdmFsdWVzLndpZHRoICs9IHNlbGVjdGVkV2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlcy53aWR0aCA9IE1hdGgubWF4KHZhbHVlcy53aWR0aCwgMC4zIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGUpO1xuICAgICAgICAgIHZhbHVlcy5jb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQ7XG4gICAgICAgICAgdmFsdWVzLnNoYWRvdyA9IHRoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhvdmVyKSB7XG4gICAgICAgICAgY29uc3QgaG92ZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ob3ZlcldpZHRoO1xuICAgICAgICAgIGlmICh0eXBlb2YgaG92ZXJXaWR0aCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB2YWx1ZXMud2lkdGggPSBob3ZlcldpZHRoKHZhbHVlcy53aWR0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaG92ZXJXaWR0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdmFsdWVzLndpZHRoICs9IGhvdmVyV2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlcy53aWR0aCA9IE1hdGgubWF4KHZhbHVlcy53aWR0aCwgMC4zIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGUpO1xuICAgICAgICAgIHZhbHVlcy5jb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvci5ob3ZlcjtcbiAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNob29zZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLmNob29zZXIodmFsdWVzLCB0aGlzLm9wdGlvbnMuaWQsIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuICAgICAgICBpZiAodmFsdWVzLmNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZXMuaW5oZXJpdHNDb2xvciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZXMuc2hhZG93ID09PSBmYWxzZSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3dDb2xvciAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy5jb2xvciB8fFxuICAgICAgICAgICAgdmFsdWVzLnNoYWRvd1NpemUgIT09IHRoaXMub3B0aW9ucy5zaGFkb3cuc2l6ZSB8fFxuICAgICAgICAgICAgdmFsdWVzLnNoYWRvd1ggIT09IHRoaXMub3B0aW9ucy5zaGFkb3cueCB8fFxuICAgICAgICAgICAgdmFsdWVzLnNoYWRvd1kgIT09IHRoaXMub3B0aW9ucy5zaGFkb3cueVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFsdWVzLnNoYWRvdyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlcy5zaGFkb3cgPSB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQ7XG4gICAgICB2YWx1ZXMud2lkdGggPSBNYXRoLm1heCh2YWx1ZXMud2lkdGgsIDAuMyAvIHRoaXMuYm9keS52aWV3LnNjYWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGUgdGhlIG9wdGlvbnMgaW4gdGhlIGxhYmVsIG1vZHVsZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgdXBkYXRlTGFiZWxNb2R1bGUob3B0aW9ucykge1xuICAgIGNvbnN0IHBpbGUgPSBbXG4gICAgICBvcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgdGhpcy5nbG9iYWxPcHRpb25zLCAvLyBDdXJyZW50bHkgc2V0IGdsb2JhbCBlZGdlIG9wdGlvbnNcbiAgICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMsXG4gICAgXTtcblxuICAgIHRoaXMubGFiZWxNb2R1bGUudXBkYXRlKHRoaXMub3B0aW9ucywgcGlsZSk7XG5cbiAgICBpZiAodGhpcy5sYWJlbE1vZHVsZS5iYXNlU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJhc2VGb250U2l6ZSA9IHRoaXMubGFiZWxNb2R1bGUuYmFzZVNpemU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgZWRnZSB0eXBlLCBzZXQgdGhlIG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICB1cGRhdGVFZGdlVHlwZSgpIHtcbiAgICBjb25zdCBzbW9vdGggPSB0aGlzLm9wdGlvbnMuc21vb3RoO1xuICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGxldCBjaGFuZ2VJblR5cGUgPSB0cnVlO1xuICAgIGlmICh0aGlzLmVkZ2VUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuZWRnZVR5cGUgaW5zdGFuY2VvZiBCZXppZXJFZGdlRHluYW1pYyAmJlxuICAgICAgICAgIHNtb290aC5lbmFibGVkID09PSB0cnVlICYmXG4gICAgICAgICAgc21vb3RoLnR5cGUgPT09IFwiZHluYW1pY1wiKSB8fFxuICAgICAgICAodGhpcy5lZGdlVHlwZSBpbnN0YW5jZW9mIEN1YmljQmV6aWVyRWRnZSAmJlxuICAgICAgICAgIHNtb290aC5lbmFibGVkID09PSB0cnVlICYmXG4gICAgICAgICAgc21vb3RoLnR5cGUgPT09IFwiY3ViaWNCZXppZXJcIikgfHxcbiAgICAgICAgKHRoaXMuZWRnZVR5cGUgaW5zdGFuY2VvZiBCZXppZXJFZGdlU3RhdGljICYmXG4gICAgICAgICAgc21vb3RoLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgICAgICBzbW9vdGgudHlwZSAhPT0gXCJkeW5hbWljXCIgJiZcbiAgICAgICAgICBzbW9vdGgudHlwZSAhPT0gXCJjdWJpY0JlemllclwiKSB8fFxuICAgICAgICAodGhpcy5lZGdlVHlwZSBpbnN0YW5jZW9mIFN0cmFpZ2h0RWRnZSAmJiBzbW9vdGgudHlwZS5lbmFibGVkID09PSBmYWxzZSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VJblR5cGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VJblR5cGUgPT09IHRydWUpIHtcbiAgICAgICAgZGF0YUNoYW5nZWQgPSB0aGlzLmNsZWFudXAoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZUluVHlwZSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHNtb290aC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChzbW9vdGgudHlwZSA9PT0gXCJkeW5hbWljXCIpIHtcbiAgICAgICAgICBkYXRhQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5lZGdlVHlwZSA9IG5ldyBCZXppZXJFZGdlRHluYW1pYyhcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGVcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHNtb290aC50eXBlID09PSBcImN1YmljQmV6aWVyXCIpIHtcbiAgICAgICAgICB0aGlzLmVkZ2VUeXBlID0gbmV3IEN1YmljQmV6aWVyRWRnZShcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGVcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZWRnZVR5cGUgPSBuZXcgQmV6aWVyRWRnZVN0YXRpYyhcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkZ2VUeXBlID0gbmV3IFN0cmFpZ2h0RWRnZShcbiAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgbm90aGluZyBjaGFuZ2VzLCB3ZSBqdXN0IHNldCB0aGUgb3B0aW9ucy5cbiAgICAgIHRoaXMuZWRnZVR5cGUuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YUNoYW5nZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29ubmVjdCBhbiBlZGdlIHRvIGl0cyBub2Rlc1xuICAgKi9cbiAgY29ubmVjdCgpIHtcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcblxuICAgIHRoaXMuZnJvbSA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLmZyb21JZF0gfHwgdW5kZWZpbmVkO1xuICAgIHRoaXMudG8gPSB0aGlzLmJvZHkubm9kZXNbdGhpcy50b0lkXSB8fCB1bmRlZmluZWQ7XG4gICAgdGhpcy5jb25uZWN0ZWQgPSB0aGlzLmZyb20gIT09IHVuZGVmaW5lZCAmJiB0aGlzLnRvICE9PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5jb25uZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZnJvbS5hdHRhY2hFZGdlKHRoaXMpO1xuICAgICAgdGhpcy50by5hdHRhY2hFZGdlKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5mcm9tKSB7XG4gICAgICAgIHRoaXMuZnJvbS5kZXRhY2hFZGdlKHRoaXMpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudG8pIHtcbiAgICAgICAgdGhpcy50by5kZXRhY2hFZGdlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZWRnZVR5cGUuY29ubmVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2Nvbm5lY3QgYW4gZWRnZSBmcm9tIGl0cyBub2Rlc1xuICAgKi9cbiAgZGlzY29ubmVjdCgpIHtcbiAgICBpZiAodGhpcy5mcm9tKSB7XG4gICAgICB0aGlzLmZyb20uZGV0YWNoRWRnZSh0aGlzKTtcbiAgICAgIHRoaXMuZnJvbSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHRoaXMudG8pIHtcbiAgICAgIHRoaXMudG8uZGV0YWNoRWRnZSh0aGlzKTtcbiAgICAgIHRoaXMudG8gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgdGhlIHRpdGxlIG9mIHRoaXMgZWRnZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gdGl0bGUgICAgVGhlIHRpdGxlIG9mIHRoZSBlZGdlLCBvciB1bmRlZmluZWQgd2hlbiBubyB0aXRsZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcyBiZWVuIHNldC5cbiAgICovXG4gIGdldFRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLnRpdGxlO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrIGlmIHRoaXMgbm9kZSBpcyBzZWxlY3RlXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBzZWxlY3RlZCAgIFRydWUgaWYgbm9kZSBpcyBzZWxlY3RlZCwgZWxzZSBmYWxzZVxuICAgKi9cbiAgaXNTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgdmFsdWUgb2YgdGhlIGVkZ2UuIENhbiBiZSB1bmRlZmluZWRcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gdmFsdWVcbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0IHRoZSB2YWx1ZSByYW5nZSBvZiB0aGUgZWRnZS4gVGhlIGVkZ2Ugd2lsbCBhZGp1c3QgaXQncyB3aWR0aFxuICAgKiBiYXNlZCBvbiBpdHMgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heFxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxcbiAgICovXG4gIHNldFZhbHVlUmFuZ2UobWluLCBtYXgsIHRvdGFsKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzY2FsZSA9IHRoaXMub3B0aW9ucy5zY2FsaW5nLmN1c3RvbVNjYWxpbmdGdW5jdGlvbihcbiAgICAgICAgbWluLFxuICAgICAgICBtYXgsXG4gICAgICAgIHRvdGFsLFxuICAgICAgICB0aGlzLm9wdGlvbnMudmFsdWVcbiAgICAgICk7XG4gICAgICBjb25zdCB3aWR0aERpZmYgPSB0aGlzLm9wdGlvbnMuc2NhbGluZy5tYXggLSB0aGlzLm9wdGlvbnMuc2NhbGluZy5taW47XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBmb250RGlmZiA9XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwubWF4IC0gdGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwubWluO1xuICAgICAgICB0aGlzLm9wdGlvbnMuZm9udC5zaXplID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5taW4gKyBzY2FsZSAqIGZvbnREaWZmO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRpb25zLndpZHRoID0gdGhpcy5vcHRpb25zLnNjYWxpbmcubWluICsgc2NhbGUgKiB3aWR0aERpZmY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9ucy53aWR0aCA9IHRoaXMuYmFzZVdpZHRoO1xuICAgICAgdGhpcy5vcHRpb25zLmZvbnQuc2l6ZSA9IHRoaXMuYmFzZUZvbnRTaXplO1xuICAgIH1cblxuICAgIHRoaXMuX3NldEludGVyYWN0aW9uV2lkdGhzKCk7XG4gICAgdGhpcy51cGRhdGVMYWJlbE1vZHVsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0SW50ZXJhY3Rpb25XaWR0aHMoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuaG92ZXJXaWR0aCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLmhvdmVyV2lkdGggPSB0aGlzLm9wdGlvbnMuaG92ZXJXaWR0aCh0aGlzLm9wdGlvbnMud2lkdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLmhvdmVyV2lkdGggPSB0aGlzLm9wdGlvbnMuaG92ZXJXaWR0aCArIHRoaXMub3B0aW9ucy53aWR0aDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uV2lkdGggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5lZGdlVHlwZS5zZWxlY3Rpb25XaWR0aCA9IHRoaXMub3B0aW9ucy5zZWxlY3Rpb25XaWR0aChcbiAgICAgICAgdGhpcy5vcHRpb25zLndpZHRoXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLnNlbGVjdGlvbldpZHRoID1cbiAgICAgICAgdGhpcy5vcHRpb25zLnNlbGVjdGlvbldpZHRoICsgdGhpcy5vcHRpb25zLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgYSBlZGdlXG4gICAqIERyYXcgdGhpcyBlZGdlIGluIHRoZSBnaXZlbiBjYW52YXNcbiAgICogVGhlIDJkIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhcyBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSAgIGN0eFxuICAgKi9cbiAgZHJhdyhjdHgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldEZvcm1hdHRpbmdWYWx1ZXMoKTtcbiAgICBpZiAodmFsdWVzLmhpZGRlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCB0aGUgdmlhIG5vZGUgZnJvbSB0aGUgZWRnZSB0eXBlXG4gICAgY29uc3QgdmlhTm9kZSA9IHRoaXMuZWRnZVR5cGUuZ2V0VmlhTm9kZSgpO1xuXG4gICAgLy8gZHJhdyBsaW5lIGFuZCBsYWJlbFxuICAgIHRoaXMuZWRnZVR5cGUuZHJhd0xpbmUoY3R4LCB2YWx1ZXMsIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIsIHZpYU5vZGUpO1xuICAgIHRoaXMuZHJhd0xhYmVsKGN0eCwgdmlhTm9kZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IGFycm93c1xuICAgKiBEcmF3IHRoaXMgYXJyb3dzIGluIHRoZSBnaXZlbiBjYW52YXNcbiAgICogVGhlIDJkIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhcyBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSAgIGN0eFxuICAgKi9cbiAgZHJhd0Fycm93cyhjdHgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldEZvcm1hdHRpbmdWYWx1ZXMoKTtcbiAgICBpZiAodmFsdWVzLmhpZGRlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCB0aGUgdmlhIG5vZGUgZnJvbSB0aGUgZWRnZSB0eXBlXG4gICAgY29uc3QgdmlhTm9kZSA9IHRoaXMuZWRnZVR5cGUuZ2V0VmlhTm9kZSgpO1xuICAgIGNvbnN0IGFycm93RGF0YSA9IHt9O1xuXG4gICAgLy8gcmVzdG9yZSBlZGdlIHRhcmdldHMgdG8gZGVmYXVsdHNcbiAgICB0aGlzLmVkZ2VUeXBlLmZyb21Qb2ludCA9IHRoaXMuZWRnZVR5cGUuZnJvbTtcbiAgICB0aGlzLmVkZ2VUeXBlLnRvUG9pbnQgPSB0aGlzLmVkZ2VUeXBlLnRvO1xuXG4gICAgLy8gZnJvbSBhbmQgdG8gYXJyb3dzIGdpdmUgYSBkaWZmZXJlbnQgZW5kIHBvaW50IGZvciBlZGdlcy4gd2Ugc2V0IHRoZW0gaGVyZVxuICAgIGlmICh2YWx1ZXMuZnJvbUFycm93KSB7XG4gICAgICBhcnJvd0RhdGEuZnJvbSA9IHRoaXMuZWRnZVR5cGUuZ2V0QXJyb3dEYXRhKFxuICAgICAgICBjdHgsXG4gICAgICAgIFwiZnJvbVwiLFxuICAgICAgICB2aWFOb2RlLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICB2YWx1ZXNcbiAgICAgICk7XG4gICAgICBpZiAodmFsdWVzLmFycm93U3RyaWtldGhyb3VnaCA9PT0gZmFsc2UpXG4gICAgICAgIHRoaXMuZWRnZVR5cGUuZnJvbVBvaW50ID0gYXJyb3dEYXRhLmZyb20uY29yZTtcbiAgICAgIGlmICh2YWx1ZXMuZnJvbUFycm93U3JjKSB7XG4gICAgICAgIGFycm93RGF0YS5mcm9tLmltYWdlID0gdGhpcy5pbWFnZWxpc3QubG9hZCh2YWx1ZXMuZnJvbUFycm93U3JjKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMuZnJvbUFycm93SW1hZ2VXaWR0aCkge1xuICAgICAgICBhcnJvd0RhdGEuZnJvbS5pbWFnZVdpZHRoID0gdmFsdWVzLmZyb21BcnJvd0ltYWdlV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVzLmZyb21BcnJvd0ltYWdlSGVpZ2h0KSB7XG4gICAgICAgIGFycm93RGF0YS5mcm9tLmltYWdlSGVpZ2h0ID0gdmFsdWVzLmZyb21BcnJvd0ltYWdlSGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFsdWVzLnRvQXJyb3cpIHtcbiAgICAgIGFycm93RGF0YS50byA9IHRoaXMuZWRnZVR5cGUuZ2V0QXJyb3dEYXRhKFxuICAgICAgICBjdHgsXG4gICAgICAgIFwidG9cIixcbiAgICAgICAgdmlhTm9kZSxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgdmFsdWVzXG4gICAgICApO1xuICAgICAgaWYgKHZhbHVlcy5hcnJvd1N0cmlrZXRocm91Z2ggPT09IGZhbHNlKVxuICAgICAgICB0aGlzLmVkZ2VUeXBlLnRvUG9pbnQgPSBhcnJvd0RhdGEudG8uY29yZTtcbiAgICAgIGlmICh2YWx1ZXMudG9BcnJvd1NyYykge1xuICAgICAgICBhcnJvd0RhdGEudG8uaW1hZ2UgPSB0aGlzLmltYWdlbGlzdC5sb2FkKHZhbHVlcy50b0Fycm93U3JjKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMudG9BcnJvd0ltYWdlV2lkdGgpIHtcbiAgICAgICAgYXJyb3dEYXRhLnRvLmltYWdlV2lkdGggPSB2YWx1ZXMudG9BcnJvd0ltYWdlV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVzLnRvQXJyb3dJbWFnZUhlaWdodCkge1xuICAgICAgICBhcnJvd0RhdGEudG8uaW1hZ2VIZWlnaHQgPSB2YWx1ZXMudG9BcnJvd0ltYWdlSGVpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoZSBtaWRkbGUgYXJyb3cgZGVwZW5kcyBvbiB0aGUgbGluZSwgd2hpY2ggY2FuIGRlcGVuZCBvbiB0aGUgdG8gYW5kIGZyb20gYXJyb3dzIHNvIHdlIGRvIHRoaXMgb25lIGxhc3RseS5cbiAgICBpZiAodmFsdWVzLm1pZGRsZUFycm93KSB7XG4gICAgICBhcnJvd0RhdGEubWlkZGxlID0gdGhpcy5lZGdlVHlwZS5nZXRBcnJvd0RhdGEoXG4gICAgICAgIGN0eCxcbiAgICAgICAgXCJtaWRkbGVcIixcbiAgICAgICAgdmlhTm9kZSxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgdmFsdWVzXG4gICAgICApO1xuXG4gICAgICBpZiAodmFsdWVzLm1pZGRsZUFycm93U3JjKSB7XG4gICAgICAgIGFycm93RGF0YS5taWRkbGUuaW1hZ2UgPSB0aGlzLmltYWdlbGlzdC5sb2FkKHZhbHVlcy5taWRkbGVBcnJvd1NyYyk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVzLm1pZGRsZUFycm93SW1hZ2VXaWR0aCkge1xuICAgICAgICBhcnJvd0RhdGEubWlkZGxlLmltYWdlV2lkdGggPSB2YWx1ZXMubWlkZGxlQXJyb3dJbWFnZVdpZHRoO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlcy5taWRkbGVBcnJvd0ltYWdlSGVpZ2h0KSB7XG4gICAgICAgIGFycm93RGF0YS5taWRkbGUuaW1hZ2VIZWlnaHQgPSB2YWx1ZXMubWlkZGxlQXJyb3dJbWFnZUhlaWdodDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsdWVzLmZyb21BcnJvdykge1xuICAgICAgdGhpcy5lZGdlVHlwZS5kcmF3QXJyb3dIZWFkKFxuICAgICAgICBjdHgsXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgYXJyb3dEYXRhLmZyb21cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh2YWx1ZXMubWlkZGxlQXJyb3cpIHtcbiAgICAgIHRoaXMuZWRnZVR5cGUuZHJhd0Fycm93SGVhZChcbiAgICAgICAgY3R4LFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgIHRoaXMuaG92ZXIsXG4gICAgICAgIGFycm93RGF0YS5taWRkbGVcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh2YWx1ZXMudG9BcnJvdykge1xuICAgICAgdGhpcy5lZGdlVHlwZS5kcmF3QXJyb3dIZWFkKFxuICAgICAgICBjdHgsXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgYXJyb3dEYXRhLnRvXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Tm9kZX0gdmlhTm9kZVxuICAgKi9cbiAgZHJhd0xhYmVsKGN0eCwgdmlhTm9kZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2V0IHN0eWxlXG4gICAgICBjb25zdCBub2RlMSA9IHRoaXMuZnJvbTtcbiAgICAgIGNvbnN0IG5vZGUyID0gdGhpcy50bztcblxuICAgICAgaWYgKHRoaXMubGFiZWxNb2R1bGUuZGlmZmVyZW50U3RhdGUodGhpcy5zZWxlY3RlZCwgdGhpcy5ob3ZlcikpIHtcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5nZXRUZXh0U2l6ZShjdHgsIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcG9pbnQ7XG4gICAgICBpZiAobm9kZTEuaWQgIT0gbm9kZTIuaWQpIHtcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5wb2ludFRvU2VsZiA9IGZhbHNlO1xuICAgICAgICBwb2ludCA9IHRoaXMuZWRnZVR5cGUuZ2V0UG9pbnQoMC41LCB2aWFOb2RlKTtcbiAgICAgICAgY3R4LnNhdmUoKTtcblxuICAgICAgICBjb25zdCByb3RhdGlvblBvaW50ID0gdGhpcy5fZ2V0Um90YXRpb24oY3R4KTtcbiAgICAgICAgaWYgKHJvdGF0aW9uUG9pbnQuYW5nbGUgIT0gMCkge1xuICAgICAgICAgIGN0eC50cmFuc2xhdGUocm90YXRpb25Qb2ludC54LCByb3RhdGlvblBvaW50LnkpO1xuICAgICAgICAgIGN0eC5yb3RhdGUocm90YXRpb25Qb2ludC5hbmdsZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IHRoZSBsYWJlbFxuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoY3R4LCBwb2ludC54LCBwb2ludC55LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyKTtcblxuICAgICAgICAvKlxuICAgICAgICAvLyBVc2VmdWwgZGVidWcgY29kZTogZHJhdyBhIGJvcmRlciBhcm91bmQgdGhlIGxhYmVsXG4gICAgICAgIC8vIFRoaXMgc2hvdWxkICoqbm90KiogYmUgZW5hYmxlZCBpbiBwcm9kdWN0aW9uIVxuICAgICAgICB2YXIgc2l6ZSA9IHRoaXMubGFiZWxNb2R1bGUuZ2V0U2l6ZSgpOzsgLy8gOzsgaW50ZW50aW9uYWwgc28gbGludCBjYXRjaGVzIGl0XG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IFwiI2ZmMDAwMFwiO1xuICAgICAgICBjdHguc3Ryb2tlUmVjdChzaXplLmxlZnQsIHNpemUudG9wLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7XG4gICAgICAgIC8vIEVuZCAgZGVidWcgY29kZVxuKi9cblxuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBvcmllbnRhdGlvbnMuXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUucG9pbnRUb1NlbGYgPSB0cnVlO1xuXG4gICAgICAgIC8vIGdldCBjaXJjbGUgY29vcmRpbmF0ZXNcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBnZXRTZWxmUmVmQ29vcmRpbmF0ZXMoXG4gICAgICAgICAgY3R4LFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLnNpemUsXG4gICAgICAgICAgbm9kZTFcbiAgICAgICAgKTtcblxuICAgICAgICBwb2ludCA9IHRoaXMuX3BvaW50T25DaXJjbGUoXG4gICAgICAgICAgY29vcmRpbmF0ZXMueCxcbiAgICAgICAgICBjb29yZGluYXRlcy55LFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLnNpemUsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGVcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoY3R4LCBwb2ludC54LCBwb2ludC55LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGFsbCB2aXN1YWwgZWxlbWVudHMgb2YgdGhpcyBlZGdlIGluc3RhbmNlLCBpbiB3aGljaCB0aGUgZ2l2ZW5cbiAgICogcG9pbnQgZmFsbHMgd2l0aGluIHRoZSBib3VuZGluZyBzaGFwZS5cbiAgICpcbiAgICogQHBhcmFtIHtwb2ludH0gcG9pbnRcbiAgICogQHJldHVybnMge0FycmF5LjxlZGdlQ2xpY2tJdGVtfGVkZ2VMYWJlbENsaWNrSXRlbT59IGxpc3Qgd2l0aCB0aGUgaXRlbXMgd2hpY2ggYXJlIG9uIHRoZSBwb2ludFxuICAgKi9cbiAgZ2V0SXRlbXNPblBvaW50KHBvaW50KSB7XG4gICAgY29uc3QgcmV0ID0gW107XG5cbiAgICBpZiAodGhpcy5sYWJlbE1vZHVsZS52aXNpYmxlKCkpIHtcbiAgICAgIGNvbnN0IHJvdGF0aW9uUG9pbnQgPSB0aGlzLl9nZXRSb3RhdGlvbigpO1xuICAgICAgaWYgKHBvaW50SW5SZWN0KHRoaXMubGFiZWxNb2R1bGUuZ2V0U2l6ZSgpLCBwb2ludCwgcm90YXRpb25Qb2ludCkpIHtcbiAgICAgICAgcmV0LnB1c2goeyBlZGdlSWQ6IHRoaXMuaWQsIGxhYmVsSWQ6IDAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgbGVmdDogcG9pbnQueCxcbiAgICAgIHRvcDogcG9pbnQueSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuaXNPdmVybGFwcGluZ1dpdGgob2JqKSkge1xuICAgICAgcmV0LnB1c2goeyBlZGdlSWQ6IHRoaXMuaWQgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIG9iamVjdCBpcyBvdmVybGFwcGluZyB3aXRoIHRoZSBwcm92aWRlZCBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iaiAgIGFuIG9iamVjdCB3aXRoIHBhcmFtZXRlcnMgbGVmdCwgdG9wXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAgICAgVHJ1ZSBpZiBsb2NhdGlvbiBpcyBsb2NhdGVkIG9uIHRoZSBlZGdlXG4gICAqL1xuICBpc092ZXJsYXBwaW5nV2l0aChvYmopIHtcbiAgICBpZiAodGhpcy5jb25uZWN0ZWQpIHtcbiAgICAgIGNvbnN0IGRpc3RNYXggPSAxMDtcbiAgICAgIGNvbnN0IHhGcm9tID0gdGhpcy5mcm9tLng7XG4gICAgICBjb25zdCB5RnJvbSA9IHRoaXMuZnJvbS55O1xuICAgICAgY29uc3QgeFRvID0gdGhpcy50by54O1xuICAgICAgY29uc3QgeVRvID0gdGhpcy50by55O1xuICAgICAgY29uc3QgeE9iaiA9IG9iai5sZWZ0O1xuICAgICAgY29uc3QgeU9iaiA9IG9iai50b3A7XG5cbiAgICAgIGNvbnN0IGRpc3QgPSB0aGlzLmVkZ2VUeXBlLmdldERpc3RhbmNlVG9FZGdlKFxuICAgICAgICB4RnJvbSxcbiAgICAgICAgeUZyb20sXG4gICAgICAgIHhUbyxcbiAgICAgICAgeVRvLFxuICAgICAgICB4T2JqLFxuICAgICAgICB5T2JqXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gZGlzdCA8IGRpc3RNYXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSByb3RhdGlvbiBwb2ludCwgaWYgYW55LlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gW2N0eF0gaWYgcGFzc2VkLCBkbyBhIHJlY2FsY3VsYXRpb24gb2YgdGhlIGxhYmVsIHNpemVcbiAgICogQHJldHVybnMge3JvdGF0aW9uUG9pbnR9IHRoZSBwb2ludCB0byByb3RhdGUgYXJvdW5kIGFuZCB0aGUgYW5nbGUgaW4gcmFkaWFucyB0byByb3RhdGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRSb3RhdGlvbihjdHgpIHtcbiAgICBjb25zdCB2aWFOb2RlID0gdGhpcy5lZGdlVHlwZS5nZXRWaWFOb2RlKCk7XG4gICAgY29uc3QgcG9pbnQgPSB0aGlzLmVkZ2VUeXBlLmdldFBvaW50KDAuNSwgdmlhTm9kZSk7XG5cbiAgICBpZiAoY3R4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubGFiZWxNb2R1bGUuY2FsY3VsYXRlTGFiZWxTaXplKFxuICAgICAgICBjdHgsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgIHRoaXMuaG92ZXIsXG4gICAgICAgIHBvaW50LngsXG4gICAgICAgIHBvaW50LnlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0ge1xuICAgICAgeDogcG9pbnQueCxcbiAgICAgIHk6IHRoaXMubGFiZWxNb2R1bGUuc2l6ZS55TGluZSxcbiAgICAgIGFuZ2xlOiAwLFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMubGFiZWxNb2R1bGUudmlzaWJsZSgpKSB7XG4gICAgICByZXR1cm4gcmV0OyAvLyBEb24ndCBldmVuIGJvdGhlciBkb2luZyB0aGUgYXRhbjIsIHRoZXJlJ3Mgbm90aGluZyB0byBkcmF3XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5mb250LmFsaWduID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgcmV0dXJuIHJldDsgLy8gTm8gbmVlZCB0byBjYWxjdWxhdGUgYW5nbGVcbiAgICB9XG5cbiAgICBjb25zdCBkeSA9IHRoaXMuZnJvbS55IC0gdGhpcy50by55O1xuICAgIGNvbnN0IGR4ID0gdGhpcy5mcm9tLnggLSB0aGlzLnRvLng7XG4gICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMihkeSwgZHgpOyAvLyByYWRpYW5zXG5cbiAgICAvLyByb3RhdGUgc28gdGhhdCBsYWJlbCBpcyByZWFkYWJsZVxuICAgIGlmICgoYW5nbGUgPCAtMSAmJiBkeCA8IDApIHx8IChhbmdsZSA+IDAgJiYgZHggPCAwKSkge1xuICAgICAgYW5nbGUgKz0gTWF0aC5QSTtcbiAgICB9XG4gICAgcmV0LmFuZ2xlID0gYW5nbGU7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHBvaW50IG9uIGEgY2lyY2xlXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IHBvaW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcG9pbnRPbkNpcmNsZSh4LCB5LCByYWRpdXMsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHggKyByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSksXG4gICAgICB5OiB5IC0gcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBzZWxlY3RlZCBzdGF0ZSB0byB0cnVlXG4gICAqL1xuICBzZWxlY3QoKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBzZWxlY3RlZCBzdGF0ZSB0byBmYWxzZVxuICAgKi9cbiAgdW5zZWxlY3QoKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIGNsZWFucyBhbGwgcmVxdWlyZWQgdGhpbmdzIG9uIGRlbGV0ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGNsZWFudXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWRnZVR5cGUuY2xlYW51cCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBlZGdlIGZyb20gdGhlIGxpc3QgYW5kIHBlcmZvcm0gbmVjZXNzYXJ5IGNsZWFudXAuXG4gICAqL1xuICByZW1vdmUoKSB7XG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgdGhpcy5kaXNjb25uZWN0KCk7XG4gICAgZGVsZXRlIHRoaXMuYm9keS5lZGdlc1t0aGlzLmlkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBib3RoIGNvbm5lY3Rpbmcgbm9kZXMgZXhpc3RcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBlbmRQb2ludHNWYWxpZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5ib2R5Lm5vZGVzW3RoaXMuZnJvbUlkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmJvZHkubm9kZXNbdGhpcy50b0lkXSAhPT0gdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFZGdlO1xuIiwgImltcG9ydCB7IGRlZXBFeHRlbmQsIGZvckVhY2ggfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBEYXRhU2V0LCBpc0RhdGFWaWV3TGlrZSB9IGZyb20gXCJ2aXMtZGF0YS9lc25leHRcIjtcbmltcG9ydCBFZGdlIGZyb20gXCIuL2NvbXBvbmVudHMvRWRnZVwiO1xuXG4vKipcbiAqIEhhbmRsZXIgZm9yIEVkZ2VzXG4gKi9cbmNsYXNzIEVkZ2VzSGFuZGxlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0FycmF5LjxJbWFnZT59IGltYWdlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxHcm91cD59IGdyb3Vwc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgaW1hZ2VzLCBncm91cHMpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuaW1hZ2VzID0gaW1hZ2VzO1xuICAgIHRoaXMuZ3JvdXBzID0gZ3JvdXBzO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBlZGdlIEFQSSBpbiB0aGUgYm9keSBjb250YWluZXJcbiAgICB0aGlzLmJvZHkuZnVuY3Rpb25zLmNyZWF0ZUVkZ2UgPSB0aGlzLmNyZWF0ZS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5lZGdlc0xpc3RlbmVycyA9IHtcbiAgICAgIGFkZDogKGV2ZW50LCBwYXJhbXMpID0+IHtcbiAgICAgICAgdGhpcy5hZGQocGFyYW1zLml0ZW1zKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlKHBhcmFtcy5pdGVtcyk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlOiAoZXZlbnQsIHBhcmFtcykgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZShwYXJhbXMuaXRlbXMpO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGFycm93czoge1xuICAgICAgICB0bzogeyBlbmFibGVkOiBmYWxzZSwgc2NhbGVGYWN0b3I6IDEsIHR5cGU6IFwiYXJyb3dcIiB9LCAvLyBib29sZWFuIC8ge2Fycm93U2NhbGVGYWN0b3I6MX0gLyB7ZW5hYmxlZDogZmFsc2UsIGFycm93U2NhbGVGYWN0b3I6MX1cbiAgICAgICAgbWlkZGxlOiB7IGVuYWJsZWQ6IGZhbHNlLCBzY2FsZUZhY3RvcjogMSwgdHlwZTogXCJhcnJvd1wiIH0sXG4gICAgICAgIGZyb206IHsgZW5hYmxlZDogZmFsc2UsIHNjYWxlRmFjdG9yOiAxLCB0eXBlOiBcImFycm93XCIgfSxcbiAgICAgIH0sXG4gICAgICBlbmRQb2ludE9mZnNldDoge1xuICAgICAgICBmcm9tOiAwLFxuICAgICAgICB0bzogMCxcbiAgICAgIH0sXG4gICAgICBhcnJvd1N0cmlrZXRocm91Z2g6IHRydWUsXG4gICAgICBjb2xvcjoge1xuICAgICAgICBjb2xvcjogXCIjODQ4NDg0XCIsXG4gICAgICAgIGhpZ2hsaWdodDogXCIjODQ4NDg0XCIsXG4gICAgICAgIGhvdmVyOiBcIiM4NDg0ODRcIixcbiAgICAgICAgaW5oZXJpdDogXCJmcm9tXCIsXG4gICAgICAgIG9wYWNpdHk6IDEuMCxcbiAgICAgIH0sXG4gICAgICBkYXNoZXM6IGZhbHNlLFxuICAgICAgZm9udDoge1xuICAgICAgICBjb2xvcjogXCIjMzQzNDM0XCIsXG4gICAgICAgIHNpemU6IDE0LCAvLyBweFxuICAgICAgICBmYWNlOiBcImFyaWFsXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwibm9uZVwiLFxuICAgICAgICBzdHJva2VXaWR0aDogMiwgLy8gcHhcbiAgICAgICAgc3Ryb2tlQ29sb3I6IFwiI2ZmZmZmZlwiLFxuICAgICAgICBhbGlnbjogXCJob3Jpem9udGFsXCIsXG4gICAgICAgIG11bHRpOiBmYWxzZSxcbiAgICAgICAgdmFkanVzdDogMCxcbiAgICAgICAgYm9sZDoge1xuICAgICAgICAgIG1vZDogXCJib2xkXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGJvbGRpdGFsOiB7XG4gICAgICAgICAgbW9kOiBcImJvbGQgaXRhbGljXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGl0YWw6IHtcbiAgICAgICAgICBtb2Q6IFwiaXRhbGljXCIsXG4gICAgICAgIH0sXG4gICAgICAgIG1vbm86IHtcbiAgICAgICAgICBtb2Q6IFwiXCIsXG4gICAgICAgICAgc2l6ZTogMTUsIC8vIHB4XG4gICAgICAgICAgZmFjZTogXCJjb3VyaWVyIG5ld1wiLFxuICAgICAgICAgIHZhZGp1c3Q6IDIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgIGhvdmVyV2lkdGg6IDEuNSxcbiAgICAgIGxhYmVsOiB1bmRlZmluZWQsXG4gICAgICBsYWJlbEhpZ2hsaWdodEJvbGQ6IHRydWUsXG4gICAgICBsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgIHBoeXNpY3M6IHRydWUsXG4gICAgICBzY2FsaW5nOiB7XG4gICAgICAgIG1pbjogMSxcbiAgICAgICAgbWF4OiAxNSxcbiAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIG1pbjogMTQsXG4gICAgICAgICAgbWF4OiAzMCxcbiAgICAgICAgICBtYXhWaXNpYmxlOiAzMCxcbiAgICAgICAgICBkcmF3VGhyZXNob2xkOiA1LFxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21TY2FsaW5nRnVuY3Rpb246IGZ1bmN0aW9uIChtaW4sIG1heCwgdG90YWwsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKG1heCA9PT0gbWluKSB7XG4gICAgICAgICAgICByZXR1cm4gMC41O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9IDEgLyAobWF4IC0gbWluKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCAodmFsdWUgLSBtaW4pICogc2NhbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzZWxlY3Rpb25XaWR0aDogMS41LFxuICAgICAgc2VsZlJlZmVyZW5jZToge1xuICAgICAgICBzaXplOiAyMCxcbiAgICAgICAgYW5nbGU6IE1hdGguUEkgLyA0LFxuICAgICAgICByZW5kZXJCZWhpbmRUaGVOb2RlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHNoYWRvdzoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgY29sb3I6IFwicmdiYSgwLDAsMCwwLjUpXCIsXG4gICAgICAgIHNpemU6IDEwLFxuICAgICAgICB4OiA1LFxuICAgICAgICB5OiA1LFxuICAgICAgfSxcbiAgICAgIGJhY2tncm91bmQ6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGNvbG9yOiBcInJnYmEoMTExLDExMSwxMTEsMSlcIixcbiAgICAgICAgc2l6ZTogMTAsXG4gICAgICAgIGRhc2hlczogZmFsc2UsXG4gICAgICB9LFxuICAgICAgc21vb3RoOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6IFwiZHluYW1pY1wiLFxuICAgICAgICBmb3JjZURpcmVjdGlvbjogXCJub25lXCIsXG4gICAgICAgIHJvdW5kbmVzczogMC41LFxuICAgICAgfSxcbiAgICAgIHRpdGxlOiB1bmRlZmluZWQsXG4gICAgICB3aWR0aDogMSxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIGRlZXBFeHRlbmQodGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgLy8gdGhpcyBhbGxvd3MgZXh0ZXJuYWwgbW9kdWxlcyB0byBmb3JjZSBhbGwgZHluYW1pYyBjdXJ2ZXMgdG8gdHVybiBzdGF0aWMuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZm9yY2VEaXNhYmxlRHluYW1pY0N1cnZlc1wiLCAodHlwZSwgZW1pdCA9IHRydWUpID0+IHtcbiAgICAgIGlmICh0eXBlID09PSBcImR5bmFtaWNcIikge1xuICAgICAgICB0eXBlID0gXCJjb250aW51b3VzXCI7XG4gICAgICB9XG4gICAgICBsZXQgZGF0YUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3QgZWRnZUlkIGluIHRoaXMuYm9keS5lZGdlcykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5lZGdlcywgZWRnZUlkKSkge1xuICAgICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgICAgICAgICBjb25zdCBlZGdlRGF0YSA9IHRoaXMuYm9keS5kYXRhLmVkZ2VzLmdldChlZGdlSWQpO1xuXG4gICAgICAgICAgLy8gb25seSBmb3JjaWJseSByZW1vdmUgdGhlIHNtb290aCBjdXJ2ZSBpZiB0aGUgZGF0YSBoYXMgYmVlbiBzZXQgb2YgdGhlIGVkZ2UgaGFzIHRoZSBzbW9vdGggY3VydmVzIGRlZmluZWQuXG4gICAgICAgICAgLy8gdGhpcyBpcyBiZWNhdXNlIGEgY2hhbmdlIGluIHRoZSBnbG9iYWwgd291bGQgbm90IGFmZmVjdCB0aGVzZSBjdXJ2ZXMuXG4gICAgICAgICAgaWYgKGVkZ2VEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNtb290aE9wdGlvbnMgPSBlZGdlRGF0YS5zbW9vdGg7XG4gICAgICAgICAgICBpZiAoc21vb3RoT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzbW9vdGhPcHRpb25zLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgICAgICAgICAgICBzbW9vdGhPcHRpb25zLnR5cGUgPT09IFwiZHluYW1pY1wiXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0T3B0aW9ucyh7IHNtb290aDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0T3B0aW9ucyh7IHNtb290aDogeyB0eXBlOiB0eXBlIH0gfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGFDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGVtaXQgPT09IHRydWUgJiYgZGF0YUNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHRoaXMgaXMgY2FsbGVkIHdoZW4gb3B0aW9ucyBvZiBFWElTVElORyBub2RlcyBvciBlZGdlcyBoYXZlIGNoYW5nZWQuXG4gICAgLy9cbiAgICAvLyBOT1RFOiBOb3QgdHJ1ZSwgY2FsbGVkIHdoZW4gb3B0aW9ucyBoYXZlIE5PVCBjaGFuZ2VkLCBmb3IgYm90aCBleGlzdGluZyBhcyB3ZWxsIGFzIG5ldyBub2Rlcy5cbiAgICAvLyAgICAgICBTZWUgdXBkYXRlKCkgZm9yIGxvZ2ljLlxuICAgIC8vIFRPRE86IFZlcmlmeSBhbmQgZXhhbWluZSB0aGUgY29uc2VxdWVuY2VzIG9mIHRoaXMuIEl0IG1pZ2h0IHN0aWxsIHRyaWdnZXIgd2hlblxuICAgIC8vICAgICAgIG5vbi1vcHRpb24gZmllbGRzIGhhdmUgY2hhbmdlZCwgYnV0IHRoZW4gcmVjb25uZWN0aW5nIGVkZ2VzIGlzIHN0aWxsIHVzZWxlc3MuXG4gICAgLy8gICAgICAgQWx0ZXJuYXRpdmVseSwgaXQgbWlnaHQgYWxzbyBiZSBjYWxsZWQgd2hlbiBlZGdlcyBhcmUgcmVtb3ZlZC5cbiAgICAvL1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFVcGRhdGVkXCIsICgpID0+IHtcbiAgICAgIHRoaXMucmVjb25uZWN0RWRnZXMoKTtcbiAgICB9KTtcblxuICAgIC8vIHJlZnJlc2ggdGhlIGVkZ2VzLiBVc2VkIHdoZW4gcmV2ZXJ0aW5nIGZyb20gaGllcmFyY2hpY2FsIGxheW91dFxuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwicmVmcmVzaEVkZ2VzXCIsIHRoaXMucmVmcmVzaC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInJlZnJlc2hcIiwgdGhpcy5yZWZyZXNoLmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICBmb3JFYWNoKHRoaXMuZWRnZXNMaXN0ZW5lcnMsIChjYWxsYmFjaywgZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYm9keS5kYXRhLmVkZ2VzKSB0aGlzLmJvZHkuZGF0YS5lZGdlcy5vZmYoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgICAgZGVsZXRlIHRoaXMuYm9keS5mdW5jdGlvbnMuY3JlYXRlRWRnZTtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkZ2VzTGlzdGVuZXJzLmFkZDtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkZ2VzTGlzdGVuZXJzLnVwZGF0ZTtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkZ2VzTGlzdGVuZXJzLnJlbW92ZTtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkZ2VzTGlzdGVuZXJzO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB1c2UgdGhlIHBhcnNlciBmcm9tIHRoZSBFZGdlIGNsYXNzIHRvIGZpbGwgaW4gYWxsIHNob3J0aGFuZCBub3RhdGlvbnNcbiAgICAgIEVkZ2UucGFyc2VPcHRpb25zKHRoaXMub3B0aW9ucywgb3B0aW9ucywgdHJ1ZSwgdGhpcy5kZWZhdWx0T3B0aW9ucywgdHJ1ZSk7XG5cbiAgICAgIC8vIHVwZGF0ZSBzbW9vdGggc2V0dGluZ3MgaW4gYWxsIGVkZ2VzXG4gICAgICBsZXQgZGF0YUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgIGlmIChvcHRpb25zLnNtb290aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWRnZUlkIGluIHRoaXMuYm9keS5lZGdlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlSWQpKSB7XG4gICAgICAgICAgICBkYXRhQ2hhbmdlZCA9XG4gICAgICAgICAgICAgIHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdLnVwZGF0ZUVkZ2VUeXBlKCkgfHwgZGF0YUNoYW5nZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSBmb250cyBpbiBhbGwgZWRnZXNcbiAgICAgIGlmIChvcHRpb25zLmZvbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGVkZ2VJZCBpbiB0aGlzLmJvZHkuZWRnZXMpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5lZGdlcywgZWRnZUlkKSkge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0udXBkYXRlTGFiZWxNb2R1bGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgdmFyaWFibGVzIGlmIG5lZWRlZFxuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLmhpZGRlbiAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIG9wdGlvbnMucGh5c2ljcyAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIGRhdGFDaGFuZ2VkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBlZGdlcyBieSByZWFkaW5nIHRoZSBkYXRhIHRhYmxlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBEYXRhU2V0IHwgRGF0YVZpZXd9IGVkZ2VzICAgIFRoZSBkYXRhIGNvbnRhaW5pbmcgdGhlIGVkZ2VzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkb05vdEVtaXQ9ZmFsc2VdIC0gU3VwcHJlc3MgZGF0YSBjaGFuZ2VkIGV2ZW50LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2V0RGF0YShlZGdlcywgZG9Ob3RFbWl0ID0gZmFsc2UpIHtcbiAgICBjb25zdCBvbGRFZGdlc0RhdGEgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcztcblxuICAgIGlmIChpc0RhdGFWaWV3TGlrZShcImlkXCIsIGVkZ2VzKSkge1xuICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMgPSBlZGdlcztcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZWRnZXMpKSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcyA9IG5ldyBEYXRhU2V0KCk7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5hZGQoZWRnZXMpO1xuICAgIH0gZWxzZSBpZiAoIWVkZ2VzKSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcyA9IG5ldyBEYXRhU2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheSBvciBEYXRhU2V0IGV4cGVjdGVkXCIpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGlzIHRoaXMgbnVsbCBvciB1bmRlZmluZWQgb3IgZmFsc2U/XG4gICAgaWYgKG9sZEVkZ2VzRGF0YSkge1xuICAgICAgLy8gdW5zdWJzY3JpYmUgZnJvbSBvbGQgZGF0YXNldFxuICAgICAgZm9yRWFjaCh0aGlzLmVkZ2VzTGlzdGVuZXJzLCAoY2FsbGJhY2ssIGV2ZW50KSA9PiB7XG4gICAgICAgIG9sZEVkZ2VzRGF0YS5vZmYoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSBkcmF3biBlZGdlc1xuICAgIHRoaXMuYm9keS5lZGdlcyA9IHt9O1xuXG4gICAgLy8gVE9ETzogaXMgdGhpcyBudWxsIG9yIHVuZGVmaW5lZCBvciBmYWxzZT9cbiAgICBpZiAodGhpcy5ib2R5LmRhdGEuZWRnZXMpIHtcbiAgICAgIC8vIHN1YnNjcmliZSB0byBuZXcgZGF0YXNldFxuICAgICAgZm9yRWFjaCh0aGlzLmVkZ2VzTGlzdGVuZXJzLCAoY2FsbGJhY2ssIGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzLm9uKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICB9KTtcblxuICAgICAgLy8gZHJhdyBhbGwgbmV3IG5vZGVzXG4gICAgICBjb25zdCBpZHMgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXRJZHMoKTtcbiAgICAgIHRoaXMuYWRkKGlkcywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9hZGp1c3RFZGdlc0ZvckhpZXJhcmNoaWNhbExheW91dFwiKTtcbiAgICBpZiAoZG9Ob3RFbWl0ID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvTm90RW1pdD1mYWxzZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFkZChpZHMsIGRvTm90RW1pdCA9IGZhbHNlKSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgZWRnZXNEYXRhID0gdGhpcy5ib2R5LmRhdGEuZWRnZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG5cbiAgICAgIGNvbnN0IG9sZEVkZ2UgPSBlZGdlc1tpZF07XG4gICAgICBpZiAob2xkRWRnZSkge1xuICAgICAgICBvbGRFZGdlLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IGVkZ2VzRGF0YS5nZXQoaWQsIHsgc2hvd0ludGVybmFsSWRzOiB0cnVlIH0pO1xuICAgICAgZWRnZXNbaWRdID0gdGhpcy5jcmVhdGUoZGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9hZGp1c3RFZGdlc0ZvckhpZXJhcmNoaWNhbExheW91dFwiKTtcblxuICAgIGlmIChkb05vdEVtaXQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZXhpc3RpbmcgZWRnZXMsIG9yIGNyZWF0ZSB0aGVtIHdoZW4gbm90IHlldCBleGlzdGluZ1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgc3RyaW5nW119IGlkc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlKGlkcykge1xuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5ib2R5LmVkZ2VzO1xuICAgIGNvbnN0IGVkZ2VzRGF0YSA9IHRoaXMuYm9keS5kYXRhLmVkZ2VzO1xuICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgIGNvbnN0IGRhdGEgPSBlZGdlc0RhdGEuZ2V0KGlkKTtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tpZF07XG4gICAgICBpZiAoZWRnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBlZGdlXG4gICAgICAgIGVkZ2UuZGlzY29ubmVjdCgpO1xuICAgICAgICBkYXRhQ2hhbmdlZCA9IGVkZ2Uuc2V0T3B0aW9ucyhkYXRhKSB8fCBkYXRhQ2hhbmdlZDsgLy8gaWYgYSBzdXBwb3J0IG5vZGUgaXMgYWRkZWQsIGRhdGEgY2FuIGJlIGNoYW5nZWQuXG4gICAgICAgIGVkZ2UuY29ubmVjdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIGVkZ2VcbiAgICAgICAgdGhpcy5ib2R5LmVkZ2VzW2lkXSA9IHRoaXMuY3JlYXRlKGRhdGEpO1xuICAgICAgICBkYXRhQ2hhbmdlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRhdGFDaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2FkanVzdEVkZ2VzRm9ySGllcmFyY2hpY2FsTGF5b3V0XCIpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhVXBkYXRlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGV4aXN0aW5nIGVkZ2VzLiBOb24gZXhpc3RpbmcgaWRzIHdpbGwgYmUgaWdub3JlZFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgc3RyaW5nW119IGlkc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlbWl0PXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZW1vdmUoaWRzLCBlbWl0ID0gdHJ1ZSkge1xuICAgIGlmIChpZHMubGVuZ3RoID09PSAwKSByZXR1cm47IC8vIGVhcmx5IG91dFxuXG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgZm9yRWFjaChpZHMsIChpZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2lkXTtcbiAgICAgIGlmIChlZGdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWRnZS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChlbWl0KSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgRWRnZSBIYW5kbGVyXG4gICAqL1xuICByZWZyZXNoKCkge1xuICAgIGZvckVhY2godGhpcy5ib2R5LmVkZ2VzLCAoZWRnZSwgZWRnZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0KGVkZ2VJZCk7XG4gICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVkZ2Uuc2V0T3B0aW9ucyhkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyB7RWRnZX1cbiAgICovXG4gIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgcmV0dXJuIG5ldyBFZGdlKFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHRoaXMuYm9keSxcbiAgICAgIHRoaXMuaW1hZ2VzLFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgdGhpcy5kZWZhdWx0T3B0aW9uc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb25uZWN0IGFsbCBlZGdlc1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVjb25uZWN0RWRnZXMoKSB7XG4gICAgbGV0IGlkO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5ib2R5LmVkZ2VzO1xuXG4gICAgZm9yIChpZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlcywgaWQpKSB7XG4gICAgICAgIG5vZGVzW2lkXS5lZGdlcyA9IFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaWQgaW4gZWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZWRnZXMsIGlkKSkge1xuICAgICAgICBjb25zdCBlZGdlID0gZWRnZXNbaWRdO1xuICAgICAgICBlZGdlLmZyb20gPSBudWxsO1xuICAgICAgICBlZGdlLnRvID0gbnVsbDtcbiAgICAgICAgZWRnZS5jb25uZWN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZS5pZH0gZWRnZUlkXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGdldENvbm5lY3RlZE5vZGVzKGVkZ2VJZCkge1xuICAgIGNvbnN0IG5vZGVMaXN0ID0gW107XG4gICAgaWYgKHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgICAgIGlmIChlZGdlLmZyb21JZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGVMaXN0LnB1c2goZWRnZS5mcm9tSWQpO1xuICAgICAgfVxuICAgICAgaWYgKGVkZ2UudG9JZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGVMaXN0LnB1c2goZWRnZS50b0lkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGVMaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZXJlIGlzIG5vIGRpcmVjdCByZWxhdGlvbiBiZXR3ZWVuIHRoZSBub2RlcyBhbmQgdGhlIGVkZ2VzIERhdGFTZXQsXG4gICAqIHNvIHRoZSByaWdodCBwbGFjZSB0byBkbyBjYWxsIHRoaXMgaXMgaW4gdGhlIGhhbmRsZXIgZm9yIGV2ZW50IGBfZGF0YVVwZGF0ZWRgLlxuICAgKi9cbiAgX3VwZGF0ZVN0YXRlKCkge1xuICAgIHRoaXMuX2FkZE1pc3NpbmdFZGdlcygpO1xuICAgIHRoaXMuX3JlbW92ZUludmFsaWRFZGdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjYW4gZm9yIG1pc3Npbmcgbm9kZXMgYW5kIHJlbW92ZSBjb3JyZXNwb25kaW5nIGVkZ2VzLCBpZiBhbnkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVtb3ZlSW52YWxpZEVkZ2VzKCkge1xuICAgIGNvbnN0IGVkZ2VzVG9EZWxldGUgPSBbXTtcblxuICAgIGZvckVhY2godGhpcy5ib2R5LmVkZ2VzLCAoZWRnZSwgaWQpID0+IHtcbiAgICAgIGNvbnN0IHRvTm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tlZGdlLnRvSWRdO1xuICAgICAgY29uc3QgZnJvbU5vZGUgPSB0aGlzLmJvZHkubm9kZXNbZWRnZS5mcm9tSWRdO1xuXG4gICAgICAvLyBTa2lwIGNsdXN0ZXJpbmcgZWRnZXMgaGVyZSwgbGV0IHRoZSBDbHVzdGVyaW5nIG1vZHVsZSBoYW5kbGUgdGhvc2VcbiAgICAgIGlmIChcbiAgICAgICAgKHRvTm9kZSAhPT0gdW5kZWZpbmVkICYmIHRvTm9kZS5pc0NsdXN0ZXIgPT09IHRydWUpIHx8XG4gICAgICAgIChmcm9tTm9kZSAhPT0gdW5kZWZpbmVkICYmIGZyb21Ob2RlLmlzQ2x1c3RlciA9PT0gdHJ1ZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0b05vZGUgPT09IHVuZGVmaW5lZCB8fCBmcm9tTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVkZ2VzVG9EZWxldGUucHVzaChpZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbW92ZShlZGdlc1RvRGVsZXRlLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogYWRkIGFsbCBlZGdlcyBmcm9tIGRhdGFzZXQgdGhhdCBhcmUgbm90IGluIHRoZSBjYWNoZWQgc3RhdGVcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRNaXNzaW5nRWRnZXMoKSB7XG4gICAgY29uc3QgZWRnZXNEYXRhID0gdGhpcy5ib2R5LmRhdGEuZWRnZXM7XG4gICAgaWYgKGVkZ2VzRGF0YSA9PT0gdW5kZWZpbmVkIHx8IGVkZ2VzRGF0YSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuOyAvLyBObyBlZGdlcyBEYXRhU2V0IHlldDsgY2FuIGhhcHBlbiBvbiBzdGFydHVwXG4gICAgfVxuXG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgYWRkSWRzID0gW107XG5cbiAgICBlZGdlc0RhdGEuZm9yRWFjaCgoZWRnZURhdGEsIGVkZ2VJZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2VkZ2VJZF07XG4gICAgICBpZiAoZWRnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFkZElkcy5wdXNoKGVkZ2VJZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZChhZGRJZHMsIHRydWUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkZ2VzSGFuZGxlcjtcbiIsICJpbXBvcnQgeyBBbGVhIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIEJhcm5lcyBIdXQgU29sdmVyXG4gKi9cbmNsYXNzIEJhcm5lc0h1dFNvbHZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge3twaHlzaWNzTm9kZUluZGljZXM6IEFycmF5LCBwaHlzaWNzRWRnZUluZGljZXM6IEFycmF5LCBmb3JjZXM6IHt9LCB2ZWxvY2l0aWVzOiB7fX19IHBoeXNpY3NCb2R5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waHlzaWNzQm9keSA9IHBoeXNpY3NCb2R5O1xuICAgIHRoaXMuYmFybmVzSHV0VHJlZTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgdGhpcy5fcm5nID0gQWxlYShcIkJBUk5FUyBIVVQgU09MVkVSXCIpO1xuXG4gICAgLy8gZGVidWc6IHNob3cgZ3JpZFxuICAgIC8vIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiYWZ0ZXJEcmF3aW5nXCIsIChjdHgpID0+IHt0aGlzLl9kZWJ1ZyhjdHgsJyNmZjAwMDAnKX0pXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy50aGV0YUludmVyc2VkID0gMSAvIHRoaXMub3B0aW9ucy50aGV0YTtcblxuICAgIC8vIGlmIDEgdGhlbiBtaW4gZGlzdGFuY2UgPSAwLjUsIGlmIDAuNSB0aGVuIG1pbiBkaXN0YW5jZSA9IDAuNSArIDAuNSpub2RlLnNoYXBlLnJhZGl1c1xuICAgIHRoaXMub3ZlcmxhcEF2b2lkYW5jZUZhY3RvciA9XG4gICAgICAxIC0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdGhpcy5vcHRpb25zLmF2b2lkT3ZlcmxhcCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgZm9yY2VzIHRoZSBub2RlcyBhcHBseSBvbiBlYWNoIG90aGVyIGJhc2VkIG9uIGEgZ3Jhdml0YXRpb25hbCBtb2RlbC5cbiAgICogVGhlIEJhcm5lcyBIdXQgbWV0aG9kIGlzIHVzZWQgdG8gc3BlZWQgdXAgdGhpcyBOLWJvZHkgc2ltdWxhdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNvbHZlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9ucy5ncmF2aXRhdGlvbmFsQ29uc3RhbnQgIT09IDAgJiZcbiAgICAgIHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGxldCBub2RlO1xuICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzO1xuICAgICAgY29uc3Qgbm9kZUNvdW50ID0gbm9kZUluZGljZXMubGVuZ3RoO1xuXG4gICAgICAvLyBjcmVhdGUgdGhlIHRyZWVcbiAgICAgIGNvbnN0IGJhcm5lc0h1dFRyZWUgPSB0aGlzLl9mb3JtQmFybmVzSHV0VHJlZShub2Rlcywgbm9kZUluZGljZXMpO1xuXG4gICAgICAvLyBmb3IgZGVidWdnaW5nXG4gICAgICB0aGlzLmJhcm5lc0h1dFRyZWUgPSBiYXJuZXNIdXRUcmVlO1xuXG4gICAgICAvLyBwbGFjZSB0aGUgbm9kZXMgb25lIGJ5IG9uZSByZWN1cnNpdmVseVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlQ291bnQ7IGkrKykge1xuICAgICAgICBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgICBpZiAobm9kZS5vcHRpb25zLm1hc3MgPiAwKSB7XG4gICAgICAgICAgLy8gc3RhcnRpbmcgd2l0aCByb290IGlzIGlycmVsZXZhbnQsIGl0IG5ldmVyIHBhc3NlcyB0aGUgQmFybmVzSHV0U29sdmVyIGNvbmRpdGlvblxuICAgICAgICAgIHRoaXMuX2dldEZvcmNlQ29udHJpYnV0aW9ucyhiYXJuZXNIdXRUcmVlLnJvb3QsIG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Rm9yY2VDb250cmlidXRpb25zKHBhcmVudEJyYW5jaCwgbm9kZSkge1xuICAgIHRoaXMuX2dldEZvcmNlQ29udHJpYnV0aW9uKHBhcmVudEJyYW5jaC5jaGlsZHJlbi5OVywgbm9kZSk7XG4gICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb24ocGFyZW50QnJhbmNoLmNoaWxkcmVuLk5FLCBub2RlKTtcbiAgICB0aGlzLl9nZXRGb3JjZUNvbnRyaWJ1dGlvbihwYXJlbnRCcmFuY2guY2hpbGRyZW4uU1csIG5vZGUpO1xuICAgIHRoaXMuX2dldEZvcmNlQ29udHJpYnV0aW9uKHBhcmVudEJyYW5jaC5jaGlsZHJlbi5TRSwgbm9kZSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhlIGJhcm5lc0h1dFRyZWUuIEl0IGNoZWNrcyB3aGVuIGl0IGNhbiBhcHByb3hpbWF0ZSBkaXN0YW50IG5vZGVzIHdpdGggdGhlaXIgY2VudGVyIG9mIG1hc3MuXG4gICAqIElmIGEgcmVnaW9uIGNvbnRhaW5zIGEgc2luZ2xlIG5vZGUsIHdlIGNoZWNrIGlmIGl0IGlzIG5vdCBpdHNlbGYsIHRoZW4gd2UgYXBwbHkgdGhlIGZvcmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEZvcmNlQ29udHJpYnV0aW9uKHBhcmVudEJyYW5jaCwgbm9kZSkge1xuICAgIC8vIHdlIGdldCBubyBmb3JjZSBjb250cmlidXRpb24gZnJvbSBhbiBlbXB0eSByZWdpb25cbiAgICBpZiAocGFyZW50QnJhbmNoLmNoaWxkcmVuQ291bnQgPiAwKSB7XG4gICAgICAvLyBnZXQgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGNlbnRlciBvZiBtYXNzIHRvIHRoZSBub2RlLlxuICAgICAgY29uc3QgZHggPSBwYXJlbnRCcmFuY2guY2VudGVyT2ZNYXNzLnggLSBub2RlLng7XG4gICAgICBjb25zdCBkeSA9IHBhcmVudEJyYW5jaC5jZW50ZXJPZk1hc3MueSAtIG5vZGUueTtcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgICAgLy8gQmFybmVzSHV0U29sdmVyIGNvbmRpdGlvblxuICAgICAgLy8gb3JpZ2luYWwgY29uZGl0aW9uIDogcy9kIDwgdGhldGEgPSBwYXNzZWQgID09PSAgZC9zID4gMS90aGV0YSA9IHBhc3NlZFxuICAgICAgLy8gY2FsY1NpemUgPSAxL3MgLS0+IGQgKiAxL3MgPiAxL3RoZXRhID0gcGFzc2VkXG4gICAgICBpZiAoZGlzdGFuY2UgKiBwYXJlbnRCcmFuY2guY2FsY1NpemUgPiB0aGlzLnRoZXRhSW52ZXJzZWQpIHtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlRm9yY2VzKGRpc3RhbmNlLCBkeCwgZHksIG5vZGUsIHBhcmVudEJyYW5jaCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEaWQgbm90IHBhc3MgdGhlIGNvbmRpdGlvbiwgZ28gaW50byBjaGlsZHJlbiBpZiBhdmFpbGFibGVcbiAgICAgICAgaWYgKHBhcmVudEJyYW5jaC5jaGlsZHJlbkNvdW50ID09PSA0KSB7XG4gICAgICAgICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb25zKHBhcmVudEJyYW5jaCwgbm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcGFyZW50QnJhbmNoIG11c3QgaGF2ZSBvbmx5IG9uZSBub2RlLCBpZiBpdCB3YXMgZW1wdHkgd2Ugd291bGRudCBiZSBoZXJlXG4gICAgICAgICAgaWYgKHBhcmVudEJyYW5jaC5jaGlsZHJlbi5kYXRhLmlkICE9IG5vZGUuaWQpIHtcbiAgICAgICAgICAgIC8vIGlmIGl0IGlzIG5vdCBzZWxmXG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgbm9kZSwgcGFyZW50QnJhbmNoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgYmFzZWQgb24gdGhlIGRpc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IGR4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudEJyYW5jaFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NhbGN1bGF0ZUZvcmNlcyhkaXN0YW5jZSwgZHgsIGR5LCBub2RlLCBwYXJlbnRCcmFuY2gpIHtcbiAgICBpZiAoZGlzdGFuY2UgPT09IDApIHtcbiAgICAgIGRpc3RhbmNlID0gMC4xO1xuICAgICAgZHggPSBkaXN0YW5jZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yIDwgMSAmJiBub2RlLnNoYXBlLnJhZGl1cykge1xuICAgICAgZGlzdGFuY2UgPSBNYXRoLm1heChcbiAgICAgICAgMC4xICsgdGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yICogbm9kZS5zaGFwZS5yYWRpdXMsXG4gICAgICAgIGRpc3RhbmNlIC0gbm9kZS5zaGFwZS5yYWRpdXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGRpdmlkaW5nIGJ5IHRoZSBkaXN0YW5jZSBjdWJlZCBpbnN0ZWFkIG9mIHNxdWFyZWQgYWxsb3dzIHVzIHRvIGdldCB0aGUgZnggYW5kIGZ5IGNvbXBvbmVudHMgd2l0aG91dCBzaW5lcyBhbmQgY29zaW5lc1xuICAgIC8vIGl0IGlzIHNob3J0aGFuZCBmb3IgZ3Jhdml0eWZvcmNlIHdpdGggZGlzdGFuY2Ugc3F1YXJlZCBhbmQgZnggPSBkeC9kaXN0YW5jZSAqIGdyYXZpdHlGb3JjZVxuICAgIGNvbnN0IGdyYXZpdHlGb3JjZSA9XG4gICAgICAodGhpcy5vcHRpb25zLmdyYXZpdGF0aW9uYWxDb25zdGFudCAqXG4gICAgICAgIHBhcmVudEJyYW5jaC5tYXNzICpcbiAgICAgICAgbm9kZS5vcHRpb25zLm1hc3MpIC9cbiAgICAgIE1hdGgucG93KGRpc3RhbmNlLCAzKTtcbiAgICBjb25zdCBmeCA9IGR4ICogZ3Jhdml0eUZvcmNlO1xuICAgIGNvbnN0IGZ5ID0gZHkgKiBncmF2aXR5Rm9yY2U7XG5cbiAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlLmlkXS54ICs9IGZ4O1xuICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUuaWRdLnkgKz0gZnk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjb25zdHJ1Y3RzIHRoZSBiYXJuZXNIdXQgdHJlZSByZWN1cnNpdmVseS4gSXQgY3JlYXRlcyB0aGUgcm9vdCwgc3BsaXRzIGl0IGFuZCBzdGFydHMgcGxhY2luZyB0aGUgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBub2Rlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBub2RlSW5kaWNlc1xuICAgKiBAcmV0dXJucyB7e3Jvb3Q6IHtjZW50ZXJPZk1hc3M6IHt4OiBudW1iZXIsIHk6IG51bWJlcn0sIG1hc3M6IG51bWJlciwgcmFuZ2U6IHttaW5YOiBudW1iZXIsIG1heFg6IG51bWJlciwgbWluWTogbnVtYmVyLCBtYXhZOiBudW1iZXJ9LCBzaXplOiBudW1iZXIsIGNhbGNTaXplOiBudW1iZXIsIGNoaWxkcmVuOiB7ZGF0YTogbnVsbH0sIG1heFdpZHRoOiBudW1iZXIsIGxldmVsOiBudW1iZXIsIGNoaWxkcmVuQ291bnQ6IG51bWJlcn19fSBCYXJuZXNIdXRUcmVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZm9ybUJhcm5lc0h1dFRyZWUobm9kZXMsIG5vZGVJbmRpY2VzKSB7XG4gICAgbGV0IG5vZGU7XG4gICAgY29uc3Qgbm9kZUNvdW50ID0gbm9kZUluZGljZXMubGVuZ3RoO1xuXG4gICAgbGV0IG1pblggPSBub2Rlc1tub2RlSW5kaWNlc1swXV0ueDtcbiAgICBsZXQgbWluWSA9IG5vZGVzW25vZGVJbmRpY2VzWzBdXS55O1xuICAgIGxldCBtYXhYID0gbm9kZXNbbm9kZUluZGljZXNbMF1dLng7XG4gICAgbGV0IG1heFkgPSBub2Rlc1tub2RlSW5kaWNlc1swXV0ueTtcblxuICAgIC8vIGdldCB0aGUgcmFuZ2Ugb2YgdGhlIG5vZGVzXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBub2RlQ291bnQ7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgIGNvbnN0IHggPSBub2RlLng7XG4gICAgICBjb25zdCB5ID0gbm9kZS55O1xuICAgICAgaWYgKG5vZGUub3B0aW9ucy5tYXNzID4gMCkge1xuICAgICAgICBpZiAoeCA8IG1pblgpIHtcbiAgICAgICAgICBtaW5YID0geDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCA+IG1heFgpIHtcbiAgICAgICAgICBtYXhYID0geDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeSA8IG1pblkpIHtcbiAgICAgICAgICBtaW5ZID0geTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeSA+IG1heFkpIHtcbiAgICAgICAgICBtYXhZID0geTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBtYWtlIHRoZSByYW5nZSBhIHNxdWFyZVxuICAgIGNvbnN0IHNpemVEaWZmID0gTWF0aC5hYnMobWF4WCAtIG1pblgpIC0gTWF0aC5hYnMobWF4WSAtIG1pblkpOyAvLyBkaWZmZXJlbmNlIGJldHdlZW4gWCBhbmQgWVxuICAgIGlmIChzaXplRGlmZiA+IDApIHtcbiAgICAgIG1pblkgLT0gMC41ICogc2l6ZURpZmY7XG4gICAgICBtYXhZICs9IDAuNSAqIHNpemVEaWZmO1xuICAgIH0gLy8geFNpemUgPiB5U2l6ZVxuICAgIGVsc2Uge1xuICAgICAgbWluWCArPSAwLjUgKiBzaXplRGlmZjtcbiAgICAgIG1heFggLT0gMC41ICogc2l6ZURpZmY7XG4gICAgfSAvLyB4U2l6ZSA8IHlTaXplXG5cbiAgICBjb25zdCBtaW5pbXVtVHJlZVNpemUgPSAxZS01O1xuICAgIGNvbnN0IHJvb3RTaXplID0gTWF0aC5tYXgobWluaW11bVRyZWVTaXplLCBNYXRoLmFicyhtYXhYIC0gbWluWCkpO1xuICAgIGNvbnN0IGhhbGZSb290U2l6ZSA9IDAuNSAqIHJvb3RTaXplO1xuICAgIGNvbnN0IGNlbnRlclggPSAwLjUgKiAobWluWCArIG1heFgpLFxuICAgICAgY2VudGVyWSA9IDAuNSAqIChtaW5ZICsgbWF4WSk7XG5cbiAgICAvLyBjb25zdHJ1Y3QgdGhlIGJhcm5lc0h1dFRyZWVcbiAgICBjb25zdCBiYXJuZXNIdXRUcmVlID0ge1xuICAgICAgcm9vdDoge1xuICAgICAgICBjZW50ZXJPZk1hc3M6IHsgeDogMCwgeTogMCB9LFxuICAgICAgICBtYXNzOiAwLFxuICAgICAgICByYW5nZToge1xuICAgICAgICAgIG1pblg6IGNlbnRlclggLSBoYWxmUm9vdFNpemUsXG4gICAgICAgICAgbWF4WDogY2VudGVyWCArIGhhbGZSb290U2l6ZSxcbiAgICAgICAgICBtaW5ZOiBjZW50ZXJZIC0gaGFsZlJvb3RTaXplLFxuICAgICAgICAgIG1heFk6IGNlbnRlclkgKyBoYWxmUm9vdFNpemUsXG4gICAgICAgIH0sXG4gICAgICAgIHNpemU6IHJvb3RTaXplLFxuICAgICAgICBjYWxjU2l6ZTogMSAvIHJvb3RTaXplLFxuICAgICAgICBjaGlsZHJlbjogeyBkYXRhOiBudWxsIH0sXG4gICAgICAgIG1heFdpZHRoOiAwLFxuICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgY2hpbGRyZW5Db3VudDogNCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLl9zcGxpdEJyYW5jaChiYXJuZXNIdXRUcmVlLnJvb3QpO1xuXG4gICAgLy8gcGxhY2UgdGhlIG5vZGVzIG9uZSBieSBvbmUgcmVjdXJzaXZlbHlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVDb3VudDsgaSsrKSB7XG4gICAgICBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgaWYgKG5vZGUub3B0aW9ucy5tYXNzID4gMCkge1xuICAgICAgICB0aGlzLl9wbGFjZUluVHJlZShiYXJuZXNIdXRUcmVlLnJvb3QsIG5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG1ha2UgZ2xvYmFsXG4gICAgcmV0dXJuIGJhcm5lc0h1dFRyZWU7XG4gIH1cblxuICAvKipcbiAgICogdGhpcyB1cGRhdGVzIHRoZSBtYXNzIG9mIGEgYnJhbmNoLiB0aGlzIGlzIGluY3JlYXNlZCBieSBhZGRpbmcgYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZUJyYW5jaE1hc3MocGFyZW50QnJhbmNoLCBub2RlKSB7XG4gICAgY29uc3QgY2VudGVyT2ZNYXNzID0gcGFyZW50QnJhbmNoLmNlbnRlck9mTWFzcztcbiAgICBjb25zdCB0b3RhbE1hc3MgPSBwYXJlbnRCcmFuY2gubWFzcyArIG5vZGUub3B0aW9ucy5tYXNzO1xuICAgIGNvbnN0IHRvdGFsTWFzc0ludiA9IDEgLyB0b3RhbE1hc3M7XG5cbiAgICBjZW50ZXJPZk1hc3MueCA9XG4gICAgICBjZW50ZXJPZk1hc3MueCAqIHBhcmVudEJyYW5jaC5tYXNzICsgbm9kZS54ICogbm9kZS5vcHRpb25zLm1hc3M7XG4gICAgY2VudGVyT2ZNYXNzLnggKj0gdG90YWxNYXNzSW52O1xuXG4gICAgY2VudGVyT2ZNYXNzLnkgPVxuICAgICAgY2VudGVyT2ZNYXNzLnkgKiBwYXJlbnRCcmFuY2gubWFzcyArIG5vZGUueSAqIG5vZGUub3B0aW9ucy5tYXNzO1xuICAgIGNlbnRlck9mTWFzcy55ICo9IHRvdGFsTWFzc0ludjtcblxuICAgIHBhcmVudEJyYW5jaC5tYXNzID0gdG90YWxNYXNzO1xuICAgIGNvbnN0IGJpZ2dlc3RTaXplID0gTWF0aC5tYXgoXG4gICAgICBNYXRoLm1heChub2RlLmhlaWdodCwgbm9kZS5yYWRpdXMpLFxuICAgICAgbm9kZS53aWR0aFxuICAgICk7XG4gICAgcGFyZW50QnJhbmNoLm1heFdpZHRoID1cbiAgICAgIHBhcmVudEJyYW5jaC5tYXhXaWR0aCA8IGJpZ2dlc3RTaXplID8gYmlnZ2VzdFNpemUgOiBwYXJlbnRCcmFuY2gubWF4V2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogZGV0ZXJtaW5lIGluIHdoaWNoIGJyYW5jaCB0aGUgbm9kZSB3aWxsIGJlIHBsYWNlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudEJyYW5jaFxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtib29sZWFufSBza2lwTWFzc1VwZGF0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BsYWNlSW5UcmVlKHBhcmVudEJyYW5jaCwgbm9kZSwgc2tpcE1hc3NVcGRhdGUpIHtcbiAgICBpZiAoc2tpcE1hc3NVcGRhdGUgIT0gdHJ1ZSB8fCBza2lwTWFzc1VwZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB1cGRhdGUgdGhlIG1hc3Mgb2YgdGhlIGJyYW5jaC5cbiAgICAgIHRoaXMuX3VwZGF0ZUJyYW5jaE1hc3MocGFyZW50QnJhbmNoLCBub2RlKTtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZSA9IHBhcmVudEJyYW5jaC5jaGlsZHJlbi5OVy5yYW5nZTtcbiAgICBsZXQgcmVnaW9uO1xuICAgIGlmIChyYW5nZS5tYXhYID4gbm9kZS54KSB7XG4gICAgICAvLyBpbiBOVyBvciBTV1xuICAgICAgaWYgKHJhbmdlLm1heFkgPiBub2RlLnkpIHtcbiAgICAgICAgcmVnaW9uID0gXCJOV1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVnaW9uID0gXCJTV1wiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbiBORSBvciBTRVxuICAgICAgaWYgKHJhbmdlLm1heFkgPiBub2RlLnkpIHtcbiAgICAgICAgcmVnaW9uID0gXCJORVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVnaW9uID0gXCJTRVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3BsYWNlSW5SZWdpb24ocGFyZW50QnJhbmNoLCBub2RlLCByZWdpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIGFjdHVhbGx5IHBsYWNlIHRoZSBub2RlIGluIGEgcmVnaW9uIChvciBicmFuY2gpXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7J05XJ3wgJ05FJyB8ICdTVycgfCAnU0UnfSByZWdpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wbGFjZUluUmVnaW9uKHBhcmVudEJyYW5jaCwgbm9kZSwgcmVnaW9uKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnRCcmFuY2guY2hpbGRyZW5bcmVnaW9uXTtcblxuICAgIHN3aXRjaCAoY2hpbGRyZW4uY2hpbGRyZW5Db3VudCkge1xuICAgICAgY2FzZSAwOiAvLyBwbGFjZSBub2RlIGhlcmVcbiAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4uZGF0YSA9IG5vZGU7XG4gICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuQ291bnQgPSAxO1xuICAgICAgICB0aGlzLl91cGRhdGVCcmFuY2hNYXNzKGNoaWxkcmVuLCBub2RlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6IC8vIGNvbnZlcnQgaW50byBjaGlsZHJlblxuICAgICAgICAvLyBpZiB0aGVyZSBhcmUgdHdvIG5vZGVzIGV4YWN0bHkgb3ZlcmxhcHBpbmcgKG9uIGluaXQsIG9uIG9wZW5pbmcgb2YgY2x1c3RlciBldGMuKVxuICAgICAgICAvLyB3ZSBtb3ZlIG9uZSBub2RlIGEgbGl0dGxlIGJpdCBhbmQgd2UgZG8gbm90IHB1dCBpdCBpbiB0aGUgdHJlZS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLmRhdGEueCA9PT0gbm9kZS54ICYmXG4gICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4uZGF0YS55ID09PSBub2RlLnlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbm9kZS54ICs9IHRoaXMuX3JuZygpO1xuICAgICAgICAgIG5vZGUueSArPSB0aGlzLl9ybmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zcGxpdEJyYW5jaChjaGlsZHJlbik7XG4gICAgICAgICAgdGhpcy5fcGxhY2VJblRyZWUoY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA0OiAvLyBwbGFjZSBpbiBicmFuY2hcbiAgICAgICAgdGhpcy5fcGxhY2VJblRyZWUoY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBmdW5jdGlvbiBzcGxpdHMgYSBicmFuY2ggaW50byA0IHN1YiBicmFuY2hlcy4gSWYgdGhlIGJyYW5jaCBjb250YWluZWQgYSBub2RlLCB3ZSBwbGFjZSBpdCBpbiB0aGUgc3ViYnJhbmNoXG4gICAqIGFmdGVyIHRoZSBzcGxpdCBpcyBjb21wbGV0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudEJyYW5jaFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NwbGl0QnJhbmNoKHBhcmVudEJyYW5jaCkge1xuICAgIC8vIGlmIHRoZSBicmFuY2ggaXMgc2hhZGVkIHdpdGggYSBub2RlLCByZXBsYWNlIHRoZSBub2RlIGluIHRoZSBuZXcgc3Vic2V0LlxuICAgIGxldCBjb250YWluZWROb2RlID0gbnVsbDtcbiAgICBpZiAocGFyZW50QnJhbmNoLmNoaWxkcmVuQ291bnQgPT09IDEpIHtcbiAgICAgIGNvbnRhaW5lZE5vZGUgPSBwYXJlbnRCcmFuY2guY2hpbGRyZW4uZGF0YTtcbiAgICAgIHBhcmVudEJyYW5jaC5tYXNzID0gMDtcbiAgICAgIHBhcmVudEJyYW5jaC5jZW50ZXJPZk1hc3MueCA9IDA7XG4gICAgICBwYXJlbnRCcmFuY2guY2VudGVyT2ZNYXNzLnkgPSAwO1xuICAgIH1cbiAgICBwYXJlbnRCcmFuY2guY2hpbGRyZW5Db3VudCA9IDQ7XG4gICAgcGFyZW50QnJhbmNoLmNoaWxkcmVuLmRhdGEgPSBudWxsO1xuICAgIHRoaXMuX2luc2VydFJlZ2lvbihwYXJlbnRCcmFuY2gsIFwiTldcIik7XG4gICAgdGhpcy5faW5zZXJ0UmVnaW9uKHBhcmVudEJyYW5jaCwgXCJORVwiKTtcbiAgICB0aGlzLl9pbnNlcnRSZWdpb24ocGFyZW50QnJhbmNoLCBcIlNXXCIpO1xuICAgIHRoaXMuX2luc2VydFJlZ2lvbihwYXJlbnRCcmFuY2gsIFwiU0VcIik7XG5cbiAgICBpZiAoY29udGFpbmVkTm9kZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9wbGFjZUluVHJlZShwYXJlbnRCcmFuY2gsIGNvbnRhaW5lZE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHN1YmRpdmlkZXMgdGhlIHJlZ2lvbiBpbnRvIGZvdXIgbmV3IHNlZ21lbnRzLlxuICAgKiBTcGVjaWZpY2FsbHksIHRoaXMgaW5zZXJ0cyBhIHNpbmdsZSBuZXcgc2VnbWVudC5cbiAgICogSXQgZmlsbHMgdGhlIGNoaWxkcmVuIHNlY3Rpb24gb2YgdGhlIHBhcmVudEJyYW5jaFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwYXJhbSB7J05XJ3wgJ05FJyB8ICdTVycgfCAnU0UnfSByZWdpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbnNlcnRSZWdpb24ocGFyZW50QnJhbmNoLCByZWdpb24pIHtcbiAgICBsZXQgbWluWCwgbWF4WCwgbWluWSwgbWF4WTtcbiAgICBjb25zdCBjaGlsZFNpemUgPSAwLjUgKiBwYXJlbnRCcmFuY2guc2l6ZTtcbiAgICBzd2l0Y2ggKHJlZ2lvbikge1xuICAgICAgY2FzZSBcIk5XXCI6XG4gICAgICAgIG1pblggPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWDtcbiAgICAgICAgbWF4WCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YICsgY2hpbGRTaXplO1xuICAgICAgICBtaW5ZID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblk7XG4gICAgICAgIG1heFkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWSArIGNoaWxkU2l6ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiTkVcIjpcbiAgICAgICAgbWluWCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YICsgY2hpbGRTaXplO1xuICAgICAgICBtYXhYID0gcGFyZW50QnJhbmNoLnJhbmdlLm1heFg7XG4gICAgICAgIG1pblkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWTtcbiAgICAgICAgbWF4WSA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5ZICsgY2hpbGRTaXplO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJTV1wiOlxuICAgICAgICBtaW5YID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblg7XG4gICAgICAgIG1heFggPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWCArIGNoaWxkU2l6ZTtcbiAgICAgICAgbWluWSA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5ZICsgY2hpbGRTaXplO1xuICAgICAgICBtYXhZID0gcGFyZW50QnJhbmNoLnJhbmdlLm1heFk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlNFXCI6XG4gICAgICAgIG1pblggPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWCArIGNoaWxkU2l6ZTtcbiAgICAgICAgbWF4WCA9IHBhcmVudEJyYW5jaC5yYW5nZS5tYXhYO1xuICAgICAgICBtaW5ZID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblkgKyBjaGlsZFNpemU7XG4gICAgICAgIG1heFkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWF4WTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcGFyZW50QnJhbmNoLmNoaWxkcmVuW3JlZ2lvbl0gPSB7XG4gICAgICBjZW50ZXJPZk1hc3M6IHsgeDogMCwgeTogMCB9LFxuICAgICAgbWFzczogMCxcbiAgICAgIHJhbmdlOiB7IG1pblg6IG1pblgsIG1heFg6IG1heFgsIG1pblk6IG1pblksIG1heFk6IG1heFkgfSxcbiAgICAgIHNpemU6IDAuNSAqIHBhcmVudEJyYW5jaC5zaXplLFxuICAgICAgY2FsY1NpemU6IDIgKiBwYXJlbnRCcmFuY2guY2FsY1NpemUsXG4gICAgICBjaGlsZHJlbjogeyBkYXRhOiBudWxsIH0sXG4gICAgICBtYXhXaWR0aDogMCxcbiAgICAgIGxldmVsOiBwYXJlbnRCcmFuY2gubGV2ZWwgKyAxLFxuICAgICAgY2hpbGRyZW5Db3VudDogMCxcbiAgICB9O1xuICB9XG5cbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFQlVHR0lORyBCRUxPVyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VkLCBpdCBkcmF3cyB0aGUgdHJlZS5cbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZWJ1ZyhjdHgsIGNvbG9yKSB7XG4gICAgaWYgKHRoaXMuYmFybmVzSHV0VHJlZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdHgubGluZVdpZHRoID0gMTtcblxuICAgICAgdGhpcy5fZHJhd0JyYW5jaCh0aGlzLmJhcm5lc0h1dFRyZWUucm9vdCwgY3R4LCBjb2xvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gSXQgZHJhd3MgdGhlIGJyYW5jaGVzIHJlY3Vyc2l2ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYnJhbmNoXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd0JyYW5jaChicmFuY2gsIGN0eCwgY29sb3IpIHtcbiAgICBpZiAoY29sb3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29sb3IgPSBcIiNGRjAwMDBcIjtcbiAgICB9XG5cbiAgICBpZiAoYnJhbmNoLmNoaWxkcmVuQ291bnQgPT09IDQpIHtcbiAgICAgIHRoaXMuX2RyYXdCcmFuY2goYnJhbmNoLmNoaWxkcmVuLk5XLCBjdHgpO1xuICAgICAgdGhpcy5fZHJhd0JyYW5jaChicmFuY2guY2hpbGRyZW4uTkUsIGN0eCk7XG4gICAgICB0aGlzLl9kcmF3QnJhbmNoKGJyYW5jaC5jaGlsZHJlbi5TRSwgY3R4KTtcbiAgICAgIHRoaXMuX2RyYXdCcmFuY2goYnJhbmNoLmNoaWxkcmVuLlNXLCBjdHgpO1xuICAgIH1cbiAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyhicmFuY2gucmFuZ2UubWluWCwgYnJhbmNoLnJhbmdlLm1pblkpO1xuICAgIGN0eC5saW5lVG8oYnJhbmNoLnJhbmdlLm1heFgsIGJyYW5jaC5yYW5nZS5taW5ZKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyhicmFuY2gucmFuZ2UubWF4WCwgYnJhbmNoLnJhbmdlLm1pblkpO1xuICAgIGN0eC5saW5lVG8oYnJhbmNoLnJhbmdlLm1heFgsIGJyYW5jaC5yYW5nZS5tYXhZKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyhicmFuY2gucmFuZ2UubWF4WCwgYnJhbmNoLnJhbmdlLm1heFkpO1xuICAgIGN0eC5saW5lVG8oYnJhbmNoLnJhbmdlLm1pblgsIGJyYW5jaC5yYW5nZS5tYXhZKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyhicmFuY2gucmFuZ2UubWluWCwgYnJhbmNoLnJhbmdlLm1heFkpO1xuICAgIGN0eC5saW5lVG8oYnJhbmNoLnJhbmdlLm1pblgsIGJyYW5jaC5yYW5nZS5taW5ZKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAvKlxuICAgICBpZiAoYnJhbmNoLm1hc3MgPiAwKSB7XG4gICAgIGN0eC5jaXJjbGUoYnJhbmNoLmNlbnRlck9mTWFzcy54LCBicmFuY2guY2VudGVyT2ZNYXNzLnksIDMqYnJhbmNoLm1hc3MpO1xuICAgICBjdHguc3Ryb2tlKCk7XG4gICAgIH1cbiAgICAgKi9cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCYXJuZXNIdXRTb2x2ZXI7XG4iLCAiaW1wb3J0IHsgQWxlYSB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBSZXB1bHNpb24gU29sdmVyXG4gKi9cbmNsYXNzIFJlcHVsc2lvblNvbHZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge3twaHlzaWNzTm9kZUluZGljZXM6IEFycmF5LCBwaHlzaWNzRWRnZUluZGljZXM6IEFycmF5LCBmb3JjZXM6IHt9LCB2ZWxvY2l0aWVzOiB7fX19IHBoeXNpY3NCb2R5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucykge1xuICAgIHRoaXMuX3JuZyA9IEFsZWEoXCJSRVBVTFNJT04gU09MVkVSXCIpO1xuXG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIHRoZSBub2RlcyBhcHBseSBvbiBlYWNoIG90aGVyIGJhc2VkIG9uIGEgcmVwdWxzaW9uIGZpZWxkLlxuICAgKiBUaGlzIGZpZWxkIGlzIGxpbmVhcmx5IGFwcHJveGltYXRlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNvbHZlKCkge1xuICAgIGxldCBkeCwgZHksIGRpc3RhbmNlLCBmeCwgZnksIHJlcHVsc2luZ0ZvcmNlLCBub2RlMSwgbm9kZTI7XG5cbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzO1xuICAgIGNvbnN0IGZvcmNlcyA9IHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzO1xuXG4gICAgLy8gcmVwdWxzaW5nIGZvcmNlcyBiZXR3ZWVuIG5vZGVzXG4gICAgY29uc3Qgbm9kZURpc3RhbmNlID0gdGhpcy5vcHRpb25zLm5vZGVEaXN0YW5jZTtcblxuICAgIC8vIGFwcHJveGltYXRpb24gY29uc3RhbnRzXG4gICAgY29uc3QgYSA9IC0yIC8gMyAvIG5vZGVEaXN0YW5jZTtcbiAgICBjb25zdCBiID0gNCAvIDM7XG5cbiAgICAvLyB3ZSBsb29wIGZyb20gaSBvdmVyIGFsbCBidXQgdGhlIGxhc3QgZW50cmVlIGluIHRoZSBhcnJheVxuICAgIC8vIGogbG9vcHMgZnJvbSBpKzEgdG8gdGhlIGxhc3QuIFRoaXMgd2F5IHdlIGRvIG5vdCBkb3VibGUgY291bnQgYW55IG9mIHRoZSBpbmRpY2VzLCBub3IgaSA9PT0galxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBub2RlMSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIG5vZGUyID0gbm9kZXNbbm9kZUluZGljZXNbal1dO1xuXG4gICAgICAgIGR4ID0gbm9kZTIueCAtIG5vZGUxLng7XG4gICAgICAgIGR5ID0gbm9kZTIueSAtIG5vZGUxLnk7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgICAgICAvLyBzYW1lIGNvbmRpdGlvbiBhcyBCYXJuZXNIdXRTb2x2ZXIsIG1ha2luZyBzdXJlIG5vZGVzIGFyZSBuZXZlciAxMDAlIG92ZXJsYXBwaW5nLlxuICAgICAgICBpZiAoZGlzdGFuY2UgPT09IDApIHtcbiAgICAgICAgICBkaXN0YW5jZSA9IDAuMSAqIHRoaXMuX3JuZygpO1xuICAgICAgICAgIGR4ID0gZGlzdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzdGFuY2UgPCAyICogbm9kZURpc3RhbmNlKSB7XG4gICAgICAgICAgaWYgKGRpc3RhbmNlIDwgMC41ICogbm9kZURpc3RhbmNlKSB7XG4gICAgICAgICAgICByZXB1bHNpbmdGb3JjZSA9IDEuMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVwdWxzaW5nRm9yY2UgPSBhICogZGlzdGFuY2UgKyBiOyAvLyBsaW5lYXIgYXBwcm94IG9mICAxIC8gKDEgKyBNYXRoLmV4cCgoZGlzdGFuY2UgLyBub2RlRGlzdGFuY2UgLSAxKSAqIHN0ZWVwbmVzcykpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID0gcmVwdWxzaW5nRm9yY2UgLyBkaXN0YW5jZTtcblxuICAgICAgICAgIGZ4ID0gZHggKiByZXB1bHNpbmdGb3JjZTtcbiAgICAgICAgICBmeSA9IGR5ICogcmVwdWxzaW5nRm9yY2U7XG5cbiAgICAgICAgICBmb3JjZXNbbm9kZTEuaWRdLnggLT0gZng7XG4gICAgICAgICAgZm9yY2VzW25vZGUxLmlkXS55IC09IGZ5O1xuICAgICAgICAgIGZvcmNlc1tub2RlMi5pZF0ueCArPSBmeDtcbiAgICAgICAgICBmb3JjZXNbbm9kZTIuaWRdLnkgKz0gZnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVwdWxzaW9uU29sdmVyO1xuIiwgIi8qKlxuICogSGllcmFyY2hpY2FsIFJlcHVsc2lvbiBTb2x2ZXJcbiAqL1xuY2xhc3MgSGllcmFyY2hpY2FsUmVwdWxzaW9uU29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMub3ZlcmxhcEF2b2lkYW5jZUZhY3RvciA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKDEsIHRoaXMub3B0aW9ucy5hdm9pZE92ZXJsYXAgfHwgMClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIHRoZSBub2RlcyBhcHBseSBvbiBlYWNoIG90aGVyIGJhc2VkIG9uIGEgcmVwdWxzaW9uIGZpZWxkLlxuICAgKiBUaGlzIGZpZWxkIGlzIGxpbmVhcmx5IGFwcHJveGltYXRlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNvbHZlKCkge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgY29uc3QgZm9yY2VzID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXM7XG5cbiAgICAvLyByZXB1bHNpbmcgZm9yY2VzIGJldHdlZW4gbm9kZXNcbiAgICBjb25zdCBub2RlRGlzdGFuY2UgPSB0aGlzLm9wdGlvbnMubm9kZURpc3RhbmNlO1xuXG4gICAgLy8gd2UgbG9vcCBmcm9tIGkgb3ZlciBhbGwgYnV0IHRoZSBsYXN0IGVudHJlZSBpbiB0aGUgYXJyYXlcbiAgICAvLyBqIGxvb3BzIGZyb20gaSsxIHRvIHRoZSBsYXN0LiBUaGlzIHdheSB3ZSBkbyBub3QgZG91YmxlIGNvdW50IGFueSBvZiB0aGUgaW5kaWNlcywgbm9yIGkgPT09IGpcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZTEgPSBub2Rlc1tub2RlSW5kaWNlc1tpXV07XG4gICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBub2RlSW5kaWNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBub2RlMiA9IG5vZGVzW25vZGVJbmRpY2VzW2pdXTtcblxuICAgICAgICAvLyBub2RlcyBvbmx5IGFmZmVjdCBub2RlcyBvbiB0aGVpciBsZXZlbFxuICAgICAgICBpZiAobm9kZTEubGV2ZWwgPT09IG5vZGUyLmxldmVsKSB7XG4gICAgICAgICAgY29uc3QgdGhlc2VOb2Rlc0Rpc3RhbmNlID1cbiAgICAgICAgICAgIG5vZGVEaXN0YW5jZSArXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXBBdm9pZGFuY2VGYWN0b3IgKlxuICAgICAgICAgICAgICAoKG5vZGUxLnNoYXBlLnJhZGl1cyB8fCAwKSAvIDIgKyAobm9kZTIuc2hhcGUucmFkaXVzIHx8IDApIC8gMik7XG5cbiAgICAgICAgICBjb25zdCBkeCA9IG5vZGUyLnggLSBub2RlMS54O1xuICAgICAgICAgIGNvbnN0IGR5ID0gbm9kZTIueSAtIG5vZGUxLnk7XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICAgICAgY29uc3Qgc3RlZXBuZXNzID0gMC4wNTtcbiAgICAgICAgICBsZXQgcmVwdWxzaW5nRm9yY2U7XG4gICAgICAgICAgaWYgKGRpc3RhbmNlIDwgdGhlc2VOb2Rlc0Rpc3RhbmNlKSB7XG4gICAgICAgICAgICByZXB1bHNpbmdGb3JjZSA9XG4gICAgICAgICAgICAgIC1NYXRoLnBvdyhzdGVlcG5lc3MgKiBkaXN0YW5jZSwgMikgK1xuICAgICAgICAgICAgICBNYXRoLnBvdyhzdGVlcG5lc3MgKiB0aGVzZU5vZGVzRGlzdGFuY2UsIDIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXB1bHNpbmdGb3JjZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG5vcm1hbGl6ZSBmb3JjZSB3aXRoXG4gICAgICAgICAgaWYgKGRpc3RhbmNlICE9PSAwKSB7XG4gICAgICAgICAgICByZXB1bHNpbmdGb3JjZSA9IHJlcHVsc2luZ0ZvcmNlIC8gZGlzdGFuY2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGZ4ID0gZHggKiByZXB1bHNpbmdGb3JjZTtcbiAgICAgICAgICBjb25zdCBmeSA9IGR5ICogcmVwdWxzaW5nRm9yY2U7XG5cbiAgICAgICAgICBmb3JjZXNbbm9kZTEuaWRdLnggLT0gZng7XG4gICAgICAgICAgZm9yY2VzW25vZGUxLmlkXS55IC09IGZ5O1xuICAgICAgICAgIGZvcmNlc1tub2RlMi5pZF0ueCArPSBmeDtcbiAgICAgICAgICBmb3JjZXNbbm9kZTIuaWRdLnkgKz0gZnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGllcmFyY2hpY2FsUmVwdWxzaW9uU29sdmVyO1xuIiwgIi8qKlxuICogU3ByaW5nIFNvbHZlclxuICovXG5jbGFzcyBTcHJpbmdTb2x2ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHt7cGh5c2ljc05vZGVJbmRpY2VzOiBBcnJheSwgcGh5c2ljc0VkZ2VJbmRpY2VzOiBBcnJheSwgZm9yY2VzOiB7fSwgdmVsb2NpdGllczoge319fSBwaHlzaWNzQm9keVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucGh5c2ljc0JvZHkgPSBwaHlzaWNzQm9keTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBzcHJpbmdmb3JjZXMgb24gdGhlIG5vZGVzLCBhY2NvdW50aW5nIGZvciB0aGUgc3VwcG9ydCBub2Rlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNvbHZlKCkge1xuICAgIGxldCBlZGdlTGVuZ3RoLCBlZGdlO1xuICAgIGNvbnN0IGVkZ2VJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzRWRnZUluZGljZXM7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgbGV0IG5vZGUxLCBub2RlMiwgbm9kZTM7XG5cbiAgICAvLyBmb3JjZXMgY2F1c2VkIGJ5IHRoZSBlZGdlcywgbW9kZWxsZWQgYXMgc3ByaW5nc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVkZ2UgPSBlZGdlc1tlZGdlSW5kaWNlc1tpXV07XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQgPT09IHRydWUgJiYgZWRnZS50b0lkICE9PSBlZGdlLmZyb21JZCkge1xuICAgICAgICAvLyBvbmx5IGNhbGN1bGF0ZSBmb3JjZXMgaWYgbm9kZXMgYXJlIGluIHRoZSBzYW1lIHNlY3RvclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW2VkZ2UudG9JZF0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tlZGdlLmZyb21JZF0gIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoZWRnZS5lZGdlVHlwZS52aWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZWRnZUxlbmd0aCA9XG4gICAgICAgICAgICAgIGVkZ2Uub3B0aW9ucy5sZW5ndGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gdGhpcy5vcHRpb25zLnNwcmluZ0xlbmd0aFxuICAgICAgICAgICAgICAgIDogZWRnZS5vcHRpb25zLmxlbmd0aDtcbiAgICAgICAgICAgIG5vZGUxID0gZWRnZS50bztcbiAgICAgICAgICAgIG5vZGUyID0gZWRnZS5lZGdlVHlwZS52aWE7XG4gICAgICAgICAgICBub2RlMyA9IGVkZ2UuZnJvbTtcblxuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlU3ByaW5nRm9yY2Uobm9kZTEsIG5vZGUyLCAwLjUgKiBlZGdlTGVuZ3RoKTtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNwcmluZ0ZvcmNlKG5vZGUyLCBub2RlMywgMC41ICogZWRnZUxlbmd0aCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoZSAqIDEuNSBpcyBoZXJlIHNvIHRoZSBlZGdlIGxvb2tzIGFzIGxhcmdlIGFzIGEgc21vb3RoIGVkZ2UuIEl0IGRvZXMgbm90IGluaXRpYWxseSBiZWNhdXNlIHRoZSBzbW9vdGggZWRnZXMgdXNlXG4gICAgICAgICAgICAvLyB0aGUgc3VwcG9ydCBub2RlcyB3aGljaCBleGVydCBhIHJlcHVsc2l2ZSBmb3JjZSBvbiB0aGUgdG8gYW5kIGZyb20gbm9kZXMsIG1ha2luZyB0aGUgZWRnZSBhcHBlYXIgbGFyZ2VyLlxuICAgICAgICAgICAgZWRnZUxlbmd0aCA9XG4gICAgICAgICAgICAgIGVkZ2Uub3B0aW9ucy5sZW5ndGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gdGhpcy5vcHRpb25zLnNwcmluZ0xlbmd0aCAqIDEuNVxuICAgICAgICAgICAgICAgIDogZWRnZS5vcHRpb25zLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNwcmluZ0ZvcmNlKGVkZ2UuZnJvbSwgZWRnZS50bywgZWRnZUxlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIGNvZGUgYWN0dWFsbHkgcGVyZm9ybWluZyB0aGUgY2FsY3VsYXRpb24gZm9yIHRoZSBmdW5jdGlvbiBhYm92ZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlMVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlZGdlTGVuZ3RoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2FsY3VsYXRlU3ByaW5nRm9yY2Uobm9kZTEsIG5vZGUyLCBlZGdlTGVuZ3RoKSB7XG4gICAgY29uc3QgZHggPSBub2RlMS54IC0gbm9kZTIueDtcbiAgICBjb25zdCBkeSA9IG5vZGUxLnkgLSBub2RlMi55O1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5tYXgoTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KSwgMC4wMSk7XG5cbiAgICAvLyB0aGUgMS9kaXN0YW5jZSBpcyBzbyB0aGUgZnggYW5kIGZ5IGNhbiBiZSBjYWxjdWxhdGVkIHdpdGhvdXQgc2luZSBvciBjb3NpbmUuXG4gICAgY29uc3Qgc3ByaW5nRm9yY2UgPVxuICAgICAgKHRoaXMub3B0aW9ucy5zcHJpbmdDb25zdGFudCAqIChlZGdlTGVuZ3RoIC0gZGlzdGFuY2UpKSAvIGRpc3RhbmNlO1xuXG4gICAgY29uc3QgZnggPSBkeCAqIHNwcmluZ0ZvcmNlO1xuICAgIGNvbnN0IGZ5ID0gZHkgKiBzcHJpbmdGb3JjZTtcblxuICAgIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBvbmUgbm9kZSBpcyBub3QgcGFydCBvZiB0aGUgcGh5c2Npc1xuICAgIGlmICh0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMS5pZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZTEuaWRdLnggKz0gZng7XG4gICAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMS5pZF0ueSArPSBmeTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZTIuaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUyLmlkXS54IC09IGZ4O1xuICAgICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZTIuaWRdLnkgLT0gZnk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNwcmluZ1NvbHZlcjtcbiIsICIvKipcbiAqIEhpZXJhcmNoaWNhbCBTcHJpbmcgU29sdmVyXG4gKi9cbmNsYXNzIEhpZXJhcmNoaWNhbFNwcmluZ1NvbHZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge3twaHlzaWNzTm9kZUluZGljZXM6IEFycmF5LCBwaHlzaWNzRWRnZUluZGljZXM6IEFycmF5LCBmb3JjZXM6IHt9LCB2ZWxvY2l0aWVzOiB7fX19IHBoeXNpY3NCb2R5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waHlzaWNzQm9keSA9IHBoeXNpY3NCb2R5O1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHNwcmluZ2ZvcmNlcyBvbiB0aGUgbm9kZXMsIGFjY291bnRpbmcgZm9yIHRoZSBzdXBwb3J0IG5vZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgbGV0IGVkZ2VMZW5ndGgsIGVkZ2U7XG4gICAgbGV0IGR4LCBkeSwgZngsIGZ5LCBzcHJpbmdGb3JjZSwgZGlzdGFuY2U7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgZmFjdG9yID0gMC41O1xuXG4gICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NFZGdlSW5kaWNlcztcbiAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzO1xuICAgIGNvbnN0IGZvcmNlcyA9IHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgc3ByaW5nIGZvcmNlIGNvdW50ZXJzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gbm9kZUluZGljZXNbaV07XG4gICAgICBmb3JjZXNbbm9kZUlkXS5zcHJpbmdGeCA9IDA7XG4gICAgICBmb3JjZXNbbm9kZUlkXS5zcHJpbmdGeSA9IDA7XG4gICAgfVxuXG4gICAgLy8gZm9yY2VzIGNhdXNlZCBieSB0aGUgZWRnZXMsIG1vZGVsbGVkIGFzIHNwcmluZ3NcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlZGdlID0gZWRnZXNbZWRnZUluZGljZXNbaV1dO1xuICAgICAgaWYgKGVkZ2UuY29ubmVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgIGVkZ2VMZW5ndGggPVxuICAgICAgICAgIGVkZ2Uub3B0aW9ucy5sZW5ndGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLm9wdGlvbnMuc3ByaW5nTGVuZ3RoXG4gICAgICAgICAgICA6IGVkZ2Uub3B0aW9ucy5sZW5ndGg7XG5cbiAgICAgICAgZHggPSBlZGdlLmZyb20ueCAtIGVkZ2UudG8ueDtcbiAgICAgICAgZHkgPSBlZGdlLmZyb20ueSAtIGVkZ2UudG8ueTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICAgICAgICBkaXN0YW5jZSA9IGRpc3RhbmNlID09PSAwID8gMC4wMSA6IGRpc3RhbmNlO1xuXG4gICAgICAgIC8vIHRoZSAxL2Rpc3RhbmNlIGlzIHNvIHRoZSBmeCBhbmQgZnkgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBzaW5lIG9yIGNvc2luZS5cbiAgICAgICAgc3ByaW5nRm9yY2UgPVxuICAgICAgICAgICh0aGlzLm9wdGlvbnMuc3ByaW5nQ29uc3RhbnQgKiAoZWRnZUxlbmd0aCAtIGRpc3RhbmNlKSkgLyBkaXN0YW5jZTtcblxuICAgICAgICBmeCA9IGR4ICogc3ByaW5nRm9yY2U7XG4gICAgICAgIGZ5ID0gZHkgKiBzcHJpbmdGb3JjZTtcblxuICAgICAgICBpZiAoZWRnZS50by5sZXZlbCAhPSBlZGdlLmZyb20ubGV2ZWwpIHtcbiAgICAgICAgICBpZiAoZm9yY2VzW2VkZ2UudG9JZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9yY2VzW2VkZ2UudG9JZF0uc3ByaW5nRnggLT0gZng7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS50b0lkXS5zcHJpbmdGeSAtPSBmeTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZvcmNlc1tlZGdlLmZyb21JZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9yY2VzW2VkZ2UuZnJvbUlkXS5zcHJpbmdGeCArPSBmeDtcbiAgICAgICAgICAgIGZvcmNlc1tlZGdlLmZyb21JZF0uc3ByaW5nRnkgKz0gZnk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmb3JjZXNbZWRnZS50b0lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS50b0lkXS54IC09IGZhY3RvciAqIGZ4O1xuICAgICAgICAgICAgZm9yY2VzW2VkZ2UudG9JZF0ueSAtPSBmYWN0b3IgKiBmeTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZvcmNlc1tlZGdlLmZyb21JZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9yY2VzW2VkZ2UuZnJvbUlkXS54ICs9IGZhY3RvciAqIGZ4O1xuICAgICAgICAgICAgZm9yY2VzW2VkZ2UuZnJvbUlkXS55ICs9IGZhY3RvciAqIGZ5O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vcm1hbGl6ZSBzcHJpbmcgZm9yY2VzXG4gICAgc3ByaW5nRm9yY2UgPSAxO1xuICAgIGxldCBzcHJpbmdGeCwgc3ByaW5nRnk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gbm9kZUluZGljZXNbaV07XG4gICAgICBzcHJpbmdGeCA9IE1hdGgubWluKFxuICAgICAgICBzcHJpbmdGb3JjZSxcbiAgICAgICAgTWF0aC5tYXgoLXNwcmluZ0ZvcmNlLCBmb3JjZXNbbm9kZUlkXS5zcHJpbmdGeClcbiAgICAgICk7XG4gICAgICBzcHJpbmdGeSA9IE1hdGgubWluKFxuICAgICAgICBzcHJpbmdGb3JjZSxcbiAgICAgICAgTWF0aC5tYXgoLXNwcmluZ0ZvcmNlLCBmb3JjZXNbbm9kZUlkXS5zcHJpbmdGeSlcbiAgICAgICk7XG5cbiAgICAgIGZvcmNlc1tub2RlSWRdLnggKz0gc3ByaW5nRng7XG4gICAgICBmb3JjZXNbbm9kZUlkXS55ICs9IHNwcmluZ0Z5O1xuICAgIH1cblxuICAgIC8vIHJldGFpbiBlbmVyZ3kgYmFsYW5jZVxuICAgIGxldCB0b3RhbEZ4ID0gMDtcbiAgICBsZXQgdG90YWxGeSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gbm9kZUluZGljZXNbaV07XG4gICAgICB0b3RhbEZ4ICs9IGZvcmNlc1tub2RlSWRdLng7XG4gICAgICB0b3RhbEZ5ICs9IGZvcmNlc1tub2RlSWRdLnk7XG4gICAgfVxuICAgIGNvbnN0IGNvcnJlY3Rpb25GeCA9IHRvdGFsRnggLyBub2RlSW5kaWNlcy5sZW5ndGg7XG4gICAgY29uc3QgY29ycmVjdGlvbkZ5ID0gdG90YWxGeSAvIG5vZGVJbmRpY2VzLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IG5vZGVJbmRpY2VzW2ldO1xuICAgICAgZm9yY2VzW25vZGVJZF0ueCAtPSBjb3JyZWN0aW9uRng7XG4gICAgICBmb3JjZXNbbm9kZUlkXS55IC09IGNvcnJlY3Rpb25GeTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyO1xuIiwgIi8qKlxuICogQ2VudHJhbCBHcmF2aXR5IFNvbHZlclxuICovXG5jbGFzcyBDZW50cmFsR3Jhdml0eVNvbHZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge3twaHlzaWNzTm9kZUluZGljZXM6IEFycmF5LCBwaHlzaWNzRWRnZUluZGljZXM6IEFycmF5LCBmb3JjZXM6IHt9LCB2ZWxvY2l0aWVzOiB7fX19IHBoeXNpY3NCb2R5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waHlzaWNzQm9keSA9IHBoeXNpY3NCb2R5O1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGZvcmNlcyBmb3IgZWFjaCBub2RlXG4gICAqL1xuICBzb2x2ZSgpIHtcbiAgICBsZXQgZHgsIGR5LCBkaXN0YW5jZSwgbm9kZTtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzO1xuICAgIGNvbnN0IGZvcmNlcyA9IHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gbm9kZUluZGljZXNbaV07XG4gICAgICBub2RlID0gbm9kZXNbbm9kZUlkXTtcbiAgICAgIGR4ID0gLW5vZGUueDtcbiAgICAgIGR5ID0gLW5vZGUueTtcbiAgICAgIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgICAgdGhpcy5fY2FsY3VsYXRlRm9yY2VzKGRpc3RhbmNlLCBkeCwgZHksIGZvcmNlcywgbm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIGJhc2VkIG9uIHRoZSBkaXN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeFxuICAgKiBAcGFyYW0ge251bWJlcn0gZHlcbiAgICogQHBhcmFtIHtPYmplY3Q8Tm9kZS5pZCwgdmlzLk5vZGU+fSBmb3JjZXNcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2FsY3VsYXRlRm9yY2VzKGRpc3RhbmNlLCBkeCwgZHksIGZvcmNlcywgbm9kZSkge1xuICAgIGNvbnN0IGdyYXZpdHlGb3JjZSA9XG4gICAgICBkaXN0YW5jZSA9PT0gMCA/IDAgOiB0aGlzLm9wdGlvbnMuY2VudHJhbEdyYXZpdHkgLyBkaXN0YW5jZTtcbiAgICBmb3JjZXNbbm9kZS5pZF0ueCA9IGR4ICogZ3Jhdml0eUZvcmNlO1xuICAgIGZvcmNlc1tub2RlLmlkXS55ID0gZHkgKiBncmF2aXR5Rm9yY2U7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2VudHJhbEdyYXZpdHlTb2x2ZXI7XG4iLCAiaW1wb3J0IEJhcm5lc0h1dFNvbHZlciBmcm9tIFwiLi9CYXJuZXNIdXRTb2x2ZXJcIjtcbmltcG9ydCB7IEFsZWEgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogQGF1Z21lbnRzIEJhcm5lc0h1dFNvbHZlclxuICovXG5jbGFzcyBGb3JjZUF0bGFzMkJhc2VkUmVwdWxzaW9uU29sdmVyIGV4dGVuZHMgQmFybmVzSHV0U29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fcm5nID0gQWxlYShcIkZPUkNFIEFUTEFTIDIgQkFTRUQgUkVQVUxTSU9OIFNPTFZFUlwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGZvcmNlcyBiYXNlZCBvbiB0aGUgZGlzdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxuICAgKiBAcGFyYW0ge251bWJlcn0gZHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGR5XG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2FsY3VsYXRlRm9yY2VzKGRpc3RhbmNlLCBkeCwgZHksIG5vZGUsIHBhcmVudEJyYW5jaCkge1xuICAgIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuICAgICAgZGlzdGFuY2UgPSAwLjEgKiB0aGlzLl9ybmcoKTtcbiAgICAgIGR4ID0gZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3ZlcmxhcEF2b2lkYW5jZUZhY3RvciA8IDEgJiYgbm9kZS5zaGFwZS5yYWRpdXMpIHtcbiAgICAgIGRpc3RhbmNlID0gTWF0aC5tYXgoXG4gICAgICAgIDAuMSArIHRoaXMub3ZlcmxhcEF2b2lkYW5jZUZhY3RvciAqIG5vZGUuc2hhcGUucmFkaXVzLFxuICAgICAgICBkaXN0YW5jZSAtIG5vZGUuc2hhcGUucmFkaXVzXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZ3JlZSA9IG5vZGUuZWRnZXMubGVuZ3RoICsgMTtcbiAgICAvLyB0aGUgZGl2aWRpbmcgYnkgdGhlIGRpc3RhbmNlIGN1YmVkIGluc3RlYWQgb2Ygc3F1YXJlZCBhbGxvd3MgdXMgdG8gZ2V0IHRoZSBmeCBhbmQgZnkgY29tcG9uZW50cyB3aXRob3V0IHNpbmVzIGFuZCBjb3NpbmVzXG4gICAgLy8gaXQgaXMgc2hvcnRoYW5kIGZvciBncmF2aXR5Zm9yY2Ugd2l0aCBkaXN0YW5jZSBzcXVhcmVkIGFuZCBmeCA9IGR4L2Rpc3RhbmNlICogZ3Jhdml0eUZvcmNlXG4gICAgY29uc3QgZ3Jhdml0eUZvcmNlID1cbiAgICAgICh0aGlzLm9wdGlvbnMuZ3Jhdml0YXRpb25hbENvbnN0YW50ICpcbiAgICAgICAgcGFyZW50QnJhbmNoLm1hc3MgKlxuICAgICAgICBub2RlLm9wdGlvbnMubWFzcyAqXG4gICAgICAgIGRlZ3JlZSkgL1xuICAgICAgTWF0aC5wb3coZGlzdGFuY2UsIDIpO1xuICAgIGNvbnN0IGZ4ID0gZHggKiBncmF2aXR5Rm9yY2U7XG4gICAgY29uc3QgZnkgPSBkeSAqIGdyYXZpdHlGb3JjZTtcblxuICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUuaWRdLnggKz0gZng7XG4gICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZS5pZF0ueSArPSBmeTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGb3JjZUF0bGFzMkJhc2VkUmVwdWxzaW9uU29sdmVyO1xuIiwgImltcG9ydCBDZW50cmFsR3Jhdml0eVNvbHZlciBmcm9tIFwiLi9DZW50cmFsR3Jhdml0eVNvbHZlclwiO1xuXG4vKipcbiAqIEBhdWdtZW50cyBDZW50cmFsR3Jhdml0eVNvbHZlclxuICovXG5jbGFzcyBGb3JjZUF0bGFzMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXIgZXh0ZW5kcyBDZW50cmFsR3Jhdml0eVNvbHZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge3twaHlzaWNzTm9kZUluZGljZXM6IEFycmF5LCBwaHlzaWNzRWRnZUluZGljZXM6IEFycmF5LCBmb3JjZXM6IHt9LCB2ZWxvY2l0aWVzOiB7fX19IHBoeXNpY3NCb2R5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucykge1xuICAgIHN1cGVyKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGZvcmNlcyBiYXNlZCBvbiB0aGUgZGlzdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxuICAgKiBAcGFyYW0ge251bWJlcn0gZHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGR5XG4gICAqIEBwYXJhbSB7T2JqZWN0PE5vZGUuaWQsIE5vZGU+fSBmb3JjZXNcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2FsY3VsYXRlRm9yY2VzKGRpc3RhbmNlLCBkeCwgZHksIGZvcmNlcywgbm9kZSkge1xuICAgIGlmIChkaXN0YW5jZSA+IDApIHtcbiAgICAgIGNvbnN0IGRlZ3JlZSA9IG5vZGUuZWRnZXMubGVuZ3RoICsgMTtcbiAgICAgIGNvbnN0IGdyYXZpdHlGb3JjZSA9XG4gICAgICAgIHRoaXMub3B0aW9ucy5jZW50cmFsR3Jhdml0eSAqIGRlZ3JlZSAqIG5vZGUub3B0aW9ucy5tYXNzO1xuICAgICAgZm9yY2VzW25vZGUuaWRdLnggPSBkeCAqIGdyYXZpdHlGb3JjZTtcbiAgICAgIGZvcmNlc1tub2RlLmlkXS55ID0gZHkgKiBncmF2aXR5Rm9yY2U7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvcmNlQXRsYXMyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlcjtcbiIsICJpbXBvcnQgQmFybmVzSHV0U29sdmVyIGZyb20gXCIuL2NvbXBvbmVudHMvcGh5c2ljcy9CYXJuZXNIdXRTb2x2ZXJcIjtcbmltcG9ydCBSZXB1bHNpb24gZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL1JlcHVsc2lvblNvbHZlclwiO1xuaW1wb3J0IEhpZXJhcmNoaWNhbFJlcHVsc2lvbiBmcm9tIFwiLi9jb21wb25lbnRzL3BoeXNpY3MvSGllcmFyY2hpY2FsUmVwdWxzaW9uU29sdmVyXCI7XG5pbXBvcnQgU3ByaW5nU29sdmVyIGZyb20gXCIuL2NvbXBvbmVudHMvcGh5c2ljcy9TcHJpbmdTb2x2ZXJcIjtcbmltcG9ydCBIaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0hpZXJhcmNoaWNhbFNwcmluZ1NvbHZlclwiO1xuaW1wb3J0IENlbnRyYWxHcmF2aXR5U29sdmVyIGZyb20gXCIuL2NvbXBvbmVudHMvcGh5c2ljcy9DZW50cmFsR3Jhdml0eVNvbHZlclwiO1xuaW1wb3J0IEZvcmNlQXRsYXMyQmFzZWRSZXB1bHNpb25Tb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0ZBMkJhc2VkUmVwdWxzaW9uU29sdmVyXCI7XG5pbXBvcnQgRm9yY2VBdGxhczJCYXNlZENlbnRyYWxHcmF2aXR5U29sdmVyIGZyb20gXCIuL2NvbXBvbmVudHMvcGh5c2ljcy9GQTJCYXNlZENlbnRyYWxHcmF2aXR5U29sdmVyXCI7XG5pbXBvcnQge1xuICBIU1ZUb0hleCxcbiAgbWVyZ2VPcHRpb25zLFxuICBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBFbmRQb2ludHMgfSBmcm9tIFwiLi9jb21wb25lbnRzL2VkZ2VzXCI7IC8vIGZvciBkZWJ1Z2dpbmcgd2l0aCBfZHJhd0ZvcmNlcygpXG5cbi8qKlxuICogVGhlIHBoeXNpY3MgZW5naW5lXG4gKi9cbmNsYXNzIFBoeXNpY3NFbmdpbmUge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHkpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucGh5c2ljc0JvZHkgPSB7XG4gICAgICBwaHlzaWNzTm9kZUluZGljZXM6IFtdLFxuICAgICAgcGh5c2ljc0VkZ2VJbmRpY2VzOiBbXSxcbiAgICAgIGZvcmNlczoge30sXG4gICAgICB2ZWxvY2l0aWVzOiB7fSxcbiAgICB9O1xuXG4gICAgdGhpcy5waHlzaWNzRW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5zaW11bGF0aW9uSW50ZXJ2YWwgPSAxMDAwIC8gNjA7XG4gICAgdGhpcy5yZXF1aXJlc1RpbWVvdXQgPSB0cnVlO1xuICAgIHRoaXMucHJldmlvdXNTdGF0ZXMgPSB7fTtcbiAgICB0aGlzLnJlZmVyZW5jZVN0YXRlID0ge307XG4gICAgdGhpcy5mcmVlemVDYWNoZSA9IHt9O1xuICAgIHRoaXMucmVuZGVyVGltZXIgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBwYXJhbWV0ZXJzIGZvciB0aGUgYWRhcHRpdmUgdGltZXN0ZXBcbiAgICB0aGlzLmFkYXB0aXZlVGltZXN0ZXAgPSBmYWxzZTtcbiAgICB0aGlzLmFkYXB0aXZlVGltZXN0ZXBFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5hZGFwdGl2ZUNvdW50ZXIgPSAwO1xuICAgIHRoaXMuYWRhcHRpdmVJbnRlcnZhbCA9IDM7XG5cbiAgICB0aGlzLnN0YWJpbGl6ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXJ0ZWRTdGFiaWxpemF0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucyA9IDA7XG4gICAgdGhpcy5yZWFkeSA9IGZhbHNlOyAvLyB3aWxsIGJlIHNldCB0byB0cnVlIGlmIHRoZSBzdGFiaWxpemVcblxuICAgIC8vIGRlZmF1bHQgb3B0aW9uc1xuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgYmFybmVzSHV0OiB7XG4gICAgICAgIHRoZXRhOiAwLjUsXG4gICAgICAgIGdyYXZpdGF0aW9uYWxDb25zdGFudDogLTIwMDAsXG4gICAgICAgIGNlbnRyYWxHcmF2aXR5OiAwLjMsXG4gICAgICAgIHNwcmluZ0xlbmd0aDogOTUsXG4gICAgICAgIHNwcmluZ0NvbnN0YW50OiAwLjA0LFxuICAgICAgICBkYW1waW5nOiAwLjA5LFxuICAgICAgICBhdm9pZE92ZXJsYXA6IDAsXG4gICAgICB9LFxuICAgICAgZm9yY2VBdGxhczJCYXNlZDoge1xuICAgICAgICB0aGV0YTogMC41LFxuICAgICAgICBncmF2aXRhdGlvbmFsQ29uc3RhbnQ6IC01MCxcbiAgICAgICAgY2VudHJhbEdyYXZpdHk6IDAuMDEsXG4gICAgICAgIHNwcmluZ0NvbnN0YW50OiAwLjA4LFxuICAgICAgICBzcHJpbmdMZW5ndGg6IDEwMCxcbiAgICAgICAgZGFtcGluZzogMC40LFxuICAgICAgICBhdm9pZE92ZXJsYXA6IDAsXG4gICAgICB9LFxuICAgICAgcmVwdWxzaW9uOiB7XG4gICAgICAgIGNlbnRyYWxHcmF2aXR5OiAwLjIsXG4gICAgICAgIHNwcmluZ0xlbmd0aDogMjAwLFxuICAgICAgICBzcHJpbmdDb25zdGFudDogMC4wNSxcbiAgICAgICAgbm9kZURpc3RhbmNlOiAxMDAsXG4gICAgICAgIGRhbXBpbmc6IDAuMDksXG4gICAgICAgIGF2b2lkT3ZlcmxhcDogMCxcbiAgICAgIH0sXG4gICAgICBoaWVyYXJjaGljYWxSZXB1bHNpb246IHtcbiAgICAgICAgY2VudHJhbEdyYXZpdHk6IDAuMCxcbiAgICAgICAgc3ByaW5nTGVuZ3RoOiAxMDAsXG4gICAgICAgIHNwcmluZ0NvbnN0YW50OiAwLjAxLFxuICAgICAgICBub2RlRGlzdGFuY2U6IDEyMCxcbiAgICAgICAgZGFtcGluZzogMC4wOSxcbiAgICAgIH0sXG4gICAgICBtYXhWZWxvY2l0eTogNTAsXG4gICAgICBtaW5WZWxvY2l0eTogMC43NSwgLy8gcHgvc1xuICAgICAgc29sdmVyOiBcImJhcm5lc0h1dFwiLFxuICAgICAgc3RhYmlsaXphdGlvbjoge1xuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICBpdGVyYXRpb25zOiAxMDAwLCAvLyBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb24gdG8gc3RhYmlsaXplXG4gICAgICAgIHVwZGF0ZUludGVydmFsOiA1MCxcbiAgICAgICAgb25seUR5bmFtaWNFZGdlczogZmFsc2UsXG4gICAgICAgIGZpdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB0aW1lc3RlcDogMC41LFxuICAgICAgYWRhcHRpdmVUaW1lc3RlcDogdHJ1ZSxcbiAgICAgIHdpbmQ6IHsgeDogMCwgeTogMCB9LFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuICAgIHRoaXMudGltZXN0ZXAgPSAwLjU7XG4gICAgdGhpcy5sYXlvdXRGYWlsZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJpbml0UGh5c2ljc1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLmluaXRQaHlzaWNzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfbGF5b3V0RmFpbGVkXCIsICgpID0+IHtcbiAgICAgIHRoaXMubGF5b3V0RmFpbGVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInJlc2V0UGh5c2ljc1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKCk7XG4gICAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkaXNhYmxlUGh5c2ljc1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLnBoeXNpY3NFbmFibGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJyZXN0b3JlUGh5c2ljc1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLnNldE9wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICAgIGlmICh0aGlzLnJlYWR5ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuc3RhcnRTaW11bGF0aW9uKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJzdGFydFNpbXVsYXRpb25cIiwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucmVhZHkgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFNpbXVsYXRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInN0b3BTaW11bGF0aW9uXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc3RvcFNpbXVsYXRpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zdG9wU2ltdWxhdGlvbihmYWxzZSk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9kYXRhQ2hhbmdlZFwiLCAoKSA9PiB7XG4gICAgICAvLyBOb2RlcyBhbmQvb3IgZWRnZXMgaGF2ZSBiZWVuIGFkZGVkIG9yIHJlbW92ZWQsIHVwZGF0ZSBzaG9ydGN1dCBsaXN0cy5cbiAgICAgIHRoaXMudXBkYXRlUGh5c2ljc0RhdGEoKTtcbiAgICB9KTtcblxuICAgIC8vIGRlYnVnOiBzaG93IGZvcmNlc1xuICAgIC8vIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiYWZ0ZXJEcmF3aW5nXCIsIChjdHgpID0+IHt0aGlzLl9kcmF3Rm9yY2VzKGN0eCk7fSk7XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBwaHlzaWNzIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBoeXNpY3NFbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RvcFNpbXVsYXRpb24oKTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucyA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucGh5c2ljc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0YXJ0U2ltdWxhdGlvbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5waHlzaWNzRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQoW1wic3RhYmlsaXphdGlvblwiXSwgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgbWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucywgb3B0aW9ucywgXCJzdGFiaWxpemF0aW9uXCIpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLnBoeXNpY3NFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2luZCA9IHRoaXMub3B0aW9ucy53aW5kO1xuICAgICAgICBpZiAod2luZCkge1xuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZC54ICE9PSBcIm51bWJlclwiIHx8IE51bWJlci5pc05hTih3aW5kLngpKSB7XG4gICAgICAgICAgICB3aW5kLnggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmQueSAhPT0gXCJudW1iZXJcIiB8fCBOdW1iZXIuaXNOYU4od2luZC55KSkge1xuICAgICAgICAgICAgd2luZC55ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgdGhlIHRpbWVzdGVwXG4gICAgICAgIHRoaXMudGltZXN0ZXAgPSB0aGlzLm9wdGlvbnMudGltZXN0ZXA7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNvbmZpZ3VyZSB0aGUgZW5naW5lLlxuICAgKi9cbiAgaW5pdCgpIHtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBpZiAodGhpcy5vcHRpb25zLnNvbHZlciA9PT0gXCJmb3JjZUF0bGFzMkJhc2VkXCIpIHtcbiAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZm9yY2VBdGxhczJCYXNlZDtcbiAgICAgIHRoaXMubm9kZXNTb2x2ZXIgPSBuZXcgRm9yY2VBdGxhczJCYXNlZFJlcHVsc2lvblNvbHZlcihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgICAgdGhpcy5lZGdlc1NvbHZlciA9IG5ldyBTcHJpbmdTb2x2ZXIodGhpcy5ib2R5LCB0aGlzLnBoeXNpY3NCb2R5LCBvcHRpb25zKTtcbiAgICAgIHRoaXMuZ3Jhdml0eVNvbHZlciA9IG5ldyBGb3JjZUF0bGFzMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zb2x2ZXIgPT09IFwicmVwdWxzaW9uXCIpIHtcbiAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMucmVwdWxzaW9uO1xuICAgICAgdGhpcy5ub2Rlc1NvbHZlciA9IG5ldyBSZXB1bHNpb24odGhpcy5ib2R5LCB0aGlzLnBoeXNpY3NCb2R5LCBvcHRpb25zKTtcbiAgICAgIHRoaXMuZWRnZXNTb2x2ZXIgPSBuZXcgU3ByaW5nU29sdmVyKHRoaXMuYm9keSwgdGhpcy5waHlzaWNzQm9keSwgb3B0aW9ucyk7XG4gICAgICB0aGlzLmdyYXZpdHlTb2x2ZXIgPSBuZXcgQ2VudHJhbEdyYXZpdHlTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zb2x2ZXIgPT09IFwiaGllcmFyY2hpY2FsUmVwdWxzaW9uXCIpIHtcbiAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsUmVwdWxzaW9uO1xuICAgICAgdGhpcy5ub2Rlc1NvbHZlciA9IG5ldyBIaWVyYXJjaGljYWxSZXB1bHNpb24oXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIHRoaXMuZWRnZXNTb2x2ZXIgPSBuZXcgSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyKFxuICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgIHRoaXMucGh5c2ljc0JvZHksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgICB0aGlzLmdyYXZpdHlTb2x2ZXIgPSBuZXcgQ2VudHJhbEdyYXZpdHlTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYmFybmVzSHV0XG4gICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLmJhcm5lc0h1dDtcbiAgICAgIHRoaXMubm9kZXNTb2x2ZXIgPSBuZXcgQmFybmVzSHV0U29sdmVyKFxuICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgIHRoaXMucGh5c2ljc0JvZHksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgICB0aGlzLmVkZ2VzU29sdmVyID0gbmV3IFNwcmluZ1NvbHZlcih0aGlzLmJvZHksIHRoaXMucGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuICAgICAgdGhpcy5ncmF2aXR5U29sdmVyID0gbmV3IENlbnRyYWxHcmF2aXR5U29sdmVyKFxuICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgIHRoaXMucGh5c2ljc0JvZHksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5tb2RlbE9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIGluaXRpYWxpemUgdGhlIGVuZ2luZVxuICAgKi9cbiAgaW5pdFBoeXNpY3MoKSB7XG4gICAgaWYgKHRoaXMucGh5c2ljc0VuYWJsZWQgPT09IHRydWUgJiYgdGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuc3RhYmlsaXplKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YWJpbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJmaXRcIiwge30sIHRoaXMubGF5b3V0RmFpbGVkKTsgLy8gaWYgdGhlIGxheW91dCBmYWlsZWQsIHdlIHVzZSB0aGUgYXBwcm94aW1hdGlvbiBmb3IgdGhlIHpvb21cbiAgICAgICAgdGhpcy5zdGFydFNpbXVsYXRpb24oKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiZml0XCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgc2ltdWxhdGlvblxuICAgKi9cbiAgc3RhcnRTaW11bGF0aW9uKCkge1xuICAgIGlmICh0aGlzLnBoeXNpY3NFbmFibGVkID09PSB0cnVlICYmIHRoaXMub3B0aW9ucy5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnN0YWJpbGl6ZWQgPSBmYWxzZTtcblxuICAgICAgLy8gd2hlbiB2aXNpYmxlLCBhZGFwdGl2aXR5IGlzIGRpc2FibGVkLlxuICAgICAgdGhpcy5hZGFwdGl2ZVRpbWVzdGVwID0gZmFsc2U7XG5cbiAgICAgIC8vIHRoaXMgc2V0cyB0aGUgd2lkdGggb2YgYWxsIG5vZGVzIGluaXRpYWxseSB3aGljaCBjb3VsZCBiZSByZXF1aXJlZCBmb3IgdGhlIGF2b2lkT3ZlcmxhcFxuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXNpemVOb2Rlc1wiKTtcbiAgICAgIGlmICh0aGlzLnZpZXdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMudmlld0Z1bmN0aW9uID0gdGhpcy5zaW11bGF0aW9uU3RlcC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImluaXRSZWRyYXdcIiwgdGhpcy52aWV3RnVuY3Rpb24pO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0YXJ0UmVuZGVyaW5nXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0aGUgc2ltdWxhdGlvbiwgZm9yY2Ugc3RhYmlsaXphdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbZW1pdD10cnVlXVxuICAgKi9cbiAgc3RvcFNpbXVsYXRpb24oZW1pdCA9IHRydWUpIHtcbiAgICB0aGlzLnN0YWJpbGl6ZWQgPSB0cnVlO1xuICAgIGlmIChlbWl0ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLl9lbWl0U3RhYmlsaXplZCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy52aWV3RnVuY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKFwiaW5pdFJlZHJhd1wiLCB0aGlzLnZpZXdGdW5jdGlvbik7XG4gICAgICB0aGlzLnZpZXdGdW5jdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlbWl0ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfc3RvcFJlbmRlcmluZ1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIHZpZXdGdW5jdGlvbiBpbnNlcnRzIHRoaXMgc3RlcCBpbnRvIGVhY2ggcmVuZGVyIGxvb3AuIEl0IGNhbGxzIHRoZSBwaHlzaWNzIHRpY2sgYW5kIGhhbmRsZXMgdGhlIGNsZWFudXAgYXQgc3RhYmlsaXplZC5cbiAgICpcbiAgICovXG4gIHNpbXVsYXRpb25TdGVwKCkge1xuICAgIC8vIGNoZWNrIGlmIHRoZSBwaHlzaWNzIGhhdmUgc2V0dGxlZFxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5waHlzaWNzVGljaygpO1xuICAgIGNvbnN0IHBoeXNpY3NUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcblxuICAgIC8vIHJ1biBkb3VibGUgc3BlZWQgaWYgaXQgaXMgYSBsaXR0bGUgZ3JhcGhcbiAgICBpZiAoXG4gICAgICAocGh5c2ljc1RpbWUgPCAwLjQgKiB0aGlzLnNpbXVsYXRpb25JbnRlcnZhbCB8fFxuICAgICAgICB0aGlzLnJ1bkRvdWJsZVNwZWVkID09PSB0cnVlKSAmJlxuICAgICAgdGhpcy5zdGFiaWxpemVkID09PSBmYWxzZVxuICAgICkge1xuICAgICAgdGhpcy5waHlzaWNzVGljaygpO1xuXG4gICAgICAvLyB0aGlzIG1ha2VzIHN1cmUgdGhlcmUgaXMgbm8gaml0dGVyLiBUaGUgZGVjaXNpb24gaXMgdGFrZW4gb25jZSB0byBydW4gaXQgYXQgZG91YmxlIHNwZWVkLlxuICAgICAgdGhpcy5ydW5Eb3VibGVTcGVlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhYmlsaXplZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB0cmlnZ2VyIHRoZSBzdGFiaWxpemVkIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2Ftb3VudE9mSXRlcmF0aW9ucz10aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2VtaXRTdGFiaWxpemVkKGFtb3VudE9mSXRlcmF0aW9ucyA9IHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zID4gMSB8fFxuICAgICAgdGhpcy5zdGFydGVkU3RhYmlsaXphdGlvbiA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFiaWxpemVkXCIsIHtcbiAgICAgICAgICBpdGVyYXRpb25zOiBhbW91bnRPZkl0ZXJhdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN0YXJ0ZWRTdGFiaWxpemF0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMgPSAwO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIGZvciBvbmUgcGh5c2ljcyBpdGVyYXRpb24gYW5kIG1vdmUgdGhlIG5vZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcGh5c2ljc1N0ZXAoKSB7XG4gICAgdGhpcy5ncmF2aXR5U29sdmVyLnNvbHZlKCk7XG4gICAgdGhpcy5ub2Rlc1NvbHZlci5zb2x2ZSgpO1xuICAgIHRoaXMuZWRnZXNTb2x2ZXIuc29sdmUoKTtcbiAgICB0aGlzLm1vdmVOb2RlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgZHluYW1pYyBhZGp1c3RtZW50cyB0byB0aGUgdGltZXN0ZXAsIGJhc2VkIG9uIGN1cnJlbnQgc3RhdGUuXG4gICAqXG4gICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgcGh5c2ljc1RpY2soKS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFkanVzdFRpbWVTdGVwKCkge1xuICAgIGNvbnN0IGZhY3RvciA9IDEuMjsgLy8gRmFjdG9yIGZvciBpbmNyZWFzaW5nIHRoZSB0aW1lc3RlcCBvbiBzdWNjZXNzLlxuXG4gICAgLy8gd2UgY29tcGFyZSB0aGUgdHdvIHN0ZXBzLiBpZiBpdCBpcyBhY2NlcHRhYmxlIHdlIGRvdWJsZSB0aGUgc3RlcC5cbiAgICBpZiAodGhpcy5fZXZhbHVhdGVTdGVwUXVhbGl0eSgpID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnRpbWVzdGVwID0gZmFjdG9yICogdGhpcy50aW1lc3RlcDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgbm90LCB3ZSBkZWNyZWFzZSB0aGUgc3RlcCB0byBhIG1pbmltdW0gb2YgdGhlIG9wdGlvbnMgdGltZXN0ZXAuXG4gICAgICAvLyBpZiB0aGUgZGVjcmVhc2VkIHRpbWVzdGVwIGlzIHNtYWxsZXIgdGhhbiB0aGUgb3B0aW9ucyBzdGVwLCB3ZSBkbyBub3QgcmVzZXQgdGhlIGNvdW50ZXJcbiAgICAgIC8vIHdlIGFzc3VtZSB0aGF0IHRoZSBvcHRpb25zIHRpbWVzdGVwIGlzIHN0YWJsZSBlbm91Z2guXG4gICAgICBpZiAodGhpcy50aW1lc3RlcCAvIGZhY3RvciA8IHRoaXMub3B0aW9ucy50aW1lc3RlcCkge1xuICAgICAgICB0aGlzLnRpbWVzdGVwID0gdGhpcy5vcHRpb25zLnRpbWVzdGVwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgdGhlIHRpbWVzdGVwIHdhcyBsYXJnZXIgdGhhbiAyIHRpbWVzIHRoZSBvcHRpb24gb25lIHdlIGNoZWNrIHRoZSBhZGFwdGl2aXR5IGFnYWluIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IGxhcmdlIGluc3RhYmlsaXRpZXMgZG8gbm90IGZvcm0uXG4gICAgICAgIHRoaXMuYWRhcHRpdmVDb3VudGVyID0gLTE7IC8vIGNoZWNrIGFnYWluIG5leHQgaXRlcmF0aW9uXG4gICAgICAgIHRoaXMudGltZXN0ZXAgPSBNYXRoLm1heCh0aGlzLm9wdGlvbnMudGltZXN0ZXAsIHRoaXMudGltZXN0ZXAgLyBmYWN0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBzaW11bGF0aW9uIHN0ZXAgKG9yICd0aWNrJykgaW4gdGhlIHBoeXNpY3Mgc2ltdWxhdGlvblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcGh5c2ljc1RpY2soKSB7XG4gICAgdGhpcy5fc3RhcnRTdGFiaWxpemluZygpOyAvLyB0aGlzIGVuc3VyZXMgdGhhdCB0aGVyZSBpcyBubyBzdGFydCBldmVudCB3aGVuIHRoZSBuZXR3b3JrIGlzIGFscmVhZHkgc3RhYmxlLlxuICAgIGlmICh0aGlzLnN0YWJpbGl6ZWQgPT09IHRydWUpIHJldHVybjtcblxuICAgIC8vIGFkYXB0aXZpdHkgbWVhbnMgdGhlIHRpbWVzdGVwIGFkYXB0cyB0byB0aGUgc2l0dWF0aW9uLCBvbmx5IGFwcGxpY2FibGUgZm9yIHN0YWJpbGl6YXRpb25cbiAgICBpZiAoXG4gICAgICB0aGlzLmFkYXB0aXZlVGltZXN0ZXAgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcEVuYWJsZWQgPT09IHRydWVcbiAgICApIHtcbiAgICAgIC8vIHRpbWVzdGVwIHJlbWFpbnMgc3RhYmxlIGZvciBcImludGVydmFsXCIgaXRlcmF0aW9ucy5cbiAgICAgIGNvbnN0IGRvQWRhcHRpdmUgPSB0aGlzLmFkYXB0aXZlQ291bnRlciAlIHRoaXMuYWRhcHRpdmVJbnRlcnZhbCA9PT0gMDtcblxuICAgICAgaWYgKGRvQWRhcHRpdmUpIHtcbiAgICAgICAgLy8gZmlyc3QgdGhlIGJpZyBzdGVwIGFuZCByZXZlcnQuXG4gICAgICAgIHRoaXMudGltZXN0ZXAgPSAyICogdGhpcy50aW1lc3RlcDtcbiAgICAgICAgdGhpcy5waHlzaWNzU3RlcCgpO1xuICAgICAgICB0aGlzLnJldmVydCgpOyAvLyBzYXZlcyB0aGUgcmVmZXJlbmNlIHN0YXRlXG5cbiAgICAgICAgLy8gbm93IHRoZSBub3JtYWwgc3RlcC4gU2luY2UgdGhpcyBpcyB0aGUgbGFzdCBzdGVwLCBpdCBpcyB0aGUgbW9yZSBzdGFibGUgb25lIGFuZCB3ZSB3aWxsIHRha2UgdGhpcy5cbiAgICAgICAgdGhpcy50aW1lc3RlcCA9IDAuNSAqIHRoaXMudGltZXN0ZXA7XG5cbiAgICAgICAgLy8gc2luY2UgaXQncyBoYWxmIHRoZSBzdGVwLCB3ZSBkbyBpdCB0d2ljZS5cbiAgICAgICAgdGhpcy5waHlzaWNzU3RlcCgpO1xuICAgICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7XG5cbiAgICAgICAgdGhpcy5hZGp1c3RUaW1lU3RlcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5waHlzaWNzU3RlcCgpOyAvLyBub3JtYWwgc3RlcCwga2VlcGluZyB0aW1lc3RlcCBjb25zdGFudFxuICAgICAgfVxuXG4gICAgICB0aGlzLmFkYXB0aXZlQ291bnRlciArPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjYXNlIGZvciB0aGUgc3RhdGljIHRpbWVzdGVwLCB3ZSByZXNldCBpdCB0byB0aGUgb25lIGluIG9wdGlvbnMgYW5kIHRha2UgYSBub3JtYWwgc3RlcC5cbiAgICAgIHRoaXMudGltZXN0ZXAgPSB0aGlzLm9wdGlvbnMudGltZXN0ZXA7XG4gICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhYmlsaXplZCA9PT0gdHJ1ZSkgdGhpcy5yZXZlcnQoKTtcbiAgICB0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zKys7XG4gIH1cblxuICAvKipcbiAgICogTm9kZXMgYW5kIGVkZ2VzIGNhbiBoYXZlIHRoZSBwaHlzaWNzIHRvZ2dsZXMgb24gb3Igb2ZmLiBBIGNvbGxlY3Rpb24gb2YgaW5kaWNlcyBpcyBjcmVhdGVkIGhlcmUgc28gd2UgY2FuIHNraXAgdGhlIGNoZWNrIGFsbCB0aGUgdGltZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVwZGF0ZVBoeXNpY3NEYXRhKCkge1xuICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzID0ge307XG4gICAgdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXMgPSBbXTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NFZGdlSW5kaWNlcyA9IFtdO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5ib2R5LmVkZ2VzO1xuXG4gICAgLy8gZ2V0IG5vZGUgaW5kaWNlcyBmb3IgcGh5c2ljc1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIGlmIChub2Rlc1tub2RlSWRdLm9wdGlvbnMucGh5c2ljcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLnB1c2gobm9kZXNbbm9kZUlkXS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBnZXQgZWRnZSBpbmRpY2VzIGZvciBwaHlzaWNzXG4gICAgZm9yIChjb25zdCBlZGdlSWQgaW4gZWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgICAgaWYgKGVkZ2VzW2VkZ2VJZF0ub3B0aW9ucy5waHlzaWNzID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5waHlzaWNzQm9keS5waHlzaWNzRWRnZUluZGljZXMucHVzaChlZGdlc1tlZGdlSWRdLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGdldCB0aGUgdmVsb2NpdHkgYW5kIHRoZSBmb3JjZXMgdmVjdG9yXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXNbaV07XG4gICAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlSWRdID0geyB4OiAwLCB5OiAwIH07XG5cbiAgICAgIC8vIGZvcmNlcyBjYW4gYmUgcmVzZXQgYmVjYXVzZSB0aGV5IGFyZSByZWNhbGN1bGF0ZWQuIFZlbG9jaXRpZXMgaGF2ZSB0byBwZXJzaXN0LlxuICAgICAgaWYgKHRoaXMucGh5c2ljc0JvZHkudmVsb2NpdGllc1tub2RlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzW25vZGVJZF0gPSB7IHg6IDAsIHk6IDAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjbGVhbiBkZWxldGVkIG5vZGVzIGZyb20gdGhlIHZlbG9jaXR5IHZlY3RvclxuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMucGh5c2ljc0JvZHkudmVsb2NpdGllcykge1xuICAgICAgaWYgKG5vZGVzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZWxldGUgdGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzW25vZGVJZF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldmVydCB0aGUgc2ltdWxhdGlvbiBvbmUgc3RlcC4gVGhpcyBpcyBkb25lIHNvIGFmdGVyIHN0YWJpbGl6YXRpb24sIGV2ZXJ5IG5ldyBzdGFydCBvZiB0aGUgc2ltdWxhdGlvbiB3aWxsIGFsc28gc2F5IHN0YWJpbGl6ZWQuXG4gICAqL1xuICByZXZlcnQoKSB7XG4gICAgY29uc3Qgbm9kZUlkcyA9IE9iamVjdC5rZXlzKHRoaXMucHJldmlvdXNTdGF0ZXMpO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IHZlbG9jaXRpZXMgPSB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXM7XG4gICAgdGhpcy5yZWZlcmVuY2VTdGF0ZSA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSWRzW2ldO1xuICAgICAgaWYgKG5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobm9kZXNbbm9kZUlkXS5vcHRpb25zLnBoeXNpY3MgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnJlZmVyZW5jZVN0YXRlW25vZGVJZF0gPSB7XG4gICAgICAgICAgICBwb3NpdGlvbnM6IHsgeDogbm9kZXNbbm9kZUlkXS54LCB5OiBub2Rlc1tub2RlSWRdLnkgfSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZlbG9jaXRpZXNbbm9kZUlkXS54ID0gdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdLnZ4O1xuICAgICAgICAgIHZlbG9jaXRpZXNbbm9kZUlkXS55ID0gdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdLnZ5O1xuICAgICAgICAgIG5vZGVzW25vZGVJZF0ueCA9IHRoaXMucHJldmlvdXNTdGF0ZXNbbm9kZUlkXS54O1xuICAgICAgICAgIG5vZGVzW25vZGVJZF0ueSA9IHRoaXMucHJldmlvdXNTdGF0ZXNbbm9kZUlkXS55O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGNvbXBhcmVzIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gdGhlIGN1cnJlbnQgc3RhdGVcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZhbHVhdGVTdGVwUXVhbGl0eSgpIHtcbiAgICBsZXQgZHgsIGR5LCBkcG9zO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlU3RhdGU7XG4gICAgY29uc3QgcG9zVGhyZXNob2xkID0gMC4zO1xuXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5yZWZlcmVuY2VTdGF0ZSkge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5yZWZlcmVuY2VTdGF0ZSwgbm9kZUlkKSAmJlxuICAgICAgICBub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICBkeCA9IG5vZGVzW25vZGVJZF0ueCAtIHJlZmVyZW5jZVtub2RlSWRdLnBvc2l0aW9ucy54O1xuICAgICAgICBkeSA9IG5vZGVzW25vZGVJZF0ueSAtIHJlZmVyZW5jZVtub2RlSWRdLnBvc2l0aW9ucy55O1xuXG4gICAgICAgIGRwb3MgPSBNYXRoLnNxcnQoTWF0aC5wb3coZHgsIDIpICsgTWF0aC5wb3coZHksIDIpKTtcblxuICAgICAgICBpZiAoZHBvcyA+IHBvc1RocmVzaG9sZCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtb3ZlIHRoZSBub2RlcyBvbmUgdGltZXN0ZXAgYW5kIGNoZWNrIGlmIHRoZXkgYXJlIHN0YWJpbGl6ZWRcbiAgICovXG4gIG1vdmVOb2RlcygpIHtcbiAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzO1xuICAgIGxldCBtYXhOb2RlVmVsb2NpdHkgPSAwO1xuICAgIGxldCBhdmVyYWdlTm9kZVZlbG9jaXR5ID0gMDtcblxuICAgIC8vIHRoZSB2ZWxvY2l0eSB0aHJlc2hvbGQgKGVuZXJneSBpbiB0aGUgc3lzdGVtKSBmb3IgdGhlIGFkYXB0aXZpdHkgdG9nZ2xlXG4gICAgY29uc3QgdmVsb2NpdHlBZGFwdGl2ZVRocmVzaG9sZCA9IDU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIGNvbnN0IG5vZGVWZWxvY2l0eSA9IHRoaXMuX3BlcmZvcm1TdGVwKG5vZGVJZCk7XG4gICAgICAvLyBzdGFiaWxpemVkIGlzIHRydWUgaWYgc3RhYmlsaXplZCBpcyB0cnVlIGFuZCB2ZWxvY2l0eSBpcyBzbWFsbGVyIHRoYW4gdm1pbiAtLT4gYWxsIG5vZGVzIG11c3QgYmUgc3RhYmlsaXplZFxuICAgICAgbWF4Tm9kZVZlbG9jaXR5ID0gTWF0aC5tYXgobWF4Tm9kZVZlbG9jaXR5LCBub2RlVmVsb2NpdHkpO1xuICAgICAgYXZlcmFnZU5vZGVWZWxvY2l0eSArPSBub2RlVmVsb2NpdHk7XG4gICAgfVxuXG4gICAgLy8gZXZhbHVhdGluZyB0aGUgc3RhYmlsaXplZCBhbmQgYWRhcHRpdmVUaW1lc3RlcEVuYWJsZWQgY29uZGl0aW9uc1xuICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcEVuYWJsZWQgPVxuICAgICAgYXZlcmFnZU5vZGVWZWxvY2l0eSAvIG5vZGVJbmRpY2VzLmxlbmd0aCA8IHZlbG9jaXR5QWRhcHRpdmVUaHJlc2hvbGQ7XG4gICAgdGhpcy5zdGFiaWxpemVkID0gbWF4Tm9kZVZlbG9jaXR5IDwgdGhpcy5vcHRpb25zLm1pblZlbG9jaXR5O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBuZXcgdmVsb2NpdHkgZm9yIGEgY29vcmRpbmF0ZSBkaXJlY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHYgIHZlbG9jaXR5IGZvciBjdXJyZW50IGNvb3JkaW5hdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGYgIHJlZ3VsYXIgZm9yY2UgZm9yIGN1cnJlbnQgY29vcmRpbmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbSAgbWFzcyBvZiBjdXJyZW50IG5vZGVcbiAgICogQHJldHVybnMge251bWJlcn0gbmV3IHZlbG9jaXR5IGZvciBjdXJyZW50IGNvb3JkaW5hdGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNhbGN1bGF0ZUNvbXBvbmVudFZlbG9jaXR5KHYsIGYsIG0pIHtcbiAgICBjb25zdCBkZiA9IHRoaXMubW9kZWxPcHRpb25zLmRhbXBpbmcgKiB2OyAvLyBkYW1waW5nIGZvcmNlXG4gICAgY29uc3QgYSA9IChmIC0gZGYpIC8gbTsgLy8gYWNjZWxlcmF0aW9uXG5cbiAgICB2ICs9IGEgKiB0aGlzLnRpbWVzdGVwO1xuXG4gICAgLy8gUHV0IGEgbGltaXQgb24gdGhlIHZlbG9jaXRpZXMgaWYgaXQgaXMgcmVhbGx5IGhpZ2hcbiAgICBjb25zdCBtYXhWID0gdGhpcy5vcHRpb25zLm1heFZlbG9jaXR5IHx8IDFlOTtcbiAgICBpZiAoTWF0aC5hYnModikgPiBtYXhWKSB7XG4gICAgICB2ID0gdiA+IDAgPyBtYXhWIDogLW1heFY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSB0aGUgYWN0dWFsIHN0ZXBcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge251bWJlcn0gdGhlIG5ldyB2ZWxvY2l0eSBvZiBnaXZlbiBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGVyZm9ybVN0ZXAobm9kZUlkKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgIGNvbnN0IGZvcmNlID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZUlkXTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMud2luZCkge1xuICAgICAgZm9yY2UueCArPSB0aGlzLm9wdGlvbnMud2luZC54O1xuICAgICAgZm9yY2UueSArPSB0aGlzLm9wdGlvbnMud2luZC55O1xuICAgIH1cblxuICAgIGNvbnN0IHZlbG9jaXR5ID0gdGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzW25vZGVJZF07XG5cbiAgICAvLyBzdG9yZSB0aGUgc3RhdGUgc28gd2UgY2FuIHJldmVydFxuICAgIHRoaXMucHJldmlvdXNTdGF0ZXNbbm9kZUlkXSA9IHtcbiAgICAgIHg6IG5vZGUueCxcbiAgICAgIHk6IG5vZGUueSxcbiAgICAgIHZ4OiB2ZWxvY2l0eS54LFxuICAgICAgdnk6IHZlbG9jaXR5LnksXG4gICAgfTtcblxuICAgIGlmIChub2RlLm9wdGlvbnMuZml4ZWQueCA9PT0gZmFsc2UpIHtcbiAgICAgIHZlbG9jaXR5LnggPSB0aGlzLmNhbGN1bGF0ZUNvbXBvbmVudFZlbG9jaXR5KFxuICAgICAgICB2ZWxvY2l0eS54LFxuICAgICAgICBmb3JjZS54LFxuICAgICAgICBub2RlLm9wdGlvbnMubWFzc1xuICAgICAgKTtcbiAgICAgIG5vZGUueCArPSB2ZWxvY2l0eS54ICogdGhpcy50aW1lc3RlcDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yY2UueCA9IDA7XG4gICAgICB2ZWxvY2l0eS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5vcHRpb25zLmZpeGVkLnkgPT09IGZhbHNlKSB7XG4gICAgICB2ZWxvY2l0eS55ID0gdGhpcy5jYWxjdWxhdGVDb21wb25lbnRWZWxvY2l0eShcbiAgICAgICAgdmVsb2NpdHkueSxcbiAgICAgICAgZm9yY2UueSxcbiAgICAgICAgbm9kZS5vcHRpb25zLm1hc3NcbiAgICAgICk7XG4gICAgICBub2RlLnkgKz0gdmVsb2NpdHkueSAqIHRoaXMudGltZXN0ZXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcmNlLnkgPSAwO1xuICAgICAgdmVsb2NpdHkueSA9IDA7XG4gICAgfVxuXG4gICAgY29uc3QgdG90YWxWZWxvY2l0eSA9IE1hdGguc3FydChcbiAgICAgIE1hdGgucG93KHZlbG9jaXR5LngsIDIpICsgTWF0aC5wb3codmVsb2NpdHkueSwgMilcbiAgICApO1xuICAgIHJldHVybiB0b3RhbFZlbG9jaXR5O1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gaW5pdGlhbGl6aW5nIGFuZCBzdGFiaWxpemluZywgd2UgY2FuIGZyZWV6ZSBub2RlcyB3aXRoIGEgcHJlZGVmaW5lZCBwb3NpdGlvbi5cbiAgICogVGhpcyBncmVhdGx5IHNwZWVkcyB1cCBzdGFiaWxpemF0aW9uIGJlY2F1c2Ugb25seSB0aGUgc3VwcG9ydG5vZGVzIGZvciB0aGUgc21vb3RoQ3VydmVzIGhhdmUgdG8gc2V0dGxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZyZWV6ZU5vZGVzKCkge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGZvciAoY29uc3QgaWQgaW4gbm9kZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZXMsIGlkKSkge1xuICAgICAgICBpZiAobm9kZXNbaWRdLnggJiYgbm9kZXNbaWRdLnkpIHtcbiAgICAgICAgICBjb25zdCBmaXhlZCA9IG5vZGVzW2lkXS5vcHRpb25zLmZpeGVkO1xuICAgICAgICAgIHRoaXMuZnJlZXplQ2FjaGVbaWRdID0geyB4OiBmaXhlZC54LCB5OiBmaXhlZC55IH07XG4gICAgICAgICAgZml4ZWQueCA9IHRydWU7XG4gICAgICAgICAgZml4ZWQueSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5mcmVlemVzIHRoZSBub2RlcyB0aGF0IGhhdmUgYmVlbiBmcm96ZW4gYnkgX2ZyZWV6ZURlZmluZWROb2Rlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXN0b3JlRnJvemVuTm9kZXMoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgZm9yIChjb25zdCBpZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlcywgaWQpKSB7XG4gICAgICAgIGlmICh0aGlzLmZyZWV6ZUNhY2hlW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbm9kZXNbaWRdLm9wdGlvbnMuZml4ZWQueCA9IHRoaXMuZnJlZXplQ2FjaGVbaWRdLng7XG4gICAgICAgICAgbm9kZXNbaWRdLm9wdGlvbnMuZml4ZWQueSA9IHRoaXMuZnJlZXplQ2FjaGVbaWRdLnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5mcmVlemVDYWNoZSA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSBzdGFibGUgcG9zaXRpb24gZm9yIGFsbCBub2Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2l0ZXJhdGlvbnM9dGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24uaXRlcmF0aW9uc11cbiAgICovXG4gIHN0YWJpbGl6ZShpdGVyYXRpb25zID0gdGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24uaXRlcmF0aW9ucykge1xuICAgIGlmICh0eXBlb2YgaXRlcmF0aW9ucyAhPT0gXCJudW1iZXJcIikge1xuICAgICAgaXRlcmF0aW9ucyA9IHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLml0ZXJhdGlvbnM7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIlRoZSBzdGFiaWxpemUgbWV0aG9kIG5lZWRzIGEgbnVtZXJpYyBhbW91bnQgb2YgaXRlcmF0aW9ucy4gU3dpdGNoaW5nIHRvIGRlZmF1bHQ6IFwiLFxuICAgICAgICBpdGVyYXRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGVuYWJsZSBhZGFwdGl2ZSB0aW1lc3RlcHNcbiAgICB0aGlzLmFkYXB0aXZlVGltZXN0ZXAgPSB0cnVlICYmIHRoaXMub3B0aW9ucy5hZGFwdGl2ZVRpbWVzdGVwO1xuXG4gICAgLy8gdGhpcyBzZXRzIHRoZSB3aWR0aCBvZiBhbGwgbm9kZXMgaW5pdGlhbGx5IHdoaWNoIGNvdWxkIGJlIHJlcXVpcmVkIGZvciB0aGUgYXZvaWRPdmVybGFwXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXNpemVOb2Rlc1wiKTtcblxuICAgIHRoaXMuc3RvcFNpbXVsYXRpb24oKTsgLy8gc3RvcCB0aGUgcmVuZGVyIGxvb3BcbiAgICB0aGlzLnN0YWJpbGl6ZWQgPSBmYWxzZTtcblxuICAgIC8vIGJsb2NrIHJlZHJhdyByZXF1ZXN0c1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfYmxvY2tSZWRyYXdcIik7XG4gICAgdGhpcy50YXJnZXRJdGVyYXRpb25zID0gaXRlcmF0aW9ucztcblxuICAgIC8vIHN0YXJ0IHRoZSBzdGFiaWxpemF0aW9uXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLm9ubHlEeW5hbWljRWRnZXMgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2ZyZWV6ZU5vZGVzKCk7XG4gICAgfVxuICAgIHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMgPSAwO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9zdGFiaWxpemF0aW9uQmF0Y2goKSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogSWYgbm90IGFscmVhZHkgc3RhYmlsaXppbmcsIHN0YXJ0IGl0IGFuZCBlbWl0IGEgc3RhcnQgZXZlbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHN0YWJpbGl6YXRpb24gc3RhcnRlZCB3aXRoIHRoaXMgY2FsbFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3N0YXJ0U3RhYmlsaXppbmcoKSB7XG4gICAgaWYgKHRoaXMuc3RhcnRlZFN0YWJpbGl6YXRpb24gPT09IHRydWUpIHJldHVybiBmYWxzZTtcblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFN0YWJpbGl6aW5nXCIpO1xuICAgIHRoaXMuc3RhcnRlZFN0YWJpbGl6YXRpb24gPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uZSBiYXRjaCBvZiBzdGFiaWxpemF0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RhYmlsaXphdGlvbkJhdGNoKCkge1xuICAgIGNvbnN0IHJ1bm5pbmcgPSAoKSA9PlxuICAgICAgdGhpcy5zdGFiaWxpemVkID09PSBmYWxzZSAmJlxuICAgICAgdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucyA8IHRoaXMudGFyZ2V0SXRlcmF0aW9ucztcblxuICAgIGNvbnN0IHNlbmRQcm9ncmVzcyA9ICgpID0+IHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFiaWxpemF0aW9uUHJvZ3Jlc3NcIiwge1xuICAgICAgICBpdGVyYXRpb25zOiB0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zLFxuICAgICAgICB0b3RhbDogdGhpcy50YXJnZXRJdGVyYXRpb25zLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLl9zdGFydFN0YWJpbGl6aW5nKCkpIHtcbiAgICAgIHNlbmRQcm9ncmVzcygpOyAvLyBFbnN1cmUgdGhhdCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc3RhcnQgZXZlbnQuXG4gICAgfVxuXG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICB3aGlsZSAocnVubmluZygpICYmIGNvdW50IDwgdGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24udXBkYXRlSW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMucGh5c2ljc1RpY2soKTtcbiAgICAgIGNvdW50Kys7XG4gICAgfVxuXG4gICAgc2VuZFByb2dyZXNzKCk7XG5cbiAgICBpZiAocnVubmluZygpKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMuX3N0YWJpbGl6YXRpb25CYXRjaC5iaW5kKHRoaXMpLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZmluYWxpemVTdGFiaWxpemF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdyYXAgdXAgdGhlIHN0YWJpbGl6YXRpb24sIGZpdCBhbmQgZW1pdCB0aGUgZXZlbnRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpbmFsaXplU3RhYmlsaXphdGlvbigpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2FsbG93UmVkcmF3XCIpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5maXQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJmaXRcIik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLm9ubHlEeW5hbWljRWRnZXMgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX3Jlc3RvcmVGcm96ZW5Ob2RlcygpO1xuICAgIH1cblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFiaWxpemF0aW9uSXRlcmF0aW9uc0RvbmVcIik7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuXG4gICAgaWYgKHRoaXMuc3RhYmlsaXplZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5fZW1pdFN0YWJpbGl6ZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydFNpbXVsYXRpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgfVxuXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERUJVR0dJTkcgQkVMT1cgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqIERlYnVnIGZ1bmN0aW9uIHRoYXQgZGlzcGxheSBhcnJvd3MgZm9yIHRoZSBmb3JjZXMgY3VycmVudGx5IGFjdGl2ZSBpbiB0aGUgbmV0d29yay5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiBkZWJ1Z2dpbmcgb25seS5cbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdGb3JjZXMoY3R4KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlc1tpXTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbaW5kZXhdO1xuICAgICAgY29uc3QgZm9yY2UgPSB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tpbmRleF07XG4gICAgICBjb25zdCBmYWN0b3IgPSAyMDtcbiAgICAgIGNvbnN0IGNvbG9yRmFjdG9yID0gMC4wMztcbiAgICAgIGNvbnN0IGZvcmNlU2l6ZSA9IE1hdGguc3FydChNYXRoLnBvdyhmb3JjZS54LCAyKSArIE1hdGgucG93KGZvcmNlLngsIDIpKTtcblxuICAgICAgY29uc3Qgc2l6ZSA9IE1hdGgubWluKE1hdGgubWF4KDUsIGZvcmNlU2l6ZSksIDE1KTtcbiAgICAgIGNvbnN0IGFycm93U2l6ZSA9IDMgKiBzaXplO1xuXG4gICAgICBjb25zdCBjb2xvciA9IEhTVlRvSGV4KFxuICAgICAgICAoMTgwIC0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgY29sb3JGYWN0b3IgKiBmb3JjZVNpemUpKSAqIDE4MCkgLyAzNjAsXG4gICAgICAgIDEsXG4gICAgICAgIDFcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHBvaW50ID0ge1xuICAgICAgICB4OiBub2RlLnggKyBmYWN0b3IgKiBmb3JjZS54LFxuICAgICAgICB5OiBub2RlLnkgKyBmYWN0b3IgKiBmb3JjZS55LFxuICAgICAgfTtcblxuICAgICAgY3R4LmxpbmVXaWR0aCA9IHNpemU7XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGN0eC5tb3ZlVG8obm9kZS54LCBub2RlLnkpO1xuICAgICAgY3R4LmxpbmVUbyhwb2ludC54LCBwb2ludC55KTtcbiAgICAgIGN0eC5zdHJva2UoKTtcblxuICAgICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKGZvcmNlLnksIGZvcmNlLngpO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuICAgICAgRW5kUG9pbnRzLmRyYXcoY3R4LCB7XG4gICAgICAgIHR5cGU6IFwiYXJyb3dcIixcbiAgICAgICAgcG9pbnQ6IHBvaW50LFxuICAgICAgICBhbmdsZTogYW5nbGUsXG4gICAgICAgIGxlbmd0aDogYXJyb3dTaXplLFxuICAgICAgfSk7XG4gICAgICBjdHguZmlsbCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQaHlzaWNzRW5naW5lO1xuIiwgIi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuIEluIHRoZSBicm93c2VyIHdlIHRoZXJlZm9yZVxuLy8gcmVxdWlyZSB0aGUgY3J5cHRvIEFQSSBhbmQgZG8gbm90IHN1cHBvcnQgYnVpbHQtaW4gZmFsbGJhY2sgdG8gbG93ZXIgcXVhbGl0eSByYW5kb20gbnVtYmVyXG4vLyBnZW5lcmF0b3JzIChsaWtlIE1hdGgucmFuZG9tKCkpLlxubGV0IGdldFJhbmRvbVZhbHVlcztcbmNvbnN0IHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcm5nKCkge1xuICAvLyBsYXp5IGxvYWQgc28gdGhhdCBlbnZpcm9ubWVudHMgdGhhdCBuZWVkIHRvIHBvbHlmaWxsIGhhdmUgYSBjaGFuY2UgdG8gZG8gc29cbiAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBnZXRSYW5kb21WYWx1ZXMgbmVlZHMgdG8gYmUgaW52b2tlZCBpbiBhIGNvbnRleHQgd2hlcmUgXCJ0aGlzXCIgaXMgYSBDcnlwdG8gaW1wbGVtZW50YXRpb24uXG4gICAgZ2V0UmFuZG9tVmFsdWVzID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKTtcblxuICAgIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59IiwgImltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuXG5jb25zdCBieXRlVG9IZXggPSBbXTtcblxuZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXgucHVzaCgoaSArIDB4MTAwKS50b1N0cmluZygxNikuc2xpY2UoMSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICAvLyBOb3RlOiBCZSBjYXJlZnVsIGVkaXRpbmcgdGhpcyBjb2RlISAgSXQncyBiZWVuIHR1bmVkIGZvciBwZXJmb3JtYW5jZVxuICAvLyBhbmQgd29ya3MgaW4gd2F5cyB5b3UgbWF5IG5vdCBleHBlY3QuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQvcHVsbC80MzRcbiAgcmV0dXJuIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIGNvbnN0IHV1aWQgPSB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQpOyAvLyBDb25zaXN0ZW5jeSBjaGVjayBmb3IgdmFsaWQgVVVJRC4gIElmIHRoaXMgdGhyb3dzLCBpdCdzIGxpa2VseSBkdWUgdG8gb25lXG4gIC8vIG9mIHRoZSBmb2xsb3dpbmc6XG4gIC8vIC0gT25lIG9yIG1vcmUgaW5wdXQgYXJyYXkgdmFsdWVzIGRvbid0IG1hcCB0byBhIGhleCBvY3RldCAobGVhZGluZyB0b1xuICAvLyBcInVuZGVmaW5lZFwiIGluIHRoZSB1dWlkKVxuICAvLyAtIEludmFsaWQgaW5wdXQgdmFsdWVzIGZvciB0aGUgUkZDIGB2ZXJzaW9uYCBvciBgdmFyaWFudGAgZmllbGRzXG5cbiAgaWYgKCF2YWxpZGF0ZSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaW5naWZ5OyIsICJjb25zdCByYW5kb21VVUlEID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLnJhbmRvbVVVSUQgJiYgY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pO1xuZXhwb3J0IGRlZmF1bHQge1xuICByYW5kb21VVUlEXG59OyIsICJpbXBvcnQgbmF0aXZlIGZyb20gJy4vbmF0aXZlLmpzJztcbmltcG9ydCBybmcgZnJvbSAnLi9ybmcuanMnO1xuaW1wb3J0IHsgdW5zYWZlU3RyaW5naWZ5IH0gZnJvbSAnLi9zdHJpbmdpZnkuanMnO1xuXG5mdW5jdGlvbiB2NChvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICBpZiAobmF0aXZlLnJhbmRvbVVVSUQgJiYgIWJ1ZiAmJiAhb3B0aW9ucykge1xuICAgIHJldHVybiBuYXRpdmUucmFuZG9tVVVJRCgpO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgcm5nKSgpOyAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXG5cbiAgcm5kc1s2XSA9IHJuZHNbNl0gJiAweDBmIHwgMHg0MDtcbiAgcm5kc1s4XSA9IHJuZHNbOF0gJiAweDNmIHwgMHg4MDsgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG5cbiAgaWYgKGJ1Zikge1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICBidWZbb2Zmc2V0ICsgaV0gPSBybmRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBidWY7XG4gIH1cblxuICByZXR1cm4gdW5zYWZlU3RyaW5naWZ5KHJuZHMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB2NDsiLCAiaW1wb3J0IHsgZGVlcEV4dGVuZCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBVdGlsaXR5IENsYXNzXG4gKi9cbmNsYXNzIE5ldHdvcmtVdGlsIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogRmluZCB0aGUgY2VudGVyIHBvc2l0aW9uIG9mIHRoZSBuZXR3b3JrIGNvbnNpZGVyaW5nIHRoZSBib3VuZGluZyBib3hlc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gYWxsTm9kZXNcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IFtzcGVjaWZpY05vZGVzPVtdXVxuICAgKiBAcmV0dXJucyB7e21pblg6IG51bWJlciwgbWF4WDogbnVtYmVyLCBtaW5ZOiBudW1iZXIsIG1heFk6IG51bWJlcn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRSYW5nZShhbGxOb2Rlcywgc3BlY2lmaWNOb2RlcyA9IFtdKSB7XG4gICAgbGV0IG1pblkgPSAxZTksXG4gICAgICBtYXhZID0gLTFlOSxcbiAgICAgIG1pblggPSAxZTksXG4gICAgICBtYXhYID0gLTFlOSxcbiAgICAgIG5vZGU7XG4gICAgaWYgKHNwZWNpZmljTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGVjaWZpY05vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5vZGUgPSBhbGxOb2Rlc1tzcGVjaWZpY05vZGVzW2ldXTtcbiAgICAgICAgaWYgKG1pblggPiBub2RlLnNoYXBlLmJvdW5kaW5nQm94LmxlZnQpIHtcbiAgICAgICAgICBtaW5YID0gbm9kZS5zaGFwZS5ib3VuZGluZ0JveC5sZWZ0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhYIDwgbm9kZS5zaGFwZS5ib3VuZGluZ0JveC5yaWdodCkge1xuICAgICAgICAgIG1heFggPSBub2RlLnNoYXBlLmJvdW5kaW5nQm94LnJpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW5ZID4gbm9kZS5zaGFwZS5ib3VuZGluZ0JveC50b3ApIHtcbiAgICAgICAgICBtaW5ZID0gbm9kZS5zaGFwZS5ib3VuZGluZ0JveC50b3A7XG4gICAgICAgIH0gLy8gdG9wIGlzIG5lZ2F0aXZlLCBib3R0b20gaXMgcG9zaXRpdmVcbiAgICAgICAgaWYgKG1heFkgPCBub2RlLnNoYXBlLmJvdW5kaW5nQm94LmJvdHRvbSkge1xuICAgICAgICAgIG1heFkgPSBub2RlLnNoYXBlLmJvdW5kaW5nQm94LmJvdHRvbTtcbiAgICAgICAgfSAvLyB0b3AgaXMgbmVnYXRpdmUsIGJvdHRvbSBpcyBwb3NpdGl2ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtaW5YID09PSAxZTkgJiYgbWF4WCA9PT0gLTFlOSAmJiBtaW5ZID09PSAxZTkgJiYgbWF4WSA9PT0gLTFlOSkge1xuICAgICAgKG1pblkgPSAwKSwgKG1heFkgPSAwKSwgKG1pblggPSAwKSwgKG1heFggPSAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbWluWDogbWluWCwgbWF4WDogbWF4WCwgbWluWTogbWluWSwgbWF4WTogbWF4WSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGNlbnRlciBwb3NpdGlvbiBvZiB0aGUgbmV0d29ya1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gYWxsTm9kZXNcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IFtzcGVjaWZpY05vZGVzPVtdXVxuICAgKiBAcmV0dXJucyB7e21pblg6IG51bWJlciwgbWF4WDogbnVtYmVyLCBtaW5ZOiBudW1iZXIsIG1heFk6IG51bWJlcn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRSYW5nZUNvcmUoYWxsTm9kZXMsIHNwZWNpZmljTm9kZXMgPSBbXSkge1xuICAgIGxldCBtaW5ZID0gMWU5LFxuICAgICAgbWF4WSA9IC0xZTksXG4gICAgICBtaW5YID0gMWU5LFxuICAgICAgbWF4WCA9IC0xZTksXG4gICAgICBub2RlO1xuICAgIGlmIChzcGVjaWZpY05vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BlY2lmaWNOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBub2RlID0gYWxsTm9kZXNbc3BlY2lmaWNOb2Rlc1tpXV07XG4gICAgICAgIGlmIChtaW5YID4gbm9kZS54KSB7XG4gICAgICAgICAgbWluWCA9IG5vZGUueDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4WCA8IG5vZGUueCkge1xuICAgICAgICAgIG1heFggPSBub2RlLng7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pblkgPiBub2RlLnkpIHtcbiAgICAgICAgICBtaW5ZID0gbm9kZS55O1xuICAgICAgICB9IC8vIHRvcCBpcyBuZWdhdGl2ZSwgYm90dG9tIGlzIHBvc2l0aXZlXG4gICAgICAgIGlmIChtYXhZIDwgbm9kZS55KSB7XG4gICAgICAgICAgbWF4WSA9IG5vZGUueTtcbiAgICAgICAgfSAvLyB0b3AgaXMgbmVnYXRpdmUsIGJvdHRvbSBpcyBwb3NpdGl2ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtaW5YID09PSAxZTkgJiYgbWF4WCA9PT0gLTFlOSAmJiBtaW5ZID09PSAxZTkgJiYgbWF4WSA9PT0gLTFlOSkge1xuICAgICAgKG1pblkgPSAwKSwgKG1heFkgPSAwKSwgKG1pblggPSAwKSwgKG1heFggPSAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbWluWDogbWluWCwgbWF4WDogbWF4WCwgbWluWTogbWluWSwgbWF4WTogbWF4WSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByYW5nZSA9IHttaW5YOiBtaW5YLCBtYXhYOiBtYXhYLCBtaW5ZOiBtaW5ZLCBtYXhZOiBtYXhZfTtcbiAgICogQHJldHVybnMge3t4OiBudW1iZXIsIHk6IG51bWJlcn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBmaW5kQ2VudGVyKHJhbmdlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IDAuNSAqIChyYW5nZS5tYXhYICsgcmFuZ2UubWluWCksXG4gICAgICB5OiAwLjUgKiAocmFuZ2UubWF4WSArIHJhbmdlLm1pblkpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyByZXR1cm5zIGEgY2xvbmUgb2YgdGhlIG9wdGlvbnMgb3Igb3B0aW9ucyBvZiB0aGUgZWRnZSBvciBub2RlIHRvIGJlIHVzZWQgZm9yIGNvbnN0cnVjdGlvbiBvZiBuZXcgZWRnZXMgb3IgY2hlY2sgZnVuY3Rpb25zIGZvciBuZXcgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkl0ZW19IGl0ZW1cbiAgICogQHBhcmFtIHsnbm9kZSd8dW5kZWZpbmVkfSB0eXBlXG4gICAqIEByZXR1cm5zIHt7fX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNsb25lT3B0aW9ucyhpdGVtLCB0eXBlKSB7XG4gICAgY29uc3QgY2xvbmVkT3B0aW9ucyA9IHt9O1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJub2RlXCIpIHtcbiAgICAgIGRlZXBFeHRlbmQoY2xvbmVkT3B0aW9ucywgaXRlbS5vcHRpb25zLCB0cnVlKTtcbiAgICAgIGNsb25lZE9wdGlvbnMueCA9IGl0ZW0ueDtcbiAgICAgIGNsb25lZE9wdGlvbnMueSA9IGl0ZW0ueTtcbiAgICAgIGNsb25lZE9wdGlvbnMuYW1vdW50T2ZDb25uZWN0aW9ucyA9IGl0ZW0uZWRnZXMubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWVwRXh0ZW5kKGNsb25lZE9wdGlvbnMsIGl0ZW0ub3B0aW9ucywgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZWRPcHRpb25zO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5ldHdvcmtVdGlsO1xuIiwgImltcG9ydCB7IGZvckVhY2ggfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgTm9kZSBmcm9tIFwiLi4vTm9kZVwiO1xuXG4vKipcbiAqIEEgQ2x1c3RlciBpcyBhIHNwZWNpYWwgTm9kZSB0aGF0IGFsbG93cyBhIGdyb3VwIG9mIE5vZGVzIHBvc2l0aW9uZWQgY2xvc2VseSB0b2dldGhlclxuICogdG8gYmUgcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgQ2x1c3RlciBOb2RlLlxuICpcbiAqIEBhdWdtZW50cyBOb2RlXG4gKi9cbmNsYXNzIENsdXN0ZXIgZXh0ZW5kcyBOb2RlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7QXJyYXkuPEhUTUxJbWFnZUVsZW1lbnQ+fWltYWdlbGlzdFxuICAgKiBAcGFyYW0ge0FycmF5fSBncm91cGxpc3RcbiAgICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbE9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRPcHRpb25zICAgICBHbG9iYWwgZGVmYXVsdCBvcHRpb25zIGZvciBub2Rlc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9ucyxcbiAgICBib2R5LFxuICAgIGltYWdlbGlzdCxcbiAgICBncm91cGxpc3QsXG4gICAgZ2xvYmFsT3B0aW9ucyxcbiAgICBkZWZhdWx0T3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBpbWFnZWxpc3QsIGdyb3VwbGlzdCwgZ2xvYmFsT3B0aW9ucywgZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5pc0NsdXN0ZXIgPSB0cnVlO1xuICAgIHRoaXMuY29udGFpbmVkTm9kZXMgPSB7fTtcbiAgICB0aGlzLmNvbnRhaW5lZEVkZ2VzID0ge307XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmZXIgY2hpbGQgY2x1c3RlciBkYXRhIHRvIGN1cnJlbnQgYW5kIGRpc2Nvbm5lY3QgdGhlIGNoaWxkIGNsdXN0ZXIuXG4gICAqXG4gICAqIFBsZWFzZSBjb25zdWx0IHRoZSBoZWFkZXIgY29tbWVudCBpbiAnQ2x1c3RlcmluZy5qcycgZm9yIHRoZSBmaWVsZHMgc2V0IGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gY2hpbGRDbHVzdGVySWQgIGlkIG9mIGNoaWxkIGNsdXN0ZXIgdG8gb3BlblxuICAgKi9cbiAgX29wZW5DaGlsZENsdXN0ZXIoY2hpbGRDbHVzdGVySWQpIHtcbiAgICBjb25zdCBjaGlsZENsdXN0ZXIgPSB0aGlzLmJvZHkubm9kZXNbY2hpbGRDbHVzdGVySWRdO1xuICAgIGlmICh0aGlzLmNvbnRhaW5lZE5vZGVzW2NoaWxkQ2x1c3RlcklkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwibm9kZSB3aXRoIGlkOiBcIiArIGNoaWxkQ2x1c3RlcklkICsgXCIgbm90IGluIGN1cnJlbnQgY2x1c3RlclwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWNoaWxkQ2x1c3Rlci5pc0NsdXN0ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vZGUgd2l0aCBpZDogXCIgKyBjaGlsZENsdXN0ZXJJZCArIFwiIGlzIG5vdCBhIGNsdXN0ZXJcIik7XG4gICAgfVxuXG4gICAgLy8gRGlzY29ubmVjdCBjaGlsZCBjbHVzdGVyIGZyb20gY3VycmVudCBjbHVzdGVyXG4gICAgZGVsZXRlIHRoaXMuY29udGFpbmVkTm9kZXNbY2hpbGRDbHVzdGVySWRdO1xuICAgIGZvckVhY2goY2hpbGRDbHVzdGVyLmVkZ2VzLCAoZWRnZSkgPT4ge1xuICAgICAgZGVsZXRlIHRoaXMuY29udGFpbmVkRWRnZXNbZWRnZS5pZF07XG4gICAgfSk7XG5cbiAgICAvLyBUcmFuc2ZlciBub2RlcyBhbmQgZWRnZXNcbiAgICBmb3JFYWNoKGNoaWxkQ2x1c3Rlci5jb250YWluZWROb2RlcywgKG5vZGUsIG5vZGVJZCkgPT4ge1xuICAgICAgdGhpcy5jb250YWluZWROb2Rlc1tub2RlSWRdID0gbm9kZTtcbiAgICB9KTtcbiAgICBjaGlsZENsdXN0ZXIuY29udGFpbmVkTm9kZXMgPSB7fTtcblxuICAgIGZvckVhY2goY2hpbGRDbHVzdGVyLmNvbnRhaW5lZEVkZ2VzLCAoZWRnZSwgZWRnZUlkKSA9PiB7XG4gICAgICB0aGlzLmNvbnRhaW5lZEVkZ2VzW2VkZ2VJZF0gPSBlZGdlO1xuICAgIH0pO1xuICAgIGNoaWxkQ2x1c3Rlci5jb250YWluZWRFZGdlcyA9IHt9O1xuXG4gICAgLy8gVHJhbnNmZXIgZWRnZXMgd2l0aGluIGNsdXN0ZXIgZWRnZXMgd2hpY2ggYXJlIGNsdXN0ZXJlZFxuICAgIGZvckVhY2goY2hpbGRDbHVzdGVyLmVkZ2VzLCAoY2x1c3RlckVkZ2UpID0+IHtcbiAgICAgIGZvckVhY2godGhpcy5lZGdlcywgKHBhcmVudENsdXN0ZXJFZGdlKSA9PiB7XG4gICAgICAgIC8vIEFzc3VtcHRpb246IGEgY2x1c3RlcmVkIGVkZ2UgY2FuIG9ubHkgYmUgcHJlc2VudCBpbiBhIHNpbmdsZSBjbHVzdGVyaW5nIGVkZ2VcbiAgICAgICAgLy8gTm90IHRlc3RlZCBoZXJlXG4gICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50Q2x1c3RlckVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMuaW5kZXhPZihcbiAgICAgICAgICBjbHVzdGVyRWRnZS5pZFxuICAgICAgICApO1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICAgICAgZm9yRWFjaChjbHVzdGVyRWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcywgKHNyY0lkKSA9PiB7XG4gICAgICAgICAgcGFyZW50Q2x1c3RlckVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMucHVzaChzcmNJZCk7XG5cbiAgICAgICAgICAvLyBNYWludGFpbiBjb3JyZWN0IGJvb2trZWVwaW5nIGZvciB0cmFuc2ZlcnJlZCBlZGdlXG4gICAgICAgICAgdGhpcy5ib2R5LmVkZ2VzW3NyY0lkXS5lZGdlUmVwbGFjZWRCeUlkID0gcGFyZW50Q2x1c3RlckVkZ2UuaWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlbW92ZSBjbHVzdGVyIGVkZ2UgZnJvbSBwYXJlbnQgY2x1c3RlciBlZGdlXG4gICAgICAgIHBhcmVudENsdXN0ZXJFZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjaGlsZENsdXN0ZXIuZWRnZXMgPSBbXTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDbHVzdGVyO1xuIiwgIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4jIFRPRE9cblxuLSBgZWRnZVJlcGxhY2VkQnlJZGAgbm90IGNsZWFuZWQgdXAgeWV0IG9uIGNsdXN0ZXIgZWRnZSByZW1vdmFsXG4tIGFsbG93U2luZ2xlTm9kZUNsdXN0ZXIgY291bGQgYmUgYSBnbG9iYWwgb3B0aW9uIGFzIHdlbGw7IGN1cnJlbnRseSBuZWVkcyB0byBhbHdheXNcbiAgYmUgcGFzc2VkIHRvIGNsdXN0ZXJpbmcgbWV0aG9kc1xuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiMgU3RhdGUgTW9kZWwgZm9yIENsdXN0ZXJpbmdcblxuVGhlIHRvdGFsIHN0YXRlIGZvciBjbHVzdGVyaW5nIGlzIG5vbi10cml2aWFsLiBJdCBpcyB1c2VmdWwgdG8gaGF2ZSBhIG1vZGVsXG5hdmFpbGFibGUgYXMgdG8gaG93IGl0IHdvcmtzLiBUaGUgZm9sbG93aW5nIGRvY3VtZW50cyB0aGUgcmVsZXZhbnQgc3RhdGUgaXRlbXMuXG5cblxuIyMgTmV0d29yayBTdGF0ZVxuXG5UaGUgZm9sbG93aW5nIGBuZXR3b3JrYC1tZW1iZXJzIGFyZSByZWxldmFudCB0byBjbHVzdGVyaW5nOlxuXG4tIGBib2R5Lm5vZGVzYCAgICAgICAtIGFsbCBub2RlcyBhY3RpdmVseSBwYXJ0aWNpcGF0aW5nIGluIHRoZSBuZXR3b3JrXG4tIGBib2R5LmVkZ2VzYCAgICAgICAtIHNhbWUgZm9yIGVkZ2VzXG4tIGBib2R5Lm5vZGVJbmRpY2VzYCAtIGlkJ3Mgb2Ygbm9kZXMgdGhhdCBhcmUgdmlzaWJsZSBhdCBhIGdpdmVuIG1vbWVudFxuLSBgYm9keS5lZGdlSW5kaWNlc2AgLSBzYW1lIGZvciBlZGdlc1xuXG5UaGlzIGluY2x1ZGVzOlxuXG4tIGhlbHBlciBub2RlcyBmb3IgZHJhZ2dpbmcgaW4gYG1hbmlwdWxhdGlvbmBcbi0gaGVscGVyIG5vZGVzIGZvciBlZGdlIHR5cGUgYGR5bmFtaWNgXG4tIGNsdXN0ZXIgbm9kZXMgYW5kIGVkZ2VzXG4tIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gdGhpcy5cblxuQSBub2RlL2VkZ2UgbWF5IGJlIG1pc3NpbmcgaW4gdGhlIGBJbmRpY2VzYCBtZW1iZXIgaWY6XG5cbi0gaXQgaXMgYSBoZWxwZXIgbm9kZVxuLSB0aGUgbm9kZSBvciBlZGdlIHN0YXRlIGhhcyBvcHRpb24gYGhpZGRlbmAgc2V0XG4tIEl0IGlzIG5vdCB2aXNpYmxlIGR1ZSB0byBjbHVzdGVyaW5nXG5cblxuIyMgQ2x1c3RlcmluZyBTdGF0ZVxuXG5Gb3IgdGhlIGhhc2hlcywgdGhlIGlkJ3Mgb2YgdGhlIG5vZGVzL2VkZ2VzIGFyZSB1c2VkIGFzIGtleS5cblxuTWVtYmVyIGBuZXR3b3JrLmNsdXN0ZXJpbmdgIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgaXRlbXM6XG5cbi0gYGNsdXN0ZXJlZE5vZGVzYCAtIGhhc2ggd2l0aCB2YWx1ZXM6IHsgY2x1c3RlcklkOiA8aWQgb2YgY2x1c3Rlcj4sIG5vZGU6IDxub2RlIGluc3RhbmNlPn1cbi0gYGNsdXN0ZXJlZEVkZ2VzYCAtIGhhc2ggd2l0aCB2YWx1ZXM6IHJlc3RvcmUgaW5mb3JtYXRpb24gZm9yIGdpdmVuIGVkZ2VcblxuXG5EdWUgdG8gbmVzdGluZyBvZiBjbHVzdGVycywgdGhlc2UgbWVtYmVycyBjYW4gY29udGFpbiBjbHVzdGVyIG5vZGVzIGFuZCBlZGdlcyBhcyB3ZWxsLlxuXG5UaGUgaW1wb3J0YW50IHRoaW5nIHRvIG5vdGUgaGVyZSwgaXMgdGhhdCB0aGUgY2x1c3RlcmVkIG5vZGVzIGFuZCBlZGdlcyBhbHNvXG5hcHBlYXIgaW4gdGhlIG1lbWJlcnMgb2YgdGhlIGNsdXN0ZXIgbm9kZXMuIEZvciBkYXRhIHVwZGF0ZSwgaXQgaXMgdGhlcmVmb3JlXG5pbXBvcnRhbnQgdG8gc2NhbiB0aGVzZSBsaXN0cyBhcyB3ZWxsIGFzIHRoZSBjbHVzdGVyIG5vZGVzLlxuXG5cbiMjIyBDbHVzdGVyIE5vZGVcblxuQSBjbHVzdGVyIG5vZGUgaGFzIHRoZSBmb2xsb3dpbmcgZXh0cmEgZmllbGRzOlxuXG4tIGBpc0NsdXN0ZXIgOiB0cnVlYCAtIGluZGljYXRpb24gdGhhdCB0aGlzIGlzIGEgY2x1c3RlciBub2RlXG4tIGBjb250YWluZWROb2Rlc2AgICAtIGhhc2ggb2Ygbm9kZXMgY29udGFpbmVkIGluIHRoaXMgY2x1c3RlclxuLSBgY29udGFpbmVkRWRnZXNgICAgLSBzYW1lIGZvciBlZGdlc1xuLSBgZWRnZXNgICAgICAgICAgICAgLSBhcnJheSBvZiBjbHVzdGVyIGVkZ2VzIGZvciB0aGlzIG5vZGVcblxuXG4qKk5PVEU6KipcblxuLSBgY29udGFpbmVkRWRnZXNgIGNhbiBhbHNvIGNvbnRhaW4gZWRnZXMgd2hpY2ggYXJlIG5vdCBjbHVzdGVyZWQ7IGUuZy4gYW4gZWRnZVxuICAgY29ubmVjdGluZyB0d28gbm9kZXMgaW4gdGhlIHNhbWUgY2x1c3Rlci5cblxuXG4jIyMgQ2x1c3RlciBFZGdlXG5cblRoZXNlIGFyZSB0aGUgaXRlbXMgaW4gdGhlIGBlZGdlc2AgbWVtYmVyIG9mIGEgY2x1c3RlcmVkIG5vZGUuIFRoZXkgaGF2ZSB0aGVcbmZvbGxvd2luZyByZWxldmFudCBtZW1iZXJzOlxuXG4tICdjbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkc2AgLSBhcnJheSBvZiBpZCdzIG9mIGVkZ2VzIHJlcGxhY2VkIGJ5IHRoaXMgZWRnZVxuXG5Ob3RlIHRoYXQgaXQncyBwb3NzaWJsZSB0byBuZXN0IGNsdXN0ZXJzLCBzbyB0aGF0IGBjbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkc2BcbmNhbiBjb250YWluIGVkZ2UgaWQncyBvZiBvdGhlciBjbHVzdGVycy5cblxuXG4jIyMgQ2x1c3RlcmVkIEVkZ2VcblxuVGhpcyBpcyBhbnkgZWRnZSBjb250YWluZWQgYnkgYSBjbHVzdGVyIGVkZ2UuIEl0IGdldHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsXG5tZW1iZXI6XG5cbi0gYGVkZ2VSZXBsYWNlZEJ5SWRgIC0gaWQgb2YgdGhlIGNsdXN0ZXIgZWRnZSBpbiB3aGljaCBjdXJyZW50IGVkZ2UgaXMgY2x1c3RlcmVkXG5cblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5pbXBvcnQgeyBkZWVwRXh0ZW5kLCBmb3JFYWNoIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgdjQgYXMgcmFuZG9tVVVJRCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgTmV0d29ya1V0aWwgZnJvbSBcIi4uL05ldHdvcmtVdGlsXCI7XG5pbXBvcnQgQ2x1c3RlciBmcm9tIFwiLi9jb21wb25lbnRzL25vZGVzL0NsdXN0ZXJcIjtcbmltcG9ydCBFZGdlIGZyb20gXCIuL2NvbXBvbmVudHMvRWRnZVwiOyAvLyBPbmx5IG5lZWRlZCBmb3IgY2hlY2sgb24gdHlwZSFcbmltcG9ydCBOb2RlIGZyb20gXCIuL2NvbXBvbmVudHMvTm9kZVwiOyAvLyBPbmx5IG5lZWRlZCBmb3IgY2hlY2sgb24gdHlwZSFcblxuLyoqXG4gKiBUaGUgY2x1c3RlcmluZyBlbmdpbmVcbiAqL1xuY2xhc3MgQ2x1c3RlckVuZ2luZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5jbHVzdGVyZWROb2RlcyA9IHt9OyAvLyBrZXk6IG5vZGUgaWQsIHZhbHVlOiB7IGNsdXN0ZXJJZDogPGlkIG9mIGNsdXN0ZXI+LCBub2RlOiA8bm9kZSBpbnN0YW5jZT59XG4gICAgdGhpcy5jbHVzdGVyZWRFZGdlcyA9IHt9OyAvLyBrZXk6IGVkZ2UgaWQsIHZhbHVlOiByZXN0b3JlIGluZm9ybWF0aW9uIGZvciBnaXZlbiBlZGdlXG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge307XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfcmVzZXREYXRhXCIsICgpID0+IHtcbiAgICAgIHRoaXMuY2x1c3RlcmVkTm9kZXMgPSB7fTtcbiAgICAgIHRoaXMuY2x1c3RlcmVkRWRnZXMgPSB7fTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaHVic2l6ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgY2x1c3RlckJ5SHVic2l6ZShodWJzaXplLCBvcHRpb25zKSB7XG4gICAgaWYgKGh1YnNpemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaHVic2l6ZSA9IHRoaXMuX2dldEh1YlNpemUoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBodWJzaXplID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBvcHRpb25zID0gdGhpcy5fY2hlY2tPcHRpb25zKGh1YnNpemUpO1xuICAgICAgaHVic2l6ZSA9IHRoaXMuX2dldEh1YlNpemUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBub2Rlc1RvQ2x1c3RlciA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV07XG4gICAgICBpZiAobm9kZS5lZGdlcy5sZW5ndGggPj0gaHVic2l6ZSkge1xuICAgICAgICBub2Rlc1RvQ2x1c3Rlci5wdXNoKG5vZGUuaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNUb0NsdXN0ZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2x1c3RlckJ5Q29ubmVjdGlvbihub2Rlc1RvQ2x1c3RlcltpXSwgb3B0aW9ucywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBsb29wIG92ZXIgYWxsIG5vZGVzLCBjaGVjayBpZiB0aGV5IGFkaGVyZSB0byB0aGUgY29uZGl0aW9uIGFuZCBjbHVzdGVyIGlmIG5lZWRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVmcmVzaERhdGE9dHJ1ZV1cbiAgICovXG4gIGNsdXN0ZXIob3B0aW9ucyA9IHt9LCByZWZyZXNoRGF0YSA9IHRydWUpIHtcbiAgICBpZiAob3B0aW9ucy5qb2luQ29uZGl0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgY2FsbCBjbHVzdGVyQnlOb2RlRGF0YSB3aXRob3V0IGEgam9pbkNvbmRpdGlvbiBmdW5jdGlvbiBpbiB0aGUgb3B0aW9ucy5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgb3B0aW9ucyBvYmplY3QgaXMgZmluZSwgYXBwZW5kIGlmIG5lZWRlZFxuICAgIG9wdGlvbnMgPSB0aGlzLl9jaGVja09wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBjb25zdCBjaGlsZE5vZGVzT2JqID0ge307XG4gICAgY29uc3QgY2hpbGRFZGdlc09iaiA9IHt9O1xuXG4gICAgLy8gY29sbGVjdCB0aGUgbm9kZXMgdGhhdCB3aWxsIGJlIGluIHRoZSBjbHVzdGVyXG4gICAgZm9yRWFjaCh0aGlzLmJvZHkubm9kZXMsIChub2RlLCBub2RlSWQpID0+IHtcbiAgICAgIGlmIChub2RlLm9wdGlvbnMgJiYgb3B0aW9ucy5qb2luQ29uZGl0aW9uKG5vZGUub3B0aW9ucykgPT09IHRydWUpIHtcbiAgICAgICAgY2hpbGROb2Rlc09ialtub2RlSWRdID0gbm9kZTtcblxuICAgICAgICAvLyBjb2xsZWN0IHRoZSBlZGdlcyB0aGF0IHdpbGwgYmUgaW4gdGhlIGNsdXN0ZXJcbiAgICAgICAgZm9yRWFjaChub2RlLmVkZ2VzLCAoZWRnZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNoaWxkRWRnZXNPYmpbZWRnZS5pZF0gPSBlZGdlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9jbHVzdGVyKGNoaWxkTm9kZXNPYmosIGNoaWxkRWRnZXNPYmosIG9wdGlvbnMsIHJlZnJlc2hEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbHVzdGVyIGFsbCBub2RlcyBpbiB0aGUgbmV0d29yayB0aGF0IGhhdmUgb25seSBYIGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlZGdlQ291bnRcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVmcmVzaERhdGE9dHJ1ZV1cbiAgICovXG4gIGNsdXN0ZXJCeUVkZ2VDb3VudChlZGdlQ291bnQsIG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIG9wdGlvbnMgPSB0aGlzLl9jaGVja09wdGlvbnMob3B0aW9ucyk7XG4gICAgY29uc3QgY2x1c3RlcnMgPSBbXTtcbiAgICBjb25zdCB1c2VkTm9kZXMgPSB7fTtcbiAgICBsZXQgZWRnZSwgZWRnZXMsIHJlbGV2YW50RWRnZUNvdW50O1xuICAgIC8vIGNvbGxlY3QgdGhlIG5vZGVzIHRoYXQgd2lsbCBiZSBpbiB0aGUgY2x1c3RlclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGlsZE5vZGVzT2JqID0ge307XG4gICAgICBjb25zdCBjaGlsZEVkZ2VzT2JqID0ge307XG4gICAgICBjb25zdCBub2RlSWQgPSB0aGlzLmJvZHkubm9kZUluZGljZXNbaV07XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG5cbiAgICAgIC8vIGlmIHRoaXMgbm9kZSBpcyBhbHJlYWR5IHVzZWQgaW4gYW5vdGhlciBjbHVzdGVyIHRoaXMgc2Vzc2lvbiwgd2UgZG8gbm90IGhhdmUgdG8gcmUtZXZhbHVhdGUgaXQuXG4gICAgICBpZiAodXNlZE5vZGVzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZWxldmFudEVkZ2VDb3VudCA9IDA7XG4gICAgICAgIGVkZ2VzID0gW107XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbm9kZS5lZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGVkZ2UgPSBub2RlLmVkZ2VzW2pdO1xuICAgICAgICAgIGlmICh0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChlZGdlLnRvSWQgIT09IGVkZ2UuZnJvbUlkKSB7XG4gICAgICAgICAgICAgIHJlbGV2YW50RWRnZUNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMgbm9kZSBxdWFsaWZpZXMsIHdlIGNvbGxlY3QgaXRzIG5laWdoYm91cnMgdG8gc3RhcnQgdGhlIGNsdXN0ZXJpbmcgcHJvY2Vzcy5cbiAgICAgICAgaWYgKHJlbGV2YW50RWRnZUNvdW50ID09PSBlZGdlQ291bnQpIHtcbiAgICAgICAgICBjb25zdCBjaGVja0pvaW5Db25kaXRpb24gPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBvcHRpb25zLmpvaW5Db25kaXRpb24gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBvcHRpb25zLmpvaW5Db25kaXRpb24gPT09IG51bGxcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2xvbmVkT3B0aW9ucyA9IE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhub2RlKTtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmpvaW5Db25kaXRpb24oY2xvbmVkT3B0aW9ucyk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGxldCBnYXRoZXJpbmdTdWNjZXNzZnVsID0gdHJ1ZTtcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVkZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBlZGdlID0gZWRnZXNbal07XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVJZCA9IHRoaXMuX2dldENvbm5lY3RlZElkKGVkZ2UsIG5vZGVJZCk7XG4gICAgICAgICAgICAvLyBhZGQgdGhlIG5vZGVzIHRvIHRoZSBsaXN0IGJ5IHRoZSBqb2luIGNvbmRpdGlvbi5cbiAgICAgICAgICAgIGlmIChjaGVja0pvaW5Db25kaXRpb24obm9kZSkpIHtcbiAgICAgICAgICAgICAgY2hpbGRFZGdlc09ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZXNPYmpbbm9kZUlkXSA9IG5vZGU7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZXNPYmpbY2hpbGROb2RlSWRdID0gdGhpcy5ib2R5Lm5vZGVzW2NoaWxkTm9kZUlkXTtcbiAgICAgICAgICAgICAgdXNlZE5vZGVzW25vZGVJZF0gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gdGhpcyBub2RlIGRvZXMgbm90IHF1YWxpZnkgYWZ0ZXIgYWxsLlxuICAgICAgICAgICAgICBnYXRoZXJpbmdTdWNjZXNzZnVsID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGFkZCB0byB0aGUgY2x1c3RlciBxdWV1ZVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNoaWxkTm9kZXNPYmopLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNoaWxkRWRnZXNPYmopLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGdhdGhlcmluZ1N1Y2Nlc3NmdWwgPT09IHRydWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU2VhcmNoIGZvciBjbHVzdGVyIGRhdGEgdGhhdCBjb250YWlucyBhbnkgb2YgdGhlIG5vZGUgaWQnc1xuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIG5vIGpvaW5Db25kaXRpb24sIG90aGVyd2lzZSByZXR1cm4gdmFsdWUgb2Ygam9pbkNvbmRpdGlvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBmaW5kQ2x1c3RlckRhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgY2x1c3RlcnMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICAvLyBTZWFyY2ggZm9yIGEgY2x1c3RlciBjb250YWluaW5nIGFueSBvZiB0aGUgbm9kZSBpZCdzXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtIGluIGNoaWxkTm9kZXNPYmopIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjbHVzdGVyc1tuXS5ub2Rlc1ttXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHVzdGVyc1tuXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gSWYgYW55IG9mIHRoZSBmb3VuZCBub2RlcyBpcyBwYXJ0IG9mIGEgY2x1c3RlciBmb3VuZCBpbiB0aGlzIG1ldGhvZCxcbiAgICAgICAgICAgIC8vIGFkZCB0aGUgY3VycmVudCB2YWx1ZXMgdG8gdGhhdCBjbHVzdGVyXG4gICAgICAgICAgICBjb25zdCBmb3VuZENsdXN0ZXIgPSBmaW5kQ2x1c3RlckRhdGEoKTtcbiAgICAgICAgICAgIGlmIChmb3VuZENsdXN0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyBBZGQgbm9kZXMgdG8gZm91bmQgY2x1c3RlciBpZiBub3QgcHJlc2VudFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gaW4gY2hpbGROb2Rlc09iaikge1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZENsdXN0ZXIubm9kZXNbbV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgZm91bmRDbHVzdGVyLm5vZGVzW21dID0gY2hpbGROb2Rlc09ialttXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBBZGQgZWRnZXMgdG8gZm91bmQgY2x1c3RlciwgaWYgbm90IHByZXNlbnRcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtIGluIGNoaWxkRWRnZXNPYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmRDbHVzdGVyLmVkZ2VzW21dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGZvdW5kQ2x1c3Rlci5lZGdlc1ttXSA9IGNoaWxkRWRnZXNPYmpbbV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgY2x1c3RlciBncm91cFxuICAgICAgICAgICAgICBjbHVzdGVycy5wdXNoKHsgbm9kZXM6IGNoaWxkTm9kZXNPYmosIGVkZ2VzOiBjaGlsZEVkZ2VzT2JqIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2x1c3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2NsdXN0ZXIoY2x1c3RlcnNbaV0ubm9kZXMsIGNsdXN0ZXJzW2ldLmVkZ2VzLCBvcHRpb25zLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHJlZnJlc2hEYXRhID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbHVzdGVyIGFsbCBub2RlcyBpbiB0aGUgbmV0d29yayB0aGF0IGhhdmUgb25seSAxIGVkZ2VcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVmcmVzaERhdGE9dHJ1ZV1cbiAgICovXG4gIGNsdXN0ZXJPdXRsaWVycyhvcHRpb25zLCByZWZyZXNoRGF0YSA9IHRydWUpIHtcbiAgICB0aGlzLmNsdXN0ZXJCeUVkZ2VDb3VudCgxLCBvcHRpb25zLCByZWZyZXNoRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQ2x1c3RlciBhbGwgbm9kZXMgaW4gdGhlIG5ldHdvcmsgdGhhdCBoYXZlIG9ubHkgMiBlZGdlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlZnJlc2hEYXRhPXRydWVdXG4gICAqL1xuICBjbHVzdGVyQnJpZGdlcyhvcHRpb25zLCByZWZyZXNoRGF0YSA9IHRydWUpIHtcbiAgICB0aGlzLmNsdXN0ZXJCeUVkZ2VDb3VudCgyLCBvcHRpb25zLCByZWZyZXNoRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogc3VjayBhbGwgY29ubmVjdGVkIG5vZGVzIG9mIGEgbm9kZSBpbnRvIHRoZSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWZyZXNoRGF0YT10cnVlXVxuICAgKi9cbiAgY2x1c3RlckJ5Q29ubmVjdGlvbihub2RlSWQsIG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIC8vIGtpbGwgY29uZGl0aW9uc1xuICAgIGlmIChub2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbm9kZUlkIHN1cHBsaWVkIHRvIGNsdXN0ZXJCeUNvbm5lY3Rpb24hXCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSBub2RlSWQgZ2l2ZW4gdG8gY2x1c3RlckJ5Q29ubmVjdGlvbiBkb2VzIG5vdCBleGlzdCFcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgb3B0aW9ucyA9IHRoaXMuX2NoZWNrT3B0aW9ucyhvcHRpb25zLCBub2RlKTtcbiAgICBpZiAob3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMueCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy54ID0gbm9kZS54O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMueSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy55ID0gbm9kZS55O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuZml4ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuZml4ZWQgPSB7fTtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmZpeGVkLnggPSBub2RlLm9wdGlvbnMuZml4ZWQueDtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmZpeGVkLnkgPSBub2RlLm9wdGlvbnMuZml4ZWQueTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZE5vZGVzT2JqID0ge307XG4gICAgY29uc3QgY2hpbGRFZGdlc09iaiA9IHt9O1xuICAgIGNvbnN0IHBhcmVudE5vZGVJZCA9IG5vZGUuaWQ7XG4gICAgY29uc3QgcGFyZW50Q2xvbmVkT3B0aW9ucyA9IE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhub2RlKTtcbiAgICBjaGlsZE5vZGVzT2JqW3BhcmVudE5vZGVJZF0gPSBub2RlO1xuXG4gICAgLy8gY29sbGVjdCB0aGUgbm9kZXMgdGhhdCB3aWxsIGJlIGluIHRoZSBjbHVzdGVyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gbm9kZS5lZGdlc1tpXTtcbiAgICAgIGlmICh0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlSWQgPSB0aGlzLl9nZXRDb25uZWN0ZWRJZChlZGdlLCBwYXJlbnROb2RlSWQpO1xuXG4gICAgICAgIC8vIGlmIHRoZSBjaGlsZCBub2RlIGlzIG5vdCBpbiBhIGNsdXN0ZXJcbiAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkTm9kZXNbY2hpbGROb2RlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoY2hpbGROb2RlSWQgIT09IHBhcmVudE5vZGVJZCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuam9pbkNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGNoaWxkRWRnZXNPYmpbZWRnZS5pZF0gPSBlZGdlO1xuICAgICAgICAgICAgICBjaGlsZE5vZGVzT2JqW2NoaWxkTm9kZUlkXSA9IHRoaXMuYm9keS5ub2Rlc1tjaGlsZE5vZGVJZF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBjbG9uZSB0aGUgb3B0aW9ucyBhbmQgaW5zZXJ0IHNvbWUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcuXG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ2xvbmVkT3B0aW9ucyA9IE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhcbiAgICAgICAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbY2hpbGROb2RlSWRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBvcHRpb25zLmpvaW5Db25kaXRpb24oXG4gICAgICAgICAgICAgICAgICBwYXJlbnRDbG9uZWRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgY2hpbGRDbG9uZWRPcHRpb25zXG4gICAgICAgICAgICAgICAgKSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2UuaWRdID0gZWRnZTtcbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVzT2JqW2NoaWxkTm9kZUlkXSA9IHRoaXMuYm9keS5ub2Rlc1tjaGlsZE5vZGVJZF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc3dhbGxvdyB0aGUgZWRnZSBpZiBpdCBpcyBzZWxmLXJlZmVyZW5jaW5nLlxuICAgICAgICAgICAgY2hpbGRFZGdlc09ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkTm9kZUlEcyA9IE9iamVjdC5rZXlzKGNoaWxkTm9kZXNPYmopLm1hcChmdW5jdGlvbiAoY2hpbGROb2RlKSB7XG4gICAgICByZXR1cm4gY2hpbGROb2Rlc09ialtjaGlsZE5vZGVdLmlkO1xuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZE5vZGVLZXkgaW4gY2hpbGROb2Rlc09iaikge1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hpbGROb2Rlc09iaiwgY2hpbGROb2RlS2V5KSlcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGNoaWxkTm9kZXNPYmpbY2hpbGROb2RlS2V5XTtcbiAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgY2hpbGROb2RlLmVkZ2VzLmxlbmd0aDsgeSsrKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkRWRnZSA9IGNoaWxkTm9kZS5lZGdlc1t5XTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoaWxkTm9kZUlEcy5pbmRleE9mKHRoaXMuX2dldENvbm5lY3RlZElkKGNoaWxkRWRnZSwgY2hpbGROb2RlLmlkKSkgPlxuICAgICAgICAgIC0xXG4gICAgICAgICkge1xuICAgICAgICAgIGNoaWxkRWRnZXNPYmpbY2hpbGRFZGdlLmlkXSA9IGNoaWxkRWRnZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9jbHVzdGVyKGNoaWxkTm9kZXNPYmosIGNoaWxkRWRnZXNPYmosIG9wdGlvbnMsIHJlZnJlc2hEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGVkZ2VzIHRoYXQgd2lsbCBiZSBhdHRhY2hlZCB0byB0aGUgY2x1c3RlclxuICAgKiBJdCBsb29rcyBmb3IgZWRnZXMgdGhhdCBhcmUgY29ubmVjdGVkIHRvIHRoZSBub2RlcyBmcm9tIHRoZSBcIm91dHNpZGUnIG9mIHRoZSBjbHVzdGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3tOb2RlLmlkOiB2aXMuTm9kZX19IGNoaWxkTm9kZXNPYmpcbiAgICogQHBhcmFtIHt7dmlzLkVkZ2UuaWQ6IHZpcy5FZGdlfX0gY2hpbGRFZGdlc09ialxuICAgKiBAcGFyYW0ge29iamVjdH0gY2x1c3Rlck5vZGVQcm9wZXJ0aWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjbHVzdGVyRWRnZVByb3BlcnRpZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVDbHVzdGVyRWRnZXMoXG4gICAgY2hpbGROb2Rlc09iaixcbiAgICBjaGlsZEVkZ2VzT2JqLFxuICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcyxcbiAgICBjbHVzdGVyRWRnZVByb3BlcnRpZXNcbiAgKSB7XG4gICAgbGV0IGVkZ2UsIGNoaWxkTm9kZUlkLCBjaGlsZE5vZGUsIHRvSWQsIGZyb21JZCwgb3RoZXJOb2RlSWQ7XG5cbiAgICAvLyBsb29wIG92ZXIgYWxsIGNoaWxkIG5vZGVzIGFuZCB0aGVpciBlZGdlcyB0byBmaW5kIGVkZ2VzIGdvaW5nIG91dCBvZiB0aGUgY2x1c3RlclxuICAgIC8vIHRoZXNlIGVkZ2VzIHdpbGwgYmUgcmVwbGFjZWQgYnkgY2x1c3RlckVkZ2VzLlxuICAgIGNvbnN0IGNoaWxkS2V5cyA9IE9iamVjdC5rZXlzKGNoaWxkTm9kZXNPYmopO1xuICAgIGNvbnN0IGNyZWF0ZUVkZ2VzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkTm9kZUlkID0gY2hpbGRLZXlzW2ldO1xuICAgICAgY2hpbGROb2RlID0gY2hpbGROb2Rlc09ialtjaGlsZE5vZGVJZF07XG5cbiAgICAgIC8vIGNvbnN0cnVjdCBuZXcgZWRnZXMgZnJvbSB0aGUgY2x1c3RlciB0byBvdGhlcnNcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2hpbGROb2RlLmVkZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGVkZ2UgPSBjaGlsZE5vZGUuZWRnZXNbal07XG4gICAgICAgIC8vIHdlIG9ubHkgaGFuZGxlIGVkZ2VzIHRoYXQgYXJlIHZpc2libGUgdG8gdGhlIHN5c3RlbSwgbm90IHRoZSBkaXNhYmxlZCBvbmVzIGZyb20gdGhlIGNsdXN0ZXJpbmcgcHJvY2Vzcy5cbiAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHNlbGYtcmVmZXJlbmNpbmcgZWRnZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgXCJoaWRkZW5cIiBsaXN0XG4gICAgICAgICAgaWYgKGVkZ2UudG9JZCA9PSBlZGdlLmZyb21JZCkge1xuICAgICAgICAgICAgY2hpbGRFZGdlc09ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNldCB1cCB0aGUgZnJvbSBhbmQgdG8uXG4gICAgICAgICAgICBpZiAoZWRnZS50b0lkID09IGNoaWxkTm9kZUlkKSB7XG4gICAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBkb3VibGUgZXF1YWxzIGJlY2F1c2UgaW50cyBhbmQgc3RyaW5ncyBjYW4gYmUgaW50ZXJjaGFuZ2VkIGhlcmUuXG4gICAgICAgICAgICAgIHRvSWQgPSBjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWQ7XG4gICAgICAgICAgICAgIGZyb21JZCA9IGVkZ2UuZnJvbUlkO1xuICAgICAgICAgICAgICBvdGhlck5vZGVJZCA9IGZyb21JZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRvSWQgPSBlZGdlLnRvSWQ7XG4gICAgICAgICAgICAgIGZyb21JZCA9IGNsdXN0ZXJOb2RlUHJvcGVydGllcy5pZDtcbiAgICAgICAgICAgICAgb3RoZXJOb2RlSWQgPSB0b0lkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE9ubHkgZWRnZXMgZnJvbSB0aGUgY2x1c3RlciBvdXR3YXJkcyBhcmUgYmVpbmcgcmVwbGFjZWQuXG4gICAgICAgICAgaWYgKGNoaWxkTm9kZXNPYmpbb3RoZXJOb2RlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNyZWF0ZUVkZ2VzLnB1c2goeyBlZGdlOiBlZGdlLCBmcm9tSWQ6IGZyb21JZCwgdG9JZDogdG9JZCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIEhlcmUgd2UgYWN0dWFsbHkgY3JlYXRlIHRoZSByZXBsYWNlbWVudCBlZGdlcy5cbiAgICAvL1xuICAgIC8vIFdlIGNvdWxkIG5vdCBkbyB0aGlzIGluIHRoZSBsb29wIGFib3ZlIGFzIHRoZSBjcmVhdGlvbiBwcm9jZXNzXG4gICAgLy8gd291bGQgYWRkIGFuIGVkZ2UgdG8gdGhlIGVkZ2VzIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3Zlci5cbiAgICAvL1xuICAgIC8vIE5PVEU6IGEgY2x1c3RlcmVkIGVkZ2UgY2FuIGhhdmUgbXVsdGlwbGUgYmFzZSBlZGdlcyFcbiAgICAvL1xuICAgIGNvbnN0IG5ld0VkZ2VzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgY2x1c3RlciBlZGdlIHdoaWNoIG1hdGNoZXMgdGhlIGdpdmVuIGNyZWF0ZWQgZWRnZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7dmlzLkVkZ2V9IGNyZWF0ZWRFZGdlXG4gICAgICogQHJldHVybnMge3Zpcy5FZGdlfVxuICAgICAqL1xuICAgIGNvbnN0IGdldE5ld0VkZ2UgPSBmdW5jdGlvbiAoY3JlYXRlZEVkZ2UpIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbmV3RWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgbmV3RWRnZSA9IG5ld0VkZ2VzW2pdO1xuXG4gICAgICAgIC8vIFdlIHJlcGxhY2UgYm90aCB0byBhbmQgZnJvbSBlZGdlcyB3aXRoIGEgc2luZ2xlIGNsdXN0ZXIgZWRnZVxuICAgICAgICBjb25zdCBtYXRjaFRvRGlyZWN0aW9uID1cbiAgICAgICAgICBjcmVhdGVkRWRnZS5mcm9tSWQgPT09IG5ld0VkZ2UuZnJvbUlkICYmXG4gICAgICAgICAgY3JlYXRlZEVkZ2UudG9JZCA9PT0gbmV3RWRnZS50b0lkO1xuICAgICAgICBjb25zdCBtYXRjaEZyb21EaXJlY3Rpb24gPVxuICAgICAgICAgIGNyZWF0ZWRFZGdlLmZyb21JZCA9PT0gbmV3RWRnZS50b0lkICYmXG4gICAgICAgICAgY3JlYXRlZEVkZ2UudG9JZCA9PT0gbmV3RWRnZS5mcm9tSWQ7XG5cbiAgICAgICAgaWYgKG1hdGNoVG9EaXJlY3Rpb24gfHwgbWF0Y2hGcm9tRGlyZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG5ld0VkZ2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY3JlYXRlRWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGNyZWF0ZWRFZGdlID0gY3JlYXRlRWRnZXNbal07XG4gICAgICBjb25zdCBlZGdlID0gY3JlYXRlZEVkZ2UuZWRnZTtcbiAgICAgIGxldCBuZXdFZGdlID0gZ2V0TmV3RWRnZShjcmVhdGVkRWRnZSk7XG5cbiAgICAgIGlmIChuZXdFZGdlID09PSBudWxsKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIGNsdXN0ZXJlZCBlZGdlIGZvciB0aGlzIGNvbm5lY3Rpb25cbiAgICAgICAgbmV3RWRnZSA9IHRoaXMuX2NyZWF0ZUNsdXN0ZXJlZEVkZ2UoXG4gICAgICAgICAgY3JlYXRlZEVkZ2UuZnJvbUlkLFxuICAgICAgICAgIGNyZWF0ZWRFZGdlLnRvSWQsXG4gICAgICAgICAgZWRnZSxcbiAgICAgICAgICBjbHVzdGVyRWRnZVByb3BlcnRpZXNcbiAgICAgICAgKTtcblxuICAgICAgICBuZXdFZGdlcy5wdXNoKG5ld0VkZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3RWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcy5wdXNoKGVkZ2UuaWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBhbHNvIHJlZmVyZW5jZSB0aGUgbmV3IGVkZ2UgaW4gdGhlIG9sZCBlZGdlXG4gICAgICB0aGlzLmJvZHkuZWRnZXNbZWRnZS5pZF0uZWRnZVJlcGxhY2VkQnlJZCA9IG5ld0VkZ2UuaWQ7XG5cbiAgICAgIC8vIGhpZGUgdGhlIHJlcGxhY2VkIGVkZ2VcbiAgICAgIHRoaXMuX2JhY2t1cEVkZ2VPcHRpb25zKGVkZ2UpO1xuICAgICAgZWRnZS5zZXRPcHRpb25zKHsgcGh5c2ljczogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBvcHRpb25zIHRoYXQgY2FuIGJlIHN1cHBsaWVkIHRvIHRoZSBkaWZmZXJlbnQgY2x1c3RlciBmdW5jdGlvbnNcbiAgICogZm9yIGNlcnRhaW4gZmllbGRzIGFuZCBpbnNlcnRzIGRlZmF1bHRzIGlmIG5lZWRlZFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja09wdGlvbnMob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKG9wdGlvbnMuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzID0ge307XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgICBjaGlsZE5vZGVzT2JqICAgICAgICAgfCBvYmplY3Qgd2l0aCBub2RlIG9iamVjdHMsIGlkIGFzIGtleXMsIHNhbWUgYXMgY2hpbGROb2RlcyBleGNlcHQgaXQgYWxzbyBjb250YWlucyBhIHNvdXJjZSBub2RlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgICBjaGlsZEVkZ2VzT2JqICAgICAgICAgfCBvYmplY3Qgd2l0aCBlZGdlIG9iamVjdHMsIGlkIGFzIGtleXNcbiAgICogQHBhcmFtIHtBcnJheX0gICAgIG9wdGlvbnMgICAgICAgICAgICAgICB8IG9iamVjdCB3aXRoIHtjbHVzdGVyTm9kZVByb3BlcnRpZXMsIGNsdXN0ZXJFZGdlUHJvcGVydGllcywgcHJvY2Vzc1Byb3BlcnRpZXN9XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICByZWZyZXNoRGF0YSB8IHdoZW4gdHJ1ZSwgZG8gbm90IHdyYXAgdXBcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbHVzdGVyKGNoaWxkTm9kZXNPYmosIGNoaWxkRWRnZXNPYmosIG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIC8vIFJlbW92ZSBub2RlcyB3aGljaCBhcmUgYWxyZWFkeSBjbHVzdGVyZWRcbiAgICBjb25zdCB0bXBOb2Rlc1RvUmVtb3ZlID0gW107XG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gY2hpbGROb2Rlc09iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZE5vZGVzT2JqLCBub2RlSWQpKSB7XG4gICAgICAgIGlmICh0aGlzLmNsdXN0ZXJlZE5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRtcE5vZGVzVG9SZW1vdmUucHVzaChub2RlSWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCB0bXBOb2Rlc1RvUmVtb3ZlLmxlbmd0aDsgKytuKSB7XG4gICAgICBkZWxldGUgY2hpbGROb2Rlc09ialt0bXBOb2Rlc1RvUmVtb3ZlW25dXTtcbiAgICB9XG5cbiAgICAvLyBraWxsIGNvbmRpdGlvbjogbm8gbm9kZXMgZG9uJ3QgYm90aGVyXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoaWxkTm9kZXNPYmopLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYWxsb3cgY2x1c3RlcnMgb2YgMSBpZiBvcHRpb25zIGFsbG93XG4gICAgaWYgKFxuICAgICAgT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaikubGVuZ3RoID09IDEgJiZcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmFsbG93U2luZ2xlTm9kZUNsdXN0ZXIgIT0gdHJ1ZVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjbHVzdGVyTm9kZVByb3BlcnRpZXMgPSBkZWVwRXh0ZW5kKHt9LCBvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcyk7XG5cbiAgICAvLyBjb25zdHJ1Y3QgdGhlIGNsdXN0ZXJOb2RlUHJvcGVydGllc1xuICAgIGlmIChvcHRpb25zLnByb2Nlc3NQcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGdldCB0aGUgY2hpbGROb2RlIG9wdGlvbnNcbiAgICAgIGNvbnN0IGNoaWxkTm9kZXNPcHRpb25zID0gW107XG4gICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBjaGlsZE5vZGVzT2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hpbGROb2Rlc09iaiwgbm9kZUlkKSkge1xuICAgICAgICAgIGNvbnN0IGNsb25lZE9wdGlvbnMgPSBOZXR3b3JrVXRpbC5jbG9uZU9wdGlvbnMoY2hpbGROb2Rlc09ialtub2RlSWRdKTtcbiAgICAgICAgICBjaGlsZE5vZGVzT3B0aW9ucy5wdXNoKGNsb25lZE9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBjbHVzdGVyIHByb3BlcnRpZXMgYmFzZWQgb24gY2hpbGROb2Rlc1xuICAgICAgY29uc3QgY2hpbGRFZGdlc09wdGlvbnMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgZWRnZUlkIGluIGNoaWxkRWRnZXNPYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZEVkZ2VzT2JqLCBlZGdlSWQpKSB7XG4gICAgICAgICAgLy8gdGhlc2UgY2x1c3RlciBlZGdlcyB3aWxsIGJlIHJlbW92ZWQgb24gY3JlYXRpb24gb2YgdGhlIGNsdXN0ZXIuXG4gICAgICAgICAgaWYgKGVkZ2VJZC5zdWJzdHIoMCwgMTIpICE9PSBcImNsdXN0ZXJFZGdlOlwiKSB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKFxuICAgICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2VJZF0sXG4gICAgICAgICAgICAgIFwiZWRnZVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY2hpbGRFZGdlc09wdGlvbnMucHVzaChjbG9uZWRPcHRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzID0gb3B0aW9ucy5wcm9jZXNzUHJvcGVydGllcyhcbiAgICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLFxuICAgICAgICBjaGlsZE5vZGVzT3B0aW9ucyxcbiAgICAgICAgY2hpbGRFZGdlc09wdGlvbnNcbiAgICAgICk7XG4gICAgICBpZiAoIWNsdXN0ZXJOb2RlUHJvcGVydGllcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgcHJvY2Vzc1Byb3BlcnRpZXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIHByb3BlcnRpZXMhXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiB3ZSBoYXZlIGFuIHVuaXF1ZSBpZDtcbiAgICBpZiAoY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcy5pZCA9IFwiY2x1c3RlcjpcIiArIHJhbmRvbVVVSUQoKTtcbiAgICB9XG4gICAgY29uc3QgY2x1c3RlcklkID0gY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkO1xuXG4gICAgaWYgKGNsdXN0ZXJOb2RlUHJvcGVydGllcy5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMubGFiZWwgPSBcImNsdXN0ZXJcIjtcbiAgICB9XG5cbiAgICAvLyBnaXZlIHRoZSBjbHVzdGVyTm9kZSBhIHBvc2l0aW9uIGlmIGl0IGRvZXMgbm90IGhhdmUgb25lLlxuICAgIGxldCBwb3MgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGNsdXN0ZXJOb2RlUHJvcGVydGllcy54ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBvcyA9IHRoaXMuX2dldENsdXN0ZXJQb3NpdGlvbihjaGlsZE5vZGVzT2JqKTtcbiAgICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcy54ID0gcG9zLng7XG4gICAgfVxuICAgIGlmIChjbHVzdGVyTm9kZVByb3BlcnRpZXMueSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocG9zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcG9zID0gdGhpcy5fZ2V0Q2x1c3RlclBvc2l0aW9uKGNoaWxkTm9kZXNPYmopO1xuICAgICAgfVxuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnkgPSBwb3MueTtcbiAgICB9XG5cbiAgICAvLyBmb3JjZSB0aGUgSUQgdG8gcmVtYWluIHRoZSBzYW1lXG4gICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkID0gY2x1c3RlcklkO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBjbHVzdGVyIE5vZGVcbiAgICAvLyBOb3RlIHRoYXQgYWxsb3dTaW5nbGVOb2RlQ2x1c3RlciwgaWYgcHJlc2VudCwgaXMgc3RvcmVkIGluIHRoZSBvcHRpb25zIGFzIHdlbGxcbiAgICBjb25zdCBjbHVzdGVyTm9kZSA9IHRoaXMuYm9keS5mdW5jdGlvbnMuY3JlYXRlTm9kZShcbiAgICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcyxcbiAgICAgIENsdXN0ZXJcbiAgICApO1xuICAgIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZE5vZGVzID0gY2hpbGROb2Rlc09iajtcbiAgICBjbHVzdGVyTm9kZS5jb250YWluZWRFZGdlcyA9IGNoaWxkRWRnZXNPYmo7XG4gICAgLy8gY2FjaGUgYSBjb3B5IGZyb20gdGhlIGNsdXN0ZXIgZWRnZSBwcm9wZXJ0aWVzIGlmIHdlIGhhdmUgdG8gcmVjb25uZWN0IG90aGVycyBsYXRlciBvblxuICAgIGNsdXN0ZXJOb2RlLmNsdXN0ZXJFZGdlUHJvcGVydGllcyA9IG9wdGlvbnMuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzO1xuXG4gICAgLy8gZmluYWxseSBwdXQgdGhlIGNsdXN0ZXIgbm9kZSBpbnRvIGdsb2JhbFxuICAgIHRoaXMuYm9keS5ub2Rlc1tjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWRdID0gY2x1c3Rlck5vZGU7XG5cbiAgICB0aGlzLl9jbHVzdGVyRWRnZXMoXG4gICAgICBjaGlsZE5vZGVzT2JqLFxuICAgICAgY2hpbGRFZGdlc09iaixcbiAgICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcyxcbiAgICAgIG9wdGlvbnMuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzXG4gICAgKTtcblxuICAgIC8vIHNldCBJRCB0byB1bmRlZmluZWQgc28gbm8gZHVwbGljYXRlcyBhcmlzZVxuICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcy5pZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIHdyYXAgdXBcbiAgICBpZiAocmVmcmVzaERhdGEgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZX0gZWRnZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JhY2t1cEVkZ2VPcHRpb25zKGVkZ2UpIHtcbiAgICBpZiAodGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdID0geyBwaHlzaWNzOiBlZGdlLm9wdGlvbnMucGh5c2ljcyB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0VkZ2V9IGVkZ2VcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXN0b3JlRWRnZShlZGdlKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxPcHRpb25zID0gdGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlLmlkXTtcbiAgICBpZiAob3JpZ2luYWxPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVkZ2Uuc2V0T3B0aW9ucyh7IHBoeXNpY3M6IG9yaWdpbmFsT3B0aW9ucy5waHlzaWNzIH0pO1xuICAgICAgZGVsZXRlIHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbm9kZSBpcyBhIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgaXNDbHVzdGVyKG5vZGVJZCkge1xuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0uaXNDbHVzdGVyID09PSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiTm9kZSBkb2VzIG5vdCBleGlzdC5cIik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGNsdXN0ZXIgbm9kZSBiYXNlZCBvbiB3aGF0J3MgaW5zaWRlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjaGlsZE5vZGVzT2JqICAgIHwgb2JqZWN0IHdpdGggbm9kZSBvYmplY3RzLCBpZCBhcyBrZXlzXG4gICAqIEByZXR1cm5zIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldENsdXN0ZXJQb3NpdGlvbihjaGlsZE5vZGVzT2JqKSB7XG4gICAgY29uc3QgY2hpbGRLZXlzID0gT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaik7XG4gICAgbGV0IG1pblggPSBjaGlsZE5vZGVzT2JqW2NoaWxkS2V5c1swXV0ueDtcbiAgICBsZXQgbWF4WCA9IGNoaWxkTm9kZXNPYmpbY2hpbGRLZXlzWzBdXS54O1xuICAgIGxldCBtaW5ZID0gY2hpbGROb2Rlc09ialtjaGlsZEtleXNbMF1dLnk7XG4gICAgbGV0IG1heFkgPSBjaGlsZE5vZGVzT2JqW2NoaWxkS2V5c1swXV0ueTtcbiAgICBsZXQgbm9kZTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGNoaWxkS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZSA9IGNoaWxkTm9kZXNPYmpbY2hpbGRLZXlzW2ldXTtcbiAgICAgIG1pblggPSBub2RlLnggPCBtaW5YID8gbm9kZS54IDogbWluWDtcbiAgICAgIG1heFggPSBub2RlLnggPiBtYXhYID8gbm9kZS54IDogbWF4WDtcbiAgICAgIG1pblkgPSBub2RlLnkgPCBtaW5ZID8gbm9kZS55IDogbWluWTtcbiAgICAgIG1heFkgPSBub2RlLnkgPiBtYXhZID8gbm9kZS55IDogbWF4WTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB4OiAwLjUgKiAobWluWCArIG1heFgpLCB5OiAwLjUgKiAobWluWSArIG1heFkpIH07XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIGNsdXN0ZXIgYnkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSAgY2x1c3Rlck5vZGVJZCB8IHRoZSBJRCBvZiB0aGUgY2x1c3RlciBub2RlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVmcmVzaERhdGEgfCB3cmFwIHVwIGFmdGVyd2FyZHMgaWYgbm90IHRydWVcbiAgICovXG4gIG9wZW5DbHVzdGVyKGNsdXN0ZXJOb2RlSWQsIG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIC8vIGtpbGwgY29uZGl0aW9uc1xuICAgIGlmIChjbHVzdGVyTm9kZUlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNsdXN0ZXJOb2RlSWQgc3VwcGxpZWQgdG8gb3BlbkNsdXN0ZXIuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsdXN0ZXJOb2RlID0gdGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJOb2RlSWRdO1xuXG4gICAgaWYgKGNsdXN0ZXJOb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgY2x1c3Rlck5vZGVJZCBzdXBwbGllZCB0byBvcGVuQ2x1c3RlciBkb2VzIG5vdCBleGlzdC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2x1c3Rlck5vZGUuaXNDbHVzdGVyICE9PSB0cnVlIHx8XG4gICAgICBjbHVzdGVyTm9kZS5jb250YWluZWROb2RlcyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBjbHVzdGVyTm9kZS5jb250YWluZWRFZGdlcyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgbm9kZTpcIiArIGNsdXN0ZXJOb2RlSWQgKyBcIiBpcyBub3QgYSB2YWxpZCBjbHVzdGVyLlwiKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBjdXJyZW50IGNsdXN0ZXIgaXMgY2x1c3RlcmVkIGl0c2VsZlxuICAgIGNvbnN0IHN0YWNrID0gdGhpcy5maW5kTm9kZShjbHVzdGVyTm9kZUlkKTtcbiAgICBjb25zdCBwYXJlbnRJbmRleCA9IHN0YWNrLmluZGV4T2YoY2x1c3Rlck5vZGVJZCkgLSAxO1xuICAgIGlmIChwYXJlbnRJbmRleCA+PSAwKSB7XG4gICAgICAvLyBDdXJyZW50IGNsdXN0ZXIgaXMgY2x1c3RlcmVkOyB0cmFuc2ZlciBjb250YWluZWQgbm9kZXMgYW5kIGVkZ2VzIHRvIHBhcmVudFxuICAgICAgY29uc3QgcGFyZW50Q2x1c3Rlck5vZGVJZCA9IHN0YWNrW3BhcmVudEluZGV4XTtcbiAgICAgIGNvbnN0IHBhcmVudENsdXN0ZXJOb2RlID0gdGhpcy5ib2R5Lm5vZGVzW3BhcmVudENsdXN0ZXJOb2RlSWRdO1xuXG4gICAgICAvLyBjbHVzdGVyaW5nLmNsdXN0ZXJlZE5vZGVzIGFuZCBjbHVzdGVyaW5nLmNsdXN0ZXJlZEVkZ2VzIHJlbWFpbiB1bmNoYW5nZWRcbiAgICAgIHBhcmVudENsdXN0ZXJOb2RlLl9vcGVuQ2hpbGRDbHVzdGVyKGNsdXN0ZXJOb2RlSWQpO1xuXG4gICAgICAvLyBBbGwgY29tcG9uZW50cyBvZiBjaGlsZCBjbHVzdGVyIG5vZGUgaGF2ZSBiZWVuIHRyYW5zZmVycmVkLiBJdCBjYW4gZGllIG5vdy5cbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkubm9kZXNbY2x1c3Rlck5vZGVJZF07XG4gICAgICBpZiAocmVmcmVzaERhdGEgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG1haW4gYm9keVxuICAgIGNvbnN0IGNvbnRhaW5lZE5vZGVzID0gY2x1c3Rlck5vZGUuY29udGFpbmVkTm9kZXM7XG4gICAgY29uc3QgY29udGFpbmVkRWRnZXMgPSBjbHVzdGVyTm9kZS5jb250YWluZWRFZGdlcztcblxuICAgIC8vIGFsbG93IHRoZSB1c2VyIHRvIHBvc2l0aW9uIHRoZSBub2RlcyBhZnRlciByZWxlYXNlLlxuICAgIGlmIChcbiAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb3B0aW9ucy5yZWxlYXNlRnVuY3Rpb24gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdHlwZW9mIG9wdGlvbnMucmVsZWFzZUZ1bmN0aW9uID09PSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHt9O1xuICAgICAgY29uc3QgY2x1c3RlclBvc2l0aW9uID0geyB4OiBjbHVzdGVyTm9kZS54LCB5OiBjbHVzdGVyTm9kZS55IH07XG4gICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBjb250YWluZWROb2Rlcykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnRhaW5lZE5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgY29uc3QgY29udGFpbmVkTm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgICAgIHBvc2l0aW9uc1tub2RlSWRdID0geyB4OiBjb250YWluZWROb2RlLngsIHk6IGNvbnRhaW5lZE5vZGUueSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdQb3NpdGlvbnMgPSBvcHRpb25zLnJlbGVhc2VGdW5jdGlvbihjbHVzdGVyUG9zaXRpb24sIHBvc2l0aW9ucyk7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNvbnRhaW5lZE5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBjb25zdCBjb250YWluZWROb2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgICAgaWYgKG5ld1Bvc2l0aW9uc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lZE5vZGUueCA9XG4gICAgICAgICAgICAgIG5ld1Bvc2l0aW9uc1tub2RlSWRdLnggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gY2x1c3Rlck5vZGUueFxuICAgICAgICAgICAgICAgIDogbmV3UG9zaXRpb25zW25vZGVJZF0ueDtcbiAgICAgICAgICAgIGNvbnRhaW5lZE5vZGUueSA9XG4gICAgICAgICAgICAgIG5ld1Bvc2l0aW9uc1tub2RlSWRdLnkgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gY2x1c3Rlck5vZGUueVxuICAgICAgICAgICAgICAgIDogbmV3UG9zaXRpb25zW25vZGVJZF0ueTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29weSB0aGUgcG9zaXRpb24gZnJvbSB0aGUgY2x1c3RlclxuICAgICAgZm9yRWFjaChjb250YWluZWROb2RlcywgZnVuY3Rpb24gKGNvbnRhaW5lZE5vZGUpIHtcbiAgICAgICAgLy8gaW5oZXJpdCBwb3NpdGlvblxuICAgICAgICBpZiAoY29udGFpbmVkTm9kZS5vcHRpb25zLmZpeGVkLnggPT09IGZhbHNlKSB7XG4gICAgICAgICAgY29udGFpbmVkTm9kZS54ID0gY2x1c3Rlck5vZGUueDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGFpbmVkTm9kZS5vcHRpb25zLmZpeGVkLnkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgY29udGFpbmVkTm9kZS55ID0gY2x1c3Rlck5vZGUueTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcmVsZWFzZSBub2Rlc1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNvbnRhaW5lZE5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnRhaW5lZE5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lZE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcblxuICAgICAgICAvLyBpbmhlcml0IHNwZWVkXG4gICAgICAgIGNvbnRhaW5lZE5vZGUudnggPSBjbHVzdGVyTm9kZS52eDtcbiAgICAgICAgY29udGFpbmVkTm9kZS52eSA9IGNsdXN0ZXJOb2RlLnZ5O1xuXG4gICAgICAgIGNvbnRhaW5lZE5vZGUuc2V0T3B0aW9ucyh7IHBoeXNpY3M6IHRydWUgfSk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuY2x1c3RlcmVkTm9kZXNbbm9kZUlkXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb3B5IHRoZSBjbHVzdGVyTm9kZSBlZGdlcyBiZWNhdXNlIHdlIGNhbm5vdCBpdGVyYXRlIG92ZXIgYW4gb2JqZWN0IHRoYXQgd2UgYWRkIG9yIHJlbW92ZSBmcm9tLlxuICAgIGNvbnN0IGVkZ2VzVG9CZURlbGV0ZWQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsdXN0ZXJOb2RlLmVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlZGdlc1RvQmVEZWxldGVkLnB1c2goY2x1c3Rlck5vZGUuZWRnZXNbaV0pO1xuICAgIH1cblxuICAgIC8vIGFjdHVhbGx5IGhhbmRsaW5nIHRoZSBkZWxldGluZy5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VzVG9CZURlbGV0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1RvQmVEZWxldGVkW2ldO1xuICAgICAgY29uc3Qgb3RoZXJOb2RlSWQgPSB0aGlzLl9nZXRDb25uZWN0ZWRJZChlZGdlLCBjbHVzdGVyTm9kZUlkKTtcbiAgICAgIGNvbnN0IG90aGVyTm9kZSA9IHRoaXMuY2x1c3RlcmVkTm9kZXNbb3RoZXJOb2RlSWRdO1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgdHJhbnNmZXJJZCA9IGVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHNbal07XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyRWRnZSA9IHRoaXMuYm9keS5lZGdlc1t0cmFuc2ZlcklkXTtcbiAgICAgICAgaWYgKHRyYW5zZmVyRWRnZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblxuICAgICAgICAvLyBpZiB0aGUgb3RoZXIgbm9kZSBpcyBpbiBhbm90aGVyIGNsdXN0ZXIsIHdlIHRyYW5zZmVyIG93bmVyc2hpcCBvZiB0aGlzIGVkZ2UgdG8gdGhlIG90aGVyIGNsdXN0ZXJcbiAgICAgICAgaWYgKG90aGVyTm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gdHJhbnNmZXIgb3duZXJzaGlwOlxuICAgICAgICAgIGNvbnN0IG90aGVyQ2x1c3RlciA9IHRoaXMuYm9keS5ub2Rlc1tvdGhlck5vZGUuY2x1c3RlcklkXTtcbiAgICAgICAgICBvdGhlckNsdXN0ZXIuY29udGFpbmVkRWRnZXNbdHJhbnNmZXJFZGdlLmlkXSA9IHRyYW5zZmVyRWRnZTtcblxuICAgICAgICAgIC8vIGRlbGV0ZSBsb2NhbCByZWZlcmVuY2VcbiAgICAgICAgICBkZWxldGUgY29udGFpbmVkRWRnZXNbdHJhbnNmZXJFZGdlLmlkXTtcblxuICAgICAgICAgIC8vIGdldCB0byBhbmQgZnJvbVxuICAgICAgICAgIGxldCBmcm9tSWQgPSB0cmFuc2ZlckVkZ2UuZnJvbUlkO1xuICAgICAgICAgIGxldCB0b0lkID0gdHJhbnNmZXJFZGdlLnRvSWQ7XG4gICAgICAgICAgaWYgKHRyYW5zZmVyRWRnZS50b0lkID09IG90aGVyTm9kZUlkKSB7XG4gICAgICAgICAgICB0b0lkID0gb3RoZXJOb2RlLmNsdXN0ZXJJZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJvbUlkID0gb3RoZXJOb2RlLmNsdXN0ZXJJZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjcmVhdGUgbmV3IGNsdXN0ZXIgZWRnZSBmcm9tIHRoZSBvdGhlckNsdXN0ZXJcbiAgICAgICAgICB0aGlzLl9jcmVhdGVDbHVzdGVyZWRFZGdlKFxuICAgICAgICAgICAgZnJvbUlkLFxuICAgICAgICAgICAgdG9JZCxcbiAgICAgICAgICAgIHRyYW5zZmVyRWRnZSxcbiAgICAgICAgICAgIG90aGVyQ2x1c3Rlci5jbHVzdGVyRWRnZVByb3BlcnRpZXMsXG4gICAgICAgICAgICB7IGhpZGRlbjogZmFsc2UsIHBoeXNpY3M6IHRydWUgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fcmVzdG9yZUVkZ2UodHJhbnNmZXJFZGdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZGdlLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIC8vIGhhbmRsZSB0aGUgcmVsZWFzaW5nIG9mIHRoZSBlZGdlc1xuICAgIGZvciAoY29uc3QgZWRnZUlkIGluIGNvbnRhaW5lZEVkZ2VzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnRhaW5lZEVkZ2VzLCBlZGdlSWQpKSB7XG4gICAgICAgIHRoaXMuX3Jlc3RvcmVFZGdlKGNvbnRhaW5lZEVkZ2VzW2VkZ2VJZF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSBjbHVzdGVyTm9kZVxuICAgIGRlbGV0ZSB0aGlzLmJvZHkubm9kZXNbY2x1c3Rlck5vZGVJZF07XG5cbiAgICBpZiAocmVmcmVzaERhdGEgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2x1c3Rlci5pZH0gY2x1c3RlcklkXG4gICAqIEByZXR1cm5zIHtBcnJheS48Tm9kZS5pZD59XG4gICAqL1xuICBnZXROb2Rlc0luQ2x1c3RlcihjbHVzdGVySWQpIHtcbiAgICBjb25zdCBub2Rlc0FycmF5ID0gW107XG4gICAgaWYgKHRoaXMuaXNDbHVzdGVyKGNsdXN0ZXJJZCkgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lZE5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJJZF0uY29udGFpbmVkTm9kZXM7XG4gICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBjb250YWluZWROb2Rlcykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnRhaW5lZE5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgbm9kZXNBcnJheS5wdXNoKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2Rlc0FycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RhY2sgY2x1c3RlcklkJ3MgdGhhdCBhIGNlcnRhaW4gbm9kZSByZXNpZGVzIGluLiBjbHVzdGVyIEEgLT4gY2x1c3RlciBCIC0+IGNsdXN0ZXIgQyAtPiBub2RlXG4gICAqXG4gICAqIElmIGEgbm9kZSBjYW4ndCBiZSBmb3VuZCBpbiB0aGUgY2hhaW4sIHJldHVybiBhbiBlbXB0eSBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBub2RlSWRcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZmluZE5vZGUobm9kZUlkKSB7XG4gICAgY29uc3Qgc3RhY2sgPSBbXTtcbiAgICBjb25zdCBtYXggPSAxMDA7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCBub2RlO1xuXG4gICAgd2hpbGUgKHRoaXMuY2x1c3RlcmVkTm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkICYmIGNvdW50ZXIgPCBtYXgpIHtcbiAgICAgIG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgICAgIHN0YWNrLnB1c2gobm9kZS5pZCk7XG5cbiAgICAgIG5vZGVJZCA9IHRoaXMuY2x1c3RlcmVkTm9kZXNbbm9kZUlkXS5jbHVzdGVySWQ7XG4gICAgICBjb3VudGVyKys7XG4gICAgfVxuXG4gICAgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgICBzdGFjay5wdXNoKG5vZGUuaWQpO1xuXG4gICAgc3RhY2sucmV2ZXJzZSgpO1xuICAgIHJldHVybiBzdGFjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2luZyBhIGNsdXN0ZXJlZCBub2RlSWQsIHVwZGF0ZSB3aXRoIHRoZSBuZXcgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IGNsdXN0ZXJlZE5vZGVJZFxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3T3B0aW9uc1xuICAgKi9cbiAgdXBkYXRlQ2x1c3RlcmVkTm9kZShjbHVzdGVyZWROb2RlSWQsIG5ld09wdGlvbnMpIHtcbiAgICBpZiAoY2x1c3RlcmVkTm9kZUlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNsdXN0ZXJlZE5vZGVJZCBzdXBwbGllZCB0byB1cGRhdGVDbHVzdGVyZWROb2RlLlwiKTtcbiAgICB9XG4gICAgaWYgKG5ld09wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbmV3T3B0aW9ucyBzdXBwbGllZCB0byB1cGRhdGVDbHVzdGVyZWROb2RlLlwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tjbHVzdGVyZWROb2RlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgY2x1c3RlcmVkTm9kZUlkIHN1cHBsaWVkIHRvIHVwZGF0ZUNsdXN0ZXJlZE5vZGUgZG9lcyBub3QgZXhpc3QuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJlZE5vZGVJZF0uc2V0T3B0aW9ucyhuZXdPcHRpb25zKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzaW5nIGEgYmFzZSBlZGdlSWQsIHVwZGF0ZSBhbGwgcmVsYXRlZCBjbHVzdGVyZWQgZWRnZXMgd2l0aCB0aGUgbmV3IG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHt2aXMuRWRnZS5pZH0gc3RhcnRFZGdlSWRcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld09wdGlvbnNcbiAgICovXG4gIHVwZGF0ZUVkZ2Uoc3RhcnRFZGdlSWQsIG5ld09wdGlvbnMpIHtcbiAgICBpZiAoc3RhcnRFZGdlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RhcnRFZGdlSWQgc3VwcGxpZWQgdG8gdXBkYXRlRWRnZS5cIik7XG4gICAgfVxuICAgIGlmIChuZXdPcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG5ld09wdGlvbnMgc3VwcGxpZWQgdG8gdXBkYXRlRWRnZS5cIik7XG4gICAgfVxuICAgIGlmICh0aGlzLmJvZHkuZWRnZXNbc3RhcnRFZGdlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBzdGFydEVkZ2VJZCBzdXBwbGllZCB0byB1cGRhdGVFZGdlIGRvZXMgbm90IGV4aXN0LlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxFZGdlSWRzID0gdGhpcy5nZXRDbHVzdGVyZWRFZGdlcyhzdGFydEVkZ2VJZCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxFZGdlSWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gdGhpcy5ib2R5LmVkZ2VzW2FsbEVkZ2VJZHNbaV1dO1xuICAgICAgZWRnZS5zZXRPcHRpb25zKG5ld09wdGlvbnMpO1xuICAgIH1cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHN0YWNrIG9mIGNsdXN0ZXJFZGdlSWQncyAoK2Jhc2UgZWRnZWlkKSB0aGF0IGEgYmFzZSBlZGdlIGlzIHRoZSBzYW1lIGFzLiBjbHVzdGVyIGVkZ2UgQyAtPiBjbHVzdGVyIGVkZ2UgQiAtPiBjbHVzdGVyIGVkZ2UgQSAtPiBiYXNlIGVkZ2UoZWRnZUlkKVxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBlZGdlSWRcbiAgICogQHJldHVybnMge0FycmF5Ljx2aXMuRWRnZS5pZD59XG4gICAqL1xuICBnZXRDbHVzdGVyZWRFZGdlcyhlZGdlSWQpIHtcbiAgICBjb25zdCBzdGFjayA9IFtdO1xuICAgIGNvbnN0IG1heCA9IDEwMDtcbiAgICBsZXQgY291bnRlciA9IDA7XG5cbiAgICB3aGlsZSAoXG4gICAgICBlZGdlSWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgY291bnRlciA8IG1heFxuICAgICkge1xuICAgICAgc3RhY2sucHVzaCh0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXS5pZCk7XG4gICAgICBlZGdlSWQgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXS5lZGdlUmVwbGFjZWRCeUlkO1xuICAgICAgY291bnRlcisrO1xuICAgIH1cbiAgICBzdGFjay5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYmFzZSBlZGdlIGlkIG9mIGNsdXN0ZXJFZGdlSWQuIGNsdXN0ZXIgZWRnZSAoY2x1c3RlcmVkRWRnZUlkKSAtPiBjbHVzdGVyIGVkZ2UgQiAtPiBjbHVzdGVyIGVkZ2UgQyAtPiBiYXNlIGVkZ2VcbiAgICpcbiAgICogQHBhcmFtIHt2aXMuRWRnZS5pZH0gY2x1c3RlcmVkRWRnZUlkXG4gICAqIEByZXR1cm5zIHt2aXMuRWRnZS5pZH0gYmFzZUVkZ2VJZFxuICAgKlxuICAgKiBUT0RPOiBkZXByZWNhdGUgaW4gNS4wLjAuIE1ldGhvZCBnZXRCYXNlRWRnZXMoKSBpcyB0aGUgY29ycmVjdCBvbmUgdG8gdXNlLlxuICAgKi9cbiAgZ2V0QmFzZUVkZ2UoY2x1c3RlcmVkRWRnZUlkKSB7XG4gICAgLy8gSnVzdCBrbHVkZ2UgdGhpcyBieSByZXR1cm5pbmcgdGhlIGZpcnN0IGJhc2UgZWRnZSBpZCBmb3VuZFxuICAgIHJldHVybiB0aGlzLmdldEJhc2VFZGdlcyhjbHVzdGVyZWRFZGdlSWQpWzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgcmVndWxhciBlZGdlcyBmb3IgdGhpcyBjbHVzdGVyZWQgZWRnZSBpZC5cbiAgICpcbiAgICogQHBhcmFtIHt2aXMuRWRnZS5pZH0gY2x1c3RlcmVkRWRnZUlkXG4gICAqIEByZXR1cm5zIHtBcnJheS48dmlzLkVkZ2UuaWQ+fSBhbGwgYmFzZUVkZ2VJZCdzIHVuZGVyIHRoaXMgY2x1c3RlcmVkIGVkZ2VcbiAgICovXG4gIGdldEJhc2VFZGdlcyhjbHVzdGVyZWRFZGdlSWQpIHtcbiAgICBjb25zdCBJZHNUb0hhbmRsZSA9IFtjbHVzdGVyZWRFZGdlSWRdO1xuICAgIGNvbnN0IGRvbmVJZHMgPSBbXTtcbiAgICBjb25zdCBmb3VuZElkcyA9IFtdO1xuICAgIGNvbnN0IG1heCA9IDEwMDtcbiAgICBsZXQgY291bnRlciA9IDA7XG5cbiAgICB3aGlsZSAoSWRzVG9IYW5kbGUubGVuZ3RoID4gMCAmJiBjb3VudGVyIDwgbWF4KSB7XG4gICAgICBjb25zdCBuZXh0SWQgPSBJZHNUb0hhbmRsZS5wb3AoKTtcbiAgICAgIGlmIChuZXh0SWQgPT09IHVuZGVmaW5lZCkgY29udGludWU7IC8vIFBhcmFub2lhIGhlcmUgYW5kIG9ud2FyZHNcbiAgICAgIGNvbnN0IG5leHRFZGdlID0gdGhpcy5ib2R5LmVkZ2VzW25leHRJZF07XG4gICAgICBpZiAobmV4dEVkZ2UgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICBjb3VudGVyKys7XG5cbiAgICAgIGNvbnN0IHJlcGxhY2luZ0lkcyA9IG5leHRFZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzO1xuICAgICAgaWYgKHJlcGxhY2luZ0lkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIG5leHRJZCBpcyBhIGJhc2UgaWRcbiAgICAgICAgZm91bmRJZHMucHVzaChuZXh0SWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQW5vdGhlciBjbHVzdGVyIGVkZ2UsIHVucmF2ZWwgdGhpcyBvbmUgYXMgd2VsbFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcGxhY2luZ0lkcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGNvbnN0IHJlcGxhY2luZ0lkID0gcmVwbGFjaW5nSWRzW2ldO1xuXG4gICAgICAgICAgLy8gRG9uJ3QgYWRkIGlmIGFscmVhZHkgaGFuZGxlZFxuICAgICAgICAgIC8vIFRPRE86IG5ldmVyIHRyaWdnZXJzOyBmaW5kIGEgdGVzdC1jYXNlIHdoaWNoIGRvZXNcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBJZHNUb0hhbmRsZS5pbmRleE9mKHJlcGxhY2luZ0lkcykgIT09IC0xIHx8XG4gICAgICAgICAgICBkb25lSWRzLmluZGV4T2YocmVwbGFjaW5nSWRzKSAhPT0gLTFcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIElkc1RvSGFuZGxlLnB1c2gocmVwbGFjaW5nSWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRvbmVJZHMucHVzaChuZXh0SWQpO1xuICAgIH1cblxuICAgIHJldHVybiBmb3VuZElkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIElkIHRoZSBub2RlIGlzIGNvbm5lY3RlZCB0b1xuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlfSBlZGdlXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldENvbm5lY3RlZElkKGVkZ2UsIG5vZGVJZCkge1xuICAgIGlmIChlZGdlLnRvSWQgIT0gbm9kZUlkKSB7XG4gICAgICByZXR1cm4gZWRnZS50b0lkO1xuICAgIH0gZWxzZSBpZiAoZWRnZS5mcm9tSWQgIT0gbm9kZUlkKSB7XG4gICAgICByZXR1cm4gZWRnZS5mcm9tSWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlZGdlLmZyb21JZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2UgZGV0ZXJtaW5lIGhvdyBtYW55IGNvbm5lY3Rpb25zIGRlbm90ZSBhbiBpbXBvcnRhbnQgaHViLlxuICAgKiBXZSB0YWtlIHRoZSBtZWFuICsgMipzdGQgYXMgdGhlIGltcG9ydGFudCBodWIgc2l6ZS4gKEFzc3VtaW5nIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiBkYXRhLCB+Mi4yJSlcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRIdWJTaXplKCkge1xuICAgIGxldCBhdmVyYWdlID0gMDtcbiAgICBsZXQgYXZlcmFnZVNxdWFyZWQgPSAwO1xuICAgIGxldCBodWJDb3VudGVyID0gMDtcbiAgICBsZXQgbGFyZ2VzdEh1YiA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLmJvZHkubm9kZUluZGljZXNbaV1dO1xuICAgICAgaWYgKG5vZGUuZWRnZXMubGVuZ3RoID4gbGFyZ2VzdEh1Yikge1xuICAgICAgICBsYXJnZXN0SHViID0gbm9kZS5lZGdlcy5sZW5ndGg7XG4gICAgICB9XG4gICAgICBhdmVyYWdlICs9IG5vZGUuZWRnZXMubGVuZ3RoO1xuICAgICAgYXZlcmFnZVNxdWFyZWQgKz0gTWF0aC5wb3cobm9kZS5lZGdlcy5sZW5ndGgsIDIpO1xuICAgICAgaHViQ291bnRlciArPSAxO1xuICAgIH1cbiAgICBhdmVyYWdlID0gYXZlcmFnZSAvIGh1YkNvdW50ZXI7XG4gICAgYXZlcmFnZVNxdWFyZWQgPSBhdmVyYWdlU3F1YXJlZCAvIGh1YkNvdW50ZXI7XG5cbiAgICBjb25zdCB2YXJpYW5jZSA9IGF2ZXJhZ2VTcXVhcmVkIC0gTWF0aC5wb3coYXZlcmFnZSwgMik7XG4gICAgY29uc3Qgc3RhbmRhcmREZXZpYXRpb24gPSBNYXRoLnNxcnQodmFyaWFuY2UpO1xuXG4gICAgbGV0IGh1YlRocmVzaG9sZCA9IE1hdGguZmxvb3IoYXZlcmFnZSArIDIgKiBzdGFuZGFyZERldmlhdGlvbik7XG5cbiAgICAvLyBhbHdheXMgaGF2ZSBhdCBsZWFzdCBvbmUgdG8gY2x1c3RlclxuICAgIGlmIChodWJUaHJlc2hvbGQgPiBsYXJnZXN0SHViKSB7XG4gICAgICBodWJUaHJlc2hvbGQgPSBsYXJnZXN0SHViO1xuICAgIH1cblxuICAgIHJldHVybiBodWJUaHJlc2hvbGQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGVkZ2UgZm9yIHRoZSBjbHVzdGVyIHJlcHJlc2VudGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IGZyb21JZFxuICAgKiBAcGFyYW0ge05vZGUuaWR9IHRvSWRcbiAgICogQHBhcmFtIHt2aXMuRWRnZX0gYmFzZUVkZ2VcbiAgICogQHBhcmFtIHtvYmplY3R9IGNsdXN0ZXJFZGdlUHJvcGVydGllc1xuICAgKiBAcGFyYW0ge29iamVjdH0gZXh0cmFPcHRpb25zXG4gICAqIEByZXR1cm5zIHtFZGdlfSBuZXdseSBjcmVhdGVkIGNsdXN0ZXJlZCBlZGdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQ2x1c3RlcmVkRWRnZShcbiAgICBmcm9tSWQsXG4gICAgdG9JZCxcbiAgICBiYXNlRWRnZSxcbiAgICBjbHVzdGVyRWRnZVByb3BlcnRpZXMsXG4gICAgZXh0cmFPcHRpb25zXG4gICkge1xuICAgIC8vIGNvcHkgdGhlIG9wdGlvbnMgb2YgdGhlIGVkZ2Ugd2Ugd2lsbCByZXBsYWNlXG4gICAgY29uc3QgY2xvbmVkT3B0aW9ucyA9IE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhiYXNlRWRnZSwgXCJlZGdlXCIpO1xuICAgIC8vIG1ha2Ugc3VyZSB0aGUgcHJvcGVydGllcyBvZiBjbHVzdGVyRWRnZXMgYXJlIHN1cGVyaW1wb3NlZCBvbiBpdFxuICAgIGRlZXBFeHRlbmQoY2xvbmVkT3B0aW9ucywgY2x1c3RlckVkZ2VQcm9wZXJ0aWVzKTtcblxuICAgIC8vIHNldCB1cCB0aGUgZWRnZVxuICAgIGNsb25lZE9wdGlvbnMuZnJvbSA9IGZyb21JZDtcbiAgICBjbG9uZWRPcHRpb25zLnRvID0gdG9JZDtcbiAgICBjbG9uZWRPcHRpb25zLmlkID0gXCJjbHVzdGVyRWRnZTpcIiArIHJhbmRvbVVVSUQoKTtcblxuICAgIC8vIGFwcGx5IHRoZSBlZGdlIHNwZWNpZmljIG9wdGlvbnMgdG8gaXQgaWYgc3BlY2lmaWVkXG4gICAgaWYgKGV4dHJhT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWVwRXh0ZW5kKGNsb25lZE9wdGlvbnMsIGV4dHJhT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3RWRnZSA9IHRoaXMuYm9keS5mdW5jdGlvbnMuY3JlYXRlRWRnZShjbG9uZWRPcHRpb25zKTtcbiAgICBuZXdFZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzID0gW2Jhc2VFZGdlLmlkXTtcbiAgICBuZXdFZGdlLmNvbm5lY3QoKTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBuZXcgZWRnZVxuICAgIHRoaXMuYm9keS5lZGdlc1tuZXdFZGdlLmlkXSA9IG5ld0VkZ2U7XG5cbiAgICByZXR1cm4gbmV3RWRnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIHBhc3NlZCBjaGlsZCBub2RlcyBhbmQgZWRnZXMgdG8gdGhlIGdpdmVuIGNsdXN0ZXIgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3QgfCBOb2RlfSBjaGlsZE5vZGVzICBoYXNoIG9mIG5vZGVzIG9yIHNpbmdsZSBub2RlIHRvIGFkZCBpbiBjbHVzdGVyXG4gICAqIEBwYXJhbSB7b2JqZWN0IHwgRWRnZX0gY2hpbGRFZGdlcyAgaGFzaCBvZiBlZGdlcyBvciBzaW5nbGUgZWRnZSB0byB0YWtlIGludG8gYWNjb3VudCB3aGVuIGNsdXN0ZXJpbmdcbiAgICogQHBhcmFtIHtOb2RlfSBjbHVzdGVyTm9kZSAgY2x1c3RlciBub2RlIHRvIGFkZCBub2RlcyBhbmQgZWRnZXMgdG9cbiAgICogQHBhcmFtIHtvYmplY3R9IFtjbHVzdGVyRWRnZVByb3BlcnRpZXNdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2x1c3RlckVkZ2VzKGNoaWxkTm9kZXMsIGNoaWxkRWRnZXMsIGNsdXN0ZXJOb2RlLCBjbHVzdGVyRWRnZVByb3BlcnRpZXMpIHtcbiAgICBpZiAoY2hpbGRFZGdlcyBpbnN0YW5jZW9mIEVkZ2UpIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBjaGlsZEVkZ2VzO1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBvYmpbZWRnZS5pZF0gPSBlZGdlO1xuICAgICAgY2hpbGRFZGdlcyA9IG9iajtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGROb2RlcyBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBjaGlsZE5vZGVzO1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBvYmpbbm9kZS5pZF0gPSBub2RlO1xuICAgICAgY2hpbGROb2RlcyA9IG9iajtcbiAgICB9XG5cbiAgICBpZiAoY2x1c3Rlck5vZGUgPT09IHVuZGVmaW5lZCB8fCBjbHVzdGVyTm9kZSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiX2NsdXN0ZXJFZGdlczogcGFyYW1ldGVyIGNsdXN0ZXJOb2RlIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGlmIChjbHVzdGVyRWRnZVByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVGFrZSB0aGUgcmVxdWlyZWQgcHJvcGVydGllcyBmcm9tIHRoZSBjbHVzdGVyIG5vZGVcbiAgICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllcyA9IGNsdXN0ZXJOb2RlLmNsdXN0ZXJFZGdlUHJvcGVydGllcztcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgdGhlIG5ldyBlZGdlcyB0aGF0IHdpbGwgY29ubmVjdCB0byB0aGUgY2x1c3Rlci5cbiAgICAvLyBBbGwgc2VsZi1yZWZlcmVuY2luZyBlZGdlcyB3aWxsIGJlIGFkZGVkIHRvIGNoaWxkRWRnZXMgaGVyZS5cbiAgICB0aGlzLl9jcmVhdGVDbHVzdGVyRWRnZXMoXG4gICAgICBjaGlsZE5vZGVzLFxuICAgICAgY2hpbGRFZGdlcyxcbiAgICAgIGNsdXN0ZXJOb2RlLFxuICAgICAgY2x1c3RlckVkZ2VQcm9wZXJ0aWVzXG4gICAgKTtcblxuICAgIC8vIGRpc2FibGUgdGhlIGNoaWxkRWRnZXNcbiAgICBmb3IgKGNvbnN0IGVkZ2VJZCBpbiBjaGlsZEVkZ2VzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkRWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBlZGdlID0gdGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF07XG4gICAgICAgICAgLy8gY2FjaGUgdGhlIG9wdGlvbnMgYmVmb3JlIGNoYW5naW5nXG4gICAgICAgICAgdGhpcy5fYmFja3VwRWRnZU9wdGlvbnMoZWRnZSk7XG4gICAgICAgICAgLy8gZGlzYWJsZSBwaHlzaWNzIGFuZCBoaWRlIHRoZSBlZGdlXG4gICAgICAgICAgZWRnZS5zZXRPcHRpb25zKHsgcGh5c2ljczogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkaXNhYmxlIHRoZSBjaGlsZE5vZGVzXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gY2hpbGROb2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZE5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIHRoaXMuY2x1c3RlcmVkTm9kZXNbbm9kZUlkXSA9IHtcbiAgICAgICAgICBjbHVzdGVySWQ6IGNsdXN0ZXJOb2RlLmlkLFxuICAgICAgICAgIG5vZGU6IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS5zZXRPcHRpb25zKHsgcGh5c2ljczogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpbiB3aGljaCBjbHVzdGVyIGdpdmVuIG5vZGVJZCByZXNpZGVzLlxuICAgKlxuICAgKiBJZiBub3QgaW4gY2x1c3RlciwgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICpcbiAgICogTk9URTogSWYgeW91IGtub3cgYSBjbGVhbmVyIHdheSB0byBkbyB0aGlzLCBwbGVhc2UgZW5saWdodGVuIG1lICh3aW1yaWpuZGVycykuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEByZXR1cm5zIHtOb2RlfHVuZGVmaW5lZH0gTm9kZSBpbnN0YW5jZSBmb3IgY2x1c3RlciwgaWYgcHJlc2VudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldENsdXN0ZXJOb2RlRm9yTm9kZShub2RlSWQpIHtcbiAgICBpZiAobm9kZUlkID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgY2x1c3RlcmVkTm9kZSA9IHRoaXMuY2x1c3RlcmVkTm9kZXNbbm9kZUlkXTtcblxuICAgIC8vIE5PVEU6IElmIG5vIGNsdXN0ZXIgaW5mbyBmb3VuZCwgaXQgc2hvdWxkIGFjdHVhbGx5IGJlIGFuIGVycm9yXG4gICAgaWYgKGNsdXN0ZXJlZE5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBjbHVzdGVySWQgPSBjbHVzdGVyZWROb2RlLmNsdXN0ZXJJZDtcbiAgICBpZiAoY2x1c3RlcklkID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gdGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJJZF07XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIGZvciBjb25kaXRpb25hbGx5IHJlbW92aW5nIGl0ZW1zIGluIGFycmF5XG4gICAqXG4gICAqIERvbmUgbGlrZSB0aGlzIGJlY2F1c2UgQXJyYXkuZmlsdGVyKCkgaXMgbm90IGZ1bGx5IHN1cHBvcnRlZCBieSBhbGwgSUUncy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9maWx0ZXIoYXJyLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHJldCA9IFtdO1xuXG4gICAgZm9yRWFjaChhcnIsIChpdGVtKSA9PiB7XG4gICAgICBpZiAoY2FsbGJhY2soaXRlbSkpIHtcbiAgICAgICAgcmV0LnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNjYW4gYWxsIGVkZ2VzIGZvciBjaGFuZ2VzIGluIGNsdXN0ZXJpbmcgYW5kIGFkanVzdCB0aGlzIGlmIG5lY2Vzc2FyeS5cbiAgICpcbiAgICogQ2FsbCB0aGlzIChpbnRlcm5hbGx5KSBhZnRlciB0aGVyZSBoYXMgYmVlbiBhIGNoYW5nZSBpbiBub2RlIG9yIGVkZ2UgZGF0YS5cbiAgICpcbiAgICogUHJlOiBTdGF0ZXMgb2YgdGhpcy5ib2R5Lm5vZGVzIGFuZCB0aGlzLmJvZHkuZWRnZXMgY29uc2lzdGVudFxuICAgKiBQcmU6IHRoaXMuY2x1c3RlcmVkTm9kZXMgYW5kIHRoaXMuY2x1c3RlcmVkRWRnZSBjb25zaXN0ZW50IHdpdGggY29udGFpbmVkTm9kZXMgYW5kIGNvbnRhaW5lZEVkZ2VzXG4gICAqICAgICAgb2YgY2x1c3RlciBub2Rlcy5cbiAgICovXG4gIF91cGRhdGVTdGF0ZSgpIHtcbiAgICBsZXQgbm9kZUlkO1xuICAgIGNvbnN0IGRlbGV0ZWROb2RlSWRzID0gW107XG4gICAgY29uc3QgZGVsZXRlZEVkZ2VJZHMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGNsdXN0ZXJpbmcgbm9kZXMgb25seVxuICAgICAqXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggY2x1c3RlciBub2RlXG4gICAgICovXG4gICAgY29uc3QgZWFjaENsdXN0ZXJOb2RlID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgICBmb3JFYWNoKHRoaXMuYm9keS5ub2RlcywgKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKG5vZGUuaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvL1xuICAgIC8vIFJlbW92ZSBkZWxldGVkIHJlZ3VsYXIgbm9kZXMgZnJvbSBjbHVzdGVyaW5nXG4gICAgLy9cblxuICAgIC8vIERldGVybWluZSB0aGUgZGVsZXRlZCBub2Rlc1xuICAgIGZvciAobm9kZUlkIGluIHRoaXMuY2x1c3RlcmVkTm9kZXMpIHtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY2x1c3RlcmVkTm9kZXMsIG5vZGVJZCkpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuXG4gICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZWROb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbm9kZXMgZnJvbSBjbHVzdGVyIG5vZGVzXG4gICAgZWFjaENsdXN0ZXJOb2RlKGZ1bmN0aW9uIChjbHVzdGVyTm9kZSkge1xuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBkZWxldGVkTm9kZUlkcy5sZW5ndGg7IG4rKykge1xuICAgICAgICBkZWxldGUgY2x1c3Rlck5vZGUuY29udGFpbmVkTm9kZXNbZGVsZXRlZE5vZGVJZHNbbl1dO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gUmVtb3ZlIG5vZGVzIGZyb20gY2x1c3RlciBsaXN0XG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBkZWxldGVkTm9kZUlkcy5sZW5ndGg7IG4rKykge1xuICAgICAgZGVsZXRlIHRoaXMuY2x1c3RlcmVkTm9kZXNbZGVsZXRlZE5vZGVJZHNbbl1dO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVtb3ZlIGRlbGV0ZWQgZWRnZXMgZnJvbSBjbHVzdGVyaW5nXG4gICAgLy9cblxuICAgIC8vIEFkZCB0aGUgZGVsZXRlZCBjbHVzdGVyZWQgZWRnZXMgdG8gdGhlIGxpc3RcbiAgICBmb3JFYWNoKHRoaXMuY2x1c3RlcmVkRWRnZXMsIChlZGdlSWQpID0+IHtcbiAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgICAgIGlmIChlZGdlID09PSB1bmRlZmluZWQgfHwgIWVkZ2UuZW5kUG9pbnRzVmFsaWQoKSkge1xuICAgICAgICBkZWxldGVkRWRnZUlkc1tlZGdlSWRdID0gZWRnZUlkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2x1c3RlciBub2RlcyBjYW4gYWxzbyBjb250YWluIGVkZ2VzIHdoaWNoIGFyZSBub3QgY2x1c3RlcmVkLFxuICAgIC8vIGkuZS4gbm9kZXMgMS0yIHdpdGhpbiBjbHVzdGVyIHdpdGggYW4gZWRnZSBpbiBiZXR3ZWVuLlxuICAgIC8vIFNvIHRoZSBjbHVzdGVyIG5vZGVzIGFsc28gbmVlZCB0byBiZSBzY2FubmVkIGZvciBpbnZhbGlkIGVkZ2VzXG4gICAgZWFjaENsdXN0ZXJOb2RlKGZ1bmN0aW9uIChjbHVzdGVyTm9kZSkge1xuICAgICAgZm9yRWFjaChjbHVzdGVyTm9kZS5jb250YWluZWRFZGdlcywgKGVkZ2UsIGVkZ2VJZCkgPT4ge1xuICAgICAgICBpZiAoIWVkZ2UuZW5kUG9pbnRzVmFsaWQoKSAmJiAhZGVsZXRlZEVkZ2VJZHNbZWRnZUlkXSkge1xuICAgICAgICAgIGRlbGV0ZWRFZGdlSWRzW2VkZ2VJZF0gPSBlZGdlSWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gQWxzbyBzY2FuIGZvciBjbHVzdGVyIGVkZ2VzIHdoaWNoIG5lZWQgdG8gYmUgcmVtb3ZlZCBpbiB0aGUgYWN0aXZlIGxpc3QuXG4gICAgLy8gUmVndWxhciBlZGdlcyBoYXZlIGJlZW4gcmVtb3ZlZCBiZWZvcmVoYW5kLCBzbyB0aGlzIG9ubHkgcGlja3MgdXAgdGhlIGNsdXN0ZXIgZWRnZXMuXG4gICAgZm9yRWFjaCh0aGlzLmJvZHkuZWRnZXMsIChlZGdlLCBlZGdlSWQpID0+IHtcbiAgICAgIC8vIEV4cGxpY2l0bHkgc2NhbiB0aGUgY29udGFpbmVkIGVkZ2VzIGZvciB2YWxpZGl0eVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgICAgY29uc3QgcmVwbGFjZWRJZHMgPSBlZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzO1xuICAgICAgaWYgKHJlcGxhY2VkSWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IG51bVZhbGlkID0gMDtcblxuICAgICAgICBmb3JFYWNoKHJlcGxhY2VkSWRzLCAoY29udGFpbmVkRWRnZUlkKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGFpbmVkRWRnZSA9IHRoaXMuYm9keS5lZGdlc1tjb250YWluZWRFZGdlSWRdO1xuXG4gICAgICAgICAgaWYgKGNvbnRhaW5lZEVkZ2UgIT09IHVuZGVmaW5lZCAmJiBjb250YWluZWRFZGdlLmVuZFBvaW50c1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIG51bVZhbGlkICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpc1ZhbGlkID0gbnVtVmFsaWQgPiAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVkZ2UuZW5kUG9pbnRzVmFsaWQoKSB8fCAhaXNWYWxpZCkge1xuICAgICAgICBkZWxldGVkRWRnZUlkc1tlZGdlSWRdID0gZWRnZUlkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gUmVtb3ZlIGVkZ2VzIGZyb20gY2x1c3RlciBub2Rlc1xuICAgIGVhY2hDbHVzdGVyTm9kZSgoY2x1c3Rlck5vZGUpID0+IHtcbiAgICAgIGZvckVhY2goZGVsZXRlZEVkZ2VJZHMsIChkZWxldGVkRWRnZUlkKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBjbHVzdGVyTm9kZS5jb250YWluZWRFZGdlc1tkZWxldGVkRWRnZUlkXTtcblxuICAgICAgICBmb3JFYWNoKGNsdXN0ZXJOb2RlLmVkZ2VzLCAoZWRnZSwgbSkgPT4ge1xuICAgICAgICAgIGlmIChlZGdlLmlkID09PSBkZWxldGVkRWRnZUlkKSB7XG4gICAgICAgICAgICBjbHVzdGVyTm9kZS5lZGdlc1ttXSA9IG51bGw7IC8vIERvbid0IHdhbnQgdG8gZGlyZWN0bHkgZGVsZXRlIGhlcmUsIGJlY2F1c2UgaW4gdGhlIGxvb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzID0gdGhpcy5fZmlsdGVyKFxuICAgICAgICAgICAgZWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcyxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChpZCkge1xuICAgICAgICAgICAgICByZXR1cm4gIWRlbGV0ZWRFZGdlSWRzW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBDbGVhbiB1cCB0aGUgbnVsbHNcbiAgICAgICAgY2x1c3Rlck5vZGUuZWRnZXMgPSB0aGlzLl9maWx0ZXIoY2x1c3Rlck5vZGUuZWRnZXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0gIT09IG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBjbHVzdGVyIGxpc3RcbiAgICBmb3JFYWNoKGRlbGV0ZWRFZGdlSWRzLCAoZWRnZUlkKSA9PiB7XG4gICAgICBkZWxldGUgdGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlSWRdO1xuICAgIH0pO1xuXG4gICAgLy8gUmVtb3ZlIGNsdXN0ZXIgZWRnZXMgZnJvbSBhY3RpdmUgbGlzdCAodGhpcy5ib2R5LmVkZ2VzKS5cbiAgICAvLyBkZWxldGVkRWRnZUlkcyBzdGlsbCBjb250YWlucyBpZCBvZiByZWd1bGFyIGVkZ2VzLCBidXQgdGhlc2Ugc2hvdWxkIGFsbFxuICAgIC8vIGJlIGdvbmUgd2hlbiB5b3UgcmVhY2ggaGVyZS5cbiAgICBmb3JFYWNoKGRlbGV0ZWRFZGdlSWRzLCAoZWRnZUlkKSA9PiB7XG4gICAgICBkZWxldGUgdGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF07XG4gICAgfSk7XG5cbiAgICAvL1xuICAgIC8vIENoZWNrIGNoYW5nZWQgY2x1c3RlciBzdGF0ZSBvZiBlZGdlc1xuICAgIC8vXG5cbiAgICAvLyBJdGVyYXRpbmcgb3ZlciBrZXlzIGhlcmUsIGJlY2F1c2UgZWRnZXMgbWF5IGJlIHJlbW92ZWQgaW4gdGhlIGxvb3BcbiAgICBjb25zdCBpZHMgPSBPYmplY3Qua2V5cyh0aGlzLmJvZHkuZWRnZXMpO1xuICAgIGZvckVhY2goaWRzLCAoZWRnZUlkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlID0gdGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF07XG5cbiAgICAgIGNvbnN0IHNob3VsZEJlQ2x1c3RlcmVkID1cbiAgICAgICAgdGhpcy5faXNDbHVzdGVyZWROb2RlKGVkZ2UuZnJvbUlkKSB8fCB0aGlzLl9pc0NsdXN0ZXJlZE5vZGUoZWRnZS50b0lkKTtcbiAgICAgIGlmIChzaG91bGRCZUNsdXN0ZXJlZCA9PT0gdGhpcy5faXNDbHVzdGVyZWRFZGdlKGVkZ2UuaWQpKSB7XG4gICAgICAgIHJldHVybjsgLy8gYWxsIGlzIHdlbGxcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZEJlQ2x1c3RlcmVkKSB7XG4gICAgICAgIC8vIGFkZCBlZGdlIHRvIGNsdXN0ZXJpbmdcbiAgICAgICAgY29uc3QgY2x1c3RlckZyb20gPSB0aGlzLl9nZXRDbHVzdGVyTm9kZUZvck5vZGUoZWRnZS5mcm9tSWQpO1xuICAgICAgICBpZiAoY2x1c3RlckZyb20gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX2NsdXN0ZXJFZGdlcyh0aGlzLmJvZHkubm9kZXNbZWRnZS5mcm9tSWRdLCBlZGdlLCBjbHVzdGVyRnJvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbHVzdGVyVG8gPSB0aGlzLl9nZXRDbHVzdGVyTm9kZUZvck5vZGUoZWRnZS50b0lkKTtcbiAgICAgICAgaWYgKGNsdXN0ZXJUbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fY2x1c3RlckVkZ2VzKHRoaXMuYm9keS5ub2Rlc1tlZGdlLnRvSWRdLCBlZGdlLCBjbHVzdGVyVG8pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogY2hlY2sgdGhhdCBpdCB3b3JrcyBmb3IgYm90aCBlZGdlcyBjbHVzdGVyZWRcbiAgICAgICAgLy8gICAgICAgKFRoaXMgbWlnaHQgYmUgcGFyYW5vaWEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5fY2x1c3RlckVkZ2VzW2VkZ2VJZF07XG4gICAgICAgIHRoaXMuX3Jlc3RvcmVFZGdlKGVkZ2UpO1xuICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgYmUgaGFwcGVuaW5nLCB0aGUgc3RhdGUgc2hvdWxkXG4gICAgICAgIC8vIGJlIHByb3Blcmx5IHVwZGF0ZWQgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgaXQgKmlzKiByZWFjaGVkIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLCB0aGVuIHdlIGhhdmUgdG8gaW1wbGVtZW50XG4gICAgICAgIC8vIHVuZG8gY2x1c3RlcmluZyBmb3IgdGhpcyBlZGdlIGhlcmUuXG4gICAgICAgIC8vIHRocm93IG5ldyBFcnJvcigncmVtb3ZlIGVkZ2UgZnJvbSBjbHVzdGVyaW5nIG5vdCBpbXBsZW1lbnRlZCEnKVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2x1c3RlcnMgbWF5IGJlIG5lc3RlZCB0byBhbnkgbGV2ZWwuIEtlZXAgb24gb3BlbmluZyB1bnRpbCBub3RoaW5nIHRvIG9wZW5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGxldCBjb250aW51ZUxvb3AgPSB0cnVlO1xuICAgIHdoaWxlIChjb250aW51ZUxvb3ApIHtcbiAgICAgIGNvbnN0IGNsdXN0ZXJzVG9PcGVuID0gW107XG5cbiAgICAgIC8vIERldGVybWluZSB0aGUgaWQncyBvZiBjbHVzdGVycyB0aGF0IG5lZWQgb3BlbmluZ1xuICAgICAgZWFjaENsdXN0ZXJOb2RlKGZ1bmN0aW9uIChjbHVzdGVyTm9kZSkge1xuICAgICAgICBjb25zdCBudW1Ob2RlcyA9IE9iamVjdC5rZXlzKGNsdXN0ZXJOb2RlLmNvbnRhaW5lZE5vZGVzKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGFsbG93U2luZ2xlID0gY2x1c3Rlck5vZGUub3B0aW9ucy5hbGxvd1NpbmdsZU5vZGVDbHVzdGVyID09PSB0cnVlO1xuICAgICAgICBpZiAoKGFsbG93U2luZ2xlICYmIG51bU5vZGVzIDwgMSkgfHwgKCFhbGxvd1NpbmdsZSAmJiBudW1Ob2RlcyA8IDIpKSB7XG4gICAgICAgICAgY2x1c3RlcnNUb09wZW4ucHVzaChjbHVzdGVyTm9kZS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBPcGVuIHRoZW1cbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgY2x1c3RlcnNUb09wZW4ubGVuZ3RoOyArK24pIHtcbiAgICAgICAgdGhpcy5vcGVuQ2x1c3RlcihcbiAgICAgICAgICBjbHVzdGVyc1RvT3BlbltuXSxcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBmYWxzZSAvKiBEb24ndCByZWZyZXNoLCB3ZSdyZSBpbiBhbiByZWZyZXNoL3VwZGF0ZSBhbHJlYWR5ICovXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlTG9vcCA9IGNsdXN0ZXJzVG9PcGVuLmxlbmd0aCA+IDA7XG4gICAgICBjaGFuZ2VkID0gY2hhbmdlZCB8fCBjb250aW51ZUxvb3A7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVN0YXRlKCk7IC8vIFJlZG8gdGhpcyBtZXRob2QgKHJlY3Vyc2lvbiBwb3NzaWJsZSEgc2hvdWxkIGJlIHNhZmUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpZiBub2RlIHdpdGggZ2l2ZW4gaWQgaXMgcGFydCBvZiBhIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHBhcnQgb2YgYSBjbHVzdGVyLlxuICAgKi9cbiAgX2lzQ2x1c3RlcmVkTm9kZShub2RlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIGVkZ2Ugd2l0aCBnaXZlbiBpZCBpcyBub3QgdmlzaWJsZSBkdWUgdG8gY2x1c3RlcmluZy5cbiAgICpcbiAgICogQW4gZWRnZSBpcyBjb25zaWRlcmVkIGNsdXN0ZXJlZCBpZjpcbiAgICogLSBpdCBpcyBkaXJlY3RseSByZXBsYWNlZCBieSBhIGNsdXN0ZXJpbmcgZWRnZVxuICAgKiAtIGFueSBvZiBpdHMgY29ubmVjdGluZyBub2RlcyBpcyBpbiBhIGNsdXN0ZXJcbiAgICpcbiAgICogQHBhcmFtIHt2aXMuRWRnZS5pZH0gZWRnZUlkXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHBhcnQgb2YgYSBjbHVzdGVyLlxuICAgKi9cbiAgX2lzQ2x1c3RlcmVkRWRnZShlZGdlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlSWRdICE9PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2x1c3RlckVuZ2luZTtcbiIsICJpbXBvcnQgeyBzZWxlY3RpdmVEZWVwRXh0ZW5kIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSB0byBhIHVzYWJsZSBmb3JtLlxuICpcbiAqIFNwZWNpZmljYWxseSwgc2V0IHVwIHRoaXMgbWV0aG9kIGZvciB0aGUgY2FzZSBvZiBydW5uaW5nIG9uIG5vZGUuanMgd2l0aCBqc2RvbSBlbmFibGVkLlxuICpcbiAqIE5PVEVTOlxuICpcbiAqIE9uIG5vZGUuanMsIHdoZW4gY2FsbGluZyB0aGlzIGRpcmVjdGx5IG91dHNpZGUgb2YgdGhpcyBjbGFzcywgYHdpbmRvd2AgaXMgbm90IGRlZmluZWQuXG4gKiAgIFRoaXMgaGFwcGVucyBldmVuIGlmIGpzZG9tIGlzIHVzZWQuXG4gKiBGb3Igbm9kZS5qcyArIGpzZG9tLCBgd2luZG93YCBpcyBhdmFpbGFibGUgYXQgdGhlIG1vbWVudCB0aGUgY29uc3RydWN0b3IgaXMgY2FsbGVkLlxuICogICBGb3IgdGhpcyByZWFzb24sIHRoZSBjYWxsZWQgaXMgcGxhY2VkIHdpdGhpbiB0aGUgY29uc3RydWN0b3IuXG4gKiBFdmVuIHRoZW4sIGB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKClgIGlzIG5vdCBkZWZpbmVkLCBzbyBpdCBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZC5cbiAqIER1cmluZyB1bml0IHRlc3RpbmcsIGl0IGhhcHBlbnMgdGhhdCB0aGUgd2luZG93IG9iamVjdCBpcyByZXNldCBkdXJpbmcgZXhlY3V0aW9uLCBjYXVzaW5nXG4gKiAgIGEgcnVudGltZSBlcnJvciBkdWUgdG8gbWlzc2luZyBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKClgLiBUaGlzIG5lZWRzIHRvIGJlIGNvbXBlbnNhdGVkIGZvcixcbiAqICAgc2VlIGBfcmVxdWVzdE5leHRGcmFtZSgpYC5cbiAqIFNpbmNlIHRoaXMgaXMgYSBnbG9iYWwgb2JqZWN0LCBpdCBtYXkgYWZmZWN0IG90aGVyIG1vZHVsZXMgYmVzaWRlcyBgTmV0d29ya2AuIFdpdGggbm9ybWFsXG4gKiAgIHVzYWdlLCB0aGlzIGRvZXMgbm90IGNhdXNlIGFueSBwcm9ibGVtcy4gRHVyaW5nIHVuaXQgdGVzdGluZywgZXJyb3JzIG1heSBvY2N1ci4gVGhlc2UgaGF2ZVxuICogICBiZWVuIGNvbXBlbnNhdGVkIGZvciwgc2VlIGNvbW1lbnQgYmxvY2sgaW4gX3JlcXVlc3ROZXh0RnJhbWUoKS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfaW5pdFJlcXVlc3RBbmltYXRpb25GcmFtZSgpIHtcbiAgbGV0IGZ1bmM7XG5cbiAgaWYgKHdpbmRvdyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZnVuYyA9XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgICB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgICB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgICB3aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG4gIH1cblxuICBpZiAoZnVuYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gd2luZG93IG9yIG1ldGhvZCBub3QgcHJlc2VudCwgc2V0dGluZyBtb2NrIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIC8vY29uc29sZS5sb2coXCJDYWxsZWQgbW9jayByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIik7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmM7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgY2FudmFzIHJlbmRlcmVyXG4gKi9cbmNsYXNzIENhbnZhc1JlbmRlcmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGNhbnZhcykge1xuICAgIF9pbml0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcblxuICAgIHRoaXMucmVkcmF3UmVxdWVzdGVkID0gZmFsc2U7XG4gICAgdGhpcy5yZW5kZXJUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlcXVpcmVzVGltZW91dCA9IHRydWU7XG4gICAgdGhpcy5yZW5kZXJpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlclJlcXVlc3RzID0gMDtcbiAgICB0aGlzLmFsbG93UmVkcmF3ID0gdHJ1ZTtcblxuICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnpvb21pbmcgPSBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgaGlkZUVkZ2VzT25EcmFnOiBmYWxzZSxcbiAgICAgIGhpZGVFZGdlc09uWm9vbTogZmFsc2UsXG4gICAgICBoaWRlTm9kZXNPbkRyYWc6IGZhbHNlLFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5fZGV0ZXJtaW5lQnJvd3Nlck1ldGhvZCgpO1xuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkcmFnU3RhcnRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkcmFnRW5kXCIsICgpID0+IHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInpvb21cIiwgKCkgPT4ge1xuICAgICAgdGhpcy56b29taW5nID0gdHJ1ZTtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy56b29tVGltZW91dElkKTtcbiAgICAgIHRoaXMuem9vbVRpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy56b29taW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RSZWRyYXcuYmluZCh0aGlzKSgpO1xuICAgICAgfSwgMjUwKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9yZXNpemVOb2Rlc1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLl9yZXNpemVOb2RlcygpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX3JlZHJhd1wiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5yZW5kZXJpbmdBY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX3JlZHJhdygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2Jsb2NrUmVkcmF3XCIsICgpID0+IHtcbiAgICAgIHRoaXMuYWxsb3dSZWRyYXcgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9hbGxvd1JlZHJhd1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLmFsbG93UmVkcmF3ID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVkcmF3UmVxdWVzdGVkID0gZmFsc2U7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfcmVxdWVzdFJlZHJhd1wiLCB0aGlzLl9yZXF1ZXN0UmVkcmF3LmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX3N0YXJ0UmVuZGVyaW5nXCIsICgpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyUmVxdWVzdHMgKz0gMTtcbiAgICAgIHRoaXMucmVuZGVyaW5nQWN0aXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3N0YXJ0UmVuZGVyaW5nKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfc3RvcFJlbmRlcmluZ1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlclJlcXVlc3RzIC09IDE7XG4gICAgICB0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9IHRoaXMucmVuZGVyUmVxdWVzdHMgPiAwO1xuICAgICAgdGhpcy5yZW5kZXJUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJSZXF1ZXN0cyA9IDA7XG4gICAgICB0aGlzLmFsbG93UmVkcmF3ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucmVxdWlyZXNUaW1lb3V0ID09PSB0cnVlKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlbmRlclRpbWVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJlbmRlclRpbWVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9mZigpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBbXCJoaWRlRWRnZXNPbkRyYWdcIiwgXCJoaWRlRWRnZXNPblpvb21cIiwgXCJoaWRlTm9kZXNPbkRyYWdcIl07XG4gICAgICBzZWxlY3RpdmVEZWVwRXh0ZW5kKGZpZWxkcywgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSB0aGUgZHJhd2luZyBvZiB0aGUgbmV4dCBmcmFtZS5cbiAgICpcbiAgICogQ2FsbHMgdGhlIGNhbGxiYWNrIHdoZW4gdGhlIG5leHQgZnJhbWUgY2FuIG9yIHdpbGwgYmUgZHJhd24uXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWxheSAtIHRpbWVvdXQgY2FzZSBvbmx5LCB3YWl0IHRoaXMgbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICAgKiBAcmV0dXJucyB7RnVuY3Rpb24gfCB1bmRlZmluZWR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVxdWVzdE5leHRGcmFtZShjYWxsYmFjaywgZGVsYXkpIHtcbiAgICAvLyBEdXJpbmcgdW5pdCB0ZXN0aW5nLCBpdCBoYXBwZW5zIHRoYXQgdGhlIG1vY2sgd2luZG93IG9iamVjdCBpcyByZXNldCB3aGlsZVxuICAgIC8vIHRoZSBuZXh0IGZyYW1lIGlzIHN0aWxsIHBlbmRpbmcuIFRoZW4sIGVpdGhlciAnd2luZG93JyBpcyBub3QgcHJlc2VudCwgb3JcbiAgICAvLyAncmVxdWVzdEFuaW1hdGlvbkZyYW1lKCknIGlzIG5vdCBwcmVzZW50IGJlY2F1c2UgaXQgaXMgbm90IGRlZmluZWQgb24gdGhlXG4gICAgLy8gbW9jayB3aW5kb3cgb2JqZWN0LlxuICAgIC8vXG4gICAgLy8gQXMgYSBjb25zZXF1ZW5jZSwgdW5yZWxhdGVkIHVuaXQgdGVzdHMgbWF5IGFwcGVhciB0byBmYWlsLCBldmVuIGlmIHRoZSBwcm9ibGVtXG4gICAgLy8gZGVzY3JpYmVkIGhhcHBlbnMgaW4gdGhlIGN1cnJlbnQgdW5pdCB0ZXN0LlxuICAgIC8vXG4gICAgLy8gVGhpcyBpcyBub3Qgc29tZXRoaW5nIHRoYXQgd2lsbCBoYXBwZW4gaW4gbm9ybWFsIG9wZXJhdGlvbiwgYnV0IHdlIHN0aWxsIG5lZWRcbiAgICAvLyB0byB0YWtlIGl0IGludG8gYWNjb3VudC5cbiAgICAvL1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47IC8vIERvaW5nIGBpZiAod2luZG93ID09PSB1bmRlZmluZWQpYCBkb2VzIG5vdCB3b3JrIGhlcmUhXG5cbiAgICBsZXQgdGltZXI7XG5cbiAgICBjb25zdCBteVdpbmRvdyA9IHdpbmRvdzsgLy8gR3JhYiBhIHJlZmVyZW5jZSB0byByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IHRoYXQgJ3dpbmRvdycgaXMgcmVzZXRcbiAgICAvLyB3aGlsZSBydW5uaW5nIHRoaXMgbWV0aG9kLlxuXG4gICAgaWYgKHRoaXMucmVxdWlyZXNUaW1lb3V0ID09PSB0cnVlKSB7XG4gICAgICAvLyB3YWl0IGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYW5kIHBlcmZvcm0gdGhlIGFuaW1hdGlvbiBzdGVwIGZ1bmN0aW9uXG4gICAgICB0aW1lciA9IG15V2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG15V2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgICAgICB0aW1lciA9IG15V2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRpbWVyO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RhcnRSZW5kZXJpbmcoKSB7XG4gICAgaWYgKHRoaXMucmVuZGVyaW5nQWN0aXZlID09PSB0cnVlKSB7XG4gICAgICBpZiAodGhpcy5yZW5kZXJUaW1lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVuZGVyVGltZXIgPSB0aGlzLl9yZXF1ZXN0TmV4dEZyYW1lKFxuICAgICAgICAgIHRoaXMuX3JlbmRlclN0ZXAuYmluZCh0aGlzKSxcbiAgICAgICAgICB0aGlzLnNpbXVsYXRpb25JbnRlcnZhbFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbmRlclN0ZXAoKSB7XG4gICAgaWYgKHRoaXMucmVuZGVyaW5nQWN0aXZlID09PSB0cnVlKSB7XG4gICAgICAvLyByZXNldCB0aGUgcmVuZGVyVGltZXIgc28gYSBuZXcgc2NoZWR1bGVkIGFuaW1hdGlvbiBzdGVwIGNhbiBiZSBzZXRcbiAgICAgIHRoaXMucmVuZGVyVGltZXIgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVzVGltZW91dCA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyB0aGlzIHNjaGVkdWxlcyBhIG5ldyBzaW11bGF0aW9uIHN0ZXBcbiAgICAgICAgdGhpcy5fc3RhcnRSZW5kZXJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVkcmF3KCk7XG5cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVzVGltZW91dCA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gdGhpcyBzY2hlZHVsZXMgYSBuZXcgc2ltdWxhdGlvbiBzdGVwXG4gICAgICAgIHRoaXMuX3N0YXJ0UmVuZGVyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyB0aGUgbmV0d29yayB3aXRoIHRoZSBjdXJyZW50IGRhdGFcbiAgICogY2hhcnQgd2lsbCBiZSByZXNpemVkIHRvby5cbiAgICovXG4gIHJlZHJhdygpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwic2V0U2l6ZVwiKTtcbiAgICB0aGlzLl9yZWRyYXcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgdGhlIG5ldHdvcmsgd2l0aCB0aGUgY3VycmVudCBkYXRhXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVxdWVzdFJlZHJhdygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJlZHJhd1JlcXVlc3RlZCAhPT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5yZW5kZXJpbmdBY3RpdmUgPT09IGZhbHNlICYmXG4gICAgICB0aGlzLmFsbG93UmVkcmF3ID09PSB0cnVlXG4gICAgKSB7XG4gICAgICB0aGlzLnJlZHJhd1JlcXVlc3RlZCA9IHRydWU7XG4gICAgICB0aGlzLl9yZXF1ZXN0TmV4dEZyYW1lKCgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVkcmF3KGZhbHNlKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgdGhlIG5ldHdvcmsgd2l0aCB0aGUgY3VycmVudCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpZGRlbj1mYWxzZV0gfCBVc2VkIHRvIGdldCB0aGUgZmlyc3QgZXN0aW1hdGUgb2YgdGhlIG5vZGUgc2l6ZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHRoZSBub2RlcyBhcmUgZHJhd24gYWZ0ZXIgd2hpY2ggdGhleSBhcmUgcXVpY2tseSBkcmF3biBvdmVyLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlZHJhdyhoaWRkZW4gPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLmFsbG93UmVkcmF3ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiaW5pdFJlZHJhd1wiKTtcblxuICAgICAgdGhpcy5yZWRyYXdSZXF1ZXN0ZWQgPSBmYWxzZTtcblxuICAgICAgY29uc3QgZHJhd0xhdGVyID0ge1xuICAgICAgICBkcmF3RXh0ZXJuYWxMYWJlbHM6IG51bGwsXG4gICAgICB9O1xuXG4gICAgICAvLyB3aGVuIHRoZSBjb250YWluZXIgZGl2IHdhcyBoaWRkZW4sIHRoaXMgZml4ZXMgaXQgYmFjayB1cCFcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLndpZHRoID09PSAwIHx8XG4gICAgICAgIHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5oZWlnaHQgPT09IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNhbnZhcy5zZXRTaXplKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FudmFzLnNldFRyYW5zZm9ybSgpO1xuXG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGg7XG4gICAgICBjb25zdCBoID0gdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodDtcbiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG5cbiAgICAgIC8vIGlmIHRoZSBkaXYgaXMgaGlkZGVuLCB3ZSBzdG9wIHRoZSByZWRyYXcgaGVyZSBmb3IgcGVyZm9ybWFuY2UuXG4gICAgICBpZiAodGhpcy5jYW52YXMuZnJhbWUuY2xpZW50V2lkdGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXQgc2NhbGluZyBhbmQgdHJhbnNsYXRpb25cbiAgICAgIGN0eC5zYXZlKCk7XG4gICAgICBjdHgudHJhbnNsYXRlKHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLngsIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnkpO1xuICAgICAgY3R4LnNjYWxlKHRoaXMuYm9keS52aWV3LnNjYWxlLCB0aGlzLmJvZHkudmlldy5zY2FsZSk7XG5cbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJiZWZvcmVEcmF3aW5nXCIsIGN0eCk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG5cbiAgICAgIGlmIChoaWRkZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodGhpcy5kcmFnZ2luZyA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICh0aGlzLmRyYWdnaW5nID09PSB0cnVlICYmXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5oaWRlRWRnZXNPbkRyYWcgPT09IGZhbHNlKSkgJiZcbiAgICAgICAgICAodGhpcy56b29taW5nID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgKHRoaXMuem9vbWluZyA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuaGlkZUVkZ2VzT25ab29tID09PSBmYWxzZSkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX2RyYXdFZGdlcyhjdHgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9PT0gZmFsc2UgfHxcbiAgICAgICAgKHRoaXMuZHJhZ2dpbmcgPT09IHRydWUgJiYgdGhpcy5vcHRpb25zLmhpZGVOb2Rlc09uRHJhZyA9PT0gZmFsc2UpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgeyBkcmF3RXh0ZXJuYWxMYWJlbHMgfSA9IHRoaXMuX2RyYXdOb2RlcyhjdHgsIGhpZGRlbik7XG4gICAgICAgIGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbHMgPSBkcmF3RXh0ZXJuYWxMYWJlbHM7XG4gICAgICB9XG5cbiAgICAgIC8vIGRyYXcgdGhlIGFycm93cyBsYXN0IHNvIHRoZXkgd2lsbCBiZSBhdCB0aGUgdG9wXG4gICAgICBpZiAoaGlkZGVuID09PSBmYWxzZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRoaXMuZHJhZ2dpbmcgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAodGhpcy5kcmFnZ2luZyA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuaGlkZUVkZ2VzT25EcmFnID09PSBmYWxzZSkpICYmXG4gICAgICAgICAgKHRoaXMuem9vbWluZyA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICh0aGlzLnpvb21pbmcgPT09IHRydWUgJiYgdGhpcy5vcHRpb25zLmhpZGVFZGdlc09uWm9vbSA9PT0gZmFsc2UpKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9kcmF3QXJyb3dzKGN0eCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbHMgIT0gbnVsbCkge1xuICAgICAgICBkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWxzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoaWRkZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2RyYXdTZWxlY3Rpb25Cb3goY3R4KTtcbiAgICAgIH1cblxuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImFmdGVyRHJhd2luZ1wiLCBjdHgpO1xuICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuXG4gICAgICAvLyByZXN0b3JlIG9yaWdpbmFsIHNjYWxpbmcgYW5kIHRyYW5zbGF0aW9uXG4gICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgaWYgKGhpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgYWxsIG5vZGVzXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSAgIGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbHdheXNTaG93XVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc2l6ZU5vZGVzKCkge1xuICAgIHRoaXMuY2FudmFzLnNldFRyYW5zZm9ybSgpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoKTtcbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC50cmFuc2xhdGUodGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueCwgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueSk7XG4gICAgY3R4LnNjYWxlKHRoaXMuYm9keS52aWV3LnNjYWxlLCB0aGlzLmJvZHkudmlldy5zY2FsZSk7XG5cbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBsZXQgbm9kZTtcblxuICAgIC8vIHJlc2l6ZSBhbGwgbm9kZXNcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICBub2RlID0gbm9kZXNbbm9kZUlkXTtcbiAgICAgICAgbm9kZS5yZXNpemUoY3R4KTtcbiAgICAgICAgbm9kZS51cGRhdGVCb3VuZGluZ0JveChjdHgsIG5vZGUuc2VsZWN0ZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgc2NhbGluZyBhbmQgdHJhbnNsYXRpb25cbiAgICBjdHgucmVzdG9yZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBhbGwgbm9kZXNcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAgMkQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Fsd2F5c1Nob3ddXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGhpZ2hlciBsYXllcnMuXG4gICAqL1xuICBfZHJhd05vZGVzKGN0eCwgYWx3YXlzU2hvdyA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3Qgbm9kZUluZGljZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgbGV0IG5vZGU7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBbXTtcbiAgICBjb25zdCBob3ZlcmVkID0gW107XG4gICAgY29uc3QgbWFyZ2luID0gMjA7XG4gICAgY29uc3QgdG9wTGVmdCA9IHRoaXMuY2FudmFzLkRPTXRvQ2FudmFzKHsgeDogLW1hcmdpbiwgeTogLW1hcmdpbiB9KTtcbiAgICBjb25zdCBib3R0b21SaWdodCA9IHRoaXMuY2FudmFzLkRPTXRvQ2FudmFzKHtcbiAgICAgIHg6IHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCArIG1hcmdpbixcbiAgICAgIHk6IHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQgKyBtYXJnaW4sXG4gICAgfSk7XG4gICAgY29uc3Qgdmlld2FibGVBcmVhID0ge1xuICAgICAgdG9wOiB0b3BMZWZ0LnksXG4gICAgICBsZWZ0OiB0b3BMZWZ0LngsXG4gICAgICBib3R0b206IGJvdHRvbVJpZ2h0LnksXG4gICAgICByaWdodDogYm90dG9tUmlnaHQueCxcbiAgICB9O1xuXG4gICAgY29uc3QgZHJhd0V4dGVybmFsTGFiZWxzID0gW107XG5cbiAgICAvLyBkcmF3IHVuc2VsZWN0ZWQgbm9kZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgIC8vIHNldCBzZWxlY3RlZCBhbmQgaG92ZXJlZCBub2RlcyBhc2lkZVxuICAgICAgaWYgKG5vZGUuaG92ZXIpIHtcbiAgICAgICAgaG92ZXJlZC5wdXNoKG5vZGVJbmRpY2VzW2ldKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5pc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgc2VsZWN0ZWQucHVzaChub2RlSW5kaWNlc1tpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYWx3YXlzU2hvdyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IGRyYXdMYXRlciA9IG5vZGUuZHJhdyhjdHgpO1xuICAgICAgICAgIGlmIChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgZHJhd0V4dGVybmFsTGFiZWxzLnB1c2goZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5pc0JvdW5kaW5nQm94T3ZlcmxhcHBpbmdXaXRoKHZpZXdhYmxlQXJlYSkgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBkcmF3TGF0ZXIgPSBub2RlLmRyYXcoY3R4KTtcbiAgICAgICAgICBpZiAoZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRyYXdFeHRlcm5hbExhYmVscy5wdXNoKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUudXBkYXRlQm91bmRpbmdCb3goY3R4LCBub2RlLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpO1xuICAgIGNvbnN0IHNlbGVjdGVkTGVuZ3RoID0gc2VsZWN0ZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhvdmVyZWRMZW5ndGggPSBob3ZlcmVkLmxlbmd0aDtcblxuICAgIC8vIGRyYXcgdGhlIHNlbGVjdGVkIG5vZGVzIG9uIHRvcFxuICAgIGZvciAoaSA9IDA7IGkgPCBzZWxlY3RlZExlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gbm9kZXNbc2VsZWN0ZWRbaV1dO1xuICAgICAgY29uc3QgZHJhd0xhdGVyID0gbm9kZS5kcmF3KGN0eCk7XG4gICAgICBpZiAoZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsICE9IG51bGwpIHtcbiAgICAgICAgZHJhd0V4dGVybmFsTGFiZWxzLnB1c2goZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkcmF3IGhvdmVyZWQgbm9kZXMgYWJvdmUgZXZlcnl0aGluZyBlbHNlOiBmaXhlcyBodHRwczovL2dpdGh1Yi5jb20vdmlzanMvdmlzLW5ldHdvcmsvaXNzdWVzLzIyNlxuICAgIGZvciAoaSA9IDA7IGkgPCBob3ZlcmVkTGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tob3ZlcmVkW2ldXTtcbiAgICAgIGNvbnN0IGRyYXdMYXRlciA9IG5vZGUuZHJhdyhjdHgpO1xuICAgICAgaWYgKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCAhPSBudWxsKSB7XG4gICAgICAgIGRyYXdFeHRlcm5hbExhYmVscy5wdXNoKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYXdFeHRlcm5hbExhYmVsczogKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGRyYXcgb2YgZHJhd0V4dGVybmFsTGFiZWxzKSB7XG4gICAgICAgICAgZHJhdygpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IGFsbCBlZGdlc1xuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4ICAyRCBjb250ZXh0IG9mIGEgSFRNTCBjYW52YXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3RWRnZXMoY3R4KSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLmJvZHkuZWRnZUluZGljZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUluZGljZXNbaV1dO1xuICAgICAgaWYgKGVkZ2UuY29ubmVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgIGVkZ2UuZHJhdyhjdHgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgYWxsIGFycm93c1xuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4ICAyRCBjb250ZXh0IG9mIGEgSFRNTCBjYW52YXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3QXJyb3dzKGN0eCkge1xuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5ib2R5LmVkZ2VzO1xuICAgIGNvbnN0IGVkZ2VJbmRpY2VzID0gdGhpcy5ib2R5LmVkZ2VJbmRpY2VzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2VkZ2VJbmRpY2VzW2ldXTtcbiAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBlZGdlLmRyYXdBcnJvd3MoY3R4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIHJlcXVpcmVzIGEgc2V0VGltZW91dCBvciBhIHJlcXVlc3RBbmltYXRpb25GcmFtZS4gVGhpcyB3YXMgcmVxdWlyZWQgYmVjYXVzZVxuICAgKiBzb21lIGltcGxlbWVudGF0aW9ucyAoc2FmYXJpIGFuZCBJRTkpIGRpZCBub3Qgc3VwcG9ydCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZXRlcm1pbmVCcm93c2VyTWV0aG9kKCkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBicm93c2VyVHlwZSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgIHRoaXMucmVxdWlyZXNUaW1lb3V0ID0gZmFsc2U7XG4gICAgICBpZiAoYnJvd3NlclR5cGUuaW5kZXhPZihcIm1zaWUgOS4wXCIpICE9IC0xKSB7XG4gICAgICAgIC8vIElFIDlcbiAgICAgICAgdGhpcy5yZXF1aXJlc1RpbWVvdXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChicm93c2VyVHlwZS5pbmRleE9mKFwic2FmYXJpXCIpICE9IC0xKSB7XG4gICAgICAgIC8vIHNhZmFyaVxuICAgICAgICBpZiAoYnJvd3NlclR5cGUuaW5kZXhPZihcImNocm9tZVwiKSA8PSAtMSkge1xuICAgICAgICAgIHRoaXMucmVxdWlyZXNUaW1lb3V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlcXVpcmVzVGltZW91dCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBzZWxlY3Rpb24gYm94XG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHggIDJEIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdTZWxlY3Rpb25Cb3goY3R4KSB7XG4gICAgaWYgKHRoaXMuYm9keS5zZWxlY3Rpb25Cb3guc2hvdykge1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY29uc3Qgd2lkdGggPVxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLmVuZC54IC1cbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5zdGFydC54O1xuICAgICAgY29uc3QgaGVpZ2h0ID1cbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5lbmQueSAtXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQueTtcbiAgICAgIGN0eC5yZWN0KFxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLnN0YXJ0LngsXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQueSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgKTtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBcInJnYmEoMTUxLCAxOTQsIDI1MiwgMC4yKVwiO1xuICAgICAgY3R4LmZpbGxSZWN0KFxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLnN0YXJ0LngsXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQueSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgKTtcbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IFwicmdiYSgxNTEsIDE5NCwgMjUyLCAxKVwiO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbnZhc1JlbmRlcmVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnRpbWVycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0SW50ZXJ2YWw7XG4iLCAiLyoqXG4gKiBSZWdpc3RlciBhIHRvdWNoIGV2ZW50LCB0YWtpbmcgcGxhY2UgYmVmb3JlIGEgZ2VzdHVyZVxuICpcbiAqIEBwYXJhbSB7SGFtbWVyfSBoYW1tZXIgICAgICAgQSBoYW1tZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgQ2FsbGJhY2ssIGNhbGxlZCBhcyBjYWxsYmFjayhldmVudClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uVG91Y2goaGFtbWVyLCBjYWxsYmFjaykge1xuICBjYWxsYmFjay5pbnB1dEhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuaXNGaXJzdCkge1xuICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBoYW1tZXIub24oXCJoYW1tZXIuaW5wdXRcIiwgY2FsbGJhY2suaW5wdXRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIHJlbGVhc2UgZXZlbnQsIHRha2luZyBwbGFjZSBhZnRlciBhIGdlc3R1cmVcbiAqXG4gKiBAcGFyYW0ge0hhbW1lcn0gaGFtbWVyICAgICAgIEEgaGFtbWVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxiYWNrLCBjYWxsZWQgYXMgY2FsbGJhY2soZXZlbnQpXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uUmVsZWFzZShoYW1tZXIsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrLmlucHV0SGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC5pc0ZpbmFsKSB7XG4gICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBoYW1tZXIub24oXCJoYW1tZXIuaW5wdXRcIiwgY2FsbGJhY2suaW5wdXRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBVbnJlZ2lzdGVyIGEgdG91Y2ggZXZlbnQsIHRha2luZyBwbGFjZSBiZWZvcmUgYSBnZXN0dXJlXG4gKlxuICogQHBhcmFtIHtIYW1tZXJ9IGhhbW1lciAgICAgICBBIGhhbW1lciBpbnN0YW5jZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBDYWxsYmFjaywgY2FsbGVkIGFzIGNhbGxiYWNrKGV2ZW50KVxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZmVG91Y2goaGFtbWVyLCBjYWxsYmFjaykge1xuICBoYW1tZXIub2ZmKFwiaGFtbWVyLmlucHV0XCIsIGNhbGxiYWNrLmlucHV0SGFuZGxlcik7XG59XG5cbi8qKlxuICogVW5yZWdpc3RlciBhIHJlbGVhc2UgZXZlbnQsIHRha2luZyBwbGFjZSBiZWZvcmUgYSBnZXN0dXJlXG4gKlxuICogQHBhcmFtIHtIYW1tZXJ9IGhhbW1lciAgICAgICBBIGhhbW1lciBpbnN0YW5jZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBDYWxsYmFjaywgY2FsbGVkIGFzIGNhbGxiYWNrKGV2ZW50KVxuICovXG5leHBvcnQgY29uc3Qgb2ZmUmVsZWFzZSA9IG9mZlRvdWNoO1xuXG4vKipcbiAqIEhhY2sgdGhlIFBpbmNoUmVjb2duaXplciBzdWNoIHRoYXQgaXQgZG9lc24ndCBwcmV2ZW50IGRlZmF1bHQgYmVoYXZpb3JcbiAqIGZvciB2ZXJ0aWNhbCBwYW5uaW5nLlxuICpcbiAqIFllYWggLi4uIHRoaXMgaXMgcXVpdGUgYSBoYWNrIC4uLiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2hhbW1lcmpzL2hhbW1lci5qcy9pc3N1ZXMvOTMyXG4gKlxuICogQHBhcmFtIHtIYW1tZXIuUGluY2h9IHBpbmNoUmVjb2duaXplclxuICogQHJldHVybnMge0hhbW1lci5QaW5jaH0gcmV0dXJucyB0aGUgcGluY2hSZWNvZ25pemVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlUHJldmVudERlZmF1bHRWZXJ0aWNhbGx5KHBpbmNoUmVjb2duaXplcikge1xuICBjb25zdCBUT1VDSF9BQ1RJT05fUEFOX1kgPSBcInBhbi15XCI7XG5cbiAgcGluY2hSZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGRlZmF1bHQgbWV0aG9kIHJldHVybnMgW1RPVUNIX0FDVElPTl9OT05FXVxuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX1BBTl9ZXTtcbiAgfTtcblxuICByZXR1cm4gcGluY2hSZWNvZ25pemVyO1xufVxuIiwgImltcG9ydCB7IG9uUmVsZWFzZSwgb25Ub3VjaCB9IGZyb20gXCIuLi8uLi9oYW1tZXJVdGlsXCI7XG5cbmltcG9ydCB7IEhhbW1lciwgc2VsZWN0aXZlRGVlcEV4dGVuZCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIG1haW4gZnJhbWUgZm9yIHRoZSBOZXR3b3JrLlxuICogVGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBvbmNlIHdoZW4gYSBOZXR3b3JrIG9iamVjdCBpcyBjcmVhdGVkLiBUaGUgZnJhbWVcbiAqIGNvbnRhaW5zIGEgY2FudmFzLCBhbmQgdGhpcyBjYW52YXMgY29udGFpbnMgYWxsIG9iamVjdHMgbGlrZSB0aGUgYXhpcyBhbmRcbiAqIG5vZGVzLlxuICovXG5jbGFzcyBDYW52YXMge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHkpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IDE7XG4gICAgdGhpcy5jYW1lcmFTdGF0ZSA9IHt9O1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbnZhc1ZpZXdDZW50ZXIgPSB7fTtcbiAgICB0aGlzLl9jbGVhbnVwQ2FsbGJhY2tzID0gW107XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgYXV0b1Jlc2l6ZTogdHJ1ZSxcbiAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmJpbmRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGV2ZW50IGxpc3RlbmVyc1xuICAgKi9cbiAgYmluZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIC8vIGJpbmQgdGhlIGV2ZW50c1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uY2UoXCJyZXNpemVcIiwgKG9iaikgPT4ge1xuICAgICAgaWYgKG9iai53aWR0aCAhPT0gMCkge1xuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi54ID0gb2JqLndpZHRoICogMC41O1xuICAgICAgfVxuICAgICAgaWYgKG9iai5oZWlnaHQgIT09IDApIHtcbiAgICAgICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueSA9IG9iai5oZWlnaHQgKiAwLjU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJzZXRTaXplXCIsIHRoaXMuc2V0U2l6ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5oYW1tZXJGcmFtZS5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7XG4gICAgICB0aGlzLl9jbGVhblVwKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IFtcIndpZHRoXCIsIFwiaGVpZ2h0XCIsIFwiYXV0b1Jlc2l6ZVwiXTtcbiAgICAgIHNlbGVjdGl2ZURlZXBFeHRlbmQoZmllbGRzLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIEF1dG9tYXRpY2FsbHkgYWRhcHQgdG8gY2hhbmdpbmcgc2l6ZSBvZiB0aGUgY29udGFpbmVyIGVsZW1lbnQuXG4gICAgdGhpcy5fY2xlYW5VcCgpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1Jlc2l6ZSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHdpbmRvdy5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAvLyBkZWNlbnQgYnJvd3NlcnMsIGltbWVkaWF0ZSByZWFjdGlvbnNcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnNldFNpemUoKTtcbiAgICAgICAgICBpZiAoY2hhbmdlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHsgZnJhbWUgfSA9IHRoaXM7XG5cbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShmcmFtZSk7XG4gICAgICAgIHRoaXMuX2NsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKGZyYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJRTExLCBjb250aW5vdXMgcG9sbGluZ1xuICAgICAgICBjb25zdCByZXNpemVUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5zZXRTaXplKCk7XG4gICAgICAgICAgaWYgKGNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgICB0aGlzLl9jbGVhbnVwQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwocmVzaXplVGltZXIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQXV0b21hdGljYWxseSBhZGFwdCB0byBjaGFuZ2luZyBzaXplIG9mIHRoZSBicm93c2VyLlxuICAgICAgY29uc3QgcmVzaXplRnVuY3Rpb24gPSB0aGlzLl9vblJlc2l6ZS5iaW5kKHRoaXMpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgcmVzaXplRnVuY3Rpb24pO1xuICAgICAgdGhpcy5fY2xlYW51cENhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgcmVzaXplRnVuY3Rpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW5VcCgpIHtcbiAgICB0aGlzLl9jbGVhbnVwQ2FsbGJhY2tzXG4gICAgICAuc3BsaWNlKDApXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uUmVzaXplKCkge1xuICAgIHRoaXMuc2V0U2l6ZSgpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbmQgc3RvcmUgdGhlIGNhbWVyYVN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGl4ZWxSYXRpbz10aGlzLnBpeGVsUmF0aW9dXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q2FtZXJhU3RhdGUocGl4ZWxSYXRpbyA9IHRoaXMucGl4ZWxSYXRpbykge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmNhbWVyYVN0YXRlLnByZXZpb3VzV2lkdGggPSB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCAvIHBpeGVsUmF0aW87XG4gICAgICB0aGlzLmNhbWVyYVN0YXRlLnByZXZpb3VzSGVpZ2h0ID0gdGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0IC8gcGl4ZWxSYXRpbztcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUuc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUucG9zaXRpb24gPSB0aGlzLkRPTXRvQ2FudmFzKHtcbiAgICAgICAgeDogKDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLndpZHRoKSAvIHBpeGVsUmF0aW8sXG4gICAgICAgIHk6ICgwLjUgKiB0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQpIC8gcGl4ZWxSYXRpbyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNhbWVyYVN0YXRlXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0Q2FtZXJhU3RhdGUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5zY2FsZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCAhPT0gMCAmJlxuICAgICAgdGhpcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0ICE9PSAwICYmXG4gICAgICB0aGlzLnBpeGVsUmF0aW8gIT09IDAgJiZcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNXaWR0aCA+IDAgJiZcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNIZWlnaHQgPiAwXG4gICAgKSB7XG4gICAgICBjb25zdCB3aWR0aFJhdGlvID1cbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMud2lkdGggL1xuICAgICAgICB0aGlzLnBpeGVsUmF0aW8gL1xuICAgICAgICB0aGlzLmNhbWVyYVN0YXRlLnByZXZpb3VzV2lkdGg7XG4gICAgICBjb25zdCBoZWlnaHRSYXRpbyA9XG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCAvXG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyAvXG4gICAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNIZWlnaHQ7XG4gICAgICBsZXQgbmV3U2NhbGUgPSB0aGlzLmNhbWVyYVN0YXRlLnNjYWxlO1xuXG4gICAgICBpZiAod2lkdGhSYXRpbyAhPSAxICYmIGhlaWdodFJhdGlvICE9IDEpIHtcbiAgICAgICAgbmV3U2NhbGUgPSB0aGlzLmNhbWVyYVN0YXRlLnNjYWxlICogMC41ICogKHdpZHRoUmF0aW8gKyBoZWlnaHRSYXRpbyk7XG4gICAgICB9IGVsc2UgaWYgKHdpZHRoUmF0aW8gIT0gMSkge1xuICAgICAgICBuZXdTY2FsZSA9IHRoaXMuY2FtZXJhU3RhdGUuc2NhbGUgKiB3aWR0aFJhdGlvO1xuICAgICAgfSBlbHNlIGlmIChoZWlnaHRSYXRpbyAhPSAxKSB7XG4gICAgICAgIG5ld1NjYWxlID0gdGhpcy5jYW1lcmFTdGF0ZS5zY2FsZSAqIGhlaWdodFJhdGlvO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmJvZHkudmlldy5zY2FsZSA9IG5ld1NjYWxlO1xuICAgICAgLy8gdGhpcyBjb21lcyBmcm9tIHRoZSB2aWV3IG1vZHVsZS5cbiAgICAgIGNvbnN0IGN1cnJlbnRWaWV3Q2VudGVyID0gdGhpcy5ET010b0NhbnZhcyh7XG4gICAgICAgIHg6IDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoLFxuICAgICAgICB5OiAwLjUgKiB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQ2VudGVyID0ge1xuICAgICAgICAvLyBvZmZzZXQgZnJvbSB2aWV3LCBkaXN0YW5jZSB2aWV3IGhhcyB0byBjaGFuZ2UgYnkgdGhlc2UgeCBhbmQgeSB0byBjZW50ZXIgdGhlIG5vZGVcbiAgICAgICAgeDogY3VycmVudFZpZXdDZW50ZXIueCAtIHRoaXMuY2FtZXJhU3RhdGUucG9zaXRpb24ueCxcbiAgICAgICAgeTogY3VycmVudFZpZXdDZW50ZXIueSAtIHRoaXMuY2FtZXJhU3RhdGUucG9zaXRpb24ueSxcbiAgICAgIH07XG4gICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi54ICs9XG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci54ICogdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55ICs9XG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci55ICogdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcmVwYXJlVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmICh2YWx1ZS5pbmRleE9mKFwiJVwiKSAhPT0gLTEgfHwgdmFsdWUuaW5kZXhPZihcInB4XCIpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoXCIlXCIpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQ291bGQgbm90IHVzZSB0aGUgdmFsdWUgc3VwcGxpZWQgZm9yIHdpZHRoIG9yIGhlaWdodDpcIiArIHZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIEhUTUxcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgLy8gcmVtb3ZlIGFsbCBlbGVtZW50cyBmcm9tIHRoZSBjb250YWluZXIgZWxlbWVudC5cbiAgICB3aGlsZSAodGhpcy5ib2R5LmNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgIHRoaXMuYm9keS5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5ib2R5LmNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmZyYW1lLmNsYXNzTmFtZSA9IFwidmlzLW5ldHdvcmtcIjtcbiAgICB0aGlzLmZyYW1lLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuICAgIHRoaXMuZnJhbWUudGFiSW5kZXggPSAwOyAvLyB0YWIgaW5kZXggaXMgcmVxdWlyZWQgZm9yIGtleWNoYXJtIHRvIGJpbmQga2V5c3Ryb2tlcyB0byB0aGUgZGl2IGluc3RlYWQgb2YgdGhlIHdpbmRvd1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICB0aGlzLmZyYW1lLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgdGhpcy5mcmFtZS5jYW52YXMuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lLmNhbnZhcyk7XG5cbiAgICBpZiAoIXRoaXMuZnJhbWUuY2FudmFzLmdldENvbnRleHQpIHtcbiAgICAgIGNvbnN0IG5vQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIkRJVlwiKTtcbiAgICAgIG5vQ2FudmFzLnN0eWxlLmNvbG9yID0gXCJyZWRcIjtcbiAgICAgIG5vQ2FudmFzLnN0eWxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgICAgIG5vQ2FudmFzLnN0eWxlLnBhZGRpbmcgPSBcIjEwcHhcIjtcbiAgICAgIG5vQ2FudmFzLmlubmVyVGV4dCA9IFwiRXJyb3I6IHlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IEhUTUwgY2FudmFzXCI7XG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5hcHBlbmRDaGlsZChub0NhbnZhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NldFBpeGVsUmF0aW8oKTtcbiAgICAgIHRoaXMuc2V0VHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gYWRkIHRoZSBmcmFtZSB0byB0aGUgY29udGFpbmVyIGVsZW1lbnRcbiAgICB0aGlzLmJvZHkuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuXG4gICAgdGhpcy5ib2R5LnZpZXcuc2NhbGUgPSAxO1xuICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uID0ge1xuICAgICAgeDogMC41ICogdGhpcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGgsXG4gICAgICB5OiAwLjUgKiB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQsXG4gICAgfTtcblxuICAgIHRoaXMuX2JpbmRIYW1tZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGJpbmRzIGhhbW1lciwgaXQgY2FuIGJlIHJlcGVhdGVkIG92ZXIgYW5kIG92ZXIgZHVlIHRvIHRoZSB1bmlxdWVuZXNzIGNoZWNrLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JpbmRIYW1tZXIoKSB7XG4gICAgaWYgKHRoaXMuaGFtbWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaGFtbWVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5kcmFnID0ge307XG4gICAgdGhpcy5waW5jaCA9IHt9O1xuXG4gICAgLy8gaW5pdCBoYW1tZXJcbiAgICB0aGlzLmhhbW1lciA9IG5ldyBIYW1tZXIodGhpcy5mcmFtZS5jYW52YXMpO1xuICAgIHRoaXMuaGFtbWVyLmdldChcInBpbmNoXCIpLnNldCh7IGVuYWJsZTogdHJ1ZSB9KTtcbiAgICAvLyBlbmFibGUgdG8gZ2V0IGJldHRlciByZXNwb25zZSwgdG9kbzogdGVzdCBvbiBtb2JpbGUuXG4gICAgdGhpcy5oYW1tZXJcbiAgICAgIC5nZXQoXCJwYW5cIilcbiAgICAgIC5zZXQoeyB0aHJlc2hvbGQ6IDUsIGRpcmVjdGlvbjogSGFtbWVyLkRJUkVDVElPTl9BTEwgfSk7XG5cbiAgICBvblRvdWNoKHRoaXMuaGFtbWVyLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblRvdWNoKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblRhcChldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJkb3VibGV0YXBcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Eb3VibGVUYXAoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicHJlc3NcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Ib2xkKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbnN0YXJ0XCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uRHJhZ1N0YXJ0KGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbm1vdmVcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25EcmFnKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbmVuZFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWdFbmQoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGluY2hcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25QaW5jaChldmVudCk7XG4gICAgfSk7XG5cbiAgICAvLyBUT0RPOiBuZWF0bHkgY2xlYW51cCB0aGVzZSBoYW5kbGVycyB3aGVuIHJlLWNyZWF0aW5nIHRoZSBDYW52YXMsIElGIHRoZXNlIGFyZSBkb25lIHdpdGggaGFtbWVyLCBldmVudC5zdG9wUHJvcGFnYXRpb24gd2lsbCBub3Qgd29yaz9cbiAgICB0aGlzLmZyYW1lLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Nb3VzZVdoZWVsKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZnJhbWUuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Nb3VzZU1vdmUoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuZnJhbWUuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkNvbnRleHQoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5oYW1tZXJGcmFtZSA9IG5ldyBIYW1tZXIodGhpcy5mcmFtZSk7XG4gICAgb25SZWxlYXNlKHRoaXMuaGFtbWVyRnJhbWUsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uUmVsZWFzZShldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgbmV3IHNpemUgZm9yIHRoZSBuZXR3b3JrXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB3aWR0aCAgIFdpZHRoIGluIHBpeGVscyBvciBwZXJjZW50YWdlIChmb3IgZXhhbXBsZSAnODAwcHgnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIG9yICc1MCUnKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGVpZ2h0ICBIZWlnaHQgaW4gcGl4ZWxzIG9yIHBlcmNlbnRhZ2UgIChmb3IgZXhhbXBsZSAnNDAwcHgnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIG9yICczMCUnKVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNldFNpemUod2lkdGggPSB0aGlzLm9wdGlvbnMud2lkdGgsIGhlaWdodCA9IHRoaXMub3B0aW9ucy5oZWlnaHQpIHtcbiAgICB3aWR0aCA9IHRoaXMuX3ByZXBhcmVWYWx1ZSh3aWR0aCk7XG4gICAgaGVpZ2h0ID0gdGhpcy5fcHJlcGFyZVZhbHVlKGhlaWdodCk7XG5cbiAgICBsZXQgZW1pdEV2ZW50ID0gZmFsc2U7XG4gICAgY29uc3Qgb2xkV2lkdGggPSB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aDtcbiAgICBjb25zdCBvbGRIZWlnaHQgPSB0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHBpeGVsIHJhdGlvXG4gICAgLy9cbiAgICAvLyBOT1RFOiBDb21tZW50IGluIGZvbGxvd2luZyBpcyByYXRoZXIgaW5jb25zaXN0ZW50OyB0aGlzIGlzIHRoZSBPTkxZIHBsYWNlIGluIHRoZSBjb2RlXG4gICAgLy8gICAgICAgd2hlcmUgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBwaXhlbCByYXRpbyBjb3VsZCBjaGFuZ2UgYXQgcnVudGltZS5cbiAgICAvLyAgICAgICBUaGUgb25seSB3YXkgSSBjYW4gdGhpbmsgb2YgdGhpcyBoYXBwZW5pbmcgaXMgYSByb3RhdGluZyBzY3JlZW4gb3IgdGFibGV0OyBidXQgdGhlblxuICAgIC8vICAgICAgIHRoZXJlIHNob3VsZCBiZSBhIG1lY2hhbmlzbSBmb3IgcmVsb2FkaW5nIHRoZSBkYXRhIChUT0RPOiBjaGVjayBpZiB0aGlzIGlzIHByZXNlbnQpLlxuICAgIC8vXG4gICAgLy8gICAgICAgSWYgdGhlIGFzc3VtcHRpb24gaXMgdHJ1ZSAoaS5lLiBwaXhlbCByYXRpbyBjYW4gY2hhbmdlIGF0IHJ1bnRpbWUpLCB0aGVuICphbGwqIHVzYWdlXG4gICAgLy8gICAgICAgb2YgcGl4ZWwgcmF0aW8gbXVzdCBiZSBvdmVyaGF1bGVkIGZvciB0aGlzLlxuICAgIC8vXG4gICAgLy8gICAgICAgRm9yIHRoZSB0aW1lIGJlaW5nLCBJIHdpbGwgaHVtb3IgdGhlIGFzc3VtcHRpb24gaGVyZSwgYW5kIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlIGFzc3VtZSBpdCBpc1xuICAgIC8vICAgICAgIGNvbnN0YW50LlxuICAgIGNvbnN0IHByZXZpb3VzUmF0aW8gPSB0aGlzLnBpeGVsUmF0aW87IC8vIHdlIGNhY2hlIHRoaXMgYmVjYXVzZSB0aGUgY2FtZXJhIHN0YXRlIHN0b3JhZ2UgbmVlZHMgdGhlIG9sZCB2YWx1ZVxuICAgIHRoaXMuX3NldFBpeGVsUmF0aW8oKTtcblxuICAgIGlmIChcbiAgICAgIHdpZHRoICE9IHRoaXMub3B0aW9ucy53aWR0aCB8fFxuICAgICAgaGVpZ2h0ICE9IHRoaXMub3B0aW9ucy5oZWlnaHQgfHxcbiAgICAgIHRoaXMuZnJhbWUuc3R5bGUud2lkdGggIT0gd2lkdGggfHxcbiAgICAgIHRoaXMuZnJhbWUuc3R5bGUuaGVpZ2h0ICE9IGhlaWdodFxuICAgICkge1xuICAgICAgdGhpcy5fZ2V0Q2FtZXJhU3RhdGUocHJldmlvdXNSYXRpbyk7XG5cbiAgICAgIHRoaXMuZnJhbWUuc3R5bGUud2lkdGggPSB3aWR0aDtcbiAgICAgIHRoaXMuZnJhbWUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgICAgdGhpcy5mcmFtZS5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLndpZHRoID0gTWF0aC5yb3VuZChcbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGggKiB0aGlzLnBpeGVsUmF0aW9cbiAgICAgICk7XG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQgPSBNYXRoLnJvdW5kKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQgKiB0aGlzLnBpeGVsUmF0aW9cbiAgICAgICk7XG5cbiAgICAgIHRoaXMub3B0aW9ucy53aWR0aCA9IHdpZHRoO1xuICAgICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgdGhpcy5jYW52YXNWaWV3Q2VudGVyID0ge1xuICAgICAgICB4OiAwLjUgKiB0aGlzLmZyYW1lLmNsaWVudFdpZHRoLFxuICAgICAgICB5OiAwLjUgKiB0aGlzLmZyYW1lLmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGVtaXRFdmVudCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMgd291bGQgYWRhcHQgdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdG8gdGhlIHdpZHRoIGZyb20gMTAwJSBpZiBhbmQgb25seSBpZlxuICAgICAgLy8gdGhlcmUgaXMgYSBjaGFuZ2UuXG5cbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5yb3VuZChcbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGggKiB0aGlzLnBpeGVsUmF0aW9cbiAgICAgICk7XG4gICAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLnJvdW5kKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQgKiB0aGlzLnBpeGVsUmF0aW9cbiAgICAgICk7XG5cbiAgICAgIC8vIHN0b3JlIHRoZSBjYW1lcmEgaWYgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gc2l6ZS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMud2lkdGggIT09IG5ld1dpZHRoIHx8XG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCAhPT0gbmV3SGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fZ2V0Q2FtZXJhU3RhdGUocHJldmlvdXNSYXRpbyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCAhPT0gbmV3V2lkdGgpIHtcbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMud2lkdGggPSBuZXdXaWR0aDtcbiAgICAgICAgZW1pdEV2ZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQgIT09IG5ld0hlaWdodCkge1xuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQgPSBuZXdIZWlnaHQ7XG4gICAgICAgIGVtaXRFdmVudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVtaXRFdmVudCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInJlc2l6ZVwiLCB7XG4gICAgICAgIHdpZHRoOiBNYXRoLnJvdW5kKHRoaXMuZnJhbWUuY2FudmFzLndpZHRoIC8gdGhpcy5waXhlbFJhdGlvKSxcbiAgICAgICAgaGVpZ2h0OiBNYXRoLnJvdW5kKHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCAvIHRoaXMucGl4ZWxSYXRpbyksXG4gICAgICAgIG9sZFdpZHRoOiBNYXRoLnJvdW5kKG9sZFdpZHRoIC8gdGhpcy5waXhlbFJhdGlvKSxcbiAgICAgICAgb2xkSGVpZ2h0OiBNYXRoLnJvdW5kKG9sZEhlaWdodCAvIHRoaXMucGl4ZWxSYXRpbyksXG4gICAgICB9KTtcblxuICAgICAgLy8gcmVzdG9yZSB0aGUgY2FtZXJhIG9uIGNoYW5nZS5cbiAgICAgIHRoaXMuX3NldENhbWVyYVN0YXRlKCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IGluaXRpYWxpemVkIHNvIHRoZSBnZXQgYW5kIHNldCBjYW1lcmEgd2lsbCB3b3JrIGZyb20gbm93IG9uLlxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHJldHVybiBlbWl0RXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICovXG4gIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWUuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHBpeGVsIHJhdGlvIGZvciB2YXJpb3VzIGJyb3dzZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RldGVybWluZVBpeGVsUmF0aW8oKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5nZXRDb250ZXh0KCk7XG4gICAgaWYgKGN0eCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGNhbnZheCBjb250ZXh0XCIpO1xuICAgIH1cblxuICAgIGxldCBudW1lcmF0b3IgPSAxO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAvLyAod2luZG93ICE9PSB1bmRlZmluZWQpIGRvZXNuJ3Qgd29yayBoZXJlIVxuICAgICAgLy8gUHJvdGVjdGlvbiBkdXJpbmcgdW5pdCB0ZXN0cywgd2hlcmUgJ3dpbmRvdycgY2FuIGJlIG1pc3NpbmdcbiAgICAgIG51bWVyYXRvciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gICAgfVxuXG4gICAgY29uc3QgZGVub21pbmF0b3IgPVxuICAgICAgY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICBjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAxO1xuXG4gICAgcmV0dXJuIG51bWVyYXRvciAvIGRlbm9taW5hdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIExhenkgZGV0ZXJtaW5hdGlvbiBvZiBwaXhlbCByYXRpby5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRQaXhlbFJhdGlvKCkge1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IHRoaXMuX2RldGVybWluZVBpeGVsUmF0aW8oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zZm9ybSBpbiB0aGUgY29udGFpbmVkIGNvbnRleHQsIGJhc2VkIG9uIGl0cyBwaXhlbFJhdGlvXG4gICAqL1xuICBzZXRUcmFuc2Zvcm0oKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5nZXRDb250ZXh0KCk7XG4gICAgaWYgKGN0eCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGNhbnZheCBjb250ZXh0XCIpO1xuICAgIH1cblxuICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIFggY29vcmRpbmF0ZSBpbiBET00tc3BhY2UgKGNvb3JkaW5hdGUgcG9pbnQgaW4gYnJvd3NlciByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyIGRpdikgdG9cbiAgICogdGhlIFggY29vcmRpbmF0ZSBpbiBjYW52YXMtc3BhY2UgKHRoZSBzaW11bGF0aW9uIHNhbmRib3gsIHdoaWNoIHRoZSBjYW1lcmEgbG9va3MgdXBvbilcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9YY29udmVydERPTXRvQ2FudmFzKHgpIHtcbiAgICByZXR1cm4gKHggLSB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi54KSAvIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIFggY29vcmRpbmF0ZSBpbiBjYW52YXMtc3BhY2UgKHRoZSBzaW11bGF0aW9uIHNhbmRib3gsIHdoaWNoIHRoZSBjYW1lcmEgbG9va3MgdXBvbikgdG9cbiAgICogdGhlIFggY29vcmRpbmF0ZSBpbiBET00tc3BhY2UgKGNvb3JkaW5hdGUgcG9pbnQgaW4gYnJvd3NlciByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyIGRpdilcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9YY29udmVydENhbnZhc1RvRE9NKHgpIHtcbiAgICByZXR1cm4geCAqIHRoaXMuYm9keS52aWV3LnNjYWxlICsgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSBZIGNvb3JkaW5hdGUgaW4gRE9NLXNwYWNlIChjb29yZGluYXRlIHBvaW50IGluIGJyb3dzZXIgcmVsYXRpdmUgdG8gdGhlIGNvbnRhaW5lciBkaXYpIHRvXG4gICAqIHRoZSBZIGNvb3JkaW5hdGUgaW4gY2FudmFzLXNwYWNlICh0aGUgc2ltdWxhdGlvbiBzYW5kYm94LCB3aGljaCB0aGUgY2FtZXJhIGxvb2tzIHVwb24pXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfWWNvbnZlcnRET010b0NhbnZhcyh5KSB7XG4gICAgcmV0dXJuICh5IC0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueSkgLyB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSBZIGNvb3JkaW5hdGUgaW4gY2FudmFzLXNwYWNlICh0aGUgc2ltdWxhdGlvbiBzYW5kYm94LCB3aGljaCB0aGUgY2FtZXJhIGxvb2tzIHVwb24pIHRvXG4gICAqIHRoZSBZIGNvb3JkaW5hdGUgaW4gRE9NLXNwYWNlIChjb29yZGluYXRlIHBvaW50IGluIGJyb3dzZXIgcmVsYXRpdmUgdG8gdGhlIGNvbnRhaW5lciBkaXYpXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfWWNvbnZlcnRDYW52YXNUb0RPTSh5KSB7XG4gICAgcmV0dXJuIHkgKiB0aGlzLmJvZHkudmlldy5zY2FsZSArIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtwb2ludH0gcG9zXG4gICAqIEByZXR1cm5zIHtwb2ludH1cbiAgICovXG4gIGNhbnZhc1RvRE9NKHBvcykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB0aGlzLl9YY29udmVydENhbnZhc1RvRE9NKHBvcy54KSxcbiAgICAgIHk6IHRoaXMuX1ljb252ZXJ0Q2FudmFzVG9ET00ocG9zLnkpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtwb2ludH0gcG9zXG4gICAqIEByZXR1cm5zIHtwb2ludH1cbiAgICovXG4gIERPTXRvQ2FudmFzKHBvcykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB0aGlzLl9YY29udmVydERPTXRvQ2FudmFzKHBvcy54KSxcbiAgICAgIHk6IHRoaXMuX1ljb252ZXJ0RE9NdG9DYW52YXMocG9zLnkpLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FudmFzO1xuIiwgImltcG9ydCB7IGVhc2luZ0Z1bmN0aW9ucyB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuaW1wb3J0IE5ldHdvcmtVdGlsIGZyb20gXCIuLi9OZXR3b3JrVXRpbFwiO1xuaW1wb3J0IHsgbm9ybWFsaXplRml0T3B0aW9ucyB9IGZyb20gXCIuL3ZpZXctaGFuZGxlclwiO1xuXG4vKipcbiAqIFRoZSB2aWV3XG4gKi9cbmNsYXNzIFZpZXcge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcblxuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxIC8gdGhpcy5yZW5kZXJSZWZyZXNoUmF0ZTtcbiAgICB0aGlzLmFuaW1hdGlvbkVhc2luZ0Z1bmN0aW9uID0gXCJlYXNlSW5PdXRRdWludFwiO1xuICAgIHRoaXMuZWFzaW5nVGltZSA9IDA7XG4gICAgdGhpcy5zb3VyY2VTY2FsZSA9IDA7XG4gICAgdGhpcy50YXJnZXRTY2FsZSA9IDA7XG4gICAgdGhpcy5zb3VyY2VUcmFuc2xhdGlvbiA9IDA7XG4gICAgdGhpcy50YXJnZXRUcmFuc2xhdGlvbiA9IDA7XG4gICAgdGhpcy5sb2NrZWRPbk5vZGVJZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxvY2tlZE9uTm9kZU9mZnNldCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRvdWNoVGltZSA9IDA7XG5cbiAgICB0aGlzLnZpZXdGdW5jdGlvbiA9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZml0XCIsIHRoaXMuZml0LmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiYW5pbWF0aW9uRmluaXNoZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9zdG9wUmVuZGVyaW5nXCIpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwidW5sb2NrTm9kZVwiLCB0aGlzLnJlbGVhc2VOb2RlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV1cbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHpvb21zIG91dCB0byBmaXQgYWxsIGRhdGEgb24gc2NyZWVuIGJhc2VkIG9uIGFtb3VudCBvZiBub2Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e3tub2Rlcz1BcnJheX19XVxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0aWFsWm9vbT1mYWxzZV0gIHwgem9vbSBiYXNlZCBvbiBmaXR0ZWQgZm9ybXVsYSBvciByYW5nZSwgdHJ1ZSA9IGZpdHRlZCwgZGVmYXVsdCA9IGZhbHNlO1xuICAgKi9cbiAgZml0KG9wdGlvbnMsIGluaXRpYWxab29tID0gZmFsc2UpIHtcbiAgICBvcHRpb25zID0gbm9ybWFsaXplRml0T3B0aW9ucyhvcHRpb25zLCB0aGlzLmJvZHkubm9kZUluZGljZXMpO1xuXG4gICAgY29uc3QgY2FudmFzV2lkdGggPSB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGg7XG4gICAgY29uc3QgY2FudmFzSGVpZ2h0ID0gdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodDtcblxuICAgIGxldCByYW5nZTtcbiAgICBsZXQgem9vbUxldmVsO1xuICAgIGlmIChjYW52YXNXaWR0aCA9PT0gMCB8fCBjYW52YXNIZWlnaHQgPT09IDApIHtcbiAgICAgIC8vIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGZpdCBpbnRvIHplcm8gc2l6ZWQgY2FudmFzLiBUaGlzIGNvdWxkXG4gICAgICAvLyBwb3RlbnRpYWxseSBldmVuIHJlc3VsdCBpbiBpbnZhbGlkIHZhbHVlcyBiZWluZyBjb21wdXRlZC4gRm9yIGV4YW1wbGVcbiAgICAgIC8vIGZvciBuZXR3b3JrIHdpdGhvdXQgbm9kZXMgYW5kIHplcm8gc2l6ZWQgY2FudmFzIHRoZSB6b29tIGxldmVsIHdvdWxkXG4gICAgICAvLyBlbmQgdXAgYmVpbmcgY29tcHV0ZWQgYXMgMC8wIHdoaWNoIHJlc3VsdHMgaW4gTmFOLiBJbiBhbnkgb3RoZXIgY2FzZVxuICAgICAgLy8gdGhpcyB3b3VsZCBiZSAwL3NvbWV0aGluZyB3aGljaCBpcyBhZ2FpbiBwb2ludGxlc3MgdG8gY29tcHV0ZS5cbiAgICAgIHpvb21MZXZlbCA9IDE7XG5cbiAgICAgIHJhbmdlID0gTmV0d29ya1V0aWwuZ2V0UmFuZ2UodGhpcy5ib2R5Lm5vZGVzLCBvcHRpb25zLm5vZGVzKTtcbiAgICB9IGVsc2UgaWYgKGluaXRpYWxab29tID09PSB0cnVlKSB7XG4gICAgICAvLyBjaGVjayBpZiBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgbm9kZXMgaGF2ZSBhIHByZWRlZmluZWQgcG9zaXRpb24uIElmIHNvLCB3ZSB1c2UgdGhlIHJhbmdlLCBub3QgdGhlIGFwcHJveGltYXRpb24uXG4gICAgICBsZXQgcG9zaXRpb25EZWZpbmVkID0gMDtcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5ub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgICBpZiAobm9kZS5wcmVkZWZpbmVkUG9zaXRpb24gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uRGVmaW5lZCArPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvc2l0aW9uRGVmaW5lZCA+IDAuNSAqIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5maXQob3B0aW9ucywgZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJhbmdlID0gTmV0d29ya1V0aWwuZ2V0UmFuZ2UodGhpcy5ib2R5Lm5vZGVzLCBvcHRpb25zLm5vZGVzKTtcblxuICAgICAgY29uc3QgbnVtYmVyT2ZOb2RlcyA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7XG4gICAgICB6b29tTGV2ZWwgPSAxMi42NjIgLyAobnVtYmVyT2ZOb2RlcyArIDcuNDE0NykgKyAwLjA5NjQ4MjI7IC8vIHRoaXMgaXMgb2J0YWluZWQgZnJvbSBmaXR0aW5nIGEgZGF0YXNldCBmcm9tIDUgcG9pbnRzIHdpdGggc2NhbGUgbGV2ZWxzIHRoYXQgbG9va2VkIGdvb2QuXG5cbiAgICAgIC8vIGNvcnJlY3QgZm9yIGxhcmdlciBjYW52YXNzZXMuXG4gICAgICBjb25zdCBmYWN0b3IgPSBNYXRoLm1pbihjYW52YXNXaWR0aCAvIDYwMCwgY2FudmFzSGVpZ2h0IC8gNjAwKTtcbiAgICAgIHpvb21MZXZlbCAqPSBmYWN0b3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVzaXplTm9kZXNcIik7XG4gICAgICByYW5nZSA9IE5ldHdvcmtVdGlsLmdldFJhbmdlKHRoaXMuYm9keS5ub2Rlcywgb3B0aW9ucy5ub2Rlcyk7XG5cbiAgICAgIGNvbnN0IHhEaXN0YW5jZSA9IE1hdGguYWJzKHJhbmdlLm1heFggLSByYW5nZS5taW5YKSAqIDEuMTtcbiAgICAgIGNvbnN0IHlEaXN0YW5jZSA9IE1hdGguYWJzKHJhbmdlLm1heFkgLSByYW5nZS5taW5ZKSAqIDEuMTtcblxuICAgICAgY29uc3QgeFpvb21MZXZlbCA9IGNhbnZhc1dpZHRoIC8geERpc3RhbmNlO1xuICAgICAgY29uc3QgeVpvb21MZXZlbCA9IGNhbnZhc0hlaWdodCAvIHlEaXN0YW5jZTtcblxuICAgICAgem9vbUxldmVsID0geFpvb21MZXZlbCA8PSB5Wm9vbUxldmVsID8geFpvb21MZXZlbCA6IHlab29tTGV2ZWw7XG4gICAgfVxuXG4gICAgaWYgKHpvb21MZXZlbCA+IG9wdGlvbnMubWF4Wm9vbUxldmVsKSB7XG4gICAgICB6b29tTGV2ZWwgPSBvcHRpb25zLm1heFpvb21MZXZlbDtcbiAgICB9IGVsc2UgaWYgKHpvb21MZXZlbCA8IG9wdGlvbnMubWluWm9vbUxldmVsKSB7XG4gICAgICB6b29tTGV2ZWwgPSBvcHRpb25zLm1pblpvb21MZXZlbDtcbiAgICB9XG5cbiAgICBjb25zdCBjZW50ZXIgPSBOZXR3b3JrVXRpbC5maW5kQ2VudGVyKHJhbmdlKTtcbiAgICBjb25zdCBhbmltYXRpb25PcHRpb25zID0ge1xuICAgICAgcG9zaXRpb246IGNlbnRlcixcbiAgICAgIHNjYWxlOiB6b29tTGV2ZWwsXG4gICAgICBhbmltYXRpb246IG9wdGlvbnMuYW5pbWF0aW9uLFxuICAgIH07XG4gICAgdGhpcy5tb3ZlVG8oYW5pbWF0aW9uT3B0aW9ucyk7XG4gIH1cblxuICAvLyBhbmltYXRpb25cblxuICAvKipcbiAgICogQ2VudGVyIGEgbm9kZSBpbiB2aWV3LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbm9kZUlkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9uc11cbiAgICovXG4gIGZvY3VzKG5vZGVJZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0ueCxcbiAgICAgICAgeTogdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0ueSxcbiAgICAgIH07XG4gICAgICBvcHRpb25zLnBvc2l0aW9uID0gbm9kZVBvc2l0aW9uO1xuICAgICAgb3B0aW9ucy5sb2NrZWRPbk5vZGUgPSBub2RlSWQ7XG5cbiAgICAgIHRoaXMubW92ZVRvKG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiTm9kZTogXCIgKyBub2RlSWQgKyBcIiBjYW5ub3QgYmUgZm91bmQuXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgfCAgb3B0aW9ucy5vZmZzZXQgICA9IHt4Om51bWJlciwgeTpudW1iZXJ9ICAgLy8gb2Zmc2V0IGZyb20gdGhlIGNlbnRlciBpbiBET00gcGl4ZWxzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLnNjYWxlICAgID0gbnVtYmVyICAgICAgICAgICAgICAgICAvLyBzY2FsZSB0byBtb3ZlIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLnBvc2l0aW9uID0ge3g6bnVtYmVyLCB5Om51bWJlcn0gICAvLyBwb3NpdGlvbiB0byBtb3ZlIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLmFuaW1hdGlvbiA9IHtkdXJhdGlvbjpudW1iZXIsIGVhc2luZ0Z1bmN0aW9uOlN0cmluZ30gfHwgQm9vbGVhbiAgIC8vIHBvc2l0aW9uIHRvIG1vdmUgdG9cbiAgICovXG4gIG1vdmVUbyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm9mZnNldCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5vZmZzZXQueCAhPSBudWxsKSB7XG4gICAgICAgIC8vIENvZXJjZSBhbmQgdmVyaWZ5IHRoYXQgeCBpcyB2YWxpZC5cbiAgICAgICAgb3B0aW9ucy5vZmZzZXQueCA9ICtvcHRpb25zLm9mZnNldC54O1xuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zLm9mZnNldC54KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAnVGhlIG9wdGlvbiBcIm9mZnNldC54XCIgaGFzIHRvIGJlIGEgZmluaXRlIG51bWJlci4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5vZmZzZXQueCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLm9mZnNldC55ICE9IG51bGwpIHtcbiAgICAgICAgLy8gQ29lcmNlIGFuZCB2ZXJpZnkgdGhhdCB5IGlzIHZhbGlkLlxuICAgICAgICBvcHRpb25zLm9mZnNldC55ID0gK29wdGlvbnMub2Zmc2V0Lnk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG9wdGlvbnMub2Zmc2V0LnkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdUaGUgb3B0aW9uIFwib2Zmc2V0LnlcIiBoYXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLm9mZnNldC54ID0gMDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5vZmZzZXQgPSB7XG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnBvc2l0aW9uICE9IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLnBvc2l0aW9uLnggIT0gbnVsbCkge1xuICAgICAgICAvLyBDb2VyY2UgYW5kIHZlcmlmeSB0aGF0IHggaXMgdmFsaWQuXG4gICAgICAgIG9wdGlvbnMucG9zaXRpb24ueCA9ICtvcHRpb25zLnBvc2l0aW9uLng7XG4gICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG9wdGlvbnMucG9zaXRpb24ueCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgJ1RoZSBvcHRpb24gXCJwb3NpdGlvbi54XCIgaGFzIHRvIGJlIGEgZmluaXRlIG51bWJlci4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5wb3NpdGlvbi54ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucG9zaXRpb24ueSAhPSBudWxsKSB7XG4gICAgICAgIC8vIENvZXJjZSBhbmQgdmVyaWZ5IHRoYXQgeSBpcyB2YWxpZC5cbiAgICAgICAgb3B0aW9ucy5wb3NpdGlvbi55ID0gK29wdGlvbnMucG9zaXRpb24ueTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5wb3NpdGlvbi55KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAnVGhlIG9wdGlvbiBcInBvc2l0aW9uLnlcIiBoYXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnBvc2l0aW9uLnggPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnBvc2l0aW9uID0gdGhpcy5nZXRWaWV3UG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zY2FsZSAhPSBudWxsKSB7XG4gICAgICAvLyBDb2VyY2UgYW5kIHZlcmlmeSB0aGF0IHRoZSBzY2FsZSBpcyB2YWxpZC5cbiAgICAgIG9wdGlvbnMuc2NhbGUgPSArb3B0aW9ucy5zY2FsZTtcbiAgICAgIGlmICghKG9wdGlvbnMuc2NhbGUgPiAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdUaGUgb3B0aW9uIFwic2NhbGVcIiBoYXMgdG8gYmUgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8uJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnNjYWxlID0gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuYW5pbWF0aW9uID0geyBkdXJhdGlvbjogMCB9O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLmFuaW1hdGlvbiA9IHsgZHVyYXRpb246IDAgfTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0aW9uID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLmFuaW1hdGlvbiA9IHt9O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24uZHVyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5hbmltYXRpb24uZHVyYXRpb24gPSAxMDAwO1xuICAgIH0gLy8gZGVmYXVsdCBkdXJhdGlvblxuICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbi5lYXNpbmdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmFuaW1hdGlvbi5lYXNpbmdGdW5jdGlvbiA9IFwiZWFzZUluT3V0UXVhZFwiO1xuICAgIH0gLy8gZGVmYXVsdCBlYXNpbmcgZnVuY3Rpb25cblxuICAgIHRoaXMuYW5pbWF0ZVZpZXcob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgIHwgIG9wdGlvbnMub2Zmc2V0ICAgPSB7eDpudW1iZXIsIHk6bnVtYmVyfSAgIC8vIG9mZnNldCBmcm9tIHRoZSBjZW50ZXIgaW4gRE9NIHBpeGVsc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgb3B0aW9ucy50aW1lICAgICA9IG51bWJlciAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLnNjYWxlICAgID0gbnVtYmVyICAgICAgICAgICAgICAgICAvLyBzY2FsZSB0byBhbmltYXRlIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLnBvc2l0aW9uID0ge3g6bnVtYmVyLCB5Om51bWJlcn0gICAvLyBwb3NpdGlvbiB0byBhbmltYXRlIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLmVhc2luZ0Z1bmN0aW9uID0gU3RyaW5nICAgICAgICAgICAvLyBsaW5lYXIsIGVhc2VJblF1YWQsIGVhc2VPdXRRdWFkLCBlYXNlSW5PdXRRdWFkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFzZUluQ3ViaWMsIGVhc2VPdXRDdWJpYywgZWFzZUluT3V0Q3ViaWMsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYXNlSW5RdWFydCwgZWFzZU91dFF1YXJ0LCBlYXNlSW5PdXRRdWFydCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhc2VJblF1aW50LCBlYXNlT3V0UXVpbnQsIGVhc2VJbk91dFF1aW50XG4gICAqL1xuICBhbmltYXRlVmlldyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFuaW1hdGlvbkVhc2luZ0Z1bmN0aW9uID0gb3B0aW9ucy5hbmltYXRpb24uZWFzaW5nRnVuY3Rpb247XG4gICAgLy8gcmVsZWFzZSBpZiBzb21ldGhpbmcgZm9jdXNzZWQgb24gdGhlIG5vZGVcbiAgICB0aGlzLnJlbGVhc2VOb2RlKCk7XG4gICAgaWYgKG9wdGlvbnMubG9ja2VkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmxvY2tlZE9uTm9kZUlkID0gb3B0aW9ucy5sb2NrZWRPbk5vZGU7XG4gICAgICB0aGlzLmxvY2tlZE9uTm9kZU9mZnNldCA9IG9wdGlvbnMub2Zmc2V0O1xuICAgIH1cblxuICAgIC8vIGZvcmNlZnVsbHkgY29tcGxldGUgdGhlIG9sZCBhbmltYXRpb24gaWYgaXQgd2FzIHN0aWxsIHJ1bm5pbmdcbiAgICBpZiAodGhpcy5lYXNpbmdUaW1lICE9IDApIHtcbiAgICAgIHRoaXMuX3RyYW5zaXRpb25SZWRyYXcodHJ1ZSk7IC8vIGJ5IHNldHRpbmcgZWFzaW5ndGltZSB0byAxLCB3ZSBmaW5pc2ggdGhlIGFuaW1hdGlvbi5cbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZVNjYWxlID0gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgdGhpcy5zb3VyY2VUcmFuc2xhdGlvbiA9IHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uO1xuICAgIHRoaXMudGFyZ2V0U2NhbGUgPSBvcHRpb25zLnNjYWxlO1xuXG4gICAgLy8gc2V0IHRoZSBzY2FsZSBzbyB0aGUgdmlld0NlbnRlciBpcyBiYXNlZCBvbiB0aGUgY29ycmVjdCB6b29tIGxldmVsLiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gdGhlIHRyYW5zaXRpb25SZWRyYXdcbiAgICAvLyBidXQgYXQgbGVhc3QgdGhlbiB3ZSdsbCBoYXZlIHRoZSB0YXJnZXQgdHJhbnNpdGlvblxuICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gdGhpcy50YXJnZXRTY2FsZTtcbiAgICBjb25zdCB2aWV3Q2VudGVyID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoe1xuICAgICAgeDogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoLFxuICAgICAgeTogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRpc3RhbmNlRnJvbUNlbnRlciA9IHtcbiAgICAgIC8vIG9mZnNldCBmcm9tIHZpZXcsIGRpc3RhbmNlIHZpZXcgaGFzIHRvIGNoYW5nZSBieSB0aGVzZSB4IGFuZCB5IHRvIGNlbnRlciB0aGUgbm9kZVxuICAgICAgeDogdmlld0NlbnRlci54IC0gb3B0aW9ucy5wb3NpdGlvbi54LFxuICAgICAgeTogdmlld0NlbnRlci55IC0gb3B0aW9ucy5wb3NpdGlvbi55LFxuICAgIH07XG4gICAgdGhpcy50YXJnZXRUcmFuc2xhdGlvbiA9IHtcbiAgICAgIHg6XG4gICAgICAgIHRoaXMuc291cmNlVHJhbnNsYXRpb24ueCArXG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci54ICogdGhpcy50YXJnZXRTY2FsZSArXG4gICAgICAgIG9wdGlvbnMub2Zmc2V0LngsXG4gICAgICB5OlxuICAgICAgICB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uLnkgK1xuICAgICAgICBkaXN0YW5jZUZyb21DZW50ZXIueSAqIHRoaXMudGFyZ2V0U2NhbGUgK1xuICAgICAgICBvcHRpb25zLm9mZnNldC55LFxuICAgIH07XG5cbiAgICAvLyBpZiB0aGUgdGltZSBpcyBzZXQgdG8gMCwgZG9uJ3QgZG8gYW4gYW5pbWF0aW9uXG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0aW9uLmR1cmF0aW9uID09PSAwKSB7XG4gICAgICBpZiAodGhpcy5sb2NrZWRPbk5vZGVJZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52aWV3RnVuY3Rpb24gPSB0aGlzLl9sb2NrZWRSZWRyYXcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gdGhpcy50YXJnZXRTY2FsZTtcbiAgICAgICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB0aGlzLnRhcmdldFRyYW5zbGF0aW9uO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPVxuICAgICAgICAxIC8gKDYwICogb3B0aW9ucy5hbmltYXRpb24uZHVyYXRpb24gKiAwLjAwMSkgfHwgMSAvIDYwOyAvLyA2MCBmb3IgNjAgc2Vjb25kcywgMC4wMDEgZm9yIG1pbGxpJ3NcbiAgICAgIHRoaXMuYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb24gPSBvcHRpb25zLmFuaW1hdGlvbi5lYXNpbmdGdW5jdGlvbjtcblxuICAgICAgdGhpcy52aWV3RnVuY3Rpb24gPSB0aGlzLl90cmFuc2l0aW9uUmVkcmF3LmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImluaXRSZWRyYXdcIiwgdGhpcy52aWV3RnVuY3Rpb24pO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9zdGFydFJlbmRlcmluZ1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdXNlZCB0byBhbmltYXRlIHNtb290aGx5IGJ5IGhpamFja2luZyB0aGUgcmVkcmF3IGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2xvY2tlZFJlZHJhdygpIHtcbiAgICBjb25zdCBub2RlUG9zaXRpb24gPSB7XG4gICAgICB4OiB0aGlzLmJvZHkubm9kZXNbdGhpcy5sb2NrZWRPbk5vZGVJZF0ueCxcbiAgICAgIHk6IHRoaXMuYm9keS5ub2Rlc1t0aGlzLmxvY2tlZE9uTm9kZUlkXS55LFxuICAgIH07XG4gICAgY29uc3Qgdmlld0NlbnRlciA9IHRoaXMuY2FudmFzLkRPTXRvQ2FudmFzKHtcbiAgICAgIHg6IDAuNSAqIHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCxcbiAgICAgIHk6IDAuNSAqIHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQsXG4gICAgfSk7XG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQ2VudGVyID0ge1xuICAgICAgLy8gb2Zmc2V0IGZyb20gdmlldywgZGlzdGFuY2UgdmlldyBoYXMgdG8gY2hhbmdlIGJ5IHRoZXNlIHggYW5kIHkgdG8gY2VudGVyIHRoZSBub2RlXG4gICAgICB4OiB2aWV3Q2VudGVyLnggLSBub2RlUG9zaXRpb24ueCxcbiAgICAgIHk6IHZpZXdDZW50ZXIueSAtIG5vZGVQb3NpdGlvbi55LFxuICAgIH07XG4gICAgY29uc3Qgc291cmNlVHJhbnNsYXRpb24gPSB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbjtcbiAgICBjb25zdCB0YXJnZXRUcmFuc2xhdGlvbiA9IHtcbiAgICAgIHg6XG4gICAgICAgIHNvdXJjZVRyYW5zbGF0aW9uLnggK1xuICAgICAgICBkaXN0YW5jZUZyb21DZW50ZXIueCAqIHRoaXMuYm9keS52aWV3LnNjYWxlICtcbiAgICAgICAgdGhpcy5sb2NrZWRPbk5vZGVPZmZzZXQueCxcbiAgICAgIHk6XG4gICAgICAgIHNvdXJjZVRyYW5zbGF0aW9uLnkgK1xuICAgICAgICBkaXN0YW5jZUZyb21DZW50ZXIueSAqIHRoaXMuYm9keS52aWV3LnNjYWxlICtcbiAgICAgICAgdGhpcy5sb2NrZWRPbk5vZGVPZmZzZXQueSxcbiAgICB9O1xuXG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB0YXJnZXRUcmFuc2xhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgc3RhdGUgb2YgYSBsb2NrZWQgb24gTm9kZVxuICAgKi9cbiAgcmVsZWFzZU5vZGUoKSB7XG4gICAgaWYgKHRoaXMubG9ja2VkT25Ob2RlSWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnZpZXdGdW5jdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIHRoaXMubG9ja2VkT25Ob2RlSWQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmxvY2tlZE9uTm9kZU9mZnNldCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBbZmluaXNoZWQ9ZmFsc2VdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdHJhbnNpdGlvblJlZHJhdyhmaW5pc2hlZCA9IGZhbHNlKSB7XG4gICAgdGhpcy5lYXNpbmdUaW1lICs9IHRoaXMuYW5pbWF0aW9uU3BlZWQ7XG4gICAgdGhpcy5lYXNpbmdUaW1lID0gZmluaXNoZWQgPT09IHRydWUgPyAxLjAgOiB0aGlzLmVhc2luZ1RpbWU7XG5cbiAgICBjb25zdCBwcm9ncmVzcyA9IGVhc2luZ0Z1bmN0aW9uc1t0aGlzLmFuaW1hdGlvbkVhc2luZ0Z1bmN0aW9uXShcbiAgICAgIHRoaXMuZWFzaW5nVGltZVxuICAgICk7XG5cbiAgICB0aGlzLmJvZHkudmlldy5zY2FsZSA9XG4gICAgICB0aGlzLnNvdXJjZVNjYWxlICsgKHRoaXMudGFyZ2V0U2NhbGUgLSB0aGlzLnNvdXJjZVNjYWxlKSAqIHByb2dyZXNzO1xuICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uID0ge1xuICAgICAgeDpcbiAgICAgICAgdGhpcy5zb3VyY2VUcmFuc2xhdGlvbi54ICtcbiAgICAgICAgKHRoaXMudGFyZ2V0VHJhbnNsYXRpb24ueCAtIHRoaXMuc291cmNlVHJhbnNsYXRpb24ueCkgKiBwcm9ncmVzcyxcbiAgICAgIHk6XG4gICAgICAgIHRoaXMuc291cmNlVHJhbnNsYXRpb24ueSArXG4gICAgICAgICh0aGlzLnRhcmdldFRyYW5zbGF0aW9uLnkgLSB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uLnkpICogcHJvZ3Jlc3MsXG4gICAgfTtcblxuICAgIC8vIGNsZWFudXBcbiAgICBpZiAodGhpcy5lYXNpbmdUaW1lID49IDEuMCkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKFwiaW5pdFJlZHJhd1wiLCB0aGlzLnZpZXdGdW5jdGlvbik7XG4gICAgICB0aGlzLmVhc2luZ1RpbWUgPSAwO1xuICAgICAgaWYgKHRoaXMubG9ja2VkT25Ob2RlSWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMudmlld0Z1bmN0aW9uID0gdGhpcy5fbG9ja2VkUmVkcmF3LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiaW5pdFJlZHJhd1wiLCB0aGlzLnZpZXdGdW5jdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYW5pbWF0aW9uRmluaXNoZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRTY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge3t4OiBudW1iZXIsIHk6IG51bWJlcn19XG4gICAqL1xuICBnZXRWaWV3UG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FudmFzLkRPTXRvQ2FudmFzKHtcbiAgICAgIHg6IDAuNSAqIHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCxcbiAgICAgIHk6IDAuNSAqIHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlldztcbiIsICJ0eXBlIElkVHlwZSA9IHN0cmluZyB8IG51bWJlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWV3Rml0T3B0aW9ucyB7XG4gIG5vZGVzOiBJZFR5cGVbXTtcbiAgbWluWm9vbUxldmVsOiBudW1iZXI7XG4gIG1heFpvb21MZXZlbDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoZSBmaXQgb3B0aW9ucywgcmVwbGFjZSBtaXNzaW5nIG9wdGlvbmFsIHZhbHVlcyBieSBkZWZhdWx0cyBldGMuXG4gKlxuICogQHBhcmFtIHJhd09wdGlvbnMgLSBUaGUgcmF3IG9wdGlvbnMuXG4gKiBAcGFyYW0gYWxsTm9kZUlkcyAtIEFsbCBub2RlIGlkcyB0aGF0IHdpbGwgYmUgdXNlZCBpZiBub2RlcyBhcmUgb21pdHRlZCBpblxuICogdGhlIHJhdyBvcHRpb25zLlxuICogQHJldHVybnMgT3B0aW9ucyB3aXRoIGV2ZXJ5dGhpbmcgZmlsbGVkIGluIGFuZCB2YWxpZGF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGaXRPcHRpb25zKFxuICByYXdPcHRpb25zOiBQYXJ0aWFsPFZpZXdGaXRPcHRpb25zPixcbiAgYWxsTm9kZUlkczogSWRUeXBlW11cbik6IFZpZXdGaXRPcHRpb25zIHtcbiAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ248Vmlld0ZpdE9wdGlvbnMsIFBhcnRpYWw8Vmlld0ZpdE9wdGlvbnM+PihcbiAgICB7XG4gICAgICBub2RlczogYWxsTm9kZUlkcyxcbiAgICAgIG1pblpvb21MZXZlbDogTnVtYmVyLk1JTl9WQUxVRSxcbiAgICAgIG1heFpvb21MZXZlbDogMSxcbiAgICB9LFxuICAgIHJhd09wdGlvbnMgPz8ge31cbiAgKTtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5ub2RlcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm9kZXMgaGFzIHRvIGJlIGFuIGFycmF5IG9mIGlkcy5cIik7XG4gIH1cbiAgaWYgKG9wdGlvbnMubm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgb3B0aW9ucy5ub2RlcyA9IGFsbE5vZGVJZHM7XG4gIH1cblxuICBpZiAoISh0eXBlb2Ygb3B0aW9ucy5taW5ab29tTGV2ZWwgPT09IFwibnVtYmVyXCIgJiYgb3B0aW9ucy5taW5ab29tTGV2ZWwgPiAwKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNaW4gem9vbSBsZXZlbCBoYXMgdG8gYmUgYSBudW1iZXIgaGlnaGVyIHRoYW4gemVyby5cIik7XG4gIH1cblxuICBpZiAoXG4gICAgIShcbiAgICAgIHR5cGVvZiBvcHRpb25zLm1heFpvb21MZXZlbCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgb3B0aW9ucy5taW5ab29tTGV2ZWwgPD0gb3B0aW9ucy5tYXhab29tTGV2ZWxcbiAgICApXG4gICkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBcIk1heCB6b29tIGxldmVsIGhhcyB0byBiZSBhIG51bWJlciBoaWdoZXIgdGhhbiBtaW4gem9vbSBsZXZlbC5cIlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn1cbiIsICIvKipcclxuICogQ3JlYXRlZCBieSBBbGV4IG9uIDExLzYvMjAxNC5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGtleWNoYXJtKG9wdGlvbnMpIHtcclxuICB2YXIgcHJldmVudERlZmF1bHQgPSBvcHRpb25zICYmIG9wdGlvbnMucHJldmVudERlZmF1bHQgfHwgZmFsc2U7XHJcblxyXG4gIHZhciBjb250YWluZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGFpbmVyIHx8IHdpbmRvdztcclxuXHJcbiAgdmFyIF9leHBvcnRGdW5jdGlvbnMgPSB7fTtcclxuICB2YXIgX2JvdW5kID0ge2tleWRvd246e30sIGtleXVwOnt9fTtcclxuICB2YXIgX2tleXMgPSB7fTtcclxuICB2YXIgaTtcclxuXHJcbiAgLy8gYSAtIHpcclxuICBmb3IgKGkgPSA5NzsgaSA8PSAxMjI7IGkrKykge19rZXlzW1N0cmluZy5mcm9tQ2hhckNvZGUoaSldID0ge2NvZGU6NjUgKyAoaSAtIDk3KSwgc2hpZnQ6IGZhbHNlfTt9XHJcbiAgLy8gQSAtIFpcclxuICBmb3IgKGkgPSA2NTsgaSA8PSA5MDsgaSsrKSB7X2tleXNbU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSB7Y29kZTppLCBzaGlmdDogdHJ1ZX07fVxyXG4gIC8vIDAgLSA5XHJcbiAgZm9yIChpID0gMDsgIGkgPD0gOTsgICBpKyspIHtfa2V5c1snJyArIGldID0ge2NvZGU6NDggKyBpLCBzaGlmdDogZmFsc2V9O31cclxuICAvLyBGMSAtIEYxMlxyXG4gIGZvciAoaSA9IDE7ICBpIDw9IDEyOyAgIGkrKykge19rZXlzWydGJyArIGldID0ge2NvZGU6MTExICsgaSwgc2hpZnQ6IGZhbHNlfTt9XHJcbiAgLy8gbnVtMCAtIG51bTlcclxuICBmb3IgKGkgPSAwOyAgaSA8PSA5OyAgIGkrKykge19rZXlzWydudW0nICsgaV0gPSB7Y29kZTo5NiArIGksIHNoaWZ0OiBmYWxzZX07fVxyXG5cclxuICAvLyBudW1wYWQgbWlzY1xyXG4gIF9rZXlzWydudW0qJ10gPSB7Y29kZToxMDYsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ251bSsnXSA9IHtjb2RlOjEwNywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snbnVtLSddID0ge2NvZGU6MTA5LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydudW0vJ10gPSB7Y29kZToxMTEsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ251bS4nXSA9IHtjb2RlOjExMCwgc2hpZnQ6IGZhbHNlfTtcclxuICAvLyBhcnJvd3NcclxuICBfa2V5c1snbGVmdCddICA9IHtjb2RlOjM3LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWyd1cCddICAgID0ge2NvZGU6MzgsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3JpZ2h0J10gPSB7Y29kZTozOSwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snZG93biddICA9IHtjb2RlOjQwLCBzaGlmdDogZmFsc2V9O1xyXG4gIC8vIGV4dHJhIGtleXNcclxuICBfa2V5c1snc3BhY2UnXSA9IHtjb2RlOjMyLCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydlbnRlciddID0ge2NvZGU6MTMsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3NoaWZ0J10gPSB7Y29kZToxNiwgc2hpZnQ6IHVuZGVmaW5lZH07XHJcbiAgX2tleXNbJ2VzYyddICAgPSB7Y29kZToyNywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snYmFja3NwYWNlJ10gPSB7Y29kZTo4LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWyd0YWInXSAgICAgICA9IHtjb2RlOjksIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ2N0cmwnXSAgICAgID0ge2NvZGU6MTcsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ2FsdCddICAgICAgID0ge2NvZGU6MTgsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ2RlbGV0ZSddICAgID0ge2NvZGU6NDYsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3BhZ2V1cCddICAgID0ge2NvZGU6MzMsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3BhZ2Vkb3duJ10gID0ge2NvZGU6MzQsIHNoaWZ0OiBmYWxzZX07XHJcbiAgLy8gc3ltYm9sc1xyXG4gIF9rZXlzWyc9J10gICAgID0ge2NvZGU6MTg3LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWyctJ10gICAgID0ge2NvZGU6MTg5LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWyddJ10gICAgID0ge2NvZGU6MjIxLCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydbJ10gICAgID0ge2NvZGU6MjE5LCBzaGlmdDogZmFsc2V9O1xyXG5cclxuXHJcblxyXG4gIHZhciBkb3duID0gZnVuY3Rpb24oZXZlbnQpIHtoYW5kbGVFdmVudChldmVudCwna2V5ZG93bicpO307XHJcbiAgdmFyIHVwID0gZnVuY3Rpb24oZXZlbnQpIHtoYW5kbGVFdmVudChldmVudCwna2V5dXAnKTt9O1xyXG5cclxuICAvLyBoYW5kbGUgdGhlIGFjdHVhbHkgYm91bmQga2V5IHdpdGggdGhlIGV2ZW50XHJcbiAgdmFyIGhhbmRsZUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQsdHlwZSkge1xyXG4gICAgaWYgKF9ib3VuZFt0eXBlXVtldmVudC5rZXlDb2RlXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHZhciBib3VuZCA9IF9ib3VuZFt0eXBlXVtldmVudC5rZXlDb2RlXTtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChib3VuZFtpXS5zaGlmdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBib3VuZFtpXS5mbihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGJvdW5kW2ldLnNoaWZ0ID09IHRydWUgJiYgZXZlbnQuc2hpZnRLZXkgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgYm91bmRbaV0uZm4oZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChib3VuZFtpXS5zaGlmdCA9PSBmYWxzZSAmJiBldmVudC5zaGlmdEtleSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgYm91bmRbaV0uZm4oZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHByZXZlbnREZWZhdWx0ID09IHRydWUpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gYmluZCBhIGtleSB0byBhIGNhbGxiYWNrXHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy5iaW5kID0gZnVuY3Rpb24oa2V5LCBjYWxsYmFjaywgdHlwZSkge1xyXG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0eXBlID0gJ2tleWRvd24nO1xyXG4gICAgfVxyXG4gICAgaWYgKF9rZXlzW2tleV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBrZXk6IFwiICsga2V5KTtcclxuICAgIH1cclxuICAgIGlmIChfYm91bmRbdHlwZV1bX2tleXNba2V5XS5jb2RlXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdID0gW107XHJcbiAgICB9XHJcbiAgICBfYm91bmRbdHlwZV1bX2tleXNba2V5XS5jb2RlXS5wdXNoKHtmbjpjYWxsYmFjaywgc2hpZnQ6X2tleXNba2V5XS5zaGlmdH0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvLyBiaW5kIGFsbCBrZXlzIHRvIGEgY2FsbCBiYWNrIChkZW1vIHB1cnBvc2VzKVxyXG4gIF9leHBvcnRGdW5jdGlvbnMuYmluZEFsbCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0eXBlKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHR5cGUgPSAna2V5ZG93bic7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gX2tleXMpIHtcclxuICAgICAgaWYgKF9rZXlzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICBfZXhwb3J0RnVuY3Rpb25zLmJpbmQoa2V5LGNhbGxiYWNrLHR5cGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gZ2V0IHRoZSBrZXkgbGFiZWwgZnJvbSBhbiBldmVudFxyXG4gIF9leHBvcnRGdW5jdGlvbnMuZ2V0S2V5ID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIGZvciAodmFyIGtleSBpbiBfa2V5cykge1xyXG4gICAgICBpZiAoX2tleXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSA9PSB0cnVlICYmIF9rZXlzW2tleV0uc2hpZnQgPT0gdHJ1ZSAmJiBldmVudC5rZXlDb2RlID09IF9rZXlzW2tleV0uY29kZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkgPT0gZmFsc2UgJiYgX2tleXNba2V5XS5zaGlmdCA9PSBmYWxzZSAmJiBldmVudC5rZXlDb2RlID09IF9rZXlzW2tleV0uY29kZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PSBfa2V5c1trZXldLmNvZGUgJiYga2V5ID09ICdzaGlmdCcpIHtcclxuICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJ1bmtub3duIGtleSwgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWRcIjtcclxuICB9O1xyXG5cclxuICAvLyB1bmJpbmQgZWl0aGVyIGEgc3BlY2lmaWMgY2FsbGJhY2sgZnJvbSBhIGtleSBvciBhbGwgb2YgdGhlbSAoYnkgbGVhdmluZyBjYWxsYmFjayB1bmRlZmluZWQpXHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy51bmJpbmQgPSBmdW5jdGlvbihrZXksIGNhbGxiYWNrLCB0eXBlKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHR5cGUgPSAna2V5ZG93bic7XHJcbiAgICB9XHJcbiAgICBpZiAoX2tleXNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGtleTogXCIgKyBrZXkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdmFyIG5ld0JpbmRpbmdzID0gW107XHJcbiAgICAgIHZhciBib3VuZCA9IF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdO1xyXG4gICAgICBpZiAoYm91bmQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmICghKGJvdW5kW2ldLmZuID09IGNhbGxiYWNrICYmIGJvdW5kW2ldLnNoaWZ0ID09IF9rZXlzW2tleV0uc2hpZnQpKSB7XHJcbiAgICAgICAgICAgIG5ld0JpbmRpbmdzLnB1c2goX2JvdW5kW3R5cGVdW19rZXlzW2tleV0uY29kZV1baV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBfYm91bmRbdHlwZV1bX2tleXNba2V5XS5jb2RlXSA9IG5ld0JpbmRpbmdzO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdID0gW107XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gcmVzZXQgYWxsIGJvdW5kIHZhcmlhYmxlcy5cclxuICBfZXhwb3J0RnVuY3Rpb25zLnJlc2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfYm91bmQgPSB7a2V5ZG93bjp7fSwga2V5dXA6e319O1xyXG4gIH07XHJcblxyXG4gIC8vIHVuYmluZCBhbGwgbGlzdGVuZXJzIGFuZCByZXNldCBhbGwgdmFyaWFibGVzLlxyXG4gIF9leHBvcnRGdW5jdGlvbnMuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX2JvdW5kID0ge2tleWRvd246e30sIGtleXVwOnt9fTtcclxuICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZG93biwgdHJ1ZSk7XHJcbiAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB1cCwgdHJ1ZSk7XHJcbiAgfTtcclxuXHJcbiAgLy8gY3JlYXRlIGxpc3RlbmVycy5cclxuICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsZG93bix0cnVlKTtcclxuICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLHVwLHRydWUpO1xyXG5cclxuICAvLyByZXR1cm4gdGhlIHB1YmxpYyBmdW5jdGlvbnMuXHJcbiAgcmV0dXJuIF9leHBvcnRGdW5jdGlvbnM7XHJcbn1cclxuIiwgImltcG9ydCBcIi4vTmF2aWdhdGlvbkhhbmRsZXIuY3NzXCI7XG5cbmltcG9ydCB7IEhhbW1lciB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCB7IG9uUmVsZWFzZSwgb25Ub3VjaCB9IGZyb20gXCIuLi8uLi8uLi9oYW1tZXJVdGlsXCI7XG5pbXBvcnQga2V5Y2hhcm0gZnJvbSBcImtleWNoYXJtXCI7XG5cbi8qKlxuICogTmF2aWdhdGlvbiBIYW5kbGVyXG4gKi9cbmNsYXNzIE5hdmlnYXRpb25IYW5kbGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGNhbnZhcykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5jYW52YXMgPSBjYW52YXM7XG5cbiAgICB0aGlzLmljb25zQ3JlYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMubmF2aWdhdGlvbkhhbW1lcnMgPSBbXTtcbiAgICB0aGlzLmJvdW5kRnVuY3Rpb25zID0ge307XG4gICAgdGhpcy50b3VjaFRpbWUgPSAwO1xuICAgIHRoaXMuYWN0aXZhdGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImFjdGl2YXRlXCIsICgpID0+IHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuY29uZmlndXJlS2V5Ym9hcmRCaW5kaW5ncygpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVhY3RpdmF0ZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmFjdGl2YXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jb25maWd1cmVLZXlib2FyZEJpbmRpbmdzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZXN0cm95XCIsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmtleWNoYXJtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5rZXljaGFybS5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgIHRoaXMuY3JlYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgb3IgcmVmcmVzaGVzIG5hdmlnYXRpb24gYW5kIHNldHMga2V5IGJpbmRpbmdzXG4gICAqL1xuICBjcmVhdGUoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5uYXZpZ2F0aW9uQnV0dG9ucyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMuaWNvbnNDcmVhdGVkID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmxvYWROYXZpZ2F0aW9uRWxlbWVudHMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuaWNvbnNDcmVhdGVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmNsZWFuTmF2aWdhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlndXJlS2V5Ym9hcmRCaW5kaW5ncygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFucyB1cCBwcmV2aW91cyBuYXZpZ2F0aW9uIGl0ZW1zXG4gICAqL1xuICBjbGVhbk5hdmlnYXRpb24oKSB7XG4gICAgLy8gY2xlYW4gaGFtbWVyIGJpbmRpbmdzXG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkhhbW1lcnMubGVuZ3RoICE9IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5uYXZpZ2F0aW9uSGFtbWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25IYW1tZXJzW2ldLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmF2aWdhdGlvbkhhbW1lcnMgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBwcmV2aW91cyBuYXZpZ2F0aW9uIGl0ZW1zXG4gICAgaWYgKFxuICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NICYmXG4gICAgICB0aGlzLm5hdmlnYXRpb25ET01bXCJ3cmFwcGVyXCJdICYmXG4gICAgICB0aGlzLm5hdmlnYXRpb25ET01bXCJ3cmFwcGVyXCJdLnBhcmVudE5vZGVcbiAgICApIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmljb25zQ3JlYXRlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0aW9uIG9mIHRoZSBuYXZpZ2F0aW9uIGNvbnRyb2xzIG5vZGVzLiBUaGV5IGFyZSBkcmF3biBvdmVyIHRoZSByZXN0IG9mIHRoZSBub2RlcyBhbmQgYXJlIG5vdCBhZmZlY3RlZCBieSBzY2FsZSBhbmQgdHJhbnNsYXRpb25cbiAgICogdGhleSBoYXZlIGEgdHJpZ2dlckZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBvbiBjbGljay4gSWYgdGhlIHBvc2l0aW9uIG9mIHRoZSBuYXZpZ2F0aW9uIGNvbnRyb2xzIGlzIGRlcGVuZGVudFxuICAgKiBvbiB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCBvciB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQsIHdlIGZsYWcgaG9yaXpvbnRhbEFsaWduTGVmdCBhbmQgdmVydGljYWxBbGlnblRvcCBmYWxzZS5cbiAgICogVGhpcyBtZWFucyB0aGF0IHRoZSBsb2NhdGlvbiB3aWxsIGJlIGNvcnJlY3RlZCBieSB0aGUgX3JlbG9jYXRlTmF2aWdhdGlvbiBmdW5jdGlvbiBvbiBhIHNpemUgY2hhbmdlIG9mIHRoZSBjYW52YXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBsb2FkTmF2aWdhdGlvbkVsZW1lbnRzKCkge1xuICAgIHRoaXMuY2xlYW5OYXZpZ2F0aW9uKCk7XG5cbiAgICB0aGlzLm5hdmlnYXRpb25ET00gPSB7fTtcbiAgICBjb25zdCBuYXZpZ2F0aW9uRGl2cyA9IFtcbiAgICAgIFwidXBcIixcbiAgICAgIFwiZG93blwiLFxuICAgICAgXCJsZWZ0XCIsXG4gICAgICBcInJpZ2h0XCIsXG4gICAgICBcInpvb21JblwiLFxuICAgICAgXCJ6b29tT3V0XCIsXG4gICAgICBcInpvb21FeHRlbmRzXCIsXG4gICAgXTtcbiAgICBjb25zdCBuYXZpZ2F0aW9uRGl2QWN0aW9ucyA9IFtcbiAgICAgIFwiX21vdmVVcFwiLFxuICAgICAgXCJfbW92ZURvd25cIixcbiAgICAgIFwiX21vdmVMZWZ0XCIsXG4gICAgICBcIl9tb3ZlUmlnaHRcIixcbiAgICAgIFwiX3pvb21JblwiLFxuICAgICAgXCJfem9vbU91dFwiLFxuICAgICAgXCJfZml0XCIsXG4gICAgXTtcblxuICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0uY2xhc3NOYW1lID0gXCJ2aXMtbmF2aWdhdGlvblwiO1xuICAgIHRoaXMuY2FudmFzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXZpZ2F0aW9uRGl2cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW25hdmlnYXRpb25EaXZzW2ldXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLm5hdmlnYXRpb25ET01bbmF2aWdhdGlvbkRpdnNbaV1dLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWJ1dHRvbiB2aXMtXCIgKyBuYXZpZ2F0aW9uRGl2c1tpXTtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0uYXBwZW5kQ2hpbGQoXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtuYXZpZ2F0aW9uRGl2c1tpXV1cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGhhbW1lciA9IG5ldyBIYW1tZXIodGhpcy5uYXZpZ2F0aW9uRE9NW25hdmlnYXRpb25EaXZzW2ldXSk7XG4gICAgICBpZiAobmF2aWdhdGlvbkRpdkFjdGlvbnNbaV0gPT09IFwiX2ZpdFwiKSB7XG4gICAgICAgIG9uVG91Y2goaGFtbWVyLCB0aGlzLl9maXQuYmluZCh0aGlzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvblRvdWNoKGhhbW1lciwgdGhpcy5iaW5kVG9SZWRyYXcuYmluZCh0aGlzLCBuYXZpZ2F0aW9uRGl2QWN0aW9uc1tpXSkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5hdmlnYXRpb25IYW1tZXJzLnB1c2goaGFtbWVyKTtcbiAgICB9XG5cbiAgICAvLyB1c2UgYSBoYW1tZXIgZm9yIHRoZSByZWxlYXNlIHNvIHdlIGRvIG5vdCByZXF1aXJlIHRoZSBvbmUgdXNlZCBpbiB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya1xuICAgIC8vIHRoZSBvbmUgdGhlIHJlc3QgdXNlcyBjYW4gYmUgb3ZlcmxvYWRlZCBieSB0aGUgbWFuaXB1bGF0aW9uIHN5c3RlbS5cbiAgICBjb25zdCBoYW1tZXJGcmFtZSA9IG5ldyBIYW1tZXIodGhpcy5jYW52YXMuZnJhbWUpO1xuICAgIG9uUmVsZWFzZShoYW1tZXJGcmFtZSwgKCkgPT4ge1xuICAgICAgdGhpcy5fc3RvcE1vdmVtZW50KCk7XG4gICAgfSk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uSGFtbWVycy5wdXNoKGhhbW1lckZyYW1lKTtcblxuICAgIHRoaXMuaWNvbnNDcmVhdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uXG4gICAqL1xuICBiaW5kVG9SZWRyYXcoYWN0aW9uKSB7XG4gICAgaWYgKHRoaXMuYm91bmRGdW5jdGlvbnNbYWN0aW9uXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJvdW5kRnVuY3Rpb25zW2FjdGlvbl0gPSB0aGlzW2FjdGlvbl0uYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiaW5pdFJlZHJhd1wiLCB0aGlzLmJvdW5kRnVuY3Rpb25zW2FjdGlvbl0pO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9zdGFydFJlbmRlcmluZ1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvblxuICAgKi9cbiAgdW5iaW5kRnJvbVJlZHJhdyhhY3Rpb24pIHtcbiAgICBpZiAodGhpcy5ib3VuZEZ1bmN0aW9uc1thY3Rpb25dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9mZihcImluaXRSZWRyYXdcIiwgdGhpcy5ib3VuZEZ1bmN0aW9uc1thY3Rpb25dKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfc3RvcFJlbmRlcmluZ1wiKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvdW5kRnVuY3Rpb25zW2FjdGlvbl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgc3RvcHMgYWxsIG1vdmVtZW50IGluZHVjZWQgYnkgdGhlIG5hdmlnYXRpb24gYnV0dG9uc1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpdCgpIHtcbiAgICBpZiAobmV3IERhdGUoKS52YWx1ZU9mKCkgLSB0aGlzLnRvdWNoVGltZSA+IDcwMCkge1xuICAgICAgLy8gVE9ETzogZml4IHVnbHkgaGFjayB0byBhdm9pZCBoYW1tZXIncyBkb3VibGUgZmlyZWluZyBvZiBldmVudCAoYmVjYXVzZSB3ZSB1c2UgcmVsZWFzZT8pXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiZml0XCIsIHsgZHVyYXRpb246IDcwMCB9KTtcbiAgICAgIHRoaXMudG91Y2hUaW1lID0gbmV3IERhdGUoKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgc3RvcHMgYWxsIG1vdmVtZW50IGluZHVjZWQgYnkgdGhlIG5hdmlnYXRpb24gYnV0dG9uc1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3N0b3BNb3ZlbWVudCgpIHtcbiAgICBmb3IgKGNvbnN0IGJvdW5kQWN0aW9uIGluIHRoaXMuYm91bmRGdW5jdGlvbnMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm91bmRGdW5jdGlvbnMsIGJvdW5kQWN0aW9uKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9mZihcImluaXRSZWRyYXdcIiwgdGhpcy5ib3VuZEZ1bmN0aW9uc1tib3VuZEFjdGlvbl0pO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0b3BSZW5kZXJpbmdcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYm91bmRGdW5jdGlvbnMgPSB7fTtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlVXAoKSB7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueSArPSB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuc3BlZWQueTtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlRG93bigpIHtcbiAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55IC09IHRoaXMub3B0aW9ucy5rZXlib2FyZC5zcGVlZC55O1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21vdmVMZWZ0KCkge1xuICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnggKz0gdGhpcy5vcHRpb25zLmtleWJvYXJkLnNwZWVkLng7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbW92ZVJpZ2h0KCkge1xuICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnggLT0gdGhpcy5vcHRpb25zLmtleWJvYXJkLnNwZWVkLng7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfem9vbUluKCkge1xuICAgIGNvbnN0IHNjYWxlT2xkID0gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgY29uc3Qgc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZSAqICgxICsgdGhpcy5vcHRpb25zLmtleWJvYXJkLnNwZWVkLnpvb20pO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb247XG4gICAgY29uc3Qgc2NhbGVGcmFjID0gc2NhbGUgLyBzY2FsZU9sZDtcbiAgICBjb25zdCB0eCA9XG4gICAgICAoMSAtIHNjYWxlRnJhYykgKiB0aGlzLmNhbnZhcy5jYW52YXNWaWV3Q2VudGVyLnggK1xuICAgICAgdHJhbnNsYXRpb24ueCAqIHNjYWxlRnJhYztcbiAgICBjb25zdCB0eSA9XG4gICAgICAoMSAtIHNjYWxlRnJhYykgKiB0aGlzLmNhbnZhcy5jYW52YXNWaWV3Q2VudGVyLnkgK1xuICAgICAgdHJhbnNsYXRpb24ueSAqIHNjYWxlRnJhYztcblxuICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gc2NhbGU7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7IHg6IHR4LCB5OiB0eSB9O1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJ6b29tXCIsIHtcbiAgICAgIGRpcmVjdGlvbjogXCIrXCIsXG4gICAgICBzY2FsZTogdGhpcy5ib2R5LnZpZXcuc2NhbGUsXG4gICAgICBwb2ludGVyOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfem9vbU91dCgpIHtcbiAgICBjb25zdCBzY2FsZU9sZCA9IHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgIGNvbnN0IHNjYWxlID0gdGhpcy5ib2R5LnZpZXcuc2NhbGUgLyAoMSArIHRoaXMub3B0aW9ucy5rZXlib2FyZC5zcGVlZC56b29tKTtcbiAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uO1xuICAgIGNvbnN0IHNjYWxlRnJhYyA9IHNjYWxlIC8gc2NhbGVPbGQ7XG4gICAgY29uc3QgdHggPVxuICAgICAgKDEgLSBzY2FsZUZyYWMpICogdGhpcy5jYW52YXMuY2FudmFzVmlld0NlbnRlci54ICtcbiAgICAgIHRyYW5zbGF0aW9uLnggKiBzY2FsZUZyYWM7XG4gICAgY29uc3QgdHkgPVxuICAgICAgKDEgLSBzY2FsZUZyYWMpICogdGhpcy5jYW52YXMuY2FudmFzVmlld0NlbnRlci55ICtcbiAgICAgIHRyYW5zbGF0aW9uLnkgKiBzY2FsZUZyYWM7XG5cbiAgICB0aGlzLmJvZHkudmlldy5zY2FsZSA9IHNjYWxlO1xuICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uID0geyB4OiB0eCwgeTogdHkgfTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiem9vbVwiLCB7XG4gICAgICBkaXJlY3Rpb246IFwiLVwiLFxuICAgICAgc2NhbGU6IHRoaXMuYm9keS52aWV3LnNjYWxlLFxuICAgICAgcG9pbnRlcjogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBiaW5kIGFsbCBrZXlzIHVzaW5nIGtleWNoYXJtLlxuICAgKi9cbiAgY29uZmlndXJlS2V5Ym9hcmRCaW5kaW5ncygpIHtcbiAgICBpZiAodGhpcy5rZXljaGFybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmtleWNoYXJtLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmtleWJvYXJkLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMua2V5Ym9hcmQuYmluZFRvV2luZG93ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0gPSBrZXljaGFybSh7IGNvbnRhaW5lcjogd2luZG93LCBwcmV2ZW50RGVmYXVsdDogdHJ1ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0gPSBrZXljaGFybSh7XG4gICAgICAgICAgY29udGFpbmVyOiB0aGlzLmNhbnZhcy5mcmFtZSxcbiAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMua2V5Y2hhcm0ucmVzZXQoKTtcblxuICAgICAgaWYgKHRoaXMuYWN0aXZhdGVkID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcInVwXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfbW92ZVVwXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiZG93blwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX21vdmVEb3duXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibGVmdFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX21vdmVMZWZ0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwicmlnaHRcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl9tb3ZlUmlnaHRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCI9XCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbUluXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibnVtK1wiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21JblwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIm51bS1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiLVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21PdXRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJbXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIl1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJwYWdldXBcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJwYWdlZG93blwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21PdXRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcInVwXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRGcm9tUmVkcmF3KFwiX21vdmVVcFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJkb3duXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRGcm9tUmVkcmF3KFwiX21vdmVEb3duXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcImxlZnRcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfbW92ZUxlZnRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwicmlnaHRcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfbW92ZVJpZ2h0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIj1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfem9vbUluXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIm51bStcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfem9vbUluXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIm51bS1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCItXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRGcm9tUmVkcmF3KFwiX3pvb21PdXRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiW1wiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIl1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfem9vbUluXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcInBhZ2V1cFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwicGFnZWRvd25cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uSGFuZGxlcjtcbiIsICJpbXBvcnQge1xuICBQb3B1cCxcbiAgZ2V0QWJzb2x1dGVMZWZ0LFxuICBnZXRBYnNvbHV0ZVRvcCxcbiAgbWVyZ2VPcHRpb25zLFxuICBwYXJzZUNvbG9yLFxuICBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgTmF2aWdhdGlvbkhhbmRsZXIgZnJvbSBcIi4vY29tcG9uZW50cy9OYXZpZ2F0aW9uSGFuZGxlclwiO1xuXG4vKipcbiAqIEhhbmRsZXIgZm9yIGludGVyYWN0aW9uc1xuICovXG5jbGFzcyBJbnRlcmFjdGlvbkhhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkhhbmRsZXJ9IHNlbGVjdGlvbkhhbmRsZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGNhbnZhcywgc2VsZWN0aW9uSGFuZGxlcikge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5jYW52YXMgPSBjYW52YXM7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gc2VsZWN0aW9uSGFuZGxlcjtcbiAgICB0aGlzLm5hdmlnYXRpb25IYW5kbGVyID0gbmV3IE5hdmlnYXRpb25IYW5kbGVyKGJvZHksIGNhbnZhcyk7XG5cbiAgICAvLyBiaW5kIHRoZSBldmVudHMgZnJvbSBoYW1tZXIgdG8gZnVuY3Rpb25zIGluIHRoaXMgb2JqZWN0XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uVGFwID0gdGhpcy5vblRhcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblRvdWNoID0gdGhpcy5vblRvdWNoLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uRG91YmxlVGFwID0gdGhpcy5vbkRvdWJsZVRhcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkhvbGQgPSB0aGlzLm9uSG9sZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWdTdGFydCA9IHRoaXMub25EcmFnU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25EcmFnID0gdGhpcy5vbkRyYWcuYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25EcmFnRW5kID0gdGhpcy5vbkRyYWdFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Nb3VzZVdoZWVsID0gdGhpcy5vbk1vdXNlV2hlZWwuYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25QaW5jaCA9IHRoaXMub25QaW5jaC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25SZWxlYXNlID0gdGhpcy5vblJlbGVhc2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Db250ZXh0ID0gdGhpcy5vbkNvbnRleHQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudG91Y2hUaW1lID0gMDtcbiAgICB0aGlzLmRyYWcgPSB7fTtcbiAgICB0aGlzLnBpbmNoID0ge307XG4gICAgdGhpcy5wb3B1cCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBvcHVwT2JqID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucG9wdXBUaW1lciA9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuYm9keS5mdW5jdGlvbnMuZ2V0UG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlci5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGRyYWdOb2RlczogdHJ1ZSxcbiAgICAgIGRyYWdWaWV3OiB0cnVlLFxuICAgICAgaG92ZXI6IGZhbHNlLFxuICAgICAga2V5Ym9hcmQ6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHNwZWVkOiB7IHg6IDEwLCB5OiAxMCwgem9vbTogMC4wMiB9LFxuICAgICAgICBiaW5kVG9XaW5kb3c6IHRydWUsXG4gICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBuYXZpZ2F0aW9uQnV0dG9uczogZmFsc2UsXG4gICAgICB0b29sdGlwRGVsYXk6IDMwMCxcbiAgICAgIHpvb21WaWV3OiB0cnVlLFxuICAgICAgem9vbVNwZWVkOiAxLFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucG9wdXBUaW1lcik7XG4gICAgICBkZWxldGUgdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBleHRlbmQgYWxsIGJ1dCB0aGUgdmFsdWVzIGluIGZpZWxkc1xuICAgICAgY29uc3QgZmllbGRzID0gW1xuICAgICAgICBcImhpZGVFZGdlc09uRHJhZ1wiLFxuICAgICAgICBcImhpZGVFZGdlc09uWm9vbVwiLFxuICAgICAgICBcImhpZGVOb2Rlc09uRHJhZ1wiLFxuICAgICAgICBcImtleWJvYXJkXCIsXG4gICAgICAgIFwibXVsdGlzZWxlY3RcIixcbiAgICAgICAgXCJzZWxlY3RhYmxlXCIsXG4gICAgICAgIFwic2VsZWN0Q29ubmVjdGVkRWRnZXNcIixcbiAgICAgIF07XG4gICAgICBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kKGZpZWxkcywgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgLy8gbWVyZ2UgdGhlIGtleWJvYXJkIG9wdGlvbnMgaW4uXG4gICAgICBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zLCBcImtleWJvYXJkXCIpO1xuXG4gICAgICBpZiAob3B0aW9ucy50b29sdGlwKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLnRvb2x0aXAsIG9wdGlvbnMudG9vbHRpcCk7XG4gICAgICAgIGlmIChvcHRpb25zLnRvb2x0aXAuY29sb3IpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMudG9vbHRpcC5jb2xvciA9IHBhcnNlQ29sb3Iob3B0aW9ucy50b29sdGlwLmNvbG9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubmF2aWdhdGlvbkhhbmRsZXIuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9pbnRlciBsb2NhdGlvbiBmcm9tIGEgdG91Y2ggbG9jYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSB0b3VjaFxuICAgKiBAcmV0dXJucyB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0UG9pbnRlcih0b3VjaCkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB0b3VjaC54IC0gZ2V0QWJzb2x1dGVMZWZ0KHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcyksXG4gICAgICB5OiB0b3VjaC55IC0gZ2V0QWJzb2x1dGVUb3AodGhpcy5jYW52YXMuZnJhbWUuY2FudmFzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIHN0YXJ0IG9mIGEgdG91Y2ggZ2VzdHVyZSwgc3RvcmUgdGhlIHBvaW50ZXJcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvblRvdWNoKGV2ZW50KSB7XG4gICAgaWYgKG5ldyBEYXRlKCkudmFsdWVPZigpIC0gdGhpcy50b3VjaFRpbWUgPiA1MCkge1xuICAgICAgdGhpcy5kcmFnLnBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICAgIHRoaXMuZHJhZy5waW5jaGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnBpbmNoLnNjYWxlID0gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgICAvLyB0byBhdm9pZCBkb3VibGUgZmlyZWluZyBvZiB0aGlzIGV2ZW50IGJlY2F1c2Ugd2UgaGF2ZSB0d28gaGFtbWVyIGluc3RhbmNlcy4gKG9uIGNhbnZhcyBhbmQgb24gZnJhbWUpXG4gICAgICB0aGlzLnRvdWNoVGltZSA9IG5ldyBEYXRlKCkudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBoYW5kbGUgdGFwL2NsaWNrIGV2ZW50OiBzZWxlY3QvdW5zZWxlY3QgYSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvblRhcChldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICBjb25zdCBtdWx0aXNlbGVjdCA9XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIub3B0aW9ucy5tdWx0aXNlbGVjdCAmJlxuICAgICAgKGV2ZW50LmNoYW5nZWRQb2ludGVyc1swXS5jdHJsS2V5IHx8IGV2ZW50LmNoYW5nZWRQb2ludGVyc1swXS5tZXRhS2V5KTtcblxuICAgIHRoaXMuY2hlY2tTZWxlY3Rpb25DaGFuZ2VzKHBvaW50ZXIsIG11bHRpc2VsZWN0KTtcblxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5jb21taXRBbmRFbWl0KHBvaW50ZXIsIGV2ZW50KTtcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwiY2xpY2tcIiwgZXZlbnQsIHBvaW50ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSBkb3VibGV0YXAgZXZlbnRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uRG91YmxlVGFwKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJkb3VibGVDbGlja1wiLCBldmVudCwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIGxvbmcgdGFwIGV2ZW50OiBtdWx0aSBzZWxlY3Qgbm9kZXNcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uSG9sZChldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICBjb25zdCBtdWx0aXNlbGVjdCA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5vcHRpb25zLm11bHRpc2VsZWN0O1xuXG4gICAgdGhpcy5jaGVja1NlbGVjdGlvbkNoYW5nZXMocG9pbnRlciwgbXVsdGlzZWxlY3QpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmNvbW1pdEFuZEVtaXQocG9pbnRlciwgZXZlbnQpO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJjbGlja1wiLCBldmVudCwgcG9pbnRlcik7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcImhvbGRcIiwgZXZlbnQsIHBvaW50ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSB0aGUgcmVsZWFzZSBvZiB0aGUgc2NyZWVuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvblJlbGVhc2UoZXZlbnQpIHtcbiAgICBpZiAobmV3IERhdGUoKS52YWx1ZU9mKCkgLSB0aGlzLnRvdWNoVGltZSA+IDEwKSB7XG4gICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwicmVsZWFzZVwiLCBldmVudCwgcG9pbnRlcik7XG4gICAgICAvLyB0byBhdm9pZCBkb3VibGUgZmlyZWluZyBvZiB0aGlzIGV2ZW50IGJlY2F1c2Ugd2UgaGF2ZSB0d28gaGFtbWVyIGluc3RhbmNlcy4gKG9uIGNhbnZhcyBhbmQgb24gZnJhbWUpXG4gICAgICB0aGlzLnRvdWNoVGltZSA9IG5ldyBEYXRlKCkudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgb25Db250ZXh0KGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcih7IHg6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFkgfSk7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcIm9uY29udGV4dFwiLCBldmVudCwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGFuZCBkZXNlbGVjdCBub2RlcyBkZXBlbmRpbmcgY3VycmVudCBzZWxlY3Rpb24gY2hhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvaW50ZXJcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWRkPWZhbHNlXVxuICAgKi9cbiAgY2hlY2tTZWxlY3Rpb25DaGFuZ2VzKHBvaW50ZXIsIGFkZCA9IGZhbHNlKSB7XG4gICAgaWYgKGFkZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNlbGVjdEFkZGl0aW9uYWxPblBvaW50KHBvaW50ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0T25Qb2ludChwb2ludGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBub2RlIGFuZCBlZGdlIGlkJ3MgZnJvbSB0aGUgZmlyc3Qgc2V0IHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIHNlY29uZCBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7e25vZGVzOiBBcnJheS48Tm9kZT4sIGVkZ2VzOiBBcnJheS48dmlzLkVkZ2U+fX0gZmlyc3RTZXRcbiAgICogQHBhcmFtIHt7bm9kZXM6IEFycmF5LjxOb2RlPiwgZWRnZXM6IEFycmF5Ljx2aXMuRWRnZT59fSBzZWNvbmRTZXRcbiAgICogQHJldHVybnMge3tub2RlczogQXJyYXkuPE5vZGU+LCBlZGdlczogQXJyYXkuPHZpcy5FZGdlPn19XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lRGlmZmVyZW5jZShmaXJzdFNldCwgc2Vjb25kU2V0KSB7XG4gICAgY29uc3QgYXJyYXlEaWZmID0gZnVuY3Rpb24gKGZpcnN0QXJyLCBzZWNvbmRBcnIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpcnN0QXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmlyc3RBcnJbaV07XG4gICAgICAgIGlmIChzZWNvbmRBcnIuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBub2RlczogYXJyYXlEaWZmKGZpcnN0U2V0Lm5vZGVzLCBzZWNvbmRTZXQubm9kZXMpLFxuICAgICAgZWRnZXM6IGFycmF5RGlmZihmaXJzdFNldC5lZGdlcywgc2Vjb25kU2V0LmVkZ2VzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IG9uRHJhZ1N0YXJ0LlxuICAgKiBJdCBpcyBzZXBhcmF0ZWQgb3V0IGJlY2F1c2Ugd2UgY2FuIHRoZW4gb3ZlcmxvYWQgaXQgZm9yIHRoZSBkYXRhbWFuaXB1bGF0aW9uIHN5c3RlbS5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uRHJhZ1N0YXJ0KGV2ZW50KSB7XG4gICAgLy8gaWYgYWxyZWFkeSBkcmFnZ2luZywgZG8gbm90IHN0YXJ0XG4gICAgLy8gdGhpcyBjYW4gaGFwcGVuIG9uIHRvdWNoIHNjcmVlbnMgd2l0aCBtdWx0aXBsZSBmaW5nZXJzXG4gICAgaWYgKHRoaXMuZHJhZy5kcmFnZ2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vaW4gY2FzZSB0aGUgdG91Y2ggZXZlbnQgd2FzIHRyaWdnZXJlZCBvbiBhbiBleHRlcm5hbCBkaXYsIGRvIHRoZSBpbml0aWFsIHRvdWNoIG5vdy5cbiAgICBpZiAodGhpcy5kcmFnLnBvaW50ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vblRvdWNoKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBub3RlOiBkcmFnLnBvaW50ZXIgaXMgc2V0IGluIG9uVG91Y2ggdG8gZ2V0IHRoZSBpbml0aWFsIHRvdWNoIGxvY2F0aW9uXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXROb2RlQXQodGhpcy5kcmFnLnBvaW50ZXIpO1xuXG4gICAgdGhpcy5kcmFnLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmRyYWcuc2VsZWN0aW9uID0gW107XG4gICAgdGhpcy5kcmFnLnRyYW5zbGF0aW9uID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24pOyAvLyBjb3B5IHRoZSBvYmplY3RcbiAgICB0aGlzLmRyYWcubm9kZUlkID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGV2ZW50LnNyY0V2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnNob3cgPSB0cnVlO1xuICAgICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuXG4gICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLnN0YXJ0ID0ge1xuICAgICAgICB4OiB0aGlzLmNhbnZhcy5fWGNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLngpLFxuICAgICAgICB5OiB0aGlzLmNhbnZhcy5fWWNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLnkpLFxuICAgICAgfTtcbiAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uZW5kID0ge1xuICAgICAgICB4OiB0aGlzLmNhbnZhcy5fWGNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLngpLFxuICAgICAgICB5OiB0aGlzLmNhbnZhcy5fWWNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLnkpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMuZHJhZ05vZGVzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmRyYWcubm9kZUlkID0gbm9kZS5pZDtcbiAgICAgIC8vIHNlbGVjdCB0aGUgY2xpY2tlZCBub2RlIGlmIG5vdCB5ZXQgc2VsZWN0ZWRcbiAgICAgIGlmIChub2RlLmlzU2VsZWN0ZWQoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNldFNlbGVjdGlvbih7IG5vZGVzOiBbbm9kZS5pZF0gfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFmdGVyIHNlbGVjdCB0byBjb250YWluIHRoZSBub2RlXG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICBcImRyYWdTdGFydFwiLFxuICAgICAgICBldmVudCxcbiAgICAgICAgdGhpcy5kcmFnLnBvaW50ZXJcbiAgICAgICk7XG5cbiAgICAgIC8vIGNyZWF0ZSBhbiBhcnJheSB3aXRoIHRoZSBzZWxlY3RlZCBub2RlcyBhbmQgdGhlaXIgb3JpZ2luYWwgbG9jYXRpb24gYW5kIHN0YXR1c1xuICAgICAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZE5vZGVzKCkpIHtcbiAgICAgICAgY29uc3QgcyA9IHtcbiAgICAgICAgICBpZDogbm9kZS5pZCxcbiAgICAgICAgICBub2RlOiBub2RlLFxuXG4gICAgICAgICAgLy8gc3RvcmUgb3JpZ2luYWwgeCwgeSwgeEZpeGVkIGFuZCB5Rml4ZWQsIG1ha2UgdGhlIG5vZGUgdGVtcG9yYXJpbHkgRml4ZWRcbiAgICAgICAgICB4OiBub2RlLngsXG4gICAgICAgICAgeTogbm9kZS55LFxuICAgICAgICAgIHhGaXhlZDogbm9kZS5vcHRpb25zLmZpeGVkLngsXG4gICAgICAgICAgeUZpeGVkOiBub2RlLm9wdGlvbnMuZml4ZWQueSxcbiAgICAgICAgfTtcblxuICAgICAgICBub2RlLm9wdGlvbnMuZml4ZWQueCA9IHRydWU7XG4gICAgICAgIG5vZGUub3B0aW9ucy5maXhlZC55ID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmRyYWcuc2VsZWN0aW9uLnB1c2gocyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZhbGxiYWNrIGlmIG5vIG5vZGUgaXMgc2VsZWN0ZWQgYW5kIHRodXMgdGhlIHZpZXcgaXMgZHJhZ2dlZC5cbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgIFwiZHJhZ1N0YXJ0XCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aGlzLmRyYWcucG9pbnRlcixcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBoYW5kbGUgZHJhZyBldmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25EcmFnKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZHJhZy5waW5jaGVkID09PSB0cnVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHRoZSBmb2N1cyBvbiBub2RlIGlmIGl0IGlzIGZvY3Vzc2VkIG9uIGJ5IHRoZSBmb2N1c09uTm9kZVxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJ1bmxvY2tOb2RlXCIpO1xuXG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5kcmFnLnNlbGVjdGlvbjtcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5sZW5ndGggJiYgdGhpcy5vcHRpb25zLmRyYWdOb2RlcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcImRyYWdnaW5nXCIsIGV2ZW50LCBwb2ludGVyKTtcblxuICAgICAgLy8gY2FsY3VsYXRlIGRlbHRhJ3MgYW5kIG5ldyBsb2NhdGlvblxuICAgICAgY29uc3QgZGVsdGFYID0gcG9pbnRlci54IC0gdGhpcy5kcmFnLnBvaW50ZXIueDtcbiAgICAgIGNvbnN0IGRlbHRhWSA9IHBvaW50ZXIueSAtIHRoaXMuZHJhZy5wb2ludGVyLnk7XG5cbiAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbiBvZiBhbGwgc2VsZWN0ZWQgbm9kZXNcbiAgICAgIHNlbGVjdGlvbi5mb3JFYWNoKChzZWxlY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHNlbGVjdGlvbi5ub2RlO1xuICAgICAgICAvLyBvbmx5IG1vdmUgdGhlIG5vZGUgaWYgaXQgd2FzIG5vdCBmaXhlZCBpbml0aWFsbHlcbiAgICAgICAgaWYgKHNlbGVjdGlvbi54Rml4ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgbm9kZS54ID0gdGhpcy5jYW52YXMuX1hjb252ZXJ0RE9NdG9DYW52YXMoXG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5fWGNvbnZlcnRDYW52YXNUb0RPTShzZWxlY3Rpb24ueCkgKyBkZWx0YVhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9ubHkgbW92ZSB0aGUgbm9kZSBpZiBpdCB3YXMgbm90IGZpeGVkIGluaXRpYWxseVxuICAgICAgICBpZiAoc2VsZWN0aW9uLnlGaXhlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBub2RlLnkgPSB0aGlzLmNhbnZhcy5fWWNvbnZlcnRET010b0NhbnZhcyhcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLl9ZY29udmVydENhbnZhc1RvRE9NKHNlbGVjdGlvbi55KSArIGRlbHRhWVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBzdGFydCB0aGUgc2ltdWxhdGlvbiBvZiB0aGUgcGh5c2ljc1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U2ltdWxhdGlvblwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY3JlYXRlIHNlbGVjdGlvbiBib3hcbiAgICAgIGlmIChldmVudC5zcmNFdmVudC5zaGlmdEtleSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICAgIFwiZHJhZ2dpbmdcIixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBwb2ludGVyLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaWYgdGhlIGRyYWcgd2FzIG5vdCBzdGFydGVkIHByb3Blcmx5IGJlY2F1c2UgdGhlIGNsaWNrIHN0YXJ0ZWQgb3V0c2lkZSB0aGUgbmV0d29yayBkaXYsIHN0YXJ0IGl0IG5vdy5cbiAgICAgICAgaWYgKHRoaXMuZHJhZy5wb2ludGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9uRHJhZ1N0YXJ0KGV2ZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLmVuZCA9IHtcbiAgICAgICAgICB4OiB0aGlzLmNhbnZhcy5fWGNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLngpLFxuICAgICAgICAgIHk6IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueSksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgIH1cblxuICAgICAgLy8gbW92ZSB0aGUgbmV0d29ya1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kcmFnVmlldyA9PT0gdHJ1ZSAmJiAhZXZlbnQuc3JjRXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgICBcImRyYWdnaW5nXCIsXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgcG9pbnRlcixcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGlmIHRoZSBkcmFnIHdhcyBub3Qgc3RhcnRlZCBwcm9wZXJseSBiZWNhdXNlIHRoZSBjbGljayBzdGFydGVkIG91dHNpZGUgdGhlIG5ldHdvcmsgZGl2LCBzdGFydCBpdCBub3cuXG4gICAgICAgIGlmICh0aGlzLmRyYWcucG9pbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vbkRyYWdTdGFydChldmVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlmZlggPSBwb2ludGVyLnggLSB0aGlzLmRyYWcucG9pbnRlci54O1xuICAgICAgICBjb25zdCBkaWZmWSA9IHBvaW50ZXIueSAtIHRoaXMuZHJhZy5wb2ludGVyLnk7XG5cbiAgICAgICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7XG4gICAgICAgICAgeDogdGhpcy5kcmFnLnRyYW5zbGF0aW9uLnggKyBkaWZmWCxcbiAgICAgICAgICB5OiB0aGlzLmRyYWcudHJhbnNsYXRpb24ueSArIGRpZmZZLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSBkcmFnIHN0YXJ0IGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvbkRyYWdFbmQoZXZlbnQpIHtcbiAgICB0aGlzLmRyYWcuZHJhZ2dpbmcgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnNob3cpIHtcbiAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3guc2hvdyA9IGZhbHNlO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uQm94UG9zaXRpb24gPSB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uQm94UG9zaXRpb25NaW5NYXggPSB7XG4gICAgICAgIG1pblg6IE1hdGgubWluKFxuICAgICAgICAgIHNlbGVjdGlvbkJveFBvc2l0aW9uLnN0YXJ0LngsXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uZW5kLnhcbiAgICAgICAgKSxcbiAgICAgICAgbWluWTogTWF0aC5taW4oXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uc3RhcnQueSxcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5lbmQueVxuICAgICAgICApLFxuICAgICAgICBtYXhYOiBNYXRoLm1heChcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5zdGFydC54LFxuICAgICAgICAgIHNlbGVjdGlvbkJveFBvc2l0aW9uLmVuZC54XG4gICAgICAgICksXG4gICAgICAgIG1heFk6IE1hdGgubWF4KFxuICAgICAgICAgIHNlbGVjdGlvbkJveFBvc2l0aW9uLnN0YXJ0LnksXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uZW5kLnlcbiAgICAgICAgKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRvQmVTZWxlY3RlZE5vZGVzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmZpbHRlcigobm9kZUlkKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBub2RlLnggPj0gc2VsZWN0aW9uQm94UG9zaXRpb25NaW5NYXgubWluWCAmJlxuICAgICAgICAgIG5vZGUueCA8PSBzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heC5tYXhYICYmXG4gICAgICAgICAgbm9kZS55ID49IHNlbGVjdGlvbkJveFBvc2l0aW9uTWluTWF4Lm1pblkgJiZcbiAgICAgICAgICBub2RlLnkgPD0gc2VsZWN0aW9uQm94UG9zaXRpb25NaW5NYXgubWF4WVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHRvQmVTZWxlY3RlZE5vZGVzLmZvckVhY2goKG5vZGVJZCkgPT5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNlbGVjdE9iamVjdCh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5jb21taXRBbmRFbWl0KHBvaW50ZXIsIGV2ZW50KTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgIFwiZHJhZ0VuZFwiLFxuICAgICAgICBldmVudCxcbiAgICAgICAgdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlciksXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5kcmFnLnNlbGVjdGlvbjtcbiAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBzZWxlY3Rpb24uZm9yRWFjaChmdW5jdGlvbiAocykge1xuICAgICAgICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgeEZpeGVkIGFuZCB5Rml4ZWRcbiAgICAgICAgICBzLm5vZGUub3B0aW9ucy5maXhlZC54ID0gcy54Rml4ZWQ7XG4gICAgICAgICAgcy5ub2RlLm9wdGlvbnMuZml4ZWQueSA9IHMueUZpeGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgICBcImRyYWdFbmRcIixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwic3RhcnRTaW11bGF0aW9uXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgICBcImRyYWdFbmRcIixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBwaW5jaCBldmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uUGluY2goZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG5cbiAgICB0aGlzLmRyYWcucGluY2hlZCA9IHRydWU7XG4gICAgaWYgKHRoaXMucGluY2hbXCJzY2FsZVwiXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBpbmNoLnNjYWxlID0gMTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBlbmFibGVkIG1vdmluZyB3aGlsZSBwaW5jaGluZz9cbiAgICBjb25zdCBzY2FsZSA9IHRoaXMucGluY2guc2NhbGUgKiBldmVudC5zY2FsZTtcbiAgICB0aGlzLnpvb20oc2NhbGUsIHBvaW50ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFpvb20gdGhlIG5ldHdvcmsgaW4gb3Igb3V0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZSBhIG51bWJlciBhcm91bmQgMSwgYW5kIGJldHdlZW4gMC4wMSBhbmQgMTBcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyICAgIFBvc2l0aW9uIG9uIHNjcmVlblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgem9vbShzY2FsZSwgcG9pbnRlcikge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuem9vbVZpZXcgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IHNjYWxlT2xkID0gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgICBpZiAoc2NhbGUgPCAwLjAwMDAxKSB7XG4gICAgICAgIHNjYWxlID0gMC4wMDAwMTtcbiAgICAgIH1cbiAgICAgIGlmIChzY2FsZSA+IDEwKSB7XG4gICAgICAgIHNjYWxlID0gMTA7XG4gICAgICB9XG5cbiAgICAgIGxldCBwcmVTY2FsZURyYWdQb2ludGVyID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHRoaXMuZHJhZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWcuZHJhZ2dpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICBwcmVTY2FsZURyYWdQb2ludGVyID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXModGhpcy5kcmFnLnBvaW50ZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyArIHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQgLyAyXG4gICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uO1xuXG4gICAgICBjb25zdCBzY2FsZUZyYWMgPSBzY2FsZSAvIHNjYWxlT2xkO1xuICAgICAgY29uc3QgdHggPSAoMSAtIHNjYWxlRnJhYykgKiBwb2ludGVyLnggKyB0cmFuc2xhdGlvbi54ICogc2NhbGVGcmFjO1xuICAgICAgY29uc3QgdHkgPSAoMSAtIHNjYWxlRnJhYykgKiBwb2ludGVyLnkgKyB0cmFuc2xhdGlvbi55ICogc2NhbGVGcmFjO1xuXG4gICAgICB0aGlzLmJvZHkudmlldy5zY2FsZSA9IHNjYWxlO1xuICAgICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7IHg6IHR4LCB5OiB0eSB9O1xuXG4gICAgICBpZiAocHJlU2NhbGVEcmFnUG9pbnRlciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgcG9zdFNjYWxlRHJhZ1BvaW50ZXIgPVxuICAgICAgICAgIHRoaXMuY2FudmFzLmNhbnZhc1RvRE9NKHByZVNjYWxlRHJhZ1BvaW50ZXIpO1xuICAgICAgICB0aGlzLmRyYWcucG9pbnRlci54ID0gcG9zdFNjYWxlRHJhZ1BvaW50ZXIueDtcbiAgICAgICAgdGhpcy5kcmFnLnBvaW50ZXIueSA9IHBvc3RTY2FsZURyYWdQb2ludGVyLnk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcblxuICAgICAgaWYgKHNjYWxlT2xkIDwgc2NhbGUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInpvb21cIiwge1xuICAgICAgICAgIGRpcmVjdGlvbjogXCIrXCIsXG4gICAgICAgICAgc2NhbGU6IHRoaXMuYm9keS52aWV3LnNjYWxlLFxuICAgICAgICAgIHBvaW50ZXI6IHBvaW50ZXIsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInpvb21cIiwge1xuICAgICAgICAgIGRpcmVjdGlvbjogXCItXCIsXG4gICAgICAgICAgc2NhbGU6IHRoaXMuYm9keS52aWV3LnNjYWxlLFxuICAgICAgICAgIHBvaW50ZXI6IHBvaW50ZXIsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBoYW5kbGVyIGZvciBtb3VzZSB3aGVlbCBldmVudCwgdXNlZCB0byB6b29tIHRoZSB0aW1lbGluZVxuICAgKiBTZWUgaHR0cDovL2Fkb21hcy5vcmcvamF2YXNjcmlwdC1tb3VzZS13aGVlbC9cbiAgICogICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9FaWdodE1lZGlhL2hhbW1lci5qcy9pc3N1ZXMvMjU2XG4gICAqXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvbk1vdXNlV2hlZWwoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnpvb21WaWV3ID09PSB0cnVlKSB7XG4gICAgICAvLyBJZiBkZWx0YSBpcyBub256ZXJvLCBoYW5kbGUgaXQuXG4gICAgICAvLyBCYXNpY2FsbHksIGRlbHRhIGlzIG5vdyBwb3NpdGl2ZSBpZiB3aGVlbCB3YXMgc2Nyb2xsZWQgdXAsXG4gICAgICAvLyBhbmQgbmVnYXRpdmUsIGlmIHdoZWVsIHdhcyBzY3JvbGxlZCBkb3duLlxuICAgICAgaWYgKGV2ZW50LmRlbHRhWSAhPT0gMCkge1xuICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG5ldyBzY2FsZVxuICAgICAgICBsZXQgc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgICAgc2NhbGUgKj1cbiAgICAgICAgICAxICsgKGV2ZW50LmRlbHRhWSA8IDAgPyAxIDogLTEpICogKHRoaXMub3B0aW9ucy56b29tU3BlZWQgKiAwLjEpO1xuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgcG9pbnRlciBsb2NhdGlvblxuICAgICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9KTtcblxuICAgICAgICAvLyBhcHBseSB0aGUgbmV3IHNjYWxlXG4gICAgICAgIHRoaXMuem9vbShzY2FsZSwgcG9pbnRlcik7XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBhY3Rpb25zIGNhdXNlZCBieSBtb3VzZSB3aGVlbC5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdXNlIG1vdmUgaGFuZGxlciBmb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgdGl0bGUgbW92ZXMgb3ZlciBhIG5vZGUgd2l0aCBhIHRpdGxlLlxuICAgKlxuICAgKiBAcGFyYW0gIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uTW91c2VNb3ZlKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcih7IHg6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFkgfSk7XG4gICAgbGV0IHBvcHVwVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgLy8gY2hlY2sgaWYgdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgbm9kZSBpcyBzdGlsbCBzZWxlY3RlZFxuICAgIGlmICh0aGlzLnBvcHVwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLnBvcHVwLmhpZGRlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tIaWRlUG9wdXAocG9pbnRlcik7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZSBwb3B1cCB3YXMgbm90IGhpZGRlbiBhYm92ZVxuICAgICAgaWYgKHRoaXMucG9wdXAuaGlkZGVuID09PSBmYWxzZSkge1xuICAgICAgICBwb3B1cFZpc2libGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnBvcHVwLnNldFBvc2l0aW9uKHBvaW50ZXIueCArIDMsIHBvaW50ZXIueSAtIDUpO1xuICAgICAgICB0aGlzLnBvcHVwLnNob3coKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBiaW5kIHRoZSBrZXlib2FyZCB0byB0aGUgZGl2LCB3ZSBoYXZlIHRvIGhpZ2hsaWdodCBpdCB0byB1c2UgaXQuIFRoaXMgaGlnaGxpZ2h0cyBpdCBvbiBtb3VzZSBvdmVyLlxuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9ucy5rZXlib2FyZC5hdXRvRm9jdXMgJiZcbiAgICAgIHRoaXMub3B0aW9ucy5rZXlib2FyZC5iaW5kVG9XaW5kb3cgPT09IGZhbHNlICYmXG4gICAgICB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuZW5hYmxlZCA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgdGhpcy5jYW52YXMuZnJhbWUuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvLyBzdGFydCBhIHRpbWVvdXQgdGhhdCB3aWxsIGNoZWNrIGlmIHRoZSBtb3VzZSBpcyBwb3NpdGlvbmVkIGFib3ZlIGFuIGVsZW1lbnRcbiAgICBpZiAocG9wdXBWaXNpYmxlID09PSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMucG9wdXBUaW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5wb3B1cFRpbWVyKTsgLy8gc3RvcCBhbnkgcnVubmluZyBjYWxjdWxhdGlvblRpbWVyXG4gICAgICAgIHRoaXMucG9wdXBUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5kcmFnLmRyYWdnaW5nKSB7XG4gICAgICAgIHRoaXMucG9wdXBUaW1lciA9IHNldFRpbWVvdXQoXG4gICAgICAgICAgKCkgPT4gdGhpcy5fY2hlY2tTaG93UG9wdXAocG9pbnRlciksXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnRvb2x0aXBEZWxheVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZGluZyBob3ZlciBoaWdobGlnaHRzXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ob3ZlciA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmhvdmVyT2JqZWN0KGV2ZW50LCBwb2ludGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlcmUgaXMgYW4gZWxlbWVudCBvbiB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhlIG5ldHdvcmtcbiAgICogKGEgbm9kZSBvciBlZGdlKS4gSWYgc28sIGFuZCBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgdGl0bGUsXG4gICAqIHNob3cgYSBwb3B1cCB3aW5kb3cgd2l0aCBpdHMgdGl0bGUuXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6bnVtYmVyLCB5Om51bWJlcn19IHBvaW50ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja1Nob3dQb3B1cChwb2ludGVyKSB7XG4gICAgY29uc3QgeCA9IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCk7XG4gICAgY29uc3QgeSA9IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueSk7XG4gICAgY29uc3QgcG9pbnRlck9iaiA9IHtcbiAgICAgIGxlZnQ6IHgsXG4gICAgICB0b3A6IHksXG4gICAgICByaWdodDogeCxcbiAgICAgIGJvdHRvbTogeSxcbiAgICB9O1xuXG4gICAgY29uc3QgcHJldmlvdXNQb3B1cE9iaklkID1cbiAgICAgIHRoaXMucG9wdXBPYmogPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRoaXMucG9wdXBPYmouaWQ7XG4gICAgbGV0IG5vZGVVbmRlckN1cnNvciA9IGZhbHNlO1xuICAgIGxldCBwb3B1cFR5cGUgPSBcIm5vZGVcIjtcblxuICAgIC8vIGNoZWNrIGlmIGEgbm9kZSBpcyB1bmRlciB0aGUgY3Vyc29yLlxuICAgIGlmICh0aGlzLnBvcHVwT2JqID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHNlYXJjaCB0aGUgbm9kZXMgZm9yIG92ZXJsYXAsIHNlbGVjdCB0aGUgdG9wIG9uZSBpbiBjYXNlIG9mIG11bHRpcGxlIG5vZGVzXG4gICAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcbiAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBjb25zdCBvdmVybGFwcGluZ05vZGVzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tub2RlSW5kaWNlc1tpXV07XG4gICAgICAgIGlmIChub2RlLmlzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopID09PSB0cnVlKSB7XG4gICAgICAgICAgbm9kZVVuZGVyQ3Vyc29yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAobm9kZS5nZXRUaXRsZSgpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG92ZXJsYXBwaW5nTm9kZXMucHVzaChub2RlSW5kaWNlc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvdmVybGFwcGluZ05vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG92ZXJsYXBwaW5nIG5vZGVzLCBzZWxlY3QgdGhlIGxhc3Qgb25lLCB0aGlzIGlzIHRoZSBvbmUgd2hpY2ggaXMgZHJhd24gb24gdG9wIG9mIHRoZSBvdGhlcnNcbiAgICAgICAgdGhpcy5wb3B1cE9iaiA9IG5vZGVzW292ZXJsYXBwaW5nTm9kZXNbb3ZlcmxhcHBpbmdOb2Rlcy5sZW5ndGggLSAxXV07XG4gICAgICAgIC8vIGlmIHlvdSBob3ZlciBvdmVyIGEgbm9kZSwgdGhlIHRpdGxlIG9mIHRoZSBlZGdlIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBzaG93bi5cbiAgICAgICAgbm9kZVVuZGVyQ3Vyc29yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5wb3B1cE9iaiA9PT0gdW5kZWZpbmVkICYmIG5vZGVVbmRlckN1cnNvciA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIHNlYXJjaCB0aGUgZWRnZXMgZm9yIG92ZXJsYXBcbiAgICAgIGNvbnN0IGVkZ2VJbmRpY2VzID0gdGhpcy5ib2R5LmVkZ2VJbmRpY2VzO1xuICAgICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgICBsZXQgZWRnZTtcbiAgICAgIGNvbnN0IG92ZXJsYXBwaW5nRWRnZXMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWRnZSA9IGVkZ2VzW2VkZ2VJbmRpY2VzW2ldXTtcbiAgICAgICAgaWYgKGVkZ2UuaXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaikgPT09IHRydWUpIHtcbiAgICAgICAgICBpZiAoZWRnZS5jb25uZWN0ZWQgPT09IHRydWUgJiYgZWRnZS5nZXRUaXRsZSgpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG92ZXJsYXBwaW5nRWRnZXMucHVzaChlZGdlSW5kaWNlc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvdmVybGFwcGluZ0VkZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5wb3B1cE9iaiA9IGVkZ2VzW292ZXJsYXBwaW5nRWRnZXNbb3ZlcmxhcHBpbmdFZGdlcy5sZW5ndGggLSAxXV07XG4gICAgICAgIHBvcHVwVHlwZSA9IFwiZWRnZVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBvcHVwT2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHNob3cgcG9wdXAgbWVzc2FnZSB3aW5kb3dcbiAgICAgIGlmICh0aGlzLnBvcHVwT2JqLmlkICE9PSBwcmV2aW91c1BvcHVwT2JqSWQpIHtcbiAgICAgICAgaWYgKHRoaXMucG9wdXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMucG9wdXAgPSBuZXcgUG9wdXAodGhpcy5jYW52YXMuZnJhbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wb3B1cC5wb3B1cFRhcmdldFR5cGUgPSBwb3B1cFR5cGU7XG4gICAgICAgIHRoaXMucG9wdXAucG9wdXBUYXJnZXRJZCA9IHRoaXMucG9wdXBPYmouaWQ7XG5cbiAgICAgICAgLy8gYWRqdXN0IGEgc21hbGwgb2Zmc2V0IHN1Y2ggdGhhdCB0aGUgbW91c2UgY3Vyc29yIGlzIGxvY2F0ZWQgaW4gdGhlXG4gICAgICAgIC8vIGJvdHRvbSBsZWZ0IGxvY2F0aW9uIG9mIHRoZSBwb3B1cCwgYW5kIHlvdSBjYW4gZWFzaWx5IG1vdmUgb3ZlciB0aGVcbiAgICAgICAgLy8gcG9wdXAgYXJlYVxuICAgICAgICB0aGlzLnBvcHVwLnNldFBvc2l0aW9uKHBvaW50ZXIueCArIDMsIHBvaW50ZXIueSAtIDUpO1xuICAgICAgICB0aGlzLnBvcHVwLnNldFRleHQodGhpcy5wb3B1cE9iai5nZXRUaXRsZSgpKTtcbiAgICAgICAgdGhpcy5wb3B1cC5zaG93KCk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzaG93UG9wdXBcIiwgdGhpcy5wb3B1cE9iai5pZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnBvcHVwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5wb3B1cC5oaWRlKCk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJoaWRlUG9wdXBcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBwb3B1cCBtdXN0IGJlIGhpZGRlbiwgd2hpY2ggaXMgdGhlIGNhc2Ugd2hlbiB0aGUgbW91c2UgaXMgbm9cbiAgICogbG9uZ2VyIGhvdmVyaW5nIG9uIHRoZSBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHt7eDpudW1iZXIsIHk6bnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrSGlkZVBvcHVwKHBvaW50ZXIpIHtcbiAgICBjb25zdCBwb2ludGVyT2JqID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKTtcblxuICAgIGxldCBzdGlsbE9uT2JqID0gZmFsc2U7XG4gICAgaWYgKHRoaXMucG9wdXAucG9wdXBUYXJnZXRUeXBlID09PSBcIm5vZGVcIikge1xuICAgICAgaWYgKHRoaXMuYm9keS5ub2Rlc1t0aGlzLnBvcHVwLnBvcHVwVGFyZ2V0SWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3RpbGxPbk9iaiA9XG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW3RoaXMucG9wdXAucG9wdXBUYXJnZXRJZF0uaXNPdmVybGFwcGluZ1dpdGgoXG4gICAgICAgICAgICBwb2ludGVyT2JqXG4gICAgICAgICAgKTtcblxuICAgICAgICAvLyBpZiB0aGUgbW91c2UgaXMgc3RpbGwgb25lIHRoZSBub2RlLCB3ZSBoYXZlIHRvIGNoZWNrIGlmIGl0IGlzIG5vdCBhbHNvIG9uIG9uZSB0aGF0IGlzIGRyYXduIG9uIHRvcCBvZiBpdC5cbiAgICAgICAgLy8gd2UgaW5pdGlhbGx5IG9ubHkgY2hlY2sgc3RpbGxPbk9iaiBiZWNhdXNlIHRoaXMgaXMgbXVjaCBmYXN0ZXIuXG4gICAgICAgIGlmIChzdGlsbE9uT2JqID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3Qgb3Zlck5vZGUgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0Tm9kZUF0KHBvaW50ZXIpO1xuICAgICAgICAgIHN0aWxsT25PYmogPVxuICAgICAgICAgICAgb3Zlck5vZGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgIDogb3Zlck5vZGUuaWQgPT09IHRoaXMucG9wdXAucG9wdXBUYXJnZXRJZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdChwb2ludGVyKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkuZWRnZXNbdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RpbGxPbk9iaiA9XG4gICAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkXS5pc092ZXJsYXBwaW5nV2l0aChcbiAgICAgICAgICAgICAgcG9pbnRlck9ialxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGlsbE9uT2JqID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5wb3B1cE9iaiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucG9wdXAuaGlkZSgpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImhpZGVQb3B1cFwiKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJhY3Rpb25IYW5kbGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uU3Ryb25nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIGBTZXRgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC1vYmplY3RzXG5jb2xsZWN0aW9uKCdTZXQnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIGNvbGxlY3Rpb25TdHJvbmcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5TZXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBnZXRXZWFrRGF0YSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLmdldFdlYWtEYXRhO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIEFycmF5SXRlcmF0aW9uTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcbnZhciBmaW5kID0gQXJyYXlJdGVyYXRpb25Nb2R1bGUuZmluZDtcbnZhciBmaW5kSW5kZXggPSBBcnJheUl0ZXJhdGlvbk1vZHVsZS5maW5kSW5kZXg7XG52YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmZyb3plbiB8fCAoc3RhdGUuZnJvemVuID0gbmV3IFVuY2F1Z2h0RnJvemVuU3RvcmUoKSk7XG59O1xuXG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5lbnRyaWVzID0gW107XG59O1xuXG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGZpbmQoc3RvcmUuZW50cmllcywgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblxuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuZW50cmllcy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gZmluZEluZGV4KHRoaXMuZW50cmllcywgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSBzcGxpY2UodGhpcy5lbnRyaWVzLCBpbmRleCwgMSk7XG4gICAgcmV0dXJuICEhfmluZGV4O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgUHJvdG90eXBlKTtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBpZDogaWQrKyxcbiAgICAgICAgZnJvemVuOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICB2YXIgZGVmaW5lID0gZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWtEYXRhKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpLnNldChrZXksIHZhbHVlKTtcbiAgICAgIGVsc2UgZGF0YVtzdGF0ZS5pZF0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IFdlYWtNYXAsIFdlYWtTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWtzZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHN0YXRlKVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgaGFzT3duKGRhdGEsIHN0YXRlLmlkKSAmJiBkZWxldGUgZGF0YVtzdGF0ZS5pZF07XG4gICAgICB9LFxuICAgICAgLy8gYHsgV2Vha01hcCwgV2Vha1NldCB9LnByb3RvdHlwZS5oYXMoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuaGFzXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHN0YXRlKS5oYXMoa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgaGFzT3duKGRhdGEsIHN0YXRlLmlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGtleSkpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWtEYXRhKGtleSk7XG4gICAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHN0YXRlKS5nZXQoa2V5KTtcbiAgICAgICAgICByZXR1cm4gZGF0YSA/IGRhdGFbc3RhdGUuaWRdIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYFdlYWtNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWttYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWtzZXQucHJvdG90eXBlLmFkZFxuICAgICAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvbldlYWsgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5lbmZvcmNlO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciBpc0V4dGVuc2libGUgPSAkT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNmcm96ZW4gLS0gc2FmZVxudmFyIGlzRnJvemVuID0gJE9iamVjdC5pc0Zyb3plbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNzZWFsZWQgLS0gc2FmZVxudmFyIGlzU2VhbGVkID0gJE9iamVjdC5pc1NlYWxlZDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZnJlZXplIC0tIHNhZmVcbnZhciBmcmVlemUgPSAkT2JqZWN0LmZyZWV6ZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2VhbCAtLSBzYWZlXG52YXIgc2VhbCA9ICRPYmplY3Quc2VhbDtcblxudmFyIEZST1pFTiA9IHt9O1xudmFyIFNFQUxFRCA9IHt9O1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBJbnRlcm5hbFdlYWtNYXA7XG5cbnZhciB3cmFwcGVyID0gZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtNYXAoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gIH07XG59O1xuXG4vLyBgV2Vha01hcGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC1jb25zdHJ1Y3RvclxudmFyICRXZWFrTWFwID0gY29sbGVjdGlvbignV2Vha01hcCcsIHdyYXBwZXIsIGNvbGxlY3Rpb25XZWFrKTtcbnZhciBXZWFrTWFwUHJvdG90eXBlID0gJFdlYWtNYXAucHJvdG90eXBlO1xudmFyIG5hdGl2ZVNldCA9IHVuY3VycnlUaGlzKFdlYWtNYXBQcm90b3R5cGUuc2V0KTtcblxuLy8gQ2hha3JhIEVkZ2UgYnVnOiBhZGRpbmcgZnJvemVuIGFycmF5cyB0byBXZWFrTWFwIHVuZnJlZXplIHRoZW1cbnZhciBoYXNNU0VkZ2VGcmVlemluZ0J1ZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIEZSRUVaSU5HICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZnJvemVuQXJyYXkgPSBmcmVlemUoW10pO1xuICAgIG5hdGl2ZVNldChuZXcgJFdlYWtNYXAoKSwgZnJvemVuQXJyYXksIDEpO1xuICAgIHJldHVybiAhaXNGcm96ZW4oZnJvemVuQXJyYXkpO1xuICB9KTtcbn07XG5cbi8vIElFMTEgV2Vha01hcCBmcm96ZW4ga2V5cyBmaXhcbi8vIFdlIGNhbid0IHVzZSBmZWF0dXJlIGRldGVjdGlvbiBiZWNhdXNlIGl0IGNyYXNoIHNvbWUgb2xkIElFIGJ1aWxkc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ4NVxuaWYgKE5BVElWRV9XRUFLX01BUCkgaWYgKElTX0lFMTEpIHtcbiAgSW50ZXJuYWxXZWFrTWFwID0gY29sbGVjdGlvbldlYWsuZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgJ1dlYWtNYXAnLCB0cnVlKTtcbiAgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZS5lbmFibGUoKTtcbiAgdmFyIG5hdGl2ZURlbGV0ZSA9IHVuY3VycnlUaGlzKFdlYWtNYXBQcm90b3R5cGVbJ2RlbGV0ZSddKTtcbiAgdmFyIG5hdGl2ZUhhcyA9IHVuY3VycnlUaGlzKFdlYWtNYXBQcm90b3R5cGUuaGFzKTtcbiAgdmFyIG5hdGl2ZUdldCA9IHVuY3VycnlUaGlzKFdlYWtNYXBQcm90b3R5cGUuZ2V0KTtcbiAgZGVmaW5lQnVpbHRJbnMoV2Vha01hcFByb3RvdHlwZSwge1xuICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoaXNPYmplY3Qoa2V5KSAmJiAhaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghc3RhdGUuZnJvemVuKSBzdGF0ZS5mcm96ZW4gPSBuZXcgSW50ZXJuYWxXZWFrTWFwKCk7XG4gICAgICAgIHJldHVybiBuYXRpdmVEZWxldGUodGhpcywga2V5KSB8fCBzdGF0ZS5mcm96ZW5bJ2RlbGV0ZSddKGtleSk7XG4gICAgICB9IHJldHVybiBuYXRpdmVEZWxldGUodGhpcywga2V5KTtcbiAgICB9LFxuICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlSGFzKHRoaXMsIGtleSkgfHwgc3RhdGUuZnJvemVuLmhhcyhrZXkpO1xuICAgICAgfSByZXR1cm4gbmF0aXZlSGFzKHRoaXMsIGtleSk7XG4gICAgfSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgIGlmIChpc09iamVjdChrZXkpICYmICFpc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5mcm96ZW4pIHN0YXRlLmZyb3plbiA9IG5ldyBJbnRlcm5hbFdlYWtNYXAoKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUhhcyh0aGlzLCBrZXkpID8gbmF0aXZlR2V0KHRoaXMsIGtleSkgOiBzdGF0ZS5mcm96ZW4uZ2V0KGtleSk7XG4gICAgICB9IHJldHVybiBuYXRpdmVHZXQodGhpcywga2V5KTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgIGlmIChpc09iamVjdChrZXkpICYmICFpc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5mcm96ZW4pIHN0YXRlLmZyb3plbiA9IG5ldyBJbnRlcm5hbFdlYWtNYXAoKTtcbiAgICAgICAgbmF0aXZlSGFzKHRoaXMsIGtleSkgPyBuYXRpdmVTZXQodGhpcywga2V5LCB2YWx1ZSkgOiBzdGF0ZS5mcm96ZW4uc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIG5hdGl2ZVNldCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSk7XG4vLyBDaGFrcmEgRWRnZSBmcm96ZW4ga2V5cyBmaXhcbn0gZWxzZSBpZiAoaGFzTVNFZGdlRnJlZXppbmdCdWcoKSkge1xuICBkZWZpbmVCdWlsdElucyhXZWFrTWFwUHJvdG90eXBlLCB7XG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGFycmF5SW50ZWdyaXR5TGV2ZWw7XG4gICAgICBpZiAoaXNBcnJheShrZXkpKSB7XG4gICAgICAgIGlmIChpc0Zyb3plbihrZXkpKSBhcnJheUludGVncml0eUxldmVsID0gRlJPWkVOO1xuICAgICAgICBlbHNlIGlmIChpc1NlYWxlZChrZXkpKSBhcnJheUludGVncml0eUxldmVsID0gU0VBTEVEO1xuICAgICAgfVxuICAgICAgbmF0aXZlU2V0KHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYgKGFycmF5SW50ZWdyaXR5TGV2ZWwgPT09IEZST1pFTikgZnJlZXplKGtleSk7XG4gICAgICBpZiAoYXJyYXlJbnRlZ3JpdHlMZXZlbCA9PT0gU0VBTEVEKSBzZWFsKGtleSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy53ZWFrLW1hcCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguV2Vha01hcDtcbiIsICJleHBvcnQgaW50ZXJmYWNlIFNlbGVjdGFibGUge1xuICBzZWxlY3QoKTogdm9pZDtcbiAgdW5zZWxlY3QoKTogdm9pZDtcbn1cblxuaW50ZXJmYWNlIFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8VD4ge1xuICBhZGRlZDogVFtdO1xuICBkZWxldGVkOiBUW107XG4gIHByZXZpb3VzOiBUW107XG4gIGN1cnJlbnQ6IFRbXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcHJldlxuICogQHBhcmFtIG5leHRcbiAqL1xuZnVuY3Rpb24gZGlmZlNldHM8VD4ocHJldjogUmVhZG9ubHlTZXQ8VD4sIG5leHQ6IFJlYWRvbmx5U2V0PFQ+KTogU2V0PFQ+IHtcbiAgY29uc3QgZGlmZiA9IG5ldyBTZXQ8VD4oKTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIG5leHQpIHtcbiAgICBpZiAoIXByZXYuaGFzKGl0ZW0pKSB7XG4gICAgICBkaWZmLmFkZChpdGVtKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRpZmY7XG59XG5cbmNsYXNzIFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvcjxUIGV4dGVuZHMgU2VsZWN0YWJsZT4ge1xuICAjcHJldmlvdXNTZWxlY3Rpb246IFJlYWRvbmx5U2V0PFQ+ID0gbmV3IFNldCgpO1xuICAjc2VsZWN0aW9uOiBTZXQ8VD4gPSBuZXcgU2V0KCk7XG5cbiAgcHVibGljIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvbi5zaXplO1xuICB9XG5cbiAgcHVibGljIGFkZCguLi5pdGVtczogcmVhZG9ubHkgVFtdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICB0aGlzLiNzZWxlY3Rpb24uYWRkKGl0ZW0pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZGVsZXRlKC4uLml0ZW1zOiByZWFkb25seSBUW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIHRoaXMuI3NlbGVjdGlvbi5kZWxldGUoaXRlbSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLiNzZWxlY3Rpb24uY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3Rpb24oKTogVFtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuI3NlbGVjdGlvbl07XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2hhbmdlcygpOiBTaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3JDaGFuZ2VzPFQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYWRkZWQ6IFsuLi5kaWZmU2V0cyh0aGlzLiNwcmV2aW91c1NlbGVjdGlvbiwgdGhpcy4jc2VsZWN0aW9uKV0sXG4gICAgICBkZWxldGVkOiBbLi4uZGlmZlNldHModGhpcy4jc2VsZWN0aW9uLCB0aGlzLiNwcmV2aW91c1NlbGVjdGlvbildLFxuICAgICAgcHJldmlvdXM6IFsuLi5uZXcgU2V0PFQ+KHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uKV0sXG4gICAgICBjdXJyZW50OiBbLi4ubmV3IFNldDxUPih0aGlzLiNzZWxlY3Rpb24pXSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGNvbW1pdCgpOiBTaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3JDaGFuZ2VzPFQ+IHtcbiAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5nZXRDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLiNwcmV2aW91c1NlbGVjdGlvbiA9IHRoaXMuI3NlbGVjdGlvbjtcbiAgICB0aGlzLiNzZWxlY3Rpb24gPSBuZXcgU2V0KHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uKTtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGFuZ2VzLmFkZGVkKSB7XG4gICAgICBpdGVtLnNlbGVjdCgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2hhbmdlcy5kZWxldGVkKSB7XG4gICAgICBpdGVtLnVuc2VsZWN0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYW5nZXM7XG4gIH1cbn1cblxuLy8gVE9ETzogVGhlc2Ugc2hvdWxkIGJlIHJlYWwgdHlwZXMgaW1wb3J0ZWQgZnJvbSBub2RlLnRzIGFuZCBlZGdlLnRzIHRoYXQgZG9uJ3Rcbi8vIGV4aXN0IHlldC5cbmludGVyZmFjZSBOb2RlIGV4dGVuZHMgU2VsZWN0YWJsZSB7XG4gICQ6IFwibm9kZVwiO1xufVxuaW50ZXJmYWNlIEVkZ2UgZXh0ZW5kcyBTZWxlY3RhYmxlIHtcbiAgJDogXCJlZGdlXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uQWNjdW11bGF0b3JDb21taXRTdW1tYXJ5IHtcbiAgbm9kZXM6IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8Tm9kZT47XG4gIGVkZ2VzOiBTaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3JDaGFuZ2VzPEVkZ2U+O1xufVxuXG5leHBvcnQgdHlwZSBTZWxlY3Rpb25BY2N1bXVsYXRvckNvbW1pdEhhbmRsZXI8XG4gIENvbW1pdEFyZ3MgZXh0ZW5kcyByZWFkb25seSBhbnlbXVxuPiA9IChzdW1tYXJ5OiBTZWxlY3Rpb25BY2N1bXVsYXRvckNvbW1pdFN1bW1hcnksIC4uLnJlc3Q6IENvbW1pdEFyZ3MpID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25BY2N1bXVsYXRvcjxDb21taXRBcmdzIGV4dGVuZHMgcmVhZG9ubHkgYW55W10+IHtcbiAgI25vZGVzID0gbmV3IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvcjxOb2RlPigpO1xuICAjZWRnZXMgPSBuZXcgU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yPEVkZ2U+KCk7XG5cbiAgcmVhZG9ubHkgI2NvbW1pdEhhbmRsZXI6IFNlbGVjdGlvbkFjY3VtdWxhdG9yQ29tbWl0SGFuZGxlcjxDb21taXRBcmdzPjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgY29tbWl0SGFuZGxlcjogU2VsZWN0aW9uQWNjdW11bGF0b3JDb21taXRIYW5kbGVyPENvbW1pdEFyZ3M+ID0gKCk6IHZvaWQgPT4ge31cbiAgKSB7XG4gICAgdGhpcy4jY29tbWl0SGFuZGxlciA9IGNvbW1pdEhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNpemVOb2RlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNub2Rlcy5zaXplO1xuICB9XG4gIHB1YmxpYyBnZXQgc2l6ZUVkZ2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI2VkZ2VzLnNpemU7XG4gIH1cblxuICBwdWJsaWMgZ2V0Tm9kZXMoKTogTm9kZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jbm9kZXMuZ2V0U2VsZWN0aW9uKCk7XG4gIH1cbiAgcHVibGljIGdldEVkZ2VzKCk6IEVkZ2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuI2VkZ2VzLmdldFNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIGFkZE5vZGVzKC4uLm5vZGVzOiByZWFkb25seSBOb2RlW10pOiB2b2lkIHtcbiAgICB0aGlzLiNub2Rlcy5hZGQoLi4ubm9kZXMpO1xuICB9XG4gIHB1YmxpYyBhZGRFZGdlcyguLi5lZGdlczogcmVhZG9ubHkgRWRnZVtdKTogdm9pZCB7XG4gICAgdGhpcy4jZWRnZXMuYWRkKC4uLmVkZ2VzKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVOb2Rlcyhub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgdGhpcy4jbm9kZXMuZGVsZXRlKG5vZGUpO1xuICB9XG4gIHB1YmxpYyBkZWxldGVFZGdlcyhlZGdlOiBFZGdlKTogdm9pZCB7XG4gICAgdGhpcy4jZWRnZXMuZGVsZXRlKGVkZ2UpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuI25vZGVzLmNsZWFyKCk7XG4gICAgdGhpcy4jZWRnZXMuY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjb21taXQoLi4ucmVzdDogQ29tbWl0QXJncyk6IFNlbGVjdGlvbkFjY3VtdWxhdG9yQ29tbWl0U3VtbWFyeSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IHtcbiAgICAgIG5vZGVzOiB0aGlzLiNub2Rlcy5jb21taXQoKSxcbiAgICAgIGVkZ2VzOiB0aGlzLiNlZGdlcy5jb21taXQoKSxcbiAgICB9O1xuICAgIHRoaXMuI2NvbW1pdEhhbmRsZXIoc3VtbWFyeSwgLi4ucmVzdCk7XG4gICAgcmV0dXJuIHN1bW1hcnk7XG4gIH1cbn1cbiIsICJpbXBvcnQgTm9kZSBmcm9tIFwiLi9jb21wb25lbnRzL05vZGVcIjtcbmltcG9ydCBFZGdlIGZyb20gXCIuL2NvbXBvbmVudHMvRWRnZVwiO1xuaW1wb3J0IHsgU2VsZWN0aW9uQWNjdW11bGF0b3IgfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcblxuaW1wb3J0IHsgc2VsZWN0aXZlRGVlcEV4dGVuZCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBUaGUgaGFuZGxlciBmb3Igc2VsZWN0aW9uc1xuICovXG5jbGFzcyBTZWxlY3Rpb25IYW5kbGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGNhbnZhcykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5jYW52YXMgPSBjYW52YXM7XG4gICAgLy8gVE9ETzogQ29uc2lkZXIgZmlyaW5nIGFuIGV2ZW50IG9uIGFueSBjaGFuZ2UgdG8gdGhlIHNlbGVjdGlvbiwgbm90XG4gICAgLy8gb25seSB0aG9zZSBjYXVzZWQgYnkgY2xpY2tzIGFuZCB0YXBzLiBJdCB3b3VsZCBiZSBlYXN5IHRvIGltcGxlbWVudFxuICAgIC8vIG5vdyBhbmQgKGF0IGxlYXN0IHRvIG1lKSBpdCBzZWVtcyBsaWtlIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlXG4gICAgLy8gcXVpdGUgdXNlZnVsLlxuICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yID0gbmV3IFNlbGVjdGlvbkFjY3VtdWxhdG9yKCk7XG4gICAgdGhpcy5ob3Zlck9iaiA9IHsgbm9kZXM6IHt9LCBlZGdlczoge30gfTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBtdWx0aXNlbGVjdDogZmFsc2UsXG4gICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgc2VsZWN0Q29ubmVjdGVkRWRnZXM6IHRydWUsXG4gICAgICBob3ZlckNvbm5lY3RlZEVkZ2VzOiB0cnVlLFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YUNoYW5nZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBbXG4gICAgICAgIFwibXVsdGlzZWxlY3RcIixcbiAgICAgICAgXCJob3ZlckNvbm5lY3RlZEVkZ2VzXCIsXG4gICAgICAgIFwic2VsZWN0YWJsZVwiLFxuICAgICAgICBcInNlbGVjdENvbm5lY3RlZEVkZ2VzXCIsXG4gICAgICBdO1xuICAgICAgc2VsZWN0aXZlRGVlcEV4dGVuZChmaWVsZHMsIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZXMgdGhlIHNlbGVjdGlvbiBwYXJ0IG9mIHRoZSB0YXA7XG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNlbGVjdE9uUG9pbnQocG9pbnRlcikge1xuICAgIGxldCBzZWxlY3RlZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZWN0YWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3Qgb2JqID0gdGhpcy5nZXROb2RlQXQocG9pbnRlcikgfHwgdGhpcy5nZXRFZGdlQXQocG9pbnRlcik7XG5cbiAgICAgIC8vIHVuc2VsZWN0IGFmdGVyIGdldHRpbmcgdGhlIG9iamVjdHMgaW4gb3JkZXIgdG8gcmVzdG9yZSB3aWR0aCBhbmQgaGVpZ2h0LlxuICAgICAgdGhpcy51bnNlbGVjdEFsbCgpO1xuXG4gICAgICBpZiAob2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdE9iamVjdChvYmopO1xuICAgICAgfVxuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2VsZWN0QWRkaXRpb25hbE9uUG9pbnQocG9pbnRlcikge1xuICAgIGxldCBzZWxlY3Rpb25DaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlY3RhYmxlID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBvYmogPSB0aGlzLmdldE5vZGVBdChwb2ludGVyKSB8fCB0aGlzLmdldEVkZ2VBdChwb2ludGVyKTtcblxuICAgICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgICAgICBpZiAob2JqLmlzU2VsZWN0ZWQoKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuZGVzZWxlY3RPYmplY3Qob2JqKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdE9iamVjdChvYmopO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0aW9uQ2hhbmdlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YW5kYXJkIGZpZWxkcyBmb3IgYW4gZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlciBPYmplY3Qgd2l0aCB0aGUgeCBhbmQgeSBzY3JlZW4gY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlXG4gICAqIEByZXR1cm5zIHt7fX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0QmFzZUV2ZW50KGV2ZW50LCBwb2ludGVyKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgcHJvcGVydGllc1tcInBvaW50ZXJcIl0gPSB7XG4gICAgICBET006IHsgeDogcG9pbnRlci54LCB5OiBwb2ludGVyLnkgfSxcbiAgICAgIGNhbnZhczogdGhpcy5jYW52YXMuRE9NdG9DYW52YXMocG9pbnRlciksXG4gICAgfTtcbiAgICBwcm9wZXJ0aWVzW1wiZXZlbnRcIl0gPSBldmVudDtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGFuIGV2ZW50IHdoaWNoIHRoZSB1c2VyIGNhbiBjYXRjaC5cbiAgICpcbiAgICogVGhpcyBhZGRzIHNvbWUgZXh0cmEgZGF0YSB0byB0aGUgZXZlbnQgd2l0aCByZXNwZWN0IHRvIGN1cnNvciBwb3NpdGlvbiBhbmRcbiAgICogc2VsZWN0ZWQgbm9kZXMgYW5kIGVkZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lIG9mIGV2ZW50IHRvIHNlbmRcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50XG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlciAgICAgICAgICAgIE9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICogQHBhcmFtIHtvYmplY3QgfCB1bmRlZmluZWR9IG9sZFNlbGVjdGlvbiAgICAgICAgICAgICBJZiBwcmVzZW50LCBzZWxlY3Rpb24gc3RhdGUgYmVmb3JlIGV2ZW50IG9jY3VyZWRcbiAgICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gW2VtcHR5U2VsZWN0aW9uPWZhbHNlXSAgSW5kaWNhdGUgaWYgc2VsZWN0aW9uIGRhdGEgc2hvdWxkIGJlIHBhc3NlZFxuICAgKi9cbiAgZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgIGV2ZW50VHlwZSxcbiAgICBldmVudCxcbiAgICBwb2ludGVyLFxuICAgIG9sZFNlbGVjdGlvbixcbiAgICBlbXB0eVNlbGVjdGlvbiA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9pbml0QmFzZUV2ZW50KGV2ZW50LCBwb2ludGVyKTtcblxuICAgIGlmIChlbXB0eVNlbGVjdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgcHJvcGVydGllcy5ub2RlcyA9IFtdO1xuICAgICAgcHJvcGVydGllcy5lZGdlcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0bXAgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgICAgcHJvcGVydGllcy5ub2RlcyA9IHRtcC5ub2RlcztcbiAgICAgIHByb3BlcnRpZXMuZWRnZXMgPSB0bXAuZWRnZXM7XG4gICAgfVxuXG4gICAgaWYgKG9sZFNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9wZXJ0aWVzW1wicHJldmlvdXNTZWxlY3Rpb25cIl0gPSBvbGRTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSA9PSBcImNsaWNrXCIpIHtcbiAgICAgIC8vIEZvciB0aGUgdGltZSBiZWluZywgcmVzdHJpY3QgdGhpcyBmdW5jdGlvbmFsaXR5IHRvXG4gICAgICAvLyBqdXN0IHRoZSBjbGljayBldmVudC5cbiAgICAgIHByb3BlcnRpZXMuaXRlbXMgPSB0aGlzLmdldENsaWNrZWRJdGVtcyhwb2ludGVyKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQuY29udHJvbEVkZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJvcGVydGllcy5jb250cm9sRWRnZSA9IGV2ZW50LmNvbnRyb2xFZGdlO1xuICAgIH1cblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoZXZlbnRUeXBlLCBwcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpZ2hsaWdodEVkZ2VzPXRoaXMub3B0aW9ucy5zZWxlY3RDb25uZWN0ZWRFZGdlc11cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzZWxlY3RPYmplY3Qob2JqLCBoaWdobGlnaHRFZGdlcyA9IHRoaXMub3B0aW9ucy5zZWxlY3RDb25uZWN0ZWRFZGdlcykge1xuICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgaWYgKGhpZ2hsaWdodEVkZ2VzID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuYWRkRWRnZXMoLi4ub2JqLmVkZ2VzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5hZGROb2RlcyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuYWRkRWRnZXMob2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9ialxuICAgKi9cbiAgZGVzZWxlY3RPYmplY3Qob2JqKSB7XG4gICAgaWYgKG9iai5pc1NlbGVjdGVkKCkgPT09IHRydWUpIHtcbiAgICAgIG9iai5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fcmVtb3ZlRnJvbVNlbGVjdGlvbihvYmopO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXRyaWV2ZSBhbGwgbm9kZXMgb3ZlcmxhcHBpbmcgd2l0aCBnaXZlbiBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAgQW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b21cbiAgICogQHJldHVybnMge251bWJlcltdfSAgIEFuIGFycmF5IHdpdGggaWQncyBvZiB0aGUgb3ZlcmxhcHBpbmcgbm9kZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRBbGxOb2Rlc092ZXJsYXBwaW5nV2l0aChvYmplY3QpIHtcbiAgICBjb25zdCBvdmVybGFwcGluZ05vZGVzID0gW107XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IHRoaXMuYm9keS5ub2RlSW5kaWNlc1tpXTtcbiAgICAgIGlmIChub2Rlc1tub2RlSWRdLmlzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCkpIHtcbiAgICAgICAgb3ZlcmxhcHBpbmdOb2Rlcy5wdXNoKG5vZGVJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdmVybGFwcGluZ05vZGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHBvc2l0aW9uIG9iamVjdCBpbiBjYW52YXNzcGFjZSBmcm9tIGEgc2luZ2xlIHBvaW50IGluIHNjcmVlbnNwYWNlXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcmV0dXJucyB7e2xlZnQ6IG51bWJlciwgdG9wOiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyfX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKSB7XG4gICAgY29uc3QgY2FudmFzUG9zID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMocG9pbnRlcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZnQ6IGNhbnZhc1Bvcy54IC0gMSxcbiAgICAgIHRvcDogY2FudmFzUG9zLnkgKyAxLFxuICAgICAgcmlnaHQ6IGNhbnZhc1Bvcy54ICsgMSxcbiAgICAgIGJvdHRvbTogY2FudmFzUG9zLnkgLSAxLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0b3Agbm9kZSBhdCB0aGUgcGFzc2VkIHBvaW50IChsaWtlIGEgY2xpY2spXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXR1cm5Ob2RlPXRydWVdXG4gICAqIEByZXR1cm5zIHtOb2RlIHwgdW5kZWZpbmVkfSBub2RlXG4gICAqL1xuICBnZXROb2RlQXQocG9pbnRlciwgcmV0dXJuTm9kZSA9IHRydWUpIHtcbiAgICAvLyB3ZSBmaXJzdCBjaGVjayBpZiB0aGlzIGlzIGFuIG5hdmlnYXRpb24gY29udHJvbHMgZWxlbWVudFxuICAgIGNvbnN0IHBvc2l0aW9uT2JqZWN0ID0gdGhpcy5fcG9pbnRlclRvUG9zaXRpb25PYmplY3QocG9pbnRlcik7XG4gICAgY29uc3Qgb3ZlcmxhcHBpbmdOb2RlcyA9IHRoaXMuX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoKHBvc2l0aW9uT2JqZWN0KTtcbiAgICAvLyBpZiB0aGVyZSBhcmUgb3ZlcmxhcHBpbmcgbm9kZXMsIHNlbGVjdCB0aGUgbGFzdCBvbmUsIHRoaXMgaXMgdGhlXG4gICAgLy8gb25lIHdoaWNoIGlzIGRyYXduIG9uIHRvcCBvZiB0aGUgb3RoZXJzXG4gICAgaWYgKG92ZXJsYXBwaW5nTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHJldHVybk5vZGUgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5ub2Rlc1tvdmVybGFwcGluZ05vZGVzW292ZXJsYXBwaW5nTm9kZXMubGVuZ3RoIC0gMV1dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXBwaW5nTm9kZXNbb3ZlcmxhcHBpbmdOb2Rlcy5sZW5ndGggLSAxXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcmV0cmlldmUgYWxsIGVkZ2VzIG92ZXJsYXBwaW5nIHdpdGggZ2l2ZW4gb2JqZWN0LCBzZWxlY3RvciBpcyBhcm91bmQgY2VudGVyXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgIEFuIG9iamVjdCB3aXRoIHBhcmFtZXRlcnMgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IG92ZXJsYXBwaW5nRWRnZXMgQW4gYXJyYXkgd2l0aCBpZCdzIG9mIHRoZSBvdmVybGFwcGluZyBub2Rlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEVkZ2VzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCwgb3ZlcmxhcHBpbmdFZGdlcykge1xuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5ib2R5LmVkZ2VzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlSWQgPSB0aGlzLmJvZHkuZWRnZUluZGljZXNbaV07XG4gICAgICBpZiAoZWRnZXNbZWRnZUlkXS5pc092ZXJsYXBwaW5nV2l0aChvYmplY3QpKSB7XG4gICAgICAgIG92ZXJsYXBwaW5nRWRnZXMucHVzaChlZGdlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXRyaWV2ZSBhbGwgbm9kZXMgb3ZlcmxhcHBpbmcgd2l0aCBnaXZlbiBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAgQW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b21cbiAgICogQHJldHVybnMge251bWJlcltdfSAgIEFuIGFycmF5IHdpdGggaWQncyBvZiB0aGUgb3ZlcmxhcHBpbmcgbm9kZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRBbGxFZGdlc092ZXJsYXBwaW5nV2l0aChvYmplY3QpIHtcbiAgICBjb25zdCBvdmVybGFwcGluZ0VkZ2VzID0gW107XG4gICAgdGhpcy5fZ2V0RWRnZXNPdmVybGFwcGluZ1dpdGgob2JqZWN0LCBvdmVybGFwcGluZ0VkZ2VzKTtcbiAgICByZXR1cm4gb3ZlcmxhcHBpbmdFZGdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGVkZ2VzIG5lYXJlc3QgdG8gdGhlIHBhc3NlZCBwb2ludCAobGlrZSBhIGNsaWNrKVxuICAgKlxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvaW50ZXJcbiAgICogQHBhcmFtIHtib29sZWFufSBbcmV0dXJuRWRnZT10cnVlXVxuICAgKiBAcmV0dXJucyB7RWRnZSB8IHVuZGVmaW5lZH0gbm9kZVxuICAgKi9cbiAgZ2V0RWRnZUF0KHBvaW50ZXIsIHJldHVybkVkZ2UgPSB0cnVlKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGVkZ2VzLCBwaWNrIGNsb3Nlc3Qgd2l0aGluIDEwXG4gICAgY29uc3QgY2FudmFzUG9zID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMocG9pbnRlcik7XG4gICAgbGV0IG1pbmRpc3QgPSAxMDtcbiAgICBsZXQgb3ZlcmxhcHBpbmdFZGdlID0gbnVsbDtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5lZGdlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWRnZUlkID0gdGhpcy5ib2R5LmVkZ2VJbmRpY2VzW2ldO1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2VkZ2VJZF07XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQpIHtcbiAgICAgICAgY29uc3QgeEZyb20gPSBlZGdlLmZyb20ueDtcbiAgICAgICAgY29uc3QgeUZyb20gPSBlZGdlLmZyb20ueTtcbiAgICAgICAgY29uc3QgeFRvID0gZWRnZS50by54O1xuICAgICAgICBjb25zdCB5VG8gPSBlZGdlLnRvLnk7XG4gICAgICAgIGNvbnN0IGRpc3QgPSBlZGdlLmVkZ2VUeXBlLmdldERpc3RhbmNlVG9FZGdlKFxuICAgICAgICAgIHhGcm9tLFxuICAgICAgICAgIHlGcm9tLFxuICAgICAgICAgIHhUbyxcbiAgICAgICAgICB5VG8sXG4gICAgICAgICAgY2FudmFzUG9zLngsXG4gICAgICAgICAgY2FudmFzUG9zLnlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRpc3QgPCBtaW5kaXN0KSB7XG4gICAgICAgICAgb3ZlcmxhcHBpbmdFZGdlID0gZWRnZUlkO1xuICAgICAgICAgIG1pbmRpc3QgPSBkaXN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvdmVybGFwcGluZ0VkZ2UgIT09IG51bGwpIHtcbiAgICAgIGlmIChyZXR1cm5FZGdlID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvZHkuZWRnZXNbb3ZlcmxhcHBpbmdFZGdlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvdmVybGFwcGluZ0VkZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBvYmplY3QgdG8gdGhlIHNlbGVjdGlvbiBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9ialxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZFRvSG92ZXIob2JqKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgIHRoaXMuaG92ZXJPYmoubm9kZXNbb2JqLmlkXSA9IG9iajtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ob3Zlck9iai5lZGdlc1tvYmouaWRdID0gb2JqO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBzaW5nbGUgb3B0aW9uIGZyb20gc2VsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVtb3ZlRnJvbVNlbGVjdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZGVsZXRlTm9kZXMob2JqKTtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmRlbGV0ZUVkZ2VzKC4uLm9iai5lZGdlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmRlbGV0ZUVkZ2VzKG9iaik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc2VsZWN0IGFsbCBub2RlcyBhbmQgZWRnZXMuXG4gICAqL1xuICB1bnNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIG5vZGVzXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRTZWxlY3RlZE5vZGVDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3Iuc2l6ZU5vZGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVkZ2VzXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRTZWxlY3RlZEVkZ2VDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3Iuc2l6ZUVkZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIHNlbGVjdCB0aGUgZWRnZXMgY29ubmVjdGVkIHRvIHRoZSBub2RlIHRoYXQgaXMgYmVpbmcgc2VsZWN0ZWRcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaG92ZXJDb25uZWN0ZWRFZGdlcyhub2RlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gbm9kZS5lZGdlc1tpXTtcbiAgICAgIGVkZ2UuaG92ZXIgPSB0cnVlO1xuICAgICAgdGhpcy5fYWRkVG9Ib3ZlcihlZGdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBoaWdobGlnaHQgZnJvbSBhIG5vZGUgb3IgZWRnZSwgaW4gcmVzcG9uc2UgdG8gbW91c2UgbW92ZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50XG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlciBvYmplY3Qgd2l0aCB0aGUgeCBhbmQgeSBzY3JlZW4gY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlXG4gICAqIEBwYXJhbSB7Tm9kZXx2aXMuRWRnZX0gb2JqZWN0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0Qmx1ckV2ZW50KGV2ZW50LCBwb2ludGVyLCBvYmplY3QpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5faW5pdEJhc2VFdmVudChldmVudCwgcG9pbnRlcik7XG5cbiAgICBpZiAob2JqZWN0LmhvdmVyID09PSB0cnVlKSB7XG4gICAgICBvYmplY3QuaG92ZXIgPSBmYWxzZTtcbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlKSB7XG4gICAgICAgIHByb3BlcnRpZXMubm9kZSA9IG9iamVjdC5pZDtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImJsdXJOb2RlXCIsIHByb3BlcnRpZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcGVydGllcy5lZGdlID0gb2JqZWN0LmlkO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYmx1ckVkZ2VcIiwgcHJvcGVydGllcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgaGlnaGxpZ2h0IGZvciBhIG5vZGUgb3IgZWRnZSwgaW4gcmVzcG9uc2UgdG8gbW91c2UgbW92ZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50XG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlciBvYmplY3Qgd2l0aCB0aGUgeCBhbmQgeSBzY3JlZW4gY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlXG4gICAqIEBwYXJhbSB7Tm9kZXx2aXMuRWRnZX0gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtib29sZWFufSBob3ZlckNoYW5nZWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXRIb3ZlckV2ZW50KGV2ZW50LCBwb2ludGVyLCBvYmplY3QpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5faW5pdEJhc2VFdmVudChldmVudCwgcG9pbnRlcik7XG4gICAgbGV0IGhvdmVyQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgaWYgKG9iamVjdC5ob3ZlciA9PT0gZmFsc2UpIHtcbiAgICAgIG9iamVjdC5ob3ZlciA9IHRydWU7XG4gICAgICB0aGlzLl9hZGRUb0hvdmVyKG9iamVjdCk7XG4gICAgICBob3ZlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgcHJvcGVydGllcy5ub2RlID0gb2JqZWN0LmlkO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiaG92ZXJOb2RlXCIsIHByb3BlcnRpZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcGVydGllcy5lZGdlID0gb2JqZWN0LmlkO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiaG92ZXJFZGdlXCIsIHByb3BlcnRpZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBob3ZlckNoYW5nZWQ7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBhY3Rpb25zIGluIHJlc3BvbnNlIHRvIGEgbW91c2UgbW92ZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9ICBldmVudFxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvaW50ZXIgfCBvYmplY3Qgd2l0aCB0aGUgeCBhbmQgeSBzY3JlZW4gY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlXG4gICAqL1xuICBob3Zlck9iamVjdChldmVudCwgcG9pbnRlcikge1xuICAgIGxldCBvYmplY3QgPSB0aGlzLmdldE5vZGVBdChwb2ludGVyKTtcbiAgICBpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iamVjdCA9IHRoaXMuZ2V0RWRnZUF0KHBvaW50ZXIpO1xuICAgIH1cblxuICAgIGxldCBob3ZlckNoYW5nZWQgPSBmYWxzZTtcbiAgICAvLyByZW1vdmUgYWxsIG5vZGUgaG92ZXIgaGlnaGxpZ2h0c1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuaG92ZXJPYmoubm9kZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ob3Zlck9iai5ub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgb2JqZWN0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAob2JqZWN0IGluc3RhbmNlb2YgTm9kZSAmJiBvYmplY3QuaWQgIT0gbm9kZUlkKSB8fFxuICAgICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIEVkZ2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5lbWl0Qmx1ckV2ZW50KGV2ZW50LCBwb2ludGVyLCB0aGlzLmhvdmVyT2JqLm5vZGVzW25vZGVJZF0pO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmhvdmVyT2JqLm5vZGVzW25vZGVJZF07XG4gICAgICAgICAgaG92ZXJDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92aW5nIGFsbCBlZGdlIGhvdmVyIGhpZ2hsaWdodHNcbiAgICBmb3IgKGNvbnN0IGVkZ2VJZCBpbiB0aGlzLmhvdmVyT2JqLmVkZ2VzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuaG92ZXJPYmouZWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgICAgLy8gaWYgdGhlIGhvdmVyIGhhcyBiZWVuIGNoYW5nZWQgaGVyZSBpdCBtZWFucyB0aGF0IHRoZSBub2RlIGhhcyBiZWVuIGhvdmVyZWQgb3ZlciBvciBvZmZcbiAgICAgICAgLy8gd2UgdGhlbiBkbyBub3QgdXNlIHRoZSBlbWl0Qmx1ckV2ZW50IG1ldGhvZCBoZXJlLlxuICAgICAgICBpZiAoaG92ZXJDaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5ob3Zlck9iai5lZGdlc1tlZGdlSWRdLmhvdmVyID0gZmFsc2U7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuaG92ZXJPYmouZWRnZXNbZWRnZUlkXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgYmx1ciByZW1haW5zIHRoZSBzYW1lIGFuZCB0aGUgb2JqZWN0IGlzIHVuZGVmaW5lZCAobW91c2Ugb2ZmKSBvciBhbm90aGVyXG4gICAgICAgIC8vIGVkZ2UgaGFzIGJlZW4gaG92ZXJlZCwgb3IgYW5vdGhlciBub2RlIGhhcyBiZWVuIGhvdmVyZWQgd2UgYmx1ciB0aGUgZWRnZS5cbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgb2JqZWN0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAob2JqZWN0IGluc3RhbmNlb2YgRWRnZSAmJiBvYmplY3QuaWQgIT0gZWRnZUlkKSB8fFxuICAgICAgICAgIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlICYmICFvYmplY3QuaG92ZXIpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZW1pdEJsdXJFdmVudChldmVudCwgcG9pbnRlciwgdGhpcy5ob3Zlck9iai5lZGdlc1tlZGdlSWRdKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5ob3Zlck9iai5lZGdlc1tlZGdlSWRdO1xuICAgICAgICAgIGhvdmVyQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGhvdmVyZWRFZGdlc0NvdW50ID0gT2JqZWN0LmtleXModGhpcy5ob3Zlck9iai5lZGdlcykubGVuZ3RoO1xuICAgICAgY29uc3QgaG92ZXJlZE5vZGVzQ291bnQgPSBPYmplY3Qua2V5cyh0aGlzLmhvdmVyT2JqLm5vZGVzKS5sZW5ndGg7XG4gICAgICBjb25zdCBuZXdPbmx5SG92ZXJlZEVkZ2UgPVxuICAgICAgICBvYmplY3QgaW5zdGFuY2VvZiBFZGdlICYmXG4gICAgICAgIGhvdmVyZWRFZGdlc0NvdW50ID09PSAwICYmXG4gICAgICAgIGhvdmVyZWROb2Rlc0NvdW50ID09PSAwO1xuICAgICAgY29uc3QgbmV3T25seUhvdmVyZWROb2RlID1cbiAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgTm9kZSAmJlxuICAgICAgICBob3ZlcmVkRWRnZXNDb3VudCA9PT0gMCAmJlxuICAgICAgICBob3ZlcmVkTm9kZXNDb3VudCA9PT0gMDtcblxuICAgICAgaWYgKGhvdmVyQ2hhbmdlZCB8fCBuZXdPbmx5SG92ZXJlZEVkZ2UgfHwgbmV3T25seUhvdmVyZWROb2RlKSB7XG4gICAgICAgIGhvdmVyQ2hhbmdlZCA9IHRoaXMuZW1pdEhvdmVyRXZlbnQoZXZlbnQsIHBvaW50ZXIsIG9iamVjdCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlICYmIHRoaXMub3B0aW9ucy5ob3ZlckNvbm5lY3RlZEVkZ2VzID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX2hvdmVyQ29ubmVjdGVkRWRnZXMob2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaG92ZXJDaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbW1pdCB0aGUgc2VsZWN0aW9uIGNoYW5nZXMgYnV0IGRvbid0IGVtaXQgYW55IGV2ZW50cy5cbiAgICovXG4gIGNvbW1pdFdpdGhvdXRFbWl0dGluZygpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5jb21taXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYW5kIGRlc2VsZWN0IG5vZGVzIGRlcGVuZGluZyBjdXJyZW50IHNlbGVjdGlvbiBjaGFuZ2UuXG4gICAqXG4gICAqIEZvciBjaGFuZ2luZyBub2Rlcywgc2VsZWN0L2Rlc2VsZWN0IGV2ZW50cyBhcmUgZmlyZWQuXG4gICAqXG4gICAqIE5PVEU6IEZvciBhIGdpdmVuIGVkZ2UsIGlmIG9uZSBjb25uZWN0aW5nIG5vZGUgaXMgZGVzZWxlY3RlZCBhbmQgd2l0aCB0aGVcbiAgICogc2FtZSBjbGljayB0aGUgb3RoZXIgbm9kZSBpcyBzZWxlY3RlZCwgbm8gZXZlbnRzIGZvciB0aGUgZWRnZSB3aWxsIGZpcmUuIEl0XG4gICAqIHdhcyBzZWxlY3RlZCBhbmQgaXQgd2lsbCByZW1haW4gc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlciAtIFRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIG9mIHRoZVxuICAgKiBjbGljaywgdGFwLCBkcmFnZW5k4oCmIHRoYXQgdHJpZ2dlcmVkIHRoaXMuXG4gICAqIEBwYXJhbSB7VUlFdmVudH0gZXZlbnQgLSBUaGUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhpcy5cbiAgICovXG4gIGNvbW1pdEFuZEVtaXQocG9pbnRlciwgZXZlbnQpIHtcbiAgICBsZXQgc2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbkNoYW5nZXMgPSB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5jb21taXQoKTtcbiAgICBjb25zdCBwcmV2aW91c1NlbGVjdGlvbiA9IHtcbiAgICAgIG5vZGVzOiBzZWxlY3Rpb25DaGFuZ2VzLm5vZGVzLnByZXZpb3VzLFxuICAgICAgZWRnZXM6IHNlbGVjdGlvbkNoYW5nZXMuZWRnZXMucHJldmlvdXMsXG4gICAgfTtcblxuICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VzLmVkZ2VzLmRlbGV0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgIFwiZGVzZWxlY3RFZGdlXCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBwb2ludGVyLFxuICAgICAgICBwcmV2aW91c1NlbGVjdGlvblxuICAgICAgKTtcbiAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlcy5ub2Rlcy5kZWxldGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICBcImRlc2VsZWN0Tm9kZVwiLFxuICAgICAgICBldmVudCxcbiAgICAgICAgcG9pbnRlcixcbiAgICAgICAgcHJldmlvdXNTZWxlY3Rpb25cbiAgICAgICk7XG4gICAgICBzZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGlvbkNoYW5nZXMubm9kZXMuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJzZWxlY3ROb2RlXCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlcy5lZGdlcy5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2xpY2tFdmVudChcInNlbGVjdEVkZ2VcIiwgZXZlbnQsIHBvaW50ZXIpO1xuICAgICAgc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZpcmUgdGhlIHNlbGVjdCBldmVudCBpZiBhbnl0aGluZyBoYXMgYmVlbiBzZWxlY3RlZCBvciBkZXNlbGVjdGVkXG4gICAgaWYgKHNlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBzZWxlY3Qgb3IgdW5zZWxlY3RcbiAgICAgIHRoaXMuZ2VuZXJhdGVDbGlja0V2ZW50KFwic2VsZWN0XCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBub2RlIGFuZCBlZGdlIGlkcy5cbiAgICpcbiAgICogQHJldHVybnMge3tub2RlczogQXJyYXkuPHN0cmluZz4sIGVkZ2VzOiBBcnJheS48c3RyaW5nPn19IEFycmF5cyB3aXRoIHRoZVxuICAgKiBpZHMgb2YgdGhlIHNlbGVjdGVkIG5vZGVzIGFuZCBlZGdlcy5cbiAgICovXG4gIGdldFNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbm9kZXM6IHRoaXMuZ2V0U2VsZWN0ZWROb2RlSWRzKCksXG4gICAgICBlZGdlczogdGhpcy5nZXRTZWxlY3RlZEVkZ2VJZHMoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQW4gYXJyYXkgd2l0aCBzZWxlY3RlZCBub2Rlcy5cbiAgICovXG4gIGdldFNlbGVjdGVkTm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmdldE5vZGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlZGdlcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSB3aXRoIHNlbGVjdGVkIGVkZ2VzLlxuICAgKi9cbiAgZ2V0U2VsZWN0ZWRFZGdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0RWRnZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGUgaWRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFuIGFycmF5IHdpdGggdGhlIGlkcyBvZiB0aGUgc2VsZWN0ZWQgbm9kZXMuXG4gICAqL1xuICBnZXRTZWxlY3RlZE5vZGVJZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmdldE5vZGVzKCkubWFwKChub2RlKSA9PiBub2RlLmlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGVkZ2UgaWRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFuIGFycmF5IHdpdGggdGhlIGlkcyBvZiB0aGUgc2VsZWN0ZWQgZWRnZXMuXG4gICAqL1xuICBnZXRTZWxlY3RlZEVkZ2VJZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmdldEVkZ2VzKCkubWFwKChlZGdlKSA9PiBlZGdlLmlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjdXJyZW50IHNlbGVjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3tub2RlczogQXJyYXkuPHN0cmluZz4sIGVkZ2VzOiBBcnJheS48c3RyaW5nPn19IHNlbGVjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnNcbiAgICovXG4gIHNldFNlbGVjdGlvbihzZWxlY3Rpb24sIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghc2VsZWN0aW9uIHx8ICghc2VsZWN0aW9uLm5vZGVzICYmICFzZWxlY3Rpb24uZWRnZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIlNlbGVjdGlvbiBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIG5vZGVzIGFuZC9vciBlZGdlcyBwcm9wZXJ0aWVzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gZmlyc3QgdW5zZWxlY3QgYW55IHNlbGVjdGVkIG5vZGUsIGlmIG9wdGlvbiBpcyB0cnVlIG9yIHVuZGVmaW5lZFxuICAgIGlmIChvcHRpb25zLnVuc2VsZWN0QWxsIHx8IG9wdGlvbnMudW5zZWxlY3RBbGwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy51bnNlbGVjdEFsbCgpO1xuICAgIH1cbiAgICBpZiAoc2VsZWN0aW9uLm5vZGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIHNlbGVjdGlvbi5ub2Rlcykge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW2lkXTtcbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ05vZGUgd2l0aCBpZCBcIicgKyBpZCArICdcIiBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBzZWxlY3QgZWRnZXMgd2l0aCBpdFxuICAgICAgICB0aGlzLnNlbGVjdE9iamVjdChub2RlLCBvcHRpb25zLmhpZ2hsaWdodEVkZ2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0aW9uLmVkZ2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIHNlbGVjdGlvbi5lZGdlcykge1xuICAgICAgICBjb25zdCBlZGdlID0gdGhpcy5ib2R5LmVkZ2VzW2lkXTtcbiAgICAgICAgaWYgKCFlZGdlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0VkZ2Ugd2l0aCBpZCBcIicgKyBpZCArICdcIiBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdE9iamVjdChlZGdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmNvbW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHNlbGVjdCB6ZXJvIG9yIG1vcmUgbm9kZXMgd2l0aCB0aGUgb3B0aW9uIHRvIGhpZ2hsaWdodCBlZGdlc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgc3RyaW5nW119IHNlbGVjdGlvbiAgICAgQW4gYXJyYXkgd2l0aCB0aGUgaWRzIG9mIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbm9kZXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpZ2hsaWdodEVkZ2VzXVxuICAgKi9cbiAgc2VsZWN0Tm9kZXMoc2VsZWN0aW9uLCBoaWdobGlnaHRFZGdlcyA9IHRydWUpIHtcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ubGVuZ3RoID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBcIlNlbGVjdGlvbiBtdXN0IGJlIGFuIGFycmF5IHdpdGggaWRzXCI7XG5cbiAgICB0aGlzLnNldFNlbGVjdGlvbih7IG5vZGVzOiBzZWxlY3Rpb24gfSwgeyBoaWdobGlnaHRFZGdlczogaGlnaGxpZ2h0RWRnZXMgfSk7XG4gIH1cblxuICAvKipcbiAgICogc2VsZWN0IHplcm8gb3IgbW9yZSBlZGdlc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgc3RyaW5nW119IHNlbGVjdGlvbiAgICAgQW4gYXJyYXkgd2l0aCB0aGUgaWRzIG9mIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbm9kZXMuXG4gICAqL1xuICBzZWxlY3RFZGdlcyhzZWxlY3Rpb24pIHtcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ubGVuZ3RoID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBcIlNlbGVjdGlvbiBtdXN0IGJlIGFuIGFycmF5IHdpdGggaWRzXCI7XG5cbiAgICB0aGlzLnNldFNlbGVjdGlvbih7IGVkZ2VzOiBzZWxlY3Rpb24gfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIHNlbGVjdGlvbjogcmVtb3ZlIGlkcyBvZiBub2RlcyB3aGljaCBubyBsb25nZXIgZXhpc3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVwZGF0ZVNlbGVjdGlvbigpIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgaW4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0Tm9kZXMoKSkge1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlLmlkKSkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5kZWxldGVOb2Rlcyhub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBlZGdlIGluIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmdldEVkZ2VzKCkpIHtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5lZGdlcywgZWRnZS5pZCkpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZGVsZXRlRWRnZXMoZWRnZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBhbGwgdGhlIHZpc3VhbCBlbGVtZW50cyBjbGlja2VkIHdoaWNoIGFyZSBvbiB0aGUgZ2l2ZW4gcG9pbnQuXG4gICAqXG4gICAqIEFsbCBlbGVtZW50cyBhcmUgcmV0dXJuZWQ7IHRoaXMgaW5jbHVkZXMgbm9kZXMsIGVkZ2VzIGFuZCB0aGVpciBsYWJlbHMuXG4gICAqIFRoZSBvcmRlciByZXR1cm5lZCBpcyBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0LCBpLmUuIGVsZW1lbnQgMCBvZiB0aGUgcmV0dXJuXG4gICAqIHZhbHVlIGlzIHRoZSB0b3Btb3N0IGl0ZW0gY2xpY2tlZCBvbi5cbiAgICpcbiAgICogVGhlIHJldHVybiB2YWx1ZSBjb25zaXN0cyBvZiBhbiBhcnJheSBvZiB0aGUgZm9sbG93aW5nIHBvc3NpYmxlIGVsZW1lbnRzOlxuICAgKlxuICAgKiAtIGB7bm9kZUlkOm51bWJlcn1gICAgICAgICAgICAgIC0gbm9kZSB3aXRoIGdpdmVuIGlkIGNsaWNrZWQgb25cbiAgICogLSBge25vZGVJZDpudW1iZXIsIGxhYmVsSWQ6MH1gICAtIGxhYmVsIG9mIG5vZGUgd2l0aCBnaXZlbiBpZCBjbGlja2VkIG9uXG4gICAqIC0gYHtlZGdlSWQ6bnVtYmVyfWAgICAgICAgICAgICAgLSBlZGdlIHdpdGggZ2l2ZW4gaWQgY2xpY2tlZCBvblxuICAgKiAtIGB7ZWRnZTpudW1iZXIsIGxhYmVsSWQ6MH1gICAgIC0gbGFiZWwgb2YgZWRnZSB3aXRoIGdpdmVuIGlkIGNsaWNrZWQgb25cbiAgICpcbiAgICogIyMgTk9URVNcbiAgICpcbiAgICogLSBDdXJyZW50bHksIHRoZXJlIGlzIG9ubHkgb25lIGxhYmVsIGFzc29jaWF0ZWQgd2l0aCBhIG5vZGUgb3IgYW4gZWRnZSxcbiAgICogICBidXQgdGhpcyBpcyBleHBlY3RlZCB0byBjaGFuZ2Ugc29tZXdoZXJlIGluIHRoZSBmdXR1cmUuXG4gICAqIC0gU2luY2UgdGhlcmUgaXMgbm8gei1pbmRleGluZyB5ZXQsIGl0IGlzIG5vdCByZWFsbHkgcG9zc2libGUgdG8gc2V0IHRoZSBub2RlcyBhbmRcbiAgICogICBlZGdlcyBpbiB0aGUgY29ycmVjdCBvcmRlci4gRm9yIHRoZSB0aW1lIGJlaW5nLCBub2RlcyBjb21lIGZpcnN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb2ludGVyICBtb3VzZSBwb3NpdGlvbiBpbiBzY3JlZW4gY29vcmRpbmF0ZXNcbiAgICogQHJldHVybnMge0FycmF5Ljxub2RlQ2xpY2tJdGVtfG5vZGVMYWJlbENsaWNrSXRlbXxlZGdlQ2xpY2tJdGVtfGVkZ2VMYWJlbENsaWNrSXRlbT59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRDbGlja2VkSXRlbXMocG9pbnRlcikge1xuICAgIGNvbnN0IHBvaW50ID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMocG9pbnRlcik7XG4gICAgY29uc3QgaXRlbXMgPSBbXTtcblxuICAgIC8vIE5vdGUgcmV2ZXJzZSBvcmRlcjsgd2Ugd2FudCB0aGUgdG9wbW9zdCBjbGlja2VkIGl0ZW1zIHRvIGJlIGZpcnN0IGluIHRoZSBhcnJheVxuICAgIC8vIEFsc28gbm90ZSB0aGF0IHNlbGVjdGVkIG5vZGVzIGFyZSBkaXNyZWdhcmRlZCBoZXJlOyB0aGVzZSBub3JtYWxseSBkaXNwbGF5IG9uIHRvcFxuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGZvciAobGV0IGkgPSBub2RlSW5kaWNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgIGNvbnN0IHJldCA9IG5vZGUuZ2V0SXRlbXNPblBvaW50KHBvaW50KTtcbiAgICAgIGl0ZW1zLnB1c2guYXBwbHkoaXRlbXMsIHJldCk7IC8vIEFwcGVuZCB0aGUgcmV0dXJuIHZhbHVlIHRvIHRoZSBydW5uaW5nIGxpc3QuXG4gICAgfVxuXG4gICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLmJvZHkuZWRnZUluZGljZXM7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgZm9yIChsZXQgaSA9IGVkZ2VJbmRpY2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUluZGljZXNbaV1dO1xuICAgICAgY29uc3QgcmV0ID0gZWRnZS5nZXRJdGVtc09uUG9pbnQocG9pbnQpO1xuICAgICAgaXRlbXMucHVzaC5hcHBseShpdGVtcywgcmV0KTsgLy8gQXBwZW5kIHRoZSByZXR1cm4gdmFsdWUgdG8gdGhlIHJ1bm5pbmcgbGlzdC5cbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0aW9uSGFuZGxlcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxudmFyIG1lcmdlU29ydCA9IGZ1bmN0aW9uIChhcnJheSwgY29tcGFyZWZuKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHZhciBtaWRkbGUgPSBmbG9vcihsZW5ndGggLyAyKTtcbiAgcmV0dXJuIGxlbmd0aCA8IDggPyBpbnNlcnRpb25Tb3J0KGFycmF5LCBjb21wYXJlZm4pIDogbWVyZ2UoXG4gICAgYXJyYXksXG4gICAgbWVyZ2VTb3J0KGFycmF5U2xpY2UoYXJyYXksIDAsIG1pZGRsZSksIGNvbXBhcmVmbiksXG4gICAgbWVyZ2VTb3J0KGFycmF5U2xpY2UoYXJyYXksIG1pZGRsZSksIGNvbXBhcmVmbiksXG4gICAgY29tcGFyZWZuXG4gICk7XG59O1xuXG52YXIgaW5zZXJ0aW9uU29ydCA9IGZ1bmN0aW9uIChhcnJheSwgY29tcGFyZWZuKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHZhciBpID0gMTtcbiAgdmFyIGVsZW1lbnQsIGo7XG5cbiAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICBqID0gaTtcbiAgICBlbGVtZW50ID0gYXJyYXlbaV07XG4gICAgd2hpbGUgKGogJiYgY29tcGFyZWZuKGFycmF5W2ogLSAxXSwgZWxlbWVudCkgPiAwKSB7XG4gICAgICBhcnJheVtqXSA9IGFycmF5Wy0tal07XG4gICAgfVxuICAgIGlmIChqICE9PSBpKyspIGFycmF5W2pdID0gZWxlbWVudDtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG52YXIgbWVyZ2UgPSBmdW5jdGlvbiAoYXJyYXksIGxlZnQsIHJpZ2h0LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxsZW5ndGggPSBsZWZ0Lmxlbmd0aDtcbiAgdmFyIHJsZW5ndGggPSByaWdodC5sZW5ndGg7XG4gIHZhciBsaW5kZXggPSAwO1xuICB2YXIgcmluZGV4ID0gMDtcblxuICB3aGlsZSAobGluZGV4IDwgbGxlbmd0aCB8fCByaW5kZXggPCBybGVuZ3RoKSB7XG4gICAgYXJyYXlbbGluZGV4ICsgcmluZGV4XSA9IChsaW5kZXggPCBsbGVuZ3RoICYmIHJpbmRleCA8IHJsZW5ndGgpXG4gICAgICA/IGNvbXBhcmVmbihsZWZ0W2xpbmRleF0sIHJpZ2h0W3JpbmRleF0pIDw9IDAgPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXVxuICAgICAgOiBsaW5kZXggPCBsbGVuZ3RoID8gbGVmdFtsaW5kZXgrK10gOiByaWdodFtyaW5kZXgrK107XG4gIH0gcmV0dXJuIGFycmF5O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXJnZVNvcnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgZmlyZWZveCA9IHVzZXJBZ2VudC5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS9pKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIWZpcmVmb3ggJiYgK2ZpcmVmb3hbMV07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFVBID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL01TSUV8VHJpZGVudC8udGVzdChVQSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgd2Via2l0ID0gdXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdFxcLyhcXGQrKVxcLi8pO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhd2Via2l0ICYmICt3ZWJraXRbMV07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVybmFsU29ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zb3J0Jyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgRkYgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24nKTtcbnZhciBJRV9PUl9FREdFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlJyk7XG52YXIgVjggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBXRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uJyk7XG5cbnZhciB0ZXN0ID0gW107XG52YXIgbmF0aXZlU29ydCA9IHVuY3VycnlUaGlzKHRlc3Quc29ydCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKHRlc3QucHVzaCk7XG5cbi8vIElFOC1cbnZhciBGQUlMU19PTl9VTkRFRklORUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSk7XG4vLyBWOCBidWdcbnZhciBGQUlMU19PTl9OVUxMID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQobnVsbCk7XG59KTtcbi8vIE9sZCBXZWJLaXRcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29ydCcpO1xuXG52YXIgU1RBQkxFX1NPUlQgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBmZWF0dXJlIGRldGVjdGlvbiBjYW4gYmUgdG9vIHNsb3csIHNvIGNoZWNrIGVuZ2luZXMgdmVyc2lvbnNcbiAgaWYgKFY4KSByZXR1cm4gVjggPCA3MDtcbiAgaWYgKEZGICYmIEZGID4gMykgcmV0dXJuO1xuICBpZiAoSUVfT1JfRURHRSkgcmV0dXJuIHRydWU7XG4gIGlmIChXRUJLSVQpIHJldHVybiBXRUJLSVQgPCA2MDM7XG5cbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgY29kZSwgY2hyLCB2YWx1ZSwgaW5kZXg7XG5cbiAgLy8gZ2VuZXJhdGUgYW4gYXJyYXkgd2l0aCBtb3JlIDUxMiBlbGVtZW50cyAoQ2hha3JhIGFuZCBvbGQgVjggZmFpbHMgb25seSBpbiB0aGlzIGNhc2UpXG4gIGZvciAoY29kZSA9IDY1OyBjb2RlIDwgNzY7IGNvZGUrKykge1xuICAgIGNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgIGNhc2UgNjY6IGNhc2UgNjk6IGNhc2UgNzA6IGNhc2UgNzI6IHZhbHVlID0gMzsgYnJlYWs7XG4gICAgICBjYXNlIDY4OiBjYXNlIDcxOiB2YWx1ZSA9IDQ7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogdmFsdWUgPSAyO1xuICAgIH1cblxuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDQ3OyBpbmRleCsrKSB7XG4gICAgICB0ZXN0LnB1c2goeyBrOiBjaHIgKyBpbmRleCwgdjogdmFsdWUgfSk7XG4gICAgfVxuICB9XG5cbiAgdGVzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLnYgLSBhLnY7IH0pO1xuXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRlc3QubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY2hyID0gdGVzdFtpbmRleF0uay5jaGFyQXQoMCk7XG4gICAgaWYgKHJlc3VsdC5jaGFyQXQocmVzdWx0Lmxlbmd0aCAtIDEpICE9PSBjaHIpIHJlc3VsdCArPSBjaHI7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0ICE9PSAnREdCRUZIQUNJSksnO1xufSk7XG5cbnZhciBGT1JDRUQgPSBGQUlMU19PTl9VTkRFRklORUQgfHwgIUZBSUxTX09OX05VTEwgfHwgIVNUUklDVF9NRVRIT0QgfHwgIVNUQUJMRV9TT1JUO1xuXG52YXIgZ2V0U29ydENvbXBhcmUgPSBmdW5jdGlvbiAoY29tcGFyZWZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoeCwgeSkge1xuICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHJldHVybiAtMTtcbiAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIHJldHVybiArY29tcGFyZWZuKHgsIHkpIHx8IDA7XG4gICAgcmV0dXJuIHRvU3RyaW5nKHgpID4gdG9TdHJpbmcoeSkgPyAxIDogLTE7XG4gIH07XG59O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29ydFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIGFDYWxsYWJsZShjb21wYXJlZm4pO1xuXG4gICAgdmFyIGFycmF5ID0gdG9PYmplY3QodGhpcyk7XG5cbiAgICBpZiAoU1RBQkxFX1NPUlQpIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZCA/IG5hdGl2ZVNvcnQoYXJyYXkpIDogbmF0aXZlU29ydChhcnJheSwgY29tcGFyZWZuKTtcblxuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciBhcnJheUxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGFycmF5KTtcbiAgICB2YXIgaXRlbXNMZW5ndGgsIGluZGV4O1xuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChpbmRleCBpbiBhcnJheSkgcHVzaChpdGVtcywgYXJyYXlbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBpbnRlcm5hbFNvcnQoaXRlbXMsIGdldFNvcnRDb21wYXJlKGNvbXBhcmVmbikpO1xuXG4gICAgaXRlbXNMZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVtcyk7XG4gICAgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgaXRlbXNMZW5ndGgpIGFycmF5W2luZGV4XSA9IGl0ZW1zW2luZGV4KytdO1xuICAgIHdoaWxlIChpbmRleCA8IGFycmF5TGVuZ3RoKSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coYXJyYXksIGluZGV4KyspO1xuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvcnQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zb3J0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvcnQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29ydDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29ydCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb3J0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IHJlZHVjZSwgcmVkdWNlUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19SSUdIVCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c0xlbmd0aCwgbWVtbykge1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gSVNfUklHSFQgPyBsZW5ndGggLSAxIDogMDtcbiAgICB2YXIgaSA9IElTX1JJR0hUID8gLTEgOiAxO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPCAyKSB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBpZiAoSVNfUklHSFQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7SVNfUklHSFQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuICBsZWZ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiAgcmlnaHQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzc29mKGdsb2JhbC5wcm9jZXNzKSA9PT0gJ3Byb2Nlc3MnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktcmVkdWNlJykubGVmdDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBDSFJPTUVfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxuLy8gQ2hyb21lIDgwLTgyIGhhcyBhIGNyaXRpY2FsIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA0OTk4MlxudmFyIENIUk9NRV9CVUcgPSAhSVNfTk9ERSAmJiBDSFJPTUVfVkVSU0lPTiA+IDc5ICYmIENIUk9NRV9WRVJTSU9OIDwgODM7XG52YXIgRk9SQ0VEID0gQ0hST01FX0JVRyB8fCAhYXJyYXlNZXRob2RJc1N0cmljdCgncmVkdWNlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGxlbmd0aCwgbGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykucmVkdWNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JlZHVjZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZWR1Y2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJlZHVjZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9yZWR1Y2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiLyoqXG4gKiBIZWxwZXIgY2xhc3NlcyBmb3IgTGF5b3V0RW5naW5lLlxuICpcbiAqIFN0cmF0ZWd5IHBhdHRlcm4gZm9yIHVzYWdlIG9mIGRpcmVjdGlvbiBtZXRob2RzIGZvciBoaWVyYXJjaGljYWwgbGF5b3V0cy5cbiAqL1xuXG4vKipcbiAqIEludGVyZmFjZSBkZWZpbml0aW9uIGZvciBkaXJlY3Rpb24gc3RyYXRlZ3kgY2xhc3Nlcy5cbiAqXG4gKiBUaGlzIGNsYXNzIGRlc2NyaWJlcyB0aGUgaW50ZXJmYWNlIGZvciB0aGUgU3RyYXRlZ3lcbiAqIHBhdHRlcm4gY2xhc3NlcyB1c2VkIHRvIGRpZmZlcmVudGlhdGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWxcbiAqIGRpcmVjdGlvbiBvZiBoaWVyYXJjaGljYWwgcmVzdWx0cy5cbiAqXG4gKiBGb3IgYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBjb29yZGluYXRlIHdpbGwgYmUgJ2ZpeGVkJywgbWVhbmluZyB0aGF0IGl0IGlzXG4gKiBkZXRlcm1pbmVkIGJ5IGxldmVsLlxuICogVGhlIG90aGVyIGNvb3JkaW5hdGUgaXMgJ3VuZml4ZWQnLCBtZWFuaW5nIHRoYXQgdGhlIG5vZGVzIG9uIGEgZ2l2ZW4gbGV2ZWxcbiAqIGNhbiBzdGlsbCBtb3ZlIGFsb25nIHRoYXQgY29vcmRpbmF0ZS4gU286XG4gKlxuICogLSBgdmVydGljYWxgIGxheW91dDogYHhgIHVuZml4ZWQsIGB5YCBmaXhlZCBwZXIgbGV2ZWxcbiAqIC0gYGhvcml6b250YWxgIGxheW91dDogYHhgIGZpeGVkIHBlciBsZXZlbCwgYHlgIHVuZml4ZWRcbiAqXG4gKiBUaGUgbG9jYWwgbWV0aG9kcyBhcmUgc3R1YnMgYW5kIHNob3VsZCBiZSByZWdhcmRlZCBhcyBhYnN0cmFjdC5cbiAqIERlcml2ZWQgY2xhc3NlcyAqKm11c3QqKiBpbXBsZW1lbnQgYWxsIHRoZSBtZXRob2RzIHRoZW1zZWx2ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgRGlyZWN0aW9uSW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGFic3RyYWN0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGluc3RhbnRpYXRlIGFic3RyYWN0IGNsYXNzIVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgZHVtbXkgY2FsbCB3aGljaCBpcyB1c2VkIHRvIHN1cHByZXNzIHRoZSBqc2RvYyBlcnJvcnMgb2YgdHlwZTpcbiAgICpcbiAgICogICBcIidwYXJhbScgaXMgYXNzaWduZWQgYSB2YWx1ZSBidXQgbmV2ZXIgdXNlZFwiXG4gICAqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGZha2VfdXNlKCkge1xuICAgIC8vIERvIG5vdGhpbmcgc3BlY2lhbFxuICB9XG5cbiAgLyoqXG4gICAqIFR5cGUgdG8gdXNlIHRvIHRyYW5zbGF0ZSBkeW5hbWljIGN1cnZlcyB0bywgaW4gdGhlIGNhc2Ugb2YgaGllcmFyY2hpY2FsIGxheW91dC5cbiAgICogRHluYW1pYyBjdXJ2ZXMgZG8gbm90IHdvcmsgZm9yIHRoZXNlLlxuICAgKlxuICAgKiBUaGUgdmFsdWUgc2hvdWxkIGJlIHBlcnBlbmRpY3VsYXIgdG8gdGhlIGFjdHVhbCBkaXJlY3Rpb24gb2YgdGhlIGxheW91dC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gRGlyZWN0aW9uLCBlaXRoZXIgJ3ZlcnRpY2FsJyBvciAnaG9yaXpvbnRhbCdcbiAgICovXG4gIGN1cnZlVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5hYnN0cmFjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGNvb3JkaW5hdGUgdGhhdCBpcyBub3QgZml4ZWQgZm9yIHRoaXMgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIG5vZGUgdG8gcmVhZFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSBvZiB0aGUgdW5maXhlZCBjb29yZGluYXRlXG4gICAqL1xuICBnZXRQb3NpdGlvbihub2RlKSB7XG4gICAgdGhpcy5mYWtlX3VzZShub2RlKTtcbiAgICByZXR1cm4gdGhpcy5hYnN0cmFjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdmFsdWUgb2YgdGhlIGNvb3JkaW5hdGUgdGhhdCBpcyBub3QgZml4ZWQgZm9yIHRoaXMgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIG5vZGUgdG8gYWRqdXN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvblxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xldmVsXSBpZiBzcGVjaWZpZWQsIHRoZSBoaWVyYXJjaHkgbGV2ZWwgdGhhdCB0aGlzIG5vZGUgc2hvdWxkIGJlIGZpeGVkIHRvXG4gICAqL1xuICBzZXRQb3NpdGlvbihub2RlLCBwb3NpdGlvbiwgbGV2ZWwgPSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmZha2VfdXNlKG5vZGUsIHBvc2l0aW9uLCBsZXZlbCk7XG4gICAgdGhpcy5hYnN0cmFjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd2lkdGggb2YgYSB0cmVlLlxuICAgKlxuICAgKiBBIGB0cmVlYCBoZXJlIGlzIGEgc3Vic2V0IG9mIG5vZGVzIHdpdGhpbiB0aGUgbmV0d29yayB3aGljaCBhcmUgbm90IGNvbm5lY3RlZCB0byBvdGhlciBub2RlcyxcbiAgICogb25seSBhbW9uZyB0aGVtc2VsdmVzLiBJbiBlc3NlbmNlLCBpdCBpcyBhIHN1Yi1uZXR3b3JrLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG51bWJlciBvZiBhIHRyZWVcbiAgICogQHJldHVybnMge251bWJlcn0gdGhlIHdpZHRoIG9mIGEgdHJlZSBpbiB0aGUgdmlldyBjb29yZGluYXRlc1xuICAgKi9cbiAgZ2V0VHJlZVNpemUoaW5kZXgpIHtcbiAgICB0aGlzLmZha2VfdXNlKGluZGV4KTtcbiAgICByZXR1cm4gdGhpcy5hYnN0cmFjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgYXJyYXkgb2Ygbm9kZXMgb24gdGhlIHVuZml4ZWQgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIE5vdGU6KiogY2hyb21lIGhhcyBub24tc3RhYmxlIHNvcnRpbmcgaW1wbGVtZW50YXRpb24sIHdoaWNoXG4gICAqIGhhcyBhIHRlbmRlbmN5IHRvIGNoYW5nZSB0aGUgb3JkZXIgb2YgdGhlIGFycmF5IGl0ZW1zLFxuICAgKiBldmVuIGlmIHRoZSBjdXN0b20gc29ydCBmdW5jdGlvbiByZXR1cm5zIDAuXG4gICAqXG4gICAqIEZvciB0aGlzIHJlYXNvbiwgYW4gZXh0ZXJuYWwgc29ydCBpbXBsZW1lbnRhdGlvbiBpcyB1c2VkLFxuICAgKiB3aGljaCBoYXMgdGhlIGFkZGVkIGJlbmVmaXQgb2YgYmVpbmcgZmFzdGVyIHRoYW4gdGhlIHN0YW5kYXJkXG4gICAqIHBsYXRmb3JtcyBpbXBsZW1lbnRhdGlvbi4gVGhpcyBoYXMgYmVlbiB2ZXJpZmllZCBvbiBgbm9kZS5qc2AsXG4gICAqIGBmaXJlZm94YCBhbmQgYGNocm9tZWAgKGFsbCBsaW51eCkuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBub2RlQXJyYXkgYXJyYXkgb2Ygbm9kZXMgdG8gc29ydFxuICAgKi9cbiAgc29ydChub2RlQXJyYXkpIHtcbiAgICB0aGlzLmZha2VfdXNlKG5vZGVBcnJheSk7XG4gICAgdGhpcy5hYnN0cmFjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiB0aGUgZml4ZWQgY29vcmRpbmF0ZSBvZiB0aGUgbm9kZSB0byB0aGUgZ2l2ZW4gbGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlIFRoZSBub2RlIHRvIGFkanVzdFxuICAgKiBAcGFyYW0ge251bWJlcn0gbGV2ZWwgVGhlIGxldmVsIHRvIGZpeCB0b1xuICAgKi9cbiAgZml4KG5vZGUsIGxldmVsKSB7XG4gICAgdGhpcy5mYWtlX3VzZShub2RlLCBsZXZlbCk7XG4gICAgdGhpcy5hYnN0cmFjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBvZmZzZXQgdG8gdGhlIHVuZml4ZWQgY29vcmRpbmF0ZSBvZiB0aGUgZ2l2ZW4gbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlSWR9IG5vZGVJZCBJZCBvZiB0aGUgbm9kZSB0byBhZGp1c3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpZmYgT2Zmc2V0IHRvIGFkZCB0byB0aGUgdW5maXhlZCBjb29yZGluYXRlXG4gICAqL1xuICBzaGlmdChub2RlSWQsIGRpZmYpIHtcbiAgICB0aGlzLmZha2VfdXNlKG5vZGVJZCwgZGlmZik7XG4gICAgdGhpcy5hYnN0cmFjdCgpO1xuICB9XG59XG5cbi8qKlxuICogVmVydGljYWwgU3RyYXRlZ3lcbiAqXG4gKiBDb29yZGluYXRlIGB5YCBpcyBmaXhlZCBvbiBsZXZlbHMsIGNvb3JkaW5hdGUgYHhgIGlzIHVuZml4ZWQuXG4gKlxuICogQGF1Z21lbnRzIERpcmVjdGlvbkludGVyZmFjZVxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVmVydGljYWxTdHJhdGVneSBleHRlbmRzIERpcmVjdGlvbkludGVyZmFjZSB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbGF5b3V0IHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IExheW91dEVuZ2luZSBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGxheW91dCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgY3VydmVUeXBlKCkge1xuICAgIHJldHVybiBcImhvcml6b250YWxcIjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRQb3NpdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUueDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzZXRQb3NpdGlvbihub2RlLCBwb3NpdGlvbiwgbGV2ZWwgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAobGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sYXlvdXQuaGllcmFyY2hpY2FsLmFkZFRvT3JkZXJpbmcobm9kZSwgbGV2ZWwpO1xuICAgIH1cbiAgICBub2RlLnggPSBwb3NpdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRUcmVlU2l6ZShpbmRleCkge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMubGF5b3V0LmhpZXJhcmNoaWNhbC5nZXRUcmVlU2l6ZShcbiAgICAgIHRoaXMubGF5b3V0LmJvZHkubm9kZXMsXG4gICAgICBpbmRleFxuICAgICk7XG4gICAgcmV0dXJuIHsgbWluOiByZXMubWluX3gsIG1heDogcmVzLm1heF94IH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc29ydChub2RlQXJyYXkpIHtcbiAgICBub2RlQXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEueCAtIGIueDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBmaXgobm9kZSwgbGV2ZWwpIHtcbiAgICBub2RlLnkgPSB0aGlzLmxheW91dC5vcHRpb25zLmhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gKiBsZXZlbDtcbiAgICBub2RlLm9wdGlvbnMuZml4ZWQueSA9IHRydWU7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc2hpZnQobm9kZUlkLCBkaWZmKSB7XG4gICAgdGhpcy5sYXlvdXQuYm9keS5ub2Rlc1tub2RlSWRdLnggKz0gZGlmZjtcbiAgfVxufVxuXG4vKipcbiAqIEhvcml6b250YWwgU3RyYXRlZ3lcbiAqXG4gKiBDb29yZGluYXRlIGB4YCBpcyBmaXhlZCBvbiBsZXZlbHMsIGNvb3JkaW5hdGUgYHlgIGlzIHVuZml4ZWQuXG4gKlxuICogQGF1Z21lbnRzIERpcmVjdGlvbkludGVyZmFjZVxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgSG9yaXpvbnRhbFN0cmF0ZWd5IGV4dGVuZHMgRGlyZWN0aW9uSW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBsYXlvdXQgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgTGF5b3V0RW5naW5lIGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IobGF5b3V0KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBjdXJ2ZVR5cGUoKSB7XG4gICAgcmV0dXJuIFwidmVydGljYWxcIjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRQb3NpdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUueTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzZXRQb3NpdGlvbihub2RlLCBwb3NpdGlvbiwgbGV2ZWwgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAobGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sYXlvdXQuaGllcmFyY2hpY2FsLmFkZFRvT3JkZXJpbmcobm9kZSwgbGV2ZWwpO1xuICAgIH1cbiAgICBub2RlLnkgPSBwb3NpdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRUcmVlU2l6ZShpbmRleCkge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMubGF5b3V0LmhpZXJhcmNoaWNhbC5nZXRUcmVlU2l6ZShcbiAgICAgIHRoaXMubGF5b3V0LmJvZHkubm9kZXMsXG4gICAgICBpbmRleFxuICAgICk7XG4gICAgcmV0dXJuIHsgbWluOiByZXMubWluX3ksIG1heDogcmVzLm1heF95IH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc29ydChub2RlQXJyYXkpIHtcbiAgICBub2RlQXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEueSAtIGIueTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBmaXgobm9kZSwgbGV2ZWwpIHtcbiAgICBub2RlLnggPSB0aGlzLmxheW91dC5vcHRpb25zLmhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gKiBsZXZlbDtcbiAgICBub2RlLm9wdGlvbnMuZml4ZWQueCA9IHRydWU7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc2hpZnQobm9kZUlkLCBkaWZmKSB7XG4gICAgdGhpcy5sYXlvdXQuYm9keS5ub2Rlc1tub2RlSWRdLnkgKz0gZGlmZjtcbiAgfVxufVxuXG5leHBvcnQgeyBIb3Jpem9udGFsU3RyYXRlZ3ksIFZlcnRpY2FsU3RyYXRlZ3kgfTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZXZlcnkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZXZlcnk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZXZlcnknKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfSwge1xuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5ldmVyeScpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmV2ZXJ5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2V2ZXJ5Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmV2ZXJ5O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5ldmVyeSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9ldmVyeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJ0eXBlIExldmVscyA9IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj47XG50eXBlIElkID0gc3RyaW5nIHwgbnVtYmVyO1xuaW50ZXJmYWNlIEVkZ2Uge1xuICBjb25uZWN0ZWQ6IGJvb2xlYW47XG4gIGZyb206IE5vZGU7XG4gIGZyb21JZDogSWQ7XG4gIHRvOiBOb2RlO1xuICB0b0lkOiBJZDtcbn1cbmludGVyZmFjZSBOb2RlIHtcbiAgaWQ6IElkO1xuICBlZGdlczogRWRnZVtdO1xufVxuXG4vKipcbiAqIFRyeSB0byBhc3NpZ24gbGV2ZWxzIHRvIG5vZGVzIGFjY29yZGluZyB0byB0aGVpciBwb3NpdGlvbnMgaW4gdGhlIGN5Y2xpYyDigJxoaWVyYXJjaHnigJ0uXG4gKlxuICogQHBhcmFtIG5vZGVzIC0gVmlzaWJsZSBub2RlcyBvZiB0aGUgZ3JhcGguXG4gKiBAcGFyYW0gbGV2ZWxzIC0gSWYgcHJlc2VudCBsZXZlbHMgd2lsbCBiZSBhZGRlZCB0byBpdCwgaWYgbm90IGEgbmV3IG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBAcmV0dXJucyBQb3B1bGF0ZWQgbm9kZSBsZXZlbHMuXG4gKi9cbmZ1bmN0aW9uIGZpbGxMZXZlbHNCeURpcmVjdGlvbkN5Y2xpYyhcbiAgbm9kZXM6IE1hcDxJZCwgTm9kZT4sXG4gIGxldmVsczogTGV2ZWxzXG4pOiBMZXZlbHMge1xuICBjb25zdCBlZGdlcyA9IG5ldyBTZXQ8RWRnZT4oKTtcbiAgbm9kZXMuZm9yRWFjaCgobm9kZSk6IHZvaWQgPT4ge1xuICAgIG5vZGUuZWRnZXMuZm9yRWFjaCgoZWRnZSk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGVkZ2UuY29ubmVjdGVkKSB7XG4gICAgICAgIGVkZ2VzLmFkZChlZGdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZWRnZXMuZm9yRWFjaCgoZWRnZSk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGZyb21JZCA9IGVkZ2UuZnJvbS5pZDtcbiAgICBjb25zdCB0b0lkID0gZWRnZS50by5pZDtcblxuICAgIGlmIChsZXZlbHNbZnJvbUlkXSA9PSBudWxsKSB7XG4gICAgICBsZXZlbHNbZnJvbUlkXSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGxldmVsc1t0b0lkXSA9PSBudWxsIHx8IGxldmVsc1tmcm9tSWRdID49IGxldmVsc1t0b0lkXSkge1xuICAgICAgbGV2ZWxzW3RvSWRdID0gbGV2ZWxzW2Zyb21JZF0gKyAxO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGxldmVscztcbn1cblxuLyoqXG4gKiBBc3NpZ24gbGV2ZWxzIHRvIG5vZGVzIGFjY29yZGluZyB0byB0aGVpciBwb3NpdGlvbnMgaW4gdGhlIGhpZXJhcmNoeS4gTGVhdmVzIHdpbGwgYmUgbGluZWQgdXAgYXQgdGhlIGJvdHRvbSBhbmQgYWxsIG90aGVyIG5vZGVzIGFzIGNsb3NlIHRvIHRoZWlyIGNoaWxkcmVuIGFzIHBvc3NpYmxlLlxuICpcbiAqIEBwYXJhbSBub2RlcyAtIFZpc2libGUgbm9kZXMgb2YgdGhlIGdyYXBoLlxuICogQHJldHVybnMgUG9wdWxhdGVkIG5vZGUgbGV2ZWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsbExldmVsc0J5RGlyZWN0aW9uTGVhdmVzKG5vZGVzOiBNYXA8SWQsIE5vZGU+KTogTGV2ZWxzIHtcbiAgcmV0dXJuIGZpbGxMZXZlbHNCeURpcmVjdGlvbihcbiAgICAvLyBQaWNrIG9ubHkgbGVhdmVzIChub2RlcyB3aXRob3V0IGNoaWxkcmVuKS5cbiAgICAobm9kZSk6IGJvb2xlYW4gPT5cbiAgICAgIG5vZGUuZWRnZXNcbiAgICAgICAgLy8gVGFrZSBvbmx5IHZpc2libGUgbm9kZXMgaW50byBhY2NvdW50LlxuICAgICAgICAuZmlsdGVyKChlZGdlKTogYm9vbGVhbiA9PiBub2Rlcy5oYXMoZWRnZS50b0lkKSlcbiAgICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgZWRnZXMgbGVhZCB0byB0aGlzIG5vZGUgKGxlYWYpLlxuICAgICAgICAuZXZlcnkoKGVkZ2UpOiBib29sZWFuID0+IGVkZ2UudG8gPT09IG5vZGUpLFxuICAgIC8vIFVzZSB0aGUgbG93ZXN0IGxldmVsLlxuICAgIChuZXdMZXZlbCwgb2xkTGV2ZWwpOiBib29sZWFuID0+IG9sZExldmVsID4gbmV3TGV2ZWwsXG4gICAgLy8gR28gYWdhaW5zdCB0aGUgZGlyZWN0aW9uIG9mIHRoZSBlZGdlcy5cbiAgICBcImZyb21cIixcbiAgICBub2Rlc1xuICApO1xufVxuXG4vKipcbiAqIEFzc2lnbiBsZXZlbHMgdG8gbm9kZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgaGllcmFyY2h5LiBSb290cyB3aWxsIGJlIGxpbmVkIHVwIGF0IHRoZSB0b3AgYW5kIGFsbCBub2RlcyBhcyBjbG9zZSB0byB0aGVpciBwYXJlbnRzIGFzIHBvc3NpYmxlLlxuICpcbiAqIEBwYXJhbSBub2RlcyAtIFZpc2libGUgbm9kZXMgb2YgdGhlIGdyYXBoLlxuICogQHJldHVybnMgUG9wdWxhdGVkIG5vZGUgbGV2ZWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsbExldmVsc0J5RGlyZWN0aW9uUm9vdHMobm9kZXM6IE1hcDxJZCwgTm9kZT4pOiBMZXZlbHMge1xuICByZXR1cm4gZmlsbExldmVsc0J5RGlyZWN0aW9uKFxuICAgIC8vIFBpY2sgb25seSByb290cyAobm9kZXMgd2l0aG91dCBwYXJlbnRzKS5cbiAgICAobm9kZSk6IGJvb2xlYW4gPT5cbiAgICAgIG5vZGUuZWRnZXNcbiAgICAgICAgLy8gVGFrZSBvbmx5IHZpc2libGUgbm9kZXMgaW50byBhY2NvdW50LlxuICAgICAgICAuZmlsdGVyKChlZGdlKTogYm9vbGVhbiA9PiBub2Rlcy5oYXMoZWRnZS50b0lkKSlcbiAgICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgZWRnZXMgbGVhZCBmcm9tIHRoaXMgbm9kZSAocm9vdCkuXG4gICAgICAgIC5ldmVyeSgoZWRnZSk6IGJvb2xlYW4gPT4gZWRnZS5mcm9tID09PSBub2RlKSxcbiAgICAvLyBVc2UgdGhlIGhpZ2hlc3QgbGV2ZWwuXG4gICAgKG5ld0xldmVsLCBvbGRMZXZlbCk6IGJvb2xlYW4gPT4gb2xkTGV2ZWwgPCBuZXdMZXZlbCxcbiAgICAvLyBHbyBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBlZGdlcy5cbiAgICBcInRvXCIsXG4gICAgbm9kZXNcbiAgKTtcbn1cblxuLyoqXG4gKiBBc3NpZ24gbGV2ZWxzIHRvIG5vZGVzIGFjY29yZGluZyB0byB0aGVpciBwb3NpdGlvbnMgaW4gdGhlIGhpZXJhcmNoeS5cbiAqXG4gKiBAcGFyYW0gaXNFbnRyeU5vZGUgLSBDaGVja3MgYW5kIHJldHVybiB0cnVlIGlmIHRoZSBncmFwaCBzaG91bGQgYmUgdHJhdmVyc2VkIGZyb20gdGhpcyBub2RlLlxuICogQHBhcmFtIHNob3VsZExldmVsQmVSZXBsYWNlZCAtIENoZWNrcyBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSBsZXZlbCBvZiBnaXZlbiBub2RlIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRoZSBuZXcgdmFsdWUuXG4gKiBAcGFyYW0gZGlyZWN0aW9uIC0gV2hldGVyIHRoZSBncmFwaCBzaG91bGQgYmUgdHJhdmVyc2VkIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGVkZ2VzIGBcInRvXCJgIG9yIGluIHRoZSBvdGhlciB3YXkgYFwiZnJvbVwiYC5cbiAqIEBwYXJhbSBub2RlcyAtIFZpc2libGUgbm9kZXMgb2YgdGhlIGdyYXBoLlxuICogQHJldHVybnMgUG9wdWxhdGVkIG5vZGUgbGV2ZWxzLlxuICovXG5mdW5jdGlvbiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb24oXG4gIGlzRW50cnlOb2RlOiAobm9kZTogTm9kZSkgPT4gYm9vbGVhbixcbiAgc2hvdWxkTGV2ZWxCZVJlcGxhY2VkOiAobmV3TGV2ZWw6IG51bWJlciwgb2xkTGV2ZWw6IG51bWJlcikgPT4gYm9vbGVhbixcbiAgZGlyZWN0aW9uOiBcInRvXCIgfCBcImZyb21cIixcbiAgbm9kZXM6IE1hcDxJZCwgTm9kZT5cbik6IExldmVscyB7XG4gIGNvbnN0IGxldmVscyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy8gSWYgYWN5Y2xpYywgdGhlIGdyYXBoIGNhbiBiZSB3YWxrZWQgdGhyb3VnaCB3aXRoIChtb3N0IGxpa2VseSB3YXkpIGZld2VyXG4gIC8vIHN0ZXBzIHRoYW4gdGhlIG51bWJlciBiZWxsb3cuIFRoZSBleGFjdCB2YWx1ZSBpc24ndCB0b28gaW1wb3J0YW50IGFzIGxvbmdcbiAgLy8gYXMgaXQncyBxdWljayB0byBjb21wdXRlIChkb2Vzbid0IGltcGFjdCBhY3ljbGljIGdyYXBocyB0b28gbXVjaCksIGlzXG4gIC8vIGhpZ2hlciB0aGFuIHRoZSBudW1iZXIgb2Ygc3RlcHMgYWN0dWFsbHkgbmVlZGVkIChkb2Vzbid0IGN1dCBvZmYgYmVmb3JlXG4gIC8vIGFjeWNsaWMgZ3JhcGggaXMgd2Fsa2VkIHRocm91Z2gpIGFuZCBwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyAoY3V0cyBvZmYgZm9yXG4gIC8vIGN5Y2xpYyBncmFwaHMpLlxuICBjb25zdCBsaW1pdCA9IFsuLi5ub2Rlcy52YWx1ZXMoKV0ucmVkdWNlPG51bWJlcj4oXG4gICAgKGFjYywgbm9kZSk6IG51bWJlciA9PiBhY2MgKyAxICsgbm9kZS5lZGdlcy5sZW5ndGgsXG4gICAgMFxuICApO1xuXG4gIGNvbnN0IGVkZ2VJZFByb3A6IFwiZnJvbUlkXCIgfCBcInRvSWRcIiA9IChkaXJlY3Rpb24gKyBcIklkXCIpIGFzIFwiZnJvbUlkXCIgfCBcInRvSWRcIjtcbiAgY29uc3QgbmV3TGV2ZWxEaWZmID0gZGlyZWN0aW9uID09PSBcInRvXCIgPyAxIDogLTE7XG5cbiAgZm9yIChjb25zdCBbZW50cnlOb2RlSWQsIGVudHJ5Tm9kZV0gb2Ygbm9kZXMpIHtcbiAgICBpZiAoXG4gICAgICAvLyBTa2lwIGlmIHRoZSBub2RlIGlzIG5vdCB2aXNpYmxlLlxuICAgICAgIW5vZGVzLmhhcyhlbnRyeU5vZGVJZCkgfHxcbiAgICAgIC8vIFNraXAgaWYgdGhlIG5vZGUgaXMgbm90IGFuIGVudHJ5IG5vZGUuXG4gICAgICAhaXNFbnRyeU5vZGUoZW50cnlOb2RlKVxuICAgICkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gTGluZSB1cCBhbGwgdGhlIGVudHJ5IG5vZGVzIG9uIGxldmVsIDAuXG4gICAgbGV2ZWxzW2VudHJ5Tm9kZUlkXSA9IDA7XG5cbiAgICBjb25zdCBzdGFjazogTm9kZVtdID0gW2VudHJ5Tm9kZV07XG4gICAgbGV0IGRvbmUgPSAwO1xuICAgIGxldCBub2RlOiBOb2RlIHwgdW5kZWZpbmVkO1xuICAgIHdoaWxlICgobm9kZSA9IHN0YWNrLnBvcCgpKSkge1xuICAgICAgaWYgKCFub2Rlcy5oYXMoZW50cnlOb2RlSWQpKSB7XG4gICAgICAgIC8vIFNraXAgaWYgdGhlIG5vZGUgaXMgbm90IHZpc2libGUuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdMZXZlbCA9IGxldmVsc1tub2RlLmlkXSArIG5ld0xldmVsRGlmZjtcblxuICAgICAgbm9kZS5lZGdlc1xuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChlZGdlKTogYm9vbGVhbiA9PlxuICAgICAgICAgICAgLy8gSWdub3JlIGRpc2Nvbm5lY3RlZCBlZGdlcy5cbiAgICAgICAgICAgIGVkZ2UuY29ubmVjdGVkICYmXG4gICAgICAgICAgICAvLyBJZ25vcmUgY2lyY3VsYXIgZWRnZXMuXG4gICAgICAgICAgICBlZGdlLnRvICE9PSBlZGdlLmZyb20gJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBlZGdlcyBsZWFkaW5nIHRvIHRoZSBub2RlIHRoYXQncyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuICAgICAgICAgICAgZWRnZVtkaXJlY3Rpb25dICE9PSBub2RlICYmXG4gICAgICAgICAgICAvLyBJZ25vcmUgZWRnZXMgY29ubmVjdGluZyB0byBhbiBpbnZpc2libGUgbm9kZS5cbiAgICAgICAgICAgIG5vZGVzLmhhcyhlZGdlLnRvSWQpICYmXG4gICAgICAgICAgICAvLyBJZ25vcmUgZWRnZXMgY29ubmVjdGluZyBmcm9tIGFuIGludmlzaWJsZSBub2RlLlxuICAgICAgICAgICAgbm9kZXMuaGFzKGVkZ2UuZnJvbUlkKVxuICAgICAgICApXG4gICAgICAgIC5mb3JFYWNoKChlZGdlKTogdm9pZCA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZUlkID0gZWRnZVtlZGdlSWRQcm9wXTtcbiAgICAgICAgICBjb25zdCBvbGRMZXZlbCA9IGxldmVsc1t0YXJnZXROb2RlSWRdO1xuXG4gICAgICAgICAgaWYgKG9sZExldmVsID09IG51bGwgfHwgc2hvdWxkTGV2ZWxCZVJlcGxhY2VkKG5ld0xldmVsLCBvbGRMZXZlbCkpIHtcbiAgICAgICAgICAgIGxldmVsc1t0YXJnZXROb2RlSWRdID0gbmV3TGV2ZWw7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGVkZ2VbZGlyZWN0aW9uXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgaWYgKGRvbmUgPiBsaW1pdCkge1xuICAgICAgICAvLyBUaGlzIHdvdWxkIHJ1biBmb3JldmVyIG9uIGEgY3ljbGljIGdyYXBoLlxuICAgICAgICByZXR1cm4gZmlsbExldmVsc0J5RGlyZWN0aW9uQ3ljbGljKG5vZGVzLCBsZXZlbHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKytkb25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZXZlbHM7XG59XG4iLCAiLyoqXG4gKiBUaGVyZSdzIGEgbWl4LXVwIHdpdGggdGVybXMgaW4gdGhlIGNvZGUuIEZvbGxvd2luZyBhcmUgdGhlIGZvcm1hbCBkZWZpbml0aW9uczpcbiAqXG4gKiAgIHRyZWUgICAtIGEgc3RyaWN0IGhpZXJhcmNoaWNhbCBuZXR3b3JrLCBpLmUuIGV2ZXJ5IG5vZGUgaGFzIGF0IG1vc3Qgb25lIHBhcmVudFxuICogICBmb3Jlc3QgLSBhIGNvbGxlY3Rpb24gb2YgdHJlZXMuIFRoZXNlIGRpc3RpbmN0IHRyZWVzIGFyZSB0aHVzIG5vdCBjb25uZWN0ZWQuXG4gKlxuICogU286XG4gKiAtIGluIGEgbmV0d29yayB0aGF0IGlzIG5vdCBhIHRyZWUsIHRoZXJlIGV4aXN0IG5vZGVzIHdpdGggbXVsdGlwbGUgcGFyZW50cy5cbiAqIC0gYSBuZXR3b3JrIGNvbnNpc3Rpbmcgb2YgdW5jb25uZWN0ZWQgc3ViLW5ldHdvcmtzLCBvZiB3aGljaCBhdCBsZWFzdCBvbmVcbiAqICAgaXMgbm90IGEgdHJlZSwgaXMgbm90IGEgZm9yZXN0LlxuICpcbiAqIEluIHRoZSBjb2RlLCB0aGUgZGVmaW5pdGlvbnMgYXJlOlxuICpcbiAqICAgdHJlZSAgIC0gYW55IGRpc2Nvbm5lY3RlZCBzdWItbmV0d29yaywgc3RyaWN0IGhpZXJhcmNoaWNhbCBvciBub3QuXG4gKiAgIGZvcmVzdCAtIGEgYnVuY2ggb2YgdGhlc2Ugc3ViLW5ldHdvcmtzXG4gKlxuICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0cmVlIGFuZCBub3QtdHJlZSBpcyBpbXBvcnRhbnQgaW4gdGhlIGNvZGUsIG5vdGFibHkgd2l0aGluXG4gKiB0byB0aGUgYmxvY2stc2hpZnRpbmcgYWxnb3JpdGhtLiBUaGUgYWxnb3JpdGhtIGFzc3VtZXMgZm9ybWFsIHRyZWVzIGFuZCBmYWlsc1xuICogZm9yIG5vdC10cmVlcywgb2Z0ZW4gaW4gYSBzcGVjdGFjdWxhciBtYW5uZXIgKHNlYXJjaCBmb3IgJ2V4cGxvZGluZyBuZXR3b3JrJyBpbiB0aGUgaXNzdWVzKS5cbiAqXG4gKiBJbiBvcmRlciB0byBkaXN0aW5ndWlzaCB0aGUgZGVmaW5pdGlvbnMgaW4gdGhlIGZvbGxvd2luZyBjb2RlLCB0aGUgYWRqZWN0aXZlICdmb3JtYWwnIGlzXG4gKiB1c2VkLiBJZiAnZm9ybWFsJyBpcyBhYnNlbnQsIHlvdSBtdXN0IGFzc3VtZSB0aGUgbm9uLWZvcm1hbCBkZWZpbml0aW9uLlxuICpcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIE5PVEVTXG4gKiA9PT09PVxuICpcbiAqIEEgaGllcmFyY2hpY2FsIGxheW91dCBpcyBhIGRpZmZlcmVudCB0aGluZyBmcm9tIGEgaGllcmFyY2hpY2FsIG5ldHdvcmsuXG4gKiBUaGUgbGF5b3V0IGlzIGEgd2F5IHRvIGFycmFuZ2UgdGhlIG5vZGVzIGluIHRoZSB2aWV3OyB0aGlzIGNhbiBiZSBkb25lXG4gKiBvbiBub24taGllcmFyY2hpY2FsIG5ldHdvcmtzIGFzIHdlbGwuIFRoZSBjb252ZXJzZSBpcyBhbHNvIHBvc3NpYmxlLlxuICovXG5cInVzZSBzdHJpY3RcIjtcbmltcG9ydCB7XG4gIEFsZWEsXG4gIGRlZXBFeHRlbmQsXG4gIGZvckVhY2gsXG4gIG1lcmdlT3B0aW9ucyxcbiAgc2VsZWN0aXZlRGVlcEV4dGVuZCxcbn0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IE5ldHdvcmtVdGlsIGZyb20gXCIuLi9OZXR3b3JrVXRpbFwiO1xuaW1wb3J0IHtcbiAgSG9yaXpvbnRhbFN0cmF0ZWd5LFxuICBWZXJ0aWNhbFN0cmF0ZWd5LFxufSBmcm9tIFwiLi9jb21wb25lbnRzL0RpcmVjdGlvblN0cmF0ZWd5LmpzXCI7XG5pbXBvcnQge1xuICBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25MZWF2ZXMsXG4gIGZpbGxMZXZlbHNCeURpcmVjdGlvblJvb3RzLFxufSBmcm9tIFwiLi9sYXlvdXQtZW5naW5lXCI7XG5cbi8qKlxuICogQ29udGFpbmVyIGZvciBkZXJpdmVkIGRhdGEgb24gY3VycmVudCBuZXR3b3JrLCByZWxhdGluZyB0byBoaWVyYXJjaHkuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgSGllcmFyY2hpY2FsU3RhdHVzIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2hpbGRyZW5SZWZlcmVuY2UgPSB7fTsgLy8gY2hpbGQgaWQncyBwZXIgbm9kZSBpZFxuICAgIHRoaXMucGFyZW50UmVmZXJlbmNlID0ge307IC8vIHBhcmVudCBpZCdzIHBlciBub2RlIGlkXG4gICAgdGhpcy50cmVlcyA9IHt9OyAvLyB0cmVlIGlkIHBlciBub2RlIGlkOyBpLmUuIHRvIHdoaWNoIHRyZWUgZG9lcyBnaXZlbiBub2RlIGlkIGJlbG9uZ1xuXG4gICAgdGhpcy5kaXN0cmlidXRpb25PcmRlcmluZyA9IHt9OyAvLyBUaGUgbm9kZXMgcGVyIGxldmVsLCBpbiB0aGUgZGlzcGxheSBvcmRlclxuICAgIHRoaXMubGV2ZWxzID0ge307IC8vIGhpZXJhcmNoeSBsZXZlbCBwZXIgbm9kZSBpZFxuICAgIHRoaXMuZGlzdHJpYnV0aW9uSW5kZXggPSB7fTsgLy8gVGhlIHBvc2l0aW9uIG9mIHRoZSBub2RlIGluIHRoZSBsZXZlbCBzb3J0aW5nIG9yZGVyLCBwZXIgbm9kZSBpZC5cblxuICAgIHRoaXMuaXNUcmVlID0gZmFsc2U7IC8vIFRydWUgaWYgY3VycmVudCBuZXR3b3JrIGlzIGEgZm9ybWFsIHRyZWVcbiAgICB0aGlzLnRyZWVJbmRleCA9IC0xOyAvLyBIaWdoZXN0IHRyZWUgaWQgaW4gY3VycmVudCBuZXR3b3JrLlxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgcmVsYXRpb24gYmV0d2VlbiBnaXZlbiBub2RlcyB0byB0aGUgY3VycmVudCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBwYXJlbnROb2RlSWRcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBjaGlsZE5vZGVJZFxuICAgKi9cbiAgYWRkUmVsYXRpb24ocGFyZW50Tm9kZUlkLCBjaGlsZE5vZGVJZCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuUmVmZXJlbmNlW3BhcmVudE5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jaGlsZHJlblJlZmVyZW5jZVtwYXJlbnROb2RlSWRdID0gW107XG4gICAgfVxuICAgIHRoaXMuY2hpbGRyZW5SZWZlcmVuY2VbcGFyZW50Tm9kZUlkXS5wdXNoKGNoaWxkTm9kZUlkKTtcblxuICAgIGlmICh0aGlzLnBhcmVudFJlZmVyZW5jZVtjaGlsZE5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wYXJlbnRSZWZlcmVuY2VbY2hpbGROb2RlSWRdID0gW107XG4gICAgfVxuICAgIHRoaXMucGFyZW50UmVmZXJlbmNlW2NoaWxkTm9kZUlkXS5wdXNoKHBhcmVudE5vZGVJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgZm9yIGEgZm9ybWFsIHRyZWUgb3IgZm9ybWFsIGZvcmVzdC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgY2FzZSBpZiBldmVyeSBub2RlIGhhcyBhdCBtb3N0IG9uZSBwYXJlbnQuXG4gICAqXG4gICAqIFByZTogcGFyZW50UmVmZXJlbmNlIGluaXQnZWQgcHJvcGVybHkgZm9yIGN1cnJlbnQgbmV0d29ya1xuICAgKi9cbiAgY2hlY2tJZlRyZWUoKSB7XG4gICAgZm9yIChjb25zdCBpIGluIHRoaXMucGFyZW50UmVmZXJlbmNlKSB7XG4gICAgICBpZiAodGhpcy5wYXJlbnRSZWZlcmVuY2VbaV0ubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLmlzVHJlZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pc1RyZWUgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHNlcGFyYXRlIHRyZWVzIGluIHRoZSBjdXJyZW50IG5ldHdvcmsuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBudW1UcmVlcygpIHtcbiAgICByZXR1cm4gdGhpcy50cmVlSW5kZXggKyAxOyAvLyBUaGlzIGFzc3VtZXMgdGhlIGluZGV4ZXMgYXJlIGFzc2lnbmVkIGNvbnNlY2l0aXZlbHlcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSB0cmVlIGlkIHRvIGEgbm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB0cmVlSWRcbiAgICovXG4gIHNldFRyZWVJbmRleChub2RlLCB0cmVlSWQpIHtcbiAgICBpZiAodHJlZUlkID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gRG9uJ3QgYm90aGVyXG5cbiAgICBpZiAodGhpcy50cmVlc1tub2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRyZWVzW25vZGUuaWRdID0gdHJlZUlkO1xuICAgICAgdGhpcy50cmVlSW5kZXggPSBNYXRoLm1heCh0cmVlSWQsIHRoaXMudHJlZUluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIGxldmVsIGZvciBnaXZlbiBpZCBpcyBkZWZpbmVkLlxuICAgKlxuICAgKiBTZXRzIGxldmVsIHRvIHplcm8gZm9yIGdpdmVuIG5vZGUgaWQgaWYgbm90IGFscmVhZHkgcHJlc2VudFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKi9cbiAgZW5zdXJlTGV2ZWwobm9kZUlkKSB7XG4gICAgaWYgKHRoaXMubGV2ZWxzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sZXZlbHNbbm9kZUlkXSA9IDA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgbWF4aW11bSBsZXZlbCBvZiBhIGJyYW5jaC5cbiAgICpcbiAgICogVE9ETzogTmV2ZXIgZW50ZXJlZDsgZmluZCBhIHRlc3QgY2FzZSB0byB0ZXN0IHRoaXMhXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRNYXhMZXZlbChub2RlSWQpIHtcbiAgICBjb25zdCBhY2N1bXVsYXRvciA9IHt9O1xuXG4gICAgY29uc3QgX2dldE1heExldmVsID0gKG5vZGVJZCkgPT4ge1xuICAgICAgaWYgKGFjY3VtdWxhdG9yW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3Jbbm9kZUlkXTtcbiAgICAgIH1cbiAgICAgIGxldCBsZXZlbCA9IHRoaXMubGV2ZWxzW25vZGVJZF07XG4gICAgICBpZiAodGhpcy5jaGlsZHJlblJlZmVyZW5jZVtub2RlSWRdKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlblJlZmVyZW5jZVtub2RlSWRdO1xuICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldmVsID0gTWF0aC5tYXgobGV2ZWwsIF9nZXRNYXhMZXZlbChjaGlsZHJlbltpXSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWNjdW11bGF0b3Jbbm9kZUlkXSA9IGxldmVsO1xuICAgICAgcmV0dXJuIGxldmVsO1xuICAgIH07XG5cbiAgICByZXR1cm4gX2dldE1heExldmVsKG5vZGVJZCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlQVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVCXG4gICAqL1xuICBsZXZlbERvd25zdHJlYW0obm9kZUEsIG5vZGVCKSB7XG4gICAgaWYgKHRoaXMubGV2ZWxzW25vZGVCLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzZXQgaW5pdGlhbCBsZXZlbFxuICAgICAgaWYgKHRoaXMubGV2ZWxzW25vZGVBLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMubGV2ZWxzW25vZGVBLmlkXSA9IDA7XG4gICAgICB9XG4gICAgICAvLyBzZXQgbGV2ZWxcbiAgICAgIHRoaXMubGV2ZWxzW25vZGVCLmlkXSA9IHRoaXMubGV2ZWxzW25vZGVBLmlkXSArIDE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNtYWxsIHV0aWwgbWV0aG9kIHRvIHNldCB0aGUgbWluaW11bSBsZXZlbHMgb2YgdGhlIG5vZGVzIHRvIHplcm8uXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBub2Rlc1xuICAgKi9cbiAgc2V0TWluTGV2ZWxUb1plcm8obm9kZXMpIHtcbiAgICBsZXQgbWluTGV2ZWwgPSAxZTk7XG4gICAgLy8gZ2V0IHRoZSBtaW5pbXVtIGxldmVsXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gbm9kZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgaWYgKHRoaXMubGV2ZWxzW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG1pbkxldmVsID0gTWF0aC5taW4odGhpcy5sZXZlbHNbbm9kZUlkXSwgbWluTGV2ZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc3VidHJhY3QgdGhlIG1pbmltdW0gZnJvbSB0aGUgc2V0IHNvIHdlIGhhdmUgYSByYW5nZSBzdGFydGluZyBmcm9tIDBcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5sZXZlbHNbbm9kZUlkXSAtPSBtaW5MZXZlbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbiBhbmQgbWF4IHh5LWNvb3JkaW5hdGVzIG9mIGEgZ2l2ZW4gdHJlZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gbm9kZXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gICAqIEByZXR1cm5zIHt7bWluX3g6IG51bWJlciwgbWF4X3g6IG51bWJlciwgbWluX3k6IG51bWJlciwgbWF4X3k6IG51bWJlcn19XG4gICAqL1xuICBnZXRUcmVlU2l6ZShub2RlcywgaW5kZXgpIHtcbiAgICBsZXQgbWluX3ggPSAxZTk7XG4gICAgbGV0IG1heF94ID0gLTFlOTtcbiAgICBsZXQgbWluX3kgPSAxZTk7XG4gICAgbGV0IG1heF95ID0gLTFlOTtcblxuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMudHJlZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy50cmVlcywgbm9kZUlkKSkge1xuICAgICAgICBpZiAodGhpcy50cmVlc1tub2RlSWRdID09PSBpbmRleCkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tub2RlSWRdO1xuICAgICAgICAgIG1pbl94ID0gTWF0aC5taW4obm9kZS54LCBtaW5feCk7XG4gICAgICAgICAgbWF4X3ggPSBNYXRoLm1heChub2RlLngsIG1heF94KTtcbiAgICAgICAgICBtaW5feSA9IE1hdGgubWluKG5vZGUueSwgbWluX3kpO1xuICAgICAgICAgIG1heF95ID0gTWF0aC5tYXgobm9kZS55LCBtYXhfeSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbWluX3g6IG1pbl94LFxuICAgICAgbWF4X3g6IG1heF94LFxuICAgICAgbWluX3k6IG1pbl95LFxuICAgICAgbWF4X3k6IG1heF95LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdHdvIG5vZGVzIGhhdmUgdGhlIHNhbWUgcGFyZW50KHMpXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZTFcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlMlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgdHdvIG5vZGVzIGhhdmUgYSBzYW1lIGFuY2VzdG9yIG5vZGUsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaGFzU2FtZVBhcmVudChub2RlMSwgbm9kZTIpIHtcbiAgICBjb25zdCBwYXJlbnRzMSA9IHRoaXMucGFyZW50UmVmZXJlbmNlW25vZGUxLmlkXTtcbiAgICBjb25zdCBwYXJlbnRzMiA9IHRoaXMucGFyZW50UmVmZXJlbmNlW25vZGUyLmlkXTtcbiAgICBpZiAocGFyZW50czEgPT09IHVuZGVmaW5lZCB8fCBwYXJlbnRzMiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnRzMS5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXJlbnRzMi5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocGFyZW50czFbaV0gPT0gcGFyZW50czJbal0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdHdvIG5vZGVzIGFyZSBpbiB0aGUgc2FtZSB0cmVlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUxXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZTJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhpcyBpcyBzbywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBpblNhbWVTdWJOZXR3b3JrKG5vZGUxLCBub2RlMikge1xuICAgIHJldHVybiB0aGlzLnRyZWVzW25vZGUxLmlkXSA9PT0gdGhpcy50cmVlc1tub2RlMi5pZF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgbGlzdCBvZiB0aGUgZGlzdGluY3QgbGV2ZWxzIGluIHRoZSBjdXJyZW50IG5ldHdvcmtcbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0TGV2ZWxzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBub2RlIHRvIHRoZSBvcmRlcmluZyBwZXIgbGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbFxuICAgKi9cbiAgYWRkVG9PcmRlcmluZyhub2RlLCBsZXZlbCkge1xuICAgIGlmICh0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXSA9IFtdO1xuICAgIH1cblxuICAgIGxldCBpc1ByZXNlbnQgPSBmYWxzZTtcbiAgICBjb25zdCBjdXJMZXZlbCA9IHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdO1xuICAgIGZvciAoY29uc3QgbiBpbiBjdXJMZXZlbCkge1xuICAgICAgLy9pZiAoY3VyTGV2ZWxbbl0uaWQgPT09IG5vZGUuaWQpIHtcbiAgICAgIGlmIChjdXJMZXZlbFtuXSA9PT0gbm9kZSkge1xuICAgICAgICBpc1ByZXNlbnQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzUHJlc2VudCkge1xuICAgICAgdGhpcy5kaXN0cmlidXRpb25PcmRlcmluZ1tsZXZlbF0ucHVzaChub2RlKTtcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uSW5kZXhbbm9kZS5pZF0gPVxuICAgICAgICB0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXS5sZW5ndGggLSAxO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoZSBMYXlvdXQgRW5naW5lXG4gKi9cbmNsYXNzIExheW91dEVuZ2luZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlcmUgYWx3YXlzIGlzIHNvbWUgUk5HIGJlY2F1c2UgdGhlIHNldE9wdGlvbnMgbWV0aG9kIHdvbid0XG4gICAgLy8gc2V0IGl0IHVubGVzcyB0aGVyZSdzIGEgc2VlZCBmb3IgaXQuXG4gICAgdGhpcy5fcmVzZXRSTkcoTWF0aC5yYW5kb20oKSArIFwiOlwiICsgRGF0ZS5ub3coKSk7XG5cbiAgICB0aGlzLnNldFBoeXNpY3MgPSBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLm9wdGlvbnNCYWNrdXAgPSB7IHBoeXNpY3M6IHt9IH07XG5cbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgcmFuZG9tU2VlZDogdW5kZWZpbmVkLFxuICAgICAgaW1wcm92ZWRMYXlvdXQ6IHRydWUsXG4gICAgICBjbHVzdGVyVGhyZXNob2xkOiAxNTAsXG4gICAgICBoaWVyYXJjaGljYWw6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGxldmVsU2VwYXJhdGlvbjogMTUwLFxuICAgICAgICBub2RlU3BhY2luZzogMTAwLFxuICAgICAgICB0cmVlU3BhY2luZzogMjAwLFxuICAgICAgICBibG9ja1NoaWZ0aW5nOiB0cnVlLFxuICAgICAgICBlZGdlTWluaW1pemF0aW9uOiB0cnVlLFxuICAgICAgICBwYXJlbnRDZW50cmFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgZGlyZWN0aW9uOiBcIlVEXCIsIC8vIFVELCBEVSwgTFIsIFJMXG4gICAgICAgIHNvcnRNZXRob2Q6IFwiaHVic2l6ZVwiLCAvLyBodWJzaXplLCBkaXJlY3RlZFxuICAgICAgfSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcbiAgICB0aGlzLmJpbmRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGV2ZW50IGxpc3RlbmVyc1xuICAgKi9cbiAgYmluZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFDaGFuZ2VkXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc2V0dXBIaWVyYXJjaGljYWxMYXlvdXQoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9kYXRhTG9hZGVkXCIsICgpID0+IHtcbiAgICAgIHRoaXMubGF5b3V0TmV0d29yaygpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX3Jlc2V0SGllcmFyY2hpY2FsTGF5b3V0XCIsICgpID0+IHtcbiAgICAgIHRoaXMuc2V0dXBIaWVyYXJjaGljYWxMYXlvdXQoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9hZGp1c3RFZGdlc0ZvckhpZXJhcmNoaWNhbExheW91dFwiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lbmFibGVkICE9PSB0cnVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGdldCB0aGUgdHlwZSBvZiBzdGF0aWMgc21vb3RoIGN1cnZlIGluIGNhc2UgaXQgaXMgcmVxdWlyZWRcbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmRpcmVjdGlvbi5jdXJ2ZVR5cGUoKTtcblxuICAgICAgLy8gZm9yY2UgYWxsIGVkZ2VzIGludG8gc3RhdGljIHNtb290aCBjdXJ2ZXMuXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2ZvcmNlRGlzYWJsZUR5bmFtaWNDdXJ2ZXNcIiwgdHlwZSwgZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhbGxPcHRpb25zXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMsIGFsbE9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBoaWVyYXJjaGljYWwgPSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsO1xuICAgICAgY29uc3QgcHJldkhpZXJhcmNoaWNhbFN0YXRlID0gaGllcmFyY2hpY2FsLmVuYWJsZWQ7XG4gICAgICBzZWxlY3RpdmVEZWVwRXh0ZW5kKFxuICAgICAgICBbXCJyYW5kb21TZWVkXCIsIFwiaW1wcm92ZWRMYXlvdXRcIiwgXCJjbHVzdGVyVGhyZXNob2xkXCJdLFxuICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgICBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zLCBcImhpZXJhcmNoaWNhbFwiKTtcblxuICAgICAgaWYgKG9wdGlvbnMucmFuZG9tU2VlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3Jlc2V0Uk5HKG9wdGlvbnMucmFuZG9tU2VlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoaWVyYXJjaGljYWwuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAocHJldkhpZXJhcmNoaWNhbFN0YXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgLy8gcmVmcmVzaCB0aGUgb3ZlcnJpZGRlbiBvcHRpb25zIGZvciBub2RlcyBhbmQgZWRnZXMuXG4gICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInJlZnJlc2hcIiwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGxldmVsIHNlcGFyYXRpb24gaXMgdGhlIHJpZ2h0IHdheSB1cFxuICAgICAgICBpZiAoXG4gICAgICAgICAgaGllcmFyY2hpY2FsLmRpcmVjdGlvbiA9PT0gXCJSTFwiIHx8XG4gICAgICAgICAgaGllcmFyY2hpY2FsLmRpcmVjdGlvbiA9PT0gXCJEVVwiXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChoaWVyYXJjaGljYWwubGV2ZWxTZXBhcmF0aW9uID4gMCkge1xuICAgICAgICAgICAgaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbiAqPSAtMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gPCAwKSB7XG4gICAgICAgICAgICBoaWVyYXJjaGljYWwubGV2ZWxTZXBhcmF0aW9uICo9IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0RGlyZWN0aW9uU3RyYXRlZ3koKTtcblxuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3Jlc2V0SGllcmFyY2hpY2FsTGF5b3V0XCIpO1xuICAgICAgICAvLyBiZWNhdXNlIHRoZSBoaWVyYXJjaGljYWwgc3lzdGVtIG5lZWRzIGl0J3Mgb3duIHBoeXNpY3MgYW5kIHNtb290aCBjdXJ2ZSBzZXR0aW5ncyxcbiAgICAgICAgLy8gd2UgYWRhcHQgdGhlIG90aGVyIG9wdGlvbnMgaWYgbmVlZGVkLlxuICAgICAgICByZXR1cm4gdGhpcy5hZGFwdEFsbE9wdGlvbnNGb3JIaWVyYXJjaGljYWxMYXlvdXQoYWxsT3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJldkhpZXJhcmNoaWNhbFN0YXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgLy8gcmVmcmVzaCB0aGUgb3ZlcnJpZGRlbiBvcHRpb25zIGZvciBub2RlcyBhbmQgZWRnZXMuXG4gICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInJlZnJlc2hcIik7XG4gICAgICAgICAgcmV0dXJuIGRlZXBFeHRlbmQoYWxsT3B0aW9ucywgdGhpcy5vcHRpb25zQmFja3VwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWxsT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igd2l0aCBnaXZlbiBzZWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gc2VlZCAtIFRoZSBzZWVkIHRoYXQgd2lsbCBiZSBmb3J3YXJkZWQgdGhlIHRoZSBSTkcuXG4gICAqL1xuICBfcmVzZXRSTkcoc2VlZCkge1xuICAgIHRoaXMuaW5pdGlhbFJhbmRvbVNlZWQgPSBzZWVkO1xuICAgIHRoaXMuX3JuZyA9IEFsZWEodGhpcy5pbml0aWFsUmFuZG9tU2VlZCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGFsbE9wdGlvbnNcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGFkYXB0QWxsT3B0aW9uc0ZvckhpZXJhcmNoaWNhbExheW91dChhbGxPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgYmFja3VwUGh5c2ljcyA9IHRoaXMub3B0aW9uc0JhY2t1cC5waHlzaWNzO1xuXG4gICAgICAvLyBzZXQgdGhlIHBoeXNpY3NcbiAgICAgIGlmIChhbGxPcHRpb25zLnBoeXNpY3MgPT09IHVuZGVmaW5lZCB8fCBhbGxPcHRpb25zLnBoeXNpY3MgPT09IHRydWUpIHtcbiAgICAgICAgYWxsT3B0aW9ucy5waHlzaWNzID0ge1xuICAgICAgICAgIGVuYWJsZWQ6XG4gICAgICAgICAgICBiYWNrdXBQaHlzaWNzLmVuYWJsZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBiYWNrdXBQaHlzaWNzLmVuYWJsZWQsXG4gICAgICAgICAgc29sdmVyOiBcImhpZXJhcmNoaWNhbFJlcHVsc2lvblwiLFxuICAgICAgICB9O1xuICAgICAgICBiYWNrdXBQaHlzaWNzLmVuYWJsZWQgPVxuICAgICAgICAgIGJhY2t1cFBoeXNpY3MuZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGJhY2t1cFBoeXNpY3MuZW5hYmxlZDtcbiAgICAgICAgYmFja3VwUGh5c2ljcy5zb2x2ZXIgPSBiYWNrdXBQaHlzaWNzLnNvbHZlciB8fCBcImJhcm5lc0h1dFwiO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYWxsT3B0aW9ucy5waHlzaWNzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGJhY2t1cFBoeXNpY3MuZW5hYmxlZCA9XG4gICAgICAgICAgYWxsT3B0aW9ucy5waHlzaWNzLmVuYWJsZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IGFsbE9wdGlvbnMucGh5c2ljcy5lbmFibGVkO1xuICAgICAgICBiYWNrdXBQaHlzaWNzLnNvbHZlciA9IGFsbE9wdGlvbnMucGh5c2ljcy5zb2x2ZXIgfHwgXCJiYXJuZXNIdXRcIjtcbiAgICAgICAgYWxsT3B0aW9ucy5waHlzaWNzLnNvbHZlciA9IFwiaGllcmFyY2hpY2FsUmVwdWxzaW9uXCI7XG4gICAgICB9IGVsc2UgaWYgKGFsbE9wdGlvbnMucGh5c2ljcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgYmFja3VwUGh5c2ljcy5zb2x2ZXIgPSBcImJhcm5lc0h1dFwiO1xuICAgICAgICBhbGxPcHRpb25zLnBoeXNpY3MgPSB7IHNvbHZlcjogXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIiB9O1xuICAgICAgfVxuXG4gICAgICAvLyBnZXQgdGhlIHR5cGUgb2Ygc3RhdGljIHNtb290aCBjdXJ2ZSBpbiBjYXNlIGl0IGlzIHJlcXVpcmVkXG4gICAgICBsZXQgdHlwZSA9IHRoaXMuZGlyZWN0aW9uLmN1cnZlVHlwZSgpO1xuXG4gICAgICAvLyBkaXNhYmxlIHNtb290aCBjdXJ2ZXMgaWYgbm90aGluZyBpcyBkZWZpbmVkLiBJZiBzbW9vdGggY3VydmVzIGhhdmUgYmVlbiB0dXJuZWQgb24sXG4gICAgICAvLyB0dXJuIHRoZW0gaW50byBzdGF0aWMgc21vb3RoIGN1cnZlcy5cbiAgICAgIGlmIChhbGxPcHRpb25zLmVkZ2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQmFja3VwLmVkZ2VzID0ge1xuICAgICAgICAgIHNtb290aDogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBcImR5bmFtaWNcIiB9LFxuICAgICAgICB9O1xuICAgICAgICBhbGxPcHRpb25zLmVkZ2VzID0geyBzbW9vdGg6IGZhbHNlIH07XG4gICAgICB9IGVsc2UgaWYgKGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQmFja3VwLmVkZ2VzID0ge1xuICAgICAgICAgIHNtb290aDogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBcImR5bmFtaWNcIiB9LFxuICAgICAgICB9O1xuICAgICAgICBhbGxPcHRpb25zLmVkZ2VzLnNtb290aCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGxPcHRpb25zLmVkZ2VzLnNtb290aCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNCYWNrdXAuZWRnZXMgPSB7IHNtb290aDogYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGggfTtcbiAgICAgICAgICBhbGxPcHRpb25zLmVkZ2VzLnNtb290aCA9IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoLFxuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHNtb290aCA9IGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoO1xuXG4gICAgICAgICAgLy8gYWxsb3cgY3VzdG9tIHR5cGVzIGV4Y2VwdCBmb3IgZHluYW1pY1xuICAgICAgICAgIGlmIChzbW9vdGgudHlwZSAhPT0gdW5kZWZpbmVkICYmIHNtb290aC50eXBlICE9PSBcImR5bmFtaWNcIikge1xuICAgICAgICAgICAgdHlwZSA9IHNtb290aC50eXBlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFRPRE86IHRoaXMgaXMgb3B0aW9ucyBtZXJnaW5nOyBzZWUgaWYgdGhlIHN0YW5kYXJkIHJvdXRpbmVzIGNhbiBiZSB1c2VkIGhlcmUuXG4gICAgICAgICAgdGhpcy5vcHRpb25zQmFja3VwLmVkZ2VzID0ge1xuICAgICAgICAgICAgc21vb3RoOiB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IHNtb290aC5lbmFibGVkID09PSB1bmRlZmluZWQgPyB0cnVlIDogc21vb3RoLmVuYWJsZWQsXG4gICAgICAgICAgICAgIHR5cGU6IHNtb290aC50eXBlID09PSB1bmRlZmluZWQgPyBcImR5bmFtaWNcIiA6IHNtb290aC50eXBlLFxuICAgICAgICAgICAgICByb3VuZG5lc3M6XG4gICAgICAgICAgICAgICAgc21vb3RoLnJvdW5kbmVzcyA9PT0gdW5kZWZpbmVkID8gMC41IDogc21vb3RoLnJvdW5kbmVzcyxcbiAgICAgICAgICAgICAgZm9yY2VEaXJlY3Rpb246XG4gICAgICAgICAgICAgICAgc21vb3RoLmZvcmNlRGlyZWN0aW9uID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICAgIDogc21vb3RoLmZvcmNlRGlyZWN0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gTk9URTogQ29weWluZyBhbiBvYmplY3QgdG8gc2VsZjsgdGhpcyBpcyBiYXNpY2FsbHkgc2V0dGluZyBkZWZhdWx0cyBmb3IgdW5kZWZpbmVkIHZhcmlhYmxlc1xuICAgICAgICAgIGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID0ge1xuICAgICAgICAgICAgZW5hYmxlZDogc21vb3RoLmVuYWJsZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBzbW9vdGguZW5hYmxlZCxcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICByb3VuZG5lc3M6IHNtb290aC5yb3VuZG5lc3MgPT09IHVuZGVmaW5lZCA/IDAuNSA6IHNtb290aC5yb3VuZG5lc3MsXG4gICAgICAgICAgICBmb3JjZURpcmVjdGlvbjpcbiAgICAgICAgICAgICAgc21vb3RoLmZvcmNlRGlyZWN0aW9uID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgOiBzbW9vdGguZm9yY2VEaXJlY3Rpb24sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBGb3JjZSBhbGwgZWRnZXMgaW50byBzdGF0aWMgc21vb3RoIGN1cnZlcy5cbiAgICAgIC8vIE9ubHkgYXBwbGllcyB0byBlZGdlcyB0aGF0IGRvIG5vdCB1c2UgdGhlIGdsb2JhbCBvcHRpb25zIGZvciBzbW9vdGguXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2ZvcmNlRGlzYWJsZUR5bmFtaWNDdXJ2ZXNcIiwgdHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbE9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzQXJyYXlcbiAgICovXG4gIHBvc2l0aW9uSW5pdGlhbGx5KG5vZGVzQXJyYXkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lbmFibGVkICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLl9yZXNldFJORyh0aGlzLmluaXRpYWxSYW5kb21TZWVkKTtcbiAgICAgIGNvbnN0IHJhZGl1cyA9IG5vZGVzQXJyYXkubGVuZ3RoICsgNTA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzQXJyYXlbaV07XG4gICAgICAgIGNvbnN0IGFuZ2xlID0gMiAqIE1hdGguUEkgKiB0aGlzLl9ybmcoKTtcbiAgICAgICAgaWYgKG5vZGUueCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbm9kZS54ID0gcmFkaXVzICogTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5vZGUueSA9IHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgS2FtYWRhIEthd2FpIHRvIHBvc2l0aW9uIG5vZGVzLiBUaGlzIGlzIHF1aXRlIGEgaGVhdnkgYWxnb3JpdGhtIHNvIGlmIHRoZXJlIGFyZSBhIGxvdCBvZiBub2RlcyB3ZVxuICAgKiBjbHVzdGVyIHRoZW0gZmlyc3QgdG8gcmVkdWNlIHRoZSBhbW91bnQuXG4gICAqL1xuICBsYXlvdXROZXR3b3JrKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwuZW5hYmxlZCAhPT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5vcHRpb25zLmltcHJvdmVkTGF5b3V0ID09PSB0cnVlXG4gICAgKSB7XG4gICAgICBjb25zdCBpbmRpY2VzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuXG4gICAgICAvLyBmaXJzdCBjaGVjayBpZiB3ZSBzaG91bGQgS2FtYWRhIEthd2FpIHRvIGxheW91dC4gVGhlIHRocmVzaG9sZCBpcyBpZiBsZXNzIHRoYW4gaGFsZiBvZiB0aGUgdmlzaWJsZVxuICAgICAgLy8gbm9kZXMgaGF2ZSBwcmVkZWZpbmVkIHBvc2l0aW9ucyB3ZSB1c2UgdGhpcy5cbiAgICAgIGxldCBwb3NpdGlvbkRlZmluZWQgPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbaW5kaWNlc1tpXV07XG4gICAgICAgIGlmIChub2RlLnByZWRlZmluZWRQb3NpdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHBvc2l0aW9uRGVmaW5lZCArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGxlc3MgdGhhbiBoYWxmIG9mIHRoZSBub2RlcyBoYXZlIGEgcHJlZGVmaW5lZCBwb3NpdGlvbiB3ZSBjb250aW51ZVxuICAgICAgaWYgKHBvc2l0aW9uRGVmaW5lZCA8IDAuNSAqIGluZGljZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IE1BWF9MRVZFTFMgPSAxMDtcbiAgICAgICAgbGV0IGxldmVsID0gMDtcbiAgICAgICAgY29uc3QgY2x1c3RlclRocmVzaG9sZCA9IHRoaXMub3B0aW9ucy5jbHVzdGVyVGhyZXNob2xkO1xuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIERlZmluZSB0aGUgb3B0aW9ucyBmb3IgdGhlIGhpZGRlbiBjbHVzdGVyIG5vZGVzXG4gICAgICAgIC8vIFRoZXNlIG9wdGlvbnMgZG9uJ3QgcHJvcGFnYXRlIG91dHNpZGUgdGhlIGNsdXN0ZXJpbmcgcGhhc2UuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFNvbWUgb3B0aW9ucyBhcmUgZXhwbGljaXRseSBkaXNhYmxlZCwgYmVjYXVzZSB0aGV5IG1heSBiZSBzZXQgaW4gZ3JvdXAgb3IgZGVmYXVsdCBub2RlIG9wdGlvbnMuXG4gICAgICAgIC8vIFRoZSBjbHVzdGVycyBhcmUgbmV2ZXIgZGlzcGxheWVkLCBzbyBtb3N0IGV4cGxpY2l0IHNldHRpbmdzIGhlcmUgc2VydmUgYXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlIGV4cGxpY2l0IHNldHRpbmcgb2YgJ3NoYXBlJyBpcyB0byBhdm9pZCBgc2hhcGU6ICdpbWFnZSdgOyBpbWFnZXMgYXJlIG5vdCBwYXNzZWQgdG8gdGhlIGhpZGRlblxuICAgICAgICAvLyBjbHVzdGVyIG5vZGVzLCBsZWFkaW5nIHRvIGFuIGV4Y2VwdGlvbiBvbiBjcmVhdGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gQWxsIHNldHRpbmdzIGhlcmUgYXJlIHBlcmZvcm1hbmNlIHJlbGF0ZWQsIGV4Y2VwdCB3aGVuIG5vdGVkIG90aGVyd2lzZS5cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgY2x1c3Rlck9wdGlvbnMgPSB7XG4gICAgICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzaGFwZTogXCJlbGxpcHNlXCIsIC8vIEJ1Z2ZpeDogYXZvaWQgdHlwZSAnaW1hZ2UnLCBubyBpbWFnZXMgc3VwcGxpZWRcbiAgICAgICAgICAgIGxhYmVsOiBcIlwiLCAvLyBhdm9pZCBsYWJlbCBoYW5kbGluZ1xuICAgICAgICAgICAgZ3JvdXA6IFwiXCIsIC8vIGF2b2lkIGdyb3VwIGhhbmRsaW5nXG4gICAgICAgICAgICBmb250OiB7IG11bHRpOiBmYWxzZSB9LCAvLyBhdm9pZCBmb250IHByb3BhZ2F0aW9uXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbHVzdGVyRWRnZVByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlwiLCAvLyBhdm9pZCBsYWJlbCBoYW5kbGluZ1xuICAgICAgICAgICAgZm9udDogeyBtdWx0aTogZmFsc2UgfSwgLy8gYXZvaWQgZm9udCBwcm9wYWdhdGlvblxuICAgICAgICAgICAgc21vb3RoOiB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLCAvLyBhdm9pZCBkcmF3aW5nIHBlbmFsdHkgZm9yIGNvbXBsZXggZWRnZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBhcmUgYSBsb3Qgb2Ygbm9kZXMsIHdlIGNsdXN0ZXIgYmVmb3JlIHdlIHJ1biB0aGUgYWxnb3JpdGhtLlxuICAgICAgICAvLyBOT1RFOiB0aGlzIHBhcnQgZmFpbHMgdG8gZmluZCBjbHVzdGVycyBmb3IgbGFyZ2Ugc2NhbGUtZnJlZSBuZXR3b3Jrcywgd2hpY2ggc2hvdWxkXG4gICAgICAgIC8vICAgICAgIGJlIGVhc2lseSBjbHVzdGVyYWJsZS5cbiAgICAgICAgLy8gVE9ETzogZXhhbWluZSB3aHkgdGhpcyBpcyBzb1xuICAgICAgICBpZiAoaW5kaWNlcy5sZW5ndGggPiBjbHVzdGVyVGhyZXNob2xkKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRMZW5ndGggPSBpbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaW5kaWNlcy5sZW5ndGggPiBjbHVzdGVyVGhyZXNob2xkICYmIGxldmVsIDw9IE1BWF9MRVZFTFMpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS50aW1lKFwiY2x1c3RlcmluZ1wiKVxuICAgICAgICAgICAgbGV2ZWwgKz0gMTtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IGluZGljZXMubGVuZ3RoO1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG1hbnkgbm9kZXMgd2UgZG8gYSBodWJzaXplIGNsdXN0ZXJcbiAgICAgICAgICAgIGlmIChsZXZlbCAlIDMgPT09IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5ib2R5Lm1vZHVsZXMuY2x1c3RlcmluZy5jbHVzdGVyQnJpZGdlcyhjbHVzdGVyT3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmJvZHkubW9kdWxlcy5jbHVzdGVyaW5nLmNsdXN0ZXJPdXRsaWVycyhjbHVzdGVyT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhZnRlciA9IGluZGljZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGJlZm9yZSA9PSBhZnRlciAmJiBsZXZlbCAlIDMgIT09IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5fZGVjbHVzdGVyQWxsKCk7XG4gICAgICAgICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfbGF5b3V0RmFpbGVkXCIpO1xuICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgICAgICAgXCJUaGlzIG5ldHdvcmsgY291bGQgbm90IGJlIHBvc2l0aW9uZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIHRoZSBpbXByb3ZlZCBsYXlvdXQgYWxnb3JpdGhtLlwiICtcbiAgICAgICAgICAgICAgICAgIFwiIFBsZWFzZSBkaXNhYmxlIGltcHJvdmVkTGF5b3V0IGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb25zb2xlLnRpbWVFbmQoXCJjbHVzdGVyaW5nXCIpXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGJlZm9yZSxsZXZlbCxhZnRlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBlZGdlc1xuICAgICAgICAgIHRoaXMuYm9keS5tb2R1bGVzLmthbWFkYUthd2FpLnNldE9wdGlvbnMoe1xuICAgICAgICAgICAgc3ByaW5nTGVuZ3RoOiBNYXRoLm1heCgxNTAsIDIgKiBzdGFydExlbmd0aCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxldmVsID4gTUFYX0xFVkVMUykge1xuICAgICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgIFwiVGhlIGNsdXN0ZXJpbmcgZGlkbid0IHN1Y2NlZWQgd2l0aGluIHRoZSBhbW91bnQgb2YgaW50ZXJhdGlvbnMgYWxsb3dlZCxcIiArXG4gICAgICAgICAgICAgIFwiIHByb2dyZXNzaW5nIHdpdGggcGFydGlhbCByZXN1bHQuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcG9zaXRpb24gdGhlIHN5c3RlbSBmb3IgdGhlc2Ugbm9kZXMgYW5kIGVkZ2VzXG4gICAgICAgIHRoaXMuYm9keS5tb2R1bGVzLmthbWFkYUthd2FpLnNvbHZlKFxuICAgICAgICAgIGluZGljZXMsXG4gICAgICAgICAgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBzaGlmdCB0byBjZW50ZXIgcG9pbnRcbiAgICAgICAgdGhpcy5fc2hpZnRUb0NlbnRlcigpO1xuXG4gICAgICAgIC8vIHBlcnR1cmIgdGhlIG5vZGVzIGEgbGl0dGxlIGJpdCB0byBmb3JjZSB0aGUgcGh5c2ljcyB0byBraWNrIGluXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDcwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAvLyBPbmx5IHBlcnR1cmIgdGhlIG5vZGVzIHRoYXQgYXJlbid0IGZpeGVkXG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpbmRpY2VzW2ldXTtcbiAgICAgICAgICBpZiAobm9kZS5wcmVkZWZpbmVkUG9zaXRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBub2RlLnggKz0gKDAuNSAtIHRoaXMuX3JuZygpKSAqIG9mZnNldDtcbiAgICAgICAgICAgIG5vZGUueSArPSAoMC41IC0gdGhpcy5fcm5nKCkpICogb2Zmc2V0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVuY2x1c3RlciBhbGwgY2x1c3RlcnNcbiAgICAgICAgdGhpcy5fZGVjbHVzdGVyQWxsKCk7XG5cbiAgICAgICAgLy8gcmVwb3NpdGlvbiBhbGwgYmV6aWVyIG5vZGVzLlxuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcG9zaXRpb25CZXppZXJOb2Rlc1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBhbGwgdGhlIG5vZGVzIHRvd2FyZHMgdG8gdGhlIGNlbnRlciBzbyBncmF2aXRhdGlvbmFsIHB1bGwgd2lsIG5vdCBtb3ZlIHRoZSBub2RlcyBhd2F5IGZyb20gdmlld1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NoaWZ0VG9DZW50ZXIoKSB7XG4gICAgY29uc3QgcmFuZ2UgPSBOZXR3b3JrVXRpbC5nZXRSYW5nZUNvcmUoXG4gICAgICB0aGlzLmJvZHkubm9kZXMsXG4gICAgICB0aGlzLmJvZHkubm9kZUluZGljZXNcbiAgICApO1xuICAgIGNvbnN0IGNlbnRlciA9IE5ldHdvcmtVdGlsLmZpbmRDZW50ZXIocmFuZ2UpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV07XG4gICAgICBub2RlLnggLT0gY2VudGVyLng7XG4gICAgICBub2RlLnkgLT0gY2VudGVyLnk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZHMgYWxsIGNsdXN0ZXJzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGVjbHVzdGVyQWxsKCkge1xuICAgIGxldCBjbHVzdGVyc1ByZXNlbnQgPSB0cnVlO1xuICAgIHdoaWxlIChjbHVzdGVyc1ByZXNlbnQgPT09IHRydWUpIHtcbiAgICAgIGNsdXN0ZXJzUHJlc2VudCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMuYm9keS5ub2Rlc1t0aGlzLmJvZHkubm9kZUluZGljZXNbaV1dLmlzQ2x1c3RlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNsdXN0ZXJzUHJlc2VudCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5ib2R5Lm1vZHVsZXMuY2x1c3RlcmluZy5vcGVuQ2x1c3RlcihcbiAgICAgICAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlc1tpXSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2x1c3RlcnNQcmVzZW50ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8Kn1cbiAgICovXG4gIGdldFNlZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbFJhbmRvbVNlZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiB0byBsYXlvdXQgdGhlIG5vZGVzIGluIGEgaGllcmFyY2hpY2FsIHdheS5cbiAgICogSXQgY2hlY2tzIGlmIHRoZSBub2RlIGRldGFpbHMgYXJlIHN1cHBsaWVkIGNvcnJlY3RseVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2V0dXBIaWVyYXJjaGljYWxMYXlvdXQoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lbmFibGVkID09PSB0cnVlICYmXG4gICAgICB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgLy8gZ2V0IHRoZSBzaXplIG9mIHRoZSBsYXJnZXN0IGh1YnMgYW5kIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyBkZWZpbmVkIGEgbGV2ZWwgZm9yIGEgbm9kZS5cbiAgICAgIGxldCBub2RlLCBub2RlSWQ7XG4gICAgICBsZXQgZGVmaW5lZExldmVsID0gZmFsc2U7XG4gICAgICBsZXQgdW5kZWZpbmVkTGV2ZWwgPSBmYWxzZTtcbiAgICAgIHRoaXMubGFzdE5vZGVPbkxldmVsID0ge307XG4gICAgICB0aGlzLmhpZXJhcmNoaWNhbCA9IG5ldyBIaWVyYXJjaGljYWxTdGF0dXMoKTtcblxuICAgICAgZm9yIChub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgICAgIGlmIChub2RlLm9wdGlvbnMubGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVmaW5lZExldmVsID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlSWRdID0gbm9kZS5vcHRpb25zLmxldmVsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bmRlZmluZWRMZXZlbCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZSB1c2VyIGRlZmluZWQgc29tZSBsZXZlbHMgYnV0IG5vdCBhbGwsIGFsZXJ0IGFuZCBydW4gd2l0aG91dCBoaWVyYXJjaGljYWwgbGF5b3V0XG4gICAgICBpZiAodW5kZWZpbmVkTGV2ZWwgPT09IHRydWUgJiYgZGVmaW5lZExldmVsID09PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRvIHVzZSB0aGUgaGllcmFyY2hpY2FsIGxheW91dCwgbm9kZXMgcmVxdWlyZSBlaXRoZXIgbm8gcHJlZGVmaW5lZCBsZXZlbHNcIiArXG4gICAgICAgICAgICBcIiBvciBsZXZlbHMgaGF2ZSB0byBiZSBkZWZpbmVkIGZvciBhbGwgbm9kZXMuXCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlZmluZSBsZXZlbHMgaWYgdW5kZWZpbmVkIGJ5IHRoZSB1c2Vycy4gQmFzZWQgb24gaHVic2l6ZS5cbiAgICAgICAgaWYgKHVuZGVmaW5lZExldmVsID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3Qgc29ydE1ldGhvZCA9IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwuc29ydE1ldGhvZDtcbiAgICAgICAgICBpZiAoc29ydE1ldGhvZCA9PT0gXCJodWJzaXplXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RldGVybWluZUxldmVsc0J5SHVic2l6ZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc29ydE1ldGhvZCA9PT0gXCJkaXJlY3RlZFwiKSB7XG4gICAgICAgICAgICB0aGlzLl9kZXRlcm1pbmVMZXZlbHNEaXJlY3RlZCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc29ydE1ldGhvZCA9PT0gXCJjdXN0b21cIikge1xuICAgICAgICAgICAgdGhpcy5fZGV0ZXJtaW5lTGV2ZWxzQ3VzdG9tQ2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmYWxsYmFjayBmb3IgY2FzZXMgd2hlcmUgdGhlcmUgYXJlIG5vZGVzIGJ1dCBubyBlZGdlc1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0aGlzLmJvZHkubm9kZXMpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5ub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWwuZW5zdXJlTGV2ZWwobm9kZUlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgbm9kZXMgcGVyIGxldmVsLlxuICAgICAgICBjb25zdCBkaXN0cmlidXRpb24gPSB0aGlzLl9nZXREaXN0cmlidXRpb24oKTtcblxuICAgICAgICAvLyBnZXQgdGhlIHBhcmVudCBjaGlsZHJlbiByZWxhdGlvbnMuXG4gICAgICAgIHRoaXMuX2dlbmVyYXRlTWFwKCk7XG5cbiAgICAgICAgLy8gcGxhY2UgdGhlIG5vZGVzIG9uIHRoZSBjYW52YXMuXG4gICAgICAgIHRoaXMuX3BsYWNlTm9kZXNCeUhpZXJhcmNoeShkaXN0cmlidXRpb24pO1xuXG4gICAgICAgIC8vIGNvbmRlbnNlIHRoZSB3aGl0ZXNwYWNlLlxuICAgICAgICB0aGlzLl9jb25kZW5zZUhpZXJhcmNoeSgpO1xuXG4gICAgICAgIC8vIHNoaWZ0IHRvIGNlbnRlciBzbyBncmF2aXR5IGRvZXMgbm90IGhhdmUgdG8gZG8gbXVjaFxuICAgICAgICB0aGlzLl9zaGlmdFRvQ2VudGVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uZGVuc2VIaWVyYXJjaHkoKSB7XG4gICAgLy8gR2xvYmFsIHZhciBpbiB0aGlzIHNjb3BlIHRvIGRlZmluZSB3aGVuIHRoZSBtb3ZlbWVudCBoYXMgc3RvcHBlZC5cbiAgICBsZXQgc3RpbGxTaGlmdGluZyA9IGZhbHNlO1xuICAgIGNvbnN0IGJyYW5jaGVzID0ge307XG4gICAgLy8gZmlyc3Qgd2UgaGF2ZSBzb21lIG1ldGhvZHMgdG8gaGVscCBzaGlmdGluZyB0cmVlcyBhcm91bmQuXG4gICAgLy8gdGhlIG1haW4gbWV0aG9kIHRvIHNoaWZ0IHRoZSB0cmVlc1xuICAgIGNvbnN0IHNoaWZ0VHJlZXMgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0cmVlU2l6ZXMgPSBnZXRUcmVlU2l6ZXMoKTtcbiAgICAgIGxldCBzaGlmdEJ5ID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJlZVNpemVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBkaWZmID0gdHJlZVNpemVzW2ldLm1heCAtIHRyZWVTaXplc1tpICsgMV0ubWluO1xuICAgICAgICBzaGlmdEJ5ICs9IGRpZmYgKyB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLnRyZWVTcGFjaW5nO1xuICAgICAgICBzaGlmdFRyZWUoaSArIDEsIHNoaWZ0QnkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBzaGlmdCBhIHNpbmdsZSB0cmVlIGJ5IGFuIG9mZnNldFxuICAgIGNvbnN0IHNoaWZ0VHJlZSA9IChpbmRleCwgb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCB0cmVlcyA9IHRoaXMuaGllcmFyY2hpY2FsLnRyZWVzO1xuXG4gICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0cmVlcykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRyZWVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgaWYgKHRyZWVzW25vZGVJZF0gPT09IGluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbi5zaGlmdChub2RlSWQsIG9mZnNldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGdldCB0aGUgd2lkdGggb2YgYWxsIHRyZWVzXG4gICAgY29uc3QgZ2V0VHJlZVNpemVzID0gKCkgPT4ge1xuICAgICAgY29uc3QgdHJlZVdpZHRocyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmhpZXJhcmNoaWNhbC5udW1UcmVlcygpOyBpKyspIHtcbiAgICAgICAgdHJlZVdpZHRocy5wdXNoKHRoaXMuZGlyZWN0aW9uLmdldFRyZWVTaXplKGkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cmVlV2lkdGhzO1xuICAgIH07XG5cbiAgICAvLyBnZXQgYSBtYXAgb2YgYWxsIG5vZGVzIGluIHRoaXMgYnJhbmNoXG4gICAgY29uc3QgZ2V0QnJhbmNoTm9kZXMgPSAoc291cmNlLCBtYXApID0+IHtcbiAgICAgIGlmIChtYXBbc291cmNlLmlkXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtYXBbc291cmNlLmlkXSA9IHRydWU7XG4gICAgICBpZiAodGhpcy5oaWVyYXJjaGljYWwuY2hpbGRyZW5SZWZlcmVuY2Vbc291cmNlLmlkXSkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuaGllcmFyY2hpY2FsLmNoaWxkcmVuUmVmZXJlbmNlW3NvdXJjZS5pZF07XG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZ2V0QnJhbmNoTm9kZXModGhpcy5ib2R5Lm5vZGVzW2NoaWxkcmVuW2ldXSwgbWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gZ2V0IGEgbWluIG1heCB3aWR0aCBhcyB3ZWxsIGFzIHRoZSBtYXhpbXVtIG1vdmVtZW50IHNwYWNlIGl0IGhhcyBvbiBlaXRoZXIgc2lkZXNcbiAgICAvLyB3ZSB1c2UgbWluIG1heCB0ZXJtaW5vbG9neSBiZWNhdXNlIHdpZHRoIGFuZCBoZWlnaHQgY2FuIGludGVyY2hhbmdlIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBsYXlvdXRcbiAgICBjb25zdCBnZXRCcmFuY2hCb3VuZGFyeSA9IChicmFuY2hNYXAsIG1heExldmVsID0gMWU5KSA9PiB7XG4gICAgICBsZXQgbWluU3BhY2UgPSAxZTk7XG4gICAgICBsZXQgbWF4U3BhY2UgPSAxZTk7XG4gICAgICBsZXQgbWluID0gMWU5O1xuICAgICAgbGV0IG1heCA9IC0xZTk7XG4gICAgICBmb3IgKGNvbnN0IGJyYW5jaE5vZGUgaW4gYnJhbmNoTWFwKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYnJhbmNoTWFwLCBicmFuY2hOb2RlKSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbYnJhbmNoTm9kZV07XG4gICAgICAgICAgY29uc3QgbGV2ZWwgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZS5pZF07XG4gICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihub2RlKTtcblxuICAgICAgICAgIC8vIGdldCB0aGUgc3BhY2UgYXJvdW5kIHRoZSBub2RlLlxuICAgICAgICAgIGNvbnN0IFttaW5TcGFjZU5vZGUsIG1heFNwYWNlTm9kZV0gPSB0aGlzLl9nZXRTcGFjZUFyb3VuZE5vZGUoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgYnJhbmNoTWFwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBtaW5TcGFjZSA9IE1hdGgubWluKG1pblNwYWNlTm9kZSwgbWluU3BhY2UpO1xuICAgICAgICAgIG1heFNwYWNlID0gTWF0aC5taW4obWF4U3BhY2VOb2RlLCBtYXhTcGFjZSk7XG5cbiAgICAgICAgICAvLyB0aGUgd2lkdGggaXMgb25seSByZWxldmFudCBmb3IgdGhlIGxldmVscyB0d28gbm9kZXMgaGF2ZSBpbiBjb21tb24uIFRoaXMgaXMgd2h5IHdlIGZpbHRlciBvbiB0aGlzLlxuICAgICAgICAgIGlmIChsZXZlbCA8PSBtYXhMZXZlbCkge1xuICAgICAgICAgICAgbWluID0gTWF0aC5taW4ocG9zaXRpb24sIG1pbik7XG4gICAgICAgICAgICBtYXggPSBNYXRoLm1heChwb3NpdGlvbiwgbWF4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFttaW4sIG1heCwgbWluU3BhY2UsIG1heFNwYWNlXTtcbiAgICB9O1xuXG4gICAgLy8gY2hlY2sgd2hhdCB0aGUgbWF4aW11bSBsZXZlbCBpcyB0aGVzZSBub2RlcyBoYXZlIGluIGNvbW1vbi5cbiAgICBjb25zdCBnZXRDb2xsaXNpb25MZXZlbCA9IChub2RlMSwgbm9kZTIpID0+IHtcbiAgICAgIGNvbnN0IG1heExldmVsMSA9IHRoaXMuaGllcmFyY2hpY2FsLmdldE1heExldmVsKG5vZGUxLmlkKTtcbiAgICAgIGNvbnN0IG1heExldmVsMiA9IHRoaXMuaGllcmFyY2hpY2FsLmdldE1heExldmVsKG5vZGUyLmlkKTtcbiAgICAgIHJldHVybiBNYXRoLm1pbihtYXhMZXZlbDEsIG1heExldmVsMik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENvbmRlbnNlIGVsZW1lbnRzLiBUaGVzZSBjYW4gYmUgbm9kZXMgb3IgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHRoZSBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gbGV2ZWxzXG4gICAgICogQHBhcmFtIHsqfSBjZW50ZXJQYXJlbnRzXG4gICAgICovXG4gICAgY29uc3Qgc2hpZnRFbGVtZW50c0Nsb3NlciA9IChjYWxsYmFjaywgbGV2ZWxzLCBjZW50ZXJQYXJlbnRzKSA9PiB7XG4gICAgICBjb25zdCBoaWVyID0gdGhpcy5oaWVyYXJjaGljYWw7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGV2ZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxldmVsID0gbGV2ZWxzW2ldO1xuICAgICAgICBjb25zdCBsZXZlbE5vZGVzID0gaGllci5kaXN0cmlidXRpb25PcmRlcmluZ1tsZXZlbF07XG4gICAgICAgIGlmIChsZXZlbE5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldmVsTm9kZXMubGVuZ3RoIC0gMTsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlMSA9IGxldmVsTm9kZXNbal07XG4gICAgICAgICAgICBjb25zdCBub2RlMiA9IGxldmVsTm9kZXNbaiArIDFdO1xuXG4gICAgICAgICAgICAvLyBOT1RFOiBsb2dpYyBtYWludGFpbmVkIGFzIGl0IHdhczsgaWYgbm9kZXMgaGF2ZSBzYW1lIGFuY2VzdG9yLFxuICAgICAgICAgICAgLy8gICAgICAgdGhlbiBvZiBjb3Vyc2UgdGhleSBhcmUgaW4gdGhlIHNhbWUgc3ViLW5ldHdvcmsuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGhpZXIuaGFzU2FtZVBhcmVudChub2RlMSwgbm9kZTIpICYmXG4gICAgICAgICAgICAgIGhpZXIuaW5TYW1lU3ViTmV0d29yayhub2RlMSwgbm9kZTIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sobm9kZTEsIG5vZGUyLCBjZW50ZXJQYXJlbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gY2FsbGJhY2sgZm9yIHNoaWZ0aW5nIGJyYW5jaGVzXG4gICAgY29uc3QgYnJhbmNoU2hpZnRDYWxsYmFjayA9IChub2RlMSwgbm9kZTIsIGNlbnRlclBhcmVudCA9IGZhbHNlKSA9PiB7XG4gICAgICAvL3dpbmRvdy5DQUxMQkFDS1MucHVzaCgoKSA9PiB7XG4gICAgICBjb25zdCBwb3MxID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24obm9kZTEpO1xuICAgICAgY29uc3QgcG9zMiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUyKTtcbiAgICAgIGNvbnN0IGRpZmZBYnMgPSBNYXRoLmFicyhwb3MyIC0gcG9zMSk7XG4gICAgICBjb25zdCBub2RlU3BhY2luZyA9IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwubm9kZVNwYWNpbmc7XG4gICAgICAvL2NvbnNvbGUubG9nKFwiTk9XIENIRUNLSU5HOlwiLCBub2RlMS5pZCwgbm9kZTIuaWQsIGRpZmZBYnMpO1xuICAgICAgaWYgKGRpZmZBYnMgPiBub2RlU3BhY2luZykge1xuICAgICAgICBjb25zdCBicmFuY2hOb2RlczEgPSB7fTtcbiAgICAgICAgY29uc3QgYnJhbmNoTm9kZXMyID0ge307XG5cbiAgICAgICAgZ2V0QnJhbmNoTm9kZXMobm9kZTEsIGJyYW5jaE5vZGVzMSk7XG4gICAgICAgIGdldEJyYW5jaE5vZGVzKG5vZGUyLCBicmFuY2hOb2RlczIpO1xuXG4gICAgICAgIC8vIGNoZWNrIHRoZSBsYXJnZXN0IGRpc3RhbmNlIGJldHdlZW4gdGhlIGJyYW5jaGVzXG4gICAgICAgIGNvbnN0IG1heExldmVsID0gZ2V0Q29sbGlzaW9uTGV2ZWwobm9kZTEsIG5vZGUyKTtcbiAgICAgICAgY29uc3QgYnJhbmNoTm9kZUJvdW5kYXJ5MSA9IGdldEJyYW5jaEJvdW5kYXJ5KGJyYW5jaE5vZGVzMSwgbWF4TGV2ZWwpO1xuICAgICAgICBjb25zdCBicmFuY2hOb2RlQm91bmRhcnkyID0gZ2V0QnJhbmNoQm91bmRhcnkoYnJhbmNoTm9kZXMyLCBtYXhMZXZlbCk7XG4gICAgICAgIGNvbnN0IG1heDEgPSBicmFuY2hOb2RlQm91bmRhcnkxWzFdO1xuICAgICAgICBjb25zdCBtaW4yID0gYnJhbmNoTm9kZUJvdW5kYXJ5MlswXTtcbiAgICAgICAgY29uc3QgbWluU3BhY2UyID0gYnJhbmNoTm9kZUJvdW5kYXJ5MlsyXTtcblxuICAgICAgICAvL2NvbnNvbGUubG9nKG5vZGUxLmlkLCBnZXRCcmFuY2hCb3VuZGFyeShicmFuY2hOb2RlczEsIG1heExldmVsKSwgbm9kZTIuaWQsXG4gICAgICAgIC8vICAgICAgICAgICAgZ2V0QnJhbmNoQm91bmRhcnkoYnJhbmNoTm9kZXMyLCBtYXhMZXZlbCksIG1heExldmVsKTtcbiAgICAgICAgY29uc3QgZGlmZkJyYW5jaCA9IE1hdGguYWJzKG1heDEgLSBtaW4yKTtcbiAgICAgICAgaWYgKGRpZmZCcmFuY2ggPiBub2RlU3BhY2luZykge1xuICAgICAgICAgIGxldCBvZmZzZXQgPSBtYXgxIC0gbWluMiArIG5vZGVTcGFjaW5nO1xuICAgICAgICAgIGlmIChvZmZzZXQgPCAtbWluU3BhY2UyICsgbm9kZVNwYWNpbmcpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IC1taW5TcGFjZTIgKyBub2RlU3BhY2luZztcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJSRVNFVFRJTkcgT0ZGU0VUXCIsIG1heDEgLSBtaW4yICsgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZywgLW1pblNwYWNlMiwgb2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJTSElGVElOR1wiLCBub2RlMi5pZCwgb2Zmc2V0KTtcbiAgICAgICAgICAgIHRoaXMuX3NoaWZ0QmxvY2sobm9kZTIuaWQsIG9mZnNldCk7XG4gICAgICAgICAgICBzdGlsbFNoaWZ0aW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGNlbnRlclBhcmVudCA9PT0gdHJ1ZSkgdGhpcy5fY2VudGVyUGFyZW50KG5vZGUyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7fSlcbiAgICB9O1xuXG4gICAgY29uc3QgbWluaW1pemVFZGdlTGVuZ3RoID0gKGl0ZXJhdGlvbnMsIG5vZGUpID0+IHtcbiAgICAgIC8vd2luZG93LkNBTExCQUNLUy5wdXNoKCgpID0+IHtcbiAgICAgIC8vICBjb25zb2xlLmxvZyhcInRzXCIsbm9kZS5pZCk7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlLmlkO1xuICAgICAgY29uc3QgYWxsRWRnZXMgPSBub2RlLmVkZ2VzO1xuICAgICAgY29uc3Qgbm9kZUxldmVsID0gdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW25vZGUuaWRdO1xuXG4gICAgICAvLyBnYXRoZXIgY29uc3RhbnRzXG4gICAgICBjb25zdCBDMiA9XG4gICAgICAgIHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwubGV2ZWxTZXBhcmF0aW9uICpcbiAgICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb247XG4gICAgICBjb25zdCByZWZlcmVuY2VOb2RlcyA9IHt9O1xuICAgICAgY29uc3QgYWJvdmVFZGdlcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxFZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBlZGdlID0gYWxsRWRnZXNbaV07XG4gICAgICAgIGlmIChlZGdlLnRvSWQgIT0gZWRnZS5mcm9tSWQpIHtcbiAgICAgICAgICBjb25zdCBvdGhlck5vZGUgPSBlZGdlLnRvSWQgPT0gbm9kZUlkID8gZWRnZS5mcm9tIDogZWRnZS50bztcbiAgICAgICAgICByZWZlcmVuY2VOb2Rlc1thbGxFZGdlc1tpXS5pZF0gPSBvdGhlck5vZGU7XG4gICAgICAgICAgaWYgKHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tvdGhlck5vZGUuaWRdIDwgbm9kZUxldmVsKSB7XG4gICAgICAgICAgICBhYm92ZUVkZ2VzLnB1c2goZWRnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGRpZmZlcmVudGlhdGVkIHN1bSBvZiBsZW5ndGhzIGJhc2VkIG9uIG9ubHkgbW92aW5nIG9uZSBub2RlIG92ZXIgb25lIGF4aXNcbiAgICAgIGNvbnN0IGdldEZ4ID0gKHBvaW50LCBlZGdlcykgPT4ge1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChyZWZlcmVuY2VOb2Rlc1tlZGdlc1tpXS5pZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYSA9XG4gICAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKHJlZmVyZW5jZU5vZGVzW2VkZ2VzW2ldLmlkXSkgLSBwb2ludDtcbiAgICAgICAgICAgIHN1bSArPSBhIC8gTWF0aC5zcXJ0KGEgKiBhICsgQzIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VtO1xuICAgICAgfTtcblxuICAgICAgLy8gZG91Ymx5IGRpZmZlcmVudGlhdGVkIHN1bSBvZiBsZW5ndGhzIGJhc2VkIG9uIG9ubHkgbW92aW5nIG9uZSBub2RlIG92ZXIgb25lIGF4aXNcbiAgICAgIGNvbnN0IGdldERGeCA9IChwb2ludCwgZWRnZXMpID0+IHtcbiAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAocmVmZXJlbmNlTm9kZXNbZWRnZXNbaV0uaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPVxuICAgICAgICAgICAgICB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihyZWZlcmVuY2VOb2Rlc1tlZGdlc1tpXS5pZF0pIC0gcG9pbnQ7XG4gICAgICAgICAgICBzdW0gLT0gQzIgKiBNYXRoLnBvdyhhICogYSArIEMyLCAtMS41KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1bTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGdldEd1ZXNzID0gKGl0ZXJhdGlvbnMsIGVkZ2VzKSA9PiB7XG4gICAgICAgIGxldCBndWVzcyA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuICAgICAgICAvLyBOZXd0b24ncyBtZXRob2QgZm9yIG9wdGltaXphdGlvblxuICAgICAgICBjb25zdCBndWVzc01hcCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGZ4ID0gZ2V0RngoZ3Vlc3MsIGVkZ2VzKTtcbiAgICAgICAgICBjb25zdCBkZnggPSBnZXRERngoZ3Vlc3MsIGVkZ2VzKTtcblxuICAgICAgICAgIC8vIHdlIGxpbWl0IHRoZSBtb3ZlbWVudCB0byBhdm9pZCBpbnN0YWJpbGl0eS5cbiAgICAgICAgICBjb25zdCBsaW1pdCA9IDQwO1xuICAgICAgICAgIGNvbnN0IHJhdGlvID0gTWF0aC5tYXgoLWxpbWl0LCBNYXRoLm1pbihsaW1pdCwgTWF0aC5yb3VuZChmeCAvIGRmeCkpKTtcbiAgICAgICAgICBndWVzcyA9IGd1ZXNzIC0gcmF0aW87XG4gICAgICAgICAgLy8gcmVkdWNlIGR1cGxpY2F0ZXNcbiAgICAgICAgICBpZiAoZ3Vlc3NNYXBbZ3Vlc3NdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBndWVzc01hcFtndWVzc10gPSBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBndWVzcztcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vdmVCcmFuY2ggPSAoZ3Vlc3MpID0+IHtcbiAgICAgICAgLy8gcG9zaXRpb24gbm9kZSBpZiB0aGVyZSBpcyBzcGFjZVxuICAgICAgICBjb25zdCBub2RlUG9zaXRpb24gPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihub2RlKTtcblxuICAgICAgICAvLyBjaGVjayBtb3ZhYmxlIGFyZWEgb2YgdGhlIGJyYW5jaFxuICAgICAgICBpZiAoYnJhbmNoZXNbbm9kZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGJyYW5jaE5vZGVzID0ge307XG4gICAgICAgICAgZ2V0QnJhbmNoTm9kZXMobm9kZSwgYnJhbmNoTm9kZXMpO1xuICAgICAgICAgIGJyYW5jaGVzW25vZGUuaWRdID0gYnJhbmNoTm9kZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnJhbmNoQm91bmRhcnkgPSBnZXRCcmFuY2hCb3VuZGFyeShicmFuY2hlc1tub2RlLmlkXSk7XG4gICAgICAgIGNvbnN0IG1pblNwYWNlQnJhbmNoID0gYnJhbmNoQm91bmRhcnlbMl07XG4gICAgICAgIGNvbnN0IG1heFNwYWNlQnJhbmNoID0gYnJhbmNoQm91bmRhcnlbM107XG5cbiAgICAgICAgY29uc3QgZGlmZiA9IGd1ZXNzIC0gbm9kZVBvc2l0aW9uO1xuXG4gICAgICAgIC8vIGNoZWNrIGlmIHdlIGFyZSBhbGxvd2VkIHRvIG1vdmUgdGhlIG5vZGU6XG4gICAgICAgIGxldCBicmFuY2hPZmZzZXQgPSAwO1xuICAgICAgICBpZiAoZGlmZiA+IDApIHtcbiAgICAgICAgICBicmFuY2hPZmZzZXQgPSBNYXRoLm1pbihcbiAgICAgICAgICAgIGRpZmYsXG4gICAgICAgICAgICBtYXhTcGFjZUJyYW5jaCAtIHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwubm9kZVNwYWNpbmdcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGRpZmYgPCAwKSB7XG4gICAgICAgICAgYnJhbmNoT2Zmc2V0ID0gLU1hdGgubWluKFxuICAgICAgICAgICAgLWRpZmYsXG4gICAgICAgICAgICBtaW5TcGFjZUJyYW5jaCAtIHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwubm9kZVNwYWNpbmdcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJyYW5jaE9mZnNldCAhPSAwKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIm1vdmluZyBicmFuY2g6XCIsYnJhbmNoT2Zmc2V0LCBtYXhTcGFjZUJyYW5jaCwgbWluU3BhY2VCcmFuY2gpXG4gICAgICAgICAgdGhpcy5fc2hpZnRCbG9jayhub2RlLmlkLCBicmFuY2hPZmZzZXQpO1xuICAgICAgICAgIC8vdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gICAgICAgICAgc3RpbGxTaGlmdGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vdmVOb2RlID0gKGd1ZXNzKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuXG4gICAgICAgIC8vIHBvc2l0aW9uIG5vZGUgaWYgdGhlcmUgaXMgc3BhY2VcbiAgICAgICAgY29uc3QgW21pblNwYWNlLCBtYXhTcGFjZV0gPSB0aGlzLl9nZXRTcGFjZUFyb3VuZE5vZGUobm9kZSk7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBndWVzcyAtIG5vZGVQb3NpdGlvbjtcbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIGFsbG93ZWQgdG8gbW92ZSB0aGUgbm9kZTpcbiAgICAgICAgbGV0IG5ld1Bvc2l0aW9uID0gbm9kZVBvc2l0aW9uO1xuICAgICAgICBpZiAoZGlmZiA+IDApIHtcbiAgICAgICAgICBuZXdQb3NpdGlvbiA9IE1hdGgubWluKFxuICAgICAgICAgICAgbm9kZVBvc2l0aW9uICsgKG1heFNwYWNlIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZyksXG4gICAgICAgICAgICBndWVzc1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZiA8IDApIHtcbiAgICAgICAgICBuZXdQb3NpdGlvbiA9IE1hdGgubWF4KFxuICAgICAgICAgICAgbm9kZVBvc2l0aW9uIC0gKG1pblNwYWNlIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZyksXG4gICAgICAgICAgICBndWVzc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3UG9zaXRpb24gIT09IG5vZGVQb3NpdGlvbikge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJtb3ZpbmcgTm9kZTpcIixkaWZmLCBtaW5TcGFjZSwgbWF4U3BhY2UpO1xuICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKG5vZGUsIG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICAvL3RoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICAgICAgICAgIHN0aWxsU2hpZnRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBsZXQgZ3Vlc3MgPSBnZXRHdWVzcyhpdGVyYXRpb25zLCBhYm92ZUVkZ2VzKTtcbiAgICAgIG1vdmVCcmFuY2goZ3Vlc3MpO1xuICAgICAgZ3Vlc3MgPSBnZXRHdWVzcyhpdGVyYXRpb25zLCBhbGxFZGdlcyk7XG4gICAgICBtb3ZlTm9kZShndWVzcyk7XG4gICAgICAvL30pXG4gICAgfTtcblxuICAgIC8vIG1ldGhvZCB0byByZW1vdmUgd2hpdGVzcGFjZSBiZXR3ZWVuIGJyYW5jaGVzLiBCZWNhdXNlIHdlIGRvIGJvdHRvbSB1cCwgd2UgY2FuIGNlbnRlciB0aGUgcGFyZW50cy5cbiAgICBjb25zdCBtaW5pbWl6ZUVkZ2VMZW5ndGhCb3R0b21VcCA9IChpdGVyYXRpb25zKSA9PiB7XG4gICAgICBsZXQgbGV2ZWxzID0gdGhpcy5oaWVyYXJjaGljYWwuZ2V0TGV2ZWxzKCk7XG4gICAgICBsZXZlbHMgPSBsZXZlbHMucmV2ZXJzZSgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHtcbiAgICAgICAgc3RpbGxTaGlmdGluZyA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldmVscy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNvbnN0IGxldmVsID0gbGV2ZWxzW2pdO1xuICAgICAgICAgIGNvbnN0IGxldmVsTm9kZXMgPSB0aGlzLmhpZXJhcmNoaWNhbC5kaXN0cmlidXRpb25PcmRlcmluZ1tsZXZlbF07XG4gICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsZXZlbE5vZGVzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBtaW5pbWl6ZUVkZ2VMZW5ndGgoMTAwMCwgbGV2ZWxOb2Rlc1trXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGlsbFNoaWZ0aW5nICE9PSB0cnVlKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkZJTklTSEVEIG1pbmltaXplRWRnZUxlbmd0aEJvdHRvbVVwIElOIFwiICsgaSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gbWV0aG9kIHRvIHJlbW92ZSB3aGl0ZXNwYWNlIGJldHdlZW4gYnJhbmNoZXMuIEJlY2F1c2Ugd2UgZG8gYm90dG9tIHVwLCB3ZSBjYW4gY2VudGVyIHRoZSBwYXJlbnRzLlxuICAgIGNvbnN0IHNoaWZ0QnJhbmNoZXNDbG9zZXJCb3R0b21VcCA9IChpdGVyYXRpb25zKSA9PiB7XG4gICAgICBsZXQgbGV2ZWxzID0gdGhpcy5oaWVyYXJjaGljYWwuZ2V0TGV2ZWxzKCk7XG4gICAgICBsZXZlbHMgPSBsZXZlbHMucmV2ZXJzZSgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHtcbiAgICAgICAgc3RpbGxTaGlmdGluZyA9IGZhbHNlO1xuICAgICAgICBzaGlmdEVsZW1lbnRzQ2xvc2VyKGJyYW5jaFNoaWZ0Q2FsbGJhY2ssIGxldmVscywgdHJ1ZSk7XG4gICAgICAgIGlmIChzdGlsbFNoaWZ0aW5nICE9PSB0cnVlKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkZJTklTSEVEIHNoaWZ0QnJhbmNoZXNDbG9zZXJCb3R0b21VcCBJTiBcIiArIChpKzEpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBjZW50ZXIgYWxsIHBhcmVudHNcbiAgICBjb25zdCBjZW50ZXJBbGxQYXJlbnRzID0gKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKVxuICAgICAgICAgIHRoaXMuX2NlbnRlclBhcmVudCh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGNlbnRlciBhbGwgcGFyZW50c1xuICAgIGNvbnN0IGNlbnRlckFsbFBhcmVudHNCb3R0b21VcCA9ICgpID0+IHtcbiAgICAgIGxldCBsZXZlbHMgPSB0aGlzLmhpZXJhcmNoaWNhbC5nZXRMZXZlbHMoKTtcbiAgICAgIGxldmVscyA9IGxldmVscy5yZXZlcnNlKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxldmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBsZXZlbCA9IGxldmVsc1tpXTtcbiAgICAgICAgY29uc3QgbGV2ZWxOb2RlcyA9IHRoaXMuaGllcmFyY2hpY2FsLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZXZlbE5vZGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdGhpcy5fY2VudGVyUGFyZW50KGxldmVsTm9kZXNbal0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHRoZSBhY3R1YWwgd29yayBpcyBkb25lIGhlcmUuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwuYmxvY2tTaGlmdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgc2hpZnRCcmFuY2hlc0Nsb3NlckJvdHRvbVVwKDUpO1xuICAgICAgY2VudGVyQWxsUGFyZW50cygpO1xuICAgIH1cblxuICAgIC8vIG1pbmltaXplIGVkZ2UgbGVuZ3RoXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwuZWRnZU1pbmltaXphdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgbWluaW1pemVFZGdlTGVuZ3RoQm90dG9tVXAoMjApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLnBhcmVudENlbnRyYWxpemF0aW9uID09PSB0cnVlKSB7XG4gICAgICBjZW50ZXJBbGxQYXJlbnRzQm90dG9tVXAoKTtcbiAgICB9XG5cbiAgICBzaGlmdFRyZWVzKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBnaXZlcyB0aGUgc3BhY2UgYXJvdW5kIHRoZSBub2RlLiBJRiBhIG1hcCBpcyBzdXBwbGllZCwgaXQgd2lsbCBvbmx5IGNoZWNrIGFnYWluc3Qgbm9kZXMgTk9UIGluIHRoZSBtYXAuXG4gICAqIFRoaXMgaXMgdXNlZCB0byBvbmx5IGdldCB0aGUgZGlzdGFuY2VzIHRvIG5vZGVzIG91dHNpZGUgb2YgYSBicmFuY2guXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3tOb2RlLmlkOiB2aXMuTm9kZX19IG1hcFxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0U3BhY2VBcm91bmROb2RlKG5vZGUsIG1hcCkge1xuICAgIGxldCB1c2VNYXAgPSB0cnVlO1xuICAgIGlmIChtYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdXNlTWFwID0gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGxldmVsID0gdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW25vZGUuaWRdO1xuICAgIGlmIChsZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaGllcmFyY2hpY2FsLmRpc3RyaWJ1dGlvbkluZGV4W25vZGUuaWRdO1xuICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihub2RlKTtcbiAgICAgIGNvbnN0IG9yZGVyaW5nID0gdGhpcy5oaWVyYXJjaGljYWwuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdO1xuICAgICAgbGV0IG1pblNwYWNlID0gMWU5O1xuICAgICAgbGV0IG1heFNwYWNlID0gMWU5O1xuICAgICAgaWYgKGluZGV4ICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IHByZXZOb2RlID0gb3JkZXJpbmdbaW5kZXggLSAxXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh1c2VNYXAgPT09IHRydWUgJiYgbWFwW3ByZXZOb2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB8fFxuICAgICAgICAgIHVzZU1hcCA9PT0gZmFsc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcHJldlBvcyA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKHByZXZOb2RlKTtcbiAgICAgICAgICBtaW5TcGFjZSA9IHBvc2l0aW9uIC0gcHJldlBvcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXggIT0gb3JkZXJpbmcubGVuZ3RoIC0gMSkge1xuICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IG9yZGVyaW5nW2luZGV4ICsgMV07XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodXNlTWFwID09PSB0cnVlICYmIG1hcFtuZXh0Tm9kZS5pZF0gPT09IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgICB1c2VNYXAgPT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG5leHRQb3MgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihuZXh0Tm9kZSk7XG4gICAgICAgICAgbWF4U3BhY2UgPSBNYXRoLm1pbihtYXhTcGFjZSwgbmV4dFBvcyAtIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gW21pblNwYWNlLCBtYXhTcGFjZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbMCwgMF07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdlIHVzZSB0aGlzIG1ldGhvZCB0byBjZW50ZXIgYSBwYXJlbnQgbm9kZSBhbmQgY2hlY2sgaWYgaXQgZG9lcyBub3QgY3Jvc3Mgb3RoZXIgbm9kZXMgd2hlbiBpdCBkb2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jZW50ZXJQYXJlbnQobm9kZSkge1xuICAgIGlmICh0aGlzLmhpZXJhcmNoaWNhbC5wYXJlbnRSZWZlcmVuY2Vbbm9kZS5pZF0pIHtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSB0aGlzLmhpZXJhcmNoaWNhbC5wYXJlbnRSZWZlcmVuY2Vbbm9kZS5pZF07XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFyZW50SWQgPSBwYXJlbnRzW2ldO1xuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5ib2R5Lm5vZGVzW3BhcmVudElkXTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmhpZXJhcmNoaWNhbC5jaGlsZHJlblJlZmVyZW5jZVtwYXJlbnRJZF07XG5cbiAgICAgICAgaWYgKGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBnZXQgdGhlIHJhbmdlIG9mIHRoZSBjaGlsZHJlblxuICAgICAgICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gdGhpcy5fZ2V0Q2VudGVyUG9zaXRpb24oY2hpbGRyZW4pO1xuXG4gICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihwYXJlbnROb2RlKTtcbiAgICAgICAgICBjb25zdCBbbWluU3BhY2UsIG1heFNwYWNlXSA9IHRoaXMuX2dldFNwYWNlQXJvdW5kTm9kZShwYXJlbnROb2RlKTtcbiAgICAgICAgICBjb25zdCBkaWZmID0gcG9zaXRpb24gLSBuZXdQb3NpdGlvbjtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZGlmZiA8IDAgJiZcbiAgICAgICAgICAgICAgTWF0aC5hYnMoZGlmZikgPFxuICAgICAgICAgICAgICAgIG1heFNwYWNlIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZykgfHxcbiAgICAgICAgICAgIChkaWZmID4gMCAmJlxuICAgICAgICAgICAgICBNYXRoLmFicyhkaWZmKSA8IG1pblNwYWNlIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKHBhcmVudE5vZGUsIG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBwbGFjZXMgdGhlIG5vZGVzIG9uIHRoZSBjYW52YXMgYmFzZWQgb24gdGhlIGhpZXJhcmNoaWFsIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGRpc3RyaWJ1dGlvbiB8IG9idGFpbmVkIGJ5IHRoZSBmdW5jdGlvbiB0aGlzLl9nZXREaXN0cmlidXRpb24oKVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BsYWNlTm9kZXNCeUhpZXJhcmNoeShkaXN0cmlidXRpb24pIHtcbiAgICB0aGlzLnBvc2l0aW9uZWROb2RlcyA9IHt9O1xuICAgIC8vIHN0YXJ0IHBsYWNpbmcgYWxsIHRoZSBsZXZlbCAwIG5vZGVzIGZpcnN0LiBUaGVuIHJlY3Vyc2l2ZWx5IHBvc2l0aW9uIHRoZWlyIGJyYW5jaGVzLlxuICAgIGZvciAoY29uc3QgbGV2ZWwgaW4gZGlzdHJpYnV0aW9uKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRpc3RyaWJ1dGlvbiwgbGV2ZWwpKSB7XG4gICAgICAgIC8vIHNvcnQgbm9kZXMgaW4gbGV2ZWwgYnkgcG9zaXRpb246XG4gICAgICAgIGxldCBub2RlQXJyYXkgPSBPYmplY3Qua2V5cyhkaXN0cmlidXRpb25bbGV2ZWxdKTtcbiAgICAgICAgbm9kZUFycmF5ID0gdGhpcy5faW5kZXhBcnJheVRvTm9kZXMobm9kZUFycmF5KTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24uc29ydChub2RlQXJyYXkpO1xuICAgICAgICBsZXQgaGFuZGxlZE5vZGVDb3VudCA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gbm9kZUFycmF5W2ldO1xuICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uZWROb2Rlc1tub2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZztcbiAgICAgICAgICAgIGxldCBwb3MgPSBzcGFjaW5nICogaGFuZGxlZE5vZGVDb3VudDtcbiAgICAgICAgICAgIC8vIFdlIGdldCB0aGUgWCBvciBZIHZhbHVlcyB3ZSBuZWVkIGFuZCBzdG9yZSB0aGVtIGluIHBvcyBhbmQgcHJldmlvdXNQb3MuXG4gICAgICAgICAgICAvLyBUaGUgZ2V0IGFuZCBzZXQgbWFrZSBzdXJlIHdlIGdldCBYIG9yIFlcbiAgICAgICAgICAgIGlmIChoYW5kbGVkTm9kZUNvdW50ID4gMCkge1xuICAgICAgICAgICAgICBwb3MgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihub2RlQXJyYXlbaSAtIDFdKSArIHNwYWNpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbi5zZXRQb3NpdGlvbihub2RlLCBwb3MsIGxldmVsKTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25BbmRDb250aW51ZShub2RlLCBsZXZlbCwgcG9zKTtcblxuICAgICAgICAgICAgaGFuZGxlZE5vZGVDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgcmVjdXJzaXZlbHkgY2FsbGVkIGZ1bmN0aW9uIHRvIGVudW1lcmF0ZSB0aGUgYnJhbmNoZXMgZnJvbSB0aGUgbGFyZ2VzdCBodWJzIGFuZCBwbGFjZSB0aGUgbm9kZXNcbiAgICogb24gYSBYIHBvc2l0aW9uIHRoYXQgZW5zdXJlcyB0aGVyZSB3aWxsIGJlIG5vIG92ZXJsYXAuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gcGFyZW50SWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhcmVudExldmVsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGxhY2VCcmFuY2hOb2RlcyhwYXJlbnRJZCwgcGFyZW50TGV2ZWwpIHtcbiAgICBjb25zdCBjaGlsZFJlZiA9IHRoaXMuaGllcmFyY2hpY2FsLmNoaWxkcmVuUmVmZXJlbmNlW3BhcmVudElkXTtcblxuICAgIC8vIGlmIHRoaXMgaXMgbm90IGEgcGFyZW50LCBjYW5jZWwgdGhlIHBsYWNpbmcuIFRoaXMgY2FuIGhhcHBlbiB3aXRoIG11bHRpcGxlIHBhcmVudHMgdG8gb25lIGNoaWxkLlxuICAgIGlmIChjaGlsZFJlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGEgbGlzdCBvZiBjaGlsZE5vZGVzXG4gICAgY29uc3QgY2hpbGROb2RlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRSZWYubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkTm9kZXMucHVzaCh0aGlzLmJvZHkubm9kZXNbY2hpbGRSZWZbaV1dKTtcbiAgICB9XG5cbiAgICAvLyB1c2UgdGhlIHBvc2l0aW9ucyB0byBvcmRlciB0aGUgbm9kZXMuXG4gICAgdGhpcy5kaXJlY3Rpb24uc29ydChjaGlsZE5vZGVzKTtcblxuICAgIC8vIHBvc2l0aW9uIHRoZSBjaGlsZE5vZGVzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgY29uc3QgY2hpbGROb2RlTGV2ZWwgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbY2hpbGROb2RlLmlkXTtcbiAgICAgIC8vIGNoZWNrIGlmIHRoZSBjaGlsZCBub2RlIGlzIGJlbG93IHRoZSBwYXJlbnQgbm9kZSBhbmQgaWYgaXQgaGFzIGFscmVhZHkgYmVlbiBwb3NpdGlvbmVkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGlsZE5vZGVMZXZlbCA+IHBhcmVudExldmVsICYmXG4gICAgICAgIHRoaXMucG9zaXRpb25lZE5vZGVzW2NoaWxkTm9kZS5pZF0gPT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIC8vIGdldCB0aGUgYW1vdW50IG9mIHNwYWNlIHJlcXVpcmVkIGZvciB0aGlzIG5vZGUuIElmIHBhcmVudCB0aGUgd2lkdGggaXMgYmFzZWQgb24gdGhlIGFtb3VudCBvZiBjaGlsZHJlbi5cbiAgICAgICAgY29uc3Qgc3BhY2luZyA9IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwubm9kZVNwYWNpbmc7XG4gICAgICAgIGxldCBwb3M7XG5cbiAgICAgICAgLy8gd2UgZ2V0IHRoZSBYIG9yIFkgdmFsdWVzIHdlIG5lZWQgYW5kIHN0b3JlIHRoZW0gaW4gcG9zIGFuZCBwcmV2aW91c1Bvcy5cbiAgICAgICAgLy8gVGhlIGdldCBhbmQgc2V0IG1ha2Ugc3VyZSB3ZSBnZXQgWCBvciBZXG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgcG9zID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24odGhpcy5ib2R5Lm5vZGVzW3BhcmVudElkXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcG9zID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24oY2hpbGROb2Rlc1tpIC0gMV0pICsgc3BhY2luZztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpcmVjdGlvbi5zZXRQb3NpdGlvbihjaGlsZE5vZGUsIHBvcywgY2hpbGROb2RlTGV2ZWwpO1xuICAgICAgICB0aGlzLl92YWxpZGF0ZVBvc2l0aW9uQW5kQ29udGludWUoY2hpbGROb2RlLCBjaGlsZE5vZGVMZXZlbCwgcG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjZW50ZXIgdGhlIHBhcmVudCBub2Rlcy5cbiAgICBjb25zdCBjZW50ZXIgPSB0aGlzLl9nZXRDZW50ZXJQb3NpdGlvbihjaGlsZE5vZGVzKTtcbiAgICB0aGlzLmRpcmVjdGlvbi5zZXRQb3NpdGlvbih0aGlzLmJvZHkubm9kZXNbcGFyZW50SWRdLCBjZW50ZXIsIHBhcmVudExldmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgZm9yIG92ZXJsYXAgYW5kIGlmIHJlcXVpcmVkIHNoaWZ0cyB0aGUgYnJhbmNoLiBJdCBhbHNvIGtlZXBzIHJlY29yZHMgb2YgcG9zaXRpb25lZCBub2Rlcy5cbiAgICogRmluYWxseSBpdCB3aWxsIGNhbGwgX3BsYWNlQnJhbmNoTm9kZXMgdG8gcGxhY2UgdGhlIGJyYW5jaCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbFxuICAgKiBAcGFyYW0ge251bWJlcn0gcG9zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdmFsaWRhdGVQb3NpdGlvbkFuZENvbnRpbnVlKG5vZGUsIGxldmVsLCBwb3MpIHtcbiAgICAvLyBUaGlzIG1ldGhvZCBvbmx5IHdvcmtzIGZvciBmb3JtYWwgdHJlZXMgYW5kIGZvcm1hbCBmb3Jlc3RzXG4gICAgLy8gRWFybHkgZXhpdCBpZiB0aGlzIGlzIG5vdCB0aGUgY2FzZVxuICAgIGlmICghdGhpcy5oaWVyYXJjaGljYWwuaXNUcmVlKSByZXR1cm47XG5cbiAgICAvLyBpZiBvdmVybGFwIGhhcyBiZWVuIGRldGVjdGVkLCB3ZSBzaGlmdCB0aGUgYnJhbmNoXG4gICAgaWYgKHRoaXMubGFzdE5vZGVPbkxldmVsW2xldmVsXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1BvcyA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKFxuICAgICAgICB0aGlzLmJvZHkubm9kZXNbdGhpcy5sYXN0Tm9kZU9uTGV2ZWxbbGV2ZWxdXVxuICAgICAgKTtcbiAgICAgIGlmIChwb3MgLSBwcmV2aW91c1BvcyA8IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwubm9kZVNwYWNpbmcpIHtcbiAgICAgICAgY29uc3QgZGlmZiA9IHByZXZpb3VzUG9zICsgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZyAtIHBvcztcbiAgICAgICAgY29uc3Qgc2hhcmVkUGFyZW50ID0gdGhpcy5fZmluZENvbW1vblBhcmVudChcbiAgICAgICAgICB0aGlzLmxhc3ROb2RlT25MZXZlbFtsZXZlbF0sXG4gICAgICAgICAgbm9kZS5pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zaGlmdEJsb2NrKHNoYXJlZFBhcmVudC53aXRoQ2hpbGQsIGRpZmYpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGFzdE5vZGVPbkxldmVsW2xldmVsXSA9IG5vZGUuaWQ7IC8vIHN0b3JlIGNoYW5nZSBpbiBwb3NpdGlvbi5cbiAgICB0aGlzLnBvc2l0aW9uZWROb2Rlc1tub2RlLmlkXSA9IHRydWU7XG4gICAgdGhpcy5fcGxhY2VCcmFuY2hOb2Rlcyhub2RlLmlkLCBsZXZlbCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjZWl2ZXMgYW4gYXJyYXkgd2l0aCBub2RlIGluZGljZXMgYW5kIHJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgYWN0dWFsIG5vZGUgcmVmZXJlbmNlcy5cbiAgICogVXNlZCBmb3Igc29ydGluZyBiYXNlZCBvbiBub2RlIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGUuaWQ+fSBpZEFycmF5XG4gICAqIEByZXR1cm5zIHtBcnJheS48Tm9kZT59XG4gICAqL1xuICBfaW5kZXhBcnJheVRvTm9kZXMoaWRBcnJheSkge1xuICAgIGNvbnN0IGFycmF5ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZEFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnJheS5wdXNoKHRoaXMuYm9keS5ub2Rlc1tpZEFycmF5W2ldXSk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgZGlzdHJpYnV0aW9uIG9mIGxldmVscyBiYXNlZCBvbiBodWJzaXplXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0RGlzdHJpYnV0aW9uKCkge1xuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbiA9IHt9O1xuICAgIGxldCBub2RlSWQsIG5vZGU7XG5cbiAgICAvLyB3ZSBmaXggWSBiZWNhdXNlIHRoZSBoaWVyYXJjaHkgaXMgdmVydGljYWwsXG4gICAgLy8gd2UgZml4IFggc28gd2UgZG8gbm90IGdpdmUgYSBub2RlIGFuIHggcG9zaXRpb24gZm9yIGEgc2Vjb25kIHRpbWUuXG4gICAgLy8gdGhlIGZpeCBvZiBYIGlzIHJlbW92ZWQgYWZ0ZXIgdGhlIHggdmFsdWUgaGFzIGJlZW4gc2V0LlxuICAgIGZvciAobm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkubm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgICBjb25zdCBsZXZlbCA9XG4gICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW25vZGVJZF0gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlSWRdO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbi5maXgobm9kZSwgbGV2ZWwpO1xuICAgICAgICBpZiAoZGlzdHJpYnV0aW9uW2xldmVsXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGlzdHJpYnV0aW9uW2xldmVsXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGRpc3RyaWJ1dGlvbltsZXZlbF1bbm9kZUlkXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaXN0cmlidXRpb247XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBhY3RpdmUgKGkuZS4gdmlzaWJsZSkgZWRnZXMgZm9yIHRoaXMgbm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHJldHVybnMge0FycmF5Ljx2aXMuRWRnZT59IEFycmF5IG9mIGVkZ2UgaW5zdGFuY2VzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0QWN0aXZlRWRnZXMobm9kZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgZm9yRWFjaChub2RlLmVkZ2VzLCAoZWRnZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuYm9keS5lZGdlSW5kaWNlcy5pbmRleE9mKGVkZ2UuaWQpICE9PSAtMSkge1xuICAgICAgICByZXN1bHQucHVzaChlZGdlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBodWJzaXplcyBmb3IgYWxsIGFjdGl2ZSBub2Rlcy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRIdWJTaXplcygpIHtcbiAgICBjb25zdCBodWJTaXplcyA9IHt9O1xuICAgIGNvbnN0IG5vZGVJZHMgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG5cbiAgICBmb3JFYWNoKG5vZGVJZHMsIChub2RlSWQpID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgIGNvbnN0IGh1YlNpemUgPSB0aGlzLl9nZXRBY3RpdmVFZGdlcyhub2RlKS5sZW5ndGg7XG4gICAgICBodWJTaXplc1todWJTaXplXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICAvLyBNYWtlIGFuIGFycmF5IG9mIHRoZSBzaXplIHNvcnRlZCBkZXNjZW5kaW5nXG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yRWFjaChodWJTaXplcywgKHNpemUpID0+IHtcbiAgICAgIHJlc3VsdC5wdXNoKE51bWJlcihzaXplKSk7XG4gICAgfSk7XG5cbiAgICByZXN1bHQuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGIgLSBhO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBub2RlcyBpbiBsZXZlbHMgYmFzZWQgb24gdGhlIHJlY3Vyc2l2ZSBicmFuY2hpbmcgZnJvbSB0aGUgbGFyZ2VzdCBodWJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RldGVybWluZUxldmVsc0J5SHVic2l6ZSgpIHtcbiAgICBjb25zdCBsZXZlbERvd25zdHJlYW0gPSAobm9kZUEsIG5vZGVCKSA9PiB7XG4gICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbERvd25zdHJlYW0obm9kZUEsIG5vZGVCKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaHViU2l6ZXMgPSB0aGlzLl9nZXRIdWJTaXplcygpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBodWJTaXplcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgaHViU2l6ZSA9IGh1YlNpemVzW2ldO1xuICAgICAgaWYgKGh1YlNpemUgPT09IDApIGJyZWFrO1xuXG4gICAgICBmb3JFYWNoKHRoaXMuYm9keS5ub2RlSW5kaWNlcywgKG5vZGVJZCkgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG5cbiAgICAgICAgaWYgKGh1YlNpemUgPT09IHRoaXMuX2dldEFjdGl2ZUVkZ2VzKG5vZGUpLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuX2NyYXdsTmV0d29yayhsZXZlbERvd25zdHJlYW0sIG5vZGVJZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUT0RPOiByZWxlYXNlIGZlYXR1cmVcbiAgICogVE9ETzogRGV0ZXJtaW5lIGlmIHRoaXMgZmVhdHVyZSBpcyBuZWVkZWQgYXQgYWxsXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lTGV2ZWxzQ3VzdG9tQ2FsbGJhY2soKSB7XG4gICAgY29uc3QgbWluTGV2ZWwgPSAxMDAwMDA7XG5cbiAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBjb21lIGZyb20gb3B0aW9ucy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gVGhpcyBzaG91bGQgZXZlbnR1YWxseSBiZSBpbXBsZW1lbnRlZCB3aXRoIHRoZXNlIHBhcmFtZXRlcnMgdXNlZC5cbiAgICBjb25zdCBjdXN0b21DYWxsYmFjayA9IGZ1bmN0aW9uIChub2RlQSwgbm9kZUIsIGVkZ2UpIHt9O1xuXG4gICAgLy8gVE9ETzogcGVyaGFwcyBtb3ZlIHRvIEhpZXJhcmNoaWNhbFN0YXR1cy5cbiAgICAvLyAgICAgICBCdXQgSSBjdXJyZW50bHkgZG9uJ3Qgc2VlIHRoZSBwb2ludCwgdGhpcyBtZXRob2QgaXMgbm90IHVzZWQuXG4gICAgY29uc3QgbGV2ZWxCeURpcmVjdGlvbiA9IChub2RlQSwgbm9kZUIsIGVkZ2UpID0+IHtcbiAgICAgIGxldCBsZXZlbEEgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZUEuaWRdO1xuICAgICAgLy8gc2V0IGluaXRpYWwgbGV2ZWxcbiAgICAgIGlmIChsZXZlbEEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXZlbEEgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZUEuaWRdID0gbWluTGV2ZWw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpZmYgPSBjdXN0b21DYWxsYmFjayhcbiAgICAgICAgTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKG5vZGVBLCBcIm5vZGVcIiksXG4gICAgICAgIE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhub2RlQiwgXCJub2RlXCIpLFxuICAgICAgICBOZXR3b3JrVXRpbC5jbG9uZU9wdGlvbnMoZWRnZSwgXCJlZGdlXCIpXG4gICAgICApO1xuXG4gICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZUIuaWRdID0gbGV2ZWxBICsgZGlmZjtcbiAgICB9O1xuXG4gICAgdGhpcy5fY3Jhd2xOZXR3b3JrKGxldmVsQnlEaXJlY3Rpb24pO1xuICAgIHRoaXMuaGllcmFyY2hpY2FsLnNldE1pbkxldmVsVG9aZXJvKHRoaXMuYm9keS5ub2Rlcyk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb2NhdGUgbm9kZXMgaW4gbGV2ZWxzIGJhc2VkIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGVkZ2VzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RldGVybWluZUxldmVsc0RpcmVjdGVkKCkge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLnJlZHVjZSgoYWNjLCBpZCkgPT4ge1xuICAgICAgYWNjLnNldChpZCwgdGhpcy5ib2R5Lm5vZGVzW2lkXSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG5ldyBNYXAoKSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5zaGFrZVRvd2FyZHMgPT09IFwicm9vdHNcIikge1xuICAgICAgdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzID0gZmlsbExldmVsc0J5RGlyZWN0aW9uUm9vdHMobm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHMgPSBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25MZWF2ZXMobm9kZXMpO1xuICAgIH1cblxuICAgIHRoaXMuaGllcmFyY2hpY2FsLnNldE1pbkxldmVsVG9aZXJvKHRoaXMuYm9keS5ub2Rlcyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBib29ra2VlcGluZyBvZiBwYXJlbnQgYW5kIGNoaWxkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dlbmVyYXRlTWFwKCkge1xuICAgIGNvbnN0IGZpbGxJblJlbGF0aW9ucyA9IChwYXJlbnROb2RlLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW2NoaWxkTm9kZS5pZF0gPlxuICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbcGFyZW50Tm9kZS5pZF1cbiAgICAgICkge1xuICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5hZGRSZWxhdGlvbihwYXJlbnROb2RlLmlkLCBjaGlsZE5vZGUuaWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLl9jcmF3bE5ldHdvcmsoZmlsbEluUmVsYXRpb25zKTtcbiAgICB0aGlzLmhpZXJhcmNoaWNhbC5jaGVja0lmVHJlZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyYXdsIG92ZXIgdGhlIGVudGlyZSBuZXR3b3JrIGFuZCB1c2UgYSBjYWxsYmFjayBvbiBlYWNoIG5vZGUgY291cGxlIHRoYXQgaXMgY29ubmVjdGVkIHRvIGVhY2ggb3RoZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFjaz1mdW5jdGlvbigpe31dICAgICAgICAgIHwgd2lsbCByZWNlaXZlIG5vZGVBLCBub2RlQiBhbmQgdGhlIGNvbm5lY3RpbmcgZWRnZS4gQSBhbmQgQiBhcmUgZGlzdGluY3QuXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gc3RhcnRpbmdOb2RlSWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmF3bE5ldHdvcmsoY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fSwgc3RhcnRpbmdOb2RlSWQpIHtcbiAgICBjb25zdCBwcm9ncmVzcyA9IHt9O1xuXG4gICAgY29uc3QgY3Jhd2xlciA9IChub2RlLCB0cmVlKSA9PiB7XG4gICAgICBpZiAocHJvZ3Jlc3Nbbm9kZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5zZXRUcmVlSW5kZXgobm9kZSwgdHJlZSk7XG5cbiAgICAgICAgcHJvZ3Jlc3Nbbm9kZS5pZF0gPSB0cnVlO1xuICAgICAgICBsZXQgY2hpbGROb2RlO1xuICAgICAgICBjb25zdCBlZGdlcyA9IHRoaXMuX2dldEFjdGl2ZUVkZ2VzKG5vZGUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2ldO1xuICAgICAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGVkZ2UudG9JZCA9PSBub2RlLmlkKSB7XG4gICAgICAgICAgICAgIC8vIE5vdCAnPT09JyBiZWNhdXNlIGlkJ3MgY2FuIGJlIHN0cmluZyBhbmQgbnVtZXJpY1xuICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBlZGdlLmZyb207XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBlZGdlLnRvO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobm9kZS5pZCAhPSBjaGlsZE5vZGUuaWQpIHtcbiAgICAgICAgICAgICAgLy8gTm90ICchPT0nIGJlY2F1c2UgaWQncyBjYW4gYmUgc3RyaW5nIGFuZCBudW1lcmljXG4gICAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIGNoaWxkTm9kZSwgZWRnZSk7XG4gICAgICAgICAgICAgIGNyYXdsZXIoY2hpbGROb2RlLCB0cmVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHN0YXJ0aW5nTm9kZUlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENyYXdsIG92ZXIgYWxsIG5vZGVzXG4gICAgICBsZXQgdHJlZUluZGV4ID0gMDsgLy8gU2VydmVzIHRvIHBhc3MgYSB1bmlxdWUgaWQgZm9yIHRoZSBjdXJyZW50IGRpc3RpbmN0IHRyZWVcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZUlkID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldO1xuXG4gICAgICAgIGlmIChwcm9ncmVzc1tub2RlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgICAgY3Jhd2xlcihub2RlLCB0cmVlSW5kZXgpO1xuICAgICAgICAgIHRyZWVJbmRleCArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyYXdsIGZyb20gdGhlIGdpdmVuIHN0YXJ0aW5nIG5vZGVcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbc3RhcnRpbmdOb2RlSWRdO1xuICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiTm9kZSBub3QgZm91bmQ6XCIsIHN0YXJ0aW5nTm9kZUlkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY3Jhd2xlcihub2RlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hpZnQgYSBicmFuY2ggYSBjZXJ0YWluIGRpc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gcGFyZW50SWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpZmZcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zaGlmdEJsb2NrKHBhcmVudElkLCBkaWZmKSB7XG4gICAgY29uc3QgcHJvZ3Jlc3MgPSB7fTtcbiAgICBjb25zdCBzaGlmdGVyID0gKHBhcmVudElkKSA9PiB7XG4gICAgICBpZiAocHJvZ3Jlc3NbcGFyZW50SWRdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHByb2dyZXNzW3BhcmVudElkXSA9IHRydWU7XG4gICAgICB0aGlzLmRpcmVjdGlvbi5zaGlmdChwYXJlbnRJZCwgZGlmZik7XG5cbiAgICAgIGNvbnN0IGNoaWxkUmVmID0gdGhpcy5oaWVyYXJjaGljYWwuY2hpbGRyZW5SZWZlcmVuY2VbcGFyZW50SWRdO1xuICAgICAgaWYgKGNoaWxkUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZFJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHNoaWZ0ZXIoY2hpbGRSZWZbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBzaGlmdGVyKHBhcmVudElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgY29tbW9uIHBhcmVudCBiZXR3ZWVuIGJyYW5jaGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IGNoaWxkQVxuICAgKiBAcGFyYW0ge05vZGUuaWR9IGNoaWxkQlxuICAgKiBAcmV0dXJucyB7e2ZvdW5kUGFyZW50LCB3aXRoQ2hpbGR9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpbmRDb21tb25QYXJlbnQoY2hpbGRBLCBjaGlsZEIpIHtcbiAgICBjb25zdCBwYXJlbnRzID0ge307XG4gICAgY29uc3QgaXRlcmF0ZVBhcmVudHMgPSAocGFyZW50cywgY2hpbGQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudFJlZiA9IHRoaXMuaGllcmFyY2hpY2FsLnBhcmVudFJlZmVyZW5jZVtjaGlsZF07XG4gICAgICBpZiAocGFyZW50UmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnRSZWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRSZWZbaV07XG4gICAgICAgICAgcGFyZW50c1twYXJlbnRdID0gdHJ1ZTtcbiAgICAgICAgICBpdGVyYXRlUGFyZW50cyhwYXJlbnRzLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmaW5kUGFyZW50ID0gKHBhcmVudHMsIGNoaWxkKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRSZWYgPSB0aGlzLmhpZXJhcmNoaWNhbC5wYXJlbnRSZWZlcmVuY2VbY2hpbGRdO1xuICAgICAgaWYgKHBhcmVudFJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50UmVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50ID0gcGFyZW50UmVmW2ldO1xuICAgICAgICAgIGlmIChwYXJlbnRzW3BhcmVudF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZm91bmRQYXJlbnQ6IHBhcmVudCwgd2l0aENoaWxkOiBjaGlsZCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBicmFuY2ggPSBmaW5kUGFyZW50KHBhcmVudHMsIHBhcmVudCk7XG4gICAgICAgICAgaWYgKGJyYW5jaC5mb3VuZFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGZvdW5kUGFyZW50OiBudWxsLCB3aXRoQ2hpbGQ6IGNoaWxkIH07XG4gICAgfTtcblxuICAgIGl0ZXJhdGVQYXJlbnRzKHBhcmVudHMsIGNoaWxkQSk7XG4gICAgcmV0dXJuIGZpbmRQYXJlbnQocGFyZW50cywgY2hpbGRCKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHN0cmF0ZWd5IHBhdHRlcm4gZm9yIGhhbmRsaW5nIHRoZSBjb29yZGluYXRlcyBnaXZlbiB0aGUgY3VycmVudCBkaXJlY3Rpb24uXG4gICAqXG4gICAqIFRoZSBpbmRpdmlkdWFsIGluc3RhbmNlcyBjb250YWluIGFsbCB0aGUgb3BlcmF0aW9ucyBhbmQgZGF0YSBzcGVjaWZpYyB0byBhIGxheW91dCBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvc2l0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkb05vdFVwZGF0ZT1mYWxzZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNldERpcmVjdGlvblN0cmF0ZWd5KCkge1xuICAgIGNvbnN0IGlzVmVydGljYWwgPVxuICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5kaXJlY3Rpb24gPT09IFwiVURcIiB8fFxuICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5kaXJlY3Rpb24gPT09IFwiRFVcIjtcblxuICAgIGlmIChpc1ZlcnRpY2FsKSB7XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9IG5ldyBWZXJ0aWNhbFN0cmF0ZWd5KHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9IG5ldyBIb3Jpem9udGFsU3RyYXRlZ3kodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgY2VudGVyIHBvc2l0aW9uIG9mIGEgYnJhbmNoIGZyb20gdGhlIHBhc3NlZCBsaXN0IG9mIGNoaWxkIG5vZGVzXG4gICAqXG4gICAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBwb3NpdGlvbnMgb2YgYWxsIHRoZSBjaGlsZCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZXx2aXMuTm9kZS5pZD59IGNoaWxkTm9kZXMgIEFycmF5IG9mIGVpdGhlciBjaGlsZCBub2RlcyBvciBub2RlIGlkJ3NcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRDZW50ZXJQb3NpdGlvbihjaGlsZE5vZGVzKSB7XG4gICAgbGV0IG1pblBvcyA9IDFlOTtcbiAgICBsZXQgbWF4UG9zID0gLTFlOTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNoaWxkTm9kZTtcbiAgICAgIGlmIChjaGlsZE5vZGVzW2ldLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2Rlc1tpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZUlkID0gY2hpbGROb2Rlc1tpXTtcbiAgICAgICAgY2hpbGROb2RlID0gdGhpcy5ib2R5Lm5vZGVzW2NoaWxkTm9kZUlkXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihjaGlsZE5vZGUpO1xuICAgICAgbWluUG9zID0gTWF0aC5taW4obWluUG9zLCBwb3NpdGlvbik7XG4gICAgICBtYXhQb3MgPSBNYXRoLm1heChtYXhQb3MsIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMC41ICogKG1pblBvcyArIG1heFBvcyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGF5b3V0RW5naW5lO1xuIiwgImltcG9ydCBcIi4vTWFuaXB1bGF0aW9uU3lzdGVtLmNzc1wiO1xuXG5pbXBvcnQgeyBIYW1tZXIsIGRlZXBFeHRlbmQsIHJlY3Vyc2l2ZURPTURlbGV0ZSB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCB7IHY0IGFzIHJhbmRvbVVVSUQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgb25Ub3VjaCB9IGZyb20gXCIuLi8uLi9oYW1tZXJVdGlsXCI7XG5cbi8qKlxuICogQ2xlYXJzIHRoZSB0b29sYmFyIGRpdiBlbGVtZW50IG9mIGNoaWxkcmVuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgTWFuaXB1bGF0aW9uU3lzdGVtIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAgICogQHBhcmFtIHtTZWxlY3Rpb25IYW5kbGVyfSBzZWxlY3Rpb25IYW5kbGVyXG4gICAqIEBwYXJhbSB7SW50ZXJhY3Rpb25IYW5kbGVyfSBpbnRlcmFjdGlvbkhhbmRsZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGNhbnZhcywgc2VsZWN0aW9uSGFuZGxlciwgaW50ZXJhY3Rpb25IYW5kbGVyKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBzZWxlY3Rpb25IYW5kbGVyO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyID0gaW50ZXJhY3Rpb25IYW5kbGVyO1xuXG4gICAgdGhpcy5lZGl0TW9kZSA9IGZhbHNlO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdE1vZGVEaXYgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jbG9zZURpdiA9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuX2RvbUV2ZW50TGlzdGVuZXJDbGVhbnVwUXVldWUgPSBbXTtcbiAgICB0aGlzLnRlbXBvcmFyeVVJRnVuY3Rpb25zID0ge307XG4gICAgdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucyA9IFtdO1xuXG4gICAgdGhpcy50b3VjaFRpbWUgPSAwO1xuICAgIHRoaXMudGVtcG9yYXJ5SWRzID0geyBub2RlczogW10sIGVkZ2VzOiBbXSB9O1xuICAgIHRoaXMuZ3VpRW5hYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuaW5Nb2RlID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgaW5pdGlhbGx5QWN0aXZlOiBmYWxzZSxcbiAgICAgIGFkZE5vZGU6IHRydWUsXG4gICAgICBhZGRFZGdlOiB0cnVlLFxuICAgICAgZWRpdE5vZGU6IHVuZGVmaW5lZCxcbiAgICAgIGVkaXRFZGdlOiB0cnVlLFxuICAgICAgZGVsZXRlTm9kZTogdHJ1ZSxcbiAgICAgIGRlbGV0ZUVkZ2U6IHRydWUsXG4gICAgICBjb250cm9sTm9kZVN0eWxlOiB7XG4gICAgICAgIHNoYXBlOiBcImRvdFwiLFxuICAgICAgICBzaXplOiA2LFxuICAgICAgICBjb2xvcjoge1xuICAgICAgICAgIGJhY2tncm91bmQ6IFwiI2ZmMDAwMFwiLFxuICAgICAgICAgIGJvcmRlcjogXCIjM2MzYzNjXCIsXG4gICAgICAgICAgaGlnaGxpZ2h0OiB7IGJhY2tncm91bmQ6IFwiIzA3Zjk2OFwiLCBib3JkZXI6IFwiIzNjM2MzY1wiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGJvcmRlcldpZHRoOiAyLFxuICAgICAgICBib3JkZXJXaWR0aFNlbGVjdGVkOiAyLFxuICAgICAgfSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLl9jbGVhbigpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFDaGFuZ2VkXCIsIHRoaXMuX3Jlc3RvcmUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfcmVzZXREYXRhXCIsIHRoaXMuX3Jlc3RvcmUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgc29tZXRoaW5nIGNoYW5nZXMgaW4gdGhlIGRhdGEgZHVyaW5nIGVkaXRpbmcsIHN3aXRjaCBiYWNrIHRvIHRoZSBpbml0aWFsIGRhdGFtYW5pcHVsYXRpb24gc3RhdGUgYW5kIGNsb3NlIGFsbCBlZGl0IG1vZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc3RvcmUoKSB7XG4gICAgaWYgKHRoaXMuaW5Nb2RlICE9PSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbml0aWFsbHlBY3RpdmUgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlRWRpdE1vZGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBPcHRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhbGxPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBnbG9iYWxPcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMsIGFsbE9wdGlvbnMsIGdsb2JhbE9wdGlvbnMpIHtcbiAgICBpZiAoYWxsT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYWxsT3B0aW9ucy5sb2NhbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlID0gYWxsT3B0aW9ucy5sb2NhbGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlID0gZ2xvYmFsT3B0aW9ucy5sb2NhbGU7XG4gICAgICB9XG4gICAgICBpZiAoYWxsT3B0aW9ucy5sb2NhbGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXMgPSBhbGxPcHRpb25zLmxvY2FsZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlcyA9IGdsb2JhbE9wdGlvbnMubG9jYWxlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gb3B0aW9ucztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgZGVlcEV4dGVuZCh0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbml0aWFsbHlBY3RpdmUgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5lZGl0TW9kZSA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLl9zZXR1cCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBlZGl0LW1vZGUuIERyYXdzIHRoZSBET00gcmVxdWlyZWQgYW5kIGNsZWFucyB1cCBhZnRlciBpdHNlbGYuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0b2dnbGVFZGl0TW9kZSgpIHtcbiAgICBpZiAodGhpcy5lZGl0TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kaXNhYmxlRWRpdE1vZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIEVkaXQgTW9kZVxuICAgKi9cbiAgZW5hYmxlRWRpdE1vZGUoKSB7XG4gICAgdGhpcy5lZGl0TW9kZSA9IHRydWU7XG5cbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB0aGlzLmNsb3NlRGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB0aGlzLmVkaXRNb2RlRGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyBFZGl0IE1vZGVcbiAgICovXG4gIGRpc2FibGVFZGl0TW9kZSgpIHtcbiAgICB0aGlzLmVkaXRNb2RlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgIHRoaXMuY2xvc2VEaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgdGhpcy5lZGl0TW9kZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgdGhpcy5fY3JlYXRlRWRpdEJ1dHRvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBtYWluIHRvb2xiYXIuIFJlbW92ZXMgZnVuY3Rpb25zIGJvdW5kIHRvIHRoZSBzZWxlY3QgZXZlbnQuIEJpbmRzIGFsbCB0aGUgYnV0dG9ucyBvZiB0aGUgdG9vbGJhci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNob3dNYW5pcHVsYXRvclRvb2xiYXIoKSB7XG4gICAgLy8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgYW55IGJvdW5kIGZ1bmN0aW9ucyBvciBldmVudHMsIHJlbW92ZSBjb250cm9sIG5vZGVzLCByZXN0b3JlIHBoeXNpY3NcbiAgICB0aGlzLl9jbGVhbigpO1xuXG4gICAgLy8gcmVzZXQgZ2xvYmFsIHZhcmlhYmxlc1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NID0ge307XG5cbiAgICAvLyBpZiB0aGUgZ3VpIGlzIGVuYWJsZWQsIGRyYXcgYWxsIGVsZW1lbnRzLlxuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIGEgX3Jlc3RvcmUgd2lsbCBoaWRlIHRoZXNlIG1lbnVzXG4gICAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTtcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB0aGlzLmNsb3NlRGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cbiAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZUNvdW50ID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkTm9kZUNvdW50KCk7XG4gICAgICBjb25zdCBzZWxlY3RlZEVkZ2VDb3VudCA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZEVkZ2VDb3VudCgpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRUb3RhbENvdW50ID0gc2VsZWN0ZWROb2RlQ291bnQgKyBzZWxlY3RlZEVkZ2VDb3VudDtcbiAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdO1xuICAgICAgbGV0IG5lZWRTZXBlcmF0b3IgPSBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hZGROb2RlICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9jcmVhdGVBZGROb2RlQnV0dG9uKGxvY2FsZSk7XG4gICAgICAgIG5lZWRTZXBlcmF0b3IgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hZGRFZGdlICE9PSBmYWxzZSkge1xuICAgICAgICBpZiAobmVlZFNlcGVyYXRvciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZWVkU2VwZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jcmVhdGVBZGRFZGdlQnV0dG9uKGxvY2FsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgc2VsZWN0ZWROb2RlQ291bnQgPT09IDEgJiZcbiAgICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lZGl0Tm9kZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICApIHtcbiAgICAgICAgaWYgKG5lZWRTZXBlcmF0b3IgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLl9jcmVhdGVTZXBlcmF0b3IoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmVlZFNlcGVyYXRvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3JlYXRlRWRpdE5vZGVCdXR0b24obG9jYWxlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHNlbGVjdGVkRWRnZUNvdW50ID09PSAxICYmXG4gICAgICAgIHNlbGVjdGVkTm9kZUNvdW50ID09PSAwICYmXG4gICAgICAgIHRoaXMub3B0aW9ucy5lZGl0RWRnZSAhPT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICBpZiAobmVlZFNlcGVyYXRvciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZWVkU2VwZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jcmVhdGVFZGl0RWRnZUJ1dHRvbihsb2NhbGUpO1xuICAgICAgfVxuXG4gICAgICAvLyByZW1vdmUgYnV0dG9uc1xuICAgICAgaWYgKHNlbGVjdGVkVG90YWxDb3VudCAhPT0gMCkge1xuICAgICAgICBpZiAoc2VsZWN0ZWROb2RlQ291bnQgPiAwICYmIHRoaXMub3B0aW9ucy5kZWxldGVOb2RlICE9PSBmYWxzZSkge1xuICAgICAgICAgIGlmIChuZWVkU2VwZXJhdG9yID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVTZXBlcmF0b3IoNCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2NyZWF0ZURlbGV0ZUJ1dHRvbihsb2NhbGUpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHNlbGVjdGVkTm9kZUNvdW50ID09PSAwICYmXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmRlbGV0ZUVkZ2UgIT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChuZWVkU2VwZXJhdG9yID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVTZXBlcmF0b3IoNCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2NyZWF0ZURlbGV0ZUJ1dHRvbihsb2NhbGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGJpbmQgdGhlIGNsb3NlIGJ1dHRvblxuICAgICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHModGhpcy5jbG9zZURpdiwgdGhpcy50b2dnbGVFZGl0TW9kZS5iaW5kKHRoaXMpKTtcblxuICAgICAgLy8gcmVmcmVzaCB0aGlzIGJhciBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHNlbGVjdGVkXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kRXZlbnQoXG4gICAgICAgIFwic2VsZWN0XCIsXG4gICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhci5iaW5kKHRoaXMpXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHJlZHJhdyB0byBzaG93IGFueSBwb3NzaWJsZSBjaGFuZ2VzXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSB0b29sYmFyIGZvciBhZGRpbmcgTm9kZXNcbiAgICovXG4gIGFkZE5vZGVNb2RlKCkge1xuICAgIC8vIHdoZW4gdXNpbmcgdGhlIGd1aSwgZW5hYmxlIGVkaXQgbW9kZSBpZiBpdCB3YXNudCBhbHJlYWR5LlxuICAgIGlmICh0aGlzLmVkaXRNb2RlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgfVxuXG4gICAgLy8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgYW55IGJvdW5kIGZ1bmN0aW9ucyBvciBldmVudHMsIHJlbW92ZSBjb250cm9sIG5vZGVzLCByZXN0b3JlIHBoeXNpY3NcbiAgICB0aGlzLl9jbGVhbigpO1xuXG4gICAgdGhpcy5pbk1vZGUgPSBcImFkZE5vZGVcIjtcbiAgICBpZiAodGhpcy5ndWlFbmFibGVkID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBsb2NhbGUgPSB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXTtcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NID0ge307XG4gICAgICB0aGlzLl9jcmVhdGVCYWNrQnV0dG9uKGxvY2FsZSk7XG4gICAgICB0aGlzLl9jcmVhdGVTZXBlcmF0b3IoKTtcbiAgICAgIHRoaXMuX2NyZWF0ZURlc2NyaXB0aW9uKFxuICAgICAgICBsb2NhbGVbXCJhZGREZXNjcmlwdGlvblwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiYWRkRGVzY3JpcHRpb25cIl1cbiAgICAgICk7XG5cbiAgICAgIC8vIGJpbmQgdGhlIGNsb3NlIGJ1dHRvblxuICAgICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHModGhpcy5jbG9zZURpdiwgdGhpcy50b2dnbGVFZGl0TW9kZS5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kRXZlbnQoXCJjbGlja1wiLCB0aGlzLl9wZXJmb3JtQWRkTm9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxsIHRoZSBib3VuZCBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGVkaXRpbmcgb2YgdGhlIG5vZGUuIFRoZSBub2RlIGhhcyB0byBiZSBzZWxlY3RlZC5cbiAgICovXG4gIGVkaXROb2RlKCkge1xuICAgIC8vIHdoZW4gdXNpbmcgdGhlIGd1aSwgZW5hYmxlIGVkaXQgbW9kZSBpZiBpdCB3YXNudCBhbHJlYWR5LlxuICAgIGlmICh0aGlzLmVkaXRNb2RlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgfVxuXG4gICAgLy8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgYW55IGJvdW5kIGZ1bmN0aW9ucyBvciBldmVudHMsIHJlbW92ZSBjb250cm9sIG5vZGVzLCByZXN0b3JlIHBoeXNpY3NcbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2RlcygpWzBdO1xuICAgIGlmIChub2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaW5Nb2RlID0gXCJlZGl0Tm9kZVwiO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuZWRpdE5vZGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpZiAobm9kZS5pc0NsdXN0ZXIgIT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gZGVlcEV4dGVuZCh7fSwgbm9kZS5vcHRpb25zLCBmYWxzZSk7XG4gICAgICAgICAgZGF0YS54ID0gbm9kZS54O1xuICAgICAgICAgIGRhdGEueSA9IG5vZGUueTtcblxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWRpdE5vZGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZWRpdE5vZGUoZGF0YSwgKGZpbmFsaXplZERhdGEpID0+IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZWREYXRhICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmluTW9kZSA9PT0gXCJlZGl0Tm9kZVwiXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGZvciB3aGF0ZXZlciByZWFzb24gdGhlIG1vZGUgaGFzIGNoYW5nZXMgKGR1ZSB0byBkYXRhc2V0IGNoYW5nZSkgZGlzcmVnYXJkIHRoZSBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldERhdGFTZXQoKS51cGRhdGUoZmluYWxpemVkRGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIlRoZSBmdW5jdGlvbiBmb3IgZWRpdCBkb2VzIG5vdCBzdXBwb3J0IHR3byBhcmd1bWVudHMgKGRhdGEsIGNhbGxiYWNrKVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbGVydChcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdW1wiZWRpdENsdXN0ZXJFcnJvclwiXSB8fFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdENsdXN0ZXJFcnJvclwiXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIk5vIGZ1bmN0aW9uIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8gaGFuZGxlIHRoZSBlZGl0aW5nIG9mIG5vZGVzLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGUgdGhlIHRvb2xiYXIgdG8gY29ubmVjdCBub2Rlc1xuICAgKi9cbiAgYWRkRWRnZU1vZGUoKSB7XG4gICAgLy8gd2hlbiB1c2luZyB0aGUgZ3VpLCBlbmFibGUgZWRpdCBtb2RlIGlmIGl0IHdhc250IGFscmVhZHkuXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICB9XG5cbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICB0aGlzLmluTW9kZSA9IFwiYWRkRWRnZVwiO1xuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25ET00gPSB7fTtcbiAgICAgIHRoaXMuX2NyZWF0ZUJhY2tCdXR0b24obG9jYWxlKTtcbiAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigpO1xuICAgICAgdGhpcy5fY3JlYXRlRGVzY3JpcHRpb24oXG4gICAgICAgIGxvY2FsZVtcImVkZ2VEZXNjcmlwdGlvblwiXSB8fFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJlZGdlRGVzY3JpcHRpb25cIl1cbiAgICAgICk7XG5cbiAgICAgIC8vIGJpbmQgdGhlIGNsb3NlIGJ1dHRvblxuICAgICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHModGhpcy5jbG9zZURpdiwgdGhpcy50b2dnbGVFZGl0TW9kZS5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICAvLyB0ZW1wb3JhcmlseSBvdmVybG9hZCBmdW5jdGlvbnNcbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvblRvdWNoXCIsIHRoaXMuX2hhbmRsZUNvbm5lY3QuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25EcmFnRW5kXCIsIHRoaXMuX2ZpbmlzaENvbm5lY3QuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25EcmFnXCIsIHRoaXMuX2RyYWdDb250cm9sTm9kZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvblJlbGVhc2VcIiwgdGhpcy5fZmluaXNoQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbkRyYWdTdGFydFwiLCB0aGlzLl9kcmFnU3RhcnRFZGdlLmJpbmQodGhpcykpO1xuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uSG9sZFwiLCAoKSA9PiB7fSk7XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIHRoZSB0b29sYmFyIHRvIGVkaXQgZWRnZXNcbiAgICovXG4gIGVkaXRFZGdlTW9kZSgpIHtcbiAgICAvLyB3aGVuIHVzaW5nIHRoZSBndWksIGVuYWJsZSBlZGl0IG1vZGUgaWYgaXQgd2Fzbid0IGFscmVhZHkuXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICB9XG5cbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICB0aGlzLmluTW9kZSA9IFwiZWRpdEVkZ2VcIjtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVkaXRFZGdlID09PSBcIm9iamVjdFwiICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVkaXRFZGdlLmVkaXRXaXRob3V0RHJhZyA9PT0gXCJmdW5jdGlvblwiXG4gICAgKSB7XG4gICAgICB0aGlzLmVkZ2VCZWluZ0VkaXRlZElkID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkRWRnZUlkcygpWzBdO1xuICAgICAgaWYgKHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBlZGdlID0gdGhpcy5ib2R5LmVkZ2VzW3RoaXMuZWRnZUJlaW5nRWRpdGVkSWRdO1xuICAgICAgICB0aGlzLl9wZXJmb3JtRWRpdEVkZ2UoZWRnZS5mcm9tLmlkLCBlZGdlLnRvLmlkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5ndWlFbmFibGVkID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBsb2NhbGUgPSB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXTtcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NID0ge307XG4gICAgICB0aGlzLl9jcmVhdGVCYWNrQnV0dG9uKGxvY2FsZSk7XG4gICAgICB0aGlzLl9jcmVhdGVTZXBlcmF0b3IoKTtcbiAgICAgIHRoaXMuX2NyZWF0ZURlc2NyaXB0aW9uKFxuICAgICAgICBsb2NhbGVbXCJlZGl0RWRnZURlc2NyaXB0aW9uXCJdIHx8XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImVkaXRFZGdlRGVzY3JpcHRpb25cIl1cbiAgICAgICk7XG5cbiAgICAgIC8vIGJpbmQgdGhlIGNsb3NlIGJ1dHRvblxuICAgICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHModGhpcy5jbG9zZURpdiwgdGhpcy50b2dnbGVFZGl0TW9kZS5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLmVkZ2VCZWluZ0VkaXRlZElkID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkRWRnZUlkcygpWzBdO1xuICAgIGlmICh0aGlzLmVkZ2VCZWluZ0VkaXRlZElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy5lZGdlQmVpbmdFZGl0ZWRJZF07XG5cbiAgICAgIC8vIGNyZWF0ZSBjb250cm9sIG5vZGVzXG4gICAgICBjb25zdCBjb250cm9sTm9kZUZyb20gPSB0aGlzLl9nZXROZXdUYXJnZXROb2RlKGVkZ2UuZnJvbS54LCBlZGdlLmZyb20ueSk7XG4gICAgICBjb25zdCBjb250cm9sTm9kZVRvID0gdGhpcy5fZ2V0TmV3VGFyZ2V0Tm9kZShlZGdlLnRvLngsIGVkZ2UudG8ueSk7XG5cbiAgICAgIHRoaXMudGVtcG9yYXJ5SWRzLm5vZGVzLnB1c2goY29udHJvbE5vZGVGcm9tLmlkKTtcbiAgICAgIHRoaXMudGVtcG9yYXJ5SWRzLm5vZGVzLnB1c2goY29udHJvbE5vZGVUby5pZCk7XG5cbiAgICAgIHRoaXMuYm9keS5ub2Rlc1tjb250cm9sTm9kZUZyb20uaWRdID0gY29udHJvbE5vZGVGcm9tO1xuICAgICAgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLnB1c2goY29udHJvbE5vZGVGcm9tLmlkKTtcbiAgICAgIHRoaXMuYm9keS5ub2Rlc1tjb250cm9sTm9kZVRvLmlkXSA9IGNvbnRyb2xOb2RlVG87XG4gICAgICB0aGlzLmJvZHkubm9kZUluZGljZXMucHVzaChjb250cm9sTm9kZVRvLmlkKTtcblxuICAgICAgLy8gdGVtcG9yYXJpbHkgb3ZlcmxvYWQgVUkgZnVuY3Rpb25zLCBjbGVhbmVkIHVwIGF1dG9tYXRpY2FsbHkgYmVjYXVzZSBvZiBfdGVtcG9yYXJ5QmluZFVJXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvblRvdWNoXCIsIHRoaXMuX2NvbnRyb2xOb2RlVG91Y2guYmluZCh0aGlzKSk7IC8vIHVzZWQgdG8gZ2V0IHRoZSBwb3NpdGlvblxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25UYXBcIiwgKCkgPT4ge30pOyAvLyBkaXNhYmxlZFxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25Ib2xkXCIsICgpID0+IHt9KTsgLy8gZGlzYWJsZWRcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcbiAgICAgICAgXCJvbkRyYWdTdGFydFwiLFxuICAgICAgICB0aGlzLl9jb250cm9sTm9kZURyYWdTdGFydC5iaW5kKHRoaXMpXG4gICAgICApOyAvLyB1c2VkIHRvIHNlbGVjdCBjb250cm9sIG5vZGVcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uRHJhZ1wiLCB0aGlzLl9jb250cm9sTm9kZURyYWcuYmluZCh0aGlzKSk7IC8vIHVzZWQgdG8gZHJhZyBjb250cm9sIG5vZGVcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uRHJhZ0VuZFwiLCB0aGlzLl9jb250cm9sTm9kZURyYWdFbmQuYmluZCh0aGlzKSk7IC8vIHVzZWQgdG8gY29ubmVjdCBvciByZXZlcnQgY29udHJvbCBub2Rlc1xuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25Nb3VzZU1vdmVcIiwgKCkgPT4ge30pOyAvLyBkaXNhYmxlZFxuXG4gICAgICAvLyBjcmVhdGUgZnVuY3Rpb24gdG8gcG9zaXRpb24gY29udHJvbCBub2RlcyBjb3JyZWN0bHkgb24gbW92ZW1lbnRcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB1cCBiZWNhdXNlIHdlIHVzZSB0aGUgdGVtcG9yYXJ5IGJpbmRcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRFdmVudChcImJlZm9yZURyYXdpbmdcIiwgKGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBlZGdlLmVkZ2VUeXBlLmZpbmRCb3JkZXJQb3NpdGlvbnMoY3R4KTtcbiAgICAgICAgaWYgKGNvbnRyb2xOb2RlRnJvbS5zZWxlY3RlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBjb250cm9sTm9kZUZyb20ueCA9IHBvc2l0aW9ucy5mcm9tLng7XG4gICAgICAgICAgY29udHJvbE5vZGVGcm9tLnkgPSBwb3NpdGlvbnMuZnJvbS55O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sTm9kZVRvLnNlbGVjdGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIGNvbnRyb2xOb2RlVG8ueCA9IHBvc2l0aW9ucy50by54O1xuICAgICAgICAgIGNvbnRyb2xOb2RlVG8ueSA9IHBvc2l0aW9ucy50by55O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBkZWxldGUgZXZlcnl0aGluZyBpbiB0aGUgc2VsZWN0aW9uXG4gICAqL1xuICBkZWxldGVTZWxlY3RlZCgpIHtcbiAgICAvLyB3aGVuIHVzaW5nIHRoZSBndWksIGVuYWJsZSBlZGl0IG1vZGUgaWYgaXQgd2FzbnQgYWxyZWFkeS5cbiAgICBpZiAodGhpcy5lZGl0TW9kZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgIH1cblxuICAgIC8vIHJlc3RvcmUgdGhlIHN0YXRlIG9mIGFueSBib3VuZCBmdW5jdGlvbnMgb3IgZXZlbnRzLCByZW1vdmUgY29udHJvbCBub2RlcywgcmVzdG9yZSBwaHlzaWNzXG4gICAgdGhpcy5fY2xlYW4oKTtcblxuICAgIHRoaXMuaW5Nb2RlID0gXCJkZWxldGVcIjtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGVzID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkTm9kZUlkcygpO1xuICAgIGNvbnN0IHNlbGVjdGVkRWRnZXMgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWRFZGdlSWRzKCk7XG4gICAgbGV0IGRlbGV0ZUZ1bmN0aW9uID0gdW5kZWZpbmVkO1xuICAgIGlmIChzZWxlY3RlZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW3NlbGVjdGVkTm9kZXNbaV1dLmlzQ2x1c3RlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGFsZXJ0KFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV1bXCJkZWxldGVDbHVzdGVyRXJyb3JcIl0gfHxcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImRlbGV0ZUNsdXN0ZXJFcnJvclwiXVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmRlbGV0ZU5vZGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkZWxldGVGdW5jdGlvbiA9IHRoaXMub3B0aW9ucy5kZWxldGVOb2RlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRFZGdlcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5kZWxldGVFZGdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZGVsZXRlRnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGVsZXRlRWRnZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRlbGV0ZUZ1bmN0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7IG5vZGVzOiBzZWxlY3RlZE5vZGVzLCBlZGdlczogc2VsZWN0ZWRFZGdlcyB9O1xuICAgICAgaWYgKGRlbGV0ZUZ1bmN0aW9uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBkZWxldGVGdW5jdGlvbihkYXRhLCAoZmluYWxpemVkRGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IG51bGwgJiZcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdGhpcy5pbk1vZGUgPT09IFwiZGVsZXRlXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIGlmIGZvciB3aGF0ZXZlciByZWFzb24gdGhlIG1vZGUgaGFzIGNoYW5nZXMgKGR1ZSB0byBkYXRhc2V0IGNoYW5nZSkgZGlzcmVnYXJkIHRoZSBjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0RGF0YVNldCgpLnJlbW92ZShmaW5hbGl6ZWREYXRhLmVkZ2VzKTtcbiAgICAgICAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldERhdGFTZXQoKS5yZW1vdmUoZmluYWxpemVkRGF0YS5ub2Rlcyk7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwic3RhcnRTaW11bGF0aW9uXCIpO1xuICAgICAgICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBkZWxldGUgZG9lcyBub3Qgc3VwcG9ydCB0d28gYXJndW1lbnRzIChkYXRhLCBjYWxsYmFjaylcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkucmVtb3ZlKHNlbGVjdGVkRWRnZXMpO1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpLnJlbW92ZShzZWxlY3RlZE5vZGVzKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICB9XG4gIH1cblxuICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUFJJVkFURSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovL1xuXG4gIC8qKlxuICAgKiBkcmF3IG9yIHJlbW92ZSB0aGUgRE9NXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0dXAoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBFbmFibGUgdGhlIEdVSVxuICAgICAgdGhpcy5ndWlFbmFibGVkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5fY3JlYXRlV3JhcHBlcnMoKTtcbiAgICAgIGlmICh0aGlzLmVkaXRNb2RlID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9jcmVhdGVFZGl0QnV0dG9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVtb3ZlTWFuaXB1bGF0aW9uRE9NKCk7XG5cbiAgICAgIC8vIGRpc2FibGUgdGhlIGd1aVxuICAgICAgdGhpcy5ndWlFbmFibGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSB0aGUgZGl2IG92ZXJsYXlzIHRoYXQgY29udGFpbiB0aGUgRE9NXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlV3JhcHBlcnMoKSB7XG4gICAgLy8gbG9hZCB0aGUgbWFuaXB1bGF0b3IgSFRNTCBlbGVtZW50cy4gQWxsIHN0eWxpbmcgZG9uZSBpbiBjc3MuXG4gICAgaWYgKHRoaXMubWFuaXB1bGF0aW9uRGl2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmNsYXNzTmFtZSA9IFwidmlzLW1hbmlwdWxhdGlvblwiO1xuICAgICAgaWYgKHRoaXMuZWRpdE1vZGUgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FudmFzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubWFuaXB1bGF0aW9uRGl2KTtcbiAgICB9XG5cbiAgICAvLyBjb250YWluZXIgZm9yIHRoZSBlZGl0IGJ1dHRvbi5cbiAgICBpZiAodGhpcy5lZGl0TW9kZURpdiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRNb2RlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRoaXMuZWRpdE1vZGVEaXYuY2xhc3NOYW1lID0gXCJ2aXMtZWRpdC1tb2RlXCI7XG4gICAgICBpZiAodGhpcy5lZGl0TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmVkaXRNb2RlRGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdE1vZGVEaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FudmFzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuZWRpdE1vZGVEaXYpO1xuICAgIH1cblxuICAgIC8vIGNvbnRhaW5lciBmb3IgdGhlIGNsb3NlIGRpdiBidXR0b25cbiAgICBpZiAodGhpcy5jbG9zZURpdiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNsb3NlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICAgIHRoaXMuY2xvc2VEaXYuY2xhc3NOYW1lID0gXCJ2aXMtY2xvc2VcIjtcbiAgICAgIHRoaXMuY2xvc2VEaXYuc2V0QXR0cmlidXRlKFxuICAgICAgICBcImFyaWEtbGFiZWxcIixcbiAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV0/LltcImNsb3NlXCJdID8/XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImNsb3NlXCJdXG4gICAgICApO1xuICAgICAgdGhpcy5jbG9zZURpdi5zdHlsZS5kaXNwbGF5ID0gdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheTtcbiAgICAgIHRoaXMuY2FudmFzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY2xvc2VEaXYpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBnZW5lcmF0ZSBhIG5ldyB0YXJnZXQgbm9kZS4gVXNlZCBmb3IgY3JlYXRpbmcgbmV3IGVkZ2VzIGFuZCBlZGl0aW5nIGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEByZXR1cm5zIHtOb2RlfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldE5ld1RhcmdldE5vZGUoeCwgeSkge1xuICAgIGNvbnN0IGNvbnRyb2xOb2RlU3R5bGUgPSBkZWVwRXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMuY29udHJvbE5vZGVTdHlsZSk7XG5cbiAgICBjb250cm9sTm9kZVN0eWxlLmlkID0gXCJ0YXJnZXROb2RlXCIgKyByYW5kb21VVUlEKCk7XG4gICAgY29udHJvbE5vZGVTdHlsZS5oaWRkZW4gPSBmYWxzZTtcbiAgICBjb250cm9sTm9kZVN0eWxlLnBoeXNpY3MgPSBmYWxzZTtcbiAgICBjb250cm9sTm9kZVN0eWxlLnggPSB4O1xuICAgIGNvbnRyb2xOb2RlU3R5bGUueSA9IHk7XG5cbiAgICAvLyB3ZSBoYXZlIHRvIGRlZmluZSB0aGUgYm91bmRpbmcgYm94IGluIG9yZGVyIGZvciB0aGUgbm9kZXMgdG8gYmUgZHJhd24gaW1tZWRpYXRlbHlcbiAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVOb2RlKGNvbnRyb2xOb2RlU3R5bGUpO1xuICAgIG5vZGUuc2hhcGUuYm91bmRpbmdCb3ggPSB7IGxlZnQ6IHgsIHJpZ2h0OiB4LCB0b3A6IHksIGJvdHRvbTogeSB9O1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBlZGl0IGJ1dHRvblxuICAgKi9cbiAgX2NyZWF0ZUVkaXRCdXR0b24oKSB7XG4gICAgLy8gcmVzdG9yZSBldmVyeXRoaW5nIHRvIGl0J3Mgb3JpZ2luYWwgc3RhdGUgKGlmIGFwcGxpY2FibGUpXG4gICAgdGhpcy5fY2xlYW4oKTtcblxuICAgIC8vIHJlc2V0IHRoZSBtYW5pcHVsYXRpb25ET01cbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTSA9IHt9O1xuXG4gICAgLy8gZW1wdHkgdGhlIGVkaXRNb2RlRGl2XG4gICAgcmVjdXJzaXZlRE9NRGVsZXRlKHRoaXMuZWRpdE1vZGVEaXYpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBjb250ZW50cyBmb3IgdGhlIGVkaXRNb2RlIGJ1dHRvblxuICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdO1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihcbiAgICAgIFwiZWRpdE1vZGVcIixcbiAgICAgIFwidmlzLWVkaXQgdmlzLWVkaXQtbW9kZVwiLFxuICAgICAgbG9jYWxlW1wiZWRpdFwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdFwiXVxuICAgICk7XG4gICAgdGhpcy5lZGl0TW9kZURpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuXG4gICAgLy8gYmluZCBhIGhhbW1lciBsaXN0ZW5lciB0byB0aGUgYnV0dG9uLCBjYWxsaW5nIHRoZSBmdW5jdGlvbiB0b2dnbGVFZGl0TW9kZS5cbiAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyhidXR0b24sIHRoaXMudG9nZ2xlRWRpdE1vZGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgYWZ0ZXIgZXZlcnl0aGluZyB0aGlzIG1vZHVsZSBkb2VzLiBUZW1wb3JhcnkgZWxlbWVudHMsIGZ1bmN0aW9ucyBhbmQgZXZlbnRzIGFyZSByZW1vdmVkLCBwaHlzaWNzIHJlc3RvcmVkLCBoYW1tZXJzIHJlbW92ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW4oKSB7XG4gICAgLy8gbm90IGluIG1vZGVcbiAgICB0aGlzLmluTW9kZSA9IGZhbHNlO1xuXG4gICAgLy8gX2NsZWFuIHRoZSBkaXZzXG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmVjdXJzaXZlRE9NRGVsZXRlKHRoaXMuZWRpdE1vZGVEaXYpO1xuICAgICAgcmVjdXJzaXZlRE9NRGVsZXRlKHRoaXMubWFuaXB1bGF0aW9uRGl2KTtcblxuICAgICAgLy8gcmVtb3ZlcyBhbGwgdGhlIGJpbmRpbmdzIGFuZCBvdmVybG9hZHNcbiAgICAgIHRoaXMuX2NsZWFudXBET01FdmVudExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSB0ZW1wb3Jhcnkgbm9kZXMgYW5kIGVkZ2VzXG4gICAgdGhpcy5fY2xlYW51cFRlbXBvcmFyeU5vZGVzQW5kRWRnZXMoKTtcblxuICAgIC8vIHJlc3RvcmUgb3ZlcmxvYWRlZCBVSSBmdW5jdGlvbnNcbiAgICB0aGlzLl91bmJpbmRUZW1wb3JhcnlVSXMoKTtcblxuICAgIC8vIHJlbW92ZSB0aGUgdGVtcG9yYXJ5RXZlbnRGdW5jdGlvbnNcbiAgICB0aGlzLl91bmJpbmRUZW1wb3JhcnlFdmVudHMoKTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIHBoeXNpY3MgaWYgcmVxdWlyZWRcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVzdG9yZVBoeXNpY3NcIik7XG4gIH1cblxuICAvKipcbiAgICogRWFjaCBkb20gZWxlbWVudCBoYXMgaXQncyBvd24gaGFtbWVyLiBUaGV5IGFyZSBzdG9yZWQgaW4gdGhpcy5tYW5pcHVsYXRpb25IYW1tZXJzLiBUaGlzIGNsZWFucyB0aGVtIHVwLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NsZWFudXBET01FdmVudExpc3RlbmVycygpIHtcbiAgICAvLyBfY2xlYW4gRE9NIGV2ZW50IGxpc3RlbmVyIGJpbmRpbmdzXG4gICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLl9kb21FdmVudExpc3RlbmVyQ2xlYW51cFF1ZXVlLnNwbGljZSgwKSkge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBET00gZWxlbWVudHMgY3JlYXRlZCBieSB0aGlzIG1vZHVsZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVNYW5pcHVsYXRpb25ET00oKSB7XG4gICAgLy8gcmVtb3ZlcyBhbGwgdGhlIGJpbmRpbmdzIGFuZCBvdmVybG9hZHNcbiAgICB0aGlzLl9jbGVhbigpO1xuXG4gICAgLy8gZW1wdHkgdGhlIG1hbmlwdWxhdGlvbiBkaXZzXG4gICAgcmVjdXJzaXZlRE9NRGVsZXRlKHRoaXMubWFuaXB1bGF0aW9uRGl2KTtcbiAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5lZGl0TW9kZURpdik7XG4gICAgcmVjdXJzaXZlRE9NRGVsZXRlKHRoaXMuY2xvc2VEaXYpO1xuXG4gICAgLy8gcmVtb3ZlIHRoZSBtYW5pcHVsYXRpb24gZGl2c1xuICAgIGlmICh0aGlzLm1hbmlwdWxhdGlvbkRpdikge1xuICAgICAgdGhpcy5jYW52YXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5tYW5pcHVsYXRpb25EaXYpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0TW9kZURpdikge1xuICAgICAgdGhpcy5jYW52YXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5lZGl0TW9kZURpdik7XG4gICAgfVxuICAgIGlmICh0aGlzLmNsb3NlRGl2KSB7XG4gICAgICB0aGlzLmNhbnZhcy5mcmFtZS5yZW1vdmVDaGlsZCh0aGlzLmNsb3NlRGl2KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHJlZmVyZW5jZXMgdG8gdW5kZWZpbmVkXG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0TW9kZURpdiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNsb3NlRGl2ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhIHNlcGVyYXRvciBsaW5lLiB0aGUgaW5kZXggaXMgdG8gZGlmZmVyZW50aWF0ZSBpbiB0aGUgbWFuaXB1bGF0aW9uIGRvbVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2luZGV4PTFdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlU2VwZXJhdG9yKGluZGV4ID0gMSkge1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW1wic2VwZXJhdG9yTGluZURpdlwiICsgaW5kZXhdID1cbiAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01bXCJzZXBlcmF0b3JMaW5lRGl2XCIgKyBpbmRleF0uY2xhc3NOYW1lID1cbiAgICAgIFwidmlzLXNlcGFyYXRvci1saW5lXCI7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuYXBwZW5kQ2hpbGQoXG4gICAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtcInNlcGVyYXRvckxpbmVEaXZcIiArIGluZGV4XVxuICAgICk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIERPTSBmdW5jdGlvbnMgZm9yIGJ1dHRvbnMgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQWRkTm9kZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImFkZE5vZGVcIixcbiAgICAgIFwidmlzLWFkZFwiLFxuICAgICAgbG9jYWxlW1wiYWRkTm9kZVwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiYWRkTm9kZVwiXVxuICAgICk7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcbiAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyhidXR0b24sIHRoaXMuYWRkTm9kZU1vZGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtMb2NhbGV9IGxvY2FsZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUFkZEVkZ2VCdXR0b24obG9jYWxlKSB7XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKFxuICAgICAgXCJhZGRFZGdlXCIsXG4gICAgICBcInZpcy1jb25uZWN0XCIsXG4gICAgICBsb2NhbGVbXCJhZGRFZGdlXCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJhZGRFZGdlXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5hZGRFZGdlTW9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlRWRpdE5vZGVCdXR0b24obG9jYWxlKSB7XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKFxuICAgICAgXCJlZGl0Tm9kZVwiLFxuICAgICAgXCJ2aXMtZWRpdFwiLFxuICAgICAgbG9jYWxlW1wiZWRpdE5vZGVcIl0gfHwgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImVkaXROb2RlXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5lZGl0Tm9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlRWRpdEVkZ2VCdXR0b24obG9jYWxlKSB7XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKFxuICAgICAgXCJlZGl0RWRnZVwiLFxuICAgICAgXCJ2aXMtZWRpdFwiLFxuICAgICAgbG9jYWxlW1wiZWRpdEVkZ2VcIl0gfHwgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImVkaXRFZGdlXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5lZGl0RWRnZU1vZGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtMb2NhbGV9IGxvY2FsZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZURlbGV0ZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBsZXQgZGVsZXRlQnRuQ2xhc3M7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5ydGwpIHtcbiAgICAgIGRlbGV0ZUJ0bkNsYXNzID0gXCJ2aXMtZGVsZXRlLXJ0bFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVCdG5DbGFzcyA9IFwidmlzLWRlbGV0ZVwiO1xuICAgIH1cbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImRlbGV0ZVwiLFxuICAgICAgZGVsZXRlQnRuQ2xhc3MsXG4gICAgICBsb2NhbGVbXCJkZWxcIl0gfHwgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImRlbFwiXVxuICAgICk7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcbiAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyhidXR0b24sIHRoaXMuZGVsZXRlU2VsZWN0ZWQuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtMb2NhbGV9IGxvY2FsZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUJhY2tCdXR0b24obG9jYWxlKSB7XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKFxuICAgICAgXCJiYWNrXCIsXG4gICAgICBcInZpcy1iYWNrXCIsXG4gICAgICBsb2NhbGVbXCJiYWNrXCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJiYWNrXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gaWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxuICAgKiBAcGFyYW0ge2xhYmVsfSBsYWJlbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxDbGFzc05hbWVcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUJ1dHRvbihpZCwgY2xhc3NOYW1lLCBsYWJlbCwgbGFiZWxDbGFzc05hbWUgPSBcInZpcy1sYWJlbFwiKSB7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01baWQgKyBcIkRpdlwiXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01baWQgKyBcIkRpdlwiXS5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gXCIgKyBjbGFzc05hbWU7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01baWQgKyBcIkxhYmVsXCJdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiTGFiZWxcIl0uY2xhc3NOYW1lID0gbGFiZWxDbGFzc05hbWU7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01baWQgKyBcIkxhYmVsXCJdLmlubmVyVGV4dCA9IGxhYmVsO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW2lkICsgXCJEaXZcIl0uYXBwZW5kQ2hpbGQoXG4gICAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiTGFiZWxcIl1cbiAgICApO1xuICAgIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiRGl2XCJdO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlRGVzY3JpcHRpb24obGFiZWwpIHtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtcImRlc2NyaXB0aW9uTGFiZWxcIl0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW1wiZGVzY3JpcHRpb25MYWJlbFwiXS5jbGFzc05hbWUgPSBcInZpcy1ub25lXCI7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01bXCJkZXNjcmlwdGlvbkxhYmVsXCJdLmlubmVyVGV4dCA9IGxhYmVsO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKHRoaXMubWFuaXB1bGF0aW9uRE9NW1wiZGVzY3JpcHRpb25MYWJlbFwiXSk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFbmQgb2YgRE9NIGZ1bmN0aW9ucyBmb3IgYnV0dG9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8qKlxuICAgKiB0aGlzIGJpbmRzIGFuIGV2ZW50IHVudGlsIGNsZWFudXAgYnkgdGhlIGNsZWFuIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5ld0Z1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdGVtcG9yYXJ5QmluZEV2ZW50KGV2ZW50LCBuZXdGdW5jdGlvbikge1xuICAgIHRoaXMudGVtcG9yYXJ5RXZlbnRGdW5jdGlvbnMucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBib3VuZEZ1bmN0aW9uOiBuZXdGdW5jdGlvbixcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihldmVudCwgbmV3RnVuY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgb3ZlcnJpZGVzIGFuIFVJIGZ1bmN0aW9uIHVudGlsIGNsZWFudXAgYnkgdGhlIGNsZWFuIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBVSWZ1bmN0aW9uTmFtZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXdGdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3RlbXBvcmFyeUJpbmRVSShVSWZ1bmN0aW9uTmFtZSwgbmV3RnVuY3Rpb24pIHtcbiAgICBpZiAodGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzW1VJZnVuY3Rpb25OYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRlbXBvcmFyeVVJRnVuY3Rpb25zW1VJZnVuY3Rpb25OYW1lXSA9XG4gICAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVyc1tVSWZ1bmN0aW9uTmFtZV07XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnNbVUlmdW5jdGlvbk5hbWVdID0gbmV3RnVuY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGlzIFVJIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0LiBUeXBvPyBZb3UgdHJpZWQ6IFwiICtcbiAgICAgICAgICBVSWZ1bmN0aW9uTmFtZSArXG4gICAgICAgICAgXCIgcG9zc2libGUgYXJlOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXModGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgdGhlIG92ZXJyaWRkZW4gVUkgZnVuY3Rpb25zIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VuYmluZFRlbXBvcmFyeVVJcygpIHtcbiAgICBmb3IgKGNvbnN0IGZ1bmN0aW9uTmFtZSBpbiB0aGlzLnRlbXBvcmFyeVVJRnVuY3Rpb25zKSB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICB0aGlzLnRlbXBvcmFyeVVJRnVuY3Rpb25zLFxuICAgICAgICAgIGZ1bmN0aW9uTmFtZVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzW2Z1bmN0aW9uTmFtZV0gPVxuICAgICAgICAgIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnNbZnVuY3Rpb25OYW1lXTtcbiAgICAgICAgZGVsZXRlIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnNbZnVuY3Rpb25OYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50ZW1wb3JhcnlVSUZ1bmN0aW9ucyA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVuYmluZCB0aGUgZXZlbnRzIGNyZWF0ZWQgYnkgX3RlbXBvcmFyeUJpbmRFdmVudFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VuYmluZFRlbXBvcmFyeUV2ZW50cygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGVtcG9yYXJ5RXZlbnRGdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IHRoaXMudGVtcG9yYXJ5RXZlbnRGdW5jdGlvbnNbaV0uZXZlbnQ7XG4gICAgICBjb25zdCBib3VuZEZ1bmN0aW9uID0gdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9uc1tpXS5ib3VuZEZ1bmN0aW9uO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKGV2ZW50TmFtZSwgYm91bmRGdW5jdGlvbik7XG4gICAgfVxuICAgIHRoaXMudGVtcG9yYXJ5RXZlbnRGdW5jdGlvbnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIGFuIGhhbW1lciBpbnN0YW5jZSB0byBhIERPTSBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGRvbUVsZW1lbnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gYm91bmRGdW5jdGlvblxuICAgKi9cbiAgX2JpbmRFbGVtZW50RXZlbnRzKGRvbUVsZW1lbnQsIGJvdW5kRnVuY3Rpb24pIHtcbiAgICAvLyBCaW5kIHRvdWNoIGV2ZW50cy5cbiAgICBjb25zdCBoYW1tZXIgPSBuZXcgSGFtbWVyKGRvbUVsZW1lbnQsIHt9KTtcbiAgICBvblRvdWNoKGhhbW1lciwgYm91bmRGdW5jdGlvbik7XG4gICAgdGhpcy5fZG9tRXZlbnRMaXN0ZW5lckNsZWFudXBRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICAgIGhhbW1lci5kZXN0cm95KCk7XG4gICAgfSk7XG5cbiAgICAvLyBCaW5kIGtleWJvYXJkIGV2ZW50cy5cbiAgICBjb25zdCBrZXl1cExpc3RlbmVyID0gKHsga2V5Q29kZSwga2V5IH0pID0+IHtcbiAgICAgIGlmIChrZXkgPT09IFwiRW50ZXJcIiB8fCBrZXkgPT09IFwiIFwiIHx8IGtleUNvZGUgPT09IDEzIHx8IGtleUNvZGUgPT09IDMyKSB7XG4gICAgICAgIGJvdW5kRnVuY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGtleXVwTGlzdGVuZXIsIGZhbHNlKTtcbiAgICB0aGlzLl9kb21FdmVudExpc3RlbmVyQ2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwga2V5dXBMaXN0ZW5lciwgZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5lYXRseSBjbGVhbiB1cCB0ZW1wb3JhcnkgZWRnZXMgYW5kIG5vZGVzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW51cFRlbXBvcmFyeU5vZGVzQW5kRWRnZXMoKSB7XG4gICAgLy8gX2NsZWFuIHRlbXBvcmFyeSBlZGdlc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50ZW1wb3JhcnlJZHMuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYm9keS5lZGdlc1t0aGlzLnRlbXBvcmFyeUlkcy5lZGdlc1tpXV0uZGlzY29ubmVjdCgpO1xuICAgICAgZGVsZXRlIHRoaXMuYm9keS5lZGdlc1t0aGlzLnRlbXBvcmFyeUlkcy5lZGdlc1tpXV07XG4gICAgICBjb25zdCBpbmRleFRlbXBFZGdlID0gdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLmluZGV4T2YoXG4gICAgICAgIHRoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzW2ldXG4gICAgICApO1xuICAgICAgaWYgKGluZGV4VGVtcEVkZ2UgIT09IC0xKSB7XG4gICAgICAgIHRoaXMuYm9keS5lZGdlSW5kaWNlcy5zcGxpY2UoaW5kZXhUZW1wRWRnZSwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gX2NsZWFuIHRlbXBvcmFyeSBub2Rlc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50ZW1wb3JhcnlJZHMubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkubm9kZXNbdGhpcy50ZW1wb3JhcnlJZHMubm9kZXNbaV1dO1xuICAgICAgY29uc3QgaW5kZXhUZW1wTm9kZSA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5pbmRleE9mKFxuICAgICAgICB0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlc1tpXVxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleFRlbXBOb2RlICE9PSAtMSkge1xuICAgICAgICB0aGlzLmJvZHkubm9kZUluZGljZXMuc3BsaWNlKGluZGV4VGVtcE5vZGUsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGVtcG9yYXJ5SWRzID0geyBub2RlczogW10sIGVkZ2VzOiBbXSB9O1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVESVQgRURHRSBGVU5DVElPTlMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8qKlxuICAgKiB0aGUgdG91Y2ggaXMgdXNlZCB0byBnZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBpbml0aWFsIGNsaWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbnRyb2xOb2RlVG91Y2goZXZlbnQpIHtcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKTtcbiAgICB0aGlzLmxhc3RUb3VjaCA9IHRoaXMuYm9keS5mdW5jdGlvbnMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIHRoaXMubGFzdFRvdWNoLnRyYW5zbGF0aW9uID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24pOyAvLyBjb3B5IHRoZSBvYmplY3RcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgZHJhZyBzdGFydCBpcyB1c2VkIHRvIG1hcmsgb25lIG9mIHRoZSBjb250cm9sIG5vZGVzIGFzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbnRyb2xOb2RlRHJhZ1N0YXJ0KCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmxhc3RUb3VjaDtcbiAgICBjb25zdCBwb2ludGVyT2JqID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKTtcbiAgICBjb25zdCBmcm9tID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMudGVtcG9yYXJ5SWRzLm5vZGVzWzBdXTtcbiAgICBjb25zdCB0byA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlc1sxXV07XG4gICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1t0aGlzLmVkZ2VCZWluZ0VkaXRlZElkXTtcbiAgICB0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBmcm9tU2VsZWN0ID0gZnJvbS5pc092ZXJsYXBwaW5nV2l0aChwb2ludGVyT2JqKTtcbiAgICBjb25zdCB0b1NlbGVjdCA9IHRvLmlzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopO1xuXG4gICAgaWYgKGZyb21TZWxlY3QgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSA9IGZyb207XG4gICAgICBlZGdlLmVkZ2VUeXBlLmZyb20gPSBmcm9tO1xuICAgIH0gZWxzZSBpZiAodG9TZWxlY3QgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSA9IHRvO1xuICAgICAgZWRnZS5lZGdlVHlwZS50byA9IHRvO1xuICAgIH1cblxuICAgIC8vIHdlIHVzZSB0aGUgc2VsZWN0aW9uIHRvIGZpbmQgdGhlIG5vZGUgdGhhdCBpcyBiZWluZyBkcmFnZ2VkLiBXZSBleHBsaWNpdGx5IHNlbGVjdCBpdCBoZXJlLlxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNlbGVjdE9iamVjdCh0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUpO1xuICAgIH1cblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYWdnaW5nIHRoZSBjb250cm9sIG5vZGVzIG9yIHRoZSBjYW52YXNcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29udHJvbE5vZGVEcmFnKGV2ZW50KSB7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImRpc2FibGVQaHlzaWNzXCIpO1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICBjb25zdCBwb3MgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZS54ID0gcG9zLng7XG4gICAgICB0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUueSA9IHBvcy55O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVyYWN0aW9uSGFuZGxlci5vbkRyYWcoZXZlbnQpO1xuICAgIH1cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb25uZWN0aW5nIG9yIHJlc3RvcmluZyB0aGUgY29udHJvbCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29udHJvbE5vZGVEcmFnRW5kKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuYm9keS5mdW5jdGlvbnMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIGNvbnN0IHBvaW50ZXJPYmogPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpO1xuICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy5lZGdlQmVpbmdFZGl0ZWRJZF07XG4gICAgLy8gaWYgdGhlIG5vZGUgdGhhdCB3YXMgZHJhZ2dlZCBpcyBub3QgYSBjb250cm9sIG5vZGUsIHJldHVyblxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHdlIHVzZSB0aGUgc2VsZWN0aW9uIHRvIGZpbmQgdGhlIG5vZGUgdGhhdCBpcyBiZWluZyBkcmFnZ2VkLiBXZSBleHBsaWNpdGx5IERFc2VsZWN0IHRoZSBjb250cm9sIG5vZGUgaGVyZS5cbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKTtcbiAgICBjb25zdCBvdmVybGFwcGluZ05vZGVJZHMgPVxuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLl9nZXRBbGxOb2Rlc092ZXJsYXBwaW5nV2l0aChwb2ludGVyT2JqKTtcbiAgICBsZXQgbm9kZSA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBpID0gb3ZlcmxhcHBpbmdOb2RlSWRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAob3ZlcmxhcHBpbmdOb2RlSWRzW2ldICE9PSB0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUuaWQpIHtcbiAgICAgICAgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tvdmVybGFwcGluZ05vZGVJZHNbaV1dO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gcGVyZm9ybSB0aGUgY29ubmVjdGlvblxuICAgIGlmIChub2RlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChub2RlLmlzQ2x1c3RlciA9PT0gdHJ1ZSkge1xuICAgICAgICBhbGVydChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXVtcImNyZWF0ZUVkZ2VFcnJvclwiXSB8fFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImNyZWF0ZUVkZ2VFcnJvclwiXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZnJvbSA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlc1swXV07XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUuaWQgPT09IGZyb20uaWQpIHtcbiAgICAgICAgICB0aGlzLl9wZXJmb3JtRWRpdEVkZ2Uobm9kZS5pZCwgZWRnZS50by5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fcGVyZm9ybUVkaXRFZGdlKGVkZ2UuZnJvbS5pZCwgbm9kZS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWRnZS51cGRhdGVFZGdlVHlwZSgpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInJlc3RvcmVQaHlzaWNzXCIpO1xuICAgIH1cblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORCBPRiBFRElUIEVER0UgRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFERCBFREdFIEZVTkNUSU9OUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG4gIC8qKlxuICAgKiB0aGUgZnVuY3Rpb24gYm91bmQgdG8gdGhlIHNlbGVjdGlvbiBldmVudC4gSXQgY2hlY2tzIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBjbHVzdGVyIGFuZCBjaGFuZ2VzIHRoZSBkZXNjcmlwdGlvblxuICAgKiB0byB3YWxrIHRoZSB1c2VyIHRocm91Z2ggdGhlIHByb2Nlc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGFuZGxlQ29ubmVjdChldmVudCkge1xuICAgIC8vIGNoZWNrIHRvIGF2b2lkIGRvdWJsZSBmaXJlaW5nIG9mIHRoaXMgZnVuY3Rpb24uXG4gICAgaWYgKG5ldyBEYXRlKCkudmFsdWVPZigpIC0gdGhpcy50b3VjaFRpbWUgPiAxMDApIHtcbiAgICAgIHRoaXMubGFzdFRvdWNoID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgICB0aGlzLmxhc3RUb3VjaC50cmFuc2xhdGlvbiA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvblxuICAgICAgKTsgLy8gY29weSB0aGUgb2JqZWN0XG5cbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyLmRyYWcucG9pbnRlciA9IHRoaXMubGFzdFRvdWNoOyAvLyBEcmFnIHBvaW50ZXIgaXMgbm90IHVwZGF0ZWQgd2hlbiBhZGRpbmcgZWRnZXNcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyLmRyYWcudHJhbnNsYXRpb24gPSB0aGlzLmxhc3RUb3VjaC50cmFuc2xhdGlvbjtcblxuICAgICAgY29uc3QgcG9pbnRlciA9IHRoaXMubGFzdFRvdWNoO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXROb2RlQXQocG9pbnRlcik7XG5cbiAgICAgIGlmIChub2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG5vZGUuaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgYWxlcnQoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXVtcImNyZWF0ZUVkZ2VFcnJvclwiXSB8fFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiY3JlYXRlRWRnZUVycm9yXCJdXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjcmVhdGUgYSBub2RlIHRoZSB0ZW1wb3JhcnkgbGluZSBjYW4gbG9vayBhdFxuICAgICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0aGlzLl9nZXROZXdUYXJnZXROb2RlKG5vZGUueCwgbm9kZS55KTtcbiAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbdGFyZ2V0Tm9kZS5pZF0gPSB0YXJnZXROb2RlO1xuICAgICAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5wdXNoKHRhcmdldE5vZGUuaWQpO1xuXG4gICAgICAgICAgLy8gY3JlYXRlIGEgdGVtcG9yYXJ5IGVkZ2VcbiAgICAgICAgICBjb25zdCBjb25uZWN0aW9uRWRnZSA9IHRoaXMuYm9keS5mdW5jdGlvbnMuY3JlYXRlRWRnZSh7XG4gICAgICAgICAgICBpZDogXCJjb25uZWN0aW9uRWRnZVwiICsgcmFuZG9tVVVJRCgpLFxuICAgICAgICAgICAgZnJvbTogbm9kZS5pZCxcbiAgICAgICAgICAgIHRvOiB0YXJnZXROb2RlLmlkLFxuICAgICAgICAgICAgcGh5c2ljczogZmFsc2UsXG4gICAgICAgICAgICBzbW9vdGg6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgdHlwZTogXCJjb250aW51b3VzXCIsXG4gICAgICAgICAgICAgIHJvdW5kbmVzczogMC41LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbY29ubmVjdGlvbkVkZ2UuaWRdID0gY29ubmVjdGlvbkVkZ2U7XG4gICAgICAgICAgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLnB1c2goY29ubmVjdGlvbkVkZ2UuaWQpO1xuXG4gICAgICAgICAgdGhpcy50ZW1wb3JhcnlJZHMubm9kZXMucHVzaCh0YXJnZXROb2RlLmlkKTtcbiAgICAgICAgICB0aGlzLnRlbXBvcmFyeUlkcy5lZGdlcy5wdXNoKGNvbm5lY3Rpb25FZGdlLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50b3VjaFRpbWUgPSBuZXcgRGF0ZSgpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmFnQ29udHJvbE5vZGUoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG5cbiAgICBjb25zdCBwb2ludGVyT2JqID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKTtcbiAgICAvLyByZW1lbWJlciB0aGUgZWRnZSBpZFxuICAgIGxldCBjb25uZWN0RnJvbUlkID0gdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLnRlbXBvcmFyeUlkcy5lZGdlc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25uZWN0RnJvbUlkID0gdGhpcy5ib2R5LmVkZ2VzW3RoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzWzBdXS5mcm9tSWQ7XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSBvdmVybGFwcGluZyBub2RlIGJ1dCBOT1QgdGhlIHRlbXBvcmFyeSBub2RlO1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZUlkcyA9XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopO1xuICAgIGxldCBub2RlID0gdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGkgPSBvdmVybGFwcGluZ05vZGVJZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIC8vIGlmIHRoZSBub2RlIGlkIGlzIE5PVCBhIHRlbXBvcmFyeSBub2RlLCBhY2NlcHQgdGhlIG5vZGUuXG4gICAgICBpZiAodGhpcy50ZW1wb3JhcnlJZHMubm9kZXMuaW5kZXhPZihvdmVybGFwcGluZ05vZGVJZHNbaV0pID09PSAtMSkge1xuICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW292ZXJsYXBwaW5nTm9kZUlkc1tpXV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGV2ZW50LmNvbnRyb2xFZGdlID0geyBmcm9tOiBjb25uZWN0RnJvbUlkLCB0bzogbm9kZSA/IG5vZGUuaWQgOiB1bmRlZmluZWQgfTtcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgXCJjb250cm9sTm9kZURyYWdnaW5nXCIsXG4gICAgICBldmVudCxcbiAgICAgIHBvaW50ZXJcbiAgICApO1xuXG4gICAgaWYgKHRoaXMudGVtcG9yYXJ5SWRzLm5vZGVzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbdGhpcy50ZW1wb3JhcnlJZHMubm9kZXNbMF1dOyAvLyB0aGVyZSBpcyBvbmx5IG9uZSB0ZW1wIG5vZGUgaW4gdGhlIGFkZCBlZGdlIG1vZGUuXG4gICAgICB0YXJnZXROb2RlLnggPSB0aGlzLmNhbnZhcy5fWGNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLngpO1xuICAgICAgdGFyZ2V0Tm9kZS55ID0gdGhpcy5jYW52YXMuX1ljb252ZXJ0RE9NdG9DYW52YXMocG9pbnRlci55KTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVyYWN0aW9uSGFuZGxlci5vbkRyYWcoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IHRoZSBuZXcgZWRnZSB0byB0aGUgdGFyZ2V0IGlmIG9uZSBleGlzdHMsIG90aGVyd2lzZSByZW1vdmUgdGVtcCBsaW5lXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpbmlzaENvbm5lY3QoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgY29uc3QgcG9pbnRlck9iaiA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5fcG9pbnRlclRvUG9zaXRpb25PYmplY3QocG9pbnRlcik7XG5cbiAgICAvLyByZW1lbWJlciB0aGUgZWRnZSBpZFxuICAgIGxldCBjb25uZWN0RnJvbUlkID0gdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLnRlbXBvcmFyeUlkcy5lZGdlc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25uZWN0RnJvbUlkID0gdGhpcy5ib2R5LmVkZ2VzW3RoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzWzBdXS5mcm9tSWQ7XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSBvdmVybGFwcGluZyBub2RlIGJ1dCBOT1QgdGhlIHRlbXBvcmFyeSBub2RlO1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZUlkcyA9XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopO1xuICAgIGxldCBub2RlID0gdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGkgPSBvdmVybGFwcGluZ05vZGVJZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIC8vIGlmIHRoZSBub2RlIGlkIGlzIE5PVCBhIHRlbXBvcmFyeSBub2RlLCBhY2NlcHQgdGhlIG5vZGUuXG4gICAgICBpZiAodGhpcy50ZW1wb3JhcnlJZHMubm9kZXMuaW5kZXhPZihvdmVybGFwcGluZ05vZGVJZHNbaV0pID09PSAtMSkge1xuICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW292ZXJsYXBwaW5nTm9kZUlkc1tpXV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNsZWFuIHRlbXBvcmFyeSBub2RlcyBhbmQgZWRnZXMuXG4gICAgdGhpcy5fY2xlYW51cFRlbXBvcmFyeU5vZGVzQW5kRWRnZXMoKTtcblxuICAgIC8vIHBlcmZvcm0gdGhlIGNvbm5lY3Rpb25cbiAgICBpZiAobm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAobm9kZS5pc0NsdXN0ZXIgPT09IHRydWUpIHtcbiAgICAgICAgYWxlcnQoXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV1bXCJjcmVhdGVFZGdlRXJyb3JcIl0gfHxcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJjcmVhdGVFZGdlRXJyb3JcIl1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbY29ubmVjdEZyb21JZF0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlLmlkXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX3BlcmZvcm1BZGRFZGdlKGNvbm5lY3RGcm9tSWQsIG5vZGUuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXZlbnQuY29udHJvbEVkZ2UgPSB7IGZyb206IGNvbm5lY3RGcm9tSWQsIHRvOiBub2RlID8gbm9kZS5pZCA6IHVuZGVmaW5lZCB9O1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICBcImNvbnRyb2xOb2RlRHJhZ0VuZFwiLFxuICAgICAgZXZlbnQsXG4gICAgICBwb2ludGVyXG4gICAgKTtcblxuICAgIC8vIE5vIG5lZWQgdG8gZG8gX2dlbmVyYXRlY2xpY2tldmVudCgnZHJhZ0VuZCcpIGhlcmUsIHRoZSByZWd1bGFyIGRyYWdFbmQgZXZlbnQgZmlyZXMuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmFnU3RhcnRFZGdlKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMubGFzdFRvdWNoO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICBcImRyYWdTdGFydFwiLFxuICAgICAgZXZlbnQsXG4gICAgICBwb2ludGVyLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EIE9GIEFERCBFREdFIEZVTkNUSU9OUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGVyZm9ybWluZyBhbGwgdGhlIGFjdHVhbCBkYXRhIG1hbmlwdWxhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgbm9kZSBvbiB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjbGlja0RhdGFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtQWRkTm9kZShjbGlja0RhdGEpIHtcbiAgICBjb25zdCBkZWZhdWx0RGF0YSA9IHtcbiAgICAgIGlkOiByYW5kb21VVUlEKCksXG4gICAgICB4OiBjbGlja0RhdGEucG9pbnRlci5jYW52YXMueCxcbiAgICAgIHk6IGNsaWNrRGF0YS5wb2ludGVyLmNhbnZhcy55LFxuICAgICAgbGFiZWw6IFwibmV3XCIsXG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmFkZE5vZGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hZGROb2RlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuYWRkTm9kZShkZWZhdWx0RGF0YSwgKGZpbmFsaXplZERhdGEpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhICE9PSBudWxsICYmXG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHRoaXMuaW5Nb2RlID09PSBcImFkZE5vZGVcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrXG4gICAgICAgICAgICB0aGlzLmJvZHkuZGF0YS5ub2Rlcy5nZXREYXRhU2V0KCkuYWRkKGZpbmFsaXplZERhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBhZGQgZG9lcyBub3Qgc3VwcG9ydCB0d28gYXJndW1lbnRzIChkYXRhLGNhbGxiYWNrKVwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldERhdGFTZXQoKS5hZGQoZGVmYXVsdERhdGEpO1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNvbm5lY3QgdHdvIG5vZGVzIHdpdGggYSBuZXcgZWRnZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBzb3VyY2VOb2RlSWRcbiAgICogQHBhcmFtIHtOb2RlLmlkfSB0YXJnZXROb2RlSWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtQWRkRWRnZShzb3VyY2VOb2RlSWQsIHRhcmdldE5vZGVJZCkge1xuICAgIGNvbnN0IGRlZmF1bHREYXRhID0geyBmcm9tOiBzb3VyY2VOb2RlSWQsIHRvOiB0YXJnZXROb2RlSWQgfTtcbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5hZGRFZGdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWRkRWRnZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmFkZEVkZ2UoZGVmYXVsdERhdGEsIChmaW5hbGl6ZWREYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0aGlzLmluTW9kZSA9PT0gXCJhZGRFZGdlXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIGlmIGZvciB3aGF0ZXZlciByZWFzb24gdGhlIG1vZGUgaGFzIGNoYW5nZXMgKGR1ZSB0byBkYXRhc2V0IGNoYW5nZSkgZGlzcmVnYXJkIHRoZSBjYWxsYmFja1xuICAgICAgICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0RGF0YVNldCgpLmFkZChmaW5hbGl6ZWREYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgICAgICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRoZSBmdW5jdGlvbiBmb3IgY29ubmVjdCBkb2VzIG5vdCBzdXBwb3J0IHR3byBhcmd1bWVudHMgKGRhdGEsY2FsbGJhY2spXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0RGF0YVNldCgpLmFkZChkZWZhdWx0RGF0YSk7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKTtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBjb25uZWN0IHR3byBub2RlcyB3aXRoIGEgbmV3IGVkZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gc291cmNlTm9kZUlkXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gdGFyZ2V0Tm9kZUlkXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGVyZm9ybUVkaXRFZGdlKHNvdXJjZU5vZGVJZCwgdGFyZ2V0Tm9kZUlkKSB7XG4gICAgY29uc3QgZGVmYXVsdERhdGEgPSB7XG4gICAgICBpZDogdGhpcy5lZGdlQmVpbmdFZGl0ZWRJZCxcbiAgICAgIGZyb206IHNvdXJjZU5vZGVJZCxcbiAgICAgIHRvOiB0YXJnZXROb2RlSWQsXG4gICAgICBsYWJlbDogdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0KHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQpLmxhYmVsLFxuICAgIH07XG4gICAgbGV0IGVlRnVuY3QgPSB0aGlzLm9wdGlvbnMuZWRpdEVkZ2U7XG4gICAgaWYgKHR5cGVvZiBlZUZ1bmN0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBlZUZ1bmN0ID0gZWVGdW5jdC5lZGl0V2l0aG91dERyYWc7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZWVGdW5jdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAoZWVGdW5jdC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgZWVGdW5jdChkZWZhdWx0RGF0YSwgKGZpbmFsaXplZERhdGEpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhID09PSBudWxsIHx8XG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIHRoaXMuaW5Nb2RlICE9PSBcImVkaXRFZGdlXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIGlmIGZvciB3aGF0ZXZlciByZWFzb24gdGhlIG1vZGUgaGFzIGNoYW5nZXMgKGR1ZSB0byBkYXRhc2V0IGNoYW5nZSkgZGlzcmVnYXJkIHRoZSBjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVkZ2VzW2RlZmF1bHREYXRhLmlkXS51cGRhdGVFZGdlVHlwZSgpO1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0RGF0YVNldCgpLnVwZGF0ZShmaW5hbGl6ZWREYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgICAgICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRoZSBmdW5jdGlvbiBmb3IgZWRpdCBkb2VzIG5vdCBzdXBwb3J0IHR3byBhcmd1bWVudHMgKGRhdGEsIGNhbGxiYWNrKVwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzLmdldERhdGFTZXQoKS51cGRhdGUoZGVmYXVsdERhdGEpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsKCk7XG4gICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFuaXB1bGF0aW9uU3lzdGVtO1xuIiwgImltcG9ydCB7XG4gIENvbmZpZ3VyYXRvckNvbmZpZyxcbiAgQ29uZmlndXJhdG9ySGlkZU9wdGlvbixcbiAgT3B0aW9uc0NvbmZpZyxcbn0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIFRoaXMgb2JqZWN0IGNvbnRhaW5zIGFsbCBwb3NzaWJsZSBvcHRpb25zLiBJdCB3aWxsIGNoZWNrIGlmIHRoZSB0eXBlcyBhcmUgY29ycmVjdCwgaWYgcmVxdWlyZWQgaWYgdGhlIG9wdGlvbiBpcyBvbmVcbiAqIG9mIHRoZSBhbGxvd2VkIHZhbHVlcy5cbiAqXG4gKiBfX2FueV9fIG1lYW5zIHRoYXQgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGRvZXMgbm90IG1hdHRlci5cbiAqIF9fdHlwZV9fIGlzIGEgcmVxdWlyZWQgZmllbGQgZm9yIGFsbCBvYmplY3RzIGFuZCBjb250YWlucyB0aGUgYWxsb3dlZCB0eXBlcyBvZiBhbGwgb2JqZWN0c1xuICovXG5jb25zdCBzdHJpbmcgPSBcInN0cmluZ1wiO1xuY29uc3QgYm9vbCA9IFwiYm9vbGVhblwiO1xuY29uc3QgbnVtYmVyID0gXCJudW1iZXJcIjtcbmNvbnN0IGFycmF5ID0gXCJhcnJheVwiO1xuY29uc3Qgb2JqZWN0ID0gXCJvYmplY3RcIjsgLy8gc2hvdWxkIG9ubHkgYmUgaW4gYSBfX3R5cGVfXyBwcm9wZXJ0eVxuY29uc3QgZG9tID0gXCJkb21cIjtcbmNvbnN0IGFueSA9IFwiYW55XCI7XG5cbi8vIExpc3Qgb2YgZW5kcG9pbnRzXG5jb25zdCBlbmRQb2ludHMgPSBbXG4gIFwiYXJyb3dcIixcbiAgXCJiYXJcIixcbiAgXCJib3hcIixcbiAgXCJjaXJjbGVcIixcbiAgXCJjcm93XCIsXG4gIFwiY3VydmVcIixcbiAgXCJkaWFtb25kXCIsXG4gIFwiaW1hZ2VcIixcbiAgXCJpbnZfY3VydmVcIixcbiAgXCJpbnZfdHJpYW5nbGVcIixcbiAgXCJ0cmlhbmdsZVwiLFxuICBcInZlZVwiLFxuXTtcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uIC0tIFRoZSBfXypfXyBmb3JtYXQgaXMgdXNlZCB0byBwcmV2ZW50IGNvbGxpc2lvbnMgd2l0aCBhY3R1YWwgb3B0aW9uIG5hbWVzLiAqL1xuY29uc3Qgbm9kZU9wdGlvbnM6IE9wdGlvbnNDb25maWcgPSB7XG4gIGJvcmRlcldpZHRoOiB7IG51bWJlciB9LFxuICBib3JkZXJXaWR0aFNlbGVjdGVkOiB7IG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIGJyb2tlbkltYWdlOiB7IHN0cmluZywgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIGNob3Nlbjoge1xuICAgIGxhYmVsOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBub2RlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgfSxcbiAgY29sb3I6IHtcbiAgICBib3JkZXI6IHsgc3RyaW5nIH0sXG4gICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICBoaWdobGlnaHQ6IHtcbiAgICAgIGJvcmRlcjogeyBzdHJpbmcgfSxcbiAgICAgIGJhY2tncm91bmQ6IHsgc3RyaW5nIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgIH0sXG4gICAgaG92ZXI6IHtcbiAgICAgIGJvcmRlcjogeyBzdHJpbmcgfSxcbiAgICAgIGJhY2tncm91bmQ6IHsgc3RyaW5nIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgfSxcbiAgb3BhY2l0eTogeyBudW1iZXIsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICBmaXhlZDoge1xuICAgIHg6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHk6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuICBmb250OiB7XG4gICAgYWxpZ246IHsgc3RyaW5nIH0sXG4gICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgc2l6ZTogeyBudW1iZXIgfSwgLy8gcHhcbiAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgIGJhY2tncm91bmQ6IHsgc3RyaW5nIH0sXG4gICAgc3Ryb2tlV2lkdGg6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgc3Ryb2tlQ29sb3I6IHsgc3RyaW5nIH0sXG4gICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICBtdWx0aTogeyBib29sZWFuOiBib29sLCBzdHJpbmcgfSxcbiAgICBib2xkOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBib2xkaXRhbDoge1xuICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgIH0sXG4gICAgaXRhbDoge1xuICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgIH0sXG4gICAgbW9ubzoge1xuICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgfSxcbiAgZ3JvdXA6IHsgc3RyaW5nLCBudW1iZXIsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICBoZWlnaHRDb25zdHJhaW50OiB7XG4gICAgbWluaW11bTogeyBudW1iZXIgfSxcbiAgICB2YWxpZ246IHsgc3RyaW5nIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sLCBudW1iZXIgfSxcbiAgfSxcbiAgaGlkZGVuOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgaWNvbjoge1xuICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgY29kZTogeyBzdHJpbmcgfSwgLy8nXFx1ZjAwNycsXG4gICAgc2l6ZTogeyBudW1iZXIgfSwgLy81MCxcbiAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICB3ZWlnaHQ6IHsgc3RyaW5nLCBudW1iZXIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgaWQ6IHsgc3RyaW5nLCBudW1iZXIgfSxcbiAgaW1hZ2U6IHtcbiAgICBzZWxlY3RlZDogeyBzdHJpbmcsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LCAvLyAtLT4gVVJMXG4gICAgdW5zZWxlY3RlZDogeyBzdHJpbmcsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LCAvLyAtLT4gVVJMXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgfSxcbiAgaW1hZ2VQYWRkaW5nOiB7XG4gICAgdG9wOiB7IG51bWJlciB9LFxuICAgIHJpZ2h0OiB7IG51bWJlciB9LFxuICAgIGJvdHRvbTogeyBudW1iZXIgfSxcbiAgICBsZWZ0OiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgbnVtYmVyIH0sXG4gIH0sXG4gIGxhYmVsOiB7IHN0cmluZywgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIGxhYmVsSGlnaGxpZ2h0Qm9sZDogeyBib29sZWFuOiBib29sIH0sXG4gIGxldmVsOiB7IG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIG1hcmdpbjoge1xuICAgIHRvcDogeyBudW1iZXIgfSxcbiAgICByaWdodDogeyBudW1iZXIgfSxcbiAgICBib3R0b206IHsgbnVtYmVyIH0sXG4gICAgbGVmdDogeyBudW1iZXIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIG51bWJlciB9LFxuICB9LFxuICBtYXNzOiB7IG51bWJlciB9LFxuICBwaHlzaWNzOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgc2NhbGluZzoge1xuICAgIG1pbjogeyBudW1iZXIgfSxcbiAgICBtYXg6IHsgbnVtYmVyIH0sXG4gICAgbGFiZWw6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgbWluOiB7IG51bWJlciB9LFxuICAgICAgbWF4OiB7IG51bWJlciB9LFxuICAgICAgbWF4VmlzaWJsZTogeyBudW1iZXIgfSxcbiAgICAgIGRyYXdUaHJlc2hvbGQ6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICB9LFxuICAgIGN1c3RvbVNjYWxpbmdGdW5jdGlvbjogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gIH0sXG4gIHNoYWRvdzoge1xuICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgIHNpemU6IHsgbnVtYmVyIH0sXG4gICAgeDogeyBudW1iZXIgfSxcbiAgICB5OiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuICBzaGFwZToge1xuICAgIHN0cmluZzogW1xuICAgICAgXCJjdXN0b21cIixcbiAgICAgIFwiZWxsaXBzZVwiLFxuICAgICAgXCJjaXJjbGVcIixcbiAgICAgIFwiZGF0YWJhc2VcIixcbiAgICAgIFwiYm94XCIsXG4gICAgICBcInRleHRcIixcbiAgICAgIFwiaW1hZ2VcIixcbiAgICAgIFwiY2lyY3VsYXJJbWFnZVwiLFxuICAgICAgXCJkaWFtb25kXCIsXG4gICAgICBcImRvdFwiLFxuICAgICAgXCJzdGFyXCIsXG4gICAgICBcInRyaWFuZ2xlXCIsXG4gICAgICBcInRyaWFuZ2xlRG93blwiLFxuICAgICAgXCJzcXVhcmVcIixcbiAgICAgIFwiaWNvblwiLFxuICAgICAgXCJoZXhhZ29uXCIsXG4gICAgXSxcbiAgfSxcbiAgY3R4UmVuZGVyZXI6IHsgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICBzaGFwZVByb3BlcnRpZXM6IHtcbiAgICBib3JkZXJEYXNoZXM6IHsgYm9vbGVhbjogYm9vbCwgYXJyYXkgfSxcbiAgICBib3JkZXJSYWRpdXM6IHsgbnVtYmVyIH0sXG4gICAgaW50ZXJwb2xhdGlvbjogeyBib29sZWFuOiBib29sIH0sXG4gICAgdXNlSW1hZ2VTaXplOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICB1c2VCb3JkZXJXaXRoSW1hZ2U6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGNvb3JkaW5hdGVPcmlnaW46IHsgc3RyaW5nOiBbXCJjZW50ZXJcIiwgXCJ0b3AtbGVmdFwiXSB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICB9LFxuICBzaXplOiB7IG51bWJlciB9LFxuICB0aXRsZTogeyBzdHJpbmcsIGRvbSwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIHZhbHVlOiB7IG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIHdpZHRoQ29uc3RyYWludDoge1xuICAgIG1pbmltdW06IHsgbnVtYmVyIH0sXG4gICAgbWF4aW11bTogeyBudW1iZXIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wsIG51bWJlciB9LFxuICB9LFxuICB4OiB7IG51bWJlciB9LFxuICB5OiB7IG51bWJlciB9LFxuICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbn07XG5jb25zdCBhbGxPcHRpb25zOiBPcHRpb25zQ29uZmlnID0ge1xuICBjb25maWd1cmU6IHtcbiAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBmaWx0ZXI6IHsgYm9vbGVhbjogYm9vbCwgc3RyaW5nLCBhcnJheSwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIGNvbnRhaW5lcjogeyBkb20gfSxcbiAgICBzaG93QnV0dG9uOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wsIHN0cmluZywgYXJyYXksIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgfSxcbiAgZWRnZXM6IHtcbiAgICBhcnJvd3M6IHtcbiAgICAgIHRvOiB7XG4gICAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgICBzY2FsZUZhY3RvcjogeyBudW1iZXIgfSxcbiAgICAgICAgdHlwZTogeyBzdHJpbmc6IGVuZFBvaW50cyB9LFxuICAgICAgICBpbWFnZUhlaWdodDogeyBudW1iZXIgfSxcbiAgICAgICAgaW1hZ2VXaWR0aDogeyBudW1iZXIgfSxcbiAgICAgICAgc3JjOiB7IHN0cmluZyB9LFxuICAgICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIH0sXG4gICAgICBtaWRkbGU6IHtcbiAgICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICAgIHNjYWxlRmFjdG9yOiB7IG51bWJlciB9LFxuICAgICAgICB0eXBlOiB7IHN0cmluZzogZW5kUG9pbnRzIH0sXG4gICAgICAgIGltYWdlV2lkdGg6IHsgbnVtYmVyIH0sXG4gICAgICAgIGltYWdlSGVpZ2h0OiB7IG51bWJlciB9LFxuICAgICAgICBzcmM6IHsgc3RyaW5nIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgfSxcbiAgICAgIGZyb206IHtcbiAgICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICAgIHNjYWxlRmFjdG9yOiB7IG51bWJlciB9LFxuICAgICAgICB0eXBlOiB7IHN0cmluZzogZW5kUG9pbnRzIH0sXG4gICAgICAgIGltYWdlV2lkdGg6IHsgbnVtYmVyIH0sXG4gICAgICAgIGltYWdlSGVpZ2h0OiB7IG51bWJlciB9LFxuICAgICAgICBzcmM6IHsgc3RyaW5nIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgfSxcbiAgICAgIF9fdHlwZV9fOiB7IHN0cmluZzogW1wiZnJvbVwiLCBcInRvXCIsIFwibWlkZGxlXCJdLCBvYmplY3QgfSxcbiAgICB9LFxuICAgIGVuZFBvaW50T2Zmc2V0OiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIG51bWJlcjogbnVtYmVyLFxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIG51bWJlcjogbnVtYmVyLFxuICAgICAgfSxcbiAgICAgIF9fdHlwZV9fOiB7XG4gICAgICAgIG9iamVjdDogb2JqZWN0LFxuICAgICAgICBudW1iZXI6IG51bWJlcixcbiAgICAgIH0sXG4gICAgfSxcbiAgICBhcnJvd1N0cmlrZXRocm91Z2g6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGJhY2tncm91bmQ6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICBzaXplOiB7IG51bWJlciB9LFxuICAgICAgZGFzaGVzOiB7IGJvb2xlYW46IGJvb2wsIGFycmF5IH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICB9LFxuICAgIGNob3Nlbjoge1xuICAgICAgbGFiZWw6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgICAgZWRnZTogeyBib29sZWFuOiBib29sLCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICB9LFxuICAgIGNvbG9yOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIGhpZ2hsaWdodDogeyBzdHJpbmcgfSxcbiAgICAgIGhvdmVyOiB7IHN0cmluZyB9LFxuICAgICAgaW5oZXJpdDogeyBzdHJpbmc6IFtcImZyb21cIiwgXCJ0b1wiLCBcImJvdGhcIl0sIGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIG9wYWNpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgIH0sXG4gICAgZGFzaGVzOiB7IGJvb2xlYW46IGJvb2wsIGFycmF5IH0sXG4gICAgZm9udDoge1xuICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICAgIGJhY2tncm91bmQ6IHsgc3RyaW5nIH0sXG4gICAgICBzdHJva2VXaWR0aDogeyBudW1iZXIgfSwgLy8gcHhcbiAgICAgIHN0cm9rZUNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgYWxpZ246IHsgc3RyaW5nOiBbXCJob3Jpem9udGFsXCIsIFwidG9wXCIsIFwibWlkZGxlXCIsIFwiYm90dG9tXCJdIH0sXG4gICAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgICAgbXVsdGk6IHsgYm9vbGVhbjogYm9vbCwgc3RyaW5nIH0sXG4gICAgICBib2xkOiB7XG4gICAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgICBtb2Q6IHsgc3RyaW5nIH0sXG4gICAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgICB9LFxuICAgICAgYm9sZGl0YWw6IHtcbiAgICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICAgIH0sXG4gICAgICBpdGFsOiB7XG4gICAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgICBtb2Q6IHsgc3RyaW5nIH0sXG4gICAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgICB9LFxuICAgICAgbW9ubzoge1xuICAgICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgICAgc2l6ZTogeyBudW1iZXIgfSwgLy8gcHhcbiAgICAgICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgICAgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBoaWRkZW46IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGhvdmVyV2lkdGg6IHsgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiwgbnVtYmVyIH0sXG4gICAgbGFiZWw6IHsgc3RyaW5nLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgICBsYWJlbEhpZ2hsaWdodEJvbGQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGxlbmd0aDogeyBudW1iZXIsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICAgIHBoeXNpY3M6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHNjYWxpbmc6IHtcbiAgICAgIG1pbjogeyBudW1iZXIgfSxcbiAgICAgIG1heDogeyBudW1iZXIgfSxcbiAgICAgIGxhYmVsOiB7XG4gICAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgICBtaW46IHsgbnVtYmVyIH0sXG4gICAgICAgIG1heDogeyBudW1iZXIgfSxcbiAgICAgICAgbWF4VmlzaWJsZTogeyBudW1iZXIgfSxcbiAgICAgICAgZHJhd1RocmVzaG9sZDogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgICB9LFxuICAgICAgY3VzdG9tU2NhbGluZ0Z1bmN0aW9uOiB7IGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICAgIH0sXG4gICAgc2VsZWN0aW9uV2lkdGg6IHsgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiwgbnVtYmVyIH0sXG4gICAgc2VsZlJlZmVyZW5jZVNpemU6IHsgbnVtYmVyIH0sXG4gICAgc2VsZlJlZmVyZW5jZToge1xuICAgICAgc2l6ZTogeyBudW1iZXIgfSxcbiAgICAgIGFuZ2xlOiB7IG51bWJlciB9LFxuICAgICAgcmVuZGVyQmVoaW5kVGhlTm9kZTogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIHNoYWRvdzoge1xuICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sXG4gICAgICB4OiB7IG51bWJlciB9LFxuICAgICAgeTogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgc21vb3RoOiB7XG4gICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIHR5cGU6IHtcbiAgICAgICAgc3RyaW5nOiBbXG4gICAgICAgICAgXCJkeW5hbWljXCIsXG4gICAgICAgICAgXCJjb250aW51b3VzXCIsXG4gICAgICAgICAgXCJkaXNjcmV0ZVwiLFxuICAgICAgICAgIFwiZGlhZ29uYWxDcm9zc1wiLFxuICAgICAgICAgIFwic3RyYWlnaHRDcm9zc1wiLFxuICAgICAgICAgIFwiaG9yaXpvbnRhbFwiLFxuICAgICAgICAgIFwidmVydGljYWxcIixcbiAgICAgICAgICBcImN1cnZlZENXXCIsXG4gICAgICAgICAgXCJjdXJ2ZWRDQ1dcIixcbiAgICAgICAgICBcImN1YmljQmV6aWVyXCIsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgcm91bmRuZXNzOiB7IG51bWJlciB9LFxuICAgICAgZm9yY2VEaXJlY3Rpb246IHtcbiAgICAgICAgc3RyaW5nOiBbXCJob3Jpem9udGFsXCIsIFwidmVydGljYWxcIiwgXCJub25lXCJdLFxuICAgICAgICBib29sZWFuOiBib29sLFxuICAgICAgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgdGl0bGU6IHsgc3RyaW5nLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgICB3aWR0aDogeyBudW1iZXIgfSxcbiAgICB3aWR0aENvbnN0cmFpbnQ6IHtcbiAgICAgIG1heGltdW06IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wsIG51bWJlciB9LFxuICAgIH0sXG4gICAgdmFsdWU6IHsgbnVtYmVyLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgZ3JvdXBzOiB7XG4gICAgdXNlRGVmYXVsdEdyb3VwczogeyBib29sZWFuOiBib29sIH0sXG4gICAgX19hbnlfXzogbm9kZU9wdGlvbnMsXG4gICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gIH0sXG4gIGludGVyYWN0aW9uOiB7XG4gICAgZHJhZ05vZGVzOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBkcmFnVmlldzogeyBib29sZWFuOiBib29sIH0sXG4gICAgaGlkZUVkZ2VzT25EcmFnOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBoaWRlRWRnZXNPblpvb206IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGhpZGVOb2Rlc09uRHJhZzogeyBib29sZWFuOiBib29sIH0sXG4gICAgaG92ZXI6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGtleWJvYXJkOiB7XG4gICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIHNwZWVkOiB7XG4gICAgICAgIHg6IHsgbnVtYmVyIH0sXG4gICAgICAgIHk6IHsgbnVtYmVyIH0sXG4gICAgICAgIHpvb206IHsgbnVtYmVyIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICAgICAgfSxcbiAgICAgIGJpbmRUb1dpbmRvdzogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBhdXRvRm9jdXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgfSxcbiAgICBtdWx0aXNlbGVjdDogeyBib29sZWFuOiBib29sIH0sXG4gICAgbmF2aWdhdGlvbkJ1dHRvbnM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHNlbGVjdGFibGU6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHNlbGVjdENvbm5lY3RlZEVkZ2VzOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBob3ZlckNvbm5lY3RlZEVkZ2VzOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICB0b29sdGlwRGVsYXk6IHsgbnVtYmVyIH0sXG4gICAgem9vbVZpZXc6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHpvb21TcGVlZDogeyBudW1iZXIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgbGF5b3V0OiB7XG4gICAgcmFuZG9tU2VlZDogeyB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIsIG51bWJlciwgc3RyaW5nIH0sXG4gICAgaW1wcm92ZWRMYXlvdXQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGNsdXN0ZXJUaHJlc2hvbGQ6IHsgbnVtYmVyIH0sXG4gICAgaGllcmFyY2hpY2FsOiB7XG4gICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIGxldmVsU2VwYXJhdGlvbjogeyBudW1iZXIgfSxcbiAgICAgIG5vZGVTcGFjaW5nOiB7IG51bWJlciB9LFxuICAgICAgdHJlZVNwYWNpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBibG9ja1NoaWZ0aW5nOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIGVkZ2VNaW5pbWl6YXRpb246IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgcGFyZW50Q2VudHJhbGl6YXRpb246IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgZGlyZWN0aW9uOiB7IHN0cmluZzogW1wiVURcIiwgXCJEVVwiLCBcIkxSXCIsIFwiUkxcIl0gfSwgLy8gVUQsIERVLCBMUiwgUkxcbiAgICAgIHNvcnRNZXRob2Q6IHsgc3RyaW5nOiBbXCJodWJzaXplXCIsIFwiZGlyZWN0ZWRcIl0gfSwgLy8gaHVic2l6ZSwgZGlyZWN0ZWRcbiAgICAgIHNoYWtlVG93YXJkczogeyBzdHJpbmc6IFtcImxlYXZlc1wiLCBcInJvb3RzXCJdIH0sIC8vIGxlYXZlcywgcm9vdHNcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gIH0sXG4gIG1hbmlwdWxhdGlvbjoge1xuICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGluaXRpYWxseUFjdGl2ZTogeyBib29sZWFuOiBib29sIH0sXG4gICAgYWRkTm9kZTogeyBib29sZWFuOiBib29sLCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgYWRkRWRnZTogeyBib29sZWFuOiBib29sLCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgZWRpdE5vZGU6IHsgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIGVkaXRFZGdlOiB7XG4gICAgICBlZGl0V2l0aG91dERyYWc6IHsgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sLCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgfSxcbiAgICBkZWxldGVOb2RlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBkZWxldGVFZGdlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBjb250cm9sTm9kZVN0eWxlOiBub2RlT3B0aW9ucyxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgfSxcbiAgbm9kZXM6IG5vZGVPcHRpb25zLFxuICBwaHlzaWNzOiB7XG4gICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgYmFybmVzSHV0OiB7XG4gICAgICB0aGV0YTogeyBudW1iZXIgfSxcbiAgICAgIGdyYXZpdGF0aW9uYWxDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIGNlbnRyYWxHcmF2aXR5OiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nTGVuZ3RoOiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IHsgbnVtYmVyIH0sXG4gICAgICBkYW1waW5nOiB7IG51bWJlciB9LFxuICAgICAgYXZvaWRPdmVybGFwOiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgfSxcbiAgICBmb3JjZUF0bGFzMkJhc2VkOiB7XG4gICAgICB0aGV0YTogeyBudW1iZXIgfSxcbiAgICAgIGdyYXZpdGF0aW9uYWxDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIGNlbnRyYWxHcmF2aXR5OiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nTGVuZ3RoOiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IHsgbnVtYmVyIH0sXG4gICAgICBkYW1waW5nOiB7IG51bWJlciB9LFxuICAgICAgYXZvaWRPdmVybGFwOiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgfSxcbiAgICByZXB1bHNpb246IHtcbiAgICAgIGNlbnRyYWxHcmF2aXR5OiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nTGVuZ3RoOiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IHsgbnVtYmVyIH0sXG4gICAgICBub2RlRGlzdGFuY2U6IHsgbnVtYmVyIH0sXG4gICAgICBkYW1waW5nOiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgfSxcbiAgICBoaWVyYXJjaGljYWxSZXB1bHNpb246IHtcbiAgICAgIGNlbnRyYWxHcmF2aXR5OiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nTGVuZ3RoOiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IHsgbnVtYmVyIH0sXG4gICAgICBub2RlRGlzdGFuY2U6IHsgbnVtYmVyIH0sXG4gICAgICBkYW1waW5nOiB7IG51bWJlciB9LFxuICAgICAgYXZvaWRPdmVybGFwOiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgfSxcbiAgICBtYXhWZWxvY2l0eTogeyBudW1iZXIgfSxcbiAgICBtaW5WZWxvY2l0eTogeyBudW1iZXIgfSwgLy8gcHgvc1xuICAgIHNvbHZlcjoge1xuICAgICAgc3RyaW5nOiBbXG4gICAgICAgIFwiYmFybmVzSHV0XCIsXG4gICAgICAgIFwicmVwdWxzaW9uXCIsXG4gICAgICAgIFwiaGllcmFyY2hpY2FsUmVwdWxzaW9uXCIsXG4gICAgICAgIFwiZm9yY2VBdGxhczJCYXNlZFwiLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHN0YWJpbGl6YXRpb246IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgaXRlcmF0aW9uczogeyBudW1iZXIgfSwgLy8gbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9uIHRvIHN0YWJpbGl6ZVxuICAgICAgdXBkYXRlSW50ZXJ2YWw6IHsgbnVtYmVyIH0sXG4gICAgICBvbmx5RHluYW1pY0VkZ2VzOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIGZpdDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICB9LFxuICAgIHRpbWVzdGVwOiB7IG51bWJlciB9LFxuICAgIGFkYXB0aXZlVGltZXN0ZXA6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHdpbmQ6IHtcbiAgICAgIHg6IHsgbnVtYmVyIH0sXG4gICAgICB5OiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgfSxcblxuICAvL2dsb2JhbHMgOlxuICBhdXRvUmVzaXplOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgY2xpY2tUb1VzZTogeyBib29sZWFuOiBib29sIH0sXG4gIGxvY2FsZTogeyBzdHJpbmcgfSxcbiAgbG9jYWxlczoge1xuICAgIF9fYW55X186IHsgYW55IH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gIH0sXG4gIGhlaWdodDogeyBzdHJpbmcgfSxcbiAgd2lkdGg6IHsgc3RyaW5nIH0sXG4gIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxufTtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5cbi8qKlxuICogVGhpcyBwcm92aWRlcyByYW5nZXMsIGluaXRpYWwgdmFsdWVzLCBzdGVwcyBhbmQgZHJvcGRvd24gbWVudSBjaG9pY2VzIGZvciB0aGVcbiAqIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHJlbWFya3NcbiAqIENoZWNrYm94OiBgYm9vbGVhbmBcbiAqICAgVGhlIHZhbHVlIHN1cGxsaWVkIHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAqXG4gKiBUZXh0IGZpZWxkOiBgc3RyaW5nYFxuICogICBUaGUgcGFzc2VkIHRleHQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbml0aWFsIHZhbHVlLiBBbnkgdGV4dCB3aWxsIGJlXG4gKiAgIGFjY2VwdGVkIGFmdGVyd2FyZHMuXG4gKlxuICogTnVtYmVyIHJhbmdlOiBgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl1gXG4gKiAgIFRoZSBtZWFuaW5ncyBhcmUgYFtpbml0aWFsIHZhbHVlLCBtaW4sIG1heCwgc3RlcF1gLlxuICpcbiAqIERyb3Bkb3duOiBgW0V4Y2x1ZGU8c3RyaW5nLCBcImNvbG9yXCI+LCAuLi4oc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbilbXV1gXG4gKiAgIFRyYW5zbGF0aW9ucyBmb3IgcGVvcGxlIHdpdGggcG9vciB1bmRlcnN0YW5kaW5nIG9mIFR5cGVTY3JpcHQ6IHRoZSBmaXJzdFxuICogICB2YWx1ZSBhbHdheXMgaGFzIHRvIGJlIGEgc3RyaW5nIGJ1dCBuZXZlciBgXCJjb2xvclwiYCwgdGhlIHJlc3QgY2FuIGJlIGFueVxuICogICBjb21iaW5hdGlvbiBvZiBzdHJpbmdzLCBudW1iZXJzIGFuZCBib29sZWFucy5cbiAqXG4gKiBDb2xvciBwaWNrZXI6IGBbXCJjb2xvclwiLCBzdHJpbmddYFxuICogICBUaGUgZmlyc3QgdmFsdWUgc2F5cyB0aGlzIHdpbGwgYmUgYSBjb2xvciBwaWNrZXIgbm90IGEgZHJvcGRvd24gbWVudS4gVGhlXG4gKiAgIG5leHQgdmFsdWUgaXMgdGhlIGluaXRpYWwgY29sb3IuXG4gKi9cbmNvbnN0IGNvbmZpZ3VyZU9wdGlvbnM6IENvbmZpZ3VyYXRvckNvbmZpZyA9IHtcbiAgbm9kZXM6IHtcbiAgICBib3JkZXJXaWR0aDogWzEsIDAsIDEwLCAxXSxcbiAgICBib3JkZXJXaWR0aFNlbGVjdGVkOiBbMiwgMCwgMTAsIDFdLFxuICAgIGNvbG9yOiB7XG4gICAgICBib3JkZXI6IFtcImNvbG9yXCIsIFwiIzJCN0NFOVwiXSxcbiAgICAgIGJhY2tncm91bmQ6IFtcImNvbG9yXCIsIFwiIzk3QzJGQ1wiXSxcbiAgICAgIGhpZ2hsaWdodDoge1xuICAgICAgICBib3JkZXI6IFtcImNvbG9yXCIsIFwiIzJCN0NFOVwiXSxcbiAgICAgICAgYmFja2dyb3VuZDogW1wiY29sb3JcIiwgXCIjRDJFNUZGXCJdLFxuICAgICAgfSxcbiAgICAgIGhvdmVyOiB7XG4gICAgICAgIGJvcmRlcjogW1wiY29sb3JcIiwgXCIjMkI3Q0U5XCJdLFxuICAgICAgICBiYWNrZ3JvdW5kOiBbXCJjb2xvclwiLCBcIiNEMkU1RkZcIl0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgb3BhY2l0eTogWzAsIDAsIDEsIDAuMV0sXG4gICAgZml4ZWQ6IHtcbiAgICAgIHg6IGZhbHNlLFxuICAgICAgeTogZmFsc2UsXG4gICAgfSxcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogW1wiY29sb3JcIiwgXCIjMzQzNDM0XCJdLFxuICAgICAgc2l6ZTogWzE0LCAwLCAxMDAsIDFdLCAvLyBweFxuICAgICAgZmFjZTogW1wiYXJpYWxcIiwgXCJ2ZXJkYW5hXCIsIFwidGFob21hXCJdLFxuICAgICAgYmFja2dyb3VuZDogW1wiY29sb3JcIiwgXCJub25lXCJdLFxuICAgICAgc3Ryb2tlV2lkdGg6IFswLCAwLCA1MCwgMV0sIC8vIHB4XG4gICAgICBzdHJva2VDb2xvcjogW1wiY29sb3JcIiwgXCIjZmZmZmZmXCJdLFxuICAgIH0sXG4gICAgLy9ncm91cDogJ3N0cmluZycsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBsYWJlbEhpZ2hsaWdodEJvbGQ6IHRydWUsXG4gICAgLy9pY29uOiB7XG4gICAgLy8gIGZhY2U6ICdzdHJpbmcnLCAgLy8nRm9udEF3ZXNvbWUnLFxuICAgIC8vICBjb2RlOiAnc3RyaW5nJywgIC8vJ1xcdWYwMDcnLFxuICAgIC8vICBzaXplOiBbNTAsIDAsIDIwMCwgMV0sICAvLzUwLFxuICAgIC8vICBjb2xvcjogWydjb2xvcicsJyMyQjdDRTknXSAgIC8vJyNhYTAwZmYnXG4gICAgLy99LFxuICAgIC8vaW1hZ2U6ICdzdHJpbmcnLCAvLyAtLT4gVVJMXG4gICAgcGh5c2ljczogdHJ1ZSxcbiAgICBzY2FsaW5nOiB7XG4gICAgICBtaW46IFsxMCwgMCwgMjAwLCAxXSxcbiAgICAgIG1heDogWzMwLCAwLCAyMDAsIDFdLFxuICAgICAgbGFiZWw6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG1pbjogWzE0LCAwLCAyMDAsIDFdLFxuICAgICAgICBtYXg6IFszMCwgMCwgMjAwLCAxXSxcbiAgICAgICAgbWF4VmlzaWJsZTogWzMwLCAwLCAyMDAsIDFdLFxuICAgICAgICBkcmF3VGhyZXNob2xkOiBbNSwgMCwgMjAsIDFdLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHNoYWRvdzoge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBjb2xvcjogXCJyZ2JhKDAsMCwwLDAuNSlcIixcbiAgICAgIHNpemU6IFsxMCwgMCwgMjAsIDFdLFxuICAgICAgeDogWzUsIC0zMCwgMzAsIDFdLFxuICAgICAgeTogWzUsIC0zMCwgMzAsIDFdLFxuICAgIH0sXG4gICAgc2hhcGU6IFtcbiAgICAgIFwiZWxsaXBzZVwiLFxuICAgICAgXCJib3hcIixcbiAgICAgIFwiY2lyY2xlXCIsXG4gICAgICBcImRhdGFiYXNlXCIsXG4gICAgICBcImRpYW1vbmRcIixcbiAgICAgIFwiZG90XCIsXG4gICAgICBcInNxdWFyZVwiLFxuICAgICAgXCJzdGFyXCIsXG4gICAgICBcInRleHRcIixcbiAgICAgIFwidHJpYW5nbGVcIixcbiAgICAgIFwidHJpYW5nbGVEb3duXCIsXG4gICAgICBcImhleGFnb25cIixcbiAgICBdLFxuICAgIHNoYXBlUHJvcGVydGllczoge1xuICAgICAgYm9yZGVyRGFzaGVzOiBmYWxzZSxcbiAgICAgIGJvcmRlclJhZGl1czogWzYsIDAsIDIwLCAxXSxcbiAgICAgIGludGVycG9sYXRpb246IHRydWUsXG4gICAgICB1c2VJbWFnZVNpemU6IGZhbHNlLFxuICAgIH0sXG4gICAgc2l6ZTogWzI1LCAwLCAyMDAsIDFdLFxuICB9LFxuICBlZGdlczoge1xuICAgIGFycm93czoge1xuICAgICAgdG86IHsgZW5hYmxlZDogZmFsc2UsIHNjYWxlRmFjdG9yOiBbMSwgMCwgMywgMC4wNV0sIHR5cGU6IFwiYXJyb3dcIiB9LFxuICAgICAgbWlkZGxlOiB7IGVuYWJsZWQ6IGZhbHNlLCBzY2FsZUZhY3RvcjogWzEsIDAsIDMsIDAuMDVdLCB0eXBlOiBcImFycm93XCIgfSxcbiAgICAgIGZyb206IHsgZW5hYmxlZDogZmFsc2UsIHNjYWxlRmFjdG9yOiBbMSwgMCwgMywgMC4wNV0sIHR5cGU6IFwiYXJyb3dcIiB9LFxuICAgIH0sXG4gICAgZW5kUG9pbnRPZmZzZXQ6IHtcbiAgICAgIGZyb206IFswLCAtMTAsIDEwLCAxXSxcbiAgICAgIHRvOiBbMCwgLTEwLCAxMCwgMV0sXG4gICAgfSxcbiAgICBhcnJvd1N0cmlrZXRocm91Z2g6IHRydWUsXG4gICAgY29sb3I6IHtcbiAgICAgIGNvbG9yOiBbXCJjb2xvclwiLCBcIiM4NDg0ODRcIl0sXG4gICAgICBoaWdobGlnaHQ6IFtcImNvbG9yXCIsIFwiIzg0ODQ4NFwiXSxcbiAgICAgIGhvdmVyOiBbXCJjb2xvclwiLCBcIiM4NDg0ODRcIl0sXG4gICAgICBpbmhlcml0OiBbXCJmcm9tXCIsIFwidG9cIiwgXCJib3RoXCIsIHRydWUsIGZhbHNlXSxcbiAgICAgIG9wYWNpdHk6IFsxLCAwLCAxLCAwLjA1XSxcbiAgICB9LFxuICAgIGRhc2hlczogZmFsc2UsXG4gICAgZm9udDoge1xuICAgICAgY29sb3I6IFtcImNvbG9yXCIsIFwiIzM0MzQzNFwiXSxcbiAgICAgIHNpemU6IFsxNCwgMCwgMTAwLCAxXSwgLy8gcHhcbiAgICAgIGZhY2U6IFtcImFyaWFsXCIsIFwidmVyZGFuYVwiLCBcInRhaG9tYVwiXSxcbiAgICAgIGJhY2tncm91bmQ6IFtcImNvbG9yXCIsIFwibm9uZVwiXSxcbiAgICAgIHN0cm9rZVdpZHRoOiBbMiwgMCwgNTAsIDFdLCAvLyBweFxuICAgICAgc3Ryb2tlQ29sb3I6IFtcImNvbG9yXCIsIFwiI2ZmZmZmZlwiXSxcbiAgICAgIGFsaWduOiBbXCJob3Jpem9udGFsXCIsIFwidG9wXCIsIFwibWlkZGxlXCIsIFwiYm90dG9tXCJdLFxuICAgIH0sXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBob3ZlcldpZHRoOiBbMS41LCAwLCA1LCAwLjFdLFxuICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogdHJ1ZSxcbiAgICBwaHlzaWNzOiB0cnVlLFxuICAgIHNjYWxpbmc6IHtcbiAgICAgIG1pbjogWzEsIDAsIDEwMCwgMV0sXG4gICAgICBtYXg6IFsxNSwgMCwgMTAwLCAxXSxcbiAgICAgIGxhYmVsOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIG1pbjogWzE0LCAwLCAyMDAsIDFdLFxuICAgICAgICBtYXg6IFszMCwgMCwgMjAwLCAxXSxcbiAgICAgICAgbWF4VmlzaWJsZTogWzMwLCAwLCAyMDAsIDFdLFxuICAgICAgICBkcmF3VGhyZXNob2xkOiBbNSwgMCwgMjAsIDFdLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHNlbGVjdGlvbldpZHRoOiBbMS41LCAwLCA1LCAwLjFdLFxuICAgIHNlbGZSZWZlcmVuY2VTaXplOiBbMjAsIDAsIDIwMCwgMV0sXG4gICAgc2VsZlJlZmVyZW5jZToge1xuICAgICAgc2l6ZTogWzIwLCAwLCAyMDAsIDFdLFxuICAgICAgYW5nbGU6IFtNYXRoLlBJIC8gMiwgLTYgKiBNYXRoLlBJLCA2ICogTWF0aC5QSSwgTWF0aC5QSSAvIDhdLFxuICAgICAgcmVuZGVyQmVoaW5kVGhlTm9kZTogdHJ1ZSxcbiAgICB9LFxuICAgIHNoYWRvdzoge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBjb2xvcjogXCJyZ2JhKDAsMCwwLDAuNSlcIixcbiAgICAgIHNpemU6IFsxMCwgMCwgMjAsIDFdLFxuICAgICAgeDogWzUsIC0zMCwgMzAsIDFdLFxuICAgICAgeTogWzUsIC0zMCwgMzAsIDFdLFxuICAgIH0sXG4gICAgc21vb3RoOiB7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgdHlwZTogW1xuICAgICAgICBcImR5bmFtaWNcIixcbiAgICAgICAgXCJjb250aW51b3VzXCIsXG4gICAgICAgIFwiZGlzY3JldGVcIixcbiAgICAgICAgXCJkaWFnb25hbENyb3NzXCIsXG4gICAgICAgIFwic3RyYWlnaHRDcm9zc1wiLFxuICAgICAgICBcImhvcml6b250YWxcIixcbiAgICAgICAgXCJ2ZXJ0aWNhbFwiLFxuICAgICAgICBcImN1cnZlZENXXCIsXG4gICAgICAgIFwiY3VydmVkQ0NXXCIsXG4gICAgICAgIFwiY3ViaWNCZXppZXJcIixcbiAgICAgIF0sXG4gICAgICBmb3JjZURpcmVjdGlvbjogW1wiaG9yaXpvbnRhbFwiLCBcInZlcnRpY2FsXCIsIFwibm9uZVwiXSxcbiAgICAgIHJvdW5kbmVzczogWzAuNSwgMCwgMSwgMC4wNV0sXG4gICAgfSxcbiAgICB3aWR0aDogWzEsIDAsIDMwLCAxXSxcbiAgfSxcbiAgbGF5b3V0OiB7XG4gICAgLy9yYW5kb21TZWVkOiBbMCwgMCwgNTAwLCAxXSxcbiAgICAvL2ltcHJvdmVkTGF5b3V0OiB0cnVlLFxuICAgIGhpZXJhcmNoaWNhbDoge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBsZXZlbFNlcGFyYXRpb246IFsxNTAsIDIwLCA1MDAsIDVdLFxuICAgICAgbm9kZVNwYWNpbmc6IFsxMDAsIDIwLCA1MDAsIDVdLFxuICAgICAgdHJlZVNwYWNpbmc6IFsyMDAsIDIwLCA1MDAsIDVdLFxuICAgICAgYmxvY2tTaGlmdGluZzogdHJ1ZSxcbiAgICAgIGVkZ2VNaW5pbWl6YXRpb246IHRydWUsXG4gICAgICBwYXJlbnRDZW50cmFsaXphdGlvbjogdHJ1ZSxcbiAgICAgIGRpcmVjdGlvbjogW1wiVURcIiwgXCJEVVwiLCBcIkxSXCIsIFwiUkxcIl0sIC8vIFVELCBEVSwgTFIsIFJMXG4gICAgICBzb3J0TWV0aG9kOiBbXCJodWJzaXplXCIsIFwiZGlyZWN0ZWRcIl0sIC8vIGh1YnNpemUsIGRpcmVjdGVkXG4gICAgICBzaGFrZVRvd2FyZHM6IFtcImxlYXZlc1wiLCBcInJvb3RzXCJdLCAvLyBsZWF2ZXMsIHJvb3RzXG4gICAgfSxcbiAgfSxcbiAgaW50ZXJhY3Rpb246IHtcbiAgICBkcmFnTm9kZXM6IHRydWUsXG4gICAgZHJhZ1ZpZXc6IHRydWUsXG4gICAgaGlkZUVkZ2VzT25EcmFnOiBmYWxzZSxcbiAgICBoaWRlRWRnZXNPblpvb206IGZhbHNlLFxuICAgIGhpZGVOb2Rlc09uRHJhZzogZmFsc2UsXG4gICAgaG92ZXI6IGZhbHNlLFxuICAgIGtleWJvYXJkOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIHNwZWVkOiB7XG4gICAgICAgIHg6IFsxMCwgMCwgNDAsIDFdLFxuICAgICAgICB5OiBbMTAsIDAsIDQwLCAxXSxcbiAgICAgICAgem9vbTogWzAuMDIsIDAsIDAuMSwgMC4wMDVdLFxuICAgICAgfSxcbiAgICAgIGJpbmRUb1dpbmRvdzogdHJ1ZSxcbiAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICB9LFxuICAgIG11bHRpc2VsZWN0OiBmYWxzZSxcbiAgICBuYXZpZ2F0aW9uQnV0dG9uczogZmFsc2UsXG4gICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICBzZWxlY3RDb25uZWN0ZWRFZGdlczogdHJ1ZSxcbiAgICBob3ZlckNvbm5lY3RlZEVkZ2VzOiB0cnVlLFxuICAgIHRvb2x0aXBEZWxheTogWzMwMCwgMCwgMTAwMCwgMjVdLFxuICAgIHpvb21WaWV3OiB0cnVlLFxuICAgIHpvb21TcGVlZDogWzEsIDAuMSwgMiwgMC4xXSxcbiAgfSxcbiAgbWFuaXB1bGF0aW9uOiB7XG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgaW5pdGlhbGx5QWN0aXZlOiBmYWxzZSxcbiAgfSxcbiAgcGh5c2ljczoge1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgYmFybmVzSHV0OiB7XG4gICAgICB0aGV0YTogWzAuNSwgMC4xLCAxLCAwLjA1XSxcbiAgICAgIGdyYXZpdGF0aW9uYWxDb25zdGFudDogWy0yMDAwLCAtMzAwMDAsIDAsIDUwXSxcbiAgICAgIGNlbnRyYWxHcmF2aXR5OiBbMC4zLCAwLCAxMCwgMC4wNV0sXG4gICAgICBzcHJpbmdMZW5ndGg6IFs5NSwgMCwgNTAwLCA1XSxcbiAgICAgIHNwcmluZ0NvbnN0YW50OiBbMC4wNCwgMCwgMS4yLCAwLjAwNV0sXG4gICAgICBkYW1waW5nOiBbMC4wOSwgMCwgMSwgMC4wMV0sXG4gICAgICBhdm9pZE92ZXJsYXA6IFswLCAwLCAxLCAwLjAxXSxcbiAgICB9LFxuICAgIGZvcmNlQXRsYXMyQmFzZWQ6IHtcbiAgICAgIHRoZXRhOiBbMC41LCAwLjEsIDEsIDAuMDVdLFxuICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiBbLTUwLCAtNTAwLCAwLCAxXSxcbiAgICAgIGNlbnRyYWxHcmF2aXR5OiBbMC4wMSwgMCwgMSwgMC4wMDVdLFxuICAgICAgc3ByaW5nTGVuZ3RoOiBbOTUsIDAsIDUwMCwgNV0sXG4gICAgICBzcHJpbmdDb25zdGFudDogWzAuMDgsIDAsIDEuMiwgMC4wMDVdLFxuICAgICAgZGFtcGluZzogWzAuNCwgMCwgMSwgMC4wMV0sXG4gICAgICBhdm9pZE92ZXJsYXA6IFswLCAwLCAxLCAwLjAxXSxcbiAgICB9LFxuICAgIHJlcHVsc2lvbjoge1xuICAgICAgY2VudHJhbEdyYXZpdHk6IFswLjIsIDAsIDEwLCAwLjA1XSxcbiAgICAgIHNwcmluZ0xlbmd0aDogWzIwMCwgMCwgNTAwLCA1XSxcbiAgICAgIHNwcmluZ0NvbnN0YW50OiBbMC4wNSwgMCwgMS4yLCAwLjAwNV0sXG4gICAgICBub2RlRGlzdGFuY2U6IFsxMDAsIDAsIDUwMCwgNV0sXG4gICAgICBkYW1waW5nOiBbMC4wOSwgMCwgMSwgMC4wMV0sXG4gICAgfSxcbiAgICBoaWVyYXJjaGljYWxSZXB1bHNpb246IHtcbiAgICAgIGNlbnRyYWxHcmF2aXR5OiBbMC4yLCAwLCAxMCwgMC4wNV0sXG4gICAgICBzcHJpbmdMZW5ndGg6IFsxMDAsIDAsIDUwMCwgNV0sXG4gICAgICBzcHJpbmdDb25zdGFudDogWzAuMDEsIDAsIDEuMiwgMC4wMDVdLFxuICAgICAgbm9kZURpc3RhbmNlOiBbMTIwLCAwLCA1MDAsIDVdLFxuICAgICAgZGFtcGluZzogWzAuMDksIDAsIDEsIDAuMDFdLFxuICAgICAgYXZvaWRPdmVybGFwOiBbMCwgMCwgMSwgMC4wMV0sXG4gICAgfSxcbiAgICBtYXhWZWxvY2l0eTogWzUwLCAwLCAxNTAsIDFdLFxuICAgIG1pblZlbG9jaXR5OiBbMC4xLCAwLjAxLCAwLjUsIDAuMDFdLFxuICAgIHNvbHZlcjogW1xuICAgICAgXCJiYXJuZXNIdXRcIixcbiAgICAgIFwiZm9yY2VBdGxhczJCYXNlZFwiLFxuICAgICAgXCJyZXB1bHNpb25cIixcbiAgICAgIFwiaGllcmFyY2hpY2FsUmVwdWxzaW9uXCIsXG4gICAgXSxcbiAgICB0aW1lc3RlcDogWzAuNSwgMC4wMSwgMSwgMC4wMV0sXG4gICAgd2luZDoge1xuICAgICAgeDogWzAsIC0xMCwgMTAsIDAuMV0sXG4gICAgICB5OiBbMCwgLTEwLCAxMCwgMC4xXSxcbiAgICB9LFxuICAgIC8vYWRhcHRpdmVUaW1lc3RlcDogdHJ1ZVxuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IGNvbmZpZ3VyYXRvckhpZGVPcHRpb246IENvbmZpZ3VyYXRvckhpZGVPcHRpb24gPSAoXG4gIHBhcmVudFBhdGgsXG4gIG9wdGlvbk5hbWUsXG4gIG9wdGlvbnNcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoXG4gICAgcGFyZW50UGF0aC5pbmNsdWRlcyhcInBoeXNpY3NcIikgJiZcbiAgICAoY29uZmlndXJlT3B0aW9ucyBhcyBhbnkpLnBoeXNpY3Muc29sdmVyLmluY2x1ZGVzKG9wdGlvbk5hbWUpICYmXG4gICAgb3B0aW9ucy5waHlzaWNzLnNvbHZlciAhPT0gb3B0aW9uTmFtZSAmJlxuICAgIG9wdGlvbk5hbWUgIT09IFwid2luZFwiXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IHsgYWxsT3B0aW9ucywgY29uZmlndXJlT3B0aW9ucyB9O1xuIiwgIi8qKlxuICogIFRoZSBGbG95ZOKAk1dhcnNoYWxsIGFsZ29yaXRobSBpcyBhbiBhbGdvcml0aG0gZm9yIGZpbmRpbmcgc2hvcnRlc3QgcGF0aHMgaW5cbiAqICBhIHdlaWdodGVkIGdyYXBoIHdpdGggcG9zaXRpdmUgb3IgbmVnYXRpdmUgZWRnZSB3ZWlnaHRzIChidXQgd2l0aCBubyBuZWdhdGl2ZVxuICogIGN5Y2xlcykuIC0gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmxveWTigJNXYXJzaGFsbF9hbGdvcml0aG1cbiAqL1xuY2xhc3MgRmxveWRXYXJzaGFsbCB7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBub2Rlc0FycmF5XG4gICAqIEBwYXJhbSB7QXJyYXkuPEVkZ2U+fSBlZGdlc0FycmF5XG4gICAqIEByZXR1cm5zIHt7fX1cbiAgICovXG4gIGdldERpc3RhbmNlcyhib2R5LCBub2Rlc0FycmF5LCBlZGdlc0FycmF5KSB7XG4gICAgY29uc3QgRF9tYXRyaXggPSB7fTtcbiAgICBjb25zdCBlZGdlcyA9IGJvZHkuZWRnZXM7XG5cbiAgICAvLyBwcmVwYXJlIG1hdHJpeCB3aXRoIGxhcmdlIG51bWJlcnNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc0FycmF5W2ldO1xuICAgICAgY29uc3QgY2VsbCA9IHt9O1xuICAgICAgRF9tYXRyaXhbbm9kZV0gPSBjZWxsO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2Rlc0FycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNlbGxbbm9kZXNBcnJheVtqXV0gPSBpID09IGogPyAwIDogMWU5O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHB1dCB0aGUgd2VpZ2h0cyBmb3IgdGhlIGVkZ2VzIGluLiBUaGlzIGFzc3VtZXMgdW5pZGlyZWN0aW9uYWxpdHkuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlc0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZXNBcnJheVtpXV07XG4gICAgICAvLyBlZGdlIGhhcyB0byBiZSBjb25uZWN0ZWQgaWYgaXQgY291bnRzIHRvIHRoZSBkaXN0YW5jZXMuIElmIGl0IGlzIGNvbm5lY3RlZCB0byBpbm5lciBjbHVzdGVycyBpdCB3aWxsIGNyYXNoIHNvIHdlIGFsc28gY2hlY2sgaWYgaXQgaXMgaW4gdGhlIERfbWF0cml4XG4gICAgICBpZiAoXG4gICAgICAgIGVkZ2UuY29ubmVjdGVkID09PSB0cnVlICYmXG4gICAgICAgIERfbWF0cml4W2VkZ2UuZnJvbUlkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIERfbWF0cml4W2VkZ2UudG9JZF0gIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIERfbWF0cml4W2VkZ2UuZnJvbUlkXVtlZGdlLnRvSWRdID0gMTtcbiAgICAgICAgRF9tYXRyaXhbZWRnZS50b0lkXVtlZGdlLmZyb21JZF0gPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5vZGVDb3VudCA9IG5vZGVzQXJyYXkubGVuZ3RoO1xuXG4gICAgLy8gQWRhcHRlZCBGbG95ZFdhcnNoYWxsIGJhc2VkIG9uIHVuaWRpcmVjdGlvbmFsaXR5IHRvIGdyZWF0bHkgcmVkdWNlIGNvbXBsZXhpdHkuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBub2RlQ291bnQ7IGsrKykge1xuICAgICAgY29uc3Qga25vZGUgPSBub2Rlc0FycmF5W2tdO1xuICAgICAgY29uc3Qga2NvbG0gPSBEX21hdHJpeFtrbm9kZV07XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVDb3VudCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBpbm9kZSA9IG5vZGVzQXJyYXlbaV07XG4gICAgICAgIGNvbnN0IGljb2xtID0gRF9tYXRyaXhbaW5vZGVdO1xuICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBub2RlQ291bnQ7IGorKykge1xuICAgICAgICAgIGNvbnN0IGpub2RlID0gbm9kZXNBcnJheVtqXTtcbiAgICAgICAgICBjb25zdCBqY29sbSA9IERfbWF0cml4W2pub2RlXTtcblxuICAgICAgICAgIGNvbnN0IHZhbCA9IE1hdGgubWluKGljb2xtW2pub2RlXSwgaWNvbG1ba25vZGVdICsga2NvbG1bam5vZGVdKTtcbiAgICAgICAgICBpY29sbVtqbm9kZV0gPSB2YWw7XG4gICAgICAgICAgamNvbG1baW5vZGVdID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIERfbWF0cml4O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZsb3lkV2Fyc2hhbGw7XG4iLCAiLy8gZGlzdGFuY2UgZmluZGluZyBhbGdvcml0aG1cbmltcG9ydCBGbG95ZFdhcnNoYWxsIGZyb20gXCIuL2NvbXBvbmVudHMvYWxnb3JpdGhtcy9GbG95ZFdhcnNoYWxsLmpzXCI7XG5cbi8qKlxuICogS2FtYWRhS2F3YWkgcG9zaXRpb25zIHRoZSBub2RlcyBpbml0aWFsbHkgYmFzZWQgb25cbiAqXG4gKiBcIkFOIEFMR09SSVRITSBGT1IgRFJBV0lORyBHRU5FUkFMIFVORElSRUNURUQgR1JBUEhTXCJcbiAqIC0tIFRvbWloaXNhIEtBTUFEQSBhbmQgU2F0b3J1IEtBV0FJIGluIDE5ODlcbiAqXG4gKiBQb3NzaWJsZSBvcHRpbWl6YXRpb25zIGluIHRoZSBkaXN0YW5jZSBjYWxjdWxhdGlvbiBjYW4gYmUgaW1wbGVtZW50ZWQuXG4gKi9cbmNsYXNzIEthbWFkYUthd2FpIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlZGdlTGVuZ3RoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlZGdlU3RyZW5ndGhcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGVkZ2VMZW5ndGgsIGVkZ2VTdHJlbmd0aCkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5zcHJpbmdMZW5ndGggPSBlZGdlTGVuZ3RoO1xuICAgIHRoaXMuc3ByaW5nQ29uc3RhbnQgPSBlZGdlU3RyZW5ndGg7XG4gICAgdGhpcy5kaXN0YW5jZVNvbHZlciA9IG5ldyBGbG95ZFdhcnNoYWxsKCk7XG4gIH1cblxuICAvKipcbiAgICogTm90IHN1cmUgaWYgbmVlZGVkIGJ1dCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlIHNwcmluZyBsZW5ndGggYW5kIHNwcmluZyBjb25zdGFudFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLnNwcmluZ0xlbmd0aCkge1xuICAgICAgICB0aGlzLnNwcmluZ0xlbmd0aCA9IG9wdGlvbnMuc3ByaW5nTGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuc3ByaW5nQ29uc3RhbnQpIHtcbiAgICAgICAgdGhpcy5zcHJpbmdDb25zdGFudCA9IG9wdGlvbnMuc3ByaW5nQ29uc3RhbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9uIHRoZSBzeXN0ZW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzQXJyYXlcbiAgICogQHBhcmFtIHtBcnJheS48dmlzLkVkZ2U+fSBlZGdlc0FycmF5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lnbm9yZUNsdXN0ZXJzPWZhbHNlXVxuICAgKi9cbiAgc29sdmUobm9kZXNBcnJheSwgZWRnZXNBcnJheSwgaWdub3JlQ2x1c3RlcnMgPSBmYWxzZSkge1xuICAgIC8vIGdldCBkaXN0YW5jZSBtYXRyaXhcbiAgICBjb25zdCBEX21hdHJpeCA9IHRoaXMuZGlzdGFuY2VTb2x2ZXIuZ2V0RGlzdGFuY2VzKFxuICAgICAgdGhpcy5ib2R5LFxuICAgICAgbm9kZXNBcnJheSxcbiAgICAgIGVkZ2VzQXJyYXlcbiAgICApOyAvLyBkaXN0YW5jZSBtYXRyaXhcblxuICAgIC8vIGdldCB0aGUgTCBNYXRyaXhcbiAgICB0aGlzLl9jcmVhdGVMX21hdHJpeChEX21hdHJpeCk7XG5cbiAgICAvLyBnZXQgdGhlIEsgTWF0cml4XG4gICAgdGhpcy5fY3JlYXRlS19tYXRyaXgoRF9tYXRyaXgpO1xuXG4gICAgLy8gaW5pdGlhbCBFIE1hdHJpeFxuICAgIHRoaXMuX2NyZWF0ZUVfbWF0cml4KCk7XG5cbiAgICAvLyBjYWxjdWxhdGUgcG9zaXRpb25zXG4gICAgY29uc3QgdGhyZXNob2xkID0gMC4wMTtcbiAgICBjb25zdCBpbm5lclRocmVzaG9sZCA9IDE7XG4gICAgbGV0IGl0ZXJhdGlvbnMgPSAwO1xuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSBNYXRoLm1heChcbiAgICAgIDEwMDAsXG4gICAgICBNYXRoLm1pbigxMCAqIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGgsIDYwMDApXG4gICAgKTtcbiAgICBjb25zdCBtYXhJbm5lckl0ZXJhdGlvbnMgPSA1O1xuXG4gICAgbGV0IG1heEVuZXJneSA9IDFlOTtcbiAgICBsZXQgaGlnaEVfbm9kZUlkID0gMCxcbiAgICAgIGRFX2R4ID0gMCxcbiAgICAgIGRFX2R5ID0gMCxcbiAgICAgIGRlbHRhX20gPSAwLFxuICAgICAgc3ViSXRlcmF0aW9ucyA9IDA7XG5cbiAgICB3aGlsZSAobWF4RW5lcmd5ID4gdGhyZXNob2xkICYmIGl0ZXJhdGlvbnMgPCBtYXhJdGVyYXRpb25zKSB7XG4gICAgICBpdGVyYXRpb25zICs9IDE7XG4gICAgICBbaGlnaEVfbm9kZUlkLCBtYXhFbmVyZ3ksIGRFX2R4LCBkRV9keV0gPVxuICAgICAgICB0aGlzLl9nZXRIaWdoZXN0RW5lcmd5Tm9kZShpZ25vcmVDbHVzdGVycyk7XG4gICAgICBkZWx0YV9tID0gbWF4RW5lcmd5O1xuICAgICAgc3ViSXRlcmF0aW9ucyA9IDA7XG4gICAgICB3aGlsZSAoZGVsdGFfbSA+IGlubmVyVGhyZXNob2xkICYmIHN1Ykl0ZXJhdGlvbnMgPCBtYXhJbm5lckl0ZXJhdGlvbnMpIHtcbiAgICAgICAgc3ViSXRlcmF0aW9ucyArPSAxO1xuICAgICAgICB0aGlzLl9tb3ZlTm9kZShoaWdoRV9ub2RlSWQsIGRFX2R4LCBkRV9keSk7XG4gICAgICAgIFtkZWx0YV9tLCBkRV9keCwgZEVfZHldID0gdGhpcy5fZ2V0RW5lcmd5KGhpZ2hFX25vZGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgbm9kZSB3aXRoIHRoZSBoaWdoZXN0IGVuZXJneVxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZUNsdXN0ZXJzXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRIaWdoZXN0RW5lcmd5Tm9kZShpZ25vcmVDbHVzdGVycykge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgbGV0IG1heEVuZXJneSA9IDA7XG4gICAgbGV0IG1heEVuZXJneU5vZGVJZCA9IG5vZGVzQXJyYXlbMF07XG4gICAgbGV0IGRFX2R4X21heCA9IDAsXG4gICAgICBkRV9keV9tYXggPSAwO1xuXG4gICAgZm9yIChsZXQgbm9kZUlkeCA9IDA7IG5vZGVJZHggPCBub2Rlc0FycmF5Lmxlbmd0aDsgbm9kZUlkeCsrKSB7XG4gICAgICBjb25zdCBtID0gbm9kZXNBcnJheVtub2RlSWR4XTtcbiAgICAgIC8vIGJ5IG5vdCBldmFsdWF0aW5nIG5vZGVzIHdpdGggcHJlZGVmaW5lZCBwb3NpdGlvbnMgd2Ugc2hvdWxkIG9ubHkgbW92ZSBub2RlcyB0aGF0IGhhdmUgbm8gcG9zaXRpb25zLlxuICAgICAgaWYgKFxuICAgICAgICBub2Rlc1ttXS5wcmVkZWZpbmVkUG9zaXRpb24gIT09IHRydWUgfHxcbiAgICAgICAgKG5vZGVzW21dLmlzQ2x1c3RlciA9PT0gdHJ1ZSAmJiBpZ25vcmVDbHVzdGVycyA9PT0gdHJ1ZSkgfHxcbiAgICAgICAgbm9kZXNbbV0ub3B0aW9ucy5maXhlZC54ICE9PSB0cnVlIHx8XG4gICAgICAgIG5vZGVzW21dLm9wdGlvbnMuZml4ZWQueSAhPT0gdHJ1ZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IFtkZWx0YV9tLCBkRV9keCwgZEVfZHldID0gdGhpcy5fZ2V0RW5lcmd5KG0pO1xuICAgICAgICBpZiAobWF4RW5lcmd5IDwgZGVsdGFfbSkge1xuICAgICAgICAgIG1heEVuZXJneSA9IGRlbHRhX207XG4gICAgICAgICAgbWF4RW5lcmd5Tm9kZUlkID0gbTtcbiAgICAgICAgICBkRV9keF9tYXggPSBkRV9keDtcbiAgICAgICAgICBkRV9keV9tYXggPSBkRV9keTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbbWF4RW5lcmd5Tm9kZUlkLCBtYXhFbmVyZ3ksIGRFX2R4X21heCwgZEVfZHlfbWF4XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxjdWxhdGUgdGhlIGVuZXJneSBvZiBhIHNpbmdsZSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbVxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0RW5lcmd5KG0pIHtcbiAgICBjb25zdCBbZEVfZHgsIGRFX2R5XSA9IHRoaXMuRV9zdW1zW21dO1xuICAgIGNvbnN0IGRlbHRhX20gPSBNYXRoLnNxcnQoZEVfZHggKiogMiArIGRFX2R5ICoqIDIpO1xuICAgIHJldHVybiBbZGVsdGFfbSwgZEVfZHgsIGRFX2R5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtb3ZlIHRoZSBub2RlIGJhc2VkIG9uIGl0J3MgZW5lcmd5XG4gICAqIHRoZSBkeCBhbmQgZHkgYXJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgbGluZWFyIHN5c3RlbSBwcm9wb3NlZCBieSBLYW1hZGEgYW5kIEthd2FpXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkRV9keFxuICAgKiBAcGFyYW0ge251bWJlcn0gZEVfZHlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlTm9kZShtLCBkRV9keCwgZEVfZHkpIHtcbiAgICBjb25zdCBub2Rlc0FycmF5ID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGxldCBkMkVfZHgyID0gMDtcbiAgICBsZXQgZDJFX2R4ZHkgPSAwO1xuICAgIGxldCBkMkVfZHkyID0gMDtcblxuICAgIGNvbnN0IHhfbSA9IG5vZGVzW21dLng7XG4gICAgY29uc3QgeV9tID0gbm9kZXNbbV0ueTtcbiAgICBjb25zdCBrbSA9IHRoaXMuS19tYXRyaXhbbV07XG4gICAgY29uc3QgbG0gPSB0aGlzLkxfbWF0cml4W21dO1xuXG4gICAgZm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCBub2Rlc0FycmF5Lmxlbmd0aDsgaUlkeCsrKSB7XG4gICAgICBjb25zdCBpID0gbm9kZXNBcnJheVtpSWR4XTtcbiAgICAgIGlmIChpICE9PSBtKSB7XG4gICAgICAgIGNvbnN0IHhfaSA9IG5vZGVzW2ldLng7XG4gICAgICAgIGNvbnN0IHlfaSA9IG5vZGVzW2ldLnk7XG4gICAgICAgIGNvbnN0IGttYXQgPSBrbVtpXTtcbiAgICAgICAgY29uc3QgbG1hdCA9IGxtW2ldO1xuICAgICAgICBjb25zdCBkZW5vbWluYXRvciA9IDEuMCAvICgoeF9tIC0geF9pKSAqKiAyICsgKHlfbSAtIHlfaSkgKiogMikgKiogMS41O1xuICAgICAgICBkMkVfZHgyICs9IGttYXQgKiAoMSAtIGxtYXQgKiAoeV9tIC0geV9pKSAqKiAyICogZGVub21pbmF0b3IpO1xuICAgICAgICBkMkVfZHhkeSArPSBrbWF0ICogKGxtYXQgKiAoeF9tIC0geF9pKSAqICh5X20gLSB5X2kpICogZGVub21pbmF0b3IpO1xuICAgICAgICBkMkVfZHkyICs9IGttYXQgKiAoMSAtIGxtYXQgKiAoeF9tIC0geF9pKSAqKiAyICogZGVub21pbmF0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBtYWtlIHRoZSB2YXJpYWJsZSBuYW1lcyBlYXNpZXIgdG8gbWFrZSB0aGUgc29sdmluZyBvZiB0aGUgbGluZWFyIHN5c3RlbSBlYXNpZXIgdG8gcmVhZFxuICAgIGNvbnN0IEEgPSBkMkVfZHgyLFxuICAgICAgQiA9IGQyRV9keGR5LFxuICAgICAgQyA9IGRFX2R4LFxuICAgICAgRCA9IGQyRV9keTIsXG4gICAgICBFID0gZEVfZHk7XG5cbiAgICAvLyBzb2x2ZSB0aGUgbGluZWFyIHN5c3RlbSBmb3IgZHggYW5kIGR5XG4gICAgY29uc3QgZHkgPSAoQyAvIEEgKyBFIC8gQikgLyAoQiAvIEEgLSBEIC8gQik7XG4gICAgY29uc3QgZHggPSAtKEIgKiBkeSArIEMpIC8gQTtcblxuICAgIC8vIG1vdmUgdGhlIG5vZGVcbiAgICBub2Rlc1ttXS54ICs9IGR4O1xuICAgIG5vZGVzW21dLnkgKz0gZHk7XG5cbiAgICAvLyBSZWNhbGN1bGF0ZSBFX21hdHJpeCAoc2hvdWxkIGJlIGluY3JlbWVudGFsKVxuICAgIHRoaXMuX3VwZGF0ZUVfbWF0cml4KG0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgTCBtYXRyaXg6IGVkZ2UgbGVuZ3RoIHRpbWVzIHNob3J0ZXN0IHBhdGhcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IERfbWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlTF9tYXRyaXgoRF9tYXRyaXgpIHtcbiAgICBjb25zdCBub2Rlc0FycmF5ID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuICAgIGNvbnN0IGVkZ2VMZW5ndGggPSB0aGlzLnNwcmluZ0xlbmd0aDtcblxuICAgIHRoaXMuTF9tYXRyaXggPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuTF9tYXRyaXhbbm9kZXNBcnJheVtpXV0gPSB7fTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbm9kZXNBcnJheS5sZW5ndGg7IGorKykge1xuICAgICAgICB0aGlzLkxfbWF0cml4W25vZGVzQXJyYXlbaV1dW25vZGVzQXJyYXlbal1dID1cbiAgICAgICAgICBlZGdlTGVuZ3RoICogRF9tYXRyaXhbbm9kZXNBcnJheVtpXV1bbm9kZXNBcnJheVtqXV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgSyBtYXRyaXg6IHNwcmluZyBjb25zdGFudHMgdGltZXMgc2hvcnRlc3QgcGF0aFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gRF9tYXRyaXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVLX21hdHJpeChEX21hdHJpeCkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3QgZWRnZVN0cmVuZ3RoID0gdGhpcy5zcHJpbmdDb25zdGFudDtcblxuICAgIHRoaXMuS19tYXRyaXggPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuS19tYXRyaXhbbm9kZXNBcnJheVtpXV0gPSB7fTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbm9kZXNBcnJheS5sZW5ndGg7IGorKykge1xuICAgICAgICB0aGlzLktfbWF0cml4W25vZGVzQXJyYXlbaV1dW25vZGVzQXJyYXlbal1dID1cbiAgICAgICAgICBlZGdlU3RyZW5ndGggKiBEX21hdHJpeFtub2Rlc0FycmF5W2ldXVtub2Rlc0FycmF5W2pdXSAqKiAtMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIENyZWF0ZSBtYXRyaXggd2l0aCBhbGwgZW5lcmdpZXMgYmV0d2VlbiBub2Rlc1xuICAgKlxuICAgKiAgQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVFX21hdHJpeCgpIHtcbiAgICBjb25zdCBub2Rlc0FycmF5ID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIHRoaXMuRV9tYXRyaXggPSB7fTtcbiAgICB0aGlzLkVfc3VtcyA9IHt9O1xuICAgIGZvciAobGV0IG1JZHggPSAwOyBtSWR4IDwgbm9kZXNBcnJheS5sZW5ndGg7IG1JZHgrKykge1xuICAgICAgdGhpcy5FX21hdHJpeFtub2Rlc0FycmF5W21JZHhdXSA9IFtdO1xuICAgIH1cbiAgICBmb3IgKGxldCBtSWR4ID0gMDsgbUlkeCA8IG5vZGVzQXJyYXkubGVuZ3RoOyBtSWR4KyspIHtcbiAgICAgIGNvbnN0IG0gPSBub2Rlc0FycmF5W21JZHhdO1xuICAgICAgY29uc3QgeF9tID0gbm9kZXNbbV0ueDtcbiAgICAgIGNvbnN0IHlfbSA9IG5vZGVzW21dLnk7XG4gICAgICBsZXQgZEVfZHggPSAwO1xuICAgICAgbGV0IGRFX2R5ID0gMDtcbiAgICAgIGZvciAobGV0IGlJZHggPSBtSWR4OyBpSWR4IDwgbm9kZXNBcnJheS5sZW5ndGg7IGlJZHgrKykge1xuICAgICAgICBjb25zdCBpID0gbm9kZXNBcnJheVtpSWR4XTtcbiAgICAgICAgaWYgKGkgIT09IG0pIHtcbiAgICAgICAgICBjb25zdCB4X2kgPSBub2Rlc1tpXS54O1xuICAgICAgICAgIGNvbnN0IHlfaSA9IG5vZGVzW2ldLnk7XG4gICAgICAgICAgY29uc3QgZGVub21pbmF0b3IgPVxuICAgICAgICAgICAgMS4wIC8gTWF0aC5zcXJ0KCh4X20gLSB4X2kpICoqIDIgKyAoeV9tIC0geV9pKSAqKiAyKTtcbiAgICAgICAgICB0aGlzLkVfbWF0cml4W21dW2lJZHhdID0gW1xuICAgICAgICAgICAgdGhpcy5LX21hdHJpeFttXVtpXSAqXG4gICAgICAgICAgICAgICh4X20gLSB4X2kgLSB0aGlzLkxfbWF0cml4W21dW2ldICogKHhfbSAtIHhfaSkgKiBkZW5vbWluYXRvciksXG4gICAgICAgICAgICB0aGlzLktfbWF0cml4W21dW2ldICpcbiAgICAgICAgICAgICAgKHlfbSAtIHlfaSAtIHRoaXMuTF9tYXRyaXhbbV1baV0gKiAoeV9tIC0geV9pKSAqIGRlbm9taW5hdG9yKSxcbiAgICAgICAgICBdO1xuICAgICAgICAgIHRoaXMuRV9tYXRyaXhbaV1bbUlkeF0gPSB0aGlzLkVfbWF0cml4W21dW2lJZHhdO1xuICAgICAgICAgIGRFX2R4ICs9IHRoaXMuRV9tYXRyaXhbbV1baUlkeF1bMF07XG4gICAgICAgICAgZEVfZHkgKz0gdGhpcy5FX21hdHJpeFttXVtpSWR4XVsxXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy9TdG9yZSBzdW1cbiAgICAgIHRoaXMuRV9zdW1zW21dID0gW2RFX2R4LCBkRV9keV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBtZXRob2QsIGp1c3QgZG9pbmcgc2luZ2xlIGNvbHVtbiAocm93cyBhcmUgYXV0by11cGRhdGVkKSAodXBkYXRlIGFsbCBzdW1zKVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZUVfbWF0cml4KG0pIHtcbiAgICBjb25zdCBub2Rlc0FycmF5ID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IGNvbG0gPSB0aGlzLkVfbWF0cml4W21dO1xuICAgIGNvbnN0IGtjb2xtID0gdGhpcy5LX21hdHJpeFttXTtcbiAgICBjb25zdCBsY29sbSA9IHRoaXMuTF9tYXRyaXhbbV07XG4gICAgY29uc3QgeF9tID0gbm9kZXNbbV0ueDtcbiAgICBjb25zdCB5X20gPSBub2Rlc1ttXS55O1xuICAgIGxldCBkRV9keCA9IDA7XG4gICAgbGV0IGRFX2R5ID0gMDtcbiAgICBmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpSWR4KyspIHtcbiAgICAgIGNvbnN0IGkgPSBub2Rlc0FycmF5W2lJZHhdO1xuICAgICAgaWYgKGkgIT09IG0pIHtcbiAgICAgICAgLy9LZWVwIG9sZCBlbmVyZ3kgdmFsdWUgZm9yIHN1bSBtb2RpZmljYXRpb24gYmVsb3dcbiAgICAgICAgY29uc3QgY2VsbCA9IGNvbG1baUlkeF07XG4gICAgICAgIGNvbnN0IG9sZER4ID0gY2VsbFswXTtcbiAgICAgICAgY29uc3Qgb2xkRHkgPSBjZWxsWzFdO1xuXG4gICAgICAgIC8vQ2FsYyBuZXcgZW5lcmd5OlxuICAgICAgICBjb25zdCB4X2kgPSBub2Rlc1tpXS54O1xuICAgICAgICBjb25zdCB5X2kgPSBub2Rlc1tpXS55O1xuICAgICAgICBjb25zdCBkZW5vbWluYXRvciA9XG4gICAgICAgICAgMS4wIC8gTWF0aC5zcXJ0KCh4X20gLSB4X2kpICoqIDIgKyAoeV9tIC0geV9pKSAqKiAyKTtcbiAgICAgICAgY29uc3QgZHggPVxuICAgICAgICAgIGtjb2xtW2ldICogKHhfbSAtIHhfaSAtIGxjb2xtW2ldICogKHhfbSAtIHhfaSkgKiBkZW5vbWluYXRvcik7XG4gICAgICAgIGNvbnN0IGR5ID1cbiAgICAgICAgICBrY29sbVtpXSAqICh5X20gLSB5X2kgLSBsY29sbVtpXSAqICh5X20gLSB5X2kpICogZGVub21pbmF0b3IpO1xuICAgICAgICBjb2xtW2lJZHhdID0gW2R4LCBkeV07XG4gICAgICAgIGRFX2R4ICs9IGR4O1xuICAgICAgICBkRV9keSArPSBkeTtcblxuICAgICAgICAvL2FkZCBuZXcgZW5lcmd5IHRvIHN1bSBvZiBlYWNoIGNvbHVtblxuICAgICAgICBjb25zdCBzdW0gPSB0aGlzLkVfc3Vtc1tpXTtcbiAgICAgICAgc3VtWzBdICs9IGR4IC0gb2xkRHg7XG4gICAgICAgIHN1bVsxXSArPSBkeSAtIG9sZER5O1xuICAgICAgfVxuICAgIH1cbiAgICAvL1N0b3JlIHN1bSBhdCAtMSBpbmRleFxuICAgIHRoaXMuRV9zdW1zW21dID0gW2RFX2R4LCBkRV9keV07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgS2FtYWRhS2F3YWk7XG4iLCAiLy8gTG9hZCBjdXN0b20gc2hhcGVzIGludG8gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXG5pbXBvcnQgXCIuL3NoYXBlc1wiO1xuXG5pbXBvcnQgXCJ2aXMtdXRpbC9lc25leHQvc3R5bGVzL2FjdGl2YXRvci5jc3NcIjtcbmltcG9ydCBcInZpcy11dGlsL2VzbmV4dC9zdHlsZXMvYm9vdHN0cmFwLmNzc1wiO1xuaW1wb3J0IFwidmlzLXV0aWwvZXNuZXh0L3N0eWxlcy9jb2xvci1waWNrZXIuY3NzXCI7XG5pbXBvcnQgXCJ2aXMtdXRpbC9lc25leHQvc3R5bGVzL2NvbmZpZ3VyYXRvci5jc3NcIjtcbmltcG9ydCBcInZpcy11dGlsL2VzbmV4dC9zdHlsZXMvcG9wdXAuY3NzXCI7XG5cbmltcG9ydCBFbWl0dGVyIGZyb20gXCJjb21wb25lbnQtZW1pdHRlclwiO1xuaW1wb3J0IHtcbiAgQWN0aXZhdG9yLFxuICBDb25maWd1cmF0b3IsXG4gIFZBTElEQVRPUl9QUklOVF9TVFlMRSxcbiAgVmFsaWRhdG9yLFxuICBkZWVwRXh0ZW5kLFxuICByZWN1cnNpdmVET01EZWxldGUsXG4gIHNlbGVjdGl2ZURlZXBFeHRlbmQsXG59IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCB7IERPVFRvR3JhcGggfSBmcm9tIFwiLi9kb3RwYXJzZXJcIjtcbmltcG9ydCB7IHBhcnNlR2VwaGkgfSBmcm9tIFwiLi9nZXBoaVBhcnNlclwiO1xuaW1wb3J0ICogYXMgbG9jYWxlcyBmcm9tIFwiLi9sb2NhbGVzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVMYW5ndWFnZUNvZGUgfSBmcm9tIFwiLi9sb2NhbGUtdXRpbHNcIjtcblxuaW1wb3J0IEltYWdlcyBmcm9tIFwiLi9JbWFnZXNcIjtcbmltcG9ydCB7IEdyb3VwcyB9IGZyb20gXCIuL21vZHVsZXMvR3JvdXBzXCI7XG5pbXBvcnQgTm9kZXNIYW5kbGVyIGZyb20gXCIuL21vZHVsZXMvTm9kZXNIYW5kbGVyXCI7XG5pbXBvcnQgRWRnZXNIYW5kbGVyIGZyb20gXCIuL21vZHVsZXMvRWRnZXNIYW5kbGVyXCI7XG5pbXBvcnQgUGh5c2ljc0VuZ2luZSBmcm9tIFwiLi9tb2R1bGVzL1BoeXNpY3NFbmdpbmVcIjtcbmltcG9ydCBDbHVzdGVyRW5naW5lIGZyb20gXCIuL21vZHVsZXMvQ2x1c3RlcmluZ1wiO1xuaW1wb3J0IENhbnZhc1JlbmRlcmVyIGZyb20gXCIuL21vZHVsZXMvQ2FudmFzUmVuZGVyZXJcIjtcbmltcG9ydCBDYW52YXMgZnJvbSBcIi4vbW9kdWxlcy9DYW52YXNcIjtcbmltcG9ydCBWaWV3IGZyb20gXCIuL21vZHVsZXMvVmlld1wiO1xuaW1wb3J0IEludGVyYWN0aW9uSGFuZGxlciBmcm9tIFwiLi9tb2R1bGVzL0ludGVyYWN0aW9uSGFuZGxlclwiO1xuaW1wb3J0IFNlbGVjdGlvbkhhbmRsZXIgZnJvbSBcIi4vbW9kdWxlcy9TZWxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgTGF5b3V0RW5naW5lIGZyb20gXCIuL21vZHVsZXMvTGF5b3V0RW5naW5lXCI7XG5pbXBvcnQgTWFuaXB1bGF0aW9uU3lzdGVtIGZyb20gXCIuL21vZHVsZXMvTWFuaXB1bGF0aW9uU3lzdGVtXCI7XG5pbXBvcnQge1xuICBhbGxPcHRpb25zLFxuICBjb25maWd1cmVPcHRpb25zLFxuICBjb25maWd1cmF0b3JIaWRlT3B0aW9uLFxufSBmcm9tIFwiLi9vcHRpb25zXCI7XG5pbXBvcnQgS2FtYWRhS2F3YWkgZnJvbSBcIi4vbW9kdWxlcy9LYW1hZGFLYXdhaS5qc1wiO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldHdvcmsgdmlzdWFsaXphdGlvbiwgZGlzcGxheWluZyBub2RlcyBhbmQgZWRnZXMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXIgICBUaGUgRE9NIGVsZW1lbnQgaW4gd2hpY2ggdGhlIE5ldHdvcmsgd2lsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgY3JlYXRlZC4gTm9ybWFsbHkgYSBkaXYgZWxlbWVudC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhICAgICAgICAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgcGFyYW1ldGVyc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QXJyYXl9IG5vZGVzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtBcnJheX0gZWRnZXNcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICAgICAgT3B0aW9uc1xuICogQGNsYXNzIE5ldHdvcmtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE5ldHdvcmsoY29udGFpbmVyLCBkYXRhLCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBOZXR3b3JrKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvclwiKTtcbiAgfVxuXG4gIC8vIHNldCBjb25zdGFudCB2YWx1ZXNcbiAgdGhpcy5vcHRpb25zID0ge307XG4gIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgbG9jYWxlOiBcImVuXCIsXG4gICAgbG9jYWxlczogbG9jYWxlcyxcbiAgICBjbGlja1RvVXNlOiBmYWxzZSxcbiAgfTtcbiAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gIC8qKlxuICAgKiBDb250YWluZXJzIGZvciBub2RlcyBhbmQgZWRnZXMuXG4gICAqXG4gICAqICdlZGdlcycgYW5kICdub2RlcycgY29udGFpbiB0aGUgZnVsbCBkZWZpbml0aW9ucyBvZiBhbGwgdGhlIG5ldHdvcmsgZWxlbWVudHMuXG4gICAqICdub2RlSW5kaWNlcycgYW5kICdlZGdlSW5kaWNlcycgY29udGFpbiB0aGUgaWQncyBvZiB0aGUgYWN0aXZlIGVsZW1lbnRzLlxuICAgKlxuICAgKiBUaGUgZGlzdGluY3Rpb24gaXMgaW1wb3J0YW50LCBiZWNhdXNlIGEgZGVmaW5lZCBub2RlIG5lZWQgbm90IGJlIGFjdGl2ZSwgaS5lLlxuICAgKiB2aXNpYmxlIG9uIHRoZSBjYW52YXMuIFRoaXMgaGFwcGVucyBpbiBwYXJ0aWN1bGFyIHdoZW4gY2x1c3RlcnMgYXJlIGRlZmluZWQsIGluXG4gICAqIHRoYXQgY2FzZSB0aGVyZSB3aWxsIGJlIG5vZGVzIGFuZCBlZGdlcyBub3QgZGlzcGxheWVkLlxuICAgKiBUaGUgYm90dG9tIGxpbmUgaXMgdGhhdCBhbGwgY29kZSB3aXRoIGFjdGlvbnMgcmVsYXRlZCB0byB2aXNpYmlsaXR5LCAqbXVzdCogdXNlXG4gICAqICdub2RlSW5kaWNlcycgYW5kICdlZGdlSW5kaWNlcycsIG5vdCAnbm9kZXMnIGFuZCAnZWRnZXMnIGRpcmVjdGx5LlxuICAgKi9cbiAgdGhpcy5ib2R5ID0ge1xuICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuXG4gICAgLy8gU2VlIGNvbW1lbnQgYWJvdmUgZm9yIGZvbGxvd2luZyBmaWVsZHNcbiAgICBub2Rlczoge30sXG4gICAgbm9kZUluZGljZXM6IFtdLFxuICAgIGVkZ2VzOiB7fSxcbiAgICBlZGdlSW5kaWNlczogW10sXG5cbiAgICBlbWl0dGVyOiB7XG4gICAgICBvbjogdGhpcy5vbi5iaW5kKHRoaXMpLFxuICAgICAgb2ZmOiB0aGlzLm9mZi5iaW5kKHRoaXMpLFxuICAgICAgZW1pdDogdGhpcy5lbWl0LmJpbmQodGhpcyksXG4gICAgICBvbmNlOiB0aGlzLm9uY2UuYmluZCh0aGlzKSxcbiAgICB9LFxuICAgIGV2ZW50TGlzdGVuZXJzOiB7XG4gICAgICBvblRhcDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvblRvdWNoOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uRG91YmxlVGFwOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uSG9sZDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvbkRyYWdTdGFydDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvbkRyYWc6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25EcmFnRW5kOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uTW91c2VXaGVlbDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvblBpbmNoOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uTW91c2VNb3ZlOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uUmVsZWFzZTogZnVuY3Rpb24gKCkge30sXG4gICAgICBvbkNvbnRleHQ6IGZ1bmN0aW9uICgpIHt9LFxuICAgIH0sXG4gICAgZGF0YToge1xuICAgICAgbm9kZXM6IG51bGwsIC8vIEEgRGF0YVNldCBvciBEYXRhVmlld1xuICAgICAgZWRnZXM6IG51bGwsIC8vIEEgRGF0YVNldCBvciBEYXRhVmlld1xuICAgIH0sXG4gICAgZnVuY3Rpb25zOiB7XG4gICAgICBjcmVhdGVOb2RlOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIGNyZWF0ZUVkZ2U6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgZ2V0UG9pbnRlcjogZnVuY3Rpb24gKCkge30sXG4gICAgfSxcbiAgICBtb2R1bGVzOiB7fSxcbiAgICB2aWV3OiB7XG4gICAgICBzY2FsZTogMSxcbiAgICAgIHRyYW5zbGF0aW9uOiB7IHg6IDAsIHk6IDAgfSxcbiAgICB9LFxuICAgIHNlbGVjdGlvbkJveDoge1xuICAgICAgc2hvdzogZmFsc2UsXG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICBzdGFydDogeyB4OiAwLCB5OiAwIH0sXG4gICAgICAgIGVuZDogeyB4OiAwLCB5OiAwIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgLy8gYmluZCB0aGUgZXZlbnQgbGlzdGVuZXJzXG4gIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG5cbiAgLy8gc2V0dGluZyB1cCBhbGwgbW9kdWxlc1xuICB0aGlzLmltYWdlcyA9IG5ldyBJbWFnZXMoKCkgPT4gdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpKTsgLy8gb2JqZWN0IHdpdGggaW1hZ2VzXG4gIHRoaXMuZ3JvdXBzID0gbmV3IEdyb3VwcygpOyAvLyBvYmplY3Qgd2l0aCBncm91cHNcbiAgdGhpcy5jYW52YXMgPSBuZXcgQ2FudmFzKHRoaXMuYm9keSk7IC8vIERPTSBoYW5kbGVyXG4gIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IG5ldyBTZWxlY3Rpb25IYW5kbGVyKHRoaXMuYm9keSwgdGhpcy5jYW52YXMpOyAvLyBTZWxlY3Rpb24gaGFuZGxlclxuICB0aGlzLmludGVyYWN0aW9uSGFuZGxlciA9IG5ldyBJbnRlcmFjdGlvbkhhbmRsZXIoXG4gICAgdGhpcy5ib2R5LFxuICAgIHRoaXMuY2FudmFzLFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlclxuICApOyAvLyBJbnRlcmFjdGlvbiBoYW5kbGVyIGhhbmRsZXMgYWxsIHRoZSBoYW1tZXIgYmluZGluZ3MgKHRoYXQgYXJlIGJvdW5kIGJ5IGNhbnZhcyksIGtleVxuICB0aGlzLnZpZXcgPSBuZXcgVmlldyh0aGlzLmJvZHksIHRoaXMuY2FudmFzKTsgLy8gY2FtZXJhIGhhbmRsZXIsIGRvZXMgYW5pbWF0aW9ucyBhbmQgem9vbXNcbiAgdGhpcy5yZW5kZXJlciA9IG5ldyBDYW52YXNSZW5kZXJlcih0aGlzLmJvZHksIHRoaXMuY2FudmFzKTsgLy8gcmVuZGVyZXIsIHN0YXJ0cyByZW5kZXJsb29wLCBoYXMgZXZlbnRzIHRoYXQgbW9kdWxlcyBjYW4gaG9vayBpbnRvXG4gIHRoaXMucGh5c2ljcyA9IG5ldyBQaHlzaWNzRW5naW5lKHRoaXMuYm9keSk7IC8vIHBoeXNpY3MgZW5naW5lLCBkb2VzIGFsbCB0aGUgc2ltdWxhdGlvbnNcbiAgdGhpcy5sYXlvdXRFbmdpbmUgPSBuZXcgTGF5b3V0RW5naW5lKHRoaXMuYm9keSk7IC8vIGxheW91dCBlbmdpbmUgZm9yIGluaXRhbCBsYXlvdXQgYW5kIGhpZXJhcmNoaWNhbCBsYXlvdXRcbiAgdGhpcy5jbHVzdGVyaW5nID0gbmV3IENsdXN0ZXJFbmdpbmUodGhpcy5ib2R5KTsgLy8gY2x1c3RlcmluZyBhcGlcbiAgdGhpcy5tYW5pcHVsYXRpb24gPSBuZXcgTWFuaXB1bGF0aW9uU3lzdGVtKFxuICAgIHRoaXMuYm9keSxcbiAgICB0aGlzLmNhbnZhcyxcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXJcbiAgKTsgLy8gZGF0YSBtYW5pcHVsYXRpb24gc3lzdGVtXG5cbiAgdGhpcy5ub2Rlc0hhbmRsZXIgPSBuZXcgTm9kZXNIYW5kbGVyKFxuICAgIHRoaXMuYm9keSxcbiAgICB0aGlzLmltYWdlcyxcbiAgICB0aGlzLmdyb3VwcyxcbiAgICB0aGlzLmxheW91dEVuZ2luZVxuICApOyAvLyBIYW5kbGUgYWRkaW5nLCBkZWxldGluZyBhbmQgdXBkYXRpbmcgb2Ygbm9kZXMgYXMgd2VsbCBhcyBnbG9iYWwgb3B0aW9uc1xuICB0aGlzLmVkZ2VzSGFuZGxlciA9IG5ldyBFZGdlc0hhbmRsZXIodGhpcy5ib2R5LCB0aGlzLmltYWdlcywgdGhpcy5ncm91cHMpOyAvLyBIYW5kbGUgYWRkaW5nLCBkZWxldGluZyBhbmQgdXBkYXRpbmcgb2YgZWRnZXMgYXMgd2VsbCBhcyBnbG9iYWwgb3B0aW9uc1xuXG4gIHRoaXMuYm9keS5tb2R1bGVzW1wia2FtYWRhS2F3YWlcIl0gPSBuZXcgS2FtYWRhS2F3YWkodGhpcy5ib2R5LCAxNTAsIDAuMDUpOyAvLyBMYXlvdXRpbmcgYWxnb3JpdGhtLlxuICB0aGlzLmJvZHkubW9kdWxlc1tcImNsdXN0ZXJpbmdcIl0gPSB0aGlzLmNsdXN0ZXJpbmc7XG5cbiAgLy8gY3JlYXRlIHRoZSBET00gZWxlbWVudHNcbiAgdGhpcy5jYW52YXMuX2NyZWF0ZSgpO1xuXG4gIC8vIGFwcGx5IG9wdGlvbnNcbiAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gIC8vIGxvYWQgZGF0YSAodGhlIGRpc2FibGUgc3RhcnQgdmFyaWFibGUgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgZW5hYmxlZCBjbHVzdGVyaW5nKVxuICB0aGlzLnNldERhdGEoZGF0YSk7XG59XG5cbi8vIEV4dGVuZCBOZXR3b3JrIHdpdGggYW4gRW1pdHRlciBtaXhpblxuRW1pdHRlcihOZXR3b3JrLnByb3RvdHlwZSk7XG5cbi8qKlxuICogU2V0IG9wdGlvbnNcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICovXG5OZXR3b3JrLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IG51bGwpIHtcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkOyAvLyBUaGlzIGVuc3VyZXMgdGhhdCBvcHRpb25zIGhhbmRsaW5nIGRvZXNuJ3QgY3Jhc2ggaW4gdGhlIGhhbmRsaW5nXG4gIH1cblxuICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZXJyb3JGb3VuZCA9IFZhbGlkYXRvci52YWxpZGF0ZShvcHRpb25zLCBhbGxPcHRpb25zKTtcbiAgICBpZiAoZXJyb3JGb3VuZCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCIlY0Vycm9ycyBoYXZlIGJlZW4gZm91bmQgaW4gdGhlIHN1cHBsaWVkIG9wdGlvbnMgb2JqZWN0LlwiLFxuICAgICAgICBWQUxJREFUT1JfUFJJTlRfU1RZTEVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gY29weSB0aGUgZ2xvYmFsIGZpZWxkcyBvdmVyXG4gICAgY29uc3QgZmllbGRzID0gW1wibG9jYWxlXCIsIFwibG9jYWxlc1wiLCBcImNsaWNrVG9Vc2VcIl07XG4gICAgc2VsZWN0aXZlRGVlcEV4dGVuZChmaWVsZHMsIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAvLyBub3JtYWxpemUgdGhlIGxvY2FsZSBvciB1c2UgRW5nbGlzaFxuICAgIGlmIChvcHRpb25zLmxvY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmxvY2FsZSA9IG5vcm1hbGl6ZUxhbmd1YWdlQ29kZShcbiAgICAgICAgb3B0aW9ucy5sb2NhbGVzIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzLFxuICAgICAgICBvcHRpb25zLmxvY2FsZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaGllcmFyY2hpY2FsIHN5c3RlbSBjYW4gYWRhcHQgdGhlIGVkZ2VzIGFuZCB0aGUgcGh5c2ljcyB0byBpdCdzIG93biBvcHRpb25zIGJlY2F1c2Ugbm90IGFsbCBjb21iaW5hdGlvbnMgd29yayB3aXRoIHRoZSBoaWVyYXJpY2hpY2FsIHN5c3RlbS5cbiAgICBvcHRpb25zID0gdGhpcy5sYXlvdXRFbmdpbmUuc2V0T3B0aW9ucyhvcHRpb25zLmxheW91dCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLmNhbnZhcy5zZXRPcHRpb25zKG9wdGlvbnMpOyAvLyBvcHRpb25zIGZvciBjYW52YXMgYXJlIGluIGdsb2JhbHNcblxuICAgIC8vIHBhc3MgdGhlIG9wdGlvbnMgdG8gdGhlIG1vZHVsZXNcbiAgICB0aGlzLmdyb3Vwcy5zZXRPcHRpb25zKG9wdGlvbnMuZ3JvdXBzKTtcbiAgICB0aGlzLm5vZGVzSGFuZGxlci5zZXRPcHRpb25zKG9wdGlvbnMubm9kZXMpO1xuICAgIHRoaXMuZWRnZXNIYW5kbGVyLnNldE9wdGlvbnMob3B0aW9ucy5lZGdlcyk7XG4gICAgdGhpcy5waHlzaWNzLnNldE9wdGlvbnMob3B0aW9ucy5waHlzaWNzKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbi5zZXRPcHRpb25zKG9wdGlvbnMubWFuaXB1bGF0aW9uLCBvcHRpb25zLCB0aGlzLm9wdGlvbnMpOyAvLyBtYW5pcHVsYXRpb24gdXNlcyB0aGUgbG9jYWxlcyBpbiB0aGUgZ2xvYmFsc1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIuc2V0T3B0aW9ucyhvcHRpb25zLmludGVyYWN0aW9uKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9wdGlvbnMob3B0aW9ucy5pbnRlcmFjdGlvbik7IC8vIG9wdGlvbnMgZm9yIHJlbmRlcmluZyBhcmUgaW4gaW50ZXJhY3Rpb25cbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2V0T3B0aW9ucyhvcHRpb25zLmludGVyYWN0aW9uKTsgLy8gb3B0aW9ucyBmb3Igc2VsZWN0aW9uIGFyZSBpbiBpbnRlcmFjdGlvblxuXG4gICAgLy8gcmVsb2FkIHRoZSBzZXR0aW5ncyBvZiB0aGUgbm9kZXMgdG8gYXBwbHkgY2hhbmdlcyBpbiBncm91cHMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgYnkgcG9pbnRlci5cbiAgICBpZiAob3B0aW9ucy5ncm91cHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInJlZnJlc2hOb2Rlc1wiKTtcbiAgICB9XG4gICAgLy8gdGhlc2UgdHdvIGRvIG5vdCBoYXZlIG9wdGlvbnMgYXQgdGhlIG1vbWVudCwgaGVyZSBmb3IgY29tcGxldGVuZXNzXG4gICAgLy90aGlzLnZpZXcuc2V0T3B0aW9ucyhvcHRpb25zLnZpZXcpO1xuICAgIC8vdGhpcy5jbHVzdGVyaW5nLnNldE9wdGlvbnMob3B0aW9ucy5jbHVzdGVyaW5nKTtcblxuICAgIGlmIChcImNvbmZpZ3VyZVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0b3IpIHtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0b3IgPSBuZXcgQ29uZmlndXJhdG9yKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5ib2R5LmNvbnRhaW5lcixcbiAgICAgICAgICBjb25maWd1cmVPcHRpb25zLFxuICAgICAgICAgIHRoaXMuY2FudmFzLnBpeGVsUmF0aW8sXG4gICAgICAgICAgY29uZmlndXJhdG9ySGlkZU9wdGlvblxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRvci5zZXRPcHRpb25zKG9wdGlvbnMuY29uZmlndXJlKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgZW5hYmxlZCwgY29weSBhbGwgb3B0aW9ucyBhbmQgcHV0IHRoZW0gaW50byB0aGUgY29uZmlnIHN5c3RlbVxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRvciAmJiB0aGlzLmNvbmZpZ3VyYXRvci5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IG5ldHdvcmtPcHRpb25zID0ge1xuICAgICAgICBub2Rlczoge30sXG4gICAgICAgIGVkZ2VzOiB7fSxcbiAgICAgICAgbGF5b3V0OiB7fSxcbiAgICAgICAgaW50ZXJhY3Rpb246IHt9LFxuICAgICAgICBtYW5pcHVsYXRpb246IHt9LFxuICAgICAgICBwaHlzaWNzOiB7fSxcbiAgICAgICAgZ2xvYmFsOiB7fSxcbiAgICAgIH07XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLm5vZGVzLCB0aGlzLm5vZGVzSGFuZGxlci5vcHRpb25zKTtcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuZWRnZXMsIHRoaXMuZWRnZXNIYW5kbGVyLm9wdGlvbnMpO1xuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5sYXlvdXQsIHRoaXMubGF5b3V0RW5naW5lLm9wdGlvbnMpO1xuICAgICAgLy8gbG9hZCB0aGUgc2VsZWN0aW9uSGFuZGxlciBhbmQgcmVuZGVyIGRlZmF1bHQgb3B0aW9ucyBpbiB0byB0aGUgaW50ZXJhY3Rpb24gZ3JvdXBcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuaW50ZXJhY3Rpb24sIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5vcHRpb25zKTtcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuaW50ZXJhY3Rpb24sIHRoaXMucmVuZGVyZXIub3B0aW9ucyk7XG5cbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuaW50ZXJhY3Rpb24sIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyLm9wdGlvbnMpO1xuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5tYW5pcHVsYXRpb24sIHRoaXMubWFuaXB1bGF0aW9uLm9wdGlvbnMpO1xuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5waHlzaWNzLCB0aGlzLnBoeXNpY3Mub3B0aW9ucyk7XG5cbiAgICAgIC8vIGxvYWQgZ2xvYmFscyBpbnRvIHRoZSBnbG9iYWwgb2JqZWN0XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLmdsb2JhbCwgdGhpcy5jYW52YXMub3B0aW9ucyk7XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLmdsb2JhbCwgdGhpcy5vcHRpb25zKTtcblxuICAgICAgdGhpcy5jb25maWd1cmF0b3Iuc2V0TW9kdWxlT3B0aW9ucyhuZXR3b3JrT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIG5ldHdvcmsgZ2xvYmFsIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucy5jbGlja1RvVXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLmNsaWNrVG9Vc2UgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2YXRvciA9IG5ldyBBY3RpdmF0b3IodGhpcy5jYW52YXMuZnJhbWUpO1xuICAgICAgICAgIHRoaXMuYWN0aXZhdG9yLm9uKFwiY2hhbmdlXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJhY3RpdmF0ZVwiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZhdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2YXRvci5kZXN0cm95KCk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZhdG9yO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJhY3RpdmF0ZVwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImFjdGl2YXRlXCIpO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLnNldFNpemUoKTtcbiAgICAvLyBzdGFydCB0aGUgcGh5c2ljcyBzaW11bGF0aW9uLiBDYW4gYmUgc2FmZWx5IGNhbGxlZCBtdWx0aXBsZSB0aW1lcy5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwic3RhcnRTaW11bGF0aW9uXCIpO1xuICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgdmlzaWJsZSBub2RlcyBhbmQgZWRnZXMgbGlzdCB3aXRoIHRoZSBtb3N0IHJlY2VudCBub2RlIHN0YXRlLlxuICpcbiAqIFZpc2libGUgbm9kZXMgYXJlIHN0b3JlZCBpbiB0aGlzLmJvZHkubm9kZUluZGljZXMuXG4gKiBWaXNpYmxlIGVkZ2VzIGFyZSBzdG9yZWQgaW4gdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLlxuICogQSBub2RlIG9yIGVkZ2VzIGlzIHZpc2libGUgaWYgaXQgaXMgbm90IGhpZGRlbiBvciBjbHVzdGVyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTmV0d29yay5wcm90b3R5cGUuX3VwZGF0ZVZpc2libGVJbmRpY2VzID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gIHRoaXMuYm9keS5ub2RlSW5kaWNlcyA9IFtdO1xuICB0aGlzLmJvZHkuZWRnZUluZGljZXMgPSBbXTtcblxuICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBub2Rlcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuY2x1c3RlcmluZy5faXNDbHVzdGVyZWROb2RlKG5vZGVJZCkgJiZcbiAgICAgICAgbm9kZXNbbm9kZUlkXS5vcHRpb25zLmhpZGRlbiA9PT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmJvZHkubm9kZUluZGljZXMucHVzaChub2Rlc1tub2RlSWRdLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGVkZ2VJZCBpbiBlZGdlcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tlZGdlSWRdO1xuXG4gICAgICAvLyBJdCBjYW4gaGFwcGVuIHRoYXQgdGhpcyBpcyBleGVjdXRlZCAqYWZ0ZXIqIGEgbm9kZSBlZGdlIGhhcyBiZWVuIHJlbW92ZWQsXG4gICAgICAvLyBidXQgKmJlZm9yZSogdGhlIGVkZ2UgaXRzZWxmIGhhcyBiZWVuIHJlbW92ZWQuIFRha2luZyB0aGlzIGludG8gYWNjb3VudC5cbiAgICAgIGNvbnN0IGZyb21Ob2RlID0gbm9kZXNbZWRnZS5mcm9tSWRdO1xuICAgICAgY29uc3QgdG9Ob2RlID0gbm9kZXNbZWRnZS50b0lkXTtcbiAgICAgIGNvbnN0IGVkZ2VOb2Rlc1ByZXNlbnQgPSBmcm9tTm9kZSAhPT0gdW5kZWZpbmVkICYmIHRvTm9kZSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBpc1Zpc2libGUgPVxuICAgICAgICAhdGhpcy5jbHVzdGVyaW5nLl9pc0NsdXN0ZXJlZEVkZ2UoZWRnZUlkKSAmJlxuICAgICAgICBlZGdlLm9wdGlvbnMuaGlkZGVuID09PSBmYWxzZSAmJlxuICAgICAgICBlZGdlTm9kZXNQcmVzZW50ICYmXG4gICAgICAgIGZyb21Ob2RlLm9wdGlvbnMuaGlkZGVuID09PSBmYWxzZSAmJiAvLyBBbHNvIGhpZGRlbiBpZiBhbnkgb2YgaXRzIGNvbm5lY3Rpbmcgbm9kZXMgYXJlIGhpZGRlblxuICAgICAgICB0b05vZGUub3B0aW9ucy5oaWRkZW4gPT09IGZhbHNlOyAvLyBpZGVtXG5cbiAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLnB1c2goZWRnZS5pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEJpbmQgYWxsIGV2ZW50c1xuICovXG5OZXR3b3JrLnByb3RvdHlwZS5iaW5kRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRoaXMgZXZlbnQgd2lsbCB0cmlnZ2VyIGEgcmVidWlsZGluZyBvZiB0aGUgY2FjaGUgZXZlcnl0aGluZy5cbiAgLy8gVXNlZCB3aGVuIG5vZGVzIG9yIGVkZ2VzIGhhdmUgYmVlbiBhZGRlZCBvciByZW1vdmVkLlxuICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9kYXRhQ2hhbmdlZFwiLCAoKSA9PiB7XG4gICAgdGhpcy5lZGdlc0hhbmRsZXIuX3VwZGF0ZVN0YXRlKCk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhVXBkYXRlZFwiKTtcbiAgfSk7XG5cbiAgLy8gdGhpcyBpcyBjYWxsZWQgd2hlbiBvcHRpb25zIG9mIEVYSVNUSU5HIG5vZGVzIG9yIGVkZ2VzIGhhdmUgY2hhbmdlZC5cbiAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YVVwZGF0ZWRcIiwgKCkgPT4ge1xuICAgIC8vIE9yZGVyIGltcG9ydGFudCBpbiBmb2xsb3dpbmcgYmxvY2tcbiAgICB0aGlzLmNsdXN0ZXJpbmcuX3VwZGF0ZVN0YXRlKCk7XG4gICAgdGhpcy5fdXBkYXRlVmlzaWJsZUluZGljZXMoKTtcblxuICAgIHRoaXMuX3VwZGF0ZVZhbHVlUmFuZ2UodGhpcy5ib2R5Lm5vZGVzKTtcbiAgICB0aGlzLl91cGRhdGVWYWx1ZVJhbmdlKHRoaXMuYm9keS5lZGdlcyk7XG4gICAgLy8gc3RhcnQgc2ltdWxhdGlvbiAoY2FuIGJlIGNhbGxlZCBzYWZlbHksIGV2ZW4gaWYgYWxyZWFkeSBydW5uaW5nKVxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICB9KTtcbn07XG5cbi8qKlxuICogU2V0IG5vZGVzIGFuZCBlZGdlcywgYW5kIG9wdGlvbmFsbHkgb3B0aW9ucyBhcyB3ZWxsLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhICAgICAgICAgICAgICBPYmplY3QgY29udGFpbmluZyBwYXJhbWV0ZXJzOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtBcnJheSB8IERhdGFTZXQgfCBEYXRhVmlld30gW25vZGVzXSBBcnJheSB3aXRoIG5vZGVzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0FycmF5IHwgRGF0YVNldCB8IERhdGFWaWV3fSBbZWRnZXNdIEFycmF5IHdpdGggZWRnZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7U3RyaW5nfSBbZG90XSBTdHJpbmcgY29udGFpbmluZyBkYXRhIGluIERPVCBmb3JtYXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7U3RyaW5nfSBbZ2VwaGldIFN0cmluZyBjb250YWluaW5nIGRhdGEgaW4gZ2VwaGkgSlNPTiBmb3JtYXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7T3B0aW9uc30gW29wdGlvbnNdIE9iamVjdCB3aXRoIG9wdGlvbnNcbiAqL1xuTmV0d29yay5wcm90b3R5cGUuc2V0RGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIC8vIHJlc2V0IHRoZSBwaHlzaWNzIGVuZ2luZS5cbiAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInJlc2V0UGh5c2ljc1wiKTtcbiAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXNldERhdGFcIik7XG5cbiAgLy8gdW5zZWxlY3QgYWxsIHRvIGVuc3VyZSBubyBzZWxlY3Rpb25zIGZyb20gb2xkIGRhdGEgYXJlIGNhcnJpZWQgb3Zlci5cbiAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsKCk7XG5cbiAgaWYgKGRhdGEgJiYgZGF0YS5kb3QgJiYgKGRhdGEubm9kZXMgfHwgZGF0YS5lZGdlcykpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXG4gICAgICAnRGF0YSBtdXN0IGNvbnRhaW4gZWl0aGVyIHBhcmFtZXRlciBcImRvdFwiIG9yICcgK1xuICAgICAgICAnIHBhcmFtZXRlciBwYWlyIFwibm9kZXNcIiBhbmQgXCJlZGdlc1wiLCBidXQgbm90IGJvdGguJ1xuICAgICk7XG4gIH1cblxuICAvLyBzZXQgb3B0aW9uc1xuICB0aGlzLnNldE9wdGlvbnMoZGF0YSAmJiBkYXRhLm9wdGlvbnMpO1xuICAvLyBzZXQgYWxsIGRhdGFcbiAgaWYgKGRhdGEgJiYgZGF0YS5kb3QpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIlRoZSBkb3QgcHJvcGVydHkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0aGUgc3RhdGljIGNvbnZlcnREb3QgbWV0aG9kIHRvIGNvbnZlcnQgRE9UIGludG8gdmlzLm5ldHdvcmsgZm9ybWF0IGFuZCB1c2UgdGhlIG5vcm1hbCBkYXRhIGZvcm1hdCB3aXRoIG5vZGVzIGFuZCBlZGdlcy4gVGhpcyBjb252ZXJ0ZXIgaXMgdXNlZCBsaWtlIHRoaXM6IHZhciBkYXRhID0gdmlzLm5ldHdvcmsuY29udmVydERvdChkb3RTdHJpbmcpO1wiXG4gICAgKTtcbiAgICAvLyBwYXJzZSBET1QgZmlsZVxuICAgIGNvbnN0IGRvdERhdGEgPSBET1RUb0dyYXBoKGRhdGEuZG90KTtcbiAgICB0aGlzLnNldERhdGEoZG90RGF0YSk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKGRhdGEgJiYgZGF0YS5nZXBoaSkge1xuICAgIC8vIHBhcnNlIERPVCBmaWxlXG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJUaGUgZ2VwaGkgcHJvcGVydHkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0aGUgc3RhdGljIGNvbnZlcnRHZXBoaSBtZXRob2QgdG8gY29udmVydCBnZXBoaSBpbnRvIHZpcy5uZXR3b3JrIGZvcm1hdCBhbmQgdXNlIHRoZSBub3JtYWwgZGF0YSBmb3JtYXQgd2l0aCBub2RlcyBhbmQgZWRnZXMuIFRoaXMgY29udmVydGVyIGlzIHVzZWQgbGlrZSB0aGlzOiB2YXIgZGF0YSA9IHZpcy5uZXR3b3JrLmNvbnZlcnRHZXBoaShnZXBoaUpzb24pO1wiXG4gICAgKTtcbiAgICBjb25zdCBnZXBoaURhdGEgPSBwYXJzZUdlcGhpKGRhdGEuZ2VwaGkpO1xuICAgIHRoaXMuc2V0RGF0YShnZXBoaURhdGEpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm5vZGVzSGFuZGxlci5zZXREYXRhKGRhdGEgJiYgZGF0YS5ub2RlcywgdHJ1ZSk7XG4gICAgdGhpcy5lZGdlc0hhbmRsZXIuc2V0RGF0YShkYXRhICYmIGRhdGEuZWRnZXMsIHRydWUpO1xuICB9XG5cbiAgLy8gZW1pdCBjaGFuZ2UgaW4gZGF0YVxuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuXG4gIC8vIGVtaXQgZGF0YSBsb2FkZWRcbiAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhTG9hZGVkXCIpO1xuXG4gIC8vIGZpbmQgYSBzdGFibGUgcG9zaXRpb24gb3Igc3RhcnQgYW5pbWF0aW5nIHRvIGEgc3RhYmxlIHBvc2l0aW9uXG4gIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJpbml0UGh5c2ljc1wiKTtcbn07XG5cbi8qKlxuICogQ2xlYW5zIHVwIGFsbCBiaW5kaW5ncyBvZiB0aGUgbmV0d29yaywgcmVtb3ZpbmcgaXQgZnVsbHkgZnJvbSB0aGUgbWVtb3J5IElGIHRoZSB2YXJpYWJsZSBpcyBzZXQgdG8gbnVsbCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4gKiB2YXIgbmV0d29yayA9IG5ldyB2aXMuTmV0d29yayguLik7XG4gKiBuZXR3b3JrLmRlc3Ryb3koKTtcbiAqIG5ldHdvcmsgPSBudWxsO1xuICovXG5OZXR3b3JrLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiZGVzdHJveVwiKTtcbiAgLy8gY2xlYXIgZXZlbnRzXG4gIHRoaXMuYm9keS5lbWl0dGVyLm9mZigpO1xuICB0aGlzLm9mZigpO1xuXG4gIC8vIGRlbGV0ZSBtb2R1bGVzXG4gIGRlbGV0ZSB0aGlzLmdyb3VwcztcbiAgZGVsZXRlIHRoaXMuY2FudmFzO1xuICBkZWxldGUgdGhpcy5zZWxlY3Rpb25IYW5kbGVyO1xuICBkZWxldGUgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXI7XG4gIGRlbGV0ZSB0aGlzLnZpZXc7XG4gIGRlbGV0ZSB0aGlzLnJlbmRlcmVyO1xuICBkZWxldGUgdGhpcy5waHlzaWNzO1xuICBkZWxldGUgdGhpcy5sYXlvdXRFbmdpbmU7XG4gIGRlbGV0ZSB0aGlzLmNsdXN0ZXJpbmc7XG4gIGRlbGV0ZSB0aGlzLm1hbmlwdWxhdGlvbjtcbiAgZGVsZXRlIHRoaXMubm9kZXNIYW5kbGVyO1xuICBkZWxldGUgdGhpcy5lZGdlc0hhbmRsZXI7XG4gIGRlbGV0ZSB0aGlzLmNvbmZpZ3VyYXRvcjtcbiAgZGVsZXRlIHRoaXMuaW1hZ2VzO1xuXG4gIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5ub2Rlcywgbm9kZUlkKSlcbiAgICAgIGNvbnRpbnVlO1xuICAgIGRlbGV0ZSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZWRnZUlkIGluIHRoaXMuYm9keS5lZGdlcykge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5lZGdlcywgZWRnZUlkKSlcbiAgICAgIGNvbnRpbnVlO1xuICAgIGRlbGV0ZSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgfVxuXG4gIC8vIHJlbW92ZSB0aGUgY29udGFpbmVyIGFuZCBldmVyeXRoaW5nIGluc2lkZSBpdCByZWN1cnNpdmVseVxuICByZWN1cnNpdmVET01EZWxldGUodGhpcy5ib2R5LmNvbnRhaW5lcik7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgdmFsdWVzIG9mIGFsbCBvYmplY3QgaW4gdGhlIGdpdmVuIGFycmF5IGFjY29yZGluZyB0byB0aGUgY3VycmVudFxuICogdmFsdWUgcmFuZ2Ugb2YgdGhlIG9iamVjdHMgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmogICAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgYSBzZXQgb2YgRWRnZXMgb3IgTm9kZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdHMgbXVzdCBoYXZlIGEgbWV0aG9kIGdldFZhbHVlKCkgYW5kXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlUmFuZ2UobWluLCBtYXgpLlxuICogQHByaXZhdGVcbiAqL1xuTmV0d29yay5wcm90b3R5cGUuX3VwZGF0ZVZhbHVlUmFuZ2UgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGxldCBpZDtcblxuICAvLyBkZXRlcm1pbmUgdGhlIHJhbmdlIG9mIHRoZSBvYmplY3RzXG4gIGxldCB2YWx1ZU1pbiA9IHVuZGVmaW5lZDtcbiAgbGV0IHZhbHVlTWF4ID0gdW5kZWZpbmVkO1xuICBsZXQgdmFsdWVUb3RhbCA9IDA7XG4gIGZvciAoaWQgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGlkKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpbaWRdLmdldFZhbHVlKCk7XG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZU1pbiA9IHZhbHVlTWluID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IE1hdGgubWluKHZhbHVlLCB2YWx1ZU1pbik7XG4gICAgICAgIHZhbHVlTWF4ID0gdmFsdWVNYXggPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogTWF0aC5tYXgodmFsdWUsIHZhbHVlTWF4KTtcbiAgICAgICAgdmFsdWVUb3RhbCArPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBhZGp1c3QgdGhlIHJhbmdlIG9mIGFsbCBvYmplY3RzXG4gIGlmICh2YWx1ZU1pbiAhPT0gdW5kZWZpbmVkICYmIHZhbHVlTWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGlkIGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGlkKSkge1xuICAgICAgICBvYmpbaWRdLnNldFZhbHVlUmFuZ2UodmFsdWVNaW4sIHZhbHVlTWF4LCB2YWx1ZVRvdGFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIE5ldHdvcmsgaXMgYWN0aXZlLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5OZXR3b3JrLnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICF0aGlzLmFjdGl2YXRvciB8fCB0aGlzLmFjdGl2YXRvci5hY3RpdmU7XG59O1xuXG5OZXR3b3JrLnByb3RvdHlwZS5zZXRTaXplID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jYW52YXMuc2V0U2l6ZS5hcHBseSh0aGlzLmNhbnZhcywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5jYW52YXNUb0RPTSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2FudmFzLmNhbnZhc1RvRE9NLmFwcGx5KHRoaXMuY2FudmFzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLkRPTXRvQ2FudmFzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMuYXBwbHkodGhpcy5jYW52YXMsIGFyZ3VtZW50cyk7XG59O1xuXG4vKipcbiAqIE5vZGVzIGNhbiBiZSBpbiBjbHVzdGVycy4gQ2x1c3RlcnMgY2FuIGFsc28gYmUgaW4gY2x1c3RlcnMuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbmQgYXJyYXkgb2ZcbiAqIG5vZGVJZHMgc2hvd2luZyB3aGVyZSB0aGUgbm9kZSBpcy5cbiAqXG4gKiBJZiBhbnkgbm9kZUlkIGluIHRoZSBjaGFpbiwgZXNwZWNpYWxseSB0aGUgZmlyc3QgcGFzc2VkIGluIGFzIGEgcGFyYW1ldGVyLCBpcyBub3QgcHJlc2VudCBpblxuICogdGhlIGN1cnJlbnQgbm9kZXMgbGlzdCwgYW4gZW1wdHkgYXJyYXkgaXMgcmV0dXJuZWQuXG4gKlxuICogRXhhbXBsZTpcbiAqIGNsdXN0ZXIgJ0EnIGNvbnRhaW5zIGNsdXN0ZXIgJ0InLFxuICogY2x1c3RlciAnQicgY29udGFpbnMgY2x1c3RlciAnQycsXG4gKiBjbHVzdGVyICdDJyBjb250YWlucyBub2RlICdmcmVkJy5cbiAqIGBqc25ldHdvcmsuY2x1c3RlcmluZy5maW5kTm9kZSgnZnJlZCcpYCB3aWxsIHJldHVybiBgWydBJywnQicsJ0MnLCdmcmVkJ11gLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbm9kZUlkXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLmZpbmROb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmZpbmROb2RlLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5cbk5ldHdvcmsucHJvdG90eXBlLmlzQ2x1c3RlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy5pc0NsdXN0ZXIuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLm9wZW5DbHVzdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLm9wZW5DbHVzdGVyLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5jbHVzdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmNsdXN0ZXIuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldE5vZGVzSW5DbHVzdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmdldE5vZGVzSW5DbHVzdGVyLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5jbHVzdGVyQnlDb25uZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmNsdXN0ZXJCeUNvbm5lY3Rpb24uYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmNsdXN0ZXJCeUh1YnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3RlckJ5SHVic2l6ZS5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUudXBkYXRlQ2x1c3RlcmVkTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy51cGRhdGVDbHVzdGVyZWROb2RlLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRDbHVzdGVyZWRFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy5nZXRDbHVzdGVyZWRFZGdlcy5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0QmFzZUVkZ2UgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuZ2V0QmFzZUVkZ2UuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldEJhc2VFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy5nZXRCYXNlRWRnZXMuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnVwZGF0ZUVkZ2UgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcudXBkYXRlRWRnZS5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHdpbGwgY2x1c3RlciBhbGwgbm9kZXMgd2l0aCAxIGVkZ2Ugd2l0aCB0aGVpciByZXNwZWN0aXZlIGNvbm5lY3RlZCBub2RlLlxuICogVGhlIG9wdGlvbnMgb2JqZWN0IGlzIGV4cGxhaW5lZCBpbiBmdWxsIDxhIGRhdGEtc2Nyb2xsPVwiXCIgZGF0YS1vcHRpb25zPVwieyAmcXVvdDtlYXNpbmcmcXVvdDs6ICZxdW90O2Vhc2VJbkN1YmljJnF1b3Q7IH1cIiBocmVmPVwiI29wdGlvbnNPYmplY3RcIj5iZWxvdzwvYT4uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuTmV0d29yay5wcm90b3R5cGUuY2x1c3Rlck91dGxpZXJzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmNsdXN0ZXJPdXRsaWVycy5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuXG5OZXR3b3JrLnByb3RvdHlwZS5nZXRTZWVkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sYXlvdXRFbmdpbmUuZ2V0U2VlZC5hcHBseSh0aGlzLmxheW91dEVuZ2luZSwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5lbmFibGVFZGl0TW9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubWFuaXB1bGF0aW9uLmVuYWJsZUVkaXRNb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmRpc2FibGVFZGl0TW9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubWFuaXB1bGF0aW9uLmRpc2FibGVFZGl0TW9kZS5hcHBseSh0aGlzLm1hbmlwdWxhdGlvbiwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5hZGROb2RlTW9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubWFuaXB1bGF0aW9uLmFkZE5vZGVNb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmVkaXROb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZWRpdE5vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZWRpdE5vZGVNb2RlID0gZnVuY3Rpb24gKCkge1xuICBjb25zb2xlLndhcm4oXCJEZXByZWNhdGVkOiBQbGVhc2UgdXNlIGVkaXROb2RlIGluc3RlYWQgb2YgZWRpdE5vZGVNb2RlLlwiKTtcbiAgcmV0dXJuIHRoaXMubWFuaXB1bGF0aW9uLmVkaXROb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmFkZEVkZ2VNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uYWRkRWRnZU1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZWRpdEVkZ2VNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZWRpdEVkZ2VNb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmRlbGV0ZVNlbGVjdGVkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZGVsZXRlU2VsZWN0ZWQuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0UG9zaXRpb25zID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIuZ2V0UG9zaXRpb25zLmFwcGx5KHRoaXMubm9kZXNIYW5kbGVyLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFBvc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIuZ2V0UG9zaXRpb24uYXBwbHkodGhpcy5ub2Rlc0hhbmRsZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuc3RvcmVQb3NpdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5zdG9yZVBvc2l0aW9ucy5hcHBseSh0aGlzLm5vZGVzSGFuZGxlciwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5tb3ZlTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZXNIYW5kbGVyLm1vdmVOb2RlLmFwcGx5KHRoaXMubm9kZXNIYW5kbGVyLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldEJvdW5kaW5nQm94ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIuZ2V0Qm91bmRpbmdCb3guYXBwbHkodGhpcy5ub2Rlc0hhbmRsZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0Q29ubmVjdGVkTm9kZXMgPSBmdW5jdGlvbiAob2JqZWN0SWQpIHtcbiAgaWYgKHRoaXMuYm9keS5ub2Rlc1tvYmplY3RJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRDb25uZWN0ZWROb2Rlcy5hcHBseShcbiAgICAgIHRoaXMubm9kZXNIYW5kbGVyLFxuICAgICAgYXJndW1lbnRzXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5lZGdlc0hhbmRsZXIuZ2V0Q29ubmVjdGVkTm9kZXMuYXBwbHkoXG4gICAgICB0aGlzLmVkZ2VzSGFuZGxlcixcbiAgICAgIGFyZ3VtZW50c1xuICAgICk7XG4gIH1cbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRDb25uZWN0ZWRFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZXNIYW5kbGVyLmdldENvbm5lY3RlZEVkZ2VzLmFwcGx5KFxuICAgIHRoaXMubm9kZXNIYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnN0YXJ0U2ltdWxhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGh5c2ljcy5zdGFydFNpbXVsYXRpb24uYXBwbHkodGhpcy5waHlzaWNzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnN0b3BTaW11bGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5waHlzaWNzLnN0b3BTaW11bGF0aW9uLmFwcGx5KHRoaXMucGh5c2ljcywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5zdGFiaWxpemUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBoeXNpY3Muc3RhYmlsaXplLmFwcGx5KHRoaXMucGh5c2ljcywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0aW9uLmFwcGx5KFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICBhcmd1bWVudHNcbiAgKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5zZXRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2V0U2VsZWN0aW9uLmFwcGx5KFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICBhcmd1bWVudHNcbiAgKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRTZWxlY3RlZE5vZGVzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkTm9kZUlkcy5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZEVkZ2VJZHMuYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldE5vZGVBdCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgbm9kZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXROb2RlQXQuYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xuICBpZiAobm9kZSAhPT0gdW5kZWZpbmVkICYmIG5vZGUuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBub2RlLmlkO1xuICB9XG4gIHJldHVybiBub2RlO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldEVkZ2VBdCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZWRnZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRFZGdlQXQuYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xuICBpZiAoZWRnZSAhPT0gdW5kZWZpbmVkICYmIGVkZ2UuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBlZGdlLmlkO1xuICB9XG4gIHJldHVybiBlZGdlO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnNlbGVjdE5vZGVzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNlbGVjdE5vZGVzLmFwcGx5KFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICBhcmd1bWVudHNcbiAgKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5zZWxlY3RFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZWxlY3RFZGdlcy5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG59O1xuTmV0d29yay5wcm90b3R5cGUudW5zZWxlY3RBbGwgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbC5hcHBseSh0aGlzLnNlbGVjdGlvbkhhbmRsZXIsIGFyZ3VtZW50cyk7XG4gIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5jb21taXRXaXRob3V0RW1pdHRpbmcuYXBwbHkodGhpcy5zZWxlY3Rpb25IYW5kbGVyKTtcbiAgdGhpcy5yZWRyYXcoKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5yZWRyYXcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJlbmRlcmVyLnJlZHJhdy5hcHBseSh0aGlzLnJlbmRlcmVyLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFNjYWxlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy52aWV3LmdldFNjYWxlLmFwcGx5KHRoaXMudmlldywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRWaWV3UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnZpZXcuZ2V0Vmlld1Bvc2l0aW9uLmFwcGx5KHRoaXMudmlldywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5maXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnZpZXcuZml0LmFwcGx5KHRoaXMudmlldywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5tb3ZlVG8gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnZpZXcubW92ZVRvLmFwcGx5KHRoaXMudmlldywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5mb2N1cy5hcHBseSh0aGlzLnZpZXcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUucmVsZWFzZU5vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnZpZXcucmVsZWFzZU5vZGUuYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldE9wdGlvbnNGcm9tQ29uZmlndXJhdG9yID0gZnVuY3Rpb24gKCkge1xuICBsZXQgb3B0aW9ucyA9IHt9O1xuICBpZiAodGhpcy5jb25maWd1cmF0b3IpIHtcbiAgICBvcHRpb25zID0gdGhpcy5jb25maWd1cmF0b3IuZ2V0T3B0aW9ucy5hcHBseSh0aGlzLmNvbmZpZ3VyYXRvcik7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBOZXR3b3JrO1xuIiwgIi8qKlxuICogTm9ybWFsaXplcyBsYW5ndWFnZSBjb2RlIGludG8gdGhlIGZvcm1hdCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHBhcmFtIGxvY2FsZXMgLSBBbGwgdGhlIGF2YWlsYWJsZSBsb2NhbGVzLlxuICogQHBhcmFtIHJhd0NvZGUgLSBUaGUgb3JpZ2luYWwgY29kZSBhcyBzdXBwbGllZCBieSB0aGUgdXNlci5cbiAqIEByZXR1cm5zIExhbmd1YWdlIGNvZGUgaW4gdGhlIGZvcm1hdCBsYW5ndWFnZS1DT1VOVFJZIG9yIGxhbmd1YWdlLCBldmVudHVhbGx5XG4gKiBmYWxsYmFja3MgdG8gZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVMYW5ndWFnZUNvZGUoXG4gIGxvY2FsZXM6IFJlY29yZDxzdHJpbmcsIHVuZGVmaW5lZCB8IG9iamVjdD4sXG4gIHJhd0NvZGU6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBbcmF3TGFuZ3VhZ2UsIHJhd0NvdW50cnldID0gcmF3Q29kZS5zcGxpdCgvWy1fIC9dLywgMik7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSByYXdMYW5ndWFnZSAhPSBudWxsID8gcmF3TGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSA6IG51bGw7XG4gICAgY29uc3QgY291bnRyeSA9IHJhd0NvdW50cnkgIT0gbnVsbCA/IHJhd0NvdW50cnkudG9VcHBlckNhc2UoKSA6IG51bGw7XG5cbiAgICBpZiAobGFuZ3VhZ2UgJiYgY291bnRyeSkge1xuICAgICAgY29uc3QgY29kZSA9IGxhbmd1YWdlICsgXCItXCIgKyBjb3VudHJ5O1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsb2NhbGVzLCBjb2RlKSkge1xuICAgICAgICByZXR1cm4gY29kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgVW5rbm93biB2YXJpYW50ICR7Y291bnRyeX0gb2YgbGFuZ3VhZ2UgJHtsYW5ndWFnZX0uYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxhbmd1YWdlKSB7XG4gICAgICBjb25zdCBjb2RlID0gbGFuZ3VhZ2U7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxvY2FsZXMsIGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIGxhbmd1YWdlICR7bGFuZ3VhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS53YXJuKGBVbmtub3duIGxvY2FsZSAke3Jhd0NvZGV9LCBmYWxsaW5nIGJhY2sgdG8gRW5nbGlzaC5gKTtcblxuICAgIHJldHVybiBcImVuXCI7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYFVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgbm9ybWFsaXppbmcgbG9jYWxlICR7cmF3Q29kZX0sIGZhbGxpbmcgYmFjayB0byBFbmdsaXNoLmBcbiAgICApO1xuXG4gICAgcmV0dXJuIFwiZW5cIjtcbiAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gXCIuL25ldHdvcmsvTmV0d29ya1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIE5ldHdvcmtJbWFnZXMgfSBmcm9tIFwiLi9uZXR3b3JrL0ltYWdlc1wiO1xuXG5pbXBvcnQgKiBhcyBkb3RwYXJzZXIgZnJvbSBcIi4vbmV0d29yay9kb3RwYXJzZXJcIjtcbmV4cG9ydCB7IGRvdHBhcnNlciBhcyBuZXR3b3JrRE9UUGFyc2VyIH07XG5leHBvcnQgY29uc3QgcGFyc2VET1ROZXR3b3JrID0gZG90cGFyc2VyLkRPVFRvR3JhcGg7XG5cbmltcG9ydCAqIGFzIGdlcGhpUGFyc2VyIGZyb20gXCIuL25ldHdvcmsvZ2VwaGlQYXJzZXJcIjtcbmV4cG9ydCB7IHBhcnNlR2VwaGkgYXMgcGFyc2VHZXBoaU5ldHdvcmsgfSBmcm9tIFwiLi9uZXR3b3JrL2dlcGhpUGFyc2VyXCI7XG5leHBvcnQgeyBnZXBoaVBhcnNlciBhcyBuZXR3b3JrR2VwaGlQYXJzZXIgfTtcblxuaW1wb3J0ICogYXMgYWxsT3B0aW9ucyBmcm9tIFwiLi9uZXR3b3JrL29wdGlvbnNcIjtcbmV4cG9ydCB7IGFsbE9wdGlvbnMgYXMgbmV0d29ya09wdGlvbnMgfTtcblxuLy8gRGF0YVNldCwgdXRpbHMgZXRjLiBjYW4ndCBiZSByZWV4cG9ydGVkIGhlcmUgYmVjYXVzZSB0aGF0IHdvdWxkIGNhdXNlIHN0YWNrXG4vLyBvdmVyZmxvdyBpbiBVTUQgYnVpbGRzLiBUaGV5IGFsbCBleHBvcnQgdmlzIG5hbWVzcGFjZSB0aGVyZWZvcmUgcmVleHBvcnRpbmdcbi8vIGxlYWRzIHRvIGxvYWRpbmcgdmlzIHRvIGxvYWQgdmlzIHRvIGxvYWQgdmlz4oCmXG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IHRoaXMgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3Rcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBJU19IVE1MRERBID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhbGw6IGRvY3VtZW50QWxsLFxuICBJU19IVE1MRERBOiBJU19IVE1MRERBXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkZG9jdW1lbnRBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsJyk7XG5cbnZhciBkb2N1bWVudEFsbCA9ICRkb2N1bWVudEFsbC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxubW9kdWxlLmV4cG9ydHMgPSAkZG9jdW1lbnRBbGwuSVNfSFRNTEREQSA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciAkZG9jdW1lbnRBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsJyk7XG5cbnZhciBkb2N1bWVudEFsbCA9ICRkb2N1bWVudEFsbC5hbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gJGRvY3VtZW50QWxsLklTX0hUTUxEREEgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCkgfHwgaXQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh2YXJpYWJsZSkgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgbmF2aWdhdG9yICE9ICd1bmRlZmluZWQnICYmIFN0cmluZyhuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAnJztcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWwsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zMy4yJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjMgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zMy4yL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBiaW5kID0gdW5jdXJyeVRoaXModW5jdXJyeVRoaXMuYmluZCk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQpIHtcbiAgYUNhbGxhYmxlKGZuKTtcbiAgcmV0dXJuIHRoYXQgPT09IHVuZGVmaW5lZCA/IGZuIDogTkFUSVZFX0JJTkQgPyBiaW5kKGZuLCB0aGF0KSA6IGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIHdyYXBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChOYXRpdmVDb25zdHJ1Y3Rvcikge1xuICB2YXIgV3JhcHBlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcmFwcGVyKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIGFwcGx5KE5hdGl2ZUNvbnN0cnVjdG9yLCB0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICBXcmFwcGVyLnByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIFdyYXBwZXI7XG59O1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWwgOiBTVEFUSUMgPyBnbG9iYWxbVEFSR0VUXSA6IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBUQVJHRVQsIHt9KVtUQVJHRVRdO1xuICB2YXIgdGFyZ2V0UHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcblxuICB2YXIgRk9SQ0VELCBVU0VfTkFUSVZFLCBWSVJUVUFMX1BST1RPVFlQRTtcbiAgdmFyIGtleSwgc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5LCBuYXRpdmVQcm9wZXJ0eSwgcmVzdWx0UHJvcGVydHksIGRlc2NyaXB0b3I7XG5cbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBVU0VfTkFUSVZFID0gIUZPUkNFRCAmJiBuYXRpdmVTb3VyY2UgJiYgaGFzT3duKG5hdGl2ZVNvdXJjZSwga2V5KTtcblxuICAgIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSkgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmF0aXZlU291cmNlLCBrZXkpO1xuICAgICAgbmF0aXZlUHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIG5hdGl2ZVByb3BlcnR5ID0gbmF0aXZlU291cmNlW2tleV07XG5cbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIGltcGxlbWVudGF0aW9uXG4gICAgc291cmNlUHJvcGVydHkgPSAoVVNFX05BVElWRSAmJiBuYXRpdmVQcm9wZXJ0eSkgPyBuYXRpdmVQcm9wZXJ0eSA6IHNvdXJjZVtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUgJiYgdHlwZW9mIHRhcmdldFByb3BlcnR5ID09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIG1ldGhvZHMgdG8gZ2xvYmFsIGZvciBjYWxsaW5nIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBpZiAob3B0aW9ucy5iaW5kICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gYmluZChzb3VyY2VQcm9wZXJ0eSwgZ2xvYmFsKTtcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlcyBpbiB0aGlzIHZlcnNpb25cbiAgICBlbHNlIGlmIChvcHRpb25zLndyYXAgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSB3cmFwQ29uc3RydWN0b3Ioc291cmNlUHJvcGVydHkpO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIGVsc2UgaWYgKFBST1RPICYmIGlzQ2FsbGFibGUoc291cmNlUHJvcGVydHkpKSByZXN1bHRQcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCByZXN1bHRQcm9wZXJ0eSk7XG5cbiAgICBpZiAoUFJPVE8pIHtcbiAgICAgIFZJUlRVQUxfUFJPVE9UWVBFID0gVEFSR0VUICsgJ1Byb3RvdHlwZSc7XG4gICAgICBpZiAoIWhhc093bihwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFLCB7fSk7XG4gICAgICB9XG4gICAgICAvLyBleHBvcnQgdmlydHVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGhbVklSVFVBTF9QUk9UT1RZUEVdLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIC8vIGV4cG9ydCByZWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBpZiAob3B0aW9ucy5yZWFsICYmIHRhcmdldFByb3RvdHlwZSAmJiAoRk9SQ0VEIHx8ICF0YXJnZXRQcm90b3R5cGVba2V5XSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldFByb3RvdHlwZSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSBkZWZpbmVQcm9wZXJ0eSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGRlZmluZVByb3BlcnR5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkuc2hhbSkgZGVmaW5lUHJvcGVydHkuc2hhbSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KSwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKHByb3BlcnR5S2V5IGluIG9iamVjdCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIHByb3BlcnR5S2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbcHJvcGVydHlLZXldID0gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgZW1wdHkgPSBbXTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoY29uc3RydWN0b3JSZWdFeHAuZXhlYyk7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC50ZXN0KG5vb3ApO1xuXG52YXIgaXNDb25zdHJ1Y3Rvck1vZGVybiA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChub29wLCBlbXB0eSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChjbGFzc29mKGFyZ3VtZW50KSkge1xuICAgIGNhc2UgJ0FzeW5jRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0dlbmVyYXRvckZ1bmN0aW9uJzpcbiAgICBjYXNlICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJzogcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICAgIC8vIGBGdW5jdGlvbiN0b1N0cmluZ2AgdGhyb3dzIG9uIHNvbWUgYnVpbHQtaXQgZnVuY3Rpb24gaW4gc29tZSBsZWdhY3kgZW5naW5lc1xuICAgIC8vIChmb3IgZXhhbXBsZSwgYERPTVF1YWRgIGFuZCBzaW1pbGFyIGluIEZGNDEtKVxuICAgIHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYyhjb25zdHJ1Y3RvclJlZ0V4cCwgaW5zcGVjdFNvdXJjZShhcmd1bWVudCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5pc0NvbnN0cnVjdG9yTGVnYWN5LnNoYW0gPSB0cnVlO1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIGxlbik7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgMSk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gdHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnXG4gICAgPyBkb2N1bWVudC5kb21haW4gJiYgYWN0aXZlWERvY3VtZW50XG4gICAgICA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSAvLyBvbGQgSUVcbiAgICAgIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKClcbiAgICA6IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KTsgLy8gV1NIXG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1jcmVhdGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllc01vZHVsZS5mKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gIHZhciByZXN1bHQgPSAkQXJyYXkobWF4KGZpbiAtIGssIDApKTtcbiAgdmFyIG4gPSAwO1xuICBmb3IgKDsgayA8IGZpbjsgaysrLCBuKyspIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gIHJlc3VsdC5sZW5ndGggPSBuO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW51bWVyYWJsZSkgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzT3duKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVEFHLCBTVEFUSUMsIFNFVF9NRVRIT0QpIHtcbiAgaWYgKGl0KSB7XG4gICAgdmFyIHRhcmdldCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gICAgfVxuICAgIGlmIChTRVRfTUVUSE9EICYmICFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsICd0b1N0cmluZycsIHRvU3RyaW5nKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJSZWplY3QgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBuYXRpdmVPYmplY3RDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgSElEREVOID0gc2hhcmVkS2V5KCdoaWRkZW4nKTtcbnZhciBTWU1CT0wgPSAnU3ltYm9sJztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1lNQk9MKTtcblxudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2wgJiYgJFN5bWJvbFtQUk9UT1RZUEVdO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mO1xudmFyIG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIFVTRV9TRVRURVIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBmYWxsYmFja0RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgdmFyIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCBQKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpIGRlbGV0ZSBPYmplY3RQcm90b3R5cGVbUF07XG4gIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciAmJiBPICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGUsIFAsIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpO1xuICB9XG59O1xuXG52YXIgc2V0U3ltYm9sRGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdENyZWF0ZShuYXRpdmVEZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPT0gNztcbn0pID8gZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA6IG5hdGl2ZURlZmluZVByb3BlcnR5O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcsIGRlc2NyaXB0aW9uKSB7XG4gIHZhciBzeW1ib2wgPSBBbGxTeW1ib2xzW3RhZ10gPSBuYXRpdmVPYmplY3RDcmVhdGUoU3ltYm9sUHJvdG90eXBlKTtcbiAgc2V0SW50ZXJuYWxTdGF0ZShzeW1ib2wsIHtcbiAgICB0eXBlOiBTWU1CT0wsXG4gICAgdGFnOiB0YWcsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gIH0pO1xuICBpZiAoIURFU0NSSVBUT1JTKSBzeW1ib2wuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgcmV0dXJuIHN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGlmIChPID09PSBPYmplY3RQcm90b3R5cGUpICRkZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQLCBBdHRyaWJ1dGVzKTtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFBdHRyaWJ1dGVzLmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzT3duKE8sIEhJRERFTikpIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIEhJRERFTiwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHt9KSk7XG4gICAgICBPW0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNPd24oTywgSElEREVOKSAmJiBPW0hJRERFTl1ba2V5XSkgT1tISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSBuYXRpdmVPYmplY3RDcmVhdGUoQXR0cmlidXRlcywgeyBlbnVtZXJhYmxlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2NyaXB0b3IoTywga2V5LCBBdHRyaWJ1dGVzKTtcbiAgfSByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywga2V5LCBBdHRyaWJ1dGVzKTtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhwcm9wZXJ0aWVzKS5jb25jYXQoJGdldE93blByb3BlcnR5U3ltYm9scyhwcm9wZXJ0aWVzKSk7XG4gICRmb3JFYWNoKGtleXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwoJHByb3BlcnR5SXNFbnVtZXJhYmxlLCBwcm9wZXJ0aWVzLCBrZXkpKSAkZGVmaW5lUHJvcGVydHkoTywga2V5LCBwcm9wZXJ0aWVzW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuXG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyBuYXRpdmVPYmplY3RDcmVhdGUoTykgOiAkZGVmaW5lUHJvcGVydGllcyhuYXRpdmVPYmplY3RDcmVhdGUoTyksIFByb3BlcnRpZXMpO1xufTtcblxudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIFAgPSB0b1Byb3BlcnR5S2V5KFYpO1xuICB2YXIgZW51bWVyYWJsZSA9IGNhbGwobmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUsIHRoaXMsIFApO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBQKSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBlbnVtZXJhYmxlIHx8ICFoYXNPd24odGhpcywgUCkgfHwgIWhhc093bihBbGxTeW1ib2xzLCBQKSB8fCBoYXNPd24odGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1bUF1cbiAgICA/IGVudW1lcmFibGUgOiB0cnVlO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICB2YXIgaXQgPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG4gIGlmIChkZXNjcmlwdG9yICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzT3duKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIHtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpKSBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBJU19PQkpFQ1RfUFJPVE9UWVBFID0gTyA9PT0gT2JqZWN0UHJvdG90eXBlO1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKElTX09CSkVDVF9QUk9UT1RZUEUgPyBPYmplY3RQcm90b3R5cGVTeW1ib2xzIDogdG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAoIUlTX09CSkVDVF9QUk9UT1RZUEUgfHwgaGFzT3duKE9iamVjdFByb3RvdHlwZSwga2V5KSkpIHtcbiAgICAgIHB1c2gocmVzdWx0LCBBbGxTeW1ib2xzW2tleV0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wtY29uc3RydWN0b3JcbmlmICghTkFUSVZFX1NZTUJPTCkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmIChpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgIHZhciBkZXNjcmlwdGlvbiA9ICFhcmd1bWVudHMubGVuZ3RoIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogJHRvU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHRhZyA9IHVpZChkZXNjcmlwdGlvbik7XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyICR0aGlzID0gdGhpcyA9PT0gdW5kZWZpbmVkID8gZ2xvYmFsIDogdGhpcztcbiAgICAgIGlmICgkdGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBjYWxsKHNldHRlciwgT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhc093bigkdGhpcywgSElEREVOKSAmJiBoYXNPd24oJHRoaXNbSElEREVOXSwgdGFnKSkgJHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZXBsYWNlcikge1xuICBpZiAoaXNDYWxsYWJsZShyZXBsYWNlcikpIHJldHVybiByZXBsYWNlcjtcbiAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmV0dXJuO1xuICB2YXIgcmF3TGVuZ3RoID0gcmVwbGFjZXIubGVuZ3RoO1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd0xlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZW1lbnQgPSByZXBsYWNlcltpXTtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ3N0cmluZycpIHB1c2goa2V5cywgZWxlbWVudCk7XG4gICAgZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ251bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ051bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ1N0cmluZycpIHB1c2goa2V5cywgdG9TdHJpbmcoZWxlbWVudCkpO1xuICB9XG4gIHZhciBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciByb290ID0gdHJ1ZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHJvb3QpIHtcbiAgICAgIHJvb3QgPSBmYWxzZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHJldHVybiB2YWx1ZTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXNMZW5ndGg7IGorKykgaWYgKGtleXNbal0gPT09IGtleSkgcmV0dXJuIHZhbHVlO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGdldFJlcGxhY2VyRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24nKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJHN0cmluZ2lmeSA9IGdldEJ1aWx0SW4oJ0pTT04nLCAnc3RyaW5naWZ5Jyk7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKC8uLy5leGVjKTtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbnVtYmVyVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG52YXIgdGVzdGVyID0gL1tcXHVEODAwLVxcdURGRkZdL2c7XG52YXIgbG93ID0gL15bXFx1RDgwMC1cXHVEQkZGXSQvO1xudmFyIGhpID0gL15bXFx1REMwMC1cXHVERkZGXSQvO1xuXG52YXIgV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoJ3N0cmluZ2lmeSBkZXRlY3Rpb24nKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgcmV0dXJuICRzdHJpbmdpZnkoW3N5bWJvbF0pICE9PSAnW251bGxdJ1xuICAgIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAgIHx8ICRzdHJpbmdpZnkoeyBhOiBzeW1ib2wgfSkgIT09ICd7fSdcbiAgICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICAgIHx8ICRzdHJpbmdpZnkoT2JqZWN0KHN5bWJvbCkpICE9PSAne30nO1xufSk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXdlbGwtZm9ybWVkLXN0cmluZ2lmeVxudmFyIElMTF9GT1JNRURfVU5JQ09ERSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRzdHJpbmdpZnkoJ1xcdURGMDZcXHVEODM0JykgIT09ICdcIlxcXFx1ZGYwNlxcXFx1ZDgzNFwiJ1xuICAgIHx8ICRzdHJpbmdpZnkoJ1xcdURFQUQnKSAhPT0gJ1wiXFxcXHVkZWFkXCInO1xufSk7XG5cbnZhciBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA9IGZ1bmN0aW9uIChpdCwgcmVwbGFjZXIpIHtcbiAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gIHZhciAkcmVwbGFjZXIgPSBnZXRSZXBsYWNlckZ1bmN0aW9uKHJlcGxhY2VyKTtcbiAgaWYgKCFpc0NhbGxhYmxlKCRyZXBsYWNlcikgJiYgKGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gIGFyZ3NbMV0gPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIHNvbWUgb2xkIGltcGxlbWVudGF0aW9ucyAobGlrZSBXZWJLaXQpIGNvdWxkIHBhc3MgbnVtYmVycyBhcyBrZXlzXG4gICAgaWYgKGlzQ2FsbGFibGUoJHJlcGxhY2VyKSkgdmFsdWUgPSBjYWxsKCRyZXBsYWNlciwgdGhpcywgJFN0cmluZyhrZXkpLCB2YWx1ZSk7XG4gICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbiAgcmV0dXJuIGFwcGx5KCRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xufTtcblxudmFyIGZpeElsbEZvcm1lZCA9IGZ1bmN0aW9uIChtYXRjaCwgb2Zmc2V0LCBzdHJpbmcpIHtcbiAgdmFyIHByZXYgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgLSAxKTtcbiAgdmFyIG5leHQgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgKyAxKTtcbiAgaWYgKChleGVjKGxvdywgbWF0Y2gpICYmICFleGVjKGhpLCBuZXh0KSkgfHwgKGV4ZWMoaGksIG1hdGNoKSAmJiAhZXhlYyhsb3csIHByZXYpKSkge1xuICAgIHJldHVybiAnXFxcXHUnICsgbnVtYmVyVG9TdHJpbmcoY2hhckNvZGVBdChtYXRjaCwgMCksIDE2KTtcbiAgfSByZXR1cm4gbWF0Y2g7XG59O1xuXG5pZiAoJHN0cmluZ2lmeSkge1xuICAvLyBgSlNPTi5zdHJpbmdpZnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24uc3RyaW5naWZ5XG4gICQoeyB0YXJnZXQ6ICdKU09OJywgc3RhdDogdHJ1ZSwgYXJpdHk6IDMsIGZvcmNlZDogV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIHx8IElMTF9GT1JNRURfVU5JQ09ERSB9LCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgICAgIHZhciByZXN1bHQgPSBhcHBseShXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPyBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA6ICRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xuICAgICAgcmV0dXJuIElMTF9GT1JNRURfVU5JQ09ERSAmJiB0eXBlb2YgcmVzdWx0ID09ICdzdHJpbmcnID8gcmVwbGFjZShyZXN1bHQsIHRlc3RlciwgZml4SWxsRm9ybWVkKSA6IHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxuLy8gVjggfiBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRk9SQ0VEID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5c3ltYm9sc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICB2YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gJGdldE93blByb3BlcnR5U3ltYm9scyh0b09iamVjdChpdCkpIDogW107XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNJdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmFzeW5jaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNJdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaGFzSW5zdGFuY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5oYXNpbnN0YW5jZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdoYXNJbnN0YW5jZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXNjb25jYXRzcHJlYWRhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hBbGxgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaGFsbFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaEFsbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucmVwbGFjZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnJlcGxhY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc2VhcmNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc2VhcmNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NlYXJjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BlY2llc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwZWNpZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BsaXRgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGxpdFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGxpdCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC50b1ByaW1pdGl2ZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvcHJpbWl0aXZlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9zdHJpbmd0YWdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2V0QnVpbHRJbignU3ltYm9sJyksICdTeW1ib2wnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnVuc2NvcGFibGVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudW5zY29wYWJsZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIEpTT05bQEB0b1N0cmluZ1RhZ10gcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wucmVwbGFjZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc2VhcmNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGxpdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC51bnNjb3BhYmxlcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QudG8tc3RyaW5nLXRhZycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1rZXlzIC0tIHNhZmUgKi9cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxudmFyIE5FV19JVEVSQVRPUl9QUk9UT1RZUEUgPSAhaXNPYmplY3QoSXRlcmF0b3JQcm90b3R5cGUpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEl0ZXJhdG9yUHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtQEBpdGVyYXRvclxuaWYgKCFpc0NhbGxhYmxlKEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgZGVmaW5lQnVpbHRJbihJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gJE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyAkT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzT3duKG9iamVjdCwgSUVfUFJPVE8pKSByZXR1cm4gb2JqZWN0W0lFX1BST1RPXTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBpZiAoaXNDYWxsYWJsZShjb25zdHJ1Y3RvcikgJiYgb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiAkT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICh0eXBlb2YgYXJndW1lbnQgPT0gJ29iamVjdCcgfHwgaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSXRlcmF0b3JzQ29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpO1xuXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuUFJPUEVSO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcblxuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNDYWxsYWJsZShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICAgICAgICAgIGRlZmluZUJ1aWx0SW4oQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkucHJvdG90eXBlLnsgdmFsdWVzLCBAQGl0ZXJhdG9yIH0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBERUZBVUxUID09PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgaWYgKCFJU19QVVJFICYmIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsICduYW1lJywgVkFMVUVTKTtcbiAgICB9IGVsc2Uge1xuICAgICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIGNhbGwobmF0aXZlSXRlcmF0b3IsIHRoaXMpOyB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IsIHsgbmFtZTogREVGQVVMVCB9KTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uUHJvdG90eXBlID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUgJiYgY2xhc3NvZihDb2xsZWN0aW9uUHJvdG90eXBlKSAhPT0gVE9fU1RSSU5HX1RBRykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCBDT0xMRUNUSU9OX05BTUUpO1xuICB9XG4gIEl0ZXJhdG9yc1tDT0xMRUNUSU9OX05BTUVdID0gSXRlcmF0b3JzLkFycmF5O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbnZhciBNRVRBREFUQSA9IHdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLy8gRnVuY3Rpb24ucHJvdG90eXBlW0BAbWV0YWRhdGFdXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmlmIChGdW5jdGlvblByb3RvdHlwZVtNRVRBREFUQV0gPT09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eShGdW5jdGlvblByb3RvdHlwZSwgTUVUQURBVEEsIHtcbiAgICB2YWx1ZTogbnVsbFxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFzeW5jLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNEaXNwb3NlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5kaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdkaXNwb3NlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvcnNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3N5bWJvbCcpO1xuXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5mdW5jdGlvbi5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciBrZXlGb3IgPSBTeW1ib2wua2V5Rm9yO1xudmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbCB8fCBmdW5jdGlvbiBpc1JlZ2lzdGVyZWRTeW1ib2wodmFsdWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4ga2V5Rm9yKHRoaXNTeW1ib2xWYWx1ZSh2YWx1ZSkpICE9PSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUmVnaXN0ZXJlZFN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZCcpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzUmVnaXN0ZXJlZFN5bWJvbDogaXNSZWdpc3RlcmVkU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciAkaXNXZWxsS25vd25TeW1ib2wgPSBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2w7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldEJ1aWx0SW4oJ09iamVjdCcsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyk7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG5mb3IgKHZhciBpID0gMCwgc3ltYm9sS2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKSwgc3ltYm9sS2V5c0xlbmd0aCA9IHN5bWJvbEtleXMubGVuZ3RoOyBpIDwgc3ltYm9sS2V5c0xlbmd0aDsgaSsrKSB7XG4gIC8vIHNvbWUgb2xkIGVuZ2luZXMgdGhyb3dzIG9uIGFjY2VzcyB0byBzb21lIGtleXMgbGlrZSBgYXJndW1lbnRzYCBvciBgY2FsbGVyYFxuICB0cnkge1xuICAgIHZhciBzeW1ib2xLZXkgPSBzeW1ib2xLZXlzW2ldO1xuICAgIGlmIChpc1N5bWJvbChTeW1ib2xbc3ltYm9sS2V5XSkpIHdlbGxLbm93blN5bWJvbChzeW1ib2xLZXkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNXZWxsS25vd25TeW1ib2wodmFsdWUpIHtcbiAgaWYgKCRpc1dlbGxLbm93blN5bWJvbCAmJiAkaXNXZWxsS25vd25TeW1ib2wodmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICB2YXIgc3ltYm9sID0gdGhpc1N5bWJvbFZhbHVlKHZhbHVlKTtcbiAgICBmb3IgKHZhciBqID0gMCwga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoOyBqIDwga2V5c0xlbmd0aDsgaisrKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxIC0tIHBvbHlmaWxsZWQgc3ltYm9scyBjYXNlXG4gICAgICBpZiAoV2VsbEtub3duU3ltYm9sc1N0b3JlW2tleXNbal1dID09IHN5bWJvbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duU3ltYm9sOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGVyYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaGVyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5vYnNlcnZhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdvYnNlcnZhYmxlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkYCBtZXRob2Rcbi8vIG9ic29sZXRlIHZlcnNpb24gb2YgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1JlZ2lzdGVyZWRTeW1ib2wnIH0sIHtcbiAgaXNSZWdpc3RlcmVkOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duJyk7XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25gIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1dlbGxLbm93blN5bWJvbCcsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWV0YWRhdGFLZXlgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGFLZXknKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5wYXR0ZXJuTWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3BhdHRlcm5NYXRjaCcpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2VBbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQtc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZScpO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLWtleScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHBvaW50LCBmYWxzZSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZignaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sL2l0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbC9pdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sL2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX1N5bWJvbCRpdGVyYXRvciBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBfU3ltYm9sJGl0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBfU3ltYm9sICYmIG8gIT09IF9TeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufSIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ3RvUHJpbWl0aXZlJyk7XG4iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBfU3ltYm9sJHRvUHJpbWl0aXZlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL3RvLXByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W19TeW1ib2wkdG9QcmltaXRpdmVdO1xuICBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKF90eXBlb2YocmVzKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlcztcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7XG59IiwgImltcG9ydCBfT2JqZWN0JGRlZmluZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwgImltcG9ydCBfT2JqZWN0JGRlZmluZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgJEZ1bmN0aW9uID0gRnVuY3Rpb247XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoQywgYXJnc0xlbmd0aCwgYXJncykge1xuICBpZiAoIWhhc093bihmYWN0b3JpZXMsIGFyZ3NMZW5ndGgpKSB7XG4gICAgdmFyIGxpc3QgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIGxpc3RbaV0gPSAnYVsnICsgaSArICddJztcbiAgICBmYWN0b3JpZXNbYXJnc0xlbmd0aF0gPSAkRnVuY3Rpb24oJ0MsYScsICdyZXR1cm4gbmV3IEMoJyArIGpvaW4obGlzdCwgJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1thcmdzTGVuZ3RoXShDLCBhcmdzKTtcbn07XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gZGV0ZWN0aW9uXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gJEZ1bmN0aW9uLmJpbmQgOiBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBGID0gYUNhbGxhYmxlKHRoaXMpO1xuICB2YXIgUHJvdG90eXBlID0gRi5wcm90b3R5cGU7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kRnVuY3Rpb24gPSBmdW5jdGlvbiBib3VuZCgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBjb25jYXQocGFydEFyZ3MsIGFycmF5U2xpY2UoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZEZ1bmN0aW9uID8gY29uc3RydWN0KEYsIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IEYuYXBwbHkodGhhdCwgYXJncyk7XG4gIH07XG4gIGlmIChpc09iamVjdChQcm90b3R5cGUpKSBib3VuZEZ1bmN0aW9uLnByb3RvdHlwZSA9IFByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kRnVuY3Rpb247XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQnKTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBkZXRlY3Rpb25cbiQoeyB0YXJnZXQ6ICdGdW5jdGlvbicsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZ1bmN0aW9uLmJpbmQgIT09IGJpbmQgfSwge1xuICBiaW5kOiBiaW5kXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUiwgTUVUSE9EKSB7XG4gIHZhciBOYW1lc3BhY2UgPSBwYXRoW0NPTlNUUlVDVE9SICsgJ1Byb3RvdHlwZSddO1xuICB2YXIgcHVyZU1ldGhvZCA9IE5hbWVzcGFjZSAmJiBOYW1lc3BhY2VbTUVUSE9EXTtcbiAgaWYgKHB1cmVNZXRob2QpIHJldHVybiBwdXJlTWV0aG9kO1xuICB2YXIgTmF0aXZlQ29uc3RydWN0b3IgPSBnbG9iYWxbQ09OU1RSVUNUT1JdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gTmF0aXZlUHJvdG90eXBlICYmIE5hdGl2ZVByb3RvdHlwZVtNRVRIT0RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmZ1bmN0aW9uLmJpbmQnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnRnVuY3Rpb24nLCAnYmluZCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9mdW5jdGlvbi92aXJ0dWFsL2JpbmQnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuYmluZDtcbiAgcmV0dXJuIGl0ID09PSBGdW5jdGlvblByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihGdW5jdGlvblByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gRnVuY3Rpb25Qcm90b3R5cGUuYmluZCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgcmVkdWNlLCByZWR1Y2VSaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX1JJR0hUKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYXJndW1lbnRzTGVuZ3RoLCBtZW1vKSB7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDtJU19SSUdIVCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4gIGxlZnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuICByaWdodDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgYXJndW1lbnQpIHtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzc29mKGdsb2JhbC5wcm9jZXNzKSA9PT0gJ3Byb2Nlc3MnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktcmVkdWNlJykubGVmdDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBDSFJPTUVfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxuLy8gQ2hyb21lIDgwLTgyIGhhcyBhIGNyaXRpY2FsIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA0OTk4MlxudmFyIENIUk9NRV9CVUcgPSAhSVNfTk9ERSAmJiBDSFJPTUVfVkVSU0lPTiA+IDc5ICYmIENIUk9NRV9WRVJTSU9OIDwgODM7XG52YXIgRk9SQ0VEID0gQ0hST01FX0JVRyB8fCAhYXJyYXlNZXRob2RJc1N0cmljdCgncmVkdWNlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGxlbmd0aCwgbGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3JlZHVjZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JlZHVjZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZWR1Y2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJlZHVjZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maWx0ZXInKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnZmlsdGVyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmlsdGVyJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZpbHRlcjtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmlsdGVyKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5tYXA7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lm1hcCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdtYXAnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5tYXApID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xuXG4vLyBgRmxhdHRlbkludG9BcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1GbGF0dGVuSW50b0FycmF5XG52YXIgZmxhdHRlbkludG9BcnJheSA9IGZ1bmN0aW9uICh0YXJnZXQsIG9yaWdpbmFsLCBzb3VyY2UsIHNvdXJjZUxlbiwgc3RhcnQsIGRlcHRoLCBtYXBwZXIsIHRoaXNBcmcpIHtcbiAgdmFyIHRhcmdldEluZGV4ID0gc3RhcnQ7XG4gIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gIHZhciBtYXBGbiA9IG1hcHBlciA/IGJpbmQobWFwcGVyLCB0aGlzQXJnKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgZWxlbWVudExlbjtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgaWYgKGRlcHRoID4gMCAmJiBpc0FycmF5KGVsZW1lbnQpKSB7XG4gICAgICAgIGVsZW1lbnRMZW4gPSBsZW5ndGhPZkFycmF5TGlrZShlbGVtZW50KTtcbiAgICAgICAgdGFyZ2V0SW5kZXggPSBmbGF0dGVuSW50b0FycmF5KHRhcmdldCwgb3JpZ2luYWwsIGVsZW1lbnQsIGVsZW1lbnRMZW4sIHRhcmdldEluZGV4LCBkZXB0aCAtIDEpIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcih0YXJnZXRJbmRleCArIDEpO1xuICAgICAgICB0YXJnZXRbdGFyZ2V0SW5kZXhdID0gZWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgdGFyZ2V0SW5kZXgrKztcbiAgICB9XG4gICAgc291cmNlSW5kZXgrKztcbiAgfVxuICByZXR1cm4gdGFyZ2V0SW5kZXg7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmxhdE1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mbGF0bWFwXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGZsYXRNYXA6IGZ1bmN0aW9uIGZsYXRNYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgQTtcbiAgICBhQ2FsbGFibGUoY2FsbGJhY2tmbik7XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBBLmxlbmd0aCA9IGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCAxLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmxhdC1tYXAnKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkudW5zY29wYWJsZXMuZmxhdC1tYXAnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnZmxhdE1hcCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZsYXQtbWFwJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZsYXRNYXA7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZsYXRNYXApID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJpbXBvcnQgeyBEYXRhSW50ZXJmYWNlLCBFdmVudENhbGxiYWNrcywgUGFydEl0ZW0gfSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuaW1wb3J0IHsgRGF0YVNldCB9IGZyb20gXCIuL2RhdGEtc2V0XCI7XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjb250cm9sIHRoZSBwaXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFQaXBlIHtcbiAgLyoqXG4gICAqIFRha2UgYWxsIGl0ZW1zIGZyb20gdGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcsIHRyYW5zZm9ybSB0aGVtIGFzXG4gICAqIGNvbmZpZ3VyZWQgYW5kIHVwZGF0ZSB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKi9cbiAgYWxsKCk6IHRoaXM7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9ic2VydmluZyB0aGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldywgdHJhbnNmb3JtaW5nIHRoZSBpdGVtc1xuICAgKiBhbmQgdXBkYXRpbmcgdGhlIHRhcmdldCBkYXRhIHNldC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUgc291cmNlIGRhdGEgc2V0IHdpbGwgYmUgaWdub3JlZC4gSWYgeW91IGZvclxuICAgKiBleGFtcGxlIHdhbnQgdG8gcHJvY2VzcyBhbGwgdGhlIGl0ZW1zIHRoYXQgYXJlIGFscmVhZHkgdGhlcmUgdXNlOlxuICAgKiBgcGlwZS5hbGwoKS5zdGFydCgpYC5cbiAgICovXG4gIHN0YXJ0KCk6IHRoaXM7XG5cbiAgLyoqXG4gICAqIFN0b3Agb2JzZXJ2aW5nIHRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LCB0cmFuc2Zvcm1pbmcgdGhlIGl0ZW1zXG4gICAqIGFuZCB1cGRhdGluZyB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKi9cbiAgc3RvcCgpOiB0aGlzO1xufVxuXG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwaXBlLlxuICovXG5leHBvcnQgdHlwZSBEYXRhUGlwZUZhY3RvcnkgPSBJbnN0YW5jZVR5cGU8dHlwZW9mIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24+O1xuXG4vKipcbiAqIENyZWF0ZSBuZXcgZGF0YSBwaXBlLlxuICpcbiAqIEBwYXJhbSBmcm9tIC0gVGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcuXG4gKiBAcmVtYXJrc1xuICogRXhhbXBsZSB1c2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGludGVyZmFjZSBBcHBJdGVtIHtcbiAqICAgd2hvYW1pOiBzdHJpbmc7XG4gKiAgIGFwcERhdGE6IHVua25vd247XG4gKiAgIHZpc0RhdGE6IFZpc0l0ZW07XG4gKiB9XG4gKiBpbnRlcmZhY2UgVmlzSXRlbSB7XG4gKiAgIGlkOiBudW1iZXI7XG4gKiAgIGxhYmVsOiBzdHJpbmc7XG4gKiAgIGNvbG9yOiBzdHJpbmc7XG4gKiAgIHg6IG51bWJlcjtcbiAqICAgeTogbnVtYmVyO1xuICogfVxuICpcbiAqIGNvbnN0IGRzMSA9IG5ldyBEYXRhU2V0PEFwcEl0ZW0sIFwid2hvYW1pXCI+KFtdLCB7IGZpZWxkSWQ6IFwid2hvYW1pXCIgfSk7XG4gKiBjb25zdCBkczIgPSBuZXcgRGF0YVNldDxWaXNJdGVtLCBcImlkXCI+KCk7XG4gKlxuICogY29uc3QgcGlwZSA9IGNyZWF0ZU5ld0RhdGFQaXBlRnJvbShkczEpXG4gKiAgIC5maWx0ZXIoKGl0ZW0pOiBib29sZWFuID0+IGl0ZW0uZW5hYmxlZCA9PT0gdHJ1ZSlcbiAqICAgLm1hcDxWaXNJdGVtLCBcImlkXCI+KChpdGVtKTogVmlzSXRlbSA9PiBpdGVtLnZpc0RhdGEpXG4gKiAgIC50byhkczIpO1xuICpcbiAqIHBpcGUuc3RhcnQoKTtcbiAqIGBgYFxuICogQHJldHVybnMgQSBmYWN0b3J5IHdob3NlIG1ldGhvZHMgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBwaXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTmV3RGF0YVBpcGVGcm9tPFxuICBTSSBleHRlbmRzIFBhcnRJdGVtPFNQPixcbiAgU1AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4oZnJvbTogRGF0YUludGVyZmFjZTxTSSwgU1A+KTogRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxTSSwgU1A+IHtcbiAgcmV0dXJuIG5ldyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uKGZyb20pO1xufVxuXG50eXBlIFRyYW5zZm9ybWVyPFQ+ID0gKGlucHV0OiBUW10pID0+IFRbXTtcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGlwZS4gVGhpcyBzaG91bGQgYmUgYWNjZXNzaWJsZSBvbmx5IHRocm91Z2hcbiAqIGBjcmVhdGVOZXdEYXRhUGlwZUZyb21gIGZyb20gdGhlIG91dHNpZGUuXG4gKlxuICogQHR5cGVQYXJhbSBTSSAtIFNvdXJjZSBpdGVtIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFNQIC0gU291cmNlIGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqL1xuY2xhc3MgU2ltcGxlRGF0YVBpcGU8XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyxcbiAgVEkgZXh0ZW5kcyBQYXJ0SXRlbTxUUD4sXG4gIFRQIGV4dGVuZHMgc3RyaW5nXG4+IGltcGxlbWVudHMgRGF0YVBpcGVcbntcbiAgLyoqXG4gICAqIEJvdW5kIGxpc3RlbmVycyBmb3IgdXNlIHdpdGggYERhdGFJbnRlcmZhY2VbJ29uJyB8ICdvZmYnXWAuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD4gPSB7XG4gICAgYWRkOiB0aGlzLl9hZGQuYmluZCh0aGlzKSxcbiAgICByZW1vdmU6IHRoaXMuX3JlbW92ZS5iaW5kKHRoaXMpLFxuICAgIHVwZGF0ZTogdGhpcy5fdXBkYXRlLmJpbmQodGhpcyksXG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBkYXRhIHBpcGUuXG4gICAqXG4gICAqIEBwYXJhbSBfc291cmNlIC0gVGhlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyB0aGF0IHdpbGwgYmUgb2JzZXJ2ZWQuXG4gICAqIEBwYXJhbSBfdHJhbnNmb3JtZXJzIC0gQW4gYXJyYXkgb2YgdHJhbnNmb3JtaW5nIGZ1bmN0aW9ucyB0byBiZSB1c2VkIHRvXG4gICAqIGZpbHRlciBvciB0cmFuc2Zvcm0gdGhlIGl0ZW1zIGluIHRoZSBwaXBlLlxuICAgKiBAcGFyYW0gX3RhcmdldCAtIFRoZSBkYXRhIHNldCBvciBkYXRhIHZpZXcgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NvdXJjZTogRGF0YUludGVyZmFjZTxTSSwgU1A+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zZm9ybWVyczogcmVhZG9ubHkgVHJhbnNmb3JtZXI8dW5rbm93bj5bXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YXJnZXQ6IERhdGFTZXQ8VEksIFRQPlxuICApIHt9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBhbGwoKTogdGhpcyB7XG4gICAgdGhpcy5fdGFyZ2V0LnVwZGF0ZSh0aGlzLl90cmFuc2Zvcm1JdGVtcyh0aGlzLl9zb3VyY2UuZ2V0KCkpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RhcnQoKTogdGhpcyB7XG4gICAgdGhpcy5fc291cmNlLm9uKFwiYWRkXCIsIHRoaXMuX2xpc3RlbmVycy5hZGQpO1xuICAgIHRoaXMuX3NvdXJjZS5vbihcInJlbW92ZVwiLCB0aGlzLl9saXN0ZW5lcnMucmVtb3ZlKTtcbiAgICB0aGlzLl9zb3VyY2Uub24oXCJ1cGRhdGVcIiwgdGhpcy5fbGlzdGVuZXJzLnVwZGF0ZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RvcCgpOiB0aGlzIHtcbiAgICB0aGlzLl9zb3VyY2Uub2ZmKFwiYWRkXCIsIHRoaXMuX2xpc3RlbmVycy5hZGQpO1xuICAgIHRoaXMuX3NvdXJjZS5vZmYoXCJyZW1vdmVcIiwgdGhpcy5fbGlzdGVuZXJzLnJlbW92ZSk7XG4gICAgdGhpcy5fc291cmNlLm9mZihcInVwZGF0ZVwiLCB0aGlzLl9saXN0ZW5lcnMudXBkYXRlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRoZSB0cmFuc2Zvcm1lcnMgdG8gdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbXMgLSBUaGUgaXRlbXMgdG8gYmUgdHJhbnNmb3JtZWQuXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2Zvcm1lZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX3RyYW5zZm9ybUl0ZW1zKGl0ZW1zOiB1bmtub3duW10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybWVycy5yZWR1Y2UoKGl0ZW1zLCB0cmFuc2Zvcm0pOiB1bmtub3duW10gPT4ge1xuICAgICAgcmV0dXJuIHRyYW5zZm9ybShpdGVtcyk7XG4gICAgfSwgaXRlbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiBhZGQgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgaWRzIG9mIHRoZSBhZGRlZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX2FkZChcbiAgICBfbmFtZTogUGFyYW1ldGVyczxFdmVudENhbGxiYWNrczxTSSwgU1A+W1wiYWRkXCJdPlswXSxcbiAgICBwYXlsb2FkOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJhZGRcIl0+WzFdXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXlsb2FkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90YXJnZXQuYWRkKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQocGF5bG9hZC5pdGVtcykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYW4gdXBkYXRlIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gX25hbWUgLSBJZ25vcmVkLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIGlkcyBvZiB0aGUgdXBkYXRlZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZShcbiAgICBfbmFtZTogUGFyYW1ldGVyczxFdmVudENhbGxiYWNrczxTSSwgU1A+W1widXBkYXRlXCJdPlswXSxcbiAgICBwYXlsb2FkOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJ1cGRhdGVcIl0+WzFdXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXlsb2FkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90YXJnZXQudXBkYXRlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQocGF5bG9hZC5pdGVtcykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSByZW1vdmUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgZGF0YSBvZiB0aGUgcmVtb3ZlZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX3JlbW92ZShcbiAgICBfbmFtZTogUGFyYW1ldGVyczxFdmVudENhbGxiYWNrczxTSSwgU1A+W1wicmVtb3ZlXCJdPlswXSxcbiAgICBwYXlsb2FkOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJyZW1vdmVcIl0+WzFdXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXlsb2FkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90YXJnZXQucmVtb3ZlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHBheWxvYWQub2xkRGF0YSkpO1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBpcGUgZmFjdG9yeS4gVGhpcyBzaG91bGQgYmUgYWNjZXNzaWJsZVxuICogb25seSB0aHJvdWdoIGBjcmVhdGVOZXdEYXRhUGlwZUZyb21gIGZyb20gdGhlIG91dHNpZGUuXG4gKlxuICogQHR5cGVQYXJhbSBUSSAtIFRhcmdldCBpdGVtIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gKi9cbmNsYXNzIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPiB7XG4gIC8qKlxuICAgKiBBcnJheSB0cmFuc2Zvcm1lcnMgdXNlZCB0byB0cmFuc2Zvcm0gaXRlbXMgd2l0aGluIHRoZSBwaXBlLiBUaGlzIGlzIHR5cGVkXG4gICAqIGFzIGFueSBmb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zZm9ybWVyczogVHJhbnNmb3JtZXI8YW55PltdID0gW107XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBkYXRhIHBpcGUgZmFjdG9yeS4gVGhpcyBpcyBhbiBpbnRlcm5hbCBjb25zdHJ1Y3RvciB0aGF0XG4gICAqIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIHRoaXMgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyBmb3IgdGhpcyBwaXBlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3NvdXJjZTogRGF0YUludGVyZmFjZTxTSSwgU1A+KSB7fVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIGZpbHRlcmluZyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiBnaXZlbiBpdGVtXG4gICAqIHNob3VsZCBiZSBwaXBlZCBhbmQgZmFsc2UgaWYgbm90LlxuICAgKiBAcmV0dXJucyBUaGlzIGZhY3RvcnkgZm9yIGZ1cnRoZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBmaWx0ZXIoXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gYm9vbGVhblxuICApOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFNJLCBTUD4ge1xuICAgIHRoaXMuX3RyYW5zZm9ybWVycy5wdXNoKChpbnB1dCk6IHVua25vd25bXSA9PiBpbnB1dC5maWx0ZXIoY2FsbGJhY2spKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgZWFjaCBzb3VyY2UgaXRlbSB0byBhIG5ldyB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIG1hcHBpbmcgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHNvdXJjZSBpdGVtIGFuZCByZXR1cm5zXG4gICAqIGNvcnJlc3BvbmRpbmcgbWFwcGVkIGl0ZW0uXG4gICAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICAgKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIG1hcDxUSSBleHRlbmRzIFBhcnRJdGVtPFRQPiwgVFAgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCI+KFxuICAgIGNhbGxiYWNrOiAoaXRlbTogU0kpID0+IFRJXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0Lm1hcChjYWxsYmFjaykpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxUSSwgVFA+O1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBlYWNoIHNvdXJjZSBpdGVtIHRvIHplcm8gb3IgbW9yZSBpdGVtcyBvZiBhIG5ldyB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIG1hcHBpbmcgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHNvdXJjZSBpdGVtIGFuZCByZXR1cm5zXG4gICAqIGFuIGFycmF5IG9mIGNvcnJlc3BvbmRpbmcgbWFwcGVkIGl0ZW1zLlxuICAgKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAgICogQHR5cGVQYXJhbSBUUCAtIFRhcmdldCBpdGVtIHR5cGUncyBpZCBwcm9wZXJ0eSBuYW1lLlxuICAgKiBAcmV0dXJucyBUaGlzIGZhY3RvcnkgZm9yIGZ1cnRoZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBmbGF0TWFwPFRJIGV4dGVuZHMgUGFydEl0ZW08VFA+LCBUUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIj4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gVElbXVxuICApOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD4ge1xuICAgIHRoaXMuX3RyYW5zZm9ybWVycy5wdXNoKChpbnB1dCk6IHVua25vd25bXSA9PiBpbnB1dC5mbGF0TWFwKGNhbGxiYWNrKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD47XG4gIH1cblxuICAvKipcbiAgICogQ29ubmVjdCB0aGlzIHBpcGUgdG8gZ2l2ZW4gZGF0YSBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgZGF0YSBzZXQgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGl0ZW1zIGZyb20gdGhpcyBwaXBlLlxuICAgKiBAcmV0dXJucyBUaGUgcGlwZSBjb25uZWN0ZWQgYmV0d2VlbiBnaXZlbiBkYXRhIHNldHMgYW5kIHBlcmZvcm1pbmdcbiAgICogY29uZmlndXJlZCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgcHJvY2Vzc2VkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIHRvKHRhcmdldDogRGF0YVNldDxTSSwgU1A+KTogRGF0YVBpcGUge1xuICAgIHJldHVybiBuZXcgU2ltcGxlRGF0YVBpcGUodGhpcy5fc291cmNlLCB0aGlzLl90cmFuc2Zvcm1lcnMsIHRhcmdldCk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGNhbGwoaW5uZXJSZXN1bHQsIGl0ZXJhdG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbm5lckVycm9yID0gdHJ1ZTtcbiAgICBpbm5lclJlc3VsdCA9IGVycm9yO1xuICB9XG4gIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgaWYgKGlubmVyRXJyb3IpIHRocm93IGlubmVyUmVzdWx0O1xuICBhbk9iamVjdChpbm5lclJlc3VsdCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgRU5UUklFUykge1xuICB0cnkge1xuICAgIHJldHVybiBFTlRSSUVTID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXQpKSByZXR1cm4gZ2V0TWV0aG9kKGl0LCBJVEVSQVRPUilcbiAgICB8fCBnZXRNZXRob2QoaXQsICdAQGl0ZXJhdG9yJylcbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGNhbGwoaXRlcmF0b3JNZXRob2QsIGFyZ3VtZW50KSk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgdmFyIElTX0NPTlNUUlVDVE9SID0gaXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0LCB2YWx1ZTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICEodGhpcyA9PT0gJEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6ICRBcnJheShsZW5ndGgpO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICB0cnkge1xuICAgIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIHdvcmthcm91bmQgb2Ygb2xkIFdlYktpdCArIGBldmFsYCBidWdcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG5cbnZhciBJTkNPUlJFQ1RfSVRFUkFUSU9OID0gIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYWJsZSk7XG59KTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBmcm9tOiBmcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mcm9tJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5mcm9tO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9mcm9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvZnJvbVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9mdWxsL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvck1ldGhvZDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG4vLyBgQXJyYXkuaXNBcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmlzYXJyYXlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUgfSwge1xuICBpc0FycmF5OiBpc0FycmF5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5pc0FycmF5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggYW5kIFNhZmFyaSA8PSAxNS40LCBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5wdXNoJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3B1c2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9wdXNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnB1c2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnB1c2gpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvaW5zdGFuY2UvcHVzaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgbmF0aXZlU2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzbGljZScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNsaWNlXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gICAgLy8gaW5saW5lIGBBcnJheVNwZWNpZXNDcmVhdGVgIGZvciB1c2FnZSBuYXRpdmUgYEFycmF5I3NsaWNlYCB3aGVyZSBpdCdzIHBvc3NpYmxlXG4gICAgdmFyIENvbnN0cnVjdG9yLCByZXN1bHQsIG47XG4gICAgaWYgKGlzQXJyYXkoTykpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gTy5jb25zdHJ1Y3RvcjtcbiAgICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgICBpZiAoaXNDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvcikgJiYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVTbGljZShPLCBrLCBmaW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQgPSBuZXcgKENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNsaWNlJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NsaWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc2xpY2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc2xpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNsaWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9zbGljZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9hcnJheS9mcm9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufSIsICJpbXBvcnQgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzXCI7XG5pbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzXCI7XG5pbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIHZhciBfY29udGV4dDtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBfc2xpY2VJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pKS5jYWxsKF9jb250ZXh0LCA4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBfQXJyYXkkZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59IiwgImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsICJpbXBvcnQgX0FycmF5JGlzQXJyYXkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9pcy1hcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoX0FycmF5JGlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfZ2V0SXRlcmF0b3JNZXRob2QgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCI7XG5pbXBvcnQgX3B1c2hJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcHVzaC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgX1N5bWJvbCAmJiBfZ2V0SXRlcmF0b3JNZXRob2QocikgfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChfcHVzaEluc3RhbmNlUHJvcGVydHkoYSkuY2FsbChhLCBlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsICJpbXBvcnQgYXJyYXlXaXRob3V0SG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59IiwgImltcG9ydCBfQXJyYXkkaXNBcnJheSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2lzLWFycmF5LmpzXCI7XG5pbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChfQXJyYXkkaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufSIsICJpbXBvcnQgX1N5bWJvbCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiO1xuaW1wb3J0IF9nZXRJdGVyYXRvck1ldGhvZCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanNcIjtcbmltcG9ydCBfQXJyYXkkZnJvbSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2Zyb20uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIF9TeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgX2dldEl0ZXJhdG9yTWV0aG9kKGl0ZXIpICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIF9BcnJheSRmcm9tKGl0ZXIpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnY29uY2F0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvY29uY2F0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmNvbmNhdDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuY29uY2F0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zbGljZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xuXG4vLyBgUmVmbGVjdC5vd25LZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5vd25rZXlzXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBvd25LZXlzOiBvd25LZXlzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3Qub3duLWtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlJlZmxlY3Qub3duS2V5cztcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5XCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICFTVFJJQ1RfTUVUSE9EID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbn0gOiBbXS5mb3JFYWNoO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9PSBmb3JFYWNoIH0sIHtcbiAgZm9yRWFjaDogZm9yRWFjaFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmb3JFYWNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZvckVhY2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciBuYXRpdmVSZXZlcnNlID0gdW5jdXJyeVRoaXMoW10ucmV2ZXJzZSk7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJldmVyc2Vcbi8vIGZpeCBmb3IgU2FmYXJpIDEyLjAgYnVnXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4Nzk0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTdHJpbmcodGVzdCkgPT09IFN0cmluZyh0ZXN0LnJldmVyc2UoKSkgfSwge1xuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnbiAtLSBkaXJ0eSBoYWNrXG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgcmV0dXJuIG5hdGl2ZVJldmVyc2UodGhpcyk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdyZXZlcnNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZXZlcnNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZXZlcnNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JldmVyc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgUCkge1xuICBpZiAoIWRlbGV0ZSBPW1BdKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAnICsgdHJ5VG9TdHJpbmcoUCkgKyAnIG9mICcgKyB0cnlUb1N0cmluZyhPKSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzcGxpY2UnKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNwbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zcGxpY2Vcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNwbGljZTogZnVuY3Rpb24gc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCAvKiAsIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFjdHVhbFN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpbnNlcnRDb3VudCwgYWN0dWFsRGVsZXRlQ291bnQsIEEsIGssIGZyb20sIHRvO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgIGluc2VydENvdW50ID0gYWN0dWFsRGVsZXRlQ291bnQgPSAwO1xuICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgICBpbnNlcnRDb3VudCA9IDA7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IGxlbiAtIGFjdHVhbFN0YXJ0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnNlcnRDb3VudCA9IGFyZ3VtZW50c0xlbmd0aCAtIDI7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IG1pbihtYXgodG9JbnRlZ2VyT3JJbmZpbml0eShkZWxldGVDb3VudCksIDApLCBsZW4gLSBhY3R1YWxTdGFydCk7XG4gICAgfVxuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBpbnNlcnRDb3VudCAtIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBmb3IgKGsgPSAwOyBrIDwgYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgZnJvbSA9IGFjdHVhbFN0YXJ0ICsgaztcbiAgICAgIGlmIChmcm9tIGluIE8pIGNyZWF0ZVByb3BlcnR5KEEsIGssIE9bZnJvbV0pO1xuICAgIH1cbiAgICBBLmxlbmd0aCA9IGFjdHVhbERlbGV0ZUNvdW50O1xuICAgIGlmIChpbnNlcnRDb3VudCA8IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBhY3R1YWxTdGFydDsgayA8IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50OyBrKyspIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudDtcbiAgICAgICAgdG8gPSBrICsgaW5zZXJ0Q291bnQ7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgICAgZm9yIChrID0gbGVuOyBrID4gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudDsgay0tKSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgayAtIDEpO1xuICAgIH0gZWxzZSBpZiAoaW5zZXJ0Q291bnQgPiBhY3R1YWxEZWxldGVDb3VudCkge1xuICAgICAgZm9yIChrID0gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsgPiBhY3R1YWxTdGFydDsgay0tKSB7XG4gICAgICAgIGZyb20gPSBrICsgYWN0dWFsRGVsZXRlQ291bnQgLSAxO1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudCAtIDE7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGsgPSAwOyBrIDwgaW5zZXJ0Q291bnQ7IGsrKykge1xuICAgICAgT1trICsgYWN0dWFsU3RhcnRdID0gYXJndW1lbnRzW2sgKyAyXTtcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudCk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NwbGljZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NwbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zcGxpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNwbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBzaG91bGQgaGF2ZSBjb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgKEVkZ2UgYnVnKVxuICBpZiAoREVTQ1JJUFRPUlMgJiYgJGFzc2lnbih7IGI6IDEgfSwgJGFzc2lnbihkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsICdiJywge1xuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSksIHsgYjogMiB9KSkuYiAhPT0gMSkgcmV0dXJuIHRydWU7XG4gIC8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3ltYm9sIC0tIHNhZmVcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnYXNzaWduIGRldGVjdGlvbicpO1xuICB2YXIgYWxwaGFiZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW3N5bWJvbF0gPSA3O1xuICBhbHBoYWJldC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoY2hyKSB7IEJbY2hyXSA9IGNocjsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtzeW1ib2xdICE9PSA3IHx8IG9iamVjdEtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9PSBhbHBoYWJldDtcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG4gIHdoaWxlIChhcmd1bWVudHNMZW5ndGggPiBpbmRleCkge1xuICAgIHZhciBTID0gSW5kZXhlZE9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KG9iamVjdEtleXMoUyksIGdldE93blByb3BlcnR5U3ltYm9scyhTKSkgOiBvYmplY3RLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlLCBTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24nKTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGFyaXR5OiAyLCBmb3JjZWQ6IE9iamVjdC5hc3NpZ24gIT09IGFzc2lnbiB9LCB7XG4gIGFzc2lnbjogYXNzaWduXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5hc3NpZ247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldFByb3RvdHlwZU9mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUywgc2hhbTogIUNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiB9LCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiBuYXRpdmVHZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgY3JlYXRlOiBjcmVhdGVcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlKFAsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoUCwgRCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2NyZWF0ZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1qc29uIC0tIHNhZmVcbmlmICghcGF0aC5KU09OKSBwYXRoLkpTT04gPSB7IHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnkgfTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgcmV0dXJuIGFwcGx5KHBhdGguSlNPTi5zdHJpbmdpZnksIG51bGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9qc29uL3N0cmluZ2lmeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQnVuIC0tIERlbm8gY2FzZSAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgQnVuID09ICdmdW5jdGlvbicgJiYgQnVuICYmIHR5cGVvZiBCdW4udmVyc2lvbiA9PSAnc3RyaW5nJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFzc2VkLCByZXF1aXJlZCkge1xuICBpZiAocGFzc2VkIDwgcmVxdWlyZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuICByZXR1cm4gcGFzc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIEVOR0lORV9JU19CVU4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bicpO1xudmFyIFVTRVJfQUdFTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xuXG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG4vLyBkaXJ0eSBJRTktIGFuZCBCdW4gMC4zLjAtIGNoZWNrc1xudmFyIFdSQVAgPSAvTVNJRSAuXFwuLy50ZXN0KFVTRVJfQUdFTlQpIHx8IEVOR0lORV9JU19CVU4gJiYgKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlcnNpb24gPSBnbG9iYWwuQnVuLnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoIDwgMyB8fCB2ZXJzaW9uWzBdID09PSAnMCcgJiYgKHZlcnNpb25bMV0gPCAzIHx8IHZlcnNpb25bMV0gPT09ICczJyAmJiB2ZXJzaW9uWzJdID09PSAnMCcpO1xufSkoKTtcblxuLy8gSUU5LSAvIEJ1biAwLjMuMC0gc2V0VGltZW91dCAvIHNldEludGVydmFsIC8gc2V0SW1tZWRpYXRlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjdGltZXJzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzE2MzNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaGFzVGltZUFyZykge1xuICB2YXIgZmlyc3RQYXJhbUluZGV4ID0gaGFzVGltZUFyZyA/IDIgOiAxO1xuICByZXR1cm4gV1JBUCA/IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpID4gZmlyc3RQYXJhbUluZGV4O1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIHBhcmFtcyA9IGJvdW5kQXJncyA/IGFycmF5U2xpY2UoYXJndW1lbnRzLCBmaXJzdFBhcmFtSW5kZXgpIDogW107XG4gICAgdmFyIGNhbGxiYWNrID0gYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHRoaXMsIHBhcmFtcyk7XG4gICAgfSA6IGZuO1xuICAgIHJldHVybiBoYXNUaW1lQXJnID8gc2NoZWR1bGVyKGNhbGxiYWNrLCB0aW1lb3V0KSA6IHNjaGVkdWxlcihjYWxsYmFjayk7XG4gIH0gOiBzY2hlZHVsZXI7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRJbnRlcnZhbCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldEludGVydmFsLCB0cnVlKTtcblxuLy8gQnVuIC8gSUU5LSBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0SW50ZXJ2YWwgIT09IHNldEludGVydmFsIH0sIHtcbiAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG52YXIgc2V0VGltZW91dCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldFRpbWVvdXQsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldFRpbWVvdXQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0dGltZW91dFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0VGltZW91dCAhPT0gc2V0VGltZW91dCB9LCB7XG4gIHNldFRpbWVvdXQ6IHNldFRpbWVvdXRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnRpbWVycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0VGltZW91dDtcbiIsICJmdW5jdGlvbiBFbWl0dGVyKG9iamVjdCkge1xuXHRpZiAob2JqZWN0KSB7XG5cdFx0cmV0dXJuIG1peGluKG9iamVjdCk7XG5cdH1cblxuXHR0aGlzLl9jYWxsYmFja3MgPSBuZXcgTWFwKCk7XG59XG5cbmZ1bmN0aW9uIG1peGluKG9iamVjdCkge1xuXHRPYmplY3QuYXNzaWduKG9iamVjdCwgRW1pdHRlci5wcm90b3R5cGUpO1xuXHRvYmplY3QuX2NhbGxiYWNrcyA9IG5ldyBNYXAoKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuRW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXZlbnQsIGxpc3RlbmVyKSB7XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpID8/IFtdO1xuXHRjYWxsYmFja3MucHVzaChsaXN0ZW5lcik7XG5cdHRoaXMuX2NhbGxiYWNrcy5zZXQoZXZlbnQsIGNhbGxiYWNrcyk7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0Y29uc3Qgb24gPSAoLi4uYXJndW1lbnRzXykgPT4ge1xuXHRcdHRoaXMub2ZmKGV2ZW50LCBvbik7XG5cdFx0bGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzXyk7XG5cdH07XG5cblx0b24uZm4gPSBsaXN0ZW5lcjtcblx0dGhpcy5vbihldmVudCwgb24pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0aWYgKGV2ZW50ID09PSB1bmRlZmluZWQgJiYgbGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2NhbGxiYWNrcy5jbGVhcigpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aWYgKGxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcblx0XHR0aGlzLl9jYWxsYmFja3MuZGVsZXRlKGV2ZW50KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpO1xuXHRpZiAoY2FsbGJhY2tzKSB7XG5cdFx0Zm9yIChjb25zdCBbaW5kZXgsIGNhbGxiYWNrXSBvZiBjYWxsYmFja3MuZW50cmllcygpKSB7XG5cdFx0XHRpZiAoY2FsbGJhY2sgPT09IGxpc3RlbmVyIHx8IGNhbGxiYWNrLmZuID09PSBsaXN0ZW5lcikge1xuXHRcdFx0XHRjYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGNhbGxiYWNrcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuX2NhbGxiYWNrcy5kZWxldGUoZXZlbnQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9jYWxsYmFja3Muc2V0KGV2ZW50LCBjYWxsYmFja3MpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldmVudCwgLi4uYXJndW1lbnRzXykge1xuXHRjb25zdCBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MuZ2V0KGV2ZW50KTtcblx0aWYgKGNhbGxiYWNrcykge1xuXHRcdC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGNhbGxiYWNrcyBhcnJheSB0byBhdm9pZCBpc3N1ZXMgaWYgaXQncyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uXG5cdFx0Y29uc3QgY2FsbGJhY2tzQ29weSA9IFsuLi5jYWxsYmFja3NdO1xuXG5cdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBjYWxsYmFja3NDb3B5KSB7XG5cdFx0XHRjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCkgPz8gW107XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdGlmIChldmVudCkge1xuXHRcdHJldHVybiB0aGlzLmxpc3RlbmVycyhldmVudCkubGVuZ3RoO1xuXHR9XG5cblx0bGV0IHRvdGFsQ291bnQgPSAwO1xuXHRmb3IgKGNvbnN0IGNhbGxiYWNrcyBvZiB0aGlzLl9jYWxsYmFja3MudmFsdWVzKCkpIHtcblx0XHR0b3RhbENvdW50ICs9IGNhbGxiYWNrcy5sZW5ndGg7XG5cdH1cblxuXHRyZXR1cm4gdG90YWxDb3VudDtcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRyZXR1cm4gdGhpcy5saXN0ZW5lckNvdW50KGV2ZW50KSA+IDA7XG59O1xuXG4vLyBBbGlhc2VzXG5FbWl0dGVyLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub247XG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vZmY7XG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBFbWl0dGVyLnByb3RvdHlwZS5vZmY7XG5cbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IEVtaXR0ZXI7XG59XG4iLCAiLyohIEhhbW1lci5KUyAtIHYyLjAuMTctcmMgLSAyMDE5LTEyLTE2XG4gKiBodHRwOi8vbmF2ZXIuZ2l0aHViLmlvL2VnanNcbiAqXG4gKiBGb3JrZWQgQnkgTmF2ZXIgZWdqc1xuICogQ29weXJpZ2h0IChjKSBoYW1tZXJqc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlICovXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGV4dGVuZCBvYmplY3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgaW4gZGVzdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBvbmVzIGluIHNyYy5cbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBvYmplY3RzX3RvX2Fzc2lnblxuICogQHJldHVybnMge09iamVjdH0gdGFyZ2V0XG4gKi9cbnZhciBhc3NpZ247XG5cbmlmICh0eXBlb2YgT2JqZWN0LmFzc2lnbiAhPT0gJ2Z1bmN0aW9uJykge1xuICBhc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0KSB7XG4gICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IHRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IE9iamVjdCh0YXJnZXQpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdO1xuXG4gICAgICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQgJiYgc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIG5leHRLZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuZXh0S2V5KSkge1xuICAgICAgICAgICAgb3V0cHV0W25leHRLZXldID0gc291cmNlW25leHRLZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG59IGVsc2Uge1xuICBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xufVxuXG52YXIgYXNzaWduJDEgPSBhc3NpZ247XG5cbnZhciBWRU5ET1JfUFJFRklYRVMgPSBbJycsICd3ZWJraXQnLCAnTW96JywgJ01TJywgJ21zJywgJ28nXTtcbnZhciBURVNUX0VMRU1FTlQgPSB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyB7XG4gIHN0eWxlOiB7fVxufSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xudmFyIFRZUEVfRlVOQ1RJT04gPSAnZnVuY3Rpb24nO1xudmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICBhYnMgPSBNYXRoLmFicztcbnZhciBub3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBwcmVmaXhlZCBwcm9wZXJ0eVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7U3RyaW5nfFVuZGVmaW5lZH0gcHJlZml4ZWRcbiAqL1xuXG5mdW5jdGlvbiBwcmVmaXhlZChvYmosIHByb3BlcnR5KSB7XG4gIHZhciBwcmVmaXg7XG4gIHZhciBwcm9wO1xuICB2YXIgY2FtZWxQcm9wID0gcHJvcGVydHlbMF0udG9VcHBlckNhc2UoKSArIHByb3BlcnR5LnNsaWNlKDEpO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBWRU5ET1JfUFJFRklYRVMubGVuZ3RoKSB7XG4gICAgcHJlZml4ID0gVkVORE9SX1BSRUZJWEVTW2ldO1xuICAgIHByb3AgPSBwcmVmaXggPyBwcmVmaXggKyBjYW1lbFByb3AgOiBwcm9wZXJ0eTtcblxuICAgIGlmIChwcm9wIGluIG9iaikge1xuICAgICAgcmV0dXJuIHByb3A7XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tbmV3LWZ1bmMsIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG52YXIgd2luO1xuXG5pZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAvLyB3aW5kb3cgaXMgdW5kZWZpbmVkIGluIG5vZGUuanNcbiAgd2luID0ge307XG59IGVsc2Uge1xuICB3aW4gPSB3aW5kb3c7XG59XG5cbnZhciBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gPSBwcmVmaXhlZChURVNUX0VMRU1FTlQuc3R5bGUsICd0b3VjaEFjdGlvbicpO1xudmFyIE5BVElWRV9UT1VDSF9BQ1RJT04gPSBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gIT09IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uUHJvcHMoKSB7XG4gIGlmICghTkFUSVZFX1RPVUNIX0FDVElPTikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0b3VjaE1hcCA9IHt9O1xuICB2YXIgY3NzU3VwcG9ydHMgPSB3aW4uQ1NTICYmIHdpbi5DU1Muc3VwcG9ydHM7XG4gIFsnYXV0bycsICdtYW5pcHVsYXRpb24nLCAncGFuLXknLCAncGFuLXgnLCAncGFuLXggcGFuLXknLCAnbm9uZSddLmZvckVhY2goZnVuY3Rpb24gKHZhbCkge1xuICAgIC8vIElmIGNzcy5zdXBwb3J0cyBpcyBub3Qgc3VwcG9ydGVkIGJ1dCB0aGVyZSBpcyBuYXRpdmUgdG91Y2gtYWN0aW9uIGFzc3VtZSBpdCBzdXBwb3J0c1xuICAgIC8vIGFsbCB2YWx1ZXMuIFRoaXMgaXMgdGhlIGNhc2UgZm9yIElFIDEwIGFuZCAxMS5cbiAgICByZXR1cm4gdG91Y2hNYXBbdmFsXSA9IGNzc1N1cHBvcnRzID8gd2luLkNTUy5zdXBwb3J0cygndG91Y2gtYWN0aW9uJywgdmFsKSA6IHRydWU7XG4gIH0pO1xuICByZXR1cm4gdG91Y2hNYXA7XG59XG5cbnZhciBUT1VDSF9BQ1RJT05fQ09NUFVURSA9ICdjb21wdXRlJztcbnZhciBUT1VDSF9BQ1RJT05fQVVUTyA9ICdhdXRvJztcbnZhciBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OID0gJ21hbmlwdWxhdGlvbic7IC8vIG5vdCBpbXBsZW1lbnRlZFxuXG52YXIgVE9VQ0hfQUNUSU9OX05PTkUgPSAnbm9uZSc7XG52YXIgVE9VQ0hfQUNUSU9OX1BBTl9YID0gJ3Bhbi14JztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1kgPSAncGFuLXknO1xudmFyIFRPVUNIX0FDVElPTl9NQVAgPSBnZXRUb3VjaEFjdGlvblByb3BzKCk7XG5cbnZhciBNT0JJTEVfUkVHRVggPSAvbW9iaWxlfHRhYmxldHxpcChhZHxob25lfG9kKXxhbmRyb2lkL2k7XG52YXIgU1VQUE9SVF9UT1VDSCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbjtcbnZhciBTVVBQT1JUX1BPSU5URVJfRVZFTlRTID0gcHJlZml4ZWQod2luLCAnUG9pbnRlckV2ZW50JykgIT09IHVuZGVmaW5lZDtcbnZhciBTVVBQT1JUX09OTFlfVE9VQ0ggPSBTVVBQT1JUX1RPVUNIICYmIE1PQklMRV9SRUdFWC50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElOUFVUX1RZUEVfVE9VQ0ggPSAndG91Y2gnO1xudmFyIElOUFVUX1RZUEVfUEVOID0gJ3Blbic7XG52YXIgSU5QVVRfVFlQRV9NT1VTRSA9ICdtb3VzZSc7XG52YXIgSU5QVVRfVFlQRV9LSU5FQ1QgPSAna2luZWN0JztcbnZhciBDT01QVVRFX0lOVEVSVkFMID0gMjU7XG52YXIgSU5QVVRfU1RBUlQgPSAxO1xudmFyIElOUFVUX01PVkUgPSAyO1xudmFyIElOUFVUX0VORCA9IDQ7XG52YXIgSU5QVVRfQ0FOQ0VMID0gODtcbnZhciBESVJFQ1RJT05fTk9ORSA9IDE7XG52YXIgRElSRUNUSU9OX0xFRlQgPSAyO1xudmFyIERJUkVDVElPTl9SSUdIVCA9IDQ7XG52YXIgRElSRUNUSU9OX1VQID0gODtcbnZhciBESVJFQ1RJT05fRE9XTiA9IDE2O1xudmFyIERJUkVDVElPTl9IT1JJWk9OVEFMID0gRElSRUNUSU9OX0xFRlQgfCBESVJFQ1RJT05fUklHSFQ7XG52YXIgRElSRUNUSU9OX1ZFUlRJQ0FMID0gRElSRUNUSU9OX1VQIHwgRElSRUNUSU9OX0RPV047XG52YXIgRElSRUNUSU9OX0FMTCA9IERJUkVDVElPTl9IT1JJWk9OVEFMIHwgRElSRUNUSU9OX1ZFUlRJQ0FMO1xudmFyIFBST1BTX1hZID0gWyd4JywgJ3knXTtcbnZhciBQUk9QU19DTElFTlRfWFkgPSBbJ2NsaWVudFgnLCAnY2xpZW50WSddO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3YWxrIG9iamVjdHMgYW5kIGFycmF5c1xuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICB2YXIgaTtcblxuICBpZiAoIW9iaikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChvYmouZm9yRWFjaCkge1xuICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgfSBlbHNlIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgb2JqLmxlbmd0aCkge1xuICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgICBpKys7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgIG9iai5oYXNPd25Qcm9wZXJ0eShpKSAmJiBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogbGV0IGEgYm9vbGVhbiB2YWx1ZSBhbHNvIGJlIGEgZnVuY3Rpb24gdGhhdCBtdXN0IHJldHVybiBhIGJvb2xlYW5cbiAqIHRoaXMgZmlyc3QgaXRlbSBpbiBhcmdzIHdpbGwgYmUgdXNlZCBhcyB0aGUgY29udGV4dFxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSB2YWxcbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdzXVxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cblxuZnVuY3Rpb24gYm9vbE9yRm4odmFsLCBhcmdzKSB7XG4gIGlmICh0eXBlb2YgdmFsID09PSBUWVBFX0ZVTkNUSU9OKSB7XG4gICAgcmV0dXJuIHZhbC5hcHBseShhcmdzID8gYXJnc1swXSB8fCB1bmRlZmluZWQgOiB1bmRlZmluZWQsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc21hbGwgaW5kZXhPZiB3cmFwcGVyXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gZmluZFxuICogQHJldHVybnMge0Jvb2xlYW59IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGluU3RyKHN0ciwgZmluZCkge1xuICByZXR1cm4gc3RyLmluZGV4T2YoZmluZCkgPiAtMTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogd2hlbiB0aGUgdG91Y2hBY3Rpb25zIGFyZSBjb2xsZWN0ZWQgdGhleSBhcmUgbm90IGEgdmFsaWQgdmFsdWUsIHNvIHdlIG5lZWQgdG8gY2xlYW4gdGhpbmdzIHVwLiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWN0aW9uc1xuICogQHJldHVybnMgeyp9XG4gKi9cblxuZnVuY3Rpb24gY2xlYW5Ub3VjaEFjdGlvbnMoYWN0aW9ucykge1xuICAvLyBub25lXG4gIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTk9ORSkpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gIH1cblxuICB2YXIgaGFzUGFuWCA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWCk7XG4gIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKTsgLy8gaWYgYm90aCBwYW4teCBhbmQgcGFuLXkgYXJlIHNldCAoZGlmZmVyZW50IHJlY29nbml6ZXJzXG4gIC8vIGZvciBkaWZmZXJlbnQgZGlyZWN0aW9ucywgZS5nLiBob3Jpem9udGFsIHBhbiBidXQgdmVydGljYWwgc3dpcGU/KVxuICAvLyB3ZSBuZWVkIG5vbmUgKGFzIG90aGVyd2lzZSB3aXRoIHBhbi14IHBhbi15IGNvbWJpbmVkIG5vbmUgb2YgdGhlc2VcbiAgLy8gcmVjb2duaXplcnMgd2lsbCB3b3JrLCBzaW5jZSB0aGUgYnJvd3NlciB3b3VsZCBoYW5kbGUgYWxsIHBhbm5pbmdcblxuICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgcmV0dXJuIFRPVUNIX0FDVElPTl9OT05FO1xuICB9IC8vIHBhbi14IE9SIHBhbi15XG5cblxuICBpZiAoaGFzUGFuWCB8fCBoYXNQYW5ZKSB7XG4gICAgcmV0dXJuIGhhc1BhblggPyBUT1VDSF9BQ1RJT05fUEFOX1ggOiBUT1VDSF9BQ1RJT05fUEFOX1k7XG4gIH0gLy8gbWFuaXB1bGF0aW9uXG5cblxuICBpZiAoaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTikpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTjtcbiAgfVxuXG4gIHJldHVybiBUT1VDSF9BQ1RJT05fQVVUTztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogVG91Y2ggQWN0aW9uXG4gKiBzZXRzIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eSBvciB1c2VzIHRoZSBqcyBhbHRlcm5hdGl2ZVxuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBUb3VjaEFjdGlvbiA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRvdWNoQWN0aW9uKG1hbmFnZXIsIHZhbHVlKSB7XG4gICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICB0aGlzLnNldCh2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWUgb24gdGhlIGVsZW1lbnQgb3IgZW5hYmxlIHRoZSBwb2x5ZmlsbFxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gVG91Y2hBY3Rpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAvLyBmaW5kIG91dCB0aGUgdG91Y2gtYWN0aW9uIGJ5IHRoZSBldmVudCBoYW5kbGVyc1xuICAgIGlmICh2YWx1ZSA9PT0gVE9VQ0hfQUNUSU9OX0NPTVBVVEUpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5jb21wdXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKE5BVElWRV9UT1VDSF9BQ1RJT04gJiYgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGUgJiYgVE9VQ0hfQUNUSU9OX01BUFt2YWx1ZV0pIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbGVtZW50LnN0eWxlW1BSRUZJWEVEX1RPVUNIX0FDVElPTl0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGlvbnMgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGp1c3QgcmUtc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZVxuICAgKi9cblxuXG4gIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgdGhpcy5zZXQodGhpcy5tYW5hZ2VyLm9wdGlvbnMudG91Y2hBY3Rpb24pO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY29tcHV0ZSB0aGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgcmVjb2duaXplcidzIHNldHRpbmdzXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHZhbHVlXG4gICAqL1xuXG5cbiAgX3Byb3RvLmNvbXB1dGUgPSBmdW5jdGlvbiBjb21wdXRlKCkge1xuICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgZWFjaCh0aGlzLm1hbmFnZXIucmVjb2duaXplcnMsIGZ1bmN0aW9uIChyZWNvZ25pemVyKSB7XG4gICAgICBpZiAoYm9vbE9yRm4ocmVjb2duaXplci5vcHRpb25zLmVuYWJsZSwgW3JlY29nbml6ZXJdKSkge1xuICAgICAgICBhY3Rpb25zID0gYWN0aW9ucy5jb25jYXQocmVjb2duaXplci5nZXRUb3VjaEFjdGlvbigpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xlYW5Ub3VjaEFjdGlvbnMoYWN0aW9ucy5qb2luKCcgJykpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGVhY2ggaW5wdXQgY3ljbGUgYW5kIHByb3ZpZGVzIHRoZSBwcmV2ZW50aW5nIG9mIHRoZSBicm93c2VyIGJlaGF2aW9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by5wcmV2ZW50RGVmYXVsdHMgPSBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdHMoaW5wdXQpIHtcbiAgICB2YXIgc3JjRXZlbnQgPSBpbnB1dC5zcmNFdmVudDtcbiAgICB2YXIgZGlyZWN0aW9uID0gaW5wdXQub2Zmc2V0RGlyZWN0aW9uOyAvLyBpZiB0aGUgdG91Y2ggYWN0aW9uIGRpZCBwcmV2ZW50ZWQgb25jZSB0aGlzIHNlc3Npb25cblxuICAgIGlmICh0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQpIHtcbiAgICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgdmFyIGhhc05vbmUgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTk9ORSkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fUEFOX1ldO1xuICAgIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fUEFOX1hdO1xuXG4gICAgaWYgKGhhc05vbmUpIHtcbiAgICAgIC8vIGRvIG5vdCBwcmV2ZW50IGRlZmF1bHRzIGlmIHRoaXMgaXMgYSB0YXAgZ2VzdHVyZVxuICAgICAgdmFyIGlzVGFwUG9pbnRlciA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gMTtcbiAgICAgIHZhciBpc1RhcE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCAyO1xuICAgICAgdmFyIGlzVGFwVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgMjUwO1xuXG4gICAgICBpZiAoaXNUYXBQb2ludGVyICYmIGlzVGFwTW92ZW1lbnQgJiYgaXNUYXBUb3VjaFRpbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICAgIC8vIGBwYW4teCBwYW4teWAgbWVhbnMgYnJvd3NlciBoYW5kbGVzIGFsbCBzY3JvbGxpbmcvcGFubmluZywgZG8gbm90IHByZXZlbnRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaGFzTm9uZSB8fCBoYXNQYW5ZICYmIGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMIHx8IGhhc1BhblggJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmV2ZW50U3JjKHNyY0V2ZW50KTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYWxsIHByZXZlbnREZWZhdWx0IHRvIHByZXZlbnQgdGhlIGJyb3dzZXIncyBkZWZhdWx0IGJlaGF2aW9yIChzY3JvbGxpbmcgaW4gbW9zdCBjYXNlcylcbiAgICogQHBhcmFtIHtPYmplY3R9IHNyY0V2ZW50XG4gICAqL1xuXG5cbiAgX3Byb3RvLnByZXZlbnRTcmMgPSBmdW5jdGlvbiBwcmV2ZW50U3JjKHNyY0V2ZW50KSB7XG4gICAgdGhpcy5tYW5hZ2VyLnNlc3Npb24ucHJldmVudGVkID0gdHJ1ZTtcbiAgICBzcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuXG4gIHJldHVybiBUb3VjaEFjdGlvbjtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZmluZCBpZiBhIG5vZGUgaXMgaW4gdGhlIGdpdmVuIHBhcmVudFxuICogQG1ldGhvZCBoYXNQYXJlbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybiB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaGFzUGFyZW50KG5vZGUsIHBhcmVudCkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlID09PSBwYXJlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgY2VudGVyIG9mIGFsbCB0aGUgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtPYmplY3R9IGNlbnRlciBjb250YWlucyBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzXG4gKi9cblxuZnVuY3Rpb24gZ2V0Q2VudGVyKHBvaW50ZXJzKSB7XG4gIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDsgLy8gbm8gbmVlZCB0byBsb29wIHdoZW4gb25seSBvbmUgdG91Y2hcblxuICBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcm91bmQocG9pbnRlcnNbMF0uY2xpZW50WCksXG4gICAgICB5OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRZKVxuICAgIH07XG4gIH1cblxuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgcG9pbnRlcnNMZW5ndGgpIHtcbiAgICB4ICs9IHBvaW50ZXJzW2ldLmNsaWVudFg7XG4gICAgeSArPSBwb2ludGVyc1tpXS5jbGllbnRZO1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAvIHBvaW50ZXJzTGVuZ3RoKSxcbiAgICB5OiByb3VuZCh5IC8gcG9pbnRlcnNMZW5ndGgpXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBhIHNpbXBsZSBjbG9uZSBmcm9tIHRoZSBpbnB1dCB1c2VkIGZvciBzdG9yYWdlIG9mIGZpcnN0SW5wdXQgYW5kIGZpcnN0TXVsdGlwbGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICogQHJldHVybnMge09iamVjdH0gY2xvbmVkSW5wdXREYXRhXG4gKi9cblxuZnVuY3Rpb24gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpIHtcbiAgLy8gbWFrZSBhIHNpbXBsZSBjb3B5IG9mIHRoZSBwb2ludGVycyBiZWNhdXNlIHdlIHdpbGwgZ2V0IGEgcmVmZXJlbmNlIGlmIHdlIGRvbid0XG4gIC8vIHdlIG9ubHkgbmVlZCBjbGllbnRYWSBmb3IgdGhlIGNhbGN1bGF0aW9uc1xuICB2YXIgcG9pbnRlcnMgPSBbXTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgaW5wdXQucG9pbnRlcnMubGVuZ3RoKSB7XG4gICAgcG9pbnRlcnNbaV0gPSB7XG4gICAgICBjbGllbnRYOiByb3VuZChpbnB1dC5wb2ludGVyc1tpXS5jbGllbnRYKSxcbiAgICAgIGNsaWVudFk6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFkpXG4gICAgfTtcbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRpbWVTdGFtcDogbm93KCksXG4gICAgcG9pbnRlcnM6IHBvaW50ZXJzLFxuICAgIGNlbnRlcjogZ2V0Q2VudGVyKHBvaW50ZXJzKSxcbiAgICBkZWx0YVg6IGlucHV0LmRlbHRhWCxcbiAgICBkZWx0YVk6IGlucHV0LmRlbHRhWVxuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIGFic29sdXRlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtPYmplY3R9IHAxIHt4LCB5fVxuICogQHBhcmFtIHtPYmplY3R9IHAyIHt4LCB5fVxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICovXG5cbmZ1bmN0aW9uIGdldERpc3RhbmNlKHAxLCBwMiwgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHByb3BzID0gUFJPUFNfWFk7XG4gIH1cblxuICB2YXIgeCA9IHAyW3Byb3BzWzBdXSAtIHAxW3Byb3BzWzBdXTtcbiAgdmFyIHkgPSBwMltwcm9wc1sxXV0gLSBwMVtwcm9wc1sxXV07XG4gIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgYW5nbGUgYmV0d2VlbiB0d28gY29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMVxuICogQHBhcmFtIHtPYmplY3R9IHAyXG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGFuZ2xlXG4gKi9cblxuZnVuY3Rpb24gZ2V0QW5nbGUocDEsIHAyLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgfVxuXG4gIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dO1xuICB2YXIgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgcmV0dXJuIE1hdGguYXRhbjIoeSwgeCkgKiAxODAgLyBNYXRoLlBJO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIGRpcmVjdGlvbiBiZXR3ZWVuIHR3byBwb2ludHNcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7TnVtYmVyfSBkaXJlY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBnZXREaXJlY3Rpb24oeCwgeSkge1xuICBpZiAoeCA9PT0geSkge1xuICAgIHJldHVybiBESVJFQ1RJT05fTk9ORTtcbiAgfVxuXG4gIGlmIChhYnMoeCkgPj0gYWJzKHkpKSB7XG4gICAgcmV0dXJuIHggPCAwID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFQ7XG4gIH1cblxuICByZXR1cm4geSA8IDAgPyBESVJFQ1RJT05fVVAgOiBESVJFQ1RJT05fRE9XTjtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZURlbHRhWFkoc2Vzc2lvbiwgaW5wdXQpIHtcbiAgdmFyIGNlbnRlciA9IGlucHV0LmNlbnRlcjsgLy8gbGV0IHsgb2Zmc2V0RGVsdGE6b2Zmc2V0ID0ge30sIHByZXZEZWx0YSA9IHt9LCBwcmV2SW5wdXQgPSB7fSB9ID0gc2Vzc2lvbjtcbiAgLy8ganNjcyB0aHJvd2luZyBlcnJvciBvbiBkZWZhbHV0IGRlc3RydWN0dXJlZCB2YWx1ZXMgYW5kIHdpdGhvdXQgZGVmYXVsdHMgdGVzdHMgZmFpbFxuXG4gIHZhciBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhIHx8IHt9O1xuICB2YXIgcHJldkRlbHRhID0gc2Vzc2lvbi5wcmV2RGVsdGEgfHwge307XG4gIHZhciBwcmV2SW5wdXQgPSBzZXNzaW9uLnByZXZJbnB1dCB8fCB7fTtcblxuICBpZiAoaW5wdXQuZXZlbnRUeXBlID09PSBJTlBVVF9TVEFSVCB8fCBwcmV2SW5wdXQuZXZlbnRUeXBlID09PSBJTlBVVF9FTkQpIHtcbiAgICBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSA9IHtcbiAgICAgIHg6IHByZXZJbnB1dC5kZWx0YVggfHwgMCxcbiAgICAgIHk6IHByZXZJbnB1dC5kZWx0YVkgfHwgMFxuICAgIH07XG4gICAgb2Zmc2V0ID0gc2Vzc2lvbi5vZmZzZXREZWx0YSA9IHtcbiAgICAgIHg6IGNlbnRlci54LFxuICAgICAgeTogY2VudGVyLnlcbiAgICB9O1xuICB9XG5cbiAgaW5wdXQuZGVsdGFYID0gcHJldkRlbHRhLnggKyAoY2VudGVyLnggLSBvZmZzZXQueCk7XG4gIGlucHV0LmRlbHRhWSA9IHByZXZEZWx0YS55ICsgKGNlbnRlci55IC0gb2Zmc2V0LnkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIHZlbG9jaXR5IGJldHdlZW4gdHdvIHBvaW50cy4gdW5pdCBpcyBpbiBweCBwZXIgbXMuXG4gKiBAcGFyYW0ge051bWJlcn0gZGVsdGFUaW1lXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge09iamVjdH0gdmVsb2NpdHkgYHhgIGFuZCBgeWBcbiAqL1xuZnVuY3Rpb24gZ2V0VmVsb2NpdHkoZGVsdGFUaW1lLCB4LCB5KSB7XG4gIHJldHVybiB7XG4gICAgeDogeCAvIGRlbHRhVGltZSB8fCAwLFxuICAgIHk6IHkgLyBkZWx0YVRpbWUgfHwgMFxuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIHNjYWxlIGZhY3RvciBiZXR3ZWVuIHR3byBwb2ludGVyc2V0c1xuICogbm8gc2NhbGUgaXMgMSwgYW5kIGdvZXMgZG93biB0byAwIHdoZW4gcGluY2hlZCB0b2dldGhlciwgYW5kIGJpZ2dlciB3aGVuIHBpbmNoZWQgb3V0XG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHNjYWxlXG4gKi9cblxuZnVuY3Rpb24gZ2V0U2NhbGUoc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZ2V0RGlzdGFuY2UoZW5kWzBdLCBlbmRbMV0sIFBST1BTX0NMSUVOVF9YWSkgLyBnZXREaXN0YW5jZShzdGFydFswXSwgc3RhcnRbMV0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgcm90YXRpb24gZGVncmVlcyBiZXR3ZWVuIHR3byBwb2ludGVyc2V0c1xuICogQHBhcmFtIHtBcnJheX0gc3RhcnQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IGVuZCBhcnJheSBvZiBwb2ludGVyc1xuICogQHJldHVybiB7TnVtYmVyfSByb3RhdGlvblxuICovXG5cbmZ1bmN0aW9uIGdldFJvdGF0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGdldEFuZ2xlKGVuZFsxXSwgZW5kWzBdLCBQUk9QU19DTElFTlRfWFkpICsgZ2V0QW5nbGUoc3RhcnRbMV0sIHN0YXJ0WzBdLCBQUk9QU19DTElFTlRfWFkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB2ZWxvY2l0eSBpcyBjYWxjdWxhdGVkIGV2ZXJ5IHggbXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXNzaW9uXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuXG5mdW5jdGlvbiBjb21wdXRlSW50ZXJ2YWxJbnB1dERhdGEoc2Vzc2lvbiwgaW5wdXQpIHtcbiAgdmFyIGxhc3QgPSBzZXNzaW9uLmxhc3RJbnRlcnZhbCB8fCBpbnB1dDtcbiAgdmFyIGRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGxhc3QudGltZVN0YW1wO1xuICB2YXIgdmVsb2NpdHk7XG4gIHZhciB2ZWxvY2l0eVg7XG4gIHZhciB2ZWxvY2l0eVk7XG4gIHZhciBkaXJlY3Rpb247XG5cbiAgaWYgKGlucHV0LmV2ZW50VHlwZSAhPT0gSU5QVVRfQ0FOQ0VMICYmIChkZWx0YVRpbWUgPiBDT01QVVRFX0lOVEVSVkFMIHx8IGxhc3QudmVsb2NpdHkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICB2YXIgZGVsdGFYID0gaW5wdXQuZGVsdGFYIC0gbGFzdC5kZWx0YVg7XG4gICAgdmFyIGRlbHRhWSA9IGlucHV0LmRlbHRhWSAtIGxhc3QuZGVsdGFZO1xuICAgIHZhciB2ID0gZ2V0VmVsb2NpdHkoZGVsdGFUaW1lLCBkZWx0YVgsIGRlbHRhWSk7XG4gICAgdmVsb2NpdHlYID0gdi54O1xuICAgIHZlbG9jaXR5WSA9IHYueTtcbiAgICB2ZWxvY2l0eSA9IGFicyh2LngpID4gYWJzKHYueSkgPyB2LnggOiB2Lnk7XG4gICAgZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGRlbHRhWCwgZGVsdGFZKTtcbiAgICBzZXNzaW9uLmxhc3RJbnRlcnZhbCA9IGlucHV0O1xuICB9IGVsc2Uge1xuICAgIC8vIHVzZSBsYXRlc3QgdmVsb2NpdHkgaW5mbyBpZiBpdCBkb2Vzbid0IG92ZXJ0YWtlIGEgbWluaW11bSBwZXJpb2RcbiAgICB2ZWxvY2l0eSA9IGxhc3QudmVsb2NpdHk7XG4gICAgdmVsb2NpdHlYID0gbGFzdC52ZWxvY2l0eVg7XG4gICAgdmVsb2NpdHlZID0gbGFzdC52ZWxvY2l0eVk7XG4gICAgZGlyZWN0aW9uID0gbGFzdC5kaXJlY3Rpb247XG4gIH1cblxuICBpbnB1dC52ZWxvY2l0eSA9IHZlbG9jaXR5O1xuICBpbnB1dC52ZWxvY2l0eVggPSB2ZWxvY2l0eVg7XG4gIGlucHV0LnZlbG9jaXR5WSA9IHZlbG9jaXR5WTtcbiAgaW5wdXQuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xufVxuXG4vKipcbiogQHByaXZhdGVcbiAqIGV4dGVuZCB0aGUgZGF0YSB3aXRoIHNvbWUgdXNhYmxlIHByb3BlcnRpZXMgbGlrZSBzY2FsZSwgcm90YXRlLCB2ZWxvY2l0eSBldGNcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYW5hZ2VyXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuXG5mdW5jdGlvbiBjb21wdXRlSW5wdXREYXRhKG1hbmFnZXIsIGlucHV0KSB7XG4gIHZhciBzZXNzaW9uID0gbWFuYWdlci5zZXNzaW9uO1xuICB2YXIgcG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycztcbiAgdmFyIHBvaW50ZXJzTGVuZ3RoID0gcG9pbnRlcnMubGVuZ3RoOyAvLyBzdG9yZSB0aGUgZmlyc3QgaW5wdXQgdG8gY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBhbmQgZGlyZWN0aW9uXG5cbiAgaWYgKCFzZXNzaW9uLmZpcnN0SW5wdXQpIHtcbiAgICBzZXNzaW9uLmZpcnN0SW5wdXQgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gIH0gLy8gdG8gY29tcHV0ZSBzY2FsZSBhbmQgcm90YXRpb24gd2UgbmVlZCB0byBzdG9yZSB0aGUgbXVsdGlwbGUgdG91Y2hlc1xuXG5cbiAgaWYgKHBvaW50ZXJzTGVuZ3RoID4gMSAmJiAhc2Vzc2lvbi5maXJzdE11bHRpcGxlKSB7XG4gICAgc2Vzc2lvbi5maXJzdE11bHRpcGxlID0gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpO1xuICB9IGVsc2UgaWYgKHBvaW50ZXJzTGVuZ3RoID09PSAxKSB7XG4gICAgc2Vzc2lvbi5maXJzdE11bHRpcGxlID0gZmFsc2U7XG4gIH1cblxuICB2YXIgZmlyc3RJbnB1dCA9IHNlc3Npb24uZmlyc3RJbnB1dCxcbiAgICAgIGZpcnN0TXVsdGlwbGUgPSBzZXNzaW9uLmZpcnN0TXVsdGlwbGU7XG4gIHZhciBvZmZzZXRDZW50ZXIgPSBmaXJzdE11bHRpcGxlID8gZmlyc3RNdWx0aXBsZS5jZW50ZXIgOiBmaXJzdElucHV0LmNlbnRlcjtcbiAgdmFyIGNlbnRlciA9IGlucHV0LmNlbnRlciA9IGdldENlbnRlcihwb2ludGVycyk7XG4gIGlucHV0LnRpbWVTdGFtcCA9IG5vdygpO1xuICBpbnB1dC5kZWx0YVRpbWUgPSBpbnB1dC50aW1lU3RhbXAgLSBmaXJzdElucHV0LnRpbWVTdGFtcDtcbiAgaW5wdXQuYW5nbGUgPSBnZXRBbmdsZShvZmZzZXRDZW50ZXIsIGNlbnRlcik7XG4gIGlucHV0LmRpc3RhbmNlID0gZ2V0RGlzdGFuY2Uob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCk7XG4gIGlucHV0Lm9mZnNldERpcmVjdGlvbiA9IGdldERpcmVjdGlvbihpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG4gIHZhciBvdmVyYWxsVmVsb2NpdHkgPSBnZXRWZWxvY2l0eShpbnB1dC5kZWx0YVRpbWUsIGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5WCA9IG92ZXJhbGxWZWxvY2l0eS54O1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlZID0gb3ZlcmFsbFZlbG9jaXR5Lnk7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eSA9IGFicyhvdmVyYWxsVmVsb2NpdHkueCkgPiBhYnMob3ZlcmFsbFZlbG9jaXR5LnkpID8gb3ZlcmFsbFZlbG9jaXR5LnggOiBvdmVyYWxsVmVsb2NpdHkueTtcbiAgaW5wdXQuc2NhbGUgPSBmaXJzdE11bHRpcGxlID8gZ2V0U2NhbGUoZmlyc3RNdWx0aXBsZS5wb2ludGVycywgcG9pbnRlcnMpIDogMTtcbiAgaW5wdXQucm90YXRpb24gPSBmaXJzdE11bHRpcGxlID8gZ2V0Um90YXRpb24oZmlyc3RNdWx0aXBsZS5wb2ludGVycywgcG9pbnRlcnMpIDogMDtcbiAgaW5wdXQubWF4UG9pbnRlcnMgPSAhc2Vzc2lvbi5wcmV2SW5wdXQgPyBpbnB1dC5wb2ludGVycy5sZW5ndGggOiBpbnB1dC5wb2ludGVycy5sZW5ndGggPiBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycyA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzO1xuICBjb21wdXRlSW50ZXJ2YWxJbnB1dERhdGEoc2Vzc2lvbiwgaW5wdXQpOyAvLyBmaW5kIHRoZSBjb3JyZWN0IHRhcmdldFxuXG4gIHZhciB0YXJnZXQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG4gIHZhciBzcmNFdmVudCA9IGlucHV0LnNyY0V2ZW50O1xuICB2YXIgc3JjRXZlbnRUYXJnZXQ7XG5cbiAgaWYgKHNyY0V2ZW50LmNvbXBvc2VkUGF0aCkge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQuY29tcG9zZWRQYXRoKClbMF07XG4gIH0gZWxzZSBpZiAoc3JjRXZlbnQucGF0aCkge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQucGF0aFswXTtcbiAgfSBlbHNlIHtcbiAgICBzcmNFdmVudFRhcmdldCA9IHNyY0V2ZW50LnRhcmdldDtcbiAgfVxuXG4gIGlmIChoYXNQYXJlbnQoc3JjRXZlbnRUYXJnZXQsIHRhcmdldCkpIHtcbiAgICB0YXJnZXQgPSBzcmNFdmVudFRhcmdldDtcbiAgfVxuXG4gIGlucHV0LnRhcmdldCA9IHRhcmdldDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogaGFuZGxlIGlucHV0IGV2ZW50c1xuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRUeXBlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuXG5mdW5jdGlvbiBpbnB1dEhhbmRsZXIobWFuYWdlciwgZXZlbnRUeXBlLCBpbnB1dCkge1xuICB2YXIgcG9pbnRlcnNMZW4gPSBpbnB1dC5wb2ludGVycy5sZW5ndGg7XG4gIHZhciBjaGFuZ2VkUG9pbnRlcnNMZW4gPSBpbnB1dC5jaGFuZ2VkUG9pbnRlcnMubGVuZ3RoO1xuICB2YXIgaXNGaXJzdCA9IGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIHBvaW50ZXJzTGVuIC0gY2hhbmdlZFBvaW50ZXJzTGVuID09PSAwO1xuICB2YXIgaXNGaW5hbCA9IGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIHBvaW50ZXJzTGVuIC0gY2hhbmdlZFBvaW50ZXJzTGVuID09PSAwO1xuICBpbnB1dC5pc0ZpcnN0ID0gISFpc0ZpcnN0O1xuICBpbnB1dC5pc0ZpbmFsID0gISFpc0ZpbmFsO1xuXG4gIGlmIChpc0ZpcnN0KSB7XG4gICAgbWFuYWdlci5zZXNzaW9uID0ge307XG4gIH0gLy8gc291cmNlIGV2ZW50IGlzIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIHRoZSBkb21FdmVudHNcbiAgLy8gbGlrZSAndG91Y2hzdGFydCwgbW91c2V1cCwgcG9pbnRlcmRvd24nXG5cblxuICBpbnB1dC5ldmVudFR5cGUgPSBldmVudFR5cGU7IC8vIGNvbXB1dGUgc2NhbGUsIHJvdGF0aW9uIGV0Y1xuXG4gIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpOyAvLyBlbWl0IHNlY3JldCBldmVudFxuXG4gIG1hbmFnZXIuZW1pdCgnaGFtbWVyLmlucHV0JywgaW5wdXQpO1xuICBtYW5hZ2VyLnJlY29nbml6ZShpbnB1dCk7XG4gIG1hbmFnZXIuc2Vzc2lvbi5wcmV2SW5wdXQgPSBpbnB1dDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc3BsaXQgc3RyaW5nIG9uIHdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtBcnJheX0gd29yZHNcbiAqL1xuZnVuY3Rpb24gc3BsaXRTdHIoc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSgpLnNwbGl0KC9cXHMrL2cpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBhZGRFdmVudExpc3RlbmVyIHdpdGggbXVsdGlwbGUgZXZlbnRzIGF0IG9uY2VcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gKi9cblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcnModGFyZ2V0LCB0eXBlcywgaGFuZGxlcikge1xuICBlYWNoKHNwbGl0U3RyKHR5cGVzKSwgZnVuY3Rpb24gKHR5cGUpIHtcbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiByZW1vdmVFdmVudExpc3RlbmVyIHdpdGggbXVsdGlwbGUgZXZlbnRzIGF0IG9uY2VcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gKi9cblxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGFyZ2V0LCB0eXBlcywgaGFuZGxlcikge1xuICBlYWNoKHNwbGl0U3RyKHR5cGVzKSwgZnVuY3Rpb24gKHR5cGUpIHtcbiAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIHdpbmRvdyBvYmplY3Qgb2YgYW4gZWxlbWVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0RvY3VtZW50Vmlld3xXaW5kb3d9XG4gKi9cbmZ1bmN0aW9uIGdldFdpbmRvd0ZvckVsZW1lbnQoZWxlbWVudCkge1xuICB2YXIgZG9jID0gZWxlbWVudC5vd25lckRvY3VtZW50IHx8IGVsZW1lbnQ7XG4gIHJldHVybiBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdyB8fCB3aW5kb3c7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG52YXIgSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBJbnB1dChtYW5hZ2VyLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLmVsZW1lbnQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG4gICAgdGhpcy50YXJnZXQgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRUYXJnZXQ7IC8vIHNtYWxsZXIgd3JhcHBlciBhcm91bmQgdGhlIGhhbmRsZXIsIGZvciB0aGUgc2NvcGUgYW5kIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLFxuICAgIC8vIHNvIHdoZW4gZGlzYWJsZWQgdGhlIGlucHV0IGV2ZW50cyBhcmUgY29tcGxldGVseSBieXBhc3NlZC5cblxuICAgIHRoaXMuZG9tSGFuZGxlciA9IGZ1bmN0aW9uIChldikge1xuICAgICAgaWYgKGJvb2xPckZuKG1hbmFnZXIub3B0aW9ucy5lbmFibGUsIFttYW5hZ2VyXSkpIHtcbiAgICAgICAgc2VsZi5oYW5kbGVyKGV2KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5pbml0KCk7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNob3VsZCBoYW5kbGUgdGhlIGlucHV0RXZlbnQgZGF0YSBhbmQgdHJpZ2dlciB0aGUgY2FsbGJhY2tcbiAgICogQHZpcnR1YWxcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcigpIHt9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogYmluZCB0aGUgZXZlbnRzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmluaXQgPSBmdW5jdGlvbiBpbml0KCkge1xuICAgIHRoaXMuZXZFbCAmJiBhZGRFdmVudExpc3RlbmVycyh0aGlzLmVsZW1lbnQsIHRoaXMuZXZFbCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2VGFyZ2V0ICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMudGFyZ2V0LCB0aGlzLmV2VGFyZ2V0LCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZXaW4gJiYgYWRkRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogdW5iaW5kIHRoZSBldmVudHNcbiAgICovXG5cblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ldkVsICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZUYXJnZXQgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldldpbiAmJiByZW1vdmVFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gIH07XG5cbiAgcmV0dXJuIElucHV0O1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBmaW5kIGlmIGEgYXJyYXkgY29udGFpbnMgdGhlIG9iamVjdCB1c2luZyBpbmRleE9mIG9yIGEgc2ltcGxlIHBvbHlGaWxsXG4gKiBAcGFyYW0ge0FycmF5fSBzcmNcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcGFyYW0ge1N0cmluZ30gW2ZpbmRCeUtleV1cbiAqIEByZXR1cm4ge0Jvb2xlYW58TnVtYmVyfSBmYWxzZSB3aGVuIG5vdCBmb3VuZCwgb3IgdGhlIGluZGV4XG4gKi9cbmZ1bmN0aW9uIGluQXJyYXkoc3JjLCBmaW5kLCBmaW5kQnlLZXkpIHtcbiAgaWYgKHNyYy5pbmRleE9mICYmICFmaW5kQnlLZXkpIHtcbiAgICByZXR1cm4gc3JjLmluZGV4T2YoZmluZCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgICBpZiAoZmluZEJ5S2V5ICYmIHNyY1tpXVtmaW5kQnlLZXldID09IGZpbmQgfHwgIWZpbmRCeUtleSAmJiBzcmNbaV0gPT09IGZpbmQpIHtcbiAgICAgICAgLy8gZG8gbm90IHVzZSA9PT0gaGVyZSwgdGVzdCBmYWlsc1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiAtMTtcbiAgfVxufVxuXG52YXIgUE9JTlRFUl9JTlBVVF9NQVAgPSB7XG4gIHBvaW50ZXJkb3duOiBJTlBVVF9TVEFSVCxcbiAgcG9pbnRlcm1vdmU6IElOUFVUX01PVkUsXG4gIHBvaW50ZXJ1cDogSU5QVVRfRU5ELFxuICBwb2ludGVyY2FuY2VsOiBJTlBVVF9DQU5DRUwsXG4gIHBvaW50ZXJvdXQ6IElOUFVUX0NBTkNFTFxufTsgLy8gaW4gSUUxMCB0aGUgcG9pbnRlciB0eXBlcyBpcyBkZWZpbmVkIGFzIGFuIGVudW1cblxudmFyIElFMTBfUE9JTlRFUl9UWVBFX0VOVU0gPSB7XG4gIDI6IElOUFVUX1RZUEVfVE9VQ0gsXG4gIDM6IElOUFVUX1RZUEVfUEVOLFxuICA0OiBJTlBVVF9UWVBFX01PVVNFLFxuICA1OiBJTlBVVF9UWVBFX0tJTkVDVCAvLyBzZWUgaHR0cHM6Ly90d2l0dGVyLmNvbS9qYWNvYnJvc3NpL3N0YXR1cy80ODA1OTY0Mzg0ODk4OTA4MTZcblxufTtcbnZhciBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ3BvaW50ZXJkb3duJztcbnZhciBQT0lOVEVSX1dJTkRPV19FVkVOVFMgPSAncG9pbnRlcm1vdmUgcG9pbnRlcnVwIHBvaW50ZXJjYW5jZWwnOyAvLyBJRTEwIGhhcyBwcmVmaXhlZCBzdXBwb3J0LCBhbmQgY2FzZS1zZW5zaXRpdmVcblxuaWYgKHdpbi5NU1BvaW50ZXJFdmVudCAmJiAhd2luLlBvaW50ZXJFdmVudCkge1xuICBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ01TUG9pbnRlckRvd24nO1xuICBQT0lOVEVSX1dJTkRPV19FVkVOVFMgPSAnTVNQb2ludGVyTW92ZSBNU1BvaW50ZXJVcCBNU1BvaW50ZXJDYW5jZWwnO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUG9pbnRlciBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG5cbnZhciBQb2ludGVyRXZlbnRJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKFBvaW50ZXJFdmVudElucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIFBvaW50ZXJFdmVudElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IFBvaW50ZXJFdmVudElucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldkVsID0gUE9JTlRFUl9FTEVNRU5UX0VWRU5UUztcbiAgICBwcm90by5ldldpbiA9IFBPSU5URVJfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RvcmUgPSBfdGhpcy5tYW5hZ2VyLnNlc3Npb24ucG9pbnRlckV2ZW50cyA9IFtdO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaGFuZGxlIG1vdXNlIGV2ZW50c1xuICAgKiBAcGFyYW0ge09iamVjdH0gZXZcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciBzdG9yZSA9IHRoaXMuc3RvcmU7XG4gICAgdmFyIHJlbW92ZVBvaW50ZXIgPSBmYWxzZTtcbiAgICB2YXIgZXZlbnRUeXBlTm9ybWFsaXplZCA9IGV2LnR5cGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdtcycsICcnKTtcbiAgICB2YXIgZXZlbnRUeXBlID0gUE9JTlRFUl9JTlBVVF9NQVBbZXZlbnRUeXBlTm9ybWFsaXplZF07XG4gICAgdmFyIHBvaW50ZXJUeXBlID0gSUUxMF9QT0lOVEVSX1RZUEVfRU5VTVtldi5wb2ludGVyVHlwZV0gfHwgZXYucG9pbnRlclR5cGU7XG4gICAgdmFyIGlzVG91Y2ggPSBwb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9UT1VDSDsgLy8gZ2V0IGluZGV4IG9mIHRoZSBldmVudCBpbiB0aGUgc3RvcmVcblxuICAgIHZhciBzdG9yZUluZGV4ID0gaW5BcnJheShzdG9yZSwgZXYucG9pbnRlcklkLCAncG9pbnRlcklkJyk7IC8vIHN0YXJ0IGFuZCBtb3VzZSBtdXN0IGJlIGRvd25cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiAoZXYuYnV0dG9uID09PSAwIHx8IGlzVG91Y2gpKSB7XG4gICAgICBpZiAoc3RvcmVJbmRleCA8IDApIHtcbiAgICAgICAgc3RvcmUucHVzaChldik7XG4gICAgICAgIHN0b3JlSW5kZXggPSBzdG9yZS5sZW5ndGggLSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICAgIHJlbW92ZVBvaW50ZXIgPSB0cnVlO1xuICAgIH0gLy8gaXQgbm90IGZvdW5kLCBzbyB0aGUgcG9pbnRlciBoYXNuJ3QgYmVlbiBkb3duIChzbyBpdCdzIHByb2JhYmx5IGEgaG92ZXIpXG5cblxuICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gdXBkYXRlIHRoZSBldmVudCBpbiB0aGUgc3RvcmVcblxuXG4gICAgc3RvcmVbc3RvcmVJbmRleF0gPSBldjtcbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgZXZlbnRUeXBlLCB7XG4gICAgICBwb2ludGVyczogc3RvcmUsXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IFtldl0sXG4gICAgICBwb2ludGVyVHlwZTogcG9pbnRlclR5cGUsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcblxuICAgIGlmIChyZW1vdmVQb2ludGVyKSB7XG4gICAgICAvLyByZW1vdmUgZnJvbSB0aGUgc3RvcmVcbiAgICAgIHN0b3JlLnNwbGljZShzdG9yZUluZGV4LCAxKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBvaW50ZXJFdmVudElucHV0O1xufShJbnB1dCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNvbnZlcnQgYXJyYXktbGlrZSBvYmplY3RzIHRvIHJlYWwgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmosIDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB1bmlxdWUgYXJyYXkgd2l0aCBvYmplY3RzIGJhc2VkIG9uIGEga2V5IChsaWtlICdpZCcpIG9yIGp1c3QgYnkgdGhlIGFycmF5J3MgdmFsdWVcbiAqIEBwYXJhbSB7QXJyYXl9IHNyYyBbe2lkOjF9LHtpZDoyfSx7aWQ6MX1dXG4gKiBAcGFyYW0ge1N0cmluZ30gW2tleV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3NvcnQ9RmFsc2VdXG4gKiBAcmV0dXJucyB7QXJyYXl9IFt7aWQ6MX0se2lkOjJ9XVxuICovXG5cbmZ1bmN0aW9uIHVuaXF1ZUFycmF5KHNyYywga2V5LCBzb3J0KSB7XG4gIHZhciByZXN1bHRzID0gW107XG4gIHZhciB2YWx1ZXMgPSBbXTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgIHZhciB2YWwgPSBrZXkgPyBzcmNbaV1ba2V5XSA6IHNyY1tpXTtcblxuICAgIGlmIChpbkFycmF5KHZhbHVlcywgdmFsKSA8IDApIHtcbiAgICAgIHJlc3VsdHMucHVzaChzcmNbaV0pO1xuICAgIH1cblxuICAgIHZhbHVlc1tpXSA9IHZhbDtcbiAgICBpKys7XG4gIH1cblxuICBpZiAoc29ydCkge1xuICAgIGlmICgha2V5KSB7XG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGFba2V5XSA+IGJba2V5XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG52YXIgVE9VQ0hfSU5QVVRfTUFQID0ge1xuICB0b3VjaHN0YXJ0OiBJTlBVVF9TVEFSVCxcbiAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICB0b3VjaGNhbmNlbDogSU5QVVRfQ0FOQ0VMXG59O1xudmFyIFRPVUNIX1RBUkdFVF9FVkVOVFMgPSAndG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogTXVsdGktdXNlciB0b3VjaCBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgVG91Y2hJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRvdWNoSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gVG91Y2hJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBUb3VjaElucHV0LnByb3RvdHlwZS5ldlRhcmdldCA9IFRPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnRhcmdldElkcyA9IHt9OyAvLyB0aGlzLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUb3VjaElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgdHlwZSA9IFRPVUNIX0lOUFVUX01BUFtldi50eXBlXTtcbiAgICB2YXIgdG91Y2hlcyA9IGdldFRvdWNoZXMuY2FsbCh0aGlzLCBldiwgdHlwZSk7XG5cbiAgICBpZiAoIXRvdWNoZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBUb3VjaElucHV0O1xufShJbnB1dCk7XG5cbmZ1bmN0aW9uIGdldFRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgdmFyIGFsbFRvdWNoZXMgPSB0b0FycmF5KGV2LnRvdWNoZXMpO1xuICB2YXIgdGFyZ2V0SWRzID0gdGhpcy50YXJnZXRJZHM7IC8vIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgdG91Y2gsIHRoZSBwcm9jZXNzIGNhbiBiZSBzaW1wbGlmaWVkXG5cbiAgaWYgKHR5cGUgJiAoSU5QVVRfU1RBUlQgfCBJTlBVVF9NT1ZFKSAmJiBhbGxUb3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgIHRhcmdldElkc1thbGxUb3VjaGVzWzBdLmlkZW50aWZpZXJdID0gdHJ1ZTtcbiAgICByZXR1cm4gW2FsbFRvdWNoZXMsIGFsbFRvdWNoZXNdO1xuICB9XG5cbiAgdmFyIGk7XG4gIHZhciB0YXJnZXRUb3VjaGVzO1xuICB2YXIgY2hhbmdlZFRvdWNoZXMgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKTtcbiAgdmFyIGNoYW5nZWRUYXJnZXRUb3VjaGVzID0gW107XG4gIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDsgLy8gZ2V0IHRhcmdldCB0b3VjaGVzIGZyb20gdG91Y2hlc1xuXG4gIHRhcmdldFRvdWNoZXMgPSBhbGxUb3VjaGVzLmZpbHRlcihmdW5jdGlvbiAodG91Y2gpIHtcbiAgICByZXR1cm4gaGFzUGFyZW50KHRvdWNoLnRhcmdldCwgdGFyZ2V0KTtcbiAgfSk7IC8vIGNvbGxlY3QgdG91Y2hlc1xuXG4gIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCB0YXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgdGFyZ2V0SWRzW3RhcmdldFRvdWNoZXNbaV0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgICAgaSsrO1xuICAgIH1cbiAgfSAvLyBmaWx0ZXIgY2hhbmdlZCB0b3VjaGVzIHRvIG9ubHkgY29udGFpbiB0b3VjaGVzIHRoYXQgZXhpc3QgaW4gdGhlIGNvbGxlY3RlZCB0YXJnZXQgaWRzXG5cblxuICBpID0gMDtcblxuICB3aGlsZSAoaSA8IGNoYW5nZWRUb3VjaGVzLmxlbmd0aCkge1xuICAgIGlmICh0YXJnZXRJZHNbY2hhbmdlZFRvdWNoZXNbaV0uaWRlbnRpZmllcl0pIHtcbiAgICAgIGNoYW5nZWRUYXJnZXRUb3VjaGVzLnB1c2goY2hhbmdlZFRvdWNoZXNbaV0pO1xuICAgIH0gLy8gY2xlYW51cCByZW1vdmVkIHRvdWNoZXNcblxuXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgZGVsZXRlIHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXTtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICBpZiAoIWNoYW5nZWRUYXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBbLy8gbWVyZ2UgdGFyZ2V0VG91Y2hlcyB3aXRoIGNoYW5nZWRUYXJnZXRUb3VjaGVzIHNvIGl0IGNvbnRhaW5zIEFMTCB0b3VjaGVzLCBpbmNsdWRpbmcgJ2VuZCcgYW5kICdjYW5jZWwnXG4gIHVuaXF1ZUFycmF5KHRhcmdldFRvdWNoZXMuY29uY2F0KGNoYW5nZWRUYXJnZXRUb3VjaGVzKSwgJ2lkZW50aWZpZXInLCB0cnVlKSwgY2hhbmdlZFRhcmdldFRvdWNoZXNdO1xufVxuXG52YXIgTU9VU0VfSU5QVVRfTUFQID0ge1xuICBtb3VzZWRvd246IElOUFVUX1NUQVJULFxuICBtb3VzZW1vdmU6IElOUFVUX01PVkUsXG4gIG1vdXNldXA6IElOUFVUX0VORFxufTtcbnZhciBNT1VTRV9FTEVNRU5UX0VWRU5UUyA9ICdtb3VzZWRvd24nO1xudmFyIE1PVVNFX1dJTkRPV19FVkVOVFMgPSAnbW91c2Vtb3ZlIG1vdXNldXAnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogTW91c2UgZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIE1vdXNlSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShNb3VzZUlucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIE1vdXNlSW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gTW91c2VJbnB1dC5wcm90b3R5cGU7XG4gICAgcHJvdG8uZXZFbCA9IE1PVVNFX0VMRU1FTlRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gTU9VU0VfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMucHJlc3NlZCA9IGZhbHNlOyAvLyBtb3VzZWRvd24gc3RhdGVcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaGFuZGxlIG1vdXNlIGV2ZW50c1xuICAgKiBAcGFyYW0ge09iamVjdH0gZXZcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTW91c2VJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIGV2ZW50VHlwZSA9IE1PVVNFX0lOUFVUX01BUFtldi50eXBlXTsgLy8gb24gc3RhcnQgd2Ugd2FudCB0byBoYXZlIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBkb3duXG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgZXYuYnV0dG9uID09PSAwKSB7XG4gICAgICB0aGlzLnByZXNzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9NT1ZFICYmIGV2LndoaWNoICE9PSAxKSB7XG4gICAgICBldmVudFR5cGUgPSBJTlBVVF9FTkQ7XG4gICAgfSAvLyBtb3VzZSBtdXN0IGJlIGRvd25cblxuXG4gICAgaWYgKCF0aGlzLnByZXNzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgZXZlbnRUeXBlLCB7XG4gICAgICBwb2ludGVyczogW2V2XSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX01PVVNFLFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE1vdXNlSW5wdXQ7XG59KElucHV0KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ29tYmluZWQgdG91Y2ggYW5kIG1vdXNlIGlucHV0XG4gKlxuICogVG91Y2ggaGFzIGEgaGlnaGVyIHByaW9yaXR5IHRoZW4gbW91c2UsIGFuZCB3aGlsZSB0b3VjaGluZyBubyBtb3VzZSBldmVudHMgYXJlIGFsbG93ZWQuXG4gKiBUaGlzIGJlY2F1c2UgdG91Y2ggZGV2aWNlcyBhbHNvIGVtaXQgbW91c2UgZXZlbnRzIHdoaWxlIGRvaW5nIGEgdG91Y2guXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBERURVUF9USU1FT1VUID0gMjUwMDtcbnZhciBERURVUF9ESVNUQU5DRSA9IDI1O1xuXG5mdW5jdGlvbiBzZXRMYXN0VG91Y2goZXZlbnREYXRhKSB7XG4gIHZhciBfZXZlbnREYXRhJGNoYW5nZWRQb2kgPSBldmVudERhdGEuY2hhbmdlZFBvaW50ZXJzLFxuICAgICAgdG91Y2ggPSBfZXZlbnREYXRhJGNoYW5nZWRQb2lbMF07XG5cbiAgaWYgKHRvdWNoLmlkZW50aWZpZXIgPT09IHRoaXMucHJpbWFyeVRvdWNoKSB7XG4gICAgdmFyIGxhc3RUb3VjaCA9IHtcbiAgICAgIHg6IHRvdWNoLmNsaWVudFgsXG4gICAgICB5OiB0b3VjaC5jbGllbnRZXG4gICAgfTtcbiAgICB2YXIgbHRzID0gdGhpcy5sYXN0VG91Y2hlcztcbiAgICB0aGlzLmxhc3RUb3VjaGVzLnB1c2gobGFzdFRvdWNoKTtcblxuICAgIHZhciByZW1vdmVMYXN0VG91Y2ggPSBmdW5jdGlvbiByZW1vdmVMYXN0VG91Y2goKSB7XG4gICAgICB2YXIgaSA9IGx0cy5pbmRleE9mKGxhc3RUb3VjaCk7XG5cbiAgICAgIGlmIChpID4gLTEpIHtcbiAgICAgICAgbHRzLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2V0VGltZW91dChyZW1vdmVMYXN0VG91Y2gsIERFRFVQX1RJTUVPVVQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlY29yZFRvdWNoZXMoZXZlbnRUeXBlLCBldmVudERhdGEpIHtcbiAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUKSB7XG4gICAgdGhpcy5wcmltYXJ5VG91Y2ggPSBldmVudERhdGEuY2hhbmdlZFBvaW50ZXJzWzBdLmlkZW50aWZpZXI7XG4gICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgIHNldExhc3RUb3VjaC5jYWxsKHRoaXMsIGV2ZW50RGF0YSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTeW50aGV0aWNFdmVudChldmVudERhdGEpIHtcbiAgdmFyIHggPSBldmVudERhdGEuc3JjRXZlbnQuY2xpZW50WDtcbiAgdmFyIHkgPSBldmVudERhdGEuc3JjRXZlbnQuY2xpZW50WTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGFzdFRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdCA9IHRoaXMubGFzdFRvdWNoZXNbaV07XG4gICAgdmFyIGR4ID0gTWF0aC5hYnMoeCAtIHQueCk7XG4gICAgdmFyIGR5ID0gTWF0aC5hYnMoeSAtIHQueSk7XG5cbiAgICBpZiAoZHggPD0gREVEVVBfRElTVEFOQ0UgJiYgZHkgPD0gREVEVVBfRElTVEFOQ0UpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIFRvdWNoTW91c2VJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIHZhciBUb3VjaE1vdXNlSW5wdXQgPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShUb3VjaE1vdXNlSW5wdXQsIF9JbnB1dCk7XG5cbiAgICBmdW5jdGlvbiBUb3VjaE1vdXNlSW5wdXQoX21hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX0lucHV0LmNhbGwodGhpcywgX21hbmFnZXIsIGNhbGxiYWNrKSB8fCB0aGlzO1xuXG4gICAgICBfdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24gKG1hbmFnZXIsIGlucHV0RXZlbnQsIGlucHV0RGF0YSkge1xuICAgICAgICB2YXIgaXNUb3VjaCA9IGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9UT1VDSDtcbiAgICAgICAgdmFyIGlzTW91c2UgPSBpbnB1dERhdGEucG9pbnRlclR5cGUgPT09IElOUFVUX1RZUEVfTU9VU0U7XG5cbiAgICAgICAgaWYgKGlzTW91c2UgJiYgaW5wdXREYXRhLnNvdXJjZUNhcGFiaWxpdGllcyAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzLmZpcmVzVG91Y2hFdmVudHMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gd2hlbiB3ZSdyZSBpbiBhIHRvdWNoIGV2ZW50LCByZWNvcmQgdG91Y2hlcyB0byAgZGUtZHVwZSBzeW50aGV0aWMgbW91c2UgZXZlbnRcblxuXG4gICAgICAgIGlmIChpc1RvdWNoKSB7XG4gICAgICAgICAgcmVjb3JkVG91Y2hlcy5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTW91c2UgJiYgaXNTeW50aGV0aWNFdmVudC5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBpbnB1dERhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuY2FsbGJhY2sobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLnRvdWNoID0gbmV3IFRvdWNoSW5wdXQoX3RoaXMubWFuYWdlciwgX3RoaXMuaGFuZGxlcik7XG4gICAgICBfdGhpcy5tb3VzZSA9IG5ldyBNb3VzZUlucHV0KF90aGlzLm1hbmFnZXIsIF90aGlzLmhhbmRsZXIpO1xuICAgICAgX3RoaXMucHJpbWFyeVRvdWNoID0gbnVsbDtcbiAgICAgIF90aGlzLmxhc3RUb3VjaGVzID0gW107XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogaGFuZGxlIG1vdXNlIGFuZCB0b3VjaCBldmVudHNcbiAgICAgKiBAcGFyYW0ge0hhbW1lcn0gbWFuYWdlclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dEV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgICAqL1xuXG5cbiAgICB2YXIgX3Byb3RvID0gVG91Y2hNb3VzZUlucHV0LnByb3RvdHlwZTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogcmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lcnNcbiAgICAgKi9cbiAgICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLnRvdWNoLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMubW91c2UuZGVzdHJveSgpO1xuICAgIH07XG5cbiAgICByZXR1cm4gVG91Y2hNb3VzZUlucHV0O1xuICB9KElucHV0KTtcblxuICByZXR1cm4gVG91Y2hNb3VzZUlucHV0O1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjcmVhdGUgbmV3IGlucHV0IHR5cGUgbWFuYWdlclxuICogY2FsbGVkIGJ5IHRoZSBNYW5hZ2VyIGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0hhbW1lcn0gbWFuYWdlclxuICogQHJldHVybnMge0lucHV0fVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0SW5zdGFuY2UobWFuYWdlcikge1xuICB2YXIgVHlwZTsgLy8gbGV0IGlucHV0Q2xhc3MgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRDbGFzcztcblxuICB2YXIgaW5wdXRDbGFzcyA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dENsYXNzO1xuXG4gIGlmIChpbnB1dENsYXNzKSB7XG4gICAgVHlwZSA9IGlucHV0Q2xhc3M7XG4gIH0gZWxzZSBpZiAoU1VQUE9SVF9QT0lOVEVSX0VWRU5UUykge1xuICAgIFR5cGUgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgfSBlbHNlIGlmIChTVVBQT1JUX09OTFlfVE9VQ0gpIHtcbiAgICBUeXBlID0gVG91Y2hJbnB1dDtcbiAgfSBlbHNlIGlmICghU1VQUE9SVF9UT1VDSCkge1xuICAgIFR5cGUgPSBNb3VzZUlucHV0O1xuICB9IGVsc2Uge1xuICAgIFR5cGUgPSBUb3VjaE1vdXNlSW5wdXQ7XG4gIH1cblxuICByZXR1cm4gbmV3IFR5cGUobWFuYWdlciwgaW5wdXRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogaWYgdGhlIGFyZ3VtZW50IGlzIGFuIGFycmF5LCB3ZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZuIG9uIGVhY2ggZW50cnlcbiAqIGlmIGl0IGFpbnQgYW4gYXJyYXkgd2UgZG9uJ3Qgd2FudCB0byBkbyBhIHRoaW5nLlxuICogdGhpcyBpcyB1c2VkIGJ5IGFsbCB0aGUgbWV0aG9kcyB0aGF0IGFjY2VwdCBhIHNpbmdsZSBhbmQgYXJyYXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp8QXJyYXl9IGFyZ1xuICogQHBhcmFtIHtTdHJpbmd9IGZuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VBcnJheUFyZyhhcmcsIGZuLCBjb250ZXh0KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICBlYWNoKGFyZywgY29udGV4dFtmbl0sIGNvbnRleHQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgU1RBVEVfUE9TU0lCTEUgPSAxO1xudmFyIFNUQVRFX0JFR0FOID0gMjtcbnZhciBTVEFURV9DSEFOR0VEID0gNDtcbnZhciBTVEFURV9FTkRFRCA9IDg7XG52YXIgU1RBVEVfUkVDT0dOSVpFRCA9IFNUQVRFX0VOREVEO1xudmFyIFNUQVRFX0NBTkNFTExFRCA9IDE2O1xudmFyIFNUQVRFX0ZBSUxFRCA9IDMyO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSB1bmlxdWUgaWRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHVuaXF1ZUlkXG4gKi9cbnZhciBfdW5pcXVlSWQgPSAxO1xuZnVuY3Rpb24gdW5pcXVlSWQoKSB7XG4gIHJldHVybiBfdW5pcXVlSWQrKztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IGEgcmVjb2duaXplciBieSBuYW1lIGlmIGl0IGlzIGJvdW5kIHRvIGEgbWFuYWdlclxuICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gb3RoZXJSZWNvZ25pemVyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAqIEByZXR1cm5zIHtSZWNvZ25pemVyfVxuICovXG5mdW5jdGlvbiBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgcmVjb2duaXplcikge1xuICB2YXIgbWFuYWdlciA9IHJlY29nbml6ZXIubWFuYWdlcjtcblxuICBpZiAobWFuYWdlcikge1xuICAgIHJldHVybiBtYW5hZ2VyLmdldChvdGhlclJlY29nbml6ZXIpO1xuICB9XG5cbiAgcmV0dXJuIG90aGVyUmVjb2duaXplcjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IGEgdXNhYmxlIHN0cmluZywgdXNlZCBhcyBldmVudCBwb3N0Zml4XG4gKiBAcGFyYW0ge2NvbnN0YW50fSBzdGF0ZVxuICogQHJldHVybnMge1N0cmluZ30gc3RhdGVcbiAqL1xuXG5mdW5jdGlvbiBzdGF0ZVN0cihzdGF0ZSkge1xuICBpZiAoc3RhdGUgJiBTVEFURV9DQU5DRUxMRUQpIHtcbiAgICByZXR1cm4gJ2NhbmNlbCc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9FTkRFRCkge1xuICAgIHJldHVybiAnZW5kJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0NIQU5HRUQpIHtcbiAgICByZXR1cm4gJ21vdmUnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQkVHQU4pIHtcbiAgICByZXR1cm4gJ3N0YXJ0JztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUmVjb2duaXplciBmbG93IGV4cGxhaW5lZDsgKlxuICogQWxsIHJlY29nbml6ZXJzIGhhdmUgdGhlIGluaXRpYWwgc3RhdGUgb2YgUE9TU0lCTEUgd2hlbiBhIGlucHV0IHNlc3Npb24gc3RhcnRzLlxuICogVGhlIGRlZmluaXRpb24gb2YgYSBpbnB1dCBzZXNzaW9uIGlzIGZyb20gdGhlIGZpcnN0IGlucHV0IHVudGlsIHRoZSBsYXN0IGlucHV0LCB3aXRoIGFsbCBpdCdzIG1vdmVtZW50IGluIGl0LiAqXG4gKiBFeGFtcGxlIHNlc3Npb24gZm9yIG1vdXNlLWlucHV0OiBtb3VzZWRvd24gLT4gbW91c2Vtb3ZlIC0+IG1vdXNldXBcbiAqXG4gKiBPbiBlYWNoIHJlY29nbml6aW5nIGN5Y2xlIChzZWUgTWFuYWdlci5yZWNvZ25pemUpIHRoZSAucmVjb2duaXplKCkgbWV0aG9kIGlzIGV4ZWN1dGVkXG4gKiB3aGljaCBkZXRlcm1pbmVzIHdpdGggc3RhdGUgaXQgc2hvdWxkIGJlLlxuICpcbiAqIElmIHRoZSByZWNvZ25pemVyIGhhcyB0aGUgc3RhdGUgRkFJTEVELCBDQU5DRUxMRUQgb3IgUkVDT0dOSVpFRCAoZXF1YWxzIEVOREVEKSwgaXQgaXMgcmVzZXQgdG9cbiAqIFBPU1NJQkxFIHRvIGdpdmUgaXQgYW5vdGhlciBjaGFuZ2Ugb24gdGhlIG5leHQgY3ljbGUuXG4gKlxuICogICAgICAgICAgICAgICBQb3NzaWJsZVxuICogICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICstLS0tLSstLS0tLS0tLS0tLS0tLS0rXG4gKiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICstLS0tLSstLS0tLSsgICAgICAgICAgICAgICB8XG4gKiAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICB8XG4gKiAgIEZhaWxlZCAgICAgIENhbmNlbGxlZCAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rLS0tLS0tK1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgIFJlY29nbml6ZWQgICAgICAgQmVnYW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZGVkL1JlY29nbml6ZWRcbiAqL1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSZWNvZ25pemVyXG4gKiBFdmVyeSByZWNvZ25pemVyIG5lZWRzIHRvIGV4dGVuZCBmcm9tIHRoaXMgY2xhc3MuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKi9cblxudmFyIFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe1xuICAgICAgZW5hYmxlOiB0cnVlXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgdGhpcy5pZCA9IHVuaXF1ZUlkKCk7XG4gICAgdGhpcy5tYW5hZ2VyID0gbnVsbDsgLy8gZGVmYXVsdCBpcyBlbmFibGUgdHJ1ZVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIHRoaXMuc2ltdWx0YW5lb3VzID0ge307XG4gICAgdGhpcy5yZXF1aXJlRmFpbCA9IFtdO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtSZWNvZ25pemVyfVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICBhc3NpZ24kMSh0aGlzLm9wdGlvbnMsIG9wdGlvbnMpOyAvLyBhbHNvIHVwZGF0ZSB0aGUgdG91Y2hBY3Rpb24sIGluIGNhc2Ugc29tZXRoaW5nIGNoYW5nZWQgYWJvdXQgdGhlIGRpcmVjdGlvbnMvZW5hYmxlZCBzdGF0ZVxuXG4gICAgdGhpcy5tYW5hZ2VyICYmIHRoaXMubWFuYWdlci50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gcmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAncmVjb2duaXplV2l0aCcsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgc2ltdWx0YW5lb3VzID0gdGhpcy5zaW11bHRhbmVvdXM7XG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuXG4gICAgaWYgKCFzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSkge1xuICAgICAgc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF0gPSBvdGhlclJlY29nbml6ZXI7XG4gICAgICBvdGhlclJlY29nbml6ZXIucmVjb2duaXplV2l0aCh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGRyb3AgdGhlIHNpbXVsdGFuZW91cyBsaW5rLiBpdCBkb2VzbnQgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5kcm9wUmVjb2duaXplV2l0aCA9IGZ1bmN0aW9uIGRyb3BSZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVjb2duaXplV2l0aCcsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgZGVsZXRlIHRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZWNvZ25pemVyIGNhbiBvbmx5IHJ1biB3aGVuIGFuIG90aGVyIGlzIGZhaWxpbmdcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ucmVxdWlyZUZhaWx1cmUgPSBmdW5jdGlvbiByZXF1aXJlRmFpbHVyZShvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAncmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHJlcXVpcmVGYWlsID0gdGhpcy5yZXF1aXJlRmFpbDtcbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG5cbiAgICBpZiAoaW5BcnJheShyZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKSA9PT0gLTEpIHtcbiAgICAgIHJlcXVpcmVGYWlsLnB1c2gob3RoZXJSZWNvZ25pemVyKTtcbiAgICAgIG90aGVyUmVjb2duaXplci5yZXF1aXJlRmFpbHVyZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGRyb3AgdGhlIHJlcXVpcmVGYWlsdXJlIGxpbmsuIGl0IGRvZXMgbm90IHJlbW92ZSB0aGUgbGluayBvbiB0aGUgb3RoZXIgcmVjb2duaXplci5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8uZHJvcFJlcXVpcmVGYWlsdXJlID0gZnVuY3Rpb24gZHJvcFJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuICAgIHZhciBpbmRleCA9IGluQXJyYXkodGhpcy5yZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLnJlcXVpcmVGYWlsLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYXMgcmVxdWlyZSBmYWlsdXJlcyBib29sZWFuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5oYXNSZXF1aXJlRmFpbHVyZXMgPSBmdW5jdGlvbiBoYXNSZXF1aXJlRmFpbHVyZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoID4gMDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGlmIHRoZSByZWNvZ25pemVyIGNhbiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplclxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICovXG5cblxuICBfcHJvdG8uY2FuUmVjb2duaXplV2l0aCA9IGZ1bmN0aW9uIGNhblJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFlvdSBzaG91bGQgdXNlIGB0cnlFbWl0YCBpbnN0ZWFkIG9mIGBlbWl0YCBkaXJlY3RseSB0byBjaGVja1xuICAgKiB0aGF0IGFsbCB0aGUgbmVlZGVkIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQgYmVmb3JlIGVtaXR0aW5nLlxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTtcblxuICAgIGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICAgIHNlbGYubWFuYWdlci5lbWl0KGV2ZW50LCBpbnB1dCk7XG4gICAgfSAvLyAncGFuc3RhcnQnIGFuZCAncGFubW92ZSdcblxuXG4gICAgaWYgKHN0YXRlIDwgU1RBVEVfRU5ERUQpIHtcbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICB9XG5cbiAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCk7IC8vIHNpbXBsZSAnZXZlbnROYW1lJyBldmVudHNcblxuICAgIGlmIChpbnB1dC5hZGRpdGlvbmFsRXZlbnQpIHtcbiAgICAgIC8vIGFkZGl0aW9uYWwgZXZlbnQocGFubGVmdCwgcGFucmlnaHQsIHBpbmNoaW4sIHBpbmNob3V0Li4uKVxuICAgICAgZW1pdChpbnB1dC5hZGRpdGlvbmFsRXZlbnQpO1xuICAgIH0gLy8gcGFuZW5kIGFuZCBwYW5jYW5jZWxcblxuXG4gICAgaWYgKHN0YXRlID49IFNUQVRFX0VOREVEKSB7XG4gICAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCArIHN0YXRlU3RyKHN0YXRlKSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQ2hlY2sgdGhhdCBhbGwgdGhlIHJlcXVpcmUgZmFpbHVyZSByZWNvZ25pemVycyBoYXMgZmFpbGVkLFxuICAgKiBpZiB0cnVlLCBpdCBlbWl0cyBhIGdlc3R1cmUgZXZlbnQsXG4gICAqIG90aGVyd2lzZSwgc2V0dXAgdGhlIHN0YXRlIHRvIEZBSUxFRC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLnRyeUVtaXQgPSBmdW5jdGlvbiB0cnlFbWl0KGlucHV0KSB7XG4gICAgaWYgKHRoaXMuY2FuRW1pdCgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbWl0KGlucHV0KTtcbiAgICB9IC8vIGl0J3MgZmFpbGluZyBhbnl3YXlcblxuXG4gICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbiB3ZSBlbWl0P1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBfcHJvdG8uY2FuRW1pdCA9IGZ1bmN0aW9uIGNhbkVtaXQoKSB7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCkge1xuICAgICAgaWYgKCEodGhpcy5yZXF1aXJlRmFpbFtpXS5zdGF0ZSAmIChTVEFURV9GQUlMRUQgfCBTVEFURV9QT1NTSUJMRSkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogdXBkYXRlIHRoZSByZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgIC8vIG1ha2UgYSBuZXcgY29weSBvZiB0aGUgaW5wdXREYXRhXG4gICAgLy8gc28gd2UgY2FuIGNoYW5nZSB0aGUgaW5wdXREYXRhIHdpdGhvdXQgbWVzc2luZyB1cCB0aGUgb3RoZXIgcmVjb2duaXplcnNcbiAgICB2YXIgaW5wdXREYXRhQ2xvbmUgPSBhc3NpZ24kMSh7fSwgaW5wdXREYXRhKTsgLy8gaXMgaXMgZW5hYmxlZCBhbmQgYWxsb3cgcmVjb2duaXppbmc/XG5cbiAgICBpZiAoIWJvb2xPckZuKHRoaXMub3B0aW9ucy5lbmFibGUsIFt0aGlzLCBpbnB1dERhdGFDbG9uZV0pKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcmVzZXQgd2hlbiB3ZSd2ZSByZWFjaGVkIHRoZSBlbmRcblxuXG4gICAgaWYgKHRoaXMuc3RhdGUgJiAoU1RBVEVfUkVDT0dOSVpFRCB8IFNUQVRFX0NBTkNFTExFRCB8IFNUQVRFX0ZBSUxFRCkpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gdGhpcy5wcm9jZXNzKGlucHV0RGF0YUNsb25lKTsgLy8gdGhlIHJlY29nbml6ZXIgaGFzIHJlY29nbml6ZWQgYSBnZXN0dXJlXG4gICAgLy8gc28gdHJpZ2dlciBhbiBldmVudFxuXG4gICAgaWYgKHRoaXMuc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEIHwgU1RBVEVfRU5ERUQgfCBTVEFURV9DQU5DRUxMRUQpKSB7XG4gICAgICB0aGlzLnRyeUVtaXQoaW5wdXREYXRhQ2xvbmUpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJldHVybiB0aGUgc3RhdGUgb2YgdGhlIHJlY29nbml6ZXJcbiAgICogdGhlIGFjdHVhbCByZWNvZ25pemluZyBoYXBwZW5zIGluIHRoaXMgbWV0aG9kXG4gICAqIEB2aXJ0dWFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICogQHJldHVybnMge2NvbnN0YW50fSBTVEFURVxuICAgKi9cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5cblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXREYXRhKSB7fTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmV0dXJuIHRoZSBwcmVmZXJyZWQgdG91Y2gtYWN0aW9uXG4gICAqIEB2aXJ0dWFsXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG5cblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHt9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FsbGVkIHdoZW4gdGhlIGdlc3R1cmUgaXNuJ3QgYWxsb3dlZCB0byByZWNvZ25pemVcbiAgICogbGlrZSB3aGVuIGFub3RoZXIgaXMgYmVpbmcgcmVjb2duaXplZCBvciBpdCBpcyBkaXNhYmxlZFxuICAgKiBAdmlydHVhbFxuICAgKi9cblxuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge307XG5cbiAgcmV0dXJuIFJlY29nbml6ZXI7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEEgdGFwIGlzIHJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb2luZyBhIHNtYWxsIHRhcC9jbGljay4gTXVsdGlwbGUgdGFwcyBhcmUgcmVjb2duaXplZCBpZiB0aGV5IG9jY3VyXG4gKiBiZXR3ZWVuIHRoZSBnaXZlbiBpbnRlcnZhbCBhbmQgcG9zaXRpb24uIFRoZSBkZWxheSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcmVjb2duaXplIG11bHRpLXRhcHMgd2l0aG91dCBmaXJpbmdcbiAqIGEgc2luZ2xlIHRhcC5cbiAqXG4gKiBUaGUgZXZlbnREYXRhIGZyb20gdGhlIGVtaXR0ZWQgZXZlbnQgY29udGFpbnMgdGhlIHByb3BlcnR5IGB0YXBDb3VudGAsIHdoaWNoIGNvbnRhaW5zIHRoZSBhbW91bnQgb2ZcbiAqIG11bHRpLXRhcHMgYmVpbmcgcmVjb2duaXplZC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBUYXBSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShUYXBSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gVGFwUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3RhcCcsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIHRhcHM6IDEsXG4gICAgICBpbnRlcnZhbDogMzAwLFxuICAgICAgLy8gbWF4IHRpbWUgYmV0d2VlbiB0aGUgbXVsdGktdGFwIHRhcHNcbiAgICAgIHRpbWU6IDI1MCxcbiAgICAgIC8vIG1heCB0aW1lIG9mIHRoZSBwb2ludGVyIHRvIGJlIGRvd24gKGxpa2UgZmluZ2VyIG9uIHRoZSBzY3JlZW4pXG4gICAgICB0aHJlc2hvbGQ6IDksXG4gICAgICAvLyBhIG1pbmltYWwgbW92ZW1lbnQgaXMgb2ssIGJ1dCBrZWVwIGl0IGxvd1xuICAgICAgcG9zVGhyZXNob2xkOiAxMFxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzOyAvLyBwcmV2aW91cyB0aW1lIGFuZCBjZW50ZXIsXG4gICAgLy8gdXNlZCBmb3IgdGFwIGNvdW50aW5nXG5cbiAgICBfdGhpcy5wVGltZSA9IGZhbHNlO1xuICAgIF90aGlzLnBDZW50ZXIgPSBmYWxzZTtcbiAgICBfdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIF90aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgX3RoaXMuY291bnQgPSAwO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUYXBSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9NQU5JUFVMQVRJT05dO1xuICB9O1xuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgIHZhciB2YWxpZFRvdWNoVGltZSA9IGlucHV0LmRlbHRhVGltZSA8IG9wdGlvbnMudGltZTtcbiAgICB0aGlzLnJlc2V0KCk7XG5cbiAgICBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgdGhpcy5jb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICB9IC8vIHdlIG9ubHkgYWxsb3cgbGl0dGxlIG1vdmVtZW50XG4gICAgLy8gYW5kIHdlJ3ZlIHJlYWNoZWQgYW4gZW5kIGV2ZW50LCBzbyBhIHRhcCBpcyBwb3NzaWJsZVxuXG5cbiAgICBpZiAodmFsaWRNb3ZlbWVudCAmJiB2YWxpZFRvdWNoVGltZSAmJiB2YWxpZFBvaW50ZXJzKSB7XG4gICAgICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9PSBJTlBVVF9FTkQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbGlkSW50ZXJ2YWwgPSB0aGlzLnBUaW1lID8gaW5wdXQudGltZVN0YW1wIC0gdGhpcy5wVGltZSA8IG9wdGlvbnMuaW50ZXJ2YWwgOiB0cnVlO1xuICAgICAgdmFyIHZhbGlkTXVsdGlUYXAgPSAhdGhpcy5wQ2VudGVyIHx8IGdldERpc3RhbmNlKHRoaXMucENlbnRlciwgaW5wdXQuY2VudGVyKSA8IG9wdGlvbnMucG9zVGhyZXNob2xkO1xuICAgICAgdGhpcy5wVGltZSA9IGlucHV0LnRpbWVTdGFtcDtcbiAgICAgIHRoaXMucENlbnRlciA9IGlucHV0LmNlbnRlcjtcblxuICAgICAgaWYgKCF2YWxpZE11bHRpVGFwIHx8ICF2YWxpZEludGVydmFsKSB7XG4gICAgICAgIHRoaXMuY291bnQgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb3VudCArPSAxO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbnB1dCA9IGlucHV0OyAvLyBpZiB0YXAgY291bnQgbWF0Y2hlcyB3ZSBoYXZlIHJlY29nbml6ZWQgaXQsXG4gICAgICAvLyBlbHNlIGl0IGhhcyBiZWdhbiByZWNvZ25pemluZy4uLlxuXG4gICAgICB2YXIgdGFwQ291bnQgPSB0aGlzLmNvdW50ICUgb3B0aW9ucy50YXBzO1xuXG4gICAgICBpZiAodGFwQ291bnQgPT09IDApIHtcbiAgICAgICAgLy8gbm8gZmFpbGluZyByZXF1aXJlbWVudHMsIGltbWVkaWF0ZWx5IHRyaWdnZXIgdGhlIHRhcCBldmVudFxuICAgICAgICAvLyBvciB3YWl0IGFzIGxvbmcgYXMgdGhlIG11bHRpdGFwIGludGVydmFsIHRvIHRyaWdnZXJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1JlcXVpcmVGYWlsdXJlcygpKSB7XG4gICAgICAgICAgcmV0dXJuIFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzMi5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG5cbiAgICAgICAgICAgIF90aGlzMi50cnlFbWl0KCk7XG4gICAgICAgICAgfSwgb3B0aW9ucy5pbnRlcnZhbCk7XG4gICAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICBfcHJvdG8uZmFpbFRpbWVvdXQgPSBmdW5jdGlvbiBmYWlsVGltZW91dCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgfSwgdGhpcy5vcHRpb25zLmludGVydmFsKTtcbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICB0aGlzLl9pbnB1dC50YXBDb3VudCA9IHRoaXMuY291bnQ7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsIHRoaXMuX2lucHV0KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFRhcFJlY29nbml6ZXI7XG59KFJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUaGlzIHJlY29nbml6ZXIgaXMganVzdCB1c2VkIGFzIGEgYmFzZSBmb3IgdGhlIHNpbXBsZSBhdHRyaWJ1dGUgcmVjb2duaXplcnMuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuXG52YXIgQXR0clJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKEF0dHJSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gQXR0clJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX1JlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBwb2ludGVyczogMVxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBVc2VkIHRvIGNoZWNrIGlmIGl0IHRoZSByZWNvZ25pemVyIHJlY2VpdmVzIHZhbGlkIGlucHV0LCBsaWtlIGlucHV0LmRpc3RhbmNlID4gMTAuXG4gICAqIEBtZW1iZXJvZiBBdHRyUmVjb2duaXplclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IHJlY29nbml6ZWRcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gQXR0clJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgdmFyIG9wdGlvblBvaW50ZXJzID0gdGhpcy5vcHRpb25zLnBvaW50ZXJzO1xuICAgIHJldHVybiBvcHRpb25Qb2ludGVycyA9PT0gMCB8fCBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvblBvaW50ZXJzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogUHJvY2VzcyB0aGUgaW5wdXQgYW5kIHJldHVybiB0aGUgc3RhdGUgZm9yIHRoZSByZWNvZ25pemVyXG4gICAqIEBtZW1iZXJvZiBBdHRyUmVjb2duaXplclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICogQHJldHVybnMgeyp9IFN0YXRlXG4gICAqL1xuXG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICB2YXIgZXZlbnRUeXBlID0gaW5wdXQuZXZlbnRUeXBlO1xuICAgIHZhciBpc1JlY29nbml6ZWQgPSBzdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQpO1xuICAgIHZhciBpc1ZhbGlkID0gdGhpcy5hdHRyVGVzdChpbnB1dCk7IC8vIG9uIGNhbmNlbCBpbnB1dCBhbmQgd2UndmUgcmVjb2duaXplZCBiZWZvcmUsIHJldHVybiBTVEFURV9DQU5DRUxMRURcblxuICAgIGlmIChpc1JlY29nbml6ZWQgJiYgKGV2ZW50VHlwZSAmIElOUFVUX0NBTkNFTCB8fCAhaXNWYWxpZCkpIHtcbiAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0NBTkNFTExFRDtcbiAgICB9IGVsc2UgaWYgKGlzUmVjb2duaXplZCB8fCBpc1ZhbGlkKSB7XG4gICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0VOREVEO1xuICAgICAgfSBlbHNlIGlmICghKHN0YXRlICYgU1RBVEVfQkVHQU4pKSB7XG4gICAgICAgIHJldHVybiBTVEFURV9CRUdBTjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0hBTkdFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIHJldHVybiBBdHRyUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGRpcmVjdGlvbiBjb25zIHRvIHN0cmluZ1xuICogQHBhcmFtIHtjb25zdGFudH0gZGlyZWN0aW9uXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGRpcmVjdGlvblN0cihkaXJlY3Rpb24pIHtcbiAgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0RPV04pIHtcbiAgICByZXR1cm4gJ2Rvd24nO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX1VQKSB7XG4gICAgcmV0dXJuICd1cCc7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fTEVGVCkge1xuICAgIHJldHVybiAnbGVmdCc7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fUklHSFQpIHtcbiAgICByZXR1cm4gJ3JpZ2h0JztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUGFuXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBhbmQgbW92ZWQgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBQYW5SZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUGFuUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBQYW5SZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3BhbicsXG4gICAgICB0aHJlc2hvbGQ6IDEwLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICBkaXJlY3Rpb246IERJUkVDVElPTl9BTExcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgICBfdGhpcy5wWCA9IG51bGw7XG4gICAgX3RoaXMucFkgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQYW5SZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcbiAgICB2YXIgYWN0aW9ucyA9IFtdO1xuXG4gICAgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICBhY3Rpb25zLnB1c2goVE9VQ0hfQUNUSU9OX1BBTl9ZKTtcbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICBhY3Rpb25zLnB1c2goVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZGlyZWN0aW9uVGVzdCA9IGZ1bmN0aW9uIGRpcmVjdGlvblRlc3QoaW5wdXQpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgaGFzTW92ZWQgPSB0cnVlO1xuICAgIHZhciBkaXN0YW5jZSA9IGlucHV0LmRpc3RhbmNlO1xuICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5kaXJlY3Rpb247XG4gICAgdmFyIHggPSBpbnB1dC5kZWx0YVg7XG4gICAgdmFyIHkgPSBpbnB1dC5kZWx0YVk7IC8vIGxvY2sgdG8gYXhpcz9cblxuICAgIGlmICghKGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uKSkge1xuICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgICAgZGlyZWN0aW9uID0geCA9PT0gMCA/IERJUkVDVElPTl9OT05FIDogeCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgICAgICAgaGFzTW92ZWQgPSB4ICE9PSB0aGlzLnBYO1xuICAgICAgICBkaXN0YW5jZSA9IE1hdGguYWJzKGlucHV0LmRlbHRhWCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXJlY3Rpb24gPSB5ID09PSAwID8gRElSRUNUSU9OX05PTkUgOiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xuICAgICAgICBoYXNNb3ZlZCA9IHkgIT09IHRoaXMucFk7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFZKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgcmV0dXJuIGhhc01vdmVkICYmIGRpc3RhbmNlID4gb3B0aW9ucy50aHJlc2hvbGQgJiYgZGlyZWN0aW9uICYgb3B0aW9ucy5kaXJlY3Rpb247XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICByZXR1cm4gQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmICggLy8gcmVwbGFjZSB3aXRoIGEgc3VwZXIgY2FsbFxuICAgIHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTiB8fCAhKHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTikgJiYgdGhpcy5kaXJlY3Rpb25UZXN0KGlucHV0KSk7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdGhpcy5wWCA9IGlucHV0LmRlbHRhWDtcbiAgICB0aGlzLnBZID0gaW5wdXQuZGVsdGFZO1xuICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25TdHIoaW5wdXQuZGlyZWN0aW9uKTtcblxuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIGlucHV0LmFkZGl0aW9uYWxFdmVudCA9IHRoaXMub3B0aW9ucy5ldmVudCArIGRpcmVjdGlvbjtcbiAgICB9XG5cbiAgICBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFBhblJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogU3dpcGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBtb3ZpbmcgZmFzdCAodmVsb2NpdHkpLCB3aXRoIGVub3VnaCBkaXN0YW5jZSBpbiB0aGUgYWxsb3dlZCBkaXJlY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFN3aXBlUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFN3aXBlUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBTd2lwZVJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdzd2lwZScsXG4gICAgICB0aHJlc2hvbGQ6IDEwLFxuICAgICAgdmVsb2NpdHk6IDAuMyxcbiAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwsXG4gICAgICBwb2ludGVyczogMVxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN3aXBlUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFBhblJlY29nbml6ZXIucHJvdG90eXBlLmdldFRvdWNoQWN0aW9uLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcbiAgICB2YXIgdmVsb2NpdHk7XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgKERJUkVDVElPTl9IT1JJWk9OVEFMIHwgRElSRUNUSU9OX1ZFUlRJQ0FMKSkge1xuICAgICAgdmVsb2NpdHkgPSBpbnB1dC5vdmVyYWxsVmVsb2NpdHk7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgdmVsb2NpdHkgPSBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgZGlyZWN0aW9uICYgaW5wdXQub2Zmc2V0RGlyZWN0aW9uICYmIGlucHV0LmRpc3RhbmNlID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCAmJiBpbnB1dC5tYXhQb2ludGVycyA9PT0gdGhpcy5vcHRpb25zLnBvaW50ZXJzICYmIGFicyh2ZWxvY2l0eSkgPiB0aGlzLm9wdGlvbnMudmVsb2NpdHkgJiYgaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25TdHIoaW5wdXQub2Zmc2V0RGlyZWN0aW9uKTtcblxuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIGRpcmVjdGlvbiwgaW5wdXQpO1xuICAgIH1cblxuICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiBTd2lwZVJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUGluY2hcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVycyBhcmUgbW92aW5nIHRvd2FyZCAoem9vbS1pbikgb3IgYXdheSBmcm9tIGVhY2ggb3RoZXIgKHpvb20tb3V0KS5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgUGluY2hSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUGluY2hSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFBpbmNoUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3BpbmNoJyxcbiAgICAgIHRocmVzaG9sZDogMCxcbiAgICAgIHBvaW50ZXJzOiAyXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUGluY2hSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIChNYXRoLmFicyhpbnB1dC5zY2FsZSAtIDEpID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCB8fCB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIGlmIChpbnB1dC5zY2FsZSAhPT0gMSkge1xuICAgICAgdmFyIGluT3V0ID0gaW5wdXQuc2NhbGUgPCAxID8gJ2luJyA6ICdvdXQnO1xuICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgaW5PdXQ7XG4gICAgfVxuXG4gICAgX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5lbWl0LmNhbGwodGhpcywgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiBQaW5jaFJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUm90YXRlXG4gKiBSZWNvZ25pemVkIHdoZW4gdHdvIG9yIG1vcmUgcG9pbnRlciBhcmUgbW92aW5nIGluIGEgY2lyY3VsYXIgbW90aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBSb3RhdGVSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUm90YXRlUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBSb3RhdGVSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncm90YXRlJyxcbiAgICAgIHRocmVzaG9sZDogMCxcbiAgICAgIHBvaW50ZXJzOiAyXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUm90YXRlUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiAoTWF0aC5hYnMoaW5wdXQucm90YXRpb24pID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCB8fCB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pO1xuICB9O1xuXG4gIHJldHVybiBSb3RhdGVSZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFByZXNzXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBmb3IgeCBtcyB3aXRob3V0IGFueSBtb3ZlbWVudC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBQcmVzc1JlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFByZXNzUmVjb2duaXplciwgX1JlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFByZXNzUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3ByZXNzJyxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgdGltZTogMjUxLFxuICAgICAgLy8gbWluaW1hbCB0aW1lIG9mIHRoZSBwb2ludGVyIHRvIGJlIHByZXNzZWRcbiAgICAgIHRocmVzaG9sZDogOVxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICAgIF90aGlzLl90aW1lciA9IG51bGw7XG4gICAgX3RoaXMuX2lucHV0ID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUHJlc3NSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9BVVRPXTtcbiAgfTtcblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgIHZhciB2YWxpZE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCBvcHRpb25zLnRocmVzaG9sZDtcbiAgICB2YXIgdmFsaWRUaW1lID0gaW5wdXQuZGVsdGFUaW1lID4gb3B0aW9ucy50aW1lO1xuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIHdlIG9ubHkgYWxsb3cgbGl0dGxlIG1vdmVtZW50XG4gICAgLy8gYW5kIHdlJ3ZlIHJlYWNoZWQgYW4gZW5kIGV2ZW50LCBzbyBhIHRhcCBpcyBwb3NzaWJsZVxuXG4gICAgaWYgKCF2YWxpZE1vdmVtZW50IHx8ICF2YWxpZFBvaW50ZXJzIHx8IGlucHV0LmV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmICF2YWxpZFRpbWUpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9IGVsc2UgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX1NUQVJUKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuc3RhdGUgPSBTVEFURV9SRUNPR05JWkVEO1xuXG4gICAgICAgIF90aGlzMi50cnlFbWl0KCk7XG4gICAgICB9LCBvcHRpb25zLnRpbWUpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQgJiYgaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQgKyBcInVwXCIsIGlucHV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsIHRoaXMuX2lucHV0KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFByZXNzUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBpZiBET00gZXZlbnRzIGFyZSBiZWluZyB0cmlnZ2VyZWQuXG4gICAqIEJ1dCB0aGlzIGlzIHNsb3dlciBhbmQgdW51c2VkIGJ5IHNpbXBsZSBpbXBsZW1lbnRhdGlvbnMsIHNvIGRpc2FibGVkIGJ5IGRlZmF1bHQuXG4gICAqIEB0eXBlIHtCb29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZG9tRXZlbnRzOiBmYWxzZSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogVGhlIHZhbHVlIGZvciB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkvZmFsbGJhY2suXG4gICAqIFdoZW4gc2V0IHRvIGBjb21wdXRlYCBpdCB3aWxsIG1hZ2ljYWxseSBzZXQgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIGFkZGVkIHJlY29nbml6ZXJzLlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKiBAZGVmYXVsdCBjb21wdXRlXG4gICAqL1xuICB0b3VjaEFjdGlvbjogVE9VQ0hfQUNUSU9OX0NPTVBVVEUsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtCb29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBlbmFibGU6IHRydWUsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEVYUEVSSU1FTlRBTCBGRUFUVVJFIC0tIGNhbiBiZSByZW1vdmVkL2NoYW5nZWRcbiAgICogQ2hhbmdlIHRoZSBwYXJlbnQgaW5wdXQgdGFyZ2V0IGVsZW1lbnQuXG4gICAqIElmIE51bGwsIHRoZW4gaXQgaXMgYmVpbmcgc2V0IHRoZSB0byBtYWluIGVsZW1lbnQuXG4gICAqIEB0eXBlIHtOdWxsfEV2ZW50VGFyZ2V0fVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBpbnB1dFRhcmdldDogbnVsbCxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZm9yY2UgYW4gaW5wdXQgY2xhc3NcbiAgICogQHR5cGUge051bGx8RnVuY3Rpb259XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGlucHV0Q2xhc3M6IG51bGwsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFNvbWUgQ1NTIHByb3BlcnRpZXMgY2FuIGJlIHVzZWQgdG8gaW1wcm92ZSB0aGUgd29ya2luZyBvZiBIYW1tZXIuXG4gICAqIEFkZCB0aGVtIHRvIHRoaXMgbWV0aG9kIGFuZCB0aGV5IHdpbGwgYmUgc2V0IHdoZW4gY3JlYXRpbmcgYSBuZXcgTWFuYWdlci5cbiAgICogQG5hbWVzcGFjZVxuICAgKi9cbiAgY3NzUHJvcHM6IHtcbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGVzIHRleHQgc2VsZWN0aW9uIHRvIGltcHJvdmUgdGhlIGRyYWdnaW5nIGdlc3R1cmUuIE1haW5seSBmb3IgZGVza3RvcCBicm93c2Vycy5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlIHRoZSBXaW5kb3dzIFBob25lIGdyaXBwZXJzIHdoZW4gcHJlc3NpbmcgYW4gZWxlbWVudC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHRvdWNoU2VsZWN0OiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZXMgdGhlIGRlZmF1bHQgY2FsbG91dCBzaG93biB3aGVuIHlvdSB0b3VjaCBhbmQgaG9sZCBhIHRvdWNoIHRhcmdldC5cbiAgICAgKiBPbiBpT1MsIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0IHN1Y2ggYXMgYSBsaW5rLCBTYWZhcmkgZGlzcGxheXNcbiAgICAgKiBhIGNhbGxvdXQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGluay4gVGhpcyBwcm9wZXJ0eSBhbGxvd3MgeW91IHRvIGRpc2FibGUgdGhhdCBjYWxsb3V0LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdG91Y2hDYWxsb3V0OiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgem9vbWluZyBpcyBlbmFibGVkLiBVc2VkIGJ5IElFMTA+XG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICBjb250ZW50Wm9vbWluZzogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIFNwZWNpZmllcyB0aGF0IGFuIGVudGlyZSBlbGVtZW50IHNob3VsZCBiZSBkcmFnZ2FibGUgaW5zdGVhZCBvZiBpdHMgY29udGVudHMuIE1haW5seSBmb3IgZGVza3RvcCBicm93c2Vycy5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHVzZXJEcmFnOiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogT3ZlcnJpZGVzIHRoZSBoaWdobGlnaHQgY29sb3Igc2hvd24gd2hlbiB0aGUgdXNlciB0YXBzIGEgbGluayBvciBhIEphdmFTY3JpcHRcbiAgICAgKiBjbGlja2FibGUgZWxlbWVudCBpbiBpT1MuIFRoaXMgcHJvcGVydHkgb2JleXMgdGhlIGFscGhhIHZhbHVlLCBpZiBzcGVjaWZpZWQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAncmdiYSgwLDAsMCwwKSdcbiAgICAgKi9cbiAgICB0YXBIaWdobGlnaHRDb2xvcjogXCJyZ2JhKDAsMCwwLDApXCJcbiAgfVxufTtcbi8qKlxuICogQHByaXZhdGVcbiAqIERlZmF1bHQgcmVjb2duaXplciBzZXR1cCB3aGVuIGNhbGxpbmcgYEhhbW1lcigpYFxuICogV2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyIHRoZXNlIHdpbGwgYmUgc2tpcHBlZC5cbiAqIFRoaXMgaXMgc2VwYXJhdGVkIHdpdGggb3RoZXIgZGVmYXVsdHMgYmVjYXVzZSBvZiB0cmVlLXNoYWtpbmcuXG4gKiBAdHlwZSB7QXJyYXl9XG4gKi9cblxudmFyIHByZXNldCA9IFtbUm90YXRlUmVjb2duaXplciwge1xuICBlbmFibGU6IGZhbHNlXG59XSwgW1BpbmNoUmVjb2duaXplciwge1xuICBlbmFibGU6IGZhbHNlXG59LCBbJ3JvdGF0ZSddXSwgW1N3aXBlUmVjb2duaXplciwge1xuICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG59XSwgW1BhblJlY29nbml6ZXIsIHtcbiAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTFxufSwgWydzd2lwZSddXSwgW1RhcFJlY29nbml6ZXJdLCBbVGFwUmVjb2duaXplciwge1xuICBldmVudDogJ2RvdWJsZXRhcCcsXG4gIHRhcHM6IDJcbn0sIFsndGFwJ11dLCBbUHJlc3NSZWNvZ25pemVyXV07XG5cbnZhciBTVE9QID0gMTtcbnZhciBGT1JDRURfU1RPUCA9IDI7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBhZGQvcmVtb3ZlIHRoZSBjc3MgcHJvcGVydGllcyBhcyBkZWZpbmVkIGluIG1hbmFnZXIub3B0aW9ucy5jc3NQcm9wc1xuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGFkZFxuICovXG5cbmZ1bmN0aW9uIHRvZ2dsZUNzc1Byb3BzKG1hbmFnZXIsIGFkZCkge1xuICB2YXIgZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcblxuICBpZiAoIWVsZW1lbnQuc3R5bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcHJvcDtcbiAgZWFjaChtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgIHByb3AgPSBwcmVmaXhlZChlbGVtZW50LnN0eWxlLCBuYW1lKTtcblxuICAgIGlmIChhZGQpIHtcbiAgICAgIG1hbmFnZXIub2xkQ3NzUHJvcHNbcHJvcF0gPSBlbGVtZW50LnN0eWxlW3Byb3BdO1xuICAgICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSB8fCBcIlwiO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKCFhZGQpIHtcbiAgICBtYW5hZ2VyLm9sZENzc1Byb3BzID0ge307XG4gIH1cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqIHRyaWdnZXIgZG9tIGV2ZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gKi9cblxuXG5mdW5jdGlvbiB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpIHtcbiAgdmFyIGdlc3R1cmVFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gIGdlc3R1cmVFdmVudC5pbml0RXZlbnQoZXZlbnQsIHRydWUsIHRydWUpO1xuICBnZXN0dXJlRXZlbnQuZ2VzdHVyZSA9IGRhdGE7XG4gIGRhdGEudGFyZ2V0LmRpc3BhdGNoRXZlbnQoZ2VzdHVyZUV2ZW50KTtcbn1cbi8qKlxuKiBAcHJpdmF0ZVxuICogTWFuYWdlclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxuXG52YXIgTWFuYWdlciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE1hbmFnZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBhc3NpZ24kMSh7fSwgZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuICAgIHRoaXMub3B0aW9ucy5pbnB1dFRhcmdldCA9IHRoaXMub3B0aW9ucy5pbnB1dFRhcmdldCB8fCBlbGVtZW50O1xuICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICB0aGlzLnNlc3Npb24gPSB7fTtcbiAgICB0aGlzLnJlY29nbml6ZXJzID0gW107XG4gICAgdGhpcy5vbGRDc3NQcm9wcyA9IHt9O1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5pbnB1dCA9IGNyZWF0ZUlucHV0SW5zdGFuY2UodGhpcyk7XG4gICAgdGhpcy50b3VjaEFjdGlvbiA9IG5ldyBUb3VjaEFjdGlvbih0aGlzLCB0aGlzLm9wdGlvbnMudG91Y2hBY3Rpb24pO1xuICAgIHRvZ2dsZUNzc1Byb3BzKHRoaXMsIHRydWUpO1xuICAgIGVhY2godGhpcy5vcHRpb25zLnJlY29nbml6ZXJzLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIHJlY29nbml6ZXIgPSBfdGhpcy5hZGQobmV3IGl0ZW1bMF0oaXRlbVsxXSkpO1xuXG4gICAgICBpdGVtWzJdICYmIHJlY29nbml6ZXIucmVjb2duaXplV2l0aChpdGVtWzJdKTtcbiAgICAgIGl0ZW1bM10gJiYgcmVjb2duaXplci5yZXF1aXJlRmFpbHVyZShpdGVtWzNdKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge01hbmFnZXJ9XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IE1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQob3B0aW9ucykge1xuICAgIGFzc2lnbiQxKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7IC8vIE9wdGlvbnMgdGhhdCBuZWVkIGEgbGl0dGxlIG1vcmUgc2V0dXBcblxuICAgIGlmIChvcHRpb25zLnRvdWNoQWN0aW9uKSB7XG4gICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmlucHV0VGFyZ2V0KSB7XG4gICAgICAvLyBDbGVhbiB1cCBleGlzdGluZyBldmVudCBsaXN0ZW5lcnMgYW5kIHJlaW5pdGlhbGl6ZVxuICAgICAgdGhpcy5pbnB1dC5kZXN0cm95KCk7XG4gICAgICB0aGlzLmlucHV0LnRhcmdldCA9IG9wdGlvbnMuaW5wdXRUYXJnZXQ7XG4gICAgICB0aGlzLmlucHV0LmluaXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHN0b3AgcmVjb2duaXppbmcgZm9yIHRoaXMgc2Vzc2lvbi5cbiAgICogVGhpcyBzZXNzaW9uIHdpbGwgYmUgZGlzY2FyZGVkLCB3aGVuIGEgbmV3IFtpbnB1dF1zdGFydCBldmVudCBpcyBmaXJlZC5cbiAgICogV2hlbiBmb3JjZWQsIHRoZSByZWNvZ25pemVyIGN5Y2xlIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHkuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2ZvcmNlXVxuICAgKi9cblxuXG4gIF9wcm90by5zdG9wID0gZnVuY3Rpb24gc3RvcChmb3JjZSkge1xuICAgIHRoaXMuc2Vzc2lvbi5zdG9wcGVkID0gZm9yY2UgPyBGT1JDRURfU1RPUCA6IFNUT1A7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBydW4gdGhlIHJlY29nbml6ZXJzIVxuICAgKiBjYWxsZWQgYnkgdGhlIGlucHV0SGFuZGxlciBmdW5jdGlvbiBvbiBldmVyeSBtb3ZlbWVudCBvZiB0aGUgcG9pbnRlcnMgKHRvdWNoZXMpXG4gICAqIGl0IHdhbGtzIHRocm91Z2ggYWxsIHRoZSByZWNvZ25pemVycyBhbmQgdHJpZXMgdG8gZGV0ZWN0IHRoZSBnZXN0dXJlIHRoYXQgaXMgYmVpbmcgbWFkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZSA9IGZ1bmN0aW9uIHJlY29nbml6ZShpbnB1dERhdGEpIHtcbiAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcblxuICAgIGlmIChzZXNzaW9uLnN0b3BwZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHJ1biB0aGUgdG91Y2gtYWN0aW9uIHBvbHlmaWxsXG5cblxuICAgIHRoaXMudG91Y2hBY3Rpb24ucHJldmVudERlZmF1bHRzKGlucHV0RGF0YSk7XG4gICAgdmFyIHJlY29nbml6ZXI7XG4gICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVyczsgLy8gdGhpcyBob2xkcyB0aGUgcmVjb2duaXplciB0aGF0IGlzIGJlaW5nIHJlY29nbml6ZWQuXG4gICAgLy8gc28gdGhlIHJlY29nbml6ZXIncyBzdGF0ZSBuZWVkcyB0byBiZSBCRUdBTiwgQ0hBTkdFRCwgRU5ERUQgb3IgUkVDT0dOSVpFRFxuICAgIC8vIGlmIG5vIHJlY29nbml6ZXIgaXMgZGV0ZWN0aW5nIGEgdGhpbmcsIGl0IGlzIHNldCB0byBgbnVsbGBcblxuICAgIHZhciBjdXJSZWNvZ25pemVyID0gc2Vzc2lvbi5jdXJSZWNvZ25pemVyOyAvLyByZXNldCB3aGVuIHRoZSBsYXN0IHJlY29nbml6ZXIgaXMgcmVjb2duaXplZFxuICAgIC8vIG9yIHdoZW4gd2UncmUgaW4gYSBuZXcgc2Vzc2lvblxuXG4gICAgaWYgKCFjdXJSZWNvZ25pemVyIHx8IGN1clJlY29nbml6ZXIgJiYgY3VyUmVjb2duaXplci5zdGF0ZSAmIFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHNlc3Npb24uY3VyUmVjb2duaXplciA9IG51bGw7XG4gICAgICBjdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHJlY29nbml6ZXJzLmxlbmd0aCkge1xuICAgICAgcmVjb2duaXplciA9IHJlY29nbml6ZXJzW2ldOyAvLyBmaW5kIG91dCBpZiB3ZSBhcmUgYWxsb3dlZCB0cnkgdG8gcmVjb2duaXplIHRoZSBpbnB1dCBmb3IgdGhpcyBvbmUuXG4gICAgICAvLyAxLiAgIGFsbG93IGlmIHRoZSBzZXNzaW9uIGlzIE5PVCBmb3JjZWQgc3RvcHBlZCAoc2VlIHRoZSAuc3RvcCgpIG1ldGhvZClcbiAgICAgIC8vIDIuICAgYWxsb3cgaWYgd2Ugc3RpbGwgaGF2ZW4ndCByZWNvZ25pemVkIGEgZ2VzdHVyZSBpbiB0aGlzIHNlc3Npb24sIG9yIHRoZSB0aGlzIHJlY29nbml6ZXIgaXMgdGhlIG9uZVxuICAgICAgLy8gICAgICB0aGF0IGlzIGJlaW5nIHJlY29nbml6ZWQuXG4gICAgICAvLyAzLiAgIGFsbG93IGlmIHRoZSByZWNvZ25pemVyIGlzIGFsbG93ZWQgdG8gcnVuIHNpbXVsdGFuZW91cyB3aXRoIHRoZSBjdXJyZW50IHJlY29nbml6ZWQgcmVjb2duaXplci5cbiAgICAgIC8vICAgICAgdGhpcyBjYW4gYmUgc2V0dXAgd2l0aCB0aGUgYHJlY29nbml6ZVdpdGgoKWAgbWV0aG9kIG9uIHRoZSByZWNvZ25pemVyLlxuXG4gICAgICBpZiAoc2Vzc2lvbi5zdG9wcGVkICE9PSBGT1JDRURfU1RPUCAmJiAoIC8vIDFcbiAgICAgICFjdXJSZWNvZ25pemVyIHx8IHJlY29nbml6ZXIgPT09IGN1clJlY29nbml6ZXIgfHwgLy8gMlxuICAgICAgcmVjb2duaXplci5jYW5SZWNvZ25pemVXaXRoKGN1clJlY29nbml6ZXIpKSkge1xuICAgICAgICAvLyAzXG4gICAgICAgIHJlY29nbml6ZXIucmVjb2duaXplKGlucHV0RGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNvZ25pemVyLnJlc2V0KCk7XG4gICAgICB9IC8vIGlmIHRoZSByZWNvZ25pemVyIGhhcyBiZWVuIHJlY29nbml6aW5nIHRoZSBpbnB1dCBhcyBhIHZhbGlkIGdlc3R1cmUsIHdlIHdhbnQgdG8gc3RvcmUgdGhpcyBvbmUgYXMgdGhlXG4gICAgICAvLyBjdXJyZW50IGFjdGl2ZSByZWNvZ25pemVyLiBidXQgb25seSBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4gYWN0aXZlIHJlY29nbml6ZXJcblxuXG4gICAgICBpZiAoIWN1clJlY29nbml6ZXIgJiYgcmVjb2duaXplci5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCkpIHtcbiAgICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgICAgY3VyUmVjb2duaXplciA9IHJlY29nbml6ZXI7XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBnZXQgYSByZWNvZ25pemVyIGJ5IGl0cyBldmVudCBuYW1lLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE51bGx9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmdldCA9IGZ1bmN0aW9uIGdldChyZWNvZ25pemVyKSB7XG4gICAgaWYgKHJlY29nbml6ZXIgaW5zdGFuY2VvZiBSZWNvZ25pemVyKSB7XG4gICAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgICB9XG5cbiAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWNvZ25pemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlY29nbml6ZXJzW2ldLm9wdGlvbnMuZXZlbnQgPT09IHJlY29nbml6ZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlY29nbml6ZXJzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgYWRkIGEgcmVjb2duaXplciB0byB0aGUgbWFuYWdlclxuICAgKiBleGlzdGluZyByZWNvZ25pemVycyB3aXRoIHRoZSBzYW1lIGV2ZW50IG5hbWUgd2lsbCBiZSByZW1vdmVkXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gcmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxNYW5hZ2VyfVxuICAgKi9cblxuXG4gIF9wcm90by5hZGQgPSBmdW5jdGlvbiBhZGQocmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhyZWNvZ25pemVyLCBcImFkZFwiLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSAvLyByZW1vdmUgZXhpc3RpbmdcblxuXG4gICAgdmFyIGV4aXN0aW5nID0gdGhpcy5nZXQocmVjb2duaXplci5vcHRpb25zLmV2ZW50KTtcblxuICAgIGlmIChleGlzdGluZykge1xuICAgICAgdGhpcy5yZW1vdmUoZXhpc3RpbmcpO1xuICAgIH1cblxuICAgIHRoaXMucmVjb2duaXplcnMucHVzaChyZWNvZ25pemVyKTtcbiAgICByZWNvZ25pemVyLm1hbmFnZXIgPSB0aGlzO1xuICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgcmV0dXJuIHJlY29nbml6ZXI7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZW1vdmUgYSByZWNvZ25pemVyIGJ5IG5hbWUgb3IgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gcmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICovXG5cblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKHJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgXCJyZW1vdmVcIiwgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRSZWNvZ25pemVyID0gdGhpcy5nZXQocmVjb2duaXplcik7IC8vIGxldCdzIG1ha2Ugc3VyZSB0aGlzIHJlY29nbml6ZXIgZXhpc3RzXG5cbiAgICBpZiAocmVjb2duaXplcikge1xuICAgICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcbiAgICAgIHZhciBpbmRleCA9IGluQXJyYXkocmVjb2duaXplcnMsIHRhcmdldFJlY29nbml6ZXIpO1xuXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHJlY29nbml6ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBiaW5kIGV2ZW50XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICAgKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLm9uID0gZnVuY3Rpb24gb24oZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkIHx8IGhhbmRsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaGFuZGxlcnNbZXZlbnRdID0gaGFuZGxlcnNbZXZlbnRdIHx8IFtdO1xuICAgICAgaGFuZGxlcnNbZXZlbnRdLnB1c2goaGFuZGxlcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSB1bmJpbmQgZXZlbnQsIGxlYXZlIGVtaXQgYmxhbmsgdG8gcmVtb3ZlIGFsbCBoYW5kbGVyc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtoYW5kbGVyXVxuICAgKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLm9mZiA9IGZ1bmN0aW9uIG9mZihldmVudHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgZWFjaChzcGxpdFN0cihldmVudHMpLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICBkZWxldGUgaGFuZGxlcnNbZXZlbnRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlcnNbZXZlbnRdICYmIGhhbmRsZXJzW2V2ZW50XS5zcGxpY2UoaW5BcnJheShoYW5kbGVyc1tldmVudF0sIGhhbmRsZXIpLCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIGVtaXQgZXZlbnQgdG8gdGhlIGxpc3RlbmVyc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICovXG5cblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGRhdGEpIHtcbiAgICAvLyB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dlciBkb20gZXZlbnRzXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kb21FdmVudHMpIHtcbiAgICAgIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSk7XG4gICAgfSAvLyBubyBoYW5kbGVycywgc28gc2tpcCBpdCBhbGxcblxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc1tldmVudF0gJiYgdGhpcy5oYW5kbGVyc1tldmVudF0uc2xpY2UoKTtcblxuICAgIGlmICghaGFuZGxlcnMgfHwgIWhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGEudHlwZSA9IGV2ZW50O1xuXG4gICAgZGF0YS5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRhdGEuc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgIGhhbmRsZXJzW2ldKGRhdGEpO1xuICAgICAgaSsrO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGRlc3Ryb3kgdGhlIG1hbmFnZXIgYW5kIHVuYmluZHMgYWxsIGV2ZW50c1xuICAgKiBpdCBkb2Vzbid0IHVuYmluZCBkb20gZXZlbnRzLCB0aGF0IGlzIHRoZSB1c2VyIG93biByZXNwb25zaWJpbGl0eVxuICAgKi9cblxuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmVsZW1lbnQgJiYgdG9nZ2xlQ3NzUHJvcHModGhpcywgZmFsc2UpO1xuICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICB0aGlzLnNlc3Npb24gPSB7fTtcbiAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICB0aGlzLmVsZW1lbnQgPSBudWxsO1xuICB9O1xuXG4gIHJldHVybiBNYW5hZ2VyO1xufSgpO1xuXG52YXIgU0lOR0xFX1RPVUNIX0lOUFVUX01BUCA9IHtcbiAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gIHRvdWNobW92ZTogSU5QVVRfTU9WRSxcbiAgdG91Y2hlbmQ6IElOUFVUX0VORCxcbiAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcbnZhciBTSU5HTEVfVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0JztcbnZhciBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBUb3VjaCBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgU2luZ2xlVG91Y2hJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKFNpbmdsZVRvdWNoSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gU2luZ2xlVG91Y2hJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBTaW5nbGVUb3VjaElucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldlRhcmdldCA9IFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gU0lOR0xFX1RPVUNIX1dJTkRPV19FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU2luZ2xlVG91Y2hJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHR5cGUgPSBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBzaG91bGQgd2UgaGFuZGxlIHRoZSB0b3VjaCBldmVudHM/XG5cbiAgICBpZiAodHlwZSA9PT0gSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdG91Y2hlcyA9IG5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMuY2FsbCh0aGlzLCBldiwgdHlwZSk7IC8vIHdoZW4gZG9uZSwgcmVzZXQgdGhlIHN0YXJ0ZWQgc3RhdGVcblxuICAgIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgdG91Y2hlc1swXS5sZW5ndGggLSB0b3VjaGVzWzFdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIHR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiB0b3VjaGVzWzFdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gU2luZ2xlVG91Y2hJbnB1dDtcbn0oSW5wdXQpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVTaW5nbGVUb3VjaGVzKGV2LCB0eXBlKSB7XG4gIHZhciBhbGwgPSB0b0FycmF5KGV2LnRvdWNoZXMpO1xuICB2YXIgY2hhbmdlZCA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpO1xuXG4gIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICBhbGwgPSB1bmlxdWVBcnJheShhbGwuY29uY2F0KGNoYW5nZWQpLCAnaWRlbnRpZmllcicsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIFthbGwsIGNoYW5nZWRdO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3cmFwIGEgbWV0aG9kIHdpdGggYSBkZXByZWNhdGlvbiB3YXJuaW5nIGFuZCBzdGFjayB0cmFjZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBuZXcgZnVuY3Rpb24gd3JhcHBpbmcgdGhlIHN1cHBsaWVkIG1ldGhvZC5cbiAqL1xuZnVuY3Rpb24gZGVwcmVjYXRlKG1ldGhvZCwgbmFtZSwgbWVzc2FnZSkge1xuICB2YXIgZGVwcmVjYXRpb25NZXNzYWdlID0gXCJERVBSRUNBVEVEIE1FVEhPRDogXCIgKyBuYW1lICsgXCJcXG5cIiArIG1lc3NhZ2UgKyBcIiBBVCBcXG5cIjtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZSA9IG5ldyBFcnJvcignZ2V0LXN0YWNrLXRyYWNlJyk7XG4gICAgdmFyIHN0YWNrID0gZSAmJiBlLnN0YWNrID8gZS5zdGFjay5yZXBsYWNlKC9eW15cXChdKz9bXFxuJF0vZ20sICcnKS5yZXBsYWNlKC9eXFxzK2F0XFxzKy9nbSwgJycpLnJlcGxhY2UoL15PYmplY3QuPGFub255bW91cz5cXHMqXFwoL2dtLCAne2Fub255bW91c30oKUAnKSA6ICdVbmtub3duIFN0YWNrIFRyYWNlJztcbiAgICB2YXIgbG9nID0gd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLndhcm4gfHwgd2luZG93LmNvbnNvbGUubG9nKTtcblxuICAgIGlmIChsb2cpIHtcbiAgICAgIGxvZy5jYWxsKHdpbmRvdy5jb25zb2xlLCBkZXByZWNhdGlvbk1lc3NhZ2UsIHN0YWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGV4dGVuZCBvYmplY3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgaW4gZGVzdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBvbmVzIGluIHNyYy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXN0XG4gKiBAcGFyYW0ge09iamVjdH0gc3JjXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFttZXJnZT1mYWxzZV1cbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xuXG52YXIgZXh0ZW5kID0gZGVwcmVjYXRlKGZ1bmN0aW9uIChkZXN0LCBzcmMsIG1lcmdlKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwga2V5cy5sZW5ndGgpIHtcbiAgICBpZiAoIW1lcmdlIHx8IG1lcmdlICYmIGRlc3Rba2V5c1tpXV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVzdFtrZXlzW2ldXSA9IHNyY1trZXlzW2ldXTtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn0sICdleHRlbmQnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBtZXJnZSB0aGUgdmFsdWVzIGZyb20gc3JjIGluIHRoZSBkZXN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIHRoYXQgZXhpc3QgaW4gZGVzdCB3aWxsIG5vdCBiZSBvdmVyd3JpdHRlbiBieSBzcmNcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXN0XG4gKiBAcGFyYW0ge09iamVjdH0gc3JjXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBkZXN0XG4gKi9cblxudmFyIG1lcmdlID0gZGVwcmVjYXRlKGZ1bmN0aW9uIChkZXN0LCBzcmMpIHtcbiAgcmV0dXJuIGV4dGVuZChkZXN0LCBzcmMsIHRydWUpO1xufSwgJ21lcmdlJywgJ1VzZSBgYXNzaWduYC4nKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc2ltcGxlIGNsYXNzIGluaGVyaXRhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGlsZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYmFzZVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXVxuICovXG5cbmZ1bmN0aW9uIGluaGVyaXQoY2hpbGQsIGJhc2UsIHByb3BlcnRpZXMpIHtcbiAgdmFyIGJhc2VQID0gYmFzZS5wcm90b3R5cGU7XG4gIHZhciBjaGlsZFA7XG4gIGNoaWxkUCA9IGNoaWxkLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYmFzZVApO1xuICBjaGlsZFAuY29uc3RydWN0b3IgPSBjaGlsZDtcbiAgY2hpbGRQLl9zdXBlciA9IGJhc2VQO1xuXG4gIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgYXNzaWduJDEoY2hpbGRQLCBwcm9wZXJ0aWVzKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzaW1wbGUgZnVuY3Rpb24gYmluZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGJpbmRGbihmbiwgY29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm91bmRGbigpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogU2ltcGxlIHdheSB0byBjcmVhdGUgYSBtYW5hZ2VyIHdpdGggYSBkZWZhdWx0IHNldCBvZiByZWNvZ25pemVycy5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBIYW1tZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICB2YXIgSGFtbWVyID1cbiAgLyoqXG4gICAgKiBAcHJpdmF0ZVxuICAgICogQGNvbnN0IHtzdHJpbmd9XG4gICAgKi9cbiAgZnVuY3Rpb24gSGFtbWVyKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNYW5hZ2VyKGVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgIHJlY29nbml6ZXJzOiBwcmVzZXQuY29uY2F0KClcbiAgICB9LCBvcHRpb25zKSk7XG4gIH07XG5cbiAgSGFtbWVyLlZFUlNJT04gPSBcIjIuMC4xNy1yY1wiO1xuICBIYW1tZXIuRElSRUNUSU9OX0FMTCA9IERJUkVDVElPTl9BTEw7XG4gIEhhbW1lci5ESVJFQ1RJT05fRE9XTiA9IERJUkVDVElPTl9ET1dOO1xuICBIYW1tZXIuRElSRUNUSU9OX0xFRlQgPSBESVJFQ1RJT05fTEVGVDtcbiAgSGFtbWVyLkRJUkVDVElPTl9SSUdIVCA9IERJUkVDVElPTl9SSUdIVDtcbiAgSGFtbWVyLkRJUkVDVElPTl9VUCA9IERJUkVDVElPTl9VUDtcbiAgSGFtbWVyLkRJUkVDVElPTl9IT1JJWk9OVEFMID0gRElSRUNUSU9OX0hPUklaT05UQUw7XG4gIEhhbW1lci5ESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVkVSVElDQUw7XG4gIEhhbW1lci5ESVJFQ1RJT05fTk9ORSA9IERJUkVDVElPTl9OT05FO1xuICBIYW1tZXIuRElSRUNUSU9OX0RPV04gPSBESVJFQ1RJT05fRE9XTjtcbiAgSGFtbWVyLklOUFVUX1NUQVJUID0gSU5QVVRfU1RBUlQ7XG4gIEhhbW1lci5JTlBVVF9NT1ZFID0gSU5QVVRfTU9WRTtcbiAgSGFtbWVyLklOUFVUX0VORCA9IElOUFVUX0VORDtcbiAgSGFtbWVyLklOUFVUX0NBTkNFTCA9IElOUFVUX0NBTkNFTDtcbiAgSGFtbWVyLlNUQVRFX1BPU1NJQkxFID0gU1RBVEVfUE9TU0lCTEU7XG4gIEhhbW1lci5TVEFURV9CRUdBTiA9IFNUQVRFX0JFR0FOO1xuICBIYW1tZXIuU1RBVEVfQ0hBTkdFRCA9IFNUQVRFX0NIQU5HRUQ7XG4gIEhhbW1lci5TVEFURV9FTkRFRCA9IFNUQVRFX0VOREVEO1xuICBIYW1tZXIuU1RBVEVfUkVDT0dOSVpFRCA9IFNUQVRFX1JFQ09HTklaRUQ7XG4gIEhhbW1lci5TVEFURV9DQU5DRUxMRUQgPSBTVEFURV9DQU5DRUxMRUQ7XG4gIEhhbW1lci5TVEFURV9GQUlMRUQgPSBTVEFURV9GQUlMRUQ7XG4gIEhhbW1lci5NYW5hZ2VyID0gTWFuYWdlcjtcbiAgSGFtbWVyLklucHV0ID0gSW5wdXQ7XG4gIEhhbW1lci5Ub3VjaEFjdGlvbiA9IFRvdWNoQWN0aW9uO1xuICBIYW1tZXIuVG91Y2hJbnB1dCA9IFRvdWNoSW5wdXQ7XG4gIEhhbW1lci5Nb3VzZUlucHV0ID0gTW91c2VJbnB1dDtcbiAgSGFtbWVyLlBvaW50ZXJFdmVudElucHV0ID0gUG9pbnRlckV2ZW50SW5wdXQ7XG4gIEhhbW1lci5Ub3VjaE1vdXNlSW5wdXQgPSBUb3VjaE1vdXNlSW5wdXQ7XG4gIEhhbW1lci5TaW5nbGVUb3VjaElucHV0ID0gU2luZ2xlVG91Y2hJbnB1dDtcbiAgSGFtbWVyLlJlY29nbml6ZXIgPSBSZWNvZ25pemVyO1xuICBIYW1tZXIuQXR0clJlY29nbml6ZXIgPSBBdHRyUmVjb2duaXplcjtcbiAgSGFtbWVyLlRhcCA9IFRhcFJlY29nbml6ZXI7XG4gIEhhbW1lci5QYW4gPSBQYW5SZWNvZ25pemVyO1xuICBIYW1tZXIuU3dpcGUgPSBTd2lwZVJlY29nbml6ZXI7XG4gIEhhbW1lci5QaW5jaCA9IFBpbmNoUmVjb2duaXplcjtcbiAgSGFtbWVyLlJvdGF0ZSA9IFJvdGF0ZVJlY29nbml6ZXI7XG4gIEhhbW1lci5QcmVzcyA9IFByZXNzUmVjb2duaXplcjtcbiAgSGFtbWVyLm9uID0gYWRkRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5vZmYgPSByZW1vdmVFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLmVhY2ggPSBlYWNoO1xuICBIYW1tZXIubWVyZ2UgPSBtZXJnZTtcbiAgSGFtbWVyLmV4dGVuZCA9IGV4dGVuZDtcbiAgSGFtbWVyLmJpbmRGbiA9IGJpbmRGbjtcbiAgSGFtbWVyLmFzc2lnbiA9IGFzc2lnbiQxO1xuICBIYW1tZXIuaW5oZXJpdCA9IGluaGVyaXQ7XG4gIEhhbW1lci5iaW5kRm4gPSBiaW5kRm47XG4gIEhhbW1lci5wcmVmaXhlZCA9IHByZWZpeGVkO1xuICBIYW1tZXIudG9BcnJheSA9IHRvQXJyYXk7XG4gIEhhbW1lci5pbkFycmF5ID0gaW5BcnJheTtcbiAgSGFtbWVyLnVuaXF1ZUFycmF5ID0gdW5pcXVlQXJyYXk7XG4gIEhhbW1lci5zcGxpdFN0ciA9IHNwbGl0U3RyO1xuICBIYW1tZXIuYm9vbE9yRm4gPSBib29sT3JGbjtcbiAgSGFtbWVyLmhhc1BhcmVudCA9IGhhc1BhcmVudDtcbiAgSGFtbWVyLmFkZEV2ZW50TGlzdGVuZXJzID0gYWRkRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5yZW1vdmVFdmVudExpc3RlbmVycyA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIuZGVmYXVsdHMgPSBhc3NpZ24kMSh7fSwgZGVmYXVsdHMsIHtcbiAgICBwcmVzZXQ6IHByZXNldFxuICB9KTtcbiAgcmV0dXJuIEhhbW1lcjtcbn0oKTtcblxuLy8gIHN0eWxlIGxvYWRlciBidXQgYnkgc2NyaXB0IHRhZywgbm90IGJ5IHRoZSBsb2FkZXIuXG5cbnZhciBkZWZhdWx0cyQxID0gSGFtbWVyLmRlZmF1bHRzO1xuXG5leHBvcnQgZGVmYXVsdCBIYW1tZXI7XG5leHBvcnQgeyBJTlBVVF9TVEFSVCwgSU5QVVRfTU9WRSwgSU5QVVRfRU5ELCBJTlBVVF9DQU5DRUwsIFNUQVRFX1BPU1NJQkxFLCBTVEFURV9CRUdBTiwgU1RBVEVfQ0hBTkdFRCwgU1RBVEVfRU5ERUQsIFNUQVRFX1JFQ09HTklaRUQsIFNUQVRFX0NBTkNFTExFRCwgU1RBVEVfRkFJTEVELCBESVJFQ1RJT05fTk9ORSwgRElSRUNUSU9OX0xFRlQsIERJUkVDVElPTl9SSUdIVCwgRElSRUNUSU9OX1VQLCBESVJFQ1RJT05fRE9XTiwgRElSRUNUSU9OX0hPUklaT05UQUwsIERJUkVDVElPTl9WRVJUSUNBTCwgRElSRUNUSU9OX0FMTCwgTWFuYWdlciwgSW5wdXQsIFRvdWNoQWN0aW9uLCBUb3VjaElucHV0LCBNb3VzZUlucHV0LCBQb2ludGVyRXZlbnRJbnB1dCwgVG91Y2hNb3VzZUlucHV0LCBTaW5nbGVUb3VjaElucHV0LCBSZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwgVGFwUmVjb2duaXplciBhcyBUYXAsIFBhblJlY29nbml6ZXIgYXMgUGFuLCBTd2lwZVJlY29nbml6ZXIgYXMgU3dpcGUsIFBpbmNoUmVjb2duaXplciBhcyBQaW5jaCwgUm90YXRlUmVjb2duaXplciBhcyBSb3RhdGUsIFByZXNzUmVjb2duaXplciBhcyBQcmVzcywgYWRkRXZlbnRMaXN0ZW5lcnMgYXMgb24sIHJlbW92ZUV2ZW50TGlzdGVuZXJzIGFzIG9mZiwgZWFjaCwgbWVyZ2UsIGV4dGVuZCwgYXNzaWduJDEgYXMgYXNzaWduLCBpbmhlcml0LCBiaW5kRm4sIHByZWZpeGVkLCB0b0FycmF5LCBpbkFycmF5LCB1bmlxdWVBcnJheSwgc3BsaXRTdHIsIGJvb2xPckZuLCBoYXNQYXJlbnQsIGFkZEV2ZW50TGlzdGVuZXJzLCByZW1vdmVFdmVudExpc3RlbmVycywgZGVmYXVsdHMkMSBhcyBkZWZhdWx0cyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFtbWVyLmVzbS5qcy5tYXBcbiIsICIvKipcbiAqIHZpcy11dGlsXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdmlzanMvdmlzLXV0aWxcbiAqXG4gKiB1dGlsaXRpZSBjb2xsZWN0aW9uIGZvciB2aXNqc1xuICpcbiAqIEB2ZXJzaW9uIDUuMC43XG4gKiBAZGF0ZSAgICAyMDIzLTExLTIwVDA5OjA2OjUxLjA2N1pcbiAqXG4gKiBAY29weXJpZ2h0IChjKSAyMDExLTIwMTcgQWxtZW5kZSBCLlYsIGh0dHA6Ly9hbG1lbmRlLmNvbVxuICogQGNvcHlyaWdodCAoYykgMjAxNy0yMDE5IHZpc2pzIGNvbnRyaWJ1dG9ycywgaHR0cHM6Ly9naXRodWIuY29tL3Zpc2pzXG4gKlxuICogQGxpY2Vuc2VcbiAqIHZpcy5qcyBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIGJvdGhcbiAqXG4gKiAgIDEuIFRoZSBBcGFjaGUgMi4wIExpY2Vuc2VcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogICBhbmRcbiAqXG4gKiAgIDIuIFRoZSBNSVQgTGljZW5zZVxuICogICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4gKlxuICogdmlzLmpzIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBlaXRoZXIgbGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgRW1pdHRlciBmcm9tICdjb21wb25lbnQtZW1pdHRlcic7XG5pbXBvcnQgUmVhbEhhbW1lciBmcm9tICdAZWdqcy9oYW1tZXJqcyc7XG5cbi8qKlxyXG4gKiBVc2UgdGhpcyBzeW1ib2wgdG8gZGVsZXRlIHByb3BlcmllcyBpbiBkZWVwT2JqZWN0QXNzaWduLlxyXG4gKi9cclxuY29uc3QgREVMRVRFID0gU3ltYm9sKFwiREVMRVRFXCIpO1xyXG4vKipcclxuICogUHVyZSB2ZXJzaW9uIG9mIGRlZXBPYmplY3RBc3NpZ24sIGl0IGRvZXNuJ3QgbW9kaWZ5IGFueSBvZiBpdCdzIGFyZ3VtZW50cy5cclxuICpcclxuICogQHBhcmFtIGJhc2UgLSBUaGUgYmFzZSBvYmplY3QgdGhhdCBmdWxsZmlscyB0aGUgd2hvbGUgaW50ZXJmYWNlIFQuXHJcbiAqIEBwYXJhbSB1cGRhdGVzIC0gVXBkYXRlcyB0aGF0IG1heSBjaGFuZ2Ugb3IgZGVsZXRlIHByb3BzLlxyXG4gKiBAcmV0dXJucyBBIGJyYW5kIG5ldyBpbnN0YW5jZSB3aXRoIGFsbCB0aGUgc3VwcGxpZWQgb2JqZWN0cyBkZWVwbHkgbWVyZ2VkLlxyXG4gKi9cclxuZnVuY3Rpb24gcHVyZURlZXBPYmplY3RBc3NpZ24oYmFzZSwgLi4udXBkYXRlcykge1xyXG4gICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ24oe30sIGJhc2UsIC4uLnVwZGF0ZXMpO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIHZlcnNpb24gb2Ygb2JqZWN0IGFzc2lnbiB3aXRoIGFkZGl0aW9uYWwgZGVsZXRpbmcgYnkgdGhlIERFTEVURSBzeW1ib2wuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3RzIHRvIGJlIGRlZXBseSBtZXJnZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBvYmplY3QgZnJvbSB2YWx1ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwT2JqZWN0QXNzaWduKC4uLnZhbHVlcykge1xyXG4gICAgY29uc3QgbWVyZ2VkID0gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KC4uLnZhbHVlcyk7XHJcbiAgICBzdHJpcERlbGV0ZShtZXJnZWQpO1xyXG4gICAgcmV0dXJuIG1lcmdlZDtcclxufVxyXG4vKipcclxuICogRGVlcCB2ZXJzaW9uIG9mIG9iamVjdCBhc3NpZ24gd2l0aCBhZGRpdGlvbmFsIGRlbGV0aW5nIGJ5IHRoZSBERUxFVEUgc3ltYm9sLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBUaGlzIGRvZXNuJ3Qgc3RyaXAgdGhlIERFTEVURSBzeW1ib2xzIHNvIHRoZXkgbWF5IGVuZCB1cCBpbiB0aGUgZmluYWwgb2JqZWN0LlxyXG4gKiBAcGFyYW0gdmFsdWVzIC0gT2JqZWN0cyB0byBiZSBkZWVwbHkgbWVyZ2VkLlxyXG4gKiBAcmV0dXJucyBUaGUgZmlyc3Qgb2JqZWN0IGZyb20gdmFsdWVzLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KC4uLnZhbHVlcykge1xyXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeShkZWVwT2JqZWN0QXNzaWduKHZhbHVlc1swXSwgdmFsdWVzWzFdKSwgLi4udmFsdWVzLnNsaWNlKDIpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGEgPSB2YWx1ZXNbMF07XHJcbiAgICBjb25zdCBiID0gdmFsdWVzWzFdO1xyXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgYS5zZXRUaW1lKGIuZ2V0VGltZSgpKTtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBSZWZsZWN0Lm93bktleXMoYikpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChiLCBwcm9wKSkgO1xyXG4gICAgICAgIGVsc2UgaWYgKGJbcHJvcF0gPT09IERFTEVURSkge1xyXG4gICAgICAgICAgICBkZWxldGUgYVtwcm9wXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYVtwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICBiW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBhW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBiW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGFbcHJvcF0pICYmXHJcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoYVtwcm9wXSwgYltwcm9wXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gY2xvbmUoYltwcm9wXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgY2xvbmUgZ2l2ZW4gb2JqZWN0IG9yIGFycmF5LiBJbiBjYXNlIG9mIHByaW1pdGl2ZSBzaW1wbHkgcmV0dXJuLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIEFueXRoaW5nLlxyXG4gKiBAcmV0dXJucyBEZWVwIGNsb25lZCBvYmplY3QvYXJyYXkgb3IgdW5jaGFuZ2VkIGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBjbG9uZShhKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xyXG4gICAgICAgIHJldHVybiBhLm1hcCgodmFsdWUpID0+IGNsb25lKHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJvYmplY3RcIiAmJiBhICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShhLmdldFRpbWUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoe30sIGEpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFN0cmlwIERFTEVURSBmcm9tIGdpdmVuIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIGEgLSBPYmplY3Qgd2hpY2ggbWF5IGNvbnRhaW4gREVMRVRFIGJ1dCB3b24ndCBhZnRlciB0aGlzIGlzIGV4ZWN1dGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gc3RyaXBEZWxldGUoYSkge1xyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5rZXlzKGEpKSB7XHJcbiAgICAgICAgaWYgKGFbcHJvcF0gPT09IERFTEVURSkge1xyXG4gICAgICAgICAgICBkZWxldGUgYVtwcm9wXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiYgYVtwcm9wXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzdHJpcERlbGV0ZShhW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuLyoqXHJcbiAqIFNlZWRhYmxlLCBmYXN0IGFuZCByZWFzb25hYmx5IGdvb2QgKG5vdCBjcnlwdG8gYnV0IG1vcmUgdGhhbiBva2F5IGZvciBvdXJcclxuICogbmVlZHMpIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBBZGFwdGVkIGZyb20ge0BsaW5rIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDExMDQyOTEwMDczNi9odHRwOi8vYmFhZ29lLmNvbTo4MC9lbi9SYW5kb21NdXNpbmdzL2phdmFzY3JpcHR9LlxyXG4gKiBPcmlnaW5hbCBhbGdvcml0aG0gY3JlYXRlZCBieSBKb2hhbm5lcyBCYWFnw7hlIFxcPGJhYWdvZVxcQGJhYWdvZS5jb21cXD4gaW4gMjAxMC5cclxuICovXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBzZWVkZWQgcHNldWRvIHJhbmRvbSBnZW5lcmF0b3IgYmFzZWQgb24gQWxlYSBieSBKb2hhbm5lcyBCYWFnw7hlLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIEFsbCBzdXBwbGllZCBhcmd1bWVudHMgd2lsbCBiZSB1c2VkIGFzIGEgc2VlZC4gSW4gY2FzZSBub3RoaW5nXHJcbiAqIGlzIHN1cHBsaWVkIHRoZSBjdXJyZW50IHRpbWUgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIGdlbmVyYXRvci5cclxuICogQHJldHVybnMgQSByZWFkeSB0byB1c2Ugc2VlZGVkIGdlbmVyYXRvci5cclxuICovXHJcbmZ1bmN0aW9uIEFsZWEoLi4uc2VlZCkge1xyXG4gICAgcmV0dXJuIEFsZWFJbXBsZW1lbnRhdGlvbihzZWVkLmxlbmd0aCA/IHNlZWQgOiBbRGF0ZS5ub3coKV0pO1xyXG59XHJcbi8qKlxyXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBbW0FsZWFdXSB3aXRob3V0IHVzZXIgaW5wdXQgdmFsaWRhdGlvbi5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBUaGUgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCB0byBzZWVkIHRoZSBnZW5lcmF0b3IuXHJcbiAqIEByZXR1cm5zIEEgcmVhZHkgdG8gdXNlIHNlZWRlZCBnZW5lcmF0b3IuXHJcbiAqL1xyXG5mdW5jdGlvbiBBbGVhSW1wbGVtZW50YXRpb24oc2VlZCkge1xyXG4gICAgbGV0IFtzMCwgczEsIHMyXSA9IG1hc2hTZWVkKHNlZWQpO1xyXG4gICAgbGV0IGMgPSAxO1xyXG4gICAgY29uc3QgcmFuZG9tID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHQgPSAyMDkxNjM5ICogczAgKyBjICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcclxuICAgICAgICBzMCA9IHMxO1xyXG4gICAgICAgIHMxID0gczI7XHJcbiAgICAgICAgcmV0dXJuIChzMiA9IHQgLSAoYyA9IHQgfCAwKSk7XHJcbiAgICB9O1xyXG4gICAgcmFuZG9tLnVpbnQzMiA9ICgpID0+IHJhbmRvbSgpICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcclxuICAgIHJhbmRvbS5mcmFjdDUzID0gKCkgPT4gcmFuZG9tKCkgKyAoKHJhbmRvbSgpICogMHgyMDAwMDApIHwgMCkgKiAxLjExMDIyMzAyNDYyNTE1NjVlLTE2OyAvLyAyXi01M1xyXG4gICAgcmFuZG9tLmFsZ29yaXRobSA9IFwiQWxlYVwiO1xyXG4gICAgcmFuZG9tLnNlZWQgPSBzZWVkO1xyXG4gICAgcmFuZG9tLnZlcnNpb24gPSBcIjAuOVwiO1xyXG4gICAgcmV0dXJuIHJhbmRvbTtcclxufVxyXG4vKipcclxuICogVHVybiBhcmJpdHJhcnkgZGF0YSBpbnRvIHZhbHVlcyBbW0FsZWFJbXBsZW1lbnRhdGlvbl1dIGNhbiB1c2UgdG8gZ2VuZXJhdGVcclxuICogcmFuZG9tIG51bWJlcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gQXJiaXRyYXJ5IGRhdGEgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlZWQuXHJcbiAqIEByZXR1cm5zIFRocmVlIG51bWJlcnMgdG8gdXNlIGFzIGluaXRpYWwgdmFsdWVzIGZvciBbW0FsZWFJbXBsZW1lbnRhdGlvbl1dLlxyXG4gKi9cclxuZnVuY3Rpb24gbWFzaFNlZWQoLi4uc2VlZCkge1xyXG4gICAgY29uc3QgbWFzaCA9IE1hc2goKTtcclxuICAgIGxldCBzMCA9IG1hc2goXCIgXCIpO1xyXG4gICAgbGV0IHMxID0gbWFzaChcIiBcIik7XHJcbiAgICBsZXQgczIgPSBtYXNoKFwiIFwiKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VlZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHMwIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMwIDwgMCkge1xyXG4gICAgICAgICAgICBzMCArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzMSAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMSA8IDApIHtcclxuICAgICAgICAgICAgczEgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgczIgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczIgPCAwKSB7XHJcbiAgICAgICAgICAgIHMyICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtzMCwgczEsIHMyXTtcclxufVxyXG4vKipcclxuICogQ3JlYXRlIGEgbmV3IG1hc2ggZnVuY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm5zIEEgbm9ucHVyZSBmdW5jdGlvbiB0aGF0IHRha2VzIGFyYml0cmFyeSBbW01hc2hhYmxlXV0gZGF0YSBhbmQgdHVybnNcclxuICogdGhlbSBpbnRvIG51bWJlcnMuXHJcbiAqL1xyXG5mdW5jdGlvbiBNYXNoKCkge1xyXG4gICAgbGV0IG4gPSAweGVmYzgyNDlkO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyaW5nID0gZGF0YS50b1N0cmluZygpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG4gKz0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgICAgIGxldCBoID0gMC4wMjUxOTYwMzI4MjQxNjkzOCAqIG47XHJcbiAgICAgICAgICAgIG4gPSBoID4+PiAwO1xyXG4gICAgICAgICAgICBoIC09IG47XHJcbiAgICAgICAgICAgIGggKj0gbjtcclxuICAgICAgICAgICAgbiA9IGggPj4+IDA7XHJcbiAgICAgICAgICAgIGggLT0gbjtcclxuICAgICAgICAgICAgbiArPSBoICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChuID4+PiAwKSAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXHJcbiAgICB9O1xyXG59XG5cbi8qKlxuICogU2V0dXAgYSBtb2NrIGhhbW1lci5qcyBvYmplY3QsIGZvciB1bml0IHRlc3RpbmcuXG4gKlxuICogSW5zcGlyYXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS91YmVyL2RlY2suZ2wvcHVsbC82NThcbiAqXG4gKiBAcmV0dXJucyB7e29uOiBub29wLCBvZmY6IG5vb3AsIGRlc3Ryb3k6IG5vb3AsIGVtaXQ6IG5vb3AsIGdldDogZ2V0fX1cbiAqL1xuZnVuY3Rpb24gaGFtbWVyTW9jaygpIHtcbiAgY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4gIHJldHVybiB7XG4gICAgb246IG5vb3AsXG4gICAgb2ZmOiBub29wLFxuICAgIGRlc3Ryb3k6IG5vb3AsXG4gICAgZW1pdDogbm9vcCxcblxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldDogbm9vcCxcbiAgICAgIH07XG4gICAgfSxcbiAgfTtcbn1cblxuY29uc3QgSGFtbWVyJDEgPVxuICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgPyB3aW5kb3cuSGFtbWVyIHx8IFJlYWxIYW1tZXJcbiAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gaGFtbWVyLmpzIGlzIG9ubHkgYXZhaWxhYmxlIGluIGEgYnJvd3Nlciwgbm90IGluIG5vZGUuanMuIFJlcGxhY2luZyBpdCB3aXRoIGEgbW9jayBvYmplY3QuXG4gICAgICAgIHJldHVybiBoYW1tZXJNb2NrKCk7XG4gICAgICB9O1xuXG4vKipcbiAqIFR1cm4gYW4gZWxlbWVudCBpbnRvIGFuIGNsaWNrVG9Vc2UgZWxlbWVudC5cbiAqIFdoZW4gbm90IGFjdGl2ZSwgdGhlIGVsZW1lbnQgaGFzIGEgdHJhbnNwYXJlbnQgb3ZlcmxheS4gV2hlbiB0aGUgb3ZlcmxheSBpc1xuICogY2xpY2tlZCwgdGhlIG1vZGUgaXMgY2hhbmdlZCB0byBhY3RpdmUuXG4gKiBXaGVuIGFjdGl2ZSwgdGhlIGVsZW1lbnQgaXMgZGlzcGxheWVkIHdpdGggYSBibHVlIGJvcmRlciBhcm91bmQgaXQsIGFuZFxuICogdGhlIGludGVyYWN0aXZlIGNvbnRlbnRzIG9mIHRoZSBlbGVtZW50IGNhbiBiZSB1c2VkLiBXaGVuIGNsaWNrZWQgb3V0c2lkZVxuICogdGhlIGVsZW1lbnQsIHRoZSBlbGVtZW50cyBtb2RlIGlzIGNoYW5nZWQgdG8gaW5hY3RpdmUuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAqIEBjbGFzcyBBY3RpdmF0b3JcbiAqL1xuZnVuY3Rpb24gQWN0aXZhdG9yJDEoY29udGFpbmVyKSB7XG4gIHRoaXMuX2NsZWFudXBRdWV1ZSA9IFtdO1xuXG4gIHRoaXMuYWN0aXZlID0gZmFsc2U7XG5cbiAgdGhpcy5fZG9tID0ge1xuICAgIGNvbnRhaW5lcixcbiAgICBvdmVybGF5OiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICB9O1xuXG4gIHRoaXMuX2RvbS5vdmVybGF5LmNsYXNzTGlzdC5hZGQoXCJ2aXMtb3ZlcmxheVwiKTtcblxuICB0aGlzLl9kb20uY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgIHRoaXMuX2RvbS5vdmVybGF5LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZG9tLm92ZXJsYXkpO1xuICB9KTtcblxuICBjb25zdCBoYW1tZXIgPSBIYW1tZXIkMSh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIGhhbW1lci5vbihcInRhcFwiLCB0aGlzLl9vblRhcE92ZXJsYXkuYmluZCh0aGlzKSk7XG4gIHRoaXMuX2NsZWFudXBRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICBoYW1tZXIuZGVzdHJveSgpO1xuICAgIC8vIEZJWE1FOiBjbGVhbmluZyB1cCBoYW1tZXIgaW5zdGFuY2VzIGRvZXNuJ3Qgd29yayAoVGltZWxpbmUgbm90IHJlbW92ZWRcbiAgICAvLyBmcm9tIG1lbW9yeSlcbiAgfSk7XG5cbiAgLy8gYmxvY2sgYWxsIHRvdWNoIGV2ZW50cyAoZXhjZXB0IHRhcClcbiAgY29uc3QgZXZlbnRzID0gW1xuICAgIFwidGFwXCIsXG4gICAgXCJkb3VibGV0YXBcIixcbiAgICBcInByZXNzXCIsXG4gICAgXCJwaW5jaFwiLFxuICAgIFwicGFuXCIsXG4gICAgXCJwYW5zdGFydFwiLFxuICAgIFwicGFubW92ZVwiLFxuICAgIFwicGFuZW5kXCIsXG4gIF07XG4gIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgIGhhbW1lci5vbihldmVudCwgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5zcmNFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gYXR0YWNoIGEgY2xpY2sgZXZlbnQgdG8gdGhlIHdpbmRvdywgaW4gb3JkZXIgdG8gZGVhY3RpdmF0ZSB3aGVuIGNsaWNraW5nIG91dHNpZGUgdGhlIHRpbWVsaW5lXG4gIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5ib2R5KSB7XG4gICAgdGhpcy5fb25DbGljayA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKCFfaGFzUGFyZW50KGV2ZW50LnRhcmdldCwgY29udGFpbmVyKSkge1xuICAgICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX29uQ2xpY2spO1xuICAgIHRoaXMuX2NsZWFudXBRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX29uQ2xpY2spO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gcHJlcGFyZSBlc2NhcGUga2V5IGxpc3RlbmVyIGZvciBkZWFjdGl2YXRpbmcgd2hlbiBhY3RpdmVcbiAgdGhpcy5fZXNjTGlzdGVuZXIgPSAoZXZlbnQpID0+IHtcbiAgICBpZiAoXG4gICAgICBcImtleVwiIGluIGV2ZW50XG4gICAgICAgID8gZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiXG4gICAgICAgIDogZXZlbnQua2V5Q29kZSA9PT0gMjcgLyogdGhlIGtleUNvZGUgaXMgZm9yIElFMTEgKi9cbiAgICApIHtcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgIH1cbiAgfTtcbn1cblxuLy8gdHVybiBpbnRvIGFuIGV2ZW50IGVtaXR0ZXJcbkVtaXR0ZXIoQWN0aXZhdG9yJDEucHJvdG90eXBlKTtcblxuLy8gVGhlIGN1cnJlbnRseSBhY3RpdmUgYWN0aXZhdG9yXG5BY3RpdmF0b3IkMS5jdXJyZW50ID0gbnVsbDtcblxuLyoqXG4gKiBEZXN0cm95IHRoZSBhY3RpdmF0b3IuIENsZWFucyB1cCBhbGwgY3JlYXRlZCBET00gYW5kIGV2ZW50IGxpc3RlbmVyc1xuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5kZWFjdGl2YXRlKCk7XG5cbiAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLl9jbGVhbnVwUXVldWUuc3BsaWNlKDApLnJldmVyc2UoKSkge1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cbn07XG5cbi8qKlxuICogQWN0aXZhdGUgdGhlIGVsZW1lbnRcbiAqIE92ZXJsYXkgaXMgaGlkZGVuLCBlbGVtZW50IGlzIGRlY29yYXRlZCB3aXRoIGEgYmx1ZSBzaGFkb3cgYm9yZGVyXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gd2UgYWxsb3cgb25seSBvbmUgYWN0aXZlIGFjdGl2YXRvciBhdCBhIHRpbWVcbiAgaWYgKEFjdGl2YXRvciQxLmN1cnJlbnQpIHtcbiAgICBBY3RpdmF0b3IkMS5jdXJyZW50LmRlYWN0aXZhdGUoKTtcbiAgfVxuICBBY3RpdmF0b3IkMS5jdXJyZW50ID0gdGhpcztcblxuICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gIHRoaXMuX2RvbS5vdmVybGF5LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgdGhpcy5fZG9tLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwidmlzLWFjdGl2ZVwiKTtcblxuICB0aGlzLmVtaXQoXCJjaGFuZ2VcIik7XG4gIHRoaXMuZW1pdChcImFjdGl2YXRlXCIpO1xuXG4gIC8vIHVnbHkgaGFjazogYmluZCBFU0MgYWZ0ZXIgZW1pdHRpbmcgdGhlIGV2ZW50cywgYXMgdGhlIE5ldHdvcmsgcmViaW5kcyBhbGxcbiAgLy8ga2V5Ym9hcmQgZXZlbnRzIG9uIGEgJ2NoYW5nZScgZXZlbnRcbiAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLl9lc2NMaXN0ZW5lcik7XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGUgdGhlIGVsZW1lbnRcbiAqIE92ZXJsYXkgaXMgZGlzcGxheWVkIG9uIHRvcCBvZiB0aGUgZWxlbWVudFxuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgdGhpcy5fZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgdGhpcy5fZG9tLmNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwidmlzLWFjdGl2ZVwiKTtcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLl9lc2NMaXN0ZW5lcik7XG5cbiAgdGhpcy5lbWl0KFwiY2hhbmdlXCIpO1xuICB0aGlzLmVtaXQoXCJkZWFjdGl2YXRlXCIpO1xufTtcblxuLyoqXG4gKiBIYW5kbGUgYSB0YXAgZXZlbnQ6IGFjdGl2YXRlIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5fb25UYXBPdmVybGF5ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIC8vIGFjdGl2YXRlIHRoZSBjb250YWluZXJcbiAgdGhpcy5hY3RpdmF0ZSgpO1xuICBldmVudC5zcmNFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn07XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyB0aGUgcmVxdWVzdGVkIHBhcmVudCBlbGVtZW50IHNvbWV3aGVyZSBpblxuICogaXRzIGNoYWluIG9mIHBhcmVudCBub2Rlcy5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYXJlbnRcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgcGFyZW50IGlzIGZvdW5kIHNvbWV3aGVyZSBpbiB0aGVcbiAqICAgICAgICAgICAgICAgICAgICBjaGFpbiBvZiBwYXJlbnQgbm9kZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xuICB3aGlsZSAoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50ID09PSBwYXJlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gdXRpbGl0eSBmdW5jdGlvbnNcclxuLy8gcGFyc2UgQVNQLk5ldCBEYXRlIHBhdHRlcm4sXHJcbi8vIGZvciBleGFtcGxlICcvRGF0ZSgxMTk4OTA4NzE3MDU2KS8nIG9yICcvRGF0ZSgxMTk4OTA4NzE3MDU2LTA3MDApLydcclxuLy8gY29kZSBmcm9tIGh0dHA6Ly9tb21lbnRqcy5jb20vXHJcbmNvbnN0IEFTUERhdGVSZWdleCA9IC9eXFwvP0RhdGVcXCgoLT9cXGQrKS9pO1xyXG4vLyBDb2xvciBSRXNcclxuY29uc3QgZnVsbEhleFJFID0gL14jPyhbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KSQvaTtcclxuY29uc3Qgc2hvcnRIZXhSRSA9IC9eIz8oW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkkL2k7XHJcbmNvbnN0IHJnYlJFID0gL15yZ2JcXCggKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKlxcKSQvaTtcclxuY29uc3QgcmdiYVJFID0gL15yZ2JhXFwoICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooWzAxXXwwP1xcLlxcZCspICpcXCkkL2k7XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgbnVtYmVyLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgbnVtYmVyLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIjtcclxufVxyXG4vKipcclxuICogUmVtb3ZlIGV2ZXJ5dGhpbmcgaW4gdGhlIERPTSBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBET01vYmplY3QgLSBOb2RlIHdob3NlIGNoaWxkIG5vZGVzIHdpbGwgYmUgcmVjdXJzaXZlbHkgZGVsZXRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHJlY3Vyc2l2ZURPTURlbGV0ZShET01vYmplY3QpIHtcclxuICAgIGlmIChET01vYmplY3QpIHtcclxuICAgICAgICB3aGlsZSAoRE9Nb2JqZWN0Lmhhc0NoaWxkTm9kZXMoKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IERPTW9iamVjdC5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZURPTURlbGV0ZShjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICBET01vYmplY3QucmVtb3ZlQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgc3RyaW5nLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIjtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIG9iamVjdCAobm90IHByaW1pdGl2ZSBvciBudWxsKS5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIG5vdCBudWxsIG9iamVjdCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGw7XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBEYXRlLCBvciBhIFN0cmluZyBjb250YWluaW5nIGEgRGF0ZS5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIERhdGUgaW5zdGFuY2Ugb3Igc3RyaW5nIGRhdGUgcmVwcmVzZW50YXRpb24sIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xyXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XHJcbiAgICAgICAgLy8gdGVzdCB3aGV0aGVyIHRoaXMgc3RyaW5nIGNvbnRhaW5zIGEgZGF0ZVxyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gQVNQRGF0ZVJlZ2V4LmV4ZWModmFsdWUpO1xyXG4gICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIWlzTmFOKERhdGUucGFyc2UodmFsdWUpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuLyoqXHJcbiAqIENvcHkgcHJvcGVydHkgZnJvbSBiIHRvIGEgaWYgcHJvcGVydHkgcHJlc2VudCBpbiBhLlxyXG4gKiBJZiBwcm9wZXJ0eSBpbiBiIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwsIGRlbGV0ZSBpdCBpZiBgYWxsb3dEZWxldGlvbmAgc2V0LlxyXG4gKlxyXG4gKiBJbnRlcm5hbCBoZWxwZXIgcm91dGluZSwgc2hvdWxkIG5vdCBiZSBleHBvcnRlZC4gTm90IGFkZGVkIHRvIGBleHBvcnRzYCBmb3IgdGhhdCByZWFzb24uXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gcHJvcCAtIE5hbWUgb2YgcHJvcGVydHkgdG8gY29weSBmcm9tIGIgdG8gYS5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydHkgaW4gYSBpZiBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbikge1xyXG4gICAgbGV0IGRvRGVsZXRpb24gPSBmYWxzZTtcclxuICAgIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlKSB7XHJcbiAgICAgICAgZG9EZWxldGlvbiA9IGJbcHJvcF0gPT09IG51bGwgJiYgYVtwcm9wXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgaWYgKGRvRGVsZXRpb24pIHtcclxuICAgICAgICBkZWxldGUgYVtwcm9wXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdOyAvLyBSZW1lbWJlciwgdGhpcyBpcyBhIHJlZmVyZW5jZSBjb3B5IVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBGaWxsIGFuIG9iamVjdCB3aXRoIGEgcG9zc2libHkgcGFydGlhbGx5IGRlZmluZWQgb3RoZXIgb2JqZWN0LlxyXG4gKlxyXG4gKiBPbmx5IGNvcGllcyB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0aWVzIGFscmVhZHkgcHJlc2VudCBpbiBhLlxyXG4gKiBUaGF0IG1lYW5zIGFuIG9iamVjdCBpcyBub3QgY3JlYXRlZCBvbiBhIHByb3BlcnR5IGlmIG9ubHkgdGhlIGIgb2JqZWN0IGhhcyBpdC5cclxuICpcclxuICogQHBhcmFtIGEgLSBUaGUgb2JqZWN0IHRoYXQgd2lsbCBoYXZlIGl0J3MgcHJvcGVydGllcyB1cGRhdGVkLlxyXG4gKiBAcGFyYW0gYiAtIFRoZSBvYmplY3Qgd2l0aCBwcm9wZXJ0eSB1cGRhdGVzLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0aWVzIGluIGEgdGhhdCBhcmUgZXhwbGljaXRseSBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKi9cclxuZnVuY3Rpb24gZmlsbElmRGVmaW5lZChhLCBiLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIC8vIE5PVEU6IGl0ZXJhdGlvbiBvZiBwcm9wZXJ0aWVzIG9mIGFcclxuICAgIC8vIE5PVEU6IHByb3RvdHlwZSBwcm9wZXJ0aWVzIGl0ZXJhdGVkIG92ZXIgYXMgd2VsbFxyXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGEpIHtcclxuICAgICAgICBpZiAoYltwcm9wXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChiW3Byb3BdID09PSBudWxsIHx8IHR5cGVvZiBiW3Byb3BdICE9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBOb3RlOiB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFQcm9wID0gYVtwcm9wXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJQcm9wID0gYltwcm9wXTtcclxuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChhUHJvcCkgJiYgaXNPYmplY3QoYlByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbElmRGVmaW5lZChhUHJvcCwgYlByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgb2YgYWxsIG9mIHRoZSBlbnVtZXJhYmxlIG93biBwcm9wZXJ0aWVzIGZyb20gb25lIG9yIG1vcmUgc291cmNlIG9iamVjdHMgdG8gYVxyXG4gKiB0YXJnZXQgb2JqZWN0LiBSZXR1cm5zIHRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIHRhcmdldCBvYmplY3QgdG8gY29weSB0by5cclxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSBzb3VyY2Ugb2JqZWN0IGZyb20gd2hpY2ggdG8gY29weSBwcm9wZXJ0aWVzLlxyXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdC5cclxuICovXHJcbmNvbnN0IGV4dGVuZCA9IE9iamVjdC5hc3NpZ247XHJcbi8qKlxyXG4gKiBFeHRlbmQgb2JqZWN0IGEgd2l0aCBzZWxlY3RlZCBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiIG9yIGEgc2VyaWVzIG9mIG9iamVjdHMuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWQgdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBwcm9wcyAtIFByb3BlcnRpZXMgdG8gYmUgY29waWVkIHRvIGEuXHJcbiAqIEBwYXJhbSBhIC0gVGhlIHRhcmdldC5cclxuICogQHBhcmFtIG90aGVycyAtIFRoZSBzb3VyY2VzLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlRXh0ZW5kKHByb3BzLCBhLCAuLi5vdGhlcnMpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wcykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBcnJheSB3aXRoIHByb3BlcnR5IG5hbWVzIGV4cGVjdGVkIGFzIGZpcnN0IGFyZ3VtZW50XCIpO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBvdGhlciBvZiBvdGhlcnMpIHtcclxuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IHByb3BzLmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1twXTtcclxuICAgICAgICAgICAgaWYgKG90aGVyICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0gPSBvdGhlcltwcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBFeHRlbmQgb2JqZWN0IGEgd2l0aCBzZWxlY3RlZCBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxyXG4gKiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBQcmV2aW91cyB2ZXJzaW9uIG9mIHRoaXMgcm91dGluZSBpbXBsaWVkIHRoYXQgbXVsdGlwbGUgc291cmNlIG9iamVjdHMgY291bGRcclxuICogYmUgdXNlZDsgaG93ZXZlciwgdGhlIGltcGxlbWVudGF0aW9uIHdhcyAqKndyb25nKiouIFNpbmNlIG11bHRpcGxlIChcXD4xKVxyXG4gKiBzb3VyY2VzIHdlcmVuJ3QgdXNlZCBhbnl3aGVyZSBpbiB0aGUgYHZpcy5qc2AgY29kZSwgdGhpcyBoYXMgYmVlbiByZW1vdmVkXHJcbiAqIEBwYXJhbSBwcm9wcyAtIE5hbWVzIG9mIGZpcnN0LWxldmVsIHByb3BlcnRpZXMgdG8gY29weSBvdmVyLlxyXG4gKiBAcGFyYW0gYSAtIFRhcmdldCBvYmplY3QuXHJcbiAqIEBwYXJhbSBiIC0gU291cmNlIG9iamVjdC5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydHkgaW4gYSBpZiBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVEZWVwRXh0ZW5kKHByb3BzLCBhLCBiLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBBcnJheXMgdG8gZGVlcEV4dGVuZFxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBwID0gMDsgcCA8IHByb3BzLmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW3BdO1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkpIHtcclxuICAgICAgICAgICAgaWYgKGJbcHJvcF0gJiYgYltwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYVtwcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSwgZmFsc2UsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBFeHRlbmQgb2JqZWN0IGBhYCB3aXRoIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGBiYCwgaWdub3JpbmcgcHJvcGVydGllcyB3aGljaFxyXG4gKiBhcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgdG8gYmUgZXhjbHVkZWQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoZSBwcm9wZXJ0aWVzIG9mIGBiYCBhcmUgY29uc2lkZXJlZCBmb3IgY29weWluZy4gUHJvcGVydGllcyB3aGljaCBhcmVcclxuICogdGhlbXNlbHZlcyBvYmplY3RzIGFyZSBhcmUgYWxzbyBleHRlbmRlZC4gT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZFxyXG4gKiB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICogQHBhcmFtIHByb3BzVG9FeGNsdWRlIC0gTmFtZXMgb2YgcHJvcGVydGllcyB3aGljaCBzaG91bGQgKm5vdCogYmUgY29waWVkLlxyXG4gKiBAcGFyYW0gYSAtIE9iamVjdCB0byBleHRlbmQuXHJcbiAqIEBwYXJhbSBiIC0gT2JqZWN0IHRvIHRha2UgcHJvcGVydGllcyBmcm9tIGZvciBleHRlbnNpb24uXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnRpZXMgaW4gYSB0aGF0IGFyZSBleHBsaWNpdGx5XHJcbiAqIHNldCB0byBudWxsIGluIGIuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kKHByb3BzVG9FeGNsdWRlLCBhLCBiLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBBcnJheXMgdG8gZGVlcEV4dGVuZFxyXG4gICAgLy8gTk9URTogYXJyYXkgcHJvcGVydGllcyBoYXZlIGFuIGVsc2UtYmVsb3c7IGFwcGFyZW50bHksIHRoZXJlIGlzIGEgcHJvYmxlbSBoZXJlLlxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYikge1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHByb3ApKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gLy8gSGFuZGxlIGxvY2FsIHByb3BlcnRpZXMgb25seVxyXG4gICAgICAgIGlmIChwcm9wc1RvRXhjbHVkZS5pbmNsdWRlcyhwcm9wKSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9IC8vIEluIGV4Y2x1c2lvbiBsaXN0LCBza2lwXHJcbiAgICAgICAgaWYgKGJbcHJvcF0gJiYgYltwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0pOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJbcHJvcF0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0ucHVzaChiW3Byb3BdW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIGV4dGVuZCBhbiBvYmplY3QgYSB3aXRoIHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRhcmdldCBvYmplY3QuXHJcbiAqIEBwYXJhbSBiIC0gU291cmNlIG9iamVjdC5cclxuICogQHBhcmFtIHByb3RvRXh0ZW5kIC0gSWYgdHJ1ZSwgdGhlIHByb3RvdHlwZSB2YWx1ZXMgd2lsbCBhbHNvIGJlIGV4dGVuZGVkLlxyXG4gKiAoVGhhdCBpcyB0aGUgb3B0aW9ucyBvYmplY3RzIHRoYXQgaW5oZXJpdCBmcm9tIG90aGVycyB3aWxsIGFsc28gZ2V0IHRoZVxyXG4gKiBpbmhlcml0ZWQgb3B0aW9ucykuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgdGhlIHZhbHVlcyBvZiBmaWVsZHMgdGhhdCBhcmUgbnVsbCB3aWxsIGJlIGRlbGV0ZWQuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwRXh0ZW5kKGEsIGIsIHByb3RvRXh0ZW5kID0gZmFsc2UsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGIpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHByb3ApIHx8IHByb3RvRXh0ZW5kID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYltwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICAgICAgYltwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGJbcHJvcF0pID09PSBPYmplY3QucHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYVtwcm9wXSA9IGRlZXBFeHRlbmQoe30sIGJbcHJvcF0sIHByb3RvRXh0ZW5kKTsgLy8gTk9URTogYWxsb3dEZWxldGlvbiBub3QgcHJvcGFnYXRlZCFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBhW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYVtwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihhW3Byb3BdKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSwgcHJvdG9FeHRlbmQpOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdLnNsaWNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGFsbCBlbGVtZW50cyBpbiB0d28gYXJyYXlzIGFyZSBlcXVhbC5cclxuICpcclxuICogQHBhcmFtIGEgLSBGaXJzdCBhcnJheS5cclxuICogQHBhcmFtIGIgLSBTZWNvbmQgYXJyYXkuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgYm90aCBhcnJheXMgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYW5kIHNhbWUgZWxlbWVudHMgKDEgPSAnMScpLlxyXG4gKi9cclxuZnVuY3Rpb24gZXF1YWxBcnJheShhLCBiKSB7XHJcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG4vKipcclxuICogR2V0IHRoZSB0eXBlIG9mIGFuIG9iamVjdCwgZm9yIGV4YW1wbGUgZXhwb3J0cy5nZXRUeXBlKFtdKSByZXR1cm5zICdBcnJheScuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIERldGVjdGVkIHR5cGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUeXBlKG9iamVjdCkge1xyXG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBvYmplY3Q7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQm9vbGVhbikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJCb29sZWFuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiTnVtYmVyXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiQXJyYXlcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiRGF0ZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJPYmplY3RcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiTnVtYmVyXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJCb29sZWFuXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiBcIlN0cmluZ1wiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHR5cGU7XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gZXh0ZW5kIGFuIGFycmF5IGFuZCBjb3B5IGl0LiBUaGlzIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHBhdGhzIHJlY3Vyc2l2ZWx5LlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJyIC0gRmlyc3QgcGFydC5cclxuICogQHBhcmFtIG5ld1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIGFhZGRlZCBpbnRvIHRoZSBhcnJheS5cclxuICogQHJldHVybnMgQSBuZXcgYXJyYXkgd2l0aCBhbGwgaXRlbXMgZnJvbSBhcnIgYW5kIG5ld1ZhbHVlICh3aGljaCBpcyBsYXN0KS5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlBbmRFeHRlbmRBcnJheShhcnIsIG5ld1ZhbHVlKSB7XHJcbiAgICByZXR1cm4gWy4uLmFyciwgbmV3VmFsdWVdO1xyXG59XHJcbi8qKlxyXG4gKiBVc2VkIHRvIGV4dGVuZCBhbiBhcnJheSBhbmQgY29weSBpdC4gVGhpcyBpcyB1c2VkIHRvIHByb3BhZ2F0ZSBwYXRocyByZWN1cnNpdmVseS5cclxuICpcclxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBiZSBjb3BpZWQuXHJcbiAqIEByZXR1cm5zIFNoYWxsb3cgY29weSBvZiBhcnIuXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3B5QXJyYXkoYXJyKSB7XHJcbiAgICByZXR1cm4gYXJyLnNsaWNlKCk7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSBsZWZ0IHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBsZWZ0IHBvc2l0aW9uIG9mIHRoaXMgZWxlbWVudCBpbiB0aGUgYnJvd3NlciBwYWdlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWJzb2x1dGVMZWZ0KGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSByaWdodCB2YWx1ZSBvZiBhIERPTSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIEEgZG9tIGVsZW1lbnQsIGZvciBleGFtcGxlIGEgZGl2LlxyXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcmlnaHQgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZVJpZ2h0KGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0O1xyXG59XHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgYWJzb2x1dGUgdG9wIHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSB0b3AgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZVRvcChlbGVtKSB7XHJcbiAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcbn1cclxuLyoqXHJcbiAqIEFkZCBhIGNsYXNzTmFtZSB0byB0aGUgZ2l2ZW4gZWxlbWVudHMgc3R5bGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIGNsYXNzZXMgd2lsbCBiZSBhZGRlZC5cclxuICogQHBhcmFtIGNsYXNzTmFtZXMgLSBTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkQ2xhc3NOYW1lKGVsZW0sIGNsYXNzTmFtZXMpIHtcclxuICAgIGxldCBjbGFzc2VzID0gZWxlbS5jbGFzc05hbWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgY29uc3QgbmV3Q2xhc3NlcyA9IGNsYXNzTmFtZXMuc3BsaXQoXCIgXCIpO1xyXG4gICAgY2xhc3NlcyA9IGNsYXNzZXMuY29uY2F0KG5ld0NsYXNzZXMuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcclxuICAgICAgICByZXR1cm4gIWNsYXNzZXMuaW5jbHVkZXMoY2xhc3NOYW1lKTtcclxuICAgIH0pKTtcclxuICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgY2xhc3NOYW1lIGZyb20gdGhlIGdpdmVuIGVsZW1lbnRzIHN0eWxlLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIFRoZSBlbGVtZW50IGZyb20gd2hpY2ggdGhlIGNsYXNzZXMgd2lsbCBiZSByZW1vdmVkLlxyXG4gKiBAcGFyYW0gY2xhc3NOYW1lcyAtIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiByZW1vdmVDbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lcykge1xyXG4gICAgbGV0IGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBvbGRDbGFzc2VzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIik7XHJcbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhb2xkQ2xhc3Nlcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xyXG4gICAgfSk7XHJcbiAgICBlbGVtLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbihcIiBcIik7XHJcbn1cclxuLyoqXHJcbiAqIEZvciBlYWNoIG1ldGhvZCBmb3IgYm90aCBhcnJheXMgYW5kIG9iamVjdHMuXHJcbiAqIEluIGNhc2Ugb2YgYW4gYXJyYXksIHRoZSBidWlsdC1pbiBBcnJheS5mb3JFYWNoKCkgaXMgYXBwbGllZCAoKipObywgaXQncyBub3QhKiopLlxyXG4gKiBJbiBjYXNlIG9mIGFuIE9iamVjdCwgdGhlIG1ldGhvZCBsb29wcyBvdmVyIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBBbiBPYmplY3Qgb3IgQXJyYXkgdG8gYmUgaXRlcmF0ZWQgb3Zlci5cclxuICogQHBhcmFtIGNhbGxiYWNrIC0gQXJyYXkuZm9yRWFjaC1saWtlIGNhbGxiYWNrLlxyXG4gKi9cclxuZnVuY3Rpb24gZm9yRWFjaChvYmplY3QsIGNhbGxiYWNrKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XHJcbiAgICAgICAgLy8gYXJyYXlcclxuICAgICAgICBjb25zdCBsZW4gPSBvYmplY3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY2FsbGJhY2sob2JqZWN0W2ldLCBpLCBvYmplY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIG9iamVjdFxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sob2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBhbiBvYmplY3QgaW50byBhbiBhcnJheTogYWxsIG9iamVjdHMgcHJvcGVydGllcyBhcmUgcHV0IGludG8gdGhlIGFycmF5LiBUaGUgcmVzdWx0aW5nIGFycmF5IGlzIHVub3JkZXJlZC5cclxuICpcclxuICogQHBhcmFtIG8gLSBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy5cclxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgdW5vcmRlcmVkIHZhbHVlcy5cclxuICovXHJcbmNvbnN0IHRvQXJyYXkgPSBPYmplY3QudmFsdWVzO1xyXG4vKipcclxuICogVXBkYXRlIGEgcHJvcGVydHkgaW4gYW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gb2JqZWN0IC0gVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSB3aWxsIGJlIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSBrZXkgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBiZSB1cGRhdGVkLlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgbmV3IHZhbHVlIHRvIGJlIGFzc2lnbmVkLlxyXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB2YWx1ZSB3YXMgdXBkYXRlZCAodHJ1ZSkgb3IgYWxyZWFkeSBzdHJpY3RseSB0aGUgc2FtZSBpbiB0aGUgb3JpZ2luYWwgb2JqZWN0IChmYWxzZSkuXHJcbiAqL1xyXG5mdW5jdGlvbiB1cGRhdGVQcm9wZXJ0eShvYmplY3QsIGtleSwgdmFsdWUpIHtcclxuICAgIGlmIChvYmplY3Rba2V5XSAhPT0gdmFsdWUpIHtcclxuICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUaHJvdHRsZSB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gYmUgb25seSBleGVjdXRlZCBvbmNlIHBlciBhbmltYXRpb24gZnJhbWUuXHJcbiAqXHJcbiAqIEBwYXJhbSBmbiAtIFRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cclxuICogQHJldHVybnMgVGhlIHRocm90dGxlZCBmdW5jdGlvbi5cclxuICovXHJcbmZ1bmN0aW9uIHRocm90dGxlKGZuKSB7XHJcbiAgICBsZXQgc2NoZWR1bGVkID0gZmFsc2U7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgIGlmICghc2NoZWR1bGVkKSB7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZuKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIENhbmNlbHMgdGhlIGV2ZW50J3MgZGVmYXVsdCBhY3Rpb24gaWYgaXQgaXMgY2FuY2VsYWJsZSwgd2l0aG91dCBzdG9wcGluZyBmdXJ0aGVyIHByb3BhZ2F0aW9uIG9mIHRoZSBldmVudC5cclxuICpcclxuICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IHdob3NlIGRlZmF1bHQgYWN0aW9uIHNob3VsZCBiZSBwcmV2ZW50ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudCkge1xyXG4gICAgaWYgKCFldmVudCkge1xyXG4gICAgICAgIGV2ZW50ID0gd2luZG93LmV2ZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCFldmVudCkgO1xyXG4gICAgZWxzZSBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBub24tSUUgYnJvd3NlcnNcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIEBUT0RPOiBJRSB0eXBlcz8gRG9lcyBhbnlvbmUgY2FyZT9cclxuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlOyAvLyBJRSBicm93c2Vyc1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBHZXQgSFRNTCBlbGVtZW50IHdoaWNoIGlzIHRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQuXHJcbiAqIEByZXR1cm5zIFRoZSBlbGVtZW50IG9yIG51bGwgaWYgbm90IG9idGFpbmFibGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUYXJnZXQoZXZlbnQgPSB3aW5kb3cuZXZlbnQpIHtcclxuICAgIC8vIGNvZGUgZnJvbSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcclxuICAgIC8vIEBUT0RPOiBFdmVudFRhcmdldCBjYW4gYmUgYWxtb3N0IGFueXRoaW5nLCBpcyBpdCBva2F5IHRvIHJldHVybiBvbmx5IEVsZW1lbnRzP1xyXG4gICAgbGV0IHRhcmdldCA9IG51bGw7XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC50YXJnZXQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC50YXJnZXQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChldmVudC5zcmNFbGVtZW50KSB7XHJcbiAgICAgICAgdGFyZ2V0ID0gZXZlbnQuc3JjRWxlbWVudDtcclxuICAgIH1cclxuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGFyZ2V0Lm5vZGVUeXBlICE9IG51bGwgJiYgdGFyZ2V0Lm5vZGVUeXBlID09IDMpIHtcclxuICAgICAgICAvLyBkZWZlYXQgU2FmYXJpIGJ1Z1xyXG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn1cclxuLyoqXHJcbiAqIENoZWNrIGlmIGdpdmVuIGVsZW1lbnQgY29udGFpbnMgZ2l2ZW4gcGFyZW50IHNvbWV3aGVyZSBpbiB0aGUgRE9NIHRyZWUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gYmUgdGVzdGVkLlxyXG4gKiBAcGFyYW0gcGFyZW50IC0gVGhlIGFuY2VzdG9yIChub3QgbmVjZXNzYXJpbHkgcGFyZW50KSBvZiB0aGUgZWxlbWVudC5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBwYXJlbnQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGVsZW1lbnQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGhhc1BhcmVudChlbGVtZW50LCBwYXJlbnQpIHtcclxuICAgIGxldCBlbGVtID0gZWxlbWVudDtcclxuICAgIHdoaWxlIChlbGVtKSB7XHJcbiAgICAgICAgaWYgKGVsZW0gPT09IHBhcmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIGVsZW0gPSBlbGVtLnBhcmVudE5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmNvbnN0IG9wdGlvbiA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBib29sZWFuLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvYm9vbGVhbiwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBib29sZWFuIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0Jvb2xlYW4odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIG51bWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b251bWJlciwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogbnVtYmVyIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc051bWJlcih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKSB8fCBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzdHJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9zdHJpbmcsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIENvcnJlc3BvbmRpbmcgKipib3hlZCoqIHN0cmluZyB2YWx1ZSwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNTdHJpbmcodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgc2l6ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3NpemUsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIENvcnJlc3BvbmRpbmcgc3RyaW5nIHZhbHVlIChudW1iZXIgKyAncHgnKSwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNTaXplKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc051bWJlcih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgXCJweFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgRE9NIEVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG8gRE9NIEVsZW1lbnQsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIFRoZSBET00gRWxlbWVudCwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNFbGVtZW50KHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZSB8fCBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGhleCBjb2xvciBzdHJpbmcgaW50byBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiB7QGxpbmsgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NjIzODM4L3JnYi10by1oZXgtYW5kLWhleC10by1yZ2J9XHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nICgzIG9yIDYgZGlnaXRzLCB3aXRoIG9yIHdpdGhvdXQgIykuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBoZXhUb1JHQihoZXgpIHtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBzd2l0Y2ggKGhleC5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBzaG9ydEhleFJFLmV4ZWMoaGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdICsgcmVzdWx0WzFdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdICsgcmVzdWx0WzJdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdICsgcmVzdWx0WzNdLCAxNiksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgICAgcmVzdWx0ID0gZnVsbEhleFJFLmV4ZWMoaGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdLCAxNiksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgc3RyaW5nIGNvbG9yIGluIGhleCBvciBSR0IgZm9ybWF0IGFuZCBhZGRzIHRoZSBvcGFjaXR5LCBSR0JBIGlzIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZC5cclxuICpcclxuICogQHBhcmFtIGNvbG9yIC0gVGhlIGNvbG9yIHN0cmluZyAoaGV4LCBSR0IsIFJHQkEpLlxyXG4gKiBAcGFyYW0gb3BhY2l0eSAtIFRoZSBuZXcgb3BhY2l0eS5cclxuICogQHJldHVybnMgUkdCQSBzdHJpbmcsIGZvciBleGFtcGxlICdyZ2JhKDI1NSwgMCwgMTI3LCAwLjMpJy5cclxuICovXHJcbmZ1bmN0aW9uIG92ZXJyaWRlT3BhY2l0eShjb2xvciwgb3BhY2l0eSkge1xyXG4gICAgaWYgKGNvbG9yLmluY2x1ZGVzKFwicmdiYVwiKSkge1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbG9yLmluY2x1ZGVzKFwicmdiXCIpKSB7XHJcbiAgICAgICAgY29uc3QgcmdiID0gY29sb3JcclxuICAgICAgICAgICAgLnN1YnN0cihjb2xvci5pbmRleE9mKFwiKFwiKSArIDEpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiKVwiLCBcIlwiKVxyXG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIHJldHVybiBcInJnYmEoXCIgKyByZ2JbMF0gKyBcIixcIiArIHJnYlsxXSArIFwiLFwiICsgcmdiWzJdICsgXCIsXCIgKyBvcGFjaXR5ICsgXCIpXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihjb2xvcik7XHJcbiAgICAgICAgaWYgKHJnYiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcInJnYmEoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIsXCIgKyBvcGFjaXR5ICsgXCIpXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IFJHQiBcXDwwLCAyNTVcXD4gaW50byBoZXggY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVkIC0gUmVkIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBncmVlbiAtIEdyZWVuIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBibHVlIC0gQmx1ZSBjaGFubmVsLlxyXG4gKiBAcmV0dXJucyBIZXggY29sb3Igc3RyaW5nIChmb3IgZXhhbXBsZTogJyMwYWNkYzAnKS5cclxuICovXHJcbmZ1bmN0aW9uIFJHQlRvSGV4KHJlZCwgZ3JlZW4sIGJsdWUpIHtcclxuICAgIHJldHVybiAoXCIjXCIgKyAoKDEgPDwgMjQpICsgKHJlZCA8PCAxNikgKyAoZ3JlZW4gPDwgOCkgKyBibHVlKS50b1N0cmluZygxNikuc2xpY2UoMSkpO1xyXG59XHJcbi8qKlxyXG4gKiBQYXJzZSBhIGNvbG9yIHByb3BlcnR5IGludG8gYW4gb2JqZWN0IHdpdGggYm9yZGVyLCBiYWNrZ3JvdW5kLCBhbmQgaGlnaGxpZ2h0IGNvbG9ycy5cclxuICpcclxuICogQHBhcmFtIGlucHV0Q29sb3IgLSBTaG9ydGhhbmQgY29sb3Igc3RyaW5nIG9yIGlucHV0IGNvbG9yIG9iamVjdC5cclxuICogQHBhcmFtIGRlZmF1bHRDb2xvciAtIEZ1bGwgY29sb3Igb2JqZWN0IHRvIGZpbGwgaW4gbWlzc2luZyB2YWx1ZXMgaW4gaW5wdXRDb2xvci5cclxuICogQHJldHVybnMgQ29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gcGFyc2VDb2xvcihpbnB1dENvbG9yLCBkZWZhdWx0Q29sb3IpIHtcclxuICAgIGlmIChpc1N0cmluZyhpbnB1dENvbG9yKSkge1xyXG4gICAgICAgIGxldCBjb2xvclN0ciA9IGlucHV0Q29sb3I7XHJcbiAgICAgICAgaWYgKGlzVmFsaWRSR0IoY29sb3JTdHIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJnYiA9IGNvbG9yU3RyXHJcbiAgICAgICAgICAgICAgICAuc3Vic3RyKDQpXHJcbiAgICAgICAgICAgICAgICAuc3Vic3RyKDAsIGNvbG9yU3RyLmxlbmd0aCAtIDUpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCIsXCIpXHJcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbG9yU3RyID0gUkdCVG9IZXgocmdiWzBdLCByZ2JbMV0sIHJnYlsyXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1ZhbGlkSGV4KGNvbG9yU3RyKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBoc3YgPSBoZXhUb0hTVihjb2xvclN0cik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhTViA9IHtcclxuICAgICAgICAgICAgICAgIGg6IGhzdi5oLFxyXG4gICAgICAgICAgICAgICAgczogaHN2LnMgKiAwLjgsXHJcbiAgICAgICAgICAgICAgICB2OiBNYXRoLm1pbigxLCBoc3YudiAqIDEuMDIpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBkYXJrZXJDb2xvckhTViA9IHtcclxuICAgICAgICAgICAgICAgIGg6IGhzdi5oLFxyXG4gICAgICAgICAgICAgICAgczogTWF0aC5taW4oMSwgaHN2LnMgKiAxLjI1KSxcclxuICAgICAgICAgICAgICAgIHY6IGhzdi52ICogMC44LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBkYXJrZXJDb2xvckhleCA9IEhTVlRvSGV4KGRhcmtlckNvbG9ySFNWLmgsIGRhcmtlckNvbG9ySFNWLnMsIGRhcmtlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICBjb25zdCBsaWdodGVyQ29sb3JIZXggPSBIU1ZUb0hleChsaWdodGVyQ29sb3JIU1YuaCwgbGlnaHRlckNvbG9ySFNWLnMsIGxpZ2h0ZXJDb2xvckhTVi52KTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZGVmYXVsdENvbG9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5iYWNrZ3JvdW5kIHx8IGRlZmF1bHRDb2xvci5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmJvcmRlciB8fCBkZWZhdWx0Q29sb3IuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiBpc1N0cmluZyhpbnB1dENvbG9yLmhpZ2hsaWdodClcclxuICAgICAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5oaWdobGlnaHQgJiYgaW5wdXRDb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZCkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAoaW5wdXRDb2xvci5oaWdobGlnaHQgJiYgaW5wdXRDb2xvci5oaWdobGlnaHQuYm9yZGVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiBpc1N0cmluZyhpbnB1dENvbG9yLmhvdmVyKVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYm9yZGVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhvdmVyLmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhvdmVyLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmJvcmRlciB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiBpc1N0cmluZyhpbnB1dENvbG9yLmhvdmVyKVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYm9yZGVyKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCkgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIEhTViBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vd3d3LmphdmFzY3JpcHRlci5uZXQvZmFxL3JnYjJoc3YuaHRtfVxyXG4gKiBAcGFyYW0gcmVkIC0gUmVkIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBncmVlbiAtIEdyZWVuIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBibHVlIC0gQmx1ZSBjaGFubmVsLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IU1YocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmVkID0gcmVkIC8gMjU1O1xyXG4gICAgZ3JlZW4gPSBncmVlbiAvIDI1NTtcclxuICAgIGJsdWUgPSBibHVlIC8gMjU1O1xyXG4gICAgY29uc3QgbWluUkdCID0gTWF0aC5taW4ocmVkLCBNYXRoLm1pbihncmVlbiwgYmx1ZSkpO1xyXG4gICAgY29uc3QgbWF4UkdCID0gTWF0aC5tYXgocmVkLCBNYXRoLm1heChncmVlbiwgYmx1ZSkpO1xyXG4gICAgLy8gQmxhY2stZ3JheS13aGl0ZVxyXG4gICAgaWYgKG1pblJHQiA9PT0gbWF4UkdCKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgaDogMCwgczogMCwgdjogbWluUkdCIH07XHJcbiAgICB9XHJcbiAgICAvLyBDb2xvcnMgb3RoZXIgdGhhbiBibGFjay1ncmF5LXdoaXRlOlxyXG4gICAgY29uc3QgZCA9IHJlZCA9PT0gbWluUkdCID8gZ3JlZW4gLSBibHVlIDogYmx1ZSA9PT0gbWluUkdCID8gcmVkIC0gZ3JlZW4gOiBibHVlIC0gcmVkO1xyXG4gICAgY29uc3QgaCA9IHJlZCA9PT0gbWluUkdCID8gMyA6IGJsdWUgPT09IG1pblJHQiA/IDEgOiA1O1xyXG4gICAgY29uc3QgaHVlID0gKDYwICogKGggLSBkIC8gKG1heFJHQiAtIG1pblJHQikpKSAvIDM2MDtcclxuICAgIGNvbnN0IHNhdHVyYXRpb24gPSAobWF4UkdCIC0gbWluUkdCKSAvIG1heFJHQjtcclxuICAgIGNvbnN0IHZhbHVlID0gbWF4UkdCO1xyXG4gICAgcmV0dXJuIHsgaDogaHVlLCBzOiBzYXR1cmF0aW9uLCB2OiB2YWx1ZSB9O1xyXG59XHJcbi8qKlxyXG4gKiBTcGxpdCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgaW50byBhbiBvYmplY3Qgd2l0aCBrZXkvdmFsdWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIENTUyBzb3VyY2UgY29kZSB0byBzcGxpdCBpbnRvIGtleS92YWx1ZSBvYmplY3QuXHJcbiAqIEByZXR1cm5zIEtleS92YWx1ZSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB7QGxpbmsgY3NzVGV4dH0uXHJcbiAqL1xyXG5mdW5jdGlvbiBzcGxpdENTU1RleHQoY3NzVGV4dCkge1xyXG4gICAgY29uc3QgdG1wRWxsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgY29uc3Qgc3R5bGVzID0ge307XHJcbiAgICB0bXBFbGxlbWVudC5zdHlsZS5jc3NUZXh0ID0gY3NzVGV4dDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG1wRWxsZW1lbnQuc3R5bGUubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBzdHlsZXNbdG1wRWxsZW1lbnQuc3R5bGVbaV1dID0gdG1wRWxsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0bXBFbGxlbWVudC5zdHlsZVtpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGVzO1xyXG59XHJcbi8qKlxyXG4gKiBBcHBlbmQgYSBzdHJpbmcgd2l0aCBjc3Mgc3R5bGVzIHRvIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdGhhdCB3aWxsIHJlY2VpdmUgbmV3IHN0eWxlcy5cclxuICogQHBhcmFtIGNzc1RleHQgLSBUaGUgc3R5bGVzIHRvIGJlIGFwcGVuZGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgZnJvbSBhbiBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IGZyb20gd2hpY2ggc3R5bGVzIHNob3VsZCBiZSByZW1vdmVkLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgcmVtb3ZlZC5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNzc1RleHQoZWxlbWVudCwgY3NzVGV4dCkge1xyXG4gICAgY29uc3QgY3NzU3R5bGUgPSBzcGxpdENTU1RleHQoY3NzVGV4dCk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjc3NTdHlsZSkpIHtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgSFNWIFxcPDAsIDFcXD4gaW50byBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbWppamFja3Nvbi81MzExMjU2fVxyXG4gKiBAcGFyYW0gaCAtIEh1ZS5cclxuICogQHBhcmFtIHMgLSBTYXR1cmF0aW9uLlxyXG4gKiBAcGFyYW0gdiAtIFZhbHVlLlxyXG4gKiBAcmV0dXJucyBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gSFNWVG9SR0IoaCwgcywgdikge1xyXG4gICAgbGV0IHI7XHJcbiAgICBsZXQgZztcclxuICAgIGxldCBiO1xyXG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoaCAqIDYpO1xyXG4gICAgY29uc3QgZiA9IGggKiA2IC0gaTtcclxuICAgIGNvbnN0IHAgPSB2ICogKDEgLSBzKTtcclxuICAgIGNvbnN0IHEgPSB2ICogKDEgLSBmICogcyk7XHJcbiAgICBjb25zdCB0ID0gdiAqICgxIC0gKDEgLSBmKSAqIHMpO1xyXG4gICAgc3dpdGNoIChpICUgNikge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSB0KSwgKGIgPSBwKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAociA9IHEpLCAoZyA9IHYpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIChyID0gcCksIChnID0gdiksIChiID0gdCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSBxKSwgKGIgPSB2KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAociA9IHQpLCAoZyA9IHApLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIChyID0gdiksIChnID0gcCksIChiID0gcSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByOiBNYXRoLmZsb29yKHIgKiAyNTUpLFxyXG4gICAgICAgIGc6IE1hdGguZmxvb3IoZyAqIDI1NSksXHJcbiAgICAgICAgYjogTWF0aC5mbG9vcihiICogMjU1KSxcclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgSFNWIFxcPDAsIDFcXD4gaW50byBoZXggY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gaCAtIEh1ZS5cclxuICogQHBhcmFtIHMgLSBTYXR1cmF0aW9uLlxyXG4gKiBAcGFyYW0gdiAtIFZhbHVlLlxyXG4gKiBAcmV0dXJucyBIZXggY29sb3Igc3RyaW5nLlxyXG4gKi9cclxuZnVuY3Rpb24gSFNWVG9IZXgoaCwgcywgdikge1xyXG4gICAgY29uc3QgcmdiID0gSFNWVG9SR0IoaCwgcywgdik7XHJcbiAgICByZXR1cm4gUkdCVG9IZXgocmdiLnIsIHJnYi5nLCByZ2IuYik7XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIEhTViBcXDwwLCAxXFw+LlxyXG4gKlxyXG4gKiBAcGFyYW0gaGV4IC0gSGV4IGNvbG9yIHN0cmluZy5cclxuICogQHJldHVybnMgSFNWIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvSFNWKGhleCkge1xyXG4gICAgY29uc3QgcmdiID0gaGV4VG9SR0IoaGV4KTtcclxuICAgIGlmICghcmdiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7aGV4fScgaXMgbm90IGEgdmFsaWQgY29sb3IuYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUkdCVG9IU1YocmdiLnIsIHJnYi5nLCByZ2IuYik7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBVbmtub3duIHN0cmluZyB0aGF0IG1heSBjb250YWluIGEgY29sb3IuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNWYWxpZEhleChoZXgpIHtcclxuICAgIGNvbnN0IGlzT2sgPSAvKF4jWzAtOUEtRl17Nn0kKXwoXiNbMC05QS1GXXszfSQpL2kudGVzdChoZXgpO1xyXG4gICAgcmV0dXJuIGlzT2s7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIFJHQiBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2IgLSBVbmtub3duIHN0cmluZyB0aGF0IG1heSBjb250YWluIGEgY29sb3IuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNWYWxpZFJHQihyZ2IpIHtcclxuICAgIHJldHVybiByZ2JSRS50ZXN0KHJnYik7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIFJHQkEgY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmdiYSAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCQShyZ2JhKSB7XHJcbiAgICByZXR1cm4gcmdiYVJFLnRlc3QocmdiYSk7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gZmllbGRzIC0gTmFtZXMgb2YgcHJvcGVydGllcyB0byBiZSBicmlkZ2VkLlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgQSBuZXcgb2JqZWN0IGluaGVyaXRpbmcgZnJvbSB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlQnJpZGdlT2JqZWN0KGZpZWxkcywgcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiByZWZlcmVuY2VPYmplY3QgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAvLyAhISEgdHlwZW9mIG51bGwgPT09ICdvYmplY3QnXHJcbiAgICAgICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGZpZWxkc1tpXSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ZpZWxkc1tpXV0gPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFRvW2ZpZWxkc1tpXV0gPSBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0W2ZpZWxkc1tpXV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3RUbztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUaGlzIHJlY3Vyc2l2ZWx5IHJlZGlyZWN0cyB0aGUgcHJvdG90eXBlIG9mIEpTT04gb2JqZWN0cyB0byB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGRlZmF1bHQgb3B0aW9ucy5cclxuICpcclxuICogQHBhcmFtIHJlZmVyZW5jZU9iamVjdCAtIFRoZSBvcmlnaW5hbCBvYmplY3QuXHJcbiAqIEByZXR1cm5zIFRoZSBFbGVtZW50IGlmIHRoZSByZWZlcmVuY2VPYmplY3QgaXMgYW4gRWxlbWVudCwgb3IgYSBuZXcgb2JqZWN0IGluaGVyaXRpbmcgZnJvbSB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdCkge1xyXG4gICAgaWYgKHJlZmVyZW5jZU9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVmZXJlbmNlT2JqZWN0ICE9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0IGluc3RhbmNlb2YgRWxlbWVudCkge1xyXG4gICAgICAgIC8vIEF2b2lkIGJyaWRnaW5nIERPTSBvYmplY3RzXHJcbiAgICAgICAgcmV0dXJuIHJlZmVyZW5jZU9iamVjdDtcclxuICAgIH1cclxuICAgIGNvbnN0IG9iamVjdFRvID0gT2JqZWN0LmNyZWF0ZShyZWZlcmVuY2VPYmplY3QpO1xyXG4gICAgZm9yIChjb25zdCBpIGluIHJlZmVyZW5jZU9iamVjdCkge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVmZXJlbmNlT2JqZWN0LCBpKSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlZmVyZW5jZU9iamVjdFtpXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICBvYmplY3RUb1tpXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iamVjdFRvO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHN0YWJsZSBzb3J0IGltcGxlbWVudGF0aW9uLCB2ZXJ5IGZhc3QgZm9yIHByZXNvcnRlZCBkYXRhLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBhcnJheSB0byBiZSBzb3J0ZWQgKGluLXBsYWNlKS5cclxuICogQHBhcmFtIGNvbXBhcmUgLSBBbiBvcmRlciBjb21wYXJhdG9yLlxyXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGluc2VydFNvcnQoYSwgY29tcGFyZSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGFbaV07XHJcbiAgICAgICAgbGV0IGo7XHJcbiAgICAgICAgZm9yIChqID0gaTsgaiA+IDAgJiYgY29tcGFyZShrLCBhW2ogLSAxXSkgPCAwOyBqLS0pIHtcclxuICAgICAgICAgICAgYVtqXSA9IGFbaiAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhW2pdID0gaztcclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZSBvcHRpb25zIG9mIHN1Ym9iamVjdHMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxyXG4gKlxyXG4gKiBBIHJlcXVpcmVtZW50IG9mIHRoZXNlIHN1Ym9iamVjdHMgaXMgdGhhdCB0aGV5IGhhdmUgYW4gJ2VuYWJsZWQnIGVsZW1lbnRcclxuICogd2hpY2ggaXMgb3B0aW9uYWwgZm9yIHRoZSB1c2VyIGJ1dCBtYW5kYXRvcnkgZm9yIHRoZSBwcm9ncmFtLlxyXG4gKlxyXG4gKiBUaGUgYWRkZWQgdmFsdWUgaGVyZSBvZiB0aGUgbWVyZ2UgaXMgdGhhdCBvcHRpb24gJ2VuYWJsZWQnIGlzIHNldCBhcyByZXF1aXJlZC5cclxuICpcclxuICogQHBhcmFtIG1lcmdlVGFyZ2V0IC0gRWl0aGVyIHRoaXMub3B0aW9ucyBvciB0aGUgb3B0aW9ucyB1c2VkIGZvciB0aGUgZ3JvdXBzLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXHJcbiAqIEBwYXJhbSBvcHRpb24gLSBPcHRpb24ga2V5IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50LlxyXG4gKiBAcGFyYW0gZ2xvYmFsT3B0aW9ucyAtIEdsb2JhbCBvcHRpb25zLCBwYXNzZWQgaW4gdG8gZGV0ZXJtaW5lIHZhbHVlIG9mIG9wdGlvbiAnZW5hYmxlZCcuXHJcbiAqL1xyXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbiwgZ2xvYmFsT3B0aW9ucyA9IHt9KSB7XHJcbiAgICAvLyBMb2NhbCBoZWxwZXJzXHJcbiAgICBjb25zdCBpc1ByZXNlbnQgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiBvYmogIT09IHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBjb25zdCBpc09iamVjdCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCI7XHJcbiAgICB9O1xyXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM0NDkxMjg3LzEyMjM1MzFcclxuICAgIGNvbnN0IGlzRW1wdHkgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB4IGluIG9iaikge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgeCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICAvLyBHdWFyZHNcclxuICAgIGlmICghaXNPYmplY3QobWVyZ2VUYXJnZXQpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG1lcmdlVGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciBvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc1ByZXNlbnQob3B0aW9uKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciBvcHRpb24gbXVzdCBoYXZlIGEgdmFsdWVcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KGdsb2JhbE9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIGdsb2JhbE9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gQWN0dWFsIG1lcmdlIHJvdXRpbmUsIHNlcGFyYXRlZCBmcm9tIG1haW4gbG9naWNcclxuICAgIC8vIE9ubHkgYSBzaW5nbGUgbGV2ZWwgb2Ygb3B0aW9ucyBpcyBtZXJnZWQuIERlZXBlciBsZXZlbHMgYXJlIHJlZidkLiBUaGlzIG1heSBhY3R1YWxseSBiZSBhbiBpc3N1ZS5cclxuICAgIC8vXHJcbiAgICBjb25zdCBkb01lcmdlID0gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucywgb3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFpc09iamVjdCh0YXJnZXRbb3B0aW9uXSkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3JjID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgICAgIGNvbnN0IGRzdCA9IHRhcmdldFtvcHRpb25dO1xyXG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBzcmMpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzcmMsIHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBkc3RbcHJvcF0gPSBzcmNbcHJvcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLy8gTG9jYWwgaW5pdGlhbGl6YXRpb25cclxuICAgIGNvbnN0IHNyY09wdGlvbiA9IG9wdGlvbnNbb3B0aW9uXTtcclxuICAgIGNvbnN0IGdsb2JhbFBhc3NlZCA9IGlzT2JqZWN0KGdsb2JhbE9wdGlvbnMpICYmICFpc0VtcHR5KGdsb2JhbE9wdGlvbnMpO1xyXG4gICAgY29uc3QgZ2xvYmFsT3B0aW9uID0gZ2xvYmFsUGFzc2VkID8gZ2xvYmFsT3B0aW9uc1tvcHRpb25dIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgZ2xvYmFsRW5hYmxlZCA9IGdsb2JhbE9wdGlvbiA/IGdsb2JhbE9wdGlvbi5lbmFibGVkIDogdW5kZWZpbmVkO1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIE1haW4gcm91dGluZVxyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIGlmIChzcmNPcHRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkb1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzcmNPcHRpb24gPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICBtZXJnZVRhcmdldFtvcHRpb25dID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0uZW5hYmxlZCA9IHNyY09wdGlvbjtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoc3JjT3B0aW9uID09PSBudWxsICYmICFpc09iamVjdChtZXJnZVRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgIC8vIElmIHBvc3NpYmxlLCBleHBsaWNpdCBjb3B5IGZyb20gZ2xvYmFsc1xyXG4gICAgICAgIGlmIChpc1ByZXNlbnQoZ2xvYmFsT3B0aW9uKSkge1xyXG4gICAgICAgICAgICBtZXJnZVRhcmdldFtvcHRpb25dID0gT2JqZWN0LmNyZWF0ZShnbG9iYWxPcHRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFpc09iamVjdChzcmNPcHRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy9cclxuICAgIC8vIEVuc3VyZSB0aGF0ICdlbmFibGVkJyBpcyBwcm9wZXJseSBzZXQuIEl0IGlzIHJlcXVpcmVkIGludGVybmFsbHlcclxuICAgIC8vIE5vdGUgdGhhdCB0aGUgdmFsdWUgZnJvbSBvcHRpb25zIHdpbGwgYWx3YXlzIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgdmFsdWVcclxuICAgIC8vXHJcbiAgICBsZXQgZW5hYmxlZCA9IHRydWU7IC8vIGRlZmF1bHQgdmFsdWVcclxuICAgIGlmIChzcmNPcHRpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZW5hYmxlZCA9IHNyY09wdGlvbi5lbmFibGVkO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gVGFrZSBmcm9tIGdsb2JhbHMsIGlmIHByZXNlbnRcclxuICAgICAgICBpZiAoZ2xvYmFsRW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWQgPSBnbG9iYWxPcHRpb24uZW5hYmxlZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkb01lcmdlKG1lcmdlVGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pO1xyXG4gICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gZW5hYmxlZDtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSB2aXNpYmxlIGl0ZW0gaW4gYSBzb3J0ZWQgbGlzdC4gSWYgd2UgZmluZCBhIHZpc2libGUgaXRlbSwgdGhlIGNvZGUgdGhhdCB1c2VzXHJcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCB0aGVuIGl0ZXJhdGUgaW4gYm90aCBkaXJlY3Rpb25zIG92ZXIgdGhpcyBzb3J0ZWQgbGlzdCB0byBmaW5kIGFsbCB2aXNpYmxlIGl0ZW1zLlxyXG4gKlxyXG4gKiBAcGFyYW0gb3JkZXJlZEl0ZW1zIC0gSXRlbXMgb3JkZXJlZCBieSBzdGFydC5cclxuICogQHBhcmFtIGNvbXBhcmF0b3IgLSAtMSBpcyBsb3dlciwgMCBpcyBlcXVhbCwgMSBpcyBoaWdoZXIuXHJcbiAqIEBwYXJhbSBmaWVsZCAtIFByb3BlcnR5IG5hbWUgb24gYW4gaXRlbSAoVGhhdCBpcyBpdGVtW2ZpZWxkXSkuXHJcbiAqIEBwYXJhbSBmaWVsZDIgLSBTZWNvbmQgcHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdW2ZpZWxkMl0pLlxyXG4gKiBAcmV0dXJucyBJbmRleCBvZiB0aGUgZm91bmQgaXRlbSBvciAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC5cclxuICovXHJcbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaEN1c3RvbShvcmRlcmVkSXRlbXMsIGNvbXBhcmF0b3IsIGZpZWxkLCBmaWVsZDIpIHtcclxuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDAwMDtcclxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xyXG4gICAgbGV0IGxvdyA9IDA7XHJcbiAgICBsZXQgaGlnaCA9IG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgd2hpbGUgKGxvdyA8PSBoaWdoICYmIGl0ZXJhdGlvbiA8IG1heEl0ZXJhdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBvcmRlcmVkSXRlbXNbbWlkZGxlXTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkMiA9PT0gdW5kZWZpbmVkID8gaXRlbVtmaWVsZF0gOiBpdGVtW2ZpZWxkXVtmaWVsZDJdO1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdCA9IGNvbXBhcmF0b3IodmFsdWUpO1xyXG4gICAgICAgIGlmIChzZWFyY2hSZXN1bHQgPT0gMCkge1xyXG4gICAgICAgICAgICAvLyBqaWhhYSwgZm91bmQgYSB2aXNpYmxlIGl0ZW0hXHJcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNlYXJjaFJlc3VsdCA9PSAtMSkge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICBsb3cgPSBtaWRkbGUgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXQgaXMgdG9vIGJpZyAtLT4gZGVjcmVhc2UgaGlnaFxyXG4gICAgICAgICAgICBoaWdoID0gbWlkZGxlIC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaXRlcmF0aW9uKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGJpbmFyeSBzZWFyY2ggZm9yIGEgc3BlY2lmaWMgdmFsdWUgaW4gYSBzb3J0ZWQgYXJyYXkuXHJcbiAqIElmIGl0IGRvZXMgbm90IGV4aXN0IGJ1dCBpcyBpbiBiZXR3ZWVuIG9mIHR3byB2YWx1ZXMsIHdlIHJldHVybiBlaXRoZXIgdGhlXHJcbiAqIG9uZSBiZWZvcmUgb3IgdGhlIG9uZSBhZnRlciwgZGVwZW5kaW5nIG9uIHVzZXIgaW5wdXQgSWYgaXQgaXMgZm91bmQsIHdlXHJcbiAqIHJldHVybiB0aGUgaW5kZXgsIGVsc2UgLTEuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBTb3J0ZWQgYXJyYXkuXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgc2VhcmNoZWQgdmFsdWUuXHJcbiAqIEBwYXJhbSBmaWVsZCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IGluIGl0ZW1zIHRvIGJlIHNlYXJjaGVkLlxyXG4gKiBAcGFyYW0gc2lkZVByZWZlcmVuY2UgLSBJZiB0aGUgdGFyZ2V0IGlzIGJldHdlZW4gdHdvIHZhbHVlcywgc2hvdWxkIHRoZSBpbmRleCBvZiB0aGUgYmVmb3JlIG9yIHRoZSBhZnRlciBiZSByZXR1cm5lZD9cclxuICogQHBhcmFtIGNvbXBhcmF0b3IgLSBBbiBvcHRpb25hbCBjb21wYXJhdG9yLCByZXR1cm5pbmcgLTEsIDAsIDEgZm9yIFxcPCwgPT09LCBcXD4uXHJcbiAqIEByZXR1cm5zIFRoZSBpbmRleCBvZiBmb3VuZCB2YWx1ZSBvciAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC5cclxuICovXHJcbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaFZhbHVlKG9yZGVyZWRJdGVtcywgdGFyZ2V0LCBmaWVsZCwgc2lkZVByZWZlcmVuY2UsIGNvbXBhcmF0b3IpIHtcclxuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDAwMDtcclxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xyXG4gICAgbGV0IGxvdyA9IDA7XHJcbiAgICBsZXQgaGlnaCA9IG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgbGV0IHByZXZWYWx1ZTtcclxuICAgIGxldCB2YWx1ZTtcclxuICAgIGxldCBuZXh0VmFsdWU7XHJcbiAgICBsZXQgbWlkZGxlO1xyXG4gICAgY29tcGFyYXRvciA9XHJcbiAgICAgICAgY29tcGFyYXRvciAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBjb21wYXJhdG9yXHJcbiAgICAgICAgICAgIDogZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhID09IGIgPyAwIDogYSA8IGIgPyAtMSA6IDE7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIC8vIGdldCBhIG5ldyBndWVzc1xyXG4gICAgICAgIG1pZGRsZSA9IE1hdGguZmxvb3IoMC41ICogKGhpZ2ggKyBsb3cpKTtcclxuICAgICAgICBwcmV2VmFsdWUgPSBvcmRlcmVkSXRlbXNbTWF0aC5tYXgoMCwgbWlkZGxlIC0gMSldW2ZpZWxkXTtcclxuICAgICAgICB2YWx1ZSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdW2ZpZWxkXTtcclxuICAgICAgICBuZXh0VmFsdWUgPVxyXG4gICAgICAgICAgICBvcmRlcmVkSXRlbXNbTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpXVtmaWVsZF07XHJcbiAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPT0gMCkge1xyXG4gICAgICAgICAgICAvLyB3ZSBmb3VuZCB0aGUgdGFyZ2V0XHJcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmF0b3IocHJldlZhbHVlLCB0YXJnZXQpIDwgMCAmJlxyXG4gICAgICAgICAgICBjb21wYXJhdG9yKHZhbHVlLCB0YXJnZXQpID4gMCkge1xyXG4gICAgICAgICAgICAvLyB0YXJnZXQgaXMgaW4gYmV0d2VlbiBvZiB0aGUgcHJldmlvdXMgYW5kIHRoZSBjdXJyZW50XHJcbiAgICAgICAgICAgIHJldHVybiBzaWRlUHJlZmVyZW5jZSA9PSBcImJlZm9yZVwiID8gTWF0aC5tYXgoMCwgbWlkZGxlIC0gMSkgOiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IobmV4dFZhbHVlLCB0YXJnZXQpID4gMCkge1xyXG4gICAgICAgICAgICAvLyB0YXJnZXQgaXMgaW4gYmV0d2VlbiBvZiB0aGUgY3VycmVudCBhbmQgdGhlIG5leHRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCJcclxuICAgICAgICAgICAgICAgID8gbWlkZGxlXHJcbiAgICAgICAgICAgICAgICA6IE1hdGgubWluKG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxLCBtaWRkbGUgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGRpZG50IGZpbmQgdGhlIHRhcmdldCwgd2UgbmVlZCB0byBjaGFuZ2Ugb3VyIGJvdW5kYXJpZXMuXHJcbiAgICAgICAgICAgIGlmIChjb21wYXJhdG9yKHZhbHVlLCB0YXJnZXQpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaXQgaXMgdG9vIHNtYWxsIC0tPiBpbmNyZWFzZSBsb3dcclxuICAgICAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgICAgICBoaWdoID0gbWlkZGxlIC0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIC8vIGRpZG50IGZpbmQgYW55dGhpbmcuIFJldHVybiAtMS5cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKlxyXG4gKiBFYXNpbmcgRnVuY3Rpb25zLlxyXG4gKiBPbmx5IGNvbnNpZGVyaW5nIHRoZSB0IHZhbHVlIGZvciB0aGUgcmFuZ2UgWzAsIDFdID0+IFswLCAxXS5cclxuICpcclxuICogSW5zcGlyYXRpb246IGZyb20gaHR0cDovL2dpem1hLmNvbS9lYXNpbmcvXHJcbiAqIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2dyZS8xNjUwMjk0XHJcbiAqL1xyXG5jb25zdCBlYXNpbmdGdW5jdGlvbnMgPSB7XHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIG5vIGVhc2luZyBhbmQgbm8gYWNjZWxlcmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgbGluZWFyKHQpIHtcclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YWQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogKDIgLSB0KTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAyICogdCAqIHQgOiAtMSArICg0IC0gMiAqIHQpICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluQ3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiAtLXQgKiB0ICogdCArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJbk91dEN1YmljKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDQgKiB0ICogdCAqIHQgOiAodCAtIDEpICogKDIgKiB0IC0gMikgKiAoMiAqIHQgLSAyKSArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIGZyb20gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJblF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWFydCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAtLXQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJbk91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDggKiB0ICogdCAqIHQgKiB0IDogMSAtIDggKiAtLXQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIGZyb20gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJblF1aW50KHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiAxICsgLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gMTYgKiB0ICogdCAqIHQgKiB0ICogdCA6IDEgKyAxNiAqIC0tdCAqIHQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG59O1xyXG4vKipcclxuICogRXhwZXJpbWVudGFseSBjb21wdXRlIHRoZSB3aWR0aCBvZiB0aGUgc2Nyb2xsYmFyIGZvciB0aGlzIGJyb3dzZXIuXHJcbiAqXHJcbiAqIEByZXR1cm5zIFRoZSB3aWR0aCBpbiBwaXhlbHMuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTY3JvbGxCYXJXaWR0aCgpIHtcclxuICAgIGNvbnN0IGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICBpbm5lci5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xyXG4gICAgaW5uZXIuc3R5bGUuaGVpZ2h0ID0gXCIyMDBweFwiO1xyXG4gICAgY29uc3Qgb3V0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgb3V0ZXIuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICBvdXRlci5zdHlsZS50b3AgPSBcIjBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgIG91dGVyLnN0eWxlLndpZHRoID0gXCIyMDBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUuaGVpZ2h0ID0gXCIxNTBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlcik7XHJcbiAgICBjb25zdCB3MSA9IGlubmVyLm9mZnNldFdpZHRoO1xyXG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSBcInNjcm9sbFwiO1xyXG4gICAgbGV0IHcyID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBpZiAodzEgPT0gdzIpIHtcclxuICAgICAgICB3MiA9IG91dGVyLmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdXRlcik7XHJcbiAgICByZXR1cm4gdzEgLSB3MjtcclxufVxyXG4vLyBAVE9ETzogVGhpcyBkb2Vzbid0IHdvcmsgcHJvcGVybHkuXHJcbi8vIEl0IHdvcmtzIG9ubHkgZm9yIHNpbmdsZSBwcm9wZXJ0eSBvYmplY3RzLFxyXG4vLyBvdGhlcndpc2UgaXQgY29tYmluZXMgYWxsIG9mIHRoZSB0eXBlcyBpbiBhIHVuaW9uLlxyXG4vLyBleHBvcnQgZnVuY3Rpb24gdG9wTW9zdDxLMSBleHRlbmRzIHN0cmluZywgVjE+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxPltdLFxyXG4vLyAgIGFjY2Vzc29yczogSzEgfCBbSzFdXHJcbi8vICk6IHVuZGVmaW5lZCB8IFYxXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgVjEsIFYyPiAoXHJcbi8vICAgcGlsZTogUmVjb3JkPEsxLCB1bmRlZmluZWQgfCBWMSB8IFJlY29yZDxLMiwgdW5kZWZpbmVkIHwgVjI+PltdLFxyXG4vLyAgIGFjY2Vzc29yczogW0sxLCBLMl1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjEgfCBWMlxyXG4vLyBleHBvcnQgZnVuY3Rpb24gdG9wTW9zdDxLMSBleHRlbmRzIHN0cmluZywgSzIgZXh0ZW5kcyBzdHJpbmcsIEszIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjIsIFYzPiAoXHJcbi8vICAgcGlsZTogUmVjb3JkPEsxLCB1bmRlZmluZWQgfCBWMSB8IFJlY29yZDxLMiwgdW5kZWZpbmVkIHwgVjIgfCBSZWNvcmQ8SzMsIHVuZGVmaW5lZCB8IFYzPj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyLCBLM11cclxuLy8gKTogdW5kZWZpbmVkIHwgVjEgfCBWMiB8IFYzXHJcbi8qKlxyXG4gKiBHZXQgdGhlIHRvcCBtb3N0IHByb3BlcnR5IHZhbHVlIGZyb20gYSBwaWxlIG9mIG9iamVjdHMuXHJcbiAqXHJcbiAqIEBwYXJhbSBwaWxlIC0gQXJyYXkgb2Ygb2JqZWN0cywgbm8gcmVxdWlyZWQgZm9ybWF0LlxyXG4gKiBAcGFyYW0gYWNjZXNzb3JzIC0gQXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXHJcbiAqIEZvciBleGFtcGxlIGBvYmplY3RbJ2ZvbyddWydiYXInXWAg4oaSIGBbJ2ZvbycsICdiYXInXWAuXHJcbiAqIEByZXR1cm5zIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB3aXRoIGdpdmVuIGFjY2Vzc29ycyBwYXRoIGZyb20gdGhlIGZpcnN0IHBpbGUgaXRlbSB3aGVyZSBpdCdzIG5vdCB1bmRlZmluZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiB0b3BNb3N0KHBpbGUsIGFjY2Vzc29ycykge1xyXG4gICAgbGV0IGNhbmRpZGF0ZTtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShhY2Nlc3NvcnMpKSB7XHJcbiAgICAgICAgYWNjZXNzb3JzID0gW2FjY2Vzc29yc107XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBwaWxlKSB7XHJcbiAgICAgICAgaWYgKG1lbWJlcikge1xyXG4gICAgICAgICAgICBjYW5kaWRhdGUgPSBtZW1iZXJbYWNjZXNzb3JzWzBdXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhY2Nlc3NvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGVbYWNjZXNzb3JzW2ldXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbmRpZGF0ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FuZGlkYXRlO1xyXG59XG5cbmNvbnN0IGh0bWxDb2xvcnMgPSB7XG4gIGJsYWNrOiBcIiMwMDAwMDBcIixcbiAgbmF2eTogXCIjMDAwMDgwXCIsXG4gIGRhcmtibHVlOiBcIiMwMDAwOEJcIixcbiAgbWVkaXVtYmx1ZTogXCIjMDAwMENEXCIsXG4gIGJsdWU6IFwiIzAwMDBGRlwiLFxuICBkYXJrZ3JlZW46IFwiIzAwNjQwMFwiLFxuICBncmVlbjogXCIjMDA4MDAwXCIsXG4gIHRlYWw6IFwiIzAwODA4MFwiLFxuICBkYXJrY3lhbjogXCIjMDA4QjhCXCIsXG4gIGRlZXBza3libHVlOiBcIiMwMEJGRkZcIixcbiAgZGFya3R1cnF1b2lzZTogXCIjMDBDRUQxXCIsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiBcIiMwMEZBOUFcIixcbiAgbGltZTogXCIjMDBGRjAwXCIsXG4gIHNwcmluZ2dyZWVuOiBcIiMwMEZGN0ZcIixcbiAgYXF1YTogXCIjMDBGRkZGXCIsXG4gIGN5YW46IFwiIzAwRkZGRlwiLFxuICBtaWRuaWdodGJsdWU6IFwiIzE5MTk3MFwiLFxuICBkb2RnZXJibHVlOiBcIiMxRTkwRkZcIixcbiAgbGlnaHRzZWFncmVlbjogXCIjMjBCMkFBXCIsXG4gIGZvcmVzdGdyZWVuOiBcIiMyMjhCMjJcIixcbiAgc2VhZ3JlZW46IFwiIzJFOEI1N1wiLFxuICBkYXJrc2xhdGVncmF5OiBcIiMyRjRGNEZcIixcbiAgbGltZWdyZWVuOiBcIiMzMkNEMzJcIixcbiAgbWVkaXVtc2VhZ3JlZW46IFwiIzNDQjM3MVwiLFxuICB0dXJxdW9pc2U6IFwiIzQwRTBEMFwiLFxuICByb3lhbGJsdWU6IFwiIzQxNjlFMVwiLFxuICBzdGVlbGJsdWU6IFwiIzQ2ODJCNFwiLFxuICBkYXJrc2xhdGVibHVlOiBcIiM0ODNEOEJcIixcbiAgbWVkaXVtdHVycXVvaXNlOiBcIiM0OEQxQ0NcIixcbiAgaW5kaWdvOiBcIiM0QjAwODJcIixcbiAgZGFya29saXZlZ3JlZW46IFwiIzU1NkIyRlwiLFxuICBjYWRldGJsdWU6IFwiIzVGOUVBMFwiLFxuICBjb3JuZmxvd2VyYmx1ZTogXCIjNjQ5NUVEXCIsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IFwiIzY2Q0RBQVwiLFxuICBkaW1ncmF5OiBcIiM2OTY5NjlcIixcbiAgc2xhdGVibHVlOiBcIiM2QTVBQ0RcIixcbiAgb2xpdmVkcmFiOiBcIiM2QjhFMjNcIixcbiAgc2xhdGVncmF5OiBcIiM3MDgwOTBcIixcbiAgbGlnaHRzbGF0ZWdyYXk6IFwiIzc3ODg5OVwiLFxuICBtZWRpdW1zbGF0ZWJsdWU6IFwiIzdCNjhFRVwiLFxuICBsYXduZ3JlZW46IFwiIzdDRkMwMFwiLFxuICBjaGFydHJldXNlOiBcIiM3RkZGMDBcIixcbiAgYXF1YW1hcmluZTogXCIjN0ZGRkQ0XCIsXG4gIG1hcm9vbjogXCIjODAwMDAwXCIsXG4gIHB1cnBsZTogXCIjODAwMDgwXCIsXG4gIG9saXZlOiBcIiM4MDgwMDBcIixcbiAgZ3JheTogXCIjODA4MDgwXCIsXG4gIHNreWJsdWU6IFwiIzg3Q0VFQlwiLFxuICBsaWdodHNreWJsdWU6IFwiIzg3Q0VGQVwiLFxuICBibHVldmlvbGV0OiBcIiM4QTJCRTJcIixcbiAgZGFya3JlZDogXCIjOEIwMDAwXCIsXG4gIGRhcmttYWdlbnRhOiBcIiM4QjAwOEJcIixcbiAgc2FkZGxlYnJvd246IFwiIzhCNDUxM1wiLFxuICBkYXJrc2VhZ3JlZW46IFwiIzhGQkM4RlwiLFxuICBsaWdodGdyZWVuOiBcIiM5MEVFOTBcIixcbiAgbWVkaXVtcHVycGxlOiBcIiM5MzcwRDhcIixcbiAgZGFya3Zpb2xldDogXCIjOTQwMEQzXCIsXG4gIHBhbGVncmVlbjogXCIjOThGQjk4XCIsXG4gIGRhcmtvcmNoaWQ6IFwiIzk5MzJDQ1wiLFxuICB5ZWxsb3dncmVlbjogXCIjOUFDRDMyXCIsXG4gIHNpZW5uYTogXCIjQTA1MjJEXCIsXG4gIGJyb3duOiBcIiNBNTJBMkFcIixcbiAgZGFya2dyYXk6IFwiI0E5QTlBOVwiLFxuICBsaWdodGJsdWU6IFwiI0FERDhFNlwiLFxuICBncmVlbnllbGxvdzogXCIjQURGRjJGXCIsXG4gIHBhbGV0dXJxdW9pc2U6IFwiI0FGRUVFRVwiLFxuICBsaWdodHN0ZWVsYmx1ZTogXCIjQjBDNERFXCIsXG4gIHBvd2RlcmJsdWU6IFwiI0IwRTBFNlwiLFxuICBmaXJlYnJpY2s6IFwiI0IyMjIyMlwiLFxuICBkYXJrZ29sZGVucm9kOiBcIiNCODg2MEJcIixcbiAgbWVkaXVtb3JjaGlkOiBcIiNCQTU1RDNcIixcbiAgcm9zeWJyb3duOiBcIiNCQzhGOEZcIixcbiAgZGFya2toYWtpOiBcIiNCREI3NkJcIixcbiAgc2lsdmVyOiBcIiNDMEMwQzBcIixcbiAgbWVkaXVtdmlvbGV0cmVkOiBcIiNDNzE1ODVcIixcbiAgaW5kaWFucmVkOiBcIiNDRDVDNUNcIixcbiAgcGVydTogXCIjQ0Q4NTNGXCIsXG4gIGNob2NvbGF0ZTogXCIjRDI2OTFFXCIsXG4gIHRhbjogXCIjRDJCNDhDXCIsXG4gIGxpZ2h0Z3JleTogXCIjRDNEM0QzXCIsXG4gIHBhbGV2aW9sZXRyZWQ6IFwiI0Q4NzA5M1wiLFxuICB0aGlzdGxlOiBcIiNEOEJGRDhcIixcbiAgb3JjaGlkOiBcIiNEQTcwRDZcIixcbiAgZ29sZGVucm9kOiBcIiNEQUE1MjBcIixcbiAgY3JpbXNvbjogXCIjREMxNDNDXCIsXG4gIGdhaW5zYm9ybzogXCIjRENEQ0RDXCIsXG4gIHBsdW06IFwiI0REQTBERFwiLFxuICBidXJseXdvb2Q6IFwiI0RFQjg4N1wiLFxuICBsaWdodGN5YW46IFwiI0UwRkZGRlwiLFxuICBsYXZlbmRlcjogXCIjRTZFNkZBXCIsXG4gIGRhcmtzYWxtb246IFwiI0U5OTY3QVwiLFxuICB2aW9sZXQ6IFwiI0VFODJFRVwiLFxuICBwYWxlZ29sZGVucm9kOiBcIiNFRUU4QUFcIixcbiAgbGlnaHRjb3JhbDogXCIjRjA4MDgwXCIsXG4gIGtoYWtpOiBcIiNGMEU2OENcIixcbiAgYWxpY2VibHVlOiBcIiNGMEY4RkZcIixcbiAgaG9uZXlkZXc6IFwiI0YwRkZGMFwiLFxuICBhenVyZTogXCIjRjBGRkZGXCIsXG4gIHNhbmR5YnJvd246IFwiI0Y0QTQ2MFwiLFxuICB3aGVhdDogXCIjRjVERUIzXCIsXG4gIGJlaWdlOiBcIiNGNUY1RENcIixcbiAgd2hpdGVzbW9rZTogXCIjRjVGNUY1XCIsXG4gIG1pbnRjcmVhbTogXCIjRjVGRkZBXCIsXG4gIGdob3N0d2hpdGU6IFwiI0Y4RjhGRlwiLFxuICBzYWxtb246IFwiI0ZBODA3MlwiLFxuICBhbnRpcXVld2hpdGU6IFwiI0ZBRUJEN1wiLFxuICBsaW5lbjogXCIjRkFGMEU2XCIsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiBcIiNGQUZBRDJcIixcbiAgb2xkbGFjZTogXCIjRkRGNUU2XCIsXG4gIHJlZDogXCIjRkYwMDAwXCIsXG4gIGZ1Y2hzaWE6IFwiI0ZGMDBGRlwiLFxuICBtYWdlbnRhOiBcIiNGRjAwRkZcIixcbiAgZGVlcHBpbms6IFwiI0ZGMTQ5M1wiLFxuICBvcmFuZ2VyZWQ6IFwiI0ZGNDUwMFwiLFxuICB0b21hdG86IFwiI0ZGNjM0N1wiLFxuICBob3RwaW5rOiBcIiNGRjY5QjRcIixcbiAgY29yYWw6IFwiI0ZGN0Y1MFwiLFxuICBkYXJrb3JhbmdlOiBcIiNGRjhDMDBcIixcbiAgbGlnaHRzYWxtb246IFwiI0ZGQTA3QVwiLFxuICBvcmFuZ2U6IFwiI0ZGQTUwMFwiLFxuICBsaWdodHBpbms6IFwiI0ZGQjZDMVwiLFxuICBwaW5rOiBcIiNGRkMwQ0JcIixcbiAgZ29sZDogXCIjRkZENzAwXCIsXG4gIHBlYWNocHVmZjogXCIjRkZEQUI5XCIsXG4gIG5hdmFqb3doaXRlOiBcIiNGRkRFQURcIixcbiAgbW9jY2FzaW46IFwiI0ZGRTRCNVwiLFxuICBiaXNxdWU6IFwiI0ZGRTRDNFwiLFxuICBtaXN0eXJvc2U6IFwiI0ZGRTRFMVwiLFxuICBibGFuY2hlZGFsbW9uZDogXCIjRkZFQkNEXCIsXG4gIHBhcGF5YXdoaXA6IFwiI0ZGRUZENVwiLFxuICBsYXZlbmRlcmJsdXNoOiBcIiNGRkYwRjVcIixcbiAgc2Vhc2hlbGw6IFwiI0ZGRjVFRVwiLFxuICBjb3Juc2lsazogXCIjRkZGOERDXCIsXG4gIGxlbW9uY2hpZmZvbjogXCIjRkZGQUNEXCIsXG4gIGZsb3JhbHdoaXRlOiBcIiNGRkZBRjBcIixcbiAgc25vdzogXCIjRkZGQUZBXCIsXG4gIHllbGxvdzogXCIjRkZGRjAwXCIsXG4gIGxpZ2h0eWVsbG93OiBcIiNGRkZGRTBcIixcbiAgaXZvcnk6IFwiI0ZGRkZGMFwiLFxuICB3aGl0ZTogXCIjRkZGRkZGXCIsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGl4ZWxSYXRpbz0xXVxuICovXG5sZXQgQ29sb3JQaWNrZXIkMSA9IGNsYXNzIENvbG9yUGlja2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGl4ZWxSYXRpbz0xXVxuICAgKi9cbiAgY29uc3RydWN0b3IocGl4ZWxSYXRpbyA9IDEpIHtcbiAgICB0aGlzLnBpeGVsUmF0aW8gPSBwaXhlbFJhdGlvO1xuICAgIHRoaXMuZ2VuZXJhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5jZW50ZXJDb29yZGluYXRlcyA9IHsgeDogMjg5IC8gMiwgeTogMjg5IC8gMiB9O1xuICAgIHRoaXMuciA9IDI4OSAqIDAuNDk7XG4gICAgdGhpcy5jb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5odWVDaXJjbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pbml0aWFsQ29sb3IgPSB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGE6IDEuMCB9O1xuICAgIHRoaXMucHJldmlvdXNDb2xvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFwcGxpZWQgPSBmYWxzZTtcblxuICAgIC8vIGJvdW5kIGJ5XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayA9ICgpID0+IHt9O1xuICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9ICgpID0+IHt9O1xuXG4gICAgLy8gY3JlYXRlIGFsbCBET00gZWxlbWVudHNcbiAgICB0aGlzLl9jcmVhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGluc2VydHMgdGhlIGNvbG9yUGlja2VyIGludG8gYSBkaXYgZnJvbSB0aGUgRE9NXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyXG4gICAqL1xuICBpbnNlcnRUbyhjb250YWluZXIpIHtcbiAgICBpZiAodGhpcy5oYW1tZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5oYW1tZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy5oYW1tZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICAgIHRoaXMuX2JpbmRIYW1tZXIoKTtcblxuICAgIHRoaXMuX3NldFNpemUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgb24gYXBwbHkgYW5kIHNhdmUuIEJpbmQgaXQgdG8gdGhlIGFwcGxpY2F0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBzZXRVcGRhdGVDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRnVuY3Rpb24gYXR0ZW1wdGVkIHRvIHNldCBhcyBjb2xvclBpY2tlciB1cGRhdGUgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldENsb3NlQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRnVuY3Rpb24gYXR0ZW1wdGVkIHRvIHNldCBhcyBjb2xvclBpY2tlciBjbG9zaW5nIGNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pc0NvbG9yU3RyaW5nKGNvbG9yKSB7XG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGh0bWxDb2xvcnNbY29sb3JdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbG9yIG9mIHRoZSBjb2xvclBpY2tlclxuICAgKiBTdXBwb3J0ZWQgZm9ybWF0czpcbiAgICogJ3JlZCcgICAgICAgICAgICAgICAgICAgLS0+IEhUTUwgY29sb3Igc3RyaW5nXG4gICAqICcjZmZmZmZmJyAgICAgICAgICAgICAgIC0tPiBoZXggc3RyaW5nXG4gICAqICdyZ2IoMjU1LDI1NSwyNTUpJyAgICAgIC0tPiByZ2Igc3RyaW5nXG4gICAqICdyZ2JhKDI1NSwyNTUsMjU1LDEuMCknIC0tPiByZ2JhIHN0cmluZ1xuICAgKiB7cjoyNTUsZzoyNTUsYjoyNTV9ICAgICAtLT4gcmdiIG9iamVjdFxuICAgKiB7cjoyNTUsZzoyNTUsYjoyNTUsYToxLjB9IC0tPiByZ2JhIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG9iamVjdH0gY29sb3JcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2V0SW5pdGlhbD10cnVlXVxuICAgKi9cbiAgc2V0Q29sb3IoY29sb3IsIHNldEluaXRpYWwgPSB0cnVlKSB7XG4gICAgaWYgKGNvbG9yID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZ2JhO1xuXG4gICAgLy8gaWYgYSBodG1sIGNvbG9yIHNob3J0aGFuZCBpcyB1c2VkLCBjb252ZXJ0IHRvIGhleFxuICAgIGNvbnN0IGh0bWxDb2xvciA9IHRoaXMuX2lzQ29sb3JTdHJpbmcoY29sb3IpO1xuICAgIGlmIChodG1sQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29sb3IgPSBodG1sQ29sb3I7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9ybWF0XG4gICAgaWYgKGlzU3RyaW5nKGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKGlzVmFsaWRSR0IoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHJnYmFBcnJheSA9IGNvbG9yXG4gICAgICAgICAgLnN1YnN0cig0KVxuICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3IubGVuZ3RoIC0gNSlcbiAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xuICAgICAgICByZ2JhID0geyByOiByZ2JhQXJyYXlbMF0sIGc6IHJnYmFBcnJheVsxXSwgYjogcmdiYUFycmF5WzJdLCBhOiAxLjAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZFJHQkEoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHJnYmFBcnJheSA9IGNvbG9yXG4gICAgICAgICAgLnN1YnN0cig1KVxuICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3IubGVuZ3RoIC0gNilcbiAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xuICAgICAgICByZ2JhID0ge1xuICAgICAgICAgIHI6IHJnYmFBcnJheVswXSxcbiAgICAgICAgICBnOiByZ2JhQXJyYXlbMV0sXG4gICAgICAgICAgYjogcmdiYUFycmF5WzJdLFxuICAgICAgICAgIGE6IHJnYmFBcnJheVszXSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZEhleChjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiT2JqID0gaGV4VG9SR0IoY29sb3IpO1xuICAgICAgICByZ2JhID0geyByOiByZ2JPYmouciwgZzogcmdiT2JqLmcsIGI6IHJnYk9iai5iLCBhOiAxLjAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbG9yIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2xvci5yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb2xvci5nICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb2xvci5iICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgYWxwaGEgPSBjb2xvci5hICE9PSB1bmRlZmluZWQgPyBjb2xvci5hIDogXCIxLjBcIjtcbiAgICAgICAgICByZ2JhID0geyByOiBjb2xvci5yLCBnOiBjb2xvci5nLCBiOiBjb2xvci5iLCBhOiBhbHBoYSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbG9yXG4gICAgaWYgKHJnYmEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlVua25vd24gY29sb3IgcGFzc2VkIHRvIHRoZSBjb2xvclBpY2tlci4gU3VwcG9ydGVkIGFyZSBzdHJpbmdzOiByZ2IsIGhleCwgcmdiYS4gT2JqZWN0OiByZ2IgKHtyOnIsZzpnLGI6YixbYTphXX0pLiBTdXBwbGllZDogXCIgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNvbG9yKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0Q29sb3IocmdiYSwgc2V0SW5pdGlhbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgc2hvd3MgdGhlIGNvbG9yIHBpY2tlci5cbiAgICogVGhlIGh1ZSBjaXJjbGUgaXMgY29uc3RydWN0ZWQgb25jZSBhbmQgc3RvcmVkLlxuICAgKi9cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICB0aGlzLl9nZW5lcmF0ZUh1ZUNpcmNsZSgpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBSSVZBVEUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuICAvKipcbiAgICogSGlkZSB0aGUgcGlja2VyLiBJcyBjYWxsZWQgYnkgdGhlIGNhbmNlbCBidXR0b24uXG4gICAqIE9wdGlvbmFsIGJvb2xlYW4gdG8gc3RvcmUgdGhlIHByZXZpb3VzIGNvbG9yIGZvciBlYXN5IGFjY2VzcyBsYXRlciBvbi5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbc3RvcmVQcmV2aW91cz10cnVlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hpZGUoc3RvcmVQcmV2aW91cyA9IHRydWUpIHtcbiAgICAvLyBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIG5leHQgdGltZTtcbiAgICBpZiAoc3RvcmVQcmV2aW91cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5wcmV2aW91c0NvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXBwbGllZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmluaXRpYWxDb2xvcik7XG4gICAgfVxuXG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cbiAgICAvLyBjYWxsIHRoZSBjbG9zaW5nIGNhbGxiYWNrLCByZXN0b3JpbmcgdGhlIG9uY2xpY2sgbWV0aG9kLlxuICAgIC8vIHRoaXMgaXMgaW4gYSBzZXRUaW1lb3V0IGJlY2F1c2UgaXQgd2lsbCB0cmlnZ2VyIHRoZSBzaG93IGFnYWluIGJlZm9yZSB0aGUgY2xpY2sgaXMgZG9uZS5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcbiAgICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIGJvdW5kIHRvIHRoZSBzYXZlIGJ1dHRvbi4gU2F2ZXMgYW5kIGhpZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NhdmUoKSB7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLmFwcGxpZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9oaWRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQm91bmQgdG8gYXBwbHkgYnV0dG9uLiBTYXZlcyBidXQgZG9lcyBub3QgY2xvc2UuIElzIHVuZG9uZSBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hcHBseSgpIHtcbiAgICB0aGlzLmFwcGxpZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2sodGhpcy5jb2xvcik7XG4gICAgdGhpcy5fdXBkYXRlUGlja2VyKHRoaXMuY29sb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIGxvYWQgdGhlIGNvbG9yIGZyb20gdGhlIHByZXZpb3VzIHNlc3Npb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbG9hZExhc3QoKSB7XG4gICAgaWYgKHRoaXMucHJldmlvdXNDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldENvbG9yKHRoaXMucHJldmlvdXNDb2xvciwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGVydChcIlRoZXJlIGlzIG5vIGxhc3QgY29sb3IgdG8gbG9hZC4uLlwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBjb2xvciwgcGxhY2UgdGhlIHBpY2tlclxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0Q29sb3IocmdiYSwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICAvLyBzdG9yZSB0aGUgaW5pdGlhbCBjb2xvclxuICAgIGlmIChzZXRJbml0aWFsID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmluaXRpYWxDb2xvciA9IE9iamVjdC5hc3NpZ24oe30sIHJnYmEpO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuXG4gICAgY29uc3QgYW5nbGVDb252ZXJ0ID0gMiAqIE1hdGguUEk7XG4gICAgY29uc3QgcmFkaXVzID0gdGhpcy5yICogaHN2LnM7XG4gICAgY29uc3QgeCA9XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnggKyByYWRpdXMgKiBNYXRoLnNpbihhbmdsZUNvbnZlcnQgKiBoc3YuaCk7XG4gICAgY29uc3QgeSA9XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnkgKyByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZUNvbnZlcnQgKiBoc3YuaCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUubGVmdCA9XG4gICAgICB4IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudFdpZHRoICsgXCJweFwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS50b3AgPVxuICAgICAgeSAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG5cbiAgICB0aGlzLl91cGRhdGVQaWNrZXIocmdiYSk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gb3BhY2l0eSBjb250cm9sXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldE9wYWNpdHkodmFsdWUpIHtcbiAgICB0aGlzLmNvbG9yLmEgPSB2YWx1ZSAvIDEwMDtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gYnJpZ2h0bmVzcyBjb250cm9sXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldEJyaWdodG5lc3ModmFsdWUpIHtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVih0aGlzLmNvbG9yLnIsIHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iKTtcbiAgICBoc3YudiA9IHZhbHVlIC8gMTAwO1xuICAgIGNvbnN0IHJnYmEgPSBIU1ZUb1JHQihoc3YuaCwgaHN2LnMsIGhzdi52KTtcbiAgICByZ2JhW1wiYVwiXSA9IHRoaXMuY29sb3IuYTtcbiAgICB0aGlzLmNvbG9yID0gcmdiYTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGUgdGhlIGNvbG9yIHBpY2tlci4gQSBibGFjayBjaXJjbGUgb3ZlcmxheXMgdGhlIGh1ZSBjaXJjbGUgdG8gbWltaWMgdGhlIGJyaWdodG5lc3MgZGVjcmVhc2luZy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHJnYmFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVQaWNrZXIocmdiYSA9IHRoaXMuY29sb3IpIHtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVihyZ2JhLnIsIHJnYmEuZywgcmdiYS5iKTtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICBpZiAodGhpcy5waXhlbFJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBpeGVsUmF0aW8gPVxuICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAoY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHguYmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIDEpO1xuICAgIH1cbiAgICBjdHguc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcblxuICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICBjb25zdCB3ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBoID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRIZWlnaHQ7XG4gICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgIGN0eC5wdXRJbWFnZURhdGEodGhpcy5odWVDaXJjbGUsIDAsIDApO1xuICAgIGN0eC5maWxsU3R5bGUgPSBcInJnYmEoMCwwLDAsXCIgKyAoMSAtIGhzdi52KSArIFwiKVwiO1xuICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgY3R4LmZpbGwoKTtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gMTAwICogaHN2LnY7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UudmFsdWUgPSAxMDAgKiByZ2JhLmE7XG5cbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgXCJyZ2JhKFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5iICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gICAgdGhpcy5uZXdDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgXCJyZ2JhKFwiICtcbiAgICAgIHRoaXMuY29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5iICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB1c2VkIGJ5IGNyZWF0ZSB0byBzZXQgdGhlIHNpemUgb2YgdGhlIGNhbnZhcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRTaXplKCkge1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLnN0eWxlLmhlaWdodCA9IFwiMTAwJVwiO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy53aWR0aCA9IDI4OSAqIHRoaXMucGl4ZWxSYXRpbztcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmhlaWdodCA9IDI4OSAqIHRoaXMucGl4ZWxSYXRpbztcbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGUgYWxsIGRvbSBlbGVtZW50c1xuICAgKiBUT0RPOiBjbGVhbnVwLCBsb3RzIG9mIHNpbWlsYXIgZG9tIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlKCkge1xuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtY29sb3ItcGlja2VyXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGFzc05hbWUgPSBcInZpcy1zZWxlY3RvclwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlclNlbGVjdG9yKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckNhbnZhcyk7XG5cbiAgICBpZiAoIXRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dCkge1xuICAgICAgY29uc3Qgbm9DYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpO1xuICAgICAgbm9DYW52YXMuc3R5bGUuY29sb3IgPSBcInJlZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUucGFkZGluZyA9IFwiMTBweFwiO1xuICAgICAgbm9DYW52YXMuaW5uZXJUZXh0ID0gXCJFcnJvcjogeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTCBjYW52YXNcIjtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuYXBwZW5kQ2hpbGQobm9DYW52YXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzXG4gICAgICAgIC5nZXRDb250ZXh0KFwiMmRcIilcbiAgICAgICAgLnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5jbGFzc05hbWUgPSBcInZpcy1jb2xvclwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm9wYWNpdHlEaXYuY2xhc3NOYW1lID0gXCJ2aXMtb3BhY2l0eVwiO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuY2xhc3NOYW1lID0gXCJ2aXMtYnJpZ2h0bmVzc1wiO1xuXG4gICAgdGhpcy5hcnJvd0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcnJvd0Rpdi5jbGFzc05hbWUgPSBcInZpcy1hcnJvd1wiO1xuXG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLnR5cGUgPSBcInJhbmdlXCI7IC8vIE5vdCBzdXBwb3J0ZWQgb24gSUU5XG4gICAgICB0aGlzLm9wYWNpdHlSYW5nZS5taW4gPSBcIjBcIjtcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1heCA9IFwiMTAwXCI7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPOiBBZGQgc29tZSBlcnJvciBoYW5kbGluZy5cbiAgICB9XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UudmFsdWUgPSBcIjEwMFwiO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLmNsYXNzTmFtZSA9IFwidmlzLXJhbmdlXCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMub3BhY2l0eURpdi5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlSYW5nZSk7XG4gICAgdGhpcy5icmlnaHRuZXNzRGl2LmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc1JhbmdlKTtcblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRPcGFjaXR5KHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRPcGFjaXR5KHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fc2V0QnJpZ2h0bmVzcyh0aGlzLnZhbHVlKTtcbiAgICB9O1xuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fc2V0QnJpZ2h0bmVzcyh0aGlzLnZhbHVlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0xhYmVsLmNsYXNzTmFtZSA9IFwidmlzLWxhYmVsIHZpcy1icmlnaHRuZXNzXCI7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuaW5uZXJUZXh0ID0gXCJicmlnaHRuZXNzOlwiO1xuXG4gICAgdGhpcy5vcGFjaXR5TGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eUxhYmVsLmNsYXNzTmFtZSA9IFwidmlzLWxhYmVsIHZpcy1vcGFjaXR5XCI7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuaW5uZXJUZXh0ID0gXCJvcGFjaXR5OlwiO1xuXG4gICAgdGhpcy5uZXdDb2xvckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5uZXdDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1uZXctY29sb3JcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmlubmVyVGV4dCA9IFwibmV3XCI7XG5cbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuY2xhc3NOYW1lID0gXCJ2aXMtaW5pdGlhbC1jb2xvclwiO1xuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LmlubmVyVGV4dCA9IFwiaW5pdGlhbFwiO1xuXG4gICAgdGhpcy5jYW5jZWxCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtY2FuY2VsXCI7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uaW5uZXJUZXh0ID0gXCJjYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5faGlkZS5iaW5kKHRoaXMsIGZhbHNlKTtcblxuICAgIHRoaXMuYXBwbHlCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYXBwbHlCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1hcHBseVwiO1xuICAgIHRoaXMuYXBwbHlCdXR0b24uaW5uZXJUZXh0ID0gXCJhcHBseVwiO1xuICAgIHRoaXMuYXBwbHlCdXR0b24ub25jbGljayA9IHRoaXMuX2FwcGx5LmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnNhdmVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLXNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24uaW5uZXJUZXh0ID0gXCJzYXZlXCI7XG4gICAgdGhpcy5zYXZlQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9zYXZlLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmxvYWRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWxvYWRcIjtcbiAgICB0aGlzLmxvYWRCdXR0b24uaW5uZXJUZXh0ID0gXCJsb2FkIGxhc3RcIjtcbiAgICB0aGlzLmxvYWRCdXR0b24ub25jbGljayA9IHRoaXMuX2xvYWRMYXN0LmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY29sb3JQaWNrZXJEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5hcnJvd0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmJyaWdodG5lc3NMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmJyaWdodG5lc3NEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5vcGFjaXR5TGFiZWwpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5vcGFjaXR5RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubmV3Q29sb3JEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5pbml0aWFsQ29sb3JEaXYpO1xuXG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmNhbmNlbEJ1dHRvbik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFwcGx5QnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuc2F2ZUJ1dHRvbik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmxvYWRCdXR0b24pO1xuICB9XG5cbiAgLyoqXG4gICAqIGJpbmQgaGFtbWVyIHRvIHRoZSBjb2xvciBwaWNrZXJcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9iaW5kSGFtbWVyKCkge1xuICAgIHRoaXMuZHJhZyA9IHt9O1xuICAgIHRoaXMucGluY2ggPSB7fTtcbiAgICB0aGlzLmhhbW1lciA9IG5ldyBIYW1tZXIkMSh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcbiAgICB0aGlzLmhhbW1lci5nZXQoXCJwaW5jaFwiKS5zZXQoeyBlbmFibGU6IHRydWUgfSk7XG5cbiAgICB0aGlzLmhhbW1lci5vbihcImhhbW1lci5pbnB1dFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5pc0ZpcnN0KSB7XG4gICAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJ0YXBcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFuc3RhcnRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFubW92ZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5lbmRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlIHRoZSBodWUgY2lyY2xlLiBUaGlzIGlzIHJlbGF0aXZlbHkgaGVhdnkgKDIwMG1zKSBhbmQgaXMgZG9uZSBvbmx5IG9uY2Ugb24gdGhlIGZpcnN0IHRpbWUgaXQgaXMgc2hvd24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2VuZXJhdGVIdWVDaXJjbGUoKSB7XG4gICAgaWYgKHRoaXMuZ2VuZXJhdGVkID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgY3R4ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICBpZiAodGhpcy5waXhlbFJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgICAoY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICBjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICAxKTtcbiAgICAgIH1cbiAgICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgICAvLyBjbGVhciB0aGUgY2FudmFzXG4gICAgICBjb25zdCB3ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG5cbiAgICAgIC8vIGRyYXcgaHVlIGNpcmNsZVxuICAgICAgbGV0IHgsIHksIGh1ZSwgc2F0O1xuICAgICAgdGhpcy5jZW50ZXJDb29yZGluYXRlcyA9IHsgeDogdyAqIDAuNSwgeTogaCAqIDAuNSB9O1xuICAgICAgdGhpcy5yID0gMC40OSAqIHc7XG4gICAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAoMiAqIE1hdGguUEkpIC8gMzYwO1xuICAgICAgY29uc3QgaGZhYyA9IDEgLyAzNjA7XG4gICAgICBjb25zdCBzZmFjID0gMSAvIHRoaXMucjtcbiAgICAgIGxldCByZ2I7XG4gICAgICBmb3IgKGh1ZSA9IDA7IGh1ZSA8IDM2MDsgaHVlKyspIHtcbiAgICAgICAgZm9yIChzYXQgPSAwOyBzYXQgPCB0aGlzLnI7IHNhdCsrKSB7XG4gICAgICAgICAgeCA9IHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHNhdCAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGh1ZSk7XG4gICAgICAgICAgeSA9IHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHNhdCAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGh1ZSk7XG4gICAgICAgICAgcmdiID0gSFNWVG9SR0IoaHVlICogaGZhYywgc2F0ICogc2ZhYywgMSk7XG4gICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiKFwiICsgcmdiLnIgKyBcIixcIiArIHJnYi5nICsgXCIsXCIgKyByZ2IuYiArIFwiKVwiO1xuICAgICAgICAgIGN0eC5maWxsUmVjdCh4IC0gMC41LCB5IC0gMC41LCAyLCAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCJyZ2JhKDAsMCwwLDEpXCI7XG4gICAgICBjdHguY2lyY2xlKHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCwgdGhpcy5jZW50ZXJDb29yZGluYXRlcy55LCB0aGlzLnIpO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICB0aGlzLmh1ZUNpcmNsZSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgdywgaCk7XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtb3ZlIHRoZSBzZWxlY3Rvci4gVGhpcyBpcyBjYWxsZWQgYnkgaGFtbWVyIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbW92ZVNlbGVjdG9yKGV2ZW50KSB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuY29sb3JQaWNrZXJEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbGVmdCA9IGV2ZW50LmNlbnRlci54IC0gcmVjdC5sZWZ0O1xuICAgIGNvbnN0IHRvcCA9IGV2ZW50LmNlbnRlci55IC0gcmVjdC50b3A7XG5cbiAgICBjb25zdCBjZW50ZXJZID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgY2VudGVyWCA9IDAuNSAqIHRoaXMuY29sb3JQaWNrZXJEaXYuY2xpZW50V2lkdGg7XG5cbiAgICBjb25zdCB4ID0gbGVmdCAtIGNlbnRlclg7XG4gICAgY29uc3QgeSA9IHRvcCAtIGNlbnRlclk7XG5cbiAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIoeCwgeSk7XG4gICAgY29uc3QgcmFkaXVzID0gMC45OCAqIE1hdGgubWluKE1hdGguc3FydCh4ICogeCArIHkgKiB5KSwgY2VudGVyWCk7XG5cbiAgICBjb25zdCBuZXdUb3AgPSBNYXRoLmNvcyhhbmdsZSkgKiByYWRpdXMgKyBjZW50ZXJZO1xuICAgIGNvbnN0IG5ld0xlZnQgPSBNYXRoLnNpbihhbmdsZSkgKiByYWRpdXMgKyBjZW50ZXJYO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICBuZXdUb3AgLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50SGVpZ2h0ICsgXCJweFwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIG5ld0xlZnQgLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBsZXQgaCA9IGFuZ2xlIC8gKDIgKiBNYXRoLlBJKTtcbiAgICBoID0gaCA8IDAgPyBoICsgMSA6IGg7XG4gICAgY29uc3QgcyA9IHJhZGl1cyAvIHRoaXMucjtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVih0aGlzLmNvbG9yLnIsIHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iKTtcbiAgICBoc3YuaCA9IGg7XG4gICAgaHN2LnMgPSBzO1xuICAgIGNvbnN0IHJnYmEgPSBIU1ZUb1JHQihoc3YuaCwgaHN2LnMsIGhzdi52KTtcbiAgICByZ2JhW1wiYVwiXSA9IHRoaXMuY29sb3IuYTtcbiAgICB0aGlzLmNvbG9yID0gcmdiYTtcblxuICAgIC8vIHVwZGF0ZSBwcmV2aWV3c1xuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG59O1xuXG4vKipcbiAqIFdyYXAgZ2l2ZW4gdGV4dCAobGFzdCBhcmd1bWVudCkgaW4gSFRNTCBlbGVtZW50cyAoYWxsIHByZWNlZGluZyBhcmd1bWVudHMpLlxuICpcbiAqIEBwYXJhbSB7Li4uYW55fSByZXN0IC0gTGlzdCBvZiB0YWcgbmFtZXMgZm9sbG93ZWQgYnkgaW5uZXIgdGV4dC5cbiAqIEByZXR1cm5zIEFuIGVsZW1lbnQgb3IgYSB0ZXh0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHdyYXBJblRhZyguLi5yZXN0KSB7XG4gIGlmIChyZXN0Lmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMuXCIpO1xuICB9IGVsc2UgaWYgKHJlc3QubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlc3RbMF0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJlc3RbMF0pO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQod3JhcEluVGFnKC4uLnJlc3Quc2xpY2UoMSkpKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB3YXkgdGhpcyB3b3JrcyBpcyBmb3IgYWxsIHByb3BlcnRpZXMgb2YgdGhpcy5wb3NzaWJsZSBvcHRpb25zLCB5b3UgY2FuIHN1cHBseSB0aGUgcHJvcGVydHkgbmFtZSBpbiBhbnkgZm9ybSB0byBsaXN0IHRoZSBvcHRpb25zLlxuICogQm9vbGVhbiBvcHRpb25zIGFyZSByZWNvZ25pc2VkIGFzIEJvb2xlYW5cbiAqIE51bWJlciBvcHRpb25zIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbZGVmYXVsdCB2YWx1ZSwgbWluIHZhbHVlLCBtYXggdmFsdWUsIHN0ZXBzaXplXVxuICogQ29sb3JzIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbJ2NvbG9yJywgJyNmZmZmZmYnXVxuICogU3RyaW5ncyB3aXRoIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbb3B0aW9uMSwgb3B0aW9uMiwgb3B0aW9uMywgLi5dXG4gKlxuICogVGhlIG9wdGlvbnMgYXJlIG1hdGNoZWQgd2l0aCB0aGVpciBjb3VudGVycGFydHMgaW4gZWFjaCBvZiB0aGUgbW9kdWxlcyBhbmQgdGhlIHZhbHVlcyB1c2VkIGluIHRoZSBjb25maWd1cmF0aW9uIGFyZVxuICovXG5sZXQgQ29uZmlndXJhdG9yJDEgPSBjbGFzcyBDb25maWd1cmF0b3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudE1vZHVsZSAgICAgICAgfCB0aGUgbG9jYXRpb24gd2hlcmUgcGFyZW50TW9kdWxlLnNldE9wdGlvbnMoKSBjYW4gYmUgY2FsbGVkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0Q29udGFpbmVyICAgIHwgdGhlIGRlZmF1bHQgY29udGFpbmVyIG9mIHRoZSBtb2R1bGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ3VyZU9wdGlvbnMgICAgfCB0aGUgZnVsbHkgY29uZmlndXJlZCBhbmQgcHJlZGVmaW5lZCBvcHRpb25zIHNldCBmb3VuZCBpbiBhbGxPcHRpb25zLmpzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaXhlbFJhdGlvICAgICAgICAgIHwgY2FudmFzIHBpeGVsIHJhdGlvXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhpZGVPcHRpb24gICAgICAgIHwgY3VzdG9tIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGhpZGUgb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50TW9kdWxlLFxuICAgIGRlZmF1bHRDb250YWluZXIsXG4gICAgY29uZmlndXJlT3B0aW9ucyxcbiAgICBwaXhlbFJhdGlvID0gMSxcbiAgICBoaWRlT3B0aW9uID0gKCkgPT4gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnRNb2R1bGU7XG4gICAgdGhpcy5jaGFuZ2VkT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuY29udGFpbmVyID0gZGVmYXVsdENvbnRhaW5lcjtcbiAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmhpZGVPcHRpb24gPSBoaWRlT3B0aW9uO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMucG9wdXBDb3VudGVyID0gMDtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBmaWx0ZXI6IHRydWUsXG4gICAgICBjb250YWluZXI6IHVuZGVmaW5lZCxcbiAgICAgIHNob3dCdXR0b246IHRydWUsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmNvbmZpZ3VyZU9wdGlvbnMgPSBjb25maWd1cmVPcHRpb25zO1xuICAgIHRoaXMubW9kdWxlT3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcbiAgICB0aGlzLnBvcHVwRGl2ID0ge307XG4gICAgdGhpcy5wb3B1cExpbWl0ID0gNTtcbiAgICB0aGlzLnBvcHVwSGlzdG9yeSA9IHt9O1xuICAgIHRoaXMuY29sb3JQaWNrZXIgPSBuZXcgQ29sb3JQaWNrZXIkMShwaXhlbFJhdGlvKTtcbiAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogcmVmcmVzaCBhbGwgb3B0aW9ucy5cbiAgICogQmVjYXVzZSBhbGwgbW9kdWxlcyBwYXJzZSB0aGVpciBvcHRpb25zIGJ5IHRoZW1zZWx2ZXMsIHdlIGp1c3QgdXNlIHRoZWlyIG9wdGlvbnMuIFdlIGNvcHkgdGhlbSBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmVzZXQgdGhlIHBvcHVwIGhpc3RvcnkgYmVjYXVzZSB0aGUgaW5kaWNlcyBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQuXG4gICAgICB0aGlzLnBvcHVwSGlzdG9yeSA9IHt9O1xuICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcblxuICAgICAgbGV0IGVuYWJsZWQgPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zLmpvaW4oKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb25zIGNhbm5vdCBiZSBudWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnNob3dCdXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93QnV0dG9uID0gb3B0aW9ucy5zaG93QnV0dG9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSB0cnVlO1xuICAgICAgICBlbmFibGVkID0gb3B0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucztcbiAgICAgICAgZW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgfVxuICAgIHRoaXMuX2NsZWFuKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG1vZHVsZU9wdGlvbnNcbiAgICovXG4gIHNldE1vZHVsZU9wdGlvbnMobW9kdWxlT3B0aW9ucykge1xuICAgIHRoaXMubW9kdWxlT3B0aW9ucyA9IG1vZHVsZU9wdGlvbnM7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLl9jbGVhbigpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMub3B0aW9ucy5jb250YWluZXI7XG4gICAgICB9XG4gICAgICB0aGlzLl9jcmVhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG5cbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCBjb3VudGVyID0gMDtcbiAgICBsZXQgc2hvdyA9IGZhbHNlO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIGluIHRoaXMuY29uZmlndXJlT3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnMsIG9wdGlvbikpIHtcbiAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgIHNob3cgPSBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIob3B0aW9uLCBbXSk7XG4gICAgICAgICAgc2hvdyA9XG4gICAgICAgICAgICBzaG93IHx8XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIgPT09IHRydWUgfHwgZmlsdGVyLmluZGV4T2Yob3B0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICBzaG93ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IHRydWU7XG5cbiAgICAgICAgICAvLyBsaW5lYnJlYWsgYmV0d2VlbiBjYXRlZ29yaWVzXG4gICAgICAgICAgaWYgKGNvdW50ZXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShbXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGEgaGVhZGVyIGZvciB0aGUgY2F0ZWdvcnlcbiAgICAgICAgICB0aGlzLl9tYWtlSGVhZGVyKG9wdGlvbik7XG5cbiAgICAgICAgICAvLyBnZXQgdGhlIHN1YiBvcHRpb25zXG4gICAgICAgICAgdGhpcy5faGFuZGxlT2JqZWN0KHRoaXMuY29uZmlndXJlT3B0aW9uc1tvcHRpb25dLCBbb3B0aW9uXSk7XG4gICAgICAgIH1cbiAgICAgICAgY291bnRlcisrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9tYWtlQnV0dG9uKCk7XG4gICAgdGhpcy5fcHVzaCgpO1xuICAgIC8vfiB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKHRoaXMuY29udGFpbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBkcmF3IGFsbCBET00gZWxlbWVudHMgb24gdGhlIHNjcmVlblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3B1c2goKSB7XG4gICAgdGhpcy53cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLndyYXBwZXIuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi13cmFwcGVyXCI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy53cmFwcGVyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zaG93UG9wdXBJZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBhbGwgRE9NIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndyYXBwZXIucmVtb3ZlQ2hpbGQodGhpcy5kb21FbGVtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud3JhcHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgICAgdGhpcy53cmFwcGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmRvbUVsZW1lbnRzID0gW107XG5cbiAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgYWN0dWFsT3B0aW9ucyBpZiBpdCBleGlzdHNcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFZhbHVlKHBhdGgpIHtcbiAgICBsZXQgYmFzZSA9IHRoaXMubW9kdWxlT3B0aW9ucztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChiYXNlW3BhdGhbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYmFzZSA9IGJhc2VbcGF0aFtpXV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cblxuICAvKipcbiAgICogYWxsIG9wdGlvbiBlbGVtZW50cyBhcmUgd3JhcHBlZCBpbiBhbiBpdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge0FycmF5LjxFbGVtZW50Pn0gZG9tRWxlbWVudHNcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlSXRlbShwYXRoLCAuLi5kb21FbGVtZW50cykge1xuICAgIGlmICh0aGlzLmFsbG93Q3JlYXRpb24gPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgaXRlbS5jbGFzc05hbWUgPVxuICAgICAgICBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctaXRlbSB2aXMtY29uZmlnLXNcIiArIHBhdGgubGVuZ3RoO1xuICAgICAgZG9tRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIGhlYWRlciBmb3IgbWFqb3Igc3ViamVjdHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlSGVhZGVyKG5hbWUpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctaGVhZGVyXCI7XG4gICAgZGl2LmlubmVyVGV4dCA9IG5hbWU7XG4gICAgdGhpcy5fbWFrZUl0ZW0oW10sIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGxhYmVsLCBpZiBpdCBpcyBhbiBvYmplY3QgbGFiZWwsIGl0IGdldHMgZGlmZmVyZW50IHN0eWxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2JqZWN0TGFiZWxcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VMYWJlbChuYW1lLCBwYXRoLCBvYmplY3RMYWJlbCA9IGZhbHNlKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkaXYuY2xhc3NOYW1lID1cbiAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1sYWJlbCB2aXMtY29uZmlnLXNcIiArIHBhdGgubGVuZ3RoO1xuICAgIGlmIChvYmplY3RMYWJlbCA9PT0gdHJ1ZSkge1xuICAgICAgd2hpbGUgKGRpdi5maXJzdENoaWxkKSB7XG4gICAgICAgIGRpdi5yZW1vdmVDaGlsZChkaXYuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICBkaXYuYXBwZW5kQ2hpbGQod3JhcEluVGFnKFwiaVwiLCBcImJcIiwgbmFtZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZSArIFwiOlwiO1xuICAgIH1cbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBkcm9wZG93biBsaXN0IGZvciBtdWx0aXBsZSBwb3NzaWJsZSBzdHJpbmcgb3B0b2luc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VEcm9wZG93bihhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKTtcbiAgICBzZWxlY3QuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXNlbGVjdFwiO1xuICAgIGxldCBzZWxlY3RlZFZhbHVlID0gMDtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGFyci5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGFyci5pbmRleE9mKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcbiAgICAgIG9wdGlvbi52YWx1ZSA9IGFycltpXTtcbiAgICAgIGlmIChpID09PSBzZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IFwic2VsZWN0ZWRcIjtcbiAgICAgIH1cbiAgICAgIG9wdGlvbi5pbm5lclRleHQgPSBhcnJbaV07XG4gICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgc2VsZWN0Lm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3VwZGF0ZSh0aGlzLnZhbHVlLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgc2VsZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgcmFuZ2Ugb2JqZWN0IGZvciBudW1lcmljIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYXJyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGFyclswXTtcbiAgICBjb25zdCBtaW4gPSBhcnJbMV07XG4gICAgY29uc3QgbWF4ID0gYXJyWzJdO1xuICAgIGNvbnN0IHN0ZXAgPSBhcnJbM107XG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgcmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlXCI7XG4gICAgdHJ5IHtcbiAgICAgIHJhbmdlLnR5cGUgPSBcInJhbmdlXCI7IC8vIG5vdCBzdXBwb3J0ZWQgb24gSUU5XG4gICAgICByYW5nZS5taW4gPSBtaW47XG4gICAgICByYW5nZS5tYXggPSBtYXg7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPOiBBZGQgc29tZSBlcnJvciBoYW5kbGluZy5cbiAgICB9XG4gICAgcmFuZ2Uuc3RlcCA9IHN0ZXA7XG5cbiAgICAvLyBzZXQgdXAgdGhlIHBvcHVwIHNldHRpbmdzIGluIGNhc2UgdGhleSBhcmUgbmVlZGVkLlxuICAgIGxldCBwb3B1cFN0cmluZyA9IFwiXCI7XG4gICAgbGV0IHBvcHVwVmFsdWUgPSAwO1xuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZhY3RvciA9IDEuMjtcbiAgICAgIGlmICh2YWx1ZSA8IDAgJiYgdmFsdWUgKiBmYWN0b3IgPCBtaW4pIHtcbiAgICAgICAgcmFuZ2UubWluID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1pbjtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAvIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgLyBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgKiBmYWN0b3IgPiBtYXggJiYgbWF4ICE9PSAxKSB7XG4gICAgICAgIHJhbmdlLm1heCA9IE1hdGguY2VpbCh2YWx1ZSAqIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5tYXg7XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIHJhbmdlLnZhbHVlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGlucHV0LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1yYW5nZWlucHV0XCI7XG4gICAgaW5wdXQudmFsdWUgPSByYW5nZS52YWx1ZTtcblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICByYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIG1lLl91cGRhdGUoTnVtYmVyKHRoaXMudmFsdWUpLCBwYXRoKTtcbiAgICB9O1xuICAgIHJhbmdlLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIHJhbmdlLCBpbnB1dCk7XG5cbiAgICAvLyBpZiBhIHBvcHVwIGlzIG5lZWRlZCBBTkQgaXQgaGFzIG5vdCBiZWVuIHNob3duIGZvciB0aGlzIHZhbHVlLCBzaG93IGl0LlxuICAgIGlmIChwb3B1cFN0cmluZyAhPT0gXCJcIiAmJiB0aGlzLnBvcHVwSGlzdG9yeVtpdGVtSW5kZXhdICE9PSBwb3B1cFZhbHVlKSB7XG4gICAgICB0aGlzLnBvcHVwSGlzdG9yeVtpdGVtSW5kZXhdID0gcG9wdXBWYWx1ZTtcbiAgICAgIHRoaXMuX3NldHVwUG9wdXAocG9wdXBTdHJpbmcsIGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBidXR0b24gb2JqZWN0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUJ1dHRvbigpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNob3dCdXR0b24gPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGdlbmVyYXRlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLmlubmVyVGV4dCA9IFwiZ2VuZXJhdGUgb3B0aW9uc1wiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24ub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcHJpbnRPcHRpb25zKCk7XG4gICAgICB9O1xuICAgICAgZ2VuZXJhdGVCdXR0b24ub25tb3VzZW92ZXIgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b24gaG92ZXJcIjtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3V0ID0gKCkgPT4ge1xuICAgICAgICBnZW5lcmF0ZUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctYnV0dG9uXCI7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5vcHRpb25zQ29udGFpbmVyLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1vcHRpb24tY29udGFpbmVyXCI7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaCh0aGlzLm9wdGlvbnNDb250YWluZXIpO1xuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKGdlbmVyYXRlQnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcHJlcGFyZSB0aGUgcG9wdXBcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXR1cFBvcHVwKHN0cmluZywgaW5kZXgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmluaXRpYWxpemVkID09PSB0cnVlICYmXG4gICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPT09IHRydWUgJiZcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyIDwgdGhpcy5wb3B1cExpbWl0XG4gICAgKSB7XG4gICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZGl2LmlkID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24tcG9wdXBcIjtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBzdHJpbmc7XG4gICAgICBkaXYub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnBvcHVwQ291bnRlciArPSAxO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHsgaHRtbDogZGl2LCBpbmRleDogaW5kZXggfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcmVtb3ZlIHRoZSBwb3B1cCBmcm9tIHRoZSBkb21cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVQb3B1cCgpIHtcbiAgICBpZiAodGhpcy5wb3B1cERpdi5odG1sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9wdXBEaXYuaHRtbCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cERpdi5kZWxldGVUaW1lb3V0KTtcbiAgICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgaWYgaXQgaXMgbmVlZGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Nob3dQb3B1cElmTmVlZGVkKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29ycmVzcG9uZGluZ0VsZW1lbnQgPSB0aGlzLmRvbUVsZW1lbnRzW3RoaXMucG9wdXBEaXYuaW5kZXhdO1xuICAgICAgY29uc3QgcmVjdCA9IGNvcnJlc3BvbmRpbmdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyBcInB4XCI7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUudG9wID0gcmVjdC50b3AgLSAzMCArIFwicHhcIjsgLy8gMzAgaXMgdGhlIGhlaWdodDtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuaGlkZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgICAgfSwgMTUwMCk7XG4gICAgICB0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcbiAgICAgIH0sIDE4MDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY2hlY2tib3ggZm9yIGJvb2xlYW4gb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNoZWNrYm94KGRlZmF1bHRWYWx1ZSwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBjaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBjaGVja2JveC50eXBlID0gXCJjaGVja2JveFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jaGVja2JveFwiO1xuICAgIGNoZWNrYm94LmNoZWNrZWQgPSBkZWZhdWx0VmFsdWU7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY2hlY2tib3gub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMuY2hlY2tlZCwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgdGV4dCBpbnB1dCBmaWVsZCBmb3Igc3RyaW5nIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWZhdWx0VmFsdWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VUZXh0SW5wdXQoZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcInRleHRcIjtcbiAgICBjaGVja2JveC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctdGV4dFwiO1xuICAgIGNoZWNrYm94LnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY2hlY2tib3gub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBjaGVja2JveCk7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGNvbG9yIGZpZWxkIHdpdGggYSBjb2xvciBwaWNrZXIgZm9yIGNvbG9yIGZpZWxkc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VDb2xvckZpZWxkKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29sb3IgPSBhcnJbMV07XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBkZWZhdWx0Q29sb3IgOiB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAhPT0gXCJub25lXCIpIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9ja1wiO1xuICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNvbG9yQmxvY2sgbm9uZVwiO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBkaXYpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgdGhlIGNvbG9yIGJ1dHRvbnMgdG8gY2FsbCB0aGUgY29sb3IgcGlja2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZGl2XG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKSB7XG4gICAgLy8gY2xlYXIgdGhlIGNhbGxiYWNrIGZyb20gdGhpcyBkaXZcbiAgICBkaXYub25jbGljayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgdGhpcy5jb2xvclBpY2tlci5pbnNlcnRUbyhkaXYpO1xuICAgIHRoaXMuY29sb3JQaWNrZXIuc2hvdygpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRDb2xvcih2YWx1ZSk7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRVcGRhdGVDYWxsYmFjaygoY29sb3IpID0+IHtcbiAgICAgIGNvbnN0IGNvbG9yU3RyaW5nID1cbiAgICAgICAgXCJyZ2JhKFwiICsgY29sb3IuciArIFwiLFwiICsgY29sb3IuZyArIFwiLFwiICsgY29sb3IuYiArIFwiLFwiICsgY29sb3IuYSArIFwiKVwiO1xuICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yU3RyaW5nO1xuICAgICAgdGhpcy5fdXBkYXRlKGNvbG9yU3RyaW5nLCBwYXRoKTtcbiAgICB9KTtcblxuICAgIC8vIG9uIGNsb3NlIG9mIHRoZSBjb2xvcnBpY2tlciwgcmVzdG9yZSB0aGUgY2FsbGJhY2suXG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRDbG9zZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHBhcnNlIGFuIG9iamVjdCBhbmQgZHJhdyB0aGUgY29ycmVjdCBpdGVtc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtwYXRoPVtdXSAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrT25seT1mYWxzZV1cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGFuZGxlT2JqZWN0KG9iaiwgcGF0aCA9IFtdLCBjaGVja09ubHkgPSBmYWxzZSkge1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5vcHRpb25zLmZpbHRlcjtcbiAgICBsZXQgdmlzaWJsZUluU2V0ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBzdWJPYmogaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgc3ViT2JqKSkge1xuICAgICAgICBzaG93ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaXRlbSA9IG9ialtzdWJPYmpdO1xuICAgICAgICBjb25zdCBuZXdQYXRoID0gY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIHN1Yk9iaik7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBzaG93ID0gZmlsdGVyKHN1Yk9iaiwgcGF0aCk7XG5cbiAgICAgICAgICAvLyBpZiBuZWVkZWQgd2UgbXVzdCBnbyBkZWVwZXIgaW50byB0aGUgb2JqZWN0LlxuICAgICAgICAgIGlmIChzaG93ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShpdGVtKSAmJlxuICAgICAgICAgICAgICB0eXBlb2YgaXRlbSAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICB0eXBlb2YgaXRlbSAhPT0gXCJib29sZWFuXCIgJiZcbiAgICAgICAgICAgICAgaXRlbSBpbnN0YW5jZW9mIE9iamVjdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICBzaG93ID0gdGhpcy5faGFuZGxlT2JqZWN0KGl0ZW0sIG5ld1BhdGgsIHRydWUpO1xuICAgICAgICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBjaGVja09ubHkgPT09IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHZpc2libGVJblNldCA9IHRydWU7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZShuZXdQYXRoKTtcblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBcnJheShpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZVRleHRJbnB1dChpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VDaGVja2JveChpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBza2lwIHRoZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBlbmFibGVkXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGlkZU9wdGlvbihwYXRoLCBzdWJPYmosIHRoaXMubW9kdWxlT3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgLy8gaW5pdGlhbGx5IGNvbGxhcHNlIG9wdGlvbnMgd2l0aCBhbiBkaXNhYmxlZCBlbmFibGVkIG9wdGlvbi5cbiAgICAgICAgICAgICAgaWYgKGl0ZW0uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFBhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkobmV3UGF0aCwgXCJlbmFibGVkXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuYWJsZWRWYWx1ZSA9IHRoaXMuX2dldFZhbHVlKGVuYWJsZWRQYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZFZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChzdWJPYmosIG5ld1BhdGgsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUl0ZW0obmV3UGF0aCwgbGFiZWwpO1xuICAgICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlT2JqZWN0KGl0ZW0sIG5ld1BhdGgpIHx8IHZpc2libGVJblNldDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIGVuYWJsZWRWYWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFrZUl0ZW0obmV3UGF0aCwgbGFiZWwpO1xuICAgICAgICAgICAgICAgIHZpc2libGVJblNldCA9XG4gICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJkb250IGtub3cgaG93IHRvIGhhbmRsZVwiLCBpdGVtLCBzdWJPYmosIG5ld1BhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZUluU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSB0aGUgYXJyYXkgdHlwZSBvZiBvcHRpb25cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYXJyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVBcnJheShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHR5cGVvZiBhcnJbMF0gPT09IFwic3RyaW5nXCIgJiYgYXJyWzBdID09PSBcImNvbG9yXCIpIHtcbiAgICAgIHRoaXMuX21ha2VDb2xvckZpZWxkKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclsxXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5fbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclswXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdGhpcy5fbWFrZVJhbmdlKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclswXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IE51bWJlcih2YWx1ZSkgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxlZCB0byB1cGRhdGUgdGhlIG5ldHdvcmsgd2l0aCB0aGUgbmV3IHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlKHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2NvbnN0cnVjdE9wdGlvbnModmFsdWUsIHBhdGgpO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5wYXJlbnQuYm9keSAmJlxuICAgICAgdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdFxuICAgICkge1xuICAgICAgdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyLmVtaXQoXCJjb25maWdDaGFuZ2VcIiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMucGFyZW50LnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBib29sZWFufSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBwYXJhbSB7e319IG9wdGlvbnNPYmpcbiAgICogQHJldHVybnMge3t9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbnN0cnVjdE9wdGlvbnModmFsdWUsIHBhdGgsIG9wdGlvbnNPYmogPSB7fSkge1xuICAgIGxldCBwb2ludGVyID0gb3B0aW9uc09iajtcblxuICAgIC8vIHdoZW4gZHJvcGRvd24gYm94ZXMgY2FuIGJlIHN0cmluZyBvciBib29sZWFuLCB3ZSB0eXBlY2FzdCBpdCBpbnRvIGNvcnJlY3QgdHlwZXNcbiAgICB2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiA/IHRydWUgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHZhbHVlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGF0aFtpXSAhPT0gXCJnbG9iYWxcIikge1xuICAgICAgICBpZiAocG9pbnRlcltwYXRoW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcG9pbnRlcltwYXRoW2ldXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpICE9PSBwYXRoLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBwb2ludGVyID0gcG9pbnRlcltwYXRoW2ldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnNPYmo7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcmludE9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuXG4gICAgd2hpbGUgKHRoaXMub3B0aW9uc0NvbnRhaW5lci5maXJzdENoaWxkKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuYXBwZW5kQ2hpbGQoXG4gICAgICB3cmFwSW5UYWcoXCJwcmVcIiwgXCJjb25zdCBvcHRpb25zID0gXCIgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zLCBudWxsLCAyKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHt7fX0gb3B0aW9uc1xuICAgKi9cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoYW5nZWRPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLl9jb25zdHJ1Y3RPcHRpb25zKFxuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zW2ldLnZhbHVlLFxuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zW2ldLnBhdGgsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG59O1xuXG4vKipcbiAqIFBvcHVwIGlzIGEgY2xhc3MgdG8gY3JlYXRlIGEgcG9wdXAgd2luZG93IHdpdGggc29tZSB0ZXh0XG4gKi9cbmxldCBQb3B1cCQxID0gY2xhc3MgUG9wdXAge1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXIgICAgICAgVGhlIGNvbnRhaW5lciBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgb3ZlcmZsb3dNZXRob2QgIEhvdyB0aGUgcG9wdXAgc2hvdWxkIGFjdCB0byBvdmVyZmxvd2luZyAoJ2ZsaXAnIG9yICdjYXAnKVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCBvdmVyZmxvd01ldGhvZCkge1xuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMub3ZlcmZsb3dNZXRob2QgPSBvdmVyZmxvd01ldGhvZCB8fCBcImNhcFwiO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xuICAgIHRoaXMucGFkZGluZyA9IDU7XG4gICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgZnJhbWVcbiAgICB0aGlzLmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmZyYW1lLmNsYXNzTmFtZSA9IFwidmlzLXRvb2x0aXBcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCAgIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKiBAcGFyYW0ge251bWJlcn0geSAgIFZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIHNldFBvc2l0aW9uKHgsIHkpIHtcbiAgICB0aGlzLnggPSBwYXJzZUludCh4KTtcbiAgICB0aGlzLnkgPSBwYXJzZUludCh5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbnRlbnQgZm9yIHRoZSBwb3B1cCB3aW5kb3cuIFRoaXMgY2FuIGJlIEhUTUwgY29kZSBvciB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEVsZW1lbnR9IGNvbnRlbnRcbiAgICovXG4gIHNldFRleHQoY29udGVudCkge1xuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgd2hpbGUgKHRoaXMuZnJhbWUuZmlyc3RDaGlsZCkge1xuICAgICAgICB0aGlzLmZyYW1lLnJlbW92ZUNoaWxkKHRoaXMuZnJhbWUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdHJpbmcgY29udGFpbmluZyBsaXRlcmFsIHRleHQsIGVsZW1lbnQgaGFzIHRvIGJlIHVzZWQgZm9yIEhUTUwgZHVlIHRvXG4gICAgICAvLyBYU1Mgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGlubmVySFRNTCAoaS5lLiBwcmV2ZW50IFhTUyBieSBhY2NpZGVudCkuXG4gICAgICB0aGlzLmZyYW1lLmlubmVyVGV4dCA9IGNvbnRlbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIHBvcHVwIHdpbmRvd1xuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkb1Nob3ddICAgIFNob3cgb3IgaGlkZSB0aGUgd2luZG93XG4gICAqL1xuICBzaG93KGRvU2hvdykge1xuICAgIGlmIChkb1Nob3cgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZG9TaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZG9TaG93ID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmZyYW1lLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5mcmFtZS5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZnJhbWUucGFyZW50Tm9kZS5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuZnJhbWUucGFyZW50Tm9kZS5jbGllbnRXaWR0aDtcblxuICAgICAgbGV0IGxlZnQgPSAwLFxuICAgICAgICB0b3AgPSAwO1xuXG4gICAgICBpZiAodGhpcy5vdmVyZmxvd01ldGhvZCA9PSBcImZsaXBcIikge1xuICAgICAgICBsZXQgaXNMZWZ0ID0gZmFsc2UsXG4gICAgICAgICAgaXNUb3AgPSB0cnVlOyAvLyBXaGVyZSBhcm91bmQgdGhlIHBvc2l0aW9uIGl0J3MgbG9jYXRlZFxuXG4gICAgICAgIGlmICh0aGlzLnkgLSBoZWlnaHQgPCB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICBpc1RvcCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMueCArIHdpZHRoID4gbWF4V2lkdGggLSB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICBpc0xlZnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTGVmdCkge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLnggLSB3aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZWZ0ID0gdGhpcy54O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVG9wKSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55IC0gaGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvcCA9IHRoaXMueTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gdGhpcy55IC0gaGVpZ2h0O1xuICAgICAgICBpZiAodG9wICsgaGVpZ2h0ICsgdGhpcy5wYWRkaW5nID4gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgdG9wID0gbWF4SGVpZ2h0IC0gaGVpZ2h0IC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3AgPCB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBsZWZ0ID0gdGhpcy54O1xuICAgICAgICBpZiAobGVmdCArIHdpZHRoICsgdGhpcy5wYWRkaW5nID4gbWF4V2lkdGgpIHtcbiAgICAgICAgICBsZWZ0ID0gbWF4V2lkdGggLSB3aWR0aCAtIHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVmdCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS5sZWZ0ID0gbGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gdG9wICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG4gICAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGlkZSB0aGUgcG9wdXAgd2luZG93XG4gICAqL1xuICBoaWRlKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICB0aGlzLmZyYW1lLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5mcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZnJhbWUpOyAvLyBSZW1vdmUgZWxlbWVudCBmcm9tIERPTVxuICB9XG59O1xuXG5sZXQgZXJyb3JGb3VuZCA9IGZhbHNlO1xubGV0IGFsbE9wdGlvbnM7XG5cbmNvbnN0IFZBTElEQVRPUl9QUklOVF9TVFlMRSQxID0gXCJiYWNrZ3JvdW5kOiAjRkZlZWVlOyBjb2xvcjogI2RkMDAwMFwiO1xuXG4vKipcbiAqICBVc2VkIHRvIHZhbGlkYXRlIG9wdGlvbnMuXG4gKi9cbmxldCBWYWxpZGF0b3IkMSA9IGNsYXNzIFZhbGlkYXRvciB7XG4gIC8qKlxuICAgKiBNYWluIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gcmVmZXJlbmNlT3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gc3ViT2JqZWN0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGUob3B0aW9ucywgcmVmZXJlbmNlT3B0aW9ucywgc3ViT2JqZWN0KSB7XG4gICAgZXJyb3JGb3VuZCA9IGZhbHNlO1xuICAgIGFsbE9wdGlvbnMgPSByZWZlcmVuY2VPcHRpb25zO1xuICAgIGxldCB1c2VkT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgaWYgKHN1Yk9iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1c2VkT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnNbc3ViT2JqZWN0XTtcbiAgICB9XG4gICAgVmFsaWRhdG9yLnBhcnNlKG9wdGlvbnMsIHVzZWRPcHRpb25zLCBbXSk7XG4gICAgcmV0dXJuIGVycm9yRm91bmQ7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCB0cmF2ZXJzZSBhbiBvYmplY3QgcmVjdXJzaXZlbHkgYW5kIGNoZWNrIGV2ZXJ5IHZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcGFyc2Uob3B0aW9ucywgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCkge1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICBWYWxpZGF0b3IuY2hlY2sob3B0aW9uLCBvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZXZlcnkgdmFsdWUuIElmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QsIGNhbGwgdGhlIHBhcnNlIGZ1bmN0aW9uIG9uIHRoYXQgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgY2hlY2sob3B0aW9uLCBvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgaWYgKFxuICAgICAgcmVmZXJlbmNlT3B0aW9uc1tvcHRpb25dID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMuX19hbnlfXyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBWYWxpZGF0b3IuZ2V0U3VnZ2VzdGlvbihvcHRpb24sIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZWZlcmVuY2VPcHRpb24gPSBvcHRpb247XG4gICAgbGV0IGlzX29iamVjdCA9IHRydWU7XG5cbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgb25seSB0cmlnZ2VycyBpZiB0aGUgX19hbnlfXyBpcyBpbiB0aGUgdG9wIGxldmVsIG9mIHRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgIC8vICAgICAgIFRIQVQnUyBBIFJFQUxMWSBCQUQgUExBQ0UgVE8gQUxMT1cgSVQhISEhXG4gICAgICAvLyBUT0RPOiBFeGFtaW5lIGlmIG5lZWRlZCwgcmVtb3ZlIGlmIHBvc3NpYmxlXG5cbiAgICAgIC8vIF9fYW55X18gaXMgYSB3aWxkY2FyZC4gQW55IHZhbHVlIGlzIGFjY2VwdGVkIGFuZCB3aWxsIGJlIGZ1cnRoZXIgYW5hbHlzZWQgYnkgcmVmZXJlbmNlLlxuICAgICAgcmVmZXJlbmNlT3B0aW9uID0gXCJfX2FueV9fXCI7XG5cbiAgICAgIC8vIGlmIHRoZSBhbnktc3ViZ3JvdXAgaXMgbm90IGEgcHJlZGVmaW5lZCBvYmplY3QgaW4gdGhlIGNvbmZpZ3VyYXRvcixcbiAgICAgIC8vIHdlIGRvIG5vdCBsb29rIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICBpc19vYmplY3QgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pID09PSBcIm9iamVjdFwiO1xuICAgIH1cblxuICAgIGxldCByZWZPcHRpb25PYmogPSByZWZlcmVuY2VPcHRpb25zW3JlZmVyZW5jZU9wdGlvbl07XG4gICAgaWYgKGlzX29iamVjdCAmJiByZWZPcHRpb25PYmouX190eXBlX18gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVmT3B0aW9uT2JqID0gcmVmT3B0aW9uT2JqLl9fdHlwZV9fO1xuICAgIH1cblxuICAgIFZhbGlkYXRvci5jaGVja0ZpZWxkcyhcbiAgICAgIG9wdGlvbixcbiAgICAgIG9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb25zLFxuICAgICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgICAgcmVmT3B0aW9uT2JqLFxuICAgICAgcGF0aFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvcHRpb24gICAgICAgICAgIHwgdGhlIG9wdGlvbiBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge29iamVjdH0gIG9wdGlvbnMgICAgICAgICAgfCBUaGUgc3VwcGxpZWQgb3B0aW9ucyBvYmplY3RcbiAgICogQHBhcmFtIHtvYmplY3R9ICByZWZlcmVuY2VPcHRpb25zIHwgVGhlIHJlZmVyZW5jZSBvcHRpb25zIGNvbnRhaW5pbmcgYWxsIG9wdGlvbnMgYW5kIHRoZWlyIGFsbG93ZWQgZm9ybWF0c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZmVyZW5jZU9wdGlvbiAgfCBVc3VhbGx5IHRoaXMgaXMgdGhlIHNhbWUgYXMgb3B0aW9uLCBleGNlcHQgd2hlbiBoYW5kbGluZyBhbiBfX2FueV9fIHRhZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICByZWZPcHRpb25PYmogICAgIHwgVGhpcyBpcyB0aGUgdHlwZSBvYmplY3QgZnJvbSB0aGUgcmVmZXJlbmNlIG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gICBwYXRoICAgICAgICAgICAgIHwgd2hlcmUgaW4gdGhlIG9iamVjdCBpcyB0aGUgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVja0ZpZWxkcyhcbiAgICBvcHRpb24sXG4gICAgb3B0aW9ucyxcbiAgICByZWZlcmVuY2VPcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbixcbiAgICByZWZPcHRpb25PYmosXG4gICAgcGF0aFxuICApIHtcbiAgICBjb25zdCBsb2cgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCIlY1wiICsgbWVzc2FnZSArIFZhbGlkYXRvci5wcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiksXG4gICAgICAgIFZBTElEQVRPUl9QUklOVF9TVFlMRSQxXG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25UeXBlID0gVmFsaWRhdG9yLmdldFR5cGUob3B0aW9uc1tvcHRpb25dKTtcbiAgICBjb25zdCByZWZPcHRpb25UeXBlID0gcmVmT3B0aW9uT2JqW29wdGlvblR5cGVdO1xuXG4gICAgaWYgKHJlZk9wdGlvblR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaWYgdGhlIHR5cGUgaXMgY29ycmVjdCwgd2UgY2hlY2sgaWYgaXQgaXMgc3VwcG9zZWQgdG8gYmUgb25lIG9mIGEgZmV3IHNlbGVjdCB2YWx1ZXNcbiAgICAgIGlmIChcbiAgICAgICAgVmFsaWRhdG9yLmdldFR5cGUocmVmT3B0aW9uVHlwZSkgPT09IFwiYXJyYXlcIiAmJlxuICAgICAgICByZWZPcHRpb25UeXBlLmluZGV4T2Yob3B0aW9uc1tvcHRpb25dKSA9PT0gLTFcbiAgICAgICkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgJ0ludmFsaWQgb3B0aW9uIGRldGVjdGVkIGluIFwiJyArXG4gICAgICAgICAgICBvcHRpb24gK1xuICAgICAgICAgICAgJ1wiLicgK1xuICAgICAgICAgICAgXCIgQWxsb3dlZCB2YWx1ZXMgYXJlOlwiICtcbiAgICAgICAgICAgIFZhbGlkYXRvci5wcmludChyZWZPcHRpb25UeXBlKSArXG4gICAgICAgICAgICAnIG5vdCBcIicgK1xuICAgICAgICAgICAgb3B0aW9uc1tvcHRpb25dICtcbiAgICAgICAgICAgICdcIi4gJ1xuICAgICAgICApO1xuICAgICAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9uVHlwZSA9PT0gXCJvYmplY3RcIiAmJiByZWZlcmVuY2VPcHRpb24gIT09IFwiX19hbnlfX1wiKSB7XG4gICAgICAgIHBhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgb3B0aW9uKTtcbiAgICAgICAgVmFsaWRhdG9yLnBhcnNlKFxuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSxcbiAgICAgICAgICByZWZlcmVuY2VPcHRpb25zW3JlZmVyZW5jZU9wdGlvbl0sXG4gICAgICAgICAgcGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVmT3B0aW9uT2JqW1wiYW55XCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHR5cGUgb2YgdGhlIGZpZWxkIGlzIGluY29ycmVjdCBhbmQgdGhlIGZpZWxkIGNhbm5vdCBiZSBhbnlcbiAgICAgIGxvZyhcbiAgICAgICAgJ0ludmFsaWQgdHlwZSByZWNlaXZlZCBmb3IgXCInICtcbiAgICAgICAgICBvcHRpb24gK1xuICAgICAgICAgICdcIi4gRXhwZWN0ZWQ6ICcgK1xuICAgICAgICAgIFZhbGlkYXRvci5wcmludChPYmplY3Qua2V5cyhyZWZPcHRpb25PYmopKSArXG4gICAgICAgICAgXCIuIFJlY2VpdmVkIFtcIiArXG4gICAgICAgICAgb3B0aW9uVHlwZSArXG4gICAgICAgICAgJ10gXCInICtcbiAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICdcIidcbiAgICAgICk7XG4gICAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3QgfCBib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgQXJyYXkuPG51bWJlcj4gfCBEYXRlIHwgTm9kZSB8IE1vbWVudCB8IHVuZGVmaW5lZCB8IG51bGx9IG9iamVjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgZ2V0VHlwZShvYmplY3QpIHtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcblxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZiAob2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIFwiZGF0ZVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdC5ub2RlVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBcImRvbVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdC5faXNBTW9tZW50T2JqZWN0ID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBcIm1vbWVudFwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwib2JqZWN0XCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcGF0aFxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgZ2V0U3VnZ2VzdGlvbihvcHRpb24sIG9wdGlvbnMsIHBhdGgpIHtcbiAgICBjb25zdCBsb2NhbFNlYXJjaCA9IFZhbGlkYXRvci5maW5kSW5PcHRpb25zKG9wdGlvbiwgb3B0aW9ucywgcGF0aCwgZmFsc2UpO1xuICAgIGNvbnN0IGdsb2JhbFNlYXJjaCA9IFZhbGlkYXRvci5maW5kSW5PcHRpb25zKG9wdGlvbiwgYWxsT3B0aW9ucywgW10sIHRydWUpO1xuXG4gICAgY29uc3QgbG9jYWxTZWFyY2hUaHJlc2hvbGQgPSA4O1xuICAgIGNvbnN0IGdsb2JhbFNlYXJjaFRocmVzaG9sZCA9IDQ7XG5cbiAgICBsZXQgbXNnO1xuICAgIGlmIChsb2NhbFNlYXJjaC5pbmRleE1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1zZyA9XG4gICAgICAgIFwiIGluIFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uLCBcIlwiKSArXG4gICAgICAgICdQZXJoYXBzIGl0IHdhcyBpbmNvbXBsZXRlPyBEaWQgeW91IG1lYW46IFwiJyArXG4gICAgICAgIGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggK1xuICAgICAgICAnXCI/XFxuXFxuJztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZ2xvYmFsU2VhcmNoLmRpc3RhbmNlIDw9IGdsb2JhbFNlYXJjaFRocmVzaG9sZCAmJlxuICAgICAgbG9jYWxTZWFyY2guZGlzdGFuY2UgPiBnbG9iYWxTZWFyY2guZGlzdGFuY2VcbiAgICApIHtcbiAgICAgIG1zZyA9XG4gICAgICAgIFwiIGluIFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uLCBcIlwiKSArXG4gICAgICAgIFwiUGVyaGFwcyBpdCB3YXMgbWlzcGxhY2VkPyBNYXRjaGluZyBvcHRpb24gZm91bmQgYXQ6IFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24oXG4gICAgICAgICAgZ2xvYmFsU2VhcmNoLnBhdGgsXG4gICAgICAgICAgZ2xvYmFsU2VhcmNoLmNsb3Nlc3RNYXRjaCxcbiAgICAgICAgICBcIlwiXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChsb2NhbFNlYXJjaC5kaXN0YW5jZSA8PSBsb2NhbFNlYXJjaFRocmVzaG9sZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgJy4gRGlkIHlvdSBtZWFuIFwiJyArXG4gICAgICAgIGxvY2FsU2VhcmNoLmNsb3Nlc3RNYXRjaCArXG4gICAgICAgICdcIj8nICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIuIERpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U6IFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKG9wdGlvbnMpKSArXG4gICAgICAgIFZhbGlkYXRvci5wcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbik7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICclY1Vua25vd24gb3B0aW9uIGRldGVjdGVkOiBcIicgKyBvcHRpb24gKyAnXCInICsgbXNnLFxuICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICApO1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHRyYXZlcnNlIHRoZSBvcHRpb25zIGluIHNlYXJjaCBmb3IgYSBtYXRjaC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVjdXJzaXZlPWZhbHNlXVxuICAgKiBAcmV0dXJucyB7e2Nsb3Nlc3RNYXRjaDogc3RyaW5nLCBwYXRoOiBBcnJheSwgZGlzdGFuY2U6IG51bWJlcn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBmaW5kSW5PcHRpb25zKG9wdGlvbiwgb3B0aW9ucywgcGF0aCwgcmVjdXJzaXZlID0gZmFsc2UpIHtcbiAgICBsZXQgbWluID0gMWU5O1xuICAgIGxldCBjbG9zZXN0TWF0Y2ggPSBcIlwiO1xuICAgIGxldCBjbG9zZXN0TWF0Y2hQYXRoID0gW107XG4gICAgY29uc3QgbG93ZXJDYXNlT3B0aW9uID0gb3B0aW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgbGV0IGluZGV4TWF0Y2ggPSB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBvcCBpbiBvcHRpb25zKSB7XG4gICAgICBsZXQgZGlzdGFuY2U7XG4gICAgICBpZiAob3B0aW9uc1tvcF0uX190eXBlX18gIT09IHVuZGVmaW5lZCAmJiByZWN1cnNpdmUgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMoXG4gICAgICAgICAgb3B0aW9uLFxuICAgICAgICAgIG9wdGlvbnNbb3BdLFxuICAgICAgICAgIGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pbiA+IHJlc3VsdC5kaXN0YW5jZSkge1xuICAgICAgICAgIGNsb3Nlc3RNYXRjaCA9IHJlc3VsdC5jbG9zZXN0TWF0Y2g7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoUGF0aCA9IHJlc3VsdC5wYXRoO1xuICAgICAgICAgIG1pbiA9IHJlc3VsdC5kaXN0YW5jZTtcbiAgICAgICAgICBpbmRleE1hdGNoID0gcmVzdWx0LmluZGV4TWF0Y2g7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcC50b0xvd2VyQ2FzZSgpLmluZGV4T2YobG93ZXJDYXNlT3B0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICBpbmRleE1hdGNoID0gb3A7XG4gICAgICAgIH1cbiAgICAgICAgZGlzdGFuY2UgPSBWYWxpZGF0b3IubGV2ZW5zaHRlaW5EaXN0YW5jZShvcHRpb24sIG9wKTtcbiAgICAgICAgaWYgKG1pbiA+IGRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gb3A7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoUGF0aCA9IGNvcHlBcnJheShwYXRoKTtcbiAgICAgICAgICBtaW4gPSBkaXN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY2xvc2VzdE1hdGNoOiBjbG9zZXN0TWF0Y2gsXG4gICAgICBwYXRoOiBjbG9zZXN0TWF0Y2hQYXRoLFxuICAgICAgZGlzdGFuY2U6IG1pbixcbiAgICAgIGluZGV4TWF0Y2g6IGluZGV4TWF0Y2gsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcHJpbnRMb2NhdGlvbihwYXRoLCBvcHRpb24sIHByZWZpeCA9IFwiUHJvYmxlbSB2YWx1ZSBmb3VuZCBhdDogXFxuXCIpIHtcbiAgICBsZXQgc3RyID0gXCJcXG5cXG5cIiArIHByZWZpeCArIFwib3B0aW9ucyA9IHtcXG5cIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaSArIDE7IGorKykge1xuICAgICAgICBzdHIgKz0gXCIgIFwiO1xuICAgICAgfVxuICAgICAgc3RyICs9IHBhdGhbaV0gKyBcIjoge1xcblwiO1xuICAgIH1cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhdGgubGVuZ3RoICsgMTsgaisrKSB7XG4gICAgICBzdHIgKz0gXCIgIFwiO1xuICAgIH1cbiAgICBzdHIgKz0gb3B0aW9uICsgXCJcXG5cIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoICsgMTsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhdGgubGVuZ3RoIC0gaTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gXCJ9XFxuXCI7XG4gICAgfVxuICAgIHJldHVybiBzdHIgKyBcIlxcblxcblwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludChvcHRpb25zKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXG4gICAgICAucmVwbGFjZSgvKFwiKXwoXFxbKXwoXFxdKXwoLFwiX190eXBlX19cIikvZywgXCJcIilcbiAgICAgIC5yZXBsYWNlKC8oLCkvZywgXCIsIFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQ29tcHV0ZSB0aGUgZWRpdCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gc3RyaW5nc1xuICAgKiBodHRwOi8vZW4ud2lraWJvb2tzLm9yZy93aWtpL0FsZ29yaXRobV9JbXBsZW1lbnRhdGlvbi9TdHJpbmdzL0xldmVuc2h0ZWluX2Rpc3RhbmNlI0phdmFTY3JpcHRcbiAgICpcbiAgICogQ29weXJpZ2h0IChjKSAyMDExIEFuZHJlaSBNYWNrZW56aWVcbiAgICpcbiAgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAgICpcbiAgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gICAqXG4gICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBsZXZlbnNodGVpbkRpc3RhbmNlKGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggPT09IDApIHJldHVybiBiLmxlbmd0aDtcbiAgICBpZiAoYi5sZW5ndGggPT09IDApIHJldHVybiBhLmxlbmd0aDtcblxuICAgIGNvbnN0IG1hdHJpeCA9IFtdO1xuXG4gICAgLy8gaW5jcmVtZW50IGFsb25nIHRoZSBmaXJzdCBjb2x1bW4gb2YgZWFjaCByb3dcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hdHJpeFtpXSA9IFtpXTtcbiAgICB9XG5cbiAgICAvLyBpbmNyZW1lbnQgZWFjaCBjb2x1bW4gaW4gdGhlIGZpcnN0IHJvd1xuICAgIGxldCBqO1xuICAgIGZvciAoaiA9IDA7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgbWF0cml4WzBdW2pdID0gajtcbiAgICB9XG5cbiAgICAvLyBGaWxsIGluIHRoZSByZXN0IG9mIHRoZSBtYXRyaXhcbiAgICBmb3IgKGkgPSAxOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAoaiA9IDE7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoYi5jaGFyQXQoaSAtIDEpID09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtpIC0gMV1baiAtIDFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqIC0gMV0gKyAxLCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgICBtYXRyaXhbaV1baiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgIG1hdHJpeFtpIC0gMV1bal0gKyAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTsgLy8gZGVsZXRpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRyaXhbYi5sZW5ndGhdW2EubGVuZ3RoXTtcbiAgfVxufTtcblxuY29uc3QgQWN0aXZhdG9yID0gQWN0aXZhdG9yJDE7XHJcbmNvbnN0IENvbG9yUGlja2VyID0gQ29sb3JQaWNrZXIkMTtcclxuY29uc3QgQ29uZmlndXJhdG9yID0gQ29uZmlndXJhdG9yJDE7XHJcbmNvbnN0IEhhbW1lciA9IEhhbW1lciQxO1xyXG5jb25zdCBQb3B1cCA9IFBvcHVwJDE7XHJcbmNvbnN0IFZBTElEQVRPUl9QUklOVF9TVFlMRSA9IFZBTElEQVRPUl9QUklOVF9TVFlMRSQxO1xyXG5jb25zdCBWYWxpZGF0b3IgPSBWYWxpZGF0b3IkMTtcblxuZXhwb3J0IHsgQWN0aXZhdG9yLCBBbGVhLCBDb2xvclBpY2tlciwgQ29uZmlndXJhdG9yLCBERUxFVEUsIEhTVlRvSGV4LCBIU1ZUb1JHQiwgSGFtbWVyLCBQb3B1cCwgUkdCVG9IU1YsIFJHQlRvSGV4LCBWQUxJREFUT1JfUFJJTlRfU1RZTEUsIFZhbGlkYXRvciwgYWRkQ2xhc3NOYW1lLCBhZGRDc3NUZXh0LCBiaW5hcnlTZWFyY2hDdXN0b20sIGJpbmFyeVNlYXJjaFZhbHVlLCBicmlkZ2VPYmplY3QsIGNvcHlBbmRFeHRlbmRBcnJheSwgY29weUFycmF5LCBkZWVwRXh0ZW5kLCBkZWVwT2JqZWN0QXNzaWduLCBlYXNpbmdGdW5jdGlvbnMsIGVxdWFsQXJyYXksIGV4dGVuZCwgZmlsbElmRGVmaW5lZCwgZm9yRWFjaCwgZ2V0QWJzb2x1dGVMZWZ0LCBnZXRBYnNvbHV0ZVJpZ2h0LCBnZXRBYnNvbHV0ZVRvcCwgZ2V0U2Nyb2xsQmFyV2lkdGgsIGdldFRhcmdldCwgZ2V0VHlwZSwgaGFzUGFyZW50LCBoZXhUb0hTViwgaGV4VG9SR0IsIGluc2VydFNvcnQsIGlzRGF0ZSwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1N0cmluZywgaXNWYWxpZEhleCwgaXNWYWxpZFJHQiwgaXNWYWxpZFJHQkEsIG1lcmdlT3B0aW9ucywgb3B0aW9uLCBvdmVycmlkZU9wYWNpdHksIHBhcnNlQ29sb3IsIHByZXZlbnREZWZhdWx0LCBwdXJlRGVlcE9iamVjdEFzc2lnbiwgcmVjdXJzaXZlRE9NRGVsZXRlLCByZW1vdmVDbGFzc05hbWUsIHJlbW92ZUNzc1RleHQsIHNlbGVjdGl2ZUJyaWRnZU9iamVjdCwgc2VsZWN0aXZlRGVlcEV4dGVuZCwgc2VsZWN0aXZlRXh0ZW5kLCBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kLCB0aHJvdHRsZSwgdG9BcnJheSwgdG9wTW9zdCwgdXBkYXRlUHJvcGVydHkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZpcy11dGlsLmpzLm1hcFxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIG5hdGl2ZUNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYFJlZmxlY3QuY29uc3RydWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5jb25zdHJ1Y3Rcbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKG5hdGl2ZUNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG5cbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIG5hdGl2ZUNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbnZhciBGT1JDRUQgPSBORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRztcblxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogRk9SQ0VEIH0sIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUNvbnN0cnVjdG9yKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUNvbnN0cnVjdG9yKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIG5hdGl2ZUNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgYXBwbHkocHVzaCwgJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYXBwbHkoYmluZCwgVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0UHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gYXBwbHkoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LmNvbnN0cnVjdCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUmVmbGVjdC5jb25zdHJ1Y3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEZPUkNFRCA9ICFERVNDUklQVE9SUyB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0luZGV4ZWRPYmplY3QoaXQpLCBrZXkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbn07XG5cbmlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0pIGdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBrZXksIGRlc2NyaXB0b3I7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywga2V5ID0ga2V5c1tpbmRleCsrXSk7XG4gICAgICBpZiAoZGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKS5mO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzICE9PSBkZWZpbmVQcm9wZXJ0aWVzLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0aWVzOiBkZWZpbmVQcm9wZXJ0aWVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKFQsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQsIEQpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLnNoYW0pIGRlZmluZVByb3BlcnRpZXMuc2hhbSA9IHRydWU7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3QvY3JlYXRlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBzZXRQcm90b3R5cGVPZjogc2V0UHJvdG90eXBlT2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiaW1wb3J0IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIHZhciBfY29udGV4dDtcbiAgX3NldFByb3RvdHlwZU9mID0gX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YpLmNhbGwoX2NvbnRleHQpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwgImltcG9ydCBfT2JqZWN0JGNyZWF0ZSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanNcIjtcbmltcG9ydCBfT2JqZWN0JGRlZmluZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBfT2JqZWN0JGNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuIiwgImltcG9ydCBfT2JqZWN0JHNldFByb3RvdHlwZU9mIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanNcIjtcbmltcG9ydCBfYmluZEluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9iaW5kLmpzXCI7XG5pbXBvcnQgX09iamVjdCRnZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICB2YXIgX2NvbnRleHQ7XG4gIF9nZXRQcm90b3R5cGVPZiA9IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPyBfYmluZEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBfT2JqZWN0JGdldFByb3RvdHlwZU9mKS5jYWxsKF9jb250ZXh0KSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IF9PYmplY3QkZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59IiwgInZhciBfU3ltYm9sID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIik7XG52YXIgX1N5bWJvbCRpdGVyYXRvciA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzXCIpO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gKG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBfU3ltYm9sJGl0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBfU3ltYm9sICYmIG8gIT09IF9TeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpLCBfdHlwZW9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9mb3ItZWFjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0sgJiYgdHlwZW9mIHN0YWNrID09ICdzdHJpbmcnICYmICEkRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY2xlYXJFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyJyk7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUnKTtcblxuLy8gbm9uLXN0YW5kYXJkIFY4XG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXJyb3IsIEMsIHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICBpZiAoY2FwdHVyZVN0YWNrVHJhY2UpIGNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBDKTtcbiAgICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY2xlYXJFcnJvclN0YWNrKHN0YWNrLCBkcm9wRW50cmllcykpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgUmVzdWx0UHJvdG90eXBlID0gUmVzdWx0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX1JFQ09SRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19SRUNPUkQpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX1JFQ09SRCkge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGUuaXRlcmF0b3I7XG4gIH0gZWxzZSBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXRlcmFibGUpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZXJhYmxlKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbEZuKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSwgaXRlckZuKTtcbiAgfVxuXG4gIG5leHQgPSBJU19SRUNPUkQgPyBpdGVyYWJsZS5uZXh0IDogaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxGbihzdGVwLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCAkZGVmYXVsdCkge1xuICByZXR1cm4gYXJndW1lbnQgPT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gJycgOiAkZGVmYXVsdCA6IHRvU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgaW5zdGFsbEVycm9yQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZScpO1xudmFyIGluc3RhbGxFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBub3JtYWxpemVTdHJpbmdBcmd1bWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG52YXIgJEFnZ3JlZ2F0ZUVycm9yID0gZnVuY3Rpb24gQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBtZXNzYWdlIC8qICwgb3B0aW9ucyAqLykge1xuICB2YXIgaXNJbnN0YW5jZSA9IGlzUHJvdG90eXBlT2YoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIHRoaXMpO1xuICB2YXIgdGhhdDtcbiAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgdGhhdCA9IHNldFByb3RvdHlwZU9mKG5ldyAkRXJyb3IoKSwgaXNJbnN0YW5jZSA/IGdldFByb3RvdHlwZU9mKHRoaXMpIDogQWdncmVnYXRlRXJyb3JQcm90b3R5cGUpO1xuICB9IGVsc2Uge1xuICAgIHRoYXQgPSBpc0luc3RhbmNlID8gdGhpcyA6IGNyZWF0ZShBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsIFRPX1NUUklOR19UQUcsICdFcnJvcicpO1xuICB9XG4gIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnbWVzc2FnZScsIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KG1lc3NhZ2UpKTtcbiAgaW5zdGFsbEVycm9yU3RhY2sodGhhdCwgJEFnZ3JlZ2F0ZUVycm9yLCB0aGF0LnN0YWNrLCAxKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSBpbnN0YWxsRXJyb3JDYXVzZSh0aGF0LCBhcmd1bWVudHNbMl0pO1xuICB2YXIgZXJyb3JzQXJyYXkgPSBbXTtcbiAgaXRlcmF0ZShlcnJvcnMsIHB1c2gsIHsgdGhhdDogZXJyb3JzQXJyYXkgfSk7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnZXJyb3JzJywgZXJyb3JzQXJyYXkpO1xuICByZXR1cm4gdGhhdDtcbn07XG5cbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IpO1xuZWxzZSBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKCRBZ2dyZWdhdGVFcnJvciwgJEVycm9yLCB7IG5hbWU6IHRydWUgfSk7XG5cbnZhciBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSA9ICRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoJEVycm9yLnByb3RvdHlwZSwge1xuICBjb25zdHJ1Y3RvcjogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICRBZ2dyZWdhdGVFcnJvciksXG4gIG1lc3NhZ2U6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnJyksXG4gIG5hbWU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnQWdncmVnYXRlRXJyb3InKVxufSk7XG5cbi8vIGBBZ2dyZWdhdGVFcnJvcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWdncmVnYXRlLWVycm9yLWNvbnN0cnVjdG9yXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDIgfSwge1xuICBBZ2dyZWdhdGVFcnJvcjogJEFnZ3JlZ2F0ZUVycm9yXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbnZhciBzZXQgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBGdW5jdGlvbiA9IGdsb2JhbC5GdW5jdGlvbjtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgJGxvY2F0aW9uLCBkZWZlciwgY2hhbm5lbCwgcG9ydDtcblxuZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBEZW5vIHRocm93cyBhIFJlZmVyZW5jZUVycm9yIG9uIGBsb2NhdGlvbmAgYWNjZXNzIHdpdGhvdXQgYC0tbG9jYXRpb25gIGZsYWdcbiAgJGxvY2F0aW9uID0gZ2xvYmFsLmxvY2F0aW9uO1xufSk7XG5cbnZhciBydW4gPSBmdW5jdGlvbiAoaWQpIHtcbiAgaWYgKGhhc093bihxdWV1ZSwgaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcblxudmFyIHJ1bm5lciA9IGZ1bmN0aW9uIChpZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJ1bihpZCk7XG4gIH07XG59O1xuXG52YXIgZXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4oZXZlbnQuZGF0YSk7XG59O1xuXG52YXIgZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBvbGQgZW5naW5lcyBoYXZlIG5vdCBsb2NhdGlvbi5vcmlnaW5cbiAgZ2xvYmFsLnBvc3RNZXNzYWdlKFN0cmluZyhpZCksICRsb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyAkbG9jYXRpb24uaG9zdCk7XG59O1xuXG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldCB8fCAhY2xlYXIpIHtcbiAgc2V0ID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGhhbmRsZXIpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZm4gPSBpc0NhbGxhYmxlKGhhbmRsZXIpID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpO1xuICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhciA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChJU19OT0RFKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIC8vIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjI0XG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwgJiYgIUlTX0lPUykge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGV2ZW50TGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJlxuICAgIGlzQ2FsbGFibGUoZ2xvYmFsLnBvc3RNZXNzYWdlKSAmJlxuICAgICFnbG9iYWwuaW1wb3J0U2NyaXB0cyAmJlxuICAgICRsb2NhdGlvbiAmJiAkbG9jYXRpb24ucHJvdG9jb2wgIT09ICdmaWxlOicgJiZcbiAgICAhZmFpbHMoZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlcilcbiAgKSB7XG4gICAgZGVmZXIgPSBnbG9iYWxQb3N0TWVzc2FnZURlZmVyO1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZXZlbnRMaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bihpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQocnVubmVyKGlkKSwgMCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGNsZWFyOiBjbGVhclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUHJvdG90eXBlKSB7XG4gIGlmIChpc1Byb3RvdHlwZU9mKFByb3RvdHlwZSwgaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgaXNOdWxsT3JVbmRlZmluZWQoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFDb25zdHJ1Y3RvcihTKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IC8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhlYWQgPSBudWxsO1xuICB0aGlzLnRhaWwgPSBudWxsO1xufTtcblxuUXVldWUucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdmFyIGVudHJ5ID0geyBpdGVtOiBpdGVtLCBuZXh0OiBudWxsIH07XG4gICAgdmFyIHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgaWYgKHRhaWwpIHRhaWwubmV4dCA9IGVudHJ5O1xuICAgIGVsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgdGhpcy50YWlsID0gZW50cnk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbnRyeSA9IHRoaXMuaGVhZDtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHZhciBuZXh0ID0gdGhpcy5oZWFkID0gZW50cnkubmV4dDtcbiAgICAgIGlmIChuZXh0ID09PSBudWxsKSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgcmV0dXJuIGVudHJ5Lml0ZW07XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1ZXVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcXVldWUnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX0lPU19QRUJCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUnKTtcbnZhciBJU19XRUJPU19XRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLXdlYm9zLXdlYmtpdCcpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuLy8gTm9kZS5qcyAxMSBzaG93cyBFeHBlcmltZW50YWxXYXJuaW5nIG9uIGdldHRpbmcgYHF1ZXVlTWljcm90YXNrYFxudmFyIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdxdWV1ZU1pY3JvdGFzaycpO1xudmFyIG1pY3JvdGFzayA9IHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciAmJiBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWU7XG52YXIgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIW1pY3JvdGFzaykge1xuICB2YXIgcXVldWUgPSBuZXcgUXVldWUoKTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKElTX05PREUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoZm4gPSBxdWV1ZS5nZXQoKSkgdHJ5IHtcbiAgICAgIGZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIC8vIGFsc28gZXhjZXB0IFdlYk9TIFdlYmtpdCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODk4XG4gIGlmICghSVNfSU9TICYmICFJU19OT0RFICYmICFJU19XRUJPU19XRUJLSVQgJiYgTXV0YXRpb25PYnNlcnZlciAmJiBkb2N1bWVudCkge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKCFJU19JT1NfUEVCQkxFICYmIFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgLy8gd29ya2Fyb3VuZCBvZiBXZWJLaXQgfiBpT1MgU2FmYXJpIDEwLjEgYnVnXG4gICAgcHJvbWlzZS5jb25zdHJ1Y3RvciA9IFByb21pc2U7XG4gICAgdGhlbiA9IGJpbmQocHJvbWlzZS50aGVuLCBwcm9taXNlKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBOb2RlLmpzIHdpdGhvdXQgcHJvbWlzZXNcbiAgfSBlbHNlIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnZVxuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICAvLyBgd2VicGFja2AgZGV2IHNlcnZlciBidWcgb24gSUUgZ2xvYmFsIG1ldGhvZHMgLSB1c2UgYmluZChmbiwgZ2xvYmFsKVxuICAgIG1hY3JvdGFzayA9IGJpbmQobWFjcm90YXNrLCBnbG9iYWwpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hY3JvdGFzayhmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIG1pY3JvdGFzayA9IGZ1bmN0aW9uIChmbikge1xuICAgIGlmICghcXVldWUuaGVhZCkgbm90aWZ5KCk7XG4gICAgcXVldWUuYWRkKGZuKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtaWNyb3Rhc2s7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdCh1c2VyQWdlbnQpICYmIHR5cGVvZiBQZWJibGUgIT0gJ3VuZGVmaW5lZCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC93ZWIwcyg/IS4qY2hyb21lKS9pLnRlc3QodXNlckFnZW50KTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLlByb21pc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIERlbm8gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBEZW5vID09ICdvYmplY3QnICYmIERlbm8gJiYgdHlwZW9mIERlbm8udmVyc2lvbiA9PSAnb2JqZWN0JztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfREVOTyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtZGVubycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhSVNfREVOTyAmJiAhSVNfTk9ERVxuICAmJiB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnXG4gICYmIHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfQlJPV1NFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3NlcicpO1xudmFyIElTX0RFTk8gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8nKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFNVQkNMQVNTSU5HID0gZmFsc2U7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gaXNDYWxsYWJsZShnbG9iYWwuUHJvbWlzZVJlamVjdGlvbkV2ZW50KTtcblxudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gaXNGb3JjZWQoJ1Byb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSA9IGluc3BlY3RTb3VyY2UoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSAhPT0gU3RyaW5nKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gIC8vIFdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSN7IGNhdGNoLCBmaW5hbGx5IH0gaW4gdGhlIHB1cmUgdmVyc2lvbiBmb3IgcHJldmVudGluZyBwcm90b3R5cGUgcG9sbHV0aW9uXG4gIGlmIChJU19QVVJFICYmICEoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10pKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKCFWOF9WRVJTSU9OIHx8IFY4X1ZFUlNJT04gPCA1MSB8fCAhL25hdGl2ZSBjb2RlLy50ZXN0KFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFKSkge1xuICAgIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSBuZXcgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUoMSk7IH0pO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgICB9O1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICAgIFNVQkNMQVNTSU5HID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgICBpZiAoIVNVQkNMQVNTSU5HKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICB9IHJldHVybiAhR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiAoSVNfQlJPV1NFUiB8fCBJU19ERU5PKSAmJiAhTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDT05TVFJVQ1RPUjogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsXG4gIFJFSkVDVElPTl9FVkVOVDogTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5ULFxuICBTVUJDTEFTU0lORzogU1VCQ0xBU1NJTkdcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhQ2FsbGFibGUocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUNhbGxhYmxlKHJlamVjdCk7XG59O1xuXG4vLyBgTmV3UHJvbWlzZUNhcGFiaWxpdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uZXdwcm9taXNlY2FwYWJpbGl0eVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLkNPTlNUUlVDVE9SO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5SRUpFQ1RJT05fRVZFTlQ7XG52YXIgTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uU1VCQ0xBU1NJTkc7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvciA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcjtcbnZhciBQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG52YXIgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHk7XG5cbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcblxudmFyIEludGVybmFsLCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgUHJvbWlzZVdyYXBwZXIsIG5hdGl2ZVRoZW47XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIGlzQ2FsbGFibGUodGhlbiA9IGl0LnRoZW4pID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIGNhbGxSZWFjdGlvbiA9IGZ1bmN0aW9uIChyZWFjdGlvbiwgc3RhdGUpIHtcbiAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gIHZhciBvayA9IHN0YXRlLnN0YXRlID09PSBGVUxGSUxMRUQ7XG4gIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICB0cnkge1xuICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGlmIChzdGF0ZS5yZWplY3Rpb24gPT09IFVOSEFORExFRCkgb25IYW5kbGVVbmhhbmRsZWQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gY2FuIHRocm93XG4gICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgY2FsbCh0aGVuLCByZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICByZWplY3QoZXJyb3IpO1xuICB9XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWFjdGlvbnMgPSBzdGF0ZS5yZWFjdGlvbnM7XG4gICAgdmFyIHJlYWN0aW9uO1xuICAgIHdoaWxlIChyZWFjdGlvbiA9IHJlYWN0aW9ucy5nZXQoKSkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCAmJiAoaGFuZGxlciA9IGdsb2JhbFsnb24nICsgbmFtZV0pKSBoYW5kbGVyKGV2ZW50KTtcbiAgZWxzZSBpZiAobmFtZSA9PT0gVU5IQU5ETEVEX1JFSkVDVElPTikgaG9zdFJlcG9ydEVycm9ycygnVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgcmVhc29uKTtcbn07XG5cbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAoc3RhdGUuZmFjYWRlID09PSB2YWx1ZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGwodGhlbiwgdmFsdWUsXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVzb2x2ZSwgd3JhcHBlciwgc3RhdGUpLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlamVjdCwgd3JhcHBlciwgc3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpbnRlcm5hbFJlamVjdCh3cmFwcGVyLCBlcnJvciwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHN0YXRlLnN0YXRlID0gRlVMRklMTEVEO1xuICAgICAgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGludGVybmFsUmVqZWN0KHsgZG9uZTogZmFsc2UgfSwgZXJyb3IsIHN0YXRlKTtcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmIChGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUikge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICBhQ2FsbGFibGUoZXhlY3V0b3IpO1xuICAgIGNhbGwoSW50ZXJuYWwsIHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdChzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBQcm9taXNlUHJvdG90eXBlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIHR5cGU6IFBST01JU0UsXG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZmFsc2UsXG4gICAgICByZWFjdGlvbnM6IG5ldyBRdWV1ZSgpLFxuICAgICAgcmVqZWN0aW9uOiBmYWxzZSxcbiAgICAgIHN0YXRlOiBQRU5ESU5HLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gIEludGVybmFsLnByb3RvdHlwZSA9IGRlZmluZUJ1aWx0SW4oUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgcmVhY3Rpb24ub2sgPSBpc0NhbGxhYmxlKG9uRnVsZmlsbGVkKSA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICByZWFjdGlvbi5mYWlsID0gaXNDYWxsYWJsZShvblJlamVjdGVkKSAmJiBvblJlamVjdGVkO1xuICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc3RhdGUuc3RhdGUgPT09IFBFTkRJTkcpIHN0YXRlLnJlYWN0aW9ucy5hZGQocmVhY3Rpb24pO1xuICAgIGVsc2UgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICB9KTtcblxuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHByb21pc2UpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKTtcbiAgICB0aGlzLnJlamVjdCA9IGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKTtcbiAgfTtcblxuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSBQcm9taXNlQ29uc3RydWN0b3IgfHwgQyA9PT0gUHJvbWlzZVdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcblxuICBpZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBuYXRpdmVUaGVuID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZS50aGVuO1xuXG4gICAgaWYgKCFOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORykge1xuICAgICAgLy8gbWFrZSBgUHJvbWlzZSN0aGVuYCByZXR1cm4gYSBwb2x5ZmlsbGVkIGBQcm9taXNlYCBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgY2FsbChuYXRpdmVUaGVuLCB0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NDBcbiAgICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8vIG1ha2UgYC5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIHRyeSB7XG4gICAgICBkZWxldGUgTmF0aXZlUHJvbWlzZVByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICAvLyBtYWtlIGBpbnN0YW5jZW9mIFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIHNldFByb3RvdHlwZU9mKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIFByb21pc2U6IFByb21pc2VDb25zdHJ1Y3RvclxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSwgZmFsc2UsIHRydWUpO1xuc2V0U3BlY2llcyhQUk9NSVNFKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gc2FmZVxuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSkudGhlbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwoJHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmNhdGNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsIHJlYWw6IHRydWUgfSwge1xuICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgfVxufSk7XG5cbi8vIG1ha2VzIHN1cmUgdGhhdCBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzIGBQcm9taXNlI2NhdGNoYCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2NhdGNoJ107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICE9PSBtZXRob2QpIHtcbiAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICdjYXRjaCcsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5yYWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlamVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKHRoaXMpO1xuICAgIGNhbGwoY2FwYWJpbGl0eS5yZWplY3QsIHVuZGVmaW5lZCwgcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG5cbnZhciBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID0gZ2V0QnVpbHRJbignUHJvbWlzZScpO1xudmFyIENIRUNLX1dSQVBQRVIgPSBJU19QVVJFICYmICFGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVzb2x2ZVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQ0hFQ0tfV1JBUFBFUiAmJiB0aGlzID09PSBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID8gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxTZXR0bGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxzZXR0bGVkXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGxTZXR0bGVkOiBmdW5jdGlvbiBhbGxTZXR0bGVkKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdmdWxmaWxsZWQnLCB2YWx1ZTogdmFsdWUgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAncmVqZWN0ZWQnLCByZWFzb246IGVycm9yIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxudmFyIFBST01JU0VfQU5ZX0VSUk9SID0gJ05vIG9uZSBwcm9taXNlIHJlc29sdmVkJztcblxuLy8gYFByb21pc2UuYW55YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFueTogZnVuY3Rpb24gYW55KGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBBZ2dyZWdhdGVFcnJvciA9IGdldEJ1aWx0SW4oJ0FnZ3JlZ2F0ZUVycm9yJyk7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciBlcnJvcnMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgdmFyIGFscmVhZHlSZXNvbHZlZCA9IGZhbHNlO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeVJlamVjdGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5UmVqZWN0ZWQgfHwgYWxyZWFkeVJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeVJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGVycm9yc1tpbmRleF0gPSBlcnJvcjtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZWplY3QobmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgUFJPTUlTRV9BTllfRVJST1IpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBTYWZhcmkgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4MjlcbnZhciBOT05fR0VORVJJQyA9ICEhTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdGhlbmFibGUgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddLmNhbGwoeyB0aGVuOiBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmZpbmFsbHlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogTk9OX0dFTkVSSUMgfSwge1xuICAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBnZXRCdWlsdEluKCdQcm9taXNlJykpO1xuICAgIHZhciBpc0Z1bmN0aW9uID0gaXNDYWxsYWJsZShvbkZpbmFsbHkpO1xuICAgIHJldHVybiB0aGlzLnRoZW4oXG4gICAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseSxcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICAgIH0gOiBvbkZpbmFsbHlcbiAgICApO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjZmluYWxseWAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG5pZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpKSB7XG4gIHZhciBtZXRob2QgPSBnZXRCdWlsdEluKCdQcm9taXNlJykucHJvdG90eXBlWydmaW5hbGx5J107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2ZpbmFsbHknLCBtZXRob2QsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbnknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUHJvbWlzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxuLy8gYFByb21pc2Uud2l0aFJlc29sdmVyc2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXdpdGgtcmVzb2x2ZXJzXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUgfSwge1xuICB3aXRoUmVzb2x2ZXJzOiBmdW5jdGlvbiB3aXRoUmVzb2x2ZXJzKCkge1xuICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb21pc2U6IHByb21pc2VDYXBhYmlsaXR5LnByb21pc2UsXG4gICAgICByZXNvbHZlOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlLFxuICAgICAgcmVqZWN0OiBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3RcbiAgICB9O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3Byb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnByb21pc2Uud2l0aC1yZXNvbHZlcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcblxuLy8gYFByb21pc2UudHJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gICAgKHJlc3VsdC5lcnJvciA/IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvcHJvbWlzZScpO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LmFnZ3JlZ2F0ZS1lcnJvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnByb21pc2UuYW55Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9wcm9taXNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL3JldmVyc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3JldmVyc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIF9PYmplY3QkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIik7XG52YXIgX1N5bWJvbCA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCIpO1xudmFyIF9PYmplY3QkY3JlYXRlID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzXCIpO1xudmFyIF9PYmplY3QkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvZm9yLWVhY2guanNcIik7XG52YXIgX3B1c2hJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9wdXNoLmpzXCIpO1xudmFyIF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIF9Qcm9taXNlID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9wcm9taXNlL2luZGV4LmpzXCIpO1xudmFyIF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZS5qc1wiKTtcbnZhciBfc2xpY2VJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZS5qc1wiKTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBfT2JqZWN0JGRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uICh0LCBlLCByKSB7XG4gICAgICB0W2VdID0gci52YWx1ZTtcbiAgICB9LFxuICAgIGkgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgPyBfU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHQsIGUsIHtcbiAgICAgIHZhbHVlOiByLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIHRbZV07XG4gIH1cbiAgdHJ5IHtcbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICAgIHJldHVybiB0W2VdID0gcjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdyYXAodCwgZSwgciwgbikge1xuICAgIHZhciBpID0gZSAmJiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IGUgOiBHZW5lcmF0b3IsXG4gICAgICBhID0gX09iamVjdCRjcmVhdGUoaS5wcm90b3R5cGUpLFxuICAgICAgYyA9IG5ldyBDb250ZXh0KG4gfHwgW10pO1xuICAgIHJldHVybiBvKGEsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogbWFrZUludm9rZU1ldGhvZCh0LCByLCBjKVxuICAgIH0pLCBhO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKHQsIGUsIHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICAgICAgYXJnOiB0LmNhbGwoZSwgcilcbiAgICAgIH07XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IHRcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGUud3JhcCA9IHdyYXA7XG4gIHZhciBoID0gXCJzdXNwZW5kZWRTdGFydFwiLFxuICAgIGwgPSBcInN1c3BlbmRlZFlpZWxkXCIsXG4gICAgZiA9IFwiZXhlY3V0aW5nXCIsXG4gICAgcyA9IFwiY29tcGxldGVkXCIsXG4gICAgeSA9IHt9O1xuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cbiAgdmFyIHAgPSB7fTtcbiAgZGVmaW5lKHAsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIHZhciBkID0gX09iamVjdCRnZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHApO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHModCkge1xuICAgIHZhciBfY29udGV4dDtcbiAgICBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0pLmNhbGwoX2NvbnRleHQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkZWZpbmUodCwgZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShlLCB0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IodCwgZSkge1xuICAgIGZ1bmN0aW9uIGludm9rZShyLCBvLCBpLCBhKSB7XG4gICAgICB2YXIgYyA9IHRyeUNhdGNoKHRbcl0sIHQsIG8pO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gYy50eXBlKSB7XG4gICAgICAgIHZhciB1ID0gYy5hcmcsXG4gICAgICAgICAgaCA9IHUudmFsdWU7XG4gICAgICAgIHJldHVybiBoICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZihoKSAmJiBuLmNhbGwoaCwgXCJfX2F3YWl0XCIpID8gZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pIDogZS5yZXNvbHZlKGgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICB1LnZhbHVlID0gdCwgaSh1KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYShjLmFyZyk7XG4gICAgfVxuICAgIHZhciByO1xuICAgIG8odGhpcywgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh0LCBuKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgZShmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgaW52b2tlKHQsIG4sIGUsIHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByID0gciA/IHIudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGUsIHIsIG4pIHtcbiAgICB2YXIgbyA9IGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpLCBhKSB7XG4gICAgICBpZiAobyA9PT0gZikgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIGlmIChvID09PSBzKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IGkpIHRocm93IGE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IHQsXG4gICAgICAgICAgZG9uZTogITBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZvciAobi5tZXRob2QgPSBpLCBuLmFyZyA9IGE7Oykge1xuICAgICAgICB2YXIgYyA9IG4uZGVsZWdhdGU7XG4gICAgICAgIGlmIChjKSB7XG4gICAgICAgICAgdmFyIHUgPSBtYXliZUludm9rZURlbGVnYXRlKGMsIG4pO1xuICAgICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgICBpZiAodSA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwibmV4dFwiID09PSBuLm1ldGhvZCkgbi5zZW50ID0gbi5fc2VudCA9IG4uYXJnO2Vsc2UgaWYgKFwidGhyb3dcIiA9PT0gbi5tZXRob2QpIHtcbiAgICAgICAgICBpZiAobyA9PT0gaCkgdGhyb3cgbyA9IHMsIG4uYXJnO1xuICAgICAgICAgIG4uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpO1xuICAgICAgICB9IGVsc2UgXCJyZXR1cm5cIiA9PT0gbi5tZXRob2QgJiYgbi5hYnJ1cHQoXCJyZXR1cm5cIiwgbi5hcmcpO1xuICAgICAgICBvID0gZjtcbiAgICAgICAgdmFyIHAgPSB0cnlDYXRjaChlLCByLCBuKTtcbiAgICAgICAgaWYgKFwibm9ybWFsXCIgPT09IHAudHlwZSkge1xuICAgICAgICAgIGlmIChvID0gbi5kb25lID8gcyA6IGwsIHAuYXJnID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHAuYXJnLFxuICAgICAgICAgICAgZG9uZTogbi5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcInRocm93XCIgPT09IHAudHlwZSAmJiAobyA9IHMsIG4ubWV0aG9kID0gXCJ0aHJvd1wiLCBuLmFyZyA9IHAuYXJnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgcikge1xuICAgIHZhciBuID0gci5tZXRob2QsXG4gICAgICBvID0gZS5pdGVyYXRvcltuXTtcbiAgICBpZiAobyA9PT0gdCkgcmV0dXJuIHIuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG4gJiYgZS5pdGVyYXRvcltcInJldHVyblwiXSAmJiAoci5tZXRob2QgPSBcInJldHVyblwiLCByLmFyZyA9IHQsIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgciksIFwidGhyb3dcIiA9PT0gci5tZXRob2QpIHx8IFwicmV0dXJuXCIgIT09IG4gJiYgKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG4gKyBcIicgbWV0aG9kXCIpKSwgeTtcbiAgICB2YXIgaSA9IHRyeUNhdGNoKG8sIGUuaXRlcmF0b3IsIHIuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSBpLnR5cGUpIHJldHVybiByLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBpLmFyZywgci5kZWxlZ2F0ZSA9IG51bGwsIHk7XG4gICAgdmFyIGEgPSBpLmFyZztcbiAgICByZXR1cm4gYSA/IGEuZG9uZSA/IChyW2UucmVzdWx0TmFtZV0gPSBhLnZhbHVlLCByLm5leHQgPSBlLm5leHRMb2MsIFwicmV0dXJuXCIgIT09IHIubWV0aG9kICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCByLmRlbGVnYXRlID0gbnVsbCwgeSkgOiBhIDogKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeSh0KSB7XG4gICAgdmFyIF9jb250ZXh0MjtcbiAgICB2YXIgZSA9IHtcbiAgICAgIHRyeUxvYzogdFswXVxuICAgIH07XG4gICAgMSBpbiB0ICYmIChlLmNhdGNoTG9jID0gdFsxXSksIDIgaW4gdCAmJiAoZS5maW5hbGx5TG9jID0gdFsyXSwgZS5hZnRlckxvYyA9IHRbM10pLCBfcHVzaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQyID0gdGhpcy50cnlFbnRyaWVzKS5jYWxsKF9jb250ZXh0MiwgZSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeSh0KSB7XG4gICAgdmFyIGUgPSB0LmNvbXBsZXRpb24gfHwge307XG4gICAgZS50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIGUuYXJnLCB0LmNvbXBsZXRpb24gPSBlO1xuICB9XG4gIGZ1bmN0aW9uIENvbnRleHQodCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSh0KS5jYWxsKHQsIHB1c2hUcnlFbnRyeSwgdGhpcyksIHRoaXMucmVzZXQoITApO1xuICB9XG4gIGZ1bmN0aW9uIHZhbHVlcyhlKSB7XG4gICAgaWYgKGUgfHwgXCJcIiA9PT0gZSkge1xuICAgICAgdmFyIHIgPSBlW2FdO1xuICAgICAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLm5leHQpIHJldHVybiBlO1xuICAgICAgaWYgKCFpc05hTihlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIG8gPSAtMSxcbiAgICAgICAgICBpID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIGZvciAoOyArK28gPCBlLmxlbmd0aDspIGlmIChuLmNhbGwoZSwgbykpIHJldHVybiBuZXh0LnZhbHVlID0gZVtvXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBpLm5leHQgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF90eXBlb2YoZSkgKyBcIiBpcyBub3QgaXRlcmFibGVcIik7XG4gIH1cbiAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBvKGcsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBvKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHQgJiYgdC5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFlICYmIChlID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChlLmRpc3BsYXlOYW1lIHx8IGUubmFtZSkpO1xuICB9LCBlLm1hcmsgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX09iamVjdCRzZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKGcpLCB0O1xuICB9LCBlLmF3cmFwID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogdFxuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYywgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZS5hc3luYyA9IGZ1bmN0aW9uICh0LCByLCBuLCBvLCBpKSB7XG4gICAgdm9pZCAwID09PSBpICYmIChpID0gX1Byb21pc2UpO1xuICAgIHZhciBhID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcCh0LCByLCBuLCBvKSwgaSk7XG4gICAgcmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKSA/IGEgOiBhLm5leHQoKS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5kb25lID8gdC52YWx1ZSA6IGEubmV4dCgpO1xuICAgIH0pO1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoZyksIGRlZmluZShnLCB1LCBcIkdlbmVyYXRvclwiKSwgZGVmaW5lKGcsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGRlZmluZShnLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSksIGUua2V5cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBPYmplY3QodCksXG4gICAgICByID0gW107XG4gICAgZm9yICh2YXIgbiBpbiBlKSBfcHVzaEluc3RhbmNlUHJvcGVydHkocikuY2FsbChyLCBuKTtcbiAgICByZXR1cm4gX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5KHIpLmNhbGwociksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsgci5sZW5ndGg7KSB7XG4gICAgICAgIHZhciB0ID0gci5wb3AoKTtcbiAgICAgICAgaWYgKHQgaW4gZSkgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICB9O1xuICB9LCBlLnZhbHVlcyA9IHZhbHVlcywgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGUpIHtcbiAgICAgIHZhciBfY29udGV4dDM7XG4gICAgICBpZiAodGhpcy5wcmV2ID0gMCwgdGhpcy5uZXh0ID0gMCwgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB0LCBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQzID0gdGhpcy50cnlFbnRyaWVzKS5jYWxsKF9jb250ZXh0MywgcmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtfc2xpY2VJbnN0YW5jZVByb3BlcnR5KHIpLmNhbGwociwgMSkpICYmICh0aGlzW3JdID0gdCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgdCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZSkge1xuICAgICAgaWYgKHRoaXMuZG9uZSkgdGhyb3cgZTtcbiAgICAgIHZhciByID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShuLCBvKSB7XG4gICAgICAgIHJldHVybiBhLnR5cGUgPSBcInRocm93XCIsIGEuYXJnID0gZSwgci5uZXh0ID0gbiwgbyAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgISFvO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgbyA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBvID49IDA7IC0tbykge1xuICAgICAgICB2YXIgaSA9IHRoaXMudHJ5RW50cmllc1tvXSxcbiAgICAgICAgICBhID0gaS5jb21wbGV0aW9uO1xuICAgICAgICBpZiAoXCJyb290XCIgPT09IGkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoaS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGMgPSBuLmNhbGwoaSwgXCJjYXRjaExvY1wiKSxcbiAgICAgICAgICAgIHUgPSBuLmNhbGwoaSwgXCJmaW5hbGx5TG9jXCIpO1xuICAgICAgICAgIGlmIChjICYmIHUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF1KSB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChlLCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcixcbiAgICAgICAgbmV4dExvYzogblxuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHQpLCB5O1xuICAgIH1cbiAgfSwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gRkYyNi0gYnVnOiBBcnJheUJ1ZmZlcnMgYXJlIG5vbi1leHRlbnNpYmxlLCBidXQgT2JqZWN0LmlzRXh0ZW5zaWJsZSBkb2VzIG5vdCByZXBvcnQgaXRcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShidWZmZXIpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVmZmVyLCAnYScsIHsgdmFsdWU6IDggfSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkaXNFeHRlbnNpYmxlKDEpOyB9KTtcblxuLy8gYE9iamVjdC5pc0V4dGVuc2libGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNleHRlbnNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IChGQUlMU19PTl9QUklNSVRJVkVTIHx8IEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSkgPyBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSAmJiBjbGFzc29mKGl0KSA9PT0gJ0FycmF5QnVmZmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZTtcbn0gOiAkaXNFeHRlbnNpYmxlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtcHJldmVudGV4dGVuc2lvbnMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgaXNFeHRlbnNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG5cbnZhciBSRVFVSVJFRCA9IGZhbHNlO1xudmFyIE1FVEFEQVRBID0gdWlkKCdtZXRhJyk7XG52YXIgaWQgPSAwO1xuXG52YXIgc2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgZGVmaW5lUHJvcGVydHkoaXQsIE1FVEFEQVRBLCB7IHZhbHVlOiB7XG4gICAgb2JqZWN0SUQ6ICdPJyArIGlkKyssIC8vIG9iamVjdCBJRFxuICAgIHdlYWtEYXRhOiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcblxudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gYSBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS5vYmplY3RJRDtcbn07XG5cbnZhciBnZXRXZWFrRGF0YSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gdGhlIHN0b3JlIG9mIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS53ZWFrRGF0YTtcbn07XG5cbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWklORyAmJiBSRVFVSVJFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXNPd24oaXQsIE1FVEFEQVRBKSkgc2V0TWV0YWRhdGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG52YXIgZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICBtZXRhLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiAgUkVRVUlSRUQgPSB0cnVlO1xuICB2YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZjtcbiAgdmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG4gIHZhciB0ZXN0ID0ge307XG4gIHRlc3RbTUVUQURBVEFdID0gMTtcblxuICAvLyBwcmV2ZW50IGV4cG9zaW5nIG9mIG1ldGFkYXRhIGtleVxuICBpZiAoZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0KS5sZW5ndGgpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdFtpXSA9PT0gTUVUQURBVEEpIHtcbiAgICAgICAgICBzcGxpY2UocmVzdWx0LCBpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZS5mXG4gICAgfSk7XG4gIH1cbn07XG5cbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuYWJsZTogZW5hYmxlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrRGF0YTogZ2V0V2Vha0RhdGEsXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuaGlkZGVuS2V5c1tNRVRBREFUQV0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSwgd3JhcHBlciwgY29tbW9uKSB7XG4gIHZhciBJU19NQVAgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ01hcCcpICE9PSAtMTtcbiAgdmFyIElTX1dFQUsgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ1dlYWsnKSAhPT0gLTE7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl9OQU1FXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgdmFyIGV4cG9ydGVkID0ge307XG4gIHZhciBDb25zdHJ1Y3RvcjtcblxuICBpZiAoIURFU0NSSVBUT1JTIHx8ICFpc0NhbGxhYmxlKE5hdGl2ZUNvbnN0cnVjdG9yKVxuICAgIHx8ICEoSVNfV0VBSyB8fCBOYXRpdmVQcm90b3R5cGUuZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKS5lbnRyaWVzKCkubmV4dCgpOyB9KSlcbiAgKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDb25zdHJ1Y3RvciA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB9IGVsc2Uge1xuICAgIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZShhbkluc3RhbmNlKHRhcmdldCwgUHJvdG90eXBlKSwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBjb2xsZWN0aW9uOiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGFyZ2V0W0FEREVSXSwgeyB0aGF0OiB0YXJnZXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICBmb3JFYWNoKFsnYWRkJywgJ2NsZWFyJywgJ2RlbGV0ZScsICdmb3JFYWNoJywgJ2dldCcsICdoYXMnLCAnc2V0JywgJ2tleXMnLCAndmFsdWVzJywgJ2VudHJpZXMnXSwgZnVuY3Rpb24gKEtFWSkge1xuICAgICAgdmFyIElTX0FEREVSID0gS0VZID09PSAnYWRkJyB8fCBLRVkgPT09ICdzZXQnO1xuICAgICAgaWYgKEtFWSBpbiBOYXRpdmVQcm90b3R5cGUgJiYgIShJU19XRUFLICYmIEtFWSA9PT0gJ2NsZWFyJykpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFByb3RvdHlwZSwgS0VZLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5jb2xsZWN0aW9uO1xuICAgICAgICAgIGlmICghSVNfQURERVIgJiYgSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkpIHJldHVybiBLRVkgPT09ICdnZXQnID8gdW5kZWZpbmVkIDogZmFsc2U7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGNvbGxlY3Rpb25bS0VZXShhID09PSAwID8gMCA6IGEsIGIpO1xuICAgICAgICAgIHJldHVybiBJU19BRERFUiA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgSVNfV0VBSyB8fCBkZWZpbmVQcm9wZXJ0eShQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb24uc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgZXhwb3J0ZWRbQ09OU1RSVUNUT1JfTkFNRV0gPSBDb25zdHJ1Y3RvcjtcbiAgJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIGV4cG9ydGVkKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5zYWZlICYmIHRhcmdldFtrZXldKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICB9IHJldHVybiB0YXJnZXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZmFzdEtleTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgUHJvdG90eXBlKTtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBpbmRleDogY3JlYXRlKG51bGwpLFxuICAgICAgICBmaXJzdDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWQsXG4gICAgICAgIHNpemU6IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCFERVNDUklQVE9SUykgdGhhdC5zaXplID0gMDtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0aGF0W0FEREVSXSwgeyB0aGF0OiB0aGF0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgUHJvdG90eXBlID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgdmFyIGdldEludGVybmFsU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gICAgdmFyIGRlZmluZSA9IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgIHZhciBwcmV2aW91cywgaW5kZXg7XG4gICAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUubGFzdCA9IGVudHJ5ID0ge1xuICAgICAgICAgIGluZGV4OiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgcHJldmlvdXM6IHByZXZpb3VzID0gc3RhdGUubGFzdCxcbiAgICAgICAgICBuZXh0OiB1bmRlZmluZWQsXG4gICAgICAgICAgcmVtb3ZlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdGF0ZS5maXJzdCkgc3RhdGUuZmlyc3QgPSBlbnRyeTtcbiAgICAgICAgaWYgKHByZXZpb3VzKSBwcmV2aW91cy5uZXh0ID0gZW50cnk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSsrO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSsrO1xuICAgICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHN0YXRlLmluZGV4W2luZGV4XSA9IGVudHJ5O1xuICAgICAgfSByZXR1cm4gdGhhdDtcbiAgICB9O1xuXG4gICAgdmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIC8vIGZhc3QgY2FzZVxuICAgICAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICAgICAgdmFyIGVudHJ5O1xuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiBzdGF0ZS5pbmRleFtpbmRleF07XG4gICAgICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgICAgIGZvciAoZW50cnkgPSBzdGF0ZS5maXJzdDsgZW50cnk7IGVudHJ5ID0gZW50cnkubmV4dCkge1xuICAgICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCB7XG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5jbGVhcigpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5jbGVhclxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBkYXRhID0gc3RhdGUuaW5kZXg7XG4gICAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmZpcnN0O1xuICAgICAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucHJldmlvdXMpIGVudHJ5LnByZXZpb3VzID0gZW50cnkucHJldmlvdXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmZpcnN0ID0gc3RhdGUubGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplID0gMDtcbiAgICAgICAgZWxzZSB0aGF0LnNpemUgPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmRlbGV0ZShrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubmV4dDtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5pbmRleFtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubmV4dCA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucHJldmlvdXMgPSBwcmV2O1xuICAgICAgICAgIGlmIChzdGF0ZS5maXJzdCA9PT0gZW50cnkpIHN0YXRlLmZpcnN0ID0gbmV4dDtcbiAgICAgICAgICBpZiAoc3RhdGUubGFzdCA9PT0gZW50cnkpIHN0YXRlLmxhc3QgPSBwcmV2O1xuICAgICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZS0tO1xuICAgICAgICAgIGVsc2UgdGhhdC5zaXplLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuZmlyc3QpIHtcbiAgICAgICAgICBib3VuZEZ1bmN0aW9uKGVudHJ5LnZhbHVlLCBlbnRyeS5rZXksIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXR9LnByb3RvdHlwZS5oYXMoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmhhc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmhhc1xuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIElTX01BUCA/IHtcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLmdldChrZXkpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudmFsdWU7XG4gICAgICB9LFxuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5zZXRcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmFkZFxuICAgICAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCkge1xuICAgIHZhciBJVEVSQVRPUl9OQU1FID0gQ09OU1RSVUNUT1JfTkFNRSArICcgSXRlcmF0b3InO1xuICAgIHZhciBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG4gICAgdmFyIGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoSVRFUkFUT1JfTkFNRSk7XG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUueyBrZXlzLCB2YWx1ZXMsIGVudHJpZXMsIEBAaXRlcmF0b3IgfSgpYCBtZXRob2RzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICBkZWZpbmVJdGVyYXRvcihDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgICAgdHlwZTogSVRFUkFUT1JfTkFNRSxcbiAgICAgICAgdGFyZ2V0OiBpdGVyYXRlZCxcbiAgICAgICAgc3RhdGU6IGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlKGl0ZXJhdGVkKSxcbiAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUodGhpcyk7XG4gICAgICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gICAgICB2YXIgZW50cnkgPSBzdGF0ZS5sYXN0O1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXN0YXRlLnRhcmdldCB8fCAhKHN0YXRlLmxhc3QgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLnN0YXRlLmZpcnN0KSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PT0gJ2tleXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS5rZXksIGZhbHNlKTtcbiAgICAgIGlmIChraW5kID09PSAndmFsdWVzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkudmFsdWUsIGZhbHNlKTtcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZmFsc2UpO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlW0BAc3BlY2llc11gIGFjY2Vzc29yc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LW1hcC1AQHNwZWNpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1zZXQtQEBzcGVjaWVzXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAtb2JqZWN0c1xuY29sbGVjdGlvbignTWFwJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hcCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguTWFwO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLnNvbWU7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29tZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfSwge1xuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb21lJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NvbWUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb21lJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvbWU7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNvbWUpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAna2V5cycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmtleXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmtleXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgbWVyZ2VTb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICByZXR1cm4gbGVuZ3RoIDwgOCA/IGluc2VydGlvblNvcnQoYXJyYXksIGNvbXBhcmVmbikgOiBtZXJnZShcbiAgICBhcnJheSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgMCwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBjb21wYXJlZm5cbiAgKTtcbn07XG5cbnZhciBpbnNlcnRpb25Tb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIGkgPSAxO1xuICB2YXIgZWxlbWVudCwgajtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGogPSBpO1xuICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICB9XG4gICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIChhcnJheSwgbGVmdCwgcmlnaHQsIGNvbXBhcmVmbikge1xuICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgdmFyIGxpbmRleCA9IDA7XG4gIHZhciByaW5kZXggPSAwO1xuXG4gIHdoaWxlIChsaW5kZXggPCBsbGVuZ3RoIHx8IHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICBhcnJheVtsaW5kZXggKyByaW5kZXhdID0gKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aClcbiAgICAgID8gY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdXG4gICAgICA6IGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXTtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlU29ydDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBmaXJlZm94ID0gdXNlckFnZW50Lm1hdGNoKC9maXJlZm94XFwvKFxcZCspL2kpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhZmlyZWZveCAmJiArZmlyZWZveFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVUEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciB3ZWJraXQgPSB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCspXFwuLyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISF3ZWJraXQgJiYgK3dlYmtpdFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJuYWxTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBGRiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbicpO1xudmFyIElFX09SX0VER0UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UnKTtcbnZhciBWOCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24nKTtcblxudmFyIHRlc3QgPSBbXTtcbnZhciBuYXRpdmVTb3J0ID0gdW5jdXJyeVRoaXModGVzdC5zb3J0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXModGVzdC5wdXNoKTtcblxuLy8gSUU4LVxudmFyIEZBSUxTX09OX1VOREVGSU5FRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KTtcbi8vIFY4IGJ1Z1xudmFyIEZBSUxTX09OX05VTEwgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydChudWxsKTtcbn0pO1xuLy8gT2xkIFdlYktpdFxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb3J0Jyk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGZlYXR1cmUgZGV0ZWN0aW9uIGNhbiBiZSB0b28gc2xvdywgc28gY2hlY2sgZW5naW5lcyB2ZXJzaW9uc1xuICBpZiAoVjgpIHJldHVybiBWOCA8IDcwO1xuICBpZiAoRkYgJiYgRkYgPiAzKSByZXR1cm47XG4gIGlmIChJRV9PUl9FREdFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdFQktJVCkgcmV0dXJuIFdFQktJVCA8IDYwMztcblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBjb2RlLCBjaHIsIHZhbHVlLCBpbmRleDtcblxuICAvLyBnZW5lcmF0ZSBhbiBhcnJheSB3aXRoIG1vcmUgNTEyIGVsZW1lbnRzIChDaGFrcmEgYW5kIG9sZCBWOCBmYWlscyBvbmx5IGluIHRoaXMgY2FzZSlcbiAgZm9yIChjb2RlID0gNjU7IGNvZGUgPCA3NjsgY29kZSsrKSB7XG4gICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSA2NjogY2FzZSA2OTogY2FzZSA3MDogY2FzZSA3MjogdmFsdWUgPSAzOyBicmVhaztcbiAgICAgIGNhc2UgNjg6IGNhc2UgNzE6IHZhbHVlID0gNDsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB2YWx1ZSA9IDI7XG4gICAgfVxuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDc7IGluZGV4KyspIHtcbiAgICAgIHRlc3QucHVzaCh7IGs6IGNociArIGluZGV4LCB2OiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudiAtIGEudjsgfSk7XG5cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGVzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSB0ZXN0W2luZGV4XS5rLmNoYXJBdCgwKTtcbiAgICBpZiAocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IGNocikgcmVzdWx0ICs9IGNocjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgIT09ICdER0JFRkhBQ0lKSyc7XG59KTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCAhU1RSSUNUX01FVEhPRCB8fCAhU1RBQkxFX1NPUlQ7XG5cbnZhciBnZXRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uIChjb21wYXJlZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICByZXR1cm4gdG9TdHJpbmcoeCkgPiB0b1N0cmluZyh5KSA/IDEgOiAtMTtcbiAgfTtcbn07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb3J0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG5cbiAgICB2YXIgYXJyYXkgPSB0b09iamVjdCh0aGlzKTtcblxuICAgIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkID8gbmF0aXZlU29ydChhcnJheSkgOiBuYXRpdmVTb3J0KGFycmF5LCBjb21wYXJlZm4pO1xuXG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGFycmF5TGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoYXJyYXkpO1xuICAgIHZhciBpdGVtc0xlbmd0aCwgaW5kZXg7XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGluZGV4IGluIGFycmF5KSBwdXNoKGl0ZW1zLCBhcnJheVtpbmRleF0pO1xuICAgIH1cblxuICAgIGludGVybmFsU29ydChpdGVtcywgZ2V0U29ydENvbXBhcmUoY29tcGFyZWZuKSk7XG5cbiAgICBpdGVtc0xlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZW1zKTtcbiAgICBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBpdGVtc0xlbmd0aCkgYXJyYXlbaW5kZXhdID0gaXRlbXNbaW5kZXgrK107XG4gICAgd2hpbGUgKGluZGV4IDwgYXJyYXlMZW5ndGgpIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhhcnJheSwgaW5kZXgrKyk7XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc29ydCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzb3J0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29ydCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb3J0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb3J0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3ZhbHVlcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudmFsdWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3JcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdlbnRyaWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2VudHJpZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZW50cmllcztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZW50cmllcylcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2VudHJpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG5sZXQgZ2V0UmFuZG9tVmFsdWVzO1xuY29uc3Qgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cbiAgICBnZXRSYW5kb21WYWx1ZXMgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pO1xuXG4gICAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbn0iLCAiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5cbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICByZXR1cm4gYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV07XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7IiwgImNvbnN0IHJhbmRvbVVVSUQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCAmJiBjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byk7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHJhbmRvbVVVSURcbn07IiwgImltcG9ydCBuYXRpdmUgZnJvbSAnLi9uYXRpdmUuanMnO1xuaW1wb3J0IHJuZyBmcm9tICcuL3JuZy5qcyc7XG5pbXBvcnQgeyB1bnNhZmVTdHJpbmdpZnkgfSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChuYXRpdmUucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5hdGl2ZS5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3Qgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7IC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIHJldHVybiB1bnNhZmVTdHJpbmdpZnkocm5kcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHY0OyIsICJpbXBvcnQgeyBBc3NpZ25hYmxlIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgRGF0YVNldCB9IGZyb20gXCIuL2RhdGEtc2V0XCI7XG5pbXBvcnQgeyBEYXRhU3RyZWFtIH0gZnJvbSBcIi4vZGF0YS1zdHJlYW1cIjtcblxudHlwZSBWYWx1ZU9mPFQ+ID0gVFtrZXlvZiBUXTtcblxuLyoqIFZhbGlkIGlkIHR5cGUuICovXG5leHBvcnQgdHlwZSBJZCA9IG51bWJlciB8IHN0cmluZztcbi8qKiBOdWxsYWJsZSBpZCB0eXBlLiAqL1xuZXhwb3J0IHR5cGUgT3B0SWQgPSB1bmRlZmluZWQgfCBudWxsIHwgSWQ7XG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIGEgdmFsdWUgY2FuIGJlIHVzZWQgYXMgYW4gaWQuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdmFsaWQgaWQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBJZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xufVxuXG4vKipcbiAqIE1ha2UgYW4gb2JqZWN0IGRlZXBseSBwYXJ0aWFsLlxuICovXG5leHBvcnQgdHlwZSBEZWVwUGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBhbnlbXSB8IEZ1bmN0aW9uIHwgTm9kZVxuICA/IFRcbiAgOiBUIGV4dGVuZHMgb2JqZWN0XG4gID8geyBba2V5IGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtrZXldPiB9XG4gIDogVDtcblxuLyoqXG4gKiBBbiBpdGVtIHRoYXQgbWF5ICh7QGxpbmsgSWR9KSBvciBtYXkgbm90IChhYnNlbnQsIHVuZGVmaW5lZCBvciBudWxsKSBoYXZlIGFuIGlkIHByb3BlcnR5LlxuICpcbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCB0eXBlIFBhcnRJdGVtPElkUHJvcCBleHRlbmRzIHN0cmluZz4gPSBQYXJ0aWFsPFJlY29yZDxJZFByb3AsIE9wdElkPj47XG4vKipcbiAqIEFuIGl0ZW0gdGhhdCBoYXMgYSBwcm9wZXJ0eSBjb250YWluaW5nIGFuIGlkIGFuZCBhbGwgb3RoZXIgcmVxdWlyZWQgcHJvcGVydGllcyBvZiBnaXZlbiBpdGVtIHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCB0eXBlIEZ1bGxJdGVtPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+ID0gSXRlbSAmIFJlY29yZDxJZFByb3AsIElkPjtcbi8qKlxuICogQW4gaXRlbSB0aGF0IGhhcyBhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gaWQgYW5kIG9wdGlvbmFsbHkgb3RoZXIgcHJvcGVydGllcyBvZiBnaXZlbiBpdGVtIHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCB0eXBlIFVwZGF0ZUl0ZW08XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gPSBBc3NpZ25hYmxlPEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+ICYgUmVjb3JkPElkUHJvcCwgSWQ+O1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciBhbiBpdGVtIGhhcyBhbiBpZCAoaXMgYSB7QGxpbmsgRnVsbEl0ZW19KS5cbiAqXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBpdGVtIHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSBpZFByb3AgLSBOYW1lIG9mIHRoZSBpZCBwcm9wZXJ0eS5cbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGlzIHZhbHVlIGlzIGEge0BsaW5rIEZ1bGxJdGVtfSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGdWxsSXRlbTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPihpdGVtOiBJdGVtLCBpZFByb3A6IElkUHJvcCk6IGl0ZW0gaXMgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB7XG4gIHJldHVybiBpdGVtW2lkUHJvcF0gIT0gbnVsbDtcbn1cblxuLyoqIEFkZCBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRFdmVudFBheWxvYWQge1xuICAvKiogSWRzIG9mIGFkZGVkIGl0ZW1zLiAqL1xuICBpdGVtczogSWRbXTtcbn1cbi8qKiBVcGRhdGUgZXZlbnQgcGF5bG9hZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlRXZlbnRQYXlsb2FkPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IHtcbiAgLyoqIElkcyBvZiB1cGRhdGVkIGl0ZW1zLiAqL1xuICBpdGVtczogSWRbXTtcbiAgLyoqIEl0ZW1zIGFzIHRoZXkgd2VyZSBiZWZvcmUgdGhpcyB1cGRhdGUuICovXG4gIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEl0ZW1zIGFzIHRoZXkgYXJlIG5vdy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgSnVzdCBnZXQgdGhlIGRhdGEgZnJvbSB0aGUgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LlxuICAgKi9cbiAgZGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xufVxuLyoqIFJlbW92ZSBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW1vdmVFdmVudFBheWxvYWQ8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKiogSWRzIG9mIHJlbW92ZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xuICAvKiogSXRlbXMgYXMgdGhleSB3ZXJlIGJlZm9yZSB0aGVpciByZW1vdmFsLiAqL1xuICBvbGREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG59XG5cbi8qKlxuICogTWFwIG9mIGV2ZW50IHBheWxvYWQgdHlwZXMgKGV2ZW50IG5hbWUg4oaSIHBheWxvYWQpLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50UGF5bG9hZHM8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICBhZGQ6IEFkZEV2ZW50UGF5bG9hZDtcbiAgdXBkYXRlOiBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPjtcbiAgcmVtb3ZlOiBSZW1vdmVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPjtcbn1cbi8qKlxuICogTWFwIG9mIGV2ZW50IHBheWxvYWQgdHlwZXMgaW5jbHVkaW5nIGFueSBldmVudCAoZXZlbnQgbmFtZSDihpIgcGF5bG9hZCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQYXlsb2Fkc1dpdGhBbnk8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gZXh0ZW5kcyBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD4ge1xuICBcIipcIjogVmFsdWVPZjxFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD4+O1xufVxuXG4vKipcbiAqIE1hcCBvZiBldmVudCBjYWxsYmFjayB0eXBlcyAoZXZlbnQgbmFtZSDihpIgY2FsbGJhY2spLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Q2FsbGJhY2tzPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IHtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIGFkZChuYW1lOiBcImFkZFwiLCBwYXlsb2FkOiBBZGRFdmVudFBheWxvYWQgfCBudWxsLCBzZW5kZXJJZD86IElkIHwgbnVsbCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCAoe0BsaW5rIEV2ZW50TmFtZX0pLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIERhdGEgYWJvdXQgdGhlIGl0ZW1zIGFmZmVjdGVkIGJ5IHRoaXMgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIEEgc2VuZGVySWQsIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2hpY2ggdHJpZ2dlcmVkIHRoZSBldmVudC4gSWYgc2VuZGVySWQgaXMgbm90IHByb3ZpZGVkLCB0aGUgYXJndW1lbnQgd2lsbCBiZSBgbnVsbGAuXG4gICAqL1xuICB1cGRhdGUoXG4gICAgbmFtZTogXCJ1cGRhdGVcIixcbiAgICBwYXlsb2FkOiBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPiB8IG51bGwsXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHJlbW92ZShcbiAgICBuYW1lOiBcInJlbW92ZVwiLFxuICAgIHBheWxvYWQ6IFJlbW92ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+IHwgbnVsbCxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xufVxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgY2FsbGJhY2sgdHlwZXMgaW5jbHVkaW5nIGFueSBldmVudCAoZXZlbnQgbmFtZSDihpIgY2FsbGJhY2spLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBleHRlbmRzIEV2ZW50Q2FsbGJhY2tzPEl0ZW0sIElkUHJvcD4ge1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgXCIqXCI8TiBleHRlbmRzIGtleW9mIEV2ZW50Q2FsbGJhY2tzPEl0ZW0sIElkUHJvcD4+KFxuICAgIG5hbWU6IE4sXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W05dLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG59XG5cbi8qKiBBdmFpbGFibGUgZXZlbnQgbmFtZXMuICovXG5leHBvcnQgdHlwZSBFdmVudE5hbWUgPSBrZXlvZiBFdmVudFBheWxvYWRzPG5ldmVyLCBcIlwiPjtcbi8qKiBBdmFpbGFibGUgZXZlbnQgbmFtZXMgYW5kICcqJyB0byBsaXN0ZW4gZm9yIGFsbC4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50TmFtZVdpdGhBbnkgPSBrZXlvZiBFdmVudFBheWxvYWRzV2l0aEFueTxuZXZlciwgXCJcIj47XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2Ugb3JkZXIgcGFyYW1ldGVyLlxuICogLSBBIHN0cmluZyB2YWx1ZSBkZXRlcm1pbmVzIHdoaWNoIHByb3BlcnR5IHdpbGwgYmUgdXNlZCBmb3Igc29ydGluZyAodXNpbmcgPCBhbmQgPiBvcGVyYXRvcnMgZm9yIG51bWVyaWMgY29tcGFyaXNvbikuXG4gKiAtIEEgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRoZSBzYW1lIHdheSBhcyBpbiBBcnJheS5zb3J0LlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPiA9XG4gIHwga2V5b2YgSXRlbVxuICB8ICgoYTogSXRlbSwgYjogSXRlbSkgPT4gbnVtYmVyKTtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJuIHR5cGUgaW5kZXBlbmRlbnQpLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqXG4gICAqIEFuIGFycmF5IHdpdGggZmllbGQgbmFtZXMsIG9yIGFuIG9iamVjdCB3aXRoIGN1cnJlbnQgZmllbGQgbmFtZSBhbmQgbmV3IGZpZWxkIG5hbWUgdGhhdCB0aGUgZmllbGQgaXMgcmV0dXJuZWQgYXMuIEJ5IGRlZmF1bHQsIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtcyBhcmUgZW1pdHRlZC4gV2hlbiBmaWVsZHMgaXMgZGVmaW5lZCwgb25seSB0aGUgcHJvcGVydGllcyB3aG9zZSBuYW1lIGlzIHNwZWNpZmllZCBpbiBmaWVsZHMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgaXRlbXMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFdhcm5pbmcqKjogVGhlcmUgaXMgbm8gVHlwZVNjcmlwdCBzdXBwb3J0IGZvciB0aGlzLlxuICAgKi9cbiAgZmllbGRzPzogc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogSXRlbXMgY2FuIGJlIGZpbHRlcmVkIG9uIHNwZWNpZmljIHByb3BlcnRpZXMgYnkgcHJvdmlkaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLiBBIGZpbHRlciBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgaXRlbXMgaW4gdGhlIERhdGFTZXQsIGFuZCBpcyBjYWxsZWQgd2l0aCB0aGUgaXRlbSBhcyBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIGJvb2xlYW4uIEFsbCBpdGVtcyBmb3Igd2hpY2ggdGhlIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2lsbCBiZSBlbWl0dGVkLiAqL1xuICBmaWx0ZXI/OiAoaXRlbTogSXRlbSkgPT4gYm9vbGVhbjtcbiAgLyoqIE9yZGVyIHRoZSBpdGVtcyBieSBhIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uICovXG4gIG9yZGVyPzogRGF0YUludGVyZmFjZU9yZGVyPEl0ZW0+O1xufVxuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm5zIGEgc2luZ2xlIGl0ZW0gb3IgYW4gYXJyYXkpLlxuICpcbiAqIEByZW1hcmtzXG4gKiBXaGV0aGVyIGFuIGl0ZW0gb3IgYW5kIGFycmF5IG9mIGl0ZW1zIGlzIHJldHVybmVkIGlzIGRldGVybWluZWQgYnkgdGhlIHR5cGUgb2YgdGhlIGlkKHMpIGFyZ3VtZW50LlxuICogSWYgYW4gYXJyYXkgb2YgaWRzIGlzIHJlcXVlc3RlZCBhbiBhcnJheSBvZiBpdGVtcyB3aWxsIGJlIHJldHVybmVkLlxuICogSWYgYSBzaW5nbGUgaWQgaXMgcmVxdWVzdGVkIGEgc2luZ2xlIGl0ZW0gKG9yIG51bGwgaWYgdGhlIGlkIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSkgd2lsbCBiZSByZXR1cm5lZC5cbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICBleHRlbmRzIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQmFzZTxJdGVtPiB7XG4gIC8qKiBJdGVtcyB3aWxsIGJlIHJldHVybmVkIGFzIGEgc2luZ2xlIGl0ZW0gKGlmIGludm9rZWQgd2l0aCBhbiBpZCkgb3IgYW4gYXJyYXkgb2YgaXRlbXMgKGlmIGludm9rZWQgd2l0aCBhbiBhcnJheSBvZiBpZHMpLiAqL1xuICByZXR1cm5UeXBlPzogdW5kZWZpbmVkIHwgXCJBcnJheVwiO1xufVxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJucyBhbiBvYmplY3QpLlxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgcmV0dXJuZWQgb2JqZWN0IGhhcyBpZHMgYXMga2V5cyBhbmQgaXRlbXMgYXMgdmFsdWVzIG9mIGNvcnJlc3BvbmRpbmcgaWRzLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICBleHRlbmRzIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQmFzZTxJdGVtPiB7XG4gIC8qKiBJdGVtcyB3aWxsIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBtYXAgKGlkIOKGkiBpdGVtKS4gKi9cbiAgcmV0dXJuVHlwZTogXCJPYmplY3RcIjtcbn1cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZ2V0IG9wdGlvbnMgKHJldHVybnMgc2luZ2xlIGl0ZW0sIGFuIGFycmF5IG9yIG9iamVjdCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gPVxuICB8IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgfCBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPjtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgaWRzIG9wdGlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9uczxJdGVtPiB7XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZm9yIGVhY2ggb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPiB7XG4gIC8qKiBBbiBhcnJheSB3aXRoIGZpZWxkIG5hbWVzLCBvciBhbiBvYmplY3Qgd2l0aCBjdXJyZW50IGZpZWxkIG5hbWUgYW5kIG5ldyBmaWVsZCBuYW1lIHRoYXQgdGhlIGZpZWxkIGlzIHJldHVybmVkIGFzLiBCeSBkZWZhdWx0LCBhbGwgcHJvcGVydGllcyBvZiB0aGUgaXRlbXMgYXJlIGVtaXR0ZWQuIFdoZW4gZmllbGRzIGlzIGRlZmluZWQsIG9ubHkgdGhlIHByb3BlcnRpZXMgd2hvc2UgbmFtZSBpcyBzcGVjaWZpZWQgaW4gZmllbGRzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIGl0ZW1zLiAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgbWFwIG9wcmlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBPcmlnaW5hbCAtIFRoZSBvcmlnaW5hbCBpdGVtIHR5cGUgaW4gdGhlIGRhdGEuXG4gKiBAdHlwZVBhcmFtIE1hcHBlZCAtIFRoZSB0eXBlIGFmdGVyIG1hcHBpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8T3JpZ2luYWwsIE1hcHBlZD4ge1xuICAvKiogQW4gYXJyYXkgd2l0aCBmaWVsZCBuYW1lcywgb3IgYW4gb2JqZWN0IHdpdGggY3VycmVudCBmaWVsZCBuYW1lIGFuZCBuZXcgZmllbGQgbmFtZSB0aGF0IHRoZSBmaWVsZCBpcyByZXR1cm5lZCBhcy4gQnkgZGVmYXVsdCwgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW1zIGFyZSBlbWl0dGVkLiBXaGVuIGZpZWxkcyBpcyBkZWZpbmVkLCBvbmx5IHRoZSBwcm9wZXJ0aWVzIHdob3NlIG5hbWUgaXMgc3BlY2lmaWVkIGluIGZpZWxkcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBpdGVtcy4gKi9cbiAgZmllbGRzPzogc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogSXRlbXMgY2FuIGJlIGZpbHRlcmVkIG9uIHNwZWNpZmljIHByb3BlcnRpZXMgYnkgcHJvdmlkaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLiBBIGZpbHRlciBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgaXRlbXMgaW4gdGhlIERhdGFTZXQsIGFuZCBpcyBjYWxsZWQgd2l0aCB0aGUgaXRlbSBhcyBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIGJvb2xlYW4uIEFsbCBpdGVtcyBmb3Igd2hpY2ggdGhlIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2lsbCBiZSBlbWl0dGVkLiAqL1xuICBmaWx0ZXI/OiAoaXRlbTogT3JpZ2luYWwpID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxNYXBwZWQ+O1xufVxuXG4vKipcbiAqIENvbW1vbiBpbnRlcmZhY2UgZm9yIGRhdGEgc2V0cyBhbmQgZGF0YSB2aWV3LlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQgKG1pc3NpbmcgaWRzIHdpbGwgYmUgZ2VuZXJhdGVkIHVwb24gaW5zZXJ0aW9uKS5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgb24gdGhlIEl0ZW0gdHlwZSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+IHtcbiAgLyoqIFRoZSBudW1iZXIgb2YgaXRlbXMuICovXG4gIGxlbmd0aDogbnVtYmVyO1xuXG4gIC8qKiBUaGUga2V5IG9mIGlkIHByb3BlcnR5LiAqL1xuICBpZFByb3A6IElkUHJvcDtcblxuICAvKipcbiAgICogQWRkIGEgdW5pdmVyc2FsIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYCpgIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIGFueSBvZiB0aGUgZXZlbnRzIGBhZGRgLCBgdXBkYXRlYCwgYW5kIGByZW1vdmVgIG9jY3Vycy5cbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvbihldmVudDogXCIqXCIsIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl0pOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGFuIGBhZGRgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYGFkZGAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gaXRlbSBvciBhIHNldCBvZiBpdGVtcyBpcyBhZGRlZCwgb3Igd2hlbiBhbiBpdGVtIGlzIHVwZGF0ZWQgd2hpbGUgbm90IHlldCBleGlzdGluZy5cbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvbihldmVudDogXCJhZGRcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiYWRkXCJdKTogdm9pZDtcbiAgLyoqXG4gICAqIEFkZCBhIGByZW1vdmVgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYHJlbW92ZWAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gaXRlbSBvciBhIHNldCBvZiBpdGVtcyBpcyByZW1vdmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXVxuICApOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGFuIGB1cGRhdGVgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYHVwZGF0ZWAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gZXhpc3RpbmcgaXRlbSBvciBhIHNldCBvZiBleGlzdGluZyBpdGVtcyBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSB1bml2ZXJzYWwgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKGV2ZW50OiBcIipcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYGFkZGAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKGV2ZW50OiBcImFkZFwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl0pOiB2b2lkO1xuICAvKipcbiAgICogUmVtb3ZlIGEgYHJlbW92ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXVxuICApOiB2b2lkO1xuICAvKipcbiAgICogUmVtb3ZlIGFuIGB1cGRhdGVgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9mZihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl1cbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogR2V0IGFsbCB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcy5cbiAgICovXG4gIGdldCgpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgcmVxdWVzdGVkIGl0ZW1zLlxuICAgKi9cbiAgZ2V0KG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT4pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgdGhlcmUgYXJlIG5vIGl0ZW1zKS5cbiAgICovXG4gIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IGFsbCB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIHJlcXVlc3RlZCBpdGVtcyBvciBpZiByZXF1ZXN0ZWQgYW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBhcmUgbm8gaXRlbXMpLlxuICAgKi9cbiAgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0gb3IgbnVsbCBpZiB0aGUgaWQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBpdGVtLlxuICAgKi9cbiAgZ2V0KGlkOiBJZCk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKipcbiAgICogR2V0IG9uZSBpdGVtLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIGl0ZW0uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBvciBudWxsIGlmIHRoZSBpZCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGl0ZW0uXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG9uZSBpdGVtLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIGl0ZW0uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBpZiBmb3VuZCBvciBudWxsIG90aGVyd2lzZS4gSWYgcmVxdWVzdGVkIGFuIG9iamVjdCBtYXAgd2l0aCAwIHRvIDEgaXRlbXMuXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBtdWx0aXBsZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGlkcyAtIEFuIGFycmF5IG9mIHJlcXVlc3RlZCBpZHMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZvdW5kIGl0ZW1zIChpZHMgdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSBhcmUgb21pdHRlZCkuXG4gICAqL1xuICBnZXQoaWRzOiBJZFtdKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZvdW5kIGl0ZW1zIChpZHMgdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSBhcmUgb21pdHRlZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZvdW5kIGl0ZW1zIChpZHMgdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSBhcmUgb21pdHRlZCkuXG4gICAqIElmIHJlcXVlc3RlZCBhbiBvYmplY3QgbWFwIG9mIGl0ZW1zIChtYXkgYmUgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIGl0ZW0gd2FzIGZvdW5kKS5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGlkcyAtIElkIG9yIGlkcyB0byBiZSByZXR1cm5lZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHNwZWNpZnkgaXRlcmF0aW9uIGRldGFpbHMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtcyAoZm9ybWF0IGlzIGRldGVybWluZWQgYnkgaWRzIChzaW5nbGUgb3IgYXJyYXkpIGFuZCB0aGUgb3B0aW9ucy5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkIHwgSWRbXSxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcblxuICAvKipcbiAgICogR2V0IHRoZSBEYXRhU2V0IHRvIHdoaWNoIHRoZSBpbnN0YW5jZSBpbXBsZW1lbnRpbmcgdGhpcyBpbnRlcmZhY2UgaXMgY29ubmVjdGVkLlxuICAgKiBJbiBjYXNlIHRoZXJlIGlzIGEgY2hhaW4gb2YgbXVsdGlwbGUgRGF0YVZpZXdzLCB0aGUgcm9vdCBEYXRhU2V0IG9mIHRoaXMgY2hhaW4gaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBkYXRhIHNldCB0aGF0IGFjdHVhbGx5IGNvbnRhaW5zIHRoZSBkYXRhLlxuICAgKi9cbiAgZ2V0RGF0YVNldCgpOiBEYXRhU2V0PEl0ZW0sIElkUHJvcD47XG5cbiAgLyoqXG4gICAqIEdldCBpZHMgb2YgaXRlbXMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIE5vIGd1YXJhbnRlZSBpcyBnaXZlbiBhYm91dCB0aGUgb3JkZXIgb2YgcmV0dXJuZWQgaWRzIHVubGVzcyBhbiBvcmRlcmluZyBmdW5jdGlvbiBpcyBzdXBwbGllZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHJlcXVlc3RlZCBpZHMuXG4gICAqL1xuICBnZXRJZHMob3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+KTogSWRbXTtcblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIE5vIGd1YXJhbnRlZSBpcyBnaXZlbiBhYm91dCB0aGUgb3JkZXIgb2YgaXRlcmF0aW9uIHVubGVzcyBhbiBvcmRlcmluZyBmdW5jdGlvbiBpcyBzdXBwbGllZC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gRXhlY3V0ZWQgaW4gc2ltaWxhciBmYXNoaW9uIHRvIEFycmF5LmZvckVhY2ggY2FsbGJhY2ssIGJ1dCBpbnN0ZWFkIG9mIGl0ZW0sIGluZGV4LCBhcnJheSByZWNlaXZlcyBpdGVtLCBpZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHNwZWNpZnkgaXRlcmF0aW9uIGRldGFpbHMuXG4gICAqL1xuICBmb3JFYWNoKFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiB2b2lkLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnM8SXRlbT5cbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogTWFwIGVhY2ggaXRlbSBpbnRvIGRpZmZlcmVudCBpdGVtIGFuZCByZXR1cm4gdGhlbSBhcyBhbiBhcnJheS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiBpdGVyYXRpb24gZXZlbiBpZiBvcmRlcmluZyBmdW5jdGlvbiBpcyBzdXBwbGllZCAodGhlIGl0ZW1zIGFyZSBzb3J0ZWQgYWZ0ZXIgdGhlIG1hcHBpbmcpLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBcnJheS5tYXAtbGlrZSBjYWxsYmFjaywgYnV0IG9ubHkgd2l0aCB0aGUgZmlyc3QgdHdvIHBhcmFtcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHNwZWNpZnkgaXRlcmF0aW9uIGRldGFpbHMuXG4gICAqIEByZXR1cm5zIFRoZSBtYXBwZWQgaXRlbXMuXG4gICAqL1xuICBtYXA8VD4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IFQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VNYXBPcHRpb25zPEl0ZW0sIFQ+XG4gICk6IFRbXTtcblxuICAvKipcbiAgICogU3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gSWRzIG9mIHRoZSBpdGVtcyB0byBiZSBpbmNsdWRlZCBpbiB0aGlzIHN0cmVhbSAobWlzc2luZyBhcmUgaWdub3JlZCksIGFsbCBpZiBvbWl0dGVkLlxuICAgKiBAcmV0dXJucyBUaGUgZGF0YSBzdHJlYW0gZm9yIHRoaXMgZGF0YSBzZXQuXG4gICAqL1xuICBzdHJlYW0oaWRzPzogSXRlcmFibGU8SWQ+KTogRGF0YVN0cmVhbTxJdGVtPjtcbn1cbiIsICIvKiogUXVldWUgY29uZmlndXJhdGlvbiBvYmplY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlT3B0aW9ucyB7XG4gIC8qKiBUaGUgcXVldWUgd2lsbCBiZSBmbHVzaGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgYW4gaW5hY3Rpdml0eSBvZiB0aGlzIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4gQnkgZGVmYXVsdCB0aGVyZSBpcyBubyBhdXRvbWF0aWMgZmx1c2hpbmcgKGBudWxsYCkuICovXG4gIGRlbGF5PzogbnVsbCB8IG51bWJlcjtcbiAgLyoqIFdoZW4gdGhlIHF1ZXVlIGV4Y2VlZHMgdGhlIGdpdmVuIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMsIHRoZSBxdWV1ZSBpcyBmbHVzaGVkIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQgdmFsdWUgaXMgYEluZmluaXR5YC4gKi9cbiAgbWF4PzogbnVtYmVyO1xufVxuLyoqXG4gKiBRdWV1ZSBleHRlbmRpbmcgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBtZXRob2QgbmFtZXMgdG8gYmUgcmVwbGFjZWQgYnkgcXVldWVkIHZlcnNpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlRXh0ZW5kT3B0aW9uczxUPiB7XG4gIC8qKiBBIGxpc3Qgd2l0aCBtZXRob2QgbmFtZXMgb2YgdGhlIG1ldGhvZHMgb24gdGhlIG9iamVjdCB0byBiZSByZXBsYWNlZCB3aXRoIHF1ZXVlZCBvbmVzLiAqL1xuICByZXBsYWNlOiBUW107XG4gIC8qKiBXaGVuIHByb3ZpZGVkLCB0aGUgcXVldWUgd2lsbCBiZSBmbHVzaGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgYW4gaW5hY3Rpdml0eSBvZiB0aGlzIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdCB2YWx1ZSBpcyBudWxsLiAqL1xuICBkZWxheT86IG51bWJlcjtcbiAgLyoqIFdoZW4gdGhlIHF1ZXVlIGV4Y2VlZHMgdGhlIGdpdmVuIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMsIHRoZSBxdWV1ZSBpcyBmbHVzaGVkIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQgdmFsdWUgb2YgbWF4IGlzIEluZmluaXR5LiAqL1xuICBtYXg/OiBudW1iZXI7XG59XG4vKipcbiAqIFF1ZXVlIGNhbGwgZW50cnkuXG4gKiAtIEEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQuXG4gKiAtIEFuIG9iamVjdCB3aXRoIGZ1bmN0aW9uLCBhcmdzLCBjb250ZXh0IChsaWtlIGZ1bmN0aW9uLmJpbmQoY29udGV4dCwgLi4uYXJncykpLlxuICovXG50eXBlIFF1ZXVlQ2FsbEVudHJ5ID1cbiAgfCBGdW5jdGlvblxuICB8IHtcbiAgICAgIGZuOiBGdW5jdGlvbjtcbiAgICAgIGFyZ3M6IHVua25vd25bXTtcbiAgICB9XG4gIHwge1xuICAgICAgZm46IEZ1bmN0aW9uO1xuICAgICAgYXJnczogdW5rbm93bltdO1xuICAgICAgY29udGV4dDogdW5rbm93bjtcbiAgICB9O1xuXG5pbnRlcmZhY2UgUXVldWVFeHRlbmRlZDxPPiB7XG4gIG9iamVjdDogTztcbiAgbWV0aG9kczoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBvcmlnaW5hbDogdW5rbm93bjtcbiAgfVtdO1xufVxuXG4vKipcbiAqIEEgcXVldWUuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgbWV0aG9kIG5hbWVzIHRvIGJlIHJlcGxhY2VkIGJ5IHF1ZXVlZCB2ZXJzaW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXVlPFQgPSBuZXZlcj4ge1xuICAvKiogRGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBJZiBkZWZpbmVkIHRoZSBxdWV1ZSB3aWxsIGJlIHBlcmlvZGljYWxseSBmbHVzaGVkLiAqL1xuICBwdWJsaWMgZGVsYXk6IG51bGwgfCBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBxdWV1ZSBiZWZvcmUgaXQgd2lsbCBiZSBmbHVzaGVkLiAqL1xuICBwdWJsaWMgbWF4OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcXVldWU6IHtcbiAgICBmbjogRnVuY3Rpb247XG4gICAgYXJncz86IHVua25vd25bXTtcbiAgICBjb250ZXh0PzogdW5rbm93bjtcbiAgfVtdID0gW107XG5cbiAgcHJpdmF0ZSBfdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZXh0ZW5kZWQ6IG51bGwgfCBRdWV1ZUV4dGVuZGVkPFQ+ID0gbnVsbDtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IFF1ZXVlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFF1ZXVlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9ucz86IFF1ZXVlT3B0aW9ucykge1xuICAgIC8vIG9wdGlvbnNcbiAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICB0aGlzLm1heCA9IEluZmluaXR5O1xuXG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcXVldWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUXVldWUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM/OiBRdWV1ZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5kZWxheSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5kZWxheSA9IG9wdGlvbnMuZGVsYXk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5tYXggPSBvcHRpb25zLm1heDtcbiAgICB9XG5cbiAgICB0aGlzLl9mbHVzaElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogRXh0ZW5kIGFuIG9iamVjdCB3aXRoIHF1ZXVpbmcgZnVuY3Rpb25hbGl0eS5cbiAgICogVGhlIG9iamVjdCB3aWxsIGJlIGV4dGVuZGVkIHdpdGggYSBmdW5jdGlvbiBmbHVzaCwgYW5kIHRoZSBtZXRob2RzIHByb3ZpZGVkIGluIG9wdGlvbnMucmVwbGFjZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggcXVldWVkIG9uZXMuXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgcXVldWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGV4dGVuZDxPIGV4dGVuZHMgeyBmbHVzaD86ICgpID0+IHZvaWQgfSwgSyBleHRlbmRzIHN0cmluZz4oXG4gICAgb2JqZWN0OiBPLFxuICAgIG9wdGlvbnM6IFF1ZXVlRXh0ZW5kT3B0aW9uczxLPlxuICApOiBRdWV1ZTxPPiB7XG4gICAgY29uc3QgcXVldWUgPSBuZXcgUXVldWU8Tz4ob3B0aW9ucyk7XG5cbiAgICBpZiAob2JqZWN0LmZsdXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhcmdldCBvYmplY3QgYWxyZWFkeSBoYXMgYSBwcm9wZXJ0eSBmbHVzaFwiKTtcbiAgICB9XG4gICAgb2JqZWN0LmZsdXNoID0gKCk6IHZvaWQgPT4ge1xuICAgICAgcXVldWUuZmx1c2goKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWV0aG9kczogUXVldWVFeHRlbmRlZDxPPltcIm1ldGhvZHNcIl0gPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiZmx1c2hcIixcbiAgICAgICAgb3JpZ2luYWw6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmVwbGFjZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLnJlcGxhY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IG9wdGlvbnMucmVwbGFjZVtpXTtcbiAgICAgICAgbWV0aG9kcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIC8vIEBUT0RPOiBiZXR0ZXIgc29sdXRpb24/XG4gICAgICAgICAgb3JpZ2luYWw6IChvYmplY3QgYXMgdW5rbm93biBhcyBSZWNvcmQ8SywgKCkgPT4gdm9pZD4pW25hbWVdLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgcXVldWUucmVwbGFjZShvYmplY3QgYXMgdW5rbm93biBhcyBSZWNvcmQ8SywgKCkgPT4gdm9pZD4sIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHF1ZXVlLl9leHRlbmRlZCA9IHtcbiAgICAgIG9iamVjdDogb2JqZWN0LFxuICAgICAgbWV0aG9kczogbWV0aG9kcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHF1ZXVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgdGhlIHF1ZXVlLiBUaGUgcXVldWUgd2lsbCBmaXJzdCBmbHVzaCBhbGwgcXVldWVkIGFjdGlvbnMsIGFuZCBpbiBjYXNlIGl0IGhhcyBleHRlbmRlZCBhbiBvYmplY3QsIHdpbGwgcmVzdG9yZSB0aGUgb3JpZ2luYWwgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5mbHVzaCgpO1xuXG4gICAgaWYgKHRoaXMuX2V4dGVuZGVkKSB7XG4gICAgICBjb25zdCBvYmplY3QgPSB0aGlzLl9leHRlbmRlZC5vYmplY3Q7XG4gICAgICBjb25zdCBtZXRob2RzID0gdGhpcy5fZXh0ZW5kZWQubWV0aG9kcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBtZXRob2QgPSBtZXRob2RzW2ldO1xuICAgICAgICBpZiAobWV0aG9kLm9yaWdpbmFsKSB7XG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICAob2JqZWN0IGFzIGFueSlbbWV0aG9kLm5hbWVdID0gbWV0aG9kLm9yaWdpbmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEBUT0RPOiBiZXR0ZXIgc29sdXRpb24/XG4gICAgICAgICAgZGVsZXRlIChvYmplY3QgYXMgYW55KVttZXRob2QubmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX2V4dGVuZGVkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhIG1ldGhvZCBvbiBhbiBvYmplY3Qgd2l0aCBhIHF1ZXVlZCB2ZXJzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IGhhdmluZyB0aGUgbWV0aG9kLlxuICAgKiBAcGFyYW0gbWV0aG9kIC0gVGhlIG1ldGhvZCBuYW1lLlxuICAgKi9cbiAgcHVibGljIHJlcGxhY2U8TSBleHRlbmRzIHN0cmluZz4oXG4gICAgb2JqZWN0OiBSZWNvcmQ8TSwgKCkgPT4gdm9pZD4sXG4gICAgbWV0aG9kOiBNXG4gICk6IHZvaWQge1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcyAtLSBGdW5jdGlvbiB0aGlzIGlzIG5lY2Vzc2FyeSBpbiB0aGUgZnVuY3Rpb24gYmVsbG93LCBzbyBjbGFzcyB0aGlzIGhhcyB0byBiZSBzYXZlZCBpbnRvIGEgdmFyaWFibGUgaGVyZS4gKi9cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kXTtcbiAgICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2QgXCIgKyBtZXRob2QgKyBcIiB1bmRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgb2JqZWN0W21ldGhvZF0gPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAvLyBhZGQgdGhpcyBjYWxsIHRvIHRoZSBxdWV1ZVxuICAgICAgbWUucXVldWUoe1xuICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICBmbjogb3JpZ2luYWwsXG4gICAgICAgIGNvbnRleHQ6IHRoaXMsXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFF1ZXVlIGEgY2FsbC5cbiAgICpcbiAgICogQHBhcmFtIGVudHJ5IC0gVGhlIGZ1bmN0aW9uIG9yIGVudHJ5IHRvIGJlIHF1ZXVlZC5cbiAgICovXG4gIHB1YmxpYyBxdWV1ZShlbnRyeTogUXVldWVDYWxsRW50cnkpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goeyBmbjogZW50cnkgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goZW50cnkpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZsdXNoSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBxdWV1ZSBuZWVkcyB0byBiZSBmbHVzaGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmx1c2hJZk5lZWRlZCgpOiB2b2lkIHtcbiAgICAvLyBmbHVzaCB3aGVuIHRoZSBtYXhpbXVtIGlzIGV4Y2VlZGVkLlxuICAgIGlmICh0aGlzLl9xdWV1ZS5sZW5ndGggPiB0aGlzLm1heCkge1xuICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICAgIC8vIGZsdXNoIGFmdGVyIGEgcGVyaW9kIG9mIGluYWN0aXZpdHkgd2hlbiBhIGRlbGF5IGlzIGNvbmZpZ3VyZWRcbiAgICBpZiAodGhpcy5fdGltZW91dCAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiB0eXBlb2YgdGhpcy5kZWxheSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9LCB0aGlzLmRlbGF5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggYWxsIHF1ZXVlZCBjYWxsc1xuICAgKi9cbiAgcHVibGljIGZsdXNoKCk6IHZvaWQge1xuICAgIHRoaXMuX3F1ZXVlLnNwbGljZSgwKS5mb3JFYWNoKChlbnRyeSk6IHZvaWQgPT4ge1xuICAgICAgZW50cnkuZm4uYXBwbHkoZW50cnkuY29udGV4dCB8fCBlbnRyeS5mbiwgZW50cnkuYXJncyB8fCBbXSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBEYXRhSW50ZXJmYWNlLFxuICBFdmVudENhbGxiYWNrc1dpdGhBbnksXG4gIEV2ZW50TmFtZSxcbiAgRXZlbnROYW1lV2l0aEFueSxcbiAgRXZlbnRQYXlsb2FkcyxcbiAgSWQsXG4gIFBhcnRJdGVtLFxufSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG50eXBlIEV2ZW50U3Vic2NyaWJlcnM8SXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sIElkUHJvcCBleHRlbmRzIHN0cmluZz4gPSB7XG4gIFtOYW1lIGluIGtleW9mIEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+XTogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xufTtcblxuLyoqXG4gKiB7QGxpbmsgRGF0YVNldH0gY29kZSB0aGF0IGNhbiBiZSByZXVzZWQgaW4ge0BsaW5rIERhdGFWaWV3fSBvciBvdGhlciBzaW1pbGFyIGltcGxlbWVudGF0aW9ucyBvZiB7QGxpbmsgRGF0YUludGVyZmFjZX0uXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhU2V0UGFydDxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBpbXBsZW1lbnRzIFBpY2s8RGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+LCBcIm9uXCIgfCBcIm9mZlwiPlxue1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpYmVyczoge1xuICAgIFtOYW1lIGluIEV2ZW50TmFtZVdpdGhBbnldOiBFdmVudFN1YnNjcmliZXJzPEl0ZW0sIElkUHJvcD5bTmFtZV1bXTtcbiAgfSA9IHtcbiAgICBcIipcIjogW10sXG4gICAgYWRkOiBbXSxcbiAgICByZW1vdmU6IFtdLFxuICAgIHVwZGF0ZTogW10sXG4gIH07XG5cbiAgcHJvdGVjdGVkIF90cmlnZ2VyKFxuICAgIGV2ZW50OiBcImFkZFwiLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltcImFkZFwiXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICBwcm90ZWN0ZWQgX3RyaWdnZXIoXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG4gIHByb3RlY3RlZCBfdHJpZ2dlcihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIFRyaWdnZXIgYW4gZXZlbnRcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBFdmVudCBwYXlsb2FkLlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBJZCBvZiB0aGUgc2VuZGVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIF90cmlnZ2VyPE5hbWUgZXh0ZW5kcyBFdmVudE5hbWU+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltOYW1lXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkIHtcbiAgICBpZiAoKGV2ZW50IGFzIHN0cmluZykgPT09IFwiKlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdHJpZ2dlciBldmVudCAqXCIpO1xuICAgIH1cblxuICAgIFsuLi50aGlzLl9zdWJzY3JpYmVyc1tldmVudF0sIC4uLnRoaXMuX3N1YnNjcmliZXJzW1wiKlwiXV0uZm9yRWFjaChcbiAgICAgIChzdWJzY3JpYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIHN1YnNjcmliZXIoZXZlbnQsIHBheWxvYWQsIHNlbmRlcklkICE9IG51bGwgPyBzZW5kZXJJZCA6IG51bGwpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9uKFxuICAgIGV2ZW50OiBcIipcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwiYWRkXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiYWRkXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gYW4gZXZlbnQsIGFkZCBhbiBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHJlbWFya3MgTm9uLWZ1bmN0aW9uIGNhbGxiYWNrcyBhcmUgaWdub3JlZC5cbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgbWV0aG9kLlxuICAgKi9cbiAgcHVibGljIG9uPE5hbWUgZXh0ZW5kcyBFdmVudE5hbWVXaXRoQW55PihcbiAgICBldmVudDogTmFtZSxcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bTmFtZV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0ucHVzaChjYWxsYmFjayk7XG4gICAgfVxuICAgIC8vIEBUT0RPOiBNYXliZSB0aHJvdyBmb3IgaW52YWxpZCBjYWxsYmFja3M/XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCIqXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXVxuICApOiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCJhZGRcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvZmYoXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSBhbiBldmVudCwgcmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBJZiB0aGUgc2FtZSBjYWxsYmFjayB3YXMgc3Vic2NyaWJlZCBtb3JlIHRoYW4gb25jZSAqKmFsbCoqIG9jY3VyZW5jZXMgd2lsbCBiZSByZW1vdmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgb2ZmPE5hbWUgZXh0ZW5kcyBFdmVudE5hbWVXaXRoQW55PihcbiAgICBldmVudDogTmFtZSxcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bTmFtZV1cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaWJlcnNbZXZlbnRdID0gdGhpcy5fc3Vic2NyaWJlcnNbZXZlbnRdLmZpbHRlcihcbiAgICAgIChzdWJzY3JpYmVyKTogYm9vbGVhbiA9PiBzdWJzY3JpYmVyICE9PSBjYWxsYmFja1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9uIGluc3RlYWQgKFBTOiBEYXRhVmlldy5zdWJzY3JpYmUgPT09IERhdGFWaWV3Lm9uKS5cbiAgICovXG4gIHB1YmxpYyBzdWJzY3JpYmU6IERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5bXCJvblwiXSA9IERhdGFTZXRQYXJ0LnByb3RvdHlwZS5vbjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvZmYgaW5zdGVhZCAoUFM6IERhdGFWaWV3LnVuc3Vic2NyaWJlID09PSBEYXRhVmlldy5vZmYpLlxuICAgKi9cbiAgcHVibGljIHVuc3Vic2NyaWJlOiBEYXRhU2V0UGFydDxJdGVtLCBJZFByb3A+W1wib2ZmXCJdID1cbiAgICBEYXRhU2V0UGFydC5wcm90b3R5cGUub2ZmO1xuXG4gIC8qIGRldmVsYmxvY2s6c3RhcnQgKi9cbiAgcHVibGljIGdldCB0ZXN0TGVha1N1YnNjcmliZXJzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZXJzO1xuICB9XG4gIC8qIGRldmVsYmxvY2s6ZW5kICovXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYFNldGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LW9iamVjdHNcbmNvbGxlY3Rpb24oJ1NldCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlNldDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yO1xuIiwgImltcG9ydCB7IElkIH0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcblxuLyoqXG4gKiBEYXRhIHN0cmVhbVxuICpcbiAqIEByZW1hcmtzXG4gKiB7QGxpbmsgRGF0YVN0cmVhbX0gb2ZmZXJzIGFuIGFsd2F5cyB1cCB0byBkYXRlIHN0cmVhbSBvZiBpdGVtcyBmcm9tIGEge0BsaW5rIERhdGFTZXR9IG9yIHtAbGluayBEYXRhVmlld30uXG4gKiBUaGF0IG1lYW5zIHRoYXQgdGhlIHN0cmVhbSBpcyBldmFsdWF0ZWQgYXQgdGhlIHRpbWUgb2YgaXRlcmF0aW9uLCBjb252ZXJzaW9uIHRvIGFub3RoZXIgZGF0YSB0eXBlIG9yIHdoZW4ge0BsaW5rIGNhY2hlfSBpcyBjYWxsZWQsIG5vdCB3aGVuIHRoZSB7QGxpbmsgRGF0YVN0cmVhbX0gd2FzIGNyZWF0ZWQuXG4gKiBNdWx0aXBsZSBpbnZvY2F0aW9ucyBvZiBmb3IgZXhhbXBsZSB7QGxpbmsgdG9JdGVtQXJyYXl9IG1heSB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cyAoaWYgdGhlIGRhdGEgc291cmNlIGxpa2UgZm9yIGV4YW1wbGUge0BsaW5rIERhdGFTZXR9IGdldHMgbW9kaWZpZWQpLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gVGhlIGl0ZW0gdHlwZSB0aGlzIHN0cmVhbSBpcyBnb2luZyB0byB3b3JrIHdpdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU3RyZWFtPEl0ZW0+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+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHYgIT09IG51bGwgJiZcbiAgICBpZFByb3AgPT09IHYuaWRQcm9wICYmXG4gICAgdHlwZW9mIHYuZm9yRWFjaCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXREYXRhU2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXRJZHMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiB2Lm1hcCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYub2ZmID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuc3RyZWFtID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICBpc0RhdGFTZXRMaWtlKGlkUHJvcCwgdi5nZXREYXRhU2V0KCkpXG4gICk7XG59XG4iLCAiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbk9wdGlvbiB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvY29tYm9fYm94L3R5cGVzXCI7XG5pbXBvcnQge1xuICBFdWlDb21ib0JveCxcbiAgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0LFxuICBldWlQYWxldHRlQ29sb3JCbGluZCxcbiAgRXVpSGlnaGxpZ2h0LFxuICBFdWlIZWFsdGgsXG4gIEV1aVByb3ZpZGVyLFxuICBFdWlJY29uXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4uL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvblwiO1xuXG4vKipcbiAqIEEgUmVhY3QgY29tcG9uZW50IHRvIHByb3ZpZGUgQXV0b3N1Z2dlc3Rpb24gYmFzZWQgb24gU2VtTG9va1AuXG4gKi9cbmZ1bmN0aW9uIEF1dG9jb21wbGV0ZVdpZGdldChwcm9wczogQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgaGFzU2hvcnRTZWxlY3RlZExhYmVsLFxuICAgIGFsbG93Q3VzdG9tVGVybXMsXG4gICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LFxuICAgIHByZXNlbGVjdGVkLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHNpbmdsZVNlbGVjdGlvbixcbiAgICBzaW5nbGVTdWdnZXN0aW9uUm93LFxuICAgIHRzNG5mZGlHYXRld2F5ID0gZmFsc2UsXG4gICAgc2hvd0FwaVNvdXJjZSA9IHRydWUsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHZpc0NvbG9ycyA9IGV1aVBhbGV0dGVDb2xvckJsaW5kKCk7XG4gIGNvbnN0IHZpc0NvbG9yc0JlaGluZFRleHQgPSBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQoKTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgc2VhcmNoIHZhbHVlXG4gICAqL1xuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgYXZhaWxhYmxlIG9wdGlvbnMuc1xuICAgKi9cbiAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gdXNlU3RhdGU8QXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4+KFtdKTtcblxuICAvKipcbiAgICogU3RvcmUgY3VycmVudCBzZXQgb2Ygc2VsZWN0IE9wdGlvbnMuIEEgc3Vic2V0IG9mIG9wdGlvbnMuXG4gICAqL1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZE9wdGlvbnNdID0gdXNlU3RhdGU8QXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4+KFtdKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgcmVuZGVyT3B0aW9uID0gKG9wdGlvbiwgc2VhcmNoVmFsdWUpID0+IHtcbiAgICBjb25zdCB7IGxhYmVsLCB2YWx1ZSB9ID0gb3B0aW9uO1xuICAgIGNvbnN0IGRvdENvbG9ySW5kZXggPSB2aXNDb2xvcnNCZWhpbmRUZXh0LmluZGV4T2YodmFsdWUudHlwZSA9PT0gXCJjbGFzc1wiID8gdmlzQ29sb3JzQmVoaW5kVGV4dFs1XSA6XG4gICAgICB2YWx1ZS50eXBlID09PSBcImluZGl2aWR1YWxcIiA/IHZpc0NvbG9yc0JlaGluZFRleHRbM10gOlxuICAgICAgICB2YWx1ZS50eXBlID09PSBcInByb3BlcnR5XCIgPyB2aXNDb2xvcnNCZWhpbmRUZXh0WzFdIDogXCJcIik7XG4gICAgY29uc3QgZG90Q29sb3IgPSB2aXNDb2xvcnNbZG90Q29sb3JJbmRleF07XG5cbiAgICBpZiAoYWxsb3dDdXN0b21UZXJtcyAmJiB2YWx1ZS5pcmkgPT0gXCJcIikgey8vIGlmIHdlIGhhdmUgYSBjdXN0b20gdGVybSwganVzdCBzaG93IHRoZSBsYWJlbFxuICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH1cblxuICAgIGxldCBwcmVmaXggPSAodmFsdWUudHlwZSA9PT0gXCJvbnRvbG9neVwiKVxuICAgICAgPyBcIlByZWZpeDogXCIgKyB2YWx1ZS5vbnRvbG9neV9uYW1lXG4gICAgICA6IFwiUHJlZml4ID4gU2hvcnQgZm9ybTogXCIgKyB2YWx1ZS5vbnRvbG9neV9uYW1lICsgXCIgPiBcIiArIHZhbHVlLnNob3J0X2Zvcm07XG5cbiAgICBsZXQgaG92ZXJUZXh0ID0gYFR5cGU6ICR7dmFsdWUudHlwZX1cXG5cXG5MYWJlbDogJHt2YWx1ZS5sYWJlbH1cXG5cXG4ke3ByZWZpeH1gO1xuICAgIGlmICh2YWx1ZS5kZXNjcmlwdGlvbiAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGhvdmVyVGV4dCArPSBgXFxuXFxuRGVzY3JpcHRpb246ICR7dmFsdWUuZGVzY3JpcHRpb259YDtcbiAgICB9XG4gICAgaWYgKHNob3dBcGlTb3VyY2UgJiYgdmFsdWUuc291cmNlX3VybCAmJiB2YWx1ZS5zb3VyY2VfdXJsICE9PSBcIlwiKXtcbiAgICAgIGhvdmVyVGV4dCArPSBcIlxcblxcblNvdXJjZTogXCIgKyB2YWx1ZS5zb3VyY2U7XG4gICAgICBob3ZlclRleHQgKz0gXCJcXG5cXG5Tb3VyY2UgVVJMOiBcIiArIHZhbHVlLnNvdXJjZV91cmw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyT250b2xvZ3kgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RXVpSGVhbHRoXG4gICAgICAgICAgY29sb3I9e2RvdENvbG9yfT5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICA8RXVpSGlnaGxpZ2h0IHNlYXJjaD17c2VhcmNoVmFsdWV9Pnt2YWx1ZS5sYWJlbH08L0V1aUhpZ2hsaWdodD5cbiAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgIHt2YWx1ZS5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L0V1aUhlYWx0aD5cbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckVudGl0eVdpdGhEZXNjcmlwdGlvbiA9ICgpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuIHRpdGxlPXtob3ZlclRleHR9IHN0eWxlPXt7IGhlaWdodDogMjAwICsgXCJweFwiIH19PlxuICAgICAgICAgICAgPEV1aUhlYWx0aFxuICAgICAgICAgICAgICBjb2xvcj17ZG90Q29sb3J9PlxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICA8RXVpSGlnaGxpZ2h0IHNlYXJjaD17c2VhcmNoVmFsdWV9Pnt2YWx1ZS5sYWJlbH08L0V1aUhpZ2hsaWdodD5cbiAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1xuICAgICAgICAgICAgICAgICAgPEJyZWFkY3J1bWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lOYW1lPXt2YWx1ZS5vbnRvbG9neV9uYW1lfVxuICAgICAgICAgICAgICAgICAgICBzaG9ydEZvcm09e3ZhbHVlLnNob3J0X2Zvcm19XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yRmlyc3Q9e1wicHJpbWFyeVwifVxuICAgICAgICAgICAgICAgICAgICBjb2xvclNlY29uZD17XCJzdWNjZXNzXCJ9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPEV1aUljb25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT17XCJpSW5DaXJjbGVcIn1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogNSB9fVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17aG92ZXJUZXh0fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIHshc2luZ2xlU3VnZ2VzdGlvblJvdyAmJiB2YWx1ZS5kZXNjcmlwdGlvbiAmJlxuICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAge3ZhbHVlLmRlc2NyaXB0aW9uLnN1YnN0cmluZygwLCA0MCkgKyBcIi4uLlwifVxuICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvRXVpSGVhbHRoPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH07XG5cbiAgICByZXR1cm4gdmFsdWUudHlwZSA9PT0gXCJvbnRvbG9neVwiID8gcmVuZGVyT250b2xvZ3koKSA6IHJlbmRlckVudGl0eVdpdGhEZXNjcmlwdGlvbigpO1xuICB9O1xuXG4gICAgLyoqXG4gICAgICogb24gbW91bnQ6IGZldGNoZXMgdGVybSBmb3IgcHJlc2VsZWN0ZWRcbiAgICAgKiBzZXRzIGl0cyBsYWJlbCBvciBzZXRzIGEgZ2l2ZW4gbGFiZWwgaWYgbm8gaXJpIGlzIHByb3ZpZGVkL3RoZSBnaXZlbiBpcmkgY2Fubm90IGJlIHJlc29sdmVkXG4gICAgICogb25seSBpZiBhbGxvd0N1c3RvbVRlcm1zIGlzIHRydWVcbiAgICAgKi9cbiAgICBjb25zdCB7XG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nT25Nb3VudFxuICAgIH0gPSB1c2VRdWVyeShcbiAgICAgICAgW1xuICAgICAgICAgICAgXCJvbk1vdW50XCIsXG4gICAgICAgICAgICBwcmVzZWxlY3RlZFxuICAgICAgICBdLFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcHJlc2VsZWN0ZWRWYWx1ZXM6IEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT5bXSA9IFtdO1xuXG4gICAgICBsZXQgdW5pcXVlVmFsdWVzID0gWy4uLm5ldyBTZXQocHJlc2VsZWN0ZWQpXVxuICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgICByZXR1cm4gKGFsbG93Q3VzdG9tVGVybXMgJiYgb3B0aW9uLmxhYmVsKSB8fCBvcHRpb24uaXJpO1xuICAgICAgICB9KTtcblxuICAgICAgaWYgKHVuaXF1ZVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24pIHVuaXF1ZVZhbHVlcyA9IFt1bmlxdWVWYWx1ZXNbMF1dO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgdW5pcXVlVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24gJiYgb3B0aW9uLmlyaSAmJiBvcHRpb24uaXJpLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgb2xzQXBpLmdldFNlbGVjdERhdGEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3F1ZXJ5OiBvcHRpb24uaXJpfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcixcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzNG5mZGlHYXRld2F5XG4gICAgICAgICAgICAgICAgICAgICAgICApLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb3BlcnRpZXMubWFwKChzZWxlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5pcmkgPT09IHNlbGVjdGlvbi5nZXRJcmkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbGVjdGVkVmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsYWJlbCB0byBkaXNwbGF5IHdpdGhpbiB0aGUgY29tYm9ib3ggZWl0aGVyIHJhdyB2YWx1ZSBvciBnZW5lcmF0ZWQgb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICNyZW5kZXJPcHRpb24oKSBpcyB1c2VkIHRvIGRpc3BsYXkgZHVyaW5nIHNlbGVjdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGhhc1Nob3J0U2VsZWN0ZWRMYWJlbCA/IHNlbGVjdGlvbi5nZXRMYWJlbCgpIDogZ2VuZXJhdGVEaXNwbGF5TGFiZWwoc2VsZWN0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2V5IHRvIGRpc3Rpbmd1aXNoIHRoZSBvcHRpb25zIChlc3BlY2lhbGx5IHRob3NlIHdpdGggc2FtZSBsYWJlbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBzZWxlY3Rpb24uZ2V0SXJpKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcmk6IHNlbGVjdGlvbi5nZXRJcmkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzZWxlY3Rpb24uZ2V0TGFiZWwoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IHNlbGVjdGlvbi5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBzZWxlY3Rpb24uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZm9ybTogc2VsZWN0aW9uLmdldFNob3J0Rm9ybSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHNlbGVjdGlvbi5nZXREZXNjcmlwdGlvbigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBzZWxlY3Rpb24uZ2V0QXBpU291cmNlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3VybDogc2VsZWN0aW9uLmdldEFwaVNvdXJjZUVuZHBvaW50KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gJiYgcHJlc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID4gMSkgcHJlc2VsZWN0ZWRWYWx1ZXMgPSBbcHJlc2VsZWN0ZWRWYWx1ZXNbMF1dO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbiAmJiBvcHRpb24ubGFiZWwgJiYgYWxsb3dDdXN0b21UZXJtcykge1xuICAgICAgICAgICAgcHJlc2VsZWN0ZWRWYWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgIGxhYmVsOiBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgICAgIGtleTogb3B0aW9uLmxhYmVsLFxuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIGlyaTogXCJcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJcIixcbiAgICAgICAgICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgICAgICAgICAgc2hvcnRfZm9ybTogXCJcIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgICAgICAgICBzb3VyY2U6IFwiXCIsXG4gICAgICAgICAgICAgICAgc291cmNlX3VybDogXCJcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZXRPcHRpb25zKHByZXNlbGVjdGVkVmFsdWVzKTtcbiAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKHByZXNlbGVjdGVkVmFsdWVzKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG5cbiAgLyoqXG4gICAqIGZldGNoZXMgbmV3IG9wdGlvbnMgd2hlbiBzZWFyY2hWYWx1ZSBjaGFuZ2VzXG4gICAqL1xuICBjb25zdCB7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdUZXJtc1xuICB9ID0gdXNlUXVlcnkoXG4gICAgW1xuICAgICAgXCJvblNlYXJjaENoYW5nZVwiLFxuICAgICAgc2VhcmNoVmFsdWVcbiAgICBdLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChzZWFyY2hWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBvbHNBcGkuZ2V0U2VsZWN0RGF0YShcbiAgICAgICAgICB7IHF1ZXJ5OiBzZWFyY2hWYWx1ZSB9LFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgIHRzNG5mZGlHYXRld2F5XG4gICAgICAgICkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHNldE9wdGlvbnMocmVzcG9uc2UucHJvcGVydGllcy5tYXAoKHNlbGVjdGlvbjogYW55KSA9PiAoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBsYWJlbCB0byBkaXNwbGF5IHdpdGhpbiB0aGUgY29tYm9ib3ggZWl0aGVyIHJhdyB2YWx1ZSBvciBnZW5lcmF0ZWQgb25lXG4gICAgICAgICAgICAgICAgLy8gI3JlbmRlck9wdGlvbigpIGlzIHVzZWQgdG8gZGlzcGxheSBkdXJpbmcgc2VsZWN0aW9uLlxuICAgICAgICAgICAgICAgIGxhYmVsOiBoYXNTaG9ydFNlbGVjdGVkTGFiZWwgPyBzZWxlY3Rpb24uZ2V0TGFiZWwoKSA6IGdlbmVyYXRlRGlzcGxheUxhYmVsKHNlbGVjdGlvbiksXG4gICAgICAgICAgICAgICAgLy8ga2V5IHRvIGRpc3Rpbmd1aXNoIHRoZSBvcHRpb25zIChlc3BlY2lhbGx5IHRob3NlIHdpdGggc2FtZSBsYWJlbClcbiAgICAgICAgICAgICAgICBrZXk6IHNlbGVjdGlvbi5nZXRJcmkoKSxcbiAgICAgICAgICAgICAgICAvLyB2YWx1ZXMgdG8gcGFzcyB0byBjbGllbnRzXG4gICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgIGlyaTogc2VsZWN0aW9uLmdldElyaSgpLFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IHNlbGVjdGlvbi5nZXRMYWJlbCgpLFxuICAgICAgICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogc2VsZWN0aW9uLmdldE9udG9sb2d5SWQoKSxcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHNlbGVjdGlvbi5nZXRUeXBlKCksXG4gICAgICAgICAgICAgICAgICBzaG9ydF9mb3JtOiBzZWxlY3Rpb24uZ2V0U2hvcnRGb3JtKCksXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc2VsZWN0aW9uLmdldERlc2NyaXB0aW9uKCksXG4gICAgICAgICAgICAgICAgICBzb3VyY2U6IHNlbGVjdGlvbi5nZXRBcGlTb3VyY2VOYW1lKCksXG4gICAgICAgICAgICAgICAgICBzb3VyY2VfdXJsOiBzZWxlY3Rpb24uZ2V0QXBpU291cmNlRW5kcG9pbnQoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIC8qKlxuICAgKiBPbmNlIHRoZSBzZXQgb2Ygc2VsZWN0ZWQgb3B0aW9ucyBjaGFuZ2VzLCBwYXNzIHRoZSBldmVudCBieSBpbnZva2luZyB0aGUgcGFzc2VkIGZ1bmN0aW9uLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQoXG4gICAgICBzZWxlY3RlZE9wdGlvbnMubWFwKCh4KSA9PiB7XG4gICAgICAgIC8vIHJldHVybiB0aGUgdmFsdWUgb2JqZWN0IHdpdGggdGhlIHJhdyB2YWx1ZXMgZnJvbSBPTFMgdG8gYSBjbGllbnRcbiAgICAgICAgaWYgKGFsbG93Q3VzdG9tVGVybXMgJiYgeC52YWx1ZS5pcmkgPT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IFwiXCIsXG4gICAgICAgICAgICBsYWJlbDogeC5sYWJlbCxcbiAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IFwiXCIsXG4gICAgICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICAgICAgc2hvcnRfZm9ybTogeC52YWx1ZS5zaG9ydF9mb3JtLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHgudmFsdWUuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBzb3VyY2U6IHgudmFsdWUuc291cmNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICh4LnZhbHVlLmlyaSA9PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogXCJcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIlwiLFxuICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogXCJcIixcbiAgICAgICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgICAgICBzaG9ydF9mb3JtOiBcIlwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgICAgICAgICBzb3VyY2U6IFwiXCJcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IHgudmFsdWUuaXJpLFxuICAgICAgICAgICAgbGFiZWw6IHgudmFsdWUubGFiZWwsXG4gICAgICAgICAgICBvbnRvbG9neV9uYW1lOiB4LnZhbHVlLm9udG9sb2d5X25hbWUsXG4gICAgICAgICAgICB0eXBlOiB4LnZhbHVlLnR5cGUsXG4gICAgICAgICAgICBzaG9ydF9mb3JtOiB4LnZhbHVlLnNob3J0X2Zvcm0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogeC52YWx1ZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNvdXJjZTogeC52YWx1ZS5zb3VyY2VcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtzZWxlY3RlZE9wdGlvbnNdKTtcblxuICBmdW5jdGlvbiBnZW5lcmF0ZURpc3BsYXlMYWJlbChpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXRlbS5sYWJlbCArXG4gICAgICBcIiAoXCIgK1xuICAgICAgaXRlbS5vbnRvbG9neV9uYW1lLnRvVXBwZXJDYXNlKCkgK1xuICAgICAgXCIgXCIgK1xuICAgICAgaXRlbS5zaG9ydF9mb3JtICtcbiAgICAgIFwiKVwiXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2hhbmdlSGFuZGxlcihvcHRpb25zOiBBcnJheTxhbnk+KTogdm9pZCB7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DcmVhdGVPcHRpb25IYW5kbGVyKHNlYXJjaFZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuZXdPcHRpb24gPSB7XG4gICAgICBsYWJlbDogc2VhcmNoVmFsdWUsXG4gICAgICB2YWx1ZToge1xuICAgICAgICBpcmk6IFwiXCIsXG4gICAgICAgIGxhYmVsOiBcIlwiLFxuICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICBzaG9ydF9mb3JtOiBcIlwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgc291cmNlOiBcIlwiXG4gICAgICB9XG4gICAgfTtcblxuICAgIHNldE9wdGlvbnMoWy4uLm9wdGlvbnMsIG5ld09wdGlvbl0pO1xuICAgIHNldFNlbGVjdGVkT3B0aW9ucyhzaW5nbGVTZWxlY3Rpb24gPyBbbmV3T3B0aW9uXSA6IFsuLi5zZWxlY3RlZE9wdGlvbnMsIG5ld09wdGlvbl0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpQ29tYm9Cb3hcbiAgICAgIGlzQ2xlYXJhYmxlXG4gICAgICBhcmlhLWxhYmVsPVwic2VhcmNoQmFyXCJcbiAgICAgIGZ1bGxXaWR0aD17dHJ1ZX1cbiAgICAgIHsuLi5yZXN0fSAvLyBpdGVtcyBhYm92ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIGNsaWVudFxuICAgICAgYXN5bmM9e3RydWV9XG4gICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ1Rlcm1zIHx8IGlzTG9hZGluZ09uTW91bnR9XG4gICAgICBzaW5nbGVTZWxlY3Rpb249e3NpbmdsZVNlbGVjdGlvbiA/IHsgYXNQbGFpblRleHQ6IHRydWUgfSA6IGZhbHNlfVxuICAgICAgcGxhY2Vob2xkZXI9e1xuICAgICAgICBwbGFjZWhvbGRlciA/IHBsYWNlaG9sZGVyIDogXCJTZWFyY2ggZm9yIGEgQ29uY2VwdFwiXG4gICAgICB9XG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgc2VsZWN0ZWRPcHRpb25zPXtzZWxlY3RlZE9wdGlvbnN9XG4gICAgICBvblNlYXJjaENoYW5nZT17c2V0U2VhcmNoVmFsdWV9XG4gICAgICBvbkNoYW5nZT17b25DaGFuZ2VIYW5kbGVyfVxuICAgICAgcmVuZGVyT3B0aW9uPXtyZW5kZXJPcHRpb259XG4gICAgICBvbkNyZWF0ZU9wdGlvbj17YWxsb3dDdXN0b21UZXJtcyA/IG9uQ3JlYXRlT3B0aW9uSGFuZGxlciA6IHVuZGVmaW5lZH1cbiAgICAgIHJvd0hlaWdodD17c2luZ2xlU3VnZ2VzdGlvblJvdyA/IDMwIDogNTB9XG4gICAgLz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXV0b2NvbXBsZXRlKHByb3BzOiBBdXRvY29tcGxldGVXaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEF1dG9jb21wbGV0ZVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkQXV0b2NvbXBsZXRlV2lkZ2V0KHByb3BzOiBBdXRvY29tcGxldGVXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgPEF1dG9jb21wbGV0ZVdpZGdldFxuICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudD17cHJvcHMuc2VsZWN0aW9uQ2hhbmdlZEV2ZW50fVxuICAgICAgICBwcmVzZWxlY3RlZD17cHJvcHMucHJlc2VsZWN0ZWR9XG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbj17cHJvcHMuc2luZ2xlU2VsZWN0aW9ufVxuICAgICAgICBwbGFjZWhvbGRlcj17cHJvcHMucGxhY2Vob2xkZXJ9XG4gICAgICAgIGhhc1Nob3J0U2VsZWN0ZWRMYWJlbD17cHJvcHMuaGFzU2hvcnRTZWxlY3RlZExhYmVsfVxuICAgICAgICBhbGxvd0N1c3RvbVRlcm1zPXtwcm9wcy5hbGxvd0N1c3RvbVRlcm1zfVxuICAgICAgICB0czRuZmRpR2F0ZXdheT17cHJvcHMudHM0bmZkaUdhdGV3YXl9XG4gICAgICAgIHNpbmdsZVN1Z2dlc3Rpb25Sb3c9e3Byb3BzLnNpbmdsZVN1Z2dlc3Rpb25Sb3d9XG4gICAgICAgIHNob3dBcGlTb3VyY2U9e3Byb3BzLnNob3dBcGlTb3VyY2V9XG4gICAgICAvPlxuICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQXV0b2NvbXBsZXRlV2lkZ2V0LCBjcmVhdGVBdXRvY29tcGxldGUgfTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn1cblxuY29uc3QgdHlwZU9mVGVzdCA9IHR5cGUgPT4gdGhpbmcgPT4gdHlwZW9mIHRoaW5nID09PSB0eXBlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiBpc0Z1bmN0aW9uKHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gdGhpbmcgPT4gdGhpbmcgPT09IHRydWUgfHwgdGhpbmcgPT09IGZhbHNlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgbGV0IGtpbmQ7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG5jb25zdCBbaXNSZWFkYWJsZVN0cmVhbSwgaXNSZXF1ZXN0LCBpc1Jlc3BvbnNlLCBpc0hlYWRlcnNdID0gWydSZWFkYWJsZVN0cmVhbScsICdSZXF1ZXN0JywgJ1Jlc3BvbnNlJywgJ0hlYWRlcnMnXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufVxuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSA9ICt2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn1cblxuY29uc3QgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonXG5cbmNvbnN0IERJR0lUID0gJzAxMjM0NTY3ODknO1xuXG5jb25zdCBBTFBIQUJFVCA9IHtcbiAgRElHSVQsXG4gIEFMUEhBLFxuICBBTFBIQV9ESUdJVDogQUxQSEEgKyBBTFBIQS50b1VwcGVyQ2FzZSgpICsgRElHSVRcbn1cblxuY29uc3QgZ2VuZXJhdGVTdHJpbmcgPSAoc2l6ZSA9IDE2LCBhbHBoYWJldCA9IEFMUEhBQkVULkFMUEhBX0RJR0lUKSA9PiB7XG4gIGxldCBzdHIgPSAnJztcbiAgY29uc3Qge2xlbmd0aH0gPSBhbHBoYWJldDtcbiAgd2hpbGUgKHNpemUtLSkge1xuICAgIHN0ciArPSBhbHBoYWJldFtNYXRoLnJhbmRvbSgpICogbGVuZ3RofDBdXG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIElmIHRoZSB0aGluZyBpcyBhIEZvcm1EYXRhIG9iamVjdCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB0aGluZyAtIFRoZSB0aGluZyB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50Rm9ybSh0aGluZykge1xuICByZXR1cm4gISEodGhpbmcgJiYgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIHRoaW5nW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiYgdGhpbmdbU3ltYm9sLml0ZXJhdG9yXSk7XG59XG5cbmNvbnN0IHRvSlNPTk9iamVjdCA9IChvYmopID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgQXJyYXkoMTApO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSwgaSkgPT4ge1xuXG4gICAgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIGlmIChzdGFjay5pbmRleE9mKHNvdXJjZSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICBzdGFja1tpXSA9IHNvdXJjZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcblxuICAgICAgICBmb3JFYWNoKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSwgaSArIDEpO1xuICAgICAgICAgICFpc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpICYmICh0YXJnZXRba2V5XSA9IHJlZHVjZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YWNrW2ldID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIHJldHVybiB2aXNpdChvYmosIDApO1xufVxuXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbi8vIG9yaWdpbmFsIGNvZGVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EaWdpdGFsQnJhaW5KUy9BeGlvc1Byb21pc2UvYmxvYi8xNmRlYWIxMzcxMGVjMDk3Nzk5MjIxMzFmM2ZhNTk1NDMyMGY4M2FiL2xpYi91dGlscy5qcyNMMTEtTDM0XG5cbmNvbnN0IF9zZXRJbW1lZGlhdGUgPSAoKHNldEltbWVkaWF0ZVN1cHBvcnRlZCwgcG9zdE1lc3NhZ2VTdXBwb3J0ZWQpID0+IHtcbiAgaWYgKHNldEltbWVkaWF0ZVN1cHBvcnRlZCkge1xuICAgIHJldHVybiBzZXRJbW1lZGlhdGU7XG4gIH1cblxuICByZXR1cm4gcG9zdE1lc3NhZ2VTdXBwb3J0ZWQgPyAoKHRva2VuLCBjYWxsYmFja3MpID0+IHtcbiAgICBfZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICh7c291cmNlLCBkYXRhfSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZSA9PT0gX2dsb2JhbCAmJiBkYXRhID09PSB0b2tlbikge1xuICAgICAgICBjYWxsYmFja3MubGVuZ3RoICYmIGNhbGxiYWNrcy5zaGlmdCgpKCk7XG4gICAgICB9XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgcmV0dXJuIChjYikgPT4ge1xuICAgICAgY2FsbGJhY2tzLnB1c2goY2IpO1xuICAgICAgX2dsb2JhbC5wb3N0TWVzc2FnZSh0b2tlbiwgXCIqXCIpO1xuICAgIH1cbiAgfSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLCBbXSkgOiAoY2IpID0+IHNldFRpbWVvdXQoY2IpO1xufSkoXG4gIHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicsXG4gIGlzRnVuY3Rpb24oX2dsb2JhbC5wb3N0TWVzc2FnZSlcbik7XG5cbmNvbnN0IGFzYXAgPSB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgIT09ICd1bmRlZmluZWQnID9cbiAgcXVldWVNaWNyb3Rhc2suYmluZChfZ2xvYmFsKSA6ICggdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MubmV4dFRpY2sgfHwgX3NldEltbWVkaWF0ZSk7XG5cbi8vICoqKioqKioqKioqKioqKioqKioqKlxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmcsXG4gIGlzTnVtYmVyLFxuICBpc0Jvb2xlYW4sXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JlYWRhYmxlU3RyZWFtLFxuICBpc1JlcXVlc3QsXG4gIGlzUmVzcG9uc2UsXG4gIGlzSGVhZGVycyxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZSxcbiAgc2V0SW1tZWRpYXRlOiBfc2V0SW1tZWRpYXRlLFxuICBhc2FwXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICBpZiAocmVzcG9uc2UpIHtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXMgPyByZXNwb25zZS5zdGF0dXMgOiBudWxsO1xuICB9XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHV0aWxzLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzXG4gICAgfTtcbiAgfVxufSk7XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zRXJyb3IucHJvdG90eXBlO1xuY29uc3QgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCcsXG4gICdFUlJfTk9UX1NVUFBPUlQnLFxuICAnRVJSX0lOVkFMSURfVVJMJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChjb2RlID0+IHtcbiAgZGVzY3JpcHRvcnNbY29kZV0gPSB7dmFsdWU6IGNvZGV9O1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF4aW9zRXJyb3IsIGRlc2NyaXB0b3JzKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUsICdpc0F4aW9zRXJyb3InLCB7dmFsdWU6IHRydWV9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbkF4aW9zRXJyb3IuZnJvbSA9IChlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpID0+IHtcbiAgY29uc3QgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcblxuICB1dGlscy50b0ZsYXRPYmplY3QoZXJyb3IsIGF4aW9zRXJyb3IsIGZ1bmN0aW9uIGZpbHRlcihvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBFcnJvci5wcm90b3R5cGU7XG4gIH0sIHByb3AgPT4ge1xuICAgIHJldHVybiBwcm9wICE9PSAnaXNBeGlvc0Vycm9yJztcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcblxuICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuXG4gIHJldHVybiBheGlvc0Vycm9yO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NFcnJvcjtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG4vLyB0ZW1wb3JhcnkgaG90Zml4IHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMgdW50aWwgQXhpb3NVUkxTZWFyY2hQYXJhbXMgaXMgcmVmYWN0b3JlZFxuaW1wb3J0IFBsYXRmb3JtRm9ybURhdGEgZnJvbSAnLi4vcGxhdGZvcm0vbm9kZS9jbGFzc2VzL0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscy5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscy5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGguY29uY2F0KGtleSkubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gIH0pLmpvaW4oZG90cyA/ICcuJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgYXJyYXkgaXMgYW4gYXJyYXkgYW5kIG5vbmUgb2YgaXRzIGVsZW1lbnRzIGFyZSB2aXNpdGFibGUsIHRoZW4gaXQncyBhIGZsYXQgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7XG4gIHJldHVybiB1dGlscy5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzLnRvRmxhdE9iamVjdCh1dGlscywge30sIG51bGwsIGZ1bmN0aW9uIGZpbHRlcihwcm9wKSB7XG4gIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy52aXNpdG9yXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tZXRhVG9rZW5zID0gdHJ1ZV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gW29wdGlvbnMuaW5kZXhlcyA9IGZhbHNlXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbi8qKlxuICogSXQgY29udmVydHMgYW4gb2JqZWN0IGludG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBmb3JtIGRhdGEuXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgLSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSwgb3B0aW9ucykge1xuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoUGxhdGZvcm1Gb3JtRGF0YSB8fCBGb3JtRGF0YSkoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0aW9ucyA9IHV0aWxzLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICBkb3RzOiBmYWxzZSxcbiAgICBpbmRleGVzOiBmYWxzZVxuICB9LCBmYWxzZSwgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGZvcm1EYXRhKTtcblxuICBpZiAoIXV0aWxzLmlzRnVuY3Rpb24odmlzaXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gbWV0YVRva2VucyA/IGtleSA6IGtleS5zbGljZSgwLCAtMik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh1dGlscy5pc0FycmF5KHZhbHVlKSAmJiBpc0ZsYXRBcnJheSh2YWx1ZSkpIHx8XG4gICAgICAgICgodXRpbHMuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSkgJiYgKGFyciA9IHV0aWxzLnRvQXJyYXkodmFsdWUpKVxuICAgICAgICApKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGF0aC5qb2luKCcuJykpO1xuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24gZWFjaChlbCwga2V5KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVyc1xuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICBidWlsZChlbCwgcGF0aCA/IHBhdGguY29uY2F0KGtleSkgOiBba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0Zvcm1EYXRhO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICAgICclMDAnOiAnXFx4MDAnXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnZlcnRlZCB0byBhIEZvcm1EYXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXIgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSk7XG4gIH0gOiBlbmNvZGU7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVycyBgOmAsIGAkYCwgYCxgLCBgK2AsIGBbYCwgYW5kIGBdYCB3aXRoIHRoZWlyXG4gKiBVUkkgZW5jb2RlZCBjb3VudGVycGFydHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/b2JqZWN0fSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBcbiAgY29uc3QgX2VuY29kZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUgfHwgZW5jb2RlO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZUZuID0gb3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZTtcblxuICBsZXQgc2VyaWFsaXplZFBhcmFtcztcblxuICBpZiAoc2VyaWFsaXplRm4pIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gc2VyaWFsaXplRm4ocGFyYW1zLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gdXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgICAgZm4oaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBGb3JtRGF0YSA6IG51bGw7XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyA/IEJsb2IgOiBudWxsXG4iLCAiaW1wb3J0IFVSTFNlYXJjaFBhcmFtcyBmcm9tICcuL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzJ1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJy4vY2xhc3Nlcy9Gb3JtRGF0YS5qcydcbmltcG9ydCBCbG9iIGZyb20gJy4vY2xhc3Nlcy9CbG9iLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtcyxcbiAgICBGb3JtRGF0YSxcbiAgICBCbG9iXG4gIH0sXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddXG59O1xuIiwgImNvbnN0IGhhc0Jyb3dzZXJFbnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG5jb25zdCBfbmF2aWdhdG9yID0gdHlwZW9mIG5hdmlnYXRvciA9PT0gJ29iamVjdCcgJiYgbmF2aWdhdG9yIHx8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlckVudiA9IGhhc0Jyb3dzZXJFbnYgJiZcbiAgKCFfbmF2aWdhdG9yIHx8IFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihfbmF2aWdhdG9yLnByb2R1Y3QpIDwgMCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmNvbnN0IG9yaWdpbiA9IGhhc0Jyb3dzZXJFbnYgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgfHwgJ2h0dHA6Ly9sb2NhbGhvc3QnO1xuXG5leHBvcnQge1xuICBoYXNCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudixcbiAgX25hdmlnYXRvciBhcyBuYXZpZ2F0b3IsXG4gIG9yaWdpblxufVxuIiwgImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuL25vZGUvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi9jb21tb24vdXRpbHMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIC4uLnV0aWxzLFxuICAuLi5wbGF0Zm9ybVxufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIE9iamVjdC5hc3NpZ24oe1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLCBuYW1lKS5tYXAobWF0Y2ggPT4ge1xuICAgIHJldHVybiBtYXRjaFswXSA9PT0gJ1tdJyA/ICcnIDogbWF0Y2hbMV0gfHwgbWF0Y2hbMF07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNvbnZlcnQgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBhcyB0aGUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9PYmplY3QoYXJyKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJyKTtcbiAgbGV0IGk7XG4gIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICBsZXQga2V5O1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIG9ialtrZXldID0gYXJyW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIEZvcm1EYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCBhbnk+IHwgbnVsbH0gVGhlIGNvbnZlcnRlZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGZvcm1EYXRhVG9KU09OKGZvcm1EYXRhKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0LCBpbmRleCkge1xuICAgIGxldCBuYW1lID0gcGF0aFtpbmRleCsrXTtcblxuICAgIGlmIChuYW1lID09PSAnX19wcm90b19fJykgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBOdW1iZXIuaXNGaW5pdGUoK25hbWUpO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID49IHBhdGgubGVuZ3RoO1xuICAgIG5hbWUgPSAhbmFtZSAmJiB1dGlscy5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscy5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscy5pc09iamVjdCh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldFtuYW1lXSwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiB1dGlscy5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscy5pc0Z1bmN0aW9uKGZvcm1EYXRhLmVudHJpZXMpKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JtRGF0YVRvSlNPTjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4vdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4uL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgdG9VUkxFbmNvZGVkRm9ybSBmcm9tICcuLi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogWyd4aHInLCAnaHR0cCcsICdmZXRjaCddLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSB8fCAnJztcbiAgICBjb25zdCBoYXNKU09OQ29udGVudFR5cGUgPSBjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgPiAtMTtcbiAgICBjb25zdCBpc09iamVjdFBheWxvYWQgPSB1dGlscy5pc09iamVjdChkYXRhKTtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMuaXNIVE1MRm9ybShkYXRhKSkge1xuICAgICAgZGF0YSA9IG5ldyBGb3JtRGF0YShkYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0Zvcm1EYXRhID0gdXRpbHMuaXNGb3JtRGF0YShkYXRhKTtcblxuICAgIGlmIChpc0Zvcm1EYXRhKSB7XG4gICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04JywgZmFsc2UpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgaXNGaWxlTGlzdDtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQpIHtcbiAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzLmlzRmlsZUxpc3QoZGF0YSkpIHx8IGNvbnRlbnRUeXBlLmluZGV4T2YoJ211bHRpcGFydC9mb3JtLWRhdGEnKSA+IC0xKSB7XG4gICAgICAgIGNvbnN0IF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhO1xuXG4gICAgICAgIHJldHVybiB0b0Zvcm1EYXRhKFxuICAgICAgICAgIGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsXG4gICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICB0aGlzLmZvcm1TZXJpYWxpemVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBoYXNKU09OQ29udGVudFR5cGUgKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgY29uc3QgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIGNvbnN0IGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICBjb25zdCBKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmICh1dGlscy5pc1Jlc3BvbnNlKGRhdGEpIHx8IHV0aWxzLmlzUmVhZGFibGVTdHJlYW0oZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmIChkYXRhICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXRoaXMucmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKSkge1xuICAgICAgY29uc3Qgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2JcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0cztcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscy50b09iamVjdFNldChbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCByYXdIZWFkZXJzID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiYgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBwYXJzZUhlYWRlcnMgZnJvbSAnLi4vaGVscGVycy9wYXJzZUhlYWRlcnMuanMnO1xuXG5jb25zdCAkaW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUb2tlbnMoc3RyKSB7XG4gIGNvbnN0IHRva2VucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRva2Vuc1JFID0gLyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZztcbiAgbGV0IG1hdGNoO1xuXG4gIHdoaWxlICgobWF0Y2ggPSB0b2tlbnNSRS5leGVjKHN0cikpKSB7XG4gICAgdG9rZW5zW21hdGNoWzFdXSA9IG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuY29uc3QgaXNWYWxpZEhlYWRlck5hbWUgPSAoc3RyKSA9PiAvXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KHN0ci50cmltKCkpO1xuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscy5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscy5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24oYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jbGFzcyBBeGlvc0hlYWRlcnMge1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHNldChoZWFkZXIsIHZhbHVlT3JSZXdyaXRlLCByZXdyaXRlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFsSGVhZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBsSGVhZGVyKTtcblxuICAgICAgaWYoIWtleSB8fCBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fCBfcmV3cml0ZSA9PT0gdHJ1ZSB8fCAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKSkge1xuICAgICAgICBzZWxmW2tleSB8fCBfaGVhZGVyXSA9IG5vcm1hbGl6ZVZhbHVlKF92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0SGVhZGVycyA9IChoZWFkZXJzLCBfcmV3cml0ZSkgPT5cbiAgICAgIHV0aWxzLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KGhlYWRlcikgfHwgaGVhZGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgc2V0SGVhZGVycyhoZWFkZXIsIHZhbHVlT3JSZXdyaXRlKVxuICAgIH0gZWxzZSBpZih1dGlscy5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkge1xuICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNIZWFkZXJzKGhlYWRlcikpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGhlYWRlci5lbnRyaWVzKCkpIHtcbiAgICAgICAgc2V0SGVhZGVyKHZhbHVlLCBrZXksIHJld3JpdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQoaGVhZGVyLCBwYXJzZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc1JlZ0V4cChwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyLmZvckVhY2goZGVsZXRlSGVhZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBjbGVhcihtYXRjaGVyKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICAgIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZighbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09IGZhbHNlICYmIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbJ0NvbnRlbnQtVHlwZScsICdDb250ZW50LUxlbmd0aCcsICdBY2NlcHQnLCAnQWNjZXB0LUVuY29kaW5nJywgJ1VzZXItQWdlbnQnLCAnQXV0aG9yaXphdGlvbiddKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscy5yZWR1Y2VEZXNjcmlwdG9ycyhBeGlvc0hlYWRlcnMucHJvdG90eXBlLCAoe3ZhbHVlfSwga2V5KSA9PiB7XG4gIGxldCBtYXBwZWQgPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTsgLy8gbWFwIGBzZXRgID0+IGBTZXRgXG4gIHJldHVybiB7XG4gICAgZ2V0OiAoKSA9PiB2YWx1ZSxcbiAgICBzZXQoaGVhZGVyVmFsdWUpIHtcbiAgICAgIHRoaXNbbWFwcGVkXSA9IGhlYWRlclZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnV0aWxzLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NIZWFkZXJzO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZm5zLCByZXNwb25zZSkge1xuICBjb25zdCBjb25maWcgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29udGV4dC5oZWFkZXJzKTtcbiAgbGV0IGRhdGEgPSBjb250ZXh0LmRhdGE7XG5cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xufVxuXG51dGlscy5pbmhlcml0cyhDYW5jZWxlZEVycm9yLCBBeGlvc0Vycm9yLCB7XG4gIF9fQ0FOQ0VMX186IHRydWVcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxlZEVycm9yO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9BeGlvc0Vycm9yLmpzJztcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICBbQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihyZXNwb25zZS5zdGF0dXMgLyAxMDApIC0gNF0sXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoYnl0ZXNDb3VudCAqIDEwMDAgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzcGVlZG9tZXRlcjtcbiIsICIvKipcbiAqIFRocm90dGxlIGRlY29yYXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7TnVtYmVyfSBmcmVxXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZm4sIGZyZXEpIHtcbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGxldCB0aHJlc2hvbGQgPSAxMDAwIC8gZnJlcTtcbiAgbGV0IGxhc3RBcmdzO1xuICBsZXQgdGltZXI7XG5cbiAgY29uc3QgaW52b2tlID0gKGFyZ3MsIG5vdyA9IERhdGUubm93KCkpID0+IHtcbiAgICB0aW1lc3RhbXAgPSBub3c7XG4gICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gIH1cblxuICBjb25zdCB0aHJvdHRsZWQgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcGFzc2VkID0gbm93IC0gdGltZXN0YW1wO1xuICAgIGlmICggcGFzc2VkID49IHRocmVzaG9sZCkge1xuICAgICAgaW52b2tlKGFyZ3MsIG5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RBcmdzID0gYXJncztcbiAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgaW52b2tlKGxhc3RBcmdzKVxuICAgICAgICB9LCB0aHJlc2hvbGQgLSBwYXNzZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4gbGFzdEFyZ3MgJiYgaW52b2tlKGxhc3RBcmdzKTtcblxuICByZXR1cm4gW3Rocm90dGxlZCwgZmx1c2hdO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0aHJvdHRsZTtcbiIsICJpbXBvcnQgc3BlZWRvbWV0ZXIgZnJvbSBcIi4vc3BlZWRvbWV0ZXIuanNcIjtcbmltcG9ydCB0aHJvdHRsZSBmcm9tIFwiLi90aHJvdHRsZS5qc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG5leHBvcnQgY29uc3QgcHJvZ3Jlc3NFdmVudFJlZHVjZXIgPSAobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0sIGZyZXEgPSAzKSA9PiB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIHRocm90dGxlKGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGUsXG4gICAgICBsZW5ndGhDb21wdXRhYmxlOiB0b3RhbCAhPSBudWxsLFxuICAgICAgW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddOiB0cnVlXG4gICAgfTtcblxuICAgIGxpc3RlbmVyKGRhdGEpO1xuICB9LCBmcmVxKTtcbn1cblxuZXhwb3J0IGNvbnN0IHByb2dyZXNzRXZlbnREZWNvcmF0b3IgPSAodG90YWwsIHRocm90dGxlZCkgPT4ge1xuICBjb25zdCBsZW5ndGhDb21wdXRhYmxlID0gdG90YWwgIT0gbnVsbDtcblxuICByZXR1cm4gWyhsb2FkZWQpID0+IHRocm90dGxlZFswXSh7XG4gICAgbGVuZ3RoQ29tcHV0YWJsZSxcbiAgICB0b3RhbCxcbiAgICBsb2FkZWRcbiAgfSksIHRocm90dGxlZFsxXV07XG59XG5cbmV4cG9ydCBjb25zdCBhc3luY0RlY29yYXRvciA9IChmbikgPT4gKC4uLmFyZ3MpID0+IHV0aWxzLmFzYXAoKCkgPT4gZm4oLi4uYXJncykpO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4vLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICBjb25zdCBtc2llID0gcGxhdGZvcm0ubmF2aWdhdG9yICYmIC8obXNpZXx0cmlkZW50KS9pLnRlc3QocGxhdGZvcm0ubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgY29uc3QgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGV0IG9yaWdpblVSTDtcblxuICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXRzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgIGxldCBocmVmID0gdXJsO1xuXG4gICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgIH1cblxuICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpO1xuIiwgImltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIHtcbiAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IFtuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKV07XG5cbiAgICAgIHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpICYmIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscy5pc1N0cmluZyhkb21haW4pICYmIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG5cbiAgICAgIHNlY3VyZSA9PT0gdHJ1ZSAmJiBjb29raWUucHVzaCgnc2VjdXJlJyk7XG5cbiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgIH0sXG5cbiAgICByZWFkKG5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgfSxcblxuICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgIH1cbiAgfVxuXG4gIDpcblxuICAvLyBOb24tc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIHtcbiAgICB3cml0ZSgpIHt9LFxuICAgIHJlYWQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZSgpIHt9XG4gIH07XG5cbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGlzQWJzb2x1dGVVUkwgZnJvbSAnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMLmpzJztcbmltcG9ydCBjb21iaW5lVVJMcyBmcm9tICcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vQXhpb3NIZWFkZXJzLmpzXCI7XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMgPyB7IC4uLnRoaW5nIH0gOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYikgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSwgdHJ1ZSlcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG4iLCAiaW1wb3J0IHBsYXRmb3JtIGZyb20gXCIuLi9wbGF0Zm9ybS9pbmRleC5qc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlscy5qc1wiO1xuaW1wb3J0IGlzVVJMU2FtZU9yaWdpbiBmcm9tIFwiLi9pc1VSTFNhbWVPcmlnaW4uanNcIjtcbmltcG9ydCBjb29raWVzIGZyb20gXCIuL2Nvb2tpZXMuanNcIjtcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gXCIuLi9jb3JlL2J1aWxkRnVsbFBhdGguanNcIjtcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tIFwiLi4vY29yZS9tZXJnZUNvbmZpZy5qc1wiO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCBidWlsZFVSTCBmcm9tIFwiLi9idWlsZFVSTC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IG1lcmdlQ29uZmlnKHt9LCBjb25maWcpO1xuXG4gIGxldCB7ZGF0YSwgd2l0aFhTUkZUb2tlbiwgeHNyZkhlYWRlck5hbWUsIHhzcmZDb29raWVOYW1lLCBoZWFkZXJzLCBhdXRofSA9IG5ld0NvbmZpZztcblxuICBuZXdDb25maWcuaGVhZGVycyA9IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShoZWFkZXJzKTtcblxuICBuZXdDb25maWcudXJsID0gYnVpbGRVUkwoYnVpbGRGdWxsUGF0aChuZXdDb25maWcuYmFzZVVSTCwgbmV3Q29uZmlnLnVybCksIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcblxuICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gIGlmIChhdXRoKSB7XG4gICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArXG4gICAgICBidG9hKChhdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChhdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgucGFzc3dvcmQpKSA6ICcnKSlcbiAgICApO1xuICB9XG5cbiAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpKSB7XG4gICAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiB8fCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUodW5kZWZpbmVkKTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpKSAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25zdCBbdHlwZSwgLi4udG9rZW5zXSA9IGNvbnRlbnRUeXBlID8gY29udGVudFR5cGUuc3BsaXQoJzsnKS5tYXAodG9rZW4gPT4gdG9rZW4udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikgOiBbXTtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoW3R5cGUgfHwgJ211bHRpcGFydC9mb3JtLWRhdGEnLCAuLi50b2tlbnNdLmpvaW4oJzsgJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB4c3JmIGhlYWRlclxuICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cblxuICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgd2l0aFhTUkZUb2tlbiAmJiB1dGlscy5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihuZXdDb25maWcpKTtcblxuICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4obmV3Q29uZmlnLnVybCkpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IHhzcmZIZWFkZXJOYW1lICYmIHhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZCh4c3JmQ29va2llTmFtZSk7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgaGVhZGVycy5zZXQoeHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0NvbmZpZztcbn1cblxuIiwgImltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBzZXR0bGUgZnJvbSAnLi8uLi9jb3JlL3NldHRsZS5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgcGFyc2VQcm90b2NvbCBmcm9tICcuLi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IHtwcm9ncmVzc0V2ZW50UmVkdWNlcn0gZnJvbSAnLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyc7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tIFwiLi4vaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzXCI7XG5cbmNvbnN0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCA9IHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCAmJiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgY29uc3QgX2NvbmZpZyA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBfY29uZmlnLmRhdGE7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShfY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgIGxldCB7cmVzcG9uc2VUeXBlLCBvblVwbG9hZFByb2dyZXNzLCBvbkRvd25sb2FkUHJvZ3Jlc3N9ID0gX2NvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBsZXQgdXBsb2FkVGhyb3R0bGVkLCBkb3dubG9hZFRocm90dGxlZDtcbiAgICBsZXQgZmx1c2hVcGxvYWQsIGZsdXNoRG93bmxvYWQ7XG5cbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZmx1c2hVcGxvYWQgJiYgZmx1c2hVcGxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG4gICAgICBmbHVzaERvd25sb2FkICYmIGZsdXNoRG93bmxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcblxuICAgICAgX2NvbmZpZy5zaWduYWwgJiYgX2NvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgcmVxdWVzdC5vcGVuKF9jb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIF9jb25maWcudXJsLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gX2NvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShcbiAgICAgICAgJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCAmJiByZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBfY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gX2NvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLnRvSlNPTigpLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChfY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFfY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBfY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKG9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgKFtkb3dubG9hZFRocm90dGxlZCwgZmx1c2hEb3dubG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvbkRvd25sb2FkUHJvZ3Jlc3MsIHRydWUpKTtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBkb3dubG9hZFRocm90dGxlZCk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAob25VcGxvYWRQcm9ncmVzcyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgKFt1cGxvYWRUaHJvdHRsZWQsIGZsdXNoVXBsb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uVXBsb2FkUHJvZ3Jlc3MpKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB1cGxvYWRUaHJvdHRsZWQpO1xuXG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZmx1c2hVcGxvYWQpO1xuICAgIH1cblxuICAgIGlmIChfY29uZmlnLmNhbmNlbFRva2VuIHx8IF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGNhbmNlbCA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChfY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBfY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogX2NvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woX2NvbmZpZy51cmwpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIHBsYXRmb3JtLnByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tIFwiLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanNcIjtcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbmNvbnN0IGNvbXBvc2VTaWduYWxzID0gKHNpZ25hbHMsIHRpbWVvdXQpID0+IHtcbiAgY29uc3Qge2xlbmd0aH0gPSAoc2lnbmFscyA9IHNpZ25hbHMgPyBzaWduYWxzLmZpbHRlcihCb29sZWFuKSA6IFtdKTtcblxuICBpZiAodGltZW91dCB8fCBsZW5ndGgpIHtcbiAgICBsZXQgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGxldCBhYm9ydGVkO1xuXG4gICAgY29uc3Qgb25hYm9ydCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIGlmICghYWJvcnRlZCkge1xuICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY29uc3QgZXJyID0gcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24gOiB0aGlzLnJlYXNvbjtcbiAgICAgICAgY29udHJvbGxlci5hYm9ydChlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yID8gZXJyIDogbmV3IENhbmNlbGVkRXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0aW1lciA9IHRpbWVvdXQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBvbmFib3J0KG5ldyBBeGlvc0Vycm9yKGB0aW1lb3V0ICR7dGltZW91dH0gb2YgbXMgZXhjZWVkZWRgLCBBeGlvc0Vycm9yLkVUSU1FRE9VVCkpXG4gICAgfSwgdGltZW91dClcblxuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgICAgaWYgKHNpZ25hbHMpIHtcbiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICBzaWduYWxzLmZvckVhY2goc2lnbmFsID0+IHtcbiAgICAgICAgICBzaWduYWwudW5zdWJzY3JpYmUgPyBzaWduYWwudW5zdWJzY3JpYmUob25hYm9ydCkgOiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNpZ25hbHMgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSk7XG5cbiAgICBjb25zdCB7c2lnbmFsfSA9IGNvbnRyb2xsZXI7XG5cbiAgICBzaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB1dGlscy5hc2FwKHVuc3Vic2NyaWJlKTtcblxuICAgIHJldHVybiBzaWduYWw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZVNpZ25hbHM7XG4iLCAiXG5leHBvcnQgY29uc3Qgc3RyZWFtQ2h1bmsgPSBmdW5jdGlvbiogKGNodW5rLCBjaHVua1NpemUpIHtcbiAgbGV0IGxlbiA9IGNodW5rLmJ5dGVMZW5ndGg7XG5cbiAgaWYgKCFjaHVua1NpemUgfHwgbGVuIDwgY2h1bmtTaXplKSB7XG4gICAgeWllbGQgY2h1bms7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBlbmQ7XG5cbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGVuZCA9IHBvcyArIGNodW5rU2l6ZTtcbiAgICB5aWVsZCBjaHVuay5zbGljZShwb3MsIGVuZCk7XG4gICAgcG9zID0gZW5kO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCByZWFkQnl0ZXMgPSBhc3luYyBmdW5jdGlvbiogKGl0ZXJhYmxlLCBjaHVua1NpemUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiByZWFkU3RyZWFtKGl0ZXJhYmxlKSkge1xuICAgIHlpZWxkKiBzdHJlYW1DaHVuayhjaHVuaywgY2h1bmtTaXplKTtcbiAgfVxufVxuXG5jb25zdCByZWFkU3RyZWFtID0gYXN5bmMgZnVuY3Rpb24qIChzdHJlYW0pIHtcbiAgaWYgKHN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICB5aWVsZCogc3RyZWFtO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgeWllbGQgdmFsdWU7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJlYWRlci5jYW5jZWwoKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdHJhY2tTdHJlYW0gPSAoc3RyZWFtLCBjaHVua1NpemUsIG9uUHJvZ3Jlc3MsIG9uRmluaXNoKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gcmVhZEJ5dGVzKHN0cmVhbSwgY2h1bmtTaXplKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgZG9uZTtcbiAgbGV0IF9vbkZpbmlzaCA9IChlKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIG9uRmluaXNoICYmIG9uRmluaXNoKGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgX29uRmluaXNoKCk7XG4gICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsZW4gPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICBpZiAob25Qcm9ncmVzcykge1xuICAgICAgICAgIGxldCBsb2FkZWRCeXRlcyA9IGJ5dGVzICs9IGxlbjtcbiAgICAgICAgICBvblByb2dyZXNzKGxvYWRlZEJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfb25GaW5pc2goZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2FuY2VsKHJlYXNvbikge1xuICAgICAgX29uRmluaXNoKHJlYXNvbik7XG4gICAgICByZXR1cm4gaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgfVxuICB9LCB7XG4gICAgaGlnaFdhdGVyTWFyazogMlxuICB9KVxufVxuIiwgImltcG9ydCBwbGF0Zm9ybSBmcm9tIFwiLi4vcGxhdGZvcm0vaW5kZXguanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcbmltcG9ydCBjb21wb3NlU2lnbmFscyBmcm9tIFwiLi4vaGVscGVycy9jb21wb3NlU2lnbmFscy5qc1wiO1xuaW1wb3J0IHt0cmFja1N0cmVhbX0gZnJvbSBcIi4uL2hlbHBlcnMvdHJhY2tTdHJlYW0uanNcIjtcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQge3Byb2dyZXNzRXZlbnRSZWR1Y2VyLCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yLCBhc3luY0RlY29yYXRvcn0gZnJvbSBcIi4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanNcIjtcbmltcG9ydCByZXNvbHZlQ29uZmlnIGZyb20gXCIuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanNcIjtcbmltcG9ydCBzZXR0bGUgZnJvbSBcIi4uL2NvcmUvc2V0dGxlLmpzXCI7XG5cbmNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlcXVlc3QgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlc3BvbnNlID09PSAnZnVuY3Rpb24nO1xuY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgdHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSAnZnVuY3Rpb24nO1xuXG4vLyB1c2VkIG9ubHkgaW5zaWRlIHRoZSBmZXRjaCBhZGFwdGVyXG5jb25zdCBlbmNvZGVUZXh0ID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAodHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID9cbiAgICAoKGVuY29kZXIpID0+IChzdHIpID0+IGVuY29kZXIuZW5jb2RlKHN0cikpKG5ldyBUZXh0RW5jb2RlcigpKSA6XG4gICAgYXN5bmMgKHN0cikgPT4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKHN0cikuYXJyYXlCdWZmZXIoKSlcbik7XG5cbmNvbnN0IHRlc3QgPSAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmNvbnN0IHN1cHBvcnRzUmVxdWVzdFN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiYgdGVzdCgoKSA9PiB7XG4gIGxldCBkdXBsZXhBY2Nlc3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgYm9keTogbmV3IFJlYWRhYmxlU3RyZWFtKCksXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgZ2V0IGR1cGxleCgpIHtcbiAgICAgIGR1cGxleEFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiAnaGFsZic7XG4gICAgfSxcbiAgfSkuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpO1xuXG4gIHJldHVybiBkdXBsZXhBY2Nlc3NlZCAmJiAhaGFzQ29udGVudFR5cGU7XG59KTtcblxuY29uc3QgREVGQVVMVF9DSFVOS19TSVpFID0gNjQgKiAxMDI0O1xuXG5jb25zdCBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJlxuICB0ZXN0KCgpID0+IHV0aWxzLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KSk7XG5cblxuY29uc3QgcmVzb2x2ZXJzID0ge1xuICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKChyZXMpID0+IHJlcy5ib2R5KVxufTtcblxuaXNGZXRjaFN1cHBvcnRlZCAmJiAoKChyZXMpID0+IHtcbiAgWyd0ZXh0JywgJ2FycmF5QnVmZmVyJywgJ2Jsb2InLCAnZm9ybURhdGEnLCAnc3RyZWFtJ10uZm9yRWFjaCh0eXBlID0+IHtcbiAgICAhcmVzb2x2ZXJzW3R5cGVdICYmIChyZXNvbHZlcnNbdHlwZV0gPSB1dGlscy5pc0Z1bmN0aW9uKHJlc1t0eXBlXSkgPyAocmVzKSA9PiByZXNbdHlwZV0oKSA6XG4gICAgICAoXywgY29uZmlnKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBSZXNwb25zZSB0eXBlICcke3R5cGV9JyBpcyBub3Qgc3VwcG9ydGVkYCwgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQsIGNvbmZpZyk7XG4gICAgICB9KVxuICB9KTtcbn0pKG5ldyBSZXNwb25zZSkpO1xuXG5jb25zdCBnZXRCb2R5TGVuZ3RoID0gYXN5bmMgKGJvZHkpID0+IHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYodXRpbHMuaXNCbG9iKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZTtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oYm9keSkpIHtcbiAgICBjb25zdCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5LFxuICAgIH0pO1xuICAgIHJldHVybiAoYXdhaXQgX3JlcXVlc3QuYXJyYXlCdWZmZXIoKSkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpIHx8IHV0aWxzLmlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoYm9keSkpIHtcbiAgICBib2R5ID0gYm9keSArICcnO1xuICB9XG5cbiAgaWYodXRpbHMuaXNTdHJpbmcoYm9keSkpIHtcbiAgICByZXR1cm4gKGF3YWl0IGVuY29kZVRleHQoYm9keSkpLmJ5dGVMZW5ndGg7XG4gIH1cbn1cblxuY29uc3QgcmVzb2x2ZUJvZHlMZW5ndGggPSBhc3luYyAoaGVhZGVycywgYm9keSkgPT4ge1xuICBjb25zdCBsZW5ndGggPSB1dGlscy50b0Zpbml0ZU51bWJlcihoZWFkZXJzLmdldENvbnRlbnRMZW5ndGgoKSk7XG5cbiAgcmV0dXJuIGxlbmd0aCA9PSBudWxsID8gZ2V0Qm9keUxlbmd0aChib2R5KSA6IGxlbmd0aDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNGZXRjaFN1cHBvcnRlZCAmJiAoYXN5bmMgKGNvbmZpZykgPT4ge1xuICBsZXQge1xuICAgIHVybCxcbiAgICBtZXRob2QsXG4gICAgZGF0YSxcbiAgICBzaWduYWwsXG4gICAgY2FuY2VsVG9rZW4sXG4gICAgdGltZW91dCxcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgb25VcGxvYWRQcm9ncmVzcyxcbiAgICByZXNwb25zZVR5cGUsXG4gICAgaGVhZGVycyxcbiAgICB3aXRoQ3JlZGVudGlhbHMgPSAnc2FtZS1vcmlnaW4nLFxuICAgIGZldGNoT3B0aW9uc1xuICB9ID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuXG4gIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSA/IChyZXNwb25zZVR5cGUgKyAnJykudG9Mb3dlckNhc2UoKSA6ICd0ZXh0JztcblxuICBsZXQgY29tcG9zZWRTaWduYWwgPSBjb21wb3NlU2lnbmFscyhbc2lnbmFsLCBjYW5jZWxUb2tlbiAmJiBjYW5jZWxUb2tlbi50b0Fib3J0U2lnbmFsKCldLCB0aW1lb3V0KTtcblxuICBsZXQgcmVxdWVzdDtcblxuICBjb25zdCB1bnN1YnNjcmliZSA9IGNvbXBvc2VkU2lnbmFsICYmIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlICYmICgoKSA9PiB7XG4gICAgICBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSgpO1xuICB9KTtcblxuICBsZXQgcmVxdWVzdENvbnRlbnRMZW5ndGg7XG5cbiAgdHJ5IHtcbiAgICBpZiAoXG4gICAgICBvblVwbG9hZFByb2dyZXNzICYmIHN1cHBvcnRzUmVxdWVzdFN0cmVhbSAmJiBtZXRob2QgIT09ICdnZXQnICYmIG1ldGhvZCAhPT0gJ2hlYWQnICYmXG4gICAgICAocmVxdWVzdENvbnRlbnRMZW5ndGggPSBhd2FpdCByZXNvbHZlQm9keUxlbmd0aChoZWFkZXJzLCBkYXRhKSkgIT09IDBcbiAgICApIHtcbiAgICAgIGxldCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgZHVwbGV4OiBcImhhbGZcIlxuICAgICAgfSk7XG5cbiAgICAgIGxldCBjb250ZW50VHlwZUhlYWRlcjtcblxuICAgICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgJiYgKGNvbnRlbnRUeXBlSGVhZGVyID0gX3JlcXVlc3QuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlSGVhZGVyKVxuICAgICAgfVxuXG4gICAgICBpZiAoX3JlcXVlc3QuYm9keSkge1xuICAgICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgICByZXF1ZXN0Q29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvblVwbG9hZFByb2dyZXNzKSlcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhID0gdHJhY2tTdHJlYW0oX3JlcXVlc3QuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCBmbHVzaCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscy5pc1N0cmluZyh3aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHMgPyAnaW5jbHVkZScgOiAnb21pdCc7XG4gICAgfVxuXG4gICAgLy8gQ2xvdWRmbGFyZSBXb3JrZXJzIHRocm93cyB3aGVuIGNyZWRlbnRpYWxzIGFyZSBkZWZpbmVkXG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jbG91ZGZsYXJlL3dvcmtlcmQvaXNzdWVzLzkwMlxuICAgIGNvbnN0IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPSBcImNyZWRlbnRpYWxzXCIgaW4gUmVxdWVzdC5wcm90b3R5cGU7XG4gICAgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgLi4uZmV0Y2hPcHRpb25zLFxuICAgICAgc2lnbmFsOiBjb21wb3NlZFNpZ25hbCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLm5vcm1hbGl6ZSgpLnRvSlNPTigpLFxuICAgICAgYm9keTogZGF0YSxcbiAgICAgIGR1cGxleDogXCJoYWxmXCIsXG4gICAgICBjcmVkZW50aWFsczogaXNDcmVkZW50aWFsc1N1cHBvcnRlZCA/IHdpdGhDcmVkZW50aWFscyA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdCk7XG5cbiAgICBjb25zdCBpc1N0cmVhbVJlc3BvbnNlID0gc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJyB8fCByZXNwb25zZVR5cGUgPT09ICdyZXNwb25zZScpO1xuXG4gICAgaWYgKHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKG9uRG93bmxvYWRQcm9ncmVzcyB8fCAoaXNTdHJlYW1SZXNwb25zZSAmJiB1bnN1YnNjcmliZSkpKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICAgIFsnc3RhdHVzJywgJ3N0YXR1c1RleHQnLCAnaGVhZGVycyddLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIG9wdGlvbnNbcHJvcF0gPSByZXNwb25zZVtwcm9wXTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZUNvbnRlbnRMZW5ndGggPSB1dGlscy50b0Zpbml0ZU51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSk7XG5cbiAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPSBvbkRvd25sb2FkUHJvZ3Jlc3MgJiYgcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgcmVzcG9uc2VDb250ZW50TGVuZ3RoLFxuICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvbkRvd25sb2FkUHJvZ3Jlc3MpLCB0cnVlKVxuICAgICAgKSB8fCBbXTtcblxuICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoXG4gICAgICAgIHRyYWNrU3RyZWFtKHJlc3BvbnNlLmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgKCkgPT4ge1xuICAgICAgICAgIGZsdXNoICYmIGZsdXNoKCk7XG4gICAgICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlIHx8ICd0ZXh0JztcblxuICAgIGxldCByZXNwb25zZURhdGEgPSBhd2FpdCByZXNvbHZlcnNbdXRpbHMuZmluZEtleShyZXNvbHZlcnMsIHJlc3BvbnNlVHlwZSkgfHwgJ3RleHQnXShyZXNwb25zZSwgY29uZmlnKTtcblxuICAgICFpc1N0cmVhbVJlc3BvbnNlICYmIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIGhlYWRlcnM6IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9KVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSAnVHlwZUVycm9yJyAmJiAvZmV0Y2gvaS50ZXN0KGVyci5tZXNzYWdlKSkge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgbmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpLFxuICAgICAgICB7XG4gICAgICAgICAgY2F1c2U6IGVyci5jYXVzZSB8fCBlcnJcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIGVyciAmJiBlcnIuY29kZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgfVxufSk7XG5cblxuIiwgImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgaHR0cEFkYXB0ZXIgZnJvbSAnLi9odHRwLmpzJztcbmltcG9ydCB4aHJBZGFwdGVyIGZyb20gJy4veGhyLmpzJztcbmltcG9ydCBmZXRjaEFkYXB0ZXIgZnJvbSAnLi9mZXRjaC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiBmZXRjaEFkYXB0ZXJcbn1cblxudXRpbHMuZm9yRWFjaChrbm93bkFkYXB0ZXJzLCAoZm4sIHZhbHVlKSA9PiB7XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywge3ZhbHVlfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+IHV0aWxzLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzLmlzQXJyYXkoYWRhcHRlcnMpID8gYWRhcHRlcnMgOiBbYWRhcHRlcnNdO1xuXG4gICAgY29uc3Qge2xlbmd0aH0gPSBhZGFwdGVycztcbiAgICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgICBsZXQgYWRhcHRlcjtcblxuICAgIGNvbnN0IHJlamVjdGVkUmVhc29ucyA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgbmFtZU9yQWRhcHRlciA9IGFkYXB0ZXJzW2ldO1xuICAgICAgbGV0IGlkO1xuXG4gICAgICBhZGFwdGVyID0gbmFtZU9yQWRhcHRlcjtcblxuICAgICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7XG4gICAgICAgIGFkYXB0ZXIgPSBrbm93bkFkYXB0ZXJzWyhpZCA9IFN0cmluZyhuYW1lT3JBZGFwdGVyKSkudG9Mb3dlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICAgIH1cblxuICAgIGlmICghYWRhcHRlcikge1xuXG4gICAgICBjb25zdCByZWFzb25zID0gT2JqZWN0LmVudHJpZXMocmVqZWN0ZWRSZWFzb25zKVxuICAgICAgICAubWFwKChbaWQsIHN0YXRlXSkgPT4gYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICAgICApO1xuXG4gICAgICBsZXQgcyA9IGxlbmd0aCA/XG4gICAgICAgIChyZWFzb25zLmxlbmd0aCA+IDEgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pKSA6XG4gICAgICAgICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7XG5cbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICAgJ0VSUl9OT1RfU1VQUE9SVCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkYXB0ZXI7XG4gIH0sXG4gIGFkYXB0ZXJzOiBrbm93bkFkYXB0ZXJzXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHJhbnNmb3JtRGF0YSBmcm9tICcuL3RyYW5zZm9ybURhdGEuanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4uL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSBcIi4uL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzXCI7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXIpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG4iLCAiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjEuNy43XCI7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnNcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgSW50ZXJjZXB0b3JNYW5hZ2VyIGZyb20gJy4vSW50ZXJjZXB0b3JNYW5hZ2VyLmpzJztcbmltcG9ydCBkaXNwYXRjaFJlcXVlc3QgZnJvbSAnLi9kaXNwYXRjaFJlcXVlc3QuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAnLi4vaGVscGVycy92YWxpZGF0b3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15ID0ge30pIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCAnJykgOiAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrLnJlcGxhY2UoL14uK1xcbi4rXFxuLywgJycpKSkge1xuICAgICAgICAgICAgZXJyLnN0YWNrICs9ICdcXG4nICsgc3RhY2tcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscy5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3M7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL0NhbmNlbGVkRXJyb3IuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIHRvQWJvcnRTaWduYWwoKSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGNvbnN0IGFib3J0ID0gKGVycikgPT4ge1xuICAgICAgY29udHJvbGxlci5hYm9ydChlcnIpO1xuICAgIH07XG5cbiAgICB0aGlzLnN1YnNjcmliZShhYm9ydCk7XG5cbiAgICBjb250cm9sbGVyLnNpZ25hbC51bnN1YnNjcmliZSA9ICgpID0+IHRoaXMudW5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgcmV0dXJuIGNvbnRyb2xsZXIuc2lnbmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsVG9rZW47XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG4iLCAiY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn07XG5cbk9iamVjdC5lbnRyaWVzKEh0dHBTdGF0dXNDb2RlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGVbdmFsdWVdID0ga2V5O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBTdGF0dXNDb2RlO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuaW1wb3J0IEF4aW9zIGZyb20gJy4vY29yZS9BeGlvcy5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsVG9rZW4gZnJvbSAnLi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgc3ByZWFkIGZyb20gJy4vaGVscGVycy9zcHJlYWQuanMnO1xuaW1wb3J0IGlzQXhpb3NFcnJvciBmcm9tICcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzJztcbmltcG9ydCBIdHRwU3RhdHVzQ29kZSBmcm9tICcuL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG5jb25zdCBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSBDYW5jZWxlZEVycm9yO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSBDYW5jZWxUb2tlbjtcbmF4aW9zLmlzQ2FuY2VsID0gaXNDYW5jZWw7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTjtcbmF4aW9zLnRvRm9ybURhdGEgPSB0b0Zvcm1EYXRhO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IEF4aW9zRXJyb3I7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQ7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjtcblxuLy8gRXhwb3NlIG1lcmdlQ29uZmlnXG5heGlvcy5tZXJnZUNvbmZpZyA9IG1lcmdlQ29uZmlnO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnM7XG5cbmF4aW9zLmZvcm1Ub0pTT04gPSB0aGluZyA9PiBmb3JtRGF0YVRvSlNPTih1dGlscy5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbi8vIHRoaXMgbW9kdWxlIHNob3VsZCBvbmx5IGhhdmUgYSBkZWZhdWx0IGV4cG9ydFxuZXhwb3J0IGRlZmF1bHQgYXhpb3NcbiIsICJpbXBvcnQgYXhpb3MgZnJvbSAnLi9saWIvYXhpb3MuanMnO1xuXG4vLyBUaGlzIG1vZHVsZSBpcyBpbnRlbmRlZCB0byB1bndyYXAgQXhpb3MgZGVmYXVsdCBleHBvcnQgYXMgbmFtZWQuXG4vLyBLZWVwIHRvcC1sZXZlbCBleHBvcnQgc2FtZSB3aXRoIHN0YXRpYyBwcm9wZXJ0aWVzXG4vLyBzbyB0aGF0IGl0IGNhbiBrZWVwIHNhbWUgd2l0aCBlcyBtb2R1bGUgb3IgY2pzXG5jb25zdCB7XG4gIEF4aW9zLFxuICBBeGlvc0Vycm9yLFxuICBDYW5jZWxlZEVycm9yLFxuICBpc0NhbmNlbCxcbiAgQ2FuY2VsVG9rZW4sXG4gIFZFUlNJT04sXG4gIGFsbCxcbiAgQ2FuY2VsLFxuICBpc0F4aW9zRXJyb3IsXG4gIHNwcmVhZCxcbiAgdG9Gb3JtRGF0YSxcbiAgQXhpb3NIZWFkZXJzLFxuICBIdHRwU3RhdHVzQ29kZSxcbiAgZm9ybVRvSlNPTixcbiAgZ2V0QWRhcHRlcixcbiAgbWVyZ2VDb25maWdcbn0gPSBheGlvcztcblxuZXhwb3J0IHtcbiAgYXhpb3MgYXMgZGVmYXVsdCxcbiAgQXhpb3MsXG4gIEF4aW9zRXJyb3IsXG4gIENhbmNlbGVkRXJyb3IsXG4gIGlzQ2FuY2VsLFxuICBDYW5jZWxUb2tlbixcbiAgVkVSU0lPTixcbiAgYWxsLFxuICBDYW5jZWwsXG4gIGlzQXhpb3NFcnJvcixcbiAgc3ByZWFkLFxuICB0b0Zvcm1EYXRhLFxuICBBeGlvc0hlYWRlcnMsXG4gIEh0dHBTdGF0dXNDb2RlLFxuICBmb3JtVG9KU09OLFxuICBnZXRBZGFwdGVyLFxuICBtZXJnZUNvbmZpZ1xufVxuIiwgImltcG9ydCB7IFRoaW5nLCBFbnRpdHksIENsYXNzLCBQcm9wZXJ0eSwgSW5kaXZpZHVhbCwgT250b2xvZ3kgfSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5cbi8vIFJFQURPTkxZIGFycmF5cyBjb250YWluaW5nIHRoZSBzdHJpbmdzIGRlZmluaW5nIGEgTW9kZWwgT2JqZWN0IFR5cGVcbmV4cG9ydCBjb25zdCBjbGFzc1R5cGVOYW1lcyA9IFtcImNsYXNzXCIgLCBcInRlcm1cIl0gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgcHJvcGVydHlUeXBlTmFtZXMgPSBbXCJwcm9wZXJ0eVwiLCBcImFubm90YXRpb25Qcm9wZXJ0eVwiLCBcImRhdGFQcm9wZXJ0eVwiLCBcIm9iamVjdFByb3BlcnR5XCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IGluZGl2aWR1YWxUeXBlTmFtZXMgPSBbXCJpbmRpdmlkdWFsXCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IG9udG9sb2d5VHlwZU5hbWVzID0gW1wib250b2xvZ3lcIl0gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgZW50aXR5VHlwZU5hbWVzID0gWy4uLmNsYXNzVHlwZU5hbWVzLCAuLi5pbmRpdmlkdWFsVHlwZU5hbWVzLCAuLi5wcm9wZXJ0eVR5cGVOYW1lc10gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgdGhpbmdUeXBlTmFtZXMgPSBbLi4uZW50aXR5VHlwZU5hbWVzLCAuLi5vbnRvbG9neVR5cGVOYW1lc10gYXMgY29uc3Q7XG5cbi8vIFR5cGUtY3JlYXRpb24gb3V0IG9mIFJFQURPTkxZIGFycmF5c1xuZXhwb3J0IHR5cGUgQ2xhc3NUeXBlTmFtZSA9IHR5cGVvZiBjbGFzc1R5cGVOYW1lc1tudW1iZXJdO1xuZXhwb3J0IHR5cGUgUHJvcGVydHlUeXBlTmFtZSA9IHR5cGVvZiBwcm9wZXJ0eVR5cGVOYW1lc1tudW1iZXJdO1xuZXhwb3J0IHR5cGUgSW5kaXZpZHVhbFR5cGVOYW1lID0gdHlwZW9mIGluZGl2aWR1YWxUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIE9udG9sb2d5VHlwZU5hbWUgPSB0eXBlb2Ygb250b2xvZ3lUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIEVudGl0eVR5cGVOYW1lID0gdHlwZW9mIGVudGl0eVR5cGVOYW1lc1tudW1iZXJdO1xuZXhwb3J0IHR5cGUgVGhpbmdUeXBlTmFtZSA9IHR5cGVvZiB0aGluZ1R5cGVOYW1lc1tudW1iZXJdO1xuXG4vLyBGdW5jdGlvbnMgY2hlY2tpbmcgc3RyaW5nIGFnYWluc3QgdHlwZSBuYW1lcywgcmV0dXJuaW5nIHN0cmluZyBhcyB0eXBlIG5hbWUgaWYgY2hlY2sgcGFzc2VzXG5leHBvcnQgZnVuY3Rpb24gaXNDbGFzc1R5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIENsYXNzVHlwZU5hbWUge1xuICAgIHJldHVybiBjbGFzc1R5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIENsYXNzVHlwZU5hbWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHlUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogdHlwZSBpcyBQcm9wZXJ0eVR5cGVOYW1lIHtcbiAgICByZXR1cm4gcHJvcGVydHlUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBQcm9wZXJ0eVR5cGVOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0luZGl2aWR1YWxUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogdHlwZSBpcyBJbmRpdmlkdWFsVHlwZU5hbWUge1xuICAgIHJldHVybiBpbmRpdmlkdWFsVHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgSW5kaXZpZHVhbFR5cGVOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc09udG9sb2d5VHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgT250b2xvZ3lUeXBlTmFtZSB7XG4gICAgcmV0dXJuIG9udG9sb2d5VHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgT250b2xvZ3lUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbnRpdHlUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogdHlwZSBpcyBFbnRpdHlUeXBlTmFtZSB7XG4gICAgcmV0dXJuIGVudGl0eVR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIEVudGl0eVR5cGVOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1RoaW5nVHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgVGhpbmdUeXBlTmFtZSB7XG4gICAgcmV0dXJuIHRoaW5nVHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgVGhpbmdUeXBlTmFtZSk7XG59XG5cbi8vIEZ1bmN0aW9ucyBjaGVja2luZyBUaGluZyBvYmplY3RzIGFnYWluc3Qgc3BlY2lmaWMgdHlwZSAodmlhIGNoZWNraW5nIGdldFR5cGUoKSBhZ2FpbnN0IHR5cGUgbmFtZXMpLCByZXR1cm5pbmcgb2JqZWN0IGFzIHNwZWNpZmljIHR5cGUgaWYgY2hlY2sgcGFzc2VzXG5leHBvcnQgZnVuY3Rpb24gaXNDbGFzcyh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgQ2xhc3Mge1xuICAgIHJldHVybiBpc0NsYXNzVHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5KHRoaW5nOiBUaGluZykgOiB0aGluZyBpcyBQcm9wZXJ0eSB7XG4gICAgcmV0dXJuIGlzUHJvcGVydHlUeXBlTmFtZSh0aGluZy5nZXRUeXBlKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5kaXZpZHVhbCh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgSW5kaXZpZHVhbCB7XG4gICAgcmV0dXJuIGlzSW5kaXZpZHVhbFR5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbnRpdHkodGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIEVudGl0eSB7XG4gICAgcmV0dXJuIGlzRW50aXR5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc09udG9sb2d5KHRoaW5nOiBUaGluZykgOiB0aGluZyBpcyBPbnRvbG9neSB7XG4gICAgcmV0dXJuIGlzT250b2xvZ3lUeXBlTmFtZSh0aGluZy5nZXRUeXBlKCkpO1xufSIsICJpbXBvcnQge0V1aUxpbmtDb2xvcn0gZnJvbSBcIkBlbGFzdGljL2V1aS9zcmMvY29tcG9uZW50cy9saW5rL2xpbmtcIjtcbmltcG9ydCB7XG4gICAgaXNDbGFzc1R5cGVOYW1lLFxuICAgIGlzSW5kaXZpZHVhbFR5cGVOYW1lLFxuICAgIGlzT250b2xvZ3lUeXBlTmFtZSxcbiAgICBpc1Byb3BlcnR5VHlwZU5hbWUsXG4gICAgaXNUaGluZ1R5cGVOYW1lLCBUaGluZ1R5cGVOYW1lXG59IGZyb20gXCIuLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHtTdG9yeUNvbnRleHR9IGZyb20gXCJAc3Rvcnlib29rL3JlYWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc0FycmF5PFQ+KG9iajogVCB8IFRbXSk6IFRbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0gZWxzZSBpZiAob2JqKSB7XG4gICAgICAgIHJldHVybiBbb2JqXTtcbiAgICB9XG4gICAgcmV0dXJuIFtdIGFzIFRbXTtcbn1cblxuY29uc3QgREVGQVVMVF9VU0VfTEVHQUNZID0gdHJ1ZTtcbi8qKlxuICogUmV0dXJucyBgdXNlTGVnYWN5YCBpZiB1bmRlZmluZWQsIG90aGVyd2lzZSByZXR1cm5zIGRlZmF1bHQgdmFsdWUgZm9yIHVzZUxlZ2FjeVxuICogQHBhcmFtIHVzZUxlZ2FjeVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeT86IGJvb2xlYW4pIDogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh1c2VMZWdhY3kgIT09IHVuZGVmaW5lZCkgPyB1c2VMZWdhY3kgOiBERUZBVUxUX1VTRV9MRUdBQ1k7XG59XG5cbi8qKlxuICogUmV0dXJucyB7QGxpbmsgdHlwZX0uIElmIHtAbGluayB0eXBlfSBlcXVhbHMgJ3Rlcm0nLCAnY2xhc3MnIGdldHMgcmV0dXJuZWQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0eVR5cGVOYW1lKHR5cGU6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlID09PSBcInRlcm1cIiA/IFwiY2xhc3NcIiA6IHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cjogc3RyaW5nKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlQ2FtZWxDYXNlKHN0cjogc3RyaW5nKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNhcGl0YWxpemUoc3RyKS5zcGxpdCgvKD89W0EtWl1bYS16XSkvKS5qb2luKFwiIFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlVW5kZXJzY29yZShzdHI6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBjYXBpdGFsaXplKHN0cikucmVwbGFjZShcIl9cIiwgXCIgXCIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJpbW1lZCBhcGkgKG9taXRzIC9hcGkvdjIgYXQgdGhlIGVuZClcbiAqIEBwYXJhbSBhcGlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZyb250RW5kQXBpKGFwaTogc3RyaW5nKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFwaS5yZXBsYWNlKC9cXC9hcGlcXC8/JC8sIFwiL1wiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIFwib250b2xvZ2llcy97b250b2xvZ3lJZH0ve2VudGl0eVR5cGV9L3tpcml9XCIsIHdoaWNoIGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBmcm9udGVuZEFwaSB0byBnZXQgZnVsbCBsaW5rXG4gKiBAcGFyYW0gb250b2xvZ3lJZCB0aGUgZW50aXRpZXMnIG9udG9sb2d5SWRcbiAqIEBwYXJhbSBpcmkgdGhlIGVudGl0aWVzJyBpcmlcbiAqIEBwYXJhbSBlbnRpdHlUeXBlQXJyYXkgdGhlIGVudGl0aWVzJyB0eXBlIGFycmF5IChmcm9tIGFwaSBKU09OIGxpbmtlZEVudGl0aWVzKVxuICogQHBhcmFtIHVzZUxlZ2FjeVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGVBcnJheTogc3RyaW5nW10gfCBzdHJpbmcsIGlyaT86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbikgOiBzdHJpbmcge1xuICAgIHJldHVybiBgb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7cGx1cmFsaXplVHlwZShhc0FycmF5KGVudGl0eVR5cGVBcnJheSksIHVzZUxlZ2FjeSl9YCArIChpcmkgIT0gdW5kZWZpbmVkID8gYC8ke2VuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoaXJpKSl9YCA6IFwiXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGx1cmFsaXplVHlwZSh0eXBlQXJyYXk6IHN0cmluZ1tdIHwgc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuKSA6IFwidGVybXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcIm9udG9sb2dpZXNcIiB7XG4gICAgZm9yKGNvbnN0IHR5cGUgb2YgYXNBcnJheSh0eXBlQXJyYXkpKSB7XG4gICAgICAgIGlmKGlzVGhpbmdUeXBlTmFtZSh0eXBlKSkge1xuICAgICAgICAgICAgaWYoaXNDbGFzc1R5cGVOYW1lKHR5cGUpKSByZXR1cm4gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcInRlcm1zXCIgOiBcImNsYXNzZXNcIjtcbiAgICAgICAgICAgIGlmKGlzUHJvcGVydHlUeXBlTmFtZSh0eXBlKSkgcmV0dXJuIFwicHJvcGVydGllc1wiO1xuICAgICAgICAgICAgaWYoaXNJbmRpdmlkdWFsVHlwZU5hbWUodHlwZSkpIHJldHVybiBcImluZGl2aWR1YWxzXCI7XG4gICAgICAgICAgICBpZihpc09udG9sb2d5VHlwZU5hbWUodHlwZSkpIHJldHVybiBcIm9udG9sb2dpZXNcIlxuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHRoaW5nVHlwZSBmb3VuZCB0byBwbHVyYWxpemUgaW4gcHJvdmlkZWQgdHlwZUFycmF5LlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbmd1bGFyaXplVHlwZSh0eXBlQXJyYXk6IHN0cmluZ1tdIHwgc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuKTogVGhpbmdUeXBlTmFtZSB7XG4gICAgZm9yKGNvbnN0IHR5cGUgb2YgYXNBcnJheSh0eXBlQXJyYXkpKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInRlcm1zXCI6IGNhc2UgXCJjbGFzc2VzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJ0ZXJtXCIgOiBcImNsYXNzXCI7XG4gICAgICAgICAgICBjYXNlIFwicHJvcGVydGllc1wiOiBjYXNlIFwiZGF0YVByb3BlcnRpZXNcIjogY2FzZSBcIm9iamVjdFByb3BlcnRpZXNcIjogY2FzZSBcImFubm90YXRpb25Qcm9wZXJ0aWVzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwicHJvcGVydHlcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbmRpdmlkdWFsc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcImluZGl2aWR1YWxcIjtcbiAgICAgICAgICAgIGNhc2UgXCJvbnRvbG9naWVzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwib250b2xvZ3lcIlxuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHRoaW5nVHlwZSBmb3VuZCB0byBzaW5ndWxhcml6ZSBpbiBwcm92aWRlZCB0eXBlQXJyYXkuXCIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gc3RyaW5nIHVzZWQgbWFpbmx5IGZvciBjb21wb25lbnQga2V5cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZygpIHtcbiAgICByZXR1cm4gKE1hdGgucmFuZG9tKCkgKiBNYXRoLnBvdygyLCA1NCkpLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSGV4Q29sb3Ioc3RyOiBzdHJpbmcpIDogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eI1swLTlBLUZdezZ9JC9pLnRlc3Qoc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmdiQ29sb3Ioc3RyOiBzdHJpbmcpIDogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eKHJnYnxoc2wpKGE/KVsoXVxccyooW1xcZC5dK1xccyolPylcXHMqLFxccyooW1xcZC5dK1xccyolPylcXHMqLFxccyooW1xcZC5dK1xccyolPylcXHMqKD86LFxccyooW1xcZC5dKylcXHMqKT9bKV0kL2kudGVzdChzdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFdWlMaW5rQ29sb3Ioc3RyOiBzdHJpbmcpIDogc3RyIGlzIEV1aUxpbmtDb2xvciB7XG4gICAgcmV0dXJuIFtcInByaW1hcnlcIiwgXCJzdWJkdWVkXCIsIFwic3VjY2Vzc1wiLCBcImFjY2VudFwiLCBcImRhbmdlclwiLCBcIndhcm5pbmdcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIl0uaW5jbHVkZXMoc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvcjogYW55LCBtZXNzYWdlUGxhY2Vob2xkZXIgPSBcImluZm9ybWF0aW9uXCIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVycm9yX21zZyA6IHN0cmluZyA9IGVycm9yLm1lc3NhZ2U7XG4gICAgaWYoZXJyb3JfbXNnID09PSAoXCJSZXNwb25zZSBjb250YWlucyAwIGVsZW1lbnRzXCIpKSB7XG4gICAgICAgIHJldHVybiBcIk5vIGVsZW1lbnRzIGZvdW5kXCI7XG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIGBObyAke21lc3NhZ2VQbGFjZWhvbGRlcn0gYXZhaWxhYmxlYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluZmVyVHlwZUZyb21UeXBlQXJyYXkodHlwZXM6IHN0cmluZ1tdKSB7XG4gICAgbGV0IHJlcyA9IHR5cGVzLmZpbHRlcigoZWxlbSA6IHN0cmluZykgPT4gaXNUaGluZ1R5cGVOYW1lKGVsZW0pKTsgLy8gZmlsdGVyIG5vdCBtYXRjaGluZyBzdHJpbmdzXG4gICAgcmVzID0gcmVzLm1hcChpdGVtID0+IGl0ZW0gPT09IFwiYW5ub3RhdGlvblByb3BlcnR5XCIgfHwgaXRlbSA9PT0gXCJvYmplY3RQcm9wZXJ0eVwiIHx8IGl0ZW0gPT09IFwiZGF0YVByb3BlcnR5XCIgPyBcInByb3BlcnR5XCIgOiBpdGVtKTtcbiAgICByZXMgPSBbLi4ubmV3IFNldDxzdHJpbmc+KHJlcyldOyAvLyByZW1vdmUgZHVwbGljYXRlc1xuXG4gICAgaWYocmVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHJlc1swXSBhcyBUaGluZ1R5cGVOYW1lO1xuICAgIGVsc2UgaWYocmVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgRXJyb3IoXCJFbnRpdHkgdHlwZSBjb3VsZCBub3QgYmUgY29ycmVjdGx5IGluZmVycmVkOiBObyBzdWl0YWJsZSB0eXBlIGZvdW5kIGluIGFycmF5LlwiKTtcbiAgICBlbHNlIHRocm93IEVycm9yKGBFbnRpdHkgdHlwZSBjb3VsZCBub3QgYmUgY29ycmVjdGx5IGluZmVycmVkOiBNdWx0aXBsZSB0eXBlcyBmb3VuZCBpbiBhcnJheSwgbm8gZGVmaW5pdGUgY2hvaWNlIHBvc3NpYmxlIC0gJHtKU09OLnN0cmluZ2lmeShyZXMpfWApO1xufVxuXG4vKiBUT0RPOiBwbHVyYWxpemVUeXBlIG5vdCBhdmFpbGFibGUgaW4gaHRtbCB2ZXJzaW9uLCByZXBsYWNlIHdpdGggbG9jYWwgZnVuY3Rpb25hbGl0eSAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hbnVhbGx5RW1iZWRPbk5hdmlnYXRlKGNvZGU6IHN0cmluZywgc3RvcnlDb250ZXh0OiBTdG9yeUNvbnRleHQpIHtcbiAgICBzd2l0Y2ggKHN0b3J5Q29udGV4dC5hcmdzW1wib25OYXZpZ2F0ZVRvRW50aXR5XCJdKSB7XG4gICAgICAgIGNhc2UgXCJDb25zb2xlIG1lc3NhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgL29uTmF2aWdhdGVUb0VudGl0eT1cXHsoXFwoXFwpID0+IFxce318ZnVuY3Rpb24gbm9SZWZDaGVja1xcKFxcKVxce30pfS8sXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9FbnRpdHk9e1xcbiAgICAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlPzogc3RyaW5nLCBlbnRpdHk/OiB7IGlyaTogc3RyaW5nLCBsYWJlbD86IHN0cmluZyB9KSA9PiB7XFxuICAgICAgY29uc29sZS5sb2coJ1RyaWdnZXJlZCBvbk5hdmlnYXRlVG9FbnRpdHkoKScgKyAoZW50aXR5VHlwZSA/IGAgZm9yICR7ZW50aXR5VHlwZSB8fCBcXFwiZW50aXR5XFxcIn1gIDogJycpICsgKChlbnRpdHkgJiYgZW50aXR5LmxhYmVsKSA/IGAgXFxcIiR7ZW50aXR5LmxhYmVsfVxcXCJgIDogJycpICsgKChlbnRpdHkgJiYgZW50aXR5LmlyaSkgPyBgIChpcmk9XFxcIiR7ZW50aXR5LmlyaX1cXFwiKWAgOiAnJykgKyAnLicpO1xcbiAgICB9XFxuICB9XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIk5hdmlnYXRlIHRvIEVCSSBwYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9vbk5hdmlnYXRlVG9FbnRpdHk9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRW50aXR5PXtcXG4gICAgKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgIGlmKGVudGl0eSAmJiBlbnRpdHkuaXJpICYmIGVudGl0eVR5cGUpIHtcXG4gICAgICAgIHdpbmRvdy5vcGVuKCdodHRwczovL3d3dy5lYmkuYWMudWsvb2xzNC9vbnRvbG9naWVzLycgKyBvbnRvbG9neUlkICsgJy8nICsgbmV3IE1hcChbW1xcXCJ0ZXJtXFxcIixcXFwiY2xhc3Nlc1xcXCJdLFtcXFwiY2xhc3NcXFwiLFxcXCJjbGFzc2VzXFxcIl0sW1xcXCJpbmRpdmlkdWFsXFxcIixcXFwiaW5kaXZpZHVhbHNcXFwiXSxbXFxcInByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwiZGF0YVByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwib2JqZWN0UHJvcGVydHlcXFwiLFxcXCJwcm9wZXJ0aWVzXFxcIl0sW1xcXCJhbm5vdGF0aW9uUHJvcGVydHlcXFwiLFxcXCJwcm9wZXJ0aWVzXFxcIl1dKS5nZXQoZW50aXR5VHlwZSkgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eS5pcmkpKSwgXFxcIl90b3BcXFwiKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSB7XFxuICAgICAgICB3aW5kb3cub3BlbignaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvb250b2xvZ2llcy8nICsgb250b2xvZ3lJZCwgXFxcIl90b3BcXFwiKTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgc3dpdGNoIChzdG9yeUNvbnRleHQuYXJnc1tcIm9uTmF2aWdhdGVUb09udG9sb2d5XCJdKSB7XG4gICAgICAgIGNhc2UgXCJDb25zb2xlIG1lc3NhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgL29uTmF2aWdhdGVUb09udG9sb2d5PVxceyhcXChcXCkgPT4gXFx7fXxmdW5jdGlvbiBub1JlZkNoZWNrXFwoXFwpXFx7fSl9LyxcbiAgICAgICAgICAgICAgICBcIm9uTmF2aWdhdGVUb09udG9sb2d5PXtcXG4gICAgKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgIGNvbnNvbGUubG9nKCdUcmlnZ2VyZWQgb25OYXZpZ2F0ZVRvT250b2xvZ3koKScgKyAoZW50aXR5VHlwZSA/IGAgZm9yICR7ZW50aXR5VHlwZSB8fCBcXFwiZW50aXR5XFxcIn1gIDogJycpICsgKChlbnRpdHkgJiYgZW50aXR5LmxhYmVsKSA/IGAgXFxcIiR7ZW50aXR5LmxhYmVsfVxcXCJgIDogJycpICsgKChlbnRpdHkgJiYgZW50aXR5LmlyaSkgPyBgIChpcmk9XFxcIiR7ZW50aXR5LmlyaX1cXFwiKWAgOiAnJykgKyBgIGZvciBvbnRvbG9neUlkIFxcXCIke29udG9sb2d5SWR9XFxcIi5gKTtcXG4gICAgfVxcbiAgfVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJOYXZpZ2F0ZSB0byBFQkkgcGFnZVwiOlxuICAgICAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZShcbiAgICAgICAgICAgICAgICAvb25OYXZpZ2F0ZVRvT250b2xvZ3k9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvT250b2xvZ3k9e1xcbiAgICAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlPzogc3RyaW5nLCBlbnRpdHk/OiB7IGlyaTogc3RyaW5nLCBsYWJlbD86IHN0cmluZyB9KSA9PiB7XFxuICAgICAgaWYoZW50aXR5ICYmIGVudGl0eS5pcmkgJiYgZW50aXR5VHlwZSkge1xcbiAgICAgICAgd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L29udG9sb2dpZXMvJyArIG9udG9sb2d5SWQgKyAnLycgKyBuZXcgTWFwKFtbXFxcInRlcm1cXFwiLFxcXCJjbGFzc2VzXFxcIl0sW1xcXCJjbGFzc1xcXCIsXFxcImNsYXNzZXNcXFwiXSxbXFxcImluZGl2aWR1YWxcXFwiLFxcXCJpbmRpdmlkdWFsc1xcXCJdLFtcXFwicHJvcGVydHlcXFwiLFxcXCJwcm9wZXJ0aWVzXFxcIl0sW1xcXCJkYXRhUHJvcGVydHlcXFwiLFxcXCJwcm9wZXJ0aWVzXFxcIl0sW1xcXCJvYmplY3RQcm9wZXJ0eVxcXCIsXFxcInByb3BlcnRpZXNcXFwiXSxbXFxcImFubm90YXRpb25Qcm9wZXJ0eVxcXCIsXFxcInByb3BlcnRpZXNcXFwiXV0pLmdldChlbnRpdHlUeXBlKSArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoZW50aXR5LmlyaSkpLCBcXFwiX3RvcFxcXCIpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIHtcXG4gICAgICAgIHdpbmRvdy5vcGVuKCdodHRwczovL3d3dy5lYmkuYWMudWsvb2xzNC9vbnRvbG9naWVzLycgKyBvbnRvbG9neUlkLCBcXFwiX3RvcFxcXCIpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVwiXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBzd2l0Y2ggKHN0b3J5Q29udGV4dC5hcmdzW1wib25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlXCJdKSB7XG4gICAgICAgIGNhc2UgXCJDb25zb2xlIG1lc3NhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgL29uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT1cXHsoXFwoXFwpID0+IFxce318ZnVuY3Rpb24gbm9SZWZDaGVja1xcKFxcKVxce30pfS8sXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e1xcbiAgICAoZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgICBjb25zb2xlLmxvZygnVHJpZ2dlcmVkIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSgpJyArIChlbnRpdHlUeXBlID8gYCBmb3IgJHtlbnRpdHlUeXBlIHx8IFxcXCJlbnRpdHlcXFwifWAgOiAnJykgKyAoKGVudGl0eSAmJiBlbnRpdHkubGFiZWwpID8gYCBcXFwiJHtlbnRpdHkubGFiZWx9XFxcImAgOiAnJykgKyAoKGVudGl0eSAmJiBlbnRpdHkuaXJpKSA/IGAgKGlyaT1cXFwiJHtlbnRpdHkuaXJpfVxcXCIpYCA6ICcnKSArICcuJyk7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTmF2aWdhdGUgdG8gRUJJIHBhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgL29uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT1cXHsoXFwoXFwpID0+IFxce318ZnVuY3Rpb24gbm9SZWZDaGVja1xcKFxcKVxce30pfS8sXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e1xcbiAgICAoZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgICB3aW5kb3cub3BlbignaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvc2VhcmNoP3E9JyArICgoZW50aXR5ICYmIGVudGl0eS5sYWJlbCkgPyBlbnRpdHkubGFiZWwgOiBcXFwiXFxcIikgKyAnJmV4YWN0TWF0Y2g9dHJ1ZSZsYW5nPWVuJywgXFxcIl90b3BcXFwiKTtcXG4gICAgfVxcbiAgfVwiXG4gICAgICAgICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvZGU7XG59IiwgImV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlaWZpZWQ8VD4ge1xuICB2YWx1ZTogVDtcbiAgYXhpb21zOiBhbnlbXSB8IG51bGw7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogVCwgYXhpb21zOiBhbnlbXSB8IG51bGwpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5heGlvbXMgPSBheGlvbXM7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uPFQ+KGpzb25Ob2RlOiBhbnkpOiBSZWlmaWVkPFQ+W10ge1xuICAgIGlmICghanNvbk5vZGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoanNvbk5vZGUpKSB7XG4gICAgICBqc29uTm9kZSA9IFtqc29uTm9kZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGpzb25Ob2RlLm1hcCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZS50eXBlKSAmJlxuICAgICAgICB2YWx1ZS50eXBlLmluZGV4T2YoXCJyZWlmaWNhdGlvblwiKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbmV3IFJlaWZpZWQ8VD4odmFsdWUudmFsdWUsIHZhbHVlLmF4aW9tcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IFJlaWZpZWQ8VD4odmFsdWUsIG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFzTWV0YWRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXhpb21zICE9IG51bGw7XG4gIH1cblxuICAvLyBDb21iaW5lIGFsbCBvZiB0aGUgYXhpb21zIGludG8gb25lIG1ldGFkYXRhIG9iamVjdCBmb3IgdGhlIHByb3BlcnR5LlxuICAvL1xuICAvLyBub3RlOiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHNhbWUgcHJvcGVydHkgaXMgcmVpZmllZCBtdWx0aXBsZSB0aW1lcyB3aXRoXG4gIC8vIGRpZmZlcmVudCBtZXRhZGF0YSwgaXQgd2lsbCBhbGwgYmUgY29tYmluZWQgaW4gdGhlIFVJLiBXaGV0aGVyIHRoaXMgaXNcbiAgLy8gdGhlIGRlc2lyZWQgYmVoYXZpb3VyIGlzIFRCRC5cbiAgLy9cbiAgZ2V0TWV0YWRhdGEoKTogYW55IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmF4aW9tcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcGVydGllczogYW55ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGF4aW9tIG9mIHRoaXMuYXhpb21zKSB7XG4gICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoYXhpb20pKSB7XG4gICAgICAgIGNvbnN0IHYgPSBheGlvbVtrXTtcbiAgICAgICAgY29uc3QgZXhpc3Rpbmc6IGFueVtdIHwgdW5kZWZpbmVkID0gcHJvcGVydGllc1trXTtcbiAgICAgICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGlzdGluZy5wdXNoKHYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnRpZXNba10gPSBbdl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbiAgfVxufVxuIiwgImltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlZEVudGl0eSB7XG5cdGRlZmluZWRCeT86c3RyaW5nW11cblx0aXJpPzpzdHJpbmdcblx0dXJsPzpzdHJpbmdcblx0bnVtQXBwZWFyc0luOnN0cmluZ1xuXHRoYXNMb2NhbERlZmluaXRpb246Ym9vbGVhblxuXHRsYWJlbDpzdHJpbmd8c3RyaW5nW11cblx0dHlwZTpzdHJpbmdbXVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaW5rZWRFbnRpdGllcyB7XG5cblx0bGlua2VkRW50aXRpZXM6eyBba2V5OnN0cmluZ106TGlua2VkRW50aXR5IH1cblxuXHRjb25zdHJ1Y3RvcihsaW5rZWRFbnRpdGllczphbnkpIHtcblx0XHRpZihsaW5rZWRFbnRpdGllcylcblx0XHRcdHRoaXMubGlua2VkRW50aXRpZXMgPSB7Li4ubGlua2VkRW50aXRpZXN9XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5saW5rZWRFbnRpdGllcyA9IHt9XG5cdH1cblxuXHRtZXJnZVdpdGgobGlua2VkRW50aXRpZXM6YW55KTpMaW5rZWRFbnRpdGllcyB7XG5cdFx0aWYobGlua2VkRW50aXRpZXMpXG5cdFx0XHRyZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHsgLi4udGhpcy5saW5rZWRFbnRpdGllcywgbGlua2VkRW50aXRpZXMgfSlcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHsgLi4udGhpcy5saW5rZWRFbnRpdGllcyB9KVxuXHR9XG5cblx0Z2V0TGFiZWxGb3JJcmkoaXJpOnN0cmluZyk6c3RyaW5nfHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbGlua2VkRW50aXR5ID0gdGhpcy5saW5rZWRFbnRpdGllc1tpcmldXG5cblx0XHRpZihsaW5rZWRFbnRpdHkpIHtcblx0XHRcdGNvbnN0IGxhYmVsID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KCBsaW5rZWRFbnRpdHkubGFiZWwgKVxuXHRcdFx0aWYobGFiZWwgJiYgbGFiZWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZXR1cm4gbGFiZWxbMF0udmFsdWVcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRnZXQoaXJpOnN0cmluZyk6TGlua2VkRW50aXR5fHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMubGlua2VkRW50aXRpZXNbaXJpXVxuXHR9XG59XG4iLCAiaW1wb3J0IHtUaGluZ30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcblxuaW1wb3J0IExpbmtlZEVudGl0aWVzIGZyb20gXCIuLi9MaW5rZWRFbnRpdGllc1wiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcbmltcG9ydCB7VGhpbmdUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQge3BsdXJhbGl6ZVR5cGV9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT0xTM1RoaW5nIGltcGxlbWVudHMgVGhpbmcge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldExhYmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdO1xuICB9XG5cbiAgLy8gVE9ETzogSXMgY3VyaWUgLyBvYm9faWQgbWVhbnQ/IFwiaWRcIiBvbmx5IGV4aXN0cyBpbiBzdGFuZGFyZD8gKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL29udG9sb2dpZXMvYWRvL3Byb3BlcnRpZXM/aXJpPWh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9ST18wMDAyMTc1KVxuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpZFwiXTtcbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICAvLyBzdGFuZGFyZCByZXNwb25zZXMgZG9uJ3QgaGF2ZSBcInR5cGVcIiBrZXkgLT4gaW1wbGVtZW50IHN0YXRpY2FsbHkgaW4gc3VidHlwZXNcbiAgYWJzdHJhY3QgZ2V0VHlwZSgpOiBUaGluZ1R5cGVOYW1lO1xuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJvbnRvbG9naWVzXCIgfCBcImNsYXNzZXNcIiB8IFwidGVybXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICByZXR1cm4gcGx1cmFsaXplVHlwZSh0aGlzLmdldFR5cGUoKSk7XG4gIH1cblxuICAvLyBub3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHJlc3BvbnNlc1xuICBnZXRSZGZUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuXHRyZXR1cm4gdGhpcy5nZXROYW1lcygpWzBdO1xuICB9XG5cbiAgLy8gaGFzIGFkZGl0aW9uYWwga2V5IFwic2hvcnRoYW5kXCI/IChodHRwOi8vd3d3LmViaS5hYy51ay9vbHM0L2FwaS9vbnRvbG9naWVzL2Fkby9wcm9wZXJ0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vUk9fMDAwMjE3NSlcbiAgZ2V0TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhYmVscyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdXG4gICAgKTtcbiAgICBpZiAobGFiZWxzICYmIGxhYmVscy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbGFiZWxzLm1hcChsYWJlbCA9PiBsYWJlbC52YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIFt0aGlzLmdldElyaSgpXTtcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXSk7XG4gICAgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZGVmaW5pdGlvbi5tYXAoKGRlZikgPT4gZGVmLnZhbHVlIHx8IFwiXCIpLmpvaW4oXCIgXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lfbmFtZVwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBhcHBsaWNhYmxlIC8gbmVjZXNzYXJ5IGluIHN0YW5kYXJkIGFzIHRoZXJlIGFyZSBubyBsaW5rZWQgZW50aXRpZXNcbiAgZ2V0TGFiZWxGb3JJcmkoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmtlZEVudGl0aWVzID0gdGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl07XG4gICAgaWYgKGxpbmtlZEVudGl0aWVzKSB7XG4gICAgICBjb25zdCBsYWJlbDpSZWlmaWVkPHN0cmluZz5bXSA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXRpZXNbaWRdPy5sYWJlbCApO1xuICAgICAgcmV0dXJuIGxhYmVsWzBdPy52YWx1ZSB8fCBpZFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgYWJzdHJhY3QgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW107XG4gIGFic3RyYWN0IGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZztcbiAgYWJzdHJhY3QgZ2V0QW5ub3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6UmVpZmllZDxhbnk+W107XG5cbiAgLy8gVE9ETzogbm90IGFwcGxpY2FibGUgLyBuZWNlc3NhcnkgaW4gc3RhbmRhcmRcbiAgZ2V0TGlua2VkRW50aXRpZXMoKTogTGlua2VkRW50aXRpZXMge1xuICAgIHJldHVybiBuZXcgTGlua2VkRW50aXRpZXModGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl0gfHwge30pO1xuICB9XG5cbiAgZ2V0RGVwaWN0aW9uVXJsKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl0gJiYgdGhpcy5wcm9wZXJ0aWVzW1wiYW5ub3RhdGlvblwiXVtcImRlcGljdGlvblwiXSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl1bXCJkZXBpY3Rpb25cIl1bMF07XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG4iLCAiaW1wb3J0IHtFbnRpdHl9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzNUaGluZ30gZnJvbSBcIi4vT0xTM1RoaW5nXCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7YXNBcnJheSwgZGVVbmRlcnNjb3JlfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RW50aXR5VHlwZU5hbWV9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT0xTM0VudGl0eSBleHRlbmRzIE9MUzNUaGluZyBpbXBsZW1lbnRzIEVudGl0eXtcbiAgYWJzdHJhY3QgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXTtcbiAgYWJzdHJhY3QgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXTtcbiAgYWJzdHJhY3QgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W107XG5cbiAgaXNDYW5vbmljYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlzX2RlZmluaW5nX29udG9sb2d5XCJdID09PSB0cnVlO1xuICB9XG5cbiAgLy8gVE9ETzogZG9lcyBub3Qgc2VlbSB0byBvY2N1ciBpbiBzdGFuZGFyZCAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvdjIvZW50aXRpZXM/aXJpPWh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9GT09ET05fMDAwMDQ0NzQpXG4gIC8vICAgICAgIHYyIGhhcyBkZXByZWNhdGVkIGluZm9ybWF0aW9uLCBzdGFuZGFyZCBoYXMgbm90XG4gIGlzRGVwcmVjYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGVwcmVjYXRlZFwiXSA9PT0gXCJ0cnVlXCJcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25WZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgLy8gb25seSBzdXBwb3J0cyBFRk8gZm9yIG5vd1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vb2Jzb2xldGVkX2luX3ZlcnNpb25cIl07XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlYXNvbigpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDIzMVwiXVxuICAgICkuY29uY2F0KFxuICAgICAgUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vcmVhc29uX2Zvcl9vYnNvbGVzY2VuY2VcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZXBsYWNlbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAxMDAwMDFcIl07XG4gIH1cblxuICAvLyBUT0RPOiBub3QgZXhpc3RlbnQgaW4gc3RhbmRhcmQuIENhbiBiZSBleHRyYWN0ZWQgZnJvbSBcImxpbmtzXCItPlwiZ3JhcGhcIlxuICAvLyAgICAgICAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvdGVybXM/aXJpPWh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9BR1JPXzAwMDAwMDAyKVxuICBnZXRSZWxhdGVkRnJvbSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJyZWxhdGVkRnJvbVwiXSk7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbkFzQXJyYXkoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVzY3JpcHRpb25cIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGV4aXN0ZW50IGluIHN0YW5kYXJkLiBDYW4gYmUgZXh0cmFjdGVkIGZyb20gXCJsaW5rc1wiLT5cImNoaWxkcmVuXCJcbiAgaGFzRGlyZWN0Q2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc0RpcmVjdENoaWxkcmVuXCJdID09PSBcInRydWVcIjtcbiAgfVxuXG4gIC8vIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCBmcm9tIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxDaGlsZHJlblwiXG4gIGhhc0hpZXJhcmNoaWNhbENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNIaWVyYXJjaGljYWxDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzX2NoaWxkcmVuXCJdXG4gIH1cblxuICAvLyBUT0RPOiBjb3VsZCBub3QgZmluZCBleGFtcGxlcyBvZiBhbmNlc3RvcnMgaW4gbmV3IGFwaSBzbyBmYXJcbiAgZ2V0QW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJhbmNlc3RvclwiXSk7XG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxBbmNlc3RvcnNcIlxuICBnZXRIaWVyYXJjaGljYWxBbmNlc3RvcklyaXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbEFuY2VzdG9yXCJdKTtcbiAgfVxuXG4gIGdldFN5bm9ueW1zKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wic3lub255bXNcIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGV4aXN0ZW50IGluIHN0YW5kYXJkLiBDYW4gYmUgZXh0cmFjdGVkIHZpYSBzZWFyY2hpbmcgZm9yIGVudGl0eSB3aXRob3V0IHNwZWNpZmljIG9udG9sb2d5IC0+IGdpdmVzIGFsbCBvY2N1cnJlbmNlc1xuICBnZXRBcHBlYXJzSW4oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiYXBwZWFyc0luXCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldENyb3NzUmVmZXJlbmNlcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl1bXCJoYXNfZGJ4cmVmXCJdIHx8IFtdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGV4aXN0ZW50IGluIHN0YW5kYXJkLiBTdGFuZGFyZCBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggaXNfZGVmaW5pbmdfb250b2xvZ3kgYXMgd2VsbFxuICAvLyAgICAgICAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvdjIvb250b2xvZ2llcy9yby9wcm9wZXJ0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vUk9fMDAwMjE3NSlcbiAgZ2V0RGVmaW5lZEJ5KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImRlZmluZWRCeVwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRJc0RlZmluaW5nT250b2xvZ3koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSB8fCB1bmRlZmluZWQgKSBhcyBib29sZWFuO1xuICB9XG5cbiAgZ2V0U2hvcnRGb3JtKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9ib19pZFwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydF9mb3JtXCJdO1xuICB9XG5cbiAgLy8gVE9ETzogYXJlIHRoZSBmb2xsb3dpbmcgMyBuZWVkZWQ/XG4gIGdldERlcGljdGVkQnkoKTogUmVpZmllZDxzdHJpbmc+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICBbIC4uLmFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiXSB8fCBbXSksXG4gICAgICAgIC4uLmFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3Rpb25cIl0gfHwgW10pIF1cbiAgICApO1xuICB9XG5cbiAgaXNQcmVkaWNhdGVGcm9tSW5mb3JtYWxWb2NhYnVsYXJ5KHByZWRpY2F0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wMi9za29zL2NvcmUjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zL1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3NjaGVtYS5vcmcvXCIpXG4gIH1cblxuICAvKiogQ2FuIGJlIGp1c3QgZm91bmQgdW5kZXIgYHByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdYC5cbiAgICogIE5vdCBwcmVzZW50IGluIG9sczQvYXBpLFxuICAgKiAgYnV0IGluIHNlbWFudGljbG9va3VwLnpibWVkLmRlL2FwaS5cbiAgICovXG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICAvKiBvbHM0IGV4Y2x1ZGVzIFwiaGFzIHByZWZlcnJlZCByb290IHRlcm1cIixcbiAgICAgICBwcm9wZXJ0aWVzIHdpdGhvdXQgYW4gSVJJIGFuZCBhbnl0aGluZyBpbiByZGYsIHJkZnMgYW5kIG93bCBuYW1lc3BhY2VzLFxuICAgICAgIGJ1dCB0aGlzIGlzIG5vdCBwb3NzaWJsZSBoZXJlIGFzIHRoZSBsYWJlbHMgYXJlIGtleXMgaGVyZSwgbm90IHRoZSBJUkkncyAqL1xuICAgIHJldHVybiBhc0FycmF5PHN0cmluZz4oT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzW1wiYW5ub3RhdGlvblwiXSkpO1xuICB9XG5cbiAgZ2V0QW5ub3RhdGlvblRpdGxlQnlJZChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGVVbmRlcnNjb3JlKGlkKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOlJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbihhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl1baWRdKSlcbiAgfVxuXG4gIC8vIFRPRE86IENhbiBiZSBpbmZlcnJlZCB2aWEgXCJsaW5rc1wiLT5cImhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJcbiAgZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICAvLyBUT0RPOiBDYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJkZXNjZW5kYW50c1wiXG4gIGdldE51bURlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bURlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bURlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgLy8gVE9ETzogQ2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsUGFyZW50c1wiXG4gIGdldEhpZXJhcmNoaWNhbFBhcmVudFJlaWZpY2F0aW9uQXhpb21zKHBhcmVudElyaTogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBoaWVyYXJjaGljYWxQYXJlbnRzID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsUGFyZW50XCJdXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgcCBvZiBoaWVyYXJjaGljYWxQYXJlbnRzKSB7XG4gICAgICBpZiAocC52YWx1ZSA9PT0gcGFyZW50SXJpKSB7XG4gICAgICAgIHJldHVybiBwLmdldE1ldGFkYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWJzdHJhY3QgZ2V0VHlwZSgpOiBFbnRpdHlUeXBlTmFtZTtcbn1cbiIsICJpbXBvcnQge0NsYXNzfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzRW50aXR5fSBmcm9tIFwiLi9PTFMzRW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7Q2xhc3NUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzQ2xhc3MgZXh0ZW5kcyBPTFMzRW50aXR5IGltcGxlbWVudHMgQ2xhc3Mge1xuXG4gIGdldFR5cGUoKTogQ2xhc3NUeXBlTmFtZSB7XG4gICAgcmV0dXJuIFwiY2xhc3NcIlxuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICByZXR1cm4gXCJjbGFzc2VzXCJcbiAgfVxuXG4gIC8vIFRPRE86IGNhbiBiZSBpbmZlcnJlZCB2aWEgXCJsaW5rc1wiLT5cImhpZXJhcmNoaWNhbFBhcmVudHNcIlxuICBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsUGFyZW50XCJdXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRPRE86IGNhbiBiZSBpbmZlcnJlZCB2aWEgXCJsaW5rc1wiLT5cInBhcmVudHNcIlxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YkNsYXNzT2ZcIl1cbiAgICApO1xuICB9XG5cblxuICAvLyBUT0RPOiBjYW4gdGhpcyBiZSBpbmZlcnJlZD9cbiAgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNlcXVpdmFsZW50Q2xhc3NcIl1cbiAgICApO1xuICB9XG5cblxuICAvLyBUT0RPOiBjYW4gdGhpcyBiZSBpbmZlcnJlZD9cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuXHRyZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2Rpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldEhhc0tleSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2hhc0tleSddKVxuICB9XG5cbiAgZ2V0U3Vic2V0cygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaW5fc3Vic2V0XCJdKSB8fCBbXTtcbiAgfVxufVxuIiwgImltcG9ydCB7UHJvcGVydHl9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzNFbnRpdHl9IGZyb20gXCIuL09MUzNFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtQcm9wZXJ0eVR5cGVOYW1lfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzNQcm9wZXJ0eSBleHRlbmRzIE9MUzNFbnRpdHkgaW1wbGVtZW50cyBQcm9wZXJ0eXtcblxuICBnZXRUeXBlKCk6IFByb3BlcnR5VHlwZU5hbWUge1xuICAgIHJldHVybiBcInByb3BlcnR5XCI7XG4gIH1cblxuICBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViUHJvcGVydHlPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNlcXVpdmFsZW50UHJvcGVydHlcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuXHRyZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5RGlzam9pbnRXaXRoJ10pXG4gIH1cblxuICBnZXRJbnZlcnNlT2YoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW52ZXJzZU9mXCJdKTtcbiAgfVxuXG4gIGdldERvbWFpbigpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNkb21haW4nXSlcbiAgfVxuXG4gIGdldFJhbmdlKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3JhbmdlJ10pXG4gIH1cblxuICBnZXRQcm9wZXJ0eUNoYWlucygpOlJlaWZpZWQ8YW55PltdIHtcblx0cmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pihcblx0XHR0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eUNoYWluQXhpb21cIl1cblx0KVxuICB9XG59XG4iLCAiaW1wb3J0IHtJbmRpdmlkdWFsfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzRW50aXR5fSBmcm9tIFwiLi9PTFMzRW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7SW5kaXZpZHVhbFR5cGVOYW1lfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzNJbmRpdmlkdWFsIGV4dGVuZHMgT0xTM0VudGl0eSBpbXBsZW1lbnRzIEluZGl2aWR1YWx7XG5cbiAgZ2V0VHlwZSgpOiBJbmRpdmlkdWFsVHlwZU5hbWUge1xuICAgIHJldHVybiBcImluZGl2aWR1YWxcIjtcbiAgfVxuXG4gIGdldFBhcmVudHMoKSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImRpcmVjdFBhcmVudFwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oW10pXG4gIH1cblxuICBnZXREaWZmZXJlbnRGcm9tKCkge1xuICAgIHJldHVybiBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlmZmVyZW50RnJvbVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRTYW1lQXMoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjc2FtZUFzXCJdKTtcbiAgfVxuXG4gIGdldEluZGl2aWR1YWxUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmRmVHlwZXM6IGFueSA9IHRoaXMuZ2V0UmRmVHlwZXMoKTtcblxuICAgIGlmICghcmRmVHlwZXMgfHwgIUFycmF5LmlzQXJyYXkocmRmVHlwZXMpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJkZlR5cGVzLmZpbHRlcihcbiAgICAgICh0OiBhbnkpID0+XG4gICAgICAgIHQgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjTmFtZWRJbmRpdmlkdWFsXCIgJiZcblx0XHQoICghICh0eXBlb2YgdCA9PT0gJ3N0cmluZycpIHx8ICF0LnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpKSlcbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHtPbnRvbG9neX0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM1RoaW5nfSBmcm9tIFwiLi9PTFMzVGhpbmdcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHthc0FycmF5LCBkZUNhbWVsQ2FzZX0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzT250b2xvZ3kgZXh0ZW5kcyBPTFMzVGhpbmcgaW1wbGVtZW50cyBPbnRvbG9neXtcblxuICBnZXRUeXBlKCk6IFwib250b2xvZ3lcIiB8IFwiY2xhc3NcIiB8IFwicHJvcGVydHlcIiB8IFwiaW5kaXZpZHVhbFwiIHtcbiAgICByZXR1cm4gXCJvbnRvbG9neVwiO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIge1xuICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lJZFwiXTtcbiAgfVxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbmFtZXMgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICAgIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcInRpdGxlXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAobmFtZXNbMF0gJiYgbmFtZXNbMF0udmFsdWUpIHx8IHRoaXMuZ2V0T250b2xvZ3lJZCgpO1xuICB9XG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb25zID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiZGVzY3JpcHRpb25cIl0gfHwgXCJcIlxuICAgICk7XG4gICAgcmV0dXJuIChkZXNjcmlwdGlvbnNbMF0gJiYgZGVzY3JpcHRpb25zWzBdLnZhbHVlKSB8fCBcIlwiO1xuICB9XG5cbiAgZ2V0Q3JlYXRvcnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdW1wiY3JlYXRvclwiXSk7XG4gIH1cblxuICBnZXRTb3VyY2VGaWxlVGltZXN0YW1wKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInVwZGF0ZWRcIl07XG4gIH1cbiAgZ2V0TnVtRW50aXRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZFbnRpdGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtQ2xhc3NlcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlRlcm1zXCJdKTtcbiAgfVxuICBnZXROdW1Qcm9wZXJ0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mUHJvcGVydGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtSW5kaXZpZHVhbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZJbmRpdmlkdWFsc1wiXSk7XG4gIH1cbiAgZ2V0TG9nb1VSTCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJsb2dvXCJdIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIHVzZWQgYXMgSVJJXG4gIGdldE9udG9sb2d5UHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJmaWxlTG9jYXRpb25cIl07XG4gIH1cblxuICBnZXRIb21lcGFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJob21lcGFnZVwiXTtcbiAgfVxuICBnZXRNYWlsaW5nTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJtYWlsaW5nTGlzdFwiXTtcbiAgfVxuICBnZXRUcmFja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcInRyYWNrZXJcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbklyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ2ZXJzaW9uSXJpXCJdO1xuICB9XG4gIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1widmVyc2lvblwiXTtcbiAgfVxuICBnZXRWZXJzaW9uRnJvbUlyaSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb25JcmkgPSB0aGlzLmdldFZlcnNpb25JcmkoKTtcbiAgICBpZiAoIXZlcnNpb25JcmkpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZlcnNpb25Gcm9tRGF0ZSA9IHZlcnNpb25JcmkubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Lyk7XG5cbiAgICBpZiAodmVyc2lvbkZyb21EYXRlICYmIHZlcnNpb25Gcm9tRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21EYXRlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2ZXJzaW9uRnJvbU51bWJlciA9IHZlcnNpb25JcmkubWF0Y2goL1xcL3ZbZC5dLipcXC8vKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbU51bWJlclxuICAgICAgICA/IHZlcnNpb25Gcm9tTnVtYmVyWzBdLnJlcGxhY2VBbGwoXCIvXCIsIFwiXCIpLnJlcGxhY2UoXCJ2XCIsIFwiXCIpXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0TG9hZGVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxvYWRlZFwiXTtcbiAgfVxuXG4gIC8qKiBDYW4gYmUganVzdCBmb3VuZCB1bmRlciBgcHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdYC5cbiAgICogIE5vdCBwcmVzZW50IGluIG9sczQvYXBpLFxuICAgKiAgYnV0IGluIHNlbWFudGljbG9va3VwLnpibWVkLmRlL2FwaS5cbiAgICovXG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZih0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl0gJiYgdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYW5ub3RhdGlvbnNcIl0pIHtcbiAgICAgIC8qIG9sczQgZXhjbHVkZXMgXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiLFxuICAgICAgIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYW5kIGFueXRoaW5nIGluIHJkZiwgcmRmcyBhbmQgb3dsIG5hbWVzcGFjZXMsXG4gICAgICAgYnV0IHRoaXMgaXMgbm90IHBvc3NpYmxlIGhlcmUgYXMgdGhlIGxhYmVscyBhcmUga2V5cyBoZXJlLCBub3QgdGhlIElSSSdzICovXG4gICAgICByZXR1cm4gYXNBcnJheTxzdHJpbmc+KE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gXCJhbm5vdGF0aW9uc1wiIGtleSBpcyBub3QgcHJlc2VudCBpbiBvbHM0L2FwaVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlQ2FtZWxDYXNlKGlkKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOlJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbihhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdW2lkXSlcbiAgICAgICAgLmZpbHRlcigoZWxlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgZWxlbSAhPT0gXCJzdHJpbmdcIiB8fCBlbGVtICE9PSBcIlwiXG4gICAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0UHJlZmVycmVkUm9vdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhhc1ByZWZlcnJlZFJvb3RcIl0pO1xuICB9XG4gIGdldExhbmd1YWdlcygpOiBzdHJpbmdbXSB7XG4gICAgLy8gbm90IGF2YWlsYWJsZSBpbiBzZW1sb29rcCBBUEksIGJ1dCBpbiBlYmkgQVBJXG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wibGFuZ1wiXSk7XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXZhaWxhYmxlP1xuICBnZXRJbXBvcnRzRnJvbSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGF2YWlsYWJsZT9cbiAgZ2V0RXhwb3J0c1RvKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJleHBvcnRzVG9cIl0pO1xuICB9XG4gIGdldEFsbG93RG93bmxvYWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYWxsb3dEb3dubG9hZFwiXTtcbiAgfVxufVxuIiwgImltcG9ydCB7T250b2xvZ2llc30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM09udG9sb2d5fSBmcm9tIFwiLi9PTFMzT250b2xvZ3lcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzNPbnRvbG9naWVzIGltcGxlbWVudHMgT250b2xvZ2llcyB7XG4gIHByb3BlcnRpZXM6IE9MUzNPbnRvbG9neVtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IE9MUzNPbnRvbG9neVtdKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldFRvdGFsT250b2xvZ2llcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0TnVtRW50aXRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZSgodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bUVudGl0aWVzKCksIDApO1xuICB9XG5cbiAgZ2V0TnVtQ2xhc3NlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKCh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtQ2xhc3NlcygpLCAwKTtcbiAgfVxuXG4gIGdldE51bVByb3BlcnRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZSgodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bVByb3BlcnRpZXMoKSwgMCk7XG4gIH1cblxuICBnZXROdW1JbmRpdmlkdWFscygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKCh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtSW5kaXZpZHVhbHMoKSwgMCk7XG4gIH1cbn1cbiIsICJpbXBvcnQge1RoaW5nfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuXG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4uL0xpbmtlZEVudGl0aWVzXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBpc1RoaW5nVHlwZU5hbWUsIFRoaW5nVHlwZU5hbWUgfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzRUaGluZyBpbXBsZW1lbnRzIFRoaW5nIHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4odGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl0pWzBdLnZhbHVlO1xuICB9XG5cbiAgLy8gVE9ETzogSXMgY3VyaWUgLyBvYm9faWQgbWVhbnQ/XG4gIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlkXCJdO1xuICB9XG5cbiAgZ2V0SXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlyaVwiXTtcbiAgfVxuXG4gIGdldFR5cGUoKTogVGhpbmdUeXBlTmFtZSB7XG4gICAgY29uc3QgdHlwZXMgPSB0aGlzLnByb3BlcnRpZXNbXCJ0eXBlXCJdIGFzIHN0cmluZ1tdO1xuXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzVGhpbmdUeXBlTmFtZSh0eXBlKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0eXBlIGFzIGFueTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGVcIik7XG4gIH1cblxuICBnZXRUeXBlUGx1cmFsKCk6IFwib250b2xvZ2llc1wiIHwgXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB8IFwidGVybXNcIiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgICAgcmV0dXJuIFwib250b2xvZ2llc1wiO1xuICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgIHJldHVybiBcImNsYXNzZXNcIjtcbiAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOiBjYXNlIFwiYW5ub3RhdGlvblByb3BlcnR5XCI6IGNhc2UgXCJkYXRhUHJvcGVydHlcIjogY2FzZSBcIm9iamVjdFByb3BlcnR5XCI6XG4gICAgICAgIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICAgIHJldHVybiBcImluZGl2aWR1YWxzXCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGVcIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmRmVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIlxuICAgIF0pXG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG5cdHJldHVybiB0aGlzLmdldE5hbWVzKClbMF07XG4gIH1cblxuICBnZXROYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbGFiZWxzID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl1cbiAgICApO1xuICAgIGlmIChsYWJlbHMgJiYgbGFiZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBsYWJlbHMubWFwKGxhYmVsID0+IGxhYmVsLnZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gW3RoaXMuZ2V0SXJpKCldO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25cIl0pO1xuICAgIGlmIChkZWZpbml0aW9uICYmIGRlZmluaXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRlZmluaXRpb24ubWFwKChkZWYpID0+IGRlZi52YWx1ZSB8fCBcIlwiKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cblxuICBnZXRMYWJlbEZvcklyaShpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbGlua2VkRW50aXRpZXMgPSB0aGlzLnByb3BlcnRpZXNbXCJsaW5rZWRFbnRpdGllc1wiXTtcbiAgICBpZiAobGlua2VkRW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IGxhYmVsOlJlaWZpZWQ8c3RyaW5nPltdID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KCBsaW5rZWRFbnRpdGllc1tpZF0/LmxhYmVsICk7XG4gICAgICByZXR1cm4gbGFiZWxbMF0/LnZhbHVlIHx8IGlkXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH1cblxuICBhYnN0cmFjdCBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXTtcblxuICBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTpSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbaWRdKSlcbiAgfVxuXG4gIGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWxGb3JJcmkoaWQpO1xuICB9XG5cbiAgZ2V0TGlua2VkRW50aXRpZXMoKTogTGlua2VkRW50aXRpZXMge1xuICAgIHJldHVybiBuZXcgTGlua2VkRW50aXRpZXModGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl0gfHwge30pO1xuICB9XG5cbiAgZ2V0RGVwaWN0aW9uVXJsKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3Rpb25cIl07XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG4iLCAiaW1wb3J0IHtFbnRpdHl9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzRUaGluZ30gZnJvbSBcIi4vT0xTNFRoaW5nXCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzRFbnRpdHkgZXh0ZW5kcyBPTFM0VGhpbmcgaW1wbGVtZW50cyBFbnRpdHl7XG4gIGFic3RyYWN0IGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuXG4gIGlzQ2Fub25pY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpc0RlZmluaW5nT250b2xvZ3lcIl1cbiAgfVxuXG4gIGlzRGVwcmVjYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGVwcmVjYXRlZFwiXVxuICAgICk7XG4gIH1cblxuICBnZXREZXByZWNhdGlvblZlcnNpb24oKTogc3RyaW5nIHtcbiAgICAvLyBvbmx5IHN1cHBvcnRzIEVGTyBmb3Igbm93XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cuZWJpLmFjLnVrL2Vmby9vYnNvbGV0ZWRfaW5fdmVyc2lvblwiXTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVhc29uKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMDAwMjMxXCJdXG4gICAgKS5jb25jYXQoXG4gICAgICBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cuZWJpLmFjLnVrL2Vmby9yZWFzb25fZm9yX29ic29sZXNjZW5jZVwiXVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlcGxhY2VtZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDEwMDAwMVwiXTtcbiAgfVxuXG4gIGdldFJlbGF0ZWRGcm9tKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInJlbGF0ZWRGcm9tXCJdKTtcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uQXNBcnJheSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdKTtcbiAgfVxuXG4gIGhhc0RpcmVjdENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNEaXJlY3RDaGlsZHJlblwiXTtcbiAgfVxuXG4gIGhhc0hpZXJhcmNoaWNhbENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNIaWVyYXJjaGljYWxDaGlsZHJlblwiXTtcbiAgfVxuXG4gIGhhc0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0RpcmVjdENoaWxkcmVuKCkgfHwgdGhpcy5oYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpO1xuICB9XG5cbiAgZ2V0QW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJhbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRIaWVyYXJjaGljYWxBbmNlc3RvcklyaXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbEFuY2VzdG9yXCJdKTtcbiAgfVxuXG4gIGdldFN5bm9ueW1zKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wic3lub255bVwiXSk7XG4gIH1cblxuICBnZXRBcHBlYXJzSW4oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiYXBwZWFyc0luXCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldENyb3NzUmVmZXJlbmNlcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNoYXNEYlhyZWZcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0RGVmaW5lZEJ5KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImRlZmluZWRCeVwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRJc0RlZmluaW5nT250b2xvZ3koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSB8fCB1bmRlZmluZWQgKSBhcyBib29sZWFuO1xuICB9XG5cbiAgZ2V0U2hvcnRGb3JtKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImN1cmllXCJdIHx8IHRoaXMucHJvcGVydGllc1tcInNob3J0Rm9ybVwiXTtcbiAgfVxuXG4gIGdldERlcGljdGVkQnkoKTogUmVpZmllZDxzdHJpbmc+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICBbIC4uLmFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiXSB8fCBbXSksXG4gICAgICAgIC4uLmFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3Rpb25cIl0gfHwgW10pIF1cbiAgICApO1xuICB9XG5cbiAgaXNQcmVkaWNhdGVGcm9tSW5mb3JtYWxWb2NhYnVsYXJ5KHByZWRpY2F0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wMi9za29zL2NvcmUjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zL1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3NjaGVtYS5vcmcvXCIpXG4gIH1cbiAgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRlZmluaXRpb25Qcm9wZXJ0aWVzID0gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uUHJvcGVydHlcIl0pO1xuICAgIGNvbnN0IHN5bm9ueW1Qcm9wZXJ0aWVzID0gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJzeW5vbnltUHJvcGVydHlcIl0pO1xuICAgIGNvbnN0IGhpZXJhcmNoaWNhbFByb3BlcnRpZXMgPSBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsUHJvcGVydHlcIl1cbiAgICApO1xuICAgIGNvbnN0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChjb25zdCBwcmVkaWNhdGUgb2YgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKSkge1xuICAgICAgLy8gcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhcmUgdGhpbmdzIHRoYXQgd2VyZSBhZGRlZCBieSByZGYyanNvbiBzbyBzaG91bGQgbm90XG4gICAgICAvLyBiZSBpbmNsdWRlZCBhcyBhbm5vdGF0aW9uc1xuICAgICAgaWYgKHByZWRpY2F0ZS5pbmRleE9mKFwiOi8vXCIpID09PSAtMSkgY29udGludWU7XG5cbiAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBleHBsaWNpdGx5IGluIEVudGl0eVBhZ2VcbiAgICAgIGlmIChwcmVkaWNhdGUuc3RhcnRzV2l0aChcIm5lZ2F0aXZlUHJvcGVydHlBc3NlcnRpb24rXCIpKSBjb250aW51ZTtcblxuICAgICAgLy8gdGhpcyBpcyBoYW5kbGVkIGV4cGxpY2l0bHkgaW4gRW50aXR5UGFnZVxuICAgICAgaWYgKHByZWRpY2F0ZSA9PT0gXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGVkX2J5XCIpIGNvbnRpbnVlO1xuICAgICAgaWYgKHByZWRpY2F0ZSA9PT0gXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGlvblwiKSBjb250aW51ZTtcblxuICAgICAgLy8gT2JqZWN0IHByb3BlcnRpZXMgYW5kIGRhdGEgcHJvcGVydGllcyBhcmUgbm90IGFubm90YXRpb24gcHJvcGVydGllcywgZXhjZXB0IGluIHRoZSBjYXNlIG9mIGluZm9ybWFsIHZvY2FidWxhcmllcy5cbiAgICAgIGlmICghdGhpcy5pc1ByZWRpY2F0ZUZyb21JbmZvcm1hbFZvY2FidWxhcnkocHJlZGljYXRlKSkge1xuICAgICAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSB0aGlzLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KHByZWRpY2F0ZSlcbiAgICAgICAgaWYgKGxpbmtlZEVudGl0eSAhPSB1bmRlZmluZWQgJiYgbGlua2VkRW50aXR5LnR5cGUuaW5kZXhPZihcIm9iamVjdFByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG4gICAgICAgIGlmIChsaW5rZWRFbnRpdHkgIT0gdW5kZWZpbmVkICYmIGxpbmtlZEVudGl0eS50eXBlLmluZGV4T2YoXCJkYXRhUHJvcGVydHlcIikgIT09IC0xKSBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIHZhbHVlIHdhcyBhbHJlYWR5IGludGVycHJldGVkIGFzIGRlZmluaXRpb24vc3lub255bS9oaWVyYXJjaGljYWwsIGRvXG4gICAgICAvLyBub3QgaW5jbHVkZSBpdCBhcyBhbiBhbm5vdGF0aW9uXG4gICAgICBpZiAoXG4gICAgICAgIGRlZmluaXRpb25Qcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTEgfHxcbiAgICAgICAgc3lub255bVByb3BlcnRpZXMuaW5kZXhPZihwcmVkaWNhdGUpICE9PSAtMSB8fFxuICAgICAgICBoaWVyYXJjaGljYWxQcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYW55dGhpbmcgaW4gdGhlIHJkZiwgcmRmcywgb3dsIG5hbWVzcGFjZXMgYXJlbid0IGRpc3BsYXllZCBpbiB0aGUgYW5ub3RhdGlvbnMgc2VjdGlvbi4uLlxuICAgICAgaWYgKFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjXCIpXG4gICAgICApIHtcbiAgICAgICAgLy8gLi4uYXBhcnQgZnJvbSB0aGVzZSBvbmVzXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI2NvbW1lbnRcIiAmJlxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc2VlQWxzb1wiICYmXG4gICAgICAgICAgLy8gcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2hhc0tleVwiICYmXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2Rpc2pvaW50VW5pb25PZlwiXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHdoaWxlIGluIGdlbmVyYWwgb2JvSW5Pd2wgbmFtZXNwYWNlIHByb3BlcnRpZXMgYXJlIGFubm90YXRpb25zLCBzb21lXG4gICAgICAvLyBvZiB0aGVtIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheVxuICAgICAgLy9cbiAgICAgIGlmIChcbiAgICAgICAgcHJlZGljYXRlID09PSBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2luU3Vic2V0XCIgfHxcbiAgICAgICAgcHJlZGljYXRlID09PSBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2lkXCJcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYW5ub3RhdGlvblByZWRpY2F0ZXMuYWRkKHByZWRpY2F0ZSk7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coXCJBUHNcIik7XG4gICAgLy8gY29uc29sZS5kaXIoQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykpO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICBnZXROdW1EZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1EaXJlY3REZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1EaXJlY3REZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIGdldEhpZXJhcmNoaWNhbFBhcmVudFJlaWZpY2F0aW9uQXhpb21zKHBhcmVudElyaTogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBoaWVyYXJjaGljYWxQYXJlbnRzID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsUGFyZW50XCJdXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgcCBvZiBoaWVyYXJjaGljYWxQYXJlbnRzKSB7XG4gICAgICBpZiAocC52YWx1ZSA9PT0gcGFyZW50SXJpKSB7XG4gICAgICAgIHJldHVybiBwLmdldE1ldGFkYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHtDbGFzc30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTNEVudGl0eX0gZnJvbSBcIi4vT0xTNEVudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0Q2xhc3MgZXh0ZW5kcyBPTFM0RW50aXR5IGltcGxlbWVudHMgQ2xhc3Mge1xuICBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsUGFyZW50XCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YkNsYXNzT2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudENsYXNzXCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFdpdGgnXSk7XG4gIH1cblxuICBnZXRIYXNLZXkoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXknXSk7XG4gIH1cblxuICBnZXRTdWJzZXRzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNpblN1YnNldFwiXSkgfHwgW107XG4gIH1cbn1cbiIsICJpbXBvcnQge1Byb3BlcnR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0RW50aXR5fSBmcm9tIFwiLi9PTFM0RW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzRQcm9wZXJ0eSBleHRlbmRzIE9MUzRFbnRpdHkgaW1wbGVtZW50cyBQcm9wZXJ0eXtcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudFByb3BlcnR5XCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuXHRyZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5RGlzam9pbnRXaXRoJ10pXG4gIH1cblxuICBnZXRJbnZlcnNlT2YoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW52ZXJzZU9mXCJdKTtcbiAgfVxuXG4gIGdldERvbWFpbigpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNkb21haW4nXSlcbiAgfVxuXG4gIGdldFJhbmdlKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3JhbmdlJ10pXG4gIH1cblxuICBnZXRQcm9wZXJ0eUNoYWlucygpOlJlaWZpZWQ8YW55PltdIHtcblx0cmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pihcblx0XHR0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eUNoYWluQXhpb21cIl1cblx0KVxuICB9XG5cbn1cbiIsICJpbXBvcnQge0luZGl2aWR1YWx9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzRFbnRpdHl9IGZyb20gXCIuL09MUzRFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTNEluZGl2aWR1YWwgZXh0ZW5kcyBPTFM0RW50aXR5IGltcGxlbWVudHMgSW5kaXZpZHVhbHtcbiAgZ2V0UGFyZW50cygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGlyZWN0UGFyZW50XCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihbXSlcbiAgfVxuXG4gIGdldERpZmZlcmVudEZyb20oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaWZmZXJlbnRGcm9tXCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldFNhbWVBcygpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNzYW1lQXNcIl0pO1xuICB9XG5cbiAgZ2V0SW5kaXZpZHVhbFR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZGZUeXBlczogYW55ID0gdGhpcy5nZXRSZGZUeXBlcygpO1xuXG4gICAgaWYgKCFyZGZUeXBlcyB8fCAhQXJyYXkuaXNBcnJheShyZGZUeXBlcykpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmRmVHlwZXMuZmlsdGVyKFxuICAgICAgKHQ6IGFueSkgPT5cbiAgICAgICAgdCAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNOYW1lZEluZGl2aWR1YWxcIiAmJlxuXHRcdCggKCEgKHR5cGVvZiB0ID09PSAnc3RyaW5nJykgfHwgIXQuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikpKVxuICAgICk7XG4gIH1cblxufVxuIiwgImltcG9ydCB7T250b2xvZ3l9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzRUaGluZ30gZnJvbSBcIi4vT0xTNFRoaW5nXCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzRPbnRvbG9neSBleHRlbmRzIE9MUzRUaGluZyBpbXBsZW1lbnRzIE9udG9sb2d5e1xuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWVzID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1widGl0bGVcIl0gfHwgXCJcIlxuICAgICk7XG4gICAgcmV0dXJuIChuYW1lc1swXSAmJiBuYW1lc1swXS52YWx1ZSkgfHwgdGhpcy5nZXRPbnRvbG9neUlkKCk7XG4gIH1cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbnMgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdIHx8IHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAoZGVzY3JpcHRpb25zWzBdICYmIGRlc2NyaXB0aW9uc1swXS52YWx1ZSkgfHwgXCJcIjtcbiAgfVxuXG4gIGdldENyZWF0b3JzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL2NyZWF0b3JcIl0pO1xuICB9XG5cbiAgZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzb3VyY2VGaWxlVGltZXN0YW1wXCJdO1xuICB9XG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mRW50aXRpZXNcIl0pO1xuICB9XG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZDbGFzc2VzXCJdKTtcbiAgfVxuICBnZXROdW1Qcm9wZXJ0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mUHJvcGVydGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtSW5kaXZpZHVhbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZJbmRpdmlkdWFsc1wiXSk7XG4gIH1cbiAgZ2V0TG9nb1VSTCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJkZXBpY3RlZF9ieVwiXSB8fCB1bmRlZmluZWQ7XG4gIH1cbiAgZ2V0T250b2xvZ3lQdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5X3B1cmxcIl07XG4gIH1cbiAgZ2V0SG9tZXBhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaG9tZXBhZ2VcIl07XG4gIH1cbiAgZ2V0TWFpbGluZ0xpc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibWFpbGluZ19saXN0XCJdO1xuICB9XG4gIGdldFRyYWNrZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1widHJhY2tlclwiXTtcbiAgfVxuICBnZXRWZXJzaW9uSXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3ZlcnNpb25JUklcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN2ZXJzaW9uSW5mb1wiXTtcbiAgfVxuICBnZXRWZXJzaW9uRnJvbUlyaSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb25JcmkgPSB0aGlzLmdldFZlcnNpb25JcmkoKTtcbiAgICBpZiAoIXZlcnNpb25JcmkpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZlcnNpb25Gcm9tRGF0ZSA9IHZlcnNpb25JcmkubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Lyk7XG5cbiAgICBpZiAodmVyc2lvbkZyb21EYXRlICYmIHZlcnNpb25Gcm9tRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21EYXRlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2ZXJzaW9uRnJvbU51bWJlciA9IHZlcnNpb25JcmkubWF0Y2goL1xcL3ZbZC5dLipcXC8vKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbU51bWJlclxuICAgICAgICA/IHZlcnNpb25Gcm9tTnVtYmVyWzBdLnJlcGxhY2VBbGwoXCIvXCIsIFwiXCIpLnJlcGxhY2UoXCJ2XCIsIFwiXCIpXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0TG9hZGVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxvYWRlZFwiXTtcbiAgfVxuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgYW5ub3RhdGlvblByZWRpY2F0ZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBmb3IgKGNvbnN0IHByZWRpY2F0ZSBvZiBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpKSB7XG4gICAgICAvLyBwcm9wZXJ0aWVzIHdpdGhvdXQgYW4gSVJJIGFyZSB0aGluZ3MgdGhhdCB3ZXJlIGFkZGVkIGJ5IHJkZjJqc29uIHNvIHNob3VsZCBub3RcbiAgICAgIC8vIGJlIGluY2x1ZGVkIGFzIGFubm90YXRpb25zXG4gICAgICBpZiAocHJlZGljYXRlLmluZGV4T2YoXCI6Ly9cIikgPT09IC0xKSBjb250aW51ZTtcblxuICAgICAgaWYgKHByZWRpY2F0ZSA9PT0gXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAwMDA3MDBcIikge1xuICAgICAgICAvLyBcImhhcyBwcmVmZXJyZWQgcm9vdCB0ZXJtXCJcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFueXRoaW5nIGluIHRoZSByZGYsIHJkZnMsIG93bCBuYW1lc3BhY2VzIGFyZW4ndCBjb25zaWRlcmVkIGFubm90YXRpb25zXG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpIHx8XG4gICAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjXCIpIHx8XG4gICAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNcIilcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGFubm90YXRpb25QcmVkaWNhdGVzLmFkZChwcmVkaWNhdGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKGFubm90YXRpb25QcmVkaWNhdGVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuICBnZXRQcmVmZXJyZWRSb290cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaGFzUHJlZmVycmVkUm9vdFwiXSk7XG4gIH1cbiAgZ2V0TGFuZ3VhZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJsYW5ndWFnZVwiXSk7XG4gIH1cbiAgZ2V0SW1wb3J0c0Zyb20oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImltcG9ydHNGcm9tXCJdKTtcbiAgfVxuICBnZXRFeHBvcnRzVG8oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImV4cG9ydHNUb1wiXSk7XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXZhaWxhYmxlP1xuICBnZXRBbGxvd0Rvd25sb2FkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImFsbG93RG93bmxvYWRcIl07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBPTFMzT250b2xvZ3ksIE9MUzNDbGFzcywgT0xTM1Byb3BlcnR5LCBPTFMzSW5kaXZpZHVhbCB9IGZyb20gXCIuL29sczMtbW9kZWxcIjtcbmltcG9ydCB7IE9MUzRPbnRvbG9neSwgT0xTNENsYXNzLCBPTFM0UHJvcGVydHksIE9MUzRJbmRpdmlkdWFsIH0gZnJvbSBcIi4vb2xzNC1tb2RlbFwiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBUaGluZ1R5cGVOYW1lIH0gZnJvbSBcIi4vTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IGFzQXJyYXksIGluZmVyVHlwZUZyb21UeXBlQXJyYXkgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsT2JqZWN0KHJlc3BvbnNlOiBhbnkpIHtcbiAgbGV0IHVzZUxlZ2FjeTogYm9vbGVhbjtcbiAgaWYgKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdICE9PSB1bmRlZmluZWQgfHwgcmVzcG9uc2VbXCJudW1iZXJPZlRlcm1zXCJdICE9PSB1bmRlZmluZWQpIHVzZUxlZ2FjeSA9IHRydWU7XG4gIGVsc2UgaWYgKHJlc3BvbnNlW1wiZWxlbWVudHNcIl0gIT09IHVuZGVmaW5lZCB8fCByZXNwb25zZVtcIm51bWJlck9mQ2xhc3Nlc1wiXSAhPT0gdW5kZWZpbmVkKSB1c2VMZWdhY3kgPSBmYWxzZTtcbiAgZWxzZSB0aHJvdyBFcnJvcihgUmVzcG9uc2Ugc3RydWN0dXJlIGRvZXMgbm90IGNvcnJlbGF0ZSB0byBhbnkgb2YgdGhlIGZlYXR1cmVkIHJlc3BvbnNlIHN0cnVjdHVyZXM6IFxcbiAke0pTT04uc3RyaW5naWZ5KHJlc3BvbnNlKX1gKTtcblxuICBsZXQgZW50aXR5VHlwZTogVGhpbmdUeXBlTmFtZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgaWYgKHVzZUxlZ2FjeSkge1xuICAgIGlmIChyZXNwb25zZVtcIl9lbWJlZGRlZFwiXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbnRpdHlUeXBlID0gXCJvbnRvbG9neVwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcInRlcm1zXCJdICE9PSB1bmRlZmluZWQpIGVudGl0eVR5cGUgPSBcInRlcm1cIjtcbiAgICAgIGVsc2UgaWYgKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wicHJvcGVydGllc1wiXSAhPT0gdW5kZWZpbmVkKSBlbnRpdHlUeXBlID0gXCJwcm9wZXJ0eVwiO1xuICAgICAgZWxzZSBpZiAocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJpbmRpdmlkdWFsc1wiXSAhPT0gdW5kZWZpbmVkKSBlbnRpdHlUeXBlID0gXCJpbmRpdmlkdWFsXCI7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIGlmIChyZXNwb25zZVtcImVsZW1lbnRzXCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVudGl0eVR5cGUgPSBcIm9udG9sb2d5XCI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHJlc3BvbnNlW1wiZWxlbWVudHNcIl1bMF0gPT09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoXCJFbXB0eSByZXNwb25zZS5cIik7XG5cbiAgICAgIGVudGl0eVR5cGUgPSBpbmZlclR5cGVGcm9tVHlwZUFycmF5KHJlc3BvbnNlW1wiZWxlbWVudHNcIl1bMF1bXCJ0eXBlXCJdKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW50aXR5VHlwZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihcIkVudGl0eSB0eXBlIGNvdWxkIG5vdCBiZSBjb3JyZWN0bHkgaW5mZXJyZWQuXCIpO1xuXG4gIHJldHVybiBjcmVhdGVNb2RlbE9iamVjdFdpdGhFbnRpdHlUeXBlV2l0aFVzZUxlZ2FjeShyZXNwb25zZSwgZW50aXR5VHlwZSwgdXNlTGVnYWN5KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTW9kZWxPYmplY3RXaXRoRW50aXR5VHlwZVdpdGhVc2VMZWdhY3kocmVzcG9uc2U6IGFueSwgZW50aXR5VHlwZTogc3RyaW5nLCB1c2VMZWdhY3k6IGJvb2xlYW4pOiBUaGluZyB7XG4gIHN3aXRjaCAoZW50aXR5VHlwZSkge1xuICAgIGNhc2UgXCJvbnRvbG9neVwiOlxuICAgICAgcmV0dXJuIHVzZUxlZ2FjeSA/IG5ldyBPTFMzT250b2xvZ3kocmVzcG9uc2UpIDogbmV3IE9MUzRPbnRvbG9neShyZXNwb25zZSk7XG5cbiAgICBjYXNlIFwidGVybVwiOlxuICAgIGNhc2UgXCJjbGFzc1wiOiAvLyBhbGxvdyBCT1RILCBldmVuIGlmIGl0IHNob3VsZCBhY3R1YWxseSBiZSBcInRlcm1cIlxuICAgICAgcmV0dXJuIHVzZUxlZ2FjeSA/IG5ldyBPTFMzQ2xhc3MoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJ0ZXJtc1wiXSksIHVzZUxlZ2FjeSkpIDogbmV3IE9MUzRDbGFzcyhnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oYXNBcnJheShyZXNwb25zZVtcImVsZW1lbnRzXCJdKSwgdXNlTGVnYWN5KSk7XG5cbiAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM1Byb3BlcnR5KGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wicHJvcGVydGllc1wiXSksIHVzZUxlZ2FjeSkpIDogbmV3IE9MUzRQcm9wZXJ0eShnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oYXNBcnJheShyZXNwb25zZVtcImVsZW1lbnRzXCJdKSwgdXNlTGVnYWN5KSk7XG5cbiAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgcmV0dXJuIHVzZUxlZ2FjeSA/IG5ldyBPTFMzSW5kaXZpZHVhbChnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oYXNBcnJheShyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcImluZGl2aWR1YWxzXCJdKSwgdXNlTGVnYWN5KSkgOiBuZXcgT0xTNEluZGl2aWR1YWwoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSkpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIGVudGl0eSB0eXBlIFwiJyArIGVudGl0eVR5cGUgKyAnXCIuIE11c3QgYmUgb25lIG9mIHtcInRlcm1cIiwgXCJjbGFzc1wiLCBcIm9udG9sb2d5XCIsIFwicHJvcGVydHlcIiwgXCJpbmRpdmlkdWFsXCJ9Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBKU09OIG9mIHRoZSBlbnRpdHkgaW4gaXRzIGRlZmluaW5nIG9udG9sb2d5LCBvciwgaWYgbm90IGF2YWlsYWJsZSwganVzdCB0aGUgZmlyc3QgSlNPTiBpbiB0aGUgYXJyYXkuXG4gKiBJZiBvbnRvbG9neUlkIHdhcyBwcm92aWRlZCBpbiB0aGUgcmVzcG9uc2UgcmVxdWVzdCwgdGhlIGFycmF5IHNob3VsZCBvbmx5IGNvbnRhaW4gb25lIGVsZW1lbnQsIHRodXMgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgYXMgZXhwZWN0ZWQgYXMgd2VsbFxuICogQHBhcmFtIGVudGl0eUFycmF5UmVzcG9uc2UgdGhlIHN1Yi1yZXNwb25zZSBvZiB0aGUgaW5pdGlhbCBxdWVyeSByZXNwb25zZSBjb250YWluaW5nIGp1c3QgdGhlIGVudGl0eSBhcnJheVxuICogQHBhcmFtIHVzZUxlZ2FjeSBhcGkgdmVyc2lvbiAobmVlZGVkIGJlY2F1c2Uga2V5IGdpdmluZyBpbmZvcm1hdGlvbiBhYm91dCBkZWZpbmluZyBvbnRvbG9neSBoYXMgZGlmZmVyZW50IG5hbWVzIGluIGJvdGggdmVyc2lvbnMpXG4gKiBAcGFyYW0gb250b2xvZ3lJZCBpZiBzcGVjaWZpZWQsIHJldHVybnMgdGhlIGVudGl0eSBpbiB0aGlzIG9udG9sb2d5IGlmIGF2YWlsYWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGVudGl0eUFycmF5UmVzcG9uc2U6IGFueVtdLCB1c2VMZWdhY3k6IGJvb2xlYW4sIG9udG9sb2d5SWQ/OiBzdHJpbmcpIHtcbiAgaWYgKG9udG9sb2d5SWQpIHtcbiAgICBjb25zdCBlbnRpdHlJbk9udG9sb2d5ID0gYXNBcnJheShlbnRpdHlBcnJheVJlc3BvbnNlKS5maWx0ZXIoKGVudGl0eSkgPT4gKHVzZUxlZ2FjeSA/IGVudGl0eVtcIm9udG9sb2d5X25hbWVcIl0gOiBlbnRpdHlbXCJvbnRvbG9neUlkXCJdKSA9PSBvbnRvbG9neUlkKTtcbiAgICBpZiAoZW50aXR5SW5PbnRvbG9neS5sZW5ndGggPiAwKSByZXR1cm4gZW50aXR5SW5PbnRvbG9neVswXTtcbiAgICBlbHNlIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgb250b2xvZ3lJZCAke29udG9sb2d5SWR9IGZvciBnaXZlbiBlbnRpdHlBcnJheVJlc3BvbnNlLmApO1xuICB9XG5cbiAgY29uc3QgZGVmaW5pbmdPbnRvbG9neUFyciA9IGFzQXJyYXkoZW50aXR5QXJyYXlSZXNwb25zZSkuZmlsdGVyKChlbnRpdHkpID0+IHVzZUxlZ2FjeSA/IGVudGl0eVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdIDogZW50aXR5W1wiaXNEZWZpbmluZ09udG9sb2d5XCJdKTtcbiAgaWYgKGRlZmluaW5nT250b2xvZ3lBcnIubGVuZ3RoID4gMCkgcmV0dXJuIGRlZmluaW5nT250b2xvZ3lBcnJbMF07XG4gIGVsc2UgaWYgKGVudGl0eUFycmF5UmVzcG9uc2UubGVuZ3RoID4gMCkgcmV0dXJuIGVudGl0eUFycmF5UmVzcG9uc2VbMF07XG4gIGVsc2UgdGhyb3cgRXJyb3IoXCJFbXB0eSByZXNwb25zZS5cIik7XG59XG4iLCAiaW1wb3J0IHtFbnRpdHlUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQge0hpZXJhcmNoeUJ1aWxkZXJ9IGZyb20gXCIuLi8uLi9hcGkvSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHtFbnRpdHlEYXRhfSBmcm9tIFwiLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIFBhcmVudENoaWxkUmVsYXRpb24gPSB7XG4gICAgY2hpbGRJcmk6IHN0cmluZyxcbiAgICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFRyZWVOb2RlIHtcbiAgICBlbnRpdHlEYXRhOiBFbnRpdHlEYXRhO1xuICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudD86IHN0cmluZztcbiAgICBsb2FkZWRDaGlsZHJlbjogVHJlZU5vZGVbXTtcbiAgICBleHBhbmRlZDogYm9vbGVhbjtcbiAgICBsb2FkaW5nOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGVudGl0eURhdGFcbiAgICAgKiBAcGFyYW0gY2hpbGRSZWxhdGlvblRvUGFyZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZW50aXR5RGF0YTogRW50aXR5RGF0YSwgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZW50aXR5RGF0YSA9IGVudGl0eURhdGE7XG4gICAgICAgIHRoaXMubG9hZGVkQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGlsZFJlbGF0aW9uVG9QYXJlbnQgPSBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ7XG4gICAgfVxuXG4gICAgYWRkQ2hpbGQoY2hpbGQ6IFRyZWVOb2RlKSB7XG4gICAgICAgIHRoaXMubG9hZGVkQ2hpbGRyZW4ucHVzaChjaGlsZClcbiAgICB9XG59XG5cbmNvbnN0IERFRkFVTFRfSU5DTFVERV9PQlNPTEVURV9FTlRJVElFUzogYm9vbGVhbiA9IGZhbHNlIGFzIGNvbnN0O1xuY29uc3QgREVGQVVMVF9LRUVQX0VYUEFOU0lPTl9TVEFURTogYm9vbGVhbiA9IHRydWUgYXMgY29uc3Q7XG5cbmV4cG9ydCBjbGFzcyBIaWVyYXJjaHkge1xuICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+O1xuICAgIGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YT47XG4gICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBTZXQ8c3RyaW5nPjtcbiAgICByb290czogVHJlZU5vZGVbXTsgLy8gc3RvcmVzIHRoZSB0cmVlIGhpZXJhcmNoeVxuICAgIHByb3RlY3RlZCBhcGk6IEhpZXJhcmNoeUJ1aWxkZXI7XG4gICAgb250b2xvZ3lJZDogc3RyaW5nO1xuXG4gICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGJvb2xlYW4gPSBERUZBVUxUX0lOQ0xVREVfT0JTT0xFVEVfRU5USVRJRVM7XG4gICAgZW50aXR5VHlwZT86IEVudGl0eVR5cGVOYW1lO1xuICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGJvb2xlYW4gPSBERUZBVUxUX0tFRVBfRVhQQU5TSU9OX1NUQVRFO1xuICAgIHByb3RlY3RlZCB1c2VMZWdhY3k/OiBib29sZWFuO1xuXG4gICAgbWFpbkVudGl0eUlyaT86IHN0cmluZzsgLy8gdG8gaGlnaGxpZ2h0IGl0IGluIHRoZSBoaWVyYXJjaHlcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiB7XG4gICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+LFxuICAgICAgICBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+LFxuICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQ6IFNldDxzdHJpbmc+LFxuICAgICAgICByb290czogVHJlZU5vZGVbXSxcbiAgICAgICAgYXBpOiBIaWVyYXJjaHlCdWlsZGVyLFxuICAgICAgICBvbnRvbG9neUlkOiBzdHJpbmcsXG4gICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzPzogYm9vbGVhbixcbiAgICAgICAgZW50aXR5VHlwZT86IEVudGl0eVR5cGVOYW1lLFxuICAgICAgICBtYWluRW50aXR5SXJpPzogc3RyaW5nLFxuICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzPzogYm9vbGVhbixcbiAgICAgICAgdXNlTGVnYWN5PzogYm9vbGVhbixcbiAgICB9KSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLFxuICAgICAgICAgICAgZW50aXRpZXNEYXRhLFxuICAgICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50LFxuICAgICAgICAgICAgcm9vdHMsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgICAgICBhcGksXG4gICAgICAgICAgICBtYWluRW50aXR5SXJpLFxuICAgICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICB1c2VMZWdhY3ksXG4gICAgICAgIH0gPSBwcm9wcztcblxuICAgICAgICB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zID0gcGFyZW50Q2hpbGRSZWxhdGlvbnM7XG4gICAgICAgIHRoaXMuZW50aXRpZXNEYXRhID0gZW50aXRpZXNEYXRhO1xuICAgICAgICB0aGlzLmFsbENoaWxkcmVuUHJlc2VudCA9IGFsbENoaWxkcmVuUHJlc2VudDtcbiAgICAgICAgdGhpcy5yb290cyA9IHJvb3RzO1xuICAgICAgICBpZihpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyAhPSB1bmRlZmluZWQpIHRoaXMuaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcztcbiAgICAgICAgaWYoa2VlcEV4cGFuc2lvblN0YXRlcyAhPSB1bmRlZmluZWQpIHRoaXMua2VlcEV4cGFuc2lvblN0YXRlcyA9IGtlZXBFeHBhbnNpb25TdGF0ZXM7XG4gICAgICAgIHRoaXMuYXBpID0gYXBpO1xuICAgICAgICB0aGlzLm1haW5FbnRpdHlJcmkgPSBtYWluRW50aXR5SXJpO1xuICAgICAgICB0aGlzLmVudGl0eVR5cGUgPSBlbnRpdHlUeXBlO1xuICAgICAgICB0aGlzLm9udG9sb2d5SWQgPSBvbnRvbG9neUlkO1xuICAgICAgICBpZih1c2VMZWdhY3kgIT0gdW5kZWZpbmVkKSB0aGlzLnVzZUxlZ2FjeSA9IHVzZUxlZ2FjeTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZXMgdGhlIGVudHJpZXMgb2YgYHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMobm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpKWAgaW50byBgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuYC4gSGVyZSxcbiAgICAgKiBvbmx5IG5vdCBhbHJlYWR5IHByZXNlbnQgY2hpbGRyZW4gYXJlIGFkZGVkIHRvIGtlZXAgdGhlIGV4cGFuc2lvbiBzdGF0ZSBvZiB0aGUgYWxyZWFkeSBsb2FkZWQgY2hpbGRyZW4uXG4gICAgICogYG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbmAgaXMgc29ydGVkIGFscGhhYmV0aWNhbGx5IGJ5IGRpc3BsYXllZCBsYWJlbHMgYWZ0ZXJ3YXJkLlxuICAgICAqXG4gICAgICogQVNTVU1QVElPTlM6XG4gICAgICogMS4gYHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KG5vZGVUb0V4cGFuZClgIGlzIHNvcnRlZCBhbHBoYWJldGljYWxseSBieSBkaXNwbGF5ZWQgbGFiZWxzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZVRvRXhwYW5kIHRoZSBub2RlIGluc2lkZSB0aGUgaGllcmFyY2h5IChgdGhpcy5yb290c2ApIHRvIG1lcmdlIHRoZSBjaGlsZHJlbiBpbnRvXG4gICAgICovXG4gICAgcHJpdmF0ZSBtZXJnZUNoaWxkcmVuSW50b0xvYWRlZENoaWxkcmVuKG5vZGVUb0V4cGFuZDogVHJlZU5vZGUpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zLmdldChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICBpZihjaGlsZHJlbiA9PSB1bmRlZmluZWQpIHRocm93IEVycm9yKGBwYXJlbnRDaGlsZFJlbGF0aW9ucyBoYXMgbm8gZW50cnkgZm9yIGtleSBcIiR7bm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpfVwiIGFsdGhvdWdoIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5gKTtcblxuICAgICAgICBsZXQgaUxvYWRlZENoaWxkcmVuID0gMDtcbiAgICAgICAgY29uc3QgbnVtTG9hZGVkQ2hpbGRyZW4gPSBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoOyAvLyBpbml0aWFsIGxlbmd0aFxuICAgICAgICBsZXQgaUNoaWxkcmVuID0gMDtcblxuICAgICAgICB3aGlsZShpQ2hpbGRyZW4gPCBjaGlsZHJlbi5sZW5ndGggJiYgaUxvYWRlZENoaWxkcmVuIDwgbnVtTG9hZGVkQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmKG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbltpTG9hZGVkQ2hpbGRyZW5dLmVudGl0eURhdGEuaXJpID09IGNoaWxkcmVuW2lDaGlsZHJlbl0uY2hpbGRJcmkpIHtcbiAgICAgICAgICAgICAgICBpTG9hZGVkQ2hpbGRyZW4rKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgbm9kZVRvRXhwYW5kLmFkZENoaWxkKG5ldyBUcmVlTm9kZSh0aGlzLmVudGl0aWVzRGF0YS5nZXQoY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZElyaSkhLCBjaGlsZHJlbltpQ2hpbGRyZW5dLmNoaWxkUmVsYXRpb25Ub1BhcmVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaUNoaWxkcmVuKys7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUoaUNoaWxkcmVuIDwgY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgbm9kZVRvRXhwYW5kLmFkZENoaWxkKG5ldyBUcmVlTm9kZSh0aGlzLmVudGl0aWVzRGF0YS5nZXQoY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZElyaSkhLCBjaGlsZHJlbltpQ2hpbGRyZW5dLmNoaWxkUmVsYXRpb25Ub1BhcmVudCkpO1xuICAgICAgICAgICAgaUNoaWxkcmVuKys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzb3J0IGFscmVhZHkgbG9hZGVkIGNoaWxkcmVuIGluIGNvcnJlY3RseVxuICAgICAgICBmb3IobGV0IGlMb2FkZWRDaGlsZHJlbiA9IG51bUxvYWRlZENoaWxkcmVuIC0gMTsgaUxvYWRlZENoaWxkcmVuID49IDA7IGlMb2FkZWRDaGlsZHJlbi0tKSB7XG4gICAgICAgICAgICBmb3IobGV0IGN1cnJJZHggPSBpTG9hZGVkQ2hpbGRyZW4gKyAxOyBjdXJySWR4IDwgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuLmxlbmd0aDsgY3VycklkeCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3Vyck5vZGUgPSBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeF07XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldk5vZGUgPSBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeCAtIDFdO1xuXG4gICAgICAgICAgICAgICAgaWYoKGN1cnJOb2RlLmVudGl0eURhdGEubGFiZWwgfHwgY3Vyck5vZGUuZW50aXR5RGF0YS5pcmkpLmxvY2FsZUNvbXBhcmUocHJldk5vZGUuZW50aXR5RGF0YS5sYWJlbCB8fCBwcmV2Tm9kZS5lbnRpdHlEYXRhLmlyaSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbltjdXJySWR4XSA9IHByZXZOb2RlO1xuICAgICAgICAgICAgICAgICAgICBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeCAtIDFdID0gY3Vyck5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZU5vZGUobm9kZVRvQ2xvc2U6IFRyZWVOb2RlKSB7XG4gICAgICAgIGlmKCF0aGlzLmtlZXBFeHBhbnNpb25TdGF0ZXMpIHtcbiAgICAgICAgICAgIG5vZGVUb0Nsb3NlLmxvYWRlZENoaWxkcmVuID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGV4cGFuc2lvbiBvZiBgbm9kZVRvRXhwYW5kYCBpcyBhdmFpbGFibGUgKGkuZS4gdGhlcmUgYXJlIGFscmVhZHkgY2hpbGRyZW4gbG9hZGVkKSBhbmQgZmV0Y2hlcyBpdCBpZiBub3QuXG4gICAgICogQHJldHVybiBib29sZWFuIGB0cnVlYCBpZiBpbmZvcm1hdGlvbiBoYWQgdG8gYmUgZmV0Y2hlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICAgKi9cbiAgICBhc3luYyBmZXRjaEluZm9ybWF0aW9uRm9yRXhwYW5zaW9uKG5vZGVUb0V4cGFuZDogVHJlZU5vZGUpIHtcbiAgICAgICAgaWYoIW5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmhhc0NoaWxkcmVuKSB0aHJvdyBFcnJvcihgTm9kZSBjb250YWluaW5nIGlyaT1cIiR7bm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpfVwiIGNvdWxkIG5vdCBiZSBleHBhbmRlZDogRW50aXR5IGlzIG5vdCBleHBhbmRhYmxlLmApXG5cbiAgICAgICAgY29uc3QgYWxsQ2hpbGRyZW5QcmVzZW50ID0gdGhpcy5hbGxDaGlsZHJlblByZXNlbnQuaGFzKG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSk7XG4gICAgICAgIGNvbnN0IG5vZGVQYXJlbnRDaGlsZFJlbGF0aW9ucyA9IHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSkgfHwgW107XG4gICAgICAgIGlmKCFhbGxDaGlsZHJlblByZXNlbnQgfHwgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuLmxlbmd0aCA8PSBub2RlUGFyZW50Q2hpbGRSZWxhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZighYWxsQ2hpbGRyZW5QcmVzZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gZHluYW1pY2FsbHkgbG9hZCBjaGlsZHJlbiBmcm9tIGFwaVxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuOiBFbnRpdHlEYXRhW10gPSAoYXdhaXQgdGhpcy5hcGkubG9hZEhpZXJhcmNoeUNoaWxkcmVuKHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVRvRXhwYW5kOiBub2RlVG9FeHBhbmQsXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU6IHRoaXMuZW50aXR5VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZDogdGhpcy5vbnRvbG9neUlkLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogdGhpcy5pbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5OiB0aGlzLnVzZUxlZ2FjeSxcbiAgICAgICAgICAgICAgICB9KSkuc29ydChcbiAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+IChhLmxhYmVsIHx8IGEuaXJpKS5sb2NhbGVDb21wYXJlKGIubGFiZWwgfHwgYi5pcmkpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIC8vIGFkZCBjaGlsZHJlbiB0byBwYXJlbnRDaGlsZFJlbGF0aW9ucyBmb3IgaXJpIG9mIG5vZGVUb0V4cGFuZFxuICAgICAgICAgICAgICAgIGNvbnN0IHBhckNoaWxkUmVsOiBQYXJlbnRDaGlsZFJlbGF0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzRGF0YS5zZXQoY2hpbGQuaXJpLCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhclJlbGF0aW9uID0gY2hpbGQucGFyZW50cy5maWx0ZXIoKHBhcikgPT4gcGFyLnZhbHVlID09IG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSk7IC8vIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgcGFyQ2hpbGRSZWwucHVzaCh7Y2hpbGRJcmk6IGNoaWxkLmlyaSwgY2hpbGRSZWxhdGlvblRvUGFyZW50OiBwYXJSZWxhdGlvbi5sZW5ndGggPiAwICYmIHBhclJlbGF0aW9uWzBdLmdldE1ldGFkYXRhKCkgPyBwYXJSZWxhdGlvblswXS5nZXRNZXRhZGF0YSgpW1wiY2hpbGRSZWxhdGlvblRvUGFyZW50XCJdIDogdW5kZWZpbmVkfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSwgcGFyQ2hpbGRSZWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm1lcmdlQ2hpbGRyZW5JbnRvTG9hZGVkQ2hpbGRyZW4obm9kZVRvRXhwYW5kKTtcblxuICAgICAgICAgICAgdGhpcy5hbGxDaGlsZHJlblByZXNlbnQuYWRkKG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICB9XG59IiwgImltcG9ydCB7IFNlbGVjdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlbGVjdFwiO1xuaW1wb3J0IHsgU2VsZWN0UmVzdWx0IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU2VsZWN0UmVzdWx0XCI7XG5cbmV4cG9ydCBjbGFzcyBPTFNTZWxlY3QgaW1wbGVtZW50cyBTZWxlY3Qge1xuICBwcm9wZXJ0aWVzOiBTZWxlY3RSZXN1bHRbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBTZWxlY3RSZXN1bHRbXSkge1xuICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgZ2V0VG90YWxTZWFyY2hSZXN1bHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5sZW5ndGg7XG4gIH1cblxuXG4gIH0iLCAiaW1wb3J0IHsgU2VsZWN0UmVzdWx0IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU2VsZWN0UmVzdWx0XCI7XG5pbXBvcnQgeyBUaGluZ1R5cGVOYW1lIH0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFNTZWxlY3RSZXN1bHQgaW1wbGVtZW50cyBTZWxlY3RSZXN1bHQge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uLmpvaW4oXCIgXCIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lfbmFtZVwiXTtcbiAgfVxuXG4gIGdldFR5cGUoKTogVGhpbmdUeXBlTmFtZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInR5cGVcIl07XG4gIH1cblxuICBnZXRUeXBlUGx1cmFsKCk6IFwib250b2xvZ2llc1wiIHwgXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB8IFwidGVybXNcIiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgICAgcmV0dXJuIFwib250b2xvZ2llc1wiO1xuICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgIHJldHVybiBcImNsYXNzZXNcIjtcbiAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydF9mb3JtXCJdO1xuICB9XG5cbiAgZ2V0QXBpU291cmNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0QXBpU291cmNlRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIlxuICB9XG59IiwgImltcG9ydCB7IFNlbGVjdFJlc3VsdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlbGVjdFJlc3VsdFwiO1xuaW1wb3J0IHsgVGhpbmdUeXBlTmFtZSB9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgVHM0bmZkaVNlYXJjaFJlc3VsdCBpbXBsZW1lbnRzIFNlbGVjdFJlc3VsdCB7XG4gIHByb3BlcnRpZXM6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBhbnkpIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb24uam9pbihcIiBcIik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGVzY3JpcHRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9XG5cbiAgZ2V0SXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlyaVwiXTtcbiAgfVxuXG4gIGdldExhYmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdO1xuICB9XG5cbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neVwiXTtcbiAgfVxuXG4gIGdldFR5cGUoKTogVGhpbmdUeXBlTmFtZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInR5cGVcIl07XG4gIH1cblxuICBnZXRUeXBlUGx1cmFsKCk6IFwib250b2xvZ2llc1wiIHwgXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB8IFwidGVybXNcIiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgICAgcmV0dXJuIFwib250b2xvZ2llc1wiO1xuICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgIHJldHVybiBcImNsYXNzZXNcIjtcbiAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydF9mb3JtXCJdO1xuICB9XG5cbiAgZ2V0QXBpU291cmNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzb3VyY2VfbmFtZVwiXTtcbiAgfVxuXG4gIGdldEFwaVNvdXJjZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInNvdXJjZVwiXTtcbiAgfVxufSIsICJpbXBvcnQgYXhpb3MsIHsgQXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnIH0gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgeyBhc0FycmF5LCBnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4LCBnZXRVc2VMZWdhY3ksIHBsdXJhbGl6ZVR5cGUgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IGNyZWF0ZU1vZGVsT2JqZWN0IH0gZnJvbSBcIi4uL21vZGVsL01vZGVsT2JqZWN0Q3JlYXRvclwiO1xuaW1wb3J0IHsgT250b2xvZ3ksIE9udG9sb2dpZXMsIEVudGl0eSwgVGhpbmcsIEluZGl2aWR1YWwgfSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgT0xTM09udG9sb2dpZXMsIE9MUzNPbnRvbG9neSB9IGZyb20gXCIuLi9tb2RlbC9vbHMzLW1vZGVsXCI7XG5pbXBvcnQge1xuICBjbGFzc1R5cGVOYW1lcywgZW50aXR5VHlwZU5hbWVzLCBvbnRvbG9neVR5cGVOYW1lcywgdGhpbmdUeXBlTmFtZXMsXG4gIEVudGl0eVR5cGVOYW1lLCBUaGluZ1R5cGVOYW1lLFxuICBpc0NsYXNzVHlwZU5hbWUsIGlzRW50aXR5VHlwZU5hbWUsIGlzSW5kaXZpZHVhbFR5cGVOYW1lLCBpc09udG9sb2d5VHlwZU5hbWVcbn0gZnJvbSBcIi4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBIaWVyYXJjaHksIFBhcmVudENoaWxkUmVsYXRpb24sIFRyZWVOb2RlIH0gZnJvbSBcIi4uL21vZGVsL2ludGVyZmFjZXMvSGllcmFyY2h5XCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IHsgQnVpbGRIaWVyYXJjaHlQcm9wcywgSGllcmFyY2h5QnVpbGRlciwgSGllcmFyY2h5SXJpUHJvcCwgTG9hZEhpZXJhcmNoeUNoaWxkcmVuUHJvcHMgfSBmcm9tIFwiLi9IaWVyYXJjaHlCdWlsZGVyXCI7XG5pbXBvcnQgeyBPTFNTZWxlY3QgfSBmcm9tIFwiLi4vbW9kZWwvb2xzLW1vZGVsL09MU1NlbGVjdFwiO1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSBcIi4uL21vZGVsL2ludGVyZmFjZXMvU2VsZWN0XCI7XG5pbXBvcnQgeyBPTFNTZWxlY3RSZXN1bHQgfSBmcm9tIFwiLi4vbW9kZWwvb2xzLW1vZGVsL09MU1NlbGVjdFJlc3VsdFwiO1xuaW1wb3J0IHsgVHM0bmZkaVNlYXJjaFJlc3VsdCB9IGZyb20gXCIuLi9tb2RlbC90czRuZmRpLW1vZGVsL1RzNG5mZGlTZWFyY2hSZXN1bHRcIjtcbmltcG9ydCB7IEVudGl0eURhdGEgfSBmcm9tIFwiLi4vYXBwL3R5cGVzXCI7XG5cbi8vIHVzZWQgdG8gZmlsdGVyIGVudGl0aWVzIG5vdCBiZSBzaG93biBpbiBoaWVyYXJjaHlcbmZ1bmN0aW9uIGlzVG9wKGlyaTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpcmkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjVGhpbmdcIiB8fCBpcmkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjVG9wT2JqZWN0UHJvcGVydHlcIjtcbn1cblxuaW50ZXJmYWNlIFBhZ2luYXRpb25QYXJhbXMge1xuICBzaXplPzogc3RyaW5nO1xuICBwYWdlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU29ydGluZ1BhcmFtcyB7XG4gIHNvcnRGaWVsZDogc3RyaW5nIHwgbnVtYmVyO1xuICBzb3J0RGlyPzogXCJhc2NcIiB8IFwiZGVzY1wiO1xufVxuXG5pbnRlcmZhY2UgQ29udGVudFBhcmFtcyB7XG4gIG9udG9sb2d5SWQ/OiBzdHJpbmc7XG4gIHRlcm1Jcmk/OiBzdHJpbmc7XG4gIHByb3BlcnR5SXJpPzogc3RyaW5nO1xuICBpbmRpdmlkdWFsSXJpPzogc3RyaW5nO1xuICBxdWVyeVN0cmluZz86IHN0cmluZztcblxufVxuXG5leHBvcnQgdHlwZSBhcGlDYWxsRm4gPSAocGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPGFueT47XG5cbmludGVyZmFjZSBTZWFyY2hRdWVyeVBhcmFtcyB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIGV4YWN0TWF0Y2g/OiBib29sZWFuO1xuICBzaG93T2Jzb2xldGVUZXJtcz86IGJvb2xlYW47XG4gIHR5cGVzPzogc3RyaW5nO1xuICBvbnRvbG9neT86IHN0cmluZztcbiAgZ3JvdXBCeUlyaT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBTZWxlY3RRdWVyeVBhcmFtcyB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTdWdnZXN0UXVlcnlQYXJhbXMge1xuICBxdWVyeTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSnNUcmVlUGFyYW1zIHtcbiAgdmlld01vZGU/OiBzdHJpbmc7XG4gIHNpYmxpbmdzPzogYm9vbGVhbjtcbiAgY2hpbGQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEpTVHJlZU5vZGUgPSB7XG4gIGlkOiBzdHJpbmdcbiAgcGFyZW50OiBzdHJpbmdcbiAgaXJpOiBzdHJpbmdcbiAgdGV4dDogc3RyaW5nXG4gIHN0YXRlOiB7XG4gICAgb3BlbmVkOiBib29sZWFuXG4gIH1cbiAgY2hpbGRyZW46IGJvb2xlYW5cbiAgYV9hdHRyOiB7XG4gICAgaXJpOiBzdHJpbmdcbiAgICBvbnRvbG9neV9uYW1lOiBzdHJpbmdcbiAgICB0aXRsZTogc3RyaW5nXG4gICAgY2xhc3M6IHN0cmluZ1xuICB9XG4gIG9udG9sb2d5X25hbWU6IHN0cmluZ1xufVxuXG5jb25zdCBERUZBVUxUX1NFQVJDSF9SRVNVTFRTX1BFUl9QQUdFID0gMTA7XG5cbmV4cG9ydCBjbGFzcyBPbHNBcGkgaW1wbGVtZW50cyBIaWVyYXJjaHlCdWlsZGVyIHtcbiAgcHJpdmF0ZSBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlO1xuXG4gIGNvbnN0cnVjdG9yKGFwaTogc3RyaW5nKSB7XG4gICAgdGhpcy5heGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IGFwaSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQ29udGVudF9UeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZykge1xuICAgIGlmIChzb3J0aW5nUGFyYW1zKSB7XG4gICAgICByZXR1cm4geyAuLi5wYWdpbmF0aW9uUGFyYW1zLCBzb3J0OiBgJHtzb3J0aW5nUGFyYW1zLnNvcnRGaWVsZH0sJHtzb3J0aW5nUGFyYW1zLnNvcnREaXJ9YCwgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcikgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgLi4ucGFnaW5hdGlvblBhcmFtcywgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcikgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICByb3dzOiBwYWdpbmF0aW9uUGFyYW1zPy5zaXplLFxuICAgIH07XG5cbiAgICBpZiAocGFnaW5hdGlvblBhcmFtcz8ucGFnZSkge1xuICAgICAgaWYgKHBhZ2luYXRpb25QYXJhbXMuc2l6ZSkge1xuICAgICAgICBwYXJhbXMuc3RhcnQgPSAoK3BhZ2luYXRpb25QYXJhbXMucGFnZSAqICtwYWdpbmF0aW9uUGFyYW1zLnNpemUpLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbXMuc3RhcnQgPSAoK3BhZ2luYXRpb25QYXJhbXMucGFnZSAqIERFRkFVTFRfU0VBUkNIX1JFU1VMVFNfUEVSX1BBR0UpLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXJhbXNGb3JTZWFyY2gocXVlcnlQYXJhbXM6IFNlYXJjaFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZywgdHM0bmZkaUdhdGV3YXk/OiBib29sZWFuKSB7XG5cbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIGV4YWN0OiBxdWVyeVBhcmFtcy5leGFjdE1hdGNoLFxuICAgICAgb2Jzb2xldGVzOiBxdWVyeVBhcmFtcy5zaG93T2Jzb2xldGVUZXJtcyxcbiAgICB9O1xuXG4gICAgaWYgKHRzNG5mZGlHYXRld2F5KSB7XG4gICAgICBwYXJhbXMucXVlcnkgPSBxdWVyeVBhcmFtcy5xdWVyeVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMucSA9IHF1ZXJ5UGFyYW1zLnF1ZXJ5XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLmdyb3VwQnlJcmkpIHtcbiAgICAgIHBhcmFtcy5ncm91cEZpZWxkID0gcXVlcnlQYXJhbXMuZ3JvdXBCeUlyaTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnlQYXJhbXMudHlwZXMpIHtcbiAgICAgIHBhcmFtcy50eXBlID0gcXVlcnlQYXJhbXMudHlwZXM7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLm9udG9sb2d5KSB7XG4gICAgICBwYXJhbXMub250b2xvZ3kgPSBxdWVyeVBhcmFtcy5vbnRvbG9neTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5wYXJhbXMsIC4uLnRoaXMuYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXMpLCAuLi5jb250ZW50UGFyYW1zLCAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIGZvciBjcmVhdGluZyBhbiBvYmplY3QgZnJvbSBzdHJpbmcgb2YgcGFyYW1ldGVycyBmb3IgYXhpb3MgaW5wdXQgcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXI/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmIChwYXJhbWV0ZXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtc1NwbGl0dGVkID0gcGFyYW1ldGVyLnNwbGl0KFwiJlwiKVxuXG4gICAgICBwYXJhbXNTcGxpdHRlZC5mb3JFYWNoKChwYXJhbTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gcGFyYW0uc3BsaXQoXCI9XCIpWzBdXG4gICAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgPSBwYXJhbS5zcGxpdChcIj1cIilbMV1cbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclNlbGVjdChxdWVyeVBhcmFtczogU3VnZ2VzdFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcnM/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIHE6IHF1ZXJ5UGFyYW1zLnF1ZXJ5LFxuICAgIH07XG5cbiAgICByZXR1cm4geyAuLi5wYXJhbXMsIC4uLnRoaXMuYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXMpLCAuLi5jb250ZW50UGFyYW1zLCAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVycykgfTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclN1Z2dlc3QocXVlcnlQYXJhbXM6IFN1Z2dlc3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXJzPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBxOiBxdWVyeVBhcmFtcy5xdWVyeSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCAuLi50aGlzLmJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zKSwgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcnMpIH07XG4gIH1cblxuICAvLyBUT0RPOiBJcyB0aGlzIHRoZSBiZWhhdmlvciB3ZSB3YW50IChlc3BlY2lhbGx5IHRocm93aW5nIGVycm9yIGZvciBlbXB0eSByZXNwb25zZSk/XG4gIHByaXZhdGUgY2hlY2tfZm9yX2Vycm9ycyhyZXNwb25zZTogYW55KTogYW55IHtcbiAgICAvLyByZXNvdXJjZSBub3QgZm91bmQvaWxsZWdhbCBhcmd1bWVudCBleGNlcHRpb24gaW4gc2VtYW50aWNsb29rdXBcbiAgICBpZiAocmVzcG9uc2VbXCJlcnJvclwiXSkge1xuICAgICAgdGhyb3cgRXJyb3IocmVzcG9uc2VbXCJzdGF0dXNcIl0gKyBcIiBcIiArIHJlc3BvbnNlW1wiZXJyb3JcIl0gKyBcIiAtIFwiICsgcmVzcG9uc2VbXCJtZXNzYWdlXCJdICsgXCIgLSBcIiArIHJlc3BvbnNlW1wiZXhjZXB0aW9uXCJdICsgXCIgYXQgXCIgKyByZXNwb25zZVtcInBhdGhcIl0pO1xuICAgIH1cbiAgICAvLyBlbXB0eSByZXNwb25zZSAtIGNhbiBiZSBjYXVnaHQgaWYgdGhpcyBpcyBleHBlY3RlZCwgZS5nLiBmb3IgZmV0Y2hpbmcgaW5zdGFuY2VzXG4gICAgaWYgKHJlc3BvbnNlW1wicGFnZVwiXSAhPT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlW1wicGFnZVwiXVtcInRvdGFsRWxlbWVudHNcIl0gPT09IDApIHtcbiAgICAgIHRocm93IEVycm9yKFwiUmVzcG9uc2UgY29udGFpbnMgMCBlbGVtZW50c1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtYWtlQ2FsbCh1cmw6IHN0cmluZywgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiB8IHVuZGVmaW5lZCwgdXNlTGVnYWN5OiBib29sZWFuKSB7XG4gICAgY29uc3QgYXBpVmVyc2lvblByZWZpeCA9IGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJcIiA6IFwidjIvXCI7XG4gICAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChhcGlWZXJzaW9uUHJlZml4ICsgdXJsLCBjb25maWcpKS5kYXRhO1xuICAgIHJldHVybiB0aGlzLmNoZWNrX2Zvcl9lcnJvcnMocmVzcG9uc2UpO1xuICB9XG5cbiAgcHVibGljIGdldE9udG9sb2dpZXM6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcIm9udG9sb2dpZXNcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbGwgb250b2xvZ2llcy4gQ3VycmVudGx5IG9ubHkgYXZhaWxhYmxlIGZvciB1c2VMZWdhY3kgc2luY2UgcGFyYW1ldGVycyBhcmVuJ3QgYWxsb3dlZCBpbiB0aGUgT0xTIHYyIEFQSSBvbnRvbG9naWVzIGVuZHBvaW50XG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRPbnRvbG9naWVzRGF0YShwYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPE9udG9sb2dpZXM+IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgbGV0IG9udG9sb2dpZXNEYXRhOiBPTFMzT250b2xvZ3lbXSA9IFtdO1xuXG4gICAgbGV0IHBhZ2VOdW0gPSAwO1xuICAgIGNvbnN0IHBhZ2VTaXplID0gNTAwO1xuXG4gICAgZG8ge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9udG9sb2dpZXMoeyBzaXplOiBwYWdlU2l6ZS50b1N0cmluZygpLCBwYWdlOiBwYWdlTnVtLnRvU3RyaW5nKCkgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHBhcmFtZXRlcik7IC8vIGFzc3VtaW5nIHRoZXJlIGFyZSBubyBtb3JlIHRoYW4gNTAwIG9udG9sb2dpZXNcbiAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdIHx8ICFyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcIm9udG9sb2dpZXNcIl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT250b2xvZ2llcyBkYXRhIG5vdCBmb3VuZFwiKTsgLy9UT0RPIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgb250b2xvZ2llc0RhdGEgPSBvbnRvbG9naWVzRGF0YS5jb25jYXQocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJvbnRvbG9naWVzXCJdLm1hcCgob250b2xvZ3lEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3Qob250b2xvZ3lEYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBwYWdlTnVtICs9IDE7XG4gICAgfSB3aGlsZSAocGFnZU51bSA8IHJlc3BvbnNlW1wicGFnZVwiXVtcInRvdGFsUGFnZXNcIl0pO1xuXG4gICAgcmV0dXJuIG5ldyBPTFMzT250b2xvZ2llcyhvbnRvbG9naWVzRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdXNlZCB0byBmZXRjaCBhbGwgdGVybXMgZnJvbSB0aGUgYXBpXG4gICAqIEBwYXJhbSBwYWdpbmF0aW9uUGFyYW1zXG4gICAqIEBwYXJhbSBzb3J0aW5nUGFyYW1zXG4gICAqIEBwYXJhbSBjb250ZW50UGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIGB1c2VMZWdhY3lgIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYHVzZUxlZ2FjeWAsIGBcInRlcm1zXCJgIChgdXNlTGVnYWN5ID09IHRydWVgKSBvciBgXCJjbGFzc2VzXCJgIChgdXNlTGVnYWN5ID09IGZhbHNlYCkgd2lsbCBiZSB1c2VkIGluIHRoZSBxdWVyeSB1cmxcbiAgICovXG4gIHB1YmxpYyBnZXRUZXJtczogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHR5cGVQcmVmaXggPSBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwidGVybXNcIiA6IFwiY2xhc3Nlc1wiO1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKHR5cGVQcmVmaXgsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMpIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcm9wZXJ0aWVzOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJwcm9wZXJ0aWVzXCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMpIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJbmRpdmlkdWFsczogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwiaW5kaXZpZHVhbHNcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcykgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgcHVibGljIGdldE9udG9sb2d5OiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcilcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwib250b2xvZ2llcy9cIiArIGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQsIHBhcmFtcywgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYW4gZW50aXR5IGZyb20gdGhlIC9lbnRpdGllcyBlbmRwb2ludCBpbiB0aGUgYXBpIGluIG9sczQuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldEVudGl0eTogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCA/IFwib250b2xvZ2llcy9cIiArIGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgKyBcIi9cIiA6IFwiXCJcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LnRlcm1JcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwocXVlcnlQcmVmaXggKyBcImVudGl0aWVzXCIsIHsgcGFyYW1zOiBwYXJhbXMgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYSB0ZXJtIGZyb20gdGhlIGFwaVxuICAgKiBAcGFyYW0gcGFnaW5hdGlvblBhcmFtc1xuICAgKiBAcGFyYW0gc29ydGluZ1BhcmFtc1xuICAgKiBAcGFyYW0gYGNvbnRlbnRQYXJhbXNgIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGBjb250ZW50UGFyYW1zYCB0byBiZSBzZXQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3kuXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIGB1c2VMZWdhY3lgIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYHVzZUxlZ2FjeWAsIGBcInRlcm1zXCJgIChgdXNlTGVnYWN5ID09IHRydWVgKSBvciBgXCJjbGFzc2VzXCJgIChgdXNlTGVnYWN5ID09IGZhbHNlYCkgd2lsbCBiZSB1c2VkIGluIHRoZSBxdWVyeSB1cmxcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVybTogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbiwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4ge1xuICAgIGNvbnN0IG9udG9sb2d5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCA/IFwib250b2xvZ2llcy9cIiArIGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgKyBcIi9cIiA6IFwiXCJcbiAgICBjb25zdCB0eXBlUHJlZml4ID0gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcInRlcm1zXCIgOiBcImNsYXNzZXNcIjtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LnRlcm1JcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwob250b2xvZ3lQcmVmaXggKyB0eXBlUHJlZml4LCB7IHBhcmFtczogcGFyYW1zLCBzaWduYWw6IGFib3J0U2lnbmFsIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGEgcHJvcGVydHkgZnJvbSB0aGUgYXBpIGluIG9sczMuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldFByb3BlcnR5OiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiB7XG4gICAgY29uc3QgcXVlcnlQcmVmaXggPSBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkID8gXCJvbnRvbG9naWVzL1wiICsgY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCArIFwiL1wiIDogXCJcIlxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGlyaTogY29udGVudFBhcmFtcz8ucHJvcGVydHlJcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwocXVlcnlQcmVmaXggKyBcInByb3BlcnRpZXNcIiwgeyBwYXJhbXM6IHBhcmFtcywgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdXNlZCB0byBmZXRjaCBhbiBpbmRpdmlkdWFsIGZyb20gdGhlIGFwaSBpbiBvbHMzLlxuICAgKiBBbHdheXMgcmVxdWlyZXMgdGhlIHJlc3BlY3RpdmUgb2JqZWN0IElSSSBpbiBjb250ZW50UGFyYW1zIHRvIGJlIHNldFxuICAgKiBJZiBvbnRvbG9neUlkIGlzIHVuZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVlcmllZCBmcm9tIGFsbCBvbnRvbG9naWVzLCBjb250YWluaW5nIGEgbGlzdCBvZiByZXN1bHRzXG4gICAqIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3lcbiAgICovXG4gIHB1YmxpYyBnZXRJbmRpdmlkdWFsOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiB7XG4gICAgY29uc3QgcXVlcnlQcmVmaXggPSBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkID8gXCJvbnRvbG9naWVzL1wiICsgY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCArIFwiL1wiIDogXCJcIlxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGlyaTogY29udGVudFBhcmFtcz8uaW5kaXZpZHVhbElyaSxcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChxdWVyeVByZWZpeCArIFwiaW5kaXZpZHVhbHNcIiwgeyBwYXJhbXM6IHBhcmFtcywgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoID0gYXN5bmMgKHF1ZXJ5UGFyYW1zOiBTZWFyY2hRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtczogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZywgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJzZWFyY2hcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTZWFyY2gocXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciksIHNpZ25hbDogYWJvcnRTaWduYWwgfSwgdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0ID0gYXN5bmMgKHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwic2VsZWN0XCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yU2VsZWN0KHF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpIH0sIHRydWUpO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaFRzNG5mZGlHYXRld2F5ID0gYXN5bmMgKHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHRzNG5mZGlHYXRld2F5PzogYm9vbGVhbik6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJzZWFyY2hcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTZWFyY2gocXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdHM0bmZkaUdhdGV3YXkpIH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHNlbGVjdCBkYXRhLlxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXNcbiAgICogQHBhcmFtIHBhZ2luYXRpb25QYXJhbXNcbiAgICogQHBhcmFtIGNvbnRlbnRQYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFNlbGVjdERhdGEocXVlcnlQYXJhbXM6IFNlbGVjdFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZywgdHM0bmZkaUdhdGV3YXk/OiBib29sZWFuKTogUHJvbWlzZTxTZWxlY3Q+IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgbGV0IHNlbGVjdERhdGE6IE9MU1NlbGVjdFJlc3VsdFtdID0gW107XG4gICAgbGV0IHJlc3VsdE51bSA9IDA7XG5cbiAgICBpZiAodHM0bmZkaUdhdGV3YXkpIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZWFyY2hUczRuZmRpR2F0ZXdheShcbiAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgICAgIGNvbnRlbnRQYXJhbXMsXG4gICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgdHM0bmZkaUdhdGV3YXlcbiAgICAgICk7XG4gICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGVjdCBkYXRhIG5vdCBmb3VuZFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdERhdGEgPSBzZWxlY3REYXRhLmNvbmNhdChyZXNwb25zZS5tYXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgVHM0bmZkaVNlYXJjaFJlc3VsdChkYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZWxlY3QoXG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgICAgICBjb250ZW50UGFyYW1zLFxuICAgICAgICBwYXJhbWV0ZXJcbiAgICAgICk7XG4gICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZVtcInJlc3BvbnNlXCJdW1wiZG9jc1wiXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWxlY3QgZGF0YSBub3QgZm91bmRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3REYXRhID0gc2VsZWN0RGF0YS5jb25jYXQocmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcImRvY3NcIl0ubWFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9MU1NlbGVjdFJlc3VsdChkYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgT0xTU2VsZWN0KHNlbGVjdERhdGEpO1xuICB9XG5cblxuXG4gIHB1YmxpYyBzdWdnZXN0ID0gYXN5bmMgKHF1ZXJ5UGFyYW1zOiBTdWdnZXN0UXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcInN1Z2dlc3RcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTdWdnZXN0KHF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpIH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldFRlcm1UcmVlOlxuICAgKiBUaGlzIG1ldGhvZCBhbHdheXMgcmVxdWlyZXMgYW4gb250b2xvZ3lJZCBpbiBjb250ZW50UGFyYW1zXG4gICAqIDEpIElmIG5vIHRlcm1JcmkgaXMgZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb250b2xvZ3kgcm9vdHMgd2lsbCBiZSBxdWVyaWVkXG4gICAqIDIpIElmIGEgdGVybUlyaSBpcyBkZWZpbmVkIGJ1dCBubyBjaGlsZCBpbiBqc1RyZWVQYXJhbXMsIHRoZSBoaWVyYXJjaHkgY29udGFpbmluZyB0aGF0IHRlcm0gd2lsbCBiZSBxdWVyaWVkXG4gICAqIDMpIElmIGEgdGVybUlyaSBpcyBkZWZpbmVkIGFuZCBhbHNvIGEgY2hpbGQgaW4ganNUcmVlUGFyYW1zLCB0aGUgc3ViaGllcmFyY2h5IG9mIHRoYXQgY2hpbGQgd2lsbCBiZSBxdWVyaWVkXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVybVRyZWUgPSBhc3luYyAoY29udGVudFBhcmFtczogQ29udGVudFBhcmFtcywgdHJlZVBhcmFtczogSnNUcmVlUGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcz86IFNvcnRpbmdQYXJhbXMpID0+IHtcbiAgICBsZXQgYmFzZVJlcXVlc3QgPSBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkICsgXCIvdGVybXNcIlxuICAgIGlmICghY29udGVudFBhcmFtcy50ZXJtSXJpKSByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYmFzZVJlcXVlc3QgKyBcIi9yb290c1wiKSkuZGF0YTsgLy8xKVxuICAgIGJhc2VSZXF1ZXN0ID0gYmFzZVJlcXVlc3QgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoY29udGVudFBhcmFtcz8udGVybUlyaSkpICsgXCIvanN0cmVlXCJcbiAgICBpZiAodHJlZVBhcmFtcy5jaGlsZCkgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0ICsgXCIvY2hpbGRyZW4vXCIgKyB0cmVlUGFyYW1zLmNoaWxkKSkuZGF0YTsgLy8zKVxuICAgIGVsc2UgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0LCB7IHBhcmFtczogdHJlZVBhcmFtcyB9KSkuZGF0YTsgLy8yKVxuICB9XG5cbiAgcHVibGljIGdldFRlcm1SZWxhdGlvbnMgPSBhc3luYyAoY29udGVudFBhcmFtczogQ29udGVudFBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zKSA9PiB7XG4gICAgbGV0IGJhc2VSZXF1ZXN0ID0gXCJvbnRvbG9naWVzL1wiICsgY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCArIFwiL3Rlcm1zXCJcbiAgICBpZiAoIWNvbnRlbnRQYXJhbXMudGVybUlyaSkgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0ICsgXCIvcm9vdHNcIikpLmRhdGE7IC8vMSlcbiAgICBiYXNlUmVxdWVzdCA9IGJhc2VSZXF1ZXN0ICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnRQYXJhbXM/LnRlcm1JcmkpKSArIFwiL2dyYXBoXCI7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0KSkuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3aG9sZSBlbnRpdHkgcmVzcG9uc2UganNvbiB3aXRoIGEgY29tZm9ydGFibGUgd3JhcHBlciBoYW5kbGluZyBlbnRpdHlUeXBlLCBvbnRvbG9neUlkIGFuZCB1c2VMZWdhY3lcbiAgICogQHBhcmFtIGlyaVxuICAgKiBAcGFyYW0gZW50aXR5VHlwZSBxdWVyaWVzIHNwZWNpZmljIHJvdXRlcyBpZiBwcm92aWRlZCBhbmQgaW5mZXJzIHR5cGUgaWYgbm90XG4gICAqIEBwYXJhbSBvbnRvbG9neUlkIHF1ZXJpZXMgb250b2xvZ3kgcm91dGVzIGlmIHByb3ZpZGVkLCBvdGhlcndpc2Ugbm90XG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIHVzZUxlZ2FjeSBhZmZlY3RzIGhvdyBlbnRpdHlUeXBlIGlzIGluZmVycmVkIGlmIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEVudGl0eVJlc3BvbnNlKGlyaTogc3RyaW5nLCBlbnRpdHlUeXBlPzogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGlmICghaXJpKSB0aHJvdyBFcnJvcignTm8gSVJJIHByb3ZpZGVkJyk7XG5cbiAgICBpZiAoZW50aXR5VHlwZSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEVudGl0eVdpdGhFbnRpdHlUeXBlUHJvdmlkZWQoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRFbnRpdHlXaXRoSW5mZXJyZWRFbnRpdHlUeXBlKGlyaSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0RW50aXR5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaSB9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gRW50aXR5IG9iamVjdCAoaW1wbGVtZW50aW5nICdDbGFzcycsICdQcm9wZXJ0eScgb3IgJ0luZGl2aWR1YWwnKS5cbiAgICogSW5kaXJlY3RseSBmZXRjaGVzIHRoZSByZXNwb25zZSBKU09OIGZvciB0aGUgc3BlY2lmaWVkIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyIGFuZCBBUEkgdmVyc2lvbiAodXNlTGVnYWN5KS5cbiAgICpcbiAgICogQHBhcmFtIGVudGl0eVR5cGVcbiAgICogQHBhcmFtIGlyaVxuICAgKiBAcGFyYW0gb250b2xvZ3lJZFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB1c2VMZWdhY3lcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRFbnRpdHlPYmplY3QoaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZD86IHN0cmluZywgcGFyYW1ldGVyPzogc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuKTogUHJvbWlzZTxFbnRpdHk+IHtcbiAgICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3QoYXdhaXQgdGhpcy5nZXRFbnRpdHlSZXNwb25zZShpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KSkgYXMgRW50aXR5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gT250b2xvZ3kgb2JqZWN0LlxuICAgKiBJbmRpcmVjdGx5IGZldGNoZXMgdGhlIHJlc3BvbnNlIEpTT04gZm9yIHRoZSBzcGVjaWZpZWQgb250b2xvZ3lJZCwgcGFyYW1ldGVyIGFuZCBBUEkgdmVyc2lvbiAodXNlTGVnYWN5KS5cbiAgICpcbiAgICogQHBhcmFtIG9udG9sb2d5SWRcbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gdXNlTGVnYWN5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0T250b2xvZ3lPYmplY3Qob250b2xvZ3lJZDogc3RyaW5nLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pOiBQcm9taXNlPE9udG9sb2d5PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9udG9sb2d5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQgfSwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuXG4gICAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0KHJlc3BvbnNlKSBhcyBPbnRvbG9neTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUaGluZ09iamVjdChpcmk/OiBzdHJpbmcsIHRoaW5nVHlwZT86IFRoaW5nVHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFByb21pc2U8VGhpbmc+IHtcbiAgICBpZiAodGhpbmdUeXBlKSB7XG4gICAgICBpZiAoaXNPbnRvbG9neVR5cGVOYW1lKHRoaW5nVHlwZSkpIHtcbiAgICAgICAgaWYgKCFvbnRvbG9neUlkKSB0aHJvdyBuZXcgRXJyb3IoYG9udG9sb2d5SWQgaGFzIHRvIGJlIHByb3ZpZGVkIGlmIHRoaW5nVHlwZSBpbiB7XCIke29udG9sb2d5VHlwZU5hbWVzLmpvaW4oJ1wiLCBcIicpfVwifS5gKTtcbiAgICAgICAgZWxzZSByZXR1cm4gYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0VudGl0eVR5cGVOYW1lKHRoaW5nVHlwZSkpIHtcbiAgICAgICAgaWYgKCFpcmkpIHRocm93IG5ldyBFcnJvcihgaXJpIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaW4ge1wiJHtlbnRpdHlUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgICAgICBlbHNlIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHRoaW5nVHlwZSBcIiR7dGhpbmdUeXBlfVwiIHByb3ZpZGVkLiBNdXN0IGJlIGluIHtcIiR7dGhpbmdUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmICghaXJpICYmIG9udG9sb2d5SWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0T250b2xvZ3lPYmplY3Qob250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXJpKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYGlyaSBvciBvbnRvbG9neUlkIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaXMgbm90IHByb3ZpZGVkLmApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RW50aXR5V2l0aEVudGl0eVR5cGVQcm92aWRlZChpcmk6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgc3dpdGNoIChlbnRpdHlUeXBlKSB7XG4gICAgICBjYXNlICd0ZXJtJzogY2FzZSAnY2xhc3MnOiAvLyBhbHNvIGFsbG93IFwiY2xhc3NcIiBldmVuIGlmIGl0IHNob3VsZCBhY3R1YWxseSBiZSBcInRlcm1cIlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRUZXJtKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaSB9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG5cbiAgICAgIGNhc2UgJ3Byb3BlcnR5JzogY2FzZSAnYW5ub3RhdGlvblByb3BlcnR5JzogY2FzZSAnZGF0YVByb3BlcnR5JzogY2FzZSAnb2JqZWN0UHJvcGVydHknOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRQcm9wZXJ0eSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBwcm9wZXJ0eUlyaTogaXJpIH0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgICAgY2FzZSAnaW5kaXZpZHVhbCc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEluZGl2aWR1YWwodW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgaW5kaXZpZHVhbElyaTogaXJpIH0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgZW50aXR5IHR5cGUgXCInICsgZW50aXR5VHlwZSArIGBcIi4gTXVzdCBiZSBvbmUgb2YgeyR7ZW50aXR5VHlwZU5hbWVzLm1hcCgoZWxlbSkgPT4gYFwiJHtlbGVtfVwiYCkuam9pbihcIiwgXCIpfX0uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlXaXRoSW5mZXJyZWRFbnRpdHlUeXBlKGlyaTogc3RyaW5nLCBvbnRvbG9neUlkPzogc3RyaW5nLCBwYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIC8qXG4gICAgICAgICAgICBUZXN0IGFsbCB0eXBlcyBvZiBlbnRpdGllcyAodGVybSwgcHJvcGVydHksIGluZGl2aWR1YWwpIG1hbnVhbGx5IHdpdGggc2VwYXJhdGUgcXVlcmllcyAoYXMgL2VudGl0aWVzIGRvZXMgbm90IGV4aXN0IGZvciBsZWdhY3kgQVBJKVxuICAgICAgICAgICAgLT4gcmV0dXJuIHRoZSByZXNwb25zZSBvYmplY3Qgd2hpY2ggcmVzb2x2ZXMgd2l0aCBhIGNvbnRhaW5lZCBlbnRpdHlcbiAgICAgICAgICAgIC0+IHRocm93IGVycm9yIGlmIG5vbmUgb2YgdGhlIHR5cGVzIGNvbnRhaW5zIGFuIGVudGl0eVxuICAgICAgICAgICovXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBzaWduYWwgPSBjb250cm9sbGVyLnNpZ25hbDtcblxuICAgIGxldCByZXNwb25zZTsgLy8gc3RvcmVzIHRoZSBlbnRpdHkgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIGVuZFxuXG4gICAgZnVuY3Rpb24gc2V0QW5kU3RvcChyZXM6IGFueSkge1xuICAgICAgaWYgKHJlc1tcIl9lbWJlZGRlZFwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3BvbnNlID0gcmVzO1xuICAgICAgICBjb250cm9sbGVyLmFib3J0KCk7IC8vIGFib3J0IHF1ZXJpZXMgZm9yIG90aGVyIGVudGl0eVR5cGVzXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgW1xuICAgICAgICB0aGlzLmdldFRlcm0odW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgdGVybUlyaTogaXJpIH0sIHBhcmFtZXRlciwgdHJ1ZSwgc2lnbmFsKVxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4geyBzZXRBbmRTdG9wKHJlcykgfSksXG4gICAgICAgIHRoaXMuZ2V0UHJvcGVydHkodW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgcHJvcGVydHlJcmk6IGlyaSB9LCBwYXJhbWV0ZXIsIHRydWUsIHNpZ25hbClcbiAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHsgc2V0QW5kU3RvcChyZXMpIH0pLFxuICAgICAgICB0aGlzLmdldEluZGl2aWR1YWwodW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgaW5kaXZpZHVhbElyaTogaXJpIH0sIHBhcmFtZXRlciwgdHJ1ZSwgc2lnbmFsKVxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4geyBzZXRBbmRTdG9wKHJlcykgfSlcbiAgICAgIF1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHJldHVybiByZXNwb25zZTtcbiAgICBlbHNlIHRocm93IEVycm9yKFwiSXJpIFwiICsgaXJpICsgXCIgY291bGQgbm90IGJlIHJlc29sdmVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBbmNlc3RvcnMoaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLCBvbnRvbG9neUlkOiBzdHJpbmcsIHVzZUxlZ2FjeSA9IGZhbHNlLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IGZhbHNlKTogUHJvbWlzZTxFbnRpdHlbXT4ge1xuICAgIGxldCBhbmNlc3RvcnM6IGFueTtcbiAgICBpZiAoaXNDbGFzc1R5cGVOYW1lKGVudGl0eVR5cGUpKSB7XG4gICAgICBhbmNlc3RvcnMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgaXJpLCB1c2VMZWdhY3kpfS9oaWVyYXJjaGljYWxBbmNlc3RvcnNgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBhbmNlc3RvcnMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgaXJpLCB1c2VMZWdhY3kpfS9hbmNlc3RvcnNgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgbGV0IGxpc3RPZkFuY2VzdG9yT2JqOiBBcnJheTxFbnRpdHk+ID0gW107XG4gICAgICBsZXQgZXh0cmFjdEtleSA9IFwiXCI7XG4gICAgICBzd2l0Y2ggKGVudGl0eVR5cGUpIHtcbiAgICAgICAgY2FzZSBcImNsYXNzXCIgfHwgXCJ0ZXJtXCI6XG4gICAgICAgICAgZXh0cmFjdEtleSA9IFwidGVybXNcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICAgICAgZXh0cmFjdEtleSA9IFwicHJvcGVydGllc1wiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICAgIGV4dHJhY3RLZXkgPSBcImluZGl2aWR1YWxzXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJFbnRpdHkgdHlwZSBjb3VsZCBub3QgYmUgY29ycmVjdGx5IGluZmVycmVkLlwiKTtcbiAgICAgIH1cbiAgICAgIGFuY2VzdG9yc1tcIl9lbWJlZGRlZFwiXVtleHRyYWN0S2V5XS5tYXAoKG9iajogYW55KSA9PiB7XG4gICAgICAgIGxpc3RPZkFuY2VzdG9yT2JqLnB1c2goY3JlYXRlTW9kZWxPYmplY3QoeyBfZW1iZWRkZWQ6IHsgW2V4dHJhY3RLZXldOiBbb2JqXSB9IH0pIGFzIEVudGl0eSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBsaXN0T2ZBbmNlc3Rvck9iajtcbiAgICB9XG4gICAgcmV0dXJuIGFuY2VzdG9yc1tcImVsZW1lbnRzXCJdLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICBjcmVhdGVNb2RlbE9iamVjdCh7IGVsZW1lbnRzOiBbb2JqXSB9KSBhcyBFbnRpdHlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEpTVHJlZShpcmk6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ6IHN0cmluZyk6IFByb21pc2U8SlNUcmVlTm9kZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBpcmksIHRydWUpfS9qc3RyZWVgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiB9IH0sIHRydWUpO1xuICB9XG5cbiAgLy8gVE9ETzogRG8gd2Ugd2FudCB0aGUgc2FtZSBiZWhhdmlvciBhcyBFTUJMIEVCSSAoZS5nLiBub3QgZ2V0dGluZyBpbnN0YW5jZXMgZm9yIGNsYXNzZXMgaWYgZW50aXR5VHlwZSAhPSBcImluZGl2aWR1YWxcIik/XG4gIHB1YmxpYyBhc3luYyBnZXRDaGlsZHJlbihpcmk6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ6IHN0cmluZywgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBmYWxzZSwgdXNlTGVnYWN5ID0gZmFsc2UpOiBQcm9taXNlPEVudGl0eVtdPiB7XG4gICAgbGV0IGNoaWxkcmVuOiBhbnk7XG4gICAgaWYgKGlzQ2xhc3NUeXBlTmFtZShlbnRpdHlUeXBlKSkge1xuICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgY2xhc3NUeXBlTmFtZXNbMF0sIGlyaSwgdXNlTGVnYWN5KX0vaGllcmFyY2hpY2FsQ2hpbGRyZW5gLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNJbmRpdmlkdWFsVHlwZU5hbWUoZW50aXR5VHlwZSkpIHtcbiAgICAgIC8vIGVudGl0eVR5cGUgZG9lcyBOT1QgaW5kaWNhdGUgd2hpY2ggdHlwZSB0aGUgZW50aXR5IG9mIHRoZSBwcm92aWRlZCBpcmkgaGFzLCBidXQgd2hpY2ggdHlwZSBvZiBoaWVyYXJjaHkgaXMgZGVzaXJlZFxuICAgICAgLy8gLT4gXCJjbGFzc1wiIGhhcyB0byBiZSBwcm92aWRlZCBmb3IgaW5kaXZpZHVhbCBoaWVyYXJjaHkgYXMgd2VsbCwgYXMgaW5kaXZpZHVhbHMgYXJlIGFsd2F5cyBjaGlsZHJlbiBvZiBjbGFzc2VzXG4gICAgICBpZiAodXNlTGVnYWN5KSB7XG4gICAgICAgIC8vIFRPRE86IERvZXMgZGVzY2VuZGFudHMgYWx3YXlzIHdvcmsgZm9yIHRoaXMgKG9yIGFyZSB0aGVyZSBjbGFzc2VzIHdpdGggYm90aCBpbmRpdmlkdWFscyBhbmQgY2xhc3NlcyBhcyBkZXNjZW5kYW50cyk/XG4gICAgICAgIGNoaWxkcmVuID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGNsYXNzVHlwZU5hbWVzWzBdLCBpcmksIHVzZUxlZ2FjeSl9L2Rlc2NlbmRhbnRzYCwgeyBwYXJhbXM6IHsgc2l6ZTogXCIxMDAwXCIgfSB9LCB1c2VMZWdhY3kpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgY2xhc3NUeXBlTmFtZXNbMF0sIGlyaSwgdXNlTGVnYWN5KX0vaW5zdGFuY2VzYCwgeyBwYXJhbXM6IHsgc2l6ZTogXCIxMDAwXCIsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyB9IH0sIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgaXJpLCB1c2VMZWdhY3kpfS9jaGlsZHJlbmAsIHsgcGFyYW1zOiB7IHNpemU6IFwiMTAwMFwiLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgfSB9LCB1c2VMZWdhY3kpO1xuICAgIH1cblxuICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbltcIl9lbWJlZGRlZFwiXVtpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSA/IHBsdXJhbGl6ZVR5cGUoY2xhc3NUeXBlTmFtZXNbMF0sIHVzZUxlZ2FjeSkgOiBwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUsIHVzZUxlZ2FjeSldLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHsgW1wiX2VtYmVkZGVkXCJdOiB7IFtpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSA/IHBsdXJhbGl6ZVR5cGUoY2xhc3NUeXBlTmFtZXNbMF0sIHVzZUxlZ2FjeSkgOiBwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUpXTogW29ial0gfSB9KSBhcyBFbnRpdHlcbiAgICAgICk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuW1wiZWxlbWVudHNcIl0ubWFwKChvYmo6IGFueSkgPT5cbiAgICAgICAgY3JlYXRlTW9kZWxPYmplY3QoeyBlbGVtZW50czogW29ial0gfSkgYXMgRW50aXR5XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSb290RW50aXRpZXMoZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ6IHN0cmluZywgcHJlZmVycmVkUm9vdHMgPSBmYWxzZSwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBmYWxzZSwgdXNlTGVnYWN5ID0gZmFsc2UpOiBQcm9taXNlPEVudGl0eVtdPiB7XG4gICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgaWYgKGlzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUpKSB7XG4gICAgICAgIC8vIFRPRE86IEltcGxlbWVudCBiZWhhdmlvdXIgZm9yIGluZGl2aWR1YWxzXG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiAvcHJlZmVycmVkUm9vdHMgcm91dGUgc2hvdWxkIGV4aXN0IGluIGxlZ2FjeSBhcGksIGJ1dCBkb2VzIG5vdCB3b3JrXG4gICAgICAgIGNvbnN0IHJvb3RzID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHVuZGVmaW5lZCwgdXNlTGVnYWN5KX0vcm9vdHNgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcblxuICAgICAgICByZXR1cm4gcm9vdHNbXCJfZW1iZWRkZWRcIl1bcGx1cmFsaXplVHlwZShlbnRpdHlUeXBlLCB1c2VMZWdhY3kpXS5tYXAoKG9iajogYW55KSA9PlxuICAgICAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHsgW1wiX2VtYmVkZGVkXCJdOiB7IFtwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUsIHVzZUxlZ2FjeSldOiBbb2JqXSB9IH0pIGFzIEVudGl0eVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSkge1xuICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsc1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm9vdHMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgdW5kZWZpbmVkLCB1c2VMZWdhY3kpfWAsIHsgcGFyYW1zOiB7IHNpemU6IFwiMTAwMFwiLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsIGhhc0RpcmVjdFBhcmVudHM6IHByZWZlcnJlZFJvb3RzID8gdW5kZWZpbmVkIDogXCJmYWxzZVwiLCBpc1ByZWZlcnJlZFJvb3Q6IHByZWZlcnJlZFJvb3RzID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQgfSB9LCB1c2VMZWdhY3kpO1xuXG4gICAgICAgIHJldHVybiByb290c1tcImVsZW1lbnRzXCJdLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICAgICAgY3JlYXRlTW9kZWxPYmplY3QoeyBlbGVtZW50czogW29ial0gfSkgYXMgRW50aXR5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENsYXNzSW5zdGFuY2VzKGlyaTogc3RyaW5nLCBvbnRvbG9neUlkOiBzdHJpbmcpOiBQcm9taXNlPEluZGl2aWR1YWxbXT4ge1xuICAgIGNvbnN0IGluc3RhbmNlcyA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBjbGFzc1R5cGVOYW1lc1swXSwgaXJpLCBmYWxzZSl9L2luZGl2aWR1YWxzYCwgeyBwYXJhbXM6IHsgc2l6ZTogXCIxMDAwXCIgfSB9LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gaW5zdGFuY2VzW1wiZWxlbWVudHNcIl0ubWFwKChvYmo6IGFueSkgPT5cbiAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHsgZWxlbWVudHM6IFtvYmpdIH0pIGFzIEluZGl2aWR1YWxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkSGllcmFyY2h5V2l0aElyaShwcm9wczogQnVpbGRIaWVyYXJjaHlQcm9wcyAmIEhpZXJhcmNoeUlyaVByb3ApOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGlyaSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgcHJlZmVycmVkUm9vdHMgPSBmYWxzZSxcbiAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gZmFsc2UsXG4gICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzID0gdHJ1ZSxcbiAgICAgIHNob3dTaWJsaW5nc09uSW5pdCA9IGZhbHNlLFxuICAgICAgdXNlTGVnYWN5ID0gZmFsc2UsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgaWYgKGlyaSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgXCJcIiwgdXNlTGVnYWN5KS50aGVuKChlbnRpdHkpID0+IHRoaXMuYnVpbGRIaWVyYXJjaHlXaXRoRW50aXR5KHtcbiAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSB8fCBlbnRpdHkuZ2V0VHlwZSgpIGFzIEVudGl0eVR5cGVOYW1lLFxuICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkIHx8IGVudGl0eS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgcHJlZmVycmVkUm9vdHM6IHByZWZlcnJlZFJvb3RzLFxuICAgICAgICBtYWluRW50aXR5OiBlbnRpdHksXG4gICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgIHNob3dTaWJsaW5nc09uSW5pdDogc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAoZW50aXR5VHlwZSA9PSB1bmRlZmluZWQgfHwgb250b2xvZ3lJZCA9PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRWl0aGVyIGlyaSBvciBvbnRvbG9neUlkIGFuZCBlbnRpdHlUeXBlIGhhdmUgdG8gYmUgcHJvdmlkZWQuXCIpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYnVpbGRSb290SGllcmFyY2h5KHtcbiAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICBwcmVmZXJyZWRSb290czogcHJlZmVycmVkUm9vdHMsXG4gICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgIHNob3dTaWJsaW5nc09uSW5pdDogc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBqc1RyZWVOb2RlVG9FbnRpdHlEYXRhKGpzVHJlZU5vZGU6IEpTVHJlZU5vZGUpOiBFbnRpdHlEYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXJpOiBqc1RyZWVOb2RlLmlyaSxcbiAgICAgIGxhYmVsOiBqc1RyZWVOb2RlLnRleHQsXG4gICAgICBoYXNDaGlsZHJlbjoganNUcmVlTm9kZS5jaGlsZHJlbiB8fCBqc1RyZWVOb2RlLnN0YXRlLm9wZW5lZCxcbiAgICAgIHBhcmVudHM6IFtdXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlbnRpdHlUb0VudGl0eURhdGEoZW50aXR5OiBFbnRpdHkpOiBFbnRpdHlEYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXJpOiBlbnRpdHkuZ2V0SXJpKCksXG4gICAgICBsYWJlbDogYXNBcnJheShlbnRpdHkuZ2V0TGFiZWwoKSlbMF0sXG4gICAgICBkZWZpbmVkQnk6IGVudGl0eS5nZXREZWZpbmVkQnkoKSxcbiAgICAgIGhhc0NoaWxkcmVuOiBlbnRpdHkuaGFzQ2hpbGRyZW4oKSxcbiAgICAgIG51bURlc2NlbmRhbnRzOiBlbnRpdHkuZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKSB8fCBlbnRpdHkuZ2V0TnVtRGVzY2VuZGFudHMoKSxcbiAgICAgIHBhcmVudHM6IGVudGl0eS5nZXRQYXJlbnRzKClcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkUm9vdEhpZXJhcmNoeShcbiAgICBwcm9wczoge1xuICAgICAgb250b2xvZ3lJZDogc3RyaW5nLFxuICAgICAgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsXG4gICAgfSAmIEJ1aWxkSGllcmFyY2h5UHJvcHNcbiAgKTogUHJvbWlzZTxIaWVyYXJjaHk+IHtcblxuICAgIGNvbnN0IHtcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgcHJlZmVycmVkUm9vdHMsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIHVzZUxlZ2FjeVxuICAgIH0gPSBwcm9wcztcblxuICAgIC8qIFFVRVJZIHJvb3QgZW50aXRpZXMgKi9cbiAgICBjb25zdCByb290RW50aXRpZXNEYXRhID0gKGF3YWl0IHRoaXMuZ2V0Um9vdEVudGl0aWVzKGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHByZWZlcnJlZFJvb3RzLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcywgdXNlTGVnYWN5KSlcbiAgICAgIC5tYXAoKGVudGl0eSkgPT4gdGhpcy5lbnRpdHlUb0VudGl0eURhdGEoZW50aXR5KSlcbiAgICAgIC5maWx0ZXIoKHJvb3QpID0+ICFpc1RvcChyb290LmlyaSkpO1xuICAgIC8qIC0tLSAqL1xuXG4gICAgLyogSU5JVElBTElaRSBlbnRpdGllc0RhdGEsIHBhcmVudENoaWxkUmVsYXRpb25zICovXG4gICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPigpO1xuICAgIGNvbnN0IGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YT4gPSBuZXcgTWFwPHN0cmluZywgRW50aXR5RGF0YT4oKTtcbiAgICBmb3IgKGNvbnN0IGVudGl0eURhdGEgb2Ygcm9vdEVudGl0aWVzRGF0YSkge1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KGVudGl0eURhdGEuaXJpLCBbXSk7IC8vIGluaXRpYWxpemUgd2l0aCBlbXB0eSBhcnJheVxuICAgICAgZW50aXRpZXNEYXRhLnNldChlbnRpdHlEYXRhLmlyaSwgZW50aXR5RGF0YSk7XG4gICAgfVxuICAgIC8qIC0tLSAqL1xuXG4gICAgcmV0dXJuIG5ldyBIaWVyYXJjaHkoe1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IHBhcmVudENoaWxkUmVsYXRpb25zLFxuICAgICAgZW50aXRpZXNEYXRhOiBlbnRpdGllc0RhdGEsXG4gICAgICBhbGxDaGlsZHJlblByZXNlbnQ6IG5ldyBTZXQoKSxcbiAgICAgIHJvb3RzOiByb290RW50aXRpZXNEYXRhLm1hcCgocm9vdCkgPT4gbmV3IFRyZWVOb2RlKHJvb3QpKS5zb3J0KChhLCBiKSA9PiAoYS5lbnRpdHlEYXRhLmxhYmVsIHx8IGEuZW50aXR5RGF0YS5pcmkpLmxvY2FsZUNvbXBhcmUoYi5lbnRpdHlEYXRhLmxhYmVsIHx8IGIuZW50aXR5RGF0YS5pcmkpKSxcbiAgICAgIGFwaTogbmV3IE9sc0FwaSh0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0VXJpKCkpLFxuICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG4gICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYnVpbGRIaWVyYXJjaHlXaXRoRW50aXR5KFxuICAgIHByb3BzOiB7XG4gICAgICBtYWluRW50aXR5OiBFbnRpdHksXG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmcsXG4gICAgICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSxcbiAgICB9ICYgQnVpbGRIaWVyYXJjaHlQcm9wc1xuICApOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuXG4gICAgY29uc3Qge1xuICAgICAgbWFpbkVudGl0eSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgcHJlZmVycmVkUm9vdHMsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgIHVzZUxlZ2FjeVxuICAgIH0gPSBwcm9wcztcblxuICAgIC8qIExPQUQgYW5jZXN0b3JzICovXG4gICAgbGV0IGVudGl0aWVzOiBFbnRpdHlEYXRhW10gPSBbXTtcblxuICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgIC8vIFRPRE86IEpTVHJlZSBzb21ldGltZXMgcmV0dXJucyBzbWFsbGVyIHRyZWVzIHRoYW4gd291bGQgYmUgcG9zc2libGUgdmlhIHF1ZXJ5aW5nIGhpZXJhcmNoaWNhbCBhbmNlc3RvcnMgYW5kIGFsbCBjaGlsZHJlbiBvZiB0aG9zZSAoZS5nLiBodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vVUJFUk9OXzIwMDE3NDcgLT4gc3RyYW5nZSBhbmQgbm90IHJlYWxseSB1c2VmdWwgaGllcmFyY2h5IGJlY2F1c2UgbWFueSBlbnRpdGllcyBhcmUgYm90aCBzaWJsaW5nIGFuZCBjaGlsZHJlbiBvZiBvdGhlciBlbnRpdGllcyAoaXMgaXQgd3JvbmcgdG8gdGFrZSBoaWVyYXJjaGljYWxQYXJlbnQgaW5zdGVhZCBvZiBkaXJlY3RQYXJlbnQgaW4gZW50aXR5VG9FbnRpdHlEYXRhVG9IaWVyYXJjaHk/IEVNQkwtRUJJIGRvZXMgaXQgbGlrZSB0aGF0IGFzIHdlbGwpKVxuICAgICAgLy8gICAgICAgUXVlc3Rpb246IFNob3VsZCB3ZSBwcmVmZXIgY29tcGxldGUgaGllcmFyY2hpZXMgKHF1ZXJ5IC9oaWVyYXJjaGljYWxBbmNlc3RvcnMgKyAvY2hpbGRyZW4gZm9yIGVhY2gpIG9yIHNsaW0gcXVlcmllcyAocXVlcnkgL2pzdHJlZSk/XG4gICAgICBjb25zdCBqc1RyZWUgPSBhd2FpdCB0aGlzLmdldEpTVHJlZShtYWluRW50aXR5LmdldElyaSgpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkKTtcbiAgICAgIGNvbnN0IGlkVG9Jcmk6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgICAgY29uc3QgcGFyZW50czogTWFwPHN0cmluZywgU2V0PHN0cmluZz4+ID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuXG4gICAgICBmb3IgKGNvbnN0IGpzVHJlZU5vZGUgb2YganNUcmVlKSB7XG4gICAgICAgIGlkVG9Jcmkuc2V0KGpzVHJlZU5vZGUuaWQsIGpzVHJlZU5vZGUuaXJpKTtcbiAgICAgICAgcGFyZW50cy5zZXQoanNUcmVlTm9kZS5pcmksIG5ldyBTZXQ8c3RyaW5nPigpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBqc1RyZWVOb2RlIG9mIGpzVHJlZSkge1xuICAgICAgICBjb25zdCBwYXJBcnIgPSBwYXJlbnRzLmdldChqc1RyZWVOb2RlLmlyaSk7XG4gICAgICAgIGNvbnN0IHBhcklyaSA9IGlkVG9JcmkuZ2V0KGpzVHJlZU5vZGUucGFyZW50KTtcbiAgICAgICAgaWYgKHBhckFyciAhPSB1bmRlZmluZWQgJiYgcGFySXJpICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhckFyci5hZGQocGFySXJpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlbnRpdGllcyA9IFtdO1xuICAgICAgY29uc3QgaW5BcnIgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgZm9yIChjb25zdCBqc1RyZWVOb2RlIG9mIGpzVHJlZSkge1xuICAgICAgICBpZiAoIWluQXJyLmhhcyhqc1RyZWVOb2RlLmlyaSkpIHtcbiAgICAgICAgICBpbkFyci5hZGQoanNUcmVlTm9kZS5pcmkpO1xuXG4gICAgICAgICAgZW50aXRpZXMucHVzaCh0aGlzLmpzVHJlZU5vZGVUb0VudGl0eURhdGEoanNUcmVlTm9kZSkpO1xuICAgICAgICAgIGNvbnN0IHBhciA9IHBhcmVudHMuZ2V0KGpzVHJlZU5vZGUuaXJpKTtcbiAgICAgICAgICBpZiAocGFyICE9IHVuZGVmaW5lZCkgZW50aXRpZXNbZW50aXRpZXMubGVuZ3RoIC0gMV0ucGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb24oQXJyYXkuZnJvbShwYXIudmFsdWVzKCkpKSB8fCBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGFuY2VzdG9ycyA9IGF3YWl0IHRoaXMuZ2V0QW5jZXN0b3JzKG1haW5FbnRpdHkuZ2V0SXJpKCksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQgfHwgbWFpbkVudGl0eS5nZXRPbnRvbG9neUlkKCksIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzKTtcbiAgICAgIGVudGl0aWVzID0gW3RoaXMuZW50aXR5VG9FbnRpdHlEYXRhKG1haW5FbnRpdHkpLCAuLi5hbmNlc3RvcnMubWFwKChlbnRpdHkpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhKGVudGl0eSkpXVxuICAgIH1cblxuICAgIC8vIGZpbHRlciB0b3AgZW50aXRpZXNcbiAgICBlbnRpdGllcyA9IGVudGl0aWVzLmZpbHRlcigoZSkgPT4gIWlzVG9wKGUuaXJpKSk7XG4gICAgLyogLS0tICovXG5cbiAgICAvKiBCVUlMRCBwYXJlbnRDaGlsZFJlbGF0aW9ucyAqL1xuICAgIGNvbnN0IHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+ID0gbmV3IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4oKTtcbiAgICBjb25zdCBhbGxDaGlsZHJlblByZXNlbnQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgZW50aXRpZXNEYXRhOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhPiA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhPigpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSBwYXJlbnRDaGlsZFJlbGF0aW9ucyAmIGVudGl0aWVzRGF0YVxuICAgIGZvciAoY29uc3QgZW50aXR5RGF0YSBvZiBlbnRpdGllcykge1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KGVudGl0eURhdGEuaXJpLCBbXSk7IC8vIGluaXRpYWxpemUgd2l0aCBlbXB0eSBhcnJheVxuICAgICAgZW50aXRpZXNEYXRhLnNldChlbnRpdHlEYXRhLmlyaSwgZW50aXR5RGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHNob3dTaWJsaW5nc09uSW5pdCkge1xuICAgICAgLy8gYWRkaXRpb25hbGx5IGxvYWQgc2libGluZ3MgZnJvbSBhcGlcbiAgICAgIGNvbnN0IHJlYWxFbnRpdHlUeXBlID0gKGVudGl0eVR5cGUgfHwgbWFpbkVudGl0eS5nZXRUeXBlKCkpO1xuICAgICAgY29uc3QgZW50aXR5VHlwZUZvclF1ZXJ5ID0gcmVhbEVudGl0eVR5cGUgPT0gXCJpbmRpdmlkdWFsXCIgPyBcImNsYXNzXCIgOiByZWFsRW50aXR5VHlwZTsgLy8gVE9ETzogb25seSByZWxldmFudCBmb3IgZW50aXR5VHlwZSA9PSBcImluZGl2aWR1YWxcIiAobWF5YmUgd2UgZG9uJ3QgZXZlbiBuZWVkIHRoaXMgYXMgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzIGlzIG5vdCB5ZXQgZGV0ZXJtaW5lZClcblxuICAgICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBlbnRpdHlEYXRhIG9mIGVudGl0aWVzKSB7XG4gICAgICAgIGlmIChlbnRpdHlEYXRhLmlyaSAhPSBtYWluRW50aXR5LmdldElyaSgpKSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4oZW50aXR5RGF0YS5pcmksIGVudGl0eVR5cGVGb3JRdWVyeSwgb250b2xvZ3lJZCwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsIHVzZUxlZ2FjeSkudGhlbigoY2hpbGRyZW4pID0+IGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhKGNoaWxkKSkpLnRoZW4oKGNoaWxkcmVuKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhckNoaWxkUmVsOiBQYXJlbnRDaGlsZFJlbGF0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGVudGl0aWVzRGF0YS5zZXQoY2hpbGQuaXJpLCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyUmVsYXRpb24gPSBjaGlsZC5wYXJlbnRzLmZpbHRlcigocGFyKSA9PiBwYXIudmFsdWUgPT0gZW50aXR5RGF0YS5pcmkpOyAvLyBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgcGFyQ2hpbGRSZWwucHVzaCh7IGNoaWxkSXJpOiBjaGlsZC5pcmksIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogcGFyUmVsYXRpb24ubGVuZ3RoID4gMCAmJiBwYXJSZWxhdGlvblswXS5nZXRNZXRhZGF0YSgpID8gcGFyUmVsYXRpb25bMF0uZ2V0TWV0YWRhdGEoKVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXSA6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChlbnRpdHlEYXRhLmlyaSwgcGFyQ2hpbGRSZWwpO1xuICAgICAgICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQuYWRkKGVudGl0eURhdGEuaXJpKTtcbiAgICAgICAgICAgIH0pLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgICApKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cbiAgICAgIC8vIFRPRE86IG9ubHkgcmVsZXZhbnQgZm9yIGVudGl0eVR5cGUgPT0gXCJpbmRpdmlkdWFsXCIgKG1heWJlIHdlIGRvbid0IGV2ZW4gbmVlZCB0aGlzIGFzIGJlaGF2aW91ciBmb3IgaW5kaXZpZHVhbCBoaWVyYXJjaGllcyBpcyBub3QgeWV0IGRldGVybWluZWQpXG4gICAgICBpZiAocmVhbEVudGl0eVR5cGUgPT0gXCJpbmRpdmlkdWFsXCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXJlbnRSZWlmaWVkIG9mIG1haW5FbnRpdHkuZ2V0UGFyZW50cygpKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSAoYXdhaXQgdGhpcy5nZXRDaGlsZHJlbihwYXJlbnRSZWlmaWVkLnZhbHVlLCByZWFsRW50aXR5VHlwZSwgb250b2xvZ3lJZCwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMpKVxuICAgICAgICAgICAgLm1hcCgoY2hpbGQpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhKGNoaWxkKSlcblxuICAgICAgICAgIGNvbnN0IHBhckNoaWxkUmVsOiBQYXJlbnRDaGlsZFJlbGF0aW9uW10gPSBbXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBwYXJDaGlsZFJlbC5wdXNoKHsgY2hpbGRJcmk6IGNoaWxkLmlyaSwgY2hpbGRSZWxhdGlvblRvUGFyZW50OiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlXCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChwYXJlbnRSZWlmaWVkLnZhbHVlLCBwYXJDaGlsZFJlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGVudGl0eURhdGEgb2YgZW50aXRpZXMpIHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IGVudGl0eURhdGEucGFyZW50cy5maWx0ZXIoKHBhcmVudFJlaWZpZWQ6IFJlaWZpZWQ8c3RyaW5nPikgPT4gIWlzVG9wKHBhcmVudFJlaWZpZWQudmFsdWUpKTtcbiAgICAgICAgaWYgKGVudGl0eURhdGEuaXJpID09IG1haW5FbnRpdHk/LmdldElyaSgpICYmIGlzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUgfHwgbWFpbkVudGl0eS5nZXRUeXBlKCkpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwYXJlbnRSZWlmaWVkIG9mIHBhcmVudHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRDaGlsZFJlbGF0aW9ucy5oYXMocGFyZW50UmVpZmllZC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KHBhcmVudFJlaWZpZWQudmFsdWUpPy5wdXNoKHsgY2hpbGRJcmk6IGVudGl0eURhdGEuaXJpLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwYXJlbnRSZWlmaWVkIG9mIHBhcmVudHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRDaGlsZFJlbGF0aW9ucy5oYXMocGFyZW50UmVpZmllZC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KHBhcmVudFJlaWZpZWQudmFsdWUpPy5wdXNoKHsgY2hpbGRJcmk6IGVudGl0eURhdGEuaXJpLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6IHBhcmVudFJlaWZpZWQuZ2V0TWV0YWRhdGEoKSA/IHBhcmVudFJlaWZpZWQuZ2V0TWV0YWRhdGEoKVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXSA6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzb3J0IHBhcmVudENoaWxkUmVsYXRpb25zXG4gICAgZm9yIChjb25zdCByZWwgb2YgcGFyZW50Q2hpbGRSZWxhdGlvbnMudmFsdWVzKCkpIHJlbC5zb3J0KChhLCBiKSA9PiAoZW50aXRpZXNEYXRhLmdldChhLmNoaWxkSXJpKT8ubGFiZWwgfHwgYS5jaGlsZElyaSkubG9jYWxlQ29tcGFyZShlbnRpdGllc0RhdGEuZ2V0KGIuY2hpbGRJcmkpPy5sYWJlbCB8fCBiLmNoaWxkSXJpKSk7XG4gICAgLyogLS0tICovXG5cbiAgICAvKiBCVUlMRCByb290RW50aXRpZXMgKi9cbiAgICBjb25zdCByb290RW50aXRpZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHByZWZlcnJlZFJvb3RzKSB7XG4gICAgICBjb25zdCBwcmVmZXJyZWRSb290RW50aXRpZXMgPSAoYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCB1bmRlZmluZWQsIHVzZUxlZ2FjeSkpLmdldFByZWZlcnJlZFJvb3RzKCk7XG4gICAgICBmb3IgKGNvbnN0IGUgb2YgcHJlZmVycmVkUm9vdEVudGl0aWVzKSB7XG4gICAgICAgIGlmIChlbnRpdGllc0RhdGEuaGFzKGUpKSByb290RW50aXRpZXMucHVzaChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGVudGl0eURhdGEgb2YgZW50aXRpZXMpIHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IGVudGl0eURhdGEucGFyZW50cy5maWx0ZXIoKHBhcmVudFJlaWZpZWQ6IFJlaWZpZWQ8c3RyaW5nPikgPT4gIWlzVG9wKHBhcmVudFJlaWZpZWQudmFsdWUpKTtcbiAgICAgICAgaWYgKHBhcmVudHMubGVuZ3RoID09IDApIHJvb3RFbnRpdGllcy5wdXNoKGVudGl0eURhdGEuaXJpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogLS0tICovXG5cbiAgICBmdW5jdGlvbiBjcmVhdGVUcmVlTm9kZShlbnRpdHlEYXRhOiBFbnRpdHlEYXRhLCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiwgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nKTogVHJlZU5vZGUge1xuICAgICAgY3ljbGVDaGVjay5hZGQoZW50aXR5RGF0YS5pcmkpOyAvLyBhZGQgY3VycmVudCBlbnRpdHkgdG8gY3ljbGUgY2hlY2sgc2V0XG5cbiAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJlZU5vZGUoZW50aXR5RGF0YSk7XG4gICAgICBub2RlLmNoaWxkUmVsYXRpb25Ub1BhcmVudCA9IGNoaWxkUmVsYXRpb25Ub1BhcmVudDtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KGVudGl0eURhdGEuaXJpKSB8fCBbXTtcblxuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICBpZiAoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBDeWNsaWMgdHJlZSBhdCBlbnRpdHkgXCIke2NoaWxkLmNoaWxkSXJpfVwiLmApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hpbGREYXRhID0gZW50aXRpZXNEYXRhLmdldChjaGlsZC5jaGlsZElyaSk7XG4gICAgICAgIGlmIChjaGlsZERhdGEgIT0gdW5kZWZpbmVkKSBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGNoaWxkRGF0YSwgY3ljbGVDaGVjaywgY2hpbGQuY2hpbGRSZWxhdGlvblRvUGFyZW50KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLmxvYWRlZENoaWxkcmVuLmxlbmd0aCA+IDApIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgICBjeWNsZUNoZWNrLmRlbGV0ZShlbnRpdHlEYXRhLmlyaSk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBjb25zdCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBDb250YWlucyBpcmlzIG9mIGFsbCBlbnRpdGllcyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBicmFuY2guIElzIHVzZWQgdG8gY2hlY2sgZm9yIGN5Y2xlcy5cblxuICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBhbGxDaGlsZHJlblByZXNlbnQsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgcm9vdHM6IHJvb3RFbnRpdGllcy5tYXAoKHJvb3RFbnRpdHkpID0+IGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQocm9vdEVudGl0eSkhLCBjeWNsZUNoZWNrKSkuc29ydCgoYSwgYikgPT4gKGEuZW50aXR5RGF0YS5sYWJlbCB8fCBhLmVudGl0eURhdGEuaXJpKS5sb2NhbGVDb21wYXJlKGIuZW50aXR5RGF0YS5sYWJlbCB8fCBiLmVudGl0eURhdGEuaXJpKSksXG4gICAgICBhcGk6IG5ldyBPbHNBcGkodGhpcy5heGlvc0luc3RhbmNlLmdldFVyaSgpKSxcbiAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxuICAgICAgbWFpbkVudGl0eUlyaTogbWFpbkVudGl0eT8uZ2V0SXJpKCksXG4gICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkSGllcmFyY2h5Q2hpbGRyZW4ocHJvcHM6IExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzKTogUHJvbWlzZTxFbnRpdHlEYXRhW10+IHtcbiAgICBpZiAocHJvcHMuZW50aXR5VHlwZSA9PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRW50aXR5VHlwZSBoYXMgdG8gYmUgcHJvdmlkZWQgdG8gbG9hZCBjaGlsZHJlbiBpbiBPTFMuXCIpO1xuXG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldENoaWxkcmVuKHByb3BzLm5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSwgcHJvcHMuZW50aXR5VHlwZSwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsIHByb3BzLnVzZUxlZ2FjeSkpXG4gICAgICAubWFwKChlbnRpdHkpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhKGVudGl0eSkpXG4gIH1cbn1cbiIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vc2NyZWVuX3JlYWRlcl9vbmx5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNjcmVlblJlYWRlckxpdmUgPSBmdW5jdGlvbiBFdWlTY3JlZW5SZWFkZXJMaXZlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBfcmVmJGlzQWN0aXZlID0gX3JlZi5pc0FjdGl2ZSxcbiAgICBpc0FjdGl2ZSA9IF9yZWYkaXNBY3RpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGlzQWN0aXZlLFxuICAgIF9yZWYkcm9sZSA9IF9yZWYucm9sZSxcbiAgICByb2xlID0gX3JlZiRyb2xlID09PSB2b2lkIDAgPyAnc3RhdHVzJyA6IF9yZWYkcm9sZSxcbiAgICBfcmVmJGFyaWFMaXZlID0gX3JlZlsnYXJpYS1saXZlJ10sXG4gICAgYXJpYUxpdmUgPSBfcmVmJGFyaWFMaXZlID09PSB2b2lkIDAgPyAncG9saXRlJyA6IF9yZWYkYXJpYUxpdmUsXG4gICAgX3JlZiRmb2N1c1JlZ2lvbk9uVGV4ID0gX3JlZi5mb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSxcbiAgICBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA9IF9yZWYkZm9jdXNSZWdpb25PblRleCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGZvY3VzUmVnaW9uT25UZXg7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgdG9nZ2xlID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRUb2dnbGUgPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgZm9jdXNSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgc2V0VG9nZ2xlKGZ1bmN0aW9uICh0b2dnbGUpIHtcbiAgICAgIHJldHVybiAhdG9nZ2xlO1xuICAgIH0pO1xuICB9LCBbY2hpbGRyZW5dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZm9jdXNSZWYuY3VycmVudCAhPT0gbnVsbCAmJiBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSkge1xuICAgICAgZm9jdXNSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW3RvZ2dsZSwgZm9jdXNSZWdpb25PblRleHRDaGFuZ2VdKTtcbiAgcmV0dXJuIChcbiAgICAvKipcbiAgICAgKiBJbnRlbnRpb25hbGx5IHVzZXMgdHdvIHBlcnNpc3RlbnQgbGl2ZSByZWdpb25zIHdpdGggb3NjaWxsYXRpbmcgY29udGVudCB1cGRhdGVzLlxuICAgICAqIFRoaXMgcmVzb2x2ZXMgdGhlIHByb2JsZW0gb2YgZHVwbGljYXRlIHNjcmVlbiByZWFkZXIgYW5ub3VuY2VtZW50cyBpbiByYXBpZCBzdWNjZXNzaW9uXG4gICAgICogY2F1c2VkIGJ5IFJlYWN0J3MgdmlydHVhbCBET00gYmVoYXZpb3VyIChodHRwczovL2dpdGh1Yi5jb20vbnZhY2Nlc3MvbnZkYS9pc3N1ZXMvNzk5NiNpc3N1ZWNvbW1lbnQtNDEzNjQxNzA5KVxuICAgICAqXG4gICAgICogQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hbHBoYWdvdi9hY2Nlc3NpYmxlLWF1dG9jb21wbGV0ZS9ibG9iL2E3MTA2ZjAzMTUwOTQxZmMxNWU2YzFjZWIwYTkwZTg4NzJmYTg2ZWYvc3JjL3N0YXR1cy5qc1xuICAgICAqIERlYm91bmNpbmcgd2FzIG5vdCBuZWVkZWQgZm9yIHRoaXMgY2FzZSwgYnV0IGNvdWxkIHByb3ZlIHRvIGJlIHVzZWZ1bCBmb3IgZnV0dXJlIHVzZSBjYXNlcy5cbiAgICAgKiBTZWUgYWxzbyBodHRwczovL2dpdGh1Yi5jb20vQWxtZXJvU3RleW4vcmVhY3QtYXJpYS1saXZlIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZGVxdWVsYWJzL25nQTExeVxuICAgICAqIGZvciBtb3JlIGV4YW1wbGVzIG9mIHRoZSBkb3VibGUgcmVnaW9uIGFwcHJvYWNoLlxuICAgICAqL1xuICAgIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICByZWY6IGZvY3VzUmVmLFxuICAgICAgdGFiSW5kZXg6IGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID8gLTEgOiB1bmRlZmluZWRcbiAgICB9LCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIHJvbGU6IHJvbGUsXG4gICAgICBcImFyaWEtYXRvbWljXCI6IFwidHJ1ZVwiXG4gICAgICAvLyBTZXR0aW5nIGBhcmlhLWhpZGRlbmAgYW5kIHNldHRpbmcgYGFyaWEtbGl2ZWAgdG8gXCJvZmZcIiBwcmV2ZW50c1xuICAgICAgLy8gZG91YmxlIGFubm91bmNlbWVudHMgZnJvbSBWTyB3aGVuIGBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZWAgaXMgdHJ1ZVxuICAgICAgLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0b2dnbGUgPyB1bmRlZmluZWQgOiAndHJ1ZScsXG4gICAgICBcImFyaWEtbGl2ZVwiOiAhdG9nZ2xlIHx8IGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID8gJ29mZicgOiBhcmlhTGl2ZVxuICAgIH0sIGlzQWN0aXZlICYmIHRvZ2dsZSA/IGNoaWxkcmVuIDogJycpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIHJvbGU6IHJvbGUsXG4gICAgICBcImFyaWEtYXRvbWljXCI6IFwidHJ1ZVwiLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiAhdG9nZ2xlID8gdW5kZWZpbmVkIDogJ3RydWUnLFxuICAgICAgXCJhcmlhLWxpdmVcIjogdG9nZ2xlIHx8IGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID8gJ29mZicgOiBhcmlhTGl2ZVxuICAgIH0sIGlzQWN0aXZlICYmICF0b2dnbGUgPyBjaGlsZHJlbiA6ICcnKSkpXG4gICk7XG59O1xuRXVpU2NyZWVuUmVhZGVyTGl2ZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gbWFrZSBzY3JlZW4gcmVhZGVycyBhd2FyZSBvZiB0aGUgY29udGVudFxuICAgICAqL1xuICBpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIENvbnRlbnQgZm9yIHNjcmVlbiByZWFkZXJzIHRvIGFubm91bmNlXG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogYHJvbGVgIGF0dHJpYnV0ZSBmb3IgYm90aCBsaXZlIHJlZ2lvbnMuXG4gICAgICpcbiAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BY2Nlc3NpYmlsaXR5L0FSSUEvQVJJQV9MaXZlX1JlZ2lvbnMjcm9sZXNfd2l0aF9pbXBsaWNpdF9saXZlX3JlZ2lvbl9hdHRyaWJ1dGVzXG4gICAgICovXG4gIHJvbGU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIGBhcmlhLWxpdmVgIGF0dHJpYnV0ZSBmb3IgYm90aCBsaXZlIHJlZ2lvbnNcbiAgICAgKi9cbiAgXCJhcmlhLWxpdmVcIjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogT24gYGNoaWxkcmVuYC90ZXh0IGNoYW5nZSwgdGhlIHJlZ2lvbiB3aWxsIGF1dG8tZm9jdXMgaXRzZWxmLCBjYXVzaW5nIHNjcmVlbiByZWFkZXJzXG4gICAgICogdG8gYXV0b21hdGljYWxseSByZWFkIG91dCB0aGUgdGV4dCBjb250ZW50LiBUaGlzIHByb3Agc2hvdWxkIHByaW1hcmlseSBiZSB1c2VkIGZvclxuICAgICAqIG5hdmlnYXRpb24gb3IgcGFnZSBjaGFuZ2VzLCB3aGVyZSBwcm9ncmFtbWF0aWNhbGx5IHJlc2V0dGluZyBmb2N1cyBsb2NhdGlvbiBiYWNrIHRvXG4gICAgICogYSBjZXJ0YWluIHBhcnQgb2YgdGhlIHBhZ2UgaXMgZGVzaXJlZC5cbiAgICAgKi9cbiAgZm9jdXNSZWdpb25PblRleHRDaGFuZ2U6IFByb3BUeXBlcy5ib29sXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyBhcyBzdHlsZXMgfSBmcm9tICcuL3NjcmVlbl9yZWFkZXJfb25seS5zdHlsZXMnO1xuZXhwb3J0IHZhciBFdWlTY3JlZW5SZWFkZXJPbmx5ID0gZnVuY3Rpb24gRXVpU2NyZWVuUmVhZGVyT25seShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgc2hvd09uRm9jdXMgPSBfcmVmLnNob3dPbkZvY3VzO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCBjaGlsZHJlbi5wcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgcHJvcHMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmxlbmd0aCA/IGNsYXNzZXMgOiB1bmRlZmluZWQsXG4gICAgICBjc3M6IHNob3dPbkZvY3VzID8gc3R5bGVzWydldWlTY3JlZW5SZWFkZXJPbmx5LXNob3dPbkZvY3VzJ10gOiBzdHlsZXMuZXVpU2NyZWVuUmVhZGVyT25seVxuICAgIH07XG4gIH0sIFtjbGFzc2VzLCBzaG93T25Gb2N1c10pO1xuICByZXR1cm4gY2xvbmVFbGVtZW50V2l0aENzcyhjaGlsZHJlbiwgcHJvcHMpO1xufTtcbkV1aVNjcmVlblJlYWRlck9ubHkucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBSZWFjdEVsZW1lbnQgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogRm9yIGtleWJvYXJkIG5hdmlnYXRpb24sIGZvcmNlIGNvbnRlbnQgdG8gZGlzcGxheSB2aXN1YWxseSB1cG9uIGZvY3VzL2ZvY3VzLXdpdGhpbi5cbiAgICAgKi9cbiAgc2hvd09uRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgRU5URVIgPSAnRW50ZXInO1xuZXhwb3J0IHZhciBTUEFDRSA9ICcgJztcbmV4cG9ydCB2YXIgRVNDQVBFID0gJ0VzY2FwZSc7XG5leHBvcnQgdmFyIFRBQiA9ICdUYWInO1xuZXhwb3J0IHZhciBCQUNLU1BBQ0UgPSAnQmFja3NwYWNlJztcbmV4cG9ydCB2YXIgRjIgPSAnRjInO1xuZXhwb3J0IHZhciBBTFQgPSAnQWx0JztcbmV4cG9ydCB2YXIgU0hJRlQgPSAnU2hpZnQnO1xuZXhwb3J0IHZhciBDVFJMID0gJ0NvbnRyb2wnO1xuZXhwb3J0IHZhciBNRVRBID0gJ01ldGEnOyAvLyBXaW5kb3dzLCBDb21tYW5kLCBPcHRpb25cblxuZXhwb3J0IHZhciBBUlJPV19ET1dOID0gJ0Fycm93RG93bic7XG5leHBvcnQgdmFyIEFSUk9XX1VQID0gJ0Fycm93VXAnO1xuZXhwb3J0IHZhciBBUlJPV19MRUZUID0gJ0Fycm93TGVmdCc7XG5leHBvcnQgdmFyIEFSUk9XX1JJR0hUID0gJ0Fycm93UmlnaHQnO1xuZXhwb3J0IHZhciBQQUdFX1VQID0gJ1BhZ2VVcCc7XG5leHBvcnQgdmFyIFBBR0VfRE9XTiA9ICdQYWdlRG93bic7XG5leHBvcnQgdmFyIEVORCA9ICdFbmQnO1xuZXhwb3J0IHZhciBIT01FID0gJ0hvbWUnO1xuZXhwb3J0IHZhciBrZXlzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChrZXlzKSB7XG4gIGtleXNbXCJFTlRFUlwiXSA9IFwiRW50ZXJcIjtcbiAga2V5c1tcIlNQQUNFXCJdID0gXCIgXCI7XG4gIGtleXNbXCJFU0NBUEVcIl0gPSBcIkVzY2FwZVwiO1xuICBrZXlzW1wiVEFCXCJdID0gXCJUYWJcIjtcbiAga2V5c1tcIkJBQ0tTUEFDRVwiXSA9IFwiQmFja3NwYWNlXCI7XG4gIGtleXNbXCJGMlwiXSA9IFwiRjJcIjtcbiAga2V5c1tcIkFMVFwiXSA9IFwiQWx0XCI7XG4gIGtleXNbXCJTSElGVFwiXSA9IFwiU2hpZnRcIjtcbiAga2V5c1tcIkNUUkxcIl0gPSBcIkNvbnRyb2xcIjtcbiAga2V5c1tcIk1FVEFcIl0gPSBcIk1ldGFcIjtcbiAga2V5c1tcIkFSUk9XX0RPV05cIl0gPSBcIkFycm93RG93blwiO1xuICBrZXlzW1wiQVJST1dfVVBcIl0gPSBcIkFycm93VXBcIjtcbiAga2V5c1tcIkFSUk9XX0xFRlRcIl0gPSBcIkFycm93TGVmdFwiO1xuICBrZXlzW1wiQVJST1dfUklHSFRcIl0gPSBcIkFycm93UmlnaHRcIjtcbiAga2V5c1tcIlBBR0VfVVBcIl0gPSBcIlBhZ2VVcFwiO1xuICBrZXlzW1wiUEFHRV9ET1dOXCJdID0gXCJQYWdlRG93blwiO1xuICBrZXlzW1wiRU5EXCJdID0gXCJFbmRcIjtcbiAga2V5c1tcIkhPTUVcIl0gPSBcIkhvbWVcIjtcbiAgcmV0dXJuIGtleXM7XG59KHt9KTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB2MSBhcyB1dWlkdjEgfSBmcm9tICd1dWlkJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBpZHMuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSwgYnV0IHByZWRpY3RhYmxlIGlkcyB0byBwYWlyIGxhYmVsc1xuICogd2l0aCB0aGVpciBpbnB1dHMuIEl0IHRha2VzIGFuIG9wdGlvbmFsIHByZWZpeCBhcyBhIHBhcmFtZXRlci4gSWYgeW91IGRvbid0XG4gKiBzcGVjaWZ5IGl0LCBpdCBnZW5lcmF0ZXMgYSByYW5kb20gaWQgcHJlZml4LiBJZiB5b3Ugc3BlY2lmeSBhIGN1c3RvbSBwcmVmaXhcbiAqIGl0IHNob3VsZCBiZWdpbiB3aXRoIGFuIGxldHRlciB0byBiZSBIVE1MNCBjb21wbGlhbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBodG1sSWRHZW5lcmF0b3IoKSB7XG4gIHZhciBpZFByZWZpeCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7XG4gIHZhciBzdGF0aWNVdWlkID0gdXVpZHYxKCk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlkU3VmZml4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgICB2YXIgcHJlZml4ID0gXCJcIi5jb25jYXQoaWRQcmVmaXgpLmNvbmNhdChpZFByZWZpeCAhPT0gJycgPyAnXycgOiAnaScpO1xuICAgIHZhciBzdWZmaXggPSBpZFN1ZmZpeCA/IFwiX1wiLmNvbmNhdChpZFN1ZmZpeCkgOiAnJztcbiAgICByZXR1cm4gXCJcIi5jb25jYXQocHJlZml4KS5jb25jYXQoc3VmZml4ID8gc3RhdGljVXVpZCA6IHV1aWR2MSgpKS5jb25jYXQoc3VmZml4KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBtZW1vaXplZCBJRCB0aGF0IHJlbWFpbnMgc3RhdGljIHVudGlsIGNvbXBvbmVudCB1bm1vdW50LlxuICogVGhpcyBwcmV2ZW50cyBJRHMgZnJvbSBiZWluZyByZS1yYW5kb21pemVkIG9uIGV2ZXJ5IGNvbXBvbmVudCB1cGRhdGUuXG4gKi9cblxuLy8gV2UgY2FuIHJlbW92ZSB0aGlzIGRlcHJlY2F0ZWQgaG9vayBvbmNlIEVVSSBubyBsb25nZXIgbmVlZHMgdG8gc3VwcG9ydCBSZWFjdCAxNi0xN1xudmFyIHVzZURlcHJlY2F0ZWRHZW5lcmF0ZWRIdG1sSWQgPSBmdW5jdGlvbiB1c2VEZXByZWNhdGVkR2VuZXJhdGVkSHRtbElkKCkge1xuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgcHJlZml4ID0gX3JlZi5wcmVmaXgsXG4gICAgc3VmZml4ID0gX3JlZi5zdWZmaXgsXG4gICAgY29uZGl0aW9uYWxJZCA9IF9yZWYuY29uZGl0aW9uYWxJZDtcbiAgcmV0dXJuIHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjb25kaXRpb25hbElkIHx8IGh0bWxJZEdlbmVyYXRvcihwcmVmaXgpKHN1ZmZpeCk7XG4gIH0sIFtjb25kaXRpb25hbElkLCBwcmVmaXgsIHN1ZmZpeF0pO1xufTtcbnZhciB1c2VOZXdHZW5lcmF0ZWRIdG1sSWQgPSBmdW5jdGlvbiB1c2VOZXdHZW5lcmF0ZWRIdG1sSWQoKSB7XG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgX3JlZjIkcHJlZml4ID0gX3JlZjIucHJlZml4LFxuICAgIHByZWZpeCA9IF9yZWYyJHByZWZpeCA9PT0gdm9pZCAwID8gJycgOiBfcmVmMiRwcmVmaXgsXG4gICAgX3JlZjIkc3VmZml4ID0gX3JlZjIuc3VmZml4LFxuICAgIHN1ZmZpeCA9IF9yZWYyJHN1ZmZpeCA9PT0gdm9pZCAwID8gJycgOiBfcmVmMiRzdWZmaXgsXG4gICAgY29uZGl0aW9uYWxJZCA9IF9yZWYyLmNvbmRpdGlvbmFsSWQ7XG4gIC8vIFVzaW5nIHRoZSBkZWZhdWx0IGV4cG9ydCBhbmQgZG90IG5vdGF0aW9uIGhlcmUgaXMgaW50ZW50aW9uYWxcbiAgLy8gdG8gcHJldmVudCBSZWFjdCA8MTggaW1wb3J0IGVycm9ycy5cbiAgdmFyIGlkID0gUmVhY3QudXNlSWQoKTtcbiAgcmV0dXJuIHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjb25kaXRpb25hbElkIHx8IFwiXCIuY29uY2F0KHByZWZpeCkuY29uY2F0KGlkKS5jb25jYXQoc3VmZml4KTtcbiAgfSwgW2lkLCBjb25kaXRpb25hbElkLCBwcmVmaXgsIHN1ZmZpeF0pO1xufTtcbmV4cG9ydCB2YXIgdXNlR2VuZXJhdGVkSHRtbElkID0gJ3VzZUlkJyBpbiBSZWFjdCA/IHVzZU5ld0dlbmVyYXRlZEh0bWxJZCA6IHVzZURlcHJlY2F0ZWRHZW5lcmF0ZWRIdG1sSWQ7IiwgIi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuIEluIHRoZSBicm93c2VyIHdlIHRoZXJlZm9yZVxuLy8gcmVxdWlyZSB0aGUgY3J5cHRvIEFQSSBhbmQgZG8gbm90IHN1cHBvcnQgYnVpbHQtaW4gZmFsbGJhY2sgdG8gbG93ZXIgcXVhbGl0eSByYW5kb20gbnVtYmVyXG4vLyBnZW5lcmF0b3JzIChsaWtlIE1hdGgucmFuZG9tKCkpLlxudmFyIGdldFJhbmRvbVZhbHVlcztcbnZhciBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLiBBbHNvLFxuICAgIC8vIGZpbmQgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIGNyeXB0byAobXNDcnlwdG8pIG9uIElFMTEuXG4gICAgZ2V0UmFuZG9tVmFsdWVzID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSB8fCB0eXBlb2YgbXNDcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT09ICdmdW5jdGlvbicgJiYgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pO1xuXG4gICAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgL14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pOyIsICJpbXBvcnQgUkVHRVggZnJvbSAnLi9yZWdleC5qcyc7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKHV1aWQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyAmJiBSRUdFWC50ZXN0KHV1aWQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0ZTsiLCAiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5cbnZhciBieXRlVG9IZXggPSBbXTtcblxuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXgucHVzaCgoaSArIDB4MTAwKS50b1N0cmluZygxNikuc3Vic3RyKDEpKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFycikge1xuICB2YXIgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICAvLyBOb3RlOiBCZSBjYXJlZnVsIGVkaXRpbmcgdGhpcyBjb2RlISAgSXQncyBiZWVuIHR1bmVkIGZvciBwZXJmb3JtYW5jZVxuICAvLyBhbmQgd29ya3MgaW4gd2F5cyB5b3UgbWF5IG5vdCBleHBlY3QuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQvcHVsbC80MzRcbiAgdmFyIHV1aWQgPSAoYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV0pLnRvTG93ZXJDYXNlKCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7IiwgImltcG9ydCBybmcgZnJvbSAnLi9ybmcuanMnO1xuaW1wb3J0IHN0cmluZ2lmeSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7IC8vICoqYHYxKClgIC0gR2VuZXJhdGUgdGltZS1iYXNlZCBVVUlEKipcbi8vXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vTGlvc0svVVVJRC5qc1xuLy8gYW5kIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91dWlkLmh0bWxcblxudmFyIF9ub2RlSWQ7XG5cbnZhciBfY2xvY2tzZXE7IC8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxuXG5cbnZhciBfbGFzdE1TZWNzID0gMDtcbnZhciBfbGFzdE5TZWNzID0gMDsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCBmb3IgQVBJIGRldGFpbHNcblxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG4gIHZhciBiID0gYnVmIHx8IG5ldyBBcnJheSgxNik7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgbm9kZSA9IG9wdGlvbnMubm9kZSB8fCBfbm9kZUlkO1xuICB2YXIgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmNsb2Nrc2VxIDogX2Nsb2Nrc2VxOyAvLyBub2RlIGFuZCBjbG9ja3NlcSBuZWVkIHRvIGJlIGluaXRpYWxpemVkIHRvIHJhbmRvbSB2YWx1ZXMgaWYgdGhleSdyZSBub3RcbiAgLy8gc3BlY2lmaWVkLiAgV2UgZG8gdGhpcyBsYXppbHkgdG8gbWluaW1pemUgaXNzdWVzIHJlbGF0ZWQgdG8gaW5zdWZmaWNpZW50XG4gIC8vIHN5c3RlbSBlbnRyb3B5LiAgU2VlICMxODlcblxuICBpZiAobm9kZSA9PSBudWxsIHx8IGNsb2Nrc2VxID09IG51bGwpIHtcbiAgICB2YXIgc2VlZEJ5dGVzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcblxuICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgIC8vIFBlciA0LjUsIGNyZWF0ZSBhbmQgNDgtYml0IG5vZGUgaWQsICg0NyByYW5kb20gYml0cyArIG11bHRpY2FzdCBiaXQgPSAxKVxuICAgICAgbm9kZSA9IF9ub2RlSWQgPSBbc2VlZEJ5dGVzWzBdIHwgMHgwMSwgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1dO1xuICAgIH1cblxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxuICAgICAgY2xvY2tzZXEgPSBfY2xvY2tzZXEgPSAoc2VlZEJ5dGVzWzZdIDw8IDggfCBzZWVkQnl0ZXNbN10pICYgMHgzZmZmO1xuICAgIH1cbiAgfSAvLyBVVUlEIHRpbWVzdGFtcHMgYXJlIDEwMCBuYW5vLXNlY29uZCB1bml0cyBzaW5jZSB0aGUgR3JlZ29yaWFuIGVwb2NoLFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzb1xuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcbiAgLy8gKDEwMC1uYW5vc2Vjb25kcyBvZmZzZXQgZnJvbSBtc2Vjcykgc2luY2UgdW5peCBlcG9jaCwgMTk3MC0wMS0wMSAwMDowMC5cblxuXG4gIHZhciBtc2VjcyA9IG9wdGlvbnMubXNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubXNlY3MgOiBEYXRlLm5vdygpOyAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXG4gIC8vIGN5Y2xlIHRvIHNpbXVsYXRlIGhpZ2hlciByZXNvbHV0aW9uIGNsb2NrXG5cbiAgdmFyIG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxOyAvLyBUaW1lIHNpbmNlIGxhc3QgdXVpZCBjcmVhdGlvbiAoaW4gbXNlY3MpXG5cbiAgdmFyIGR0ID0gbXNlY3MgLSBfbGFzdE1TZWNzICsgKG5zZWNzIC0gX2xhc3ROU2VjcykgLyAxMDAwMDsgLy8gUGVyIDQuMi4xLjIsIEJ1bXAgY2xvY2tzZXEgb24gY2xvY2sgcmVncmVzc2lvblxuXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2xvY2tzZXEgPSBjbG9ja3NlcSArIDEgJiAweDNmZmY7XG4gIH0gLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcbiAgLy8gdGltZSBpbnRlcnZhbFxuXG5cbiAgaWYgKChkdCA8IDAgfHwgbXNlY3MgPiBfbGFzdE1TZWNzKSAmJiBvcHRpb25zLm5zZWNzID09PSB1bmRlZmluZWQpIHtcbiAgICBuc2VjcyA9IDA7XG4gIH0gLy8gUGVyIDQuMi4xLjIgVGhyb3cgZXJyb3IgaWYgdG9vIG1hbnkgdXVpZHMgYXJlIHJlcXVlc3RlZFxuXG5cbiAgaWYgKG5zZWNzID49IDEwMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXVpZC52MSgpOiBDYW4ndCBjcmVhdGUgbW9yZSB0aGFuIDEwTSB1dWlkcy9zZWNcIik7XG4gIH1cblxuICBfbGFzdE1TZWNzID0gbXNlY3M7XG4gIF9sYXN0TlNlY3MgPSBuc2VjcztcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7IC8vIFBlciA0LjEuNCAtIENvbnZlcnQgZnJvbSB1bml4IGVwb2NoIHRvIEdyZWdvcmlhbiBlcG9jaFxuXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwOyAvLyBgdGltZV9sb3dgXG5cbiAgdmFyIHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xuICBiW2krK10gPSB0bCA+Pj4gMjQgJiAweGZmO1xuICBiW2krK10gPSB0bCA+Pj4gMTYgJiAweGZmO1xuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsICYgMHhmZjsgLy8gYHRpbWVfbWlkYFxuXG4gIHZhciB0bWggPSBtc2VjcyAvIDB4MTAwMDAwMDAwICogMTAwMDAgJiAweGZmZmZmZmY7XG4gIGJbaSsrXSA9IHRtaCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRtaCAmIDB4ZmY7IC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXG5cbiAgYltpKytdID0gdG1oID4+PiAyNCAmIDB4ZiB8IDB4MTA7IC8vIGluY2x1ZGUgdmVyc2lvblxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMTYgJiAweGZmOyAvLyBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGAgKFBlciA0LjIuMiAtIGluY2x1ZGUgdmFyaWFudClcblxuICBiW2krK10gPSBjbG9ja3NlcSA+Pj4gOCB8IDB4ODA7IC8vIGBjbG9ja19zZXFfbG93YFxuXG4gIGJbaSsrXSA9IGNsb2Nrc2VxICYgMHhmZjsgLy8gYG5vZGVgXG5cbiAgZm9yICh2YXIgbiA9IDA7IG4gPCA2OyArK24pIHtcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XG4gIH1cblxuICByZXR1cm4gYnVmIHx8IHN0cmluZ2lmeShiKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdjE7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgTEVGVF9BTElHTk1FTlQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIFJJR0hUX0FMSUdOTUVOVCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIENFTlRFUl9BTElHTk1FTlQgPSAnY2VudGVyJzsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uL3RoZW1lL2hvb2tzJztcbmltcG9ydCB7IHRocm90dGxlIH0gZnJvbSAnLi4vdGhyb3R0bGUnO1xuaW1wb3J0IHsgc29ydE1hcEJ5TGFyZ2VUb1NtYWxsVmFsdWVzIH0gZnJvbSAnLi9fc29ydGluZyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDdXJyZW50RXVpQnJlYWtwb2ludENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBiYXNlZCBvbiB3aW5kb3cgd2lkdGguXG4gKiBUeXBpY2FsbHkgb25seSBjYWxsZWQgYnkgdGhlIHRvcC1sZXZlbCBgRXVpUHJvdmlkZXJgICh0byByZWR1Y2UgdGhlIG51bWJlclxuICogb2Ygd2luZG93IHJlc2l6ZSBsaXN0ZW5lcnMgb24gdGhlIHBhZ2UpLiBBbHNvIGNvbmRpdGlvbmFsbHkgY2FsbGVkIGlmIGFcbiAqIG5lc3RlZCBgRXVpVGhlbWVQcm92aWRlcmAgZGVmaW5lcyBhIGBtb2RpZnkuYnJlYWtwb2ludGAgb3ZlcnJpZGVcbiAqL1xuZXhwb3J0IHZhciBDdXJyZW50RXVpQnJlYWtwb2ludFByb3ZpZGVyID0gZnVuY3Rpb24gQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIC8vIE9idGFpbiB0aGUgYnJlYWtwb2ludHMgbWFwIGZyb20gdGhlIEVVSSB0aGVtZVxuICB2YXIgX3VzZUV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKSxcbiAgICBicmVha3BvaW50cyA9IF91c2VFdWlUaGVtZS5ldWlUaGVtZS5icmVha3BvaW50O1xuXG4gIC8vIEVuc3VyZSB0aGUgYnJlYWtwb2ludHMgbWFwIGlzIHNvcnRlZCBmcm9tIGxhcmdlc3QgdmFsdWUgdG8gc21hbGxlc3RcbiAgdmFyIHNvcnRlZEJyZWFrcG9pbnRzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNvcnRNYXBCeUxhcmdlVG9TbWFsbFZhbHVlcyhicmVha3BvaW50cyk7XG4gIH0sIFticmVha3BvaW50c10pO1xuXG4gIC8vIEZpbmQgdGhlIGJyZWFrcG9pbnQgKGtleSkgd2hvc2UgdmFsdWUgaXMgPD0gd2luZG93V2lkdGggc3RhcnRpbmcgd2l0aCBsYXJnZXN0IGZpcnN0XG4gIHZhciBnZXRCcmVha3BvaW50ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHdpZHRoKSB7XG4gICAgcmV0dXJuIGtleXNPZihzb3J0ZWRCcmVha3BvaW50cykuZmluZChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gc29ydGVkQnJlYWtwb2ludHNba2V5XSA8PSB3aWR0aDtcbiAgICB9KTtcbiAgfSwgW3NvcnRlZEJyZWFrcG9pbnRzXSk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IGdldEJyZWFrcG9pbnQod2luZG93LmlubmVyV2lkdGgpIDogdW5kZWZpbmVkKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBjdXJyZW50QnJlYWtwb2ludCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0Q3VycmVudEJyZWFrcG9pbnQgPSBfdXNlU3RhdGUyWzFdO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBvbldpbmRvd1Jlc2l6ZSA9IHRocm90dGxlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldEN1cnJlbnRCcmVha3BvaW50KGdldEJyZWFrcG9pbnQod2luZG93LmlubmVyV2lkdGgpKTtcbiAgICB9LCA1MCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uV2luZG93UmVzaXplKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBvbldpbmRvd1Jlc2l6ZSk7XG4gICAgfTtcbiAgfSwgW2dldEJyZWFrcG9pbnRdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGN1cnJlbnRCcmVha3BvaW50XG4gIH0sIGNoaWxkcmVuKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgYXNzZXJ0TmV2ZXIgPSBmdW5jdGlvbiBhc3NlcnROZXZlcih4KSB7XG4gIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgdmFsdWUgXCIuY29uY2F0KHgpKTtcbn07XG5cbi8vIHV0aWxpdHkgdHlwZXM6XG4vKipcbiAqIFhPUiBmb3Igc29tZSBwcm9wZXJ0aWVzIGFwcGxpZWQgdG8gYSB0eXBlXG4gKiAoWE9SIGlzIG9uZSBvZiB0aGVzZSBidXQgbm90IGJvdGggb3IgbmVpdGhlcilcbiAqXG4gKiBVc2FnZTogT25lT2Y8dHlwZVRvRXh0ZW5kLCBvbmUgfCBidXQgfCBub3QgfCBtdWx0aXBsZSB8IG9mIHwgdGhlc2UgfCBhcmUgfCByZXF1aXJlZD5cbiAqXG4gKiBUbyByZXF1aXJlIGFyaWEtbGFiZWwgb3IgYXJpYS1sYWJlbGxlZGJ5IGJ1dCBub3QgYm90aFxuICogRXhhbXBsZTogT25lT2Y8VHlwZSwgJ2FyaWEtbGFiZWwnIHwgJ2FyaWEtbGFiZWxsZWRieSc+XG4gKi9cblxuLyoqXG4gKiBXcmFwcyBPYmplY3Qua2V5cyB3aXRoIHByb3BlciB0eXBlc2NyaXB0IGRlZmluaXRpb24gb2YgdGhlIHJlc3VsdGluZyBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24ga2V5c09mKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKTtcbn1cblxuLyoqXG4gKiBMaWtlIGBrZXlvZiB0eXBlb2ZgLCBidXQgZm9yIGdldHRpbmcgdmFsdWVzIGluc3RlYWQgb2Yga2V5c1xuICogVmFsdWVPZjx0eXBlb2Yge2tleTE6ICd2YWx1ZTEnLCBrZXkyOiAndmFsdWUyJ30+XG4gKiBSZXN1bHRzIGluIGAndmFsdWUxJyB8ICd2YWx1ZTInYFxuICovXG5cbi8vIFJldHVybnMgdGhlIHByb3BzIG9mIGEgZ2l2ZW4gSFRNTCBlbGVtZW50XG5cbi8vIFV0aWxpdHkgbWV0aG9kcyBmb3IgQXBwbHlDbGFzc0NvbXBvbmVudERlZmF1bHRzXG5cbi8qKlxuICogQmVjYXVzZSBvZiBob3cgVHlwZVNjcmlwdCdzIExpYnJhcnlNYW5hZ2VkQXR0cmlidXRlcyBpcyBkZXNpZ25lZCB0byBoYW5kbGUgZGVmYXVsdFByb3BzIChodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9yZWxlYXNlLW5vdGVzL3R5cGVzY3JpcHQtMy0wLmh0bWwjc3VwcG9ydC1mb3ItZGVmYXVsdHByb3BzLWluLWpzeClcbiAqIHdlIGNhbid0IGRpcmVjdGx5IGV4cG9ydCB0aGUgcHJvcHMgZGVmaW5pdGlvbiBhcyB0aGUgZGVmYXVsdGVkIHZhbHVlcyBhcmUgbm90IG1hZGUgb3B0aW9uYWwsXG4gKiBiZWNhdXNlIGl0IGlzbid0IHByb2Nlc3NlZCBieSBMaWJyYXJ5TWFuYWdlZEF0dHJpYnV0ZXMuIFRvIGdldCBhcm91bmQgdGhpcywgd2U6XG4gKiAtIHJlbW92ZSB0aGUgcHJvcHMgd2hpY2ggaGF2ZSBkZWZhdWx0IHZhbHVlcyBhcHBsaWVkXG4gKiAtIGV4cG9ydCAoUHJvcHMgLSBEZWZhdWx0cykgJiBQYXJ0aWFsPERlZmF1bHRzPlxuICovXG5cbi8vIGRlZmluaXRpb24gb2YgUHJvcHMsIG1hZGUgb3B0aW9uYWwsIHRoYXQgYXJlIGhhdmUga2V5cyBpbiBkZWZhdWx0UHJvcHNcblxuLypcbmh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjgzMzlcblByb2JsZW06IFBpY2sgYW5kIE9taXQgZG8gbm90IGRpc3RyaWJ1dGUgb3ZlciB1bmlvbiB0eXBlcywgd2hpY2ggbWFuaWZlc3RzIHdoZW5cbm9wdGlvbmFsIHZhbHVlcyBiZWNvbWUgcmVxdWlyZWQgYWZ0ZXIgYSBQaWNrIG9yIE9taXQgb3BlcmF0aW9uLiBUaGVzZVxuRGlzdHJpYnV0aXZlIGZvcm1zIGNvcnJlY3RseSBvcGVyYXRlIG9uIHVuaW9uIHR5cGVzLCBwcmVzZXJ2aW5nIG9wdGlvbmFsaXR5LlxuICovXG5cbi8qXG5UeXBlU2NyaXB0J3MgZGlzY3JpbWluYXRlZCB1bmlvbnMgYXJlIG92ZXJseSBwZXJtaXNzaXZlOiBhcyBsb25nIGFzIG9uZSB0eXBlIG9mIHRoZSB1bmlvbiBpcyBzYXRpc2ZpZWRcbnRoZSBvdGhlciB0eXBlcyBhcmUgbm90IHZhbGlkYXRlZCBhZ2FpbnN0LiBGb3IgZXhhbXBsZTpcblxudHlwZSBGb28gPSB7XG4gIHZhbHVlOiBzdHJpbmcsXG4gIGZvbzogc3RyaW5nXG59O1xudHlwZSBCYXIgPSB7XG4gIHZhbHVlOiBudW1iZXIsXG4gIGJhcjogc3RyaW5nXG59XG5mdW5jdGlvbiB3aGF0KHg6IEZvbyB8IEJhcikge1xuICByZXR1cm4geC52YWx1ZTtcbn1cblxuQXMgeW91IHdvdWxkIGV4cGVjdCAtXG5cbndoYXQoeyB2YWx1ZTogJ2FzZGYnLCBmb286ICdhc2RmJyB9KTsgLy8gZmluZVxud2hhdCh7IHZhbHVlOiA1LCBmb286ICdhc2RmJyB9KTsgLy8gZXJyb3JcbndoYXQoeyB2YWx1ZTogNSwgYmFyOiAnYXNkZicgfSk7IC8vIGZpbmVcbndoYXQoeyB2YWx1ZTogJ2FzZGYnLCBiYXI6ICdhc2RmJyB9KTsgLy8gZXJyb3JcblxuSG93ZXZlciwgaWYgRm9vIGlzIHNhdGlzZmllZCB0aGVuIHlvdSBjYW4gcGFzcyBhbnkgdmFsdWUgeW91IHdhbnQgdG8gQmFyJ3MgdW5pcXVlIHByb3BlcnRpZXM6XG53aGF0KHsgdmFsdWU6ICdhc2RmJywgZm9vOiAnYXNkZicsIGJhcjogZmFsc2UgfSkgLy8gd29ya3NcblxuVHlwZVNjcmlwdCBpcyBva2F5IHdpdGggdGhpcyBhcyBhIHR5cGUgZ3VhcmQgd291bGQgZGV0ZWN0IHRoZSBvYmplY3QgaXMgRm9vIGFuZCBwcmV2ZW50IGFjY2Vzc2luZyBgYmFyYC5cblVuZm9ydHVuYXRlbHkgdGhpcyBwcmV2ZW50cyBmZWVkYmFjayB0byB0aGUgdXNlciBhYm91dCBwb3RlbnRpYWxseSB1bmludGVudGlvbmFsIGVmZmVjdHMsIGZvciBleGFtcGxlOlxuXG5BIGNvbW1vbiBwYXR0ZXJuIGluIEVVSSBpcyB0byByZW5kZXIgc29tZXRoaW5nIGFzIGEgZGl2IE9SIGFzIGEgYnV0dG9uLCBkZXBlbmRpbmcgb24gaWYgYW4gb25DbGljayBwcm9wIGlzIHBhc3NlZC5cbnBhc3NpbmcgYWRkaXRpb25hbCBwcm9wcyBkb3duIHRocm91Z2ggYC4uLnJlc3RgLCB3aGljaCBjYW4gYmUgc3BlY2lmaWVkIGFzXG5cbnR5cGUgU3Bhbmxpa2UgPSBIVE1MQXR0cmlidXRlczxIVE1MU3BhbkVsZW1lbnQ+O1xudHlwZSBCdXR0b25saWtlID0geyBvbkNsaWNrOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MQnV0dG9uRWxlbWVudD4gfTsgLy8gb25DbGljayBpcyB0aGUgZGlzY3JpbWluYW50XG5SZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxTcGFubGlrZSB8IEJ1dHRvbmxpa2U+XG5cbkludGVybmFsbHksIHRoZSBjb21wb25lbnQgd291bGQgaGF2ZSBhIHR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgcHJvcHMgY29udGFpbnMgYG9uQ2xpY2tgIGFuZCByZXNvbHZlIHRvIEJ1dHRvbmxpa2UuXG5FeHRlcm5hbGx5LCBob3dldmVyLCB5b3UgY291bGQgdXNlIHRoZSBjb21wb25lbnQgYXNcblxuPENvbXBvbmVudCB2YWx1ZT1cImJ1enpcIi8+XG5cbmFuZCBubyBlcnJvciB3b3VsZCBvY2N1ciBhcyB0aGUgU3Bhbmxpa2UgdHlwZSBpcyBzYXRpc2ZpZWQgYW5kIHRoZSB0eXBlIGd1YXJkIHdvdWxkIHByZXZlbnQgYWNjZXNzaW5nIGJ1dHRvbiBhdHRyaWJ1dGVzLlxuVGhpcyBwcmV2ZW50cyBpbW1lZGlhdGUgZmVlZGJhY2sgdG8gdGhlIGRldmVsb3AsIGFuZCB3b3VsZCBhY3R1YWxseSBsZWFkIHRvIFJlYWN0IHdhcm5pbmdzIGFzIHRoZSBgdmFsdWVgIHByb3Agd291bGRcbnN0aWxsIHByb3BhZ2F0ZSBkb3duIHRvIHRoZSBzcGFuJ3MgcHJvcHMsIHdoaWNoIGlzIGludmFsaWQuIFRoZSBmb2xsb3dpbmcgdHdvIHV0aWxpdHkgdHlwZXMgcHJvdmlkZSBhIHNvbHV0aW9uIGZvclxuY3JlYXRpbmcgZXhjbHVzaXZlIHVuaW9uczpcblxuUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8RXhjbHVzaXZlVW5pb248U3Bhbmxpa2UsIEJ1dHRvbmxpa2U+PlxuICovXG5cbi8qKlxuICogUmV0dXJucyBtZW1iZXIga2V5cyBpbiBVIG5vdCBwcmVzZW50IGluIFQgc2V0IHRvIG5ldmVyXG4gKiBUID0geyAnb25lJywgJ3R3bycsICd0aHJlZScgfVxuICogVSA9IHsgJ3RocmVlJywgJ2ZvdXInLCAnZml2ZScgfVxuICogcmV0dXJucyB7ICdmb3VyJzogbmV2ZXIsICdmaXZlJzogbmV2ZXIgfVxuICovXG5cbi8qKlxuICogQWxsb3cgZWl0aGVyIFQgb3IgVSwgcHJldmVudGluZyBhbnkgYWRkaXRpb25hbCBrZXlzIG9mIHRoZSBvdGhlciB0eXBlIGZyb20gYmVpbmcgcHJlc2VudFxuICovXG5cbi8qKlxuICogRm9yIGNvbXBvbmVudHMgdGhhdCBjb25kaXRpb25hbGx5IHJlbmRlciA8YnV0dG9uPiBvciA8YT5cbiAqIENvbnZlbmllbmNlIHR5cGVzIGZvciBleHRlbmRpbmcgYmFzZSBwcm9wcyAoVCkgYW5kXG4gKiBlbGVtZW50LXNwZWNpZmljIHByb3BzIChQKSB3aXRoIHN0YW5kYXJkIGNsaWNrYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogVGhlc2Ugd2lsbCBsaWtlbHkgYmUgdXNlZCB0b2dldGhlciwgYWxvbmcgd2l0aCBgRXhjbHVzaXZlVW5pb25gOlxuICpcbiAqIHR5cGUgQW5jaG9yTGlrZSA9IFByb3BzRm9yQW5jaG9yPEJhc2VQcm9wcz5cbiAqIHR5cGUgQnV0dG9uTGlrZSA9IFByb3BzRm9yQnV0dG9uPEJhc2VQcm9wcz5cbiAqIHR5cGUgQ29tcG9uZW50UHJvcHMgPSBFeGNsdXNpdmVVbmlvbjxBbmNob3JMaWtlLCBCdXR0b25MaWtlPlxuICogY29uc3QgQ29tcG9uZW50OiBGdW5jdGlvbkNvbXBvbmVudDxDb21wb25lbnRQcm9wcz4gLi4uXG4gKi9cblxuLyoqXG4gKiBSZXBsYWNlcyBhbGwgcHJvcGVydGllcyBvbiBhbnkgdHlwZSBhcyBvcHRpb25hbCwgaW5jbHVkZXMgbmVzdGVkIHR5cGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbnRlcmZhY2UgUGVyc29uIHtcbiAqICBuYW1lOiBzdHJpbmc7XG4gKiAgYWdlPzogbnVtYmVyO1xuICogIHNwb3VzZTogUGVyc29uO1xuICogIGNoaWxkcmVuOiBQZXJzb25bXTtcbiAqIH1cbiAqIHR5cGUgUGFydGlhbFBlcnNvbiA9IFJlY3Vyc2l2ZVBhcnRpYWw8UGVyc29uPjtcbiAqIC8vIHJlc3VsdHMgaW5cbiAqIGludGVyZmFjZSBQYXJ0aWFsUGVyc29uIHtcbiAqICBuYW1lPzogc3RyaW5nO1xuICogIGFnZT86IG51bWJlcjtcbiAqICBzcG91c2U/OiBSZWN1cnNpdmVQYXJ0aWFsPFBlcnNvbj47XG4gKiAgY2hpbGRyZW4/OiBSZWN1cnNpdmVQYXJ0aWFsPFBlcnNvbj5bXVxuICogfVxuICogYGBgXG4gKi8iLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiwgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aVRoZW1lQ29udGV4dCwgRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQsIEV1aUNvbG9yTW9kZUNvbnRleHQsIGRlZmF1bHRDb21wdXRlZFRoZW1lLCBFdWlOZXN0ZWRUaGVtZUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgZW1pdEV1aVByb3ZpZGVyV2FybmluZyB9IGZyb20gJy4vd2FybmluZyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHByb3ZpZGVyTWVzc2FnZSA9IFwiYEV1aVByb3ZpZGVyYCBpcyBtaXNzaW5nIHdoaWNoIGNhbiByZXN1bHQgaW4gbmVnYXRpdmUgZWZmZWN0cy5cXG5XcmFwIHlvdXIgY29tcG9uZW50IGluIGBFdWlQcm92aWRlcmA6IGh0dHBzOi8vZWxhLnN0L2V1aXByb3ZpZGVyLlwiO1xuXG4vKipcbiAqIEhvb2sgZm9yIGZ1bmN0aW9uIGNvbXBvbmVudHNcbiAqL1xuXG5leHBvcnQgdmFyIHVzZUV1aVRoZW1lID0gZnVuY3Rpb24gdXNlRXVpVGhlbWUoKSB7XG4gIHZhciB0aGVtZSA9IHVzZUNvbnRleHQoRXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIGNvbG9yTW9kZSA9IHVzZUNvbnRleHQoRXVpQ29sb3JNb2RlQ29udGV4dCk7XG4gIHZhciBtb2RpZmljYXRpb25zID0gdXNlQ29udGV4dChFdWlNb2RpZmljYXRpb25zQ29udGV4dCk7XG4gIHZhciBpc0ZhbGxiYWNrID0gdGhlbWUgPT09IGRlZmF1bHRDb21wdXRlZFRoZW1lO1xuICBpZiAoaXNGYWxsYmFjaykge1xuICAgIGVtaXRFdWlQcm92aWRlcldhcm5pbmcocHJvdmlkZXJNZXNzYWdlKTtcbiAgfVxuICB2YXIgYXNzZW1ibGVkVGhlbWUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXVpVGhlbWU6IHRoZW1lLFxuICAgICAgY29sb3JNb2RlOiBjb2xvck1vZGUsXG4gICAgICBtb2RpZmljYXRpb25zOiBtb2RpZmljYXRpb25zXG4gICAgfTtcbiAgfSwgW3RoZW1lLCBjb2xvck1vZGUsIG1vZGlmaWNhdGlvbnNdKTtcbiAgcmV0dXJuIGFzc2VtYmxlZFRoZW1lO1xufTtcblxuLyoqXG4gKiBIT0MgZm9yIGNsYXNzIGNvbXBvbmVudHNcbiAqL1xuXG4vLyBQcm92aWRlIHRoZSBjb21wb25lbnQgcHJvcHMgaW50ZXJmYWNlIGFzIHRoZSBnZW5lcmljIHRvIGFsbG93IHRoZSBkb2NzIHByb3BzIHRhYmxlIHRvIHBvcHVsYXRlLlxuLy8gZS5nLiwgYGNvbnN0IEV1aUNvbXBvbmVudCA9IHdpdGhFdWlUaGVtZTxFdWlDb21wb25lbnRQcm9wcz4oX0V1aUNvbXBvbmVudClgXG5leHBvcnQgdmFyIHdpdGhFdWlUaGVtZSA9IGZ1bmN0aW9uIHdpdGhFdWlUaGVtZShDb21wb25lbnQpIHtcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudFdpdGhUaGVtZSc7XG4gIHZhciBSZW5kZXIgPSBmdW5jdGlvbiBSZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07XG4gIHZhciBXaXRoRXVpVGhlbWUgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihSZW5kZXIpO1xuICBXaXRoRXVpVGhlbWUuZGlzcGxheU5hbWUgPSBjb21wb25lbnROYW1lO1xuICByZXR1cm4gV2l0aEV1aVRoZW1lO1xufTtcblxuLyoqXG4gKiBSZW5kZXIgcHJvcCBhbHRlcm5hdGl2ZSBmb3IgY29tcGxleCBjbGFzcyBjb21wb25lbnRzXG4gKiBNb3N0IHVzZWZ1bCBmb3Igc2NlbmFyaW9zIHdoZXJlIGEgSE9DIG1heSBpbnRlcmZlcmUgd2l0aCB0eXBpbmdcbiAqL1xuZXhwb3J0IHZhciBSZW5kZXJXaXRoRXVpVGhlbWUgPSBmdW5jdGlvbiBSZW5kZXJXaXRoRXVpVGhlbWUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgdGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gY2hpbGRyZW4odGhlbWUpO1xufTtcblxuLyoqXG4gKiBNaW5vciBzeW50YWN0aWNhbCBzdWdhciBob29rIGZvciB0aGVtZSBDU1MgdmFyaWFibGVzLlxuICogUHJpbWFyaWx5IG1lYW50IGZvciBpbnRlcm5hbCBFVUkgdXNhZ2UuXG4gKi9cbmV4cG9ydCB2YXIgdXNlRXVpVGhlbWVDU1NWYXJpYWJsZXMgPSBmdW5jdGlvbiB1c2VFdWlUaGVtZUNTU1ZhcmlhYmxlcygpIHtcbiAgdmFyIF91c2VDb250ZXh0ID0gdXNlQ29udGV4dChFdWlOZXN0ZWRUaGVtZUNvbnRleHQpLFxuICAgIHNldEdsb2JhbENTU1ZhcmlhYmxlcyA9IF91c2VDb250ZXh0LnNldEdsb2JhbENTU1ZhcmlhYmxlcyxcbiAgICBnbG9iYWxDU1NWYXJpYWJsZXMgPSBfdXNlQ29udGV4dC5nbG9iYWxDU1NWYXJpYWJsZXMsXG4gICAgc2V0TmVhcmVzdFRoZW1lQ1NTVmFyaWFibGVzID0gX3VzZUNvbnRleHQuc2V0TmVhcmVzdFRoZW1lQ1NTVmFyaWFibGVzLFxuICAgIHRoZW1lQ1NTVmFyaWFibGVzID0gX3VzZUNvbnRleHQudGhlbWVDU1NWYXJpYWJsZXM7XG4gIHJldHVybiB7XG4gICAgc2V0R2xvYmFsQ1NTVmFyaWFibGVzOiBzZXRHbG9iYWxDU1NWYXJpYWJsZXMsXG4gICAgZ2xvYmFsQ1NTVmFyaWFibGVzOiBnbG9iYWxDU1NWYXJpYWJsZXMsXG4gICAgc2V0TmVhcmVzdFRoZW1lQ1NTVmFyaWFibGVzOiBzZXROZWFyZXN0VGhlbWVDU1NWYXJpYWJsZXMsXG4gICAgdGhlbWVDU1NWYXJpYWJsZXM6IHRoZW1lQ1NTVmFyaWFibGVzXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpVGhlbWVBbXN0ZXJkYW0gfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL3RoZW1lJztcbmltcG9ydCB7IERFRkFVTFRfQ09MT1JfTU9ERSwgZ2V0Q29tcHV0ZWQgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB2YXIgRXVpU3lzdGVtQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KEV1aVRoZW1lQW1zdGVyZGFtKTtcbmV4cG9ydCB2YXIgRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh7fSk7XG5leHBvcnQgdmFyIEV1aUNvbG9yTW9kZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChERUZBVUxUX0NPTE9SX01PREUpO1xuZXhwb3J0IHZhciBkZWZhdWx0Q29tcHV0ZWRUaGVtZSA9IGdldENvbXB1dGVkKEV1aVRoZW1lQW1zdGVyZGFtLCB7fSwgREVGQVVMVF9DT0xPUl9NT0RFKTtcbmV4cG9ydCB2YXIgRXVpVGhlbWVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoZGVmYXVsdENvbXB1dGVkVGhlbWUpO1xuZXhwb3J0IHZhciBFdWlOZXN0ZWRUaGVtZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh7XG4gIGlzR2xvYmFsVGhlbWU6IHRydWUsXG4gIGhhc0RpZmZlcmVudENvbG9yRnJvbUdsb2JhbFRoZW1lOiBmYWxzZSxcbiAgYm9keUNvbG9yOiAnJyxcbiAgY29sb3JDbGFzc05hbWU6ICcnLFxuICBzZXRHbG9iYWxDU1NWYXJpYWJsZXM6IGZ1bmN0aW9uIHNldEdsb2JhbENTU1ZhcmlhYmxlcygpIHt9LFxuICBzZXROZWFyZXN0VGhlbWVDU1NWYXJpYWJsZXM6IGZ1bmN0aW9uIHNldE5lYXJlc3RUaGVtZUNTU1ZhcmlhYmxlcygpIHt9XG59KTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciBDT0xPUl9NT0RFU19TVEFOREFSRCA9IHtcbiAgbGlnaHQ6ICdMSUdIVCcsXG4gIGRhcms6ICdEQVJLJ1xufTtcbmV4cG9ydCB2YXIgQ09MT1JfTU9ERVNfSU5WRVJTRSA9ICdJTlZFUlNFJzsiLCAiZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBDT0xPUl9NT0RFU19TVEFOREFSRCwgQ09MT1JfTU9ERVNfSU5WRVJTRSB9IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IHZhciBERUZBVUxUX0NPTE9SX01PREUgPSBDT0xPUl9NT0RFU19TVEFOREFSRC5saWdodDtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHBhcmFtZXRlciBpcyBhbiBvYmplY3RcbiAqIEBwYXJhbSB7YW55fSBvYmogLSBBbnl0aGluZ1xuICovXG52YXIgaXNPYmplY3QgPSBmdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBfdHlwZW9mKG9iaikgPT09ICdvYmplY3QnO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGNvbG9yIG1vZGUgaXMgYGludmVyc2VgXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JNb2RlIC0gYGxpZ2h0YCwgYGRhcmtgLCBvciBgaW52ZXJzZWBcbiAqL1xuZXhwb3J0IHZhciBpc0ludmVyc2VDb2xvck1vZGUgPSBmdW5jdGlvbiBpc0ludmVyc2VDb2xvck1vZGUoY29sb3JNb2RlKSB7XG4gIHJldHVybiBjb2xvck1vZGUgPT09IENPTE9SX01PREVTX0lOVkVSU0U7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbG9yIG1vZGUgY29uZmlndXJlZCBpbiB0aGUgY3VycmVudCBFdWlUaGVtZVByb3ZpZGVyLlxuICogUmV0dXJucyB0aGUgcGFyZW50IGNvbG9yIG1vZGUgaWYgbm9uZSBpcyBleHBsaWNpdHkgc2V0LlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yTW9kZSAtIGBsaWdodGAsIGBkYXJrYCwgb3IgYGludmVyc2VgXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50Q29sb3JNb2RlIC0gYExJR0hUYCBvciBgREFSS2A7IHVzZWQgYXMgdGhlIGZhbGxiYWNrXG4gKi9cbmV4cG9ydCB2YXIgZ2V0Q29sb3JNb2RlID0gZnVuY3Rpb24gZ2V0Q29sb3JNb2RlKGNvbG9yTW9kZSwgcGFyZW50Q29sb3JNb2RlKSB7XG4gIGlmIChjb2xvck1vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiBwYXJlbnRDb2xvck1vZGUgfHwgREVGQVVMVF9DT0xPUl9NT0RFO1xuICB9XG4gIHZhciBtb2RlID0gY29sb3JNb2RlLnRvVXBwZXJDYXNlKCk7XG4gIGlmIChpc0ludmVyc2VDb2xvck1vZGUobW9kZSkpIHtcbiAgICByZXR1cm4gcGFyZW50Q29sb3JNb2RlID09PSBDT0xPUl9NT0RFU19TVEFOREFSRC5kYXJrIHx8IHBhcmVudENvbG9yTW9kZSA9PT0gdW5kZWZpbmVkID8gQ09MT1JfTU9ERVNfU1RBTkRBUkQubGlnaHQgOiBDT0xPUl9NT0RFU19TVEFOREFSRC5kYXJrO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtb2RlO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSB2YWx1ZSBhdCBhIGdpdmVuIHBhdGggb24gYW4gb2JqZWN0LlxuICogSWYgYGNvbG9yTW9kZWAgaXMgcHJvdmlkZWQsIHdpbGwgc2NvcGUgdGhlIHZhbHVlIHRvIHRoZSBhcHByb3ByaWF0ZSBjb2xvciBtb2RlIGtleSAoTElHSFRcXERBUkspXG4gKiBAcGFyYW0ge29iamVjdH0gbW9kZWwgLSBPYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBfcGF0aCAtIERvdC1ub3RhdGVkIHN0cmluZyB0byBhIHBhdGggb24gdGhlIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yTW9kZSAtIGBsaWdodGAgb3IgYGRhcmtgXG4gKi9cbmV4cG9ydCB2YXIgZ2V0T24gPSBmdW5jdGlvbiBnZXRPbihtb2RlbCwgX3BhdGgsIGNvbG9yTW9kZSkge1xuICB2YXIgcGF0aCA9IF9wYXRoLnNwbGl0KCcuJyk7XG4gIHZhciBub2RlID0gbW9kZWw7XG4gIHdoaWxlIChwYXRoLmxlbmd0aCkge1xuICAgIHZhciBzZWdtZW50ID0gcGF0aC5zaGlmdCgpO1xuICAgIGlmIChub2RlLmhhc093blByb3BlcnR5KHNlZ21lbnQpID09PSBmYWxzZSkge1xuICAgICAgaWYgKGNvbG9yTW9kZSAmJiBub2RlLmhhc093blByb3BlcnR5KGNvbG9yTW9kZSkgPT09IHRydWUgJiYgbm9kZVtjb2xvck1vZGVdLmhhc093blByb3BlcnR5KHNlZ21lbnQpID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChub2RlW2NvbG9yTW9kZV1bc2VnbWVudF0gaW5zdGFuY2VvZiBDb21wdXRlZCkge1xuICAgICAgICAgIG5vZGUgPSBub2RlW2NvbG9yTW9kZV1bc2VnbWVudF0uZ2V0VmFsdWUobnVsbCwgbnVsbCwgbm9kZSwgY29sb3JNb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlID0gbm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobm9kZVtzZWdtZW50XSBpbnN0YW5jZW9mIENvbXB1dGVkKSB7XG4gICAgICAgIG5vZGUgPSBub2RlW3NlZ21lbnRdLmdldFZhbHVlKG51bGwsIG51bGwsIG5vZGUsIGNvbG9yTW9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbm9kZVtzZWdtZW50XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59O1xuXG4vKipcbiAqIFNldHMgYSB2YWx1ZSBhdCBhIGdpdmVuIHBhdGggb24gYW4gb2JqZWN0LlxuICogQHBhcmFtIHtvYmplY3R9IG1vZGVsIC0gT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gX3BhdGggLSBEb3Qtbm90YXRlZCBzdHJpbmcgdG8gYSBwYXRoIG9uIHRoZSBvYmplY3RcbiAqIEBwYXJhbSB7YW55fSBzdHJpbmcgLSAgVGhlIHZhbHVlIHRvIHNldFxuICovXG5leHBvcnQgdmFyIHNldE9uID0gZnVuY3Rpb24gc2V0T24obW9kZWwsIF9wYXRoLCB2YWx1ZSkge1xuICB2YXIgcGF0aCA9IF9wYXRoLnNwbGl0KCcuJyk7XG4gIHZhciBwcm9wZXJ0eU5hbWUgPSBwYXRoLnBvcCgpO1xuICB2YXIgbm9kZSA9IG1vZGVsO1xuICB3aGlsZSAocGF0aC5sZW5ndGgpIHtcbiAgICB2YXIgc2VnbWVudCA9IHBhdGguc2hpZnQoKTtcbiAgICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIG5vZGVbc2VnbWVudF0gPSB7fTtcbiAgICB9XG4gICAgbm9kZSA9IG5vZGVbc2VnbWVudF07XG4gIH1cbiAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xhc3MgdG8gc3RvcmUgdGhlIGBjb21wdXRlcmAgbWV0aG9kIGFuZCBpdHMgZXZlbnR1YWwgcGFyYW1ldGVycy5cbiAqIEFsbG93cyBmb3Igb24tZGVtYW5kIGNvbXB1dGF0aW9uIHdpdGggdXAtdG8tZGF0ZSBwYXJhbWV0ZXJzIHZpYSBgZ2V0VmFsdWVgIG1ldGhvZC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcHV0ZXIgLSBGdW5jdGlvbiB0byBiZSBjb21wdXRlZFxuICogQHBhcmFtIHtzdHJpbmcgfCBhcnJheX0gZGVwZW5kZW5jaWVzIC0gRGVwZW5kZW5jaWVzIHBhc3NlZCB0byB0aGUgYGNvbXB1dGVyYCBhcyBwYXJhbWV0ZXJzXG4gKi9cbmV4cG9ydCB2YXIgQ29tcHV0ZWQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDb21wdXRlZChjb21wdXRlcikge1xuICAgIHZhciBkZXBlbmRlbmNpZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb21wdXRlZCk7XG4gICAgdGhpcy5jb21wdXRlciA9IGNvbXB1dGVyO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBgY29tcHV0ZXJgIG1ldGhvZCB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0aGVtZVxuICAgKiBieSB0YWtpbmcgaW50byBhY2NvdW50IHByZXZpb3VzbHkgY29tcHV0ZWQgdmFsdWVzIGFuZCBtb2RpZmljYXRpb25zLlxuICAgKiBAcGFyYW0ge1Byb3h5IHwgb2JqZWN0fSBiYXNlIC0gQ29tcHV0ZWQgb3IgdW5jb21wdXRlZCB0aGVtZVxuICAgKiBAcGFyYW0ge1Byb3h5IHwgb2JqZWN0fSBtb2RpZmljYXRpb25zIC0gVGhlbWUgdmFsdWUgb3ZlcnJpZGVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSB3b3JraW5nIC0gUGFydGlhbGx5IGNvbXB1dGVkIHRoZW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICAgKi9cbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhDb21wdXRlZCwgW3tcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoYmFzZSkge1xuICAgICAgdmFyIG1vZGlmaWNhdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgdmFyIHdvcmtpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBjb2xvck1vZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmICghdGhpcy5kZXBlbmRlbmNpZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXB1dGVyKHdvcmtpbmcpO1xuICAgICAgfVxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuZGVwZW5kZW5jaWVzKSkge1xuICAgICAgICB2YXIgX3JlZiwgX2dldE9uO1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlcigoX3JlZiA9IChfZ2V0T24gPSBnZXRPbih3b3JraW5nLCB0aGlzLmRlcGVuZGVuY2llcykpICE9PSBudWxsICYmIF9nZXRPbiAhPT0gdm9pZCAwID8gX2dldE9uIDogZ2V0T24obW9kaWZpY2F0aW9ucywgdGhpcy5kZXBlbmRlbmNpZXMsIGNvbG9yTW9kZSkpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBnZXRPbihiYXNlLCB0aGlzLmRlcGVuZGVuY2llcywgY29sb3JNb2RlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jb21wdXRlcih0aGlzLmRlcGVuZGVuY2llcy5tYXAoZnVuY3Rpb24gKGRlcGVuZGVuY3kpIHtcbiAgICAgICAgdmFyIF9yZWYyLCBfZ2V0T24yO1xuICAgICAgICByZXR1cm4gKF9yZWYyID0gKF9nZXRPbjIgPSBnZXRPbih3b3JraW5nLCBkZXBlbmRlbmN5KSkgIT09IG51bGwgJiYgX2dldE9uMiAhPT0gdm9pZCAwID8gX2dldE9uMiA6IGdldE9uKG1vZGlmaWNhdGlvbnMsIGRlcGVuZGVuY3ksIGNvbG9yTW9kZSkpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IGdldE9uKGJhc2UsIGRlcGVuZGVuY3ksIGNvbG9yTW9kZSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG59KCk7XG5cbi8qKlxuICogUmV0dXJucyBhIENsYXNzIChgQ29tcHV0ZWRgKSB0aGF0IHN0b3JlcyB0aGUgYXJiaXRyYXJ5IGNvbXB1dGVyIG1ldGhvZFxuICogYW5kIHJlZmVyZW5jZXMgdG8gaXRzIG9wdGlvbmFsIGRlcGVuZGVjaWVzLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcHV0ZXIgLSBBcmJpdHJhcnkgbWV0aG9kIHRvIGJlIGNhbGxlZCBhdCBjb21wdXRlIHRpbWUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IGFycmF5fSBkZXBlbmRlbmNpZXMgLSBWYWx1ZXMgdGhhdCB3aWxsIGJlIHByb3ZpZGVkIHRvIGBjb21wdXRlcmAgYXQgY29tcHV0ZSB0aW1lLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZChjb21wLCBkZXApIHtcbiAgcmV0dXJuIG5ldyBDb21wdXRlZChjb21wLCBkZXApO1xufVxuXG4vKipcbiAqIFRha2VzIGFuIHVuY29tcHV0ZWQgdGhlbWUsIGFuZCBjb21wdXRlcyBhbmQgcmV0dXJucyBhbGwgdmFsdWVzIHRha2luZ1xuICogaW50byBjb25zaWRlcmF0aW9uIHZhbHVlIG92ZXJyaWRlcyBhbmQgY29uZmlndXJlZCBjb2xvciBtb2RlLlxuICogT3ZlcnJpZGVzIHRha2UgcHJlY2VkZW5jZSwgYW5kIG9ubHkgdmFsdWVzIGluIHRoZSBjdXJyZW50IGNvbG9yIG1vZGVcbiAqIGFyZSBjb21wdXRlZCBhbmQgcmV0dXJuZWQuXG4gKiBAcGFyYW0ge1Byb3h5fSBiYXNlIC0gT2JqZWN0IHRvIHRyYW5zZm9ybSBpbnRvIFByb3h5XG4gKiBAcGFyYW0ge1Byb3h5IHwgb2JqZWN0fSBvdmVyIC0gVW5pcXVlIGlkZW50aWZpZXIgb3IgbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yTW9kZSAtIGBsaWdodGAgb3IgYGRhcmtgXG4gKi9cbmV4cG9ydCB2YXIgZ2V0Q29tcHV0ZWQgPSBmdW5jdGlvbiBnZXRDb21wdXRlZChiYXNlLCBvdmVyLCBjb2xvck1vZGUpIHtcbiAgdmFyIG91dHB1dCA9IHtcbiAgICB0aGVtZU5hbWU6IGJhc2Uua2V5XG4gIH07XG4gIGZ1bmN0aW9uIGxvb3AoYmFzZSwgb3Zlcikge1xuICAgIHZhciBjaGVja0V4aXN0aW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgICB2YXIgcGF0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzID8gYXJndW1lbnRzWzNdIDogdW5kZWZpbmVkO1xuICAgIE9iamVjdC5rZXlzKGJhc2UpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIG5ld1BhdGggPSBwYXRoID8gXCJcIi5jb25jYXQocGF0aCwgXCIuXCIpLmNvbmNhdChrZXkpIDogXCJcIi5jb25jYXQoa2V5KTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGtleWAgaXMgbm90IG5lY2Vzc2FyaWx5IGEgY29sb3JNb2RlIGtleVxuICAgICAgaWYgKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LnZhbHVlcyhDT0xPUl9NT0RFU19TVEFOREFSRCkpLCBbY29sb3JNb2RlXSkuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBpZiAoa2V5ICE9PSBjb2xvck1vZGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGNvbG9yTW9kZVNlZ21lbnQgPSBuZXcgUmVnRXhwKFwiKFxcXFwuXCIuY29uY2F0KGNvbG9yTW9kZSwgXCJcXFxcYil8KFxcXFxiXCIpLmNvbmNhdChjb2xvck1vZGUsIFwiXFxcXC4pXCIpKTtcbiAgICAgICAgICBuZXdQYXRoID0gbmV3UGF0aC5yZXBsYWNlKGNvbG9yTW9kZVNlZ21lbnQsICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGV4aXN0aW5nID0gY2hlY2tFeGlzdGluZyAmJiBnZXRPbihvdXRwdXQsIG5ld1BhdGgpO1xuICAgICAgaWYgKCFleGlzdGluZyB8fCBpc09iamVjdChleGlzdGluZykpIHtcbiAgICAgICAgdmFyIGJhc2VWYWx1ZSA9IGJhc2Vba2V5XSBpbnN0YW5jZW9mIENvbXB1dGVkID8gYmFzZVtrZXldLmdldFZhbHVlKGJhc2Uucm9vdCwgb3Zlci5yb290LCBvdXRwdXQsIGNvbG9yTW9kZSkgOiBiYXNlW2tleV07XG4gICAgICAgIHZhciBvdmVyVmFsdWUgPSBvdmVyW2tleV0gaW5zdGFuY2VvZiBDb21wdXRlZCA/IG92ZXJba2V5XS5nZXRWYWx1ZShiYXNlLnJvb3QsIG92ZXIucm9vdCwgb3V0cHV0LCBjb2xvck1vZGUpIDogb3ZlcltrZXldO1xuICAgICAgICBpZiAoaXNPYmplY3QoYmFzZVZhbHVlKSAmJiAhQXJyYXkuaXNBcnJheShiYXNlVmFsdWUpKSB7XG4gICAgICAgICAgbG9vcChiYXNlVmFsdWUsIG92ZXJWYWx1ZSAhPT0gbnVsbCAmJiBvdmVyVmFsdWUgIT09IHZvaWQgMCA/IG92ZXJWYWx1ZSA6IHt9LCBjaGVja0V4aXN0aW5nLCBuZXdQYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRPbihvdXRwdXQsIG5ld1BhdGgsIG92ZXJWYWx1ZSAhPT0gbnVsbCAmJiBvdmVyVmFsdWUgIT09IHZvaWQgMCA/IG92ZXJWYWx1ZSA6IGJhc2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvLyBDb21wdXRlIHN0YW5kYXJkIHRoZW1lIHZhbHVlcyBhbmQgYXBwbHkgb3ZlcnJpZGVzXG4gIGxvb3AoYmFzZSwgb3Zlcik7XG4gIC8vIENvbXB1dGUgYW5kIGFwcGx5IGV4dGVuc2lvbiB2YWx1ZXMgb25seVxuICBsb29wKG92ZXIsIHt9LCB0cnVlKTtcbiAgcmV0dXJuIG91dHB1dDtcbn07XG5cbi8qKlxuICogQnVpbGRzIGEgUHJveHkgd2l0aCBhIGN1c3RvbSBgaGFuZGxlcmAgZGVzaWduZWQgdG8gc2VsZi1yZWZlcmVuY2UgdmFsdWVzXG4gKiBhbmQgcHJldmVudCBhcmJpdHJhcnkgdmFsdWUgb3ZlcnJpZGVzLlxuICogQHBhcmFtIHtvYmplY3R9IG1vZGVsIC0gT2JqZWN0IHRvIHRyYW5zZm9ybSBpbnRvIFByb3h5XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVW5pcXVlIGlkZW50aWZpZXIgb3IgbmFtZVxuICovXG5leHBvcnQgdmFyIGJ1aWxkVGhlbWUgPSBmdW5jdGlvbiBidWlsZFRoZW1lKG1vZGVsLCBrZXkpIHtcbiAgdmFyIGhhbmRsZXIgPSB7XG4gICAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0Lm1vZGVsKTtcbiAgICB9LFxuICAgIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkge1xuICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0Lm1vZGVsLCBwcm90b3R5cGUpO1xuICAgIH0sXG4gICAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KTtcbiAgICB9LFxuICAgIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldC5tb2RlbCk7XG4gICAgfSxcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldC5tb2RlbCwga2V5KTtcbiAgICB9LFxuICAgIGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCBhdHRyaWJ1dGVzKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQubW9kZWwsIHByb3BlcnR5LCBhdHRyaWJ1dGVzKTtcbiAgICB9LFxuICAgIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0Lmhhcyh0YXJnZXQubW9kZWwsIHByb3BlcnR5KTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KF90YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICBpZiAocHJvcGVydHkgPT09ICdrZXknKSB7XG4gICAgICAgIHJldHVybiBfdGFyZ2V0W3Byb3BlcnR5XTtcbiAgICAgIH1cblxuICAgICAgLy8gcHJldmVudCBTYWZhcmkgZnJvbSBsb2NraW5nIHVwIHdoZW4gdGhlIHByb3h5IGlzIHVzZWQgaW4gZGV2IHRvb2xzXG4gICAgICAvLyBhcyBpdCBkb2Vzbid0IHN1cHBvcnQgZ2V0UHJvdG90eXBlT2ZcbiAgICAgIGlmIChwcm9wZXJ0eSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB7fTtcbiAgICAgIHZhciB0YXJnZXQgPSBwcm9wZXJ0eSA9PT0gJ3Jvb3QnID8gX3RhcmdldCA6IF90YXJnZXQubW9kZWwgfHwgX3RhcmdldDtcbiAgICAgIC8vIEB0cy1pZ25vcmUgYHN0cmluZ2AgaW5kZXggc2lnbmF0dXJlXG4gICAgICB2YXIgdmFsdWUgPSB0YXJnZXRbcHJvcGVydHldO1xuICAgICAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh7XG4gICAgICAgICAgbW9kZWw6IHZhbHVlLFxuICAgICAgICAgIHJvb3Q6IF90YXJnZXQucm9vdCxcbiAgICAgICAgICBrZXk6IFwiX1wiLmNvbmNhdChfdGFyZ2V0LmtleSlcbiAgICAgICAgfSwgaGFuZGxlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh0YXJnZXQpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgb3duS2V5czogZnVuY3Rpb24gb3duS2V5cyh0YXJnZXQpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXModGFyZ2V0Lm1vZGVsKTtcbiAgICB9LFxuICAgIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSxcbiAgICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdCh0YXJnZXQpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICB9O1xuICB2YXIgdGhlbWVQcm94eSA9IG5ldyBQcm94eSh7XG4gICAgbW9kZWw6IG1vZGVsLFxuICAgIHJvb3Q6IG1vZGVsLFxuICAgIGtleToga2V5XG4gIH0sIGhhbmRsZXIpO1xuICByZXR1cm4gdGhlbWVQcm94eTtcbn07XG5cbi8qKlxuICogRGVlcGx5IG1lcmdlcyB0d28gb2JqZWN0cywgdXNpbmcgYHNvdXJjZWAgdmFsdWVzIHdoZW5ldmVyIHBvc3NpYmxlLlxuICogQHBhcmFtIHtvYmplY3R9IF90YXJnZXQgLSBPYmplY3Qgd2l0aCBmYWxsYmFjayB2YWx1ZXNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzb3VyY2UgLSBPYmplY3Qgd2l0aCBkZXNpcmVkIHZhbHVlc1xuICovXG5leHBvcnQgdmFyIG1lcmdlRGVlcCA9IGZ1bmN0aW9uIG1lcmdlRGVlcChfdGFyZ2V0KSB7XG4gIHZhciBzb3VyY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgdGFyZ2V0ID0gX29iamVjdFNwcmVhZCh7fSwgX3RhcmdldCk7XG4gIGlmICghaXNPYmplY3QodGFyZ2V0KSB8fCAhaXNPYmplY3Qoc291cmNlKSkge1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cbiAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdGFyZ2V0VmFsdWUgPSB0YXJnZXRba2V5XTtcbiAgICB2YXIgc291cmNlVmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAoaXNPYmplY3QodGFyZ2V0VmFsdWUpICYmIGlzT2JqZWN0KHNvdXJjZVZhbHVlKSkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBtZXJnZURlZXAoX29iamVjdFNwcmVhZCh7fSwgdGFyZ2V0VmFsdWUpLCBfb2JqZWN0U3ByZWFkKHt9LCBzb3VyY2VWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0YXJnZXQ7XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGlmIHRoZSBzcGVjaWZpZWQgY29sb3IgaXMgXCJkYXJrXCIsIHdoaWNoIHVzdWFsbHkgbWVhbnNcbiAqIHlvdSBuZWVkIGxpZ2h0IHRleHQgaWYgeW91IHVzZSBpdCBhcyBhIGJhY2tncm91bmQgY29sb3IgdG8gZnVsZmlsbCBXQ0FHIGNvbnRyYXN0XG4gKiByZXF1aXJlbWVudC5cbiAqIFRoZSBjb2xvciBtdXN0IGJlIHNwZWNpZmllZCB2aWEgaXRzIHJlZCwgZ3JlZW4gYW5kIGJsdWUgdmFsdWUgaW4gdGhlIHJhbmdlIG9mXG4gKiAwIHRvIDI1NS5cbiAqIFRoZSBmb3JtdWxhIGlzIGJhc2VkIG9uIHRoaXMgU3RhY2tvdmVyZmxvdyBhbnN3ZXI6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTQzMDIzXG4gKiB3aGljaCBpdHNlbGYgaXMgYmFzZWQgdXBvbiB0aGUgV0NBRyByZWNvbW1lbmRhdGlvbiBmb3IgY29sb3IgY29udHJhc3QuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHJlZCBUaGUgcmVkIGNvbXBvbmVudCBpbiB0aGUgcmFuZ2UgMCB0byAyNTVcbiAqIEBwYXJhbSB7bnVtYmVyfSBncmVlbiBUaGUgZ3JlZW4gY29tcG9uZW50IGluIHRoZSByYW5nZSAwIHRvIDI1NVxuICogQHBhcmFtIHtudW1iZXJ9IGJsdWUgVGhlIGJsdWUgY29tcG9uZW50IGluIHRoZSByYW5nZSAwIHRvIDI1NVxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbG9yIGlzIGRhcmssIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29sb3JEYXJrKHJlZCwgZ3JlZW4sIGJsdWUpIHtcbiAgdmFyIF9tYXAkbWFwID0gW3JlZCwgZ3JlZW4sIGJsdWVdLm1hcChmdW5jdGlvbiAoYykge1xuICAgICAgcmV0dXJuIGMgLyAyNTUuMDtcbiAgICB9KS5tYXAoZnVuY3Rpb24gKGMpIHtcbiAgICAgIHJldHVybiBjIDw9IDAuMDM5MjggPyBjIC8gMTIuOTIgOiBNYXRoLnBvdygoYyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIH0pLFxuICAgIF9tYXAkbWFwMiA9IF9zbGljZWRUb0FycmF5KF9tYXAkbWFwLCAzKSxcbiAgICByID0gX21hcCRtYXAyWzBdLFxuICAgIGcgPSBfbWFwJG1hcDJbMV0sXG4gICAgYiA9IF9tYXAkbWFwMlsyXTtcbiAgdmFyIGx1bWluYW5jZSA9IDAuMjEyNiAqIHIgKyAwLjcxNTIgKiBnICsgMC4wNzIyICogYjtcbiAgcmV0dXJuIGx1bWluYW5jZSA8PSAwLjE3OTtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRIZXgoaGV4KSB7XG4gIHJldHVybiAvKF4jWzAtOUEtRl17Nn0kKXwoXiNbMC05QS1GXXszfSQpL2kudGVzdChoZXgpO1xufSIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIENvbnZlcnQgaGV4YWRlY2ltYWwgY29sb3IgaW50byBhbiBhcnJheSBvZiBSR0IgaW50ZWdlciB2YWx1ZXNcbi8vIE1vZGlmaWVkIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTYyMzgzOC9yZ2ItdG8taGV4LWFuZC1oZXgtdG8tcmdiXG5cbmV4cG9ydCBmdW5jdGlvbiBoZXhUb1JnYihoZXgpIHtcbiAgLy8gRXhwYW5kIHNob3J0aGFuZCBmb3JtIChlLmcuIFwiMDNGXCIpIHRvIGZ1bGwgZm9ybSAoZS5nLiBcIjAwMzNGRlwiKVxuICB2YXIgc2hvcnRoYW5kUmVnZXggPSAvXiM/KFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pJC9pO1xuICBoZXggPSBoZXgucmVwbGFjZShzaG9ydGhhbmRSZWdleCwgZnVuY3Rpb24gKG0sIHIxLCBnMSwgYjEpIHtcbiAgICByZXR1cm4gcjEgKyByMSArIGcxICsgZzEgKyBiMSArIGIxO1xuICB9KTtcbiAgdmFyIHJlc3VsdCA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2kuZXhlYyhoZXgpO1xuICBpZiAocmVzdWx0KSB7XG4gICAgdmFyIF9yZXN1bHQgPSBfc2xpY2VkVG9BcnJheShyZXN1bHQsIDQpLFxuICAgICAgciA9IF9yZXN1bHRbMV0sXG4gICAgICBnID0gX3Jlc3VsdFsyXSxcbiAgICAgIGIgPSBfcmVzdWx0WzNdO1xuICAgIHJldHVybiBbcGFyc2VJbnQociwgMTYpLCBwYXJzZUludChnLCAxNiksIHBhcnNlSW50KGIsIDE2KV07XG4gIH1cblxuICAvLyBmYWxsYmFjayB0byBwcmV2ZW50IGVycm9yc1xuICByZXR1cm4gWzAsIDAsIDBdO1xufSIsICJpbXBvcnQgeyBtaW4sIG1heCB9IGZyb20gJy4vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoeCwgbG93ID0gMCwgaGlnaCA9IDEpID0+IHtcbiAgICByZXR1cm4gbWluKG1heChsb3csIHgpLCBoaWdoKTtcbn07XG4iLCAiaW1wb3J0IGxpbWl0IGZyb20gJy4vbGltaXQuanMnO1xuXG5leHBvcnQgZGVmYXVsdCAocmdiKSA9PiB7XG4gICAgcmdiLl9jbGlwcGVkID0gZmFsc2U7XG4gICAgcmdiLl91bmNsaXBwZWQgPSByZ2Iuc2xpY2UoMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzsgaSsrKSB7XG4gICAgICAgIGlmIChpIDwgMykge1xuICAgICAgICAgICAgaWYgKHJnYltpXSA8IDAgfHwgcmdiW2ldID4gMjU1KSByZ2IuX2NsaXBwZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmdiW2ldID0gbGltaXQocmdiW2ldLCAwLCAyNTUpO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDMpIHtcbiAgICAgICAgICAgIHJnYltpXSA9IGxpbWl0KHJnYltpXSwgMCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJnYjtcbn07XG4iLCAiLy8gcG9ydGVkIGZyb20galF1ZXJ5J3MgJC50eXBlXG5jb25zdCBjbGFzc1RvVHlwZSA9IHt9O1xuZm9yIChsZXQgbmFtZSBvZiBbXG4gICAgJ0Jvb2xlYW4nLFxuICAgICdOdW1iZXInLFxuICAgICdTdHJpbmcnLFxuICAgICdGdW5jdGlvbicsXG4gICAgJ0FycmF5JyxcbiAgICAnRGF0ZScsXG4gICAgJ1JlZ0V4cCcsXG4gICAgJ1VuZGVmaW5lZCcsXG4gICAgJ051bGwnXG5dKSB7XG4gICAgY2xhc3NUb1R5cGVbYFtvYmplY3QgJHtuYW1lfV1gXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gY2xhc3NUb1R5cGVbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaildIHx8ICdvYmplY3QnO1xufVxuIiwgImltcG9ydCB0eXBlIGZyb20gJy4vdHlwZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChhcmdzLCBrZXlPcmRlciA9IG51bGwpID0+IHtcbiAgICAvLyBpZiBjYWxsZWQgd2l0aCBtb3JlIHRoYW4gMyBhcmd1bWVudHMsIHdlIHJldHVybiB0aGUgYXJndW1lbnRzXG4gICAgaWYgKGFyZ3MubGVuZ3RoID49IDMpIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKTtcbiAgICAvLyB3aXRoIGxlc3MgdGhhbiAzIGFyZ3Mgd2UgY2hlY2sgaWYgZmlyc3QgYXJnIGlzIG9iamVjdFxuICAgIC8vIGFuZCB1c2UgdGhlIGtleU9yZGVyIHN0cmluZyB0byBleHRyYWN0IGFuZCBzb3J0IHByb3BlcnRpZXNcbiAgICBpZiAodHlwZShhcmdzWzBdKSA9PSAnb2JqZWN0JyAmJiBrZXlPcmRlcikge1xuICAgICAgICByZXR1cm4ga2V5T3JkZXJcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5maWx0ZXIoKGspID0+IGFyZ3NbMF1ba10gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIC5tYXAoKGspID0+IGFyZ3NbMF1ba10pO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2Ugd2UganVzdCByZXR1cm4gdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgLy8gKHdoaWNoIHdlIHN1cHBvc2UgaXMgYW4gYXJyYXkgb2YgYXJncylcbiAgICByZXR1cm4gYXJnc1swXTtcbn07XG4iLCAiaW1wb3J0IHR5cGUgZnJvbSAnLi90eXBlLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKGFyZ3MpID0+IHtcbiAgICBpZiAoYXJncy5sZW5ndGggPCAyKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBsID0gYXJncy5sZW5ndGggLSAxO1xuICAgIGlmICh0eXBlKGFyZ3NbbF0pID09ICdzdHJpbmcnKSByZXR1cm4gYXJnc1tsXS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBudWxsO1xufTtcbiIsICJjb25zdCB7IFBJLCBtaW4sIG1heCB9ID0gTWF0aDtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBjbGlwX3JnYiB9IGZyb20gJy4vY2xpcF9yZ2IuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBsaW1pdCB9IGZyb20gJy4vbGltaXQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBlIH0gZnJvbSAnLi90eXBlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5wYWNrIH0gZnJvbSAnLi91bnBhY2suanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBsYXN0IH0gZnJvbSAnLi9sYXN0LmpzJztcblxuY29uc3QgVFdPUEkgPSBQSSAqIDI7XG5jb25zdCBQSVRISVJEID0gUEkgLyAzO1xuY29uc3QgREVHMlJBRCA9IFBJIC8gMTgwO1xuY29uc3QgUkFEMkRFRyA9IDE4MCAvIFBJO1xuXG5leHBvcnQgeyBQSSwgVFdPUEksIFBJVEhJUkQsIERFRzJSQUQsIFJBRDJERUcsIG1pbiwgbWF4IH07XG4iLCAiZXhwb3J0IGRlZmF1bHQge1xuICAgIGZvcm1hdDoge30sXG4gICAgYXV0b2RldGVjdDogW11cbn07XG4iLCAiaW1wb3J0IHsgbGFzdCwgY2xpcF9yZ2IsIHR5cGUgfSBmcm9tICcuL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBfaW5wdXQgZnJvbSAnLi9pby9pbnB1dC5qcyc7XG5cbmNsYXNzIENvbG9yIHtcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZShhcmdzWzBdKSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0uY29uc3RydWN0b3IgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0uY29uc3RydWN0b3IgPT09IHRoaXMuY29uc3RydWN0b3JcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyB0aGUgYXJndW1lbnQgaXMgYWxyZWFkeSBhIENvbG9yIGluc3RhbmNlXG4gICAgICAgICAgICByZXR1cm4gYXJnc1swXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBsYXN0IGFyZ3VtZW50IGNvdWxkIGJlIHRoZSBtb2RlXG4gICAgICAgIGxldCBtb2RlID0gbGFzdChhcmdzKTtcbiAgICAgICAgbGV0IGF1dG9kZXRlY3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgICBhdXRvZGV0ZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lucHV0LnNvcnRlZCkge1xuICAgICAgICAgICAgICAgIF9pbnB1dC5hdXRvZGV0ZWN0ID0gX2lucHV0LmF1dG9kZXRlY3Quc29ydCgoYSwgYikgPT4gYi5wIC0gYS5wKTtcbiAgICAgICAgICAgICAgICBfaW5wdXQuc29ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGF1dG8tZGV0ZWN0IGZvcm1hdFxuICAgICAgICAgICAgZm9yIChsZXQgY2hrIG9mIF9pbnB1dC5hdXRvZGV0ZWN0KSB7XG4gICAgICAgICAgICAgICAgbW9kZSA9IGNoay50ZXN0KC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlKSBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoX2lucHV0LmZvcm1hdFttb2RlXSkge1xuICAgICAgICAgICAgY29uc3QgcmdiID0gX2lucHV0LmZvcm1hdFttb2RlXS5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIGF1dG9kZXRlY3QgPyBhcmdzIDogYXJncy5zbGljZSgwLCAtMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtZS5fcmdiID0gY2xpcF9yZ2IocmdiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBmb3JtYXQ6ICcgKyBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgYWxwaGEgY2hhbm5lbFxuICAgICAgICBpZiAobWUuX3JnYi5sZW5ndGggPT09IDMpIG1lLl9yZ2IucHVzaCgxKTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGlmICh0eXBlKHRoaXMuaGV4KSA9PSAnZnVuY3Rpb24nKSByZXR1cm4gdGhpcy5oZXgoKTtcbiAgICAgICAgcmV0dXJuIGBbJHt0aGlzLl9yZ2Iuam9pbignLCcpfV1gO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IENvbG9yO1xuIiwgIi8vIHRoaXMgZ2V0cyB1cGRhdGVkIGF1dG9tYXRpY2FsbHlcbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzIuNi4wJztcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uLmpzJztcblxuY29uc3QgY2hyb21hID0gKC4uLmFyZ3MpID0+IHtcbiAgICByZXR1cm4gbmV3IGNocm9tYS5Db2xvciguLi5hcmdzKTtcbn07XG5cbmNocm9tYS5Db2xvciA9IENvbG9yO1xuY2hyb21hLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG5leHBvcnQgZGVmYXVsdCBjaHJvbWE7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCBjbXlrMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnY215aycpO1xuICAgIGNvbnN0IFtjLCBtLCB5LCBrXSA9IGFyZ3M7XG4gICAgY29uc3QgYWxwaGEgPSBhcmdzLmxlbmd0aCA+IDQgPyBhcmdzWzRdIDogMTtcbiAgICBpZiAoayA9PT0gMSkgcmV0dXJuIFswLCAwLCAwLCBhbHBoYV07XG4gICAgcmV0dXJuIFtcbiAgICAgICAgYyA+PSAxID8gMCA6IDI1NSAqICgxIC0gYykgKiAoMSAtIGspLCAvLyByXG4gICAgICAgIG0gPj0gMSA/IDAgOiAyNTUgKiAoMSAtIG0pICogKDEgLSBrKSwgLy8gZ1xuICAgICAgICB5ID49IDEgPyAwIDogMjU1ICogKDEgLSB5KSAqICgxIC0gayksIC8vIGJcbiAgICAgICAgYWxwaGFcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY215azJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBtYXggfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJjbXlrID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsZXQgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICByID0gciAvIDI1NTtcbiAgICBnID0gZyAvIDI1NTtcbiAgICBiID0gYiAvIDI1NTtcbiAgICBjb25zdCBrID0gMSAtIG1heChyLCBtYXgoZywgYikpO1xuICAgIGNvbnN0IGYgPSBrIDwgMSA/IDEgLyAoMSAtIGspIDogMDtcbiAgICBjb25zdCBjID0gKDEgLSByIC0gaykgKiBmO1xuICAgIGNvbnN0IG0gPSAoMSAtIGcgLSBrKSAqIGY7XG4gICAgY29uc3QgeSA9ICgxIC0gYiAtIGspICogZjtcbiAgICByZXR1cm4gW2MsIG0sIHksIGtdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmNteWs7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY215azJyZ2IgZnJvbSAnLi9jbXlrMnJnYi5qcyc7XG5pbXBvcnQgcmdiMmNteWsgZnJvbSAnLi9yZ2IyY215ay5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5jbXlrID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyY215ayh0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmNteWsgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdjbXlrJyk7XG5cbmlucHV0LmZvcm1hdC5jbXlrID0gY215azJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdjbXlrJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2NteWsnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3Qgcm5kID0gKGEpID0+IE1hdGgucm91bmQoYSAqIDEwMCkgLyAxMDA7XG5cbi8qXG4gKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICogLSBoc2wyY3NzKGgscyxsKVxuICogLSBoc2wyY3NzKGgscyxsLGEpXG4gKiAtIGhzbDJjc3MoW2gscyxsXSwgbW9kZSlcbiAqIC0gaHNsMmNzcyhbaCxzLGwsYV0sIG1vZGUpXG4gKiAtIGhzbDJjc3Moe2gscyxsLGF9LCBtb2RlKVxuICovXG5jb25zdCBoc2wyY3NzID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBoc2xhID0gdW5wYWNrKGFyZ3MsICdoc2xhJyk7XG4gICAgbGV0IG1vZGUgPSBsYXN0KGFyZ3MpIHx8ICdsc2EnO1xuICAgIGhzbGFbMF0gPSBybmQoaHNsYVswXSB8fCAwKTtcbiAgICBoc2xhWzFdID0gcm5kKGhzbGFbMV0gKiAxMDApICsgJyUnO1xuICAgIGhzbGFbMl0gPSBybmQoaHNsYVsyXSAqIDEwMCkgKyAnJSc7XG4gICAgaWYgKG1vZGUgPT09ICdoc2xhJyB8fCAoaHNsYS5sZW5ndGggPiAzICYmIGhzbGFbM10gPCAxKSkge1xuICAgICAgICBoc2xhWzNdID0gaHNsYS5sZW5ndGggPiAzID8gaHNsYVszXSA6IDE7XG4gICAgICAgIG1vZGUgPSAnaHNsYSc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaHNsYS5sZW5ndGggPSAzO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bW9kZX0oJHtoc2xhLmpvaW4oJywnKX0pYDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzbDJjc3M7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBtaW4sIG1heCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcblxuLypcbiAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gKiAtIHJnYjJoc2wocixnLGIpXG4gKiAtIHJnYjJoc2wocixnLGIsYSlcbiAqIC0gcmdiMmhzbChbcixnLGJdKVxuICogLSByZ2IyaHNsKFtyLGcsYixhXSlcbiAqIC0gcmdiMmhzbCh7cixnLGIsYX0pXG4gKi9cbmNvbnN0IHJnYjJoc2wgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ3JnYmEnKTtcbiAgICBsZXQgW3IsIGcsIGJdID0gYXJncztcblxuICAgIHIgLz0gMjU1O1xuICAgIGcgLz0gMjU1O1xuICAgIGIgLz0gMjU1O1xuXG4gICAgY29uc3QgbWluUmdiID0gbWluKHIsIGcsIGIpO1xuICAgIGNvbnN0IG1heFJnYiA9IG1heChyLCBnLCBiKTtcblxuICAgIGNvbnN0IGwgPSAobWF4UmdiICsgbWluUmdiKSAvIDI7XG4gICAgbGV0IHMsIGg7XG5cbiAgICBpZiAobWF4UmdiID09PSBtaW5SZ2IpIHtcbiAgICAgICAgcyA9IDA7XG4gICAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHMgPVxuICAgICAgICAgICAgbCA8IDAuNVxuICAgICAgICAgICAgICAgID8gKG1heFJnYiAtIG1pblJnYikgLyAobWF4UmdiICsgbWluUmdiKVxuICAgICAgICAgICAgICAgIDogKG1heFJnYiAtIG1pblJnYikgLyAoMiAtIG1heFJnYiAtIG1pblJnYik7XG4gICAgfVxuXG4gICAgaWYgKHIgPT0gbWF4UmdiKSBoID0gKGcgLSBiKSAvIChtYXhSZ2IgLSBtaW5SZ2IpO1xuICAgIGVsc2UgaWYgKGcgPT0gbWF4UmdiKSBoID0gMiArIChiIC0gcikgLyAobWF4UmdiIC0gbWluUmdiKTtcbiAgICBlbHNlIGlmIChiID09IG1heFJnYikgaCA9IDQgKyAociAtIGcpIC8gKG1heFJnYiAtIG1pblJnYik7XG5cbiAgICBoICo9IDYwO1xuICAgIGlmIChoIDwgMCkgaCArPSAzNjA7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMyAmJiBhcmdzWzNdICE9PSB1bmRlZmluZWQpIHJldHVybiBbaCwgcywgbCwgYXJnc1szXV07XG4gICAgcmV0dXJuIFtoLCBzLCBsXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoc2w7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGhzbDJjc3MgZnJvbSAnLi9oc2wyY3NzLmpzJztcbmltcG9ydCByZ2IyaHNsIGZyb20gJy4uL2hzbC9yZ2IyaHNsLmpzJztcbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbi8qXG4gKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICogLSByZ2IyY3NzKHIsZyxiKVxuICogLSByZ2IyY3NzKHIsZyxiLGEpXG4gKiAtIHJnYjJjc3MoW3IsZyxiXSwgbW9kZSlcbiAqIC0gcmdiMmNzcyhbcixnLGIsYV0sIG1vZGUpXG4gKiAtIHJnYjJjc3Moe3IsZyxiLGF9LCBtb2RlKVxuICovXG5jb25zdCByZ2IyY3NzID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCByZ2JhID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgbGV0IG1vZGUgPSBsYXN0KGFyZ3MpIHx8ICdyZ2InO1xuICAgIGlmIChtb2RlLnN1YnN0cigwLCAzKSA9PSAnaHNsJykge1xuICAgICAgICByZXR1cm4gaHNsMmNzcyhyZ2IyaHNsKHJnYmEpLCBtb2RlKTtcbiAgICB9XG4gICAgcmdiYVswXSA9IHJvdW5kKHJnYmFbMF0pO1xuICAgIHJnYmFbMV0gPSByb3VuZChyZ2JhWzFdKTtcbiAgICByZ2JhWzJdID0gcm91bmQocmdiYVsyXSk7XG4gICAgaWYgKG1vZGUgPT09ICdyZ2JhJyB8fCAocmdiYS5sZW5ndGggPiAzICYmIHJnYmFbM10gPCAxKSkge1xuICAgICAgICByZ2JhWzNdID0gcmdiYS5sZW5ndGggPiAzID8gcmdiYVszXSA6IDE7XG4gICAgICAgIG1vZGUgPSAncmdiYSc7XG4gICAgfVxuICAgIHJldHVybiBgJHttb2RlfSgke3JnYmEuc2xpY2UoMCwgbW9kZSA9PT0gJ3JnYicgPyAzIDogNCkuam9pbignLCcpfSlgO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmNzcztcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHJvdW5kIH0gPSBNYXRoO1xuXG5jb25zdCBoc2wycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2wnKTtcbiAgICBjb25zdCBbaCwgcywgbF0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIHIgPSBnID0gYiA9IGwgKiAyNTU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdDMgPSBbMCwgMCwgMF07XG4gICAgICAgIGNvbnN0IGMgPSBbMCwgMCwgMF07XG4gICAgICAgIGNvbnN0IHQyID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcbiAgICAgICAgY29uc3QgdDEgPSAyICogbCAtIHQyO1xuICAgICAgICBjb25zdCBoXyA9IGggLyAzNjA7XG4gICAgICAgIHQzWzBdID0gaF8gKyAxIC8gMztcbiAgICAgICAgdDNbMV0gPSBoXztcbiAgICAgICAgdDNbMl0gPSBoXyAtIDEgLyAzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgaWYgKHQzW2ldIDwgMCkgdDNbaV0gKz0gMTtcbiAgICAgICAgICAgIGlmICh0M1tpXSA+IDEpIHQzW2ldIC09IDE7XG4gICAgICAgICAgICBpZiAoNiAqIHQzW2ldIDwgMSkgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzW2ldO1xuICAgICAgICAgICAgZWxzZSBpZiAoMiAqIHQzW2ldIDwgMSkgY1tpXSA9IHQyO1xuICAgICAgICAgICAgZWxzZSBpZiAoMyAqIHQzW2ldIDwgMikgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDNbaV0pICogNjtcbiAgICAgICAgICAgIGVsc2UgY1tpXSA9IHQxO1xuICAgICAgICB9XG4gICAgICAgIFtyLCBnLCBiXSA9IFtyb3VuZChjWzBdICogMjU1KSwgcm91bmQoY1sxXSAqIDI1NSksIHJvdW5kKGNbMl0gKiAyNTUpXTtcbiAgICB9XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMykge1xuICAgICAgICAvLyBrZWVwIGFscGhhIGNoYW5uZWxcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzWzNdXTtcbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzbDJyZ2I7XG4iLCAiaW1wb3J0IGhzbDJyZ2IgZnJvbSAnLi4vaHNsL2hzbDJyZ2IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcblxuY29uc3QgUkVfUkdCID0gL15yZ2JcXChcXHMqKC0/XFxkKyksXFxzKigtP1xcZCspXFxzKixcXHMqKC0/XFxkKylcXHMqXFwpJC87XG5jb25zdCBSRV9SR0JBID1cbiAgICAvXnJnYmFcXChcXHMqKC0/XFxkKyksXFxzKigtP1xcZCspXFxzKixcXHMqKC0/XFxkKylcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG5jb25zdCBSRV9SR0JfUENUID1cbiAgICAvXnJnYlxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSUsXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccypcXCkkLztcbmNvbnN0IFJFX1JHQkFfUENUID1cbiAgICAvXnJnYmFcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG5jb25zdCBSRV9IU0wgPVxuICAgIC9eaHNsXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqXFwpJC87XG5jb25zdCBSRV9IU0xBID1cbiAgICAvXmhzbGFcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyksXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcblxuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgY3NzMnJnYiA9IChjc3MpID0+IHtcbiAgICBjc3MgPSBjc3MudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgbGV0IG07XG5cbiAgICBpZiAoaW5wdXQuZm9ybWF0Lm5hbWVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuZm9ybWF0Lm5hbWVkKGNzcyk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG5cbiAgICAvLyByZ2IoMjUwLDIwLDApXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQikpKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IG0uc2xpY2UoMSwgNCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJnYlszXSA9IDE7IC8vIGRlZmF1bHQgYWxwaGFcbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9XG5cbiAgICAvLyByZ2JhKDI1MCwyMCwwLDAuNClcbiAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfUkdCQSkpKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IG0uc2xpY2UoMSwgNSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxuXG4gICAgLy8gcmdiKDEwMCUsMCUsMCUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQl9QQ1QpKSkge1xuICAgICAgICBjb25zdCByZ2IgPSBtLnNsaWNlKDEsIDQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgcmdiW2ldID0gcm91bmQocmdiW2ldICogMi41NSk7XG4gICAgICAgIH1cbiAgICAgICAgcmdiWzNdID0gMTsgLy8gZGVmYXVsdCBhbHBoYVxuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cblxuICAgIC8vIHJnYmEoMTAwJSwwJSwwJSwwLjQpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQkFfUENUKSkpIHtcbiAgICAgICAgY29uc3QgcmdiID0gbS5zbGljZSgxLCA1KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgIHJnYltpXSA9IHJvdW5kKHJnYltpXSAqIDIuNTUpO1xuICAgICAgICB9XG4gICAgICAgIHJnYlszXSA9ICtyZ2JbM107XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxuXG4gICAgLy8gaHNsKDAsMTAwJSw1MCUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX0hTTCkpKSB7XG4gICAgICAgIGNvbnN0IGhzbCA9IG0uc2xpY2UoMSwgNCk7XG4gICAgICAgIGhzbFsxXSAqPSAwLjAxO1xuICAgICAgICBoc2xbMl0gKj0gMC4wMTtcbiAgICAgICAgY29uc3QgcmdiID0gaHNsMnJnYihoc2wpO1xuICAgICAgICByZ2JbM10gPSAxO1xuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cblxuICAgIC8vIGhzbGEoMCwxMDAlLDUwJSwwLjUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX0hTTEEpKSkge1xuICAgICAgICBjb25zdCBoc2wgPSBtLnNsaWNlKDEsIDQpO1xuICAgICAgICBoc2xbMV0gKj0gMC4wMTtcbiAgICAgICAgaHNsWzJdICo9IDAuMDE7XG4gICAgICAgIGNvbnN0IHJnYiA9IGhzbDJyZ2IoaHNsKTtcbiAgICAgICAgcmdiWzNdID0gK21bNF07IC8vIGRlZmF1bHQgYWxwaGEgPSAxXG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxufTtcblxuY3NzMnJnYi50ZXN0ID0gKHMpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgICBSRV9SR0IudGVzdChzKSB8fFxuICAgICAgICBSRV9SR0JBLnRlc3QocykgfHxcbiAgICAgICAgUkVfUkdCX1BDVC50ZXN0KHMpIHx8XG4gICAgICAgIFJFX1JHQkFfUENULnRlc3QocykgfHxcbiAgICAgICAgUkVfSFNMLnRlc3QocykgfHxcbiAgICAgICAgUkVfSFNMQS50ZXN0KHMpXG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNzczJyZ2I7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5pbXBvcnQgcmdiMmNzcyBmcm9tICcuL3JnYjJjc3MuanMnO1xuaW1wb3J0IGNzczJyZ2IgZnJvbSAnLi9jc3MycmdiLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmNzcyA9IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgcmV0dXJuIHJnYjJjc3ModGhpcy5fcmdiLCBtb2RlKTtcbn07XG5cbmNocm9tYS5jc3MgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdjc3MnKTtcblxuaW5wdXQuZm9ybWF0LmNzcyA9IGNzczJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogNSxcbiAgICB0ZXN0OiAoaCwgLi4ucmVzdCkgPT4ge1xuICAgICAgICBpZiAoIXJlc3QubGVuZ3RoICYmIHR5cGUoaCkgPT09ICdzdHJpbmcnICYmIGNzczJyZ2IudGVzdChoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdjc3MnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmlucHV0LmZvcm1hdC5nbCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcmdiID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgcmdiWzBdICo9IDI1NTtcbiAgICByZ2JbMV0gKj0gMjU1O1xuICAgIHJnYlsyXSAqPSAyNTU7XG4gICAgcmV0dXJuIHJnYjtcbn07XG5cbmNocm9tYS5nbCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2dsJyk7XG5cbkNvbG9yLnByb3RvdHlwZS5nbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgcmV0dXJuIFtyZ2JbMF0gLyAyNTUsIHJnYlsxXSAvIDI1NSwgcmdiWzJdIC8gMjU1LCByZ2JbM11dO1xufTtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IGZsb29yIH0gPSBNYXRoO1xuXG4vKlxuICogdGhpcyBpcyBiYXNpY2FsbHkganVzdCBIU1Ygd2l0aCBzb21lIG1pbm9yIHR3ZWFrc1xuICpcbiAqIGh1ZS4uIFswLi4zNjBdXG4gKiBjaHJvbWEgLi4gWzAuLjFdXG4gKiBncmF5bmVzcyAuLiBbMC4uMV1cbiAqL1xuXG5jb25zdCBoY2cycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoY2cnKTtcbiAgICBsZXQgW2gsIGMsIF9nXSA9IGFyZ3M7XG4gICAgbGV0IHIsIGcsIGI7XG4gICAgX2cgPSBfZyAqIDI1NTtcbiAgICBjb25zdCBfYyA9IGMgKiAyNTU7XG4gICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgciA9IGcgPSBiID0gX2c7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGggPT09IDM2MCkgaCA9IDA7XG4gICAgICAgIGlmIChoID4gMzYwKSBoIC09IDM2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICAgICAgaCAvPSA2MDtcbiAgICAgICAgY29uc3QgaSA9IGZsb29yKGgpO1xuICAgICAgICBjb25zdCBmID0gaCAtIGk7XG4gICAgICAgIGNvbnN0IHAgPSBfZyAqICgxIC0gYyk7XG4gICAgICAgIGNvbnN0IHEgPSBwICsgX2MgKiAoMSAtIGYpO1xuICAgICAgICBjb25zdCB0ID0gcCArIF9jICogZjtcbiAgICAgICAgY29uc3QgdiA9IHAgKyBfYztcbiAgICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3YsIHQsIHBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFtxLCB2LCBwXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbcCwgdiwgdF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3AsIHEsIHZdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFt0LCBwLCB2XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbdiwgcCwgcV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoY2cycmdiO1xuIiwgImltcG9ydCB7IHVucGFjaywgbWF4LCBtaW4gfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmNvbnN0IHJnYjJoY2cgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgY29uc3QgbWluUmdiID0gbWluKHIsIGcsIGIpO1xuICAgIGNvbnN0IG1heFJnYiA9IG1heChyLCBnLCBiKTtcbiAgICBjb25zdCBkZWx0YSA9IG1heFJnYiAtIG1pblJnYjtcbiAgICBjb25zdCBjID0gKGRlbHRhICogMTAwKSAvIDI1NTtcbiAgICBjb25zdCBfZyA9IChtaW5SZ2IgLyAoMjU1IC0gZGVsdGEpKSAqIDEwMDtcbiAgICBsZXQgaDtcbiAgICBpZiAoZGVsdGEgPT09IDApIHtcbiAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHIgPT09IG1heFJnYikgaCA9IChnIC0gYikgLyBkZWx0YTtcbiAgICAgICAgaWYgKGcgPT09IG1heFJnYikgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gICAgICAgIGlmIChiID09PSBtYXhSZ2IpIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuICAgICAgICBoICo9IDYwO1xuICAgICAgICBpZiAoaCA8IDApIGggKz0gMzYwO1xuICAgIH1cbiAgICByZXR1cm4gW2gsIGMsIF9nXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoY2c7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaGNnMnJnYiBmcm9tICcuL2hjZzJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoY2cgZnJvbSAnLi9yZ2IyaGNnLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhjZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmhjZyh0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmhjZyA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hjZycpO1xuXG5pbnB1dC5mb3JtYXQuaGNnID0gaGNnMnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAxLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hjZycpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdoY2cnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiY29uc3QgUkVfSEVYID0gL14jPyhbQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfSkkLztcbmNvbnN0IFJFX0hFWEEgPSAvXiM/KFtBLUZhLWYwLTldezh9fFtBLUZhLWYwLTldezR9KSQvO1xuXG5jb25zdCBoZXgycmdiID0gKGhleCkgPT4ge1xuICAgIGlmIChoZXgubWF0Y2goUkVfSEVYKSkge1xuICAgICAgICAvLyByZW1vdmUgb3B0aW9uYWwgbGVhZGluZyAjXG4gICAgICAgIGlmIChoZXgubGVuZ3RoID09PSA0IHx8IGhleC5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgICAgIGhleCA9IGhleC5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgc2l4LWRpZ2l0XG4gICAgICAgIGlmIChoZXgubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBoZXggPSBoZXguc3BsaXQoJycpO1xuICAgICAgICAgICAgaGV4ID0gaGV4WzBdICsgaGV4WzBdICsgaGV4WzFdICsgaGV4WzFdICsgaGV4WzJdICsgaGV4WzJdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHUgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgICAgY29uc3QgciA9IHUgPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAodSA+PiA4KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGIgPSB1ICYgMHhmZjtcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbiAgICB9XG5cbiAgICAvLyBtYXRjaCByZ2JhIGhleCBmb3JtYXQsIGVnICNGRjAwMDA3N1xuICAgIGlmIChoZXgubWF0Y2goUkVfSEVYQSkpIHtcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDUgfHwgaGV4Lmxlbmd0aCA9PT0gOSkge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIG9wdGlvbmFsIGxlYWRpbmcgI1xuICAgICAgICAgICAgaGV4ID0gaGV4LnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHBhbmQgc2hvcnQtbm90YXRpb24gdG8gZnVsbCBlaWdodC1kaWdpdFxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKTtcbiAgICAgICAgICAgIGhleCA9XG4gICAgICAgICAgICAgICAgaGV4WzBdICtcbiAgICAgICAgICAgICAgICBoZXhbMF0gK1xuICAgICAgICAgICAgICAgIGhleFsxXSArXG4gICAgICAgICAgICAgICAgaGV4WzFdICtcbiAgICAgICAgICAgICAgICBoZXhbMl0gK1xuICAgICAgICAgICAgICAgIGhleFsyXSArXG4gICAgICAgICAgICAgICAgaGV4WzNdICtcbiAgICAgICAgICAgICAgICBoZXhbM107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdSA9IHBhcnNlSW50KGhleCwgMTYpO1xuICAgICAgICBjb25zdCByID0gKHUgPj4gMjQpICYgMHhmZjtcbiAgICAgICAgY29uc3QgZyA9ICh1ID4+IDE2KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGIgPSAodSA+PiA4KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGEgPSBNYXRoLnJvdW5kKCgodSAmIDB4ZmYpIC8gMHhmZikgKiAxMDApIC8gMTAwO1xuICAgICAgICByZXR1cm4gW3IsIGcsIGIsIGFdO1xuICAgIH1cblxuICAgIC8vIHdlIHVzZWQgdG8gY2hlY2sgZm9yIGNzcyBjb2xvcnMgaGVyZVxuICAgIC8vIGlmIF9pbnB1dC5jc3M/IGFuZCByZ2IgPSBfaW5wdXQuY3NzIGhleFxuICAgIC8vICAgICByZXR1cm4gcmdiXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gaGV4IGNvbG9yOiAke2hleH1gKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhleDJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgcmdiMmhleCA9ICguLi5hcmdzKSA9PiB7XG4gICAgbGV0IFtyLCBnLCBiLCBhXSA9IHVucGFjayhhcmdzLCAncmdiYScpO1xuICAgIGxldCBtb2RlID0gbGFzdChhcmdzKSB8fCAnYXV0byc7XG4gICAgaWYgKGEgPT09IHVuZGVmaW5lZCkgYSA9IDE7XG4gICAgaWYgKG1vZGUgPT09ICdhdXRvJykge1xuICAgICAgICBtb2RlID0gYSA8IDEgPyAncmdiYScgOiAncmdiJztcbiAgICB9XG4gICAgciA9IHJvdW5kKHIpO1xuICAgIGcgPSByb3VuZChnKTtcbiAgICBiID0gcm91bmQoYik7XG4gICAgY29uc3QgdSA9IChyIDw8IDE2KSB8IChnIDw8IDgpIHwgYjtcbiAgICBsZXQgc3RyID0gJzAwMDAwMCcgKyB1LnRvU3RyaW5nKDE2KTsgLy8jLnRvVXBwZXJDYXNlKCk7XG4gICAgc3RyID0gc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gNik7XG4gICAgbGV0IGh4YSA9ICcwJyArIHJvdW5kKGEgKiAyNTUpLnRvU3RyaW5nKDE2KTtcbiAgICBoeGEgPSBoeGEuc3Vic3RyKGh4YS5sZW5ndGggLSAyKTtcbiAgICBzd2l0Y2ggKG1vZGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdyZ2JhJzpcbiAgICAgICAgICAgIHJldHVybiBgIyR7c3RyfSR7aHhhfWA7XG4gICAgICAgIGNhc2UgJ2FyZ2InOlxuICAgICAgICAgICAgcmV0dXJuIGAjJHtoeGF9JHtzdHJ9YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBgIyR7c3RyfWA7XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmhleDtcbiIsICJpbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaGV4MnJnYiBmcm9tICcuL2hleDJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoZXggZnJvbSAnLi9yZ2IyaGV4LmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhleCA9IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgcmV0dXJuIHJnYjJoZXgodGhpcy5fcmdiLCBtb2RlKTtcbn07XG5cbmNocm9tYS5oZXggPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoZXgnKTtcblxuaW5wdXQuZm9ybWF0LmhleCA9IGhleDJyZ2I7XG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDQsXG4gICAgdGVzdDogKGgsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXJlc3QubGVuZ3RoICYmXG4gICAgICAgICAgICB0eXBlKGgpID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgWzMsIDQsIDUsIDYsIDcsIDgsIDldLmluZGV4T2YoaC5sZW5ndGgpID49IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2hleCc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIGxpbWl0LCBUV09QSSwgUElUSElSRCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgY29zIH0gPSBNYXRoO1xuXG4vKlxuICogaHVlIFswLi4zNjBdXG4gKiBzYXR1cmF0aW9uIFswLi4xXVxuICogaW50ZW5zaXR5IFswLi4xXVxuICovXG5jb25zdCBoc2kycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvKlxuICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICBodHRwOi8vaHVtbWVyLnN0YW5mb3JkLmVkdS9tdXNlaW5mby9kb2MvZXhhbXBsZXMvaHVtZHJ1bS9rZXlzY2FwZTIvaHNpMnJnYi5jcHBcbiAgICAqL1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzaScpO1xuICAgIGxldCBbaCwgcywgaV0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuXG4gICAgaWYgKGlzTmFOKGgpKSBoID0gMDtcbiAgICBpZiAoaXNOYU4ocykpIHMgPSAwO1xuICAgIC8vIG5vcm1hbGl6ZSBodWVcbiAgICBpZiAoaCA+IDM2MCkgaCAtPSAzNjA7XG4gICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICBoIC89IDM2MDtcbiAgICBpZiAoaCA8IDEgLyAzKSB7XG4gICAgICAgIGIgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgciA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgZyA9IDEgLSAoYiArIHIpO1xuICAgIH0gZWxzZSBpZiAoaCA8IDIgLyAzKSB7XG4gICAgICAgIGggLT0gMSAvIDM7XG4gICAgICAgIHIgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgZyA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgYiA9IDEgLSAociArIGcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGggLT0gMiAvIDM7XG4gICAgICAgIGcgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgYiA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgciA9IDEgLSAoZyArIGIpO1xuICAgIH1cbiAgICByID0gbGltaXQoaSAqIHIgKiAzKTtcbiAgICBnID0gbGltaXQoaSAqIGcgKiAzKTtcbiAgICBiID0gbGltaXQoaSAqIGIgKiAzKTtcbiAgICByZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTUsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzaTJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBUV09QSSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgbWluLCBzcXJ0LCBhY29zIH0gPSBNYXRoO1xuXG5jb25zdCByZ2IyaHNpID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvKlxuICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICBodHRwOi8vaHVtbWVyLnN0YW5mb3JkLmVkdS9tdXNlaW5mby9kb2MvZXhhbXBsZXMvaHVtZHJ1bS9rZXlzY2FwZTIvcmdiMmhzaS5jcHBcbiAgICAqL1xuICAgIGxldCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIHIgLz0gMjU1O1xuICAgIGcgLz0gMjU1O1xuICAgIGIgLz0gMjU1O1xuICAgIGxldCBoO1xuICAgIGNvbnN0IG1pbl8gPSBtaW4ociwgZywgYik7XG4gICAgY29uc3QgaSA9IChyICsgZyArIGIpIC8gMztcbiAgICBjb25zdCBzID0gaSA+IDAgPyAxIC0gbWluXyAvIGkgOiAwO1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIGggPSBOYU47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaCA9IChyIC0gZyArIChyIC0gYikpIC8gMjtcbiAgICAgICAgaCAvPSBzcXJ0KChyIC0gZykgKiAociAtIGcpICsgKHIgLSBiKSAqIChnIC0gYikpO1xuICAgICAgICBoID0gYWNvcyhoKTtcbiAgICAgICAgaWYgKGIgPiBnKSB7XG4gICAgICAgICAgICBoID0gVFdPUEkgLSBoO1xuICAgICAgICB9XG4gICAgICAgIGggLz0gVFdPUEk7XG4gICAgfVxuICAgIHJldHVybiBbaCAqIDM2MCwgcywgaV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IyaHNpO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhzaTJyZ2IgZnJvbSAnLi9oc2kycmdiLmpzJztcbmltcG9ydCByZ2IyaHNpIGZyb20gJy4vcmdiMmhzaS5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oc2kgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJoc2kodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5oc2kgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoc2knKTtcblxuaW5wdXQuZm9ybWF0LmhzaSA9IGhzaTJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2knKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnaHNpJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhzbDJyZ2IgZnJvbSAnLi9oc2wycmdiLmpzJztcbmltcG9ydCByZ2IyaHNsIGZyb20gJy4vcmdiMmhzbC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oc2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJoc2wodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5oc2wgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoc2wnKTtcblxuaW5wdXQuZm9ybWF0LmhzbCA9IGhzbDJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2wnKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnaHNsJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgZmxvb3IgfSA9IE1hdGg7XG5cbmNvbnN0IGhzdjJyZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzdicpO1xuICAgIGxldCBbaCwgcywgdl0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuICAgIHYgKj0gMjU1O1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIHIgPSBnID0gYiA9IHY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGggPT09IDM2MCkgaCA9IDA7XG4gICAgICAgIGlmIChoID4gMzYwKSBoIC09IDM2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICAgICAgaCAvPSA2MDtcblxuICAgICAgICBjb25zdCBpID0gZmxvb3IoaCk7XG4gICAgICAgIGNvbnN0IGYgPSBoIC0gaTtcbiAgICAgICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xuICAgICAgICBjb25zdCBxID0gdiAqICgxIC0gcyAqIGYpO1xuICAgICAgICBjb25zdCB0ID0gdiAqICgxIC0gcyAqICgxIC0gZikpO1xuXG4gICAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFt2LCB0LCBwXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbcSwgdiwgcF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3AsIHYsIHRdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFtwLCBxLCB2XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbdCwgcCwgdl07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3YsIHAsIHFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaHN2MnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IG1pbiwgbWF4IH0gPSBNYXRoO1xuXG4vKlxuICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAqIC0gcmdiMmhzdihyLGcsYilcbiAqIC0gcmdiMmhzdihbcixnLGJdKVxuICogLSByZ2IyaHN2KHtyLGcsYn0pXG4gKi9cbmNvbnN0IHJnYjJoc2wgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGxldCBbciwgZywgYl0gPSBhcmdzO1xuICAgIGNvbnN0IG1pbl8gPSBtaW4ociwgZywgYik7XG4gICAgY29uc3QgbWF4XyA9IG1heChyLCBnLCBiKTtcbiAgICBjb25zdCBkZWx0YSA9IG1heF8gLSBtaW5fO1xuICAgIGxldCBoLCBzLCB2O1xuICAgIHYgPSBtYXhfIC8gMjU1LjA7XG4gICAgaWYgKG1heF8gPT09IDApIHtcbiAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgICAgIHMgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHMgPSBkZWx0YSAvIG1heF87XG4gICAgICAgIGlmIChyID09PSBtYXhfKSBoID0gKGcgLSBiKSAvIGRlbHRhO1xuICAgICAgICBpZiAoZyA9PT0gbWF4XykgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gICAgICAgIGlmIChiID09PSBtYXhfKSBoID0gNCArIChyIC0gZykgLyBkZWx0YTtcbiAgICAgICAgaCAqPSA2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICB9XG4gICAgcmV0dXJuIFtoLCBzLCB2XTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoc2w7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaHN2MnJnYiBmcm9tICcuL2hzdjJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoc3YgZnJvbSAnLi9yZ2IyaHN2LmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhzdiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmhzdih0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmhzdiA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hzdicpO1xuXG5pbnB1dC5mb3JtYXQuaHN2ID0gaHN2MnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAyLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzdicpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdoc3YnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiZXhwb3J0IGRlZmF1bHQge1xuICAgIC8vIENvcnJlc3BvbmRzIHJvdWdobHkgdG8gUkdCIGJyaWdodGVyL2RhcmtlclxuICAgIEtuOiAxOCxcblxuICAgIC8vIEQ2NSBzdGFuZGFyZCByZWZlcmVudFxuICAgIFhuOiAwLjk1MDQ3LFxuICAgIFluOiAxLFxuICAgIFpuOiAxLjA4ODgzLFxuXG4gICAgdDA6IDAuMTM3OTMxMDM0LCAvLyA0IC8gMjlcbiAgICB0MTogMC4yMDY4OTY1NTIsIC8vIDYgLyAyOVxuICAgIHQyOiAwLjEyODQxODU1LCAvLyAzICogdDEgKiB0MVxuICAgIHQzOiAwLjAwODg1NjQ1MiAvLyB0MSAqIHQxICogdDFcbn07XG4iLCAiaW1wb3J0IExBQl9DT05TVEFOVFMgZnJvbSAnLi9sYWItY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcG93IH0gPSBNYXRoO1xuXG4vKlxuICogTCogWzAuLjEwMF1cbiAqIGEgWy0xMDAuLjEwMF1cbiAqIGIgWy0xMDAuLjEwMF1cbiAqL1xuY29uc3QgbGFiMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGFiJyk7XG4gICAgY29uc3QgW2wsIGEsIGJdID0gYXJncztcbiAgICBsZXQgeCwgeSwgeiwgciwgZywgYl87XG5cbiAgICB5ID0gKGwgKyAxNikgLyAxMTY7XG4gICAgeCA9IGlzTmFOKGEpID8geSA6IHkgKyBhIC8gNTAwO1xuICAgIHogPSBpc05hTihiKSA/IHkgOiB5IC0gYiAvIDIwMDtcblxuICAgIHkgPSBMQUJfQ09OU1RBTlRTLlluICogbGFiX3h5eih5KTtcbiAgICB4ID0gTEFCX0NPTlNUQU5UUy5YbiAqIGxhYl94eXooeCk7XG4gICAgeiA9IExBQl9DT05TVEFOVFMuWm4gKiBsYWJfeHl6KHopO1xuXG4gICAgciA9IHh5el9yZ2IoMy4yNDA0NTQyICogeCAtIDEuNTM3MTM4NSAqIHkgLSAwLjQ5ODUzMTQgKiB6KTsgLy8gRDY1IC0+IHNSR0JcbiAgICBnID0geHl6X3JnYigtMC45NjkyNjYgKiB4ICsgMS44NzYwMTA4ICogeSArIDAuMDQxNTU2ICogeik7XG4gICAgYl8gPSB4eXpfcmdiKDAuMDU1NjQzNCAqIHggLSAwLjIwNDAyNTkgKiB5ICsgMS4wNTcyMjUyICogeik7XG5cbiAgICByZXR1cm4gW3IsIGcsIGJfLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG59O1xuXG5jb25zdCB4eXpfcmdiID0gKHIpID0+IHtcbiAgICByZXR1cm4gMjU1ICogKHIgPD0gMC4wMDMwNCA/IDEyLjkyICogciA6IDEuMDU1ICogcG93KHIsIDEgLyAyLjQpIC0gMC4wNTUpO1xufTtcblxuY29uc3QgbGFiX3h5eiA9ICh0KSA9PiB7XG4gICAgcmV0dXJuIHQgPiBMQUJfQ09OU1RBTlRTLnQxXG4gICAgICAgID8gdCAqIHQgKiB0XG4gICAgICAgIDogTEFCX0NPTlNUQU5UUy50MiAqICh0IC0gTEFCX0NPTlNUQU5UUy50MCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsYWIycmdiO1xuIiwgImltcG9ydCBMQUJfQ09OU1RBTlRTIGZyb20gJy4vbGFiLWNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHBvdyB9ID0gTWF0aDtcblxuY29uc3QgcmdiMmxhYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBjb25zdCBbeCwgeSwgel0gPSByZ2IyeHl6KHIsIGcsIGIpO1xuICAgIGNvbnN0IGwgPSAxMTYgKiB5IC0gMTY7XG4gICAgcmV0dXJuIFtsIDwgMCA/IDAgOiBsLCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopXTtcbn07XG5cbmNvbnN0IHJnYl94eXogPSAocikgPT4ge1xuICAgIGlmICgociAvPSAyNTUpIDw9IDAuMDQwNDUpIHJldHVybiByIC8gMTIuOTI7XG4gICAgcmV0dXJuIHBvdygociArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufTtcblxuY29uc3QgeHl6X2xhYiA9ICh0KSA9PiB7XG4gICAgaWYgKHQgPiBMQUJfQ09OU1RBTlRTLnQzKSByZXR1cm4gcG93KHQsIDEgLyAzKTtcbiAgICByZXR1cm4gdCAvIExBQl9DT05TVEFOVFMudDIgKyBMQUJfQ09OU1RBTlRTLnQwO1xufTtcblxuY29uc3QgcmdiMnh5eiA9IChyLCBnLCBiKSA9PiB7XG4gICAgciA9IHJnYl94eXoocik7XG4gICAgZyA9IHJnYl94eXooZyk7XG4gICAgYiA9IHJnYl94eXooYik7XG4gICAgY29uc3QgeCA9IHh5el9sYWIoXG4gICAgICAgICgwLjQxMjQ1NjQgKiByICsgMC4zNTc1NzYxICogZyArIDAuMTgwNDM3NSAqIGIpIC8gTEFCX0NPTlNUQU5UUy5YblxuICAgICk7XG4gICAgY29uc3QgeSA9IHh5el9sYWIoXG4gICAgICAgICgwLjIxMjY3MjkgKiByICsgMC43MTUxNTIyICogZyArIDAuMDcyMTc1ICogYikgLyBMQUJfQ09OU1RBTlRTLlluXG4gICAgKTtcbiAgICBjb25zdCB6ID0geHl6X2xhYihcbiAgICAgICAgKDAuMDE5MzMzOSAqIHIgKyAwLjExOTE5MiAqIGcgKyAwLjk1MDMwNDEgKiBiKSAvIExBQl9DT05TVEFOVFMuWm5cbiAgICApO1xuICAgIHJldHVybiBbeCwgeSwgel07XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IybGFiO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGxhYjJyZ2IgZnJvbSAnLi9sYWIycmdiLmpzJztcbmltcG9ydCByZ2IybGFiIGZyb20gJy4vcmdiMmxhYi5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5sYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJsYWIodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5sYWIgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdsYWInKTtcblxuaW5wdXQuZm9ybWF0LmxhYiA9IGxhYjJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnbGFiJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjaywgREVHMlJBRCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgc2luLCBjb3MgfSA9IE1hdGg7XG5cbmNvbnN0IGxjaDJsYWIgPSAoLi4uYXJncykgPT4ge1xuICAgIC8qXG4gICAgQ29udmVydCBmcm9tIGEgcXVhbGl0YXRpdmUgcGFyYW1ldGVyIGggYW5kIGEgcXVhbnRpdGF0aXZlIHBhcmFtZXRlciBsIHRvIGEgMjQtYml0IHBpeGVsLlxuICAgIFRoZXNlIGZvcm11bGFzIHdlcmUgaW52ZW50ZWQgYnkgRGF2aWQgRGFscnltcGxlIHRvIG9idGFpbiBtYXhpbXVtIGNvbnRyYXN0IHdpdGhvdXQgZ29pbmdcbiAgICBvdXQgb2YgZ2FtdXQgaWYgdGhlIHBhcmFtZXRlcnMgYXJlIGluIHRoZSByYW5nZSAwLTEuXG5cbiAgICBBIHNhdHVyYXRpb24gbXVsdGlwbGllciB3YXMgYWRkZWQgYnkgR3JlZ29yIEFpc2NoXG4gICAgKi9cbiAgICBsZXQgW2wsIGMsIGhdID0gdW5wYWNrKGFyZ3MsICdsY2gnKTtcbiAgICBpZiAoaXNOYU4oaCkpIGggPSAwO1xuICAgIGggPSBoICogREVHMlJBRDtcbiAgICByZXR1cm4gW2wsIGNvcyhoKSAqIGMsIHNpbihoKSAqIGNdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGNoMmxhYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMmxhYiBmcm9tICcuL2xjaDJsYWIuanMnO1xuaW1wb3J0IGxhYjJyZ2IgZnJvbSAnLi4vbGFiL2xhYjJyZ2IuanMnO1xuXG5jb25zdCBsY2gycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsY2gnKTtcbiAgICBjb25zdCBbbCwgYywgaF0gPSBhcmdzO1xuICAgIGNvbnN0IFtMLCBhLCBiX10gPSBsY2gybGFiKGwsIGMsIGgpO1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IGxhYjJyZ2IoTCwgYSwgYl8pO1xuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGNoMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMnJnYiBmcm9tICcuL2xjaDJyZ2IuanMnO1xuXG5jb25zdCBoY2wycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBoY2wgPSB1bnBhY2soYXJncywgJ2hjbCcpLnJldmVyc2UoKTtcbiAgICByZXR1cm4gbGNoMnJnYiguLi5oY2wpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaGNsMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIFJBRDJERUcgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHNxcnQsIGF0YW4yLCByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgbGFiMmxjaCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgW2wsIGEsIGJdID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICBjb25zdCBjID0gc3FydChhICogYSArIGIgKiBiKTtcbiAgICBsZXQgaCA9IChhdGFuMihiLCBhKSAqIFJBRDJERUcgKyAzNjApICUgMzYwO1xuICAgIGlmIChyb3VuZChjICogMTAwMDApID09PSAwKSBoID0gTnVtYmVyLk5hTjtcbiAgICByZXR1cm4gW2wsIGMsIGhdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGFiMmxjaDtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgcmdiMmxhYiBmcm9tICcuLi9sYWIvcmdiMmxhYi5qcyc7XG5pbXBvcnQgbGFiMmxjaCBmcm9tICcuL2xhYjJsY2guanMnO1xuXG5jb25zdCByZ2IybGNoID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGNvbnN0IFtsLCBhLCBiX10gPSByZ2IybGFiKHIsIGcsIGIpO1xuICAgIHJldHVybiBsYWIybGNoKGwsIGEsIGJfKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJsY2g7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgbGNoMnJnYiBmcm9tICcuL2xjaDJyZ2IuanMnO1xuaW1wb3J0IGhjbDJyZ2IgZnJvbSAnLi9oY2wycmdiLmpzJztcbmltcG9ydCByZ2IybGNoIGZyb20gJy4vcmdiMmxjaC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5sY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJsY2godGhpcy5fcmdiKTtcbn07XG5Db2xvci5wcm90b3R5cGUuaGNsID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IybGNoKHRoaXMuX3JnYikucmV2ZXJzZSgpO1xufTtcblxuY2hyb21hLmxjaCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2xjaCcpO1xuY2hyb21hLmhjbCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hjbCcpO1xuXG5pbnB1dC5mb3JtYXQubGNoID0gbGNoMnJnYjtcbmlucHV0LmZvcm1hdC5oY2wgPSBoY2wycmdiO1xuWydsY2gnLCAnaGNsJ10uZm9yRWFjaCgobSkgPT5cbiAgICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCBtKTtcbiAgICAgICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuKTtcbiIsICIvKipcblx0WDExIGNvbG9yIG5hbWVzXG5cblx0aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci8jc3ZnLWNvbG9yXG4qL1xuXG5jb25zdCB3M2N4MTEgPSB7XG4gICAgYWxpY2VibHVlOiAnI2YwZjhmZicsXG4gICAgYW50aXF1ZXdoaXRlOiAnI2ZhZWJkNycsXG4gICAgYXF1YTogJyMwMGZmZmYnLFxuICAgIGFxdWFtYXJpbmU6ICcjN2ZmZmQ0JyxcbiAgICBhenVyZTogJyNmMGZmZmYnLFxuICAgIGJlaWdlOiAnI2Y1ZjVkYycsXG4gICAgYmlzcXVlOiAnI2ZmZTRjNCcsXG4gICAgYmxhY2s6ICcjMDAwMDAwJyxcbiAgICBibGFuY2hlZGFsbW9uZDogJyNmZmViY2QnLFxuICAgIGJsdWU6ICcjMDAwMGZmJyxcbiAgICBibHVldmlvbGV0OiAnIzhhMmJlMicsXG4gICAgYnJvd246ICcjYTUyYTJhJyxcbiAgICBidXJseXdvb2Q6ICcjZGViODg3JyxcbiAgICBjYWRldGJsdWU6ICcjNWY5ZWEwJyxcbiAgICBjaGFydHJldXNlOiAnIzdmZmYwMCcsXG4gICAgY2hvY29sYXRlOiAnI2QyNjkxZScsXG4gICAgY29yYWw6ICcjZmY3ZjUwJyxcbiAgICBjb3JuZmxvd2VyYmx1ZTogJyM2NDk1ZWQnLFxuICAgIGNvcm5zaWxrOiAnI2ZmZjhkYycsXG4gICAgY3JpbXNvbjogJyNkYzE0M2MnLFxuICAgIGN5YW46ICcjMDBmZmZmJyxcbiAgICBkYXJrYmx1ZTogJyMwMDAwOGInLFxuICAgIGRhcmtjeWFuOiAnIzAwOGI4YicsXG4gICAgZGFya2dvbGRlbnJvZDogJyNiODg2MGInLFxuICAgIGRhcmtncmF5OiAnI2E5YTlhOScsXG4gICAgZGFya2dyZWVuOiAnIzAwNjQwMCcsXG4gICAgZGFya2dyZXk6ICcjYTlhOWE5JyxcbiAgICBkYXJra2hha2k6ICcjYmRiNzZiJyxcbiAgICBkYXJrbWFnZW50YTogJyM4YjAwOGInLFxuICAgIGRhcmtvbGl2ZWdyZWVuOiAnIzU1NmIyZicsXG4gICAgZGFya29yYW5nZTogJyNmZjhjMDAnLFxuICAgIGRhcmtvcmNoaWQ6ICcjOTkzMmNjJyxcbiAgICBkYXJrcmVkOiAnIzhiMDAwMCcsXG4gICAgZGFya3NhbG1vbjogJyNlOTk2N2EnLFxuICAgIGRhcmtzZWFncmVlbjogJyM4ZmJjOGYnLFxuICAgIGRhcmtzbGF0ZWJsdWU6ICcjNDgzZDhiJyxcbiAgICBkYXJrc2xhdGVncmF5OiAnIzJmNGY0ZicsXG4gICAgZGFya3NsYXRlZ3JleTogJyMyZjRmNGYnLFxuICAgIGRhcmt0dXJxdW9pc2U6ICcjMDBjZWQxJyxcbiAgICBkYXJrdmlvbGV0OiAnIzk0MDBkMycsXG4gICAgZGVlcHBpbms6ICcjZmYxNDkzJyxcbiAgICBkZWVwc2t5Ymx1ZTogJyMwMGJmZmYnLFxuICAgIGRpbWdyYXk6ICcjNjk2OTY5JyxcbiAgICBkaW1ncmV5OiAnIzY5Njk2OScsXG4gICAgZG9kZ2VyYmx1ZTogJyMxZTkwZmYnLFxuICAgIGZpcmVicmljazogJyNiMjIyMjInLFxuICAgIGZsb3JhbHdoaXRlOiAnI2ZmZmFmMCcsXG4gICAgZm9yZXN0Z3JlZW46ICcjMjI4YjIyJyxcbiAgICBmdWNoc2lhOiAnI2ZmMDBmZicsXG4gICAgZ2FpbnNib3JvOiAnI2RjZGNkYycsXG4gICAgZ2hvc3R3aGl0ZTogJyNmOGY4ZmYnLFxuICAgIGdvbGQ6ICcjZmZkNzAwJyxcbiAgICBnb2xkZW5yb2Q6ICcjZGFhNTIwJyxcbiAgICBncmF5OiAnIzgwODA4MCcsXG4gICAgZ3JlZW46ICcjMDA4MDAwJyxcbiAgICBncmVlbnllbGxvdzogJyNhZGZmMmYnLFxuICAgIGdyZXk6ICcjODA4MDgwJyxcbiAgICBob25leWRldzogJyNmMGZmZjAnLFxuICAgIGhvdHBpbms6ICcjZmY2OWI0JyxcbiAgICBpbmRpYW5yZWQ6ICcjY2Q1YzVjJyxcbiAgICBpbmRpZ286ICcjNGIwMDgyJyxcbiAgICBpdm9yeTogJyNmZmZmZjAnLFxuICAgIGtoYWtpOiAnI2YwZTY4YycsXG4gICAgbGFzZXJsZW1vbjogJyNmZmZmNTQnLFxuICAgIGxhdmVuZGVyOiAnI2U2ZTZmYScsXG4gICAgbGF2ZW5kZXJibHVzaDogJyNmZmYwZjUnLFxuICAgIGxhd25ncmVlbjogJyM3Y2ZjMDAnLFxuICAgIGxlbW9uY2hpZmZvbjogJyNmZmZhY2QnLFxuICAgIGxpZ2h0Ymx1ZTogJyNhZGQ4ZTYnLFxuICAgIGxpZ2h0Y29yYWw6ICcjZjA4MDgwJyxcbiAgICBsaWdodGN5YW46ICcjZTBmZmZmJyxcbiAgICBsaWdodGdvbGRlbnJvZDogJyNmYWZhZDInLFxuICAgIGxpZ2h0Z29sZGVucm9keWVsbG93OiAnI2ZhZmFkMicsXG4gICAgbGlnaHRncmF5OiAnI2QzZDNkMycsXG4gICAgbGlnaHRncmVlbjogJyM5MGVlOTAnLFxuICAgIGxpZ2h0Z3JleTogJyNkM2QzZDMnLFxuICAgIGxpZ2h0cGluazogJyNmZmI2YzEnLFxuICAgIGxpZ2h0c2FsbW9uOiAnI2ZmYTA3YScsXG4gICAgbGlnaHRzZWFncmVlbjogJyMyMGIyYWEnLFxuICAgIGxpZ2h0c2t5Ymx1ZTogJyM4N2NlZmEnLFxuICAgIGxpZ2h0c2xhdGVncmF5OiAnIzc3ODg5OScsXG4gICAgbGlnaHRzbGF0ZWdyZXk6ICcjNzc4ODk5JyxcbiAgICBsaWdodHN0ZWVsYmx1ZTogJyNiMGM0ZGUnLFxuICAgIGxpZ2h0eWVsbG93OiAnI2ZmZmZlMCcsXG4gICAgbGltZTogJyMwMGZmMDAnLFxuICAgIGxpbWVncmVlbjogJyMzMmNkMzInLFxuICAgIGxpbmVuOiAnI2ZhZjBlNicsXG4gICAgbWFnZW50YTogJyNmZjAwZmYnLFxuICAgIG1hcm9vbjogJyM4MDAwMDAnLFxuICAgIG1hcm9vbjI6ICcjN2YwMDAwJyxcbiAgICBtYXJvb24zOiAnI2IwMzA2MCcsXG4gICAgbWVkaXVtYXF1YW1hcmluZTogJyM2NmNkYWEnLFxuICAgIG1lZGl1bWJsdWU6ICcjMDAwMGNkJyxcbiAgICBtZWRpdW1vcmNoaWQ6ICcjYmE1NWQzJyxcbiAgICBtZWRpdW1wdXJwbGU6ICcjOTM3MGRiJyxcbiAgICBtZWRpdW1zZWFncmVlbjogJyMzY2IzNzEnLFxuICAgIG1lZGl1bXNsYXRlYmx1ZTogJyM3YjY4ZWUnLFxuICAgIG1lZGl1bXNwcmluZ2dyZWVuOiAnIzAwZmE5YScsXG4gICAgbWVkaXVtdHVycXVvaXNlOiAnIzQ4ZDFjYycsXG4gICAgbWVkaXVtdmlvbGV0cmVkOiAnI2M3MTU4NScsXG4gICAgbWlkbmlnaHRibHVlOiAnIzE5MTk3MCcsXG4gICAgbWludGNyZWFtOiAnI2Y1ZmZmYScsXG4gICAgbWlzdHlyb3NlOiAnI2ZmZTRlMScsXG4gICAgbW9jY2FzaW46ICcjZmZlNGI1JyxcbiAgICBuYXZham93aGl0ZTogJyNmZmRlYWQnLFxuICAgIG5hdnk6ICcjMDAwMDgwJyxcbiAgICBvbGRsYWNlOiAnI2ZkZjVlNicsXG4gICAgb2xpdmU6ICcjODA4MDAwJyxcbiAgICBvbGl2ZWRyYWI6ICcjNmI4ZTIzJyxcbiAgICBvcmFuZ2U6ICcjZmZhNTAwJyxcbiAgICBvcmFuZ2VyZWQ6ICcjZmY0NTAwJyxcbiAgICBvcmNoaWQ6ICcjZGE3MGQ2JyxcbiAgICBwYWxlZ29sZGVucm9kOiAnI2VlZThhYScsXG4gICAgcGFsZWdyZWVuOiAnIzk4ZmI5OCcsXG4gICAgcGFsZXR1cnF1b2lzZTogJyNhZmVlZWUnLFxuICAgIHBhbGV2aW9sZXRyZWQ6ICcjZGI3MDkzJyxcbiAgICBwYXBheWF3aGlwOiAnI2ZmZWZkNScsXG4gICAgcGVhY2hwdWZmOiAnI2ZmZGFiOScsXG4gICAgcGVydTogJyNjZDg1M2YnLFxuICAgIHBpbms6ICcjZmZjMGNiJyxcbiAgICBwbHVtOiAnI2RkYTBkZCcsXG4gICAgcG93ZGVyYmx1ZTogJyNiMGUwZTYnLFxuICAgIHB1cnBsZTogJyM4MDAwODAnLFxuICAgIHB1cnBsZTI6ICcjN2YwMDdmJyxcbiAgICBwdXJwbGUzOiAnI2EwMjBmMCcsXG4gICAgcmViZWNjYXB1cnBsZTogJyM2NjMzOTknLFxuICAgIHJlZDogJyNmZjAwMDAnLFxuICAgIHJvc3licm93bjogJyNiYzhmOGYnLFxuICAgIHJveWFsYmx1ZTogJyM0MTY5ZTEnLFxuICAgIHNhZGRsZWJyb3duOiAnIzhiNDUxMycsXG4gICAgc2FsbW9uOiAnI2ZhODA3MicsXG4gICAgc2FuZHlicm93bjogJyNmNGE0NjAnLFxuICAgIHNlYWdyZWVuOiAnIzJlOGI1NycsXG4gICAgc2Vhc2hlbGw6ICcjZmZmNWVlJyxcbiAgICBzaWVubmE6ICcjYTA1MjJkJyxcbiAgICBzaWx2ZXI6ICcjYzBjMGMwJyxcbiAgICBza3libHVlOiAnIzg3Y2VlYicsXG4gICAgc2xhdGVibHVlOiAnIzZhNWFjZCcsXG4gICAgc2xhdGVncmF5OiAnIzcwODA5MCcsXG4gICAgc2xhdGVncmV5OiAnIzcwODA5MCcsXG4gICAgc25vdzogJyNmZmZhZmEnLFxuICAgIHNwcmluZ2dyZWVuOiAnIzAwZmY3ZicsXG4gICAgc3RlZWxibHVlOiAnIzQ2ODJiNCcsXG4gICAgdGFuOiAnI2QyYjQ4YycsXG4gICAgdGVhbDogJyMwMDgwODAnLFxuICAgIHRoaXN0bGU6ICcjZDhiZmQ4JyxcbiAgICB0b21hdG86ICcjZmY2MzQ3JyxcbiAgICB0dXJxdW9pc2U6ICcjNDBlMGQwJyxcbiAgICB2aW9sZXQ6ICcjZWU4MmVlJyxcbiAgICB3aGVhdDogJyNmNWRlYjMnLFxuICAgIHdoaXRlOiAnI2ZmZmZmZicsXG4gICAgd2hpdGVzbW9rZTogJyNmNWY1ZjUnLFxuICAgIHllbGxvdzogJyNmZmZmMDAnLFxuICAgIHllbGxvd2dyZWVuOiAnIzlhY2QzMidcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHczY3gxMTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCB7IHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmltcG9ydCB3M2N4MTEgZnJvbSAnLi4vLi4vY29sb3JzL3czY3gxMS5qcyc7XG5pbXBvcnQgaGV4MnJnYiBmcm9tICcuLi9oZXgvaGV4MnJnYi5qcyc7XG5pbXBvcnQgcmdiMmhleCBmcm9tICcuLi9oZXgvcmdiMmhleC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5uYW1lID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGhleCA9IHJnYjJoZXgodGhpcy5fcmdiLCAncmdiJyk7XG4gICAgZm9yIChsZXQgbiBvZiBPYmplY3Qua2V5cyh3M2N4MTEpKSB7XG4gICAgICAgIGlmICh3M2N4MTFbbl0gPT09IGhleCkgcmV0dXJuIG4udG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIGhleDtcbn07XG5cbmlucHV0LmZvcm1hdC5uYW1lZCA9IChuYW1lKSA9PiB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodzNjeDExW25hbWVdKSByZXR1cm4gaGV4MnJnYih3M2N4MTFbbmFtZV0pO1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb2xvciBuYW1lOiAnICsgbmFtZSk7XG59O1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDUsXG4gICAgdGVzdDogKGgsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgaWYgKCFyZXN0Lmxlbmd0aCAmJiB0eXBlKGgpID09PSAnc3RyaW5nJyAmJiB3M2N4MTFbaC50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgICAgcmV0dXJuICduYW1lZCc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCBudW0ycmdiID0gKG51bSkgPT4ge1xuICAgIGlmICh0eXBlKG51bSkgPT0gJ251bWJlcicgJiYgbnVtID49IDAgJiYgbnVtIDw9IDB4ZmZmZmZmKSB7XG4gICAgICAgIGNvbnN0IHIgPSBudW0gPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAobnVtID4+IDgpICYgMHhmZjtcbiAgICAgICAgY29uc3QgYiA9IG51bSAmIDB4ZmY7XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgMV07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBudW0gY29sb3I6ICcgKyBudW0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbnVtMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmNvbnN0IHJnYjJudW0gPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgcmV0dXJuIChyIDw8IDE2KSArIChnIDw8IDgpICsgYjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJudW07XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IG51bTJyZ2IgZnJvbSAnLi9udW0ycmdiLmpzJztcbmltcG9ydCByZ2IybnVtIGZyb20gJy4vcmdiMm51bS5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5udW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJudW0odGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5udW0gPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdudW0nKTtcblxuaW5wdXQuZm9ybWF0Lm51bSA9IG51bTJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogNSxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBhcmdzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgdHlwZShhcmdzWzBdKSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0gPj0gMCAmJlxuICAgICAgICAgICAgYXJnc1swXSA8PSAweGZmZmZmZlxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAnbnVtJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuQ29sb3IucHJvdG90eXBlLnJnYiA9IGZ1bmN0aW9uIChybmQgPSB0cnVlKSB7XG4gICAgaWYgKHJuZCA9PT0gZmFsc2UpIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwgMyk7XG4gICAgcmV0dXJuIHRoaXMuX3JnYi5zbGljZSgwLCAzKS5tYXAocm91bmQpO1xufTtcblxuQ29sb3IucHJvdG90eXBlLnJnYmEgPSBmdW5jdGlvbiAocm5kID0gdHJ1ZSkge1xuICAgIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwgNCkubWFwKCh2LCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBpIDwgMyA/IChybmQgPT09IGZhbHNlID8gdiA6IHJvdW5kKHYpKSA6IHY7XG4gICAgfSk7XG59O1xuXG5jaHJvbWEucmdiID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAncmdiJyk7XG5cbmlucHV0LmZvcm1hdC5yZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IHJnYmEgPSB1bnBhY2soYXJncywgJ3JnYmEnKTtcbiAgICBpZiAocmdiYVszXSA9PT0gdW5kZWZpbmVkKSByZ2JhWzNdID0gMTtcbiAgICByZXR1cm4gcmdiYTtcbn07XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMyxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGUoYXJncykgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgIChhcmdzLmxlbmd0aCA9PT0gMyB8fFxuICAgICAgICAgICAgICAgIChhcmdzLmxlbmd0aCA9PT0gNCAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlKGFyZ3NbM10pID09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbM10gPj0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBhcmdzWzNdIDw9IDEpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAncmdiJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgIi8qXG4gKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmVpbGJhcnRsZXR0L2NvbG9yLXRlbXBlcmF0dXJlXG4gKi9cblxuY29uc3QgeyBsb2cgfSA9IE1hdGg7XG5cbmNvbnN0IHRlbXBlcmF0dXJlMnJnYiA9IChrZWx2aW4pID0+IHtcbiAgICBjb25zdCB0ZW1wID0ga2VsdmluIC8gMTAwO1xuICAgIGxldCByLCBnLCBiO1xuICAgIGlmICh0ZW1wIDwgNjYpIHtcbiAgICAgICAgciA9IDI1NTtcbiAgICAgICAgZyA9XG4gICAgICAgICAgICB0ZW1wIDwgNlxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogLTE1NS4yNTQ4NTU2MjcwOTE3OSAtXG4gICAgICAgICAgICAgICAgICAwLjQ0NTk2OTUwNDY5NTc5MTMzICogKGcgPSB0ZW1wIC0gMikgK1xuICAgICAgICAgICAgICAgICAgMTA0LjQ5MjE2MTk5MzkzODg4ICogbG9nKGcpO1xuICAgICAgICBiID1cbiAgICAgICAgICAgIHRlbXAgPCAyMFxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogLTI1NC43NjkzNTE4NDEyMDkwMiArXG4gICAgICAgICAgICAgICAgICAwLjgyNzQwOTYwNjQwMDczOTUgKiAoYiA9IHRlbXAgLSAxMCkgK1xuICAgICAgICAgICAgICAgICAgMTE1LjY3OTk0NDAxMDY2MTQ3ICogbG9nKGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHIgPVxuICAgICAgICAgICAgMzUxLjk3NjkwNTY2ODA1NjkzICtcbiAgICAgICAgICAgIDAuMTE0MjA2NDUzNzg0MTY1ICogKHIgPSB0ZW1wIC0gNTUpIC1cbiAgICAgICAgICAgIDQwLjI1MzY2MzA5MzMyMTI3ICogbG9nKHIpO1xuICAgICAgICBnID1cbiAgICAgICAgICAgIDMyNS40NDk0MTI1NzExOTc0ICtcbiAgICAgICAgICAgIDAuMDc5NDM0NTY1MzY2NjIzNDIgKiAoZyA9IHRlbXAgLSA1MCkgLVxuICAgICAgICAgICAgMjguMDg1Mjk2MzUwNzk1NyAqIGxvZyhnKTtcbiAgICAgICAgYiA9IDI1NTtcbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBlcmF0dXJlMnJnYjtcbiIsICIvKlxuICogQmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgTmVpbCBCYXJ0bGV0dFxuICogaHR0cHM6Ly9naXRodWIuY29tL25laWxiYXJ0bGV0dC9jb2xvci10ZW1wZXJhdHVyZVxuICoqL1xuXG5pbXBvcnQgdGVtcGVyYXR1cmUycmdiIGZyb20gJy4vdGVtcGVyYXR1cmUycmdiLmpzJztcbmltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJ0ZW1wZXJhdHVyZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcmdiID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBjb25zdCByID0gcmdiWzBdLFxuICAgICAgICBiID0gcmdiWzJdO1xuICAgIGxldCBtaW5UZW1wID0gMTAwMDtcbiAgICBsZXQgbWF4VGVtcCA9IDQwMDAwO1xuICAgIGNvbnN0IGVwcyA9IDAuNDtcbiAgICBsZXQgdGVtcDtcbiAgICB3aGlsZSAobWF4VGVtcCAtIG1pblRlbXAgPiBlcHMpIHtcbiAgICAgICAgdGVtcCA9IChtYXhUZW1wICsgbWluVGVtcCkgKiAwLjU7XG4gICAgICAgIGNvbnN0IHJnYiA9IHRlbXBlcmF0dXJlMnJnYih0ZW1wKTtcbiAgICAgICAgaWYgKHJnYlsyXSAvIHJnYlswXSA+PSBiIC8gcikge1xuICAgICAgICAgICAgbWF4VGVtcCA9IHRlbXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5UZW1wID0gdGVtcDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm91bmQodGVtcCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IydGVtcGVyYXR1cmU7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgdGVtcGVyYXR1cmUycmdiIGZyb20gJy4vdGVtcGVyYXR1cmUycmdiLmpzJztcbmltcG9ydCByZ2IydGVtcGVyYXR1cmUgZnJvbSAnLi9yZ2IydGVtcGVyYXR1cmUuanMnO1xuXG5Db2xvci5wcm90b3R5cGUudGVtcCA9XG4gICAgQ29sb3IucHJvdG90eXBlLmtlbHZpbiA9XG4gICAgQ29sb3IucHJvdG90eXBlLnRlbXBlcmF0dXJlID1cbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJnYjJ0ZW1wZXJhdHVyZSh0aGlzLl9yZ2IpO1xuICAgICAgICB9O1xuXG5jaHJvbWEudGVtcCA9XG4gICAgY2hyb21hLmtlbHZpbiA9XG4gICAgY2hyb21hLnRlbXBlcmF0dXJlID1cbiAgICAgICAgKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAndGVtcCcpO1xuXG5pbnB1dC5mb3JtYXQudGVtcCA9XG4gICAgaW5wdXQuZm9ybWF0LmtlbHZpbiA9XG4gICAgaW5wdXQuZm9ybWF0LnRlbXBlcmF0dXJlID1cbiAgICAgICAgdGVtcGVyYXR1cmUycmdiO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcG93LCBzaWduIH0gPSBNYXRoO1xuXG4vKlxuICogTCogWzAuLjEwMF1cbiAqIGEgWy0xMDAuLjEwMF1cbiAqIGIgWy0xMDAuLjEwMF1cbiAqL1xuY29uc3Qgb2tsYWIycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICBjb25zdCBbTCwgYSwgYl0gPSBhcmdzO1xuXG4gICAgY29uc3QgbCA9IHBvdyhMICsgMC4zOTYzMzc3Nzc0ICogYSArIDAuMjE1ODAzNzU3MyAqIGIsIDMpO1xuICAgIGNvbnN0IG0gPSBwb3coTCAtIDAuMTA1NTYxMzQ1OCAqIGEgLSAwLjA2Mzg1NDE3MjggKiBiLCAzKTtcbiAgICBjb25zdCBzID0gcG93KEwgLSAwLjA4OTQ4NDE3NzUgKiBhIC0gMS4yOTE0ODU1NDggKiBiLCAzKTtcblxuICAgIHJldHVybiBbXG4gICAgICAgIDI1NSAqIGxyZ2IycmdiKCs0LjA3Njc0MTY2MjEgKiBsIC0gMy4zMDc3MTE1OTEzICogbSArIDAuMjMwOTY5OTI5MiAqIHMpLFxuICAgICAgICAyNTUgKiBscmdiMnJnYigtMS4yNjg0MzgwMDQ2ICogbCArIDIuNjA5NzU3NDAxMSAqIG0gLSAwLjM0MTMxOTM5NjUgKiBzKSxcbiAgICAgICAgMjU1ICogbHJnYjJyZ2IoLTAuMDA0MTk2MDg2MyAqIGwgLSAwLjcwMzQxODYxNDcgKiBtICsgMS43MDc2MTQ3MDEgKiBzKSxcbiAgICAgICAgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb2tsYWIycmdiO1xuXG5mdW5jdGlvbiBscmdiMnJnYihjKSB7XG4gICAgY29uc3QgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgaWYgKGFicyA+IDAuMDAzMTMwOCkge1xuICAgICAgICByZXR1cm4gKHNpZ24oYykgfHwgMSkgKiAoMS4wNTUgKiBwb3coYWJzLCAxIC8gMi40KSAtIDAuMDU1KTtcbiAgICB9XG4gICAgcmV0dXJuIGMgKiAxMi45Mjtcbn1cbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IGNicnQsIHBvdywgc2lnbiB9ID0gTWF0aDtcblxuY29uc3QgcmdiMm9rbGFiID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvLyBPS0xhYiBjb2xvciBzcGFjZSBpbXBsZW1lbnRhdGlvbiB0YWtlbiBmcm9tXG4gICAgLy8gaHR0cHM6Ly9ib3R0b3Nzb24uZ2l0aHViLmlvL3Bvc3RzL29rbGFiL1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgY29uc3QgW2xyLCBsZywgbGJdID0gW1xuICAgICAgICByZ2IybHJnYihyIC8gMjU1KSxcbiAgICAgICAgcmdiMmxyZ2IoZyAvIDI1NSksXG4gICAgICAgIHJnYjJscmdiKGIgLyAyNTUpXG4gICAgXTtcbiAgICBjb25zdCBsID0gY2JydCgwLjQxMjIyMTQ3MDggKiBsciArIDAuNTM2MzMyNTM2MyAqIGxnICsgMC4wNTE0NDU5OTI5ICogbGIpO1xuICAgIGNvbnN0IG0gPSBjYnJ0KDAuMjExOTAzNDk4MiAqIGxyICsgMC42ODA2OTk1NDUxICogbGcgKyAwLjEwNzM5Njk1NjYgKiBsYik7XG4gICAgY29uc3QgcyA9IGNicnQoMC4wODgzMDI0NjE5ICogbHIgKyAwLjI4MTcxODgzNzYgKiBsZyArIDAuNjI5OTc4NzAwNSAqIGxiKTtcblxuICAgIHJldHVybiBbXG4gICAgICAgIDAuMjEwNDU0MjU1MyAqIGwgKyAwLjc5MzYxNzc4NSAqIG0gLSAwLjAwNDA3MjA0NjggKiBzLFxuICAgICAgICAxLjk3Nzk5ODQ5NTEgKiBsIC0gMi40Mjg1OTIyMDUgKiBtICsgMC40NTA1OTM3MDk5ICogcyxcbiAgICAgICAgMC4wMjU5MDQwMzcxICogbCArIDAuNzgyNzcxNzY2MiAqIG0gLSAwLjgwODY3NTc2NiAqIHNcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMm9rbGFiO1xuXG5mdW5jdGlvbiByZ2IybHJnYihjKSB7XG4gICAgY29uc3QgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgaWYgKGFicyA8IDAuMDQwNDUpIHtcbiAgICAgICAgcmV0dXJuIGMgLyAxMi45MjtcbiAgICB9XG4gICAgcmV0dXJuIChzaWduKGMpIHx8IDEpICogcG93KChhYnMgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cbiIsICJpbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCBva2xhYjJyZ2IgZnJvbSAnLi9va2xhYjJyZ2IuanMnO1xuaW1wb3J0IHJnYjJva2xhYiBmcm9tICcuL3JnYjJva2xhYi5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5va2xhYiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMm9rbGFiKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEub2tsYWIgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdva2xhYicpO1xuXG5pbnB1dC5mb3JtYXQub2tsYWIgPSBva2xhYjJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMyxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdva2xhYicpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdva2xhYic7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMmxhYiBmcm9tICcuLi9sY2gvbGNoMmxhYi5qcyc7XG5pbXBvcnQgb2tsYWIycmdiIGZyb20gJy4uL29rbGFiL29rbGFiMnJnYi5qcyc7XG5cbmNvbnN0IG9rbGNoMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGNoJyk7XG4gICAgY29uc3QgW2wsIGMsIGhdID0gYXJncztcbiAgICBjb25zdCBbTCwgYSwgYl9dID0gbGNoMmxhYihsLCBjLCBoKTtcbiAgICBjb25zdCBbciwgZywgYl0gPSBva2xhYjJyZ2IoTCwgYSwgYl8pO1xuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb2tsY2gycmdiO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCByZ2Iyb2tsYWIgZnJvbSAnLi4vb2tsYWIvcmdiMm9rbGFiLmpzJztcbmltcG9ydCBsYWIybGNoIGZyb20gJy4uL2xjaC9sYWIybGNoLmpzJztcblxuY29uc3QgcmdiMm9rbGNoID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGNvbnN0IFtsLCBhLCBiX10gPSByZ2Iyb2tsYWIociwgZywgYik7XG4gICAgcmV0dXJuIGxhYjJsY2gobCwgYSwgYl8pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMm9rbGNoO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IG9rbGNoMnJnYiBmcm9tICcuL29rbGNoMnJnYi5qcyc7XG5pbXBvcnQgcmdiMm9rbGNoIGZyb20gJy4vcmdiMm9rbGNoLmpzJztcblxuQ29sb3IucHJvdG90eXBlLm9rbGNoID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2Iyb2tsY2godGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5va2xjaCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ29rbGNoJyk7XG5cbmlucHV0LmZvcm1hdC5va2xjaCA9IG9rbGNoMnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAzLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ29rbGNoJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ29rbGNoJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUuYWxwaGEgPSBmdW5jdGlvbiAoYSwgbXV0YXRlID0gZmFsc2UpIHtcbiAgICBpZiAoYSAhPT0gdW5kZWZpbmVkICYmIHR5cGUoYSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChtdXRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3JnYlszXSA9IGE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFt0aGlzLl9yZ2JbMF0sIHRoaXMuX3JnYlsxXSwgdGhpcy5fcmdiWzJdLCBhXSwgJ3JnYicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmdiWzNdO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuY2xpcHBlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiLl9jbGlwcGVkIHx8IGZhbHNlO1xufTtcbiIsICJpbXBvcnQgJy4uL2lvL2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IExBQl9DT05TVEFOVFMgZnJvbSAnLi4vaW8vbGFiL2xhYi1jb25zdGFudHMuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuZGFya2VuID0gZnVuY3Rpb24gKGFtb3VudCA9IDEpIHtcbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY29uc3QgbGFiID0gbWUubGFiKCk7XG4gICAgbGFiWzBdIC09IExBQl9DT05TVEFOVFMuS24gKiBhbW91bnQ7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKS5hbHBoYShtZS5hbHBoYSgpLCB0cnVlKTtcbn07XG5cbkNvbG9yLnByb3RvdHlwZS5icmlnaHRlbiA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgcmV0dXJuIHRoaXMuZGFya2VuKC1hbW91bnQpO1xufTtcblxuQ29sb3IucHJvdG90eXBlLmRhcmtlciA9IENvbG9yLnByb3RvdHlwZS5kYXJrZW47XG5Db2xvci5wcm90b3R5cGUuYnJpZ2h0ZXIgPSBDb2xvci5wcm90b3R5cGUuYnJpZ2h0ZW47XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChtYykge1xuICAgIGNvbnN0IFttb2RlLCBjaGFubmVsXSA9IG1jLnNwbGl0KCcuJyk7XG4gICAgY29uc3Qgc3JjID0gdGhpc1ttb2RlXSgpO1xuICAgIGlmIChjaGFubmVsKSB7XG4gICAgICAgIGNvbnN0IGkgPSBtb2RlLmluZGV4T2YoY2hhbm5lbCkgLSAobW9kZS5zdWJzdHIoMCwgMikgPT09ICdvaycgPyAyIDogMCk7XG4gICAgICAgIGlmIChpID4gLTEpIHJldHVybiBzcmNbaV07XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjaGFubmVsICR7Y2hhbm5lbH0gaW4gbW9kZSAke21vZGV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBwb3cgfSA9IE1hdGg7XG5cbmNvbnN0IEVQUyA9IDFlLTc7XG5jb25zdCBNQVhfSVRFUiA9IDIwO1xuXG5Db2xvci5wcm90b3R5cGUubHVtaW5hbmNlID0gZnVuY3Rpb24gKGx1bSwgbW9kZSA9ICdyZ2InKSB7XG4gICAgaWYgKGx1bSAhPT0gdW5kZWZpbmVkICYmIHR5cGUobHVtKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGx1bSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIHB1cmUgYmxhY2tcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoWzAsIDAsIDAsIHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobHVtID09PSAxKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gcHVyZSB3aGl0ZVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbMjU1LCAyNTUsIDI1NSwgdGhpcy5fcmdiWzNdXSwgJ3JnYicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbXB1dGUgbmV3IGNvbG9yIHVzaW5nLi4uXG4gICAgICAgIGxldCBjdXJfbHVtID0gdGhpcy5sdW1pbmFuY2UoKTtcbiAgICAgICAgbGV0IG1heF9pdGVyID0gTUFYX0lURVI7XG5cbiAgICAgICAgY29uc3QgdGVzdCA9IChsb3csIGhpZ2gpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1pZCA9IGxvdy5pbnRlcnBvbGF0ZShoaWdoLCAwLjUsIG1vZGUpO1xuICAgICAgICAgICAgY29uc3QgbG0gPSBtaWQubHVtaW5hbmNlKCk7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobHVtIC0gbG0pIDwgRVBTIHx8ICFtYXhfaXRlci0tKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgZW5vdWdoXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsbSA+IGx1bSA/IHRlc3QobG93LCBtaWQpIDogdGVzdChtaWQsIGhpZ2gpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJnYiA9IChcbiAgICAgICAgICAgIGN1cl9sdW0gPiBsdW1cbiAgICAgICAgICAgICAgICA/IHRlc3QobmV3IENvbG9yKFswLCAwLCAwXSksIHRoaXMpXG4gICAgICAgICAgICAgICAgOiB0ZXN0KHRoaXMsIG5ldyBDb2xvcihbMjU1LCAyNTUsIDI1NV0pKVxuICAgICAgICApLnJnYigpO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFsuLi5yZ2IsIHRoaXMuX3JnYlszXV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmdiMmx1bWluYW5jZSguLi50aGlzLl9yZ2Iuc2xpY2UoMCwgMykpO1xufTtcblxuY29uc3QgcmdiMmx1bWluYW5jZSA9IChyLCBnLCBiKSA9PiB7XG4gICAgLy8gcmVsYXRpdmUgbHVtaW5hbmNlXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICByID0gbHVtaW5hbmNlX3gocik7XG4gICAgZyA9IGx1bWluYW5jZV94KGcpO1xuICAgIGIgPSBsdW1pbmFuY2VfeChiKTtcbiAgICByZXR1cm4gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xufTtcblxuY29uc3QgbHVtaW5hbmNlX3ggPSAoeCkgPT4ge1xuICAgIHggLz0gMjU1O1xuICAgIHJldHVybiB4IDw9IDAuMDM5MjggPyB4IC8gMTIuOTIgOiBwb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn07XG4iLCAiZXhwb3J0IGRlZmF1bHQge307XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCB7IHR5cGUgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdG9yIGZyb20gJy4uL2ludGVycG9sYXRvci9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChjb2wxLCBjb2wyLCBmID0gMC41LCAuLi5yZXN0KSA9PiB7XG4gICAgbGV0IG1vZGUgPSByZXN0WzBdIHx8ICdscmdiJztcbiAgICBpZiAoIWludGVycG9sYXRvclttb2RlXSAmJiAhcmVzdC5sZW5ndGgpIHtcbiAgICAgICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBzdXBwb3J0ZWQgbW9kZVxuICAgICAgICBtb2RlID0gT2JqZWN0LmtleXMoaW50ZXJwb2xhdG9yKVswXTtcbiAgICB9XG4gICAgaWYgKCFpbnRlcnBvbGF0b3JbbW9kZV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnRlcnBvbGF0aW9uIG1vZGUgJHttb2RlfSBpcyBub3QgZGVmaW5lZGApO1xuICAgIH1cbiAgICBpZiAodHlwZShjb2wxKSAhPT0gJ29iamVjdCcpIGNvbDEgPSBuZXcgQ29sb3IoY29sMSk7XG4gICAgaWYgKHR5cGUoY29sMikgIT09ICdvYmplY3QnKSBjb2wyID0gbmV3IENvbG9yKGNvbDIpO1xuICAgIHJldHVybiBpbnRlcnBvbGF0b3JbbW9kZV0oY29sMSwgY29sMiwgZikuYWxwaGEoXG4gICAgICAgIGNvbDEuYWxwaGEoKSArIGYgKiAoY29sMi5hbHBoYSgpIC0gY29sMS5hbHBoYSgpKVxuICAgICk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4uL2dlbmVyYXRvci9taXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUubWl4ID0gQ29sb3IucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVuY3Rpb24gKFxuICAgIGNvbDIsXG4gICAgZiA9IDAuNSxcbiAgICAuLi5yZXN0XG4pIHtcbiAgICByZXR1cm4gbWl4KHRoaXMsIGNvbDIsIGYsIC4uLnJlc3QpO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5Db2xvci5wcm90b3R5cGUucHJlbXVsdGlwbHkgPSBmdW5jdGlvbiAobXV0YXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgY29uc3QgYSA9IHJnYlszXTtcbiAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JnYiA9IFtyZ2JbMF0gKiBhLCByZ2JbMV0gKiBhLCByZ2JbMl0gKiBhLCBhXTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbcmdiWzBdICogYSwgcmdiWzFdICogYSwgcmdiWzJdICogYSwgYV0sICdyZ2InKTtcbiAgICB9XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgTEFCX0NPTlNUQU5UUyBmcm9tICcuLi9pby9sYWIvbGFiLWNvbnN0YW50cy5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIGNvbnN0IGxjaCA9IG1lLmxjaCgpO1xuICAgIGxjaFsxXSArPSBMQUJfQ09OU1RBTlRTLktuICogYW1vdW50O1xuICAgIGlmIChsY2hbMV0gPCAwKSBsY2hbMV0gPSAwO1xuICAgIHJldHVybiBuZXcgQ29sb3IobGNoLCAnbGNoJykuYWxwaGEobWUuYWxwaGEoKSwgdHJ1ZSk7XG59O1xuXG5Db2xvci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgcmV0dXJuIHRoaXMuc2F0dXJhdGUoLWFtb3VudCk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG1jLCB2YWx1ZSwgbXV0YXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCBbbW9kZSwgY2hhbm5lbF0gPSBtYy5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHNyYyA9IHRoaXNbbW9kZV0oKTtcbiAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgICBjb25zdCBpID0gbW9kZS5pbmRleE9mKGNoYW5uZWwpIC0gKG1vZGUuc3Vic3RyKDAsIDIpID09PSAnb2snID8gMiA6IDApO1xuICAgICAgICBpZiAoaSA+IC0xKSB7XG4gICAgICAgICAgICBpZiAodHlwZSh2YWx1ZSkgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLmNoYXJBdCgwKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSArPSArdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gKz0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldICo9ICt2YWx1ZS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnLyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gLz0gK3ZhbHVlLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldID0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSh2YWx1ZSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3JjW2ldID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdmFsdWUgZm9yIENvbG9yLnNldGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3V0ID0gbmV3IENvbG9yKHNyYywgbW9kZSk7XG4gICAgICAgICAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmdiID0gb3V0Ll9yZ2I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjaGFubmVsICR7Y2hhbm5lbH0gaW4gbW9kZSAke21vZGV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGFiL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4uL2dlbmVyYXRvci9taXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUudGludCA9IGZ1bmN0aW9uIChmID0gMC41LCAuLi5yZXN0KSB7XG4gICAgcmV0dXJuIG1peCh0aGlzLCAnd2hpdGUnLCBmLCAuLi5yZXN0KTtcbn07XG5cbkNvbG9yLnByb3RvdHlwZS5zaGFkZSA9IGZ1bmN0aW9uIChmID0gMC41LCAuLi5yZXN0KSB7XG4gICAgcmV0dXJuIG1peCh0aGlzLCAnYmxhY2snLCBmLCAuLi5yZXN0KTtcbn07XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgcmdiID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCB4eXowID0gY29sMS5fcmdiO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLl9yZ2I7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXSAtIHh5ejBbMF0pLFxuICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdIC0geHl6MFsxXSksXG4gICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0gLSB4eXowWzJdKSxcbiAgICAgICAgJ3JnYidcbiAgICApO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5yZ2IgPSByZ2I7XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuY29uc3QgeyBzcXJ0LCBwb3cgfSA9IE1hdGg7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IGxyZ2IgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IFt4MSwgeTEsIHoxXSA9IGNvbDEuX3JnYjtcbiAgICBjb25zdCBbeDIsIHkyLCB6Ml0gPSBjb2wyLl9yZ2I7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgc3FydChwb3coeDEsIDIpICogKDEgLSBmKSArIHBvdyh4MiwgMikgKiBmKSxcbiAgICAgICAgc3FydChwb3coeTEsIDIpICogKDEgLSBmKSArIHBvdyh5MiwgMikgKiBmKSxcbiAgICAgICAgc3FydChwb3coejEsIDIpICogKDEgLSBmKSArIHBvdyh6MiwgMikgKiBmKSxcbiAgICAgICAgJ3JnYidcbiAgICApO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5scmdiID0gbHJnYjtcblxuZXhwb3J0IGRlZmF1bHQgbHJnYjtcbiIsICJpbXBvcnQgJy4uL2lvL2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5jb25zdCBsYWIgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IHh5ejAgPSBjb2wxLmxhYigpO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLmxhYigpO1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0gLSB4eXowWzBdKSxcbiAgICAgICAgeHl6MFsxXSArIGYgKiAoeHl6MVsxXSAtIHh5ejBbMV0pLFxuICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdIC0geHl6MFsyXSksXG4gICAgICAgICdsYWInXG4gICAgKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubGFiID0gbGFiO1xuXG5leHBvcnQgZGVmYXVsdCBsYWI7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKGNvbDEsIGNvbDIsIGYsIG0pID0+IHtcbiAgICBsZXQgeHl6MCwgeHl6MTtcbiAgICBpZiAobSA9PT0gJ2hzbCcpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHNsKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzbCgpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzdicpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHN2KCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzdigpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hjZycpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaGNnKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhjZygpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzaScpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHNpKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzaSgpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2xjaCcgfHwgbSA9PT0gJ2hjbCcpIHtcbiAgICAgICAgbSA9ICdoY2wnO1xuICAgICAgICB4eXowID0gY29sMS5oY2woKTtcbiAgICAgICAgeHl6MSA9IGNvbDIuaGNsKCk7XG4gICAgfSBlbHNlIGlmIChtID09PSAnb2tsY2gnKSB7XG4gICAgICAgIHh5ejAgPSBjb2wxLm9rbGNoKCkucmV2ZXJzZSgpO1xuICAgICAgICB4eXoxID0gY29sMi5va2xjaCgpLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBsZXQgaHVlMCwgaHVlMSwgc2F0MCwgc2F0MSwgbGJ2MCwgbGJ2MTtcbiAgICBpZiAobS5zdWJzdHIoMCwgMSkgPT09ICdoJyB8fCBtID09PSAnb2tsY2gnKSB7XG4gICAgICAgIFtodWUwLCBzYXQwLCBsYnYwXSA9IHh5ejA7XG4gICAgICAgIFtodWUxLCBzYXQxLCBsYnYxXSA9IHh5ejE7XG4gICAgfVxuXG4gICAgbGV0IHNhdCwgaHVlLCBsYnYsIGRoO1xuXG4gICAgaWYgKCFpc05hTihodWUwKSAmJiAhaXNOYU4oaHVlMSkpIHtcbiAgICAgICAgLy8gYm90aCBjb2xvcnMgaGF2ZSBodWVcbiAgICAgICAgaWYgKGh1ZTEgPiBodWUwICYmIGh1ZTEgLSBodWUwID4gMTgwKSB7XG4gICAgICAgICAgICBkaCA9IGh1ZTEgLSAoaHVlMCArIDM2MCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaHVlMSA8IGh1ZTAgJiYgaHVlMCAtIGh1ZTEgPiAxODApIHtcbiAgICAgICAgICAgIGRoID0gaHVlMSArIDM2MCAtIGh1ZTA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaCA9IGh1ZTEgLSBodWUwO1xuICAgICAgICB9XG4gICAgICAgIGh1ZSA9IGh1ZTAgKyBmICogZGg7XG4gICAgfSBlbHNlIGlmICghaXNOYU4oaHVlMCkpIHtcbiAgICAgICAgaHVlID0gaHVlMDtcbiAgICAgICAgaWYgKChsYnYxID09IDEgfHwgbGJ2MSA9PSAwKSAmJiBtICE9ICdoc3YnKSBzYXQgPSBzYXQwO1xuICAgIH0gZWxzZSBpZiAoIWlzTmFOKGh1ZTEpKSB7XG4gICAgICAgIGh1ZSA9IGh1ZTE7XG4gICAgICAgIGlmICgobGJ2MCA9PSAxIHx8IGxidjAgPT0gMCkgJiYgbSAhPSAnaHN2Jykgc2F0ID0gc2F0MTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBodWUgPSBOdW1iZXIuTmFOO1xuICAgIH1cblxuICAgIGlmIChzYXQgPT09IHVuZGVmaW5lZCkgc2F0ID0gc2F0MCArIGYgKiAoc2F0MSAtIHNhdDApO1xuICAgIGxidiA9IGxidjAgKyBmICogKGxidjEgLSBsYnYwKTtcbiAgICByZXR1cm4gbSA9PT0gJ29rbGNoJ1xuICAgICAgICA/IG5ldyBDb2xvcihbbGJ2LCBzYXQsIGh1ZV0sIG0pXG4gICAgICAgIDogbmV3IENvbG9yKFtodWUsIHNhdCwgbGJ2XSwgbSk7XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgbGNoID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdsY2gnKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubGNoID0gbGNoO1xuaW5kZXguaGNsID0gbGNoO1xuXG5leHBvcnQgZGVmYXVsdCBsY2g7XG4iLCAiaW1wb3J0ICcuLi9pby9udW0vaW5kZXguanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5jb25zdCBudW0gPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IGMxID0gY29sMS5udW0oKTtcbiAgICBjb25zdCBjMiA9IGNvbDIubnVtKCk7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihjMSArIGYgKiAoYzIgLSBjMSksICdudW0nKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubnVtID0gbnVtO1xuXG5leHBvcnQgZGVmYXVsdCBudW07XG4iLCAiaW1wb3J0ICcuLi9pby9oY2cvaW5kZXguanMnO1xuaW1wb3J0IGludGVycG9sYXRlX2hzeCBmcm9tICcuL19oc3guanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCBoY2cgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ2hjZycpO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5oY2cgPSBoY2c7XG5cbmV4cG9ydCBkZWZhdWx0IGhjZztcbiIsICJpbXBvcnQgJy4uL2lvL2hzaS9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdGVfaHN4IGZyb20gJy4vX2hzeC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IGhzaSA9IChjb2wxLCBjb2wyLCBmKSA9PiB7XG4gICAgcmV0dXJuIGludGVycG9sYXRlX2hzeChjb2wxLCBjb2wyLCBmLCAnaHNpJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4LmhzaSA9IGhzaTtcblxuZXhwb3J0IGRlZmF1bHQgaHNpO1xuIiwgImltcG9ydCAnLi4vaW8vaHNsL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgaHNsID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdoc2wnKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXguaHNsID0gaHNsO1xuXG5leHBvcnQgZGVmYXVsdCBoc2w7XG4iLCAiaW1wb3J0ICcuLi9pby9oc3YvaW5kZXguanMnO1xuaW1wb3J0IGludGVycG9sYXRlX2hzeCBmcm9tICcuL19oc3guanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCBoc3YgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ2hzdicpO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5oc3YgPSBoc3Y7XG5cbmV4cG9ydCBkZWZhdWx0IGhzdjtcbiIsICJpbXBvcnQgJy4uL2lvL29rbGFiL2luZGV4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5cbmNvbnN0IG9rbGFiID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCB4eXowID0gY29sMS5va2xhYigpO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLm9rbGFiKCk7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXSAtIHh5ejBbMF0pLFxuICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdIC0geHl6MFsxXSksXG4gICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0gLSB4eXowWzJdKSxcbiAgICAgICAgJ29rbGFiJ1xuICAgICk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4Lm9rbGFiID0gb2tsYWI7XG5cbmV4cG9ydCBkZWZhdWx0IG9rbGFiO1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3Qgb2tsY2ggPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ29rbGNoJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4Lm9rbGNoID0gb2tsY2g7XG5cbmV4cG9ydCBkZWZhdWx0IG9rbGNoO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyBjbGlwX3JnYiB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcblxuY29uc3QgeyBwb3csIHNxcnQsIFBJLCBjb3MsIHNpbiwgYXRhbjIgfSA9IE1hdGg7XG5cbmV4cG9ydCBkZWZhdWx0IChjb2xvcnMsIG1vZGUgPSAnbHJnYicsIHdlaWdodHMgPSBudWxsKSA9PiB7XG4gICAgY29uc3QgbCA9IGNvbG9ycy5sZW5ndGg7XG4gICAgaWYgKCF3ZWlnaHRzKSB3ZWlnaHRzID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobCkpLm1hcCgoKSA9PiAxKTtcbiAgICAvLyBub3JtYWxpemUgd2VpZ2h0c1xuICAgIGNvbnN0IGsgPVxuICAgICAgICBsIC9cbiAgICAgICAgd2VpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhICsgYjtcbiAgICAgICAgfSk7XG4gICAgd2VpZ2h0cy5mb3JFYWNoKCh3LCBpKSA9PiB7XG4gICAgICAgIHdlaWdodHNbaV0gKj0gaztcbiAgICB9KTtcbiAgICAvLyBjb252ZXJ0IGNvbG9ycyB0byBDb2xvciBvYmplY3RzXG4gICAgY29sb3JzID0gY29sb3JzLm1hcCgoYykgPT4gbmV3IENvbG9yKGMpKTtcbiAgICBpZiAobW9kZSA9PT0gJ2xyZ2InKSB7XG4gICAgICAgIHJldHVybiBfYXZlcmFnZV9scmdiKGNvbG9ycywgd2VpZ2h0cyk7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0ID0gY29sb3JzLnNoaWZ0KCk7XG4gICAgY29uc3QgeHl6ID0gZmlyc3QuZ2V0KG1vZGUpO1xuICAgIGNvbnN0IGNudCA9IFtdO1xuICAgIGxldCBkeCA9IDA7XG4gICAgbGV0IGR5ID0gMDtcbiAgICAvLyBpbml0aWFsIGNvbG9yXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4eXoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgeHl6W2ldID0gKHh5eltpXSB8fCAwKSAqIHdlaWdodHNbMF07XG4gICAgICAgIGNudC5wdXNoKGlzTmFOKHh5eltpXSkgPyAwIDogd2VpZ2h0c1swXSk7XG4gICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnICYmICFpc05hTih4eXpbaV0pKSB7XG4gICAgICAgICAgICBjb25zdCBBID0gKHh5eltpXSAvIDE4MCkgKiBQSTtcbiAgICAgICAgICAgIGR4ICs9IGNvcyhBKSAqIHdlaWdodHNbMF07XG4gICAgICAgICAgICBkeSArPSBzaW4oQSkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGFscGhhID0gZmlyc3QuYWxwaGEoKSAqIHdlaWdodHNbMF07XG4gICAgY29sb3JzLmZvckVhY2goKGMsIGNpKSA9PiB7XG4gICAgICAgIGNvbnN0IHh5ejIgPSBjLmdldChtb2RlKTtcbiAgICAgICAgYWxwaGEgKz0gYy5hbHBoYSgpICogd2VpZ2h0c1tjaSArIDFdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHh5ei5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFpc05hTih4eXoyW2ldKSkge1xuICAgICAgICAgICAgICAgIGNudFtpXSArPSB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUuY2hhckF0KGkpID09PSAnaCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQSA9ICh4eXoyW2ldIC8gMTgwKSAqIFBJO1xuICAgICAgICAgICAgICAgICAgICBkeCArPSBjb3MoQSkgKiB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIGR5ICs9IHNpbihBKSAqIHdlaWdodHNbY2kgKyAxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB4eXpbaV0gKz0geHl6MltpXSAqIHdlaWdodHNbY2kgKyAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeHl6Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICBsZXQgQSA9IChhdGFuMihkeSAvIGNudFtpXSwgZHggLyBjbnRbaV0pIC8gUEkpICogMTgwO1xuICAgICAgICAgICAgd2hpbGUgKEEgPCAwKSBBICs9IDM2MDtcbiAgICAgICAgICAgIHdoaWxlIChBID49IDM2MCkgQSAtPSAzNjA7XG4gICAgICAgICAgICB4eXpbaV0gPSBBO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeHl6W2ldID0geHl6W2ldIC8gY250W2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFscGhhIC89IGw7XG4gICAgcmV0dXJuIG5ldyBDb2xvcih4eXosIG1vZGUpLmFscGhhKGFscGhhID4gMC45OTk5OSA/IDEgOiBhbHBoYSwgdHJ1ZSk7XG59O1xuXG5jb25zdCBfYXZlcmFnZV9scmdiID0gKGNvbG9ycywgd2VpZ2h0cykgPT4ge1xuICAgIGNvbnN0IGwgPSBjb2xvcnMubGVuZ3RoO1xuICAgIGNvbnN0IHh5eiA9IFswLCAwLCAwLCAwXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb2wgPSBjb2xvcnNbaV07XG4gICAgICAgIGNvbnN0IGYgPSB3ZWlnaHRzW2ldIC8gbDtcbiAgICAgICAgY29uc3QgcmdiID0gY29sLl9yZ2I7XG4gICAgICAgIHh5elswXSArPSBwb3cocmdiWzBdLCAyKSAqIGY7XG4gICAgICAgIHh5elsxXSArPSBwb3cocmdiWzFdLCAyKSAqIGY7XG4gICAgICAgIHh5elsyXSArPSBwb3cocmdiWzJdLCAyKSAqIGY7XG4gICAgICAgIHh5elszXSArPSByZ2JbM10gKiBmO1xuICAgIH1cbiAgICB4eXpbMF0gPSBzcXJ0KHh5elswXSk7XG4gICAgeHl6WzFdID0gc3FydCh4eXpbMV0pO1xuICAgIHh5elsyXSA9IHNxcnQoeHl6WzJdKTtcbiAgICBpZiAoeHl6WzNdID4gMC45OTk5OTk5KSB4eXpbM10gPSAxO1xuICAgIHJldHVybiBuZXcgQ29sb3IoY2xpcF9yZ2IoeHl6KSk7XG59O1xuIiwgIi8vIG1pbmltYWwgbXVsdGktcHVycG9zZSBpbnRlcmZhY2VcblxuLy8gQHJlcXVpcmVzIHV0aWxzIGNvbG9yIGFuYWx5emVcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vY2hyb21hLmpzJztcbmltcG9ydCB7IGxpbWl0LCB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCB7IHBvdyB9ID0gTWF0aDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGNvbG9ycykge1xuICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgbGV0IF9tb2RlID0gJ3JnYic7XG4gICAgbGV0IF9uYWNvbCA9IGNocm9tYSgnI2NjYycpO1xuICAgIGxldCBfc3ByZWFkID0gMDtcbiAgICAvLyBjb25zdCBfZml4ZWQgPSBmYWxzZTtcbiAgICBsZXQgX2RvbWFpbiA9IFswLCAxXTtcbiAgICBsZXQgX3BvcyA9IFtdO1xuICAgIGxldCBfcGFkZGluZyA9IFswLCAwXTtcbiAgICBsZXQgX2NsYXNzZXMgPSBmYWxzZTtcbiAgICBsZXQgX2NvbG9ycyA9IFtdO1xuICAgIGxldCBfb3V0ID0gZmFsc2U7XG4gICAgbGV0IF9taW4gPSAwO1xuICAgIGxldCBfbWF4ID0gMTtcbiAgICBsZXQgX2NvcnJlY3RMaWdodG5lc3MgPSBmYWxzZTtcbiAgICBsZXQgX2NvbG9yQ2FjaGUgPSB7fTtcbiAgICBsZXQgX3VzZUNhY2hlID0gdHJ1ZTtcbiAgICBsZXQgX2dhbW1hID0gMTtcblxuICAgIC8vIHByaXZhdGUgbWV0aG9kc1xuXG4gICAgY29uc3Qgc2V0Q29sb3JzID0gZnVuY3Rpb24gKGNvbG9ycykge1xuICAgICAgICBjb2xvcnMgPSBjb2xvcnMgfHwgWycjZmZmJywgJyMwMDAnXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29sb3JzICYmXG4gICAgICAgICAgICB0eXBlKGNvbG9ycykgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICBjaHJvbWEuYnJld2VyICYmXG4gICAgICAgICAgICBjaHJvbWEuYnJld2VyW2NvbG9ycy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbG9ycyA9IGNocm9tYS5icmV3ZXJbY29sb3JzLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlKGNvbG9ycykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBzaW5nbGUgY29sb3JcbiAgICAgICAgICAgIGlmIChjb2xvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY29sb3JzID0gW2NvbG9yc1swXSwgY29sb3JzWzBdXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG1ha2UgYSBjb3B5IG9mIHRoZSBjb2xvcnNcbiAgICAgICAgICAgIGNvbG9ycyA9IGNvbG9ycy5zbGljZSgwKTtcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gY2hyb21hIGNsYXNzZXNcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY29sb3JzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgY29sb3JzW2NdID0gY2hyb21hKGNvbG9yc1tjXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhdXRvLWZpbGwgY29sb3IgcG9zaXRpb25cbiAgICAgICAgICAgIF9wb3MubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY29sb3JzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgX3Bvcy5wdXNoKGMgLyAoY29sb3JzLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXNldENhY2hlKCk7XG4gICAgICAgIHJldHVybiAoX2NvbG9ycyA9IGNvbG9ycyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldENsYXNzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmIChfY2xhc3NlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gX2NsYXNzZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChpIDwgbiAmJiB2YWx1ZSA+PSBfY2xhc3Nlc1tpXSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpIC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9O1xuXG4gICAgbGV0IHRNYXBMaWdodG5lc3MgPSAodCkgPT4gdDtcbiAgICBsZXQgdE1hcERvbWFpbiA9ICh0KSA9PiB0O1xuXG4gICAgLy8gY29uc3QgY2xhc3NpZnlWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgLy8gICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAvLyAgICAgaWYgKF9jbGFzc2VzLmxlbmd0aCA+IDIpIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IG4gPSBfY2xhc3Nlcy5sZW5ndGgtMTtcbiAgICAvLyAgICAgICAgIGNvbnN0IGkgPSBnZXRDbGFzcyh2YWx1ZSk7XG4gICAgLy8gICAgICAgICBjb25zdCBtaW5jID0gX2NsYXNzZXNbMF0gKyAoKF9jbGFzc2VzWzFdLV9jbGFzc2VzWzBdKSAqICgwICsgKF9zcHJlYWQgKiAwLjUpKSk7ICAvLyBjZW50ZXIgb2YgMXN0IGNsYXNzXG4gICAgLy8gICAgICAgICBjb25zdCBtYXhjID0gX2NsYXNzZXNbbi0xXSArICgoX2NsYXNzZXNbbl0tX2NsYXNzZXNbbi0xXSkgKiAoMSAtIChfc3ByZWFkICogMC41KSkpOyAgLy8gY2VudGVyIG9mIGxhc3QgY2xhc3NcbiAgICAvLyAgICAgICAgIHZhbCA9IF9taW4gKyAoKCgoX2NsYXNzZXNbaV0gKyAoKF9jbGFzc2VzW2krMV0gLSBfY2xhc3Nlc1tpXSkgKiAwLjUpKSAtIG1pbmMpIC8gKG1heGMtbWluYykpICogKF9tYXggLSBfbWluKSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgcmV0dXJuIHZhbDtcbiAgICAvLyB9O1xuXG4gICAgY29uc3QgZ2V0Q29sb3IgPSBmdW5jdGlvbiAodmFsLCBieXBhc3NNYXApIHtcbiAgICAgICAgbGV0IGNvbCwgdDtcbiAgICAgICAgaWYgKGJ5cGFzc01hcCA9PSBudWxsKSB7XG4gICAgICAgICAgICBieXBhc3NNYXAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOYU4odmFsKSB8fCB2YWwgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBfbmFjb2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgIGlmIChfY2xhc3NlcyAmJiBfY2xhc3Nlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgY2xhc3NcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gZ2V0Q2xhc3ModmFsKTtcbiAgICAgICAgICAgICAgICB0ID0gYyAvIChfY2xhc3Nlcy5sZW5ndGggLSAyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX21heCAhPT0gX21pbikge1xuICAgICAgICAgICAgICAgIC8vIGp1c3QgaW50ZXJwb2xhdGUgYmV0d2VlbiBtaW4vbWF4XG4gICAgICAgICAgICAgICAgdCA9ICh2YWwgLSBfbWluKSAvIChfbWF4IC0gX21pbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHQgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdCA9IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbWFpbiBtYXBcbiAgICAgICAgdCA9IHRNYXBEb21haW4odCk7XG5cbiAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgIHQgPSB0TWFwTGlnaHRuZXNzKHQpOyAvLyBsaWdodG5lc3MgY29ycmVjdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9nYW1tYSAhPT0gMSkge1xuICAgICAgICAgICAgdCA9IHBvdyh0LCBfZ2FtbWEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdCA9IF9wYWRkaW5nWzBdICsgdCAqICgxIC0gX3BhZGRpbmdbMF0gLSBfcGFkZGluZ1sxXSk7XG5cbiAgICAgICAgdCA9IGxpbWl0KHQsIDAsIDEpO1xuXG4gICAgICAgIGNvbnN0IGsgPSBNYXRoLmZsb29yKHQgKiAxMDAwMCk7XG5cbiAgICAgICAgaWYgKF91c2VDYWNoZSAmJiBfY29sb3JDYWNoZVtrXSkge1xuICAgICAgICAgICAgY29sID0gX2NvbG9yQ2FjaGVba107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZShfY29sb3JzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgIC8vZm9yIGkgaW4gWzAuLl9wb3MubGVuZ3RoLTFdXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfcG9zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBfcG9zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodCA8PSBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj0gcCAmJiBpID09PSBfcG9zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCA+IHAgJiYgdCA8IF9wb3NbaSArIDFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gKHQgLSBwKSAvIChfcG9zW2kgKyAxXSAtIHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gY2hyb21hLmludGVycG9sYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xvcnNbaV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbG9yc1tpICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlKF9jb2xvcnMpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29sID0gX2NvbG9ycyh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfdXNlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICBfY29sb3JDYWNoZVtrXSA9IGNvbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sO1xuICAgIH07XG5cbiAgICB2YXIgcmVzZXRDYWNoZSA9ICgpID0+IChfY29sb3JDYWNoZSA9IHt9KTtcblxuICAgIHNldENvbG9ycyhjb2xvcnMpO1xuXG4gICAgLy8gcHVibGljIGludGVyZmFjZVxuXG4gICAgY29uc3QgZiA9IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIGNvbnN0IGMgPSBjaHJvbWEoZ2V0Q29sb3IodikpO1xuICAgICAgICBpZiAoX291dCAmJiBjW19vdXRdKSB7XG4gICAgICAgICAgICByZXR1cm4gY1tfb3V0XSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5jbGFzc2VzID0gZnVuY3Rpb24gKGNsYXNzZXMpIHtcbiAgICAgICAgaWYgKGNsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGUoY2xhc3NlcykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IGNsYXNzZXM7XG4gICAgICAgICAgICAgICAgX2RvbWFpbiA9IFtjbGFzc2VzWzBdLCBjbGFzc2VzW2NsYXNzZXMubGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gY2hyb21hLmFuYWx5emUoX2RvbWFpbik7XG4gICAgICAgICAgICAgICAgaWYgKGNsYXNzZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBbZC5taW4sIGQubWF4XTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IGNocm9tYS5saW1pdHMoZCwgJ2UnLCBjbGFzc2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2NsYXNzZXM7XG4gICAgfTtcblxuICAgIGYuZG9tYWluID0gZnVuY3Rpb24gKGRvbWFpbikge1xuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBfZG9tYWluO1xuICAgICAgICB9XG4gICAgICAgIF9taW4gPSBkb21haW5bMF07XG4gICAgICAgIF9tYXggPSBkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdO1xuICAgICAgICBfcG9zID0gW107XG4gICAgICAgIGNvbnN0IGsgPSBfY29sb3JzLmxlbmd0aDtcbiAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPT09IGsgJiYgX21pbiAhPT0gX21heCkge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHBvc2l0aW9uc1xuICAgICAgICAgICAgZm9yIChsZXQgZCBvZiBBcnJheS5mcm9tKGRvbWFpbikpIHtcbiAgICAgICAgICAgICAgICBfcG9zLnB1c2goKGQgLSBfbWluKSAvIChfbWF4IC0gX21pbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBrOyBjKyspIHtcbiAgICAgICAgICAgICAgICBfcG9zLnB1c2goYyAvIChrIC0gMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGRvbWFpbiBtYXBcbiAgICAgICAgICAgICAgICBjb25zdCB0T3V0ID0gZG9tYWluLm1hcCgoZCwgaSkgPT4gaSAvIChkb21haW4ubGVuZ3RoIC0gMSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRCcmVha3MgPSBkb21haW4ubWFwKChkKSA9PiAoZCAtIF9taW4pIC8gKF9tYXggLSBfbWluKSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0QnJlYWtzLmV2ZXJ5KCh2YWwsIGkpID0+IHRPdXRbaV0gPT09IHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdE1hcERvbWFpbiA9ICh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA8PSAwIHx8IHQgPj0gMSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodCA+PSB0QnJlYWtzW2kgKyAxXSkgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQgLSB0QnJlYWtzW2ldKSAvICh0QnJlYWtzW2kgKyAxXSAtIHRCcmVha3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0ID0gdE91dFtpXSArIGYgKiAodE91dFtpICsgMV0gLSB0T3V0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9kb21haW4gPSBbX21pbiwgX21heF07XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLm1vZGUgPSBmdW5jdGlvbiAoX20pIHtcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gX21vZGU7XG4gICAgICAgIH1cbiAgICAgICAgX21vZGUgPSBfbTtcbiAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5yYW5nZSA9IGZ1bmN0aW9uIChjb2xvcnMsIF9wb3MpIHtcbiAgICAgICAgc2V0Q29sb3JzKGNvbG9ycywgX3Bvcyk7XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLm91dCA9IGZ1bmN0aW9uIChfbykge1xuICAgICAgICBfb3V0ID0gX287XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLnNwcmVhZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3NwcmVhZDtcbiAgICAgICAgfVxuICAgICAgICBfc3ByZWFkID0gdmFsO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5jb3JyZWN0TGlnaHRuZXNzID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgaWYgKHYgPT0gbnVsbCkge1xuICAgICAgICAgICAgdiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgX2NvcnJlY3RMaWdodG5lc3MgPSB2O1xuICAgICAgICByZXNldENhY2hlKCk7XG4gICAgICAgIGlmIChfY29ycmVjdExpZ2h0bmVzcykge1xuICAgICAgICAgICAgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgTDAgPSBnZXRDb2xvcigwLCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBMMSA9IGdldENvbG9yKDEsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbCA9IEwwID4gTDE7XG4gICAgICAgICAgICAgICAgbGV0IExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgTF9pZGVhbCA9IEwwICsgKEwxIC0gTDApICogdDtcbiAgICAgICAgICAgICAgICBsZXQgTF9kaWZmID0gTF9hY3R1YWwgLSBMX2lkZWFsO1xuICAgICAgICAgICAgICAgIGxldCB0MCA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHQxID0gMTtcbiAgICAgICAgICAgICAgICBsZXQgbWF4X2l0ZXIgPSAyMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoTWF0aC5hYnMoTF9kaWZmKSA+IDFlLTIgJiYgbWF4X2l0ZXItLSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMX2RpZmYgKj0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTF9kaWZmIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQwID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICs9ICh0MSAtIHQpICogMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAodDAgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKExfZGlmZiA9IExfYWN0dWFsIC0gTF9pZGVhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRNYXBMaWdodG5lc3MgPSAodCkgPT4gdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5wYWRkaW5nID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgaWYgKHAgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGUocCkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcCA9IFtwLCBwXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9wYWRkaW5nID0gcDtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIF9wYWRkaW5nO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGYuY29sb3JzID0gZnVuY3Rpb24gKG51bUNvbG9ycywgb3V0KSB7XG4gICAgICAgIC8vIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHJldHVybiB0aGUgb3JpZ2luYWwgY29sb3JzIHRoYXQgd2VyZSBwcm92aWRlZFxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIG91dCA9ICdoZXgnO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gX2NvbG9ycy5zbGljZSgwKTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1Db2xvcnMgPT09IDEpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFtmKDAuNSldO1xuICAgICAgICB9IGVsc2UgaWYgKG51bUNvbG9ycyA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGRtID0gX2RvbWFpblswXTtcbiAgICAgICAgICAgIGNvbnN0IGRkID0gX2RvbWFpblsxXSAtIGRtO1xuICAgICAgICAgICAgcmVzdWx0ID0gX19yYW5nZV9fKDAsIG51bUNvbG9ycywgZmFsc2UpLm1hcCgoaSkgPT5cbiAgICAgICAgICAgICAgICBmKGRtICsgKGkgLyAobnVtQ29sb3JzIC0gMSkpICogZGQpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJucyBhbGwgY29sb3JzIGJhc2VkIG9uIHRoZSBkZWZpbmVkIGNsYXNzZXNcbiAgICAgICAgICAgIGNvbG9ycyA9IFtdO1xuICAgICAgICAgICAgbGV0IHNhbXBsZXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChfY2xhc3NlcyAmJiBfY2xhc3Nlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAxLCBlbmQgPSBfY2xhc3Nlcy5sZW5ndGgsIGFzYyA9IDEgPD0gZW5kO1xuICAgICAgICAgICAgICAgICAgICBhc2MgPyBpIDwgZW5kIDogaSA+IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgYXNjID8gaSsrIDogaS0tXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZXMucHVzaCgoX2NsYXNzZXNbaSAtIDFdICsgX2NsYXNzZXNbaV0pICogMC41KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNhbXBsZXMgPSBfZG9tYWluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gc2FtcGxlcy5tYXAoKHYpID0+IGYodikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNocm9tYVtvdXRdKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQubWFwKChjKSA9PiBjW291dF0oKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgZi5jYWNoZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmIChjICE9IG51bGwpIHtcbiAgICAgICAgICAgIF91c2VDYWNoZSA9IGM7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfdXNlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5nYW1tYSA9IGZ1bmN0aW9uIChnKSB7XG4gICAgICAgIGlmIChnICE9IG51bGwpIHtcbiAgICAgICAgICAgIF9nYW1tYSA9IGc7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfZ2FtbWE7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5ub2RhdGEgPSBmdW5jdGlvbiAoZCkge1xuICAgICAgICBpZiAoZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBfbmFjb2wgPSBjaHJvbWEoZCk7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfbmFjb2w7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGY7XG59XG5cbmZ1bmN0aW9uIF9fcmFuZ2VfXyhsZWZ0LCByaWdodCwgaW5jbHVzaXZlKSB7XG4gICAgbGV0IHJhbmdlID0gW107XG4gICAgbGV0IGFzY2VuZGluZyA9IGxlZnQgPCByaWdodDtcbiAgICBsZXQgZW5kID0gIWluY2x1c2l2ZSA/IHJpZ2h0IDogYXNjZW5kaW5nID8gcmlnaHQgKyAxIDogcmlnaHQgLSAxO1xuICAgIGZvciAobGV0IGkgPSBsZWZ0OyBhc2NlbmRpbmcgPyBpIDwgZW5kIDogaSA+IGVuZDsgYXNjZW5kaW5nID8gaSsrIDogaS0tKSB7XG4gICAgICAgIHJhbmdlLnB1c2goaSk7XG4gICAgfVxuICAgIHJldHVybiByYW5nZTtcbn1cbiIsICIvL1xuLy8gaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgY29sb3JzIHV6aW5nIGEgYmV6aWVyIHNwbGluZVxuLy9cblxuLy8gQHJlcXVpcmVzIHV0aWxzIGxhYlxuaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCAnLi4vaW8vbGFiL2luZGV4LmpzJztcbmltcG9ydCBzY2FsZSBmcm9tICcuL3NjYWxlLmpzJztcblxuLy8gbnRoIHJvdyBvZiB0aGUgcGFzY2FsIHRyaWFuZ2xlXG5jb25zdCBiaW5vbV9yb3cgPSBmdW5jdGlvbiAobikge1xuICAgIGxldCByb3cgPSBbMSwgMV07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgbGV0IG5ld3JvdyA9IFsxXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBuZXdyb3dbal0gPSAocm93W2pdIHx8IDApICsgcm93W2ogLSAxXTtcbiAgICAgICAgfVxuICAgICAgICByb3cgPSBuZXdyb3c7XG4gICAgfVxuICAgIHJldHVybiByb3c7XG59O1xuXG5jb25zdCBiZXppZXIgPSBmdW5jdGlvbiAoY29sb3JzKSB7XG4gICAgbGV0IEksIGxhYjAsIGxhYjEsIGxhYjI7XG4gICAgY29sb3JzID0gY29sb3JzLm1hcCgoYykgPT4gbmV3IENvbG9yKGMpKTtcbiAgICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvblxuICAgICAgICBbbGFiMCwgbGFiMV0gPSBjb2xvcnMubWFwKChjKSA9PiBjLmxhYigpKTtcbiAgICAgICAgSSA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICBjb25zdCBsYWIgPSBbMCwgMSwgMl0ubWFwKChpKSA9PiBsYWIwW2ldICsgdCAqIChsYWIxW2ldIC0gbGFiMFtpXSkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgLy8gcXVhZHJhdGljIGJlemllciBpbnRlcnBvbGF0aW9uXG4gICAgICAgIFtsYWIwLCBsYWIxLCBsYWIyXSA9IGNvbG9ycy5tYXAoKGMpID0+IGMubGFiKCkpO1xuICAgICAgICBJID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYiA9IFswLCAxLCAyXS5tYXAoXG4gICAgICAgICAgICAgICAgKGkpID0+XG4gICAgICAgICAgICAgICAgICAgICgxIC0gdCkgKiAoMSAtIHQpICogbGFiMFtpXSArXG4gICAgICAgICAgICAgICAgICAgIDIgKiAoMSAtIHQpICogdCAqIGxhYjFbaV0gK1xuICAgICAgICAgICAgICAgICAgICB0ICogdCAqIGxhYjJbaV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGxhYiwgJ2xhYicpO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoY29sb3JzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAvLyBjdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvblxuICAgICAgICBsZXQgbGFiMztcbiAgICAgICAgW2xhYjAsIGxhYjEsIGxhYjIsIGxhYjNdID0gY29sb3JzLm1hcCgoYykgPT4gYy5sYWIoKSk7XG4gICAgICAgIEkgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgY29uc3QgbGFiID0gWzAsIDEsIDJdLm1hcChcbiAgICAgICAgICAgICAgICAoaSkgPT5cbiAgICAgICAgICAgICAgICAgICAgKDEgLSB0KSAqICgxIC0gdCkgKiAoMSAtIHQpICogbGFiMFtpXSArXG4gICAgICAgICAgICAgICAgICAgIDMgKiAoMSAtIHQpICogKDEgLSB0KSAqIHQgKiBsYWIxW2ldICtcbiAgICAgICAgICAgICAgICAgICAgMyAqICgxIC0gdCkgKiB0ICogdCAqIGxhYjJbaV0gK1xuICAgICAgICAgICAgICAgICAgICB0ICogdCAqIHQgKiBsYWIzW2ldXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPj0gNSkge1xuICAgICAgICAvLyBnZW5lcmFsIGNhc2UgKGRlZ3JlZSBuIGJlemllcilcbiAgICAgICAgbGV0IGxhYnMsIHJvdywgbjtcbiAgICAgICAgbGFicyA9IGNvbG9ycy5tYXAoKGMpID0+IGMubGFiKCkpO1xuICAgICAgICBuID0gY29sb3JzLmxlbmd0aCAtIDE7XG4gICAgICAgIHJvdyA9IGJpbm9tX3JvdyhuKTtcbiAgICAgICAgSSA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICBjb25zdCB1ID0gMSAtIHQ7XG4gICAgICAgICAgICBjb25zdCBsYWIgPSBbMCwgMSwgMl0ubWFwKChpKSA9PlxuICAgICAgICAgICAgICAgIGxhYnMucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAoc3VtLCBlbCwgaikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArIHJvd1tqXSAqIHUgKiogKG4gLSBqKSAqIHQgKiogaiAqIGVsW2ldLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IobGFiLCAnbGFiJyk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ05vIHBvaW50IGluIHJ1bm5pbmcgYmV6aWVyIHdpdGggb25seSBvbmUgY29sb3IuJyk7XG4gICAgfVxuICAgIHJldHVybiBJO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgKGNvbG9ycykgPT4ge1xuICAgIGNvbnN0IGYgPSBiZXppZXIoY29sb3JzKTtcbiAgICBmLnNjYWxlID0gKCkgPT4gc2NhbGUoZik7XG4gICAgcmV0dXJuIGY7XG59O1xuIiwgIi8qXG4gKiBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIHNldCBvZiBjb2xvcnMgdXppbmcgYSBiZXppZXIgc3BsaW5lXG4gKiBibGVuZCBtb2RlIGZvcm11bGFzIHRha2VuIGZyb20gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTgwMTEwMDE0OTQ2L2h0dHA6Ly93d3cudmVudHVyZS13YXJlLmNvbS9rZXZpbi9jb2RpbmcvbGV0cy1sZWFybi1tYXRoLXBob3Rvc2hvcC1ibGVuZC1tb2Rlcy9cbiAqL1xuXG5pbXBvcnQgJy4uL2lvL3JnYi9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uL2Nocm9tYS5qcyc7XG5cbmNvbnN0IGJsZW5kID0gKGJvdHRvbSwgdG9wLCBtb2RlKSA9PiB7XG4gICAgaWYgKCFibGVuZFttb2RlXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gYmxlbmQgbW9kZSAnICsgbW9kZSk7XG4gICAgfVxuICAgIHJldHVybiBibGVuZFttb2RlXShib3R0b20sIHRvcCk7XG59O1xuXG5jb25zdCBibGVuZF9mID0gKGYpID0+IChib3R0b20sIHRvcCkgPT4ge1xuICAgIGNvbnN0IGMwID0gY2hyb21hKHRvcCkucmdiKCk7XG4gICAgY29uc3QgYzEgPSBjaHJvbWEoYm90dG9tKS5yZ2IoKTtcbiAgICByZXR1cm4gY2hyb21hLnJnYihmKGMwLCBjMSkpO1xufTtcblxuY29uc3QgZWFjaCA9IChmKSA9PiAoYzAsIGMxKSA9PiB7XG4gICAgY29uc3Qgb3V0ID0gW107XG4gICAgb3V0WzBdID0gZihjMFswXSwgYzFbMF0pO1xuICAgIG91dFsxXSA9IGYoYzBbMV0sIGMxWzFdKTtcbiAgICBvdXRbMl0gPSBmKGMwWzJdLCBjMVsyXSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbmNvbnN0IG5vcm1hbCA9IChhKSA9PiBhO1xuY29uc3QgbXVsdGlwbHkgPSAoYSwgYikgPT4gKGEgKiBiKSAvIDI1NTtcbmNvbnN0IGRhcmtlbiA9IChhLCBiKSA9PiAoYSA+IGIgPyBiIDogYSk7XG5jb25zdCBsaWdodGVuID0gKGEsIGIpID0+IChhID4gYiA/IGEgOiBiKTtcbmNvbnN0IHNjcmVlbiA9IChhLCBiKSA9PiAyNTUgKiAoMSAtICgxIC0gYSAvIDI1NSkgKiAoMSAtIGIgLyAyNTUpKTtcbmNvbnN0IG92ZXJsYXkgPSAoYSwgYikgPT5cbiAgICBiIDwgMTI4ID8gKDIgKiBhICogYikgLyAyNTUgOiAyNTUgKiAoMSAtIDIgKiAoMSAtIGEgLyAyNTUpICogKDEgLSBiIC8gMjU1KSk7XG5jb25zdCBidXJuID0gKGEsIGIpID0+IDI1NSAqICgxIC0gKDEgLSBiIC8gMjU1KSAvIChhIC8gMjU1KSk7XG5jb25zdCBkb2RnZSA9IChhLCBiKSA9PiB7XG4gICAgaWYgKGEgPT09IDI1NSkgcmV0dXJuIDI1NTtcbiAgICBhID0gKDI1NSAqIChiIC8gMjU1KSkgLyAoMSAtIGEgLyAyNTUpO1xuICAgIHJldHVybiBhID4gMjU1ID8gMjU1IDogYTtcbn07XG5cbi8vICMgYWRkID0gKGEsYikgLT5cbi8vICMgICAgIGlmIChhICsgYiA+IDI1NSkgdGhlbiAyNTUgZWxzZSBhICsgYlxuXG5ibGVuZC5ub3JtYWwgPSBibGVuZF9mKGVhY2gobm9ybWFsKSk7XG5ibGVuZC5tdWx0aXBseSA9IGJsZW5kX2YoZWFjaChtdWx0aXBseSkpO1xuYmxlbmQuc2NyZWVuID0gYmxlbmRfZihlYWNoKHNjcmVlbikpO1xuYmxlbmQub3ZlcmxheSA9IGJsZW5kX2YoZWFjaChvdmVybGF5KSk7XG5ibGVuZC5kYXJrZW4gPSBibGVuZF9mKGVhY2goZGFya2VuKSk7XG5ibGVuZC5saWdodGVuID0gYmxlbmRfZihlYWNoKGxpZ2h0ZW4pKTtcbmJsZW5kLmRvZGdlID0gYmxlbmRfZihlYWNoKGRvZGdlKSk7XG5ibGVuZC5idXJuID0gYmxlbmRfZihlYWNoKGJ1cm4pKTtcbi8vIGJsZW5kLmFkZCA9IGJsZW5kX2YoZWFjaChhZGQpKTtcblxuZXhwb3J0IGRlZmF1bHQgYmxlbmQ7XG4iLCAiLy8gY3ViZWhlbGl4IGludGVycG9sYXRpb25cbi8vIGJhc2VkIG9uIEQuQS4gR3JlZW4gXCJBIGNvbG91ciBzY2hlbWUgZm9yIHRoZSBkaXNwbGF5IG9mIGFzdHJvbm9taWNhbCBpbnRlbnNpdHkgaW1hZ2VzXCJcbi8vIGh0dHA6Ly9hc3Ryb24tc29jLmluL2J1bGxldGluLzExSnVuZS8yODkzOTIwMTEucGRmXG5pbXBvcnQgeyB0eXBlLCBjbGlwX3JnYiwgVFdPUEkgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uL2Nocm9tYS5qcyc7XG5jb25zdCB7IHBvdywgc2luLCBjb3MgfSA9IE1hdGg7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChcbiAgICBzdGFydCA9IDMwMCxcbiAgICByb3RhdGlvbnMgPSAtMS41LFxuICAgIGh1ZSA9IDEsXG4gICAgZ2FtbWEgPSAxLFxuICAgIGxpZ2h0bmVzcyA9IFswLCAxXVxuKSB7XG4gICAgbGV0IGRoID0gMCxcbiAgICAgICAgZGw7XG4gICAgaWYgKHR5cGUobGlnaHRuZXNzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICBkbCA9IGxpZ2h0bmVzc1sxXSAtIGxpZ2h0bmVzc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkbCA9IDA7XG4gICAgICAgIGxpZ2h0bmVzcyA9IFtsaWdodG5lc3MsIGxpZ2h0bmVzc107XG4gICAgfVxuICAgIGNvbnN0IGYgPSBmdW5jdGlvbiAoZnJhY3QpIHtcbiAgICAgICAgY29uc3QgYSA9IFRXT1BJICogKChzdGFydCArIDEyMCkgLyAzNjAgKyByb3RhdGlvbnMgKiBmcmFjdCk7XG4gICAgICAgIGNvbnN0IGwgPSBwb3cobGlnaHRuZXNzWzBdICsgZGwgKiBmcmFjdCwgZ2FtbWEpO1xuICAgICAgICBjb25zdCBoID0gZGggIT09IDAgPyBodWVbMF0gKyBmcmFjdCAqIGRoIDogaHVlO1xuICAgICAgICBjb25zdCBhbXAgPSAoaCAqIGwgKiAoMSAtIGwpKSAvIDI7XG4gICAgICAgIGNvbnN0IGNvc19hID0gY29zKGEpO1xuICAgICAgICBjb25zdCBzaW5fYSA9IHNpbihhKTtcbiAgICAgICAgY29uc3QgciA9IGwgKyBhbXAgKiAoLTAuMTQ4NjEgKiBjb3NfYSArIDEuNzgyNzcgKiBzaW5fYSk7XG4gICAgICAgIGNvbnN0IGcgPSBsICsgYW1wICogKC0wLjI5MjI3ICogY29zX2EgLSAwLjkwNjQ5ICogc2luX2EpO1xuICAgICAgICBjb25zdCBiID0gbCArIGFtcCAqICgrMS45NzI5NCAqIGNvc19hKTtcbiAgICAgICAgcmV0dXJuIGNocm9tYShjbGlwX3JnYihbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NSwgMV0pKTtcbiAgICB9O1xuICAgIGYuc3RhcnQgPSBmdW5jdGlvbiAocykge1xuICAgICAgICBpZiAocyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnQgPSBzO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYucm90YXRpb25zID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKHIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdGF0aW9ucztcbiAgICAgICAgfVxuICAgICAgICByb3RhdGlvbnMgPSByO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYuZ2FtbWEgPSBmdW5jdGlvbiAoZykge1xuICAgICAgICBpZiAoZyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2FtbWE7XG4gICAgICAgIH1cbiAgICAgICAgZ2FtbWEgPSBnO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYuaHVlID0gZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgaWYgKGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh1ZTtcbiAgICAgICAgfVxuICAgICAgICBodWUgPSBoO1xuICAgICAgICBpZiAodHlwZShodWUpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBkaCA9IGh1ZVsxXSAtIGh1ZVswXTtcbiAgICAgICAgICAgIGlmIChkaCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGh1ZSA9IGh1ZVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRoID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYubGlnaHRuZXNzID0gZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgaWYgKGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxpZ2h0bmVzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZShoKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgbGlnaHRuZXNzID0gaDtcbiAgICAgICAgICAgIGRsID0gaFsxXSAtIGhbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaWdodG5lc3MgPSBbaCwgaF07XG4gICAgICAgICAgICBkbCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBmLnNjYWxlID0gKCkgPT4gY2hyb21hLnNjYWxlKGYpO1xuICAgIGYuaHVlKGh1ZSk7XG4gICAgcmV0dXJuIGY7XG59XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmNvbnN0IGRpZ2l0cyA9ICcwMTIzNDU2Nzg5YWJjZGVmJztcblxuY29uc3QgeyBmbG9vciwgcmFuZG9tIH0gPSBNYXRoO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICAgbGV0IGNvZGUgPSAnIyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgY29kZSArPSBkaWdpdHMuY2hhckF0KGZsb29yKHJhbmRvbSgpICogMTYpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDb2xvcihjb2RlLCAnaGV4Jyk7XG59O1xuIiwgImltcG9ydCB0eXBlIGZyb20gJy4vdHlwZS5qcyc7XG5cbmNvbnN0IHsgbG9nLCBwb3csIGZsb29yLCBhYnMgfSA9IE1hdGg7XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXplKGRhdGEsIGtleSA9IG51bGwpIHtcbiAgICBjb25zdCByID0ge1xuICAgICAgICBtaW46IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgIG1heDogTnVtYmVyLk1BWF9WQUxVRSAqIC0xLFxuICAgICAgICBzdW06IDAsXG4gICAgICAgIHZhbHVlczogW10sXG4gICAgICAgIGNvdW50OiAwXG4gICAgfTtcbiAgICBpZiAodHlwZShkYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZGF0YSA9IE9iamVjdC52YWx1ZXMoZGF0YSk7XG4gICAgfVxuICAgIGRhdGEuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgIGlmIChrZXkgJiYgdHlwZSh2YWwpID09PSAnb2JqZWN0JykgdmFsID0gdmFsW2tleV07XG4gICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgIWlzTmFOKHZhbCkpIHtcbiAgICAgICAgICAgIHIudmFsdWVzLnB1c2godmFsKTtcbiAgICAgICAgICAgIHIuc3VtICs9IHZhbDtcbiAgICAgICAgICAgIGlmICh2YWwgPCByLm1pbikgci5taW4gPSB2YWw7XG4gICAgICAgICAgICBpZiAodmFsID4gci5tYXgpIHIubWF4ID0gdmFsO1xuICAgICAgICAgICAgci5jb3VudCArPSAxO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByLmRvbWFpbiA9IFtyLm1pbiwgci5tYXhdO1xuXG4gICAgci5saW1pdHMgPSAobW9kZSwgbnVtKSA9PiBsaW1pdHMociwgbW9kZSwgbnVtKTtcblxuICAgIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGltaXRzKGRhdGEsIG1vZGUgPSAnZXF1YWwnLCBudW0gPSA3KSB7XG4gICAgaWYgKHR5cGUoZGF0YSkgPT0gJ2FycmF5Jykge1xuICAgICAgICBkYXRhID0gYW5hbHl6ZShkYXRhKTtcbiAgICB9XG4gICAgY29uc3QgeyBtaW4sIG1heCB9ID0gZGF0YTtcbiAgICBjb25zdCB2YWx1ZXMgPSBkYXRhLnZhbHVlcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG5cbiAgICBpZiAobnVtID09PSAxKSB7XG4gICAgICAgIHJldHVybiBbbWluLCBtYXhdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbWl0cyA9IFtdO1xuXG4gICAgaWYgKG1vZGUuc3Vic3RyKDAsIDEpID09PSAnYycpIHtcbiAgICAgICAgLy8gY29udGludW91c1xuICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH1cblxuICAgIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2UnKSB7XG4gICAgICAgIC8vIGVxdWFsIGludGVydmFsXG4gICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtOyBpKyspIHtcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbiArIChpIC8gbnVtKSAqIChtYXggLSBtaW4pKTtcbiAgICAgICAgfVxuICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH0gZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwgMSkgPT09ICdsJykge1xuICAgICAgICAvLyBsb2cgc2NhbGVcbiAgICAgICAgaWYgKG1pbiA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0xvZ2FyaXRobWljIHNjYWxlcyBhcmUgb25seSBwb3NzaWJsZSBmb3IgdmFsdWVzID4gMCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWluX2xvZyA9IE1hdGguTE9HMTBFICogbG9nKG1pbik7XG4gICAgICAgIGNvbnN0IG1heF9sb2cgPSBNYXRoLkxPRzEwRSAqIGxvZyhtYXgpO1xuICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgICAgICBsaW1pdHMucHVzaChwb3coMTAsIG1pbl9sb2cgKyAoaSAvIG51bSkgKiAobWF4X2xvZyAtIG1pbl9sb2cpKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICB9IGVsc2UgaWYgKG1vZGUuc3Vic3RyKDAsIDEpID09PSAncScpIHtcbiAgICAgICAgLy8gcXVhbnRpbGUgc2NhbGVcbiAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcCA9ICgodmFsdWVzLmxlbmd0aCAtIDEpICogaSkgLyBudW07XG4gICAgICAgICAgICBjb25zdCBwYiA9IGZsb29yKHApO1xuICAgICAgICAgICAgaWYgKHBiID09PSBwKSB7XG4gICAgICAgICAgICAgICAgbGltaXRzLnB1c2godmFsdWVzW3BiXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHAgPiBwYlxuICAgICAgICAgICAgICAgIGNvbnN0IHByID0gcCAtIHBiO1xuICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKHZhbHVlc1twYl0gKiAoMSAtIHByKSArIHZhbHVlc1twYiArIDFdICogcHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgfSBlbHNlIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2snKSB7XG4gICAgICAgIC8vIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAvKlxuICAgICAgICBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvblxuICAgICAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZmlndWUvc291cmNlL2Jyb3dzZS90cnVuay9maWd1ZS5qcyMzMzZcbiAgICAgICAgc2ltcGxpZmllZCBmb3IgMS1kIGlucHV0IHZhbHVlc1xuICAgICAgICAqL1xuICAgICAgICBsZXQgY2x1c3RlcjtcbiAgICAgICAgY29uc3QgbiA9IHZhbHVlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gbmV3IEFycmF5KG4pO1xuICAgICAgICBjb25zdCBjbHVzdGVyU2l6ZXMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgbGV0IHJlcGVhdCA9IHRydWU7XG4gICAgICAgIGxldCBuYl9pdGVycyA9IDA7XG4gICAgICAgIGxldCBjZW50cm9pZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIGdldCBzZWVkIHZhbHVlc1xuICAgICAgICBjZW50cm9pZHMgPSBbXTtcbiAgICAgICAgY2VudHJvaWRzLnB1c2gobWluKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgY2VudHJvaWRzLnB1c2gobWluICsgKGkgLyBudW0pICogKG1heCAtIG1pbikpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRyb2lkcy5wdXNoKG1heCk7XG5cbiAgICAgICAgd2hpbGUgKHJlcGVhdCkge1xuICAgICAgICAgICAgLy8gYXNzaWdubWVudCBzdGVwXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgY2x1c3RlclNpemVzW2pdID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgbGV0IG1pbmRpc3QgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgIGxldCBiZXN0O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdCA9IGFicyhjZW50cm9pZHNbal0gLSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXN0IDwgbWluZGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluZGlzdCA9IGRpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0ID0gajtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyU2l6ZXNbYmVzdF0rKztcbiAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudHNbaV0gPSBiZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdXBkYXRlIGNlbnRyb2lkcyBzdGVwXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50cm9pZHMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbal0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaV07XG4gICAgICAgICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tjbHVzdGVyXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbY2x1c3Rlcl0gPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2NsdXN0ZXJdICs9IHZhbHVlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2pdICo9IDEgLyBjbHVzdGVyU2l6ZXNbal07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGNvbnZlcmdlbmNlXG4gICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3Q2VudHJvaWRzW2pdICE9PSBjZW50cm9pZHNbal0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjZW50cm9pZHMgPSBuZXdDZW50cm9pZHM7XG4gICAgICAgICAgICBuYl9pdGVycysrO1xuXG4gICAgICAgICAgICBpZiAobmJfaXRlcnMgPiAyMDApIHtcbiAgICAgICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZpbmlzaGVkIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAvLyB0aGUgbmV4dCBwYXJ0IGlzIGJvcnJvd2VkIGZyb20gZ2FicmllbGZsb3IuaXRcbiAgICAgICAgY29uc3Qga0NsdXN0ZXJzID0ge307XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgIGtDbHVzdGVyc1tqXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaV07XG4gICAgICAgICAgICBrQ2x1c3RlcnNbY2x1c3Rlcl0ucHVzaCh2YWx1ZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0bXBLTWVhbnNCcmVha3MgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW07IGorKykge1xuICAgICAgICAgICAgdG1wS01lYW5zQnJlYWtzLnB1c2goa0NsdXN0ZXJzW2pdWzBdKTtcbiAgICAgICAgICAgIHRtcEtNZWFuc0JyZWFrcy5wdXNoKGtDbHVzdGVyc1tqXVtrQ2x1c3RlcnNbal0ubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG4gICAgICAgIHRtcEtNZWFuc0JyZWFrcyA9IHRtcEtNZWFuc0JyZWFrcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICAgIGxpbWl0cy5wdXNoKHRtcEtNZWFuc0JyZWFrc1swXSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdG1wS01lYW5zQnJlYWtzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdG1wS01lYW5zQnJlYWtzW2ldO1xuICAgICAgICAgICAgaWYgKCFpc05hTih2KSAmJiBsaW1pdHMuaW5kZXhPZih2KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsaW1pdHMucHVzaCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGltaXRzO1xufVxuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgJy4uL29wcy9sdW1pbmFuY2UuanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoYSwgYikgPT4ge1xuICAgIC8vIFdDQUcgY29udHJhc3QgcmF0aW9cbiAgICAvLyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNjb250cmFzdC1yYXRpb2RlZlxuICAgIGEgPSBuZXcgQ29sb3IoYSk7XG4gICAgYiA9IG5ldyBDb2xvcihiKTtcbiAgICBjb25zdCBsMSA9IGEubHVtaW5hbmNlKCk7XG4gICAgY29uc3QgbDIgPSBiLmx1bWluYW5jZSgpO1xuICAgIHJldHVybiBsMSA+IGwyID8gKGwxICsgMC4wNSkgLyAobDIgKyAwLjA1KSA6IChsMiArIDAuMDUpIC8gKGwxICsgMC4wNSk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5jb25zdCB7IHNxcnQsIHBvdywgbWluLCBtYXgsIGF0YW4yLCBhYnMsIGNvcywgc2luLCBleHAsIFBJIH0gPSBNYXRoO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoYSwgYiwgS2wgPSAxLCBLYyA9IDEsIEtoID0gMSkge1xuICAgIC8vIERlbHRhIEUgKENJRSAyMDAwKVxuICAgIC8vIHNlZSBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9EZWx0YUVfQ0lFMjAwMC5odG1sXG4gICAgdmFyIHJhZDJkZWcgPSBmdW5jdGlvbiAocmFkKSB7XG4gICAgICAgIHJldHVybiAoMzYwICogcmFkKSAvICgyICogUEkpO1xuICAgIH07XG4gICAgdmFyIGRlZzJyYWQgPSBmdW5jdGlvbiAoZGVnKSB7XG4gICAgICAgIHJldHVybiAoMiAqIFBJICogZGVnKSAvIDM2MDtcbiAgICB9O1xuICAgIGEgPSBuZXcgQ29sb3IoYSk7XG4gICAgYiA9IG5ldyBDb2xvcihiKTtcbiAgICBjb25zdCBbTDEsIGExLCBiMV0gPSBBcnJheS5mcm9tKGEubGFiKCkpO1xuICAgIGNvbnN0IFtMMiwgYTIsIGIyXSA9IEFycmF5LmZyb20oYi5sYWIoKSk7XG4gICAgY29uc3QgYXZnTCA9IChMMSArIEwyKSAvIDI7XG4gICAgY29uc3QgQzEgPSBzcXJ0KHBvdyhhMSwgMikgKyBwb3coYjEsIDIpKTtcbiAgICBjb25zdCBDMiA9IHNxcnQocG93KGEyLCAyKSArIHBvdyhiMiwgMikpO1xuICAgIGNvbnN0IGF2Z0MgPSAoQzEgKyBDMikgLyAyO1xuICAgIGNvbnN0IEcgPSAwLjUgKiAoMSAtIHNxcnQocG93KGF2Z0MsIDcpIC8gKHBvdyhhdmdDLCA3KSArIHBvdygyNSwgNykpKSk7XG4gICAgY29uc3QgYTFwID0gYTEgKiAoMSArIEcpO1xuICAgIGNvbnN0IGEycCA9IGEyICogKDEgKyBHKTtcbiAgICBjb25zdCBDMXAgPSBzcXJ0KHBvdyhhMXAsIDIpICsgcG93KGIxLCAyKSk7XG4gICAgY29uc3QgQzJwID0gc3FydChwb3coYTJwLCAyKSArIHBvdyhiMiwgMikpO1xuICAgIGNvbnN0IGF2Z0NwID0gKEMxcCArIEMycCkgLyAyO1xuICAgIGNvbnN0IGFyY3RhbjEgPSByYWQyZGVnKGF0YW4yKGIxLCBhMXApKTtcbiAgICBjb25zdCBhcmN0YW4yID0gcmFkMmRlZyhhdGFuMihiMiwgYTJwKSk7XG4gICAgY29uc3QgaDFwID0gYXJjdGFuMSA+PSAwID8gYXJjdGFuMSA6IGFyY3RhbjEgKyAzNjA7XG4gICAgY29uc3QgaDJwID0gYXJjdGFuMiA+PSAwID8gYXJjdGFuMiA6IGFyY3RhbjIgKyAzNjA7XG4gICAgY29uc3QgYXZnSHAgPVxuICAgICAgICBhYnMoaDFwIC0gaDJwKSA+IDE4MCA/IChoMXAgKyBoMnAgKyAzNjApIC8gMiA6IChoMXAgKyBoMnApIC8gMjtcbiAgICBjb25zdCBUID1cbiAgICAgICAgMSAtXG4gICAgICAgIDAuMTcgKiBjb3MoZGVnMnJhZChhdmdIcCAtIDMwKSkgK1xuICAgICAgICAwLjI0ICogY29zKGRlZzJyYWQoMiAqIGF2Z0hwKSkgK1xuICAgICAgICAwLjMyICogY29zKGRlZzJyYWQoMyAqIGF2Z0hwICsgNikpIC1cbiAgICAgICAgMC4yICogY29zKGRlZzJyYWQoNCAqIGF2Z0hwIC0gNjMpKTtcbiAgICBsZXQgZGVsdGFIcCA9IGgycCAtIGgxcDtcbiAgICBkZWx0YUhwID1cbiAgICAgICAgYWJzKGRlbHRhSHApIDw9IDE4MFxuICAgICAgICAgICAgPyBkZWx0YUhwXG4gICAgICAgICAgICA6IGgycCA8PSBoMXBcbiAgICAgICAgICAgICAgPyBkZWx0YUhwICsgMzYwXG4gICAgICAgICAgICAgIDogZGVsdGFIcCAtIDM2MDtcbiAgICBkZWx0YUhwID0gMiAqIHNxcnQoQzFwICogQzJwKSAqIHNpbihkZWcycmFkKGRlbHRhSHApIC8gMik7XG4gICAgY29uc3QgZGVsdGFMID0gTDIgLSBMMTtcbiAgICBjb25zdCBkZWx0YUNwID0gQzJwIC0gQzFwO1xuICAgIGNvbnN0IHNsID0gMSArICgwLjAxNSAqIHBvdyhhdmdMIC0gNTAsIDIpKSAvIHNxcnQoMjAgKyBwb3coYXZnTCAtIDUwLCAyKSk7XG4gICAgY29uc3Qgc2MgPSAxICsgMC4wNDUgKiBhdmdDcDtcbiAgICBjb25zdCBzaCA9IDEgKyAwLjAxNSAqIGF2Z0NwICogVDtcbiAgICBjb25zdCBkZWx0YVRoZXRhID0gMzAgKiBleHAoLXBvdygoYXZnSHAgLSAyNzUpIC8gMjUsIDIpKTtcbiAgICBjb25zdCBSYyA9IDIgKiBzcXJ0KHBvdyhhdmdDcCwgNykgLyAocG93KGF2Z0NwLCA3KSArIHBvdygyNSwgNykpKTtcbiAgICBjb25zdCBSdCA9IC1SYyAqIHNpbigyICogZGVnMnJhZChkZWx0YVRoZXRhKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gc3FydChcbiAgICAgICAgcG93KGRlbHRhTCAvIChLbCAqIHNsKSwgMikgK1xuICAgICAgICAgICAgcG93KGRlbHRhQ3AgLyAoS2MgKiBzYyksIDIpICtcbiAgICAgICAgICAgIHBvdyhkZWx0YUhwIC8gKEtoICogc2gpLCAyKSArXG4gICAgICAgICAgICBSdCAqIChkZWx0YUNwIC8gKEtjICogc2MpKSAqIChkZWx0YUhwIC8gKEtoICogc2gpKVxuICAgICk7XG4gICAgcmV0dXJuIG1heCgwLCBtaW4oMTAwLCByZXN1bHQpKTtcbn1cbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG4vLyBzaW1wbGUgRXVjbGlkZWFuIGRpc3RhbmNlXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoYSwgYiwgbW9kZSA9ICdsYWInKSB7XG4gICAgLy8gRGVsdGEgRSAoQ0lFIDE5NzYpXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXF1YXRpb25zLmh0bWxcbiAgICBhID0gbmV3IENvbG9yKGEpO1xuICAgIGIgPSBuZXcgQ29sb3IoYik7XG4gICAgY29uc3QgbDEgPSBhLmdldChtb2RlKTtcbiAgICBjb25zdCBsMiA9IGIuZ2V0KG1vZGUpO1xuICAgIGxldCBzdW1fc3EgPSAwO1xuICAgIGZvciAobGV0IGkgaW4gbDEpIHtcbiAgICAgICAgY29uc3QgZCA9IChsMVtpXSB8fCAwKSAtIChsMltpXSB8fCAwKTtcbiAgICAgICAgc3VtX3NxICs9IGQgKiBkO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5zcXJ0KHN1bV9zcSk7XG59XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgICBuZXcgQ29sb3IoLi4uYXJncyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuIiwgIi8vIHNvbWUgcHJlLWRlZmluZWQgY29sb3Igc2NhbGVzOlxuaW1wb3J0IGNocm9tYSBmcm9tICcuLi9jaHJvbWEuanMnO1xuaW1wb3J0ICcuLi9pby9oc2wvaW5kZXguanMnO1xuaW1wb3J0IHNjYWxlIGZyb20gJy4uL2dlbmVyYXRvci9zY2FsZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb29sKCkge1xuICAgICAgICByZXR1cm4gc2NhbGUoW2Nocm9tYS5oc2woMTgwLCAxLCAwLjkpLCBjaHJvbWEuaHNsKDI1MCwgMC43LCAwLjQpXSk7XG4gICAgfSxcbiAgICBob3QoKSB7XG4gICAgICAgIHJldHVybiBzY2FsZShbJyMwMDAnLCAnI2YwMCcsICcjZmYwJywgJyNmZmYnXSwgWzAsIDAuMjUsIDAuNzUsIDFdKS5tb2RlKFxuICAgICAgICAgICAgJ3JnYidcbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwgIi8qKlxuICAgIENvbG9yQnJld2VyIGNvbG9ycyBmb3IgY2hyb21hLmpzXG5cbiAgICBDb3B5cmlnaHQgKGMpIDIwMDIgQ3ludGhpYSBCcmV3ZXIsIE1hcmsgSGFycm93ZXIsIGFuZCBUaGVcbiAgICBQZW5uc3lsdmFuaWEgU3RhdGUgVW5pdmVyc2l0eS5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZFxuICAgIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SXG4gICAgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuY29uc3QgY29sb3JicmV3ZXIgPSB7XG4gICAgLy8gc2VxdWVudGlhbFxuICAgIE9yUmQ6IFsnI2ZmZjdlYycsICcjZmVlOGM4JywgJyNmZGQ0OWUnLCAnI2ZkYmI4NCcsICcjZmM4ZDU5JywgJyNlZjY1NDgnLCAnI2Q3MzAxZicsICcjYjMwMDAwJywgJyM3ZjAwMDAnXSxcbiAgICBQdUJ1OiBbJyNmZmY3ZmInLCAnI2VjZTdmMicsICcjZDBkMWU2JywgJyNhNmJkZGInLCAnIzc0YTljZicsICcjMzY5MGMwJywgJyMwNTcwYjAnLCAnIzA0NWE4ZCcsICcjMDIzODU4J10sXG4gICAgQnVQdTogWycjZjdmY2ZkJywgJyNlMGVjZjQnLCAnI2JmZDNlNicsICcjOWViY2RhJywgJyM4Yzk2YzYnLCAnIzhjNmJiMScsICcjODg0MTlkJywgJyM4MTBmN2MnLCAnIzRkMDA0YiddLFxuICAgIE9yYW5nZXM6IFsnI2ZmZjVlYicsICcjZmVlNmNlJywgJyNmZGQwYTInLCAnI2ZkYWU2YicsICcjZmQ4ZDNjJywgJyNmMTY5MTMnLCAnI2Q5NDgwMScsICcjYTYzNjAzJywgJyM3ZjI3MDQnXSxcbiAgICBCdUduOiBbJyNmN2ZjZmQnLCAnI2U1ZjVmOScsICcjY2NlY2U2JywgJyM5OWQ4YzknLCAnIzY2YzJhNCcsICcjNDFhZTc2JywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgWWxPckJyOiBbJyNmZmZmZTUnLCAnI2ZmZjdiYycsICcjZmVlMzkxJywgJyNmZWM0NGYnLCAnI2ZlOTkyOScsICcjZWM3MDE0JywgJyNjYzRjMDInLCAnIzk5MzQwNCcsICcjNjYyNTA2J10sXG4gICAgWWxHbjogWycjZmZmZmU1JywgJyNmN2ZjYjknLCAnI2Q5ZjBhMycsICcjYWRkZDhlJywgJyM3OGM2NzknLCAnIzQxYWI1ZCcsICcjMjM4NDQzJywgJyMwMDY4MzcnLCAnIzAwNDUyOSddLFxuICAgIFJlZHM6IFsnI2ZmZjVmMCcsICcjZmVlMGQyJywgJyNmY2JiYTEnLCAnI2ZjOTI3MicsICcjZmI2YTRhJywgJyNlZjNiMmMnLCAnI2NiMTgxZCcsICcjYTUwZjE1JywgJyM2NzAwMGQnXSxcbiAgICBSZFB1OiBbJyNmZmY3ZjMnLCAnI2ZkZTBkZCcsICcjZmNjNWMwJywgJyNmYTlmYjUnLCAnI2Y3NjhhMScsICcjZGQzNDk3JywgJyNhZTAxN2UnLCAnIzdhMDE3NycsICcjNDkwMDZhJ10sXG4gICAgR3JlZW5zOiBbJyNmN2ZjZjUnLCAnI2U1ZjVlMCcsICcjYzdlOWMwJywgJyNhMWQ5OWInLCAnIzc0YzQ3NicsICcjNDFhYjVkJywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgWWxHbkJ1OiBbJyNmZmZmZDknLCAnI2VkZjhiMScsICcjYzdlOWI0JywgJyM3ZmNkYmInLCAnIzQxYjZjNCcsICcjMWQ5MWMwJywgJyMyMjVlYTgnLCAnIzI1MzQ5NCcsICcjMDgxZDU4J10sXG4gICAgUHVycGxlczogWycjZmNmYmZkJywgJyNlZmVkZjUnLCAnI2RhZGFlYicsICcjYmNiZGRjJywgJyM5ZTlhYzgnLCAnIzgwN2RiYScsICcjNmE1MWEzJywgJyM1NDI3OGYnLCAnIzNmMDA3ZCddLFxuICAgIEduQnU6IFsnI2Y3ZmNmMCcsICcjZTBmM2RiJywgJyNjY2ViYzUnLCAnI2E4ZGRiNScsICcjN2JjY2M0JywgJyM0ZWIzZDMnLCAnIzJiOGNiZScsICcjMDg2OGFjJywgJyMwODQwODEnXSxcbiAgICBHcmV5czogWycjZmZmZmZmJywgJyNmMGYwZjAnLCAnI2Q5ZDlkOScsICcjYmRiZGJkJywgJyM5Njk2OTYnLCAnIzczNzM3MycsICcjNTI1MjUyJywgJyMyNTI1MjUnLCAnIzAwMDAwMCddLFxuICAgIFlsT3JSZDogWycjZmZmZmNjJywgJyNmZmVkYTAnLCAnI2ZlZDk3NicsICcjZmViMjRjJywgJyNmZDhkM2MnLCAnI2ZjNGUyYScsICcjZTMxYTFjJywgJyNiZDAwMjYnLCAnIzgwMDAyNiddLFxuICAgIFB1UmQ6IFsnI2Y3ZjRmOScsICcjZTdlMWVmJywgJyNkNGI5ZGEnLCAnI2M5OTRjNycsICcjZGY2NWIwJywgJyNlNzI5OGEnLCAnI2NlMTI1NicsICcjOTgwMDQzJywgJyM2NzAwMWYnXSxcbiAgICBCbHVlczogWycjZjdmYmZmJywgJyNkZWViZjcnLCAnI2M2ZGJlZicsICcjOWVjYWUxJywgJyM2YmFlZDYnLCAnIzQyOTJjNicsICcjMjE3MWI1JywgJyMwODUxOWMnLCAnIzA4MzA2YiddLFxuICAgIFB1QnVHbjogWycjZmZmN2ZiJywgJyNlY2UyZjAnLCAnI2QwZDFlNicsICcjYTZiZGRiJywgJyM2N2E5Y2YnLCAnIzM2OTBjMCcsICcjMDI4MThhJywgJyMwMTZjNTknLCAnIzAxNDYzNiddLFxuICAgIFZpcmlkaXM6IFsnIzQ0MDE1NCcsICcjNDgyNzc3JywgJyMzZjRhOGEnLCAnIzMxNjc4ZScsICcjMjY4MzhmJywgJyMxZjlkOGEnLCAnIzZjY2U1YScsICcjYjZkZTJiJywgJyNmZWU4MjUnXSxcblxuICAgIC8vIGRpdmVyZ2luZ1xuICAgIFNwZWN0cmFsOiBbJyM5ZTAxNDInLCAnI2Q1M2U0ZicsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA4YicsICcjZmZmZmJmJywgJyNlNmY1OTgnLCAnI2FiZGRhNCcsICcjNjZjMmE1JywgJyMzMjg4YmQnLCAnIzVlNGZhMiddLFxuICAgIFJkWWxHbjogWycjYTUwMDI2JywgJyNkNzMwMjcnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOGInLCAnI2ZmZmZiZicsICcjZDllZjhiJywgJyNhNmQ5NmEnLCAnIzY2YmQ2MycsICcjMWE5ODUwJywgJyMwMDY4MzcnXSxcbiAgICBSZEJ1OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZjdmN2Y3JywgJyNkMWU1ZjAnLCAnIzkyYzVkZScsICcjNDM5M2MzJywgJyMyMTY2YWMnLCAnIzA1MzA2MSddLFxuICAgIFBpWUc6IFsnIzhlMDE1MicsICcjYzUxYjdkJywgJyNkZTc3YWUnLCAnI2YxYjZkYScsICcjZmRlMGVmJywgJyNmN2Y3ZjcnLCAnI2U2ZjVkMCcsICcjYjhlMTg2JywgJyM3ZmJjNDEnLCAnIzRkOTIyMScsICcjMjc2NDE5J10sXG4gICAgUFJHbjogWycjNDAwMDRiJywgJyM3NjJhODMnLCAnIzk5NzBhYicsICcjYzJhNWNmJywgJyNlN2Q0ZTgnLCAnI2Y3ZjdmNycsICcjZDlmMGQzJywgJyNhNmRiYTAnLCAnIzVhYWU2MScsICcjMWI3ODM3JywgJyMwMDQ0MWInXSxcbiAgICBSZFlsQnU6IFsnI2E1MDAyNicsICcjZDczMDI3JywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDkwJywgJyNmZmZmYmYnLCAnI2UwZjNmOCcsICcjYWJkOWU5JywgJyM3NGFkZDEnLCAnIzQ1NzViNCcsICcjMzEzNjk1J10sXG4gICAgQnJCRzogWycjNTQzMDA1JywgJyM4YzUxMGEnLCAnI2JmODEyZCcsICcjZGZjMjdkJywgJyNmNmU4YzMnLCAnI2Y1ZjVmNScsICcjYzdlYWU1JywgJyM4MGNkYzEnLCAnIzM1OTc4ZicsICcjMDE2NjVlJywgJyMwMDNjMzAnXSxcbiAgICBSZEd5OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZmZmZmZmJywgJyNlMGUwZTAnLCAnI2JhYmFiYScsICcjODc4Nzg3JywgJyM0ZDRkNGQnLCAnIzFhMWExYSddLFxuICAgIFB1T3I6IFsnIzdmM2IwOCcsICcjYjM1ODA2JywgJyNlMDgyMTQnLCAnI2ZkYjg2MycsICcjZmVlMGI2JywgJyNmN2Y3ZjcnLCAnI2Q4ZGFlYicsICcjYjJhYmQyJywgJyM4MDczYWMnLCAnIzU0Mjc4OCcsICcjMmQwMDRiJ10sXG5cbiAgICAvLyBxdWFsaXRhdGl2ZVxuICAgIFNldDI6IFsnIzY2YzJhNScsICcjZmM4ZDYyJywgJyM4ZGEwY2InLCAnI2U3OGFjMycsICcjYTZkODU0JywgJyNmZmQ5MmYnLCAnI2U1YzQ5NCcsICcjYjNiM2IzJ10sXG4gICAgQWNjZW50OiBbJyM3ZmM5N2YnLCAnI2JlYWVkNCcsICcjZmRjMDg2JywgJyNmZmZmOTknLCAnIzM4NmNiMCcsICcjZjAwMjdmJywgJyNiZjViMTcnLCAnIzY2NjY2NiddLFxuICAgIFNldDE6IFsnI2U0MWExYycsICcjMzc3ZWI4JywgJyM0ZGFmNGEnLCAnIzk4NGVhMycsICcjZmY3ZjAwJywgJyNmZmZmMzMnLCAnI2E2NTYyOCcsICcjZjc4MWJmJywgJyM5OTk5OTknXSxcbiAgICBTZXQzOiBbJyM4ZGQzYzcnLCAnI2ZmZmZiMycsICcjYmViYWRhJywgJyNmYjgwNzInLCAnIzgwYjFkMycsICcjZmRiNDYyJywgJyNiM2RlNjknLCAnI2ZjY2RlNScsICcjZDlkOWQ5JywgJyNiYzgwYmQnLCAnI2NjZWJjNScsICcjZmZlZDZmJ10sXG4gICAgRGFyazI6IFsnIzFiOWU3NycsICcjZDk1ZjAyJywgJyM3NTcwYjMnLCAnI2U3Mjk4YScsICcjNjZhNjFlJywgJyNlNmFiMDInLCAnI2E2NzYxZCcsICcjNjY2NjY2J10sXG4gICAgUGFpcmVkOiBbJyNhNmNlZTMnLCAnIzFmNzhiNCcsICcjYjJkZjhhJywgJyMzM2EwMmMnLCAnI2ZiOWE5OScsICcjZTMxYTFjJywgJyNmZGJmNmYnLCAnI2ZmN2YwMCcsICcjY2FiMmQ2JywgJyM2YTNkOWEnLCAnI2ZmZmY5OScsICcjYjE1OTI4J10sXG4gICAgUGFzdGVsMjogWycjYjNlMmNkJywgJyNmZGNkYWMnLCAnI2NiZDVlOCcsICcjZjRjYWU0JywgJyNlNmY1YzknLCAnI2ZmZjJhZScsICcjZjFlMmNjJywgJyNjY2NjY2MnXSxcbiAgICBQYXN0ZWwxOiBbJyNmYmI0YWUnLCAnI2IzY2RlMycsICcjY2NlYmM1JywgJyNkZWNiZTQnLCAnI2ZlZDlhNicsICcjZmZmZmNjJywgJyNlNWQ4YmQnLCAnI2ZkZGFlYycsICcjZjJmMmYyJ11cbn07XG5cbi8vIGFkZCBsb3dlcmNhc2UgYWxpYXNlcyBmb3IgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGVzXG5mb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoY29sb3JicmV3ZXIpKSB7XG4gICAgY29sb3JicmV3ZXJba2V5LnRvTG93ZXJDYXNlKCldID0gY29sb3JicmV3ZXJba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29sb3JicmV3ZXI7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuL3NyYy9jaHJvbWEuanMnO1xuXG4vLyBmZWVsIGZyZWUgdG8gY29tbWVudCBvdXQgYW55dGhpbmcgdG8gcm9sbHVwXG4vLyBhIHNtYWxsZXIgY2hyb21hLmpzIGJ1aWx0XG5cbi8vIGlvIC0tPiBjb252ZXJ0IGNvbG9yc1xuaW1wb3J0ICcuL3NyYy9pby9jbXlrL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vY3NzL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vZ2wvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oY2cvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oZXgvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc2kvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc2wvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc3YvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9sYWIvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9sY2gvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9uYW1lZC9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL251bS9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL3JnYi9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL3RlbXAvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9va2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL29rbGNoL2luZGV4LmpzJztcblxuLy8gb3BlcmF0b3JzIC0tPiBtb2RpZnkgZXhpc3RpbmcgQ29sb3JzXG5pbXBvcnQgJy4vc3JjL29wcy9hbHBoYS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9jbGlwcGVkLmpzJztcbmltcG9ydCAnLi9zcmMvb3BzL2Rhcmtlbi5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9nZXQuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvbHVtaW5hbmNlLmpzJztcbmltcG9ydCAnLi9zcmMvb3BzL21peC5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9wcmVtdWx0aXBseS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9zYXR1cmF0ZS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9zZXQuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvc2hhZGUuanMnO1xuXG4vLyBpbnRlcnBvbGF0b3JzXG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9yZ2IuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvbHJnYi5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9sYWIuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvbGNoLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL251bS5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9oY2cuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvaHNpLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL2hzbC5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9oc3YuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3Ivb2tsYWIuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3Ivb2tsY2guanMnO1xuXG4vLyBnZW5lcmF0b3JzIC0tID4gY3JlYXRlIG5ldyBjb2xvcnNcbmltcG9ydCBhdmVyYWdlIGZyb20gJy4vc3JjL2dlbmVyYXRvci9hdmVyYWdlLmpzJztcbmltcG9ydCBiZXppZXIgZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2Jlemllci5qcyc7XG5pbXBvcnQgYmxlbmQgZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2JsZW5kLmpzJztcbmltcG9ydCBjdWJlaGVsaXggZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2N1YmVoZWxpeC5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4vc3JjL2dlbmVyYXRvci9taXguanMnO1xuaW1wb3J0IHJhbmRvbSBmcm9tICcuL3NyYy9nZW5lcmF0b3IvcmFuZG9tLmpzJztcbmltcG9ydCBzY2FsZSBmcm9tICcuL3NyYy9nZW5lcmF0b3Ivc2NhbGUuanMnO1xuXG4vLyBvdGhlciB1dGlsaXR5IG1ldGhvZHNcbmltcG9ydCB7IGFuYWx5emUgfSBmcm9tICcuL3NyYy91dGlscy9hbmFseXplLmpzJztcbmltcG9ydCBjb250cmFzdCBmcm9tICcuL3NyYy91dGlscy9jb250cmFzdC5qcyc7XG5pbXBvcnQgZGVsdGFFIGZyb20gJy4vc3JjL3V0aWxzL2RlbHRhLWUuanMnO1xuaW1wb3J0IGRpc3RhbmNlIGZyb20gJy4vc3JjL3V0aWxzL2Rpc3RhbmNlLmpzJztcbmltcG9ydCB7IGxpbWl0cyB9IGZyb20gJy4vc3JjL3V0aWxzL2FuYWx5emUuanMnO1xuaW1wb3J0IHZhbGlkIGZyb20gJy4vc3JjL3V0aWxzL3ZhbGlkLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuL3NyYy9pby9pbnB1dC5qcyc7XG5cbi8vIHNjYWxlXG5pbXBvcnQgc2NhbGVzIGZyb20gJy4vc3JjL3V0aWxzL3NjYWxlcy5qcyc7XG5cbi8vIGNvbG9yc1xuaW1wb3J0IGNvbG9ycyBmcm9tICcuL3NyYy9jb2xvcnMvdzNjeDExLmpzJztcbmltcG9ydCBicmV3ZXIgZnJvbSAnLi9zcmMvY29sb3JzL2NvbG9yYnJld2VyLmpzJztcblxuT2JqZWN0LmFzc2lnbihjaHJvbWEsIHtcbiAgICBhdmVyYWdlLFxuICAgIGJlemllcixcbiAgICBibGVuZCxcbiAgICBjdWJlaGVsaXgsXG4gICAgbWl4LFxuICAgIGludGVycG9sYXRlOiBtaXgsXG4gICAgcmFuZG9tLFxuICAgIHNjYWxlLFxuICAgIGFuYWx5emUsXG4gICAgY29udHJhc3QsXG4gICAgZGVsdGFFLFxuICAgIGRpc3RhbmNlLFxuICAgIGxpbWl0cyxcbiAgICB2YWxpZCxcbiAgICBzY2FsZXMsXG4gICAgaW5wdXQsXG4gICAgY29sb3JzLFxuICAgIGJyZXdlclxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNocm9tYTtcbiIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5leHBvcnQgdmFyIE1JRF9DT0xPUl9TVE9QID0gJyNFQkVGRjUnO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgYW4gYXJyYXkgb2YgY29sb3JzIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGludGVycG9sYXRlZFxuICogY29sb3JzIGJhc2VkIG9uIHRoZSBudW1iZXIgb2Ygc3RlcHMvbGVuIG5lZWRlZCBmb3IgdXNlIGluIFVJIGVsZW1lbnRzIHN1Y2ggYXMgY2hhcnRzLlxuICogRGVyaXZlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9na2EvcGFsZXR0ZXMgKFVubGljZW5zZWQpXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yUGFsZXR0ZShcbi8qKlxuICogVGhlIG1haW4gY29sb3IgY29kZSBvciBhcnJheSBvZiBjb2Rlc1xuICovXG5jb2xvcnMpIHtcbiAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMTA7XG4gIHZhciBkaXZlcmdpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICB2YXIgY2F0ZWdvcmljYWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IGZhbHNlO1xuICB2YXIgaGV4U3RhcnQgPSBjb2xvcnMuc2xpY2UoKTtcbiAgdmFyIGhleEVuZCA9IFtdO1xuICB2YXIgZXZlbiA9IGxlbiAlIDIgPT09IDA7XG4gIHZhciBudW1Db2xvcnNMZWZ0ID0gZGl2ZXJnaW5nID8gTWF0aC5jZWlsKGxlbiAvIDIpICsgKGV2ZW4gPyAxIDogMCkgOiBsZW47XG4gIHZhciBudW1Db2xvcnNSaWdodCA9IGRpdmVyZ2luZyA/IE1hdGguY2VpbChsZW4gLyAyKSArIChldmVuID8gMSA6IDApIDogMDtcblxuICAvLyBJZiBvbmx5IGEgc2luZ2xlIGNvbG9yIGlzIHByb3ZpZGVkIHByZXBlbmQgdGhlIG1pZC1wb2ludCBjb2xvclxuICBpZiAoaGV4U3RhcnQubGVuZ3RoID09PSAxKSB7XG4gICAgaGV4U3RhcnQudW5zaGlmdChNSURfQ09MT1JfU1RPUCk7XG4gIH1cblxuICAvLyBJZiBkaXZlcmdpbmcsIHNwbGl0IHRoZSBzdGFydCBhcnJheSBhbmQgZHVwbGljYXRlIHRoZSBtaWQgY29sb3JcbiAgaWYgKGRpdmVyZ2luZykge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gbWlkcG9pbnQsIGNyZWF0ZSBvbmVcbiAgICBpZiAoaGV4U3RhcnQubGVuZ3RoIDwgMykge1xuICAgICAgaGV4U3RhcnRbMl0gPSBoZXhTdGFydFsxXTtcbiAgICAgIGhleFN0YXJ0WzFdID0gTUlEX0NPTE9SX1NUT1A7XG4gICAgfVxuICAgIHZhciBudW1Db2xvcnNIYWxmID0gTWF0aC5jZWlsKGhleFN0YXJ0Lmxlbmd0aCAvIDIpO1xuICAgIHZhciBjb2xvcnNMZWZ0ID0gaGV4U3RhcnQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKGluZGV4IDwgbnVtQ29sb3JzSGFsZikge1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8ga2VlcCBpdFxuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBjb2xvcnNSaWdodCA9IGhleFN0YXJ0LnJldmVyc2UoKS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPCBudW1Db2xvcnNIYWxmKSB7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBrZWVwIGl0XG4gICAgICB9XG4gICAgfSkucmV2ZXJzZSgpO1xuICAgIGhleFN0YXJ0ID0gY29sb3JzTGVmdDtcbiAgICBoZXhFbmQgPSBjb2xvcnNSaWdodDtcbiAgfVxuICBmdW5jdGlvbiBjcmVhdGVTdGVwcyhjb2xvcnMsIHN0ZXBzKSB7XG4gICAgaWYgKCFjb2xvcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gY29sb3JzO1xuICAgIH1cbiAgICBpZiAoIWNhdGVnb3JpY2FsKSB7XG4gICAgICByZXR1cm4gY2hyb21hLmJlemllcihjb2xvcnMpLnNjYWxlKCkuY29ycmVjdExpZ2h0bmVzcygpLmNvbG9ycyhzdGVwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjaHJvbWEuc2NhbGUoY29sb3JzKS5jb2xvcnMoc3RlcHMpO1xuICAgIH1cbiAgfVxuICB2YXIgc3RlcHNMZWZ0ID0gY3JlYXRlU3RlcHMoaGV4U3RhcnQsIG51bUNvbG9yc0xlZnQpO1xuICB2YXIgc3RlcHNSaWdodCA9IGNyZWF0ZVN0ZXBzKGhleEVuZCwgbnVtQ29sb3JzUmlnaHQpO1xuICByZXR1cm4gKGV2ZW4gJiYgZGl2ZXJnaW5nID8gc3RlcHNMZWZ0LnNsaWNlKDAsIHN0ZXBzTGVmdC5sZW5ndGggLSAxKSA6IHN0ZXBzTGVmdCkuY29uY2F0KHN0ZXBzUmlnaHQuc2xpY2UoMSkpO1xufSIsICJmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgY29sb3JQYWxldHRlIH0gZnJvbSAnLi9jb2xvcl9wYWxldHRlJztcbnZhciBmbGF0dGVuID0gZnVuY3Rpb24gZmxhdHRlbihhcnIpIHtcbiAgdmFyIF9yZWY7XG4gIHJldHVybiAoX3JlZiA9IFtdKS5jb25jYXQuYXBwbHkoX3JlZiwgX3RvQ29uc3VtYWJsZUFycmF5KGFycikpO1xufTtcbnZhciBldWlQYWxldHRlID0gZnVuY3Rpb24gZXVpUGFsZXR0ZShjb2xvcnMsIHN0ZXBzKSB7XG4gIHZhciBkaXZlcmdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgdmFyIGNhdGVnb3JpY2FsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB0cnVlO1xuICAvLyBUaGlzIGZ1bmN0aW9uIGFsc28gdHJpbXMgdGhlIGZpcnN0IGNvbG9yIHNvIHdoaXRlL2JsYWNrIGlzIG5ldmVyIGEgY29sb3JcbiAgaWYgKCFkaXZlcmdlICYmIHN0ZXBzID4gMSkge1xuICAgIHZhciBwYWxldHRlID0gY29sb3JQYWxldHRlKGNvbG9ycywgc3RlcHMgKyAxKTtcbiAgICBwYWxldHRlLnNoaWZ0KCk7XG4gICAgcmV0dXJuIHBhbGV0dGU7XG4gIH1cbiAgcmV0dXJuIGNvbG9yUGFsZXR0ZShjb2xvcnMsIHN0ZXBzLCBkaXZlcmdlLCBjYXRlZ29yaWNhbCk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlQ29sb3JCbGluZCA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVDb2xvckJsaW5kKCkge1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgIF9yZWYyJHJvdGF0aW9ucyA9IF9yZWYyLnJvdGF0aW9ucyxcbiAgICByb3RhdGlvbnMgPSBfcmVmMiRyb3RhdGlvbnMgPT09IHZvaWQgMCA/IDEgOiBfcmVmMiRyb3RhdGlvbnMsXG4gICAgX3JlZjIkb3JkZXIgPSBfcmVmMi5vcmRlcixcbiAgICBvcmRlciA9IF9yZWYyJG9yZGVyID09PSB2b2lkIDAgPyAnYXBwZW5kJyA6IF9yZWYyJG9yZGVyLFxuICAgIF9yZWYyJGRpcmVjdGlvbiA9IF9yZWYyLmRpcmVjdGlvbixcbiAgICBkaXJlY3Rpb24gPSBfcmVmMiRkaXJlY3Rpb24gPT09IHZvaWQgMCA/ICdsaWdodGVyJyA6IF9yZWYyJGRpcmVjdGlvbixcbiAgICBfcmVmMiRzb3J0QnkgPSBfcmVmMi5zb3J0QnksXG4gICAgc29ydEJ5ID0gX3JlZjIkc29ydEJ5ID09PSB2b2lkIDAgPyAnZGVmYXVsdCcgOiBfcmVmMiRzb3J0QnksXG4gICAgX3JlZjIkc29ydFNoaWZ0ID0gX3JlZjIuc29ydFNoaWZ0LFxuICAgIHNvcnRTaGlmdCA9IF9yZWYyJHNvcnRTaGlmdCA9PT0gdm9pZCAwID8gJy0xMDAnIDogX3JlZjIkc29ydFNoaWZ0O1xuICB2YXIgY29sb3JzID0gW107XG4gIHZhciBiYXNlID0gWycjNTRCMzk5JyxcbiAgLy8gMCBncmVlblxuICAnIzYwOTJDMCcsXG4gIC8vIDEgYmx1ZVxuICAnI0QzNjA4NicsXG4gIC8vIDIgZGFyayBwaW5rXG4gICcjOTE3MEI4JyxcbiAgLy8gMyBwdXJwbGVcbiAgJyNDQThFQUUnLFxuICAvLyA0IGxpZ2h0IHBpbmtcbiAgJyNENkJGNTcnLFxuICAvLyA1IHllbGxvd1xuICAnI0I5QTg4OCcsXG4gIC8vIDYgdGFuXG4gICcjREE4QjQ1JyxcbiAgLy8gNyBvcmFuZ2VcbiAgJyNBQTY1NTYnLFxuICAvLyA4IGJyb3duXG4gICcjRTc2NjRDJyAvLyA5IHJlZFxuICBdO1xuICBpZiAoc29ydEJ5ID09PSAnbmF0dXJhbCcpIHtcbiAgICAvLyBTb3J0IHRoZSBjb2xvcnMgYmFzZWQgb24gdGhlIGNvbG9yIHdoZWVsLCBidXQgc2hpZnRpbmcgdGhlIHZhbHVlcyBiYXNlZCBvbiBzb3J0U2hpZnRcbiAgICBiYXNlID0gX3RvQ29uc3VtYWJsZUFycmF5KGJhc2UpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBjaHJvbWEoYSkuc2V0KCdoc2wuaCcsIHNvcnRTaGlmdCkuaHNsKClbMF0gLSBjaHJvbWEoYikuc2V0KCdoc2wuaCcsIHNvcnRTaGlmdCkuaHNsKClbMF07XG4gICAgfSk7XG4gIH1cbiAgaWYgKHJvdGF0aW9ucyA+IDEpIHtcbiAgICB2YXIgcGFsZXR0ZXMgPSBiYXNlLm1hcChmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgZGFya2VzdCBhbmQgbGlnaHRlc3QgdmVyc2lvbnMgb2YgZWFjaCBjb2xvciB1c2luZyBibGFjayBhbmQgd2hpdGVcbiAgICAgIHZhciBwYWxldHRlID0gY29sb3JQYWxldHRlKFsnYmxhY2snLCBjb2xvciwgJ3doaXRlJ10sIDUsIGZhbHNlLCB0cnVlKTtcbiAgICAgIC8vIFRoZW4gcmVtb3ZpbmcgdGhlIGV4dHJlbWVzXG4gICAgICBwYWxldHRlLnBvcCgpO1xuICAgICAgcGFsZXR0ZS5zaGlmdCgpO1xuICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnbGlnaHRlcic6XG4gICAgICAgICAgcmV0dXJuIGNvbG9yUGFsZXR0ZShbcGFsZXR0ZVsxXSwgcGFsZXR0ZVsyXV0sIHJvdGF0aW9ucywgZmFsc2UsIHRydWUpO1xuICAgICAgICBjYXNlICdkYXJrZXInOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUoW3BhbGV0dGVbMV0sIHBhbGV0dGVbMF1dLCByb3RhdGlvbnMsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgY2FzZSAnYm90aCc6XG4gICAgICAgICAgcmV0dXJuIGNvbG9yUGFsZXR0ZShwYWxldHRlLCByb3RhdGlvbnMsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAob3JkZXIgPT09ICdncm91cCcpIHtcbiAgICAgIGNvbG9ycyA9IGZsYXR0ZW4ocGFsZXR0ZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgIHZhciBfY29sb3JzO1xuICAgICAgICB2YXIgcm90YXRpb24gPSBwYWxldHRlcy5tYXAoZnVuY3Rpb24gKHBhbGV0dGUpIHtcbiAgICAgICAgICByZXR1cm4gcGFsZXR0ZVtpXTtcbiAgICAgICAgfSk7XG4gICAgICAgIChfY29sb3JzID0gY29sb3JzKS5wdXNoLmFwcGx5KF9jb2xvcnMsIF90b0NvbnN1bWFibGVBcnJheShyb3RhdGlvbikpO1xuICAgICAgfTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm90YXRpb25zOyBpKyspIHtcbiAgICAgICAgX2xvb3AoaSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbG9ycyA9IGJhc2U7XG4gIH1cbiAgcmV0dXJuIGNvbG9ycztcbn07XG5cbi8qKlxuICogQ29sb3IgYmxpbmQgcGFsZXR0ZSB3aXRoIHRleHQgaXMgbWVhbnQgZm9yIHVzZSB3aGVuIHRleHQgaXMgYXBwbGllZCBvbiB0b3Agb2YgdGhlIGNvbG9yLlxuICogSXQgaW5jcmVhc2VzIHRoZSBicmlnaHRuZXNzIG9mIHRoZSBjb2xvciB0byBnaXZlIHRoZSB0ZXh0IG1vcmUgY29udHJhc3QuXG4gKi9cbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0ID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0KCkge1xuICB2YXIgcGFsZXR0ZVByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIG9yaWdpbmFsUGFsZXR0ZSA9IGV1aVBhbGV0dGVDb2xvckJsaW5kKHBhbGV0dGVQcm9wcyk7XG4gIHZhciBuZXdQYWxldHRlID0gb3JpZ2luYWxQYWxldHRlLm1hcChmdW5jdGlvbiAoY29sb3IpIHtcbiAgICByZXR1cm4gY2hyb21hKGNvbG9yKS5icmlnaHRlbigwLjUpLmhleCgpO1xuICB9KTtcbiAgcmV0dXJuIG5ld1BhbGV0dGU7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlRm9yTGlnaHRCYWNrZ3JvdW5kID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUZvckxpZ2h0QmFja2dyb3VuZCgpIHtcbiAgcmV0dXJuIFsnIzAwNkJCNCcsICcjMDE3RDczJywgJyNGNUE3MDAnLCAnI0JEMjcxRScsICcjREQwQTczJ107XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlRm9yRGFya0JhY2tncm91bmQgPSBmdW5jdGlvbiBldWlQYWxldHRlRm9yRGFya0JhY2tncm91bmQoKSB7XG4gIHJldHVybiBbJyMxQkE5RjUnLCAnIzdERTJEMScsICcjRjk5MEMwJywgJyNGNjYnLCAnI0ZGQ0U3QSddO1xufTtcbnZhciBncmVlbkNvbG9yID0gJyMyMDkyODAnO1xudmFyIHJlZENvbG9yID0gJyNDQzU2NDInO1xudmFyIGxpZ2h0UmVkQ29sb3IgPSBldWlQYWxldHRlQ29sb3JCbGluZCgpWzldO1xudmFyIGNvb2xBcnJheSA9IFtldWlQYWxldHRlQ29sb3JCbGluZCgpWzFdLCAnIzYwOTJDMCddO1xudmFyIHdhcm1BcnJheSA9IFtldWlQYWxldHRlQ29sb3JCbGluZCgpWzddLCBldWlQYWxldHRlQ29sb3JCbGluZCgpWzldXTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUZvclN0YXR1cyA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVGb3JTdGF0dXMoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtncmVlbkNvbG9yXTtcbiAgfVxuICBpZiAoc3RlcHMgPD0gMykge1xuICAgIHJldHVybiBldWlQYWxldHRlKFtncmVlbkNvbG9yLCBldWlQYWxldHRlQ29sb3JCbGluZCgpWzVdLCByZWRDb2xvcl0sIHN0ZXBzLCB0cnVlKTtcbiAgfVxuICByZXR1cm4gZXVpUGFsZXR0ZShbZ3JlZW5Db2xvciwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVswXSwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs1XSwgbGlnaHRSZWRDb2xvciwgcmVkQ29sb3JdLCBzdGVwcywgdHJ1ZSk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlRm9yVGVtcGVyYXR1cmUgPSBmdW5jdGlvbiBldWlQYWxldHRlRm9yVGVtcGVyYXR1cmUoc3RlcHMpIHtcbiAgdmFyIGNvb2xzID0gY29sb3JQYWxldHRlKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoY29vbEFycmF5LnNsaWNlKCkucmV2ZXJzZSgpKSwgWycjRUJFRkY1J10pLCAzKTtcbiAgdmFyIHdhcm1zID0gY29sb3JQYWxldHRlKFsnI0Y0RjNEQiddLmNvbmNhdCh3YXJtQXJyYXkpLCAzKTtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtjb29sc1swXV07XG4gIH0gZWxzZSBpZiAoc3RlcHMgPD0gMykge1xuICAgIHJldHVybiBldWlQYWxldHRlKFtjb29sc1swXSwgbGlnaHRSZWRDb2xvcl0sIHN0ZXBzLCB0cnVlKTtcbiAgfVxuICByZXR1cm4gZXVpUGFsZXR0ZShbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNvb2xzKSwgX3RvQ29uc3VtYWJsZUFycmF5KHdhcm1zKSksIHN0ZXBzLCB0cnVlKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVDb21wbGVtZW50YXJ5ID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUNvbXBsZW1lbnRhcnkoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtldWlQYWxldHRlQ29sb3JCbGluZCgpWzFdXTtcbiAgfVxuICByZXR1cm4gZXVpUGFsZXR0ZShbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVsxXSwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs3XV0sIHN0ZXBzLCB0cnVlKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVSZWQgPSBmdW5jdGlvbiBldWlQYWxldHRlUmVkKHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbbGlnaHRSZWRDb2xvcl07XG4gIH1cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZScsIHJlZENvbG9yXSwgc3RlcHMpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUdyZWVuID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUdyZWVuKHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVswXV07XG4gIH1cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZScsIGdyZWVuQ29sb3JdLCBzdGVwcyk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlQ29vbCA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVDb29sKHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbY29vbEFycmF5WzFdXTtcbiAgfVxuICByZXR1cm4gZXVpUGFsZXR0ZShbJ3doaXRlJ10uY29uY2F0KGNvb2xBcnJheSksIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVXYXJtID0gZnVuY3Rpb24gZXVpUGFsZXR0ZVdhcm0oc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtsaWdodFJlZENvbG9yXTtcbiAgfVxuICByZXR1cm4gZXVpUGFsZXR0ZShbJyNGQkZCREMnXS5jb25jYXQod2FybUFycmF5KSwgc3RlcHMpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUdyYXkgPSBmdW5jdGlvbiBldWlQYWxldHRlR3JheShzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gWycjOThhMmIzJ107XG4gIH1cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZScsICcjZDNkYWU2JywgJyM5OGEyYjMnLCAnIzY5NzA3ZCcsICcjMzQzNzQxJ10sIHN0ZXBzLCBmYWxzZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBpc1ZhbGlkSGV4IH0gZnJvbSAnLi9pc192YWxpZF9oZXgnO1xudmFyIGluT3JpZ2luYWxGb3JtYXQgPSBmdW5jdGlvbiBpbk9yaWdpbmFsRm9ybWF0KG9yaWdpbmFsQ29sb3IsIG5ld0NvbG9yKSB7XG4gIHJldHVybiBpc1ZhbGlkSGV4KG9yaWdpbmFsQ29sb3IpID8gbmV3Q29sb3IuaGV4KCkgOiBuZXdDb2xvci5jc3MoKTtcbn07XG5cbi8qKlxuICogTWFrZXMgYSBjb2xvciBtb3JlIHRyYW5zcGFyZW50LlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWFuaXB1bGF0ZVxuICogQHBhcmFtIGFscGhhIC0gYWxwaGEgY2hhbm5lbCB2YWx1ZS4gRnJvbSAwLTEuXG4gKi9cbmV4cG9ydCB2YXIgdHJhbnNwYXJlbnRpemUgPSBmdW5jdGlvbiB0cmFuc3BhcmVudGl6ZShjb2xvciwgYWxwaGEpIHtcbiAgcmV0dXJuIGNocm9tYShjb2xvcikuYWxwaGEoYWxwaGEpLmNzcygpO1xufTtcblxuLyoqXG4gKiBNaXhlcyBhIHByb3ZpZGVkIGNvbG9yIHdpdGggd2hpdGUuXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtaXggd2l0aCB3aGl0ZVxuICogQHBhcmFtIHJhdGlvIC0gTWl4IHdlaWdodC4gRnJvbSAwLTEuIExhcmdlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSB3aGl0ZS5cbiAqL1xuZXhwb3J0IHZhciB0aW50ID0gZnVuY3Rpb24gdGludChjb2xvciwgcmF0aW8pIHtcbiAgdmFyIHRpbnQgPSBjaHJvbWEubWl4KGNvbG9yLCAnI2ZmZicsIHJhdGlvLCAncmdiJyk7XG4gIHJldHVybiBpbk9yaWdpbmFsRm9ybWF0KGNvbG9yLCB0aW50KTtcbn07XG5cbi8qKlxuICogTWl4ZXMgYSBwcm92aWRlZCBjb2xvciB3aXRoIGJsYWNrLlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWl4IHdpdGggYmxhY2tcbiAqIEBwYXJhbSByYXRpbyAtIE1peCB3ZWlnaHQuIEZyb20gMC0xLiBMYXJnZXIgdmFsdWUgaW5kaWNhdGVzIG1vcmUgYmxhY2suXG4gKi9cbmV4cG9ydCB2YXIgc2hhZGUgPSBmdW5jdGlvbiBzaGFkZShjb2xvciwgcmF0aW8pIHtcbiAgdmFyIHNoYWRlID0gY2hyb21hLm1peChjb2xvciwgJyMwMDAnLCByYXRpbywgJ3JnYicpO1xuICByZXR1cm4gaW5PcmlnaW5hbEZvcm1hdChjb2xvciwgc2hhZGUpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0aW50ZWQgY29sb3IgZm9yIGxpZ2h0IG1vZGUgYW5kIHNoYWRlZCBjb2xvciBmb3IgZGFyayBtb2RlXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtaXggd2l0aCB3aGl0ZVxuICogQHBhcmFtIHJhdGlvIC0gTWl4IHdlaWdodC4gRnJvbSAwLTEuIExhcmdlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSB3aGl0ZS5cbiAqIEBwYXJhbSBjb2xvck1vZGUgLSBMaWdodCBvciBkYXJrIG9ubHlcbiAqL1xuZXhwb3J0IHZhciB0aW50T3JTaGFkZSA9IGZ1bmN0aW9uIHRpbnRPclNoYWRlKGNvbG9yLCByYXRpbywgY29sb3JNb2RlKSB7XG4gIHJldHVybiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHNoYWRlKGNvbG9yLCByYXRpbykgOiB0aW50KGNvbG9yLCByYXRpbyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHNoYWRlZCBjb2xvciBmb3IgbGlnaHQgbW9kZSBhbmQgdGludGVkIGNvbG9yIGZvciBkYXJrIG1vZGVcbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1peCB3aXRoIHdoaXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBNaXggd2VpZ2h0LiBGcm9tIDAtMS4gTGFyZ2VyIHZhbHVlIGluZGljYXRlcyBtb3JlIHdoaXRlLlxuICogQHBhcmFtIGNvbG9yTW9kZSAtIExpZ2h0IG9yIGRhcmsgb25seVxuICovXG5leHBvcnQgdmFyIHNoYWRlT3JUaW50ID0gZnVuY3Rpb24gc2hhZGVPclRpbnQoY29sb3IsIHJhdGlvLCBjb2xvck1vZGUpIHtcbiAgcmV0dXJuIGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gdGludChjb2xvciwgcmF0aW8pIDogc2hhZGUoY29sb3IsIHJhdGlvKTtcbn07XG5cbi8qKlxuICogSW5jcmVhc2VzIHRoZSBzYXR1cmF0aW9uIG9mIGEgY29sb3IgYnkgbWFuaXB1bGF0aW5nIHRoZSBoc2wgc2F0dXJhdGlvbi5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEuXG4gKi9cbmV4cG9ydCB2YXIgc2F0dXJhdGUgPSBmdW5jdGlvbiBzYXR1cmF0ZShjb2xvciwgYW1vdW50KSB7XG4gIHZhciBzYXR1cmF0ZSA9IGNocm9tYShjb2xvcikuc2V0KCdoc2wucycsIFwiK1wiLmNvbmNhdChhbW91bnQpKTtcbiAgcmV0dXJuIGluT3JpZ2luYWxGb3JtYXQoY29sb3IsIHNhdHVyYXRlKTtcbn07XG5cbi8qKlxuICogRGVjcmVhc2VzIHRoZSBzYXR1cmF0aW9uIG9mIGEgY29sb3IgYnkgbWFuaXB1bGF0aW5nIHRoZSBoc2wgc2F0dXJhdGlvbi5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEuXG4gKi9cbmV4cG9ydCB2YXIgZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIGRlc2F0dXJhdGUoY29sb3IsIGFtb3VudCkge1xuICB2YXIgZGVzYXR1cmF0ZSA9IGNocm9tYShjb2xvcikuc2V0KCdoc2wucycsIFwiLVwiLmNvbmNhdChhbW91bnQpKTtcbiAgcmV0dXJuIGluT3JpZ2luYWxGb3JtYXQoY29sb3IsIGRlc2F0dXJhdGUpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsaWdodG5lc3MgdmFsdWUgb2YgYSBjb2xvci4gMC0xMDBcbiAqIEBwYXJhbSBjb2xvclxuICovXG5leHBvcnQgdmFyIGxpZ2h0bmVzcyA9IGZ1bmN0aW9uIGxpZ2h0bmVzcyhjb2xvcikge1xuICByZXR1cm4gY2hyb21hKGNvbG9yKS5nZXQoJ2hzbC5sJykgKiAxMDA7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGRhcmtlbiB2YWx1ZSBvZiBhIGNvbG9yLiAwLTEwMFxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWFuaXB1bGF0ZVxuICogQHBhcmFtIGFtb3VudCAtIEFtb3VudCB0byBjaGFuZ2UgaW4gYWJzb2x1dGUgdGVybXMuIDAtMS5cbiAqL1xuZXhwb3J0IHZhciBkYXJrZW4gPSBmdW5jdGlvbiBkYXJrZW4oY29sb3IsIGFtb3VudCkge1xuICByZXR1cm4gY2hyb21hKGNvbG9yKS5kYXJrZW4oYW1vdW50KS5oZXgoKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYnJpZ2h0ZW4gdmFsdWUgb2YgYSBjb2xvci4gMC0xMDBcbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEuXG4gKi9cbmV4cG9ydCB2YXIgYnJpZ2h0ZW4gPSBmdW5jdGlvbiBicmlnaHRlbihjb2xvciwgYW1vdW50KSB7XG4gIHJldHVybiBjaHJvbWEoY29sb3IpLmJyaWdodGVuKGFtb3VudCkuaGV4KCk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBzaGFkZSwgdGludCwgbGlnaHRuZXNzIGFzIGdldExpZ2h0bmVzcyB9IGZyb20gJy4vbWFuaXB1bGF0aW9uJztcbmltcG9ydCB7IGdldE9uIH0gZnJvbSAnLi4vdGhlbWUvdXRpbHMnO1xuZXhwb3J0IHZhciB3Y2FnQ29udHJhc3RNaW4gPSA0LjU7IC8vIFdDQUcgQUEgbWluaW11bSBjb250cmFzdCByYXRpbyBmb3Igbm9ybWFsIChub24tbGFyZ2UpIHRleHRcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGNvbG9yIHRoYXQgbWVldHMgb3IgZXhjZWVkcyBXQ0FHIGxldmVsIEFBXG4gKiBAcGFyYW0gZm9yZWdyb3VuZCAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSByYXRpbyAtIEFtb3VudCB0byBjaGFuZ2UgaW4gYWJzb2x1dGUgdGVybXMuIDAtMTAuXG4gKiAqXG4gKiBAcGFyYW0gdGhlbWVPckJhY2tncm91bmQgLSBDb2xvciB0byB1c2UgYXMgdGhlIGNvbnRyYXN0IGJhc2lzIG9yIGp1c3QgcGFzcyBFdWlUaGVtZVxuICovXG5leHBvcnQgdmFyIG1ha2VIaWdoQ29udHJhc3RDb2xvciA9IGZ1bmN0aW9uIG1ha2VIaWdoQ29udHJhc3RDb2xvcihfZm9yZWdyb3VuZCkge1xuICB2YXIgcmF0aW8gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDQuODU7XG4gIHJldHVybiBmdW5jdGlvbiAodGhlbWVPckJhY2tncm91bmQpIHtcbiAgICB2YXIgX2dldE9uO1xuICAgIHZhciBmb3JlZ3JvdW5kID0gX3R5cGVvZih0aGVtZU9yQmFja2dyb3VuZCkgPT09ICdvYmplY3QnID8gKF9nZXRPbiA9IGdldE9uKHRoZW1lT3JCYWNrZ3JvdW5kLCBfZm9yZWdyb3VuZCkpICE9PSBudWxsICYmIF9nZXRPbiAhPT0gdm9pZCAwID8gX2dldE9uIDogX2ZvcmVncm91bmQgOiBfZm9yZWdyb3VuZDtcbiAgICB2YXIgYmFja2dyb3VuZCA9IF90eXBlb2YodGhlbWVPckJhY2tncm91bmQpID09PSAnb2JqZWN0JyA/IHRoZW1lT3JCYWNrZ3JvdW5kLmNvbG9ycy5ib2R5IDogdGhlbWVPckJhY2tncm91bmQ7XG4gICAgaWYgKGNocm9tYShmb3JlZ3JvdW5kKS5hbHBoYSgpIDwgMSB8fCBjaHJvbWEoYmFja2dyb3VuZCkuYWxwaGEoKSA8IDEpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkNvbnRyYXN0IGNhbm5vdCBiZSBhY2N1cmF0ZWx5IGNhbGN1bGF0ZWQgd2hlbiBjb2xvcnMgaGF2ZSBhbHBoYSBjaGFubmVsIG9wYWNpdHkuIE1ha2Ugc3VyZSB0aGUgcHJvdmlkZWQgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMgaGF2ZSBubyB0cmFuc3BhcmVuY3k6XFxuXFxuRm9yZWdyb3VuZDogXCIuY29uY2F0KGZvcmVncm91bmQsIFwiXFxuQmFja2dyb3VuZDogXCIpLmNvbmNhdChiYWNrZ3JvdW5kKSk7XG4gICAgfVxuICAgIHZhciBjb250cmFzdCA9IGNocm9tYS5jb250cmFzdChmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcblxuICAgIC8vIERldGVybWluZSB0aGUgbGlnaHRuZXNzIGZhY3RvciBvZiB0aGUgYmFja2dyb3VuZCBjb2xvciBmaXJzdCB0b1xuICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRvIHNoYWRlIG9yIHRpbnQgdGhlIGZvcmVncm91bmQuXG4gICAgdmFyIGJyaWdodG5lc3MgPSBnZXRMaWdodG5lc3MoYmFja2dyb3VuZCk7XG4gICAgdmFyIGhpZ2hDb250cmFzdFRleHRDb2xvciA9IGZvcmVncm91bmQ7XG4gICAgd2hpbGUgKGNvbnRyYXN0IDwgcmF0aW8pIHtcbiAgICAgIGlmIChicmlnaHRuZXNzID4gNTApIHtcbiAgICAgICAgaGlnaENvbnRyYXN0VGV4dENvbG9yID0gc2hhZGUoaGlnaENvbnRyYXN0VGV4dENvbG9yLCAwLjA1KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hDb250cmFzdFRleHRDb2xvciA9IHRpbnQoaGlnaENvbnRyYXN0VGV4dENvbG9yLCAwLjA1KTtcbiAgICAgIH1cbiAgICAgIGNvbnRyYXN0ID0gY2hyb21hLmNvbnRyYXN0KGhpZ2hDb250cmFzdFRleHRDb2xvciwgYmFja2dyb3VuZCk7XG4gICAgICB2YXIgbGlnaHRuZXNzID0gZ2V0TGlnaHRuZXNzKGhpZ2hDb250cmFzdFRleHRDb2xvcik7XG4gICAgICBpZiAobGlnaHRuZXNzIDwgNSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0hpZ2ggZW5vdWdoIGNvbnRyYXN0IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLiBNb3N0IGxpa2VseSB5b3VyIGJhY2tncm91bmQgY29sb3IgZG9lcyBub3QgYWRqdXN0IGZvciBsaWdodCBtb2RlLicpO1xuICAgICAgICByZXR1cm4gaGlnaENvbnRyYXN0VGV4dENvbG9yO1xuICAgICAgfVxuICAgICAgaWYgKGxpZ2h0bmVzcyA+IDk1KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignSGlnaCBlbm91Z2ggY29udHJhc3QgY291bGQgbm90IGJlIGRldGVybWluZWQuIE1vc3QgbGlrZWx5IHlvdXIgYmFja2dyb3VuZCBjb2xvciBkb2VzIG5vdCBhZGp1c3QgZm9yIGRhcmsgbW9kZS4nKTtcbiAgICAgICAgcmV0dXJuIGhpZ2hDb250cmFzdFRleHRDb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNocm9tYShoaWdoQ29udHJhc3RUZXh0Q29sb3IpLmhleCgpO1xuICB9O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGNvbG9yIHdpdGggaW5jcmVhc2VkIGNvbnRyYXN0XG4gKiBEaXNhYmxlZCBjb250ZW50IG9ubHkgbmVlZHMgYSBjb250cmFzdCBvZiBhdCBsZWFzdCAyIGJlY2F1c2UgdGhlcmUgaXMgbm8gaW50ZXJhY3Rpb24gYXZhaWxhYmxlXG4gKiBAcGFyYW0gZm9yZWdyb3VuZCAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSByYXRpbyAtIEFtb3VudCB0byBjaGFuZ2UgaW4gYWJzb2x1dGUgdGVybXMuIDAtMTAuXG4gKiAqXG4gKiBAcGFyYW0gdGhlbWVPckJhY2tncm91bmQgLSBDb2xvciB0byB1c2UgYXMgdGhlIGNvbnRyYXN0IGJhc2lzXG4gKi9cbmV4cG9ydCB2YXIgbWFrZURpc2FibGVkQ29udHJhc3RDb2xvciA9IGZ1bmN0aW9uIG1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IoY29sb3IpIHtcbiAgdmFyIHJhdGlvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAyO1xuICByZXR1cm4gZnVuY3Rpb24gKHRoZW1lT3JCYWNrZ3JvdW5kKSB7XG4gICAgcmV0dXJuIG1ha2VIaWdoQ29udHJhc3RDb2xvcihjb2xvciwgcmF0aW8pKHRoZW1lT3JCYWNrZ3JvdW5kKTtcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBzaGFkZSwgdGludCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2NvbG9yJztcbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdXRpbHMnO1xuaW1wb3J0IHsgbWFrZUhpZ2hDb250cmFzdENvbG9yLCBtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvY29sb3IvY29udHJhc3QnO1xuLypcbiAqIExJR0hUIFRIRU1FXG4gKiBPbmx5IHNwbGl0IHVwIGluIHRoZSBsaWdodCB0aGVtZSB0byBhY2Nlc3MgdGhlIGtleXMgYnkgc2VjdGlvbiBpbiB0aGUgZG9jc1xuICovXG5cbmV4cG9ydCB2YXIgYnJhbmRfY29sb3JzID0ge1xuICBwcmltYXJ5OiAnIzA3QycsXG4gIGFjY2VudDogJyNGMDRFOTgnLFxuICBzdWNjZXNzOiAnIzAwQkZCMycsXG4gIHdhcm5pbmc6ICcjRkVDNTE0JyxcbiAgZGFuZ2VyOiAnI0JEMjcxRSdcbn07XG5leHBvcnQgdmFyIGJyYW5kX3RleHRfY29sb3JzID0ge1xuICBwcmltYXJ5VGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMucHJpbWFyeScpKSxcbiAgYWNjZW50VGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMuYWNjZW50JykpLFxuICBzdWNjZXNzVGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMuc3VjY2VzcycpKSxcbiAgd2FybmluZ1RleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLndhcm5pbmcnKSksXG4gIGRhbmdlclRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLmRhbmdlcicpKVxufTtcbmV4cG9ydCB2YXIgc2hhZGVfY29sb3JzID0ge1xuICBlbXB0eVNoYWRlOiAnI0ZGRicsXG4gIGxpZ2h0ZXN0U2hhZGU6ICcjRjFGNEZBJyxcbiAgbGlnaHRTaGFkZTogJyNEM0RBRTYnLFxuICBtZWRpdW1TaGFkZTogJyM5OEEyQjMnLFxuICBkYXJrU2hhZGU6ICcjNjk3MDdEJyxcbiAgZGFya2VzdFNoYWRlOiAnIzM0Mzc0MScsXG4gIGZ1bGxTaGFkZTogJyMwMDAnXG59O1xuZXhwb3J0IHZhciBzcGVjaWFsX2NvbG9ycyA9IHtcbiAgYm9keTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgIGxpZ2h0ZXN0U2hhZGUgPSBfcmVmMlswXTtcbiAgICByZXR1cm4gdGludChsaWdodGVzdFNoYWRlLCAwLjQpO1xuICB9LCBbJ2NvbG9ycy5saWdodGVzdFNoYWRlJ10pLFxuICBoaWdobGlnaHQ6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMykge1xuICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAxKSxcbiAgICAgIHdhcm5pbmcgPSBfcmVmNFswXTtcbiAgICByZXR1cm4gdGludCh3YXJuaW5nLCAwLjkpO1xuICB9LCBbJ2NvbG9ycy53YXJuaW5nJ10pLFxuICBkaXNhYmxlZDogJyNBQkI0QzQnLFxuICBkaXNhYmxlZFRleHQ6IGNvbXB1dGVkKG1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kaXNhYmxlZCcpKSxcbiAgc2hhZG93OiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICB2YXIgY29sb3JzID0gX3JlZjUuY29sb3JzO1xuICAgIHJldHVybiBjb2xvcnMuaW5rO1xuICB9KVxufTtcbmV4cG9ydCB2YXIgdGV4dF9jb2xvcnMgPSB7XG4gIHRleHQ6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNikge1xuICAgIHZhciBfcmVmNyA9IF9zbGljZWRUb0FycmF5KF9yZWY2LCAxKSxcbiAgICAgIGRhcmtlc3RTaGFkZSA9IF9yZWY3WzBdO1xuICAgIHJldHVybiBkYXJrZXN0U2hhZGU7XG4gIH0sIFsnY29sb3JzLmRhcmtlc3RTaGFkZSddKSxcbiAgdGl0bGU6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmOCkge1xuICAgIHZhciBfcmVmOSA9IF9zbGljZWRUb0FycmF5KF9yZWY4LCAxKSxcbiAgICAgIHRleHQgPSBfcmVmOVswXTtcbiAgICByZXR1cm4gc2hhZGUodGV4dCwgMC41KTtcbiAgfSwgWydjb2xvcnMudGV4dCddKSxcbiAgc3ViZHVlZFRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLmRhcmtTaGFkZScpKSxcbiAgbGluazogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYxMCkge1xuICAgIHZhciBfcmVmMTEgPSBfc2xpY2VkVG9BcnJheShfcmVmMTAsIDEpLFxuICAgICAgcHJpbWFyeVRleHQgPSBfcmVmMTFbMF07XG4gICAgcmV0dXJuIHByaW1hcnlUZXh0O1xuICB9LCBbJ2NvbG9ycy5wcmltYXJ5VGV4dCddKVxufTtcbmV4cG9ydCB2YXIgbGlnaHRfY29sb3JzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBicmFuZF9jb2xvcnMpLCBzaGFkZV9jb2xvcnMpLCBzcGVjaWFsX2NvbG9ycyksIGJyYW5kX3RleHRfY29sb3JzKSwgdGV4dF9jb2xvcnMpO1xuXG4vKlxuICogREFSSyBUSEVNRVxuICovXG5cbmV4cG9ydCB2YXIgZGFya19zaGFkZXMgPSB7XG4gIGVtcHR5U2hhZGU6ICcjMUQxRTI0JyxcbiAgbGlnaHRlc3RTaGFkZTogJyMyNTI2MkUnLFxuICBsaWdodFNoYWRlOiAnIzM0Mzc0MScsXG4gIG1lZGl1bVNoYWRlOiAnIzUzNTk2NicsXG4gIGRhcmtTaGFkZTogJyM5OEEyQjMnLFxuICBkYXJrZXN0U2hhZGU6ICcjRDREQUU1JyxcbiAgZnVsbFNoYWRlOiAnI0ZGRidcbn07XG5leHBvcnQgdmFyIGRhcmtfY29sb3JzX2FtcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgLy8gQnJhbmRcbiAgcHJpbWFyeTogJyMzNkEyRUYnLFxuICBhY2NlbnQ6ICcjRjY4RkJFJyxcbiAgc3VjY2VzczogJyM3RERFRDgnLFxuICB3YXJuaW5nOiAnI0YzRDM3MScsXG4gIGRhbmdlcjogJyNGODZCNjMnXG59LCBkYXJrX3NoYWRlcyksIHt9LCB7XG4gIC8vIFNwZWNpYWxcbiAgYm9keTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYxMikge1xuICAgIHZhciBfcmVmMTMgPSBfc2xpY2VkVG9BcnJheShfcmVmMTIsIDEpLFxuICAgICAgbGlnaHRlc3RTaGFkZSA9IF9yZWYxM1swXTtcbiAgICByZXR1cm4gc2hhZGUobGlnaHRlc3RTaGFkZSwgMC40NSk7XG4gIH0sIFsnY29sb3JzLmxpZ2h0ZXN0U2hhZGUnXSksXG4gIGhpZ2hsaWdodDogJyMyRTJEMjUnLFxuICBkaXNhYmxlZDogJyM1MTU3NjEnLFxuICBkaXNhYmxlZFRleHQ6IGNvbXB1dGVkKG1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kaXNhYmxlZCcpKSxcbiAgc2hhZG93OiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjE0KSB7XG4gICAgdmFyIGNvbG9ycyA9IF9yZWYxNC5jb2xvcnM7XG4gICAgcmV0dXJuIGNvbG9ycy5pbms7XG4gIH0pXG59LCBicmFuZF90ZXh0X2NvbG9ycyksIHt9LCB7XG4gIC8vIFRleHRcbiAgdGV4dDogJyNERkU1RUYnLFxuICB0aXRsZTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYxNSkge1xuICAgIHZhciBfcmVmMTYgPSBfc2xpY2VkVG9BcnJheShfcmVmMTUsIDEpLFxuICAgICAgdGV4dCA9IF9yZWYxNlswXTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfSwgWydjb2xvcnMudGV4dCddKSxcbiAgc3ViZHVlZFRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLm1lZGl1bVNoYWRlJykpLFxuICBsaW5rOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjE3KSB7XG4gICAgdmFyIF9yZWYxOCA9IF9zbGljZWRUb0FycmF5KF9yZWYxNywgMSksXG4gICAgICBwcmltYXJ5VGV4dCA9IF9yZWYxOFswXTtcbiAgICByZXR1cm4gcHJpbWFyeVRleHQ7XG4gIH0sIFsnY29sb3JzLnByaW1hcnlUZXh0J10pXG59KTtcblxuLypcbiAqIEZVTExcbiAqL1xuXG5leHBvcnQgdmFyIGNvbG9ycyA9IHtcbiAgZ2hvc3Q6ICcjRkZGJyxcbiAgaW5rOiAnIzAwMCcsXG4gIExJR0hUOiBsaWdodF9jb2xvcnMsXG4gIERBUks6IGRhcmtfY29sb3JzX2Ftc1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIGFuaW1hdGlvbl9zcGVlZCA9IHtcbiAgZXh0cmFGYXN0OiAnOTBtcycsXG4gIGZhc3Q6ICcxNTBtcycsXG4gIG5vcm1hbDogJzI1MG1zJyxcbiAgc2xvdzogJzM1MG1zJyxcbiAgZXh0cmFTbG93OiAnNTAwbXMnXG59O1xuZXhwb3J0IHZhciBhbmltYXRpb25fZWFzZSA9IHtcbiAgYm91bmNlOiAnY3ViaWMtYmV6aWVyKC4zNCwgMS42MSwgLjcsIDEpJyxcbiAgcmVzaXN0YW5jZTogJ2N1YmljLWJlemllciguNjk0LCAuMDQ4MiwgLjMzNSwgMSknXG59O1xuZXhwb3J0IHZhciBhbmltYXRpb24gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFuaW1hdGlvbl9zcGVlZCksIGFuaW1hdGlvbl9lYXNlKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciBicmVha3BvaW50ID0ge1xuICB4bDogMTIwMCxcbiAgbDogOTkyLFxuICBtOiA3NjgsXG4gIHM6IDU3NSxcbiAgeHM6IDBcbn07IiwgIntcbiAgXCJoZWlnaHRcIjogXCJibG9jay1zaXplXCIsXG4gIFwid2lkdGhcIjogXCJpbmxpbmUtc2l6ZVwiLFxuICBcIm1heC1oZWlnaHRcIjogXCJtYXgtYmxvY2stc2l6ZVwiLFxuICBcIm1heC13aWR0aFwiOiBcIm1heC1pbmxpbmUtc2l6ZVwiLFxuICBcIm1pbi1oZWlnaHRcIjogXCJtaW4tYmxvY2stc2l6ZVwiLFxuICBcIm1pbi13aWR0aFwiOiBcIm1pbi1pbmxpbmUtc2l6ZVwiLFxuICBcInRvcFwiOiBcImluc2V0LWJsb2NrLXN0YXJ0XCIsXG4gIFwicmlnaHRcIjogXCJpbnNldC1pbmxpbmUtZW5kXCIsXG4gIFwiYm90dG9tXCI6IFwiaW5zZXQtYmxvY2stZW5kXCIsXG4gIFwibGVmdFwiOiBcImluc2V0LWlubGluZS1zdGFydFwiLFxuICBcImhvcml6b250YWxcIjogXCJpbnNldC1pbmxpbmVcIixcbiAgXCJ2ZXJ0aWNhbFwiOiBcImluc2V0LWJsb2NrXCIsXG4gIFwibWFyZ2luLWxlZnRcIjogXCJtYXJnaW4taW5saW5lLXN0YXJ0XCIsXG4gIFwibWFyZ2luLXJpZ2h0XCI6IFwibWFyZ2luLWlubGluZS1lbmRcIixcbiAgXCJtYXJnaW4tdG9wXCI6IFwibWFyZ2luLWJsb2NrLXN0YXJ0XCIsXG4gIFwibWFyZ2luLWJvdHRvbVwiOiBcIm1hcmdpbi1ibG9jay1lbmRcIixcbiAgXCJtYXJnaW4taG9yaXpvbnRhbFwiOiBcIm1hcmdpbi1pbmxpbmVcIixcbiAgXCJtYXJnaW4tdmVydGljYWxcIjogXCJtYXJnaW4tYmxvY2tcIixcbiAgXCJwYWRkaW5nLWxlZnRcIjogXCJwYWRkaW5nLWlubGluZS1zdGFydFwiLFxuICBcInBhZGRpbmctcmlnaHRcIjogXCJwYWRkaW5nLWlubGluZS1lbmRcIixcbiAgXCJwYWRkaW5nLXRvcFwiOiBcInBhZGRpbmctYmxvY2stc3RhcnRcIixcbiAgXCJwYWRkaW5nLWJvdHRvbVwiOiBcInBhZGRpbmctYmxvY2stZW5kXCIsXG4gIFwicGFkZGluZy1ob3Jpem9udGFsXCI6IFwicGFkZGluZy1pbmxpbmVcIixcbiAgXCJwYWRkaW5nLXZlcnRpY2FsXCI6IFwicGFkZGluZy1ibG9ja1wiLFxuICBcIm92ZXJmbG93LXhcIjogXCJvdmVyZmxvdy1pbmxpbmVcIixcbiAgXCJvdmVyZmxvdy15XCI6IFwib3ZlcmZsb3ctYmxvY2tcIixcbiAgXCJib3JkZXItaG9yaXpvbnRhbFwiOiBcImJvcmRlci1pbmxpbmVcIixcbiAgXCJib3JkZXItaG9yaXpvbnRhbC1jb2xvclwiOiBcImJvcmRlci1pbmxpbmUtY29sb3JcIixcbiAgXCJib3JkZXItaG9yaXpvbnRhbC13aWR0aFwiOiBcImJvcmRlci1pbmxpbmUtd2lkdGhcIixcbiAgXCJib3JkZXItaG9yaXpvbnRhbC1zdHlsZVwiOiBcImJvcmRlci1pbmxpbmUtc3R5bGVcIixcbiAgXCJib3JkZXItdmVydGljYWxcIjogXCJib3JkZXItYmxvY2tcIixcbiAgXCJib3JkZXItdmVydGljYWwtY29sb3JcIjogXCJib3JkZXItYmxvY2stY29sb3JcIixcbiAgXCJib3JkZXItdmVydGljYWwtd2lkdGhcIjogXCJib3JkZXItYmxvY2std2lkdGhcIixcbiAgXCJib3JkZXItdmVydGljYWwtc3R5bGVcIjogXCJib3JkZXItYmxvY2stc3R5bGVcIixcbiAgXCJib3JkZXItYm90dG9tXCI6IFwiYm9yZGVyLWJsb2NrLWVuZFwiLFxuICBcImJvcmRlci1ib3R0b20tY29sb3JcIjogXCJib3JkZXItYmxvY2stZW5kLWNvbG9yXCIsXG4gIFwiYm9yZGVyLWJvdHRvbS1zdHlsZVwiOiBcImJvcmRlci1ibG9jay1lbmQtc3R5bGVcIixcbiAgXCJib3JkZXItYm90dG9tLXdpZHRoXCI6IFwiYm9yZGVyLWJsb2NrLWVuZC13aWR0aFwiLFxuICBcImJvcmRlci10b3BcIjogXCJib3JkZXItYmxvY2stc3RhcnRcIixcbiAgXCJib3JkZXItdG9wLWNvbG9yXCI6IFwiYm9yZGVyLWJsb2NrLXN0YXJ0LWNvbG9yXCIsXG4gIFwiYm9yZGVyLXRvcC1zdHlsZVwiOiBcImJvcmRlci1ibG9jay1zdGFydC1zdHlsZVwiLFxuICBcImJvcmRlci10b3Atd2lkdGhcIjogXCJib3JkZXItYmxvY2stc3RhcnQtd2lkdGhcIixcbiAgXCJib3JkZXItcmlnaHRcIjogXCJib3JkZXItaW5saW5lLWVuZFwiLFxuICBcImJvcmRlci1yaWdodC1jb2xvclwiOiBcImJvcmRlci1pbmxpbmUtZW5kLWNvbG9yXCIsXG4gIFwiYm9yZGVyLXJpZ2h0LXN0eWxlXCI6IFwiYm9yZGVyLWlubGluZS1lbmQtc3R5bGVcIixcbiAgXCJib3JkZXItcmlnaHQtd2lkdGhcIjogXCJib3JkZXItaW5saW5lLWVuZC13aWR0aFwiLFxuICBcImJvcmRlci1sZWZ0XCI6IFwiYm9yZGVyLWlubGluZS1zdGFydFwiLFxuICBcImJvcmRlci1sZWZ0LWNvbG9yXCI6IFwiYm9yZGVyLWlubGluZS1zdGFydC1jb2xvclwiLFxuICBcImJvcmRlci1sZWZ0LXN0eWxlXCI6IFwiYm9yZGVyLWlubGluZS1zdGFydC1zdHlsZVwiLFxuICBcImJvcmRlci1sZWZ0LXdpZHRoXCI6IFwiYm9yZGVyLWlubGluZS1zdGFydC13aWR0aFwiLFxuICBcImJvcmRlci10b3AtbGVmdC1yYWRpdXNcIjogXCJib3JkZXItc3RhcnQtc3RhcnQtcmFkaXVzXCIsXG4gIFwiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXNcIjogXCJib3JkZXItc3RhcnQtZW5kLXJhZGl1c1wiLFxuICBcImJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXNcIjogXCJib3JkZXItZW5kLXN0YXJ0LXJhZGl1c1wiLFxuICBcImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzXCI6IFwiYm9yZGVyLWVuZC1lbmQtcmFkaXVzXCIsXG4gIFwiX3Nob3J0aGFuZHNcIjogW1xuICAgIFwibWFyZ2luXCIsXG4gICAgXCJzY3JvbGwtbWFyZ2luXCIsXG4gICAgXCJwYWRkaW5nXCIsXG4gICAgXCJzY3JvbGwtcGFkZGluZ1wiLFxuICAgIFwiaW5zZXRcIixcbiAgICBcImJvcmRlci1jb2xvclwiLFxuICAgIFwiYm9yZGVyLXdpZHRoXCIsXG4gICAgXCJib3JkZXItc3R5bGVcIixcbiAgICBcImJvcmRlci1yYWRpdXNcIlxuICBdXG59XG4iLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCBMT0dJQ0FMUyBmcm9tICcuL2xvZ2ljYWxzLmpzb24nO1xuXG4vKipcbiAqIEVVSSB1dGlsaXplcyBsb2dpY2FsIENTUyBwcm9wZXJ0aWVzIHRvIGVuYWJsZSBkaXJlY3Rpb25hbCB3cml0aW5nLW1vZGVzLlxuICogVG8gZW5jb3VyYWdlIHVzZSBvZiBsb2dpY2FsIHByb3BlcnRpZXMsIHdlIHByb3ZpZGUgYSBmZXcgaGVscGVyIHV0aWxpdGllcyB0b1xuICogY29udmVydCBjZXJ0YWluIGRpcmVjdGlvbmFsIHByb3BlcnRpZXMgdG8gbG9naWNhbCBwcm9wZXJ0aWVzLlxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NTU19Mb2dpY2FsX1Byb3BlcnRpZXNcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxTaWRlID0ge1xuICBsZWZ0OiAnaW5saW5lLXN0YXJ0JyxcbiAgcmlnaHQ6ICdpbmxpbmUtZW5kJyxcbiAgdG9wOiAnYmxvY2stc3RhcnQnLFxuICBib3R0b206ICdibG9jay1lbmQnLFxuICBob3Jpem9udGFsOiAnaW5saW5lJyxcbiAgdmVydGljYWw6ICdibG9jaydcbn07XG5leHBvcnQgdmFyIExPR0lDQUxfU0lERVMgPSBrZXlzT2YobG9naWNhbFNpZGUpO1xuZXhwb3J0IHZhciBsb2dpY2FscyA9IExPR0lDQUxTO1xudmFyIF9zaG9ydGhhbmRzID0gTE9HSUNBTFMuX3Nob3J0aGFuZHMsXG4gIF9sb2dpY2FscyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhMT0dJQ0FMUywgW1wiX3Nob3J0aGFuZHNcIl0pO1xuZXhwb3J0IHZhciBMT0dJQ0FMX1BST1BFUlRJRVMgPSBrZXlzT2YoX2xvZ2ljYWxzKTtcbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYHN0cmluZ2AgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsQ1NTID0gZnVuY3Rpb24gbG9naWNhbENTUyhwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KGxvZ2ljYWxzW3Byb3BlcnR5XSwgXCI6IFwiKS5jb25jYXQodmFsdWUsIFwiO1wiKTtcbn07XG5cbi8qKlxuICogU29tZSBsb2dpY2FsIHByb3BlcnRpZXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2Vycy5cbiAqIEZvciB0aG9zZSBjYXNlcywgd2Ugc2hvdWxkIHVzZSB0aGUgb2xkIHByb3BlcnR5IGFzIGEgZmFsbGJhY2sgZm9yXG4gKiBicm93c2VycyBtaXNzaW5nIHN1cHBvcnQsIHdoaWxlIGFsbG93aW5nIHN1cHBvcnRpbmcgYnJvd3NlcnMgdG8gdXNlXG4gKiB0aGUgbG9naWNhbCBwcm9wZXJ0aWVzLlxuICpcbiAqIEV4YW1wbGVzOlxuICogaHR0cHM6Ly9jYW5pdXNlLmNvbS8/c2VhcmNoPW92ZXJmbG93LWJsb2NrXG4gKiBodHRwczovL2Nhbml1c2UuY29tL21kbi1jc3NfcHJvcGVydGllc19mbG9hdF9mbG93X3JlbGF0aXZlX3ZhbHVlc1xuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxDU1NXaXRoRmFsbGJhY2sgPSBmdW5jdGlvbiBsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrKHByb3BlcnR5LCB2YWx1ZSkge1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChwcm9wZXJ0eSwgXCI6IFwiKS5jb25jYXQodmFsdWUsIFwiO1xcbiAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKHByb3BlcnR5LCB2YWx1ZSksIFwiXFxuXCIpO1xufTtcblxuLyoqXG4gKiBDYXNpbmcgdXRpbHMgZm9yIHN3YXBwaW5nIGJldHdlZW4gY2FtZWwgY2FzZSAoc3R5bGUgb2JqcykgYW5kIGtlYmFiIGNhc2UgKENTUylcbiAqL1xudmFyIGNhbWVsQ2FzZSA9IGZ1bmN0aW9uIGNhbWVsQ2FzZShrZWJhYkNhc2VkU3RyaW5nKSB7XG4gIHJldHVybiBrZWJhYkNhc2VkU3RyaW5nLnJlcGxhY2UoLy1cXHcvZywgZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufTtcbnZhciBrZWJhYkNhc2UgPSBmdW5jdGlvbiBrZWJhYkNhc2UoY2FtZWxDYXNlZFN0cmluZykge1xuICByZXR1cm4gY2FtZWxDYXNlZFN0cmluZy5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEtJDInKS50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IEEgc3RyaW5nIHRoYXQgaXMgYSB2YWxpZCBDU1MgbG9naWNhbCBwcm9wZXJ0eVxuICogQHBhcmFtIHZhbHVlIFN0cmluZyB0byBvdXRwdXQgYXMgdGhlIHByb3BlcnR5IHZhbHVlXG4gKiBAcmV0dXJucyBgb2JqZWN0YCBSZXR1cm5zIHRoZSBsb2dpY2FsIENTUyBwcm9wZXJ0eSB2ZXJzaW9uIGZvciB0aGUgZ2l2ZW4gYHByb3BlcnR5OiB2YWx1ZWAgcGFpclxuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxTdHlsZSA9IGZ1bmN0aW9uIGxvZ2ljYWxTdHlsZShwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwgY2FtZWxDYXNlKGxvZ2ljYWxzW3Byb3BlcnR5XSksIHZhbHVlKTtcbn07XG5cbi8qKlxuICogR2l2ZW4gYSBzdHlsZSBvYmplY3Qgd2l0aCBhbnkgYW1vdW50IG9mIHVua25vd24gQ1NTIHByb3BlcnRpZXMsXG4gKiBmaW5kIG9uZXMgdGhhdCBjYW4gYmUgY29udmVydGVkIHRvIGxvZ2ljYWwgcHJvcGVydGllcyBhbmQgY29udmVydCB0aGVtXG4gKlxuICogQHBhcmFtIHN0eWxlT2JqZWN0IC0gQSBSZWFjdCBvYmplY3Qgb2YgY2FtZWxDYXNlZCBzdHlsZXNcbiAqIEByZXR1cm5zIGBvYmplY3RgXG4gKi9cbmV4cG9ydCB2YXIgbG9naWNhbFN0eWxlcyA9IGZ1bmN0aW9uIGxvZ2ljYWxTdHlsZXMoc3R5bGVPYmplY3QpIHtcbiAgdmFyIGxvZ2ljYWxTdHlsZU9iamVjdCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhzdHlsZU9iamVjdCkuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICB2YXIgX3JlZjMgPSBfc2xpY2VkVG9BcnJheShfcmVmMiwgMiksXG4gICAgICBrZXkgPSBfcmVmM1swXSxcbiAgICAgIHZhbHVlID0gX3JlZjNbMV07XG4gICAgdmFyIGNzc1Byb3BlcnR5ID0ga2ViYWJDYXNlKGtleSk7XG4gICAgaWYgKGxvZ2ljYWxzLmhhc093blByb3BlcnR5KGNzc1Byb3BlcnR5KSkge1xuICAgICAgdmFyIGxvZ2ljYWxLZXkgPSBjYW1lbENhc2UobG9naWNhbHNbY3NzUHJvcGVydHldKTtcbiAgICAgIGxvZ2ljYWxTdHlsZU9iamVjdFtsb2dpY2FsS2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dpY2FsU3R5bGVPYmplY3Rba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsb2dpY2FsU3R5bGVPYmplY3Q7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gd2lkdGggQSBzdHJpbmcgdmFsdWUgZm9yIHRoZSBMVFIgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQgQSBzdHJpbmcgdmFsdWUgZm9yIHRoZSBMVFIgaGVpZ2h0XG4gKiBAcmV0dXJucyBgc3RyaW5nYCBSZXR1cm5zIHRoZSBsb2dpY2FsIENTUyBwcm9wZXJ0aWVzIGZvciBoZWlnaHQgYW5kIHdpZHRoXG4gKi9cbmV4cG9ydCB2YXIgbG9naWNhbFNpemVDU1MgPSBmdW5jdGlvbiBsb2dpY2FsU2l6ZUNTUyh3aWR0aCkge1xuICB2YXIgaGVpZ2h0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB3aWR0aDtcbiAgcmV0dXJuIFwiXFxuICAgIFwiLmNvbmNhdChsb2dpY2Fscy53aWR0aCwgXCI6IFwiKS5jb25jYXQod2lkdGgsIFwiO1xcbiAgICBcIikuY29uY2F0KGxvZ2ljYWxzLmhlaWdodCwgXCI6IFwiKS5jb25jYXQoaGVpZ2h0LCBcIjtcXG4gIFwiKTtcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB3aWR0aCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiB3aWR0aFxuICogQHBhcmFtIGhlaWdodCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiBoZWlnaHRcbiAqIEByZXR1cm5zIGBvYmplY3RgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnRpZXMgZm9yIGhlaWdodCBhbmQgd2lkdGhcbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsU2l6ZVN0eWxlID0gZnVuY3Rpb24gbG9naWNhbFNpemVTdHlsZSh3aWR0aCwgaGVpZ2h0KSB7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGxvZ2ljYWxTdHlsZSgnd2lkdGgnLCB3aWR0aCkpLCBsb2dpY2FsU3R5bGUoJ2hlaWdodCcsIGhlaWdodCkpO1xufTtcblxuLy8gVGV4dCBhbGlnbm1lbnQgaXMgc2VwYXJhdGUgYmVjYXVzZSBpdHMgdGhlIHZhbHVlIHRoYXQgY2hhbmdlcyBub3QgdGhlIHByb3BlcnR5XG5leHBvcnQgdmFyIGxvZ2ljYWxUZXh0ID0ge1xuICAndGV4dC1hbGlnbic6IHtcbiAgICBsZWZ0OiAnc3RhcnQnLFxuICAgIGNlbnRlcjogJ2NlbnRlcicsXG4gICAgcmlnaHQ6ICdlbmQnXG4gIH1cbn07XG5leHBvcnQgdmFyIExPR0lDQUxfVEVYVF9BTElHTk1FTlQgPSBrZXlzT2YobG9naWNhbFRleHRbJ3RleHQtYWxpZ24nXSk7XG4vKipcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIENTUyBsb2dpY2FsIHByb3BlcnR5XG4gKiBAcGFyYW0gdmFsdWUgU3RyaW5nIHRvIG91dHB1dCBhcyB0aGUgcHJvcGVydHkgdmFsdWVcbiAqIEByZXR1cm5zIGBzdHJpbmdgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnR5IHZlcnNpb24gZm9yIHRoZSBnaXZlbiBgcHJvcGVydHk6IHZhbHVlYCBwYWlyXG4gKi9cbmV4cG9ydCB2YXIgbG9naWNhbFRleHRBbGlnbkNTUyA9IGZ1bmN0aW9uIGxvZ2ljYWxUZXh0QWxpZ25DU1ModmFsdWUpIHtcbiAgcmV0dXJuIFwidGV4dC1hbGlnbjogXCIuY29uY2F0KGxvZ2ljYWxUZXh0Wyd0ZXh0LWFsaWduJ11bdmFsdWVdLCBcIjtcIik7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIENTUyBsb2dpY2FsIHByb3BlcnR5XG4gKiBAcGFyYW0gdmFsdWUgU3RyaW5nIHRvIG91dHB1dCBhcyB0aGUgcHJvcGVydHkgdmFsdWVcbiAqIEByZXR1cm5zIGBvYmplY3RgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnR5IHZlcnNpb24gZm9yIHRoZSBnaXZlbiBgcHJvcGVydHk6IHZhbHVlYCBwYWlyXG4gKi9cbmV4cG9ydCB2YXIgbG9naWNhbFRleHRBbGlnblN0eWxlID0gZnVuY3Rpb24gbG9naWNhbFRleHRBbGlnblN0eWxlKHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgdGV4dEFsaWduOiBsb2dpY2FsVGV4dFsndGV4dC1hbGlnbiddW3ZhbHVlXVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgTE9HSUNBTFMgZnJvbSAnLi9sb2dpY2Fscy5qc29uJztcbnZhciBMT0dJQ0FMX1NIT1JUSEFORFMgPSBMT0dJQ0FMUy5fc2hvcnRoYW5kcztcbmV4cG9ydCB7IExPR0lDQUxfU0hPUlRIQU5EUyB9O1xuLyoqXG4gKiBVbmZvcnR1bmF0ZWx5LCBzaG9ydGhhbmQgcHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIGJveGVzXG4gKiAoQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvU2hvcnRoYW5kX3Byb3BlcnRpZXMjZWRnZXNfb2ZfYV9ib3gpXG4gKiBkbyBub3QgY3VycmVudGx5IGF1dG9tYXRpY2FsbHkgcmVzcG9uZCB0byBsb2dpY2FsIGNoYW5nZXMgaW4gZGlzcGxheSBkaXJlY3Rpb25cbiAqIChAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vlcy8xMjgyKVxuICpcbiAqIFRoaXMgdXRpbGl0eSBpcyBlc3NlbnRpYWxseSBhIHN0b3AtZ2FwIGZvciB0aG9zZSBzaG9ydGhhbmQgcHJvcGVydGllcyxcbiAqIGNvbnZlcnRpbmcgdGhlbSB0byBjb3JyZXNwb25kaW5nIGxvbmdlciBsb2dpY2FsIGAtaW5saW5lYCBhbmQgYC1ibG9ja2AgcHJvcGVydGllc1xuICpcbiAqIFx1RDgzRFx1REREMSBOT1RFOiBUaGlzIGZpbGUgaXMgaW4gYSBzZXBhcmF0ZSB1dGlsIGZpbGUgZnJvbSBsb2dpY2Fscy50cyBkdWUgdG8gaXRzIHJlbGF0aXZlbHlcbiAqIGNvbnZvbHV0ZWQgbG9naWMsICYgdG8gbWFrZSBkZWxldGluZyBpdCBlYXNpZXIgd2hlbiBhbiBvZmZpY2lhbCBDU1Mgc3BlYyBpcyBpbXBsZW1lbnRlZC5cbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsU2hvcnRoYW5kQ1NTID0gZnVuY3Rpb24gbG9naWNhbFNob3J0aGFuZENTUyhwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgaWYgKCFMT0dJQ0FMX1NIT1JUSEFORFMuaW5jbHVkZXMocHJvcGVydHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiXCIuY29uY2F0KHByb3BlcnR5LCBcIiBpcyBub3QgYSBzaG9ydGhhbmQgcHJvcGVydHkgdGhhdCBuZWVkcyBsb2dpY2FsIENTU1wiKSk7XG4gIH1cbiAgaWYgKHByb3BlcnR5ID09PSAnYm9yZGVyLXJhZGl1cycpIHtcbiAgICByZXR1cm4gbG9naWNhbEJvcmRlclJhZGl1c0NTUyhTdHJpbmcodmFsdWUpKTtcbiAgfVxuXG4gIC8vIFNwbGl0IGFsbCBwb3RlbnRpYWwgdmFsdWVzIGJ5IHNwYWNlc1xuICB2YXIgdmFsdWVzID0gU3RyaW5nKHZhbHVlKS5zcGxpdCgvXFxzKy8pO1xuICB2YXIgdmVydGljYWxCbG9ja1ZhbHVlO1xuICB2YXIgaG9yaXpvbnRhbElubGluZVZhbHVlO1xuICBzd2l0Y2ggKHZhbHVlcy5sZW5ndGgpIHtcbiAgICBjYXNlIDE6XG4gICAgICAvLyBJZiBpdCdzIHRoZSBzYW1lIHZhbHVlIGFsbCBhcm91bmQsIG5vIG5lZWQgdG8gdXNlIGxvZ2ljYWwgcHJvcGVydGllc1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHByb3BlcnR5LCBcIjogXCIpLmNvbmNhdCh2YWx1ZSwgXCI7XCIpO1xuICAgIGNhc2UgMjpcbiAgICAgIHZlcnRpY2FsQmxvY2tWYWx1ZSA9IHZhbHVlc1swXTtcbiAgICAgIGhvcml6b250YWxJbmxpbmVWYWx1ZSA9IHZhbHVlc1sxXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHZlcnRpY2FsQmxvY2tWYWx1ZSA9IFwiXCIuY29uY2F0KHZhbHVlc1swXSwgXCIgXCIpLmNvbmNhdCh2YWx1ZXNbMl0pO1xuICAgICAgaG9yaXpvbnRhbElubGluZVZhbHVlID0gdmFsdWVzWzFdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgIGRlZmF1bHQ6XG4gICAgICB2ZXJ0aWNhbEJsb2NrVmFsdWUgPSBcIlwiLmNvbmNhdCh2YWx1ZXNbMF0sIFwiIFwiKS5jb25jYXQodmFsdWVzWzJdKTtcbiAgICAgIGhvcml6b250YWxJbmxpbmVWYWx1ZSA9IFwiXCIuY29uY2F0KHZhbHVlc1szXSwgXCIgXCIpLmNvbmNhdCh2YWx1ZXNbMV0pOyAvLyBOb3RlOiBsZWZ0ICg0dGggdmFsdWUpIGNvbWVzIGJlZm9yZSByaWdodCAoMm5kIHZhbHVlKVxuICAgICAgYnJlYWs7XG4gIH1cbiAgaWYgKHByb3BlcnR5LmluY2x1ZGVzKCdib3JkZXItJykpIHtcbiAgICAvLyBCb3JkZXIgcHJvcGVydGllcyBoYXZlIGEgZGlmZmVyZW50IG5hbWluZyBzeW50YXggdGhhbiBtYXJnaW4vcGFkZGluZy9ldGNcbiAgICB2YXIgYm9yZGVyUHJvcGVydHkgPSBwcm9wZXJ0eS5zcGxpdCgnLScpWzFdO1xuICAgIHJldHVybiBcIlxcbiAgICBib3JkZXItYmxvY2stXCIuY29uY2F0KGJvcmRlclByb3BlcnR5LCBcIjogXCIpLmNvbmNhdCh2ZXJ0aWNhbEJsb2NrVmFsdWUsIFwiO1xcbiAgICBib3JkZXItaW5saW5lLVwiKS5jb25jYXQoYm9yZGVyUHJvcGVydHksIFwiOiBcIikuY29uY2F0KGhvcml6b250YWxJbmxpbmVWYWx1ZSwgXCI7XFxuICAgIFwiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJcXG4gICAgXCIuY29uY2F0KHByb3BlcnR5LCBcIi1ibG9jazogXCIpLmNvbmNhdCh2ZXJ0aWNhbEJsb2NrVmFsdWUsIFwiO1xcbiAgICBcIikuY29uY2F0KHByb3BlcnR5LCBcIi1pbmxpbmU6IFwiKS5jb25jYXQoaG9yaXpvbnRhbElubGluZVZhbHVlLCBcIjtcXG4gICAgXCIpO1xuICB9XG59O1xuXG4vKipcbiAqIExvZ2ljYWwgYm9yZGVyIHJhZGl1cyBpcyB1bmZvcnR1bmF0ZWx5IGEgdmVyeSBzcGVjaWFsIGNhc2UgYXMgaXQgaGFuZGxlcyBjb3JuZXJzXG4gKiBhbmQgbm90IHNpZGVzIChAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9TaG9ydGhhbmRfcHJvcGVydGllcyNjb3JuZXJzX29mX2FfYm94KVxuICogYW5kIGRvZXMgbm90IGhhdmUgYC1pbmxpbmVgIG9yIGAtYmxvY2tgIHNob3J0aGFuZHMuXG4gKlxuICogSXQgYWxzbyBuZWVkcyB0byBhY2NvdW50IGZvciBgL2Agc3ludGF4IChob3Jpem9udGFsIHZzIHZlcnRpY2FsIHJhZGlpKVxuICogQHNlZSBodHRwczovL3d3dy5zaXRlcG9pbnQuY29tL3NldHRpbmctY3NzMy1ib3JkZXItcmFkaXVzLXdpdGgtc2xhc2gtc3ludGF4L1xuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxCb3JkZXJSYWRpdXNDU1MgPSBmdW5jdGlvbiBsb2dpY2FsQm9yZGVyUmFkaXVzQ1NTKHZhbHVlKSB7XG4gIHZhciBpZ25vcmVaZXJvZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICB2YXIgYm9yZGVyUmFkaXVzTWFwID0ge1xuICAgICdib3JkZXItc3RhcnQtc3RhcnQtcmFkaXVzJzogJycsXG4gICAgJ2JvcmRlci1zdGFydC1lbmQtcmFkaXVzJzogJycsXG4gICAgJ2JvcmRlci1lbmQtZW5kLXJhZGl1cyc6ICcnLFxuICAgICdib3JkZXItZW5kLXN0YXJ0LXJhZGl1cyc6ICcnXG4gIH07XG4gIHZhciB2YWx1ZXMgPSBbXTtcbiAgaWYgKHZhbHVlLmluY2x1ZGVzKCcvJykpIHtcbiAgICB2YWx1ZXMgPSBbJycsICcnLCAnJywgJyddO1xuXG4gICAgLy8gU3BsaXQgaW50byBob3Jpem9udGFsICYgdmVydGljYWwgcmFkaWkgc3RyaW5nc1xuICAgIHZhbHVlLnNwbGl0KCcvJykuZm9yRWFjaChmdW5jdGlvbiAocmFkaWlBeGVzKSB7XG4gICAgICB2YXIgcmFkaWkgPSByYWRpaUF4ZXMudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG4gICAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAoXywgaSkge1xuICAgICAgICAvLyBBZGQgYSBzcGFjZSBiZXR3ZWVuIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCByYWRpdXNcbiAgICAgICAgdmFyIGNvbWJpbmVkVmFsdWUgPSB2YWx1ZXNbaV0gPyBcIlwiLmNvbmNhdCh2YWx1ZXNbaV0sIFwiIFwiKSA6IHZhbHVlc1tpXTtcbiAgICAgICAgc3dpdGNoIChyYWRpaS5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAvLyBFdmVyeSB2YWx1ZSBpcyByZXBlYXRlZFxuICAgICAgICAgICAgY29tYmluZWRWYWx1ZSArPSByYWRpaVswXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIC8vIElmIHRoZSBjb3JuZXIgaXMgYW4gZXZlbiBpbmRleCwgZ2l2ZSBpdCB0aGUgZmlyc3QgdmFsdWUsIGlmIG9kZCwgc2Vjb25kIHZhbHVlXG4gICAgICAgICAgICBjb21iaW5lZFZhbHVlICs9IGkgJSAyID8gcmFkaWlbMV0gOiByYWRpaVswXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIC8vIFRoZSBsYXN0IGNvcm5lciBzaG91bGQgcmVwZWF0IHRoZSBzZWNvbmQgdmFsdWVcbiAgICAgICAgICAgIGNvbWJpbmVkVmFsdWUgKz0gaSA9PT0gMyA/IHJhZGlpWzFdIDogcmFkaWlbaV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIEV2ZXJ5IHZhbHVlIGlzIHNwZWNpZmllZFxuICAgICAgICAgICAgY29tYmluZWRWYWx1ZSArPSByYWRpaVtpXTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXNbaV0gPSBjb21iaW5lZFZhbHVlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWVzID0gdmFsdWUuc3BsaXQoL1xccysvKTtcbiAgfVxuICBzd2l0Y2ggKHZhbHVlcy5sZW5ndGgpIHtcbiAgICBjYXNlIDE6XG4gICAgICAvLyBJZiBpdCdzIHRoZSBzYW1lIHZhbHVlIGFsbCBhcm91bmQsIG5vIG5lZWQgdG8gdXNlIGxvZ2ljYWwgcHJvcGVydGllc1xuICAgICAgcmV0dXJuIFwiYm9yZGVyLXJhZGl1czogXCIuY29uY2F0KHZhbHVlLCBcIjtcIik7XG4gICAgY2FzZSAyOlxuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItc3RhcnQtc3RhcnQtcmFkaXVzJ10gPSB2YWx1ZXNbMF07XG4gICAgICBib3JkZXJSYWRpdXNNYXBbJ2JvcmRlci1zdGFydC1lbmQtcmFkaXVzJ10gPSB2YWx1ZXNbMV07XG4gICAgICBib3JkZXJSYWRpdXNNYXBbJ2JvcmRlci1lbmQtZW5kLXJhZGl1cyddID0gdmFsdWVzWzBdO1xuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItZW5kLXN0YXJ0LXJhZGl1cyddID0gdmFsdWVzWzFdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItc3RhcnQtc3RhcnQtcmFkaXVzJ10gPSB2YWx1ZXNbMF07XG4gICAgICBib3JkZXJSYWRpdXNNYXBbJ2JvcmRlci1zdGFydC1lbmQtcmFkaXVzJ10gPSB2YWx1ZXNbMV07XG4gICAgICBib3JkZXJSYWRpdXNNYXBbJ2JvcmRlci1lbmQtZW5kLXJhZGl1cyddID0gdmFsdWVzWzJdO1xuICAgICAgYm9yZGVyUmFkaXVzTWFwWydib3JkZXItZW5kLXN0YXJ0LXJhZGl1cyddID0gdmFsdWVzWzFdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgIGRlZmF1bHQ6XG4gICAgICBib3JkZXJSYWRpdXNNYXBbJ2JvcmRlci1zdGFydC1zdGFydC1yYWRpdXMnXSA9IHZhbHVlc1swXTtcbiAgICAgIGJvcmRlclJhZGl1c01hcFsnYm9yZGVyLXN0YXJ0LWVuZC1yYWRpdXMnXSA9IHZhbHVlc1sxXTtcbiAgICAgIGJvcmRlclJhZGl1c01hcFsnYm9yZGVyLWVuZC1lbmQtcmFkaXVzJ10gPSB2YWx1ZXNbMl07XG4gICAgICBib3JkZXJSYWRpdXNNYXBbJ2JvcmRlci1lbmQtc3RhcnQtcmFkaXVzJ10gPSB2YWx1ZXNbM107XG4gICAgICBicmVhaztcbiAgfVxuICB2YXIgYm9yZGVyUmFkaXVzQ1NTID0gW107XG4gIE9iamVjdC5lbnRyaWVzKGJvcmRlclJhZGl1c01hcCkuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgICAgcHJvcGVydHkgPSBfcmVmMlswXSxcbiAgICAgIHZhbHVlID0gX3JlZjJbMV07XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAoaWdub3JlWmVyb2VzICYmIHZhbHVlICE9PSAnMCcgJiYgdmFsdWUgIT09ICcwcHgnIHx8ICFpZ25vcmVaZXJvZXMpIHtcbiAgICAgICAgYm9yZGVyUmFkaXVzQ1NTLnB1c2goXCJcIi5jb25jYXQocHJvcGVydHksIFwiOiBcIikuY29uY2F0KHZhbHVlLCBcIjtcIikpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBib3JkZXJSYWRpdXNDU1Muam9pbignXFxuJyk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfd3JhcFJlZ0V4cCgpIHsgX3dyYXBSZWdFeHAgPSBmdW5jdGlvbiBfd3JhcFJlZ0V4cChlLCByKSB7IHJldHVybiBuZXcgQmFiZWxSZWdFeHAoZSwgdm9pZCAwLCByKTsgfTsgdmFyIGUgPSBSZWdFeHAucHJvdG90eXBlLCByID0gbmV3IFdlYWtNYXAoKTsgZnVuY3Rpb24gQmFiZWxSZWdFeHAoZSwgdCwgcCkgeyB2YXIgbyA9IFJlZ0V4cChlLCB0KTsgcmV0dXJuIHIuc2V0KG8sIHAgfHwgci5nZXQoZSkpLCBfc2V0UHJvdG90eXBlT2YobywgQmFiZWxSZWdFeHAucHJvdG90eXBlKTsgfSBmdW5jdGlvbiBidWlsZEdyb3VwcyhlLCB0KSB7IHZhciBwID0gci5nZXQodCk7IHJldHVybiBPYmplY3Qua2V5cyhwKS5yZWR1Y2UoZnVuY3Rpb24gKHIsIHQpIHsgdmFyIG8gPSBwW3RdOyBpZiAoXCJudW1iZXJcIiA9PSB0eXBlb2Ygbykgclt0XSA9IGVbb107ZWxzZSB7IGZvciAodmFyIGkgPSAwOyB2b2lkIDAgPT09IGVbb1tpXV0gJiYgaSArIDEgPCBvLmxlbmd0aDspIGkrKzsgclt0XSA9IGVbb1tpXV07IH0gcmV0dXJuIHI7IH0sIE9iamVjdC5jcmVhdGUobnVsbCkpOyB9IHJldHVybiBfaW5oZXJpdHMoQmFiZWxSZWdFeHAsIFJlZ0V4cCksIEJhYmVsUmVnRXhwLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24gKHIpIHsgdmFyIHQgPSBlLmV4ZWMuY2FsbCh0aGlzLCByKTsgaWYgKHQpIHsgdC5ncm91cHMgPSBidWlsZEdyb3Vwcyh0LCB0aGlzKTsgdmFyIHAgPSB0LmluZGljZXM7IHAgJiYgKHAuZ3JvdXBzID0gYnVpbGRHcm91cHMocCwgdGhpcykpOyB9IHJldHVybiB0OyB9LCBCYWJlbFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLnJlcGxhY2VdID0gZnVuY3Rpb24gKHQsIHApIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHApIHsgdmFyIG8gPSByLmdldCh0aGlzKTsgcmV0dXJuIGVbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcywgdCwgcC5yZXBsYWNlKC9cXCQ8KFtePl0rKT4vZywgZnVuY3Rpb24gKGUsIHIpIHsgdmFyIHQgPSBvW3JdOyByZXR1cm4gXCIkXCIgKyAoQXJyYXkuaXNBcnJheSh0KSA/IHQuam9pbihcIiRcIikgOiB0KTsgfSkpOyB9IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHApIHsgdmFyIGkgPSB0aGlzOyByZXR1cm4gZVtTeW1ib2wucmVwbGFjZV0uY2FsbCh0aGlzLCB0LCBmdW5jdGlvbiAoKSB7IHZhciBlID0gYXJndW1lbnRzOyByZXR1cm4gXCJvYmplY3RcIiAhPSBfdHlwZW9mKGVbZS5sZW5ndGggLSAxXSkgJiYgKGUgPSBbXS5zbGljZS5jYWxsKGUpKS5wdXNoKGJ1aWxkR3JvdXBzKGUsIGkpKSwgcC5hcHBseSh0aGlzLCBlKTsgfSk7IH0gcmV0dXJuIGVbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcywgdCwgcCk7IH0sIF93cmFwUmVnRXhwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIFV0aWxpdHkgZm9yIHBlcmZvcm1pbmcgbWF0aCBjYWxsYmFja3Mgb24gYSBzdHJpbmcgd2l0aCBDU1MgdW5pdHNcbiAqIGFuZCByZXR1cm5pbmcgYSBzdHJpbmcgd2l0aCBpdHMgdW5pdCBwcmVzZXJ2ZWQuXG4gKlxuICogRXhhbXBsZSB1c2FnZTpcbiAqIG1hdGhXaXRoVW5pdHMoJzRweCcsICh4KSA9PiB4IC8gMikgPSAnMnB4JztcbiAqIG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuc2l6ZS54cywgKHgpID0+IHggKyAyKSA9ICc2cHgnO1xuICogbWF0aFdpdGhVbml0cyhbZXVpVGhlbWUuc2l6ZS5sLCBldWlUaGVtZS5zaXplLnNdLCAoeCwgeSkgPT4geCAtIHkpID0gJzE2cHgnO1xuICovXG4vLyBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIHRoZSBDU1NQcm9wZXJ0aWVzW10gdHlwZSB1c2VkIGZvciBzZXZlcmFsIGV1aVRoZW1lIHZhcnNcblxuZXhwb3J0IHZhciBtYXRoV2l0aFVuaXRzID0gZnVuY3Rpb24gbWF0aFdpdGhVbml0cyh2YWx1ZXMsIGNhbGxiYWNrKSB7XG4gIHZhciB1bml0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAnJztcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHZhbHVlcyA9IFt2YWx1ZXNdO1xuICB2YXIgZm91bmROdW1lcmljVmFsdWVzID0gW107XG4gIHZhciBmb3VuZFVuaXQgPSAnJztcbiAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBfbWF0Y2hlcyRncm91cHMsIF9tYXRjaGVzJGdyb3VwczI7XG4gICAgICB2YXIgcmVnZXggPSAvKiNfX1BVUkVfXyovX3dyYXBSZWdFeHAoLyhcXHgyRD9bXFxkLl0rKSglfFthLXpBLVpdKikvLCB7XG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICB1bml0OiAyXG4gICAgICB9KTtcbiAgICAgIHZhciBtYXRjaGVzID0gcmVnZXguZXhlYyh2YWx1ZSk7XG4gICAgICB2YXIgbnVtZXJpY1ZhbHVlID0gTnVtYmVyKG1hdGNoZXMgPT09IG51bGwgfHwgbWF0Y2hlcyA9PT0gdm9pZCAwIHx8IChfbWF0Y2hlcyRncm91cHMgPSBtYXRjaGVzLmdyb3VwcykgPT09IG51bGwgfHwgX21hdGNoZXMkZ3JvdXBzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbWF0Y2hlcyRncm91cHMudmFsdWUpO1xuICAgICAgaWYgKCFpc05hTihudW1lcmljVmFsdWUpKSB7XG4gICAgICAgIGZvdW5kTnVtZXJpY1ZhbHVlcy5wdXNoKG51bWVyaWNWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZhbGlkIG51bWVyaWMgdmFsdWUgZm91bmQnKTtcbiAgICAgIH1cbiAgICAgIGlmICghdW5pdCAmJiBtYXRjaGVzICE9PSBudWxsICYmIG1hdGNoZXMgIT09IHZvaWQgMCAmJiAoX21hdGNoZXMkZ3JvdXBzMiA9IG1hdGNoZXMuZ3JvdXBzKSAhPT0gbnVsbCAmJiBfbWF0Y2hlcyRncm91cHMyICE9PSB2b2lkIDAgJiYgX21hdGNoZXMkZ3JvdXBzMi51bml0KSB7XG4gICAgICAgIGlmICghZm91bmRVbml0KSB7XG4gICAgICAgICAgZm91bmRVbml0ID0gbWF0Y2hlcy5ncm91cHMudW5pdDtcbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZFVuaXQgIT09IG1hdGNoZXMuZ3JvdXBzLnVuaXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGxlIHVuaXRzIGZvdW5kLiBVc2UgYGNhbGMoKWAgdG8gbWl4IGFuZCBtYXRoIG11bHRpcGxlIHVuaXQgdHlwZXMgKGUuZy4gYCVgICYgYHB4YCkgaW5zdGVhZCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBmb3VuZE51bWVyaWNWYWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZSB0eXBlIC0gcGFzcyBhIHN0cmluZyBvciBudW1iZXInKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gXCJcIi5jb25jYXQoY2FsbGJhY2suYXBwbHkodm9pZCAwLCBmb3VuZE51bWVyaWNWYWx1ZXMpKS5jb25jYXQodW5pdCB8fCBmb3VuZFVuaXQpO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBgcHhgIHZhbHVlIGJhc2VkIG9uIGEgc2NhbGUgbXVsdGlwbGllclxuICogQHBhcmFtIHNjYWxlIC0gVGhlIGZvbnQgc2NhbGUgbXVsdGlwbGllclxuICogKlxuICogQHBhcmFtIHRoZW1lT3JCYXNlIC0gVGhlbWUgYmFzZSB2YWx1ZVxuICogKlxuICogQHJldHVybnMgc3RyaW5nIC0gUmVtIHVuaXQgYWxpZ25lZCB0byBiYXNlbGluZVxuICovXG5cbmV4cG9ydCB2YXIgc2l6ZVRvUGl4ZWwgPSBmdW5jdGlvbiBzaXplVG9QaXhlbCgpIHtcbiAgdmFyIHNjYWxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAxO1xuICByZXR1cm4gZnVuY3Rpb24gKHRoZW1lT3JCYXNlKSB7XG4gICAgdmFyIGJhc2UgPSBfdHlwZW9mKHRoZW1lT3JCYXNlKSA9PT0gJ29iamVjdCcgPyB0aGVtZU9yQmFzZS5iYXNlIDogdGhlbWVPckJhc2U7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KGJhc2UgKiBzY2FsZSwgXCJweFwiKTtcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuL2xvZ2ljYWxzJztcbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZm9udC1zaXplIHZhbHVlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBzY2FsZSBrZXlcbiAqIEBwYXJhbSBzY2FsZSAtIFRoZSBmb250IHNjYWxlIGtleVxuICogQHBhcmFtIHRoZW1lIC0gUmVxdWlyZXMgdGhlIGBiYXNlYCBhbmQgYGZvbnRgIGtleXNcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycyAtIHNlZSBfRm9udFNjYWxlT3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHN0cmluZyAtIENhbGN1bGF0ZWQgZm9udC1zaXplIHZhbHVlXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV1aUZvbnRTaXplRnJvbVNjYWxlKHNjYWxlLCBfcmVmKSB7XG4gIHZhciBiYXNlID0gX3JlZi5iYXNlLFxuICAgIGZvbnQgPSBfcmVmLmZvbnQ7XG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgX3JlZjIkdW5pdCA9IF9yZWYyLnVuaXQsXG4gICAgdW5pdCA9IF9yZWYyJHVuaXQgPT09IHZvaWQgMCA/IGZvbnQuZGVmYXVsdFVuaXRzIDogX3JlZjIkdW5pdCxcbiAgICBjdXN0b21TY2FsZSA9IF9yZWYyLmN1c3RvbVNjYWxlO1xuICBpZiAodW5pdCA9PT0gJ2VtJykge1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChmb250LnNjYWxlW3NjYWxlXSwgXCJlbVwiKTtcbiAgfVxuICB2YXIgbnVtZXJhdG9yID0gYmFzZSAqIGZvbnQuc2NhbGVbc2NhbGVdO1xuICBpZiAoY3VzdG9tU2NhbGUpIG51bWVyYXRvciAqPSBmb250LnNjYWxlW2N1c3RvbVNjYWxlXTtcbiAgdmFyIGRlbm9taW5hdG9yID0gYmFzZSAqIGZvbnQuc2NhbGVbZm9udC5ib2R5LnNjYWxlXTtcbiAgcmV0dXJuIHVuaXQgPT09ICdweCcgPyBcIlwiLmNvbmNhdChudW1lcmF0b3IsIFwicHhcIikgOiBcIlwiLmNvbmNhdCgobnVtZXJhdG9yIC8gZGVub21pbmF0b3IpLnRvRml4ZWQoNCksIFwicmVtXCIpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxpbmUtaGVpZ2h0IHRvIHRoZSBjbG9zZXN0IG11bHRpcGxlIG9mIHRoZSBiYXNlbGluZVxuICogRVg6IEEgcHJvcGVyIGxpbmUtaGVpZ2h0IGZvciB0ZXh0IGlzIDEuNSB0aW1lcyB0aGUgZm9udC1zaXplLlxuICogICAgIElmIG91ciBiYXNlIGZvbnQgc2l6ZSAoZXVpRm9udFNpemUpIGlzIDE2LCBhbmQgb3VyIGJhc2VsaW5lIGlzIDQuIFRvIGVuc3VyZSB0aGVcbiAqICAgICB0ZXh0IHN0YXlzIG9uIHRoZSBiYXNlbGluZSwgd2UgcGFzcyBhIG11bHRpcGxpZXIgdG8gY2FsY3VsYXRlIGEgbGluZS1oZWlnaHQuXG4gKiBAcGFyYW0gc2NhbGUgLSBUaGUgZm9udCBzY2FsZSBrZXlcbiAqIEBwYXJhbSB0aGVtZSAtIFJlcXVpcmVzIHRoZSBgYmFzZWAgYW5kIGBmb250YCBrZXlzXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgLSBzZWUgX0ZvbnRTY2FsZU9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBzdHJpbmcgLSBDYWxjdWxhdGVkIGxpbmUtaGVpZ2h0IHZhbHVlIGFsaWduZWQgdG8gYmFzZWxpbmVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXVpTGluZUhlaWdodEZyb21CYXNlbGluZShzY2FsZSwgX3JlZjMpIHtcbiAgdmFyIGJhc2UgPSBfcmVmMy5iYXNlLFxuICAgIGZvbnQgPSBfcmVmMy5mb250O1xuICB2YXIgX3JlZjQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgIF9yZWY0JHVuaXQgPSBfcmVmNC51bml0LFxuICAgIHVuaXQgPSBfcmVmNCR1bml0ID09PSB2b2lkIDAgPyBmb250LmRlZmF1bHRVbml0cyA6IF9yZWY0JHVuaXQsXG4gICAgY3VzdG9tU2NhbGUgPSBfcmVmNC5jdXN0b21TY2FsZTtcbiAgdmFyIGJhc2VsaW5lID0gZm9udC5iYXNlbGluZSxcbiAgICBsaW5lSGVpZ2h0TXVsdGlwbGllciA9IGZvbnQubGluZUhlaWdodE11bHRpcGxpZXI7XG4gIHZhciBudW1lcmF0b3IgPSBiYXNlICogZm9udC5zY2FsZVtzY2FsZV07XG4gIGlmIChjdXN0b21TY2FsZSkgbnVtZXJhdG9yICo9IGZvbnQuc2NhbGVbY3VzdG9tU2NhbGVdO1xuICB2YXIgZGVub21pbmF0b3IgPSBiYXNlICogZm9udC5zY2FsZVtmb250LmJvZHkuc2NhbGVdO1xuICB2YXIgX2xpbmVIZWlnaHRNdWx0aXBsaWVyID0gbnVtZXJhdG9yIDw9IGJhc2UgPyBsaW5lSGVpZ2h0TXVsdGlwbGllciA6IGxpbmVIZWlnaHRNdWx0aXBsaWVyICogMC44MzM7XG4gIGlmICh1bml0ID09PSAnZW0nKSB7XG4gICAgLy8gRXZlbiB0aG91Z2ggdGhlIGxpbmUtaGVpZ2h0IHZpYSBgZW1gIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGFnYWluc3QgdGhlIHBpeGVsIGJhc2VsaW5lIGdyaWQ7XG4gICAgLy8gd2Ugd2lsbCBhc3N1bWUgdGhhdCB0eXBpY2FsbHkgbGFyZ2VyIHNjYWxlIGZvbnQtc2l6ZXMgc2hvdWxkIGhhdmUgYSBzaG9ydGVyIGxpbmUtaGVpZ2h0O1xuICAgIHJldHVybiBfbGluZUhlaWdodE11bHRpcGxpZXIudG9GaXhlZCg0KS50b1N0cmluZygpO1xuICB9XG4gIHZhciBwaXhlbFZhbHVlID0gTWF0aC5mbG9vcihNYXRoLnJvdW5kKG51bWVyYXRvciAqIF9saW5lSGVpZ2h0TXVsdGlwbGllcikgLyBiYXNlbGluZSkgKiBiYXNlbGluZTtcbiAgcmV0dXJuIHVuaXQgPT09ICdweCcgPyBcIlwiLmNvbmNhdChwaXhlbFZhbHVlLCBcInB4XCIpIDogXCJcIi5jb25jYXQoKHBpeGVsVmFsdWUgLyBkZW5vbWluYXRvcikudG9GaXhlZCg0KSwgXCJyZW1cIik7XG59XG5cbi8qKlxuICogVGV4dCB3ZWlnaHQgc2hpZnRpbmdcbiAqXG4gKiBXaGVuIGNoYW5naW5nIHRoZSBmb250LXdlaWdodCBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdGhlIGNvbXBvbmVudCxcbiAqIHRoaXMgbWl4aW4gd2lsbCBlbnN1cmUgdGhhdCB0aGUgc2l6aW5nIGlzIGRlcGVuZGVudCBvbiB0aGUgYm9sZGVzdFxuICogd2VpZ2h0IHNvIGl0IGRvZXNuJ3Qgc2hpZnQgc2libGluZyBjb250ZW50LlxuICovXG5leHBvcnQgdmFyIGV1aVRleHRTaGlmdCA9IGZ1bmN0aW9uIGV1aVRleHRTaGlmdCgpIHtcbiAgdmFyIGZvbnRXZWlnaHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdib2xkJztcbiAgdmFyIGF0dHJpYnV0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2RhdGEtdGV4dCc7XG4gIHZhciBldWlUaGVtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICByZXR1cm4gXCJcXG4gICY6OmFmdGVyIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIGNvbnRlbnQ6IGF0dHIoXCIuY29uY2F0KGF0dHJpYnV0ZSwgXCIpO1xcbiAgICBmb250LXdlaWdodDogXCIpLmNvbmNhdChldWlUaGVtZS5mb250LndlaWdodFtmb250V2VpZ2h0XSwgXCI7XFxuICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0JywgMCksIFwiXFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIH1cIik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBzaXplVG9QaXhlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmV4cG9ydCB2YXIgYmFzZSA9IDE2O1xuZXhwb3J0IHZhciBzaXplID0ge1xuICB4eHM6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuMTI1KSksXG4gIHhzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjI1KSksXG4gIHM6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuNSkpLFxuICBtOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjc1KSksXG4gIGJhc2U6IGNvbXB1dGVkKHNpemVUb1BpeGVsKCkpLFxuICBsOiBjb21wdXRlZChzaXplVG9QaXhlbCgxLjUpKSxcbiAgeGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDIpKSxcbiAgeHhsOiBjb21wdXRlZChzaXplVG9QaXhlbCgyLjUpKSxcbiAgeHh4bDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMykpLFxuICB4eHh4bDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoNCkpXG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHNpemVUb1BpeGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zJztcbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdXRpbHMnO1xuZXhwb3J0IHZhciBib3JkZXIgPSB7XG4gIGNvbG9yOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDEpLFxuICAgICAgbGlnaHRTaGFkZSA9IF9yZWYyWzBdO1xuICAgIHJldHVybiBsaWdodFNoYWRlO1xuICB9LCBbJ2NvbG9ycy5saWdodFNoYWRlJ10pLFxuICB3aWR0aDoge1xuICAgIHRoaW46ICcxcHgnLFxuICAgIHRoaWNrOiAnMnB4J1xuICB9LFxuICByYWRpdXM6IHtcbiAgICBtZWRpdW06IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuMzc1KSksXG4gICAgc21hbGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuMjUpKVxuICB9LFxuICB0aGluOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgICB3aWR0aCA9IF9yZWY0WzBdLFxuICAgICAgY29sb3IgPSBfcmVmNFsxXTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQod2lkdGgudGhpbiwgXCIgc29saWQgXCIpLmNvbmNhdChjb2xvcik7XG4gIH0sIFsnYm9yZGVyLndpZHRoJywgJ2JvcmRlci5jb2xvciddKSxcbiAgdGhpY2s6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgIHZhciBfcmVmNiA9IF9zbGljZWRUb0FycmF5KF9yZWY1LCAyKSxcbiAgICAgIHdpZHRoID0gX3JlZjZbMF0sXG4gICAgICBjb2xvciA9IF9yZWY2WzFdO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdCh3aWR0aC50aGljaywgXCIgc29saWQgXCIpLmNvbmNhdChjb2xvcik7XG4gIH0sIFsnYm9yZGVyLndpZHRoJywgJ2JvcmRlci5jb2xvciddKSxcbiAgZWRpdGFibGU6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNykge1xuICAgIHZhciBfcmVmOCA9IF9zbGljZWRUb0FycmF5KF9yZWY3LCAyKSxcbiAgICAgIHdpZHRoID0gX3JlZjhbMF0sXG4gICAgICBjb2xvciA9IF9yZWY4WzFdO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdCh3aWR0aC50aGljaywgXCIgZG90dGVkIFwiKS5jb25jYXQoY29sb3IpO1xuICB9LCBbJ2JvcmRlci53aWR0aCcsICdib3JkZXIuY29sb3InXSlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgbGV2ZWxzID0ge1xuICB0b2FzdDogOTAwMCxcbiAgbW9kYWw6IDgwMDAsXG4gIG1hc2s6IDYwMDAsXG4gIG5hdmlnYXRpb246IDYwMDAsXG4gIG1lbnU6IDIwMDAsXG4gIGhlYWRlcjogMTAwMCxcbiAgZmx5b3V0OiAxMDAwLFxuICBtYXNrQmVsb3dIZWFkZXI6IDEwMDAsXG4gIGNvbnRlbnQ6IDBcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbi8vIFR5cG9ncmFwaGljIHNjYWxlIC0tIGxvb3NlbHkgYmFzZWQgb24gTWFqb3IgVGhpcmQgKDEuMjUwKVxuZXhwb3J0IHZhciBmb250U2NhbGUgPSB7XG4gIHh4eHM6IDAuNTYyNSxcbiAgeHhzOiAwLjY4NzUsXG4gIHhzOiAwLjc1LFxuICBzOiAwLjg3NSxcbiAgbTogMSxcbiAgbDogMS4zNzUsXG4gIHhsOiAxLjY4NzUsXG4gIHh4bDogMi4xMjVcbn07XG5cbi8vIEZhbWlsaWVzICYgYmFzZSBmb250IHNldHRpbmdzXG5leHBvcnQgdmFyIGZvbnRCYXNlID0ge1xuICBmYW1pbHk6IFwiJ0ludGVyJywgQmxpbmtNYWNTeXN0ZW1Gb250LCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXG4gIGZhbWlseUNvZGU6IFwiJ1JvYm90byBNb25vJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxuICBmYW1pbHlTZXJpZjogJ0dlb3JnaWEsIFRpbWVzLCBUaW1lcyBOZXcgUm9tYW4sIHNlcmlmJyxcbiAgLy8gQ2FyZWZ1bCB1c2luZyBsaWdhdHVyZXMuIENvZGUgZWRpdG9ycyBsaWtlIEFDRSB3aWxsIG9mdGVuIGVycm9yIGJlY2F1c2Ugb2Ygd2lkdGggY2FsY3VsYXRpb25zXG4gIGZlYXR1cmVTZXR0aW5nczogXCInY2FsdCcgMSwgJ2tlcm4nIDEsICdsaWdhJyAxXCIsXG4gIGRlZmF1bHRVbml0czogJ3JlbScsXG4gIGJhc2VsaW5lOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDEpLFxuICAgICAgYmFzZSA9IF9yZWYyWzBdO1xuICAgIHJldHVybiBiYXNlIC8gNDtcbiAgfSwgWydiYXNlJ10pLFxuICBsaW5lSGVpZ2h0TXVsdGlwbGllcjogMS41XG59O1xuZXhwb3J0IHZhciBmb250V2VpZ2h0ID0ge1xuICBsaWdodDogMzAwLFxuICByZWd1bGFyOiA0MDAsXG4gIG1lZGl1bTogNTAwLFxuICBzZW1pQm9sZDogNjAwLFxuICBib2xkOiA3MDBcbn07XG5leHBvcnQgdmFyIGZvbnQgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGZvbnRCYXNlKSwge30sIHtcbiAgc2NhbGU6IGZvbnRTY2FsZSxcbiAgd2VpZ2h0OiBmb250V2VpZ2h0LFxuICBib2R5OiB7XG4gICAgc2NhbGU6ICdzJyxcbiAgICB3ZWlnaHQ6ICdyZWd1bGFyJ1xuICB9LFxuICB0aXRsZToge1xuICAgIHdlaWdodDogJ2JvbGQnXG4gIH1cbn0pOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvY29sb3IvbWFuaXB1bGF0aW9uJztcbmltcG9ydCB7IHNpemVUb1BpeGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL3NpemUnO1xuZXhwb3J0IHZhciBmb2N1cyA9IHtcbiAgLy8gRm9jdXMgcmluZ1xuICBjb2xvcjogJ2N1cnJlbnRDb2xvcicsXG4gIHdpZHRoOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjEyNSkpLFxuICAvLyBGb2N1cyBiYWNrZ3JvdW5kXG4gIHRyYW5zcGFyZW5jeToge1xuICAgIExJR0hUOiAwLjEsXG4gICAgREFSSzogMC4yXG4gIH0sXG4gIGJhY2tncm91bmRDb2xvcjogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgY29sb3JzID0gX3JlZi5jb2xvcnMsXG4gICAgICBmb2N1cyA9IF9yZWYuZm9jdXM7XG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKGNvbG9ycy5wcmltYXJ5LCBmb2N1cy50cmFuc3BhcmVuY3kpO1xuICB9KVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgYnVpbGRUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IGNvbG9ycyB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19jb2xvcnMnO1xuaW1wb3J0IHsgYW5pbWF0aW9uIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2FuaW1hdGlvbic7XG5pbXBvcnQgeyBicmVha3BvaW50IH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JyZWFrcG9pbnQnO1xuaW1wb3J0IHsgYmFzZSwgc2l6ZSB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zaXplJztcbmltcG9ydCB7IGJvcmRlciB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19ib3JkZXJzJztcbmltcG9ydCB7IGxldmVscyB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19sZXZlbHMnO1xuaW1wb3J0IHsgZm9udCB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL190eXBvZ3JhcGh5JztcbmltcG9ydCB7IGZvY3VzIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3N0YXRlcyc7XG5leHBvcnQgdmFyIEFNU1RFUkRBTV9OQU1FX0tFWSA9ICdFVUlfVEhFTUVfQU1TVEVSREFNJztcbmV4cG9ydCB2YXIgZXVpVGhlbWVBbXN0ZXJkYW0gPSB7XG4gIGNvbG9yczogY29sb3JzLFxuICBiYXNlOiBiYXNlLFxuICBzaXplOiBzaXplLFxuICBib3JkZXI6IGJvcmRlcixcbiAgZm9udDogZm9udCxcbiAgYW5pbWF0aW9uOiBhbmltYXRpb24sXG4gIGJyZWFrcG9pbnQ6IGJyZWFrcG9pbnQsXG4gIGxldmVsczogbGV2ZWxzLFxuICBmb2N1czogZm9jdXNcbn07XG5leHBvcnQgdmFyIEV1aVRoZW1lQW1zdGVyZGFtID0gYnVpbGRUaGVtZShldWlUaGVtZUFtc3RlcmRhbSwgQU1TVEVSREFNX05BTUVfS0VZKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxudmFyIHByb3ZpZGVyV2FybmluZyA9IHVuZGVmaW5lZDtcbmV4cG9ydCB2YXIgc2V0RXVpRGV2UHJvdmlkZXJXYXJuaW5nID0gZnVuY3Rpb24gc2V0RXVpRGV2UHJvdmlkZXJXYXJuaW5nKHdhcm5pbmdUeXBlKSB7XG4gIHJldHVybiBwcm92aWRlcldhcm5pbmcgPSB3YXJuaW5nVHlwZTtcbn07XG5leHBvcnQgdmFyIGdldEV1aURldlByb3ZpZGVyV2FybmluZyA9IGZ1bmN0aW9uIGdldEV1aURldlByb3ZpZGVyV2FybmluZygpIHtcbiAgcmV0dXJuIHByb3ZpZGVyV2FybmluZztcbn07XG5cbi8vIE5vdCBhIHB1YmxpYyB0b3AtbGV2ZWwgRVVJIGV4cG9ydCwgY3VycmVudGx5IGZvciBpbnRlcm5hbCB1c2VcbmV4cG9ydCB2YXIgZW1pdEV1aVByb3ZpZGVyV2FybmluZyA9IGZ1bmN0aW9uIGVtaXRFdWlQcm92aWRlcldhcm5pbmcocHJvdmlkZXJNZXNzYWdlKSB7XG4gIC8vIEhhbmRsZSBjYWxsYmFjayB0eXBlc1xuICBpZiAodHlwZW9mIHByb3ZpZGVyV2FybmluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBwcm92aWRlcldhcm5pbmcocHJvdmlkZXJNZXNzYWdlKTtcbiAgfVxuICAvLyBIYW5kbGUgbGV2ZWwgdHlwZXNcbiAgc3dpdGNoIChwcm92aWRlcldhcm5pbmcpIHtcbiAgICBjYXNlICdsb2cnOlxuICAgICAgY29uc29sZS5sb2cocHJvdmlkZXJNZXNzYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3dhcm4nOlxuICAgICAgY29uc29sZS53YXJuKHByb3ZpZGVyTWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlcnJvcic6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvdmlkZXJNZXNzYWdlKTtcbiAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cbn07IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IHdlYWtNZW1vaXplIGZyb20gJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgaG9pc3ROb25SZWFjdFN0YXRpY3MgZnJvbSAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcblxudmFyIGlzRGV2ZWxvcG1lbnQgPSBmYWxzZTtcblxuLyogaW1wb3J0IHsgdHlwZSBFbW90aW9uQ2FjaGUgfSBmcm9tICdAZW1vdGlvbi91dGlscycgKi9cbnZhciBFbW90aW9uQ2FjaGVDb250ZXh0XG4vKjogUmVhY3QuQ29udGV4dDxFbW90aW9uQ2FjaGUgfCBudWxsPiAqL1xuPSAvKiAjX19QVVJFX18gKi9SZWFjdC5jcmVhdGVDb250ZXh0KCAvLyB3ZSdyZSBkb2luZyB0aGlzIHRvIGF2b2lkIHByZWNvbnN0cnVjdCdzIGRlYWQgY29kZSBlbGltaW5hdGlvbiBpbiB0aGlzIG9uZSBjYXNlXG4vLyBiZWNhdXNlIHRoaXMgbW9kdWxlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgdGhlIGJyb3dzZXIgYW5kIG5vZGVcbi8vIGJ1dCBpdCdzIGFsc28gcmVxdWlyZWQgaW4gcmVhY3QgbmF0aXZlIGFuZCBzaW1pbGFyIGVudmlyb25tZW50cyBzb21ldGltZXNcbi8vIGFuZCB3ZSBjb3VsZCBoYXZlIGEgc3BlY2lhbCBidWlsZCBqdXN0IGZvciB0aGF0XG4vLyBidXQgdGhpcyBpcyBtdWNoIGVhc2llciBhbmQgdGhlIG5hdGl2ZSBwYWNrYWdlc1xuLy8gbWlnaHQgdXNlIGEgZGlmZmVyZW50IHRoZW1lIGNvbnRleHQgaW4gdGhlIGZ1dHVyZSBhbnl3YXlcbnR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgPyAvKiAjX19QVVJFX18gKi9jcmVhdGVDYWNoZSh7XG4gIGtleTogJ2Nzcydcbn0pIDogbnVsbCk7XG5cbnZhciBDYWNoZVByb3ZpZGVyID0gRW1vdGlvbkNhY2hlQ29udGV4dC5Qcm92aWRlcjtcbnZhciBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUgPSBmdW5jdGlvbiB1c2VFbW90aW9uQ2FjaGUoKVxuLyo6IEVtb3Rpb25DYWNoZSB8IG51bGwqL1xue1xuICByZXR1cm4gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbn07XG5cbnZhciB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZVxuLyogPFByb3BzLCBSZWY6IFJlYWN0LlJlZjwqPj4gKi9cbihmdW5jXG4vKjogKHByb3BzOiBQcm9wcywgY2FjaGU6IEVtb3Rpb25DYWNoZSwgcmVmOiBSZWYpID0+IFJlYWN0Lk5vZGUgKi9cbilcbi8qOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDxQcm9wcz4gKi9cbntcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wc1xuICAvKjogUHJvcHMgKi9cbiAgLCByZWZcbiAgLyo6IFJlZiAqL1xuICApIHtcbiAgICAvLyB0aGUgY2FjaGUgd2lsbCBuZXZlciBiZSBudWxsIGluIHRoZSBicm93c2VyXG4gICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbiAgICByZXR1cm4gZnVuYyhwcm9wcywgY2FjaGUsIHJlZik7XG4gIH0pO1xufTtcblxudmFyIFRoZW1lQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG52YXIgdXNlVGhlbWUgPSBmdW5jdGlvbiB1c2VUaGVtZSgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbn07XG5cbnZhciBnZXRUaGVtZSA9IGZ1bmN0aW9uIGdldFRoZW1lKG91dGVyVGhlbWVcbi8qOiBPYmplY3QgKi9cbiwgdGhlbWVcbi8qOiBPYmplY3QgfCAoT2JqZWN0ID0+IE9iamVjdCkgKi9cbikge1xuICBpZiAodHlwZW9mIHRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIG1lcmdlZFRoZW1lID0gdGhlbWUob3V0ZXJUaGVtZSk7XG5cbiAgICByZXR1cm4gbWVyZ2VkVGhlbWU7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIG91dGVyVGhlbWUsIHRoZW1lKTtcbn07XG5cbnZhciBjcmVhdGVDYWNoZVdpdGhUaGVtZSA9IC8qICNfX1BVUkVfXyAqL3dlYWtNZW1vaXplKGZ1bmN0aW9uIChvdXRlclRoZW1lKSB7XG4gIHJldHVybiB3ZWFrTWVtb2l6ZShmdW5jdGlvbiAodGhlbWUpIHtcbiAgICByZXR1cm4gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpO1xuICB9KTtcbn0pO1xuLypcbnR5cGUgVGhlbWVQcm92aWRlclByb3BzID0ge1xuICB0aGVtZTogT2JqZWN0IHwgKE9iamVjdCA9PiBPYmplY3QpLFxuICBjaGlsZHJlbjogUmVhY3QuTm9kZVxufVxuKi9cblxudmFyIFRoZW1lUHJvdmlkZXIgPSBmdW5jdGlvbiBUaGVtZVByb3ZpZGVyKHByb3BzXG4vKjogVGhlbWVQcm92aWRlclByb3BzICovXG4pIHtcbiAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9wcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICB0aGVtZSA9IGNyZWF0ZUNhY2hlV2l0aFRoZW1lKHRoZW1lKShwcm9wcy50aGVtZSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5mdW5jdGlvbiB3aXRoVGhlbWVcbi8qIDxDb25maWc6IHt9PiAqL1xuKENvbXBvbmVudFxuLyo6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PENvbmZpZz4gKi9cbilcbi8qOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDwkRGlmZjxDb25maWcsIHsgdGhlbWU6IE9iamVjdCB9Pj4gKi9cbntcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG5cbiAgdmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcihwcm9wcywgcmVmKSB7XG4gICAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMpKTtcbiAgfTtcblxuICB2YXIgV2l0aFRoZW1lID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYocmVuZGVyKTtcbiAgV2l0aFRoZW1lLmRpc3BsYXlOYW1lID0gXCJXaXRoVGhlbWUoXCIgKyBjb21wb25lbnROYW1lICsgXCIpXCI7XG4gIHJldHVybiBob2lzdE5vblJlYWN0U3RhdGljcyhXaXRoVGhlbWUsIENvbXBvbmVudCk7XG59XG5cbnZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIHR5cGVQcm9wTmFtZSA9ICdfX0VNT1RJT05fVFlQRV9QTEVBU0VfRE9fTk9UX1VTRV9fJztcbnZhciBjcmVhdGVFbW90aW9uUHJvcHMgPSBmdW5jdGlvbiBjcmVhdGVFbW90aW9uUHJvcHModHlwZVxuLyo6IFJlYWN0LkVsZW1lbnRUeXBlICovXG4sIHByb3BzXG4vKjogT2JqZWN0ICovXG4pIHtcblxuICB2YXIgbmV3UHJvcHNcbiAgLyo6IGFueSAqL1xuICA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd24uY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHNbdHlwZVByb3BOYW1lXSA9IHR5cGU7IC8vIFJ1bnRpbWUgbGFiZWxpbmcgaXMgYW4gb3B0LWluIGZlYXR1cmUgYmVjYXVzZTpcblxuICByZXR1cm4gbmV3UHJvcHM7XG59O1xuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWQgPSBfcmVmLnNlcmlhbGl6ZWQsXG4gICAgICBpc1N0cmluZ1RhZyA9IF9yZWYuaXNTdHJpbmdUYWc7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgRW1vdGlvbiA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoXG4vKiA8YW55LCBhbnk+ICovXG5mdW5jdGlvbiAocHJvcHMsIGNhY2hlLCByZWYpIHtcbiAgdmFyIGNzc1Byb3AgPSBwcm9wcy5jc3M7IC8vIHNvIHRoYXQgdXNpbmcgYGNzc2AgZnJvbSBgZW1vdGlvbmAgYW5kIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgY3NzIHByb3Agd29ya3NcbiAgLy8gbm90IHBhc3NpbmcgdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8gc2VyaWFsaXplU3R5bGVzIGJlY2F1c2UgaXQgd291bGRcbiAgLy8gbWFrZSBjZXJ0YWluIGJhYmVsIG9wdGltaXNhdGlvbnMgbm90IHBvc3NpYmxlXG5cbiAgaWYgKHR5cGVvZiBjc3NQcm9wID09PSAnc3RyaW5nJyAmJiBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICBjc3NQcm9wID0gY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXTtcbiAgfVxuXG4gIHZhciBXcmFwcGVkQ29tcG9uZW50ID0gcHJvcHNbdHlwZVByb3BOYW1lXTtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbY3NzUHJvcF07XG4gIHZhciBjbGFzc05hbWUgPSAnJztcblxuICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIHByb3BzLmNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICE9IG51bGwpIHtcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHJlZ2lzdGVyZWRTdHlsZXMsIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcblxuICBjbGFzc05hbWUgKz0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd24uY2FsbChwcm9wcywga2V5KSAmJiBrZXkgIT09ICdjc3MnICYmIGtleSAhPT0gdHlwZVByb3BOYW1lICYmICghaXNEZXZlbG9wbWVudCApKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgaWYgKHJlZikge1xuICAgIG5ld1Byb3BzLnJlZiA9IHJlZjtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5zZXJ0aW9uLCB7XG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIHNlcmlhbGl6ZWQ6IHNlcmlhbGl6ZWQsXG4gICAgaXNTdHJpbmdUYWc6IHR5cGVvZiBXcmFwcGVkQ29tcG9uZW50ID09PSAnc3RyaW5nJ1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoV3JhcHBlZENvbXBvbmVudCwgbmV3UHJvcHMpKTtcbn0pO1xuXG52YXIgRW1vdGlvbiQxID0gRW1vdGlvbjtcblxuZXhwb3J0IHsgQ2FjaGVQcm92aWRlciBhcyBDLCBFbW90aW9uJDEgYXMgRSwgVGhlbWVDb250ZXh0IGFzIFQsIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSBhcyBfLCBUaGVtZVByb3ZpZGVyIGFzIGEsIHdpdGhUaGVtZSBhcyBiLCBjcmVhdGVFbW90aW9uUHJvcHMgYXMgYywgaGFzT3duIGFzIGgsIGlzRGV2ZWxvcG1lbnQgYXMgaSwgdXNlVGhlbWUgYXMgdSwgd2l0aEVtb3Rpb25DYWNoZSBhcyB3IH07XG4iLCAidmFyIGlzRGV2ZWxvcG1lbnQgPSBmYWxzZTtcblxuLypcblxuQmFzZWQgb2ZmIGdsYW1vcidzIFN0eWxlU2hlZXQsIHRoYW5rcyBTdW5pbCBcdTI3NjRcdUZFMEZcblxuaGlnaCBwZXJmb3JtYW5jZSBTdHlsZVNoZWV0IGZvciBjc3MtaW4tanMgc3lzdGVtc1xuXG4tIHVzZXMgbXVsdGlwbGUgc3R5bGUgdGFncyBiZWhpbmQgdGhlIHNjZW5lcyBmb3IgbWlsbGlvbnMgb2YgcnVsZXNcbi0gdXNlcyBgaW5zZXJ0UnVsZWAgZm9yIGFwcGVuZGluZyBpbiBwcm9kdWN0aW9uIGZvciAqbXVjaCogZmFzdGVyIHBlcmZvcm1hbmNlXG5cbi8vIHVzYWdlXG5cbmltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCdcblxubGV0IHN0eWxlU2hlZXQgPSBuZXcgU3R5bGVTaGVldCh7IGtleTogJycsIGNvbnRhaW5lcjogZG9jdW1lbnQuaGVhZCB9KVxuXG5zdHlsZVNoZWV0Lmluc2VydCgnI2JveCB7IGJvcmRlcjogMXB4IHNvbGlkIHJlZDsgfScpXG4tIGFwcGVuZHMgYSBjc3MgcnVsZSBpbnRvIHRoZSBzdHlsZXNoZWV0XG5cbnN0eWxlU2hlZXQuZmx1c2goKVxuLSBlbXB0aWVzIHRoZSBzdHlsZXNoZWV0IG9mIGFsbCBpdHMgY29udGVudHNcblxuKi9cblxuZnVuY3Rpb24gc2hlZXRGb3JUYWcodGFnKSB7XG4gIGlmICh0YWcuc2hlZXQpIHtcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgPT09IHRhZykge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgIH1cbiAgfSAvLyB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgcmV0dXJuIHdpdGggYSB2YWx1ZVxuICAvLyBUUyBjYW4ndCB1bmRlcnN0YW5kIGl0IHRob3VnaCBzbyB3ZSBtYWtlIGl0IHN0b3AgY29tcGxhaW5pbmcgaGVyZVxuXG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIG9wdGlvbnMua2V5KTtcblxuICBpZiAob3B0aW9ucy5ub25jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBvcHRpb25zLm5vbmNlKTtcbiAgfVxuXG4gIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJykpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gIHJldHVybiB0YWc7XG59XG5cbnZhciBTdHlsZVNoZWV0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgLy8gVXNpbmcgTm9kZSBpbnN0ZWFkIG9mIEhUTUxFbGVtZW50IHNpbmNlIGNvbnRhaW5lciBtYXkgYmUgYSBTaGFkb3dSb290XG4gIGZ1bmN0aW9uIFN0eWxlU2hlZXQob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9pbnNlcnRUYWcgPSBmdW5jdGlvbiAodGFnKSB7XG4gICAgICB2YXIgYmVmb3JlO1xuXG4gICAgICBpZiAoX3RoaXMudGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKF90aGlzLmluc2VydGlvblBvaW50KSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuaW5zZXJ0aW9uUG9pbnQubmV4dFNpYmxpbmc7XG4gICAgICAgIH0gZWxzZSBpZiAoX3RoaXMucHJlcGVuZCkge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmJlZm9yZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVmb3JlID0gX3RoaXMudGFnc1tfdGhpcy50YWdzLmxlbmd0aCAtIDFdLm5leHRTaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jb250YWluZXIuaW5zZXJ0QmVmb3JlKHRhZywgYmVmb3JlKTtcblxuICAgICAgX3RoaXMudGFncy5wdXNoKHRhZyk7XG4gICAgfTtcblxuICAgIHRoaXMuaXNTcGVlZHkgPSBvcHRpb25zLnNwZWVkeSA9PT0gdW5kZWZpbmVkID8gIWlzRGV2ZWxvcG1lbnQgOiBvcHRpb25zLnNwZWVkeTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gICAgdGhpcy5ub25jZSA9IG9wdGlvbnMubm9uY2U7IC8vIGtleSBpcyB0aGUgdmFsdWUgb2YgdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUsIGl0J3MgdXNlZCB0byBpZGVudGlmeSBkaWZmZXJlbnQgc2hlZXRzXG5cbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgdGhpcy5wcmVwZW5kID0gb3B0aW9ucy5wcmVwZW5kO1xuICAgIHRoaXMuaW5zZXJ0aW9uUG9pbnQgPSBvcHRpb25zLmluc2VydGlvblBvaW50O1xuICAgIHRoaXMuYmVmb3JlID0gbnVsbDtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTdHlsZVNoZWV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaHlkcmF0ZSA9IGZ1bmN0aW9uIGh5ZHJhdGUobm9kZXMpIHtcbiAgICBub2Rlcy5mb3JFYWNoKHRoaXMuX2luc2VydFRhZyk7XG4gIH07XG5cbiAgX3Byb3RvLmluc2VydCA9IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgLy8gdGhlIG1heCBsZW5ndGggaXMgaG93IG1hbnkgcnVsZXMgd2UgaGF2ZSBwZXIgc3R5bGUgdGFnLCBpdCdzIDY1MDAwIGluIHNwZWVkeSBtb2RlXG4gICAgLy8gaXQncyAxIGluIGRldiBiZWNhdXNlIHdlIGluc2VydCBzb3VyY2UgbWFwcyB0aGF0IG1hcCBhIHNpbmdsZSBydWxlIHRvIGEgbG9jYXRpb25cbiAgICAvLyBhbmQgeW91IGNhbiBvbmx5IGhhdmUgb25lIHNvdXJjZSBtYXAgcGVyIHN0eWxlIHRhZ1xuICAgIGlmICh0aGlzLmN0ciAlICh0aGlzLmlzU3BlZWR5ID8gNjUwMDAgOiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5faW5zZXJ0VGFnKGNyZWF0ZVN0eWxlRWxlbWVudCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdmFyIHRhZyA9IHRoaXMudGFnc1t0aGlzLnRhZ3MubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAodGhpcy5pc1NwZWVkeSkge1xuICAgICAgdmFyIHNoZWV0ID0gc2hlZXRGb3JUYWcodGFnKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgdWx0cmFmYXN0IHZlcnNpb24sIHdvcmtzIGFjcm9zcyBicm93c2Vyc1xuICAgICAgICAvLyB0aGUgYmlnIGRyYXdiYWNrIGlzIHRoYXQgdGhlIGNzcyB3b24ndCBiZSBlZGl0YWJsZSBpbiBkZXZ0b29sc1xuICAgICAgICBzaGVldC5pbnNlcnRSdWxlKHJ1bGUsIHNoZWV0LmNzc1J1bGVzLmxlbmd0aCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShydWxlKSk7XG4gICAgfVxuXG4gICAgdGhpcy5jdHIrKztcbiAgfTtcblxuICBfcHJvdG8uZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICB0aGlzLnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnKSB7XG4gICAgICB2YXIgX3RhZyRwYXJlbnROb2RlO1xuXG4gICAgICByZXR1cm4gKF90YWckcGFyZW50Tm9kZSA9IHRhZy5wYXJlbnROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX3RhZyRwYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRhZyk7XG4gICAgfSk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICB9O1xuXG4gIHJldHVybiBTdHlsZVNoZWV0O1xufSgpO1xuXG5leHBvcnQgeyBTdHlsZVNoZWV0IH07XG4iLCAiZXhwb3J0IHZhciBNUyA9ICctbXMtJ1xuZXhwb3J0IHZhciBNT1ogPSAnLW1vei0nXG5leHBvcnQgdmFyIFdFQktJVCA9ICctd2Via2l0LSdcblxuZXhwb3J0IHZhciBDT01NRU5UID0gJ2NvbW0nXG5leHBvcnQgdmFyIFJVTEVTRVQgPSAncnVsZSdcbmV4cG9ydCB2YXIgREVDTEFSQVRJT04gPSAnZGVjbCdcblxuZXhwb3J0IHZhciBQQUdFID0gJ0BwYWdlJ1xuZXhwb3J0IHZhciBNRURJQSA9ICdAbWVkaWEnXG5leHBvcnQgdmFyIElNUE9SVCA9ICdAaW1wb3J0J1xuZXhwb3J0IHZhciBDSEFSU0VUID0gJ0BjaGFyc2V0J1xuZXhwb3J0IHZhciBWSUVXUE9SVCA9ICdAdmlld3BvcnQnXG5leHBvcnQgdmFyIFNVUFBPUlRTID0gJ0BzdXBwb3J0cydcbmV4cG9ydCB2YXIgRE9DVU1FTlQgPSAnQGRvY3VtZW50J1xuZXhwb3J0IHZhciBOQU1FU1BBQ0UgPSAnQG5hbWVzcGFjZSdcbmV4cG9ydCB2YXIgS0VZRlJBTUVTID0gJ0BrZXlmcmFtZXMnXG5leHBvcnQgdmFyIEZPTlRfRkFDRSA9ICdAZm9udC1mYWNlJ1xuZXhwb3J0IHZhciBDT1VOVEVSX1NUWUxFID0gJ0Bjb3VudGVyLXN0eWxlJ1xuZXhwb3J0IHZhciBGT05UX0ZFQVRVUkVfVkFMVUVTID0gJ0Bmb250LWZlYXR1cmUtdmFsdWVzJ1xuZXhwb3J0IHZhciBMQVlFUiA9ICdAbGF5ZXInXG4iLCAiLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IHZhciBhYnMgPSBNYXRoLmFic1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgdmFyIGZyb20gPSBTdHJpbmcuZnJvbUNoYXJDb2RlXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCB2YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaCAodmFsdWUsIGxlbmd0aCkge1xuXHRyZXR1cm4gY2hhcmF0KHZhbHVlLCAwKSBeIDQ1ID8gKCgoKCgoKGxlbmd0aCA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMCkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAxKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDIpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMykgOiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUudHJpbSgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcGF0dGVyblxuICogQHJldHVybiB7c3RyaW5nP31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoICh2YWx1ZSwgcGF0dGVybikge1xuXHRyZXR1cm4gKHZhbHVlID0gcGF0dGVybi5leGVjKHZhbHVlKSkgPyB2YWx1ZVswXSA6IHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gcGF0dGVyblxuICogQHBhcmFtIHtzdHJpbmd9IHJlcGxhY2VtZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlICh2YWx1ZSwgcGF0dGVybiwgcmVwbGFjZW1lbnQpIHtcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleG9mICh2YWx1ZSwgc2VhcmNoKSB7XG5cdHJldHVybiB2YWx1ZS5pbmRleE9mKHNlYXJjaClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhcmF0ICh2YWx1ZSwgaW5kZXgpIHtcblx0cmV0dXJuIHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgpIHwgMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHIgKHZhbHVlLCBiZWdpbiwgZW5kKSB7XG5cdHJldHVybiB2YWx1ZS5zbGljZShiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RybGVuICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnlbXX0gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpemVvZiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHthbnlbXX0gYXJyYXlcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZCAodmFsdWUsIGFycmF5KSB7XG5cdHJldHVybiBhcnJheS5wdXNoKHZhbHVlKSwgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmUgKGFycmF5LCBjYWxsYmFjaykge1xuXHRyZXR1cm4gYXJyYXkubWFwKGNhbGxiYWNrKS5qb2luKCcnKVxufVxuIiwgImltcG9ydCB7ZnJvbSwgdHJpbSwgY2hhcmF0LCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCBhc3NpZ259IGZyb20gJy4vVXRpbGl0eS5qcydcblxuZXhwb3J0IHZhciBsaW5lID0gMVxuZXhwb3J0IHZhciBjb2x1bW4gPSAxXG5leHBvcnQgdmFyIGxlbmd0aCA9IDBcbmV4cG9ydCB2YXIgcG9zaXRpb24gPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlciA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVycyA9ICcnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0W10gfCBzdHJpbmd9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub2RlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHRyZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgcm9vdDogcm9vdCwgcGFyZW50OiBwYXJlbnQsIHR5cGU6IHR5cGUsIHByb3BzOiBwcm9wcywgY2hpbGRyZW46IGNoaWxkcmVuLCBsaW5lOiBsaW5lLCBjb2x1bW46IGNvbHVtbiwgbGVuZ3RoOiBsZW5ndGgsIHJldHVybjogJyd9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weSAocm9vdCwgcHJvcHMpIHtcblx0cmV0dXJuIGFzc2lnbihub2RlKCcnLCBudWxsLCBudWxsLCAnJywgbnVsbCwgbnVsbCwgMCksIHJvb3QsIHtsZW5ndGg6IC1yb290Lmxlbmd0aH0sIHByb3BzKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXIgKCkge1xuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldiAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uID4gMCA/IGNoYXJhdChjaGFyYWN0ZXJzLCAtLXBvc2l0aW9uKSA6IDBcblxuXHRpZiAoY29sdW1uLS0sIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZS0tXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHQgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA8IGxlbmd0aCA/IGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbisrKSA6IDBcblxuXHRpZiAoY29sdW1uKyssIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZSsrXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlZWsgKCkge1xuXHRyZXR1cm4gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcmV0ICgpIHtcblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGljZSAoYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gc3Vic3RyKGNoYXJhY3RlcnMsIGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuICh0eXBlKSB7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdC8vIFxcMCBcXHQgXFxuIFxcciBcXHMgd2hpdGVzcGFjZSB0b2tlblxuXHRcdGNhc2UgMDogY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0cmV0dXJuIDVcblx0XHQvLyAhICsgLCAvID4gQCB+IGlzb2xhdGUgdG9rZW5cblx0XHRjYXNlIDMzOiBjYXNlIDQzOiBjYXNlIDQ0OiBjYXNlIDQ3OiBjYXNlIDYyOiBjYXNlIDY0OiBjYXNlIDEyNjpcblx0XHQvLyA7IHsgfSBicmVha3BvaW50IHRva2VuXG5cdFx0Y2FzZSA1OTogY2FzZSAxMjM6IGNhc2UgMTI1OlxuXHRcdFx0cmV0dXJuIDRcblx0XHQvLyA6IGFjY29tcGFuaWVkIHRva2VuXG5cdFx0Y2FzZSA1ODpcblx0XHRcdHJldHVybiAzXG5cdFx0Ly8gXCIgJyAoIFsgb3BlbmluZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA0MDogY2FzZSA5MTpcblx0XHRcdHJldHVybiAyXG5cdFx0Ly8gKSBdIGNsb3NpbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgNDE6IGNhc2UgOTM6XG5cdFx0XHRyZXR1cm4gMVxuXHR9XG5cblx0cmV0dXJuIDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2FueVtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBsaW5lID0gY29sdW1uID0gMSwgbGVuZ3RoID0gc3RybGVuKGNoYXJhY3RlcnMgPSB2YWx1ZSksIHBvc2l0aW9uID0gMCwgW11cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJzID0gJycsIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXQgKHR5cGUpIHtcblx0cmV0dXJuIHRyaW0oc2xpY2UocG9zaXRpb24gLSAxLCBkZWxpbWl0ZXIodHlwZSA9PT0gOTEgPyB0eXBlICsgMiA6IHR5cGUgPT09IDQwID8gdHlwZSArIDEgOiB0eXBlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyh0b2tlbml6ZXIoYWxsb2ModmFsdWUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2hpdGVzcGFjZSAodHlwZSkge1xuXHR3aGlsZSAoY2hhcmFjdGVyID0gcGVlaygpKVxuXHRcdGlmIChjaGFyYWN0ZXIgPCAzMylcblx0XHRcdG5leHQoKVxuXHRcdGVsc2Vcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHRva2VuKHR5cGUpID4gMiB8fCB0b2tlbihjaGFyYWN0ZXIpID4gMyA/ICcnIDogJyAnXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemVyIChjaGlsZHJlbikge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuXHRcdFx0Y2FzZSAwOiBhcHBlbmQoaWRlbnRpZmllcihwb3NpdGlvbiAtIDEpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjogYXBwZW5kKGRlbGltaXQoY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRkZWZhdWx0OiBhcHBlbmQoZnJvbShjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHR9XG5cblx0cmV0dXJuIGNoaWxkcmVuXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwaW5nIChpbmRleCwgY291bnQpIHtcblx0d2hpbGUgKC0tY291bnQgJiYgbmV4dCgpKVxuXHRcdC8vIG5vdCAwLTkgQS1GIGEtZlxuXHRcdGlmIChjaGFyYWN0ZXIgPCA0OCB8fCBjaGFyYWN0ZXIgPiAxMDIgfHwgKGNoYXJhY3RlciA+IDU3ICYmIGNoYXJhY3RlciA8IDY1KSB8fCAoY2hhcmFjdGVyID4gNzAgJiYgY2hhcmFjdGVyIDwgOTcpKVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIGNhcmV0KCkgKyAoY291bnQgPCA2ICYmIHBlZWsoKSA9PSAzMiAmJiBuZXh0KCkgPT0gMzIpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ZXIgKHR5cGUpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0Ly8gXSApIFwiICdcblx0XHRcdGNhc2UgdHlwZTpcblx0XHRcdFx0cmV0dXJuIHBvc2l0aW9uXG5cdFx0XHQvLyBcIiAnXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OlxuXHRcdFx0XHRpZiAodHlwZSAhPT0gMzQgJiYgdHlwZSAhPT0gMzkpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmICh0eXBlID09PSA0MSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIodHlwZSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRuZXh0KClcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudGVyICh0eXBlLCBpbmRleCkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdC8vIC8vXG5cdFx0aWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQ3ICsgMTApXG5cdFx0XHRicmVha1xuXHRcdC8vIC8qXG5cdFx0ZWxzZSBpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDIgKyA0MiAmJiBwZWVrKCkgPT09IDQ3KVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gJy8qJyArIHNsaWNlKGluZGV4LCBwb3NpdGlvbiAtIDEpICsgJyonICsgZnJvbSh0eXBlID09PSA0NyA/IHR5cGUgOiBuZXh0KCkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyIChpbmRleCkge1xuXHR3aGlsZSAoIXRva2VuKHBlZWsoKSkpXG5cdFx0bmV4dCgpXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBwb3NpdGlvbilcbn1cbiIsICJpbXBvcnQge0NPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2FicywgY2hhcmF0LCB0cmltLCBmcm9tLCBzaXplb2YsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIHJlcGxhY2UsIGluZGV4b2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7bm9kZSwgY2hhciwgcHJldiwgbmV4dCwgcGVlaywgY2FyZXQsIGFsbG9jLCBkZWFsbG9jLCBkZWxpbWl0LCB3aGl0ZXNwYWNlLCBlc2NhcGluZywgaWRlbnRpZmllciwgY29tbWVudGVyfSBmcm9tICcuL1Rva2VuaXplci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge29iamVjdFtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2MocGFyc2UoJycsIG51bGwsIG51bGwsIG51bGwsIFsnJ10sIHZhbHVlID0gYWxsb2ModmFsdWUpLCAwLCBbMF0sIHZhbHVlKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzZXRzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwc2V1ZG9cbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVjbGFyYXRpb25zXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgcnVsZSwgcnVsZXMsIHJ1bGVzZXRzLCBwc2V1ZG8sIHBvaW50cywgZGVjbGFyYXRpb25zKSB7XG5cdHZhciBpbmRleCA9IDBcblx0dmFyIG9mZnNldCA9IDBcblx0dmFyIGxlbmd0aCA9IHBzZXVkb1xuXHR2YXIgYXRydWxlID0gMFxuXHR2YXIgcHJvcGVydHkgPSAwXG5cdHZhciBwcmV2aW91cyA9IDBcblx0dmFyIHZhcmlhYmxlID0gMVxuXHR2YXIgc2Nhbm5pbmcgPSAxXG5cdHZhciBhbXBlcnNhbmQgPSAxXG5cdHZhciBjaGFyYWN0ZXIgPSAwXG5cdHZhciB0eXBlID0gJydcblx0dmFyIHByb3BzID0gcnVsZXNcblx0dmFyIGNoaWxkcmVuID0gcnVsZXNldHNcblx0dmFyIHJlZmVyZW5jZSA9IHJ1bGVcblx0dmFyIGNoYXJhY3RlcnMgPSB0eXBlXG5cblx0d2hpbGUgKHNjYW5uaW5nKVxuXHRcdHN3aXRjaCAocHJldmlvdXMgPSBjaGFyYWN0ZXIsIGNoYXJhY3RlciA9IG5leHQoKSkge1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHByZXZpb3VzICE9IDEwOCAmJiBjaGFyYXQoY2hhcmFjdGVycywgbGVuZ3RoIC0gMSkgPT0gNTgpIHtcblx0XHRcdFx0XHRpZiAoaW5kZXhvZihjaGFyYWN0ZXJzICs9IHJlcGxhY2UoZGVsaW1pdChjaGFyYWN0ZXIpLCAnJicsICcmXFxmJyksICcmXFxmJykgIT0gLTEpXG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSAtMVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdC8vIFwiICcgW1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA5MTpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcdCBcXG4gXFxyIFxcc1xuXHRcdFx0Y2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IHdoaXRlc3BhY2UocHJldmlvdXMpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBlc2NhcGluZyhjYXJldCgpIC0gMSwgNylcblx0XHRcdFx0Y29udGludWVcblx0XHRcdC8vIC9cblx0XHRcdGNhc2UgNDc6XG5cdFx0XHRcdHN3aXRjaCAocGVlaygpKSB7XG5cdFx0XHRcdFx0Y2FzZSA0MjogY2FzZSA0Nzpcblx0XHRcdFx0XHRcdGFwcGVuZChjb21tZW50KGNvbW1lbnRlcihuZXh0KCksIGNhcmV0KCkpLCByb290LCBwYXJlbnQpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9ICcvJ1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyB7XG5cdFx0XHRjYXNlIDEyMyAqIHZhcmlhYmxlOlxuXHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSBzdHJsZW4oY2hhcmFjdGVycykgKiBhbXBlcnNhbmRcblx0XHRcdC8vIH0gOyBcXDBcblx0XHRcdGNhc2UgMTI1ICogdmFyaWFibGU6IGNhc2UgNTk6IGNhc2UgMDpcblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdFx0XHQvLyBcXDAgfVxuXHRcdFx0XHRcdGNhc2UgMDogY2FzZSAxMjU6IHNjYW5uaW5nID0gMFxuXHRcdFx0XHRcdC8vIDtcblx0XHRcdFx0XHRjYXNlIDU5ICsgb2Zmc2V0OiBpZiAoYW1wZXJzYW5kID09IC0xKSBjaGFyYWN0ZXJzID0gcmVwbGFjZShjaGFyYWN0ZXJzLCAvXFxmL2csICcnKVxuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5ID4gMCAmJiAoc3RybGVuKGNoYXJhY3RlcnMpIC0gbGVuZ3RoKSlcblx0XHRcdFx0XHRcdFx0YXBwZW5kKHByb3BlcnR5ID4gMzIgPyBkZWNsYXJhdGlvbihjaGFyYWN0ZXJzICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDEpIDogZGVjbGFyYXRpb24ocmVwbGFjZShjaGFyYWN0ZXJzLCAnICcsICcnKSArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAyKSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAIDtcblx0XHRcdFx0XHRjYXNlIDU5OiBjaGFyYWN0ZXJzICs9ICc7J1xuXHRcdFx0XHRcdC8vIHsgcnVsZS9hdC1ydWxlXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGFwcGVuZChyZWZlcmVuY2UgPSBydWxlc2V0KGNoYXJhY3RlcnMsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMgPSBbXSwgY2hpbGRyZW4gPSBbXSwgbGVuZ3RoKSwgcnVsZXNldHMpXG5cblx0XHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT09IDEyMylcblx0XHRcdFx0XHRcdFx0aWYgKG9mZnNldCA9PT0gMClcblx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByb290LCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcHJvcHMsIHJ1bGVzZXRzLCBsZW5ndGgsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGF0cnVsZSA9PT0gOTkgJiYgY2hhcmF0KGNoYXJhY3RlcnMsIDMpID09PSAxMTAgPyAxMDAgOiBhdHJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGQgbCBtIHNcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgMTAwOiBjYXNlIDEwODogY2FzZSAxMDk6IGNhc2UgMTE1OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZSh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJ1bGUgJiYgYXBwZW5kKHJ1bGVzZXQodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCAwLCAwLCBydWxlcywgcG9pbnRzLCB0eXBlLCBydWxlcywgcHJvcHMgPSBbXSwgbGVuZ3RoKSwgY2hpbGRyZW4pLCBydWxlcywgY2hpbGRyZW4sIGxlbmd0aCwgcG9pbnRzLCBydWxlID8gcHJvcHMgOiBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIFsnJ10sIGNoaWxkcmVuLCAwLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluZGV4ID0gb2Zmc2V0ID0gcHJvcGVydHkgPSAwLCB2YXJpYWJsZSA9IGFtcGVyc2FuZCA9IDEsIHR5cGUgPSBjaGFyYWN0ZXJzID0gJycsIGxlbmd0aCA9IHBzZXVkb1xuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gOlxuXHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0bGVuZ3RoID0gMSArIHN0cmxlbihjaGFyYWN0ZXJzKSwgcHJvcGVydHkgPSBwcmV2aW91c1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKHZhcmlhYmxlIDwgMSlcblx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09IDEyMylcblx0XHRcdFx0XHRcdC0tdmFyaWFibGVcblx0XHRcdFx0XHRlbHNlIGlmIChjaGFyYWN0ZXIgPT0gMTI1ICYmIHZhcmlhYmxlKysgPT0gMCAmJiBwcmV2KCkgPT0gMTI1KVxuXHRcdFx0XHRcdFx0Y29udGludWVcblxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3RlcnMgKz0gZnJvbShjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIgKiB2YXJpYWJsZSkge1xuXHRcdFx0XHRcdC8vICZcblx0XHRcdFx0XHRjYXNlIDM4OlxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gb2Zmc2V0ID4gMCA/IDEgOiAoY2hhcmFjdGVycyArPSAnXFxmJywgLTEpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vICxcblx0XHRcdFx0XHRjYXNlIDQ0OlxuXHRcdFx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gKHN0cmxlbihjaGFyYWN0ZXJzKSAtIDEpICogYW1wZXJzYW5kLCBhbXBlcnNhbmQgPSAxXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEBcblx0XHRcdFx0XHRjYXNlIDY0OlxuXHRcdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdFx0aWYgKHBlZWsoKSA9PT0gNDUpXG5cdFx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChuZXh0KCkpXG5cblx0XHRcdFx0XHRcdGF0cnVsZSA9IHBlZWsoKSwgb2Zmc2V0ID0gbGVuZ3RoID0gc3RybGVuKHR5cGUgPSBjaGFyYWN0ZXJzICs9IGlkZW50aWZpZXIoY2FyZXQoKSkpLCBjaGFyYWN0ZXIrK1xuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRcdGlmIChwcmV2aW91cyA9PT0gNDUgJiYgc3RybGVuKGNoYXJhY3RlcnMpID09IDIpXG5cdFx0XHRcdFx0XHRcdHZhcmlhYmxlID0gMFxuXHRcdFx0XHR9XG5cdFx0fVxuXG5cdHJldHVybiBydWxlc2V0c1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzZXQgKHZhbHVlLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHZhciBwb3N0ID0gb2Zmc2V0IC0gMVxuXHR2YXIgcnVsZSA9IG9mZnNldCA9PT0gMCA/IHJ1bGVzIDogWycnXVxuXHR2YXIgc2l6ZSA9IHNpemVvZihydWxlKVxuXG5cdGZvciAodmFyIGkgPSAwLCBqID0gMCwgayA9IDA7IGkgPCBpbmRleDsgKytpKVxuXHRcdGZvciAodmFyIHggPSAwLCB5ID0gc3Vic3RyKHZhbHVlLCBwb3N0ICsgMSwgcG9zdCA9IGFicyhqID0gcG9pbnRzW2ldKSksIHogPSB2YWx1ZTsgeCA8IHNpemU7ICsreClcblx0XHRcdGlmICh6ID0gdHJpbShqID4gMCA/IHJ1bGVbeF0gKyAnICcgKyB5IDogcmVwbGFjZSh5LCAvJlxcZi9nLCBydWxlW3hdKSkpXG5cdFx0XHRcdHByb3BzW2srK10gPSB6XG5cblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgb2Zmc2V0ID09PSAwID8gUlVMRVNFVCA6IHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ICh2YWx1ZSwgcm9vdCwgcGFyZW50KSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIENPTU1FTlQsIGZyb20oY2hhcigpKSwgc3Vic3RyKHZhbHVlLCAyLCAtMiksIDApXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBsZW5ndGgpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgREVDTEFSQVRJT04sIHN1YnN0cih2YWx1ZSwgMCwgbGVuZ3RoKSwgc3Vic3RyKHZhbHVlLCBsZW5ndGggKyAxLCAtMSksIGxlbmd0aClcbn1cbiIsICJpbXBvcnQge0lNUE9SVCwgTEFZRVIsIENPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OLCBLRVlGUkFNRVN9IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7c3RybGVuLCBzaXplb2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZSAoY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHZhciBvdXRwdXQgPSAnJ1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNoaWxkcmVuKVxuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0b3V0cHV0ICs9IGNhbGxiYWNrKGNoaWxkcmVuW2ldLCBpLCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0cmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5IChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBMQVlFUjogaWYgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSBicmVha1xuXHRcdGNhc2UgSU1QT1JUOiBjYXNlIERFQ0xBUkFUSU9OOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnJldHVybiB8fCBlbGVtZW50LnZhbHVlXG5cdFx0Y2FzZSBDT01NRU5UOiByZXR1cm4gJydcblx0XHRjYXNlIEtFWUZSQU1FUzogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykgKyAnfSdcblx0XHRjYXNlIFJVTEVTRVQ6IGVsZW1lbnQudmFsdWUgPSBlbGVtZW50LnByb3BzLmpvaW4oJywnKVxuXHR9XG5cblx0cmV0dXJuIHN0cmxlbihjaGlsZHJlbiA9IHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykpID8gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgY2hpbGRyZW4gKyAnfScgOiAnJ1xufVxuIiwgImltcG9ydCB7TVMsIE1PWiwgV0VCS0lULCBSVUxFU0VULCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge21hdGNoLCBjaGFyYXQsIHN1YnN0ciwgc3RybGVuLCBzaXplb2YsIHJlcGxhY2UsIGNvbWJpbmV9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7Y29weSwgdG9rZW5pemV9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuaW1wb3J0IHtzZXJpYWxpemV9IGZyb20gJy4vU2VyaWFsaXplci5qcydcbmltcG9ydCB7cHJlZml4fSBmcm9tICcuL1ByZWZpeGVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb25bXX0gY29sbGVjdGlvblxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWRkbGV3YXJlIChjb2xsZWN0aW9uKSB7XG5cdHZhciBsZW5ndGggPSBzaXplb2YoY29sbGVjdGlvbilcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0XHR2YXIgb3V0cHV0ID0gJydcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRvdXRwdXQgKz0gY29sbGVjdGlvbltpXShlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdFx0cmV0dXJuIG91dHB1dFxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNoZWV0IChjYWxsYmFjaykge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRpZiAoIWVsZW1lbnQucm9vdClcblx0XHRcdGlmIChlbGVtZW50ID0gZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRcdGNhbGxiYWNrKGVsZW1lbnQpXG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVyIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKVxuXHRcdGlmICghZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0XHRjYXNlIERFQ0xBUkFUSU9OOiBlbGVtZW50LnJldHVybiA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCwgY2hpbGRyZW4pXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGNhc2UgS0VZRlJBTUVTOlxuXHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3ZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdFx0XHRpZiAoZWxlbWVudC5sZW5ndGgpXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyA6cmVhZC0ob25seXx3cml0ZSlcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6cmVhZC1vbmx5JzogY2FzZSAnOnJlYWQtd3JpdGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldfSldLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0XHQvLyA6cGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6OnBsYWNlaG9sZGVyJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldfSlcblx0XHRcdFx0XHRcdFx0XHRcdF0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2UgKGVsZW1lbnQpIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRlbGVtZW50LnByb3BzID0gZWxlbWVudC5wcm9wcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBjb21iaW5lKHRva2VuaXplKHZhbHVlKSwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgY2hpbGRyZW4pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgMCkpIHtcblx0XHRcdFx0XHRcdC8vIFxcZlxuXHRcdFx0XHRcdFx0Y2FzZSAxMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YnN0cih2YWx1ZSwgMSwgc3RybGVuKHZhbHVlKSlcblx0XHRcdFx0XHRcdC8vIFxcMCAoICsgPiB+XG5cdFx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgNDA6IGNhc2UgNDM6IGNhc2UgNjI6IGNhc2UgMTI2OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdC8vIDpcblx0XHRcdFx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdFx0XHRcdGlmIChjaGlsZHJlblsrK2luZGV4XSA9PT0gJ2dsb2JhbCcpXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW5baW5kZXhdID0gJycsIGNoaWxkcmVuWysraW5kZXhdID0gJ1xcZicgKyBzdWJzdHIoY2hpbGRyZW5baW5kZXhdLCBpbmRleCA9IDEsIC0xKVxuXHRcdFx0XHRcdFx0Ly8gXFxzXG5cdFx0XHRcdFx0XHRjYXNlIDMyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAwOiBlbGVtZW50ID0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaXplb2YoY2hpbGRyZW4pID4gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRjYXNlIGluZGV4ID0gc2l6ZW9mKGNoaWxkcmVuKSAtIDE6IGNhc2UgMjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMiA/IHZhbHVlICsgZWxlbWVudCArIGVsZW1lbnQgOiB2YWx1ZSArIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXHR9XG59XG4iLCAidmFyIHdlYWtNZW1vaXplID0gZnVuY3Rpb24gd2Vha01lbW9pemUoZnVuYykge1xuICB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgIGlmIChjYWNoZS5oYXMoYXJnKSkge1xuICAgICAgLy8gVXNlIG5vbi1udWxsIGFzc2VydGlvbiBiZWNhdXNlIHdlIGp1c3QgY2hlY2tlZCB0aGF0IHRoZSBjYWNoZSBgaGFzYCBpdFxuICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIGB1bmRlZmluZWRgIGZyb20gdGhlIHJldHVybiB2YWx1ZVxuICAgICAgcmV0dXJuIGNhY2hlLmdldChhcmcpO1xuICAgIH1cblxuICAgIHZhciByZXQgPSBmdW5jKGFyZyk7XG4gICAgY2FjaGUuc2V0KGFyZywgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xufTtcblxuZXhwb3J0IHsgd2Vha01lbW9pemUgYXMgZGVmYXVsdCB9O1xuIiwgImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgbWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCB7IGRlYWxsb2MsIGFsbG9jLCBuZXh0LCB0b2tlbiwgZnJvbSwgcGVlaywgZGVsaW1pdCwgc2xpY2UsIHBvc2l0aW9uLCBSVUxFU0VULCBjb21iaW5lLCBtYXRjaCwgc2VyaWFsaXplLCBjb3B5LCByZXBsYWNlLCBXRUJLSVQsIE1PWiwgTVMsIEtFWUZSQU1FUywgREVDTEFSQVRJT04sIGhhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCBzdHJpbmdpZnksIHJ1bGVzaGVldCwgbWlkZGxld2FyZSwgY29tcGlsZSB9IGZyb20gJ3N0eWxpcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nID0gZnVuY3Rpb24gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKGJlZ2luLCBwb2ludHMsIGluZGV4KSB7XG4gIHZhciBwcmV2aW91cyA9IDA7XG4gIHZhciBjaGFyYWN0ZXIgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcHJldmlvdXMgPSBjaGFyYWN0ZXI7XG4gICAgY2hhcmFjdGVyID0gcGVlaygpOyAvLyAmXFxmXG5cbiAgICBpZiAocHJldmlvdXMgPT09IDM4ICYmIGNoYXJhY3RlciA9PT0gMTIpIHtcbiAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgIH1cblxuICAgIGlmICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH1cblxuICByZXR1cm4gc2xpY2UoYmVnaW4sIHBvc2l0aW9uKTtcbn07XG5cbnZhciB0b1J1bGVzID0gZnVuY3Rpb24gdG9SdWxlcyhwYXJzZWQsIHBvaW50cykge1xuICAvLyBwcmV0ZW5kIHdlJ3ZlIHN0YXJ0ZWQgd2l0aCBhIGNvbW1hXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgY2hhcmFjdGVyID0gNDQ7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAmXFxmXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDM4ICYmIHBlZWsoKSA9PT0gMTIpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIG5vdCAxMDAlIGNvcnJlY3QsIHdlIGRvbid0IGFjY291bnQgZm9yIGxpdGVyYWwgc2VxdWVuY2VzIGhlcmUgLSBsaWtlIGZvciBleGFtcGxlIHF1b3RlZCBzdHJpbmdzXG4gICAgICAgICAgLy8gc3R5bGlzIGluc2VydHMgXFxmIGFmdGVyICYgdG8ga25vdyB3aGVuICYgd2hlcmUgaXQgc2hvdWxkIHJlcGxhY2UgdGhpcyBzZXF1ZW5jZSB3aXRoIHRoZSBjb250ZXh0IHNlbGVjdG9yXG4gICAgICAgICAgLy8gYW5kIHdoZW4gaXQgc2hvdWxkIGp1c3QgY29uY2F0ZW5hdGUgdGhlIG91dGVyIGFuZCBpbm5lciBzZWxlY3RvcnNcbiAgICAgICAgICAvLyBpdCdzIHZlcnkgdW5saWtlbHkgZm9yIHRoaXMgc2VxdWVuY2UgdG8gYWN0dWFsbHkgYXBwZWFyIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIHNvIHdlIGp1c3QgbGV2ZXJhZ2UgdGhpcyBmYWN0IGhlcmVcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKHBvc2l0aW9uIC0gMSwgcG9pbnRzLCBpbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZGVsaW1pdChjaGFyYWN0ZXIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICAvLyBjb21tYVxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSA0NCkge1xuICAgICAgICAgIC8vIGNvbG9uXG4gICAgICAgICAgcGFyc2VkWysraW5kZXhdID0gcGVlaygpID09PSA1OCA/ICcmXFxmJyA6ICcnO1xuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSBwYXJzZWRbaW5kZXhdLmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGZyb20oY2hhcmFjdGVyKTtcbiAgICB9XG4gIH0gd2hpbGUgKGNoYXJhY3RlciA9IG5leHQoKSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbnZhciBnZXRSdWxlcyA9IGZ1bmN0aW9uIGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpIHtcbiAgcmV0dXJuIGRlYWxsb2ModG9SdWxlcyhhbGxvYyh2YWx1ZSksIHBvaW50cykpO1xufTsgLy8gV2Vha1NldCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBidXQgb25seSBXZWFrTWFwIGlzIHN1cHBvcnRlZCBpbiBJRTExXG5cblxudmFyIGZpeGVkRWxlbWVudHMgPSAvKiAjX19QVVJFX18gKi9uZXcgV2Vha01hcCgpO1xudmFyIGNvbXBhdCA9IGZ1bmN0aW9uIGNvbXBhdChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCAhZWxlbWVudC5wYXJlbnQgfHwgLy8gcG9zaXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgY29udGFpbnMgcHNldWRvXG4gIC8vIG5lZ2F0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGhhcyBiZWVuIGFscmVhZHkgcHJlZml4ZWRcbiAgZWxlbWVudC5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZSxcbiAgICAgIHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICB2YXIgaXNJbXBsaWNpdFJ1bGUgPSBlbGVtZW50LmNvbHVtbiA9PT0gcGFyZW50LmNvbHVtbiAmJiBlbGVtZW50LmxpbmUgPT09IHBhcmVudC5saW5lO1xuXG4gIHdoaWxlIChwYXJlbnQudHlwZSAhPT0gJ3J1bGUnKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICB9IC8vIHNob3J0LWNpcmN1aXQgZm9yIHRoZSBzaW1wbGVzdCBjYXNlXG5cblxuICBpZiAoZWxlbWVudC5wcm9wcy5sZW5ndGggPT09IDEgJiYgdmFsdWUuY2hhckNvZGVBdCgwKSAhPT0gNThcbiAgLyogY29sb24gKi9cbiAgJiYgIWZpeGVkRWxlbWVudHMuZ2V0KHBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gaWYgdGhpcyBpcyBhbiBpbXBsaWNpdGx5IGluc2VydGVkIHJ1bGUgKHRoZSBvbmUgZWFnZXJseSBpbnNlcnRlZCBhdCB0aGUgZWFjaCBuZXcgbmVzdGVkIGxldmVsKVxuICAvLyB0aGVuIHRoZSBwcm9wcyBoYXMgYWxyZWFkeSBiZWVuIG1hbmlwdWxhdGVkIGJlZm9yZWhhbmQgYXMgdGhleSB0aGF0IGFycmF5IGlzIHNoYXJlZCBiZXR3ZWVuIGl0IGFuZCBpdHMgXCJydWxlIHBhcmVudFwiXG5cblxuICBpZiAoaXNJbXBsaWNpdFJ1bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaXhlZEVsZW1lbnRzLnNldChlbGVtZW50LCB0cnVlKTtcbiAgdmFyIHBvaW50cyA9IFtdO1xuICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKTtcbiAgdmFyIHBhcmVudFJ1bGVzID0gcGFyZW50LnByb3BzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJlbnRSdWxlcy5sZW5ndGg7IGorKywgaysrKSB7XG4gICAgICBlbGVtZW50LnByb3BzW2tdID0gcG9pbnRzW2ldID8gcnVsZXNbaV0ucmVwbGFjZSgvJlxcZi9nLCBwYXJlbnRSdWxlc1tqXSkgOiBwYXJlbnRSdWxlc1tqXSArIFwiIFwiICsgcnVsZXNbaV07XG4gICAgfVxuICB9XG59O1xudmFyIHJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnZGVjbCcpIHtcbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCAvLyBjaGFyY29kZSBmb3IgbFxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDEwOCAmJiAvLyBjaGFyY29kZSBmb3IgYlxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMikgPT09IDk4KSB7XG4gICAgICAvLyB0aGlzIGlnbm9yZXMgbGFiZWxcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgICAgIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWZhbGx0aHJvdWdoICovXG5cbmZ1bmN0aW9uIHByZWZpeCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuICAgIC8vIGNvbG9yLWFkanVzdFxuICAgIGNhc2UgNTEwMzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAncHJpbnQtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cbiAgICBjYXNlIDU3Mzc6XG4gICAgY2FzZSA0MjAxOlxuICAgIGNhc2UgMzE3NzpcbiAgICBjYXNlIDM0MzM6XG4gICAgY2FzZSAxNjQxOlxuICAgIGNhc2UgNDQ1NzpcbiAgICBjYXNlIDI5MjE6IC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblxuICAgIGNhc2UgNTU3MjpcbiAgICBjYXNlIDYzNTY6XG4gICAgY2FzZSA1ODQ0OlxuICAgIGNhc2UgMzE5MTpcbiAgICBjYXNlIDY2NDU6XG4gICAgY2FzZSAzMDA1OiAvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblxuICAgIGNhc2UgNjM5MTpcbiAgICBjYXNlIDU4Nzk6XG4gICAgY2FzZSA1NjIzOlxuICAgIGNhc2UgNjEzNTpcbiAgICBjYXNlIDQ1OTk6XG4gICAgY2FzZSA0ODU1OiAvLyBiYWNrZ3JvdW5kLWNsaXAsIGNvbHVtbnMsIGNvbHVtbi0oY291bnR8ZmlsbHxnYXB8cnVsZXxydWxlLWNvbG9yfHJ1bGUtc3R5bGV8cnVsZS13aWR0aHxzcGFufHdpZHRoKVxuXG4gICAgY2FzZSA0MjE1OlxuICAgIGNhc2UgNjM4OTpcbiAgICBjYXNlIDUxMDk6XG4gICAgY2FzZSA1MzY1OlxuICAgIGNhc2UgNTYyMTpcbiAgICBjYXNlIDM4Mjk6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhcHBlYXJhbmNlLCB1c2VyLXNlbGVjdCwgdHJhbnNmb3JtLCBoeXBoZW5zLCB0ZXh0LXNpemUtYWRqdXN0XG5cbiAgICBjYXNlIDUzNDk6XG4gICAgY2FzZSA0MjQ2OlxuICAgIGNhc2UgNDgxMDpcbiAgICBjYXNlIDY5Njg6XG4gICAgY2FzZSAyNzU2OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gZmxleCwgZmxleC1kaXJlY3Rpb25cblxuICAgIGNhc2UgNjgyODpcbiAgICBjYXNlIDQyNjg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gb3JkZXJcblxuICAgIGNhc2UgNjE2NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYWxpZ24taXRlbXNcblxuICAgIGNhc2UgNTE4NzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHJlcGxhY2UodmFsdWUsIC8oXFx3KykuKyg6W15dKykvLCBXRUJLSVQgKyAnYm94LSQxJDInICsgTVMgKyAnZmxleC0kMSQyJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1zZWxmXG5cbiAgICBjYXNlIDU0NDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWl0ZW0tJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWNvbnRlbnRcblxuICAgIGNhc2UgNDY3NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gZmxleC1zaHJpbmtcblxuICAgIGNhc2UgNTU0ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3NocmluaycsICduZWdhdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1iYXNpc1xuXG4gICAgY2FzZSA1MjkyOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtZ3Jvd1xuXG4gICAgY2FzZSA2MDYwOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdib3gtJyArIHJlcGxhY2UodmFsdWUsICctZ3JvdycsICcnKSArIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnZ3JvdycsICdwb3NpdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gdHJhbnNpdGlvblxuXG4gICAgY2FzZSA0NTU0OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHJlcGxhY2UodmFsdWUsIC8oW14tXSkodHJhbnNmb3JtKS9nLCAnJDEnICsgV0VCS0lUICsgJyQyJykgKyB2YWx1ZTtcbiAgICAvLyBjdXJzb3JcblxuICAgIGNhc2UgNjE4NzpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyh6b29tLXxncmFiKS8sIFdFQktJVCArICckMScpLCAvKGltYWdlLXNldCkvLCBXRUJLSVQgKyAnJDEnKSwgdmFsdWUsICcnKSArIHZhbHVlO1xuICAgIC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2VcblxuICAgIGNhc2UgNTQ5NTpcbiAgICBjYXNlIDM5NTk6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpO1xuICAgIC8vIGp1c3RpZnktY29udGVudFxuXG4gICAgY2FzZSA0OTY4OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cbiAgICBjYXNlIDQwOTU6XG4gICAgY2FzZSAzNTgzOlxuICAgIGNhc2UgNDA2ODpcbiAgICBjYXNlIDI1MzI6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZTtcbiAgICAvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXG4gICAgY2FzZSA4MTE2OlxuICAgIGNhc2UgNzA1OTpcbiAgICBjYXNlIDU3NTM6XG4gICAgY2FzZSA1NTM1OlxuICAgIGNhc2UgNTQ0NTpcbiAgICBjYXNlIDU3MDE6XG4gICAgY2FzZSA0OTMzOlxuICAgIGNhc2UgNDY3NzpcbiAgICBjYXNlIDU1MzM6XG4gICAgY2FzZSA1Nzg5OlxuICAgIGNhc2UgNTAyMTpcbiAgICBjYXNlIDQ3NjU6XG4gICAgICAvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG4gICAgICBpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KSBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcbiAgICAgICAgLy8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAvLyAtXG4gICAgICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KSBicmVhaztcbiAgICAgICAgLy8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXG4gICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKHMpdHJldGNoXG5cbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgcmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgLy8gcG9zaXRpb246IHN0aWNreVxuXG4gICAgY2FzZSA0OTQ5OlxuICAgICAgLy8gKHMpdGlja3k/XG4gICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSAhPT0gMTE1KSBicmVhaztcbiAgICAvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleClcblxuICAgIGNhc2UgNjQ0NDpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBzdHJsZW4odmFsdWUpIC0gMyAtICh+aW5kZXhvZih2YWx1ZSwgJyFpbXBvcnRhbnQnKSAmJiAxMCkpKSB7XG4gICAgICAgIC8vIHN0aWMoayl5XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKGlubGluZS0pP2ZsKGUpeFxuXG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147IV0rKSg7fCEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgLy8gd3JpdGluZy1tb2RlXG5cbiAgICBjYXNlIDU5MzY6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG4gICAgICAgIC8vIHZlcnRpY2FsLWwocilcbiAgICAgICAgY2FzZSAxMTQ6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWU7XG4gICAgICAgIC8vIHZlcnRpY2FsLXIobClcblxuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCgtKXRiXG5cbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgcHJlZml4ZXIgPSBmdW5jdGlvbiBwcmVmaXhlcihlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG4gIGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKSBpZiAoIWVsZW1lbnRbXCJyZXR1cm5cIl0pIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBERUNMQVJBVElPTjpcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEtFWUZSQU1FUzpcbiAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICB2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVClcbiAgICAgIH0pXSwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSBSVUxFU0VUOlxuICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoKSByZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcbiAgICAgICAgICAvLyA6cmVhZC0ob25seXx3cml0ZSlcbiAgICAgICAgICBjYXNlICc6cmVhZC1vbmx5JzpcbiAgICAgICAgICBjYXNlICc6cmVhZC13cml0ZSc6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAvLyA6cGxhY2Vob2xkZXJcblxuICAgICAgICAgIGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSk7XG4gIH1cbn07XG5cbnZhciBkZWZhdWx0U3R5bGlzUGx1Z2lucyA9IFtwcmVmaXhlcl07XG5cbnZhciBjcmVhdGVDYWNoZSA9IGZ1bmN0aW9uXG4gIC8qOiBFbW90aW9uQ2FjaGUgKi9cbmNyZWF0ZUNhY2hlKG9wdGlvbnNcbi8qOiBPcHRpb25zICovXG4pIHtcbiAgdmFyIGtleSA9IG9wdGlvbnMua2V5O1xuXG4gIGlmIChrZXkgPT09ICdjc3MnKSB7XG4gICAgdmFyIHNzclN0eWxlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb25dOm5vdChbZGF0YS1zXSlcIik7IC8vIGdldCBTU1JlZCBzdHlsZXMgb3V0IG9mIHRoZSB3YXkgb2YgUmVhY3QncyBoeWRyYXRpb25cbiAgICAvLyBkb2N1bWVudC5oZWFkIGlzIGEgc2FmZSBwbGFjZSB0byBtb3ZlIHRoZW0gdG8odGhvdWdoIG5vdGUgZG9jdW1lbnQuaGVhZCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGxhc3QgcGxhY2UgdGhleSB3aWxsIGJlKVxuICAgIC8vIG5vdGUgdGhpcyB2ZXJ5IHZlcnkgaW50ZW50aW9uYWxseSB0YXJnZXRzIGFsbCBzdHlsZSBlbGVtZW50cyByZWdhcmRsZXNzIG9mIHRoZSBrZXkgdG8gZW5zdXJlXG4gICAgLy8gdGhhdCBjcmVhdGluZyBhIGNhY2hlIHdvcmtzIGluc2lkZSBvZiByZW5kZXIgb2YgYSBSZWFjdCBjb21wb25lbnRcblxuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoc3NyU3R5bGVzLCBmdW5jdGlvbiAobm9kZVxuICAgIC8qOiBIVE1MU3R5bGVFbGVtZW50ICovXG4gICAgKSB7XG4gICAgICAvLyB3ZSB3YW50IHRvIG9ubHkgbW92ZSBlbGVtZW50cyB3aGljaCBoYXZlIGEgc3BhY2UgaW4gdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgIC8vIGJlY2F1c2UgdGhhdCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBhbiBFbW90aW9uIDExIHNlcnZlci1zaWRlIHJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgICAvLyB3aGlsZSB3ZSB3aWxsIGFscmVhZHkgaWdub3JlIEVtb3Rpb24gMTEgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGJlY2F1c2Ugb2YgdGhlIDpub3QoW2RhdGEtc10pIHBhcnQgaW4gdGhlIHNlbGVjdG9yXG4gICAgICAvLyBFbW90aW9uIDEwIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBkaWQgbm90IGhhdmUgZGF0YS1zIChidXQgaW1wb3J0YW50bHkgZGlkIG5vdCBoYXZlIGEgc3BhY2UgaW4gdGhlaXIgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZXMpXG4gICAgICAvLyBzbyBjaGVja2luZyBmb3IgdGhlIHNwYWNlIGVuc3VyZXMgdGhhdCBsb2FkaW5nIEVtb3Rpb24gMTEgYWZ0ZXIgRW1vdGlvbiAxMCBoYXMgaW5zZXJ0ZWQgc29tZSBzdHlsZXNcbiAgICAgIC8vIHdpbGwgbm90IHJlc3VsdCBpbiB0aGUgRW1vdGlvbiAxMCBzdHlsZXMgYmVpbmcgZGVzdHJveWVkXG4gICAgICB2YXIgZGF0YUVtb3Rpb25BdHRyaWJ1dGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJyk7XG5cbiAgICAgIGlmIChkYXRhRW1vdGlvbkF0dHJpYnV0ZS5pbmRleE9mKCcgJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICB2YXIgaW5zZXJ0ZWQgPSB7fTtcbiAgdmFyIGNvbnRhaW5lcjtcbiAgLyogOiBOb2RlICovXG5cbiAgdmFyIG5vZGVzVG9IeWRyYXRlID0gW107XG5cbiAge1xuICAgIGNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyIHx8IGRvY3VtZW50LmhlYWQ7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCggLy8gdGhpcyBtZWFucyB3ZSB3aWxsIGlnbm9yZSBlbGVtZW50cyB3aGljaCBkb24ndCBoYXZlIGEgc3BhY2UgaW4gdGhlbSB3aGljaFxuICAgIC8vIG1lYW5zIHRoYXQgdGhlIHN0eWxlIGVsZW1lbnRzIHdlJ3JlIGxvb2tpbmcgYXQgYXJlIG9ubHkgRW1vdGlvbiAxMSBzZXJ2ZXItcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXj1cXFwiXCIgKyBrZXkgKyBcIiBcXFwiXVwiKSwgZnVuY3Rpb24gKG5vZGVcbiAgICAvKjogSFRNTFN0eWxlRWxlbWVudCAqL1xuICAgICkge1xuICAgICAgdmFyIGF0dHJpYiA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1lbW90aW9uXCIpLnNwbGl0KCcgJyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXR0cmliLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGluc2VydGVkW2F0dHJpYltpXV0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBub2Rlc1RvSHlkcmF0ZS5wdXNoKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIF9pbnNlcnQ7XG4gIC8qOiAoXG4gIHNlbGVjdG9yOiBzdHJpbmcsXG4gIHNlcmlhbGl6ZWQ6IFNlcmlhbGl6ZWRTdHlsZXMsXG4gIHNoZWV0OiBTdHlsZVNoZWV0LFxuICBzaG91bGRDYWNoZTogYm9vbGVhblxuICApID0+IHN0cmluZyB8IHZvaWQgKi9cblxuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAge1xuICAgIHZhciBjdXJyZW50U2hlZXQ7XG4gICAgdmFyIGZpbmFsaXppbmdQbHVnaW5zID0gW3N0cmluZ2lmeSwgcnVsZXNoZWV0KGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KHJ1bGUpO1xuICAgIH0pXTtcbiAgICB2YXIgc2VyaWFsaXplciA9IG1pZGRsZXdhcmUob21uaXByZXNlbnRQbHVnaW5zLmNvbmNhdChzdHlsaXNQbHVnaW5zLCBmaW5hbGl6aW5nUGx1Z2lucykpO1xuXG4gICAgdmFyIHN0eWxpcyA9IGZ1bmN0aW9uIHN0eWxpcyhzdHlsZXMpIHtcbiAgICAgIHJldHVybiBzZXJpYWxpemUoY29tcGlsZShzdHlsZXMpLCBzZXJpYWxpemVyKTtcbiAgICB9O1xuXG4gICAgX2luc2VydCA9IGZ1bmN0aW9uXG4gICAgICAvKjogdm9pZCAqL1xuICAgIGluc2VydChzZWxlY3RvclxuICAgIC8qOiBzdHJpbmcgKi9cbiAgICAsIHNlcmlhbGl6ZWRcbiAgICAvKjogU2VyaWFsaXplZFN0eWxlcyAqL1xuICAgICwgc2hlZXRcbiAgICAvKjogU3R5bGVTaGVldCAqL1xuICAgICwgc2hvdWxkQ2FjaGVcbiAgICAvKjogYm9vbGVhbiAqL1xuICAgICkge1xuICAgICAgY3VycmVudFNoZWV0ID0gc2hlZXQ7XG5cbiAgICAgIHN0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBjYWNoZVxuICAvKjogRW1vdGlvbkNhY2hlICovXG4gID0ge1xuICAgIGtleToga2V5LFxuICAgIHNoZWV0OiBuZXcgU3R5bGVTaGVldCh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgICBzcGVlZHk6IG9wdGlvbnMuc3BlZWR5LFxuICAgICAgcHJlcGVuZDogb3B0aW9ucy5wcmVwZW5kLFxuICAgICAgaW5zZXJ0aW9uUG9pbnQ6IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnRcbiAgICB9KSxcbiAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICBpbnNlcnRlZDogaW5zZXJ0ZWQsXG4gICAgcmVnaXN0ZXJlZDoge30sXG4gICAgaW5zZXJ0OiBfaW5zZXJ0XG4gIH07XG4gIGNhY2hlLnNoZWV0Lmh5ZHJhdGUobm9kZXNUb0h5ZHJhdGUpO1xuICByZXR1cm4gY2FjaGU7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVDYWNoZSBhcyBkZWZhdWx0IH07XG4iLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7XG4gICAgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHtcbiAgICAgIHZhciB0ID0gYXJndW1lbnRzW2VdO1xuICAgICAgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5leHBvcnQgeyBfZXh0ZW5kcyBhcyBkZWZhdWx0IH07IiwgInZhciBpc0Jyb3dzZXIgPSB0cnVlO1xuXG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZXMpIHtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9ICcnO1xuICBjbGFzc05hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgaWYgKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWdpc3RlcmVkU3R5bGVzLnB1c2gocmVnaXN0ZXJlZFtjbGFzc05hbWVdICsgXCI7XCIpO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICByYXdDbGFzc05hbWUgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJhd0NsYXNzTmFtZTtcbn1cbnZhciByZWdpc3RlclN0eWxlcyA9IGZ1bmN0aW9uIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKCAvLyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgaWYgdGhlXG4gIC8vIGNsYXNzIG5hbWUgY291bGQgYmUgdXNlZCBmdXJ0aGVyIGRvd25cbiAgLy8gdGhlIHRyZWUgYnV0IGlmIGl0J3MgYSBzdHJpbmcgdGFnLCB3ZSBrbm93IGl0IHdvbid0XG4gIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gYWRkIGl0IHRvIHJlZ2lzdGVyZWQgY2FjaGUuXG4gIC8vIHRoaXMgaW1wcm92ZXMgbWVtb3J5IHVzYWdlIHNpbmNlIHdlIGNhbiBhdm9pZCBzdG9yaW5nIHRoZSB3aG9sZSBzdHlsZSBzdHJpbmdcbiAgKGlzU3RyaW5nVGFnID09PSBmYWxzZSB8fCAvLyB3ZSBuZWVkIHRvIGFsd2F5cyBzdG9yZSBpdCBpZiB3ZSdyZSBpbiBjb21wYXQgbW9kZSBhbmRcbiAgLy8gaW4gbm9kZSBzaW5jZSBlbW90aW9uLXNlcnZlciByZWxpZXMgb24gd2hldGhlciBhIHN0eWxlIGlzIGluXG4gIC8vIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIGtub3cgd2hldGhlciBhIHN0eWxlIGlzIGdsb2JhbCBvciBub3RcbiAgLy8gYWxzbywgbm90ZSB0aGF0IHRoaXMgY2hlY2sgd2lsbCBiZSBkZWFkIGNvZGUgZWxpbWluYXRlZCBpbiB0aGUgYnJvd3NlclxuICBpc0Jyb3dzZXIgPT09IGZhbHNlICkgJiYgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPSBzZXJpYWxpemVkLnN0eWxlcztcbiAgfVxufTtcbnZhciBpbnNlcnRTdHlsZXMgPSBmdW5jdGlvbiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBzZXJpYWxpemVkO1xuXG4gICAgZG8ge1xuICAgICAgY2FjaGUuaW5zZXJ0KHNlcmlhbGl6ZWQgPT09IGN1cnJlbnQgPyBcIi5cIiArIGNsYXNzTmFtZSA6ICcnLCBjdXJyZW50LCBjYWNoZS5zaGVldCwgdHJ1ZSk7XG5cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgfSB3aGlsZSAoY3VycmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaW5zZXJ0U3R5bGVzLCByZWdpc3RlclN0eWxlcyB9O1xuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L211cm11cmhhc2gtanNcbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hYXBwbGVieS9zbWhhc2hlci9ibG9iLzYxYTA1MzBmMjgyNzdmMmU4NTBiZmMzOTYwMGNlNjFkMDJiNTE4ZGUvc3JjL011cm11ckhhc2gyLmNwcCNMMzctTDg2XG5mdW5jdGlvbiBtdXJtdXIyKHN0cikge1xuICAvLyAnbScgYW5kICdyJyBhcmUgbWl4aW5nIGNvbnN0YW50cyBnZW5lcmF0ZWQgb2ZmbGluZS5cbiAgLy8gVGhleSdyZSBub3QgcmVhbGx5ICdtYWdpYycsIHRoZXkganVzdCBoYXBwZW4gdG8gd29yayB3ZWxsLlxuICAvLyBjb25zdCBtID0gMHg1YmQxZTk5NTtcbiAgLy8gY29uc3QgciA9IDI0O1xuICAvLyBJbml0aWFsaXplIHRoZSBoYXNoXG4gIHZhciBoID0gMDsgLy8gTWl4IDQgYnl0ZXMgYXQgYSB0aW1lIGludG8gdGhlIGhhc2hcblxuICB2YXIgayxcbiAgICAgIGkgPSAwLFxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcblxuICBmb3IgKDsgbGVuID49IDQ7ICsraSwgbGVuIC09IDQpIHtcbiAgICBrID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmIHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQ7XG4gICAgayA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gICAgayBePVxuICAgIC8qIGsgPj4+IHI6ICovXG4gICAgayA+Pj4gMjQ7XG4gICAgaCA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNikgXlxuICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIEhhbmRsZSB0aGUgbGFzdCBmZXcgYnl0ZXMgb2YgdGhlIGlucHV0IGFycmF5XG5cblxuICBzd2l0Y2ggKGxlbikge1xuICAgIGNhc2UgMzpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuXG4gICAgY2FzZSAyOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcblxuICAgIGNhc2UgMTpcbiAgICAgIGggXj0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICAgICAgaCA9XG4gICAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIERvIGEgZmV3IGZpbmFsIG1peGVzIG9mIHRoZSBoYXNoIHRvIGVuc3VyZSB0aGUgbGFzdCBmZXdcbiAgLy8gYnl0ZXMgYXJlIHdlbGwtaW5jb3Jwb3JhdGVkLlxuXG5cbiAgaCBePSBoID4+PiAxMztcbiAgaCA9XG4gIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgcmV0dXJuICgoaCBeIGggPj4+IDE1KSA+Pj4gMCkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgeyBtdXJtdXIyIGFzIGRlZmF1bHQgfTtcbiIsICJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYXNwZWN0UmF0aW86IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBtc0dyaWRSb3c6IDEsXG4gIG1zR3JpZFJvd1NwYW46IDEsXG4gIG1zR3JpZENvbHVtbjogMSxcbiAgbXNHcmlkQ29sdW1uU3BhbjogMSxcbiAgZm9udFdlaWdodDogMSxcbiAgbGluZUhlaWdodDogMSxcbiAgb3BhY2l0eTogMSxcbiAgb3JkZXI6IDEsXG4gIG9ycGhhbnM6IDEsXG4gIHNjYWxlOiAxLFxuICB0YWJTaXplOiAxLFxuICB3aWRvd3M6IDEsXG4gIHpJbmRleDogMSxcbiAgem9vbTogMSxcbiAgV2Via2l0TGluZUNsYW1wOiAxLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiAxLFxuICBmbG9vZE9wYWNpdHk6IDEsXG4gIHN0b3BPcGFjaXR5OiAxLFxuICBzdHJva2VEYXNoYXJyYXk6IDEsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDEsXG4gIHN0cm9rZU1pdGVybGltaXQ6IDEsXG4gIHN0cm9rZU9wYWNpdHk6IDEsXG4gIHN0cm9rZVdpZHRoOiAxXG59O1xuXG5leHBvcnQgeyB1bml0bGVzc0tleXMgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCBoYXNoU3RyaW5nIGZyb20gJ0BlbW90aW9uL2hhc2gnO1xuaW1wb3J0IHVuaXRsZXNzIGZyb20gJ0BlbW90aW9uL3VuaXRsZXNzJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG52YXIgaHlwaGVuYXRlUmVnZXggPSAvW0EtWl18Xm1zL2c7XG52YXIgYW5pbWF0aW9uUmVnZXggPSAvX0VNT18oW15fXSs/KV8oW15dKj8pX0VNT18vZztcblxudmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBmdW5jdGlvbiBpc0N1c3RvbVByb3BlcnR5KHByb3BlcnR5KSB7XG4gIHJldHVybiBwcm9wZXJ0eS5jaGFyQ29kZUF0KDEpID09PSA0NTtcbn07XG5cbnZhciBpc1Byb2Nlc3NhYmxlVmFsdWUgPSBmdW5jdGlvbiBpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbic7XG59O1xuXG52YXIgcHJvY2Vzc1N0eWxlTmFtZSA9IC8qICNfX1BVUkVfXyAqL21lbW9pemUoZnVuY3Rpb24gKHN0eWxlTmFtZSkge1xuICByZXR1cm4gaXNDdXN0b21Qcm9wZXJ0eShzdHlsZU5hbWUpID8gc3R5bGVOYW1lIDogc3R5bGVOYW1lLnJlcGxhY2UoaHlwaGVuYXRlUmVnZXgsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbnZhciBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdhbmltYXRpb24nOlxuICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKGFuaW1hdGlvblJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHAxLCBwMikge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICBuYW1lOiBwMSxcbiAgICAgICAgICAgICAgc3R5bGVzOiBwMixcbiAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHAxO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBpZiAodW5pdGxlc3Nba2V5XSAhPT0gMSAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxudmFyIG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlID0gJ0NvbXBvbmVudCBzZWxlY3RvcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICcgKyAnQGVtb3Rpb24vYmFiZWwtcGx1Z2luLCB0aGUgc3djIEVtb3Rpb24gcGx1Z2luLCBvciBhbm90aGVyIEVtb3Rpb24tYXdhcmUgJyArICdjb21waWxlciB0cmFuc2Zvcm0uJztcblxuZnVuY3Rpb24gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbikge1xuICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdmFyIGNvbXBvbmVudFNlbGVjdG9yID0gaW50ZXJwb2xhdGlvbjtcblxuICBpZiAoY29tcG9uZW50U2VsZWN0b3IuX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICByZXR1cm4gY29tcG9uZW50U2VsZWN0b3I7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGVvZiBpbnRlcnBvbGF0aW9uKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB7XG4gICAgICAgIHZhciBrZXlmcmFtZXMgPSBpbnRlcnBvbGF0aW9uO1xuXG4gICAgICAgIGlmIChrZXlmcmFtZXMuYW5pbSA9PT0gMSkge1xuICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGtleWZyYW1lcy5uYW1lLFxuICAgICAgICAgICAgc3R5bGVzOiBrZXlmcmFtZXMuc3R5bGVzLFxuICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ga2V5ZnJhbWVzLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2VyaWFsaXplZFN0eWxlcyA9IGludGVycG9sYXRpb247XG5cbiAgICAgICAgaWYgKHNlcmlhbGl6ZWRTdHlsZXMuc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IHNlcmlhbGl6ZWRTdHlsZXMubmV4dDtcblxuICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbW9zdCBlZmZpY2llbnQgdGhpbmcgZXZlciBidXQgdGhpcyBpcyBhIHByZXR0eSByYXJlIGNhc2VcbiAgICAgICAgICAgIC8vIGFuZCB0aGVyZSB3aWxsIGJlIHZlcnkgZmV3IGl0ZXJhdGlvbnMgb2YgdGhpcyBnZW5lcmFsbHlcbiAgICAgICAgICAgIHdoaWxlIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IG5leHQubmFtZSxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IG5leHQuc3R5bGVzLFxuICAgICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzdHlsZXMgPSBzZXJpYWxpemVkU3R5bGVzLnN0eWxlcyArIFwiO1wiO1xuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbik7XG4gICAgICB9XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIGlmIChtZXJnZWRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzQ3Vyc29yID0gY3Vyc29yO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzKTtcbiAgICAgICAgICBjdXJzb3IgPSBwcmV2aW91c0N1cnNvcjtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIHZhciBhc1N0cmluZyA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKHJlZ2lzdGVyZWQgPT0gbnVsbCkge1xuICAgIHJldHVybiBhc1N0cmluZztcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2FzU3RyaW5nXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogYXNTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9iaikge1xuICB2YXIgc3RyaW5nID0gJyc7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHJpbmcgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqW2ldKSArIFwiO1wiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGFzU3RyaW5nID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW2FzU3RyaW5nXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGtleSArIFwie1wiICsgcmVnaXN0ZXJlZFthc1N0cmluZ10gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUoYXNTdHJpbmcpKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCBhc1N0cmluZykgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyAmJiAocmVnaXN0ZXJlZCA9PSBudWxsIHx8IHJlZ2lzdGVyZWRbdmFsdWVbMF1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHZhbHVlLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZVtfaV0pKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBrZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO3tdKylcXHMqKDt8JCkvZzsgLy8gdGhpcyBpcyB0aGUgY3Vyc29yIGZvciBrZXlmcmFtZXNcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cbnZhciBjdXJzb3I7XG5mdW5jdGlvbiBzZXJpYWxpemVTdHlsZXMoYXJncywgcmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgdmFyIHN0eWxlcyA9ICcnO1xuICBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gIHZhciBzdHJpbmdzID0gYXJnc1swXTtcblxuICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHJpbmdNb2RlID0gZmFsc2U7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHN0cmluZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBhc1RlbXBsYXRlU3RyaW5nc0FyciA9IHN0cmluZ3M7XG5cbiAgICBzdHlsZXMgKz0gYXNUZW1wbGF0ZVN0cmluZ3NBcnJbMF07XG4gIH0gLy8gd2Ugc3RhcnQgYXQgMSBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGZpcnN0IGFyZ1xuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGFyZ3NbaV0pO1xuXG4gICAgaWYgKHN0cmluZ01vZGUpIHtcbiAgICAgIHZhciB0ZW1wbGF0ZVN0cmluZ3NBcnIgPSBzdHJpbmdzO1xuXG4gICAgICBzdHlsZXMgKz0gdGVtcGxhdGVTdHJpbmdzQXJyW2ldO1xuICAgIH1cbiAgfSAvLyB1c2luZyBhIGdsb2JhbCByZWdleCB3aXRoIC5leGVjIGlzIHN0YXRlZnVsIHNvIGxhc3RJbmRleCBoYXMgdG8gYmUgcmVzZXQgZWFjaCB0aW1lXG5cblxuICBsYWJlbFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG4gIHZhciBtYXRjaDsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YjgwOWMyY2YyOTQ5ODAwYTBmNjFmYjVcblxuICB3aGlsZSAoKG1hdGNoID0gbGFiZWxQYXR0ZXJuLmV4ZWMoc3R5bGVzKSkgIT09IG51bGwpIHtcbiAgICBpZGVudGlmaWVyTmFtZSArPSAnLScgKyBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufVxuXG5leHBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnZhciBzeW5jRmFsbGJhY2sgPSBmdW5jdGlvbiBzeW5jRmFsbGJhY2soY3JlYXRlKSB7XG4gIHJldHVybiBjcmVhdGUoKTtcbn07XG5cbnZhciB1c2VJbnNlcnRpb25FZmZlY3QgPSBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA/IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddIDogZmFsc2U7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBzeW5jRmFsbGJhY2s7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrID0gdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IFJlYWN0LnVzZUxheW91dEVmZmVjdDtcblxuZXhwb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrIH07XG4iLCAiaW1wb3J0IHsgaCBhcyBoYXNPd24sIEUgYXMgRW1vdGlvbiwgYyBhcyBjcmVhdGVFbW90aW9uUHJvcHMsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgVCBhcyBUaGVtZUNvbnRleHQsIGkgYXMgaXNEZXZlbG9wbWVudCB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTU0ODZjNTFjLmJyb3dzZXIuZXNtLmpzJztcbmV4cG9ydCB7IEMgYXMgQ2FjaGVQcm92aWRlciwgVCBhcyBUaGVtZUNvbnRleHQsIGEgYXMgVGhlbWVQcm92aWRlciwgXyBhcyBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUsIHUgYXMgdXNlVGhlbWUsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgYiBhcyB3aXRoVGhlbWUgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC01NDg2YzUxYy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBnZXRSZWdpc3RlcmVkU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5cbnZhciBqc3hcbi8qOiB0eXBlb2YgUmVhY3QuY3JlYXRlRWxlbWVudCAqL1xuPSBmdW5jdGlvbiBqc3hcbi8qOiB0eXBlb2YgUmVhY3QuY3JlYXRlRWxlbWVudCAqL1xuKHR5cGVcbi8qOiBSZWFjdC5FbGVtZW50VHlwZSAqL1xuLCBwcm9wc1xuLyo6IE9iamVjdCAqL1xuKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG4gIGlmIChwcm9wcyA9PSBudWxsIHx8ICFoYXNPd24uY2FsbChwcm9wcywgJ2NzcycpKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkobnVsbCwgY3JlYXRlRWxlbWVudEFyZ0FycmF5KTtcbn07XG5cbi8vIGluaXRpYWwgcmVuZGVyIGZyb20gYnJvd3NlciwgaW5zZXJ0QmVmb3JlIGNvbnRleHQuc2hlZXQudGFnc1swXSBvciBpZiBhIHN0eWxlIGhhc24ndCBiZWVuIGluc2VydGVkIHRoZXJlIHlldCwgYXBwZW5kQ2hpbGRcbi8vIGluaXRpYWwgY2xpZW50LXNpZGUgcmVuZGVyIGZyb20gU1NSLCB1c2UgcGxhY2Ugb2YgaHlkcmF0aW5nIHRhZ1xuXG52YXIgR2xvYmFsXG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8XG5HbG9iYWxQcm9wc1xuPiAqL1xuPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wc1xuLyo6IEdsb2JhbFByb3BzICovXG4sIGNhY2hlKSB7XG5cbiAgdmFyIHN0eWxlcyA9IHByb3BzLnN0eWxlcztcbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoW3N0eWxlc10sIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcbiAgLy8gYnV0IGl0IGlzIGJhc2VkIG9uIGEgY29uc3RhbnQgdGhhdCB3aWxsIG5ldmVyIGNoYW5nZSBhdCBydW50aW1lXG4gIC8vIGl0J3MgZWZmZWN0aXZlbHkgbGlrZSBoYXZpbmcgdHdvIGltcGxlbWVudGF0aW9ucyBhbmQgc3dpdGNoaW5nIHRoZW0gb3V0XG4gIC8vIHNvIGl0J3Mgbm90IGFjdHVhbGx5IGJyZWFraW5nIGFueXRoaW5nXG5cblxuICB2YXIgc2hlZXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIga2V5ID0gY2FjaGUua2V5ICsgXCItZ2xvYmFsXCI7IC8vIHVzZSBjYXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vaXNzdWVzLzI2NzVcblxuICAgIHZhciBzaGVldCA9IG5ldyBjYWNoZS5zaGVldC5jb25zdHJ1Y3Rvcih7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIG5vbmNlOiBjYWNoZS5zaGVldC5ub25jZSxcbiAgICAgIGNvbnRhaW5lcjogY2FjaGUuc2hlZXQuY29udGFpbmVyLFxuICAgICAgc3BlZWR5OiBjYWNoZS5zaGVldC5pc1NwZWVkeVxuICAgIH0pO1xuICAgIHZhciByZWh5ZHJhdGluZyA9IGZhbHNlO1xuICAgIHZhciBub2RlXG4gICAgLyo6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsKi9cbiAgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLWVtb3Rpb249XFxcIlwiICsga2V5ICsgXCIgXCIgKyBzZXJpYWxpemVkLm5hbWUgKyBcIlxcXCJdXCIpO1xuXG4gICAgaWYgKGNhY2hlLnNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICBzaGVldC5iZWZvcmUgPSBjYWNoZS5zaGVldC50YWdzWzBdO1xuICAgIH1cblxuICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICByZWh5ZHJhdGluZyA9IHRydWU7IC8vIGNsZWFyIHRoZSBoYXNoIHNvIHRoaXMgbm9kZSB3b24ndCBiZSByZWNvZ25pemFibGUgYXMgcmVoeWRyYXRhYmxlIGJ5IG90aGVyIDxHbG9iYWwvPnNcblxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIGtleSk7XG4gICAgICBzaGVldC5oeWRyYXRlKFtub2RlXSk7XG4gICAgfVxuXG4gICAgc2hlZXRSZWYuY3VycmVudCA9IFtzaGVldCwgcmVoeWRyYXRpbmddO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH07XG4gIH0sIFtjYWNoZV0pO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBzaGVldFJlZkN1cnJlbnQgPSBzaGVldFJlZi5jdXJyZW50O1xuICAgIHZhciBzaGVldCA9IHNoZWV0UmVmQ3VycmVudFswXSxcbiAgICAgICAgcmVoeWRyYXRpbmcgPSBzaGVldFJlZkN1cnJlbnRbMV07XG5cbiAgICBpZiAocmVoeWRyYXRpbmcpIHtcbiAgICAgIHNoZWV0UmVmQ3VycmVudFsxXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXJpYWxpemVkLm5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaW5zZXJ0IGtleWZyYW1lc1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLm5leHQsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChzaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgLy8gaWYgdGhpcyBkb2Vzbid0IGV4aXN0IHRoZW4gaXQgd2lsbCBiZSBudWxsIHNvIHRoZSBzdHlsZSBlbGVtZW50IHdpbGwgYmUgYXBwZW5kZWRcbiAgICAgIHZhciBlbGVtZW50ID0gc2hlZXQudGFnc1tzaGVldC50YWdzLmxlbmd0aCAtIDFdLm5leHRFbGVtZW50U2libGluZztcbiAgICAgIHNoZWV0LmJlZm9yZSA9IGVsZW1lbnQ7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH1cblxuICAgIGNhY2hlLmluc2VydChcIlwiLCBzZXJpYWxpemVkLCBzaGVldCwgZmFsc2UpO1xuICB9LCBbY2FjaGUsIHNlcmlhbGl6ZWQubmFtZV0pO1xuICByZXR1cm4gbnVsbDtcbn0pO1xuXG4vKiBpbXBvcnQgdHlwZSB7IEludGVycG9sYXRpb24sIFNlcmlhbGl6ZWRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscycgKi9cblxuZnVuY3Rpb24gY3NzKClcbi8qOiBTZXJpYWxpemVkU3R5bGVzICovXG57XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG4vKlxudHlwZSBLZXlmcmFtZXMgPSB7fFxuICBuYW1lOiBzdHJpbmcsXG4gIHN0eWxlczogc3RyaW5nLFxuICBhbmltOiAxLFxuICB0b1N0cmluZzogKCkgPT4gc3RyaW5nXG58fSAmIHN0cmluZ1xuKi9cblxudmFyIGtleWZyYW1lcyA9IGZ1bmN0aW9uXG4gIC8qOiBLZXlmcmFtZXMgKi9cbmtleWZyYW1lcygpIHtcbiAgdmFyIGluc2VydGFibGUgPSBjc3MuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB2YXIgbmFtZSA9IFwiYW5pbWF0aW9uLVwiICsgaW5zZXJ0YWJsZS5uYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBuYW1lICsgXCJ7XCIgKyBpbnNlcnRhYmxlLnN0eWxlcyArIFwifVwiLFxuICAgIGFuaW06IDEsXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiX0VNT19cIiArIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5zdHlsZXMgKyBcIl9FTU9fXCI7XG4gICAgfVxuICB9O1xufTtcblxuLypcbnR5cGUgQ2xhc3NOYW1lQXJnID1cbiAgfCBzdHJpbmdcbiAgfCBib29sZWFuXG4gIHwgeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH1cbiAgfCBBcnJheTxDbGFzc05hbWVBcmc+XG4gIHwgbnVsbFxuICB8IHZvaWRcbiovXG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb25cbiAgLyo6IHN0cmluZyAqL1xuY2xhc3NuYW1lcyhhcmdzXG4vKjogQXJyYXk8Q2xhc3NOYW1lQXJnPiAqL1xuKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkXG4vKjogT2JqZWN0ICovXG4sIGNzc1xuLyo6ICguLi5hcmdzOiBBcnJheTxhbnk+KSA9PiBzdHJpbmcgKi9cbiwgY2xhc3NOYW1lXG4vKjogc3RyaW5nICovXG4pIHtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lKTtcblxuICBpZiAocmVnaXN0ZXJlZFN0eWxlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIHJldHVybiByYXdDbGFzc05hbWUgKyBjc3MocmVnaXN0ZXJlZFN0eWxlcyk7XG59XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZEFyciA9IF9yZWYuc2VyaWFsaXplZEFycjtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcmlhbGl6ZWRBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZEFycltpXSwgZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuLypcbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiAoe1xuICAgIGNzczogKC4uLmFyZ3M6IGFueSkgPT4gc3RyaW5nLFxuICAgIGN4OiAoLi4uYXJnczogQXJyYXk8Q2xhc3NOYW1lQXJnPikgPT4gc3RyaW5nLFxuICAgIHRoZW1lOiBPYmplY3RcbiAgfSkgPT4gUmVhY3QuTm9kZVxufSAqL1xuXG5cbnZhciBDbGFzc05hbWVzXG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8UHJvcHM+Ki9cbj0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuICB2YXIgc2VyaWFsaXplZEFyciA9IFtdO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIGlzRGV2ZWxvcG1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBzZXJpYWxpemVkQXJyLnB1c2goc2VyaWFsaXplZCk7IC8vIHJlZ2lzdHJhdGlvbiBoYXMgdG8gaGFwcGVuIGhlcmUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIG1pZ2h0IGdldCBjb25zdW1lZCBieSBgY3hgXG5cbiAgICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICB2YXIgY29udGVudCA9IHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgdGhlbWU6IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KVxuICB9O1xuICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gIGhhc1JlbmRlcmVkID0gdHJ1ZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZEFycjogc2VyaWFsaXplZEFyclxuICB9KSwgZWxlKTtcbn0pO1xuXG5leHBvcnQgeyBDbGFzc05hbWVzLCBHbG9iYWwsIGpzeCBhcyBjcmVhdGVFbGVtZW50LCBjc3MsIGpzeCwga2V5ZnJhbWVzIH07XG4iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciB0aHJvdHRsZSA9IGZ1bmN0aW9uIHRocm90dGxlKGZuKSB7XG4gIHZhciB3YWl0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiA1MDtcbiAgdmFyIHRpbWUgPSBEYXRlLm5vdygpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aW1lICsgd2FpdCAtIERhdGUubm93KCkgPCAwKSB7XG4gICAgICBmbi5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgICB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICB9XG4gIH07XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgc29ydE1hcEJ5TGFyZ2VUb1NtYWxsVmFsdWVzID0gZnVuY3Rpb24gc29ydE1hcEJ5TGFyZ2VUb1NtYWxsVmFsdWVzKGJyZWFrcG9pbnRzTWFwKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYnJlYWtwb2ludHNNYXApLnNvcnQoZnVuY3Rpb24gKF9yZWYsIF9yZWYyKSB7XG4gICAgdmFyIF9yZWYzID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICBhID0gX3JlZjNbMV07XG4gICAgdmFyIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjIsIDIpLFxuICAgICAgYiA9IF9yZWY0WzFdO1xuICAgIHJldHVybiBiIC0gYTtcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgc29ydE1hcEJ5U21hbGxUb0xhcmdlVmFsdWVzID0gZnVuY3Rpb24gc29ydE1hcEJ5U21hbGxUb0xhcmdlVmFsdWVzKGJyZWFrcG9pbnRzTWFwKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYnJlYWtwb2ludHNNYXApLnNvcnQoZnVuY3Rpb24gKF9yZWY1LCBfcmVmNikge1xuICAgIHZhciBfcmVmNyA9IF9zbGljZWRUb0FycmF5KF9yZWY1LCAyKSxcbiAgICAgIGEgPSBfcmVmN1sxXTtcbiAgICB2YXIgX3JlZjggPSBfc2xpY2VkVG9BcnJheShfcmVmNiwgMiksXG4gICAgICBiID0gX3JlZjhbMV07XG4gICAgcmV0dXJuIGEgLSBiO1xuICB9KSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0IH0gZnJvbSAnLi9jdXJyZW50X2JyZWFrcG9pbnQnO1xuXG4vKipcbiAqIEhvb2sgdXRpbCAvIHN5bnRhY3RpY2FsIHN1Z2FyIGZvciB1c2VDb250ZXh0KClcbiAqXG4gKiBUaGlzIGhvb2sgaXMgaW4gaXRzIG93biBzZXBhcmF0ZSBmaWxlIHRvIG1ha2UgbW9ja2luZyBpdFxuICogYXMgYSB0ZXN0ZW52IGVhc3kgZm9yIEplc3QgdW5pdCB0ZXN0c1xuICovXG5leHBvcnQgdmFyIHVzZUN1cnJlbnRFdWlCcmVha3BvaW50ID0gZnVuY3Rpb24gdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQoKSB7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IHVzZUNvbnRleHQoQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0KTtcbiAgcmV0dXJuIGN1cnJlbnRCcmVha3BvaW50O1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuaW1wb3J0IHsgY3NzIGFzIF9jc3MgfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJjbG9uZUVsZW1lbnRcIiwgXCJjbGFzc05hbWVcIl07XG52YXIgX3RlbXBsYXRlT2JqZWN0O1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHsgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KSB9IH0pKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCB7IGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi9lbW90aW9uJztcbmltcG9ydCB7IGNzcywgY3ggfSBmcm9tICcuLi9lbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyBDdXJyZW50RXVpQnJlYWtwb2ludFByb3ZpZGVyIH0gZnJvbSAnLi4vYnJlYWtwb2ludC9jdXJyZW50X2JyZWFrcG9pbnQnO1xuaW1wb3J0IHsgRXVpU3lzdGVtQ29udGV4dCwgRXVpVGhlbWVDb250ZXh0LCBFdWlOZXN0ZWRUaGVtZUNvbnRleHQsIEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0LCBFdWlDb2xvck1vZGVDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IEV1aUVtb3Rpb25UaGVtZVByb3ZpZGVyIH0gZnJvbSAnLi9lbW90aW9uJztcbmltcG9ydCB7IEV1aVRoZW1lTWVtb2l6ZWRTdHlsZXNQcm92aWRlciB9IGZyb20gJy4vc3R5bGVfbWVtb2l6YXRpb24nO1xuaW1wb3J0IHsgYnVpbGRUaGVtZSwgZ2V0Q29sb3JNb2RlLCBnZXRDb21wdXRlZCwgbWVyZ2VEZWVwIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpVGhlbWVQcm92aWRlcihfcmVmKSB7XG4gIHZhciBfc3lzdGVtID0gX3JlZi50aGVtZSxcbiAgICBfY29sb3JNb2RlID0gX3JlZi5jb2xvck1vZGUsXG4gICAgX21vZGlmaWNhdGlvbnMgPSBfcmVmLm1vZGlmeSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgd3JhcHBlclByb3BzID0gX3JlZi53cmFwcGVyUHJvcHM7XG4gIHZhciBfdXNlQ29udGV4dCA9IHVzZUNvbnRleHQoRXVpTmVzdGVkVGhlbWVDb250ZXh0KSxcbiAgICBpc0dsb2JhbFRoZW1lID0gX3VzZUNvbnRleHQuaXNHbG9iYWxUaGVtZSxcbiAgICBib2R5Q29sb3IgPSBfdXNlQ29udGV4dC5ib2R5Q29sb3IsXG4gICAgZ2xvYmFsQ1NTVmFyaWFibGVzID0gX3VzZUNvbnRleHQuZ2xvYmFsQ1NTVmFyaWFibGVzLFxuICAgIHNldEdsb2JhbENTU1ZhcmlhYmxlcyA9IF91c2VDb250ZXh0LnNldEdsb2JhbENTU1ZhcmlhYmxlcztcbiAgdmFyIHBhcmVudFN5c3RlbSA9IHVzZUNvbnRleHQoRXVpU3lzdGVtQ29udGV4dCk7XG4gIHZhciBwYXJlbnRNb2RpZmljYXRpb25zID0gdXNlQ29udGV4dChFdWlNb2RpZmljYXRpb25zQ29udGV4dCk7XG4gIHZhciBwYXJlbnRDb2xvck1vZGUgPSB1c2VDb250ZXh0KEV1aUNvbG9yTW9kZUNvbnRleHQpO1xuICB2YXIgcGFyZW50VGhlbWUgPSB1c2VDb250ZXh0KEV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShfc3lzdGVtIHx8IHBhcmVudFN5c3RlbSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgc3lzdGVtID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRTeXN0ZW0gPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgcHJldlN5c3RlbUtleSA9IHVzZVJlZihzeXN0ZW0ua2V5KTtcblxuICAvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiB3aW5kb3cgcmVzaXplIGxpc3RlbmVycywgb25seSByZW5kZXIgYVxuICAvLyBDdXJyZW50RXVpQnJlYWtwb2ludFByb3ZpZGVyIGZvciB0aGUgdG9wIGxldmVsIHBhcmVudCB0aGVtZSwgb3IgZm9yXG4gIC8vIG5lc3RlZCB0aGVtZXMgb25seSBpZiBtb2RpZmllZCBicmVha3BvaW50IG92ZXJyaWRlcyBhcmUgcGFzc2VkXG4gIHZhciBFdWlDb25kaXRpb25hbEJyZWFrcG9pbnRQcm92aWRlciA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpc0dsb2JhbFRoZW1lIHx8IF9tb2RpZmljYXRpb25zICE9PSBudWxsICYmIF9tb2RpZmljYXRpb25zICE9PSB2b2lkIDAgJiYgX21vZGlmaWNhdGlvbnMuYnJlYWtwb2ludCA/IEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIgOiBGcmFnbWVudDtcbiAgfSwgW2lzR2xvYmFsVGhlbWUsIF9tb2RpZmljYXRpb25zXSk7XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUobWVyZ2VEZWVwKHBhcmVudE1vZGlmaWNhdGlvbnMsIF9tb2RpZmljYXRpb25zKSksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIG1vZGlmaWNhdGlvbnMgPSBfdXNlU3RhdGU0WzBdLFxuICAgIHNldE1vZGlmaWNhdGlvbnMgPSBfdXNlU3RhdGU0WzFdO1xuICB2YXIgcHJldk1vZGlmaWNhdGlvbnMgPSB1c2VSZWYobW9kaWZpY2F0aW9ucyk7XG4gIHZhciBfdXNlU3RhdGU1ID0gdXNlU3RhdGUoZ2V0Q29sb3JNb2RlKF9jb2xvck1vZGUsIHBhcmVudENvbG9yTW9kZSkpLFxuICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICBjb2xvck1vZGUgPSBfdXNlU3RhdGU2WzBdLFxuICAgIHNldENvbG9yTW9kZSA9IF91c2VTdGF0ZTZbMV07XG4gIHZhciBwcmV2Q29sb3JNb2RlID0gdXNlUmVmKGNvbG9yTW9kZSk7XG4gIHZhciBpc1BhcmVudFRoZW1lID0gdXNlUmVmKHByZXZTeXN0ZW1LZXkuY3VycmVudCA9PT0gcGFyZW50U3lzdGVtLmtleSAmJiBjb2xvck1vZGUgPT09IHBhcmVudENvbG9yTW9kZSAmJiBpc0VxdWFsKHBhcmVudE1vZGlmaWNhdGlvbnMsIG1vZGlmaWNhdGlvbnMpKTtcbiAgdmFyIF91c2VTdGF0ZTcgPSB1c2VTdGF0ZShpc1BhcmVudFRoZW1lLmN1cnJlbnQgJiYgT2JqZWN0LmtleXMocGFyZW50VGhlbWUpLmxlbmd0aCA/IF9vYmplY3RTcHJlYWQoe30sIHBhcmVudFRoZW1lKSAvLyBJbnRlbnRpb25hbGx5IGNyZWF0ZSBhIG5ldyBvYmplY3QgdG8gYnJlYWsgcmVmZXJlbnRpYWwgZXF1YWxpdHlcbiAgICA6IGdldENvbXB1dGVkKHN5c3RlbSwgYnVpbGRUaGVtZShtb2RpZmljYXRpb25zLCBcIl9cIi5jb25jYXQoc3lzdGVtLmtleSkpLCBjb2xvck1vZGUpKSxcbiAgICBfdXNlU3RhdGU4ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNywgMiksXG4gICAgdGhlbWUgPSBfdXNlU3RhdGU4WzBdLFxuICAgIHNldFRoZW1lID0gX3VzZVN0YXRlOFsxXTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3U3lzdGVtID0gX3N5c3RlbSB8fCBwYXJlbnRTeXN0ZW07XG4gICAgaWYgKHByZXZTeXN0ZW1LZXkuY3VycmVudCAhPT0gbmV3U3lzdGVtLmtleSkge1xuICAgICAgc2V0U3lzdGVtKG5ld1N5c3RlbSk7XG4gICAgICBwcmV2U3lzdGVtS2V5LmN1cnJlbnQgPSBuZXdTeXN0ZW0ua2V5O1xuICAgICAgaXNQYXJlbnRUaGVtZS5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICB9LCBbX3N5c3RlbSwgcGFyZW50U3lzdGVtXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5ld01vZGlmaWNhdGlvbnMgPSBtZXJnZURlZXAocGFyZW50TW9kaWZpY2F0aW9ucywgX21vZGlmaWNhdGlvbnMpO1xuICAgIGlmICghaXNFcXVhbChwcmV2TW9kaWZpY2F0aW9ucy5jdXJyZW50LCBuZXdNb2RpZmljYXRpb25zKSkge1xuICAgICAgc2V0TW9kaWZpY2F0aW9ucyhuZXdNb2RpZmljYXRpb25zKTtcbiAgICAgIHByZXZNb2RpZmljYXRpb25zLmN1cnJlbnQgPSBuZXdNb2RpZmljYXRpb25zO1xuICAgICAgaXNQYXJlbnRUaGVtZS5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICB9LCBbX21vZGlmaWNhdGlvbnMsIHBhcmVudE1vZGlmaWNhdGlvbnNdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3Q29sb3JNb2RlID0gZ2V0Q29sb3JNb2RlKF9jb2xvck1vZGUsIHBhcmVudENvbG9yTW9kZSk7XG4gICAgaWYgKCFpc0VxdWFsKG5ld0NvbG9yTW9kZSwgcHJldkNvbG9yTW9kZS5jdXJyZW50KSkge1xuICAgICAgc2V0Q29sb3JNb2RlKG5ld0NvbG9yTW9kZSk7XG4gICAgICBwcmV2Q29sb3JNb2RlLmN1cnJlbnQgPSBuZXdDb2xvck1vZGU7XG4gICAgICBpc1BhcmVudFRoZW1lLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGVdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWlzUGFyZW50VGhlbWUuY3VycmVudCkge1xuICAgICAgc2V0VGhlbWUoZ2V0Q29tcHV0ZWQoc3lzdGVtLCBidWlsZFRoZW1lKG1vZGlmaWNhdGlvbnMsIFwiX1wiLmNvbmNhdChzeXN0ZW0ua2V5KSksIGNvbG9yTW9kZSkpO1xuICAgIH1cbiAgfSwgW2NvbG9yTW9kZSwgc3lzdGVtLCBtb2RpZmljYXRpb25zXSk7XG4gIHZhciBfdXNlU3RhdGU5ID0gdXNlU3RhdGUoKSxcbiAgICBfdXNlU3RhdGUxMCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTksIDIpLFxuICAgIHRoZW1lQ1NTVmFyaWFibGVzID0gX3VzZVN0YXRlMTBbMF0sXG4gICAgX3NldFRoZW1lQ1NTVmFyaWFibGVzID0gX3VzZVN0YXRlMTBbMV07XG4gIHZhciBzZXRUaGVtZUNTU1ZhcmlhYmxlcyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICh2YXJpYWJsZXMpIHtcbiAgICByZXR1cm4gX3NldFRoZW1lQ1NTVmFyaWFibGVzKGZ1bmN0aW9uIChwcmV2aW91cykge1xuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJldmlvdXMpLCB2YXJpYWJsZXMpO1xuICAgIH0pO1xuICB9LCBbXSk7XG4gIHZhciBuZXN0ZWRUaGVtZUNvbnRleHQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNHbG9iYWxUaGVtZTogZmFsc2UsXG4gICAgICAvLyBUaGUgdGhlbWUgdGhhdCBkZXRlcm1pbmVzIHRoZSBnbG9iYWwgYm9keSBzdHlsZXNcbiAgICAgIGJvZHlDb2xvcjogaXNHbG9iYWxUaGVtZSA/IHRoZW1lLmNvbG9ycy50ZXh0IDogYm9keUNvbG9yLFxuICAgICAgaGFzRGlmZmVyZW50Q29sb3JGcm9tR2xvYmFsVGhlbWU6IGlzR2xvYmFsVGhlbWUgPyBmYWxzZSA6IGJvZHlDb2xvciAhPT0gdGhlbWUuY29sb3JzLnRleHQsXG4gICAgICBjb2xvckNsYXNzTmFtZTogY3NzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgICAgIGxhYmVsOiBldWlDb2xvck1vZGUtXCIsIFwiO1xcbiAgICAgICAgY29sb3I6IFwiLCBcIjtcXG4gICAgICBcIl0pKSwgX2NvbG9yTW9kZSB8fCBjb2xvck1vZGUsIHRoZW1lLmNvbG9ycy50ZXh0KSxcbiAgICAgIHNldEdsb2JhbENTU1ZhcmlhYmxlczogaXNHbG9iYWxUaGVtZSA/IHNldFRoZW1lQ1NTVmFyaWFibGVzIDogc2V0R2xvYmFsQ1NTVmFyaWFibGVzLFxuICAgICAgZ2xvYmFsQ1NTVmFyaWFibGVzOiBpc0dsb2JhbFRoZW1lID8gdGhlbWVDU1NWYXJpYWJsZXMgOiBnbG9iYWxDU1NWYXJpYWJsZXMsXG4gICAgICBzZXROZWFyZXN0VGhlbWVDU1NWYXJpYWJsZXM6IHNldFRoZW1lQ1NTVmFyaWFibGVzLFxuICAgICAgdGhlbWVDU1NWYXJpYWJsZXM6IHRoZW1lQ1NTVmFyaWFibGVzXG4gICAgfTtcbiAgfSwgW3RoZW1lLCBpc0dsb2JhbFRoZW1lLCBib2R5Q29sb3IsIF9jb2xvck1vZGUsIGNvbG9yTW9kZSwgc2V0R2xvYmFsQ1NTVmFyaWFibGVzLCBnbG9iYWxDU1NWYXJpYWJsZXMsIHNldFRoZW1lQ1NTVmFyaWFibGVzLCB0aGVtZUNTU1ZhcmlhYmxlc10pO1xuICB2YXIgcmVuZGVyZWRDaGlsZHJlbiA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChpc0dsb2JhbFRoZW1lKSB7XG4gICAgICByZXR1cm4gY2hpbGRyZW47IC8vIE5vIHdyYXBwZXJcbiAgICB9XG4gICAgdmFyIF9yZWYyID0gd3JhcHBlclByb3BzIHx8IHt9LFxuICAgICAgY2xvbmVFbGVtZW50ID0gX3JlZjIuY2xvbmVFbGVtZW50LFxuICAgICAgY2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgX2V4Y2x1ZGVkKTtcbiAgICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3QpLCB7fSwge1xuICAgICAgY2xhc3NOYW1lOiBjeChjbGFzc05hbWUsIG5lc3RlZFRoZW1lQ29udGV4dC5jb2xvckNsYXNzTmFtZSlcbiAgICB9KTtcbiAgICAvLyBDb25kaXRpb24gYXZvaWRzIHJlbmRlcmluZyBhbiBlbXB0eSBFbW90aW9uIHNlbGVjdG9yIGlmIG5vXG4gICAgLy8gdGhlbWUtc3BlY2lmaWMgQ1NTIHZhcmlhYmxlcyBoYXZlIGJlZW4gc2V0IGJ5IGNoaWxkIGNvbXBvbmVudHNcbiAgICBpZiAodGhlbWVDU1NWYXJpYWJsZXMpIHtcbiAgICAgIHByb3BzLmNzcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBsYWJlbDogJ2V1aUNTU1ZhcmlhYmxlcydcbiAgICAgIH0sIHRoZW1lQ1NTVmFyaWFibGVzKTtcbiAgICB9XG4gICAgaWYgKGNsb25lRWxlbWVudCkge1xuICAgICAgcmV0dXJuIGNsb25lRWxlbWVudFdpdGhDc3MoY2hpbGRyZW4sIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgICBjbGFzc05hbWU6IGN4KGNoaWxkcmVuLnByb3BzLmNsYXNzTmFtZSwgcHJvcHMuY2xhc3NOYW1lKVxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY3goJ2V1aVRoZW1lUHJvdmlkZXInLCBwcm9wcy5jbGFzc05hbWUpXG4gICAgICB9KSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgfSwgW2lzR2xvYmFsVGhlbWUsIHRoZW1lQ1NTVmFyaWFibGVzLCBuZXN0ZWRUaGVtZUNvbnRleHQsIHdyYXBwZXJQcm9wcywgY2hpbGRyZW5dKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIGlzR2xvYmFsVGhlbWUgJiYgdGhlbWVDU1NWYXJpYWJsZXMgJiYgX19fRW1vdGlvbkpTWChHbG9iYWwsIHtcbiAgICBzdHlsZXM6IC8qI19fUFVSRV9fKi9fY3NzKHtcbiAgICAgICc6cm9vdCc6IHRoZW1lQ1NTVmFyaWFibGVzXG4gICAgfSwgXCI7bGFiZWw6RXVpVGhlbWVQcm92aWRlcjtcIilcbiAgfSksIF9fX0Vtb3Rpb25KU1goRXVpQ29sb3JNb2RlQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb2xvck1vZGVcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlTeXN0ZW1Db250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHN5c3RlbVxuICB9LCBfX19FbW90aW9uSlNYKEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IG1vZGlmaWNhdGlvbnNcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWVcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlOZXN0ZWRUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogbmVzdGVkVGhlbWVDb250ZXh0XG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpVGhlbWVNZW1vaXplZFN0eWxlc1Byb3ZpZGVyLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUVtb3Rpb25UaGVtZVByb3ZpZGVyLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUNvbmRpdGlvbmFsQnJlYWtwb2ludFByb3ZpZGVyLCBudWxsLCByZW5kZXJlZENoaWxkcmVuKSkpKSkpKSkpO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBqc3ggfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbi8qKlxuICogUmVhY3QuY2xvbmVFbGVtZW50IGRvZXMgbm90IHdvcmsgaWYgdGhlIGNsb25lZCBlbGVtZW50IGRvZXMgbm90IGFscmVhZHkgaGF2ZSB0aGVcbiAqIGBjc3NgIHByb3AgLSBhcyBhIHJlc3VsdCwgd2UgbmVlZCB0byB1c2UgYGpzeCgpYCB0byBtYW51YWxseSBjbG9uZSB0aGUgZWxlbWVudFxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vaXNzdWVzLzE0MDRcbiAqL1xuZXhwb3J0IHZhciBjbG9uZUVsZW1lbnRXaXRoQ3NzID0gZnVuY3Rpb24gY2xvbmVFbGVtZW50V2l0aENzcyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgY3NzT3JkZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICdhZnRlcic7XG4gIHZhciBjbG9uZWRFbGVtZW50ID0gZWxlbWVudC5wcm9wcy5fX0VNT1RJT05fVFlQRV9QTEVBU0VfRE9fTk9UX1VTRV9fIHx8IGVsZW1lbnQudHlwZTsgLy8gRU1PVElPTl9UWVBFIGhhbmRsZXMgbm9uLVJlYWN0IGVsZW1lbnRzIChuYXRpdmUgSlNYL0hUTUwgbm9kZXMpXG5cbiAgdmFyIGNsb25lZFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVsZW1lbnQua2V5ID8ge1xuICAgIGtleTogZWxlbWVudC5rZXlcbiAgfSA6IHt9KSwge30sIHtcbiAgICByZWY6IGVsZW1lbnQucmVmXG4gIH0sIGVsZW1lbnQucHJvcHMpLCBwcm9wcyk7XG4gIGlmIChwcm9wcy5jc3MgfHwgZWxlbWVudC5wcm9wcy5jc3MpIHtcbiAgICBjbG9uZWRQcm9wcy5jc3MgPSBjc3NPcmRlciA9PT0gJ2JlZm9yZScgPyBbcHJvcHMuY3NzLCBlbGVtZW50LnByb3BzLmNzc10gOiBbZWxlbWVudC5wcm9wcy5jc3MsIHByb3BzLmNzc107XG4gIH1cbiAgcmV0dXJuIGpzeChjbG9uZWRFbGVtZW50LCBjbG9uZWRQcm9wcyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjaGFyYXQsIERFQ0xBUkFUSU9OLCBoYXNoLCBpbmRleG9mLCBNT1osIHJlcGxhY2UsIHN0cmxlbiwgV0VCS0lUIH0gZnJvbSAnc3R5bGlzJztcblxuLy8gVGhpcyBpcyBhIGhlYXZpbHkgbW9kaWZpZWQgdmVyc2lvbiBvZiBFbW90aW9uJ3MgZGVmYXVsdCBgcHJlZml4ZXJgIHBsdWdpblxuLy8gKG1vc3RseSByZW1vdmluZyB1bm5lY2Vzc2FyeSBwcmVmaXhlcyksIHdoaWNoIGlzIGluIHR1cm4gYSBtb2RpZmllZCB2ZXJzaW9uXG4vLyBvZiBzdHlsaXMncyBkZWZhdWx0IHByZWZpeGVyLlxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2Jsb2IvbWFpbi9wYWNrYWdlcy9jYWNoZS9zcmMvcHJlZml4ZXIuanNcbi8qIGVzbGludC1kaXNhYmxlIHByZWZlci10ZW1wbGF0ZSAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBzdHlsaXMgcGx1Z2luIHdoaWNoIGhhbmRsZXMgYXV0by1wcmVmaXhpbmcgQ1NTIG91dHB1dCBieSBFbW90aW9uLlxuICpcbiAqICpQbGVhc2Ugbm90ZSo6IEVVSS9FbGFzdGljIHRhcmdldHMgbGF0ZXN0IGV2ZXJncmVlbiBicm93c2VycyBmb3Igc3VwcG9ydCBvbmx5LlxuICogQHNlZSBodHRwczovL3d3dy5lbGFzdGljLmNvL3N1cHBvcnQvbWF0cml4I21hdHJpeF9icm93c2Vyc1xuICovXG5leHBvcnQgdmFyIGV1aVN0eWxpc1ByZWZpeGVyID0gZnVuY3Rpb24gZXVpU3R5bGlzUHJlZml4ZXIoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC5sZW5ndGggPiAtMSkgaWYgKCFlbGVtZW50LnJldHVybikgc3dpdGNoIChlbGVtZW50LnR5cGUpIHtcbiAgICBjYXNlIERFQ0xBUkFUSU9OOlxuICAgICAgZWxlbWVudC5yZXR1cm4gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpO1xuICAgICAgYnJlYWs7XG4gIH1cbn07XG52YXIgcHJlZml4ID0gZnVuY3Rpb24gcHJlZml4KHZhbHVlLCBsZW5ndGgpIHtcbiAgc3dpdGNoIChoYXNoKHZhbHVlLCBsZW5ndGgpKSB7XG4gICAgLyoqXG4gICAgICogYC13ZWJraXRgIHByZWZpeGVzXG4gICAgICovXG4gICAgLy8gdXNlci1zZWxlY3QgLSBodHRwczovL2Nhbml1c2UuY29tL21kbi1jc3NfcHJvcGVydGllc191c2VyLXNlbGVjdCAtIG5lZWRlZCBieSBTYWZhcmlcbiAgICBjYXNlIDQyNDY6XG4gICAgLy8gdGV4dC1kZWNvcmF0aW9uIC0gaHR0cHM6Ly9jYW5pdXNlLmNvbS90ZXh0LWRlY29yYXRpb24gLSBpT1MgU2FmYXJpIGlzIHRoZSBtYWluIG9uZSB0aGF0IG5lZWRzIHRoaXNcbiAgICBjYXNlIDU1NzI6XG4gICAgLy8gdGV4dC1zaXplLWFkanVzdCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vdGV4dC1zaXplLWFkanVzdCAtIGlPUyBTYWZhcmlcbiAgICBjYXNlIDI3NTY6XG4gICAgLy8gYm94LWRlY29yYXRpb24tYnJlYWsgLSBodHRwczovL2Nhbml1c2UuY29tL2Nzcy1ib3hkZWNvcmF0aW9uYnJlYWsgLSBDaHJvbWUgJiBTYWZhcmlcbiAgICBjYXNlIDMwMDU6XG4gICAgLy8gbWFzaywgbWFzay1pbWFnZSwgbWFzay0obW9kZXxjbGlwfHNpemUpLCBtYXNrLShyZXBlYXR8b3JpZ2luKSwgbWFzay1wb3NpdGlvbiwgbWFzay1jb21wb3NpdGUgLSBDaHJvbWVcbiAgICBjYXNlIDYzOTE6XG4gICAgY2FzZSA1ODc5OlxuICAgIGNhc2UgNTYyMzpcbiAgICBjYXNlIDYxMzU6XG4gICAgY2FzZSA0NTk5OlxuICAgIGNhc2UgNDg1NTpcbiAgICAvLyBwcmludC1jb2xvci1hZGp1c3QgLSBodHRwczovL2Nhbml1c2UuY29tL2Nzcy1jb2xvci1hZGp1c3QgLSBDaHJvbWVcbiAgICBjYXNlIDIyODI6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcblxuICAgIC8vIGJhY2tncm91bmQtY2xpcCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vYmFja2dyb3VuZC1jbGlwLXRleHQgLSBDaHJvbWUsIG9ubHkgZm9yIGB0ZXh0YCB2YWx1ZVxuICAgIGNhc2UgNDIxNTpcbiAgICAgIGlmICh+aW5kZXhvZih2YWx1ZSwgJ3RleHQnKSkge1xuICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludHJpbnNpYy9leHRyaW5zaWMgc2l6aW5nIHZhbHVlIHByZWZpeGVzXG4gICAgICogYHN0cmV0Y2hgIGFsdGVybmF0aXZlcyBuZWVkZWQgYnkgQ2hyb21lICYgRmlyZWZveCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vaW50cmluc2ljLXdpZHRoXG4gICAgICovXG4gICAgLy8gKG1pbnxtYXgpPyh3aWR0aHxoZWlnaHR8aW5saW5lLXNpemV8YmxvY2stc2l6ZSlcbiAgICBjYXNlIDgxMTY6XG4gICAgY2FzZSA3MDU5OlxuICAgIGNhc2UgNTc1MzpcbiAgICBjYXNlIDU1MzU6XG4gICAgY2FzZSA1NDQ1OlxuICAgIGNhc2UgNTcwMTpcbiAgICBjYXNlIDQ5MzM6XG4gICAgY2FzZSA0Njc3OlxuICAgIGNhc2UgNTUzMzpcbiAgICBjYXNlIDU3ODk6XG4gICAgY2FzZSA1MDIxOlxuICAgIGNhc2UgNDc2NTpcbiAgICAgIC8vIHN0cmV0Y2gsIG1heC1jb250ZW50LCBtaW4tY29udGVudCwgZmlsbC1hdmFpbGFibGVcbiAgICAgIGlmIChzdHJsZW4odmFsdWUpIC0gMSAtIGxlbmd0aCA+IDYpIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSkge1xuICAgICAgICAvLyAoZilpbGwtYXZhaWxhYmxlXG4gICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgIGlmICh+aW5kZXhvZih2YWx1ZSwgJ2ZpbGwtYXZhaWxhYmxlJykpIHtcbiAgICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09PSAxMDggPyAnJDMnIDogJyQyLSQzJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgLy8gKHMpdHJldGNoXG4gICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgIGlmICh+aW5kZXhvZih2YWx1ZSwgJ3N0cmV0Y2gnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByZWZpeChyZXBsYWNlKHZhbHVlLCAnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBsZW5ndGgpICsgdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTsiLCAiaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5cbmZ1bmN0aW9uIGluc2VydFdpdGhvdXRTY29waW5nKGNhY2hlLCBzZXJpYWxpemVkKSB7XG4gIGlmIChjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGUuaW5zZXJ0KCcnLCBzZXJpYWxpemVkLCBjYWNoZS5zaGVldCwgdHJ1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2UocmVnaXN0ZXJlZCwgY3NzLCBjbGFzc05hbWUpIHtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lKTtcblxuICBpZiAocmVnaXN0ZXJlZFN0eWxlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIHJldHVybiByYXdDbGFzc05hbWUgKyBjc3MocmVnaXN0ZXJlZFN0eWxlcyk7XG59XG5cbnZhciBjcmVhdGVFbW90aW9uID0gZnVuY3Rpb24gY3JlYXRlRW1vdGlvbihvcHRpb25zKSB7XG4gIHZhciBjYWNoZSA9IGNyZWF0ZUNhY2hlKG9wdGlvbnMpO1xuXG4gIGNhY2hlLnNoZWV0LnNwZWVkeSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IHZhbHVlO1xuICB9O1xuXG4gIGNhY2hlLmNvbXBhdCA9IHRydWU7XG5cbiAgdmFyIGNzcyA9IGZ1bmN0aW9uIGNzcygpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCwgdW5kZWZpbmVkKTtcbiAgICBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGZhbHNlKTtcbiAgICByZXR1cm4gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gIH07XG5cbiAgdmFyIGtleWZyYW1lcyA9IGZ1bmN0aW9uIGtleWZyYW1lcygpIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICB2YXIgYW5pbWF0aW9uID0gXCJhbmltYXRpb24tXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gICAgaW5zZXJ0V2l0aG91dFNjb3BpbmcoY2FjaGUsIHtcbiAgICAgIG5hbWU6IHNlcmlhbGl6ZWQubmFtZSxcbiAgICAgIHN0eWxlczogXCJAa2V5ZnJhbWVzIFwiICsgYW5pbWF0aW9uICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuaW1hdGlvbjtcbiAgfTtcblxuICB2YXIgaW5qZWN0R2xvYmFsID0gZnVuY3Rpb24gaW5qZWN0R2xvYmFsKCkge1xuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIGNhY2hlLnJlZ2lzdGVyZWQpO1xuICAgIGluc2VydFdpdGhvdXRTY29waW5nKGNhY2hlLCBzZXJpYWxpemVkKTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgIGFyZ3NbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGNzczogY3NzLFxuICAgIGN4OiBjeCxcbiAgICBpbmplY3RHbG9iYWw6IGluamVjdEdsb2JhbCxcbiAgICBrZXlmcmFtZXM6IGtleWZyYW1lcyxcbiAgICBoeWRyYXRlOiBmdW5jdGlvbiBoeWRyYXRlKGlkcykge1xuICAgICAgaWRzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBjYWNoZS5pbnNlcnRlZFtrZXldID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZmx1c2g6IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgICAgY2FjaGUucmVnaXN0ZXJlZCA9IHt9O1xuICAgICAgY2FjaGUuaW5zZXJ0ZWQgPSB7fTtcbiAgICAgIGNhY2hlLnNoZWV0LmZsdXNoKCk7XG4gICAgfSxcbiAgICBzaGVldDogY2FjaGUuc2hlZXQsXG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIGdldFJlZ2lzdGVyZWRTdHlsZXM6IGdldFJlZ2lzdGVyZWRTdHlsZXMuYmluZChudWxsLCBjYWNoZS5yZWdpc3RlcmVkKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBjYWNoZS5yZWdpc3RlcmVkLCBjc3MpXG4gIH07XG59O1xuXG52YXIgY2xhc3NuYW1lcyA9IGZ1bmN0aW9uIGNsYXNzbmFtZXMoYXJncykge1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGFyZyA9PSBudWxsKSBjb250aW51ZTtcbiAgICB2YXIgdG9BZGQgPSB2b2lkIDA7XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVFbW90aW9uIGFzIGRlZmF1bHQgfTtcbiIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgY3JlYXRlRW1vdGlvbiBmcm9tICdAZW1vdGlvbi9jc3MvY3JlYXRlLWluc3RhbmNlJztcbmltcG9ydCB7IGV1aVN0eWxpc1ByZWZpeGVyIH0gZnJvbSAnLi9wcmVmaXhlcic7XG5cbi8qKlxuICogVGhpcyBjdXN0b20gaW5zdGFuY2UgaXMgbmVlZGVkIGZvciBpbnRlcm5hbCBFVUkgY29tcG9uZW50cyB0byBjYWxsXG4gKiBgQGVtb3Rpb24vY3NzYCB3aXRoIEVVSSdzIGN1c3RvbSBwcmVmaXhlciBwbHVnaW5cbiAqIEBzZWUgaHR0cHM6Ly9lbW90aW9uLnNoL2RvY3MvQGVtb3Rpb24vY3NzI2N1c3RvbS1pbnN0YW5jZXNcbiAqXG4gKiBOT1RFOiBVc2FnZSBpcyBjdXJyZW50bHkgYmVpbmcgYmV0YSB0ZXN0ZWQgaW50ZXJuYWxseSxcbiAqIGFuZCBpcyBub3QgeWV0IGludGVuZGVkIHRvIGJlIGEgcHVibGljIGV4cG9ydFxuICovXG52YXIgX2NyZWF0ZUVtb3Rpb24gPSBjcmVhdGVFbW90aW9uKHtcbiAgICBrZXk6ICdjc3MnLFxuICAgIHN0eWxpc1BsdWdpbnM6IFtldWlTdHlsaXNQcmVmaXhlcl0sXG4gICAgc3BlZWR5OiBmYWxzZVxuICB9KSxcbiAgY3NzID0gX2NyZWF0ZUVtb3Rpb24uY3NzLFxuICBjeCA9IF9jcmVhdGVFbW90aW9uLmN4LFxuICBjYWNoZSA9IF9jcmVhdGVFbW90aW9uLmNhY2hlO1xuZXhwb3J0IHsgY3NzLCBjeCwgY2FjaGUgfTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRoZW1lUHJvdmlkZXIgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4vaG9va3MnO1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbW90aW9uLnNoL2RvY3MvdGhlbWluZ1xuICogVGhpcyBFbW90aW9uIHRoZW1lIHByb3ZpZGVyIGlzIGFkZGVkIGZvciAqY29uc3VtZXIgdXNhZ2UqICYgY29udmVuaWVuY2Ugb25seS5cbiAqXG4gKiBFVUkgc2hvdWxkIHN0aWNrIHRvIHVzaW5nIG91ciBvd24gY29udGV4dC9gdXNlRXVpVGhlbWVgIGludGVybmFsbHlcbiAqIGluc3RlYWQgb2YgRW1vdGlvbidzIHNob3J0aGFuZCBgY3NzPXt0aGVtZSA9PiB7fX1gIEFQSS4gSWYgY29uc3VtZXJzXG4gKiBzZXQgdGhlaXIgb3duIHRoZW1lIHZpYSA8VGhlbWVQcm92aWRlcj47IEVVSSdzIHN0eWxlcyBzaG91bGQgY29udGludWVcbiAqIHdvcmtpbmcgYXMtaXMuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUVtb3Rpb25UaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpRW1vdGlvblRoZW1lUHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goVGhlbWVQcm92aWRlciwge1xuICAgIHRoZW1lOiBldWlUaGVtZUNvbnRleHRcbiAgfSwgY2hpbGRyZW4pO1xufTsiLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VVcGRhdGVFZmZlY3QgfSBmcm9tICcuLi9ob29rcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4vaG9va3MnO1xuaW1wb3J0IHsgZW1pdEV1aVByb3ZpZGVyV2FybmluZyB9IGZyb20gJy4vd2FybmluZyc7XG5cbi8vIFR5cGljYWxseSBhbiBvYmplY3Qgb2Ygc2VyaWFsaXplZCBjc3NgYCBzdHlsZXMsIGJ1dCBjYW4gaGF2ZSBhbnkgYW1vdW50IG9mIG5lc3RpbmcsIHNvIGl0J3Mgbm90IHdvcnRoIGl0IHRvIHRyeSBhbmQgc3RyaWN0bHkgdHlwZSB0aGlzXG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUaGVtZU1lbW9pemVkU3R5bGVzQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KG5ldyBXZWFrTWFwKCkpO1xuZXhwb3J0IHZhciBFdWlUaGVtZU1lbW9pemVkU3R5bGVzUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlUaGVtZU1lbW9pemVkU3R5bGVzUHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICAvLyBOb3RlOiB3ZSAqc2hvdWxkIG5vdCogdXNlIGB1c2VNZW1vYCBpbnN0ZWFkIG9mIGB1c2VTdGF0ZWAgaGVyZSwgYXMgdXNlTWVtbyBpcyBub3QgZ3VhcmFudGVlZFxuICAvLyBhbmQgaXRzIGNhY2hlIGNhbiBnZXQgdGhyb3duIGF3YXkgYnkgUmVhY3QgKGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VNZW1vI2NhdmVhdHMpXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShuZXcgV2Vha01hcCgpKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBjb21wb25lbnRTdHlsZXMgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHJlcmVuZGVyU3R5bGVzID0gX3VzZVN0YXRlMlsxXTtcblxuICAvLyBPbiB0aGVtZSB1cGRhdGUsIHdpcGUgdGhlIG1hcCwgd2hpY2ggY2F1c2VzIHRoZSBiZWxvdyBob29rIHRvIHJlY29tcHV0ZSBhbGwgc3R5bGVzXG4gIHZhciBfdXNlRXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpLFxuICAgIGV1aVRoZW1lID0gX3VzZUV1aVRoZW1lLmV1aVRoZW1lO1xuICB1c2VVcGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJlcmVuZGVyU3R5bGVzKG5ldyBXZWFrTWFwKCkpO1xuICB9LCBbZXVpVGhlbWVdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGhlbWVNZW1vaXplZFN0eWxlc0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29tcG9uZW50U3R5bGVzXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgdXRpbCBwcmltYXJpbHkgcmVzcG9uc2libGUgZm9yIGdldHRpbmcgdGhlIG1lbW9pemVkIHN0eWxlcyAoaWYgdGhleSBleGlzdClcbiAqIGFuZCBpZiBub3QsIGdlbmVyYXRpbmcgYW5kIHNldHRpbmcgdGhlIHN0eWxlcy4gRFJZZWQgb3V0IHRvIGZhY2lsaXRhdGUgdXNhZ2VcbiAqIGJldHdlZW4gYm90aCBob29rL2Z1bmN0aW9uIGNvbXBvbmVudHMgYW5kIEhPQy9jbGFzcyBjb21wb25lbnRzXG4gKi9cbnZhciBnZXRNZW1vaXplZFN0eWxlcyA9IGZ1bmN0aW9uIGdldE1lbW9pemVkU3R5bGVzKHN0eWxlc0dlbmVyYXRvciwgc3R5bGVzTWFwLCBldWlUaGVtZUNvbnRleHQpIHtcbiAgaWYgKCFzdHlsZXNHZW5lcmF0b3IubmFtZSkge1xuICAgIGVtaXRFdWlQcm92aWRlcldhcm5pbmcoJ1N0eWxlcyBhcmUgbWVtb2l6ZWQgcGVyIGZ1bmN0aW9uLiBZb3VyIHN0eWxlIGZ1bmN0aW9ucyBtdXN0IGJlIHN0YXRpY2FsbHkgZGVmaW5lZCBpbiBvcmRlciB0byBub3QgY3JlYXRlIGEgbmV3IG1hcCBlbnRyeSBldmVyeSByZXJlbmRlci4nKTtcbiAgfVxuICB2YXIgZXhpc3RpbmdTdHlsZXMgPSBzdHlsZXNNYXAuZ2V0KHN0eWxlc0dlbmVyYXRvcik7XG4gIGlmIChleGlzdGluZ1N0eWxlcykge1xuICAgIHJldHVybiBleGlzdGluZ1N0eWxlcztcbiAgfSBlbHNlIHtcbiAgICB2YXIgZ2VuZXJhdGVkU3R5bGVzID0gc3R5bGVzR2VuZXJhdG9yKGV1aVRoZW1lQ29udGV4dCk7XG4gICAgc3R5bGVzTWFwLnNldChzdHlsZXNHZW5lcmF0b3IsIGdlbmVyYXRlZFN0eWxlcyk7XG4gICAgcmV0dXJuIGdlbmVyYXRlZFN0eWxlcztcbiAgfVxufTtcblxuLyoqXG4gKiBIb29rIHRoYXQgbWVtb2l6ZXMgdGhlIHJldHVybmVkIHZhbHVlcyBvZiBjb21wb25lbnRzIHN0eWxlIGZucy9nZW5lcmF0b3JzXG4gKiBwZXItdGhlbWVcbiAqL1xuZXhwb3J0IHZhciB1c2VFdWlNZW1vaXplZFN0eWxlcyA9IGZ1bmN0aW9uIHVzZUV1aU1lbW9pemVkU3R5bGVzKHN0eWxlc0dlbmVyYXRvcikge1xuICB2YXIgbWVtb2l6ZWRTdHlsZXMgPSB1c2VDb250ZXh0KEV1aVRoZW1lTWVtb2l6ZWRTdHlsZXNDb250ZXh0KTtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBtZW1vaXplZENvbXBvbmVudFN0eWxlcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXRNZW1vaXplZFN0eWxlcyhzdHlsZXNHZW5lcmF0b3IsIG1lbW9pemVkU3R5bGVzLCBldWlUaGVtZUNvbnRleHQpO1xuICB9LCBbc3R5bGVzR2VuZXJhdG9yLCBtZW1vaXplZFN0eWxlcywgZXVpVGhlbWVDb250ZXh0XSk7XG4gIHJldHVybiBtZW1vaXplZENvbXBvbmVudFN0eWxlcztcbn07XG5cbi8qKlxuICogSE9DIGZvciBjbGFzcyBjb21wb25lbnRzXG4gKiBTeW50YXggaXMgbW9zdGx5IGNvcGllZCBmcm9tIHdpdGhFdWlUaGVtZSBIT0NcbiAqL1xuXG5leHBvcnQgdmFyIHdpdGhFdWlTdHlsZXNNZW1vaXplciA9IGZ1bmN0aW9uIHdpdGhFdWlTdHlsZXNNZW1vaXplcihDb21wb25lbnQpIHtcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudFdpdGhTdHlsZXNNZW1vaXplcic7XG4gIHZhciBSZW5kZXIgPSBmdW5jdGlvbiBSZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciBtZW1vaXplZFN0eWxlcyA9IHVzZUNvbnRleHQoRXVpVGhlbWVNZW1vaXplZFN0eWxlc0NvbnRleHQpO1xuICAgIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICAgIHZhciBzdHlsZXNNZW1vaXplciA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChzdHlsZXNHZW5lcmF0b3IpIHtcbiAgICAgIHJldHVybiBnZXRNZW1vaXplZFN0eWxlcyhzdHlsZXNHZW5lcmF0b3IsIG1lbW9pemVkU3R5bGVzLCBldWlUaGVtZUNvbnRleHQpO1xuICAgIH0sIFttZW1vaXplZFN0eWxlcywgZXVpVGhlbWVDb250ZXh0XSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICBzdHlsZXNNZW1vaXplcjogc3R5bGVzTWVtb2l6ZXIsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07XG4gIHZhciBXaXRoRXVpU3R5bGVzTWVtb2l6ZXIgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihSZW5kZXIpO1xuICBXaXRoRXVpU3R5bGVzTWVtb2l6ZXIuZGlzcGxheU5hbWUgPSBjb21wb25lbnROYW1lO1xuICByZXR1cm4gV2l0aEV1aVN0eWxlc01lbW9pemVyO1xufTtcblxuLyoqXG4gKiBSZW5kZXIgcHJvcCBhbHRlcm5hdGl2ZSBmb3IgY29tcGxleCBjbGFzcyBjb21wb25lbnRzXG4gKiBNb3N0IHVzZWZ1bCBmb3Igc2NlbmFyaW9zIHdoZXJlIGEgSE9DIG1heSBpbnRlcmZlcmUgd2l0aCB0eXBpbmdcbiAqL1xuZXhwb3J0IHZhciBSZW5kZXJXaXRoRXVpU3R5bGVzTWVtb2l6ZXIgPSBmdW5jdGlvbiBSZW5kZXJXaXRoRXVpU3R5bGVzTWVtb2l6ZXIoX3JlZjIpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW47XG4gIHZhciBtZW1vaXplZFN0eWxlcyA9IHVzZUNvbnRleHQoRXVpVGhlbWVNZW1vaXplZFN0eWxlc0NvbnRleHQpO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlc01lbW9pemVyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHN0eWxlc0dlbmVyYXRvcikge1xuICAgIHJldHVybiBnZXRNZW1vaXplZFN0eWxlcyhzdHlsZXNHZW5lcmF0b3IsIG1lbW9pemVkU3R5bGVzLCBldWlUaGVtZUNvbnRleHQpO1xuICB9LCBbbWVtb2l6ZWRTdHlsZXMsIGV1aVRoZW1lQ29udGV4dF0pO1xuICByZXR1cm4gY2hpbGRyZW4oc3R5bGVzTWVtb2l6ZXIpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIHVzZVVwZGF0ZUVmZmVjdCA9IGZ1bmN0aW9uIHVzZVVwZGF0ZUVmZmVjdChlZmZlY3QsIGRlcHMpIHtcbiAgLy8gdXNlIHJlZiBpbnN0ZWFkIG9mIGEgc3RhdGUgdG8gYXZvaWQgY2F1c2luZyBhbiB1bm5lY2Vzc2FyeSByZS1yZW5kZXJcbiAgdmFyIGhhc01vdW50ZWQgPSB1c2VSZWYoZmFsc2UpO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIGRvbid0IGludm9rZSB0aGUgZWZmZWN0IG9uIGluaXRpYWwgbW91bnRcbiAgICBpZiAoaGFzTW91bnRlZC5jdXJyZW50ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZWZmZWN0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhc01vdW50ZWQuY3VycmVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBkZXBzKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuLypcbiAqIEZvciB1c2Ugd2hlbiBhIGNvbXBvbmVudCBuZWVkcyB0byBzZXQgYHJlZmAgb2JqZWN0cyBmcm9tIG11bHRpcGxlIHNvdXJjZXMuXG4gKiBGb3IgaW5zdGFuY2UsIGlmIGEgY29tcG9uZW50IGFjY2VwdHMgYSBgcmVmYCBwcm9wIGJ1dCBhbHNvIG5lZWRzIGl0cyBvd25cbiAqIGxvY2FsIHJlZmVyZW5jZSBmb3IgY2FsY3VsYXRpb25zLCBldGMuXG4gKiBUaGlzIGhvb2sgaGFuZGxlcyBzZXR0aW5nIG11bHRpcGxlIGByZWZgcyBvZiBhbnkgYXZhaWxhYmxlIGByZWZgIHR5cGVcbiAqIGluIGEgc2luZ2xlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdmFyIHVzZUNvbWJpbmVkUmVmcyA9IGZ1bmN0aW9uIHVzZUNvbWJpbmVkUmVmcyhyZWZzKSB7XG4gIHJldHVybiB1c2VDYWxsYmFjayhmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBzZXRNdWx0aXBsZVJlZnMocmVmcywgbm9kZSk7XG4gIH0sIFtyZWZzXSk7XG59O1xuXG4vKipcbiAqIE5vbi1ob29rIHV0aWwgZm9yIHNldHRpbmcgbXVsdGlwbGUgcmVmcy9yZWYgdHlwZXMuXG4gKiBVc2VmdWwgZm9yIG5vbi1mdW5jdGlvbmFsIGNvbXBvbmVudHNcbiAqL1xuZXhwb3J0IHZhciBzZXRNdWx0aXBsZVJlZnMgPSBmdW5jdGlvbiBzZXRNdWx0aXBsZVJlZnMocmVmcywgbm9kZSkge1xuICByZWZzLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgIGlmICghcmVmKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlZihub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVmLmN1cnJlbnQgPSBub2RlO1xuICAgIH1cbiAgfSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uL3RoZW1lJztcbmltcG9ydCB7IHVzZUN1cnJlbnRFdWlCcmVha3BvaW50IH0gZnJvbSAnLi9jdXJyZW50X2JyZWFrcG9pbnRfaG9vayc7XG5cbi8qKlxuICogR2l2ZW4gYW4gYXJyYXkgb2YgYnJlYWtwb2ludCBrZXlzLCB0aGlzIGhvb2sgcmV0dXJucyB0cnVlIG9yIGZhbHNlXG4gKiBpZiB0aGUgYnJlYWtwb2ludCBzaXplIG9mIHRoZSBjdXJyZW50IHdpbmRvdyB3aWR0aCBmYWxscyB3aXRoaW5cbiAqIGFueSBvZiB0aGUgbmFtZWQgYnJlYWtwb2ludHMuXG4gKlxuICogQHBhcmFtIHtFdWlUaGVtZUJyZWFrcG9pbnRbXX0gc2l6ZXMgQW4gYXJyYXkgb2YgbmFtZWQgRVVJIGJyZWFrcG9pbnRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzUmVzcG9uc2l2ZSBTb21lIGNvbXBvbmVudHMgaGF2ZSB0aGUgb3B0aW9uIHRvIHR1cm4gb2ZmIHJlc3BvbnNpdmUgYmVoYXZpb3IuXG4gKiAgIFNpbmNlIGhvb2tzIGNhbid0IGJlIGNhbGxlZCBjb25kaXRpb25hbGx5LCBpdCdzIGVhc2llciB0byBwYXNzIHRoZSBjb25kaXRpb24gaW50byB0aGUgaG9va1xuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGN1cnJlbnQgYnJlYWtwb2ludCBuYW1lIGlzIGluY2x1ZGVkIGluIGBzaXplc2BcbiAqL1xuZXhwb3J0IHZhciB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzID0gZnVuY3Rpb24gdXNlSXNXaXRoaW5CcmVha3BvaW50cyhzaXplcykge1xuICB2YXIgaXNSZXNwb25zaXZlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICB2YXIgY3VycmVudEJyZWFrcG9pbnQgPSB1c2VDdXJyZW50RXVpQnJlYWtwb2ludCgpO1xuICByZXR1cm4gY3VycmVudEJyZWFrcG9pbnQgJiYgaXNSZXNwb25zaXZlID8gc2l6ZXMuaW5jbHVkZXMoY3VycmVudEJyZWFrcG9pbnQpIDogZmFsc2U7XG59O1xuXG4vKipcbiAqIEdpdmVuIGEgbWF4IGJyZWFrcG9pbnQga2V5LCB0aGlzIGhvb2sgcmV0dXJucyB0cnVlIGlmIHRoZSBicmVha3BvaW50IHNpemVcbiAqIG9mIHRoZSBjdXJyZW50IHdpbmRvdyB3aWR0aCBmYWxscyB3aXRoaW4gdGhlIG1heCBicmVha3BvaW50IG9yIGFueSBiZWxvdyxcbiAqIGFuZCBmYWxzZSBvdGhlcndpc2VcbiAqXG4gKiBAcGFyYW0ge0V1aVRoZW1lQnJlYWtwb2ludH0gbWF4IFRoZSBuYW1lZCBtYXggYnJlYWtwb2ludCB0byBjaGVjayBhZ2FpbnN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2lsbCByZXR1cm4gYGZhbHNlYCBpZiBpdCBjYW4ndCBmaW5kIGEgdmFsdWUgZm9yIHRoZSBgbWF4YCBicmVha3BvaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJc1dpdGhpbk1heEJyZWFrcG9pbnQobWF4KSB7XG4gIHZhciBfdXNlRXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpLFxuICAgIGJyZWFrcG9pbnRzID0gX3VzZUV1aVRoZW1lLmV1aVRoZW1lLmJyZWFrcG9pbnQ7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IHVzZUN1cnJlbnRFdWlCcmVha3BvaW50KCk7XG4gIGlmIChjdXJyZW50QnJlYWtwb2ludCA9PSBudWxsIHx8IGJyZWFrcG9pbnRzW21heF0gPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gYnJlYWtwb2ludHNbY3VycmVudEJyZWFrcG9pbnRdIDw9IGJyZWFrcG9pbnRzW21heF07XG59XG5cbi8qKlxuICogR2l2ZW4gYSBtaW4gYnJlYWtwb2ludCBrZXksIHRoaXMgaG9vayByZXR1cm5zIHRydWUgaWYgdGhlIGJyZWFrcG9pbnQgc2l6ZVxuICogb2YgdGhlIGN1cnJlbnQgd2luZG93IHdpZHRoIGZhbGxzIHdpdGhpbiB0aGUgbWluIGJyZWFrcG9pbnQgb3IgYW55IGFib3ZlLFxuICogYW5kIGZhbHNlIG90aGVyd2lzZVxuICpcbiAqIEBwYXJhbSB7RXVpVGhlbWVCcmVha3BvaW50fSBtaW4gVGhlIG5hbWVkIG1pbiBicmVha3BvaW50IHRvIGNoZWNrIGFnYWluc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBXaWxsIHJldHVybiBgZmFsc2VgIGlmIGl0IGNhbid0IGZpbmQgYSB2YWx1ZSBmb3IgdGhlIGBtaW5gIGJyZWFrcG9pbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlzV2l0aGluTWluQnJlYWtwb2ludChtaW4pIHtcbiAgdmFyIF91c2VFdWlUaGVtZTIgPSB1c2VFdWlUaGVtZSgpLFxuICAgIGJyZWFrcG9pbnRzID0gX3VzZUV1aVRoZW1lMi5ldWlUaGVtZS5icmVha3BvaW50O1xuICB2YXIgY3VycmVudEJyZWFrcG9pbnQgPSB1c2VDdXJyZW50RXVpQnJlYWtwb2ludCgpO1xuICBpZiAoY3VycmVudEJyZWFrcG9pbnQgPT0gbnVsbCB8fCBicmVha3BvaW50c1ttaW5dID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGJyZWFrcG9pbnRzW2N1cnJlbnRCcmVha3BvaW50XSA+PSBicmVha3BvaW50c1ttaW5dO1xufSIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBDYW52YXMgZWxlbWVudCBmb3IgbWFuaXB1bGF0aW5nIHRleHQgJiBkZXRlcm1pbmluZyB0ZXh0IHdpZHRoLlxuICpcbiAqIFRvIGFjY3VyYXRlbHkgbWVhc3VyZSB0ZXh0LCBjYW52YXMgcmVuZGVyaW5nIHJlcXVpcmVzIGVpdGhlciBhIGNvbnRhaW5lciB0b1xuICogY29tcHV0ZS9kZXJpdmUgZm9udCBzdHlsZXMgZnJvbSwgb3IgYSBzdGF0aWMgZm9udCBzdHJpbmcgKHVzZWZ1bCBmb3IgdXNhZ2VcbiAqIG91dHNpZGUgdGhlIERPTSkuIFBhcnRpY3VsYXIgY2FyZSBzaG91bGQgYmUgYXBwbGllZCB3aGVuIGZhbGxiYWNrIGZvbnRzIGFyZVxuICogdXNlZCwgYXMgbW9yZSBmYWxsYmFjayBmb250cyBjYW4gbGVhZCB0byBsZXNzIHByZWNpc2lvbi5cbiAqXG4gKiBQbGVhc2Ugbm90ZSB0aGF0IHdoaWxlIGNhbnZhcyBpcyBtb3JlIHNpZ25pZmljYW50bHkgbW9yZSBwZXJmb3JtYW50IHRoYW4gRE9NXG4gKiBtZWFzdXJlbWVudCwgdGhlcmUgYXJlIHN1YnBpeGVsIHRvIHNpbmdsZSBkaWdpdCBwaXhlbCBkaWZmZXJlbmNlcyBiZXR3ZWVuXG4gKiBET00gYW5kIGNhbnZhcyBtZWFzdXJlbWVudCBkdWUgdG8gdGhlIGRpZmZlcmVudCByZW5kZXJpbmcgZW5naW5lcyB1c2VkLlxuICovXG5leHBvcnQgdmFyIENhbnZhc1RleHRVdGlscyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENhbnZhc1RleHRVdGlscyhfcmVmKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgZm9udCA9IF9yZWYuZm9udCxcbiAgICAgIGNvbnRhaW5lciA9IF9yZWYuY29udGFpbmVyO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDYW52YXNUZXh0VXRpbHMpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbnRleHRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjdXJyZW50VGV4dFwiLCAnJyk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29tcHV0ZUZvbnRGcm9tRWxlbWVudFwiLCBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgdmFyIGNvbXB1dGVkU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgICAvLyBUT0RPOiBmb250LXN0cmV0Y2ggaXMgbm90IGluY2x1ZGVkIGV2ZW4gdGhvdWdoIGl0IHBvdGVudGlhbGx5IHNob3VsZCBiZVxuICAgICAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZm9udCNjb25zdGl0dWVudF9wcm9wZXJ0aWVzXG4gICAgICAvLyBJdCBhcHBlYXJzIHRvIGJlIHVuc3VwcG9ydGVkIGFuZC9vciBicmVha3MgZm9udCBjb21wdXRhdGlvbiBpbiBjYW52YXNcbiAgICAgIHJldHVybiBbJ2ZvbnQtc3R5bGUnLCAnZm9udC12YXJpYW50JywgJ2ZvbnQtd2VpZ2h0JywgJ2ZvbnQtc2l6ZScsICdmb250LWZhbWlseSddLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICByZXR1cm4gY29tcHV0ZWRTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShwcm9wKTtcbiAgICAgIH0pLmpvaW4oJyAnKS50cmltKCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2V0VGV4dFRvQ2hlY2tcIiwgZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgIF90aGlzLmN1cnJlbnRUZXh0ID0gdGV4dDtcbiAgICB9KTtcbiAgICB0aGlzLmNvbnRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgLy8gU2V0IHRoZSBjYW52YXMgZm9udCB0byBlbnN1cmUgdGV4dCB3aWR0aCBjYWxjdWxhdGlvbnMgYXJlIGNvcnJlY3RcbiAgICBpZiAoZm9udCkge1xuICAgICAgdGhpcy5jb250ZXh0LmZvbnQgPSBmb250O1xuICAgIH0gZWxzZSBpZiAoY29udGFpbmVyKSB7XG4gICAgICB0aGlzLmNvbnRleHQuZm9udCA9IHRoaXMuY29tcHV0ZUZvbnRGcm9tRWxlbWVudChjb250YWluZXIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gX2NyZWF0ZUNsYXNzKENhbnZhc1RleHRVdGlscywgW3tcbiAgICBrZXk6IFwidGV4dFdpZHRoXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHRoaXMuY3VycmVudFRleHQpLndpZHRoO1xuICAgIH1cbiAgfV0pO1xufSgpOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIENsaXBib2FyZCB0ZXh0IGNsZWFuaW5nIGxvZ2ljXG4gKi9cblxuLy8gU3BlY2lhbCB2aXN1YWxseSBoaWRkZW4gdW5pY29kZSBjaGFyYWN0ZXJzIHRoYXQgd2UgdXNlIHRvIG1hbnVhbGx5IGNsZWFuIGNvbnRlbnRcbi8vIGFuZCBmb3JjZSBvdXIgb3duIG5ld2xpbmVzL2hvcml6b250YWwgdGFic1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ0hBUlMgPSB7XG4gIE5FV0xJTkU6ICdcdTIxQjUnLFxuICBUQUI6ICdcdTIxQTYnLFxuICAvLyBVc2UgbXVsdGlwbGUgY2hhcmFjdGVycyB0byByZWR1Y2UgdGhlIGNoYW5jZXMgb2YgY29uc3VtZXJzIGFsc28gdXNpbmcgdGhlc2UgY2hhcmFjdGVyc1xuICBUQUJVTEFSX0NPTlRFTlRfQk9VTkQ6ICdcdUQ4MDFcdURFMDJcdUQ4MDFcdURFMDInLFxuICBOT19DT1BZX0JPVU5EOiAnXHUyNzA0XHVEODAxXHVERTE3J1xufTtcbi8vIFRoaXMgcmVnZXggZmluZHMgYWxsIGNvbnRlbnQgYmV0d2VlbiB0d28gYm91bmRzXG52YXIgbm9Db3B5Qm91bmRzUmVnZXggPSBuZXcgUmVnRXhwKFwiXCIuY29uY2F0KENIQVJTLk5PX0NPUFlfQk9VTkQsIFwiW15cIikuY29uY2F0KENIQVJTLk5PX0NPUFlfQk9VTkQsIFwiXSpcIikuY29uY2F0KENIQVJTLk5PX0NPUFlfQk9VTkQpLCAnZ3MnKTtcbnZhciBoYXNDaGFyc1RvUmVwbGFjZSA9IGZ1bmN0aW9uIGhhc0NoYXJzVG9SZXBsYWNlKHRleHQpIHtcbiAgZm9yICh2YXIgX2kgPSAwLCBfT2JqZWN0JHZhbHVlcyA9IE9iamVjdC52YWx1ZXMoQ0hBUlMpOyBfaSA8IF9PYmplY3QkdmFsdWVzLmxlbmd0aDsgX2krKykge1xuICAgIHZhciBjaGFyID0gX09iamVjdCR2YWx1ZXNbX2ldO1xuICAgIGlmICh0ZXh0LmluZGV4T2YoY2hhcikgPj0gMCkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gU3RyaXAgYWxsIGV4aXN0aW5nIG5ld2xpbmVzIGFuZCByZXBsYWNlIG91ciBzcGVjaWFsIGhpZGRlbiBjaGFyYWN0ZXJzXG4vLyB3aXRoIHRoZSBkZXNpcmVkIHNwYWNpbmcgbmVlZGVkIHRvIHBhc3RlIGNsZWFubHkgaW50byBhIHNwcmVhZHNoZWV0XG5leHBvcnQgdmFyIG9uVGFidWxhckNvcHkgPSBmdW5jdGlvbiBvblRhYnVsYXJDb3B5KGV2ZW50KSB7XG4gIHZhciBfd2luZG93JGdldFNlbGVjdGlvbjtcbiAgaWYgKCFldmVudC5jbGlwYm9hcmREYXRhKSByZXR1cm47XG4gIHZhciBzZWxlY3RlZFRleHQgPSAoX3dpbmRvdyRnZXRTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkpID09PSBudWxsIHx8IF93aW5kb3ckZ2V0U2VsZWN0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfd2luZG93JGdldFNlbGVjdGlvbi50b1N0cmluZygpO1xuICBpZiAoIXNlbGVjdGVkVGV4dCB8fCAhaGFzQ2hhcnNUb1JlcGxhY2Uoc2VsZWN0ZWRUZXh0KSkgcmV0dXJuO1xuICB2YXIgYW1lbmRlZFRleHQgPSBzZWxlY3RlZFRleHQuc3BsaXQoQ0hBUlMuVEFCVUxBUl9DT05URU5UX0JPVU5EKS5tYXAoZnVuY3Rpb24gKHRleHQpIHtcbiAgICByZXR1cm4gaGFzQ2hhcnNUb1JlcGxhY2UodGV4dCkgPyB0ZXh0LnJlcGxhY2UoL1xccj9cXG4vZywgJycpIC8vIHJlbW92ZSBhbGwgb3RoZXIgbmV3bGluZXMgZ2VuZXJhdGVkIGJ5IGNvbnRlbnQgb3IgYmxvY2sgZGlzcGxheVxuICAgIC5yZXBsYWNlQWxsKENIQVJTLk5FV0xJTkUsICdcXG4nKSAvLyBpbnNlcnQgbmV3bGluZSBmb3IgZWFjaCB0YWJsZS9ncmlkIHJvd1xuICAgIC5yZXBsYWNlKC9cXHQvZywgJycpIC8vIHJlbW92ZSB0YWJzIGdlbmVyYXRlZCBieSBjb250ZW50IG9yIGF1dG9tYXRpY2FsbHkgYnkgPHRkPiBlbGVtZW50c1xuICAgIC5yZXBsYWNlQWxsKENIQVJTLlRBQiwgXCJcXHRcIikgLy8gaW5zZXJ0IGhvcml6b250YWwgdGFiIGZvciBlYWNoIHRhYmxlL2dyaWQgY2VsbFxuICAgIC5yZXBsYWNlKG5vQ29weUJvdW5kc1JlZ2V4LCAnJykgLy8gcmVtb3ZlIHRleHQgdGhhdCBzaG91bGQgbm90IGJlIGNvcGllZCAoZS5nLiBzY3JlZW4gcmVhZGVyIGluc3RydWN0aW9ucylcbiAgICA6IHRleHQ7XG4gIH0pLmpvaW4oJycpO1xuICBldmVudC5jbGlwYm9hcmREYXRhLnNldERhdGEoJ3RleHQvcGxhaW4nLCBhbWVuZGVkVGV4dCk7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEpTWCB1dGlscyBmb3IgcmVuZGVyaW5nIHRoZSBoaWRkZW4gbWFya2VyIGNoYXJhY3RlcnNcbiAqL1xuXG52YXIgVmlzdWFsbHlIaWRlID0gZnVuY3Rpb24gVmlzdWFsbHlIaWRlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ3RydWUnIDogX3JlZiR0eXBlO1xuICByZXR1cm4gKFxuICAgIC8vIEhpZGVzIHRoZSBjaGFyYWN0ZXJzIHRvIGJvdGggc2lnaHRlZCB1c2VyIGFuZCBzY3JlZW4gcmVhZGVyc1xuICAgIC8vIFNhZGx5LCB3ZSBjYW4ndCB1c2UgYGhpZGRlbmAgYXMgdGhhdCBoaWRlcyB0aGUgY2hhcnMgZnJvbSB0aGUgY2xpcGJvYXJkIGFzIHdlbGxcbiAgICBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpU2NyZWVuUmVhZGVyT25seVwiLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgXCJkYXRhLXRhYnVsYXItY29weS1tYXJrZXJcIjogdHlwZVxuICAgIH0sIGNoaWxkcmVuKVxuICApO1xufTtcbmV4cG9ydCB2YXIgdGFidWxhckNvcHlNYXJrZXJzID0ge1xuICBoaWRkZW5UYWI6IF9fX0Vtb3Rpb25KU1goVmlzdWFsbHlIaWRlLCB7XG4gICAgdHlwZTogXCJ0YWJcIlxuICB9LCBDSEFSUy5UQUIpLFxuICBoaWRkZW5OZXdsaW5lOiBfX19FbW90aW9uSlNYKFZpc3VhbGx5SGlkZSwge1xuICAgIHR5cGU6IFwibmV3bGluZVwiXG4gIH0sIENIQVJTLk5FV0xJTkUpLFxuICBoaWRkZW5XcmFwcGVyQm91bmRhcnk6IF9fX0Vtb3Rpb25KU1goVmlzdWFsbHlIaWRlLCB7XG4gICAgdHlwZTogXCJib3VuZGFyeVwiXG4gIH0sIENIQVJTLlRBQlVMQVJfQ09OVEVOVF9CT1VORCksXG4gIGhpZGRlbk5vQ29weUJvdW5kYXJ5OiBfX19FbW90aW9uSlNYKFZpc3VhbGx5SGlkZSwge1xuICAgIHR5cGU6IFwibm8tY29weVwiXG4gIH0sIENIQVJTLk5PX0NPUFlfQk9VTkQpXG59O1xuXG4vKipcbiAqIFdyYXBwZXIgc2V0dXAgYXJvdW5kIHRhYmxlL2dyaWQgdGFidWxhciBjb250ZW50IHdlIHdhbnQgdG8gb3ZlcnJpZGUvY2xlYW4gdXAgb24gY29weVxuICovXG5cbmV4cG9ydCB2YXIgT3ZlcnJpZGVDb3BpZWRUYWJ1bGFyQ29udGVudCA9IGZ1bmN0aW9uIE92ZXJyaWRlQ29waWVkVGFidWxhckNvbnRlbnQoX3JlZjIpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW47XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgLy8gQ2hyb21lIGFuZCB3ZWJraXQgYnJvd3NlcnMgd29yayBwZXJmZWN0bHkgd2hlbiBwYXNzaW5nIGBvblRhYnVsYXJDb3B5YCB0byBhIFJlYWN0XG4gICAgLy8gYG9uQ29weWAgcHJvcCwgYnV0IHNhZGx5IEZpcmVmb3ggZG9lcyBub3QgaWYgY29weWluZyBtb3JlIHRoYW4ganVzdCB0aGUgdGFibGUvZ3JpZFxuICAgIC8vIChlLmcuIEN0cmwrQSkuIFNvIHdlIGhhdmUgdG8gc2V0IHVwIGEgZ2xvYmFsIHdpbmRvdyBldmVudCBsaXN0ZW5lclxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb3B5Jywgb25UYWJ1bGFyQ29weSk7XG4gICAgLy8gTm90ZTogU2luY2Ugb25Db3B5IGlzIHN0YXRpYywgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBkdXBsaWNhdGVcbiAgICAvLyBldmVudCBsaXN0ZW5lcnMgLSBpdCdzIGF1dG9tYXRpY2FsbHkgaGFuZGxlZCBieSB0aGUgYnJvd3Nlci4gU2VlOlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudFRhcmdldC9hZGRFdmVudExpc3RlbmVyI011bHRpcGxlX2lkZW50aWNhbF9ldmVudF9saXN0ZW5lcnNcbiAgfSwgW10pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgdGFidWxhckNvcHlNYXJrZXJzLmhpZGRlbldyYXBwZXJCb3VuZGFyeSwgY2hpbGRyZW4sIHRhYnVsYXJDb3B5TWFya2Vycy5oaWRkZW5XcmFwcGVyQm91bmRhcnkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBBIERPTSBub2RlLCBhIHNlbGVjdG9yIHN0cmluZyAod2hpY2ggd2lsbCBiZSBwYXNzZWQgdG9cbiAqIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKClgIHRvIGZpbmQgdGhlIERPTSBub2RlKSwgb3IgYSBmdW5jdGlvbiB0aGF0XG4gKiByZXR1cm5zIGEgRE9NIG5vZGUuXG4gKi9cblxuZXhwb3J0IHZhciBmaW5kRWxlbWVudEJ5U2VsZWN0b3JPclJlZiA9IGZ1bmN0aW9uIGZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmKGVsZW1lbnRUYXJnZXQpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50VGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBlbGVtZW50VGFyZ2V0IDogbnVsbDtcbiAgaWYgKHR5cGVvZiBlbGVtZW50VGFyZ2V0ID09PSAnc3RyaW5nJykge1xuICAgIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnRUYXJnZXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50VGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbm9kZSA9IGVsZW1lbnRUYXJnZXQoKTtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmV4cG9ydCB2YXIgYWx3YXlzID0gZnVuY3Rpb24gYWx3YXlzKF92YWx1ZSkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5leHBvcnQgdmFyIG5ldmVyID0gZnVuY3Rpb24gbmV2ZXIoX3ZhbHVlKSB7XG4gIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnQgdmFyIGlzVW5kZWZpbmVkID0gZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59O1xuZXhwb3J0IHZhciBpc051bGwgPSBmdW5jdGlvbiBpc051bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufTtcbmV4cG9ydCB2YXIgaXNOaWwgPSBmdW5jdGlvbiBpc05pbCh2YWx1ZSkge1xuICByZXR1cm4gaXNVbmRlZmluZWQodmFsdWUpIHx8IGlzTnVsbCh2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc01vbWVudCA9IGZ1bmN0aW9uIGlzTW9tZW50KHZhbHVlKSB7XG4gIHJldHVybiBtb21lbnQuaXNNb21lbnQodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNEYXRlID0gZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJldHVybiBtb21lbnQuaXNEYXRlKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzRGF0ZUxpa2UgPSBmdW5jdGlvbiBpc0RhdGVMaWtlKHZhbHVlKSB7XG4gIHJldHVybiBpc01vbWVudCh2YWx1ZSkgfHwgaXNEYXRlKHZhbHVlKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBfaXNGdW5jdGlvbiBmcm9tICdsb2Rhc2gvaXNGdW5jdGlvbic7XG5pbXBvcnQgX2lzQXJyYXkgZnJvbSAnbG9kYXNoL2lzQXJyYXknO1xuaW1wb3J0IF9pc1N0cmluZyBmcm9tICdsb2Rhc2gvaXNTdHJpbmcnO1xuaW1wb3J0IF9pc0Jvb2xlYW4gZnJvbSAnbG9kYXNoL2lzQm9vbGVhbic7XG5pbXBvcnQgX2lzTnVtYmVyIGZyb20gJ2xvZGFzaC9pc051bWJlcic7XG5pbXBvcnQgX2lzTmFOIGZyb20gJ2xvZGFzaC9pc05hTic7XG5pbXBvcnQgX2lzT2JqZWN0IGZyb20gJ2xvZGFzaC9pc09iamVjdCc7XG5cbi8vIHdyYXAgdGhlIGxvZGFzaCBmdW5jdGlvbnMgdG8gYXZvaWQgaGF2aW5nIGxvZGFzaCdzIFRTIHR5cGUgZGVmaW5pdGlvbiBmcm9tIGJlaW5nXG4vLyBleHBvcnRlZCwgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggdGhlIGxvZGFzaCBuYW1lc3BhY2UgaWYgb3RoZXIgdmVyc2lvbnMgYXJlIHVzZWRcblxuZXhwb3J0IHZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gX2lzRnVuY3Rpb24odmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIF9pc0FycmF5KHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzU3RyaW5nID0gZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIF9pc1N0cmluZyh2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc0Jvb2xlYW4gPSBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcbiAgcmV0dXJuIF9pc0Jvb2xlYW4odmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNOdW1iZXIgPSBmdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICByZXR1cm4gX2lzTnVtYmVyKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzTmFOID0gZnVuY3Rpb24gaXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIF9pc05hTih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBfaXNPYmplY3QodmFsdWUpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuZXhwb3J0IHZhciBmb3JtYXRCb29sZWFuID0gZnVuY3Rpb24gZm9ybWF0Qm9vbGVhbih2YWx1ZSkge1xuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX3JlZiR5ZXMgPSBfcmVmLnllcyxcbiAgICB5ZXMgPSBfcmVmJHllcyA9PT0gdm9pZCAwID8gJ1llcycgOiBfcmVmJHllcyxcbiAgICBfcmVmJG5vID0gX3JlZi5ubyxcbiAgICBubyA9IF9yZWYkbm8gPT09IHZvaWQgMCA/ICdObycgOiBfcmVmJG5vLFxuICAgIF9yZWYkbmlsID0gX3JlZi5uaWwsXG4gICAgbmlsID0gX3JlZiRuaWwgPT09IHZvaWQgMCA/ICcnIDogX3JlZiRuaWw7XG4gIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbmlsO1xuICB9XG4gIHJldHVybiB2YWx1ZSA/IHllcyA6IG5vO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBpc05pbCwgaXNGdW5jdGlvbiwgaXNTdHJpbmcgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xudmFyIGNhbGVuZGFyID0gZnVuY3Rpb24gY2FsZW5kYXIodmFsdWUpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgcmVmVGltZSA9IG9wdGlvbnMucmVmVGltZTtcbiAgcmV0dXJuIG1vbWVudCh2YWx1ZSkuY2FsZW5kYXIocmVmVGltZSwgb3B0aW9ucyk7XG59O1xuZXhwb3J0IHZhciBkYXRlRm9ybWF0QWxpYXNlcyA9IHtcbiAgZGF0ZTogJ0QgTU1NIFlZWVknLFxuICBsb25nRGF0ZTogJ0REIE1NTU0gWVlZWScsXG4gIHNob3J0RGF0ZTogJ0QgTU1NIFlZJyxcbiAgZGF0ZVRpbWU6ICdEIE1NTSBZWVlZIEhIOm1tJyxcbiAgbG9uZ0RhdGVUaW1lOiAnREQgTU1NTSBZWVlZIEhIOm1tOnNzJyxcbiAgc2hvcnREYXRlVGltZTogJ0QgTU1NIFlZIEhIOm1tJyxcbiAgZG9iU2hvcnQ6ICdEbyBNTU0gWVknLFxuICBkb2JMb25nOiAnRG8gTU1NTSBZWVlZJyxcbiAgaXNvODYwMTogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTWicsXG4gIGNhbGVuZGFyOiBjYWxlbmRhcixcbiAgY2FsZW5kYXJEYXRlVGltZTogZnVuY3Rpb24gY2FsZW5kYXJEYXRlVGltZSh2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBjYWxlbmRhcih2YWx1ZSwgX29iamVjdFNwcmVhZCh7XG4gICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBIOm1tQScsXG4gICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBIOm1tQScsXG4gICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBIOm1tQScsXG4gICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gSDptbUEnLFxuICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIEg6bW1BJyxcbiAgICAgIHNhbWVFbHNlOiAnRG8gTU1NIFlZWVkgW2F0XSBIOm1tQSdcbiAgICB9LCBvcHRpb25zKSk7XG4gIH0sXG4gIGNhbGVuZGFyRGF0ZTogZnVuY3Rpb24gY2FsZW5kYXJEYXRlKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNhbGVuZGFyKHZhbHVlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHNhbWVEYXk6ICdbVG9kYXldJyxcbiAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3ddJyxcbiAgICAgIG5leHRXZWVrOiAnZGRkZCcsXG4gICAgICBsYXN0RGF5OiAnW1llc3RlcmRheV0nLFxuICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCcsXG4gICAgICBzYW1lRWxzZTogJ0RvIE1NTSBZWVlZJ1xuICAgIH0sIG9wdGlvbnMpKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGlzU3RyaW5nQURhdGVGb3JtYXQoeCkge1xuICByZXR1cm4gZGF0ZUZvcm1hdEFsaWFzZXMuaGFzT3duUHJvcGVydHkoeCk7XG59XG5mdW5jdGlvbiBpbnN0YW5jZU9mRm9ybWF0RGF0ZUNvbmZpZyh4KSB7XG4gIHJldHVybiBfdHlwZW9mKHgpID09PSAnb2JqZWN0JyAmJiAoeC5oYXNPd25Qcm9wZXJ0eSgnZm9ybWF0JykgfHwgeC5oYXNPd25Qcm9wZXJ0eSgnbmlsJykgfHwgeC5oYXNPd25Qcm9wZXJ0eSgnb3B0aW9ucycpKTtcbn1cbmV4cG9ydCB2YXIgZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uIGZvcm1hdERhdGUodmFsdWUpIHtcbiAgdmFyIGRhdGVGb3JtYXRLZXlPckNvbmZpZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2RhdGVUaW1lJztcbiAgaWYgKGlzU3RyaW5nKGRhdGVGb3JtYXRLZXlPckNvbmZpZykpIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHZhciBkYXRlRm9ybWF0U3RyT3JGdW5jID0gaXNTdHJpbmdBRGF0ZUZvcm1hdChkYXRlRm9ybWF0S2V5T3JDb25maWcpID8gZGF0ZUZvcm1hdEFsaWFzZXNbZGF0ZUZvcm1hdEtleU9yQ29uZmlnXSA6IGRhdGVGb3JtYXRLZXlPckNvbmZpZztcbiAgICBpZiAoaXNGdW5jdGlvbihkYXRlRm9ybWF0U3RyT3JGdW5jKSkge1xuICAgICAgcmV0dXJuIGRhdGVGb3JtYXRTdHJPckZ1bmModmFsdWUsIHt9KTtcbiAgICB9XG4gICAgaWYgKGlzU3RyaW5nKGRhdGVGb3JtYXRTdHJPckZ1bmMpKSB7XG4gICAgICByZXR1cm4gbW9tZW50KHZhbHVlKS5mb3JtYXQoZGF0ZUZvcm1hdFN0ck9yRnVuYyk7XG4gICAgfVxuICB9XG4gIGlmIChpbnN0YW5jZU9mRm9ybWF0RGF0ZUNvbmZpZyhkYXRlRm9ybWF0S2V5T3JDb25maWcpKSB7XG4gICAgdmFyIF9kYXRlRm9ybWF0S2V5T3JDb25maSA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5mb3JtYXQsXG4gICAgICBmb3JtYXQgPSBfZGF0ZUZvcm1hdEtleU9yQ29uZmkgPT09IHZvaWQgMCA/ICdkYXRlVGltZScgOiBfZGF0ZUZvcm1hdEtleU9yQ29uZmksXG4gICAgICBfZGF0ZUZvcm1hdEtleU9yQ29uZmkyID0gZGF0ZUZvcm1hdEtleU9yQ29uZmlnLm5pbCxcbiAgICAgIG5pbCA9IF9kYXRlRm9ybWF0S2V5T3JDb25maTIgPT09IHZvaWQgMCA/ICcnIDogX2RhdGVGb3JtYXRLZXlPckNvbmZpMixcbiAgICAgIG9wdGlvbnMgPSBkYXRlRm9ybWF0S2V5T3JDb25maWcub3B0aW9ucztcbiAgICB2YXIgZGF0ZUZvcm1hdCA9IGRhdGVGb3JtYXRBbGlhc2VzW2Zvcm1hdF0gfHwgZm9ybWF0O1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBuaWw7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGRhdGVGb3JtYXQpKSB7XG4gICAgICByZXR1cm4gZGF0ZUZvcm1hdCh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhkYXRlRm9ybWF0KSkge1xuICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSkuZm9ybWF0KGRhdGVGb3JtYXQpO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZm9ybWF0IHZhbHVlIHVzaW5nIGRhdGVGb3JtYXRLZXlPckNvbmZpZzogXCIuY29uY2F0KGRhdGVGb3JtYXRLZXlPckNvbmZpZykpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IG51bWVyYWwgZnJvbSAnbnVtZXJhbCc7XG5pbXBvcnQgeyBpc05pbCwgaXNTdHJpbmcgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xudmFyIG51bWJlckZvcm1hdEFsaWFzZXMgPSB7XG4gIGRlY2ltYWwxOiAnMCwwLjAnLFxuICBkZWNpbWFsMjogJzAsMC4wMCcsXG4gIGRlY2ltYWwzOiAnMCwwLjAwMCcsXG4gIG9yZGluYWw6ICcwbycsXG4gIGludGVnZXI6ICcwLDAnXG59O1xuZXhwb3J0IHZhciBmb3JtYXROdW1iZXIgPSBmdW5jdGlvbiBmb3JtYXROdW1iZXIodmFsdWUpIHtcbiAgdmFyIG51bWJlckZvcm1hdE9yQ29uZmlnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIGZvcm1hdDtcbiAgdmFyIG5pbCA9ICcnO1xuICB2YXIgcm91bmQ7XG4gIGlmIChpc1N0cmluZyhudW1iZXJGb3JtYXRPckNvbmZpZykpIHtcbiAgICBmb3JtYXQgPSBudW1iZXJGb3JtYXRPckNvbmZpZztcbiAgfSBlbHNlIHtcbiAgICBmb3JtYXQgPSBudW1iZXJGb3JtYXRPckNvbmZpZy5mb3JtYXQ7XG4gICAgbmlsID0gbnVtYmVyRm9ybWF0T3JDb25maWcubmlsIHx8ICcnO1xuICAgIHJvdW5kID0gbnVtYmVyRm9ybWF0T3JDb25maWcucm91bmQ7XG4gIH1cbiAgaWYgKCFmb3JtYXQpIHtcbiAgICByZXR1cm4gaXNOaWwodmFsdWUpID8gbmlsIDogdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuICB2YXIgcm91bmRpbmdGdW5jID0gcm91bmQgPyBNYXRoLnJvdW5kIDogTWF0aC5mbG9vcjtcbiAgdmFyIG51bWJlckZvcm1hdCA9IG51bWJlckZvcm1hdEFsaWFzZXNbZm9ybWF0XSB8fCBmb3JtYXQ7XG4gIHJldHVybiBpc05pbCh2YWx1ZSkgPyBuaWwgOiBudW1lcmFsKHZhbHVlKS5mb3JtYXQobnVtYmVyRm9ybWF0LCByb3VuZGluZ0Z1bmMpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuZXhwb3J0IHZhciBmb3JtYXRUZXh0ID0gZnVuY3Rpb24gZm9ybWF0VGV4dCh2YWx1ZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgIG5pbDogJydcbiAgfTtcbiAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/IG9wdGlvbnMubmlsIDogdmFsdWUudG9TdHJpbmcoKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGlzTmlsLCBpc0FycmF5LCBpc0Jvb2xlYW4sIGlzRGF0ZSwgaXNOYU4sIGlzTnVtYmVyLCBpc1N0cmluZyB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG5pbXBvcnQgeyBmb3JtYXRCb29sZWFuIH0gZnJvbSAnLi9mb3JtYXRfYm9vbGVhbic7XG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnLi9mb3JtYXRfZGF0ZSc7XG5pbXBvcnQgeyBmb3JtYXROdW1iZXIgfSBmcm9tICcuL2Zvcm1hdF9udW1iZXInO1xuaW1wb3J0IHsgZm9ybWF0VGV4dCB9IGZyb20gJy4vZm9ybWF0X3RleHQnO1xuZXhwb3J0IHZhciBmb3JtYXRBdXRvID0gZnVuY3Rpb24gZm9ybWF0QXV0byh2YWx1ZSkge1xuICBpZiAoaXNOaWwodmFsdWUpIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdFRleHQodmFsdWUpO1xuICB9XG4gIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUpO1xuICB9XG4gIGlmIChpc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdEJvb2xlYW4odmFsdWUpO1xuICB9XG4gIGlmIChpc051bWJlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlKTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBmb3JtYXRBdXRvKGl0ZW0pO1xuICAgIH0pLmpvaW4oJywgJykgOiBmb3JtYXRBdXRvKHZhbHVlKTtcbiAgfVxuXG4gIC8vIFRPRE8gbm90IHN1cmUgaWYgd2Ugd2FudCB0aGF0Li4gdGhlICgrKSBpcyB0aGF0IHdlIHNob3cgc29tZXRoaW5nLCB0aGUgKC0pIGlzIHRoYXQgaXQncyB2ZXJ5IHRlY2huaWNhbFxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIFBPU0lUSU9OUyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XG52YXIgcmVsYXRlZERpbWVuc2lvbiA9IHtcbiAgdG9wOiAnaGVpZ2h0JyxcbiAgcmlnaHQ6ICd3aWR0aCcsXG4gIGJvdHRvbTogJ2hlaWdodCcsXG4gIGxlZnQ6ICd3aWR0aCdcbn07XG52YXIgZGltZW5zaW9uUG9zaXRpb25BdHRyaWJ1dGUgPSB7XG4gIGhlaWdodDogJ3RvcCcsXG4gIHdpZHRoOiAnbGVmdCdcbn07XG52YXIgcG9zaXRpb25Db21wbGVtZW50cyA9IHtcbiAgdG9wOiAnYm90dG9tJyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgbGVmdDogJ3JpZ2h0J1xufTtcblxuLy8gYWx3YXlzIHJlc29sdmluZyB0byB0b3AvbGVmdCBpcyB0YWtlbiBhZHZhbnRhZ2Ugb2YgYnkga25vd2luZyB0aGV5IGFyZSB0aGVcbi8vIG1pbmltdW0gZWRnZXMgb2YgdGhlIGJvdW5kaW5nIGJveFxudmFyIHBvc2l0aW9uU3Vic3RpdHV0ZXMgPSB7XG4gIHRvcDogJ2xlZnQnLFxuICByaWdodDogJ3RvcCcsXG4gIGJvdHRvbTogJ2xlZnQnLFxuICBsZWZ0OiAndG9wJ1xufTtcbnZhciBnZXRCdWZmZXJWYWx1ZXMgPSBmdW5jdGlvbiBnZXRCdWZmZXJWYWx1ZXMoYnVmZmVyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGJ1ZmZlcikpIHtcbiAgICB2YXIgX2J1ZmZlciA9IF9zbGljZWRUb0FycmF5KGJ1ZmZlciwgNCksXG4gICAgICB0b3BCdWZmZXIgPSBfYnVmZmVyWzBdLFxuICAgICAgcmlnaHRCdWZmZXIgPSBfYnVmZmVyWzFdLFxuICAgICAgYm90dG9tQnVmZmVyID0gX2J1ZmZlclsyXSxcbiAgICAgIGxlZnRCdWZmZXIgPSBfYnVmZmVyWzNdO1xuICAgIHJldHVybiBbdG9wQnVmZmVyLCByaWdodEJ1ZmZlciwgYm90dG9tQnVmZmVyLCBsZWZ0QnVmZmVyXTtcbiAgfVxuICByZXR1cm4gW2J1ZmZlciwgYnVmZmVyLCBidWZmZXIsIGJ1ZmZlcl07XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFic29sdXRlIHBvc2l0aW9uaW5nIChyZWxhdGl2ZSB0byBkb2N1bWVudC5ib2R5KSB0byBwbGFjZSBhIHBvcG92ZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBhbmNob3Ige0hUTUxFbGVtZW50fSBFbGVtZW50IHRvIGFuY2hvciB0aGUgcG9wb3ZlciB0b1xuICogQHBhcmFtIHBvcG92ZXIge0hUTUxFbGVtZW50fSBFbGVtZW50IGNvbnRhaW5pbmcgdGhlIHBvcG92ZXIgY29udGVudFxuICogQHBhcmFtIHBvc2l0aW9uIHtzdHJpbmd9IFBvc2l0aW9uIHRoZSB1c2VyIHdhbnRzLiBPbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gW2ZvcmNlUG9zaXRpb25dIHtib29sZWFufSBJZiB0cnVlLCB1c2Ugb25seSB0aGUgcHJvdmlkZWQgYHBvc2l0aW9uYCB2YWx1ZSBhbmQgZG9uJ3QgdHJ5IGFueSBvdGhlciBwb3NpdGlvblxuICogQHBhcmFtIFthbGlnbl0ge3N0cmluZ30gQ3Jvc3MtYXhpcyBhbGlnbm1lbnQuIE9uZSBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEBwYXJhbSBbYnVmZmVyPTE2XSB7bnVtYmVyfSBNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBib3VuZGluZyBjb250YWluZXJcbiAqIEBwYXJhbSBbb2Zmc2V0PTBdIHtudW1iZXJ9IERpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBhbmNob3JcbiAqIEBwYXJhbSBbYWxsb3dDcm9zc0F4aXM9dHJ1ZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gYWxsb3cgdGhlIHBvcG92ZXIgdG8gYmUgcG9zaXRpb25lZCBvbiB0aGUgY3Jvc3MtYXhpc1xuICogQHBhcmFtIFtjb250YWluZXJdIHtIVE1MRWxlbWVudH0gRWxlbWVudCB0aGUgcG9wb3ZlciBtdXN0IGJlIGNvbnN0cmFpbmVkIHRvIGZpdCB3aXRoaW5cbiAqIEBwYXJhbSBbYXJyb3dDb25maWddIHt7YXJyb3dXaWR0aDogbnVtYmVyLCBhcnJvd0J1ZmZlcjogbnVtYmVyfX0gSWZcbiAqICBwcmVzZW50LCBkZXNjcmliZXMgdGhlIHNpemUgJiBjb25zdHJhaW50cyBmb3IgYW4gYXJyb3cgZWxlbWVudCwgYW5kIHRoZVxuICogIGZ1bmN0aW9uIHJldHVybiB2YWx1ZSB3aWxsIGluY2x1ZGUgYW4gYGFycm93YCBwYXJhbSB3aXRoIHBvc2l0aW9uIGRldGFpbHNcbiAqXG4gKiBAcmV0dXJucyB7RmluZFBvcG92ZXJQb3NpdGlvblJlc3VsdH0gYWJzb2x1dGUgcGFnZSBjb29yZGluYXRlcyBmb3IgdGhlXG4gKiBwb3BvdmVyLCBhbmQgdGhlIHBsYWNlbWVudCdzIHJlbGF0aW9uIHRvIHRoZSBhbmNob3Igb3IgdW5kZWZpbmVkXG4gKiB0aGVyZSdzIG5vIHJvb20uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUG9wb3ZlclBvc2l0aW9uKF9yZWYpIHtcbiAgdmFyIGFuY2hvciA9IF9yZWYuYW5jaG9yLFxuICAgIHBvcG92ZXIgPSBfcmVmLnBvcG92ZXIsXG4gICAgYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICBmb3JjZVBvc2l0aW9uID0gX3JlZi5mb3JjZVBvc2l0aW9uLFxuICAgIF9yZWYkYnVmZmVyID0gX3JlZi5idWZmZXIsXG4gICAgYnVmZmVyID0gX3JlZiRidWZmZXIgPT09IHZvaWQgMCA/IDE2IDogX3JlZiRidWZmZXIsXG4gICAgX3JlZiRvZmZzZXQgPSBfcmVmLm9mZnNldCxcbiAgICBvZmZzZXQgPSBfcmVmJG9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkb2Zmc2V0LFxuICAgIF9yZWYkYWxsb3dDcm9zc0F4aXMgPSBfcmVmLmFsbG93Q3Jvc3NBeGlzLFxuICAgIGFsbG93Q3Jvc3NBeGlzID0gX3JlZiRhbGxvd0Nyb3NzQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkYWxsb3dDcm9zc0F4aXMsXG4gICAgY29udGFpbmVyID0gX3JlZi5jb250YWluZXIsXG4gICAgYXJyb3dDb25maWcgPSBfcmVmLmFycm93Q29uZmlnLFxuICAgIHJldHVybkJvdW5kaW5nQm94ID0gX3JlZi5yZXR1cm5Cb3VuZGluZ0JveDtcbiAgLy8gZmluZCB0aGUgc2NyZWVuLXJlbGF0aXZlIGJvdW5kaW5nIGJveGVzIG9mIHRoZSBhbmNob3IsIHBvcG92ZXIsIGFuZCBjb250YWluZXJcbiAgdmFyIGFuY2hvckJvdW5kaW5nQm94ID0gZ2V0RWxlbWVudEJvdW5kaW5nQm94KGFuY2hvcik7XG4gIHZhciBwb3BvdmVyQm91bmRpbmdCb3ggPSBnZXRFbGVtZW50Qm91bmRpbmdCb3gocG9wb3Zlcik7XG5cbiAgLy8gY2FsY3VsYXRlIHRoZSB3aW5kb3cncyBib3VuZHNcbiAgLy8gd2luZG93Lihpbm5lcldpZHRofGlubmVySGVpZ2h0KSBkbyBub3QgYWNjb3VudCBmb3Igc2Nyb2xsYmFyc1xuICAvLyBzbyBwcmVmZXIgdGhlIGNsaWVudFdpZHRoL2NsaWVudEhlaWdodCBvZiB0aGUgRE9NIGlmIGF2YWlsYWJsZVxuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgdmFyIGRvY3VtZW50SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCB8fCB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gIHZhciB3aW5kb3dCb3VuZGluZ0JveCA9IHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IGRvY3VtZW50V2lkdGgsXG4gICAgYm90dG9tOiBkb2N1bWVudEhlaWdodCxcbiAgICBsZWZ0OiAwLFxuICAgIGhlaWdodDogZG9jdW1lbnRIZWlnaHQsXG4gICAgd2lkdGg6IGRvY3VtZW50V2lkdGhcbiAgfTtcblxuICAvLyBpZiBubyBjb250YWluZXIgZWxlbWVudCBpcyBnaXZlbiBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHdpbmRvdyB2aWV3cG9ydFxuICB2YXIgY29udGFpbmVyQm91bmRpbmdCb3ggPSBjb250YWluZXIgPyBnZXRFbGVtZW50Qm91bmRpbmdCb3goY29udGFpbmVyKSA6IHdpbmRvd0JvdW5kaW5nQm94O1xuXG4gIC8qKlxuICAgKiBgcG9zaXRpb25gIHdhcyBzcGVjaWZpZWQgYnkgdGhlIGZ1bmN0aW9uIGNhbGxlciBhbmQgaXMgYSBzdHJvbmcgaGludFxuICAgKiBhcyB0byB0aGUgcHJlZmVycmVkIGxvY2F0aW9uIG9mIHRoZSBwb3BvdmVyIHJlbGF0aXZlIHRvIHRoZSBhbmNob3IuXG4gICAqIEhvd2V2ZXIsIHdlIHN0cm9uZ2x5IHByZWZlciBzaG93aW5nIGFsbCBvZiB0aGUgcG9wb3ZlciBjb250ZW50IHdpdGhpblxuICAgKiB0aGUgd2luZG93K2NvbnRhaW5lciBib3VuZGFyeSBhbmQgd2lsbCBpdGVyYXRlIG92ZXIgdGhlIGZvdXJcbiAgICogcG9zc2libGUgc2lkZXMgdW50aWwgYSBwZXJmZWN0IGZpdCBpcyBsb2NhdGVkLiBJZiBub25lIG9mIHRoZSBsb2NhdGlvbnNcbiAgICogZnVsbHkgY29udGFpbiBwb3BvdmVyLCB0aGUgbG9jYXRpb24gd2l0aCB0aGUgYmVzdCBmaXQgaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIFRoaXMgYXBwcm9hY2ggZmlyc3QgY2hlY2tzIHRoZSBwcmVmZXJyZWQgYHBvc2l0aW9uYCwgdGhlbiBpdHMgb3Bwb3NpdGVcbiAgICogYWxvbmcgdGhlIHNhbWUgYXhpcywgbmV4dCBhIGxvY2F0aW9uIG9uIHRoZSBjcm9zcy1heGlzLCBhbmQgZmluYWxseSBpdFxuICAgKiB0ZXN0cyB0aGUgcmVtYWluaW5nIHBvc2l0aW9uLlxuICAgKlxuICAgKiBlLmcuXG4gICAqIGlmIHBvc2l0aW9uID0gXCJ0b3BcIiB0aGUgb3JkZXIgaXMgdG9wLCBib3R0b20sIGxlZnQgcmlnaHRcbiAgICogaWYgcG9zaXRpb24gPSBcInJpZ2h0XCIgdGhlIG9yZGVyIGlzIHJpZ2h0LCBsZWZ0LCB0b3AsIGJvdHRvbVxuICAgKi9cblxuICAvLyBUcnkgdGhlIHVzZXItZGVzaXJlZCBwb3NpdGlvbiBmaXJzdC5cbiAgdmFyIGl0ZXJhdGlvblBvc2l0aW9ucyA9IFtwb3NpdGlvbl07XG4gIC8vIGtlZXAgdXNlci1kZWZpbmVkIGFsaWdubWVudCBpbiB0aGUgb3JpZ2luYWwgcG9zaXRpb25zLlxuICB2YXIgaXRlcmF0aW9uQWxpZ25tZW50cyA9IFthbGlnbl07XG4gIGlmIChmb3JjZVBvc2l0aW9uICE9PSB0cnVlKSB7XG4gICAgaXRlcmF0aW9uUG9zaXRpb25zLnB1c2gocG9zaXRpb25Db21wbGVtZW50c1twb3NpdGlvbl0pOyAvLyBUcnkgdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24uXG4gICAgaXRlcmF0aW9uQWxpZ25tZW50cy5wdXNoKGFsaWduKTsgLy8ga2VlcCB1c2VyLWRlZmluZWQgYWxpZ25tZW50IGluIHRoZSBjb21wbGVtZW50YXJ5IHBvc2l0aW9uLlxuXG4gICAgaWYgKGFsbG93Q3Jvc3NBeGlzKSB7XG4gICAgICBpdGVyYXRpb25Qb3NpdGlvbnMucHVzaChwb3NpdGlvblN1YnN0aXR1dGVzW3Bvc2l0aW9uXSxcbiAgICAgIC8vIFN3aXRjaCB0byB0aGUgY3Jvc3MgYXhpcy5cbiAgICAgIHBvc2l0aW9uQ29tcGxlbWVudHNbcG9zaXRpb25TdWJzdGl0dXRlc1twb3NpdGlvbl1dIC8vIFRyeSB0aGUgY29tcGxlbWVudGFyeSBwb3NpdGlvbiBvbiB0aGUgY3Jvc3MgYXhpcy5cbiAgICAgICk7XG4gICAgICBpdGVyYXRpb25BbGlnbm1lbnRzLnB1c2godW5kZWZpbmVkLCB1bmRlZmluZWQpOyAvLyBkaXNjYXJkIGRlc2lyZWQgYWxpZ25tZW50IG9uIGNyb3NzLWF4aXNcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gcG9zaXRpb24gaXMgZm9yY2VkLCBpZiBpdCBjb25mbGljdHMgd2l0aCB0aGUgYWxpZ25tZW50IHRoZW4gcmVzZXQgYWxpZ24gdG8gYG51bGxgXG4gICAgLy8gZS5nLiBvcmlnaW5hbCBwbGFjZW1lbnQgcmVxdWVzdCBmb3IgYGRvd25MZWZ0YCBpcyBtb3ZlZCB0byB0aGUgYGxlZnRgIHNpZGUsIGZ1dHVyZSBjYWxsc1xuICAgIC8vIHdpbGwgcG9zaXRpb24gYW5kIGFsaWduIGBsZWZ0YCwgYW5kIGBsZWZ0TGVmdGAgaXMgbm90IGEgdmFsaWQgcGxhY2VtZW50XG4gICAgaWYgKHBvc2l0aW9uID09PSBhbGlnbiB8fCBhbGlnbiAhPT0gdW5kZWZpbmVkICYmIHBvc2l0aW9uID09PSBwb3NpdGlvbkNvbXBsZW1lbnRzW2FsaWduXSkge1xuICAgICAgaXRlcmF0aW9uQWxpZ25tZW50c1swXSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgdmFyIGJlc3RGaXQgPSB1bmRlZmluZWQ7XG4gIHZhciBiZXN0UG9zaXRpb24gPSBudWxsO1xuICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBpdGVyYXRpb25Qb3NpdGlvbnMubGVuZ3RoOyBpZHgrKykge1xuICAgIHZhciBpdGVyYXRpb25Qb3NpdGlvbiA9IGl0ZXJhdGlvblBvc2l0aW9uc1tpZHhdO1xuXG4gICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcG9zaXRpb24gd2l0aCBhIGJldHRlciBmaXQgdGhhbiB3ZSd2ZSBmb3VuZCBzbyBmYXIuXG4gICAgdmFyIHNjcmVlbkNvb3JkaW5hdGVzID0gZ2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzKHtcbiAgICAgIHBvc2l0aW9uOiBpdGVyYXRpb25Qb3NpdGlvbixcbiAgICAgIGFsaWduOiBpdGVyYXRpb25BbGlnbm1lbnRzW2lkeF0sXG4gICAgICBhbmNob3JCb3VuZGluZ0JveDogYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgICBwb3BvdmVyQm91bmRpbmdCb3g6IHBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIHdpbmRvd0JvdW5kaW5nQm94OiB3aW5kb3dCb3VuZGluZ0JveCxcbiAgICAgIGNvbnRhaW5lckJvdW5kaW5nQm94OiBjb250YWluZXJCb3VuZGluZ0JveCxcbiAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICBhcnJvd0NvbmZpZzogYXJyb3dDb25maWdcbiAgICB9KTtcbiAgICBpZiAoYmVzdEZpdCA9PT0gdW5kZWZpbmVkIHx8IHNjcmVlbkNvb3JkaW5hdGVzLmZpdCA+IGJlc3RGaXQpIHtcbiAgICAgIGJlc3RGaXQgPSBzY3JlZW5Db29yZGluYXRlcy5maXQ7XG4gICAgICBiZXN0UG9zaXRpb24gPSB7XG4gICAgICAgIGZpdDogc2NyZWVuQ29vcmRpbmF0ZXMuZml0LFxuICAgICAgICBwb3NpdGlvbjogaXRlcmF0aW9uUG9zaXRpb24sXG4gICAgICAgIHRvcDogc2NyZWVuQ29vcmRpbmF0ZXMudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0LFxuICAgICAgICBsZWZ0OiBzY3JlZW5Db29yZGluYXRlcy5sZWZ0ICsgd2luZG93LnBhZ2VYT2Zmc2V0LFxuICAgICAgICBhcnJvdzogc2NyZWVuQ29vcmRpbmF0ZXMuYXJyb3dcbiAgICAgIH07XG5cbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZm91bmQgdGhlIGlkZWFsIGZpdCwgdXNlIHRoYXQgcG9zaXRpb24uXG4gICAgICBpZiAoYmVzdEZpdCA9PT0gMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBoYXZlbid0IGltcHJvdmVkIHRoZSBmaXQsIHRoZW4gY29udGludWUgb24gYW5kIHRyeSBhIG5ldyBwb3NpdGlvbi5cbiAgfVxuICBpZiAoYmVzdFBvc2l0aW9uID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjYWxjdWxhdGUgYmVzdFBvc2l0aW9uJyk7XG4gIH1cbiAgaWYgKHJldHVybkJvdW5kaW5nQm94KSB7XG4gICAgYmVzdFBvc2l0aW9uLmFuY2hvckJvdW5kaW5nQm94ID0gYW5jaG9yQm91bmRpbmdCb3g7XG4gIH1cbiAgcmV0dXJuIGJlc3RQb3NpdGlvbjtcbn1cbi8qKlxuICogR2l2ZW4gYSB0YXJnZXQgcG9zaXRpb24gYW5kIHRoZSBwb3BvdmVyJ3Mgc3Vycm91bmRpbmcgY29udGV4dCwgcmV0dXJucyBlaXRoZXIgYW5cbiAqIG9iamVjdCB3aXRoIHt0b3AsIGxlZnR9IHNjcmVlbiBjb29yZGluYXRlcyBvciBgbnVsbGAgaWYgaXQncyBub3QgcG9zc2libGUgdG8gc2hvd1xuICogY29udGVudCBpbiB0aGUgdGFyZ2V0IHBvc2l0aW9uXG4gKiBAcGFyYW0gcG9zaXRpb24ge3N0cmluZ30gdGhlIHRhcmdldCBwb3NpdGlvbiwgb25lIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHBhcmFtIGFsaWduIHtzdHJpbmd9IHRhcmdldCBhbGlnbm1lbnQgb24gdGhlIGNyb3NzLWF4aXMsIG9uZSBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEBwYXJhbSBhbmNob3JCb3VuZGluZ0JveCB7T2JqZWN0fSBib3VuZGluZyBib3ggb2YgdGhlIGFuY2hvciBlbGVtZW50XG4gKiBAcGFyYW0gcG9wb3ZlckJvdW5kaW5nQm94IHtPYmplY3R9IGJvdW5kaW5nIGJveCBvZiB0aGUgcG9wb3ZlciBlbGVtZW50XG4gKiBAcGFyYW0gd2luZG93Qm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSB3aW5kb3dcbiAqIEBwYXJhbSBjb250YWluZXJCb3VuZGluZ0JveCB7T2JqZWN0fSBib3VuZGluZyBib3ggb2YgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFthcnJvd0NvbmZpZ10ge3thcnJvd1dpZHRoOiBudW1iZXIsIGFycm93QnVmZmVyOiBudW1iZXJ9fSBJZiBwcmVzZW50LCBkZXNjcmliZXMgdGhlIHNpemUgJlxuICogIGNvbnN0cmFpbnRzIGZvciBhbiBhcnJvdyBlbGVtZW50LCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybiB2YWx1ZSB3aWxsIGluY2x1ZGUgYW4gYGFycm93YCBwYXJhbVxuICogIHdpdGggcG9zaXRpb24gZGV0YWlsc1xuICogQHBhcmFtIFtvZmZzZXQ9MF0ge251bWJlcn0gRGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlciBhbmQgdGhlIGFuY2hvclxuICogQHBhcmFtIFtidWZmZXI9MF0ge251bWJlcn0gTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyJ3NcbiAqICBwbGFjZW1lbnQgYW5kIHRoZSBjb250YWluZXIgZWRnZVxuICpcbiAqIEByZXR1cm5zIHtHZXRQb3BvdmVyU2NyZWVuQ29vcmRpbmF0ZXNSZXN1bHR9XG4gKiAgb2JqZWN0IHdpdGggdG9wL2xlZnQgY29vcmRpbmF0ZXMsIHRoZSBwb3BvdmVyJ3MgcmVsYXRpdmUgcG9zaXRpb24gdG8gdGhlIGFuY2hvciwgYW5kIGhvdyB3ZWxsIHRoZVxuICogIHBvcG92ZXIgZml0cyBpbiB0aGUgbG9jYXRpb24gKDAuMCAtPiAxLjApIGNvb3JkaW5hdGVzIGFuZCB0aGUgcG9wb3ZlcidzIHJlbGF0aXZlIHBvc2l0aW9uLCBpZlxuICogIHRoZXJlIGlzIG5vIHJvb20gaW4gdGhpcyBwbGFjZW1lbnQgdGhlbiBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3BvdmVyU2NyZWVuQ29vcmRpbmF0ZXMoX3JlZjIpIHtcbiAgdmFyIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgYWxpZ24gPSBfcmVmMi5hbGlnbixcbiAgICBhbmNob3JCb3VuZGluZ0JveCA9IF9yZWYyLmFuY2hvckJvdW5kaW5nQm94LFxuICAgIHBvcG92ZXJCb3VuZGluZ0JveCA9IF9yZWYyLnBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICB3aW5kb3dCb3VuZGluZ0JveCA9IF9yZWYyLndpbmRvd0JvdW5kaW5nQm94LFxuICAgIGNvbnRhaW5lckJvdW5kaW5nQm94ID0gX3JlZjIuY29udGFpbmVyQm91bmRpbmdCb3gsXG4gICAgYXJyb3dDb25maWcgPSBfcmVmMi5hcnJvd0NvbmZpZyxcbiAgICBfcmVmMiRvZmZzZXQgPSBfcmVmMi5vZmZzZXQsXG4gICAgb2Zmc2V0ID0gX3JlZjIkb2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX3JlZjIkb2Zmc2V0LFxuICAgIF9yZWYyJGJ1ZmZlciA9IF9yZWYyLmJ1ZmZlcixcbiAgICBidWZmZXIgPSBfcmVmMiRidWZmZXIgPT09IHZvaWQgMCA/IDAgOiBfcmVmMiRidWZmZXI7XG4gIC8qKlxuICAgKiBUaGUgZ29hbCBpcyB0byBmaW5kIHRoZSBiZXN0IHdheSB0byBhbGlnbiB0aGUgcG9wb3ZlciBjb250ZW50XG4gICAqIG9uIHRoZSBnaXZlbiBzaWRlIG9mIHRoZSBhbmNob3IgZWxlbWVudC4gVGhlIHBvcG92ZXIgcHJlZmVyc1xuICAgKiBjZW50ZXJpbmcgb24gdGhlIGFuY2hvciBidXQgY2FuIHNoaWZ0IGFsb25nIHRoZSBjcm9zcy1heGlzIGFzIG5lZWRlZC5cbiAgICpcbiAgICogV2UgcmV0dXJuIHRoZSB0b3AvbGVmdCBjb29yZGluYXRlcyB0aGF0IGJlc3QgZml0IHRoZSBwb3BvdmVyIGluc2lkZVxuICAgKiB0aGUgZ2l2ZW4gYm91bmRhcmllcywgYW5kIGFsc28gcmV0dXJuIHRoZSBgZml0YCB2YWx1ZSB3aGljaCBpbmRpY2F0ZXNcbiAgICogd2hhdCBwZXJjZW50YWdlIG9mIHRoZSBwb3BvdmVyIGlzIHdpdGhpbiB0aGUgYm91bmRzLlxuICAgKlxuICAgKiBlLmcuIGZpbmRpbmcgYSBsb2NhdGlvbiB3aGVuIHBvc2l0aW9uPXRvcFxuICAgKiB0aGUgcHJlZmVycmVkIGxvY2F0aW9uIGlzIGRpcmVjdGx5IG92ZXIgdGhlIGFuY2hvclxuICAgKlxuICAgKiAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICB8ICAgICAgIHBvcG92ZXIgICAgICAgIHxcbiAgICogICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgICAgICAgICAgICB2XG4gICAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgICAgIHwgICAgYW5jaG9yICAgIHxcbiAgICogICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rXG4gICAqXG4gICAqIGJ1dCBpZiBhbmNob3IgZG9lc24ndCBoYXZlIG11Y2ggKG9yIGFueSkgcm9vbSBvbiBpdHMgcmlkZSBzaWRlXG4gICAqIHRoZSBwb3BvdmVyIHdpbGwgc2hpZnQgdG8gdGhlIGxlZnRcbiAgICpcbiAgICogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgIHwgICAgICAgcG9wb3ZlciAgICAgICAgfFxuICAgKiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICAgICAgICAgdlxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICB8ICAgIGFuY2hvciAgICB8XG4gICAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKlxuICAgKi9cblxuICB2YXIgY3Jvc3NBeGlzRmlyc3RTaWRlID0gcG9zaXRpb25TdWJzdGl0dXRlc1twb3NpdGlvbl07IC8vIFwidG9wXCIgLT4gXCJsZWZ0XCJcbiAgdmFyIGNyb3NzQXhpc1NlY29uZFNpZGUgPSBwb3NpdGlvbkNvbXBsZW1lbnRzW2Nyb3NzQXhpc0ZpcnN0U2lkZV07IC8vIFwibGVmdFwiIC0+IFwicmlnaHRcIlxuICB2YXIgY3Jvc3NBeGlzRGltZW5zaW9uID0gcmVsYXRlZERpbWVuc2lvbltjcm9zc0F4aXNGaXJzdFNpZGVdOyAvLyBcImxlZnRcIiAtPiBcIndpZHRoXCJcblxuICB2YXIgX2dldEJ1ZmZlclZhbHVlcyA9IGdldEJ1ZmZlclZhbHVlcyhidWZmZXIpLFxuICAgIF9nZXRCdWZmZXJWYWx1ZXMyID0gX3NsaWNlZFRvQXJyYXkoX2dldEJ1ZmZlclZhbHVlcywgNCksXG4gICAgdG9wQnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczJbMF0sXG4gICAgcmlnaHRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzMlsxXSxcbiAgICBib3R0b21CdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzMlsyXSxcbiAgICBsZWZ0QnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczJbM107XG4gIHZhciBfZ2V0Q3Jvc3NBeGlzUG9zaXRpb24gPSBnZXRDcm9zc0F4aXNQb3NpdGlvbih7XG4gICAgICBjcm9zc0F4aXNGaXJzdFNpZGU6IGNyb3NzQXhpc0ZpcnN0U2lkZSxcbiAgICAgIGNyb3NzQXhpc1NlY29uZFNpZGU6IGNyb3NzQXhpc1NlY29uZFNpZGUsXG4gICAgICBjcm9zc0F4aXNEaW1lbnNpb246IGNyb3NzQXhpc0RpbWVuc2lvbixcbiAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgIGFsaWduOiBhbGlnbixcbiAgICAgIGJ1ZmZlcjogYnVmZmVyLFxuICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICB3aW5kb3dCb3VuZGluZ0JveDogd2luZG93Qm91bmRpbmdCb3gsXG4gICAgICBjb250YWluZXJCb3VuZGluZ0JveDogY29udGFpbmVyQm91bmRpbmdCb3gsXG4gICAgICBwb3BvdmVyQm91bmRpbmdCb3g6IHBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIGFuY2hvckJvdW5kaW5nQm94OiBhbmNob3JCb3VuZGluZ0JveCxcbiAgICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICAgIH0pLFxuICAgIGNyb3NzQXhpc1Bvc2l0aW9uID0gX2dldENyb3NzQXhpc1Bvc2l0aW9uLmNyb3NzQXhpc1Bvc2l0aW9uLFxuICAgIGNyb3NzQXhpc0Fycm93UG9zaXRpb24gPSBfZ2V0Q3Jvc3NBeGlzUG9zaXRpb24uY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbjtcbiAgdmFyIHByaW1hcnlBeGlzRGltZW5zaW9uID0gcmVsYXRlZERpbWVuc2lvbltwb3NpdGlvbl07IC8vIFwidG9wXCIgLT4gXCJoZWlnaHRcIlxuICB2YXIgcHJpbWFyeUF4aXNQb3NpdGlvbk5hbWUgPSBkaW1lbnNpb25Qb3NpdGlvbkF0dHJpYnV0ZVtwcmltYXJ5QXhpc0RpbWVuc2lvbl07IC8vIFwiaGVpZ2h0XCIgLT4gXCJ0b3BcIlxuXG4gIHZhciBfZ2V0UHJpbWFyeUF4aXNQb3NpdGkgPSBnZXRQcmltYXJ5QXhpc1Bvc2l0aW9uKHtcbiAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgcG9wb3ZlckJvdW5kaW5nQm94OiBwb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgICBhbmNob3JCb3VuZGluZ0JveDogYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgICBhcnJvd0NvbmZpZzogYXJyb3dDb25maWdcbiAgICB9KSxcbiAgICBwcmltYXJ5QXhpc1Bvc2l0aW9uID0gX2dldFByaW1hcnlBeGlzUG9zaXRpLnByaW1hcnlBeGlzUG9zaXRpb24sXG4gICAgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uID0gX2dldFByaW1hcnlBeGlzUG9zaXRpLnByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbjtcbiAgdmFyIHBvcG92ZXJQbGFjZW1lbnQgPSBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBjcm9zc0F4aXNGaXJzdFNpZGUsIGNyb3NzQXhpc1Bvc2l0aW9uKSwgcHJpbWFyeUF4aXNQb3NpdGlvbk5hbWUsIHByaW1hcnlBeGlzUG9zaXRpb24pO1xuXG4gIC8vIGNhbGN1bGF0ZSB0aGUgZml0IG9mIHRoZSBwb3BvdmVyIGluIHRoaXMgbG9jYXRpb25cbiAgLy8gZml0IGlzIGluIHJhbmdlIDAuMCAtPiAxLjAgYW5kIGlzIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBwb3BvdmVyIHdoaWNoIGlzIHZpc2libGUgaW4gdGhpcyBsb2NhdGlvblxuICB2YXIgY29tYmluZWRCb3VuZGluZ0JveCA9IGludGVyc2VjdEJvdW5kaW5nQm94ZXMod2luZG93Qm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94KTtcblxuICAvLyBzaHJpbmsgdGhlIHZpc2libGUgYm91bmRpbmcgYm94IGJ5IGBidWZmZXJgXG4gIC8vIHRvIGNvbXB1dGUgYSBmaXQgdmFsdWVcbiAgY29tYmluZWRCb3VuZGluZ0JveC50b3AgKz0gdG9wQnVmZmVyO1xuICBjb21iaW5lZEJvdW5kaW5nQm94LnJpZ2h0IC09IHJpZ2h0QnVmZmVyO1xuICBjb21iaW5lZEJvdW5kaW5nQm94LmJvdHRvbSAtPSBib3R0b21CdWZmZXI7XG4gIGNvbWJpbmVkQm91bmRpbmdCb3gubGVmdCArPSBsZWZ0QnVmZmVyO1xuICB2YXIgZml0ID0gZ2V0VmlzaWJsZUZpdCh7XG4gICAgdG9wOiBwb3BvdmVyUGxhY2VtZW50LnRvcCxcbiAgICByaWdodDogcG9wb3ZlclBsYWNlbWVudC5sZWZ0ICsgcG9wb3ZlckJvdW5kaW5nQm94LndpZHRoLFxuICAgIGJvdHRvbTogcG9wb3ZlclBsYWNlbWVudC50b3AgKyBwb3BvdmVyQm91bmRpbmdCb3guaGVpZ2h0LFxuICAgIGxlZnQ6IHBvcG92ZXJQbGFjZW1lbnQubGVmdCxcbiAgICB3aWR0aDogcG9wb3ZlckJvdW5kaW5nQm94LndpZHRoLFxuICAgIGhlaWdodDogcG9wb3ZlckJvdW5kaW5nQm94LmhlaWdodFxuICB9LCBjb21iaW5lZEJvdW5kaW5nQm94KTtcbiAgdmFyIGFycm93ID0gYXJyb3dDb25maWcgPyBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBjcm9zc0F4aXNGaXJzdFNpZGUsIGNyb3NzQXhpc0Fycm93UG9zaXRpb24gLSBwb3BvdmVyUGxhY2VtZW50W2Nyb3NzQXhpc0ZpcnN0U2lkZV0pLCBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSwgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uKSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHtcbiAgICBmaXQ6IGZpdCxcbiAgICB0b3A6IHBvcG92ZXJQbGFjZW1lbnQudG9wLFxuICAgIGxlZnQ6IHBvcG92ZXJQbGFjZW1lbnQubGVmdCxcbiAgICBhcnJvdzogYXJyb3cgPyB7XG4gICAgICBsZWZ0OiBhcnJvdy5sZWZ0LFxuICAgICAgdG9wOiBhcnJvdy50b3BcbiAgICB9IDogdW5kZWZpbmVkXG4gIH07XG59XG5mdW5jdGlvbiBnZXRDcm9zc0F4aXNQb3NpdGlvbihfcmVmNCkge1xuICB2YXIgY3Jvc3NBeGlzRmlyc3RTaWRlID0gX3JlZjQuY3Jvc3NBeGlzRmlyc3RTaWRlLFxuICAgIGNyb3NzQXhpc1NlY29uZFNpZGUgPSBfcmVmNC5jcm9zc0F4aXNTZWNvbmRTaWRlLFxuICAgIGNyb3NzQXhpc0RpbWVuc2lvbiA9IF9yZWY0LmNyb3NzQXhpc0RpbWVuc2lvbixcbiAgICBwb3NpdGlvbiA9IF9yZWY0LnBvc2l0aW9uLFxuICAgIGFsaWduID0gX3JlZjQuYWxpZ24sXG4gICAgYnVmZmVyID0gX3JlZjQuYnVmZmVyLFxuICAgIG9mZnNldCA9IF9yZWY0Lm9mZnNldCxcbiAgICB3aW5kb3dCb3VuZGluZ0JveCA9IF9yZWY0LndpbmRvd0JvdW5kaW5nQm94LFxuICAgIGNvbnRhaW5lckJvdW5kaW5nQm94ID0gX3JlZjQuY29udGFpbmVyQm91bmRpbmdCb3gsXG4gICAgcG9wb3ZlckJvdW5kaW5nQm94ID0gX3JlZjQucG9wb3ZlckJvdW5kaW5nQm94LFxuICAgIGFuY2hvckJvdW5kaW5nQm94ID0gX3JlZjQuYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgYXJyb3dDb25maWcgPSBfcmVmNC5hcnJvd0NvbmZpZztcbiAgLy8gaG93IG11Y2ggb2YgdGhlIHBvcG92ZXIgb3ZlcmZsb3dzIHBhc3QgZWl0aGVyIHNpZGUgb2YgdGhlIGFuY2hvciBpZiBpdHMgY2VudGVyZWRcbiAgdmFyIHBvcG92ZXJTaXplT25Dcm9zc0F4aXMgPSBwb3BvdmVyQm91bmRpbmdCb3hbY3Jvc3NBeGlzRGltZW5zaW9uXTtcbiAgdmFyIGFuY2hvclNpemVPbkNyb3NzQXhpcyA9IGFuY2hvckJvdW5kaW5nQm94W2Nyb3NzQXhpc0RpbWVuc2lvbl07XG4gIHZhciBhbmNob3JIYWxmU2l6ZSA9IGFuY2hvclNpemVPbkNyb3NzQXhpcyAvIDI7XG5cbiAgLy8gdGhlIHBvcG92ZXIncyBvcmlnaW5hbCBwb3NpdGlvbiBvbiB0aGUgY3Jvc3MtYXhpcyBpcyBkZXRlcm1pbmVkIGJ5OlxuICB2YXIgY3Jvc3NBeGlzUG9zaXRpb25PcmlnaW5hbCA9IGFuY2hvckJvdW5kaW5nQm94W2Nyb3NzQXhpc0ZpcnN0U2lkZV0gK1xuICAvLyB3aGVyZSB0aGUgYW5jaG9yIGlzIGxvY2F0ZWRcbiAgYW5jaG9ySGFsZlNpemUgLVxuICAvLyBwbHVzIGhhbGYgYW5jaG9yIGRpbWVuc2lvblxuICBwb3BvdmVyU2l6ZU9uQ3Jvc3NBeGlzIC8gMjsgLy8gbGVzcyBoYWxmIHRoZSBwb3BvdmVyIGRpbWVuc2lvblxuXG4gIC8vIFRvIGZpdCB0aGUgY29udGVudCB3aXRoaW4gYm90aCB0aGUgd2luZG93IGFuZCBjb250YWluZXIsXG4gIC8vIGNvbXB1dGUgdGhlIHNtYWxsZXIgb2YgdGhlIHR3byBzcGFjZXMgYWxvbmcgZWFjaCBlZGdlXG4gIHZhciBjb21iaW5lZEJvdW5kaW5nQm94ID0gaW50ZXJzZWN0Qm91bmRpbmdCb3hlcyh3aW5kb3dCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gpO1xuICB2YXIgYXZhaWxhYmxlU3BhY2UgPSBnZXRBdmFpbGFibGVTcGFjZShhbmNob3JCb3VuZGluZ0JveCwgY29tYmluZWRCb3VuZGluZ0JveCwgYnVmZmVyLCBvZmZzZXQsIHBvc2l0aW9uKTtcbiAgdmFyIG1pbmltdW1TcGFjZSA9IGFycm93Q29uZmlnID8gYXJyb3dDb25maWcuYXJyb3dCdWZmZXIgOiAwO1xuICB2YXIgY29udGVudE92ZXJmbG93U2l6ZSA9IChwb3BvdmVyU2l6ZU9uQ3Jvc3NBeGlzIC0gYW5jaG9yU2l6ZU9uQ3Jvc3NBeGlzKSAvIDI7XG4gIHZhciBhbGlnbkFtb3VudCA9IDA7XG4gIHZhciBhbGlnbkRpcmVjdGlvbiA9IDE7XG4gIHZhciBhbW91bnRPZlNoaWZ0TmVlZGVkID0gMDtcbiAgdmFyIHNoaWZ0RGlyZWN0aW9uID0gMTtcbiAgaWYgKGFsaWduICE9IG51bGwpIHtcbiAgICAvLyBubyBhbGlnbm1lbnQsIGZpbmQgaG93IG11Y2ggdGhlIGNvbnRhaW5lciBib3VuZGFyeSByZXF1aXJlcyB0aGUgY29udGVudCB0byBzaGlmdFxuICAgIGFsaWduRGlyZWN0aW9uID0gYWxpZ24gPT09ICd0b3AnIHx8IGFsaWduID09PSAnbGVmdCcgPyAxIDogLTE7XG4gICAgYWxpZ25BbW91bnQgPSBjb250ZW50T3ZlcmZsb3dTaXplO1xuICAgIHZhciBhbGlnbmVkT3ZlcmZsb3dBbW91bnQgPSBjb250ZW50T3ZlcmZsb3dTaXplICsgYWxpZ25BbW91bnQ7XG4gICAgdmFyIG5lZWRzU2hpZnQgPSBhbGlnbmVkT3ZlcmZsb3dBbW91bnQgPiBhdmFpbGFibGVTcGFjZVtwb3NpdGlvbkNvbXBsZW1lbnRzW2FsaWduXV07XG4gICAgYW1vdW50T2ZTaGlmdE5lZWRlZCA9IG5lZWRzU2hpZnQgPyBhbGlnbmVkT3ZlcmZsb3dBbW91bnQgLSBhdmFpbGFibGVTcGFjZVtwb3NpdGlvbkNvbXBsZW1lbnRzW2FsaWduXV0gOiAwO1xuICAgIHNoaWZ0RGlyZWN0aW9uID0gLTEgKiBhbGlnbkRpcmVjdGlvbjtcbiAgfSBlbHNlIHtcbiAgICAvLyBzaGlmdGluZyB0aGUgcG9wb3ZlciB0byBvbmUgc2lkZSBtYXkgeWllbGQgYSBiZXR0ZXIgZml0XG4gICAgdmFyIHNwYWNlQXZhaWxhYmxlT25GaXJzdFNpZGUgPSBhdmFpbGFibGVTcGFjZVtjcm9zc0F4aXNGaXJzdFNpZGVdO1xuICAgIHZhciBzcGFjZUF2YWlsYWJsZU9uU2Vjb25kU2lkZSA9IGF2YWlsYWJsZVNwYWNlW2Nyb3NzQXhpc1NlY29uZFNpZGVdO1xuICAgIHZhciBpc1NoaWZ0VG93YXJkRmlyc3RTaWRlID0gc3BhY2VBdmFpbGFibGVPbkZpcnN0U2lkZSA+IHNwYWNlQXZhaWxhYmxlT25TZWNvbmRTaWRlO1xuICAgIHNoaWZ0RGlyZWN0aW9uID0gaXNTaGlmdFRvd2FyZEZpcnN0U2lkZSA/IC0xIDogMTtcblxuICAgIC8vIGRldGVybWluZSB3aGljaCBkaXJlY3Rpb24gaGFzIG1vcmUgcm9vbSBhbmQgdGhlIHBvcG92ZXIgc2hvdWxkIHNoaWZ0IHRvXG4gICAgdmFyIGxlYXN0QXZhaWxhYmxlU3BhY2UgPSBNYXRoLm1pbihzcGFjZUF2YWlsYWJsZU9uRmlyc3RTaWRlLCBzcGFjZUF2YWlsYWJsZU9uU2Vjb25kU2lkZSk7XG4gICAgdmFyIF9uZWVkc1NoaWZ0ID0gY29udGVudE92ZXJmbG93U2l6ZSA+IGxlYXN0QXZhaWxhYmxlU3BhY2U7XG4gICAgYW1vdW50T2ZTaGlmdE5lZWRlZCA9IF9uZWVkc1NoaWZ0ID8gY29udGVudE92ZXJmbG93U2l6ZSAtIGxlYXN0QXZhaWxhYmxlU3BhY2UgOiAwO1xuICB9XG5cbiAgLy8gc2hpZnQgb3ZlciB0aGUgcG9wb3ZlciBpZiBuZWNlc3NhcnlcbiAgdmFyIHNoaWZ0QW1vdW50ID0gYW1vdW50T2ZTaGlmdE5lZWRlZCAqIHNoaWZ0RGlyZWN0aW9uO1xuICB2YXIgY3Jvc3NBeGlzUG9zaXRpb24gPSBjcm9zc0F4aXNQb3NpdGlvbk9yaWdpbmFsICsgc2hpZnRBbW91bnQgKyBhbGlnbkFtb3VudCAqIGFsaWduRGlyZWN0aW9uO1xuXG4gIC8vIGlmIGFuIGBhcnJvd0NvbmZpZ2AgaXMgc3BlY2lmaWVkLCBmaW5kIHdoZXJlIHRvIHBvc2l0aW9uIHRoZSBhcnJvd1xuICB2YXIgY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbjtcbiAgaWYgKGFycm93Q29uZmlnKSB7XG4gICAgdmFyIGFycm93V2lkdGggPSBhcnJvd0NvbmZpZy5hcnJvd1dpZHRoO1xuICAgIGNyb3NzQXhpc0Fycm93UG9zaXRpb24gPSBhbmNob3JCb3VuZGluZ0JveFtjcm9zc0F4aXNGaXJzdFNpZGVdICsgYW5jaG9ySGFsZlNpemUgLSBhcnJvd1dpZHRoIC8gMjtcblxuICAgIC8vIG1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBidWZmZXIgYXJvdW5kIHRoZSBhcnJvd1xuICAgIC8vIGJ5IGNhbGN1bGF0aW5nIGhvdyBob3cgbXVjaCB0aGUgYXJyb3cgd291bGQgbmVlZCB0byBtb3ZlXG4gICAgLy8gYnV0IGluc3RlYWQgb2YgbW92aW5nIHRoZSBhcnJvdywgc2hpZnQgdGhlIHBvcG92ZXIgY29udGVudFxuICAgIGlmIChjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uIDwgY3Jvc3NBeGlzUG9zaXRpb24gKyBtaW5pbXVtU3BhY2UpIHtcbiAgICAgIC8vIGFycm93IGlzIHRvbyBjbG9zZSB0byB0aGUgbWluaW11bSBzaWRlXG4gICAgICB2YXIgZGlmZmVyZW5jZSA9IGNyb3NzQXhpc1Bvc2l0aW9uICsgbWluaW11bVNwYWNlIC0gY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbjtcbiAgICAgIGNyb3NzQXhpc1Bvc2l0aW9uIC09IGRpZmZlcmVuY2U7XG4gICAgfSBlbHNlIGlmIChjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uICsgbWluaW11bVNwYWNlICsgYXJyb3dXaWR0aCA+IGNyb3NzQXhpc1Bvc2l0aW9uICsgcG9wb3ZlclNpemVPbkNyb3NzQXhpcykge1xuICAgICAgLy8gYXJyb3cgaXMgdG9vIGNsb3NlIHRvIHRoZSBtYXhpbXVtIHNpZGVcbiAgICAgIHZhciBlZGdlID0gY3Jvc3NBeGlzUG9zaXRpb24gKyBwb3BvdmVyU2l6ZU9uQ3Jvc3NBeGlzO1xuICAgICAgdmFyIF9kaWZmZXJlbmNlID0gY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiAtIChlZGdlIC0gbWluaW11bVNwYWNlIC0gYXJyb3dXaWR0aCk7XG4gICAgICBjcm9zc0F4aXNQb3NpdGlvbiArPSBfZGlmZmVyZW5jZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjcm9zc0F4aXNQb3NpdGlvbjogY3Jvc3NBeGlzUG9zaXRpb24sXG4gICAgY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbjogY3Jvc3NBeGlzQXJyb3dQb3NpdGlvblxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UHJpbWFyeUF4aXNQb3NpdGlvbihfcmVmNSkge1xuICB2YXIgcG9zaXRpb24gPSBfcmVmNS5wb3NpdGlvbixcbiAgICBvZmZzZXQgPSBfcmVmNS5vZmZzZXQsXG4gICAgcG9wb3ZlckJvdW5kaW5nQm94ID0gX3JlZjUucG9wb3ZlckJvdW5kaW5nQm94LFxuICAgIGFuY2hvckJvdW5kaW5nQm94ID0gX3JlZjUuYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgYXJyb3dDb25maWcgPSBfcmVmNS5hcnJvd0NvbmZpZztcbiAgLy8gaWYgcG9zaXRpb25pbmcgdG8gdGhlIHRvcCBvciBsZWZ0LCB0aGUgdGFyZ2V0IHBvc2l0aW9uIGRlY3JlYXNlc1xuICAvLyBmcm9tIHRoZSBhbmNob3IncyB0b3Agb3IgbGVmdCwgb3RoZXJ3aXNlIHRoZSBwb3NpdGlvbiBhZGRzIHRvIHRoZSBhbmNob3Inc1xuICB2YXIgaXNPZmZzZXREZWNyZWFzaW5nID0gcG9zaXRpb24gPT09ICd0b3AnIHx8IHBvc2l0aW9uID09PSAnbGVmdCc7XG4gIHZhciBwcmltYXJ5QXhpc0RpbWVuc2lvbiA9IHJlbGF0ZWREaW1lbnNpb25bcG9zaXRpb25dOyAvLyBcInRvcFwiIC0+IFwiaGVpZ2h0XCJcbiAgdmFyIHBvcG92ZXJTaXplT25QcmltYXJ5QXhpcyA9IHBvcG92ZXJCb3VuZGluZ0JveFtwcmltYXJ5QXhpc0RpbWVuc2lvbl07XG5cbiAgLy8gc3RhcnQgYXQgdGhlIHRvcCBvciBsZWZ0IGVkZ2Ugb2YgdGhlIGFuY2hvciBlbGVtZW50XG4gIHZhciBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSA9IGRpbWVuc2lvblBvc2l0aW9uQXR0cmlidXRlW3ByaW1hcnlBeGlzRGltZW5zaW9uXTsgLy8gXCJoZWlnaHRcIiAtPiBcInRvcFwiXG4gIHZhciBhbmNob3JFZGdlT3JpZ2luID0gYW5jaG9yQm91bmRpbmdCb3hbcHJpbWFyeUF4aXNQb3NpdGlvbk5hbWVdO1xuXG4gIC8vIGZpbmQgdGhlIHBvcG92ZXIgcG9zaXRpb24gb24gdGhlIHByaW1hcnkgYXhpc1xuICB2YXIgYW5jaG9yU2l6ZU9uUHJpbWFyeUF4aXMgPSBhbmNob3JCb3VuZGluZ0JveFtwcmltYXJ5QXhpc0RpbWVuc2lvbl07XG4gIHZhciBwcmltYXJ5QXhpc09mZnNldCA9IGlzT2Zmc2V0RGVjcmVhc2luZyA/IHBvcG92ZXJTaXplT25QcmltYXJ5QXhpcyA6IGFuY2hvclNpemVPblByaW1hcnlBeGlzO1xuICB2YXIgY29udGVudE9mZnNldCA9IChvZmZzZXQgKyBwcmltYXJ5QXhpc09mZnNldCkgKiAoaXNPZmZzZXREZWNyZWFzaW5nID8gLTEgOiAxKTtcbiAgdmFyIHByaW1hcnlBeGlzUG9zaXRpb24gPSBhbmNob3JFZGdlT3JpZ2luICsgY29udGVudE9mZnNldDtcbiAgdmFyIHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbjtcbiAgaWYgKGFycm93Q29uZmlnKSB7XG4gICAgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uID0gaXNPZmZzZXREZWNyZWFzaW5nID8gcG9wb3ZlclNpemVPblByaW1hcnlBeGlzIDogMDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHByaW1hcnlBeGlzUG9zaXRpb246IHByaW1hcnlBeGlzUG9zaXRpb24sXG4gICAgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uOiBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb25cbiAgfTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgY2xpZW50IHBpeGVsIGNvb3JkaW5hdGUgb2YgZWFjaCBlZGdlIGZvciB0aGUgZWxlbWVudCdzIGJvdW5kaW5nIGJveCxcbiAqIGFuZCB0aGUgYm91bmRpbmcgYm94J3Mgd2lkdGggJiBoZWlnaHRcbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7e3RvcDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBib3R0b206IG51bWJlciwgbGVmdDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlcn19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50Qm91bmRpbmdCb3goZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiByZWN0LnRvcCxcbiAgICByaWdodDogcmVjdC5yaWdodCxcbiAgICBib3R0b206IHJlY3QuYm90dG9tLFxuICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgIHdpZHRoOiByZWN0LndpZHRoXG4gIH07XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXZhaWxhYmxlIGNvbnRlbnQgc3BhY2UgYmV0d2VlbiBhbmNob3IgYW5kIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhbmNob3JCb3VuZGluZ0JveCBDbGllbnQgYm91bmRpbmcgYm94IG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRhaW5lckJvdW5kaW5nQm94IENsaWVudCBib3VuZGluZyBib3ggb2YgdGhlIGNvbnRhaW5lciBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gYnVmZmVyIE1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlciBhbmQgdGhlIGJvdW5kaW5nIGNvbnRhaW5lclxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBEaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYW5jaG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gb2Zmc2V0U2lkZSBTaWRlIHRoZSBvZmZzZXQgbmVlZHMgdG8gYmUgYXBwbGllZCB0bywgb25lXG4gKiAgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcmV0dXJucyB7e3RvcDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBib3R0b206IG51bWJlciwgbGVmdDogbnVtYmVyfX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF2YWlsYWJsZVNwYWNlKGFuY2hvckJvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCwgYnVmZmVyLCBvZmZzZXQsIG9mZnNldFNpZGUpIHtcbiAgdmFyIF9nZXRCdWZmZXJWYWx1ZXMzID0gZ2V0QnVmZmVyVmFsdWVzKGJ1ZmZlciksXG4gICAgX2dldEJ1ZmZlclZhbHVlczQgPSBfc2xpY2VkVG9BcnJheShfZ2V0QnVmZmVyVmFsdWVzMywgNCksXG4gICAgdG9wQnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczRbMF0sXG4gICAgcmlnaHRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFsxXSxcbiAgICBib3R0b21CdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFsyXSxcbiAgICBsZWZ0QnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczRbM107XG4gIHJldHVybiB7XG4gICAgdG9wOiBhbmNob3JCb3VuZGluZ0JveC50b3AgLSBjb250YWluZXJCb3VuZGluZ0JveC50b3AgLSB0b3BCdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ3RvcCcgPyBvZmZzZXQgOiAwKSxcbiAgICByaWdodDogY29udGFpbmVyQm91bmRpbmdCb3gucmlnaHQgLSBhbmNob3JCb3VuZGluZ0JveC5yaWdodCAtIHJpZ2h0QnVmZmVyIC0gKG9mZnNldFNpZGUgPT09ICdyaWdodCcgPyBvZmZzZXQgOiAwKSxcbiAgICBib3R0b206IGNvbnRhaW5lckJvdW5kaW5nQm94LmJvdHRvbSAtIGFuY2hvckJvdW5kaW5nQm94LmJvdHRvbSAtIGJvdHRvbUJ1ZmZlciAtIChvZmZzZXRTaWRlID09PSAnYm90dG9tJyA/IG9mZnNldCA6IDApLFxuICAgIGxlZnQ6IGFuY2hvckJvdW5kaW5nQm94LmxlZnQgLSBjb250YWluZXJCb3VuZGluZ0JveC5sZWZ0IC0gbGVmdEJ1ZmZlciAtIChvZmZzZXRTaWRlID09PSAnbGVmdCcgPyBvZmZzZXQgOiAwKVxuICB9O1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBmaXQgKG92ZXJsYXApIG9mIHRoZSBjb250ZW50IHdpdGhpbiB0aGUgY29udGFpbmVyLCBmaXQgaXMgaW4gcmFuZ2UgMC4wID0+IDEuMFxuICogQHBhcmFtIGNvbnRlbnRCb3VuZGluZ0JveCBib3VuZGluZyBib3ggb2YgY29udGVudCB0byBjYWxjdWxhdGUgZml0IGZvclxuICogQHBhcmFtIGNvbnRhaW5lckJvdW5kaW5nQm94IGJvdW5kaW5nIGJveCBvZiBjb250YWluZXJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXNpYmxlRml0KGNvbnRlbnRCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gpIHtcbiAgdmFyIGludGVyc2VjdGlvbiA9IGludGVyc2VjdEJvdW5kaW5nQm94ZXMoY29udGVudEJvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCk7XG4gIGlmIChpbnRlcnNlY3Rpb24ubGVmdCA+IGludGVyc2VjdGlvbi5yaWdodCB8fCBpbnRlcnNlY3Rpb24udG9wID4gaW50ZXJzZWN0aW9uLnRvcCkge1xuICAgIC8vIHRoZXJlIGlzIG5vIGludGVyc2VjdGlvbiwgdGhlIGJveGVzIGFyZSBjb21wbGV0ZWx5IHNlcGFyYXRlZCBvbiBhdCBsZWFzdCBvbmUgYXhpc1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciBpbnRlcnNlY3Rpb25BcmVhID0gKGludGVyc2VjdGlvbi5yaWdodCAtIGludGVyc2VjdGlvbi5sZWZ0KSAqIChpbnRlcnNlY3Rpb24uYm90dG9tIC0gaW50ZXJzZWN0aW9uLnRvcCk7XG4gIHZhciBjb250ZW50QXJlYSA9IChjb250ZW50Qm91bmRpbmdCb3gucmlnaHQgLSBjb250ZW50Qm91bmRpbmdCb3gubGVmdCkgKiAoY29udGVudEJvdW5kaW5nQm94LmJvdHRvbSAtIGNvbnRlbnRCb3VuZGluZ0JveC50b3ApO1xuICByZXR1cm4gaW50ZXJzZWN0aW9uQXJlYSAvIGNvbnRlbnRBcmVhO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGludGVyc2VjdGlvbiBzcGFjZSBiZXR3ZWVuIHR3byBib3VuZGluZyBib3hlc1xuICpcbiAqIEBwYXJhbSBmaXJzdEJveFxuICogQHBhcmFtIHNlY29uZEJveFxuICogQHJldHVybnMge0V1aUNsaWVudFJlY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKGZpcnN0Qm94LCBzZWNvbmRCb3gpIHtcbiAgdmFyIHRvcCA9IE1hdGgubWF4KGZpcnN0Qm94LnRvcCwgc2Vjb25kQm94LnRvcCk7XG4gIHZhciByaWdodCA9IE1hdGgubWluKGZpcnN0Qm94LnJpZ2h0LCBzZWNvbmRCb3gucmlnaHQpO1xuICB2YXIgYm90dG9tID0gTWF0aC5taW4oZmlyc3RCb3guYm90dG9tLCBzZWNvbmRCb3guYm90dG9tKTtcbiAgdmFyIGxlZnQgPSBNYXRoLm1heChmaXJzdEJveC5sZWZ0LCBzZWNvbmRCb3gubGVmdCk7XG4gIHZhciBoZWlnaHQgPSBNYXRoLm1heChib3R0b20gLSB0b3AsIDApO1xuICB2YXIgd2lkdGggPSBNYXRoLm1heChyaWdodCAtIGxlZnQsIDApO1xuICByZXR1cm4ge1xuICAgIHRvcDogdG9wLFxuICAgIHJpZ2h0OiByaWdodCxcbiAgICBib3R0b206IGJvdHRvbSxcbiAgICBsZWZ0OiBsZWZ0LFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHdpZHRoOiB3aWR0aFxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHRvcC1tb3N0IGRlZmluZWQgei1pbmRleCBpbiB0aGUgZWxlbWVudCdzIGFuY2VzdG9yIGhpZXJhcmNoeVxuICogcmVsYXRpdmUgdG8gdGhlIGB0YXJnZXRgIGVsZW1lbnQ7IGlmIG5vIHotaW5kZXggaXMgZGVmaW5lZCwgcmV0dXJucyAwXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9XG4gKiBAcGFyYW0gY291c2luIHtIVE1MRWxlbWVudH1cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50WkluZGV4KGVsZW1lbnQsIGNvdXNpbikge1xuICAvKipcbiAgICogZmluZGluZyB0aGUgei1pbmRleCBvZiBgZWxlbWVudGAgaXMgbm90IHRoZSBmdWxsIHN0b3J5XG4gICAqIGl0cyB0aGUgQ1NTIHN0YWNraW5nIGNvbnRleHQgdGhhdCBpcyBpbXBvcnRhbnRcbiAgICogdGFrZSB0aGlzIERPTSBmb3IgZXhhbXBsZTpcbiAgICogYm9keVxuICAgKiAgIHNlY3Rpb25bei1pbmRleDogMTAwMF1cbiAgICogICAgIHBbei1pbmRleDogNTAwXVxuICAgKiAgICAgICBidXR0b25cbiAgICogICBkaXZcbiAgICpcbiAgICogd2hhdCB6LWluZGV4IGRvZXMgdGhlIGBkaXZgIG5lZWQgdG8gZGlzcGxheSBuZXh0IHRvIGBidXR0b25gP1xuICAgKiB0aGUgYGRpdmAgYW5kIGBzZWN0aW9uYCBhcmUgd2hlcmUgdGhlIHN0YWNraW5nIGNvbnRleHQgc3BsaXRzXG4gICAqIHNvIGBkaXZgIG5lZWRzIHRvIGNvcHkgYHNlY3Rpb25gJ3Mgei1pbmRleCBpbiBvcmRlciB0b1xuICAgKiBhcHBlYXIgbmV4dCB0byAvIG92ZXIgYGJ1dHRvbmBcbiAgICpcbiAgICogY2FsY3VsYXRlIHRoaXMgYnkgc3RhcnRpbmcgYXQgYGJ1dHRvbmAgYW5kIGZpbmRpbmcgaXRzIG9mZnNldFBhcmVudHNcbiAgICogdGhlbiB3YWxrIHRoZSBwYXJlbnRzIGZyb20gdG9wIC0+IGRvd24gdW50aWwgdGhlIHN0YWNraW5nIGNvbnRleHRcbiAgICogc3BsaXQgaXMgZm91bmQsIG9yIGlmIHRoZXJlIGlzIG5vIHNwbGl0IHRoZW4gYSBzcGVjaWZpYyB6LWluZGV4IGlzIHVuaW1wb3J0YW50XG4gICAqL1xuXG4gIC8vIGJ1aWxkIHRoZSBhcnJheSBvZiB0aGUgZWxlbWVudCArIGl0cyBvZmZzZXQgcGFyZW50c1xuICB2YXIgbm9kZXNUb0luc3BlY3QgPSBbXTtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBub2Rlc1RvSW5zcGVjdC5wdXNoKGVsZW1lbnQpO1xuXG4gICAgLy8gQUZBSUNUIHRoaXMgaXMgYSB2YWxpZCBjYXN0IC0gdGhlIGxpYmRlZnMgYXBwZWFyIHdyb25nXG4gICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gICAgLy8gc3RvcCBpZiB0aGVyZSBpcyBubyBwYXJlbnRcbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBzdG9wIGlmIHRoZSBwYXJlbnQgY29udGFpbnMgdGhlIHJlbGF0ZWQgZWxlbWVudFxuICAgIC8vIGFzIHRoaXMgaXMgdGhlIHotaW5kZXggYW5jZXN0b3JcbiAgICBpZiAoZWxlbWVudC5jb250YWlucyhjb3VzaW4pKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyByZXZlcnNlIHRoZSBub2RlcyB0byB3YWxrIGZyb20gdG9wIC0+IGVsZW1lbnRcbiAgbm9kZXNUb0luc3BlY3QucmV2ZXJzZSgpO1xuICBmb3IgKHZhciBfaSA9IDAsIF9ub2Rlc1RvSW5zcGVjdCA9IG5vZGVzVG9JbnNwZWN0OyBfaSA8IF9ub2Rlc1RvSW5zcGVjdC5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgbm9kZSA9IF9ub2Rlc1RvSW5zcGVjdFtfaV07XG4gICAgLy8gZ2V0IHRoaXMgbm9kZSdzIHotaW5kZXggY3NzIHZhbHVlXG4gICAgdmFyIHpJbmRleCA9IHdpbmRvdy5kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpLmdldFByb3BlcnR5VmFsdWUoJ3otaW5kZXgnKTtcblxuICAgIC8vIGlmIHRoZSB6LWluZGV4IGlzIG5vdCBhIG51bWJlciAoZS5nLiBcImF1dG9cIikgcmV0dXJuIG51bGwsIGVsc2UgdGhlIHZhbHVlXG4gICAgdmFyIHBhcnNlZFpJbmRleCA9IHBhcnNlSW50KHpJbmRleCwgMTApO1xuICAgIGlmICghaXNOYU4ocGFyc2VkWkluZGV4KSkge1xuICAgICAgcmV0dXJuIHBhcnNlZFpJbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogU2VjdXJlcyBvdXRib3VuZCBsaW5rcy4gRm9yIG1vcmUgaW5mbzpcbiAqIGh0dHBzOi8vd3d3LmppdGJpdC5jb20vYWxleGJsb2cvMjU2LXRhcmdldGJsYW5rLS0tdGhlLW1vc3QtdW5kZXJlc3RpbWF0ZWQtdnVsbmVyYWJpbGl0eS1ldmVyL1xuICovXG5cbmV4cG9ydCB2YXIgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0ID0gZnVuY3Rpb24gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KF9yZWYpIHtcbiAgdmFyIF9yZWYkdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgdGFyZ2V0ID0gX3JlZiR0YXJnZXQgPT09IHZvaWQgMCA/ICcnIDogX3JlZiR0YXJnZXQsXG4gICAgcmVsID0gX3JlZi5yZWw7XG4gIHZhciByZWxQYXJ0cyA9ICEhcmVsID8gcmVsLnNwbGl0KCcgJykuZmlsdGVyKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuICEhcGFydC5sZW5ndGggJiYgcGFydCAhPT0gJ25vcmVmZXJyZXInO1xuICB9KSA6IFtdO1xuICByZWxQYXJ0cy5wdXNoKCdub3JlZmVycmVyJyk7XG4gIGlmICh0YXJnZXQuaW5jbHVkZXMoJ19ibGFuaycpICYmIHJlbFBhcnRzLmluZGV4T2YoJ25vb3BlbmVyJykgPT09IC0xKSB7XG4gICAgcmVsUGFydHMucHVzaCgnbm9vcGVuZXInKTtcbiAgfVxuICByZXR1cm4gcmVsUGFydHMuc29ydCgpLmpvaW4oJyAnKS50cmltKCk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFTQyA9ICdhc2MnO1xudmFyIERFU0MgPSAnZGVzYyc7XG5leHBvcnQgdmFyIFNvcnREaXJlY3Rpb24gPSBPYmplY3QuZnJlZXplKHtcbiAgQVNDOiBBU0MsXG4gIERFU0M6IERFU0MsXG4gIGlzQXNjOiBmdW5jdGlvbiBpc0FzYyhkaXJlY3Rpb24pIHtcbiAgICByZXR1cm4gZGlyZWN0aW9uID09PSBBU0M7XG4gIH0sXG4gIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoZGlyZWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNBc2MoZGlyZWN0aW9uKSA/IERFU0MgOiBBU0M7XG4gIH1cbn0pO1xuZXhwb3J0IHZhciBTb3J0RGlyZWN0aW9uVHlwZSA9IFByb3BUeXBlcy5vbmVPZihbQVNDLCBERVNDXSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBfZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IF9vbWl0IGZyb20gJ2xvZGFzaC9vbWl0JztcblxuLy8gd3JhcCB0aGUgbG9kYXNoIGZ1bmN0aW9ucyB0byBhdm9pZCBoYXZpbmcgbG9kYXNoJ3MgVFMgdHlwZSBkZWZpbml0aW9uIGZyb20gYmVpbmdcbi8vIGV4cG9ydGVkLCB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCB0aGUgbG9kYXNoIG5hbWVzcGFjZSBpZiBvdGhlciB2ZXJzaW9ucyBhcmUgdXNlZFxuXG5leHBvcnQgdmFyIGdldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4gX2dldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSk7XG59O1xuZXhwb3J0IHZhciBvbWl0ID0gZnVuY3Rpb24gb21pdChvYmplY3QsIHBhdGhzKSB7XG4gIHJldHVybiBfb21pdChvYmplY3QsIHBhdGhzKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICcuL3NvcnRfZGlyZWN0aW9uJztcbmltcG9ydCB7IGdldCB9IGZyb20gJy4uL29iamVjdHMnO1xuZXhwb3J0IHZhciBDb21wYXJhdG9ycyA9IE9iamVjdC5mcmVlemUoe1xuICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBTb3J0RGlyZWN0aW9uLkFTQztcbiAgICByZXR1cm4gZnVuY3Rpb24gKHYxLCB2Mikge1xuICAgICAgLy8gSmF2YVNjcmlwdCdzIGNvbXBhcmlzb24gb2YgbnVsbC91bmRlZmluZWQgKGFuZCBzb21lIG90aGVycyBub3QgaGFuZGxlZCBoZXJlKSB2YWx1ZXMgYWx3YXlzIHJldHVybnMgYGZhbHNlYFxuICAgICAgLy8gKGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvI3NlYy1hYnN0cmFjdC1yZWxhdGlvbmFsLWNvbXBhcmlzb24pXG4gICAgICAvLyByZXN1bHRpbmcgaW4gY2FzZXMgd2hlcmUgdjEgPCB2MiBhbmQgdjEgPiB2MiBhcmUgYm90aCBmYWxzZS5cbiAgICAgIC8vIFRoaXMgbGVhZHMgdG8gdW5wcmVkaWN0YWJsZSBzb3J0aW5nIHJlc3VsdHMgaW4gbXVsdGlwbGUgSlMgZW5naW5lIHNvcnRpbmcgYWxnb3JpdGhtc1xuICAgICAgLy8gd2hpY2ggY2F1c2VzIHVucHJlZGljdGFibGUgdXNlciBleHBlcmllbmNlcy5cbiAgICAgIC8vIEluc3RlYWQ6XG4gICAgICAvLyAqIDEuIHB1c2ggdW5kZWZpbmVkL251bGwgdmFsdWVzIHRvIHRoZSBlbmQgb2YgdGhlIHNvcnRlZCBsaXN0LCBfcmVnYXJkbGVzcyBvZiBzb3J0IGRpcmVjdGlvbl9cbiAgICAgIC8vICAgIChub24tc29ydGFibGUgdmFsdWVzIGFsd2F5cyBhcHBlYXIgYXQgdGhlIGVuZCwgYW5kIHNvcnRhYmxlIHZhbHVlcyBhcmUgc29ydGVkIGF0IHRoZSB0b3ApXG4gICAgICAvLyAqIDIuIHJlcG9ydCB1bmRlZmluZWQvbnVsbCB2YWx1ZXMgYXMgZXF1YWxcbiAgICAgIC8vICogMy4gd2hlbiBib3RoIHZhbHVlcyBhcmUgY29tcGFyYWJsZSB0aGV5IGFyZSBzb3J0ZWQgbm9ybWFsbHlcblxuICAgICAgdmFyIHYxSXNDb21wYXJhYmxlID0gdjEgIT0gbnVsbDtcbiAgICAgIHZhciB2MklzQ29tcGFyYWJsZSA9IHYyICE9IG51bGw7XG5cbiAgICAgIC8vICogMS5cbiAgICAgIGlmICh2MUlzQ29tcGFyYWJsZSAmJiAhdjJJc0NvbXBhcmFibGUpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgaWYgKCF2MUlzQ29tcGFyYWJsZSAmJiB2MklzQ29tcGFyYWJsZSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cblxuICAgICAgLy8gKiAyLlxuICAgICAgaWYgKCF2MUlzQ29tcGFyYWJsZSAmJiAhdjJJc0NvbXBhcmFibGUpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIC8vICogMy5cbiAgICAgIGlmICh2MSA9PT0gdjIpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gdjEgPiB2MiA/IDEgOiAtMTtcbiAgICAgIHJldHVybiBTb3J0RGlyZWN0aW9uLmlzQXNjKGRpcmVjdGlvbikgPyByZXN1bHQgOiAtMSAqIHJlc3VsdDtcbiAgICB9O1xuICB9LFxuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKGNvbXBhcmF0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHYxLCB2Mikge1xuICAgICAgcmV0dXJuIGNvbXBhcmF0b3IodjIsIHYxKTtcbiAgICB9O1xuICB9LFxuICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsdWVDYWxsYmFjaywgY29tcGFyYXRvcikge1xuICAgIGlmICghY29tcGFyYXRvcikge1xuICAgICAgY29tcGFyYXRvciA9IHRoaXMuZGVmYXVsdChTb3J0RGlyZWN0aW9uLkFTQyk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAobzEsIG8yKSB7XG4gICAgICByZXR1cm4gY29tcGFyYXRvcih2YWx1ZUNhbGxiYWNrKG8xKSwgdmFsdWVDYWxsYmFjayhvMikpO1xuICAgIH07XG4gIH0sXG4gIHByb3BlcnR5OiBmdW5jdGlvbiBwcm9wZXJ0eShwcm9wLCBjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZ2V0KHZhbHVlLCBwcm9wKTtcbiAgICB9LCBjb21wYXJhdG9yKTtcbiAgfVxufSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbnZhciBHUk9VUF9OVU1FUklDID0gL14oW1xcZC5dKykoc3xtcykvO1xuZnVuY3Rpb24gZ2V0TWlsbGlzZWNvbmRzKHZhbHVlLCB1bml0KSB7XG4gIC8vIEdpdmVuIHRoZSByZWdleCBtYXRjaCBhbmQgY2FwdHVyZSBncm91cHMsIHdlIGNhbiBhc3N1bWUgYHVuaXRgIHRvIGJlIGVpdGhlciAncycgb3IgJ21zJ1xuICB2YXIgbXVsdGlwbGllciA9IHVuaXQgPT09ICdzJyA/IDEwMDAgOiAxO1xuICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSkgKiBtdWx0aXBsaWVyO1xufVxuLy8gRmluZCBDU1MgYHRyYW5zaXRpb24tZHVyYXRpb25gIGFuZCBgdHJhbnNpdGlvbi1kZWxheWAgaW50ZXJ2YWxzXG4vLyBhbmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiBlYWNoIGNvbXB1dGVkIHByb3BlcnR5IGluICdtcydcbmV4cG9ydCB2YXIgZ2V0VHJhbnNpdGlvblRpbWluZ3MgPSBmdW5jdGlvbiBnZXRUcmFuc2l0aW9uVGltaW5ncyhlbGVtZW50KSB7XG4gIHZhciBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHZhciBjb21wdXRlZER1cmF0aW9uID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCd0cmFuc2l0aW9uLWR1cmF0aW9uJyk7XG4gIHZhciBkdXJhdGlvbk1hdGNoQXJyYXkgPSBjb21wdXRlZER1cmF0aW9uLm1hdGNoKEdST1VQX05VTUVSSUMpO1xuICB2YXIgZHVyYXRpb25NYXRjaCA9IGR1cmF0aW9uTWF0Y2hBcnJheSA/IGdldE1pbGxpc2Vjb25kcyhkdXJhdGlvbk1hdGNoQXJyYXlbMV0sIGR1cmF0aW9uTWF0Y2hBcnJheVsyXSkgOiAwO1xuICB2YXIgY29tcHV0ZWREZWxheSA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgndHJhbnNpdGlvbi1kZWxheScpO1xuICB2YXIgZGVsYXlNYXRjaEFycmF5ID0gY29tcHV0ZWREZWxheS5tYXRjaChHUk9VUF9OVU1FUklDKTtcbiAgdmFyIGRlbGF5TWF0Y2ggPSBkZWxheU1hdGNoQXJyYXkgPyBnZXRNaWxsaXNlY29uZHMoZGVsYXlNYXRjaEFycmF5WzFdLCBkZWxheU1hdGNoQXJyYXlbMl0pIDogMDtcbiAgcmV0dXJuIHtcbiAgICBkdXJhdGlvbk1hdGNoOiBkdXJhdGlvbk1hdGNoLFxuICAgIGRlbGF5TWF0Y2g6IGRlbGF5TWF0Y2hcbiAgfTtcbn07XG5mdW5jdGlvbiBpc0VsZW1lbnROb2RlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQubm9kZVR5cGUgPT09IGRvY3VtZW50LkVMRU1FTlRfTk9ERTtcbn1cbi8vIFVzZXMgYGdldFRyYW5zaXRpb25UaW1pbmdzYCB0byBmaW5kIHRoZSB0b3RhbCB0cmFuc2l0aW9uIHRpbWUgZm9yXG4vLyBhbGwgZWxlbWVudHMgdGFyZ2V0ZWQgYnkgYSBNdXRhdGlvbk9ic2VydmVyIGNhbGxiYWNrXG5leHBvcnQgdmFyIGdldFdhaXREdXJhdGlvbiA9IGZ1bmN0aW9uIGdldFdhaXREdXJhdGlvbihyZWNvcmRzKSB7XG4gIHJldHVybiByZWNvcmRzLnJlZHVjZShmdW5jdGlvbiAod2FpdER1cmF0aW9uLCByZWNvcmQpIHtcbiAgICAvLyBvbmx5IGNoZWNrIGZvciBDU1MgdHJhbnNpdGlvbiB2YWx1ZXMgZm9yIEVMRU1FTlQgbm9kZXNcbiAgICBpZiAoaXNFbGVtZW50Tm9kZShyZWNvcmQudGFyZ2V0KSkge1xuICAgICAgdmFyIF9nZXRUcmFuc2l0aW9uVGltaW5ncyA9IGdldFRyYW5zaXRpb25UaW1pbmdzKHJlY29yZC50YXJnZXQpLFxuICAgICAgICBkdXJhdGlvbk1hdGNoID0gX2dldFRyYW5zaXRpb25UaW1pbmdzLmR1cmF0aW9uTWF0Y2gsXG4gICAgICAgIGRlbGF5TWF0Y2ggPSBfZ2V0VHJhbnNpdGlvblRpbWluZ3MuZGVsYXlNYXRjaDtcbiAgICAgIHdhaXREdXJhdGlvbiA9IE1hdGgubWF4KHdhaXREdXJhdGlvbiwgZHVyYXRpb25NYXRjaCArIGRlbGF5TWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gd2FpdER1cmF0aW9uO1xuICB9LCAwKTtcbn07XG5cbi8vIFVzZXMgYHJlcXVlc3RBbmltYXRpb25GcmFtZWAgdG8gcGVyZm9ybSBhIGdpdmVuIGNhbGxiYWNrIGFmdGVyIGEgc3BlY2lmaWVkIHdhaXRpbmcgcGVyaW9kXG5leHBvcnQgdmFyIHBlcmZvcm1PbkZyYW1lID0gZnVuY3Rpb24gcGVyZm9ybU9uRnJhbWUod2FpdER1cmF0aW9uLCB0b1BlcmZvcm0pIHtcbiAgaWYgKHdhaXREdXJhdGlvbiA+IDApIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB2YXIgZW5kVGltZSA9IHN0YXJ0VGltZSArIHdhaXREdXJhdGlvbjtcbiAgICB2YXIgb25GcmFtZSA9IGZ1bmN0aW9uIG9uRnJhbWUoKSB7XG4gICAgICB0b1BlcmZvcm0oKTtcbiAgICAgIGlmIChlbmRUaW1lID4gRGF0ZS5ub3coKSkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG4gIH1cbn07XG5cbi8vIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgY29tYmluaW5nIHRoZSByZXN1bHQgb2YgJ2dldFdhaXREdXJhdGlvbicgZGlyZWN0bHkgd2l0aCAncGVyZm9ybU9uRnJhbWUnXG5leHBvcnQgdmFyIGdldER1cmF0aW9uQW5kUGVyZm9ybU9uRnJhbWUgPSBmdW5jdGlvbiBnZXREdXJhdGlvbkFuZFBlcmZvcm1PbkZyYW1lKHJlY29yZHMsIHRvUGVyZm9ybSkge1xuICBwZXJmb3JtT25GcmFtZShnZXRXYWl0RHVyYXRpb24ocmVjb3JkcyksIHRvUGVyZm9ybSk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3REZXN0cnVjdHVyaW5nRW1wdHkodCkgeyBpZiAobnVsbCA9PSB0KSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGRlc3RydWN0dXJlIFwiICsgdCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBHbG9iYWwsIGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvY3VzUmluZywgZXVpU2Nyb2xsQmFyU3R5bGVzIH0gZnJvbSAnLi4vbWl4aW5zJztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQsIHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29sb3InO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZSc7XG5pbXBvcnQgeyByZXNldFN0eWxlcyBhcyByZXNldCB9IGZyb20gJy4vcmVzZXQnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpR2xvYmFsU3R5bGVzID0gZnVuY3Rpb24gRXVpR2xvYmFsU3R5bGVzKF9yZWYpIHtcbiAgX29iamVjdERlc3RydWN0dXJpbmdFbXB0eShfcmVmKTtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICB2YXIgYmFzZSA9IGV1aVRoZW1lLmJhc2UsXG4gICAgY29sb3JzID0gZXVpVGhlbWUuY29sb3JzLFxuICAgIGZvbnQgPSBldWlUaGVtZS5mb250O1xuXG4gIC8qKlxuICAgKiBEZWNsYXJpbmcgdGhlIHRvcCBsZXZlbCBzY3JvbGxiYXIgY29sb3JzIHRvIG1hdGNoIHRoZSB0aGVtZSBhbHNvIHJlcXVpcmVzIHNldHRpbmcgdGhlIHNpemVzIG9uIENocm9tZVxuICAgKiBzbyB0aGF0IGl0IGtub3dzIHRvIHVzZSBjdXN0b20gc3R5bGVzLiBUaGVyZWZvcmUsIHdlIGp1c3QgcmV1c2UgdGhlIHNhbWUgc2Nyb2xsYmFyIG1peGluIHdpdGggdGhpY2sgc2l6ZS5cbiAgICovXG4gIHZhciBzY3JvbGxiYXJTdHlsZXMgPSBldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgdHJhY2tDb2xvcjogY29sb3JNb2RlID09PSAnTElHSFQnID8gc2hhZGUoY29sb3JzLmJvZHksIDAuMDMpIDogdGludChjb2xvcnMuYm9keSwgMC4wNyksXG4gICAgd2lkdGg6ICdhdXRvJ1xuICB9KTtcblxuICAvKipcbiAgICogVGhpcyBmb250IHJlc2V0IHNldHMgYWxsIG91ciBiYXNlIGZvbnQvdHlwb2dyYXBoeSByZWxhdGVkIHByb3BlcnRpZXNcbiAgICogdGhhdCBhcmUgbmVlZGVkIHRvIG92ZXJyaWRlIGJyb3dzZXItc3BlY2lmaWMgZWxlbWVudCBzZXR0aW5ncy5cbiAgICovXG4gIHZhciBmb250Qm9keVNjYWxlID0gZm9udC5zY2FsZVtmb250LmJvZHkuc2NhbGVdO1xuICB2YXIgZm9udFJlc2V0ID0ge1xuICAgIGZvbnRGYW1pbHk6IGZvbnQuZmFtaWx5LFxuICAgIGZvbnRTaXplOiBcIlwiLmNvbmNhdChmb250LmRlZmF1bHRVbml0cyA9PT0gJ3B4JyA/IGZvbnRCb2R5U2NhbGUgKiBiYXNlIDogZm9udEJvZHlTY2FsZSkuY29uY2F0KGZvbnQuZGVmYXVsdFVuaXRzKSxcbiAgICBsaW5lSGVpZ2h0OiBiYXNlIC8gKGZvbnRCb2R5U2NhbGUgKiBiYXNlKSxcbiAgICBmb250V2VpZ2h0OiBmb250LndlaWdodFtmb250LmJvZHkud2VpZ2h0XVxuICB9O1xuXG4gIC8qKlxuICAgKiBGaW5hbCBzdHlsZXNcbiAgICovXG4gIHZhciBzdHlsZXMgPSAvKiNfX1BVUkVfXyovY3NzKHJlc2V0LCBcIiBodG1se1wiLCBzY3JvbGxiYXJTdHlsZXMsIFwiIFwiLCBmb250UmVzZXQsIFwiIHRleHQtc2l6ZS1hZGp1c3Q6MTAwJTtmb250LWtlcm5pbmc6bm9ybWFsO1wiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCAnMTAwJScpLCBcIiBiYWNrZ3JvdW5kLWNvbG9yOlwiLCBjb2xvcnMuYm9keSwgXCI7Y29sb3I6XCIsIGNvbG9ycy50ZXh0LCBcIjt9Y29kZSxwcmUsa2JkLHNhbXB7Zm9udC1mYW1pbHk6XCIsIGZvbnQuZmFtaWx5Q29kZSwgXCI7fWlucHV0LHRleHRhcmVhLHNlbGVjdHtcIiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBmb250UmVzZXQpLCB7fSwge1xuICAgIGZvbnRTaXplOiAnMXJlbScgLy8gSW5oZXJpdCBmcm9tIGh0bWwgcm9vdFxuICB9KSwgXCI7fXNlbGVjdDpkaXNhYmxlZHtvcGFjaXR5OjE7fWJ1dHRvbntmb250LWZhbWlseTpcIiwgZm9udC5mYW1pbHksIFwiO31lbXtmb250LXN0eWxlOml0YWxpYzt9c3Ryb25ne2ZvbnQtd2VpZ2h0OlwiLCBmb250LndlaWdodC5ib2xkLCBcIjt9Kjpmb2N1c3tcIiwgZXVpRm9jdXNSaW5nKGV1aVRoZW1lQ29udGV4dCksIFwiO306OnNlbGVjdGlvbntiYWNrZ3JvdW5kOlwiLCB0cmFuc3BhcmVudGl6ZShjb2xvcnMucHJpbWFyeSwgY29sb3JNb2RlID09PSAnTElHSFQnID8gMC4xIDogMC4yKSwgXCI7fWF7Y29sb3I6XCIsIGNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7JiwmOmhvdmVyLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fX0uZXVpQm9keS1oYXNQb3J0YWxDb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO307bGFiZWw6c3R5bGVzO1wiKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBzdHlsZXNcbiAgfSk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHNoYWRlLCB0aW50LCB0aW50T3JTaGFkZSwgdHJhbnNwYXJlbnRpemUsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuZXhwb3J0IHZhciBCQUNLR1JPVU5EX0NPTE9SUyA9IFsndHJhbnNwYXJlbnQnLCAncGxhaW4nLCAnc3ViZHVlZCcsICdhY2NlbnQnLCAncHJpbWFyeScsICdzdWNjZXNzJywgJ3dhcm5pbmcnLCAnZGFuZ2VyJ107XG4vKipcbiAqIEByZXR1cm5zIEEgc2luZ2xlIGJhY2tncm91bmQgY29sb3Igd2l0aCBvcHRpb25hbCBhbHBoYSB0cmFuc3BhcmVuY3lcbiAqL1xuZXhwb3J0IHZhciBldWlCYWNrZ3JvdW5kQ29sb3IgPSBmdW5jdGlvbiBldWlCYWNrZ3JvdW5kQ29sb3IoX3JlZiwgY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZTtcbiAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fSxcbiAgICBtZXRob2QgPSBfcmVmMi5tZXRob2Q7XG4gIGlmIChjb2xvciA9PT0gJ3RyYW5zcGFyZW50JykgcmV0dXJuICd0cmFuc3BhcmVudCc7XG4gIGlmIChtZXRob2QgPT09ICd0cmFuc3BhcmVudCcpIHtcbiAgICBpZiAoY29sb3IgPT09ICdwbGFpbicpIHtcbiAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMuZ2hvc3QsIDAuMik7XG4gICAgfSBlbHNlIGlmIChjb2xvciA9PT0gJ3N1YmR1ZWQnKSB7XG4gICAgICByZXR1cm4gY29sb3JNb2RlID09PSAnREFSSycgPyB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgMC40KSA6IHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzW2NvbG9yXSwgMC4xKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIF90aW50T3JTaGFkZSA9IGZ1bmN0aW9uIF90aW50T3JTaGFkZShjb2xvcikge1xuICAgICAgcmV0dXJuIGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gc2hhZGUoY29sb3IsIDAuOCkgOiB0aW50KGNvbG9yLCAwLjkpO1xuICAgIH07XG4gICAgc3dpdGNoIChjb2xvcikge1xuICAgICAgY2FzZSAncGxhaW4nOlxuICAgICAgICByZXR1cm4gZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGU7XG4gICAgICBjYXNlICdzdWJkdWVkJzpcbiAgICAgICAgcmV0dXJuIGV1aVRoZW1lLmNvbG9ycy5ib2R5O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIF90aW50T3JTaGFkZShldWlUaGVtZS5jb2xvcnNbY29sb3JdKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBjb2xvciBrZXlzIHRvIGNvbG9yIHZhbHVlcywgY2F0ZWdvcml6ZWQgYnlcbiAqIG9wYXF1ZSAoZGVmYXVsdCkgdnMgdHJhbnNwYXJlbmN5IChob3Zlci9mb2N1cyBzdGF0ZXMpIG1ldGhvZHMuXG4gKiBlLmcuIHtcbiAqICBvcGFxdWU6IHsgZGFuZ2VyOiAnIzAwMCcsIHN1Y2Nlc3M6ICcjZmZmJywgLi4uIH0sXG4gKiAgdHJhbnNwYXJlbnQ6IHsgZGFuZ2VyOiAncmdiYSgwLDAsMCwwLjEpJywgc3VjY2VzczogJ3JnYmEoMjU1LDI1NSwyNTUsMC4xKScsIC4uLiB9LFxuICogfVxuICovXG52YXIgX2V1aUJhY2tncm91bmRDb2xvck1hcCA9IGZ1bmN0aW9uIF9ldWlCYWNrZ3JvdW5kQ29sb3JNYXAoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiB7XG4gICAgb3BhcXVlOiBCQUNLR1JPVU5EX0NPTE9SUy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgY29sb3IpIHtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFjYyksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIGNvbG9yLCBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikpKTtcbiAgICB9LCB7fSksXG4gICAgdHJhbnNwYXJlbnQ6IEJBQ0tHUk9VTkRfQ09MT1JTLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjb2xvcikge1xuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWNjKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgY29sb3IsIGV1aUJhY2tncm91bmRDb2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yLCB7XG4gICAgICAgIG1ldGhvZDogJ3RyYW5zcGFyZW50J1xuICAgICAgfSkpKTtcbiAgICB9LCB7fSlcbiAgfTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aUJhY2tncm91bmRDb2xvciA9IGZ1bmN0aW9uIHVzZUV1aUJhY2tncm91bmRDb2xvcihjb2xvcikge1xuICB2YXIgX3JlZjMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIG1ldGhvZCA9IF9yZWYzLm1ldGhvZDtcbiAgdmFyIGJhY2tncm91bmRDb2xvck1hcCA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKF9ldWlCYWNrZ3JvdW5kQ29sb3JNYXApO1xuICByZXR1cm4gYmFja2dyb3VuZENvbG9yTWFwW21ldGhvZCB8fCAnb3BhcXVlJ11bY29sb3JdO1xufTtcblxuLyoqXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgbWFwIG9mIGNvbG9yIGtleXMgdG8gQ1NTLFxuICogZS5nLiB7IGRhbmdlcjogY3NzYGAsIHN1Y2Nlc3M6IGNzc2BgLCAuLi4gfVxuICovXG52YXIgX2V1aUJhY2tncm91bmRDb2xvcnMgPSBmdW5jdGlvbiBfZXVpQmFja2dyb3VuZENvbG9ycyhldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIEJBQ0tHUk9VTkRfQ09MT1JTLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjb2xvcikge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFjYyksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIGNvbG9yLCAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLCBcIjtsYWJlbDpcIiwgY29sb3IsIFwiO1wiKSkpO1xuICB9LCB7fSk7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MgPSBmdW5jdGlvbiB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MoKSB7XG4gIHJldHVybiB1c2VFdWlNZW1vaXplZFN0eWxlcyhfZXVpQmFja2dyb3VuZENvbG9ycyk7XG59O1xuXG4vKipcbiAqIEJvcmRlciBjb2xvcnNcbiAqL1xuXG5leHBvcnQgdmFyIGV1aUJvcmRlckNvbG9yID0gZnVuY3Rpb24gZXVpQm9yZGVyQ29sb3IoX3JlZjQsIGNvbG9yKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWY0LmNvbG9yTW9kZTtcbiAgc3dpdGNoIChjb2xvcikge1xuICAgIGNhc2UgJ3RyYW5zcGFyZW50JzpcbiAgICBjYXNlICdwbGFpbic6XG4gICAgY2FzZSAnc3ViZHVlZCc6XG4gICAgICByZXR1cm4gZXVpVGhlbWUuYm9yZGVyLmNvbG9yO1xuICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgcmV0dXJuIHRpbnRPclNoYWRlKGV1aVRoZW1lLmNvbG9ycy53YXJuaW5nLCAwLjQsIGNvbG9yTW9kZSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0aW50T3JTaGFkZShldWlUaGVtZS5jb2xvcnNbY29sb3JdLCAwLjYsIGNvbG9yTW9kZSk7XG4gIH1cbn07XG5cbi8qKlxuICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBjb2xvciBrZXlzIHRvIENTUyxcbiAqIGUuZy4geyBkYW5nZXI6IGNzc2BgLCBzdWNjZXNzOiBjc3NgYCwgLi4uIH1cbiAqL1xudmFyIF9ldWlCb3JkZXJDb2xvcnMgPSBmdW5jdGlvbiBfZXVpQm9yZGVyQ29sb3JzKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4gQkFDS0dST1VORF9DT0xPUlMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGNvbG9yKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWNjKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgY29sb3IsIC8qI19fUFVSRV9fKi9jc3MoXCJib3JkZXItY29sb3I6XCIsIGV1aUJvcmRlckNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLCBcIjtsYWJlbDpcIiwgY29sb3IsIFwiO1wiKSkpO1xuICB9LCB7fSk7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlCb3JkZXJDb2xvckNTUyA9IGZ1bmN0aW9uIHVzZUV1aUJvcmRlckNvbG9yQ1NTKCkge1xuICByZXR1cm4gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoX2V1aUJvcmRlckNvbG9ycyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29sb3InO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbENTU1dpdGhGYWxsYmFjayB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5cbi8qKlxuICogU2V0IHNjcm9sbCBiYXIgYXBwZWFyYW5jZSBvbiBDaHJvbWUgKGFuZCBmaXJlZm94KS5cbiAqIEFsbCBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCBhbmQgZGVmYXVsdCB0byBzcGVjaWZpYyBnbG9iYWwgc2V0dGluZ3MuXG4gKi9cblxuZXhwb3J0IHZhciBldWlTY3JvbGxCYXJTdHlsZXMgPSBmdW5jdGlvbiBldWlTY3JvbGxCYXJTdHlsZXMoX3JlZikge1xuICB2YXIgX3JlZiRldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWUsXG4gICAgY29sb3JzID0gX3JlZiRldWlUaGVtZS5jb2xvcnMsXG4gICAgc2l6ZSA9IF9yZWYkZXVpVGhlbWUuc2l6ZTtcbiAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBfdGh1bWJDb2xvciA9IF9yZWYyLnRodW1iQ29sb3IsXG4gICAgX3JlZjIkdHJhY2tDb2xvciA9IF9yZWYyLnRyYWNrQ29sb3IsXG4gICAgdHJhY2tDb2xvciA9IF9yZWYyJHRyYWNrQ29sb3IgPT09IHZvaWQgMCA/ICd0cmFuc3BhcmVudCcgOiBfcmVmMiR0cmFja0NvbG9yLFxuICAgIF9yZWYyJHdpZHRoID0gX3JlZjIud2lkdGgsXG4gICAgd2lkdGggPSBfcmVmMiR3aWR0aCA9PT0gdm9pZCAwID8gJ3RoaW4nIDogX3JlZjIkd2lkdGgsXG4gICAgX3NpemUgPSBfcmVmMi5zaXplLFxuICAgIF9jb3JuZXIgPSBfcmVmMi5jb3JuZXI7XG4gIC8vIFNldCBkZWZhdWx0cyBmcm9tIHRoZW1lXG4gIHZhciB0aHVtYkNvbG9yID0gX3RodW1iQ29sb3IgfHwgdHJhbnNwYXJlbnRpemUoY29sb3JzLmRhcmtTaGFkZSwgMC41KTtcbiAgdmFyIHNjcm9sbEJhclNpemUgPSBfc2l6ZSB8fCBzaXplLmJhc2U7XG4gIHZhciBzY3JvbGxCYXJDb3JuZXIgPSBfY29ybmVyIHx8IHdpZHRoID09PSAndGhpbicgPyBcImNhbGMoXCIuY29uY2F0KHNpemUucywgXCIgKiAwLjc1KVwiKSA6IHNpemUueHM7XG5cbiAgLy8gRmlyZWZveCdzIHNjcm9sbGJhciBjb2xvcmluZyBjYXNjYWRlcywgYnV0IHRoZSBzaXppbmcgZG9lcyBub3QsXG4gIC8vIHNvIGl0J3MgYmVpbmcgYWRkZWQgdG8gdGhpcyBtaXhpbiBmb3IgYWxsb3dpbmcgc3VwcG9ydCB3aGVyZXZlciBjdXN0b20gc2Nyb2xsYmFycyBhcmVcbiAgdmFyIGZpcmVmb3hTdXBwb3J0ID0gXCJzY3JvbGxiYXItY29sb3I6IFwiLmNvbmNhdCh0aHVtYkNvbG9yLCBcIiBcIikuY29uY2F0KHRyYWNrQ29sb3IsIFwiO1wiKTtcbiAgcmV0dXJuIFwic2Nyb2xsYmFyLXdpZHRoOiBcIi5jb25jYXQod2lkdGgsIFwiO1xcblxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhciB7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsIHNjcm9sbEJhclNpemUpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0Jywgc2Nyb2xsQmFyU2l6ZSksIFwiXFxuICAgIH1cXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQodGh1bWJDb2xvciwgXCI7XFxuICAgICAgYmFja2dyb3VuZC1jbGlwOiBjb250ZW50LWJveDtcXG4gICAgICBib3JkZXItcmFkaXVzOiBcIikuY29uY2F0KHNjcm9sbEJhclNpemUsIFwiO1xcbiAgICAgIGJvcmRlcjogXCIpLmNvbmNhdChzY3JvbGxCYXJDb3JuZXIsIFwiIHNvbGlkIFwiKS5jb25jYXQodHJhY2tDb2xvciwgXCI7XFxuICAgIH1cXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyLFxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdCh0cmFja0NvbG9yLCBcIjtcXG4gICAgfVxcblxcbiAgICBcIikuY29uY2F0KGZpcmVmb3hTdXBwb3J0LCBcIlxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2Nyb2xsQmFyID0gZnVuY3Rpb24gdXNlRXVpU2Nyb2xsQmFyKG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZSwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqICpJTlRFUk5BTCpcbiAqIE92ZXJmbG93IHNoYWRvdyBtYXNrcyBmb3IgdXNlIGluIFlTY3JvbGwgYW5kIFhTY3JvbGwgaGVscGVyc1xuICovXG5cbnZhciBldWlPdmVyZmxvd1NoYWRvd1N0eWxlcyA9IGZ1bmN0aW9uIGV1aU92ZXJmbG93U2hhZG93U3R5bGVzKF9yZWYzKSB7XG4gIHZhciBzaXplID0gX3JlZjMuZXVpVGhlbWUuc2l6ZTtcbiAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBfZGlyZWN0aW9uID0gX3JlZjQuZGlyZWN0aW9uLFxuICAgIF9zaWRlID0gX3JlZjQuc2lkZTtcbiAgdmFyIGRpcmVjdGlvbiA9IF9kaXJlY3Rpb24gfHwgJ3knO1xuICB2YXIgc2lkZSA9IF9zaWRlIHx8ICdib3RoJztcbiAgdmFyIGhpZGVIZWlnaHQgPSBzaXplLnM7XG4gIHZhciBncmFkaWVudFN0YXJ0ID0gXCJcXG4gIFwiLmNvbmNhdCh0cmFuc3BhcmVudGl6ZSgncmVkJywgMC4xKSwgXCIgMCUsXFxuICBcIikuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAxKSwgXCIgXCIpLmNvbmNhdChoaWRlSGVpZ2h0LCBcIlxcbiAgXCIpO1xuICB2YXIgZ3JhZGllbnRFbmQgPSBcIlxcbiAgXCIuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAxKSwgXCIgY2FsYygxMDAlIC0gXCIpLmNvbmNhdChoaWRlSGVpZ2h0LCBcIiksXFxuICBcIikuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAwLjEpLCBcIiAxMDAlXFxuICBcIik7XG4gIHZhciBncmFkaWVudCA9ICcnO1xuICBpZiAoc2lkZSkge1xuICAgIGlmIChzaWRlID09PSAnYm90aCcpIHtcbiAgICAgIGdyYWRpZW50ID0gXCJcIi5jb25jYXQoZ3JhZGllbnRTdGFydCwgXCIsIFwiKS5jb25jYXQoZ3JhZGllbnRFbmQpO1xuICAgIH0gZWxzZSBpZiAoc2lkZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgZ3JhZGllbnQgPSBcIlwiLmNvbmNhdChncmFkaWVudFN0YXJ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JhZGllbnQgPSBcIlwiLmNvbmNhdChncmFkaWVudEVuZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hyb21lK0VkZ2UgaGFzIGEgdmVyeSBiaXphcnJlIGVkZ2UgY2FzZSBidWcgd2hlcmUgYG1hc2staW1hZ2VgIHN0b3BzIHdvcmtpbmdcbiAgLy8gVGhpcyB3b3JrYXJvdW5kIGZvcmNlcyBhIHN0YWNraW5nIGNvbnRleHQgb24gdGhlIHNjcm9sbGluZyBjb250YWluZXIsIHdoaWNoXG4gIC8vIGhvcGVmdWxseSBhZGRyZXNzZXMgdGhlIGJ1Zy4gQHNlZTpcbiAgLy8gLSBodHRwczovL2lzc3Vlcy5jaHJvbWl1bS5vcmcvaXNzdWVzLzQwNzc4NTQxXG4gIC8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMva2liYW5hL2lzc3Vlcy8xODA4MjhcbiAgLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC82MzQzI2lzc3VlY29tbWVudC0xMzAyNzMyMDIxXG4gIHZhciBjaHJvbWl1bU1hc2tXb3JrYXJvdW5kID0gJ3RyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsnO1xuICBpZiAoZGlyZWN0aW9uID09PSAneScpIHtcbiAgICByZXR1cm4gXCJtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCBcIi5jb25jYXQoZ3JhZGllbnQsIFwiKTsgXCIpLmNvbmNhdChjaHJvbWl1bU1hc2tXb3JrYXJvdW5kKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIFwiLmNvbmNhdChncmFkaWVudCwgXCIpOyBcIikuY29uY2F0KGNocm9taXVtTWFza1dvcmthcm91bmQpO1xuICB9XG59O1xuXG4vKipcbiAqIDEuIEZvY3VzIHJpbmdzIHNob3VsZG4ndCBiZSB2aXNpYmxlIG9uIHNjcm9sbGFibGUgcmVnaW9ucywgYnV0IGExMXkgcmVxdWlyZXMgdGhlbSB0byBiZSBmb2N1c2FibGUuXG4gKiAgICBCcm93c2VyJ3Mgc3VwcG9ydGluZyBgOmZvY3VzLXZpc2libGVgIHdpbGwgc3RpbGwgc2hvdyBvdXRsaW5lIG9uIGtleWJvYXJkIGZvY3VzIG9ubHkuXG4gKiAgICBPdGhlcnMgbGlrZSBTYWZhcmksIHdvbid0IHNob3cgYW55dGhpbmcgYXQgYWxsLlxuICovXG5cbmV4cG9ydCB2YXIgZXVpWVNjcm9sbCA9IGZ1bmN0aW9uIGV1aVlTY3JvbGwoZXVpVGhlbWUpIHtcbiAgdmFyIF9yZWY1ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBoZWlnaHQgPSBfcmVmNS5oZWlnaHQ7XG4gIHJldHVybiBcIlxcbiAgXCIuY29uY2F0KGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZSksIFwiXFxuICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGhlaWdodCB8fCAnMTAwJScpLCBcIlxcbiAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrKCdvdmVyZmxvdy15JywgJ2F1dG8nKSwgXCJcXG4gIFwiKS5jb25jYXQobG9naWNhbENTU1dpdGhGYWxsYmFjaygnb3ZlcmZsb3cteCcsICdoaWRkZW4nKSwgXCJcXG4gICY6Zm9jdXMge1xcbiAgICBvdXRsaW5lOiBub25lOyAvKiAxICovXFxuICB9XFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpWVNjcm9sbCA9IGZ1bmN0aW9uIHVzZUV1aVlTY3JvbGwoKSB7XG4gIHZhciBfcmVmNiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgaGVpZ2h0ID0gX3JlZjYuaGVpZ2h0O1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpWVNjcm9sbChldWlUaGVtZSwge1xuICAgIGhlaWdodDogaGVpZ2h0XG4gIH0pO1xufTtcbmV4cG9ydCB2YXIgZXVpWVNjcm9sbFdpdGhTaGFkb3dzID0gZnVuY3Rpb24gZXVpWVNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKSB7XG4gIHZhciBfcmVmNyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgaGVpZ2h0ID0gX3JlZjcuaGVpZ2h0LFxuICAgIF9yZWY3JHNpZGUgPSBfcmVmNy5zaWRlLFxuICAgIHNpZGUgPSBfcmVmNyRzaWRlID09PSB2b2lkIDAgPyAnYm90aCcgOiBfcmVmNyRzaWRlO1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChldWlZU2Nyb2xsKGV1aVRoZW1lLCB7XG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfSksIFwiXFxuICBcIikuY29uY2F0KGV1aU92ZXJmbG93U2hhZG93U3R5bGVzKGV1aVRoZW1lLCB7XG4gICAgZGlyZWN0aW9uOiAneScsXG4gICAgc2lkZTogc2lkZVxuICB9KSwgXCJcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlZU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiB1c2VFdWlZU2Nyb2xsV2l0aFNoYWRvd3MoKSB7XG4gIHZhciBfcmVmOCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgaGVpZ2h0ID0gX3JlZjguaGVpZ2h0O1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpWVNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lLCB7XG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfSk7XG59O1xuZXhwb3J0IHZhciBldWlYU2Nyb2xsID0gZnVuY3Rpb24gZXVpWFNjcm9sbChldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWUpLCBcIlxcbiAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrKCdvdmVyZmxvdy14JywgJ2F1dG8nKSwgXCJcXG4gICY6Zm9jdXMge1xcbiAgICBvdXRsaW5lOiBub25lOyAvKiAxICovXFxuICB9XFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpWFNjcm9sbCA9IGZ1bmN0aW9uIHVzZUV1aVhTY3JvbGwoKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlYU2Nyb2xsKGV1aVRoZW1lKTtcbn07XG5leHBvcnQgdmFyIGV1aVhTY3JvbGxXaXRoU2hhZG93cyA9IGZ1bmN0aW9uIGV1aVhTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChldWlYU2Nyb2xsKGV1aVRoZW1lKSwgXCJcXG4gIFwiKS5jb25jYXQoZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMoZXVpVGhlbWUsIHtcbiAgICBkaXJlY3Rpb246ICd4J1xuICB9KSwgXCJcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlYU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiB1c2VFdWlYU2Nyb2xsV2l0aFNoYWRvd3MoKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlYU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpT3ZlcmZsb3dTY3JvbGwgPSBmdW5jdGlvbiBldWlPdmVyZmxvd1Njcm9sbChldWlUaGVtZSkge1xuICB2YXIgX3JlZjkgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIGRpcmVjdGlvbiA9IF9yZWY5LmRpcmVjdGlvbixcbiAgICBfcmVmOSRtYXNrID0gX3JlZjkubWFzayxcbiAgICBtYXNrID0gX3JlZjkkbWFzayA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmOSRtYXNrO1xuICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG1hc2sgPyBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIDogZXVpWVNjcm9sbChldWlUaGVtZSk7XG4gICAgY2FzZSAneCc6XG4gICAgICByZXR1cm4gbWFzayA/IGV1aVhTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSkgOiBldWlYU2Nyb2xsKGV1aVRoZW1lKTtcbiAgICBkZWZhdWx0OlxuICAgICAgY29uc29sZS53YXJuKCdQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIGRpcmVjdGlvbiBvcHRpb24gdG8gdXNlRXVpT3ZlcmZsb3dTY3JvbGwnKTtcbiAgICAgIHJldHVybiAnJztcbiAgfVxufTtcbmV4cG9ydCB2YXIgdXNlRXVpT3ZlcmZsb3dTY3JvbGwgPSBmdW5jdGlvbiB1c2VFdWlPdmVyZmxvd1Njcm9sbChkaXJlY3Rpb24pIHtcbiAgdmFyIG1hc2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpT3ZlcmZsb3dTY3JvbGwoZXVpVGhlbWUsIHtcbiAgICBkaXJlY3Rpb246IGRpcmVjdGlvbixcbiAgICBtYXNrOiBtYXNrXG4gIH0pO1xufTtcblxuLyoqXG4gKiBGb3IgcXVpY2tseSBhcHBseWluZyBhIGZ1bGwtaGVpZ2h0IGVsZW1lbnQgd2hldGhlciB1c2luZyBmbGV4IG9yIG5vdFxuICovXG5leHBvcnQgdmFyIGV1aUZ1bGxIZWlnaHQgPSBmdW5jdGlvbiBldWlGdWxsSGVpZ2h0KCkge1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCAnMTAwJScpLCBcIlxcbiAgZmxleDogMSAxIGF1dG87XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcblwiKTtcbn07XG5cbi8qKlxuICogQSBjb25zdGFudCBzdG9yaW5nIHRoZSBzdXBwb3J0IGZvciB0aGUgYDpoYXMoKWAgc2VsZWN0b3IgdGhyb3VnaCBhXG4gKiBtZWRpYSBxdWVyeSB0aGF0IHdpbGwgb25seSBhcHBseSB0aGUgY29udGVudCBpdCBpcyBzdXBwb3J0ZWQuXG4gKi9cbmV4cG9ydCB2YXIgZXVpU3VwcG9ydHNIYXMgPSAnQHN1cHBvcnRzKHNlbGVjdG9yKDpoYXMocCkpKSc7IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmV4cG9ydCB2YXIgUEFERElOR19TSVpFUyA9IFsnbm9uZScsICd4cycsICdzJywgJ20nLCAnbCcsICd4bCddO1xuLyoqXG4gKiBHZXQgYSBzaW5nbGUgcGFkZGluZyBzaXplXG4gKi9cblxuZXhwb3J0IHZhciBldWlQYWRkaW5nU2l6ZSA9IGZ1bmN0aW9uIGV1aVBhZGRpbmdTaXplKF9yZWYsIHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgc3dpdGNoIChzaXplKSB7XG4gICAgY2FzZSAnbm9uZSc6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBldWlUaGVtZS5zaXplLmJhc2U7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldWlUaGVtZS5zaXplW3NpemVdO1xuICB9XG59O1xuXG4vKipcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgcGFkZGluZyBzaXplIGtleXMgdG8gcGFkZGluZyB2YWx1ZXMsXG4gKiBlLmcuIHsgczogJzhweCcsIG06ICcxNnB4JywgLi4uIH1cbiAqL1xudmFyIF9nZXRFdWlQYWRkaW5nU2l6ZSA9IGZ1bmN0aW9uIF9nZXRFdWlQYWRkaW5nU2l6ZShldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIFBBRERJTkdfU0laRVMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZXNBY2MsIHNpemUpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZXNBY2MpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBzaXplLCBzaXplID09PSAnbm9uZScgPyBudWxsIDogZXVpUGFkZGluZ1NpemUoZXVpVGhlbWVDb250ZXh0LCBzaXplKSkpO1xuICB9LCB7fSk7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlQYWRkaW5nU2l6ZSA9IGZ1bmN0aW9uIHVzZUV1aVBhZGRpbmdTaXplKHNpemUpIHtcbiAgdmFyIHNpemVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoX2dldEV1aVBhZGRpbmdTaXplKTtcbiAgcmV0dXJuIHNpemVzW3NpemVdO1xufTtcblxuLyoqXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgbWFwIG9mIGFsbCBwYWRkaW5nIHNpemVzIGZvciBhbGwgcGFkZGluZyBzaWRlcyBwcm9wZXJ0aWVzXG4gKiBlLmcuLCB7XG4gKiAgIHBhZGRpbmc6IHsgczogY3NzYHBhZGRpbmctc2l6ZTogOHB4YCwgLi4uIH1cbiAqICAgbGVmdDogeyBzOiBjc3NgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDhweGAsIC4uLiB9XG4gKiB9XG4gKi9cbnZhciBfZXVpUGFkZGluZ1NpZGVzQW5kU2l6ZXMgPSBmdW5jdGlvbiBfZXVpUGFkZGluZ1NpZGVzQW5kU2l6ZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBzaXplc01hcCA9IF9nZXRFdWlQYWRkaW5nU2l6ZShldWlUaGVtZUNvbnRleHQpO1xuICAvLyBUaGUgYF9gIHByZWZpeCBzdG9wcyBFbW90aW9uIGZyb20gYXBwbHlpbmcgdGhlIGZ1bmN0aW9uIG5hbWUgYXMgYSBsYWJlbFxuICB2YXIgX2dlbmVyYXRlU2l6ZVN0eWxlcyA9IGZ1bmN0aW9uIF9nZW5lcmF0ZVNpemVTdHlsZXMoY3NzUHJvcGVydHkpIHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHNpemVzTWFwKS5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgX3JlZjMgPSBfc2xpY2VkVG9BcnJheShfcmVmMiwgMiksXG4gICAgICAgIHNpemVLZXkgPSBfcmVmM1swXSxcbiAgICAgICAgc2l6ZVZhbHVlID0gX3JlZjNbMV07XG4gICAgICByZXR1cm4gW3NpemVLZXksIHNpemVWYWx1ZSA9PT0gbnVsbCA/IG51bGwgOiAvKiNfX1BVUkVfXyovY3NzKGNzc1Byb3BlcnR5LCBcIjpcIiwgc2l6ZVZhbHVlLCBcIjtsYWJlbDpcIiwgc2l6ZUtleSwgXCI7XCIpXTtcbiAgICB9KSk7XG4gIH07XG4gIHZhciBzaWRlc01hcCA9IHtcbiAgICBwYWRkaW5nOiBfZ2VuZXJhdGVTaXplU3R5bGVzKCdwYWRkaW5nJyksXG4gICAgdmVydGljYWw6IF9nZW5lcmF0ZVNpemVTdHlsZXMoJ3BhZGRpbmctYmxvY2snKSxcbiAgICB0b3A6IF9nZW5lcmF0ZVNpemVTdHlsZXMoJ3BhZGRpbmctYmxvY2stc3RhcnQnKSxcbiAgICBib3R0b206IF9nZW5lcmF0ZVNpemVTdHlsZXMoJ3BhZGRpbmctYmxvY2stZW5kJyksXG4gICAgaG9yaXpvbnRhbDogX2dlbmVyYXRlU2l6ZVN0eWxlcygncGFkZGluZy1pbmxpbmUnKSxcbiAgICBsZWZ0OiBfZ2VuZXJhdGVTaXplU3R5bGVzKCdwYWRkaW5nLWlubGluZS1zdGFydCcpLFxuICAgIHJpZ2h0OiBfZ2VuZXJhdGVTaXplU3R5bGVzKCdwYWRkaW5nLWlubGluZS1lbmQnKVxuICB9O1xuICByZXR1cm4gc2lkZXNNYXA7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlQYWRkaW5nQ1NTID0gZnVuY3Rpb24gdXNlRXVpUGFkZGluZ0NTUyhzaWRlKSB7XG4gIHZhciBtZW1vaXplZFNpZGVNYXAgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhfZXVpUGFkZGluZ1NpZGVzQW5kU2l6ZXMpO1xuICByZXR1cm4gbWVtb2l6ZWRTaWRlTWFwW3NpZGUgfHwgJ3BhZGRpbmcnXTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG4vKipcbiAqIEl0IGlzIGJlc3QgcHJhY3RpY2UgdG8gdXRpbGl6ZSB0aGUgYnJvd3NlcidzIGRlZmF1bHQgYG91dGxpbmVgIHByb3BlcnR5IGZvciBoYW5kbGluZyBmb2N1cyByaW5ncy5cbiAqIEhvd2V2ZXIsIHNvbWUgY29tcG9uZW50cyBuZWVkIHRvIGJlIGZvcmNlZCB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW9yLCBvciBhZGp1c3QgdGhlIGRpc3BsYXkuXG4gKiBUaGlzIGZ1bmN0aW9uIHJlLWFwcGxpZXMgdGhlIHNhbWUgZGVmYXVsdCBvdXRsaW5lIHdpdGggYSBjb3VwbGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIGV1aVRoZW1lIFVzZUV1aVRoZW1lXG4gKiBAcGFyYW0gb2Zmc2V0IEFjY2VwdHMgYSBzcGVjaWZpYyBtZWFzdXJlbWVudCBvciAnaW5zZXQnLCAnb3V0c2V0JyBvciAnY2VudGVyJyB0byBhZGp1c3Qgb3V0bGluZSBwb3NpdGlvblxuICogQHBhcmFtIGNvbG9yIEFjY2VwdHMgYW55IENTUyBjb2xvclxuICovXG5cbmV4cG9ydCB2YXIgZXVpT3V0bGluZSA9IGZ1bmN0aW9uIGV1aU91dGxpbmUoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICB2YXIgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnY2VudGVyJztcbiAgdmFyIGNvbG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIC8vIFdpZHRoIGlzIGVuZm9yY2VkIGFzIGEgY29uc3RhbnQgYXQgdGhlIGdsb2JhbCB0aGVtZSBsYXllclxuICB2YXIgb3V0bGluZVdpZHRoID0gZXVpVGhlbWUuZm9jdXMud2lkdGg7XG4gIHZhciBvdXRsaW5lQ29sb3IgPSBjb2xvciB8fCBldWlUaGVtZS5mb2N1cy5jb2xvcjtcbiAgdmFyIG91dGxpbmVPZmZzZXQgPSBvZmZzZXQ7XG4gIGlmIChvZmZzZXQgPT09ICdpbnNldCcpIHtcbiAgICBvdXRsaW5lT2Zmc2V0ID0gXCItXCIuY29uY2F0KG91dGxpbmVXaWR0aCk7XG4gIH0gZWxzZSBpZiAob2Zmc2V0ID09PSAnb3V0c2V0Jykge1xuICAgIG91dGxpbmVPZmZzZXQgPSBcIlwiLmNvbmNhdChvdXRsaW5lV2lkdGgpO1xuICB9IGVsc2UgaWYgKG9mZnNldCA9PT0gJ2NlbnRlcicpIHtcbiAgICBvdXRsaW5lT2Zmc2V0ID0gbWF0aFdpdGhVbml0cyhvdXRsaW5lV2lkdGgsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAvIC0yO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVGhpcyBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIGZyb20gYGV1aUZvY3VzUmluZ2AgYmVjYXVzZSBzb21lIEVVSSBjb21wb25lbnRzXG4gIC8vIG5lZWQgdGhlIG91dGxpbmUgc3R5bGVzIG9ubHksIG5vdCB0aGUgOmZvY3VzLXZpc2libGUgc2V0dGluZ3MgKGUuZy4gLSA6Zm9jdXMtd2l0aGluIHVzYWdlKVxuICByZXR1cm4gXCJcXG4gICAgb3V0bGluZTogXCIuY29uY2F0KG91dGxpbmVXaWR0aCwgXCIgc29saWQgXCIpLmNvbmNhdChvdXRsaW5lQ29sb3IsIFwiO1xcbiAgICBvdXRsaW5lLW9mZnNldDogXCIpLmNvbmNhdChvdXRsaW5lT2Zmc2V0LCBcIjtcXG4gIFwiKTtcbn07XG5leHBvcnQgdmFyIGV1aUZvY3VzUmluZyA9IGZ1bmN0aW9uIGV1aUZvY3VzUmluZyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIG9mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2NlbnRlcic7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdXRpbGl6ZXMgYGZvY3VzLXZpc2libGVgIHRvIHR1cm4gb24gZm9jdXMgb3V0bGluZXMuXG4gIC8vIEJ1dCB0aGlzIGlzIGJyb3dzZXItZGVwZW5kZW50OlxuICAvLyBcdUQ4M0RcdURDNDkgU2FmYXJpIGFuZCBGaXJlZm94IGlubmF0ZWx5IHJlc3BlY3Qgb25seSBzaG93aW5nIHRoZSBvdXRsaW5lIHdpdGgga2V5Ym9hcmQgb25seVxuICAvLyBcdUQ4M0RcdURDOTQgQnV0IHRoZXkgZG9uJ3QgYWxsb3cgY29sb3Jpbmcgb2YgdGhlICdhdXRvJy9kZWZhdWx0IG91dGxpbmUsIHNvIGNvbnRyYXN0IGlzIG5vIGdvb2QgaW4gZGFyayBtb2RlLlxuICAvLyBcdUQ4M0RcdURDNDkgRm9yIHRoZXNlIGJyb3dzZXJzIHdlIHVzZSB0aGUgc29saWQgdHlwZSBpbiBvcmRlciB0byBtYXRjaCB3aXRoIGBjdXJyZW50Q29sb3JgLlxuICAvLyBcdUQ4M0RcdURFMjYgV2hpY2ggZG9lcyBtZWFucyB0aGUgb3V0bGluZSB3aWxsIGJlIHNxdWFyZVxuICByZXR1cm4gXCJcXG4gICAgXCIuY29uY2F0KGV1aU91dGxpbmUoZXVpVGhlbWVDb250ZXh0LCBvZmZzZXQsIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jb2xvcikudHJpbSgpLCBcIlxcblxcbiAgICAvLyBcXHVEODNEXFx1REM0MCBDaHJvbWUgcmVzcGVjdHMgOmZvY3VzLXZpc2libGUgYW5kIGFsbG93cyBjb2xvcmluZyB0aGUgYGF1dG9gIHN0eWxlXFxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgb3V0bGluZS1zdHlsZTogYXV0bztcXG4gICAgfVxcblxcbiAgICAvLyBcXHVEODNEXFx1REU0NVxcdTIwMERcXHUyNjQwXFx1RkUwRiBCdXQgQ2hyb21lIGFsc28gbmVlZHMgdG8gaGF2ZSB0aGUgb3V0bGluZSBmb3JjZWZ1bGx5IHJlbW92ZWQgZnJvbSByZWd1bGFyIGA6Zm9jdXNgIHN0YXRlXFxuICAgICY6bm90KDpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgfVxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpRm9jdXNSaW5nID0gZnVuY3Rpb24gdXNlRXVpRm9jdXNSaW5nKG9mZnNldCwgY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aUZvY3VzUmluZyhldWlUaGVtZSwgb2Zmc2V0LCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBldWlMaW5lSGVpZ2h0RnJvbUJhc2VsaW5lLCBldWlGb250U2l6ZUZyb21TY2FsZSB9IGZyb20gJy4uL2Z1bmN0aW9ucy90eXBvZ3JhcGh5JztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzLCB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IEV1aVRoZW1lRm9udFNjYWxlcyB9IGZyb20gJy4uL3ZhcmlhYmxlcy90eXBvZ3JhcGh5JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuLyoqXG4gKiBSZXR1cm5zIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHRcbiAqL1xuZXhwb3J0IHZhciBldWlGb250U2l6ZSA9IGZ1bmN0aW9uIGV1aUZvbnRTaXplKF9yZWYsIHNjYWxlLCBvcHRpb25zKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZm9udFNpemU6IGV1aUZvbnRTaXplRnJvbVNjYWxlKHNjYWxlLCBldWlUaGVtZSwgb3B0aW9ucyksXG4gICAgbGluZUhlaWdodDogZXVpTGluZUhlaWdodEZyb21CYXNlbGluZShzY2FsZSwgZXVpVGhlbWUsIG9wdGlvbnMpXG4gIH07XG59O1xuZXhwb3J0IHZhciB1c2VFdWlGb250U2l6ZSA9IGZ1bmN0aW9uIHVzZUV1aUZvbnRTaXplKHNjYWxlLCBvcHRpb25zKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBtZW1vaXplZEZvbnRTaXplcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUZvbnRTaXplcyk7XG4gIHJldHVybiAhb3B0aW9ucyA/IG1lbW9pemVkRm9udFNpemVzW3NjYWxlXSA6IGV1aUZvbnRTaXplKGV1aVRoZW1lLCBzY2FsZSwgb3B0aW9ucyk7XG59O1xuLy8gTWVtb21pemUgYSBiYXNpYyBzZXQgb2YgZm9udCBzaXplcy4gV2UgdW5mb3J0dW5hdGVseSBjYW4ndFxuLy8gbWVtb2l6ZSBhbGwgcG9zc2libGUgb3B0aW9ucywgdGhlcmUncyB0b28gbWFueSBwZXJtdXRhdGlvbnNcbnZhciBldWlGb250U2l6ZXMgPSBmdW5jdGlvbiBldWlGb250U2l6ZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiBFdWlUaGVtZUZvbnRTY2FsZXMucmVkdWNlKGZ1bmN0aW9uIChtYXAsIHNjYWxlKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbWFwKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgc2NhbGUsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgc2NhbGUpKSk7XG4gIH0sIHt9KTtcbn07XG5cbi8qKlxuICogRm9yY2UgdGV4dCB0byB3cmFwIG9uIG5hdHVyYWwgd29yZCBicmVha3MgKGUuZy4gc3BhY2VzICYgaHlwaGVucylcbiAqIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL3ByZXZlbnQtbG9uZy11cmxzLWZyb20tYnJlYWtpbmctb3V0LW9mLWNvbnRhaW5lci9cbiAqL1xuZXhwb3J0IHZhciBldWlUZXh0QnJlYWtXb3JkID0gZnVuY3Rpb24gZXVpVGV4dEJyZWFrV29yZCgpIHtcbiAgcmV0dXJuIFwiXFxuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkICFpbXBvcnRhbnQ7IC8vIG1ha2VzIHN1cmUgdGhlIGxvbmcgc3RyaW5nIHdpbGwgd3JhcCBhbmQgbm90IGJ1c3Qgb3V0IG9mIHRoZSBjb250YWluZXJcXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XFxuXCI7XG59O1xuXG4vKipcbiAqIFByZXZlbnQgdGV4dCBmcm9tIHdyYXBwaW5nIG9udG8gbXVsdGlwbGUgbGluZXMsIGFuZCB0cnVuY2F0ZSB3aXRoIGFuIGVsbGlwc2lzLlxuICovXG5leHBvcnQgdmFyIGV1aVRleHRUcnVuY2F0ZSA9IGZ1bmN0aW9uIGV1aVRleHRUcnVuY2F0ZSgpIHtcbiAgdmFyIG1heFdpZHRoID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnMTAwJSc7XG4gIHJldHVybiBcIlxcbiAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsIG1heFdpZHRoKSAvLyBFbnN1cmUgdGhhdCB0aGUgbm9kZSBoYXMgYSBtYXhpbXVtIHdpZHRoIGFmdGVyIHdoaWNoIHRydW5jYXRpb24gY2FuIG9jY3VyXG4gICwgXCJcXG4gIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzICFpbXBvcnRhbnQ7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7XFxuXCIpO1xufTtcblxuLyoqXG4gKiBGaXhlZC13aWR0aCBudW1iZXJzIGZvciB0YWJ1bGFyIGRhdGFcbiAqL1xuZXhwb3J0IHZhciBldWlOdW1iZXJGb3JtYXQgPSBmdW5jdGlvbiBldWlOdW1iZXJGb3JtYXQoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHJldHVybiBcIlxcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcIi5jb25jYXQoZXVpVGhlbWUuZm9udC5mZWF0dXJlU2V0dGluZ3MsIFwiLCAndG51bScgMTtcXG5cIik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBzb3J0TWFwQnlTbWFsbFRvTGFyZ2VWYWx1ZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9icmVha3BvaW50L19zb3J0aW5nJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvaG9va3MnO1xuLyoqXG4gKiBHZW5lcmF0ZXMgYSBDU1MgbWVkaWEgcXVlcnkgcnVsZSBzdHJpbmcgYmFzZWQgb24gdGhlIGlucHV0IGJyZWFrcG9pbnQgKnJhbmdlcyouXG4gKiBFeGFtcGxlcyB3aXRoIGRlZmF1bHQgdGhlbWUgYnJlYWtwb2ludHM6XG4gKlxuICogZXVpQnJlYWtwb2ludChbJ3MnXSkgYmVjb21lcyBgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NzVweCkgYW5kIChtYXgtd2lkdGg6IDc2N3B4KWBcbiAqIGV1aUJyZWFrcG9pbnQoWydzJywgJ2wnXSkgYmVjb21lcyBgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NzVweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweClgXG4gKlxuICogVXNlIHRoZSBzbWFsbGVzdCBhbmQgbGFyZ2VzdCBzaXplcyB0byBnZW5lcmF0ZSBtZWRpYSBxdWVyaWVzIHdpdGggb25seSBtaW4vbWF4LXdpZHRoLlxuICogRXhhbXBsZXMgd2l0aCBkZWZhdWx0IHRoZW1lIGJyZWFrcG9pbnRzOlxuICpcbiAqIGV1aUJyZWFrcG9pbnQoWyd4cycsICdtJ10pIGJlY29tZXMgYEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogOTkxcHgpYFxuICogZXVpQnJlYWtwb2ludChbJ2wnLCAneGwnXSkgYmVjb21lcyBgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA5OTJweClgXG4gKi9cbmV4cG9ydCB2YXIgZXVpQnJlYWtwb2ludCA9IGZ1bmN0aW9uIGV1aUJyZWFrcG9pbnQoX3JlZiwgc2l6ZXMpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgLy8gRW5zdXJlIHdlIGluaGVyaXQgYW55IHRoZW1lIGJyZWFrcG9pbnQgb3ZlcnJpZGVzICYgc29ydCBieSBzbWFsbCB0byBsYXJnZVxuICB2YXIgb3JkZXJlZEJyZWFrcG9pbnRzID0gT2JqZWN0LmtleXMoc29ydE1hcEJ5U21hbGxUb0xhcmdlVmFsdWVzKGV1aVRoZW1lLmJyZWFrcG9pbnQpKTtcblxuICAvLyBFbnN1cmUgdGhlIHNpemVzIGFycmF5IGlzIGluIHRoZSBjb3JyZWN0IGFzY2VuZGluZyBzaXplIG9yZGVyXG4gIHZhciBvcmRlcmVkU2l6ZXMgPSBzaXplcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG9yZGVyZWRCcmVha3BvaW50cy5pbmRleE9mKGEpIC0gb3JkZXJlZEJyZWFrcG9pbnRzLmluZGV4T2YoYik7XG4gIH0pO1xuICB2YXIgZmlyc3RCcmVha3BvaW50ID0gb3JkZXJlZFNpemVzWzBdO1xuICB2YXIgbWluQnJlYWtwb2ludFNpemUgPSBldWlUaGVtZS5icmVha3BvaW50W2ZpcnN0QnJlYWtwb2ludF07XG4gIHZhciBsYXN0QnJlYWtwb2ludCA9IG9yZGVyZWRTaXplc1tzaXplcy5sZW5ndGggLSAxXTtcbiAgdmFyIG1heEJyZWFrcG9pbnRTaXplO1xuXG4gIC8vIFRvIGdldCB0aGUgY29ycmVjdCBzY3JlZW4gcmFuZ2UsIHdlIHNldCB0aGUgbWF4LXdpZHRoIHRvIHRoZSBuZXh0IGJyZWFrcG9pbnRcbiAgLy8gc2l6ZSBpbiB0aGUgc2l6ZXMgYXJyYXkgKHVubGVzcyB0aGUgc2l6ZSBpcyBhbHJlYWR5IHRoZSBsYXJnZXN0IGJyZWFrcG9pbnQpXG4gIGlmIChsYXN0QnJlYWtwb2ludCAhPT0gb3JkZXJlZEJyZWFrcG9pbnRzW29yZGVyZWRCcmVha3BvaW50cy5sZW5ndGggLSAxXSkge1xuICAgIHZhciBuZXh0QnJlYWtwb2ludCA9IG9yZGVyZWRCcmVha3BvaW50cy5pbmRleE9mKGxhc3RCcmVha3BvaW50KSArIDE7XG4gICAgbWF4QnJlYWtwb2ludFNpemUgPSBldWlUaGVtZS5icmVha3BvaW50W29yZGVyZWRCcmVha3BvaW50c1tuZXh0QnJlYWtwb2ludF1dO1xuICB9XG4gIHJldHVybiBbJ0BtZWRpYSBvbmx5IHNjcmVlbicsIG1pbkJyZWFrcG9pbnRTaXplID8gXCIobWluLXdpZHRoOiBcIi5jb25jYXQobWluQnJlYWtwb2ludFNpemUsIFwicHgpXCIpIDogZmFsc2UsXG4gIC8vIElmIDAsIGRvbid0IHJlbmRlciBhIG1pbi13aWR0aFxuICBtYXhCcmVha3BvaW50U2l6ZSA/IFwiKG1heC13aWR0aDogXCIuY29uY2F0KG1heEJyZWFrcG9pbnRTaXplIC0gMSwgXCJweClcIikgOiBmYWxzZSAvLyBJZiB1bmRlZmluZWQsIGRvbid0IHJlbmRlciBhIG1heC13aWR0aFxuICBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgYW5kICcpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpQnJlYWtwb2ludCA9IGZ1bmN0aW9uIHVzZUV1aUJyZWFrcG9pbnQoc2l6ZXMpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aUJyZWFrcG9pbnQoZXVpVGhlbWUsIHNpemVzKTtcbn07XG5cbi8qKlxuICogTWluL01heCB3aWR0aCBicmVha3BvaW50IHV0aWxpdGllcyB0aGF0IGdlbmVyYXRlIG9ubHkgYSBzaW5nbGUgbWluL21heCBxdWVyeS9ib3VuZFxuICpcbiAqICpVbmxpa2UgdGhlIGFib3ZlIGV1aUJyZWFrcG9pbnQgdXRpbGl0eSosIHRoZXNlIHV0aWxpdGllcyB0cmVhdCBicmVha3BvaW50XG4gKiBzaXplcyBhcyBhIG9uZS1kaW1lbnNpb25hbCBwb2ludCwgcmF0aGVyIHRoYW4gYSB0d28tZGltZW5zaW9uYWwgKnNjcmVlbiByYW5nZSouXG4gKiBFeGFtcGxlcyB3aXRoIGRlZmF1bHQgdGhlbWUgYnJlYWtwb2ludHM6XG4gKlxuICogZXVpTWF4QnJlYWtwb2ludCgnbScpIGJlY29tZXMgYEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpYFxuICogZXVpTWluQnJlYWtwb2ludCgnbScpIGJlY29tZXMgYEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpYFxuICpcbiAqIFRoaXMgaXMgc2FmZXIgYW5kIG1vcmUgaW50ZW50aW9uYWwgdG8gdXNlIHRoYW4gZXVpQnJlYWtwb2ludChbJ3hzJywgJ3MnXSkgLyBldWlCcmVha3BvaW50KFsnbScsICd4bCddKVxuICogaW4gdGhlIGV2ZW50IHRoYXQgY29uc3VtZXJzIGFkZCBsYXJnZXIgb3Igc21hbGxlciBjdXN0b20gYnJlYWtwb2ludHMgKGUuZyAneHhzJyBvciBgeHhsYClcbiAqIGFuZCBpZiB0aGUgaW50ZW50aW9uIG9mIHRoZSBtZWRpYSBxdWVyeSBpcyBhY3R1YWxseSBcIm0gYW5kIGJlbG93L2Fib3ZlXCIgdnMuIFwib25seSBzY3JlZW5zIG0vbC94bFwiLlxuICovXG5cbmV4cG9ydCB2YXIgZXVpTWluQnJlYWtwb2ludCA9IGZ1bmN0aW9uIGV1aU1pbkJyZWFrcG9pbnQoX3JlZjIsIHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHZhciBtaW5CcmVha3BvaW50U2l6ZSA9IGV1aVRoZW1lLmJyZWFrcG9pbnRbc2l6ZV07XG4gIGlmIChtaW5CcmVha3BvaW50U2l6ZSkge1xuICAgIHJldHVybiBcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogXCIuY29uY2F0KG1pbkJyZWFrcG9pbnRTaXplLCBcInB4KVwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLndhcm4oXCJJbnZhbGlkIG1pbiBicmVha3BvaW50IHNpemU6IFwiLmNvbmNhdChzaXplKSk7XG4gICAgcmV0dXJuICdAbWVkaWEgb25seSBzY3JlZW4nO1xuICB9XG59O1xuZXhwb3J0IHZhciB1c2VFdWlNaW5CcmVha3BvaW50ID0gZnVuY3Rpb24gdXNlRXVpTWluQnJlYWtwb2ludChzaXplKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlNaW5CcmVha3BvaW50KGV1aVRoZW1lLCBzaXplKTtcbn07XG5leHBvcnQgdmFyIGV1aU1heEJyZWFrcG9pbnQgPSBmdW5jdGlvbiBldWlNYXhCcmVha3BvaW50KF9yZWYzLCBzaXplKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lO1xuICB2YXIgbWF4QnJlYWtwb2ludFNpemUgPSBldWlUaGVtZS5icmVha3BvaW50W3NpemVdO1xuICBpZiAobWF4QnJlYWtwb2ludFNpemUpIHtcbiAgICByZXR1cm4gXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IFwiLmNvbmNhdChtYXhCcmVha3BvaW50U2l6ZSAtIDEsIFwicHgpXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgbWF4IGJyZWFrcG9pbnQgc2l6ZTogXCIuY29uY2F0KHNpemUpKTtcbiAgICByZXR1cm4gJ0BtZWRpYSBvbmx5IHNjcmVlbic7XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aU1heEJyZWFrcG9pbnQgPSBmdW5jdGlvbiB1c2VFdWlNYXhCcmVha3BvaW50KHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aU1heEJyZWFrcG9pbnQoZXVpVGhlbWUsIHNpemUpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciByZXNldFN0eWxlcyA9IFwiXFxuLyogLy8gQWRhcHRlZCBmcm9tIEVyaWMgTWV5ZXIncyByZXNldCAoaHR0cDovL21leWVyd2ViLmNvbS9lcmljL3Rvb2xzL2Nzcy9yZXNldC8sIHYyLjAgfCAyMDExMDEyNikuICovXFxuXFxuXFxuKiwgKjpiZWZvcmUsICo6YWZ0ZXIge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBhcHBsZXQsIG9iamVjdCwgaWZyYW1lLFxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSxcXG5hLCBhYmJyLCBhY3JvbnltLCBhZGRyZXNzLCBiaWcsIGNpdGUsIGNvZGUsXFxuZGVsLCBkZm4sIGVtLCBpbWcsIGlucywga2JkLCBxLCBzLCBzYW1wLFxcbnNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsXFxuYiwgdSwgaSwgY2VudGVyLFxcbmRsLCBkdCwgZGQsIG9sLCB1bCwgbGksXFxuZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsXFxudGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsXFxuYXJ0aWNsZSwgYXNpZGUsIGNhbnZhcywgZGV0YWlscywgZW1iZWQsXFxuZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLFxcbm1lbnUsIG5hdiwgb3V0cHV0LCBydWJ5LCBzZWN0aW9uLCBzdW1tYXJ5LFxcbnRpbWUsIG1hcmssIGF1ZGlvLCB2aWRlbyB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbn1cXG5cXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBwIHtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxufVxcblxcbi8qIEhUTUw1IGRpc3BsYXktcm9sZSByZXNldCBmb3Igb2xkZXIgYnJvd3NlcnMgKi9cXG5hcnRpY2xlLCBhc2lkZSwgZGV0YWlscywgZmlnY2FwdGlvbiwgZmlndXJlLFxcbmZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsIG1lbnUsIG5hdiwgc2VjdGlvbiB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuYVtocmVmXSxcXG5idXR0b24sXFxuW3JvbGU9J2J1dHRvbiddIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuYnV0dG9uIHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBib3JkZXI6IG5vbmU7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbn1cXG5cXG5pbnB1dCB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG5pbnB1dDpkaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAxOyAvKiByZXF1aXJlZCBvbiBpT1MgKi9cXG59XFxuXFxub2wsXFxudWwge1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG59XFxuXFxuYmxvY2txdW90ZSxcXG5xIHtcXG4gIHF1b3Rlczogbm9uZTtcXG59XFxuXFxuYmxvY2txdW90ZTpiZWZvcmUsXFxuYmxvY2txdW90ZTphZnRlcixcXG5xOmJlZm9yZSxcXG5xOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbn1cXG5cXG50YWJsZSB7XFxuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xcbiAgYm9yZGVyLXNwYWNpbmc6IDA7XFxufVxcblxcbmhyIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuZmllbGRzZXQge1xcbiAgbWluLWlubGluZS1zaXplOiBhdXRvO1xcbn1cXG5cXG4vKiBDaHJvbWUgaGFzIGFuIGlzc3VlIGFyb3VuZCBSVEwgbGFuZ3VhZ2VzIGluIFNWR3Mgd2hlbiBsZXR0ZXItc3BhY2luZyBpcyBuZWdhdGl2ZVxcbiAqIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTk2NjQ4MFxcbiAqL1xcbnN2ZyB0ZXh0IHtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWwgIWltcG9ydGFudDtcXG59XCI7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogQSBjb25zdGFudCBzdG9yaW5nIHRoZSBgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbmAgbWVkaWEgcXVlcnlcbiAqIHNvIHRoYXQgd2hlbiBpdCBpcyB0dXJuZWQgb2ZmLCBhbmltYXRpb25zIGFyZSBub3QgcnVuLlxuICovXG5leHBvcnQgdmFyIGV1aUNhbkFuaW1hdGUgPSAnQG1lZGlhIHNjcmVlbiBhbmQgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpJztcblxuLyoqXG4gKiBBIGNvbnN0YW50IHN0b3JpbmcgdGhlIGBwcmVmZXJzLXJlZHVjZWQtbW90aW9uYCBtZWRpYSBxdWVyeSB0aGF0IHdpbGxcbiAqIG9ubHkgYXBwbHkgdGhlIGNvbnRlbnQgaWYgdGhlIHNldHRpbmcgaXMgb2ZmIChyZWR1Y2UpLlxuICovXG5leHBvcnQgdmFyIGV1aUNhbnRBbmltYXRlID0gJ0BtZWRpYSBzY3JlZW4gYW5kIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJztcblxuLyoqXG4gKiBTcGVlZHMgLyBEdXJhdGlvbnMgLyBEZWxheXNcbiAqL1xuXG5leHBvcnQgdmFyIEV1aVRoZW1lQW5pbWF0aW9uU3BlZWRzID0gWydleHRyYUZhc3QnLCAnZmFzdCcsICdub3JtYWwnLCAnc2xvdycsICdleHRyYVNsb3cnXTtcbi8qKlxuICogRWFzaW5ncyAvIFRpbWluZyBmdW5jdGlvbnNcbiAqL1xuXG5leHBvcnQgdmFyIEV1aVRoZW1lQW5pbWF0aW9uRWFzaW5ncyA9IFsnYm91bmNlJywgJ3Jlc2lzdGFuY2UnXTsiLCAidmFyIF90ZW1wbGF0ZU9iamVjdCwgX3RlbXBsYXRlT2JqZWN0MiwgX3RlbXBsYXRlT2JqZWN0MywgX3RlbXBsYXRlT2JqZWN0NDtcbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoZSwgdCkgeyByZXR1cm4gdCB8fCAodCA9IGUuc2xpY2UoMCkpLCBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHQpIH0gfSkpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgdmFyIGV1aUFuaW1GYWRlSW4gPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgMCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcblxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuXCJdKSkpO1xuZXhwb3J0IHZhciBldWlBbmltU2xpZGVJblVwID0gZnVuY3Rpb24gZXVpQW5pbVNsaWRlSW5VcChzaXplKSB7XG4gIHJldHVybiBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0MiB8fCAoX3RlbXBsYXRlT2JqZWN0MiA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgMCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoXCIsIFwiKTtcXG4gIH1cXG5cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XFxuICB9XFxuXCJdKSksIHNpemUpO1xufTtcbmV4cG9ydCB2YXIgZXVpQW5pbVNsaWRlWCA9IGZ1bmN0aW9uIGV1aUFuaW1TbGlkZVgoc2l6ZSkge1xuICByZXR1cm4ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdDMgfHwgKF90ZW1wbGF0ZU9iamVjdDMgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgMCUge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoXCIsIFwiKTtcXG4gIH1cXG5cXG4gIDEwMCUge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XFxuXFxuICB9XFxuXCJdKSksIHNpemUpO1xufTtcbmV4cG9ydCB2YXIgZXVpQW5pbVNjYWxlID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdDQgfHwgKF90ZW1wbGF0ZU9iamVjdDQgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgMCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcblxcbiAgMSUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgfVxcblxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICB9XFxuXCJdKSkpOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsU2l6ZUNTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxuLypcbiAqIE1peGluIHRoYXQgaGlkZXMgZWxlbWVudHMgb2Zmc2NyZWVuIHRvIG9ubHkgYmUgcmVhZCBieSBzY3JlZW4gcmVhZGVyXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvNTEzMCBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvNTE1MiBmb3IgbW9yZSBpbmZvXG4gKi9cbmV4cG9ydCB2YXIgZXVpU2NyZWVuUmVhZGVyT25seSA9IGZ1bmN0aW9uIGV1aVNjcmVlblJlYWRlck9ubHkoKSB7XG4gIHJldHVybiBcIlxcbiAgLyogVGFrZSB0aGUgZWxlbWVudCBvdXQgb2YgdGhlIGxheW91dCAqL1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgLyogS2VlcCBpdCB2ZXJ0aWNhbGx5IGlubGluZSAqL1xcbiAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ3RvcCcsICdhdXRvJyksIFwiXFxuICAvKiBDaHJvbWUgcmVxdWlyZXMgYSBsZWZ0IHZhbHVlLCBhbmQgU2VsZW5pdW0gKHVzZWQgYnkgS2liYW5hJ3MgRlRSKSByZXF1aXJlcyBhbiBvZmYtc2NyZWVuIHBvc2l0aW9uIGZvciBpdHMgLmdldFZpc2libGVUZXh0KCkgdG8gbm90IHJlZ2lzdGVyIFNSLW9ubHkgdGV4dCAqL1xcbiAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdsZWZ0JywgJy0xMDAwMHB4JyksIFwiXFxuICAvKiBUaGUgZWxlbWVudCBtdXN0IGhhdmUgYSBzaXplIChmb3Igc29tZSBzY3JlZW4gcmVhZGVycykgKi9cXG4gIFwiKS5jb25jYXQobG9naWNhbFNpemVDU1MoJzFweCcsICcxcHgnKSwgXCJcXG4gIC8qIEJ1dCByZWR1Y2UgdGhlIHZpc2libGUgc2l6ZSB0byBub3RoaW5nICovXFxuICBjbGlwOiByZWN0KDAgMCAwIDApO1xcbiAgY2xpcC1wYXRoOiBpbnNldCg1MCUpO1xcbiAgLyogQW5kIGVuc3VyZSBubyBvdmVyZmxvd3Mgb2NjdXIgKi9cXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICAvKiBDaHJvbWUgcmVxdWlyZXMgdGhlIG5lZ2F0aXZlIG1hcmdpbiB0byBub3QgY2F1c2Ugb3ZlcmZsb3dzIG9mIHBhcmVudCBjb250YWluZXJzICovXFxuICBtYXJnaW46IC0xcHg7XFxuXCIpO1xufTtcblxuLypcbiAqIFN0eWxlc1xuICovXG5leHBvcnQgdmFyIGV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMgPSB7XG4gIGV1aVNjcmVlblJlYWRlck9ubHk6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NyZWVuUmVhZGVyT25seSgpLCBcIjtsYWJlbDpldWlTY3JlZW5SZWFkZXJPbmx5O1wiKSxcbiAgJ2V1aVNjcmVlblJlYWRlck9ubHktc2hvd09uRm9jdXMnOiAvKiNfX1BVUkVfXyovY3NzKFwiJjpub3QoOmZvY3VzLCA6YWN0aXZlLCA6Zm9jdXMtd2l0aGluKXtcIiwgZXVpU2NyZWVuUmVhZGVyT25seSgpLCBcIjt9O2xhYmVsOmV1aVNjcmVlblJlYWRlck9ubHktc2hvd09uRm9jdXM7XCIpXG59OyIsICJjb25zdCBjYW5kaWRhdGVTZWxlY3RvcnMgPSBbXG4gICdpbnB1dCcsXG4gICdzZWxlY3QnLFxuICAndGV4dGFyZWEnLFxuICAnYVtocmVmXScsXG4gICdidXR0b24nLFxuICAnW3RhYmluZGV4XTpub3Qoc2xvdCknLFxuICAnYXVkaW9bY29udHJvbHNdJyxcbiAgJ3ZpZGVvW2NvbnRyb2xzXScsXG4gICdbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKScsXG4gICdkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZScsXG4gICdkZXRhaWxzJyxcbl07XG5jb25zdCBjYW5kaWRhdGVTZWxlY3RvciA9IC8qICNfX1BVUkVfXyAqLyBjYW5kaWRhdGVTZWxlY3RvcnMuam9pbignLCcpO1xuXG5jb25zdCBOb0VsZW1lbnQgPSB0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IG1hdGNoZXMgPSBOb0VsZW1lbnRcbiAgPyBmdW5jdGlvbiAoKSB7fVxuICA6IEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgfHxcbiAgICBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fFxuICAgIEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcjtcblxuY29uc3QgZ2V0Um9vdE5vZGUgPVxuICAhTm9FbGVtZW50ICYmIEVsZW1lbnQucHJvdG90eXBlLmdldFJvb3ROb2RlXG4gICAgPyAoZWxlbWVudCkgPT4gZWxlbWVudC5nZXRSb290Tm9kZSgpXG4gICAgOiAoZWxlbWVudCkgPT4gZWxlbWVudC5vd25lckRvY3VtZW50O1xuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWwgY29udGFpbmVyIHRvIGNoZWNrIGluXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVDb250YWluZXIgYWRkIGNvbnRhaW5lciB0byBjaGVja1xuICogQHBhcmFtIHsobm9kZTogRWxlbWVudCkgPT4gYm9vbGVhbn0gZmlsdGVyIGZpbHRlciBjYW5kaWRhdGVzXG4gKiBAcmV0dXJucyB7RWxlbWVudFtdfVxuICovXG5jb25zdCBnZXRDYW5kaWRhdGVzID0gZnVuY3Rpb24gKGVsLCBpbmNsdWRlQ29udGFpbmVyLCBmaWx0ZXIpIHtcbiAgbGV0IGNhbmRpZGF0ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoXG4gICAgZWwucXVlcnlTZWxlY3RvckFsbChjYW5kaWRhdGVTZWxlY3RvcilcbiAgKTtcbiAgaWYgKGluY2x1ZGVDb250YWluZXIgJiYgbWF0Y2hlcy5jYWxsKGVsLCBjYW5kaWRhdGVTZWxlY3RvcikpIHtcbiAgICBjYW5kaWRhdGVzLnVuc2hpZnQoZWwpO1xuICB9XG4gIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLmZpbHRlcihmaWx0ZXIpO1xuICByZXR1cm4gY2FuZGlkYXRlcztcbn07XG5cbi8qKlxuICogQGNhbGxiYWNrIEdldFNoYWRvd1Jvb3RcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCB0byBjaGVjayBmb3Igc2hhZG93IHJvb3RcbiAqIEByZXR1cm5zIHtTaGFkb3dSb290fGJvb2xlYW59IFNoYWRvd1Jvb3QgaWYgYXZhaWxhYmxlIG9yIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBhIHNoYWRvd1Jvb3QgaXMgYXR0YWNoZWQgYnV0IG5vdCBhdmFpbGFibGUuXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgU2hhZG93Um9vdEZpbHRlclxuICogQHBhcmFtIHtFbGVtZW50fSBzaGFkb3dIb3N0Tm9kZSB0aGUgZWxlbWVudCB3aGljaCBjb250YWlucyBzaGFkb3cgY29udGVudFxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgYSBzaGFkb3cgcm9vdCBjb3VsZCBwb3RlbnRpYWxseSBjb250YWluIHZhbGlkIGNhbmRpZGF0ZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYW5kaWRhdGVzU2NvcGVcbiAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gc2NvcGUgY29udGFpbnMgaW5uZXIgY2FuZGlkYXRlc1xuICogQHByb3BlcnR5IHtFbGVtZW50W119IGNhbmRpZGF0ZXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEl0ZXJhdGl2ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7R2V0U2hhZG93Um9vdHxib29sZWFufSBnZXRTaGFkb3dSb290IHRydWUgaWYgc2hhZG93IHN1cHBvcnQgaXMgZW5hYmxlZDsgZmFsc3kgaWYgbm90O1xuICogIGlmIGEgZnVuY3Rpb24sIGltcGxpZXMgc2hhZG93IHN1cHBvcnQgaXMgZW5hYmxlZCBhbmQgZWl0aGVyIHJldHVybnMgdGhlIHNoYWRvdyByb290IG9mIGFuIGVsZW1lbnRcbiAqICBvciBhIGJvb2xlYW4gc3RhdGluZyBpZiBpdCBoYXMgYW4gdW5kaXNjbG9zZWQgc2hhZG93IHJvb3RcbiAqIEBwcm9wZXJ0eSB7KG5vZGU6IEVsZW1lbnQpID0+IGJvb2xlYW59IGZpbHRlciBmaWx0ZXIgY2FuZGlkYXRlc1xuICogQHByb3BlcnR5IHtib29sZWFufSBmbGF0dGVuIGlmIHRydWUgdGhlbiByZXN1bHQgd2lsbCBmbGF0dGVuIGFueSBDYW5kaWRhdGVzU2NvcGUgaW50byB0aGUgcmV0dXJuZWQgbGlzdFxuICogQHByb3BlcnR5IHtTaGFkb3dSb290RmlsdGVyfSBzaGFkb3dSb290RmlsdGVyIGZpbHRlciBzaGFkb3cgcm9vdHM7XG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnRbXX0gZWxlbWVudHMgbGlzdCBvZiBlbGVtZW50IGNvbnRhaW5lcnMgdG8gbWF0Y2ggY2FuZGlkYXRlcyBmcm9tXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVDb250YWluZXIgYWRkIGNvbnRhaW5lciBsaXN0IHRvIGNoZWNrXG4gKiBAcGFyYW0ge0l0ZXJhdGl2ZU9wdGlvbnN9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtBcnJheS48RWxlbWVudHxDYW5kaWRhdGVzU2NvcGU+fVxuICovXG5jb25zdCBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkgPSBmdW5jdGlvbiAoXG4gIGVsZW1lbnRzLFxuICBpbmNsdWRlQ29udGFpbmVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtdO1xuICBjb25zdCBlbGVtZW50c1RvQ2hlY2sgPSBBcnJheS5mcm9tKGVsZW1lbnRzKTtcbiAgd2hpbGUgKGVsZW1lbnRzVG9DaGVjay5sZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNUb0NoZWNrLnNoaWZ0KCk7XG4gICAgaWYgKGVsZW1lbnQudGFnTmFtZSA9PT0gJ1NMT1QnKSB7XG4gICAgICAvLyBhZGQgc2hhZG93IGRvbSBzbG90IHNjb3BlIChzbG90IGl0c2VsZiBjYW5ub3QgYmUgZm9jdXNhYmxlKVxuICAgICAgY29uc3QgYXNzaWduZWQgPSBlbGVtZW50LmFzc2lnbmVkRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhc3NpZ25lZC5sZW5ndGggPyBhc3NpZ25lZCA6IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgICBjb25zdCBuZXN0ZWRDYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KGNvbnRlbnQsIHRydWUsIG9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbnMuZmxhdHRlbikge1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goLi4ubmVzdGVkQ2FuZGlkYXRlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICAgIHNjb3BlOiBlbGVtZW50LFxuICAgICAgICAgIGNhbmRpZGF0ZXM6IG5lc3RlZENhbmRpZGF0ZXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjaGVjayBjYW5kaWRhdGUgZWxlbWVudFxuICAgICAgY29uc3QgdmFsaWRDYW5kaWRhdGUgPSBtYXRjaGVzLmNhbGwoZWxlbWVudCwgY2FuZGlkYXRlU2VsZWN0b3IpO1xuICAgICAgaWYgKFxuICAgICAgICB2YWxpZENhbmRpZGF0ZSAmJlxuICAgICAgICBvcHRpb25zLmZpbHRlcihlbGVtZW50KSAmJlxuICAgICAgICAoaW5jbHVkZUNvbnRhaW5lciB8fCAhZWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCkpXG4gICAgICApIHtcbiAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBpdGVyYXRlIG92ZXIgc2hhZG93IGNvbnRlbnQgaWYgcG9zc2libGVcbiAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPVxuICAgICAgICBlbGVtZW50LnNoYWRvd1Jvb3QgfHxcbiAgICAgICAgLy8gY2hlY2sgZm9yIGFuIHVuZGlzY2xvc2VkIHNoYWRvd1xuICAgICAgICAodHlwZW9mIG9wdGlvbnMuZ2V0U2hhZG93Um9vdCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgIG9wdGlvbnMuZ2V0U2hhZG93Um9vdChlbGVtZW50KSk7XG5cbiAgICAgIGNvbnN0IHZhbGlkU2hhZG93Um9vdCA9XG4gICAgICAgICFvcHRpb25zLnNoYWRvd1Jvb3RGaWx0ZXIgfHwgb3B0aW9ucy5zaGFkb3dSb290RmlsdGVyKGVsZW1lbnQpO1xuXG4gICAgICBpZiAoc2hhZG93Um9vdCAmJiB2YWxpZFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgLy8gYWRkIHNoYWRvdyBkb20gc2NvcGUgSUlGIGEgc2hhZG93IHJvb3Qgbm9kZSB3YXMgZ2l2ZW47IG90aGVyd2lzZSwgYW4gdW5kaXNjbG9zZWRcbiAgICAgICAgLy8gIHNoYWRvdyBleGlzdHMsIHNvIGxvb2sgYXQgbGlnaHQgZG9tIGNoaWxkcmVuIGFzIGZhbGxiYWNrIEJVVCBjcmVhdGUgYSBzY29wZSBmb3IgYW55XG4gICAgICAgIC8vICBjaGlsZCBjYW5kaWRhdGVzIGZvdW5kIGJlY2F1c2UgdGhleSdyZSBsaWtlbHkgc2xvdHRlZCBlbGVtZW50cyAoZWxlbWVudHMgdGhhdCBhcmVcbiAgICAgICAgLy8gIGNoaWxkcmVuIG9mIHRoZSB3ZWIgY29tcG9uZW50IGVsZW1lbnQgKHdoaWNoIGhhcyB0aGUgc2hhZG93KSwgaW4gdGhlIGxpZ2h0IGRvbSwgYnV0XG4gICAgICAgIC8vICBzbG90dGVkIHNvbWV3aGVyZSBfaW5zaWRlXyB0aGUgdW5kaXNjbG9zZWQgc2hhZG93KSAtLSB0aGUgc2NvcGUgaXMgY3JlYXRlZCBiZWxvdyxcbiAgICAgICAgLy8gIF9hZnRlcl8gd2UgcmV0dXJuIGZyb20gdGhpcyByZWN1cnNpdmUgY2FsbFxuICAgICAgICBjb25zdCBuZXN0ZWRDYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KFxuICAgICAgICAgIHNoYWRvd1Jvb3QgPT09IHRydWUgPyBlbGVtZW50LmNoaWxkcmVuIDogc2hhZG93Um9vdC5jaGlsZHJlbixcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5mbGF0dGVuKSB7XG4gICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKC4uLm5lc3RlZENhbmRpZGF0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgICAgICBzY29wZTogZWxlbWVudCxcbiAgICAgICAgICAgIGNhbmRpZGF0ZXM6IG5lc3RlZENhbmRpZGF0ZXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoZXJlJ3Mgbm90IHNoYWRvdyBzbyBqdXN0IGRpZyBpbnRvIHRoZSBlbGVtZW50J3MgKGxpZ2h0IGRvbSkgY2hpbGRyZW5cbiAgICAgICAgLy8gIF9fd2l0aG91dF9fIGdpdmluZyB0aGUgZWxlbWVudCBzcGVjaWFsIHNjb3BlIHRyZWF0bWVudFxuICAgICAgICBlbGVtZW50c1RvQ2hlY2sudW5zaGlmdCguLi5lbGVtZW50LmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbmRpZGF0ZXM7XG59O1xuXG5jb25zdCBnZXRUYWJpbmRleCA9IGZ1bmN0aW9uIChub2RlLCBpc1Njb3BlKSB7XG4gIGlmIChub2RlLnRhYkluZGV4IDwgMCkge1xuICAgIC8vIGluIENocm9tZSwgPGRldGFpbHMvPiwgPGF1ZGlvIGNvbnRyb2xzLz4gYW5kIDx2aWRlbyBjb250cm9scy8+IGVsZW1lbnRzIGdldCBhIGRlZmF1bHRcbiAgICAvLyBgdGFiSW5kZXhgIG9mIC0xIHdoZW4gdGhlICd0YWJpbmRleCcgYXR0cmlidXRlIGlzbid0IHNwZWNpZmllZCBpbiB0aGUgRE9NLFxuICAgIC8vIHlldCB0aGV5IGFyZSBzdGlsbCBwYXJ0IG9mIHRoZSByZWd1bGFyIHRhYiBvcmRlcjsgaW4gRkYsIHRoZXkgZ2V0IGEgZGVmYXVsdFxuICAgIC8vIGB0YWJJbmRleGAgb2YgMDsgc2luY2UgQ2hyb21lIHN0aWxsIHB1dHMgdGhvc2UgZWxlbWVudHMgaW4gdGhlIHJlZ3VsYXIgdGFiXG4gICAgLy8gb3JkZXIsIGNvbnNpZGVyIHRoZWlyIHRhYiBpbmRleCB0byBiZSAwLlxuICAgIC8vIEFsc28gYnJvd3NlcnMgZG8gbm90IHJldHVybiBgdGFiSW5kZXhgIGNvcnJlY3RseSBmb3IgY29udGVudEVkaXRhYmxlIG5vZGVzO1xuICAgIC8vIHNvIGlmIHRoZXkgZG9uJ3QgaGF2ZSBhIHRhYmluZGV4IGF0dHJpYnV0ZSBzcGVjaWZpY2FsbHkgc2V0LCBhc3N1bWUgaXQncyAwLlxuICAgIC8vXG4gICAgLy8gaXNTY29wZSBpcyBwb3NpdGl2ZSBmb3IgY3VzdG9tIGVsZW1lbnQgd2l0aCBzaGFkb3cgcm9vdCBvciBzbG90IHRoYXQgYnkgZGVmYXVsdFxuICAgIC8vIGhhdmUgdGFiSW5kZXggLTEsIGJ1dCBuZWVkIHRvIGJlIHNvcnRlZCBieSBkb2N1bWVudCBvcmRlciBpbiBvcmRlciBmb3IgdGhlaXJcbiAgICAvLyBjb250ZW50IHRvIGJlIGluc2VydGVkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG4gICAgaWYgKFxuICAgICAgKGlzU2NvcGUgfHxcbiAgICAgICAgL14oQVVESU98VklERU98REVUQUlMUykkLy50ZXN0KG5vZGUudGFnTmFtZSkgfHxcbiAgICAgICAgbm9kZS5pc0NvbnRlbnRFZGl0YWJsZSkgJiZcbiAgICAgIGlzTmFOKHBhcnNlSW50KG5vZGUuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpLCAxMCkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZS50YWJJbmRleDtcbn07XG5cbmNvbnN0IHNvcnRPcmRlcmVkVGFiYmFibGVzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgcmV0dXJuIGEudGFiSW5kZXggPT09IGIudGFiSW5kZXhcbiAgICA/IGEuZG9jdW1lbnRPcmRlciAtIGIuZG9jdW1lbnRPcmRlclxuICAgIDogYS50YWJJbmRleCAtIGIudGFiSW5kZXg7XG59O1xuXG5jb25zdCBpc0lucHV0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ0lOUFVUJztcbn07XG5cbmNvbnN0IGlzSGlkZGVuSW5wdXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gaXNJbnB1dChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdoaWRkZW4nO1xufTtcblxuY29uc3QgaXNEZXRhaWxzV2l0aFN1bW1hcnkgPSBmdW5jdGlvbiAobm9kZSkge1xuICBjb25zdCByID1cbiAgICBub2RlLnRhZ05hbWUgPT09ICdERVRBSUxTJyAmJlxuICAgIEFycmF5LnByb3RvdHlwZS5zbGljZVxuICAgICAgLmFwcGx5KG5vZGUuY2hpbGRyZW4pXG4gICAgICAuc29tZSgoY2hpbGQpID0+IGNoaWxkLnRhZ05hbWUgPT09ICdTVU1NQVJZJyk7XG4gIHJldHVybiByO1xufTtcblxuY29uc3QgZ2V0Q2hlY2tlZFJhZGlvID0gZnVuY3Rpb24gKG5vZGVzLCBmb3JtKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobm9kZXNbaV0uY2hlY2tlZCAmJiBub2Rlc1tpXS5mb3JtID09PSBmb3JtKSB7XG4gICAgICByZXR1cm4gbm9kZXNbaV07XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBpc1RhYmJhYmxlUmFkaW8gPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAoIW5vZGUubmFtZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IHJhZGlvU2NvcGUgPSBub2RlLmZvcm0gfHwgZ2V0Um9vdE5vZGUobm9kZSk7XG4gIGNvbnN0IHF1ZXJ5UmFkaW9zID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gcmFkaW9TY29wZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgJ2lucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJyArIG5hbWUgKyAnXCJdJ1xuICAgICk7XG4gIH07XG5cbiAgbGV0IHJhZGlvU2V0O1xuICBpZiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2Ygd2luZG93LkNTUyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUgPT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmFkaW9TZXQgPSBxdWVyeVJhZGlvcyh3aW5kb3cuQ1NTLmVzY2FwZShub2RlLm5hbWUpKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgcmFkaW9TZXQgPSBxdWVyeVJhZGlvcyhub2RlLm5hbWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdMb29rcyBsaWtlIHlvdSBoYXZlIGEgcmFkaW8gYnV0dG9uIHdpdGggYSBuYW1lIGF0dHJpYnV0ZSBjb250YWluaW5nIGludmFsaWQgQ1NTIHNlbGVjdG9yIGNoYXJhY3RlcnMgYW5kIG5lZWQgdGhlIENTUy5lc2NhcGUgcG9seWZpbGw6ICVzJyxcbiAgICAgICAgZXJyLm1lc3NhZ2VcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2hlY2tlZCA9IGdldENoZWNrZWRSYWRpbyhyYWRpb1NldCwgbm9kZS5mb3JtKTtcbiAgcmV0dXJuICFjaGVja2VkIHx8IGNoZWNrZWQgPT09IG5vZGU7XG59O1xuXG5jb25zdCBpc1JhZGlvID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIGlzSW5wdXQobm9kZSkgJiYgbm9kZS50eXBlID09PSAncmFkaW8nO1xufTtcblxuY29uc3QgaXNOb25UYWJiYWJsZVJhZGlvID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIGlzUmFkaW8obm9kZSkgJiYgIWlzVGFiYmFibGVSYWRpbyhub2RlKTtcbn07XG5cbmNvbnN0IGlzWmVyb0FyZWEgPSBmdW5jdGlvbiAobm9kZSkge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB3aWR0aCA9PT0gMCAmJiBoZWlnaHQgPT09IDA7XG59O1xuY29uc3QgaXNIaWRkZW4gPSBmdW5jdGlvbiAobm9kZSwgeyBkaXNwbGF5Q2hlY2ssIGdldFNoYWRvd1Jvb3QgfSkge1xuICAvLyBOT1RFOiB2aXNpYmlsaXR5IHdpbGwgYmUgYHVuZGVmaW5lZGAgaWYgbm9kZSBpcyBkZXRhY2hlZCBmcm9tIHRoZSBkb2N1bWVudFxuICAvLyAgKHNlZSBub3RlcyBhYm91dCB0aGlzIGZ1cnRoZXIgZG93biksIHdoaWNoIG1lYW5zIHdlIHdpbGwgY29uc2lkZXIgaXQgdmlzaWJsZVxuICAvLyAgKHRoaXMgaXMgbGVnYWN5IGJlaGF2aW9yIGZyb20gYSB2ZXJ5IGxvbmcgd2F5IGJhY2spXG4gIC8vIE5PVEU6IHdlIGNoZWNrIHRoaXMgcmVnYXJkbGVzcyBvZiBgZGlzcGxheUNoZWNrPVwibm9uZVwiYCBiZWNhdXNlIHRoaXMgaXMgYVxuICAvLyAgX3Zpc2liaWxpdHlfIGNoZWNrLCBub3QgYSBfZGlzcGxheV8gY2hlY2tcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUobm9kZSkudmlzaWJpbGl0eSA9PT0gJ2hpZGRlbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGlzRGlyZWN0U3VtbWFyeSA9IG1hdGNoZXMuY2FsbChub2RlLCAnZGV0YWlscz5zdW1tYXJ5OmZpcnN0LW9mLXR5cGUnKTtcbiAgY29uc3Qgbm9kZVVuZGVyRGV0YWlscyA9IGlzRGlyZWN0U3VtbWFyeSA/IG5vZGUucGFyZW50RWxlbWVudCA6IG5vZGU7XG4gIGlmIChtYXRjaGVzLmNhbGwobm9kZVVuZGVyRGV0YWlscywgJ2RldGFpbHM6bm90KFtvcGVuXSkgKicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBUaGUgcm9vdCBub2RlIGlzIHRoZSBzaGFkb3cgcm9vdCBpZiB0aGUgbm9kZSBpcyBpbiBhIHNoYWRvdyBET007IHNvbWUgZG9jdW1lbnQgb3RoZXJ3aXNlXG4gIC8vICAoYnV0IE5PVCBfdGhlXyBkb2N1bWVudDsgc2VlIHNlY29uZCAnSWYnIGNvbW1lbnQgYmVsb3cgZm9yIG1vcmUpLlxuICAvLyBJZiByb290Tm9kZSBpcyBzaGFkb3cgcm9vdCwgaXQnbGwgaGF2ZSBhIGhvc3QsIHdoaWNoIGlzIHRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBzaGFkb3dcbiAgLy8gIGlzIGF0dGFjaGVkLCBhbmQgdGhlIG9uZSB3ZSBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgaW4gdGhlIGRvY3VtZW50IG9yIG5vdCAoYmVjYXVzZSB0aGVcbiAgLy8gIHNoYWRvdywgYW5kIGFsbCBub2RlcyBpdCBjb250YWlucywgaXMgbmV2ZXIgY29uc2lkZXJlZCBpbiB0aGUgZG9jdW1lbnQgc2luY2Ugc2hhZG93c1xuICAvLyAgYmVoYXZlIGxpa2Ugc2VsZi1jb250YWluZWQgRE9NczsgYnV0IGlmIHRoZSBzaGFkb3cncyBIT1NULCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBkb2N1bWVudCxcbiAgLy8gIGlzIGhpZGRlbiwgb3IgaXMgbm90IGluIHRoZSBkb2N1bWVudCBpdHNlbGYgYnV0IGlzIGRldGFjaGVkLCBpdCB3aWxsIGFmZmVjdCB0aGUgc2hhZG93J3NcbiAgLy8gIHZpc2liaWxpdHksIGluY2x1ZGluZyBhbGwgdGhlIG5vZGVzIGl0IGNvbnRhaW5zKS4gVGhlIGhvc3QgY291bGQgYmUgYW55IG5vcm1hbCBub2RlLFxuICAvLyAgb3IgYSBjdXN0b20gZWxlbWVudCAoaS5lLiB3ZWIgY29tcG9uZW50KS4gRWl0aGVyIHdheSwgdGhhdCdzIHRoZSBvbmUgdGhhdCBpcyBjb25zaWRlcmVkXG4gIC8vICBwYXJ0IG9mIHRoZSBkb2N1bWVudCwgbm90IHRoZSBzaGFkb3cgcm9vdCwgbm9yIGFueSBvZiBpdHMgY2hpbGRyZW4gKGkuZS4gdGhlIG5vZGUgYmVpbmdcbiAgLy8gIHRlc3RlZCkuXG4gIC8vIElmIHJvb3ROb2RlIGlzIG5vdCBhIHNoYWRvdyByb290LCBpdCB3b24ndCBoYXZlIGEgaG9zdCwgYW5kIHNvIHJvb3ROb2RlIHNob3VsZCBiZSB0aGVcbiAgLy8gIGRvY3VtZW50IChwZXIgdGhlIGRvY3MpIGFuZCB3aGlsZSBpdCdzIGEgRG9jdW1lbnQtdHlwZSBvYmplY3QsIHRoYXQgZG9jdW1lbnQgZG9lcyBub3RcbiAgLy8gIGFwcGVhciB0byBiZSB0aGUgc2FtZSBhcyB0aGUgbm9kZSdzIGBvd25lckRvY3VtZW50YCBmb3Igc29tZSByZWFzb24sIHNvIGl0J3Mgc2FmZXJcbiAgLy8gIHRvIGlnbm9yZSB0aGUgcm9vdE5vZGUgYXQgdGhpcyBwb2ludCwgYW5kIHVzZSBgbm9kZS5vd25lckRvY3VtZW50YC4gT3RoZXJ3aXNlLFxuICAvLyAgdXNpbmcgYHJvb3ROb2RlLmNvbnRhaW5zKG5vZGUpYCB3aWxsIF9hbHdheXNfIGJlIHRydWUgd2UnbGwgZ2V0IGZhbHNlLXBvc2l0aXZlcyB3aGVuXG4gIC8vICBub2RlIGlzIGFjdHVhbGx5IGRldGFjaGVkLlxuICBjb25zdCBub2RlUm9vdEhvc3QgPSBnZXRSb290Tm9kZShub2RlKS5ob3N0O1xuICBjb25zdCBub2RlSXNBdHRhY2hlZCA9XG4gICAgbm9kZVJvb3RIb3N0Py5vd25lckRvY3VtZW50LmNvbnRhaW5zKG5vZGVSb290SG9zdCkgfHxcbiAgICBub2RlLm93bmVyRG9jdW1lbnQuY29udGFpbnMobm9kZSk7XG5cbiAgaWYgKCFkaXNwbGF5Q2hlY2sgfHwgZGlzcGxheUNoZWNrID09PSAnZnVsbCcpIHtcbiAgICBpZiAodHlwZW9mIGdldFNoYWRvd1Jvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBub2RlIHRvIGJlIGluIGFuIHVuZGlzY2xvc2VkIHNoYWRvdyBhbmQgdXNlIHRoZVxuICAgICAgLy8gICdub24temVyby1hcmVhJyBmYWxsYmFja1xuICAgICAgY29uc3Qgb3JpZ2luYWxOb2RlID0gbm9kZTtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJvb3ROb2RlID0gZ2V0Um9vdE5vZGUobm9kZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJlbnRFbGVtZW50ICYmXG4gICAgICAgICAgIXBhcmVudEVsZW1lbnQuc2hhZG93Um9vdCAmJlxuICAgICAgICAgIGdldFNoYWRvd1Jvb3QocGFyZW50RWxlbWVudCkgPT09IHRydWUgLy8gY2hlY2sgaWYgdGhlcmUncyBhbiB1bmRpc2Nsb3NlZCBzaGFkb3dcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gbm9kZSBoYXMgYW4gdW5kaXNjbG9zZWQgc2hhZG93IHdoaWNoIG1lYW5zIHdlIGNhbiBvbmx5IHRyZWF0IGl0IGFzIGEgYmxhY2sgYm94LCBzbyB3ZVxuICAgICAgICAgIC8vICBmYWxsIGJhY2sgdG8gYSBub24temVyby1hcmVhIHRlc3RcbiAgICAgICAgICByZXR1cm4gaXNaZXJvQXJlYShub2RlKTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmFzc2lnbmVkU2xvdCkge1xuICAgICAgICAgIC8vIGl0ZXJhdGUgdXAgc2xvdFxuICAgICAgICAgIG5vZGUgPSBub2RlLmFzc2lnbmVkU2xvdDtcbiAgICAgICAgfSBlbHNlIGlmICghcGFyZW50RWxlbWVudCAmJiByb290Tm9kZSAhPT0gbm9kZS5vd25lckRvY3VtZW50KSB7XG4gICAgICAgICAgLy8gY3Jvc3Mgc2hhZG93IGJvdW5kYXJ5XG4gICAgICAgICAgbm9kZSA9IHJvb3ROb2RlLmhvc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaXRlcmF0ZSB1cCBub3JtYWwgZG9tXG4gICAgICAgICAgbm9kZSA9IHBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG9yaWdpbmFsTm9kZTtcbiAgICB9XG4gICAgLy8gZWxzZSwgYGdldFNoYWRvd1Jvb3RgIG1pZ2h0IGJlIHRydWUsIGJ1dCBhbGwgdGhhdCBkb2VzIGlzIGVuYWJsZSBzaGFkb3cgRE9NIHN1cHBvcnRcbiAgICAvLyAgKGkuZS4gaXQgZG9lcyBub3QgYWxzbyBwcmVzdW1lIHRoYXQgYWxsIG5vZGVzIG1pZ2h0IGhhdmUgdW5kaXNjbG9zZWQgc2hhZG93cyk7IG9yXG4gICAgLy8gIGl0IG1pZ2h0IGJlIGEgZmFsc3kgdmFsdWUsIHdoaWNoIG1lYW5zIHNoYWRvdyBET00gc3VwcG9ydCBpcyBkaXNhYmxlZFxuXG4gICAgLy8gU2luY2Ugd2UgZGlkbid0IGZpbmQgaXQgc2l0dGluZyBpbiBhbiB1bmRpc2Nsb3NlZCBzaGFkb3cgKG9yIHNoYWRvd3MgYXJlIGRpc2FibGVkKVxuICAgIC8vICBub3cgd2UgY2FuIGp1c3QgdGVzdCB0byBzZWUgaWYgaXQgd291bGQgbm9ybWFsbHkgYmUgdmlzaWJsZSBvciBub3QsIHByb3ZpZGVkIGl0J3NcbiAgICAvLyAgYXR0YWNoZWQgdG8gdGhlIG1haW4gZG9jdW1lbnQuXG4gICAgLy8gTk9URTogV2UgbXVzdCBjb25zaWRlciBjYXNlIHdoZXJlIG5vZGUgaXMgaW5zaWRlIGEgc2hhZG93IERPTSBhbmQgZ2l2ZW4gZGlyZWN0bHkgdG9cbiAgICAvLyAgYGlzVGFiYmFibGUoKWAgb3IgYGlzRm9jdXNhYmxlKClgIC0tIHJlZ2FyZGxlc3Mgb2YgYGdldFNoYWRvd1Jvb3RgIG9wdGlvbiBzZXR0aW5nLlxuXG4gICAgaWYgKG5vZGVJc0F0dGFjaGVkKSB7XG4gICAgICAvLyB0aGlzIHdvcmtzIHdoZXJldmVyIHRoZSBub2RlIGlzOiBpZiB0aGVyZSdzIGF0IGxlYXN0IG9uZSBjbGllbnQgcmVjdCwgaXQnc1xuICAgICAgLy8gIHNvbWVob3cgZGlzcGxheWVkOyBpdCBhbHNvIGNvdmVycyB0aGUgQ1NTICdkaXNwbGF5OiBjb250ZW50cycgY2FzZSB3aGVyZSB0aGVcbiAgICAgIC8vICBub2RlIGl0c2VsZiBpcyBoaWRkZW4gaW4gcGxhY2Ugb2YgaXRzIGNvbnRlbnRzOyBhbmQgdGhlcmUncyBubyBuZWVkIHRvIHNlYXJjaFxuICAgICAgLy8gIHVwIHRoZSBoaWVyYXJjaHkgZWl0aGVyXG4gICAgICByZXR1cm4gIW5vZGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgdGhlIG5vZGUgaXNuJ3QgYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50LCB3aGljaCBtZWFucyB0aGUgYGdldENsaWVudFJlY3RzKClgXG4gICAgLy8gIEFQSSB3aWxsIF9fYWx3YXlzX18gcmV0dXJuIHplcm8gcmVjdHMgKHRoaXMgY2FuIGhhcHBlbiwgZm9yIGV4YW1wbGUsIGlmIFJlYWN0XG4gICAgLy8gIGlzIHVzZWQgdG8gcmVuZGVyIG5vZGVzIG9udG8gYSBkZXRhY2hlZCB0cmVlLCBhcyBjb25maXJtZWQgaW4gdGhpcyB0aHJlYWQ6XG4gICAgLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvOTExNyNpc3N1ZWNvbW1lbnQtMjg0MjI4ODcwKVxuICAgIC8vXG4gICAgLy8gSXQgYWxzbyBtZWFucyB0aGF0IGV2ZW4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZGlzcGxheSB3aWxsIHJldHVybiBgdW5kZWZpbmVkYFxuICAgIC8vICBiZWNhdXNlIHN0eWxlcyBhcmUgb25seSBjb21wdXRlZCBmb3Igbm9kZXMgdGhhdCBhcmUgaW4gdGhlIGRvY3VtZW50LlxuICAgIC8vXG4gICAgLy8gTk9URTogVEhJUyBIQVMgQkVFTiBUSEUgQ0FTRSBGT1IgWUVBUlMuIEl0IGlzIG5vdCBuZXcsIG5vciBpcyBpdCBjYXVzZWQgYnkgdGFiYmFibGVcbiAgICAvLyAgc29tZWhvdy4gVGhvdWdoIGl0IHdhcyBuZXZlciBzdGF0ZWQgb2ZmaWNpYWxseSwgYW55b25lIHdobyBoYXMgZXZlciB1c2VkIHRhYmJhYmxlXG4gICAgLy8gIEFQSXMgb24gbm9kZXMgaW4gZGV0YWNoZWQgY29udGFpbmVycyBoYXMgYWN0dWFsbHkgaW1wbGljaXRseSB1c2VkIHRhYmJhYmxlIGluIHdoYXRcbiAgICAvLyAgd2FzIGxhdGVyIChhcyBvZiB2NS4yLjAgb24gQXByIDksIDIwMjEpIGNhbGxlZCBgZGlzcGxheUNoZWNrPVwibm9uZVwiYCBtb2RlIC0tIGVzc2VudGlhbGx5XG4gICAgLy8gIGNvbnNpZGVyaW5nIF9fZXZlcnl0aGluZ19fIHRvIGJlIHZpc2libGUgYmVjYXVzZSBvZiB0aGUgaW5uYWJpbGl0eSB0byBkZXRlcm1pbmUgc3R5bGVzLlxuICB9IGVsc2UgaWYgKGRpc3BsYXlDaGVjayA9PT0gJ25vbi16ZXJvLWFyZWEnKSB7XG4gICAgLy8gTk9URTogRXZlbiB0aG91Z2ggdGhpcyB0ZXN0cyB0aGF0IHRoZSBub2RlJ3MgY2xpZW50IHJlY3QgaXMgbm9uLXplcm8gdG8gZGV0ZXJtaW5lXG4gICAgLy8gIHdoZXRoZXIgaXQncyBkaXNwbGF5ZWQsIGFuZCB0aGF0IGEgZGV0YWNoZWQgbm9kZSB3aWxsIF9fYWx3YXlzX18gaGF2ZSBhIHplcm8tYXJlYVxuICAgIC8vICBjbGllbnQgcmVjdCwgd2UgZG9uJ3Qgc3BlY2lhbC1jYXNlIGZvciB3aGV0aGVyIHRoZSBub2RlIGlzIGF0dGFjaGVkIG9yIG5vdC4gSW5cbiAgICAvLyAgdGhpcyBtb2RlLCB3ZSBkbyB3YW50IHRvIGNvbnNpZGVyIG5vZGVzIHRoYXQgaGF2ZSBhIHplcm8gYXJlYSB0byBiZSBoaWRkZW4gYXQgYWxsXG4gICAgLy8gIHRpbWVzLCBhbmQgdGhhdCBpbmNsdWRlcyBhdHRhY2hlZCBvciBub3QuXG4gICAgcmV0dXJuIGlzWmVyb0FyZWEobm9kZSk7XG4gIH1cblxuICAvLyB2aXNpYmxlLCBhcyBmYXIgYXMgd2UgY2FuIHRlbGwsIG9yIHBlciBjdXJyZW50IGBkaXNwbGF5Q2hlY2tgIG1vZGVcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gZm9ybSBmaWVsZHMgKG5lc3RlZCkgaW5zaWRlIGEgZGlzYWJsZWQgZmllbGRzZXQgYXJlIG5vdCBmb2N1c2FibGUvdGFiYmFibGVcbi8vICB1bmxlc3MgdGhleSBhcmUgaW4gdGhlIF9maXJzdF8gPGxlZ2VuZD4gZWxlbWVudCBvZiB0aGUgdG9wLW1vc3QgZGlzYWJsZWRcbi8vICBmaWVsZHNldFxuY29uc3QgaXNEaXNhYmxlZEZyb21GaWVsZHNldCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmICgvXihJTlBVVHxCVVRUT058U0VMRUNUfFRFWFRBUkVBKSQvLnRlc3Qobm9kZS50YWdOYW1lKSkge1xuICAgIGxldCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnRFbGVtZW50O1xuICAgIC8vIGNoZWNrIGlmIGBub2RlYCBpcyBjb250YWluZWQgaW4gYSBkaXNhYmxlZCA8ZmllbGRzZXQ+XG4gICAgd2hpbGUgKHBhcmVudE5vZGUpIHtcbiAgICAgIGlmIChwYXJlbnROb2RlLnRhZ05hbWUgPT09ICdGSUVMRFNFVCcgJiYgcGFyZW50Tm9kZS5kaXNhYmxlZCkge1xuICAgICAgICAvLyBsb29rIGZvciB0aGUgZmlyc3QgPGxlZ2VuZD4gYW1vbmcgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNhYmxlZCA8ZmllbGRzZXQ+XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50Tm9kZS5jaGlsZHJlbi5pdGVtKGkpO1xuICAgICAgICAgIC8vIHdoZW4gdGhlIGZpcnN0IDxsZWdlbmQ+IChpbiBkb2N1bWVudCBvcmRlcikgaXMgZm91bmRcbiAgICAgICAgICBpZiAoY2hpbGQudGFnTmFtZSA9PT0gJ0xFR0VORCcpIHtcbiAgICAgICAgICAgIC8vIGlmIGl0cyBwYXJlbnQgPGZpZWxkc2V0PiBpcyBub3QgbmVzdGVkIGluIGFub3RoZXIgZGlzYWJsZWQgPGZpZWxkc2V0PixcbiAgICAgICAgICAgIC8vIHJldHVybiB3aGV0aGVyIGBub2RlYCBpcyBhIGRlc2NlbmRhbnQgb2YgaXRzIGZpcnN0IDxsZWdlbmQ+XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcy5jYWxsKHBhcmVudE5vZGUsICdmaWVsZHNldFtkaXNhYmxlZF0gKicpXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6ICFjaGlsZC5jb250YWlucyhub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhlIGRpc2FibGVkIDxmaWVsZHNldD4gY29udGFpbmluZyBgbm9kZWAgaGFzIG5vIDxsZWdlbmQ+XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50RWxlbWVudDtcbiAgICB9XG4gIH1cblxuICAvLyBlbHNlLCBub2RlJ3MgdGFiYmFibGUvZm9jdXNhYmxlIHN0YXRlIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQgYnkgYSBmaWVsZHNldCdzXG4gIC8vICBlbmFibGVkL2Rpc2FibGVkIHN0YXRlXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUgPSBmdW5jdGlvbiAob3B0aW9ucywgbm9kZSkge1xuICBpZiAoXG4gICAgbm9kZS5kaXNhYmxlZCB8fFxuICAgIGlzSGlkZGVuSW5wdXQobm9kZSkgfHxcbiAgICBpc0hpZGRlbihub2RlLCBvcHRpb25zKSB8fFxuICAgIC8vIEZvciBhIGRldGFpbHMgZWxlbWVudCB3aXRoIGEgc3VtbWFyeSwgdGhlIHN1bW1hcnkgZWxlbWVudCBnZXRzIHRoZSBmb2N1c1xuICAgIGlzRGV0YWlsc1dpdGhTdW1tYXJ5KG5vZGUpIHx8XG4gICAgaXNEaXNhYmxlZEZyb21GaWVsZHNldChub2RlKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUgPSBmdW5jdGlvbiAob3B0aW9ucywgbm9kZSkge1xuICBpZiAoXG4gICAgaXNOb25UYWJiYWJsZVJhZGlvKG5vZGUpIHx8XG4gICAgZ2V0VGFiaW5kZXgobm9kZSkgPCAwIHx8XG4gICAgIWlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUob3B0aW9ucywgbm9kZSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaXNWYWxpZFNoYWRvd1Jvb3RUYWJiYWJsZSA9IGZ1bmN0aW9uIChzaGFkb3dIb3N0Tm9kZSkge1xuICBjb25zdCB0YWJJbmRleCA9IHBhcnNlSW50KHNoYWRvd0hvc3ROb2RlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSwgMTApO1xuICBpZiAoaXNOYU4odGFiSW5kZXgpIHx8IHRhYkluZGV4ID49IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBJZiBhIGN1c3RvbSBlbGVtZW50IGhhcyBhbiBleHBsaWNpdCBuZWdhdGl2ZSB0YWJpbmRleCxcbiAgLy8gYnJvd3NlcnMgd2lsbCBub3QgYWxsb3cgdGFiIHRhcmdldGluZyBzYWlkIGVsZW1lbnQncyBjaGlsZHJlbi5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5LjxFbGVtZW50fENhbmRpZGF0ZXNTY29wZT59IGNhbmRpZGF0ZXNcbiAqIEByZXR1cm5zIEVsZW1lbnRbXVxuICovXG5jb25zdCBzb3J0QnlPcmRlciA9IGZ1bmN0aW9uIChjYW5kaWRhdGVzKSB7XG4gIGNvbnN0IHJlZ3VsYXJUYWJiYWJsZXMgPSBbXTtcbiAgY29uc3Qgb3JkZXJlZFRhYmJhYmxlcyA9IFtdO1xuICBjYW5kaWRhdGVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICBjb25zdCBpc1Njb3BlID0gISFpdGVtLnNjb3BlO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBpc1Njb3BlID8gaXRlbS5zY29wZSA6IGl0ZW07XG4gICAgY29uc3QgY2FuZGlkYXRlVGFiaW5kZXggPSBnZXRUYWJpbmRleChlbGVtZW50LCBpc1Njb3BlKTtcbiAgICBjb25zdCBlbGVtZW50cyA9IGlzU2NvcGUgPyBzb3J0QnlPcmRlcihpdGVtLmNhbmRpZGF0ZXMpIDogZWxlbWVudDtcbiAgICBpZiAoY2FuZGlkYXRlVGFiaW5kZXggPT09IDApIHtcbiAgICAgIGlzU2NvcGVcbiAgICAgICAgPyByZWd1bGFyVGFiYmFibGVzLnB1c2goLi4uZWxlbWVudHMpXG4gICAgICAgIDogcmVndWxhclRhYmJhYmxlcy5wdXNoKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcmRlcmVkVGFiYmFibGVzLnB1c2goe1xuICAgICAgICBkb2N1bWVudE9yZGVyOiBpLFxuICAgICAgICB0YWJJbmRleDogY2FuZGlkYXRlVGFiaW5kZXgsXG4gICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgIGlzU2NvcGU6IGlzU2NvcGUsXG4gICAgICAgIGNvbnRlbnQ6IGVsZW1lbnRzLFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3JkZXJlZFRhYmJhYmxlc1xuICAgIC5zb3J0KHNvcnRPcmRlcmVkVGFiYmFibGVzKVxuICAgIC5yZWR1Y2UoKGFjYywgc29ydGFibGUpID0+IHtcbiAgICAgIHNvcnRhYmxlLmlzU2NvcGVcbiAgICAgICAgPyBhY2MucHVzaCguLi5zb3J0YWJsZS5jb250ZW50KVxuICAgICAgICA6IGFjYy5wdXNoKHNvcnRhYmxlLmNvbnRlbnQpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSlcbiAgICAuY29uY2F0KHJlZ3VsYXJUYWJiYWJsZXMpO1xufTtcblxuY29uc3QgdGFiYmFibGUgPSBmdW5jdGlvbiAoZWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgbGV0IGNhbmRpZGF0ZXM7XG4gIGlmIChvcHRpb25zLmdldFNoYWRvd1Jvb3QpIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KFtlbF0sIG9wdGlvbnMuaW5jbHVkZUNvbnRhaW5lciwge1xuICAgICAgZmlsdGVyOiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUuYmluZChudWxsLCBvcHRpb25zKSxcbiAgICAgIGZsYXR0ZW46IGZhbHNlLFxuICAgICAgZ2V0U2hhZG93Um9vdDogb3B0aW9ucy5nZXRTaGFkb3dSb290LFxuICAgICAgc2hhZG93Um9vdEZpbHRlcjogaXNWYWxpZFNoYWRvd1Jvb3RUYWJiYWJsZSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlcyhcbiAgICAgIGVsLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLFxuICAgICAgaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlLmJpbmQobnVsbCwgb3B0aW9ucylcbiAgICApO1xuICB9XG4gIHJldHVybiBzb3J0QnlPcmRlcihjYW5kaWRhdGVzKTtcbn07XG5cbmNvbnN0IGZvY3VzYWJsZSA9IGZ1bmN0aW9uIChlbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBsZXQgY2FuZGlkYXRlcztcbiAgaWYgKG9wdGlvbnMuZ2V0U2hhZG93Um9vdCkge1xuICAgIGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoW2VsXSwgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLCB7XG4gICAgICBmaWx0ZXI6IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUuYmluZChudWxsLCBvcHRpb25zKSxcbiAgICAgIGZsYXR0ZW46IHRydWUsXG4gICAgICBnZXRTaGFkb3dSb290OiBvcHRpb25zLmdldFNoYWRvd1Jvb3QsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY2FuZGlkYXRlcyA9IGdldENhbmRpZGF0ZXMoXG4gICAgICBlbCxcbiAgICAgIG9wdGlvbnMuaW5jbHVkZUNvbnRhaW5lcixcbiAgICAgIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUuYmluZChudWxsLCBvcHRpb25zKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY2FuZGlkYXRlcztcbn07XG5cbmNvbnN0IGlzVGFiYmFibGUgPSBmdW5jdGlvbiAobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKCFub2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBub2RlIHByb3ZpZGVkJyk7XG4gIH1cbiAgaWYgKG1hdGNoZXMuY2FsbChub2RlLCBjYW5kaWRhdGVTZWxlY3RvcikgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUob3B0aW9ucywgbm9kZSk7XG59O1xuXG5jb25zdCBmb2N1c2FibGVDYW5kaWRhdGVTZWxlY3RvciA9IC8qICNfX1BVUkVfXyAqLyBjYW5kaWRhdGVTZWxlY3RvcnNcbiAgLmNvbmNhdCgnaWZyYW1lJylcbiAgLmpvaW4oJywnKTtcblxuY29uc3QgaXNGb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKCFub2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBub2RlIHByb3ZpZGVkJyk7XG4gIH1cbiAgaWYgKG1hdGNoZXMuY2FsbChub2RlLCBmb2N1c2FibGVDYW5kaWRhdGVTZWxlY3RvcikgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlKG9wdGlvbnMsIG5vZGUpO1xufTtcblxuZXhwb3J0IHsgdGFiYmFibGUsIGZvY3VzYWJsZSwgaXNUYWJiYWJsZSwgaXNGb2N1c2FibGUgfTtcbiIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiYnV0dG9uUmVmXCIsIFwic2l6ZVwiLCBcImNvbG9yXCIsIFwiZmlsbFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgQlVUVE9OX0NPTE9SUywgdXNlRXVpQnV0dG9uQ29sb3JDU1MsIHVzZUV1aUJ1dHRvbkZvY3VzQ1NTIH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMvYnV0dG9uJztcbmltcG9ydCB7IEV1aUJ1dHRvbkRpc3BsYXksIGlzQnV0dG9uRGlzYWJsZWQgfSBmcm9tICcuL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDT0xPUlMgPSBCVVRUT05fQ09MT1JTO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsncycsICdtJ107XG5cbi8vIEZvciBzb21lIHJlYXNvbiwgU3Rvcnlib29rIGRvZXNuJ3QgcGFyc2UgYEV1aUJ1dHRvbkRpc3BsYXlDb21tb25Qcm9wc2AgdW5sZXNzIHdlIGluY2x1ZGUgaXQgaGVyZVxuXG4vKipcbiAqIEV1aUJ1dHRvbiBpcyBsYXJnZWx5IHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgcmVsZXZhbnQgcHJvcHNcbiAqIGFuZCB0aGUgbG9naWMgZm9yIGVsZW1lbnQtc3BlY2lmaWMgYXR0cmlidXRlc1xuICovXG5leHBvcnQgdmFyIEV1aUJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUJ1dHRvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBidXR0b25SZWYgPSBfcmVmLmJ1dHRvblJlZixcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3ByaW1hcnknIDogX3JlZiRjb2xvcixcbiAgICBmaWxsID0gX3JlZi5maWxsLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzRGlzYWJsZWQgPSBpc0J1dHRvbkRpc2FibGVkKHtcbiAgICBocmVmOiByZXN0LmhyZWYsXG4gICAgaXNEaXNhYmxlZDogcmVzdC5pc0Rpc2FibGVkIHx8IHJlc3QuZGlzYWJsZWQsXG4gICAgaXNMb2FkaW5nOiByZXN0LmlzTG9hZGluZ1xuICB9KTtcbiAgdmFyIGJ1dHRvbkNvbG9yU3R5bGVzID0gdXNlRXVpQnV0dG9uQ29sb3JDU1Moe1xuICAgIGRpc3BsYXk6IGZpbGwgPyAnZmlsbCcgOiAnYmFzZSdcbiAgfSlbaXNEaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBjb2xvcl07XG4gIHZhciBidXR0b25Gb2N1c1N0eWxlID0gdXNlRXVpQnV0dG9uRm9jdXNDU1MoKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b24nLCBjbGFzc05hbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW2J1dHRvbkNvbG9yU3R5bGVzLCBidXR0b25Gb2N1c1N0eWxlXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRGlzcGxheSwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICByZWY6IGJ1dHRvblJlZixcbiAgICBzaXplOiBzaXplXG4gIH0sIHJlc3QpKTtcbn07XG5FdWlCdXR0b24ucHJvcFR5cGVzID0ge1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBNYWtlIGJ1dHRvbiBhIHNvbGlkIGNvbG9yIGZvciBwcm9taW5lbmNlXG4gICAgICovXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cbiAgZmlsbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEFueSBvZiB0aGUgbmFtZWQgY29sb3IgcGFsZXR0ZSBvcHRpb25zLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogVXNlIHNpemUgYHNgIGluIGNvbmZpbmVkIHNwYWNlc1xuICAgICAqL1xuICAvKipcbiAgICAgKiBVc2Ugc2l6ZSBgc2AgaW4gY29uZmluZWQgc3BhY2VzXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuICBlbGVtZW50OiBQcm9wVHlwZXMub25lT2YoW1wiYVwiLCBcImJ1dHRvblwiLCBcInNwYW5cIl0pLFxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBFeHRlbmRzIHRoZSBidXR0b24gdG8gMTAwJSB3aWR0aFxuICAgICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBtaW5pbXVtIHdpZHRoXG4gICAgICovXG4gIG1pbldpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcbiAgdHlwZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW3VuZGVmaW5lZF0pXSksXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dC9jaGlsZHJlbiBvbmx5IChub3QgaWNvbilcbiAgICAgKlxuICAgICAqIFRoaXMgc3BhbiB3cmFwcGVyIGNhbiBiZSByZW1vdmVkIGJ5IHBhc3NpbmcgYHRleHRQcm9wcz17ZmFsc2V9YC5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF90ZW1wbGF0ZU9iamVjdDtcbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoZSwgdCkgeyByZXR1cm4gdCB8fCAodCA9IGUuc2xpY2UoMCkpLCBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHQpIH0gfSkpOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlCYWNrZ3JvdW5kQ29sb3IsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBoZXhUb1JnYiwgaXNDb2xvckRhcmssIG1ha2VIaWdoQ29udHJhc3RDb2xvciwgc2hhZGUsIHRpbnQsIHRyYW5zcGFyZW50aXplLCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcbmV4cG9ydCB2YXIgQlVUVE9OX0NPTE9SUyA9IFsndGV4dCcsICdhY2NlbnQnLCAncHJpbWFyeScsICdzdWNjZXNzJywgJ3dhcm5pbmcnLCAnZGFuZ2VyJ107XG5leHBvcnQgdmFyIEJVVFRPTl9ESVNQTEFZUyA9IFsnYmFzZScsICdmaWxsJywgJ2VtcHR5J107XG4vKipcbiAqIENyZWF0ZXMgdGhlIGBiYXNlYCB2ZXJzaW9uIG9mIGJ1dHRvbiBzdHlsZXMgd2l0aCBwcm9wZXIgdGV4dCBjb250cmFzdC5cbiAqIEBwYXJhbSBldWlUaGVtZUNvbnRleHRcbiAqIEBwYXJhbSBjb2xvciBPbmUgb2YgdGhlIG5hbWVkIGJ1dHRvbiBjb2xvcnMgb3IgJ2Rpc2FibGVkJ1xuICogQHJldHVybnMgU3R5bGUgb2JqZWN0IGB7IGJhY2tncm91bmRDb2xvciwgY29sb3IgfWBcbiAqL1xuZXhwb3J0IHZhciBldWlCdXR0b25Db2xvciA9IGZ1bmN0aW9uIGV1aUJ1dHRvbkNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG4gIGZ1bmN0aW9uIHRpbnRPclNoYWRlKGNvbG9yKSB7XG4gICAgcmV0dXJuIGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gc2hhZGUoY29sb3IsIDAuNykgOiB0aW50KGNvbG9yLCAwLjgpO1xuICB9XG4gIHZhciBmb3JlZ3JvdW5kO1xuICB2YXIgYmFja2dyb3VuZDtcbiAgc3dpdGNoIChjb2xvcikge1xuICAgIGNhc2UgJ2Rpc2FibGVkJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjE1KVxuICAgICAgfTtcbiAgICBjYXNlICd0ZXh0JzpcbiAgICAgIGZvcmVncm91bmQgPSBldWlUaGVtZS5jb2xvcnNbY29sb3JdO1xuICAgICAgYmFja2dyb3VuZCA9IGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gc2hhZGUoZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUsIDAuMikgOiB0aW50KGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGZvcmVncm91bmQgPSBldWlUaGVtZS5jb2xvcnNbXCJcIi5jb25jYXQoY29sb3IsIFwiVGV4dFwiKV07XG4gICAgICBiYWNrZ3JvdW5kID0gdGludE9yU2hhZGUoZXVpVGhlbWUuY29sb3JzW2NvbG9yXSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4ge1xuICAgIGNvbG9yOiBtYWtlSGlnaENvbnRyYXN0Q29sb3IoZm9yZWdyb3VuZCkoYmFja2dyb3VuZCksXG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kXG4gIH07XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGBmaWxsYCB2ZXJzaW9uIG9mIGJ1dHRvbnMgc3R5bGVzIHdpdGggcHJvcGVyIHRleHQgY29udHJhc3QuXG4gKiBAcGFyYW0gZXVpVGhlbWVDb250ZXh0XG4gKiBAcGFyYW0gY29sb3IgT25lIG9mIHRoZSBuYW1lZCBidXR0b24gY29sb3JzIG9yICdkaXNhYmxlZCdcbiAqIEByZXR1cm5zIFN0eWxlIG9iamVjdCBgeyBiYWNrZ3JvdW5kQ29sb3IsIGNvbG9yIH1gXG4gKi9cbmV4cG9ydCB2YXIgZXVpQnV0dG9uRmlsbENvbG9yID0gZnVuY3Rpb24gZXVpQnV0dG9uRmlsbENvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG4gIHZhciBnZXRGb3JlZ3JvdW5kQ29sb3IgPSBmdW5jdGlvbiBnZXRGb3JlZ3JvdW5kQ29sb3IoYmFja2dyb3VuZCkge1xuICAgIHJldHVybiBpc0NvbG9yRGFyay5hcHBseSh2b2lkIDAsIF90b0NvbnN1bWFibGVBcnJheShoZXhUb1JnYihiYWNrZ3JvdW5kKSkpID8gZXVpVGhlbWUuY29sb3JzLmdob3N0IDogZXVpVGhlbWUuY29sb3JzLmluaztcbiAgfTtcbiAgdmFyIGJhY2tncm91bmQ7XG4gIHZhciBmb3JlZ3JvdW5kO1xuICBzd2l0Y2ggKGNvbG9yKSB7XG4gICAgY2FzZSAnZGlzYWJsZWQnOlxuICAgICAgYmFja2dyb3VuZCA9IGV1aUJ1dHRvbkNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLmJhY2tncm91bmRDb2xvcjtcbiAgICAgIGZvcmVncm91bmQgPSBldWlCdXR0b25Db2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKS5jb2xvcjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RleHQnOlxuICAgICAgYmFja2dyb3VuZCA9IGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gZXVpVGhlbWUuY29sb3JzLnRleHQgOiBldWlUaGVtZS5jb2xvcnMuZGFya1NoYWRlO1xuICAgICAgZm9yZWdyb3VuZCA9IGdldEZvcmVncm91bmRDb2xvcihiYWNrZ3JvdW5kKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgIGNhc2UgJ2FjY2VudCc6XG4gICAgICAvLyBTdWNjZXNzIC8gYWNjZW50IGZpbGxzIGFyZSBoYXJkIHRvIHJlYWQgb24gbGlnaHQgbW9kZSBldmVuIHRob3VnaCB0aGV5IHBhc3MgY29sb3IgY29udHJhc3QgcmF0aW9zXG4gICAgICAvLyBUT0RPOiBJZiBXQ0FHIDMgZ2V0cyBhZG9wdGVkICh3aGljaCB3b3VsZCBjYWxjdWxhdGVzIGx1bWlub3NpdHkgJiB3b3VsZCBhbGxvdyB1cyB0byB1c2Ugd2hpdGUgdGV4dCBpbnN0ZWFkKSxcbiAgICAgIC8vIHdlIGNhbiBnZXQgcmlkIG9mIHRoaXMgY2FzZSAoaHR0cHM6Ly9ibG9nLmRhdGF3cmFwcGVyLmRlL2NvbG9yLWNvbnRyYXN0LWNoZWNrLWRhdGEtdmlzLXdjYWctYXBjYS8pXG4gICAgICBiYWNrZ3JvdW5kID0gY29sb3JNb2RlID09PSAnTElHSFQnID8gdGludChldWlUaGVtZS5jb2xvcnNbY29sb3JdLCAwLjMpIDogZXVpVGhlbWUuY29sb3JzW2NvbG9yXTtcbiAgICAgIGZvcmVncm91bmQgPSBnZXRGb3JlZ3JvdW5kQ29sb3IoYmFja2dyb3VuZCk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgYmFja2dyb3VuZCA9IGV1aVRoZW1lLmNvbG9yc1tjb2xvcl07XG4gICAgICBmb3JlZ3JvdW5kID0gZ2V0Rm9yZWdyb3VuZENvbG9yKGJhY2tncm91bmQpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjb2xvcjogZm9yZWdyb3VuZCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRcbiAgfTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgYGVtcHR5YCB2ZXJzaW9uIG9mIGJ1dHRvbiBzdHlsZXMgdXNpbmcgdGhlIHRleHQtdmFyaWFudCBhbmQgYWRkaW5nIGludGVyYWN0aXZlIHN0eWxlcy5cbiAqIEBwYXJhbSBldWlUaGVtZUNvbnRleHRcbiAqIEBwYXJhbSBjb2xvciBPbmUgb2YgdGhlIG5hbWVkIGJ1dHRvbiBjb2xvcnMgb3IgJ2Rpc2FibGVkJ1xuICogQHJldHVybnMgU3R5bGUgb2JqZWN0IGB7IGJhY2tncm91bmRDb2xvciwgY29sb3IgfWAgd2hlcmUgYGJhY2tncm91bmRgIGlzIHR5cGljYWxseSB1c2VkIGZvciBpbnRlcmFjdGl2ZSBzdGF0ZXNcbiAqL1xuZXhwb3J0IHZhciBldWlCdXR0b25FbXB0eUNvbG9yID0gZnVuY3Rpb24gZXVpQnV0dG9uRW1wdHlDb2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKSB7XG4gIHZhciBmb3JlZ3JvdW5kO1xuICB2YXIgYmFja2dyb3VuZDtcbiAgc3dpdGNoIChjb2xvcikge1xuICAgIGNhc2UgJ2Rpc2FibGVkJzpcbiAgICAgIGZvcmVncm91bmQgPSBldWlCdXR0b25Db2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKS5jb2xvcjtcbiAgICAgIGJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGV4dCc6XG4gICAgICBmb3JlZ3JvdW5kID0gZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikuY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kID0gZXVpQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ3N1YmR1ZWQnLCB7XG4gICAgICAgIG1ldGhvZDogJ3RyYW5zcGFyZW50J1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZm9yZWdyb3VuZCA9IGV1aUJ1dHRvbkNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLmNvbG9yO1xuICAgICAgYmFja2dyb3VuZCA9IGV1aUJhY2tncm91bmRDb2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yLCB7XG4gICAgICAgIG1ldGhvZDogJ3RyYW5zcGFyZW50J1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4ge1xuICAgIGNvbG9yOiBmb3JlZ3JvdW5kLFxuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZFxuICB9O1xufTtcblxuLyoqXG4gKiBHaXZlbiB0aGUgYnV0dG9uIGRpc3BsYXkgdHlwZSwgcmV0dXJucyB0aGUgRW1vdGlvbiBiYXNlZCBjb2xvciBrZXlzLlxuICogQHBhcmFtIG9wdGlvbnMgQnV0dG9uIGRpc3BsYXkgdHlwZVxuICogQHJldHVybnMgQW4gb2JqZWN0IG9mIGBfRXVpQnV0dG9uQ29sb3JgIGtleXMgaW5jbHVkaW5nIGBkaXNhYmxlZGBcbiAqL1xuZXhwb3J0IHZhciB1c2VFdWlCdXR0b25Db2xvckNTUyA9IGZ1bmN0aW9uIHVzZUV1aUJ1dHRvbkNvbG9yQ1NTKCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciBfb3B0aW9ucyRkaXNwbGF5ID0gb3B0aW9ucy5kaXNwbGF5LFxuICAgIGRpc3BsYXkgPSBfb3B0aW9ucyRkaXNwbGF5ID09PSB2b2lkIDAgPyAnYmFzZScgOiBfb3B0aW9ucyRkaXNwbGF5O1xuICB2YXIgY29sb3JzRGlzcGxheXNNYXAgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlCdXR0b25EaXNwbGF5c0NvbG9ycyk7XG4gIHJldHVybiBjb2xvcnNEaXNwbGF5c01hcFtkaXNwbGF5XTtcbn07XG52YXIgZXVpQnV0dG9uRGlzcGxheXNDb2xvcnMgPSBmdW5jdGlvbiBldWlCdXR0b25EaXNwbGF5c0NvbG9ycyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIENPTE9SUyA9IFtdLmNvbmNhdChCVVRUT05fQ09MT1JTLCBbJ2Rpc2FibGVkJ10pO1xuICB2YXIgZGlzcGxheXNDb2xvcnNNYXAgPSB7fTtcbiAgQlVUVE9OX0RJU1BMQVlTLmZvckVhY2goZnVuY3Rpb24gKGRpc3BsYXkpIHtcbiAgICBkaXNwbGF5c0NvbG9yc01hcFtkaXNwbGF5XSA9IHt9O1xuICAgIENPTE9SUy5mb3JFYWNoKGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgc3dpdGNoIChkaXNwbGF5KSB7XG4gICAgICAgIGNhc2UgJ2Jhc2UnOlxuICAgICAgICAgIGRpc3BsYXlzQ29sb3JzTWFwW2Rpc3BsYXldW2NvbG9yXSA9IC8qI19fUFVSRV9fKi9jc3MoZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvciksIFwiOztsYWJlbDpkaXNwbGF5c0NvbG9yc01hcC1kaXNwbGF5LWNvbG9yO1wiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZmlsbCc6XG4gICAgICAgICAgZGlzcGxheXNDb2xvcnNNYXBbZGlzcGxheV1bY29sb3JdID0gLyojX19QVVJFX18qL2NzcyhldWlCdXR0b25GaWxsQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvciksIFwib3V0bGluZS1jb2xvcjpcIiwgZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZSA9PT0gJ0RBUksnICYmIGNvbG9yID09PSAndGV4dCcgPyAnY3VycmVudENvbG9yJyA6IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZS5jb2xvcnMuZnVsbFNoYWRlLCBcIjs7bGFiZWw6ZGlzcGxheXNDb2xvcnNNYXAtZGlzcGxheS1jb2xvcjtcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2VtcHR5JzpcbiAgICAgICAgICBkaXNwbGF5c0NvbG9yc01hcFtkaXNwbGF5XVtjb2xvcl0gPSAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aUJ1dHRvbkVtcHR5Q29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikuY29sb3IsIFwiOyY6Zm9jdXMsJjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpQnV0dG9uRW1wdHlDb2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKS5iYWNrZ3JvdW5kQ29sb3IsIFwiO307bGFiZWw6ZGlzcGxheXNDb2xvcnNNYXAtZGlzcGxheS1jb2xvcjtcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIFR3ZWFrIGF1dG8tZ2VuZXJhdGVkIEVtb3Rpb24gbGFiZWwvY2xhc3NOYW1lIG91dHB1dFxuICAgICAgdmFyIGVtb3Rpb25PdXRwdXQgPSBkaXNwbGF5c0NvbG9yc01hcFtkaXNwbGF5XVtjb2xvcl07XG4gICAgICBlbW90aW9uT3V0cHV0LnN0eWxlcyA9IGVtb3Rpb25PdXRwdXQuc3R5bGVzLnJlcGxhY2UoJ2xhYmVsOmRpc3BsYXlzQ29sb3JzTWFwLWRpc3BsYXktY29sb3I7JywgXCJsYWJlbDpcIi5jb25jYXQoZGlzcGxheSwgXCItXCIpLmNvbmNhdChjb2xvciwgXCI7XCIpKTtcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBkaXNwbGF5c0NvbG9yc01hcDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgdHJhbnNsYXRlIGFuaW1hdGlvbiB3aGVuIGJ1dHRvbiBpcyBpbiBmb2N1cy5cbiAqIEByZXR1cm5zIHN0cmluZ1xuICovXG5leHBvcnQgdmFyIHVzZUV1aUJ1dHRvbkZvY3VzQ1NTID0gZnVuY3Rpb24gdXNlRXVpQnV0dG9uRm9jdXNDU1MoKSB7XG4gIHJldHVybiB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlCdXR0b25Gb2N1c0NTUyk7XG59O1xudmFyIGV1aUJ1dHRvbkZvY3VzQW5pbWF0aW9uID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIDUwJSB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpO1xcbiAgfVxcblwiXSkpKTtcbnZhciBldWlCdXR0b25Gb2N1c0NTUyA9IGZ1bmN0aW9uIGV1aUJ1dHRvbkZvY3VzQ1NTKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgdmFyIGZvY3VzQ1NTID0gLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOnRyYW5zZm9ybSBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLm5vcm1hbCwgXCIgZWFzZS1pbi1vdXQsYmFja2dyb3VuZC1jb2xvciBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLm5vcm1hbCwgXCIgZWFzZS1pbi1vdXQ7Jjpob3Zlcjpub3QoOmRpc2FibGVkKXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMXB4KTt9Jjpmb2N1c3thbmltYXRpb246XCIsIGV1aUJ1dHRvbkZvY3VzQW5pbWF0aW9uLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLm5vcm1hbCwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ib3VuY2UsIFwiO30mOmFjdGl2ZTpub3QoOmRpc2FibGVkKXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxcHgpO319O2xhYmVsOmZvY3VzQ1NTO1wiKTtcbiAgLy8gUmVtb3ZlIHRoZSBhdXRvLWdlbmVyYXRlZCBsYWJlbC5cbiAgLy8gV2UgY291bGQgdHlwaWNhbGx5IGF2b2lkIGEgbGFiZWwgYnkgdXNpbmcgYSBwbGFpbiBzdHJpbmcgYGAgaW5zdGVhZCBvZiBjc3NgYCxcbiAgLy8gYnV0IHdlIG5lZWQgY3NzYGAgZm9yIGtleWZyYW1lc2BgIHRvIHdvcmsgZm9yIHRoZSBmb2N1cyBhbmltYXRpb25cbiAgZm9jdXNDU1Muc3R5bGVzID0gZm9jdXNDU1Muc3R5bGVzLnJlcGxhY2UoJ2xhYmVsOmZvY3VzQ1NTOycsICcnKTtcbiAgcmV0dXJuIGZvY3VzQ1NTO1xufTtcblxuLyoqXG4gKiBNYXAgb2YgYHNpemVgIHByb3BzIHRvIHZhcmlvdXMgc2l6aW5ncy9zY2FsZXNcbiAqIHRoYXQgc2hvdWxkIHJlbWFpbiBjb25zaXN0ZW50IGFjcm9zcyBhbGwgYnV0dG9uc1xuICovXG5leHBvcnQgdmFyIGV1aUJ1dHRvblNpemVNYXAgPSBmdW5jdGlvbiBldWlCdXR0b25TaXplTWFwKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIHhzOiB7XG4gICAgICBoZWlnaHQ6IGV1aVRoZW1lLnNpemUubCxcbiAgICAgIHJhZGl1czogZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCxcbiAgICAgIGZvbnRTY2FsZTogJ3hzJ1xuICAgIH0sXG4gICAgczoge1xuICAgICAgaGVpZ2h0OiBldWlUaGVtZS5zaXplLnhsLFxuICAgICAgcmFkaXVzOiBldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLFxuICAgICAgZm9udFNjYWxlOiAncydcbiAgICB9LFxuICAgIG06IHtcbiAgICAgIGhlaWdodDogZXVpVGhlbWUuc2l6ZS54eGwsXG4gICAgICByYWRpdXM6IGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLFxuICAgICAgZm9udFNjYWxlOiAncydcbiAgICB9XG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiZWxlbWVudFwiLCBcInR5cGVcIiwgXCJjaGlsZHJlblwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpZGVcIiwgXCJpY29uU2l6ZVwiLCBcInNpemVcIiwgXCJpc0Rpc2FibGVkXCIsIFwiZGlzYWJsZWRcIiwgXCJpc0xvYWRpbmdcIiwgXCJpc1NlbGVjdGVkXCIsIFwiZnVsbFdpZHRoXCIsIFwibWluV2lkdGhcIiwgXCJjb250ZW50UHJvcHNcIiwgXCJ0ZXh0UHJvcHNcIiwgXCJocmVmXCIsIFwidGFyZ2V0XCIsIFwicmVsXCIsIFwic3R5bGVcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5cbi8vIEB0cy1pZ25vcmUgbW9kdWxlIGRvZXNuJ3QgZXhwb3J0IGBjcmVhdGVFbGVtZW50YFxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlCdXR0b25EaXNwbGF5U3R5bGVzIH0gZnJvbSAnLi9fYnV0dG9uX2Rpc3BsYXkuc3R5bGVzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkRpc3BsYXlDb250ZW50IH0gZnJvbSAnLi9fYnV0dG9uX2Rpc3BsYXlfY29udGVudCc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIFNJWkVTID0gWyd4cycsICdzJywgJ20nXTtcblxuLyoqXG4gKiBFeHRlbmRzIEV1aUJ1dHRvbkRpc3BsYXlDb250ZW50UHJvcHMgd2hpY2ggcHJvdmlkZXNcbiAqIGBpY29uVHlwZWAsIGBpY29uU2lkZWAsIGFuZCBgdGV4dFByb3BzYFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0J1dHRvbkRpc2FibGVkKF9yZWYpIHtcbiAgdmFyIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZztcbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICByZXR1cm4gaXNMb2FkaW5nIHx8IGlzRGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xufVxuXG4vKipcbiAqIEV1aUJ1dHRvbkRpc3BsYXkgaXMgYW4gaW50ZXJuYWwtb25seSBjb21wb25lbnQgdXNlZCBmb3IgZGlzcGxheWluZ1xuICogYW55IGVsZW1lbnQgYXMgYSBidXR0b24uXG4gKi9cbmV4cG9ydCB2YXIgRXVpQnV0dG9uRGlzcGxheSA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmMiwgcmVmKSB7XG4gIHZhciBfcmVmMiRlbGVtZW50ID0gX3JlZjIuZWxlbWVudCxcbiAgICBfZWxlbWVudCA9IF9yZWYyJGVsZW1lbnQgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZjIkZWxlbWVudCxcbiAgICBfcmVmMiR0eXBlID0gX3JlZjIudHlwZSxcbiAgICB0eXBlID0gX3JlZjIkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmMiR0eXBlLFxuICAgIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgaWNvblR5cGUgPSBfcmVmMi5pY29uVHlwZSxcbiAgICBfcmVmMiRpY29uU2lkZSA9IF9yZWYyLmljb25TaWRlLFxuICAgIGljb25TaWRlID0gX3JlZjIkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYyJGljb25TaWRlLFxuICAgIGljb25TaXplID0gX3JlZjIuaWNvblNpemUsXG4gICAgX3JlZjIkc2l6ZSA9IF9yZWYyLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYyJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYyJHNpemUsXG4gICAgaXNEaXNhYmxlZCA9IF9yZWYyLmlzRGlzYWJsZWQsXG4gICAgZGlzYWJsZWQgPSBfcmVmMi5kaXNhYmxlZCxcbiAgICBpc0xvYWRpbmcgPSBfcmVmMi5pc0xvYWRpbmcsXG4gICAgaXNTZWxlY3RlZCA9IF9yZWYyLmlzU2VsZWN0ZWQsXG4gICAgZnVsbFdpZHRoID0gX3JlZjIuZnVsbFdpZHRoLFxuICAgIG1pbldpZHRoID0gX3JlZjIubWluV2lkdGgsXG4gICAgY29udGVudFByb3BzID0gX3JlZjIuY29udGVudFByb3BzLFxuICAgIHRleHRQcm9wcyA9IF9yZWYyLnRleHRQcm9wcyxcbiAgICBocmVmID0gX3JlZjIuaHJlZixcbiAgICB0YXJnZXQgPSBfcmVmMi50YXJnZXQsXG4gICAgcmVsID0gX3JlZjIucmVsLFxuICAgIHN0eWxlID0gX3JlZjIuc3R5bGUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGJ1dHRvbklzRGlzYWJsZWQgPSBpc0J1dHRvbkRpc2FibGVkKHtcbiAgICBocmVmOiBocmVmLFxuICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQgfHwgZGlzYWJsZWQsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdcbiAgfSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlCdXR0b25EaXNwbGF5U3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpQnV0dG9uRGlzcGxheSwgc3R5bGVzW3NpemVdLCBmdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aCwgbWluV2lkdGggPT0gbnVsbCAmJiBzdHlsZXMuZGVmYXVsdE1pbldpZHRoLCBidXR0b25Jc0Rpc2FibGVkICYmIHN0eWxlcy5pc0Rpc2FibGVkXTtcbiAgdmFyIGlubmVyTm9kZSA9IF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRGlzcGxheUNvbnRlbnQsIF9leHRlbmRzKHtcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICBpc0Rpc2FibGVkOiBidXR0b25Jc0Rpc2FibGVkLFxuICAgIGljb25UeXBlOiBpY29uVHlwZSxcbiAgICBpY29uU2lkZTogaWNvblNpZGUsXG4gICAgaWNvblNpemU6IGljb25TaXplLFxuICAgIHRleHRQcm9wczogdGV4dFByb3BzXG4gIH0sIGNvbnRlbnRQcm9wcyksIGNoaWxkcmVuKTtcbiAgdmFyIGVsZW1lbnQgPSBidXR0b25Jc0Rpc2FibGVkID8gJ2J1dHRvbicgOiBocmVmID8gJ2EnIDogX2VsZW1lbnQ7XG4gIHZhciBlbGVtZW50UHJvcHMgPSB7fTtcbiAgLy8gRWxlbWVudC1zcGVjaWZpYyBhdHRyaWJ1dGVzXG4gIGlmIChlbGVtZW50ID09PSAnYnV0dG9uJykge1xuICAgIGVsZW1lbnRQcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWxlbWVudFByb3BzKSwge30sIHtcbiAgICAgIGRpc2FibGVkOiBidXR0b25Jc0Rpc2FibGVkLFxuICAgICAgJ2FyaWEtcHJlc3NlZCc6IGlzU2VsZWN0ZWRcbiAgICB9KTtcbiAgfVxuICB2YXIgcmVsT2JqID0ge307XG4gIGlmIChocmVmICYmICFidXR0b25Jc0Rpc2FibGVkKSB7XG4gICAgcmVsT2JqLmhyZWYgPSBocmVmO1xuICAgIHJlbE9iai5yZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgICByZWxPYmoudGFyZ2V0ID0gdGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIHJlbE9iai50eXBlID0gdHlwZTtcbiAgfVxuICByZXR1cm4gY3JlYXRlRWxlbWVudChlbGVtZW50LCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgc3R5bGU6IG1pbldpZHRoID8gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZSksIHt9LCB7XG4gICAgICBtaW5JbmxpbmVTaXplOiBtaW5XaWR0aFxuICAgIH0pIDogc3R5bGUsXG4gICAgcmVmOiByZWZcbiAgfSwgZWxlbWVudFByb3BzKSwgcmVsT2JqKSwgcmVzdCksIGlubmVyTm9kZSk7XG59KTtcbkV1aUJ1dHRvbkRpc3BsYXkucHJvcFR5cGVzID0ge1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImFcIiwgXCJidXR0b25cIiwgXCJzcGFuXCJdKSxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEV4dGVuZHMgdGhlIGJ1dHRvbiB0byAxMDAlIHdpZHRoXG4gICAgICovXG4gIC8qKlxuICAgICAqIEV4dGVuZHMgdGhlIGJ1dHRvbiB0byAxMDAlIHdpZHRoXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1pbmltdW0gd2lkdGhcbiAgICAgKi9cbiAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWluaW11bSB3aWR0aFxuICAgICAqL1xuICBtaW5XaWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbdW5kZWZpbmVkXSldKSxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgYDxzcGFuPmAgd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0L2NoaWxkcmVuIG9ubHkgKG5vdCBpY29uKVxuICAgICAqXG4gICAgICogVGhpcyBzcGFuIHdyYXBwZXIgY2FuIGJlIHJlbW92ZWQgYnkgcGFzc2luZyBgdGV4dFByb3BzPXtmYWxzZX1gLlxuICAgICAqL1xuICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMuYW55LFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueVxufTtcbkV1aUJ1dHRvbkRpc3BsYXkuZGlzcGxheU5hbWUgPSAnRXVpQnV0dG9uRGlzcGxheSc7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IENPTE9SX01PREVTX1NUQU5EQVJEIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdHlwZXMnO1xuXG4vLyBDcmVhdGUgYSBDU1MgY29sb3IgdmFsdWUgdXNpbmcgd2hvc2Ugb3BhY2l0eSBpcyBkZXRlcm1pbmVkIGJhc2VkXG4vLyBvbiBlaXRoZXIgYSBsaWdodCBvciBkYXJrIHRoZW1lLiBXZSB1c2UgYSBtdWx0aXBsaWVyXG4vLyBvZiAxIGZvciBsaWdodCB0aGVtZXMgYW5kIDIuNSBmb3IgZGFyayB0aGVtZXNcbmV4cG9ydCB2YXIgZ2V0U2hhZG93Q29sb3IgPSBmdW5jdGlvbiBnZXRTaGFkb3dDb2xvcihjb2xvciwgb3BhY2l0eSwgY29sb3JNb2RlKSB7XG4gIHZhciB0aGVtZU9wYWNpdHkgPSBjb2xvck1vZGUgPT09IENPTE9SX01PREVTX1NUQU5EQVJELmRhcmsgPyBvcGFjaXR5ICogMy41IDogb3BhY2l0eSAqIDE7XG4gIHJldHVybiBjaHJvbWEoY29sb3IpLmFscGhhKHRoZW1lT3BhY2l0eSkuY3NzKCk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IGdldFNoYWRvd0NvbG9yIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbi8qKlxuICogZXVpU2xpZ2h0U2hhZG93XG4gKi9cbmV4cG9ydCB2YXIgZXVpU2hhZG93WFNtYWxsID0gZnVuY3Rpb24gZXVpU2hhZG93WFNtYWxsKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZTtcbiAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBfY29sb3IgPSBfcmVmMi5jb2xvcjtcbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIC44cHggLjhweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDQsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAyLjNweCAycHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wMywgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcblxuLyoqXG4gKiBib3R0b21TaGFkb3dTbWFsbFxuICovXG5leHBvcnQgdmFyIGV1aVNoYWRvd1NtYWxsID0gZnVuY3Rpb24gZXVpU2hhZG93U21hbGwoX3JlZjMpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjMuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gX3JlZjMuY29sb3JNb2RlO1xuICB2YXIgX3JlZjQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF9jb2xvciA9IF9yZWY0LmNvbG9yO1xuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgLjdweCAxLjRweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDcsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAxLjlweCA0cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDQuNXB4IDEwcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcblxuLyoqXG4gKiBib3R0b21TaGFkb3dNZWRpdW1cbiAqL1xuZXhwb3J0IHZhciBldWlTaGFkb3dNZWRpdW0gPSBmdW5jdGlvbiBldWlTaGFkb3dNZWRpdW0oX3JlZjUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjUuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gX3JlZjUuY29sb3JNb2RlO1xuICB2YXIgX3JlZjYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF9jb2xvciA9IF9yZWY2LmNvbG9yLFxuICAgIHByb3BlcnR5ID0gX3JlZjYucHJvcGVydHk7XG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICBpZiAocHJvcGVydHkgPT09ICdmaWx0ZXInKSB7XG4gICAgLy8gVXNpbmcgb25seSBvbmUgZHJvcC1zaGFkb3cgZmlsdGVyIGluc3RlYWQgb2YgbXVsdGlwbGUgaXMgbW9yZSBwZXJmb3JtYW50ICYgcHJldmVudHMgU2FmYXJpIGJ1Z3NcbiAgICByZXR1cm4gXCJmaWx0ZXI6IGRyb3Atc2hhZG93KDAgNS43cHggOXB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4yLCBjb2xvck1vZGUpLCBcIik7XCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcImJveC1zaGFkb3c6XFxuICAgICAgMCAuOXB4IDRweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDgsIGNvbG9yTW9kZSksIFwiLFxcbiAgICAgIDAgMi42cHggOHB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgICAgIDAgNS43cHggMTJweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA1LCBjb2xvck1vZGUpLCBcIixcXG4gICAgICAwIDE1cHggMTVweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpLCBcIjtcIik7XG4gIH1cbn07XG5cbi8qKlxuICogYm90dG9tU2hhZG93XG4gKi9cbmV4cG9ydCB2YXIgZXVpU2hhZG93TGFyZ2UgPSBmdW5jdGlvbiBldWlTaGFkb3dMYXJnZShfcmVmNykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNy5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmNy5jb2xvck1vZGU7XG4gIHZhciBfcmVmOCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX2NvbG9yID0gX3JlZjguY29sb3I7XG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAxcHggNXB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4xLCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMy42cHggMTNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA3LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgOC40cHggMjNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA2LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMjNweCAzNXB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDUsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG5cbi8qKlxuICogYm90dG9tU2hhZG93TGFyZ2VcbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNoYWRvd1hMYXJnZSA9IGZ1bmN0aW9uIGV1aVNoYWRvd1hMYXJnZShfcmVmOSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmOS5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmOS5jb2xvck1vZGU7XG4gIHZhciBfcmVmMTAgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF9jb2xvciA9IF9yZWYxMC5jb2xvcixcbiAgICByZXZlcnNlID0gX3JlZjEwLnJldmVyc2U7XG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCBcIi5jb25jYXQocmV2ZXJzZSA/ICctJyA6ICcnLCBcIjIuN3B4IDlweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjEzLCBjb2xvck1vZGUpLCBcIixcXG4gIDAgXCIpLmNvbmNhdChyZXZlcnNlID8gJy0nIDogJycsIFwiOS40cHggMjRweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA5LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgXCIpLmNvbmNhdChyZXZlcnNlID8gJy0nIDogJycsIFwiMjEuOHB4IDQzcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wOCwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcblxuLyoqXG4gKiBzbGlnaHRTaGFkb3dIb3ZlclxuICovXG5leHBvcnQgdmFyIGV1aVNsaWdodFNoYWRvd0hvdmVyID0gZnVuY3Rpb24gZXVpU2xpZ2h0U2hhZG93SG92ZXIoX3JlZjExKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYxMS5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmMTEuY29sb3JNb2RlO1xuICB2YXIgX3JlZjEyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBfY29sb3IgPSBfcmVmMTIuY29sb3I7XG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAxcHggNXB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4xLCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMy42cHggMTNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA3LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgOC40cHggMjNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA2LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMjNweCAzNXB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDUsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVNsaWdodFNoYWRvd0hvdmVyID0gZnVuY3Rpb24gdXNlRXVpU2xpZ2h0U2hhZG93SG92ZXIoY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlTbGlnaHRTaGFkb3dIb3ZlcihldWlUaGVtZUNvbnRleHQsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59O1xuXG4vKipcbiAqIGJvdHRvbVNoYWRvd0ZsYXRcbiAqXG4gKiBTaW1pbGFyIHRvIHNoYWRvdyBtZWRpdW0gYnV0IHdpdGhvdXQgdGhlIGJvdHRvbSBkZXB0aC5cbiAqIFVzZWZ1bCBmb3IgcG9wb3ZlcnMgdGhhdCBkcm9wIFVQIHJhdGhlciB0aGFuIERPV04uXG4gKi9cbmV4cG9ydCB2YXIgZXVpU2hhZG93RmxhdCA9IGZ1bmN0aW9uIGV1aVNoYWRvd0ZsYXQoX3JlZjEzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYxMy5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmMTMuY29sb3JNb2RlO1xuICB2YXIgX3JlZjE0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBfY29sb3IgPSBfcmVmMTQuY29sb3I7XG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAwIC44cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA2LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMCAycHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNCwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDAgNXB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDQsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAwIDE3cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wMywgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2hhZG93RmxhdCA9IGZ1bmN0aW9uIHVzZUV1aVNoYWRvd0ZsYXQoY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlTaGFkb3dGbGF0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgIGNvbG9yOiBjb2xvclxuICB9KTtcbn07XG5leHBvcnQgdmFyIGV1aVNoYWRvdyA9IGZ1bmN0aW9uIGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIHNpemUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdsJztcbiAgdmFyIF9yZWYxNSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgY29sb3IgPSBfcmVmMTUuY29sb3I7XG4gIHN3aXRjaCAoc2l6ZSkge1xuICAgIGNhc2UgJ3hzJzpcbiAgICAgIHJldHVybiBldWlTaGFkb3dYU21hbGwoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG4gICAgY2FzZSAncyc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93U21hbGwoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93TWVkaXVtKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuICAgIGNhc2UgJ2wnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd0xhcmdlKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3hsJzpcbiAgICAgIHJldHVybiBldWlTaGFkb3dYTGFyZ2UoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUud2FybignUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBzaXplIG9wdGlvbiB0byB1c2VFdWlTaGFkb3cnKTtcbiAgICAgIHJldHVybiAnJztcbiAgfVxufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2hhZG93ID0gZnVuY3Rpb24gdXNlRXVpU2hhZG93KCkge1xuICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ2wnO1xuICB2YXIgY29sb3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCBzaXplLCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvbnRTaXplLCBsb2dpY2FsQ1NTLCBsb2dpY2FsU2hvcnRoYW5kQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpQnV0dG9uU2l6ZU1hcCB9IGZyb20gJy4uLy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbi8vIFByb3ZpZGVzIGEgc29saWQgcmVzZXQgYW5kIGJhc2UgZm9yIGhhbmRsaW5nIHNpemluZyBsYXlvdXRcbi8vIERvZXMgbm90IGluY2x1ZGUgYW55IHZpc3VhbCBzdHlsZXNcbmV4cG9ydCB2YXIgZXVpQnV0dG9uQmFzZUNTUyA9IGZ1bmN0aW9uIGV1aUJ1dHRvbkJhc2VDU1MoKSB7XG4gIHJldHVybiBcIlxcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIGFwcGVhcmFuY2U6IG5vbmU7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgXCIuY29uY2F0KGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIjtcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIjtcXG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIFwiKTtcbn07XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI4NTk1cDktaXNEaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiY3Vyc29yOm5vdC1hbGxvd2VkO2xhYmVsOmlzRGlzYWJsZWQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiODU5NXA5LWlzRGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImN1cnNvcjpub3QtYWxsb3dlZDtsYWJlbDppc0Rpc2FibGVkO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUJ1dHRvbkRpc3BsYXlTdHlsZXMgPSBmdW5jdGlvbiBldWlCdXR0b25EaXNwbGF5U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBzaXplcyA9IGV1aUJ1dHRvblNpemVNYXAoZXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIF9idXR0b25TaXplID0gZnVuY3Rpb24gX2J1dHRvblNpemUoc2l6ZUtleSkge1xuICAgIHZhciBzaXplID0gc2l6ZXNbc2l6ZUtleV07XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnaGVpZ2h0Jywgc2l6ZS5oZWlnaHQpLCBcIiBsaW5lLWhlaWdodDpcIiwgc2l6ZS5oZWlnaHQsIFwiO1wiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsIHNpemUuZm9udFNjYWxlKSwgXCIgYm9yZGVyLXJhZGl1czpcIiwgc2l6ZS5yYWRpdXMsIFwiO1wiKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpQnV0dG9uRGlzcGxheTogLyojX19QVVJFX18qL2NzcyhldWlCdXR0b25CYXNlQ1NTKCksIFwiIGZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5tZWRpdW0sIFwiO1wiLCBsb2dpY2FsU2hvcnRoYW5kQ1NTKCdwYWRkaW5nJywgXCIwIFwiLmNvbmNhdChldWlUaGVtZS5zaXplLm0pKSwgXCIgJjpob3Zlcjpub3QoOmRpc2FibGVkKSwmOmZvY3Vze3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fTtsYWJlbDpldWlCdXR0b25EaXNwbGF5O1wiKSxcbiAgICAvLyBTdGF0ZXNcbiAgICBpc0Rpc2FibGVkOiBfcmVmLFxuICAgIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6YmxvY2s7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIiksXG4gICAgZGVmYXVsdE1pbldpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsIFwiXCIuY29uY2F0KGV1aVRoZW1lLmJhc2UgKiA3LCBcInB4XCIpKSwgXCI7O2xhYmVsOmRlZmF1bHRNaW5XaWR0aDtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICB4czogLyojX19QVVJFX18qL2NzcyhfYnV0dG9uU2l6ZSgneHMnKSwgXCI7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoX2J1dHRvblNpemUoJ3MnKSwgXCI7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhfYnV0dG9uU2l6ZSgnbScpLCBcIjtsYWJlbDptO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwidGV4dFByb3BzXCIsIFwiaXNMb2FkaW5nXCIsIFwiaXNEaXNhYmxlZFwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpemVcIiwgXCJpY29uU2lkZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuLi8uLi9sb2FkaW5nJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IGV1aUJ1dHRvbkRpc3BsYXlDb250ZW50U3R5bGVzIH0gZnJvbSAnLi9fYnV0dG9uX2Rpc3BsYXlfY29udGVudC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgSUNPTl9TSVpFUyA9IFsncycsICdtJ107XG5leHBvcnQgdmFyIElDT05fU0lERVMgPSBbJ2xlZnQnLCAncmlnaHQnXTtcblxuLyoqXG4gKiAqSU5URVJOQUwgT05MWSpcbiAqIFRoaXMgY29tcG9uZW50IGlzIHNpbXBseSBhIGhlbHBlciBjb21wb25lbnQgZm9yIHJldXNlIHdpdGhpbiBvdGhlciBidXR0b24gY29tcG9uZW50cy5cbiAqL1xuXG5leHBvcnQgdmFyIEV1aUJ1dHRvbkRpc3BsYXlDb250ZW50ID0gZnVuY3Rpb24gRXVpQnV0dG9uRGlzcGxheUNvbnRlbnQoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIHRleHRQcm9wcyA9IF9yZWYudGV4dFByb3BzLFxuICAgIF9yZWYkaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgaXNMb2FkaW5nID0gX3JlZiRpc0xvYWRpbmcgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpc0xvYWRpbmcsXG4gICAgX3JlZiRpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIGlzRGlzYWJsZWQgPSBfcmVmJGlzRGlzYWJsZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpc0Rpc2FibGVkLFxuICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICBfcmVmJGljb25TaXplID0gX3JlZi5pY29uU2l6ZSxcbiAgICBpY29uU2l6ZSA9IF9yZWYkaWNvblNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkaWNvblNpemUsXG4gICAgX3JlZiRpY29uU2lkZSA9IF9yZWYuaWNvblNpZGUsXG4gICAgaWNvblNpZGUgPSBfcmVmJGljb25TaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmJGljb25TaWRlLFxuICAgIGNvbnRlbnRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpQnV0dG9uRGlzcGxheUNvbnRlbnRTdHlsZXMpO1xuXG4gIC8vIEFkZCBhbiBpY29uIHRvIHRoZSBidXR0b24gaWYgb25lIGV4aXN0cy5cbiAgdmFyIGljb24gPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAvLyBXaGVuIHRoZSBidXR0b24gaXMgZGlzYWJsZWQgdGhlIHRleHQgZ2V0cyBncmF5XG4gICAgICAvLyBhbmQgaW4gc29tZSBidXR0b25zIHRoZSBiYWNrZ3JvdW5kIGdldHMgYSBsaWdodCBncmF5XG4gICAgICAvLyBmb3IgYmV0dGVyIGNvbnRyYXN0IHdlIHdhbnQgdG8gY2hhbmdlIHRoZSBib3JkZXIgb2YgdGhlIHNwaW5uZXJcbiAgICAgIC8vIHRvIGhhdmUgdGhlIHNhbWUgY29sb3Igb2YgdGhlIHRleHQuIFRoaXMgd2F5IHdlIGVuc3VyZSB0aGUgYm9yZGVyc1xuICAgICAgLy8gYXJlIGFsd2F5cyB2aXNpYmxlLiBUaGUgZGVmYXVsdCBzcGlubmVyIGNvbG9yIGNvdWxkIGJlIHZlcnkgbGlnaHQuXG4gICAgICB2YXIgbG9hZGluZ1NwaW5uZXJDb2xvciA9IGlzRGlzYWJsZWQgPyB7XG4gICAgICAgIGJvcmRlcjogJ2N1cnJlbnRjb2xvcidcbiAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgICBzaXplOiBpY29uU2l6ZSxcbiAgICAgICAgY29sb3I6IGxvYWRpbmdTcGlubmVyQ29sb3JcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaWNvblR5cGUpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICAgIHNpemU6IGljb25TaXplLFxuICAgICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbaWNvblR5cGUsIGljb25TaXplLCBpc0xvYWRpbmcsIGlzRGlzYWJsZWRdKTtcbiAgdmFyIGlzVGV4dCA9IHR5cGVvZiBjaGlsZHJlbiA9PT0gJ3N0cmluZyc7XG4gIHZhciBkb05vdFJlbmRlclRleHRXcmFwcGVyID0gdGV4dFByb3BzID09PSBmYWxzZTtcbiAgdmFyIHJlbmRlclRleHRXcmFwcGVyID0gKGlzVGV4dCB8fCB0ZXh0UHJvcHMpICYmICFkb05vdFJlbmRlclRleHRXcmFwcGVyO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNzczogc3R5bGVzLmV1aUJ1dHRvbkRpc3BsYXlDb250ZW50XG4gIH0sIGNvbnRlbnRQcm9wcyksIGljb25TaWRlID09PSAnbGVmdCcgJiYgaWNvbiwgcmVuZGVyVGV4dFdyYXBwZXIgPyBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7fSwgdGV4dFByb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWktdGV4dFRydW5jYXRlJywgdGV4dFByb3BzID09PSBudWxsIHx8IHRleHRQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFByb3BzLmNsYXNzTmFtZSlcbiAgfSksIGNoaWxkcmVuKSA6IGNoaWxkcmVuLCBpY29uU2lkZSA9PT0gJ3JpZ2h0JyAmJiBpY29uKTtcbn07XG5FdWlCdXR0b25EaXNwbGF5Q29udGVudC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFt1bmRlZmluZWRdKV0pLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQvY2hpbGRyZW4gb25seSAobm90IGljb24pXG4gICAgICpcbiAgICAgKiBUaGlzIHNwYW4gd3JhcHBlciBjYW4gYmUgcmVtb3ZlZCBieSBwYXNzaW5nIGB0ZXh0UHJvcHM9e2ZhbHNlfWAuXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5hbnksXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BY2Nlc3NpYmlsaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkFjY2Vzc2liaWxpdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDBhOCA4IDAgMSAxIDAgMTZBOCA4IDAgMCAxIDggMFptMCAxYTcgNyAwIDEgMCAwIDE0QTcgNyAwIDAgMCA4IDFabTMuOTc0IDQuMzQyYS41LjUgMCAwIDEtLjIzMy41OTZsLS4wODMuMDM2TDkgNi44NnYyLjU1OWwuOTc0IDIuOTIzYS41LjUgMCAwIDEtLjIzMy41OTZsLS4wODMuMDM2YS41LjUgMCAwIDEtLjU5Ni0uMjMzbC0uMDM2LS4wODMtMS0zTDggOS41bC0uMDI2LjE1OC0xIDNhLjUuNSAwIDAgMS0uOTctLjIyOGwuMDIyLS4wODhMNyA5LjQxNlY2Ljg2bC0yLjY1OC0uODg2YS41LjUgMCAwIDEgLjIyOC0uOTdsLjA4OC4wMjJMNy41ODMgNmguODMzbDIuOTI2LS45NzRhLjUuNSAwIDAgMSAuNjMyLjMxNlpNOCAzYTEgMSAwIDEgMSAwIDIgMSAxIDAgMCAxIDAtMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFjY2Vzc2liaWxpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQWdncmVnYXRlID0gZnVuY3Rpb24gRXVpSWNvbkFnZ3JlZ2F0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjUgMmEuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMXptMC0xYTEuNSAxLjUgMCAwIDEgMS40MTUgMWgxLjkwOGExLjUgMS41IDAgMCAxIDEuMzkzLjk0M0w4LjgzOSA3SDEyLjVhLjUuNSAwIDAgMSAwIDFIOC44MzlsLTEuNjIzIDQuMDU3QTEuNSAxLjUgMCAwIDEgNS44MjMgMTNIMy45MTVhMS41IDEuNSAwIDEgMSAwLTFoMS45MDhhLjUuNSAwIDAgMCAuNDY0LS4zMTRMNy43NjEgOEgzLjkxNWExLjUgMS41IDAgMSAxIDAtMUg3Ljc2TDYuMjg3IDMuMzE0QS41LjUgMCAwIDAgNS44MjMgM0gzLjkxNUExLjUgMS41IDAgMSAxIDIuNSAxem0wIDExYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xek0zIDcuNWEuNS41IDAgMSAwLTEgMCAuNS41IDAgMCAwIDEgMHptOS4zNTQtMy4zNTRhLjUuNSAwIDAgMC0uNzA4LjcwOEwxMy43OTMgN2EuNzA3LjcwNyAwIDAgMSAwIDFsLTIuMTQ3IDIuMTQ2YS41LjUgMCAwIDAgLjcwOC43MDhMMTQuNSA4LjcwN2ExLjcwNyAxLjcwNyAwIDAgMCAwLTIuNDE0bC0yLjE0Ni0yLjE0N3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFnZ3JlZ2F0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BbGVydCA9IGZ1bmN0aW9uIEV1aUljb25BbGVydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTUgOS41MDJsLjM1LTMuNTA3YS45MDUuOTA1IDAgMTAtMS44IDBsLjM1IDMuNTA3YS41NTIuNTUyIDAgMDAxLjEgMHpNOSAxMmExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04Ljg2NCAxLjQ5NmExIDEgMCAwMC0xLjcyOCAwbC03IDEyQTEgMSAwIDAwMSAxNWgxNGExIDEgMCAwMC44NjQtMS41MDRsLTctMTJ6TTEgMTRMOCAybDcgMTJIMXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFsZXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFuYWx5emVFdmVudCA9IGZ1bmN0aW9uIEV1aUljb25BbmFseXplRXZlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCA5LjE2OSAyIDUuMjV2Ni4xN2w2IDMuNDI4IDYtMy40MjhWNS4yNUw4IDkuMTdaTTE1IDR2OGwtNyA0LTctNFY0bDctNCA3IDRabS0xLjQyOC4zMzZMOCAxLjE1MiAyLjQyOCA0LjMzNiA4IDcuOTc0bDUuNTcyLTMuNjM4WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFuYWx5emVFdmVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BbmFseXplRXZlbnQgPSBmdW5jdGlvbiBFdWlJY29uQW5hbHl6ZUV2ZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNCxcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjkyNCA0LjAxM2EuNjA1LjYwNSAwIDAwLS4yMjgtLjIzNkw3LjMwNC4wODJhLjYwNy42MDcgMCAwMC0uNjA4IDBMLjMwNCAzLjc3N0EuNjIuNjIgMCAwMDAgNC4zMDR2Ny4zOTJjMCAuMjE3LjExNi40MTguMzA0LjUyN2w2LjM5MiAzLjY5NWMuMTg4LjExLjQyLjExLjYwOCAwbDYuMzkyLTMuNjk1YS42MDkuNjA5IDAgMDAuMzA0LS41MjdWNC4zMDRhLjYwNy42MDcgMCAwMC0uMDc2LS4yOTF6TTEgNS4wNzl2Ni4zOTFsNiAzLjQ3IDYtMy40N1Y1LjA4TDcuMjUyIDguNDMyIDcgOC41NzlsLS4yNTItLjE0N0wxIDUuMDc5em0xMS40NzYtLjg1Mkw3IDEuMDYgMS41MjQgNC4yMjcgNyA3LjQybDUuNDc2LTMuMTk0elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQW5hbHl6ZUV2ZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFubm90YXRpb24gPSBmdW5jdGlvbiBFdWlJY29uQW5ub3RhdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNi41YTQuNSA0LjUgMCAxIDEgNSA0LjQ3M1YxNkg3di01LjAyN0E0LjUgNC41IDAgMCAxIDMgNi41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQW5ub3RhdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Bbm9tYWx5Q2hhcnQgPSBmdW5jdGlvbiBFdWlJY29uQW5vbWFseUNoYXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNSAxNEgyVjEuNWEuNS41IDAgMCAwLTEgMHYxM2EuNS41IDAgMCAwIC41LjVoMTNhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjQyIDVhLjUuNSAwIDAgMSAuNTA1LjQzTDkuODY0IDEyaC44NzNsLjk1Ny0uODdhLjUuNSAwIDAgMSAuNjcyIDBsMS4xIDFhLjUuNSAwIDAgMS0uNjcyLjc0bC0uNzY0LS42OTQtLjc2NC42OTRhLjUuNSAwIDAgMS0uMzM2LjEzaC0xLjVhLjUuNSAwIDAgMS0uNDk1LS40M2wtLjQyOS0zLS4zMTIgMi45ODJhLjUuNSAwIDAgMS0uODM0LjMxOGwtLjY4OS0uNjI2LS40MDQuNTUyYS41LjUgMCAwIDEtLjQwNC4yMDRoLS41M2EuNS41IDAgMCAxLS40MDMtLjIwNGwtLjQwNS0uNTUyLS42ODkuNjI2YS41LjUgMCAxIDEtLjY3Mi0uNzRsMS4xLTFhLjUuNSAwIDAgMSAuNzQuMDc0bC41ODMuNzk2aC4wMjNsLjU4My0uNzk2YS41LjUgMCAwIDEgLjc0LS4wNzRsLjM3LjMzNi42My02LjAxOEEuNS41IDAgMCAxIDguNDIgNVptLjA4LTMuMDFhLjUuNSAwIDEgMCAwIDEuMDAyLjUuNSAwIDAgMCAwLTEuMDAyWk04LjUgNEExLjUwMyAxLjUwMyAwIDAgMSA3IDIuNDkzYTEuNSAxLjUgMCAwIDEgLjQ0LTEuMDY2Yy41NjYtLjU3IDEuNTU0LS41NyAyLjEyMSAwIC4yODMuMjg1LjQzOS42NjMuNDM5IDEuMDY2QTEuNTAyIDEuNTAyIDAgMCAxIDguNSA0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQW5vbWFseUNoYXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFub21hbHlTd2ltTGFuZSA9IGZ1bmN0aW9uIEV1aUljb25Bbm9tYWx5U3dpbUxhbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDVWMWg0djRIMVptMy0xVjJIMnYyaDJabTcgMVYxaDR2NGgtNFptMS0xaDJWMmgtMnYyWk0xIDEwVjZoNHY0SDFabTMtMVY3SDJ2MmgyWm0yIDZ2LTRoNHY0SDZabTEtMWgydi0ySDd2MlptNCAxdi00aDR2NGgtNFptMS0xaDJ2LTJoLTJ2MlptLTEtOGg0djRoLTRWNlpNNiA2aDR2NEg2VjZabS01IDVoNHY0SDF2LTRaTTYgMWg0djRINlYxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQW5vbWFseVN3aW1MYW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwbVRyYWNlID0gZnVuY3Rpb24gRXVpSWNvbkFwbVRyYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAwaDEyYTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yWm0wIDFhMSAxIDAgMCAwLTEgMXYxMmExIDEgMCAwIDAgMSAxaDEyYTEgMSAwIDAgMCAxLTFWMmExIDEgMCAwIDAtMS0xSDJabS41IDJoMTBhLjUuNSAwIDEgMSAwIDFoLTEwYS41LjUgMCAwIDEgMC0xWm0xIDNoNmEuNS41IDAgMCAxIDAgMWgtNmEuNS41IDAgMCAxIDAtMVptMiAzaDRhLjUuNSAwIDAgMSAwIDFoLTRhLjUuNSAwIDAgMSAwLTFabTMgM2g1YS41LjUgMCAxIDEgMCAxaC01YS41LjUgMCAxIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBtVHJhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwQWRkRGF0YSA9IGZ1bmN0aW9uIEV1aUljb25BcHBBZGREYXRhKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzIgMzBIMFYzaDEyLjU3bDMgNUgzMnYyMlpNMiAyOGgyOFYxMEgxNC40M2wtMy01SDJ2MjNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxOGgtNHYtNGgtMnY0aC00djJoNHY0aDJ2LTRoNHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQWRkRGF0YTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBBZHZhbmNlZFNldHRpbmdzID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFkdmFuY2VkU2V0dGluZ3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjkwOSAyNi4xODJoMS45Mzl2NC44NDhIMi45MDl6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuODQ4IDE2LjYyVjBIMi45MXYxNi42MmEzLjg3OSAzLjg3OSAwIDEgMCAxLjk0IDBabS0uOTcgNS42ODNhMS45NCAxLjk0IDAgMSAxIDAtMy44NzkgMS45NCAxLjk0IDAgMCAxIDAgMy44NzlaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC41NDUgMTYuNDg1aDEuOTM5VjMxLjAzaC0xLjkzOXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuNDg1IDYuOTI0VjBoLTEuOTR2Ni45MjRhMy44NzkgMy44NzkgMCAxIDAgMS45NCAwWm0tLjk3IDUuNjgyYTEuOTQgMS45NCAwIDEgMSAwLTMuODc5IDEuOTQgMS45NCAwIDAgMSAwIDMuODhaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNi4xODIgMjYuMTgyaDEuOTM5djQuODQ4aC0xLjkzOXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjguMTIxIDE2LjYyVjBoLTEuOTR2MTYuNjJhMy44NzkgMy44NzkgMCAxIDAgMS45NCAwWm0tLjk3IDUuNjgzYTEuOTQgMS45NCAwIDEgMSAwLTMuODc5IDEuOTQgMS45NCAwIDAgMSAwIDMuODc5WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQWR2YW5jZWRTZXR0aW5nczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBBZ2VudCA9IGZ1bmN0aW9uIEV1aUljb25BcHBBZ2VudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuOTk2IDE4LjYzNiAwIDIwLjQzNHY2LjEzMmw2IDMuNiA1LTMgNSAzIDUtMyA1IDMgNi0zLjZ2LTYuMTMybC01LTN2LTVsLTUtM3YtNWwtNi0zLjYtNiAzLjZ2Mi44MzJsMiAuMDMzVjUuNTY2bDQtMi40IDQgMi40djMuODY4bC0xLjk5NiAxLjE5NyAxIDEuNzMzTDIxIDExLjE2Nmw0IDIuNHYzLjg2OGwtNCAyLjQtMi4yNTctMS4zNTQtLjk3MSAxLjc1TDIwIDIxLjU2NXYzLjg2OGwtNCAyLjQtNC0yLjR2LTEuN2wtMi0uMDMzdjEuNzMzbC00IDIuNC00LTIuNHYtMy44NjhsMS45OTYtMS4xOTctMS0xLjczM1pNMjIgMjUuNDM0di0zLjg2OGw0LTIuNCA0IDIuNHYzLjg2OGwtNCAyLjQtNC0yLjRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xMSAyMi4xNjYtNi0zLjZ2LTYuMTMybDYtMy42IDYgMy42djYuMTMybC02IDMuNlptNC00LjczMnYtMy44NjhsLTQtMi40LTQgMi40djMuODY4bDQgMi40IDQtMi40WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBZ2VudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBBcG0gPSBmdW5jdGlvbiBFdWlJY29uQXBwQXBtKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxMGg0djJIMVYxaDMwdjZoLTJWM0gzdjd6bTI2IDE5di02aDJ2OEgxOHYtOGgydjZoOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMxIDEwSDl2MTFoMTJjNS41MjMgMCAxMC00LjQ3NyAxMC0xMHYtMXptLTEwIDlIMTF2LTdoMTcuOTM4QTguMDAxIDguMDAxIDAgMCAxIDIxIDE5elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBcG07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwQXBwU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFwcFNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNS41IDExLjkxNSAyNyA1LjI3OSAxOS41LjkzOGE3LjAwMiA3LjAwMiAwIDAgMC03IDBsLTggNC42MkE3IDcgMCAwIDAgMSAxMS42MnY5LjIzN2E3IDcgMCAwIDAgMy41IDYuMDYxbDcuNSA0LjMzVjE3Ljk4YTcgNyAwIDAgMSAzLjUtNi4wNjNaTTEwIDI3Ljc4NXYtOS44MDhhOSA5IDAgMCAxIDQuNS03Ljc5M2w4LjUwMy00LjkxTDE4LjUgMi42NzJhNS4wMDMgNS4wMDMgMCAwIDAtNSAwbC04IDQuNjE5QTUgNSAwIDAgMCAzIDExLjYydjkuMjM4YTUgNSAwIDAgMCAyLjUgNC4zM2w0LjUgMi41OThaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTguNDA5IDEzLjU1YTcuMDg5IDcuMDg5IDAgMCAxIDEuMDM1IDEuNzExQTYuOTMgNi45MyAwIDAgMSAyMCAxNy45OHYxMy4yN2w3LjUtNC4zM2E3IDcgMCAwIDAgMy41LTYuMDYxdi05LjIzOWE2Ljk5MiA2Ljk5MiAwIDAgMC0xLjU4Ny00LjQyMUwxOC40MDkgMTMuNTVabTIuNzc3LjcwNUE4LjkzMyA4LjkzMyAwIDAgMSAyMiAxNy45Nzl2OS44MDdsNC41LTIuNTk4YTUgNSAwIDAgMCAyLjUtNC4zM1YxMS42MmMwLS41ODgtLjEwNi0xLjE2MS0uMzAzLTEuN2wtNy41MTEgNC4zMzVaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFwcFNlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBBdWRpdGJlYXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwQXVkaXRiZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUgMGgydjMyaC0yelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDMyaDEzdi0ySDJWMmgxMVYwSDB6TTE5IDB2MmgxMXYyOEgxOXYyaDEzVjB6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBdWRpdGJlYXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwQ2FudmFzID0gZnVuY3Rpb24gRXVpSWNvbkFwcENhbnZhcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTdoMnY3SDd6TTEyIDE0aDJ2MTBoLTJ6TTE3IDE2aDJ2OGgtMnpNMjIgMTRoM3YyaC0zek0yMiAxOGgzdjJoLTN6TTIyIDIyaDN2MmgtM3pcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuNzMgMjRhNi40NyA2LjQ3IDAgMCAxIC40NS0yLjE5Yy4zMzctLjkuNTItMS44NS41NC0yLjgxYTguNTUgOC41NSAwIDAgMC0uNTQtMi44MSA2LjQ3IDYuNDcgMCAwIDEtLjQ1LTIuMTkgOS4yIDkuMiAwIDAgMSAuNjItMi40OWMuNTMtMS41NyAxLjA4LTMuMTkuMDgtNC4yLTEtMS4wMS0yLjQxLS40NC0zLjUyLjA1YTUuNTkgNS41OSAwIDAgMS0yLjA5LjY0IDUuMyA1LjMgMCAwIDEtLjU5IDBMMTYgLjI4IDYuNzcgOGE1LjMgNS4zIDAgMCAxLS41OSAwIDUuNTkgNS41OSAwIDAgMS0yLjA5LS42NUMzIDYuODcgMS42IDYuMjUuNTcgNy4zMWMtMS4wMyAxLjA2LS40NSAyLjYzLjA4IDQuMkE5LjIgOS4yIDAgMCAxIDEuMjcgMTRhNi40NyA2LjQ3IDAgMCAxLS40NSAyLjE5QTguNTUgOC41NSAwIDAgMCAuMjggMTljLjAyLjk2LjIwMyAxLjkxLjU0IDIuODFBNi40NyA2LjQ3IDAgMCAxIDEuMjcgMjRhOS4yIDkuMiAwIDAgMS0uNjIgMi40OWMtLjUzIDEuNTctMS4wOCAzLjE5LS4wOCA0LjIuMzUzLjM4Ljg1Mi41OSAxLjM3LjU4YTUuNjcgNS42NyAwIDAgMCAyLjE1LS42M0E1LjU5IDUuNTkgMCAwIDEgNi4xOCAzMGE3LjEzIDcuMTMgMCAwIDEgMi4yOS40NyA4IDggMCAwIDAgMi42Mi41MyA3LjM3IDcuMzcgMCAwIDAgMi40Ny0uNTFBNy4xNCA3LjE0IDAgMCAxIDE2IDMwYTYuMjQgNi4yNCAwIDAgMSAyLjE0LjQ1IDggOCAwIDAgMCAyLjc3LjU1IDguMDggOC4wOCAwIDAgMCAyLjc3LS41NSA2LjI0IDYuMjQgMCAwIDEgMi4xNC0uNDUgNS41OSA1LjU5IDAgMCAxIDIuMDkuNjVjMS4xMS40OSAyLjQ5IDEuMTEgMy41Mi4wNSAxLjAzLTEuMDYuNDUtMi42My0uMDgtNC4yYTkuMiA5LjIgMCAwIDEtLjYyLTIuNVpNMjEuMTcgN2gtLjI2YTggOCAwIDAgMC0yLjc3LjU1QTYuMjQgNi4yNCAwIDAgMSAxNiA4YTYuMjQgNi4yNCAwIDAgMS0yLjE0LS40NUE4IDggMCAwIDAgMTEuMDkgN2gtLjI2TDE2IDIuNzIgMjEuMTcgN1ptOC44OSAyMi4yN2E0LjQyIDQuNDIgMCAwIDEtMS4zNC0uNDYgNy4wOCA3LjA4IDAgMCAwLTIuOS0uODIgOC4xNCA4LjE0IDAgMCAwLTIuNzguNTUgNi4xMyA2LjEzIDAgMCAxLTIuMTMuNDUgNi4yNCA2LjI0IDAgMCAxLTIuMTQtLjQ1QTggOCAwIDAgMCAxNiAyOGE5IDkgMCAwIDAtMy4wOC42IDUuNzQgNS43NCAwIDAgMS0xLjgzLjQgNi4zNiA2LjM2IDAgMCAxLTItLjQzQTguNzIgOC43MiAwIDAgMCA2LjE4IDI4YTcuMDggNy4wOCAwIDAgMC0yLjkuODIgOS42NSA5LjY1IDAgMCAxLTEuMjguNTIgNi4wOCA2LjA4IDAgMCAxIC41Mi0yLjIxYy40MDMtMSAuNjUtMi4wNTUuNzMtMy4xM2E4LjU1IDguNTUgMCAwIDAtLjU0LTIuODFBNi40NyA2LjQ3IDAgMCAxIDIuMjcgMTlhNi40NyA2LjQ3IDAgMCAxIC40NC0yLjE5Yy4zMzctLjkuNTItMS44NS41NC0yLjgxYTEwLjQ4IDEwLjQ4IDAgMCAwLS43Mi0zLjEzIDkgOSAwIDAgMS0uNTktMi4xNkgyYy40NDcuMS44OC4yNTUgMS4yOS40NmE3LjA4IDcuMDggMCAwIDAgMi45LjgyQTguMTQgOC4xNCAwIDAgMCA5IDkuNDQgNi4xMyA2LjEzIDAgMCAxIDExLjA5IDlhNi4xMyA2LjEzIDAgMCAxIDIuMTMuNDVBOC4xNCA4LjE0IDAgMCAwIDE2IDEwYTguMTQgOC4xNCAwIDAgMCAyLjc4LS41NUE2LjEzIDYuMTMgMCAwIDEgMjAuOTEgOWE2LjEzIDYuMTMgMCAwIDEgMi4wOS40NCA4LjE0IDguMTQgMCAwIDAgMi43OC41NSA3LjA4IDcuMDggMCAwIDAgMi45LS44MkE5LjY1IDkuNjUgMCAwIDEgMzAgOC42NmE2LjA4IDYuMDggMCAwIDEtLjUyIDIuMjFjLS40MDMgMS0uNjUgMi4wNTUtLjczIDMuMTMuMDIuOTYuMjAzIDEuOTEuNTQgMi44MWE2LjQ3IDYuNDcgMCAwIDEgLjQ0IDIuMTkgNi40NyA2LjQ3IDAgMCAxLS40NCAyLjE5IDguNTUgOC41NSAwIDAgMC0uNTQgMi44MWMuMDc4IDEuMDc0LjMyIDIuMTMuNzIgMy4xM2E5IDkgMCAwIDEgLjU5IDIuMTZ2LS4wMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENhbnZhczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBDYXNlcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBDYXNlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNmgyMnY3aC0yVjhINnYxOUg0VjZaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDEySDd2LTJoM3YyWm0xIDBoMTJ2LTJIMTF2MlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjQgMUgwdjI2aDFsLTEgLjAwMXYuMDI2YTIuMjU2IDIuMjU2IDAgMCAwIC4wMS4xODUgNC4zMTggNC4zMTggMCAwIDAgLjU2MyAxLjc5MkMxLjE5NCAzMC4wNjQgMi4zOTkgMzEgNC41IDMxSDE3di0ySDguNDI5YTQuMzIgNC4zMiAwIDAgMCAuNTctMS45Mjd2LS4wNjJMOSAyNy4wMDV2LS4wMDNTOSAyNyA4IDI3aDFWMTZoMjF2M2gydi01SDd2MTIuOTk1bC0uMDAzLjA1YTIuMzIgMi4zMiAwIDAgMS0uMjk4Ljk1QzYuNDQyIDI4LjQzNiA1Ljg5OCAyOSA0LjUgMjljLTEuMzk4IDAtMS45NDItLjU2NC0yLjE5OS0xLjAwNGEyLjMyIDIuMzIgMCAwIDEtLjMtMS4wMDFMMiAyNi45OTJWM2gyMHYzaDJWMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzIDIxdjNoLTN2MmgzdjNoMnYtM2gzdi0yaC0zdi0zaC0yWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTI0IDMyYTcgNyAwIDEgMCAwLTE0IDcgNyAwIDAgMCAwIDE0Wm0wLTJhNSA1IDAgMSAwIDAtMTAgNSA1IDAgMCAwIDAgMTBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDYXNlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBDb2RlID0gZnVuY3Rpb24gRXVpSWNvbkFwcENvZGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xMS4yNzYgMjkgLjU5NCAySDBsNy42MjEtMTQuMjkuODExIDIuNzNMMy4zMzMgMjloNy45NDNaTTI4LjkyIDMxbC00Ljk4Ny0xNi41OThBMTYgMTYgMCAwIDAgOC42ODggM2wxLjggNkg4LjRMNiAxaDIuNjA3YTE4IDE4IDAgMCAxIDE3LjI0MSAxMi44MjhMMzEgMzFoLTIuMDhaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4wMzcgMTQuMDIgMTYuNDkyIDI5aDYuODI3bC0yLjMzMy03Ljg0OWExMCAxMCAwIDAgMC04Ljk0OS03LjEzWk05LjM1IDEyaDIuMDVhMTIgMTIgMCAwIDEgMTEuNTAzIDguNTgxTDI2IDMxSDE1TDkuMzUgMTJaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENvZGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwQ29uc29sZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBDb25zb2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgOUgzYTMgMyAwIDAgMS0zLTNWM2EzIDMgMCAwIDEgMy0zaDI2YTMgMyAwIDAgMSAzIDN2M2EzIDMgMCAwIDEtMyAzWk0zIDJhMSAxIDAgMCAwLTEgMXYzYTEgMSAwIDAgMCAxIDFoMjZhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFIM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDMySDNhMyAzIDAgMCAxLTMtM1YxNGEzIDMgMCAwIDEgMy0zaDI2YTMgMyAwIDAgMSAzIDN2MTVhMyAzIDAgMCAxLTMgM1pNMyAxM2ExIDEgMCAwIDAtMSAxdjE1YTEgMSAwIDAgMCAxIDFoMjZhMSAxIDAgMCAwIDEtMVYxNGExIDEgMCAwIDAtMS0xSDNaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTcuMjkgMTcuNzEgMy4zIDMuMjktMy4zIDMuMjkgMS40MiAxLjQyIDQuNy00LjcxLTQuNy00Ljcxek0xNSAyNGg5djJoLTl6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDb25zb2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAwdjE2aDguN2w1LjMtNlYwSDB6bTIgMmgxMHY3SDd2NUgyVjJ6bTguNDUgOUw5IDEyLjY0VjExaDEuNDV6TTE4IDE2djE2aDguN2w1LjMtNlYxNkgxOHptMiAyaDEwdjdoLTV2NWgtNVYxOHptOC40NSA5TDI3IDI4LjY0VjI3aDEuNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDE4SDNjMCA2LjA3NSA0LjkyNSAxMSAxMSAxMWgydi0yaC0yYTkgOSAwIDAgMS05LTl6TTE4IDNoLTJ2MmgyYTkgOSAwIDAgMSA5IDloMmMwLTYuMDc1LTQuOTI1LTExLTExLTExelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBEYXNoYm9hcmQgPSBmdW5jdGlvbiBFdWlJY29uQXBwRGFzaGJvYXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgOUgzYTMgMyAwIDAgMS0zLTNWM2EzIDMgMCAwIDEgMy0zaDI2YTMgMyAwIDAgMSAzIDN2M2EzIDMgMCAwIDEtMyAzWk0zIDJhMSAxIDAgMCAwLTEgMXYzYTEgMSAwIDAgMCAxIDFoMjZhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFIM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDIwSDNhMyAzIDAgMCAxLTMtM3YtM2EzIDMgMCAwIDEgMy0zaDlhMyAzIDAgMCAxIDMgM3YzYTMgMyAwIDAgMS0zIDNabS05LTdhMSAxIDAgMCAwLTEgMXYzYTEgMSAwIDAgMCAxIDFoOWExIDEgMCAwIDAgMS0xdi0zYTEgMSAwIDAgMC0xLTFIM1pcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMzFIM2EzIDMgMCAwIDEtMy0zdi0zYTMgMyAwIDAgMSAzLTNoOWEzIDMgMCAwIDEgMyAzdjNhMyAzIDAgMCAxLTMgM1ptLTktN2ExIDEgMCAwIDAtMSAxdjNhMSAxIDAgMCAwIDEgMWg5YTEgMSAwIDAgMCAxLTF2LTNhMSAxIDAgMCAwLTEtMUgzWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgMzFoLTlhMyAzIDAgMCAxLTMtM1YxNGEzIDMgMCAwIDEgMy0zaDlhMyAzIDAgMCAxIDMgM3YxNGEzIDMgMCAwIDEtMyAzWm0tOS0xOGExIDEgMCAwIDAtMSAxdjE0YTEgMSAwIDAgMCAxIDFoOWExIDEgMCAwIDAgMS0xVjE0YTEgMSAwIDAgMC0xLTFoLTlaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcERhc2hib2FyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBEZXZ0b29scyA9IGZ1bmN0aW9uIEV1aUljb25BcHBEZXZ0b29scyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDI4aC0ydi04LjQ5bC42LS4yNkE5IDkgMCAwIDAgMjEgMy41MlYxMUgxMVYzLjUyYTkgOSAwIDAgMCAxLjQgMTUuNzNsLjYuMjZWMjhoLTJ2LTcuMjFBMTEgMTEgMCAwIDEgMTEuNi45MkwxMyAuMzFWOWg2Vi4zMWwxLjQuNjFhMTEgMTEgMCAwIDEgLjYgMTkuODdWMjhaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSAzMGgxMHYySDExelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBEZXZ0b29sczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBEaXNjb3ZlciA9IGZ1bmN0aW9uIEV1aUljb25BcHBEaXNjb3ZlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTguMzMgMjMuNjcgNC43OS0xMC41NSAxMC41NS00Ljc5LTQuNzkgMTAuNTUtMTAuNTUgNC43OVptNi4zLTktMi4yOCA1IDUtMi4yOCAyLjI4LTUtNSAyLjI4WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAwQzcuMTYzIDAgMCA3LjE2MyAwIDE2czcuMTYzIDE2IDE2IDE2IDE2LTcuMTYzIDE2LTE2QTE2IDE2IDAgMCAwIDE2IDBabTEgMjkuOTVWMjhoLTJ2MS45NUExNCAxNCAwIDAgMSAyLjA1IDE3SDR2LTJIMi4wNUExNCAxNCAwIDAgMSAxNSAyLjA1VjRoMlYyLjA1QTE0IDE0IDAgMCAxIDI5Ljk1IDE1SDI4djJoMS45NUExNCAxNCAwIDAgMSAxNyAyOS45NVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcERpc2NvdmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEVtcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBFbXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDIyaDN2MkgxVjFoMjN2NWgtMlYzSDN6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjIyOCAyOWMxLjQ5Mi0xLjY3OCAxLjM1My0yLjg1OS4wMDktNS42NTQtLjA0OS0uMS0uMDQ5LS4xLS4wOTctLjIwMy0xLjM2OS0yLjg1NS0xLjYyNi00LjQ5MS0uMzI1LTYuNTgyIDIuNzk2LTQuNDk4IDkuNTE0LTIuNjQyIDE0LjE4NSAyLjMxN1YxMEgxMHYxOWg1LjIyOFptMi40NyAwSDI5di02Ljk4M2MtMy44OC01LjQwNi0xMC4zNzYtNy43OTUtMTIuNDg3LTQuNC0uODMgMS4zMzYtLjY2OSAyLjM3LjQzIDQuNjYybC4wOTcuMmMxLjM1MiAyLjgxNCAxLjczMSA0LjYzLjY1OSA2LjUyMVpNMzEgOHYyM0g4VjhoMjNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBFbXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwRmlsZWJlYXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwRmlsZWJlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE4aDE2djJIOHpNOCAxM2g5djJIOHpNOCAyM2gxNnYySDh6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjQxIDBINWEzIDMgMCAwIDAtMyAzdjI2YTMgMyAwIDAgMCAzIDNoMjJhMyAzIDAgMCAwIDMtM1Y4LjU5TDIxLjQxIDBaTTIyIDMuNDEgMjYuNTkgOEgyMlYzLjQxWk0yNyAzMEg1YTEgMSAwIDAgMS0xLTFWM2ExIDEgMCAwIDEgMS0xaDE1djhoOHYxOWExIDEgMCAwIDEtMSAxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRmlsZWJlYXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwRmxlZXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwRmxlZXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAyLjgyIDE2IC4wMzggMTEgMi44MnYyLjI4OWw1LTIuNzgyIDUgMi43ODJ2LTIuMjlaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDcuMjgyIDE2IDQuNWwtNSAyLjc4MlY5LjU3bDUtMi43ODEgNSAyLjc4MVY3LjI4MlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyA1LjA0NSAyIDcuODI3djE1LjU3N2wxNCA3Ljc4OCAxNC03Ljc4OFY3LjgyN2wtNS0yLjc4MnYyLjI4OWwzIDEuNjY5djEzLjIyNWwtMTIgNi42NzYtMTItNi42NzZWOS4wMDNsMy0xLjY2OVY1LjA0NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yMiAxMi41IDE2IDlsLTYgMy41djdsNiAzLjUgNi0zLjV2LTdabS05Ljk3NCAxLjIwNUwxNiAxMS4zODdsMy45NzQgMi4zMTh2NC41OUwxNiAyMC42MTNsLTMuOTc0LTIuMzE4di00LjU5WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRmxlZXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwR2lzID0gZnVuY3Rpb24gRXVpSWNvbkFwcEdpcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTI5LjAxNCAyMy44OSAyLjI5NiAxLjE0NUwxNiAzMi4xMDEuNTMgMjQuOTYxbDIuNDktMS4wNTYgMi40NTMgMS4xMzItLjAwMy4wMDJMMTYgMjkuODk5bDEwLjY5LTQuOTM0LS4wMDMtLjAwMSAyLjMyNy0xLjA3NFptLTQuOTcyLTcuNDgyIDcuMjY4IDMuNjI3TDE2IDI3LjEwMS41MyAxOS45NjFsNy42NjgtMy4yNTJjLjM5Mi40ODYuODM4IDEuMDIgMS4zNCAxLjYwNEw1LjQ3IDIwLjAzOSAxNiAyNC44OTlsMTAuNjktNC45MzQtMy45NTQtMS45NzNjLjQ5My0uNTguOTI4LTEuMTA3IDEuMzA2LTEuNTg0WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCA5YTIgMiAwIDEgMC00IDAgMiAyIDAgMCAwIDQgMFptMiAwYTQgNCAwIDEgMS04IDAgNCA0IDAgMCAxIDggMFptLTMuMjY4IDEyLjY4MS0uNzMyLjc4Ny0uNzMyLS43ODdjLTMuNTU3LTMuODI0LTUuODE3LTYuNDYyLTYuODEtNy45NkE4Ljc0NiA4Ljc0NiAwIDAgMSA3IDguODc1QzcgMy45NyAxMS4wMzMgMCAxNiAwczkgMy45NyA5IDguODc1YTguNzQ2IDguNzQ2IDAgMCAxLTEuNDU5IDQuODQ2Yy0uOTkyIDEuNDk4LTMuMjUyIDQuMTM2LTYuODA5IDcuOTZabTUuMTQyLTkuMDY0QTYuNzQ3IDYuNzQ3IDAgMCAwIDIzIDguODc1QzIzIDUuMDgxIDE5Ljg3IDIgMTYgMlM5IDUuMDgxIDkgOC44NzVjMCAxLjM0OS4zOTQgMi42MzYgMS4xMjYgMy43NDIuODQ2IDEuMjc3IDIuODEyIDMuNTkzIDUuODc0IDYuOTEyIDMuMDYyLTMuMzIgNS4wMjgtNS42MzUgNS44NzQtNi45MTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBHaXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwR3JhcGggPSBmdW5jdGlvbiBFdWlJY29uQXBwR3JhcGgoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNCAyMGE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDh6bTAtNmEyIDIgMCAxIDAgMCA0IDIgMiAwIDAgMCAwLTR6bS04LjItNS42MkE0IDQgMCAxIDEgMTggMS4wNmE0IDQgMCAwIDEtMi4yIDcuMzJ6bTAtNmEyIDIgMCAxIDAgLjAxIDBoLS4wMXptLjAxIDI5LjI0YTQgNCAwIDEgMS0uMDgzLTggNCA0IDAgMCAxIC4wODMgOHptMC02YTIgMiAwIDEgMCAuMzkgMCAyIDIgMCAwIDAtLjQgMGguMDF6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDE3di0yaC02LjE0YTQgNCAwIDAgMC0uODYtMS42NGwyLjMxLTMuNDQtMS42OC0xLjEyLTIuMzEgMy40NEE0IDQgMCAwIDAgOCAxMmE0IDQgMCAxIDAgMCA4IDQgNCAwIDAgMCAxLjMyLS4yNGwyLjMxIDMuNDQgMS42Ni0xLjEyTDExIDE4LjY0YTQgNCAwIDAgMCAuODYtMS42NEgxOFpNNiAxNmEyIDIgMCAxIDEgNCAwIDIgMiAwIDAgMS00IDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBHcmFwaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBHcm9rID0gZnVuY3Rpb24gRXVpSWNvbkFwcEdyb2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjcyNyAyLjkxVi45N2MtMS4zNTcgMC00LjE4IDAtNS44MTggMS45NC0uOTcgMS4xODItMS4zMjggMi45MDgtLjk3IDQuOTgzLjU2MyAzLjMwNy45NyA2LjMzMi4zMDEgNy4xNTctLjMuMzEtLjk3LjQ2NS0yLjI0LjQ2NXYxLjk0YzEuMjcgMCAxLjk0LjE1NSAyLjI1LjQ5NC42OTguODI0LjI2MiAzLjg3OS0uMyA3LjE1Ni0uMzUgMi4xMjQtLjAxIDMuODAyLjk2IDQuOTU2QzUuNTI3IDMyIDguMzUgMzIgOS43MjYgMzJ2LTEuOTRjLTEuMTQ0IDAtMy4yODcgMC00LjMxNS0xLjIyMWE0LjExMiA0LjExMiAwIDAgMS0uNTMzLTMuNDE0Yy44NDMtNS4wNDIuOTctNy4zNy0uMTM2LTguNzI3LS4wNjgtLjA3Ny0uMTQ1LS4xMzYtLjIxMy0uMjAzLS4wNjgtLjA2OC4xNDUtLjEyNy4yMTMtLjIwNCAxLjE0NC0xLjM2Ny45Ny0zLjY5NS4xMzYtOC43MjdhNC4xMTIgNC4xMTIgMCAwIDEgLjU0My0zLjQxNEM2LjQ0IDIuOTEgOC41ODMgMi45MSA5LjcyNyAyLjkxek0zMi4wMyAxNy40NTR2LTEuOTRjLTEuMjcgMC0xLjk0LS4xNTUtMi4yNS0uNDk0LS42OTgtLjgyNS0uMjYxLTMuODguMzAxLTcuMTU3LjM1LTIuMTIzIDAtMy44MDEtLjk3LTQuOTg0QzI3LjQ5My45NCAyNC42NzIuOTQgMjMuMjk0Ljk0djEuOTdjMS4xNDUgMCAzLjI4OCAwIDQuMzE1IDEuMjJhNC4xMTIgNC4xMTIgMCAwIDEgLjU0NCAzLjQxNGMtLjg0NCA1LjA0My0uOTcgNy4zNy4xMzUgOC43MjguMDY4LjA3Ny4xNDYuMTM1LjIxNC4yMDMuMDY3LjA2OC0uMTQ2LjEyNi0uMjE0LjIwNC0xLjE0NCAxLjM2Ny0uOTcgMy42OTQtLjEzNSA4LjcyNy4zMjkgMS4xNjIuMTMgMi40MS0uNTQ0IDMuNDEzLTEuMDE4IDEuMjQyLTMuMTYgMS4yNDItNC4zMDUgMS4yNDJWMzJjMS4zNTggMCA0LjE4IDAgNS44MTgtMS45NC45Ny0xLjE4MiAxLjMyOS0yLjkwOC45Ny00Ljk4NC0uNTYzLTMuMzA2LS45Ny02LjMzMi0uMy03LjE1Ni4zLS4zMS45NjktLjQ2NSAyLjI0LS40NjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNi4yMTIgMTUuNTE1aC0yLjAwN2E3Ljc1OCA3Ljc1OCAwIDAgMC02LjcyLTYuNzJWNi43ODhoLTEuOTR2Mi4wMDdhNy43NTggNy43NTggMCAwIDAtNi43MiA2LjcySDYuODE4djEuOTRoMi4wMDdhNy43NTggNy43NTggMCAwIDAgNi43MiA2LjcydjIuMDA3aDEuOTR2LTIuMDA3YTcuNzU4IDcuNzU4IDAgMCAwIDYuNzItNi43MmgyLjAwN3YtMS45NFptLTguNzI3IDYuN3YtMS44NTFoLTEuOTR2MS44NTJhNS44MTggNS44MTggMCAwIDEtNC43Ni00Ljc2MWgxLjg1MXYtMS45NGgtMS44NTJhNS44MTggNS44MTggMCAwIDEgNC43NjEtNC43NjF2MS44NTJoMS45NHYtMS44NTJhNS44MTggNS44MTggMCAwIDEgNC43NjEgNC43NjFoLTEuODUydjEuOTRoMS44NTJhNS44MTggNS44MTggMCAwIDEtNC43NjEgNC43NlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwR3JvazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBIZWFydGJlYXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwSGVhcnRiZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4xNCAxNS4zOWE4LjA1OCA4LjA1OCAwIDAgMS0yLjItNC4wNDNBNi43ODggNi43ODggMCAwIDEgNC4xOTggNS40N2E2LjczIDYuNzMgMCAwIDEgOC43MjctLjIxM2wxLjI2LTEuNDY0YTguNjUgOC42NSAwIDAgMC0xMS4yNzcuMjMyQTguNzI3IDguNzI3IDAgMCAwIC4wNjggMTEuNmExMC4xNzIgMTAuMTcyIDAgMCAwIDIuNzkzIDUuMjc1bDEuMjgtMS40ODRaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjUxNSAzMS4yNzQgNC41NDggMTguNDU0IDE1Ljg1NSA0Ljc2M2E4LjY3IDguNjcgMCAwIDEgMTIuMjY2LS43NDYgOC43MjcgOC43MjcgMCAwIDEgMi45MSA3LjIwNWMtLjI0MyAyLjY5NS0yLjAzNyA0LjczMi0zLjQ4MiA2LjM3TDE1LjUxNSAzMS4yNzVabS04LjQyNy0xMi44MiA4LjQyNyA5Ljg2MiAxMC41NS0xMS45OTVjMS4zMi0xLjUwMyAyLjgyMi0zLjIxIDMuMDA3LTUuMjY1YTYuNzg4IDYuNzg4IDAgMCAwLTIuMjQtNS41ODYgNi43MyA2LjczIDAgMCAwLTkuNTA0LjU2M0w3LjA4OCAxOC40NTVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBIZWFydGJlYXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEluZGV4TWFuYWdlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3IDE4di0yaC0ydjJIM3Y2aDJ2LTRoMTB2NGgydi00aDEwdjRoMnYtNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMzJhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2em0wLTRhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yem0xMiA0YTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNnptMC00YTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMnptMTIgNGEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZ6bTAtNGExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJ6TTIzIDhWNmgtMi4xYTUgNSAwIDAgMC0uNzMtMS43NWwxLjQ5LTEuNDktMS40Mi0xLjQyLTEuNDkgMS40OUE1IDUgMCAwIDAgMTcgMi4xVjBoLTJ2Mi4xYTUgNSAwIDAgMC0xLjc1LjczbC0xLjQ5LTEuNDktMS40MiAxLjQyIDEuNDkgMS40OUE1IDUgMCAwIDAgMTEuMSA2SDl2MmgyLjFhNSA1IDAgMCAwIC43MyAxLjc1bC0xLjQ5IDEuNDkgMS40MSAxLjQxIDEuNDktMS40OWE1IDUgMCAwIDAgMS43Ni43NFYxNGgydi0yLjFhNSA1IDAgMCAwIDEuNzUtLjczbDEuNDkgMS40OSAxLjQxLTEuNDEtMS40OC0xLjVBNSA1IDAgMCAwIDIwLjkgOEgyM3ptLTcgMmEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZ6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDhhMSAxIDAgMCAxLTEtMSAxLjM5IDEuMzkgMCAwIDEgMC0uMi42NS42NSAwIDAgMSAuMDYtLjE4Ljc0Ljc0IDAgMCAxIC4wOS0uMTggMS42MSAxLjYxIDAgMCAxIC4xMi0uMTUuOTMuOTMgMCAwIDEgLjMzLS4yMSAxIDEgMCAwIDEgMS4wOS4yMWwuMTIuMTVhLjc4Ljc4IDAgMCAxIC4wOS4xOC42Mi42MiAwIDAgMSAuMS4xOCAxLjI3IDEuMjcgMCAwIDEgMCAuMiAxIDEgMCAwIDEtMSAxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEluZGV4UGF0dGVybiA9IGZ1bmN0aW9uIEV1aUljb25BcHBJbmRleFBhdHRlcm4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAxNGgtOGEzIDMgMCAwIDEtMy0zVjNhMyAzIDAgMCAxIDMtM2g4YTMgMyAwIDAgMSAzIDN2OGEzIDMgMCAwIDEtMyAzWk0xMiAyYTEgMSAwIDAgMC0xIDF2OGExIDEgMCAwIDAgMSAxaDhhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFoLThaTTE3IDE4di0yaC0ydjJIM3Y2aDJ2LTRoMTB2NGgydi00aDEwdjRoMnYtNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMzJhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2em0wLTRhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yem0xMiA0YTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNnptMC00YTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMnptMTIgNGEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZ6bTAtNGExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJ6TTEzIDRoNnYyaC02ek0xMyA4aDZ2MmgtNnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSW5kZXhQYXR0ZXJuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEluZGV4Um9sbHVwID0gZnVuY3Rpb24gRXVpSWNvbkFwcEluZGV4Um9sbHVwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzIgMjZ2LTJoLTIuMWE1IDUgMCAwIDAtLjczLTEuNzVsMS40OS0xLjQ5LTEuNDEtMS40MS0xLjQ5IDEuNDlBNSA1IDAgMCAwIDI2IDIwLjFWMThoLTJ2Mi4xYTUgNSAwIDAgMC0xLjc1LjczbC0xLjQ5LTEuNDktMS40MSAxLjQxIDEuNDkgMS40OUE1IDUgMCAwIDAgMjAuMSAyNEgxOHYyaDIuMWE1IDUgMCAwIDAgLjczIDEuNzVsLTEuNDkgMS40OSAxLjQxIDEuNDEgMS40OS0xLjQ5YTUgNSAwIDAgMCAxLjc2Ljc0VjMyaDJ2LTIuMWE1IDUgMCAwIDAgMS43NS0uNzNsMS40OSAxLjQ5IDEuNDEtMS40MS0xLjQ5LTEuNDlBNSA1IDAgMCAwIDI5LjkgMjZIMzJabS03IDJhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjUuNzEgMjQuMjlhMSAxIDAgMCAwLTEuMDktLjIxIDEuMTUgMS4xNSAwIDAgMC0uMzMuMjEuOTMuOTMgMCAwIDAtLjIxLjMzIDEgMSAwIDAgMCAxLjMgMS4zIDEuMTUgMS4xNSAwIDAgMCAuMzMtLjIxIDEgMSAwIDAgMCAuMjEtMS4wOS45NC45NCAwIDAgMC0uMjEtLjMzWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA2aDE2djJINXpNNSAxMmgxNnYySDV6TTUgMThoMTB2Mkg1ek01IDI0aDh2Mkg1elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkgzYTMgMyAwIDAgMS0zLTNWM2EzIDMgMCAwIDEgMy0zaDIwYTMgMyAwIDAgMSAzIDN2MTNoLTJWM2ExIDEgMCAwIDAtMS0xSDNhMSAxIDAgMCAwLTEgMXYyNmExIDEgMCAwIDAgMSAxaDEzdjJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBJbmRleFJvbGx1cDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBMZW5zID0gZnVuY3Rpb24gRXVpSWNvbkFwcExlbnMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0yMy43OTMgMTQuMjkzIDEuNDE0IDEuNDE0LTYuNDA4IDYuNDA5LTMuNzUtMy4yNS00LjM0MiA0LjM0MS0xLjQxNC0xLjQxNCA1LjY1OC01LjY1OSAzLjc1IDMuMjUgNS4wOTItNS4wOTFaTTEyIDExdjVsLTIgMnYtN2gyWm0xMC02djhsLTIgMlY1aDJabS01IDN2N2wtMi0yVjhoMlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgMGM4LjI4NCAwIDE1IDYuNzE2IDE1IDE1IDAgOC4yODQtNi43MTYgMTUtMTUgMTUtMy43ODIgMC03LjIzOC0xLjQtOS44NzYtMy43MWwtNS40MTcgNS40MTctMS40MTQtMS40MTQgNS40MTctNS40MTdBMTQuOTQzIDE0Ljk0MyAwIDAgMSAyIDE1YzAtMS4wNS4xMDgtMi4wNzQuMzEzLTMuMDYybDEuOTA2LjY3MkM0LjA3NSAxMy4zODUgNCAxNC4xODQgNCAxNWMwIDcuMTggNS44MiAxMyAxMyAxM3MxMy01LjgyIDEzLTEzUzI0LjE4IDIgMTcgMmMtMS4wMDIgMC0xLjk3OC4xMTMtMi45MTUuMzI4bC0uNzUtMS44NzdBMTUuMDMxIDE1LjAzMSAwIDAgMSAxNyAwWk05LjYyMSAxLjkzN2wuNzUgMS44NzdhMTMuMDYyIDEzLjA2MiAwIDAgMC00LjgyIDUuMDI0bC0xLjkwNy0uNjczYTE1LjA2OCAxNS4wNjggMCAwIDEgNS45NzctNi4yMjhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBMZW5zOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcExvZ3MgPSBmdW5jdGlvbiBFdWlJY29uQXBwTG9ncyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEgOGMzLjk4MyAwIDcuNzMyIDEuMDEzIDExLjAwMSAyLjc5N3YyLjMxMkEyMC44ODcgMjAuODg3IDAgMCAwIDIgMTAuMDIzdjExLjAyNWM0Ljg1LjQ2MiA5LjI3IDQuMTgzIDkuOTU1IDguNjkxbC4wMzUuMjYxSDEydjJoLTEuOTM4bC0uMDE4LTEuMjM2Yy0uMTE2LTQuMDE1LTQuMzM2LTcuNjMxLTguNzkzLTcuNzZMMCAyMi45ODZWOGgxem0xMy04aDFjOS4yOCAwIDE2LjgyNSA3LjQzNyAxNi45OTcgMTYuNjc3TDMyIDE3djE1aC0yVjE3YzAtNy44NC02LjAxNC0xNC4yNzQtMTMuNjgtMTQuOTQzTDE2IDIuMDMzdjcuNjgxbC0yLTEuMTQzVjBoMS0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjYuOTk3IDMwLjYzNiAyNy4wMDkgMzJIMTRWMTEuMzA1bDEuNDgzLjgyYzYuOTk0IDMuODYxIDExLjM4MiAxMC43MzUgMTEuNTE0IDE4LjUxem0tMi4wNDgtMS4wNEMyNC41MDUgMjMuNTU2IDIxLjIwNSAxOC4yIDE2IDE0Ljc3MVYzMGg4Ljk3NGwtLjAyNS0uNDA0elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBMb2dzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcE1hbmFnZW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwTWFuYWdlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDIxYTUgNSAwIDEgMSAwLTEwIDUgNSAwIDAgMSAwIDEwWm0wLThhMyAzIDAgMSAwIDAgNiAzIDMgMCAwIDAgMC02WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAzMmgtOHYtNC4wNmExIDEgMCAwIDAtMS42MS0uNjdsLTIuODggMi44Ny01LjY1LTUuNjUgMi44Ny0yLjg3YS45Mi45MiAwIDAgMCAuMi0xIC45My45MyAwIDAgMC0uODYtLjZIMFYxMmg0LjA2YS45Mi45MiAwIDAgMCAuODUtLjU4Ljk0Ljk0IDAgMCAwLS4xOS0xTDEuODYgNy41MWw1LjY1LTUuNjUgMi44NyAyLjg3QTEgMSAwIDAgMCAxMiA0LjA2VjBoOHY0LjA2YTEgMSAwIDAgMCAxLjYxLjY3bDIuODctMi44NyA1LjY2IDUuNjYtMi44NyAyLjg3YS45Mi45MiAwIDAgMC0uMiAxIC45My45MyAwIDAgMCAuODYuNkgzMnY4aC00LjA2YS45Mi45MiAwIDAgMC0uODUuNTguOTQuOTQgMCAwIDAgLjE5IDFsMi44NyAyLjg3LTUuNjYgNS42Ni0yLjg3LTIuODdhMSAxIDAgMCAwLTEuNjEuNjdMMjAgMzJabS02LTJoNHYtMi4wNmEzIDMgMCAwIDEgNS0yLjA4bDEuNDYgMS40NiAyLjgzLTIuODNMMjUuODYgMjNhMyAzIDAgMCAxIDIuMDgtNUgzMHYtNGgtMi4wNmEzIDMgMCAwIDEtMi4wOC01bDEuNDYtMS40Ni0yLjgzLTIuODVMMjMgNi4xNGEzIDMgMCAwIDEtNS0yLjA4VjJoLTR2Mi4wNmEzIDMgMCAwIDEtNSAyLjA4TDcuNTEgNC42OSA0LjY5IDcuNTEgNi4xNCA5YTMgMyAwIDAgMS0yLjA4IDVIMnY0aDIuMDZhMyAzIDAgMCAxIDIuMDggNWwtMS40NSAxLjQ5IDIuODMgMi44M0w5IDI1Ljg2YTMgMyAwIDAgMSA1IDIuMDhWMzBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNYW5hZ2VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcE1ldHJpY2JlYXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwTWV0cmljYmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMyQzcuMTYzIDMyIDAgMjQuODM3IDAgMTZTNy4xNjMgMCAxNiAwczE2IDcuMTYzIDE2IDE2YTE2IDE2IDAgMCAxLTE2IDE2Wm0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMCAwIDE2IDJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOCAxNmgtMmMwLTUuNTIzLTQuNDc3LTEwLTEwLTEwUzYgMTAuNDc3IDYgMTZINEM0IDkuMzczIDkuMzczIDQgMTYgNHMxMiA1LjM3MyAxMiAxMlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuNzEgMTEuNzEgMjAuMyAxMC4zIDE4IDEyLjU3YTQgNCAwIDAgMC0yLS41NyA0IDQgMCAxIDAgNCA0IDQgNCAwIDAgMC0uNTctMmwyLjI4LTIuMjlaTTE2IDE4YTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1ldHJpY2JlYXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwTWV0cmljcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBNZXRyaWNzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAgMTkuMDkydjEyLjg4SDJ2LTUuMzg2bDYuNzQ3LTYuNzQ3LjcwOC43MDhjLjIzNi4yMzYuNDguNDYzLjczMy42OEw0IDI3LjQxNHYyLjU1OGgyNHYtOC45MWMuMTg2LS4xNjYuMzY5LS4zMzkuNTQ2LS41MTZMMzAgMTkuMDkyem0tMjAuODUtMy4xOUExMC45NTUgMTAuOTU1IDAgMCAxIDggMTFDOCA0LjkyNSAxMi45MjUgMCAxOSAwczExIDQuOTI1IDExIDExYzAgMS43Ni0uNDE0IDMuNDI1LTEuMTUgNC45bC0xLjUxLTEuNTFBOC45NzMgOC45NzMgMCAwIDAgMjggMTFhOSA5IDAgMSAwLTE3LjM0IDMuMzkxbC0xLjUxIDEuNTF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOSAyMGE4Ljk2IDguOTYgMCAwIDAgNS42MTgtMS45NjhsLTQuMjAyLTQuMjA0YTIgMiAwIDAgMC0yLjgyOCAwbC00LjIwNSA0LjIwNUE4Ljk2IDguOTYgMCAwIDAgMTkgMjB6bS0yLjgyNi03LjU4NmE0IDQgMCAwIDEgNS42NTYgMGw1LjY1NiA1LjY1Ny0uNzA3LjcwN0ExMC45NjcgMTAuOTY3IDAgMCAxIDE5IDIyYTEwLjk2NyAxMC45NjcgMCAwIDEtNy43NzgtMy4yMjFsLS43MDctLjcwNyA1LjY1OS01LjY1OHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTWV0cmljczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBNbCA9IGZ1bmN0aW9uIEV1aUljb25BcHBNbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDE4di41NmExIDEgMCAwIDEtLjY4Ljk1TDMgMjEuNjFWMTBhMSAxIDAgMCAxIC40LS44bDMuMi0yLjQtMS4yLTEuNi0zLjIgMi40QTMgMyAwIDAgMCAxIDEwdjEyYTMgMyAwIDAgMCAxLjIgMi40bDMuMiAyLjQgMS4yLTEuNi0yLjQ3LTEuODUgNS44Mi0xLjk1QTMgMyAwIDAgMCAxMiAxOC41NlYxOGgtMnpNMjkuOCA3LjZsLTMuMi0yLjQtMS4yIDEuNiAzLjIgMi40YTEgMSAwIDAgMSAuNC44djExLjYxbC02LjMyLTIuMTFhMSAxIDAgMCAxLS42OC0uOTVWMThoLTJ2LjU2YTMgMyAwIDAgMCAyLjA1IDIuODVsNS44MiAxLjk0LTIuNDcgMS44NSAxLjIgMS42IDMuMi0yLjRBMyAzIDAgMCAwIDMxIDIyVjEwYTMgMyAwIDAgMC0xLjItMi40elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSA2QTMgMyAwIDAgMSA4Ljg4Ljg4YTMuMDcgMy4wNyAwIDAgMSA0LjI0IDBBMyAzIDAgMCAxIDExIDZ6bTAtNGExIDEgMCAxIDAtLjAxMiAyQTEgMSAwIDAgMCAxMSAyem0wIDMwYTMgMyAwIDAgMS0yLjEyLTUuMTIgMy4wNyAzLjA3IDAgMCAxIDQuMjQgMEEzIDMgMCAwIDEgMTEgMzJ6bTAtNGExIDEgMCAxIDAtLjAxMiAyQTEgMSAwIDAgMCAxMSAyOHptMC0xMmEzIDMgMCAwIDEtMi4xMi01LjEyIDMuMDcgMy4wNyAwIDAgMSA0LjI0IDBBMyAzIDAgMCAxIDExIDE2em0wLTRhMSAxIDAgMSAwLS4wMTIgMkExIDEgMCAwIDAgMTEgMTJ6bTEwLTZBMyAzIDAgMCAxIDE4Ljg4Ljg4YTMuMDcgMy4wNyAwIDAgMSA0LjI0IDBBMyAzIDAgMCAxIDIxIDZ6bTAtNGExIDEgMCAxIDAtLjAxMiAyQTEgMSAwIDAgMCAyMSAyem0wIDMwYTMgMyAwIDAgMS0yLjEyLTUuMTIgMy4wNyAzLjA3IDAgMCAxIDQuMjQgMEEzIDMgMCAwIDEgMjEgMzJ6bTAtNGExIDEgMCAxIDAtLjAxMiAyQTEgMSAwIDAgMCAyMSAyOHptMC0xMmEzIDMgMCAwIDEtMi4xMi01LjEyIDMuMDcgMy4wNyAwIDAgMSA0LjI0IDBBMyAzIDAgMCAxIDIxIDE2em0wLTRhMSAxIDAgMSAwLS4wMTIgMkExIDEgMCAwIDAgMjEgMTJ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBNb25pdG9yaW5nID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1vbml0b3JpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjgxIDE1LjE5QTguOTQgOC45NCAwIDAgMSAxNS42MiAzLjg2bC4zOC40Mi4zOC0uNDJhOC45NCA4Ljk0IDAgMCAxIDE0LjI2IDEwLjY4bC0xLjctMS4wN2E2Ljk0IDYuOTQgMCAwIDAtMTEuMDctOC4yOEwxNiA3LjI5bC0xLjg3LTIuMUE2Ljk0IDYuOTQgMCAwIDAgMy40MSAxNGwtMS42IDEuMTlaTTE2IDMxLjE4bC03Ljc0LTguNTEgMS40OC0xLjM0TDE2IDI4LjIxbDYuMjYtNi44OCAxLjQ4IDEuMzR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xNi4xNiAyMy4yOS00LjEtNy4xN0wxMC42MiAxOUgwdi0yaDkuMzhsMi41Ni01LjEyIDMuOSA2LjgzIDQuMTMtMTAuMzJMMjMuNjYgMTdIMzJ2MmgtOS42NmwtMi4zMS01LjM5elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNb25pdG9yaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcE5vdGVib29rID0gZnVuY3Rpb24gRXVpSWNvbkFwcE5vdGVib29rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjUgMmgtNVYwaC0ydjJoLTNWMGgtMnYyaC0zVjBIOHYySDN2MjZoMjJWMlptLTIgMjRINVY0aDN2MmgyVjRoM3YyaDJWNGgzdjJoMlY0aDN2MjJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNyA3djIzSDh2MmgyMVY3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxMmgxMnYySDh6TTggMTdoMTJ2Mkg4elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBOb3RlYm9vazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBQYWNrZXRiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcFBhY2tldGJlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAyMGE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDhabTAtNmEyIDIgMCAxIDAgMCA0IDIgMiAwIDAgMCAwLTRaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNGE0IDQgMCAxIDAtNCA0IDQgNCAwIDAgMCAyLS41N2w1LjI3IDUuMjcgMS40MS0xLjQxTDcuNDMgNkE0IDQgMCAwIDAgOCA0ek00IDZhMiAyIDAgMSAxIDAtNCAyIDIgMCAwIDEgMCA0em0xNi43MSA2LjcxTDI2IDcuNDNBNCA0IDAgMCAwIDI4IDhhNCA0IDAgMSAwLTQtNCA0IDQgMCAwIDAgLjU3IDJsLTUuMjcgNS4yNyAxLjQxIDEuNDR6TTI4IDJhMiAyIDAgMSAxIDAgNCAyIDIgMCAwIDEgMC00ek0xMS4yOSAxOS4yOSA2IDI0LjU3QTQgNCAwIDAgMCA0IDI0YTQgNCAwIDEgMCA0IDQgNCA0IDAgMCAwLS41Ny0ybDUuMjctNS4yNy0xLjQxLTEuNDR6TTQgMzBhMiAyIDAgMSAxIDAtNCAyIDIgMCAwIDEgMCA0em0yNC02YTQgNCAwIDAgMC0yIC41N2wtNS4yNy01LjI3LTEuNDEgMS40MUwyNC41NyAyNmE0IDQgMCAwIDAtLjU3IDIgNCA0IDAgMSAwIDQtNHptMCA2YTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFBhY2tldGJlYXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwUGlwZWxpbmUgPSBmdW5jdGlvbiBFdWlJY29uQXBwUGlwZWxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSAxMmEzIDMgMCAwIDAtMyAzaC00YTMgMyAwIDAgMC0zLTNoLTZhMyAzIDAgMCAwLTMgM0g2YTMgMyAwIDAgMC0zLTNIMHYxNGgzYTMgMyAwIDAgMCAzLTNoNGEzIDMgMCAwIDAgMyAzaDZhMyAzIDAgMCAwIDMtM2g0YTMgMyAwIDAgMCAzIDNoM1YxMmgtM1pNMyAyNEgyVjE0aDFhMSAxIDAgMCAxIDEgMXY4YTEgMSAwIDAgMS0xIDFabTE3LTN2MmExIDEgMCAwIDEtMSAxaC02YTEgMSAwIDAgMS0xLTF2LTJINnYtNGg2di0yYTEgMSAwIDAgMSAxLTFoNmExIDEgMCAwIDEgMSAxdjJoNnY0aC02Wm0xMCAzaC0xYTEgMSAwIDAgMS0xLTF2LThhMSAxIDAgMCAxIDEtMWgxdjEwWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgNkgxMHYyaDV2MmgyVjhoNXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUGlwZWxpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQgPSBmdW5jdGlvbiBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAgMS0xNiAxNlptMC0zMEM4LjI2OCAyIDIgOC4yNjggMiAxNnM2LjI2OCAxNCAxNCAxNCAxNC02LjI2OCAxNC0xNEExNCAxNCAwIDAgMCAxNiAyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUgNGgydjkuMTdBMy4wMDkgMy4wMDkgMCAwIDEgMTguODMgMTVIMjZ2MmgtNy4xN0EzLjAwMSAzLjAwMSAwIDEgMSAxNSAxMy4xN1Y0Wm0xIDEzYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwUmVwb3J0aW5nID0gZnVuY3Rpb24gRXVpSWNvbkFwcFJlcG9ydGluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI1IDVoLS4xN3YySDI1YTEgMSAwIDAgMSAxIDF2MjBhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTFWOGExIDEgMCAwIDEgMS0xaC4xN1Y1SDdhMyAzIDAgMCAwLTMgM3YyMGEzIDMgMCAwIDAgMyAzaDE4YTMgMyAwIDAgMCAzLTNWOGEzIDMgMCAwIDAtMy0zWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMgM2gtM1YwaC04djNIOXY2aDE0VjNabS0yIDRIMTFWNWgzVjJoNHYzaDN2MlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDEzaDEydjJIMTB6TTEwIDE4aDEydjJIMTB6TTEwIDIzaDEydjJIMTB6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFJlcG9ydGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBTYXZlZE9iamVjdHMgPSBmdW5jdGlvbiBFdWlJY29uQXBwU2F2ZWRPYmplY3RzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuMzggNy4wMDEgMTcgOS42MTlWMGgtMnY5LjYxOWwtMy4zNy0yLjYxOC0xLjI1IDEuNTEzTDE2IDEyLjg3OGw1LjYzLTQuMzY0elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0yMS4wNi4xNjUtMS4xMSAxLjYxIDkuMjUgNS45ODNMMTYgMTYuMjkgMi44IDcuNzU4bDkuMjUtNS45ODMtMS4xLTEuNjFMMCA3LjIzNHYxMy42NTNsMTYgMTAuMzM3IDE2LTEwLjMzN1Y3LjIzNEwyMS4wNi4xNjRaTTIgOS41N2wxMyA4LjQwN3YxMC4yNzlMMiAxOS44NFY5LjU3Wm0xNSAxOC42NzZWMTcuOTc4bDEzLTguNDA3VjE5Ljg1bC0xMyA4LjM5N1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNhdmVkT2JqZWN0czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBTZWFyY2hQcm9maWxlciA9IGZ1bmN0aW9uIEV1aUljb25BcHBTZWFyY2hQcm9maWxlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjYzIDhoNy4zOHYyaC03LjM4elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDhoMy4xOXYySDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDE2aDcuMzh2Mkg3elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS44MSAxNkgxOXYyaC0zLjE5ek03IDEyaDl2Mkg3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgMEM1LjgyIDAgMCA1LjgyIDAgMTNzNS44MiAxMyAxMyAxMyAxMy01LjgyIDEzLTEzQTEzIDEzIDAgMCAwIDEzIDBabTAgMjRDNi45MjUgMjQgMiAxOS4wNzUgMiAxM1M2LjkyNSAyIDEzIDJzMTEgNC45MjUgMTEgMTEtNC45MjUgMTEtMTEgMTFaTTIyLjU4MSAyMy45OTNsMS40MTQtMS40MTQgNy43MDggNy43MDgtMS40MTQgMS40MTR6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBTZWFyY2hQcm9maWxlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBTZWN1cml0eSA9IGZ1bmN0aW9uIEV1aUljb25BcHBTZWN1cml0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTE0IDMyLS4zNi0uMTRBMjEuMDcgMjEuMDcgMCAwIDEgMCAxMi4wN1Y1LjQ0TDE0IC4wNmwxNCA1LjM4djYuNjNhMjEuMDcgMjEuMDcgMCAwIDEtMTMuNjQgMTkuNzhMMTQgMzJaTTIgNi44MnY1LjI1YTE5LjA4IDE5LjA4IDAgMCAwIDEyIDE3Ljc3IDE5LjA4IDE5LjA4IDAgMCAwIDEyLTE3Ljc3VjYuODJMMTQgMi4yIDIgNi44MlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTcuODNoMlYyM0g5ek0xMSAxMC4xOFY3SDl2My4xOGEzIDMgMCAxIDAgMiAwWk0xMCAxNGExIDEgMCAxIDEgMC0yIDEgMSAwIDAgMSAwIDJaTTE3IDdoMnY1LjE3aC0yek0yMSAxN2EzIDMgMCAxIDAtNCAyLjgyVjIzaDJ2LTMuMThBMyAzIDAgMCAwIDIxIDE3Wm0tMyAxYTEgMSAwIDEgMSAwLTIgMSAxIDAgMCAxIDAgMlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU2VjdXJpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwU2VjdXJpdHlBbmFseXRpY3MgPSBmdW5jdGlvbiBFdWlJY29uQXBwU2VjdXJpdHlBbmFseXRpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDEwaDR2Mkg1djcuOTI4YzAgMS4yOTkuODA4IDIuNzk1IDIuODggNC40OCAxLjgzIDEuNDg5IDQuNTI0IDMuMDIgOC4xMiA0LjU4NFYyNmgydjUuOTkybC0xLjM4LS41NjdjLTQuMzcyLTEuNzk3LTcuNzI0LTMuNjEzLTEwLTUuNDY1QzQuMzU4IDI0LjEyMiAzIDIyLjExNCAzIDE5LjkyOFYxMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTBoOXYxNGwtMS4yNzItLjQ1OGMtMS4zNjctLjQ5NC0zLjIzLTEuMzE0LTQuNzY4LTIuMzlDMTAuNDg0IDIwLjExOCA5IDE4LjYzNiA5IDE2Ljc2MVYxMHptMS44OTUgMS44NzZ2NC44ODdjMCAuODc3Ljc0NCAxLjg2NyAyLjE1OCAyLjg1Ni45MzcuNjU2IDIuMDM4IDEuMjE5IDMuMDUyIDEuNjU3di05LjRoLTUuMjF6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDFIOXY3aDJWMi45NjZoMTZWMTYuNzNjMCAuNTU4LS4yNDUgMS4xMjgtLjc1NiAxLjcyLS41MTUuNTk2LTEuMjU2IDEuMTU4LTIuMTIgMS42NjgtMS4zODEuODE4LTIuOTYxIDEuNDM0LTQuMTI0IDEuODE3VjI0YzEuMjYtLjM3OCAzLjMzNC0xLjEyIDUuMTU1LTIuMTk3Ljk2NS0uNTcgMS45MDUtMS4yNjEgMi42MTItMi4wOC43MTItLjgyMiAxLjIzMy0xLjgyNyAxLjIzMy0yLjk5MlYxelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU2VjdXJpdHlBbmFseXRpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwU3BhY2VzID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNwYWNlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNGg2djJINHpNMjIgNGg2djJoLTZ6TTQgMjJoNnYySDR6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMTRoMTRWMEgwdjE0ek0yIDJoMTB2MTBIMlYyem0xNi0ydjE0aDE0VjBIMTh6bTEyIDEySDIwVjJoMTB2MTB6TTAgMzJoMTRWMThIMHYxNHptMi0xMmgxMHYxMEgyVjIwem0xNiAxMmgxNFYxOEgxOHYxNHptMi0xMmgxMHYxMEgyMFYyMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDIyaDZ2MmgtNnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU3BhY2VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFNxbCA9IGZ1bmN0aW9uIEV1aUljb25BcHBTcWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCA2aDl2MmgtOXpNNSA2aDl2Mkg1ek01IDEyaDl2Mkg1ek0xOCAxMmg5djJoLTl6TTUgMThoOXYySDV6TTE4IDE4aDl2MmgtOXpNMTggMjRoOXYyaC05ek01IDI0aDl2Mkg1elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSAzMkgzYTMgMyAwIDAgMS0zLTNWM2EzIDMgMCAwIDEgMy0zaDI2YTMgMyAwIDAgMSAzIDN2MjZhMyAzIDAgMCAxLTMgM1pNMyAyYTEgMSAwIDAgMC0xIDF2MjZhMSAxIDAgMCAwIDEgMWgyNmExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMUgzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU3FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFRpbWVsaW9uID0gZnVuY3Rpb24gRXVpSWNvbkFwcFRpbWVsaW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA0djIwLjM0TDE2IDMybDEyLTcuNjRWNEg0Wm0yMiAydjRoLTRhMyAzIDAgMCAwLTMgM3Y1aC02di01YTMgMyAwIDAgMC0zLTNINlY2aDIwWm0tNy44NyAxNEwxNiAyMi41MiAxMy44NyAyMGg0LjI2Wk02IDEyaDRhMSAxIDAgMCAxIDEgMXY2LjdsMy42OSA0LjM3LTIuNTggMy4wNkw2IDIzLjI0VjEyWm03LjgxIDE2LjIyIDIuMTktMi42IDIuMTkgMi42TDE2IDI5LjYxbC0yLjE5LTEuMzlabTYuMDgtMS4wOS0yLjU4LTMuMDZMMjEgMTkuN1YxM2ExIDEgMCAwIDEgMS0xaDR2MTEuMjRsLTYuMTEgMy44OVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMGgyNHYySDR6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFRpbWVsaW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFVwZ3JhZGVBc3Npc3RhbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXBncmFkZUFzc2lzdGFudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDIxYTUgNSAwIDEgMSAwLTEwIDUgNSAwIDAgMSAwIDEwWm0wLThhMyAzIDAgMSAwIDAgNiAzIDMgMCAwIDAgMC02WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNy40MiAxOS42OWExMiAxMiAwIDAgMS0yMy4xMS0xbDIuMjctLjQ1LTQuMzItNC40N0wwIDE5LjU1bDIuMzktLjQ3YTE0IDE0IDAgMCAwIDI3IDEuMjNsLTEuOTctLjYyem0yLjIzLTYuNzdhMTQgMTQgMCAwIDAtMjctMS4yM2wxLjkuNjJhMTIgMTIgMCAwIDEgMjMuMTEgMWwtMi4yNy40NSA0LjMyIDQuNDZMMzIgMTIuNDVsLTIuMzUuNDd6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFVwdGltZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBVcHRpbWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjIxNiAxMi4zNzdBMTAuOTQ4IDEwLjk0OCAwIDAgMCAyLjE4MSAxN0guMTUzYTEyLjk0MSAxMi45NDEgMCAwIDEgMi42OTMtNi4xMThsMS4zNyAxLjQ5NVptMi45NDgtMi43MDMtMS4zNy0xLjQ5NUExMi45NCAxMi45NCAwIDAgMSAxMyA2djJjLTIuMTQ0IDAtNC4xNDQuNjEzLTUuODM2IDEuNjc0WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNiA0LjQxNFYxOWMwIDcuMTgtNS44MiAxMy0xMyAxM0M2LjUgMzIgMS4xMTUgMjcuMjMuMTUzIDIxSDIuMThjLjk0IDUuMTIgNS40MjcgOSAxMC44MTkgOSA2LjA3NSAwIDExLTQuOTI1IDExLTExVjQuNDE0bC00LjI5MyA0LjI5My0xLjQxNC0xLjQxNEwyNSAuNTg2bDYuNzA3IDYuNzA3LTEuNDE0IDEuNDE0TDI2IDQuNDE0Wm0tNy44MzYgOS45MDkgMS40NzIgMS4zNTQtNy41NzcgOC4yMzUtNC44MzUtNC40NDIgMS4zNTMtMS40NzMgMy4zNjQgMy4wOSA2LjIyMy02Ljc2NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFVwdGltZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBVc2Vyc1JvbGVzID0gZnVuY3Rpb24gRXVpSWNvbkFwcFVzZXJzUm9sZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOS4zMDcgMy4yMWEyLjkxIDIuOTEgMCAxIDAtLjIyMyAxLjk0IDExLjYzNiAxMS42MzYgMCAwIDEgOC4yMzIgNy4wNDlsMS43NzUtLjY5OGExMy41NzYgMTMuNTc2IDAgMCAwLTkuNzg0LTguMjkxem0tMi44MjIgMS42MzhhLjk3Ljk3IDAgMSAxIDAtMS45MzkuOTcuOTcgMCAwIDEgMCAxLjk0em0tNC4yNjcuODA1LS43MTctMS43NzRhMTMuNTc2IDEzLjU3NiAwIDAgMC04LjI5MSA5Ljc4NCAyLjkxIDIuOTEgMCAxIDAgMS45NC4yMjMgMTEuNjM2IDExLjYzNiAwIDAgMSA3LjA2OC04LjIzM3ptLTguMzQgMTEuODAyYS45Ny45NyAwIDEgMSAwLTEuOTQuOTcuOTcgMCAwIDEgMCAxLjk0em0xMi42MDcgOC43MjdhMi45MSAyLjkxIDAgMCAwLTIuNTk5IDEuNjIgMTEuNjM2IDExLjYzNiAwIDAgMS04LjIzMy03LjA1bC0xLjc3NC43MTdhMTMuNTc2IDEzLjU3NiAwIDAgMCA5LjgxMyA4LjI5MSAyLjkxIDIuOTEgMCAxIDAgMi43OTMtMy41Nzh6bTAgMy44NzlhLjk3Ljk3IDAgMSAxIDAtMS45NC45Ny45NyAwIDAgMSAwIDEuOTR6TTMyIDE2LjQ4NWEyLjkxIDIuOTEgMCAxIDAtNC4xOTkgMi41OTkgMTEuNjM2IDExLjYzNiAwIDAgMS03LjA1IDguMjMybC43MTggMS43NzVhMTMuNTc2IDEzLjU3NiAwIDAgMCA4LjI5MS05LjgxM0EyLjkxIDIuOTEgMCAwIDAgMzIgMTYuNDg1em0tMi45MS45N2EuOTcuOTcgMCAxIDEgMC0xLjk0Ljk3Ljk3IDAgMCAxIDAgMS45NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjE5IDE2LjM1YTMuODc5IDMuODc5IDAgMSAwLTUuNDIgMCA0Ljg0OCA0Ljg0OCAwIDAgMC0yLjEzNCA0LjAxNHYxLjkzOWg5LjY5N3YtMS45NGE0Ljg0OCA0Ljg0OCAwIDAgMC0yLjE0My00LjAxNFptLTQuNjQ1LTIuNzc0YTEuOTQgMS45NCAwIDEgMSAzLjg4IDAgMS45NCAxLjk0IDAgMCAxLTMuODggMFptLS45NyA2Ljc4OGEyLjkxIDIuOTEgMCAxIDEgNS44MTkgMGgtNS44MThaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFVzZXJzUm9sZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwVmlzdWFsaXplID0gZnVuY3Rpb24gRXVpSWNvbkFwcFZpc3VhbGl6ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMyIDMySDRhNCA0IDAgMCAxLTQtNFYwaDJ2MjhhMiAyIDAgMCAwIDIgMmgyOHYyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDIwaDJ2N0g2ek0xNiAxMmgydjE1aC0yek0yNiAxN2gydjEwaC0yelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcgNmEzIDMgMCAwIDAtMi4wOC44NEwyMCA0LjM2QTIuMiAyLjIgMCAwIDAgMjAgNGEzIDMgMCAwIDAtNiAwYy4wMDEuMzQxLjA2Mi42OC4xOCAxbC01LjYgNC40NkEzIDMgMCAwIDAgNyA5YTMgMyAwIDEgMCAzIDMgMi45MyAyLjkzIDAgMCAwLS4xOC0xbDUuNi00LjQ4QTMgMyAwIDAgMCAxNyA3YTMgMyAwIDAgMCAyLjA4LS44NGw1IDIuNDhBMi4yIDIuMiAwIDAgMCAyNCA5YTMgMyAwIDEgMCAzLTNaTTcgMTNhMSAxIDAgMSAxIDAtMiAxIDEgMCAwIDEgMCAyWm0xMC04YTEgMSAwIDEgMSAwLTIgMSAxIDAgMCAxIDAgMlptMTAgNWExIDEgMCAxIDEgMC0yIDEgMSAwIDAgMSAwIDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBWaXN1YWxpemU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjM5NCA2LjE5MiAxMS4wNS41MzYgMTYgNS40ODZsNC45NS00Ljk1IDUuNjU3IDUuNjU2TDE2IDE2LjggNS4zOTQgNi4xOTJabTIuODI4IDBMMTYgMTMuOTcxbDcuNzc4LTcuNzc5LTIuODI4LTIuODI4TDE2IDguMzE0bC00Ljk1LTQuOTUtMi44MjggMi44MjhaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMwLjk0MSA0LjY4NiAxOS42MjdBOC4wMDQgOC4wMDQgMCAwIDEgMy40NSA5LjkwNWE4LjAxMSA4LjAxMSAwIDAgMSAxLjIzNi0xLjU5MUwxNiAxOS41MzkgMjcuMzEzIDguMzE0bC4wNDUuMDQ1YTguMDAzIDguMDAzIDAgMCAxLS4wNDUgMTEuMjY4TDE2IDMwLjk0MlptMC0yLjgyOCA5Ljg5OS05LjlhNi4wMDIgNi4wMDIgMCAwIDAgMS4xNjktNi44MzhMMTYgMjIuMzU3IDQuOTMyIDExLjM3NUE2LjAwMyA2LjAwMyAwIDAgMCA2LjEgMTguMjEzbDkuOSA5LjlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBWdWxuZXJhYmlsaXR5TWFuYWdlbWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBXYXRjaGVzID0gZnVuY3Rpb24gRXVpSWNvbkFwcFdhdGNoZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm05Ljc0IDcuNzMtMS41LTEuMzJhMTMgMTMgMCAwIDAgMCAxNy4xOWwxLjUtMS4zMmExMSAxMSAwIDAgMSAwLTE0LjU0di0uMDFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUxIDMuNjYgNSAyLjM0Yy02LjM3NyA3LjI0LTYuMzc3IDE4LjA5IDAgMjUuMzNsMS41LTEuMzJDLjc5MiAxOS44NjcuNzkyIDEwLjE1MyA2LjUgMy42N2wuMDEtLjAxem0xNy4yNSAyLjc1LTEuNSAxLjMyYTExIDExIDAgMCAxIDAgMTQuNTRsMS41IDEuMzJhMTMgMTMgMCAwIDAgMC0xNy4xOXYuMDF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0yNyAyLjM0LTEuNSAxLjMyYzUuNzA4IDYuNDgzIDUuNzA4IDE2LjE5NyAwIDIyLjY4bDEuNSAxLjMzYzYuMzc3LTcuMjQgNi4zNzctMTguMDkgMC0yNS4zM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDE1YTUgNSAwIDEgMC02IDQuOVYzMWgyVjE5LjlhNSA1IDAgMCAwIDQtNC45Wm0tNSAzYTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwV2F0Y2hlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBXb3JrcGxhY2VTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uQXBwV29ya3BsYWNlU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuODEgMUgydjMwaDUuODE1YzEuNzA1IDAgMy4zNDMtLjc4MyA0LjM4LTIuMDk0bDMuMTgyLTQuMDIzLjAwNi4wMDYgMi42MDctMy4xMzcuMDEtLjAxNGE5LjQyIDkuNDIgMCAwIDAgMS45NTMtNC44MjYgOS4xMTIgOS4xMTIgMCAwIDAtMS44OTEtNi41MjJsLS4wMS0uMDEyLTIuNjAzLTMuMTU2TDEyLjE5NyAzLjFDMTEuMTYgMS43ODYgOS41MiAxIDcuODEgMVptNi4xMTggNy41MjMtMy4zMS00LjE5NUM5Ljk2OCAzLjUxMiA4LjkxNyAzIDcuODEgM0g0djI2aDMuODE1YzEuMSAwIDIuMTUtLjUwOCAyLjgtMS4zMmwzLjMzLTQuMjEtMS43OTYtMS43Ny0uMDI3LS4wMzNjLTIuODQtMy4zMTctMi44My04LjE5NS4wMjgtMTEuMjg3bC4wMDQtLjAwNGE5OC44OTMgOTguODkzIDAgMCAxIDEuNzc0LTEuODUzWm00LjA0MyA4LjA5OWMtLjEyIDEuMjc5LS42MTYgMi41MzctMS40OSAzLjY0bC0xLjI4OCAxLjYzLTEuNTc4LTEuNTU2Yy0yLjE5LTIuNTktMi4xMTgtNi4zLjAwMS04LjU5Ni42LS42NCAxLjExOS0xLjE4MyAxLjU2MS0xLjYzNWwxLjI5MyAxLjYzOHYuMDAybC4wMTQuMDE2Yy45NDIgMS4xOTIgMS40NDYgMi41NjQgMS41MSAzLjk0OWE3LjA5IDcuMDkgMCAwIDEtLjAyMy45MTJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjMuODAxIDNjLS4zODIgMC0xLjA1Mi4yMzEtMS45MjUuODEyLS42MzYuNDIyLTEuMjI4LjkyOC0xLjY3NyAxLjM1N2wxLjc3MSAyLjI0NS4wMDUuMDA3LjAyNC4wMy4wMDguMDFjNC4wMDMgNS4wOTkgMy45OSAxMi4wNTctLjAzNSAxNy4xNDVsLTEuNzkzIDIuMjY3YTguMjA2IDguMjA2IDAgMCAwIDEuNzY5IDEuNDk4Yy42OTguNDI3IDEuMzM3LjYyOSAxLjg1Mi42MjlIMjhWM2gtNC4xOTlabS02LjE0OCAyMy44NDIuNzY1IDEuMDUzLjAyMy4wMjdjLjcxNy44NTEgMS41NjYgMS42MDcgMi40NjQgMi4xNTYuODkuNTQ0IDEuODkuOTIyIDIuODk1LjkyMkgzMFYxaC02LjE5OWMtLjk4NyAwLTIuMDY2LjUwNS0zLjAzMiAxLjE0NmExNC45MzQgMTQuOTM0IDAgMCAwLTIuMzUyIDEuOTc0bC0uMjc2LjI4OC0uNTk1LjYyOCAyLjg1NSAzLjYxOS4wMDYuMDA2YzMuNDU5IDQuMzc1IDMuNDU3IDEwLjMyOS0uMDA0IDE0LjcwNGwtMi43NSAzLjQ3N1pcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwV29ya3BsYWNlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcHMgPSBmdW5jdGlvbiBFdWlJY29uQXBwcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgNFYyaDJ2MkgyWm01IDBWMmgydjJIN1ptNSAwVjJoMnYyaC0yWk0yIDlWN2gydjJIMlptNSAwVjdoMnYySDdabTUgMFY3aDJ2MmgtMlpNMiAxNHYtMmgydjJIMlptNSAwdi0yaDJ2Mkg3Wm01IDB2LTJoMnYyaC0yWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcnJvd0VuZCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd0VuZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjg1NyAxNC4wNDNhLjc1Ljc1IDAgMCAxLS4wMjUtMS4wNmw0LjU5MS00LjgxYS4yNS4yNSAwIDAgMCAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwIDEgMS4wODUtMS4wMzVsNC41OSA0LjgxYTEuNzUgMS43NSAwIDAgMSAwIDIuNDE2bC00LjU5IDQuODFhLjc1Ljc1IDAgMCAxLTEuMDYuMDI0WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjUgMi43NWEuNzUuNzUgMCAwIDEgMS41IDB2MTAuNWEuNzUuNzUgMCAwIDEtMS41IDBWMi43NVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93RW5kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFycm93U3RhcnQgPSBmdW5jdGlvbiBFdWlJY29uQXJyb3dTdGFydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMi43NWEuNzUuNzUgMCAwIDEgMS41IDB2MTAuNWEuNzUuNzUgMCAwIDEtMS41IDBWMi43NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy4xMzUgMTQuMDQzYS43NS43NSAwIDAgMCAuMDI1LTEuMDZsLTQuNTktNC44MWEuMjUuMjUgMCAwIDEgMC0uMzQ2bDQuNTktNC44MWEuNzUuNzUgMCAwIDAtMS4wODUtMS4wMzVsLTQuNTkgNC44MWExLjc1IDEuNzUgMCAwIDAgMCAyLjQxNmw0LjU5IDQuODFjLjI4Ni4zLjc2LjMxIDEuMDYuMDI0WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93U3RhcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXJyb3dEb3duID0gZnVuY3Rpb24gRXVpSWNvbkFycm93RG93bihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xLjk1NyA0Ljk4MmEuNzUuNzUgMCAwIDEgMS4wNi0uMDI1bDQuODEgNC41OTFhLjI1LjI1IDAgMCAwIC4zNDYgMGw0LjgxLTQuNTlhLjc1Ljc1IDAgMCAxIDEuMDM1IDEuMDg1bC00LjgxIDQuNTlhMS43NSAxLjc1IDAgMCAxLTIuNDE2IDBsLTQuODEtNC41OWEuNzUuNzUgMCAwIDEtLjAyNS0xLjA2WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93RG93bjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcnJvd0xlZnQgPSBmdW5jdGlvbiBFdWlJY29uQXJyb3dMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjAxOCAxNC4wNDNhLjc1Ljc1IDAgMCAwIC4wMjQtMS4wNmwtNC41OS00LjgxYS4yNS4yNSAwIDAgMSAwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDEgMC0xLjA4NS0xLjAzNWwtNC41OSA0LjgxYTEuNzUgMS43NSAwIDAgMCAwIDIuNDE2bDQuNTkgNC44MWMuMjg2LjMuNzYxLjMxIDEuMDYuMDI0WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcnJvd1JpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkFycm93UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC45ODIgMTQuMDQzYS43NS43NSAwIDAgMS0uMDI1LTEuMDZsNC41OTEtNC44MWEuMjUuMjUgMCAwIDAgMC0uMzQ2bC00LjU5LTQuODFhLjc1Ljc1IDAgMCAxIDEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwIDEgMCAyLjQxNmwtNC41OSA0LjgxYS43NS43NSAwIDAgMS0xLjA2LjAyNFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd1JpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFycm93VXAgPSBmdW5jdGlvbiBFdWlJY29uQXJyb3dVcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xLjk1NyAxMS4wMThjLjI4Ni4zLjc2MS4zMSAxLjA2LjAyNGw0LjgxLTQuNTlhLjI1LjI1IDAgMCAxIC4zNDYgMGw0LjgxIDQuNTlhLjc1Ljc1IDAgMCAwIDEuMDM1LTEuMDg1bC00LjgxLTQuNTlhMS43NSAxLjc1IDAgMCAwLTIuNDE2IDBsLTQuODEgNC41OWEuNzUuNzUgMCAwIDAtLjAyNSAxLjA2WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93VXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXJ0aWNsZSA9IGZ1bmN0aW9uIEV1aUljb25BcnRpY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41IDEwYS41LjUgMCAwIDAgMCAxaDRhLjUuNSAwIDAgMCAwLTFoLTRaTTggNi41YS41LjUgMCAwIDEgLjUtLjVoNGEuNS41IDAgMCAxIDAgMWgtNGEuNS41IDAgMCAxLS41LS41Wk0zLjUgMmEuNS41IDAgMCAwIDAgMWg1YS41LjUgMCAwIDAgMC0xaC01Wk04IDguNWEuNS41IDAgMCAxIC41LS41aDRhLjUuNSAwIDAgMSAwIDFoLTRhLjUuNSAwIDAgMS0uNS0uNVpNMy41IDRhLjUuNSAwIDAgMCAwIDFoNWEuNS41IDAgMCAwIDAtMWgtNVpNMyAxMi41YS41LjUgMCAwIDEgLjUtLjVoOWEuNS41IDAgMCAxIDAgMWgtOWEuNS41IDAgMCAxLS41LS41Wk03IDZIM3Y1aDRWNlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS41MjYuMzEyQTEuMDAyIDEuMDAyIDAgMCAwIDEwLjggMEgyYTEgMSAwIDAgMC0xIDF2MTRhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xVjQuNDI5YzAtLjI1Ni0uMDk4LS41MDMtLjI3NC0uNjg5bC0zLjItMy40MjhaTTEwLjUgNUgxNHYxMEgyVjFoOHYzLjVhLjUuNSAwIDAgMCAuNS41WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFydGljbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXN0ZXJpc2sgPSBmdW5jdGlvbiBFdWlJY29uQXN0ZXJpc2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjkyOCA4LjQ2OCA0IDcuNjE4bC40NDYtMS40MjdMNy4zNzUgNy4yNSA3LjI4NyA0aDEuNDg0bC0uMDk3IDMuMjk2IDIuODgtMS4wMzlMMTIgNy42OTNsLTIuOTc3Ljg2IDEuOTIgMi41Nkw5Ljc0MSAxMiA3LjkzNyA5LjI4bC0xLjc0NSAyLjY1NC0xLjIxMy0uODZ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Bc3RlcmlzazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BdCA9IGZ1bmN0aW9uIEV1aUljb25BdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zIDhhNSA1IDAgMSAxIDkuODEyIDEuMzY0Ljc4Ljc4IDAgMCAxLS4zNDEuNDc2Yy0uMTYuMS0uMzgyLjE2LS42NTkuMTYtLjUwNyAwLS42NjgtLjE4LS43My0uMjc0YS41My41MyAwIDAgMS0uMDgyLS4yM1Y1aC0xdi43NjRhMyAzIDAgMSAwIC4xNDYgNC4zMzNjLjAyOC4wNTcuMDYuMTE3LjEuMTc3LjI2Ny40MDcuNzYxLjcyNiAxLjU2Ni43MjYuNDEyIDAgLjgzLS4wODggMS4xODktLjMxMS4zNjctLjIzLjY0LS41ODMuNzczLTEuMDUzYTYgNiAwIDEgMC0yLjUwMSAzLjM5M2wtLjU0Ni0uODM3QTUgNSAwIDAgMSAzIDhabTcgMGEyIDIgMCAxIDAtNCAwIDIgMiAwIDAgMCA0IDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25CZWFrZXIgPSBmdW5jdGlvbiBFdWlJY29uQmVha2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4yNzcgMTAuMDg4Yy4wMi4wMTQuMDQuMDMuMDU3LjA0Ny41ODIuNTUgMS4xMzQuODEyIDEuNjY2LjgxMi41ODYgMCAxLjg0LS4yOTMgMy43MTMtLjg4TDkgNi4yMTJWMkg3djQuMjEybC0xLjcyMyAzLjg3NlptLS40MzguOTg3TDMuNTM5IDE0aDguOTIybC0xLjMyLTIuOTY5QzkuMDk2IDExLjY3NyA3LjczMyAxMiA3IDEyYy0uNzQgMC0xLjQ2My0uMzE1LTIuMTYxLS45MjVaTTYgMkg1VjFoNnYxaC0xdjRsMy4zNzUgNy41OTRBMSAxIDAgMCAxIDEyLjQ2MSAxNUgzLjU0YTEgMSAwIDAgMS0uOTE0LTEuNDA2TDYgNlYyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQmVha2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJlbGwgPSBmdW5jdGlvbiBFdWlJY29uQmVsbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjMxNiAxMmgxMC4zNjhjLS4xODgtLjcwNC0uMjgtMS42OTEtLjM0OC0zLjAzNy0uMDctMS4zODItLjEwMy0xLjg4OC0uMTktMi42MTItLjAyOC0uMjM2LS4wNi0uNDYyLS4wOTYtLjY4LS4zMS0xLjg5Mi0xLjUwNi0yLjkyMy0zLjcwOC0zLjEzMWExIDEgMCAxIDAtMS42ODQgMGMtMi4yMDIuMjA4LTMuMzk3IDEuMjQtMy43MDggMy4xM2ExNi4wMSAxNi4wMSAwIDAgMC0uMDk2LjY4Yy0uMDg3LjcyNS0uMTIgMS4yMy0uMTkgMi42MTMtLjA2OCAxLjM0Ni0uMTYgMi4zMzMtLjM0OCAzLjAzN1ptMTAuODQzIDFIMS44NGMtLjMwOC4zNTMtLjczNy41LTEuMzQxLjVhLjUuNSAwIDEgMSAwLTFjLjc4NiAwIDEuMDI0LS43ODMgMS4xNjYtMy41ODcuMDctMS40MDcuMTA1LTEuOTI2LjE5Ni0yLjY4MS4wMy0uMjUuMDYzLS40OS4xMDItLjcyNC4zMzQtMi4wNDEgMS41NDYtMy4zMTMgMy41NTYtMy43OTJhMiAyIDAgMCAxIDMuOTYgMGMyLjAxLjQ3OSAzLjIyMiAxLjc1IDMuNTU3IDMuNzkyYTE3IDE3IDAgMCAxIC4xMDIuNzI0Yy4wOS43NTUuMTI1IDEuMjc0LjE5NiAyLjY4MS4xNCAyLjgwNC4zNzkgMy41ODcgMS4xNjUgMy41ODdhLjUuNSAwIDEgMSAwIDFjLS42MDQgMC0xLjAzMy0uMTQ3LTEuMzQxLS41Wk01LjUgMTRoNGEyIDIgMCAxIDEtNCAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQmVsbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25CZWxsU2xhc2ggPSBmdW5jdGlvbiBFdWlJY29uQmVsbFNsYXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOS41IDE0LS4wMDUuMTVhMiAyIDAgMCAxLTMuOTcyLjE1M2wtLjAxOC0uMTU0TDUuNSAxNGg0Wm01LjM4LTEyLjgyNWEuNS41IDAgMCAxIC4wMDguNjRsLS4wNjMuMDY1LTE0IDEyYS41LjUgMCAwIDEtLjcxMy0uNjk1bC4wNjMtLjA2NSAxNC0xMmEuNS41IDAgMCAxIC43MDUuMDU1Wk0xMy4wMzYgNS41MWwuMDU1LjM1My4wNDguMzY4Yy4wNjYuNTU0LjEwMy45OC4xNDUgMS43MjRsLjA4IDEuNDkxYy4xNDYgMi4zNzEuNDAyIDMuMDUzIDEuMTM2IDMuMDUzYS41LjUgMCAxIDEgMCAxYy0uNjAzIDAtMS4wMzEtLjE0Ni0xLjM0LS40OTlINC4xODVsMS4xODItMWg3LjMxN2MtLjE3Mi0uNjQ0LS4yNjQtMS41MjgtLjMzLTIuNzA4bC0uMDktMS42MzhjLS4wMzMtLjUxNC0uMDY2LS44Ny0uMTE4LTEuMzA0bC0uMDExLS4wNzcuOTAxLS43NjNaTTcuNSAwYTIgMiAwIDAgMSAxLjk4IDEuNzE3Yy40NzYuMTEzLjkwNy4yNyAxLjI5Mi40NzJsLS44MzguNzFhNS43MjggNS43MjggMCAwIDAtMS41OTEtLjM2IDEgMSAwIDEgMC0xLjY4NCAwQzQuNDU1IDIuNzUgMy4yNiAzLjc4IDIuOTUgNS42NzFsLS4wNS4zMzQtLjA0Ni4zNDdjLS4wOC42NzYtLjExNSAxLjE2MS0uMTc2IDIuMzQ3bC0uMDE0LjI2NS0uMDA1LjA5LTEuMDU4Ljg5N2MuMDE4LS4yMzQuMDM1LS40ODguMDUtLjc2M2wuMDc3LTEuNDI3Yy4wMzgtLjYyNi4wNzMtMS4wMjUuMTM0LTEuNTI4LjAzLS4yNS4wNjMtLjQ5LjEwMi0uNzI0LjMzNC0yLjA0IDEuNTQ2LTMuMzEzIDMuNTU1LTMuNzkybC4wMDQtLjAxOUEyIDIgMCAwIDEgNy41IDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CZWxsU2xhc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQmV0YSA9IGZ1bmN0aW9uIEV1aUljb25CZXRhKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA2LjM5NGgxLjAzYy43MiAwIDEuMjgzLjE1MyAxLjY4OC40NTlhMi4yIDIuMiAwIDAgMSAuODEzIDEuMTYzYy4xMzguNDcuMTY1Ljk1Mi4wODMgMS40NDctLjEuNTk3LS4zMyAxLjEzNS0uNjkgMS42MTZhMy45NSAzLjk1IDAgMCAxLTEuMzMzIDEuMTM3IDMuNjg5IDMuNjg5IDAgMCAxLTEuNzM1LjQxOGMtLjM4MSAwLS43NDctLjA3LTEuMDk3LS4yMTItLjM1LS4xNDQtLjYzNi0uNDE3LS44Ni0uODE4bC0uMDgyLjA0MS4zMy0yLjAxOGMtLjA1NS4zMzctLjAyNC42NDcuMDkyLjkzMi4xMi4yODUuMzIuNTEzLjU5OC42ODUuMjgxLjE3MS42MzQuMjU3IDEuMDYuMjU3YTIuNTQgMi41NCAwIDAgMCAyLjA3NS0xLjAzYy4yMjYtLjMwOC4zNjktLjY0NS40MjctMS4wMDhhMS45MjkgMS45MjkgMCAwIDAtLjA3Mi0uOTczIDEuNTI0IDEuNTI0IDAgMCAwLS41MzYtLjc1MmMtLjI1LS4xOTYtLjU3LS4yOTMtLjk1Ny0uMjkzSDcuODI1TDggNi4zOTVabTEuMzU5LTQuNTkxYy40OSAwIC45MTMuMDc5IDEuMjY2LjIzN2EyLjI1OCAyLjI1OCAwIDAgMSAxLjMwMyAxLjUyOGMuMDgyLjMzLjA5NC42NjguMDM2IDEuMDE0LS4wNjkuNDMzLS4yNS44NjQtLjU0IDEuMjkzLS4yOS40MjUtLjY4NC43OC0xLjE4NSAxLjA2NS0uNDk3LjI4Mi0xLjA5Ni40MjItMS43OTYuNDIyaC0uNTk3bC4xNzUtMS4wNWguNTc2YTIuMTgyIDIuMTgyIDAgMCAwIDEuODEyLS44OWMuMTkyLS4yNjUuMzEyLS41NDQuMzYtLjg0LjA4LS40NzMtLjAzNi0uODY2LS4zNDQtMS4xNzgtLjMxLS4zMTMtLjcyNi0uNDY5LTEuMjUxLS40NjktLjM1IDAtLjY4My4wNzItLjk5OS4yMTZhMi4yNTYgMi4yNTYgMCAwIDAtLjc5My42MDMgMS44NTIgMS44NTIgMCAwIDAtLjQxMi44OWwtMS43OCAxMC44MUgzLjk3M2wxLjc4Mi0xMC44MWEzLjE3IDMuMTcgMCAwIDEgLjY0OC0xLjQ1N2MuMzQtLjQyOS43NjUtLjc2NyAxLjI3Ny0xLjAxNGEzLjgyNyAzLjgyNyAwIDAgMSAxLjY3OC0uMzdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CZXRhOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJvbHQgPSBmdW5jdGlvbiBFdWlJY29uQm9sdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMDQgMTMuMjc0YS41LjUgMCAxIDAgLjg5Mi40NTNsMy4wMTQtNS45MzFhLjUuNSAwIDAgMC0uNDQ1LS43MjdINS4zMTZMOC4wMyAxLjcyN2EuNS41IDAgMSAwLS44OTItLjQ1M0w0LjA1NSA3LjM0M2EuNS41IDAgMCAwIC40NDYuNzI2aDUuMTg1TDcuMDQgMTMuMjc0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQm9sdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Cb3hlc0hvcml6b250YWwgPSBmdW5jdGlvbiBFdWlJY29uQm94ZXNIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCA2aDR2NEgwVjZabTEgMXYyaDJWN0gxWm01LTFoNHY0SDZWNlptMSAxdjJoMlY3SDdabTUtMWg0djRoLTRWNlptMSAzaDJWN2gtMnYyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQm94ZXNIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJveGVzVmVydGljYWwgPSBmdW5jdGlvbiBFdWlJY29uQm94ZXNWZXJ0aWNhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMXYyaDJWMUg3Wk02IDBoNHY0SDZWMFptMCA2aDR2NEg2VjZabTEgMXYyaDJWN0g3Wm0tMSA1aDR2NEg2di00Wm0xIDF2Mmgydi0ySDdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Cb3hlc1ZlcnRpY2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJyYW5jaCA9IGZ1bmN0aW9uIEV1aUljb25CcmFuY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEwLjAzOGEzLjQ5IDMuNDkgMCAwIDEgMi41LTEuMDVoMmEyLjUgMi41IDAgMCAwIDIuNDYyLTIuMDYxIDIgMiAwIDEgMSAxLjAwOC4wMTdBMy41IDMuNSAwIDAgMSA5LjUgOS45ODdoLTJhMi41IDIuNSAwIDAgMC0yLjQ2NiAyLjA4NUEyIDIgMCAxIDEgNCAxMi4wNjNWMy45MzdhMiAyIDAgMSAxIDEgMHY2LjFaTTQuNSAzYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptMCAxMmExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTgtOWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CcmFuY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQnJhbmNoVXNlciA9IGZ1bmN0aW9uIEV1aUljb25CcmFuY2hVc2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgNy45ODdhMy40OSAzLjQ5IDAgMCAwLTIuNSAxLjA1di00LjFhMiAyIDAgMSAwLTEgMHY2LjEyNmEyIDIgMCAxIDAgMS4wMzQuMDFBMi41IDIuNSAwIDAgMSA2IDguOTg2aDFhMy41IDMuNSAwIDAgMCAzLjQ3LTMuMDQzIDIgMiAwIDEgMC0xLjAwOS0uMDE3QTIuNSAyLjUgMCAwIDEgNyA3Ljk4N0g2ek00IDNhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwem0wIDEwYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMHptNy05YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMHpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy41IDEwLjVhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDB6TTkgMTVjLjI4NC0xLjIyMyAxLjUxOS0yLjE0MyAzLTIuMTQzczIuNzE2LjkyIDMgMi4xNDNIOXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJyYW5jaFVzZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQnJvb20gPSBmdW5jdGlvbiBFdWlJY29uQnJvb20oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0zLjczMiAxMy4wOTYtLjE5Ny0uMTk3IDIuODMtMi44MjguNzA2LjcwNy0yLjgyOSAyLjgyOC43MDguNzA4IDIuODI4LTIuODI4YTEgMSAwIDAgMCAwLTEuNDE0TDUuNjU4IDcuOTVhLjk5My45OTMgMCAwIDAtLjcwOC0uMjkzLjk5NC45OTQgMCAwIDAtLjcwOC4yOTNsLTIuODI4IDIuODI5LjcwNy43MDcgMi44MjktMi44My43MDcuNzA4LTIuODI5IDIuODI5LjkwNC45MDNabTEuMjE4LTYuNDRjLjUxMiAwIDEuMDIzLjE5NiAxLjQxNC41ODdsMi4xMjEgMi4xMmEyIDIgMCAwIDEgMCAyLjgzTDQuOTUgMTUuNzI4IDAgMTAuNzc4bDMuNTM1LTMuNTM1YTEuOTkzIDEuOTkzIDAgMCAxIDEuNDE1LS41ODZaTTE0LjAyIDFsLjcwOC43MDctNi45NSA2Ljk1LS43MDctLjcwN0wxNC4wMjEgMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJyb29tOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJydXNoID0gZnVuY3Rpb24gRXVpSWNvbkJydXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTkzIDguMTdjMCAuODMtLjY3MyAxLjUwNy0xLjQ5OSAxLjUwN0g1LjQ5OEExLjUwNSAxLjUwNSAwIDAgMSAzLjk5OSA4LjE3VjYuNjYyaDcuOTk0VjguMTdabS0yLjk5OCA1Ljk5OGMwIC40NTUtLjQ0OC44MjctLjk5OS44MjctLjU1IDAtMS0uMzcyLTEtLjgyN3YtMy40ODZoMnYzLjQ4NlpNNCA1LjY1OFYxLjAwNWgxLjI2MnY0LjY1M0g0Wm0yLjI2MSAwVjEuMDA1aDEuMjQ0djQuNjUzSDYuMjZabTIuMjQ0IDBWMS4wMDVoMS4yMzV2NC42NTNIOC41MDRabTIuMjM0IDBWMS4wMDVoMS4yNTR2NC42NTNoLTEuMjU0Wk0zLjAwOCAwIDMgOC4xN2EyLjUwOSAyLjUwOSAwIDAgMCAyLjQ5OCAyLjUxMmguNXYzLjQ4NmMwIDEuMDEuODk2IDEuODMyIDEuOTk4IDEuODMyIDEuMTAyIDAgMS45OTgtLjgyMiAxLjk5OC0xLjgzMnYtMy40ODZoLjVhMi41MDkgMi41MDkgMCAwIDAgMi40OTgtMi41MTJMMTMgMEgzLjAwOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJydXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJ1ZyA9IGZ1bmN0aW9uIEV1aUljb25CdWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xMC42NTEgNS4xMjYuOTIyLS40NTUuODg0LTIuMzQzYS41LjUgMCAwIDEgLjkzOS4zNDRMMTIuMzc0IDUuMzlsLTEuNDUuNzE3QTUuMyA1LjMgMCAwIDEgMTEgN2gxLjA0M2wyLjMgMi4xOThhLjUuNSAwIDAgMS0uNjkyLjcyM0wxMS42NDIgOGgtLjczN2MtLjA5LjQ2Ni0uMjQuODk5LS40NDEgMS4yODNsLjg5Mi40OSAxLjI3OCAzLjU1NGEuNS41IDAgMCAxLS45NC4zNDJsLTEuMTUtMy4yLS42NTUtLjM2QzkuMzczIDEwLjY2NSA4LjcxNiAxMSA4IDExcy0xLjM3NC0uMzM1LTEuODktLjg5M2wtLjY1OC4zNjEtMS4xNSAzLjIwMWEuNS41IDAgMSAxLS45NC0uMzQybDEuMjc5LTMuNTU0Ljg5NS0uNDkxQTQuNyA0LjcgMCAwIDEgNS4wOTUgOGgtLjc0bC0yLjAxIDEuOTJhLjUuNSAwIDAgMS0uNjktLjcyMkwzLjk1MiA3SDVhNS4zIDUuMyAwIDAgMSAuMDc1LS44OTJMMy42MjMgNS4zOSAyLjYgMi42NzJhLjUuNSAwIDEgMSAuOTM5LS4zNDRsLjg4NCAyLjM0My45MjQuNDU3Yy4xNy0uNDI4LjM5Ny0uODEuNjY4LTEuMTI4aC41N2ExLjUgMS41IDAgMSAxIDIuODMgMGguNTY4Yy4yNy4zMTguNDk3LjY5OS42NjcgMS4xMjZaTTggNGEuNS41IDAgMSAwIDAtMSAuNS41IDAgMCAwIDAgMVptMS43NTEgMS41NzFBMy4zMjYgMy4zMjYgMCAwIDAgOS40NzYgNUg2LjUyNGMtLjEwNy4xNzUtLjIuMzY3LS4yNzYuNTczLS4xMS4yOTUtLjE4Ni42MTgtLjIyMy45NTdhNC4zNTQgNC4zNTQgMCAwIDAgLjA5IDEuNDY1Yy4wNzEuMjk0LjE3Mi41NjUuMjk1LjgwNi4xNjguMzI4LjM4LjYwMS42MTYuODAzLjI5NS4yNTMuNjMxLjM5Ni45NzQuMzk2LjM0MiAwIC42NzgtLjE0Mi45NzMtLjM5NC4yMzctLjIwMy40NDgtLjQ3Ni42MTYtLjgwM2EzLjYyIDMuNjIgMCAwIDAgLjI5Ni0uODA3IDQuMjYzIDQuMjYzIDAgMCAwIC4wOS0xLjQ2NiAzLjk4OCAzLjk4OCAwIDAgMC0uMjI0LS45NTlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CdWc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQnVsbHNleWUgPSBmdW5jdGlvbiBFdWlJY29uQnVsbHNleWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE0QTYgNiAwIDEgMCA4IDJhNiA2IDAgMCAwIDAgMTJabTAgMUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0Wm0wLTNhNCA0IDAgMSAwIDAtOCA0IDQgMCAwIDAgMCA4Wm0wLTFhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2Wm0wLTJhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnVsbHNleWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2FsZW5kYXIgPSBmdW5jdGlvbiBFdWlJY29uQ2FsZW5kYXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQgNHYtLjk5NEMxNCAyLjQ1IDEzLjU1IDIgMTIuOTk0IDJIMTF2MWgtMVYySDZ2MUg1VjJIMy4wMDZDMi40NSAyIDIgMi40NSAyIDMuMDA2djkuOTg4QzIgMTMuNTUgMi40NSAxNCAzLjAwNiAxNGg5Ljk4OEMxMy41NSAxNCAxNCAxMy41NSAxNCAxMi45OTRWNUgyVjRoMTJ6bS0zLTNoMS45OTRDMTQuMTAyIDEgMTUgMS44OTcgMTUgMy4wMDZ2OS45ODhBMi4wMDUgMi4wMDUgMCAwIDEgMTIuOTk0IDE1SDMuMDA2QTIuMDA1IDIuMDA1IDAgMCAxIDEgMTIuOTk0VjMuMDA2QzEgMS44OTggMS44OTcgMSAzLjAwNiAxSDVWMGgxdjFoNFYwaDF2MXpNNCA3aDJ2MUg0Vjd6bTMgMGgydjFIN1Y3em0zIDBoMnYxaC0yVjd6TTQgOWgydjFINFY5em0zIDBoMnYxSDdWOXptMyAwaDJ2MWgtMlY5em0tNiAyaDJ2MUg0di0xem0zIDBoMnYxSDd2LTF6bTMgMGgydjFoLTJ2LTF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DYWxlbmRhcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DaGFuZ2VQb2ludERldGVjdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25DaGFuZ2VQb2ludERldGVjdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMTRoMTIuNWEuNS41IDAgMCAxIDAgMWgtMTNhLjUuNSAwIDAgMS0uNS0uNXYtMTNhLjUuNSAwIDAgMSAxIDBWMTRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNSA2LjVhLjUuNSAwIDAgMC0uNS0uNWgtNmEuNS41IDAgMCAwLS41LjVWMTJIMy41YS41LjUgMCAwIDAgMCAxaDVhLjUuNSAwIDAgMCAuNS0uNVY3aDUuNWEuNS41IDAgMCAwIC41LS41Wk03LjAyMyAzLjIwNkEuMzAxLjMwMSAwIDAgMSA3LjMgM2gyLjRjLjEyMSAwIC4yMy4wODEuMjc3LjIwNmEuMzYuMzYgMCAwIDEtLjA2NS4zNjNsLTEuMiAxLjMzM2EuMjguMjggMCAwIDEtLjQyNCAwbC0xLjItMS4zMzNhLjM2LjM2IDAgMCAxLS4wNjUtLjM2M1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoYW5nZVBvaW50RGV0ZWN0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNoZWNrID0gZnVuY3Rpb24gRXVpSWNvbkNoZWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNSAxMmEuNTAyLjUwMiAwIDAgMS0uMzU0LS4xNDZsLTQtNGEuNTAyLjUwMiAwIDAgMSAuNzA4LS43MDhMNi41IDEwLjc5M2w2LjY0Ni02LjY0N2EuNTAyLjUwMiAwIDAgMSAuNzA4LjcwOGwtNyA3QS41MDIuNTAyIDAgMCAxIDYuNSAxMlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2hlY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2hlY2tJbkNpcmNsZUZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25DaGVja0luQ2lyY2xlRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMTZBOCA4IDAgMSAxIDggMGE4IDggMCAwIDEgMCAxNlptMy42NS0xMC44NTdMNi45MSA5LjggNC4zNSA3LjI4NmEuNS41IDAgMCAwLS43LjcxNGwyLjkwOSAyLjg1N2EuNS41IDAgMCAwIC43IDBsNS4wOTEtNWEuNS41IDAgMSAwLS43LS43MTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DaGVja0luQ2lyY2xlRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNoZWVyID0gZnVuY3Rpb24gRXVpSWNvbkNoZWVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC45MzQgMy4wNjNhMS41IDEuNSAwIDAgMSAuNTQ3LjMyMWwuMTEyLjExNSA2LjA3IDYuOTE1YTEuNSAxLjUgMCAwIDEtLjY0NiAyLjQxbC0uMTQyLjA0LTkuMDMxIDIuMDk3QTEuNSAxLjUgMCAwIDEgLjAzNyAxMy4xOWwuMDQzLS4xNTlMMy4wNCA0LjAyYTEuNSAxLjUgMCAwIDEgMS44OTMtLjk1N1pNNC4wMjcgNC4yNWwtLjAzNi4wODMtMi45NjEgOS4wMTFhLjUuNSAwIDAgMCAuNDk4LjY1NmwuMDktLjAxMyAyLjkzNy0uNjgxLTEuMzk5LTEuNTA4YS41LjUgMCAwIDEgLjY2Ni0uNzRsLjA2Ny4wNiAxLjc4OCAxLjkyNyAyLjYzNC0uNjExLTMuMTk4LTMuNjAxYS41LjUgMCAwIDEgLjY4Mi0uNzI2bC4wNjYuMDYyIDMuNTU5IDQuMDA3IDEuMjI5LS4yODRhLjUuNSAwIDAgMCAuMTUtLjA2M2wuMDY3LS4wNDlhLjUuNSAwIDAgMCAuMDk5LS42MzJsLS4wNTMtLjA3My02LjA3LTYuOTE2YS41LjUgMCAwIDAtLjEzOC0uMTFsLS4wODItLjAzNS0uMDg4LS4wMmEuNS41IDAgMCAwLS41MDcuMjU2Wm0xMS42NiA1LjAzOWEyLjUgMi41IDAgMCAxLS45NzUgMy4zOTkuNS41IDAgMCAxLS40ODUtLjg3NSAxLjUgMS41IDAgMCAwLTEuNDU0LTIuNjI0LjUuNSAwIDAgMS0uNDg1LS44NzUgMi41IDIuNSAwIDAgMSAzLjM5OS45NzVabS01LjAzLTYuMjA2YS41LjUgMCAwIDEgLjMzOC41NDRsLS4wMi4wODgtLjY3NyAyLjAzNSAyLjA2OC0uNzIxYS41LjUgMCAwIDEgLjYuMjI1bC4wMzYuMDgyYS41LjUgMCAwIDEtLjIyNS42bC0uMDgyLjAzN0w5LjY3IDcuMDI4YS41LjUgMCAwIDEtLjY1OS0uNTVsLjAyLS4wOC45OTUtM2EuNS41IDAgMCAxIC42MzItLjMxNlpNMTQuNSA0YS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWk03Ljg2Mi40MDNhMi41IDIuNSAwIDAgMSAuNzM1IDMuNDU5LjUuNSAwIDAgMS0uODM5LS41NDUgMS41IDEuNSAwIDEgMC0yLjUxNi0xLjYzNC41LjUgMCAwIDEtLjgzOS0uNTQ1QTIuNSAyLjUgMCAwIDEgNy44NjIuNDAzWk0xMy41IDJhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabS0zLTFhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabTQtMWEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNsaWNrTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25DbGlja0xlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IC41YS41LjUgMCAwIDAtMSAwdjFhLjUuNSAwIDAgMCAxIDB2LTFabS0zLjE0Ni42NDZhLjUuNSAwIDEgMC0uNzA4LjcwOGwxIDFhLjUuNSAwIDEgMCAuNzA4LS43MDhsLTEtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMyA3QTUgNSAwIDAgMCAzIDd2NGE1IDUgMCAwIDAgMTAgMFY3Wm0tMSAwYTQgNCAwIDAgMC00LTR2NWExIDEgMCAwIDEtMSAxSDR2MmE0IDQgMCAwIDAgOCAwVjdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDQuNUEuNS41IDAgMCAxIC41IDRoMWEuNS41IDAgMCAxIDAgMWgtMWEuNS41IDAgMCAxLS41LS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xpY2tMZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNsaWNrUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uQ2xpY2tSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIC41YS41LjUgMCAwIDEgMSAwdjFhLjUuNSAwIDAgMS0xIDB2LTFabTMuMTQ2LjY0NmEuNS41IDAgMCAxIC43MDguNzA4bC0xIDFhLjUuNSAwIDAgMS0uNzA4LS43MDhsMS0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMgN2E1IDUgMCAwIDEgMTAgMHY0YTUgNSAwIDAgMS0xMCAwVjdabTEgMGE0IDQgMCAwIDEgNC00djVhMSAxIDAgMCAwIDEgMWgzdjJhNCA0IDAgMCAxLTggMFY3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgNC41YS41LjUgMCAwIDAtLjUtLjVoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIC41LS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xpY2tSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DbG9jayA9IGZ1bmN0aW9uIEV1aUljb25DbG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMTNBNS41MDYgNS41MDYgMCAwIDEgMiA3LjVDMiA0LjQ2NyA0LjQ2NyAyIDcuNSAyUzEzIDQuNDY3IDEzIDcuNSAxMC41MzMgMTMgNy41IDEzbTAtMTJhNi41IDYuNSAwIDEgMCAwIDEzIDYuNSA2LjUgMCAwIDAgMC0xM20zIDZIOFYzLjVhLjUuNSAwIDAgMC0xIDB2NGEuNS41IDAgMCAwIC41LjVoM2EuNS41IDAgMCAwIDAtMVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2xvY2tDb3VudGVyID0gZnVuY3Rpb24gRXVpSWNvbkNsb2NrQ291bnRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjM5IDMuNjFhNS41IDUuNSAwIDAgMC03Ljc4IDcuNzhsLjU2Mi41NnYtMS42MjJhLjUuNSAwIDAgMSAxIDB2Mi44MjlhLjUuNSAwIDAgMS0uNS41SDEuODQzYS41LjUgMCAwIDEgMC0xaDEuNjIxbC0uNTYtLjU2QTYuNSA2LjUgMCAxIDEgNy41IDE0YS41LjUgMCAwIDEgMC0xIDUuNSA1LjUgMCAwIDAgMy44OS05LjM5WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41IDNhLjUuNSAwIDAgMSAuNS41VjdoMi41YS41LjUgMCAwIDEgMCAxaC0zYS41LjUgMCAwIDEtLjUtLjV2LTRhLjUuNSAwIDAgMSAuNS0uNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNsb2NrQ291bnRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DbG91ZERyaXp6bGUgPSBmdW5jdGlvbiBFdWlJY29uQ2xvdWREcml6emxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4zNDggMy43NjFBMy45OTUgMy45OTUgMCAwIDEgOCA3YS41LjUgMCAwIDEtMSAwIDMgMyAwIDEgMC00Ljg3OCAyLjM0LjUuNSAwIDAgMS0uNjI3Ljc3OSA0IDQgMCAwIDEgMy45NzMtNi44NCA1LjUwMiA1LjUwMiAwIDAgMSAxMC4wOTYgNC4zNy41LjUgMCAxIDEtLjkyLS4zOSA0LjUgNC41IDAgMSAwLTguMjk2LTMuNDk3Wm0tMS42MSA0LjkzNWEuNS41IDAgMSAxIC43NzUuNjMzbC0xLjQ2NiAxLjc5MmEuNS41IDAgMSAxLS43NzQtLjYzM2wxLjQ2Ni0xLjc5MlptLTMuMTIgMy42NDdhLjUuNSAwIDAgMSAuNzc0LjYzNGwtMS41MDUgMS44NGEuNS41IDAgMCAxLS43NzQtLjYzNGwxLjUwNS0xLjg0Wm03LjYyLTMuNjQ3YS41LjUgMCAwIDEgLjc3NS42MzNsLTEuNDY2IDEuNzkyYS41LjUgMCAxIDEtLjc3NC0uNjMzbDEuNDY2LTEuNzkyWm0tMy4xMiAzLjY0N2EuNS41IDAgMCAxIC43NzQuNjM0bC0xLjUwNSAxLjg0YS41LjUgMCAwIDEtLjc3NC0uNjM0bDEuNTA1LTEuODRabTcuNjItMy42NDdhLjUuNSAwIDEgMSAuNzc1LjYzM2wtMS40NjYgMS43OTJhLjUuNSAwIDEgMS0uNzc0LS42MzNsMS40NjYtMS43OTJabS0zLjEyIDMuNjQ3YS41LjUgMCAwIDEgLjc3NC42MzRsLTEuNTA1IDEuODRhLjUuNSAwIDAgMS0uNzc0LS42MzRsMS41MDUtMS44NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNsb3VkRHJpenpsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DbG91ZFN0b3JteSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZFN0b3JteShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNDIxIDQuOTNhLjUuNSAwIDEgMS0uODcuNDkgMyAzIDAgMSAwLTQuNDMgMy45MTguNS41IDAgMCAxLS42MjYuNzggNCA0IDAgMCAxIDMuOTczLTYuODRsLjAzMi4wMThWMy4yOGE1LjUgNS41IDAgMSAxIDcuMDAzIDcuMzU3LjUuNSAwIDEgMS0uMzYtLjkzNCA0LjUgNC41IDAgMSAwLTUuNzctNS45MjNjLjQyLjMxLjc3OC43MDEgMS4wNSAxLjE1aC0uMDAyWk05LjYgMTFjLjY2OS4wMDIuNzk0LjY3LjM2IDEuMDAzbC00LjY4IDMuODgyYy0uNDU3LjM3OC0xLjA1My0uMjYtLjY0My0uNjg5bDMuMDgtMy4xOTNBNTQxMS43IDU0MTEuNyAwIDAgMSA1LjExMyAxMmMtLjY2OC0uMDAxLS43OTMtLjY2OS0uMzYtMS4wMDNsNC42OC0zLjg4MWMuNDU4LS4zNzkgMS4wNTMuMjYuNjQzLjY4OGwtMy4wOCAzLjE5M0w5LjYgMTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG91ZFN0b3JteTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DbG91ZFN1bm55ID0gZnVuY3Rpb24gRXVpSWNvbkNsb3VkU3VubnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC43NDYgNS4wMDVBNS41IDUuNSAwIDAgMSAxMC41IDE2SDRhNCA0IDAgMCAxLTEuNjEtNy42NjNBNC40NzMgNC40NzMgMCAwIDEgMi4wMjkgN0guNWEuNS41IDAgMCAxIDAtMWgxLjUyN2E0LjQ3OSA0LjQ3OSAwIDAgMSAuOTU3LTIuMzA5TDEuNjQ2IDIuMzU0YS41LjUgMCAxIDEgLjcwOC0uNzA4TDMuNjkgMi45ODRBNC40NzkgNC40NzkgMCAwIDEgNiAyLjAyN1YuNWEuNS41IDAgMCAxIDEgMHYxLjUyOGE0LjQ5MyA0LjQ5MyAwIDAgMSAyLjMwOS45NTZsMS4zMzctMS4zMzhhLjUuNSAwIDAgMSAuNzA4LjcwOEwxMC4wMTYgMy42OWMuMzExLjM4OC41Ni44MzEuNzMgMS4zMTRaTTQgMTVoNi41YTQuNSA0LjUgMCAxIDAtNC4xNTItNi4yMzlBMy45OTUgMy45OTUgMCAwIDEgOCAxMmEuNS41IDAgMSAxLTEgMCAzIDMgMCAxIDAtMyAzWm01LjY5MS05Ljk0YTMuNSAzLjUgMCAxIDAtNi4zMyAyLjk5MSA0LjAyOSA0LjAyOSAwIDAgMSAyLjEwNi4yMjcgNS41MDUgNS41MDUgMCAwIDEgNC4yMjQtMy4yMTlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG91ZFN1bm55OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNsdXN0ZXIgPSBmdW5jdGlvbiBFdWlJY29uQ2x1c3RlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjUgN2EyLjUgMi41IDAgMSAwIDAtNSAyLjUgMi41IDAgMCAwIDAgNXptMC02YTMuNSAzLjUgMCAwIDEgMy40NjUgM2gzLjEyYTEuNSAxLjUgMCAxIDEgMCAxaC0zLjEyYTMuNDgyIDMuNDgyIDAgMCAxLS42NjIgMS41OTZsMi4xIDIuMUEzLjUgMy41IDAgMSAxIDguMDM2IDEyaC0zLjEyYTEuNSAxLjUgMCAxIDEgMC0uOTk5aDMuMTJhMy40ODIgMy40ODIgMCAwIDEgLjY2Mi0xLjU5NmwtMi4xLTIuMUEzLjUgMy41IDAgMSAxIDQuNSAxek0xMiA0LjVhLjUuNSAwIDEgMCAxIDAgLjUuNSAwIDAgMC0xIDB6bS0uNSA5LjVhMi41IDIuNSAwIDEgMSAwLTUgMi41IDIuNSAwIDAgMSAwIDV6TTQgMTEuNWEuNS41IDAgMSAxLTEgMCAuNS41IDAgMCAxIDEgMHpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbHVzdGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvbG9yID0gZnVuY3Rpb24gRXVpSWNvbkNvbG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgMTFjMS4zMzQgMS4zOTMgMiAyLjQzNSAyIDMuMTI1QzE1IDE1LjE2MSAxNC4xMDUgMTYgMTMgMTZjLTEuMTA0IDAtMi0uODQtMi0xLjg3NSAwLS42OS42NjctMS43MzIgMi0zLjEyNXpNNS44NTcuMTVsNi4zNCA2LjQ1LjAxNi4wMi4zMjQuMzIxYTEuNSAxLjUgMCAwIDEgLjExIDIuMDA2bC0uMTAzLjExNC00LjQ3NCA0LjUxM2ExLjUgMS41IDAgMCAxLTIuMTIzLjAwOEwxLjQ2NCA5LjA2YTEuNSAxLjUgMCAwIDEgLjAwNy0yLjEybDQuNDcyLTQuNDVjLjE0NS0uMTQ2LjMxMy0uMjU0LjQ5Mi0uMzI3TDUuMTQ0Ljg1YS41LjUgMCAwIDEgLjcxMy0uN3ptMS40OTYgMy4wNDlhLjUuNSAwIDAgMC0uNzA1IDBMMi4xNzcgNy42NWEuNDk4LjQ5OCAwIDAgMC0uMTQ4LjM1aDkuOTVhLjQ5OC40OTggMCAwIDAtLjE0OC0uMzVMNy4zNTMgMy4yelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29sb3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29tcHV0ZSA9IGZ1bmN0aW9uIEV1aUljb25Db21wdXRlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAzYTEgMSAwIDAgMC0xIDF2OGExIDEgMCAwIDAgMSAxaDhhMSAxIDAgMCAwIDEtMVY0YTEgMSAwIDAgMC0xLTFINFptMTAgOHYxYTIgMiAwIDAgMS0yIDJoLTF2MmgtMXYtMkg4LjV2MmgtMXYtMkg2djJINXYtMkg0YTIgMiAwIDAgMS0yLTJ2LTFIMHYtMWgyVjguNUgwdi0xaDJWNkgwVjVoMlY0YTIgMiAwIDAgMSAyLTJoMVYwaDF2MmgxLjVWMGgxdjJIMTBWMGgxdjJoMWEyIDIgMCAwIDEgMiAydjFoMnYxaC0ydjEuNWgydjFoLTJWMTBoMnYxaC0yWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgd2lkdGg6IDYsXG4gICAgaGVpZ2h0OiA2LFxuICAgIHg6IDUsXG4gICAgeTogNSxcbiAgICByeDogMVxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbXB1dGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29uc29sZSA9IGZ1bmN0aW9uIEV1aUljb25Db25zb2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS4xNTcgMTIuMjI0IDUuNzY4IDguMzJhLjQwNC40MDQgMCAwIDAgMC0uNjRsLTQuNjEtMy45MDRhLjQwNy40MDcgMCAwIDEgMC0uNjQzLjYwOC42MDggMCAwIDEgLjc1OSAwbDQuNjEgMy45MDRjLjYzMS41MzQuNjMgMS4zOTMgMCAxLjkyNmwtNC42MSAzLjkwNGEuNjA4LjYwOCAwIDAgMS0uNzYgMCAuNDA3LjQwNyAwIDAgMSAwLS42NDNaTTkgMTJoNnYxSDl2LTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db25zb2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvbnRhaW5lciA9IGZ1bmN0aW9uIEV1aUljb25Db250YWluZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMCAyLjVBLjUuNSAwIDAgMSAuNSAyaDE1YS41LjUgMCAwIDEgMCAxSDE1djEwaC41YS41LjUgMCAwIDEgMCAxSC41YS41LjUgMCAwIDEgMC0xSDFWM0guNWEuNS41IDAgMCAxLS41LS41ek0yIDNoMTJ2MTBIMlYzem0zIDJhLjUuNSAwIDAgMC0uNS41djVhLjUuNSAwIDAgMCAxIDB2LTVBLjUuNSAwIDAgMCA1IDV6bTUuNS41YS41LjUgMCAwIDEgMSAwdjVhLjUuNSAwIDAgMS0xIDB2LTV6TTggNWEuNS41IDAgMCAwLS41LjV2NWEuNS41IDAgMCAwIDEgMHYtNUEuNS41IDAgMCAwIDggNXpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250YWluZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29udGludWl0eUFib3ZlID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlBYm92ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNSAzYS41LjUgMCAwIDAtLjUuNXY5YS41LjUgMCAwIDAgMSAwdi05YS41LjUgMCAwIDAtLjUtLjV6bTMgMGEuNS41IDAgMCAwLS41LjV2OWEuNS41IDAgMCAwIDEgMFY5aDZ2MS41YS41LjUgMCAwIDAgLjgyLjM4NGwzLTIuNWEuNS41IDAgMCAwIDAtLjc2OGwtMy0yLjVBLjUuNSAwIDAgMCAxMSA1LjVWN0g1VjMuNWEuNS41IDAgMCAwLS41LS41elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUFib3ZlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvbnRpbnVpdHlBYm92ZUJlbG93ID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlBYm92ZUJlbG93KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41IDNhLjUuNSAwIDAgMSAuNS41djlhLjUuNSAwIDAgMS0xIDBWOUg0djEuNWEuNS41IDAgMCAxLS44Mi4zODRsLTMtMi41YS41LjUgMCAwIDEgMC0uNzY4bDMtMi41QS41LjUgMCAwIDEgNCA1LjVWN2gyVjMuNWEuNS41IDAgMCAxIC41LS41em0zIDBhLjUuNSAwIDAgMC0uNS41djlhLjUuNSAwIDAgMCAxIDBWOWgydjEuNWEuNS41IDAgMCAwIC44Mi4zODRsMy0yLjVhLjUuNSAwIDAgMCAwLS43NjhsLTMtMi41QS41LjUgMCAwIDAgMTIgNS41VjdoLTJWMy41YS41LjUgMCAwIDAtLjUtLjV6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db250aW51aXR5QmVsb3cgPSBmdW5jdGlvbiBFdWlJY29uQ29udGludWl0eUJlbG93KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNSAzYS41LjUgMCAwIDEgLjUuNXY5YS41LjUgMCAwIDEtMSAwVjlINXYxLjVhLjUuNSAwIDAgMS0uODIuMzg0bC0zLTIuNWEuNS41IDAgMCAxIDAtLjc2OGwzLTIuNUEuNS41IDAgMCAxIDUgNS41VjdoNlYzLjVhLjUuNSAwIDAgMSAuNS0uNXptMyAwYS41LjUgMCAwIDEgLjUuNXY5YS41LjUgMCAwIDEtMSAwdi05YS41LjUgMCAwIDEgLjUtLjV6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250aW51aXR5QmVsb3c7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29udGludWl0eVdpdGhpbiA9IGZ1bmN0aW9uIEV1aUljb25Db250aW51aXR5V2l0aGluKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNLjUgM2EuNS41IDAgMCAwLS41LjV2OWEuNS41IDAgMCAwIDEgMHYtOUEuNS41IDAgMCAwIC41IDN6bTE0LjUuNWEuNS41IDAgMCAxIDEgMHY5YS41LjUgMCAwIDEtMSAwdi05em0tNC43MTIgMS41NDdhLjUuNSAwIDAgMSAuNTMyLjA2OWwzIDIuNWEuNS41IDAgMCAxIDAgLjc2OGwtMyAyLjVBLjUuNSAwIDAgMSAxMCAxMC41VjlINnYxLjVhLjUuNSAwIDAgMS0uODIuMzg0bC0zLTIuNWEuNS41IDAgMCAxIDAtLjc2OGwzLTIuNUEuNS41IDAgMCAxIDYgNS41VjdoNFY1LjVhLjUuNSAwIDAgMSAuMjg4LS40NTN6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250aW51aXR5V2l0aGluOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvbnRyb2xzSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIEV1aUljb25Db250cm9sc0hvcml6b250YWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC4wNSAxMGEyLjUgMi41IDAgMCAxIDQuOSAwaDEuNTVhLjUuNSAwIDEgMSAwIDFoLTEuNTVhMi41IDIuNSAwIDAgMS00LjkgMEgxLjVhLjUuNSAwIDEgMSAwLTFoNi41NVptLS4xLTRhMi41IDIuNSAwIDAgMS00LjkgMEgxLjVhLjUuNSAwIDAgMSAwLTFoMS41NWEyLjUgMi41IDAgMCAxIDQuOSAwaDYuNTVhLjUuNSAwIDEgMSAwIDFINy45NVpNNCA1LjVhMS41IDEuNSAwIDEgMCAzIDAgMS41IDEuNSAwIDAgMC0zIDBabTggNWExLjUgMS41IDAgMSAwLTMgMCAxLjUgMS41IDAgMCAwIDMgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRyb2xzSG9yaXpvbnRhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db250cm9sc1ZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRyb2xzVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAgNy45NWEyLjUgMi41IDAgMCAxIDAtNC45VjEuNWEuNS41IDAgMSAxIDEgMHYxLjU1YTIuNSAyLjUgMCAwIDEgMCA0Ljl2Ni41NWEuNS41IDAgMSAxLTEgMFY3Ljk1Wm0tNCAuMWEyLjUgMi41IDAgMCAxIDAgNC45djEuNTVhLjUuNSAwIDEgMS0xIDB2LTEuNTVhMi41IDIuNSAwIDAgMSAwLTQuOVYxLjVhLjUuNSAwIDAgMSAxIDB2Ni41NVpNNS41IDEyYTEuNSAxLjUgMCAxIDAgMC0zIDEuNSAxLjUgMCAwIDAgMCAzWm01LThhMS41IDEuNSAwIDEgMCAwIDMgMS41IDEuNSAwIDAgMCAwLTNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250cm9sc1ZlcnRpY2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvcHkgPSBmdW5jdGlvbiBFdWlJY29uQ29weShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjQgMGMuMjM1IDAgLjQ2LjA5OS42MjIuMjczbDIuNzQzIDNjLjE1MS4xNjIuMjM1LjM3OC4yMzUuNjAydjkuMjVhLjg2Ny44NjcgMCAwIDEtLjg1Ny44NzVIMy44NTdBLjg2Ny44NjcgMCAwIDEgMyAxMy4xMjVWLjg3NUMzIC4zOTIgMy4zODQgMCAzLjg1NyAwSDExLjRaTTE0IDRoLTIuNmEuNC40IDAgMCAxLS40LS40VjFINHYxMmgxMFY0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxSDJhMSAxIDAgMCAwLTEgMXYxM2ExIDEgMCAwIDAgMSAxaDEwYTEgMSAwIDAgMCAxLTF2LTFoLTF2MUgyVjJoMVYxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29weTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db3B5Q2xpcGJvYXJkID0gZnVuY3Rpb24gRXVpSWNvbkNvcHlDbGlwYm9hcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDIuNzI5VjJhMSAxIDAgMCAxIDEtMWgydjFIM3YxMmg0djFIM2ExIDEgMCAwIDEtMS0xVjIuNzI5ek0xNCA1VjJhMSAxIDAgMCAwLTEtMWgtMnYxaDJ2M2gxem0tMSAxaDJ2OUg4VjZoNVY1SDhhMSAxIDAgMCAwLTEgMXY5YTEgMSAwIDAgMCAxIDFoN2ExIDEgMCAwIDAgMS0xVjZhMSAxIDAgMCAwLTEtMWgtMnYxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMGg1VjlIOXYxem0wLTJoNVY3SDl2MXptMCA0aDV2LTFIOXYxem0wIDJoNXYtMUg5djF6bTItMTJWMWExIDEgMCAwIDAtMS0xSDZhMSAxIDAgMCAwLTEgMXYxaDFWMWg0djFoMXpNNSAzaDZWMkg1djF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db3B5Q2xpcGJvYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNyb3NzID0gZnVuY3Rpb24gRXVpSWNvbkNyb3NzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yOTMgOCAzLjE0NiAzLjg1NGEuNS41IDAgMSAxIC43MDgtLjcwOEw4IDcuMjkzbDQuMTQ2LTQuMTQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGw0LjE0NyA0LjE0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTQuMTQ2IDQuMTQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Dcm9zc0luQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvbkNyb3NzSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2Nyb3NzSW5DaXJjbGUnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBjbGlwUGF0aDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOC43NTUgOCAyLjY0IDIuNjQxYS41MzQuNTM0IDAgMSAxLS43NTQuNzU1TDggOC43NTVsLTIuNjQxIDIuNjRhLjUzNC41MzQgMCAxIDEtLjc1NS0uNzU0TDcuMjQ1IDhsLTIuNjQtMi42NDFhLjUzNC41MzQgMCAxIDEgLjc1NC0uNzU1TDggNy4yNDVsMi42NDEtMi42NGEuNTM0LjUzNCAwIDEgMSAuNzU1Ljc1NEw4Ljc1NSA4Wm00LjkwNC01LjY2YzMuMTIxIDMuMTIxIDMuMTIxIDguMTk5IDAgMTEuMzItMy4xMiAzLjEyLTguMTk4IDMuMTItMTEuMzE4IDBDLS43OCAxMC41MzgtLjc4IDUuNDYgMi4zNCAyLjM0YzMuMTItMy4xMiA4LjE5OC0zLjEyIDExLjMxOSAwWm0tLjY2NS42NjZhNy4wNjIgNy4wNjIgMCAxIDAtOS45ODggOS45ODggNy4wNjIgNy4wNjIgMCAwIDAgOS45ODgtOS45ODhaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImNsaXBQYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNmZmZcIixcbiAgICBkOiBcIk0wIDBoMTZ2MTZIMHpcIlxuICB9KSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3Jvc3NJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Dcm9zc0luQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvbkNyb3NzSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDhaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTYgOEE4IDggMCAxIDEgMCA4YTggOCAwIDAgMSAxNiAwWm0tMSAwQTcgNyAwIDEgMSAxIDhhNyA3IDAgMCAxIDE0IDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zc0luQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNyb3NzaGFpcnMgPSBmdW5jdGlvbiBFdWlJY29uQ3Jvc3NoYWlycyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuODIyIDEuODc0YS41LjUgMCAxIDEgLjMzNS45NDIgNS41MTcgNS41MTcgMCAwIDAtMy4zNCAzLjM0MS41LjUgMCAxIDEtLjk0My0uMzM1IDYuNTE3IDYuNTE3IDAgMCAxIDMuOTQ4LTMuOTQ4Wk0xLjg2NCAxMC4xNWEuNS41IDAgMSAxIC45NDQtLjMzIDUuNTE3IDUuNTE3IDAgMCAwIDMuMzY1IDMuMzcuNS41IDAgMCAxLS4zMzMuOTQzIDYuNTE3IDYuNTE3IDAgMCAxLTMuOTc2LTMuOTgzWm04LjMwMiAzLjk4MWEuNS41IDAgMSAxLS4zMzMtLjk0MyA1LjUxNyA1LjUxNyAwIDAgMCAzLjM0Ny0zLjMzMi41LjUgMCAxIDEgLjk0MS4zMzcgNi41MTcgNi41MTcgMCAwIDEtMy45NTUgMy45MzhabTMuOTY4LTguMjg1YS41LjUgMCAxIDEtLjk0My4zMzFBNS41MTcgNS41MTcgMCAwIDAgOS44NSAyLjgyYS41LjUgMCAwIDEgLjMzNy0uOTQyIDYuNTE3IDYuNTE3IDAgMCAxIDMuOTQ2IDMuOTY4Wk04LjUgMy41YS41LjUgMCAwIDEtMSAwVi45OTdhLjUuNSAwIDAgMSAxIDBWMy41Wm0tNC45OTcgNGEuNS41IDAgMCAxIDAgMUgxYS41LjUgMCAwIDEgMC0xaDIuNTAzWk03LjUgMTIuNDk3YS41LjUgMCAwIDEgMSAwVjE1YS41LjUgMCAxIDEtMSAwdi0yLjUwM1pNMTIuNDk3IDguNWEuNS41IDAgMCAxIDAtMUgxNWEuNS41IDAgMSAxIDAgMWgtMi41MDNaTTggOWExIDEgMCAxIDEgMC0yIDEgMSAwIDAgMSAwIDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zc2hhaXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkN1cnJlbmN5ID0gZnVuY3Rpb24gRXVpSWNvbkN1cnJlbmN5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTIuOTUgMS42MzYgMS40MTQgMS40MTQtMi4xOTIgMi4xOTNDMTIuNjk1IDYuMDMzIDEzIDYuOTggMTMgOGMwIDEuMDItLjMwNSAxLjk2Ny0uODI4IDIuNzU3bDIuMTkyIDIuMTkzLTEuNDE0IDEuNDE0LTIuMTkzLTIuMTkyQTQuOTc3IDQuOTc3IDAgMCAxIDggMTNhNC45NzcgNC45NzcgMCAwIDEtMi43NTctLjgyOEwzLjA1IDE0LjM2NCAxLjYzNiAxMi45NWwyLjE5Mi0yLjE5M0E0Ljk3NyA0Ljk3NyAwIDAgMSAzIDhjMC0xLjAyLjMwNS0xLjk2Ny44MjgtMi43NTdMMS42MzYgMy4wNSAzLjA1IDEuNjM2bDIuMTkzIDIuMTkyQTQuOTc3IDQuOTc3IDAgMCAxIDggM2MxLjAyIDAgMS45NjcuMzA1IDIuNzU3LjgyOGwyLjE5My0yLjE5MlpNOCA1YTIuOTkgMi45OSAwIDAgMC0xLjE2OC4yMzZsLS4xMjYuMDU3LS4yMTguMTE2LS4xMzIuMDgxLS4wNzMuMDVhMy4wMTMgMy4wMTMgMCAwIDAtLjI0MS4xODdsLS4xMTMuMTAzLS4xNDcuMTVjLS4wNS4wNTQtLjA5Ny4xMS0uMTQyLjE2OGwtLjEuMTM1LS4wNS4wNzMtLjA2LjA5N2MtLjA1LjA4Mi0uMDk2LjE2Ni0uMTM3LjI1M2wtLjA1Ny4xMjZBMi45OSAyLjk5IDAgMCAwIDUgOGMwIC40MTQuMDg0LjgwOS4yMzYgMS4xNjhsLjA1Ny4xMjYuMTE2LjIxOC4wODEuMTMyYy4wNTkuMDg5LjEyMS4xNzUuMTg5LjI1N2wuMTUuMTcuMTUxLjE0N2MuMDU2LjA1MS4xMTQuMS4xNzQuMTQ3bC4xNDIuMTA1Yy4wNTQuMDM3LjEwOS4wNzIuMTY1LjEwNmwtLjEyNC0uMDc5LjA5Mi4wNi4wOTQuMDU1Yy40MzYuMjQ3Ljk0LjM4OCAxLjQ3Ny4zODhhMi45OSAyLjk5IDAgMCAwIDEuMTY4LS4yMzZsLjEyNS0uMDU2LjIxMy0uMTEzLjE1MS0uMDk0LjA1LS4wMzRhMy4wMTEgMy4wMTEgMCAwIDAgLjMyMy0uMjU4bC0uMTUuMTI5LjA5LS4wNzUuMTY4LS4xNTkuMDgtLjA4NGMuMDUxLS4wNTYuMS0uMTE0LjE0Ny0uMTc0bC4xMDUtLjE0Mi4xMDYtLjE2NWMuMDQ3LS4wOC4wOTEtLjE2MS4xMzEtLjI0NWwuMDU3LS4xMjZBMi45OSAyLjk5IDAgMCAwIDExIDhhMi45OSAyLjk5IDAgMCAwLS4yMzYtMS4xNjhsLS4wNTYtLjEyNS0uMTEyLS4yMTEtLjA5Ni0uMTU1LS4wMzMtLjA0OWEzLjAxMSAzLjAxMSAwIDAgMC0uMjU4LS4zMjJsLjEyOS4xNS0uMDc1LS4wOS0uMTU5LS4xNjgtLjA4NC0uMDhhMy4wMTUgMy4wMTUgMCAwIDAtLjE3NC0uMTQ3bC0uMTgzLS4xMzItLjEyNC0uMDc5YTIuOTkzIDIuOTkzIDAgMCAwLS4yNDUtLjEzMWwtLjEyNi0uMDU3QTIuOTkgMi45OSAwIDAgMCA4IDVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DdXJyZW5jeTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DdXQgPSBmdW5jdGlvbiBFdWlJY29uQ3V0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwibTUuMTQyIDExLjA3NC0xLjkxMi41NDhhMi41MzIgMi41MzIgMCAxIDEtMS4zOTUtNC44NjdsMS45NDctLjU1OWEyLjUzMiAyLjUzMiAwIDAgMSAyLjU1NS43MTNsMS41My01LjMzNWMuMTM5LS40ODUuNi0uODk3IDEuMTU5LTEuMjM4LjI3LS4xNjQuNTItLjI3OC43NzktLjMyLjgxNC0uMTMyIDEuNTAzLjU1OCAxLjI2MSAxLjQyMkw5LjU3NCA2LjY0M2w0Ljk4OC0xLjQzYy44NjQtLjI0MiAxLjU1NC40NDcgMS40MjIgMS4yNi0uMDQyLjI2LS4xNTYuNTEtLjMyLjc4LS4zNDEuNTYtLjc1MyAxLjAyLTEuMjM4IDEuMTZMOS41MjMgOS44MTdhMi41MyAyLjUzIDAgMCAxIC41NiAyLjRsLS41NiAxLjk0N2EyLjUzMiAyLjUzMiAwIDEgMS00Ljg2Ny0xLjM5NWwuNDg2LTEuNjk2Wm0uMzMtMS4xNDguNDgtMS42NzNhMS41MiAxLjUyIDAgMCAwLTEuODktMS4wODNsLTEuOTQ4LjU1OGExLjUyIDEuNTIgMCAwIDAgLjgzNyAyLjkybDIuNTItLjcyMlptMy43NzMtMi4xMzUtLjMzIDEuMTQ4IDUuMjMyLTEuNWMuMzI0LS4wOTMgMS4xODItMS4zOS42OTQtMS4yNTNMOS4yNDUgNy43OTFaTTUuNjMgMTMuMDQ5YTEuNTIgMS41MiAwIDAgMCAyLjkyLjgzN2wuNTU5LTEuOTQ3YTEuNTIgMS41MiAwIDAgMC0xLjU1My0xLjkzNWwyLjUzNy04Ljg0NWMuMTM2LS40ODgtMS4xNi4zNy0xLjI1My42OTRMNS42MyAxMy4wNVptLjk3My4yNzkuNTU5LTEuOTQ3YS41MDYuNTA2IDAgMSAxIC45NzMuMjc5bC0uNTU4IDEuOTQ3YS41MDYuNTA2IDAgMSAxLS45NzQtLjI4Wm0tMy45My0zLjY1M2EuNTA2LjUwNiAwIDEgMS0uMjgtLjk3M2wxLjk0Ny0uNTU4YS41MDYuNTA2IDAgMCAxIC4yOC45NzNsLTEuOTQ4LjU1OFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkN1dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25EYXRhYmFzZSA9IGZ1bmN0aW9uIEV1aUljb25EYXRhYmFzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMTJoMTJ2LTEuOTdjLTEuMjI1LjU4Mi0zLjQ1NC45Ny02IC45N3MtNC43NzUtLjM4OC02LS45N1YxMlptLTEgMFYzYzAtMS4xMDUgMy4xMzQtMiA3LTJzNyAuODk1IDcgMnY5YzAgMS4xMDUtMy4xMzQgMi03IDJzLTctLjg5NS03LTJabTEtM2gxMlY3LjAzYy0xLjIyNS41ODItMy40NTQuOTctNiAuOTdzLTQuNzc1LS4zODgtNi0uOTdWOVptMC00Ljk3VjZoMTJWNC4wM2MtMS4yMjUuNTgyLTMuNDU0Ljk3LTYgLjk3cy00Ljc3NS0uMzg4LTYtLjk3Wm0xMC42NzUtMS40ODNDMTEuNDY3IDIuMjAyIDkuNzk1IDIgOCAyYy0xLjc5NCAwLTMuNDY3LjIwMi00LjY3NS41NDctLjQ5Mi4xNC0uODguMjk4LTEuMTM2LjQ1My4yNTYuMTU1LjY0NC4zMTIgMS4xMzYuNDUzQzQuNTMzIDMuNzk4IDYuMjA1IDQgOCA0YzEuNzk0IDAgMy40NjctLjIwMiA0LjY3NS0uNTQ3LjQ5Mi0uMTQuODgtLjI5OCAxLjEzNi0uNDUzLS4yNTYtLjE1NS0uNjQ0LS4zMTItMS4xMzYtLjQ1M1pNMiA2Yy4yNTcuMTU1LjgzMy4zMTIgMS4zMjUuNDUzQzQuNTMzIDYuNzk4IDYuMjA1IDcgOCA3YzEuNzk0IDAgMy40NjctLjIwMiA0LjY3NS0uNTQ3LjQ5Mi0uMTQgMS4wNy0uMjk4IDEuMzI3LS40NTNIMlptMCAzYy4yNTcuMTU1LjgzMy4zMTIgMS4zMjUuNDUzQzQuNTMzIDkuNzk4IDYuMjA1IDEwIDggMTBjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNCAxLjA3LS4yOTggMS4zMjctLjQ1M0gyWm0wIDNjLjI1Ny4xNTUuODMzLjMxMiAxLjMyNS40NTNDNC41MzMgMTIuNzk4IDYuMjA1IDEzIDggMTNjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNCAxLjA3LS4yOTggMS4zMjctLjQ1M0gyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRGF0YWJhc2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRGVza3RvcCA9IGZ1bmN0aW9uIEV1aUljb25EZXNrdG9wKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIgMmExIDEgMCAwIDAtMSAxdjdhMSAxIDAgMCAwIDEgMWg0bC0xIDNIMy41YS41LjUgMCAwIDAgMCAxaDlhLjUuNSAwIDAgMCAwLTFIMTFsLTEtM2g0YTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xSDJ6bTAgOFYzaDEydjdIMnptNSAxaDJsMSAzSDZsMS0zelwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNSA2YS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFoLTF6bTMgMGEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xaC0xem0yLjUuNWEuNS41IDAgMCAxIC41LS41aDFhLjUuNSAwIDAgMSAwIDFoLTFhLjUuNSAwIDAgMS0uNS0uNXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRlc2t0b3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRGlmZiA9IGZ1bmN0aW9uIEV1aUljb25EaWZmKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxLjVhLjUuNSAwIDAgMC0xIDBWNEgxLjVhLjUuNSAwIDAgMCAwIDFINHYyLjVhLjUuNSAwIDAgMCAxIDBWNWgyLjVhLjUuNSAwIDAgMCAwLTFINVYxLjVabTMgMTBhLjUuNSAwIDAgMSAuNS0uNWg2YS41LjUgMCAwIDEgMCAxaC02YS41LjUgMCAwIDEtLjUtLjVabTQuODU0LTcuNjQ2YS41LjUgMCAwIDAtLjcwOC0uNzA4bC05IDlhLjUuNSAwIDAgMCAuNzA4LjcwOGw5LTlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25EaWZmOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRpc2N1c3MgPSBmdW5jdGlvbiBFdWlJY29uRGlzY3VzcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuOTY3IDEwLjg2NGMuMzMyLjc4NyAxLjA4NSAxLjMzNyAxLjk2MiAxLjMzN2gzLjY3M2wyLjc1NSAyLjh2LTIuOGMxLjE4NCAwIDIuMTQzLTEuMDAzIDIuMTQzLTIuMjRWNi42MDRjMC0xLjIzNy0uOTYtMi4yNC0yLjE0My0yLjI0aC0xLjA3MXY0LjMzNGMwIDEuMTk3LS44OTYgMi4xNjctMiAyLjE2N2gtNS4zMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuOTA1IDguNzE4aDQuMTY2Yy41OTIgMCAxLjA3Mi0uNTAyIDEuMDcyLTEuMTJWNC4yNGMwLS42MTgtLjQ4LTEuMTItMS4wNzItMS4xMkgyLjY0M2MtLjU5MiAwLTEuMDcyLjUwMi0xLjA3MiAxLjEyVjcuNmMwIC42MTcuNDggMS4xMTkgMS4wNzIgMS4xMTloMS4wNzF2MS40NTJsMS4xOTEtMS40NTJabS40OTMgMS4xMi0yLjc1NSAyLjc5OFY5LjgzN0MxLjQ1OSA5LjgzNy41IDguODM1LjUgNy41OThWNC4yNEMuNSAzLjAwMyAxLjQ2IDIgMi42NDMgMkg5LjA3YzEuMTg0IDAgMi4xNDMgMS4wMDMgMi4xNDMgMi4yNHYzLjM1OGMwIDEuMjM3LS45NiAyLjI0LTIuMTQzIDIuMjRINS4zOThaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25EaXNjdXNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRvY3VtZW50ID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuOCAwYy4yNzQgMCAuNTM3LjExMy43MjYuMzEybDMuMiAzLjQyOGMuMTc2LjE4Ni4yNzQuNDMzLjI3NC42ODlWMTVhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTFWMWExIDEgMCAwIDEgMS0xaDguOFpNMTQgNWgtMy41YS41LjUgMCAwIDEtLjUtLjVWMUgydjE0aDEyVjVabS04LjUgN2EuNS41IDAgMSAxIDAtMWg1YS41LjUgMCAxIDEgMCAxaC01Wm0wLTNhLjUuNSAwIDAgMSAwLTFoNWEuNS41IDAgMSAxIDAgMWgtNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRvY3VtZW50RWRpdCA9IGZ1bmN0aW9uIEV1aUljb25Eb2N1bWVudEVkaXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm04LjUwNSA4Ljk5NSA2LjQ1My02LjQ0LTEuNS0xLjUtNi40NTMgNi40NCAxLjUgMS41Wk0xMi45NjguMTljLjI1OC0uMjM4LjY1Ny0uMjYuOTEgMGwxLjkyOCAxLjkyOWEuNjQyLjY0MiAwIDAgMSAwIC45MDlsLTYuNzggNi43ODRBLjY0MS42NDEgMCAwIDEgOC41NyAxMEg2LjY0M0EuNjQzLjY0MyAwIDAgMSA2IDkuMzU3VjcuNDNjMC0uMTcuMDY3LS4zMzUuMTg4LS40NTVMMTIuOTY4LjE5Wk00LjUgMTNhLjUuNSAwIDEgMSAwLTFoN2EuNS41IDAgMSAxIDAgMWgtN1ptNC0xMmEuNS41IDAgMCAxIDAgMUgydjEzaDEyVjcuNWEuNS41IDAgMSAxIDEgMFYxNWExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVYyYTEgMSAwIDAgMSAxLTFoNi41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG9jdW1lbnRFZGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRvY3VtZW50YXRpb24gPSBmdW5jdGlvbiBFdWlJY29uRG9jdW1lbnRhdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMy41YS41LjUgMCAxIDEtMSAwIC41LjUgMCAwIDEgMSAwek05IDV2M2gxdjFIOFY2SDdWNWgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuODU1IDE0LjE0N2ExLjM0IDEuMzQgMCAwIDEtLjE1OC0uMjQ2QTEuOTk4IDEuOTk4IDAgMCAxIDEzLjUgMTNjMC0uNDE0LjEwMy0uNzEzLjE5Ny0uOTAxYTEuMzQgMS4zNCAwIDAgMSAuMTU4LS4yNDZsLjAwMy0uMDA1QS41LjUgMCAwIDAgMTQgMTEuNVYuNWEuNS41IDAgMCAwLS41LS41SDMuNDYxbC0uMDgzLjAwNWEyLjk1NyAyLjk1NyAwIDAgMC0xLjEwMi4yOTggMi4yNTcgMi4yNTcgMCAwIDAtLjg4Ljc2M0MxLjE0OCAxLjQ0IDEgMS45MTMgMSAyLjVWMTNjMCAuNDYzLjExNy44NDMuMzE4IDEuMTQ1LjIuMjk4LjQ2Mi40OTEuNzA4LjYxNWEyLjM0NCAyLjM0NCAwIDAgMCAuOTQuMjRIM3YtMWMtLjAwNSAwLS4wMTUgMC0uMDI5LS4wMDJhMS4zNDQgMS4zNDQgMCAwIDEtLjQ5OC0uMTMzLjgxNy44MTcgMCAwIDEtLjMyMy0uMjc1QzIuMDcgMTMuNDcgMiAxMy4yODcgMiAxM3MuMDctLjQ3LjE1LS41OWEuODE3LjgxNyAwIDAgMSAuMzI0LS4yNzVBMS4zNDQgMS4zNDQgMCAwIDEgMyAxMmg5LjY1OGMtLjA5MS4yNy0uMTU4LjYwNS0uMTU4IDFzLjA2Ny43My4xNTggMUg4djFoNS41YS41LjUgMCAwIDAgLjM1OS0uODQ4bC0uMDA0LS4wMDV6bS0uMDAxIDAgLjAwMi4wMDItLjAwMi0uMDAyek0yLjcyNCAxLjE5N2MuMDkyLS4wNDYuMTg2LS4wODIuMjc2LS4xMUMzIDIuOTE4IDMuMDAxIDExIDIuOTk5IDExaC0uMDMzYTEuOTc3IDEuOTc3IDAgMCAwLS4yODMuMDMgMi4zNDQgMi4zNDQgMCAwIDAtLjY1Ny4yMUwyIDExLjI1NFYyLjVjMC0uNDEzLjEwMi0uNjg5LjIyOS0uODc5LjEyOC0uMTkzLjMwNC0uMzI4LjQ5NS0uNDI0ek00IDExVjFoOXYxMEg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxM0g0djIuNWEuNS41IDAgMCAwIC44NTQuMzU0bC42NDYtLjY0Ny42NDYuNjQ3QS41LjUgMCAwIDAgNyAxNS41VjEzelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG9jdW1lbnRhdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Eb2N1bWVudHMgPSBmdW5jdGlvbiBFdWlJY29uRG9jdW1lbnRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC44IDBjLjI3NCAwIC41MzcuMTEzLjcyNi4zMTJsMy4yIDMuNDI4Yy4xNzYuMTg2LjI3NC40MzMuMjc0LjY4OVYxM2ExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTFoNi44Wk0xMiA1SDguNWEuNS41IDAgMCAxLS41LS41VjFIMnYxMmgxMFY1Wm0tNy41IDZhLjUuNSAwIDEgMSAwLTFoNWEuNS41IDAgMSAxIDAgMWgtNVptMC0zYS41LjUgMCAwIDEgMC0xaDVhLjUuNSAwIDEgMSAwIDFoLTVabTEgOGEuNS41IDAgMSAxIDAtMUgxNFY2LjVhLjUuNSAwIDEgMSAxIDBWMTVhMSAxIDAgMCAxLTEgMUg1LjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb2N1bWVudHM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRG90ID0gZnVuY3Rpb24gRXVpSWNvbkRvdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImNpcmNsZVwiLCB7XG4gICAgY3g6IDgsXG4gICAgY3k6IDgsXG4gICAgcjogNFxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Eb3RJbkNpcmNsZSA9IGZ1bmN0aW9uIEV1aUljb25Eb3RJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IC41YzQuMTM2IDAgNy41IDMuMzY0IDcuNSA3LjVzLTMuMzY0IDcuNS03LjUgNy41Uy41IDEyLjEzNi41IDggMy44NjQuNSA4IC41Wm0wIC44ODJhNi42MTggNi42MTggMCAxIDAgMCAxMy4yMzZBNi42MTggNi42MTggMCAwIDAgOCAxLjM4MlpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDhhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG90SW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRG91YmxlQXJyb3dMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkRvdWJsZUFycm93TGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjEzNSAxNC4wNDNhLjc1Ljc1IDAgMCAwIC4wMjUtMS4wNmwtNC41OTEtNC44MWEuMjUuMjUgMCAwIDEgMC0uMzQ2bDQuNTktNC44MWEuNzUuNzUgMCAxIDAtMS4wODQtMS4wMzVsLTQuNTkxIDQuODFhMS43NSAxLjc1IDAgMCAwIDAgMi40MTZsNC41OSA0LjgxYy4yODcuMy43NjEuMzEgMS4wNjEuMDI0WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNC4xMzUgMTQuMDQzYS43NS43NSAwIDAgMCAuMDI1LTEuMDZsLTQuNTkxLTQuODFhLjI1LjI1IDAgMCAxIDAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMSAwLTEuMDg0LTEuMDM1bC00LjU5MSA0LjgxYTEuNzUgMS43NSAwIDAgMCAwIDIuNDE2bDQuNTkgNC44MWMuMjg3LjMuNzYxLjMxIDEuMDYxLjAyNFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb3VibGVBcnJvd0xlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRG91YmxlQXJyb3dSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25Eb3VibGVBcnJvd1JpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuMjMyIDE0LjA0M2EuNzUuNzUgMCAwIDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMCAwIDAtLjM0NmwtNC41OS00LjgxYS43NS43NSAwIDAgMSAxLjA4NS0xLjAzNWw0LjU5IDQuODFhMS43NSAxLjc1IDAgMCAxIDAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwIDEtMS4wNi4wMjRaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguMjMyIDE0LjA0M2EuNzUuNzUgMCAwIDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMCAwIDAtLjM0NmwtNC41OS00LjgxYS43NS43NSAwIDAgMSAxLjA4NS0xLjAzNWw0LjU5IDQuODFhMS43NSAxLjc1IDAgMCAxIDAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwIDEtMS4wNi4wMjRaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG91YmxlQXJyb3dSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Eb3dubG9hZCA9IGZ1bmN0aW9uIEV1aUljb25Eb3dubG9hZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTkgOS4xMTQgMS44NS0xLjk0M2EuNTIuNTIgMCAwIDEgLjc3IDBjLjIxNC4yMjguMjE0LjYgMCAuODI5bC0xLjk1IDIuMDVhMS41NTIgMS41NTIgMCAwIDEtMi4zMSAwTDUuNDEgOGEuNjE3LjYxNyAwIDAgMSAwLS44MjkuNTIuNTIgMCAwIDEgLjc3IDBMOCA5LjA4MlYuNTU2QzggLjI0OSA4LjIyNCAwIDguNSAwcy41LjI0OS41LjU1NnY4LjU1OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDEzLjAwNlYxMGgtMXYzLjAwNmEuOTk1Ljk5NSAwIDAgMS0uOTk0Ljk5NEgzLjAxYS45OTUuOTk1IDAgMCAxLS45OTQtLjk5NFYxMGgtMXYzLjAwNmMwIDEuMS44OTIgMS45OTQgMS45OTQgMS45OTRoMTAuOTk2YzEuMSAwIDEuOTk0LS44OTMgMS45OTQtMS45OTR6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb3dubG9hZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMmgyYTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJaTTEuNSAxYS41LjUgMCAwIDEgLjUuNXYxM2EuNS41IDAgMSAxLTEgMHYtMTNhLjUuNSAwIDAgMSAuNS0uNVptMTMgMGEuNS41IDAgMCAxIC41LjV2MTNhLjUuNSAwIDEgMS0xIDB2LTEzYS41LjUgMCAwIDEgLjUtLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JEaXN0cmlidXRlVmVydGljYWwgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA1aDhhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMlpNMS41IDFoMTNhLjUuNSAwIDEgMSAwIDFoLTEzYS41LjUgMCAwIDEgMC0xWm0wIDEzaDEzYS41LjUgMCAxIDEgMCAxaC0xM2EuNS41IDAgMSAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25Cb3R0b20gPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRlbUFsaWduQm90dG9tKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxaDJhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjNhMiAyIDAgMCAxIDItMlpNMS41IDE0aDEzYS41LjUgMCAxIDEgMCAxaC0xM2EuNS41IDAgMSAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25DZW50ZXIgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0SDdWMS41YS41LjUgMCAwIDEgMSAwVjRabTAgOHYyLjVhLjUuNSAwIDEgMS0xIDBWMTJoMVpNMyA1aDlhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMS0yIDJIM2EyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkNlbnRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25MZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkxlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDVoOGEyIDIgMCAwIDEgMiAydjJhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yWk0xLjUgMWEuNS41IDAgMCAxIC41LjV2MTNhLjUuNSAwIDEgMS0xIDB2LTEzYS41LjUgMCAwIDEgLjUtLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25MZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnbk1pZGRsZSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25NaWRkbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDd2MUgxLjVhLjUuNSAwIDAgMSAwLTFINFptOCAwaDIuNWEuNS41IDAgMSAxIDAgMUgxMlY3Wk03IDFoMmEyIDIgMCAwIDEgMiAydjlhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWM2EyIDIgMCAwIDEgMi0yWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA1aDhhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMS0yIDJIM2EyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMlptMTEuNS00YS41LjUgMCAwIDEgLjUuNXYxM2EuNS41IDAgMSAxLTEgMHYtMTNhLjUuNSAwIDAgMSAuNS0uNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25Ub3AoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDNoMmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yWk0xLjUgMWgxM2EuNS41IDAgMSAxIDAgMWgtMTNhLjUuNSAwIDAgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25Ub3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgOGg1YTEgMSAwIDAgMSAxIDF2NUgzYTEgMSAwIDAgMS0xLTFWOFptMS03aDEwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWM2EyIDIgMCAwIDEgMi0yWm0wIDFhMSAxIDAgMCAwLTEgMXYxMGExIDEgMCAwIDAgMSAxaDEwYTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xSDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSA4aDV2NWExIDEgMCAwIDEtMSAxSDhWOWExIDEgMCAwIDEgMS0xWk0zIDFoMTBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlYzYTIgMiAwIDAgMSAyLTJabTAgMWExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDAgMCAxIDFoMTBhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFIM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMmg1djVhMSAxIDAgMCAxLTEgMUgyVjNhMSAxIDAgMCAxIDEtMVptMC0xaDEwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWM2EyIDIgMCAwIDEgMi0yWm0wIDFhMSAxIDAgMCAwLTEgMXYxMGExIDEgMCAwIDAgMSAxaDEwYTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xSDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvblRvcFJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAyaDVhMSAxIDAgMCAxIDEgMXY1SDlhMSAxIDAgMCAxLTEtMVYyWk0zIDFoMTBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlYzYTIgMiAwIDAgMSAyLTJabTAgMWExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDAgMCAxIDFoMTBhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFIM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wUmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yQWxpZ25DZW50ZXIgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQWxpZ25DZW50ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDRWM2g2djFINVpNMyA3VjZoMTB2MUgzWm0yIDNWOWg2djFINVptLTIgM3YtMWgxMHYxSDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JBbGlnbkNlbnRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JBbGlnbkxlZnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQWxpZ25MZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA0VjNoNnYxSDJabTAgM1Y2aDEwdjFIMlptMCAzVjloNnYxSDJabTAgM3YtMWgxMHYxSDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JBbGlnbkxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yQWxpZ25SaWdodCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JBbGlnblJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0VjNoNnYxSDhaTTQgN1Y2aDEwdjFINFptNCAzVjloNnYxSDhabS00IDN2LTFoMTB2MUg0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQWxpZ25SaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JCb2xkID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckJvbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjE5MyAxM0g0VjNoNC4xNTFjMS44MTYgMCAyLjk4Ny45NzcgMi45ODcgMi40OTUgMCAxLjA3NC0uNzk3IDIuMDEtMS44MjMgMi4xNzZ2LjA1NWMxLjM1OS4xMzIgMi4zMDggMS4xMSAyLjMwOCAyLjQzMyAwIDEuNzYtMS4yOTYgMi44NDEtMy40MyAyLjg0MVpNNS43ODggNC4zOTN2Mi44MmgxLjYzNWMxLjI0OCAwIDEuOTQ4LS41MjYgMS45NDgtMS40NTUgMC0uODczLS42MDMtMS4zNjUtMS42Ny0xLjM2NUg1Ljc4OFptMCA3LjIxNGgxLjk5NmMxLjMxNiAwIDIuMDE2LS41NDcgMi4wMTYtMS41NzMgMC0xLjAxOS0uNzItMS41NTItMi4wOTItMS41NTJoLTEuOTJ2My4xMjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JCb2xkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckNoZWNrbGlzdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JDaGVja2xpc3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjU5NyAzYS40MTEuNDExIDAgMCAwLS4yOTkuMTMybC0xLjg1IDEuOTkzLS43NTYtLjdhLjQxMi40MTIgMCAwIDAtLjI4LS4xMjQuNDIuNDIgMCAwIDAtLjI5Mi4wOTguMzMzLjMzMyAwIDAgMC0uMTIuMjU3LjMzNS4zMzUgMCAwIDAgLjEyNy4yNTRsMS4wNjQuOTgyQS40MTguNDE4IDAgMCAwIDIuNDg4IDZhLjQxMS40MTEgMCAwIDAgLjI4OC0uMTI2TDQuOTA0IDMuNThhLjMyOC4zMjggMCAwIDAgLjA5NS0uMjUuMzM3LjMzNyAwIDAgMC0uMTI2LS4yMzhBLjQyMS40MjEgMCAwIDAgNC41OTcgM3ptLS4yOTkgNC4xMzJBLjQxMS40MTEgMCAwIDEgNC41OTcgN2EuNDIxLjQyMSAwIDAgMSAuMjc2LjA5M2MuMDc2LjA2Mi4xMi4xNDcuMTI2LjIzOGEuMzI4LjMyOCAwIDAgMS0uMDk1LjI1TDIuNzc2IDkuODc0YS40MTEuNDExIDAgMCAxLS4yODguMTI2LjQxOC40MTggMCAwIDEtLjI5Ny0uMTA4TDEuMTI3IDguOTFBLjMzNS4zMzUgMCAwIDEgMSA4LjY1NmEuMzMzLjMzMyAwIDAgMSAuMTItLjI1Ny40Mi40MiAwIDAgMSAuMjkyLS4wOThjLjEwOC4wMDUuMjEuMDUuMjguMTIzbC43NTcuNzAxIDEuODQ5LTEuOTkzek00LjU5NyAxMWEuNDExLjQxMSAwIDAgMC0uMjk5LjEzMmwtMS44NSAxLjk5My0uNzU2LS43YS40MTIuNDEyIDAgMCAwLS4yOC0uMTI0LjQyMS40MjEgMCAwIDAtLjI5Mi4wOTguMzMzLjMzMyAwIDAgMC0uMTIuMjU3LjMzNS4zMzUgMCAwIDAgLjEyNy4yNTRsMS4wNjQuOTgyYS40MTguNDE4IDAgMCAwIC4yOTcuMTA4LjQxMS40MTEgMCAwIDAgLjI4OC0uMTI2bDIuMTI4LTIuMjkzYS4zMjguMzI4IDAgMCAwIC4wOTUtLjI1LjMzNy4zMzcgMCAwIDAtLjEyNi0uMjM4LjQyMS40MjEgMCAwIDAtLjI3Ni0uMDkzek02LjUgNGEuNS41IDAgMCAwIDAgMWg3YS41LjUgMCAwIDAgMC0xaC03ek02IDguNWEuNS41IDAgMCAxIC41LS41aDdhLjUuNSAwIDAgMSAwIDFoLTdhLjUuNSAwIDAgMS0uNS0uNXptLjUgMy41YS41LjUgMCAwIDAgMCAxaDdhLjUuNSAwIDAgMCAwLTFoLTd6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JDaGVja2xpc3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yQ29kZUJsb2NrID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckNvZGVCbG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuNDE0IDguMDM2IDQuODkgMTAuNTFhLjUuNSAwIDAgMS0uNzA3LjcwOEwxLjM1NCA4LjM4OWEuNS41IDAgMCAxIDAtLjcwN2wyLjgyOC0yLjgyOGEuNS41IDAgMSAxIC43MDcuNzA3TDIuNDE0IDguMDM2Wm04Ljc2OCAyLjQ3NCAyLjQ3NS0yLjQ3NC0yLjQ3NS0yLjQ3NWEuNS41IDAgMCAxIC43MDctLjcwN2wyLjgyOSAyLjgyOGEuNS41IDAgMCAxIDAgLjcwN2wtMi44MjkgMi44MjlhLjUuNSAwIDEgMS0uNzA3LS43MDhaTTguNTU5IDIuNTA2YS41LjUgMCAwIDEgLjk4MS4xOUw3LjQ0MSAxMy40OTRhLjUuNSAwIDAgMS0uOTgxLS4xOUw4LjU1OSAyLjUwNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckNvZGVCbG9jazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JDb21tZW50ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckNvbW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjExMSAxMEgxMmExIDEgMCAwIDAgMS0xVjVhMSAxIDAgMCAwLTEtMUg0YTEgMSAwIDAgMC0xIDF2NGExIDEgMCAwIDAgMSAxaDF2MS4yOTdMNi4xMTEgMTBabS40NiAxTDQgMTR2LTNhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoOGEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg2LjU3MVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckNvbW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9ySGVhZGluZyA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JIZWFkaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiAxMWExIDEgMCAwIDEgMCAySDRhMSAxIDAgMCAxIDAtMlY1YTEgMSAwIDEgMSAwLTJoMmExIDEgMCAxIDEgMCAydjJoNFY1YTEgMSAwIDEgMSAwLTJoMmExIDEgMCAwIDEgMCAydjZhMSAxIDAgMCAxIDAgMmgtMmExIDEgMCAwIDEgMC0yVjlINnYyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySGVhZGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JJdGFsaWMgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRhbGljKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xNiAxMkg5LjVhLjUuNSAwIDEgMSAwIDFoLTRhLjUuNSAwIDEgMSAwLTFoMS42MzlsMS43LThINy41YS41LjUgMCAwIDEgMC0xaDRhLjUuNSAwIDEgMSAwIDFIOS44NjFsLTEuNyA4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRhbGljOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckxpbmsgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yTGluayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNTU2IDUuMDUxYS40NS40NSAwIDAgMCAuNjM3LjYzN2wxLjUwMy0xLjUwNGMuNDMyLS40MzEgMS4yNzgtLjM4MiAxLjg5LjIzLjYxMi42MTIuNjYyIDEuNDU4LjIzIDEuODlMOS41MTkgOC42Yy0uNDMyLjQzMi0xLjI3OC4zODMtMS44OS0uMjNhLjQ1LjQ1IDAgMSAwLS42MzYuNjM3Yy45MTQuOTE0IDIuMzMgMS4wNjMgMy4xNjIuMjNsMi4yOTctMi4yOTdjLjgzMy0uODMzLjY4NC0yLjI0OC0uMjMtMy4xNjItLjkxNC0uOTE1LTIuMzMtMS4wNjMtMy4xNjItLjIzTDcuNTU2IDUuMDUxem0uODg4IDUuMjYxYS40NS40NSAwIDAgMC0uNjM3IDBsLTEuNTAzIDEuNTA0Yy0uNDMyLjQzMS0xLjI3OC4zODItMS44OS0uMjMtLjYxMi0uNjEyLS42NjEtMS40NTgtLjIzLTEuODlMNi40ODEgNy40Yy40MzItLjQzMiAxLjI3OC0uMzgzIDEuODkuMjNhLjQ1LjQ1IDAgMCAwIC42MzYtLjYzN2MtLjkxNC0uOTE0LTIuMzMtMS4wNjMtMy4xNjItLjIzTDMuNTQ4IDkuMDZjLS44MzMuODMzLS42ODUgMi4yNDguMjMgMy4xNjIuOTE0LjkxNSAyLjMzIDEuMDYzIDMuMTYyLjIzbDEuNTA0LTEuNTAzYS40NS40NSAwIDAgMCAwLS42Mzd6TTcuODc3IDUuNzZhLjM5LjM5IDAgMCAwIC4yNzQtLjExNGwxLjUwMy0xLjUwNC0xLjUwMyAxLjUwNGEuMzkuMzkgMCAwIDEtLjI3NC4xMTR6bS45MTIgMy4xODNjLS40LjAwMy0uODQzLS4xNzItMS4yMDItLjUzLjM1OS4zNTguODAyLjUzMyAxLjIwMi41M3pNMTIuMTggMy44MmMtLjUwMi0uNTAzLTEuMTU1LS43NjYtMS43NzMtLjc2LjYxOC0uMDA2IDEuMjcuMjU3IDEuNzczLjc2Ljg5OC44OTggMS4wMzQgMi4yNzUuMjMgMy4wNzhsLTIuMjk3IDIuMjk3IDIuMjk3LTIuMjk3Yy44MDQtLjgwMy42NjgtMi4xOC0uMjMtMy4wNzh6bS00LjA2MiA2LjQyYS4zOS4zOSAwIDAgMSAuMjg0LjY2N0w2Ljg5OCAxMi40MWwxLjUwNC0xLjUwM2EuMzkuMzkgMCAwIDAtLjI4NC0uNjY3em0tLjkyNi0zLjk2NWMuNjE4LS4wMDYgMS4yNy4yNTcgMS43NzMuNzYtLjUwMi0uNTAzLTEuMTU1LS43NjYtMS43NzMtLjc2ek01LjQxNCAxMi4xNWExLjc2MiAxLjc2MiAwIDAgMS0xLjA0Mi0uNTIyYy0uNjI2LS42MjctLjY5Mi0xLjUxMS0uMjMtMS45NzRMNi40NCA3LjM1OCA0LjE0MiA5LjY1NGMtLjQ2Mi40NjMtLjM5NiAxLjM0OC4yMyAxLjk3NC4zMTEuMzExLjY4Ny40ODQgMS4wNDIuNTIyelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yTGluazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JPcmRlcmVkTGlzdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JPcmRlcmVkTGlzdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgOHYxaDF2MUgxVjloMVY4SDFWN2gzdjFIM1ptMSA0djJIMXYtMWgxdi0xSDF2LTFoM3YxWk0zIDVoMXYxSDFWNWgxVjRIMVYzaDJ2MlptMi41LTFoOGEuNS41IDAgMSAxIDAgMWgtOGEuNS41IDAgMCAxIDAtMVptMCA0aDhhLjUuNSAwIDEgMSAwIDFoLThhLjUuNSAwIDAgMSAwLTFabTAgNGg4YS41LjUgMCAxIDEgMCAxaC04YS41LjUgMCAxIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yT3JkZXJlZExpc3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yUmVkbyA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JSZWRvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgNkg1QzMuMDU3IDYgMiA3LjA1NyAyIDlzMS4wNTcgMyAzIDNoMS41di0xSDVjLTEuMzkgMC0yLS42MS0yLTIgMC0xLjM5LjYxLTIgMi0yaDV2M2wzLjUtMy41TDEwIDN2M1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclJlZG87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yU3RyaWtlID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclN0cmlrZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjAyMyAxMGgxLjI3NGMuMDA2LjA4LjAxLjE2NC4wMS4yNWEyLjU1NyAyLjU1NyAwIDAgMS0uODgzIDEuOTQ5Yy0uMjg0LjI1LS42MjcuNDQ2LTEuMDMuNTg4QTQuMDg3IDQuMDg3IDAgMCAxIDguMDI4IDEzYTQuNjE2IDQuNjE2IDAgMCAxLTMuMzgyLTEuNDI2Yy0uMTkzLS4yNTktLjE5My0uNSAwLS43MjQuMTkzLS4yMjMuNDM4LS4yNjYuNzM1LS4xMy4zNDMuMzYzLjc0OC42NTUgMS4yMTMuODc2LjQ2Ni4yMi45NDkuMzMgMS40NDkuMzMuNjM3IDAgMS4xMzItLjE0NCAxLjQ4NS0uNDMzLjM1My0uMjkuNTMtLjY3LjUzLTEuMTRhMS43MiAxLjcyIDAgMCAwLS4wMzQtLjM1M1pNNS41ODYgN2EyLjQ5IDIuNDkgMCAwIDEtLjI5NC0uNTA3IDIuMzE2IDIuMzE2IDAgMCAxLS4xNzctLjkzNGMwLS4zNjMuMDc2LS43MDEuMjI4LTEuMDE1LjE1Mi0uMzE0LjM2My0uNTg2LjYzMy0uODE2LjI3LS4yMy41ODgtLjQxLjk1NS0uNTM3QTMuNjgzIDMuNjgzIDAgMCAxIDguMTQ1IDNjLjU3OCAwIDEuMTEyLjExIDEuNjAzLjMzLjQ5LjIyMS45MDcuNTA4IDEuMjUuODYxLjE2LjI4Mi4xNi41MTIgMCAuNjkyLS4xNi4xOC0uMzguMjE0LS42NjIuMTAyYTMuNDM4IDMuNDM4IDAgMCAwLS45NzgtLjY2OSAyLjkxNCAyLjkxNCAwIDAgMC0xLjIxMy0uMjQyYy0uNTQgMC0uOTczLjEyNS0xLjMwMi4zNzUtLjMyOC4yNS0uNDkyLjU5NS0uNDkyIDEuMDM2IDAgLjIzNi4wNDYuNDM0LjE0LjU5Ni4wOTIuMTYyLjIxNy4zMDQuMzc0LjQyNi4xNTcuMTIzLjMyOS4yMy41MTUuMzI0LjExOS4wNi4yNC4xMTYuMzYyLjE2OUg1LjU4NlpNMi41IDhoMTFhLjUuNSAwIDEgMSAwIDFoLTExYS41LjUgMCAwIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yU3RyaWtlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvclRhYmxlID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclRhYmxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgM3YySDJWM3YxMGgxMlYzWk0yIDJoMTJjLjU1MiAwIDEgLjQxMyAxIC45MjN2MTAuMTU0YzAgLjUxLS40NDguOTIzLTEgLjkyM0gyYy0uNTUyIDAtMS0uNDEzLTEtLjkyM1YyLjkyM0MxIDIuNDEzIDEuNDQ4IDIgMiAyWm0wIDVoMTJ2MUgyVjdabTAgM2gxMnYxSDJ2LTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JUYWJsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JVbmRlcmxpbmUgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yVW5kZXJsaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAzLjUzNlY3LjhjMCAxLjYyOCAxLjIyNCAyLjYgMyAyLjYgMS43ODMgMCAzLS45NzIgMy0yLjZWMy41MzZjMC0uMzU3LjE2Ny0uNTM2LjUtLjUzNi4zMzMgMCAuNS4xNzkuNS41MzZ2NC4zMThjMCAyLjA5My0xLjY2NSAzLjU0Ni00IDMuNTQ2UzQgOS44OTMgNCA3LjhWMy41MzZDNCAzLjE3OSA0LjE2NyAzIDQuNSAzYy4zMzMgMCAuNS4xNzkuNS41MzZaTTIuNSAxM2gxMWEuNS41IDAgMSAxIDAgMWgtMTFhLjUuNSAwIDEgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JVbmRlcmxpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yVW5kbyA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JVbmRvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS41IDZoNWMxLjk0MyAwIDMgMS4wNTcgMyAzcy0xLjA1NyAzLTMgM0g5di0xaDEuNWMxLjM5IDAgMi0uNjEgMi0yIDAtMS4zOS0uNjEtMi0yLTJoLTV2M0wyIDYuNSA1LjUgM3YzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVW5kbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JVbm9yZGVyZWRMaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclVub3JkZXJlZExpc3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjUgNGg4YS41LjUgMCAxIDEgMCAxaC04YS41LjUgMCAwIDEgMC0xWm0wIDRoOGEuNS41IDAgMSAxIDAgMWgtOGEuNS41IDAgMCAxIDAtMVptMCA0aDhhLjUuNSAwIDEgMSAwIDFoLThhLjUuNSAwIDEgMSAwLTFabS0zLTdhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFabTAgNGEuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptMCA0YS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVW5vcmRlcmVkTGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FbWFpbCA9IGZ1bmN0aW9uIEV1aUljb25FbWFpbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNC45NSAzLjY4NCA4LjYzNyA4LjkxMmExIDEgMCAwIDEtMS4yNzYgMEwxLjA1MSAzLjY4NEEuOTk5Ljk5OSAwIDAgMCAxIDR2OGExIDEgMCAwIDAgMSAxaDEyYTEgMSAwIDAgMCAxLTFWNGEuOTk5Ljk5OSAwIDAgMC0uMDUtLjMxNlpNMiAyaDEyYTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJabS0uMjEgMSA1LjU3NiA0LjYwM2ExIDEgMCAwIDAgMS4yNy4wMDNMMTQuMjY4IDNIMS43OVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVtYWlsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVtcHR5ID0gZnVuY3Rpb24gRXVpSWNvbkVtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcykpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FbXB0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FbmRwb2ludCA9IGZ1bmN0aW9uIEV1aUljb25FbmRwb2ludChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNDA2IDEzLjQ1NGExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi44NiA2LjA5YTIuNTQ1IDIuNTQ1IDAgMSAxIDIuNDk3LTMuMDQ1aC4zNjhhMi43MjcgMi43MjcgMCAxIDEgMCA1LjQ1NUg2LjU0M2ExLjcyNyAxLjcyNyAwIDEgMCAwIDMuNDU0aC4zNjdhMi41NDYgMi41NDYgMCAxIDEgMCAxaC0uMzY3YTIuNzI3IDIuNzI3IDAgMSAxIDAtNS40NTRoMy4xODJhMS43MjcgMS43MjcgMCAxIDAgMC0zLjQ1NWgtLjM2OGEyLjU0NiAyLjU0NiAwIDAgMS0yLjQ5NiAyLjA0Nkw2Ljg2IDYuMDlabTAtMWExLjU0NSAxLjU0NSAwIDEgMSAwLTMuMDkgMS41NDUgMS41NDUgMCAwIDEgMCAzLjA5Wk05LjQwNyAxNGExLjU0NSAxLjU0NSAwIDEgMSAwLTMuMDkgMS41NDUgMS41NDUgMCAwIDEgMCAzLjA5WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVuZHBvaW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVxbCA9IGZ1bmN0aW9uIEV1aUljb25FcWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS44NjIgMTQuMTh2LjAwMWEuNDgyLjQ4MiAwIDAgMSAuMS41MjEuNS41IDAgMCAxLS40NDcuMjk5aC0zLjE0OWMtLjA3IDAtLjEzNiAwLS4yLS4wMDNhLjY2NC42NjQgMCAwIDEtLjQxNC0uMTRjLS4zNS0uMzEtLjY4NC0uNjM3LTEuMDAxLS45ODFsLTEuNzcyLTEuNzM4YTUuOTQxIDUuOTQxIDAgMCAxLTMuODAyLjE0bC0uMDQ1LS4wMTJhNS44OSA1Ljg5IDAgMCAxLTIuNjgyLTEuNzEyQTUuNzE1IDUuNzE1IDAgMCAxIDEuMDggNy43MmE1LjY2IDUuNjYgMCAwIDEgLjM0OC0zLjExOEE1Ljc4IDUuNzggMCAwIDEgMy4zOSAyLjEyNGE1Ljk3OSA1Ljk3OSAwIDAgMSA2LjEzNi0uNTA1IDUuODM2IDUuODM2IDAgMCAxIDIuMzU2IDIuMTIzIDUuNjcgNS42NyAwIDAgMSAuODczIDMuMDE3bC4wMDEuMDAzYzAgLjEyOC0uMDUxLjI1LS4xNDMuMzRhLjQ5NS40OTUgMCAwIDEtLjY5NCAwIC40NzYuNDc2IDAgMCAxLS4xNDMtLjM0YzAtLjk1LS4yODgtMS44NzgtLjgyNi0yLjY2OGE0Ljg4IDQuODggMCAwIDAtMi4xOTgtMS43NjkgNC45OSA0Ljk5IDAgMCAwLTIuODMtLjI3MyA0LjkzIDQuOTMgMCAwIDAtMi41MDkgMS4zMTQgNC43NzQgNC43NzQgMCAwIDAtMS4zNCAyLjQ2QTQuNzE1IDQuNzE1IDAgMCAwIDIuMzUyIDguNmE0LjgyIDQuODIgMCAwIDAgMS44MDQgMi4xNTVjLjgwNS41MjggMS43NTIuODEgMi43MjEuODFhNC44OTkgNC44OTkgMCAwIDAgMS4yOTYtLjE5NGwuMDMyLS4wMDkuNzE3LS4yMTFhLjUwNi41MDYgMCAwIDEgLjQ4My4xMTFsMS4xMSAxLjAyNiAxLjc4OCAxLjc1MmgyLjAzbC0zLjY1Ny0zLjU4M2EuNDc1LjQ3NSAwIDAgMSAuMDE0LS42NjYuNDk1LjQ5NSAwIDAgMSAuNjc5LS4wMTNsNC40OTMgNC40MDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjA5NyAzLjQ2OCA5LjY3OSA0LjkzYS40MzMuNDMzIDAgMCAxIC4yMTguMzd2Mi45MjRhLjQyMi40MjIgMCAwIDEtLjIxOC4zN2wtMi41ODIgMS40NjFhLjQzOC40MzggMCAwIDEtLjQzNyAwTDQuMDc3IDguNTk0YS40MzMuNDMzIDAgMCAxLS4yMTgtLjM3VjUuM2EuNDIyLjQyMiAwIDAgMSAuMjE4LS4zN0w2LjY2IDMuNDY3YS40NDYuNDQ2IDAgMCAxIC40MzcgMHptMS44NDUgNC4yN1Y1Ljc4NGEuMzI4LjMyOCAwIDAgMC0uMTctLjI4N0w3LjA0NyA0LjUyYS4zNDIuMzQyIDAgMCAwLS4zMzggMGwtMS43MjYuOTc3YS4zMzYuMzM2IDAgMCAwLS4xNjguMjg3djEuOTUzYS4zMjYuMzI2IDAgMCAwIC4xNy4yODdsMS43MjQuOTc3YS4zNDIuMzQyIDAgMCAwIC4zMzggMGwxLjcyNi0uOTc4YS4zMzQuMzM0IDAgMCAwIC4xNjktLjI4N3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FcmFzZXIgPSBmdW5jdGlvbiBFdWlJY29uRXJhc2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMi42NDggOS45MzcgNy4yOS03LjI4OGEyLjIxIDIuMjEgMCAwIDEgMy4xMjQgMGwyLjI5IDIuMjg4YTIuMjEgMi4yMSAwIDAgMSAwIDMuMTI2TDEwLjQxMyAxM0gxMi41YS41LjUgMCAwIDEgMCAxSDQuNTAxYTIuMjEgMi4yMSAwIDAgMS0xLjU2My0uNjQ3bC43MDctLjcwN2MuMjI3LjIyNi41MzUuMzU0Ljg1Ni4zNTRoNC4wMDVhMS4yMSAxLjIxIDAgMCAwIC44NDgtLjM1NGwxLjI5Mi0xLjI5My00LTQtMy4yOSAzLjI5MWExLjIxIDEuMjEgMCAwIDAgMCAxLjcxMmwuMjkuMjktLjcwOC43MDctLjI5LS4yOWEyLjIxIDIuMjEgMCAwIDEgMC0zLjEyNnpNOCA2aDYuODlhMS4yMDggMS4yMDggMCAwIDAtLjI0Ni0uMzU2TDE0IDVIOUw4IDZ6bTItMmgzbC0uNjQ1LS42NDRhMS4yMSAxLjIxIDAgMCAwLTEuNzEgMEwxMCA0em00Ljg5IDNINy43MDhsMSAxSDE0bC42NDQtLjY0NEExLjIyIDEuMjIgMCAwIDAgMTQuODkxIDd6TTkuNzA4IDlsMS42NDYgMS42NDZMMTMgOUg5LjcwN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDExLjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDAgMSAxIDB6bTEuNS0uNWEuNS41IDAgMSAwIDAtMSAuNS41IDAgMCAwIDAgMXptLTEgMmEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xaC0xelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXJhc2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVycm9yID0gZnVuY3Rpb24gRXVpSWNvbkVycm9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC44NTQgNS4xNDZhLjUuNSAwIDEgMC0uNzA4LjcwOEw2Ljc5MyA4LjVsLTIuNjQ3IDIuNjQ2YS41LjUgMCAwIDAgLjcwOC43MDhMNy41IDkuMjA3bDIuNjQ2IDIuNjQ3YS41LjUgMCAwIDAgLjcwOC0uNzA4TDguMjA3IDguNWwyLjY0Ny0yLjY0NmEuNS41IDAgMCAwLS43MDgtLjcwOEw3LjUgNy43OTMgNC44NTQgNS4xNDZaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNSAxYTEgMSAwIDAgMC0uNzA3LjI5M2wtNCA0QTEgMSAwIDAgMCAwIDZ2NWExIDEgMCAwIDAgLjI5My43MDdsNCA0QTEgMSAwIDAgMCA1IDE2aDVhMSAxIDAgMCAwIC43MDctLjI5M2w0LTRBMSAxIDAgMCAwIDE1IDExVjZhMSAxIDAgMCAwLS4yOTMtLjcwN2wtNC00QTEgMSAwIDAgMCAxMCAxSDVabTUgMUg1TDEgNnY1bDQgNGg1bDQtNFY2bC00LTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FcnJvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FcnJvckZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25FcnJvckZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMCAxYTEgMSAwIDAgMSAuNzA3LjI5M2w0IDRBMSAxIDAgMCAxIDE1IDZ2NWExIDEgMCAwIDEtLjI5My43MDdsLTQgNEExIDEgMCAwIDEgMTAgMTZINWExIDEgMCAwIDEtLjcwNy0uMjkzbC00LTRBMSAxIDAgMCAxIDAgMTFWNmExIDEgMCAwIDEgLjI5My0uNzA3bDQtNEExIDEgMCAwIDEgNSAxaDVaTTQuMTQ2IDUuMTQ2YS41LjUgMCAwIDEgLjcwOCAwTDcuNSA3Ljc5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguMjA3IDguNWwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDcuNSA5LjIwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNi43OTMgOC41IDQuMTQ2IDUuODU0YS41LjUgMCAwIDEgMC0uNzA4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXJyb3JGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRXNxbFZpcyA9IGZ1bmN0aW9uIEV1aUljb25Fc3FsVmlzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAyLjVhLjUuNSAwIDAgMSAuNS0uNWgyYS41LjUgMCAwIDEgMCAxaC0yYS41LjUgMCAwIDEtLjUtLjVaTTIuNSA0YS41LjUgMCAwIDAgMCAxaDJhLjUuNSAwIDAgMCAwLTFoLTJaTTIgNi41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41Wk0yLjUgOGEuNS41IDAgMCAwIDAgMWgyYS41LjUgMCAwIDAgMC0xaC0yWk0yIDEwLjVhLjUuNSAwIDAgMSAuNS0uNWgyYS41LjUgMCAwIDEgLjUuNXYyYS41LjUgMCAwIDEtLjUuNWgtMmEuNS41IDAgMCAxLS41LS41di0yWk02LjUgMmEuNS41IDAgMCAwIDAgMWgyYS41LjUgMCAwIDAgMC0xaC0yWk02IDQuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNVpNNi41IDZhLjUuNSAwIDAgMC0uNS41djZhLjUuNSAwIDAgMCAuNS41aDJhLjUuNSAwIDAgMCAuNS0uNXYtNmEuNS41IDAgMCAwLS41LS41aC0yWk0xMCAyLjVhLjUuNSAwIDAgMSAuNS0uNWgyYS41LjUgMCAwIDEgMCAxaC0yYS41LjUgMCAwIDEtLjUtLjVabS41IDEuNWEuNS41IDAgMCAwIDAgMWgyYS41LjUgMCAwIDAgMC0xaC0yWk0xMCA2LjVhLjUuNSAwIDAgMSAuNS0uNWgyYS41LjUgMCAwIDEgMCAxaC0yYS41LjUgMCAwIDEtLjUtLjVabS41IDEuNWEuNS41IDAgMCAwLS41LjV2NGEuNS41IDAgMCAwIC41LjVoMmEuNS41IDAgMCAwIC41LS41di00YS41LjUgMCAwIDAtLjUtLjVoLTJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDBoMTFhMiAyIDAgMCAxIDIgMnYxMWEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJabTAgMWExIDEgMCAwIDAtMSAxdjExYTEgMSAwIDAgMCAxIDFoMTFhMSAxIDAgMCAwIDEtMVYyYTEgMSAwIDAgMC0xLTFIMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVzcWxWaXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRXhpdCA9IGZ1bmN0aW9uIEV1aUljb25FeGl0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyLjUzNSAxMi40OTNhLjQ3LjQ3IDAgMCAxIC40NjguNDY4djIuNTY0YS40NzMuNDczIDAgMCAxLS40NjYuNDc1SDNWMEgxMi41OTVhLjQ1LjQ1IDAgMCAxIC4zOTguNDYzdjIuNTY1YS40NjkuNDY5IDAgMCAxLS40NjguNDY3aC0uMDY1YS40NjguNDY4IDAgMCAxLS40NjctLjQ2N1YxSDR2MTRoOC4wMWwtLjAwNy0yLjA0YzAtLjI1Ny4yMS0uNDY3LjQ2Ny0uNDY3aC4wNjVabS0xLjA5Ni03LjU5IDIuMTIxIDIuMTIyYTEuNSAxLjUgMCAwIDEgMCAyLjEyMWwtMi4xMiAyLjEyMmEuNS41IDAgMSAxLS43MDgtLjcwOGwyLjEyMS0yLjEyYS41LjUgMCAwIDAgMC0uNzA4bC0yLjEyMS0yLjEyMWEuNS41IDAgMCAxIC43MDctLjcwN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4aXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRXhwYW5kID0gZnVuY3Rpb24gRXVpSWNvbkV4cGFuZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm00LjM1NCAxMi4zNTQgOC04YS41LjUgMCAwIDAtLjcwOC0uNzA4bC04IDhhLjUuNSAwIDAgMCAuNzA4LjcwOFpNMSAxMC41YS41LjUgMCAxIDEgMSAwdjNhLjUuNSAwIDAgMCAuNS41aDNhLjUuNSAwIDEgMSAwIDFoLTNBMS41IDEuNSAwIDAgMSAxIDEzLjV2LTNabTE0LTVhLjUuNSAwIDEgMS0xIDB2LTNhLjUuNSAwIDAgMC0uNS0uNWgtM2EuNS41IDAgMSAxIDAtMWgzQTEuNSAxLjUgMCAwIDEgMTUgMi41djNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FeHBhbmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRXhwYW5kTWluaSA9IGZ1bmN0aW9uIEV1aUljb25FeHBhbmRNaW5pKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNzA3IDEwIDEwIDYuNzA3QS41LjUgMCAwIDAgOS4yOTMgNkw2IDkuMjkzYS41LjUgMCAxIDAgLjcwNy43MDdaTTQgOS41YS41LjUgMCAwIDEgMSAwdjFhLjUuNSAwIDAgMCAuNS41aDFhLjUuNSAwIDEgMSAwIDFoLTFBMS41IDEuNSAwIDAgMSA0IDEwLjV2LTFabTgtM2EuNS41IDAgMSAxLTEgMHYtMWEuNS41IDAgMCAwLS41LS41aC0xYS41LjUgMCAwIDEgMC0xaDFBMS41IDEuNSAwIDAgMSAxMiA1LjV2MVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4cGFuZE1pbmk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRXhwb3J0ID0gZnVuY3Rpb24gRXVpSWNvbkV4cG9ydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTA1IDFjLjQyMi0uMDAzLjg0NC4xNyAxLjE2Ni41MTZsMS45NSAyLjA1Yy4yMTMuMjI4LjIxMy42IDAgLjgyOGEuNTIuNTIgMCAwIDEtLjc3MSAwTDkgMi40NTF2Ny45OTNjMCAuMzA3LS4yMjQuNTU2LS41LjU1NnMtLjUtLjI0OS0uNS0uNTU2di03Ljk2bC0xLjgyIDEuOTFhLjUyLjUyIDAgMCAxLS43NyAwIC42MTcuNjE3IDAgMCAxIDAtLjgyOWwxLjk1LTIuMDVBMS41NzUgMS41NzUgMCAwIDEgOC41IDFoLjAwNVpNNC4xOCA3Yy0uNDczIDAtLjg4LjI5NC0uOTcyLjcwM2wtMS4xODkgNS4yNWEuNzc2Ljc3NiAwIDAgMC0uMDE5LjE3MmMwIC40ODMuNDQ0Ljg3NS45OS44NzVIMTQuMDFjLjA2NSAwIC4xMy0uMDA2LjE5NC0uMDE3LjUzNy0uMDk1Ljg4NS0uNTU2Ljc3OC0xLjAzbC0xLjE5LTUuMjVDMTMuNyA3LjI5NCAxMy4yOTMgNyAxMi44MjIgN0g0LjE4Wk02IDZ2MWg1VjZoMS44MjVjLjk0NiAwIDEuNzYuNjA2IDEuOTQ2IDEuNDQ3bDEuMTkgNS40Yy4yMTUuOTc1LS40ODIgMS45MjMtMS41NTYgMi4xMThhMi4xOCAyLjE4IDAgMCAxLS4zOS4wMzVIMi45ODVDMS44ODggMTUgMSAxNC4xOTQgMSAxMy4yYzAtLjExOS4wMTMtLjIzNy4wMzktLjM1M2wxLjE5LTUuNEMyLjQxNCA2LjYwNiAzLjIyOSA2IDQuMTc0IDZINlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4cG9ydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FeWUgPSBmdW5jdGlvbiBFdWlJY29uRXllKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuOTggNy44NzNjLjAxMy4wMy4wMi4wNjQuMDIuMDk4di4wNmEuMjQuMjQgMCAwIDEtLjAyLjA5N0MxNS45NTIgOC4xODggMTMuMjkxIDE0IDggMTRTLjA0NyA4LjE4OC4wMiA4LjEyOEEuMjQuMjQgMCAwIDEgMCA4LjAzdi0uMDU5YzAtLjAzNC4wMDctLjA2OC4wMi0uMDk4Qy4wNDggNy44MTMgMi43MDkgMiA4IDJzNy45NTMgNS44MTMgNy45OCA1Ljg3M1ptLTEuMzctLjQyNGExMi4wOTcgMTIuMDk3IDAgMCAwLTEuMzg1LTEuODYyQzExLjczOSAzLjk1NiA5Ljk5OSAzIDggM2MtMiAwLTMuNzQuOTU2LTUuMjI1IDIuNTg3YTEyLjA5OCAxMi4wOTggMCAwIDAtMS43MDEgMi40MTQgMTIuMDk1IDEyLjA5NSAwIDAgMCAxLjcgMi40MTNDNC4yNiAxMi4wNDMgNi4wMDIgMTMgOCAxM3MzLjc0LS45NTYgNS4yMjUtMi41ODdBMTIuMDk3IDEyLjA5NyAwIDAgMCAxNC45MjYgOGMtLjA4LS4xNS0uMTg5LS4zNDMtLjMxNS0uNTUxWk04IDQuNzVBMy4yNTMgMy4yNTMgMCAwIDEgMTEuMjUgOCAzLjI1NCAzLjI1NCAwIDAgMSA4IDExLjI1IDMuMjUzIDMuMjUzIDAgMCAxIDQuNzUgOCAzLjI1MiAzLjI1MiAwIDAgMSA4IDQuNzVabTAgMUM2Ljc2IDUuNzUgNS43NSA2Ljc2IDUuNzUgOFM2Ljc2IDEwLjI1IDggMTAuMjUgMTAuMjUgOS4yNCAxMC4yNSA4IDkuMjQgNS43NSA4IDUuNzVabTAgMS41YS43NS43NSAwIDEgMCAwIDEuNS43NS43NSAwIDAgMCAwLTEuNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV5ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FeWVDbG9zZWQgPSBmdW5jdGlvbiBFdWlJY29uRXllQ2xvc2VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtNS4zMTggMTMuNDcuNzc2LS43NzZBNi4wNCA2LjA0IDAgMCAwIDggMTNjMS45OTkgMCAzLjc0LS45NTYgNS4yMjUtMi41ODdBMTIuMDk3IDEyLjA5NyAwIDAgMCAxNC45MjYgOGExMi4wOTcgMTIuMDk3IDAgMCAwLTEuNzAxLTIuNDEzbC0uMDExLS4wMTIuNzA3LS43MDhjMS4zNTkgMS40NzYgMi4wNDUgMi45NzYgMi4wNTggMy4wMDYuMDE0LjAzLjAyMS4wNjQuMDIxLjA5OHYuMDZhLjI0LjI0IDAgMCAxLS4wMi4wOTdDMTUuOTUyIDguMTg4IDEzLjI5MSAxNCA4IDE0YTcuMDMgNy4wMyAwIDAgMS0yLjY4Mi0uNTNaTTIuMDQgMTEuMDkyQy43MDcgOS42MjkuMDM0IDguMTU4LjAyIDguMTI4QS4yNC4yNCAwIDAgMSAwIDguMDN2LS4wNTljMC0uMDM0LjAwNy0uMDY4LjAyLS4wOThDLjA0OCA3LjgxMyAyLjcwOSAyIDggMmMuOTYyIDAgMS44MzcuMTkyIDIuNjI1LjUwN2wtLjc4Ljc4QTYuMDM5IDYuMDM5IDAgMCAwIDggM2MtMiAwLTMuNzQuOTU2LTUuMjI1IDIuNTg3YTEyLjA5OCAxMi4wOTggMCAwIDAtMS43MDEgMi40MTQgMTIuMTEgMTIuMTEgMCAwIDAgMS42NzQgMi4zODNsLS43MDguNzA4Wk04LjM2MiA0Ljc3IDcuMjU1IDUuODc3YTIuMjYyIDIuMjYyIDAgMCAwLTEuMzc4IDEuMzc4TDQuNzcgOC4zNjJBMy4yNTIgMy4yNTIgMCAwIDEgOC4zNjIgNC43N1ptMi44NiAyLjc5N2EzLjI1NCAzLjI1NCAwIDAgMS0zLjY1NCAzLjY1NGwxLjA2LTEuMDZhMi4yNjIgMi4yNjIgMCAwIDAgMS41MzMtMS41MzNsMS4wNi0xLjA2Wm0tOS4zNjggNy4yODdhLjUuNSAwIDAgMS0uNzA4LS43MDhsMTMtMTNhLjUuNSAwIDAgMSAuNzA4LjcwOGwtMTMgMTNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FeWVDbG9zZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmFjZUhhcHB5ID0gZnVuY3Rpb24gRXVpSWNvbkZhY2VIYXBweShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTZBOCA4IDAgMSAxIDggMGE4IDggMCAwIDEgMCAxNlptMC0xLjA2N0E2LjkzMyA2LjkzMyAwIDEgMCA4IDEuMDY3YTYuOTMzIDYuOTMzIDAgMCAwIDAgMTMuODY2Wk01LjMzMyA2LjRhMS4wNjcgMS4wNjcgMCAxIDEgMC0yLjEzMyAxLjA2NyAxLjA2NyAwIDAgMSAwIDIuMTMzWm01LjMzNCAwYTEuMDY3IDEuMDY3IDAgMSAxIDAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwIDEgMCAyLjEzM1pNMi43MzkgOC44MDJhLjUzMy41MzMgMCAwIDEgLjkyMi0uNTM3QzQuODE1IDEwLjI0NSA2LjI0OSAxMS4yIDggMTEuMmMxLjc1IDAgMy4xODUtLjk1NiA0LjM0LTIuOTM1YS41MzMuNTMzIDAgMCAxIC45Mi41MzdjLTEuMzMzIDIuMjg3LTMuMSAzLjQ2NS01LjI2IDMuNDY1LTIuMTYgMC0zLjkyNy0xLjE3OC01LjI2LTMuNDY1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmFjZUhhcHB5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZhY2VOZXV0cmFsID0gZnVuY3Rpb24gRXVpSWNvbkZhY2VOZXV0cmFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMTZBOCA4IDAgMSAxIDggMGE4IDggMCAwIDEgMCAxNnptMC0xLjA2N0E2LjkzMyA2LjkzMyAwIDEgMCA4IDEuMDY3YTYuOTMzIDYuOTMzIDAgMCAwIDAgMTMuODY2ek01LjMzMyA2LjRhMS4wNjcgMS4wNjcgMCAxIDEgMC0yLjEzMyAxLjA2NyAxLjA2NyAwIDAgMSAwIDIuMTMzem01LjMzNCAwYTEuMDY3IDEuMDY3IDAgMSAxIDAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwIDEgMCAyLjEzM3pNMy4yIDEwLjY2N2EuNTMzLjUzMyAwIDAgMSAwLTEuMDY3aDkuNmEuNTMzLjUzMyAwIDEgMSAwIDEuMDY3SDMuMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZhY2VOZXV0cmFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZhY2VTYWQgPSBmdW5jdGlvbiBFdWlJY29uRmFjZVNhZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTZBOCA4IDAgMSAxIDggMGE4IDggMCAwIDEgMCAxNlptMC0xLjA2N0E2LjkzMyA2LjkzMyAwIDEgMCA4IDEuMDY3YTYuOTMzIDYuOTMzIDAgMCAwIDAgMTMuODY2Wk01LjMzMyA2LjRhMS4wNjcgMS4wNjcgMCAxIDEgMC0yLjEzMyAxLjA2NyAxLjA2NyAwIDAgMSAwIDIuMTMzWm01LjMzNCAwYTEuMDY3IDEuMDY3IDAgMSAxIDAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwIDEgMCAyLjEzM1ptMi40ODcgMy44NjhhLjUzMy41MzMgMCAxIDEtLjcwOC43OTdDMTAuOTM2IDkuNzI1IDkuNDU4IDkuMDY3IDggOS4wNjdjLTEuNDU4IDAtMi45MzcuNjU3LTQuNDQ2IDEuOTk4YS41MzMuNTMzIDAgMSAxLS43MDgtLjc5N0M0LjUzNiA4Ljc2NSA2LjI1OCA4IDggOHMzLjQ2My43NjUgNS4xNTQgMi4yNjhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GYWNlU2FkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZpZWxkU3RhdGlzdGljcyA9IGZ1bmN0aW9uIEV1aUljb25GaWVsZFN0YXRpc3RpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDFoMTBhMiAyIDAgMCAxIDIgMnY0LjMzN2E1LjUzMyA1LjUzMyAwIDAgMC0xLTEuMDhWM2ExIDEgMCAwIDAtMS0xSDNhMSAxIDAgMCAwLTEgMXYxMGExIDEgMCAwIDAgMSAxaDMuMjU3Yy4zMTQuMzguNjc3LjcxNiAxLjA4IDFIM2EyIDIgMCAwIDEtMi0yVjNhMiAyIDAgMCAxIDItMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMuNSA2aDMuODM3YTUuNTQgNS41NCAwIDAgMC0xLjA4IDFIMy41YS41LjUgMCAwIDEgMC0xWm0wIDZoMS43MDdjLjA5OC4zNDUuMjI4LjY3Ny4zODguOTkxQS41MDUuNTA1IDAgMCAxIDUuNSAxM2gtMmEuNS41IDAgMCAxIDAtMVptMC04YS41LjUgMCAwIDEgMC0xaDlhLjUuNSAwIDAgMSAwIDFoLTlaTTMgOS41YS41LjUgMCAwIDAgLjUuNWgxYS41LjUgMCAwIDAgMC0xaC0xYS41LjUgMCAwIDAtLjUuNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNSAxMC41YTQuNSA0LjUgMCAxIDEtOSAwIDQuNSA0LjUgMCAwIDEgOSAwWm0tMi4xNDYtMi4zNTRhLjUuNSAwIDAgMSAwIC43MDhsLTQgNGEuNS41IDAgMCAxLS43MDgtLjcwOGw0LTRhLjUuNSAwIDAgMSAuNzA4IDBaTTkgMTBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm00IDJhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmllbGRTdGF0aXN0aWNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZpbHRlciA9IGZ1bmN0aW9uIEV1aUljb25GaWx0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDUuNWEuNS41IDAgMCAxIC41LS41aDlhLjUuNSAwIDAgMSAwIDFoLTlhLjUuNSAwIDAgMS0uNS0uNVptMiAzYS41LjUgMCAwIDEgLjUtLjVoNWEuNS41IDAgMCAxIDAgMWgtNWEuNS41IDAgMCAxLS41LS41Wk03LjUgMTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMWgtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZpbHRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GaWx0ZXJFeGNsdWRlID0gZnVuY3Rpb24gRXVpSWNvbkZpbHRlckV4Y2x1ZGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAxYS41LjUgMCAwIDAgMCAxaDlhLjUuNSAwIDAgMCAwLTFoLTlaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTYgMTEuNWE0LjUgNC41IDAgMSAxLTkgMCA0LjUgNC41IDAgMCAxIDkgMFptLTggMGEuNS41IDAgMCAxIC41LS41aDZhLjUuNSAwIDAgMSAwIDFoLTZhLjUuNSAwIDAgMS0uNS0uNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgNC41YS41LjUgMCAwIDEgLjUtLjVoNWEuNS41IDAgMCAxIDAgMWgtNWEuNS41IDAgMCAxLS41LS41Wk00LjUgN2EuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xaC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmlsdGVyRXhjbHVkZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GaWx0ZXJJZ25vcmUgPSBmdW5jdGlvbiBFdWlJY29uRmlsdGVySWdub3JlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNLjUgMWEuNS41IDAgMCAwIDAgMWg5YS41LjUgMCAwIDAgMC0xaC05Wk0yIDQuNWEuNS41IDAgMCAxIC41LS41aDVhLjUuNSAwIDAgMSAwIDFoLTVhLjUuNSAwIDAgMS0uNS0uNVptMiAzYS41LjUgMCAwIDEgLjUtLjVoMWEuNS41IDAgMCAxIDAgMWgtMWEuNS41IDAgMCAxLS41LS41Wk0xNiAxMS41YTQuNSA0LjUgMCAxIDEtOSAwIDQuNSA0LjUgMCAwIDEgOSAwWm0tNC41LS43MDdMOS44NTQgOS4xNDZhLjUuNSAwIDEgMC0uNzA4LjcwOGwxLjY0NyAxLjY0Ni0xLjY0NyAxLjY0NmEuNS41IDAgMCAwIC43MDguNzA4bDEuNjQ2LTEuNjQ3IDEuNjQ2IDEuNjQ3YS41LjUgMCAwIDAgLjcwOC0uNzA4TDEyLjIwNyAxMS41bDEuNjQ3LTEuNjQ2YS41LjUgMCAwIDAtLjcwOC0uNzA4TDExLjUgMTAuNzkzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmlsdGVySWdub3JlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZpbHRlckluQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvbkZpbHRlckluQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuOTk5IDE1Ljk5OWE4IDggMCAxIDEgMC0xNiA4IDggMCAwIDEgMCAxNlpNOCAxNUE3IDcgMCAxIDAgOCAxYTcgNyAwIDAgMCAwIDE0Wk0zLjUgNWg5YS41LjUgMCAxIDEgMCAxaC05YS41LjUgMCAwIDEgMC0xWm0yIDNoNWEuNS41IDAgMSAxIDAgMWgtNWEuNS41IDAgMCAxIDAtMVptMiAzaDFhLjUuNSAwIDEgMSAwIDFoLTFhLjUuNSAwIDEgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GaWx0ZXJJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GaWx0ZXJJbmNsdWRlID0gZnVuY3Rpb24gRXVpSWNvbkZpbHRlckluY2x1ZGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAxYS41LjUgMCAwIDAgMCAxaDlhLjUuNSAwIDAgMCAwLTFoLTlaTTE2IDExLjVhNC41IDQuNSAwIDEgMS05IDAgNC41IDQuNSAwIDAgMSA5IDBabS00LTNhLjUuNSAwIDAgMC0xIDBWMTFIOC41YS41LjUgMCAwIDAgMCAxSDExdjIuNWEuNS41IDAgMCAwIDEgMFYxMmgyLjVhLjUuNSAwIDAgMCAwLTFIMTJWOC41Wk0yIDQuNWEuNS41IDAgMCAxIC41LS41aDVhLjUuNSAwIDAgMSAwIDFoLTVhLjUuNSAwIDAgMS0uNS0uNVpNNC41IDdhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMWgtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZpbHRlckluY2x1ZGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmxhZyA9IGZ1bmN0aW9uIEV1aUljb25GbGFnKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy42ODYgOC40NjRjMS41NDctLjYxOSAzLjA4LS42MTkgNC42MjggMEEuNS41IDAgMCAwIDEzIDhWMmEuNS41IDAgMCAwLS4yNzYtLjQ0N0MxMS4yNTkuODIgOS40NTguODIgNy4zNDIgMS41MjZjLTEuODg0LjYyOC0zLjQxNy42MjgtNC42MTguMDI3QS41LjUgMCAwIDAgMiAydjEyLjVhLjUuNSAwIDEgMCAxIDBWOC41NTNjMS40MTEuNjI3IDIuOTgzLjU5MiA0LjY4Ni0uMDg5Wk0zIDIuNzQxYzEuMzIyLjQyIDIuODc4LjMyNyA0LjY1OC0uMjY3QzkuNCAxLjg5NCAxMC44NDMgMS44NSAxMiAyLjMyMnY0Ljk3NWMtMS41Ni0uNDY0LTMuMTI4LS4zODQtNC42ODYuMjM5LTEuNTQuNjE2LTIuODkyLjYxNi00LjA5LjAxN0EuNDk4LjQ5OCAwIDAgMCAzIDcuNVYyLjc0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmxhZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Gb2xkID0gZnVuY3Rpb24gRXVpSWNvbkZvbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjE0LjE5MiA3LjUzIDIuNDlhLjY3LjY3IDAgMCAwIC45NDIgMEwxMC44Ni4xOTJhLjY3Ny42NzcgMCAwIDEgLjk0NCAwIC42NS42NSAwIDAgMSAwIC45M2wtMi4zODggMi4zYTIuMDIgMi4wMiAwIDAgMS0yLjgzMiAwbC0yLjM4OC0yLjNhLjY1LjY1IDAgMCAxIDAtLjkzLjY3Ny42NzcgMCAwIDEgLjk0NCAwem0wIDE1LjYxNiAyLjM5LTIuMjk4YS42Ny42NyAwIDAgMSAuOTQyIDBsMi4zODkgMi4yOThjLjI2LjI1Ni42ODUuMjU2Ljk0NCAwYS42NS42NSAwIDAgMCAwLS45M2wtMi4zODgtMi4zYTIuMDIgMi4wMiAwIDAgMC0yLjgzMiAwbC0yLjM4OCAyLjNhLjY1LjY1IDAgMCAwIDAgLjkzYy4yNi4yNTYuNjgzLjI1Ni45NDQgMHpNMTYgNkgwdjRoMTZWNnpNMSA5VjdoMTR2MkgxelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Gb2xkZXJDaGVjayA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkZXJDaGVjayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJIMXYxMWg2LjFjLjA3LjM0OC4xNzcuNjgyLjMxNiAxSDFhMSAxIDAgMCAxLTEtMVYyYTEgMSAwIDAgMSAxLTFoNS4yNWEuNzUuNzUgMCAwIDEgLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMCAxIDEgMXYzLjQxNmE0Ljk2MiA0Ljk2MiAwIDAgMC0xLS4zMTZWNEg3LjEyNUExLjEyNSAxLjEyNSAwIDAgMSA2IDIuODc1VjJ6bTEwIDEwYTQgNCAwIDEgMS04IDAgNCA0IDAgMCAxIDggMHptLTEuNjQ2LTEuMzU0YS41LjUgMCAwIDEgMCAuNzA4bC0yLjUgMi41YS41LjUgMCAwIDEtLjcwOCAwbC0xLTFhLjUuNSAwIDAgMSAuNzA4LS43MDhsLjY0Ni42NDcgMi4xNDYtMi4xNDdhLjUuNSAwIDAgMSAuNzA4IDB6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Gb2xkZXJDaGVjazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Gb2xkZXJDbG9zZWQgPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyQ2xvc2VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAySDJ2MTFoMTJWNEg4LjEyNUExLjEyNSAxLjEyNSAwIDAgMSA3IDIuODc1VjJ6bS4yNS0xYS43NS43NSAwIDAgMSAuNzUuNzV2MS4xMjVjMCAuMDY5LjA1Ni4xMjUuMTI1LjEyNUgxNGExIDEgMCAwIDEgMSAxdjlhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xaDUuMjV6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Gb2xkZXJDbG9zZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRm9sZGVyRXhjbGFtYXRpb24gPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyRXhjbGFtYXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJtMSA5LjUuODI2LTMuNzE3QTEgMSAwIDAgMSAyLjgwMiA1SDEzVjRINy4xMjVBMS4xMjUgMS4xMjUgMCAwIDEgNiAyLjg3NVYySDF2Ny41em0uMjQ3IDMuNUg3LjFjLjA3LjM0OC4xNzcuNjgyLjMxNiAxSDFhMSAxIDAgMCAxLTEtMVYyYTEgMSAwIDAgMSAxLTFoNS4yNWEuNzUuNzUgMCAwIDEgLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMCAxIDEgMXYxaC43NTNhMSAxIDAgMCAxIC45NzcgMS4yMTdsLS40NDcgMi4wMTFhNS4wMTUgNS4wMTUgMCAwIDAtLjg4Ny0uNjE4TDE0Ljc1MyA2SDIuODAzbC0xLjU1NiA3ek0xNiAxMmE0IDQgMCAxIDEtOCAwIDQgNCAwIDAgMSA4IDB6bS00IC41YS41NzcuNTc3IDAgMCAxLS41Ny0uNDk1bC0uMjktMi4wMTVhLjg2Ny44NjcgMCAxIDEgMS43MTggMGwtLjI4OCAyLjAxNWEuNTc3LjU3NyAwIDAgMS0uNTcuNDk1em0wIDIuNWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Gb2xkZXJPcGVuID0gZnVuY3Rpb24gRXVpSWNvbkZvbGRlck9wZW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xIDkuNS44MjYtMy43MTdBMSAxIDAgMCAxIDIuODAyIDVIMTNWNEg3LjEyNUExLjEyNSAxLjEyNSAwIDAgMSA2IDIuODc1VjJIMXY3LjV6bS4yNDcgMy41aDExLjk1bDEuNTU2LTdIMi44MDNsLTEuNTU2IDd6TTEzIDE0SDFhMSAxIDAgMCAxLTEtMVYyYTEgMSAwIDAgMSAxLTFoNS4yNWEuNzUuNzUgMCAwIDEgLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMCAxIDEgMXYxaC43NTNhMSAxIDAgMCAxIC45NzcgMS4yMTdsLTEuNTU2IDdhMSAxIDAgMCAxLS45NzYuNzgzSDEzelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyT3BlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GcmFtZU5leHQgPSBmdW5jdGlvbiBFdWlJY29uRnJhbWVOZXh0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAyYTEgMSAwIDAgMC0xIDF2MTBhMSAxIDAgMSAwIDIgMFYzYTEgMSAwIDAgMC0xLTF6bTUuMTQ2LjIyIDcuMiA0LjU4MWExLjQyNSAxLjQyNSAwIDAgMSAwIDIuMzk4bC03LjIgNC41ODFDNy4yMSAxNC4zNzUgNiAxMy42OTIgNiAxMi41ODFWMy40MmMwLTEuMTEyIDEuMjEtMS43OTUgMi4xNDYtMS4yelwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZyYW1lTmV4dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GcmFtZVByZXZpb3VzID0gZnVuY3Rpb24gRXVpSWNvbkZyYW1lUHJldmlvdXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAyYTEgMSAwIDAgMSAxIDF2MTBhMSAxIDAgMSAxLTIgMFYzYTEgMSAwIDAgMSAxLTF6bS01LjE0Ni4yMi03LjIgNC41ODFhMS40MjUgMS40MjUgMCAwIDAgMCAyLjM5OGw3LjIgNC41ODFjLjkzNi41OTUgMi4xNDYtLjA4OCAyLjE0Ni0xLjE5OVYzLjQyYzAtMS4xMTEtMS4yMS0xLjc5NC0yLjE0Ni0xLjE5OXpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GcmFtZVByZXZpb3VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZ1bGxTY3JlZW5FeGl0ID0gZnVuY3Rpb24gRXVpSWNvbkZ1bGxTY3JlZW5FeGl0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSA3VjNoMXYzaDN2MUg5ek03IDdIM1Y2aDNWM2gxdjR6bTIgMmg0djFoLTN2M0g5Vjl6TTcgOXY0SDZ2LTNIM1Y5aDR6TTAgMS45OTRDMCAuODkzLjg5NSAwIDEuOTk0IDBoMTIuMDEyQzE1LjEwNyAwIDE2IC44OTUgMTYgMS45OTR2MTIuMDEyQTEuOTk1IDEuOTk1IDAgMCAxIDE0LjAwNiAxNkgxLjk5NEExLjk5NSAxLjk5NSAwIDAgMSAwIDE0LjAwNlYxLjk5NHptMSAwdjEyLjAxMmMwIC41NDguNDQ2Ljk5NC45OTQuOTk0aDEyLjAxMmEuOTk1Ljk5NSAwIDAgMCAuOTk0LS45OTRWMS45OTRBLjk5NS45OTUgMCAwIDAgMTQuMDA2IDFIMS45OTRBLjk5NS45OTUgMCAwIDAgMSAxLjk5NHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZ1bGxTY3JlZW5FeGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBFdWlJY29uRnVsbFNjcmVlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMyAzdjRoLTFWNEg5VjNoNFpNMyAzaDR2MUg0djNIM1YzWm0xMCAxMEg5di0xaDNWOWgxdjRaTTMgMTNWOWgxdjNoM3YxSDNaTTAgMS45OTRDMCAuODkzLjg5NSAwIDEuOTk0IDBoMTIuMDEyQzE1LjEwNyAwIDE2IC44OTUgMTYgMS45OTR2MTIuMDEyQTEuOTk1IDEuOTk1IDAgMCAxIDE0LjAwNiAxNkgxLjk5NEExLjk5NSAxLjk5NSAwIDAgMSAwIDE0LjAwNlYxLjk5NFptMSAwdjEyLjAxMmMwIC41NDguNDQ2Ljk5NC45OTQuOTk0aDEyLjAxMmEuOTk1Ljk5NSAwIDAgMCAuOTk0LS45OTRWMS45OTRBLjk5NS45OTUgMCAwIDAgMTQuMDA2IDFIMS45OTRBLjk5NS45OTUgMCAwIDAgMSAxLjk5NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZ1bGxTY3JlZW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRnVuY3Rpb24gPSBmdW5jdGlvbiBFdWlJY29uRnVuY3Rpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAyLjIyNnYyLjIxOGMtLjM1OS0uMTQzLS44NDUtLjIxOC0xLjMxNS0uMjE4LTEuMDU5IDAtMS42MzEuNTE5LTEuODAyIDEuNTY1bC0uMTY4LjkzN2gyLjc5OHYyLjE1OUg5LjQxbC0uMzEzIDEuNjc0QzguNjk2IDEyLjk4NyA3LjI2MSAxNCA0Ljc4NSAxNGMtLjcxOCAwLTEuMzUtLjA5Mi0xLjc4NS0uMjUxdi0yLjI0M2MuNDE4LjE3Ni45MDUuMjY4IDEuMzgzLjI2OCAxLjAwOCAwIDEuNTQ2LS40MzUgMS43MjUtMS41MjNsLjI0LTEuMzY0SDMuNzg3VjYuNzI4aDIuODEybC4yODgtMS4yNjRDNy4yODYgMy4wNzEgOC42NjIgMiAxMS4zNTIgMmMuNTk4IDAgMS4zMDYuMSAxLjY0OC4yMjZ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GdW5jdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25HZWFyID0gZnVuY3Rpb24gRXVpSWNvbkdlYXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uMTY0IDEwLjMyOSAxLjg3IDggLjE2MyA1LjY3Yy4xOC0uNjAxLjQzLTEuMTkuNzU4LTEuNzU3YTguMTk3IDguMTk3IDAgMCAxIDEuMTQyLTEuNTM1bDIuODcyLjMxM0w2LjA5OS4wNWE4LjE2NiA4LjE2NiAwIDAgMSAzLjgtLjAwM2wxLjE2NiAyLjY0NCAyLjg3Mi0uMzEzYTguMTY2IDguMTY2IDAgMCAxIDEuODk5IDMuMjkzTDE0LjEzIDhsMS43MDYgMi4zM2MtLjE4LjYwMS0uNDMgMS4xOS0uNzU4IDEuNzU3YTguMTk3IDguMTk3IDAgMCAxLTEuMTQyIDEuNTM1bC0yLjg3Mi0uMzEzLTEuMTY0IDIuNjQxYTguMTY2IDguMTY2IDAgMCAxLTMuOC4wMDNsLTEuMTY2LTIuNjQ0LTIuODcyLjMxM2E4LjE2NiA4LjE2NiAwIDAgMS0xLjg5OS0zLjI5M1ptNC42NjMgMS45ODZhMSAxIDAgMCAxIDEuMDIzLjU5MWwuOTU3IDIuMTdjLjc5LjEzNCAxLjU5Ny4xMzIgMi4zODctLjAwMWwuOTU2LTIuMTY5YTEgMSAwIDAgMSAxLjAyMy0uNTlsMi4zNTguMjU2YTcuMjMgNy4yMyAwIDAgMCAxLjE5NC0yLjA2OGwtMS40MDEtMS45MTNhMSAxIDAgMCAxIDAtMS4xODJsMS40LTEuOTEyYTcuMTY1IDcuMTY1IDAgMCAwLTEuMTkyLTIuMDY5bC0yLjM1OS4yNTdhMSAxIDAgMCAxLTEuMDIzLS41OTFMOS4xOTMuOTI0YTcuMTY1IDcuMTY1IDAgMCAwLTIuMzg3LjAwMUw1Ljg1IDMuMDk0YTEgMSAwIDAgMS0xLjAyMy41OWwtMi4zNTgtLjI1NmE3LjIzIDcuMjMgMCAwIDAtMS4xOTQgMi4wNjhsMS40MDEgMS45MTNhMSAxIDAgMCAxIDAgMS4xODJsLTEuNCAxLjkxMmMuMjguNzUxLjY4MSAxLjQ1IDEuMTkyIDIuMDY5bDIuMzU5LS4yNTdaTTggMTFhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2Wm0wLTFhMiAyIDAgMSAwIDAtNCAyIDIgMCAwIDAgMCA0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR2VhcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25HbGFzc2VzID0gZnVuY3Rpb24gRXVpSWNvbkdsYXNzZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjAzNSA5QTMuNSAzLjUgMCAwIDEgMTUgNy4wNVY0LjVjMC0xLjA3Mi0uNjQ4LTEuNzItMi4wOTgtMi4wMWEuNS41IDAgMCAxIC4xOTYtLjk4QzE0Ljk4MSAxLjg4NiAxNiAyLjkwNSAxNiA0LjV2NC4yNWMwIC4wNzItLjAxNS4xNC0uMDQzLjIwMkEzLjUgMy41IDAgMSAxIDkuMDM1IDEwaC0yLjA3QTMuNSAzLjUgMCAxIDEgLjA0MyA4Ljk1Mi40OTguNDk4IDAgMCAxIDAgOC43NVY0LjVjMC0xLjU5NSAxLjAxOS0yLjYxNCAyLjkwMi0yLjk5YS41LjUgMCAwIDEgLjE5Ni45OEMxLjY0OCAyLjc4IDEgMy40MjggMSA0LjV2Mi41NUEzLjUgMy41IDAgMCAxIDYuOTY1IDloMi4wN1pNMy41IDEyYTIuNSAyLjUgMCAxIDAgMC01IDIuNSAyLjUgMCAwIDAgMCA1Wm05IDBhMi41IDIuNSAwIDEgMCAwLTUgMi41IDIuNSAwIDAgMCAwIDVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HbGFzc2VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkdsb2JlID0gZnVuY3Rpb24gRXVpSWNvbkdsb2JlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS4wMTkgOGE2LjQ2MiA2LjQ2MiAwIDAgMCAxLjAwMyAzaDIuMzgyYTE0LjQ2OSAxNC40NjkgMCAwIDEtLjM5Ni0zaC0yLjk5Wm0wLTFoMi45ODljLjAzMy0xLjA3OC4xNzItMi4wOTQuMzk2LTNIMi4wMjJhNi40NjIgNi40NjIgMCAwIDAtMS4wMDMgM1pNMTMuOTggOGgtMi45ODlhMTQuNDY5IDE0LjQ2OSAwIDAgMS0uMzk2IDNoMi4zODJhNi40NjIgNi40NjIgMCAwIDAgMS4wMDMtM1ptMC0xYTYuNDYyIDYuNDYyIDAgMCAwLTEuMDAzLTNoLTIuMzgyYy4yMjQuOTA2LjM2MyAxLjkyMi4zOTYgM2gyLjk5Wk01LjAwOCA4Yy4wMzcgMS4xMDcuMTk1IDIuMTI3LjQyOSAzaDQuMTI2Yy4yMzQtLjg3My4zOTItMS44OTMuNDI5LTNINS4wMDhabTAtMWg0Ljk4NGExMy40MjIgMTMuNDIyIDAgMCAwLS40MjktM0g1LjQzN2ExMy40MjIgMTMuNDIyIDAgMCAwLS40MjkgM1pNLjAxNiA4SDBWN2guMDE2YTcuNSA3LjUgMCAwIDEgMTQuOTY4IDBIMTV2MWgtLjAxNkE3LjUgNy41IDAgMCAxIC4wMTYgOFptMi43OTQgNGE2LjUwMSA2LjUwMSAwIDAgMCAyLjcxNyAxLjY5NUE3LjMxNSA3LjMxNSAwIDAgMSA0LjcgMTJIMi44MVptOS4zOCAwSDEwLjNjLS4yMy42NTctLjUxIDEuMjMtLjgyNyAxLjY5NUE2LjUwMSA2LjUwMSAwIDAgMCAxMi4xOSAxMlptLTYuNDI4IDBjLjQ4NCAxLjI0IDEuMTMyIDIgMS43MzggMiAuNjA2IDAgMS4yNTQtLjc2IDEuNzM4LTJINS43NjJaTTIuODEgM0g0LjdjLjIzLS42NTcuNTEtMS4yMy44MjctMS42OTVBNi41MDEgNi41MDEgMCAwIDAgMi44MSAzWm05LjM4IDBhNi41MDEgNi41MDEgMCAwIDAtMi43MTctMS42OTVjLjMxNy40NjUuNTk3IDEuMDM4LjgyNyAxLjY5NWgxLjg5Wk01Ljc2MiAzaDMuNDc2QzguNzU0IDEuNzYgOC4xMDYgMSA3LjUgMWMtLjYwNiAwLTEuMjU0Ljc2LTEuNzM4IDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HbG9iZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25HcmFiID0gZnVuY3Rpb24gRXVpSWNvbkdyYWIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuNSA2Yy4yNzYgMCAuNS4yMzIuNS41IDAgLjI3Ni0uMjI5LjUtLjUuNWgtMTFhLjUwNS41MDUgMCAwIDEtLjUtLjVjMC0uMjc2LjIyOS0uNS41LS41aDExWm0wIDNjLjI3NiAwIC41LjIzMi41LjUgMCAuMjc2LS4yMjkuNS0uNS41aC0xMWEuNTA1LjUwNSAwIDAgMS0uNS0uNWMwLS4yNzYuMjI5LS41LjUtLjVoMTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HcmFiOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkdyYWJPbW5pZGlyZWN0aW9uYWwgPSBmdW5jdGlvbiBFdWlJY29uR3JhYk9tbmlkaXJlY3Rpb25hbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgNWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTQgMGExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaTTcgOGExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBabTMgMWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabS0zIDNhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWm0zIDFhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR3JhYk9tbmlkaXJlY3Rpb25hbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25HcmFiSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIEV1aUljb25HcmFiSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDIuNWMwLS4yNzYuMjMyLS41LjUtLjUuMjc2IDAgLjUuMjI5LjUuNXYxMWMwIC4yNzYtLjIzMi41LS41LjVhLjUwMy41MDMgMCAwIDEtLjUtLjV2LTExWm0zIDBjMC0uMjc2LjIzMi0uNS41LS41LjI3NiAwIC41LjIyOS41LjV2MTFjMCAuMjc2LS4yMzIuNS0uNS41YS41MDMuNTAzIDAgMCAxLS41LS41di0xMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyYWJIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkdyYWRpZW50ID0gZnVuY3Rpb24gRXVpSWNvbkdyYWRpZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgMmExIDEgMCAwIDEgMS0xaDEyYTEgMSAwIDAgMSAxIDF2MTJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTFWMlptNCAwaDF2MTJINVYyWm0zIDEyVjJoMnYxMkg4Wm0zIDBoM1YyaC0zdjEyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR3JhZGllbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uR3JpZCA9IGZ1bmN0aW9uIEV1aUljb25HcmlkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSA1VjFoNHY0SDFabTMtMVYySDJ2MmgyWm0yIDFWMWg0djRINlptMy0xVjJIN3YyaDJabTIgMVYxaDR2NGgtNFptMS0xaDJWMmgtMnYyWk0xIDEwVjZoNHY0SDFabTMtMVY3SDJ2MmgyWm0yIDFWNmg0djRINlptMy0xVjdIN3YyaDJabTIgMVY2aDR2NGgtNFptMy0xVjdoLTJ2MmgyWk0xIDE1di00aDR2NEgxWm0xLTFoMnYtMkgydjJabTQgMXYtNGg0djRINlptMS0xaDJ2LTJIN3YyWm00IDF2LTRoNHY0aC00Wm0xLTFoMnYtMmgtMnYyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR3JpZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25IZWFydCA9IGZ1bmN0aW9uIEV1aUljb25IZWFydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNDAyIDMuMDk4YTMuNzUgMy43NSAwIDAgMC01LjMwNCA1LjMwNGw1LjU1OCA1LjI3TDggMTRsNS44OTItNS41ODhhMy43NSAzLjc1IDAgMSAwLTUuMjk0LTUuMzEzTDggMy42OTdsLS41OTgtLjU5OVpNMi43OTYgNy42ODVhMi43NDcgMi43NDcgMCAwIDEgLjAxLTMuODggMi43NSAyLjc1IDAgMCAxIDMuODg5IDBMOCA1LjExMWwxLjMwNS0xLjMwNmEyLjc1IDIuNzUgMCAxIDEgMy44OSAzLjg5TDggMTIuNjIgMi43OTYgNy42ODVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25IZWFydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25IZWF0bWFwID0gZnVuY3Rpb24gRXVpSWNvbkhlYXRtYXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA5YTMgMyAwIDEgMSAwIDYgMyAzIDAgMCAxIDAtNlptMCAxYTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNFpNNCAyYTIgMiAwIDEgMSAwIDQgMiAyIDAgMCAxIDAtNFptMCAxYTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMlptMCA1YTQgNCAwIDEgMSAwIDggNCA0IDAgMCAxIDAtOFptMCAxYTMgMyAwIDEgMCAwIDYgMyAzIDAgMCAwIDAtNlptOC05YTQgNCAwIDEgMSAwIDggNCA0IDAgMCAxIDAtOFptMCAxYTMgMyAwIDEgMCAwIDYgMyAzIDAgMCAwIDAtNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkhlYXRtYXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSGVscCA9IGZ1bmN0aW9uIEV1aUljb25IZWxwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwibTEzLjYgMTIuMTg2LTEuMzU3LTEuMzU4Yy0uMDI1LS4wMjUtLjA1OC0uMDM0LS4wODQtLjA1Ni41My0uNzk0Ljg0LTEuNzQ2Ljg0LTIuNzczYTQuOTc3IDQuOTc3IDAgMCAwLS44NC0yLjc3MmMuMDI2LS4wMi4wNTktLjAzLjA4NC0uMDU2TDEzLjYgMy44MTNhNi45NiA2Ljk2IDAgMCAxIDAgOC4zNzNaTTggMTVBNi45NTYgNi45NTYgMCAwIDEgMy44MTQgMTMuNmwxLjM1OC0xLjM1OGMuMDI1LS4wMjUuMDM0LS4wNTcuMDU1LS4wODRDNi4wMiAxMi42ODggNi45NzQgMTMgOCAxM2E0Ljk3OCA0Ljk3OCAwIDAgMCAyLjc3My0uODRjLjAyLjAyNi4wMy4wNTguMDU2LjA4M2wxLjM1NyAxLjM1OEE2Ljk1NiA2Ljk1NiAwIDAgMSA4IDE1Wm0tNS42MDEtMi44MTNhNi45NjMgNi45NjMgMCAwIDEgMC04LjM3M2wxLjM1OSAxLjM1OGMuMDI0LjAyNS4wNTcuMDM1LjA4NC4wNTZBNC45NyA0Ljk3IDAgMCAwIDMgOGMwIDEuMDI3LjMxIDEuOTguODQyIDIuNzczLS4wMjcuMDIyLS4wNi4wMzEtLjA4NC4wNTZsLTEuMzYgMS4zNThabTUuNi0uMTg3QTQgNCAwIDEgMSA4IDRhNCA0IDAgMCAxIDAgOFpNOCAxYzEuNTczIDAgMy4wMTkuNTI1IDQuMTg3IDEuNGwtMS4zNTcgMS4zNThjLS4wMjUuMDI1LS4wMzUuMDU3LS4wNTYuMDg0QTQuOTc5IDQuOTc5IDAgMCAwIDggM2E0Ljk3OSA0Ljk3OSAwIDAgMC0yLjc3My44NDJjLS4wMjEtLjAyNy0uMDMtLjA1OS0uMDU1LS4wODRMMy44MTQgMi40QTYuOTU3IDYuOTU3IDAgMCAxIDggMVptMC0xYTguMDAxIDguMDAxIDAgMSAwIC4wMDMgMTYuMDAyQTguMDAxIDguMDAxIDAgMCAwIDggMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkhlbHA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSG9tZSA9IGZ1bmN0aW9uIEV1aUljb25Ib21lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOC4xMyAxLjIyOSA1LjUgNC40N2ExIDEgMCAwIDEgLjM3Ljc3N1YxNGExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVY2LjQ3NmExIDEgMCAwIDEgLjM3LS43NzZsNS41LTQuNDcxYTEgMSAwIDAgMSAxLjI2IDBaTTEzIDYuNDc2IDcuNSAyLjAwNSAyIDYuNDc1VjE0aDExVjYuNDc2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSG9tZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uSUluQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSAxMS41MDggNy40NjggOEg2LjI1VjdoMi40MDFsLjAzIDMuNTA4SDkuOHYxSDcuNVptLS4yNS02LjIwMmEuODMuODMgMCAwIDEgLjIwNy0uNTc3Yy4xMzctLjE1My4zMzQtLjIyOS41OS0uMjI5LjI1NiAwIC40NTQuMDc2LjU5NC4yMy4xNC4xNTIuMjA5LjM0NS4yMDkuNTc2IDAgLjIyOC0uMDcuNDE3LS4yMS41NjgtLjE0LjE1LS4zMzcuMjI2LS41OTMuMjI2LS4yNTYgMC0uNDUzLS4wNzUtLjU5LS4yMjZhLjgxLjgxIDAgMCAxLS4yMDctLjU2OFpNOCAxM0E1IDUgMCAxIDAgOCAzYTUgNSAwIDAgMCAwIDEwWm0wIDFBNiA2IDAgMSAxIDggMmE2IDYgMCAwIDEgMCAxMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbWFnZSA9IGZ1bmN0aW9uIEV1aUljb25JbWFnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgNWEyIDIgMCAxIDEtNCAwIDIgMiAwIDAgMSA0IDB6bTktNGExIDEgMCAwIDEgMSAxdjEyYTEgMSAwIDAgMS0xIDFIMWExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMXptLTMuNDQ4IDYuMTM0LTMuNzYgMi43NjlhLjUuNSAwIDAgMS0uNDM2LjA3N2wtLjA4Ny0uMDM0LTEuNzEzLS44N0wxIDExLjhWMTRoMTRWOS43NTFsLTMuNDQ4LTIuNjE3ek0xNSAySDF2OC42MzVsNC4yOC0yLjU1OGEuNS41IDAgMCAxIC4zODktLjA1NGwuMDk0LjAzNyAxLjY4NC44NTUgMy44MTMtMi44MDdhLjUuNSAwIDAgMSAuNTItLjA0NWwuMDc5LjA1TDE1IDguNDk1VjJ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbWFnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbXBvcnQgPSBmdW5jdGlvbiBFdWlJY29uSW1wb3J0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOSAxMC4xMTQgMS44NS0xLjk0M2EuNTIuNTIgMCAwIDEgLjc3IDBjLjIxNC4yMjguMjE0LjYgMCAuODI5bC0xLjk1IDIuMDVhMS41NTIgMS41NTIgMCAwIDEtMi4zMSAwTDUuNDEgOWEuNjE3LjYxNyAwIDAgMSAwLS44MjkuNTIuNTIgMCAwIDEgLjc3IDBMOCAxMC4wODJWMS41NTZDOCAxLjI0OSA4LjIyNCAxIDguNSAxcy41LjI0OS41LjU1NnY4LjU1OFpNNC4xOCA2YS45OTMuOTkzIDAgMCAwLS45NzIuODA0bC0xLjE4OSA2QS45OTUuOTk1IDAgMCAwIDIuOTkxIDE0aDExLjAxOGExIDEgMCAwIDAgLjk3Mi0xLjE5NmwtMS4xOS02YS45OTMuOTkzIDAgMCAwLS45Ny0uODA0SDQuMThaTTYgNXYxaDVWNWgxLjgyNWMuOTQ2IDAgMS43Ni42NzMgMS45NDYgMS42MDhsMS4xOSA2QTIgMiAwIDAgMSAxNC4wMTYgMTVIMi45ODRhMS45OTIgMS45OTIgMCAwIDEtMS45NDUtMi4zOTJsMS4xOS02QzIuNDE0IDUuNjczIDMuMjI5IDUgNC4xNzQgNUg2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW1wb3J0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluZGV4ID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgMkgzdjExaDExdjFIMlYxaDEydjEyaC0xVjJaTTYgNWg1Ljk5OVY0SDZ2MVpNNCA1VjRoMXYxSDRabTIgM1Y3aDZ2MUg2Wk00IDhWN2gxdjFINFptMiAzdi0xaDZ2MUg2Wm0tMiAwdi0xaDF2MUg0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXg7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW5kZXhUZW1wb3JhcnkgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhUZW1wb3JhcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDEzVjJoMTFWMUgydjEzaDJ2LTFIM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjk5OSA1SDZWNGg1Ljk5OXYxWk00IDR2MWgxVjRINFptMiAzdjFoNFY3SDZaTTQgN3YxaDFWN0g0Wm0yIDN2MWgydi0xSDZabS0yIDB2MWgxdi0xSDRabTEwLTdoLTF2MWgxVjNabS0xIDJoMXYxaC0xVjVabTEgMmgtMXYxaDFWN1ptLTEgMmgxdjFoLTFWOVptMSAyaC0xdjFoMXYtMVptLTEgMmgxdjFoLTF2LTFabS03IDBINXYxaDF2LTFabTEgMGgxdjFIN3YtMVptMyAwSDl2MWgxdi0xWm0xIDBoMXYxaC0xdi0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhUZW1wb3Jhcnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW5kZXhDbG9zZSA9IGZ1bmN0aW9uIEV1aUljb25JbmRleENsb3NlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMkgydjExaDZ2MUgxVjFoMTJ2NmgtMVYyWk01IDVoNS45OTlWNEg1djFaTTMgNVY0aDF2MUgzWm0yIDNWN2gzdjFINVpNMyA4VjdoMXYxSDNabTIgM3YtMWgydjFINVptNS41LTEuMjA3TDkuMDg2IDguMzc5bC0uNzA3LjcwN0w5Ljc5MyAxMC41bC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0IDEuNDE0IDEuNDE0LjcwNy0uNzA3LTEuNDE0LTEuNDE0IDEuNDE0LTEuNDE0LS43MDctLjcwN0wxMC41IDkuNzkzWk0zIDExdi0xaDF2MUgzWm03LjUtNWE0LjUgNC41IDAgMSAxIDAgOSA0LjUgNC41IDAgMCAxIDAtOVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4Q2xvc2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW5kZXhFZGl0ID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4RWRpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg0djFIMVYxaDEydjVoLTFWMlpNNSA1aDUuOTk5VjRINXYxWk0zIDVWNGgxdjFIM1ptMiAzVjdoNnYxSDVaTTMgOFY3aDF2MUgzWm0yIDN2LTFoM3YxSDVabS0yIDB2LTFoMXYxSDNabTQuNTAyIDEuNDFMMTIuOTEzIDcgMTUgOS4wODdsLTUuNDEgNS40MUw3IDE1bC41MDItMi41OVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4RWRpdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmRleEZsdXNoID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4Rmx1c2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQuNTE2IDlIMTAuNWEuNS41IDAgMCAxIDAtMWg0LjAxNkwxMy4xMSA1Ljk0OGMtLjE3MS0uMjUyLS4xMzctLjYyLjA3OS0uODIxLjIxNy0uMi41MzEtLjE1OS43MDMuMDkybDIgMi45MTZhLjY0OC42NDggMCAwIDEgLjEwOC4zOTcuNjQzLjY0MyAwIDAgMS0uMTA4LjMzMmwtMiAyLjkxOEEuNDc4LjQ3OCAwIDAgMSAxMy41IDEyYS40NTcuNDU3IDAgMCAxLS4zMTItLjEyN2MtLjIxNi0uMjAyLS4yNS0uNTctLjA3OS0uODJMMTQuNTE2IDlaTTMgMTVIMWExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMWg3LjhjLjI3NCAwIC41MzcuMTEzLjcyNi4zMTJsMi4yIDIuNDI4Yy4xNzYuMTg2LjI3NC40MzMuMjc0LjY4OVY3aC0xVjVIOC41YS41LjUgMCAwIDEtLjUtLjVWMkgzdjEyaDh2LTRoMXY0YTEgMSAwIDAgMS0xIDFIM1ptLTEtMVYySDF2MTJoMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4Rmx1c2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW5kZXhNYXBwaW5nID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4TWFwcGluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggOEg0LjkxNWExLjUgMS41IDAgMSAxIDAtMUg4VjIuNUExLjUgMS41IDAgMCAxIDkuNSAxaDIuNTg1YTEuNSAxLjUgMCAxIDEgMCAxSDkuNWEuNS41IDAgMCAwLS41LjV2MTBhLjUuNSAwIDAgMCAuNS41aDIuNTg1YTEuNSAxLjUgMCAxIDEgMCAxSDkuNUExLjUgMS41IDAgMCAxIDggMTIuNVY4Wk0zLjUgM2ExLjUgMS41IDAgMSAxIDAtMyAxLjUgMS41IDAgMCAxIDAgM1ptMCAxMmExLjUgMS41IDAgMSAxIDAtMyAxLjUgMS41IDAgMCAxIDAgM1ptMTAtNmExLjUgMS41IDAgMSAxIDAtMyAxLjUgMS41IDAgMCAxIDAgM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4TWFwcGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmRleE9wZW4gPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhPcGVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMkgydjExaDZ2MUgxVjFoMTJ2NmgtMVYyWk01IDVoNS45OTlWNEg1djFaTTMgNVY0aDF2MUgzWm0yIDNWN2gzdjFINVpNMyA4VjdoMXYxSDNabTIgM3YtMWgydjFINVptNS0xSDh2MWgydjJoMXYtMmgydi0xaC0yVjhoLTF2MlptLTcgMXYtMWgxdjFIM1ptNy41LTVhNC41IDQuNSAwIDEgMSAwIDkgNC41IDQuNSAwIDAgMSAwLTlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleE9wZW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW5kZXhSdW50aW1lID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4UnVudGltZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjYuODM5bC0xLS43MDdWMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTF2LTFINXYxaDN6bTAtMy4wNTVjMC0uMzQyLjA4Mi0uNjY0LjIzLS45NDVINXYxaDN2LS4wNTV6TTUgNWg1Ljk5OVY0SDV2MXpNMyA0djFoMVY0SDN6bTAgM3YxaDFWN0gzem0wIDN2MWgxdi0xSDN6bTExLjYwNy4yLTQuMzItMy4wNTVDOS43MjcgNi43NSA5IDcuMjA0IDkgNy45NDV2Ni4xMDhjMCAuNzQuNzI2IDEuMTk2IDEuMjg3LjhsNC4zMi0zLjA1NWMuNTI0LS4zNy41MjQtMS4yMjggMC0xLjU5OHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4UnVudGltZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmRleFNldHRpbmdzID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4U2V0dGluZ3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDVoNS45OTlWNEg1djFaTTMgNWgxVjRIM3YxWm0wIDNoMVY3SDN2MVptNi4wMjItMS0uMTUuMzMzLS43MzctLjA3OC0uNDY3LS4wNS0uMzMuMzQyQTUuMTMgNS4xMyAwIDAgMCA2Ljk0OCA4SDVWN2g0LjAyMlptLTMuMDA1IDNMNiAxMC4wNTZsLjMwNi40MTEuMzk5LjUzM0g1di0xaDEuMDE3Wk0zIDExaDF2LTFIM3YxWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTMgNy4wNS0uMTYyLS4zNTktLjItLjQ0Ny0uNDctLjExQTUuMDE5IDUuMDE5IDAgMCAwIDEyIDYuMDk4VjJIMnYxMWg0LjM2Yy4xNTcuMzU0LjM1NS42OS41OSAxSDFWMWgxMnY2LjA1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMDA0IDdjLjMyMiAwIC42NDYuMDM2Ljk2Ni4xMDlsLjU5NSAxLjI5MyAxLjQ2NS0uMTUyYy40NTcuNDYyLjc4NiAxLjAxNi45NjkgMS42MWwtLjg3IDEuMTQuODcxIDEuMTQxYTMuOTQgMy45NCAwIDAgMS0uMzg3Ljg1OSA0LjA1OCA0LjA1OCAwIDAgMS0uNTgzLjc1bC0xLjQ2NS0uMTUyLS41OTQgMS4yOTJhNC4zNyA0LjM3IDAgMCAxLTEuOTQxLjAwMWwtLjU5NC0xLjI5My0xLjQ2Ni4xNTJhMy45NTQgMy45NTQgMCAwIDEtLjk2OS0xLjYxbC44Ny0xLjE0TDcgOS44NmEzLjk0NyAzLjk0NyAwIDAgMSAuOTctMS42MWwxLjQ2Ni4xNTIuNTkzLTEuMjkyYTQuMzcgNC4zNyAwIDAgMSAuOTc1LS4xMVpNMTEgMTJhMSAxIDAgMSAwIC4wMDItMS45OThBMSAxIDAgMCAwIDExIDEyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhTZXR0aW5nczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmZpbml0eSA9IGZ1bmN0aW9uIEV1aUljb25JbmZpbml0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMzcgOS40NTdBMS45OTQgMS45OTQgMCAwIDEgMy45OTMgMTBhMiAyIDAgMSAxIDEuNDAzLTMuNDMzbC42MDEuNjc5IDEuMzM2LTEuNTA4LS40NjItLjUyMmE0IDQgMCAxIDAtLjA0MSA1LjYxM2wuMDIxLS4wMjIgMy43NzctNC4yNjUuMDAyLjAwMWEyIDIgMCAxIDEtLjAyNCAyLjg5bC0uNjAxLS42NzktMS4zMzYgMS41MDguNDYyLjUyMmE0IDQgMCAxIDAgMC01LjU2OWwtMy43NCA0LjIyM2ExLjk5MSAxLjk5MSAwIDAgMS0uMDIuMDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmZpbml0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbnB1dE91dHB1dCA9IGZ1bmN0aW9uIEV1aUljb25JbnB1dE91dHB1dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDEzLjk5OXYtMi45OWgxVjE1SDBWMWgxMXYzLjk5OWgtMVYyLjAwMUgxdjExLjk5OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNSAxMFY5SDExdjF6TTEzIDkuNWwzLTMtMy0zelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS41IDYuNXY2bC0zLTN6TTcgN1Y2aDYuNXYxelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5wdXRPdXRwdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW5zcGVjdCA9IGZ1bmN0aW9uIEV1aUljb25JbnNwZWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuMzYzIDE0LjY1OGEuNS41IDAgMSAxLS43MTMuN2wtMi45Ny0zLjAyM2EuNS41IDAgMCAxIC4wMDEtLjdBMy45IDMuOSAwIDEgMCA4LjkgMTIuOGEuNS41IDAgMSAxIDAgLjk5OSA0LjkgNC45IDAgMSAxIDMuODIxLTEuODMzbDIuNjQyIDIuNjkxWk0zLjA5NCAxM2EuNS41IDAgMSAxIDAgMUgyLjVBMi41IDIuNSAwIDAgMSAwIDExLjV2LTlBMi41IDIuNSAwIDAgMSAyLjUgMGg5QTIuNSAyLjUgMCAwIDEgMTQgMi41di41OTlhLjUuNSAwIDEgMS0xIDBWMi41QTEuNSAxLjUgMCAwIDAgMTEuNSAxaC05QTEuNSAxLjUgMCAwIDAgMSAyLjV2OUExLjUgMS41IDAgMCAwIDIuNSAxM2guNTk0Wk0yLjUgM2EuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptMiAwYS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm0yIDBhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFabS00IDJhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFabTIgMGEuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptLTIgMWEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptMCAzYS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm02LTZhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFabTIgMGEuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptLTggOGEuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluc3BlY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW52ZXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkludmVydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTMuMjVhNS4yNSA1LjI1IDAgMSAwIDAtMTAuNSA1LjI1IDUuMjUgMCAwIDAgMCAxMC41Wk04IDE0QTYgNiAwIDEgMSA4IDJhNiA2IDAgMCAxIDAgMTJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDJhNiA2IDAgMSAwIDAgMTJWMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkludmVydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JcCA9IGZ1bmN0aW9uIEV1aUljb25JcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4Wm0tMiAzSDh2NmgxVjkuMDE0aDFjLjI5OC0uMDEzIDIgMCAyLTIuMDE4IDAtMS43NC0xLjMxNC0xLjk1Mi0xLjgyNS0xLjk4N0wxMCA1Wk02IDVINXY2aDFWNVptNCAuOTg0Yy42NjcgMCAxIC4zMzYgMSAxLjAwOEMxMSA3LjY2NCAxMC42NjcgOCAxMCA4SDlWNS45ODRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Jc3N1ZSA9IGZ1bmN0aW9uIEV1aUljb25Jc3N1ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignaXNzdWUnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBjbGlwUGF0aDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKSxcbiAgICBmaWxsOiBcIiMzNDM3NDFcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IC41YzQuMTM2IDAgNy41IDMuMzY0IDcuNSA3LjVzLTMuMzY0IDcuNS03LjUgNy41Uy41IDEyLjEzNi41IDggMy44NjQuNSA4IC41em0wIC44ODJhNi42MTggNi42MTggMCAxMDAgMTMuMjM2QTYuNjE4IDYuNjE4IDAgMDA4IDEuMzgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSA4YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJjbGlwUGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAwaDE2djE2SDB6XCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSXNzdWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uS2V5ID0gZnVuY3Rpb24gRXVpSWNvbktleShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNCA1YTIgMiAwIDEgMS00IDAgMiAyIDAgMCAxIDQgMFptLTEgMGExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDZhNSA1IDAgMSAxIDMuMDg2IDQuNjJsLTEuMjMyIDEuMjM0QS41LjUgMCAwIDEgNy41IDEySDZ2MS41YS41LjUgMCAwIDEtLjUuNUg0djEuNWEuNS41IDAgMCAxLS41LjVoLTNhLjUuNSAwIDAgMS0uNS0uNXYtM2EuNS41IDAgMCAxIC4xNzUtLjM4bDUuOTMyLTUuMDg1QTUuMDE5IDUuMDE5IDAgMCAxIDYgNlptNS00YTQgNCAwIDAgMC0zLjg1MyA1LjA4LjUuNSAwIDAgMS0uMTU2LjUxNUwxIDEyLjczVjE1aDJ2LTEuNWEuNS41IDAgMCAxIC41LS41SDV2LTEuNWEuNS41IDAgMCAxIC41LS41aDEuNzkzbC44NzctLjg3N2E1LjAzMyA1LjAzMyAwIDAgMS0uNTAzLS4zOTYuNS41IDAgMSAxIC42NjYtLjc0NUEzLjk4MyAzLjk4MyAwIDAgMCAxMSAxMGguMDA1QTQgNCAwIDAgMCAxMSAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS2V5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbktleWJvYXJkID0gZnVuY3Rpb24gRXVpSWNvbktleWJvYXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTAgM2gxNnYxMUgwVjNabTE1IDEwVjRIMXY5aDE0Wk0yIDVoMnYxSDJWNVptMiA3di0xSDJ2MWgyWm0xMC0xdjFoLTJ2LTFoMlptLTMgMXYtMUg1djFoNlpNNSA1aDF2MUg1VjVaTTMgN0gydjFoMVY3Wm0zIDBoMXYxSDZWN1pNMyA5SDJ2MWgxVjlabTMgMGgxdjFINlY5Wm0yLTRIN3YxaDFWNVpNNCA3aDF2MUg0VjdabTUgMEg4djFoMVY3Wm0xIDBoMXYxaC0xVjdaTTUgOUg0djFoMVY5Wm0zIDBoMXYxSDhWOVptMyAwaC0xdjFoMVY5Wk05IDVoMXYxSDlWNVptMyAwaC0xdjFoMVY1Wm0xIDBoMXYxaC0xVjVabTEgMmgtMnYzaDJWN1pcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LZXlib2FyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25LcWxGaWVsZCA9IGZ1bmN0aW9uIEV1aUljb25LcWxGaWVsZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxMCxcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxMFwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggOWE1IDUgMCAxIDEgMC04IDUgNSAwIDEgMSAwIDhabS43NS0uNjkyYTQgNCAwIDEgMCAwLTYuNjE1QTQuOTgxIDQuOTgxIDAgMCAxIDEwIDVhNC45ODEgNC45ODEgMCAwIDEtMS4yNSAzLjMwOFpNNC4xMzMgOFY1LjU1OWgyLjQ5NnYtLjYyNUg0LjEzM1YyLjk5NmgyLjcxOXYtLjYzM0gzLjQzVjhoLjcwM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbEZpZWxkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbktxbEZ1bmN0aW9uID0gZnVuY3Rpb24gRXVpSWNvbktxbEZ1bmN0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyA3SDN2Mmg0djJsMy0zLTMtM3YyWk02IDZWNWExIDEgMCAwIDEgMS43MDctLjcwN2wzIDNhMSAxIDAgMCAxIDAgMS40MTRsLTMgM0ExIDEgMCAwIDEgNiAxMXYtMUgzYTEgMSAwIDAgMS0xLTFWN2ExIDEgMCAwIDEgMS0xaDNabTcuNS0zYS41LjUgMCAwIDEgLjUuNXY5YS41LjUgMCAxIDEtMSAwdi05YS41LjUgMCAwIDEgLjUtLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LcWxGdW5jdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25LcWxPcGVyYW5kID0gZnVuY3Rpb24gRXVpSWNvbktxbE9wZXJhbmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xMS4xOTIgMTAuMTQ1IDIuMjk4LTEuNzkyYy4yNTktLjE5Ni4yNTktLjUwOSAwLS43MDZsLTIuMjk4LTEuNzkyYy0uMjU2LS4xOTYtLjI1Ni0uNTEzIDAtLjcwOGEuODEuODEgMCAwIDEgLjkzIDBsMi4zIDEuNzkxYy43NzIuNTkuNzcgMS41MzcgMCAyLjEyNGwtMi4zIDEuNzkxYS44MS44MSAwIDAgMS0uOTMgMGMtLjI1Ni0uMTk1LS4yNTYtLjUxMiAwLS43MDhabS02LjM4NC00LjI5TDIuNTEgNy42NDdjLS4yNTkuMTk2LS4yNTkuNTA5IDAgLjcwNmwyLjI5OCAxLjc5MmMuMjU2LjE5Ni4yNTYuNTEzIDAgLjcwOGEuODEuODEgMCAwIDEtLjkzIDBsLTIuMy0xLjc5MWMtLjc3Mi0uNTktLjc3LTEuNTM3IDAtMi4xMjRsMi4zLTEuNzkxYS44MS44MSAwIDAgMSAuOTMgMGMuMjU2LjE5NS4yNTYuNTEyIDAgLjcwOFpNNi41IDZoM2EuNS41IDAgMCAxIDAgMWgtM2EuNS41IDAgMCAxIDAtMVptMCAzaDNhLjUuNSAwIDAgMSAwIDFoLTNhLjUuNSAwIDAgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LcWxPcGVyYW5kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbktxbFNlbGVjdG9yID0gZnVuY3Rpb24gRXVpSWNvbktxbFNlbGVjdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMmE0IDQgMCAxIDAgMC04IDQgNCAwIDAgMCAwIDhabTAgMUE1IDUgMCAxIDEgNSAzYTUgNSAwIDAgMSAwIDEwWm02LTFhNCA0IDAgMSAwIDAtOCA0IDQgMCAwIDAgMCA4Wm0wIDFhNSA1IDAgMSAxIDAtMTAgNSA1IDAgMCAxIDAgMTBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LcWxTZWxlY3RvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25LcWxWYWx1ZSA9IGZ1bmN0aW9uIEV1aUljb25LcWxWYWx1ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNGE1IDUgMCAxIDEgMCA4IDUgNSAwIDEgMSAwLThabS0uNzUuNjkyYTQgNCAwIDEgMCAwIDYuNjE1QTQuOTgxIDQuOTgxIDAgMCAxIDYgOGMwLTEuMjY4LjQ3Mi0yLjQyNiAxLjI1LTMuMzA4Wk0xMS4zNDggMTFsMi4wNzgtNS42MzdoLS43MzlsLTEuNjU2IDQuNzI3aC0uMDYyTDkuMzEzIDUuMzYzaC0uNzM5TDEwLjY1MiAxMWguNjk2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsVmFsdWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uS3ViZXJuZXRlc05vZGUgPSBmdW5jdGlvbiBFdWlJY29uS3ViZXJuZXRlc05vZGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQgMTEuNDJWNC41OEw4IDEuMTUyIDIgNC41OHY2Ljg0bDYgMy40MjggNi0zLjQyOHpNOCAxNmw3LTRWNEw4IDAgMSA0djhsNyA0ek04IDQuNjA3bDMgMS43MTRWOS42OGwtMyAxLjcxNC0zLTEuNzE0VjYuMzJsMy0xLjcxNHptNCAxLjEzNHY0LjUxOGwtNCAyLjI4Ni00LTIuMjg2VjUuNzQxbDQtMi4yODYgNCAyLjI4NnpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LdWJlcm5ldGVzTm9kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25LdWJlcm5ldGVzUG9kID0gZnVuY3Rpb24gRXVpSWNvbkt1YmVybmV0ZXNQb2QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQgNS4xNTF2Ni4yNjlsLTUuNSAzLjE0MlY4LjI5TDE0IDUuMTUxem0tLjUwOC0uODYxTDggMS4xNTIgMi41MDggNC4yOSA4IDcuNDI0bDUuNDkyLTMuMTM0ek0yIDUuMTUxbDUuNSAzLjE0djYuMjcyTDIgMTEuNDJWNS4xNXpNMTUgMTJsLTcgNC03LTRWNGw3LTQgNyA0djh6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3ViZXJuZXRlc1BvZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25MYXVuY2ggPSBmdW5jdGlvbiBFdWlJY29uTGF1bmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEwIDRhMiAyIDAgMSAwIDAgNCAyIDIgMCAwIDAgMC00Wk05IDZhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwWlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02LjY3OSAxMi45NjdjLjM1My0uMTM2LjY5Ny0uMyAxLjAzMy0uNDc1bDEuMzYgMi4yNjVhLjUuNSAwIDAgMCAuODI4LjA0M2wzLTRhLjUuNSAwIDAgMC0uMDQ2LS42NTRsLS44ODYtLjg4NkMxMy42MDQgNy40NTYgMTUgNC45MTMgMTUgMS41YS41LjUgMCAwIDAtLjUtLjVjLTMuNDEzIDAtNS45NTYgMS4zOTUtNy43NiAzLjAzM2wtLjg4Ni0uODg3QS41LjUgMCAwIDAgNS4yIDMuMWwtNCAzYS41LjUgMCAwIDAgLjA0My44MjlsMi4yNjQgMS4zNThhOS41OSA5LjU5IDAgMCAwLS40NzUgMS4wMzZ2LjAwMWEuNS41IDAgMCAwIC4xMTQuNTNsMyAzYy4xMzkuMTM4LjM1LjE4Mi41MzMuMTEzWk00LjA5IDkuMzg0bDIuNTI1IDIuNTI1YTE0LjYxNiAxNC42MTYgMCAwIDAgMy41NTUtMi4yODVjMS44NDEtMS42MTIgMy42NTctNC4wNzYgMy44MTgtNy42MTItMy41MzcuMTYtNi4wMDEgMS45NzYtNy42MTMgMy44MTdBMTQuNjE3IDE0LjYxNyAwIDAgMCA0LjA5IDkuMzg0Wm0tLjA5Ni0xLjk3YTE1LjYxNiAxNS42MTYgMCAwIDEgMi4wMy0yLjY4MmwtLjU3Mi0uNTcyLTMuMDU4IDIuMjk0IDEuNi45NlptNS41NTEgNi4xOTEtLjk2LTEuNmExNS42MTcgMTUuNjE3IDAgMCAwIDIuNjgyLTIuMDNsLjU3Mi41NzItMi4yOTQgMy4wNThaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy44NTQgMTIuMTQ2YS41LjUgMCAwIDEgMCAuNzA4bC0yIDJhLjUuNSAwIDAgMS0uNzA4LS43MDhsMi0yYS41LjUgMCAwIDEgLjcwOCAwWm0yIDEuNzA4YS41LjUgMCAwIDAtLjcwOC0uNzA4bC0xIDFhLjUuNSAwIDAgMCAuNzA4LjcwOGwxLTFabS0zLTMuNzA4YS41LjUgMCAwIDEgMCAuNzA4bC0xIDFhLjUuNSAwIDAgMS0uNzA4LS43MDhsMS0xYS41LjUgMCAwIDEgLjcwOCAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGF1bmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxheWVycyA9IGZ1bmN0aW9uIEV1aUljb25MYXllcnMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjI3NiAxLjA1M2EuNS41IDAgMCAxIC40NDggMGw2IDNhLjUuNSAwIDAgMSAwIC44OTRsLTYgM2EuNS41IDAgMCAxLS40NDggMGwtNi0zYS41LjUgMCAwIDEgMC0uODk0bDYtM3pNMi42MTggNC41IDcuNSA2Ljk0MSAxMi4zODIgNC41IDcuNSAyLjA1OSAyLjYxOCA0LjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjA1MyA3LjI3NmEuNS41IDAgMCAxIC42Ny0uMjIzTDcuNSA5Ljk0bDUuNzc2LTIuODg4YS41LjUgMCAxIDEgLjQ0OC44OTRsLTYgM2EuNS41IDAgMCAxLS40NDggMGwtNi0zYS41LjUgMCAwIDEtLjIyMy0uNjd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjcyNCAxMC4wNTNhLjUuNSAwIDEgMC0uNDQ4Ljg5NGw2IDNhLjUuNSAwIDAgMCAuNDQ4IDBsNi0zYS41LjUgMCAxIDAtLjQ0OC0uODk0TDcuNSAxMi45NGwtNS43NzYtMi44ODh6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MYXllcnM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTGV0dGVyaW5nID0gZnVuY3Rpb24gRXVpSWNvbkxldHRlcmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm01IDMgMyA5SDdMNiA5SDNsLTEgM0gxbDMtOWgxem0tLjUgMS41TDUuNjY3IDhIMy4zMzNMNC41IDQuNXptNy45OSAxLjY0N0MxMi4xNiA2LjAwNSAxMS43NiA2IDExLjUgNmMtLjM1OSAwLTEuMDIyLjE3NS0xLjYzMi44MzhsLS43MzYtLjY3NkM5LjkyOSA1LjI5NCAxMC44NTkgNSAxMS41IDVoLjAxNmMuMjUgMCAuODM2IDAgMS4zNjkuMjI4LjI4MS4xMi41NjguMzEzLjc4Mi42MTcuMjE2LjMwNy4zMzMuNjkzLjMzMyAxLjE1NXY1aC0xdi0uMzU0YTIuMTAxIDIuMTAxIDAgMCAxLS4wNjQuMDM4Yy0uNTU0LjMxNy0xLjE2Ni4zMTYtMS40Mi4zMTZoLS4wMzJjLS4yNSAwLS44MzYgMC0xLjM2OC0uMjI4YTEuODEgMS44MSAwIDAgMS0uNzgzLS42MTdDOS4xMTcgMTAuODQ4IDkgMTAuNDYyIDkgMTBjMC0uNDYyLjExNy0uODQ4LjMzMy0xLjE1NS4yMTQtLjMwNC41LS40OTYuNzgzLS42MTdDMTAuNjQ4IDggMTEuMjMzIDggMTEuNDg0IDhoLjAxNmMuMjU4IDAgLjY5LS4wMDMgMS4wNS0uMTA2YS44ODkuODg5IDAgMCAwIC4zNjQtLjE3OWMuMDUzLS4wNS4wODYtLjEwOC4wODYtLjIxNVY3YzAtLjI4OC0uMDctLjQ2NS0uMTUxLS41OGEuODE0LjgxNCAwIDAgMC0uMzU4LS4yNzN6TTEzIDguOGMtLjA2LjAyMi0uMTE4LjA0LS4xNzUuMDU3QzEyLjMyIDkgMTEuNzYyIDkgMTEuNTEzIDlIMTEuNWMtLjI1OSAwLS42Ni4wMDUtLjk5LjE0N2EuODE0LjgxNCAwIDAgMC0uMzU5LjI3NGMtLjA4LjExNC0uMTUxLjI5MS0uMTUxLjU3OXMuMDcuNDY1LjE1MS41OGEuODEzLjgxMyAwIDAgMCAuMzU4LjI3M2MuMzMxLjE0Mi43MzIuMTQ3Ljk5MS4xNDcuMjU3IDAgLjYzLS4wMDguOTQtLjE4NC4yNTUtLjE0Ni41Ni0uNDYzLjU2LTEuMzE2di0uNzAxelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGV0dGVyaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxpbmVEYXNoZWQgPSBmdW5jdGlvbiBFdWlJY29uTGluZURhc2hlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjcwNyA0LjcwN2ExIDEgMCAxIDEtMS40MTQtMS40MTRsMi0yYTEgMSAwIDEgMSAxLjQxNCAxLjQxNGwtMiAyem0tNi40MTQgNWExIDEgMCAwIDAgMS40MTQgMGwyLTJhMSAxIDAgMSAwLTEuNDE0LTEuNDE0bC0yIDJhMSAxIDAgMCAwIDAgMS40MTR6bS01IDVhMSAxIDAgMCAwIDEuNDE0IDBsMi0yYTEgMSAwIDEgMC0xLjQxNC0xLjQxNGwtMiAyYTEgMSAwIDAgMCAwIDEuNDE0elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGluZURhc2hlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25MaW5lRG90dGVkID0gZnVuY3Rpb24gRXVpSWNvbkxpbmVEb3R0ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy41IDNhMS41IDEuNSAwIDEgMCAwLTMgMS41IDEuNSAwIDAgMCAwIDN6TTExIDUuNWExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMHpNNS41IDExYTEuNSAxLjUgMCAxIDAgMC0zIDEuNSAxLjUgMCAwIDAgMCAzem0tNCA0YTEuNSAxLjUgMCAxIDAgMC0zIDEuNSAxLjUgMCAwIDAgMCAzelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGluZURvdHRlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25MaW5lU29saWQgPSBmdW5jdGlvbiBFdWlJY29uTGluZVNvbGlkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS4yOTMgMTQuNzA3YTEgMSAwIDAgMCAxLjQxNCAwbDEyLTEyYTEgMSAwIDEgMC0xLjQxNC0xLjQxNGwtMTIgMTJhMSAxIDAgMCAwIDAgMS40MTR6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MaW5lU29saWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTGluayA9IGZ1bmN0aW9uIEV1aUljb25MaW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy42NiAzLjgwM2EuNS41IDAgMSAxLS43MDYtLjcwN0w5LjI2OC43OGMxLjE4Ny0xLjE4NyAzLjI0Mi0xIDQuNTk2LjM1NHMxLjU0IDMuNDA5LjM1NCA0LjU5NmwtMy41MzYgMy41MzZjLTEuMTg3IDEuMTg3LTMuMjQyIDEtNC41OTYtLjM1NGEuNS41IDAgMSAxIC43MDctLjcwN2MuOTkuOTkgMi40MTcgMS4xMTkgMy4xODIuMzU0bDMuNTM2LTMuNTM2Yy43NjUtLjc2NS42MzUtMi4xOTMtLjM1NC0zLjE4Mi0uOTktLjk5LTIuNDE3LTEuMTE5LTMuMTgyLS4zNTRMNy42NjEgMy44MDNabS0uMzIgNy4zOTJhLjUuNSAwIDEgMSAuNzA3LjcwN2wtMi4zMTUgMi4zMTRjLTEuMTg3IDEuMTg4LTMuMjQyIDEtNC41OTYtLjM1My0xLjM1NC0xLjM1NC0xLjU0LTMuNDEtLjM1My00LjU5Nkw0LjMxOCA1LjczYzEuMTg3LTEuMTg3IDMuMjQyLTEgNC41OTYuMzU0YS41LjUgMCAwIDEtLjcwNy43MDdjLS45ODktLjk5LTIuNDE2LTEuMTItMy4xODItLjM1NEwxLjQ5IDkuOTc0Yy0uNzY2Ljc2NS0uNjM2IDIuMTkzLjM1MyAzLjE4Mi45OS45ODkgMi40MTcgMS4xMTkgMy4xODIuMzUzbDIuMzE1LTIuMzE0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGluazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25MaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkxpc3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDRWM2gydjFIMlptNCAwVjNoOHYxSDZabTAgM1Y2aDh2MUg2Wm0wIDNWOWg4djFINlpNMiA3VjZoMnYxSDJabTAgM1Y5aDJ2MUgyWm00IDN2LTFoOHYxSDZabS00IDB2LTFoMnYxSDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MaXN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxpc3RBZGQgPSBmdW5jdGlvbiBFdWlJY29uTGlzdEFkZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDExSDl2MWgydjJoMXYtMmgydi0xaC0yVjloLTF2MlpNNy43NTggOWE0LjUgNC41IDAgMSAxLS41MDIgNEg2di0xaDEuMDI3YTQuNTQ4IDQuNTQ4IDAgMCAxIC4yMy0ySDZWOWgxLjc1OFpNMiA0VjNoMnYxSDJabTQgMFYzaDh2MUg2Wm0wIDNWNmg4djFINlpNMiA3VjZoMnYxSDJabTAgM1Y5aDJ2MUgyWm0wIDN2LTFoMnYxSDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MaXN0QWRkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvY2sgPSBmdW5jdGlvbiBFdWlJY29uTG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNXYtLjhDNCAxLjg4IDUuNzkgMCA4IDBzNCAxLjg4IDQgNC4yVjVoMS4xNDNjLjQ3MyAwIC44NTcuNDQ4Ljg1NyAxdjljMCAuNTUyLS4zODQgMS0uODU3IDFIMi44NTdDMi4zODQgMTYgMiAxNS41NTIgMiAxNVY2YzAtLjU1Mi4zODQtMSAuODU3LTFINFpNMyAxNWgxMFY2SDN2OVptNS45OTgtMy43MDZMOS41IDEyLjVoLTNsLjUwMi0xLjIwNkExLjY0NCAxLjY0NCAwIDAgMSA2LjUgMTAuMWMwLS44ODMuNjcyLTEuNiAxLjUtMS42czEuNS43MTcgMS41IDEuNmMwIC40NzUtLjE5NC45MDEtLjUwMiAxLjE5NFpNMTEgNC4zNkMxMSAyLjUwNCA5LjY1NyAxIDggMVM1IDIuNTA0IDUgNC4zNlY1aDZ2LS42NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9ja09wZW4gPSBmdW5jdGlvbiBFdWlJY29uTG9ja09wZW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4xNDMgNWMuNDczIDAgLjg1Ny40NDguODU3IDF2OWMwIC41NTItLjM4NCAxLS44NTcgMUguODU3Qy4zODQgMTYgMCAxNS41NTIgMCAxNVY2YzAtLjU1Mi4zODQtMSAuODU3LTFIOHYtLjhDOCAxLjg4IDkuNzkgMCAxMiAwczQgMS44OCA0IDQuMlY1aC0xdi0uNjRDMTUgMi41MDQgMTMuNjU3IDEgMTIgMVM5IDIuNTA0IDkgNC4zNlY1aDIuMTQzWk0xIDE1aDEwVjZIMXY5Wm01Ljk5OC0zLjcwNkw3LjUgMTIuNWgtM2wuNTAyLTEuMjA2QTEuNjQ0IDEuNjQ0IDAgMCAxIDQuNSAxMC4xYzAtLjg4My42NzItMS42IDEuNS0xLjZzMS41LjcxNyAxLjUgMS42YzAgLjQ3NS0uMTk0LjkwMS0uNTAyIDEuMTk0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9ja09wZW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nUGF0dGVybkFuYWx5c2lzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ1BhdHRlcm5BbmFseXNpcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMWgxMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJIM2EyIDIgMCAwIDEtMi0yVjNhMiAyIDAgMCAxIDItMlptMCAxYTEgMSAwIDAgMC0xIDF2MTBhMSAxIDAgMCAwIDEgMWgxMGExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMUgzWm0uNSAxaDRhLjUuNSAwIDAgMSAwIDFoLTRhLjUuNSAwIDAgMSAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgM2EuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgM2EuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFabTAgM2gtNGEuNS41IDAgMCAwIDAgMWg0YS41LjUgMCAwIDAgMC0xWm0tOCAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFabTIgMGEuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNSA2aC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFabTIgMGEuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptNiA2aC00YS41LjUgMCAwIDAgMCAxaDRhLjUuNSAwIDAgMCAwLTFabS04IDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVptMiAwYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDEyaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFabTIgMGEuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMy05YS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSAzYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSAzYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSAzYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSAzYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSAzYS41LjUgMCAxIDAgMCAxIC41LjUgMCAwIDAgMC0xWm0zIDBoLTFhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMVptLTMgNmEuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgOWEuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgOWEuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgOWEuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgOWEuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgOWEuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgOWEuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgOWEuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFabS01IDBoLTRhLjUuNSAwIDAgMCAwIDFoNGEuNS41IDAgMCAwIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ1BhdHRlcm5BbmFseXNpczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dSYXRlQW5hbHlzaXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nUmF0ZUFuYWx5c2lzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDEzYS41LjUgMCAwIDEtLjUtLjVWMTFIN3YxLjVhLjUuNSAwIDAgMS0xIDBWOUg0djMuNWEuNS41IDAgMCAxLTEgMHYtNGEuNS41IDAgMCAxIC41LS41aDNhLjUuNSAwIDAgMSAuNS41VjEwaDJWMS41YS41LjUgMCAwIDEgLjUtLjVoM2EuNS41IDAgMCAxIC41LjV2MTFhLjUuNSAwIDAgMS0uNS41aC0zWm0tOCAyYS41LjUgMCAwIDEgMC0xaDEzYS41LjUgMCAwIDEgMCAxaC0xM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ1JhdGVBbmFseXNpczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQWVyb3NwaWtlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BZXJvc3Bpa2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQzQzNzNBXCIsXG4gICAgZDogXCJNMCAzMS44MDZoMzJWLjc3NkgwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJtMTkuNDQ4IDEyLjUwOC04Ljk4NiAzLjg2IDguOTg2IDMuODgzdi03Ljc0M1ptLTExLjMwNCA0LjczLTIuMDk0LS44NjMgMi4wOTQtLjkzMSAxNy43NDktNy43NDF2Mi4wNjJsLTQuNjU0IDEuOTl2OS4yNWw0LjY1NCAyLjAxdjEuOTY4TDguMTQzIDE3LjI0WlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BZXJvc3Bpa2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0FwYWNoZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXBhY2hlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2FwYWNoZScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIHgxOiBcIjIxLjkwMiVcIixcbiAgICB4MjogXCIxNDEuODc5JVwiLFxuICAgIHkxOiBcIjYzLjkwNSVcIixcbiAgICB5MjogXCIyMC4yMTMlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRjY5OTIzXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzEuMjMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNGNzlBMjNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI4My44MyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0U5NzgyNlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIHgxOiBcIi0yMTcuNjUxJVwiLFxuICAgIHgyOiBcIjc0Ljc0MyVcIixcbiAgICB5MTogXCIxNzcuMTI3JVwiLFxuICAgIHkyOiBcIjM2LjY2NSVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMyLjMzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUUyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNjMuMDIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDOTIwMzdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3NS4xNCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjMzNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0U5NzgyNlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIHgxOiBcIi04MC4wNDQlXCIsXG4gICAgeDI6IFwiMTQ2LjI0JVwiLFxuICAgIHkxOiBcIjczLjU3NCVcIixcbiAgICB5MjogXCIzMS41MzklXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMi4zMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlFMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjYzLjAyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzkyMDM3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUuMTQlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIzMzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICB4MTogXCItMTguMzE2JVwiLFxuICAgIHgyOiBcIjE2NS4wMDIlXCIsXG4gICAgeTE6IFwiNTIuNDk3JVwiLFxuICAgIHkyOiBcIjQxLjY1NiVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyODI2NjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5LjU0OCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzY2MkU4RFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc4LjgyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUYyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiOTQuODclXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIwMzJcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICB4MTogXCItMTA5LjcwMSVcIixcbiAgICB4MjogXCI2NC42MTclXCIsXG4gICAgeTE6IFwiNDYzLjcxNSVcIixcbiAgICB5MjogXCIxNy4xOSVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMyLjMzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUUyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNjMuMDIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDOTIwMzdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3NS4xNCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjMzNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0U5NzgyNlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZicpLFxuICAgIHgxOiBcIi0zNC44OCVcIixcbiAgICB4MjogXCIxMTAuNTk5JVwiLFxuICAgIHkxOiBcIjEzMC41MjIlXCIsXG4gICAgeTI6IFwiLTkuMTE4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdnJyksXG4gICAgeDE6IFwiLTEzLjY3MyVcIixcbiAgICB4MjogXCIxMTcuODU4JVwiLFxuICAgIHkxOiBcIjE5Mi41NjQlXCIsXG4gICAgeTI6IFwiLTEzNi45MDYlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMjgyNjYyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiOS41NDglXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2NjJFOERcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3OC44MiVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlGMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjk0Ljg3JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMDMyXCJcbiAgfSkpKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTEzLjYyOC4xOGMtLjQ5OC4yOTMtMS4zMzIgMS4xMzQtMi4zMjggMi4zNDh2LjA3NGwuODcxIDEuNjEzLjA0NC4wM2MuNjQxLS45MTQgMS4yODktMS43NDIgMS45NDgtMi40NDYuMDUtLjA1Ni4wNzUtLjA4LjA3NS0uMDgtLjAyNS4wMjQtLjA1LjA1NS0uMDc1LjA4LS4yMTEuMjM3LS44NTkuOTg0LTEuODMgMi40NzhsLjExMi4wMjVzMi4yNzMtLjIyNCAzLjM2OC0uNDFsLjA2Mi0uMDU3Yy4zNS0xLjk1NS0uMzQyLTIuODUxLS4zNDItMi44NTFTMTQuNjYxLS40MjMgMTMuNjI4LjE4WlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIiksXG4gICAgZDogXCJNOS41MjUgOC42OTdjLjI4LS41MTYuNTYtMS4wMjcuODQtMS41MTkuMjkzLS41MS41OTItMS4wMDguODk3LTEuNDg4YS4zOTcuMzk3IDAgMCAwIC4wNS0uMDg3Yy4yOTktLjQ3My41OTgtLjkyMS45MDMtMS4zNTdMMTEuMyAyLjUyYy0uMDY5LjA4MS0uMTM3LjE2OC0uMjA2LjI1Ni0uMjYxLjMzLS41MzUuNjc4LS44MTUgMS4wNTJhNTEuNzgzIDUxLjc4MyAwIDAgMC0xLjg5MyAyLjcwOGMtLjI2MS40MDUtLjUzLjgxNi0uNzkgMS4yNDVsLS4wMzIuMDVWNy45bDEuMTQgMi4yNi4wNS4wMTljLjI1NS0uNDk4LjUxLS45OTYuNzcxLTEuNDgyWlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpLCBcIilcIiksXG4gICAgZDogXCJNNC41NjMgMTkuNzZjLjIwNi0uNTM1LjQyNC0xLjA3Ny42NDItMS42MjUuMjExLS41MjMuNDIzLTEuMDUyLjY0Ny0xLjU4LjIxOC0uNTMuNDQ4LTEuMDYuNjc5LTEuNTk1LjIzNi0uNTQxLjQ3My0xLjA4My43MTYtMS42MTguMjQyLS41My40ODUtMS4wNTkuNzM0LTEuNTgyLjA4Ny0uMTg2LjE4LS4zOC4yNzQtLjU2Ni4xNTYtLjMyNC4zMTgtLjY0OC40NzMtLjk2NS4wMDctLjAxOS4wMi0uMDMxLjAyNS0uMDVMNy41NjQgNy44MzJsLS4wNTYuMDkzYy0uMjc0LjQ1NS0uNTU0LjkxNS0uODIyIDEuMzg5YTU0LjUzNSA1NC41MzUgMCAwIDAtMS40NSAyLjcxNGMtLjA0NC4wODctLjA4MS4xNjgtLjEyNS4yNTVhMzIuMTUgMzIuMTUgMCAwIDAtLjcwMyAxLjU0NGMtLjIzNy41Ni0uNDQ4IDEuMDk2LS42MzUgMS42MDYtLjEyNS4zMzctLjIzLjY1NC0uMzM2Ljk2NS0uMDgxLjI2Mi0uMTYyLjUzLS4yMzcuNzkxLS4xOC42MjMtLjMzIDEuMjM5LS40NTQgMS44NjJsLjAxOC4wNzQgMS4xNCAyLjI2Ni4wMzcuMDJjLjE1NS0uNDI0LjMxNy0uODQ4LjQ4NS0xLjI4My4wNDQtLjEyNS4wOTQtLjI0My4xMzctLjM2OFpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTIuNzMzIDE5LjEzMmExOC44NCAxOC44NCAwIDAgMC0uMzExIDIuMjUzYzAgLjAyNS0uMDA2LjA1LS4wMDYuMDgxLS4zNzQtLjU5OC0xLjM3LTEuMTc3LTEuMzctMS4xNzcuNzE2IDEuMDM0IDEuMjU4IDIuMDYxIDEuMzM4IDMuMDctLjM4LjA4LS45MDItLjAzOC0xLjUxMi0uMjU1LjYyOC41NzggMS4xMDIuNzQgMS4yODguNzg0LS41NzkuMDM3LTEuMTgzLjQzNi0xLjc5My44OS44OS0uMzYgMS42MDctLjUwNCAyLjEyMy0uMzkyLS44MTUgMi4zMS0xLjYzIDQuODYyLTIuNDUzIDcuNTY0LjI1LS4wNzUuMzk5LS4yNDMuNDg2LS40NzMuMTQzLS40OTIgMS4xMTQtMy43MDQgMi42MjctNy45MzEuMDQ0LS4xMTkuMDg3LS4yNDMuMTMtLjM2Mi4wMTMtLjAzLjAyNi0uMDY4LjAzOC0uMS4xNjItLjQ0MS4zMjQtLjg5Ni40OTgtMS4zNTYuMDM4LS4xMDYuMDgxLS4yMTIuMTE5LS4zMTh2LS4wMDZsLTEuMTktMi4zNTNjMCAuMDMtLjAwNi4wNTYtLjAxMi4wOFpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2UnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTEyLjMzMyA0LjI4M2MtLjI2OC40MTEtLjU2Ljg3OC0uODc4IDEuNDA3LS4wMTguMDI1LS4wMy4wNTYtLjA1LjA4MWE2Mi41MzggNjIuNTM4IDAgMCAwLTEuNjg3IDMuMDVjLS4yNDkuNDgtLjUwNC45ODQtLjc2NSAxLjUyNmwuMDU2LjAyNSAyLjg5NS0uMzExLjA2OC0uMDVjLjg3OC0uNDA1IDEuMjctLjc3MiAxLjY1LTEuMzAxLjEtLjE0My4yMDUtLjMuMzA1LS40NTUuMzExLS40ODUuNjE2LTEuMDE1Ljg4NC0xLjU0NC4yNjEtLjUxLjQ5Mi0xLjAyLjY3Mi0xLjQ3NWE2LjU2IDYuNTYgMCAwIDAgLjM5OC0xLjM5NWMtMS4xNy4yMDYtMi42MDguMzk5LTMuNTQ4LjQ0MlpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2YnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTguODQgMTAuNTljLS4xLjIxMi0uMjA1LjQzLS4zMS42NDctLjExMy4yMzctLjIzMS40ODYtLjM0My43MzUtLjA1Ni4xMjQtLjExOS4yNTUtLjE3NS4zOC0uMTguMzg2LS4zNTQuNzg0LS41NDEgMS4xOTVhMTA3LjAzNSAxMDcuMDM1IDAgMCAwLTEuMzU3IDMuMTk0Yy0uMjE4LjUyOS0uNDM2IDEuMDc3LS42NTQgMS42MzctLjIuNTA0LS4zOTkgMS4wMTUtLjU5OCAxLjU1LS4wMTIuMDI1LS4wMTguMDUtLjAzLjA3NS0uMi41My0uMzk0IDEuMDY4LS42IDEuNjIyLS4wMDYuMDEyLS4wMTcuMDQ1LS4wMjMuMDU3bC4wNDMuMDEuODY2LS4wOTQuMDQ4LS4wMmMtLjAxOC0uMDA2LS4wMy0uMDMtLjA0OC0uMDM3IDEuMTQ1LS4xNDMgMi42Ny0xLjAwMiAzLjY2LTIuMDYuNDU1LS40ODYuODY2LTEuMDY1IDEuMjUyLTEuNzM4LjI4Ni0uNTA0LjU0Ny0xLjA1OC44MDMtMS42NzUuMjI0LS41MzUuNDM1LTEuMTIuNjQtMS43NDlhMy40NTcgMy40NTcgMCAwIDEtLjg5Ni4zMTEgOC45NzcgOC45NzcgMCAwIDEtLjE4LjAzOGMtLjA2Mi4wMTItLjEyNS4wMTgtLjE4LjAzIDEuMDctLjQxIDEuNzQzLTEuMjA3IDIuMjM0LTIuMTc4LS4yOC4xOTMtLjc0LjQ0Mi0xLjI4OC41NjZhMi41MiAyLjUyIDAgMCAxLS4yMy4wNDRjLS4wMiAwLS4wMzguMDA2LS4wNTcuMDA2LjM3NC0uMTU1LjY4NS0uMzMuOTU5LS41MzUuMDU2LS4wNDQuMTEyLS4wODcuMTY4LS4xMzcuMDgxLS4wNzUuMTYyLS4xNS4yMzctLjIyNC4wNS0uMDUuMDkzLS4xLjE0My0uMTU2LjEwNi0uMTI0LjIwNS0uMjYxLjI5OS0uNDEuMDMtLjA0NC4wNTYtLjA5NC4wODctLjEzOC4wMzctLjA2OC4wNjgtLjEzNy4xLS4yMDUuMTQ5LS4zLjI2Ny0uNTY3LjM2LS44MDMuMDUtLjExOS4wODgtLjIyNC4xMjUtLjMzLjAxMy0uMDM4LjAyNS0uMDgxLjA0NC0uMTE5LjAzNy0uMTEyLjA2OC0uMjExLjA5My0uMzA1LjAzNy0uMTMuMDU2LS4yMzYuMDY5LS4zMTFhMS4wNzcgMS4wNzcgMCAwIDEtLjEyNS4wODdjLS4zMjQuMTkzLS44NzguMzY4LTEuMzI2LjQ0OGwuODg0LS4xLS44ODQuMWMtLjA2Mi4wMTMtLjEwNi4wMi0uMTU2LjAzMi4wMDQtLjAwNS0uOTk0LjEwMS0yLjk5NS4zMTZhMi4zMTMgMi4zMTMgMCAwIDAtLjExOC4yNDRaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdnJyksIFwiKVwiKSxcbiAgICBkOiBcIk00LjExNSAyMS45MTRjLS4xNTUuNDMtLjMxNy44NzItLjQ3MyAxLjMyIDAgLjAwNi0uMDA2LjAxMy0uMDA2LjAxOS0uMDI1LjA2Mi0uMDQ0LjEyNC0uMDY5LjE5My0uMTA2LjMwNS0uMTk5LjU3My0uNDEgMS4xOTUuMzQ4LjE2Mi42MjguNTguODk2IDEuMDU5YTEuODc2IDEuODc2IDAgMCAwLS42MjMtMS4zMTRjMS43MjUuMDc1IDMuMjEzLS4zNjEgMy45NzktMS42MTkuMDY4LS4xMTIuMTMtLjIzLjE4Ni0uMzU1LS4zNDguNDQyLS43ODQuNjMtMS41OTMuNTg2aC0uMDA3LjAwN2MxLjIwMS0uNTM2IDEuNzk5LTEuMDUyIDIuMzM0LTEuOTA1LjEyNS0uMjA2LjI1LS40MjQuMzc0LS42NjctMS4wNTIgMS4wNzgtMi4yNjYgMS4zODMtMy41NDMgMS4xNTJsLS45NTguMTA2Yy0uMDMyLjA2OS0uMDYzLjE1LS4wOTQuMjNaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BcGFjaGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0FwcFNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXBwU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTkuNS45MzhhNy4wMDIgNy4wMDIgMCAwIDAtNyAwbC04IDQuNjE5QTcgNyAwIDAgMCAxIDExLjYydjkuMjM3YTcgNyAwIDAgMCAzLjUgNi4wNjJsNy41IDQuMzNWMTcuOTc5YTcgNyAwIDAgMSAzLjUtNi4wNjJMMjcgNS4yNzYgMTkuNS45MzlaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOS41LjkzOGE3LjAwMiA3LjAwMiAwIDAgMC03IDBMNSA1LjI3N2wxMSA2LjM1IDExLTYuMzUtNy41LTQuMzRaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkE3NDRFXCIsXG4gICAgZDogXCJtMjguNDM1IDcuNzYtMTAuMDI2IDUuNzlhNi45OTQgNi45OTQgMCAwIDEgMS41OSA0LjQyOHYxMy4yN2w3LjUtNC4zM2E3IDcgMCAwIDAgMy41LTYuMDYxdi05LjIzOGE2Ljk5MiA2Ljk5MiAwIDAgMC0xLjU4Ni00LjQyMmwtLjk3OC41NjRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXBwU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Bd3MgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0F3cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4wMTkgMTMuODc4YzAgLjM5LjA0Mi43MDUuMTE3LjkzNi4wODUuMjMyLjE5MS40ODQuMzQuNzU4YS40NTQuNDU0IDAgMCAxIC4wNzUuMjQyYzAgLjEwNS0uMDY0LjIxLS4yMDIuMzE1bC0uNjcuNDQyYS41MTQuNTE0IDAgMCAxLS4yNzcuMDk1Yy0uMTA3IDAtLjIxMy0uMDUzLS4zMi0uMTQ4YTMuMjU4IDMuMjU4IDAgMCAxLS4zODMtLjQ5NCA4LjEwOSA4LjEwOSAwIDAgMS0uMzMtLjYyYy0uODMuOTY3LTEuODczIDEuNDUtMy4xMjggMS40NS0uODk0IDAtMS42MDctLjI1Mi0yLjEyOS0uNzU2LS41MjEtLjUwNS0uNzg3LTEuMTc4LS43ODctMi4wMiAwLS44OTQuMzE5LTEuNjIuOTY4LTIuMTY2LjY1LS41NDcgMS41MTEtLjgyIDIuNjA3LS44Mi4zNjIgMCAuNzM1LjAzIDEuMTI4LjA4My4zOTQuMDUzLjc5OS4xMzcgMS4yMjQuMjMydi0uNzY4YzAtLjgtLjE3LTEuMzU3LS41LTEuNjgzLS4zNC0uMzI2LS45MTUtLjQ4NC0xLjczNS0uNDg0LS4zNzIgMC0uNzU1LjA0My0xLjE0OS4xMzctLjM5NC4wOTUtLjc3Ny4yMS0xLjE1LjM1OC0uMTcuMDczLS4yOTcuMTE1LS4zNzIuMTM2YS42Ni42NiAwIDAgMS0uMTcuMDMyYy0uMTQ5IDAtLjIyMy0uMTA1LS4yMjMtLjMyNnYtLjUxNWMwLS4xNjkuMDItLjI5NS4wNzQtLjM2OGEuNzk2Ljc5NiAwIDAgMSAuMjk4LS4yMjFjLjM3My0uMTkuODItLjM0NyAxLjM0LS40NzRhNi41MjQgNi41MjQgMCAwIDEgMS42NjEtLjJjMS4yNjYgMCAyLjE5Mi4yODUgMi43ODguODUyLjU4Ni41NjguODg0IDEuNDMuODg0IDIuNTg4djMuNDA3aC4wMlptLTQuMzIgMS42Yy4zNSAwIC43MTItLjA2NCAxLjA5NS0uMTlhMi4zNzMgMi4zNzMgMCAwIDAgMS4wMTEtLjY3M2MuMTctLjIuMjk4LS40MjEuMzYyLS42NzMuMDY0LS4yNTMuMTA3LS41NTguMTA3LS45MTZ2LS40NDFhOC45ODIgOC45ODIgMCAwIDAtLjk4LS4xNzkgOC4xMTMgOC4xMTMgMCAwIDAtMS0uMDYzYy0uNzEzIDAtMS4yMzQuMTM3LTEuNTg2LjQyLS4zNS4yODUtLjUyMS42ODQtLjUyMSAxLjIxIDAgLjQ5NC4xMjguODYyLjM5NCAxLjExNS4yNTUuMjYzLjYyOC4zOSAxLjExNy4zOVptOC41NDUgMS4xMzVjLS4xOTIgMC0uMzItLjAzMi0uNDA1LS4xMDUtLjA4NS0uMDYzLS4xNi0uMjEtLjIyMy0uNDFsLTIuNTAxLTguMTNjLS4wNjQtLjIxLS4wOTYtLjM0Ny0uMDk2LS40MjEgMC0uMTY4LjA4NS0uMjYzLjI1Ni0uMjYzaDEuMDQzYy4yMDIgMCAuMzQuMDMyLjQxNS4xMDUuMDg1LjA2My4xNDkuMjEuMjEyLjQxbDEuNzg4IDYuOTYzIDEuNjYtNi45NjNjLjA1NC0uMjEuMTE3LS4zNDcuMjAzLS40MS4wODUtLjA2My4yMzQtLjEwNS40MjUtLjEwNWguODUyYy4yMDIgMCAuMzQuMDMyLjQyNS4xMDUuMDg1LjA2My4xNi4yMS4yMDMuNDFsMS42ODEgNy4wNDcgMS44NDEtNy4wNDdjLjA2NC0uMjEuMTM4LS4zNDcuMjEzLS40MS4wODUtLjA2My4yMjMtLjEwNS40MTUtLjEwNWguOTljLjE3IDAgLjI2Ni4wODQuMjY2LjI2MyAwIC4wNTItLjAxMS4xMDUtLjAyMi4xNjgtLjAxLjA2My0uMDMyLjE0Ny0uMDc0LjI2M2wtMi41NjUgOC4xM2MtLjA2NC4yMS0uMTM4LjM0Ny0uMjIzLjQxLS4wODUuMDYzLS4yMjQuMTA1LS40MDUuMTA1aC0uOTE1Yy0uMjAyIDAtLjM0LS4wMzEtLjQyNi0uMTA1LS4wODUtLjA3My0uMTYtLjIxLS4yMDItLjQybC0xLjY1LTYuNzg0LTEuNjM4IDYuNzczYy0uMDUzLjIxLS4xMTcuMzQ3LS4yMDIuNDItLjA4Ni4wNzQtLjIzNS4xMDYtLjQyNi4xMDZoLS45MTVabTEzLjY3NS4yODRhNy4xMjIgNy4xMjIgMCAwIDEtMS42NC0uMTljLS41MzEtLjEyNi0uOTQ2LS4yNjItMS4yMjMtLjQyLS4xNy0uMDk1LS4yODctLjItLjMzLS4yOTVhLjczNS43MzUgMCAwIDEtLjA2NC0uMjk0di0uNTM2YzAtLjIyMS4wODUtLjMyNy4yNDUtLjMyN2EuNjEuNjEgMCAwIDEgLjE5Mi4wMzJjLjA2My4wMjEuMTYuMDYzLjI2Ni4xMDUuMzYxLjE1OC43NTUuMjg0IDEuMTcuMzY4LjQyNi4wODQuODQuMTI3IDEuMjY3LjEyNy42NyAwIDEuMTkyLS4xMTYgMS41NTMtLjM0OGExLjEzIDEuMTMgMCAwIDAgLjU1NC0uOTk5YzAtLjI5NC0uMDk2LS41MzYtLjI4OC0uNzM2LS4xOTEtLjItLjU1My0uMzc5LTEuMDc0LS41NDdsLTEuNTQ0LS40NzNjLS43NzYtLjI0Mi0xLjM1MS0uNi0xLjcwMi0xLjA3M2EyLjQ4NyAyLjQ4NyAwIDAgMS0uNTMyLTEuNTI1YzAtLjQ0Mi4wOTUtLjgzLjI4Ny0xLjE2Ny4xOTItLjMzNy40NDctLjYzMS43NjYtLjg2My4zMi0uMjQyLjY4MS0uNDIgMS4xMDctLjU0N2E0LjY5IDQuNjkgMCAwIDEgMS4zNC0uMTc4Yy4yMzUgMCAuNDguMDEuNzE0LjA0Mi4yNDUuMDMxLjQ2OC4wNzMuNjkyLjExNS4yMTIuMDUzLjQxNS4xMDUuNjA2LjE2OS4xOTIuMDYzLjM0LjEyNi40NDcuMTg5YS45MTguOTE4IDAgMCAxIC4zMi4yNjNjLjA2My4wODQuMDk1LjIuMDk1LjM0N3YuNDk0YzAgLjIyMS0uMDg1LjMzNy0uMjQ1LjMzNy0uMDg1IDAtLjIyMy0uMDQyLS40MDQtLjEyNi0uNjA3LS4yNzQtMS4yODgtLjQxLTIuMDQzLS40MS0uNjA3IDAtMS4wODYuMDk0LTEuNDE2LjI5NC0uMzMuMi0uNS41MDUtLjUuOTM2IDAgLjI5NC4xMDcuNTQ3LjMyLjc0Ny4yMTIuMi42MDYuNCAxLjE3LjU3OGwxLjUxMS40NzNjLjc2Ni4yNDIgMS4zMi41NzkgMS42NSAxLjAxLjMzLjQzMS40OS45MjYuNDkgMS40NzMgMCAuNDUyLS4wOTYuODYyLS4yNzcgMS4yMmEyLjgzNiAyLjgzNiAwIDAgMS0uNzc3LjkyNWMtLjMzLjI2My0uNzI0LjQ1Mi0xLjE4Mi41OS0uNDc4LjE0Ni0uOTc5LjIyLTEuNTIxLjIyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwiI0Y5MFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOC45MyAyMi4wMDljLTMuNTAxIDIuNTU2LTguNTg4IDMuOTEyLTEyLjk2MiAzLjkxMi02LjEzIDAtMTEuNjUzLTIuMjQtMTUuODI1LTUuOTYzLS4zMy0uMjk1LS4wMzItLjY5NC4zNjItLjQ2MyA0LjUxMiAyLjU4NyAxMC4wNzggNC4xNTUgMTUuODM2IDQuMTU1IDMuODg0IDAgOC4xNTEtLjggMTIuMDc4LTIuNDQuNTg2LS4yNjMgMS4wODYuMzc4LjUxMS43OTlaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC4zODggMjAuMzY4Yy0uNDQ3LS41NjgtMi45NTgtLjI3My00LjA5Ny0uMTM3LS4zNC4wNDItLjM5NC0uMjUyLS4wODUtLjQ3MyAyLTEuMzg4IDUuMjg5LS45ODkgNS42NzItLjUyNi4zODMuNDc0LS4xMDcgMy43MjMtMS45OCA1LjI4LS4yODcuMjQyLS41NjQuMTE2LS40MzYtLjIuNDI2LTEuMDQxIDEuMzczLTMuMzg2LjkyNi0zLjk0NFpcIlxuICB9KSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F3czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQXdzTW9ubyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXdzTW9ubyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTkuMDE5IDEzLjg3OGMwIC4zOS4wNDIuNzA1LjExNy45MzYuMDg1LjIzMi4xOTEuNDg0LjM0Ljc1OGEuNDU0LjQ1NCAwIDAgMSAuMDc1LjI0MmMwIC4xMDUtLjA2NC4yMS0uMjAyLjMxNWwtLjY3LjQ0MmEuNTE0LjUxNCAwIDAgMS0uMjc3LjA5NWMtLjEwNyAwLS4yMTMtLjA1My0uMzItLjE0OGEzLjI1OCAzLjI1OCAwIDAgMS0uMzgzLS40OTQgOC4xMDkgOC4xMDkgMCAwIDEtLjMzLS42MmMtLjgzLjk2Ny0xLjg3MyAxLjQ1LTMuMTI4IDEuNDUtLjg5NCAwLTEuNjA3LS4yNTItMi4xMjktLjc1Ni0uNTIxLS41MDUtLjc4Ny0xLjE3OC0uNzg3LTIuMDIgMC0uODk0LjMxOS0xLjYyLjk2OC0yLjE2Ni42NS0uNTQ3IDEuNTExLS44MiAyLjYwNy0uODIuMzYyIDAgLjczNS4wMyAxLjEyOC4wODMuMzk0LjA1My43OTkuMTM3IDEuMjI0LjIzMnYtLjc2OGMwLS44LS4xNy0xLjM1Ny0uNS0xLjY4My0uMzQtLjMyNi0uOTE1LS40ODQtMS43MzUtLjQ4NC0uMzcyIDAtLjc1NS4wNDMtMS4xNDkuMTM3LS4zOTQuMDk1LS43NzcuMjEtMS4xNS4zNTgtLjE3LjA3My0uMjk3LjExNS0uMzcyLjEzNmEuNjYuNjYgMCAwIDEtLjE3LjAzMmMtLjE0OSAwLS4yMjMtLjEwNS0uMjIzLS4zMjZ2LS41MTVjMC0uMTY5LjAyLS4yOTUuMDc0LS4zNjhhLjc5Ni43OTYgMCAwIDEgLjI5OC0uMjIxYy4zNzMtLjE5LjgyLS4zNDcgMS4zNC0uNDc0YTYuNTI0IDYuNTI0IDAgMCAxIDEuNjYxLS4yYzEuMjY2IDAgMi4xOTIuMjg1IDIuNzg4Ljg1Mi41ODYuNTY4Ljg4NCAxLjQzLjg4NCAyLjU4OHYzLjQwN2guMDJabS00LjMyIDEuNmMuMzUgMCAuNzEyLS4wNjQgMS4wOTUtLjE5YTIuMzczIDIuMzczIDAgMCAwIDEuMDExLS42NzNjLjE3LS4yLjI5OC0uNDIxLjM2Mi0uNjczLjA2NC0uMjUzLjEwNy0uNTU4LjEwNy0uOTE2di0uNDQxYTguOTgyIDguOTgyIDAgMCAwLS45OC0uMTc5IDguMTEzIDguMTEzIDAgMCAwLTEtLjA2M2MtLjcxMyAwLTEuMjM0LjEzNy0xLjU4Ni40Mi0uMzUuMjg1LS41MjEuNjg0LS41MjEgMS4yMSAwIC40OTQuMTI4Ljg2Mi4zOTQgMS4xMTUuMjU1LjI2My42MjguMzkgMS4xMTcuMzlabTguNTQ1IDEuMTM1Yy0uMTkyIDAtLjMyLS4wMzItLjQwNS0uMTA1LS4wODUtLjA2My0uMTYtLjIxLS4yMjMtLjQxbC0yLjUwMS04LjEzYy0uMDY0LS4yMS0uMDk2LS4zNDctLjA5Ni0uNDIxIDAtLjE2OC4wODUtLjI2My4yNTYtLjI2M2gxLjA0M2MuMjAyIDAgLjM0LjAzMi40MTUuMTA1LjA4NS4wNjMuMTQ5LjIxLjIxMi40MWwxLjc4OCA2Ljk2MyAxLjY2LTYuOTYzYy4wNTQtLjIxLjExNy0uMzQ3LjIwMy0uNDEuMDg1LS4wNjMuMjM0LS4xMDUuNDI1LS4xMDVoLjg1MmMuMjAyIDAgLjM0LjAzMi40MjUuMTA1LjA4NS4wNjMuMTYuMjEuMjAzLjQxbDEuNjgxIDcuMDQ3IDEuODQxLTcuMDQ3Yy4wNjQtLjIxLjEzOC0uMzQ3LjIxMy0uNDEuMDg1LS4wNjMuMjIzLS4xMDUuNDE1LS4xMDVoLjk5Yy4xNyAwIC4yNjYuMDg0LjI2Ni4yNjMgMCAuMDUyLS4wMTEuMTA1LS4wMjIuMTY4LS4wMS4wNjMtLjAzMi4xNDctLjA3NC4yNjNsLTIuNTY1IDguMTNjLS4wNjQuMjEtLjEzOC4zNDctLjIyMy40MS0uMDg1LjA2My0uMjI0LjEwNS0uNDA1LjEwNWgtLjkxNWMtLjIwMiAwLS4zNC0uMDMxLS40MjYtLjEwNS0uMDg1LS4wNzMtLjE2LS4yMS0uMjAyLS40MmwtMS42NS02Ljc4NC0xLjYzOCA2Ljc3M2MtLjA1My4yMS0uMTE3LjM0Ny0uMjAyLjQyLS4wODYuMDc0LS4yMzUuMTA2LS40MjYuMTA2aC0uOTE1Wm0xMy42NzUuMjg0YTcuMTIyIDcuMTIyIDAgMCAxLTEuNjQtLjE5Yy0uNTMxLS4xMjYtLjk0Ni0uMjYyLTEuMjIzLS40Mi0uMTctLjA5NS0uMjg3LS4yLS4zMy0uMjk1YS43MzUuNzM1IDAgMCAxLS4wNjQtLjI5NHYtLjUzNmMwLS4yMjEuMDg1LS4zMjcuMjQ1LS4zMjdhLjYxLjYxIDAgMCAxIC4xOTIuMDMyYy4wNjMuMDIxLjE2LjA2My4yNjYuMTA1LjM2MS4xNTguNzU1LjI4NCAxLjE3LjM2OC40MjYuMDg0Ljg0LjEyNyAxLjI2Ny4xMjcuNjcgMCAxLjE5Mi0uMTE2IDEuNTUzLS4zNDhhMS4xMyAxLjEzIDAgMCAwIC41NTQtLjk5OWMwLS4yOTQtLjA5Ni0uNTM2LS4yODgtLjczNi0uMTkxLS4yLS41NTMtLjM3OS0xLjA3NC0uNTQ3bC0xLjU0NC0uNDczYy0uNzc2LS4yNDItMS4zNTEtLjYtMS43MDItMS4wNzNhMi40ODcgMi40ODcgMCAwIDEtLjUzMi0xLjUyNWMwLS40NDIuMDk1LS44My4yODctMS4xNjcuMTkyLS4zMzcuNDQ3LS42MzEuNzY2LS44NjMuMzItLjI0Mi42ODEtLjQyIDEuMTA3LS41NDdhNC42OSA0LjY5IDAgMCAxIDEuMzQtLjE3OGMuMjM1IDAgLjQ4LjAxLjcxNC4wNDIuMjQ1LjAzMS40NjguMDczLjY5Mi4xMTUuMjEyLjA1My40MTUuMTA1LjYwNi4xNjkuMTkyLjA2My4zNC4xMjYuNDQ3LjE4OWEuOTE4LjkxOCAwIDAgMSAuMzIuMjYzYy4wNjMuMDg0LjA5NS4yLjA5NS4zNDd2LjQ5NGMwIC4yMjEtLjA4NS4zMzctLjI0NS4zMzctLjA4NSAwLS4yMjMtLjA0Mi0uNDA0LS4xMjYtLjYwNy0uMjc0LTEuMjg4LS40MS0yLjA0My0uNDEtLjYwNyAwLTEuMDg2LjA5NC0xLjQxNi4yOTQtLjMzLjItLjUuNTA1LS41LjkzNiAwIC4yOTQuMTA3LjU0Ny4zMi43NDcuMjEyLjIuNjA2LjQgMS4xNy41NzhsMS41MTEuNDczYy43NjYuMjQyIDEuMzIuNTc5IDEuNjUgMS4wMS4zMy40MzEuNDkuOTI2LjQ5IDEuNDczIDAgLjQ1Mi0uMDk2Ljg2Mi0uMjc3IDEuMjJhMi44MzYgMi44MzYgMCAwIDEtLjc3Ny45MjVjLS4zMy4yNjMtLjcyNC40NTItMS4xODIuNTktLjQ3OC4xNDYtLjk3OS4yMi0xLjUyMS4yMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4LjkzIDIyLjAwOWMtMy41MDEgMi41NTYtOC41ODggMy45MTItMTIuOTYyIDMuOTEyLTYuMTMgMC0xMS42NTMtMi4yNC0xNS44MjUtNS45NjMtLjMzLS4yOTUtLjAzMi0uNjk0LjM2Mi0uNDYzIDQuNTEyIDIuNTg3IDEwLjA3OCA0LjE1NSAxNS44MzYgNC4xNTUgMy44ODQgMCA4LjE1MS0uOCAxMi4wNzgtMi40NC41ODYtLjI2MyAxLjA4Ni4zNzguNTExLjc5OVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjM4OCAyMC4zNjhjLS40NDctLjU2OC0yLjk1OC0uMjczLTQuMDk3LS4xMzctLjM0LjA0Mi0uMzk0LS4yNTItLjA4NS0uNDczIDItMS4zODggNS4yODktLjk4OSA1LjY3Mi0uNTI2LjM4My40NzQtLjEwNyAzLjcyMy0xLjk4IDUuMjgtLjI4Ny4yNDItLjU2NC4xMTYtLjQzNi0uMi40MjYtMS4wNDEgMS4zNzMtMy4zODYuOTI2LTMuOTQ0WlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Bd3NNb25vOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29BenVyZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXp1cmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDcyQzZcIixcbiAgICBkOiBcIm0xNy40NDggNC05LjQxNCA4LjAxTDAgMjYuMTU3aDcuMjQzTDE3LjQ0OCA0Wk0xOC43IDUuODc0bC00LjAxOCAxMS4xMSA3LjcwNCA5LjQ5N0w3LjQ0MSAyOWgyNC40OTRMMTguNyA1Ljg3NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BenVyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQXp1cmVNb25vID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BenVyZU1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xNy40NDggNC05LjQxNCA4LjAxTDAgMjYuMTU3aDcuMjQzTDE3LjQ0OCA0Wk0xOC43IDUuODc0bC00LjAxOCAxMS4xMSA3LjcwNCA5LjQ5N0w3LjQ0MSAyOWgyNC40OTRMMTguNyA1Ljg3NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BenVyZU1vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0JlYXRzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29CZWF0cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwODBENVwiLFxuICAgIGQ6IFwiTTE1IDIwSDRWMGgxMWM1LjUyMiAwIDEwIDQuNDc4IDEwIDEwcy00LjQ3OCAxMC0xMCAxMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBDMkIzXCIsXG4gICAgZDogXCJNMjYuNzAyIDE1LjYyNEMyNC42IDE5Ljk3OSAyMC4xNTIgMjMgMTUgMjNINHY5aDE1YzUuNTIyIDAgMTAtNC40NzggMTAtMTBhOS45NTIgOS45NTIgMCAwIDAtMi4yOTgtNi4zNzZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0LjMzOCAxMy41NTRBOS45NDIgOS45NDIgMCAwIDAgMTkgMTJINHY4aDExYzQuMjcgMCA3LjkwMy0yLjY4IDkuMzM4LTYuNDQ2XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0JlYXRzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29CdXNpbmVzc0FuYWx5dGljcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQnVzaW5lc3NBbmFseXRpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTAgMjJjMCA1LjUyMiA0LjQ3OCAxMCAxMCAxMFYxMkM0LjQ3OCAxMiAwIDE2LjQ3OCAwIDIyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCAxMnYxMGgxMGMwLTUuNTIyLTQuNDc4LTEwLTEwLTEwXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA0RTk4XCIsXG4gICAgZDogXCJNMTAgMHY5YzcuMTY4IDAgMTMgNS44MzIgMTMgMTNoOUMzMiA5Ljg1IDIyLjE1IDAgMTAgMFwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29CdXNpbmVzc0FuYWx5dGljczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQ2VwaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ2VwaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNUM1NlwiLFxuICAgIGQ6IFwiTTI1LjQ3MSAyNy41NmMtMS4wNi0uNTY3LTEuNjc2LTEuMjA2LTEuODExLTEuOTAyLS4xMy0uNjczLjE3LTEuNDIxLjkxOC0yLjI4OGExMS4yOSAxMS4yOSAwIDAgMCAyLjc3My03LjQyQTExLjMyNCAxMS4zMjQgMCAwIDAgMTYuMDQyIDQuNjRsLS4wNS4wMDFoLS4wNUExMS4zMjQgMTEuMzI0IDAgMCAwIDQuNjMyIDE1Ljk0OWExMS4yOTEgMTEuMjkxIDAgMCAwIDIuNzc0IDcuNDIyYy43NTMuODcyIDEuMDQ3IDEuNTkxLjkyOCAyLjI1Ny0uMTMuNjk0LS43NCAxLjM0Mi0xLjgxNyAxLjkzLTEuNjU3LTEuMzc1LTMuMTE2LTMuMjEyLTQuMDEtNS4wNTZhMTQuOTQzIDE0Ljk0MyAwIDAgMS0xLjExNy0zLjEzOUExNC45OTcgMTQuOTk3IDAgMCAxIDEgMTUuOTVhMTQuOTAxIDE0LjkwMSAwIDAgMSA0LjM3OC0xMC41NyAxNC45MjQgMTQuOTI0IDAgMCAxIDQuNzUyLTMuMjA0QzExLjk3IDEuMzk1IDEzLjk1Ljk5NiAxNS45NDggMWguMTAxYTE0Ljg4OCAxNC44ODggMCAwIDEgMTAuNTcgNC4zNzggMTQuOTEyIDE0LjkxMiAwIDAgMSAzLjk4MiAxMy45ODUgMTQuODcxIDE0Ljg3MSAwIDAgMS0xLjExOCAzLjE0Yy0uOSAxLjg0My0yLjM1OCAzLjY4MS00LjAxIDUuMDU3aC0uMDAzWm0tNS41MjMgMi43OThjLS4xNzMtLjExLS43NjctLjU1LTEuMzQ1LTEuMzUzYTYuMTIyIDYuMTIyIDAgMCAxLTEuMTc0LTMuNzM4IDguMjYgOC4yNiAwIDAgMSAuNjExLTIuOTY0IDguNDIgOC40MiAwIDAgMSAxLjYyNy0yLjU0bC4wMDQtLjAwOC4xNTQtLjE3OGMuMjYzLS4zMDUuNTM2LS42MjIuNzUzLS45OS4yNjgtLjQ1NC40NjItLjkzMS41NzgtMS40Mi4xNzgtLjc1OC4xODgtMS41NDcuMDI5LTIuMzFhNS4zIDUuMyAwIDAgMC0uODU4LTEuOTU2IDUuMjY0IDUuMjY0IDAgMCAwLTQuMjktMi4yMTdoLS4xMDhhNS4yNSA1LjI1IDAgMCAwLTQuMjkgMi4yMTYgNS4zMSA1LjMxIDAgMCAwLS44NTYgMS45NTZjLS4xNi43NjMtLjE1IDEuNTUyLjAzIDIuMzExLjExNS40ODguMzEuOTY1LjU3NiAxLjQxOS4yMTkuMzcuNDkuNjg0Ljc1My45OWwuMTU1LjE3OS4wMDMuMDA3YTguMzg0IDguMzg0IDAgMCAxIDEuNjI4IDIuNTQgOC4yNCA4LjI0IDAgMCAxIC42MSAyLjk2NCA2LjEyMyA2LjEyMyAwIDAgMS0xLjE3MyAzLjczOGMtLjU4Ljc5NS0xLjE3NCAxLjI0My0xLjM0NiAxLjM1MmwtLjg2Ny0uMjZhMTUuNDM0IDE1LjQzNCAwIDAgMS0yLjQ5LTEuMDk4IDQuMjQ1IDQuMjQ1IDAgMCAwIDIuMjM0LTMuNzM2YzAtMS4wMzQtLjQwMy0yLjAyOC0xLjE5NS0yLjk1bC0uMDM0LS4wMzQtLjIzNy0uMjYtLjYzNi0uNzQ2YTguOTI0IDguOTI0IDAgMCAxLTEuNTI1LTMuMjYgOC45ODMgOC45ODMgMCAwIDEtLjA1LTMuOTA1IDguOTA2IDguOTA2IDAgMCAxIDEuNDYtMy4zMTNBOC45OTMgOC45OTMgMCAwIDEgMTEuMjMgOC4zOWE4LjkzNyA4LjkzNyAwIDAgMSA0LjcwMi0xLjM0NGguMTEyYy40MiAwIC44NC4wMjkgMS4yNTUuMDg4YTguOTM4IDguOTM4IDAgMCAxIDMuNDQ4IDEuMjU2IDkuMDAzIDkuMDAzIDAgMCAxIDIuNTU0IDIuNDA0IDkuMDkzIDkuMDkzIDAgMCAxIDEuNDU5IDMuMzEzIDkuMDQzIDkuMDQzIDAgMCAxLS4wNSAzLjkxMiA4LjkyNSA4LjkyNSAwIDAgMS0xLjUyNiAzLjI2Yy0uMi4yNjUtLjQwOS40OTUtLjYzNy43NDVsLS4yMy4yNTRjLS4wMTcuMDE2LS4wMy4wMjctLjA0LjA0My0uODA0Ljk2MS0xLjE5NSAxLjkyNy0xLjE5NSAyLjk0OGE0LjI1IDQuMjUgMCAwIDAgMi4yMzcgMy43MzVjLS43OTUuNDQxLTEuNjMuODA5LTIuNDkxIDEuMDk4bC0uODYyLjI2LS4wMTgtLjAwNFptLTMuOTU2LTExLjMxNGEyLjk1NyAyLjk1NyAwIDAgMS0yLjk1Mi0yLjk1MiAyLjk1NyAyLjk1NyAwIDAgMSAyLjk1Mi0yLjk1MiAyLjk1NiAyLjk1NiAwIDAgMSAyLjk1IDIuOTUyIDIuOTU3IDIuOTU3IDAgMCAxLTIuOTUgMi45NTJcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29DZXBoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29DbG91ZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ2xvdWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjM3IDE4LjM1MmMuMDMyLS4wMS4wNjYtLjAxNC4xLS4wMjNBNiA2IDAgMCAxIDE4IDEwVjBDOS4xNjMgMCAyIDcuMTY0IDIgMTZjMCAyLjc5My43MiA1LjQxNyAxLjk3NiA3LjcwMmExOC45NDcgMTguOTQ3IDAgMCAxIDguMzkzLTUuMzQ5XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTggMEExNS45NTkgMTUuOTU5IDAgMCAwIDUuNzE3IDUuNzVhMTYuMDA2IDE2LjAwNiAwIDAgMCA3LjU0MSA1LjAzMmMuNzEuMjIgMS40NzcuMTM1IDIuMTQ2LS4xODhBNS45NCA1Ljk0IDAgMCAxIDE4IDEwYTUuOTQgNS45NCAwIDAgMSAyLjU5Ni41OTRjLjY2OS4zMjMgMS40MzYuNDA4IDIuMTQ2LjE4OGExNi4wMSAxNi4wMSAwIDAgMCA3LjU0MS01LjAzMkExNS45NTkgMTUuOTU5IDAgMCAwIDE4IDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTIyLjc0MiAyMS4yMThjLS43MS0uMjItMS40NzgtLjEzNS0yLjE0Ni4xODhBNS45NDcgNS45NDcgMCAwIDEgMTggMjJhNS45NCA1Ljk0IDAgMCAxLTIuNTk2LS41OTRjLS42NjktLjMyMy0xLjQzNi0uNDA4LTIuMTQ2LS4xODhhMTYuMDA2IDE2LjAwNiAwIDAgMC03LjU0IDUuMDMyQTE1Ljk1OSAxNS45NTkgMCAwIDAgMTggMzJjNC45MzYgMCA5LjM0OC0yLjIzNiAxMi4yODMtNS43NWExNi4wMTYgMTYuMDE2IDAgMCAwLTcuNTQtNS4wMzJcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ2xvdWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0Nsb3VkRWNlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29DbG91ZEVjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDB2MTBhNiA2IDAgMCAwLTUuNTMgOC4zM2MtLjAzNC4wMDktLjA2OC4wMTItLjEuMDIzQTE4Ljk0NyAxOC45NDcgMCAwIDAgMy45NzUgMjMuNyAxNS45MzQgMTUuOTM0IDAgMCAxIDIgMTZDMiA3LjE2NCA5LjE2MyAwIDE4IDBabTAgMTNhMyAzIDAgMSAxIDAgNiAzIDMgMCAwIDEgMC02WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQUVGQVwiLFxuICAgIGQ6IFwiTTIyLjc0MiAyMS4yMThjLS43MS0uMjItMS40NzgtLjEzNS0yLjE0Ni4xODhBNS45NDcgNS45NDcgMCAwIDEgMTggMjJhNS45NCA1Ljk0IDAgMCAxLTIuNTk2LS41OTRjLS42NjktLjMyMy0xLjQzNi0uNDA4LTIuMTQ2LS4xODhhMTYuMDA2IDE2LjAwNiAwIDAgMC03LjU0IDUuMDMyQTE1Ljk1OSAxNS45NTkgMCAwIDAgMTggMzJjNC45MzYgMCA5LjM0OC0yLjIzNiAxMi4yODMtNS43NWExNi4wMTYgMTYuMDE2IDAgMCAwLTcuNTQtNS4wMzJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwODBENVwiLFxuICAgIGQ6IFwiTTE4IDBBMTUuOTU5IDE1Ljk1OSAwIDAgMCA1LjcxNyA1Ljc1YTE2LjAwNiAxNi4wMDYgMCAwIDAgNy41NDEgNS4wMzJjLjcxLjIyIDEuNDc3LjEzNSAyLjE0Ni0uMTg4QTUuOTQgNS45NCAwIDAgMSAxOCAxMGE1Ljk0IDUuOTQgMCAwIDEgMi41OTYuNTk0Yy42NjkuMzIzIDEuNDM2LjQwOCAyLjE0Ni4xODhhMTYuMDEgMTYuMDEgMCAwIDAgNy41NDEtNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAgMCAxOCAwXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ2xvdWRFY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0NvZGUgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0NvZGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05Ljc1IDEyIDE2IDMyaDEwbC0zLjQtMTAuODhBMTMgMTMgMCAwIDAgMTAuMTkgMTJoLS40NFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMyMkE3RjNcIixcbiAgICBkOiBcIk0yNS43MjUgMTEuOTNBMTcgMTcgMCAwIDAgOS41IDBINmwzLjc1IDEyaC40NGExMyAxMyAwIDAgMSAxMi40MSA5LjEyTDI2IDMyaDZsLTYuMjc1LTIwLjA3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDM3N0NBXCIsXG4gICAgZDogXCJNNy45MSAxNi4xNzUgMCAzMmgxMi44NTV6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ29kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQ29kZXNhbmRib3ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0NvZGVzYW5kYm94KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNzM4IDI4LjA0NFYxNi42ODFMMy4xNzIgMTAuOTE5djYuNDZsNS4zMiAyLjY3djQuODg5bDYuMjQ2IDMuMTA2Wm0yLjM0NC4wNjYgNi4zNTctMy4xN3YtNS4wMDJsNS4zNTMtMi42ODZWMTAuODdsLTExLjcxIDUuODU0VjI4LjExWk0yNy4zMDYgOC45OTNsLTYuMDAzLTMuMDEyLTUuMjg2IDIuNjU2LTUuMzI1LTIuNjU5TDQuNjM3IDkuMDNsMTEuMzE3IDUuNjM4IDExLjM1Mi01LjY3NVpNLjgyOCAyMy43NDRWOC4zMjRMMTUuOTgxLjY4OWwxNS4xNTUgNy42MDRWMjMuNzJMMTUuOTggMzEuMjguODI4IDIzLjc0M1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Db2Rlc2FuZGJveDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQ291Y2hiYXNlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Db3VjaGJhc2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFRDIyMjZcIixcbiAgICBkOiBcIk0xNi4wNzIuMDI0QzcuMjkuMDI0LjE0NCA3LjE0Ni4xNDQgMTUuOTUyYzAgOC43ODIgNy4xMjIgMTUuOTI4IDE1LjkyOCAxNS45MjhDMjQuODU0IDMxLjg4IDMyIDI0Ljc1OCAzMiAxNS45NTIgMzIgNy4xNDYgMjQuODU0LjAyNCAxNi4wNzIuMDI0Wm0xMC43NTUgMTguNzE5YzAgLjk2Mi0uNTUzIDEuODA0LTEuNjM2IDEuOTk3LTEuODc3LjMzNi01LjgyMy41My05LjExOS41My0zLjI5NiAwLTcuMjQyLS4xOTQtOS4xMTktLjUzLTEuMDgyLS4xOTMtMS42MzYtMS4wMzUtMS42MzYtMS45OTd2LTYuMjA4YzAtLjk2Mi43NDYtMS44NTIgMS42MzYtMS45OTcuNTU0LS4wOTYgMS44NTMtLjE5MiAyLjg2NC0uMTkyLjM4NSAwIC42OTcuMjg5LjY5Ny43NDZ2NC4zNTVsNS41ODItLjEyIDUuNTgyLjEydi00LjM1NWMwLS40NTcuMzEzLS43NDYuNjk4LS43NDYgMS4wMSAwIDIuMzEuMDk2IDIuODYzLjE5Mi45MTQuMTQ1IDEuNjM2IDEuMDM1IDEuNjM2IDEuOTk3LS4wNDggMi4wNDUtLjA0OCA0LjEzOS0uMDQ4IDYuMjA4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0NvdWNoYmFzZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvRG9ja2VyID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Eb2NrZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMxMzZFQTNcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTguMDk5IDE1LjEwOGgzLjMwNHYtMi45NzNIMTguMXYyLjk3M3ptLTMuOTA1IDBoMy4zMDR2LTIuOTczaC0zLjMwNHYyLjk3M3ptLTMuOTA1IDBoMy4zMDR2LTIuOTczSDEwLjI5djIuOTczem0tMy45MDUgMEg5LjY5di0yLjk3M0g2LjM4NHYyLjk3M3ptLTMuOTA0IDBoMy4zMDR2LTIuOTczSDIuNDh2Mi45NzN6bTMuOTA0LTMuNTY4SDkuNjlWOC41NjhINi4zODR2Mi45NzJ6bTMuOTA1IDBoMy4zMDRWOC41NjhIMTAuMjl2Mi45NzJ6bTMuOTA1IDBoMy4zMDRWOC41NjhoLTMuMzA0djIuOTcyem0wLTMuNTY3aDMuMzA0VjVoLTMuMzA0djIuOTczem0xNy4xMzkgNS40MDJjLS43MjItLjQ3OC0yLjM4LS42NTMtMy42NTYtLjQxNS0uMTY0LTEuMTktLjgzNC0yLjIyMS0yLjA1Mi0zLjE1M2wtLjctLjQ2My0uNDY4LjY5NGMtLjU5OC44OTMtLjg5NyAyLjEzLS44IDMuMzE3LjA0NS40MTguMTgzIDEuMTY0LjYxNyAxLjgyLS40MzMuMjMxLTEuMjkuNTQ5LTIuNDIuNTI4SC4xMjRsLS4wNDMuMjQ3Yy0uMjA0IDEuMTkzLS4yIDQuOTE0IDIuMjQgNy43NzRDNC4xNzggMjUuODk4IDYuOTYgMjcgMTAuNTkgMjdjNy44NyAwIDEzLjY5My0zLjU4NiAxNi40Mi0xMC4xMDQgMS4wNzMuMDIgMy4zODEuMDA2IDQuNTY3LTIuMjM3LjAzMS0uMDUxLjEwMi0uMTg2LjMxLS42MWwuMTEzLS4yMzQtLjY2Ny0uNDR6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRG9ja2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Ecm9wd2l6YXJkID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Ecm9wd2l6YXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2Ryb3B3aXphcmQnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTggMjkuNjFzOS41NSA0Ljc0IDE2Ljg1Ni0uODkzYy0xLjkwNS01LjExNC01LjI1LTE5Ljg2Ny03LjIyNi0yNi4zODMtLjQyMi0xLjM4OS0uNDktMS41MjctLjY2My0xLjkwOS0uOTY0LTIuMTM0LTEuOTc4IDQuMTQyLTMuNjI4IDEwLjQ1OUMxMi43NDkgMTMuMTQ4IDggMjkuNjEgOCAyOS42MVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk05LjkyNiAyOC41NjNzOC4xNyA0Ljc5NCAxNC45My4xNTRjLS4xOC0uODA3LS42NDItMi4xMDMtLjk1NS0zLjMxMS0xLjY2NC02LjQxNi00LjY3Ni0xNy4yNDgtNi4xNDQtMjIuNjI2LTEuNTktNS44MjItMi4xMDUuOTg2LTMuOTYxIDguMjMtLjU2NCAyLjIwNC0zLjg3IDE3LjU1My0zLjg3IDE3LjU1M1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjlBNzJCXCIsXG4gICAgZDogXCJtMTIuMTQgMjQuNDEuODUtMS40NjYuNzkzIDEuNTQ0LS45MDggMS45OS0uNzM1LTIuMDY5Wm02LjkzNC01LjU0NS44NS0xLjQ2NS43OTMgMS41NDMtLjkwOCAxLjk5LS43MzUtMi4wNjhabS00Ljc0Ny01Ljg1MS44NS0xLjQ2NS43OTIgMS41NDMtLjkwOCAxLjk5LS43MzQtMi4wNjhcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRjIwMFwiLFxuICAgIGQ6IFwibTEyLjE0IDI0LjQxLjg1LTEuNzE2Ljc5MyAxLjc5NC0uOTA3IDEuNDY4LS43MzYtMS41NDZabTYuOTM0LTUuNTQ1Ljg1MS0xLjcxNi43OTIgMS43OTQtLjkwNiAxLjQ2OC0uNzM3LTEuNTQ2Wm0tNC43NDctNS44NTEuODUtMS43MTYuNzkyIDEuNzk0LS45MDYgMS40NjgtLjczNi0xLjU0NlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMjQyNjVEXCIsXG4gICAgZDogXCJNMTIuOTg3IDI4LjQyMnM2LjA4MiAxLjAxNSAxMC4wODYtMS41NDljLS41MDIgMS41NS00Ljk5MSAzLjMxNC0xMC4wODYgMS41NVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgeDE6IDMzLjQ3MyxcbiAgICB4MjogNy43NTEsXG4gICAgeTE6IDcuNjc0LFxuICAgIHkyOiAyMS4zMzEsXG4gICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBzdG9wQ29sb3I6IFwiIzM4NzFDMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAwLjUxNSxcbiAgICBzdG9wQ29sb3I6IFwiIzJDMzc5MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAwLjg2NSxcbiAgICBzdG9wQ29sb3I6IFwiIzI0MjY1RFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAxLFxuICAgIHN0b3BDb2xvcjogXCIjMjUyNzYxXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgeDE6IDIxLjAyOCxcbiAgICB4MjogNi4wMTcsXG4gICAgeTE6IDE0LjkyOCxcbiAgICB5MjogMTguODQ0LFxuICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgc3RvcENvbG9yOiBcIiMzODcxQzFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC41MTUsXG4gICAgc3RvcENvbG9yOiBcIiMyQzM3OTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC44NjUsXG4gICAgc3RvcENvbG9yOiBcIiMyNDI2NURcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMSxcbiAgICBzdG9wQ29sb3I6IFwiIzI1Mjc2MVwiXG4gIH0pKSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRHJvcHdpemFyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvRWxhc3RpYyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpYyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBcImRhdGEtdHlwZVwiOiBcImxvZ29FbGFzdGljXCIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNmZmZcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMzAuODYgMTMuMTI5QTYuMzMzIDYuMzMzIDAgMCAxIDMyIDE2Ljc3YTYuNDE5IDYuNDE5IDAgMCAxLTEuMTYyIDMuNjUyIDYuMzgyIDYuMzgyIDAgMCAxLTMuMDMyIDIuMzMxIDQuODMzIDQuODMzIDAgMCAxLTEuNjcyIDUuNTQyIDQuNzg5IDQuNzg5IDAgMCAxLTUuNzctLjA3NCA5LjAxNiA5LjAxNiAwIDAgMS00LjUgMy4zMjIgOC45ODIgOC45ODIgMCAwIDEtNS41ODcuMDIzIDkuMDE0IDkuMDE0IDAgMCAxLTQuNTI2LTMuMjg3IDkuMDY3IDkuMDY3IDAgMCAxLTEuNzI3LTUuMzMzYzAtLjU3OS4wNTMtMS4xNTYuMTYtMS43MjVBNi4zMDUgNi4zMDUgMCAwIDEgMS4xNDUgMTguOSA2LjM0MSA2LjM0MSAwIDAgMSAwIDE1LjI0MmE2LjQyIDYuNDIgMCAwIDEgMS4xNjMtMy42NTIgNi4zODQgNi4zODQgMCAwIDEgMy4wMzUtMi4zMyA0LjgzMyA0LjgzMyAwIDAgMSAxLjY1OC01LjU1NyA0Ljc4OSA0Ljc4OSAwIDAgMSA1Ljc4LjA3IDkuMDM3IDkuMDM3IDAgMCAxIDQuOTMtMy40NDYgOS4wMDcgOS4wMDcgMCAwIDEgNS45OTQuNDE5IDkuMDUgOS4wNSAwIDAgMSA0LjQwNyA0LjA5OCA5LjA5NyA5LjA5NyAwIDAgMSAuODczIDUuOTY1IDYuMjk4IDYuMjk4IDAgMCAxIDMuMDIgMi4zMlptLTE4LjI4LjY1OCA3LjAwMiAzLjIxMSA3LjA2Ni02LjIxM2E3Ljg1IDcuODUgMCAwIDAgLjE1Mi0xLjU1N2MwLTEuNjkyLS41MzktMy4zNC0xLjU0LTQuNzA0YTcuODk3IDcuODk3IDAgMCAwLTQuMDItMi44NjkgNy44NyA3Ljg3IDAgMCAwLTQuOTMyLjA4NiA3LjkgNy45IDAgMCAwLTMuOTIgMy4wMDdsLTEuMTc0IDYuMTE4IDEuMzY3IDIuOTItLjAwMS4wMDFabS03LjI0NyA3LjQ0MUE3Ljk2NCA3Ljk2NCAwIDAgMCA2LjcyIDI3LjUzYTcuOTE4IDcuOTE4IDAgMCAwIDQuMDQgMi44NzQgNy44OSA3Ljg5IDAgMCAwIDQuOTUtLjA5NyA3LjkyIDcuOTIgMCAwIDAgMy45MjYtMy4wM2wxLjE2Ni02LjEwMi0xLjU1NS0yLjk4NS03LjAzLTMuMjExLTYuODg1IDYuMjQ4LjAwMS4wMDFabTQuNzU1LTExLjAyNC00LjgtMS4xMzcuMDAyLS4wMDJhMy44MiAzLjgyIDAgMCAxIDEuMzEyLTQuMzU4IDMuNzg1IDMuNzg1IDAgMCAxIDQuNTM4LjAyM2wtMS4wNTIgNS40NzRabS01LjIxNi4wMWE1LjI5NCA1LjI5NCAwIDAgMC0yLjU5NSAxLjg4MiA1LjMyNCA1LjMyNCAwIDAgMC0uMTQyIDYuMTI0IDUuMjg3IDUuMjg3IDAgMCAwIDIuNTA1IDJsNi43MzMtNi4xMDEtMS4yMzUtMi42NS01LjI2Ni0xLjI1NVptMTguMjg2IDE3Ljg0OGEzLjczNyAzLjczNyAwIDAgMS0yLjI4NS0uNzg1bDEuMDM3LTUuNDU0IDQuOCAxLjEyNWEzLjgxMiAzLjgxMiAwIDAgMS0xLjgwMSA0LjY4Yy0uNTQuMjgzLTEuMTQuNDMyLTEuNzUxLjQzNFptLTEuMzEtNy40OTkgNS4yOCAxLjIzOGE1LjM0IDUuMzQgMCAwIDAgMi42MjItMS45MzggNS4zNyA1LjM3IDAgMCAwIDEuMDEzLTMuMTA2IDUuMzExIDUuMzExIDAgMCAwLS45MzYtMy4wMSA1LjI4MiA1LjI4MiAwIDAgMC0yLjQ3NS0xLjk0NGwtNi45MDQgNi4wNyAxLjQgMi42OVpcIixcbiAgICBjbGFzc05hbWU6IFwib3V0bGluZVwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwibTEyLjU4IDEzLjc4NyA3LjAwMiAzLjIxMSA3LjA2Ni02LjIxM2E3Ljg0OSA3Ljg0OSAwIDAgMCAuMTUyLTEuNTU3YzAtMS42OTItLjUzOS0zLjM0LTEuNTQtNC43MDRhNy44OTcgNy44OTcgMCAwIDAtNC4wMi0yLjg2OSA3Ljg3IDcuODcgMCAwIDAtNC45MzIuMDg2IDcuOSA3LjkgMCAwIDAtMy45MiAzLjAwN2wtMS4xNzQgNi4xMTggMS4zNjcgMi45Mi0uMDAxLjAwMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTUuMzMzIDIxLjIyOEE3Ljk2NCA3Ljk2NCAwIDAgMCA2LjcyIDI3LjUzYTcuOTE4IDcuOTE4IDAgMCAwIDQuMDQgMi44NzQgNy44OSA3Ljg5IDAgMCAwIDQuOTUtLjA5NyA3LjkyIDcuOTIgMCAwIDAgMy45MjYtMy4wM2wxLjE2Ni02LjEwMi0xLjU1NS0yLjk4NS03LjAzLTMuMjExLTYuODg1IDYuMjQ4LjAwMS4wMDFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIm01LjI4OCA5LjA2NyA0LjggMS4xMzdMMTEuMTQgNC43M2EzLjc4NSAzLjc4NSAwIDAgMC01LjkxNCAxLjk0IDMuODIgMy44MiAwIDAgMCAuMDY0IDIuMzk1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMxQkE5RjVcIixcbiAgICBkOiBcIk00Ljg3MiAxMC4yMTRhNS4yOTQgNS4yOTQgMCAwIDAtMi41OTUgMS44ODIgNS4zMjQgNS4zMjQgMCAwIDAtLjE0MiA2LjEyNCA1LjI4NyA1LjI4NyAwIDAgMCAyLjUwNSAybDYuNzMzLTYuMTAxLTEuMjM1LTIuNjUtNS4yNjYtMS4yNTVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM5M0M5MEVcIixcbiAgICBkOiBcIk0yMC44NzMgMjcuMjc3YTMuNzM2IDMuNzM2IDAgMCAwIDIuMjg1Ljc4NSAzLjc4MyAzLjc4MyAwIDAgMCAzLjEwMS0xLjYzIDMuODEyIDMuODEyIDAgMCAwIC40NTEtMy40ODRsLTQuOC0xLjEyNS0xLjAzNyA1LjQ1NFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzA3Q1wiLFxuICAgIGQ6IFwibTIxLjg0OCAyMC41NjMgNS4yOCAxLjIzOGE1LjM0IDUuMzQgMCAwIDAgMi42MjItMS45MzggNS4zNyA1LjM3IDAgMCAwIDEuMDEzLTMuMTA2IDUuMzEyIDUuMzEyIDAgMCAwLS45MzYtMy4wMSA1LjI4MyA1LjI4MyAwIDAgMC0yLjQ3NS0xLjk0NGwtNi45MDQgNi4wNyAxLjQgMi42OVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29FbGFzdGljOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29FbGFzdGljU3RhY2sgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0VsYXN0aWNTdGFjayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTAgMi4zN0EyLjM3IDIuMzcgMCAwIDEgMi4zNyAwaDI3LjI2QTIuMzcgMi4zNyAwIDAgMSAzMiAyLjM3djYuNTJIMFYyLjM3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMCAyMC4xNDhoMzJ2LTguMjk2SDB2OC4yOTZaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwN0NcIixcbiAgICBkOiBcIk0wIDIzLjExMWgzMnY2LjUxOUEyLjM3IDIuMzcgMCAwIDEgMjkuNjMgMzJIMi4zN0EyLjM3IDIuMzcgMCAwIDEgMCAyOS42M3YtNi41MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29FbGFzdGljU3RhY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0VsYXN0aWNzZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0VsYXN0aWNzZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMTZjMCAxLjM4NC4xOTQgMi43Mi41MjQgNEgyMmE0IDQgMCAwIDAgMC04SDIuNTI0QTE1Ljk4NCAxNS45ODQgMCAwIDAgMiAxNlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwiTTI4LjkyNCA3LjY2MkExNS4zODEgMTUuMzgxIDAgMCAwIDMwLjQ4IDZDMjcuNTQ3IDIuMzQ2IDIzLjA1IDAgMTggMCAxMS42NzkgMCA2LjIzOSAzLjY3OCAzLjY0NCA5SDI1LjUxYTUuMDM5IDUuMDM5IDAgMCAwIDMuNDEzLTEuMzM4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0yNS41MSAyM0gzLjY0NUM2LjI0IDI4LjMyMyAxMS42NzkgMzIgMTggMzJjNS4wNSAwIDkuNTQ3LTIuMzQ2IDEyLjQ4LTZhMTUuMzgxIDE1LjM4MSAwIDAgMC0xLjU1Ni0xLjY2MkE1LjAzNCA1LjAzNCAwIDAgMCAyNS41MSAyM1wiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29FbGFzdGljc2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE2IDBjLTIuOTE4IDAtNS42NDUuNzk0LTggMi4xNTggNC43NzcgMi43NjggOCA3LjkyMyA4IDEzLjg0MiAwIDUuOTE5LTMuMjIzIDExLjA3NC04IDEzLjg0MkExNS45MDcgMTUuOTA3IDAgMCAwIDE2IDMyYzguODM3IDAgMTYtNy4xNjMgMTYtMTZTMjQuODM3IDAgMTYgMHpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAyNGgyLjIyMkExMi45OTYgMTIuOTk2IDAgMCAwIDEzIDE2YzAtMi45MzUtMS4wMTItNS43NDQtMi43NzgtOEg4YTggOCAwIDAgMCAwIDE2elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNiA4aC0yLjE1MkExNS44NzcgMTUuODc3IDAgMCAxIDE2IDE2YzAgMi45MTgtLjc4NiA1LjY0Ny0yLjE1MiA4SDE2YTggOCAwIDAgMCAwLTE2elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRW50ZXJwcmlzZVNlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvRXRjZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRXRjZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwiIzQxOUVEQVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC42NSAxNC4xNjRjMCAxLjE4OS0uOTMzIDIuMTUtMi4wODMgMi4xNS0xLjE1MiAwLTIuMDgyLS45NjEtMi4wODItMi4xNSAwLTEuMTg1LjkzLTIuMTUgMi4wODItMi4xNSAxLjE1IDAgMi4wODMuOTY1IDIuMDgzIDIuMTV6bTIuNjkzIDBjMCAxLjE4OS45MzQgMi4xNSAyLjA4NCAyLjE1czIuMDgzLS45NjEgMi4wODMtMi4xNWMwLTEuMTg1LS45MzMtMi4xNS0yLjA4My0yLjE1LTEuMTUgMC0yLjA4NC45NjUtMi4wODQgMi4xNXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMxLjUyMiAxNi40OTVhNS44NDUgNS44NDUgMCAwIDEtMy4xMDUtLjYxOGMuMjcyLTEuNjAzLjM4Ny0zLjIxOC4zNTctNC44MjdhMjQuODk2IDI0Ljg5NiAwIDAgMC0zLjAyNy0zLjcwMyA2LjEzNyA2LjEzNyAwIDAgMSAyLjEzMy0yLjM2bC4zOTEtLjI1LS4zMDQtLjM1NGMtMS41Ny0xLjgyNS0zLjQ0NC0zLjIzNS01LjU2OC00LjE5M0wyMS45NzUgMGwtLjEwNy40NjJhNi4yNDggNi4yNDggMCAwIDEtMS41MSAyLjgyOSAyMy43NyAyMy43NyAwIDAgMC00LjM2Mi0xLjg1NSAyMy43OSAyMy43OSAwIDAgMC00LjM1NSAxLjg1MUE2LjI0NiA2LjI0NiAwIDAgMSAxMC4xMzcuNDY1bC0uMTA4LS40NjItLjQyMy4xODljLTIuMDk3Ljk0My00LjAyMiAyLjM5Mi01LjU2NiA0LjE5bC0uMzA2LjM1NS4zOS4yNWE2LjEyNSA2LjEyNSAwIDAgMSAyLjEyOSAyLjM0NyAyNS4wMDEgMjUuMDAxIDAgMCAwLTMuMDIyIDMuNjg5IDI2LjA2OCAyNi4wNjggMCAwIDAgLjM0NyA0Ljg2IDUuODMyIDUuODMyIDAgMCAxLTMuMDkuNjEyTC4wMyAxNi40NmwuMDQzLjQ3M2ExNi43MjMgMTYuNzIzIDAgMCAwIDIuMTQgNi43NjVsLjIzNC40MS4zNS0uMzA4YTUuOTE0IDUuOTE0IDAgMCAxIDIuODM3LTEuMzcyIDI1LjI1NSAyNS4yNTUgMCAwIDAgMi40MjkgNC4wODNjMS40NzUuNTMzIDMuMDEzLjkzIDQuNjAxIDEuMTY3YTYuMzU5IDYuMzU5IDAgMCAxLS4zODMgMy4yNDNsLS4xNzUuNDM5LjQ1LjEwMmMxLjE1LjI2MSAyLjMxLjM5NCAzLjQ0Ny4zOTRsMy40NDctLjM5NC40NS0uMTAyLS4xNzUtLjQ0YTYuMzc2IDYuMzc2IDAgMCAxLS4zODMtMy4yNDQgMjMuOTA1IDIzLjkwNSAwIDAgMCA0LjU4NS0xLjE2NSAyNS4yODYgMjUuMjg2IDAgMCAwIDIuNDMtNC4wODYgNS45NCA1Ljk0IDAgMCAxIDIuODUxIDEuMzczbC4zNS4zMDYuMjMzLS40MDhhMTYuNjYxIDE2LjY2MSAwIDAgMCAyLjE0LTYuNzY0bC4wNDItLjQ3Mi0uNDUuMDM2Wk0yMC45MyAyMi4yNzhjLTEuNjMuNDU4LTMuMjg3LjY4OS00LjkzMy42ODktMS42NSAwLTMuMzA0LS4yMzEtNC45MzYtLjY5YTIwLjAyOCAyMC4wMjggMCAwIDEtMi4xMTMtNC41OTQgMjAuMDcyIDIwLjA3MiAwIDAgMS0uODktNS4wNCAxOS4wNzYgMTkuMDc2IDAgMCAxIDMuNTc2LTMuNTE2IDE4Ljg2NyAxOC44NjcgMCAwIDEgNC4zNjMtMi40NDggMTguOTQ0IDE4Ljk0NCAwIDAgMSA0LjM1NSAyLjQ0MyAxOS4xOSAxOS4xOSAwIDAgMSAzLjU5MiAzLjUzOGMtLjA5IDEuNzMtLjM5IDMuNDEtLjg5OSA1LjAxOWExOS45NjUgMTkuOTY1IDAgMCAxLTIuMTE1IDQuNTk5WlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29FdGNkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29HY3AgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0djcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19nY3AnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIGQ6IFwiTS4wODUuMWg0LjU0OXY2LjI5MUguMDg1elwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjREI0NDM3XCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTIyLjU3IDI5Ljk4MmgtNS43NDljLjUyNyAwIC45ODctLjI4MiAxLjIzMy0uN0wyNS44NTcgMTYgMjAuOTMgNy42MWw1Ljc0OC4wMDFjLjQ5MiAwIC45Ny4yNTEgMS4yMzIuN2wzLjY5OCA2LjI5MWMuNDkuODM3LjUyNiAxLjkgMCAyLjc5N2wtNi41NzIgMTEuMTg1YTIuODUzIDIuODUzIDAgMCAxLTIuNDY0IDEuMzk4Wm0tLjcxLTIuNzk2YzAgLjM4Ni4zMTguNy43MS43YS43MDUuNzA1IDAgMCAwIC43MTItLjdjMC0uMzg2LS4zMTgtLjctLjcxMS0uN2EuNzA1LjcwNSAwIDAgMC0uNzEyLjdabTYuOTI3LTEwLjU4Yy4zNC4xOTMuNzc1LjA3OC45NzEtLjI1NmEuNjkyLjY5MiAwIDAgMC0uMjYtLjk1NS43MTguNzE4IDAgMCAwLS45NzIuMjU2LjY5Mi42OTIgMCAwIDAgLjI2Ljk1NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzQyODVGNFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIm0yNS4wMzYgMy40MTYgMi44NzMgNC44OTRhMS40MjcgMS40MjcgMCAwIDAtMS4yMzItLjY5OUgxMS4wNzFsLTQuOTI4IDguMzg4LTIuODc0LTQuODkyYTEuMzc3IDEuMzc3IDAgMCAxIDAtMS4zOTlsMy42OTYtNi4yOTJhMi44NTMgMi44NTMgMCAwIDEgMi40NjQtMS4zOThoMTMuMTQzYy45ODIgMCAxLjkzNy41MDIgMi40NjQgMS4zOThaTTEwLjE0IDQuODE0YzAtLjM4Ni0uMzE4LS43LS43MS0uN2EuNzA1LjcwNSAwIDAgMC0uNzEyLjdjMCAuMzg2LjMxOC43LjcxMS43YS43MDUuNzA1IDAgMCAwIC43MTEtLjdabTEyLjc4Ny42MDZhLjY5Mi42OTIgMCAwIDAgLjI2LS45NTUuNzE4LjcxOCAwIDAgMC0uOTcxLS4yNTYuNjkyLjY5MiAwIDAgMC0uMjYuOTU1LjcxOC43MTggMCAwIDAgLjk3MS4yNTZaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNEI0MDBcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJtLjM5NCAxNC42MDEgMi44NzUtNC44OTNjLS4yNjMuNDQ5LS4yNDUuOTggMCAxLjM5OUwxMS4wNyAyNC4zOWg5Ljg1N2wtMi44NzQgNC44OTJjLS4yNDYuNDE4LS43MDYuNy0xLjIzMy43SDkuNDI4YTIuODU0IDIuODU0IDAgMCAxLTIuNDY0LTEuMzk4TC4zOTQgMTcuMzk4YTIuNzU0IDIuNzU0IDAgMCAxIDAtMi43OTdabTIuODIuNzkzYS43MTguNzE4IDAgMCAwLS45NzIuMjU2LjY5My42OTMgMCAwIDAgLjI2Ljk1NWMuMzQuMTkzLjc3NS4wNzguOTcxLS4yNTZhLjY5Mi42OTIgMCAwIDAtLjI2LS45NTVaTTkuMDcyIDI2LjU4YS42OTIuNjkyIDAgMCAwLS4yNi45NTUuNzE4LjcxOCAwIDAgMCAuOTcxLjI1Ni42OTIuNjkyIDAgMCAwIC4yNi0uOTU1LjcxOC43MTggMCAwIDAtLjk3MS0uMjU2WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJtMTguMDU0IDI5LjI4MiAyLjg3NS00Ljg5MkgxNy45NmwtMS4xMzggNS41OTFjLjUyNiAwIC45ODYtLjI4IDEuMjMyLS42OTlNMjYuNjc4IDcuNjExaC01Ljc0OWwxLjQ4NCAyLjUyN0wyNy45MSA4LjMxYTEuNDI3IDEuNDI3IDAgMCAwLTEuMjMyLS43XCIsXG4gICAgb3BhY2l0eTogMC4xXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgb3BhY2l0eTogMC4xLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMi45OTQgOS42MDkpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0uMjc1IDEuNDk4IDMuMTUgNi4zOTFsMS40ODUtMi41MjdMLjI3NS4xYy0uMjYzLjQ0OC0uMjQ1Ljk4IDAgMS4zOThcIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0NDQ1wiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0xMS4wNzEgMjQuMzkgNi4xNDMgMTZsNC45MjgtOC4zOWg5Ljg1OEwyNS44NTcgMTZsLTQuOTI4IDguMzlIMTEuMDdaTTIwLjI2OCAxNmMwLTIuMzE3LTEuOTEtNC4xOTQtNC4yNjgtNC4xOTQtMi4zNTcgMC00LjI2OCAxLjg3Ny00LjI2OCA0LjE5NCAwIDIuMzE2IDEuOTEgNC4xOTQgNC4yNjggNC4xOTQgMi4zNTcgMCA0LjI2OC0xLjg3OCA0LjI2OC00LjE5NFpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR2NwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29HY3BNb25vID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29HY3BNb25vKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuMjU2IDE1Ljk4MmMwLTIuMzE2LTEuOTEtNC4xOTQtNC4yNjgtNC4xOTQtMi4zNTcgMC00LjI2OCAxLjg3OC00LjI2OCA0LjE5NCAwIDIuMzE3IDEuOTExIDQuMTk1IDQuMjY4IDQuMTk1IDIuMzU3IDAgNC4yNjgtMS44NzggNC4yNjgtNC4xOTVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5Ljg3IDE2LjU0M2EuODYyLjg2MiAwIDAgMS0xLjE2Ny4zMDguODMyLjgzMiAwIDAgMS0uMzEyLTEuMTQ3Ljg2Mi44NjIgMCAwIDEgMS4xNjctLjMwOC44MzIuODMyIDAgMCAxIC4zMTIgMS4xNDdNMjIuNTYgMjguMTVhLjg0Ny44NDcgMCAwIDEtLjg1NS0uODRjMC0uNDY0LjM4My0uODQuODU1LS44NHMuODU0LjM3Ni44NTQuODRjMCAuNDY0LS4zODIuODQtLjg1NC44NG0tMTIuNzE1LS4xMTNhLjg2My44NjMgMCAwIDEtMS4xNjctLjMwOC44MzIuODMyIDAgMCAxIC4zMTItMS4xNDcuODYyLjg2MiAwIDAgMSAxLjE2Ny4zMDguODMyLjgzMiAwIDAgMS0uMzEyIDEuMTQ3TTMuNTg2IDE2LjU0MmEuODYzLjg2MyAwIDAgMS0xLjE2Ny4zMDguODMyLjgzMiAwIDAgMS0uMzEzLTEuMTQ3Ljg2Mi44NjIgMCAwIDEgMS4xNjctLjMwOC44MzIuODMyIDAgMCAxIC4zMTMgMS4xNDdNMjIuOTg3IDUuNjY1YS44NjIuODYyIDAgMCAxLTEuMTY3LS4zMDguODMyLjgzMiAwIDAgMSAuMzEyLTEuMTQ3Ljg2My44NjMgMCAwIDEgMS4xNjguMzA4LjgzMi44MzIgMCAwIDEtLjMxMyAxLjE0N20tMTMuNTcuMTEyYS44NDcuODQ3IDAgMCAxLS44NTQtLjg0YzAtLjQ2NC4zODItLjg0Ljg1NC0uODRzLjg1NS4zNzYuODU1Ljg0YzAgLjQ2NC0uMzgzLjg0LS44NTUuODRtMjIuMTc4IDguNzk3LTMuNjk3LTYuMjkyYy0uMDE0LS4wMjMtLjAzLS4wNDMtLjA0NS0uMDY1bC0yLjgzLTQuODE4QTIuODU0IDIuODU0IDAgMCAwIDIyLjU2IDJIOS40MTdhMi44NTMgMi44NTMgMCAwIDAtMi40NjQgMS4zOThMMy4yNTcgOS42OWwzLjI4NCA1LjU5IDQuNTE5LTcuNjloMTUuNjA1Yy40OTEgMCAuOTY5LjI1MSAxLjIzMi42OTloLTYuNTY1bDQuNTEzIDcuNjgyLTQuOTM1IDguNC0yLjg3IDQuODgzYTEuNDI2IDEuNDI2IDAgMCAxLTEuMjMuNjk5bDMuMjc5LTUuNTgyaC05LjAzbC00LjU0NC03LjczOC0uMzg0LS42NTMtMi44NzQtNC44OTNhMS4zNzcgMS4zNzcgMCAwIDEtLjAwMy0xLjM5MUwuMzgyIDE0LjU4NGEyLjc1NCAyLjc1NCAwIDAgMCAwIDIuNzk2bDYuNTcgMTEuMTg2YTIuODU0IDIuODU0IDAgMCAwIDIuNDY1IDEuMzk4aDcuMzkyYy4wNTQgMCAuMTA3LS4wMDUuMTYtLjAxMWg1LjU5YTIuODUzIDIuODUzIDAgMCAwIDIuNDY0LTEuMzk3bDYuNTcyLTExLjE4NmMuNTI2LS44OTYuNDktMS45NiAwLTIuNzk2XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR2NwTW9ubzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvR2l0aHViID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29HaXRodWIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAwQzcuMTY0IDAgMCA3LjM0MyAwIDE2LjRjMCA3LjI0OCA0LjU4NCAxMy4zOTQgMTAuOTQyIDE1LjU2Mi44LjE1IDEuMDkyLS4zNTYgMS4wOTItLjc4OSAwLS4zOS0uMDE0LTEuNjg0LS4wMjItMy4wNTMtNC40NS45OTEtNS4zOS0xLjkzNC01LjM5LTEuOTM0LS43MjgtMS44OTQtMS43NzYtMi4zOTgtMS43NzYtMi4zOTgtMS40NTQtMS4wMTcuMTEtLjk5Ny4xMS0uOTk3IDEuNjA2LjExNCAyLjQ1MiAxLjY5IDIuNDUyIDEuNjkgMS40MjggMi41MDYgMy43NDYgMS43ODEgNC42NTYgMS4zNi4xNDYtMS4wNTYuNTYtMS43OCAxLjAxNi0yLjE5LTMuNTUyLS40MTQtNy4yODgtMS44MjEtNy4yODgtOC4xMDUgMC0xLjc5Mi42MjQtMy4yNTQgMS42NDYtNC40MDItLjE2NC0uNDE2LS43MTQtMi4wODUuMTU4LTQuMzQyIDAgMCAxLjM0MS0uNDQgNC40IDEuNjgxQTE0Ljg4MiAxNC44ODIgMCAwIDEgMTYgNy45MzJjMS4zNi4wMDYgMi43MjguMTg4IDQuMDA2LjU1MyAzLjA1My0yLjEyNCA0LjM5Ni0xLjY4MSA0LjM5Ni0xLjY4MS44NzUgMi4yNTkuMzI1IDMuOTI2LjE2IDQuMzQgMS4wMjYgMS4xNDggMS42NDUgMi42MSAxLjY0NSA0LjQwMiAwIDYuMy0zLjc0MiA3LjY4Ny03LjMwNyA4LjA5NC41NzcuNTA4IDEuMDg2IDEuNTA1IDEuMDg2IDMuMDM1IDAgMi4xOTItLjAyMSAzLjk2LS4wMjEgNC41IDAgLjQzNy4yOS45NDcgMS4xMDEuNzg3QzI3LjQyIDI5Ljc5IDMyIDIzLjY0NCAzMiAxNi40IDMyIDcuMzQzIDI0LjgzNiAwIDE2IDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR2l0aHViOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29HbWFpbCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR21haWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTY1QTREXCIsXG4gICAgZDogXCJNMjkuMTYyIDQuMTQ5Yy4yOS0uMTc1LjU4OC0uMDc4Ljg3MyAwYTIuNjE2IDIuNjE2IDAgMCAxIDEuOTA3IDIuNDc2Yy4wMDYuMjktLjAwNy41ODEtLjAwNy44NjYtLjA4NCAwLS4xMzUuMDUyLS4yLjA5Ny0uODE1LjU4Mi0xLjY0MiAxLjE2NC0yLjQ1IDEuNzUyLS4zMy4yMzktLjY5Mi40MjYtLjk3LjczLS4xMTYgMC0uMi4wNzgtLjI4NC4xMzYtMi42OSAxLjg1NS01LjM3OSAzLjcwNC04LjA2MiA1LjU2LTEuMzMxLjkxOC0yLjY2MyAxLjg0OS0zLjk5NSAyLjc3M2gtLjExYy0uMDU4LS4wNDUtLjExLS4xMDMtLjE2OC0uMTQyTDUuODYzIDExLjU1Yy0uNjcyLS40NjYtMS4zNDQtLjkzOC0yLjAxNy0xLjQwMy0uMDc3LS4wNTItLjE0OC0uMTYyLS4yNDUtLjEwNC0uMDkuMDUyLS4wMzMuMTc1LS4wNDUuMjcyLS4wMDcuMDMyIDAgLjA2NSAwIC4wOTd2MTYuMTk0YzAgLjExNi4wMDYuMjQuMDEyLjM1NSAwIC4wNjUtLjAwNi4xMjMtLjAwNi4xODgtMS4yMjguMTQ5LTIuMzQ3LS4wMi0zLjExNi0xLjEzMWEyLjM4MSAyLjM4MSAwIDAgMS0uNDQtMS4zNjRjMC02LjAzMi0uMDA2LTEyLjA1Ny4wMDctMTguMDg5IDAtMS4yMjguOTk1LTIuMzE0IDIuMjE3LTIuNDg4LjE5NC0uMDI2LjM4OC0uMDUyLjU1Ni4wNzcuMDQuMDM5LjA3MS4wNzguMTE3LjExIDQuMjczIDMuMTY4IDguNTQ2IDYuMzM1IDEyLjgxOSA5LjUxLjE2OC4xMjIuMjc4LjExNi40NDYtLjAwNyAzLjQxMy0yLjUyMSA2LjgzMy01LjAzNiAxMC4yNDctNy41NS45MDUtLjY5MiAxLjgyMy0xLjM4NCAyLjc0Ny0yLjA3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjZGNEVDXCIsXG4gICAgZDogXCJNMjkuMTYyIDQuMTQ5Yy0uOTI0LjY4NS0xLjg0MiAxLjM3Ny0yLjc2NyAyLjA2Mi0zLjQxMyAyLjUyMS02LjgzMyA1LjAzLTEwLjI0NiA3LjU1LS4xNjguMTIzLS4yNzIuMTMtLjQ0Ni4wMDctNC4yNjctMy4xNzQtOC41NC02LjMzNS0xMi44MTMtOS41MS0uMDQ2LS4wMzItLjA3OC0uMDctLjExNy0uMTEuMDc4LS4xMjkuMjE0LS4wODMuMzI0LS4wODNoMjUuNzQyYy4xMSAwIC4yMzktLjA0Ni4zMjMuMDg0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTZFM0Q2XCIsXG4gICAgZDogXCJNMy41NTYgMjYuOTVhNi41MzMgNi41MzMgMCAwIDEtLjAxMy0uMzU2VjEwLjRjMC0uMDMyLS4wMDctLjA2NSAwLS4wOTcuMDEzLS4wOS0uMDQ2LS4yMTMuMDQ1LS4yNzEuMDk3LS4wNTkuMTc0LjA1MS4yNDYuMTAzLjY3Mi40NjUgMS4zNDQuOTM3IDIuMDE3IDEuNDAzbDkuODMyIDYuODQ2Yy4wNTguMDQ1LjExNy4wOTcuMTY4LjE0Mi0uMDI2LjAyNi0uMDU4LjA0NS0uMDg0LjA3MWwtLjA2NC4wNjVjLS4wNTIgMC0uMTA0LjAxMy0uMTMuMDY0bC0uMDY0LjA2NWMtLjAwNy4wMTMtLjAyLjAyLS4wMjYuMDMyLjAxMy0uMDA2LjAyLS4wMTkuMDMyLS4wMjVsLjA2NS0uMDY1Yy4wNTIgMCAuMTAzLS4wMTMuMTMtLjA2NS4wMTgtLjAyLjA0NC0uMDQ1LjA2NC0uMDY0LjA2NCAwIC4xMjktLjAwNy4xOTQtLjAwNy44OTguNjI3IDEuODAzIDEuMjQ4IDIuNzAyIDEuODc1IDIuNjc2IDEuODU1IDUuMzUzIDMuNzA0IDguMDIzIDUuNTcyLjQ3OC4zMzcgMS4wMDIuNjI4IDEuNDI4IDEuMDM1LS4xMTYuMTEtLjI1OC4wMzktLjM4OC4wNTguMDA3LS4xNDktLjEyMi0uMTg4LS4yMi0uMjUyLS40OS0uMzQzLS45OTUtLjY3Mi0xLjQ3My0xLjAyOC0uODAyLS41ODgtMS42MTctMS4xNS0yLjQzMS0xLjcyLS42NzktLjQ3Mi0xLjM1MS0uOTYzLTIuMDUtMS40MDktLjYwNy0uMzg4LTEuMTctLjg1My0xLjc3Ny0xLjI0OC0uNjg1LS40NC0xLjMzMi0uOTMtMi4wMS0xLjM3Ny0uNTYzLS4zNjgtMS4xMTMtLjc2Mi0xLjY2Mi0xLjE1LS4xMS0uMDc4LS4yMDctLjExLS4zMjMtLjAzMy0uMjMzLjE2OC0uNTMuMjc4LS43MjQuNDYtLjU1Ni41MS0xLjIzNS44NC0xLjgxNyAxLjMwNS0uNzQzLjU4OS0xLjU0NSAxLjExMi0yLjM0IDEuNjM2LTEuMzE5Ljg3My0yLjU5OSAxLjgxNi0zLjkxMSAyLjY5NmE0My42OTcgNDMuNjk3IDAgMCAwLTIuMzA4IDEuNjI5Yy0uMjA3LjE1NS0uNDg1LjIyNi0uNjE0LjQ4NS0uMTMtLjAxMy0uMjcyLjAzOC0uMzk1LS4wNDYgMi4zMTUtMS42MTYgNC42My0zLjIyNiA2LjkzNy00Ljg0Mi4zMDQtLjIxMy42NDYtLjM4MS44OTktLjY2Ni4wNDUtLjAxMy4xMDMtLjAxOS4wOTctLjA4NCAwLS4wMDYtLjAxMy0uMDItLjAyLS4wMi0uMDY1LS4wMDYtLjA3Ny4wNDYtLjA5LjA5MS0uMjMzLjAxMy0uMzc1LjE5NC0uNTUuMzEtMi40NjMgMS43LTQuOTMyIDMuMzg4LTcuMzk1IDUuMDc1Wm0xMS4xMTktNy41NjQuMDY0LS4wNjVjLjA1MiAwIC4xMDQtLjAxMy4xMy0uMDY0bC4wNjQtLjA2NWMuMDUyIDAgLjEwNC0uMDEzLjEzLS4wNjUuMDA2LS4wMTMuMDE5LS4wMi4wMjUtLjAzMi0uMDEyLjAwNi0uMDE5LjAyLS4wMzIuMDI2LS4wNTIgMC0uMTAzLjAxMy0uMTMuMDY0bC0uMDY0LjA2NWMtLjA1MSAwLS4xMDMuMDEzLS4xMy4wNjUtLjAxOC4wMjYtLjAzOC4wNDUtLjA1Ny4wNy0uMDEzLjAwNy0uMDI2LjAxNC0uMDMzLjAyNy4wMTMtLjAwNy4wMjYtLjAxMy4wMzMtLjAyNlptLS44NC41NzVjLS4wNTIgMC0uMTA0LjAxMy0uMTMuMDY1LS4wMzkuMDA2LS4wOS4wMDYtLjA5Ny4wNjUgMCAuMDEyLjAyNi4wMzguMDM5LjAzOC4wNTItLjAwNi4wNTgtLjA1MS4wNjUtLjA5LjA1MS0uMDA3LjA5Ni0uMDEzLjEyMi0uMDc4YS4zMTEuMzExIDAgMCAwIC4wNzEtLjA1OGMuMDUyIDAgLjEwNC0uMDEzLjEzLS4wNjVsLjA2NC0uMDY0Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMi0uMDIuMDI2LS4wMzItLjAxMy4wMDYtLjAyLjAyLS4wMzMuMDI2LS4wNTEgMC0uMTAzLjAxMy0uMTMuMDY0LS4wMTguMDItLjA0NC4wNDYtLjA2NC4wNjUtLjA1MSAwLS4xMDMuMDEzLS4xMjkuMDY1bC0uMDY1LjA2NFptLS44NDEuNTg4Yy0uMDUyIDAtLjEwMy4wMTMtLjEzLjA2NS0uMDUxLjAwNy0uMTAzLjAxMy0uMDk2LjA4NCAwIC4wMDcuMDEzLjAyLjAyLjAyLjA3LjAwNi4wNzctLjA0Ni4wODMtLjA5Ny4wNTItLjAwNy4wOTctLjAyLjEyMy0uMDcyLjAyNi0uMDEyLjA0NS0uMDM4LjA3MS0uMDU4LjA1MiAwIC4xMDMtLjAxMy4xMy0uMDY0bC4wNjQtLjA2NWMuMDUyIDAgLjEwMy0uMDEzLjEzLS4wNjUuMDA2LS4wMTMuMDE5LS4wMTkuMDI1LS4wMzItLjAxMy4wMDctLjAyLjAyLS4wMzIuMDI2LS4wNTIgMC0uMTA0LjAxMy0uMTMuMDY1bC0uMDY0LjA2NGMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjVhLjMwNi4zMDYgMCAwIDAtLjA2NC4wNjRabS0uNjQ3LjQ2Yy4wNTItLjAwNy4xMDQtLjAxMy4wOTctLjA4NSAwLS4wMDYtLjAxMi0uMDE5LS4wMTktLjAxOS0uMDcxLS4wMDYtLjA3OC4wNDUtLjA4NC4wOTctLjA1MiAwLS4wOTcuMDEzLS4xMy4wNjVhLjIyMy4yMjMgMCAwIDAtLjE5My4xMjljLS4wNDUuMDEzLS4xMDQuMDEzLS4wOTcuMDg0IDAgLjAwNi4wMTMuMDIuMDIuMDIuMDY0LjAwNi4wNzctLjA0Ni4wODMtLjA5OC4wOSAwIC4xODEtLjAwNi4xOTQtLjEyOS4wNTgtLjAwNi4xMDQtLjAyLjEzLS4wNjVabTIuMTI4LTEuNTMzYy0uMDA4LjAyNy0uMDI1LjA1NC0uMDMzLjA3Mi4wMjUuMDA5LjA1LjAzNS4wNjcuMDI3LjAxNi0uMDEuMDI1LS4wNDUuMDMzLS4wNzJhLjU1LjU1IDAgMCAxLS4wNjctLjAyN1ptLTEuODEgMS4zNWMtLjAwOC0uMDI0LS4wMTUtLjA1Ni0uMDMtLjA1Ni0uMDE1LS4wMDgtLjA1Mi4wMDgtLjA2LjAyNC0uMDIyLjAzMy0uMDA3LjA3NC4wMy4wNzQuMDIyIDAgLjAzNy0uMDI1LjA2LS4wNDFaTTE1LjM1NSAxOWEuMTg1LjE4NSAwIDAgMSAuMDM0LS4wNzJjLS4wMjUtLjAwOS0uMDUtLjAzNS0uMDY3LS4wMjYtLjAxNi4wMDgtLjAyNS4wNDQtLjAzMy4wNy4wMTcuMDEuMDQyLjAxOS4wNjcuMDI4Wm0tMy41MjYgMi40MDJjLS4wMTYtLjAyNC0uMDMxLS4wNS0uMDQtLjA1Ny0uMDE1IDAtLjA1NS4wMTYtLjA1NS4wMzMtLjAxNi4wNC4wMDguMDc0LjA0OC4wNjUuMDE2IDAgLjAzMS0uMDI0LjA0Ny0uMDRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCNkI1QUNcIixcbiAgICBkOiBcIk0yOC4xMjEgMjcuMDg1Yy0uNDI2LS40MTMtLjk0NC0uNjk4LTEuNDI4LTEuMDM0LTIuNjctMS44NjItNS4zNDctMy43MTctOC4wMjMtNS41NzMtLjg5OS0uNjI3LTEuODA0LTEuMjQ3LTIuNzAyLTEuODc0IDAtLjAyLS4wMDctLjA0Ni0uMDA3LS4wNjVsMy45OTUtMi43NzNjMi42OS0xLjg1NiA1LjM3OS0zLjcwNSA4LjA2Mi01LjU2LjA4NC0uMDU4LjE2OC0uMTM2LjI4NC0uMTM2djE3LjA3M2MtLjA1MS0uMDE5LS4xMTYtLjAzOC0uMTgtLjA1OFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0U2RTNENlwiLFxuICAgIGQ6IFwiTTQuMDczIDI3LjE0M2MuMTIzLS4yNTguNDA3LS4zMy42MTQtLjQ4NGE0Ny44NDUgNDcuODQ1IDAgMCAxIDIuMzA4LTEuNjNjMS4zMTItLjg4NSAyLjU5Mi0xLjgyMyAzLjkxLTIuNjk1Ljc5Ni0uNTI0IDEuNTk4LTEuMDQ4IDIuMzQxLTEuNjM2LjU4OC0uNDY1IDEuMjYtLjc5NSAxLjgxNy0xLjMwNi4yLS4xOC40OS0uMjkuNzI0LS40NTkuMTEtLjA4NC4yMDctLjA1MS4zMjMuMDMzLjU1LjM4OCAxLjA5OS43ODIgMS42NjEgMS4xNS42OC40NDYgMS4zMjYuOTQ0IDIuMDEgMS4zNzcuNjA4LjM4OCAxLjE3Ljg1NCAxLjc3OSAxLjI0OC42OTguNDQ2IDEuMzcuOTM3IDIuMDQ5IDEuNDEuODE0LjU2OCAxLjYzNSAxLjEzIDIuNDMgMS43MTkuNDg1LjM1NS45ODMuNjg1IDEuNDc1IDEuMDI4LjA5LjA2NC4yMjYuMTAzLjIyLjI1Mi03Ljg4OC0uMDA3LTE1Ljc3NC0uMDA3LTIzLjY2MS0uMDA3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQjEzOTJGXCIsXG4gICAgZDogXCJNMjguMzE1IDI3LjE0M1YxMC4wN2MuMjc4LS4zMDQuNjQtLjQ5MS45Ny0uNzMuODE0LS41OTUgMS42MzUtMS4xNyAyLjQ1LTEuNzUyLjA1OC0uMDQ1LjExNi0uMDk3LjItLjA5Ny4wMDcuMTEuMDEzLjIxMy4wMTMuMzIzIDAgNS41MDIgMCAxMS4wMS4wMDcgMTYuNTEgMCAuMzc2LS4wMTMuNzUtLjEwNCAxLjEyNi0uMTYxLjY5MS0uNTc1IDEuMTctMS4yNDcgMS40MDktLjc0NC4yNTktMS41MTMuMzMtMi4yODkuMjg0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQkVCREIzXCIsXG4gICAgZDogXCJNMTEuNTE0IDIxLjU5Yy0uMjUzLjI4NS0uNTk1LjQ1My0uOS42NjZhMjY1MC4wNzggMjY1MC4wNzggMCAwIDEtNi45MzYgNC44NDJsLS4xMjkuMDM5YzAtLjA2NS4wMDctLjEyMy4wMDctLjE4OCAyLjQ3LTEuNjg3IDQuOTMyLTMuMzc0IDcuNDAyLTUuMDYxLjE3NC0uMTE3LjMxLS4zMDQuNTUtLjMxbC4wMDYuMDEyWlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HbWFpbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvR29sYW5nID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Hb2xhbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNkQyQTJcIixcbiAgICBkOiBcIk00LjMxNSAxNy4zMDFjLjA0NS45NDYgMSAuNSAxLjQxNi4yMS40MTUtLjI5LjUtLjA0NS41Ni0uNmE5LjA3IDkuMDcgMCAwIDAgLjA0NS0xLjA5IDIuNjc2IDIuNjc2IDAgMCAwLTEuNzg2LjQ1NWMtLjI2LjE5LS43NDUuNzktLjI0IDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTQuODA1IDE3Ljk4N2EuNi42IDAgMCAxLS4yNy0uMDYuNjIuNjIgMCAwIDEtLjMxLS41NUEuNDEuNDEgMCAwIDEgNCAxNy4wNWExLjE1IDEuMTUgMCAwIDEgLjUtLjgzIDIuNzUyIDIuNzUyIDAgMCAxIDEuODQ2LS40N2guMDc1di4wNzRjLjAxLjI4Ni4wMDMuNTcyLS4wMjUuODU2di4yNWMtLjAyNS4zOS0uMS40NS0uMy41YTEuMTE4IDEuMTE4IDAgMCAwLS4zLjE0NWMtLjI4OC4yMjMtLjYzLjM2NC0uOTkuNDFabTEuMjcxLTIuMDY3YTIuNTAyIDIuNTAyIDAgMCAwLTEuNDcuNDUgMSAxIDAgMCAwLS40Mi42NzEuMjUuMjUgMCAwIDAgLjE3LjIwNWguMDV2LjA1NWEuNS41IDAgMCAwIC4yMS40NSAxLjMxIDEuMzEgMCAwIDAgMS4wNjUtLjMxIDEuMjkgMS4yOSAwIDAgMSAuMzQtLjE3Yy4xMy0uMDQ1LjE2LS4wNTUuMTgtLjM2NXYtLjI1Yy4wMjQtLjI1LjAzNC0uNS4wMy0uNzVoLS4xNTV2LjAxNFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0M3QjE5OVwiLFxuICAgIGQ6IFwiTTQuMzE1IDE3LjNhLjc0NS43NDUgMCAwIDAgLjM3Ni0uMjFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk00LjMxNSAxNy4zOTFhLjA5Mi4wOTIgMCAxIDEtLjA1NS0uMTc1aC4wNmEuNTQuNTQgMCAwIDAgLjI3NS0uMTYuMDkyLjA5MiAwIDAgMSAuMDYtLjAzNS4wOS4wOSAwIDAgMSAuMDY4LjAxNy4wOS4wOSAwIDAgMSAuMDM1LjA2LjA5MS4wOTEgMCAwIDEtLjAxOC4wNjguNy43IDAgMCAxLS4zNi4yMmgtLjA2NXYuMDA1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNzRDREREXCIsXG4gICAgZDogXCJNNi40OTYgNi4wNUMyLjg4IDUuMDQ5IDUuNTcxLjQzIDguNDk4IDIuMzIyTDYuNDk2IDYuMDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk02LjU0MSA2LjE1NGgtLjA3Yy0xLjAzLS4yOS0xLjY2Ni0uOS0xLjc4Ni0xLjcxNmEyLjM5NiAyLjM5NiAwIDAgMSAxLjExNi0yLjI2IDIuNDIxIDIuNDIxIDAgMCAxIDIuNzIyLjA5bC4wNy4wNDRMNi41NCA2LjE1NFptLjUtNC4xOTJjLS40MSAwLS44MTEuMTItMS4xNTUuMzQ1QTIuMjExIDIuMjExIDAgMCAwIDQuODUgNC4zOTNjLjExLjcyNi42NyAxLjI3NiAxLjU4NiAxLjU1MWwxLjkwMS0zLjU4N2EyLjUwMSAyLjUwMSAwIDAgMC0xLjI4LS4zOGwtLjAxNS0uMDE1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNzRDREREXCIsXG4gICAgZDogXCJNMjIuNTY2IDEuOTc3YzIuODYyLTIuMDAxIDUuNDQ4IDIuNTAyIDIuMTIxIDMuNjY3bC0yLjEyMS0zLjY2N1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwibTI0LjY0NyA1Ljc1NC0yLjIwMS0zLjgwMi4wNjUtLjA0NWEyLjM2MiAyLjM2MiAwIDAgMSAyLjYyNi0uMjIgMi40MjcgMi40MjcgMCAwIDEgMS4xOTYgMi4yNDFjLS4wNS41LS4zMiAxLjM1Ni0xLjYxNiAxLjgwMWwtLjA3LjAyNVptLTEuOTYxLTMuNzUyIDIuMDQxIDMuNTMyYTEuOTU2IDEuOTU2IDAgMCAwIDEuNDI2LTEuNjIgMi4yNCAyLjI0IDAgMCAwLTEuMTA2LTIuMDc3IDIuMTI2IDIuMTI2IDAgMCAwLTIuMzYxLjE2NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y2RDJBMlwiLFxuICAgIGQ6IFwiTTIzLjE4MSAyOC45MjhjLjcyNi40NSAyLjA1NiAxLjgxMS45NjYgMi40NzEtMS4wNDYuOTYxLTEuNjM2LTEuMDU1LTIuNTU3LTEuMzNhMi41NDkgMi41NDkgMCAwIDEgMS41OTEtMS4xNDFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk0yMy41OTIgMzEuNzQ1aC0uMDRjLS40MTYtLjAyNS0uNzU2LS40My0xLjA4Ni0uODE2YTIuMzMgMi4zMyAwIDAgMC0uOS0uNzc1bC0uMTItLjAzNS4wNzQtLjEyNWEyLjY1NiAyLjY1NiAwIDAgMSAxLjY0Ni0xLjE3NmguMDY1Yy40NjYuMjkgMS40MjYgMS4xMyAxLjQyMSAxLjg5MWEuODM1LjgzNSAwIDAgMS0uNDUuNzI1LjkwNS45MDUgMCAwIDEtLjYxLjMxWm0tMS44NjEtMS43MjFjLjMzOS4yLjYzMy40NjcuODY1Ljc4NS4yMTkuMzYuNTYuNjI4Ljk2Ljc1NWEuNzE2LjcxNiAwIDAgMCAuNS0uMjM1LjY2MS42NjEgMCAwIDAgLjM3MS0uNThjMC0uNjEtLjc3LTEuMzc2LTEuMzA2LTEuNzIxYTIuMzUxIDIuMzUxIDAgMCAwLTEuMzg2Ljk5NmgtLjAwNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTI0LjE0NyAzMS40OTRhLjA5LjA5IDAgMCAxLS4wOC0uMDVjLS4wNTMtLjExLS4xLS4yMjQtLjE0LS4zNGExLjUgMS41IDAgMCAwLS4zMy0uNjEuMDkxLjA5MSAwIDAgMS0uMDIyLS4wOTguMDkuMDkgMCAwIDEgLjE0Ny0uMDMyYy4xNzIuMTg4LjMuNDE0LjM3LjY2LjAzOS4xMS4wODQuMjE2LjEzNS4zMmEuMDkuMDkgMCAwIDEtLjA0LjEybC0uMDQuMDNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNkQyQTJcIixcbiAgICBkOiBcIk0xMC4xODkgMzAuNDY0Yy0uODU2LjEzLTEuMzM2LjktMi4wNDYgMS4yOWEuNjIuNjIgMCAwIDEtMS4wMDEtLjIzNS4zMjUuMzI1IDAgMCAxLS4yNi0uMTJjLS42Mi0xIC42NDUtMS42OTYgMS4zMS0yLjE4Ni45MzYtLjE4IDEuNTExLjYxNSAxLjk5NyAxLjI1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNNy42OTIgMzEuOTk1YS42MTMuNjEzIDAgMCAxLS4xNiAwIC43NC43NCAwIDAgMS0uNDM1LS4zNzUuMzAxLjMwMSAwIDAgMS0uMjQ1LS4xM2MtLjYtLjk0Ni40Mi0xLjY2MiAxLjA5Ni0yLjEzN2wuMjM1LS4xN2MuOTQ1LS4xOSAxLjU0Ni41OSAyLjAyNiAxLjIybC4xMzUuMTgxaC0uMTVhMi41ODYgMi41ODYgMCAwIDAtMS4yNjYuNzI1Yy0uMjMuMjEyLS40ODIuNC0uNzUuNTZhMS4wMDEgMS4wMDEgMCAwIDEtLjQ4Ni4xMjZabS0uNi0uNThhLjI0NS4yNDUgMCAwIDEgLjEwNSAwaC4wMjVsLjA0LjA4YS41OC41OCAwIDAgMCAuMzM1LjMwNS42ODYuNjg2IDAgMCAwIC41LS4xMmMuMjYtLjE1NS41MDMtLjMzNy43MjYtLjU0YTMgMyAwIDAgMSAxLjIwNi0uNzM2Yy0uNDYtLjYtMS0xLjI1LTEuNzg2LTEuMWwtLjIyNS4xNmMtLjY5LjUtMS41NDYgMS4wOS0xLjA1MSAxLjg4NWEuMTQ2LjE0NiAwIDAgMCAuMTA1LjA3bC4wMi0uMDA1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNNy4xNTcgMzEuNjE0YS4wOS4wOSAwIDAgMS0uMDktLjEyYy4wMzctLjI0LjEzNy0uNDY2LjI5LS42NTUuMDcyLS4xLjEzNi0uMjA1LjE5LS4zMTVhLjA5LjA5IDAgMSAxIC4xNjUuMDc1Yy0uMDU4LjEyLS4xMjcuMjM2LS4yMDUuMzQ1LS4xMzIuMTctLjIxNy4zNzItLjI0NS41ODVhLjA5LjA5IDAgMCAxLS4wNjcuMDg0LjA5LjA5IDAgMCAxLS4wMzguMDAyWk02LjY0NyA0Ljc4Yy0uNS0uMjUtLjgyNi0uNTk2LS41MzYtMS4xNDYuMjktLjU1Ljc3LS40NTUgMS4yNTEtLjIwNWwtLjcxNSAxLjM1Wm0xNy4yODUtLjQ4Yy41LS4yNS44MjUtLjU5Ni41MzUtMS4xNDYtLjI5LS41NS0uNzctLjQ1Ni0xLjI1LS4yMDVsLjcxNSAxLjM1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjZEMkEyXCIsXG4gICAgZDogXCJNMjcuMjE5IDE3LjE4MWMtLjA0NS45NDYtMS4wMDEuNS0xLjQxNi4yMS0uNDE2LS4yOS0uNS0uMDQ1LS41Ni0uNmE5LjA2OCA5LjA2OCAwIDAgMS0uMDQ2LTEuMDkgMi42NzcgMi42NzcgMCAwIDEgMS43ODcuNDU0Yy4yNi4xOS43NDUuNzkuMjQgMS4wMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTI2LjcyOCAxNy44NDZhMi4wNDYgMi4wNDYgMCAwIDEtLjk1NS0uMzYgMS4xMTcgMS4xMTcgMCAwIDAtLjMtLjE0NWMtLjItLjA3LS4yNzUtLjEzLS4zLS41di0uMjVhNi41MTYgNi41MTYgMCAwIDEtLjAyNi0uODU2di0uMTJoLjA3NmEyLjc1MSAyLjc1MSAwIDAgMSAxLjg0Ni40NyAxLjE1IDEuMTUgMCAwIDEgLjUuODMuNDEyLjQxMiAwIDAgMS0uMjI1LjMyNi42Mi42MiAwIDAgMS0uMzEuNTUuNjA1LjYwNSAwIDAgMS0uMzA2LjA1NVptLTEuNDU2LTIuMDZjLS4wMDMuMjUuMDA3LjUuMDMuNzV2LjI1YzAgLjMwNS4wNDYuMzE1LjE4LjM2NS4xMjIuMDQuMjM2LjA5Ny4zNC4xN2ExLjMwNyAxLjMwNyAwIDAgMCAxLjA2Ny4zMS41MDIuNTAyIDAgMCAwIC4yMS0uNDV2LS4wNmguMDVhLjI1LjI1IDAgMCAwIC4xNy0uMjA1IDEuMDAyIDEuMDAyIDAgMCAwLS40Mi0uNjcgMi41NTIgMi41NTIgMCAwIDAtMS42MjctLjQ2WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQzdCMTk5XCIsXG4gICAgZDogXCJNMjcuMjE4IDE3LjE4MWEuNzQ2Ljc0NiAwIDAgMS0uMzc1LS4xOTVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk0yNy4yMTkgMTcuMjcxaC0uMDk1YS43LjcgMCAwIDEtLjM1LS4yNS4wOS4wOSAwIDAgMS0uMDA3LS4xMDEuMDkxLjA5MSAwIDAgMSAuMTUyLS4wMS41NC41NCAwIDAgMCAuMjc1LjE2aC4wNmEuMTAxLjEwMSAwIDEgMS0uMDM1LjIwMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzc0Q0RERFwiLFxuICAgIGQ6IFwiTTE1LjQwNy4wNjZjMy42MjIgMCA3LjAwNC41IDguNzg1IDQuMDAyIDEuNTg2IDMuODk4IDEgOC4xMDUgMS4yNjYgMTIuMjIzLjIxIDMuNTM3LjY3IDcuNjI0LS45NyAxMC45MDYtMS43MTcgMy40NDItNi4wNSA0LjI5Ny05LjYwMSA0LjE4Mi0yLjc5Mi0uMS02LjE2NC0xLTcuNzQtMy41NjItMS44NTEtMy4wMDItLjk3Ni03LjQ0NC0uODQtMTAuNzcxLjE2LTMuOTQyLTEuMDcxLTcuOS4yMjUtMTEuNzYyQzcuODc3IDEuMjgyIDExLjUuMzc2IDE1LjQwMi4wNjZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTE1LjUwMiAzMS40OTRoLS42MmExMy4yMDIgMTMuMjAyIDAgMCAxLTQuMzU4LS44NyA2Ljk2OSA2Ljk2OSAwIDAgMS0zLjQ1Ny0yLjczN2MtMS41MDEtMi40MjEtMS4yMy01Ljc2My0xLTguNzE1LjA2LS43NC4xMTQtMS40NDYuMTQtMi4xMDYuMDI2LTEuNC0uMDM0LTIuOC0uMTgtNC4xOTItLjIxMS0yLjUwMi0uNDMxLTUuMDg5LjQxLTcuNTk1YTYuNjQ0IDYuNjQ0IDAgMCAxIDMuNTAxLTQuMDQ3QzExLjI5LjU3MiAxMi45NC4xOSAxNS4zNjcgMGMzLjU3Mi0uMDI1IDcuMDk0LjQ3NSA4LjkwNSA0LjAyMiAxLjE2IDIuODUyIDEuMTc2IDUuOTE0IDEuMTk2IDguODc2IDAgMS4xMSAwIDIuMjU2LjA4IDMuMzc3IDAgLjM0LjA0LjY4NS4wNjUgMS4wMy4yMSAzLjI0Ny40NSA2LjkzNC0xLjA0NiA5LjkxNi0xLjg3MSAzLjczMi02LjU3NCA0LjI3Mi05LjA2NSA0LjI3MlpNMTUuNDA3LjE1NmMtMy43NjguMzItNy40NCAxLjEzLTguNzkgNS4xNTgtLjgzMSAyLjQ3MS0uNjEgNS4wMzgtLjQwNiA3LjUwNC4xNDcgMS40LjIwNyAyLjgwNi4xOCA0LjIxMy0uMDI1LjY2NS0uMDg1IDEuMzctLjE0IDIuMTE2LS4yMyAyLjkyMi0uNSA2LjIzOS45NjYgOC42MDUuNjE1IDEgMi41OTYgMy4zMzcgNy42NyAzLjUwMiAyLjE5Ni4wOCA3LjUwNC0uMTcgOS41MDUtNC4xNDIgMS40Ny0yLjk0MiAxLjIzNi02LjU5OSAxLjAyNi05LjgyNiAwLS4zNS0uMDQ1LS42OTUtLjA2NS0xLjAzYTY3LjQ1MSA2Ny40NTEgMCAwIDEtLjA4LTMuMzUzYzAtMi45NDEtLjAzLTYuMDAzLTEuMTgxLTguODA1QTYuNDM4IDYuNDM4IDAgMCAwIDIwLjQ0NS44NDFhMTQuOTYgMTQuOTYgMCAwIDAtNS4wMzgtLjY4NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI2ZmZlwiLFxuICAgIGQ6IFwiTTE2LjA0MiA0LjkyNGMuNjUgMy43NzcgNi44MjQgMi43ODEgNS45MzgtMS4wMy0uNzk1LTMuNDE4LTYuMTUzLTIuNDcyLTUuOTM4IDEuMDNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk0xOC45NzkgNy4zOWEzLjQ1NyAzLjQ1NyAwIDAgMS0xLjEzLS4xODUgMi43OTcgMi43OTcgMCAwIDEtMS44OTItMi4yNjYgMi44ODIgMi44ODIgMCAwIDEgLjc4LTIuMjIyIDMuNDA3IDMuNDA3IDAgMCAxIDIuMDAyLTEgMy4yMDIgMy4yMDIgMCAwIDEgMi4wMzEuMzUgMi43MjcgMi43MjcgMCAwIDEgMS4yOTYgMS44MDYgMi42NDMgMi42NDMgMCAwIDEtLjc3IDIuNjgyIDMuNTAyIDMuNTAyIDAgMCAxLTIuMzE3LjgzNVptLTIuODQ3LTIuNDc2YTIuNjI2IDIuNjI2IDAgMCAwIDEuNzc2IDIuMTI2IDMuNDE3IDMuNDE3IDAgMCAwIDMuMjc3LS42MiAyLjUwMiAyLjUwMiAwIDAgMCAuNzE2LTIuNTAyIDIuNjcyIDIuNjcyIDAgMCAwLTMuMTMyLTIuMDMxIDIuODg3IDIuODg3IDAgMCAwLTIuNjM3IDMuMDI3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjZmZmXCIsXG4gICAgZDogXCJNOC42NjMgNS41MzljLjg0IDMuMjg3IDYuMTAzIDIuNDQxIDUuOTA4LS44NTUtLjIzNS0zLjk1My02LjcxNC0zLjIwNy01LjkwOC44NTVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk0xMS40NzQgNy43MDVhMy4yMzIgMy4yMzIgMCAwIDEtMS41MzYtLjM3NSAyLjcyNyAyLjcyNyAwIDAgMS0xLjM1NS0xLjc3NiAyLjc1NyAyLjc1NyAwIDAgMSAuOTQtMi44MjcgMy41NTIgMy41NTIgMCAwIDEgMy41MzItLjQ1IDIuNjcyIDIuNjcyIDAgMCAxIDEuNjAxIDIuNDAyYy4xMDUgMS43NS0xLjI4NiAyLjc3MS0yLjYxNyAzLjAwMWEzLjY1NyAzLjY1NyAwIDAgMS0uNTY1LjAyNVpNOC43NjMgNS41MkEyLjczMiAyLjczMiAwIDAgMCAxMi4wMyA3LjUyYzEuMjYtLjIgMi41NzYtMS4xNiAyLjQ3Ni0yLjgwNmEyLjUwMSAyLjUwMSAwIDAgMC0xLjUtMi4yNjIgMy4zNzcgMy4zNzcgMCAwIDAtMy4zNTguNDMgMi41OTcgMi41OTcgMCAwIDAtLjg4NSAyLjYzN1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI2ZmZlwiLFxuICAgIGQ6IFwiTTE2Ljc2NyA5LjQ4MWMuMDQ5LjUyMS4wNDkgMS4wNDYgMCAxLjU2NmExIDEgMCAwIDEtLjU4NS4zNi44NjEuODYxIDAgMCAxLS42NTUtLjVjLS4wMzItLjU5LS4wMTctMS4xODMuMDQ1LTEuNzdsMS4xOTUuMzQ0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMTYuMjM3IDExLjQ4M2gtLjAyNWEuOTQ0Ljk0NCAwIDAgMS0uNzI1LS41NjYgNS45NSA1Ljk1IDAgMCAxIDAtMS4yMTVjMC0uMTg1LjAzLS4zOC4wMzUtLjU3di0uMTVsMS4zNS40MTR2LjA4NWMwIC4xNiAwIC4zMy4wMjYuNS4wNDUuMzU4LjA0NS43MiAwIDEuMDc2di4wMjVhLjc1Ljc1IDAgMCAxLS40NzYuMzRsLS4xNTUuMDZoLS4wM1ptLS41OC0uNjNhLjc2Ni43NjYgMCAwIDAgLjU2LjQ0NWwuMTQtLjA1NmEuNi42IDAgMCAwIC4zNjYtLjI2Yy4wNC0uMzMyLjA0LS42NjggMC0xIDAtLjE1NSAwLS4zMDUtLjAyNi0uNDU1bC0xLS4zMDZjMCAuMTU1IDAgLjMxLS4wMy40Ni0uMDQ0LjM4OC0uMDUuNzc4LS4wMTUgMS4xNjZsLjAwNS4wMDVaTTEwLjExNCA1Ljk2NGMuNDkxIDAgLjg5LS40MzIuODktLjk2NSAwLS41MzQtLjM5OS0uOTY2LS44OS0uOTY2LS40OTIgMC0uODkuNDMyLS44OS45NjYgMCAuNTMzLjM5OC45NjUuODkuOTY1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjZmZmXCIsXG4gICAgZDogXCJNMTAuNTE5IDUuNDY0Yy4xMTYgMCAuMjEtLjExLjIxLS4yNDVzLS4wOTQtLjI0NS0uMjEtLjI0NWMtLjExNiAwLS4yMS4xMS0uMjEuMjQ1cy4wOTQuMjQ1LjIxLjI0NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTE3LjU2OCA1LjcyNGMuNDgzIDAgLjg3NS0uNDMyLjg3NS0uOTY1IDAtLjUzMy0uMzkyLS45NjYtLjg3NS0uOTY2LS40ODQgMC0uODc2LjQzMy0uODc2Ljk2NiAwIC41MzMuMzkyLjk2NS44NzYuOTY1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjZmZmXCIsXG4gICAgZDogXCJNMTcuOTYzIDUuMjI0Yy4xMTQgMCAuMjA2LS4xMS4yMDYtLjI0NSAwLS4xMzYtLjA5Mi0uMjQ1LS4yMDYtLjI0NS0uMTEzIDAtLjIwNS4xMS0uMjA1LjI0NXMuMDkyLjI0NS4yMDUuMjQ1Wk0xNC4yNjYgOS40MDZjLS4zOS45NDEuMjE1IDIuODIyIDEuMjcgMS40MzZhMTEuMTIgMTEuMTIgMCAwIDEgLjA0Ni0xLjc3bC0xLjMxNi4zMzRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk0xNC44MTIgMTEuNDI4YS41LjUgMCAwIDEtLjI2LS4wN2MtLjQyNi0uMjQ2LS42OTEtMS4yNTEtLjM5LTIuMDAydi0uMDRsMS41LS4zOHYuMTJjMCAuMTk1IDAgLjM5LS4wMzUuNTc1YTUuNzEgNS43MSAwIDAgMCAwIDEuMTgxdi4wNjVhMS4wNTYgMS4wNTYgMCAwIDEtLjgxNS41NVptLS40OTYtMS45NDdjLS4yMTUuNTg2LS4wNDUgMS41MDEuMzMgMS43MTYuMjcuMTU1LjU3LS4xMTUuNzgtLjM4NWE2LjEyOCA2LjEyOCAwIDAgMSAwLTEuMThjMC0uMTQ2IDAtLjMuMDMxLS40NWwtMS4xNC4zWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjZEMkEyXCIsXG4gICAgZDogXCJNMTQuMzggNy41OTVhMS4xNDYgMS4xNDYgMCAwIDAtLjk0IDEuNjAxYy41LjkgMS42MTEtLjA4IDIuMzAyIDAgLjc5NSAwIDEuNDUuODQgMi4wOS4xNS43MTEtLjc3LS4zMDQtMS41LTEuMS0xLjg1NmwtMi4zNTEuMTA1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMjMxRjIwXCIsXG4gICAgZDogXCJNMTcuMjY4IDkuNzI3YTIgMiAwIDAgMS0uNzMtLjIwNiAyLjIwNyAyLjIwNyAwIDAgMC0uNzkxLS4yMmMtLjI4NyAwLS41Ny4wNjItLjgzLjE4LS41NjEuMTk1LTEuMTk2LjQxNi0xLjU1Ny0uMjNhMS4wOCAxLjA4IDAgMCAxIDAtMS4wNSAxLjI4MSAxLjI4MSAwIDAgMSAxLjAwMS0uNjg2bDIuNDA2LS4xMDVjLjU5LjI1IDEuMjY2LjcwNiAxLjM4MSAxLjIzNmEuOTU1Ljk1NSAwIDAgMS0uODggMS4wOFptLTEuNTAxLS42MDZjLjI5Ni4wMjQuNTg0LjEwNC44NS4yMzUuNDUuMTkuODA2LjMzNSAxLjE2Ni0uMDU1YS42NjQuNjY0IDAgMCAwIC4yMDUtLjYwNWMtLjEtLjQ2LS43MzUtLjg4LTEuMjU2LTEuMWwtMi4zMjYuMDk0YTEuMTEgMS4xMSAwIDAgMC0uODUuNTkuOTA2LjkwNiAwIDAgMCAwIC44NzZjLjI4NS41Ljc5NS4zMzUgMS4zNC4xNS4yNzQtLjEyMi41Ny0uMTg1Ljg3LS4xODVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk0xNC4yNjYgNy41NmMtLjA1NS0xLjI1IDIuMzM2LTEuNDEgMi42MTctLjM2LjI4IDEuMDUtMi41MDIgMS4yOS0yLjYxNy4zNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Hb2xhbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0dvb2dsZUcgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0dvb2dsZUcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fZ29vZ2xlX2cnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIGQ6IFwiTTE1LjMxOSAzLjI3OGMwLTEuMTMxLS4xMDItMi4yMi0uMjktMy4yNjRIMHY2LjE3Mmg4LjU4N2MtLjM3IDEuOTk1LTEuNDk0IDMuNjg1LTMuMTg0IDQuODE2djQuMDA0aDUuMTU3YzMuMDE3LTIuNzc4IDQuNzU4LTYuODY5IDQuNzU4LTExLjcyOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgZDogXCJNMTQuMzQzIDEyLjk1NmM0LjMwOCAwIDcuOTItMS40MyAxMC41Ni0zLjg2NmwtNS4xNTctNC4wMDRjLTEuNDI5Ljk1OC0zLjI1NiAxLjUyMy01LjQwMyAxLjUyMy00LjE1NiAwLTcuNjc0LTIuODA2LTguOTI4LTYuNTc4SC4wODR2NC4xMzRjMi42MjUgNS4yMTUgOC4wMjEgOC43OSAxNC4yNTkgOC43OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdlJyksXG4gICAgZDogXCJNNy4wMjggMTAuMjVhOS41OSA5LjU5IDAgMCAxLS41LTMuMDMyIDkuNTkgOS41OSAwIDAgMSAuNS0zLjAzMlYuMDUyaC01LjMzQTE1Ljk1IDE1Ljk1IDAgMCAwIDAgNy4yMThjMCAyLjU3NS42MTcgNS4wMTIgMS42OTcgNy4xNjZsNS4zMzEtNC4xMzR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZycpLFxuICAgIGQ6IFwiTTE0LjM0MyA2LjM5MmMyLjM0MiAwIDQuNDQ2LjgwNSA2LjEgMi4zODZsNC41NzYtNC41NzZDMjIuMjU2IDEuNjI3IDE4LjY0NC4wNDYgMTQuMzQzLjA0NiA4LjEwNS4wNDYgMi43MDkgMy42MjIuMDgzIDguODM2bDUuMzMyIDQuMTM0YzEuMjU0LTMuNzcgNC43NzItNi41NzggOC45MjgtNi41Nzh6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDE1Ljk1NSAxMy4wODcpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0Mjg1RjRcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNLjAwMSAxNS4wMDZoMTUuMzE4Vi4wMTRILjAwMXpcIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMS42MTMgMTkuMDAzKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzRBODUzXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTS4wODQgMTIuOTU2aDI0LjgxOVYuMDMxSC4wODR6XCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJyksIFwiKVwiKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgOC43ODQpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdmJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQkJDMDRcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMCAxNC4zODRoNy4wMjhWLjA1MkgwelwiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZicpLCBcIilcIilcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxLjYxMylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2gnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdnJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0VBNDMzNVwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0uMDg0IDEyLjk3aDI0LjkzNVYuMDQ2SC4wODR6XCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdoJyksIFwiKVwiKVxuICB9KSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0dvb2dsZUc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0hhcHJveHkgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0hhcHJveHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29faGFwcm94eScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGNsaXBQYXRoOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSwgXCIpXCIpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBzdHJva2U6IFwiIzA1NDg2RFwiLFxuICAgIHN0cm9rZU1pdGVybGltaXQ6IDEwLFxuICAgIHN0cm9rZVdpZHRoOiAwLjEyLFxuICAgIGQ6IFwibTE2LjA1IDEzLjIzNy0zLjExLTMuNjEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBzdHJva2U6IFwiIzA1NDg2RFwiLFxuICAgIHN0cm9rZU1pdGVybGltaXQ6IDEwLFxuICAgIHN0cm9rZVdpZHRoOiAwLjA2LFxuICAgIGQ6IFwibTYuMTE3IDEwLjUyOCAyLjUwOSAzLjUxMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgc3Ryb2tlOiBcIiMwNTQ4NkRcIixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMCxcbiAgICBzdHJva2VXaWR0aDogMC4xMixcbiAgICBkOiBcIm0xNi4wNSAxMy4yMzcgMy4xMS0zLjYxMk0xOS44NjMgMTcuMTVsMy43MTItMy4xMU0xOS44NjMgMTcuMTVsMy43MTIgMy4zMTFNMTkuMTYgMjQuNTc1bC0zLjExLTMuNTExTTEyLjk0IDI0LjU3NWwzLjExLTMuNTExTTguNjI1IDIwLjI2bDMuNTEyLTMuMTFNOC42MjUgMTQuMDRsMy41MTIgMy4xMU0xNi4wNSAxMy4yMzhsLTcuNDI1LjgwMk0xNi4wNSAxMy4yMzhsNy41MjUuODAyTTE5Ljg2MyAxNy4xNWwtLjcwMi03LjUyNU0xOS44NjMgMTcuMTVsLS43MDIgNy40MjVNMjMuNTc1IDIwLjQ2MWwtNy41MjUuNjAyTTguNjI1IDIwLjI2MWw3LjQyNS44MDNNMTIuOTQgMjQuNTc1bC0uODAzLTcuNDI1TTEyLjk0IDkuNjI1bC0uODAzIDcuNTI1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBzdHJva2U6IFwiIzA1NDg2RFwiLFxuICAgIHN0cm9rZU1pdGVybGltaXQ6IDEwLFxuICAgIHN0cm9rZVdpZHRoOiAwLjA2LFxuICAgIGQ6IFwibTUuMTE0IDE1LjA0MyAzLjUxMS0xLjAwM005LjMyOCA3LjExN2wzLjYxMiAyLjUwOU0xMy43NDMgNS41MTJsLS44MDMgNC4xMTNNMTMuNzQzIDUuNTEybDUuNDE4IDQuMTEzTTE4LjM1OCA1LjUxMmwuODAzIDQuMTEzTTIyLjc3MyA3LjExNyAxOS4xNiA5LjYyNk0yNS45ODMgMTAuNTI4bC02LjgyMi0uOTAzTTIzLjU3NSAxNC4wNGwyLjQwOC0zLjUxMk0yMy41NzUgMTQuMDRsMy40MTIgMS4wMDNNMjMuNTc1IDE0LjA0bDMuNDEyIDUuMjE3TTE4LjM1OCA1LjUxMiAxMi45NCA5LjYyNU0yMy41NzYgMTQuMDRsLS44MDMtNi45MjNNMjMuNTc1IDIwLjQ2MmwzLjQxMi0xLjIwNE0yMy41NzUgMjAuNDYybDMuNDEyLTUuNDE4TTIzLjU3NSAyMC40NjFsMi40MDggMy4zMTJNMjMuNTc2IDIwLjQ2MWwtLjgwMyA2LjcyM00xOS4xNiAyNC41NzVsMy42MTMgMi42MDlNMTkuMTYgMjQuNTc1bDYuODIzLS44MDJNMTkuMTYgMjQuNTc1bC0uODAyIDQuMjE0TTE5LjE2IDI0LjU3NWwtNS40MTcgNC4yMTRNMTIuOTQgMjQuNTc1bC44MDMgNC4yMTRNMTIuOTQgMjQuNTc1bDUuNDE4IDQuMjE0TTEyLjk0IDI0LjU3NWwtMy42MTIgMi42MDlNMTIuOTQgMjQuNTc1bC02LjgyMy0uODAyTTguNjI2IDIwLjI2MWwtMi41MDkgMy41MTJNOC42MjUgMjAuMjYxbC43MDMgNi45MjNNOC42MjUgMjAuMjZsLTMuNTExLTEuMDAyTTguNjI1IDE0LjA0bC0zLjUxMSA1LjIxN004LjYyNSAyMC4yNmwtMy41MTEtNS4yMTdNOS4zMjggNy4xMTdsLS43MDMgNi45MjNNNi4xMTcgMTAuNTI4bDYuODIzLS45MDNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIHN0cm9rZTogXCIjMDgzRDVGXCIsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTAsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDUsXG4gICAgZDogXCJNOS4zMjcgNy4xMTcgNi43MiA1LjgxM005LjMyOCA3LjExN2wtLjIwMS0yLjkxTTEzLjc0MiA1LjUxMiA5LjEyNyA0LjIwN00xMy43NDIgNS41MTJsLTIuMDA2LTIuNTA5TTEzLjc0MyA1LjUxMmwuODAyLTIuOTFNOS4zMjggNy4xMTdsMi40MDgtNC4xMTRNMTguMzU4IDUuNTEybC0zLjgxMy0yLjkxTTE4LjM1OCA1LjUxMmwtLjgwMy0zLjAxTTEzLjc0MyA1LjUxMmwzLjgxMi0zLjAxTTE4LjM1OCA1LjUxMmwyLjAwNy0yLjUwOU0yMi43NzMgNy4xMTdsLTIuNDA4LTQuMTE0TTIyLjc3MyA3LjExN2wuMzAxLTIuOTFNMTguMzU4IDUuNTEybDQuNzE2LTEuMzA1TTIyLjc3MyA3LjExN2wyLjcwOS0xLjQwNU0yMi43NzMgNy4xMTdsNC43MTYuNzAzTTI1Ljk4MyAxMC41MjhsMS41MDUtMi43MDlNMjUuOTg0IDEwLjUyOGwtLjUwMi00LjgxNk0yNS45ODMgMTAuNTI4bDMuMTEtLjNNMjUuOTgzIDEwLjUyOGw0LjIxNCAyLjMwOE0yNi45ODcgMTUuMDQ0bDIuMTA3LTQuODE3TTI2Ljk4NyAxNS4wNDNsMy4yMS0yLjIwN00yNi45ODcgMTUuMDQzbDMuNjEyLjcwM00yNi45ODcgMTkuMjU4bDMuNjEyLTMuNTEyTTI2Ljk4NyAxOS4yNThsMy43MTItLjcwM00yNi45ODcgMTUuMDQzbDMuNzEyIDMuNTEyTTI2Ljk4NyAxOS4yNThsMy4xMSAyLjEwN00yNS45ODMgMjMuNzczbDQuMTE0LTIuNDA5TTI1Ljk4MyAyMy43NzNsMy4xMS4zTTI2Ljk4NyAxOS4yNThsMi4xMDcgNC44MTZNMjUuOTgzIDIzLjc3M2wxLjUwNSAyLjcwOU0yNS45ODQgMjMuNzczbC0uNTAyIDQuNzE1TTI1LjQ4MiAyOC40ODhsLTIuNzEtMS4zMDRNMjIuNzczIDI3LjE4NGwuMiAyLjkxTTIyLjc3MyAyNy4xODRsNC43MTYtLjcwM00yMi43NzMgMjcuMTg0bC0yLjQwOCA0LjExNE0xOC4zNTggMjguNzlsMi4wMDcgMi41MDhNMTguMzU4IDI4Ljc5bDQuNjE1IDEuMzA0TTE4LjM1OCAyOC43OWwtLjgwMyAzLjAxTTE4LjM1OCAyOC43OWwtMy44MTMgMy4wMU0xMy43NDMgMjguNzlsLjgwMiAzLjAxTTEzLjc0MyAyOC43OWwzLjgxMiAzLjAxTTEzLjc0MiAyOC43OWwtMi4wMDYgMi41MDhNOS4zMjggMjcuMTg0bDIuNDA4IDQuMTE0TTEzLjc0MiAyOC43OWwtNC42MTUgMS40MDRNOS4zMjggMjcuMTg0bC0uMjAxIDMuMDFNOS4zMjggMjcuMTg0bC0yLjcxIDEuNDA0TTYuMTE3IDIzLjc3M2wuNTAyIDQuODE2TTkuMzI4IDI3LjE4NGwtNC43MTYtLjcwM002LjExNyAyMy43NzNsLTEuNTA1IDIuNzA5TTYuMTE3IDIzLjc3M2wtMy4xMS4zTTYuMTE3IDIzLjc3M2wtNC4yMTQtMi40MDlNNS4xMTQgMTkuMjU4bC0zLjIxIDIuMTA3TTUuMTE0IDE5LjI1OCAxLjQgMTguNTU1TTUuMTE0IDE5LjI1OGwtMi4xMDcgNC44MTZNNS4xMTQgMTUuMDQzIDEuNCAxOC41NTVNNS4xMTQgMTkuMjU4IDEuNCAxNS43NDZNNS4xMTQgMTUuMDQzbC0zLjExLTIuMTA2TTUuMTE0IDE1LjA0M2wtMy43MTMuNzAzTTUuMTE0IDE1LjA0NGwtMi4wMDctNC44MTdNNi4xMTcgMTAuNTI4bC0zLjAxLS4zTTYuMTE3IDEwLjUyOGwtNC4xMTQgMi40MDhNNi4xMTcgMTAuNTI4IDQuNzEyIDcuOTJNNi4xMTcgMTAuNTI4bC42MDItNC43MTVNOS4zMjggNy4xMTdsLTQuNjE2LjgwM1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA2REE4XCIsXG4gICAgZDogXCJNMTMuOTQzIDE1LjI0NGgtMy42MTJ2My41OTJoMy42MTJ2LTMuNTkyWk0xNy43NTYgMTEuMzMxaC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJaTTE3Ljc1NiAxOS4xNTdoLTMuNjEydjMuNTkyaDMuNjEydi0zLjU5MlpNMjEuNjY5IDE1LjI0NGgtMy42MTJ2My41OTJoMy42MTJ2LTMuNTkyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMkY3N0JDXCIsXG4gICAgZDogXCJNMjAuMzY1IDguNDIxaC0yLjUwOVYxMC45aDIuNTA5VjguNDJaTTE0LjE0NCA4LjMyMWgtMi41MDl2Mi40NzhoMi41MDlWOC4zMjFaTTkuODMgMTIuODM2SDcuMzJ2Mi40NzhIOS44M3YtMi40NzhaTTkuODMgMTguOTU2SDcuMzJ2Mi40NzlIOS44M3YtMi40NzlaTTI0LjY3OSAxOC45NTZIMjIuMTd2Mi40NzloMi41MDl2LTIuNDc5Wk0yNC42NzkgMTIuNzM2SDIyLjE3djIuNDc4aDIuNTA5di0yLjQ3OFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzEzOUJEN1wiLFxuICAgIGQ6IFwiTTYuOTIgOS42MjVINS4zMTR2MS42NzZINi45MlY5LjYyNVpNMTAuMTMgNi4yMTRIOC41MjZ2MS42NzVoMS42MDZWNi4yMTRaTTE0LjQ0NSA0LjYwOWgtMS42MDZ2MS42NzVoMS42MDZWNC42MVpNNS45MTYgMTQuMTRINC4zMTF2MS42NzZoMS42MDVWMTQuMTRaTTI2Ljc4NiA5LjgyNkgyNS4wOHYxLjY0NmgxLjcwNlY5LjgyNlpNMjMuNTc1IDYuNDE1SDIxLjg3VjguMDZoMS43MDVWNi40MTVaTTE5LjI2IDQuODFoLTEuNzA1djEuNjQ1aDEuNzA2VjQuODA5Wk0yNy42ODkgMTQuNDQxaC0xLjYwNXYxLjY0NmgxLjYwNVYxNC40NFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzJGNzdCQ1wiLFxuICAgIGQ6IFwiTTE0LjE0NCAyMy4yN2gtMi41MDl2Mi40NzloMi41MDl2LTIuNDc4Wk0yMC4yNjQgMjMuMjdoLTIuNTA4djIuNDc5aDIuNTA4di0yLjQ3OFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzEzOUJEN1wiLFxuICAgIGQ6IFwiTTI2LjY4NSAyMi43N0gyNS4wOHYxLjY3NWgxLjYwNXYtMS42NzZaTTIzLjM3NSAyNi4wOEgyMS43N3YxLjY3NmgxLjYwNVYyNi4wOFpNMTkuMDYgMjcuNjg2aC0xLjYwNXYxLjY3NWgxLjYwNXYtMS42NzVaTTI3LjU4OSAxOC4yNTRoLTEuNjA2djEuNjc2aDEuNjA2di0xLjY3NlpNNi45MiAyMi45N0g1LjIxNHYxLjY0Nkg2LjkyVjIyLjk3Wk0xMC4wMyAyNi4zODFIOC4zMjV2MS42NDZoMS43MDVWMjYuMzhaTTE0LjQ0NSAyNy45ODdoLTEuNzA2djEuNjQ1aDEuNzA2di0xLjY0NVpNNS44MTYgMTguMzU1SDQuMjFWMjBoMS42MDZ2LTEuNjQ1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDNBOURBXCIsXG4gICAgZDogXCJNNy4xMiA1LjMxMWgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTEuOTAzIDE1LjI0NEgxdi45MzNoLjkwM3YtLjkzM1pNMjUuNzgyIDUuMjFoLS45MDN2LjkzNGguOTAzVjUuMjFaTTIuNTA1IDEyLjMzNWgtLjkwM3YuOTMzaC45MDN2LS45MzRaTTEyLjEzNyAyLjUwMmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTMuNTA4IDkuNzI2aC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNNS4xMTMgNy4zMThINC4yMXYuOTMzaC45MDN2LS45MzNaTTkuNjI5IDMuODA2aC0uOTAzdi45MDNoLjkwM3YtLjkwM1pNMTUuMDQ3IDIuMWgtLjkwM3YuOTAzaC45MDNWMi4xWk0yMy4zNzQgMy42MDVoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0yOS4yOTUgOS43MjZoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0zMC40OTggMTIuMzM1aC0uOTAzdi45MzNoLjkwM3YtLjkzNFpNMjcuNjkgNy4zMThoLS45MDR2LjkzM2guOTAzdi0uOTMzWk0zMC45IDE1LjE0NGgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTE3Ljg1NiAyaC0uOTAzdi45MzNoLjkwM1YyWk0yMC42NjUgMi42MDJoLS45MDN2LjkzM2guOTAzdi0uOTMzWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDNBOURBXCIsXG4gICAgZDogXCJNNy4xMiA1LjMxMWgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTEuOTAzIDE1LjI0NEgxdi45MzNoLjkwM3YtLjkzM1pNMjUuNzgyIDUuMjFoLS45MDN2LjkzNGguOTAzVjUuMjFaTTIuNTA1IDEyLjMzNWgtLjkwM3YuOTMzaC45MDN2LS45MzRaTTEyLjEzNyAyLjUwMmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTMuNTA4IDkuNzI2aC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNNS4xMTMgNy4zMThINC4yMXYuOTMzaC45MDN2LS45MzNaTTkuNjI5IDMuODA2aC0uOTAzdi45MDNoLjkwM3YtLjkwM1pNMTUuMDQ3IDIuMWgtLjkwM3YuOTAzaC45MDNWMi4xWk0yMy4zNzQgMy42MDVoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0yOS4yOTUgOS43MjZoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0zMC40OTggMTIuMzM1aC0uOTAzdi45MzNoLjkwM3YtLjkzNFpNMjcuNjkgNy4zMThoLS45MDR2LjkzM2guOTAzdi0uOTMzWk0zMC45IDE1LjE0NGgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTE3Ljg1NiAyaC0uOTAzdi45MzNoLjkwM1YyWk0yMC42NjUgMi42MDJoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0yNS42ODIgMjcuODg2aC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMzEgMTcuOTUzaC0uOTAzdi45MzNIMzF2LS45MzNaTTcuMTIgMjcuOTg3aC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMzAuMzk4IDIwLjc2M2gtLjkwM3YuOTMzaC45MDN2LS45MzNaTTIwLjY2NSAzMC41OTZoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0yOS4yOTUgMjMuMzcxaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMjcuNjkgMjUuNzhoLS45MDR2LjkzMmguOTAzdi0uOTMzWk0yMy4yNzQgMjkuNzkzaC0uOTAzdi45MDJoLjkwM3YtLjkwMlpNMTcuNzU2IDMxLjQ5OGgtLjkwM3YuOTAzaC45MDN2LS45MDNaTTkuNDI4IDI5LjQ5MmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTMuNTA4IDIzLjQ3MmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTIuMzA0IDIwLjg2M2gtLjkwM3YuOTMzaC45MDN2LS45MzNaTTUuMDEzIDI1Ljg4SDQuMTF2LjkzM2guOTAzdi0uOTMzWk0xLjkwMyAxNy45NTNIMXYuOTMzaC45MDN2LS45MzNaTTE0Ljk0NyAzMS40OThoLS45MDN2LjkzM2guOTAydi0uOTMzWk0xMi4xMzcgMzAuNTk2aC0uOTAzdi45MzNoLjkwM3YtLjkzM1pcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJjbGlwUGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjZmZmXCIsXG4gICAgZDogXCJNMCAwaDMydjMySDBWMFpcIlxuICB9KSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0hhcHJveHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0libSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvSWJtKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2libScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIHgxOiBcIjguMDA1JVwiLFxuICAgIHgyOiBcIjUzLjMzJVwiLFxuICAgIHkxOiBcIjc5LjMyMyVcIixcbiAgICB5MjogXCI3OS4zMjQlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjM0JEQURFXCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzAuNDc2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMzZDRUUxXCIsXG4gICAgc3RvcE9wYWNpdHk6IDAuMzgzXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzIxQTJFRlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIHgxOiBcIjE5LjQ5NiVcIixcbiAgICB4MjogXCI3MS4zMDklXCIsXG4gICAgeTE6IFwiODMuMzQ0JVwiLFxuICAgIHkyOiBcIjE3LjYzOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyMDdGRkFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2RUFGRjFcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICB4MTogXCIyMS45MDklXCIsXG4gICAgeDI6IFwiMjEuOTA5JVwiLFxuICAgIHkxOiBcIjk2LjMxNCVcIixcbiAgICB5MjogXCIyOS40NTQlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNDJDMUU2XCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNTcuMDc2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNkZCOUVGXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiODYuNzE2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNjBDQkU3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNUNDRkU1XCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgeDE6IFwiOTYuMjA1JVwiLFxuICAgIHgyOiBcIi0xLjE3MiVcIixcbiAgICB5MTogXCIxMi42NjclXCIsXG4gICAgeTI6IFwiLTIyLjI1MiVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2RkI5RUZcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIyMi40MjclXCIsXG4gICAgc3RvcENvbG9yOiBcIiMzOEQyRTBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5MS4yMDMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2QUJGRUNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1Q0NGRTVcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICB4MTogXCI5LjQwOCVcIixcbiAgICB4MjogXCI4MC41ODklXCIsXG4gICAgeTE6IFwiODcuNzY0JVwiLFxuICAgIHkyOiBcIjgzLjEzOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMxMjZDRkRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyMUExRUZcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzOEQyRTBcIixcbiAgICBkOiBcIk00LjI2MiAxMy4xMjJhLjYwNC42MDQgMCAwIDEtLjMtLjA4bC0yLjg0NC0xLjYyNWEuNjE3LjYxNyAwIDAgMS0uMjk1LS43MzQuNjA4LjYwOCAwIDAgMSAuODY4LS4zMTVsMi44NDMgMS42MjVjLjI5LjE1OS40MDUuNTE0LjI2MS44MWEuNjAzLjYwMyAwIDAgMS0uNTMzLjMyWm00LjkxNC00Ljg2NGEuNjAzLjYwMyAwIDAgMS0uNTIyLS4yOThMNy4wMTIgNS4xNDRhLjYxNS42MTUgMCAwIDEgLjExNS0uNzgyLjYwNi42MDYgMCAwIDEgLjkxLjE1N2wxLjY0IDIuODEzYS42MTcuNjE3IDAgMCAxLS4xNTguODE5Yy0uMS4wNy0uMjIuMTA3LS4zNDMuMTA3Wm02LjEwNy0yLjQxNlYyLjYzNWEuNjI0LjYyNCAwIDAgMSAuNTc1LS42MzQuNjA1LjYwNSAwIDAgMSAuNDQzLjE2NC41OTMuNTkzIDAgMCAxIC4xODYuNDMxdjMuMjg1YS41OTMuNTkzIDAgMCAxLS4xODYuNDMuNjA1LjYwNSAwIDAgMS0uNDQzLjE2NS42MjQuNjI0IDAgMCAxLS41NzUtLjYzNFptNy4zMTIgMi40MTZhLjYwNC42MDQgMCAwIDEtLjM0My0uMTA3LjYxNy42MTcgMCAwIDEtLjE1OS0uODJsMS42NC0yLjgxMmEuNjAyLjYwMiAwIDAgMSAuOTExLS4xNTdjLjIyMy4yLjI3MS41MjguMTE1Ljc4MkwyMy4xMTcgNy45NmEuNjAzLjYwMyAwIDAgMS0uNTIyLjI5OFptNC45MTQgNC44NjRhLjYwMi42MDIgMCAwIDEtLjUzNC0uMzE5LjYxNi42MTYgMCAwIDEgLjI2Mi0uODFsMi44MTgtMS42MTFhLjYyNi42MjYgMCAwIDEgLjc4My4xMTIuNTkyLjU5MiAwIDAgMS0uMTU2LjkwNmwtMi44NzMgMS42NDNhLjYwNC42MDQgMCAwIDEtLjMuMDhaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSwgXCIpXCIpLFxuICAgIGQ6IFwibTE2LjUzNiAxOS42NDUtMS4yMDQtLjAwOWMuMDI2LTMuMzc3IDIuMTQ2LTYuMzkxIDUuMzM3LTcuNTg1YTguMzA4IDguMzA4IDAgMCAxIDkuMDY4IDIuMTk3bC0uODk3Ljc5NWE3LjA5NyA3LjA5NyAwIDAgMC03Ljc0NS0xLjg3NmMtMi43MjYgMS4wMTktNC41MzcgMy41OTMtNC41NTkgNi40NzhaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGQ6IFwiTS4wMjkgMjAuOTA5Yy4wMjItMy4zNTQgMi40NzUtNi4yMDggNS44MTUtNi43NjRsLjIwMSAxLjE3NmMtMi43NjQuNDYtNC43OTQgMi44Mi00LjgxMiA1LjU5NkwuMDI5IDIwLjkxWlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAyKVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdjJyksIFwiKVwiKSxcbiAgICBkOiBcIk04LjI0NiAyNC43MzdhMTAuNjI1IDEwLjYyNSAwIDAgMSAwLTE1LjEzMWM0LjIxOS00LjE3OCAxMS4wNi00LjE3OCAxNS4yNzkgMGExMC44OSAxMC44OSAwIDAgMSAxLjM4NCAxLjY3OGwtMS4wMDQuNjU3YTkuNTE3IDkuNTE3IDAgMCAwLTEuMjMxLTEuNDkyYy0zLjc1LTMuNzEzLTkuODI4LTMuNzEzLTEzLjU3NyAwYTkuNDQyIDkuNDQyIDAgMCAwIDAgMTMuNDQ1bC0uODUxLjg0M1pcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNNS44MzYgMTMuMjM0Yy40MDQtMS4zMzIgMS4zMy0yLjU2IDIuNDEtMy42MjggNC4yMTktNC4xNzggMTEuMDYtNC4xNzggMTUuMjc5IDBhMTAuODkgMTAuODkgMCAwIDEgMS4zODQgMS42NzhsLTEuMDA0LjY1N2E5LjUxNyA5LjUxNyAwIDAgMC0xLjIzMS0xLjQ5MmMtMy43NS0zLjcxMy05LjgyOC0zLjcxMy0xMy41NzcgMGE5LjQ3NCA5LjQ3NCAwIDAgMC0yLjA3NCAzLjA2Yy0xLjQ1MiAzLjQ1LTIuMzU4IDMuNTkzLTEuMTg3LS4yNzVaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2UnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTIzLjUyNCAyNy44N0g2Ljk2YTcuMDEyIDcuMDEyIDAgMCAxLTQuOTIyLTIuMDU5QTYuODc2IDYuODc2IDAgMCAxIC4wMjkgMjAuOTFsMS4yMDQuMDA5YTUuNjkgNS42OSAwIDAgMCAxLjY2IDQuMDU1IDUuODAyIDUuODAyIDAgMCAwIDQuMDcxIDEuNzA1aDE2LjYxOGMyLjc4LjAwMiA1LjMwMi0xLjYxNiA2LjQzOC00LjEzYTYuOTI5IDYuOTI5IDAgMCAwLTEuMTgtNy41MDVsLjg5Ny0uNzk1YTguMTEyIDguMTEyIDAgMCAxIDEuMzg0IDguNzg1Yy0xLjMyOSAyLjk0My00LjI3OSA0LjgzNy03LjUzNCA0LjgzOGgtLjA2M1pcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvSWJtOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29JYm1Nb25vID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29JYm1Nb25vKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwibS4wNDcgMjIuOTA5IDEuMTg2LjAwOWE1LjY5IDUuNjkgMCAwIDAgMS42NiA0LjA1NSA1LjgwMiA1LjgwMiAwIDAgMCA0LjA3MSAxLjcwNWgxNi42MThjMi43OC4wMDIgNS4zMDItMS42MTYgNi40MzgtNC4xM2E2LjkyOSA2LjkyOSAwIDAgMC0xLjE4LTcuNTA1bC44OTctLjc5NWE4LjExMiA4LjExMiAwIDAgMSAxLjM4NCA4Ljc4NWMtMS4zMjkgMi45NDMtNC4yNzkgNC44MzctNy41MzQgNC44MzhINi45NmE3LjAxMiA3LjAxMiAwIDAgMS00LjkyMi0yLjA2QTYuODc2IDYuODc2IDAgMCAxIC4wMjkgMjIuOTFoLjAxOC0uMDE4Yy4wMTctMi43MSAxLjYyLTUuMDkxIDMuOTk3LTYuMi4xMTQtLjA1NC4zMi4yOS42MTkgMS4wM2E1LjcxIDUuNzEgMCAwIDAtMy40MTIgNS4xOGwtMS4xODYtLjAxWm00LjIxNS05Ljc4N2EuNjA0LjYwNCAwIDAgMS0uMy0uMDhsLTIuODQ0LTEuNjI1YS42MTcuNjE3IDAgMCAxLS4yOTUtLjczNC42MDguNjA4IDAgMCAxIC44NjgtLjMxNWwyLjg0MyAxLjYyNWMuMjkuMTU5LjQwNS41MTQuMjYxLjgxYS42MDMuNjAzIDAgMCAxLS41MzMuMzJabTQuOTE0LTQuODY0YS42MDMuNjAzIDAgMCAxLS41MjItLjI5OEw3LjAxMiA1LjE0NGEuNjE1LjYxNSAwIDAgMSAuMTE1LS43ODIuNjA2LjYwNiAwIDAgMSAuOTEuMTU3bDEuNjQgMi44MTNhLjYxNy42MTcgMCAwIDEtLjE1OC44MTljLS4xLjA3LS4yMi4xMDctLjM0My4xMDdabTYuMTA3LTIuNDE2VjIuNjM1YS42MjQuNjI0IDAgMCAxIC41NzUtLjYzNC42MDUuNjA1IDAgMCAxIC40NDMuMTY0LjU5My41OTMgMCAwIDEgLjE4Ni40MzF2My4yODVhLjU5My41OTMgMCAwIDEtLjE4Ni40My42MDUuNjA1IDAgMCAxLS40NDMuMTY1LjYyNC42MjQgMCAwIDEtLjU3NS0uNjM0Wm03LjMxMiAyLjQxNmEuNjA0LjYwNCAwIDAgMS0uMzQzLS4xMDcuNjE3LjYxNyAwIDAgMS0uMTU5LS44MmwxLjY0LTIuODEyYS42MDIuNjAyIDAgMCAxIC45MTEtLjE1N2MuMjIzLjIuMjcxLjUyOC4xMTUuNzgyTDIzLjExNyA3Ljk2YS42MDMuNjAzIDAgMCAxLS41MjIuMjk4Wm00LjkxNCA0Ljg2NGEuNjAyLjYwMiAwIDAgMS0uNTM0LS4zMTkuNjE2LjYxNiAwIDAgMSAuMjYyLS44MWwyLjgxOC0xLjYxMWEuNjI2LjYyNiAwIDAgMSAuNzgzLjExMi41OTIuNTkyIDAgMCAxLS4xNTYuOTA2bC0yLjg3MyAxLjY0M2EuNjA0LjYwNCAwIDAgMS0uMy4wOFpNMTYuMzY2IDE5Ljc4SDE2YTIuMzIyIDIuMzIyIDAgMCAxLS4zMDIgMGMtLjA5LS4wMTEtLjE1Mi4wNS0uMDg2LS4xOTZhOC4yMDQgOC4yMDQgMCAwIDEgNS4wNTctNS41MzMgOC4zMDggOC4zMDggMCAwIDEgOS4wNjggMi4xOTdsLS44OTcuNzk1YTcuMDk3IDcuMDk3IDAgMCAwLTcuNzQ1LTEuODc2IDcuMDA5IDcuMDA5IDAgMCAwLTQuMjg4IDQuNjEzYy0uMTE1LjM5OS0uMTE1LjM5OSAwIDBoLS40NFpNNi4xNTQgMjMuODI2YTEwLjYyNiAxMC42MjYgMCAwIDEgMi4wOTItMTIuMjJjNC4yMTktNC4xNzggMTEuMDYtNC4xNzggMTUuMjc5IDBsLS44NTEuODQzYy0zLjc1LTMuNzEzLTkuODI4LTMuNzEzLTEzLjU3NyAwQTkuNDQyIDkuNDQyIDAgMCAwIDcuMjY0IDIzLjM2YTYuOTkgNi45OSAwIDAgMC0uNDE4LjE3MmwtLjIxMi4wOTQtLjE2Mi4wNzctLjA5NC4wMy0uMDkuMDM5Yy42NDgtLjI4Mi45NjUtLjQyLjk1LS40MTItLjAyNi4wMTUtMS4wNzMuNDg5LTEuMDg0LjQ2NlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29JYm1Nb25vOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29LYWZrYSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvS2Fma2EoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS41NjUgMTcuNjIzYy0xLjE3MyAwLTIuMjI1LjUyLTIuOTQ1IDEuMzM3bC0xLjg0NS0xLjMwNmMuMTk2LS41NC4zMDktMS4xMTguMzA5LTEuNzI0IDAtLjU5Ni0uMTA5LTEuMTY1LS4yOTgtMS42OTZsMS44NC0xLjI5M2EzLjkxNCAzLjkxNCAwIDAgMCAyLjkzOSAxLjMzMSAzLjkzIDMuOTMgMCAwIDAgMy45MjYtMy45MjYgMy45MyAzLjkzIDAgMCAwLTMuOTI2LTMuOTI2IDMuOTMgMy45MyAwIDAgMC0zLjkyNiAzLjkyNmMwIC4zODcuMDU4Ljc2MS4xNjMgMS4xMTVsLTEuODQyIDEuMjkzYTUuMDY4IDUuMDY4IDAgMCAwLTMuMTQtMS44MjVWOC43MWEzLjkzMiAzLjkzMiAwIDAgMCAzLjExOS0zLjg0MkEzLjkzIDMuOTMgMCAwIDAgMTIuMDEyLjk0MWEzLjkzIDMuOTMgMCAwIDAtMy45MjYgMy45MjYgMy45MyAzLjkzIDAgMCAwIDMuMDQ4IDMuODI0djIuMjQ5YTUuMDc1IDUuMDc1IDAgMCAwLTQuMTkzIDQuOTkgNS4wNzUgNS4wNzUgMCAwIDAgNC4yMjkgNC45OTVWMjMuM2EzLjkzMSAzLjkzMSAwIDAgMC0zLjA4NCAzLjgzMyAzLjkzIDMuOTMgMCAwIDAgMy45MjYgMy45MjYgMy45MyAzLjkzIDAgMCAwIDMuOTI3LTMuOTI2IDMuOTMxIDMuOTMxIDAgMCAwLTMuMDg0LTMuODMzdi0yLjM3NWE1LjA3IDUuMDcgMCAwIDAgMy4wODctMS43OTVsMS44NTcgMS4zMTRjLS4xMDMuMzUxLS4xNi43MjEtLjE2IDEuMTA1YTMuOTMgMy45MyAwIDAgMCAzLjkyNiAzLjkyNiAzLjkzIDMuOTMgMCAwIDAgMy45MjYtMy45MjYgMy45MyAzLjkzIDAgMCAwLTMuOTI2LTMuOTI2Wm0wLTkuMThjMS4wNSAwIDEuOTAzLjg1MyAxLjkwMyAxLjkwM3MtLjg1NCAxLjkwMy0xLjkwMyAxLjkwM2ExLjkwNiAxLjkwNiAwIDAgMS0xLjkwNC0xLjkwM2MwLTEuMDUuODU0LTEuOTA0IDEuOTA0LTEuOTA0Wk0xMC4xMDkgNC44NjZjMC0xLjA1Ljg1NC0xLjkwMyAxLjkwMy0xLjkwMyAxLjA1IDAgMS45MDQuODU0IDEuOTA0IDEuOTAzIDAgMS4wNS0uODU0IDEuOTA0LTEuOTA0IDEuOTA0YTEuOTA2IDEuOTA2IDAgMCAxLTEuOTAzLTEuOTA0Wm0zLjgwNyAyMi4yNjZjMCAxLjA1LS44NTQgMS45MDMtMS45MDQgMS45MDNhMS45MDYgMS45MDYgMCAwIDEtMS45MDMtMS45MDNjMC0xLjA1Ljg1NC0xLjkwNCAxLjkwMy0xLjkwNCAxLjA1IDAgMS45MDQuODU0IDEuOTA0IDEuOTA0Wm0tMS45MDQtOC41NDhhMi42NTggMi42NTggMCAwIDEtMi42NTUtMi42NTUgMi42NTggMi42NTggMCAwIDEgMi42NTUtMi42NTUgMi42NTggMi42NTggMCAwIDEgMi42NTUgMi42NTUgMi42NTggMi42NTggMCAwIDEtMi42NTUgMi42NTVabTkuNTUzIDQuODY3YTEuOTA2IDEuOTA2IDAgMCAxLTEuOTA0LTEuOTAzYzAtMS4wNS44NTQtMS45MDQgMS45MDQtMS45MDQgMS4wNSAwIDEuOTAzLjg1NCAxLjkwMyAxLjkwNCAwIDEuMDUtLjg1NCAxLjkwMy0xLjkwMyAxLjkwM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29LYWZrYTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvS2liYW5hID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29LaWJhbmEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTQgMHYyOC43ODlMMjguOTM1LjAxN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMTJ2MTYuNzg5bDExLjkwNi0xMy43MzhBMjQuNzIxIDI0LjcyMSAwIDAgMCA0IDEyXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMTguNDc5IDE2LjY2NCA2LjI2OCAzMC43NTRsLTEuMDc0IDEuMjM3aDIzLjE5MmMtMS4yNTItNi4yOTItNC44ODMtMTEuNzE5LTkuOTA3LTE1LjMyN1wiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29LaWJhbmE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0t1YmVybmV0ZXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0t1YmVybmV0ZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMjZDRTVcIixcbiAgICBkOiBcIk0xNS44OS4wMDNhMi4xNCAyLjE0IDAgMCAxIDEuMDMuMjA2bDExLjEyNyA1LjMwNGEyLjExIDIuMTEgMCAwIDEgMS4xNSAxLjQyOWwyLjc1IDExLjkyMWEyLjA5IDIuMDkgMCAwIDEtLjQxMiAxLjc4M2wtNy42OTcgOS41NmMtLjQwNC41LTEuMDE2Ljc5Mi0xLjY2My43OTFMOS44MjcgMzFjLS42NDggMC0xLjI2LS4yOTItMS42NjQtLjc5M2wtNy43LTkuNTU4YTIuMTA3IDIuMTA3IDAgMCAxLS40MS0xLjc4M0wyLjc5OCA2Ljk0NWEyLjExIDIuMTEgMCAwIDEgMS4xNTEtMS40M0wxNS4wNzQuMjFjLjI1NS0uMTIyLjUzMi0uMTkyLjgxNS0uMjA2ek0xNiA0LjA2Yy0uMzY4IDAtLjY2Ny4zMy0uNjY3LjczOGwuMDAyLjAxOWMwIC4wNTUtLjAwMy4xMjItLjAwMi4xNy4wMS4yMzYuMDYuNDE2LjA5MS42MzIuMDU3LjQ2NC4xMDMuODQ5LjA3NCAxLjIwNi0uMDI4LjEzNS0uMTI3LjI1OC0uMjE2LjM0NGwtLjAxNS4yODFhOC41NjkgOC41NjkgMCAwIDAtNS41NTUgMi42NjYgOS45OCA5Ljk4IDAgMCAxLS4yNC0uMTdjLS4xMi4wMTYtLjI0LjA1My0uMzk2LS4wMzgtLjI5OC0uMi0uNTctLjQ3Ny0uODk4LS44MS0uMTUtLjE2LS4yNi0uMzEtLjQzOC0uNDY0LS4wNC0uMDM1LS4xMDMtLjA4Mi0uMTQ4LS4xMThhLjc5My43OTMgMCAwIDAtLjQ2NC0uMTc1LjY0Mi42NDIgMCAwIDAtLjUzLjIzNGMtLjIzLjI4OC0uMTU2LjcyNi4xNjMuOThsLjAxLjAwOGMuMDQ0LjAzNS4wOTguMDguMTM4LjExLjE5LjE0LjM2My4yMTIuNTUyLjMyMy4zOTguMjQ2LjcyOS40NS45OS42OTUuMTAzLjEwOC4xMi4zLjEzNC4zODNsLjIxNC4xOWE4LjU5MiA4LjU5MiAwIDAgMC0xLjM2IDUuOTk4bC0uMjc4LjA4Yy0uMDc0LjA5Ni0uMTc3LjI0NS0uMjg2LjI5LS4zNDMuMTA3LS43MjguMTQ3LTEuMTk0LjE5NS0uMjE4LjAxOC0uNDA3LjAwOC0uNjM5LjA1MS0uMDUuMDEtLjEyMi4wMjktLjE3Ny4wNDJsLS4wMDYuMDAxLS4wMS4wMDNjLS4zOTMuMDk1LS42NDUuNDU1LS41NjQuODEuMDgyLjM1NS40NjUuNTcuODYuNDg1bC4wMS0uMDAxLjAxMy0uMDA0Yy4wNTUtLjAxMi4xMjQtLjAyNi4xNzItLjAzOS4yMjgtLjA2LjM5My0uMTUuNTk3LS4yMjguNDQtLjE1OC44MDYtLjI5IDEuMTYxLS4zNDEuMTQ5LS4wMTIuMzA1LjA5MS4zODMuMTM1bC4yOS0uMDVhOC42NTQgOC42NTQgMCAwIDAgMy44NCA0Ljc4N2wtLjEyLjI5Yy4wNDMuMTEzLjA5MS4yNjUuMDU5LjM3Ni0uMTMuMzM0LS4zNS42ODgtLjYwMyAxLjA4MS0uMTIyLjE4Mi0uMjQ3LjMyNC0uMzU3LjUzMi0uMDI2LjA1LS4wNi4xMjYtLjA4Ni4xNzktLjE3LjM2NS0uMDQ1Ljc4Ni4yODQuOTQ0LjMzLjE2Ljc0MS0uMDA4LjkxOS0uMzc1bC4wMDEtLjAwMXYtLjAwMmMuMDI1LS4wNTEuMDYxLS4xMi4wODMtLjE2OS4wOTQtLjIxNS4xMjUtLjQuMTkyLS42MDkuMTc2LS40NDIuMjczLS45MDUuNTE1LTEuMTk0LjA2Ny0uMDguMTc1LS4xMS4yODctLjE0bC4xNTEtLjI3M2E4LjYxNiA4LjYxNiAwIDAgMCA2LjE0NS4wMTZsLjE0Mi4yNTZjLjExNC4wMzcuMjM5LjA1Ni4zNC4yMDYuMTgyLjMxLjMwNi42NzUuNDU3IDEuMTE4LjA2Ni4yMDguMS4zOTMuMTk0LjYxLjAyMS4wNDguMDU3LjExNy4wODIuMTcuMTc3LjM2Ny41OS41MzUuOTIuMzc2LjMzLS4xNTguNDU1LS41OC4yODQtLjk0NS0uMDI2LS4wNTItLjA2LS4xMjktLjA4Ny0uMTc5LS4xMS0uMjA4LS4yMzUtLjM0OC0uMzU3LS41My0uMjUyLS4zOTMtLjQ2MS0uNzItLjU5LTEuMDU1LS4wNTUtLjE3My4wMDktLjI4LjA1LS4zOTItLjAyNS0uMDI5LS4wNzktLjE5Mi0uMTEtLjI2OGE4LjY1NCA4LjY1NCAwIDAgMCAzLjgzOC00LjgyMmMuMDg2LjAxNC4yMzYuMDQuMjg1LjA1LjEtLjA2Ni4xOTItLjE1Mi4zNzMtLjEzOC4zNTUuMDUyLjcyLjE4MyAxLjE2LjM0MS4yMDUuMDc4LjM3LjE3LjU5OC4yMy4wNDguMDEzLjExNy4wMjUuMTcyLjAzN2wuMDEzLjAwNC4wMS4wMDJjLjM5NS4wODUuNzc4LS4xMzEuODYtLjQ4Ni4wOC0uMzU1LS4xNzEtLjcxNS0uNTY0LS44MS0uMDU3LS4wMTMtLjEzOC0uMDM1LS4xOTMtLjA0NS0uMjMyLS4wNDQtLjQyLS4wMzMtLjY0LS4wNTEtLjQ2NS0uMDQ5LS44NS0uMDg5LTEuMTkzLS4xOTYtLjE0LS4wNTQtLjIzOS0uMjItLjI4Ny0uMjg5bC0uMjctLjA3OGE4LjU3MiA4LjU3MiAwIDAgMC0uMTM5LTMuMTA0IDguNTk5IDguNTk5IDAgMCAwLTEuMjQ3LTIuODhjLjA2OC0uMDYyLjE5OS0uMTc3LjIzNi0uMjEuMDEtLjEyLjAwMS0uMjQ1LjEyNS0uMzc3LjI2Mi0uMjQ2LjU5Mi0uNDUuOTktLjY5NS4xOS0uMTEuMzY0LS4xODIuNTU0LS4zMjIuMDQzLS4wMzIuMTAxLS4wODIuMTQ2LS4xMTguMzItLjI1NS4zOTMtLjY5My4xNjQtLjk4LS4yMy0uMjg3LS42NzQtLjMxNC0uOTkzLS4wNi0uMDQ2LjAzNi0uMTA3LjA4My0uMTQ4LjExOC0uMTc5LjE1My0uMjkuMzA1LS40NC40NjQtLjMyOC4zMzMtLjYuNjExLS44OTguODEyLS4xMjkuMDc1LS4zMTguMDQ5LS40MDQuMDQ0bC0uMjUzLjE4YTguNzMyIDguNzMyIDAgMCAwLTUuNTI4LTIuNjY2IDE2LjAzNiAxNi4wMzYgMCAwIDEtLjAxNS0uMjk3Yy0uMDg3LS4wODMtLjE5Mi0uMTU0LS4yMTgtLjMzMy0uMDI5LS4zNTcuMDItLjc0Mi4wNzYtMS4yMDYuMDMtLjIxNi4wODItLjM5Ni4wOS0uNjMyLjAwMy0uMDUzIDAtLjEzIDAtLjE4OSAwLS40MDgtLjI5OS0uNzM4LS42NjctLjczOHptLS44MzQgNS4xNTYtLjE5OCAzLjQ4OC0uMDE0LjAwN2EuNTg3LjU4NyAwIDAgMS0uOTMyLjQ0OWwtLjAwNi4wMDItMi44NjQtMi4wMjdhNi44NjIgNi44NjIgMCAwIDEgNC4wMTQtMS45MTl6bTEuNjY4IDBhNi45MjIgNi45MjIgMCAwIDEgMy45OSAxLjkybC0yLjg0NiAyLjAxNS0uMDEtLjAwNGEuNTg4LjU4OCAwIDAgMS0uOTMzLS40NDhsLS4wMDMtLjAwMS0uMTk4LTMuNDgyem0tNi43MiAzLjIyMiAyLjYxNCAyLjMzNS0uMDAzLjAxNGEuNTg1LjU4NSAwIDAgMS0uMjMgMS4wMDhsLS4wMDMuMDEtMy4zNTIuOTY3YTYuODM4IDYuODM4IDAgMCAxIC45NzMtNC4zMzR6bTExLjc1My4wMDFjLjM4OC42My42ODMgMS4zMzEuODU4IDIuMDkzYTYuOTEgNi45MSAwIDAgMSAuMTQ1IDIuMjI5bC0zLjM3LS45Ny0uMDAyLS4wMTNhLjU4Ni41ODYgMCAwIDEtLjIzLTEuMDA4bC0uMDAyLS4wMDcgMi42LTIuMzI0em0tNi40MDQgMi41MTVoMS4wNzFsLjY2Ni44My0uMjM5IDEuMDM4LS45NjIuNDYxLS45NjQtLjQ2My0uMjQtMS4wMzcuNjY4LS44M3ptMy40MzUgMi44NDRhLjU4NS41ODUgMCAwIDEgLjEzNS4wMWwuMDA1LS4wMDggMy40NjguNTg2YTYuODU4IDYuODU4IDAgMCAxLTIuNzc2IDMuNDgxbC0xLjM0Ni0zLjI0Ni4wMDQtLjAwNWEuNTg2LjU4NiAwIDAgMSAuNTEtLjgxOHptLTUuODI0LjAxNGEuNTg3LjU4NyAwIDAgMSAuNTMuODE3bC4wMS4wMTItMS4zMzEgMy4yMTRhNi44ODYgNi44ODYgMCAwIDEtMi43NjctMy40NThsMy40MzctLjU4Mi4wMDYuMDA3YS41OTUuNTk1IDAgMCAxIC4xMTUtLjAxem0yLjkwNCAxLjQwN2EuNTgyLjU4MiAwIDAgMSAuMjc1LjA1OS41ODMuNTgzIDAgMCAxIC4yNjMuMjVoLjAxM2wxLjY5NCAzLjA1N2MtLjIyLjA3My0uNDQ2LjEzNi0uNjc3LjE4OWE2Ljg5NiA2Ljg5NiAwIDAgMS0zLjc1OC0uMTk0bDEuNjktMy4wNWguMDAzYS41ODguNTg4IDAgMCAxIC40OTctLjMxelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0t1YmVybmV0ZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0xvZ2dpbmcgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0xvZ2dpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0yIDEwdjEzYTkgOSAwIDAgMSA5IDloMTNjMC0xMi4xNS05Ljg1LTIyLTIyLTIyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAxMy41NjVWMzJoMTBjMC03LjcyMi0zLjk4MS0xNC41MS0xMC0xOC40MzZcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0xNCAwdjEwLjIyNkMyMS42NjYgMTQuNDY4IDI2Ljg2OSAyMi42MzYgMjYuODY5IDMySDMwVjE2YzAtOC44MzctNy4xNjMtMTYtMTYtMTZcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Mb2dnaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Mb2dzdGFzaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTG9nc3Rhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzRUJFQjBcIixcbiAgICBkOiBcIk0xOSAzMmgxMVYyMEgxOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwiTTQgMEgzdjIwaDEzdi04QzE2IDUuMzczIDEwLjYyNyAwIDQgMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAyMGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDFWMjBIM1pcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTG9nc3Rhc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb01hcHMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb01hcHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMyMkE3RjNcIixcbiAgICBkOiBcIk0yNS41IDkuNWMwIDYuNjUtOS41IDExLjQyNS05LjUgMTEuNDI1UzYuNSAxNi4xNSA2LjUgOS41QTkuNSA5LjUgMCAwIDEgMTYgMGE5LjUgOS41IDAgMCAxIDkuNSA5LjVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDIwLjkyNXM0LjMyNi0yLjE4MyA3LjE0MS01LjY0NWwtMi41MDUtMS44NzhhNy43MjUgNy43MjUgMCAwIDAtOS4yNzIgMEw4Ljg1OSAxNS4yOEMxMS42NzQgMTguNzQyIDE2IDIwLjkyNSAxNiAyMC45MjVcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIk0yNS41MyAxNy4wNzNhMjEuMTI0IDIxLjEyNCAwIDAgMS0yLjgzNCAyLjkxNmMtMi42MiAyLjIzNS01LjIzOSAzLjU2MS01LjM0OSAzLjYxNkwxNiAyNC4yODJsLTEuMzQ4LS42NzdjLS4xMDktLjA1NS0yLjcyOC0xLjM4MS01LjM0OS0zLjYxNmEyMS4xODIgMjEuMTgyIDAgMCAxLTIuODM0LTIuOTE2TDAgMjEuOTI1bDExLjM2NCA4LjUyM2E3LjcyNCA3LjcyNCAwIDAgMCA5LjI3MSAwTDMyIDIxLjkyNWwtNi40Ny00Ljg1MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29NYXBzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29NZW1jYWNoZWQgPSBmdW5jdGlvbiBFdWlJY29uTG9nb01lbWNhY2hlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19tZW1jYWNoZWQnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJyYWRpYWxHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICBjeDogXCI0MS40MDYlXCIsXG4gICAgY3k6IFwiNDIuNzA4JVwiLFxuICAgIHI6IFwiMCVcIixcbiAgICBmeDogXCI0MS40MDYlXCIsXG4gICAgZnk6IFwiNDIuNzA4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0RCN0M3Q1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M4MzczN1wiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInJhZGlhbEdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIGN4OiBcIjQ0LjI3MSVcIixcbiAgICBjeTogXCI0Mi43MDglXCIsXG4gICAgcjogXCIwJVwiLFxuICAgIGZ4OiBcIjQ0LjI3MSVcIixcbiAgICBmeTogXCI0Mi43MDglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjREI3QzdDXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzgzNzM3XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgeDE6IFwiNTAlXCIsXG4gICAgeDI6IFwiNTAlXCIsXG4gICAgeTE6IFwiMTAwJVwiLFxuICAgIHkyOiBcIjAlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNTc0QzRBXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjODA3MTZEXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgeDE6IFwiODguNzc4JVwiLFxuICAgIHgyOiBcIjMwLjE0OSVcIixcbiAgICB5MTogXCI5OC4zNDIlXCIsXG4gICAgeTI6IFwiLTguNjglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMjY4RDgzXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMkVBMTlFXCJcbiAgfSkpKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTAgMjEuNTY3VjEwLjM1MkMwIDEuMjk0IDEuMjkzIDAgMTAuMzQyIDBoMTEuMjM2YzkuMDQ5IDAgMTAuMzQxIDEuMjk0IDEwLjM0MSAxMC4zNTJ2MTEuMjE1YzAgOS4wNTktMS4yOTIgMTAuMzUyLTEwLjM0MSAxMC4zNTJIMTAuMzQyQzEuMjkyIDMxLjkyIDAgMzAuNjI2IDAgMjEuNTY3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk02Ljg4OSA2LjAxNkM1LjMyIDE1Ljk2IDYuMTQgMjUuMjcgNi4xNCAyNS4yN2g0LjkwNGMtLjQ2Ni0yLjQ4My0yLjE0LTEzLjgyNC0uNzQ4LTEzLjg2MS43NDYuMTE4IDQuMTU2IDkuNjIxIDQuMTU2IDkuNjIxcy43NTEtLjA5MyAxLjUwNy0uMDkzYy43NTUgMCAxLjUwNi4wOTMgMS41MDYuMDkzczMuNDEtOS41MDMgNC4xNTctOS42MjFjMS4zOTIuMDM3LS4yODIgMTEuMzc4LS43NDggMTMuODZoNC45MDRzLjgyLTkuMzEtLjc0OC0xOS4yNTNoLTQuNTRjLS44NjUuMDEtNC4xNTMgNS43NzctNC41MzEgNS43NzctLjM3OCAwLTMuNjY2LTUuNzY3LTQuNTMtNS43NzdINi44ODlaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTE0Ljk5MyAyNC4xMDlhMS4xNiAxLjE2IDAgMSAxLTIuMzIyIDAgMS4xNiAxLjE2IDAgMCAxIDIuMzIyIDBaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTE5LjI0OSAyNC4xMDlhMS4xNiAxLjE2IDAgMSAxLTIuMzIyIDAgMS4xNiAxLjE2IDAgMCAxIDIuMzIyIDBaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0yNC44IDYuMzQ1Yy43MDcgNC43OS44NzMgOS4zODguODYgMTIuODEzLS4wMTMgMy41MDMtLjIxNCA1Ljc4LS4yMTQgNS43OGgtNC4xMjhsLS40NDMuMzMyaDQuOTA0cy44Mi05LjMxLS43NDgtMTkuMjU0bC0uMjMyLjMyOVptLTEyLjk5Ni0uMTIxYzEuMjg4IDEuNDMzIDMuNTE2IDUuMjM3IDMuODIzIDUuMjM3LS44MTctMS4wNDUtMi44MjMtNC4zNzgtMy44MjMtNS4yMzdabS0xLjg0IDQuODUyYy0xLjM5Mi4wMzguMjgyIDExLjM3OS43NDkgMTMuODYxSDYuNDNsLS4yOS4zMzNoNC45MDRjLS40NjQtMi40Ny0yLjEyMy0xMy43MS0uNzY5LTEzLjg2MS0uMTI2LS4xOS0uMjM1LS4zMi0uMzExLS4zMzNabTExLjMyNiAwYy0uNzQ2LjExOS00LjE1NiA5LjYyMi00LjE1NiA5LjYyMnMtLjc1MS0uMDk0LTEuNTA3LS4wOTRjLS40NDcgMC0uODMyLjAyOC0xLjA5Mi4wNTJsLS4wODIuMzc0cy43NTEtLjA5MyAxLjUwNy0uMDkzYy43NTUgMCAxLjUwNi4wOTMgMS41MDYuMDkzczMuMzg1LTkuNDQgNC4xNDYtOS42MjFjLS4wODItLjIwOC0uMTgzLS4zMy0uMzIyLS4zMzNaXCIsXG4gICAgb3BhY2l0eTogMC4xXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNNi44ODkgNi4wMTZDNS4zMiAxNS45NiA2LjE0IDI1LjI3IDYuMTQgMjUuMjdsLjI4OS0uMzI1Yy0uMTQ4LTIuMTk3LS41NDMtMTAuMTQuNzkxLTE4LjU5N2g0LjU0MWMuMDk2LjAwMi4yMjUuMDguMzc0LjIwOC0uMjk3LS4zMy0uNTQ0LS41MzgtLjcwNi0uNTRINi44ODlabTEzLjYwMSAwYy0uODY0LjAxLTQuMTUyIDUuNzc3LTQuNTMgNS43NzcuMTU0LjE5Ny4yNzkuMzMzLjMzMi4zMzMuMzc4IDAgMy42NjYtNS43NjcgNC41My01Ljc3N2g0LjAwOGwuMi0uMzMzaC00LjU0Wm0tOS44ODEgNS43MjVjMS4xMDMgMS42NTcgMy44NDQgOS4yOSAzLjg0NCA5LjI5bC4wOC0uMzczYy0uNjc2LTEuODU2LTMuMjU2LTguODE0LTMuOTAzLTguOTE3aC0uMDIxWm0xMS4zNDYgMGMuNzQgMS44ODctLjY2IDExLjI5NS0xLjA4IDEzLjUyOWwuNDQ0LS4zNDhjLjU2OC0zLjMzMSAxLjkzNi0xMy4xNDYuNjM2LTEzLjE4WlwiLFxuICAgIG9wYWNpdHk6IDAuM1xuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTWVtY2FjaGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29NZXRyaWNzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29NZXRyaWNzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk0yIDMyaDI4VjIwbC02LjQ2NS02LjQ2NWE1IDUgMCAwIDAtNy4wNyAwTDIgMjh2NFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTE2LjQ2NSAxMy41MzUtMy41MzYgMy41MzZhOS45NjUgOS45NjUgMCAwIDAgNy4wNyAyLjkzIDkuOTY1IDkuOTY1IDAgMCAwIDcuMDcyLTIuOTNsLTMuNTM2LTMuNTM2YTUgNSAwIDAgMC03LjA3IDBcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIk0xNC4zNDMgMTEuNDE0QTcuOTUxIDcuOTUxIDAgMCAxIDIwIDkuMDcxYzIuMTM3IDAgNC4xNDYuODMyIDUuNjU3IDIuMzQzbDMuMjA3IDMuMjA3QTkuOTU1IDkuOTU1IDAgMCAwIDMwIDEwLjAwMWMwLTUuNTI0LTQuNDc3LTEwLTEwLTEwLTUuNTIyIDAtMTAgNC40NzYtMTAgMTAgMCAxLjY2Ny40MTQgMy4yMzcgMS4xMzcgNC42MmwzLjIwNi0zLjIwN1pcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTWV0cmljczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvTW9uZ29kYiA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTW9uZ29kYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIm0xNi44NDQgMzEuODQ3LS44NDctLjI5cy4xMDQtNC4zMTUtMS40NDUtNC42MjVjLTEuMDMyLTEuMTk4LjE2NS01MC44IDMuODgyLS4xNjUgMCAwLTEuMjguNjQtMS41MDcgMS43MzUtLjI0OCAxLjA3NC0uMDgzIDMuMzQ1LS4wODMgMy4zNDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBNkEzODVcIixcbiAgICBkOiBcIm0xNi44NDQgMzEuODQ3LS44NDctLjI5cy4xMDQtNC4zMTUtMS40NDUtNC42MjVjLTEuMDMyLTEuMTk4LjE2NS01MC44IDMuODgyLS4xNjUgMCAwLTEuMjguNjQtMS41MDcgMS43MzUtLjI0OCAxLjA3NC0uMDgzIDMuMzQ1LS4wODMgMy4zNDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xNy4yOTkgMjcuNjc2czcuNDEzLTQuODc0IDUuNjc4LTE1LjAxM2MtMS42NzItNy4zNzItNS42MTYtOS43ODgtNi4wNS0xMC43MTgtLjQ3NS0uNjYtLjkzLTEuODE3LS45My0xLjgxN2wuMzEgMjAuNTA2YzAgLjAyLS42NCA2LjI3OC45OTIgNy4wNDJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzQ5OUQ0QVwiLFxuICAgIGQ6IFwiTTE3LjI5OSAyNy42NzZzNy40MTMtNC44NzQgNS42NzgtMTUuMDEzYy0xLjY3Mi03LjM3Mi01LjYxNi05Ljc4OC02LjA1LTEwLjcxOC0uNDc1LS42Ni0uOTMtMS44MTctLjkzLTEuODE3bC4zMSAyMC41MDZjMCAuMDItLjY0IDYuMjc4Ljk5MiA3LjA0MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTUuNTY0IDI3Ljk0NHMtNi45Ni00Ljc1LTYuNTQ2LTEzLjExM2MuMzkyLTguMzYzIDUuMzA3LTEyLjQ3MyA2LjI1Ny0xMy4yMTYuNjItLjY2LjY0LS45MDkuNjgxLTEuNTcuNDM0LjkzLjM1MSAxMy44OTguNDEzIDE1LjQyNi4xODYgNS44ODYtLjMzIDExLjM1OC0uODA1IDEyLjQ3M1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzU4QUE1MFwiLFxuICAgIGQ6IFwiTTE1LjU2NCAyNy45NDRzLTYuOTYtNC43NS02LjU0Ni0xMy4xMTNjLjM5Mi04LjM2MyA1LjMwNy0xMi40NzMgNi4yNTctMTMuMjE2LjYyLS42Ni42NC0uOTA5LjY4MS0xLjU3LjQzNC45My4zNTEgMTMuODk4LjQxMyAxNS40MjYuMTg2IDUuODg2LS4zMyAxMS4zNTgtLjgwNSAxMi40NzNaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01vbmdvZGI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb015c3FsID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29NeXNxbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwiIzAwNTQ2QlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOS40NTYgMjQuMjc2Yy0xLjc0LS4wNDMtMy4wODguMTMxLTQuMjE5LjYxLS4zMjYuMTMtLjg0OC4xMy0uODkyLjU0My4xNzQuMTc0LjE5Ni40NTcuMzQ4LjY5Ni4yNjEuNDM1LjcxOCAxLjAyMiAxLjEzMSAxLjMyNy40NTcuMzQ4LjkxNC42OTYgMS4zOTIgMSAuODQ4LjUyMiAxLjgwNS44MjcgMi42MzEgMS4zNDkuNDguMzA0Ljk1Ny42OTUgMS40MzYgMS4wMjIuMjQuMTczLjM5MS40NTYuNjk2LjU2NXYtLjA2NWMtLjE1My0uMTk2LS4xOTYtLjQ3OS0uMzQ4LS42OTYtLjIxOC0uMjE4LS40MzUtLjQxMy0uNjUzLS42M2ExMC4zMTYgMTAuMzE2IDAgMCAwLTIuMjYxLTIuMTk3Yy0uNjk2LS40NzktMi4yMTktMS4xMzEtMi41MDEtMS45MzZsLS4wNDQtLjA0M2MuNDc5LS4wNDQgMS4wNDQtLjIxOCAxLjUtLjM0OC43NC0uMTk2IDEuNDE0LS4xNTMgMi4xNzUtLjM0OC4zNDgtLjA4Ny42OTYtLjE5NiAxLjA0NC0uMzA1di0uMTk1Yy0uMzkxLS4zOTItLjY3NC0uOTE0LTEuMDg3LTEuMjg0LTEuMTEtLjk1Ny0yLjMyNy0xLjg5Mi0zLjU4OC0yLjY3NC0uNjc1LS40MzUtMS41NDUtLjcxOC0yLjI2Mi0xLjA4OC0uMjYxLS4xMy0uNjk2LS4xOTYtLjg0OC0uNDEzLS4zOTItLjQ3OS0uNjEtMS4xMS0uODkyLTEuNjc1YTU0LjkyMiA1NC45MjIgMCAwIDEtMS43ODMtMy43ODRjLS4zOTItLjg0OC0uNjMtMS42OTYtMS4xMS0yLjQ3OS0yLjI0LTMuNjk3LTQuNjc1LTUuOTM3LTguNDE2LTguMTM0LS44MDQtLjQ1Ni0xLjc2MS0uNjUyLTIuNzgzLS44OTEtLjU0NC0uMDIyLTEuMDg4LS4wNjUtMS42MzEtLjA4Ny0uMzQ4LS4xNTItLjY5Ni0uNTY2LTEtLjc2MS0xLjI0LS43ODMtNC40MzctMi40OC01LjM1LS4yNC0uNTg4IDEuNDE0Ljg3IDIuODA2IDEuMzcgMy41MjQuMzcuNS44NDggMS4wNjUgMS4xMDkgMS42My4xNTIuMzcuMTk1Ljc2Mi4zNDcgMS4xNTMuMzQ4Ljk1Ny42NzUgMi4wMjMgMS4xMzEgMi45MTQuMjQuNDU3LjUuOTM2LjgwNSAxLjM0OS4xNzQuMjM5LjQ3OC4zNDguNTQ0Ljc0LS4zMDUuNDM0LS4zMjcgMS4wODctLjUgMS42My0uNzgzIDIuNDU4LS40NzkgNS41MDIuNjMgNy4zMDcuMzQ4LjU0NCAxLjE3NSAxLjc0IDIuMjg0IDEuMjg0Ljk3OC0uMzkyLjc2LTEuNjMyIDEuMDQzLTIuNzE5LjA2Ni0uMjYxLjAyMi0uNDM1LjE1My0uNjA5di4wNDRjLjMwNC42MDkuNjA5IDEuMTk2Ljg5MSAxLjgwNS42NzUgMS4wNjUgMS44NDkgMi4xNzQgMi44MjggMi45MTQuNTIyLjM5MS45MzUgMS4wNjUgMS41ODcgMS4zMDV2LS4wNjZoLS4wNDNjLS4xMy0uMTk1LS4zMjctLjI4Mi0uNS0uNDM1LS4zOTItLjM5LS44MjctLjg3LTEuMTMxLTEuMzA0LS45MTQtMS4yMTgtMS43MTktMi41NjctMi40MzYtMy45NTgtLjM0OC0uNjc1LS42NTMtMS40MTQtLjkzNS0yLjA4OC0uMTMtLjI2MS0uMTMtLjY1My0uMzQ4LS43ODMtLjMyNy40NzgtLjgwNS44OTItMS4wNDQgMS40NzktLjQxMy45MzUtLjQ1NyAyLjA4OC0uNjEgMy4yODQtLjA4Ni4wMjEtLjA0MyAwLS4wODYuMDQzLS42OTYtLjE3NC0uOTM1LS44OTEtMS4xOTYtMS41LS42NTMtMS41NDUtLjc2MS00LjAyNC0uMTk2LTUuODA3LjE1Mi0uNDU3LjgwNS0xLjg5Mi41NDQtMi4zMjctLjEzLS40MTMtLjU2Ni0uNjUyLS44MDUtLjk3OWE4Ljc2NCA4Ljc2NCAwIDAgMS0uNzgzLTEuMzkyYy0uNTIyLTEuMjE3LS43ODMtMi41NjYtMS4zNDgtMy43ODQtLjI2MS0uNTY1LS43MTgtMS4xNTItMS4wODctMS42NzQtLjQxNC0uNTg3LS44Ny0xLTEuMTk3LTEuNjk3LS4xMDgtLjIzOS0uMjYtLjYzLS4wODctLjg5MS4wNDQtLjE3NC4xMy0uMjQuMzA1LS4yODMuMjgzLS4yNCAxLjA4Ny4wNjUgMS4zNy4xOTYuODA1LjMyNiAxLjQ3OS42MyAyLjE1MyAxLjA4Ny4zMDQuMjE4LjYzLjYzMSAxLjAyMi43NGguNDU3Yy42OTYuMTUyIDEuNDc5LjA0MyAyLjEzMS4yMzkgMS4xNTMuMzcgMi4xOTYuOTEzIDMuMTMyIDEuNWExOS4yOTQgMTkuMjk0IDAgMCAxIDYuNzg1IDcuNDM4Yy4yNjEuNS4zNy45NTcuNjA5IDEuNDc5LjQ1NyAxLjA2NiAxLjAyMiAyLjE1MyAxLjQ3OSAzLjE5Ny40NTYgMS4wMjIuODkxIDIuMDY2IDEuNTQ0IDIuOTE0LjMyNi40NTcgMS42My42OTYgMi4yMTguOTM1LjQzNS4xOTYgMS4xMS4zNyAxLjUuNjEuNzQuNDU2IDEuNDguOTc4IDIuMTc1IDEuNDc4LjM0OC4yNiAxLjQzNi44MDUgMS41MDEgMS4yNFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMjczIDUuMzc4Yy0uMzcgMC0uNjMuMDQzLS44OTEuMTA5di4wNDNoLjA0M2MuMTc0LjM0OC40NzkuNTg3LjY5Ni44OTIuMTc0LjM0OC4zMjYuNjk2LjUgMS4wNDRsLjA0NC0uMDQ0Yy4zMDQtLjIxNy40NTctLjU2NS40NTctMS4wODctLjEzMS0uMTUyLS4xNTMtLjMwNS0uMjYxLS40NTctLjEzLS4yMTgtLjQxNC0uMzI2LS41ODgtLjVaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb015c3FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29OZ2lueCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTmdpbngoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzExOTYzOVwiLFxuICAgIGQ6IFwibTE2IDAgMTMuODU2IDh2MTZMMTYgMzIgMi4xNDQgMjRWOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0xMS4xNyAxMy41MTJ2OC4zNzZhMS42MDcgMS42MDcgMCAxIDEtMy4yMTUgMFY5LjYzMmMwLTEuNDMyIDEuNzMxLTIuMTQ5IDIuNzQ0LTEuMTM2bDkuNTEgOS41MTJWOS42MzJhMS42MDcgMS42MDcgMCAwIDEgMy4yMTUgMHYxMi4yNTZjMCAxLjQzMi0xLjczMSAyLjE0OS0yLjc0NCAxLjEzNmwtOS41MS05LjUxMlpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTmdpbng7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb09ic2VydmFiaWxpdHkgPSBmdW5jdGlvbiBFdWlJY29uTG9nb09ic2VydmFiaWxpdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk0xMCAzMkg3LjIzOEMzLjc5MyAzMiAxIDI4Ljg2NSAxIDI0Ljk5OFYxNWg5djE3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMzJoOVY4aC05elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzA3Q1wiLFxuICAgIGQ6IFwiTTMxIDMyaC05VjBsMS45NzMuMDI0QzI3Ljg2Ni4wNzIgMzEgMy43MzEgMzEgOC4yMjhWMzJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvT3NxdWVyeSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvT3NxdWVyeShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBNTk2RkZcIixcbiAgICBkOiBcIk0zMS45MDcuMDMydjcuOTY5bC03Ljk1MiA3Ljk1MVY3Ljk2N0wzMS45MDcuMDMyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0xNi4wMDMuMDMydjcuOTY5bDcuOTUyIDcuOTUxVjcuOTY3TDE2LjAwMy4wMzJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTTMxLjkyMyAzMS44NTVoLTcuOTY4bC03Ljk1Mi03Ljk1MWg3Ljk4NWw3LjkzNSA3Ljk1MVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzMzXCIsXG4gICAgZDogXCJNMzEuOTIzIDE1Ljk1MmgtNy45NjhsLTcuOTUyIDcuOTUyaDcuOTg1bDcuOTM1LTcuOTUyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBNTk2RkZcIixcbiAgICBkOiBcIk0uMSAzMS44NzJ2LTcuOTY4bDcuOTUyLTcuOTUydjcuOTg1TC4xIDMxLjg3MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzMzXCIsXG4gICAgZDogXCJNMTYuMDA0IDMxLjg3MnYtNy45NjhsLTcuOTUyLTcuOTUydjcuOTg1bDcuOTUyIDcuOTM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBNTk2RkZcIixcbiAgICBkOiBcIk0uMDg0LjA0OGg3Ljk2OEwxNi4wMDQgOEg4LjAxOUwuMDg0LjA0OFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzMzXCIsXG4gICAgZDogXCJNLjA4NCAxNS45NTJoNy45NjhMMTYuMDA0IDhIOC4wMTlMLjA4NCAxNS45NTJcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvT3NxdWVyeTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvUGhwID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29QaHAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fcGhwJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHhtbG5zWGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICBkOiBcIk0uMDI4IDcuODU0Qy4wMjggMy41MzQgNi42ODguMDMgMTQuOTAyLjAzczE0Ljg3NCAzLjUwMyAxNC44NzQgNy44MjRjMCA0LjMyMi02LjY2IDcuODI1LTE0Ljg3NCA3LjgyNS04LjIxNSAwLTE0Ljg3NC0zLjUwMy0xNC44NzQtNy44MjVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgZDogXCJNMCAxNy40M2gzMC45ODdWMEgwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2YnKSxcbiAgICBkOiBcIk0wIDE3LjQzaDMwLjk4N1YwSDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJyYWRpYWxHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICBjeDogXCIzMC4wMiVcIixcbiAgICBjeTogXCI4Mi40MjIlXCIsXG4gICAgcjogXCIxMjQuODE0JVwiLFxuICAgIGZ4OiBcIjMwLjAyJVwiLFxuICAgIGZ5OiBcIjgyLjQyMiVcIixcbiAgICBncmFkaWVudFRyYW5zZm9ybTogXCJtYXRyaXgoLjUyNjA0IDAgMCAxIC4xNDIgMClcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNBRUIyRDVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0FFQjJENVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNDg0Qzg5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNDg0Qzg5XCJcbiAgfSkpKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICB0cmFuc2Zvcm06IFwibWF0cml4KDEgMCAwIC0xIC4wMjYgMjUuNDEzKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC41OTIgLjg2KVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdjJyksIFwiKVwiKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNLjAyOCA3Ljg1NEMuMDI4IDMuNTM0IDYuNjg4LjAzIDE0LjkwMi4wM3MxNC44NzQgMy41MDMgMTQuODc0IDcuODI0YzAgNC4zMjItNi42NiA3LjgyNS0xNC44NzQgNy44MjUtOC4yMTUgMC0xNC44NzQtMy41MDMtMTQuODc0LTcuODI1XCJcbiAgfSkpKSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdlJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2UnKSwgXCIpXCIpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM3NzdCQjNcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMTUuNDk0IDEuNDcyYzcuODk0IDAgMTQuMjkzIDMuMjQzIDE0LjI5MyA3LjI0M3MtNi40IDcuMjQ0LTE0LjI5MyA3LjI0NGMtNy44OTQgMC0xNC4yOTMtMy4yNDMtMTQuMjkzLTcuMjQ0IDAtNCA2LjQtNy4yNDMgMTQuMjkzLTcuMjQzXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2cnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdmJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2cnKSwgXCIpXCIpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk04LjcwMSA3LjgxN2MuNjUgMCAxLjEzNC4xMiAxLjQ0LjM1Ni4zMDQuMjMzLjUxMy42MzguNjIzIDEuMjAyLjEwMy41MjguMDY0Ljg5Ni0uMTE2IDEuMDk1LS4xODMuMjAzLS41OC4zMDYtMS4xNzcuMzA2SDguNDMzbC0uNTc1LTIuOTU5aC44NDNaTTUuMzEgNC4xNzJhLjE2MS4xNjEgMCAwIDAtLjE1OS4xOTNsMS41MjQgNy44NGMuMDE1LjA3Ni4wODIuMTMxLjE1OS4xMzFoMy4yODRjMS4wMzMgMCAxLjgwMS0uMjggMi4yODQtLjgzMy40ODUtLjU1Ni42MzUtMS4zMzMuNDQ2LTIuMzA5YTMuNjg2IDMuNjg2IDAgMCAwLS4zOTUtMS4wOTggMy42NzYgMy42NzYgMCAwIDAtLjcyNy0uOTEgMy4xODkgMy4xODkgMCAwIDAtMS4xOTctLjcxOGMtLjQzLS4xNC0uOTgzLS4yMS0xLjY0My0uMjFoLTEuMzNsLS4zOC0xLjk1NWEuMTYxLjE2MSAwIDAgMC0uMTU4LS4xM0g1LjMwOVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTguNTY2IDEwLjYxNWguOTA1Yy43MjIgMCAuOTcyLS4xNTggMS4wNTgtLjI1My4xNDEtLjE1Ny4xNjgtLjQ4Ny4wNzctLjk1Ni0uMTAyLS41MjQtLjI5MS0uODk2LS41NjMtMS4xMDUtLjI3Ny0uMjE0LS43MjktLjMyMi0xLjM0MS0uMzIyaC0uNjQ4bC41MTIgMi42MzZabTEuNTUxIDEuODgzSDYuODMzYS4zMjMuMzIzIDAgMCAxLS4zMTctLjI2MUw0Ljk5MiA0LjM5NmEuMzIzLjMyMyAwIDAgMSAuMzE3LS4zODVoMS43MDhjLjE1NSAwIC4yODcuMTEuMzE3LjI2MmwuMzU0IDEuODIzaDEuMTk3Yy42NzcgMCAxLjI0Ny4wNzQgMS42OTQuMjIuNDYuMTQ5Ljg4Mi40MDIgMS4yNTYuNzUyLjMxLjI4NC41NjQuNjA0Ljc1OC45NS4xOTMuMzQ1LjMzMS43MzEuNDEyIDEuMTQ2LjIgMS4wMjcuMDM4IDEuODUtLjQ4MiAyLjQ0Ni0uNTE1LjU5LTEuMzI1Ljg4OC0yLjQwNi44ODhaTTcuNjYzIDcuNjU2aDEuMDM5Yy42ODggMCAxLjIwMS4xMyAxLjUzOC4zOS4zMzcuMjU5LjU2NS42OTIuNjgzIDEuMjk5LjExMy41ODMuMDYxLjk5NC0uMTU1IDEuMjMzLS4yMTYuMjQtLjY0OC4zNi0xLjI5Ny4zNkg4LjNsLS42MzgtMy4yODJabTIuNDU0IDQuNTJjLjk4OSAwIDEuNzEtLjI2IDIuMTYyLS43NzkuNDUzLS41MTguNTktMS4yNDIuNDEtMi4xNzJhMy41MSAzLjUxIDAgMCAwLS4zNzgtMS4wNSAzLjUwMiAzLjUwMiAwIDAgMC0uNjk1LS44NyAzLjAxNyAzLjAxNyAwIDAgMC0xLjEzNy0uNjgzYy0uNDE3LS4xMzUtLjk0OC0uMjAzLTEuNTk0LS4yMDNINy40MjJsLS40MDUtMi4wODVINS4zMDlsMS41MjQgNy44NDFoMy4yODRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0xNi43NjMgNi4yNTdhLjE2MS4xNjEgMCAwIDAtLjE1OS4xOTJsLjY3NCAzLjQ3Yy4wNjQuMzMuMDQ5LjU2Ni0uMDQ0LjY2Ni0uMDU3LjA2MS0uMjI4LjE2NC0uNzMyLjE2NEgxNS4yOGwtLjg0Ny00LjM2MWEuMTYxLjE2MSAwIDAgMC0uMTU5LS4xMzFIMTIuNThhLjE2MS4xNjEgMCAwIDAtLjE1OS4xOTJsMS41MjQgNy44NDFjLjAxNS4wNzYuMDgyLjEzLjE1OS4xM2gxLjY5NGEuMTYxLjE2MSAwIDAgMCAuMTU5LS4xOTFsLS4zNjgtMS44OTNoMS4zMTRjMSAwIDEuNjgtLjE3NiAyLjA3NS0uNTQuNDAzLS4zNy41MjktLjk2Mi4zNzQtMS43NmwtLjcxLTMuNjQ4YS4xNjEuMTYxIDAgMCAwLS4xNTgtLjEzMWgtMS43MjFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xNS43OTkgMTQuNTgyaC0xLjY5NWEuMzIzLjMyMyAwIDAgMS0uMzE3LS4yNjFMMTIuMjYzIDYuNDhhLjMyMy4zMjMgMCAwIDEgLjMxNy0uMzg1aDEuNjk1Yy4xNTQgMCAuMjg3LjExLjMxNy4yNjJsLjgyMiA0LjIzaDEuMDg4Yy41MDQgMCAuNjEtLjEwNy42MTQtLjExMi4wMy0uMDMzLjA3LS4xODUuMDA0LS41MjZsLS42NzQtMy40N2EuMzIzLjMyMyAwIDAgMSAuMzE3LS4zODRoMS43MjFjLjE1NSAwIC4yODguMTEuMzE3LjI2MmwuNzEgMy42NDhjLjE2Ni44NTcuMDIzIDEuNS0uNDI0IDEuOTEtLjQyNi4zOTItMS4xNC41ODItMi4xODQuNTgyaC0xLjExOGwuMzMgMS43YS4zMjMuMzIzIDAgMCAxLS4zMTYuMzg1bTAtLjMyMy0uNDA2LTIuMDg0aDEuNTFjLjk1IDAgMS42MDUtLjE2NiAxLjk2Ni0uNDk3LjM2LS4zMzIuNDY4LS44NjkuMzI0LTEuNjExbC0uNzA5LTMuNjQ5aC0xLjcyMWwuNjc0IDMuNDdjLjA3Ny4zOTQuMDQ4LjY2My0uMDg1LjgwNy0uMTMzLjE0My0uNDE2LjIxNS0uODUuMjE1aC0xLjM1NGwtLjg3My00LjQ5MkgxMi41OGwxLjUyNCA3Ljg0MWgxLjY5NVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNMjIuMDMzIDcuODE3Yy42NSAwIDEuMTM0LjEyIDEuNDQuMzU2LjMwNC4yMzMuNTEzLjYzOC42MjMgMS4yMDIuMTAzLjUyOC4wNjQuODk2LS4xMTYgMS4wOTUtLjE4My4yMDMtLjU4LjMwNi0xLjE3Ny4zMDZoLTEuMDM4bC0uNTc1LTIuOTU5aC44NDNabS0zLjM5Mi0zLjY0NWEuMTYxLjE2MSAwIDAgMC0uMTU5LjE5M2wxLjUyNCA3Ljg0Yy4wMTUuMDc2LjA4Mi4xMzEuMTU5LjEzMWgzLjI4NGMxLjAzMyAwIDEuODAxLS4yOCAyLjI4NC0uODMzLjQ4NS0uNTU2LjYzNS0xLjMzMy40NDYtMi4zMDlhMy42ODkgMy42ODkgMCAwIDAtLjM5NS0xLjA5OCAzLjY3NiAzLjY3NiAwIDAgMC0uNzI3LS45MSAzLjE4OSAzLjE4OSAwIDAgMC0xLjE5Ny0uNzE4Yy0uNDMtLjE0LS45ODMtLjIxLTEuNjQzLS4yMWgtMS4zM2wtLjM4LTEuOTU1YS4xNjEuMTYxIDAgMCAwLS4xNTgtLjEzSDE4LjY0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMjEuODk4IDEwLjYxNWguOTA1Yy43MjIgMCAuOTcyLS4xNTggMS4wNTgtLjI1My4xNDEtLjE1Ny4xNjgtLjQ4Ny4wNzctLjk1Ni0uMTAyLS41MjQtLjI5Mi0uODk2LS41NjMtMS4xMDUtLjI3Ny0uMjE0LS43MjktLjMyMi0xLjM0MS0uMzIyaC0uNjQ4bC41MTIgMi42MzZabTEuNTUxIDEuODgzaC0zLjI4NGEuMzIzLjMyMyAwIDAgMS0uMzE3LS4yNjFsLTEuNTI0LTcuODQxYS4zMjMuMzIzIDAgMCAxIC4zMTctLjM4NWgxLjcwOGMuMTU1IDAgLjI4Ny4xMS4zMTcuMjYybC4zNTQgMS44MjNoMS4xOTdjLjY3NyAwIDEuMjQ3LjA3NCAxLjY5NC4yMi40Ni4xNDkuODgyLjQwMiAxLjI1Ni43NTIuMzEuMjg0LjU2NC42MDQuNzU4Ljk1LjE5My4zNDUuMzMxLjczMS40MTIgMS4xNDYuMiAxLjAyNy4wMzggMS44NS0uNDgyIDIuNDQ2LS41MTUuNTktMS4zMjUuODg4LTIuNDA2Ljg4OFptLTIuNDU0LTQuODQyaDEuMDM5Yy42ODggMCAxLjIwMS4xMyAxLjUzOC4zOS4zMzcuMjU5LjU2NS42OTIuNjgzIDEuMjk5LjExMy41ODMuMDYxLjk5NC0uMTU1IDEuMjMzLS4yMTYuMjQtLjY0OC4zNi0xLjI5Ny4zNmgtMS4xN2wtLjYzOC0zLjI4MlptMi40NTQgNC41MmMuOTg5IDAgMS43MS0uMjYgMi4xNjItLjc3OS40NTQtLjUxOC41OS0xLjI0Mi40MS0yLjE3MmEzLjUxIDMuNTEgMCAwIDAtLjM3OC0xLjA1IDMuNTAyIDMuNTAyIDAgMCAwLS42OTUtLjg3IDMuMDE3IDMuMDE3IDAgMCAwLTEuMTM3LS42ODNjLS40MTctLjEzNS0uOTQ4LS4yMDMtMS41OTQtLjIwM2gtMS40NjNsLS40MDUtMi4wODVoLTEuNzA4bDEuNTI0IDcuODQxaDMuMjg0WlwiXG4gIH0pKSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUGhwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Qb3N0Z3JlcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvUG9zdGdyZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNMzEuODc2IDE5LjE2MmMtLjE5Mi0uNTY0LS42OTUtLjk1Ni0xLjM0NS0xLjA1LS4zMDYtLjA0NS0uNjU3LS4wMjYtMS4wNzIuMDU3LS43MjQuMTQ1LTEuMjYxLjItMS42NTQuMjExIDEuNDgtMi40MjIgMi42ODMtNS4xODUgMy4zNzYtNy43ODUgMS4xMi00LjIwNS41MjEtNi4xMi0uMTc4LTYuOTg3LTEuODUtMi4yOTMtNC41NTEtMy41MjUtNy44MDktMy41NjNhMTQuMjM5IDE0LjIzOSAwIDAgMC00LjA2LjU1MSAxNS41NzMgMTUuNTczIDAgMCAwLTIuMzczLS4yMWMtMS41NjctLjAyNC0yLjk1Mi4zMDctNC4xMzUuOTg4YTE5LjMzNCAxOS4zMzQgMCAwIDAtMi45Mi0uNzExQzYuODUuMjA4IDQuNTQ5LjU2MyAyLjg2NiAxLjcxNi44MjggMy4xMTItLjExNyA1LjUzNy4wNTggOC45MjYuMTEzIDEwIC43MzQgMTMuMjczIDEuNzEgMTYuMzc2Yy41NjEgMS43ODQgMS4xNiAzLjI2NiAxLjc4IDQuNDA0Ljg3OCAxLjYxNCAxLjgxOCAyLjU2NCAyLjg3MyAyLjkwNi41OTEuMTkgMS42NjYuMzI1IDIuNzk2LS41ODguMTQzLjE2OC4zMzQuMzM1LjU4OC40OS4zMjIuMTk4LjcxNi4zNTkgMS4xMDkuNDU0IDEuNDE4LjM0NCAyLjc0NS4yNTggMy44NzgtLjIyNC4wMDcuMTk1LjAxMy4zODIuMDE3LjU0My4wMDguMjYyLjAxNS41MTguMDI1Ljc1OC4wNjcgMS42Mi4xODEgMi44ODEuNTE4IDMuNzYzbC4wNy4yMDFjLjE2OC41LjQ0OSAxLjMzNSAxLjE2NCAxLjk5Ljc0LjY3NyAxLjYzNy44ODUgMi40NTcuODg1LjQxMiAwIC44MDQtLjA1MiAxLjE0OS0uMTI0IDEuMjI3LS4yNTUgMi42MjEtLjY0MyAzLjYzLTIuMDM2Ljk1My0xLjMxNiAxLjQxNy0zLjI5OSAxLjUtNi40MjNsLjAzMS0uMjUzLjAyLS4xNjUuMjI1LjAxOS4wNTguMDA0YzEuMjUuMDU1IDIuNzc5LS4yMDIgMy43MTgtLjYyNS43NDEtLjMzNCAzLjExOS0xLjU1IDIuNTU5LTMuMTk0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzY3OTFcIixcbiAgICBkOiBcIk0yOS43MzggMTkuNDgxYy0zLjcxNy43NDQtMy45NzMtLjQ3Ni0zLjk3My0uNDc2IDMuOTI1LTUuNjQ4IDUuNTY2LTEyLjgxNyA0LjE1LTE0LjU3MUMyNi4wNTItLjM1MiAxOS4zNjUgMS45MSAxOS4yNTQgMS45N2wtLjAzNi4wMDZhMTMuNjU3IDEzLjY1NyAwIDAgMC0yLjQ4LS4yNWMtMS42ODItLjAyNy0yLjk1OC40MjctMy45MjcgMS4xNCAwIDAtMTEuOTI4LTQuNzY2LTExLjM3NCA1Ljk5Mi4xMTggMi4yODkgMy4zODMgMTcuMzE4IDcuMjc4IDEyLjc3OWE3MC40NDMgNzAuNDQzIDAgMCAxIDIuNzk4LTMuMDY0Yy42ODMuNDQgMS41MDEuNjY1IDIuMzU4LjU4NGwuMDY3LS4wNTVjLS4wMi4yMDYtLjAxMS40MDguMDI3LjY0Ny0xLjAwNCAxLjA4Ny0uNzA5IDEuMjc3LTIuNzE0IDEuNjc4LTIuMDMuNDA1LS44MzcgMS4xMjctLjA2IDEuMzE2Ljk0NC4yMjkgMy4xMjcuNTUzIDQuNjAyLTEuNDVsLS4wNTguMjNjLjM5My4zMDQuNjY5IDEuOTg1LjYyMyAzLjUwOC0uMDQ3IDEuNTI0LS4wNzggMi41Ny4yMzIgMy4zODcuMzEuODE3LjYxOSAyLjY1NSAzLjI1NSAyLjEwNyAyLjIwMy0uNDU4IDMuMzQ1LTEuNjQ0IDMuNTAzLTMuNjIzLjExMy0xLjQwNy4zNjgtMS4xOTkuMzg0LTIuNDU3bC4yMDUtLjU5NWMuMjM2LTEuOTA3LjAzNy0yLjUyMiAxLjM5NC0yLjIzNmwuMzMuMDI4YzEgLjA0NCAyLjMwNy0uMTU2IDMuMDc0LS41MDIgMS42NTItLjc0MyAyLjYzMi0xLjk4NSAxLjAwMy0xLjY1OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTMuNTEgOS44ODJjLS4zMzUtLjA0NS0uNjM5LS4wMDQtLjc5Mi4xMWEuMjguMjggMCAwIDAtLjEyLjE4N2MtLjAyLjEzMy4wNzcuMjgyLjEzNi4zNTguMTY5LjIxNi40MTQuMzY1LjY1OC4zOTguMDM1LjAwNC4wNy4wMDcuMTA1LjAwNy40MDUgMCAuNzc0LS4zMDcuODA3LS41MzMuMDQtLjI4My0uMzgzLS40NzItLjc5NS0uNTI3bTExLjA5OS4wMDljLS4wMzItLjIyMi0uNDQtLjI4NS0uODI2LS4yMzMtLjM4Ni4wNTItLjc2LjIyLS43My40NDMuMDI2LjE3My4zNDguNDY4LjczLjQ2OGEuNzE4LjcxOCAwIDAgMCAuMDk3LS4wMDYuOTQ3Ljk0NyAwIDAgMCAuNTMtLjI4MWMuMTM1LS4xMzguMjEzLS4yOTEuMTk5LS4zOTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTMwLjk3NSAxOS4zOTdjLS4xNDItLjQxNi0uNTk4LS41NS0xLjM1Ni0uMzk4LTIuMjUuNDUtMy4wNTYuMTM5LTMuMzIxLS4wNSAxLjc1LTIuNTg0IDMuMTg5LTUuNzA4IDMuOTY1LTguNjIzLjM2OC0xLjM4LjU3LTIuNjYzLjU4Ny0zLjcwOC4wMTktMS4xNDctLjE4My0xLjk5LS41OTgtMi41MDUtMS42NzUtMi4wNzUtNC4xMzQtMy4xODktNy4xMS0zLjIyLTIuMDQ3LS4wMjItMy43NzUuNDg2LTQuMTEuNjI5YTEwLjU0OSAxMC41NDkgMCAwIDAtMi4zMTMtLjI4OGMtMS41MzYtLjAyNC0yLjg2NC4zMzItMy45NjMgMS4wNmExOC4xMzEgMTguMTMxIDAgMCAwLTMuMjItLjgyYy0yLjYxLS40MDctNC42ODMtLjA5OC02LjE2My45MThDMS42MDggMy42MDUuNzkzIDUuNzczLjk1MSA4LjgzNmMuMDUzIDEuMDMuNjU4IDQuMiAxLjYxNCA3LjIzNiAxLjI1OCAzLjk5NiAyLjYyNSA2LjI1NyA0LjA2MyA2LjcyMy4xNjkuMDU0LjM2My4wOTIuNTc3LjA5Mi41MjUgMCAxLjE2OC0uMjMgMS44MzgtMS4wMWE2NC44OTQgNjQuODk0IDAgMCAxIDIuNTMyLTIuNzc4IDQuMTggNC4xOCAwIDAgMCAxLjgyMi40NzVsLjAwNS4wNDhjLS4xMS4xMjctLjIxNy4yNTUtLjMyMS4zODUtLjQ0LjU0Mi0uNTMyLjY1NS0xLjk1LjkzOC0uNDAzLjA4LTEuNDczLjI5NC0xLjQ4OSAxLjAyMi0uMDE3Ljc5NSAxLjI2NiAxLjEzIDEuNDEyIDEuMTY1LjUwOS4xMjMgMSAuMTg0IDEuNDY3LjE4NCAxLjEzOCAwIDIuMTQtLjM2MyAyLjk0LTEuMDY0LS4wMjUgMi44MzQuMDk3IDUuNjI4LjQ0OCA2LjQ3OS4yODguNjk2Ljk5IDIuNCAzLjIwOCAyLjM5OWE1LjMgNS4zIDAgMCAwIDEuMDc4LS4xMTljMi4zMTUtLjQ4IDMuMzItMS40NzMgMy43MS0zLjY2LjIwOC0xLjE3LjU2NS0zLjk2MS43MzMtNS40NTkuMzU0LjEwNy44MS4xNTYgMS4zMDQuMTU2IDEuMDI5IDAgMi4yMTYtLjIxMiAyLjk2MS0uNTQ3LjgzNy0uMzc3IDIuMzQ2LTEuMyAyLjA3Mi0yLjEwNFpNMjUuNDYyIDkuMjc4Yy0uMDA4LjQ0Mi0uMDcuODQ0LS4xMzcgMS4yNjItLjA3Mi40NTEtLjE0NS45MTctLjE2NCAxLjQ4Mi0uMDE5LjU1LjA1MiAxLjEyMy4xMiAxLjY3Ni4xNCAxLjExOC4yODIgMi4yNjgtLjI2OSAzLjQwM2E0LjM3IDQuMzcgMCAwIDEtLjI0My0uNDg1Yy0uMDY5LS4xNjEtLjIxNy0uNDItLjQyMy0uNzc3LS44LTEuMzktMi42NzMtNC42NDgtMS43MTQtNS45NzcuMjg2LS4zOTYgMS4wMS0uODAzIDIuODMtLjU4NFptLTIuMjA2LTcuNDljMi42NjcuMDU4IDQuNzc3IDEuMDI1IDYuMjcgMi44NzYgMS4xNDYgMS40Mi0uMTE2IDcuODc5LTMuNzY3IDEzLjQ1bC0uMTExLS4xMzUtLjA0Ni0uMDU2Yy45NDMtMS41MS43NTktMy4wMDYuNTk1LTQuMzMxLS4wNjgtLjU0NC0uMTMyLTEuMDU4LS4xMTUtMS41NDEuMDE2LS41MTEuMDg2LS45NS4xNTQtMS4zNzUuMDgyLS41MjIuMTY3LTEuMDYzLjE0NC0xLjcwMWEuNjg0LjY4NCAwIDAgMCAuMDE1LS4yNGMtLjA2LS42MTEtLjc4LTIuNDQxLTIuMjQ3LTQuMDk4YTEwLjA5NCAxMC4wOTQgMCAwIDAtMy41NzItMi42MDQgMTIuNDA3IDEyLjQwNyAwIDAgMSAyLjY4LS4yNDRaTTguMzM0IDIxLjMwN2MtLjczNy44Ni0xLjI0Ni42OTUtMS40MTQuNjQxLTEuMDkxLS4zNTMtMi4zNTctMi41OS0zLjQ3NC02LjEzNi0uOTY2LTMuMDY5LTEuNTMtNi4xNTUtMS41NzUtNy4wMi0uMTQxLTIuNzM3LjU0My00LjY0NCAyLjAzMy01LjY2OSAyLjQyNi0xLjY2OCA2LjQxNC0uNjcgOC4wMTYtLjE2My0uMDIzLjAyMi0uMDQ3LjA0Mi0uMDcuMDY1LTIuNjMgMi41NzUtMi41NjcgNi45NzQtMi41NiA3LjI0MyAwIC4xMDQuMDA4LjI1MS4wMi40NTMuMDQ2Ljc0LjEzIDIuMTE3LS4wOTUgMy42NzctLjIwOSAxLjQ1LjI1MiAyLjg2OCAxLjI2NCAzLjg5Mi4xMDQuMTA1LjIxMy4yMDUuMzI3LjMtLjQ1LjQ2Ny0xLjQzIDEuNTAyLTIuNDcyIDIuNzE3Wm0yLjgxLTMuNjM1Yy0uODE2LS44MjYtMS4xODYtMS45NzQtMS4wMTctMy4xNS4yMzgtMS42NDguMTUtMy4wODMuMTAzLTMuODU0bC0uMDE2LS4yNzdjLjM4NC0uMzMgMi4xNjUtMS4yNTUgMy40MzQtLjk3My41OC4xMjkuOTMyLjUxMSAxLjA4IDEuMTcuNzU5IDMuNDA2LjEgNC44MjUtLjQzIDUuOTY2LS4xMDkuMjM1LS4yMTIuNDU4LS4zLjY4N2wtLjA2OC4xNzhjLS4xNzMuNDUtLjMzNC44NjctLjQzNCAxLjI2NGEzLjMyNSAzLjMyNSAwIDAgMS0yLjM1Mi0xLjAxMVptLjEzMyA0LjU5NGEyLjA3IDIuMDcgMCAwIDEtLjYxNC0uMjU2Yy4xMTEtLjA1MS4zMS0uMTIuNjU0LS4xOSAxLjY2OC0uMzMyIDEuOTI1LS41NjcgMi40ODctMS4yNi4xMy0uMTU4LjI3NS0uMzM4LjQ3OC0uNTU3LjMwMS0uMzI4LjQ0LS4yNzIuNjktLjE3Mi4yMDIuMDgyLjQuMzI4LjQ4LjU5OS4wMzcuMTI4LjA4LjM3LS4wNi41Ni0xLjE3NCAxLjU5NS0yLjg4NiAxLjU3NC00LjExNSAxLjI3NlptOC43MjUgNy44NzNjLTIuMDQuNDI0LTIuNzYxLS41ODYtMy4yMzctMS43NC0uMzA4LS43NDQtLjQ1OS00LjEwMi0uMzUxLTcuODFhLjQzNC40MzQgMCAwIDAtLjAyLS4xNDMgMS44MjMgMS44MjMgMCAwIDAtLjA1Ny0uMjYyYy0uMTYtLjU0LS41NDgtLjk5LTEuMDEzLTEuMTc4LS4xODUtLjA3NC0uNTI1LS4yMS0uOTMzLS4xMS4wODctLjM0Ny4yMzgtLjc0LjQwMi0xLjE2NWwuMDY4LS4xNzhjLjA3OC0uMjAyLjE3NS0uNDEuMjc3LS42MzIuNTU0LTEuMTk0IDEuMzEzLTIuODI5LjQ5LTYuNTIyLS4zMDktMS4zODQtMS4zNC0yLjA2LTIuOTAxLTEuOTAzLS45MzYuMDk0LTEuNzkzLjQ2LTIuMjIuNjdhNy4yNTUgNy4yNTUgMCAwIDAtLjI1NS4xMzJjLjEyLTEuMzk0LjU3LTQgMi4yNTUtNS42NDcgMS4wNjItMS4wMzggMi40NzUtMS41NSA0LjE5Ni0xLjUyMyAzLjM5My4wNTQgNS41NjkgMS43NDIgNi43OTYgMy4xNSAxLjA1OCAxLjIxMSAxLjYzMSAyLjQzMyAxLjg2IDMuMDkxLTEuNzItLjE3LTIuODg5LjE2LTMuNDgyLjk4Mi0xLjI5IDEuNzg3LjcwNiA1LjI1NyAxLjY2NSA2LjkyNC4xNzUuMzA2LjMyNy41Ny4zNzUuNjgyLjMxMi43MzQuNzE2IDEuMjI0IDEuMDEyIDEuNTgyLjA5LjExLjE3OC4yMTUuMjQ1LjMwOC0uNTIxLjE0Ni0xLjQ1Ni40ODItMS4zNzEgMi4xNjQtLjA2OS44NDMtLjU1OCA0Ljc5My0uODA2IDYuMTg5LS4zMjggMS44NDMtMS4wMjggMi41My0yLjk5NSAyLjkzOVptOC41MTMtOS40NDdjLS41MzIuMjQtMS40MjQuNDItMi4yNy40NTgtLjkzNS4wNDMtMS40MTEtLjEwMS0xLjUyMy0uMTktLjA1My0xLjA0OC4zNS0xLjE1Ny43NzUtMS4yNzNhMy4zNSAzLjM1IDAgMCAwIC4xOTUtLjA1OGMuMDQuMDMxLjA4Mi4wNjIuMTMuMDkyLjc1LjQ4MSAyLjA5MS41MzMgMy45ODQuMTU0bC4wMi0uMDA0Yy0uMjU1LjIzMi0uNjkyLjU0Mi0xLjMxLjgyMVpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUG9zdGdyZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1Byb21ldGhldXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1Byb21ldGhldXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNjUyMkNcIixcbiAgICBkOiBcIk0xNS45MDcuMTg3QzcuMTIyLjE4NyAwIDcuMzA4IDAgMTYuMDkzUzcuMTIyIDMyIDE1LjkwNyAzMmM4Ljc4NCAwIDE1LjkwNi03LjEyMSAxNS45MDYtMTUuOTA2UzI0LjY5LjE4NyAxNS45MDcuMTg3Wm0wIDI5Ljc3Yy0yLjUgMC00LjUyNi0xLjY3LTQuNTI2LTMuNzI5aDkuMDUxYzAgMi4wNi0yLjAyNiAzLjczLTQuNTI1IDMuNzNabTcuNDc1LTQuOTYzSDguNDN2LTIuNzExaDE0Ljk1djIuNzFabS0uMDU0LTQuMTA3SDguNDczYy0uMDUtLjA1Ny0uMS0uMTEzLS4xNDctLjE3LTEuNTMtMS44NTktMS44OTEtMi44MjktMi4yNDEtMy44MTgtLjAwNi0uMDMyIDEuODU1LjM4IDMuMTc2LjY3OCAwIDAgLjY3OS4xNTcgMS42NzIuMzM4LS45NTMtMS4xMTgtMS41Mi0yLjUzOS0xLjUyLTMuOTkxIDAtMy4xODkgMi40NDYtNS45NzUgMS41NjQtOC4yMjcuODU4LjA3IDEuNzc3IDEuODEyIDEuODM5IDQuNTM3LjkxMy0xLjI2MiAxLjI5NS0zLjU2NiAxLjI5NS00Ljk3OCAwLTEuNDYzLjk2My0zLjE2MSAxLjkyNy0zLjIyLS44NiAxLjQxNy4yMjMgMi42MyAxLjE4NCA1LjY0Mi4zNjEgMS4xMzIuMzE1IDMuMDM1LjU5NCA0LjI0My4wOTItMi41MDguNTIzLTYuMTY3IDIuMTE0LTcuNDMtLjcwMiAxLjU5MS4xMDQgMy41ODEuNjU1IDQuNTM4Ljg4OSAxLjU0NCAxLjQyOCAyLjcxNCAxLjQyOCA0LjkyNiAwIDEuNDgzLS41NDggMi44OC0xLjQ3MiAzLjk3MSAxLjA1LS4xOTcgMS43NzYtLjM3NCAxLjc3Ni0uMzc0bDMuNDExLS42NjZzLS40OTUgMi4wMzgtMi40IDQuMDAxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1Byb21ldGhldXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1JhYmJpdG1xID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29SYWJiaXRtcShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y2MFwiLFxuICAgIGQ6IFwiTTMwLjA4MyAxMy4xOTdoLTkuODc4Yy0uNzktLjA4OC0xLjM5MS0uNzQtMS4zOTEtMS41MDhWMS45N2MwLS44My0uNzE4LTEuNDk1LTEuNTk1LTEuNDk1aC0zLjQ1NmMtLjg4NSAwLTEuNTk1LjY3Mi0xLjU5NSAxLjQ5NXY5LjgyYy0uMDQzLjc0LS42OTYgMS4zMzgtMS40NzggMS40MDZIOC4xMDJjLS43Ni0uMDg4LTEuMzQ4LS42ODYtMS4zOTgtMS40MDZWMS45N2MwLS44My0uNzE4LTEuNDk1LTEuNTk1LTEuNDk1SDEuNjUyQy43NjguNDc2LjA1OCAxLjE0OC4wNTggMS45N3YyOC4zNThjMCAuODMuNzE3IDEuNDk1IDEuNTk0IDEuNDk1aDI4LjQzOWMuODg0IDAgMS41OTQtLjY3MyAxLjU5NC0xLjQ5NVYxNC42OTJjLS4wMDctLjgyOS0uNzE4LTEuNDk1LTEuNjAyLTEuNDk1Wm0tNC41NSAxMC43MjRjMCAuODI5LS43MTggMS40OTUtMS41OTUgMS40OTVIMjAuNDhjLS44ODQgMC0xLjU5NS0uNjczLTEuNTk1LTEuNDk1di0zLjA1OGMwLS44My43MTgtMS40OTUgMS41OTUtMS40OTVoMy40NTdjLjg4NCAwIDEuNTk0LjY3MiAxLjU5NCAxLjQ5NXYzLjA1OFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29SYWJiaXRtcTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvUmVkaXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1JlZGlzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDMpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E0MUUxMVwiLFxuICAgIGQ6IFwiTTMwLjU5NCAyMC43OTFjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNi0xLjg2My45NjYtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS42OTktMTAuNzgyLTQuNDM3LTEyLjQ2LTUuMjM0LS44MzgtLjM5OS0xLjI3OC0uNzM1LTEuMjc4LTEuMDUydi0zLjE4czEyLjEyMS0yLjYyMyAxNC4wNzgtMy4zMmMxLjk1Ny0uNjk5IDIuNjM2LS43MjQgNC4zMDEtLjExOCAxLjY2Ni42MDcgMTEuNjIzIDIuMzkzIDEzLjI3IDIuOTkybC0uMDAxIDMuMTM1YzAgLjMxNC0uMzguNjU5LTEuMjQgMS4xMDR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNEODJDMjBcIixcbiAgICBkOiBcIk0zMC41OTQgMTcuNjFjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNy0xLjg2My45NjUtMi44OTguOTU2LTQuMzcuMjU2LTEuNDcxLS42OTgtMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM0LTEuNjc2LS43OTctMS43MTItMS4zNDUtLjA2NC0xLjk4NyAxLjY0Ny0uNjQxIDEwLjkwNy00LjI1MiAxMi44NjQtNC45NSAxLjk1Ny0uNjk4IDIuNjM2LS43MjMgNC4zMDEtLjExNyAxLjY2Ni42MDcgMTAuMzYzIDQuMDQ4IDEyLjAwOSA0LjY0NyAxLjY0Ni42IDEuNzEgMS4wOTMuMDIgMS45Njh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBNDFFMTFcIixcbiAgICBkOiBcIk0zMC41OTQgMTUuNjA2Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUtMTIuMyA1LjQxNi0xLjg2My45NjUtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS43LTEwLjc4Mi00LjQzOC0xMi40Ni01LjIzNS0uODM4LS4zOTgtMS4yNzgtLjczNC0xLjI3OC0xLjA1MXYtMy4xOFMxMi4zMDcgOS4xOSAxNC4yNjQgOC40OTJjMS45NTctLjY5OCAyLjYzNi0uNzIzIDQuMzAxLS4xMTcgMS42NjYuNjA2IDExLjYyMyAyLjM5MiAxMy4yNyAyLjk5MWwtLjAwMSAzLjEzNWMwIC4zMTUtLjM4LjY2LTEuMjQgMS4xMDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNEODJDMjBcIixcbiAgICBkOiBcIk0zMC41OTQgMTIuNDI1Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUtMTIuMyA1LjQxNi0xLjg2My45NjYtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS42OTktMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM1LTEuNjc2LS43OTYtMS43MTItMS4zNDUtLjA2NC0xLjk4NiAxLjY0Ny0uNjQxIDEwLjkwNy00LjI1MyAxMi44NjQtNC45NSAxLjk1Ny0uNjk4IDIuNjM2LS43MjQgNC4zMDEtLjExNyAxLjY2Ni42MDYgMTAuMzYzIDQuMDQ3IDEyLjAwOSA0LjY0NiAxLjY0Ni42IDEuNzEgMS4wOTQuMDIgMS45Njl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBNDFFMTFcIixcbiAgICBkOiBcIk0zMC41OTQgMTAuMjI4Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUxLTEyLjMgNS40MTctMS44NjMuOTY1LTIuODk4Ljk1NS00LjM3LjI1Ni0xLjQ3MS0uNjk5LTEwLjc4Mi00LjQzOC0xMi40Ni01LjIzNEMuNjI3IDEwLjI2OC4xODcgOS45MzIuMTg3IDkuNjE1di0zLjE4czEyLjEyMS0yLjYyMyAxNC4wNzgtMy4zMmMxLjk1Ny0uNjk5IDIuNjM2LS43MjQgNC4zMDEtLjExNyAxLjY2Ni42MDYgMTEuNjIzIDIuMzkxIDEzLjI3IDIuOTlsLS4wMDEgMy4xMzZjMCAuMzE0LS4zOC42NTktMS4yNCAxLjEwNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Q4MkMyMFwiLFxuICAgIGQ6IFwiTTMwLjU5NCA3LjA0N2MtMS42ODkuODc1LTEwLjQzOCA0LjQ1MS0xMi4zIDUuNDE3LTEuODYzLjk2NS0yLjg5OC45NTUtNC4zNy4yNTYtMS40NzEtLjY5OS0xMC43ODItNC40MzctMTIuNDYtNS4yMzRDLS4yMTEgNi42ODktLjI0NyA2LjE0IDEuNCA1LjQ5OVMxMi4zMDcgMS4yNDcgMTQuMjY0LjU1YzEuOTU3LS43IDIuNjM2LS43MjQgNC4zMDEtLjExOCAxLjY2Ni42MDcgMTAuMzYzIDQuMDQ4IDEyLjAwOSA0LjY0NyAxLjY0Ni42IDEuNzEgMS4wOTMuMDIgMS45Njh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIm0yMC4xNTcgMy45ODUtMi43NDIuMjgzLS42MTQgMS40NjgtLjk5Mi0xLjYzOC0zLjE2Ni0uMjgzIDIuMzYyLS44NDctLjcwOC0xLjMgMi4yMTIuODYgMi4wODUtLjY4LS41NjMgMS4zNDV6bS0zLjUyIDcuMTIzLTUuMTE4LTIuMTEgNy4zMzQtMS4xMTl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJlbGxpcHNlXCIsIHtcbiAgICBjeDogOS41NDEsXG4gICAgY3k6IDYuMzExLFxuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIHJ4OiAzLjkyLFxuICAgIHJ5OiAxLjUxXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjN0EwQzAwXCIsXG4gICAgZDogXCJtMjMuMzk4IDQuMzg2IDQuMzQgMS43MDUtNC4zMzYgMS43MDN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBRDIxMTVcIixcbiAgICBkOiBcIm0xOC41OTYgNi4yNzQgNC44MDItMS44ODguMDA0IDMuNDA4LS40NzEuMTgzelwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29SZWRpczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvU2VjdXJpdHkgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NlY3VyaXR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkE3NDRFXCIsXG4gICAgZDogXCJNOSA3LjAwOFYwaDIwdjE2Ljc0NGMwIDMuOTEzLTYuMzc4IDYuNDc3LTkuMDE1IDcuMjU2VjcuMDA4SDlaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMxREJBQjBcIixcbiAgICBkOiBcIk0zIDIwLjA3M1YxMGgxNHYyMkM3LjY2NyAyNy45OCAzIDI0LjAwNCAzIDIwLjA3M1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTBoOHYxNGMtMi45ODMtMS4xNC04LTMuNzU2LTgtNy4wNDNWMTBaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1NlY3VyaXR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29TaXRlU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29TaXRlU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIk0yNy4wNSAxMGgtNy4zNGwtMTEgMjJzMTUuNjk2LTQuOTYgMjEuODU1LTE2LjA3NkMzMi4wMzcgMTMuMjY2IDMwLjA4OCAxMCAyNy4wNSAxMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMjEuMzU1IDBINy41MzNMLjQyNyAxNC4yMTFDLS45MDMgMTYuODcxIDEuMDMyIDIwIDQuMDA0IDIwaDcuMzUxbDEwLTIwWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi41MzMgMTAgLjQyOCAxNC4yMTFDLS45MDMgMTYuODcxIDEuMDMyIDIwIDQuMDA1IDIwaDcuMzVsNS0xMEgyLjUzM1pcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1NpdGVTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1NrZXRjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvU2tldGNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGQUUwMFwiLFxuICAgIGQ6IFwiTTE2IDMyIDAgMTEuNDU0bDYuOTMxLTEwLjM4TDE2IDBsOS4wNjkgMS4wNzRMMzIgMTEuNDU0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUM2QzAwXCIsXG4gICAgZDogXCJNMTYgMzIgMCAxMS40NTRoMzJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkFFMDBcIixcbiAgICBkOiBcIk0xNiAzMiA2LjQ3NyAxMS40NTRoMTkuMDQ1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZFRkI0XCIsXG4gICAgZDogXCJNMTYgMCA2LjQ3NyAxMS40NTRoMTkuMDQ1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZBRTAwXCIsXG4gICAgZDogXCJNNi45MzIgMS4wNzQgMy4zNjkgNi4zLjAwMSAxMS40NTRoNi41NDJ6TTI1LjA2OSAxLjA3NCAyOC42MzIgNi4zIDMyIDExLjQ1NGgtNi41NDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUQzMDVcIixcbiAgICBkOiBcIm02LjkzMSAxLjA3NC0uNDUzIDEwLjM4TDE2IDB6TTI1LjA2OSAxLjA3NGwuNDUzIDEwLjM4TDE2IDB6XCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1NrZXRjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvU2xhY2sgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NsYWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0UwMUU1QVwiLFxuICAgIGQ6IFwiTTYuODEzIDIwLjE4YTMuMzM3IDMuMzM3IDAgMCAxLTMuMzMgMy4zMyAzLjMzNyAzLjMzNyAwIDAgMS0zLjMyOC0zLjMzIDMuMzM3IDMuMzM3IDAgMCAxIDMuMzI5LTMuMzI5aDMuMzI5djMuMzN6bTEuNjc3IDBhMy4zMzcgMy4zMzcgMCAwIDEgMy4zMy0zLjMyOSAzLjMzNyAzLjMzNyAwIDAgMSAzLjMyOCAzLjMzdjguMzM1YTMuMzM3IDMuMzM3IDAgMCAxLTMuMzI5IDMuMzI5IDMuMzM3IDMuMzM3IDAgMCAxLTMuMzI5LTMuMzNWMjAuMTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzNkM1RjBcIixcbiAgICBkOiBcIk0xMS44MiA2LjgxM2EzLjMzNyAzLjMzNyAwIDAgMS0zLjMzLTMuMzNBMy4zMzcgMy4zMzcgMCAwIDEgMTEuODIuMTU2YTMuMzM3IDMuMzM3IDAgMCAxIDMuMzI4IDMuMzI5djMuMzI5SDExLjgyem0wIDEuNjc3YTMuMzM3IDMuMzM3IDAgMCAxIDMuMzI4IDMuMzMgMy4zMzcgMy4zMzcgMCAwIDEtMy4zMjkgMy4zMjhIMy40ODRhMy4zMzcgMy4zMzcgMCAwIDEtMy4zMy0zLjMyOSAzLjMzNyAzLjMzNyAwIDAgMSAzLjMzLTMuMzI5aDguMzM1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMkVCNjdEXCIsXG4gICAgZDogXCJNMjUuMTg3IDExLjgyYTMuMzM3IDMuMzM3IDAgMCAxIDMuMzI5LTMuMzMgMy4zMzcgMy4zMzcgMCAwIDEgMy4zMjkgMy4zMyAzLjMzNyAzLjMzNyAwIDAgMS0zLjMzIDMuMzI4aC0zLjMyOFYxMS44MnptLTEuNjc4IDBhMy4zMzcgMy4zMzcgMCAwIDEtMy4zMjkgMy4zMjggMy4zMzcgMy4zMzcgMCAwIDEtMy4zMjktMy4zMjlWMy40ODRhMy4zMzcgMy4zMzcgMCAwIDEgMy4zMy0zLjMzIDMuMzM3IDMuMzM3IDAgMCAxIDMuMzI4IDMuMzN2OC4zMzV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFQ0IyMkVcIixcbiAgICBkOiBcIk0yMC4xOCAyNS4xODdhMy4zMzcgMy4zMzcgMCAwIDEgMy4zMyAzLjMyOSAzLjMzNyAzLjMzNyAwIDAgMS0zLjMzIDMuMzI5IDMuMzM3IDMuMzM3IDAgMCAxLTMuMzI5LTMuMzN2LTMuMzI4aDMuMzN6bTAtMS42NzhhMy4zMzcgMy4zMzcgMCAwIDEtMy4zMjktMy4zMjkgMy4zMzcgMy4zMzcgMCAwIDEgMy4zMy0zLjMyOWg4LjMzNWEzLjMzNyAzLjMzNyAwIDAgMSAzLjMyOSAzLjMzIDMuMzM3IDMuMzM3IDAgMCAxLTMuMzMgMy4zMjhIMjAuMTh6XCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1NsYWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29VcHRpbWUgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1VwdGltZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzNFQkVCMFwiLFxuICAgIGQ6IFwiTTE5IDE1YzAgNy4wNjItNC44ODggMTIuOTY5LTExLjQ2IDE0LjU2M0ExNS45MTQgMTUuOTE0IDAgMCAwIDE2IDMyYzguODM2IDAgMTYtNy4xNjMgMTYtMTZ2LTNsLTYuNS02LTYuNSA2djJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwN0NcIixcbiAgICBkOiBcIk02LjgzMyAyNi42NDZhMTEuOTU0IDExLjk1NCAwIDAgMCA4LjU0NC03LjgzNEExMi40MyAxMi40MyAwIDAgMSAxMyAxMS41Vi4yOTJDNS42IDEuNjk2IDAgOC4xOSAwIDE2LjAwMmMwIDQuMzU4IDEuNzUgOC4zMDYgNC41NzcgMTEuMTkybDIuMjU2LS41NDdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC4zNjIgMjMuMDJjLTEuNDk0LjYzLTMuMTM3Ljk4LTQuODYxLjk4YTEyLjQ0MyAxMi40NDMgMCAwIDEtNy44NTItMi43OCAxNS4wNDIgMTUuMDQyIDAgMCAxLTEwLjExIDguMzQzQTE1LjkxIDE1LjkxIDAgMCAwIDE2LjAwMiAzMmM2LjMxNCAwIDExLjc1OC0zLjY2OSAxNC4zNi04Ljk4XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1VwdGltZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMTEuMDUgMS45NSA2LjgwOCA2LjE5MiAxNiAxNS4zODVsOS4xOTItOS4xOTNMMjAuOTUgMS45NSAxNiA2LjlsLTQuOTUtNC45NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwiTTQuNjg2IDE5LjYyN2E4IDggMCAwIDEgMC0xMS4zMTNMMTYgMTkuNjI3djExLjMxNEw0LjY4NiAxOS42MjdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzNDM3NDFcIixcbiAgICBkOiBcIk0yNy4zMTQgOC4zMTRhOCA4IDAgMCAxIDAgMTEuMzEzTDE2IDMwLjk0MVYxOS42MjdMMjcuMzE0IDguMzE0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29XZWJob29rID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29XZWJob29rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0M3M0E2M1wiLFxuICAgIGQ6IFwiTTE0Ljk0MyAxMy41NjNjLTEuMzI3IDIuMjMtMi41OTcgNC4zODgtMy44OTQgNi41MzEtLjMzNC41NS0uNDk4Ljk5OC0uMjMyIDEuNjk4LjczNCAxLjkzMS0uMzAyIDMuODExLTIuMjUgNC4zMjEtMS44MzcuNDgyLTMuNjI3LS43MjYtMy45OTItMi42OTItLjMyMy0xLjc0MSAxLjAyOC0zLjQ0OCAyLjk0OC0zLjcyLjE2LS4wMjMuMzI1LS4wMjYuNTk1LS4wNDZsMi45Mi00Ljg5NkM5LjIgMTIuOTMzIDguMTA4IDEwLjggOC4zNSA4LjE1NGMuMTcxLTEuODcuOTA3LTMuNDg2IDIuMjUtNC44MWE3LjYzOSA3LjYzOSAwIDAgMSA5LjUzMS0xYzIuOTEgMS44NyA0LjI0NCA1LjUxMiAzLjEwNyA4LjYyOWwtMi42NjgtLjcyNGMuMzU3LTEuNzMzLjA5My0zLjI5LTEuMDc2LTQuNjIzLS43NzItLjg4LTEuNzYzLTEuMzQxLTIuODktMS41MTEtMi4yNTgtLjM0MS00LjQ3NiAxLjExLTUuMTM0IDMuMzI3LS43NDggMi41MTYuMzgzIDQuNTcyIDMuNDczIDYuMTIxWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNEI0QjRCXCIsXG4gICAgZDogXCJtMTguNzMgMTAuOTI2IDIuODIzIDQuOThjNC43NTMtMS40NyA4LjMzNiAxLjE2IDkuNjIyIDMuOTc3IDEuNTUyIDMuNDAyLjQ5MSA3LjQzMi0yLjU1OCA5LjUzMS0zLjEzIDIuMTU1LTcuMDg5IDEuNzg3LTkuODYyLS45ODFsMi4xNzYtMS44MjFjMi43MzkgMS43NzQgNS4xMzUgMS42OSA2LjkxMy0uNDFhNC43NjYgNC43NjYgMCAwIDAtLjA3Ny02LjIxOWMtMS44LTIuMDI1LTQuMjEzLTIuMDg2LTcuMTMtLjE0My0xLjIwOS0yLjE0Ni0yLjQ0LTQuMjc1LTMuNjEtNi40MzYtLjM5Ni0uNzI5LS44MzItMS4xNTItMS43MjItMS4zMDYtMS40ODctLjI1Ny0yLjQ0Ni0xLjUzNC0yLjUwNC0yLjk2NGEzLjI1OCAzLjI1OCAwIDAgMSAyLjA4LTMuMTkyIDMuMjQzIDMuMjQzIDAgMCAxIDMuNjcxIDEuMDAyYy43MS44OTYuOTM1IDEuOTA1LjU2MiAzLjAxLS4xMDQuMzA5LS4yMzguNjA3LS4zODQuOTcyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNEE0QTRBXCIsXG4gICAgZDogXCJNMjAuOTYzIDI0LjQwMWgtNS43MmMtLjU1IDIuMjU2LTEuNzM0IDQuMDc3LTMuNzc1IDUuMjM1LTEuNTg2LjktMy4yOTYgMS4yMDUtNS4xMTYuOTExQzMgMzAuMDA3LjI2IDI2Ljk5LjAxOSAyMy41OTNjLS4yNzMtMy44NDggMi4zNzItNy4yNjggNS44OTgtOC4wMzZsLjczMiAyLjY1OGMtMy4yMzQgMS42NS00LjM1MyAzLjczLTMuNDQ4IDYuMzMuNzk3IDIuMjg3IDMuMDYgMy41NDEgNS41MTggMy4wNTYgMi41MS0uNDk1IDMuNzc2LTIuNTgxIDMuNjIxLTUuOTI5IDIuMzggMCA0Ljc2MS0uMDI0IDcuMTQuMDEyLjkzLjAxNSAxLjY0OC0uMDgxIDIuMzQ4LS45IDEuMTUyLTEuMzQ5IDMuMjczLTEuMjI3IDQuNTE1LjA0NiAxLjI2OCAxLjMwMSAxLjIwNyAzLjM5NS0uMTM1IDQuNjQxYTMuMjM2IDMuMjM2IDAgMCAxLTQuNTUzLS4xNTdjLS4yNDktLjI2Ny0uNDQ1LS41ODUtLjY5Mi0uOTEzWlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29XZWJob29rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29XaW5kb3dzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29XaW5kb3dzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBBREVGXCIsXG4gICAgZDogXCJtMCA0LjUxIDEyLjk3Ny0xLjc2OC4wMDYgMTIuNTE4LTEyLjk3MS4wNzRMMCA0LjUxWm0xMi45NyAxMi4xOTIuMDExIDEyLjUyOS0xMi45Ny0xLjc4NC0uMDAyLTEwLjgyOSAxMi45NjIuMDg0Wm0xLjU3NC0xNC4xOUwzMS43NTEgMHYxNS4xbC0xNy4yMDcuMTM3VjIuNTExWm0xNy4yMSAxNC4zMDgtLjAwMyAxNS4wMzMtMTcuMjA3LTIuNDI5LS4wMjQtMTIuNjMyIDE3LjIzNS4wMjhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvV2luZG93czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIk0xNy41NTcgNS4wNWMuMTctLjIwMi40NTctLjUxMi44Ni0uOTNDMTkuNDgzIDMuMDE3IDIxLjgyOCAxIDIzLjgwMSAxSDMwdjMwaC02LjJjLTEuOTcyIDAtMy45OTUtMS40NDktNS4zODMtMy4xMDZsLS43NjQtMS4wNTIgMi43NS0zLjQ3N2MzLjQ2Mi00LjM3NiAzLjQ2My0xMC4zMzIuMDAxLTE0LjcwN0wxNy41NTcgNS4wNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTIgMzFWMWg1LjgxYzEuNzEgMCAzLjM1Ljc4NiA0LjM4NyAyLjFsNS44NTUgNy40MmMyLjU5OCAzLjI4MyAyLjU5OCA3LjY5OC0uMDAyIDEwLjk4M2wtNS44NTUgNy40MDNDMTEuMTU4IDMwLjIxNyA5LjUyIDMxIDcuODE1IDMxSDJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4zODQgMjQuODkgMTIuMTUgMjEuN2MtMi44NjgtMy4zMTgtMi44NjgtOC4yMi4wMDItMTEuMzIyIDEuNTM1LTEuNjM5IDIuNjExLTIuNzE4IDMuMjMtMy4yMzhsMi42NyAzLjIzOGMyLjYzNyAzLjM4NSAyLjU3NSA3Ljk4Ny0uMDYyIDExLjM3NGwtMi42MDcgMy4xMzdaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1dvcmtwbGFjZVNlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dzdGFzaEZpbHRlciA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaEZpbHRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuOTE0IDFjLTMuNiAwLTUuODk3IDEuMTExLTUuODk3IDEuODc2IDAgLjc2NiAyLjI5NyAxLjg3NyA1Ljg5NyAxLjg3N3M1Ljg5Ny0xLjExMSA1Ljg5Ny0xLjg3N0MxMy44MTEgMi4xMTEgMTEuNTE0IDEgNy45MTQgMW0zLjk4IDcuOTg4Yy0xLjE4Ny4zMzEtMi42MDEuNTAyLTMuOTguNTAyLTEuMzgzIDAtMi44MDEtLjE3Mi0zLjk5MS0uNTA1bDIuODYzIDMuMjQydjIuNTE1Yy4xMzYuMDguNTE1LjIxNCAxLjEyOC4yMTQuNjEgMCAuOTg5LS4xMzMgMS4xMjYtLjIxM3YtMi41MTVsMi44NTQtMy4yNFptMi4zOTQtMS4yMDYtNC4yNDggNC44MjN2Mi4yNDZoLjAwNGMwIC43NjMtMS4wNjkgMS4xMDUtMi4xMyAxLjEwNS0xLjA2IDAtMi4xMy0uMzQyLTIuMTMtMS4xMDVoLjAwMnYtMi4yNDVMMS4zMjEgNy41NWwuMDEtLjAwOEExLjUzIDEuNTMgMCAwIDEgMSA2LjYwN1YyLjc4aC4wMkMxLjE0Ljk3MyA0LjYyNyAwIDcuOTEzIDBjMy4yODYgMCA2Ljc3NC45NzMgNi44OTQgMi43OGguMDJ2My44MjdjMCAuMzQzLS4xMi42NTctLjMzNS45NDFsLS4wMDMuMDA0Yy0uMDYuMDc5LS4xMjguMTU1LS4yMDIuMjNabS0uNTc4LS44NTZhLjU2LjU2IDAgMCAwIC4xMTgtLjMxOVY0LjQxMWMtMS4yODguODc5LTMuNjQ5IDEuMzQyLTUuOTE0IDEuMzQyQzUuNjUgNS43NTMgMy4yODggNS4yOSAyIDQuNDExdjIuMTk2QzIgNy4zNzUgNC4zMDQgOC40OSA3LjkxNCA4LjQ5YzIuODc5IDAgNC45MjctLjcwOSA1LjYzOS0xLjM4NWwuMTU3LS4xOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoRmlsdGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ3N0YXNoSWYgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hJZihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTYuOTE4IDkuNzk5LTQuODIgNC44MTkgMi44OC0uNDMuMTQ4Ljk4N0wwIDE1Ljk0M2wuNzY4LTUuMTI2Ljk4OC4xNDgtLjQ1MyAzLjAzMyA0LjkzNi00LjkzNWEyLjAwMyAyLjAwMyAwIDAgMSAxLjI2NS0yLjg4NVYwaDF2Ni4xNzhhMi4wMDMgMi4wMDMgMCAwIDEgMS4yNjMgMi44ODRsNC44NjUgNC44NjYtLjQ0My0yLjk2My45ODgtLjE0Ny43NjggNS4xMjYtNS4xMjctLjc2OS4xNS0uOTg4IDIuOTUuNDQxLTQuODMtNC44M2MtLjMxMi4yMDMtLjY4NS4zMi0xLjA4NS4zMi0uNCAwLS43NzMtLjExNy0xLjA4NS0uMzJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dzdGFzaElmOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ3N0YXNoSW5wdXQgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hJbnB1dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNzQ3IDEwLjk5MmgxMy4xYS4xMjMuMTIzIDAgMCAwIC4xMjItLjEyM1Y4LjUxYS4xMjIuMTIyIDAgMCAwLS4xMjItLjEyMkgxLjEyMkEuMTIyLjEyMiAwIDAgMCAxIDguNTF2Mi4zNmMwIC4wNjYuMDU1LjEyMi4xMjIuMTIyaC42MjVabTEyLjAxMSAxSDIuMjFWMTZoLTF2LTQuMDA4aC0uMDg4QTEuMTI0IDEuMTI0IDAgMCAxIDAgMTAuODdWOC41MWMwLS42Mi41MDMtMS4xMjIgMS4xMjItMS4xMjJoMTMuNzI1Yy42MiAwIDEuMTIyLjUwMiAxLjEyMiAxLjEyMnYyLjM2YzAgLjYxOC0uNTAzIDEuMTIyLTEuMTIyIDEuMTIyaC0uMDg5VjE2aC0xdi00LjAwOFptLTYuMjctNy40ODdWMGgxdjQuNTI5bDIuNDA3LTIuMjYyLjY4NS43M0w4IDYuMzU2IDQuNDIgMi45OTVsLjY4NS0uNzI5IDIuMzgzIDIuMjRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dzdGFzaElucHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ3N0YXNoT3V0cHV0ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ3N0YXNoT3V0cHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi4yMSA0LjAwOEgxMy43NlYwaDF2NC4wMDhoLjA4OGMuNjE5IDAgMS4xMjIuNTA0IDEuMTIyIDEuMTIzVjcuNDljMCAuNjItLjUwMyAxLjEyMi0xLjEyMiAxLjEyMkgxLjEyMkExLjEyMiAxLjEyMiAwIDAgMSAwIDcuNDlWNS4xM2MwLS42MTguNTAzLTEuMTIyIDEuMTIyLTEuMTIyaC4wODlWMGgxdjQuMDA4Wm0xMS41NDkgMUgxLjEyQS4xMjMuMTIzIDAgMCAwIDEgNS4xM1Y3LjQ5YzAgLjA2OC4wNTUuMTIyLjEyMi4xMjJoMTMuNzI1YS4xMjIuMTIyIDAgMCAwIC4xMjItLjEyMlY1LjEzYS4xMjMuMTIzIDAgMCAwLS4xMjItLjEyMmgtMS4wODhabS01LjMwMSA5LjA5NyAyLjQwNS0yLjI2LjY4Ni43MjgtMy41OCAzLjM2My0zLjU4LTMuMzYzLjY4Ni0uNzI4IDIuMzgzIDIuMjRWOS41NzdoMXY0LjUyOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoT3V0cHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ3N0YXNoUXVldWUgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hRdWV1ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjMzOSAxNS40NjRINC43N2EzLjI0OCAzLjI0OCAwIDAgMS0zLjI0NS0zLjI0NFY0LjU0OUgwdi0xaDIuNTI2djguNjdhMi4yNDcgMi4yNDcgMCAwIDAgMi4yNDUgMi4yNDVoNi41NjhhMi4yNDcgMi4yNDcgMCAwIDAgMi4yNDQtMi4yNDRWMy41NDloMi40NTV2MWgtMS40NTV2Ny42N2EzLjI0NyAzLjI0NyAwIDAgMS0zLjI0NCAzLjI0NVptLjUxMy01Ljk2MnYxLjA5NWwtMy44NDggMS43Mi0zLjg1LTEuNzJWOS41MDJsMy44NSAxLjcyIDMuODQ4LTEuNzJabTAtNC4yNTF2MS4wOTVsLTMuODQ4IDEuNzItMy44NS0xLjcyVjUuMjVsMy44NSAxLjcyIDMuODQ4LTEuNzJabTAtNC4yNTF2MS4wOTVsLTMuODQ4IDEuNzItMy44NS0xLjcyVjFsMy44NSAxLjcyTDExLjg1MiAxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hRdWV1ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NYWduZXQgPSBmdW5jdGlvbiBFdWlJY29uTWFnbmV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41NTIgMTAuNzFhMy4wMDggMy4wMDggMCAwIDAgNC4xOS43MzhsMS42NDItMS4xNSAxLjE1IDEuNjQyLTEuNjQzIDEuMTVhNS4wMTMgNS4wMTMgMCAxIDEtNS43NS04LjIxMmwxLjY0Mi0xLjE1IDEuMTUgMS42NDMtMS42NDIgMS4xNWEzLjAwNyAzLjAwNyAwIDAgMC0uNzM5IDQuMTg5Wm04LjI5Ni0yLjEzNyAxLjE1IDEuNjQzLTEuNjQzIDEuMTQ5LTEuMTUtMS42NDIgMS42NDMtMS4xNVptLTQuNi02LjU3MSAxLjE1IDEuNjQzLTEuNjQzIDEuMTUtMS4xNS0xLjY0MiAxLjY0Mi0xLjE1MVptMS45NyAxLjA2OEw5LjA3IDEuNDI4YTEuMDAzIDEuMDAzIDAgMCAwLTEuMzk3LS4yNDZMMy41NjYgNC4wNTdBNS45OTUgNS45OTUgMCAwIDAgMS4wOTIgNy45NGE1Ljk5MyA1Ljk5MyAwIDAgMCAuOTk2IDQuNDk1IDUuOTkgNS45OSAwIDAgMCAzLjg4MyAyLjQ3MyA1Ljk5MSA1Ljk5MSAwIDAgMCA0LjQ5NS0uOTk2bDQuMTA3LTIuODc1Yy40NTQtLjMxOC41NjMtLjk0My4yNDYtMS4zOTZsLTEuMTUtMS42NDNhMS4wMDIgMS4wMDIgMCAwIDAtMS4zOTYtLjI0NmwtNC4xMDcgMi44NzVhMi4wMDIgMi4wMDIgMCAwIDEtMS40OTguMzMyIDIgMiAwIDAgMS0xLjYyNy0yLjMyM2MuMDktLjUwNS4zNzEtLjk3Ni44MjQtMS4yOTRsNC4xMDctMi44NzZjLjQ1NC0uMzE3LjU2NC0uOTQyLjI0Ni0xLjM5NlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1hZ25ldDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xNS4xNDMgMTUuODUtMy44NzItMy44NzJhLjUuNSAwIDAgMS0uMDM0LS43MzggNi4wMSA2LjAxIDAgMCAwIDAtOC40ODYgNi4wMDQgNi4wMDQgMCAwIDAtOC40ODQgMCA2LjAxIDYuMDEgMCAwIDAgMCA4LjQ4NiA1Ljk2IDUuOTYgMCAwIDAgNC4yNDIgMS43NTcuNS41IDAgMCAxIDAgMSA2Ljk1NSA2Ljk1NSAwIDAgMS00Ljk0OS0yLjA1Yy0yLjcyOC0yLjczLTIuNzI4LTcuMTcxIDAtOS45IDIuNzI4LTIuNzMgNy4xNjgtMi43MyA5Ljg5OCAwIDIuNjA5IDIuNjEgMi43MjMgNi43ODUuMzQyIDkuNTMybDMuNTY1IDMuNTY0YS41MDIuNTAyIDAgMCAxLS43MDguNzA4Wk02LjI1NCAzbC4yNzcgNS4wNjNoLjkzNUw3Ljc1NCAzaC0xLjVabS4yMjIgNy41NDhhLjcyNy43MjcgMCAwIDAgLjUzMy4yMjIuNzE3LjcxNyAwIDAgMCAuNTItLjIyLjcxNS43MTUgMCAwIDAgLjIyNS0uNTMuNzE2LjcxNiAwIDAgMC0uMjIyLS41MzQuNzI0LjcyNCAwIDAgMC0uNTIzLS4yMTYuNzMxLjczMSAwIDAgMC0uNTMzLjIxOS43MTkuNzE5IDAgMCAwLS4yMjIuNTNjMCAuMjA1LjA3NC4zOC4yMjIuNTI5WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFnbmlmeVdpdGhFeGNsYW1hdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NYWduaWZ5V2l0aE1pbnVzID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25pZnlXaXRoTWludXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgNmEuNS41IDAgMCAxIDAgMWgtNmEuNS41IDAgMCAxIDAtMWg2Wm0uNzQgNC43NGMwLS4xMTcuMDQtLjIyNS4xMDctLjMxQTUuNDc4IDUuNDc4IDAgMCAwIDEyIDYuNSA1LjUgNS41IDAgMSAwIDYuNSAxMmEuNS41IDAgMSAxIDAgMSA2LjUgNi41IDAgMSAxIDQuOTM2LTIuMjdsNC40MTkgNC40MThhLjUuNSAwIDAgMS0uNzA3LjcwN2wtNC43NjgtNC43NjhhLjQ5OS40OTkgMCAwIDEtLjE0LS4zNDdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduaWZ5V2l0aE1pbnVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1hZ25pZnlXaXRoUGx1cyA9IGZ1bmN0aW9uIEV1aUljb25NYWduaWZ5V2l0aFBsdXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDZoMi41YS41LjUgMCAwIDEgMCAxSDd2Mi41YS41LjUgMCAwIDEtMSAwVjdIMy41YS41LjUgMCAwIDEgMC0xSDZWMy41YS41LjUgMCAwIDEgMSAwVjZabTMuMjQgNC43NGMwLS4xMTcuMDQtLjIyNS4xMDctLjMxQTUuNDc4IDUuNDc4IDAgMCAwIDEyIDYuNSA1LjUgNS41IDAgMSAwIDYuNSAxMmEuNS41IDAgMSAxIDAgMSA2LjUgNi41IDAgMSAxIDQuOTM2LTIuMjdsNC40MTkgNC40MThhLjUuNSAwIDAgMS0uNzA3LjcwN2wtNC43NjgtNC43NjhhLjQ5OS40OTkgMCAwIDEtLjE0LS4zNDdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduaWZ5V2l0aFBsdXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWFwTWFya2VyID0gZnVuY3Rpb24gRXVpSWNvbk1hcE1hcmtlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNTUgMTQuMjI0YS41MDIuNTAyIDAgMCAwIC44OTcgMGw0LThhLjUuNSAwIDAgMCAuMDUzLS4yMzUgNC42NzIgNC42NzIgMCAwIDAtLjA4NC0uNzA1IDUuNTM4IDUuNTM4IDAgMCAwLS41MDUtMS41MTJDMTEuMTg5IDIuMzYyIDkuOTA2IDEuNSA4IDEuNWMtMS45MDYgMC0zLjE5Ljg2Mi0zLjkxIDIuMjcyLS4yNDguNDg1LS40MS45OTgtLjUwNiAxLjUxMi0uMDU4LjMxLS4wOC41NTQtLjA4NC43MDVhLjUuNSAwIDAgMCAuMDUzLjIzNWwzLjk5NyA4Wk04IDVhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yWm0tMy40OTMuODk1Yy4wMDktLjEwNi4wMjctLjI1My4wNi0uNDI5LjA3OS0uNDI0LjIxMy0uODQ4LjQxMy0xLjIzOEM1LjUzNyAzLjEzOCA2LjQ4NyAyLjUgOCAyLjVjMS41MTMgMCAyLjQ2My42MzggMy4wMiAxLjcyOC4yLjM5LjMzNC44MTQuNDEzIDEuMjM4LjAzMy4xNzYuMDUxLjMyMy4wNi40M0w4IDEyLjg4MSA0LjUwNyA1Ljg5NVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1hcE1hcmtlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NZW1vcnkgPSBmdW5jdGlvbiBFdWlJY29uTWVtb3J5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxMGgyVjZIN3pNMyAxMGgyVjZIM3pNMTEuMDI1IDEwaDJWNmgtMnpNMy41IDEzLjc1aDF2LTIuNGgtMXpNNi4xNzUgMTMuNzVoMS4wMDF2LTIuNEg2LjE3NXpNOC44NSAxMy43NWgxdi0yLjRoLTF6TTExLjUyNSAxMy43NWgxdi0yLjRoLTF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDN2Ny4wNWgxdjMuNjk4aDF2LTMuNjk5aDEydjMuNjk5aDF2LTMuNjk5aDFWM0gwWm0xIDZoMTRWNEgxdjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZW1vcnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWVudSA9IGZ1bmN0aW9uIEV1aUljb25NZW51KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAyaDE2djJIMFYyWm0wIDVoMTZ2MkgwVjdabTE2IDVIMHYyaDE2di0yWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NZW51RG93biA9IGZ1bmN0aW9uIEV1aUljb25NZW51RG93bihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgNy41YzAgLjI3Ni0uMjE2LjUtLjQ5NS41aC0yLjAxYS41MDMuNTAzIDAgMCAxLS40ODctLjQxMkwzIDcuNWMwLS4yNzYuMjE2LS41LjQ5NS0uNWgyLjAxYy4yNDMgMCAuNDQ1LjE4My40ODcuNDEyTDYgNy41Wk0zLjUxIDRhLjUxMy41MTMgMCAwIDEtLjUwMi0uNDEyTDMgMy41YzAtLjI3Ni4yMjgtLjUuNTEtLjVoOC45OGMuMjUgMCAuNDU5LjE4My41MDIuNDEyTDEzIDMuNWMwIC4yNzYtLjIyOC41LS41MS41SDguNDkzdjcuNzkybDIuMDYtMi4wNmEuNS41IDAgMSAxIC43MDcuNzA3TDkuMTQgMTIuNTZBMS40OTYgMS40OTYgMCAwIDEgOC4wMjYgMTNMNy45OTMgMTNhLjUwMS41MDEgMCAwIDEtLjExOC0uMDE0IDEuNDkzIDEuNDkzIDAgMCAxLS44NTctLjQyNmwtMi4xMjItMi4xMmEuNS41IDAgMCAxIC43MDgtLjcwOGwxLjg4OSAxLjg5VjRIMy41MVpNMTMgNy41YzAgLjI3Ni0uMjE2LjUtLjQ5NS41aC0yLjAxYS41MDMuNTAzIDAgMCAxLS40ODctLjQxMkwxMCA3LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMkwxMyA3LjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZW51RG93bjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NZW51TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25NZW51TGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMDE0IDcuMzgyYS41MDEuNTAxIDAgMCAwLS4wMTMuMTUyYy0uMDE0LjQuMTMzLjgwNi40MzkgMS4xMTJsMi4xMiAyLjEyMmEuNS41IDAgMSAwIC43MDgtLjcwOEwyLjIwOCA4SDE0LjVhLjUuNSAwIDAgMCAwLTFIMi4zNzlsMS44ODktMS44OWEuNS41IDAgMCAwLS43MDctLjcwNkwxLjQ0IDYuNTI0Yy0uMjQxLjI0Mi0uMzgzLjU0NC0uNDI2Ljg1OFpNMTQuNSAzaC03YS41LjUgMCAwIDAgMCAxaDdhLjUuNSAwIDAgMCAwLTFabTAgOGgtN2EuNS41IDAgMSAwIDAgMWg3YS41LjUgMCAxIDAgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudUxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWVudVJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0Ljk4NiA3LjM4MmEuNTAxLjUwMSAwIDAgMSAuMDEzLjE1MmMuMDE0LjQtLjEzMy44MDYtLjQzOSAxLjExMmwtMi4xMiAyLjEyMmEuNS41IDAgMSAxLS43MDgtLjcwOEwxMy43OTIgOEgxLjVhLjUuNSAwIDAgMSAwLTFoMTIuMTIxbC0xLjg4OS0xLjg5YS41LjUgMCAwIDEgLjcwNy0uNzA2bDIuMTIxIDIuMTJjLjI0MS4yNDIuMzgzLjU0NC40MjYuODU4Wk0xLjUgM2g3YS41LjUgMCAwIDEgMCAxaC03YS41LjUgMCAwIDEgMC0xWm0wIDhoN2EuNS41IDAgMSAxIDAgMWgtN2EuNS41IDAgMSAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NZW51VXAgPSBmdW5jdGlvbiBFdWlJY29uTWVudVVwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMDEgOC41YzAtLjI3Ni4yMTYtLjUuNDk1LS41aDIuMDFjLjI0MyAwIC40NDUuMTgzLjQ4Ny40MTJsLjAwOC4wODhjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwIDEtLjQ4Ny0uNDEyTDEwLjAxIDguNVpNMTIuNSAxMmMuMjUgMCAuNDU5LjE4My41MDIuNDEybC4wMDguMDg4YzAgLjI3Ni0uMjI4LjUtLjUxLjVIMy41MmEuNTEzLjUxMyAwIDAgMS0uNTAyLS40MTJMMy4wMSAxMi41YzAtLjI3Ni4yMjgtLjUuNTEtLjVoMy45ODdWNC4yMDhsLTIuMDYgMi4wNmEuNS41IDAgMSAxLS43MDctLjcwN0w2Ljg2IDMuNDRBMS40OTYgMS40OTYgMCAwIDEgNy45NzQgM0w4LjAwNyAzYy4wNCAwIC4wOC4wMDUuMTE4LjAxNC4zMTQuMDQzLjYxNi4xODUuODU3LjQyNmwyLjEyMiAyLjEyYS41LjUgMCAwIDEtLjcwOC43MDhsLTEuODg5LTEuODlWMTJIMTIuNVpNMyA4LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMkw2IDguNWMwIC4yNzYtLjIxNi41LS40OTUuNWgtMi4wMWEuNTAzLjUwMyAwIDAgMS0uNDg3LS40MTJMMyA4LjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZW51VXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWVyZ2UgPSBmdW5jdGlvbiBFdWlJY29uTWVyZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjM1MiA2SDIuNWEuNS41IDAgMCAxIDAtMWg0Ljg1Mkw1LjEyIDIuNzIxYy0uMTgtLjE4My0uMTU1LS40Ni4wNTUtLjYxNmEuNTUxLjU1MSAwIDAgMSAuNzA1LjA0OGwzIDMuMDYyYy4xNi4xNjQuMTYuNDA1IDAgLjU3bC0zIDMuMDYyQS41MzIuNTMyIDAgMCAxIDUuNSA5YS41NC41NCAwIDAgMS0uMzI1LS4xMDZjLS4yMS0uMTU3LS4yMzUtLjQzMy0uMDU1LS42MTZMNy4zNTIgNlptMS4yOTYgNEgxMy41YS41LjUgMCAwIDEgMCAxSDguNjQ4bDIuMjMyIDIuMjc4Yy4xOC4xODMuMTU1LjQ2LS4wNTUuNjE3QS41NC41NCAwIDAgMSAxMC41IDE0YS41MzIuNTMyIDAgMCAxLS4zOC0uMTUzbC0zLTMuMDYzYS4zOTcuMzk3IDAgMCAxIDAtLjU2OGwzLTMuMDYzYS41NTEuNTUxIDAgMCAxIC43MDUtLjA0N2MuMjEuMTU2LjIzNS40MzMuMDU1LjYxNkw4LjY0OCAxMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lcmdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1pbmltaXplID0gZnVuY3Rpb24gRXVpSWNvbk1pbmltaXplKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMS4xNDYgMTQuMTQ2IDQtNGEuNS41IDAgMCAxIC43NjUuNjM4bC0uMDU3LjA3LTQgNGEuNS41IDAgMCAxLS43NjUtLjYzOGwuMDU3LS4wNyA0LTQtNCA0Wk02LjUgOEExLjUgMS41IDAgMCAxIDggOS41djNhLjUuNSAwIDEgMS0xIDB2LTNhLjUuNSAwIDAgMC0uNS0uNWgtM2EuNS41IDAgMCAxIDAtMWgzWm0yLTVhLjUuNSAwIDAgMSAuNS41djNhLjUuNSAwIDAgMCAuNS41aDNhLjUuNSAwIDEgMSAwIDFoLTNBMS41IDEuNSAwIDAgMSA4IDYuNXYtM2EuNS41IDAgMCAxIC41LS41Wm0xLjY1MSAyLjE0NiA0LTRhLjUuNSAwIDAgMSAuNzY1LjYzOGwtLjA1Ny4wNy00IDRhLjUuNSAwIDAgMS0uNzY1LS42MzhsLjA1Ny0uMDcgNC00LTQgNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1pbmltaXplOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1pbnVzID0gZnVuY3Rpb24gRXVpSWNvbk1pbnVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgd2lkdGg6IDEwLFxuICAgIGhlaWdodDogMS41LFxuICAgIHg6IDMsXG4gICAgeTogNy4yNSxcbiAgICByeDogMC41XG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWludXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWludXNJbkNpcmNsZSA9IGZ1bmN0aW9uIEV1aUljb25NaW51c0luQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSAwQzExLjYzNiAwIDE1IDMuMzY0IDE1IDcuNVMxMS42MzYgMTUgNy41IDE1IDAgMTEuNjM2IDAgNy41IDMuMzY0IDAgNy41IDBabTAgLjg4MmE2LjYxOCA2LjYxOCAwIDEgMCAwIDEzLjIzNkE2LjYxOCA2LjYxOCAwIDAgMCA3LjUuODgyWk0zLjUgN2g4YS41LjUgMCAxIDEgMCAxaC04YS41LjUgMCAwIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWludXNJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NaW51c0luQ2lyY2xlRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvbk1pbnVzSW5DaXJjbGVGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy41IDBDMTEuNjM2IDAgMTUgMy4zNjQgMTUgNy41UzExLjYzNiAxNSA3LjUgMTUgMCAxMS42MzYgMCA3LjUgMy4zNjQgMCA3LjUgMFptLTQgN2EuNS41IDAgMCAwIDAgMWg4YS41LjUgMCAxIDAgMC0xaC04WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NaW51c0luU3F1YXJlID0gZnVuY3Rpb24gRXVpSWNvbk1pbnVzSW5TcXVhcmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC42MTEgN0g0LjM5Yy0uMjE2IDAtLjM5LjIyNC0uMzkuNXMuMTc0LjUuMzg5LjVoNi4yMjJjLjIxNSAwIC4zODktLjIyNC4zODktLjVzLS4xNzQtLjUtLjM4OS0uNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDNhMiAyIDAgMCAxIDItMmg5YTIgMiAwIDAgMSAyIDJ2OWEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlYzWm0yLTFoOWExIDEgMCAwIDEgMSAxdjlhMSAxIDAgMCAxLTEgMUgzYTEgMSAwIDAgMS0xLTFWM2ExIDEgMCAwIDEgMS0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWludXNJblNxdWFyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NbENsYXNzaWZpY2F0aW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ2xhc3NpZmljYXRpb25Kb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDE2djVoMi4wMzhhMTMuMTc5IDEzLjE3OSAwIDAgMCAwIDJIN3Y1SDV2LTVIMHYtMmg1di01aDJ6TTcgMHY1aDV2Mkg3djVINVY3SDBWNWg1VjBoMnptMTYgMHY1aDV2MmgtNXYyLjAzOGExMy4xNzkgMTMuMTc5IDAgMCAwLTIgMFY3aC01VjVoNVYwaDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxMGMzLjA3MyAwIDUuODc3IDEuMTU1IDggMy4wNTZ2My4yNTJBOS44MiA5LjgyIDAgMSAwIDE2LjMwNyAzMGgtMy4yNTFBMTEuOTU1IDExLjk1NSAwIDAgMSAxMCAyMmMwLTYuNjI3IDUuMzczLTEyIDEyLTEyem0xIDh2M2gzdjJoLTN2M2gtMnYtM2gtM3YtMmgzdi0zaDJ6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ2xhc3NpZmljYXRpb25Kb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWxDcmVhdGVBZHZhbmNlZEpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENyZWF0ZUFkdmFuY2VkSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMzJDNy4xNjMgMzIgMCAyNC44MzcgMCAxNlM3LjE2MyAwIDE2IDBzMTYgNy4xNjMgMTYgMTZoLTJjMC03LjczMi02LjI2OC0xNC0xNC0xNFMyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTR2MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI3IDIwdjEyaC0yVjIwaDJ6bS01IDR2OGgtMnYtOGgyem0xMC0ydjEwaC0yVjIyaDJ6TTE3IDl2Nmg2djJoLTZ2NmgtMnYtNkg5di0yaDZWOWgyelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbENyZWF0ZUFkdmFuY2VkSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1sQ3JlYXRlTXVsdGlNZXRyaWNKb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMjRhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04em0yNCAwYTQgNCAwIDEgMSAwIDggNCA0IDAgMCAxIDAtOHpNNCAyNmEyIDIgMCAxIDAgMCA0IDIgMiAwIDAgMCAwLTR6bTI0IDBhMiAyIDAgMSAwIDAgNCAyIDIgMCAwIDAgMC00ek0xNyA5djZoNnYyaC02djZoLTJ2LTZIOXYtMmg2VjloMnpNNCAwYTQgNCAwIDEgMSAwIDggNCA0IDAgMCAxIDAtOHptMjQgMGE0IDQgMCAxIDEgMCA4IDQgNCAwIDAgMSAwLTh6bTAgMmEyIDIgMCAxIDAgMCA0IDIgMiAwIDAgMCAwLTR6TTQgMmEyIDIgMCAxIDAgMCA0IDIgMiAwIDAgMCAwLTR6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjA3OCAyOS4wNWMuMTAyLjY3Ny4zIDEuMzIyLjU4MiAxLjkyQTE1Ljk2MyAxNS45NjMgMCAwIDEgMTYgMzJjLTEuOTkzIDAtMy45LS4zNjQtNS42Ni0xLjAzLjI4MS0uNTk4LjQ4LTEuMjQzLjU4Mi0xLjkyIDEuNTc0LjYxNCAzLjI4Ny45NSA1LjA3OC45NSAxLjc5MSAwIDMuNTA0LS4zMzYgNS4wNzgtLjk1em05Ljg5Mi0xOC43MUExNS45NjMgMTUuOTYzIDAgMCAxIDMyIDE2YzAgMS45OTMtLjM2NCAzLjktMS4wMyA1LjY2YTYuOTQ4IDYuOTQ4IDAgMCAwLTEuOTItLjU4MmMuNjE0LTEuNTc0Ljk1LTMuMjg3Ljk1LTUuMDc4IDAtMS43OTEtLjMzNi0zLjUwNC0uOTUtNS4wNzhhNi45NDggNi45NDggMCAwIDAgMS45Mi0uNTgyem0tMjkuOTQgMGMuNTk4LjI4MSAxLjI0My40OCAxLjkyLjU4MkExMy45NjUgMTMuOTY1IDAgMCAwIDIgMTZjMCAxLjc5MS4zMzYgMy41MDQuOTUgNS4wNzgtLjY3Ny4xMDItMS4zMjIuMy0xLjkyLjU4MkExNS45NjQgMTUuOTY0IDAgMCAxIDAgMTZjMC0xLjk5My4zNjQtMy45IDEuMDMtNS42NnpNMTYgMGMxLjk5MyAwIDMuOS4zNjQgNS42NiAxLjAzYTYuOTQ4IDYuOTQ4IDAgMCAwLS41ODIgMS45MkExMy45NjUgMTMuOTY1IDAgMCAwIDE2IDJjLTEuNzkxIDAtMy41MDQuMzM2LTUuMDc4Ljk1YTYuOTQ4IDYuOTQ4IDAgMCAwLS41ODItMS45MkExNS45NjQgMTUuOTY0IDAgMCAxIDE2IDB6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbENyZWF0ZU11bHRpTWV0cmljSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENyZWF0ZVBvcHVsYXRpb25Kb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAwYzUuNTIzIDAgMTAgNC40NzcgMTAgMTBzLTQuNDc3IDEwLTEwIDEwUzYgMTUuNTIzIDYgMTAgMTAuNDc3IDAgMTYgMHptMCAyYTggOCAwIDEgMCAwIDE2IDggOCAwIDAgMCAwLTE2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC40IDE5LjI4OGMuNDkyLjQwMiAxLjAxNS43NjYgMS41NjYgMS4wODdMNy4yNiAyMy42ODJhNCA0IDAgMSAxLTEuNDM3LTEuMjQzbDIuNTc4LTMuMTUxem0xNS4yIDAgMi41NzcgMy4xNWE0IDQgMCAxIDEtMS40MzcgMS4yNDNsLTIuNzA2LTMuMzA2YTEyLjAzMiAxMi4wMzIgMCAwIDAgMS41NjUtMS4wODd6TTQgMjRhMiAyIDAgMSAwIDAgNCAyIDIgMCAwIDAgMC00em0yNCAwYTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNHpNMTcgNnYzaDN2MmgtM3YzaC0ydi0zaC0zVjloM1Y2aDJ6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NbENyZWF0ZVNpbmdsZU1ldHJpY0pvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENyZWF0ZVNpbmdsZU1ldHJpY0pvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMyQzcuMTYzIDMyIDAgMjQuODM3IDAgMTZTNy4xNjMgMCAxNiAwczE2IDcuMTYzIDE2IDE2YTE2IDE2IDAgMCAxLTE2IDE2Wm0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMCAwIDE2IDJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMyAxNWgtNlY5aC0ydjZIOXYyaDZ2Nmgydi02aDZ6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlU2luZ2xlTWV0cmljSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXIgPSBmdW5jdGlvbiBFdWlJY29uTWxEYXRhVmlzdWFsaXplcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMjB2MTBoMTB2MkgwVjIwaDJ6bTMwIDB2MTJIMjB2LTJoMTBWMjBoMnpNMTIgNGE4IDggMCAxIDEgMCAxNiA4IDggMCAwIDEgMC0xNnptMCAyYTYgNiAwIDEgMCAwIDEyIDYgNiAwIDAgMCAwLTEyem0wLTZ2MkgydjEwSDBWMGgxMnptMjAgMHYxMmgtMlYySDIwVjBoMTJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS45OTcgMTIuMjUxYy0uMDE3LjY4OS0uMTA0IDEuMzYtLjI1MyAyLjAwNmE2IDYgMCAxIDEtNy40ODcgNy40ODdjLS42NDYuMTUtMS4zMTcuMjM2LTIuMDA2LjI1M2E4IDggMCAxIDAgOS43NDYtOS43NDZ6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWxPdXRsaWVyRGV0ZWN0aW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sT3V0bGllckRldGVjdGlvbkpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMTJ2Nmg2djJIMHYtOGgyem0xOCAwdjhoLTh2LTJoNnYtNmgyek04IDB2MkgydjZIMFYwaDh6bTEyIDB2OGgtMlYyaC02VjBoOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDI0YTQgNCAwIDEgMSAwIDggNCA0IDAgMCAxIDAtOHptMTIgMGE0IDQgMCAxIDEgMCA4IDQgNCAwIDAgMSAwLTh6bS0xMiAxLjc1YTIuMjUgMi4yNSAwIDEgMCAwIDQuNSAyLjI1IDIuMjUgMCAwIDAgMC00LjV6bTEyIDBhMi4yNSAyLjI1IDAgMSAwIDAgNC41IDIuMjUgMi4yNSAwIDAgMCAwLTQuNXpNMjggMTJhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04em0wIDEuNzVhMi4yNSAyLjI1IDAgMSAwIDAgNC41IDIuMjUgMi4yNSAwIDAgMCAwLTQuNXpNMTAgNmE0IDQgMCAxIDEgMCA4IDQgNCAwIDAgMSAwLTh6bTAgMS43NWEyLjI1IDIuMjUgMCAxIDAgMCA0LjUgMi4yNSAyLjI1IDAgMCAwIDAtNC41elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbE91dGxpZXJEZXRlY3Rpb25Kb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWxSZWdyZXNzaW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sUmVncmVzc2lvbkpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0IDBhOCA4IDAgMSAxLTQuOTA2IDE0LjMybC00Ljc3NCA0Ljc3NGE4IDggMCAxIDEtMS40MTQtMS40MTRsNC43NzQtNC43NzRBOCA4IDAgMCAxIDI0IDB6TTggMThhNiA2IDAgMSAwIDAgMTIgNiA2IDAgMCAwIDAtMTJ6TTI0IDJhNiA2IDAgMSAwIDAgMTIgNiA2IDAgMCAwIDAtMTJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMiAyMHYxMkgyMFYyMGgxMnptLTIgMmgtOHY4aDh2LTh6TTEyIDB2MTJIMFYwaDEyem0tMiAySDJ2OGg4VjJ6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sUmVncmVzc2lvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Nb2JpbGUgPSBmdW5jdGlvbiBFdWlJY29uTW9iaWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiAyLjVhLjUuNSAwIDAgMSAuNS0uNWgzYS41LjUgMCAwIDEgMCAxaC0zYS41LjUgMCAwIDEtLjUtLjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC41IDBBMS41IDEuNSAwIDAgMCAzIDEuNXYxM0ExLjUgMS41IDAgMCAwIDQuNSAxNmg3YTEuNSAxLjUgMCAwIDAgMS41LTEuNXYtMTNBMS41IDEuNSAwIDAgMCAxMS41IDBoLTdaTTQgMS41YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIC41LjVWNEg0VjEuNVpNNCAxM3YxLjVhLjUuNSAwIDAgMCAuNS41aDdhLjUuNSAwIDAgMCAuNS0uNVYxM0g0Wm0wLTFoOFY1SDR2N1pcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Nb2JpbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTW9vbiA9IGZ1bmN0aW9uIEV1aUljb25Nb29uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC43OTYgOS4wNDhjLTEuNTUyLTIuMjM4LTEuMTk5LTUuMzIzLjYxLTguMS0zLjQ3LS4xMi02LjYgMi4yMzItNy4yNjkgNS42NzItLjc0MiAzLjgyIDEuODMgNy41MzMgNS43NDkgOC4yOTRhNy4yMjYgNy4yMjYgMCAwIDAgNy41MjYtMy4yMThjLTIuNzk0LjE3Ny01LjI3LS43MTEtNi42MTYtMi42NDhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Nb29uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1vdmUgPSBmdW5jdGlvbiBFdWlJY29uTW92ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0Ljg4MyA3LjY0NGEuNS41IDAgMCAxIC4wMDYuNzA3bC0xLjk4NCAyLjAxNmEuNS41IDAgMCAxLS44NTYtLjM0N2wtLjAwOS0xLjAwNC0zLjAyNC4wMjRWMTJoMWEuNS41IDAgMCAxIC4zNTQuODU0bC0yIDJhLjUuNSAwIDAgMS0uNzA3IDBsLTItMkEuNS41IDAgMCAxIDYuMDE2IDEyaDFWOS4wNTdsLTMuMDA4LjAyNC4wMDguOTk1YS41LjUgMCAwIDEtLjg1LjM2TDEuMTQ4IDguNDU0YS41LjUgMCAwIDEtLjAwNS0uNzA3TDMuMTI3IDUuNzNhLjUuNSAwIDAgMSAuODU3LjM0N2wuMDA4IDEuMDA0IDMuMDI0LS4wMjVWNGgtMWEuNS41IDAgMCAxLS4zNTMtLjg1NGwyLTJhLjUuNSAwIDAgMSAuNzA3IDBsMiAyYS41LjUgMCAwIDEtLjM1NC44NTRoLTF2My4wNGwzLjAwOC0uMDI0LS4wMDgtLjk5NmEuNS41IDAgMCAxIC44NS0uMzZsMi4wMTcgMS45ODRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Nb3ZlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk5hbWVzcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25OYW1lc3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMSAxaDE0djE0SDFWMXptMTMgMTJ2MUgyVjJoMTJ2MTF6TTYgNmg0djRINlY2em0tMSA1VjVoNnY2SDV6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTmFtZXNwYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk5lc3RlZCA9IGZ1bmN0aW9uIEV1aUljb25OZXN0ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjUgMWEuNS41IDAgMCAxIDAgMUgzLjAwNkMyLjQ1IDIgMiAyLjQ1IDIgMy4wMDZ2OS45ODhDMiAxMy41NSAyLjQ1IDE0IDMuMDA2IDE0SDUuNWEuNS41IDAgMSAxIDAgMUgzLjAwNkEyLjAwNSAyLjAwNSAwIDAgMSAxIDEyLjk5NFYzLjAwNkMxIDEuODk4IDEuODk3IDEgMy4wMDYgMUg1LjVabTcuNDk0IDBjMS4wNTkgMCAxLjkyNC44MTggMiAxLjg1NmwuMDA2LjE1djkuOTg4YTIuMDA1IDIuMDA1IDAgMCAxLTEuODU2IDJsLS4xNS4wMDZIMTAuNWEuNS41IDAgMCAxLS4wOS0uOTkyTDEwLjUgMTRoMi40OTRjLjUxNiAwIC45NDEtLjM4OCAxLS44ODhsLjAwNi0uMTE4VjMuMDA2YzAtLjUxNi0uMzg4LS45NDEtLjg4OC0xTDEyLjk5NCAySDEwLjVhLjUuNSAwIDAgMS0uMDktLjk5MkwxMC41IDFoMi40OTRaTTUgN2ExIDEgMCAxIDEgMCAyIDEgMSAwIDAgMSAwLTJabTMgMGExIDEgMCAxIDEgMCAyIDEgMSAwIDAgMSAwLTJabTMgMGExIDEgMCAxIDEgMCAyIDEgMSAwIDAgMSAwLTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25OZXN0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTmV3Q2hhdCA9IGZ1bmN0aW9uIEV1aUljb25OZXdDaGF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0YS41LjUgMCAwIDEgLjUuNVY2SDEwYS41LjUgMCAwIDEgMCAxSDguNXYxLjVhLjUuNSAwIDAgMS0xIDBWN0g2YS41LjUgMCAwIDEgMC0xaDEuNVY0LjVBLjUuNSAwIDAgMSA4IDRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMSA0YTIuNSAyLjUgMCAwIDEgMi41LTIuNWg5QTIuNSAyLjUgMCAwIDEgMTUgNHY1YTIuNSAyLjUgMCAwIDEtMi41IDIuNUg3LjcwN0w0LjUgMTQuNzA3VjExLjVoLTFBMi41IDIuNSAwIDAgMSAxIDlWNFptMi41LTEuNUExLjUgMS41IDAgMCAwIDIgNHY1YTEuNSAxLjUgMCAwIDAgMS41IDEuNWgydjEuNzkzTDcuMjkzIDEwLjVIMTIuNUExLjUgMS41IDAgMCAwIDE0IDlWNGExLjUgMS41IDAgMCAwLTEuNS0xLjVoLTlaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTmV3Q2hhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ob2RlID0gZnVuY3Rpb24gRXVpSWNvbk5vZGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgMS40NDNhMSAxIDAgMCAwLTEgMEwyLjU3MiA0LjI5YTEgMSAwIDAgMC0uNS44NjZ2NS42OWExIDEgMCAwIDAgLjUuODY2TDcuNSAxNC41NTdhMSAxIDAgMCAwIDEgMGw0LjkyOC0yLjg0NmExIDEgMCAwIDAgLjUtLjg2NnYtNS42OWExIDEgMCAwIDAtLjUtLjg2Nkw4LjUgMS40NDNaTTkgLjU3N2w0LjkyOCAyLjg0NmEyIDIgMCAwIDEgMSAxLjczMnY1LjY5YTIgMiAwIDAgMS0xIDEuNzMyTDkgMTUuNDIzYTIgMiAwIDAgMS0yIDBsLTQuOTI4LTIuODQ2YTIgMiAwIDAgMS0xLTEuNzMydi01LjY5YTIgMiAwIDAgMSAxLTEuNzMyTDcgLjU3N2EyIDIgMCAwIDEgMiAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTm9kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25OdW1iZXIgPSBmdW5jdGlvbiBFdWlJY29uTnVtYmVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuODA4IDEwLjE5N0g2Ljc5Nkw1Ljg1OSAxM0g0LjQ4NWwuOTM3LTIuODAzSDMuOTY2bC4yMTktMS4yNWgxLjY0N2wuNjA4LTEuODA1SDQuOTkxbC4yMjYtMS4yNTFoMS42NGwuOTUtMi44NDRoMS4zNjhsLS45NSAyLjg0NGgxLjAxOGwuOTUtMi44NDRoMS4zNzRsLS45NSAyLjg0NGgxLjUxbC0uMjE4IDEuMjVoLTEuNzAybC0uNjA4IDEuODA1aDEuNDk3bC0uMjE5IDEuMjUxSDkuMTgyTDguMjUyIDEzSDYuODc4bC45My0yLjgwM3ptLS42MDItMS4yNWgxLjAxMmwuNjE1LTEuODA1SDcuODE0bC0uNjA4IDEuODA0elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTnVtYmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk9mZmxpbmUgPSBmdW5jdGlvbiBFdWlJY29uT2ZmbGluZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTYuNTE3IDEyLjI3MSAxLjI1NC0xLjI1NGExLjUgMS41IDAgMSAxLTEuMjU0IDEuMjU0Wm0yLjk0NS0yLjk0NC43NC0uNzRjLjM2MS4yMDguNjk0LjQ2Ny45ODcuNzcyYS41LjUgMCAwIDEtLjcyMS42OTMgMy40MjQgMy40MjQgMCAwIDAtMS4wMDYtLjcyNVptMi4xNjItMi4xNjMuNzE2LS43MTVjLjMwOC4yMzIuNTk5LjQ5Ljg3Ljc3MmEuNS41IDAgMSAxLS43MjIuNjkyIDYuMjYgNi4yNiAwIDAgMC0uODY0LS43NDlaTTcuMDYxIDYuMDdBNi4xOTggNi4xOTggMCAwIDAgMy41NCA3Ljg4NWEuNS41IDAgMCAxLS43MTctLjY5NyA3LjE5OSA3LjE5OSAwIDAgMSA1LjMwOS0yLjE4N2wtMS4wNyAxLjA3Wm02LjY3Mi0xLjAxNC43MS0uNzFjLjI3NC4yMy41MzYuNDc2Ljc4Ni43MzZhLjUuNSAwIDAgMS0uNzIxLjY5MiA5LjEgOS4xIDAgMCAwLS43NzUtLjcxOFptLTMuODA3LTEuODVBOS4wNiA5LjA2IDAgMCAwIDggM2E4Ljk5IDguOTkgMCAwIDAtNi40NjkgMi43MzQuNS41IDAgMSAxLS43MTctLjY5N0E5Ljk5IDkuOTkgMCAwIDEgOCAyYy45NDQgMCAxLjg2OC4xMzEgMi43NS4zODJsLS44MjQuODI0Wk04IDEzYS41LjUgMCAxIDAgMC0xIC41LjUgMCAwIDAgMCAxWm0tNS40MjQgMWEuNS41IDAgMCAxLS43MDctLjcwN0wxNC4xNDYgMS4xNDZhLjUuNSAwIDAgMSAuNzA4LjcwOEwyLjU3NiAxNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk9mZmxpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uT25saW5lID0gZnVuY3Rpb24gRXVpSWNvbk9ubGluZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRhMS41IDEuNSAwIDEgMSAwLTMgMS41IDEuNSAwIDAgMSAwIDNabTAtMWEuNS41IDAgMSAwIDAtMSAuNS41IDAgMCAwIDAgMVptMy4xODktMy42NGEuNS41IDAgMCAxLS43MjEuNjkyQTMuNDA4IDMuNDA4IDAgMCAwIDggOWMtLjkzNyAwLTEuODEzLjM3OC0yLjQ1MyAxLjAzN2EuNS41IDAgMCAxLS43MTctLjY5N0E0LjQwOCA0LjQwOCAwIDAgMSA4IDhjMS4yMiAwIDIuMzYxLjQ5NyAzLjE4OSAxLjM2Wm0yLjAyLTIuMTRhLjUuNSAwIDEgMS0uNzIxLjY5M0E2LjIgNi4yIDAgMCAwIDggNmE2LjE5OSA2LjE5OSAwIDAgMC00LjQ2IDEuODg1LjUuNSAwIDAgMS0uNzE4LS42OTdBNy4xOTkgNy4xOTkgMCAwIDEgOCA1YTcuMiA3LjIgMCAwIDEgNS4yMSAyLjIyWm0yLjAyLTIuMTM4YS41LjUgMCAwIDEtLjcyMS42OTJBOC45OSA4Ljk5IDAgMCAwIDggM2E4Ljk5IDguOTkgMCAwIDAtNi40NjkgMi43MzQuNS41IDAgMSAxLS43MTctLjY5N0E5Ljk5IDkuOTkgMCAwIDEgOCAyYTkuOTkgOS45OSAwIDAgMSA3LjIzIDMuMDgyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uT25saW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBhY2thZ2UgPSBmdW5jdGlvbiBFdWlJY29uUGFja2FnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTE0LjQ0NyAzLjcyNC02LTNhMSAxIDAgMCAwLS44OTQgMGwtNiAzQTEgMSAwIDAgMCAxIDQuNjE4djYuNzY0YTEgMSAwIDAgMCAuNTUzLjg5NGw2IDNhMSAxIDAgMCAwIC44OTQgMGw2LTNhMSAxIDAgMCAwIC41NTMtLjg5NFY0LjYxOGExIDEgMCAwIDAtLjU1My0uODk0Wk01Ljg3MSA1Ljg5N2w1LjM0My0yLjY3MiAyLjE1OCAxLjA3OUw4IDYuOTQzWk04IDEuNjE4bDIuMDk2IDEuMDQ4LTUuMzUzIDIuNjc3LTIuMTE1LTEuMDM5Wk0yIDUuMTFsMi4yNSAxLjEwNVY5YS41LjUgMCAwIDAgMSAwVjYuNzA2TDcuNSA3LjgxMXY2LjMyMUwyIDExLjM4MlptNi41IDkuMDIydi02LjMyTDE0IDUuMTF2Ni4yNzJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYWNrYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBhZ2VTZWxlY3QgPSBmdW5jdGlvbiBFdWlJY29uUGFnZVNlbGVjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zIDFhMSAxIDAgMCAwLTEgMXYxMmExIDEgMCAwIDAgMSAxaDVhNC45OTUgNC45OTUgMCAwIDEtLjU4NC0xSDNWMmg3djJhMSAxIDAgMCAwIDEgMWgydjIuMWMuMzQ4LjA3LjY4Mi4xNzcgMSAuMzE2VjRhMSAxIDAgMCAwLS4yOTMtLjcwN2wtMi0yQTEgMSAwIDAgMCAxMSAxSDN6bTEzIDExYTQgNCAwIDEgMS04IDAgNCA0IDAgMCAxIDggMHptLTEuNjQ2LTEuMzU0YS41LjUgMCAwIDEgMCAuNzA4bC0yLjUgMi41YS41LjUgMCAwIDEtLjcwOCAwbC0xLTFhLjUuNSAwIDAgMSAuNzA4LS43MDhsLjY0Ni42NDcgMi4xNDYtMi4xNDdhLjUuNSAwIDAgMSAuNzA4IDB6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYWdlU2VsZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBhZ2VzU2VsZWN0ID0gZnVuY3Rpb24gRXVpSWNvblBhZ2VzU2VsZWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMgMWExIDEgMCAwIDEgMS0xaDhhMSAxIDAgMCAxIC43MDcuMjkzbDIgMkExIDEgMCAwIDEgMTUgM3Y1YTQuOTk1IDQuOTk1IDAgMCAwLTEtLjU4NFY0aC0yYTEgMSAwIDAgMS0xLTFWMUg0djEyaDMuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFINGExIDEgMCAwIDEtMS0xVjF6bTUgMTRIMlYyYTEgMSAwIDAgMC0xIDF2MTJhMSAxIDAgMCAwIDEgMWg3YTUuMDI5IDUuMDI5IDAgMCAxLTEtMXptOC0zYTQgNCAwIDEgMS04IDAgNCA0IDAgMCAxIDggMHptLTEuNjQ2LTEuMzU0YS41LjUgMCAwIDEgMCAuNzA4bC0yLjUgMi41YS41LjUgMCAwIDEtLjcwOCAwbC0xLTFhLjUuNSAwIDAgMSAuNzA4LS43MDhsLjY0Ni42NDcgMi4xNDYtMi4xNDdhLjUuNSAwIDAgMSAuNzA4IDB6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYWdlc1NlbGVjdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QYWludCA9IGZ1bmN0aW9uIEV1aUljb25QYWludChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjk5MyA4LjE3YzAgLjgzLS42NzMgMS41MDctMS40OTkgMS41MDdINS40OThBMS41MDUgMS41MDUgMCAwIDEgMy45OTkgOC4xN1Y2LjY2Mmg3Ljk5NFY4LjE3Wm0tMi45OTggNS45OThjMCAuNDU1LS40NDguODI3LS45OTkuODI3LS41NSAwLTEtLjM3Mi0xLS44Mjd2LTMuNDg2aDJ2My40ODZaTTQgNS42NThoMS4yNjJWMS4wMDVINHY0LjY1M1ptMi4yNjEgMGgxLjI0NFYxLjAwNUg2LjI2djQuNjUzWm0yLjI0NCAwaDEuMjM1VjEuMDA1SDguNTA0djQuNjUzWm0yLjIzNCAwaDEuMjU0VjEuMDA1aC0xLjI1NHY0LjY1M1pNMy4wMDggMCAzIDguMTdhMi41MDkgMi41MDkgMCAwIDAgMi40OTggMi41MTJoLjV2My40ODZjMCAxLjAxLjg5NiAxLjgzMiAxLjk5OCAxLjgzMiAxLjEwMiAwIDEuOTk4LS44MjIgMS45OTgtMS44MzJ2LTMuNDg2aC41YTIuNTA5IDIuNTA5IDAgMCAwIDIuNDk4LTIuNTEyTDEzIDBIMy4wMDhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYWludDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QYWxldHRlID0gZnVuY3Rpb24gRXVpSWNvblBhbGV0dGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDlhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm0yIDJhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWk01IDZhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm00LTJhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWm0yIDJhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxYTcgNyAwIDAgMCAwIDE0aDJhMiAyIDAgMSAwIDAtNCAxIDEgMCAxIDEgMC0yaDMuOThDMTQuNTE1IDkgMTUgOC41ODMgMTUgOGE3IDcgMCAwIDAtNy03Wk0yIDhhNiA2IDAgMCAxIDEyLS4wMDUuMDM1LjAzNSAwIDAgMS0uMDIuMDA1SDEwYTIgMiAwIDEgMCAwIDQgMSAxIDAgMSAxIDAgMkg4YTYgNiAwIDAgMS02LTZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYWxldHRlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBhcGVyQ2xpcCA9IGZ1bmN0aW9uIEV1aUljb25QYXBlckNsaXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05Ljg0IDIuMDE5IDMuMDQ2IDguNTdjLS45ODcuOTUyLTEuMTMzIDIuNTE3LS4xOTkgMy41MTYuOTUxIDEuMDIxIDIuNTggMS4xMDYgMy42NC4xOS4wMzQtLjAzLjA2OC0uMDYxLjEtLjA5Mmw1LjY1NS01LjQ1MmEuNDg0LjQ4NCAwIDAgMCAwLS43MDMuNTMuNTMgMCAwIDAtLjcyOSAwTDUuOTIgMTEuNDIxYy0uNTcyLjU1MS0xLjUwNS42NTctMi4xMzEuMTYzYTEuNDU1IDEuNDU1IDAgMCAxLS4xMTgtMi4yMTFsNi44OTktNi42NTFhMi42NDYgMi42NDYgMCAwIDEgMy42NDQgMCAyLjQyMiAyLjQyMiAwIDAgMSAwIDMuNTEzTDcuMyAxMi45MDFjLTEuMzMzIDEuMjg1LTMuNDk3IDEuNDkzLTQuOTUuMzM2LTEuNTQtMS4yMi0xLjc2NC0zLjQxMS0uNS00Ljg5N2EzLjMzIDMuMzMgMCAwIDEgLjIzOC0uMjUybDUuNzgtNS41NzJhLjQ4NC40ODQgMCAwIDAgMC0uNzAzLjUzLjUzIDAgMCAwLS43MyAwbC01Ljc4IDUuNTcyYTQuMzYgNC4zNiAwIDAgMCAwIDYuMzI0YzIuMTg4IDIuMTA5IDUuMjAyIDEuMzEgNi42Ni0uMDk1bDYuOTI1LTYuNjc2YTMuMzkgMy4zOSAwIDAgMCAwLTQuOTJDMTMuNTM0LjY2IDExLjI1LjY2IDkuODQxIDIuMDE5elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFwZXJDbGlwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBhcnRpYWwgPSBmdW5jdGlvbiBFdWlJY29uUGFydGlhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNjY0IDE0Ljg3MWE3IDcgMCAwIDEtMi40Mi0xMi43NzguNS41IDAgMCAxIC42MTIuMDZjLjQ1Ni40MzEgOC4yMTYgOC4yMTIgOC45OCA5LjAwMmEuNS41IDAgMCAxIC4wNjMuNjE4IDcuMDAyIDcuMDAyIDAgMCAxLTcuMjM1IDMuMDk4Wm02LjE2OC0zLjMxMmExOTYxLjczMyAxOTYxLjczMyAwIDAgMC04LjM3Ny04LjQgNiA2IDAgMSAwIDguMzc4IDguNFptMi4wOTUtMi41NDhhLjUuNSAwIDEgMS0uOTktLjE0NGMuMDEtLjA2Ni4wMS0uMDY2LjAxOC0uMTMzYTYuMDA3IDYuMDA3IDAgMCAwLS4wMzQtMS43MTQuNS41IDAgMSAxIC45ODctLjE2M2MuMTA4LjY1NS4xMjIgMS4zMjYuMDQgMS45OTlsLS4wMjEuMTU1Wm0tMS4yNzMtNS4xMzhhLjUuNSAwIDEgMS0uODA4LjU5IDYuMDI2IDYuMDI2IDAgMCAwLTEuMzA0LTEuMzA4LjUuNSAwIDAgMSAuNTktLjgwNiA3LjAyNiA3LjAyNiAwIDAgMSAxLjUyMiAxLjUyNFpNOS4xNjkgMS4wOThhLjUuNSAwIDEgMS0uMTY2Ljk4NiA2LjEwNSA2LjEwNSAwIDAgMC0xLjg0OS0uMDI2LjUuNSAwIDAgMS0uMTQtLjk5IDcuMDIgNy4wMiAwIDAgMSAyLjE1NS4wM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhcnRpYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGF1c2UgPSBmdW5jdGlvbiBFdWlJY29uUGF1c2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDJhMSAxIDAgMCAwLTEgMXYxMGExIDEgMCAxIDAgMiAwVjNhMSAxIDAgMCAwLTEtMXptNiAwYTEgMSAwIDAgMC0xIDF2MTBhMSAxIDAgMSAwIDIgMFYzYTEgMSAwIDAgMC0xLTF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYXVzZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QYXltZW50ID0gZnVuY3Rpb24gRXVpSWNvblBheW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNTg2IDIuNTg2QTIgMiAwIDAgMCAwIDRoMWExIDEgMCAwIDEgMS0xVjJhMiAyIDAgMCAwLTEuNDE0LjU4NlpNMiAyaDEwLjVhLjUuNSAwIDAgMSAwIDFIMlYyWk0wIDRoMXY2LjVhLjUuNSAwIDAgMS0xIDBWNFptMi41ODYuNTg2QTIgMiAwIDAgMCAyIDZoMWExIDEgMCAwIDEgMS0xVjRhMiAyIDAgMCAwLTEuNDE0LjU4NlptMCA4LjgyOEEyIDIgMCAwIDEgMiAxMmgxYTEgMSAwIDAgMCAxIDF2MWEyIDIgMCAwIDEtMS40MTQtLjU4NlptMTIuODI4LTguODI4QTIgMiAwIDAgMSAxNiA2aC0xYTEgMSAwIDAgMC0xLTFWNGEyIDIgMCAwIDEgMS40MTQuNTg2Wm0wIDguODI4QTIgMiAwIDAgMCAxNiAxMmgtMWExIDEgMCAwIDEtMSAxdjFhMiAyIDAgMCAwIDEuNDE0LS41ODZaTTQgNGgxMHYxSDR6TTMgN2gxMnYxSDN6bTEgNmgxMHYxSDR6TTIgNmgxdjZIMnptMTMgMGgxdjZoLTF6bS01LjUgNGEuNS41IDAgMCAxIDAgMUg3LjQ5NmEuNS41IDAgMCAxIDAtMUg5LjVabTQgMGEuNS41IDAgMCAxIDAgMWgtMi4wMDRhLjUuNSAwIDAgMSAwLTFIMTMuNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBheW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGVuY2lsID0gZnVuY3Rpb24gRXVpSWNvblBlbmNpbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjE0OCAzLjE0OCAxMSAybC05IDl2M2gzbDktOS0xLjE0NC0xLjE0NC04LjAwMiA3Ljk5OGEuNTAyLjUwMiAwIDAgMS0uNzA4IDAgLjUwMi41MDIgMCAwIDEgMC0uNzA4bDguMDAyLTcuOTk4Wk0xMSAxYy4yNTYgMCAuNTEyLjA5OC43MDcuMjkzbDMgM2EuOTk5Ljk5OSAwIDAgMSAwIDEuNDE0bC05IDlBLjk5Ny45OTcgMCAwIDEgNSAxNUgyYTEgMSAwIDAgMS0xLTF2LTNjMC0uMjY1LjEwNS0uNTIuMjkzLS43MDdsOS05QS45OTcuOTk3IDAgMCAxIDExIDFaTTUgMTRIMnYtM2wzIDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QZW5jaWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGVyY2VudCA9IGZ1bmN0aW9uIEV1aUljb25QZXJjZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUgOGMxLjEwNSAwIDItMS4xMiAyLTIuNVM2LjEwNSAzIDUgMyAzIDQuMTIgMyA1LjUgMy44OTUgOCA1IDh6bTAtMWMuMzU2IDAgMS0uNDUyIDEtMS41UzUuMzU2IDQgNSA0cy0xIC40NTItMSAxLjVTNC42NDQgNyA1IDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC41IDNIMTJMNS41IDEzSDRsNi41LTEwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzIDEwLjVjMCAxLjM4LS44OTUgMi41LTIgMi41cy0yLTEuMTItMi0yLjVTOS44OTUgOCAxMSA4czIgMS4xMiAyIDIuNXptLTEgMGMwIDEuMDQ4LS42NDQgMS41LTEgMS41cy0xLS40NTItMS0xLjUuNjQ0LTEuNSAxLTEuNSAxIC40NTIgMSAxLjV6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QZXJjZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBpbiA9IGZ1bmN0aW9uIEV1aUljb25QaW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxMWg0LjVhLjUuNSAwIDEgMCAwLTFoLTEwYS41LjUgMCAwIDAgMCAxSDd2NC4yNWMwIC40MTQuMjI0Ljc1LjUuNzVzLjUtLjMzNi41LS43NVYxMVpNNCA0aDF2Nkg0VjRabTYgMGgxdjZoLTFWNFpNNC4yODYgMkM0LjA4IDIgNCAyLjA2MyA0IDJ2MWMwLS4wNjMuMDggMCAuMjg2IDBoNi40MjhDMTAuOTIgMyAxMSAyLjkzNyAxMSAzVjJjMCAuMDYzLS4wOCAwLS4yODYgMEg0LjI4NlptMC0xaDYuNDI4QzExLjQyNCAxIDEyIDEuNDQ4IDEyIDJ2MWMwIC41NTItLjU3NiAxLTEuMjg2IDFINC4yODZDMy41NzYgNCAzIDMuNTUyIDMgM1YyYzAtLjU1Mi41NzYtMSAxLjI4Ni0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGluOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBpbkZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25QaW5GaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDExaDQuNWEuNS41IDAgMSAwIDAtMWgtMTBhLjUuNSAwIDEgMCAwIDFIOHY0LjI1YzAgLjQxNC4yMjQuNzUuNS43NXMuNS0uMzM2LjUtLjc1VjExWk01IDRoN3Y2SDVWNFptLjI4Ni0zaDYuNDI4QzEyLjQyNCAxIDEzIDEuNDQ4IDEzIDJ2MWMwIC41NTItLjU3NiAxLTEuMjg2IDFINS4yODZDNC41NzYgNCA0IDMuNTUyIDQgM1YyYzAtLjU1Mi41NzYtMSAxLjI4Ni0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGluRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBpcGVCcmVha3MgPSBmdW5jdGlvbiBFdWlJY29uUGlwZUJyZWFrcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgM2g5LjVhMi41IDIuNSAwIDAgMSAwIDVINnYxTDQgNy41IDYgNnYxaDUuNWExLjUgMS41IDAgMCAwIDAtM0gyVjNabTEgM0gydjNoMVY2Wm0wIDRIMnYzaDF2LTNabTMgMC0yIDEuNUw2IDEzdi0xaDUuNWEyLjUgMi41IDAgMCAwIDIuMTY1LTMuNzUgMy40OTcgMy40OTcgMCAwIDEtLjg2NS41QTEuNSAxLjUgMCAwIDEgMTEuNSAxMUg2di0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGlwZUJyZWFrczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QaXBlTm9CcmVha3MgPSBmdW5jdGlvbiBFdWlJY29uUGlwZU5vQnJlYWtzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAySDd2M2gxVjRoM1YzSDhWMlptLTUgOEgydjNoMXYtMWgzdi0xSDN2LTFabTQgMGgxdjFoM3YxSDh2MUg3di0zWm02IDBoLTF2M2gxdi0xaDF2LTFoLTF2LTFaTTUgNmgxdjFoM3YxSDZ2MUg1VjZabTYgMGgtMXYzaDFWOGgzVjdoLTNWNlptMS00aDF2MWgxdjFoLTF2MWgtMVYyWk02IDNIMnYxaDRWM1pNMiA3aDJ2MUgyVjdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QaXBlTm9CcmVha3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGl2b3QgPSBmdW5jdGlvbiBFdWlJY29uUGl2b3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi44OSAxMy44NDcgMTEuMjM5IDUuNWEuNTIyLjUyMiAwIDAgMC0uNzM3LS43MzdMMi4xNTQgMTMuMTFhLjUyMi41MjIgMCAwIDAgLjczOC43MzhaTTE0IDYuNjk2YS41MjIuNTIyIDAgMSAxLTEuMDQzIDB2LTMuMTNhLjUyMi41MjIgMCAwIDAtLjUyMi0uNTIzaC0zLjEzYS41MjIuNTIyIDAgMSAxIDAtMS4wNDNoMy4xM0MxMy4yOTkgMiAxNCAyLjcgMTQgMy41NjV2My4xM1pcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QaXZvdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QbGF5ID0gZnVuY3Rpb24gRXVpSWNvblBsYXkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjYwOCAzLjA2M0M0LjM0NSAyLjg5NSA0IDMuMDg5IDQgMy40MTh2OS4xNjdjMCAuMzI5LjM0NS41MjMuNjA4LjM1Nmw3LjItNC41ODRhLjQyNi40MjYgMCAwIDAgMC0uNzExbC03LjItNC41ODNabS41MzgtLjg0NCA3LjIgNC41ODNhMS40MjYgMS40MjYgMCAwIDEgMCAyLjM5OWwtNy4yIDQuNTgzQzQuMjEgMTQuMzggMyAxMy42OTYgMyAxMi41ODVWMy40MThDMyAyLjMwNyA0LjIxIDEuNjI0IDUuMTQ2IDIuMjJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbGF5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBsYXlGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uUGxheUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTEyLjM0NSA2LjgwMS03LjItNC41ODFDNC4yMSAxLjYyNSAzIDIuMzA4IDMgMy40MTl2OS4xNjJjMCAxLjExMSAxLjIxIDEuNzk0IDIuMTQ2IDEuMTk5bDcuMi00LjU4MWExLjQyNSAxLjQyNSAwIDAgMCAwLTIuMzk4elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGxheUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QbHVzID0gZnVuY3Rpb24gRXVpSWNvblBsdXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjI1IDNhLjUuNSAwIDAgMSAuNS41djMuNzVoMy43NWEuNS41IDAgMCAxIC41LjV2LjVhLjUuNSAwIDAgMS0uNS41SDguNzV2My43NWEuNS41IDAgMCAxLS41LjVoLS41YS41LjUgMCAwIDEtLjUtLjVWOC43NUgzLjVhLjUuNSAwIDAgMS0uNS0uNXYtLjVhLjUuNSAwIDAgMSAuNS0uNWgzLjc1VjMuNWEuNS41IDAgMCAxIC41LS41aC41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGx1czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QbHVzSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uUGx1c0luQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggN2gzLjVhLjUuNSAwIDEgMSAwIDFIOHYzLjVhLjUuNSAwIDEgMS0xIDBWOEgzLjVhLjUuNSAwIDAgMSAwLTFIN1YzLjVhLjUuNSAwIDAgMSAxIDBWN1ptLS41LTdDMTEuNjM2IDAgMTUgMy4zNjQgMTUgNy41UzExLjYzNiAxNSA3LjUgMTUgMCAxMS42MzYgMCA3LjUgMy4zNjQgMCA3LjUgMFptMCAuODgyYTYuNjE4IDYuNjE4IDAgMSAwIDAgMTMuMjM2QTYuNjE4IDYuNjE4IDAgMCAwIDcuNS44ODJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGx1c0luQ2lyY2xlRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggN1YzLjVhLjUuNSAwIDAgMC0xIDBWN0gzLjVhLjUuNSAwIDAgMCAwIDFIN3YzLjVhLjUuNSAwIDEgMCAxIDBWOGgzLjVhLjUuNSAwIDEgMCAwLTFIOFptLS41IDhhNy41IDcuNSAwIDEgMSAwLTE1IDcuNSA3LjUgMCAwIDEgMCAxNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QbHVzSW5TcXVhcmUgPSBmdW5jdGlvbiBFdWlJY29uUGx1c0luU3F1YXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0LjM4OVY3aDIuNjExYy4yMTUgMCAuMzg5LjIyNC4zODkuNXMtLjE3NC41LS4zODkuNUg4djIuNjExYzAgLjIxNS0uMjI0LjM4OS0uNS4zODlzLS41LS4xNzQtLjUtLjM4OVY4SDQuMzg5QzQuMTc0IDggNCA3Ljc3NiA0IDcuNXMuMTc0LS41LjM4OS0uNUg3VjQuMzg5QzcgNC4xNzQgNy4yMjQgNCA3LjUgNHMuNS4xNzQuNS4zODlaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMSAzYTIgMiAwIDAgMSAyLTJoOWEyIDIgMCAwIDEgMiAydjlhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWM1ptMi0xaDlhMSAxIDAgMCAxIDEgMXY5YTEgMSAwIDAgMS0xIDFIM2ExIDEgMCAwIDEtMS0xVjNhMSAxIDAgMCAxIDEtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsdXNJblNxdWFyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Qb3BvdXQgPSBmdW5jdGlvbiBFdWlJY29uUG9wb3V0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgOC41YS41LjUgMCAxIDEgMSAwVjEyYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgzLjVhLjUuNSAwIDAgMSAwIDFINGExIDEgMCAwIDAtMSAxdjhhMSAxIDAgMCAwIDEgMWg4YTEgMSAwIDAgMCAxLTFWOC41Wm0tNS4xMi4zMzlhLjUuNSAwIDEgMS0uNzA2LS43MDdMMTMuMzA1IDJIMTAuNWEuNS41IDAgMSAxIDAtMUgxNGExIDEgMCAwIDEgMSAxdjMuNWEuNS41IDAgMSAxLTEgMFYyLjcyTDcuODggOC44MzhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Qb3BvdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUHVzaCA9IGZ1bmN0aW9uIEV1aUljb25QdXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xNzEgNS4xNSAxMC4xMTQgN0gxLjU1NkMxLjI0OSA3IDEgNy4yMjQgMSA3LjVzLjI0OS41LjU1Ni41aDguNTI2bC0xLjkxIDEuODJhLjUyLjUyIDAgMCAwIDAgLjc3Yy4yMjcuMjEzLjYuMjEzLjgyOCAwbDIuMDUtMS45NWExLjU1MiAxLjU1MiAwIDAgMCAwLTIuMzFMOSA0LjM4YS42MTcuNjE3IDAgMCAwLS44MjkgMCAuNTIuNTIgMCAwIDAgMCAuNzd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjgwNCAxMi43OTJBLjk5My45OTMgMCAwIDEgNiAxMS44MlYxMEg1djEuODI2YzAgLjk0NS42NzMgMS43NiAxLjYwOCAxLjk0NWw2IDEuMTlBMS45OTIgMS45OTIgMCAwIDAgMTUgMTMuMDE2VjEuOTg0QTIgMiAwIDAgMCAxMi42MDguMDRsLTYgMS4xOUM1LjY3MyAxLjQxNSA1IDIuMjMgNSAzLjE3NVY1aDFWMy4xOGMwLS40NzIuMzM2LS44NzkuODA0LS45NzJsNi0xLjE4OUExIDEgMCAwIDEgMTQgMS45OTF2MTEuMDE4YS45OTUuOTk1IDAgMCAxLTEuMTk2Ljk3MmwtNi0xLjE5elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUHVzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25RdWVzdGlvbkluQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE0QTYgNiAwIDEgMSA4IDJhNiA2IDAgMCAxIDAgMTJabTAtMUE1IDUgMCAxIDAgOCAzYTUgNSAwIDAgMCAwIDEwWm0tLjE4Ni0xLjA2NUEuNzg1Ljc4NSAwIDAgMSA3IDExLjEyYzAtLjQ4LjM0LS44Mi44MTQtLjgyLjQ3NSAwIC44MDkuMzQuODA5LjgyIDAgLjQ3NS0uMzM0LjgxNS0uODA5LjgxNVpNNS45IDYuMzE3QzUuOTYgNS4xNjggNi43NTUgNC40IDguMDQ4IDQuNGMxLjIxOCAwIDIuMDkxLjc1OSAyLjA5MSAxLjggMCAuNzM2LS4zNiAxLjMwNC0xLjAzIDEuNzA3LS41Ni4zMy0uNzE3LjU2LS43MTcgMS4wMjJ2LjMwNWwtLjEuMUg3LjQ3bC0uMS0uMXYtLjQzMWMtLjAwNS0uNjQ2LjMwMi0xLjEwNC45ODctMS41MTQuNTI3LS4zMjIuNzA4LS41OS43MDgtMS4wNDcgMC0uNTM2LS40MTYtLjkxLTEuMDUtLjkxLS42NTIgMC0xLjA2NC4zNzQtMS4xMTIuOTk4bC0uMS4wOTJINmwtLjEtLjEwNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUXVvdGUgPSBmdW5jdGlvbiBFdWlJY29uUXVvdGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02Ljg0OCAyLjQ3YTEgMSAwIDAgMS0uMzE4IDEuMzc4QTcuMjg0IDcuMjg0IDAgMCAwIDMuNzUgNy4wMSAzIDMgMCAxIDEgMSAxMHYtLjAyN2EzLjUyMSAzLjUyMSAwIDAgMSAuMDEtLjIzMmMuMDA5LS4xNS4wMjctLjM2LjA2Mi0uNjE4LjA3LS41MTMuMjA3LTEuMjIuNDg0LTIuMDE0LjU1Mi0xLjU5IDEuNjctMy41NTUgMy45MTQtNC45NTdhMSAxIDAgMCAxIDEuMzc4LjMxOHptNyAwYTEgMSAwIDAgMS0uMzE4IDEuMzc4IDcuMjgzIDcuMjgzIDAgMCAwLTIuNzggMy4xNjJBMyAzIDAgMSAxIDggMTB2LS4wMjdhMy41MjEgMy41MjEgMCAwIDEgLjAxLS4yMzJjLjAwOS0uMTUuMDI3LS4zNi4wNjItLjYxOC4wNy0uNTEzLjIwNy0xLjIyLjQ4NC0yLjAxNC41NTItMS41OSAxLjY3LTMuNTU1IDMuOTE0LTQuOTU3YTEgMSAwIDAgMSAxLjM3OC4zMTh6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25RdW90ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25SZWZyZXNoID0gZnVuY3Rpb24gRXVpSWNvblJlZnJlc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4yMjggMi45NDJhLjUuNSAwIDEgMS0uNTM4Ljg0MkE1IDUgMCAxIDAgMTMgOGEuNS41IDAgMSAxIDEgMCA2IDYgMCAxIDEtMi43NzItNS4wNThaTTE0IDEuNXYzQTEuNSAxLjUgMCAwIDEgMTIuNSA2aC0zYS41LjUgMCAwIDEgMC0xaDNhLjUuNSAwIDAgMCAuNS0uNXYtM2EuNS41IDAgMSAxIDEgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJlZnJlc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUmVwb3J0ZXIgPSBmdW5jdGlvbiBFdWlJY29uUmVwb3J0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy42ODQuODk1IDYuMDc0LjM1OGExIDEgMCAwIDAtMS4yOTYuNzUzTDQuMiA0SDIuNWEuNS41IDAgMCAwIDAgMWgxLjYyNmE0LjAwNyA0LjAwNyAwIDAgMCAuMTEgMi4zNTlsLTIuMDcyLS4zNDVBMSAxIDAgMCAwIDEgOHYxYy4zNjQgMCAuNzA2LjA5NyAxIC4yNjhWOGwxIC4xNjcgMS44NTkuMzEgMi4xNjMuMzYuNDc4LjA4djZMMiAxNHYtMS4yNjhBMS45OSAxLjk5IDAgMCAxIDEgMTN2MWExIDEgMCAwIDAgLjgzNi45ODZsNiAxYy4xMDguMDE4LjIyLjAxOC4zMjggMGw2LTFBMSAxIDAgMCAwIDE1IDE0di0xYTEuOTkgMS45OSAwIDAgMS0xLS4yNjhWMTRsLTUuNS45MTd2LTZsLjQ3OC0uMDggMi4xNjMtLjM2TDEzIDguMTY2IDE0IDh2MS4yNjhBMS45OSAxLjk5IDAgMCAxIDE1IDlWOGExIDEgMCAwIDAtMS4xNjQtLjk4NmwtMi4wNzMuMzQ1QTMuOTkxIDMuOTkxIDAgMCAwIDExLjg3NCA1SDEzLjVhLjUuNSAwIDAgMCAwLTFoLTEuN2wtLjU3OC0yLjg5QTEgMSAwIDAgMCA5LjkyNS4zNTlMOC4zMTYuODk1YTEgMSAwIDAgMS0uNjMyIDB6bTIuODggNi42NjRBMy4wMTMgMy4wMTMgMCAwIDAgMTAuODMgNUg1LjE3YTMuMDEzIDMuMDEzIDAgMCAwIC4yNjYgMi41NTlMOCA3Ljk4NmwyLjU2NC0uNDI3ek0xMC44IDRIOS4yTDkgM2wxLjUtLjUuMyAxLjV6TTEgMTJhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyem0xNCAwYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJlcG9ydGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblJldHVybktleSA9IGZ1bmN0aW9uIEV1aUljb25SZXR1cm5LZXkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS45OTQgNGMxLjA1OSAwIDEuOTI0LjgxOCAyIDEuODU2bC4wMDYuMTV2MS45ODhhMi4wMDUgMi4wMDUgMCAwIDEtMS44NTYgMkwxMiAxMEgzLjQ4NGwxLjkxIDEuODJhLjUyLjUyIDAgMCAxIDAgLjc3LjYxNi42MTYgMCAwIDEtLjgyOSAwbC0yLjA1LTEuOTVhMS41NTEgMS41NTEgMCAwIDEgMC0yLjMxbDIuMDUtMS45NWEuNjE3LjYxNyAwIDAgMSAuODMgMCAuNTIuNTIgMCAwIDEgMCAuNzdMMy40NSA5SDEyYy41MTQtLjAwMy45MzUtLjM5Ljk5My0uODg4TDEzIDcuOTk0VjYuMDA2YzAtLjUxNi0uMzg4LS45NDEtLjg4OC0xTDExLjk5NCA1SDkuNWEuNS41IDAgMCAxLS4wOS0uOTkyTDkuNSA0aDIuNDk0elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUmV0dXJuS2V5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNhdmUgPSBmdW5jdGlvbiBFdWlJY29uU2F2ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMDA4IDJIMi4yODJjLS4xODEgMC0uMjQ1LjAwMi0uMjc1LjAwNy0uMDA1LjAzLS4wMDcuMDk0LS4wMDcuMjc1djExLjQzNmMwIC4xODEuMDAyLjI0NS4wMDcuMjc1LjAzLjAwNS4wOTQuMDA3LjI3NS4wMDdoMTEuNDM2Yy4xODEgMCAuMjQ1LS4wMDIuMjc1LS4wMDcuMDA1LS4wMy4wMDctLjA5NC4wMDctLjI3NVY0LjYyYzAtLjEzLS4wMDEtLjE4LS4wMDQtLjIwNGEyLjY1NCAyLjY1NCAwIDAgMC0uMTQxLS4xNDdMMTEuNzMgMi4xNDVhMi42NTQgMi42NTQgMCAwIDAtLjE0Ny0uMTQxQTIuNjU0IDIuNjU0IDAgMCAwIDExLjM4IDJoLS4zODhjLjAwNS4wOC4wMDguMTcyLjAwOC4yODJ2Mi40MzZjMCAuNDQ2LS4wNDYuNjA3LS4xMzQuNzdhLjkwOS45MDkgMCAwIDEtLjM3OC4zNzhjLS4xNjMuMDg4LS4zMjQuMTM0LS43Ny4xMzRINi4yODJjLS40NDYgMC0uNjA3LS4wNDYtLjc3LS4xMzRhLjkwOS45MDkgMCAwIDEtLjM3OC0uMzc4QzUuMDQ2IDUuMzI1IDUgNS4xNjQgNSA0LjcxOFYyLjI4MmMwLS4xMS4wMDMtLjIwMi4wMDgtLjI4MlpNMi4yODIgMWg5LjA5OGMuMjU5IDAgLjM0OC4wMS40NDcuMDMyYS44Ny44NyAwIDAgMSAuMjczLjExM2MuMDg2LjA1NC4xNTYuMTEuMzM4LjI5M2wyLjEyNCAyLjEyNGMuMTgyLjE4Mi4yMzkuMjUyLjI5My4zMzhhLjg3Ljg3IDAgMCAxIC4xMTMuMjczYy4wMjMuMS4wMzIuMTg4LjAzMi40NDd2OS4wOThjMCAuNDQ2LS4wNDYuNjA3LS4xMzQuNzdhLjkwOS45MDkgMCAwIDEtLjM3OC4zNzhjLS4xNjMuMDg4LS4zMjQuMTM0LS43Ny4xMzRIMi4yODJjLS40NDYgMC0uNjA3LS4wNDYtLjc3LS4xMzRhLjkwOS45MDkgMCAwIDEtLjM3OC0uMzc4Yy0uMDg4LS4xNjMtLjEzNC0uMzI0LS4xMzQtLjc3VjIuMjgyYzAtLjQ0Ni4wNDYtLjYwNy4xMzQtLjc3YS45MDkuOTA5IDAgMCAxIC4zNzgtLjM3OGMuMTYzLS4wODguMzI0LS4xMzQuNzctLjEzNFpNNiAyLjI4MnYyLjQzNmMwIC4xODEuMDAyLjI0NS4wMDcuMjc1LjAzLjAwNS4wOTQuMDA3LjI3NS4wMDdoMy40MzZjLjE4MSAwIC4yNDUtLjAwMi4yNzUtLjAwNy4wMDUtLjAzLjAwNy0uMDk0LjAwNy0uMjc1VjIuMjgyYzAtLjE4MS0uMDAyLS4yNDUtLjAwNy0uMjc1QTIuMjQ4IDIuMjQ4IDAgMCAwIDkuNzE4IDJINi4yODJjLS4xODEgMC0uMjQ1LjAwMi0uMjc1LjAwNy0uMDA1LjAzLS4wMDcuMDk0LS4wMDcuMjc1Wk04IDEyYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNFptMC0xYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNhdmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2NhbGUgPSBmdW5jdGlvbiBFdWlJY29uU2NhbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIuNSAxMmEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptLTIgMGEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptLTIgMGEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptNC0yYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0tMiAwYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0yLTFhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFabTAtM2EuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptLTIgMmEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptLTIgMGEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptMCAyYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0tMiAyYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0tMiAwYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0yLTJhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabTYtNmEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptLTIgMmEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNjYWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25TZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xMS4yNzEgMTEuOTc4IDMuODcyIDMuODczYS41MDIuNTAyIDAgMCAwIC43MDggMCAuNTAyLjUwMiAwIDAgMCAwLS43MDhsLTMuNTY1LTMuNTY0YzIuMzgtMi43NDcgMi4yNjctNi45MjMtLjM0Mi05LjUzMi0yLjczLTIuNzMtNy4xNy0yLjczLTkuODk4IDAtMi43MjggMi43MjktMi43MjggNy4xNyAwIDkuOWE2Ljk1NSA2Ljk1NSAwIDAgMCA0Ljk0OSAyLjA1LjUuNSAwIDAgMCAwLTEgNS45NiA1Ljk2IDAgMCAxLTQuMjQyLTEuNzU3IDYuMDEgNi4wMSAwIDAgMSAwLTguNDg2YzIuMzM3LTIuMzQgNi4xNDMtMi4zNCA4LjQ4NCAwYTYuMDEgNi4wMSAwIDAgMSAwIDguNDg2LjUuNSAwIDAgMCAuMDM0LjczOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TZWN1cml0eVNpZ25hbCA9IGZ1bmN0aW9uIEV1aUljb25TZWN1cml0eVNpZ25hbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS44NzUgMy40MThhNiA2IDAgMSAwIC43MDcuNzA3bC0yLjQ2IDIuNDYtMS4xNTYgMS4xNTZhMSAxIDAgMSAxLS43MDctLjcwN2wuNzU3LS43NTdhMiAyIDAgMCAwLTIuNDMgMy4xMzcuNS41IDAgMSAxLS43MDcuNzA3IDMgMyAwIDAgMSAzLjg2LTQuNTY3bC43MTQtLjcxNEE0IDQgMCAxIDAgOCAxMmEuNS41IDAgMSAxIDAgMSA1IDUgMCAxIDEgMy4xNjQtOC44NzFsLjcxLS43MXptLjcwOS0uNzA5YTcgNyAwIDEgMCAuNzA3LjcwN2wuMzY2LS4zNjZhLjUuNSAwIDEgMC0uNzA3LS43MDdsLS4zNjYuMzY2elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2VjdXJpdHlTaWduYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2VjdXJpdHlTaWduYWxEZXRlY3RlZCA9IGZ1bmN0aW9uIEV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjY1NyAzLjA1YS41LjUgMCAwIDAtLjcwNy0uNzA3bC0uMzY2LjM2NkE3IDcgMCAxIDAgOCAxNWE0Ljk5NCA0Ljk5NCAwIDAgMS0uNTk3LTEuMDMgNiA2IDAgMSAxIDQuNDcxLTEwLjU1MmwtLjcxLjcxYTUgNSAwIDEgMC00LjA4IDguNzg4IDUuMDI3IDUuMDI3IDAgMCAxLS4wODItMS4wNDJBNC4wMDIgNC4wMDIgMCAwIDEgOCA0YTMuOTggMy45OCAwIDAgMSAyLjQ1My44NGwtLjcxNS43MTRhMyAzIDAgMCAwLTMuODYgNC41NjcuNS41IDAgMSAwIC43MDgtLjcwNyAyIDIgMCAwIDEgMi40My0zLjEzN2wtLjc1Ny43NTdhMSAxIDAgMSAwIC43MDcuNzA3bDEuMTU1LTEuMTU1IDIuNDYtMi40NmE1Ljk3MiA1Ljk3MiAwIDAgMSAxLjM5IDMuMjc3Yy4zNjcuMTU4LjcxMy4zNiAxLjAyOS41OTcgMC0xLjYzNi0uNTctMy4yNzEtMS43MS00LjU4NGwuMzY3LS4zNjZ6TTE2IDEyYTQgNCAwIDEgMS04IDAgNCA0IDAgMCAxIDggMHptLTQgLjVhLjU3Ny41NzcgMCAwIDEtLjU3LS40OTVsLS4yOS0yLjAxNWEuODY3Ljg2NyAwIDEgMSAxLjcxOCAwbC0uMjg4IDIuMDE1YS41NzcuNTc3IDAgMCAxLS41Ny40OTV6bTAgMi41YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2VjdXJpdHlTaWduYWxSZXNvbHZlZCA9IGZ1bmN0aW9uIEV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjY1NyAzLjA1YS41LjUgMCAxIDAtLjcwNy0uNzA3bC0uMzY2LjM2NkE3IDcgMCAxIDAgOCAxNWE0Ljk5NCA0Ljk5NCAwIDAgMS0uNTk3LTEuMDMgNiA2IDAgMSAxIDQuNDcxLTEwLjU1MmwtLjcxLjcxYTUgNSAwIDEgMC00LjA4IDguNzg4IDUuMDI4IDUuMDI4IDAgMCAxLS4wODItMS4wNDJBNC4wMDIgNC4wMDIgMCAwIDEgOCA0YTMuOTggMy45OCAwIDAgMSAyLjQ1My44NGwtLjcxNS43MTRhMyAzIDAgMCAwLTMuODYgNC41NjcuNS41IDAgMSAwIC43MDgtLjcwNyAyIDIgMCAwIDEgMi40My0zLjEzN2wtLjc1Ny43NTdhMSAxIDAgMSAwIC43MDcuNzA3bDEuMTU1LTEuMTU1IDIuNDYtMi40NmE1Ljk3MiA1Ljk3MiAwIDAgMSAxLjM5IDMuMjc3Yy4zNjcuMTU4LjcxMy4zNiAxLjAyOS41OTcgMC0xLjYzNi0uNTctMy4yNzEtMS43MS00LjU4NGwuMzY3LS4zNjZ6TTE2IDEyYTQgNCAwIDEgMS04IDAgNCA0IDAgMCAxIDggMHptLTEuNjQ2LTEuMzU0YS41LjUgMCAwIDEgMCAuNzA3bC0yLjUgMi41YS41LjUgMCAwIDEtLjcwOCAwbC0xLTFhLjUuNSAwIDAgMSAuNzA4LS43MDdsLjY0Ni42NDcgMi4xNDYtMi4xNDdhLjUuNSAwIDAgMSAuNzA4IDB6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNlc3Npb25WaWV3ZXIgPSBmdW5jdGlvbiBFdWlJY29uU2Vzc2lvblZpZXdlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNmgxdjFINFY2em0yIDJINVY3aDF2MXptMCAxVjhoMXYxSDZ6bS0xIDFWOWgxdjFINXptMCAwdjFINHYtMWgxem0yIDBoNHYxSDd2LTF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMSAzYTEgMSAwIDAgMSAxLTFoMTJhMSAxIDAgMCAxIDEgMXYxMGExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVYzem0xIDFoMTJ2OUgyVjR6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2Vzc2lvblZpZXdlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TaGFyZCA9IGZ1bmN0aW9uIEV1aUljb25TaGFyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMTM0IDcuMDMxIDggMTIuNzY0bDIuODY2LTUuNzMzTDggMi4wMTYgNS4xMzQgNy4wM1pNOCAwbDQgNy00IDgtNC04IDQtN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNoYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNoYXJlID0gZnVuY3Rpb24gRXVpSWNvblNoYXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA2LjgxdjYuMzhjMCAuNDkzLjQ0OC45Ljk5Mi45aDcuMDE2Yy41NDMgMCAuOTkyLS40MDYuOTkyLS45VjYuODFjMC0uNDkzLS40NDgtLjktLjk5Mi0uOUgzLjk5MmMtLjU0MyAwLS45OTIuNDA2LS45OTIuOVpNNiA1di45MWgzVjVoMi4wMDhDMTIuMTA4IDUgMTMgNS44MTggMTMgNi44MXY2LjM4YzAgMS0uOSAxLjgxLTEuOTkyIDEuODFIMy45OTJDMi44OTIgMTUgMiAxNC4xODIgMiAxMy4xOVY2LjgxQzIgNS44MSAyLjkgNSAzLjk5MiA1SDZabTEuOTk3LTMuNTUyQS41MDYuNTA2IDAgMCAxIDggMS41djhhLjUuNSAwIDAgMS0xIDB2LThhLjUxLjUxIDAgMCAxIDAtLjAxN0w1LjE4IDMuMzk0YS41Mi41MiAwIDAgMS0uNzcgMCAuNjE3LjYxNyAwIDAgMSAwLS44MjlMNi4zNi41MTVhMS41NTIgMS41NTIgMCAwIDEgMi4zMSAwbDEuOTUgMi4wNWMuMjE0LjIyOS4yMTQuNjAxIDAgLjgzYS41Mi41MiAwIDAgMS0uNzcgMEw3Ljk5NyAxLjQ0N1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNoYXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNpbmdsZU1ldHJpY1ZpZXdlciA9IGZ1bmN0aW9uIEV1aUljb25TaW5nbGVNZXRyaWNWaWV3ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjUgMWEuNS41IDAgMCAxIC41LjVWMTRoMTIuNWEuNS41IDAgMCAxIDAgMWgtMTNhLjUuNSAwIDAgMS0uNS0uNXYtMTNhLjUuNSAwIDAgMSAuNS0uNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjkzNSA2LjY1MmEuNi42IDAgMCAwLS45NTEtLjA2Mkw5IDEwbC0yLjc0Ny0uOTE2YS42LjYgMCAwIDAtLjQ4NS4wNDdMMyAxMC42OXYxLjgxYS41LjUgMCAwIDAgLjUuNWgxMWEuNS41IDAgMCAwIC41LS41VjkuNzVsLTIuMDY1LTMuMDk4WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuMDIzIDIuNzU4YS42LjYgMCAwIDAtLjk4Ny0uMDc3TDguMzg4IDcuMjAzbC0yLjA5My0uODNhLjYuNiAwIDAgMC0uNTUyLjA1OEwzLjIyMSA4LjA5OGEuNDkuNDkgMCAwIDAtLjEzOC42ODMuNS41IDAgMCAwIC42ODkuMTM2bDIuMzQ5LTEuNTUyIDIuNTgyIDEuMDI0IDMuNzQ2LTQuNjQzIDEuNjIzIDIuODE3Yy4xMzYuMjM3LjQ0LjMxOS42NzguMTg0YS40OS40OSAwIDAgMCAuMTg0LS42NzJsLTEuOTEtMy4zMTdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TaW5nbGVNZXRyaWNWaWV3ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU25vd2ZsYWtlID0gZnVuY3Rpb24gRXVpSWNvblNub3dmbGFrZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjAwNy41YS41LjUgMCAwIDEgMSAwdjIuMDI0YS45OTkuOTk5IDAgMCAwIC4yNjgtLjIyN2wxLjAyNy0xLjIzM2EuNS41IDAgMCAxIC43NjkuNjRMOC4yNzUgMy44NmEuOTk5Ljk5OSAwIDAgMS0uMjY4LjIyN3YyLjU0OGwyLjIwNy0xLjI3NGMwLS4xMTQuMDItLjIzMS4wNjItLjM0NmwuOTY4LTIuNjMyYS41LjUgMCAxIDEgLjkzOC4zNDVsLS41NTQgMS41MDZhLjk5OC45OTggMCAwIDAtLjA2Mi4zNDZsMS43NTMtMS4wMTJhLjUuNSAwIDEgMSAuNS44NjZsLTEuNzUzIDEuMDEyYy4xLjA1Ny4yMS4wOTguMzMuMTE5bDEuNTgyLjI3M2EuNS41IDAgMSAxLS4xNy45ODZsLTIuNzY0LS40NzhhMSAxIDAgMCAxLS4zMy0uMTJMOC41MDYgNy41bDIuMjA3IDEuMjc0YTEgMSAwIDAgMSAuMzMtLjExOWwyLjc2NC0uNDc4YS41LjUgMCAxIDEgLjE3Ljk4NmwtMS41ODIuMjczYS45OTkuOTk5IDAgMCAwLS4zMy4xMmwxLjc1MyAxLjAxMWEuNS41IDAgMSAxLS41Ljg2NmwtMS43NTMtMS4wMTJjMCAuMTE1LjAyLjIzMS4wNjIuMzQ2bC41NTQgMS41MDZhLjUuNSAwIDAgMS0uOTM4LjM0NWwtLjk2OC0yLjYzMmEuOTk5Ljk5OSAwIDAgMS0uMDYyLS4zNDZMOC4wMDcgOC4zNjZ2Mi41NDhjLjA5OC4wNTguMTkuMTMzLjI2OC4yMjdsMS43OTYgMi4xNTVhLjUuNSAwIDAgMS0uNzY5LjY0bC0xLjAyNy0xLjIzM2EuOTk5Ljk5OSAwIDAgMC0uMjY4LS4yMjZWMTQuNWEuNS41IDAgMCAxLTEgMHYtMi4wMjRhLjk5OS45OTkgMCAwIDAtLjI2OS4yMjdsLTEuMDI3IDEuMjMzYS41LjUgMCAwIDEtLjc2OC0uNjRsMS43OTUtMi4xNTVhLjk5OS45OTkgMCAwIDEgLjI2OS0uMjI3VjguMzY2TDQuOCA5LjY0YzAgLjExNC0uMDIuMjMxLS4wNjIuMzQ2bC0uOTY5IDIuNjMyYS41LjUgMCAxIDEtLjkzOC0uMzQ1bC41NTQtMS41MDZhMSAxIDAgMCAwIC4wNjItLjM0NmwtMS43NTMgMS4wMTJhLjUuNSAwIDAgMS0uNS0uODY2bDEuNzUzLTEuMDEyYS45OTkuOTk5IDAgMCAwLS4zMy0uMTE5bC0xLjU4Mi0uMjczYS41LjUgMCAwIDEgLjE3LS45ODZsMi43NjQuNDc4Yy4xMi4wMi4yMzIuMDYyLjMzLjEyTDYuNTA4IDcuNSA0LjMgNi4yMjZhLjk5OS45OTkgMCAwIDEtLjMzLjExOWwtMi43NjUuNDc4YS41LjUgMCAxIDEtLjE3LS45ODZsMS41ODItLjI3M2EuOTk5Ljk5OSAwIDAgMCAuMzMtLjEyTDEuMTk0IDQuNDM0YS41LjUgMCAxIDEgLjUtLjg2NmwxLjc1MyAxLjAxMmMwLS4xMTQtLjAyLS4yMzEtLjA2Mi0uMzQ2TDIuODMgMi43MjdhLjUuNSAwIDEgMSAuOTM4LS4zNDVsLjk2OSAyLjYzMmEuOTk5Ljk5OSAwIDAgMSAuMDYyLjM0NmwyLjIwNyAxLjI3NFY0LjA4NmExIDEgMCAwIDEtLjI2OS0uMjI3TDQuOTQzIDEuNzA0YS41LjUgMCAwIDEgLjc2OC0uNjRsMS4wMjcgMS4yMzNjLjA3OS4wOTQuMTcuMTcuMjY5LjIyN1YuNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNub3dmbGFrZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Tb3J0QXNjZW5kaW5nID0gZnVuY3Rpb24gRXVpSWNvblNvcnRBc2NlbmRpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjg1NCAzLjE0NmEuNS41IDAgMCAwLS43MDggMGwtMiAyYS41LjUgMCAxIDAgLjcwOC43MDhMMyA0LjcwN1YxMS41YS41LjUgMCAwIDAgMSAwVjQuNzA3bDEuMTQ2IDEuMTQ3YS41LjUgMCAxIDAgLjcwOC0uNzA4bC0yLTJaTTggNC41YS41LjUgMCAwIDEgLjUtLjVoNmEuNS41IDAgMCAxIDAgMWgtNmEuNS41IDAgMCAxLS41LS41Wk04LjUgN2EuNS41IDAgMCAwIDAgMWg0YS41LjUgMCAwIDAgMC0xaC00Wk04IDEwLjVhLjUuNSAwIDAgMSAuNS0uNWgyYS41LjUgMCAwIDEgMCAxaC0yYS41LjUgMCAwIDEtLjUtLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0QXNjZW5kaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNvcnREZXNjZW5kaW5nID0gZnVuY3Rpb24gRXVpSWNvblNvcnREZXNjZW5kaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAxMC4yOTNWMy41YS41LjUgMCAwIDAtMSAwdjYuNzkzTDEuODU0IDkuMTQ2YS41LjUgMCAxIDAtLjcwOC43MDhsMiAyYS41LjUgMCAwIDAgLjcwOCAwbDItMmEuNS41IDAgMSAwLS43MDgtLjcwOEw0IDEwLjI5M1pNOCA0LjVhLjUuNSAwIDAgMSAuNS0uNWg2YS41LjUgMCAwIDEgMCAxaC02YS41LjUgMCAwIDEtLjUtLjVaTTguNSA3YS41LjUgMCAwIDAgMCAxaDRhLjUuNSAwIDAgMCAwLTFoLTRaTTggMTAuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnREZXNjZW5kaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNvcnRMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvblNvcnRMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuMzA4IDdoOC4xMzZjLjMwNyAwIC41NTYuMjI0LjU1Ni41cy0uMjQ5LjUtLjU1Ni41SDQuMzA4bDQuMDk2IDQuMDk2YS41LjUgMCAwIDEtLjcwNy43MDdMMy40NTQgOC41NjFhMS40OTQgMS40OTQgMCAwIDEtLjQzMy0uOTI1LjQ1NC40NTQgMCAwIDEgMC0uMjcyYy4wMy0uMzM4LjE3NS0uNjY2LjQzMy0uOTI1bDQuMjQzLTQuMjQyYS41LjUgMCAxIDEgLjcwNy43MDdMNC4zMDggN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRMZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNvcnRSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS42OTIgN0gzLjU1NkMzLjI0OSA3IDMgNy4yMjQgMyA3LjVzLjI0OS41LjU1Ni41aDguMTM2bC00LjA5NiA0LjA5NmEuNS41IDAgMCAwIC43MDcuNzA3bDQuMjQzLTQuMjQyYy4yNTgtLjI1OS40MDMtLjU4Ny40MzMtLjkyNWEuNDU0LjQ1NCAwIDAgMCAwLS4yNzIgMS40OTQgMS40OTQgMCAwIDAtLjQzMy0uOTI1TDguMzAzIDIuMTk3YS41LjUgMCAxIDAtLjcwNy43MDdMMTEuNjkyIDdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0UmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU29ydERvd24gPSBmdW5jdGlvbiBFdWlJY29uU29ydERvd24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDExLjY5MlYzLjU1NkM3IDMuMjQ5IDcuMjI0IDMgNy41IDNzLjUuMjQ5LjUuNTU2djguMTM2bDQuMDk2LTQuMDk2YS41LjUgMCAwIDEgLjcwNy43MDdsLTQuMjQyIDQuMjQzYTEuNDk0IDEuNDk0IDAgMCAxLS45MjUuNDMzLjQ1NC40NTQgMCAwIDEtLjI3MiAwIDEuNDk0IDEuNDk0IDAgMCAxLS45MjUtLjQzM0wyLjE5NyA4LjMwM2EuNS41IDAgMSAxIC43MDctLjcwN0w3IDExLjY5MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnREb3duOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNvcnRVcCA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0VXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDQuMjA3djguMjM3YzAgLjMwNy0uMjI0LjU1Ni0uNS41NTZzLS41LS4yNDktLjUtLjU1NlY0LjIwN0wyLjkwNCA4LjMwM2EuNS41IDAgMCAxLS43MDctLjcwN2w0LjI0Mi00LjI0MmExLjUgMS41IDAgMCAxIDIuMTIyIDBsNC4yNDIgNC4yNDJhLjUuNSAwIDEgMS0uNzA3LjcwN0w4IDQuMjA3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydFVwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNvcnRhYmxlID0gZnVuY3Rpb24gRXVpSWNvblNvcnRhYmxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxMi43ODZWMy4yTDMuNjA0IDYuNTk2YS41LjUgMCAwIDEtLjcwOC0uNzA3bDMuNTM2LTMuNTM1YTEuNSAxLjUgMCAwIDEgMi4xMjEgMGwzLjUzNiAzLjUzNWEuNS41IDAgMCAxLS43MDcuNzA3TDggMy4yMTR2OS41NTdsMy4zODItMy4zODJhLjUuNSAwIDAgMSAuNzA3LjcwN2wtMy41MzYgMy41MzZhMS41IDEuNSAwIDAgMS0yLjEyMSAwbC0zLjUzNi0zLjUzNmEuNS41IDAgMCAxIC43MDgtLjcwN0w3IDEyLjc4NlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNwYWNlcyA9IGZ1bmN0aW9uIEV1aUljb25TcGFjZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAzSDN2M2gzVjNaTTMgMmExIDEgMCAwIDAtMSAxdjNhMSAxIDAgMCAwIDEgMWgzYTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xSDNabTMgOEgzdjNoM3YtM1pNMyA5YTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxaDNhMSAxIDAgMCAwIDEtMXYtM2ExIDEgMCAwIDAtMS0xSDNabTEwLTZoLTN2M2gzVjNabS0zLTFhMSAxIDAgMCAwLTEgMXYzYTEgMSAwIDAgMCAxIDFoM2ExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMWgtM1ptMyA4aC0zdjNoM3YtM1ptLTMtMWExIDEgMCAwIDAtMSAxdjNhMSAxIDAgMCAwIDEgMWgzYTEgMSAwIDAgMCAxLTF2LTNhMSAxIDAgMCAwLTEtMWgtM1pcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TcGFjZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3BhcmtsZXMgPSBmdW5jdGlvbiBFdWlJY29uU3BhcmtsZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJtNS4wMTYgNC4zODMuMDM1LS4wOTNhLjQ5Mi40OTIgMCAwIDEgLjg5OCAwbC4wMzUuMDkzYy4wNDguMTI4LjA3Mi4xOTIuMDk3LjI1M2E1LjkgNS45IDAgMCAwIDMuNTM2IDMuMzhsLjA5My4wMzVhLjQ5Mi40OTIgMCAwIDEgMCAuODk4bC0uMDkzLjAzNWE1LjkgNS45IDAgMCAwLTMuNTM2IDMuMzhjLS4wMjUuMDYtLjA0OS4xMjUtLjA5Ny4yNTNsLS4wMzUuMDkzYS40OTIuNDkyIDAgMCAxLS44OTggMGwtLjAzNS0uMDkzYy0uMDQ4LS4xMjgtLjA3Mi0uMTkyLS4wOTctLjI1M2E1LjkgNS45IDAgMCAwLTMuNTM2LTMuMzggMi4xNzUgMi4xNzUgMCAwIDEtLjA5My0uMDM1LjQ5Mi40OTIgMCAwIDEgMC0uODk4bC4wOTMtLjAzNWMuMTI4LS4wNDguMTkyLS4wNzIuMjUzLS4wOTdhNS45IDUuOSAwIDAgMCAzLjM4LTMuNTM2Wm02Ljc2OS0yLjIxM2EuOTY4Ljk2OCAwIDAgMSAuMDE2LS4wNDEuMjE5LjIxOSAwIDAgMSAuMzk4IDAgMi42MjIgMi42MjIgMCAwIDAgMS41MTggMS42MTNsLjExMy4wNDNhLjI3Mi4yNzIgMCAwIDEgLjA0LjAxNi4yMTkuMjE5IDAgMCAxIDAgLjM5OC4yNzIuMjcyIDAgMCAxLS4wNC4wMTZsLS4xMTMuMDQzYTIuNjIyIDIuNjIyIDAgMCAwLTEuNTAyIDEuNTcyLjk2OC45NjggMCAwIDEtLjAxNi4wNC4yMTkuMjE5IDAgMCAxLS4zOTggMCAyLjYyMiAyLjYyMiAwIDAgMC0xLjUxOC0xLjYxM2wtLjExMy0uMDQyYS4yNzIuMjcyIDAgMCAxLS4wNC0uMDE2LjIxOS4yMTkgMCAwIDEgMC0uMzk4LjI3Mi4yNzIgMCAwIDEgLjA0LS4wMTZsLjExMy0uMDQzYTIuNjIyIDIuNjIyIDAgMCAwIDEuNTAyLTEuNTcyWm0tLjU1NSA4LjA0My4wMi0uMDUyYS4yNzMuMjczIDAgMCAxIC41IDBsLjAyLjA1Mi4wNTMuMTRhMy4yNzUgMy4yNzUgMCAwIDAgMS44MjQgMS44MjRsLjE0LjA1NGMuMDMuMDEuMDQ0LjAxNi4wNTIuMDJhLjI3My4yNzMgMCAwIDEgMCAuNDk4IDEuMjQ4IDEuMjQ4IDAgMCAxLS4wNTIuMDJjLS4wNy4wMjctLjEwNy4wNC0uMTQuMDU0YTMuMjc5IDMuMjc5IDAgMCAwLTEuODI0IDEuODI0bC0uMDU0LjE0YS40MDkuNDA5IDAgMCAxLS4wMi4wNTIuMjczLjI3MyAwIDAgMS0uNDk4IDAgMS4yNDggMS4yNDggMCAwIDEtLjAyLS4wNTJjLS4wMjctLjA3LS4wNC0uMTA3LS4wNTQtLjE0YTMuMjc5IDMuMjc5IDAgMCAwLTEuODI0LTEuODI0bC0uMTQtLjA1NGExLjI0IDEuMjQgMCAwIDEtLjA1Mi0uMDIuMjczLjI3MyAwIDAgMSAwLS40OTggMS4yNCAxLjI0IDAgMCAxIC4wNTItLjAybC4xNC0uMDU0YTMuMjc5IDMuMjc5IDAgMCAwIDEuODI0LTEuODI0bC4wNTQtLjE0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3BhcmtsZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3RhclBsdXNFbXB0eSA9IGZ1bmN0aW9uIEV1aUljb25TdGFyUGx1c0VtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMmEuODYuODYgMCAwIDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwIDAgMi44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw2IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwIDAgLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwIDAgNiAybTggOGgydjFoLTJ2MmgtMXYtMmgtMnYtMWgyVjhoMXYyWk02IDNjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwIDEtLjAyOS4xMjZMOC43NjIgOS4xMjFsLS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwIDEtLjA5MS4wNDYuMTA2LjEwNiAwIDAgMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDYgMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAgMS0uMDU0LjAxNi4xMjcuMTI3IDAgMCAxLS4wOTEtLjA0NmMtLjAyMy0uMDI4LS4wMy0uMDU4LS4wMjQtLjA5OGwuNTM2LTMuMTEyLjA2My0uMzYyLS4yNTktLjI2MS0yLjIwMi0yLjIyNmEuMTE2LjExNiAwIDAgMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAgMSAuMDk0LS4wOGwyLjk4LS40MjUuMzg2LS4wNTUuMTYyLS4zNTYgMS4yNjctMi43ODZDNS45MDUgMy4wNSA1LjkyNyAzIDYgM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJQbHVzRW1wdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3RhclBsdXNGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uU3RhclBsdXNGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQgMTBoMnYxaC0ydjJoLTF2LTJoLTJ2LTFoMlY4aDF2MlpNNiAyYS44Ni44NiAwIDAgMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAgMCAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAgMCAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAgMCA2IDJcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJQbHVzRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0YXJFbXB0eSA9IGZ1bmN0aW9uIEV1aUljb25TdGFyRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAyYS44Ni44NiAwIDAgMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAgMCA0Ljg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDggMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAgMCAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAgMCA4IDJtMCAxYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMCAxLS4wMjkuMTI2bC0yLjIwMiAyLjIyNi0uMjU5LjI2MS4wNjMuMzYyLjUzNSAzLjExMmMuMDA3LjA0IDAgLjA3LS4wMjMuMDk4YS4xMjcuMTI3IDAgMCAxLS4wOTEuMDQ2LjEwNi4xMDYgMCAwIDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw4IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwIDEtLjA1NC4wMTYuMTI3LjEyNyAwIDAgMS0uMDkxLS4wNDZjLS4wMjMtLjAyOC0uMDMtLjA1OC0uMDI0LS4wOThsLjUzNi0zLjExMi4wNjMtLjM2Mi0uMjU5LS4yNjEtMi4yMDItMi4yMjZhLjExNi4xMTYgMCAwIDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwIDEgLjA5NC0uMDhsMi45OC0uNDI1LjM4Ni0uMDU1LjE2Mi0uMzU2IDEuMjY3LTIuNzg2QzcuOTA1IDMuMDUgNy45MjcgMyA4IDNcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJFbXB0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdGFyRW1wdHlTcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25TdGFyRW1wdHlTcGFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJhLjg2Ljg2IDAgMCAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMCAwIDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMCAwIC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMCAwIDYgMm0wIDFjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwIDEtLjAyOS4xMjZMOC43NjIgOS4xMjFsLS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwIDEtLjA5MS4wNDYuMTA2LjEwNiAwIDAgMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDYgMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAgMS0uMDU0LjAxNi4xMjcuMTI3IDAgMCAxLS4wOTEtLjA0NmMtLjAyMy0uMDI4LS4wMy0uMDU4LS4wMjQtLjA5OGwuNTM2LTMuMTEyLjA2My0uMzYyLS4yNTktLjI2MS0yLjIwMi0yLjIyNmEuMTE2LjExNiAwIDAgMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAgMSAuMDk0LS4wOGwyLjk4LS40MjUuMzg2LS4wNTUuMTYyLS4zNTYgMS4yNjctMi43ODZDNS45MDUgMy4wNSA1LjkyNyAzIDYgM1wiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhckVtcHR5U3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3RhckZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMmEuODYuODYgMCAwIDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwIDAgNC44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw4IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwIDAgLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwIDAgOCAyXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0YXJGaWxsZWRTcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25TdGFyRmlsbGVkU3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAgMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAgMCAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAgMCAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAgMCA2IDJcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJGaWxsZWRTcGFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdGFyTWludXNFbXB0eSA9IGZ1bmN0aW9uIEV1aUljb25TdGFyTWludXNFbXB0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJhLjg2Ljg2IDAgMCAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMCAwIDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMCAwIC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMCAwIDYgMm0wIDFjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwIDEtLjAyOS4xMjZMOC43NjIgOS4xMjFsLS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwIDEtLjA5MS4wNDYuMTA2LjEwNiAwIDAgMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDYgMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAgMS0uMDU0LjAxNi4xMjcuMTI3IDAgMCAxLS4wOTEtLjA0NmMtLjAyMy0uMDI4LS4wMy0uMDU4LS4wMjQtLjA5OGwuNTM2LTMuMTEyLjA2My0uMzYyLS4yNTktLjI2MS0yLjIwMi0yLjIyNmEuMTE2LjExNiAwIDAgMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAgMSAuMDk0LS4wOGwyLjk4LS40MjUuMzg2LS4wNTUuMTYyLS4zNTYgMS4yNjctMi43ODZDNS45MDUgMy4wNSA1LjkyNyAzIDYgM1ptMTAgN3YxaC01di0xaDVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyTWludXNFbXB0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdGFyTWludXNGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uU3Rhck1pbnVzRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMmEuODYuODYgMCAwIDEgLjc5Mi41MTFsMS4zMyAyLjkyNCAzLjEyOC40NDZjLjcxLjEwMiAxLjAwMS45NzYuNDk2IDEuNDg3TDkuNDMzIDkuNzA0bC41NjMgMy4yNjhBLjg3Ny44NzcgMCAwIDEgOS4xMzYgMTRhLjg2Mi44NjIgMCAwIDEtLjQyOS0uMTE2TDYgMTIuMzQybC0yLjcwNyAxLjU0MmEuODYyLjg2MiAwIDAgMS0uNDMuMTE2Ljg3Ny44NzcgMCAwIDEtLjg1OS0xLjAyN2wuNTYzLTMuMjY5TC4yNTQgNy4zNjhDLS4yNSA2Ljg1Ny4wNCA1Ljk4My43NSA1Ljg4bDMuMTI4LS40NDYgMS4zMy0yLjkyM0EuODYuODYgMCAwIDEgNiAyWm0xMCA4djFoLTV2LTFoNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJNaW51c0ZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdGF0cyA9IGZ1bmN0aW9uIEV1aUljb25TdGF0cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDE0di00aDF2NGg1VjVoMXY5YTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xdi0yaDF2Mmg2Wm00Ljg1My0xMC4xNDYtMi45OTkgM2ExLjUgMS41IDAgMCAxLTIuNTM4IDEuNTY4bC0yLjcxNC45MDRMNCA5LjUyN2ExLjUgMS41IDAgMSAxLS4zMTYtLjk0OEw3IDcuNDczYTEuNSAxLjUgMCAwIDEgMi4xNDYtMS4zMjdsMy0zYTEuNSAxLjUgMCAxIDEgLjcwNy43MDdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGF0czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdG9wID0gZnVuY3Rpb24gRXVpSWNvblN0b3AoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNCAyaDhhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMlptMCAxYTEgMSAwIDAgMC0xIDF2OGExIDEgMCAwIDAgMSAxaDhhMSAxIDAgMCAwIDEtMVY0YTEgMSAwIDAgMC0xLTFINFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0b3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3RvcEZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdG9wRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgd2lkdGg6IDEyLFxuICAgIGhlaWdodDogMTIsXG4gICAgeDogMixcbiAgICB5OiAyLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICByeDogMlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0b3BGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3RvcFNsYXNoID0gZnVuY3Rpb24gRXVpSWNvblN0b3BTbGFzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjI1OSAzLjAzNEExLjAwMSAxLjAwMSAwIDAgMCAxMiAzSDRhMSAxIDAgMCAwLTEgMXY4YzAgLjA5LjAxMi4xNzYuMDM0LjI1OWw5LjIyNS05LjIyNVptLjcwNy43MDctOS4yMjUgOS4yMjVjLjA4My4wMjIuMTcuMDM0LjI1OS4wMzRoOGExIDEgMCAwIDAgMS0xVjRjMC0uMDktLjAxMi0uMTc2LS4wMzQtLjI1OVpNNCAyaDhhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0b3BTbGFzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdG9yYWdlID0gZnVuY3Rpb24gRXVpSWNvblN0b3JhZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0yIDZhMSAxIDAgMCAxLTEtMVYyYTEgMSAwIDAgMSAxLTFoMTJhMSAxIDAgMCAxIDEgMXYzYTEgMSAwIDAgMS0xIDFIMlptMTMgMnYzYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjhhMSAxIDAgMCAxIDEtMWgxMmExIDEgMCAwIDEgMSAxWm0xLTNWMmEyIDIgMCAwIDAtMi0ySDJhMiAyIDAgMCAwLTIgMnYzYzAgLjYwMS4yNzEgMS4xMzMuNjkgMS41Qy4yNzEgNi44NjcgMCA3LjM5OSAwIDh2M2EyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOGMwLS42MDEtLjI3MS0xLjEzMy0uNjg5LTEuNS40MTgtLjM2Ny42ODktLjg5OS42ODktMS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiY2lyY2xlXCIsIHtcbiAgICBjeDogNC41LFxuICAgIGN5OiA5LjUsXG4gICAgcjogMS41XG4gIH0pLCBfX19FbW90aW9uSlNYKFwiY2lyY2xlXCIsIHtcbiAgICBjeDogNC41LFxuICAgIGN5OiAzLjUsXG4gICAgcjogMS41XG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgOGgxdjNoLTF6TTEwIDhoMXYzaC0xek0xMiAyaDF2M2gtMXpNMTAgMmgxdjNoLTF6XCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcmFnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdHJpbmcgPSBmdW5jdGlvbiBFdWlJY29uU3RyaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuMjk3IDMgOC45MyA1LjEwMmgxLjM1MWwtLjMyIDEuODI4SDguNjA5bC0uNjU2IDMuODgzYy0uMDM2LjI2NS0uMDIuNDY2LjA1LjYwMS4wNzEuMTM1LjI0Ny4yMDguNTI4LjIxOS4xMS4wMDUuMzM0LS4wMDguNjcyLS4wNEw5LjAxNiAxMy41YTQuMTYgNC4xNiAwIDAgMS0xLjM4My4xOTVjLS43OTctLjAxLTEuMzkzLS4yNDQtMS43OS0uNzAzLS4zOTUtLjQ1OC0uNTU3LTEuMDgtLjQ4NC0xLjg2N2wuNjg4LTQuMTk1SDVsLjMxMy0xLjgyOGgxLjA0Nkw2LjcyNyAzaDIuNTd6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdHJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3VibW9kdWxlID0gZnVuY3Rpb24gRXVpSWNvblN1Ym1vZHVsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJIMXYxMmgzVjdhMSAxIDAgMCAxIDEtMWg1YTEgMSAwIDAgMSAxIDF2MWg0VjRIN2MtLjYyMSAwLTEtLjM3OS0xLTFWMlptMTAgNnY2YTEgMSAwIDAgMS0xIDFIMWExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMWg1LjI1YS43NS43NSAwIDAgMSAuNzUuNzVsLS4wMDQuMjA2QzYuOTkgMi4zMTcgNi45NzQgMyA3IDNoOGExIDEgMCAwIDEgMSAxdjRabS0xIDFoLTRhMSAxIDAgMCAxLTEtMVY3SDV2N2gxMFY5Wk0yIDQuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNVpNNi41IDlhLjUuNSAwIDAgMCAwIDFoMmEuNS41IDAgMCAwIDAtMWgtMlpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdWJtb2R1bGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3VuID0gZnVuY3Rpb24gRXVpSWNvblN1bihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDhhNCA0IDAgMSAxLTggMCA0IDQgMCAwIDEgOCAwWk03LjI1Ljc1YS43NS43NSAwIDAgMSAxLjUgMHYxLjVhLjc1Ljc1IDAgMSAxLTEuNSAwVi43NVptMCAxM2EuNzUuNzUgMCAwIDEgMS41IDB2MS41YS43NS43NSAwIDAgMS0xLjUgMHYtMS41Wm01LjM0Ni0xMS40MDdhLjc1Ljc1IDAgMCAxIDEuMDYgMS4wNmwtMS4wNiAxLjA2MWEuNzUuNzUgMCAwIDEtMS4wNi0xLjA2bDEuMDYtMS4wNlptLTkuMTkyIDkuMTkzYS43NS43NSAwIDEgMSAxLjA2IDEuMDZsLTEuMDYgMS4wNmEuNzUuNzUgMCAwIDEtMS4wNi0xLjA2bDEuMDYtMS4wNlpNLjc1IDguNzVhLjc1Ljc1IDAgMCAxIDAtMS41aDEuNWEuNzUuNzUgMCAxIDEgMCAxLjVILjc1Wm0xMyAwYS43NS43NSAwIDAgMSAwLTEuNWgxLjVhLjc1Ljc1IDAgMCAxIDAgMS41aC0xLjVaTTIuMzQzIDMuNDA0YS43NS43NSAwIDEgMSAxLjA2LTEuMDZsMS4wNjEgMS4wNmEuNzUuNzUgMCAwIDEtMS4wNiAxLjA2bC0xLjA2LTEuMDZabTkuMTkzIDkuMTkyYS43NS43NSAwIDAgMSAxLjA2LTEuMDZsMS4wNiAxLjA2YS43NS43NSAwIDAgMS0xLjA2IDEuMDZsLTEuMDYtMS4wNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN1bjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Td2F0Y2hJbnB1dCA9IGZ1bmN0aW9uIEV1aUljb25Td2F0Y2hJbnB1dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiAxMixcbiAgICBoZWlnaHQ6IDEyLFxuICAgIHg6IDIsXG4gICAgeTogMixcbiAgICByeDogM1xuICB9KSwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiAxMSxcbiAgICBoZWlnaHQ6IDExLFxuICAgIHg6IDIuNSxcbiAgICB5OiAyLjUsXG4gICAgY2xhc3NOYW1lOiBcImV1aVN3YXRjaElucHV0X19zdHJva2VcIixcbiAgICByeDogMlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN3YXRjaElucHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN5bWxpbmsgPSBmdW5jdGlvbiBFdWlJY29uU3ltbGluayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMC44IDBIMmExIDEgMCAwIDAtMSAxdjhsMS0xVjFoOHYzLjVhLjUuNSAwIDAgMCAuNS41SDE0djEwSDJ2LTFhMy41IDMuNSAwIDAgMSAzLjUtMy41SDhWMTNsMy0zLTMtM3YyLjVINS41QTQuNSA0LjUgMCAwIDAgMSAxNHYxYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMVY0LjQyOWMwLS4yNTYtLjA5OC0uNTAzLS4yNzQtLjY4OWwtMy4yLTMuNDI4QTEuMDAyIDEuMDAyIDAgMCAwIDEwLjggMFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TeW1saW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRhYmxlT2ZDb250ZW50cyA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZU9mQ29udGVudHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDF2MTRoMTRWMUgxek0wIDBoMTZ2MTZIMFYwem05IDF2MTRoMVYxSDl6TTMgMy41aDR2LTFIM3Yxem0wIDNoNHYtMUgzdjF6bTAgM2g0di0xSDN2MXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRhYmxlT2ZDb250ZW50czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0ID0gZnVuY3Rpb24gRXVpSWNvblRhYmxlRGVuc2l0eUNvbXBhY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzdjExYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjFabS0xIDBWMmExIDEgMCAwIDAtMS0xSDJhMSAxIDAgMCAwLTEgMXYxaDE0Wm0wIDFIMXYxMGExIDEgMCAwIDAgMSAxaDEyYTEgMSAwIDAgMCAxLTFWNFpNNC40OTYgN2EuNS41IDAgMCAxIDAgMUgyLjQ5NWEuNS41IDAgMCAxIDAtMWgyLjAwMVptNS4yMTggMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggOCA2IDcuNzc2IDYgNy41cy4xMjgtLjUuMjg2LS41aDMuNDI4Wk00LjQ5NiA1YS41LjUgMCAwIDEgMCAxSDIuNDk1YS41LjUgMCAwIDEgMC0xaDIuMDAxWm01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCA2IDYgNS43NzYgNiA1LjVzLjEyOC0uNS4yODYtLjVoMy40MjhaTTQuNDk2IDlhLjUuNSAwIDAgMSAwIDFIMi40OTVhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTUuMjE4IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEwIDYgOS43NzYgNiA5LjVzLjEyOC0uNS4yODYtLjVoMy40MjhabS01LjIxOCAyYS41LjUgMCAwIDEgMCAxSDIuNDk1YS41LjUgMCAwIDEgMC0xaDIuMDAxWm01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxMiA2IDExLjc3NiA2IDExLjVzLjEyOC0uNS4yODYtLjVoMy40MjhabS01LjIxOCAyYS41LjUgMCAwIDEgMCAxSDIuNDk1YS41LjUgMCAwIDEgMC0xaDIuMDAxWm05LTZhLjUuNSAwIDAgMSAwIDFoLTIuMDAxYS41LjUgMCAwIDEgMC0xaDIuMDAxWm0wLTJhLjUuNSAwIDAgMSAwIDFoLTIuMDAxYS41LjUgMCAwIDEgMC0xaDIuMDAxWm0wIDRhLjUuNSAwIDAgMSAwIDFoLTIuMDAxYS41LjUgMCAwIDEgMC0xaDIuMDAxWm0wIDJhLjUuNSAwIDAgMSAwIDFoLTIuMDAxYS41LjUgMCAwIDEgMC0xaDIuMDAxWm0wIDJhLjUuNSAwIDAgMSAwIDFoLTIuMDAxYS41LjUgMCAwIDEgMC0xaDIuMDAxWm0tMy43ODIgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTQgNiAxMy43NzYgNiAxMy41cy4xMjgtLjUuMjg2LS41aDMuNDI4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVEZW5zaXR5Q29tcGFjdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDN2MTFhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MVptLTEgMFYyYTEgMSAwIDAgMC0xLTFIMmExIDEgMCAwIDAtMSAxdjFoMTRabTAgMUgxdjEwYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMVY0Wk00LjUgN2EuNS41IDAgMCAxIDAgMUgyLjQ5NmEuNS41IDAgMSAxIDAtMUg0LjVabTkgMGEuNS41IDAgMSAxIDAgMWgtNmEuNS41IDAgMCAxIDAtMWg2Wm0tOSA0YS41LjUgMCAxIDEgMCAxSDIuNDk2YS41LjUgMCAxIDEgMC0xSDQuNVptOSAwYS41LjUgMCAxIDEgMCAxaC02YS41LjUgMCAxIDEgMC0xaDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UYWJsZURlbnNpdHlOb3JtYWwgPSBmdW5jdGlvbiBFdWlJY29uVGFibGVEZW5zaXR5Tm9ybWFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnYxWm0tMSAwVjJhMSAxIDAgMCAwLTEtMUgyYTEgMSAwIDAgMC0xIDF2MWgxNFptMCAxSDF2MTBhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xVjRaTTQuNSA2YS41LjUgMCAwIDEgMCAxSDIuNDk2YS41LjUgMCAxIDEgMC0xSDQuNVptNS4yMTQgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggNyA2IDYuNzc2IDYgNi41cy4xMjgtLjUuMjg2LS41aDMuNDI4Wk00LjUgOWEuNS41IDAgMCAxIDAgMUgyLjQ5NmEuNS41IDAgMSAxIDAtMUg0LjVabTUuMjE0IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEwIDYgOS43NzYgNiA5LjVzLjEyOC0uNS4yODYtLjVoMy40MjhaTTQuNSAxMmEuNS41IDAgMSAxIDAgMUgyLjQ5NmEuNS41IDAgMSAxIDAtMUg0LjVabTktNmEuNS41IDAgMSAxIDAgMWgtMi4wMDRhLjUuNSAwIDAgMSAwLTFIMTMuNVptMCAzYS41LjUgMCAxIDEgMCAxaC0yLjAwNGEuNS41IDAgMCAxIDAtMUgxMy41Wm0wIDNhLjUuNSAwIDEgMSAwIDFoLTIuMDA0YS41LjUgMCAwIDEgMC0xSDEzLjVabS0zLjc4NiAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxMyA2IDEyLjc3NiA2IDEyLjVzLjEyOC0uNS4yODYtLjVoMy40MjhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWJsZURlbnNpdHlOb3JtYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVGFnID0gZnVuY3Rpb24gRXVpSWNvblRhZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMjU0IDE0Ljk3Ljk5NiA5LjcxMmMtLjMxNS0uMzE2LS4zOTctLjQ2My0uNDUtLjY0YS45MDkuOTA5IDAgMCAxIDAtLjUzNGMuMDUzLS4xNzcuMTM1LS4zMjQuNDUtLjY0TDcuNDMgMS40NjZjLjE4Mi0uMTgzLjI1Mi0uMjQuMzM4LS4yOTNhLjg3Ljg3IDAgMCAxIC4yNzMtLjExM2MuMDk5LS4wMjMuMTg4LS4wMzIuNDQ2LS4wMzJoNS4xNzNjLjQ0NSAwIC42MDcuMDQ2Ljc3LjEzMy4xNjIuMDg3LjI5LjIxNC4zNzcuMzc3LjA4OC4xNjIuMTM0LjMyNC4xMzYuNzY5bC4wMTUgNS4xNWMwIC4yNTktLjAwOS4zNDgtLjAzMi40NDhhLjg3Ljg3IDAgMCAxLS4xMTIuMjczYy0uMDU0LjA4Ny0uMTExLjE1Ny0uMjk0LjM0TDguMDY3IDE0Ljk3Yy0uMzE1LjMxNS0uNDYyLjM5Ni0uNjM5LjQ1YS45MDkuOTA5IDAgMCAxLS41MzUgMGMtLjE3Ni0uMDU0LS4zMjQtLjEzNS0uNjM5LS40NVptMS4xMDYtLjcwNyA2LjQ1My02LjQ1M2MuMDkyLS4wOTIuMTI2LS4xMjguMTQxLS4xNDcuMDAzLS4wMjUuMDA0LS4wNzQuMDA0LS4yMDRsLS4wMTUtNS4xNWMwLS4xODEtLjAwMy0uMjQ1LS4wMDktLjI3NWEyLjI0NyAyLjI0NyAwIDAgMC0uMjc0LS4wMDdIOC40ODdjLS4xMyAwLS4xNzkuMDAxLS4yMDMuMDA0LS4wMi4wMTUtLjA1NS4wNS0uMTQ3LjE0MUwxLjcwMyA4LjYwNmEyLjI0OCAyLjI0OCAwIDAgMC0uMTg5LjJjLjAxNy4wMjQuMDYxLjA3LjE5LjE5OGw1LjI1NyA1LjI1OWMuMTI4LjEyOC4xNzUuMTcxLjIuMTg4LjAyNC0uMDE3LjA3MS0uMDYuMi0uMTg4Wm00Ljk3Mi0xMC42MDdhMiAyIDAgMSAxLTIuODI4IDIuODI4IDIgMiAwIDAgMSAyLjgyOC0yLjgyOFptLS43MDcuNzA3YTEgMSAwIDEgMC0xLjQxNCAxLjQxNCAxIDEgMCAwIDAgMS40MTQtMS40MTRaTTYuODA3IDExLjI4IDQuNjg2IDkuMTU5YS41LjUgMCAxIDEgLjcwNy0uNzA3bDIuMTIxIDIuMTJhLjUuNSAwIDEgMS0uNzA3LjcwOFptMS40MTQtMS40MTQtMi4xMi0yLjEyMmEuNS41IDAgMSAxIC43MDYtLjcwN0w4LjkyOCA5LjE2YS41LjUgMCAxIDEtLjcwNy43MDdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVGVhciA9IGZ1bmN0aW9uIEV1aUljb25UZWFyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41NTMgMS43NzZhLjUuNSAwIDAgMSAuODk0IDBsNCA4YS41LjUgMCAwIDEgLjA1My4yMzVjLS4wMDQuMTUtLjAyNi4zOTYtLjA4NC43MDVhNS41MzggNS41MzggMCAwIDEtLjUwNSAxLjUxMkMxMS4xODkgMTMuNjM4IDkuOTA2IDE0LjUgOCAxNC41Yy0xLjkwNiAwLTMuMTktLjg2Mi0zLjkxLTIuMjcyYTUuNTM4IDUuNTM4IDAgMCAxLS41MDYtMS41MTIgNC42NzIgNC42NzIgMCAwIDEtLjA4NC0uNzA1LjUuNSAwIDAgMSAuMDUzLS4yMzVsNC04Wm0tMy4wNDYgOC4zMjljLjAwOS4xMDYuMDI3LjI1My4wNi40MjkuMDc5LjQyNC4yMTMuODQ4LjQxMyAxLjIzOEM1LjUzNyAxMi44NjIgNi40ODcgMTMuNSA4IDEzLjVjMS41MTMgMCAyLjQ2My0uNjM4IDMuMDItMS43MjguMi0uMzkuMzM0LS44MTQuNDEzLTEuMjM4LjAzMy0uMTc2LjA1MS0uMzIzLjA2LS40M0w4IDMuMTE5bC0zLjQ5MyA2Ljk4N1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRlYXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVGVtcGVyYXR1cmUgPSBmdW5jdGlvbiBFdWlJY29uVGVtcGVyYXR1cmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgMTVhMy41IDMuNSAwIDAgMS0xLjc1LTYuNTMyTDcgOC4zMjRWMi41QTEuNDk2IDEuNDk2IDAgMCAxIDkuOTA4IDJIOC41djFIMTB2MUg4LjV2MUgxMHYxSDguNXYxSDEwdjEuMzI0bC4yNS4xNDRBMy41IDMuNSAwIDAgMSA4LjUgMTVNMTEgNy43NThWMi41YTIuNSAyLjUgMCAxIDAtNSAwdjUuMjU4YTQuNSA0LjUgMCAxIDAgNSAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgOWEyLjUgMi41IDAgMSAxIDAgNSAyLjUgMi41IDAgMCAxIDAtNVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGVtcGVyYXR1cmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVGltZVJlZnJlc2ggPSBmdW5jdGlvbiBFdWlJY29uVGltZVJlZnJlc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIuODA5IDguODA3YTQuNSA0LjUgMCAwIDEtNS41NzItNS43NUE1IDUgMCAwIDAgMy4wNCA5LjMxYS41LjUgMCAwIDEtLjk2Ni4yNTkgNiA2IDAgMCAxIDUuNjcyLTcuNTUzIDQuNSA0LjUgMCAxIDEgNi4xMTcgNi4zMTMgNi4wMDIgNi4wMDIgMCAwIDEtNy44MDMgNS40MDkuNS41IDAgMSAxIC4zMDMtLjk1NCA1LjAwMSA1LjAwMSAwIDAgMCA2LjQ0NS0zLjk3OVpNMTEuODU5IDVIMTMuNWEuNS41IDAgMCAwIDAtMUgxMlYxLjVhLjUuNSAwIDAgMC0xIDB2M2EuNS41IDAgMCAwIC41LjVoLjM2WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTMuNzU3IDE1Ljg0OC0uNzc2LTIuODk3YTEuNSAxLjUgMCAwIDEgMS4wNi0xLjgzOGwyLjg5OC0uNzc2YS41LjUgMCAxIDEgLjI1OS45NjZsLTIuODk4Ljc3NmEuNS41IDAgMCAwLS4zNTMuNjEzbC43NzYgMi44OThhLjUuNSAwIDAgMS0uOTY2LjI1OFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRpbWVSZWZyZXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRpbWVsaW5lID0gZnVuY3Rpb24gRXVpSWNvblRpbWVsaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcgNC41YS41LjUgMCAwIDAgMSAwVjRoMWExIDEgMCAwIDAgMS0xVjFhMSAxIDAgMCAwLTEtMUg2YTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxaDF2LjV6TTkgMUg2djJoM1Yxek0yIDcuNWEuNS41IDAgMSAxIDEgMCAuNS41IDAgMCAxLTEgMHpNMi41IDlhMS41IDEuNSAwIDAgMS0xLjQxNS0xSC41YS41LjUgMCAwIDEgMC0xaC41ODVhMS41IDEuNSAwIDAgMSAyLjgzIDBoMi4xN2ExLjUgMS41IDAgMCAxIDIuODMgMGgyLjE3YTEuNSAxLjUgMCAwIDEgMi44MyAwaC41ODVhLjUuNSAwIDAgMSAwIDFoLS41ODVhMS41IDEuNSAwIDAgMS0yLjgzIDBoLTIuMTdhMS41IDEuNSAwIDAgMS0yLjgzIDBoLTIuMTdBMS41IDEuNSAwIDAgMSAyLjUgOXpNMTMgNy41YS41LjUgMCAxIDAtMSAwIC41LjUgMCAwIDAgMSAwem0tNSAwYS41LjUgMCAxIDAtMSAwIC41LjUgMCAwIDAgMSAwek0yLjUgMTBhLjUuNSAwIDAgMC0uNS41di41SDFhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDFoM2ExIDEgMCAwIDAgMS0xdi0yYTEgMSAwIDAgMC0xLTFIM3YtLjVhLjUuNSAwIDAgMC0uNS0uNXpNNCAxNHYtMkgxdjJoM3ptOC0zLjVhLjUuNSAwIDAgMSAxIDB2LjVoMWExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtM2ExIDEgMCAwIDEtMS0xdi0yYTEgMSAwIDAgMSAxLTFoMXYtLjV6bTIgMi41djFoLTN2LTJoM3YxelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGltZWxpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVGltZWxpbmVXaXRoQXJyb3cgPSBmdW5jdGlvbiBFdWlJY29uVGltZWxpbmVXaXRoQXJyb3coX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy44NTQgNC44NTRBLjUuNSAwIDAgMSA3IDQuNVY0SDZhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTFoM2ExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg4di41YS41LjUgMCAwIDEtLjE0Ni4zNTRaTTYgM1YxaDN2Mkg2Wk0yLjE0NiA5LjE0NkEuNS41IDAgMCAwIDIgOS41di41SDFhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDFoM2ExIDEgMCAwIDAgMS0xdi0yYTEgMSAwIDAgMC0xLTFIM3YtLjVhLjUuNSAwIDAgMC0uODU0LS4zNTRaTTQgMTN2LTJIMXYyaDNaTTExLjUgMTVhNC41IDQuNSAwIDEgMCAwLTkgNC41IDQuNSAwIDAgMCAwIDlabS4zNTQtNi44NTQgMiAyYS41LjUgMCAwIDEgMCAuNzA4bC0yIDJhLjUuNSAwIDAgMS0uNzA3LS43MDhMMTIuMjkzIDExSDkuNWEuNS41IDAgMCAxIDAtMWgyLjc5M2wtMS4xNDYtMS4xNDZhLjUuNSAwIDEgMSAuNzA3LS43MDhaTTguMzM3IDZIMy45MTVhMS41IDEuNSAwIDAgMC0yLjgzIDBILjVhLjUuNSAwIDAgMCAwIDFoLjU4NWExLjUgMS41IDAgMCAwIDIuODMgMGgzLjM0MmMuMzE0LS4zOC42NzctLjcxNiAxLjA4LTFaTTIgNi41YS41LjUgMCAxIDEgMSAwIC41LjUgMCAwIDEtMSAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGltZWxpbmVXaXRoQXJyb3c7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVGltZXNsaWRlciA9IGZ1bmN0aW9uIEV1aUljb25UaW1lc2xpZGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuOTIzIDhBNS45MyA1LjkzIDAgMCAwIDggMi4wNzcgNS45MyA1LjkzIDAgMCAwIDIuMDc3IDhhNS45MyA1LjkzIDAgMCAwIDYuMjk2IDUuOTEyYy4zMjgtLjAyMS42MjUuMjI3LjYyNS41NTZhLjUwNC41MDQgMCAwIDEtLjQ1OC41MTEgNyA3IDAgMSAxIDYuNDMtNi4zMzNjLS4wMzYuMzk4LS40ODcuNTgtLjgxNy4zNTRhLjU5NS41OTUgMCAwIDEtLjI0OC0uNTRjLjAxMi0uMTUyLjAxOC0uMzA1LjAxOC0uNDZ6bTEuNjg0IDMuMi00LjMyLTMuMDU1Yy0uNTYtLjM5Ni0xLjI4Ny4wNTktMS4yODcuOHY2LjEwOGMwIC43NC43MjYgMS4xOTYgMS4yODcuOGw0LjMyLTMuMDU1Yy41MjQtLjM3LjUyNC0xLjIyOCAwLTEuNTk4ek03LjQ2MiA3LjQ2Mkg0Ljc2OWEuNTM5LjUzOSAwIDAgMCAwIDEuMDc2SDhBLjUzOS41MzkgMCAwIDAgOC41MzggOFYzLjY5MmEuNTM5LjUzOSAwIDAgMC0xLjA3NiAwdjMuNzd6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGltZXNsaWRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkFsaWFzID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQWxpYXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOS4wNzUgNi45NTNhLjUuNSAwIDEgMS0uNzA3LjcwNyAxLjUgMS41IDAgMCAwLTIuMTIyIDBMNC4xMjUgOS43ODJhMS41IDEuNSAwIDEgMCAyLjEyMSAyLjEyMWwxLjE0NS0xLjE0NGEuNS41IDAgMCAxIC43MDcuNzA3TDYuOTUzIDEyLjYxYTIuNSAyLjUgMCAxIDEtMy41MzUtMy41MzVsMi4xMjEtMi4xMjJhMi41IDIuNSAwIDAgMSAzLjUzNiAwWm0zLjUzNS0zLjUzNWEyLjUgMi41IDAgMCAxIDAgMy41MzVMMTAuNDkgOS4wNzVhMi41IDIuNSAwIDAgMS0zLjUzNiAwIC41LjUgMCAxIDEgLjcwNy0uNzA4IDEuNSAxLjUgMCAwIDAgMi4xMjIgMGwyLjEyMS0yLjEyYTEuNSAxLjUgMCAxIDAtMi4xMjEtMi4xMjJMOC42MzcgNS4yNjlhLjUuNSAwIDEgMS0uNzA3LS43MDdsMS4xNDUtMS4xNDRhMi41IDIuNSAwIDAgMSAzLjUzNSAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5BbGlhczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkFubm90YXRpb24gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Bbm5vdGF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguMTUgMy4zOTJjMi43OTcgMCA0LjUyNCAxLjY0NCA0LjUxNyA0LjI4OS4wMDcgMS44MTYtLjcwOCAyLjg5My0yLjIxIDMuMDA0LS45MDguMDc2LTEuMDgxLS4yODctMS4xNTctLjcyNWgtLjA0MWMtLjE2My40Mi0uOTY0LjczMi0xLjc0NC42ODMtMS4wNTMtLjA2NS0yLjA4Mi0uODQyLTIuMDktMi41NzIuMDA4LTEuNzIgMS4wNzEtMi40NDEgMS45NTktMi41ODYuODA0LS4xMzUgMS41OTguMTU4IDEuNzIzLjQ2MmguMDUxdi0uMzg2aDEuMTk1djMuNDUyYy4wMDcuMy4xMjguNDI1LjMwNC40MjUuNCAwIC42NzctLjU4My42NzMtMS44NjEuMDA0LTIuMzc2LTEuNzA1LTIuOTE0LTMuMTg3LTIuOTE0LTIuMzQgMC0zLjQxNSAxLjUyMi0zLjQyMiAzLjM4Ny4wMDcgMi4xMjcgMS4yMiAzLjI3NyAzLjQzMyAzLjI3Ny44MDggMCAxLjU5OC0uMTc2IDIuMDA2LS4zNDlsLjM5MyAxLjEyMmMtLjQzNS4yNy0xLjQxOS41MDgtMi40OTMuNTA4LTIuOTggMC00LjcyMy0xLjY2LTQuNzI3LTQuNDk2LjAwNC0yLjgwNCAxLjc0OC00LjcyIDQuODE3LTQuNzJaTTcuOTY0IDYuNzljLS43NiAwLTEuMTg1LjQ1OS0xLjE4OCAxLjI0LjAwMy42ODMuMyAxLjMzMiAxLjIwMiAxLjMzMi44MjEgMCAxLjA5NC0uNDczIDEuMDc3LTEuMzQzLS4wMDQtLjcxOC0uMjA0LTEuMjMtMS4wOTEtMS4yM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQW5ub3RhdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkFycmF5ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQXJyYXkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC4zOTIgMTJWNGgyLjcxM3YxLjE0aC0xLjIxdjUuNzJoMS4yMVYxMkg0LjM5MlptNy42OTItOHY4SDkuMzd2LTEuMTRoMS4yMDlWNS4xNEg5LjM3VjRoMi43MTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkFycmF5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuQmluYXJ5ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQmluYXJ5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyIDRINHY4aDhWNFpNOC41IDUuNWgtM3Y1aDN2LTVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkJpbmFyeTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkJvb2xlYW4gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Cb29sZWFuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMTNBNSA1IDAgMSAxIDggM2E1IDUgMCAwIDEgMCAxMFptLTIuODI4LTIuMTcyYTQgNCAwIDAgMSA1LjY1Ni01LjY1NmMuMDA0LjAxMy01LjY0NSA1LjY3NC01LjY1NiA1LjY1NlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQm9vbGVhbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkNsYXNzID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQ2xhc3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuMzMzIDcuMDI3SDkuMzc1Yy0uMDU2LS43MDgtLjQ4LTEuMTg3LTEuMjIyLTEuMTg3LS45NzIgMC0xLjUuODA2LTEuNSAyLjE2IDAgMS40My41NDUgMi4xNiAxLjQ4NiAyLjE2LjcwOCAwIDEuMTM5LS40MTUgMS4yMzYtMS4wOGwxLjk1OC4wMTVDMTEuMjM2IDEwLjQxOCAxMC4xODEgMTIgOC4wOTcgMTJjLTEuOTU4IDAtMy40My0xLjQxLTMuNDMtNCAwLTIuNiAxLjUxNC00IDMuNDMtNCAxLjc5MiAwIDMuMDg0IDEuMDk1IDMuMjM2IDMuMDI3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5DbGFzczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMgNGExIDEgMCAwIDEgMS0xaDhhMSAxIDAgMCAxIDEgMXY1Ljk5NmExIDEgMCAwIDEtMSAxaC0xLjY2MUw3LjQgMTMuMkEuMjUuMjUgMCAwIDEgNyAxM3YtMi4wMDRINGExIDEgMCAwIDEtMS0xVjR6bTEuNSAxYS41LjUgMCAwIDEgLjUtLjVoNmEuNS41IDAgMCAxIC41LjV2NGEuNS41IDAgMCAxLS41LjVoLS45TDggMTFWOS41SDVhLjUuNSAwIDAgMS0uNS0uNVY1elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNzUgNmExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJ6bTIuNSAwYTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkNvbnN0YW50ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQ29uc3RhbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJtOS40MTQgMy43NTcgMi44MjkgMi44MjlhMiAyIDAgMCAxIDAgMi44MjhsLTIuODI5IDIuODI5YTIgMiAwIDAgMS0yLjgyOCAwTDMuNzU3IDkuNDE0YTIgMiAwIDAgMSAwLTIuODI4bDIuODI5LTIuODI5YTIgMiAwIDAgMSAyLjgyOCAwWm0tMS43NDcgMi45MWExIDEgMCAwIDAtMSAxdi42NjZhMSAxIDAgMCAwIDEgMWguNjY2YTEgMSAwIDAgMCAxLTF2LS42NjZhMSAxIDAgMCAwLTEtMWgtLjY2NlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQ29uc3RhbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5EYXRlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRGF0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMyAxMS41NjdDMTMgMTIuMzYgMTIuMzYgMTMgMTEuNTY3IDEzSDQuNDMzQzMuNjQgMTMgMyAxMi4zNiAzIDExLjU2N1Y0LjQzM0MzIDMuNjQgMy42NCAzIDQuNDMzIDNINnYtLjQ5NWEuNTEuNTEgMCAwIDEgLjQxMi0uNDk3TDYuNSAyYy4yNzYgMCAuNS4yMTQuNS41MDVWM2gydi0uNDk1YS41MS41MSAwIDAgMSAuNDEyLS40OTdMOS41IDJjLjI3NiAwIC41LjIxNC41LjUwNVYzaDEuNTY3QzEyLjM2IDMgMTMgMy42NCAxMyA0LjQzM3Y3LjEzNFpNNCA2djUuMzNjMCAuMzcuMy42Ny42Ny42N2g2LjY2Yy4zNyAwIC42Ny0uMy42Ny0uNjdWNkg0Wm0xLjUgNGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDYgMTAuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw1LjUgMTFhLjUwNS41MDUgMCAwIDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMNS41IDEwWk04IDEwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJsLjAwOC4wODhjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMOCAxMWEuNTA1LjUwNSAwIDAgMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw4IDEwWm0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDExIDEwLjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMMTAuNSAxMWEuNTA1LjUwNSAwIDAgMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5MkwxMC41IDEwWm0tNS0xLjVjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw2IDljMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMNS41IDkuNUEuNTA1LjUwNSAwIDAgMSA1IDljMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMNS41IDguNVptMi41IDBjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw4LjUgOWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw4IDkuNWEuNTA1LjUwNSAwIDAgMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw4IDguNVptMi41IDBjLjI0NSAwIC40NS4xODMuNDkyLjQxMkwxMSA5YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDEwLjUgOS41QS41MDUuNTA1IDAgMCAxIDEwIDljMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMMTAuNSA4LjVaTTUuNSA3Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMNiA3LjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMNS41IDhhLjUwNS41MDUgMCAwIDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMNS41IDdaTTggN2MuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDguNSA3LjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMOCA4YS41MDUuNTA1IDAgMCAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDggN1ptMi41IDBjLjI0NSAwIC40NS4xODMuNDkyLjQxMkwxMSA3LjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMMTAuNSA4YS41MDUuNTA1IDAgMCAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDEwLjUgN1pNNCA1aDh2LS4zM2MwLS4zNy0uMy0uNjctLjY3LS42N0g0LjY3QzQuMyA0IDQgNC4zIDQgNC42N1Y1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5EYXRlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuRGltZW5zaW9uID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRGltZW5zaW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMTAuNWEuNS41IDAgMCAwLTEgMHYxYS41LjUgMCAwIDAgLjUuNWgxYS41LjUgMCAwIDAgMC0xSDEydi0uNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zIDEyaDMuMDc4Yy43MjggMCAxLjM3LS4xMjcgMS45MjQtLjM4M2EzLjUgMy41IDAgMSAwIDIuMDUzLTMuMzA2Yy4wMDUtLjEwMS4wMDgtLjIwNS4wMDgtLjMxMSAwLS44MzMtLjE2NS0xLjU0OC0uNDkzLTIuMTQ1QTMuMzA5IDMuMzA5IDAgMCAwIDguMTggNC40OEM3LjU4IDQuMTYgNi44NyA0IDYuMDQ3IDRIM3Y4Wm02Ljc4Ny0yLjMyMUEyLjUgMi41IDAgMCAwIDExLjUgMTRhMi41IDIuNSAwIDEgMC0xLjcxMy00LjMyMVpNNiAxMC4xNTZoLS44MjhWNS44NDRoLjc2NmMuNDE2IDAgLjc2OC4wNjQgMS4wNTQuMTkxLjI5LjEyOC41MDguMzQ4LjY1Ni42Ni4xNTEuMzEzLjIyNy43NDguMjI3IDEuMzA1IDAgLjU1Ny0uMDc0Ljk5Mi0uMjIzIDEuMzA1YTEuMjkgMS4yOSAwIDAgMS0uNjQuNjZjLS4yNzkuMTI3LS42MTYuMTkxLTEuMDEyLjE5MVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRGltZW5zaW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuRWxlbWVudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVsZW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJtNy4zOSA5LjczNi0xLjA0MS45NEwzLjI1OCA4bDMuMDktMi42NzcgMS4wNDEuOTQtMi4wMzIgMS43MjJ2LjAzbDIuMDMyIDEuNzIxWm0yLjc3Ny45NC0xLjA0LS45NCAyLjAzMi0xLjcyMXYtLjAzTDkuMTI2IDYuMjY0bDEuMDQtLjk0TDEzLjI1OSA4bC0zLjA5MSAyLjY3N1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRWxlbWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkVudW0gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5FbnVtKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUuMjExIDEyVjRoNS41Nzh2MS41N0g3LjE0NXYxLjY0MWgzLjM1OXYxLjU3NEg3LjE0NXYxLjY0NWgzLjY0NFYxMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRW51bTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkVudW1NZW1iZXIgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5FbnVtTWVtYmVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNjgyIDEyVjkuMjQ3bDEuMDIzLS44NjFhLjUuNSAwIDAgMC0uMDAzLS43NjhsLTEuMDItLjg0NFY0aDUuNTc4djEuNTdIOS42MTV2MS42NGgzLjM2djEuNTc1aC0zLjM2djEuNjQ1aDMuNjQ1VjEySDcuNjgyWm0uNzQzLTQuMTAzYS4xMzguMTM4IDAgMCAxIDAgLjIwNkw2LjE1OCA5Ljk3YS4xMzMuMTMzIDAgMCAxLS4yMTgtLjEwM3YtLjkzNEgyLjg3M0EuMTMzLjEzMyAwIDAgMSAyLjc0IDguOFY3LjJjMC0uMDc0LjA2LS4xMzMuMTMzLS4xMzNINS45NHYtLjkzNGEuMTMzLjEzMyAwIDAgMSAuMjE4LS4xMDNsMi4yNjcgMS44NjdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkVudW1NZW1iZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5FdmVudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkV2ZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjIyNSA1LjY1NmMwIC40MjMtLjEwNi43OS0uMzE4IDEuMTAyLS4yMTEuMzExLS41MS41Ny0uODk4Ljc3NWE1LjQzNSA1LjQzNSAwIDAgMS0xLjM5Mi40ODVjLS41NC4xMTctMS4xNC4xOTMtMS43OTguMjI5YTYuMDQ3IDYuMDQ3IDAgMCAwLS4wMzUuNjdjMCAuMjU4LjAyLjUxLjA2Mi43NTcuMDQuMjQ3LjExNC40NjQuMjIuNjUycy4yNS4zNC40MzIuNDU4LjQxNC4xNzYuNjk2LjE3NmMuMjExIDAgLjQ2Ny0uMDQ0Ljc2Ni0uMTMyLjMtLjA4OC42Mi0uMjQ0Ljk2LS40NjcuMTA2LS4wNy4xOTItLjEyOS4yNTYtLjE3NmEuMzY1LjM2NSAwIDAgMSAuMjItLjA3Yy4xMTggMCAuMTk3LjA2MS4yMzguMTg1YS45OS45OSAwIDAgMSAuMDYyLjI1NSA3LjEgNy4xIDAgMCAxLS41NzMuNDY3IDQuOTMgNC45MyAwIDAgMS0uNzc1LjQ2N2MtLjI4OC4xNDEtLjYuMjYxLS45MzQuMzYxLS4zMzUuMS0uNjc4LjE1LTEuMDMuMTUtLjU0MSAwLS45ODItLjA4OC0xLjMyMi0uMjY0YTIuMDcyIDIuMDcyIDAgMCAxLS43OTMtLjY4OCAyLjYyNiAyLjYyNiAwIDAgMS0uMzg4LS45MzMgNC45NDkgNC45NDkgMCAwIDEtLjEwNi0xLjAwNWMwLS42MzQuMTAzLTEuMjU3LjMwOS0xLjg2OC4yMDUtLjYxLjQ5OS0xLjE1Ny44OC0xLjYzOC4zODMtLjQ4Mi44MzgtLjg3IDEuMzY2LTEuMTYzQTMuNTY3IDMuNTY3IDAgMCAxIDkuMDkzIDRjLjU5OSAwIDEuMTA0LjEyNiAxLjUxNS4zNzkuNDExLjI1Mi42MTcuNjc4LjYxNyAxLjI3N1ptLTIuNDY3LS45NTFjLS4yMjMgMC0uNDM1LjA4LS42MzUuMjM4LS4yLjE1OC0uMzgxLjM3My0uNTQ2LjY0My0uMTY0LjI3LS4zMDUuNTc4LS40MjMuOTI1YTYuNDIgNi40MiAwIDAgMC0uMjY0IDEuMTAxYy40Ny0uMDQ3Ljg2My0uMTM1IDEuMTgtLjI2NC4zMTgtLjEzLjU3LS4yODUuNzU4LS40NjcuMTg4LS4xODIuMzIzLS4zODguNDA1LS42MTcuMDgzLS4yMjkuMTI0LS40NjcuMTI0LS43MTMgMC0uMjctLjA1Ni0uNDc5LS4xNjgtLjYyNmEuNTE5LjUxOSAwIDAgMC0uNDMxLS4yMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRXZlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5FeGNlcHRpb24gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5FeGNlcHRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjQ2MSA3LjMxaDMuMDU1YS43NC43NCAwIDAgMSAuNjYgMS4wNzRsLTIuMTQxIDQuMjExYS43NC43NCAwIDEgMS0xLjMxOS0uNjdMOS4zMSA4Ljc5SDYuMjU2YS43NC43NCAwIDAgMS0uNjYtMS4wNzVsMi4xOS00LjMxYS43NC43NCAwIDAgMSAxLjMxOS42N0w3LjQ2MSA3LjMxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5FeGNlcHRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5GaWVsZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkZpZWxkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUuMjcgMTJWNGg1LjQ2djEuNTdINy4yMDN2MS42NDFoMy4xOHYxLjU3NGgtMy4xOFYxMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRmllbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5GaWxlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRmlsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODY3IDIuNjY3SDRhLjY2Ny42NjcgMCAwIDAtLjY2Ny42NjZ2OS4zMzRjMCAuMzY4LjI5OS42NjYuNjY3LjY2Nmg4YS42NjcuNjY3IDAgMCAwIC42NjctLjY2NlY1LjYxOWEuNjY5LjY2OSAwIDAgMC0uMTgzLS40NTlsLTIuMTMzLTIuMjg1YS42NjguNjY4IDAgMCAwLS40ODQtLjIwOG0xLjQ2NiA0VjEySDQuNjY3VjRoNHYyLjMzM2MwIC4xODQuMTQ5LjMzNC4zMzMuMzM0aDIuMzMzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GaWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuRmxhdHRlbmVkID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRmxhdHRlbmVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy4yNSAzYS4yNS4yNSAwIDAgMC0uMjUuMjV2MmMwIC4xMzguMTEyLjI1LjI1LjI1aDkuNWEuMjUuMjUgMCAwIDAgLjI1LS4yNXYtMmEuMjUuMjUgMCAwIDAtLjI1LS4yNWgtOS41em0wIDMuNzVBLjI1LjI1IDAgMCAwIDMgN3YyYzAgLjEzOC4xMTIuMjUuMjUuMjVINS41QS4yNS4yNSAwIDAgMCA1Ljc1IDlWN2EuMjUuMjUgMCAwIDAtLjI1LS4yNUgzLjI1em0tLjI1IDRhLjI1LjI1IDAgMCAxIC4yNS0uMjVINS41YS4yNS4yNSAwIDAgMSAuMjUuMjV2MmEuMjUuMjUgMCAwIDEtLjI1LjI1SDMuMjVhLjI1LjI1IDAgMCAxLS4yNS0uMjV2LTJ6bTMuMzEtLjcyN2MtLjA4Mi0uMDczLS4wODItLjIyNCAwLS4yOTZsMy4wNTQtMi42ODNhLjE3LjE3IDAgMCAxIC4xOS0uMDI2Yy4wNjQuMDMyLjEwNC4xLjEwNC4xNzR2MS4zNDFsMy4xNjEtLjAxNmMuMSAwIC4xOC4wODYuMTguMTkydjIuM2MwIC4xMDUtLjA4LjE5MS0uMTguMTkxbC0zLjE2MS4wMTd2MS4zNDFjMCAuMDc0LS4wNC4xNDItLjEwMy4xNzRhLjE3LjE3IDAgMCAxLS4xOS0uMDI1TDYuMzEgMTAuMDIzelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GbGF0dGVuZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5GdW5jdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkZ1bmN0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjI2NiA0LjE1VjUuNjNhMi40MSAyLjQxIDAgMCAwLS44NTktLjE0NWMtLjY5MiAwLTEuMDY1LjM0Ni0xLjE3NyAxLjA0M2wtLjExLjYyNWgxLjgyOHYxLjQ0SDguOTIxbC0uMjA0IDEuMTE1QzguNDU1IDExLjMyNSA3LjUxNyAxMiA1LjkgMTJjLS40NjkgMC0uODgyLS4wNjEtMS4xNjYtLjE2N3YtMS40OTVjLjI3My4xMTcuNTkxLjE3OC45MDMuMTc4LjY1OSAwIDEuMDEtLjI5IDEuMTI3LTEuMDE1bC4xNTctLjkxSDUuMjQ3VjcuMTUyaDEuODM3bC4xODgtLjg0MkM3LjUzNCA0LjcxNCA4LjQzMiA0IDEwLjE5IDRjLjM5IDAgLjg1My4wNjcgMS4wNzYuMTVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkZ1bmN0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuR2VvID0gZnVuY3Rpb24gRXVpSWNvblRva2VuR2VvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggM2MxLjYzNiAwIDMuMDg4Ljc4NSA0IDIgLjYyOC44MzYgMSAxLjg3NSAxIDNhNC45NzggNC45NzggMCAwIDEtLjk5OSAzSDEyYTQuOTkyIDQuOTkyIDAgMCAxLTQgMiA0Ljk5MiA0Ljk5MiAwIDAgMS00LTEuOTk5VjExYTUgNSAwIDAgMSA0LThabS45NDggOEg3LjA1MmMuMjc3LjYyNi42MjMgMSAuOTQ4IDEgLjMyNSAwIC42Ny0uMzc0Ljk0OC0xWk02IDExbC0uNjQ1LjAwMWMuMjc0LjI0Mi41ODEuNDQ2LjkxNC42MDZBNS40NDUgNS40NDUgMCAwIDEgNiAxMS4wMDFabTQuNjQ1LjAwMUgxMGE1LjUxIDUuNTEgMCAwIDEtLjI2OS42MDZjLjMzMy0uMTYuNjQtLjM2NC45MTQtLjYwNlptLTUuMTMzLTIuNUg0LjAzMWMuMDY4LjU0LjI0MyAxLjA0OC41MDUgMS41aDEuMTcyYTkuMTg2IDkuMTg2IDAgMCAxLS4xOTYtMS41Wm0zLjk3NSAwSDYuNTEzYy4wMy41NDQuMTA0IDEuMDUuMjEgMS41aDIuNTUzYy4xMDctLjQ1LjE4Mi0uOTU2LjIxLTEuNVptMi40ODIgMGgtMS40ODFhOS4xODYgOS4xODYgMCAwIDEtLjE5NiAxLjVoMS4xNzJjLjI2Mi0uNDUyLjQzNy0uOTYuNTA1LTEuNVpNNS43MDggNiA0LjUzNSA2Yy0uMjYxLjQ1Mi0uNDM3Ljk2LS41MDQgMS41aDEuNDgxQTkuMTg3IDkuMTg3IDAgMCAxIDUuNzA4IDZabTMuNTY4IDBINi43MjRjLS4xMDcuNDQ5LS4xODIuOTU1LS4yMSAxLjQ5OWgyLjk3M2E4LjQ3OSA4LjQ3OSAwIDAgMC0uMjEtMS41Wk0xMS40NjUgNmgtMS4xNzNjLjEwMi40NjcuMTcuOTcyLjE5NiAxLjVoMS40ODFhMy45NzQgMy45NzQgMCAwIDAtLjUwNC0xLjVaTTYuMjY5IDQuMzkzbC0uMTI0LjA2MmMtLjI4Ni4xNS0uNTUxLjMzMy0uNzkuNTQ1SDZhNS41MSA1LjUxIDAgMCAxIC4yNjktLjYwN1pNOCA0Yy0uMzI2IDAtLjY3MS4zNzUtLjk0OCAxaDEuODk2QzguNjcxIDQuMzc2IDguMzI2IDQgOCA0Wm0xLjczLjM5My4wMzguMDcxYy4wODMuMTY4LjE2MS4zNDcuMjMyLjUzNmguNjQ2YTQuMDA2IDQuMDA2IDAgMCAwLS45MTUtLjYwN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuR2VvOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuSGlzdG9ncmFtID0gZnVuY3Rpb24gRXVpSWNvblRva2VuSGlzdG9ncmFtKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAzaDR2NWgyVjUuNWg0VjEzSDMuMDAxdi0xSDNWM3ptMSA5aDJWNEg0djh6bTMgMGgyVjlIN3Yzem0zIDBoMlY2LjVoLTJWMTJ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkhpc3RvZ3JhbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbklQID0gZnVuY3Rpb24gRXVpSWNvblRva2VuSVAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEgM2EyIDIgMCAwIDEgMiAydjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDZabS0xIDJIOHY2aDFWOS4wMTRoMWMuMjk4LS4wMTMgMiAwIDItMi4wMTggMC0xLjc0LTEuMzE0LTEuOTUyLTEuODI1LTEuOTg3TDEwIDVaTTYgNUg1djZoMVY1Wm00IC45ODRjLjY2NyAwIDEgLjMzNiAxIDEuMDA4QzExIDcuNjY0IDEwLjY2NyA4IDEwIDhIOVY1Ljk4NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuSVA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5JbnRlcmZhY2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5JbnRlcmZhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC45NjcgMTAuNjUzaDEuNzI3VjEySDUuMzA2di0xLjM0N2gxLjcyN1Y1LjM0N0g1LjMwNlY0aDUuMzg4djEuMzQ3SDguOTY3djUuMzA2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5JbnRlcmZhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5Kb2luID0gZnVuY3Rpb24gRXVpSWNvblRva2VuSm9pbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgNC41djEuMDI1YzAgMS4yNjktMS4xODUgMS45MDgtMi4xMTIgMS43MzdhLjc1Ljc1IDAgMSAwIDAgMS40NzVjLjkyNy0uMTcgMi4xMTIuNDcgMi4xMTIgMS43Mzl2MS4wMjNoNHYtMS4wMDVhMi41IDIuNSAwIDAgMSAwLTQuOTg4VjQuNWgtNFpNMTMgNGExIDEgMCAwIDAtMS0xSDdhMSAxIDAgMCAwLTEgMXYxLjUyNWMwIC4xNzItLjE3Mi4yOTMtLjM0MS4yNjJhMi4yNSAyLjI1IDAgMSAwIDAgNC40MjZjLjE3LS4wMzEuMzQxLjA5LjM0MS4yNjJWMTJhMSAxIDAgMCAwIDEgMWg1YTEgMSAwIDAgMCAxLTFWOS4wMDRhLjE2LjE2IDAgMCAwLS4wNC0uMTA1Yy0uMTA5LS4xMjUtLjU5NC0uMTYtLjczMi0uMDY4YTEgMSAwIDEgMSAwLTEuNjYyYy4xMzguMDkyLjYyMy4wNTcuNzMyLS4wNjhhLjE2LjE2IDAgMCAwIC4wNC0uMTA1VjRaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Kb2luOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuS2V5ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuS2V5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyLjY2NyA2LjU0MkEzLjIwOCAzLjIwOCAwIDAgMSA4Ljg2IDkuNjk0bC0uNDM4LjQ5MmEuNDM3LjQzNyAwIDAgMS0uMzI3LjE0N2gtLjY3OHYuNzNhLjQzNy40MzcgMCAwIDEtLjQzOC40MzdINi4yNXYuNzNhLjQzNy40MzcgMCAwIDEtLjQzOC40MzdIMy43NzJhLjQzNy40MzcgMCAwIDEtLjQzOC0uNDM4di0xLjQyM2MwLS4xMTYuMDQ2LS4yMjcuMTI4LS4zMWwyLjk1LTIuOTQ5YTMuMjA4IDMuMjA4IDAgMCAxIDMuMDQ3LTQuMjE0IDMuMjAyIDMuMjAyIDAgMCAxIDMuMjA5IDMuMjA5Wm0tMy4yMDktLjg3NWEuODc1Ljg3NSAwIDEgMCAxLjc1IDAgLjg3NS44NzUgMCAwIDAtMS43NSAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5LZXk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5LZXl3b3JkID0gZnVuY3Rpb24gRXVpSWNvblRva2VuS2V5d29yZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjMzIDEwLjI4Yy0uMTIuMDQtLjI5LjA3LS40Mi4wNy0uMjMgMC0uNDMtLjA4LS41My0uM2wtLjYzLTEuMzQgMi4zMi0yLjgxSDkuM0w3Ljc2IDcuOTNoLS4wOUw4LjIyIDRINi41OWwtMS4wNSA3LjVoMS42M2wuMjctMS45NGguMWwuNDMgMS4xMmMuMjcuNzEuNzQuOTIgMS4zMy45Mi4yMyAwIC42LS4wNC44Ni0uMTFsLjE3LTEuMjF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbktleXdvcmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5NZXRob2QgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5NZXRob2QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMy4zMzMgMTEuMDI3VjUuMDVoMi4wNTl2MS4xMzZoLjA2M2MuMjUtLjc0Ny44OTEtMS4yMTQgMS43MjgtMS4yMTQuODQ4IDAgMS41MjQuNDgzIDEuNjUgMS4yMTRoLjA2M2MuMjA0LS43MzEuOTI3LTEuMjE0IDEuODIyLTEuMjE0IDEuMTU1IDAgMS45NDkuNzk4IDEuOTQ5IDIuMDIzdjQuMDNoLTIuMTY5VjcuNTQyYzAtLjUyMS0uMjktLjg0LS43MzgtLjg0cy0uNzIzLjMxOS0uNzIzLjg0djMuNDg2SDYuOTYzVjcuNTRjMC0uNTIxLS4yOS0uODQtLjczOS0uODQtLjQ0NyAwLS43MjIuMzE5LS43MjIuODR2My40ODZIMy4zMzNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1ldGhvZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk1ldHJpY0NvdW50ZXIgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5NZXRyaWNDb3VudGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMTAuNWEuNS41IDAgMCAwLTEgMHYxYS41LjUgMCAwIDAgLjUuNWgxYS41LjUgMCAwIDAgMC0xSDEydi0uNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDNoNHY1LjAzNUEzLjUgMy41IDAgMSAxIDguMzM3IDEzSDJWOWgzVjZoM1YzWm0xLjA1IDlhMi41IDIuNSAwIDEgMSA0LjkwMi0xIDIuNSAyLjUgMCAwIDEtNC45MDIgMVpNMTEgOC4wMzVhMy40OSAzLjQ5IDAgMCAwLTIgMS4wMTZWNGgydjQuMDM1Wk04IDEySDZWN2gydjVabS0zIDB2LTJIM3YyaDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1ldHJpY0NvdW50ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5NZXRyaWNHYXVnZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1ldHJpY0dhdWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMTAuNWEuNS41IDAgMCAwLTEgMHYxYS41LjUgMCAwIDAgLjUuNWgxYS41LjUgMCAwIDAgMC0xSDEydi0uNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDNIMnYxMGg2LjMzN0EzLjUgMy41IDAgMSAwIDEyIDguMDM1VjVIOHYySDZWM1ptNSA1LjAzNVY2SDl2My4wNWEzLjQ5IDMuNDkgMCAwIDEgMi0xLjAxNVpNOSAxMS41YTIuNSAyLjUgMCAxIDEgNS4wMDIgMEEyLjUgMi41IDAgMCAxIDkgMTEuNVpNOCA4SDZ2NGgyVjhaTTUgNEgzdjhoMlY0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRyaWNHYXVnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk1vZHVsZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1vZHVsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTggMiA1LjE5NiAzdi4xNzhsLS44NjYuNDY4VjUuNUw4IDMgMy42NyA1LjV2NUw4IDEzbDQuMzMtMi41VjUuNzdsLjg2Ni0uNDc0VjExTDggMTRsLTUuMTk2LTNWNUw4IDJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjI0MyA0LjQyOSA5LjU5NyA3LjA0IDggNy45MjggMy43NDMgNS41NjNhLjUuNSAwIDEgMC0uNDg2Ljg3NEw3LjUgOC43OTRWMTMuNWgxVjguNzk0bDQuMjQzLTIuMzU3YS41MDguNTA4IDAgMCAwIC4wNi0uMDRsLjM5Mi0uMjAyVjUuMDQ3bC0uOTE3LjUwNWEuNTczLjU3MyAwIDAgMC0uMDIuMDFsLS4xMDYuMDYtLjE5MS4xMDUtMS4zNTUuNzUzLTQuODQ5LTIuOTA5LS41MTQuODU4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Nb2R1bGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5OYW1lc3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OYW1lc3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm03LjU1NiA4LjQxNi0uODA0LTEuNjhoLS4wMzZ2NS42NEg1VjRoMS45OTJsMi4yOTIgMy45Ni44MDQgMS42OGguMDM2VjRoMS43MTZ2OC4zNzZIOS44NDhsLTIuMjkyLTMuOTZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk5hbWVzcGFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk5lc3RlZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk5lc3RlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgM2MxLjA0NCAwIDEuOTEzLjc1NyAxLjk5NCAxLjczNmwuMDA2LjE0OXY2LjIzYzAgMS0uODIgMS44MDUtMS44NDUgMS44OEwxMSAxM0g5LjUwMWEuNS41IDAgMCAxLS4wOS0uOTkybC4wOS0uMDA4SDExYy41MiAwIC45MzctLjM1Ljk5My0uNzgzbC4wMDctLjEwMnYtNi4yM2MwLS40NDUtLjM3OS0uODI3LS44ODItLjg3OUwxMSA0SDkuNWEuNS41IDAgMCAxLS4wOS0uOTkyTDkuNSAzSDExWk02LjUgM2EuNS41IDAgMCAxIC4wOS45OTJMNi41IDRINWMtLjUyIDAtLjkzNy4zNS0uOTkzLjc4M0w0IDQuODg1djYuMjNjMCAuNDQ1LjM3OS44MjcuODgyLjg3OUw1IDEyaDEuNWEuNS41IDAgMCAxIC4wOS45OTJMNi41IDEzSDVjLTEuMDQ0IDAtMS45MTMtLjc1Ny0xLjk5NC0xLjczNkwzIDExLjExNXYtNi4yM2MwLTEgLjgyLTEuODA1IDEuODQ1LTEuODhMNSAzaDEuNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuODY0IDcuMjVhLjcxNC43MTQgMCAxIDEgMCAxLjQyOS43MTQuNzE0IDAgMCAxIDAtMS40MjlabTIuMTQzIDBhLjcxNC43MTQgMCAxIDEgMCAxLjQyOS43MTQuNzE0IDAgMCAxIDAtMS40MjlabTIuMTQzIDBhLjcxNC43MTQgMCAxIDEgMCAxLjQyOS43MTQuNzE0IDAgMCAxIDAtMS40MjlaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5OZXN0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5OdWxsID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTnVsbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTUuMDAyIDEyLjQxMi0uOTYyLjk2MmExIDEgMCAwIDEtMS40MTQtMS40MTRsLjk2Mi0uOTYyYTUuMzMzIDUuMzMzIDAgMCAxIDcuNDEtNy40MWwuOTYyLS45NjJhMSAxIDAgMSAxIDEuNDE0IDEuNDE0bC0uOTYyLjk2MmE1LjMzMyA1LjMzMyAwIDAgMS03LjQxIDcuNDFabS45NjYtLjk2NmE0IDQgMCAwIDAgNS40NzgtNS40NzhsLTUuNDc4IDUuNDc4Wm0tMS40MTQtMS40MTQgNS40NzgtNS40NzhhNCA0IDAgMCAwLTUuNDc4IDUuNDc4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5OdWxsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuTnVtYmVyID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTnVtYmVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy44IDkuODEyaC0uODQybC0uNzggMi4zMzVINS4wMzFsLjc4LTIuMzM1SDQuNmwuMTgyLTEuMDQzaDEuMzczbC41MDctMS41MDRINS40NTRsLjE4OC0xLjA0MmgxLjM2N2wuNzkyLTIuMzdIOC45NGwtLjc5MiAyLjM3aC44NDlsLjc5Mi0yLjM3aDEuMTQ1bC0uNzkyIDIuMzdIMTEuNGwtLjE4MiAxLjA0Mkg5LjhMOS4yOTMgOC43N2gxLjI0OGwtLjE4MyAxLjA0M0g4Ljk0NmwtLjc3NSAyLjMzNUg3LjAyNkw3LjggOS44MTJabS0uNS0xLjA0M2guODQybC41MTMtMS41MDRoLS44NDlMNy4zIDguNzdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk51bWJlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk9iamVjdCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk9iamVjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02LjYzIDEyYy0xLjI5NCAwLTIuMzgzLS4xMDUtMi4zODMtMS44MDJWOS42YzAtLjYzOC0uMjQ3LS45MTQtLjk4LS45MTR2LTEuMzdjLjczMyAwIC45OC0uMjguOTgtLjkxNXYtLjZDNC4yNDcgNC4xMDUgNS4zMzYgNCA2LjYzMSA0djEuMTRjLS43NTkgMC0uODg2LjI3Mi0uODg2Ljg0M3YuODEzYzAgLjQ3OS0uMjI1LjkzNi0xLjIxMiAxLjEzM3YuMTQyYy45ODcuMTk3IDEuMjEyLjY1NCAxLjIxMiAxLjEzM3YuODEzYzAgLjU3LjEyNy44NDQuODg2Ljg0NFYxMlptMi4yNjYtOGMxLjI5NSAwIDIuMzg0LjEwNSAyLjM4NCAxLjgwMlY2LjRjMCAuNjM4LjI0Ny45MTQuOTguOTE0djEuMzdjLS43MzMgMC0uOTguMjgtLjk4LjkxNXYuNkMxMS4yOCAxMS44OTUgMTAuMTkgMTIgOC44OTYgMTJ2LTEuMTRjLjc1OSAwIC44ODYtLjI3Mi44ODYtLjg0M3YtLjgxM2MwLS40NzkuMjI1LS45MzYgMS4yMTItMS4xMzNWNy45M2MtLjk4Ny0uMTk3LTEuMjEyLS42NTQtMS4yMTItMS4xMzN2LS44MTNjMC0uNTctLjEyNy0uODQ0LS44ODYtLjg0NFY0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5PYmplY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5PcGVyYXRvciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk9wZXJhdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuNjY3IDguMDAyYzAtMS41LjM5NC0yLjc0MyAxLjI0OC0zLjgyMmgxLjQzN2MtLjY1Mi44LTEuMTQgMi4zODgtMS4xNCAzLjgyMiAwIDEuNDMuNDg4IDMuMDE4IDEuMTQgMy44MThIMy45MTVjLS44NTQtMS4wOC0xLjI0OC0yLjMyMi0xLjI0OC0zLjgxOFpNNi43NyA5Ljk5OGwtLjgxOC0uODAzIDEuMjMtMS4xOTctMS4yMy0xLjIwMy44My0uNzkzIDEuMjIxIDEuMTkzTDkuMjMgNi4wMDJsLjgxOC43OTMtMS4yMjcgMS4yIDEuMjI3IDEuMi0uODE4LjgwM0w4IDguNzk1IDYuNzcgOS45OThabTYuNTYzLTJjMCAxLjUtLjM5NCAyLjc0My0xLjI0OCAzLjgyMmgtMS40MzdjLjY1Mi0uOCAxLjE0LTIuMzg4IDEuMTQtMy44MjIgMC0xLjQzLS40ODgtMy4wMTgtMS4xNC0zLjgxOGgxLjQzN2MuODU0IDEuMDggMS4yNDggMi4zMjIgMS4yNDggMy44MThaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk9wZXJhdG9yOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuUGFja2FnZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblBhY2thZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJtOC4wNDkgMy43ODUgMy44NTIgMS4wMDYtNC4wNDkgMS4xMDNMNCA0Ljc5MWwzLjk1MS0xLjAwNmEuMTkuMTkgMCAwIDEgLjA5OCAwWm0uMDczIDIuNjU0IDQuNTQ1LTEuMzA2djUuNDVsLS4xMzEuMTg0LTQuNDE0IDEuNDU1VjYuNDM5Wm0tNC43ODkgNC4xNDVWNS4xODhMNy40OTggNi40MXY1LjgxbC00LjAzNC0xLjQ1My0uMTMtLjE4M1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUGFja2FnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblBhcmFtZXRlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblBhcmFtZXRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljg4OSAxMlY0aDMuMzA0YzEuNzk3IDAgMi45MjIgMS4xMTcgMi45MTggMi43Ny4wMDQgMS42NTItMS4xNDQgMi43NDYtMi45NzYgMi43NDZINi44MjJWMTJINC44OVptMS45MzMtNC4wMDhoLjk1M2MuODY4IDAgMS4zMzYtLjQ3MiAxLjMzMi0xLjIyMi4wMDQtLjczLS40NjQtMS4yMTEtMS4zMzItMS4yMTFoLS45NTN2Mi40MzNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblBhcmFtZXRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblBlcmNvbGF0b3IgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5QZXJjb2xhdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUuNSA3YTEuNSAxLjUgMCAxIDAgMC0zIDEuNSAxLjUgMCAwIDAgMCAzWm0wIDFhMi41IDIuNSAwIDEgMCAwLTUgMi41IDIuNSAwIDAgMCAwIDVaTTExIDlhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm0wIDFhMiAyIDAgMSAwIDAtNCAyIDIgMCAwIDAgMCA0Wm0tMi41IDEuNWEuNS41IDAgMSAxLTEgMCAuNS41IDAgMCAxIDEgMFptMSAwYTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwWlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUGVyY29sYXRvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblByb3BlcnR5ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUHJvcGVydHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC44ODkgMTJWNGgzLjMwNGMxLjc5NyAwIDIuOTIyIDEuMTE3IDIuOTE4IDIuNzcuMDA0IDEuNjUyLTEuMTQ0IDIuNzQ2LTIuOTc2IDIuNzQ2SDYuODIyVjEySDQuODlabTEuOTMzLTQuMDA4aC45NTNjLjg2OCAwIDEuMzM2LS40NzIgMS4zMzItMS4yMjIuMDA0LS43My0uNDY0LTEuMjExLTEuMzMyLTEuMjExaC0uOTUzdjIuNDMzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Qcm9wZXJ0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblJhbmdlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUmFuZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODIgNS4xMTZhLjUuNSAwIDAgMC0uNzA0LjcwNGwuMDY0LjA2NEwxMS43MTkgOGwtMi41NCAyLjExNmEuNS41IDAgMCAwLS4xMTQuNjNsLjA1LjA3NGEuNS41IDAgMCAwIC42My4xMTVsLjA3NS0uMDUgMy0yLjVhLjUuNSAwIDAgMCAuMDcxLS42OTdsLS4wNy0uMDcyLTMtMi41Wk02LjE4IDUuMTE2YS41LjUgMCAwIDEgLjcwNC43MDRsLS4wNjQuMDY0TDQuMjgxIDhsMi41NCAyLjExNmEuNS41IDAgMCAxIC4xMTQuNjNsLS4wNS4wNzRhLjUuNSAwIDAgMS0uNjMuMTE1bC0uMDc1LS4wNS0zLTIuNWEuNS41IDAgMCAxLS4wNzEtLjY5N2wuMDctLjA3MiAzLTIuNVpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblJhbmdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuUmFua0ZlYXR1cmUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDR2OGgtMlY2SDl2NEg1djJIM1Y4aDRWNGg2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblJhbmtGZWF0dXJlcyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblJhbmtGZWF0dXJlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDR2OGgtMlY2SDl2NEg1djJIM1Y4aDRWNGg2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5SZXBvID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUmVwbyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjUzMyA5LjA2N2MtMS43OTIgMC0yLjM3OC43Mi0yLjU3IDEuMTk0YTEuNjAxIDEuNjAxIDAgMSAxLTEuMTYzLS4wMzdWNS43NzZhMS41OTUgMS41OTUgMCAwIDEtMS4wNjctMS41MWMwLS44ODUuNzE1LTEuNiAxLjYtMS42Ljg4NiAwIDEuNi43MTUgMS42IDEuNiAwIC43LS40NDIgMS4yOTEtMS4wNjYgMS41MXYyLjgyMUM2LjMzNiA4LjI1MSA3LjAxOSA4IDggOGMxLjQyNCAwIDEuODk5LS43MTUgMi4wNTMtMS4xOWExLjYwMyAxLjYwMyAwIDAgMS0uOTg2LTEuNDc3YzAtLjg4NS43MTQtMS42IDEuNi0xLjYuODg1IDAgMS42LjcxNSAxLjYgMS42YTEuNTkgMS41OSAwIDAgMS0xLjExNSAxLjUyNmMtLjEzOS43NjItLjY1NiAyLjIwOC0yLjYxOSAyLjIwOFptLTMuMiAyLjEzM2EuNTM1LjUzNSAwIDAgMC0uNTMzLjUzM2MwIC4yOTQuMjQuNTM0LjUzMy41MzRhLjUzNS41MzUgMCAwIDAgMC0xLjA2N1ptMC03LjQ2N2EuNTM1LjUzNSAwIDAgMC0uNTMzLjUzNGMwIC4yOTMuMjQuNTMzLjUzMy41MzMuMjk0IDAgLjUzNC0uMjQuNTM0LS41MzNhLjUzNS41MzUgMCAwIDAtLjUzNC0uNTM0Wk0xMC42NjcgNC44YS41MzUuNTM1IDAgMCAwLS41MzQuNTMzLjUzNS41MzUgMCAwIDAgMS4wNjcgMCAuNTM1LjUzNSAwIDAgMC0uNTMzLS41MzNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblJlcG87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5TZWFyY2hUeXBlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU2VhcmNoVHlwZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMjcgNy41YTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgMFpNOC43NyA3LjVhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjcwMiAxMC42ODJhNC41MDEgNC41MDEgMCAwIDEtNS43OTYuNDgyTDQuMjggMTIuNzg5YS43NS43NSAwIDAgMS0xLjA2LTEuMDZMNC44NDcgMTAuMWE0LjUwMSA0LjUwMSAwIDEgMSA2Ljg1NS41ODFabS01LjMwNC0xLjA2YTMgMyAwIDEgMCA0LjI0My00LjI0M0EzIDMgMCAwIDAgNi4zOTggOS42MlpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblNlYXJjaFR5cGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5TZW1hbnRpY1RleHQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5TZW1hbnRpY1RleHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDIuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFIM3YxMGgxLjVhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNXYtMTFaTTEzLjUgMmEuNS41IDAgMCAxIC41LjV2MTFhLjUuNSAwIDAgMS0uNS41aC0yYS41LjUgMCAwIDEgMC0xSDEzVjNoLTEuNWEuNS41IDAgMCAxIDAtMWgyWk05LjA5OCA0LjVsLS4yNDQgMS4zOTNoLjg5NmwtLjIxMiAxLjIxMWgtLjg5NmwtLjQzNSAyLjU3NGMtLjAyNC4xNzYtLjAxMy4zMDguMDM0LjM5OC4wNDYuMDkuMTYzLjEzOC4zNS4xNDUuMDcyLjAwNC4yMi0uMDA1LjQ0NS0uMDI2TDguOTEgMTEuNDZhMi43NSAyLjc1IDAgMCAxLS45MTYuMTI5Yy0uNTI4LS4wMDctLjkyMy0uMTYyLTEuMTg2LS40NjYtLjI2Mi0uMzA0LS4zNy0uNzE2LS4zMi0xLjIzN2wuNDU1LTIuNzhINi4yNWwuMjA3LTEuMjEyaC42OTRMNy4zOTQgNC41aDEuNzA0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TZW1hbnRpY1RleHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5TaGFwZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblNoYXBlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzIDEwdjNoLTN2LTFINnYxSDN2LTNoMVY2SDNWM2gzdjFoNFYzaDN2M2gtMXY0aDFabS04IDFINHYxaDF2LTFabTcgMGgtMXYxaDF2LTFaTTUgNEg0djFoMVY0Wm03IDBoLTF2MWgxVjRabS0xIDJoLTFWNUg2djFINXY0aDF2MWg0di0xaDFWNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuU2hhcGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5TdHJpbmcgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5TdHJpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm05LjE0NyA0LjI5Ny0uMjU1IDEuNDU1aC45MzZsLS4yMjIgMS4yNjZoLS45MzVsLS40NTUgMi42ODhjLS4wMjUuMTg0LS4wMTMuMzIzLjAzNi40MTcuMDQ4LjA5My4xNy4xNDQuMzY1LjE1MS4wNzUuMDA0LjIzLS4wMDUuNDY1LS4wMjdsLS4xMyAxLjMyYy0uMy4wOTctLjYxOC4xNDItLjk1Ny4xMzUtLjU1Mi0uMDA3LS45NjUtLjE3LTEuMjM5LS40ODctLjI3NC0uMzE3LS4zODYtLjc0OC0uMzM1LTEuMjkzbC40NzYtMi45MDRoLS43MjVsLjIxNi0xLjI2NmguNzI1bC4yNTQtMS40NTVoMS43OFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuU3RyaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuU3RydWN0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU3RydWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuNjY3IDQuNjY3aDIuNjY2djIuNjY2SDQuNjY3VjQuNjY3Wm0wIDRoMi42NjZ2Mi42NjZINC42NjdWOC42NjdabTQtNGgyLjY2NnYyLjY2Nkg4LjY2N1Y0LjY2N1ptMCA0aDIuNjY2djIuNjY2SDguNjY3VjguNjY3Wk0zLjMzMyAzLjMzM3Y5LjMzNGg5LjMzNFYzLjMzM0gzLjMzM1ptMC0xLjMzM2g5LjMzNEMxMy40MDMgMiAxNCAyLjU5NyAxNCAzLjMzM3Y5LjMzNGMwIC43MzYtLjU5NyAxLjMzMy0xLjMzMyAxLjMzM0gzLjMzM0ExLjMzMyAxLjMzMyAwIDAgMSAyIDEyLjY2N1YzLjMzM0MyIDIuNTk3IDIuNTk3IDIgMy4zMzMgMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuU3RydWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuU3ltYm9sID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU3ltYm9sKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4zMTYgMTRhNiA2IDAgMSAxIDAtMTIgNiA2IDAgMCAxIDAgMTJabTAtMS4zMzNhNC42NjcgNC42NjcgMCAxIDAgMC05LjMzNCA0LjY2NyA0LjY2NyAwIDAgMCAwIDkuMzM0Wm0yLjE5LTUuNzJoMS4xNDNjLjAxOSAxLjQ0OC0uNzkzIDIuMzM4LTEuOTIyIDIuMzM4LS42MzIgMC0xLjE5NC0uMjY3LTEuNzA2LS44MTEtLjM2LS4zOTctLjYzNi0uNTc2LTEtLjU3Ni0uNTE3IDAtLjg0OS4zNTUtLjg4NSAxLjA4M0g0Ljk4M2MuMDE0LTEuNDcuODU4LTIuMzE0IDEuOTUtMi4zMTQuNTk1IDAgMS4xMjUuMjQ5IDEuNjc4LjgwMi4zOTIuMzgyLjY0MS41OTUgMS4wMzguNTk1LjQ4NCAwIC44NTctLjMyMy44NTctMS4xMTZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblN5bWJvbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblRhZyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblRhZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDhhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQgNGExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWg2Ljk4OWExIDEgMCAwIDAgLjgyNS0uNDM2bDIuMDUtM2ExIDEgMCAwIDAgMC0xLjEyOGwtMi4wNS0zQTEgMSAwIDAgMCAxMC45OSA0SDRabS43NSAxLjI1YS41LjUgMCAwIDAtLjUuNXY0LjVhLjUuNSAwIDAgMCAuNS41aDUuNzQ1YS41LjUgMCAwIDAgLjQwNS0uMjA2bDEuNjM2LTIuMjVhLjUuNSAwIDAgMCAwLS41ODhMMTAuOSA1LjQ1NmEuNS41IDAgMCAwLS40MDUtLjIwNkg0Ljc1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5UYWc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5UZXh0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVGV4dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTkuMTQ3IDQuMjk3LS4yNTUgMS40NTVoLjkzNmwtLjIyMiAxLjI2NmgtLjkzNWwtLjQ1NSAyLjY4OGMtLjAyNS4xODQtLjAxMy4zMjMuMDM2LjQxNy4wNDguMDkzLjE3LjE0NC4zNjUuMTUxLjA3NS4wMDQuMjMtLjAwNS40NjUtLjAyN2wtLjEzIDEuMzJjLS4zLjA5Ny0uNjE4LjE0Mi0uOTU3LjEzNS0uNTUyLS4wMDctLjk2NS0uMTctMS4yMzktLjQ4Ny0uMjc0LS4zMTctLjM4Ni0uNzQ4LS4zMzUtMS4yOTNsLjQ3Ni0yLjkwNGgtLjcyNWwuMjE2LTEuMjY2aC43MjVsLjI1NC0xLjQ1NWgxLjc4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5UZXh0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuVG9rZW5Db3VudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblRva2VuQ291bnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRIM3YzaDVWNFpNMTMgOUg4djNoNVY5Wk0xMCA0aDN2M2gtM1Y0Wk02IDlIM3YzaDNWOVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuVG9rZW5Db3VudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblZhcmlhYmxlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVmFyaWFibGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJtNi42NDkgNC42NjcgMS4zMjYgNC43aC4wNWwxLjMyNi00LjdoMS45ODJsLTIuMTM0IDYuNjY2SDYuODAxTDQuNjY3IDQuNjY3elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5WYXJpYWJsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblZlY3RvckRlbnNlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVmVjdG9yRGVuc2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDIuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFIM3YxMGgxLjVhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNXYtMTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDVhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWm0wIDNhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWm0tMSA0YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptNC03YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFpNOCA5YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptMSAyYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFptMi01YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptMSAyYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFptLTEgNGExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy41IDJhLjUuNSAwIDAgMSAuNS41djExYS41LjUgMCAwIDEtLjUuNWgtMmEuNS41IDAgMCAxIDAtMUgxM1YzaC0xLjVhLjUuNSAwIDAgMSAwLTFoMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuVmVjdG9yRGVuc2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5WZWN0b3JTcGFyc2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5WZWN0b3JTcGFyc2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDIuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFIM3YxMGgxLjVhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNXYtMTFaTTggNmExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTAgNmExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDhhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWm01IDFhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNSAyYS41LjUgMCAwIDEgLjUuNXYxMWEuNS41IDAgMCAxLS41LjVoLTJhLjUuNSAwIDAgMSAwLTFIMTNWM2gtMS41YS41LjUgMCAwIDEgMC0xaDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblZlY3RvclNwYXJzZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UcmFpbmluZyA9IGZ1bmN0aW9uIEV1aUljb25UcmFpbmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjM4NiA5LjgzNmEyLjUgMi41IDAgMSAxIDMuNjExLjY2N0MxNS4yMTIgMTEuMTczIDE2IDEyLjQ2IDE2IDE0djEuNWEuNS41IDAgMSAxLTEgMFYxNGMwLTEuNzI0LTEuMjc2LTMtMy0zLS45MSAwLTEuMjk4LS4wMi0xLjgwNS0uMTIyLTEuMjUtLjI1NC0yLjMzMy0xLTMuNTg1LTIuNTY2YS41LjUgMCAxIDEgLjc4LS42MjRjLjkgMS4xMjQgMS42NTMgMS43NCAyLjQzNCAyLjA0My4xNTUuMDUyLjM0NS4wODMuNTYyLjEwNVptMS43ODUuMTI4Yy4wODMuMDEuMTY3LjAyMS4yNTEuMDM0TDEyLjUgMTBhMS41IDEuNSAwIDEgMC0uMzMtLjAzNlpNOS43OCAxMS45N2EuNS41IDAgMCAxIC41LjVjMCAuMDc2LS4wNDcuMjI2LS4wNS4yMzEtLjE3OS4zOC0uMjMuNzc0LS4yMyAxLjMwMnYxLjVhLjUuNSAwIDEgMS0xIDB2LTEuNWMwLS42NTcuMDcyLTEuMTg2LjMwNy0xLjY5NmEuNS41IDAgMCAxIC40NzMtLjMzN1pNNS45NTggNS43NzJhLjUuNSAwIDAgMS0uNzguNjI1TDMuMTEgMy44MTJhLjUuNSAwIDEgMSAuNzgtLjYyNGwyLjA2OCAyLjU4NFpNMSAxMWg1LjVhLjUuNSAwIDEgMSAwIDFoLTZhLjUuNSAwIDAgMS0uNS0uNVYuNUEuNS41IDAgMCAxIC41IDBoMTJhLjUuNSAwIDAgMSAuNS41djNhLjUuNSAwIDEgMS0xIDBWMUgxdjEwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVHJhaW5pbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVHJhbnNpdGlvbkxlZnRJbiA9IGZ1bmN0aW9uIEV1aUljb25UcmFuc2l0aW9uTGVmdEluKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMTQ2IDUuODU0YS41LjUgMCAwIDEgLjcwOC0uNzA4bDIgMmEuNS41IDAgMCAxIDAgLjcwOGwtMiAyYS41LjUgMCAwIDEtLjcwOC0uNzA4TDExLjI5MyA4SDcuNWEuNS41IDAgMCAxIDAtMWgzLjc5M2wtMS4xNDctMS4xNDZaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMiAwaDExYTIgMiAwIDAgMSAyIDJ2MTFhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yWm0yLjcwNyAxSDV2MS4yOTNsLTQgNFY0LjcwN0w0LjcwNyAxWk02IDE0VjFoN2ExIDEgMCAwIDEgMSAxdjExYTEgMSAwIDAgMS0xIDFINlptLTEtMS4yOTNWMTRIMy43MDdMNSAxMi43MDdabTAtM3YxLjU4NkwyLjI5MyAxNEgyYTEgMSAwIDAgMS0uODM4LS40NTRMNSA5LjcwN1ptMC0zdjEuNTg2bC00IDR2LTEuNTg2bDQtNFptMC0zdjEuNTg2bC00IDRWNy43MDdsNC00Wk0zLjI5MyAxSDJhMSAxIDAgMCAwLTEgMXYxLjI5M0wzLjI5MyAxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVHJhbnNpdGlvbkxlZnRJbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UcmFuc2l0aW9uTGVmdE91dCA9IGZ1bmN0aW9uIEV1aUljb25UcmFuc2l0aW9uTGVmdE91dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODU0IDUuODU0YS41LjUgMCAwIDAtLjcwOC0uNzA4bC0yIDJhLjUuNSAwIDAgMCAwIC43MDhsMiAyYS41LjUgMCAwIDAgLjcwOC0uNzA4TDguNzA3IDhIMTIuNWEuNS41IDAgMCAwIDAtMUg4LjcwN2wxLjE0Ny0xLjE0NlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yIDBoMTFhMiAyIDAgMCAxIDIgMnYxMWEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJabTIuNzA3IDFINXYxLjI5M2wtNCA0VjQuNzA3TDQuNzA3IDFaTTYgMTRWMWg3YTEgMSAwIDAgMSAxIDF2MTFhMSAxIDAgMCAxLTEgMUg2Wm0tMS0xLjI5M1YxNEgzLjcwN0w1IDEyLjcwN1ptMC0zdjEuNTg2TDIuMjkzIDE0SDJhMSAxIDAgMCAxLS44MzgtLjQ1NEw1IDkuNzA3Wm0wLTN2MS41ODZsLTQgNHYtMS41ODZsNC00Wm0wLTN2MS41ODZsLTQgNFY3LjcwN2w0LTRaTTMuMjkzIDFIMmExIDEgMCAwIDAtMSAxdjEuMjkzTDMuMjkzIDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UcmFuc2l0aW9uTGVmdE91dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UcmFuc2l0aW9uVG9wSW4gPSBmdW5jdGlvbiBFdWlJY29uVHJhbnNpdGlvblRvcEluKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4xNDYgMTAuMTQ2YS41LjUgMCAwIDEgLjcwOC43MDhsLTIgMmEuNS41IDAgMCAxLS43MDggMGwtMi0yYS41LjUgMCAwIDEgLjcwOC0uNzA4TDcgMTEuMjkzVjcuNWEuNS41IDAgMCAxIDEgMHYzLjc5M2wxLjE0Ni0xLjE0N1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNSAydjExYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMmgxMWEyIDIgMCAwIDEgMiAyWm0tMSAyLjcwN1Y1aC0xLjI5M2wtNC00aDEuNTg2TDE0IDQuNzA3Wk0xIDZoMTN2N2ExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVY2Wm0xLjI5My0xSDFWMy43MDdMMi4yOTMgNVptMyAwSDMuNzA3TDEgMi4yOTNWMmExIDEgMCAwIDEgLjQ1NS0uODM4TDUuMjkzIDVabTMgMEg2LjcwN2wtNC00aDEuNTg2bDQgNFptMyAwSDkuNzA3bC00LTRoMS41ODZsNCA0Wk0xNCAzLjI5M1YyYTEgMSAwIDAgMC0xLTFoLTEuMjkzTDE0IDMuMjkzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVHJhbnNpdGlvblRvcEluOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRyYW5zaXRpb25Ub3BPdXQgPSBmdW5jdGlvbiBFdWlJY29uVHJhbnNpdGlvblRvcE91dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMTQ2IDkuODU0YS41LjUgMCAwIDAgLjcwOC0uNzA4bC0yLTJhLjUuNSAwIDAgMC0uNzA4IDBsLTIgMmEuNS41IDAgMSAwIC43MDguNzA4TDcgOC43MDdWMTIuNWEuNS41IDAgMCAwIDEgMFY4LjcwN2wxLjE0NiAxLjE0N1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNSAydjExYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMmgxMWEyIDIgMCAwIDEgMiAyWm0tMSAyLjcwN1Y1aC0xLjI5M2wtNC00aDEuNTg2TDE0IDQuNzA3Wk0xIDZoMTN2N2ExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVY2Wm0xLjI5My0xSDFWMy43MDdMMi4yOTMgNVptMyAwSDMuNzA3TDEgMi4yOTNWMmExIDEgMCAwIDEgLjQ1NS0uODM4TDUuMjkzIDVabTMgMEg2LjcwN2wtNC00aDEuNTg2bDQgNFptMyAwSDkuNzA3bC00LTRoMS41ODZsNCA0Wk0xNCAzLjI5M1YyYTEgMSAwIDAgMC0xLTFoLTEuMjkzTDE0IDMuMjkzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVHJhbnNpdGlvblRvcE91dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UcmFzaCA9IGZ1bmN0aW9uIEV1aUljb25UcmFzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDNoNXYxSDBWM2g1VjFhMSAxIDAgMCAxIDEtMWg0YTEgMSAwIDAgMSAxIDF2MlptLTcuMDU2IDhIN3YxSDQuMWwuMzkyIDIuNTE5Yy4wNDIuMjY5LjI1NC40NTguNDkzLjQ1OGg2LjAzYy4yMzkgMCAuNDUxLS4xODkuNDkzLS40NThsMS40OTgtOS41NzZIMTRsLTEuNTA0IDkuNzNjLS4xMTYuNzQ3LS43NCAxLjMwNC0xLjQ4MSAxLjMwNGgtNi4wM2MtLjc0MSAwLTEuMzY1LS41NTctMS40ODEtMS4zMDRsLTEuNTExLTkuNzNIOVY1Ljk1SDMuMTU3TDMuNDc2IDhIOHYxSDMuNjMybC4zMTIgMlpNNiAzaDRWMUg2djJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UcmFzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25VbmZvbGQgPSBmdW5jdGlvbiBFdWlJY29uVW5mb2xkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4xNCAzLjgwOCA3LjUzIDEuNTFhLjY3LjY3IDAgMCAxIC45NDIgMGwyLjM4OSAyLjI5OGMuMjYuMjU2LjY4NS4yNTYuOTQ0IDBhLjY1LjY1IDAgMCAwIDAtLjkzTDkuNDE2LjU3OGEyLjAyIDIuMDIgMCAwIDAtMi44MzIgMGwtMi4zODggMi4zYS42NS42NSAwIDAgMCAwIC45M2MuMjYuMjU2LjY4My4yNTYuOTQ0IDB6bTAgOC4zODQgMi4zOSAyLjI5OGEuNjcuNjcgMCAwIDAgLjk0MiAwbDIuMzg5LTIuMjk4YS42NzcuNjc3IDAgMCAxIC45NDQgMCAuNjUuNjUgMCAwIDEgMCAuOTNsLTIuMzg4IDIuM2EyLjAyIDIuMDIgMCAwIDEtMi44MzIgMGwtMi4zODgtMi4zYS42NS42NSAwIDAgMSAwLS45My42NzcuNjc3IDAgMCAxIC45NDQgMHpNMTYgNkgwdjRoMTZWNnpNMSA5VjdoMTR2MkgxelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVW5mb2xkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblVubGluayA9IGZ1bmN0aW9uIEV1aUljb25VbmxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU2NSAxMC44M2EuNS41IDAgMSAxIC44MTkuNTczbC0xLjg3NyAyLjY4Yy0uOTYzIDEuMzc2LTMuMDIgMS41NS00LjU4OC40NUMuMzUgMTMuNDM2LS4xOTEgMTEuNDQ1Ljc3MyAxMC4wN0wzLjY0IDUuOTczYy45NjMtMS4zNzUgMy4wMTktMS41NDggNC41ODctLjQ1YS41LjUgMCAxIDEtLjU3My44MkM2LjUwOSA1LjU0IDUuMDggNS42NiA0LjQ2IDYuNTQ2bC0yLjg2OCA0LjA5NWMtLjYyMS44ODctLjI0NSAyLjI3LjkgMy4wNzMgMS4xNDYuODAyIDIuNTc1LjY4MiAzLjE5Ni0uMjA1bDEuODc3LTIuNjh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03Ljg5MiAzLjQzYS41LjUgMCAxIDEtLjU3NC0uODE5TDEwIC43MzRjMS4zNzYtLjk2MyAzLjM2Ny0uNDIyIDQuNDY1IDEuMTQ2IDEuMDk4IDEuNTY5LjkyNiAzLjYyNS0uNDUgNC41ODhMOS45MTggOS4zMzZjLTEuMzc1Ljk2My0zLjM2Ni40MjItNC40NjQtMS4xNDZhLjUuNSAwIDEgMSAuODE5LS41NzRjLjgwMiAxLjE0NiAyLjE4NSAxLjUyMiAzLjA3Mi45TDEzLjQ0IDUuNjVjLjg4Ni0uNjIxIDEuMDA2LTIuMDUuMjA0LTMuMTk1LS44MDItMS4xNDYtMi4xODYtMS41MjItMy4wNzItLjlMNy44OTIgMy40M3pNNiAuNXYzYS41LjUgMCAwIDEtMSAwdi0zYS41LjUgMCAwIDEgMSAwek0xLjA1OCAyLjIzbDIuNDU4IDEuNzJhLjUuNSAwIDAgMS0uNTc0LjgyTC40ODQgMy4wNWEuNS41IDAgMSAxIC41NzQtLjgyem0xMiA3LjA5MyAyLjQ1NyAxLjcyYS41LjUgMCAxIDEtLjU3My44MmwtMi40NTctMS43MmEuNS41IDAgMSAxIC41NzMtLjgyem0tMi4wOTkgMS4xODF2M2EuNS41IDAgMSAxLTEgMHYtM2EuNS41IDAgMSAxIDEgMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVubGluazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Vc2VyID0gZnVuY3Rpb24gRXVpSWNvblVzZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCA5YTQgNCAwIDEgMCAwLTggNCA0IDAgMCAwIDAgOFptMC0xYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNlpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNSAxNC4yOTFBOS4wNTMgOS4wNTMgMCAwIDAgOCAxMWE5LjA1MyA5LjA1MyAwIDAgMC03IDMuMjkxbC43MTUuNzFBOC4wNDcgOC4wNDcgMCAwIDEgOCAxMS45OTYgOC4wNDcgOC4wNDcgMCAwIDEgMTQuMjg2IDE1bC43MTQtLjcxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVXNlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Vc2VyQXZhdGFyID0gZnVuY3Rpb24gRXVpSWNvblVzZXJBdmF0YXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE4LFxuICAgIGhlaWdodDogMTgsXG4gICAgdmlld0JveDogXCIwIDAgMTggMThcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjY4OSAxMS4xMzJjMS4xNTUgMS4yMjIgMS45NTMgMi44NzkgMi4xODMgNC43NDhhMS4wMDcgMS4wMDcgMCAwIDEtMSAxLjEySDMuMDA3YTEuMDA1IDEuMDA1IDAgMCAxLTEtMS4xMmMuMjMtMS44NyAxLjAyOC0zLjUyNiAyLjE4My00Ljc0OC4yNDcuMjI4LjUwNS40NDIuNzgyLjYzMy0xLjAzOCAxLjA2OS0xLjc2NSAyLjU1LTEuOTcyIDQuMjM3TDE0Ljg3MiAxNmMtLjIwNC0xLjY4Ni0uOTMtMy4xNjYtMS45NjYtNC4yMzVhNy4wMSA3LjAxIDAgMCAwIC43ODMtLjYzM1pNOC45MzkgMWMxLjkgMCAzIDIgNC4zOCAyLjYzM2EyLjQ4MyAyLjQ4MyAwIDAgMS0xLjg4Ljg2N2MtLjI5OCAwLS41NzktLjA2LS44NDQtLjE1N0EzLjcyNiAzLjcyNiAwIDAgMSA3LjY5IDUuNzVjLTEuMzk1IDAtMy43NS4yNS0zLjI0NS0xLjkwM0M1Ljk0IDMgNi45NTIgMSA4Ljk0IDFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04Ljk0IDJjMi4yMDUgMCA0IDEuNzk0IDQgNHMtMS43OTUgNC00IDRjLTIuMjA3IDAtNC0xLjc5NC00LTRzMS43OTMtNCA0LTRtMCA5QTUgNSAwIDEgMCA4LjkzNy45OTkgNSA1IDAgMCAwIDguOTQgMTFcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vc2VyQXZhdGFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblVzZXJzID0gZnVuY3Rpb24gRXVpSWNvblVzZXJzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUuNDgyIDQuMzQ0YTIgMiAwIDEgMC0yLjk2MyAwYy0uMDguMDQyLS4xNTYuMDg3LS4yMy4xMzYtLjQ1Ny4zMDUtLjc1LjcwNC0uOTMzIDEuMDczQTMuNDU3IDMuNDU3IDAgMCAwIDEgNi45NzhWOWExIDEgMCAwIDAgMSAxaDIuNWEzLjY5IDMuNjkgMCAwIDEgLjY4NC0uOTYyTDUuMTcxIDlIMlY3czAtMiAyLTJjMS4wMDcgMCAxLjUwNy41MDcgMS43NTUgMS4wMS4yMjUtLjI1NC40OTMtLjQ3Ljc5My0uNjM2YTIuNzE3IDIuNzE3IDAgMCAwLTEuMDY2LTEuMDN6TTQgNGExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJ6bTEwIDZoLTIuNWEzLjY4NCAzLjY4NCAwIDAgMC0uNjg0LS45NjJMMTAuODI5IDlIMTRWN3MwLTItMi0yYy0xLjAwNyAwLTEuNTA3LjUwNy0xLjc1NSAxLjAxYTMuMDEyIDMuMDEyIDAgMCAwLS43OTMtLjYzNiAyLjcxNiAyLjcxNiAwIDAgMSAxLjA2Ni0xLjAzIDIgMiAwIDEgMSAyLjk2MyAwYy4wOC4wNDIuMTU2LjA4Ny4yMy4xMzYuNDU3LjMwNS43NS43MDQuOTMzIDEuMDczQTMuNDUzIDMuNDUzIDAgMCAxIDE1IDYuOTQ0VjlhMSAxIDAgMCAxLTEgMXptLTItNmExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAgOGMwIC41MTctLjE5Ni45ODktLjUxOCAxLjM0NGEyLjc1NSAyLjc1NSAwIDAgMSAxLjE2MyAxLjIxQTMuNDUzIDMuNDUzIDAgMCAxIDExIDExLjk3N1YxNGExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXYtMi4wMjJhMi4wMDUgMi4wMDUgMCAwIDEgLjAwNi0uMTM1IDMuNDU2IDMuNDU2IDAgMCAxIC4zNS0xLjI5IDIuNzU1IDIuNzU1IDAgMCAxIDEuMTYyLTEuMjFBMiAyIDAgMSAxIDEwIDh6bS00IDR2Mmg0di0yczAtMi0yLTItMiAyLTIgMnptMy00YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVzZXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZlY3RvciA9IGZ1bmN0aW9uIEV1aUljb25WZWN0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi41IDExVjVIMTFWMy41SDVWNUgzLjV2Nkg1djEuNWg2VjExaDEuNVptMSAwSDE1djRoLTR2LTEuNUg1VjE1SDF2LTRoMS41VjVIMVYxaDR2MS41aDZWMWg0djRoLTEuNXY2Wk00IDRWMkgydjJoMlptOCAwaDJWMmgtMnYyWk0yIDE0aDJ2LTJIMnYyWm0xMCAwaDJ2LTJoLTJ2MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZlY3RvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaWRlb1BsYXllciA9IGZ1bmN0aW9uIEV1aUljb25WaWRlb1BsYXllcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMS45OTRDMCAuODkzLjg5NSAwIDEuOTk0IDBoMTIuMDEyQzE1LjEwNyAwIDE2IC44OTUgMTYgMS45OTR2MTIuMDEyQTEuOTk1IDEuOTk1IDAgMCAxIDE0LjAwNiAxNkgxLjk5NEExLjk5NSAxLjk5NSAwIDAgMSAwIDE0LjAwNlYxLjk5NFptMSAwdjEyLjAxMmMwIC41NDguNDQ2Ljk5NC45OTQuOTk0aDEyLjAxMmEuOTk1Ljk5NSAwIDAgMCAuOTk0LS45OTRWMS45OTRBLjk5NS45OTUgMCAwIDAgMTQuMDA2IDFIMS45OTRBLjk5NS45OTUgMCAwIDAgMSAxLjk5NFpNMSA0aDE0djFIMVY0Wm0xLjUtMWEuNS41IDAgMCAxIDAtMWgxYS41LjUgMCAwIDEgMCAxaC0xWm0zIDBhLjUuNSAwIDAgMSAwLTFoMWEuNS41IDAgMCAxIDAgMWgtMVptNC45NDcgNi4xMDZhMSAxIDAgMCAxIDAgMS43ODhsLTMgMkExIDEgMCAwIDEgNiAxMlY4YTEgMSAwIDAgMSAxLjQ0Ny0uODk0bDMgMlpNMTAgMTAgNyA4djRsMy0yWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlkZW9QbGF5ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzQXJlYSA9IGZ1bmN0aW9uIEV1aUljb25WaXNBcmVhKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxM2gxMFY5LjkxM2wtMi41NzEtMi44MjZMOC41NiA4Ljc1M2EuNS41IDAgMCAxLS43MjgtLjA2N0w0LjQ0OCA0LjMxNyAzIDYuMTkxVjEzWm01LjI5NS01LjM1IDEuODM3LTEuNjRhLjUuNSAwIDAgMSAuNzAzLjAzN2wzLjAzNSAzLjMzNmEuNS41IDAgMCAxIC4xMy4zMzd2My43OGEuNS41IDAgMCAxLS41LjVoLTExYS41LjUgMCAwIDEtLjUtLjVWNi4wMmEuNS41IDAgMCAxIC4xMDQtLjMwNWwxLjk0Ny0yLjUyYS41LjUgMCAwIDEgLjc5MS0uMDAxTDguMjk1IDcuNjVaTTEgMTVoMTMuNWEuNS41IDAgMSAxIDAgMUguNWEuNS41IDAgMCAxLS41LS41di0xNGEuNS41IDAgMCAxIDEgMFYxNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0FyZWE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzQXJlYVN0YWNrZWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzQXJlYVN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAxYS41LjUgMCAwIDEgLjUuNVYxNWgxMy41YS41LjUgMCAxIDEgMCAxSC41YS41LjUgMCAwIDEtLjUtLjV2LTE0QS41LjUgMCAwIDEgLjUgMVptNC4zNDIgMi4xOTRMOC4yOTUgNy42NWwxLjgzNy0xLjY0YS41LjUgMCAwIDEgLjcwMy4wMzdsMy4wMzUgMy4zMzZhLjUuNSAwIDAgMSAuMTMuMzM3djMuNzhhLjUuNSAwIDAgMS0uNS41aC0xMWEuNS41IDAgMCAxLS41LS41VjYuMDJhLjUuNSAwIDAgMSAuMTA0LS4zMDVsMS45NDctMi41MmEuNS41IDAgMCAxIC43OTEtLjAwMVptLS4zOTQgMS4xMjNMMyA2LjE5MXY0LjEwMWwxLjE0Ni0xLjE0NmEuNS41IDAgMCAxIC40OTMtLjEyNmwuMDg1LjAzM0w4LjUgMTAuOTRsMS43NzYtLjg4OGEuNS41IDAgMCAxIC4zNi0uMDM0bC4wODguMDM0TDEzIDExLjE5VjkuOTEzbC0yLjU3MS0yLjgyNkw4LjU2IDguNzUzYS41LjUgMCAwIDEtLjcyOC0uMDY3TDQuNDQ4IDQuMzE3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQXJlYVN0YWNrZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzQmFySG9yaXpvbnRhbCA9IGZ1bmN0aW9uIEV1aUljb25WaXNCYXJIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41IDEwaC02YS41LjUgMCAwIDEgMC0xSDhWNkgyLjVhLjUuNSAwIDAgMSAwLTFIMTNWMkgyLjVhLjUuNSAwIDAgMSAwLTFoMTFhLjUuNSAwIDAgMSAuNS41djRhLjUuNSAwIDAgMS0uNS41SDl2M2gyLjVhLjUuNSAwIDAgMSAuNS41djRhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAxIDEgMC0xSDExdi0zSDguNVpNMCAuNWEuNS41IDAgMSAxIDEgMHYxNGEuNS41IDAgMSAxLTEgMFYuNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0Jhckhvcml6b250YWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAwYS41LjUgMCAwIDEgLjUuNXYxNGEuNS41IDAgMSAxLTEgMFYuNUEuNS41IDAgMCAxIC41IDBabTEzIDFhLjUuNSAwIDAgMSAuNS41djRhLjUuNSAwIDAgMS0uNS41SDl2M2gyLjVhLjUuNSAwIDAgMSAuNS41djRhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAxIDEgMC0xSDl2LTNIMi41YS41LjUgMCAwIDEgMC0xSDZWNkgyLjVhLjUuNSAwIDAgMSAwLTFIMTBWMkgyLjVhLjUuNSAwIDAgMSAwLTFoMTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNCYXJWZXJ0aWNhbCA9IGZ1bmN0aW9uIEV1aUljb25WaXNCYXJWZXJ0aWNhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDcuNXY2YS41LjUgMCAxIDEtMSAwVjhINnY1LjVhLjUuNSAwIDEgMS0xIDBWM0gydjEwLjVhLjUuNSAwIDEgMS0xIDB2LTExYS41LjUgMCAwIDEgLjUtLjVoNGEuNS41IDAgMCAxIC41LjVWN2gzVjQuNWEuNS41IDAgMCAxIC41LS41aDRhLjUuNSAwIDAgMSAuNS41djlhLjUuNSAwIDEgMS0xIDBWNWgtM3YyLjVaTS41IDE2YS41LjUgMCAxIDEgMC0xaDE0YS41LjUgMCAxIDEgMCAxSC41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFyVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzQmFyVmVydGljYWxTdGFja2VkID0gZnVuY3Rpb24gRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjUgMTVhLjUuNSAwIDEgMSAwIDFILjVhLjUuNSAwIDEgMSAwLTFoMTRabS05LTEzYS41LjUgMCAwIDEgLjUuNUw1Ljk5OSA3SDlWNC41YS41LjUgMCAwIDEgLjUtLjVoNGEuNS41IDAgMCAxIC41LjV2OWEuNS41IDAgMSAxLTEgMFY3aC0zdjYuNWEuNS41IDAgMCAxLS40MS40OTJMOS41IDE0YS41LjUgMCAwIDEtLjUtLjVWMTBINnYzLjVhLjUuNSAwIDAgMS0uOTkyLjA5TDUgMTMuNVY2SDJ2Ny41YS41LjUgMCAxIDEtMSAwdi0xMWEuNS41IDAgMCAxIC41LS41aDRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNCYXJWZXJ0aWNhbFN0YWNrZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzR2F1Z2UgPSBmdW5jdGlvbiBFdWlJY29uVmlzR2F1Z2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xMi44NzcgNS44NDctMS4wMiAxLjAyYS41LjUgMCAwIDEtLjcwOC0uNzA3bDEuMS0xLjA5OWMtLjA1LS4wNTMtLjEtLjEwNi0uMTUyLS4xNTdBNi40NzEgNi40NzEgMCAwIDAgOCAzLjAxOVY0LjVhLjUuNSAwIDAgMS0xIDBWMy4wMTlhNi40NyA2LjQ3IDAgMCAwLTQuMjYxIDIuMDU1bDEuMDcgMS4wNzFhLjUuNSAwIDAgMS0uNzA2LjcwN2wtLjk5LS45OUE2LjQ2IDYuNDYgMCAwIDAgMS4wMTggMTBIMi41YS41LjUgMCAxIDEgMCAxSDEuMTc0Yy4wODMuMzUzLjE5Ni42OTcuMzM3IDEuMDNhLjUuNSAwIDEgMS0uOTIyLjM5QTcuNDg3IDcuNDg3IDAgMCAxIDAgOS41YTcuNDgzIDcuNDgzIDAgMCAxIDIuMTk3LTUuMzA0QTcuNDg3IDcuNDg3IDAgMCAxIDcuNSAyYTcuNDg3IDcuNDg3IDAgMCAxIDUuMzA0IDIuMTk3QTcuNDgzIDcuNDgzIDAgMCAxIDE1IDkuNWE3LjQ4NyA3LjQ4NyAwIDAgMS0uNTkgMi45Mi41LjUgMCAwIDEtLjkyLS4zOWMuMTQtLjMzMy4yNTMtLjY3Ny4zMzYtMS4wM0gxMi41YS41LjUgMCAxIDEgMC0xaDEuNDgxYTYuNDgzIDYuNDgzIDAgMCAwLTEuMTA0LTQuMTUzWm0tNi4wNDEgNS4zMTdhLjk5My45OTMgMCAwIDEtLjAxLTEuNDA0Yy4zODQtLjM4NSAyLjg4Mi0yLjAwMiAzLjE0OS0xLjczNS4yNjcuMjY3LTEuMzUgMi43NjUtMS43MzUgMy4xNWEuOTkzLjk5MyAwIDAgMS0xLjQwNC0uMDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNHYXVnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNHb2FsID0gZnVuY3Rpb24gRXVpSWNvblZpc0dvYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC43MjUgMy42NTNhNiA2IDAgMCAxIDIuODQ3IDcuNTc2LjUuNSAwIDAgMS0uOTI4LS4zNzIgNSA1IDAgMSAwLTkuMjkzLS4wMTQuNS41IDAgMCAxLS4yMTguNjE5TDEuMzkgMTIuNDdhLjUuNSAwIDAgMS0uNzA4LS4yM0E3Ljk5IDcuOTkgMCAwIDEgMCA5YTggOCAwIDAgMSAxMS4yMTItNy4zMjkuNS41IDAgMCAxIC4yMzQuNzA0bC0uNzIxIDEuMjc4Wm0tLjkzMy0uMzguNS0uODg5YTcgNyAwIDAgMC04LjkwMiA4LjkzbC44ODYtLjUxMWE2IDYgMCAwIDEgNy41MTYtNy41M1pNNi43MyA5LjQ2N2ExLjc1IDEuNzUgMCAxIDEgMi41MzkgMCAyIDIgMCAxIDEtMi41MzkgMFpNOCAxMi4wMTNhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm0wLTNhLjc1Ljc1IDAgMSAwIDAtMS41Ljc1Ljc1IDAgMCAwIDAgMS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzR29hbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNMaW5lID0gZnVuY3Rpb24gRXVpSWNvblZpc0xpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi42NTQgMy40OGMuMjQ4LjIyNS41NTIuMzg5Ljg4OC40NjdMMTEuMjQgOS40M2ExLjk5IDEuOTkgMCAwIDAtLjkxNS0uNDA0bDIuMzMtNS41NDdaTTkuMTQ2IDkuMTlhMi4wMDggMi4wMDggMCAwIDAtLjc2OS42NGwtMS41NzItMmMuMzExLS4xMzYuNTgxLS4zNS43ODUtLjYxOGwxLjU1NiAxLjk3OFpNNS41ODEgNy45NTZsLTIuMTM0IDQuMjY4YS41LjUgMCAwIDEtLjg5NC0uNDQ4bDIuMTM0LTQuMjY4Yy4yNS4yMi41NTcuMzc2Ljg5NC40NDhaTTEgMTVoMTMuNWEuNS41IDAgMSAxIDAgMUguNWEuNS41IDAgMCAxLS41LS41di0xNGEuNS41IDAgMCAxIDEgMFYxNVptNS04YTEgMSAwIDEgMSAwLTIgMSAxIDAgMCAxIDAgMlptNCA1YTEgMSAwIDEgMSAwLTIgMSAxIDAgMCAxIDAgMlptNC05YTEgMSAwIDEgMSAwLTIgMSAxIDAgMCAxIDAgMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0xpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzTWFwQ29vcmRpbmF0ZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNNYXBDb29yZGluYXRlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41IDE1QzUuNzcgMTUgMiA5Ljk3IDIgNi41OTUgMiAzLjUwNyA0LjQ2IDEgNy41IDFTMTMgMy41MDcgMTMgNi41OTVDMTMgOS45NyA5LjIzIDE1IDcuNSAxNVptMC0xYy4yODYgMCAxLjQ4LTEuMDQ0IDIuNDU5LTIuMzVDMTEuMjE5IDkuOTY5IDEyIDguMTUzIDEyIDYuNTk2IDEyIDQuMDU1IDkuOTgzIDIgNy41IDJTMyA0LjA1NSAzIDYuNTk1YzAgMS41NTcuNzggMy4zNzMgMi4wNDEgNS4wNTZDNi4wMiAxMi45NTYgNy4yMTQgMTQgNy41IDE0Wm0wLTQuOTk2YTIuNSAyLjUgMCAxIDEgMC01IDIuNSAyLjUgMCAwIDEgMCA1Wm0wLTFhMS41IDEuNSAwIDEgMCAwLTMgMS41IDEuNSAwIDAgMCAwIDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNNYXBDb29yZGluYXRlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc01hcFJlZ2lvbiA9IGZ1bmN0aW9uIEV1aUljb25WaXNNYXBSZWdpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUgMi4zMDl2OC42OWEuNDk5LjQ5OSAwIDAgMS0uMDMyLjE3Nkw5LjUgMTIuNjkxVjMuODA5bC0zLTEuNVptLTEtLjA0TDIgMy44MjV2OC45MDZsMy41MjctMS41NjhhLjUuNSAwIDAgMS0uMDI3LS4xNjRWMi4yN1ptLjI3NC0xLjIxNmEuNDk4LjQ5OCAwIDAgMSAuNDcxLjAxbDMuNzY4IDEuODg0IDQuMjg0LTEuOTA0QS41LjUgMCAwIDEgMTUgMS41djEwYS41LjUgMCAwIDEtLjI5Ny40NTdsLTQuNSAyYS41LjUgMCAwIDEtLjQyNy0uMDFsLTMuNzg5LTEuODk0LTQuMjgzIDEuOTA0YS41LjUgMCAwIDEtLjcwMy0uNDU3di0xMGEuNS41IDAgMCAxIC4yOTctLjQ1N2w0LjQ3Ni0xLjk5Wk0xMC41IDMuODI1djguOTA2bDMuNS0xLjU1NlYyLjI3bC0zLjUgMS41NTZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNNYXBSZWdpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzTWV0cmljID0gZnVuY3Rpb24gRXVpSWNvblZpc01ldHJpYyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNTMyIDcuMzRhMi4xNjEgMi4xNjEgMCAxIDEgMi45MzYgMCAyLjc0NiAyLjc0NiAwIDEgMS0yLjkzNiAwWk0yIDBoMTJhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJabTAgMWExIDEgMCAwIDAtMSAxdjEyYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMVYyYTEgMSAwIDAgMC0xLTFIMlptNiA1LjkxNWExLjE2MSAxLjE2MSAwIDEgMCAwLTIuMzIyIDEuMTYxIDEuMTYxIDAgMCAwIDAgMi4zMjJabTAgNC40OTJhMS43NDYgMS43NDYgMCAxIDAgMC0zLjQ5MiAxLjc0NiAxLjc0NiAwIDAgMCAwIDMuNDkyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzTWV0cmljOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc1BpZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNQaWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUgOWEuNS41IDAgMCAxLS41LS41VjMuMDIzQTUuNSA1LjUgMCAxIDAgMTEuOTc4IDlINi41Wk03IDhoNS41YS41LjUgMCAwIDEgLjUuNUE2LjUgNi41IDAgMSAxIDYuNSAyYS41LjUgMCAwIDEgLjUuNVY4Wm0yLTYuOTcyVjZoNC45NzJDMTMuNjk2IDMuNTUyIDExLjQ0OCAxLjMwNCA5IDEuMDI4Wk0xNC41IDdoLTZhLjUuNSAwIDAgMS0uNS0uNXYtNmEuNS41IDAgMCAxIC41LS41QzExLjg1MyAwIDE1IDMuMTQ3IDE1IDYuNWEuNS41IDAgMCAxLS41LjVaTTYuMTQ2IDguODU0YS41LjUgMCAxIDEgLjcwOC0uNzA4bDQgNGEuNS41IDAgMCAxLS43MDguNzA4bC00LTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNQaWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzVGFibGUgPSBmdW5jdGlvbiBFdWlJY29uVmlzVGFibGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzdjExYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjFabS0xIDBWMmExIDEgMCAwIDAtMS0xSDJhMSAxIDAgMCAwLTEgMXYxaDE0Wm0wIDFIMXYxMGExIDEgMCAwIDAgMSAxaDEyYTEgMSAwIDAgMCAxLTFWNFpNNC41IDZhLjUuNSAwIDAgMSAwIDFIMi40OTZhLjUuNSAwIDEgMSAwLTFINC41Wm05IDBhLjUuNSAwIDEgMSAwIDFoLTZhLjUuNSAwIDAgMSAwLTFoNlptLTkgM2EuNS41IDAgMCAxIDAgMUgyLjQ5NmEuNS41IDAgMSAxIDAtMUg0LjVabTkgMGEuNS41IDAgMSAxIDAgMWgtNmEuNS41IDAgMCAxIDAtMWg2Wm0tOSAzYS41LjUgMCAxIDEgMCAxSDIuNDk2YS41LjUgMCAxIDEgMC0xSDQuNVptOSAwYS41LjUgMCAxIDEgMCAxaC02YS41LjUgMCAxIDEgMC0xaDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUYWJsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNUYWdDbG91ZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNUYWdDbG91ZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNSA5LjA0N2EuNS41IDAgMSAwIDAgMWgxM2EuNS41IDAgMCAwIDAtMWgtMTNabTAtMWgxM2ExLjUgMS41IDAgMCAxIDAgM2gtMTNhMS41IDEuNSAwIDAgMSAwLTNaTTEwIDEzYS41LjUgMCAxIDEgMCAxSDRhLjUuNSAwIDEgMSAwLTFoNlpNOC4wMDEgMi4wMTVhLjUuNSAwIDEgMS0uMDAyIDFsLTUtLjAxNWEuNS41IDAgMSAxIC4wMDMtMWw1IC4wMTVaTTE0IDVhLjUuNSAwIDEgMSAwIDFINmEuNS41IDAgMCAxIDAtMWg4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVGFnQ2xvdWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzVGV4dCA9IGZ1bmN0aW9uIEV1aUljb25WaXNUZXh0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41IDV2NmgyYS41LjUgMCAxIDEgMCAxaC01YS41LjUgMCAxIDEgMC0xaDJWNUg1di41YS41LjUgMCAwIDEtMSAwdi0xYS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIC41LjUxbC0uMDIxIDFhLjUuNSAwIDEgMS0xLS4wMmwuMDEtLjQ5SDguNVpNMSAxNWgxLjVhLjUuNSAwIDEgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNXYtMS45OTZhLjUuNSAwIDAgMSAxIDBWMTVaTTEgMXYxLjQ5N2EuNS41IDAgMSAxLTEgMFYuNUEuNS41IDAgMCAxIC41IDBoMmEuNS41IDAgMCAxIDAgMUgxWm0xNCAwaC0xLjQ5NWEuNS41IDAgMCAxIDAtMUgxNS41YS41LjUgMCAwIDEgLjUuNXYyYS41LjUgMCAxIDEtMSAwVjFabTAgMTR2LTEuNWEuNS41IDAgMSAxIDEgMHYyYS41LjUgMCAwIDEtLjUuNWgtMmEuNS41IDAgMSAxIDAtMUgxNVpNMCA2LjVhLjUuNSAwIDAgMSAxIDB2M2EuNS41IDAgMCAxLTEgMHYtM1pNOS41IDBhLjUuNSAwIDAgMSAwIDFoLTNhLjUuNSAwIDAgMSAwLTFoM1pNMTUgNi41YS41LjUgMCAxIDEgMSAwdjNhLjUuNSAwIDEgMS0xIDB2LTNaTTkuNSAxNWEuNS41IDAgMSAxIDAgMWgtM2EuNS41IDAgMSAxIDAtMWgzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVGV4dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNUaW1lbGlvbiA9IGZ1bmN0aW9uIEV1aUljb25WaXNUaW1lbGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjg4NCAxLjgwMmMxLjE3MS0uMzA5IDIuMjItLjI0IDMuMTAzLjA3LjI5NS4xMDQuNTA3LjIxMi42MzEuMjkybC4xNjQuMTA2LjA0OC4xODhjLjI3OCAxLjA2Ni4yIDIuMTc1LS4wOTEgMy4yM2E2LjcyOCA2LjcyOCAwIDAgMS0uMTk0LjU5OGMuMDM1LjEyLjA3NC4yNzMuMTEyLjQ1NC4yMjcgMS4wNjUuMjQ3IDIuMTkzLS4wOCAzLjI2N2E0Ljg1NSA0Ljg1NSAwIDAgMS0uNTM0IDEuMTc1Yy0uMzI0LjUxNC0uNy45NTQtMS4xMTcgMS4zMjMtLjgwNi43MTItMS42MTYgMS4wNzEtMi4yMzUgMS4yMDYtLjE0LjE3OS0uMzQ2LjM4MS0uNjI5LjU3OC0uNjQzLjQ0Ny0xLjQ5My43MTEtMi41NjEuNzExLTEuMDcgMC0xLjkyLS4yNjQtMi41NjMtLjcxMWEyLjg3NCAyLjg3NCAwIDAgMS0uNjI5LS41NzhjLS42MTgtLjEzNC0xLjQyOC0uNDkzLTIuMjMyLTEuMjAzLS40MTktLjM3LS43OTYtLjgxLTEuMTItMS4zMjZhNC44NTUgNC44NTUgMCAwIDEtLjUzNC0xLjE3NUMuMDk2IDguOTMzLjExNiA3LjgwNS4zNDMgNi43NGE2Ljc0IDYuNzQgMCAwIDEgLjExMi0uNDU0IDYuNzI4IDYuNzI4IDAgMCAxLS4xOTQtLjU5OEMtLjAzIDQuNjMzLS4xMDggMy41MjQuMTcgMi40NThsLjA0OC0uMTg4LjE2NC0uMTA2Yy4xMjQtLjA4LjMzNi0uMTg4LjYzLS4yOTEuODg1LS4zMSAxLjkzMy0uMzggMy4xMDQtLjA3LjE4NC0uMTA4LjQzNC0uMjMuNzQ4LS4zNDhDNS42MTYgMS4xNyA2LjQ5NyAxIDcuNTAxIDFjMS4wMDIgMCAxLjg4My4xNyAyLjYzNC40NTUuMzE1LjExOS41NjUuMjQuNzUuMzQ3Wm0zLjAyNyAxLjExNmEzLjEzIDMuMTMgMCAwIDAtLjI1NS0uMTAyYy0uNzQ5LS4yNjMtMS42Ni0uMzA5LTIuNzA4LjAwN2wtLjIzOC4wNzItLjIwMS0uMTQ3Yy0uMTEtLjA4LS4zNTQtLjIxNy0uNzI4LS4zNThDOS4xNCAyLjE0NyA4LjM4IDIgNy41MDEgMmMtLjg4IDAtMS42NDEuMTQ3LTIuMjgzLjM5LS4zNzMuMTQxLS42MTcuMjc4LS43MjcuMzU4bC0uMi4xNDctLjI0LS4wNzJjLTEuMDQ4LS4zMTYtMS45NTgtLjI3LTIuNzA3LS4wMDdhMy4xMyAzLjEzIDAgMCAwLS4yNTUuMTAyYy0uMTY3LjgxMi0uMDk0IDEuNjc0LjEzNiAyLjUwMy4wODQuMzAzLjE2Ni41MjQuMjE3LjYzN2wuMDgyLjE4Mi0uMDY2LjE5Yy0uMDMyLjA5LS4wODQuMjctLjEzNy41MTgtLjE5NS45MTQtLjIxMiAxLjg4LjA1OSAyLjc2Ny4xLjMzMy4yNDEuNjQ1LjQyMy45MzUuMjczLjQzNC41ODguODAxLjkzNiAxLjEwOC40MzQuMzgzLjg5OC42NTUgMS4zNi44MzQuMjcuMTA1LjQ3NC4xNTUuNTc1LjE3bC4yNDguMDM0LjEyLjIyYy4wNTEuMDkxLjE5OS4yNjYuNDY2LjQ1Mi40NzYuMzMgMS4xMjcuNTMyIDEuOTkzLjUzMi44NjUgMCAxLjUxNi0uMjAyIDEuOTktLjUzMi4yNjgtLjE4Ni40MTYtLjM2LjQ2Ni0uNDUybC4xMjEtLjIyLjI0OC0uMDM0Yy4xMDEtLjAxNS4zMDUtLjA2NS41NzYtLjE3LjQ2Mi0uMTguOTI3LS40NTIgMS4zNjItLjgzNi4zNDctLjMwNy42Ni0uNjc0LjkzMy0xLjEwNy4xODItLjI5LjMyMi0uNjAxLjQyMy0uOTM0LjI3MS0uODg3LjI1NC0xLjg1My4wNi0yLjc2N2E0LjU5NyA0LjU5NyAwIDAgMC0uMTM4LS41MTlsLS4wNjYtLjE4OS4wODItLjE4MmMuMDUtLjExMy4xMzMtLjMzNC4yMTctLjYzNy4yMy0uODI5LjMwMy0xLjY5MS4xMzYtMi41MDNaTTUgNS4wMDhjLjAwNC4xODEtLjA0OC4zNjQtLjI2NC42MTYtLjQyOC40OTgtLjk4NS40ODgtMS40MzEuMDQ5LS4zMjYtLjMyMS0uMzI1LS43MzItLjI5LTEuMDQ3LjA4NS0uNzYuNzQ4LS43MjIgMS4yNjItLjQ0LjQ4Ni4yNy43MTcuNjE2LjcyMy44MjNabTUgMGMuMDA2LS4yMDYuMjM3LS41NTMuNzI0LS44MjEuNTE0LS4yODMgMS4xNzYtLjMyMSAxLjI2LjQ0LjAzNi4zMTQuMDM4LjcyNS0uMjg4IDEuMDQ2LS40NDYuNDQtMS4wMDUuNDQ5LTEuNDMzLS4wNS0uMjE3LS4yNS0uMjY3LS40MzQtLjI2My0uNjE0Wk03LjUgOGMtLjUwMyAwLS45NzYtLjI0LTEuMzc1LS42NzItLjM5OC0uNDMyLS41OTItMS4xMjYgMC0xLjUyOC4zODQtLjI1OSAxLjA4Mi0uMyAxLjM3NS0uMy4yOTQgMCAuOTkxLjA0MSAxLjM3NS4zLjU5My40MDIuMzk3IDEuMDk2IDAgMS41MjhDOC40NzcgNy43NiA4LjAwMiA4IDcuNSA4Wm0wIDFjLjgwOCAwIDIuNjU2Ljk5NCAyLjQ5IDIuMDc0LS4xNTMuOTkzLTIuMTE0LjkyNS0yLjQ5LjkyNS0uMzc0IDAtMi4zMzYuMDY4LTIuNDktLjkyNUM0Ljg0NSA5Ljk5NCA2LjY5MyA5IDcuNSA5WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVGltZWxpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzVmVnYSA9IGZ1bmN0aW9uIEV1aUljb25WaXNWZWdhKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi40MTQgOC4wMzYgNC44OSAxMC41MWEuNS41IDAgMCAxLS43MDcuNzA4TDEuMzU0IDguMzg5YS41LjUgMCAwIDEgMC0uNzA3bDIuODI4LTIuODI4YS41LjUgMCAxIDEgLjcwNy43MDdMMi40MTQgOC4wMzZabTguNzY4IDIuNDc0IDIuNDc1LTIuNDc0LTIuNDc1LTIuNDc1YS41LjUgMCAwIDEgLjcwNy0uNzA3bDIuODI5IDIuODI4YS41LjUgMCAwIDEgMCAuNzA3bC0yLjgyOSAyLjgyOWEuNS41IDAgMSAxLS43MDctLjcwOFpNOC41NTkgMi41MDZhLjUuNSAwIDAgMSAuOTgxLjE5TDcuNDQxIDEzLjQ5NGEuNS41IDAgMCAxLS45ODEtLjE5TDguNTU5IDIuNTA2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVmVnYTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNWaXN1YWxCdWlsZGVyID0gZnVuY3Rpb24gRXVpSWNvblZpc1Zpc3VhbEJ1aWxkZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjgzNyA3Yy4xMS45My4xNjUgMS44ODYuMTY1IDIuODY5VjEzLjVhLjUuNSAwIDEgMS0xIDBWOS44NjlBMjMuMyAyMy4zIDAgMCAwIDguODMgN0g3LjI5Yy0uMTk1IDEuMDQtLjI5MiAxLjk4NS0uMjkyIDIuODM1VjEzLjVhLjUuNSAwIDEgMS0xIDBWOS44MzVjMC0uODY0LjA5Mi0xLjgwOS4yNzYtMi44MzVIMi41YS41LjUgMCAwIDEtLjQ5NS0uNTdjLjI4NS0yLjAyMyAxLjYyNi0zLjM1OCAzLjkzMS0zLjk2IDEuOTY3LS41MTQgNC4yMi0uNjA2IDYuNzU2LS4yNzhBMS41IDEuNSAwIDAgMSAxNCAzLjY3OVY1LjVBMS41IDEuNSAwIDAgMSAxMi41IDdIOS44MzdabS0uNTY5LTFIMTIuNWEuNS41IDAgMCAwIC41LS41VjMuNjhhLjUuNSAwIDAgMC0uNDM2LS40OTdjLTIuNDE2LS4zMTEtNC41NC0uMjI1LTYuMzc1LjI1NEM0LjQ5NCAzLjg4IDMuNDkxIDQuNzI0IDMuMTE3IDZIOS4yNjhaTTIgMTB2My41YS41LjUgMCAxIDEtMSAwdi00YS41LjUgMCAwIDEgLjUtLjVoM2EuNS41IDAgMCAxIC41LjV2NGEuNS41IDAgMSAxLTEgMFYxMEgyWm0xMCAzLjVhLjUuNSAwIDEgMS0xIDB2LTJhLjUuNSAwIDAgMSAuNS0uNWgzYS41LjUgMCAwIDEgLjUuNXYyYS41LjUgMCAxIDEtMSAwVjEyaC0ydjEuNVpNMS4wMTYgMTYuMDI2YS41LjUgMCAwIDEgMC0xSDE1YS41LjUgMCAxIDEgMCAxSDEuMDE2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVmlzdWFsQnVpbGRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25XYXJuaW5nID0gZnVuY3Rpb24gRXVpSWNvbldhcm5pbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm04LjU1IDkuNTAyLjM1LTMuNTA3YS45MDUuOTA1IDAgMSAwLTEuOCAwbC4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMCAxLjEgMFpNOSAxMmExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04Ljg2NCAxLjQ5NmExIDEgMCAwIDAtMS43MjggMGwtNyAxMkExIDEgMCAwIDAgMSAxNWgxNGExIDEgMCAwIDAgLjg2NC0xLjUwNGwtNy0xMlpNMSAxNCA4IDJsNyAxMkgxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uV2FybmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25XYXJuaW5nRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvbldhcm5pbmdGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxYTEgMSAwIDAgMSAuODY0LjQ5Nmw3IDEyQTEgMSAwIDAgMSAxNSAxNUgxYTEgMSAwIDAgMS0uODY0LTEuNTA0bDctMTJBMSAxIDAgMCAxIDggMVptLjkgNC45OTUtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAwTDcuMSA1Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMFpNOCAxM2ExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25XYXJuaW5nRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbldvcmRXcmFwID0gZnVuY3Rpb24gRXVpSWNvbldvcmRXcmFwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAzaDEydjFIMlYzem0wIDhoNnYxSDJ2LTF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDdoOS41di41VjdoLjAzOWwuMDgzLjAwNWEyLjk1OCAyLjk1OCAwIDAgMSAxLjEwMi4yOThjLjMwOS4xNTQuNjMzLjM5NC44OC43NjMuMjQ4LjM3My4zOTYuODQ3LjM5NiAxLjQzNCAwIC41ODgtLjE0OCAxLjA2MS0uMzk2IDEuNDM0YTIuMjU3IDIuMjU3IDAgMCAxLS44OC43NjMgMi45NTcgMi45NTcgMCAwIDEtMS4xODUuMzAyaC0uMDI1bC0uMDA5LjAwMWgtLjAwM3MtLjAwMiAwLS4wMDItLjV2LjVIMTF2MWwtMi0xLjUgMi0xLjV2MWguNTA2bC4wNDQtLjAwM2ExLjk1OSAxLjk1OSAwIDAgMCAuNzI2LS4xOTVjLjE5MS0uMDk1LjM2Ny0uMjMuNDk1LS40MjMuMTI3LS4xOS4yMjktLjQ2Ni4yMjktLjg3OXMtLjEwMi0uNjg5LS4yMjktLjg3OWExLjI1NiAxLjI1NiAwIDAgMC0uNDk1LS40MjQgMS45NTggMS45NTggMCAwIDAtLjc3LS4xOTdIMlY3elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uV29yZFdyYXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uV29yZFdyYXBEaXNhYmxlZCA9IGZ1bmN0aW9uIEV1aUljb25Xb3JkV3JhcERpc2FibGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMy41IDEyIDJ2MUgydjFoMTB2MWwyLTEuNXpNMTIgOVY4SDJWN2gxMFY2bDIgMS41TDEyIDl6bTAgM3YxbDItMS41LTItMS41djFIMnYxaDEwelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uV29yZFdyYXBEaXNhYmxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25XcmVuY2ggPSBmdW5jdGlvbiBFdWlJY29uV3JlbmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtNi45MTggOS43NDYgNC41MzcgNC41MzdhMiAyIDAgMSAwIDIuODI4LTIuODI5bC0zLjE1Ny0zLjE1NmEuNS41IDAgMCAxIC43MDgtLjcwOGwzLjE1NiAzLjE1N2EzIDMgMCAxIDEtNC4yNDMgNC4yNDNsLTQuOTQ5LTQuOTVhNS4wMDEgNS4wMDEgMCAwIDEtNS4yMi03LjEwNi41LjUgMCAwIDEgLjgwNS0uMTM4TDMuNjc2IDUuMDlhMSAxIDAgMSAwIDEuNDE1LTEuNDE0TDIuNzk3IDEuMzgyYS41LjUgMCAwIDEgLjEzOC0uODA1IDUuMDAxIDUuMDAxIDAgMSAxIDMuOTgzIDkuMTY5Wk0xLjIyNiA0LjA1NGE0LjAwMiA0LjAwMiAwIDAgMCA2LjY5MyAzLjg2NSA0IDQgMCAwIDAtMy44NjUtNi42OTNsMS43NDQgMS43NDNhMiAyIDAgMSAxLTIuODI5IDIuODI4TDEuMjI2IDQuMDU0Wm0xMC4yMjkgOC44MTRhMSAxIDAgMSAxIDEuNDE0LTEuNDE0IDEgMSAwIDAgMS0xLjQxNCAxLjQxNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbldyZW5jaDsiLCAiaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUwIGZyb20gJy4vYXNzZXRzL2FjY2Vzc2liaWxpdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxIGZyb20gJy4vYXNzZXRzL2FnZ3JlZ2F0ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIgZnJvbSAnLi9hc3NldHMvYWxlcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzIGZyb20gJy4vYXNzZXRzL2FuYWx5emVFdmVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZV9ldmVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUgZnJvbSAnLi9hc3NldHMvYW5ub3RhdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYgZnJvbSAnLi9hc3NldHMvYW5vbWFseV9jaGFydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcgZnJvbSAnLi9hc3NldHMvYW5vbWFseV9zd2ltX2xhbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4IGZyb20gJy4vYXNzZXRzL2FwbV90cmFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkgZnJvbSAnLi9hc3NldHMvYXBwX2FkZF9kYXRhLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAgZnJvbSAnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTEgZnJvbSAnLi9hc3NldHMvYXBwX2FnZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTIgZnJvbSAnLi9hc3NldHMvYXBwX2FwbS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzIGZyb20gJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQgZnJvbSAnLi9hc3NldHMvYXBwX2F1ZGl0YmVhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1IGZyb20gJy4vYXNzZXRzL2FwcF9jYW52YXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNiBmcm9tICcuL2Fzc2V0cy9hcHBfY2FzZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNyBmcm9tICcuL2Fzc2V0cy9hcHBfY29kZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4IGZyb20gJy4vYXNzZXRzL2FwcF9jb25zb2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTkgZnJvbSAnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMCBmcm9tICcuL2Fzc2V0cy9hcHBfZGFzaGJvYXJkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEgZnJvbSAnLi9hc3NldHMvYXBwX2RldnRvb2xzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjIgZnJvbSAnLi9hc3NldHMvYXBwX2Rpc2NvdmVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMgZnJvbSAnLi9hc3NldHMvYXBwX2Vtcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0IGZyb20gJy4vYXNzZXRzL2FwcF9maWxlYmVhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1IGZyb20gJy4vYXNzZXRzL2FwcF9mbGVldC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2IGZyb20gJy4vYXNzZXRzL2FwcF9naXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNyBmcm9tICcuL2Fzc2V0cy9hcHBfZ3JhcGguanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOCBmcm9tICcuL2Fzc2V0cy9hcHBfZ3Jvay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5IGZyb20gJy4vYXNzZXRzL2FwcF9oZWFydGJlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMCBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIgZnJvbSAnLi9hc3NldHMvYXBwX2luZGV4X3JvbGx1cC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzIGZyb20gJy4vYXNzZXRzL2FwcF9sZW5zLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQgZnJvbSAnLi9hc3NldHMvYXBwX2xvZ3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNSBmcm9tICcuL2Fzc2V0cy9hcHBfbWFuYWdlbWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2IGZyb20gJy4vYXNzZXRzL2FwcF9tZXRyaWNiZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzcgZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOCBmcm9tICcuL2Fzc2V0cy9hcHBfbWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOSBmcm9tICcuL2Fzc2V0cy9hcHBfbW9uaXRvcmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwIGZyb20gJy4vYXNzZXRzL2FwcF9ub3RlYm9vay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxIGZyb20gJy4vYXNzZXRzL2FwcF9wYWNrZXRiZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDIgZnJvbSAnLi9hc3NldHMvYXBwX3BpcGVsaW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMgZnJvbSAnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0IGZyb20gJy4vYXNzZXRzL2FwcF9yZXBvcnRpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NSBmcm9tICcuL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2IGZyb20gJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NyBmcm9tICcuL2Fzc2V0cy9hcHBfc2VjdXJpdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OCBmcm9tICcuL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDkgZnJvbSAnLi9hc3NldHMvYXBwX3NwYWNlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwIGZyb20gJy4vYXNzZXRzL2FwcF9zcWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MSBmcm9tICcuL2Fzc2V0cy9hcHBfdGltZWxpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MiBmcm9tICcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MyBmcm9tICcuL2Fzc2V0cy9hcHBfdXB0aW1lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQgZnJvbSAnLi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUgZnJvbSAnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2IGZyb20gJy4vYXNzZXRzL2FwcF92dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NyBmcm9tICcuL2Fzc2V0cy9hcHBfd2F0Y2hlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4IGZyb20gJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTkgZnJvbSAnLi9hc3NldHMvYXBwcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwIGZyb20gJy4vYXNzZXRzL2Fycm93RW5kLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEgZnJvbSAnLi9hc3NldHMvYXJyb3dTdGFydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyIGZyb20gJy4vYXNzZXRzL2Fycm93X2Rvd24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MyBmcm9tICcuL2Fzc2V0cy9hcnJvd19sZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQgZnJvbSAnLi9hc3NldHMvYXJyb3dfcmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NSBmcm9tICcuL2Fzc2V0cy9hcnJvd191cC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2IGZyb20gJy4vYXNzZXRzL2FydGljbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NyBmcm9tICcuL2Fzc2V0cy9hc3Rlcmlzay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4IGZyb20gJy4vYXNzZXRzL2F0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkgZnJvbSAnLi9hc3NldHMvYmVha2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAgZnJvbSAnLi9hc3NldHMvYmVsbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxIGZyb20gJy4vYXNzZXRzL2JlbGxTbGFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyIGZyb20gJy4vYXNzZXRzL2JldGEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MyBmcm9tICcuL2Fzc2V0cy9ib2x0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQgZnJvbSAnLi9hc3NldHMvYm94ZXNfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1IGZyb20gJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYgZnJvbSAnLi9hc3NldHMvYnJhbmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzcgZnJvbSAnLi9hc3NldHMvYnJhbmNoVXNlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4IGZyb20gJy4vYXNzZXRzL2Jyb29tLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkgZnJvbSAnLi9hc3NldHMvYnJ1c2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MCBmcm9tICcuL2Fzc2V0cy9idWcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MSBmcm9tICcuL2Fzc2V0cy9idWxsc2V5ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyIGZyb20gJy4vYXNzZXRzL2NhbGVuZGFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMgZnJvbSAnLi9hc3NldHMvY2hhbmdlX3BvaW50X2RldGVjdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0IGZyb20gJy4vYXNzZXRzL2NoZWNrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODUgZnJvbSAnLi9hc3NldHMvY2hlY2tJbkNpcmNsZUZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2IGZyb20gJy4vYXNzZXRzL2NoZWVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODcgZnJvbSAnLi9hc3NldHMvY2xpY2tMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODggZnJvbSAnLi9hc3NldHMvY2xpY2tSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5IGZyb20gJy4vYXNzZXRzL2Nsb2NrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAgZnJvbSAnLi9hc3NldHMvY2xvY2tDb3VudGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTEgZnJvbSAnLi9hc3NldHMvY2xvdWREcml6emxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTIgZnJvbSAnLi9hc3NldHMvY2xvdWRTdG9ybXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MyBmcm9tICcuL2Fzc2V0cy9jbG91ZFN1bm55LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQgZnJvbSAnLi9hc3NldHMvY2x1c3Rlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk1IGZyb20gJy4vYXNzZXRzL2NvbG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTYgZnJvbSAnLi9hc3NldHMvY29tcHV0ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk3IGZyb20gJy4vYXNzZXRzL2NvbnNvbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OCBmcm9tICcuL2Fzc2V0cy9jb250YWluZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OSBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDEgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUJlbG93LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAyIGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDMgZnJvbSAnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwNCBmcm9tICcuL2Fzc2V0cy9jb250cm9sc192ZXJ0aWNhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwNSBmcm9tICcuL2Fzc2V0cy9jb3B5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA2IGZyb20gJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA3IGZyb20gJy4vYXNzZXRzL2Nyb3NzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA4IGZyb20gJy4vYXNzZXRzL2Nyb3NzSW5DaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDkgZnJvbSAnLi9hc3NldHMvY3Jvc3NfaW5fY2lyY2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTEwIGZyb20gJy4vYXNzZXRzL2Nyb3NzaGFpcnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTEgZnJvbSAnLi9hc3NldHMvY3VycmVuY3kuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTIgZnJvbSAnLi9hc3NldHMvY3V0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTEzIGZyb20gJy4vYXNzZXRzL2RhdGFiYXNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE0IGZyb20gJy4vYXNzZXRzL2Rlc2t0b3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTUgZnJvbSAnLi9hc3NldHMvZGlmZi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExNiBmcm9tICcuL2Fzc2V0cy9kaXNjdXNzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE3IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE4IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50RWRpdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExOSBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudGF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTIwIGZyb20gJy4vYXNzZXRzL2RvY3VtZW50cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyMSBmcm9tICcuL2Fzc2V0cy9kb3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjIgZnJvbSAnLi9hc3NldHMvZG90SW5DaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjMgZnJvbSAnLi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTI0IGZyb20gJy4vYXNzZXRzL2RvdWJsZUFycm93UmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjUgZnJvbSAnLi9hc3NldHMvZG93bmxvYWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjYgZnJvbSAnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjcgZnJvbSAnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTI4IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkJvdHRvbS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzAgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25NaWRkbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzIgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzMgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduVG9wLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM0IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tTGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzNSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM2IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wTGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzNyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcFJpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM4IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzkgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX2xlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDAgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX3JpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQxIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9ib2xkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQyIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9jaGVja2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDMgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NvZGVfYmxvY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDQgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NvbW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDUgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2hlYWRpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDYgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2l0YWxpYy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfbGluay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0OCBmcm9tICcuL2Fzc2V0cy9lZGl0b3Jfb3JkZXJlZF9saXN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ5IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9yZWRvLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUwIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9zdHJpa2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTEgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3RhYmxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUyIGZyb20gJy4vYXNzZXRzL2VkaXRvcl91bmRlcmxpbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTMgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3VuZG8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTQgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3Vub3JkZXJlZF9saXN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU1IGZyb20gJy4vYXNzZXRzL2VtYWlsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU2IGZyb20gJy4vYXNzZXRzL2VtcHR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU3IGZyb20gJy4vYXNzZXRzL2VuZHBvaW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU4IGZyb20gJy4vYXNzZXRzL2VxbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1OSBmcm9tICcuL2Fzc2V0cy9lcmFzZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjAgZnJvbSAnLi9hc3NldHMvZXJyb3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjEgZnJvbSAnLi9hc3NldHMvZXJyb3JGaWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjIgZnJvbSAnLi9hc3NldHMvZXNxbFZpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MyBmcm9tICcuL2Fzc2V0cy9leGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY0IGZyb20gJy4vYXNzZXRzL2V4cGFuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NSBmcm9tICcuL2Fzc2V0cy9leHBhbmRNaW5pLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY2IGZyb20gJy4vYXNzZXRzL2V4cG9ydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NyBmcm9tICcuL2Fzc2V0cy9leWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjggZnJvbSAnLi9hc3NldHMvZXllX2Nsb3NlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2OSBmcm9tICcuL2Fzc2V0cy9mYWNlX2hhcHB5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTcwIGZyb20gJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MSBmcm9tICcuL2Fzc2V0cy9mYWNlX3NhZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MiBmcm9tICcuL2Fzc2V0cy9maWVsZF9zdGF0aXN0aWNzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTczIGZyb20gJy4vYXNzZXRzL2ZpbHRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3NCBmcm9tICcuL2Fzc2V0cy9maWx0ZXJFeGNsdWRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc1IGZyb20gJy4vYXNzZXRzL2ZpbHRlcklnbm9yZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3NiBmcm9tICcuL2Fzc2V0cy9maWx0ZXJJbkNpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3NyBmcm9tICcuL2Fzc2V0cy9maWx0ZXJJbmNsdWRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc4IGZyb20gJy4vYXNzZXRzL2ZsYWcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzkgZnJvbSAnLi9hc3NldHMvZm9sZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4MCBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfY2hlY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODEgZnJvbSAnLi9hc3NldHMvZm9sZGVyX2Nsb3NlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4MiBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfZXhjbGFtYXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODMgZnJvbSAnLi9hc3NldHMvZm9sZGVyX29wZW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODQgZnJvbSAnLi9hc3NldHMvZnJhbWVOZXh0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTg1IGZyb20gJy4vYXNzZXRzL2ZyYW1lUHJldmlvdXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODYgZnJvbSAnLi9hc3NldHMvZnVsbFNjcmVlbkV4aXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODcgZnJvbSAnLi9hc3NldHMvZnVsbF9zY3JlZW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODggZnJvbSAnLi9hc3NldHMvZnVuY3Rpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODkgZnJvbSAnLi9hc3NldHMvZ2Vhci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5MCBmcm9tICcuL2Fzc2V0cy9nbGFzc2VzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTkxIGZyb20gJy4vYXNzZXRzL2dsb2JlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTkyIGZyb20gJy4vYXNzZXRzL2dyYWIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTMgZnJvbSAnLi9hc3NldHMvZ3JhYk9tbmlkaXJlY3Rpb25hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5NCBmcm9tICcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTUgZnJvbSAnLi9hc3NldHMvZ3JhZGllbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTYgZnJvbSAnLi9hc3NldHMvZ3JpZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5NyBmcm9tICcuL2Fzc2V0cy9oZWFydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5OCBmcm9tICcuL2Fzc2V0cy9oZWF0bWFwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk5IGZyb20gJy4vYXNzZXRzL2hlbHAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDAgZnJvbSAnLi9hc3NldHMvaG9tZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwMSBmcm9tICcuL2Fzc2V0cy9pSW5DaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDIgZnJvbSAnLi9hc3NldHMvaW1hZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDMgZnJvbSAnLi9hc3NldHMvaW1wb3J0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA0IGZyb20gJy4vYXNzZXRzL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA1IGZyb20gJy4vYXNzZXRzL2luZGV4VGVtcG9yYXJ5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA2IGZyb20gJy4vYXNzZXRzL2luZGV4X2Nsb3NlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA3IGZyb20gJy4vYXNzZXRzL2luZGV4X2VkaXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDggZnJvbSAnLi9hc3NldHMvaW5kZXhfZmx1c2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDkgZnJvbSAnLi9hc3NldHMvaW5kZXhfbWFwcGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxMCBmcm9tICcuL2Fzc2V0cy9pbmRleF9vcGVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjExIGZyb20gJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTIgZnJvbSAnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTMgZnJvbSAnLi9hc3NldHMvaW5maW5pdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTQgZnJvbSAnLi9hc3NldHMvaW5wdXRPdXRwdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTUgZnJvbSAnLi9hc3NldHMvaW5zcGVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxNiBmcm9tICcuL2Fzc2V0cy9pbnZlcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTcgZnJvbSAnLi9hc3NldHMvaXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTggZnJvbSAnLi9hc3NldHMvaXNzdWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTkgZnJvbSAnLi9hc3NldHMva2V5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjIwIGZyb20gJy4vYXNzZXRzL2tleWJvYXJkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjIxIGZyb20gJy4vYXNzZXRzL2txbF9maWVsZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyMiBmcm9tICcuL2Fzc2V0cy9rcWxfZnVuY3Rpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjMgZnJvbSAnLi9hc3NldHMva3FsX29wZXJhbmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjQgZnJvbSAnLi9hc3NldHMva3FsX3NlbGVjdG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI1IGZyb20gJy4vYXNzZXRzL2txbF92YWx1ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyNiBmcm9tICcuL2Fzc2V0cy9rdWJlcm5ldGVzTm9kZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyNyBmcm9tICcuL2Fzc2V0cy9rdWJlcm5ldGVzUG9kLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI4IGZyb20gJy4vYXNzZXRzL2xhdW5jaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyOSBmcm9tICcuL2Fzc2V0cy9sYXllcnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzAgZnJvbSAnLi9hc3NldHMvbGV0dGVyaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMxIGZyb20gJy4vYXNzZXRzL2xpbmVEYXNoZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzIgZnJvbSAnLi9hc3NldHMvbGluZURvdHRlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzMyBmcm9tICcuL2Fzc2V0cy9saW5lU29saWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzQgZnJvbSAnLi9hc3NldHMvbGluay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNSBmcm9tICcuL2Fzc2V0cy9saXN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM2IGZyb20gJy4vYXNzZXRzL2xpc3RfYWRkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM3IGZyb20gJy4vYXNzZXRzL2xvY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzggZnJvbSAnLi9hc3NldHMvbG9ja09wZW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzkgZnJvbSAnLi9hc3NldHMvbG9nX3BhdHRlcm5fYW5hbHlzaXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDAgZnJvbSAnLi9hc3NldHMvbG9nX3JhdGVfYW5hbHlzaXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDEgZnJvbSAnLi9hc3NldHMvbG9nb19hZXJvc3Bpa2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDIgZnJvbSAnLi9hc3NldHMvbG9nb19hcGFjaGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDMgZnJvbSAnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ0IGZyb20gJy4vYXNzZXRzL2xvZ29fYXdzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ1IGZyb20gJy4vYXNzZXRzL2xvZ29fYXdzX21vbm8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDYgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NyBmcm9tICcuL2Fzc2V0cy9sb2dvX2F6dXJlX21vbm8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDggZnJvbSAnLi9hc3NldHMvbG9nb19iZWF0cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0OSBmcm9tICcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2NlcGguanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTEgZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTQgZnJvbSAnLi9hc3NldHMvbG9nb19jb2Rlc2FuZGJveC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2RvY2tlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1NyBmcm9tICcuL2Fzc2V0cy9sb2dvX2Ryb3B3aXphcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTggZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU5IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpY19zdGFjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNzZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjEgZnJvbSAnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2V0Y2QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjMgZnJvbSAnLi9hc3NldHMvbG9nb19nY3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjQgZnJvbSAnLi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2dpdGh1Yi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2dtYWlsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY3IGZyb20gJy4vYXNzZXRzL2xvZ29fZ29sYW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY4IGZyb20gJy4vYXNzZXRzL2xvZ29fZ29vZ2xlX2cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjkgZnJvbSAnLi9hc3NldHMvbG9nb19oYXByb3h5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcwIGZyb20gJy4vYXNzZXRzL2xvZ29faWJtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcxIGZyb20gJy4vYXNzZXRzL2xvZ29faWJtX21vbm8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzIgZnJvbSAnLi9hc3NldHMvbG9nb19rYWZrYS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2t1YmVybmV0ZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzUgZnJvbSAnLi9hc3NldHMvbG9nb19sb2dnaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc2IGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzcgZnJvbSAnLi9hc3NldHMvbG9nb19tYXBzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc4IGZyb20gJy4vYXNzZXRzL2xvZ29fbWVtY2FjaGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc5IGZyb20gJy4vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MCBmcm9tICcuL2Fzc2V0cy9sb2dvX21vbmdvZGIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODEgZnJvbSAnLi9hc3NldHMvbG9nb19teXNxbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MiBmcm9tICcuL2Fzc2V0cy9sb2dvX25naW54LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgzIGZyb20gJy4vYXNzZXRzL2xvZ29fb2JzZXJ2YWJpbGl0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NCBmcm9tICcuL2Fzc2V0cy9sb2dvX29zcXVlcnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODUgZnJvbSAnLi9hc3NldHMvbG9nb19waHAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODYgZnJvbSAnLi9hc3NldHMvbG9nb19wb3N0Z3Jlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NyBmcm9tICcuL2Fzc2V0cy9sb2dvX3Byb21ldGhldXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODggZnJvbSAnLi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4OSBmcm9tICcuL2Fzc2V0cy9sb2dvX3JlZGlzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkwIGZyb20gJy4vYXNzZXRzL2xvZ29fc2VjdXJpdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTEgZnJvbSAnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5MiBmcm9tICcuL2Fzc2V0cy9sb2dvX3NrZXRjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5MyBmcm9tICcuL2Fzc2V0cy9sb2dvX3NsYWNrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk0IGZyb20gJy4vYXNzZXRzL2xvZ29fdXB0aW1lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk1IGZyb20gJy4vYXNzZXRzL2xvZ29fdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk2IGZyb20gJy4vYXNzZXRzL2xvZ29fd2ViaG9vay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5NyBmcm9tICcuL2Fzc2V0cy9sb2dvX3dpbmRvd3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTggZnJvbSAnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk5IGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX2ZpbHRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwMCBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9pZi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwMSBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwMiBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9vdXRwdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDMgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfcXVldWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDQgZnJvbSAnLi9hc3NldHMvbWFnbmV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA1IGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoRXhjbGFtYXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDYgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNyBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDggZnJvbSAnLi9hc3NldHMvbWFwX21hcmtlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwOSBmcm9tICcuL2Fzc2V0cy9tZW1vcnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTAgZnJvbSAnLi9hc3NldHMvbWVudS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxMSBmcm9tICcuL2Fzc2V0cy9tZW51RG93bi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxMiBmcm9tICcuL2Fzc2V0cy9tZW51TGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxMyBmcm9tICcuL2Fzc2V0cy9tZW51UmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTQgZnJvbSAnLi9hc3NldHMvbWVudVVwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE1IGZyb20gJy4vYXNzZXRzL21lcmdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE2IGZyb20gJy4vYXNzZXRzL21pbmltaXplLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE3IGZyb20gJy4vYXNzZXRzL21pbnVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE4IGZyb20gJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxOSBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIwIGZyb20gJy4vYXNzZXRzL21pbnVzX2luX3NxdWFyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMSBmcm9tICcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjIgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMyBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyNCBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjUgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI2IGZyb20gJy4vYXNzZXRzL21sX2RhdGFfdmlzdWFsaXplci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyNyBmcm9tICcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjggZnJvbSAnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjkgZnJvbSAnLi9hc3NldHMvbW9iaWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMwIGZyb20gJy4vYXNzZXRzL21vb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzEgZnJvbSAnLi9hc3NldHMvbW92ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzMiBmcm9tICcuL2Fzc2V0cy9uYW1lc3BhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzMgZnJvbSAnLi9hc3NldHMvbmVzdGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM0IGZyb20gJy4vYXNzZXRzL25ld19jaGF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM1IGZyb20gJy4vYXNzZXRzL25vZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzYgZnJvbSAnLi9hc3NldHMvbnVtYmVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM3IGZyb20gJy4vYXNzZXRzL29mZmxpbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzggZnJvbSAnLi9hc3NldHMvb25saW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM5IGZyb20gJy4vYXNzZXRzL3BhY2thZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDAgZnJvbSAnLi9hc3NldHMvcGFnZVNlbGVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0MSBmcm9tICcuL2Fzc2V0cy9wYWdlc1NlbGVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0MiBmcm9tICcuL2Fzc2V0cy9wYWludC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0MyBmcm9tICcuL2Fzc2V0cy9wYWxldHRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ0IGZyb20gJy4vYXNzZXRzL3BhcGVyX2NsaXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDUgZnJvbSAnLi9hc3NldHMvcGFydGlhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NiBmcm9tICcuL2Fzc2V0cy9wYXVzZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NyBmcm9tICcuL2Fzc2V0cy9wYXltZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ4IGZyb20gJy4vYXNzZXRzL3BlbmNpbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0OSBmcm9tICcuL2Fzc2V0cy9wZXJjZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzUwIGZyb20gJy4vYXNzZXRzL3Bpbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1MSBmcm9tICcuL2Fzc2V0cy9waW5fZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzUyIGZyb20gJy4vYXNzZXRzL3BpcGVCcmVha3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTMgZnJvbSAnLi9hc3NldHMvcGlwZU5vQnJlYWtzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU0IGZyb20gJy4vYXNzZXRzL3Bpdm90LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU1IGZyb20gJy4vYXNzZXRzL3BsYXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTYgZnJvbSAnLi9hc3NldHMvcGxheUZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1NyBmcm9tICcuL2Fzc2V0cy9wbHVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU4IGZyb20gJy4vYXNzZXRzL3BsdXNfaW5fY2lyY2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU5IGZyb20gJy4vYXNzZXRzL3BsdXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MCBmcm9tICcuL2Fzc2V0cy9wbHVzX2luX3NxdWFyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MSBmcm9tICcuL2Fzc2V0cy9wb3BvdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjIgZnJvbSAnLi9hc3NldHMvcHVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MyBmcm9tICcuL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjQgZnJvbSAnLi9hc3NldHMvcXVvdGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjUgZnJvbSAnLi9hc3NldHMvcmVmcmVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NiBmcm9tICcuL2Fzc2V0cy9yZXBvcnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NyBmcm9tICcuL2Fzc2V0cy9yZXR1cm5fa2V5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY4IGZyb20gJy4vYXNzZXRzL3NhdmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjkgZnJvbSAnLi9hc3NldHMvc2NhbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzAgZnJvbSAnLi9hc3NldHMvc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzcxIGZyb20gJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzcyIGZyb20gJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzMgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxSZXNvbHZlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3NCBmcm9tICcuL2Fzc2V0cy9zZXNzaW9uVmlld2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc1IGZyb20gJy4vYXNzZXRzL3NoYXJkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc2IGZyb20gJy4vYXNzZXRzL3NoYXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc3IGZyb20gJy4vYXNzZXRzL3NpbmdsZV9tZXRyaWNfdmlld2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc4IGZyb20gJy4vYXNzZXRzL3Nub3dmbGFrZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3OSBmcm9tICcuL2Fzc2V0cy9zb3J0QXNjZW5kaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzgwIGZyb20gJy4vYXNzZXRzL3NvcnREZXNjZW5kaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzgxIGZyb20gJy4vYXNzZXRzL3NvcnRMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzgyIGZyb20gJy4vYXNzZXRzL3NvcnRSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4MyBmcm9tICcuL2Fzc2V0cy9zb3J0X2Rvd24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODQgZnJvbSAnLi9hc3NldHMvc29ydF91cC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NSBmcm9tICcuL2Fzc2V0cy9zb3J0YWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NiBmcm9tICcuL2Fzc2V0cy9zcGFjZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODcgZnJvbSAnLi9hc3NldHMvc3BhcmtsZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODggZnJvbSAnLi9hc3NldHMvc3RhclBsdXNFbXB0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4OSBmcm9tICcuL2Fzc2V0cy9zdGFyUGx1c0ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5MCBmcm9tICcuL2Fzc2V0cy9zdGFyX2VtcHR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkxIGZyb20gJy4vYXNzZXRzL3N0YXJfZW1wdHlfc3BhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTIgZnJvbSAnLi9hc3NldHMvc3Rhcl9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTMgZnJvbSAnLi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTQgZnJvbSAnLi9hc3NldHMvc3Rhcl9taW51c19lbXB0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NSBmcm9tICcuL2Fzc2V0cy9zdGFyX21pbnVzX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NiBmcm9tICcuL2Fzc2V0cy9zdGF0cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NyBmcm9tICcuL2Fzc2V0cy9zdG9wLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk4IGZyb20gJy4vYXNzZXRzL3N0b3BfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk5IGZyb20gJy4vYXNzZXRzL3N0b3Bfc2xhc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDAgZnJvbSAnLi9hc3NldHMvc3RvcmFnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMSBmcm9tICcuL2Fzc2V0cy9zdHJpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDIgZnJvbSAnLi9hc3NldHMvc3VibW9kdWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDAzIGZyb20gJy4vYXNzZXRzL3N1bi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNCBmcm9tICcuL2Fzc2V0cy9zd2F0Y2hfaW5wdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDUgZnJvbSAnLi9hc3NldHMvc3ltbGluay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNiBmcm9tICcuL2Fzc2V0cy90YWJsZU9mQ29udGVudHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDcgZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9jb21wYWN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDA4IGZyb20gJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDkgZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9ub3JtYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTAgZnJvbSAnLi9hc3NldHMvdGFnLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDExIGZyb20gJy4vYXNzZXRzL3RlYXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTIgZnJvbSAnLi9hc3NldHMvdGVtcGVyYXR1cmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTMgZnJvbSAnLi9hc3NldHMvdGltZVJlZnJlc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTQgZnJvbSAnLi9hc3NldHMvdGltZWxpbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTUgZnJvbSAnLi9hc3NldHMvdGltZWxpbmVXaXRoQXJyb3cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTYgZnJvbSAnLi9hc3NldHMvdGltZXNsaWRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNyBmcm9tICcuL2Fzc2V0cy90b2tlbkFsaWFzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE4IGZyb20gJy4vYXNzZXRzL3Rva2VuQW5ub3RhdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxOSBmcm9tICcuL2Fzc2V0cy90b2tlbkFycmF5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDIwIGZyb20gJy4vYXNzZXRzL3Rva2VuQmluYXJ5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDIxIGZyb20gJy4vYXNzZXRzL3Rva2VuQm9vbGVhbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyMiBmcm9tICcuL2Fzc2V0cy90b2tlbkNsYXNzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDIzIGZyb20gJy4vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyNCBmcm9tICcuL2Fzc2V0cy90b2tlbkNvbnN0YW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI1IGZyb20gJy4vYXNzZXRzL3Rva2VuRGF0ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyNiBmcm9tICcuL2Fzc2V0cy90b2tlbkRpbWVuc2lvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyNyBmcm9tICcuL2Fzc2V0cy90b2tlbkVsZW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjggZnJvbSAnLi9hc3NldHMvdG9rZW5FbnVtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI5IGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzMCBmcm9tICcuL2Fzc2V0cy90b2tlbkV2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMxIGZyb20gJy4vYXNzZXRzL3Rva2VuRXhjZXB0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMyIGZyb20gJy4vYXNzZXRzL3Rva2VuRmllbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzMgZnJvbSAnLi9hc3NldHMvdG9rZW5GaWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM0IGZyb20gJy4vYXNzZXRzL3Rva2VuRmxhdHRlbmVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM1IGZyb20gJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzYgZnJvbSAnLi9hc3NldHMvdG9rZW5HZW8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzcgZnJvbSAnLi9hc3NldHMvdG9rZW5IaXN0b2dyYW0uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzggZnJvbSAnLi9hc3NldHMvdG9rZW5JUC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzOSBmcm9tICcuL2Fzc2V0cy90b2tlbkludGVyZmFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MCBmcm9tICcuL2Fzc2V0cy90b2tlbkpvaW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDEgZnJvbSAnLi9hc3NldHMvdG9rZW5LZXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDIgZnJvbSAnLi9hc3NldHMvdG9rZW5LZXl3b3JkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQzIGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0aG9kLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ0IGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NSBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0dhdWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ2IGZyb20gJy4vYXNzZXRzL3Rva2VuTW9kdWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ3IGZyb20gJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ4IGZyb20gJy4vYXNzZXRzL3Rva2VuTmVzdGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ5IGZyb20gJy4vYXNzZXRzL3Rva2VuTnVsbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MCBmcm9tICcuL2Fzc2V0cy90b2tlbk51bWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MSBmcm9tICcuL2Fzc2V0cy90b2tlbk9iamVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MiBmcm9tICcuL2Fzc2V0cy90b2tlbk9wZXJhdG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDUzIGZyb20gJy4vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NCBmcm9tICcuL2Fzc2V0cy90b2tlblBhcmFtZXRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NSBmcm9tICcuL2Fzc2V0cy90b2tlblBlcmNvbGF0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTYgZnJvbSAnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NyBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU4IGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTkgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjAgZnJvbSAnLi9hc3NldHMvdG9rZW5SZXBvLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYxIGZyb20gJy4vYXNzZXRzL3Rva2VuU2VhcmNoVHlwZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MiBmcm9tICcuL2Fzc2V0cy90b2tlblNlbWFudGljVGV4dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MyBmcm9tICcuL2Fzc2V0cy90b2tlblNoYXBlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY0IGZyb20gJy4vYXNzZXRzL3Rva2VuU3RyaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY1IGZyb20gJy4vYXNzZXRzL3Rva2VuU3RydWN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY2IGZyb20gJy4vYXNzZXRzL3Rva2VuU3ltYm9sLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY3IGZyb20gJy4vYXNzZXRzL3Rva2VuVGFnLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY4IGZyb20gJy4vYXNzZXRzL3Rva2VuVGV4dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2OSBmcm9tICcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzAgZnJvbSAnLi9hc3NldHMvdG9rZW5WYXJpYWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MSBmcm9tICcuL2Fzc2V0cy90b2tlblZlY3RvckRlbnNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDcyIGZyb20gJy4vYXNzZXRzL3Rva2VuVmVjdG9yU3BhcnNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDczIGZyb20gJy4vYXNzZXRzL3RyYWluaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc0IGZyb20gJy4vYXNzZXRzL3RyYW5zaXRpb25MZWZ0SW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzUgZnJvbSAnLi9hc3NldHMvdHJhbnNpdGlvbkxlZnRPdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzYgZnJvbSAnLi9hc3NldHMvdHJhbnNpdGlvblRvcEluLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc3IGZyb20gJy4vYXNzZXRzL3RyYW5zaXRpb25Ub3BPdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzggZnJvbSAnLi9hc3NldHMvdHJhc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzkgZnJvbSAnLi9hc3NldHMvdW5mb2xkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDgwIGZyb20gJy4vYXNzZXRzL3VubGluay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MSBmcm9tICcuL2Fzc2V0cy91c2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDgyIGZyb20gJy4vYXNzZXRzL3VzZXJBdmF0YXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODMgZnJvbSAnLi9hc3NldHMvdXNlcnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODQgZnJvbSAnLi9hc3NldHMvdmVjdG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg1IGZyb20gJy4vYXNzZXRzL3ZpZGVvUGxheWVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg2IGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg3IGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhX3N0YWNrZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODggZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg5IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDkwIGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTEgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDkyIGZyb20gJy4vYXNzZXRzL3Zpc19nYXVnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MyBmcm9tICcuL2Fzc2V0cy92aXNfZ29hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NCBmcm9tICcuL2Fzc2V0cy92aXNfbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NSBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTYgZnJvbSAnLi9hc3NldHMvdmlzX21hcF9yZWdpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTcgZnJvbSAnLi9hc3NldHMvdmlzX21ldHJpYy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OCBmcm9tICcuL2Fzc2V0cy92aXNfcGllLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk5IGZyb20gJy4vYXNzZXRzL3Zpc190YWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwMCBmcm9tICcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAxIGZyb20gJy4vYXNzZXRzL3Zpc190ZXh0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAyIGZyb20gJy4vYXNzZXRzL3Zpc190aW1lbGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwMyBmcm9tICcuL2Fzc2V0cy92aXNfdmVnYS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwNCBmcm9tICcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDUgZnJvbSAnLi9hc3NldHMvd2FybmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwNiBmcm9tICcuL2Fzc2V0cy93YXJuaW5nRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA3IGZyb20gJy4vYXNzZXRzL3dvcmRXcmFwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA4IGZyb20gJy4vYXNzZXRzL3dvcmRXcmFwRGlzYWJsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDkgZnJvbSAnLi9hc3NldHMvd3JlbmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTEwIGZyb20gJy4vYXNzZXRzL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTEgZnJvbSAnLi9hc3NldHMvYWdncmVnYXRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTEyIGZyb20gJy4vYXNzZXRzL2FsZXJ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTEzIGZyb20gJy4vYXNzZXRzL2FuYWx5emVFdmVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNCBmcm9tICcuL2Fzc2V0cy9hbmFseXplX2V2ZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE1IGZyb20gJy4vYXNzZXRzL2Fubm90YXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTYgZnJvbSAnLi9hc3NldHMvYW5vbWFseV9jaGFydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNyBmcm9tICcuL2Fzc2V0cy9hbm9tYWx5X3N3aW1fbGFuZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxOCBmcm9tICcuL2Fzc2V0cy9hcG1fdHJhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTkgZnJvbSAnLi9hc3NldHMvYXBwX2FkZF9kYXRhJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIwIGZyb20gJy4vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyMSBmcm9tICcuL2Fzc2V0cy9hcHBfYWdlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjIgZnJvbSAnLi9hc3NldHMvYXBwX2FwbSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyMyBmcm9tICcuL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyNCBmcm9tICcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI1IGZyb20gJy4vYXNzZXRzL2FwcF9jYW52YXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjYgZnJvbSAnLi9hc3NldHMvYXBwX2Nhc2VzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI3IGZyb20gJy4vYXNzZXRzL2FwcF9jb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI4IGZyb20gJy4vYXNzZXRzL2FwcF9jb25zb2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI5IGZyb20gJy4vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMwIGZyb20gJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzEgZnJvbSAnLi9hc3NldHMvYXBwX2RldnRvb2xzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMyIGZyb20gJy4vYXNzZXRzL2FwcF9kaXNjb3Zlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzMyBmcm9tICcuL2Fzc2V0cy9hcHBfZW1zJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM0IGZyb20gJy4vYXNzZXRzL2FwcF9maWxlYmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzNSBmcm9tICcuL2Fzc2V0cy9hcHBfZmxlZXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzYgZnJvbSAnLi9hc3NldHMvYXBwX2dpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzNyBmcm9tICcuL2Fzc2V0cy9hcHBfZ3JhcGgnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzggZnJvbSAnLi9hc3NldHMvYXBwX2dyb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzkgZnJvbSAnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0MCBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0MSBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0MiBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQzIGZyb20gJy4vYXNzZXRzL2FwcF9sZW5zJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ0IGZyb20gJy4vYXNzZXRzL2FwcF9sb2dzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ1IGZyb20gJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ2IGZyb20gJy4vYXNzZXRzL2FwcF9tZXRyaWNiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ3IGZyb20gJy4vYXNzZXRzL2FwcF9tZXRyaWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ4IGZyb20gJy4vYXNzZXRzL2FwcF9tbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0OSBmcm9tICcuL2Fzc2V0cy9hcHBfbW9uaXRvcmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1MCBmcm9tICcuL2Fzc2V0cy9hcHBfbm90ZWJvb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTEgZnJvbSAnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTIgZnJvbSAnLi9hc3NldHMvYXBwX3BpcGVsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUzIGZyb20gJy4vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTQgZnJvbSAnLi9hc3NldHMvYXBwX3JlcG9ydGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1NSBmcm9tICcuL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1NiBmcm9tICcuL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU3IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1OCBmcm9tICcuL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU5IGZyb20gJy4vYXNzZXRzL2FwcF9zcGFjZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjAgZnJvbSAnLi9hc3NldHMvYXBwX3NxbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2MSBmcm9tICcuL2Fzc2V0cy9hcHBfdGltZWxpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjIgZnJvbSAnLi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYzIGZyb20gJy4vYXNzZXRzL2FwcF91cHRpbWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjQgZnJvbSAnLi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY1IGZyb20gJy4vYXNzZXRzL2FwcF92aXN1YWxpemUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjYgZnJvbSAnLi9hc3NldHMvYXBwX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NyBmcm9tICcuL2Fzc2V0cy9hcHBfd2F0Y2hlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2OCBmcm9tICcuL2Fzc2V0cy9hcHBfd29ya3BsYWNlX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2OSBmcm9tICcuL2Fzc2V0cy9hcHBzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTcwIGZyb20gJy4vYXNzZXRzL2Fycm93RW5kJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTcxIGZyb20gJy4vYXNzZXRzL2Fycm93U3RhcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzIgZnJvbSAnLi9hc3NldHMvYXJyb3dfZG93bic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MyBmcm9tICcuL2Fzc2V0cy9hcnJvd19sZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc0IGZyb20gJy4vYXNzZXRzL2Fycm93X3JpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc1IGZyb20gJy4vYXNzZXRzL2Fycm93X3VwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc2IGZyb20gJy4vYXNzZXRzL2FydGljbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzcgZnJvbSAnLi9hc3NldHMvYXN0ZXJpc2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzggZnJvbSAnLi9hc3NldHMvYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzkgZnJvbSAnLi9hc3NldHMvYmVha2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTgwIGZyb20gJy4vYXNzZXRzL2JlbGwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODEgZnJvbSAnLi9hc3NldHMvYmVsbFNsYXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTgyIGZyb20gJy4vYXNzZXRzL2JldGEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODMgZnJvbSAnLi9hc3NldHMvYm9sdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4NCBmcm9tICcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg1IGZyb20gJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg2IGZyb20gJy4vYXNzZXRzL2JyYW5jaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4NyBmcm9tICcuL2Fzc2V0cy9icmFuY2hVc2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg4IGZyb20gJy4vYXNzZXRzL2Jyb29tJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg5IGZyb20gJy4vYXNzZXRzL2JydXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTkwIGZyb20gJy4vYXNzZXRzL2J1Zyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MSBmcm9tICcuL2Fzc2V0cy9idWxsc2V5ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MiBmcm9tICcuL2Fzc2V0cy9jYWxlbmRhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MyBmcm9tICcuL2Fzc2V0cy9jaGFuZ2VfcG9pbnRfZGV0ZWN0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk0IGZyb20gJy4vYXNzZXRzL2NoZWNrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk1IGZyb20gJy4vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTYgZnJvbSAnLi9hc3NldHMvY2hlZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTcgZnJvbSAnLi9hc3NldHMvY2xpY2tMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk4IGZyb20gJy4vYXNzZXRzL2NsaWNrUmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTkgZnJvbSAnLi9hc3NldHMvY2xvY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDAgZnJvbSAnLi9hc3NldHMvY2xvY2tDb3VudGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAxIGZyb20gJy4vYXNzZXRzL2Nsb3VkRHJpenpsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMiBmcm9tICcuL2Fzc2V0cy9jbG91ZFN0b3JteSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMyBmcm9tICcuL2Fzc2V0cy9jbG91ZFN1bm55JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA0IGZyb20gJy4vYXNzZXRzL2NsdXN0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDUgZnJvbSAnLi9hc3NldHMvY29sb3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDYgZnJvbSAnLi9hc3NldHMvY29tcHV0ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNyBmcm9tICcuL2Fzc2V0cy9jb25zb2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA4IGZyb20gJy4vYXNzZXRzL2NvbnRhaW5lcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwOSBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTAgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTEgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUJlbG93JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEyIGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTMgZnJvbSAnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNCBmcm9tICcuL2Fzc2V0cy9jb250cm9sc192ZXJ0aWNhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNSBmcm9tICcuL2Fzc2V0cy9jb3B5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE2IGZyb20gJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE3IGZyb20gJy4vYXNzZXRzL2Nyb3NzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE4IGZyb20gJy4vYXNzZXRzL2Nyb3NzSW5DaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTkgZnJvbSAnLi9hc3NldHMvY3Jvc3NfaW5fY2lyY2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIwIGZyb20gJy4vYXNzZXRzL2Nyb3NzaGFpcnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjEgZnJvbSAnLi9hc3NldHMvY3VycmVuY3knO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjIgZnJvbSAnLi9hc3NldHMvY3V0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIzIGZyb20gJy4vYXNzZXRzL2RhdGFiYXNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI0IGZyb20gJy4vYXNzZXRzL2Rlc2t0b3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjUgZnJvbSAnLi9hc3NldHMvZGlmZic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNiBmcm9tICcuL2Fzc2V0cy9kaXNjdXNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI3IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI4IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50RWRpdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyOSBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudGF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjMwIGZyb20gJy4vYXNzZXRzL2RvY3VtZW50cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzMSBmcm9tICcuL2Fzc2V0cy9kb3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzIgZnJvbSAnLi9hc3NldHMvZG90SW5DaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzMgZnJvbSAnLi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjM0IGZyb20gJy4vYXNzZXRzL2RvdWJsZUFycm93UmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzUgZnJvbSAnLi9hc3NldHMvZG93bmxvYWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzYgZnJvbSAnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzcgZnJvbSAnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjM4IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkJvdHRvbSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDAgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25NaWRkbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDIgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDMgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduVG9wJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ0IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tTGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ2IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wTGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0NyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcFJpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ4IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDkgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX2xlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTAgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX3JpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUxIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9ib2xkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUyIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9jaGVja2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTMgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NvZGVfYmxvY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTQgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NvbW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTUgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2hlYWRpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTYgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2l0YWxpYyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1NyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfbGluayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1OCBmcm9tICcuL2Fzc2V0cy9lZGl0b3Jfb3JkZXJlZF9saXN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU5IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9yZWRvJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYwIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9zdHJpa2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjEgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3RhYmxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYyIGZyb20gJy4vYXNzZXRzL2VkaXRvcl91bmRlcmxpbmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjMgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3VuZG8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjQgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3Vub3JkZXJlZF9saXN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY1IGZyb20gJy4vYXNzZXRzL2VtYWlsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY2IGZyb20gJy4vYXNzZXRzL2VtcHR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY3IGZyb20gJy4vYXNzZXRzL2VuZHBvaW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY4IGZyb20gJy4vYXNzZXRzL2VxbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2OSBmcm9tICcuL2Fzc2V0cy9lcmFzZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzAgZnJvbSAnLi9hc3NldHMvZXJyb3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzEgZnJvbSAnLi9hc3NldHMvZXJyb3JGaWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzIgZnJvbSAnLi9hc3NldHMvZXNxbFZpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3MyBmcm9tICcuL2Fzc2V0cy9leGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc0IGZyb20gJy4vYXNzZXRzL2V4cGFuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3NSBmcm9tICcuL2Fzc2V0cy9leHBhbmRNaW5pJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc2IGZyb20gJy4vYXNzZXRzL2V4cG9ydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3NyBmcm9tICcuL2Fzc2V0cy9leWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzggZnJvbSAnLi9hc3NldHMvZXllX2Nsb3NlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3OSBmcm9tICcuL2Fzc2V0cy9mYWNlX2hhcHB5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjgwIGZyb20gJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4MSBmcm9tICcuL2Fzc2V0cy9mYWNlX3NhZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4MiBmcm9tICcuL2Fzc2V0cy9maWVsZF9zdGF0aXN0aWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjgzIGZyb20gJy4vYXNzZXRzL2ZpbHRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4NCBmcm9tICcuL2Fzc2V0cy9maWx0ZXJFeGNsdWRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg1IGZyb20gJy4vYXNzZXRzL2ZpbHRlcklnbm9yZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4NiBmcm9tICcuL2Fzc2V0cy9maWx0ZXJJbkNpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4NyBmcm9tICcuL2Fzc2V0cy9maWx0ZXJJbmNsdWRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg4IGZyb20gJy4vYXNzZXRzL2ZsYWcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODkgZnJvbSAnLi9hc3NldHMvZm9sZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MCBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfY2hlY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTEgZnJvbSAnLi9hc3NldHMvZm9sZGVyX2Nsb3NlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MiBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfZXhjbGFtYXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTMgZnJvbSAnLi9hc3NldHMvZm9sZGVyX29wZW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTQgZnJvbSAnLi9hc3NldHMvZnJhbWVOZXh0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk1IGZyb20gJy4vYXNzZXRzL2ZyYW1lUHJldmlvdXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTYgZnJvbSAnLi9hc3NldHMvZnVsbFNjcmVlbkV4aXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTcgZnJvbSAnLi9hc3NldHMvZnVsbF9zY3JlZW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTggZnJvbSAnLi9hc3NldHMvZnVuY3Rpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTkgZnJvbSAnLi9hc3NldHMvZ2Vhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwMCBmcm9tICcuL2Fzc2V0cy9nbGFzc2VzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAxIGZyb20gJy4vYXNzZXRzL2dsb2JlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAyIGZyb20gJy4vYXNzZXRzL2dyYWInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDMgZnJvbSAnLi9hc3NldHMvZ3JhYk9tbmlkaXJlY3Rpb25hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwNCBmcm9tICcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDUgZnJvbSAnLi9hc3NldHMvZ3JhZGllbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDYgZnJvbSAnLi9hc3NldHMvZ3JpZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwNyBmcm9tICcuL2Fzc2V0cy9oZWFydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwOCBmcm9tICcuL2Fzc2V0cy9oZWF0bWFwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA5IGZyb20gJy4vYXNzZXRzL2hlbHAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTAgZnJvbSAnLi9hc3NldHMvaG9tZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMSBmcm9tICcuL2Fzc2V0cy9pSW5DaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTIgZnJvbSAnLi9hc3NldHMvaW1hZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTMgZnJvbSAnLi9hc3NldHMvaW1wb3J0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE0IGZyb20gJy4vYXNzZXRzL2luZGV4JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE1IGZyb20gJy4vYXNzZXRzL2luZGV4VGVtcG9yYXJ5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE2IGZyb20gJy4vYXNzZXRzL2luZGV4X2Nsb3NlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE3IGZyb20gJy4vYXNzZXRzL2luZGV4X2VkaXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTggZnJvbSAnLi9hc3NldHMvaW5kZXhfZmx1c2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTkgZnJvbSAnLi9hc3NldHMvaW5kZXhfbWFwcGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyMCBmcm9tICcuL2Fzc2V0cy9pbmRleF9vcGVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIxIGZyb20gJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjIgZnJvbSAnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjMgZnJvbSAnLi9hc3NldHMvaW5maW5pdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjQgZnJvbSAnLi9hc3NldHMvaW5wdXRPdXRwdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjUgZnJvbSAnLi9hc3NldHMvaW5zcGVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyNiBmcm9tICcuL2Fzc2V0cy9pbnZlcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjcgZnJvbSAnLi9hc3NldHMvaXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjggZnJvbSAnLi9hc3NldHMvaXNzdWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjkgZnJvbSAnLi9hc3NldHMva2V5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzMwIGZyb20gJy4vYXNzZXRzL2tleWJvYXJkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzMxIGZyb20gJy4vYXNzZXRzL2txbF9maWVsZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczMiBmcm9tICcuL2Fzc2V0cy9rcWxfZnVuY3Rpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzMgZnJvbSAnLi9hc3NldHMva3FsX29wZXJhbmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzQgZnJvbSAnLi9hc3NldHMva3FsX3NlbGVjdG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM1IGZyb20gJy4vYXNzZXRzL2txbF92YWx1ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNiBmcm9tICcuL2Fzc2V0cy9rdWJlcm5ldGVzTm9kZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNyBmcm9tICcuL2Fzc2V0cy9rdWJlcm5ldGVzUG9kJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM4IGZyb20gJy4vYXNzZXRzL2xhdW5jaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczOSBmcm9tICcuL2Fzc2V0cy9sYXllcnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDAgZnJvbSAnLi9hc3NldHMvbGV0dGVyaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQxIGZyb20gJy4vYXNzZXRzL2xpbmVEYXNoZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDIgZnJvbSAnLi9hc3NldHMvbGluZURvdHRlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MyBmcm9tICcuL2Fzc2V0cy9saW5lU29saWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDQgZnJvbSAnLi9hc3NldHMvbGluayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0NSBmcm9tICcuL2Fzc2V0cy9saXN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ2IGZyb20gJy4vYXNzZXRzL2xpc3RfYWRkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ3IGZyb20gJy4vYXNzZXRzL2xvY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDggZnJvbSAnLi9hc3NldHMvbG9ja09wZW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDkgZnJvbSAnLi9hc3NldHMvbG9nX3BhdHRlcm5fYW5hbHlzaXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTAgZnJvbSAnLi9hc3NldHMvbG9nX3JhdGVfYW5hbHlzaXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTEgZnJvbSAnLi9hc3NldHMvbG9nb19hZXJvc3Bpa2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTIgZnJvbSAnLi9hc3NldHMvbG9nb19hcGFjaGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTMgZnJvbSAnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU0IGZyb20gJy4vYXNzZXRzL2xvZ29fYXdzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU1IGZyb20gJy4vYXNzZXRzL2xvZ29fYXdzX21vbm8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTYgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1NyBmcm9tICcuL2Fzc2V0cy9sb2dvX2F6dXJlX21vbm8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTggZnJvbSAnLi9hc3NldHMvbG9nb19iZWF0cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1OSBmcm9tICcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2NlcGgnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjEgZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjQgZnJvbSAnLi9hc3NldHMvbG9nb19jb2Rlc2FuZGJveCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2RvY2tlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2NyBmcm9tICcuL2Fzc2V0cy9sb2dvX2Ryb3B3aXphcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjggZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY5IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpY19zdGFjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNzZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzEgZnJvbSAnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2V0Y2QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzMgZnJvbSAnLi9hc3NldHMvbG9nb19nY3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzQgZnJvbSAnLi9hc3NldHMvbG9nb19nY3BfbW9ubyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2dpdGh1Yic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2dtYWlsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc3IGZyb20gJy4vYXNzZXRzL2xvZ29fZ29sYW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc4IGZyb20gJy4vYXNzZXRzL2xvZ29fZ29vZ2xlX2cnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzkgZnJvbSAnLi9hc3NldHMvbG9nb19oYXByb3h5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzgwIGZyb20gJy4vYXNzZXRzL2xvZ29faWJtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzgxIGZyb20gJy4vYXNzZXRzL2xvZ29faWJtX21vbm8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODIgZnJvbSAnLi9hc3NldHMvbG9nb19rYWZrYSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2tpYmFuYSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2t1YmVybmV0ZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODUgZnJvbSAnLi9hc3NldHMvbG9nb19sb2dnaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg2IGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODcgZnJvbSAnLi9hc3NldHMvbG9nb19tYXBzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg4IGZyb20gJy4vYXNzZXRzL2xvZ29fbWVtY2FjaGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg5IGZyb20gJy4vYXNzZXRzL2xvZ29fbWV0cmljcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MCBmcm9tICcuL2Fzc2V0cy9sb2dvX21vbmdvZGInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTEgZnJvbSAnLi9hc3NldHMvbG9nb19teXNxbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MiBmcm9tICcuL2Fzc2V0cy9sb2dvX25naW54JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkzIGZyb20gJy4vYXNzZXRzL2xvZ29fb2JzZXJ2YWJpbGl0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5NCBmcm9tICcuL2Fzc2V0cy9sb2dvX29zcXVlcnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTUgZnJvbSAnLi9hc3NldHMvbG9nb19waHAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTYgZnJvbSAnLi9hc3NldHMvbG9nb19wb3N0Z3Jlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5NyBmcm9tICcuL2Fzc2V0cy9sb2dvX3Byb21ldGhldXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTggZnJvbSAnLi9hc3NldHMvbG9nb19yYWJiaXRtcSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5OSBmcm9tICcuL2Fzc2V0cy9sb2dvX3JlZGlzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAwIGZyb20gJy4vYXNzZXRzL2xvZ29fc2VjdXJpdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDEgZnJvbSAnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwMiBmcm9tICcuL2Fzc2V0cy9sb2dvX3NrZXRjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwMyBmcm9tICcuL2Fzc2V0cy9sb2dvX3NsYWNrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA0IGZyb20gJy4vYXNzZXRzL2xvZ29fdXB0aW1lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA1IGZyb20gJy4vYXNzZXRzL2xvZ29fdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA2IGZyb20gJy4vYXNzZXRzL2xvZ29fd2ViaG9vayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwNyBmcm9tICcuL2Fzc2V0cy9sb2dvX3dpbmRvd3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDggZnJvbSAnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA5IGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX2ZpbHRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxMCBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9pZic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxMSBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxMiBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9vdXRwdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTMgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfcXVldWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTQgZnJvbSAnLi9hc3NldHMvbWFnbmV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE1IGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoRXhjbGFtYXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTYgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNyBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTggZnJvbSAnLi9hc3NldHMvbWFwX21hcmtlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxOSBmcm9tICcuL2Fzc2V0cy9tZW1vcnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjAgZnJvbSAnLi9hc3NldHMvbWVudSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMSBmcm9tICcuL2Fzc2V0cy9tZW51RG93bic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMiBmcm9tICcuL2Fzc2V0cy9tZW51TGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMyBmcm9tICcuL2Fzc2V0cy9tZW51UmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjQgZnJvbSAnLi9hc3NldHMvbWVudVVwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI1IGZyb20gJy4vYXNzZXRzL21lcmdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI2IGZyb20gJy4vYXNzZXRzL21pbmltaXplJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI3IGZyb20gJy4vYXNzZXRzL21pbnVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI4IGZyb20gJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyOSBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMwIGZyb20gJy4vYXNzZXRzL21pbnVzX2luX3NxdWFyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzMSBmcm9tICcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzIgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzMyBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNCBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzUgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM2IGZyb20gJy4vYXNzZXRzL21sX2RhdGFfdmlzdWFsaXplcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNyBmcm9tICcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzggZnJvbSAnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzkgZnJvbSAnLi9hc3NldHMvbW9iaWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQwIGZyb20gJy4vYXNzZXRzL21vb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDEgZnJvbSAnLi9hc3NldHMvbW92ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0MiBmcm9tICcuL2Fzc2V0cy9uYW1lc3BhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDMgZnJvbSAnLi9hc3NldHMvbmVzdGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ0IGZyb20gJy4vYXNzZXRzL25ld19jaGF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ1IGZyb20gJy4vYXNzZXRzL25vZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDYgZnJvbSAnLi9hc3NldHMvbnVtYmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ3IGZyb20gJy4vYXNzZXRzL29mZmxpbmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDggZnJvbSAnLi9hc3NldHMvb25saW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ5IGZyb20gJy4vYXNzZXRzL3BhY2thZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTAgZnJvbSAnLi9hc3NldHMvcGFnZVNlbGVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MSBmcm9tICcuL2Fzc2V0cy9wYWdlc1NlbGVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MiBmcm9tICcuL2Fzc2V0cy9wYWludCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MyBmcm9tICcuL2Fzc2V0cy9wYWxldHRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODU0IGZyb20gJy4vYXNzZXRzL3BhcGVyX2NsaXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTUgZnJvbSAnLi9hc3NldHMvcGFydGlhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NiBmcm9tICcuL2Fzc2V0cy9wYXVzZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NyBmcm9tICcuL2Fzc2V0cy9wYXltZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODU4IGZyb20gJy4vYXNzZXRzL3BlbmNpbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1OSBmcm9tICcuL2Fzc2V0cy9wZXJjZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYwIGZyb20gJy4vYXNzZXRzL3Bpbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2MSBmcm9tICcuL2Fzc2V0cy9waW5fZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYyIGZyb20gJy4vYXNzZXRzL3BpcGVCcmVha3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjMgZnJvbSAnLi9hc3NldHMvcGlwZU5vQnJlYWtzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY0IGZyb20gJy4vYXNzZXRzL3Bpdm90JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY1IGZyb20gJy4vYXNzZXRzL3BsYXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjYgZnJvbSAnLi9hc3NldHMvcGxheUZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2NyBmcm9tICcuL2Fzc2V0cy9wbHVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY4IGZyb20gJy4vYXNzZXRzL3BsdXNfaW5fY2lyY2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY5IGZyb20gJy4vYXNzZXRzL3BsdXNfaW5fY2lyY2xlX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MCBmcm9tICcuL2Fzc2V0cy9wbHVzX2luX3NxdWFyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MSBmcm9tICcuL2Fzc2V0cy9wb3BvdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzIgZnJvbSAnLi9hc3NldHMvcHVzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MyBmcm9tICcuL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzQgZnJvbSAnLi9hc3NldHMvcXVvdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzUgZnJvbSAnLi9hc3NldHMvcmVmcmVzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3NiBmcm9tICcuL2Fzc2V0cy9yZXBvcnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3NyBmcm9tICcuL2Fzc2V0cy9yZXR1cm5fa2V5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc4IGZyb20gJy4vYXNzZXRzL3NhdmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzkgZnJvbSAnLi9hc3NldHMvc2NhbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODAgZnJvbSAnLi9hc3NldHMvc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODgxIGZyb20gJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODgyIGZyb20gJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODMgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxSZXNvbHZlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4NCBmcm9tICcuL2Fzc2V0cy9zZXNzaW9uVmlld2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg1IGZyb20gJy4vYXNzZXRzL3NoYXJkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg2IGZyb20gJy4vYXNzZXRzL3NoYXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg3IGZyb20gJy4vYXNzZXRzL3NpbmdsZV9tZXRyaWNfdmlld2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg4IGZyb20gJy4vYXNzZXRzL3Nub3dmbGFrZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4OSBmcm9tICcuL2Fzc2V0cy9zb3J0QXNjZW5kaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkwIGZyb20gJy4vYXNzZXRzL3NvcnREZXNjZW5kaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkxIGZyb20gJy4vYXNzZXRzL3NvcnRMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkyIGZyb20gJy4vYXNzZXRzL3NvcnRSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MyBmcm9tICcuL2Fzc2V0cy9zb3J0X2Rvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTQgZnJvbSAnLi9hc3NldHMvc29ydF91cCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5NSBmcm9tICcuL2Fzc2V0cy9zb3J0YWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5NiBmcm9tICcuL2Fzc2V0cy9zcGFjZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTcgZnJvbSAnLi9hc3NldHMvc3BhcmtsZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTggZnJvbSAnLi9hc3NldHMvc3RhclBsdXNFbXB0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5OSBmcm9tICcuL2Fzc2V0cy9zdGFyUGx1c0ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMCBmcm9tICcuL2Fzc2V0cy9zdGFyX2VtcHR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAxIGZyb20gJy4vYXNzZXRzL3N0YXJfZW1wdHlfc3BhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDIgZnJvbSAnLi9hc3NldHMvc3Rhcl9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDMgZnJvbSAnLi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDQgZnJvbSAnLi9hc3NldHMvc3Rhcl9taW51c19lbXB0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwNSBmcm9tICcuL2Fzc2V0cy9zdGFyX21pbnVzX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwNiBmcm9tICcuL2Fzc2V0cy9zdGF0cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwNyBmcm9tICcuL2Fzc2V0cy9zdG9wJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTA4IGZyb20gJy4vYXNzZXRzL3N0b3BfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTA5IGZyb20gJy4vYXNzZXRzL3N0b3Bfc2xhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MTAgZnJvbSAnLi9hc3NldHMvc3RvcmFnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxMSBmcm9tICcuL2Fzc2V0cy9zdHJpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MTIgZnJvbSAnLi9hc3NldHMvc3VibW9kdWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTEzIGZyb20gJy4vYXNzZXRzL3N1bic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxNCBmcm9tICcuL2Fzc2V0cy9zd2F0Y2hfaW5wdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MTUgZnJvbSAnLi9hc3NldHMvc3ltbGluayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxNiBmcm9tICcuL2Fzc2V0cy90YWJsZU9mQ29udGVudHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MTcgZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9jb21wYWN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTE4IGZyb20gJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MTkgZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9ub3JtYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MjAgZnJvbSAnLi9hc3NldHMvdGFnJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTIxIGZyb20gJy4vYXNzZXRzL3RlYXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MjIgZnJvbSAnLi9hc3NldHMvdGVtcGVyYXR1cmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MjMgZnJvbSAnLi9hc3NldHMvdGltZVJlZnJlc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MjQgZnJvbSAnLi9hc3NldHMvdGltZWxpbmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MjUgZnJvbSAnLi9hc3NldHMvdGltZWxpbmVXaXRoQXJyb3cnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MjYgZnJvbSAnLi9hc3NldHMvdGltZXNsaWRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyNyBmcm9tICcuL2Fzc2V0cy90b2tlbkFsaWFzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTI4IGZyb20gJy4vYXNzZXRzL3Rva2VuQW5ub3RhdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyOSBmcm9tICcuL2Fzc2V0cy90b2tlbkFycmF5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTMwIGZyb20gJy4vYXNzZXRzL3Rva2VuQmluYXJ5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTMxIGZyb20gJy4vYXNzZXRzL3Rva2VuQm9vbGVhbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkzMiBmcm9tICcuL2Fzc2V0cy90b2tlbkNsYXNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTMzIGZyb20gJy4vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkzNCBmcm9tICcuL2Fzc2V0cy90b2tlbkNvbnN0YW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTM1IGZyb20gJy4vYXNzZXRzL3Rva2VuRGF0ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkzNiBmcm9tICcuL2Fzc2V0cy90b2tlbkRpbWVuc2lvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkzNyBmcm9tICcuL2Fzc2V0cy90b2tlbkVsZW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzggZnJvbSAnLi9hc3NldHMvdG9rZW5FbnVtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTM5IGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0MCBmcm9tICcuL2Fzc2V0cy90b2tlbkV2ZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQxIGZyb20gJy4vYXNzZXRzL3Rva2VuRXhjZXB0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQyIGZyb20gJy4vYXNzZXRzL3Rva2VuRmllbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NDMgZnJvbSAnLi9hc3NldHMvdG9rZW5GaWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQ0IGZyb20gJy4vYXNzZXRzL3Rva2VuRmxhdHRlbmVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQ1IGZyb20gJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NDYgZnJvbSAnLi9hc3NldHMvdG9rZW5HZW8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NDcgZnJvbSAnLi9hc3NldHMvdG9rZW5IaXN0b2dyYW0nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NDggZnJvbSAnLi9hc3NldHMvdG9rZW5JUCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0OSBmcm9tICcuL2Fzc2V0cy90b2tlbkludGVyZmFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk1MCBmcm9tICcuL2Fzc2V0cy90b2tlbkpvaW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTEgZnJvbSAnLi9hc3NldHMvdG9rZW5LZXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTIgZnJvbSAnLi9hc3NldHMvdG9rZW5LZXl3b3JkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTUzIGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0aG9kJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTU0IGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk1NSBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0dhdWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTU2IGZyb20gJy4vYXNzZXRzL3Rva2VuTW9kdWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTU3IGZyb20gJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTU4IGZyb20gJy4vYXNzZXRzL3Rva2VuTmVzdGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTU5IGZyb20gJy4vYXNzZXRzL3Rva2VuTnVsbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2MCBmcm9tICcuL2Fzc2V0cy90b2tlbk51bWJlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2MSBmcm9tICcuL2Fzc2V0cy90b2tlbk9iamVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2MiBmcm9tICcuL2Fzc2V0cy90b2tlbk9wZXJhdG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTYzIGZyb20gJy4vYXNzZXRzL3Rva2VuUGFja2FnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2NCBmcm9tICcuL2Fzc2V0cy90b2tlblBhcmFtZXRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2NSBmcm9tICcuL2Fzc2V0cy90b2tlblBlcmNvbGF0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NjYgZnJvbSAnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2NyBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTY4IGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NjkgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzAgZnJvbSAnLi9hc3NldHMvdG9rZW5SZXBvJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTcxIGZyb20gJy4vYXNzZXRzL3Rva2VuU2VhcmNoVHlwZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk3MiBmcm9tICcuL2Fzc2V0cy90b2tlblNlbWFudGljVGV4dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk3MyBmcm9tICcuL2Fzc2V0cy90b2tlblNoYXBlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTc0IGZyb20gJy4vYXNzZXRzL3Rva2VuU3RyaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTc1IGZyb20gJy4vYXNzZXRzL3Rva2VuU3RydWN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTc2IGZyb20gJy4vYXNzZXRzL3Rva2VuU3ltYm9sJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTc3IGZyb20gJy4vYXNzZXRzL3Rva2VuVGFnJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTc4IGZyb20gJy4vYXNzZXRzL3Rva2VuVGV4dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk3OSBmcm9tICcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5ODAgZnJvbSAnLi9hc3NldHMvdG9rZW5WYXJpYWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4MSBmcm9tICcuL2Fzc2V0cy90b2tlblZlY3RvckRlbnNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTgyIGZyb20gJy4vYXNzZXRzL3Rva2VuVmVjdG9yU3BhcnNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTgzIGZyb20gJy4vYXNzZXRzL3RyYWluaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTg0IGZyb20gJy4vYXNzZXRzL3RyYW5zaXRpb25MZWZ0SW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5ODUgZnJvbSAnLi9hc3NldHMvdHJhbnNpdGlvbkxlZnRPdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5ODYgZnJvbSAnLi9hc3NldHMvdHJhbnNpdGlvblRvcEluJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTg3IGZyb20gJy4vYXNzZXRzL3RyYW5zaXRpb25Ub3BPdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5ODggZnJvbSAnLi9hc3NldHMvdHJhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5ODkgZnJvbSAnLi9hc3NldHMvdW5mb2xkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTkwIGZyb20gJy4vYXNzZXRzL3VubGluayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5MSBmcm9tICcuL2Fzc2V0cy91c2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTkyIGZyb20gJy4vYXNzZXRzL3VzZXJBdmF0YXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTMgZnJvbSAnLi9hc3NldHMvdXNlcnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTQgZnJvbSAnLi9hc3NldHMvdmVjdG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTk1IGZyb20gJy4vYXNzZXRzL3ZpZGVvUGxheWVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTk2IGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTk3IGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhX3N0YWNrZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTggZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTk5IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAwMCBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAwMSBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAyIGZyb20gJy4vYXNzZXRzL3Zpc19nYXVnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDMgZnJvbSAnLi9hc3NldHMvdmlzX2dvYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA0IGZyb20gJy4vYXNzZXRzL3Zpc19saW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAwNSBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA2IGZyb20gJy4vYXNzZXRzL3Zpc19tYXBfcmVnaW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAwNyBmcm9tICcuL2Fzc2V0cy92aXNfbWV0cmljJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAwOCBmcm9tICcuL2Fzc2V0cy92aXNfcGllJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAwOSBmcm9tICcuL2Fzc2V0cy92aXNfdGFibGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDEwIGZyb20gJy4vYXNzZXRzL3Zpc190YWdfY2xvdWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDExIGZyb20gJy4vYXNzZXRzL3Zpc190ZXh0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAxMiBmcm9tICcuL2Fzc2V0cy92aXNfdGltZWxpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDEzIGZyb20gJy4vYXNzZXRzL3Zpc192ZWdhJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAxNCBmcm9tICcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE1IGZyb20gJy4vYXNzZXRzL3dhcm5pbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE2IGZyb20gJy4vYXNzZXRzL3dhcm5pbmdGaWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE3IGZyb20gJy4vYXNzZXRzL3dvcmRXcmFwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAxOCBmcm9tICcuL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAxOSBmcm9tICcuL2Fzc2V0cy93cmVuY2gnO1xuY29uc3QgX0R5bmFtaWNJbXBvcnRNb2R1bGVNYXAgPSB7Jy4vYXNzZXRzL2FjY2Vzc2liaWxpdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMCwnLi9hc3NldHMvYWdncmVnYXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEsJy4vYXNzZXRzL2FsZXJ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIsJy4vYXNzZXRzL2FuYWx5emVFdmVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzLCcuL2Fzc2V0cy9hbmFseXplX2V2ZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQsJy4vYXNzZXRzL2Fubm90YXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNSwnLi9hc3NldHMvYW5vbWFseV9jaGFydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2LCcuL2Fzc2V0cy9hbm9tYWx5X3N3aW1fbGFuZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3LCcuL2Fzc2V0cy9hcG1fdHJhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOCwnLi9hc3NldHMvYXBwX2FkZF9kYXRhLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTksJy4vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMCwnLi9hc3NldHMvYXBwX2FnZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExLCcuL2Fzc2V0cy9hcHBfYXBtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyLCcuL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMywnLi9hc3NldHMvYXBwX2F1ZGl0YmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNCwnLi9hc3NldHMvYXBwX2NhbnZhcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNSwnLi9hc3NldHMvYXBwX2Nhc2VzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2LCcuL2Fzc2V0cy9hcHBfY29kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNywnLi9hc3NldHMvYXBwX2NvbnNvbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgsJy4vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5LCcuL2Fzc2V0cy9hcHBfZGFzaGJvYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwLCcuL2Fzc2V0cy9hcHBfZGV2dG9vbHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjEsJy4vYXNzZXRzL2FwcF9kaXNjb3Zlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMiwnLi9hc3NldHMvYXBwX2Vtcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMywnLi9hc3NldHMvYXBwX2ZpbGViZWF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0LCcuL2Fzc2V0cy9hcHBfZmxlZXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUsJy4vYXNzZXRzL2FwcF9naXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjYsJy4vYXNzZXRzL2FwcF9ncmFwaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNywnLi9hc3NldHMvYXBwX2dyb2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgsJy4vYXNzZXRzL2FwcF9oZWFydGJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjksJy4vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwLCcuL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMSwnLi9hc3NldHMvYXBwX2luZGV4X3JvbGx1cC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMiwnLi9hc3NldHMvYXBwX2xlbnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzMsJy4vYXNzZXRzL2FwcF9sb2dzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0LCcuL2Fzc2V0cy9hcHBfbWFuYWdlbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNSwnLi9hc3NldHMvYXBwX21ldHJpY2JlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzYsJy4vYXNzZXRzL2FwcF9tZXRyaWNzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3LCcuL2Fzc2V0cy9hcHBfbWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzgsJy4vYXNzZXRzL2FwcF9tb25pdG9yaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5LCcuL2Fzc2V0cy9hcHBfbm90ZWJvb2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAsJy4vYXNzZXRzL2FwcF9wYWNrZXRiZWF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxLCcuL2Fzc2V0cy9hcHBfcGlwZWxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIsJy4vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDMsJy4vYXNzZXRzL2FwcF9yZXBvcnRpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQsJy4vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1LCcuL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2LCcuL2Fzc2V0cy9hcHBfc2VjdXJpdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDcsJy4vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgsJy4vYXNzZXRzL2FwcF9zcGFjZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDksJy4vYXNzZXRzL2FwcF9zcWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAsJy4vYXNzZXRzL2FwcF90aW1lbGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MSwnLi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyLCcuL2Fzc2V0cy9hcHBfdXB0aW1lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzLCcuL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQsJy4vYXNzZXRzL2FwcF92aXN1YWxpemUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTUsJy4vYXNzZXRzL2FwcF92dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYsJy4vYXNzZXRzL2FwcF93YXRjaGVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3LCcuL2Fzc2V0cy9hcHBfd29ya3BsYWNlX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OCwnLi9hc3NldHMvYXBwcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OSwnLi9hc3NldHMvYXJyb3dFbmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAsJy4vYXNzZXRzL2Fycm93U3RhcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEsJy4vYXNzZXRzL2Fycm93X2Rvd24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIsJy4vYXNzZXRzL2Fycm93X2xlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjMsJy4vYXNzZXRzL2Fycm93X3JpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0LCcuL2Fzc2V0cy9hcnJvd191cC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NSwnLi9hc3NldHMvYXJ0aWNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NiwnLi9hc3NldHMvYXN0ZXJpc2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjcsJy4vYXNzZXRzL2F0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4LCcuL2Fzc2V0cy9iZWFrZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjksJy4vYXNzZXRzL2JlbGwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAsJy4vYXNzZXRzL2JlbGxTbGFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MSwnLi9hc3NldHMvYmV0YS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MiwnLi9hc3NldHMvYm9sdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MywnLi9hc3NldHMvYm94ZXNfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NCwnLi9hc3NldHMvYm94ZXNfdmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzUsJy4vYXNzZXRzL2JyYW5jaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NiwnLi9hc3NldHMvYnJhbmNoVXNlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NywnLi9hc3NldHMvYnJvb20uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgsJy4vYXNzZXRzL2JydXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5LCcuL2Fzc2V0cy9idWcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAsJy4vYXNzZXRzL2J1bGxzZXllLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxLCcuL2Fzc2V0cy9jYWxlbmRhci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MiwnLi9hc3NldHMvY2hhbmdlX3BvaW50X2RldGVjdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MywnLi9hc3NldHMvY2hlY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQsJy4vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUsJy4vYXNzZXRzL2NoZWVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2LCcuL2Fzc2V0cy9jbGlja0xlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcsJy4vYXNzZXRzL2NsaWNrUmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgsJy4vYXNzZXRzL2Nsb2NrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5LCcuL2Fzc2V0cy9jbG9ja0NvdW50ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAsJy4vYXNzZXRzL2Nsb3VkRHJpenpsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MSwnLi9hc3NldHMvY2xvdWRTdG9ybXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTIsJy4vYXNzZXRzL2Nsb3VkU3VubnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTMsJy4vYXNzZXRzL2NsdXN0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQsJy4vYXNzZXRzL2NvbG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk1LCcuL2Fzc2V0cy9jb21wdXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2LCcuL2Fzc2V0cy9jb25zb2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk3LCcuL2Fzc2V0cy9jb250YWluZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTgsJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OSwnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwLCcuL2Fzc2V0cy9jb250aW51aXR5QmVsb3cuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxLCcuL2Fzc2V0cy9jb250aW51aXR5V2l0aGluLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMiwnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDMsJy4vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwNCwnLi9hc3NldHMvY29weS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDUsJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwNiwnLi9hc3NldHMvY3Jvc3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA3LCcuL2Fzc2V0cy9jcm9zc0luQ2lyY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwOCwnLi9hc3NldHMvY3Jvc3NfaW5fY2lyY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwOSwnLi9hc3NldHMvY3Jvc3NoYWlycy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTAsJy4vYXNzZXRzL2N1cnJlbmN5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExMSwnLi9hc3NldHMvY3V0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExMiwnLi9hc3NldHMvZGF0YWJhc2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEzLCcuL2Fzc2V0cy9kZXNrdG9wLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExNCwnLi9hc3NldHMvZGlmZi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTUsJy4vYXNzZXRzL2Rpc2N1c3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE2LCcuL2Fzc2V0cy9kb2N1bWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTcsJy4vYXNzZXRzL2RvY3VtZW50RWRpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTgsJy4vYXNzZXRzL2RvY3VtZW50YXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE5LCcuL2Fzc2V0cy9kb2N1bWVudHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIwLCcuL2Fzc2V0cy9kb3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIxLCcuL2Fzc2V0cy9kb3RJbkNpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjIsJy4vYXNzZXRzL2RvdWJsZUFycm93TGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjMsJy4vYXNzZXRzL2RvdWJsZUFycm93UmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI0LCcuL2Fzc2V0cy9kb3dubG9hZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjUsJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyNiwnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyNywnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyOCwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQ2VudGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyOSwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzAsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzEsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblJpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzMiwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduVG9wLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzMywnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzNCwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzUsJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wTGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzYsJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM3LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fY2VudGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzOCwnLi9hc3NldHMvZWRpdG9yX2FsaWduX2xlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM5LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQwLCcuL2Fzc2V0cy9lZGl0b3JfYm9sZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDEsJy4vYXNzZXRzL2VkaXRvcl9jaGVja2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQyLCcuL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDMsJy4vYXNzZXRzL2VkaXRvcl9jb21tZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0NCwnLi9hc3NldHMvZWRpdG9yX2hlYWRpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ1LCcuL2Fzc2V0cy9lZGl0b3JfaXRhbGljLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0NiwnLi9hc3NldHMvZWRpdG9yX2xpbmsuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ3LCcuL2Fzc2V0cy9lZGl0b3Jfb3JkZXJlZF9saXN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0OCwnLi9hc3NldHMvZWRpdG9yX3JlZG8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ5LCcuL2Fzc2V0cy9lZGl0b3Jfc3RyaWtlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MCwnLi9hc3NldHMvZWRpdG9yX3RhYmxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MSwnLi9hc3NldHMvZWRpdG9yX3VuZGVybGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTIsJy4vYXNzZXRzL2VkaXRvcl91bmRvLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MywnLi9hc3NldHMvZWRpdG9yX3Vub3JkZXJlZF9saXN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1NCwnLi9hc3NldHMvZW1haWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU1LCcuL2Fzc2V0cy9lbXB0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTYsJy4vYXNzZXRzL2VuZHBvaW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1NywnLi9hc3NldHMvZXFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1OCwnLi9hc3NldHMvZXJhc2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1OSwnLi9hc3NldHMvZXJyb3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYwLCcuL2Fzc2V0cy9lcnJvckZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjEsJy4vYXNzZXRzL2VzcWxWaXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYyLCcuL2Fzc2V0cy9leGl0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2MywnLi9hc3NldHMvZXhwYW5kLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NCwnLi9hc3NldHMvZXhwYW5kTWluaS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjUsJy4vYXNzZXRzL2V4cG9ydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjYsJy4vYXNzZXRzL2V5ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjcsJy4vYXNzZXRzL2V5ZV9jbG9zZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY4LCcuL2Fzc2V0cy9mYWNlX2hhcHB5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2OSwnLi9hc3NldHMvZmFjZV9uZXV0cmFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3MCwnLi9hc3NldHMvZmFjZV9zYWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcxLCcuL2Fzc2V0cy9maWVsZF9zdGF0aXN0aWNzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3MiwnLi9hc3NldHMvZmlsdGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3MywnLi9hc3NldHMvZmlsdGVyRXhjbHVkZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzQsJy4vYXNzZXRzL2ZpbHRlcklnbm9yZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzUsJy4vYXNzZXRzL2ZpbHRlckluQ2lyY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3NiwnLi9hc3NldHMvZmlsdGVySW5jbHVkZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzcsJy4vYXNzZXRzL2ZsYWcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc4LCcuL2Fzc2V0cy9mb2xkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3OSwnLi9hc3NldHMvZm9sZGVyX2NoZWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4MCwnLi9hc3NldHMvZm9sZGVyX2Nsb3NlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODEsJy4vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODIsJy4vYXNzZXRzL2ZvbGRlcl9vcGVuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4MywnLi9hc3NldHMvZnJhbWVOZXh0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4NCwnLi9hc3NldHMvZnJhbWVQcmV2aW91cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODUsJy4vYXNzZXRzL2Z1bGxTY3JlZW5FeGl0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4NiwnLi9hc3NldHMvZnVsbF9zY3JlZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg3LCcuL2Fzc2V0cy9mdW5jdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODgsJy4vYXNzZXRzL2dlYXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg5LCcuL2Fzc2V0cy9nbGFzc2VzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MCwnLi9hc3NldHMvZ2xvYmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkxLCcuL2Fzc2V0cy9ncmFiLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MiwnLi9hc3NldHMvZ3JhYk9tbmlkaXJlY3Rpb25hbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTMsJy4vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTQsJy4vYXNzZXRzL2dyYWRpZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5NSwnLi9hc3NldHMvZ3JpZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTYsJy4vYXNzZXRzL2hlYXJ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5NywnLi9hc3NldHMvaGVhdG1hcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTgsJy4vYXNzZXRzL2hlbHAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk5LCcuL2Fzc2V0cy9ob21lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwMCwnLi9hc3NldHMvaUluQ2lyY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwMSwnLi9hc3NldHMvaW1hZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAyLCcuL2Fzc2V0cy9pbXBvcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAzLCcuL2Fzc2V0cy9pbmRleC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDQsJy4vYXNzZXRzL2luZGV4VGVtcG9yYXJ5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwNSwnLi9hc3NldHMvaW5kZXhfY2xvc2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA2LCcuL2Fzc2V0cy9pbmRleF9lZGl0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwNywnLi9hc3NldHMvaW5kZXhfZmx1c2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA4LCcuL2Fzc2V0cy9pbmRleF9tYXBwaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwOSwnLi9hc3NldHMvaW5kZXhfb3Blbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTAsJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjExLCcuL2Fzc2V0cy9pbmRleF9zZXR0aW5ncy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTIsJy4vYXNzZXRzL2luZmluaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMywnLi9hc3NldHMvaW5wdXRPdXRwdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE0LCcuL2Fzc2V0cy9pbnNwZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxNSwnLi9hc3NldHMvaW52ZXJ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxNiwnLi9hc3NldHMvaXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE3LCcuL2Fzc2V0cy9pc3N1ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTgsJy4vYXNzZXRzL2tleS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTksJy4vYXNzZXRzL2tleWJvYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyMCwnLi9hc3NldHMva3FsX2ZpZWxkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyMSwnLi9hc3NldHMva3FsX2Z1bmN0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyMiwnLi9hc3NldHMva3FsX29wZXJhbmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIzLCcuL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjI0LCcuL2Fzc2V0cy9rcWxfdmFsdWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjI1LCcuL2Fzc2V0cy9rdWJlcm5ldGVzTm9kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjYsJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjI3LCcuL2Fzc2V0cy9sYXVuY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjI4LCcuL2Fzc2V0cy9sYXllcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjI5LCcuL2Fzc2V0cy9sZXR0ZXJpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjMwLCcuL2Fzc2V0cy9saW5lRGFzaGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMSwnLi9hc3NldHMvbGluZURvdHRlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzIsJy4vYXNzZXRzL2xpbmVTb2xpZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzMsJy4vYXNzZXRzL2xpbmsuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM0LCcuL2Fzc2V0cy9saXN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNSwnLi9hc3NldHMvbGlzdF9hZGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM2LCcuL2Fzc2V0cy9sb2NrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNywnLi9hc3NldHMvbG9ja09wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM4LCcuL2Fzc2V0cy9sb2dfcGF0dGVybl9hbmFseXNpcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzksJy4vYXNzZXRzL2xvZ19yYXRlX2FuYWx5c2lzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0MCwnLi9hc3NldHMvbG9nb19hZXJvc3Bpa2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQxLCcuL2Fzc2V0cy9sb2dvX2FwYWNoZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDIsJy4vYXNzZXRzL2xvZ29fYXBwX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDMsJy4vYXNzZXRzL2xvZ29fYXdzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0NCwnLi9hc3NldHMvbG9nb19hd3NfbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDUsJy4vYXNzZXRzL2xvZ29fYXp1cmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ2LCcuL2Fzc2V0cy9sb2dvX2F6dXJlX21vbm8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ3LCcuL2Fzc2V0cy9sb2dvX2JlYXRzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0OCwnLi9hc3NldHMvbG9nb19idXNpbmVzc19hbmFseXRpY3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ5LCcuL2Fzc2V0cy9sb2dvX2NlcGguanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUwLCcuL2Fzc2V0cy9sb2dvX2Nsb3VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MSwnLi9hc3NldHMvbG9nb19jbG91ZF9lY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUyLCcuL2Fzc2V0cy9sb2dvX2NvZGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUzLCcuL2Fzc2V0cy9sb2dvX2NvZGVzYW5kYm94LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NCwnLi9hc3NldHMvbG9nb19jb3VjaGJhc2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU1LCcuL2Fzc2V0cy9sb2dvX2RvY2tlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTYsJy4vYXNzZXRzL2xvZ29fZHJvcHdpemFyZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTcsJy4vYXNzZXRzL2xvZ29fZWxhc3RpYy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTgsJy4vYXNzZXRzL2xvZ29fZWxhc3RpY19zdGFjay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTksJy4vYXNzZXRzL2xvZ29fZWxhc3RpY3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjAsJy4vYXNzZXRzL2xvZ29fZW50ZXJwcmlzZV9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjYxLCcuL2Fzc2V0cy9sb2dvX2V0Y2QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjYyLCcuL2Fzc2V0cy9sb2dvX2djcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjMsJy4vYXNzZXRzL2xvZ29fZ2NwX21vbm8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY0LCcuL2Fzc2V0cy9sb2dvX2dpdGh1Yi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjUsJy4vYXNzZXRzL2xvZ29fZ21haWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY2LCcuL2Fzc2V0cy9sb2dvX2dvbGFuZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjcsJy4vYXNzZXRzL2xvZ29fZ29vZ2xlX2cuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY4LCcuL2Fzc2V0cy9sb2dvX2hhcHJveHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY5LCcuL2Fzc2V0cy9sb2dvX2libS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzAsJy4vYXNzZXRzL2xvZ29faWJtX21vbm8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjcxLCcuL2Fzc2V0cy9sb2dvX2thZmthLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3MiwnLi9hc3NldHMvbG9nb19raWJhbmEuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjczLCcuL2Fzc2V0cy9sb2dvX2t1YmVybmV0ZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc0LCcuL2Fzc2V0cy9sb2dvX2xvZ2dpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc1LCcuL2Fzc2V0cy9sb2dvX2xvZ3N0YXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NiwnLi9hc3NldHMvbG9nb19tYXBzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NywnLi9hc3NldHMvbG9nb19tZW1jYWNoZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc4LCcuL2Fzc2V0cy9sb2dvX21ldHJpY3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc5LCcuL2Fzc2V0cy9sb2dvX21vbmdvZGIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgwLCcuL2Fzc2V0cy9sb2dvX215c3FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4MSwnLi9hc3NldHMvbG9nb19uZ2lueC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODIsJy4vYXNzZXRzL2xvZ29fb2JzZXJ2YWJpbGl0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODMsJy4vYXNzZXRzL2xvZ29fb3NxdWVyeS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODQsJy4vYXNzZXRzL2xvZ29fcGhwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NSwnLi9hc3NldHMvbG9nb19wb3N0Z3Jlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODYsJy4vYXNzZXRzL2xvZ29fcHJvbWV0aGV1cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODcsJy4vYXNzZXRzL2xvZ29fcmFiYml0bXEuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg4LCcuL2Fzc2V0cy9sb2dvX3JlZGlzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4OSwnLi9hc3NldHMvbG9nb19zZWN1cml0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTAsJy4vYXNzZXRzL2xvZ29fc2l0ZV9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjkxLCcuL2Fzc2V0cy9sb2dvX3NrZXRjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTIsJy4vYXNzZXRzL2xvZ29fc2xhY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjkzLCcuL2Fzc2V0cy9sb2dvX3VwdGltZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTQsJy4vYXNzZXRzL2xvZ29fdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NSwnLi9hc3NldHMvbG9nb193ZWJob29rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NiwnLi9hc3NldHMvbG9nb193aW5kb3dzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NywnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5OCwnLi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5OSwnLi9hc3NldHMvbG9nc3Rhc2hfaWYuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAwLCcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDEsJy4vYXNzZXRzL2xvZ3N0YXNoX291dHB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDIsJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwMywnLi9hc3NldHMvbWFnbmV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNCwnLi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDUsJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA2LCcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA3LCcuL2Fzc2V0cy9tYXBfbWFya2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwOCwnLi9hc3NldHMvbWVtb3J5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwOSwnLi9hc3NldHMvbWVudS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTAsJy4vYXNzZXRzL21lbnVEb3duLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxMSwnLi9hc3NldHMvbWVudUxlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzEyLCcuL2Fzc2V0cy9tZW51UmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzEzLCcuL2Fzc2V0cy9tZW51VXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE0LCcuL2Fzc2V0cy9tZXJnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTUsJy4vYXNzZXRzL21pbmltaXplLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxNiwnLi9hc3NldHMvbWludXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE3LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE4LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxOSwnLi9hc3NldHMvbWludXNfaW5fc3F1YXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMCwnLi9hc3NldHMvbWxfY2xhc3NpZmljYXRpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMSwnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjIsJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMywnLi9hc3NldHMvbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyNCwnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyNSwnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyNiwnLi9hc3NldHMvbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyNywnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI4LCcuL2Fzc2V0cy9tb2JpbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI5LCcuL2Fzc2V0cy9tb29uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMCwnLi9hc3NldHMvbW92ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzEsJy4vYXNzZXRzL25hbWVzcGFjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzIsJy4vYXNzZXRzL25lc3RlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzMsJy4vYXNzZXRzL25ld19jaGF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzNCwnLi9hc3NldHMvbm9kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzUsJy4vYXNzZXRzL251bWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzYsJy4vYXNzZXRzL29mZmxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM3LCcuL2Fzc2V0cy9vbmxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM4LCcuL2Fzc2V0cy9wYWNrYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzOSwnLi9hc3NldHMvcGFnZVNlbGVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDAsJy4vYXNzZXRzL3BhZ2VzU2VsZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0MSwnLi9hc3NldHMvcGFpbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQyLCcuL2Fzc2V0cy9wYWxldHRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0MywnLi9hc3NldHMvcGFwZXJfY2xpcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDQsJy4vYXNzZXRzL3BhcnRpYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ1LCcuL2Fzc2V0cy9wYXVzZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDYsJy4vYXNzZXRzL3BheW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ3LCcuL2Fzc2V0cy9wZW5jaWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ4LCcuL2Fzc2V0cy9wZXJjZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0OSwnLi9hc3NldHMvcGluLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1MCwnLi9hc3NldHMvcGluX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTEsJy4vYXNzZXRzL3BpcGVCcmVha3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUyLCcuL2Fzc2V0cy9waXBlTm9CcmVha3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUzLCcuL2Fzc2V0cy9waXZvdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTQsJy4vYXNzZXRzL3BsYXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU1LCcuL2Fzc2V0cy9wbGF5RmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NiwnLi9hc3NldHMvcGx1cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTcsJy4vYXNzZXRzL3BsdXNfaW5fY2lyY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1OCwnLi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1OSwnLi9hc3NldHMvcGx1c19pbl9zcXVhcmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzYwLCcuL2Fzc2V0cy9wb3BvdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzYxLCcuL2Fzc2V0cy9wdXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2MiwnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2MywnLi9hc3NldHMvcXVvdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY0LCcuL2Fzc2V0cy9yZWZyZXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2NSwnLi9hc3NldHMvcmVwb3J0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY2LCcuL2Fzc2V0cy9yZXR1cm5fa2V5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2NywnLi9hc3NldHMvc2F2ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjgsJy4vYXNzZXRzL3NjYWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2OSwnLi9hc3NldHMvc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3MCwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcxLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3MiwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxSZXNvbHZlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzMsJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc0LCcuL2Fzc2V0cy9zaGFyZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzUsJy4vYXNzZXRzL3NoYXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3NiwnLi9hc3NldHMvc2luZ2xlX21ldHJpY192aWV3ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc3LCcuL2Fzc2V0cy9zbm93Zmxha2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc4LCcuL2Fzc2V0cy9zb3J0QXNjZW5kaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3OSwnLi9hc3NldHMvc29ydERlc2NlbmRpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzgwLCcuL2Fzc2V0cy9zb3J0TGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODEsJy4vYXNzZXRzL3NvcnRSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODIsJy4vYXNzZXRzL3NvcnRfZG93bi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODMsJy4vYXNzZXRzL3NvcnRfdXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg0LCcuL2Fzc2V0cy9zb3J0YWJsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODUsJy4vYXNzZXRzL3NwYWNlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODYsJy4vYXNzZXRzL3NwYXJrbGVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4NywnLi9hc3NldHMvc3RhclBsdXNFbXB0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODgsJy4vYXNzZXRzL3N0YXJQbHVzRmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4OSwnLi9hc3NldHMvc3Rhcl9lbXB0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTAsJy4vYXNzZXRzL3N0YXJfZW1wdHlfc3BhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzkxLCcuL2Fzc2V0cy9zdGFyX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTIsJy4vYXNzZXRzL3N0YXJfZmlsbGVkX3NwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MywnLi9hc3NldHMvc3Rhcl9taW51c19lbXB0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTQsJy4vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5NSwnLi9hc3NldHMvc3RhdHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk2LCcuL2Fzc2V0cy9zdG9wLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5NywnLi9hc3NldHMvc3RvcF9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk4LCcuL2Fzc2V0cy9zdG9wX3NsYXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5OSwnLi9hc3NldHMvc3RvcmFnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDAsJy4vYXNzZXRzL3N0cmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDEsJy4vYXNzZXRzL3N1Ym1vZHVsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDIsJy4vYXNzZXRzL3N1bi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDMsJy4vYXNzZXRzL3N3YXRjaF9pbnB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDQsJy4vYXNzZXRzL3N5bWxpbmsuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA1LCcuL2Fzc2V0cy90YWJsZU9mQ29udGVudHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA2LCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA3LCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2V4cGFuZGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwOCwnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9ub3JtYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA5LCcuL2Fzc2V0cy90YWcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEwLCcuL2Fzc2V0cy90ZWFyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxMSwnLi9hc3NldHMvdGVtcGVyYXR1cmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEyLCcuL2Fzc2V0cy90aW1lUmVmcmVzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTMsJy4vYXNzZXRzL3RpbWVsaW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNCwnLi9hc3NldHMvdGltZWxpbmVXaXRoQXJyb3cuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE1LCcuL2Fzc2V0cy90aW1lc2xpZGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNiwnLi9hc3NldHMvdG9rZW5BbGlhcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTcsJy4vYXNzZXRzL3Rva2VuQW5ub3RhdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTgsJy4vYXNzZXRzL3Rva2VuQXJyYXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE5LCcuL2Fzc2V0cy90b2tlbkJpbmFyeS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjAsJy4vYXNzZXRzL3Rva2VuQm9vbGVhbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjEsJy4vYXNzZXRzL3Rva2VuQ2xhc3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIyLCcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIzLCcuL2Fzc2V0cy90b2tlbkNvbnN0YW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyNCwnLi9hc3NldHMvdG9rZW5EYXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyNSwnLi9hc3NldHMvdG9rZW5EaW1lbnNpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI2LCcuL2Fzc2V0cy90b2tlbkVsZW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI3LCcuL2Fzc2V0cy90b2tlbkVudW0uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI4LCcuL2Fzc2V0cy90b2tlbkVudW1NZW1iZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI5LCcuL2Fzc2V0cy90b2tlbkV2ZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzMCwnLi9hc3NldHMvdG9rZW5FeGNlcHRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDMxLCcuL2Fzc2V0cy90b2tlbkZpZWxkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzMiwnLi9hc3NldHMvdG9rZW5GaWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzMywnLi9hc3NldHMvdG9rZW5GbGF0dGVuZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM0LCcuL2Fzc2V0cy90b2tlbkZ1bmN0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNSwnLi9hc3NldHMvdG9rZW5HZW8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM2LCcuL2Fzc2V0cy90b2tlbkhpc3RvZ3JhbS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzcsJy4vYXNzZXRzL3Rva2VuSVAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM4LCcuL2Fzc2V0cy90b2tlbkludGVyZmFjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzksJy4vYXNzZXRzL3Rva2VuSm9pbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDAsJy4vYXNzZXRzL3Rva2VuS2V5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MSwnLi9hc3NldHMvdG9rZW5LZXl3b3JkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MiwnLi9hc3NldHMvdG9rZW5NZXRob2QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQzLCcuL2Fzc2V0cy90b2tlbk1ldHJpY0NvdW50ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ0LCcuL2Fzc2V0cy90b2tlbk1ldHJpY0dhdWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NSwnLi9hc3NldHMvdG9rZW5Nb2R1bGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ2LCcuL2Fzc2V0cy90b2tlbk5hbWVzcGFjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDcsJy4vYXNzZXRzL3Rva2VuTmVzdGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0OCwnLi9hc3NldHMvdG9rZW5OdWxsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0OSwnLi9hc3NldHMvdG9rZW5OdW1iZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUwLCcuL2Fzc2V0cy90b2tlbk9iamVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTEsJy4vYXNzZXRzL3Rva2VuT3BlcmF0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUyLCcuL2Fzc2V0cy90b2tlblBhY2thZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUzLCcuL2Fzc2V0cy90b2tlblBhcmFtZXRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTQsJy4vYXNzZXRzL3Rva2VuUGVyY29sYXRvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTUsJy4vYXNzZXRzL3Rva2VuUHJvcGVydHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU2LCcuL2Fzc2V0cy90b2tlblJhbmdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NywnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTgsJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OSwnLi9hc3NldHMvdG9rZW5SZXBvLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MCwnLi9hc3NldHMvdG9rZW5TZWFyY2hUeXBlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MSwnLi9hc3NldHMvdG9rZW5TZW1hbnRpY1RleHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDYyLCcuL2Fzc2V0cy90b2tlblNoYXBlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MywnLi9hc3NldHMvdG9rZW5TdHJpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY0LCcuL2Fzc2V0cy90b2tlblN0cnVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjUsJy4vYXNzZXRzL3Rva2VuU3ltYm9sLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NiwnLi9hc3NldHMvdG9rZW5UYWcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY3LCcuL2Fzc2V0cy90b2tlblRleHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY4LCcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY5LCcuL2Fzc2V0cy90b2tlblZhcmlhYmxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MCwnLi9hc3NldHMvdG9rZW5WZWN0b3JEZW5zZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzEsJy4vYXNzZXRzL3Rva2VuVmVjdG9yU3BhcnNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MiwnLi9hc3NldHMvdHJhaW5pbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDczLCcuL2Fzc2V0cy90cmFuc2l0aW9uTGVmdEluLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NCwnLi9hc3NldHMvdHJhbnNpdGlvbkxlZnRPdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc1LCcuL2Fzc2V0cy90cmFuc2l0aW9uVG9wSW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc2LCcuL2Fzc2V0cy90cmFuc2l0aW9uVG9wT3V0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NywnLi9hc3NldHMvdHJhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc4LCcuL2Fzc2V0cy91bmZvbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc5LCcuL2Fzc2V0cy91bmxpbmsuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgwLCcuL2Fzc2V0cy91c2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MSwnLi9hc3NldHMvdXNlckF2YXRhci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODIsJy4vYXNzZXRzL3VzZXJzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MywnLi9hc3NldHMvdmVjdG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NCwnLi9hc3NldHMvdmlkZW9QbGF5ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg1LCcuL2Fzc2V0cy92aXNfYXJlYS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODYsJy4vYXNzZXRzL3Zpc19hcmVhX3N0YWNrZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg3LCcuL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg4LCcuL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWxfc3RhY2tlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODksJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDkwLCcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDkxLCcuL2Fzc2V0cy92aXNfZ2F1Z2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDkyLCcuL2Fzc2V0cy92aXNfZ29hbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTMsJy4vYXNzZXRzL3Zpc19saW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NCwnLi9hc3NldHMvdmlzX21hcF9jb29yZGluYXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NSwnLi9hc3NldHMvdmlzX21hcF9yZWdpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk2LCcuL2Fzc2V0cy92aXNfbWV0cmljLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NywnLi9hc3NldHMvdmlzX3BpZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTgsJy4vYXNzZXRzL3Zpc190YWJsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTksJy4vYXNzZXRzL3Zpc190YWdfY2xvdWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAwLCcuL2Fzc2V0cy92aXNfdGV4dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDEsJy4vYXNzZXRzL3Zpc190aW1lbGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDIsJy4vYXNzZXRzL3Zpc192ZWdhLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMywnLi9hc3NldHMvdmlzX3Zpc3VhbF9idWlsZGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwNCwnLi9hc3NldHMvd2FybmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDUsJy4vYXNzZXRzL3dhcm5pbmdGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTA2LCcuL2Fzc2V0cy93b3JkV3JhcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDcsJy4vYXNzZXRzL3dvcmRXcmFwRGlzYWJsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTA4LCcuL2Fzc2V0cy93cmVuY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTA5LCcuL2Fzc2V0cy9hY2Nlc3NpYmlsaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxMCwnLi9hc3NldHMvYWdncmVnYXRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxMSwnLi9hc3NldHMvYWxlcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEyLCcuL2Fzc2V0cy9hbmFseXplRXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEzLCcuL2Fzc2V0cy9hbmFseXplX2V2ZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNCwnLi9hc3NldHMvYW5ub3RhdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTUsJy4vYXNzZXRzL2Fub21hbHlfY2hhcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE2LCcuL2Fzc2V0cy9hbm9tYWx5X3N3aW1fbGFuZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTcsJy4vYXNzZXRzL2FwbV90cmFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTgsJy4vYXNzZXRzL2FwcF9hZGRfZGF0YSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTksJy4vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjAsJy4vYXNzZXRzL2FwcF9hZ2VudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjEsJy4vYXNzZXRzL2FwcF9hcG0nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIyLCcuL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjMsJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI0LCcuL2Fzc2V0cy9hcHBfY2FudmFzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyNSwnLi9hc3NldHMvYXBwX2Nhc2VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyNiwnLi9hc3NldHMvYXBwX2NvZGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI3LCcuL2Fzc2V0cy9hcHBfY29uc29sZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjgsJy4vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyOSwnLi9hc3NldHMvYXBwX2Rhc2hib2FyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzAsJy4vYXNzZXRzL2FwcF9kZXZ0b29scyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzEsJy4vYXNzZXRzL2FwcF9kaXNjb3Zlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzIsJy4vYXNzZXRzL2FwcF9lbXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTMzLCcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM0LCcuL2Fzc2V0cy9hcHBfZmxlZXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM1LCcuL2Fzc2V0cy9hcHBfZ2lzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzNiwnLi9hc3NldHMvYXBwX2dyYXBoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzNywnLi9hc3NldHMvYXBwX2dyb2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM4LCcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzOSwnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQwLCcuL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDEsJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQyLCcuL2Fzc2V0cy9hcHBfbGVucyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDMsJy4vYXNzZXRzL2FwcF9sb2dzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0NCwnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ1LCcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDYsJy4vYXNzZXRzL2FwcF9tZXRyaWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0NywnLi9hc3NldHMvYXBwX21sJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0OCwnLi9hc3NldHMvYXBwX21vbml0b3JpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ5LCcuL2Fzc2V0cy9hcHBfbm90ZWJvb2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNTUwLCcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTEsJy4vYXNzZXRzL2FwcF9waXBlbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTIsJy4vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTUzLCcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1NCwnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU1LCcuL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1NiwnLi9hc3NldHMvYXBwX3NlY3VyaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1NywnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTgsJy4vYXNzZXRzL2FwcF9zcGFjZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU5LCcuL2Fzc2V0cy9hcHBfc3FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MCwnLi9hc3NldHMvYXBwX3RpbWVsaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MSwnLi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MiwnLi9hc3NldHMvYXBwX3VwdGltZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjMsJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjQsJy4vYXNzZXRzL2FwcF92aXN1YWxpemUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY1LCcuL2Fzc2V0cy9hcHBfdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2NiwnLi9hc3NldHMvYXBwX3dhdGNoZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY3LCcuL2Fzc2V0cy9hcHBfd29ya3BsYWNlX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjgsJy4vYXNzZXRzL2FwcHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY5LCcuL2Fzc2V0cy9hcnJvd0VuZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzAsJy4vYXNzZXRzL2Fycm93U3RhcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcxLCcuL2Fzc2V0cy9hcnJvd19kb3duJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3MiwnLi9hc3NldHMvYXJyb3dfbGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzMsJy4vYXNzZXRzL2Fycm93X3JpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3NCwnLi9hc3NldHMvYXJyb3dfdXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc1LCcuL2Fzc2V0cy9hcnRpY2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3NiwnLi9hc3NldHMvYXN0ZXJpc2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc3LCcuL2Fzc2V0cy9hdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzgsJy4vYXNzZXRzL2JlYWtlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzksJy4vYXNzZXRzL2JlbGwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTgwLCcuL2Fzc2V0cy9iZWxsU2xhc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTgxLCcuL2Fzc2V0cy9iZXRhJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MiwnLi9hc3NldHMvYm9sdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODMsJy4vYXNzZXRzL2JveGVzX2hvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg0LCcuL2Fzc2V0cy9ib3hlc192ZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODUsJy4vYXNzZXRzL2JyYW5jaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODYsJy4vYXNzZXRzL2JyYW5jaFVzZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg3LCcuL2Fzc2V0cy9icm9vbSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODgsJy4vYXNzZXRzL2JydXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4OSwnLi9hc3NldHMvYnVnJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5MCwnLi9hc3NldHMvYnVsbHNleWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkxLCcuL2Fzc2V0cy9jYWxlbmRhcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTIsJy4vYXNzZXRzL2NoYW5nZV9wb2ludF9kZXRlY3Rpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkzLCcuL2Fzc2V0cy9jaGVjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTQsJy4vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTk1LCcuL2Fzc2V0cy9jaGVlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTYsJy4vYXNzZXRzL2NsaWNrTGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTcsJy4vYXNzZXRzL2NsaWNrUmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTk4LCcuL2Fzc2V0cy9jbG9jayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTksJy4vYXNzZXRzL2Nsb2NrQ291bnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDAsJy4vYXNzZXRzL2Nsb3VkRHJpenpsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDEsJy4vYXNzZXRzL2Nsb3VkU3Rvcm15JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwMiwnLi9hc3NldHMvY2xvdWRTdW5ueSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDMsJy4vYXNzZXRzL2NsdXN0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA0LCcuL2Fzc2V0cy9jb2xvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDUsJy4vYXNzZXRzL2NvbXB1dGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA2LCcuL2Fzc2V0cy9jb25zb2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNywnLi9hc3NldHMvY29udGFpbmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwOCwnLi9hc3NldHMvY29udGludWl0eUFib3ZlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwOSwnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEwLCcuL2Fzc2V0cy9jb250aW51aXR5QmVsb3cnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjExLCcuL2Fzc2V0cy9jb250aW51aXR5V2l0aGluJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxMiwnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTMsJy4vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxNCwnLi9hc3NldHMvY29weSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTUsJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxNiwnLi9hc3NldHMvY3Jvc3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE3LCcuL2Fzc2V0cy9jcm9zc0luQ2lyY2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxOCwnLi9hc3NldHMvY3Jvc3NfaW5fY2lyY2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxOSwnLi9hc3NldHMvY3Jvc3NoYWlycyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjAsJy4vYXNzZXRzL2N1cnJlbmN5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyMSwnLi9hc3NldHMvY3V0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyMiwnLi9hc3NldHMvZGF0YWJhc2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIzLCcuL2Fzc2V0cy9kZXNrdG9wJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNCwnLi9hc3NldHMvZGlmZic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjUsJy4vYXNzZXRzL2Rpc2N1c3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI2LCcuL2Fzc2V0cy9kb2N1bWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjcsJy4vYXNzZXRzL2RvY3VtZW50RWRpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjgsJy4vYXNzZXRzL2RvY3VtZW50YXRpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI5LCcuL2Fzc2V0cy9kb2N1bWVudHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjMwLCcuL2Fzc2V0cy9kb3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjMxLCcuL2Fzc2V0cy9kb3RJbkNpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzIsJy4vYXNzZXRzL2RvdWJsZUFycm93TGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzMsJy4vYXNzZXRzL2RvdWJsZUFycm93UmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM0LCcuL2Fzc2V0cy9kb3dubG9hZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzUsJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNiwnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNywnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzOCwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQ2VudGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzOSwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDAsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDEsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblJpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0MiwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduVG9wJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0MywnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0NCwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDUsJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wTGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDYsJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ3LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fY2VudGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0OCwnLi9hc3NldHMvZWRpdG9yX2FsaWduX2xlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ5LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUwLCcuL2Fzc2V0cy9lZGl0b3JfYm9sZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTEsJy4vYXNzZXRzL2VkaXRvcl9jaGVja2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUyLCcuL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTMsJy4vYXNzZXRzL2VkaXRvcl9jb21tZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1NCwnLi9hc3NldHMvZWRpdG9yX2hlYWRpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU1LCcuL2Fzc2V0cy9lZGl0b3JfaXRhbGljJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1NiwnLi9hc3NldHMvZWRpdG9yX2xpbmsnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU3LCcuL2Fzc2V0cy9lZGl0b3Jfb3JkZXJlZF9saXN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1OCwnLi9hc3NldHMvZWRpdG9yX3JlZG8nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU5LCcuL2Fzc2V0cy9lZGl0b3Jfc3RyaWtlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MCwnLi9hc3NldHMvZWRpdG9yX3RhYmxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MSwnLi9hc3NldHMvZWRpdG9yX3VuZGVybGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjIsJy4vYXNzZXRzL2VkaXRvcl91bmRvJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MywnLi9hc3NldHMvZWRpdG9yX3Vub3JkZXJlZF9saXN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2NCwnLi9hc3NldHMvZW1haWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY1LCcuL2Fzc2V0cy9lbXB0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjYsJy4vYXNzZXRzL2VuZHBvaW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2NywnLi9hc3NldHMvZXFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2OCwnLi9hc3NldHMvZXJhc2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2OSwnLi9hc3NldHMvZXJyb3InOl9EeW5hbWljSW1wb3J0TW9kdWxlNjcwLCcuL2Fzc2V0cy9lcnJvckZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzEsJy4vYXNzZXRzL2VzcWxWaXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjcyLCcuL2Fzc2V0cy9leGl0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3MywnLi9hc3NldHMvZXhwYW5kJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NCwnLi9hc3NldHMvZXhwYW5kTWluaSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzUsJy4vYXNzZXRzL2V4cG9ydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzYsJy4vYXNzZXRzL2V5ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzcsJy4vYXNzZXRzL2V5ZV9jbG9zZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc4LCcuL2Fzc2V0cy9mYWNlX2hhcHB5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3OSwnLi9hc3NldHMvZmFjZV9uZXV0cmFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MCwnLi9hc3NldHMvZmFjZV9zYWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgxLCcuL2Fzc2V0cy9maWVsZF9zdGF0aXN0aWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MiwnLi9hc3NldHMvZmlsdGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MywnLi9hc3NldHMvZmlsdGVyRXhjbHVkZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODQsJy4vYXNzZXRzL2ZpbHRlcklnbm9yZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODUsJy4vYXNzZXRzL2ZpbHRlckluQ2lyY2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NiwnLi9hc3NldHMvZmlsdGVySW5jbHVkZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODcsJy4vYXNzZXRzL2ZsYWcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjg4LCcuL2Fzc2V0cy9mb2xkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4OSwnLi9hc3NldHMvZm9sZGVyX2NoZWNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5MCwnLi9hc3NldHMvZm9sZGVyX2Nsb3NlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTEsJy4vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTIsJy4vYXNzZXRzL2ZvbGRlcl9vcGVuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5MywnLi9hc3NldHMvZnJhbWVOZXh0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5NCwnLi9hc3NldHMvZnJhbWVQcmV2aW91cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTUsJy4vYXNzZXRzL2Z1bGxTY3JlZW5FeGl0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5NiwnLi9hc3NldHMvZnVsbF9zY3JlZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk3LCcuL2Fzc2V0cy9mdW5jdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTgsJy4vYXNzZXRzL2dlYXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk5LCcuL2Fzc2V0cy9nbGFzc2VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMCwnLi9hc3NldHMvZ2xvYmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAxLCcuL2Fzc2V0cy9ncmFiJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMiwnLi9hc3NldHMvZ3JhYk9tbmlkaXJlY3Rpb25hbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDMsJy4vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDQsJy4vYXNzZXRzL2dyYWRpZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNSwnLi9hc3NldHMvZ3JpZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDYsJy4vYXNzZXRzL2hlYXJ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNywnLi9hc3NldHMvaGVhdG1hcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDgsJy4vYXNzZXRzL2hlbHAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA5LCcuL2Fzc2V0cy9ob21lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMCwnLi9hc3NldHMvaUluQ2lyY2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMSwnLi9hc3NldHMvaW1hZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzEyLCcuL2Fzc2V0cy9pbXBvcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzEzLCcuL2Fzc2V0cy9pbmRleCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTQsJy4vYXNzZXRzL2luZGV4VGVtcG9yYXJ5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNSwnLi9hc3NldHMvaW5kZXhfY2xvc2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE2LCcuL2Fzc2V0cy9pbmRleF9lZGl0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNywnLi9hc3NldHMvaW5kZXhfZmx1c2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE4LCcuL2Fzc2V0cy9pbmRleF9tYXBwaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxOSwnLi9hc3NldHMvaW5kZXhfb3Blbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjAsJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzIxLCcuL2Fzc2V0cy9pbmRleF9zZXR0aW5ncyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjIsJy4vYXNzZXRzL2luZmluaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMywnLi9hc3NldHMvaW5wdXRPdXRwdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI0LCcuL2Fzc2V0cy9pbnNwZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyNSwnLi9hc3NldHMvaW52ZXJ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyNiwnLi9hc3NldHMvaXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI3LCcuL2Fzc2V0cy9pc3N1ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjgsJy4vYXNzZXRzL2tleSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjksJy4vYXNzZXRzL2tleWJvYXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczMCwnLi9hc3NldHMva3FsX2ZpZWxkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczMSwnLi9hc3NldHMva3FsX2Z1bmN0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczMiwnLi9hc3NldHMva3FsX29wZXJhbmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMzLCcuL2Fzc2V0cy9rcWxfc2VsZWN0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM0LCcuL2Fzc2V0cy9rcWxfdmFsdWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM1LCcuL2Fzc2V0cy9rdWJlcm5ldGVzTm9kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzYsJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM3LCcuL2Fzc2V0cy9sYXVuY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM4LCcuL2Fzc2V0cy9sYXllcnMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM5LCcuL2Fzc2V0cy9sZXR0ZXJpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQwLCcuL2Fzc2V0cy9saW5lRGFzaGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MSwnLi9hc3NldHMvbGluZURvdHRlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDIsJy4vYXNzZXRzL2xpbmVTb2xpZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDMsJy4vYXNzZXRzL2xpbmsnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ0LCcuL2Fzc2V0cy9saXN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0NSwnLi9hc3NldHMvbGlzdF9hZGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ2LCcuL2Fzc2V0cy9sb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0NywnLi9hc3NldHMvbG9ja09wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ4LCcuL2Fzc2V0cy9sb2dfcGF0dGVybl9hbmFseXNpcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDksJy4vYXNzZXRzL2xvZ19yYXRlX2FuYWx5c2lzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1MCwnLi9hc3NldHMvbG9nb19hZXJvc3Bpa2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzUxLCcuL2Fzc2V0cy9sb2dvX2FwYWNoZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTIsJy4vYXNzZXRzL2xvZ29fYXBwX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTMsJy4vYXNzZXRzL2xvZ29fYXdzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NCwnLi9hc3NldHMvbG9nb19hd3NfbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTUsJy4vYXNzZXRzL2xvZ29fYXp1cmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU2LCcuL2Fzc2V0cy9sb2dvX2F6dXJlX21vbm8nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU3LCcuL2Fzc2V0cy9sb2dvX2JlYXRzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1OCwnLi9hc3NldHMvbG9nb19idXNpbmVzc19hbmFseXRpY3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU5LCcuL2Fzc2V0cy9sb2dvX2NlcGgnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzYwLCcuL2Fzc2V0cy9sb2dvX2Nsb3VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2MSwnLi9hc3NldHMvbG9nb19jbG91ZF9lY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzYyLCcuL2Fzc2V0cy9sb2dvX2NvZGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzYzLCcuL2Fzc2V0cy9sb2dvX2NvZGVzYW5kYm94JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2NCwnLi9hc3NldHMvbG9nb19jb3VjaGJhc2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY1LCcuL2Fzc2V0cy9sb2dvX2RvY2tlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjYsJy4vYXNzZXRzL2xvZ29fZHJvcHdpemFyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjcsJy4vYXNzZXRzL2xvZ29fZWxhc3RpYyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjgsJy4vYXNzZXRzL2xvZ29fZWxhc3RpY19zdGFjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjksJy4vYXNzZXRzL2xvZ29fZWxhc3RpY3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzAsJy4vYXNzZXRzL2xvZ29fZW50ZXJwcmlzZV9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcxLCcuL2Fzc2V0cy9sb2dvX2V0Y2QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcyLCcuL2Fzc2V0cy9sb2dvX2djcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzMsJy4vYXNzZXRzL2xvZ29fZ2NwX21vbm8nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc0LCcuL2Fzc2V0cy9sb2dvX2dpdGh1Yic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzUsJy4vYXNzZXRzL2xvZ29fZ21haWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc2LCcuL2Fzc2V0cy9sb2dvX2dvbGFuZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzcsJy4vYXNzZXRzL2xvZ29fZ29vZ2xlX2cnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc4LCcuL2Fzc2V0cy9sb2dvX2hhcHJveHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc5LCcuL2Fzc2V0cy9sb2dvX2libSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODAsJy4vYXNzZXRzL2xvZ29faWJtX21vbm8nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgxLCcuL2Fzc2V0cy9sb2dvX2thZmthJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MiwnLi9hc3NldHMvbG9nb19raWJhbmEnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgzLCcuL2Fzc2V0cy9sb2dvX2t1YmVybmV0ZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg0LCcuL2Fzc2V0cy9sb2dvX2xvZ2dpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg1LCcuL2Fzc2V0cy9sb2dvX2xvZ3N0YXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4NiwnLi9hc3NldHMvbG9nb19tYXBzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4NywnLi9hc3NldHMvbG9nb19tZW1jYWNoZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg4LCcuL2Fzc2V0cy9sb2dvX21ldHJpY3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg5LCcuL2Fzc2V0cy9sb2dvX21vbmdvZGInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkwLCcuL2Fzc2V0cy9sb2dvX215c3FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5MSwnLi9hc3NldHMvbG9nb19uZ2lueCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTIsJy4vYXNzZXRzL2xvZ29fb2JzZXJ2YWJpbGl0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTMsJy4vYXNzZXRzL2xvZ29fb3NxdWVyeSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTQsJy4vYXNzZXRzL2xvZ29fcGhwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NSwnLi9hc3NldHMvbG9nb19wb3N0Z3Jlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTYsJy4vYXNzZXRzL2xvZ29fcHJvbWV0aGV1cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTcsJy4vYXNzZXRzL2xvZ29fcmFiYml0bXEnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk4LCcuL2Fzc2V0cy9sb2dvX3JlZGlzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5OSwnLi9hc3NldHMvbG9nb19zZWN1cml0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDAsJy4vYXNzZXRzL2xvZ29fc2l0ZV9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAxLCcuL2Fzc2V0cy9sb2dvX3NrZXRjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDIsJy4vYXNzZXRzL2xvZ29fc2xhY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlODAzLCcuL2Fzc2V0cy9sb2dvX3VwdGltZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDQsJy4vYXNzZXRzL2xvZ29fdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNSwnLi9hc3NldHMvbG9nb193ZWJob29rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNiwnLi9hc3NldHMvbG9nb193aW5kb3dzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNywnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwOCwnLi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwOSwnLi9hc3NldHMvbG9nc3Rhc2hfaWYnOl9EeW5hbWljSW1wb3J0TW9kdWxlODEwLCcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTEsJy4vYXNzZXRzL2xvZ3N0YXNoX291dHB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTIsJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMywnLi9hc3NldHMvbWFnbmV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxNCwnLi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTUsJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODE2LCcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODE3LCcuL2Fzc2V0cy9tYXBfbWFya2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxOCwnLi9hc3NldHMvbWVtb3J5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxOSwnLi9hc3NldHMvbWVudSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjAsJy4vYXNzZXRzL21lbnVEb3duJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyMSwnLi9hc3NldHMvbWVudUxlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODIyLCcuL2Fzc2V0cy9tZW51UmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODIzLCcuL2Fzc2V0cy9tZW51VXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlODI0LCcuL2Fzc2V0cy9tZXJnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjUsJy4vYXNzZXRzL21pbmltaXplJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyNiwnLi9hc3NldHMvbWludXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODI3LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODI4LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyOSwnLi9hc3NldHMvbWludXNfaW5fc3F1YXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMCwnLi9hc3NldHMvbWxfY2xhc3NpZmljYXRpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMSwnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzIsJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMywnLi9hc3NldHMvbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzNCwnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzNSwnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzNiwnLi9hc3NldHMvbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzNywnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlODM4LCcuL2Fzc2V0cy9tb2JpbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODM5LCcuL2Fzc2V0cy9tb29uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MCwnLi9hc3NldHMvbW92ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDEsJy4vYXNzZXRzL25hbWVzcGFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDIsJy4vYXNzZXRzL25lc3RlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDMsJy4vYXNzZXRzL25ld19jaGF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0NCwnLi9hc3NldHMvbm9kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDUsJy4vYXNzZXRzL251bWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDYsJy4vYXNzZXRzL29mZmxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ3LCcuL2Fzc2V0cy9vbmxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ4LCcuL2Fzc2V0cy9wYWNrYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0OSwnLi9hc3NldHMvcGFnZVNlbGVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTAsJy4vYXNzZXRzL3BhZ2VzU2VsZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1MSwnLi9hc3NldHMvcGFpbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUyLCcuL2Fzc2V0cy9wYWxldHRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1MywnLi9hc3NldHMvcGFwZXJfY2xpcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTQsJy4vYXNzZXRzL3BhcnRpYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlODU1LCcuL2Fzc2V0cy9wYXVzZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTYsJy4vYXNzZXRzL3BheW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODU3LCcuL2Fzc2V0cy9wZW5jaWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlODU4LCcuL2Fzc2V0cy9wZXJjZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1OSwnLi9hc3NldHMvcGluJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MCwnLi9hc3NldHMvcGluX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjEsJy4vYXNzZXRzL3BpcGVCcmVha3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlODYyLCcuL2Fzc2V0cy9waXBlTm9CcmVha3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlODYzLCcuL2Fzc2V0cy9waXZvdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjQsJy4vYXNzZXRzL3BsYXknOl9EeW5hbWljSW1wb3J0TW9kdWxlODY1LCcuL2Fzc2V0cy9wbGF5RmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2NiwnLi9hc3NldHMvcGx1cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjcsJy4vYXNzZXRzL3BsdXNfaW5fY2lyY2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2OCwnLi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2OSwnLi9hc3NldHMvcGx1c19pbl9zcXVhcmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcwLCcuL2Fzc2V0cy9wb3BvdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcxLCcuL2Fzc2V0cy9wdXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3MiwnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3MywnLi9hc3NldHMvcXVvdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODc0LCcuL2Fzc2V0cy9yZWZyZXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3NSwnLi9hc3NldHMvcmVwb3J0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODc2LCcuL2Fzc2V0cy9yZXR1cm5fa2V5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3NywnLi9hc3NldHMvc2F2ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzgsJy4vYXNzZXRzL3NjYWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3OSwnLi9hc3NldHMvc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4MCwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgxLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4MiwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxSZXNvbHZlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODMsJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODg0LCcuL2Fzc2V0cy9zaGFyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODUsJy4vYXNzZXRzL3NoYXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NiwnLi9hc3NldHMvc2luZ2xlX21ldHJpY192aWV3ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODg3LCcuL2Fzc2V0cy9zbm93Zmxha2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODg4LCcuL2Fzc2V0cy9zb3J0QXNjZW5kaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4OSwnLi9hc3NldHMvc29ydERlc2NlbmRpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODkwLCcuL2Fzc2V0cy9zb3J0TGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTEsJy4vYXNzZXRzL3NvcnRSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTIsJy4vYXNzZXRzL3NvcnRfZG93bic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTMsJy4vYXNzZXRzL3NvcnRfdXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk0LCcuL2Fzc2V0cy9zb3J0YWJsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTUsJy4vYXNzZXRzL3NwYWNlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTYsJy4vYXNzZXRzL3NwYXJrbGVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NywnLi9hc3NldHMvc3RhclBsdXNFbXB0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTgsJy4vYXNzZXRzL3N0YXJQbHVzRmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5OSwnLi9hc3NldHMvc3Rhcl9lbXB0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDAsJy4vYXNzZXRzL3N0YXJfZW1wdHlfc3BhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAxLCcuL2Fzc2V0cy9zdGFyX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDIsJy4vYXNzZXRzL3N0YXJfZmlsbGVkX3NwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwMywnLi9hc3NldHMvc3Rhcl9taW51c19lbXB0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDQsJy4vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwNSwnLi9hc3NldHMvc3RhdHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA2LCcuL2Fzc2V0cy9zdG9wJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwNywnLi9hc3NldHMvc3RvcF9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA4LCcuL2Fzc2V0cy9zdG9wX3NsYXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwOSwnLi9hc3NldHMvc3RvcmFnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MTAsJy4vYXNzZXRzL3N0cmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MTEsJy4vYXNzZXRzL3N1Ym1vZHVsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MTIsJy4vYXNzZXRzL3N1bic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MTMsJy4vYXNzZXRzL3N3YXRjaF9pbnB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MTQsJy4vYXNzZXRzL3N5bWxpbmsnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTE1LCcuL2Fzc2V0cy90YWJsZU9mQ29udGVudHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTE2LCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTE3LCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2V4cGFuZGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxOCwnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9ub3JtYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTE5LCcuL2Fzc2V0cy90YWcnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTIwLCcuL2Fzc2V0cy90ZWFyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyMSwnLi9hc3NldHMvdGVtcGVyYXR1cmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTIyLCcuL2Fzc2V0cy90aW1lUmVmcmVzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MjMsJy4vYXNzZXRzL3RpbWVsaW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyNCwnLi9hc3NldHMvdGltZWxpbmVXaXRoQXJyb3cnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTI1LCcuL2Fzc2V0cy90aW1lc2xpZGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyNiwnLi9hc3NldHMvdG9rZW5BbGlhcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MjcsJy4vYXNzZXRzL3Rva2VuQW5ub3RhdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MjgsJy4vYXNzZXRzL3Rva2VuQXJyYXknOl9EeW5hbWljSW1wb3J0TW9kdWxlOTI5LCcuL2Fzc2V0cy90b2tlbkJpbmFyeSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzAsJy4vYXNzZXRzL3Rva2VuQm9vbGVhbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzEsJy4vYXNzZXRzL3Rva2VuQ2xhc3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTMyLCcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTMzLCcuL2Fzc2V0cy90b2tlbkNvbnN0YW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzNCwnLi9hc3NldHMvdG9rZW5EYXRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzNSwnLi9hc3NldHMvdG9rZW5EaW1lbnNpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTM2LCcuL2Fzc2V0cy90b2tlbkVsZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTM3LCcuL2Fzc2V0cy90b2tlbkVudW0nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTM4LCcuL2Fzc2V0cy90b2tlbkVudW1NZW1iZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTM5LCcuL2Fzc2V0cy90b2tlbkV2ZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTk0MCwnLi9hc3NldHMvdG9rZW5FeGNlcHRpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQxLCcuL2Fzc2V0cy90b2tlbkZpZWxkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk0MiwnLi9hc3NldHMvdG9rZW5GaWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk0MywnLi9hc3NldHMvdG9rZW5GbGF0dGVuZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQ0LCcuL2Fzc2V0cy90b2tlbkZ1bmN0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk0NSwnLi9hc3NldHMvdG9rZW5HZW8nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQ2LCcuL2Fzc2V0cy90b2tlbkhpc3RvZ3JhbSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NDcsJy4vYXNzZXRzL3Rva2VuSVAnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQ4LCcuL2Fzc2V0cy90b2tlbkludGVyZmFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NDksJy4vYXNzZXRzL3Rva2VuSm9pbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NTAsJy4vYXNzZXRzL3Rva2VuS2V5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTk1MSwnLi9hc3NldHMvdG9rZW5LZXl3b3JkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk1MiwnLi9hc3NldHMvdG9rZW5NZXRob2QnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTUzLCcuL2Fzc2V0cy90b2tlbk1ldHJpY0NvdW50ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTU0LCcuL2Fzc2V0cy90b2tlbk1ldHJpY0dhdWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk1NSwnLi9hc3NldHMvdG9rZW5Nb2R1bGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTU2LCcuL2Fzc2V0cy90b2tlbk5hbWVzcGFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NTcsJy4vYXNzZXRzL3Rva2VuTmVzdGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk1OCwnLi9hc3NldHMvdG9rZW5OdWxsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk1OSwnLi9hc3NldHMvdG9rZW5OdW1iZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTYwLCcuL2Fzc2V0cy90b2tlbk9iamVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NjEsJy4vYXNzZXRzL3Rva2VuT3BlcmF0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlOTYyLCcuL2Fzc2V0cy90b2tlblBhY2thZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTYzLCcuL2Fzc2V0cy90b2tlblBhcmFtZXRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NjQsJy4vYXNzZXRzL3Rva2VuUGVyY29sYXRvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NjUsJy4vYXNzZXRzL3Rva2VuUHJvcGVydHknOl9EeW5hbWljSW1wb3J0TW9kdWxlOTY2LCcuL2Fzc2V0cy90b2tlblJhbmdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2NywnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NjgsJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2OSwnLi9hc3NldHMvdG9rZW5SZXBvJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk3MCwnLi9hc3NldHMvdG9rZW5TZWFyY2hUeXBlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk3MSwnLi9hc3NldHMvdG9rZW5TZW1hbnRpY1RleHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTcyLCcuL2Fzc2V0cy90b2tlblNoYXBlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk3MywnLi9hc3NldHMvdG9rZW5TdHJpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTc0LCcuL2Fzc2V0cy90b2tlblN0cnVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzUsJy4vYXNzZXRzL3Rva2VuU3ltYm9sJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk3NiwnLi9hc3NldHMvdG9rZW5UYWcnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTc3LCcuL2Fzc2V0cy90b2tlblRleHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTc4LCcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTc5LCcuL2Fzc2V0cy90b2tlblZhcmlhYmxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk4MCwnLi9hc3NldHMvdG9rZW5WZWN0b3JEZW5zZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODEsJy4vYXNzZXRzL3Rva2VuVmVjdG9yU3BhcnNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk4MiwnLi9hc3NldHMvdHJhaW5pbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTgzLCcuL2Fzc2V0cy90cmFuc2l0aW9uTGVmdEluJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk4NCwnLi9hc3NldHMvdHJhbnNpdGlvbkxlZnRPdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTg1LCcuL2Fzc2V0cy90cmFuc2l0aW9uVG9wSW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTg2LCcuL2Fzc2V0cy90cmFuc2l0aW9uVG9wT3V0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTk4NywnLi9hc3NldHMvdHJhc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTg4LCcuL2Fzc2V0cy91bmZvbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTg5LCcuL2Fzc2V0cy91bmxpbmsnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTkwLCcuL2Fzc2V0cy91c2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5MSwnLi9hc3NldHMvdXNlckF2YXRhcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OTIsJy4vYXNzZXRzL3VzZXJzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5MywnLi9hc3NldHMvdmVjdG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5NCwnLi9hc3NldHMvdmlkZW9QbGF5ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTk1LCcuL2Fzc2V0cy92aXNfYXJlYSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OTYsJy4vYXNzZXRzL3Zpc19hcmVhX3N0YWNrZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTk3LCcuL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTk4LCcuL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWxfc3RhY2tlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OTksJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwMCwnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDEsJy4vYXNzZXRzL3Zpc19nYXVnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAyLCcuL2Fzc2V0cy92aXNfZ29hbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAzLCcuL2Fzc2V0cy92aXNfbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA0LCcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwNSwnLi9hc3NldHMvdmlzX21hcF9yZWdpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwNiwnLi9hc3NldHMvdmlzX21ldHJpYyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA3LCcuL2Fzc2V0cy92aXNfcGllJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDgsJy4vYXNzZXRzL3Zpc190YWJsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA5LCcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTAsJy4vYXNzZXRzL3Zpc190ZXh0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTEsJy4vYXNzZXRzL3Zpc190aW1lbGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDEyLCcuL2Fzc2V0cy92aXNfdmVnYSc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDEzLCcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxNCwnLi9hc3NldHMvd2FybmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE1LCcuL2Fzc2V0cy93YXJuaW5nRmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTYsJy4vYXNzZXRzL3dvcmRXcmFwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTcsJy4vYXNzZXRzL3dvcmRXcmFwRGlzYWJsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxOCwnLi9hc3NldHMvd3JlbmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTl9O1xuZnVuY3Rpb24gX0R5bmFtaWNJbXBvcnQocGF0aCkge2NvbnN0IG1vZD1fRHluYW1pY0ltcG9ydE1vZHVsZU1hcFtwYXRoXTtpZihtb2QpIHttb2RbU3ltYm9sLnRvU3RyaW5nVGFnXT0nTW9kdWxlJzt9cmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2QpO31cbnZhciBfZXhjbHVkZWQgPSBbXCJ0eXBlXCIsIFwic2l6ZVwiLCBcImNvbG9yXCIsIFwiY2xhc3NOYW1lXCIsIFwidGFiSW5kZXhcIiwgXCJ0aXRsZVwiLCBcIm9uSWNvbkxvYWRcIiwgXCJzdHlsZVwiLCBcInN0eWxlc01lbW9pemVyXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IHR5cGVUb1BhdGhNYXAgfSBmcm9tICcuL2ljb25fbWFwJztcbmltcG9ydCB7IGljb24gYXMgZW1wdHkgfSBmcm9tICcuL2Fzc2V0cy9lbXB0eSc7XG5pbXBvcnQgeyBlbnF1ZXVlU3RhdGVDaGFuZ2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IsIHdpdGhFdWlTdHlsZXNNZW1vaXplciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmV4cG9ydCB7IENPTE9SUyB9IGZyb20gJy4vbmFtZWRfY29sb3JzJztcbmltcG9ydCB7IGlzTmFtZWRDb2xvciB9IGZyb20gJy4vbmFtZWRfY29sb3JzJztcbmltcG9ydCB7IGV1aUljb25TdHlsZXMgfSBmcm9tICcuL2ljb24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZ2V0SXNBcHBJY29uID0gZnVuY3Rpb24gZ2V0SXNBcHBJY29uKGljb25UeXBlKSB7XG4gIGlmICh0eXBlb2YgaWNvblR5cGUgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gIGlmIChpY29uVHlwZSA9PT0gJ2RhdGFWaXN1YWxpemVyJykgcmV0dXJuIHRydWU7IC8vIFNwZWNpYWwgY2FzZVxuICBpZiAoaWNvblR5cGUuaW5kZXhPZignZGF0YTonKSA9PT0gMCkgcmV0dXJuIGZhbHNlOyAvLyBJbmxpbmUgZGF0YSBVUklzIHNob3VsZCBiZSBzaG9ydC1jaXJjdWl0ZWQgZm9yIHBlcmZvcm1hbmNlXG4gIHJldHVybiBpY29uVHlwZS5lbmRzV2l0aCgnQXBwJykgfHwgaWNvblR5cGUuZW5kc1dpdGgoJ0pvYicpO1xufTtcbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvUGF0aE1hcCk7XG5cbi8vIFdlIGFjY2VwdCBhcmJpdHJhcnkgY29sb3Igc3RyaW5ncywgd2hpY2ggYXJlIGltcG9zc2libGUgdG8gdHlwZS5cblxuZXhwb3J0IHZhciBTSVpFUyA9IFsnb3JpZ2luYWwnLCAncycsICdtJywgJ2wnLCAneGwnLCAneHhsJ107XG5mdW5jdGlvbiBpc0V1aUljb25UeXBlKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJyAmJiB0eXBlVG9QYXRoTWFwLmhhc093blByb3BlcnR5KHgpO1xufVxuZnVuY3Rpb24gZ2V0SW5pdGlhbEljb24oaWNvbikge1xuICBpZiAoaWNvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaXNFdWlJY29uVHlwZShpY29uKSkge1xuICAgIGlmIChpY29uQ29tcG9uZW50Q2FjaGUuaGFzT3duUHJvcGVydHkoaWNvbikpIHtcbiAgICAgIHJldHVybiBpY29uQ29tcG9uZW50Q2FjaGVbaWNvbl07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGljb247XG59XG52YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcigpO1xudmFyIGljb25Db21wb25lbnRDYWNoZSA9IHt9O1xuZXhwb3J0IHZhciBjbGVhckljb25Db21wb25lbnRDYWNoZSA9IGZ1bmN0aW9uIGNsZWFySWNvbkNvbXBvbmVudENhY2hlKGljb25UeXBlKSB7XG4gIGlmIChpY29uVHlwZSAhPSBudWxsKSB7XG4gICAgZGVsZXRlIGljb25Db21wb25lbnRDYWNoZVtpY29uVHlwZV07XG4gIH0gZWxzZSB7XG4gICAgaWNvbkNvbXBvbmVudENhY2hlID0ge307XG4gIH1cbn07XG5leHBvcnQgdmFyIGFwcGVuZEljb25Db21wb25lbnRDYWNoZSA9IGZ1bmN0aW9uIGFwcGVuZEljb25Db21wb25lbnRDYWNoZShpY29uVHlwZVRvSWNvbkNvbXBvbmVudE1hcCkge1xuICBmb3IgKHZhciBpY29uVHlwZSBpbiBpY29uVHlwZVRvSWNvbkNvbXBvbmVudE1hcCkge1xuICAgIGlmIChpY29uVHlwZVRvSWNvbkNvbXBvbmVudE1hcC5oYXNPd25Qcm9wZXJ0eShpY29uVHlwZSkpIHtcbiAgICAgIGljb25Db21wb25lbnRDYWNoZVtpY29uVHlwZV0gPSBpY29uVHlwZVRvSWNvbkNvbXBvbmVudE1hcFtpY29uVHlwZV07XG4gICAgfVxuICB9XG59O1xuZXhwb3J0IHZhciBFdWlJY29uQ2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aUljb25DbGFzcyhwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpSWNvbkNsYXNzKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpSWNvbkNsYXNzLCBbcHJvcHNdKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaXNNb3VudGVkXCIsIGZhbHNlKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibG9hZEljb25Db21wb25lbnRcIiwgZnVuY3Rpb24gKGljb25UeXBlKSB7XG4gICAgICBpZiAoaWNvbkNvbXBvbmVudENhY2hlLmhhc093blByb3BlcnR5KGljb25UeXBlKSkge1xuICAgICAgICAvLyBleGlzdHMgaW4gY2FjaGVcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgbmVlZGVkTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaWNvbjogaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXVxuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMub25JY29uTG9hZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBfRHluYW1pY0ltcG9ydChgLi9hc3NldHMvJHt0eXBlVG9QYXRoTWFwW2ljb25UeXBlXX1gKS50aGVuKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBpY29uID0gX3JlZi5pY29uO1xuICAgICAgICBpY29uQ29tcG9uZW50Q2FjaGVbaWNvblR5cGVdID0gaWNvbjtcbiAgICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuaXNNb3VudGVkICYmIF90aGlzLnByb3BzLnR5cGUgPT09IGljb25UeXBlKSB7XG4gICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGljb246IGljb24sXG4gICAgICAgICAgICAgIGljb25UaXRsZTogaWNvblR5cGUsXG4gICAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICAgIH0sIF90aGlzLm9uSWNvbkxvYWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25JY29uTG9hZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgb25JY29uTG9hZCA9IF90aGlzLnByb3BzLm9uSWNvbkxvYWQ7XG4gICAgICBpZiAob25JY29uTG9hZCkge1xuICAgICAgICBvbkljb25Mb2FkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIHR5cGUgPSBwcm9wcy50eXBlO1xuICAgIHZhciBpbml0aWFsSWNvbiA9IGdldEluaXRpYWxJY29uKHR5cGUpO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgaWNvbjogaW5pdGlhbEljb24sXG4gICAgICBpY29uVGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBuZWVkZWRMb2FkaW5nOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlJY29uQ2xhc3MsIF9QdXJlQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlJY29uQ2xhc3MsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgdmFyIHR5cGUgPSB0aGlzLnByb3BzLnR5cGU7XG4gICAgICBpZiAoaXNFdWlJY29uVHlwZSh0eXBlKSAmJiB0aGlzLnN0YXRlLmljb24gPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBuZWVkZWRMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2FkSWNvbkNvbXBvbmVudCh0eXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25JY29uTG9hZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIHR5cGUgPSB0aGlzLnByb3BzLnR5cGU7XG4gICAgICBpZiAodHlwZSAhPT0gcHJldlByb3BzLnR5cGUpIHtcbiAgICAgICAgaWYgKGlzRXVpSWNvblR5cGUodHlwZSkpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIG5lZWRlZExvYWRpbmc6IGljb25Db21wb25lbnRDYWNoZS5oYXNPd25Qcm9wZXJ0eSh0eXBlKSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubG9hZEljb25Db21wb25lbnQodHlwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpY29uOiB0eXBlLFxuICAgICAgICAgICAgbmVlZGVkTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuaXNNb3VudGVkID0gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICB0eXBlID0gX3RoaXMkcHJvcHMudHlwZSxcbiAgICAgICAgX3RoaXMkcHJvcHMkc2l6ZSA9IF90aGlzJHByb3BzLnNpemUsXG4gICAgICAgIHNpemUgPSBfdGhpcyRwcm9wcyRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfdGhpcyRwcm9wcyRzaXplLFxuICAgICAgICBjb2xvciA9IF90aGlzJHByb3BzLmNvbG9yLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIHRhYkluZGV4ID0gX3RoaXMkcHJvcHMudGFiSW5kZXgsXG4gICAgICAgIHRpdGxlID0gX3RoaXMkcHJvcHMudGl0bGUsXG4gICAgICAgIG9uSWNvbkxvYWQgPSBfdGhpcyRwcm9wcy5vbkljb25Mb2FkLFxuICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzLnN0eWxlLFxuICAgICAgICBzdHlsZXNNZW1vaXplciA9IF90aGlzJHByb3BzLnN0eWxlc01lbW9pemVyLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkc3RhdGUuaXNMb2FkaW5nLFxuICAgICAgICBuZWVkZWRMb2FkaW5nID0gX3RoaXMkc3RhdGUubmVlZGVkTG9hZGluZyxcbiAgICAgICAgaWNvblRpdGxlID0gX3RoaXMkc3RhdGUuaWNvblRpdGxlO1xuICAgICAgdmFyIGlzTG9hZGVkID0gIWlzTG9hZGluZyAmJiBuZWVkZWRMb2FkaW5nO1xuICAgICAgdmFyIGlzQ3VzdG9tQ29sb3IgPSBjb2xvciAmJiAhaXNOYW1lZENvbG9yKGNvbG9yKTtcbiAgICAgIHZhciBvcHRpb25hbEN1c3RvbVN0eWxlcyA9IGlzQ3VzdG9tQ29sb3IgPyBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9LCBzdHlsZSkgOiBzdHlsZTtcblxuICAgICAgLy8gVGhlc2UgaWNvbnMgYXJlIGEgbGl0dGxlIHNwZWNpYWwgYW5kIGdldCBzb21lIGV4dHJhIENTUyBmbGV4aWJpbGl0eVxuICAgICAgdmFyIGlzQXBwSWNvbiA9IGdldElzQXBwSWNvbih0eXBlKTtcbiAgICAgIC8vIEFwcCBjb2xvciBzdHlsZXMgYXJlIG9ubHkgYXBwbGllZCBpZiBubyBjb2xvciBpcyBwYXNzZWQgb3IgaWYgY29sb3I9XCJkZWZhdWx0XCIgaXMgcGFzc2VkXG4gICAgICB2YXIgYXBwSWNvbkhhc0NvbG9yID0gY29sb3IgJiYgY29sb3IgIT09ICdkZWZhdWx0JztcblxuICAgICAgLy8gVGhlIEVsYXN0aWMgbG9nbyBzaG91bGQgYmUgYW4gb3V0bGluZSBpbiB0ZXh0IGFuZCBnaG9zdCBtb2RlXG4gICAgICB2YXIgaXNFbGFzdGljTG9nb091dGxpbmUgPSB0eXBlID09PSAnbG9nb0VsYXN0aWMnICYmIChjb2xvciA9PT0gJ2dob3N0JyB8fCBjb2xvciA9PT0gJ3RleHQnKTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSWNvbicsIGNsYXNzTmFtZSk7XG5cbiAgICAgIC8vIEVtb3Rpb24gc3R5bGVzXG4gICAgICB2YXIgc3R5bGVzID0gc3R5bGVzTWVtb2l6ZXIoZXVpSWNvblN0eWxlcyk7XG4gICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJY29uLCBzdHlsZXNbc2l6ZV0sIGNvbG9yICYmIGlzTmFtZWRDb2xvcihjb2xvcikgJiYgc3R5bGVzW2NvbG9yXSwgaXNDdXN0b21Db2xvciAmJiBzdHlsZXMuY3VzdG9tQ29sb3IsIGlzRWxhc3RpY0xvZ29PdXRsaW5lICYmIHN0eWxlcy5sb2dvRWxhc3RpY091dGxpbmUsIGlzQXBwSWNvbiAmJiAhYXBwSWNvbkhhc0NvbG9yICYmIHN0eWxlcy5hcHAsIGlzTG9hZGluZyAmJiBzdHlsZXMuaXNMb2FkaW5nLCAhaXNMb2FkaW5nICYmIG5lZWRlZExvYWRpbmcgJiYgc3R5bGVzLmlzTG9hZGVkXTtcbiAgICAgIHZhciBpY29uID0gdGhpcy5zdGF0ZS5pY29uIHx8IGVtcHR5O1xuICAgICAgaWYgKHR5cGVvZiBpY29uID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImltZ1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgYWx0OiB0aXRsZSA/IHRpdGxlIDogJycsXG4gICAgICAgICAgc3JjOiBpY29uLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgICAgdGFiSW5kZXg6IHRhYkluZGV4XG4gICAgICAgIH0sIHJlc3QpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBTdmcgPSBpY29uO1xuXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGFyaWEtbGFiZWwsIGFyaWEtbGFiZWxsZWRieSwgb3IgdGl0bGUgaXQgZ2V0cyBhcmlhLWhpZGRlbiB0cnVlXG4gICAgICAgIHZhciBpc0FyaWFIaWRkZW4gPSAhKHRoaXMucHJvcHNbJ2FyaWEtbGFiZWwnXSB8fCB0aGlzLnByb3BzWydhcmlhLWxhYmVsbGVkYnknXSB8fCB0aGlzLnByb3BzLnRpdGxlKTtcblxuICAgICAgICAvLyBJZiBubyBhcmlhLWxhYmVsIG9yIGFyaWEtbGFiZWxsZWRieSBpcyBwcm92aWRlZCBidXQgdGhlcmUncyBhIHRpdGxlLCBhIHRpdGxlSWQgaXMgZ2VuZXJhdGVkXG4gICAgICAgIC8vICBUaGUgc3ZnIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgZ2V0cyB0aGlzIHRpdGxlSWRcbiAgICAgICAgLy8gIFRoZSBzdmcgdGl0bGUgZWxlbWVudCBnZXRzIHRoaXMgdGl0bGVJZCBhcyBhbiBpZFxuICAgICAgICB2YXIgdGl0bGVJZCA9ICF0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10gJiYgIXRoaXMucHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddICYmIHRpdGxlID8ge1xuICAgICAgICAgIHRpdGxlSWQ6IGdlbmVyYXRlSWQoKVxuICAgICAgICB9IDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChTdmcsIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgc3R5bGU6IG9wdGlvbmFsQ3VzdG9tU3R5bGVzLFxuICAgICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgICAgICByb2xlOiBcImltZ1wiLFxuICAgICAgICAgIHRpdGxlOiB0aXRsZVxuICAgICAgICB9LCB0aXRsZUlkLCB7XG4gICAgICAgICAgXCJkYXRhLWljb24tdHlwZVwiOiBpY29uVGl0bGUsXG4gICAgICAgICAgXCJkYXRhLWlzLWxvYWRlZFwiOiBpc0xvYWRlZCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgXCJkYXRhLWlzLWxvYWRpbmdcIjogaXNMb2FkaW5nIHx8IHVuZGVmaW5lZFxuICAgICAgICB9LCByZXN0LCB7XG4gICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBpc0FyaWFIaWRkZW4gfHwgcmVzdFsnYXJpYS1oaWRkZW4nXVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG59KFB1cmVDb21wb25lbnQpO1xuRXVpSWNvbkNsYXNzLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogYEVudW1gIGlzIGFueSBvZiB0aGUgbmFtZWQgaWNvbnMgbGlzdGVkIGluIHRoZSBkb2NzLCBgc3RyaW5nYCBpcyB1c3VhbGx5IGEgVVJMIHRvIGFuIFNWRyBmaWxlLCBhbmQgYGVsZW1lbnRUeXBlYCBpcyBhbnkgUmVhY3QgU1ZHIGNvbXBvbmVudFxuICAgICAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICAgKiBPbmUgb2YgRVVJJ3MgY29sb3IgcGFsZXR0ZSBvciBhIHZhbGlkIENTUyBjb2xvciB2YWx1ZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvY29sb3JfdmFsdWUuXG4gICAgICAgKiBOb3RlIHRoYXQgY29sb3Jpbmcgb25seSB3b3JrcyBpZiB5b3VyIFNWRyBpcyByZW1vdmVkIG9mIGZpbGwgYXR0cmlidXRlcy5cbiAgICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBOb3RlIHRoYXQgZXZlcnkgc2l6ZSBvdGhlciB0aGFuIGBvcmlnaW5hbGAgYXNzdW1lcyB0aGUgcHJvdmlkZWQgU1ZHIHNpdHMgb24gYSBzcXVhcmUgdmlld2JveC5cbiAgICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIERlc2NyaXB0aXZlIHRpdGxlIGZvciBuYW1pbmcgdGhlIGljb24gYmFzZWQgb24gaXRzIHVzZVxuICAgICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSB0aXRsZSBlbGVtZW50XG4gICAgICAgKi9cbiAgdGl0bGVJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICAgKiBJdHMgdmFsdWUgc2hvdWxkIGJlIG9uZSBvciBtb3JlIGVsZW1lbnQgSURzXG4gICAgICAgKi9cbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICAgKiBDYWxsYmFjayB3aGVuIHRoZSBpY29uIGhhcyBiZWVuIGxvYWRlZCAmIHJlbmRlcmVkXG4gICAgICAgKi9cbiAgb25JY29uTG9hZDogUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnQgdmFyIEV1aUljb24gPSB3aXRoRXVpU3R5bGVzTWVtb2l6ZXIoRXVpSWNvbkNsYXNzKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciB0eXBlVG9QYXRoTWFwID0ge1xuICBhY2Nlc3NpYmlsaXR5OiAnYWNjZXNzaWJpbGl0eScsXG4gIGFkZERhdGFBcHA6ICdhcHBfYWRkX2RhdGEnLFxuICBhZHZhbmNlZFNldHRpbmdzQXBwOiAnYXBwX2FkdmFuY2VkX3NldHRpbmdzJyxcbiAgYWdlbnRBcHA6ICdhcHBfZmxlZXQnLFxuICBhZ2dyZWdhdGU6ICdhZ2dyZWdhdGUnLFxuICBhbmFseXplRXZlbnQ6ICdhbmFseXplRXZlbnQnLFxuICBhbm5vdGF0aW9uOiAnYW5ub3RhdGlvbicsXG4gIGFub21hbHlDaGFydDogJ2Fub21hbHlfY2hhcnQnLFxuICBhbm9tYWx5U3dpbUxhbmU6ICdhbm9tYWx5X3N3aW1fbGFuZScsXG4gIGFwbUFwcDogJ2FwcF9hcG0nLFxuICBhcG1UcmFjZTogJ2FwbV90cmFjZScsXG4gIGFwcFNlYXJjaEFwcDogJ2FwcF9hcHBfc2VhcmNoJyxcbiAgYXBwczogJ2FwcHMnLFxuICBhcnJvd0Rvd246ICdhcnJvd19kb3duJyxcbiAgYXJyb3dMZWZ0OiAnYXJyb3dfbGVmdCcsXG4gIGFycm93UmlnaHQ6ICdhcnJvd19yaWdodCcsXG4gIGFycm93VXA6ICdhcnJvd191cCcsXG4gIGFycm93U3RhcnQ6ICdhcnJvd1N0YXJ0JyxcbiAgYXJyb3dFbmQ6ICdhcnJvd0VuZCcsXG4gIGFydGljbGU6ICdhcnRpY2xlJyxcbiAgYXN0ZXJpc2s6ICdhc3RlcmlzaycsXG4gIGF0OiAnYXQnLFxuICBhdWRpdGJlYXRBcHA6ICdhcHBfYXVkaXRiZWF0JyxcbiAgYmVha2VyOiAnYmVha2VyJyxcbiAgYmVsbDogJ2JlbGwnLFxuICBiZWxsU2xhc2g6ICdiZWxsU2xhc2gnLFxuICBiZXRhOiAnYmV0YScsXG4gIGJvbHQ6ICdib2x0JyxcbiAgYm94ZXNIb3Jpem9udGFsOiAnYm94ZXNfaG9yaXpvbnRhbCcsXG4gIGJveGVzVmVydGljYWw6ICdib3hlc192ZXJ0aWNhbCcsXG4gIGJyYW5jaDogJ2JyYW5jaCcsXG4gIGJyYW5jaFVzZXI6ICdicmFuY2hVc2VyJyxcbiAgYnJvb206ICdicm9vbScsXG4gIGJydXNoOiAnYnJ1c2gnLFxuICBidWc6ICdidWcnLFxuICBidWxsc2V5ZTogJ2J1bGxzZXllJyxcbiAgY2FsZW5kYXI6ICdjYWxlbmRhcicsXG4gIGNhbnZhc0FwcDogJ2FwcF9jYW52YXMnLFxuICBjYXNlc0FwcDogJ2FwcF9jYXNlcycsXG4gIGNoYW5nZVBvaW50RGV0ZWN0aW9uOiAnY2hhbmdlX3BvaW50X2RldGVjdGlvbicsXG4gIGNoZWNrOiAnY2hlY2snLFxuICBjaGVja0luQ2lyY2xlRmlsbGVkOiAnY2hlY2tJbkNpcmNsZUZpbGxlZCcsXG4gIGNoZWVyOiAnY2hlZXInLFxuICBjbGFzc2lmaWNhdGlvbkpvYjogJ21sX2NsYXNzaWZpY2F0aW9uX2pvYicsXG4gIGNsaWNrTGVmdDogJ2NsaWNrTGVmdCcsXG4gIGNsaWNrUmlnaHQ6ICdjbGlja1JpZ2h0JyxcbiAgY2xvY2s6ICdjbG9jaycsXG4gIGNsb2NrQ291bnRlcjogJ2Nsb2NrQ291bnRlcicsXG4gIGNsb3VkRHJpenpsZTogJ2Nsb3VkRHJpenpsZScsXG4gIGNsb3VkU3Rvcm15OiAnY2xvdWRTdG9ybXknLFxuICBjbG91ZFN1bm55OiAnY2xvdWRTdW5ueScsXG4gIGNsdXN0ZXI6ICdjbHVzdGVyJyxcbiAgY29kZUFwcDogJ2FwcF9jb2RlJyxcbiAgY29sb3I6ICdjb2xvcicsXG4gIGNvbXB1dGU6ICdjb21wdXRlJyxcbiAgY29uc29sZTogJ2NvbnNvbGUnLFxuICBjb25zb2xlQXBwOiAnYXBwX2NvbnNvbGUnLFxuICBjb250YWluZXI6ICdjb250YWluZXInLFxuICBjb250aW51aXR5QWJvdmU6ICdjb250aW51aXR5QWJvdmUnLFxuICBjb250aW51aXR5QWJvdmVCZWxvdzogJ2NvbnRpbnVpdHlBYm92ZUJlbG93JyxcbiAgY29udGludWl0eUJlbG93OiAnY29udGludWl0eUJlbG93JyxcbiAgY29udGludWl0eVdpdGhpbjogJ2NvbnRpbnVpdHlXaXRoaW4nLFxuICBjb250cm9sc0hvcml6b250YWw6ICdjb250cm9sc19ob3Jpem9udGFsJyxcbiAgY29udHJvbHNWZXJ0aWNhbDogJ2NvbnRyb2xzX3ZlcnRpY2FsJyxcbiAgY29weTogJ2NvcHknLFxuICBjb3B5Q2xpcGJvYXJkOiAnY29weV9jbGlwYm9hcmQnLFxuICBjcmVhdGVBZHZhbmNlZEpvYjogJ21sX2NyZWF0ZV9hZHZhbmNlZF9qb2InLFxuICBjcmVhdGVNdWx0aU1ldHJpY0pvYjogJ21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iJyxcbiAgY3JlYXRlUG9wdWxhdGlvbkpvYjogJ21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYicsXG4gIGNyZWF0ZVNpbmdsZU1ldHJpY0pvYjogJ21sX2NyZWF0ZV9zaW5nbGVfbWV0cmljX2pvYicsXG4gIGNyb3NzOiAnY3Jvc3MnLFxuICBjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcDogJ2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uJyxcbiAgY3Jvc3NJbkNpcmNsZTogJ2Nyb3NzX2luX2NpcmNsZScsXG4gIGNyb3NzaGFpcnM6ICdjcm9zc2hhaXJzJyxcbiAgY3VycmVuY3k6ICdjdXJyZW5jeScsXG4gIGN1dDogJ2N1dCcsXG4gIGRhc2hib2FyZEFwcDogJ2FwcF9kYXNoYm9hcmQnLFxuICBkYXRhVmlzdWFsaXplcjogJ21sX2RhdGFfdmlzdWFsaXplcicsXG4gIGRhdGFiYXNlOiAnZGF0YWJhc2UnLFxuICBkZXNrdG9wOiAnZGVza3RvcCcsXG4gIGRldlRvb2xzQXBwOiAnYXBwX2RldnRvb2xzJyxcbiAgZGlmZjogJ2RpZmYnLFxuICBkaXNjb3ZlckFwcDogJ2FwcF9kaXNjb3ZlcicsXG4gIGRpc2N1c3M6ICdkaXNjdXNzJyxcbiAgZG9jdW1lbnQ6ICdkb2N1bWVudCcsXG4gIGRvY3VtZW50RWRpdDogJ2RvY3VtZW50RWRpdCcsXG4gIGRvY3VtZW50YXRpb246ICdkb2N1bWVudGF0aW9uJyxcbiAgZG9jdW1lbnRzOiAnZG9jdW1lbnRzJyxcbiAgZG90OiAnZG90JyxcbiAgZG90SW5DaXJjbGU6ICdkb3RJbkNpcmNsZScsXG4gIGRvdWJsZUFycm93TGVmdDogJ2RvdWJsZUFycm93TGVmdCcsXG4gIGRvdWJsZUFycm93UmlnaHQ6ICdkb3VibGVBcnJvd1JpZ2h0JyxcbiAgZG93bmxvYWQ6ICdkb3dubG9hZCcsXG4gIGVkaXRvckFsaWduQ2VudGVyOiAnZWRpdG9yX2FsaWduX2NlbnRlcicsXG4gIGVkaXRvckFsaWduTGVmdDogJ2VkaXRvcl9hbGlnbl9sZWZ0JyxcbiAgZWRpdG9yQWxpZ25SaWdodDogJ2VkaXRvcl9hbGlnbl9yaWdodCcsXG4gIGVkaXRvckJvbGQ6ICdlZGl0b3JfYm9sZCcsXG4gIGVkaXRvckNoZWNrbGlzdDogJ2VkaXRvcl9jaGVja2xpc3QnLFxuICBlZGl0b3JDb2RlQmxvY2s6ICdlZGl0b3JfY29kZV9ibG9jaycsXG4gIGVkaXRvckNvbW1lbnQ6ICdlZGl0b3JfY29tbWVudCcsXG4gIGVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsOiAnZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwnLFxuICBlZGl0b3JEaXN0cmlidXRlVmVydGljYWw6ICdlZGl0b3JEaXN0cmlidXRlVmVydGljYWwnLFxuICBlZGl0b3JIZWFkaW5nOiAnZWRpdG9yX2hlYWRpbmcnLFxuICBlZGl0b3JJdGFsaWM6ICdlZGl0b3JfaXRhbGljJyxcbiAgZWRpdG9ySXRlbUFsaWduQm90dG9tOiAnZWRpdG9ySXRlbUFsaWduQm90dG9tJyxcbiAgZWRpdG9ySXRlbUFsaWduQ2VudGVyOiAnZWRpdG9ySXRlbUFsaWduQ2VudGVyJyxcbiAgZWRpdG9ySXRlbUFsaWduTGVmdDogJ2VkaXRvckl0ZW1BbGlnbkxlZnQnLFxuICBlZGl0b3JJdGVtQWxpZ25NaWRkbGU6ICdlZGl0b3JJdGVtQWxpZ25NaWRkbGUnLFxuICBlZGl0b3JJdGVtQWxpZ25SaWdodDogJ2VkaXRvckl0ZW1BbGlnblJpZ2h0JyxcbiAgZWRpdG9ySXRlbUFsaWduVG9wOiAnZWRpdG9ySXRlbUFsaWduVG9wJyxcbiAgZWRpdG9yTGluazogJ2VkaXRvcl9saW5rJyxcbiAgZWRpdG9yT3JkZXJlZExpc3Q6ICdlZGl0b3Jfb3JkZXJlZF9saXN0JyxcbiAgZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0OiAnZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0JyxcbiAgZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodDogJ2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQnLFxuICBlZGl0b3JQb3NpdGlvblRvcExlZnQ6ICdlZGl0b3JQb3NpdGlvblRvcExlZnQnLFxuICBlZGl0b3JQb3NpdGlvblRvcFJpZ2h0OiAnZWRpdG9yUG9zaXRpb25Ub3BSaWdodCcsXG4gIGVkaXRvclJlZG86ICdlZGl0b3JfcmVkbycsXG4gIGVkaXRvclN0cmlrZTogJ2VkaXRvcl9zdHJpa2UnLFxuICBlZGl0b3JUYWJsZTogJ2VkaXRvcl90YWJsZScsXG4gIGVkaXRvclVuZGVybGluZTogJ2VkaXRvcl91bmRlcmxpbmUnLFxuICBlZGl0b3JVbmRvOiAnZWRpdG9yX3VuZG8nLFxuICBlZGl0b3JVbm9yZGVyZWRMaXN0OiAnZWRpdG9yX3Vub3JkZXJlZF9saXN0JyxcbiAgZW1haWw6ICdlbWFpbCcsXG4gIGVtcHR5OiAnZW1wdHknLFxuICBlbXNBcHA6ICdhcHBfZW1zJyxcbiAgZW5kcG9pbnQ6ICdlbmRwb2ludCcsXG4gIGVxbDogJ2VxbCcsXG4gIGVyYXNlcjogJ2VyYXNlcicsXG4gIGVycm9yOiAnZXJyb3InLFxuICBlcnJvckZpbGxlZDogJ2Vycm9yRmlsbGVkJyxcbiAgZXNxbFZpczogJ2VzcWxWaXMnLFxuICBleGl0OiAnZXhpdCcsXG4gIGV4cGFuZDogJ2V4cGFuZCcsXG4gIGV4cGFuZE1pbmk6ICdleHBhbmRNaW5pJyxcbiAgZXhwb3J0QWN0aW9uOiAnZXhwb3J0JyxcbiAgZXllOiAnZXllJyxcbiAgZXllQ2xvc2VkOiAnZXllX2Nsb3NlZCcsXG4gIGZhY2VIYXBweTogJ2ZhY2VfaGFwcHknLFxuICBmYWNlTmV1dHJhbDogJ2ZhY2VfbmV1dHJhbCcsXG4gIGZhY2VTYWQ6ICdmYWNlX3NhZCcsXG4gIGZpZWxkU3RhdGlzdGljczogJ2ZpZWxkX3N0YXRpc3RpY3MnLFxuICBmaWxlYmVhdEFwcDogJ2FwcF9maWxlYmVhdCcsXG4gIGZpbHRlcjogJ2ZpbHRlcicsXG4gIGZpbHRlckV4Y2x1ZGU6ICdmaWx0ZXJFeGNsdWRlJyxcbiAgZmlsdGVySWdub3JlOiAnZmlsdGVySWdub3JlJyxcbiAgZmlsdGVySW5jbHVkZTogJ2ZpbHRlckluY2x1ZGUnLFxuICBmaWx0ZXJJbkNpcmNsZTogJ2ZpbHRlckluQ2lyY2xlJyxcbiAgZmxhZzogJ2ZsYWcnLFxuICBmbGVldEFwcDogJ2FwcF9hZ2VudCcsXG4gIGZvbGQ6ICdmb2xkJyxcbiAgZm9sZGVyQ2hlY2s6ICdmb2xkZXJfY2hlY2snLFxuICBmb2xkZXJDbG9zZWQ6ICdmb2xkZXJfY2xvc2VkJyxcbiAgZm9sZGVyRXhjbGFtYXRpb246ICdmb2xkZXJfZXhjbGFtYXRpb24nLFxuICBmb2xkZXJPcGVuOiAnZm9sZGVyX29wZW4nLFxuICBmcmFtZU5leHQ6ICdmcmFtZU5leHQnLFxuICBmcmFtZVByZXZpb3VzOiAnZnJhbWVQcmV2aW91cycsXG4gIGZ1bGxTY3JlZW46ICdmdWxsX3NjcmVlbicsXG4gIGZ1bGxTY3JlZW5FeGl0OiAnZnVsbFNjcmVlbkV4aXQnLFxuICBmdW5jdGlvbjogJ2Z1bmN0aW9uJyxcbiAgZ2VhcjogJ2dlYXInLFxuICBnaXNBcHA6ICdhcHBfZ2lzJyxcbiAgZ2xhc3NlczogJ2dsYXNzZXMnLFxuICBnbG9iZTogJ2dsb2JlJyxcbiAgZ3JhYjogJ2dyYWInLFxuICBncmFiSG9yaXpvbnRhbDogJ2dyYWJfaG9yaXpvbnRhbCcsXG4gIGdyYWJPbW5pZGlyZWN0aW9uYWw6ICdncmFiT21uaWRpcmVjdGlvbmFsJyxcbiAgZ3JhZGllbnQ6ICdncmFkaWVudCcsXG4gIGdyYXBoQXBwOiAnYXBwX2dyYXBoJyxcbiAgZ3JpZDogJ2dyaWQnLFxuICBncm9rQXBwOiAnYXBwX2dyb2snLFxuICBoZWFydDogJ2hlYXJ0JyxcbiAgaGVhcnRiZWF0QXBwOiAnYXBwX2hlYXJ0YmVhdCcsXG4gIGhlYXRtYXA6ICdoZWF0bWFwJyxcbiAgaGVscDogJ2hlbHAnLFxuICBob21lOiAnaG9tZScsXG4gIGlJbkNpcmNsZTogJ2lJbkNpcmNsZScsXG4gIGltYWdlOiAnaW1hZ2UnLFxuICBpbXBvcnRBY3Rpb246ICdpbXBvcnQnLFxuICBpbmRleDogJ2luZGV4JyxcbiAgaW5kZXhDbG9zZTogJ2luZGV4X2Nsb3NlJyxcbiAgaW5kZXhFZGl0OiAnaW5kZXhfZWRpdCcsXG4gIGluZGV4Rmx1c2g6ICdpbmRleF9mbHVzaCcsXG4gIGluZGV4TWFuYWdlbWVudEFwcDogJ2FwcF9pbmRleF9tYW5hZ2VtZW50JyxcbiAgaW5kZXhNYXBwaW5nOiAnaW5kZXhfbWFwcGluZycsXG4gIGluZGV4T3BlbjogJ2luZGV4X29wZW4nLFxuICBpbmRleFBhdHRlcm5BcHA6ICdhcHBfaW5kZXhfcGF0dGVybicsXG4gIGluZGV4Um9sbHVwQXBwOiAnYXBwX2luZGV4X3JvbGx1cCcsXG4gIGluZGV4UnVudGltZTogJ2luZGV4X3J1bnRpbWUnLFxuICBpbmRleFNldHRpbmdzOiAnaW5kZXhfc2V0dGluZ3MnLFxuICBpbmRleFRlbXBvcmFyeTogJ2luZGV4VGVtcG9yYXJ5JyxcbiAgaW5maW5pdHk6ICdpbmZpbml0eScsXG4gIGlucHV0T3V0cHV0OiAnaW5wdXRPdXRwdXQnLFxuICBpbnNwZWN0OiAnaW5zcGVjdCcsXG4gIGludmVydDogJ2ludmVydCcsXG4gIGlwOiAnaXAnLFxuICBrZXk6ICdrZXknLFxuICBrZXlib2FyZDogJ2tleWJvYXJkJyxcbiAga3FsRmllbGQ6ICdrcWxfZmllbGQnLFxuICBrcWxGdW5jdGlvbjogJ2txbF9mdW5jdGlvbicsXG4gIGtxbE9wZXJhbmQ6ICdrcWxfb3BlcmFuZCcsXG4gIGtxbFNlbGVjdG9yOiAna3FsX3NlbGVjdG9yJyxcbiAga3FsVmFsdWU6ICdrcWxfdmFsdWUnLFxuICBrdWJlcm5ldGVzTm9kZTogJ2t1YmVybmV0ZXNOb2RlJyxcbiAga3ViZXJuZXRlc1BvZDogJ2t1YmVybmV0ZXNQb2QnLFxuICBsYXVuY2g6ICdsYXVuY2gnLFxuICBsYXllcnM6ICdsYXllcnMnLFxuICBsZW5zQXBwOiAnYXBwX2xlbnMnLFxuICBsZXR0ZXJpbmc6ICdsZXR0ZXJpbmcnLFxuICBsaW5lRGFzaGVkOiAnbGluZURhc2hlZCcsXG4gIGxpbmVEb3R0ZWQ6ICdsaW5lRG90dGVkJyxcbiAgbGluZVNvbGlkOiAnbGluZVNvbGlkJyxcbiAgbGluazogJ2xpbmsnLFxuICBsaXN0OiAnbGlzdCcsXG4gIGxpc3RBZGQ6ICdsaXN0X2FkZCcsXG4gIGxvY2s6ICdsb2NrJyxcbiAgbG9ja09wZW46ICdsb2NrT3BlbicsXG4gIGxvZ1BhdHRlcm5BbmFseXNpczogJ2xvZ19wYXR0ZXJuX2FuYWx5c2lzJyxcbiAgbG9nUmF0ZUFuYWx5c2lzOiAnbG9nX3JhdGVfYW5hbHlzaXMnLFxuICBsb2dvQVdTOiAnbG9nb19hd3MnLFxuICBsb2dvQVdTTW9ubzogJ2xvZ29fYXdzX21vbm8nLFxuICBsb2dvQWVyb3NwaWtlOiAnbG9nb19hZXJvc3Bpa2UnLFxuICBsb2dvQXBhY2hlOiAnbG9nb19hcGFjaGUnLFxuICBsb2dvQXBwU2VhcmNoOiAnbG9nb19hcHBfc2VhcmNoJyxcbiAgbG9nb0F6dXJlOiAnbG9nb19henVyZScsXG4gIGxvZ29BenVyZU1vbm86ICdsb2dvX2F6dXJlX21vbm8nLFxuICBsb2dvQmVhdHM6ICdsb2dvX2JlYXRzJyxcbiAgbG9nb0J1c2luZXNzQW5hbHl0aWNzOiAnbG9nb19idXNpbmVzc19hbmFseXRpY3MnLFxuICBsb2dvQ2VwaDogJ2xvZ29fY2VwaCcsXG4gIGxvZ29DbG91ZDogJ2xvZ29fY2xvdWQnLFxuICBsb2dvQ2xvdWRFbnRlcnByaXNlOiAnbG9nb19jbG91ZF9lY2UnLFxuICBsb2dvQ29kZTogJ2xvZ29fY29kZScsXG4gIGxvZ29Db2Rlc2FuZGJveDogJ2xvZ29fY29kZXNhbmRib3gnLFxuICBsb2dvQ291Y2hiYXNlOiAnbG9nb19jb3VjaGJhc2UnLFxuICBsb2dvRG9ja2VyOiAnbG9nb19kb2NrZXInLFxuICBsb2dvRHJvcHdpemFyZDogJ2xvZ29fZHJvcHdpemFyZCcsXG4gIGxvZ29FbGFzdGljOiAnbG9nb19lbGFzdGljJyxcbiAgbG9nb0VsYXN0aWNTdGFjazogJ2xvZ29fZWxhc3RpY19zdGFjaycsXG4gIGxvZ29FbGFzdGljc2VhcmNoOiAnbG9nb19lbGFzdGljc2VhcmNoJyxcbiAgbG9nb0VudGVycHJpc2VTZWFyY2g6ICdsb2dvX2VudGVycHJpc2Vfc2VhcmNoJyxcbiAgbG9nb0V0Y2Q6ICdsb2dvX2V0Y2QnLFxuICBsb2dvR0NQOiAnbG9nb19nY3AnLFxuICBsb2dvR0NQTW9ubzogJ2xvZ29fZ2NwX21vbm8nLFxuICBsb2dvR2l0aHViOiAnbG9nb19naXRodWInLFxuICBsb2dvR21haWw6ICdsb2dvX2dtYWlsJyxcbiAgbG9nb0dvbGFuZzogJ2xvZ29fZ29sYW5nJyxcbiAgbG9nb0dvb2dsZUc6ICdsb2dvX2dvb2dsZV9nJyxcbiAgbG9nb0hBcHJveHk6ICdsb2dvX2hhcHJveHknLFxuICBsb2dvSUJNOiAnbG9nb19pYm0nLFxuICBsb2dvSUJNTW9ubzogJ2xvZ29faWJtX21vbm8nLFxuICBsb2dvS2Fma2E6ICdsb2dvX2thZmthJyxcbiAgbG9nb0tpYmFuYTogJ2xvZ29fa2liYW5hJyxcbiAgbG9nb0t1YmVybmV0ZXM6ICdsb2dvX2t1YmVybmV0ZXMnLFxuICBsb2dvTG9nZ2luZzogJ2xvZ29fbG9nZ2luZycsXG4gIGxvZ29Mb2dzdGFzaDogJ2xvZ29fbG9nc3Rhc2gnLFxuICBsb2dvTWFwczogJ2xvZ29fbWFwcycsXG4gIGxvZ29NZW1jYWNoZWQ6ICdsb2dvX21lbWNhY2hlZCcsXG4gIGxvZ29NZXRyaWNzOiAnbG9nb19tZXRyaWNzJyxcbiAgbG9nb01vbmdvZGI6ICdsb2dvX21vbmdvZGInLFxuICBsb2dvTXlTUUw6ICdsb2dvX215c3FsJyxcbiAgbG9nb05naW54OiAnbG9nb19uZ2lueCcsXG4gIGxvZ29PYnNlcnZhYmlsaXR5OiAnbG9nb19vYnNlcnZhYmlsaXR5JyxcbiAgbG9nb09zcXVlcnk6ICdsb2dvX29zcXVlcnknLFxuICBsb2dvUGhwOiAnbG9nb19waHAnLFxuICBsb2dvUG9zdGdyZXM6ICdsb2dvX3Bvc3RncmVzJyxcbiAgbG9nb1Byb21ldGhldXM6ICdsb2dvX3Byb21ldGhldXMnLFxuICBsb2dvUmFiYml0bXE6ICdsb2dvX3JhYmJpdG1xJyxcbiAgbG9nb1JlZGlzOiAnbG9nb19yZWRpcycsXG4gIGxvZ29TZWN1cml0eTogJ2xvZ29fc2VjdXJpdHknLFxuICBsb2dvU2l0ZVNlYXJjaDogJ2xvZ29fc2l0ZV9zZWFyY2gnLFxuICBsb2dvU2tldGNoOiAnbG9nb19za2V0Y2gnLFxuICBsb2dvU2xhY2s6ICdsb2dvX3NsYWNrJyxcbiAgbG9nb1VwdGltZTogJ2xvZ29fdXB0aW1lJyxcbiAgbG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50OiAnbG9nb192dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQnLFxuICBsb2dvV2ViaG9vazogJ2xvZ29fd2ViaG9vaycsXG4gIGxvZ29XaW5kb3dzOiAnbG9nb193aW5kb3dzJyxcbiAgbG9nb1dvcmtwbGFjZVNlYXJjaDogJ2xvZ29fd29ya3BsYWNlX3NlYXJjaCcsXG4gIGxvZ3NBcHA6ICdhcHBfbG9ncycsXG4gIGxvZ3N0YXNoRmlsdGVyOiAnbG9nc3Rhc2hfZmlsdGVyJyxcbiAgbG9nc3Rhc2hJZjogJ2xvZ3N0YXNoX2lmJyxcbiAgbG9nc3Rhc2hJbnB1dDogJ2xvZ3N0YXNoX2lucHV0JyxcbiAgbG9nc3Rhc2hPdXRwdXQ6ICdsb2dzdGFzaF9vdXRwdXQnLFxuICBsb2dzdGFzaFF1ZXVlOiAnbG9nc3Rhc2hfcXVldWUnLFxuICBtYWNoaW5lTGVhcm5pbmdBcHA6ICdhcHBfbWwnLFxuICBtYWduZXQ6ICdtYWduZXQnLFxuICBtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uOiAnbWFnbmlmeVdpdGhFeGNsYW1hdGlvbicsXG4gIG1hZ25pZnlXaXRoTWludXM6ICdtYWduaWZ5V2l0aE1pbnVzJyxcbiAgbWFnbmlmeVdpdGhQbHVzOiAnbWFnbmlmeVdpdGhQbHVzJyxcbiAgbWFuYWdlbWVudEFwcDogJ2FwcF9tYW5hZ2VtZW50JyxcbiAgbWFwTWFya2VyOiAnbWFwX21hcmtlcicsXG4gIG1lbW9yeTogJ21lbW9yeScsXG4gIG1lbnU6ICdtZW51JyxcbiAgbWVudURvd246ICdtZW51RG93bicsXG4gIG1lbnVMZWZ0OiAnbWVudUxlZnQnLFxuICBtZW51UmlnaHQ6ICdtZW51UmlnaHQnLFxuICBtZW51VXA6ICdtZW51VXAnLFxuICBtZXJnZTogJ21lcmdlJyxcbiAgbWV0cmljYmVhdEFwcDogJ2FwcF9tZXRyaWNiZWF0JyxcbiAgbWV0cmljc0FwcDogJ2FwcF9tZXRyaWNzJyxcbiAgbWluaW1pemU6ICdtaW5pbWl6ZScsXG4gIG1pbnVzOiAnbWludXMnLFxuICBtaW51c0luQ2lyY2xlOiAnbWludXNfaW5fY2lyY2xlJyxcbiAgbWludXNJbkNpcmNsZUZpbGxlZDogJ21pbnVzX2luX2NpcmNsZV9maWxsZWQnLFxuICBtaW51c0luU3F1YXJlOiAnbWludXNfaW5fc3F1YXJlJyxcbiAgbW9iaWxlOiAnbW9iaWxlJyxcbiAgbW9uaXRvcmluZ0FwcDogJ2FwcF9tb25pdG9yaW5nJyxcbiAgbW9vbjogJ21vb24nLFxuICBtb3ZlOiAnbW92ZScsXG4gIG5hbWVzcGFjZTogJ25hbWVzcGFjZScsXG4gIG5lc3RlZDogJ25lc3RlZCcsXG4gIG5ld0NoYXQ6ICduZXdfY2hhdCcsXG4gIG5vZGU6ICdub2RlJyxcbiAgbm90ZWJvb2tBcHA6ICdhcHBfbm90ZWJvb2snLFxuICBudW1iZXI6ICdudW1iZXInLFxuICBvZmZsaW5lOiAnb2ZmbGluZScsXG4gIG9ubGluZTogJ29ubGluZScsXG4gIG91dGxpZXJEZXRlY3Rpb25Kb2I6ICdtbF9vdXRsaWVyX2RldGVjdGlvbl9qb2InLFxuICBwYWNrYWdlOiAncGFja2FnZScsXG4gIHBhY2tldGJlYXRBcHA6ICdhcHBfcGFja2V0YmVhdCcsXG4gIHBhZ2VTZWxlY3Q6ICdwYWdlU2VsZWN0JyxcbiAgcGFnZXNTZWxlY3Q6ICdwYWdlc1NlbGVjdCcsXG4gIHBhbGV0dGU6ICdwYWxldHRlJyxcbiAgcGFwZXJDbGlwOiAncGFwZXJfY2xpcCcsXG4gIHBhcnRpYWw6ICdwYXJ0aWFsJyxcbiAgcGF1c2U6ICdwYXVzZScsXG4gIHBheW1lbnQ6ICdwYXltZW50JyxcbiAgcGVuY2lsOiAncGVuY2lsJyxcbiAgcGVyY2VudDogJ3BlcmNlbnQnLFxuICBwaW46ICdwaW4nLFxuICBwaW5GaWxsZWQ6ICdwaW5fZmlsbGVkJyxcbiAgcGlwZUJyZWFrczogJ3BpcGVCcmVha3MnLFxuICBwaXBlbGluZUFwcDogJ2FwcF9waXBlbGluZScsXG4gIHBpcGVOb0JyZWFrczogJ3BpcGVOb0JyZWFrcycsXG4gIHBpdm90OiAncGl2b3QnLFxuICBwbGF5OiAncGxheScsXG4gIHBsYXlGaWxsZWQ6ICdwbGF5RmlsbGVkJyxcbiAgcGx1czogJ3BsdXMnLFxuICBwbHVzSW5DaXJjbGU6ICdwbHVzX2luX2NpcmNsZScsXG4gIHBsdXNJbkNpcmNsZUZpbGxlZDogJ3BsdXNfaW5fY2lyY2xlX2ZpbGxlZCcsXG4gIHBsdXNJblNxdWFyZTogJ3BsdXNfaW5fc3F1YXJlJyxcbiAgcG9wb3V0OiAncG9wb3V0JyxcbiAgcHVzaDogJ3B1c2gnLFxuICBxdWVzdGlvbkluQ2lyY2xlOiAncXVlc3Rpb25faW5fY2lyY2xlJyxcbiAgcXVvdGU6ICdxdW90ZScsXG4gIHJlY2VudGx5Vmlld2VkQXBwOiAnYXBwX3JlY2VudGx5X3ZpZXdlZCcsXG4gIHJlZnJlc2g6ICdyZWZyZXNoJyxcbiAgcmVncmVzc2lvbkpvYjogJ21sX3JlZ3Jlc3Npb25fam9iJyxcbiAgcmVwb3J0ZXI6ICdyZXBvcnRlcicsXG4gIHJlcG9ydGluZ0FwcDogJ2FwcF9yZXBvcnRpbmcnLFxuICByZXR1cm5LZXk6ICdyZXR1cm5fa2V5JyxcbiAgc2F2ZTogJ3NhdmUnLFxuICBzYXZlZE9iamVjdHNBcHA6ICdhcHBfc2F2ZWRfb2JqZWN0cycsXG4gIHNjYWxlOiAnc2NhbGUnLFxuICBzZWFyY2g6ICdzZWFyY2gnLFxuICBzZWFyY2hQcm9maWxlckFwcDogJ2FwcF9zZWFyY2hfcHJvZmlsZXInLFxuICBzZWN1cml0eUFuYWx5dGljc0FwcDogJ2FwcF9zZWN1cml0eV9hbmFseXRpY3MnLFxuICBzZWN1cml0eUFwcDogJ2FwcF9zZWN1cml0eScsXG4gIHNlY3VyaXR5U2lnbmFsOiAnc2VjdXJpdHlTaWduYWwnLFxuICBzZWN1cml0eVNpZ25hbERldGVjdGVkOiAnc2VjdXJpdHlTaWduYWxEZXRlY3RlZCcsXG4gIHNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQ6ICdzZWN1cml0eVNpZ25hbFJlc29sdmVkJyxcbiAgc2Vzc2lvblZpZXdlcjogJ3Nlc3Npb25WaWV3ZXInLFxuICBzaGFyZDogJ3NoYXJkJyxcbiAgc2hhcmU6ICdzaGFyZScsXG4gIHNpbmdsZU1ldHJpY1ZpZXdlcjogJ3NpbmdsZV9tZXRyaWNfdmlld2VyJyxcbiAgc25vd2ZsYWtlOiAnc25vd2ZsYWtlJyxcbiAgc29ydEFzY2VuZGluZzogJ3NvcnRBc2NlbmRpbmcnLFxuICBzb3J0RGVzY2VuZGluZzogJ3NvcnREZXNjZW5kaW5nJyxcbiAgc29ydERvd246ICdzb3J0X2Rvd24nLFxuICBzb3J0TGVmdDogJ3NvcnRMZWZ0JyxcbiAgc29ydFJpZ2h0OiAnc29ydFJpZ2h0JyxcbiAgc29ydFVwOiAnc29ydF91cCcsXG4gIHNvcnRhYmxlOiAnc29ydGFibGUnLFxuICBzcGFjZXM6ICdzcGFjZXMnLFxuICBzcGFjZXNBcHA6ICdhcHBfc3BhY2VzJyxcbiAgc3BhcmtsZXM6ICdzcGFya2xlcycsXG4gIHNxbEFwcDogJ2FwcF9zcWwnLFxuICBzdGFyRW1wdHk6ICdzdGFyX2VtcHR5JyxcbiAgc3RhckVtcHR5U3BhY2U6ICdzdGFyX2VtcHR5X3NwYWNlJyxcbiAgc3RhckZpbGxlZDogJ3N0YXJfZmlsbGVkJyxcbiAgc3RhckZpbGxlZFNwYWNlOiAnc3Rhcl9maWxsZWRfc3BhY2UnLFxuICBzdGFyTWludXNFbXB0eTogJ3N0YXJfbWludXNfZW1wdHknLFxuICBzdGFyTWludXNGaWxsZWQ6ICdzdGFyX21pbnVzX2ZpbGxlZCcsXG4gIHN0YXJQbHVzRW1wdHk6ICdzdGFyUGx1c0VtcHR5JyxcbiAgc3RhclBsdXNGaWxsZWQ6ICdzdGFyUGx1c0ZpbGxlZCcsXG4gIHN0YXRzOiAnc3RhdHMnLFxuICBzdG9wOiAnc3RvcCcsXG4gIHN0b3BGaWxsZWQ6ICdzdG9wX2ZpbGxlZCcsXG4gIHN0b3BTbGFzaDogJ3N0b3Bfc2xhc2gnLFxuICBzdG9yYWdlOiAnc3RvcmFnZScsXG4gIHN0cmluZzogJ3N0cmluZycsXG4gIHN1Ym1vZHVsZTogJ3N1Ym1vZHVsZScsXG4gIHN1bjogJ3N1bicsXG4gIHN3YXRjaElucHV0OiAnc3dhdGNoX2lucHV0JyxcbiAgLy8gVW5kb2N1bWVudGVkIG9uIHB1cnBvc2UuIEhhcyBhbiBleHRyYSBzdHJva2UgZm9yIEV1aUNvbG9yUGlja2VyXG4gIHN5bWxpbms6ICdzeW1saW5rJyxcbiAgdGFibGVEZW5zaXR5Q29tcGFjdDogJ3RhYmxlX2RlbnNpdHlfY29tcGFjdCcsXG4gIHRhYmxlRGVuc2l0eUV4cGFuZGVkOiAndGFibGVfZGVuc2l0eV9leHBhbmRlZCcsXG4gIHRhYmxlRGVuc2l0eU5vcm1hbDogJ3RhYmxlX2RlbnNpdHlfbm9ybWFsJyxcbiAgdGFibGVPZkNvbnRlbnRzOiAndGFibGVPZkNvbnRlbnRzJyxcbiAgdGFnOiAndGFnJyxcbiAgdGVhcjogJ3RlYXInLFxuICB0ZW1wZXJhdHVyZTogJ3RlbXBlcmF0dXJlJyxcbiAgdGltZWxpbmU6ICd0aW1lbGluZScsXG4gIHRpbWVsaW5lV2l0aEFycm93OiAndGltZWxpbmVXaXRoQXJyb3cnLFxuICB0aW1lbGlvbkFwcDogJ2FwcF90aW1lbGlvbicsXG4gIHRpbWVSZWZyZXNoOiAndGltZVJlZnJlc2gnLFxuICB0aW1lc2xpZGVyOiAndGltZXNsaWRlcicsXG4gIHRyYWluaW5nOiAndHJhaW5pbmcnLFxuICB0cmFuc2l0aW9uTGVmdEluOiAndHJhbnNpdGlvbkxlZnRJbicsXG4gIHRyYW5zaXRpb25MZWZ0T3V0OiAndHJhbnNpdGlvbkxlZnRPdXQnLFxuICB0cmFuc2l0aW9uVG9wSW46ICd0cmFuc2l0aW9uVG9wSW4nLFxuICB0cmFuc2l0aW9uVG9wT3V0OiAndHJhbnNpdGlvblRvcE91dCcsXG4gIHRyYXNoOiAndHJhc2gnLFxuICB1bmZvbGQ6ICd1bmZvbGQnLFxuICB1bmxpbms6ICd1bmxpbmsnLFxuICB1cGdyYWRlQXNzaXN0YW50QXBwOiAnYXBwX3VwZ3JhZGVfYXNzaXN0YW50JyxcbiAgdXB0aW1lQXBwOiAnYXBwX3VwdGltZScsXG4gIHVzZXI6ICd1c2VyJyxcbiAgdXNlckF2YXRhcjogJ3VzZXJBdmF0YXInLFxuICB1c2VyczogJ3VzZXJzJyxcbiAgdXNlcnNSb2xlc0FwcDogJ2FwcF91c2Vyc19yb2xlcycsXG4gIHZlY3RvcjogJ3ZlY3RvcicsXG4gIHZpZGVvUGxheWVyOiAndmlkZW9QbGF5ZXInLFxuICB2aXNBcmVhOiAndmlzX2FyZWEnLFxuICB2aXNBcmVhU3RhY2tlZDogJ3Zpc19hcmVhX3N0YWNrZWQnLFxuICB2aXNCYXJIb3Jpem9udGFsOiAndmlzX2Jhcl9ob3Jpem9udGFsJyxcbiAgdmlzQmFySG9yaXpvbnRhbFN0YWNrZWQ6ICd2aXNfYmFyX2hvcml6b250YWxfc3RhY2tlZCcsXG4gIHZpc0JhclZlcnRpY2FsOiAndmlzX2Jhcl92ZXJ0aWNhbCcsXG4gIHZpc0JhclZlcnRpY2FsU3RhY2tlZDogJ3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZCcsXG4gIHZpc0dhdWdlOiAndmlzX2dhdWdlJyxcbiAgdmlzR29hbDogJ3Zpc19nb2FsJyxcbiAgdmlzTGluZTogJ3Zpc19saW5lJyxcbiAgdmlzTWFwQ29vcmRpbmF0ZTogJ3Zpc19tYXBfY29vcmRpbmF0ZScsXG4gIHZpc01hcFJlZ2lvbjogJ3Zpc19tYXBfcmVnaW9uJyxcbiAgdmlzTWV0cmljOiAndmlzX21ldHJpYycsXG4gIHZpc1BpZTogJ3Zpc19waWUnLFxuICB2aXNUYWJsZTogJ3Zpc190YWJsZScsXG4gIHZpc1RhZ0Nsb3VkOiAndmlzX3RhZ19jbG91ZCcsXG4gIHZpc1RleHQ6ICd2aXNfdGV4dCcsXG4gIHZpc1RpbWVsaW9uOiAndmlzX3RpbWVsaW9uJyxcbiAgdmlzVmVnYTogJ3Zpc192ZWdhJyxcbiAgdmlzVmlzdWFsQnVpbGRlcjogJ3Zpc192aXN1YWxfYnVpbGRlcicsXG4gIHZpc3VhbGl6ZUFwcDogJ2FwcF92aXN1YWxpemUnLFxuICB2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcDogJ2FwcF92dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQnLFxuICB3YXJuaW5nOiAnd2FybmluZycsXG4gIHdhcm5pbmdGaWxsZWQ6ICd3YXJuaW5nRmlsbGVkJyxcbiAgYWxlcnQ6ICd3YXJuaW5nJyxcbiAgLy8gTk9URTogVGhpcyBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMgZm9yIGB3YXJuaW5nYCwgYWRkZWQgZm9yIGxlZ2FjeSBjb21wYXRhYmlsaXR5IHdpdGggRWxhc3RpYyBDaGFydHNcbiAgd2F0Y2hlc0FwcDogJ2FwcF93YXRjaGVzJyxcbiAgd29yZFdyYXA6ICd3b3JkV3JhcCcsXG4gIHdvcmRXcmFwRGlzYWJsZWQ6ICd3b3JkV3JhcERpc2FibGVkJyxcbiAgd29ya3BsYWNlU2VhcmNoQXBwOiAnYXBwX3dvcmtwbGFjZV9zZWFyY2gnLFxuICB3cmVuY2g6ICd3cmVuY2gnLFxuICAvLyBUb2tlbiBJY29uIEltcG9ydHNcbiAgdG9rZW5BbGlhczogJ3Rva2VuQWxpYXMnLFxuICB0b2tlbkFubm90YXRpb246ICd0b2tlbkFubm90YXRpb24nLFxuICB0b2tlbkFycmF5OiAndG9rZW5BcnJheScsXG4gIHRva2VuQmluYXJ5OiAndG9rZW5CaW5hcnknLFxuICB0b2tlbkJvb2xlYW46ICd0b2tlbkJvb2xlYW4nLFxuICB0b2tlbkNsYXNzOiAndG9rZW5DbGFzcycsXG4gIHRva2VuQ29tcGxldGlvblN1Z2dlc3RlcjogJ3Rva2VuQ29tcGxldGlvblN1Z2dlc3RlcicsXG4gIHRva2VuQ29uc3RhbnQ6ICd0b2tlbkNvbnN0YW50JyxcbiAgdG9rZW5EYXRlOiAndG9rZW5EYXRlJyxcbiAgdG9rZW5EaW1lbnNpb246ICd0b2tlbkRpbWVuc2lvbicsXG4gIHRva2VuRWxlbWVudDogJ3Rva2VuRWxlbWVudCcsXG4gIHRva2VuRW51bTogJ3Rva2VuRW51bScsXG4gIHRva2VuRW51bU1lbWJlcjogJ3Rva2VuRW51bU1lbWJlcicsXG4gIHRva2VuRXZlbnQ6ICd0b2tlbkV2ZW50JyxcbiAgdG9rZW5FeGNlcHRpb246ICd0b2tlbkV4Y2VwdGlvbicsXG4gIHRva2VuRmllbGQ6ICd0b2tlbkZpZWxkJyxcbiAgdG9rZW5GaWxlOiAndG9rZW5GaWxlJyxcbiAgdG9rZW5GbGF0dGVuZWQ6ICd0b2tlbkZsYXR0ZW5lZCcsXG4gIHRva2VuRnVuY3Rpb246ICd0b2tlbkZ1bmN0aW9uJyxcbiAgdG9rZW5HZW86ICd0b2tlbkdlbycsXG4gIHRva2VuSGlzdG9ncmFtOiAndG9rZW5IaXN0b2dyYW0nLFxuICB0b2tlbkludGVyZmFjZTogJ3Rva2VuSW50ZXJmYWNlJyxcbiAgdG9rZW5JUDogJ3Rva2VuSVAnLFxuICB0b2tlbkpvaW46ICd0b2tlbkpvaW4nLFxuICB0b2tlbktleTogJ3Rva2VuS2V5JyxcbiAgdG9rZW5LZXl3b3JkOiAndG9rZW5LZXl3b3JkJyxcbiAgdG9rZW5NZXRob2Q6ICd0b2tlbk1ldGhvZCcsXG4gIHRva2VuTWV0cmljQ291bnRlcjogJ3Rva2VuTWV0cmljQ291bnRlcicsXG4gIHRva2VuTWV0cmljR2F1Z2U6ICd0b2tlbk1ldHJpY0dhdWdlJyxcbiAgdG9rZW5Nb2R1bGU6ICd0b2tlbk1vZHVsZScsXG4gIHRva2VuTmFtZXNwYWNlOiAndG9rZW5OYW1lc3BhY2UnLFxuICB0b2tlbk5lc3RlZDogJ3Rva2VuTmVzdGVkJyxcbiAgdG9rZW5OdWxsOiAndG9rZW5OdWxsJyxcbiAgdG9rZW5OdW1iZXI6ICd0b2tlbk51bWJlcicsXG4gIHRva2VuT2JqZWN0OiAndG9rZW5PYmplY3QnLFxuICB0b2tlbk9wZXJhdG9yOiAndG9rZW5PcGVyYXRvcicsXG4gIHRva2VuUGFja2FnZTogJ3Rva2VuUGFja2FnZScsXG4gIHRva2VuUGFyYW1ldGVyOiAndG9rZW5QYXJhbWV0ZXInLFxuICB0b2tlblBlcmNvbGF0b3I6ICd0b2tlblBlcmNvbGF0b3InLFxuICB0b2tlblByb3BlcnR5OiAndG9rZW5Qcm9wZXJ0eScsXG4gIHRva2VuUmFuZ2U6ICd0b2tlblJhbmdlJyxcbiAgdG9rZW5SYW5rRmVhdHVyZTogJ3Rva2VuUmFua0ZlYXR1cmUnLFxuICB0b2tlblJhbmtGZWF0dXJlczogJ3Rva2VuUmFua0ZlYXR1cmVzJyxcbiAgdG9rZW5SZXBvOiAndG9rZW5SZXBvJyxcbiAgdG9rZW5TZWFyY2hUeXBlOiAndG9rZW5TZWFyY2hUeXBlJyxcbiAgdG9rZW5TZW1hbnRpY1RleHQ6ICd0b2tlblNlbWFudGljVGV4dCcsXG4gIHRva2VuU2hhcGU6ICd0b2tlblNoYXBlJyxcbiAgdG9rZW5TdHJpbmc6ICd0b2tlblN0cmluZycsXG4gIHRva2VuU3RydWN0OiAndG9rZW5TdHJ1Y3QnLFxuICB0b2tlblN5bWJvbDogJ3Rva2VuU3ltYm9sJyxcbiAgdG9rZW5UYWc6ICd0b2tlblRhZycsXG4gIHRva2VuVGV4dDogJ3Rva2VuVGV4dCcsXG4gIHRva2VuVG9rZW5Db3VudDogJ3Rva2VuVG9rZW5Db3VudCcsXG4gIHRva2VuVmFyaWFibGU6ICd0b2tlblZhcmlhYmxlJyxcbiAgdG9rZW5WZWN0b3JEZW5zZTogJ3Rva2VuVmVjdG9yRGVuc2UnLFxuICB0b2tlbkRlbnNlVmVjdG9yOiAndG9rZW5WZWN0b3JEZW5zZScsXG4gIC8vIE5PVEU6IFRoaXMgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzIGZvciBgdG9rZW5WZWN0b3JEZW5zZWAsIGFkZGVkIGZvciBsZWdhY3kgY29tcGF0YWJpbGl0eVxuICB0b2tlblZlY3RvclNwYXJzZTogJ3Rva2VuVmVjdG9yU3BhcnNlJ1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgfSBmcm9tICdyZWFjdC1kb20nO1xudmFyIF9xdWV1ZSA9IFtdO1xuZnVuY3Rpb24gcHJvY2Vzc1F1ZXVlKCkge1xuICAvLyB0aGUgcXVldWVkIGZ1bmN0aW9ucyB0cmlnZ2VyIHJlYWN0IHNldFN0YXRlcyB3aGljaCwgaWYgdW5iYXRjaGVkLFxuICAvLyBlYWNoIGNhdXNlIGEgZnVsbCB1cGRhdGUtPnJlbmRlci0+ZG9tIHBhc3MgX3BlciBmdW5jdGlvbl9cbiAgLy8gaW5zdGVhZCwgdGVsbCBSZWFjdCB0byB3YWl0IHVudGlsIGFsbCB1cGRhdGVzIGFyZSBmaW5pc2hlZCBiZWZvcmUgcmUtcmVuZGVyaW5nXG4gIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9xdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgX3F1ZXVlW2ldKCk7XG4gICAgfVxuICAgIF9xdWV1ZS5sZW5ndGggPSAwO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbnF1ZXVlU3RhdGVDaGFuZ2UoZm4pIHtcbiAgaWYgKF9xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICBzZXRUaW1lb3V0KHByb2Nlc3NRdWV1ZSk7XG4gIH1cbiAgX3F1ZXVlLnB1c2goZm4pO1xufSIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIENPTE9SUyA9IFsnZGVmYXVsdCcsICdwcmltYXJ5JywgJ3N1Y2Nlc3MnLCAnYWNjZW50JywgJ3dhcm5pbmcnLCAnZGFuZ2VyJywgJ3RleHQnLCAnc3ViZHVlZCcsICdnaG9zdCcsICdpbmhlcml0J107XG5leHBvcnQgZnVuY3Rpb24gaXNOYW1lZENvbG9yKG5hbWUpIHtcbiAgcmV0dXJuIENPTE9SUy5pbmNsdWRlcyhuYW1lKTtcbn0iLCAidmFyIF90ZW1wbGF0ZU9iamVjdDtcbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoZSwgdCkgeyByZXR1cm4gdCB8fCAodCA9IGUuc2xpY2UoMCkpLCBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHQpIH0gfSkpOyB9XG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxTaXplQ1NTLCBldWlDYW5BbmltYXRlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBpY29uTG9hZGluZ09wYWNpdHkgPSAwLjA1O1xudmFyIGljb25Mb2FkaW5nID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogXCIsIFwiO1xcbiAgfVxcblxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuXCJdKSksIGljb25Mb2FkaW5nT3BhY2l0eSk7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJuamQ3NDktbG9nb0VsYXN0aWNPdXRsaW5lXCIsXG4gIHN0eWxlczogXCIqW2ZpbGxde2ZpbGw6bm9uZSFpbXBvcnRhbnQ7fS5vdXRsaW5le2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOmxvZ29FbGFzdGljT3V0bGluZTtcIlxufSA6IHtcbiAgbmFtZTogXCJuamQ3NDktbG9nb0VsYXN0aWNPdXRsaW5lXCIsXG4gIHN0eWxlczogXCIqW2ZpbGxde2ZpbGw6bm9uZSFpbXBvcnRhbnQ7fS5vdXRsaW5le2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOmxvZ29FbGFzdGljT3V0bGluZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInVhY2pjNS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJjb2xvcjppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlJY29uU3R5bGVzID0gZnVuY3Rpb24gZXVpSWNvblN0eWxlcyhfcmVmMykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMy5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSWNvbjogLyojX19QVVJFX18qL2NzcyhcImZsZXgtc2hyaW5rOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO2ZpbGw6Y3VycmVudENvbG9yO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwgMCk7LmV1aUljb25fX2ZpbGxOZWdhdGl2ZXtmaWxsOlwiLCBldWlUaGVtZS5jb2xvcnMuZGFya2VzdFNoYWRlLCBcIjt9O2xhYmVsOmV1aUljb247XCIpLFxuICAgIC8vIENvbG9yc1xuICAgIGFjY2VudDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuYWNjZW50VGV4dCwgXCI7O2xhYmVsOmFjY2VudDtcIiksXG4gICAgZGFuZ2VyOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYW5nZXJUZXh0LCBcIjs7bGFiZWw6ZGFuZ2VyO1wiKSxcbiAgICBnaG9zdDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZ2hvc3QsIFwiOypbZmlsbF0sLmV1aUljb25fX2ZpbGxOZWdhdGl2ZXtmaWxsOmN1cnJlbnRDb2xvciFpbXBvcnRhbnQ7fTtsYWJlbDpnaG9zdDtcIiksXG4gICAgcHJpbWFyeTogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQsIFwiOztsYWJlbDpwcmltYXJ5O1wiKSxcbiAgICBzdWNjZXNzOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWNjZXNzVGV4dCwgXCI7O2xhYmVsOnN1Y2Nlc3M7XCIpLFxuICAgIHN1YmR1ZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1YmR1ZWRUZXh0LCBcIjs7bGFiZWw6c3ViZHVlZDtcIiksXG4gICAgdGV4dDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGl0bGUsIFwiOypbZmlsbF0sLmV1aUljb25fX2ZpbGxOZWdhdGl2ZXtmaWxsOmN1cnJlbnRDb2xvciFpbXBvcnRhbnQ7fTtsYWJlbDp0ZXh0O1wiKSxcbiAgICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy53YXJuaW5nVGV4dCwgXCI7O2xhYmVsOndhcm5pbmc7XCIpLFxuICAgIGluaGVyaXQ6IF9yZWYyLFxuICAgIGRlZmF1bHQ6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZGVmYXVsdDtcIiksXG4gICAgY3VzdG9tQ29sb3I6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6Y3VzdG9tQ29sb3I7XCIpLFxuICAgIGxvZ29FbGFzdGljT3V0bGluZTogX3JlZixcbiAgICAvLyBTaXplc1xuICAgIG9yaWdpbmFsOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOm9yaWdpbmFsO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemUubSksIFwiO2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MoZXVpVGhlbWUuc2l6ZS5iYXNlKSwgXCI7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhldWlUaGVtZS5zaXplLmwpLCBcIjtsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhldWlUaGVtZS5zaXplLnhsKSwgXCI7bGFiZWw6eGw7XCIpLFxuICAgIHh4bDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhldWlUaGVtZS5zaXplLnh4bCksIFwiO2xhYmVsOnh4bDtcIiksXG4gICAgLy8gVmFyaWFudHNcbiAgICAvLyBBcHAgaWNvbnMgYXJlIHR3by10b25lZC4gVGhpcyBwcm92aWRlcyB0aGUgYmFzZSBjb2xvci5cbiAgICBhcHA6IC8qI19fUFVSRV9fKi9jc3MoXCJmaWxsOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7LmV1aUljb25fX2ZpbGxTZWNvbmRhcnl7ZmlsbDpcIiwgZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0LCBcIjt9O2xhYmVsOmFwcDtcIiksXG4gICAgbG9nbzogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpsb2dvO1wiKSxcbiAgICAvLyBMb2FkaW5nIHN0YXRlc1xuICAgIGlzTG9hZGluZzogLyojX19QVVJFX18qL2NzcyhcIm9wYWNpdHk6XCIsIGljb25Mb2FkaW5nT3BhY2l0eSwgXCI7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3I7Ym9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCwgXCI7O2xhYmVsOmlzTG9hZGluZztcIiksXG4gICAgaXNMb2FkZWQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpQ2FuQW5pbWF0ZSwgXCJ7YW5pbWF0aW9uOlwiLCBpY29uTG9hZGluZywgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ub3JtYWwsIFwiIGVhc2UtaW4gMHMgMSBmb3J3YXJkczt9O2xhYmVsOmlzTG9hZGVkO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlJMThuQ29uc3VtZXIgfSBmcm9tICcuLi9jb250ZXh0JztcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9jb250ZXh0JztcbmltcG9ydCB7IHByb2Nlc3NTdHJpbmdUb0NoaWxkcmVuIH0gZnJvbSAnLi9pMThuX3V0aWwnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmZ1bmN0aW9uIGVycm9yT25NaXNzaW5nVmFsdWVzKHRva2VuKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIkkxOG4gbWFwcGluZyBmb3IgdG9rZW4gXFxcIlwiLmNvbmNhdCh0b2tlbiwgXCJcXFwiIGlzIGEgZm9ybWF0dGluZyBmdW5jdGlvbiBidXQgbm8gdmFsdWVzIHdlcmUgcHJvdmlkZWQuXCIpKTtcbn1cbmZ1bmN0aW9uIGxvb2t1cFRva2VuKG9wdGlvbnMpIHtcbiAgdmFyIHRva2VuID0gb3B0aW9ucy50b2tlbixcbiAgICBpMThuTWFwcGluZyA9IG9wdGlvbnMuaTE4bk1hcHBpbmcsXG4gICAgdmFsdWVEZWZhdWx0ID0gb3B0aW9ucy52YWx1ZURlZmF1bHQsXG4gICAgaTE4bk1hcHBpbmdGdW5jID0gb3B0aW9ucy5pMThuTWFwcGluZ0Z1bmMsXG4gICAgdmFsdWVzID0gb3B0aW9ucy52YWx1ZXMsXG4gICAgcmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7XG4gIHZhciByZW5kZXJhYmxlID0gaTE4bk1hcHBpbmcgJiYgaTE4bk1hcHBpbmdbdG9rZW5dIHx8IHZhbHVlRGVmYXVsdDtcbiAgaWYgKHR5cGVvZiByZW5kZXJhYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXJyb3JPbk1pc3NpbmdWYWx1ZXModG9rZW4pO1xuICAgIH1cbiAgICAvLyBAdHMtaWdub3JlIFR5cGVTY3JpcHQgY29tcGxhaW5zIHRoYXQgYERFRkFVTFRgIGRvZXNuJ3QgaGF2ZSBhIGNhbGwgc2lnbmF0dXJlIGJ1dCB3ZSB2ZXJpZmllZCBgcmVuZGVyYWJsZWAgaXMgYSBmdW5jdGlvblxuICAgIHZhciByZW5kZXJlZCA9IHJlbmRlcmFibGUodmFsdWVzKTtcbiAgICByZXR1cm4gaTE4bk1hcHBpbmdGdW5jICYmIHR5cGVvZiByZW5kZXJlZCA9PT0gJ3N0cmluZycgPyBpMThuTWFwcGluZ0Z1bmMocmVuZGVyZWQpIDogcmVuZGVyZWQ7XG4gIH0gZWxzZSBpZiAodmFsdWVzID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHJlbmRlcmFibGUgIT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGkxOG5NYXBwaW5nRnVuYyAmJiB0eXBlb2YgdmFsdWVEZWZhdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmVuZGVyYWJsZSA9IGkxOG5NYXBwaW5nRnVuYyh2YWx1ZURlZmF1bHQpO1xuICAgIH1cbiAgICAvLyB0aGVyZSdzIGEgaG9sZSBpbiB0aGUgdHlwaW5ncyBoZXJlIGFzIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGkxOG5NYXBwaW5nRnVuY1xuICAgIC8vIHJldHVybmVkIHRoZSBzYW1lIHR5cGUgb2YgdGhlIGRlZmF1bHQgdmFsdWUsIGJ1dCB3ZSBuZWVkIHRvIGtlZXAgdGhhdCBhc3N1bXB0aW9uXG4gICAgcmV0dXJuIHJlbmRlcmFibGU7XG4gIH1cbiAgdmFyIGNoaWxkcmVuID0gcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW4ocmVuZGVyYWJsZSwgdmFsdWVzLCBpMThuTWFwcGluZ0Z1bmMpO1xuICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJykge1xuICAgIC8vIGxpa2V3aXNlLCBgcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW5gIHJldHVybnMgYSBzdHJpbmcgb3IgUmVhY3RDaGlsZFtdIGRlcGVuZGluZyBvblxuICAgIC8vIHRoZSB0eXBlIG9mIGB2YWx1ZXNgLCBzbyB3ZSB3aWxsIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBjb3JyZWN0LlxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuICB2YXIgQ29tcG9uZW50ID0gcmVuZGVyID8gcmVuZGVyKGNoaWxkcmVuKSA6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChGcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pO1xuICB9O1xuXG4gIC8vIHNhbWUgcmVhc29ucyBhcyBhYm92ZSwgd2UgY2FuJ3QgcHJvbWlzZSB0aGUgdHJhbnNmb3JtcyBtYXRjaCB0aGUgZGVmYXVsdCdzIHR5cGVcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgdmFsdWVzKTtcbn1cbmZ1bmN0aW9uIGlzSTE4blRva2Vuc1NoYXBlKHgpIHtcbiAgcmV0dXJuIHgudG9rZW5zICE9IG51bGw7XG59XG5cbi8vIE11c3QgdXNlIHRoZSBnZW5lcmljcyA8VCBleHRlbmRzIHt9PlxuLy8gSWYgaW5zdGVhZCB0eXBlZCB3aXRoIFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50IHRoZXJlIGlzbid0IGZlZWRiYWNrIGdpdmVuIGJhY2sgdG8gdGhlIGRldlxuLy8gd2hlbiB1c2luZyBhIGB2YWx1ZXNgIG9iamVjdCB3aXRoIGEgcmVuZGVyZXIgY2FsbGJhY2suXG52YXIgRXVpSTE4biA9IGZ1bmN0aW9uIEV1aUkxOG4ocHJvcHMpIHtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4bkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoaTE4bkNvbmZpZykge1xuICAgIHZhciBtYXBwaW5nID0gaTE4bkNvbmZpZy5tYXBwaW5nLFxuICAgICAgbWFwcGluZ0Z1bmMgPSBpMThuQ29uZmlnLm1hcHBpbmdGdW5jLFxuICAgICAgcmVuZGVyID0gaTE4bkNvbmZpZy5yZW5kZXI7XG4gICAgaWYgKGlzSTE4blRva2Vuc1NoYXBlKHByb3BzKSkge1xuICAgICAgcmV0dXJuIHByb3BzLmNoaWxkcmVuKHByb3BzLnRva2Vucy5tYXAoZnVuY3Rpb24gKHRva2VuLCBpZHgpIHtcbiAgICAgICAgcmV0dXJuIGxvb2t1cFRva2VuKHtcbiAgICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgICAgaTE4bk1hcHBpbmc6IG1hcHBpbmcsXG4gICAgICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgICAgICB2YWx1ZURlZmF1bHQ6IHByb3BzLmRlZmF1bHRzW2lkeF0sXG4gICAgICAgICAgdmFsdWVzOiBwcm9wcy52YWx1ZXMsXG4gICAgICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgfVxuICAgIHZhciB0b2tlblZhbHVlID0gbG9va3VwVG9rZW4oe1xuICAgICAgdG9rZW46IHByb3BzLnRva2VuLFxuICAgICAgaTE4bk1hcHBpbmc6IG1hcHBpbmcsXG4gICAgICB2YWx1ZURlZmF1bHQ6IHByb3BzLmRlZmF1bHQsXG4gICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgdmFsdWVzOiBwcm9wcy52YWx1ZXMsXG4gICAgICByZW5kZXI6IHJlbmRlclxuICAgIH0pO1xuICAgIGlmIChwcm9wcy5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIHByb3BzLmNoaWxkcmVuKHRva2VuVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdG9rZW5WYWx1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxuLy8gQSBzaW5nbGUgZGVmYXVsdCBjb3VsZCBiZSBhIHN0cmluZywgcmVhY3QgY2hpbGQsIG9yIHJlbmRlciBmdW5jdGlvblxuXG4vLyBBbiBhcnJheSB3aXRoIG11bHRpcGxlIGRlZmF1bHRzIGNhbiBvbmx5IGJlIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgZWxlbWVudHNcblxuZnVuY3Rpb24gdXNlRXVpSTE4bigpIHtcbiAgdmFyIGkxOG5Db25maWcgPSB1c2VDb250ZXh0KEkxOG5Db250ZXh0KTtcbiAgdmFyIG1hcHBpbmcgPSBpMThuQ29uZmlnLm1hcHBpbmcsXG4gICAgbWFwcGluZ0Z1bmMgPSBpMThuQ29uZmlnLm1hcHBpbmdGdW5jLFxuICAgIHJlbmRlciA9IGkxOG5Db25maWcucmVuZGVyO1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcHJvcHMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcHJvcHNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cbiAgaWYgKHR5cGVvZiBwcm9wc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgX3Rva2VuID0gcHJvcHNbMF0sXG4gICAgICBfZGVmYXVsdFZhbHVlID0gcHJvcHNbMV0sXG4gICAgICBfdmFsdWVzID0gcHJvcHNbMl07XG4gICAgcmV0dXJuIGxvb2t1cFRva2VuKHtcbiAgICAgIHRva2VuOiBfdG9rZW4sXG4gICAgICBpMThuTWFwcGluZzogbWFwcGluZyxcbiAgICAgIHZhbHVlRGVmYXVsdDogX2RlZmF1bHRWYWx1ZSxcbiAgICAgIGkxOG5NYXBwaW5nRnVuYzogbWFwcGluZ0Z1bmMsXG4gICAgICB2YWx1ZXM6IF92YWx1ZXMsXG4gICAgICByZW5kZXI6IHJlbmRlclxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHZhciBfcmVmID0gcHJvcHMsXG4gICAgICBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgICAgX3Rva2VucyA9IF9yZWYyWzBdLFxuICAgICAgX2RlZmF1bHRWYWx1ZXMgPSBfcmVmMlsxXTtcbiAgICByZXR1cm4gX3Rva2Vucy5tYXAoZnVuY3Rpb24gKHRva2VuLCBpZHgpIHtcbiAgICAgIHJldHVybiBsb29rdXBUb2tlbih7XG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgaTE4bk1hcHBpbmc6IG1hcHBpbmcsXG4gICAgICAgIHZhbHVlRGVmYXVsdDogX2RlZmF1bHRWYWx1ZXNbaWR4XSxcbiAgICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5leHBvcnQgeyBFdWlJMThuLCB1c2VFdWlJMThuIH07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBJMThuQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHt9KTtcbnZhciBFdWlJMThuUHJvdmlkZXIgPSBJMThuQ29udGV4dC5Qcm92aWRlcixcbiAgRXVpSTE4bkNvbnN1bWVyID0gSTE4bkNvbnRleHQuQ29uc3VtZXI7XG52YXIgRXVpQ29udGV4dCA9IGZ1bmN0aW9uIEV1aUNvbnRleHQoX3JlZikge1xuICB2YXIgX3JlZiRpMThuID0gX3JlZi5pMThuLFxuICAgIGkxOG4gPSBfcmVmJGkxOG4gPT09IHZvaWQgMCA/IHt9IDogX3JlZiRpMThuLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4blByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGkxOG5cbiAgfSwgY2hpbGRyZW4pO1xufTtcbkV1aUNvbnRleHQucHJvcFR5cGVzID0ge1xuICBpMThuOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1hcHBpbmc6IFByb3BUeXBlcy5zaGFwZSh7fSksXG4gICAgbWFwcGluZ0Z1bmM6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogU29tZSBicm93c2VycycgdHJhbnNsYXRpb24gZmVhdHVyZXMgZG9uJ3Qgd29yayB3aXRoIGEgcmVuZGVyZWQgYDxGcmFnbWVudD5gIGNvbXBvbmVudC5cbiAgICAgICAqIFRoZSBgcmVuZGVyYCBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHBhc3MgaW4gYW5vdGhlciBjb21wb25lbnQgaW5zdGVhZCwgZS5nLiBgPGRpdj5gXG4gICAgICAgKi9cbiAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZvcm1hdE51bWJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9ybWF0RGF0ZVRpbWU6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxvY2FsZTogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZFxufTtcbmV4cG9ydCB7IEV1aUNvbnRleHQsIEV1aUkxOG5Db25zdW1lciwgSTE4bkNvbnRleHQgfTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY2xvbmVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNCb29sZWFuLCBpc1N0cmluZywgaXNOdW1iZXIsIGlzVW5kZWZpbmVkIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG4gIHJldHVybiBpc0Jvb2xlYW4odmFsdWUpIHx8IGlzU3RyaW5nKHZhbHVlKSB8fCBpc051bWJlcih2YWx1ZSkgfHwgaXNVbmRlZmluZWQodmFsdWUpO1xufVxuZnVuY3Rpb24gaGFzUHJvcE5hbWUoY2hpbGQpIHtcbiAgcmV0dXJuIGNoaWxkID8gX3R5cGVvZihjaGlsZCkgPT09ICdvYmplY3QnICYmIGNoaWxkLmhhc093blByb3BlcnR5KCdwcm9wTmFtZScpIDogZmFsc2U7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgcGxhY2Vob2xkZXIgdmFsdWVzIGluIGBpbnB1dGAgd2l0aCB0aGVpciBtYXRjaGluZyB2YWx1ZSBpbiBgdmFsdWVzYFxuICogZS5nLiBpbnB1dDonSGVsbG8sIHtuYW1lfScgd2lsbCByZXBsYWNlIGB7bmFtZX1gIHdpdGggYHZhbHVlc1tuYW1lXWBcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHtSZW5kZXJhYmxlVmFsdWVzfSB2YWx1ZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGkxOG5NYXBwaW5nRnVuY1xuICogQHJldHVybnMge3N0cmluZyB8IFJlYWN0LlJlYWN0Q2hpbGRbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTdHJpbmdUb0NoaWxkcmVuKGlucHV0LCB2YWx1ZXMsIGkxOG5NYXBwaW5nRnVuYykge1xuICB2YXIgY2hpbGRyZW4gPSBbXTtcbiAgdmFyIGNoaWxkO1xuICBmdW5jdGlvbiBhcHBlbmRDaGFyVG9DaGlsZChjaGFyKSB7XG4gICAgaWYgKGNoaWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHN0YXJ0aW5nIGEgbmV3IHN0cmluZyBsaXRlcmFsXG4gICAgICBjaGlsZCA9IGNoYXI7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBleGlzdGluZyBzdHJpbmcgbGl0ZXJhbFxuICAgICAgY2hpbGQgPSBjaGlsZCArIGNoYXI7XG4gICAgfSBlbHNlIGlmIChoYXNQcm9wTmFtZShjaGlsZCkpIHtcbiAgICAgIC8vIGFkZGluZyB0byB0aGUgcHJvcE5hbWUgb2YgYSB2YWx1ZXMgbG9va3VwXG4gICAgICBjaGlsZC5wcm9wTmFtZSA9IGNoaWxkLnByb3BOYW1lICsgY2hhcjtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gYXBwZW5kVmFsdWVUb0NoaWxkcmVuKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGlzRWxlbWVudCh2YWx1ZSkpIHtcbiAgICAgIC8vIGFuIGFycmF5IHdpdGggYW55IFJlYWN0RWxlbWVudHMgd2lsbCBiZSBrZXB0IGFzIGFuIGFycmF5XG4gICAgICAvLyBzbyB0aGV5IG5lZWQgdG8gYmUgYXNzaWduZWQgYSBrZXlcbiAgICAgIGNoaWxkcmVuLnB1c2goIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQodmFsdWUsIHtcbiAgICAgICAga2V5OiBjaGlsZHJlbi5sZW5ndGhcbiAgICAgIH0pKTtcbiAgICB9IGVsc2UgaWYgKGhhc1Byb3BOYW1lKHZhbHVlKSkge1xuICAgICAgLy8gdGhpcyB3b24ndCBiZSBjYWxsZWQsIHByb3BOYW1lIGNoaWxkcmVuIGFyZSBjb252ZXJ0ZWQgdG8gYSBSZWFjdENoaWxkIGJlZm9yZSBjYWxsaW5nIHRoaXNcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXZlcnl0aGluZyBlbHNlIGNhbiBnbyBzdHJhaWdodCBpblxuICAgICAgaWYgKGkxOG5NYXBwaW5nRnVuYyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsdWUgPSBpMThuTWFwcGluZ0Z1bmModmFsdWUpO1xuICAgICAgfVxuICAgICAgY2hpbGRyZW4ucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgd2UgZG9uJ3QgZW5jb3VudGVyIGEgbm9uLXByaW1pdGl2ZVxuICAvLyB0aGVuIGBjaGlsZHJlbmAgY2FuIGJlIGNvbmNhdGVuYXRlZCB0b2dldGhlciBhdCB0aGUgZW5kXG4gIHZhciBlbmNvdW50ZXJlZE5vblByaW1pdGl2ZSA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoYXIgPSBpbnB1dFtpXTtcbiAgICBpZiAoY2hhciA9PT0gJ1xcXFwnKSB7XG4gICAgICAvLyBwZWVrIGF0IHRoZSBuZXh0IGNoYXJhY3RlciB0byBrbm93IGlmIHRoaXMgaXMgYW4gZXNjYXBlXG4gICAgICB2YXIgbmV4dENoYXIgPSBpbnB1dFtpICsgMV07XG4gICAgICB2YXIgY2hhclRvQWRkID0gY2hhcjsgLy8gaWYgdGhpcyBpc24ndCBhbiBlc2NhcGUgc2VxdWVuY2UgdGhlbiB3ZSB3aWxsIGFkZCB0aGUgYmFja3NsYXNoXG5cbiAgICAgIGlmIChuZXh0Q2hhciA9PT0gJ3snIHx8IG5leHRDaGFyID09PSAnfScpIHtcbiAgICAgICAgLy8gZXNjYXBpbmcgYSBicmFjZVxuICAgICAgICBpICs9IDE7IC8vIGFkdmFuY2UgcGFzc2VkIHRoZSBicmFjZVxuICAgICAgICBjaGFyVG9BZGQgPSBpbnB1dFtpXTtcbiAgICAgIH1cbiAgICAgIGFwcGVuZENoYXJUb0NoaWxkKGNoYXJUb0FkZCk7XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAneycpIHtcbiAgICAgIGFwcGVuZFZhbHVlVG9DaGlsZHJlbihjaGlsZCk7XG4gICAgICBjaGlsZCA9IHtcbiAgICAgICAgcHJvcE5hbWU6ICcnXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJ30nKSB7XG4gICAgICB2YXIgcHJvcE5hbWUgPSBjaGlsZC5wcm9wTmFtZTtcbiAgICAgIGlmICghdmFsdWVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJLZXkgXFxcIlwiLmNvbmNhdChwcm9wTmFtZSwgXCJcXFwiIG5vdCBmb3VuZCBpbiBcIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KHZhbHVlcywgbnVsbCwgMikpKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSB2YWx1ZXNbcHJvcE5hbWVdO1xuICAgICAgZW5jb3VudGVyZWROb25QcmltaXRpdmUgPSBlbmNvdW50ZXJlZE5vblByaW1pdGl2ZSB8fCAhaXNQcmltaXRpdmUocHJvcFZhbHVlKTtcbiAgICAgIGFwcGVuZFZhbHVlVG9DaGlsZHJlbihwcm9wVmFsdWUpO1xuICAgICAgY2hpbGQgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoYXJUb0NoaWxkKGNoYXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGluY2x1ZGUgYW55IHJlbWFpbmluZyBjaGlsZCB2YWx1ZVxuICBhcHBlbmRWYWx1ZVRvQ2hpbGRyZW4oY2hpbGQpO1xuICByZXR1cm4gZW5jb3VudGVyZWROb25QcmltaXRpdmUgPyBjaGlsZHJlbiA6IGNoaWxkcmVuLmpvaW4oJycpO1xufSIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5leHBvcnQgdmFyIHVzZUxvYWRpbmdBcmlhTGFiZWwgPSBmdW5jdGlvbiB1c2VMb2FkaW5nQXJpYUxhYmVsKCkge1xuICByZXR1cm4gdXNlRXVpSTE4bignZXVpTG9hZGluZ1N0cmluZ3MuYXJpYUxhYmVsJywgJ0xvYWRpbmcnKTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJzaXplXCIsIFwiY2xhc3NOYW1lXCIsIFwiYXJpYS1sYWJlbFwiLCBcImNvbG9yXCIsIFwic3R5bGVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlTG9hZGluZ0FyaWFMYWJlbCB9IGZyb20gJy4vX2xvYWRpbmdfc3RyaW5ncyc7XG5pbXBvcnQgeyBldWlMb2FkaW5nU3Bpbm5lclN0eWxlcywgZXVpU3Bpbm5lckJvcmRlckNvbG9yc0NTUyB9IGZyb20gJy4vbG9hZGluZ19zcGlubmVyLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsncycsICdtJywgJ2wnLCAneGwnLCAneHhsJ107XG5leHBvcnQgdmFyIEV1aUxvYWRpbmdTcGlubmVyID0gZnVuY3Rpb24gRXVpTG9hZGluZ1NwaW5uZXIoX3JlZikge1xuICB2YXIgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBhcmlhTGFiZWwgPSBfcmVmWydhcmlhLWxhYmVsJ10sXG4gICAgY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpTG9hZGluZ1NwaW5uZXInLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlMb2FkaW5nU3Bpbm5lciwgc3R5bGVzW3NpemVdXTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIGN1c3RvbUNvbG9yU3R5bGUgPSBjb2xvciA/IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgc3R5bGUpLCB7fSwge1xuICAgIGJvcmRlckNvbG9yOiBldWlTcGlubmVyQm9yZGVyQ29sb3JzQ1NTKGV1aVRoZW1lLCBjb2xvcilcbiAgfSkgOiBzdHlsZTtcbiAgdmFyIGRlZmF1bHRMYWJlbCA9IHVzZUxvYWRpbmdBcmlhTGFiZWwoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgc3R5bGU6IGN1c3RvbUNvbG9yU3R5bGUsXG4gICAgcm9sZTogXCJwcm9ncmVzc2JhclwiLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwgfHwgZGVmYXVsdExhYmVsXG4gIH0sIHJlc3QpKTtcbn07XG5FdWlMb2FkaW5nU3Bpbm5lci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBib3JkZXIgYW5kIGhpZ2hsaWdodC5cbiAgICAgICAqIEVhY2gga2V5IGFjY2VwdHMgYW55IHZhbGlkIENTUyBjb2xvciB2YWx1ZSBhcyBhIGBzdHJpbmdgXG4gICAgICAgKiBTZWUgI0V1aUxvYWRpbmdTcGlubmVyQ29sb3JcbiAgICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBib3JkZXI6IFByb3BUeXBlcy5hbnksXG4gICAgaGlnaGxpZ2h0OiBQcm9wVHlwZXMuYW55XG4gIH0pXG59OyIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0O1xuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChlLCB0KSB7IHJldHVybiB0IHx8ICh0ID0gZS5zbGljZSgwKSksIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUodCkgfSB9KSk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUNhbkFuaW1hdGUsIGxvZ2ljYWxTaXplQ1NTLCBsb2dpY2FsU2hvcnRoYW5kQ1NTLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xudmFyIF9sb2FkaW5nU3Bpbm5lciA9IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICBmcm9tIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICB9XFxuXFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XFxuICB9XFxuXCJdKSkpO1xudmFyIHNwaW5uZXJTaXplcyA9IHtcbiAgczogJ20nLFxuICBtOiAnYmFzZScsXG4gIGw6ICdsJyxcbiAgeGw6ICd4bCcsXG4gIHh4bDogJ3h4bCdcbn07XG5leHBvcnQgdmFyIGV1aVNwaW5uZXJCb3JkZXJDb2xvcnNDU1MgPSBmdW5jdGlvbiBldWlTcGlubmVyQm9yZGVyQ29sb3JzQ1NTKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgdmFyIGNvbG9ycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciBfY29sb3JzJGJvcmRlciA9IGNvbG9ycy5ib3JkZXIsXG4gICAgYm9yZGVyID0gX2NvbG9ycyRib3JkZXIgPT09IHZvaWQgMCA/IGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlIDogX2NvbG9ycyRib3JkZXIsXG4gICAgX2NvbG9ycyRoaWdobGlnaHQgPSBjb2xvcnMuaGlnaGxpZ2h0LFxuICAgIGhpZ2hsaWdodCA9IF9jb2xvcnMkaGlnaGxpZ2h0ID09PSB2b2lkIDAgPyBldWlUaGVtZS5jb2xvcnMucHJpbWFyeSA6IF9jb2xvcnMkaGlnaGxpZ2h0O1xuICByZXR1cm4gXCJcIi5jb25jYXQoaGlnaGxpZ2h0LCBcIiBcIikuY29uY2F0KGJvcmRlciwgXCIgXCIpLmNvbmNhdChib3JkZXIsIFwiIFwiKS5jb25jYXQoYm9yZGVyKTtcbn07XG5leHBvcnQgdmFyIGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzID0gZnVuY3Rpb24gZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlMb2FkaW5nU3Bpbm5lcjogLyojX19QVVJFX18qL2NzcyhcImZsZXgtc2hyaW5rOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIudGhpY2ssIFwiO1wiLCBsb2dpY2FsU2hvcnRoYW5kQ1NTKCdib3JkZXItY29sb3InLCBldWlTcGlubmVyQm9yZGVyQ29sb3JzQ1NTKGV1aVRoZW1lQ29udGV4dCkpLCBcIiBcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7YW5pbWF0aW9uOlwiLCBfbG9hZGluZ1NwaW5uZXIsIFwiIDAuNnMgaW5maW5pdGUgbGluZWFyO307bGFiZWw6ZXVpTG9hZGluZ1NwaW5uZXI7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5zXSwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMuc10pLCBcIiBib3JkZXItd2lkdGg6XCIsIG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAqIDEuNTtcbiAgICB9KSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MoZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMubV0sIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLm1dKSwgXCIgYm9yZGVyLXdpZHRoOlwiLCBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggKiAxLjU7XG4gICAgfSksIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLmxdLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5sXSksIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy54bF0sIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnhsXSksIFwiOztsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnh4bF0sIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnh4bF0pLCBcIjs7bGFiZWw6eHhsO1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUJ1dHRvbkRpc3BsYXlDb250ZW50U3R5bGVzID0gZnVuY3Rpb24gZXVpQnV0dG9uRGlzcGxheUNvbnRlbnRTdHlsZXMoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlCdXR0b25EaXNwbGF5Q29udGVudDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdoZWlnaHQnLCAnMTAwJScpLCBcIiBcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiBkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7dmVydGljYWwtYWxpZ246bWlkZGxlO2dhcDpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6ZXVpQnV0dG9uRGlzcGxheUNvbnRlbnQ7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgVVJMIGZyb20gJ3VybC1wYXJzZSc7XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVIcmVmKGhyZWYpIHtcbiAgLy8gY2hlY2sgaHJlZiBhbmQgdHJlYXQgaXQgYXMgaW52YWxpZCBpZiBpdCB1c2VzIHRoZSBqYXZhc2NyaXB0OiBwcm90b2NvbFxuICB2YXIgcGFydHMgPSBuZXcgVVJMKGhyZWYpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2NyaXB0LXVybFxuICByZXR1cm4gcGFydHMucHJvdG9jb2wgIT09ICdqYXZhc2NyaXB0Oic7XG59IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpZGVcIiwgXCJpY29uU2l6ZVwiLCBcImNvbG9yXCIsIFwic2l6ZVwiLCBcImZsdXNoXCIsIFwiaXNEaXNhYmxlZFwiLCBcImRpc2FibGVkXCIsIFwiaXNMb2FkaW5nXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInR5cGVcIiwgXCJidXR0b25SZWZcIiwgXCJjb250ZW50UHJvcHNcIiwgXCJ0ZXh0UHJvcHNcIiwgXCJpc1NlbGVjdGVkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzLCBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25EaXNwbGF5Q29udGVudCB9IGZyb20gJy4uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheV9jb250ZW50JztcbmltcG9ydCB7IHVzZUV1aUJ1dHRvbkNvbG9yQ1NTIH0gZnJvbSAnLi4vLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMvYnV0dG9uJztcbmltcG9ydCB7IGlzQnV0dG9uRGlzYWJsZWQgfSBmcm9tICcuLi9idXR0b25fZGlzcGxheS9fYnV0dG9uX2Rpc3BsYXknO1xuaW1wb3J0IHsgZXVpQnV0dG9uRW1wdHlTdHlsZXMgfSBmcm9tICcuL2J1dHRvbl9lbXB0eS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ3hzJywgJ3MnLCAnbSddO1xuZXhwb3J0IHZhciBGTFVTSF9UWVBFUyA9IFsnbGVmdCcsICdyaWdodCcsICdib3RoJ107XG5cbi8qKlxuICogRXh0ZW5kcyBFdWlCdXR0b25Db250ZW50UHJvcHMgd2hpY2ggcHJvdmlkZXNcbiAqIGBpY29uVHlwZWAsIGBpY29uU2lkZWAsIGFuZCBgdGV4dFByb3BzYFxuICovXG5cbmV4cG9ydCB2YXIgRXVpQnV0dG9uRW1wdHkgPSBmdW5jdGlvbiBFdWlCdXR0b25FbXB0eShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgIF9yZWYkaWNvblNpZGUgPSBfcmVmLmljb25TaWRlLFxuICAgIGljb25TaWRlID0gX3JlZiRpY29uU2lkZSA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZiRpY29uU2lkZSxcbiAgICBfcmVmJGljb25TaXplID0gX3JlZi5pY29uU2l6ZSxcbiAgICBpY29uU2l6ZSA9IF9yZWYkaWNvblNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkaWNvblNpemUsXG4gICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGNvbG9yLFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgZmx1c2ggPSBfcmVmLmZsdXNoLFxuICAgIF9pc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIHJlbCA9IF9yZWYucmVsLFxuICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYkdHlwZSxcbiAgICBidXR0b25SZWYgPSBfcmVmLmJ1dHRvblJlZixcbiAgICBjb250ZW50UHJvcHMgPSBfcmVmLmNvbnRlbnRQcm9wcyxcbiAgICB0ZXh0UHJvcHMgPSBfcmVmLnRleHRQcm9wcyxcbiAgICBpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzRGlzYWJsZWQgPSBpc0J1dHRvbkRpc2FibGVkKHtcbiAgICBpc0Rpc2FibGVkOiBfaXNEaXNhYmxlZCB8fCBkaXNhYmxlZCxcbiAgICBocmVmOiBocmVmLFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nXG4gIH0pO1xuICB2YXIgYnV0dG9uQ29sb3JTdHlsZXMgPSB1c2VFdWlCdXR0b25Db2xvckNTUyh7XG4gICAgZGlzcGxheTogJ2VtcHR5J1xuICB9KTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUJ1dHRvbkVtcHR5U3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpQnV0dG9uRW1wdHksIHN0eWxlc1tzaXplXSwgYnV0dG9uQ29sb3JTdHlsZXNbaXNEaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBjb2xvcl0sIGZsdXNoICYmIHN0eWxlcy5mbHVzaCwgZmx1c2ggJiYgc3R5bGVzW2ZsdXNoXSwgaXNEaXNhYmxlZCAmJiBzdHlsZXMuaXNEaXNhYmxlZF07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uRW1wdHknLCBjbGFzc05hbWUpO1xuICB2YXIgY29udGVudENsYXNzTmFtZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25FbXB0eV9fY29udGVudCcsIGNvbnRlbnRQcm9wcyA9PT0gbnVsbCB8fCBjb250ZW50UHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbnRlbnRQcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgdGV4dENsYXNzTmFtZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25FbXB0eV9fdGV4dCcsIHRleHRQcm9wcyAmJiB0ZXh0UHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIGlubmVyTm9kZSA9IF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRGlzcGxheUNvbnRlbnQsIF9leHRlbmRzKHtcbiAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgIGljb25UeXBlOiBpY29uVHlwZSxcbiAgICBpY29uU2lkZTogaWNvblNpZGUsXG4gICAgaWNvblNpemU6IHNpemUgPT09ICd4cycgPyAncycgOiBpY29uU2l6ZSxcbiAgICB0ZXh0UHJvcHM6IHRleHRQcm9wcyA9PT0gZmFsc2UgPyBmYWxzZSA6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGV4dFByb3BzKSwge30sIHtcbiAgICAgIGNsYXNzTmFtZTogdGV4dENsYXNzTmFtZXNcbiAgICB9KVxuICB9LCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNvbnRlbnRQcm9wcyksIHt9LCB7XG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NOYW1lc1xuICB9KSksIGNoaWxkcmVuKTtcblxuICAvLyA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuICBpZiAoaHJlZiAmJiAhaXNEaXNhYmxlZCkge1xuICAgIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImFcIiwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHNlY3VyZVJlbCxcbiAgICAgIHJlZjogYnV0dG9uUmVmXG4gICAgfSwgcmVzdCksIGlubmVyTm9kZSk7XG4gIH1cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICB0eXBlOiB0eXBlLFxuICAgIHJlZjogYnV0dG9uUmVmLFxuICAgIFwiYXJpYS1wcmVzc2VkXCI6IGlzU2VsZWN0ZWRcbiAgfSwgcmVzdCksIGlubmVyTm9kZSk7XG59O1xuRXVpQnV0dG9uRW1wdHkucHJvcFR5cGVzID0ge1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogQW55IG9mIHRoZSBuYW1lZCBjb2xvciBwYWxldHRlIG9wdGlvbnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cbiAgZmx1c2g6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHlwZTogUHJvcFR5cGVzLmFueSxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFt1bmRlZmluZWRdKV0pLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQvY2hpbGRyZW4gb25seSAobm90IGljb24pXG4gICAgICpcbiAgICAgKiBUaGlzIHNwYW4gd3JhcHBlciBjYW4gYmUgcmVtb3ZlZCBieSBwYXNzaW5nIGB0ZXh0UHJvcHM9e2ZhbHNlfWAuXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsU2hvcnRoYW5kQ1NTLCBldWlDYW5BbmltYXRlIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpQnV0dG9uRGlzcGxheVN0eWxlcyB9IGZyb20gJy4uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheS5zdHlsZXMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWx5d2JpZC1mbHVzaFwiLFxuICBzdHlsZXM6IFwicGFkZGluZy1pbmxpbmU6MDtsYWJlbDpmbHVzaDtcIlxufSA6IHtcbiAgbmFtZTogXCIxbHl3YmlkLWZsdXNoXCIsXG4gIHN0eWxlczogXCJwYWRkaW5nLWlubGluZTowO2xhYmVsOmZsdXNoO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUJ1dHRvbkVtcHR5U3R5bGVzID0gZnVuY3Rpb24gZXVpQnV0dG9uRW1wdHlTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcblxuICAvLyBFdWlCdXR0b25FbXB0eSB1c2VzIHRoZSBzYW1lIHNpemUvZm9udCBzdHlsaW5nIGFzIEV1aUJ1dHRvbkRpc3BsYXksXG4gIC8vIGJ1dCBkb2VzIG5vdCBzaGFyZSBlbm91Z2ggb2YgdGhlIHNhbWUgY29sb3JzL3Byb3BzIHRvIHRoZSBwb2ludFxuICAvLyBvZiB1c2luZyB0aGUgYWN0dWFsIGNvbXBvbmVudCAtIHNvIHdlJ2xsIHJldXNlIGl0cyBzdHlsZXMgaW5zdGVhZFxuICB2YXIgZGlzcGxheVN0eWxlcyA9IGV1aUJ1dHRvbkRpc3BsYXlTdHlsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIHtcbiAgICBldWlCdXR0b25FbXB0eTogLyojX19QVVJFX18qL2NzcyhkaXNwbGF5U3R5bGVzLmV1aUJ1dHRvbkRpc3BsYXksIFwiIFwiLCBsb2dpY2FsU2hvcnRoYW5kQ1NTKCdwYWRkaW5nJywgXCIwIFwiLmNvbmNhdChldWlUaGVtZS5zaXplLnMpKSwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0aW9uLWR1cmF0aW9uOlwiLCBldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCI7fTtsYWJlbDpldWlCdXR0b25FbXB0eTtcIiksXG4gICAgaXNEaXNhYmxlZDogZGlzcGxheVN0eWxlcy5pc0Rpc2FibGVkLFxuICAgIC8vIFNpemVzXG4gICAgeHM6IGRpc3BsYXlTdHlsZXMueHMsXG4gICAgczogZGlzcGxheVN0eWxlcy5zLFxuICAgIG06IGRpc3BsYXlTdHlsZXMubSxcbiAgICAvLyBGbHVzaCBzaWRlc1xuICAgIGZsdXNoOiBfcmVmLFxuICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLXJpZ2h0JywgZXVpVGhlbWUuc2l6ZS5zKSwgXCI7O2xhYmVsOmxlZnQ7XCIpLFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgZXVpVGhlbWUuc2l6ZS5zKSwgXCI7O2xhYmVsOnJpZ2h0O1wiKSxcbiAgICBib3RoOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmJvdGg7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2l6ZVwiLCBcImNvbG9yXCIsIFwiaXNEaXNhYmxlZFwiLCBcImRpc2FibGVkXCIsIFwiaHJlZlwiLCBcInR5cGVcIiwgXCJkaXNwbGF5XCIsIFwidGFyZ2V0XCIsIFwicmVsXCIsIFwic2l6ZVwiLCBcImJ1dHRvblJlZlwiLCBcImlzU2VsZWN0ZWRcIiwgXCJpc0xvYWRpbmdcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uLy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgdXNlRXVpQnV0dG9uQ29sb3JDU1MsIHVzZUV1aUJ1dHRvbkZvY3VzQ1NTIH0gZnJvbSAnLi4vLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMvYnV0dG9uJztcbmltcG9ydCB7IGlzQnV0dG9uRGlzYWJsZWQgfSBmcm9tICcuLi9idXR0b25fZGlzcGxheS9fYnV0dG9uX2Rpc3BsYXknO1xuaW1wb3J0IHsgZXVpQnV0dG9uSWNvblN0eWxlcywgX2VtcHR5SG92ZXJTdHlsZXMgfSBmcm9tICcuL2J1dHRvbl9pY29uLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsneHMnLCAncycsICdtJ107XG5leHBvcnQgdmFyIERJU1BMQVlTID0gWydiYXNlJywgJ2VtcHR5JywgJ2ZpbGwnXTtcbmV4cG9ydCB2YXIgRXVpQnV0dG9uSWNvbiA9IGZ1bmN0aW9uIEV1aUJ1dHRvbkljb24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgIF9yZWYkaWNvblNpemUgPSBfcmVmLmljb25TaXplLFxuICAgIGljb25TaXplID0gX3JlZiRpY29uU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRpY29uU2l6ZSxcbiAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdwcmltYXJ5JyA6IF9yZWYkY29sb3IsXG4gICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgIF9yZWYkZGlzcGxheSA9IF9yZWYuZGlzcGxheSxcbiAgICBkaXNwbGF5ID0gX3JlZiRkaXNwbGF5ID09PSB2b2lkIDAgPyAnZW1wdHknIDogX3JlZiRkaXNwbGF5LFxuICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIHJlbCA9IF9yZWYucmVsLFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAneHMnIDogX3JlZiRzaXplLFxuICAgIGJ1dHRvblJlZiA9IF9yZWYuYnV0dG9uUmVmLFxuICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNEaXNhYmxlZCA9IGlzQnV0dG9uRGlzYWJsZWQoe1xuICAgIGlzRGlzYWJsZWQ6IF9pc0Rpc2FibGVkIHx8IGRpc2FibGVkLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdcbiAgfSk7XG4gIHZhciBhcmlhSGlkZGVuID0gcmVzdFsnYXJpYS1oaWRkZW4nXTtcbiAgdmFyIGlzQXJpYUhpZGRlbiA9IGFyaWFIaWRkZW4gPT09ICd0cnVlJyB8fCBhcmlhSGlkZGVuID09PSB0cnVlO1xuICBpZiAoIXJlc3RbJ2FyaWEtbGFiZWwnXSAmJiAhcmVzdFsnYXJpYS1sYWJlbGxlZGJ5J10gJiYgIWlzQXJpYUhpZGRlbikge1xuICAgIGNvbnNvbGUud2FybihcIkV1aUJ1dHRvbkljb24gcmVxdWlyZXMgYXJpYS1sYWJlbCBvciBhcmlhLWxhYmVsbGVkYnkgdG8gYmUgc3BlY2lmaWVkIGJlY2F1c2UgaWNvbi1vbmx5XFxuICAgICAgYnV0dG9ucyBhcmUgc2NyZWVuLXJlYWRlci1pbmFjY2Vzc2libGUgd2l0aG91dCB0aGVtLlwiKTtcbiAgfVxuICB2YXIgYnV0dG9uQ29sb3JTdHlsZXMgPSB1c2VFdWlCdXR0b25Db2xvckNTUyh7XG4gICAgZGlzcGxheTogZGlzcGxheVxuICB9KTtcbiAgdmFyIGJ1dHRvbkZvY3VzU3R5bGUgPSB1c2VFdWlCdXR0b25Gb2N1c0NTUygpO1xuICB2YXIgZW1wdHlIb3ZlclN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKF9lbXB0eUhvdmVyU3R5bGVzKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUJ1dHRvbkljb25TdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlCdXR0b25JY29uLCBzdHlsZXNbc2l6ZV0sIGJ1dHRvbkNvbG9yU3R5bGVzW2lzRGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogY29sb3JdLCBidXR0b25Gb2N1c1N0eWxlLCBkaXNwbGF5ID09PSAnZW1wdHknICYmICFpc0Rpc2FibGVkICYmIGVtcHR5SG92ZXJTdHlsZXNbY29sb3JdLCBpc0Rpc2FibGVkICYmIHN0eWxlcy5pc0Rpc2FibGVkXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25JY29uJywgY2xhc3NOYW1lKTtcblxuICAvLyBBZGQgYW4gaWNvbiB0byB0aGUgYnV0dG9uIGlmIG9uZSBleGlzdHMuXG4gIHZhciBidXR0b25JY29uO1xuICBpZiAoaWNvblR5cGUgJiYgIWlzTG9hZGluZykge1xuICAgIGJ1dHRvbkljb24gPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlCdXR0b25JY29uX19pY29uXCIsXG4gICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgIHNpemU6IGljb25TaXplLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG4gICAgfSk7XG4gIH1cbiAgaWYgKGljb25UeXBlICYmIGlzTG9hZGluZykge1xuICAgIC8vIGBvcmlnaW5hbGAgc2l6ZSBkb2Vzbid0IGV4aXN0IGluIGBFdWlMb2FkaW5nU3Bpbm5lcmBcbiAgICAvLyB3aGVuIHRoZSBgaWNvblNpemVgIGlzIGBvcmlnaW5hbGAgd2UgZG9uJ3QgcGFzcyBhbnkgc2l6ZSB0byB0aGUgYEV1aUxvYWRpbmdTcGlubmVyYFxuICAgIC8vIHNvIGl0IGdldHMgdGhlIGRlZmF1bHQgc2l6ZVxuICAgIHZhciBsb2FkaW5nU2l6ZSA9IGljb25TaXplID09PSAnb3JpZ2luYWwnID8gdW5kZWZpbmVkIDogaWNvblNpemU7XG5cbiAgICAvLyBXaGVuIHRoZSBidXR0b24gaXMgZGlzYWJsZWQgdGhlIHRleHQgZ2V0cyBncmF5XG4gICAgLy8gYW5kIGluIHNvbWUgYnV0dG9ucyB0aGUgYmFja2dyb3VuZCBnZXRzIGEgbGlnaHQgZ3JheVxuICAgIC8vIGZvciBiZXR0ZXIgY29udHJhc3Qgd2Ugd2FudCB0byBjaGFuZ2UgdGhlIGJvcmRlciBvZiB0aGUgc3Bpbm5lclxuICAgIC8vIHRvIGhhdmUgdGhlIHNhbWUgY29sb3Igb2YgdGhlIHRleHQuIFRoaXMgd2F5IHdlIGVuc3VyZSB0aGUgYm9yZGVyc1xuICAgIC8vIGFyZSBhbHdheXMgdmlzaWJsZS4gVGhlIGRlZmF1bHQgc3Bpbm5lciBjb2xvciBjb3VsZCBiZSB2ZXJ5IGxpZ2h0LlxuICAgIHZhciBsb2FkaW5nU3Bpbm5lckNvbG9yID0gaXNEaXNhYmxlZCA/IHtcbiAgICAgIGJvcmRlcjogJ2N1cnJlbnRjb2xvcidcbiAgICB9IDogdW5kZWZpbmVkO1xuICAgIGJ1dHRvbkljb24gPSBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICBzaXplOiBsb2FkaW5nU2l6ZSxcbiAgICAgIGNvbG9yOiBsb2FkaW5nU3Bpbm5lckNvbG9yXG4gICAgfSk7XG4gIH1cblxuICAvLyA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuICBpZiAoaHJlZiAmJiAhaXNEaXNhYmxlZCkge1xuICAgIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImFcIiwgX2V4dGVuZHMoe1xuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICB0YWJJbmRleDogaXNBcmlhSGlkZGVuID8gLTEgOiB1bmRlZmluZWQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHNlY3VyZVJlbCxcbiAgICAgIHJlZjogYnV0dG9uUmVmXG4gICAgfSwgcmVzdCksIGJ1dHRvbkljb24pO1xuICB9XG4gIHZhciBidXR0b25UeXBlO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgdGFiSW5kZXg6IGlzQXJpYUhpZGRlbiA/IC0xIDogdW5kZWZpbmVkLFxuICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBcImFyaWEtcHJlc3NlZFwiOiBpc1NlbGVjdGVkLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgcmVmOiBidXR0b25SZWZcbiAgfSwgcmVzdCksIGJ1dHRvbkljb24pO1xufTtcbkV1aUJ1dHRvbkljb24ucHJvcFR5cGVzID0ge1xuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogQW55IG9mIHRoZSBuYW1lZCBjb2xvciBwYWxldHRlIG9wdGlvbnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE92ZXJhbGwgc2l6ZSBvZiBidXR0b24uXG4gICAgICogTWF0Y2hlcyB0aGUgc2l6ZXMgb2Ygb3RoZXIgRXVpQnV0dG9uc1xuICAgICAqL1xuICAvKipcbiAgICAgKiBPdmVyYWxsIHNpemUgb2YgYnV0dG9uLlxuICAgICAqIE1hdGNoZXMgdGhlIHNpemVzIG9mIG90aGVyIEV1aUJ1dHRvbnNcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogU2l6ZSBvZiB0aGUgaWNvbiBvbmx5LlxuICAgICAqIFRoaXMgd2lsbCBub3QgYWZmZWN0IHRoZSBvdmVyYWxsIHNpemUgb2YgdGhlIGJ1dHRvblxuICAgICAqL1xuICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXNwbGF5IHN0eWxlIGZvciBtYXRjaGluZyBvdGhlciBFdWlCdXR0b24gdHlwZXMuXG4gICAgICogYGJhc2VgIGlzIGVxdWl2YWxlbnQgdG8gYSB0eXBpY2FsIEV1aUJ1dHRvblxuICAgICAqIGBmaWxsYCBpcyBlcXVpdmFsZW50IHRvIGEgZmlsbGVkIEV1aUJ1dHRvblxuICAgICAqIGBlbXB0eWAgKGRlZmF1bHQpIGlzIGVxdWl2YWxlbnQgdG8gYW4gRXVpQnV0dG9uRW1wdHlcbiAgICAgKi9cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzcGxheSBzdHlsZSBmb3IgbWF0Y2hpbmcgb3RoZXIgRXVpQnV0dG9uIHR5cGVzLlxuICAgICAqIGBiYXNlYCBpcyBlcXVpdmFsZW50IHRvIGEgdHlwaWNhbCBFdWlCdXR0b25cbiAgICAgKiBgZmlsbGAgaXMgZXF1aXZhbGVudCB0byBhIGZpbGxlZCBFdWlCdXR0b25cbiAgICAgKiBgZW1wdHlgIChkZWZhdWx0KSBpcyBlcXVpdmFsZW50IHRvIGFuIEV1aUJ1dHRvbkVtcHR5XG4gICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbFNpemVDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBCVVRUT05fQ09MT1JTLCBldWlCdXR0b25FbXB0eUNvbG9yLCBldWlCdXR0b25TaXplTWFwIH0gZnJvbSAnLi4vLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMvYnV0dG9uJztcbmltcG9ydCB7IGV1aUJ1dHRvbkJhc2VDU1MgfSBmcm9tICcuLi9idXR0b25fZGlzcGxheS9fYnV0dG9uX2Rpc3BsYXkuc3R5bGVzJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjg1OTVwOS1pc0Rpc2FibGVkXCIsXG4gIHN0eWxlczogXCJjdXJzb3I6bm90LWFsbG93ZWQ7bGFiZWw6aXNEaXNhYmxlZDtcIlxufSA6IHtcbiAgbmFtZTogXCI4NTk1cDktaXNEaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiY3Vyc29yOm5vdC1hbGxvd2VkO2xhYmVsOmlzRGlzYWJsZWQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQnV0dG9uSWNvblN0eWxlcyA9IGZ1bmN0aW9uIGV1aUJ1dHRvbkljb25TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBzaXplcyA9IGV1aUJ1dHRvblNpemVNYXAoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIHtcbiAgICBldWlCdXR0b25JY29uOiAvKiNfX1BVUkVfXyovY3NzKGV1aUJ1dHRvbkJhc2VDU1MoKSwgXCJkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kOyY+c3Zne3BvaW50ZXItZXZlbnRzOm5vbmU7fTtsYWJlbDpldWlCdXR0b25JY29uO1wiKSxcbiAgICBpc0Rpc2FibGVkOiBfcmVmLFxuICAgIC8vIFNpemVzXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1Moc2l6ZXMueHMuaGVpZ2h0KSwgXCIgYm9yZGVyLXJhZGl1czpcIiwgc2l6ZXMueHMucmFkaXVzLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1Moc2l6ZXMucy5oZWlnaHQpLCBcIiBib3JkZXItcmFkaXVzOlwiLCBzaXplcy5zLnJhZGl1cywgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1Moc2l6ZXMubS5oZWlnaHQpLCBcIiBib3JkZXItcmFkaXVzOlwiLCBzaXplcy5tLnJhZGl1cywgXCI7O2xhYmVsOm07XCIpXG4gIH07XG59O1xuZXhwb3J0IHZhciBfZW1wdHlIb3ZlclN0eWxlcyA9IGZ1bmN0aW9uIF9lbXB0eUhvdmVyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4gQlVUVE9OX0NPTE9SUy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlcywgY29sb3IpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZXMpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBjb2xvciwgLyojX19QVVJFX18qL2NzcyhcIiY6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpQnV0dG9uRW1wdHlDb2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKS5iYWNrZ3JvdW5kQ29sb3IsIFwiO31cIikpKTtcbiAgfSwge30pO1xufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBmdW5jdGlvbiB1c2VJbm5lclRleHQoaW5uZXJUZXh0RmFsbGJhY2spIHtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG51bGwpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHJlZiA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0UmVmID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShpbm5lclRleHRGYWxsYmFjayksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIGlubmVyVGV4dCA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0SW5uZXJUZXh0ID0gX3VzZVN0YXRlNFsxXTtcbiAgdmFyIHVwZGF0ZUlubmVyVGV4dCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKCFub2RlKSByZXR1cm47XG4gICAgc2V0SW5uZXJUZXh0KFxuICAgIC8vIENoZWNrIGZvciBgaW5uZXJUZXh0YCBpbXBsZW1lbnRhdGlvbiByYXRoZXIgdGhhbiBhIHNpbXBsZSBPUiBjaGVja1xuICAgIC8vIGJlY2F1c2UgaW4gcmVhbCBjYXNlcyB0aGUgcmVzdWx0IG9mIGBpbm5lclRleHRgIGNvdWxkIGNvcnJlY3RseSBiZSBgbnVsbGBcbiAgICAvLyB3aGlsZSB0aGUgcmVzdWx0IG9mIGB0ZXh0Q29udGVudGAgY291bGQgY29ycmVjdGx5IGJlIG5vbi1gbnVsbGAgZHVlIHRvXG4gICAgLy8gZGlmZmVyaW5nIHJlbGlhbmNlIG9uIGJyb3dzZXIgbGF5b3V0IGNhbGN1bGF0aW9ucy5cbiAgICAvLyBXZSBwcmVmZXIgdGhlIHJlc3VsdCBvZiBgaW5uZXJUZXh0YCwgaWYgYXZhaWxhYmxlLlxuICAgICdpbm5lclRleHQnIGluIG5vZGUgPyBub2RlLmlubmVyVGV4dCA6IG5vZGUudGV4dENvbnRlbnQgfHwgaW5uZXJUZXh0RmFsbGJhY2spO1xuICB9LCBbaW5uZXJUZXh0RmFsbGJhY2tdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zTGlzdCkge1xuICAgICAgaWYgKG11dGF0aW9uc0xpc3QubGVuZ3RoKSB1cGRhdGVJbm5lclRleHQocmVmKTtcbiAgICB9KTtcbiAgICBpZiAocmVmKSB7XG4gICAgICB1cGRhdGVJbm5lclRleHQocmVmKTtcbiAgICAgIG9ic2VydmVyLm9ic2VydmUocmVmLCB7XG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfTtcbiAgfSwgW3JlZiwgdXBkYXRlSW5uZXJUZXh0XSk7XG4gIHJldHVybiBbc2V0UmVmLCBpbm5lclRleHRdO1xufVxuZXhwb3J0IHZhciBFdWlJbm5lclRleHQgPSBmdW5jdGlvbiBFdWlJbm5lclRleHQoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGZhbGxiYWNrID0gX3JlZi5mYWxsYmFjaztcbiAgdmFyIF91c2VJbm5lclRleHQgPSB1c2VJbm5lclRleHQoZmFsbGJhY2spLFxuICAgIF91c2VJbm5lclRleHQyID0gX3NsaWNlZFRvQXJyYXkoX3VzZUlubmVyVGV4dCwgMiksXG4gICAgcmVmID0gX3VzZUlubmVyVGV4dDJbMF0sXG4gICAgaW5uZXJUZXh0ID0gX3VzZUlubmVyVGV4dDJbMV07XG4gIHJldHVybiBjaGlsZHJlbihyZWYsIGlubmVyVGV4dCk7XG59O1xuRXVpSW5uZXJUZXh0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGZhbGxiYWNrOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHNoYWRlLCB0aW50LCBkYXJrZW4sIHRyYW5zcGFyZW50aXplLCBtYWtlSGlnaENvbnRyYXN0Q29sb3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBtYXRoV2l0aFVuaXRzLCBldWlDYW5BbmltYXRlLCBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aUJ1dHRvbkNvbG9yIH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuXG4vLyBUaGVyZSBhcmUgbXVsdGlwbGUgY29tcG9uZW50cyB0aGF0IG9ubHkgbmVlZCB0aGUgZm9ybSBtYXgtd2lkdGggc2l6ZSAmXG4vLyBkb24ndCBuZWVkIHRoZSBleHRyYSBvdmVyaGVhZC9jb2xvciBjb21wdXRpbmcgZXhwZW5zZSBvZiBldmVyeSBmb3JtIHZhci5cbi8vIEZvciBtaWNyb3BlcmYsIHdlJ3JlIG1ha2luZyB0aGlzIGl0cyBvd24gdXRpbFxuZXhwb3J0IHZhciBldWlGb3JtTWF4V2lkdGggPSBmdW5jdGlvbiBldWlGb3JtTWF4V2lkdGgoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICByZXR1cm4gbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLmJhc2UsIGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHggKiAyNTtcbiAgfSk7XG59O1xuZXhwb3J0IHZhciBldWlGb3JtVmFyaWFibGVzID0gZnVuY3Rpb24gZXVpRm9ybVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG4gIHZhciBpc0NvbG9yRGFyayA9IGNvbG9yTW9kZSA9PT0gJ0RBUksnO1xuICB2YXIgYmFja2dyb3VuZENvbG9yID0gaXNDb2xvckRhcmsgPyBzaGFkZShldWlUaGVtZS5jb2xvcnMubGlnaHRlc3RTaGFkZSwgMC40KSA6IHRpbnQoZXVpVGhlbWUuY29sb3JzLmxpZ2h0ZXN0U2hhZGUsIDAuNik7XG4gIHZhciBjb250cm9sSGVpZ2h0ID0gZXVpVGhlbWUuc2l6ZS54eGw7XG4gIHZhciBjb250cm9sQ29tcHJlc3NlZEhlaWdodCA9IGV1aVRoZW1lLnNpemUueGw7XG4gIHZhciBzaXplcyA9IHtcbiAgICBtYXhXaWR0aDogZXVpRm9ybU1heFdpZHRoKGV1aVRoZW1lQ29udGV4dCksXG4gICAgY29udHJvbEhlaWdodDogY29udHJvbEhlaWdodCxcbiAgICBjb250cm9sQ29tcHJlc3NlZEhlaWdodDogY29udHJvbENvbXByZXNzZWRIZWlnaHQsXG4gICAgY29udHJvbFBhZGRpbmc6IGV1aVRoZW1lLnNpemUubSxcbiAgICBjb250cm9sQ29tcHJlc3NlZFBhZGRpbmc6IGV1aVRoZW1lLnNpemUucyxcbiAgICBjb250cm9sQm9yZGVyUmFkaXVzOiBldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSxcbiAgICBjb250cm9sQ29tcHJlc3NlZEJvcmRlclJhZGl1czogZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCxcbiAgICBpY29uQWZmb3JkYW5jZTogbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLmJhc2UsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAqIDEuNTtcbiAgICB9KSxcbiAgICBpY29uQ29tcHJlc3NlZEFmZm9yZGFuY2U6IG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuc2l6ZS5tLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggKiAxLjU7XG4gICAgfSlcbiAgfTtcbiAgdmFyIGNvbG9ycyA9IHtcbiAgICB0ZXh0Q29sb3I6IGV1aVRoZW1lLmNvbG9ycy50ZXh0LFxuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgIGJhY2tncm91bmREaXNhYmxlZENvbG9yOiBkYXJrZW4oZXVpVGhlbWUuY29sb3JzLmxpZ2h0ZXN0U2hhZGUsIDAuMDUpLFxuICAgIGJhY2tncm91bmRSZWFkT25seUNvbG9yOiBldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSxcbiAgICBib3JkZXJDb2xvcjogdHJhbnNwYXJlbnRpemUoY29sb3JNb2RlID09PSAnREFSSycgPyBldWlUaGVtZS5jb2xvcnMuZ2hvc3QgOiBkYXJrZW4oZXVpVGhlbWUuYm9yZGVyLmNvbG9yLCA0KSwgMC4xKSxcbiAgICBjb250cm9sRGlzYWJsZWRDb2xvcjogZXVpVGhlbWUuY29sb3JzLm1lZGl1bVNoYWRlLFxuICAgIGNvbnRyb2xCb3hTaGFkb3c6ICcwIDAgdHJhbnNwYXJlbnQnLFxuICAgIGNvbnRyb2xQbGFjZWhvbGRlclRleHQ6IG1ha2VIaWdoQ29udHJhc3RDb2xvcihldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQpKGJhY2tncm91bmRDb2xvciksXG4gICAgYXBwZW5kUHJlcGVuZEJhY2tncm91bmQ6IGlzQ29sb3JEYXJrID8gc2hhZGUoZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUsIDAuMTUpIDogdGludChldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgMC41KVxuICB9O1xuICB2YXIgY29udHJvbExheW91dCA9IHtcbiAgICBjb250cm9sTGF5b3V0R3JvdXBJbnB1dEhlaWdodDogbWF0aFdpdGhVbml0cyhjb250cm9sSGVpZ2h0LCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggLSAyO1xuICAgIH0pLFxuICAgIGNvbnRyb2xMYXlvdXRHcm91cElucHV0Q29tcHJlc3NlZEhlaWdodDogbWF0aFdpdGhVbml0cyhjb250cm9sQ29tcHJlc3NlZEhlaWdodCwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4IC0gMjtcbiAgICB9KSxcbiAgICBjb250cm9sTGF5b3V0R3JvdXBJbnB1dENvbXByZXNzZWRCb3JkZXJSYWRpdXM6IGV1aVRoZW1lLmJvcmRlci5yYWRpdXMuc21hbGxcbiAgfTtcbiAgdmFyIGljb25TaXplcyA9IHtcbiAgICBjb250cm9sSWNvblNpemU6IHtcbiAgICAgIHM6IGV1aVRoZW1lLnNpemUubSxcbiAgICAgIG06IGV1aVRoZW1lLnNpemUuYmFzZSxcbiAgICAgIGw6IGV1aVRoZW1lLnNpemUubCxcbiAgICAgIHhsOiBldWlUaGVtZS5zaXplLnhsLFxuICAgICAgeHhsOiBldWlUaGVtZS5zaXplLnh4bFxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgc2l6ZXMpLCBjb2xvcnMpLCBpY29uU2l6ZXMpLCBjb250cm9sTGF5b3V0KSwge30sIHtcbiAgICBhbmltYXRpb25UaW1pbmc6IFwiXCIuY29uY2F0KGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBlYXNlLWluXCIpXG4gIH0pO1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUNvbnRyb2xTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGZvcm0gPSBldWlGb3JtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHJldHVybiB7XG4gICAgc2hhcmVkOiBcIlxcbiAgICAgIFwiLmNvbmNhdChldWlGb3JtQ29udHJvbFRleHQoZXVpVGhlbWVDb250ZXh0KSwgXCJcXG4gICAgICBcIikuY29uY2F0KGV1aUZvcm1Db250cm9sRGVmYXVsdFNoYWRvdyhldWlUaGVtZUNvbnRleHQpLCBcIlxcbiAgICBcIiksXG4gICAgLy8gU2l6ZXNcbiAgICB1bmNvbXByZXNzZWQ6IFwiXFxuICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGZvcm0uY29udHJvbEhlaWdodCksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLXZlcnRpY2FsJywgZm9ybS5jb250cm9sUGFkZGluZyksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBcImNhbGMoXCIuY29uY2F0KGZvcm0uY29udHJvbFBhZGRpbmcsIFwiICsgKFwiKS5jb25jYXQoZm9ybS5pY29uQWZmb3JkYW5jZSwgXCIgKiB2YXIoLS1ldWlGb3JtQ29udHJvbExlZnRJY29uc0NvdW50LCAwKSkpXCIpKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctcmlnaHQnLCBcImNhbGMoXCIuY29uY2F0KGZvcm0uY29udHJvbFBhZGRpbmcsIFwiICsgKFwiKS5jb25jYXQoZm9ybS5pY29uQWZmb3JkYW5jZSwgXCIgKiB2YXIoLS1ldWlGb3JtQ29udHJvbFJpZ2h0SWNvbnNDb3VudCwgMCkpKVwiKSksIFwiXFxuICAgICAgYm9yZGVyLXJhZGl1czogXCIpLmNvbmNhdChmb3JtLmNvbnRyb2xCb3JkZXJSYWRpdXMsIFwiO1xcbiAgICBcIiksXG4gICAgY29tcHJlc3NlZDogXCJcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0JywgZm9ybS5jb250cm9sQ29tcHJlc3NlZEhlaWdodCksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLXZlcnRpY2FsJywgZm9ybS5jb250cm9sQ29tcHJlc3NlZFBhZGRpbmcpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgXCJjYWxjKFwiLmNvbmNhdChmb3JtLmNvbnRyb2xDb21wcmVzc2VkUGFkZGluZywgXCIgKyAoXCIpLmNvbmNhdChmb3JtLmljb25Db21wcmVzc2VkQWZmb3JkYW5jZSwgXCIgKiB2YXIoLS1ldWlGb3JtQ29udHJvbExlZnRJY29uc0NvdW50LCAwKSkpXCIpKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctcmlnaHQnLCBcImNhbGMoXCIuY29uY2F0KGZvcm0uY29udHJvbENvbXByZXNzZWRQYWRkaW5nLCBcIiArIChcIikuY29uY2F0KGZvcm0uaWNvbkNvbXByZXNzZWRBZmZvcmRhbmNlLCBcIiAqIHZhcigtLWV1aUZvcm1Db250cm9sUmlnaHRJY29uc0NvdW50LCAwKSkpXCIpKSwgXCJcXG4gICAgICBib3JkZXItcmFkaXVzOiBcIikuY29uY2F0KGZvcm0uY29udHJvbENvbXByZXNzZWRCb3JkZXJSYWRpdXMsIFwiO1xcbiAgICBcIiksXG4gICAgLy8gSW4gZ3JvdXBcbiAgICBpbkdyb3VwOiBcIlxcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCAnMTAwJScpLCBcIlxcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMDtcXG4gICAgXCIpLFxuICAgIC8vIFdpZHRoc1xuICAgIGZvcm1XaWR0aDogXCJcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygnbWF4LXdpZHRoJywgZm9ybS5tYXhXaWR0aCksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiXFxuICAgIFwiKSxcbiAgICBmdWxsV2lkdGg6IFwiXFxuICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiXFxuICAgIFwiKSxcbiAgICAvLyBTdGF0ZXNcbiAgICBpbnZhbGlkOiBldWlGb3JtQ29udHJvbEludmFsaWRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBmb2N1czogZXVpRm9ybUNvbnRyb2xGb2N1c1N0eWxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIGRpc2FibGVkOiBldWlGb3JtQ29udHJvbERpc2FibGVkU3R5bGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgcmVhZE9ubHk6IGV1aUZvcm1Db250cm9sUmVhZE9ubHlTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBhdXRvRmlsbDogZXVpRm9ybUNvbnRyb2xBdXRvRmlsbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpXG4gIH07XG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbFRleHQgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbFRleHQoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIF9ldWlGb250U2l6ZSA9IGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSxcbiAgICBmb250U2l6ZSA9IF9ldWlGb250U2l6ZS5mb250U2l6ZTtcbiAgdmFyIGZvcm0gPSBldWlGb3JtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHJldHVybiBcIlxcbiAgICBmb250LWZhbWlseTogXCIuY29uY2F0KGV1aVRoZW1lLmZvbnQuZmFtaWx5LCBcIjtcXG4gICAgZm9udC1zaXplOiBcIikuY29uY2F0KGZvbnRTaXplLCBcIjtcXG4gICAgY29sb3I6IFwiKS5jb25jYXQoZm9ybS50ZXh0Q29sb3IsIFwiO1xcblxcbiAgICBcIikuY29uY2F0KGV1aVBsYWNlaG9sZGVyUGVyQnJvd3NlcihcIlxcbiAgICAgIGNvbG9yOiBcIi5jb25jYXQoZm9ybS5jb250cm9sUGxhY2Vob2xkZXJUZXh0LCBcIjtcXG4gICAgICBvcGFjaXR5OiAxO1xcbiAgICBcIikpLCBcIlxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUNvbnRyb2xEZWZhdWx0U2hhZG93ID0gZnVuY3Rpb24gZXVpRm9ybUNvbnRyb2xEZWZhdWx0U2hhZG93KGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF9yZWYyJHdpdGhCb3JkZXIgPSBfcmVmMi53aXRoQm9yZGVyLFxuICAgIHdpdGhCb3JkZXIgPSBfcmVmMiR3aXRoQm9yZGVyID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkd2l0aEJvcmRlcixcbiAgICBfcmVmMiR3aXRoQmFja2dyb3VuZCA9IF9yZWYyLndpdGhCYWNrZ3JvdW5kLFxuICAgIHdpdGhCYWNrZ3JvdW5kID0gX3JlZjIkd2l0aEJhY2tncm91bmQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiR3aXRoQmFja2dyb3VuZCxcbiAgICBfcmVmMiR3aXRoQmFja2dyb3VuZEMgPSBfcmVmMi53aXRoQmFja2dyb3VuZENvbG9yLFxuICAgIHdpdGhCYWNrZ3JvdW5kQ29sb3IgPSBfcmVmMiR3aXRoQmFja2dyb3VuZEMgPT09IHZvaWQgMCA/IHdpdGhCYWNrZ3JvdW5kIDogX3JlZjIkd2l0aEJhY2tncm91bmRDLFxuICAgIF9yZWYyJHdpdGhCYWNrZ3JvdW5kQSA9IF9yZWYyLndpdGhCYWNrZ3JvdW5kQW5pbWF0aW9uLFxuICAgIHdpdGhCYWNrZ3JvdW5kQW5pbWF0aW9uID0gX3JlZjIkd2l0aEJhY2tncm91bmRBID09PSB2b2lkIDAgPyB3aXRoQmFja2dyb3VuZCA6IF9yZWYyJHdpdGhCYWNrZ3JvdW5kQTtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgZm9ybSA9IGV1aUZvcm1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcblxuICAvLyBXZSB1c2UgaW5zZXQgYm94LXNoYWRvdyBpbnN0ZWFkIG9mIGJvcmRlciB0byBza2lwIGV4dHJhIGhlaWdodCBjYWxjdWxhdGlvbnNcbiAgdmFyIGJvcmRlciA9IFwiXFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgXCIuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBcIikuY29uY2F0KGZvcm0uYm9yZGVyQ29sb3IsIFwiO1xcbiAgXCIpLnRyaW0oKTtcbiAgdmFyIGJhY2tncm91bmRDb2xvciA9IFwiXFxuICAgIGJhY2tncm91bmQtY29sb3I6IFwiLmNvbmNhdChmb3JtLmJhY2tncm91bmRDb2xvciwgXCI7XFxuICBcIikudHJpbSgpO1xuICB2YXIgYmFja2dyb3VuZEdyYWRpZW50ID0gXCJcXG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gICAgYmFja2dyb3VuZC1zaXplOiAwJSAxMDAlO1xcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLFxcbiAgICAgIHZhcigtLWV1aUZvcm1Db250cm9sU3RhdGVDb2xvciksXFxuICAgICAgdmFyKC0tZXVpRm9ybUNvbnRyb2xTdGF0ZUNvbG9yKSBcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaWNrLCBcIixcXG4gICAgICB0cmFuc3BhcmVudCBcIikuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGljaywgXCIsXFxuICAgICAgdHJhbnNwYXJlbnQgMTAwJVxcbiAgICApO1xcbiAgXCIpLnRyaW0oKTtcbiAgdmFyIGJhY2tncm91bmRBbmltYXRpb24gPSBcIlxcbiAgICBcIi5jb25jYXQoZXVpQ2FuQW5pbWF0ZSwgXCIge1xcbiAgICAgIHRyYW5zaXRpb246XFxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlIFwiKS5jb25jYXQoZm9ybS5hbmltYXRpb25UaW1pbmcsIFwiLFxcbiAgICAgICAgYmFja2dyb3VuZC1zaXplIFwiKS5jb25jYXQoZm9ybS5hbmltYXRpb25UaW1pbmcsIFwiLFxcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvciBcIikuY29uY2F0KGZvcm0uYW5pbWF0aW9uVGltaW5nLCBcIjtcXG4gICAgfVxcbiAgXCIpLnRyaW0oKTtcbiAgcmV0dXJuIFwiXFxuICAgIFwiLmNvbmNhdCh3aXRoQm9yZGVyID8gYm9yZGVyIDogJycsIFwiXFxuICAgIFwiKS5jb25jYXQod2l0aEJhY2tncm91bmRDb2xvciA/IGJhY2tncm91bmRDb2xvciA6ICcnLCBcIlxcbiAgICBcIikuY29uY2F0KHdpdGhCYWNrZ3JvdW5kID8gYmFja2dyb3VuZEdyYWRpZW50IDogJycsIFwiXFxuICAgIFwiKS5jb25jYXQod2l0aEJhY2tncm91bmRBbmltYXRpb24gPyBiYWNrZ3JvdW5kQW5pbWF0aW9uIDogJycsIFwiXFxuICBcIik7XG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbEZvY3VzU3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUNvbnRyb2xGb2N1c1N0eWxlcyhfcmVmMykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMy5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmMy5jb2xvck1vZGU7XG4gIHJldHVybiBcIlxcbiAgLS1ldWlGb3JtQ29udHJvbFN0YXRlQ29sb3I6IFwiLmNvbmNhdChldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgXCI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gc2hhZGUoZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsIDAuNCkgOiBldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSwgXCI7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTtcXG4gIG91dGxpbmU6IG5vbmU7IC8qIFJlbW92ZSBhbGwgb3V0bGluZXMgYW5kIHJlbHkgb24gb3VyIG93biBib3R0b20gYm9yZGVyIGdyYWRpZW50ICovXFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUNvbnRyb2xJbnZhbGlkU3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUNvbnRyb2xJbnZhbGlkU3R5bGVzKF9yZWY0KSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY0LmV1aVRoZW1lO1xuICByZXR1cm4gXCJcXG4gIC0tZXVpRm9ybUNvbnRyb2xTdGF0ZUNvbG9yOiBcIi5jb25jYXQoZXVpVGhlbWUuY29sb3JzLmRhbmdlciwgXCI7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTtcXG5cIik7XG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbERpc2FibGVkU3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUNvbnRyb2xEaXNhYmxlZFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGZvcm0gPSBldWlGb3JtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHJldHVybiBcIlxcbiAgICBjb2xvcjogXCIuY29uY2F0KGZvcm0uY29udHJvbERpc2FibGVkQ29sb3IsIFwiO1xcbiAgICAvKiBSZXF1aXJlZCBmb3IgU2FmYXJpICovXFxuICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiBcIikuY29uY2F0KGZvcm0uY29udHJvbERpc2FibGVkQ29sb3IsIFwiO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KGZvcm0uYmFja2dyb3VuZERpc2FibGVkQ29sb3IsIFwiO1xcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgICAtLWV1aUZvcm1Db250cm9sU3RhdGVDb2xvcjogdHJhbnNwYXJlbnQ7XFxuXFxuICAgIFwiKS5jb25jYXQoZXVpUGxhY2Vob2xkZXJQZXJCcm93c2VyKFwiXFxuICAgICAgY29sb3I6IFwiLmNvbmNhdChmb3JtLmNvbnRyb2xEaXNhYmxlZENvbG9yLCBcIjtcXG4gICAgICBvcGFjaXR5OiAxO1xcbiAgICBcIikpLCBcIlxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUNvbnRyb2xSZWFkT25seVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1Db250cm9sUmVhZE9ubHlTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBmb3JtID0gZXVpRm9ybVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4gXCJcXG4gICAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgICBjb2xvcjogXCIuY29uY2F0KGZvcm0udGV4dENvbG9yLCBcIjtcXG4gICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IFwiKS5jb25jYXQoZm9ybS50ZXh0Q29sb3IsIFwiOyAvKiBSZXF1aXJlZCBmb3IgU2FmYXJpICovXFxuXFxuICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQoZm9ybS5iYWNrZ3JvdW5kUmVhZE9ubHlDb2xvciwgXCI7XFxuICAgIC0tZXVpRm9ybUNvbnRyb2xTdGF0ZUNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIFwiKTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sQXV0b0ZpbGxTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbEF1dG9GaWxsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcblxuICAvLyBNYWtlIHRoZSB0ZXh0IGNvbG9yIHNsaWdodGx5IGxlc3MgcHJvbWluZW50IHRoYW4gdGhlIGRlZmF1bHQgY29sb3JzLnRleHRcbiAgdmFyIHRleHRDb2xvciA9IGV1aVRoZW1lLmNvbG9ycy5kYXJrZXN0U2hhZGU7XG4gIHZhciBfZXVpQnV0dG9uQ29sb3IgPSBldWlCdXR0b25Db2xvcihldWlUaGVtZUNvbnRleHQsICdwcmltYXJ5JyksXG4gICAgYmFja2dyb3VuZENvbG9yID0gX2V1aUJ1dHRvbkNvbG9yLmJhY2tncm91bmRDb2xvcjtcbiAgdmFyIHRpbnRlZEJhY2tncm91bmRDb2xvciA9IGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gc2hhZGUoYmFja2dyb3VuZENvbG9yLCAwLjUpIDogdGludChiYWNrZ3JvdW5kQ29sb3IsIDAuNyk7XG4gIC8vIEhhY2t5IHdvcmthcm91bmQgdG8gYmFja2dyb3VuZC1jb2xvciwgc2luY2UgQ2hyb21lIGRvZXNuJ3Qgbm9ybWFsbHkgYWxsb3cgb3ZlcnJpZGluZyBpdHMgc3R5bGVzXG4gIC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTLzphdXRvZmlsbCNzZWN0MVxuICB2YXIgYmFja2dyb3VuZFNoYWRvdyA9IFwiaW5zZXQgMCAwIDAgMTAwdncgXCIuY29uY2F0KHRpbnRlZEJhY2tncm91bmRDb2xvcik7XG5cbiAgLy8gUmUtY3JlYXRlIHRoZSBib3JkZXIsIHNpbmNlIHRoZSBhYm92ZSB3ZWJraXQgYm94IHNoYWRvdyBvdmVycmlkZXMgdGhlIGRlZmF1bHQgYm9yZGVyIGJveC1zaGFkb3dcbiAgLy8gKyBjaGFuZ2UgdGhlIGJvcmRlciBjb2xvciB0byBtYXRjaCBzdGF0ZXMsIHNpbmNlIHRoZSB1bmRlcmxpbmUgYmFja2dyb3VuZCBncmFkaWVudCBubyBsb25nZXIgd29ya3NcbiAgdmFyIGJvcmRlckNvbG9yID0gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLnByaW1hcnlUZXh0LCAwLjIpO1xuICB2YXIgaW52YWxpZEJvcmRlciA9IGV1aVRoZW1lLmNvbG9ycy5kYW5nZXI7XG4gIHZhciBib3JkZXJTaGFkb3cgPSBmdW5jdGlvbiBib3JkZXJTaGFkb3coY29sb3IpIHtcbiAgICByZXR1cm4gXCJpbnNldCAwIDAgMCBcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIFwiKS5jb25jYXQoY29sb3IpO1xuICB9O1xuXG4gIC8vIFRoZXNlIHN0eWxlcyBvbmx5IGFwcGx5L292ZXJyaWRlIENocm9tZS93ZWJraXQgYnJvd3NlcnMgLSBGaXJlZm94IGRvZXMgbm90IHNldCBhdXRvZmlsbCBzdHlsZXNcbiAgcmV0dXJuIFwiXFxuICAgICY6LXdlYmtpdC1hdXRvZmlsbCB7XFxuICAgICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IFwiLmNvbmNhdCh0ZXh0Q29sb3IsIFwiO1xcbiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogXCIpLmNvbmNhdChib3JkZXJTaGFkb3coYm9yZGVyQ29sb3IpLCBcIiwgXCIpLmNvbmNhdChiYWNrZ3JvdW5kU2hhZG93LCBcIjtcXG5cXG4gICAgICAmOmludmFsaWQge1xcbiAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBcIikuY29uY2F0KGJvcmRlclNoYWRvdyhpbnZhbGlkQm9yZGVyKSwgXCIsIFwiKS5jb25jYXQoYmFja2dyb3VuZFNoYWRvdywgXCI7XFxuICAgICAgfVxcbiAgICB9XFxuICBcIik7XG59O1xudmFyIGV1aVBsYWNlaG9sZGVyUGVyQnJvd3NlciA9IGZ1bmN0aW9uIGV1aVBsYWNlaG9sZGVyUGVyQnJvd3Nlcihjb250ZW50KSB7XG4gIHJldHVybiBcIlxcbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7IFwiLmNvbmNhdChjb250ZW50LCBcIiB9XFxuICAmOjotbW96LXBsYWNlaG9sZGVyIHsgXCIpLmNvbmNhdChjb250ZW50LCBcIiB9XFxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7IFwiKS5jb25jYXQoY29udGVudCwgXCIgfVxcbiAgJjotbW96LXBsYWNlaG9sZGVyIHsgXCIpLmNvbmNhdChjb250ZW50LCBcIiB9XFxuICAmOjpwbGFjZWhvbGRlciB7IFwiKS5jb25jYXQoY29udGVudCwgXCIgfVxcblwiKTtcbn07XG5cbi8qKlxuICogU2VsZWN0aW9uIGN1c3RvbSBjb250cm9scyAtIGNoZWNrYm94ZXMsIHJhZGlvcywgYW5kIHN3aXRjaGVzXG4gKi9cblxuZXhwb3J0IHZhciBldWlGb3JtQ3VzdG9tQ29udHJvbFZhcmlhYmxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1DdXN0b21Db250cm9sVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgdmFyIHNpemVzID0ge1xuICAgIGNvbnRyb2w6IGV1aVRoZW1lLnNpemUuYmFzZSxcbiAgICBsaW5lSGVpZ2h0OiBldWlUaGVtZS5zaXplLmwsXG4gICAgbGFiZWxHYXA6IGV1aVRoZW1lLnNpemUuc1xuICB9O1xuICB2YXIgY29sb3JzID0ge1xuICAgIHVuc2VsZWN0ZWQ6IGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLFxuICAgIHVuc2VsZWN0ZWRCb3JkZXI6IGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gdGludChldWlUaGVtZS5jb2xvcnMubGlnaHRlc3RTaGFkZSwgMC4zMSkgLy8gV0NBRyBBQSByZXF1aXJlbWVudHNcbiAgICA6IHNoYWRlKGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlLCAwLjQpLFxuICAgIHNlbGVjdGVkOiBldWlUaGVtZS5jb2xvcnMucHJpbWFyeSxcbiAgICBzZWxlY3RlZEljb246IGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLFxuICAgIGRpc2FibGVkOiBldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSxcbiAgICBkaXNhYmxlZEljb246IGV1aVRoZW1lLmNvbG9ycy5kYXJrU2hhZGUsXG4gICAgZGlzYWJsZWRMYWJlbDogZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkVGV4dCAvLyBMaWdodGVyIHRoYW4gZm9ybVZhcnMuZGlzYWJsZWRDb2xvciBiZWNhdXNlIGl0IHR5cGljYWxseSBkb2Vzbid0IGhhdmUgYXMgZGFyayBhIGJhY2tncm91bmRcbiAgfTtcbiAgdmFyIGFuaW1hdGlvbiA9IHtcbiAgICBzcGVlZDogZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsXG4gICAgZWFzaW5nOiAnZWFzZS1pbidcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBzaXplczogc2l6ZXMsXG4gICAgY29sb3JzOiBjb2xvcnMsXG4gICAgYW5pbWF0aW9uOiBhbmltYXRpb25cbiAgfTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1DdXN0b21Db250cm9sU3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUN1c3RvbUNvbnRyb2xTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIGNvbnRyb2xWYXJzID0gZXVpRm9ybUN1c3RvbUNvbnRyb2xWYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIGNlbnRlcldpdGhMYWJlbCA9IG1hdGhXaXRoVW5pdHMoW2NvbnRyb2xWYXJzLnNpemVzLmxpbmVIZWlnaHQsIGNvbnRyb2xWYXJzLnNpemVzLmNvbnRyb2xdLCBmdW5jdGlvbiAoeCwgeSkge1xuICAgIHJldHVybiAoeCAtIHkpIC8gMjtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgd3JhcHBlcjogXCJcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgICBcIixcbiAgICBpbnB1dDoge1xuICAgICAgZmF1eElucHV0OiBcIlxcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGNvbnRyb2xWYXJzLnNpemVzLmNvbnRyb2wpLCBcIlxcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsIGNvbnRyb2xWYXJzLnNpemVzLmNvbnRyb2wpLCBcIlxcbiAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXG4gICAgICAgICY6aGFzKGlucHV0OmZvY3VzLXZpc2libGUpIHtcXG4gICAgICAgICAgb3V0bGluZTogXCIpLmNvbmNhdChldWlUaGVtZS5mb2N1cy53aWR0aCwgXCIgc29saWQgXCIpLmNvbmNhdChjb250cm9sVmFycy5jb2xvcnMuc2VsZWN0ZWQsIFwiO1xcbiAgICAgICAgICBvdXRsaW5lLW9mZnNldDogXCIpLmNvbmNhdChldWlUaGVtZS5mb2N1cy53aWR0aCwgXCI7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBcIikuY29uY2F0KGV1aUNhbkFuaW1hdGUsIFwiIHtcXG4gICAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvciwgY29sb3I7XFxuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IFwiKS5jb25jYXQoY29udHJvbFZhcnMuYW5pbWF0aW9uLnNwZWVkLCBcIjtcXG4gICAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IFwiKS5jb25jYXQoY29udHJvbFZhcnMuYW5pbWF0aW9uLmVhc2luZywgXCI7XFxuICAgICAgICB9XFxuICAgICAgXCIpLFxuICAgICAgLy8gVE9ETzogUmV2ZXJ0IGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9wdWxsLzc5ODFcbiAgICAgIC8vIG9uY2UgaHR0cHM6Ly9naXRodWIuY29tL2RwZXJpbmkvbndzYXBpL2lzc3Vlcy8xMjNcbiAgICAgIC8vIGhhcyBiZWVuIGZpeGVkLCBhbmQgcmVzdG9yZSBgJjpoYXMoKyBsYWJlbClgIHNlbGVjdG9yXG4gICAgICBoYXNMYWJlbDogXCJcXG4gICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgY2VudGVyV2l0aExhYmVsKSwgXCJcXG4gICAgICBcIiksXG4gICAgICBlbmFibGVkOiB7XG4gICAgICAgIHNlbGVjdGVkOiBcIlxcbiAgICAgICAgICBjb2xvcjogXCIuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy5zZWxlY3RlZEljb24sIFwiO1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy5zZWxlY3RlZCwgXCI7XFxuICAgICAgICBcIiksXG4gICAgICAgIHVuc2VsZWN0ZWQ6IFwiXFxuICAgICAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy51bnNlbGVjdGVkLCBcIjtcXG4gICAgICAgICAgYm9yZGVyOiBcIikuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIikuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy51bnNlbGVjdGVkQm9yZGVyLCBcIjtcXG5cXG4gICAgICAgICAgJjpoYXMoaW5wdXQ6Zm9jdXMpIHtcXG4gICAgICAgICAgICBib3JkZXItY29sb3I6IFwiKS5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLnNlbGVjdGVkLCBcIjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgXCIpXG4gICAgICB9LFxuICAgICAgZGlzYWJsZWQ6IHtcbiAgICAgICAgc2VsZWN0ZWQ6IFwiXFxuICAgICAgICAgIGxhYmVsOiBkaXNhYmxlZDtcXG4gICAgICAgICAgY29sb3I6IFwiLmNvbmNhdChjb250cm9sVmFycy5jb2xvcnMuZGlzYWJsZWRJY29uLCBcIjtcXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdChjb250cm9sVmFycy5jb2xvcnMuZGlzYWJsZWQsIFwiO1xcbiAgICAgICAgXCIpLFxuICAgICAgICB1bnNlbGVjdGVkOiBcIlxcbiAgICAgICAgICBsYWJlbDogZGlzYWJsZWQ7XFxuICAgICAgICAgIGNvbG9yOiBcIi5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLmRpc2FibGVkLCBcIjtcXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdChjb250cm9sVmFycy5jb2xvcnMuZGlzYWJsZWQsIFwiO1xcbiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgICAgICAgXCIpXG4gICAgICB9LFxuICAgICAgLy8gTG9va3MgYmV0dGVyIGNlbnRlcmVkIGF0IGRpZmZlcmVudCB6b29tIGxldmVscyB0aGFuIGp1c3QgPEV1aUljb24gc2l6ZT1cInNcIiAvPlxuICAgICAgaWNvbjogXCJcXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC43NSk7XFxuICAgICAgXCIsXG4gICAgICAvLyBIaWRkZW4gaW5wdXQgc2l0cyBvbiB0b3Agb2YgdGhlIHZpc2libGUgZWxlbWVudFxuICAgICAgaGlkZGVuSW5wdXQ6IFwiXFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICBpbnNldDogMDtcXG4gICAgICAgIG9wYWNpdHk6IDAgIWltcG9ydGFudDtcXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG5cXG4gICAgICAgICY6ZGlzYWJsZWQge1xcbiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgICAgICAgfVxcbiAgICAgIFwiXG4gICAgfSxcbiAgICBsYWJlbDoge1xuICAgICAgbGFiZWw6IFwiXFxuICAgICAgICAvKiBOZWVkcyB0byB1c2UgcGFkZGluZyBhbmQgbm90IGZsZXggZ2FwIGZvciBleHRyYSBtb3VzZSBjbGljayBhcmVhICovXFxuICAgICAgICBcIi5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgY29udHJvbFZhcnMuc2l6ZXMubGFiZWxHYXApLCBcIlxcbiAgICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoY29udHJvbFZhcnMuc2l6ZXMubGluZUhlaWdodCwgXCI7XFxuICAgICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLmZvbnRTaXplLCBcIjtcXG4gICAgICBcIiksXG4gICAgICBlbmFibGVkOiBcIlxcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgIFwiLFxuICAgICAgZGlzYWJsZWQ6IFwiXFxuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgICAgICAgY29sb3I6IFwiLmNvbmNhdChjb250cm9sVmFycy5jb2xvcnMuZGlzYWJsZWRMYWJlbCwgXCI7XFxuICAgICAgXCIpXG4gICAgfVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYW5jaG9yQ2xhc3NOYW1lXCIsIFwiYW5jaG9yUHJvcHNcIiwgXCJjb250ZW50XCIsIFwidGl0bGVcIiwgXCJkZWxheVwiLCBcImRpc3BsYXlcIiwgXCJyZXBvc2l0aW9uT25TY3JvbGxcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBmaW5kUG9wb3ZlclBvc2l0aW9uLCBodG1sSWRHZW5lcmF0b3IsIGtleXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBlbnF1ZXVlU3RhdGVDaGFuZ2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWFjdCc7XG5pbXBvcnQgeyBFdWlSZXNpemVPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyL3Jlc2l6ZV9vYnNlcnZlcic7XG5pbXBvcnQgeyBFdWlQb3J0YWwgfSBmcm9tICcuLi9wb3J0YWwnO1xuaW1wb3J0IHsgRXVpVG9vbFRpcFBvcG92ZXIgfSBmcm9tICcuL3Rvb2xfdGlwX3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpVG9vbFRpcEFuY2hvciB9IGZyb20gJy4vdG9vbF90aXBfYW5jaG9yJztcbmltcG9ydCB7IEV1aVRvb2xUaXBBcnJvdyB9IGZyb20gJy4vdG9vbF90aXBfYXJyb3cnO1xuaW1wb3J0IHsgdG9vbFRpcE1hbmFnZXIgfSBmcm9tICcuL3Rvb2xfdGlwX21hbmFnZXInO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgUE9TSVRJT05TID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbnZhciBESVNQTEFZUyA9IFsnaW5saW5lQmxvY2snLCAnYmxvY2snXTtcbnZhciBkZWxheVRvTXNNYXAgPSB7XG4gIHJlZ3VsYXI6IDI1MCxcbiAgbG9uZzogMjUwICogNVxufTtcbnZhciBERUZBVUxUX1RPT0xUSVBfU1RZTEVTID0ge1xuICAvLyBwb3NpdGlvbiB0aGUgdG9vbHRpcCBjb250ZW50IG5lYXIgdGhlIHRvcC1sZWZ0XG4gIC8vIGNvcm5lciBvZiB0aGUgd2luZG93IHNvIGl0IGNhbid0IGNyZWF0ZSBzY3JvbGxiYXJzXG4gIC8vIDUwLDUwIGJlY2F1c2Ugd2hvIGtub3dzIHdoYXQgbmVnYXRpdmUgbWFyZ2lucywgcGFkZGluZywgZXRjXG4gIHRvcDogNTAsXG4gIGxlZnQ6IDUwLFxuICAvLyBqdXN0IGluIGNhc2UsIGF2b2lkIGFueSBwb3RlbnRpYWwgZmxpY2tlciBieSBoaWRpbmdcbiAgLy8gdGhlIHRvb2x0aXAgYmVmb3JlIGl0IGlzIHBvc2l0aW9uZWRcbiAgb3BhY2l0eTogMCxcbiAgLy8gcHJldmVudCBhY2NpZGVudGFsIG1vdXNlIGludGVyYWN0aW9uIHdoaWxlIHBvc2l0aW9uaW5nXG4gIHZpc2liaWxpdHk6ICdoaWRkZW4nXG59O1xuZXhwb3J0IHZhciBFdWlUb29sVGlwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aVRvb2xUaXAoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUb29sVGlwKTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlUb29sVGlwLCBbXS5jb25jYXQoYXJncykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJfaXNNb3VudGVkXCIsIGZhbHNlKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYW5jaG9yXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwb3BvdmVyXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0aW1lb3V0SWRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RhdGVcIiwge1xuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgICBjYWxjdWxhdGVkUG9zaXRpb246IF90aGlzLnByb3BzLnBvc2l0aW9uLFxuICAgICAgdG9vbFRpcFN0eWxlczogREVGQVVMVF9UT09MVElQX1NUWUxFUyxcbiAgICAgIGFycm93U3R5bGVzOiB1bmRlZmluZWQsXG4gICAgICBpZDogX3RoaXMucHJvcHMuaWQgfHwgaHRtbElkR2VuZXJhdG9yKCkoKVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjbGVhckFuaW1hdGlvblRpbWVvdXRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnRpbWVvdXRJZCkge1xuICAgICAgICBfdGhpcy50aW1lb3V0SWQgPSBjbGVhclRpbWVvdXQoX3RoaXMudGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidGVzdEFuY2hvclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyB3aGVuIHRoZSB0b29sdGlwIGlzIHZpc2libGUsIHRoaXMgY2hlY2tzIGlmIHRoZSBhbmNob3IgaXMgc3RpbGwgcGFydCBvZiBkb2N1bWVudFxuICAgICAgLy8gdGhpcyBmaXhlcyB3aGVuIHRoZSByZWFjdCByb290IGlzIHJlbW92ZWQgZnJvbSB0aGUgZG9tIHdpdGhvdXQgdW5tb3VudGluZ1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL2lzc3Vlcy8xMTA1XG4gICAgICBpZiAoZG9jdW1lbnQuYm9keS5jb250YWlucyhfdGhpcy5hbmNob3IpID09PSBmYWxzZSkge1xuICAgICAgICAvLyB0aGUgYW5jaG9yIGlzIG5vIGxvbmdlciBwYXJ0IG9mIGBkb2N1bWVudGBcbiAgICAgICAgX3RoaXMuaGlkZVRvb2xUaXAoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChfdGhpcy5zdGF0ZS52aXNpYmxlKSB7XG4gICAgICAgICAgLy8gaWYgc3RpbGwgdmlzaWJsZSwga2VlcCBjaGVja2luZ1xuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy50ZXN0QW5jaG9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZXRBbmNob3JSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgcmV0dXJuIF90aGlzLmFuY2hvciA9IHJlZjtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2V0UG9wb3ZlclJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICByZXR1cm4gX3RoaXMucG9wb3ZlciA9IHJlZjtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2hvd1Rvb2xUaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFfdGhpcy50aW1lb3V0SWQpIHtcbiAgICAgICAgX3RoaXMudGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0b29sVGlwTWFuYWdlci5yZWdpc3RlclRvb2x0aXAoX3RoaXMuaGlkZVRvb2xUaXApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBkZWxheVRvTXNNYXBbX3RoaXMucHJvcHMuZGVsYXldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicG9zaXRpb25Ub29sVGlwXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZXF1ZXN0ZWRQb3NpdGlvbiA9IF90aGlzLnByb3BzLnBvc2l0aW9uO1xuICAgICAgaWYgKCFfdGhpcy5hbmNob3IgfHwgIV90aGlzLnBvcG92ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIF9maW5kUG9wb3ZlclBvc2l0aW9uID0gZmluZFBvcG92ZXJQb3NpdGlvbih7XG4gICAgICAgICAgYW5jaG9yOiBfdGhpcy5hbmNob3IsXG4gICAgICAgICAgcG9wb3ZlcjogX3RoaXMucG9wb3ZlcixcbiAgICAgICAgICBwb3NpdGlvbjogcmVxdWVzdGVkUG9zaXRpb24sXG4gICAgICAgICAgb2Zmc2V0OiAxNixcbiAgICAgICAgICAvLyBvZmZzZXQgcG9wb3ZlciAxNnB4IGZyb20gdGhlIGFuY2hvclxuICAgICAgICAgIGFycm93Q29uZmlnOiB7XG4gICAgICAgICAgICBhcnJvd1dpZHRoOiAxMixcbiAgICAgICAgICAgIGFycm93QnVmZmVyOiA0XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgcG9zaXRpb24gPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5wb3NpdGlvbixcbiAgICAgICAgbGVmdCA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLmxlZnQsXG4gICAgICAgIHRvcCA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLnRvcCxcbiAgICAgICAgYXJyb3cgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5hcnJvdztcblxuICAgICAgLy8gSWYgZW5jcm9hY2hpbmcgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHdpbmRvdzpcbiAgICAgIC8vIFdoZW4gYHByb3BzLmNvbnRlbnRgIGNoYW5nZXMgYW5kIGlzIGxvbmdlciB0aGFuIGBwcmV2UHJvcHMuY29udGVudGAsIHRoZSB0b29sdGlwIHdpZHRoIHJlbWFpbnMgYW5kXG4gICAgICAvLyB0aGUgcmVzaXplT2JzZXJ2ZXIgY2FsbGJhY2sgd2lsbCBmaXJlIHR3aWNlIChvbmNlIGZvciB2ZXJ0aWNhbCByZXNpemUgY2F1c2VkIGJ5IHRleHQgbGluZSB3cmFwcGluZyxcbiAgICAgIC8vIG9uY2UgZm9yIGEgc3Vic2VxdWVudCBwb3NpdGlvbiBjb3JyZWN0aW9uKSBhbmQgY2F1c2UgYSBmbGFzaCByZXJlbmRlciBhbmQgcmVwb3NpdGlvbi5cbiAgICAgIC8vIFRvIHByZXZlbnQgdGhpcywgd2UgY2FuIG9yaWVudCBmcm9tIHRoZSByaWdodCBzbyB0aGF0IHRleHQgbGluZSB3cmFwcGluZyBkb2VzIG5vdCBvY2N1ciwgbmVnYXRpbmdcbiAgICAgIC8vIHRoZSBzZWNvbmQgcmVzaXplT2JzZXJ2ZXIgY2FsbGJhY2sgY2FsbC5cbiAgICAgIHZhciB3aW5kb3dXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIHZhciB1c2VSaWdodFZhbHVlID0gd2luZG93V2lkdGggLyAyIDwgbGVmdDtcbiAgICAgIHZhciB0b29sVGlwU3R5bGVzID0ge1xuICAgICAgICB0b3A6IHRvcCxcbiAgICAgICAgbGVmdDogdXNlUmlnaHRWYWx1ZSA/ICdhdXRvJyA6IGxlZnQsXG4gICAgICAgIHJpZ2h0OiB1c2VSaWdodFZhbHVlID8gd2luZG93V2lkdGggLSBsZWZ0IC0gX3RoaXMucG9wb3Zlci5vZmZzZXRXaWR0aCA6ICdhdXRvJ1xuICAgICAgfTtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgY2FsY3VsYXRlZFBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgdG9vbFRpcFN0eWxlczogdG9vbFRpcFN0eWxlcyxcbiAgICAgICAgYXJyb3dTdHlsZXM6IGFycm93XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaGlkZVRvb2xUaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuY2xlYXJBbmltYXRpb25UaW1lb3V0KCk7XG4gICAgICBlbnF1ZXVlU3RhdGVDaGFuZ2UoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX2lzTW91bnRlZCkge1xuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgdG9vbFRpcFN0eWxlczogREVGQVVMVF9UT09MVElQX1NUWUxFUyxcbiAgICAgICAgICAgIGFycm93U3R5bGVzOiB1bmRlZmluZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0b29sVGlwTWFuYWdlci5kZXJlZ2lzdGVyVG9vbFRpcChfdGhpcy5oaWRlVG9vbFRpcCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuc2hvd1Rvb2xUaXAoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25CbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIF90aGlzLmhpZGVUb29sVGlwKCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uRXNjYXBlS2V5XCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0ga2V5cy5FU0NBUEUpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgICB9KTsgLy8gQWxsb3dzIG1vdXNpbmcgb3ZlciBiYWNrIGludG8gdGhlIHRvb2x0aXAgdG8gd29yayBjb3JyZWN0bHlcbiAgICAgICAgX3RoaXMuaGlkZVRvb2xUaXAoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Nb3VzZU91dFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIFByZXZlbnQgbW91c2luZyBvdmVyIGNoaWxkcmVuIGZyb20gaGlkaW5nIHRoZSB0b29sdGlwIGJ5IHRlc3RpbmcgZm9yIHdoZXRoZXIgdGhlIG1vdXNlIGhhc1xuICAgICAgLy8gbGVmdCB0aGUgYW5jaG9yIGZvciBhIG5vbi1jaGlsZC5cbiAgICAgIGlmIChfdGhpcy5hbmNob3IgPT09IGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgX3RoaXMuYW5jaG9yICE9IG51bGwgJiYgIV90aGlzLmFuY2hvci5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICBpZiAoIV90aGlzLnN0YXRlLmhhc0ZvY3VzKSB7XG4gICAgICAgICAgX3RoaXMuaGlkZVRvb2xUaXAoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uTW91c2VPdXQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25Nb3VzZU91dChldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlUb29sVGlwLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlUb29sVGlwLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgICBpZiAodGhpcy5wcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Ub29sVGlwLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmNsZWFyQW5pbWF0aW9uVGltZW91dCgpO1xuICAgICAgdGhpcy5faXNNb3VudGVkID0gZmFsc2U7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblRvb2xUaXAsIHRydWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLnZpc2libGUgPT09IGZhbHNlICYmIHRoaXMuc3RhdGUudmlzaWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy50ZXN0QW5jaG9yKTtcbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIHNjcm9sbCBsaXN0ZW5lclxuICAgICAgaWYgKHByZXZQcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwgIT09IHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnJlcG9zaXRpb25PblNjcm9sbCkge1xuICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uVG9vbFRpcCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Ub29sVGlwLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICBhbmNob3JDbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5hbmNob3JDbGFzc05hbWUsXG4gICAgICAgIGFuY2hvclByb3BzID0gX3RoaXMkcHJvcHMuYW5jaG9yUHJvcHMsXG4gICAgICAgIGNvbnRlbnQgPSBfdGhpcyRwcm9wcy5jb250ZW50LFxuICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzLnRpdGxlLFxuICAgICAgICBkZWxheSA9IF90aGlzJHByb3BzLmRlbGF5LFxuICAgICAgICBkaXNwbGF5ID0gX3RoaXMkcHJvcHMuZGlzcGxheSxcbiAgICAgICAgcmVwb3NpdGlvbk9uU2Nyb2xsID0gX3RoaXMkcHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgYXJyb3dTdHlsZXMgPSBfdGhpcyRzdGF0ZS5hcnJvd1N0eWxlcyxcbiAgICAgICAgaWQgPSBfdGhpcyRzdGF0ZS5pZCxcbiAgICAgICAgdG9vbFRpcFN0eWxlcyA9IF90aGlzJHN0YXRlLnRvb2xUaXBTdHlsZXMsXG4gICAgICAgIHZpc2libGUgPSBfdGhpcyRzdGF0ZS52aXNpYmxlLFxuICAgICAgICBjYWxjdWxhdGVkUG9zaXRpb24gPSBfdGhpcyRzdGF0ZS5jYWxjdWxhdGVkUG9zaXRpb247XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXAnLCBjbGFzc05hbWUpO1xuICAgICAgdmFyIGFuY2hvckNsYXNzZXMgPSBjbGFzc05hbWVzKGFuY2hvckNsYXNzTmFtZSwgYW5jaG9yUHJvcHMgPT09IG51bGwgfHwgYW5jaG9yUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFuY2hvclByb3BzLmNsYXNzTmFtZSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUb29sVGlwQW5jaG9yLCBfZXh0ZW5kcyh7fSwgYW5jaG9yUHJvcHMsIHtcbiAgICAgICAgcmVmOiB0aGlzLnNldEFuY2hvclJlZixcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBvbktleURvd246IHRoaXMub25Fc2NhcGVLZXksXG4gICAgICAgIG9uTW91c2VPdmVyOiB0aGlzLnNob3dUb29sVGlwLFxuICAgICAgICBvbk1vdXNlT3V0OiB0aGlzLm9uTW91c2VPdXQsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgY2xhc3NOYW1lOiBhbmNob3JDbGFzc2VzLFxuICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxuICAgICAgICBpc1Zpc2libGU6IHZpc2libGVcbiAgICAgIH0pLCBjaGlsZHJlbiksIHZpc2libGUgJiYgKGNvbnRlbnQgfHwgdGl0bGUpICYmIF9fX0Vtb3Rpb25KU1goRXVpUG9ydGFsLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXBQb3BvdmVyLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgc3R5bGU6IHRvb2xUaXBTdHlsZXMsXG4gICAgICAgIHBvc2l0aW9uVG9vbFRpcDogdGhpcy5wb3NpdGlvblRvb2xUaXAsXG4gICAgICAgIHBvcG92ZXJSZWY6IHRoaXMuc2V0UG9wb3ZlclJlZixcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIHJvbGU6IFwidG9vbHRpcFwiLFxuICAgICAgICBjYWxjdWxhdGVkUG9zaXRpb246IGNhbGN1bGF0ZWRQb3NpdGlvblxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcEFycm93LCB7XG4gICAgICAgIHN0eWxlOiBhcnJvd1N0eWxlcyxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRvb2xUaXBfX2Fycm93XCIsXG4gICAgICAgIHBvc2l0aW9uOiBjYWxjdWxhdGVkUG9zaXRpb25cbiAgICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aVJlc2l6ZU9ic2VydmVyLCB7XG4gICAgICAgIG9uUmVzaXplOiB0aGlzLnBvc2l0aW9uVG9vbFRpcFxuICAgICAgfSwgZnVuY3Rpb24gKHJlc2l6ZVJlZikge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgcmVmOiByZXNpemVSZWZcbiAgICAgICAgfSwgY29udGVudCk7XG4gICAgICB9KSkpKTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlUb29sVGlwLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHBvc2l0aW9uOiAndG9wJyxcbiAgZGVsYXk6ICdyZWd1bGFyJyxcbiAgZGlzcGxheTogJ2lubGluZUJsb2NrJ1xufSk7XG5FdWlUb29sVGlwLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHNwYW4gd3JhcHBpbmcgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGFuY2hvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHNwYW4gd3JhcHBpbmcgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGFuY2hvclByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICAvKipcbiAgICAgKiBUaGUgaW4tdmlldyB0cmlnZ2VyIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgdG9vbHRpcCBpdHNlbGYsIG5vdCB0aGUgdHJpZ2dlci5cbiAgICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBUaGUgbWFpbiBjb250ZW50IG9mIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgY29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIENvbW1vbiBkaXNwbGF5IGFsdGVybmF0aXZlcyBmb3IgdGhlIGFuY2hvciB3cmFwcGVyXG4gICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIERlbGF5IGJlZm9yZSBzaG93aW5nIHRvb2x0aXAuIEdvb2QgZm9yIHJlcGVhdGFibGUgaXRlbXMuXG4gICAgICovXG4gIGRlbGF5OiBQcm9wVHlwZXMub25lT2YoW1wicmVndWxhclwiLCBcImxvbmdcIl0pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIHRpdGxlIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogVW5sZXNzIHlvdSBwcm92aWRlIG9uZSwgdGhpcyB3aWxsIGJlIHJhbmRvbWx5IGdlbmVyYXRlZC5cbiAgICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFN1Z2dlc3RlZCBwb3NpdGlvbi4gSWYgdGhlcmUgaXMgbm90IGVub3VnaCByb29tIGZvciBpdCB0aGlzIHdpbGwgYmUgY2hhbmdlZC5cbiAgICAgKi9cbiAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIFdoZW4gYHRydWVgLCB0aGUgdG9vbHRpcCdzIHBvc2l0aW9uIGlzIHJlLWNhbGN1bGF0ZWQgd2hlbiB0aGUgdXNlclxuICAgICAqIHNjcm9sbHMuIFRoaXMgc3VwcG9ydHMgaGF2aW5nIGZpeGVkLXBvc2l0aW9uIHRvb2x0aXAgYW5jaG9ycy5cbiAgICAgKlxuICAgICAqIFdoZW4gbmVzdGluZyBhbiBgRXVpVG9vbHRpcGAgaW4gYSBzY3JvbGxhYmxlIGNvbnRhaW5lciwgYHJlcG9zaXRpb25PblNjcm9sbGAgc2hvdWxkIGJlIGB0cnVlYFxuICAgICAqL1xuICByZXBvc2l0aW9uT25TY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBJZiBzdXBwbGllZCwgY2FsbGVkIHdoZW4gbW91c2UgbW92ZW1lbnQgY2F1c2VzIHRoZSB0b29sIHRpcCB0byBiZVxuICAgICAqIGhpZGRlbi5cbiAgICAgKi9cbiAgb25Nb3VzZU91dDogUHJvcFR5cGVzLmZ1bmMsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXInO1xuZXhwb3J0IHZhciBoYXNSZXNpemVPYnNlcnZlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnO1xuZXhwb3J0IHZhciBFdWlSZXNpemVPYnNlcnZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0V1aU9ic2VydmVyKSB7XG4gIGZ1bmN0aW9uIEV1aVJlc2l6ZU9ic2VydmVyKCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpUmVzaXplT2JzZXJ2ZXIpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aVJlc2l6ZU9ic2VydmVyLCBbXS5jb25jYXQoYXJncykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJuYW1lXCIsICdFdWlSZXNpemVPYnNlcnZlcicpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzdGF0ZVwiLCB7XG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICB3aWR0aDogMFxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvblJlc2l6ZVwiLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMSksXG4gICAgICAgIGVudHJ5ID0gX3JlZjJbMF07XG4gICAgICB2YXIgX2VudHJ5JGJvcmRlckJveFNpemUkID0gZW50cnkuYm9yZGVyQm94U2l6ZVswXSxcbiAgICAgICAgd2lkdGggPSBfZW50cnkkYm9yZGVyQm94U2l6ZSQuaW5saW5lU2l6ZSxcbiAgICAgICAgaGVpZ2h0ID0gX2VudHJ5JGJvcmRlckJveFNpemUkLmJsb2NrU2l6ZTtcblxuICAgICAgLy8gQ2hlY2sgZm9yIGFjdHVhbCByZXNpemUgZXZlbnRcbiAgICAgIGlmIChfdGhpcy5zdGF0ZS5oZWlnaHQgPT09IGhlaWdodCAmJiBfdGhpcy5zdGF0ZS53aWR0aCA9PT0gd2lkdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3RoaXMucHJvcHMub25SZXNpemUoe1xuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9KTtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHdpZHRoOiB3aWR0aFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImJlZ2luT2JzZXJ2ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUaGUgc3VwZXJjbGFzcyBjaGVja3MgdGhhdCBjaGlsZE5vZGUgaXMgbm90IG51bGwgYmVmb3JlIGludm9raW5nXG4gICAgICAvLyBiZWdpbk9ic2VydmUoKVxuICAgICAgdmFyIGNoaWxkTm9kZSA9IF90aGlzLmNoaWxkTm9kZTtcbiAgICAgIF90aGlzLm9ic2VydmVyID0gbWFrZVJlc2l6ZU9ic2VydmVyKGNoaWxkTm9kZSwgX3RoaXMub25SZXNpemUpO1xuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpUmVzaXplT2JzZXJ2ZXIsIF9FdWlPYnNlcnZlcik7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpUmVzaXplT2JzZXJ2ZXIpO1xufShFdWlPYnNlcnZlcik7XG52YXIgbWFrZVJlc2l6ZU9ic2VydmVyID0gZnVuY3Rpb24gbWFrZVJlc2l6ZU9ic2VydmVyKG5vZGUsIGNhbGxiYWNrKSB7XG4gIHZhciBvYnNlcnZlcjtcbiAgaWYgKGhhc1Jlc2l6ZU9ic2VydmVyKSB7XG4gICAgb2JzZXJ2ZXIgPSBuZXcgd2luZG93LlJlc2l6ZU9ic2VydmVyKGNhbGxiYWNrKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKG5vZGUpO1xuICB9XG4gIHJldHVybiBvYnNlcnZlcjtcbn07XG5leHBvcnQgdmFyIHVzZVJlc2l6ZU9ic2VydmVyID0gZnVuY3Rpb24gdXNlUmVzaXplT2JzZXJ2ZXIoY29udGFpbmVyLCBkaW1lbnNpb24pIHtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgc2l6ZSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgX3NldFNpemUgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIC8vIF9jdXJyZW50RGltZW5zaW9ucyBhbmQgX3NldFNpemUgYXJlIHVzZWQgdG8gb25seSBzdG9yZSB0aGVcbiAgLy8gbmV3IHN0YXRlIChhbmQgdHJpZ2dlciBhIHJlLXJlbmRlcikgd2hlbiB0aGUgbmV3IGRpbWVuc2lvbnMgYWN0dWFsbHkgZGlmZmVyXG4gIHZhciBfY3VycmVudERpbWVuc2lvbnMgPSB1c2VSZWYoc2l6ZSk7XG4gIHZhciBzZXRTaXplID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGRpbWVuc2lvbnMpIHtcbiAgICB2YXIgZG9lc1dpZHRoTWF0dGVyID0gZGltZW5zaW9uICE9PSAnaGVpZ2h0JztcbiAgICB2YXIgZG9lc0hlaWdodE1hdHRlciA9IGRpbWVuc2lvbiAhPT0gJ3dpZHRoJztcbiAgICBpZiAoZG9lc1dpZHRoTWF0dGVyICYmIF9jdXJyZW50RGltZW5zaW9ucy5jdXJyZW50LndpZHRoICE9PSBkaW1lbnNpb25zLndpZHRoIHx8IGRvZXNIZWlnaHRNYXR0ZXIgJiYgX2N1cnJlbnREaW1lbnNpb25zLmN1cnJlbnQuaGVpZ2h0ICE9PSBkaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgX2N1cnJlbnREaW1lbnNpb25zLmN1cnJlbnQgPSBkaW1lbnNpb25zO1xuICAgICAgX3NldFNpemUoZGltZW5zaW9ucyk7XG4gICAgfVxuICB9LCBbZGltZW5zaW9uXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbnRhaW5lciAhPSBudWxsKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBtYWtlUmVzaXplT2JzZXJ2ZXIoY29udGFpbmVyLCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgdmFyIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjMsIDEpLFxuICAgICAgICAgIGVudHJ5ID0gX3JlZjRbMF07XG4gICAgICAgIHZhciBfZW50cnkkYm9yZGVyQm94U2l6ZSQyID0gZW50cnkuYm9yZGVyQm94U2l6ZVswXSxcbiAgICAgICAgICBpbmxpbmVTaXplID0gX2VudHJ5JGJvcmRlckJveFNpemUkMi5pbmxpbmVTaXplLFxuICAgICAgICAgIGJsb2NrU2l6ZSA9IF9lbnRyeSRib3JkZXJCb3hTaXplJDIuYmxvY2tTaXplO1xuICAgICAgICBzZXRTaXplKHtcbiAgICAgICAgICB3aWR0aDogaW5saW5lU2l6ZSxcbiAgICAgICAgICBoZWlnaHQ6IGJsb2NrU2l6ZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyICYmIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNpemUoe1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtjb250YWluZXIsIHNldFNpemVdKTtcbiAgcmV0dXJuIHNpemU7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBFdWlPYnNlcnZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlPYnNlcnZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aU9ic2VydmVyKTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlPYnNlcnZlciwgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibmFtZVwiLCAnRXVpT2JzZXJ2ZXInKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2hpbGROb2RlXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvYnNlcnZlclwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidXBkYXRlQ2hpbGROb2RlXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIGlmIChfdGhpcy5jaGlsZE5vZGUgPT09IHJlZikgcmV0dXJuOyAvLyBub2RlIGhhc24ndCBjaGFuZ2VkXG5cbiAgICAgIC8vIGlmIHRoZXJlJ3MgYW4gZXhpc3Rpbmcgb2JzZXJ2ZXIgZGlzY29ubmVjdCBpdFxuICAgICAgaWYgKF90aGlzLm9ic2VydmVyICE9IG51bGwpIHtcbiAgICAgICAgX3RoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICBfdGhpcy5vYnNlcnZlciA9IG51bGw7XG4gICAgICB9XG4gICAgICBfdGhpcy5jaGlsZE5vZGUgPSByZWY7XG4gICAgICBpZiAoX3RoaXMuY2hpbGROb2RlICE9IG51bGwpIHtcbiAgICAgICAgX3RoaXMuYmVnaW5PYnNlcnZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImJlZ2luT2JzZXJ2ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V1aU9ic2VydmVyIGhhcyBubyBkZWZhdWx0IG9ic2VydmF0aW9uIG1ldGhvZCcpO1xuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpT2JzZXJ2ZXIsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aU9ic2VydmVyLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkTm9kZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlwiLmNvbmNhdCh0aGlzLm5hbWUsIFwiIGRpZCBub3QgcmVjZWl2ZSBhIHJlZlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gcHJvcHMuY2hpbGRyZW4odGhpcy51cGRhdGVDaGlsZE5vZGUpO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpOyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBOT1RFOiBXZSBjYW4ndCB0ZXN0IHRoaXMgY29tcG9uZW50IGJlY2F1c2UgRW56eW1lIGRvZXNuJ3Qgc3VwcG9ydCByZW5kZXJpbmdcbiAqIGludG8gcG9ydGFscy5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IEV1aU5lc3RlZFRoZW1lQ29udGV4dCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZVByb3BzV2l0aENvbXBvbmVudERlZmF1bHRzIH0gZnJvbSAnLi4vcHJvdmlkZXIvY29tcG9uZW50X2RlZmF1bHRzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgSU5TRVJUX1BPU0lUSU9OUyA9IFsnYWZ0ZXInLCAnYmVmb3JlJ107XG52YXIgaW5zZXJ0UG9zaXRpb25zID0ge1xuICBhZnRlcjogJ2FmdGVyZW5kJyxcbiAgYmVmb3JlOiAnYmVmb3JlYmVnaW4nXG59O1xuZXhwb3J0IHZhciBFdWlQb3J0YWwgPSBmdW5jdGlvbiBFdWlQb3J0YWwocHJvcHMpIHtcbiAgdmFyIHByb3BzV2l0aERlZmF1bHRzID0gdXNlUHJvcHNXaXRoQ29tcG9uZW50RGVmYXVsdHMoJ0V1aVBvcnRhbCcsIHByb3BzKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUG9ydGFsQ2xhc3MsIHByb3BzV2l0aERlZmF1bHRzKTtcbn07XG5FdWlQb3J0YWwucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogSWYgbm90IHNwZWNpZmllZCwgYEV1aVBvcnRhbGAgd2lsbCBpbnNlcnQgaXRzZWxmXG4gICAgICogaW50byB0aGUgZW5kIG9mIHRoZSBgZG9jdW1lbnQuYm9keWAgYnkgZGVmYXVsdFxuICAgICAqL1xuICBpbnNlcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgc2libGluZzogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgIHBvc2l0aW9uOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRcbiAgfSksXG4gIC8qKlxuICAgICAqIE9wdGlvbmFsIHJlZiBjYWxsYmFja1xuICAgICAqL1xuICBwb3J0YWxSZWY6IFByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0IHZhciBFdWlQb3J0YWxDbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlQb3J0YWxDbGFzcyhwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpUG9ydGFsQ2xhc3MpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlQb3J0YWxDbGFzcywgW3Byb3BzXSk7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBwb3J0YWxOb2RlOiBudWxsXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aVBvcnRhbENsYXNzLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlQb3J0YWxDbGFzcywgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgaW5zZXJ0ID0gdGhpcy5wcm9wcy5pbnNlcnQ7XG4gICAgICB2YXIgcG9ydGFsTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgcG9ydGFsTm9kZS5kYXRhc2V0LmV1aXBvcnRhbCA9ICd0cnVlJztcbiAgICAgIGlmIChpbnNlcnQgPT0gbnVsbCkge1xuICAgICAgICAvLyBubyBpbnNlcnRpb24gZGVmaW5lZCwgYXBwZW5kIHRvIGJvZHlcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwb3J0YWxOb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluc2VydGluZyBiZWZvcmUgb3IgYWZ0ZXIgYW4gZWxlbWVudFxuICAgICAgICB2YXIgc2libGluZyA9IGluc2VydC5zaWJsaW5nLFxuICAgICAgICAgIHBvc2l0aW9uID0gaW5zZXJ0LnBvc2l0aW9uO1xuICAgICAgICBzaWJsaW5nLmluc2VydEFkamFjZW50RWxlbWVudChpbnNlcnRQb3NpdGlvbnNbcG9zaXRpb25dLCBwb3J0YWxOb2RlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VGhlbWVDb2xvcihwb3J0YWxOb2RlKTtcbiAgICAgIHRoaXMudXBkYXRlUG9ydGFsUmVmKHBvcnRhbE5vZGUpO1xuXG4gICAgICAvLyBVcGRhdGUgc3RhdGUgd2l0aCBwb3J0YWxOb2RlIHRvIGludGVudGlvbmFsbHkgdHJpZ2dlciBjb21wb25lbnQgcmVyZW5kZXJcbiAgICAgIC8vIGFuZCBjYWxsIGNyZWF0ZVBvcnRhbCB3aXRoIGNvcnJlY3Qgcm9vdCBlbGVtZW50IGluIHJlbmRlcigpXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcG9ydGFsTm9kZTogcG9ydGFsTm9kZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdmFyIHBvcnRhbE5vZGUgPSB0aGlzLnN0YXRlLnBvcnRhbE5vZGU7XG4gICAgICBpZiAocG9ydGFsTm9kZSAhPT0gbnVsbCAmJiBwb3J0YWxOb2RlICE9PSB2b2lkIDAgJiYgcG9ydGFsTm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIHBvcnRhbE5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwb3J0YWxOb2RlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlUG9ydGFsUmVmKG51bGwpO1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgaW5oZXJpdGVkIGNvbG9yIG9mIHRoZSBwb3J0YWwgYmFzZWQgb24gdGhlIHdyYXBwaW5nIEV1aVRoZW1lUHJvdmlkZXJcbiAgfSwge1xuICAgIGtleTogXCJzZXRUaGVtZUNvbG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFRoZW1lQ29sb3IocG9ydGFsTm9kZSkge1xuICAgICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgICB2YXIgX3RoaXMkY29udGV4dCA9IHRoaXMuY29udGV4dCxcbiAgICAgICAgICBoYXNEaWZmZXJlbnRDb2xvckZyb21HbG9iYWxUaGVtZSA9IF90aGlzJGNvbnRleHQuaGFzRGlmZmVyZW50Q29sb3JGcm9tR2xvYmFsVGhlbWUsXG4gICAgICAgICAgY29sb3JDbGFzc05hbWUgPSBfdGhpcyRjb250ZXh0LmNvbG9yQ2xhc3NOYW1lO1xuICAgICAgICBpZiAoaGFzRGlmZmVyZW50Q29sb3JGcm9tR2xvYmFsVGhlbWUgJiYgdGhpcy5wcm9wcy5pbnNlcnQgPT0gbnVsbCkge1xuICAgICAgICAgIHBvcnRhbE5vZGUuY2xhc3NMaXN0LmFkZChjb2xvckNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXBkYXRlUG9ydGFsUmVmXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbFJlZihyZWYpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLnBvcnRhbFJlZikge1xuICAgICAgICB0aGlzLnByb3BzLnBvcnRhbFJlZihyZWYpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIHBvcnRhbE5vZGUgPSB0aGlzLnN0YXRlLnBvcnRhbE5vZGU7XG4gICAgICBpZiAoIXBvcnRhbE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2NyZWF0ZVBvcnRhbCh0aGlzLnByb3BzLmNoaWxkcmVuLCBwb3J0YWxOb2RlKTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlQb3J0YWxDbGFzcywgXCJjb250ZXh0VHlwZVwiLCBFdWlOZXN0ZWRUaGVtZUNvbnRleHQpO1xuRXVpUG9ydGFsQ2xhc3MucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogSWYgbm90IHNwZWNpZmllZCwgYEV1aVBvcnRhbGAgd2lsbCBpbnNlcnQgaXRzZWxmXG4gICAgICogaW50byB0aGUgZW5kIG9mIHRoZSBgZG9jdW1lbnQuYm9keWAgYnkgZGVmYXVsdFxuICAgICAqL1xuICBpbnNlcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgc2libGluZzogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgIHBvc2l0aW9uOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRcbiAgfSksXG4gIC8qKlxuICAgICAqIE9wdGlvbmFsIHJlZiBjYWxsYmFja1xuICAgICAqL1xuICBwb3J0YWxSZWY6IFByb3BUeXBlcy5mdW5jXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbi8vIERlY2xhcmluZyBhcyBhIHN0YXRpYyBjb25zdCBmb3IgcmVmZXJlbmNlIGludGVncml0eS9yZWR1Y2luZyByZXJlbmRlcnNcbnZhciBlbXB0eURlZmF1bHRzID0ge307XG5cbi8qXG4gKiBDb250ZXh0XG4gKi9cbmV4cG9ydCB2YXIgRXVpQ29tcG9uZW50RGVmYXVsdHNDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoZW1wdHlEZWZhdWx0cyk7XG5cbi8qXG4gKiBDb21wb25lbnRcbiAqL1xuXG5leHBvcnQgdmFyIEV1aUNvbXBvbmVudERlZmF1bHRzUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlDb21wb25lbnREZWZhdWx0c1Byb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIF9yZWYkY29tcG9uZW50RGVmYXVsdCA9IF9yZWYuY29tcG9uZW50RGVmYXVsdHMsXG4gICAgY29tcG9uZW50RGVmYXVsdHMgPSBfcmVmJGNvbXBvbmVudERlZmF1bHQgPT09IHZvaWQgMCA/IGVtcHR5RGVmYXVsdHMgOiBfcmVmJGNvbXBvbmVudERlZmF1bHQsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb21wb25lbnREZWZhdWx0c0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29tcG9uZW50RGVmYXVsdHNcbiAgfSwgY2hpbGRyZW4pO1xufTtcblxuLypcbiAqIEhvb2tzXG4gKi9cbkV1aUNvbXBvbmVudERlZmF1bHRzUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICBjb21wb25lbnREZWZhdWx0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIFByb3ZpZGUgYSBnbG9iYWwgY29uZmlndXJhdGlvbiBmb3IgRXVpUG9ydGFsJ3MgZGVmYXVsdCBpbnNlcnRpb24gcG9zaXRpb24uXG4gICAgICAgKi9cbiAgICBFdWlQb3J0YWw6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBQcm92aWRlIGEgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZm9yIEV1aUZvY3VzVHJhcCdzIGBnYXBNb2RlYCBhbmQgYGNyb3NzRnJhbWVgIHByb3BzXG4gICAgICAgKi9cbiAgICBFdWlGb2N1c1RyYXA6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBQcm92aWRlIGdsb2JhbCBzZXR0aW5ncyBmb3IgRXVpVGFibGVQYWdpbmF0aW9uJ3MgcHJvcHMgdGhhdCBhZmZlY3QgcGFnZSBzaXplXG4gICAgICAgKiAvIHRoZSByb3dzIHBlciBwYWdlIHNlbGVjdGlvbi5cbiAgICAgICAqXG4gICAgICAgKiBUaGVzZSBkZWZhdWx0cyB3aWxsIGJlIGluaGVyaXRlZCBhbGwgdGFibGUgYW5kIGdyaWQgY29tcG9uZW50cyB0aGF0IHV0aWxpemUgRXVpVGFibGVQYWdpbmF0aW9uLlxuICAgICAgICovXG4gICAgRXVpVGFibGVQYWdpbmF0aW9uOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogUHJvdmlkZSBhIGdsb2JhbCBjb25maWd1cmF0aW9uIGZvciBFdWlUYWJsZSdzIGByZXNwb25zaXZlQnJlYWtwb2ludGAgcHJvcC4gRGVmYXVsdHMgdG8gYCdzJ2AuXG4gICAgICAgKlxuICAgICAgICogRGVmYXVsdHMgd2lsbCBiZSBpbmhlcml0ZWQgYnkgYWxsIGBFdWlCYXNpY1RhYmxlYHMgYW5kIGBFdWlJbk1lbW9yeVRhYmxlYHMuXG4gICAgICAgKi9cbiAgICBFdWlUYWJsZTogUHJvcFR5cGVzLmFueVxuICB9KVxufTtcbmV4cG9ydCB2YXIgdXNlQ29tcG9uZW50RGVmYXVsdHMgPSBmdW5jdGlvbiB1c2VDb21wb25lbnREZWZhdWx0cygpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoRXVpQ29tcG9uZW50RGVmYXVsdHNDb250ZXh0KTtcbn07XG5cbi8vIE1lcmdlIGluZGl2aWR1YWwgY29tcG9uZW50IHByb3BzIHdpdGggY29tcG9uZW50IGRlZmF1bHRzXG5leHBvcnQgdmFyIHVzZVByb3BzV2l0aENvbXBvbmVudERlZmF1bHRzID0gZnVuY3Rpb24gdXNlUHJvcHNXaXRoQ29tcG9uZW50RGVmYXVsdHMoY29tcG9uZW50TmFtZSwgcHJvcHMpIHtcbiAgdmFyIF9jb250ZXh0JGNvbXBvbmVudE5hbTtcbiAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KEV1aUNvbXBvbmVudERlZmF1bHRzQ29udGV4dCk7XG4gIHZhciBjb21wb25lbnREZWZhdWx0cyA9IChfY29udGV4dCRjb21wb25lbnROYW0gPSBjb250ZXh0W2NvbXBvbmVudE5hbWVdKSAhPT0gbnVsbCAmJiBfY29udGV4dCRjb21wb25lbnROYW0gIT09IHZvaWQgMCA/IF9jb250ZXh0JGNvbXBvbmVudE5hbSA6IGVtcHR5RGVmYXVsdHM7XG4gIHJldHVybiB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb21wb25lbnREZWZhdWx0cyksIHByb3BzKTtcbiAgfSwgW2NvbXBvbmVudERlZmF1bHRzLCBwcm9wc10pO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwidGl0bGVcIiwgXCJjbGFzc05hbWVcIiwgXCJwb3NpdGlvblRvb2xUaXBcIiwgXCJwb3BvdmVyUmVmXCIsIFwiY2FsY3VsYXRlZFBvc2l0aW9uXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRvb2xUaXBTdHlsZXMgfSBmcm9tICcuL3Rvb2xfdGlwLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUb29sVGlwUG9wb3ZlciA9IGZ1bmN0aW9uIEV1aVRvb2xUaXBQb3BvdmVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgcG9zaXRpb25Ub29sVGlwID0gX3JlZi5wb3NpdGlvblRvb2xUaXAsXG4gICAgcG9wb3ZlclJlZiA9IF9yZWYucG9wb3ZlclJlZixcbiAgICBjYWxjdWxhdGVkUG9zaXRpb24gPSBfcmVmLmNhbGN1bGF0ZWRQb3NpdGlvbixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBwb3BvdmVyID0gdXNlUmVmKCk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlUb29sVGlwU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVG9vbFRpcCwgY2FsY3VsYXRlZFBvc2l0aW9uICYmIHN0eWxlc1tjYWxjdWxhdGVkUG9zaXRpb25dXTtcbiAgdmFyIHVwZGF0ZURpbWVuc2lvbnMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEJlY2F1c2Ugb2YgdGhpcyBkZWxheSwgc29tZXRpbWVzIGBwb3NpdGlvblRvb2xUaXBgIGJlY29tZXMgdW5hdmFpbGFibGUuXG4gICAgICBpZiAocG9wb3Zlci5jdXJyZW50KSB7XG4gICAgICAgIHBvc2l0aW9uVG9vbFRpcCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbcG9zaXRpb25Ub29sVGlwXSk7XG4gIHZhciBzZXRQb3BvdmVyUmVmID0gZnVuY3Rpb24gc2V0UG9wb3ZlclJlZihyZWYpIHtcbiAgICBpZiAocG9wb3ZlclJlZikge1xuICAgICAgcG9wb3ZlclJlZihyZWYpO1xuICAgIH1cbiAgfTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2V1aUJvZHktaGFzUG9ydGFsQ29udGVudCcpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVEaW1lbnNpb25zKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdldWlCb2R5LWhhc1BvcnRhbENvbnRlbnQnKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVEaW1lbnNpb25zKTtcbiAgICB9O1xuICB9LCBbdXBkYXRlRGltZW5zaW9uc10pO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXBQb3BvdmVyJywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICByZWY6IHNldFBvcG92ZXJSZWYsXG4gICAgXCJkYXRhLXBvc2l0aW9uXCI6IGNhbGN1bGF0ZWRQb3NpdGlvblxuICB9LCByZXN0KSwgdGl0bGUgJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY3NzOiBzdHlsZXMuZXVpVG9vbFRpcF9fdGl0bGUsXG4gICAgY2xhc3NOYW1lOiBcImV1aVRvb2xUaXBfX3RpdGxlXCJcbiAgfSwgdGl0bGUpLCBjaGlsZHJlbik7XG59O1xuRXVpVG9vbFRpcFBvcG92ZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgcG9zaXRpb25Ub29sVGlwOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcbiAgcG9wb3ZlclJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gIGNhbGN1bGF0ZWRQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSlcbn07IiwgInZhciBfdGVtcGxhdGVPYmplY3QsIF90ZW1wbGF0ZU9iamVjdDI7XG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHsgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KSB9IH0pKTsgfVxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsU2l6ZUNTUywgZXVpRm9udFNpemUsIGV1aUNhbkFuaW1hdGUsIG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBDT0xPUl9NT0RFU19TVEFOREFSRCwgdGludCwgc2hhZGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlTaGFkb3cgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtJztcbmV4cG9ydCB2YXIgZXVpVG9vbFRpcEJhY2tncm91bmRDb2xvciA9IGZ1bmN0aW9uIGV1aVRvb2xUaXBCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWUsIGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSBDT0xPUl9NT0RFU19TVEFOREFSRC5kYXJrID8gc2hhZGUoZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsIDEpIDogdGludChldWlUaGVtZS5jb2xvcnMuZnVsbFNoYWRlLCAwLjI1KTtcbn07XG5leHBvcnQgdmFyIGV1aVRvb2xUaXBCb3JkZXJDb2xvciA9IGZ1bmN0aW9uIGV1aVRvb2xUaXBCb3JkZXJDb2xvcihldWlUaGVtZSwgY29sb3JNb2RlKSB7XG4gIHJldHVybiBjb2xvck1vZGUgPT09IENPTE9SX01PREVTX1NUQU5EQVJELmRhcmsgPyBzaGFkZShldWlUaGVtZS5jb2xvcnMuZnVsbFNoYWRlLCAwLjgpIDogdGludChldWlUaGVtZS5jb2xvcnMuZnVsbFNoYWRlLCAwLjM1KTtcbn07XG52YXIgZXVpVG9vbFRpcEFuaW1hdGlvblZlcnRpY2FsID0gZnVuY3Rpb24gZXVpVG9vbFRpcEFuaW1hdGlvblZlcnRpY2FsKHNpemUpIHtcbiAgcmV0dXJuIGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgIDAlIHtcXG4gICAgICAgIG9wYWNpdHk6IDA7XFxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoXCIsIFwiKTtcXG4gICAgfVxcblxcbiAgICAxMDAlIHtcXG4gICAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XFxuICAgIH1cXG5cIl0pKSwgc2l6ZSk7XG59O1xudmFyIGV1aVRvb2xUaXBBbmltYXRpb25Ib3Jpem9udGFsID0gZnVuY3Rpb24gZXVpVG9vbFRpcEFuaW1hdGlvbkhvcml6b250YWwoc2l6ZSkge1xuICByZXR1cm4ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdDIgfHwgKF90ZW1wbGF0ZU9iamVjdDIgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICAwJSB7XFxuICAgICAgICBvcGFjaXR5OiAwO1xcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKFwiLCBcIik7XFxuICAgIH1cXG5cXG4gICAgMTAwJSB7XFxuICAgICAgICBvcGFjaXR5OiAxO1xcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xcbiAgICB9XFxuXCJdKSksIHNpemUpO1xufTtcbmV4cG9ydCB2YXIgZXVpVG9vbFRpcFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRvb2xUaXBTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICB2YXIgYW5pbWF0aW9uVGltaW5nID0gXCJcIi5jb25jYXQoZXVpVGhlbWUuYW5pbWF0aW9uLnNsb3csIFwiIGVhc2Utb3V0IDBzIGZvcndhcmRzXCIpO1xuICAvLyBTaGlmdCBhcnJvdyAxcHggbW9yZSB0aGFuIGhhbGYgaXRzIHNpemUgdG8gYWNjb3VudCBmb3IgYm9yZGVyIHJhZGl1c1xuICB2YXIgYXJyb3dTaXplID0gZXVpVGhlbWUuc2l6ZS5tO1xuICB2YXIgYXJyb3dQbHVzU2l6ZSA9IG1hdGhXaXRoVW5pdHMoYXJyb3dTaXplLCBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiAoeCAvIDIgKyAxKSAqIC0xO1xuICB9KTtcbiAgdmFyIGFycm93TWludXNTaXplID0gbWF0aFdpdGhVbml0cyhhcnJvd1NpemUsIGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuICh4IC8gMiAtIDEpICogLTE7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlUb29sVGlwOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQpLCBcIiBib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSwgXCI7YmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVG9vbFRpcEJhY2tncm91bmRDb2xvcihldWlUaGVtZSwgY29sb3JNb2RlKSwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7ei1pbmRleDpcIiwgZXVpVGhlbWUubGV2ZWxzLnRvYXN0LCBcIjtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzI1NnB4JyksIFwiIG92ZXJmbG93LXdyYXA6YnJlYWstd29yZDtwYWRkaW5nOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiO1wiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiIHBvc2l0aW9uOmFic29sdXRlO1tjbGFzcyo9J2V1aUhvcml6b250YWxSdWxlJ117YmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVG9vbFRpcEJvcmRlckNvbG9yKGV1aVRoZW1lLCBjb2xvck1vZGUpLCBcIjt9O2xhYmVsOmV1aVRvb2xUaXA7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgczogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICd4cycpLCBcIjs7bGFiZWw6cztcIiksXG4gICAgLy8gUG9zaXRpb25zXG4gICAgdG9wOiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgZXVpVG9vbFRpcEFuaW1hdGlvblZlcnRpY2FsKFwiLVwiLmNvbmNhdChldWlUaGVtZS5zaXplLmJhc2UpKSwgXCIgXCIsIGFuaW1hdGlvblRpbWluZywgXCI7fTtsYWJlbDp0b3A7XCIpLFxuICAgIGJvdHRvbTogLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInthbmltYXRpb246XCIsIGV1aVRvb2xUaXBBbmltYXRpb25WZXJ0aWNhbChldWlUaGVtZS5zaXplLmJhc2UpLCBcIiBcIiwgYW5pbWF0aW9uVGltaW5nLCBcIjt9O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInthbmltYXRpb246XCIsIGV1aVRvb2xUaXBBbmltYXRpb25Ib3Jpem9udGFsKFwiLVwiLmNvbmNhdChldWlUaGVtZS5zaXplLmJhc2UpKSwgXCIgXCIsIGFuaW1hdGlvblRpbWluZywgXCI7fTtsYWJlbDpsZWZ0O1wiKSxcbiAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInthbmltYXRpb246XCIsIGV1aVRvb2xUaXBBbmltYXRpb25Ib3Jpem9udGFsKGV1aVRoZW1lLnNpemUuYmFzZSksIFwiIFwiLCBhbmltYXRpb25UaW1pbmcsIFwiO307bGFiZWw6cmlnaHQ7XCIpLFxuICAgIC8vIEFycm93XG4gICAgZXVpVG9vbFRpcF9fYXJyb3c6IC8qI19fUFVSRV9fKi9jc3MoXCJjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2JvcmRlci1yYWRpdXM6XCIsIG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4IC8gMjtcbiAgICB9KSwgXCI7YmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVG9vbFRpcEJhY2tncm91bmRDb2xvcihldWlUaGVtZSwgY29sb3JNb2RlKSwgXCI7XCIsIGxvZ2ljYWxTaXplQ1NTKGFycm93U2l6ZSwgYXJyb3dTaXplKSwgXCI7O2xhYmVsOmV1aVRvb2xUaXBfX2Fycm93O1wiKSxcbiAgICBhcnJvd1Bvc2l0aW9uczoge1xuICAgICAgdG9wOiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVkoXCIsIGFycm93UGx1c1NpemUsIFwiKSByb3RhdGVaKDQ1ZGVnKTs7bGFiZWw6dG9wO1wiKSxcbiAgICAgIGJvdHRvbTogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVZKFwiLCBhcnJvd01pbnVzU2l6ZSwgXCIpIHJvdGF0ZVooNDVkZWcpOztsYWJlbDpib3R0b207XCIpLFxuICAgICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVYKFwiLCBhcnJvd1BsdXNTaXplLCBcIikgcm90YXRlWig0NWRlZyk7O2xhYmVsOmxlZnQ7XCIpLFxuICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWChcIiwgYXJyb3dNaW51c1NpemUsIFwiKSByb3RhdGVaKDQ1ZGVnKTs7bGFiZWw6cmlnaHQ7XCIpXG4gICAgfSxcbiAgICAvLyBUaXRsZVxuICAgIGV1aVRvb2xUaXBfX3RpdGxlOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0LmJvbGQsIFwiO1wiLCBsb2dpY2FsQ1NTKCdib3JkZXItYm90dG9tJywgXCJzb2xpZCBcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIFwiKS5jb25jYXQoZXVpVG9vbFRpcEJvcmRlckNvbG9yKGV1aVRoZW1lLCBjb2xvck1vZGUpKSksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWJvdHRvbScsIGV1aVRoZW1lLnNpemUueHMpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGV1aVRoZW1lLnNpemUueHMpLCBcIjs7bGFiZWw6ZXVpVG9vbFRpcF9fdGl0bGU7XCIpXG4gIH07XG59O1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiZnppbG5rLWlubGluZUJsb2NrXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmlubGluZS1ibG9jaztsYWJlbDppbmxpbmVCbG9jaztcIlxufSA6IHtcbiAgbmFtZTogXCJmemlsbmstaW5saW5lQmxvY2tcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6aW5saW5lLWJsb2NrO2xhYmVsOmlubGluZUJsb2NrO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTRhY2V1eS1ibG9ja1wiLFxuICBzdHlsZXM6IFwiZGlzcGxheTpibG9jaztsYWJlbDpibG9jaztcIlxufSA6IHtcbiAgbmFtZTogXCIxNGFjZXV5LWJsb2NrXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmJsb2NrO2xhYmVsOmJsb2NrO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXMzaTNwNS1ldWlUb29sVGlwQW5jaG9yXCIsXG4gIHN0eWxlczogXCIqW2Rpc2FibGVkXXtwb2ludGVyLWV2ZW50czpub25lO307bGFiZWw6ZXVpVG9vbFRpcEFuY2hvcjtcIlxufSA6IHtcbiAgbmFtZTogXCIxczNpM3A1LWV1aVRvb2xUaXBBbmNob3JcIixcbiAgc3R5bGVzOiBcIipbZGlzYWJsZWRde3BvaW50ZXItZXZlbnRzOm5vbmU7fTtsYWJlbDpldWlUb29sVGlwQW5jaG9yO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVRvb2xUaXBBbmNob3JTdHlsZXMgPSBmdW5jdGlvbiBldWlUb29sVGlwQW5jaG9yU3R5bGVzKCkge1xuICByZXR1cm4ge1xuICAgIC8vIEVsZW1lbnRzXG4gICAgZXVpVG9vbFRpcEFuY2hvcjogX3JlZjMsXG4gICAgLy8gVmFyaWFudHNcbiAgICBibG9jazogX3JlZjIsXG4gICAgaW5saW5lQmxvY2s6IF9yZWZcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJvbkJsdXJcIiwgXCJvbkZvY3VzXCIsIFwib25Nb3VzZU92ZXJcIiwgXCJvbk1vdXNlT3V0XCIsIFwiaWRcIiwgXCJjbGFzc05hbWVcIiwgXCJjaGlsZHJlblwiLCBcImRpc3BsYXlcIiwgXCJpc1Zpc2libGVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGV1aVRvb2xUaXBBbmNob3JTdHlsZXMgfSBmcm9tICcuL3Rvb2xfdGlwLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUb29sVGlwQW5jaG9yID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX29uQmx1ciA9IF9yZWYub25CbHVyLFxuICAgIF9vbkZvY3VzID0gX3JlZi5vbkZvY3VzLFxuICAgIG9uTW91c2VPdmVyID0gX3JlZi5vbk1vdXNlT3ZlcixcbiAgICBvbk1vdXNlT3V0ID0gX3JlZi5vbk1vdXNlT3V0LFxuICAgIGlkID0gX3JlZi5pZCxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgZGlzcGxheSA9IF9yZWYuZGlzcGxheSxcbiAgICBpc1Zpc2libGUgPSBfcmVmLmlzVmlzaWJsZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBhbmNob3JDc3MgPSBldWlUb29sVGlwQW5jaG9yU3R5bGVzKCk7XG4gIHZhciBjc3NTdHlsZXMgPSBbYW5jaG9yQ3NzLmV1aVRvb2xUaXBBbmNob3IsIGFuY2hvckNzc1tkaXNwbGF5XV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVG9vbFRpcEFuY2hvcicsIGNsYXNzTmFtZSk7XG4gIHJldHVybiAoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L21vdXNlLWV2ZW50cy1oYXZlLWtleS1ldmVudHNcbiAgICBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IHJlZixcbiAgICAgIGNzczogY3NzU3R5bGVzXG4gICAgfSwgcmVzdCwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgb25Nb3VzZU92ZXI6IG9uTW91c2VPdmVyLFxuICAgICAgb25Nb3VzZU91dDogb25Nb3VzZU91dFxuICAgIH0pLCAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICBvbkZvY3VzOiBmdW5jdGlvbiBvbkZvY3VzKGUpIHtcbiAgICAgICAgX29uRm9jdXMoKTtcbiAgICAgICAgY2hpbGRyZW4ucHJvcHMub25Gb2N1cyAmJiBjaGlsZHJlbi5wcm9wcy5vbkZvY3VzKGUpO1xuICAgICAgfSxcbiAgICAgIG9uQmx1cjogZnVuY3Rpb24gb25CbHVyKGUpIHtcbiAgICAgICAgX29uQmx1cigpO1xuICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkJsdXIgJiYgY2hpbGRyZW4ucHJvcHMub25CbHVyKGUpO1xuICAgICAgfSxcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogaXNWaXNpYmxlID8gY2xhc3NOYW1lcyhpZCwgY2hpbGRyZW4ucHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXSkgOiBjaGlsZHJlbi5wcm9wc1snYXJpYS1kZXNjcmliZWRieSddXG4gICAgfSkpXG4gICk7XG59KTtcbkV1aVRvb2xUaXBBbmNob3IucHJvcFR5cGVzID0ge1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGlzVmlzaWJsZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZFxufTtcbkV1aVRvb2xUaXBBbmNob3IuZGlzcGxheU5hbWUgPSAnRXVpVG9vbFRpcEFuY2hvcic7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJwb3NpdGlvblwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpVG9vbFRpcFN0eWxlcyB9IGZyb20gJy4vdG9vbF90aXAuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRvb2xUaXBBcnJvdyA9IGZ1bmN0aW9uIEV1aVRvb2xUaXBBcnJvdyhfcmVmKSB7XG4gIHZhciBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVRvb2xUaXBTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUb29sVGlwX19hcnJvdywgc3R5bGVzLmFycm93UG9zaXRpb25zW3Bvc2l0aW9uXV07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCBwcm9wcykpO1xufTtcbkV1aVRvb2xUaXBBcnJvdy5wcm9wVHlwZXMgPSB7XG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKS5pc1JlcXVpcmVkXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vKipcbiAqIE1hbmFnZXIgdXRpbGl0eSB0aGF0IGVuc3VyZXMgb25seSBvbmUgdG9vbHRpcCBpcyB2aXNpYmxlIGF0IGEgdGltZVxuICpcbiAqIFVYIHJhdGlvbmFsZSAocHJpbWFyaWx5IGZvciBtb3VzZS1vbmx5IHVzZXJzKTpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMva2liYW5hL2lzc3Vlcy8xNDQ0ODJcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL2lzc3Vlcy81ODgzXG4gKi9cbnZhciBUb29sVGlwTWFuYWdlciA9IC8qI19fUFVSRV9fKi9fY3JlYXRlQ2xhc3MoZnVuY3Rpb24gVG9vbFRpcE1hbmFnZXIoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb29sVGlwTWFuYWdlcik7XG4gIC8vIFdlIHVzZSBhIHNldCBpbnN0ZWFkIG9mIGEgc2luZ2xlIHZhciBqdXN0IGluIGNhc2VcbiAgLy8gbXVsdGlwbGUgdG9vbHRpcHMgYXJlIHJlZ2lzdGVyZWQgdmlhIGFzeW5jIHNoZW5hbmlnYW5zXG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRvb2xUaXBzVG9IaWRlXCIsIG5ldyBTZXQoKSk7XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlZ2lzdGVyVG9vbHRpcFwiLCBmdW5jdGlvbiAoaGlkZUNhbGxiYWNrKSB7XG4gICAgX3RoaXMudG9vbFRpcHNUb0hpZGUuZm9yRWFjaChmdW5jdGlvbiAoaGlkZSkge1xuICAgICAgcmV0dXJuIGhpZGUoKTtcbiAgICB9KTtcbiAgICBfdGhpcy50b29sVGlwc1RvSGlkZS5jbGVhcigpO1xuICAgIF90aGlzLnRvb2xUaXBzVG9IaWRlLmFkZChoaWRlQ2FsbGJhY2spO1xuICB9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZGVyZWdpc3RlclRvb2xUaXBcIiwgZnVuY3Rpb24gKGhpZGVDYWxsYmFjaykge1xuICAgIF90aGlzLnRvb2xUaXBzVG9IaWRlLmRlbGV0ZShoaWRlQ2FsbGJhY2spO1xuICB9KTtcbn0pO1xuZXhwb3J0IHZhciB0b29sVGlwTWFuYWdlciA9IG5ldyBUb29sVGlwTWFuYWdlcigpOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widHlwZVwiLCBcImFyaWEtbGFiZWxcIiwgXCJjb2xvclwiLCBcInNpemVcIiwgXCJpY29uUHJvcHNcIiwgXCJwb3NpdGlvblwiLCBcImRlbGF5XCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4vdG9vbF90aXAnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSWNvblRpcCA9IGZ1bmN0aW9uIEV1aUljb25UaXAoX3JlZikge1xuICB2YXIgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdxdWVzdGlvbkluQ2lyY2xlJyA6IF9yZWYkdHlwZSxcbiAgICBhcmlhTGFiZWwgPSBfcmVmWydhcmlhLWxhYmVsJ10sXG4gICAgY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgaWNvblByb3BzID0gX3JlZi5pY29uUHJvcHMsXG4gICAgX3JlZiRwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgcG9zaXRpb24gPSBfcmVmJHBvc2l0aW9uID09PSB2b2lkIDAgPyAndG9wJyA6IF9yZWYkcG9zaXRpb24sXG4gICAgX3JlZiRkZWxheSA9IF9yZWYuZGVsYXksXG4gICAgZGVsYXkgPSBfcmVmJGRlbGF5ID09PSB2b2lkIDAgPyAncmVndWxhcicgOiBfcmVmJGRlbGF5LFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGRlZmF1bHRBcmlhTGFiZWwgPSB1c2VFdWlJMThuKCdldWlJY29uVGlwLmRlZmF1bHRBcmlhTGFiZWwnLCAnSW5mbycpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgIGRlbGF5OiBkZWxheVxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCBfZXh0ZW5kcyh7XG4gICAgdGFiSW5kZXg6IDAsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb2xvcjogY29sb3IsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsIHx8IGRlZmF1bHRBcmlhTGFiZWxcbiAgfSwgaWNvblByb3BzKSkpO1xufTtcbkV1aUljb25UaXAucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgc3BhbiB3cmFwcGluZyB0aGUgdHJpZ2dlci5cbiAgICAgKi9cbiAgYW5jaG9yQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgc3BhbiB3cmFwcGluZyB0aGUgdHJpZ2dlci5cbiAgICAgKi9cbiAgYW5jaG9yUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSB0b29sdGlwIGl0c2VsZiwgbm90IHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFRoZSBtYWluIGNvbnRlbnQgb2YgeW91ciB0b29sdGlwLlxuICAgICAqL1xuICBjb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogQ29tbW9uIGRpc3BsYXkgYWx0ZXJuYXRpdmVzIGZvciB0aGUgYW5jaG9yIHdyYXBwZXJcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgdGl0bGUgZm9yIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBVbmxlc3MgeW91IHByb3ZpZGUgb25lLCB0aGlzIHdpbGwgYmUgcmFuZG9tbHkgZ2VuZXJhdGVkLlxuICAgICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAsIHRoZSB0b29sdGlwJ3MgcG9zaXRpb24gaXMgcmUtY2FsY3VsYXRlZCB3aGVuIHRoZSB1c2VyXG4gICAgICogc2Nyb2xscy4gVGhpcyBzdXBwb3J0cyBoYXZpbmcgZml4ZWQtcG9zaXRpb24gdG9vbHRpcCBhbmNob3JzLlxuICAgICAqXG4gICAgICogV2hlbiBuZXN0aW5nIGFuIGBFdWlUb29sdGlwYCBpbiBhIHNjcm9sbGFibGUgY29udGFpbmVyLCBgcmVwb3NpdGlvbk9uU2Nyb2xsYCBzaG91bGQgYmUgYHRydWVgXG4gICAgICovXG4gIHJlcG9zaXRpb25PblNjcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIElmIHN1cHBsaWVkLCBjYWxsZWQgd2hlbiBtb3VzZSBtb3ZlbWVudCBjYXVzZXMgdGhlIHRvb2wgdGlwIHRvIGJlXG4gICAgICogaGlkZGVuLlxuICAgICAqL1xuICBvbk1vdXNlT3V0OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogRXhwbGFpbiB3aGF0IHRoaXMgaWNvbiBtZWFucyBmb3Igc2NyZWVuIHJlYWRlcnMuXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogVGhlIGljb24gY29sb3IuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBUaGUgaWNvbiB0eXBlLlxuICAgICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBUaGUgaWNvbiBzaXplLlxuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBQYXNzIGNlcnRhaW4gcHJvcHMgZG93biB0byBgRXVpSWNvbmBcbiAgICAgKi9cbiAgLy8gRXVpSWNvblRpcCdzIGB0eXBlYCBpcyBwYXNzZWQgdG8gRXVpSWNvbiwgc28gd2Ugd2FudCB0byBleGNsdWRlIGB0eXBlYCBmcm9tXG4gIC8vIGljb25Qcm9wczsgaG93ZXZlciwgZHVlIHRvIFRTJ3MgYml2YXJpYW50IGZ1bmN0aW9uIGFyZ3VtZW50cyBgdHlwZWAgY291bGQgYmVcbiAgLy8gcGFzc2VkIHdpdGhvdXQgYW55IGVycm9yL2ZlZWRiYWNrIHNvIHdlIGV4cGxpY2l0bHkgc2V0IGl0IHRvIGBuZXZlcmAgdHlwZVxuICBpY29uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIC8vIFRoaXMgYXJlIGNvcGllZCBmcm9tIEV1aVRvb2xUaXBQcm9wcywgYnV0IG1hZGUgb3B0aW9uYWwuIERlZmF1bHRzXG4gIC8vIGFyZSBhcHBsaWVkIGJlbG93LlxuICBkZWxheTogUHJvcFR5cGVzLmFueSxcbiAgcG9zaXRpb246IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjb21wb25lbnRcIiwgXCJzaXplXCIsIFwiY29sb3JcIiwgXCJncm93XCIsIFwidGV4dEFsaWduXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVGV4dENvbG9yIH0gZnJvbSAnLi90ZXh0X2NvbG9yJztcbmltcG9ydCB7IEV1aVRleHRBbGlnbiB9IGZyb20gJy4vdGV4dF9hbGlnbic7XG5pbXBvcnQgeyBldWlUZXh0U3R5bGVzIH0gZnJvbSAnLi90ZXh0LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBURVhUX1NJWkVTID0gWyd4cycsICdzJywgJ20nLCAncmVsYXRpdmUnXTtcbmV4cG9ydCB2YXIgRXVpVGV4dCA9IGZ1bmN0aW9uIEV1aVRleHQoX3JlZikge1xuICB2YXIgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICBjb21wb25lbnQgPSBfcmVmJGNvbXBvbmVudCA9PT0gdm9pZCAwID8gJ2RpdicgOiBfcmVmJGNvbXBvbmVudCxcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBfcmVmJGdyb3cgPSBfcmVmLmdyb3csXG4gICAgZ3JvdyA9IF9yZWYkZ3JvdyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkZ3JvdyxcbiAgICB0ZXh0QWxpZ24gPSBfcmVmLnRleHRBbGlnbixcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGV4dFN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRleHQsICFncm93ID8gc3R5bGVzLmNvbnN0cmFpbmVkV2lkdGggOiB1bmRlZmluZWQsIHN0eWxlc1tzaXplXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGV4dCcsIGNsYXNzTmFtZSk7XG4gIHZhciBDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gIHZhciB0ZXh0ID0gX19fRW1vdGlvbkpTWChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgaWYgKGNvbG9yKSB7XG4gICAgdGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpVGV4dENvbG9yLCB7XG4gICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNsb25lRWxlbWVudDogdHJ1ZVxuICAgIH0sIHRleHQpO1xuICB9XG4gIGlmICh0ZXh0QWxpZ24pIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlUZXh0QWxpZ24sIHtcbiAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgdGV4dEFsaWduOiB0ZXh0QWxpZ24sXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBjbG9uZUVsZW1lbnQ6IHRydWVcbiAgICB9LCB0ZXh0KTtcbiAgfVxuICByZXR1cm4gdGV4dDtcbn07XG5FdWlUZXh0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogVGhlIEhUTUwgZWxlbWVudC90YWcgdG8gcmVuZGVyLlxuICAgICAgICogVXNlIHdpdGggY2FyZSB3aGVuIG5lc3RpbmcgbXVsdGlwbGUgY29tcG9uZW50cyB0byBlbnN1cmUgdmFsaWQgWEhUTUw6XG4gICAgICAgKiAtIGA8ZGl2PmAgYW5kIG90aGVyIGJsb2NrIHRhZ3MgYXJlIG5vdCB2YWxpZCB0byB1c2UgaW5zaWRlIGA8cD5gLiBJZiB1c2luZyB0aGUgYDxwPmAgdGFnLCB3ZSByZWNvbW1lbmQgcGFzc2luZyBzdHJpbmdzL3RleHQgb25seS5cbiAgICAgICAqIC0gYDxzcGFuPmAgaXMgdmFsaWQgdG8gYmUgbmVzdGVkIGluIGFueSB0YWcsIGFuZCBjYW4gaGF2ZSBhbnkgdGFnIG5lc3RlZCB3aXRoaW4gaXQuXG4gICAgICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCIsIFwic3BhblwiLCBcInBcIl0pLFxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycyBvciBhIGBoZXhgLCBgcmdiYCBvciBgcmdiYWAgdmFsdWUuXG4gICAgICogQGRlZmF1bHQgaW5oZXJpdFxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQXBwbGllcyBob3Jpem9udGFsIHRleHQgYWxpZ25tZW50XG4gICAgICogQGRlZmF1bHQgbGVmdFxuICAgICAqL1xuICB0ZXh0QWxpZ246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgdGV4dCBzaXplLiBDaG9vc2UgYHJlbGF0aXZlYCB0byBjb250cm9sIHRoZSBgZm9udC1zaXplYCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYSBwYXJlbnQgY29udGFpbmVyLlxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIGdyb3c6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImNsb25lRWxlbWVudFwiLCBcInN0eWxlXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcywgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRleHRDb2xvclN0eWxlcyB9IGZyb20gJy4vdGV4dF9jb2xvci5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ09MT1JTID0gWydkZWZhdWx0JywgJ3N1YmR1ZWQnLCAnc3VjY2VzcycsICdhY2NlbnQnLCAnZGFuZ2VyJywgJ3dhcm5pbmcnLCAnZ2hvc3QnLCAnaW5oZXJpdCddO1xuZXhwb3J0IHZhciBfaXNOYW1lZENvbG9yID0gZnVuY3Rpb24gX2lzTmFtZWRDb2xvcihjb2xvcikge1xuICByZXR1cm4gQ09MT1JTLmluY2x1ZGVzKGNvbG9yKTtcbn07XG5leHBvcnQgdmFyIEV1aVRleHRDb2xvciA9IGZ1bmN0aW9uIEV1aVRleHRDb2xvcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnZGVmYXVsdCcgOiBfcmVmJGNvbG9yLFxuICAgIF9yZWYkY29tcG9uZW50ID0gX3JlZi5jb21wb25lbnQsXG4gICAgQ29tcG9uZW50ID0gX3JlZiRjb21wb25lbnQgPT09IHZvaWQgMCA/ICdzcGFuJyA6IF9yZWYkY29tcG9uZW50LFxuICAgIF9yZWYkY2xvbmVFbGVtZW50ID0gX3JlZi5jbG9uZUVsZW1lbnQsXG4gICAgY2xvbmVFbGVtZW50ID0gX3JlZiRjbG9uZUVsZW1lbnQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRjbG9uZUVsZW1lbnQsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzTmFtZWRDb2xvciA9IF9pc05hbWVkQ29sb3IoY29sb3IpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGV4dENvbG9yU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dENvbG9yLCBpc05hbWVkQ29sb3IgPyBzdHlsZXNbY29sb3JdIDogc3R5bGVzLmN1c3RvbUNvbG9yXTtcblxuICAvLyBXZSdyZSBjaGVja2luZyBpZiBpcyBhIGN1c3RvbSBjb2xvci5cbiAgLy8gSWYgaXQgaXMgYSBjdXN0b20gY29sb3Igd2Ugc2V0IHRoZSBgY29sb3JgIG9mIHRoZSBgLmV1aVRleHRDb2xvcmAgZGl2IHRvIHRoYXQgY3VzdG9tIGNvbG9yLlxuICAvLyBUaGlzIHdheSB0aGUgY2hpbGRyZW4gdGV4dCBlbGVtZW50cyBjYW4gYGluaGVyaXRgIHRoYXQgY29sb3IgYW5kIGJvcmRlciBhbmQgYmFja2dyb3VuZHMgY2FuIGdldCB0aGF0IGBjdXJyZW50Q29sb3JgLlxuICB2YXIgZXVpVGV4dFN0eWxlID0gIWlzTmFtZWRDb2xvciA/IF9vYmplY3RTcHJlYWQoe1xuICAgIGNvbG9yOiBjb2xvclxuICB9LCBzdHlsZSkgOiBfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZSk7XG4gIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIHN0eWxlOiBldWlUZXh0U3R5bGVcbiAgfSwgcmVzdCk7XG4gIGlmICggLyojX19QVVJFX18qL2lzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJiBjbG9uZUVsZW1lbnQpIHtcbiAgICB2YXIgY2hpbGRyZW5TdHlsZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY2hpbGRyZW4ucHJvcHMuc3R5bGUpLCBldWlUZXh0U3R5bGUpO1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIHN0eWxlOiBjaGlsZHJlblN0eWxlXG4gICAgfSkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKENvbXBvbmVudCwgcHJvcHMsIGNoaWxkcmVuKTtcbiAgfVxufTtcbkV1aVRleHRDb2xvci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFRoZSBIVE1MIGVsZW1lbnQvdGFnIHRvIHJlbmRlci5cbiAgICAgICAqIFVzZSB3aXRoIGNhcmUgd2hlbiBuZXN0aW5nIG11bHRpcGxlIGNvbXBvbmVudHMgdG8gZW5zdXJlIHZhbGlkIFhIVE1MOlxuICAgICAgICogLSBgPGRpdj5gIGFuZCBvdGhlciBibG9jayB0YWdzIGFyZSBub3QgdmFsaWQgdG8gdXNlIGluc2lkZSBgPHA+YC4gSWYgdXNpbmcgdGhlIGA8cD5gIHRhZywgd2UgcmVjb21tZW5kIHBhc3Npbmcgc3RyaW5ncy90ZXh0IG9ubHkuXG4gICAgICAgKiAtIGA8c3Bhbj5gIGlzIHZhbGlkIHRvIGJlIG5lc3RlZCBpbiBhbnkgdGFnLCBhbmQgY2FuIGhhdmUgYW55IHRhZyBuZXN0ZWQgd2l0aGluIGl0LlxuICAgICAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLm9uZU9mKFtcImRpdlwiLCBcInNwYW5cIiwgXCJwXCJdKSxcbiAgLyoqXG4gICAgICogQXBwbGllcyB0ZXh0IHN0eWxpbmcgdG8gdGhlIGNoaWxkIGVsZW1lbnQgaW5zdGVhZCBvZiByZW5kZXJpbmcgYSBwYXJlbnQgd3JhcHBlci5cbiAgICAgKiBDYW4gb25seSBiZSB1c2VkIHdoZW4gd3JhcHBpbmcgYSAqc2luZ2xlKiBjaGlsZCBlbGVtZW50L3RhZywgYW5kIG5vdCByYXcgdGV4dC5cbiAgICAgKi9cbiAgY2xvbmVFbGVtZW50OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMgb3IgYSBgaGV4YCwgYHJnYmAgb3IgYHJnYmFgIHZhbHVlLlxuICAgICAqIEBkZWZhdWx0IGluaGVyaXRcbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInVhY2pjNS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJjb2xvcjppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlUZXh0Q29sb3JTdHlsZXMgPSBmdW5jdGlvbiBldWlUZXh0Q29sb3JTdHlsZXMoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpVGV4dENvbG9yOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmV1aVRleHRDb2xvcjtcIiksXG4gICAgZGVmYXVsdDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7O2xhYmVsOmRlZmF1bHQ7XCIpLFxuICAgIHN1YmR1ZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1YmR1ZWRUZXh0LCBcIjs7bGFiZWw6c3ViZHVlZDtcIiksXG4gICAgc3VjY2VzczogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQsIFwiOztsYWJlbDpzdWNjZXNzO1wiKSxcbiAgICBhY2NlbnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmFjY2VudFRleHQsIFwiOztsYWJlbDphY2NlbnQ7XCIpLFxuICAgIGRhbmdlcjogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGFuZ2VyVGV4dCwgXCI7O2xhYmVsOmRhbmdlcjtcIiksXG4gICAgd2FybmluZzogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMud2FybmluZ1RleHQsIFwiOztsYWJlbDp3YXJuaW5nO1wiKSxcbiAgICBnaG9zdDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZ2hvc3QsIFwiIWltcG9ydGFudDs7bGFiZWw6Z2hvc3Q7XCIpLFxuICAgIGluaGVyaXQ6IF9yZWYsXG4gICAgY3VzdG9tQ29sb3I6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6Y3VzdG9tQ29sb3I7XCIpIC8vIEhhbmRsZWQgYnkgYHN0eWxlYCB0YWcgLSB0aGlzIGlzIGp1c3QgaGVyZSBmb3IgYSBjbGFzc05hbWUgaG9va1xuICB9O1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY29tcG9uZW50XCIsIFwidGV4dEFsaWduXCIsIFwiY2xvbmVFbGVtZW50XCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpVGV4dEFsaWduU3R5bGVzIGFzIHN0eWxlcyB9IGZyb20gJy4vdGV4dF9hbGlnbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQUxJR05NRU5UUyA9IFsnbGVmdCcsICdyaWdodCcsICdjZW50ZXInXTtcbmV4cG9ydCB2YXIgRXVpVGV4dEFsaWduID0gZnVuY3Rpb24gRXVpVGV4dEFsaWduKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBfcmVmJGNvbXBvbmVudCA9IF9yZWYuY29tcG9uZW50LFxuICAgIENvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYkY29tcG9uZW50LFxuICAgIF9yZWYkdGV4dEFsaWduID0gX3JlZi50ZXh0QWxpZ24sXG4gICAgdGV4dEFsaWduID0gX3JlZiR0ZXh0QWxpZ24gPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkdGV4dEFsaWduLFxuICAgIF9yZWYkY2xvbmVFbGVtZW50ID0gX3JlZi5jbG9uZUVsZW1lbnQsXG4gICAgY2xvbmVFbGVtZW50ID0gX3JlZiRjbG9uZUVsZW1lbnQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRjbG9uZUVsZW1lbnQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUZXh0QWxpZ24sIHN0eWxlc1t0ZXh0QWxpZ25dXTtcbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCk7XG4gIGlmICggLyojX19QVVJFX18qL2lzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJiBjbG9uZUVsZW1lbnQpIHtcbiAgICByZXR1cm4gY2xvbmVFbGVtZW50V2l0aENzcyhjaGlsZHJlbiwgcHJvcHMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKENvbXBvbmVudCwgcHJvcHMsIGNoaWxkcmVuKTtcbiAgfVxufTtcbkV1aVRleHRBbGlnbi5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFRoZSBIVE1MIGVsZW1lbnQvdGFnIHRvIHJlbmRlci5cbiAgICAgICAqIFVzZSB3aXRoIGNhcmUgd2hlbiBuZXN0aW5nIG11bHRpcGxlIGNvbXBvbmVudHMgdG8gZW5zdXJlIHZhbGlkIFhIVE1MOlxuICAgICAgICogLSBgPGRpdj5gIGFuZCBvdGhlciBibG9jayB0YWdzIGFyZSBub3QgdmFsaWQgdG8gdXNlIGluc2lkZSBgPHA+YC4gSWYgdXNpbmcgdGhlIGA8cD5gIHRhZywgd2UgcmVjb21tZW5kIHBhc3Npbmcgc3RyaW5ncy90ZXh0IG9ubHkuXG4gICAgICAgKiAtIGA8c3Bhbj5gIGlzIHZhbGlkIHRvIGJlIG5lc3RlZCBpbiBhbnkgdGFnLCBhbmQgY2FuIGhhdmUgYW55IHRhZyBuZXN0ZWQgd2l0aGluIGl0LlxuICAgICAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLm9uZU9mKFtcImRpdlwiLCBcInNwYW5cIiwgXCJwXCJdKSxcbiAgLyoqXG4gICAgICogQXBwbGllcyB0ZXh0IHN0eWxpbmcgdG8gdGhlIGNoaWxkIGVsZW1lbnQgaW5zdGVhZCBvZiByZW5kZXJpbmcgYSBwYXJlbnQgd3JhcHBlci5cbiAgICAgKiBDYW4gb25seSBiZSB1c2VkIHdoZW4gd3JhcHBpbmcgYSAqc2luZ2xlKiBjaGlsZCBlbGVtZW50L3RhZywgYW5kIG5vdCByYXcgdGV4dC5cbiAgICAgKi9cbiAgY2xvbmVFbGVtZW50OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQXBwbGllcyBob3Jpem9udGFsIHRleHQgYWxpZ25tZW50XG4gICAgICogQGRlZmF1bHQgbGVmdFxuICAgICAqL1xuICB0ZXh0QWxpZ246IFByb3BUeXBlcy5hbnlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aVRleHRBbGlnblN0eWxlcyA9IHtcbiAgZXVpVGV4dEFsaWduOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmV1aVRleHRBbGlnbjtcIiksXG4gIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIjs7bGFiZWw6bGVmdDtcIiksXG4gIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ3JpZ2h0JyksIFwiOztsYWJlbDpyaWdodDtcIiksXG4gIGNlbnRlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCI7O2xhYmVsOmNlbnRlcjtcIilcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvY3VzUmluZywgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpTGlua0NTUyA9IGZ1bmN0aW9uIGV1aUxpbmtDU1MoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIFwiXFxuICAgIGZvbnQtd2VpZ2h0OiBcIi5jb25jYXQoZXVpVGhlbWUuZm9udC53ZWlnaHQubWVkaXVtLCBcIjtcXG4gICAgXCIpLmNvbmNhdChsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiXFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgICB9XFxuXFxuICAgICY6Zm9jdXMge1xcbiAgICAgIFwiKS5jb25jYXQoZXVpRm9jdXNSaW5nKGV1aVRoZW1lQ29udGV4dCwgJ291dHNldCcpLCBcIlxcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgICAgIHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IFwiKS5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaWNrLCBcIjtcXG4gICAgfVxcbiAgXCIpO1xufTtcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjluamJpNS1kaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiZm9udC13ZWlnaHQ6aW5oZXJpdDsmOmhvdmVye2N1cnNvcjphdXRvO30mOmhvdmVyLCY6Zm9jdXMsJjp0YXJnZXR7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fTtsYWJlbDpkaXNhYmxlZDtcIlxufSA6IHtcbiAgbmFtZTogXCI5bmpiaTUtZGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImZvbnQtd2VpZ2h0OmluaGVyaXQ7Jjpob3ZlcntjdXJzb3I6YXV0bzt9Jjpob3ZlciwmOmZvY3VzLCY6dGFyZ2V0e3RleHQtZGVjb3JhdGlvbjpub25lO307bGFiZWw6ZGlzYWJsZWQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpTGlua1N0eWxlcyA9IGZ1bmN0aW9uIGV1aUxpbmtTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlMaW5rOiAvKiNfX1BVUkVfXyovY3NzKGV1aUxpbmtDU1MoZXVpVGhlbWVDb250ZXh0KSwgXCIgdXNlci1zZWxlY3Q6dGV4dDsmW3RhcmdldD0nX2JsYW5rJ117cG9zaXRpb246cmVsYXRpdmU7fTtsYWJlbDpldWlMaW5rO1wiKSxcbiAgICBkaXNhYmxlZDogX3JlZixcbiAgICAvLyBDb2xvciBzdHlsZXNcbiAgICBwcmltYXJ5OiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQpLCBcIjtsYWJlbDpwcmltYXJ5O1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQpLCBcIjtsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICBzdWNjZXNzOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQpLCBcIjtsYWJlbDpzdWNjZXNzO1wiKSxcbiAgICBhY2NlbnQ6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0KSwgXCI7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5kYW5nZXJUZXh0KSwgXCI7bGFiZWw6ZGFuZ2VyO1wiKSxcbiAgICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMud2FybmluZ1RleHQpLCBcIjtsYWJlbDp3YXJuaW5nO1wiKSxcbiAgICBnaG9zdDogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLmdob3N0KSwgXCI7bGFiZWw6Z2hvc3Q7XCIpLFxuICAgIHRleHQ6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy50ZXh0KSwgXCI7bGFiZWw6dGV4dDtcIilcbiAgfTtcbn07XG52YXIgX2NvbG9yQ1NTID0gZnVuY3Rpb24gX2NvbG9yQ1NTKGNvbG9yKSB7XG4gIHJldHVybiBcIlxcbiAgICBjb2xvcjogXCIuY29uY2F0KGNvbG9yLCBcIjtcXG5cXG4gICAgJjp0YXJnZXQge1xcbiAgICAgIGNvbG9yOiBkYXJrZW4oXCIpLmNvbmNhdChjb2xvciwgXCIsIDEwJSk7XFxuICAgIH1cXG4gIFwiKTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpVGV4dEJyZWFrV29yZCwgZXVpRm9udFNpemUsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbi8qKlxuICogTWl4aW5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVRpdGxlID0gZnVuY3Rpb24gZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBzY2FsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ20nO1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciB0aXRsZVNjYWxlVG9Gb250U2l6ZVNjYWxlTWFwID0ge1xuICAgIHh4eHM6ICd4cycsXG4gICAgeHhzOiAncycsXG4gICAgeHM6ICdtJyxcbiAgICBzOiAnbCcsXG4gICAgbTogJ3hsJyxcbiAgICBsOiAneHhsJ1xuICB9O1xuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsIHRpdGxlU2NhbGVUb0ZvbnRTaXplU2NhbGVNYXBbc2NhbGVdLCBvcHRpb25zKSksIHt9LCB7XG4gICAgZm9udFdlaWdodDogZXVpVGhlbWUuZm9udC53ZWlnaHRbZXVpVGhlbWUuZm9udC50aXRsZS53ZWlnaHRdLFxuICAgIGNvbG9yOiBldWlUaGVtZS5jb2xvcnMudGl0bGVcbiAgfSk7XG59O1xuXG4vKipcbiAqIFN0eWxlc1xuICovXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxeDJxc2IxLXVwcGVyY2FzZVwiLFxuICBzdHlsZXM6IFwidGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xhYmVsOnVwcGVyY2FzZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxeDJxc2IxLXVwcGVyY2FzZVwiLFxuICBzdHlsZXM6IFwidGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xhYmVsOnVwcGVyY2FzZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlUaXRsZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRpdGxlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4ge1xuICAgIGV1aVRpdGxlOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHRCcmVha1dvcmQoKSwgXCIgJisme1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLnNpemUubCksIFwiO307bGFiZWw6ZXVpVGl0bGU7XCIpLFxuICAgIHVwcGVyY2FzZTogX3JlZixcbiAgICAvLyBTaXplc1xuICAgIHh4eHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHh4cycpLCBcIjs7bGFiZWw6eHh4cztcIiksXG4gICAgeHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4cycpLCBcIjs7bGFiZWw6eHhzO1wiKSxcbiAgICB4czogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4cycpLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdtJyksIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ2wnKSwgXCI7O2xhYmVsOmw7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsU2hvcnRoYW5kQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBldWlGb250U2l6ZSwgZXVpQmFja2dyb3VuZENvbG9yLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpTGlua0NTUyB9IGZyb20gJy4uL2xpbmsvbGluay5zdHlsZXMnO1xuaW1wb3J0IHsgZXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZS90aXRsZS5zdHlsZXMnO1xuXG4vKipcbiAqIFRPRE86IE1ha2UgdGhpcyBhIGdsb2JhbCB2YWx1ZSBzbyBpdCBjYW4gYmUgc2V0IGJ5IHRoZW1lP1xuICovXG5leHBvcnQgdmFyIGV1aVRleHRDb25zdHJhaW5lZE1heFdpZHRoID0gJ21heCg2NGNoLCA3NSUpJztcblxuLyoqXG4gKiBNaXhpbnNcbiAqL1xuZXhwb3J0IHZhciBldWlUZXh0ID0gZnVuY3Rpb24gZXVpVGV4dChldWlUaGVtZSkge1xuICB2YXIgaW5oZXJpdENvbG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBjb2xvcjogaW5oZXJpdENvbG9yID8gJ2luaGVyaXQnIDogZXVpVGhlbWUuY29sb3JzLnRleHQsXG4gICAgZm9udFdlaWdodDogZXVpVGhlbWUuZm9udC53ZWlnaHQucmVndWxhclxuICB9O1xufTtcblxuLy8gSW50ZXJuYWwgdXRpbGl0eSBmb3IgRXVpVGV4dCBzY2FsZXMvc2l6ZXNcbnZhciBldWlTY2FsZVRleHQgPSBmdW5jdGlvbiBldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCBvcHRpb25zKSB7XG4gIHZhciBfZXVpRm9udFNpemUgPSBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdtJywgb3B0aW9ucyksXG4gICAgZm9udFNpemUgPSBfZXVpRm9udFNpemUuZm9udFNpemUsXG4gICAgbGluZUhlaWdodCA9IF9ldWlGb250U2l6ZS5saW5lSGVpZ2h0O1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciB1bml0ID0gb3B0aW9ucy51bml0LFxuICAgIF9jdXN0b21TY2FsZSA9IG9wdGlvbnMuY3VzdG9tU2NhbGU7XG4gIHZhciBsaW5lSGVpZ2h0U2l6ZSA9IHVuaXQgPT09ICdlbScgPyBcIlwiLmNvbmNhdChsaW5lSGVpZ2h0LCBcImVtXCIpIDogbGluZUhlaWdodDtcbiAgdmFyIGhlYWRpbmdzID0ge1xuICAgIGgxOiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdsJywgb3B0aW9ucyksXG4gICAgaDI6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ20nLCBvcHRpb25zKSxcbiAgICBoMzogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAncycsIG9wdGlvbnMpLFxuICAgIGg0OiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4cycsIG9wdGlvbnMpLFxuICAgIGg1OiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHMnLCBvcHRpb25zKSxcbiAgICBoNjogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHh4cycsIG9wdGlvbnMpXG4gIH07XG4gIC8vIEdlbmVyYXRlIG1hcmdpbnMgZm9yIGhlYWRpbmdzIGJhc2VkIG9uIGN1c3RvbVNjYWxlIChub3Qgb24gaGVhZGluZyBsZXZlbClcbiAgdmFyIGN1c3RvbVNjYWxlID0gX2N1c3RvbVNjYWxlID09PSAneHh4cycgPyAneHhzJyA6IF9jdXN0b21TY2FsZSB8fCAnbSc7XG4gIHZhciBtYXJnaW5TaXplID0gZXVpVGhlbWUuc2l6ZVtjdXN0b21TY2FsZV07XG4gIHZhciBoZWFkaW5nTWFyZ2luVG9wID0gbWF0aFdpdGhVbml0cyhtYXJnaW5TaXplLCBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB4ICogMjtcbiAgfSk7XG4gIHZhciBoZWFkaW5nTWFyZ2luQm90dG9tID0gbWFyZ2luU2l6ZTtcbiAgdmFyIGJsb2NrUXVvdGVCb3JkZXJXaWR0aCA9IG1hdGhXaXRoVW5pdHMoZm9udFNpemUsIGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHggLyA0O1xuICB9KTtcbiAgcmV0dXJuIFwiXFxuICAgIGZvbnQtc2l6ZTogXCIuY29uY2F0KGZvbnRTaXplLCBcIjtcXG4gICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQobGluZUhlaWdodCwgXCI7XFxuXFxuICAgIGgxIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDEuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmgxLmxpbmVIZWlnaHQsIFwiO1xcbiAgICB9XFxuICAgIGgxOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICB9XFxuXFxuICAgIGgyIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDIuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmgyLmxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGVhZGluZ01hcmdpblRvcCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgaDMge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oMy5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDMubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoNCB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmg0LmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oNC5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGg1IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDUuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmg1LmxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGVhZGluZ01hcmdpblRvcCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgaDYge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oNi5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDYubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBwLFxcbiAgICBkbCxcXG4gICAgYmxvY2txdW90ZSxcXG4gICAgcHJlLFxcbiAgICA+IHVsLFxcbiAgICA+IG9sIHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBsaW5lSGVpZ2h0U2l6ZSksIFwiXFxuICAgIH1cXG5cXG4gICAgdWwsXFxuICAgIG9sIHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgbGluZUhlaWdodFNpemUpLCBcIlxcbiAgICB9XFxuXFxuICAgIC8qIFRoZSBzdHlsZXMgb2YgdGhlIG5lc3RlZCBvcmRlcmVkIGxpc3RzIGZvbGxvdyB0aGUgc3R5bGUgb2YgR2l0SHViXFxuICAgICAgIHdoaWNoIGlzIGNvbW1vbmx5IHVzZWQgaW4gTWFya2Rvd24gb3IgTURYIGZvcm1hdHRpbmcuICovXFxuICAgIG9sIG9sLFxcbiAgICB1bCBvbCB7XFxuICAgICAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1yb21hbjtcXG4gICAgfVxcblxcbiAgICB1bCB1bCBvbCxcXG4gICAgdWwgb2wgb2wsXFxuICAgIG9sIHVsIG9sLFxcbiAgICBvbCBvbCBvbCB7XFxuICAgICAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1hbHBoYTtcXG4gICAgfVxcbiAgXFxuICAgIGJsb2NrcXVvdGUge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChmb250U2l6ZSwgXCI7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsU2hvcnRoYW5kQ1NTKCdwYWRkaW5nJywgXCIwIFwiLmNvbmNhdChmb250U2l6ZSkpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnYm9yZGVyLWxlZnQtd2lkdGgnLCBibG9ja1F1b3RlQm9yZGVyV2lkdGgpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGZvbnRTaXplKSwgXCJcXG4gICAgfVxcblxcbiAgICBkZCArIGR0IHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBmb250U2l6ZSksIFwiXFxuICAgIH1cXG5cXG4gICAgZHQsXFxuICAgIC5ldWktZGVmaW5pdGlvbkxpc3RSZXZlcnNlIGRkIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGxpbmVIZWlnaHQsIFwiO1xcbiAgICB9XFxuXFxuICAgIC5ldWktZGVmaW5pdGlvbkxpc3RSZXZlcnNlIGR0IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnLCBvcHRpb25zKS5mb250U2l6ZSwgXCI7XFxuICAgICAgY29sb3I6IFwiKS5jb25jYXQoZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO1xcbiAgICB9XFxuXFxuICAgIHNtYWxsIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycsIG9wdGlvbnMpLmZvbnRTaXplLCBcIjtcXG4gICAgfVxcblxcbiAgICBwcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSkge1xcbiAgICAgIHBhZGRpbmc6IFwiKS5jb25jYXQobGluZUhlaWdodFNpemUsIFwiO1xcbiAgICB9XFxuXFxuICAgIGNvZGU6bm90KC5ldWlDb2RlKTpub3QoLmV1aUNvZGVCbG9ja19fY29kZSkgIHtcXG4gICAgICBmb250LXNpemU6IC45ZW07IC8qIDkwJSBvZiBwYXJlbnQgZm9udCBzaXplICovXFxuICAgIH1cXG4gICAgXCIpLmNvbmNhdChcbiAgLy8gd2hlbiB0ZXh0U2l6ZSBpcyAnbScsIHRoZSAna2JkJyBlbGVtZW50IGdldHMgYSBsaW5lIGJldHdlZW4gdGhlIHRleHQgYW5kIHRoZSBib3JkZXItYm90dG9tXG4gIF9jdXN0b21TY2FsZSA9PT0gJ20nID8gXCJcXG4gICAga2JkIHtcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1ib3R0b20nLCBldWlUaGVtZS5zaXplLnhzKSwgXCJcXG4gICAgICAvKiBFbnN1cmVzIHRoZSBzaGFwZSBzdGlsbCBsb29rcyBsaWtlIGEgc3F1YXJlIHdoZW4gb25seSBvbmUgY2hhcmFjdGVyICovXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCBldWlUaGVtZS5zaXplLmwpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiXFxuICAgIH1cXG4gICAgXFxuICAgIGtiZDo6YWZ0ZXIge1xcbiAgICAgIGNvbnRlbnQ6ICcnO1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnYm9yZGVyLWJvdHRvbScsIFwiXCIuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIikuY29uY2F0KGV1aVRoZW1lLmNvbG9ycy50ZXh0KSksIFwiXFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnYm90dG9tJywgZXVpVGhlbWUuc2l6ZS54eHMpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbGVmdCcsIDApLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIlxcbiAgICB9XCIpIDogJycsIFwiXFxuICBcIik7XG59O1xuXG4vKipcbiAqIFN0eWxlc1xuICovXG5leHBvcnQgdmFyIGV1aVRleHRTdHlsZXMgPSBmdW5jdGlvbiBldWlUZXh0U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpVGV4dDogLyojX19QVVJFX18qL2NzcyhldWlUZXh0KGV1aVRoZW1lLCB0cnVlKSwgXCJjbGVhcjpib3RoO2E6bm90KFtjbGFzc10pe1wiLCBldWlMaW5rQ1NTKGV1aVRoZW1lQ29udGV4dCksIFwiO311bHtsaXN0LXN0eWxlOmRpc2M7fW9se2xpc3Qtc3R5bGU6ZGVjaW1hbDt9YmxvY2txdW90ZXtib3JkZXItaW5saW5lLXN0YXJ0LWNvbG9yOlwiLCBldWlUaGVtZS5ib3JkZXIuY29sb3IsIFwiO2JvcmRlci1pbmxpbmUtc3RhcnQtc3R5bGU6c29saWQ7fWJsb2NrcXVvdGU6bm90KC5ldWlNYXJrZG93bkZvcm1hdF9fYmxvY2txdW90ZSl7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWJkdWVkVGV4dCwgXCI7fWgxe1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdsJyksIFwiO31oMntcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIjt9aDN7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7fWg0LGR0e1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4cycpLCBcIjt9aDV7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4cycpLCBcIjt9aDZ7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4eHMnKSwgXCIgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO31oMSxoMixoMyxoNCxoNSxoNixkdHtjb2xvcjppbmhlcml0O31wcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSl7d2hpdGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZDpcIiwgZXVpQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ3N1YmR1ZWQnKSwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjt9cHJlOm5vdCguZXVpQ29kZUJsb2NrX19wcmUpLHByZTpub3QoLmV1aUNvZGVCbG9ja19fcHJlKSBjb2Rle2Rpc3BsYXk6YmxvY2s7fT46bGFzdC1jaGlsZHtcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsICcwICFpbXBvcnRhbnQnKSwgXCI7fWtiZHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jaztcIiwgbG9naWNhbENTUygncGFkZGluZy12ZXJ0aWNhbCcsIGV1aVRoZW1lLnNpemUueHhzKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIiBsaW5lLWhlaWdodDoxO2JvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7Ym9yZGVyLXJhZGl1czpcIiwgbWF0aFdpdGhVbml0cyhldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggLyAyO1xuICAgIH0pLCBcIjt9O2xhYmVsOmV1aVRleHQ7XCIpLFxuICAgIGNvbnN0cmFpbmVkV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWF4LXdpZHRoJywgZXVpVGV4dENvbnN0cmFpbmVkTWF4V2lkdGgpLCBcIjs7bGFiZWw6Y29uc3RyYWluZWRXaWR0aDtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgIGN1c3RvbVNjYWxlOiAnbSdcbiAgICB9KSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgY3VzdG9tU2NhbGU6ICdzJ1xuICAgIH0pLCBcIjs7bGFiZWw6cztcIiksXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgY3VzdG9tU2NhbGU6ICd4cydcbiAgICB9KSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICByZWxhdGl2ZTogLyojX19QVVJFX18qL2NzcyhldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICB1bml0OiAnZW0nXG4gICAgfSksIFwiOztsYWJlbDpyZWxhdGl2ZTtcIilcbiAgfTtcbn07IiwgImltcG9ydCB7IENvbXBvbmVudCwgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBEZXRlY3QgRWxlbWVudCBSZXNpemUuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc2RlY2ltYS9qYXZhc2NyaXB0LWRldGVjdC1lbGVtZW50LXJlc2l6ZVxuICogU2ViYXN0aWFuIERlY2ltYVxuICpcbiAqIEZvcmtlZCBmcm9tIHZlcnNpb24gMC41LjM7IGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgbW9kaWZpY2F0aW9uczpcbiAqIDEpIEd1YXJkIGFnYWluc3QgdW5zYWZlICd3aW5kb3cnIGFuZCAnZG9jdW1lbnQnIHJlZmVyZW5jZXMgKHRvIHN1cHBvcnQgU1NSKS5cbiAqIDIpIERlZmVyIGluaXRpYWxpemF0aW9uIGNvZGUgdmlhIGEgdG9wLWxldmVsIGZ1bmN0aW9uIHdyYXBwZXIgKHRvIHN1cHBvcnQgU1NSKS5cbiAqIDMpIEF2b2lkIHVubmVjZXNzYXJ5IHJlZmxvd3MgYnkgbm90IG1lYXN1cmluZyBzaXplIGZvciBzY3JvbGwgZXZlbnRzIGJ1YmJsaW5nIGZyb20gY2hpbGRyZW4uXG4gKiA0KSBBZGQgbm9uY2UgZm9yIHN0eWxlIGVsZW1lbnQuXG4gKiA1KSBVc2UgJ2V4cG9ydCcgc3RhdGVtZW50IG92ZXIgJ21vZHVsZS5leHBvcnRzJyBhc3NpZ25tZW50XG4gKiovXG5cbi8vIENoZWNrIGBkb2N1bWVudGAgYW5kIGB3aW5kb3dgIGluIGNhc2Ugb2Ygc2VydmVyLXNpZGUgcmVuZGVyaW5nXG5sZXQgd2luZG93T2JqZWN0O1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgd2luZG93T2JqZWN0ID0gd2luZG93O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbn0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICB3aW5kb3dPYmplY3QgPSBzZWxmO1xufSBlbHNlIHtcbiAgd2luZG93T2JqZWN0ID0gZ2xvYmFsO1xufVxubGV0IGNhbmNlbEZyYW1lID0gbnVsbDtcbmxldCByZXF1ZXN0RnJhbWUgPSBudWxsO1xuY29uc3QgVElNRU9VVF9EVVJBVElPTiA9IDIwO1xuY29uc3QgY2xlYXJUaW1lb3V0Rm4gPSB3aW5kb3dPYmplY3QuY2xlYXJUaW1lb3V0O1xuY29uc3Qgc2V0VGltZW91dEZuID0gd2luZG93T2JqZWN0LnNldFRpbWVvdXQ7XG5jb25zdCBjYW5jZWxBbmltYXRpb25GcmFtZUZuID0gd2luZG93T2JqZWN0LmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC5tb3pDYW5jZWxBbmltYXRpb25GcmFtZSB8fCB3aW5kb3dPYmplY3Qud2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWU7XG5jb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVGbiA9IHdpbmRvd09iamVjdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgd2luZG93T2JqZWN0Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3dPYmplY3Qud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuaWYgKGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4gPT0gbnVsbCB8fCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVGbiA9PSBudWxsKSB7XG4gIC8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkb24ndCBzdXBwb3J0IGFuaW1hdGlvbiBmcmFtZSxcbiAgLy8gZmFsbGJhY2sgdG8gYSBzZXRUaW1lb3V0IGJhc2VkIGFwcHJvYWNoLlxuICBjYW5jZWxGcmFtZSA9IGNsZWFyVGltZW91dEZuO1xuICByZXF1ZXN0RnJhbWUgPSBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVWaWFTZXRUaW1lb3V0KGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXRGbihjYWxsYmFjaywgVElNRU9VVF9EVVJBVElPTik7XG4gIH07XG59IGVsc2Uge1xuICAvLyBDb3VudGVyIGludHVpdGl2ZWx5LCBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IGFuaW1hdGlvbiBmcmFtZXMgY2FuIGJlIHRyaWNraWVyLlxuICAvLyBDaHJvbWUncyBcIlRocm90dGxlIG5vbi12aXNpYmxlIGNyb3NzLW9yaWdpbiBpZnJhbWVzXCIgZmxhZyBjYW4gcHJldmVudCByQUZzIGZyb20gYmVpbmcgY2FsbGVkLlxuICAvLyBJbiB0aGlzIGNhc2UsIHdlIHNob3VsZCBmYWxsYmFjayB0byBhIHNldFRpbWVvdXQoKSBpbXBsZW1lbnRhdGlvbi5cbiAgY2FuY2VsRnJhbWUgPSBmdW5jdGlvbiBjYW5jZWxGcmFtZShbYW5pbWF0aW9uRnJhbWVJRCwgdGltZW91dElEXSkge1xuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4oYW5pbWF0aW9uRnJhbWVJRCk7XG4gICAgY2xlYXJUaW1lb3V0Rm4odGltZW91dElEKTtcbiAgfTtcbiAgcmVxdWVzdEZyYW1lID0gZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lV2l0aFNldFRpbWVvdXRGYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGNvbnN0IGFuaW1hdGlvbkZyYW1lSUQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWVGbihmdW5jdGlvbiBhbmltYXRpb25GcmFtZUNhbGxiYWNrKCkge1xuICAgICAgY2xlYXJUaW1lb3V0Rm4odGltZW91dElEKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSk7XG4gICAgY29uc3QgdGltZW91dElEID0gc2V0VGltZW91dEZuKGZ1bmN0aW9uIHRpbWVvdXRDYWxsYmFjaygpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4oYW5pbWF0aW9uRnJhbWVJRCk7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0sIFRJTUVPVVRfRFVSQVRJT04pO1xuICAgIHJldHVybiBbYW5pbWF0aW9uRnJhbWVJRCwgdGltZW91dElEXTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZURldGVjdEVsZW1lbnRSZXNpemUobm9uY2UpIHtcbiAgbGV0IGFuaW1hdGlvbktleWZyYW1lcztcbiAgbGV0IGFuaW1hdGlvbk5hbWU7XG4gIGxldCBhbmltYXRpb25TdGFydEV2ZW50O1xuICBsZXQgYW5pbWF0aW9uU3R5bGU7XG4gIGxldCBjaGVja1RyaWdnZXJzO1xuICBsZXQgcmVzZXRUcmlnZ2VycztcbiAgbGV0IHNjcm9sbExpc3RlbmVyO1xuICBjb25zdCBhdHRhY2hFdmVudCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5hdHRhY2hFdmVudDtcbiAgaWYgKCFhdHRhY2hFdmVudCkge1xuICAgIHJlc2V0VHJpZ2dlcnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgY29uc3QgdHJpZ2dlcnMgPSBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyxcbiAgICAgICAgZXhwYW5kID0gdHJpZ2dlcnMuZmlyc3RFbGVtZW50Q2hpbGQsXG4gICAgICAgIGNvbnRyYWN0ID0gdHJpZ2dlcnMubGFzdEVsZW1lbnRDaGlsZCxcbiAgICAgICAgZXhwYW5kQ2hpbGQgPSBleHBhbmQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICBjb250cmFjdC5zY3JvbGxMZWZ0ID0gY29udHJhY3Quc2Nyb2xsV2lkdGg7XG4gICAgICBjb250cmFjdC5zY3JvbGxUb3AgPSBjb250cmFjdC5zY3JvbGxIZWlnaHQ7XG4gICAgICBleHBhbmRDaGlsZC5zdHlsZS53aWR0aCA9IGV4cGFuZC5vZmZzZXRXaWR0aCArIDEgKyBcInB4XCI7XG4gICAgICBleHBhbmRDaGlsZC5zdHlsZS5oZWlnaHQgPSBleHBhbmQub2Zmc2V0SGVpZ2h0ICsgMSArIFwicHhcIjtcbiAgICAgIGV4cGFuZC5zY3JvbGxMZWZ0ID0gZXhwYW5kLnNjcm9sbFdpZHRoO1xuICAgICAgZXhwYW5kLnNjcm9sbFRvcCA9IGV4cGFuZC5zY3JvbGxIZWlnaHQ7XG4gICAgfTtcbiAgICBjaGVja1RyaWdnZXJzID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldFdpZHRoICE9PSBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLndpZHRoIHx8IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICE9PSBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLmhlaWdodDtcbiAgICB9O1xuICAgIHNjcm9sbExpc3RlbmVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIC8vIERvbid0IG1lYXN1cmUgKHdoaWNoIGZvcmNlcykgcmVmbG93IGZvciBzY3JvbGxzIHRoYXQgaGFwcGVuIGluc2lkZSBvZiBjaGlsZHJlbiFcbiAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgJiYgdHlwZW9mIGUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mID09PSBcImZ1bmN0aW9uXCIgJiYgZS50YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoXCJjb250cmFjdC10cmlnZ2VyXCIpIDwgMCAmJiBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcImV4cGFuZC10cmlnZ2VyXCIpIDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcztcbiAgICAgIHJlc2V0VHJpZ2dlcnModGhpcyk7XG4gICAgICBpZiAodGhpcy5fX3Jlc2l6ZVJBRl9fKSB7XG4gICAgICAgIGNhbmNlbEZyYW1lKHRoaXMuX19yZXNpemVSQUZfXyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9fcmVzaXplUkFGX18gPSByZXF1ZXN0RnJhbWUoZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWUoKSB7XG4gICAgICAgIGlmIChjaGVja1RyaWdnZXJzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxhc3RfXy53aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxhc3RfXy5oZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18uZm9yRWFjaChmdW5jdGlvbiBmb3JFYWNoUmVzaXplTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIGZuLmNhbGwoZWxlbWVudCwgZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKiBEZXRlY3QgQ1NTIEFuaW1hdGlvbnMgc3VwcG9ydCB0byBkZXRlY3QgZWxlbWVudCBkaXNwbGF5L3JlLWF0dGFjaCAqL1xuICAgIGxldCBhbmltYXRpb24gPSBmYWxzZTtcbiAgICBsZXQga2V5ZnJhbWVwcmVmaXggPSBcIlwiO1xuICAgIGFuaW1hdGlvblN0YXJ0RXZlbnQgPSBcImFuaW1hdGlvbnN0YXJ0XCI7XG4gICAgY29uc3QgZG9tUHJlZml4ZXMgPSBcIldlYmtpdCBNb3ogTyBtc1wiLnNwbGl0KFwiIFwiKTtcbiAgICBsZXQgc3RhcnRFdmVudHMgPSBcIndlYmtpdEFuaW1hdGlvblN0YXJ0IGFuaW1hdGlvbnN0YXJ0IG9BbmltYXRpb25TdGFydCBNU0FuaW1hdGlvblN0YXJ0XCIuc3BsaXQoXCIgXCIpO1xuICAgIGxldCBwZnggPSBcIlwiO1xuICAgIHtcbiAgICAgIGNvbnN0IGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmYWtlZWxlbWVudFwiKTtcbiAgICAgIGlmIChlbG0uc3R5bGUuYW5pbWF0aW9uTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFuaW1hdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoYW5pbWF0aW9uID09PSBmYWxzZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvbVByZWZpeGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGVsbS5zdHlsZVtkb21QcmVmaXhlc1tpXSArIFwiQW5pbWF0aW9uTmFtZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwZnggPSBkb21QcmVmaXhlc1tpXTtcbiAgICAgICAgICAgIGtleWZyYW1lcHJlZml4ID0gXCItXCIgKyBwZngudG9Mb3dlckNhc2UoKSArIFwiLVwiO1xuICAgICAgICAgICAgYW5pbWF0aW9uU3RhcnRFdmVudCA9IHN0YXJ0RXZlbnRzW2ldO1xuICAgICAgICAgICAgYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBhbmltYXRpb25OYW1lID0gXCJyZXNpemVhbmltXCI7XG4gICAgYW5pbWF0aW9uS2V5ZnJhbWVzID0gXCJAXCIgKyBrZXlmcmFtZXByZWZpeCArIFwia2V5ZnJhbWVzIFwiICsgYW5pbWF0aW9uTmFtZSArIFwiIHsgZnJvbSB7IG9wYWNpdHk6IDA7IH0gdG8geyBvcGFjaXR5OiAwOyB9IH0gXCI7XG4gICAgYW5pbWF0aW9uU3R5bGUgPSBrZXlmcmFtZXByZWZpeCArIFwiYW5pbWF0aW9uOiAxbXMgXCIgKyBhbmltYXRpb25OYW1lICsgXCI7IFwiO1xuICB9XG4gIGNvbnN0IGNyZWF0ZVN0eWxlcyA9IGZ1bmN0aW9uIChkb2MpIHtcbiAgICBpZiAoIWRvYy5nZXRFbGVtZW50QnlJZChcImRldGVjdEVsZW1lbnRSZXNpemVcIikpIHtcbiAgICAgIC8vb3BhY2l0eTowIHdvcmtzIGFyb3VuZCBhIGNocm9tZSBidWcgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTI4NjM2MFxuICAgICAgY29uc3QgY3NzID0gKGFuaW1hdGlvbktleWZyYW1lcyA/IGFuaW1hdGlvbktleWZyYW1lcyA6IFwiXCIpICsgXCIucmVzaXplLXRyaWdnZXJzIHsgXCIgKyAoYW5pbWF0aW9uU3R5bGUgPyBhbmltYXRpb25TdHlsZSA6IFwiXCIpICsgXCJ2aXNpYmlsaXR5OiBoaWRkZW47IG9wYWNpdHk6IDA7IH0gXCIgKyAnLnJlc2l6ZS10cmlnZ2VycywgLnJlc2l6ZS10cmlnZ2VycyA+IGRpdiwgLmNvbnRyYWN0LXRyaWdnZXI6YmVmb3JlIHsgY29udGVudDogXCIgXCI7IGRpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGhpZGRlbjsgei1pbmRleDogLTE7IH0gLnJlc2l6ZS10cmlnZ2VycyA+IGRpdiB7IGJhY2tncm91bmQ6ICNlZWU7IG92ZXJmbG93OiBhdXRvOyB9IC5jb250cmFjdC10cmlnZ2VyOmJlZm9yZSB7IHdpZHRoOiAyMDAlOyBoZWlnaHQ6IDIwMCU7IH0nLFxuICAgICAgICBoZWFkID0gZG9jLmhlYWQgfHwgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSxcbiAgICAgICAgc3R5bGUgPSBkb2MuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgc3R5bGUuaWQgPSBcImRldGVjdEVsZW1lbnRSZXNpemVcIjtcbiAgICAgIHN0eWxlLnR5cGUgPSBcInRleHQvY3NzXCI7XG4gICAgICBpZiAobm9uY2UgIT0gbnVsbCkge1xuICAgICAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgICAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gICAgICB9XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGFkZFJlc2l6ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGVsZW1lbnQsIGZuKSB7XG4gICAgaWYgKGF0dGFjaEV2ZW50KSB7XG4gICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KFwib25yZXNpemVcIiwgZm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgY29uc3QgZWxlbWVudFN0eWxlID0gd2luZG93T2JqZWN0LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgICAgIGlmIChlbGVtZW50U3R5bGUgJiYgZWxlbWVudFN0eWxlLnBvc2l0aW9uID09PSBcInN0YXRpY1wiKSB7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVTdHlsZXMoZG9jKTtcbiAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxhc3RfXyA9IHt9O1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18gPSBbXTtcbiAgICAgICAgKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmNsYXNzTmFtZSA9IFwicmVzaXplLXRyaWdnZXJzXCI7XG4gICAgICAgIGNvbnN0IGV4cGFuZFRyaWdnZXIgPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZXhwYW5kVHJpZ2dlci5jbGFzc05hbWUgPSBcImV4cGFuZC10cmlnZ2VyXCI7XG4gICAgICAgIGV4cGFuZFRyaWdnZXIuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xuICAgICAgICBjb25zdCBjb250cmFjdFRyaWdnZXIgPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgY29udHJhY3RUcmlnZ2VyLmNsYXNzTmFtZSA9IFwiY29udHJhY3QtdHJpZ2dlclwiO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5hcHBlbmRDaGlsZChleHBhbmRUcmlnZ2VyKTtcbiAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uYXBwZW5kQ2hpbGQoY29udHJhY3RUcmlnZ2VyKTtcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyk7XG4gICAgICAgIHJlc2V0VHJpZ2dlcnMoZWxlbWVudCk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBzY3JvbGxMaXN0ZW5lciwgdHJ1ZSk7XG5cbiAgICAgICAgLyogTGlzdGVuIGZvciBhIGNzcyBhbmltYXRpb24gdG8gZGV0ZWN0IGVsZW1lbnQgZGlzcGxheS9yZS1hdHRhY2ggKi9cbiAgICAgICAgaWYgKGFuaW1hdGlvblN0YXJ0RXZlbnQpIHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18gPSBmdW5jdGlvbiBhbmltYXRpb25MaXN0ZW5lcihlKSB7XG4gICAgICAgICAgICBpZiAoZS5hbmltYXRpb25OYW1lID09PSBhbmltYXRpb25OYW1lKSB7XG4gICAgICAgICAgICAgIHJlc2V0VHJpZ2dlcnMoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5hZGRFdmVudExpc3RlbmVyKGFuaW1hdGlvblN0YXJ0RXZlbnQsIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5wdXNoKGZuKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHJlbW92ZVJlc2l6ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGVsZW1lbnQsIGZuKSB7XG4gICAgaWYgKGF0dGFjaEV2ZW50KSB7XG4gICAgICBlbGVtZW50LmRldGFjaEV2ZW50KFwib25yZXNpemVcIiwgZm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18uc3BsaWNlKGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5pbmRleE9mKGZuKSwgMSk7XG4gICAgICBpZiAoIWVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5sZW5ndGgpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHNjcm9sbExpc3RlbmVyLCB0cnVlKTtcbiAgICAgICAgaWYgKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXykge1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLnJlbW92ZUV2ZW50TGlzdGVuZXIoYW5pbWF0aW9uU3RhcnRFdmVudCwgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKTtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18gPSAhZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBQcmVhY3QgY29tcGF0OyBzZWUgZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvaXNzdWVzLzIyOFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIGFkZFJlc2l6ZUxpc3RlbmVyLFxuICAgIHJlbW92ZVJlc2l6ZUxpc3RlbmVyXG4gIH07XG59XG5cbmNsYXNzIEF1dG9TaXplciBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICBzdXBlciguLi5hcmdzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaGVpZ2h0OiB0aGlzLnByb3BzLmRlZmF1bHRIZWlnaHQgfHwgMCxcbiAgICAgIHNjYWxlZEhlaWdodDogdGhpcy5wcm9wcy5kZWZhdWx0SGVpZ2h0IHx8IDAsXG4gICAgICBzY2FsZWRXaWR0aDogdGhpcy5wcm9wcy5kZWZhdWx0V2lkdGggfHwgMCxcbiAgICAgIHdpZHRoOiB0aGlzLnByb3BzLmRlZmF1bHRXaWR0aCB8fCAwXG4gICAgfTtcbiAgICB0aGlzLl9hdXRvU2l6ZXIgPSBudWxsO1xuICAgIHRoaXMuX2RldGVjdEVsZW1lbnRSZXNpemUgPSBudWxsO1xuICAgIHRoaXMuX3BhcmVudE5vZGUgPSBudWxsO1xuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICB0aGlzLl90aW1lb3V0SWQgPSBudWxsO1xuICAgIHRoaXMuX29uUmVzaXplID0gKCkgPT4ge1xuICAgICAgdGhpcy5fdGltZW91dElkID0gbnVsbDtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGlzYWJsZUhlaWdodCxcbiAgICAgICAgZGlzYWJsZVdpZHRoLFxuICAgICAgICBvblJlc2l6ZVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAodGhpcy5fcGFyZW50Tm9kZSkge1xuICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IEF1dG9TaXplciBjb21wb25lbnQgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBET00gaW1tZWRpYXRlbHkgYWZ0ZXIgYmVpbmcgYWRkZWQuXG4gICAgICAgIC8vIFRoaXMgY2FuIHJlc3VsdCBpbiBpbnZhbGlkIHN0eWxlIHZhbHVlcyB3aGljaCBjYW4gcmVzdWx0IGluIE5hTiB2YWx1ZXMgaWYgd2UgZG9uJ3QgaGFuZGxlIHRoZW0uXG4gICAgICAgIC8vIFNlZSBpc3N1ZSAjMTUwIGZvciBtb3JlIGNvbnRleHQuXG5cbiAgICAgICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9wYXJlbnROb2RlKSB8fCB7fTtcbiAgICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdMZWZ0IHx8IFwiMFwiKTtcbiAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nUmlnaHQgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nVG9wID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nVG9wIHx8IFwiMFwiKTtcbiAgICAgICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0JvdHRvbSB8fCBcIjBcIik7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLl9wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBzY2FsZWRIZWlnaHQgPSByZWN0LmhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tO1xuICAgICAgICBjb25zdCBzY2FsZWRXaWR0aCA9IHJlY3Qud2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5fcGFyZW50Tm9kZS5vZmZzZXRIZWlnaHQgLSBwYWRkaW5nVG9wIC0gcGFkZGluZ0JvdHRvbTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLl9wYXJlbnROb2RlLm9mZnNldFdpZHRoIC0gcGFkZGluZ0xlZnQgLSBwYWRkaW5nUmlnaHQ7XG4gICAgICAgIGlmICghZGlzYWJsZUhlaWdodCAmJiAodGhpcy5zdGF0ZS5oZWlnaHQgIT09IGhlaWdodCB8fCB0aGlzLnN0YXRlLnNjYWxlZEhlaWdodCAhPT0gc2NhbGVkSGVpZ2h0KSB8fCAhZGlzYWJsZVdpZHRoICYmICh0aGlzLnN0YXRlLndpZHRoICE9PSB3aWR0aCB8fCB0aGlzLnN0YXRlLnNjYWxlZFdpZHRoICE9PSBzY2FsZWRXaWR0aCkpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgc2NhbGVkSGVpZ2h0LFxuICAgICAgICAgICAgc2NhbGVkV2lkdGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVzaXplID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIG9uUmVzaXplKHtcbiAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICBzY2FsZWRIZWlnaHQsXG4gICAgICAgICAgICAgIHNjYWxlZFdpZHRoLFxuICAgICAgICAgICAgICB3aWR0aFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLl9zZXRSZWYgPSBhdXRvU2l6ZXIgPT4ge1xuICAgICAgdGhpcy5fYXV0b1NpemVyID0gYXV0b1NpemVyO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgbm9uY2VcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fYXV0b1NpemVyID8gdGhpcy5fYXV0b1NpemVyLnBhcmVudE5vZGUgOiBudWxsO1xuICAgIGlmIChwYXJlbnROb2RlICE9IG51bGwgJiYgcGFyZW50Tm9kZS5vd25lckRvY3VtZW50ICYmIHBhcmVudE5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyAmJiBwYXJlbnROb2RlIGluc3RhbmNlb2YgcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkhUTUxFbGVtZW50KSB7XG4gICAgICAvLyBEZWxheSBhY2Nlc3Mgb2YgcGFyZW50Tm9kZSB1bnRpbCBtb3VudC5cbiAgICAgIC8vIFRoaXMgaGFuZGxlcyBlZGdlLWNhc2VzIHdoZXJlIHRoZSBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiB1bm1vdW50ZWQgYmVmb3JlIGl0cyByZWYgaGFzIGJlZW4gc2V0LFxuICAgICAgLy8gQXMgd2VsbCBhcyBsaWJyYXJpZXMgbGlrZSByZWFjdC1saXRlIHdoaWNoIGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgbGlmZWN5Y2xlLlxuICAgICAgdGhpcy5fcGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG5cbiAgICAgIC8vIFVzZSBSZXNpemVPYnNlcnZlciBmcm9tIHRoZSBzYW1lIGNvbnRleHQgd2hlcmUgcGFyZW50Tm9kZSAod2hpY2ggd2Ugd2lsbCBvYnNlcnZlKSB3YXMgZGVmaW5lZFxuICAgICAgLy8gVXNpbmcganVzdCBnbG9iYWwgY2FuIHJlc3VsdCBpbnRvIG9uUmVzaXplIGV2ZW50cyBub3QgYmVpbmcgZW1pdHRlZCBpbiBjYXNlcyB3aXRoIG11bHRpcGxlIHJlYWxtc1xuICAgICAgY29uc3QgUmVzaXplT2JzZXJ2ZXJJbnN0YW5jZSA9IHBhcmVudE5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5SZXNpemVPYnNlcnZlcjtcbiAgICAgIGlmIChSZXNpemVPYnNlcnZlckluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXJJbnN0YW5jZSgoKSA9PiB7XG4gICAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCBcIlJlc2l6ZU9ic2VydmVyIGxvb3AgbGltaXQgZXhjZWVkZWRcIiBlcnJvcjtcbiAgICAgICAgICAvLyBjb3VsZCBiZSB0cmlnZ2VyZWQgaWYgdGhlIHN0YXRlIHVwZGF0ZSBjYXVzZXMgdGhlIFJlc2l6ZU9ic2VydmVyIGhhbmRsZXIgdG8gcnVuIGxvbmcuXG4gICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXZpcnR1YWxpemVkLWF1dG8tc2l6ZXIvaXNzdWVzLzU1XG4gICAgICAgICAgdGhpcy5fdGltZW91dElkID0gc2V0VGltZW91dCh0aGlzLl9vblJlc2l6ZSwgMCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5vYnNlcnZlKHBhcmVudE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRGVmZXIgcmVxdWlyaW5nIHJlc2l6ZSBoYW5kbGVyIGluIG9yZGVyIHRvIHN1cHBvcnQgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgICAgICAvLyBTZWUgaXNzdWUgIzQxXG4gICAgICAgIHRoaXMuX2RldGVjdEVsZW1lbnRSZXNpemUgPSBjcmVhdGVEZXRlY3RFbGVtZW50UmVzaXplKG5vbmNlKTtcbiAgICAgICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZS5hZGRSZXNpemVMaXN0ZW5lcihwYXJlbnROb2RlLCB0aGlzLl9vblJlc2l6ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9vblJlc2l6ZSgpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy5fcGFyZW50Tm9kZSkge1xuICAgICAgaWYgKHRoaXMuX2RldGVjdEVsZW1lbnRSZXNpemUpIHtcbiAgICAgICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZS5yZW1vdmVSZXNpemVMaXN0ZW5lcih0aGlzLl9wYXJlbnROb2RlLCB0aGlzLl9vblJlc2l6ZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fdGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3Jlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZGVmYXVsdEhlaWdodCxcbiAgICAgIGRlZmF1bHRXaWR0aCxcbiAgICAgIGRpc2FibGVIZWlnaHQgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVXaWR0aCA9IGZhbHNlLFxuICAgICAgZG9Ob3RCYWlsT3V0T25FbXB0eUNoaWxkcmVuID0gZmFsc2UsXG4gICAgICBub25jZSxcbiAgICAgIG9uUmVzaXplLFxuICAgICAgc3R5bGUgPSB7fSxcbiAgICAgIHRhZ05hbWUgPSBcImRpdlwiLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHtcbiAgICAgIGhlaWdodCxcbiAgICAgIHNjYWxlZEhlaWdodCxcbiAgICAgIHNjYWxlZFdpZHRoLFxuICAgICAgd2lkdGhcbiAgICB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIE91dGVyIGRpdiBzaG91bGQgbm90IGZvcmNlIHdpZHRoL2hlaWdodCBzaW5jZSB0aGF0IG1heSBwcmV2ZW50IGNvbnRhaW5lcnMgZnJvbSBzaHJpbmtpbmcuXG4gICAgLy8gSW5uZXIgY29tcG9uZW50IHNob3VsZCBvdmVyZmxvdyBhbmQgdXNlIGNhbGN1bGF0ZWQgd2lkdGgvaGVpZ2h0LlxuICAgIC8vIFNlZSBpc3N1ZSAjNjggZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgY29uc3Qgb3V0ZXJTdHlsZSA9IHtcbiAgICAgIG92ZXJmbG93OiBcInZpc2libGVcIlxuICAgIH07XG4gICAgY29uc3QgY2hpbGRQYXJhbXMgPSB7fTtcblxuICAgIC8vIEF2b2lkIHJlbmRlcmluZyBjaGlsZHJlbiBiZWZvcmUgdGhlIGluaXRpYWwgbWVhc3VyZW1lbnRzIGhhdmUgYmVlbiBjb2xsZWN0ZWQuXG4gICAgLy8gQXQgYmVzdCB0aGlzIHdvdWxkIGp1c3QgYmUgd2FzdGluZyBjeWNsZXMuXG4gICAgbGV0IGJhaWxvdXRPbkNoaWxkcmVuID0gZmFsc2U7XG4gICAgaWYgKCFkaXNhYmxlSGVpZ2h0KSB7XG4gICAgICBpZiAoaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG91dGVyU3R5bGUuaGVpZ2h0ID0gMDtcbiAgICAgIGNoaWxkUGFyYW1zLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGNoaWxkUGFyYW1zLnNjYWxlZEhlaWdodCA9IHNjYWxlZEhlaWdodDtcbiAgICB9XG4gICAgaWYgKCFkaXNhYmxlV2lkdGgpIHtcbiAgICAgIGlmICh3aWR0aCA9PT0gMCkge1xuICAgICAgICBiYWlsb3V0T25DaGlsZHJlbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBvdXRlclN0eWxlLndpZHRoID0gMDtcbiAgICAgIGNoaWxkUGFyYW1zLndpZHRoID0gd2lkdGg7XG4gICAgICBjaGlsZFBhcmFtcy5zY2FsZWRXaWR0aCA9IHNjYWxlZFdpZHRoO1xuICAgIH1cbiAgICBpZiAoZG9Ob3RCYWlsT3V0T25FbXB0eUNoaWxkcmVuKSB7XG4gICAgICBiYWlsb3V0T25DaGlsZHJlbiA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudCh0YWdOYW1lLCB7XG4gICAgICByZWY6IHRoaXMuX3NldFJlZixcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIC4uLm91dGVyU3R5bGUsXG4gICAgICAgIC4uLnN0eWxlXG4gICAgICB9LFxuICAgICAgLi4ucmVzdFxuICAgIH0sICFiYWlsb3V0T25DaGlsZHJlbiAmJiBjaGlsZHJlbihjaGlsZFBhcmFtcykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSGVpZ2h0QW5kV2lkdGhQcm9wcyhwcm9wcykge1xuICByZXR1cm4gcHJvcHMgJiYgcHJvcHMuZGlzYWJsZUhlaWdodCAhPT0gdHJ1ZSAmJiBwcm9wcy5kaXNhYmxlV2lkdGggIT09IHRydWU7XG59XG5mdW5jdGlvbiBpc0hlaWdodE9ubHlQcm9wcyhwcm9wcykge1xuICByZXR1cm4gcHJvcHMgJiYgcHJvcHMuZGlzYWJsZUhlaWdodCAhPT0gdHJ1ZSAmJiBwcm9wcy5kaXNhYmxlV2lkdGggPT09IHRydWU7XG59XG5mdW5jdGlvbiBpc1dpZHRoT25seVByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ID09PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCAhPT0gdHJ1ZTtcbn1cblxuZXhwb3J0IHsgQXV0b1NpemVyIGFzIGRlZmF1bHQsIGlzSGVpZ2h0QW5kV2lkdGhQcm9wcywgaXNIZWlnaHRPbmx5UHJvcHMsIGlzV2lkdGhPbmx5UHJvcHMgfTtcbiIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBBdXRvU2l6ZXIgZnJvbSAncmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplcic7XG5leHBvcnQgdmFyIEV1aUF1dG9TaXplciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0F1dG9TaXplcikge1xuICBmdW5jdGlvbiBFdWlBdXRvU2l6ZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUF1dG9TaXplcik7XG4gICAgcmV0dXJuIF9jYWxsU3VwZXIodGhpcywgRXVpQXV0b1NpemVyLCBhcmd1bWVudHMpO1xuICB9XG4gIF9pbmhlcml0cyhFdWlBdXRvU2l6ZXIsIF9BdXRvU2l6ZXIpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUF1dG9TaXplcik7XG59KEF1dG9TaXplcik7IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbG9yXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2lkZVwiLCBcImNsYXNzTmFtZVwiLCBcImlzRGlzYWJsZWRcIiwgXCJvbkNsaWNrXCIsIFwiaWNvbk9uQ2xpY2tcIiwgXCJvbkNsaWNrQXJpYUxhYmVsXCIsIFwiaWNvbk9uQ2xpY2tBcmlhTGFiZWxcIiwgXCJjbG9zZUJ1dHRvblByb3BzXCIsIFwiaHJlZlwiLCBcInJlbFwiLCBcInRhcmdldFwiLCBcInN0eWxlXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUsIHVzZUV1aU1lbW9pemVkU3R5bGVzLCBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIHdjYWdDb250cmFzdE1pbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IEV1aUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgZ2V0VGV4dENvbG9yLCBnZXRDb2xvckNvbnRyYXN0LCBnZXRJc1ZhbGlkQ29sb3IgfSBmcm9tICcuL2NvbG9yX3V0aWxzJztcbmltcG9ydCB7IGV1aUJhZGdlU3R5bGVzIH0gZnJvbSAnLi9iYWRnZS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgSUNPTl9TSURFUyA9IFsnbGVmdCcsICdyaWdodCddO1xuZXhwb3J0IHZhciBDT0xPUlMgPSBbJ2RlZmF1bHQnLCAnaG9sbG93JywgJ3ByaW1hcnknLCAnc3VjY2VzcycsICdhY2NlbnQnLCAnd2FybmluZycsICdkYW5nZXInXTtcbmV4cG9ydCB2YXIgRXVpQmFkZ2UgPSBmdW5jdGlvbiBFdWlCYWRnZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnZGVmYXVsdCcgOiBfcmVmJGNvbG9yLFxuICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICBfcmVmJGljb25TaWRlID0gX3JlZi5pY29uU2lkZSxcbiAgICBpY29uU2lkZSA9IF9yZWYkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkaWNvblNpZGUsXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICBpY29uT25DbGljayA9IF9yZWYuaWNvbk9uQ2xpY2ssXG4gICAgb25DbGlja0FyaWFMYWJlbCA9IF9yZWYub25DbGlja0FyaWFMYWJlbCxcbiAgICBpY29uT25DbGlja0FyaWFMYWJlbCA9IF9yZWYuaWNvbk9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgY2xvc2VCdXR0b25Qcm9wcyA9IF9yZWYuY2xvc2VCdXR0b25Qcm9wcyxcbiAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgIHJlbCA9IF9yZWYucmVsLFxuICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfaXNEaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBpc05hbWVkQ29sb3IgPSBDT0xPUlMuaW5jbHVkZXMoY29sb3IpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgY3VzdG9tQ29sb3JTdHlsZXMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBEaXNhYmxlZCBiYWRnZXMgc2hvdWxkIG5vdCBoYXZlIGN1c3RvbSBjb2xvcnNcbiAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuIHN0eWxlO1xuICAgIC8vIE5hbWVkIGNvbG9ycyBzZXQgdGhlaXIgc3R5bGVzIHZpYSBFbW90aW9uIENTUyBhbmQgbm90IGlubGluZSBzdHlsZXNcbiAgICBpZiAoaXNOYW1lZENvbG9yKSByZXR1cm4gc3R5bGU7XG5cbiAgICAvLyBEbyBvdXIgYmVzdCB0byBlbnN1cmUgY3VzdG9tIGNvbG9ycyBwcm92aWRlIHN1ZmZpY2llbnQgY29udHJhc3RcbiAgICB0cnkge1xuICAgICAgLy8gU2V0IGRhcmsgb3IgbGlnaHQgdGV4dCBjb2xvciBiYXNlZCB1cG9uIGJlc3QgY29udHJhc3RcbiAgICAgIHZhciB0ZXh0Q29sb3IgPSBnZXRUZXh0Q29sb3IoZXVpVGhlbWUsIGNvbG9yKTtcblxuICAgICAgLy8gQ2hlY2sgdGhlIGNvbnRyYXN0IHJhdGlvLiBJZiBpdCdzIGxvdyBjb250cmFzdCwgZW1pdCBhIGNvbnNvbGUgYXdybmluZ1xuICAgICAgdmFyIGNvbnRyYXN0UmF0aW8gPSBnZXRDb2xvckNvbnRyYXN0KHRleHRDb2xvciwgY29sb3IpO1xuICAgICAgaWYgKGNvbnRyYXN0UmF0aW8gPCB3Y2FnQ29udHJhc3RNaW4pIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiV2FybmluZzogXCIuY29uY2F0KGNvbG9yLCBcIiBiYWRnZSBoYXMgYSBsb3cgY29udHJhc3Qgb2YgXCIpLmNvbmNhdChjb250cmFzdFJhdGlvLnRvRml4ZWQoMiksIFwiLiBTaG91bGQgYmUgYWJvdmUgXCIpLmNvbmNhdCh3Y2FnQ29udHJhc3RNaW4sIFwiLlwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgICAgICctLWV1aUJhZGdlQmFja2dyb3VuZENvbG9yJzogY29sb3IsXG4gICAgICAgICctLWV1aUJhZGdlVGV4dENvbG9yJzogdGV4dENvbG9yXG4gICAgICB9LCBzdHlsZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoIWdldElzVmFsaWRDb2xvcihjb2xvcikpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdFdWlCYWRnZSBleHBlY3RzIGEgdmFsaWQgY29sb3IuIFRoaXMgY2FuIGVpdGhlciBiZSBhIHRocmVlIG9yIHNpeCAnICsgXCJjaGFyYWN0ZXIgaGV4IHZhbHVlLCByZ2IoYSkgdmFsdWUsIGhzdiB2YWx1ZSwgaG9sbG93LCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZzogXCIuY29uY2F0KENPTE9SUywgXCIuIFwiKSArIFwiSW5zdGVhZCBnb3QgXCIuY29uY2F0KGNvbG9yLCBcIi5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2NvbG9yLCBpc05hbWVkQ29sb3IsIGlzRGlzYWJsZWQsIHN0eWxlLCBldWlUaGVtZV0pO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpQmFkZ2VTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlCYWRnZV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShpc0Rpc2FibGVkID8gW3N0eWxlcy5kaXNhYmxlZF0gOiBbaXNOYW1lZENvbG9yICYmIHN0eWxlc1tjb2xvcl0sICFpY29uT25DbGljayAmJiAob25DbGljayB8fCBocmVmKSAmJiBzdHlsZXMuY2xpY2thYmxlXSkpO1xuICB2YXIgdGV4dENzc1N0eWxlcyA9IFtzdHlsZXMudGV4dC5ldWlCYWRnZV9fdGV4dCwgKG9uQ2xpY2sgfHwgaHJlZikgJiYgIWlzRGlzYWJsZWQgJiYgc3R5bGVzLnRleHQuY2xpY2thYmxlXTtcbiAgdmFyIGljb25Dc3NTdHlsZXMgPSBbc3R5bGVzLmljb24uZXVpQmFkZ2VfX2ljb24sIHN0eWxlcy5pY29uW2ljb25TaWRlXV07XG4gIHZhciBpY29uQnV0dG9uQ3NzU3R5bGVzID0gW3N0eWxlcy5pY29uQnV0dG9uLmV1aUJhZGdlX19pY29uQnV0dG9uLCBzdHlsZXMuaWNvbkJ1dHRvbltpY29uU2lkZV1dO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJhZGdlJywgY2xhc3NOYW1lKTtcbiAgdmFyIGNsb3NlQ2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJhZGdlX19pY29uJywgY2xvc2VCdXR0b25Qcm9wcyA9PT0gbnVsbCB8fCBjbG9zZUJ1dHRvblByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbG9zZUJ1dHRvblByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciBFbGVtZW50ID0gaHJlZiAmJiAhaXNEaXNhYmxlZCA/ICdhJyA6ICdidXR0b24nO1xuICB2YXIgcmVsT2JqID0ge307XG4gIGlmIChocmVmICYmICFpc0Rpc2FibGVkKSB7XG4gICAgcmVsT2JqLmhyZWYgPSBocmVmO1xuICAgIHJlbE9iai50YXJnZXQgPSB0YXJnZXQ7XG4gICAgcmVsT2JqLnJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICB9XG4gIGlmIChvbkNsaWNrKSB7XG4gICAgcmVsT2JqLm9uQ2xpY2sgPSBvbkNsaWNrO1xuICB9XG4gIHZhciBvcHRpb25hbEljb24gPSBudWxsO1xuICBpZiAoaWNvblR5cGUpIHtcbiAgICBpZiAoaWNvbk9uQ2xpY2spIHtcbiAgICAgIGlmICghaWNvbk9uQ2xpY2tBcmlhTGFiZWwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdXaGVuIHBhc3NpbmcgdGhlIGljb25PbkNsaWNrIHByb3BzIHRvIEV1aUJhZGdlLCB5b3UgbXVzdCBhbHNvIHByb3ZpZGUgaWNvbk9uQ2xpY2tBcmlhTGFiZWwnKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbmFsSWNvbiA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2ljb25CdXR0b25cIixcbiAgICAgICAgY3NzOiBpY29uQnV0dG9uQ3NzU3R5bGVzLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogaWNvbk9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICB0aXRsZTogaWNvbk9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICAgIG9uQ2xpY2s6IGljb25PbkNsaWNrXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUljb24sIF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICAgIHNpemU6IFwic1wiLFxuICAgICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuICAgICAgfSwgY2xvc2VCdXR0b25Qcm9wcywge1xuICAgICAgICBjbGFzc05hbWU6IGNsb3NlQ2xhc3NOYW1lcyxcbiAgICAgICAgY3NzOiBbXS5jb25jYXQoaWNvbkNzc1N0eWxlcywgW2Nsb3NlQnV0dG9uUHJvcHMgPT09IG51bGwgfHwgY2xvc2VCdXR0b25Qcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xvc2VCdXR0b25Qcm9wcy5jc3NdKVxuICAgICAgfSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uYWxJY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgICBzaXplOiBjaGlsZHJlbiA/ICdzJyA6ICdtJyxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX19pY29uXCIsXG4gICAgICAgIGNzczogaWNvbkNzc1N0eWxlcyxcbiAgICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBpZiAob25DbGljayAmJiAhb25DbGlja0FyaWFMYWJlbCkge1xuICAgIGNvbnNvbGUud2FybignV2hlbiBwYXNzaW5nIG9uQ2xpY2sgdG8gRXVpQmFkZ2UsIHlvdSBtdXN0IGFsc28gcHJvdmlkZSBvbkNsaWNrQXJpYUxhYmVsJyk7XG4gIH1cbiAgdmFyIGNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX19jb250ZW50XCIsXG4gICAgY3NzOiBzdHlsZXMuZXVpQmFkZ2VfX2NvbnRlbnRcbiAgfSwgaWNvblNpZGUgPT09ICdsZWZ0JyAmJiBvcHRpb25hbEljb24sIGNoaWxkcmVuICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX3RleHRcIixcbiAgICBjc3M6IHRleHRDc3NTdHlsZXNcbiAgfSwgY2hpbGRyZW4pLCBpY29uU2lkZSA9PT0gJ3JpZ2h0JyAmJiBvcHRpb25hbEljb24pO1xuICBpZiAoaWNvbk9uQ2xpY2spIHtcbiAgICByZXR1cm4gb25DbGljayB8fCBocmVmID8gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBzdHlsZTogY3VzdG9tQ29sb3JTdHlsZXNcbiAgICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2NvbnRlbnRcIixcbiAgICAgIGNzczogc3R5bGVzLmV1aUJhZGdlX19jb250ZW50XG4gICAgfSwgaWNvblNpZGUgPT09ICdsZWZ0JyAmJiBvcHRpb25hbEljb24sIF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCBudWxsLCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX19jaGlsZEJ1dHRvblwiLFxuICAgICAgICBjc3M6IHN0eWxlcy5ldWlCYWRnZV9fY2hpbGRCdXR0b24sXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogb25DbGlja0FyaWFMYWJlbCxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlbE9iaiwgcmVzdCksIGNoaWxkcmVuKTtcbiAgICB9KSwgaWNvblNpZGUgPT09ICdyaWdodCcgJiYgb3B0aW9uYWxJY29uKSkgOiBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICBzdHlsZTogY3VzdG9tQ29sb3JTdHlsZXMsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICB0aXRsZTogaW5uZXJUZXh0XG4gICAgICB9LCByZXN0KSwgY29udGVudCk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAob25DbGljayB8fCBocmVmKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCBudWxsLCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBvbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICBzdHlsZTogY3VzdG9tQ29sb3JTdHlsZXMsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICB0aXRsZTogaW5uZXJUZXh0XG4gICAgICB9LCByZWxPYmosIHJlc3QpLCBjb250ZW50KTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgc3R5bGU6IGN1c3RvbUNvbG9yU3R5bGVzLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVzdCksIGNvbnRlbnQpO1xuICAgIH0pO1xuICB9XG59O1xuRXVpQmFkZ2UucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBBY2NlcHRzIGFueSBzdHJpbmcgZnJvbSBvdXIgaWNvbiBsaWJyYXJ5XG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBUaGUgc2lkZSBvZiB0aGUgYmFkZ2UgdGhlIGljb24gc2hvdWxkIHNpdFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQWNjZXB0cyBlaXRoZXIgb3VyIHBhbGV0dGUgY29sb3JzIChwcmltYXJ5LCBzdWNjZXNzIC4uZXRjKSBvciBhIGhleCB2YWx1ZSBgI0ZGRkZGRmAsIGAjMDAwYC5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIFdpbGwgb3ZlcnJpZGUgYW55IGNvbG9yIHBhc3NlZCB0aHJvdWdoIHRoZSBgY29sb3JgIHByb3AuXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBQcm9wcyBwYXNzZWQgdG8gdGhlIGNsb3NlIGJ1dHRvbi5cbiAgICAgKi9cbiAgY2xvc2VCdXR0b25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byBpY29uIHdpdGhpbiB0aGUgYmFkZ2VcbiAgICAgKi9cbiAgaWNvbk9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIGljb25PbkNsaWNrIGJ1dHRvblxuICAgICAqL1xuICBpY29uT25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgb25DbGljayBidXR0b25cbiAgICAgKi9cbiAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmV4cG9ydCB2YXIgZ2V0RXZlbnRQb3NpdGlvbiA9IGZ1bmN0aW9uIGdldEV2ZW50UG9zaXRpb24obG9jYXRpb24sIGNvbnRhaW5lcikge1xuICB2YXIgeCA9IGxvY2F0aW9uLngsXG4gICAgeSA9IGxvY2F0aW9uLnk7XG4gIHZhciBfY29udGFpbmVyJGdldEJvdW5kaW4gPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgd2lkdGggPSBfY29udGFpbmVyJGdldEJvdW5kaW4ud2lkdGgsXG4gICAgaGVpZ2h0ID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLmhlaWdodCxcbiAgICBsZWZ0ID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLmxlZnQsXG4gICAgdG9wID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLnRvcDtcbiAgdmFyIGxlZnRQb3MgPSB4IC0gKGxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQpO1xuICB2YXIgdG9wUG9zID0geSAtICh0b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQpO1xuICBpZiAobGVmdFBvcyA8IDApIHtcbiAgICBsZWZ0UG9zID0gMDtcbiAgfSBlbHNlIGlmIChsZWZ0UG9zID4gd2lkdGgpIHtcbiAgICBsZWZ0UG9zID0gd2lkdGg7XG4gIH1cbiAgaWYgKHRvcFBvcyA8IDApIHtcbiAgICB0b3BQb3MgPSAwO1xuICB9IGVsc2UgaWYgKHRvcFBvcyA+IGhlaWdodCkge1xuICAgIHRvcFBvcyA9IGhlaWdodDtcbiAgfVxuICByZXR1cm4ge1xuICAgIGxlZnQ6IGxlZnRQb3MsXG4gICAgdG9wOiB0b3BQb3MsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59O1xuZXhwb3J0IHZhciBIRVhfRkFMTEJBQ0sgPSAnJztcbmV4cG9ydCB2YXIgSFNWX0ZBTExCQUNLID0gWzAsIDAsIDBdO1xuZXhwb3J0IHZhciBSR0JfRkFMTEJBQ0sgPSBbTmFOLCBOYU4sIE5hTiwgMV07XG5leHBvcnQgdmFyIFJHQl9KT0lOID0gJywgJztcblxuLy8gR2l2ZW4gYSBzdHJpbmcsIHRoaXMgYXR0ZW1wdHMgdG8gcmV0dXJuIGEgZm9ybWF0IHRoYXQgY2FuIGJlIGNvbnN1bWVkIGJ5IGNocm9tYS1qc1xuZXhwb3J0IHZhciBwYXJzZUNvbG9yID0gZnVuY3Rpb24gcGFyc2VDb2xvcihpbnB1dCkge1xuICB2YXIgcGFyc2VkO1xuICBpZiAoIWlucHV0KSByZXR1cm4gbnVsbDtcbiAgaWYgKGlucHV0LmluZGV4T2YoJywnKSA+IDApIHtcbiAgICBpZiAoIS9eW1xccywuMC05XSokLy50ZXN0KGlucHV0KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciByZ2IgPSBpbnB1dC50cmltKCkuc3BsaXQoJywnKS5maWx0ZXIoZnVuY3Rpb24gKG4pIHtcbiAgICAgIHJldHVybiBuICE9PSAnJztcbiAgICB9KS5tYXAoTnVtYmVyKTtcbiAgICBwYXJzZWQgPSByZ2IubGVuZ3RoID4gMiAmJiByZ2IubGVuZ3RoIDwgNSA/IHJnYiA6IEhFWF9GQUxMQkFDSztcbiAgfSBlbHNlIHtcbiAgICBwYXJzZWQgPSBpbnB1dDtcbiAgfVxuICByZXR1cm4gcGFyc2VkO1xufTtcblxuLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBpbnB1dCB3aWxsIHJldHVybiBhIHZhbGlkIGNocm9tYS1qcyBvYmplY3Qgd2hlbiBkZXNpZ25hdGVkIGFzIG9uZSBvZlxuLy8gdGhlIGFjY2VwdGFibGUgZm9ybWF0czogaGV4LCByZ2IsIHJnYmFcbmV4cG9ydCB2YXIgY2hyb21hVmFsaWQgPSBmdW5jdGlvbiBjaHJvbWFWYWxpZChjb2xvcikge1xuICB2YXIgcGFyc2VkID0gY29sb3I7XG4gIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFyc2VkID0gcGFyc2VDb2xvcihjb2xvcik7XG4gIH1cbiAgaWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcbiAgaWYgKF90eXBlb2YocGFyc2VkKSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gY2hyb21hLnZhbGlkKHBhcnNlZCwgJ3JnYicpIHx8IGNocm9tYS52YWxpZChwYXJzZWQsICdyZ2JhJyk7XG4gIH1cbiAgcmV0dXJuIGNocm9tYS52YWxpZChjb2xvciwgJ2hleCcpO1xufTtcblxuLy8gR2l2ZW4gYW4gaW5wdXQgYW5kIG9wYWNpdHkgY29uZmlndXJhdGlvbiwgdGhpcyByZXR1cm5zIGEgdmFsaWQgY2hyb21hLWpzIG9iamVjdFxuZXhwb3J0IHZhciBnZXRDaHJvbWFDb2xvciA9IGZ1bmN0aW9uIGdldENocm9tYUNvbG9yKGlucHV0KSB7XG4gIHZhciBhbGxvd09wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICB2YXIgcGFyc2VkID0gcGFyc2VDb2xvcihpbnB1dCk7XG4gIGlmIChwYXJzZWQgJiYgY2hyb21hVmFsaWQocGFyc2VkKSkge1xuICAgIC8vIHR5cGUgZ3VhcmQgZm9yIHRoZSBmdW5jdGlvbiBvdmVybG9hZFxuICAgIHZhciBjaHJvbWFDb2xvciA9IF90eXBlb2YocGFyc2VkKSA9PT0gJ29iamVjdCcgPyBjaHJvbWEocGFyc2VkKSA6IGNocm9tYShwYXJzZWQpO1xuICAgIGlmICghYWxsb3dPcGFjaXR5ICYmIGNocm9tYUNvbG9yLmFscGhhKCkgPCAxKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNocm9tYUNvbG9yO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuLy8gR2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGtleSB2YWx1ZSBwYWlycyBzdG9wL2NvbG9yIHJldHVybnMgYSBjc3MgbGluZWFyLWdyYWRpZW50XG4vLyBPciBnaXZlbiBhbiBhcnJheSBvZiBoZXggY29sb3JzIHJldHVybnMgYSBjc3MgbGluZWFyLWdyYWRpZW50XG5leHBvcnQgdmFyIGdldExpbmVhckdyYWRpZW50ID0gZnVuY3Rpb24gZ2V0TGluZWFyR3JhZGllbnQocGFsZXR0ZSkge1xuICB2YXIgbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb24gPSBwYWxldHRlLmxlbmd0aCAtIDE7XG4gIHZhciBsaW5lYXJHcmFkaWVudDtcbiAgdmFyIHBhbGV0dGVIYXNTdG9wcyA9IHBhbGV0dGUuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgIHJldHVybiBfdHlwZW9mKGl0ZW0pID09PSAnb2JqZWN0JztcbiAgfSk7XG4gIGlmIChwYWxldHRlSGFzU3RvcHMpIHtcbiAgICB2YXIgcGFsZXR0ZUNvbG9yU3RvcCA9IHBhbGV0dGU7XG4gICAgbGluZWFyR3JhZGllbnQgPSBcImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgXCIuY29uY2F0KHBhbGV0dGVDb2xvclN0b3BbMF0uY29sb3IsIFwiIDAlLFwiKTtcbiAgICB2YXIgbGFzdENvbG9yU3RvcERlY2ltYWwgPSAxMDAgLyBwYWxldHRlQ29sb3JTdG9wW2xhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uXS5zdG9wO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb247IGkrKykge1xuICAgICAgbGluZWFyR3JhZGllbnQgPSBcIlwiLmNvbmNhdChsaW5lYXJHcmFkaWVudCwgXCIgXCIpLmNvbmNhdChwYWxldHRlQ29sb3JTdG9wW2ldLmNvbG9yLCBcIiBcIikuY29uY2F0KE1hdGguZmxvb3IocGFsZXR0ZUNvbG9yU3RvcFtpXS5zdG9wICogbGFzdENvbG9yU3RvcERlY2ltYWwpLCBcIiUsXCIpO1xuICAgIH1cbiAgICB2YXIgbGluZWFyR3JhZGllbnRTdHlsZSA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLmNvbG9yLCBcIiAxMDAlKVwiKTtcbiAgICByZXR1cm4gbGluZWFyR3JhZGllbnRTdHlsZTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lYXJHcmFkaWVudCA9IFwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQocGFsZXR0ZVswXSwgXCIgMCUsXCIpO1xuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbjsgX2krKykge1xuICAgICAgbGluZWFyR3JhZGllbnQgPSBcIlwiLmNvbmNhdChsaW5lYXJHcmFkaWVudCwgXCIgXCIpLmNvbmNhdChwYWxldHRlW19pXSwgXCIgXCIpLmNvbmNhdChNYXRoLmZsb29yKDEwMCAqIF9pIC8gbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb24pLCBcIiUsXCIpO1xuICAgIH1cbiAgICB2YXIgX2xpbmVhckdyYWRpZW50U3R5bGUgPSBcIlwiLmNvbmNhdChsaW5lYXJHcmFkaWVudCwgXCIgXCIpLmNvbmNhdChwYWxldHRlW2xhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uXSwgXCIgMTAwJSlcIik7XG4gICAgcmV0dXJuIF9saW5lYXJHcmFkaWVudFN0eWxlO1xuICB9XG59O1xuXG4vLyBHaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGgga2V5IHZhbHVlIHBhaXJzIHN0b3AvY29sb3Igb3IgYW4gYXJyYXkgb2YgaGV4IGNvbG9yc1xuLy8gcmV0dXJucyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGgga2V5IHZhbHVlIHBhaXJzIGNvbG9yL3dpZHRoXG5leHBvcnQgdmFyIGdldEZpeGVkTGluZWFyR3JhZGllbnQgPSBmdW5jdGlvbiBnZXRGaXhlZExpbmVhckdyYWRpZW50KHBhbGV0dGUpIHtcbiAgdmFyIHBhbGV0dGVIYXNTdG9wcyA9IHBhbGV0dGUuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgIHJldHVybiBfdHlwZW9mKGl0ZW0pID09PSAnb2JqZWN0JztcbiAgfSk7XG4gIGlmIChwYWxldHRlSGFzU3RvcHMpIHtcbiAgICB2YXIgcGFsZXR0ZUNvbG9yU3RvcCA9IHBhbGV0dGU7XG4gICAgdmFyIGZpeGVkTGluZWFyR3JhZGllbnRXaXRoU3RvcHMgPSBwYWxldHRlQ29sb3JTdG9wLm1hcChmdW5jdGlvbiAoY29sb3JTdG9wLCBpbmRleCkge1xuICAgICAgdmFyIGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uID0gcGFsZXR0ZS5sZW5ndGggLSAxO1xuICAgICAgdmFyIGxhc3RDb2xvclN0b3BEZWNpbWFsID0gMTAwIC8gcGFsZXR0ZUNvbG9yU3RvcFtsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbl0uc3RvcDtcbiAgICAgIHZhciBpc0ZpcnN0Q29sb3JTdG9wID0gaW5kZXggPT09IDA7XG4gICAgICB2YXIgcHJldmlvdXNDb2xvclN0b3BXaWR0aDtcbiAgICAgIGlmIChpc0ZpcnN0Q29sb3JTdG9wKSB7XG4gICAgICAgIHByZXZpb3VzQ29sb3JTdG9wV2lkdGggPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJldmlvdXNDb2xvclN0b3BXaWR0aCA9IE1hdGguZmxvb3IocGFsZXR0ZUNvbG9yU3RvcFtpbmRleCAtIDFdLnN0b3AgKiBsYXN0Q29sb3JTdG9wRGVjaW1hbCk7XG4gICAgICB9XG4gICAgICB2YXIgY3VycmVudENvbG9yU3RvcFdpZHRoID0gTWF0aC5mbG9vcihjb2xvclN0b3Auc3RvcCAqIGxhc3RDb2xvclN0b3BEZWNpbWFsKTtcbiAgICAgIHZhciBjb2xvclN0b3BXaWR0aCA9IGN1cnJlbnRDb2xvclN0b3BXaWR0aCAtIHByZXZpb3VzQ29sb3JTdG9wV2lkdGg7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogY29sb3JTdG9wLmNvbG9yLFxuICAgICAgICB3aWR0aDogXCJcIi5jb25jYXQoY29sb3JTdG9wV2lkdGgsIFwiJVwiKVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gZml4ZWRMaW5lYXJHcmFkaWVudFdpdGhTdG9wcztcbiAgfSBlbHNlIHtcbiAgICB2YXIgX3BhbGV0dGVDb2xvclN0b3AgPSBwYWxldHRlO1xuICAgIHZhciBwYWxldHRlV2lkdGggPSAxMDAgLyBwYWxldHRlLmxlbmd0aDtcbiAgICB2YXIgZml4ZWRMaW5lYXJHcmFkaWVudFdpZHRoQXV0byA9IF9wYWxldHRlQ29sb3JTdG9wLm1hcChmdW5jdGlvbiAoaGV4Q29kZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6IGhleENvZGUsXG4gICAgICAgIHdpZHRoOiBcIlwiLmNvbmNhdChwYWxldHRlV2lkdGgsIFwiJVwiKVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gZml4ZWRMaW5lYXJHcmFkaWVudFdpZHRoQXV0bztcbiAgfVxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgaXNDb2xvckRhcmssIHRpbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlCdXR0b25Db2xvciwgZXVpQnV0dG9uRmlsbENvbG9yIH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuaW1wb3J0IHsgY2hyb21hVmFsaWQsIHBhcnNlQ29sb3IgfSBmcm9tICcuLi9jb2xvcl9waWNrZXIvdXRpbHMnO1xuZXhwb3J0IHZhciBldWlCYWRnZUNvbG9ycyA9IGZ1bmN0aW9uIGV1aUJhZGdlQ29sb3JzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBDb2xvcnMgc2hhcmVkIGJldHdlZW4gYnV0dG9ucyBhbmQgYmFkZ2VzXG4gICAgcHJpbWFyeTogZXVpQnV0dG9uRmlsbENvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ3ByaW1hcnknKSxcbiAgICBzdWNjZXNzOiBldWlCdXR0b25GaWxsQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAnc3VjY2VzcycpLFxuICAgIHdhcm5pbmc6IGV1aUJ1dHRvbkZpbGxDb2xvcihldWlUaGVtZUNvbnRleHQsICd3YXJuaW5nJyksXG4gICAgZGFuZ2VyOiBldWlCdXR0b25GaWxsQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAnZGFuZ2VyJyksXG4gICAgYWNjZW50OiBldWlCdXR0b25GaWxsQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAnYWNjZW50JyksXG4gICAgZGlzYWJsZWQ6IGV1aUJ1dHRvbkNvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ2Rpc2FibGVkJyksXG4gICAgLy8gQ29sb3JzIHVuaXF1ZSB0byBiYWRnZXNcbiAgICBkZWZhdWx0OiBnZXRCYWRnZUNvbG9ycyhldWlUaGVtZUNvbnRleHQsIGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlKSxcbiAgICAvLyBIb2xsb3cgaGFzIGEgYm9yZGVyIGFuZCBpcyB1c2VkIGZvciBhdXRvY29tcGxldGVycyBhbmQgYmV0YSBiYWRnZXNcbiAgICBob2xsb3c6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZ2V0QmFkZ2VDb2xvcnMoZXVpVGhlbWVDb250ZXh0LCBldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSkpLCB7fSwge1xuICAgICAgYm9yZGVyQ29sb3I6IGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gdGludChldWlUaGVtZS5ib3JkZXIuY29sb3IsIDAuMTUpIDogZXVpVGhlbWUuYm9yZGVyLmNvbG9yXG4gICAgfSksXG4gICAgLy8gQ29sb3JzIHVzZWQgYnkgYmV0YSBhbmQgbm90aWZpY2F0aW9uIGJhZGdlc1xuICAgIHN1YmR1ZWQ6IGdldEJhZGdlQ29sb3JzKGV1aVRoZW1lQ29udGV4dCwgdGludChldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgMC4zKSksXG4gICAgYWNjZW50VGV4dDogZ2V0QmFkZ2VDb2xvcnMoZXVpVGhlbWVDb250ZXh0LCBldWlUaGVtZS5jb2xvcnMuYWNjZW50VGV4dClcbiAgfTtcbn07XG5leHBvcnQgdmFyIGdldEJhZGdlQ29sb3JzID0gZnVuY3Rpb24gZ2V0QmFkZ2VDb2xvcnMoZXVpVGhlbWVDb250ZXh0LCBiYWNrZ3JvdW5kQ29sb3IpIHtcbiAgdmFyIGNvbG9yID0gZ2V0VGV4dENvbG9yKGV1aVRoZW1lQ29udGV4dCwgYmFja2dyb3VuZENvbG9yKTtcbiAgcmV0dXJuIHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICBjb2xvcjogY29sb3JcbiAgfTtcbn07XG5leHBvcnQgdmFyIGdldFRleHRDb2xvciA9IGZ1bmN0aW9uIGdldFRleHRDb2xvcihfcmVmLCBiZ0NvbG9yKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHZhciB0ZXh0Q29sb3IgPSBpc0NvbG9yRGFyay5hcHBseSh2b2lkIDAsIF90b0NvbnN1bWFibGVBcnJheShjaHJvbWEoYmdDb2xvcikucmdiKCkpKSA/IGV1aVRoZW1lLmNvbG9ycy5naG9zdCA6IGV1aVRoZW1lLmNvbG9ycy5pbms7XG4gIHJldHVybiB0ZXh0Q29sb3I7XG59O1xuZXhwb3J0IHZhciBnZXRDb2xvckNvbnRyYXN0ID0gZnVuY3Rpb24gZ2V0Q29sb3JDb250cmFzdCh0ZXh0Q29sb3IsIGNvbG9yKSB7XG4gIHJldHVybiBjaHJvbWEuY29udHJhc3QodGV4dENvbG9yLCBjb2xvcik7XG59O1xuZXhwb3J0IHZhciBnZXRJc1ZhbGlkQ29sb3IgPSBmdW5jdGlvbiBnZXRJc1ZhbGlkQ29sb3IoY29sb3IpIHtcbiAgcmV0dXJuIGNocm9tYVZhbGlkKHBhcnNlQ29sb3IoY29sb3IgfHwgJycpIHx8ICcnKTtcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvbnRTaXplLCBldWlGb2N1c1JpbmcsIGV1aVRleHRUcnVuY2F0ZSwgbG9naWNhbENTUywgbG9naWNhbFNob3J0aGFuZENTUywgbG9naWNhbFRleHRBbGlnbkNTUywgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpQmFkZ2VDb2xvcnMgfSBmcm9tICcuL2NvbG9yX3V0aWxzJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFodzV2YzQtY2xpY2thYmxlXCIsXG4gIHN0eWxlczogXCJjdXJzb3I6cG9pbnRlcjtsYWJlbDpjbGlja2FibGU7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWh3NXZjNC1jbGlja2FibGVcIixcbiAgc3R5bGVzOiBcImN1cnNvcjpwb2ludGVyO2xhYmVsOmNsaWNrYWJsZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlCYWRnZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUJhZGdlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBiYWRnZUNvbG9ycyA9IGV1aUJhZGdlQ29sb3JzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBzZXRCYWRnZUNvbG9yVmFycyA9IGZ1bmN0aW9uIHNldEJhZGdlQ29sb3JWYXJzKGNvbG9ycykge1xuICAgIHJldHVybiBcIlxcbiAgICAtLWV1aUJhZGdlVGV4dENvbG9yOiBcIi5jb25jYXQoY29sb3JzLmNvbG9yLCBcIjtcXG4gICAgLS1ldWlCYWRnZUJhY2tncm91bmRDb2xvcjogXCIpLmNvbmNhdChjb2xvcnMuYmFja2dyb3VuZENvbG9yLCBcIjtcXG4gIFwiKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBldWlCYWRnZTogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtcIiwgbG9naWNhbFNob3J0aGFuZENTUygncGFkZGluZycsIFwiMCBcIi5jb25jYXQoZXVpVGhlbWUuc2l6ZS5zKSksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIiBmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJykuZm9udFNpemUsIFwiO2xpbmUtaGVpZ2h0OlwiLCBtYXRoV2l0aFVuaXRzKFxuICAgIC8vIEFjY291bnQgZm9yIHRoZSBib3JkZXJcbiAgICBbZXVpVGhlbWUuc2l6ZS5iYXNlLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbl0sIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgICByZXR1cm4geCArIHkgKiAyO1xuICAgIH0pLCBcIjtmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQubWVkaXVtLCBcIjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOmRlZmF1bHQ7Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czpcIiwgbWF0aFdpdGhVbml0cyhldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4IC8gMjtcbiAgICB9KSwgXCI7XCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCJjb2xvcjp2YXIoLS1ldWlCYWRnZVRleHRDb2xvciwgXCIsIGJhZGdlQ29sb3JzLmRlZmF1bHQuY29sb3IsIFwiKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcihcXG4gICAgICAgIC0tZXVpQmFkZ2VCYWNrZ3JvdW5kQ29sb3IsXFxuICAgICAgICBcIiwgYmFkZ2VDb2xvcnMuZGVmYXVsdC5iYWNrZ3JvdW5kQ29sb3IsIFwiXFxuICAgICAgKTsqOjpzZWxlY3Rpb257Y29sb3I6dmFyKFxcbiAgICAgICAgICAtLWV1aUJhZGdlQmFja2dyb3VuZENvbG9yLFxcbiAgICAgICAgICBcIiwgYmFkZ2VDb2xvcnMuZGVmYXVsdC5iYWNrZ3JvdW5kQ29sb3IsIFwiXFxuICAgICAgICApO2JhY2tncm91bmQtY29sb3I6dmFyKFxcbiAgICAgICAgICAtLWV1aUJhZGdlVGV4dENvbG9yLFxcbiAgICAgICAgICBcIiwgYmFkZ2VDb2xvcnMuZGVmYXVsdC5jb2xvciwgXCJcXG4gICAgICAgICk7fSY6Zm9jdXMtd2l0aGlue1wiLCBldWlGb2N1c1JpbmcoZXVpVGhlbWVDb250ZXh0KSwgXCI7fSYrLmV1aUJhZGdle1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tbGVmdCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIjt9O2xhYmVsOmV1aUJhZGdlO1wiKSxcbiAgICBjbGlja2FibGU6IC8qI19fUFVSRV9fKi9jc3MoXCImOm5vdCg6ZGlzYWJsZWQpeyY6aG92ZXIsJjpmb2N1c3t0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO319Jjpmb2N1c3tcIiwgZXVpRm9jdXNSaW5nKGV1aVRoZW1lQ29udGV4dCksIFwiO30mOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDt9O2xhYmVsOmNsaWNrYWJsZTtcIiksXG4gICAgLy8gQ29sb3JzXG4gICAgZGVmYXVsdDogLyojX19QVVJFX18qL2NzcyhzZXRCYWRnZUNvbG9yVmFycyhiYWRnZUNvbG9ycy5kZWZhdWx0KSwgXCI7bGFiZWw6ZGVmYXVsdDtcIiksXG4gICAgaG9sbG93OiAvKiNfX1BVUkVfXyovY3NzKHNldEJhZGdlQ29sb3JWYXJzKGJhZGdlQ29sb3JzLmhvbGxvdyksIFwiIGJvcmRlci1jb2xvcjpcIiwgYmFkZ2VDb2xvcnMuaG9sbG93LmJvcmRlckNvbG9yLCBcIjs7bGFiZWw6aG9sbG93O1wiKSxcbiAgICBwcmltYXJ5OiAvKiNfX1BVUkVfXyovY3NzKHNldEJhZGdlQ29sb3JWYXJzKGJhZGdlQ29sb3JzLnByaW1hcnkpLCBcIjtsYWJlbDpwcmltYXJ5O1wiKSxcbiAgICBhY2NlbnQ6IC8qI19fUFVSRV9fKi9jc3Moc2V0QmFkZ2VDb2xvclZhcnMoYmFkZ2VDb2xvcnMuYWNjZW50KSwgXCI7bGFiZWw6YWNjZW50O1wiKSxcbiAgICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovY3NzKHNldEJhZGdlQ29sb3JWYXJzKGJhZGdlQ29sb3JzLndhcm5pbmcpLCBcIjtsYWJlbDp3YXJuaW5nO1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3Moc2V0QmFkZ2VDb2xvclZhcnMoYmFkZ2VDb2xvcnMuZGFuZ2VyKSwgXCI7bGFiZWw6ZGFuZ2VyO1wiKSxcbiAgICBzdWNjZXNzOiAvKiNfX1BVUkVfXyovY3NzKHNldEJhZGdlQ29sb3JWYXJzKGJhZGdlQ29sb3JzLnN1Y2Nlc3MpLCBcIjtsYWJlbDpzdWNjZXNzO1wiKSxcbiAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2NzcyhzZXRCYWRnZUNvbG9yVmFycyhiYWRnZUNvbG9ycy5kaXNhYmxlZCksIFwiKjo6c2VsZWN0aW9ue2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSwgXCI7fTtsYWJlbDpkaXNhYmxlZDtcIiksXG4gICAgLy8gQ29udGVudCB3cmFwcGVyXG4gICAgZXVpQmFkZ2VfX2NvbnRlbnQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUyhcbiAgICAvLyBFbnN1cmUgcHJvcGVyIGhlaWdodCBpbiBjYXNlIG9mIGp1c3QgZGlzcGxheWluZyBhbiBpY29uXG4gICAgJ21pbi1oZWlnaHQnLCBcIlwiLmNvbmNhdChtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIGV1aVRoZW1lLmJhc2UgKyB4ICogMjtcbiAgICB9KSkpLCBcIiBkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO292ZXJmbG93OmhpZGRlbjs7bGFiZWw6ZXVpQmFkZ2VfX2NvbnRlbnQ7XCIpLFxuICAgIC8vIFRleHRcbiAgICB0ZXh0OiB7XG4gICAgICBldWlCYWRnZV9fdGV4dDogLyojX19QVVJFX18qL2NzcyhldWlUZXh0VHJ1bmNhdGUoKSwgXCIgY3Vyc29yOmluaGVyaXQ7O2xhYmVsOmV1aUJhZGdlX190ZXh0O1wiKSxcbiAgICAgIGNsaWNrYWJsZTogX3JlZlxuICAgIH0sXG4gICAgLy8gSWNvblxuICAgIGljb246IHtcbiAgICAgIGV1aUJhZGdlX19pY29uOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmV1aUJhZGdlX19pY29uO1wiKSxcbiAgICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwiJjpub3QoOm9ubHktY2hpbGQpe1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tbGVmdCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIjt9O2xhYmVsOnJpZ2h0O1wiKSxcbiAgICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCImOm5vdCg6b25seS1jaGlsZCl7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1yaWdodCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIjt9O2xhYmVsOmxlZnQ7XCIpXG4gICAgfSxcbiAgICAvLyBDbGlja2FibGUgaWNvbnMgKGljb25PbkNsaWNrKVxuICAgIGljb25CdXR0b246IHtcbiAgICAgIGV1aUJhZGdlX19pY29uQnV0dG9uOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC1zaXplOjA7Jjpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOlwiLCB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMuZ2hvc3QsIDAuOCksIFwiO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuaW5rLCBcIjtib3JkZXItcmFkaXVzOlwiLCBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLmJvcmRlci5yYWRpdXMuc21hbGwsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4IC8gMjtcbiAgICAgIH0pLCBcIjt9JjpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7fS5ldWlCYWRnZV9faWNvbnttYXJnaW46MCFpbXBvcnRhbnQ7fTtsYWJlbDpldWlCYWRnZV9faWNvbkJ1dHRvbjtcIiksXG4gICAgICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXJnaW4tbGVmdCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpLFxuICAgICAgbGVmdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXJnaW4tcmlnaHQnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7O2xhYmVsOmxlZnQ7XCIpXG4gICAgfSxcbiAgICAvLyBVc2VkIGluIGJhZGdlcyB3aXRoIGJvdGggb25DbGljayAmIGljb25PbkNsaWNrXG4gICAgZXVpQmFkZ2VfX2NoaWxkQnV0dG9uOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHRUcnVuY2F0ZSgpLCBcIiB0ZXh0LWFsaWduOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O2NvbG9yOmluaGVyaXQ7JjpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7fSY6bm90KDpkaXNhYmxlZCl7Jjpob3ZlciwmOmZvY3Vze3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fX07bGFiZWw6ZXVpQmFkZ2VfX2NoaWxkQnV0dG9uO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImxhYmVsXCIsIFwiY29sb3JcIiwgXCJ0b29sdGlwQ29udGVudFwiLCBcInRvb2x0aXBQb3NpdGlvblwiLCBcImFuY2hvclByb3BzXCIsIFwidGl0bGVcIiwgXCJpY29uVHlwZVwiLCBcIm9uQ2xpY2tcIiwgXCJvbkNsaWNrQXJpYUxhYmVsXCIsIFwiaHJlZlwiLCBcInJlbFwiLCBcInRhcmdldFwiLCBcInNpemVcIiwgXCJhbGlnbm1lbnRcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgZXVpQmV0YUJhZGdlU3R5bGVzIH0gZnJvbSAnLi9iZXRhX2JhZGdlLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDT0xPUlMgPSBbJ2FjY2VudCcsICdzdWJkdWVkJywgJ2hvbGxvdyddO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsncycsICdtJ107XG5leHBvcnQgdmFyIEFMSUdOTUVOVFMgPSBbJ2Jhc2VsaW5lJywgJ21pZGRsZSddO1xuXG4vLyBgbGFiZWxgIHByb3AgY2FuIGJlIGEgYFJlYWN0Tm9kZWAgb25seSBpZiBgdGl0bGVgIG9yIGB0b29sdGlwQ29udGVudGAgaXMgcHJvdmlkZWRcblxuLy8gTXVzdCBiZSBgdHlwZWAgaW5zdGVhZCBvZiBgaW50ZXJmYWNlYFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL2lzc3Vlcy82MDg1XG5cbmV4cG9ydCB2YXIgRXVpQmV0YUJhZGdlID0gZnVuY3Rpb24gRXVpQmV0YUJhZGdlKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdob2xsb3cnIDogX3JlZiRjb2xvcixcbiAgICB0b29sdGlwQ29udGVudCA9IF9yZWYudG9vbHRpcENvbnRlbnQsXG4gICAgX3JlZiR0b29sdGlwUG9zaXRpb24gPSBfcmVmLnRvb2x0aXBQb3NpdGlvbixcbiAgICB0b29sdGlwUG9zaXRpb24gPSBfcmVmJHRvb2x0aXBQb3NpdGlvbiA9PT0gdm9pZCAwID8gJ3RvcCcgOiBfcmVmJHRvb2x0aXBQb3NpdGlvbixcbiAgICBhbmNob3JQcm9wcyA9IF9yZWYuYW5jaG9yUHJvcHMsXG4gICAgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgIG9uQ2xpY2tBcmlhTGFiZWwgPSBfcmVmLm9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICByZWwgPSBfcmVmLnJlbCxcbiAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIF9yZWYkYWxpZ25tZW50ID0gX3JlZi5hbGlnbm1lbnQsXG4gICAgYWxpZ25tZW50ID0gX3JlZiRhbGlnbm1lbnQgPT09IHZvaWQgMCA/ICdiYXNlbGluZScgOiBfcmVmJGFsaWdubWVudCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzaW5nbGVMZXR0ZXIgPSAhISh0eXBlb2YgbGFiZWwgPT09ICdzdHJpbmcnICYmIGxhYmVsLmxlbmd0aCA9PT0gMSk7XG4gIHZhciBpc0NpcmN1bGFyID0gaWNvblR5cGUgfHwgc2luZ2xlTGV0dGVyO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJldGFCYWRnZScsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlCZXRhQmFkZ2VTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlCZXRhQmFkZ2UsIHN0eWxlc1tjb2xvcl0sIHN0eWxlc1tzaXplXSwgc3R5bGVzW2FsaWdubWVudF0sIGlzQ2lyY3VsYXIgPyBzdHlsZXMuYmFkZ2VTaXplcy5jaXJjbGVbc2l6ZV0gOiBzdHlsZXMuYmFkZ2VTaXplcy5kZWZhdWx0W3NpemVdXTtcbiAgdmFyIGljb247XG4gIGlmIChpY29uVHlwZSkge1xuICAgIGljb24gPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgIGNzczogc3R5bGVzLmV1aUJldGFCYWRnZV9faWNvbixcbiAgICAgIGNsYXNzTmFtZTogXCJldWlCZXRhQmFkZ2VfX2ljb25cIixcbiAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgc2l6ZTogc2l6ZSA9PT0gJ20nID8gJ20nIDogJ3MnLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG4gICAgfSk7XG4gIH1cbiAgdmFyIEVsZW1lbnQgPSBocmVmID8gJ2EnIDogJ2J1dHRvbic7XG4gIHZhciByZWxPYmogPSB7fTtcbiAgaWYgKGhyZWYpIHtcbiAgICByZWxPYmouaHJlZiA9IGhyZWY7XG4gICAgcmVsT2JqLnRhcmdldCA9IHRhcmdldDtcbiAgICByZWxPYmoucmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gIH1cbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZWxPYmoub25DbGljayA9IG9uQ2xpY2s7XG4gIH1cbiAgdmFyIGNvbnRlbnQ7XG4gIGlmIChvbkNsaWNrIHx8IGhyZWYpIHtcbiAgICBjb250ZW50ID0gX19fRW1vdGlvbkpTWChFbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgICBcImFyaWEtbGFiZWxcIjogb25DbGlja0FyaWFMYWJlbCxcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgdGl0bGU6IHR5cGVvZiBsYWJlbCA9PT0gJ3N0cmluZycgPyBsYWJlbCA6IHRpdGxlXG4gICAgfSwgcmVsT2JqLCByZXN0KSwgaWNvbiB8fCBsYWJlbCk7XG4gICAgaWYgKHRvb2x0aXBDb250ZW50KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgICAgIHBvc2l0aW9uOiB0b29sdGlwUG9zaXRpb24sXG4gICAgICAgIGNvbnRlbnQ6IHRvb2x0aXBDb250ZW50LFxuICAgICAgICB0aXRsZTogdGl0bGUgfHwgbGFiZWwsXG4gICAgICAgIGFuY2hvclByb3BzOiBhbmNob3JQcm9wc1xuICAgICAgfSwgY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBhbmNob3JQcm9wcywgY29udGVudCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0b29sdGlwQ29udGVudCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgICAgICBwb3NpdGlvbjogdG9vbHRpcFBvc2l0aW9uLFxuICAgICAgICBjb250ZW50OiB0b29sdGlwQ29udGVudCxcbiAgICAgICAgdGl0bGU6IHRpdGxlIHx8IGxhYmVsLFxuICAgICAgICBhbmNob3JQcm9wczogYW5jaG9yUHJvcHNcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgIH0sIHJlc3QpLCBpY29uIHx8IGxhYmVsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzcGFuVGl0bGUgPSB0aXRsZSB8fCBsYWJlbDtcbiAgICAgIGlmIChzcGFuVGl0bGUgJiYgdHlwZW9mIHNwYW5UaXRsZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiT25seSBzdHJpbmcgdGl0bGVzIGFyZSBwZXJtaXR0ZWQgb24gYmFkZ2VzIHRoYXQgZG8gbm90IHVzZSB0b29sdGlwcy4gRm91bmQ6IFwiLmNvbmNhdChfdHlwZW9mKHNwYW5UaXRsZSkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBhbmNob3JQcm9wcywgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHRpdGxlOiBzcGFuVGl0bGUsXG4gICAgICAgIGNzczogY3NzU3R5bGVzXG4gICAgICB9LCByZXN0KSwgaWNvbiB8fCBsYWJlbCkpO1xuICAgIH1cbiAgfVxufTtcbkV1aUJldGFCYWRnZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBvbkNsaWNrIGJ1dHRvblxuICAgICAqL1xuICBvbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogU3VwcGx5IGFuIGljb24gdHlwZSBpZiB0aGUgYmFkZ2Ugc2hvdWxkIGp1c3QgYmUgYW4gaWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogT25lIHdvcmQgbGFiZWwgbGlrZSBcIkJldGFcIiBvciBcIkxhYlwiXG4gICAgICovXG4gIC8qKlxuICAgICAqIE9uZSB3b3JkIGxhYmVsIGxpa2UgXCJCZXRhXCIgb3IgXCJMYWJcIlxuICAgICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIENvbnRlbnQgZm9yIHRoZSB0b29sdGlwXG4gICAgICovXG4gIHRvb2x0aXBDb250ZW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRdKV0pLFxuICAvKipcbiAgICAgKiBDdXN0b20gcG9zaXRpb24gb2YgdGhlIHRvb2x0aXBcbiAgICAgKi9cbiAgdG9vbHRpcFBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKSxcbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHNwYW4gd3JhcHBpbmcgdGhlIGJhZGdlXG4gICAgICovXG4gIGFuY2hvclByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICAvKipcbiAgICAgKiBPcHRpb25hbCB0aXRsZSB3aWxsIGJlIHN1cHBsaWVkIGFzIHRvb2x0aXAgdGl0bGUgb3IgdGl0bGUgYXR0cmlidXRlXG4gICAgICogb3RoZXJ3aXNlIHRoZSBsYWJlbCB3aWxsIGJlIHVzZWRcbiAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZ10pXSksXG4gIC8qKlxuICAgICAqIEFjY2VwdHMgYWNjZW50LCBzdWJkdWVkIGFuZCBob2xsb3cuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBgdmVydGljYWwtYWxpZ25gIENTUyBwcm9wZXJ0eVxuICAgICAqL1xuICBhbGlnbm1lbnQ6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGV1aUZvY3VzUmluZywgZXVpRm9udFNpemVGcm9tU2NhbGUsIGV1aVRleHRUcnVuY2F0ZSwgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aUJhZGdlQ29sb3JzIH0gZnJvbSAnLi4vY29sb3JfdXRpbHMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibDFubWU3LW1pZGRsZVwiLFxuICBzdHlsZXM6IFwidmVydGljYWwtYWxpZ246bWlkZGxlO2xhYmVsOm1pZGRsZTtcIlxufSA6IHtcbiAgbmFtZTogXCJsMW5tZTctbWlkZGxlXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGFiZWw6bWlkZGxlO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTloZXhoeS1iYXNlbGluZVwiLFxuICBzdHlsZXM6IFwidmVydGljYWwtYWxpZ246YmFzZWxpbmU7bGFiZWw6YmFzZWxpbmU7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTloZXhoeS1iYXNlbGluZVwiLFxuICBzdHlsZXM6IFwidmVydGljYWwtYWxpZ246YmFzZWxpbmU7bGFiZWw6YmFzZWxpbmU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJwenBxcWctZXVpQmV0YUJhZGdlX19pY29uXCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsIC0xcHgpO2xhYmVsOmV1aUJldGFCYWRnZV9faWNvbjtcIlxufSA6IHtcbiAgbmFtZTogXCJwenBxcWctZXVpQmV0YUJhZGdlX19pY29uXCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsIC0xcHgpO2xhYmVsOmV1aUJldGFCYWRnZV9faWNvbjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlCZXRhQmFkZ2VTdHlsZXMgPSBmdW5jdGlvbiBldWlCZXRhQmFkZ2VTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICB2YXIgYmFkZ2VDb2xvcnMgPSBldWlCYWRnZUNvbG9ycyhldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIGV1aUJldGFCYWRnZTogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLnNpemUubCwgXCI7Y3Vyc29yOmRlZmF1bHQ7Zm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0LmJvbGQsIFwiO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzowLjA1ZW07dGV4dC1hbGlnbjpjZW50ZXI7XCIsIGV1aVRleHRUcnVuY2F0ZSgpLCBcIiAmOmZvY3Vze1wiLCBldWlGb2N1c1JpbmcoZXVpVGhlbWVDb250ZXh0LCAnb3V0c2V0Jywge1xuICAgICAgY29sb3I6IGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gZXVpVGhlbWUuY29sb3JzLmdob3N0IDogZXVpVGhlbWUuY29sb3JzLmlua1xuICAgIH0pLCBcIjt9O2xhYmVsOmV1aUJldGFCYWRnZTtcIiksXG4gICAgLy8gQ29sb3JzXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKGJhZGdlQ29sb3JzLmFjY2VudFRleHQsIFwiO2xhYmVsOmFjY2VudDtcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhiYWRnZUNvbG9ycy5zdWJkdWVkLCBcIjtsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICBob2xsb3c6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgYmFkZ2VDb2xvcnMuaG9sbG93LmNvbG9yLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBiYWRnZUNvbG9ycy5ob2xsb3cuYmFja2dyb3VuZENvbG9yLCBcIjtib3gtc2hhZG93Omluc2V0IDAgMCAwIFwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgXCIsIGJhZGdlQ29sb3JzLmhvbGxvdy5ib3JkZXJDb2xvciwgXCI7O2xhYmVsOmhvbGxvdztcIiksXG4gICAgLy8gRm9udCBzaXplc1xuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6XCIsIGV1aUZvbnRTaXplRnJvbVNjYWxlKCd4cycsIGV1aVRoZW1lKSwgXCI7bGluZS1oZWlnaHQ6XCIsIGV1aVRoZW1lLnNpemUubCwgXCI7O2xhYmVsOm07XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6MC42MjVyZW07bGluZS1oZWlnaHQ6XCIsIG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuc2l6ZS54cywgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICsgZXVpVGhlbWUuYmFzZTtcbiAgICB9KSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIC8vIFBhZGRpbmcvd2lkdGggc2l6ZXNcbiAgICBiYWRnZVNpemVzOiB7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIG06IFwiXFxuICAgICAgICBcIi5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS5iYXNlKSksXG4gICAgICAgIHM6IFwiXFxuICAgICAgICBcIi5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS5tKSlcbiAgICAgIH0sXG4gICAgICAvLyBXaGVuIGl0J3MganVzdCBhbiBpY29uIG9yIGEgc2luZ2xlIGxldHRlciwgbWFrZSB0aGUgYmFkZ2UgYSBjaXJjbGVcbiAgICAgIGNpcmNsZToge1xuICAgICAgICBtOiBcIlxcbiAgICAgICAgICBcIi5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCBldWlUaGVtZS5zaXplLmwpLCBcIlxcbiAgICAgICAgXCIpLFxuICAgICAgICBzOiBcIlxcbiAgICAgICAgICBcIi5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUueHMsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIHggKyBldWlUaGVtZS5iYXNlO1xuICAgICAgICB9KSksIFwiXFxuICAgICAgICBcIilcbiAgICAgIH1cbiAgICB9LFxuICAgIGV1aUJldGFCYWRnZV9faWNvbjogX3JlZjMsXG4gICAgLy8gQWxpZ25tZW50c1xuICAgIGJhc2VsaW5lOiBfcmVmMixcbiAgICBtaWRkbGU6IF9yZWZcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbG9yXCIsIFwiY2xhc3NOYW1lXCIsIFwiaHJlZlwiLCBcImV4dGVybmFsXCIsIFwidGFyZ2V0XCIsIFwicmVsXCIsIFwidHlwZVwiLCBcIm9uQ2xpY2tcIiwgXCJkaXNhYmxlZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IEV1aUV4dGVybmFsTGlua0ljb24gfSBmcm9tICcuL2V4dGVybmFsX2xpbmtfaWNvbic7XG5pbXBvcnQgeyBldWlMaW5rU3R5bGVzIH0gZnJvbSAnLi9saW5rLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDT0xPUlMgPSBbJ3ByaW1hcnknLCAnc3ViZHVlZCcsICdzdWNjZXNzJywgJ2FjY2VudCcsICdkYW5nZXInLCAnd2FybmluZycsICd0ZXh0JywgJ2dob3N0J107XG52YXIgRXVpTGluayA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdwcmltYXJ5JyA6IF9yZWYkY29sb3IsXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICBleHRlcm5hbCA9IF9yZWYuZXh0ZXJuYWwsXG4gICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgcmVsID0gX3JlZi5yZWwsXG4gICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgX2Rpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlMaW5rU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpTGlua107XG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgdmFyIGRpc2FibGVkID0gX2Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbiAgaWYgKGhyZWYgPT09IHVuZGVmaW5lZCB8fCAhaXNIcmVmVmFsaWQpIHtcbiAgICB2YXIgYnV0dG9uUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpTGluaycsIGNsYXNzTmFtZSksXG4gICAgICBjc3M6IFtjc3NTdHlsZXMsIGRpc2FibGVkID8gW3N0eWxlcy5kaXNhYmxlZF0gOiBzdHlsZXNbY29sb3JdXSxcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gICAgfSwgcmVzdCk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiByZWZcbiAgICB9LCBidXR0b25Qcm9wcyksIGNoaWxkcmVuKTtcbiAgfVxuICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICBocmVmOiBocmVmLFxuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIHJlbDogcmVsXG4gIH0pO1xuICB2YXIgYW5jaG9yUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aUxpbmsnLCBjbGFzc05hbWUpLFxuICAgIGNzczogW2Nzc1N0eWxlcywgc3R5bGVzW2NvbG9yXV0sXG4gICAgaHJlZjogaHJlZixcbiAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICByZWw6IHNlY3VyZVJlbCxcbiAgICBvbkNsaWNrOiBvbkNsaWNrXG4gIH0sIHJlc3QpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImFcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmXG4gIH0sIGFuY2hvclByb3BzKSwgY2hpbGRyZW4sIF9fX0Vtb3Rpb25KU1goRXVpRXh0ZXJuYWxMaW5rSWNvbiwge1xuICAgIGV4dGVybmFsOiBleHRlcm5hbCxcbiAgICB0YXJnZXQ6IHRhcmdldFxuICB9KSk7XG59KTtcbkV1aUxpbmsucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiLCBcInJlc2V0XCIsIFwic3VibWl0XCJdKSxcbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMuXG4gICAgICovXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIHNob3cgYW4gaWNvbiBpbmRpY2F0aW5nIHRoYXQgaXQgaXMgYW4gZXh0ZXJuYWwgbGluaztcbiAgICAgKiBEZWZhdWx0cyB0byB0cnVlIGlmIGB0YXJnZXQ9XCJfYmxhbmtcImBcbiAgICAgKi9cbiAgZXh0ZXJuYWw6IFByb3BUeXBlcy5ib29sXG59O1xuRXVpTGluay5kaXNwbGF5TmFtZSA9ICdFdWlMaW5rJztcbmV4cG9ydCB7IEV1aUxpbmsgfTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRhcmdldFwiLCBcImV4dGVybmFsXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBsb2dpY2FsU3R5bGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5cbi8qKlxuICogRFJZIHV0aWwgZm9yIGluZGljYXRpbmcgZXh0ZXJuYWwgbGlua3MgYm90aCB2aWEgaWNvbiBhbmQgdG9cbiAqIHNjcmVlbiByZWFkZXJzLiBVc2VkIGludGVybmFsbHkgYnkgYXQgRXVpTGluayBhbmQgRXVpTGlzdEdyb3VwSXRlbVxuICovXG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGljb25TdHlsZSA9IGZ1bmN0aW9uIGljb25TdHlsZShfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiBsb2dpY2FsU3R5bGUoJ21hcmdpbi1sZWZ0JywgZXVpVGhlbWUuc2l6ZS54cyk7XG59O1xuZXhwb3J0IHZhciBFdWlFeHRlcm5hbExpbmtJY29uID0gZnVuY3Rpb24gRXVpRXh0ZXJuYWxMaW5rSWNvbihfcmVmMikge1xuICB2YXIgdGFyZ2V0ID0gX3JlZjIudGFyZ2V0LFxuICAgIGV4dGVybmFsID0gX3JlZjIuZXh0ZXJuYWwsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGljb25Dc3NTdHlsZSA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGljb25TdHlsZSk7XG4gIHZhciBzaG93RXh0ZXJuYWxMaW5rSWNvbiA9IHRhcmdldCA9PT0gJ19ibGFuaycgJiYgZXh0ZXJuYWwgIT09IGZhbHNlIHx8IGV4dGVybmFsID09PSB0cnVlO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgc2hvd0V4dGVybmFsTGlua0ljb24gJiYgX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJY29uLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBpY29uQ3NzU3R5bGUsXG4gICAgc2l6ZTogXCJzXCIsXG4gICAgdHlwZTogXCJwb3BvdXRcIixcbiAgICByb2xlOiBcInByZXNlbnRhdGlvblwiXG4gIH0sIHJlc3QpKSwgdGFyZ2V0ID09PSAnX2JsYW5rJyA/IF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpRXh0ZXJuYWxMaW5rSWNvbi5uZXdUYXJnZXQuc2NyZWVuUmVhZGVyT25seVRleHRcIixcbiAgICBkZWZhdWx0OiBcIihleHRlcm5hbCwgb3BlbnMgaW4gYSBuZXcgdGFiIG9yIHdpbmRvdylcIlxuICB9KSkpIDogX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICB0b2tlbjogXCJldWlFeHRlcm5hbExpbmtJY29uLmV4dGVybmFsVGFyZ2V0LnNjcmVlblJlYWRlck9ubHlUZXh0XCIsXG4gICAgZGVmYXVsdDogXCIoZXh0ZXJuYWwpXCJcbiAgfSkpKSkpKTtcbn07XG5FdWlFeHRlcm5hbExpbmtJY29uLnByb3BUeXBlcyA9IHtcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSB0byBzaG93IGFuIGljb24gaW5kaWNhdGluZyB0aGF0IGl0IGlzIGFuIGV4dGVybmFsIGxpbms7XG4gICAgICogRGVmYXVsdHMgdG8gdHJ1ZSBpZiBgdGFyZ2V0PVwiX2JsYW5rXCJgXG4gICAgICovXG4gIGV4dGVybmFsOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY2xvc2VQb3BvdmVyXCIsIFwiYW5jaG9yUG9zaXRpb25cIiwgXCJhdHRhY2hUb0FuY2hvclwiLCBcInJlcG9zaXRpb25Ub0Nyb3NzQXhpc1wiLCBcImRpc3BsYXlcIiwgXCJwYW5lbFBhZGRpbmdTaXplXCIsIFwiY2xvc2VPblNjcm9sbFwiLCBcIm93bkZvY3VzXCIsIFwiZGlzYWJsZUZvY3VzVHJhcFwiLCBcImZvY3VzVHJhcFByb3BzXCIsIFwiaW5wdXRcIiwgXCJmdWxsV2lkdGhcIiwgXCJwYW5lbE1pbldpZHRoXCIsIFwib25QYW5lbFJlc2l6ZVwiLCBcImlucHV0UmVmXCIsIFwicGFuZWxSZWZcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVJlZiwgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdGFiYmFibGUgfSBmcm9tICd0YWJiYWJsZSc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsga2V5cywgdXNlQ29tYmluZWRSZWZzLCB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyJztcbmltcG9ydCB7IEV1aUZvY3VzVHJhcCB9IGZyb20gJy4uL2ZvY3VzX3RyYXAnO1xuaW1wb3J0IHsgZXVpRm9ybU1heFdpZHRoIH0gZnJvbSAnLi4vZm9ybS9mb3JtLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlQb3BvdmVyIH0gZnJvbSAnLi9wb3BvdmVyJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG4vLyBVc2VkIGJ5IGNoaWxkIGNvbXBvbmVudHMgdGhhdCB3YW50IHRvIGtub3cgdGhlIHBhcmVudCBwb3BvdmVyIHdpZHRoXG5leHBvcnQgdmFyIEV1aUlucHV0UG9wb3ZlcldpZHRoQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KDApO1xuZXhwb3J0IHZhciBFdWlJbnB1dFBvcG92ZXIgPSBmdW5jdGlvbiBFdWlJbnB1dFBvcG92ZXIoX3JlZikge1xuICB2YXIgX3Byb3BzJHBhbmVsUHJvcHM7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgY2xvc2VQb3BvdmVyID0gX3JlZi5jbG9zZVBvcG92ZXIsXG4gICAgX3JlZiRhbmNob3JQb3NpdGlvbiA9IF9yZWYuYW5jaG9yUG9zaXRpb24sXG4gICAgYW5jaG9yUG9zaXRpb24gPSBfcmVmJGFuY2hvclBvc2l0aW9uID09PSB2b2lkIDAgPyAnZG93bkxlZnQnIDogX3JlZiRhbmNob3JQb3NpdGlvbixcbiAgICBfcmVmJGF0dGFjaFRvQW5jaG9yID0gX3JlZi5hdHRhY2hUb0FuY2hvcixcbiAgICBhdHRhY2hUb0FuY2hvciA9IF9yZWYkYXR0YWNoVG9BbmNob3IgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGF0dGFjaFRvQW5jaG9yLFxuICAgIF9yZWYkcmVwb3NpdGlvblRvQ3JvcyA9IF9yZWYucmVwb3NpdGlvblRvQ3Jvc3NBeGlzLFxuICAgIHJlcG9zaXRpb25Ub0Nyb3NzQXhpcyA9IF9yZWYkcmVwb3NpdGlvblRvQ3JvcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHJlcG9zaXRpb25Ub0Nyb3MsXG4gICAgX3JlZiRkaXNwbGF5ID0gX3JlZi5kaXNwbGF5LFxuICAgIGRpc3BsYXkgPSBfcmVmJGRpc3BsYXkgPT09IHZvaWQgMCA/ICdibG9jaycgOiBfcmVmJGRpc3BsYXksXG4gICAgX3JlZiRwYW5lbFBhZGRpbmdTaXplID0gX3JlZi5wYW5lbFBhZGRpbmdTaXplLFxuICAgIHBhbmVsUGFkZGluZ1NpemUgPSBfcmVmJHBhbmVsUGFkZGluZ1NpemUgPT09IHZvaWQgMCA/ICdzJyA6IF9yZWYkcGFuZWxQYWRkaW5nU2l6ZSxcbiAgICBfcmVmJGNsb3NlT25TY3JvbGwgPSBfcmVmLmNsb3NlT25TY3JvbGwsXG4gICAgY2xvc2VPblNjcm9sbCA9IF9yZWYkY2xvc2VPblNjcm9sbCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNsb3NlT25TY3JvbGwsXG4gICAgX3JlZiRvd25Gb2N1cyA9IF9yZWYub3duRm9jdXMsXG4gICAgb3duRm9jdXMgPSBfcmVmJG93bkZvY3VzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkb3duRm9jdXMsXG4gICAgX3JlZiRkaXNhYmxlRm9jdXNUcmFwID0gX3JlZi5kaXNhYmxlRm9jdXNUcmFwLFxuICAgIGRpc2FibGVGb2N1c1RyYXAgPSBfcmVmJGRpc2FibGVGb2N1c1RyYXAgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRkaXNhYmxlRm9jdXNUcmFwLFxuICAgIGZvY3VzVHJhcFByb3BzID0gX3JlZi5mb2N1c1RyYXBQcm9wcyxcbiAgICBpbnB1dCA9IF9yZWYuaW5wdXQsXG4gICAgX3JlZiRmdWxsV2lkdGggPSBfcmVmLmZ1bGxXaWR0aCxcbiAgICBmdWxsV2lkdGggPSBfcmVmJGZ1bGxXaWR0aCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGZ1bGxXaWR0aCxcbiAgICBfcmVmJHBhbmVsTWluV2lkdGggPSBfcmVmLnBhbmVsTWluV2lkdGgsXG4gICAgcGFuZWxNaW5XaWR0aCA9IF9yZWYkcGFuZWxNaW5XaWR0aCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkcGFuZWxNaW5XaWR0aCxcbiAgICBvblBhbmVsUmVzaXplID0gX3JlZi5vblBhbmVsUmVzaXplLFxuICAgIF9pbnB1dFJlZiA9IF9yZWYuaW5wdXRSZWYsXG4gICAgX3BhbmVsUmVmID0gX3JlZi5wYW5lbFJlZixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzbmFtZXMoJ2V1aUlucHV0UG9wb3ZlcicsIGNsYXNzTmFtZSk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBmb3JtTWF4V2lkdGggPSBldWlGb3JtTWF4V2lkdGgoZXVpVGhlbWUpO1xuXG4gIC8qKlxuICAgKiBSZWYgc2V0dXBcbiAgICovXG5cbiAgdmFyIHBvcG92ZXJDbGFzc1JlZiA9IHVzZVJlZihudWxsKTtcbiAgLy8gVGhlIGlucHV0RWwgc3RhdGUgZW5zdXJlcyB0aGF0IHdpZHRoIGlzIGNvcnJlY3RseSB0cmFja2VkIG9uIGluaXRpYWwgbG9hZFxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgaW5wdXRFbCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0SW5wdXRFbCA9IF91c2VTdGF0ZTJbMV07XG4gIC8vIFRoZSBwYW5lbEVsIHN0YXRlIGVuc3VyZXMgdGhhdCB3aWR0aCBpcyBjb3JyZWN0bHkgc2V0IGV2ZXJ5IHRpbWUgdGhlIHBvcG92ZXIgb3BlbnNcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgcGFuZWxFbCA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0UGFuZWxFbCA9IF91c2VTdGF0ZTRbMV07XG4gIHZhciBpbnB1dFJlZiA9IHVzZUNvbWJpbmVkUmVmcyhbc2V0SW5wdXRFbCwgX2lucHV0UmVmXSk7XG4gIHZhciBwYW5lbFJlZiA9IHVzZUNvbWJpbmVkUmVmcyhbc2V0UGFuZWxFbCwgX3BhbmVsUmVmXSk7XG5cbiAgLyoqXG4gICAqIFNpemluZy93aWR0aCBsb2dpY1xuICAgKi9cblxuICB2YXIgaW5wdXRXaWR0aCA9IHVzZVJlc2l6ZU9ic2VydmVyKGlucHV0RWwsICd3aWR0aCcpLndpZHRoO1xuICB2YXIgcGFuZWxXaWR0aCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnB1dFdpZHRoIDwgcGFuZWxNaW5XaWR0aCA/IHBhbmVsTWluV2lkdGggOiBpbnB1dFdpZHRoO1xuICB9LCBbcGFuZWxNaW5XaWR0aCwgaW5wdXRXaWR0aF0pO1xuXG4gIC8vIFJlc2l6ZSBjYWxsYmFja1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIG9uUGFuZWxSZXNpemUgPT09IG51bGwgfHwgb25QYW5lbFJlc2l6ZSA9PT0gdm9pZCAwIHx8IG9uUGFuZWxSZXNpemUocGFuZWxXaWR0aCk7XG4gIH0sIFtwYW5lbFdpZHRoLCBvblBhbmVsUmVzaXplXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHBhbmVsRWwpIHtcbiAgICAgIC8vIFdlIGhhdmUgdG8gbW9kaWZ5IHRoZSBwb3BvdmVyIHBhbmVsIERPTSBub2RlIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmdcbiAgICAgIC8vIGBwYW5lbFN0eWxlYCwgYXMgdGhlcmUncyBzb21lIHdlaXJkIHBvc2l0aW9uaW5nIGJ1Z3Mgb24gcmVzaXplIG90aGVyd2lzZVxuICAgICAgcGFuZWxFbC5zdHlsZS5pbmxpbmVTaXplID0gXCJcIi5jb25jYXQocGFuZWxXaWR0aCwgXCJweFwiKTtcbiAgICB9XG4gIH0sIFtwYW5lbEVsLCBwYW5lbFdpZHRoXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgLy8gVGhpcyBmaXJlcyBvbiBhbGwgaW5wdXQgd2lkdGggY2hhbmdlcyByZWdhcmRsZXNzIG9mIG1pbmltdW0gc2l6ZSwgYmVjYXVzZSBvblxuICAgIC8vIHJpZ2h0L2NlbnRlciBhbmNob3JlZCBwb3BvdmVycywgdGhlIGlucHV0IHdpZHRoIGFmZmVjdHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyXG4gICAgaWYgKHBhbmVsRWwpIHtcbiAgICAgIHZhciBfcG9wb3ZlckNsYXNzUmVmJGN1cnI7XG4gICAgICAoX3BvcG92ZXJDbGFzc1JlZiRjdXJyID0gcG9wb3ZlckNsYXNzUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9wb3BvdmVyQ2xhc3NSZWYkY3VyciA9PT0gdm9pZCAwIHx8IF9wb3BvdmVyQ2xhc3NSZWYkY3Vyci5wb3NpdGlvblBvcG92ZXJGbHVpZCgpO1xuICAgIH1cbiAgfSwgW2lucHV0V2lkdGgsIHBhbmVsRWxdKTtcblxuICAvKipcbiAgICogUG9wb3ZlciB0YWIgdG8gY2xvc2UgbG9naWNcbiAgICovXG5cbiAgdmFyIHBhbmVsUHJvcHNPbktleURvd24gPSAoX3Byb3BzJHBhbmVsUHJvcHMgPSBwcm9wcy5wYW5lbFByb3BzKSA9PT0gbnVsbCB8fCBfcHJvcHMkcGFuZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3Byb3BzJHBhbmVsUHJvcHMub25LZXlEb3duO1xuICB2YXIgb25LZXlEb3duID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcGFuZWxQcm9wc09uS2V5RG93biA9PT0gbnVsbCB8fCBwYW5lbFByb3BzT25LZXlEb3duID09PSB2b2lkIDAgfHwgcGFuZWxQcm9wc09uS2V5RG93bihldmVudCk7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0ga2V5cy5UQUIpIHtcbiAgICAgIGlmIChkaXNhYmxlRm9jdXNUcmFwKSB7XG4gICAgICAgIGlmICghb3duRm9jdXMpIHtcbiAgICAgICAgICBjbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRhYmJhYmxlSXRlbXMgPSB0YWJiYWJsZShldmVudC5jdXJyZW50VGFyZ2V0KS5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgcmV0dXJuICFlbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtZm9jdXMtZ3VhcmQnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGFiYmFibGVJdGVtcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdmFyIHRhYmJpbmdGcm9tTGFzdEl0ZW1JblBvcG92ZXIgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0YWJiYWJsZUl0ZW1zW3RhYmJhYmxlSXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0YWJiaW5nRnJvbUxhc3RJdGVtSW5Qb3BvdmVyKSB7XG4gICAgICAgICAgY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtkaXNhYmxlRm9jdXNUcmFwLCBvd25Gb2N1cywgY2xvc2VQb3BvdmVyLCBwYW5lbFByb3BzT25LZXlEb3duXSk7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNsb3NlIG9uIHNjcm9sbCBiZWhhdmlvclxuICAgKi9cblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIFdoZW4gdGhlIHBvcG92ZXIgb3BlbnMsIGFkZCBhIHNjcm9sbCBsaXN0ZW5lciB0byB0aGUgcGFnZSAoJiByZW1vdmUgaXQgYWZ0ZXIpXG4gICAgaWYgKGNsb3NlT25TY3JvbGwgJiYgcGFuZWxFbCkge1xuICAgICAgdmFyIGNsb3NlUG9wb3Zlck9uU2Nyb2xsID0gZnVuY3Rpb24gY2xvc2VQb3BvdmVyT25TY3JvbGwoZXZlbnQpIHtcbiAgICAgICAgdmFyIHNjcm9sbFRhcmdldCA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICAvLyBCYXNpYyBleGlzdGVuY2UgY2hlY2tcbiAgICAgICAgaWYgKCFwYW5lbEVsIHx8ICFpbnB1dEVsIHx8ICFzY3JvbGxUYXJnZXQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG8gbm90IGNsb3NlIHRoZSBwb3BvdmVyIGlmIHRoZSBpbnB1dCBvciBwb3BvdmVyIGl0c2VsZiB3YXMgc2Nyb2xsZWRcbiAgICAgICAgaWYgKHBhbmVsRWwuY29udGFpbnMoc2Nyb2xsVGFyZ2V0KSB8fCBpbnB1dEVsLmNvbnRhaW5zKHNjcm9sbFRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmlyZWZveCB3aWxsIHRyaWdnZXIgYSBzY3JvbGwgZXZlbnQgaW4gbWFueSBjb21tb24gc2l0dWF0aW9ucyAoZS5nLiBkb2NzIHNpZGUgbmF2KVxuICAgICAgICAvLyB3aGVuIHRoZSBvcHRpb25zIGxpc3QgZGl2IGlzIGFwcGVuZGVkIHRvIHRoZSBET00uIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHdlIHNob3VsZFxuICAgICAgICAvLyBjaGVjayBpZiB0aGUgZWxlbWVudCB0aGF0IHNjcm9sbGVkIGFjdHVhbGx5IGNvbnRhaW5zL3dpbGwgYWZmZWN0IHRoZSBpbnB1dFxuICAgICAgICBpZiAoIXNjcm9sbFRhcmdldC5jb250YWlucyhpbnB1dEVsKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjbG9zZVBvcG92ZXIoKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEtpYmFuYSBDeXByZXNzIHRlc3RzIHRyaWdnZXIgYSBzY3JvbGwgZXZlbnQgaW4gbWFueSBjb21tb24gc2l0dWF0aW9ucyB3aGVuIHRoZSBvcHRpb25zIGxpc3QgZGl2IGlzIGFwcGVuZGVkXG4gICAgICAvLyB0byB0aGUgRE9NOyBpbiB0ZXN0aW5nIGl0IHdhcyBhbHdheXMgd2l0aGluIDEwMG1zLCBidXQgc2V0dGluZyBhIHRpbWVvdXQgaGVyZSBmb3IgNTAwbXMgdG8gYmUgc2FmZVxuICAgICAgdmFyIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2xvc2VQb3BvdmVyT25TY3JvbGwsIHtcbiAgICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICAgIC8vIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgYXMgd2Ugd29uJ3QgY2FsbCBwcmV2ZW50RGVmYXVsdFxuICAgICAgICAgIGNhcHR1cmU6IHRydWUgLy8gc2Nyb2xsIGV2ZW50cyBkb24ndCBidWJibGUsIHRoZXkgbXVzdCBiZSBjYXB0dXJlZCBpbnN0ZWFkXG4gICAgICAgIH0pO1xuICAgICAgfSwgNTAwKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjbG9zZVBvcG92ZXJPblNjcm9sbCwge1xuICAgICAgICAgIGNhcHR1cmU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtjbG9zZU9uU2Nyb2xsLCBjbG9zZVBvcG92ZXIsIHBhbmVsRWwsIGlucHV0RWxdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlciwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IC8qI19fUFVSRV9fKi9jc3MoZnVsbFdpZHRoID8gdW5kZWZpbmVkIDogbG9naWNhbENTUygnbWF4LXdpZHRoJywgZm9ybU1heFdpZHRoKSwgXCI7bGFiZWw6RXVpSW5wdXRQb3BvdmVyO1wiKSxcbiAgICBkaXNwbGF5OiBkaXNwbGF5LFxuICAgIGJ1dHRvbjogaW5wdXQsXG4gICAgcG9wb3ZlclJlZjogaW5wdXRSZWYsXG4gICAgcGFuZWxSZWY6IHBhbmVsUmVmLFxuICAgIHJlZjogcG9wb3ZlckNsYXNzUmVmLFxuICAgIGNsb3NlUG9wb3ZlcjogY2xvc2VQb3BvdmVyLFxuICAgIGFuY2hvclBvc2l0aW9uOiBhbmNob3JQb3NpdGlvbixcbiAgICBhdHRhY2hUb0FuY2hvcjogYXR0YWNoVG9BbmNob3IsXG4gICAgcmVwb3NpdGlvblRvQ3Jvc3NBeGlzOiByZXBvc2l0aW9uVG9Dcm9zc0F4aXMsXG4gICAgcGFuZWxQYWRkaW5nU2l6ZTogcGFuZWxQYWRkaW5nU2l6ZSxcbiAgICBvd25Gb2N1czogb3duRm9jdXNcbiAgfSwgcHJvcHMsIHtcbiAgICBwYW5lbFByb3BzOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzLnBhbmVsUHJvcHMpLCB7fSwge1xuICAgICAgb25LZXlEb3duOiBvbktleURvd25cbiAgICB9KVxuICB9KSwgX19fRW1vdGlvbkpTWChFdWlGb2N1c1RyYXAsIF9leHRlbmRzKHtcbiAgICBjbGlja091dHNpZGVEaXNhYmxlczogdHJ1ZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZUZvY3VzVHJhcFxuICB9LCBmb2N1c1RyYXBQcm9wcyksIF9fX0Vtb3Rpb25KU1goRXVpSW5wdXRQb3BvdmVyV2lkdGhDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHBhbmVsV2lkdGhcbiAgfSwgY2hpbGRyZW4pKSk7XG59O1xuRXVpSW5wdXRQb3BvdmVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFsaWdubWVudCBvZiB0aGUgcG9wb3ZlciByZWxhdGl2ZSB0byB0aGUgaW5wdXRcbiAgICAgKi9cbiAgYW5jaG9yUG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJkb3duTGVmdFwiLCBcImRvd25SaWdodFwiLCBcImRvd25DZW50ZXJcIl0pLFxuICBkaXNhYmxlRm9jdXNUcmFwOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQWxsb3dzIGF1dG9tYXRpY2FsbHkgY2xvc2luZyB0aGUgaW5wdXQgcG9wb3ZlciBvbiBwYWdlIHNjcm9sbFxuICAgICAqL1xuICBjbG9zZU9uU2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaW5wdXQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5hbnksXG4gIG9uUGFuZWxSZXNpemU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCAqKkV1aUlucHV0UG9wb3ZlcnMqKiBpbmhlcml0IHRoZSBzYW1lIHdpZHRoIGFzIHRoZSBwYXNzZWQgaW5wdXQgZWxlbWVudC5cbiAgICAgKiBIb3dldmVyLCBpZiB0aGUgaW5wdXQgd2lkdGggaXMgdG9vIHNtYWxsLCB5b3UgY2FuIHBhc3MgYSBtaW5pbXVtIHBhbmVsIHdpZHRoXG4gICAgICogKHRoYXQgc2hvdWxkIGJlIGJhc2VkIG9uIHRoZSBwb3BvdmVyIGNvbnRlbnQpLlxuICAgICAqL1xuICBwYW5lbE1pbldpZHRoOiBQcm9wVHlwZXMubnVtYmVyXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGlja091dHNpZGVEaXNhYmxlc1wiLCBcImRpc2FibGVkXCIsIFwicmV0dXJuRm9jdXNcIiwgXCJub0lzb2xhdGlvblwiLCBcInNjcm9sbExvY2tcIiwgXCJnYXBNb2RlXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEZvY3VzT24gfSBmcm9tICdyZWFjdC1mb2N1cy1vbic7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGxCYXIgfSBmcm9tICdyZWFjdC1yZW1vdmUtc2Nyb2xsLWJhcic7XG5pbXBvcnQgeyBmaW5kRWxlbWVudEJ5U2VsZWN0b3JPclJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZVByb3BzV2l0aENvbXBvbmVudERlZmF1bHRzIH0gZnJvbSAnLi4vcHJvdmlkZXIvY29tcG9uZW50X2RlZmF1bHRzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvY3VzVHJhcCA9IGZ1bmN0aW9uIEV1aUZvY3VzVHJhcChwcm9wcykge1xuICB2YXIgcHJvcHNXaXRoRGVmYXVsdHMgPSB1c2VQcm9wc1dpdGhDb21wb25lbnREZWZhdWx0cygnRXVpRm9jdXNUcmFwJywgcHJvcHMpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb2N1c1RyYXBDbGFzcywgcHJvcHNXaXRoRGVmYXVsdHMpO1xufTtcbkV1aUZvY3VzVHJhcC5wcm9wVHlwZXMgPSB7XG4gIC8vIEZvciBzb21lIHJlYXNvbiwgU3Rvcnlib29rIGRvZXNuJ3QgcmVnaXN0ZXIgdGhlc2UgcHJvcHMgaWYgdGhleSdyZSBQaWNrPD4nZFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgc3R5bGU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogV2hldGhlciBgb25DbGlja091dHNpZGVgIHNob3VsZCBiZSBjYWxsZWQgb24gbW91c2V1cCBpbnN0ZWFkIG9mIG1vdXNlZG93bi5cbiAgICAgKiBUaGlzIGZsYWcgY2FuIGJlIHVzZWQgdG8gcHJldmVudCBjb25mbGljdHMgd2l0aCBvdXRzaWRlIHRvZ2dsZSBidXR0b25zIGJ5IGRlbGF5aW5nIHRoZSBjbG9zaW5nIGNsaWNrIGNhbGxiYWNrLlxuICAgICAqL1xuICBjbG9zZU9uTW91c2V1cDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIENsaWNraW5nIG91dHNpZGUgdGhlIHRyYXAgYXJlYSB3aWxsIGRpc2FibGUgdGhlIHRyYXBcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICBjbGlja091dHNpZGVEaXNhYmxlczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byBlbGVtZW50IHRoYXQgd2lsbCBnZXQgZm9jdXMgd2hlbiB0aGUgdHJhcCBpcyBpbml0aWF0ZWRcbiAgICAgKi9cbiAgaW5pdGlhbEZvY3VzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBpZiBgc2Nyb2xsTG9ja2AgaXMgc2V0IHRvIHRydWUsIHRoZSBib2R5J3Mgc2Nyb2xsYmFyIHdpZHRoIHdpbGwgYmUgcHJlc2VydmVkIG9uIGxvY2tcbiAgICAgKiB2aWEgdGhlIGBnYXBNb2RlYCBDU1MgcHJvcGVydHkuIERlcGVuZGluZyBvbiB5b3VyIGN1c3RvbSBDU1MsIHlvdSBtYXkgcHJlZmVyIHRvIHVzZVxuICAgICAqIGBtYXJnaW5gIGluc3RlYWQgb2YgYHBhZGRpbmdgLlxuICAgICAqIEBkZWZhdWx0IHBhZGRpbmdcbiAgICAgKi9cbiAgZ2FwTW9kZTogUHJvcFR5cGVzLm9uZU9mKFtcInBhZGRpbmdcIiwgXCJtYXJnaW5cIl0pLFxuICAvKipcbiAgICAgKiBDb25maWd1cmVzIGZvY3VzIHRyYXBwaW5nIGJldHdlZW4gaWZyYW1lcy5cbiAgICAgKiBCeSBkZWZhdWx0LCBFdWlGb2N1c1RyYXAgYWxsb3dzIGZvY3VzIHRvIGxlYXZlIGlmcmFtZXMgYW5kIG1vdmUgdG8gZWxlbWVudHMgb3V0c2lkZSBvZiBpdC5cbiAgICAgKiBTZXQgdG8gYHRydWVgIGlmIHlvdSB3YW50IGZvY3VzIHRvIHJlbWFpbiB0cmFwcGVkIHdpdGhpbiB0aGUgaWZyYW1lLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIGNyb3NzRnJhbWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIHNjcm9sbExvY2s6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgbm9Jc29sYXRpb246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgcmV0dXJuRm9jdXM6IFByb3BUeXBlcy5hbnlcbn07XG52YXIgRXVpRm9jdXNUcmFwQ2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpRm9jdXNUcmFwQ2xhc3MoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGb2N1c1RyYXBDbGFzcyk7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpRm9jdXNUcmFwQ2xhc3MsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0YXRlXCIsIHtcbiAgICAgIGhhc0JlZW5EaXNhYmxlZEJ5Q2xpY2s6IGZhbHNlXG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImxhc3RJbnRlcmNlcHRlZEV2ZW50XCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwcmV2ZW50Rm9jdXNFeGl0XCIsIGZhbHNlKTtcbiAgICAvLyBQcm9ncmFtbWF0aWNhbGx5IHNldHMgZm9jdXMgb24gYSBuZXN0ZWQgRE9NIG5vZGU7IG9wdGlvbmFsXG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNldEluaXRpYWxGb2N1c1wiLCBmdW5jdGlvbiAoaW5pdGlhbEZvY3VzKSB7XG4gICAgICBpZiAoIWluaXRpYWxGb2N1cykgcmV0dXJuO1xuICAgICAgdmFyIG5vZGUgPSBmaW5kRWxlbWVudEJ5U2VsZWN0b3JPclJlZihpbml0aWFsRm9jdXMpO1xuICAgICAgaWYgKCFub2RlKSByZXR1cm47XG4gICAgICAvLyBgZGF0YS1hdXRvZm9jdXNgIGlzIHBhcnQgb2YgdGhlICdyZWFjdC1mb2N1cy1vbicgQVBJXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1hdXRvZm9jdXMnLCAndHJ1ZScpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk1vdXNldXBPdXRzaWRlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBfdGhpcy5yZW1vdmVNb3VzZXVwTGlzdGVuZXIoKTtcbiAgICAgIC8vIFRpbWVvdXQgZ2l2ZXMgcHJlY2VkZW5jZSB0byB0aGUgY29uc3VtZXIgdG8gaW5pdGlhdGUgY2xvc2UgaWYgaXQgaGFzIHRvZ2dsZSBiZWhhdmlvci5cbiAgICAgIC8vIE90aGVyd2lzZSB0aGlzIGV2ZW50IG1heSBvY2N1ciBmaXJzdCBhbmQgdGhlIGNvbnN1bWVyIHRvZ2dsZSB3aWxsIHJlb3BlbiB0aGUgZmx5b3V0LlxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkNsaWNrT3UsIF90aGlzJHByb3BzO1xuICAgICAgICByZXR1cm4gKF90aGlzJHByb3BzJG9uQ2xpY2tPdSA9IChfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzKS5vbkNsaWNrT3V0c2lkZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DbGlja091ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkNsaWNrT3UuY2FsbChfdGhpcyRwcm9wcywgZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYWRkTW91c2V1cExpc3RlbmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgX3RoaXMub25Nb3VzZXVwT3V0c2lkZSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlbW92ZU1vdXNldXBMaXN0ZW5lclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgX3RoaXMub25Nb3VzZXVwT3V0c2lkZSk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJoYW5kbGVPdXRzaWRlQ2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9uQ2xpY2tPdXRzaWRlID0gX3RoaXMkcHJvcHMyLm9uQ2xpY2tPdXRzaWRlLFxuICAgICAgICBjbGlja091dHNpZGVEaXNhYmxlcyA9IF90aGlzJHByb3BzMi5jbGlja091dHNpZGVEaXNhYmxlcyxcbiAgICAgICAgY2xvc2VPbk1vdXNldXAgPSBfdGhpcyRwcm9wczIuY2xvc2VPbk1vdXNldXA7XG4gICAgICBpZiAoY2xpY2tPdXRzaWRlRGlzYWJsZXMpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0JlZW5EaXNhYmxlZEJ5Q2xpY2s6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAob25DbGlja091dHNpZGUpIHtcbiAgICAgICAgY2xvc2VPbk1vdXNldXAgPyBfdGhpcy5hZGRNb3VzZXVwTGlzdGVuZXIoKSA6IG9uQ2xpY2tPdXRzaWRlKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUZvY3VzVHJhcENsYXNzLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlGb2N1c1RyYXBDbGFzcywgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLnNldEluaXRpYWxGb2N1cyh0aGlzLnByb3BzLmluaXRpYWxGb2N1cyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICBpZiAocHJldlByb3BzLmRpc2FibGVkID09PSB0cnVlICYmIHRoaXMucHJvcHMuZGlzYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0JlZW5EaXNhYmxlZEJ5Q2xpY2s6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMucmVtb3ZlTW91c2V1cExpc3RlbmVyKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczMuY2hpbGRyZW4sXG4gICAgICAgIGNsaWNrT3V0c2lkZURpc2FibGVzID0gX3RoaXMkcHJvcHMzLmNsaWNrT3V0c2lkZURpc2FibGVzLFxuICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzMy5kaXNhYmxlZCxcbiAgICAgICAgcmV0dXJuRm9jdXMgPSBfdGhpcyRwcm9wczMucmV0dXJuRm9jdXMsXG4gICAgICAgIG5vSXNvbGF0aW9uID0gX3RoaXMkcHJvcHMzLm5vSXNvbGF0aW9uLFxuICAgICAgICBzY3JvbGxMb2NrID0gX3RoaXMkcHJvcHMzLnNjcm9sbExvY2ssXG4gICAgICAgIGdhcE1vZGUgPSBfdGhpcyRwcm9wczMuZ2FwTW9kZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczMsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgaXNEaXNhYmxlZCA9IGRpc2FibGVkIHx8IHRoaXMuc3RhdGUuaGFzQmVlbkRpc2FibGVkQnlDbGljaztcbiAgICAgIHZhciBmb2N1c09uUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICByZXR1cm5Gb2N1czogcmV0dXJuRm9jdXMsXG4gICAgICAgIG5vSXNvbGF0aW9uOiBub0lzb2xhdGlvbixcbiAgICAgICAgZW5hYmxlZDogIWlzRGlzYWJsZWRcbiAgICAgIH0sIHJlc3QpLCB7fSwge1xuICAgICAgICBvbkNsaWNrT3V0c2lkZTogdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2ssXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBgc2Nyb2xsTG9ja2Agc2hvdWxkIGFsd2F5cyBiZSB1bnNldCBvbiBGb2N1c09uLCBhcyBpdCBjYW4gcHJldmVudCBzY3JvbGxpbmcgb25cbiAgICAgICAgICogcG9ydGFscyAoaS5lLiBwb3BvdmVycywgY29tYm9ib3hlcywgZHJvcGRvd24gbWVudXMsIGV0Yy4pIHdpdGhpbiBtb2RhbHMgJiBmbHlvdXRzXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS9yZWFjdC1mb2N1cy1vbi9pc3N1ZXMvNDlcbiAgICAgICAgICovXG4gICAgICAgIHNjcm9sbExvY2s6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZvY3VzT24sIGZvY3VzT25Qcm9wcywgY2hpbGRyZW4sICFpc0Rpc2FibGVkICYmIHNjcm9sbExvY2sgJiYgX19fRW1vdGlvbkpTWChSZW1vdmVTY3JvbGxCYXIsIHtcbiAgICAgICAgZ2FwTW9kZTogZ2FwTW9kZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aUZvY3VzVHJhcENsYXNzLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGNsaWNrT3V0c2lkZURpc2FibGVzOiBmYWxzZSxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICByZXR1cm5Gb2N1czogdHJ1ZSxcbiAgbm9Jc29sYXRpb246IHRydWUsXG4gIHNjcm9sbExvY2s6IGZhbHNlLFxuICBjcm9zc0ZyYW1lOiBmYWxzZSxcbiAgZ2FwTW9kZTogJ3BhZGRpbmcnIC8vIEVVSSBkZWZhdWx0cyB0byBwYWRkaW5nIGJlY2F1c2UgS2liYW5hJ3MgYm9keS9sYXlvdXQgQ1NTIGlnbm9yZXMgYG1hcmdpbmBcbn0pO1xuRXVpRm9jdXNUcmFwQ2xhc3MucHJvcFR5cGVzID0ge1xuICAvLyBGb3Igc29tZSByZWFzb24sIFN0b3J5Ym9vayBkb2Vzbid0IHJlZ2lzdGVyIHRoZXNlIHByb3BzIGlmIHRoZXkncmUgUGljazw+J2RcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFdoZXRoZXIgYG9uQ2xpY2tPdXRzaWRlYCBzaG91bGQgYmUgY2FsbGVkIG9uIG1vdXNldXAgaW5zdGVhZCBvZiBtb3VzZWRvd24uXG4gICAgICogVGhpcyBmbGFnIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgY29uZmxpY3RzIHdpdGggb3V0c2lkZSB0b2dnbGUgYnV0dG9ucyBieSBkZWxheWluZyB0aGUgY2xvc2luZyBjbGljayBjYWxsYmFjay5cbiAgICAgKi9cbiAgY2xvc2VPbk1vdXNldXA6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBDbGlja2luZyBvdXRzaWRlIHRoZSB0cmFwIGFyZWEgd2lsbCBkaXNhYmxlIHRoZSB0cmFwXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gZWxlbWVudCB0aGF0IHdpbGwgZ2V0IGZvY3VzIHdoZW4gdGhlIHRyYXAgaXMgaW5pdGlhdGVkXG4gICAgICovXG4gIGluaXRpYWxGb2N1czogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogaWYgYHNjcm9sbExvY2tgIGlzIHNldCB0byB0cnVlLCB0aGUgYm9keSdzIHNjcm9sbGJhciB3aWR0aCB3aWxsIGJlIHByZXNlcnZlZCBvbiBsb2NrXG4gICAgICogdmlhIHRoZSBgZ2FwTW9kZWAgQ1NTIHByb3BlcnR5LiBEZXBlbmRpbmcgb24geW91ciBjdXN0b20gQ1NTLCB5b3UgbWF5IHByZWZlciB0byB1c2VcbiAgICAgKiBgbWFyZ2luYCBpbnN0ZWFkIG9mIGBwYWRkaW5nYC5cbiAgICAgKiBAZGVmYXVsdCBwYWRkaW5nXG4gICAgICovXG4gIGdhcE1vZGU6IFByb3BUeXBlcy5vbmVPZihbXCJwYWRkaW5nXCIsIFwibWFyZ2luXCJdKSxcbiAgLyoqXG4gICAgICogQ29uZmlndXJlcyBmb2N1cyB0cmFwcGluZyBiZXR3ZWVuIGlmcmFtZXMuXG4gICAgICogQnkgZGVmYXVsdCwgRXVpRm9jdXNUcmFwIGFsbG93cyBmb2N1cyB0byBsZWF2ZSBpZnJhbWVzIGFuZCBtb3ZlIHRvIGVsZW1lbnRzIG91dHNpZGUgb2YgaXQuXG4gICAgICogU2V0IHRvIGB0cnVlYCBpZiB5b3Ugd2FudCBmb2N1cyB0byByZW1haW4gdHJhcHBlZCB3aXRoaW4gdGhlIGlmcmFtZS5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICBjcm9zc0ZyYW1lOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICBzY3JvbGxMb2NrOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gIG5vSXNvbGF0aW9uOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gIHJldHVybkZvY3VzOiBQcm9wVHlwZXMuYW55XG59OyIsICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XG4gIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgICAgIHJba10gPSBhW2pdO1xuICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XG4gIHZhciBpLCBwO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xuICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxuICByZXR1cm4gY29va2VkO1xufTtcblxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufTtcblxudmFyIG93bktleXMgPSBmdW5jdGlvbihvKSB7XG4gIG93bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgIHZhciBhciA9IFtdO1xuICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgcmV0dXJuIGFyO1xuICB9O1xuICByZXR1cm4gb3duS2V5cyhvKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XG4gICAgdmFyIGRpc3Bvc2UsIGlubmVyO1xuICAgIGlmIChhc3luYykge1xuICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG4gICAgfVxuICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcbiAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgICAgaWYgKGFzeW5jKSBpbm5lciA9IGRpc3Bvc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcbiAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbigpIHsgdHJ5IHsgaW5uZXIuY2FsbCh0aGlzKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IH0gfTtcbiAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xuICB9XG4gIGVsc2UgaWYgKGFzeW5jKSB7XG4gICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYpIHtcbiAgZnVuY3Rpb24gZmFpbChlKSB7XG4gICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xuICAgIGVudi5oYXNFcnJvciA9IHRydWU7XG4gIH1cbiAgdmFyIHIsIHMgPSAwO1xuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHdoaWxlIChyID0gZW52LnN0YWNrLnBvcCgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXIuYXN5bmMgJiYgcyA9PT0gMSkgcmV0dXJuIHMgPSAwLCBlbnYuc3RhY2sucHVzaChyKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0KTtcbiAgICAgICAgaWYgKHIuZGlzcG9zZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSByLmRpc3Bvc2UuY2FsbChyLnZhbHVlKTtcbiAgICAgICAgICBpZiAoci5hc3luYykgcmV0dXJuIHMgfD0gMiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgcyB8PSAxO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgPT09IDEpIHJldHVybiBlbnYuaGFzRXJyb3IgPyBQcm9taXNlLnJlamVjdChlbnYuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xuICB9XG4gIHJldHVybiBuZXh0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbihwYXRoLCBwcmVzZXJ2ZUpzeCkge1xuICBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIgJiYgL15cXC5cXC4/XFwvLy50ZXN0KHBhdGgpKSB7XG4gICAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC4odHN4KSR8KCg/OlxcLmQpPykoKD86XFwuW14uL10rPyk/KVxcLihbY21dPyl0cyQvaSwgZnVuY3Rpb24gKG0sIHRzeCwgZCwgZXh0LCBjbSkge1xuICAgICAgICAgIHJldHVybiB0c3ggPyBwcmVzZXJ2ZUpzeCA/IFwiLmpzeFwiIDogXCIuanNcIiA6IGQgJiYgKCFleHQgfHwgIWNtKSA/IG0gOiAoZCArIGV4dCArIFwiLlwiICsgY20udG9Mb3dlckNhc2UoKSArIFwianNcIik7XG4gICAgICB9KTtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fZXNEZWNvcmF0ZSxcbiAgX19ydW5Jbml0aWFsaXplcnMsXG4gIF9fcHJvcEtleSxcbiAgX19zZXRGdW5jdGlvbk5hbWUsXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxuICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbixcbn07XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZvY3VzT24gYXMgUmVhY3RGb2N1c09uIH0gZnJvbSAnLi9VSSc7XG5pbXBvcnQgU2lkZUNhciBmcm9tICcuL3NpZGVjYXInO1xudmFyIFJlcXVpcmVTaWRlQ2FyID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwgX19hc3NpZ24oe30sIHByb3BzKSk7XG59O1xuZXhwb3J0IHZhciBGb2N1c09uID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikgeyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdEZvY3VzT24sIF9fYXNzaWduKHt9LCBwcm9wcywgeyByZWY6IHJlZiwgc2lkZUNhcjogUmVxdWlyZVNpZGVDYXIgfSkpOyB9KTtcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGwgfSBmcm9tICdyZWFjdC1yZW1vdmUtc2Nyb2xsL1VJJztcbmltcG9ydCBSZWFjdEZvY3VzTG9jayBmcm9tICdyZWFjdC1mb2N1cy1sb2NrL1VJJztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBQUkVWRU5UX1NDUk9MTCA9IHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9O1xuZXhwb3J0IHZhciBGb2N1c09uID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHBhcmVudFJlZikge1xuICAgIHZhciBfYSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKSwgbG9ja1Byb3BzID0gX2FbMF0sIHNldExvY2tQcm9wcyA9IF9hWzFdO1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBhdXRvRm9jdXMgPSBwcm9wcy5hdXRvRm9jdXMsIHNoYXJkcyA9IHByb3BzLnNoYXJkcywgY3Jvc3NGcmFtZSA9IHByb3BzLmNyb3NzRnJhbWUsIF9iID0gcHJvcHMuZW5hYmxlZCwgZW5hYmxlZCA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2IsIF9jID0gcHJvcHMuc2Nyb2xsTG9jaywgc2Nyb2xsTG9jayA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2MsIF9kID0gcHJvcHMuZm9jdXNMb2NrLCBmb2N1c0xvY2sgPSBfZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9kLCBfZSA9IHByb3BzLnJldHVybkZvY3VzLCByZXR1cm5Gb2N1cyA9IF9lID09PSB2b2lkIDAgPyB0cnVlIDogX2UsIGluZXJ0ID0gcHJvcHMuaW5lcnQsIGFsbG93UGluY2hab29tID0gcHJvcHMuYWxsb3dQaW5jaFpvb20sIHNpZGVDYXIgPSBwcm9wcy5zaWRlQ2FyLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHNob3VsZElnbm9yZSA9IHByb3BzLnNob3VsZElnbm9yZSwgcHJldmVudFNjcm9sbE9uRm9jdXMgPSBwcm9wcy5wcmV2ZW50U2Nyb2xsT25Gb2N1cywgc3R5bGUgPSBwcm9wcy5zdHlsZSwgYXMgPSBwcm9wcy5hcywgZ2FwTW9kZSA9IHByb3BzLmdhcE1vZGUsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiYXV0b0ZvY3VzXCIsIFwic2hhcmRzXCIsIFwiY3Jvc3NGcmFtZVwiLCBcImVuYWJsZWRcIiwgXCJzY3JvbGxMb2NrXCIsIFwiZm9jdXNMb2NrXCIsIFwicmV0dXJuRm9jdXNcIiwgXCJpbmVydFwiLCBcImFsbG93UGluY2hab29tXCIsIFwic2lkZUNhclwiLCBcImNsYXNzTmFtZVwiLCBcInNob3VsZElnbm9yZVwiLCBcInByZXZlbnRTY3JvbGxPbkZvY3VzXCIsIFwic3R5bGVcIiwgXCJhc1wiLCBcImdhcE1vZGVcIl0pO1xuICAgIHZhciBTaWRlQ2FyID0gc2lkZUNhcjtcbiAgICB2YXIgb25BY3RpdmF0aW9uID0gbG9ja1Byb3BzLm9uQWN0aXZhdGlvbiwgb25EZWFjdGl2YXRpb24gPSBsb2NrUHJvcHMub25EZWFjdGl2YXRpb24sIHJlc3RQcm9wcyA9IF9fcmVzdChsb2NrUHJvcHMsIFtcIm9uQWN0aXZhdGlvblwiLCBcIm9uRGVhY3RpdmF0aW9uXCJdKTtcbiAgICB2YXIgYXBwbGllZExvY2tQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0UHJvcHMpLCB7IGFzOiBhcyxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaWRlQ2FyOiBzaWRlQ2FyLFxuICAgICAgICBzaGFyZHM6IHNoYXJkcyxcbiAgICAgICAgYWxsb3dQaW5jaFpvb206IGFsbG93UGluY2hab29tLFxuICAgICAgICBnYXBNb2RlOiBnYXBNb2RlLFxuICAgICAgICBpbmVydDogaW5lcnQsIGVuYWJsZWQ6IGVuYWJsZWQgJiYgc2Nyb2xsTG9jayB9KTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3RGb2N1c0xvY2ssIHsgcmVmOiBwYXJlbnRSZWYsIHNpZGVDYXI6IHNpZGVDYXIsIGRpc2FibGVkOiAhKGxvY2tQcm9wcyAmJiBlbmFibGVkICYmIGZvY3VzTG9jayksIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cywgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsIHNoYXJkczogc2hhcmRzLCBjcm9zc0ZyYW1lOiBjcm9zc0ZyYW1lLCBvbkFjdGl2YXRpb246IG9uQWN0aXZhdGlvbiwgb25EZWFjdGl2YXRpb246IG9uRGVhY3RpdmF0aW9uLCBjbGFzc05hbWU6IGNsYXNzTmFtZSwgd2hpdGVMaXN0OiBzaG91bGRJZ25vcmUsIGxvY2tQcm9wczogYXBwbGllZExvY2tQcm9wcywgZm9jdXNPcHRpb25zOiBwcmV2ZW50U2Nyb2xsT25Gb2N1cyA/IFBSRVZFTlRfU0NST0xMIDogdW5kZWZpbmVkLCBhczogUmVtb3ZlU2Nyb2xsIH0sIGNoaWxkcmVuKSxcbiAgICAgICAgZW5hYmxlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCBfX2Fzc2lnbih7fSwgcmVzdCwgeyBzaWRlQ2FyOiBlZmZlY3RDYXIsIHNldExvY2tQcm9wczogc2V0TG9ja1Byb3BzLCBzaGFyZHM6IHNoYXJkcyB9KSkpKSk7XG59KTtcbmV4cG9ydCAqIGZyb20gJy4vcmVFeHBvcnRzJztcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmdWxsV2lkdGhDbGFzc05hbWUsIHplcm9SaWdodENsYXNzTmFtZSB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB1c2VNZXJnZVJlZnMgfSBmcm9tICd1c2UtY2FsbGJhY2stcmVmJztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBub3RoaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybjtcbn07XG4vKipcbiAqIFJlbW92ZXMgc2Nyb2xsYmFyIGZyb20gdGhlIHBhZ2UgYW5kIGNvbnRhaW4gdGhlIHNjcm9sbCB3aXRoaW4gdGhlIExvY2tcbiAqL1xudmFyIFJlbW92ZVNjcm9sbCA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCBwYXJlbnRSZWYpIHtcbiAgICB2YXIgcmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAgIHZhciBfYSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICAgICAgb25TY3JvbGxDYXB0dXJlOiBub3RoaW5nLFxuICAgICAgICBvbldoZWVsQ2FwdHVyZTogbm90aGluZyxcbiAgICAgICAgb25Ub3VjaE1vdmVDYXB0dXJlOiBub3RoaW5nLFxuICAgIH0pLCBjYWxsYmFja3MgPSBfYVswXSwgc2V0Q2FsbGJhY2tzID0gX2FbMV07XG4gICAgdmFyIGZvcndhcmRQcm9wcyA9IHByb3BzLmZvcndhcmRQcm9wcywgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCByZW1vdmVTY3JvbGxCYXIgPSBwcm9wcy5yZW1vdmVTY3JvbGxCYXIsIGVuYWJsZWQgPSBwcm9wcy5lbmFibGVkLCBzaGFyZHMgPSBwcm9wcy5zaGFyZHMsIHNpZGVDYXIgPSBwcm9wcy5zaWRlQ2FyLCBub0lzb2xhdGlvbiA9IHByb3BzLm5vSXNvbGF0aW9uLCBpbmVydCA9IHByb3BzLmluZXJ0LCBhbGxvd1BpbmNoWm9vbSA9IHByb3BzLmFsbG93UGluY2hab29tLCBfYiA9IHByb3BzLmFzLCBDb250YWluZXIgPSBfYiA9PT0gdm9pZCAwID8gJ2RpdicgOiBfYiwgZ2FwTW9kZSA9IHByb3BzLmdhcE1vZGUsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImZvcndhcmRQcm9wc1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwicmVtb3ZlU2Nyb2xsQmFyXCIsIFwiZW5hYmxlZFwiLCBcInNoYXJkc1wiLCBcInNpZGVDYXJcIiwgXCJub0lzb2xhdGlvblwiLCBcImluZXJ0XCIsIFwiYWxsb3dQaW5jaFpvb21cIiwgXCJhc1wiLCBcImdhcE1vZGVcIl0pO1xuICAgIHZhciBTaWRlQ2FyID0gc2lkZUNhcjtcbiAgICB2YXIgY29udGFpbmVyUmVmID0gdXNlTWVyZ2VSZWZzKFtyZWYsIHBhcmVudFJlZl0pO1xuICAgIHZhciBjb250YWluZXJQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0KSwgY2FsbGJhY2tzKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIGVuYWJsZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwgeyBzaWRlQ2FyOiBlZmZlY3RDYXIsIHJlbW92ZVNjcm9sbEJhcjogcmVtb3ZlU2Nyb2xsQmFyLCBzaGFyZHM6IHNoYXJkcywgbm9Jc29sYXRpb246IG5vSXNvbGF0aW9uLCBpbmVydDogaW5lcnQsIHNldENhbGxiYWNrczogc2V0Q2FsbGJhY2tzLCBhbGxvd1BpbmNoWm9vbTogISFhbGxvd1BpbmNoWm9vbSwgbG9ja1JlZjogcmVmLCBnYXBNb2RlOiBnYXBNb2RlIH0pKSxcbiAgICAgICAgZm9yd2FyZFByb3BzID8gKFJlYWN0LmNsb25lRWxlbWVudChSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSwgX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbnRhaW5lclByb3BzKSwgeyByZWY6IGNvbnRhaW5lclJlZiB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGFpbmVyLCBfX2Fzc2lnbih7fSwgY29udGFpbmVyUHJvcHMsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWUsIHJlZjogY29udGFpbmVyUmVmIH0pLCBjaGlsZHJlbikpKSk7XG59KTtcblJlbW92ZVNjcm9sbC5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICByZW1vdmVTY3JvbGxCYXI6IHRydWUsXG4gICAgaW5lcnQ6IGZhbHNlLFxufTtcblJlbW92ZVNjcm9sbC5jbGFzc05hbWVzID0ge1xuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoQ2xhc3NOYW1lLFxuICAgIHplcm9SaWdodDogemVyb1JpZ2h0Q2xhc3NOYW1lLFxufTtcbmV4cG9ydCB7IFJlbW92ZVNjcm9sbCB9O1xuIiwgImV4cG9ydCB2YXIgemVyb1JpZ2h0Q2xhc3NOYW1lID0gJ3JpZ2h0LXNjcm9sbC1iYXItcG9zaXRpb24nO1xuZXhwb3J0IHZhciBmdWxsV2lkdGhDbGFzc05hbWUgPSAnd2lkdGgtYmVmb3JlLXNjcm9sbC1iYXInO1xuZXhwb3J0IHZhciBub1Njcm9sbGJhcnNDbGFzc05hbWUgPSAnd2l0aC1zY3JvbGwtYmFycy1oaWRkZW4nO1xuLyoqXG4gKiBOYW1lIG9mIGEgQ1NTIHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIGFtb3VudCBvZiBcImhpZGRlblwiIHNjcm9sbGJhclxuICogISBtaWdodCBiZSB1bmRlZmluZWQgISB1c2Ugd2lsbCBmYWxsYmFjayFcbiAqL1xuZXhwb3J0IHZhciByZW1vdmVkQmFyU2l6ZVZhcmlhYmxlID0gJy0tcmVtb3ZlZC1ib2R5LXNjcm9sbC1iYXItc2l6ZSc7XG4iLCAiLyoqXG4gKiBBc3NpZ25zIGEgdmFsdWUgZm9yIGEgZ2l2ZW4gcmVmLCBubyBtYXR0ZXIgb2YgdGhlIHJlZiBmb3JtYXRcbiAqIEBwYXJhbSB7UmVmT2JqZWN0fSByZWYgLSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIHJlZiBvYmplY3RcbiAqIEBwYXJhbSB2YWx1ZSAtIGEgbmV3IHZhbHVlXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L3VzZS1jYWxsYmFjay1yZWYjYXNzaWducmVmXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmVmT2JqZWN0ID0gdXNlUmVmKCk7XG4gKiBjb25zdCByZWZGbiA9IChyZWYpID0+IHsuLi4ufVxuICpcbiAqIGFzc2lnblJlZihyZWZPYmplY3QsIFwicmVmVmFsdWVcIik7XG4gKiBhc3NpZ25SZWYocmVmRm4sIFwicmVmVmFsdWVcIik7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25SZWYocmVmLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlZih2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJlZikge1xuICAgICAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVmO1xufVxuIiwgImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBjcmVhdGVzIGEgTXV0YWJsZVJlZiB3aXRoIHJlZiBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBpbml0aWFsIHJlZiB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBhIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHZhbHVlIGNoYW5nZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmVmID0gdXNlQ2FsbGJhY2tSZWYoMCwgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4gY29uc29sZS5sb2cob2xkVmFsdWUsICctPicsIG5ld1ZhbHVlKTtcbiAqIHJlZi5jdXJyZW50ID0gMTtcbiAqIC8vIHByaW50cyAwIC0+IDFcbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VyZWZcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI3VzZWNhbGxiYWNrcmVmLS0tdG8tcmVwbGFjZS1yZWFjdHVzZXJlZlxuICogQHJldHVybnMge011dGFibGVSZWZPYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDYWxsYmFja1JlZihpbml0aWFsVmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlZiA9IHVzZVN0YXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgICAgIC8vIHZhbHVlXG4gICAgICAgIHZhbHVlOiBpbml0aWFsVmFsdWUsXG4gICAgICAgIC8vIGxhc3QgY2FsbGJhY2tcbiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICAvLyBcIm1lbW9pemVkXCIgcHVibGljIGludGVyZmFjZVxuICAgICAgICBmYWNhZGU6IHtcbiAgICAgICAgICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWYudmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IGN1cnJlbnQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdCA9IHJlZi52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5jYWxsYmFjayh2YWx1ZSwgbGFzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9KTsgfSlbMF07XG4gICAgLy8gdXBkYXRlIGNhbGxiYWNrXG4gICAgcmVmLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgcmV0dXJuIHJlZi5mYWNhZGU7XG59XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgYXNzaWduUmVmIH0gZnJvbSAnLi9hc3NpZ25SZWYnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2tSZWYgfSBmcm9tICcuL3VzZVJlZic7XG52YXIgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0O1xudmFyIGN1cnJlbnRWYWx1ZXMgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBNZXJnZXMgdHdvIG9yIG1vcmUgcmVmcyB0b2dldGhlciBwcm92aWRpbmcgYSBzaW5nbGUgaW50ZXJmYWNlIHRvIHNldCB0aGVpciB2YWx1ZVxuICogQHBhcmFtIHtSZWZPYmplY3R8UmVmfSByZWZzXG4gKiBAcmV0dXJucyB7TXV0YWJsZVJlZk9iamVjdH0gLSBhIG5ldyByZWYsIHdoaWNoIHRyYW5zbGF0ZXMgYWxsIGNoYW5nZXMgdG8ge3JlZnN9XG4gKlxuICogQHNlZSB7QGxpbmsgbWVyZ2VSZWZzfSBhIHZlcnNpb24gd2l0aG91dCBidWl0LWluIG1lbW9pemF0aW9uXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvdXNlLWNhbGxiYWNrLXJlZiN1c2VtZXJnZXJlZnNcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBDb21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XG4gKiAgIGNvbnN0IG93blJlZiA9IHVzZVJlZigpO1xuICogICBjb25zdCBkb21SZWYgPSB1c2VNZXJnZVJlZnMoW3JlZiwgb3duUmVmXSk7IC8vIFx1RDgzRFx1REM0OCBtZXJnZSB0b2dldGhlclxuICogICByZXR1cm4gPGRpdiByZWY9e2RvbVJlZn0+Li4uPC9kaXY+XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNZXJnZVJlZnMocmVmcywgZGVmYXVsdFZhbHVlKSB7XG4gICAgdmFyIGNhbGxiYWNrUmVmID0gdXNlQ2FsbGJhY2tSZWYoZGVmYXVsdFZhbHVlIHx8IG51bGwsIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICByZXR1cm4gcmVmcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHsgcmV0dXJuIGFzc2lnblJlZihyZWYsIG5ld1ZhbHVlKTsgfSk7XG4gICAgfSk7XG4gICAgLy8gaGFuZGxlIHJlZnMgY2hhbmdlcyAtIGFkZGVkIG9yIHJlbW92ZWRcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gY3VycmVudFZhbHVlcy5nZXQoY2FsbGJhY2tSZWYpO1xuICAgICAgICBpZiAob2xkVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBwcmV2UmVmc18xID0gbmV3IFNldChvbGRWYWx1ZSk7XG4gICAgICAgICAgICB2YXIgbmV4dFJlZnNfMSA9IG5ldyBTZXQocmVmcyk7XG4gICAgICAgICAgICB2YXIgY3VycmVudF8xID0gY2FsbGJhY2tSZWYuY3VycmVudDtcbiAgICAgICAgICAgIHByZXZSZWZzXzEuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0UmVmc18xLmhhcyhyZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblJlZihyZWYsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbmV4dFJlZnNfMS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZSZWZzXzEuaGFzKHJlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduUmVmKHJlZiwgY3VycmVudF8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50VmFsdWVzLnNldChjYWxsYmFja1JlZiwgcmVmcyk7XG4gICAgfSwgW3JlZnNdKTtcbiAgICByZXR1cm4gY2FsbGJhY2tSZWY7XG59XG4iLCAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gIH1cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgIHRbcF0gPSBzW3BdO1xuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgIH1cbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xuICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cbiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XG4gIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xuICB2YXIgXywgZG9uZSA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XG4gICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xuICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XG4gICAgICB9XG4gIH1cbiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xuICBkb25lID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XG4gIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xuICB9XG4gIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xuICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbnZhciBvd25LZXlzID0gZnVuY3Rpb24obykge1xuICBvd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICB2YXIgYXIgPSBbXTtcbiAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgIHJldHVybiBhcjtcbiAgfTtcbiAgcmV0dXJuIG93bktleXMobyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IG93bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XG4gIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcbiAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XG4gIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZShlbnYsIHZhbHVlLCBhc3luYykge1xuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWQuXCIpO1xuICAgIHZhciBkaXNwb3NlLCBpbm5lcjtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7XG4gICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcbiAgICAgIGlmIChhc3luYykgaW5uZXIgPSBkaXNwb3NlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XG4gICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7IHRyeSB7IGlubmVyLmNhbGwodGhpcyk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpOyB9IH07XG4gICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcbiAgfVxuICBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52KSB7XG4gIGZ1bmN0aW9uIGZhaWwoZSkge1xuICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcbiAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xuICB9XG4gIHZhciByLCBzID0gMDtcbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICB3aGlsZSAociA9IGVudi5zdGFjay5wb3AoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFyLmFzeW5jICYmIHMgPT09IDEpIHJldHVybiBzID0gMCwgZW52LnN0YWNrLnB1c2gociksIFByb21pc2UucmVzb2x2ZSgpLnRoZW4obmV4dCk7XG4gICAgICAgIGlmIChyLmRpc3Bvc2UpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gci5kaXNwb3NlLmNhbGwoci52YWx1ZSk7XG4gICAgICAgICAgaWYgKHIuYXN5bmMpIHJldHVybiBzIHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHMgfD0gMTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGZhaWwoZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzID09PSAxKSByZXR1cm4gZW52Lmhhc0Vycm9yID8gUHJvbWlzZS5yZWplY3QoZW52LmVycm9yKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGlmIChlbnYuaGFzRXJyb3IpIHRocm93IGVudi5lcnJvcjtcbiAgfVxuICByZXR1cm4gbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24ocGF0aCwgcHJlc2VydmVKc3gpIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiICYmIC9eXFwuXFwuP1xcLy8udGVzdChwYXRoKSkge1xuICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFwuKHRzeCkkfCgoPzpcXC5kKT8pKCg/OlxcLlteLi9dKz8pPylcXC4oW2NtXT8pdHMkL2ksIGZ1bmN0aW9uIChtLCB0c3gsIGQsIGV4dCwgY20pIHtcbiAgICAgICAgICByZXR1cm4gdHN4ID8gcHJlc2VydmVKc3ggPyBcIi5qc3hcIiA6IFwiLmpzXCIgOiBkICYmICghZXh0IHx8ICFjbSkgPyBtIDogKGQgKyBleHQgKyBcIi5cIiArIGNtLnRvTG93ZXJDYXNlKCkgKyBcImpzXCIpO1xuICAgICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19leHRlbmRzLFxuICBfX2Fzc2lnbixcbiAgX19yZXN0LFxuICBfX2RlY29yYXRlLFxuICBfX3BhcmFtLFxuICBfX2VzRGVjb3JhdGUsXG4gIF9fcnVuSW5pdGlhbGl6ZXJzLFxuICBfX3Byb3BLZXksXG4gIF9fc2V0RnVuY3Rpb25OYW1lLFxuICBfX21ldGFkYXRhLFxuICBfX2F3YWl0ZXIsXG4gIF9fZ2VuZXJhdG9yLFxuICBfX2NyZWF0ZUJpbmRpbmcsXG4gIF9fZXhwb3J0U3RhcixcbiAgX192YWx1ZXMsXG4gIF9fcmVhZCxcbiAgX19zcHJlYWQsXG4gIF9fc3ByZWFkQXJyYXlzLFxuICBfX3NwcmVhZEFycmF5LFxuICBfX2F3YWl0LFxuICBfX2FzeW5jR2VuZXJhdG9yLFxuICBfX2FzeW5jRGVsZWdhdG9yLFxuICBfX2FzeW5jVmFsdWVzLFxuICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcbiAgX19pbXBvcnRTdGFyLFxuICBfX2ltcG9ydERlZmF1bHQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRJbixcbiAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXG4gIF9fZGlzcG9zZVJlc291cmNlcyxcbiAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24sXG59O1xuIiwgImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSBcInRzbGliXCI7XG5mdW5jdGlvbiBJdG9JKGEpIHtcbiAgICByZXR1cm4gYTtcbn1cbmZ1bmN0aW9uIGlubmVyQ3JlYXRlTWVkaXVtKGRlZmF1bHRzLCBtaWRkbGV3YXJlKSB7XG4gICAgaWYgKG1pZGRsZXdhcmUgPT09IHZvaWQgMCkgeyBtaWRkbGV3YXJlID0gSXRvSTsgfVxuICAgIHZhciBidWZmZXIgPSBbXTtcbiAgICB2YXIgYXNzaWduZWQgPSBmYWxzZTtcbiAgICB2YXIgbWVkaXVtID0ge1xuICAgICAgICByZWFkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoYXNzaWduZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZGVjYXI6IGNvdWxkIG5vdCBgcmVhZGAgZnJvbSBhbiBgYXNzaWduZWRgIG1lZGl1bS4gYHJlYWRgIGNvdWxkIGJlIHVzZWQgb25seSB3aXRoIGB1c2VNZWRpdW1gLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyW2J1ZmZlci5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgICAgfSxcbiAgICAgICAgdXNlTWVkaXVtOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSBtaWRkbGV3YXJlKGRhdGEsIGFzc2lnbmVkKTtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXIuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICE9PSBpdGVtOyB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGFzc2lnblN5bmNNZWRpdW06IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgYXNzaWduZWQgPSB0cnVlO1xuICAgICAgICAgICAgd2hpbGUgKGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2JzID0gYnVmZmVyO1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IFtdO1xuICAgICAgICAgICAgICAgIGNicy5mb3JFYWNoKGNiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlciA9IHtcbiAgICAgICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoeCkgeyByZXR1cm4gY2IoeCk7IH0sXG4gICAgICAgICAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiAoKSB7IHJldHVybiBidWZmZXI7IH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBhc3NpZ25NZWRpdW06IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgYXNzaWduZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIHBlbmRpbmdRdWV1ZSA9IFtdO1xuICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2JzID0gYnVmZmVyO1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IFtdO1xuICAgICAgICAgICAgICAgIGNicy5mb3JFYWNoKGNiKTtcbiAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUgPSBidWZmZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZXhlY3V0ZVF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBjYnMgPSBwZW5kaW5nUXVldWU7XG4gICAgICAgICAgICAgICAgcGVuZGluZ1F1ZXVlID0gW107XG4gICAgICAgICAgICAgICAgY2JzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBjeWNsZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZXhlY3V0ZVF1ZXVlKTsgfTtcbiAgICAgICAgICAgIGN5Y2xlKCk7XG4gICAgICAgICAgICBidWZmZXIgPSB7XG4gICAgICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1F1ZXVlLnB1c2goeCk7XG4gICAgICAgICAgICAgICAgICAgIGN5Y2xlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1F1ZXVlID0gcGVuZGluZ1F1ZXVlLmZpbHRlcihmaWx0ZXIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIG1lZGl1bTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNZWRpdW0oZGVmYXVsdHMsIG1pZGRsZXdhcmUpIHtcbiAgICBpZiAobWlkZGxld2FyZSA9PT0gdm9pZCAwKSB7IG1pZGRsZXdhcmUgPSBJdG9JOyB9XG4gICAgcmV0dXJuIGlubmVyQ3JlYXRlTWVkaXVtKGRlZmF1bHRzLCBtaWRkbGV3YXJlKTtcbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2lkZWNhck1lZGl1bShvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgbWVkaXVtID0gaW5uZXJDcmVhdGVNZWRpdW0obnVsbCk7XG4gICAgbWVkaXVtLm9wdGlvbnMgPSBfX2Fzc2lnbih7IGFzeW5jOiB0cnVlLCBzc3I6IGZhbHNlIH0sIG9wdGlvbnMpO1xuICAgIHJldHVybiBtZWRpdW07XG59XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24sIF9fcmVzdCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIFNpZGVDYXIgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2lkZUNhciA9IF9hLnNpZGVDYXIsIHJlc3QgPSBfX3Jlc3QoX2EsIFtcInNpZGVDYXJcIl0pO1xuICAgIGlmICghc2lkZUNhcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZGVjYXI6IHBsZWFzZSBwcm92aWRlIGBzaWRlQ2FyYCBwcm9wZXJ0eSB0byBpbXBvcnQgdGhlIHJpZ2h0IGNhcicpO1xuICAgIH1cbiAgICB2YXIgVGFyZ2V0ID0gc2lkZUNhci5yZWFkKCk7XG4gICAgaWYgKCFUYXJnZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlY2FyIG1lZGl1bSBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFyZ2V0LCBfX2Fzc2lnbih7fSwgcmVzdCkpO1xufTtcblNpZGVDYXIuaXNTaWRlQ2FyRXhwb3J0ID0gdHJ1ZTtcbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRTaWRlY2FyKG1lZGl1bSwgZXhwb3J0ZWQpIHtcbiAgICBtZWRpdW0udXNlTWVkaXVtKGV4cG9ydGVkKTtcbiAgICByZXR1cm4gU2lkZUNhcjtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWRlY2FyTWVkaXVtIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuZXhwb3J0IHZhciBlZmZlY3RDYXIgPSBjcmVhdGVTaWRlY2FyTWVkaXVtKCk7XG4iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBub2RlLCBib29sLCBzdHJpbmcsIGFueSwgYXJyYXlPZiwgb25lT2ZUeXBlLCBvYmplY3QsIGZ1bmMgfSBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICdmb2N1cy1sb2NrL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB1c2VNZXJnZVJlZnMgfSBmcm9tICd1c2UtY2FsbGJhY2stcmVmJztcbmltcG9ydCB7IGhpZGRlbkd1YXJkIH0gZnJvbSAnLi9Gb2N1c0d1YXJkJztcbmltcG9ydCB7IG1lZGl1bUZvY3VzLCBtZWRpdW1CbHVyLCBtZWRpdW1TaWRlY2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xuaW1wb3J0IHsgZm9jdXNTY29wZSB9IGZyb20gJy4vc2NvcGUnO1xudmFyIGVtcHR5QXJyYXkgPSBbXTtcbnZhciBGb2N1c0xvY2sgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb2N1c0xvY2tVSShwcm9wcywgcGFyZW50UmVmKSB7XG4gIHZhciBfZXh0ZW5kczI7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSgpLFxuICAgIHJlYWxPYnNlcnZlZCA9IF9SZWFjdCR1c2VTdGF0ZVswXSxcbiAgICBzZXRPYnNlcnZlZCA9IF9SZWFjdCR1c2VTdGF0ZVsxXTtcbiAgdmFyIG9ic2VydmVkID0gUmVhY3QudXNlUmVmKCk7XG4gIHZhciBpc0FjdGl2ZSA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIHZhciBvcmlnaW5hbEZvY3VzZWRFbGVtZW50ID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlMiA9IFJlYWN0LnVzZVN0YXRlKHt9KSxcbiAgICB1cGRhdGUgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBfcHJvcHMkZGlzYWJsZWQgPSBwcm9wcy5kaXNhYmxlZCxcbiAgICBkaXNhYmxlZCA9IF9wcm9wcyRkaXNhYmxlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcHJvcHMkZGlzYWJsZWQsXG4gICAgX3Byb3BzJG5vRm9jdXNHdWFyZHMgPSBwcm9wcy5ub0ZvY3VzR3VhcmRzLFxuICAgIG5vRm9jdXNHdWFyZHMgPSBfcHJvcHMkbm9Gb2N1c0d1YXJkcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcHJvcHMkbm9Gb2N1c0d1YXJkcyxcbiAgICBfcHJvcHMkcGVyc2lzdGVudEZvY3UgPSBwcm9wcy5wZXJzaXN0ZW50Rm9jdXMsXG4gICAgcGVyc2lzdGVudEZvY3VzID0gX3Byb3BzJHBlcnNpc3RlbnRGb2N1ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wcm9wcyRwZXJzaXN0ZW50Rm9jdSxcbiAgICBfcHJvcHMkY3Jvc3NGcmFtZSA9IHByb3BzLmNyb3NzRnJhbWUsXG4gICAgY3Jvc3NGcmFtZSA9IF9wcm9wcyRjcm9zc0ZyYW1lID09PSB2b2lkIDAgPyB0cnVlIDogX3Byb3BzJGNyb3NzRnJhbWUsXG4gICAgX3Byb3BzJGF1dG9Gb2N1cyA9IHByb3BzLmF1dG9Gb2N1cyxcbiAgICBhdXRvRm9jdXMgPSBfcHJvcHMkYXV0b0ZvY3VzID09PSB2b2lkIDAgPyB0cnVlIDogX3Byb3BzJGF1dG9Gb2N1cyxcbiAgICBhbGxvd1RleHRTZWxlY3Rpb24gPSBwcm9wcy5hbGxvd1RleHRTZWxlY3Rpb24sXG4gICAgZ3JvdXAgPSBwcm9wcy5ncm91cCxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgd2hpdGVMaXN0ID0gcHJvcHMud2hpdGVMaXN0LFxuICAgIGhhc1Bvc2l0aXZlSW5kaWNlcyA9IHByb3BzLmhhc1Bvc2l0aXZlSW5kaWNlcyxcbiAgICBfcHJvcHMkc2hhcmRzID0gcHJvcHMuc2hhcmRzLFxuICAgIHNoYXJkcyA9IF9wcm9wcyRzaGFyZHMgPT09IHZvaWQgMCA/IGVtcHR5QXJyYXkgOiBfcHJvcHMkc2hhcmRzLFxuICAgIF9wcm9wcyRhcyA9IHByb3BzLmFzLFxuICAgIENvbnRhaW5lciA9IF9wcm9wcyRhcyA9PT0gdm9pZCAwID8gJ2RpdicgOiBfcHJvcHMkYXMsXG4gICAgX3Byb3BzJGxvY2tQcm9wcyA9IHByb3BzLmxvY2tQcm9wcyxcbiAgICBjb250YWluZXJQcm9wcyA9IF9wcm9wcyRsb2NrUHJvcHMgPT09IHZvaWQgMCA/IHt9IDogX3Byb3BzJGxvY2tQcm9wcyxcbiAgICBTaWRlQ2FyID0gcHJvcHMuc2lkZUNhcixcbiAgICBfcHJvcHMkcmV0dXJuRm9jdXMgPSBwcm9wcy5yZXR1cm5Gb2N1cyxcbiAgICBzaG91bGRSZXR1cm5Gb2N1cyA9IF9wcm9wcyRyZXR1cm5Gb2N1cyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcHJvcHMkcmV0dXJuRm9jdXMsXG4gICAgZm9jdXNPcHRpb25zID0gcHJvcHMuZm9jdXNPcHRpb25zLFxuICAgIG9uQWN0aXZhdGlvbkNhbGxiYWNrID0gcHJvcHMub25BY3RpdmF0aW9uLFxuICAgIG9uRGVhY3RpdmF0aW9uQ2FsbGJhY2sgPSBwcm9wcy5vbkRlYWN0aXZhdGlvbjtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTMgPSBSZWFjdC51c2VTdGF0ZSh7fSksXG4gICAgaWQgPSBfUmVhY3QkdXNlU3RhdGUzWzBdO1xuICB2YXIgb25BY3RpdmF0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgY2FwdHVyZUZvY3VzUmVzdG9yZSA9IF9yZWYuY2FwdHVyZUZvY3VzUmVzdG9yZTtcbiAgICBpZiAoIW9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudCkge1xuICAgICAgdmFyIF9kb2N1bWVudDtcbiAgICAgIHZhciBhY3RpdmVFbGVtZW50ID0gKF9kb2N1bWVudCA9IGRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICBvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQgPSBhY3RpdmVFbGVtZW50O1xuICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50ID0gY2FwdHVyZUZvY3VzUmVzdG9yZShhY3RpdmVFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9ic2VydmVkLmN1cnJlbnQgJiYgb25BY3RpdmF0aW9uQ2FsbGJhY2spIHtcbiAgICAgIG9uQWN0aXZhdGlvbkNhbGxiYWNrKG9ic2VydmVkLmN1cnJlbnQpO1xuICAgIH1cbiAgICBpc0FjdGl2ZS5jdXJyZW50ID0gdHJ1ZTtcbiAgICB1cGRhdGUoKTtcbiAgfSwgW29uQWN0aXZhdGlvbkNhbGxiYWNrXSk7XG4gIHZhciBvbkRlYWN0aXZhdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBpc0FjdGl2ZS5jdXJyZW50ID0gZmFsc2U7XG4gICAgaWYgKG9uRGVhY3RpdmF0aW9uQ2FsbGJhY2spIHtcbiAgICAgIG9uRGVhY3RpdmF0aW9uQ2FsbGJhY2sob2JzZXJ2ZWQuY3VycmVudCk7XG4gICAgfVxuICAgIHVwZGF0ZSgpO1xuICB9LCBbb25EZWFjdGl2YXRpb25DYWxsYmFja10pO1xuICB2YXIgcmV0dXJuRm9jdXMgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoYWxsb3dEZWZlcikge1xuICAgIHZhciBmb2N1c1Jlc3RvcmUgPSBvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQ7XG4gICAgaWYgKGZvY3VzUmVzdG9yZSkge1xuICAgICAgdmFyIHJldHVybkZvY3VzVG8gPSAodHlwZW9mIGZvY3VzUmVzdG9yZSA9PT0gJ2Z1bmN0aW9uJyA/IGZvY3VzUmVzdG9yZSgpIDogZm9jdXNSZXN0b3JlKSB8fCBkb2N1bWVudC5ib2R5O1xuICAgICAgdmFyIGhvd1RvUmV0dXJuRm9jdXMgPSB0eXBlb2Ygc2hvdWxkUmV0dXJuRm9jdXMgPT09ICdmdW5jdGlvbicgPyBzaG91bGRSZXR1cm5Gb2N1cyhyZXR1cm5Gb2N1c1RvKSA6IHNob3VsZFJldHVybkZvY3VzO1xuICAgICAgaWYgKGhvd1RvUmV0dXJuRm9jdXMpIHtcbiAgICAgICAgdmFyIHJldHVybkZvY3VzT3B0aW9ucyA9IHR5cGVvZiBob3dUb1JldHVybkZvY3VzID09PSAnb2JqZWN0JyA/IGhvd1RvUmV0dXJuRm9jdXMgOiB1bmRlZmluZWQ7XG4gICAgICAgIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudCA9IG51bGw7XG4gICAgICAgIGlmIChhbGxvd0RlZmVyKSB7XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuRm9jdXNUby5mb2N1cyhyZXR1cm5Gb2N1c09wdGlvbnMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybkZvY3VzVG8uZm9jdXMocmV0dXJuRm9jdXNPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3Nob3VsZFJldHVybkZvY3VzXSk7XG4gIHZhciBvbkZvY3VzID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGlzQWN0aXZlLmN1cnJlbnQpIHtcbiAgICAgIG1lZGl1bUZvY3VzLnVzZU1lZGl1bShldmVudCk7XG4gICAgfVxuICB9LCBbXSk7XG4gIHZhciBvbkJsdXIgPSBtZWRpdW1CbHVyLnVzZU1lZGl1bTtcbiAgdmFyIHNldE9ic2VydmVOb2RlID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld09ic2VydmVkKSB7XG4gICAgaWYgKG9ic2VydmVkLmN1cnJlbnQgIT09IG5ld09ic2VydmVkKSB7XG4gICAgICBvYnNlcnZlZC5jdXJyZW50ID0gbmV3T2JzZXJ2ZWQ7XG4gICAgICBzZXRPYnNlcnZlZChuZXdPYnNlcnZlZCk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBhbGxvd1RleHRTZWxlY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1JlYWN0LUZvY3VzLUxvY2s6IGFsbG93VGV4dFNlbGVjdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBlbmFibGVkIGJ5IGRlZmF1bHQnKTtcbiAgICB9XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghb2JzZXJ2ZWQuY3VycmVudCAmJiB0eXBlb2YgQ29udGFpbmVyICE9PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGb2N1c0xvY2s6IGNvdWxkIG5vdCBvYnRhaW4gcmVmIHRvIGludGVybmFsIG5vZGUnKTtcbiAgICAgIH1cbiAgICB9LCBbXSk7XG4gIH1cbiAgdmFyIGxvY2tQcm9wcyA9IF9leHRlbmRzKChfZXh0ZW5kczIgPSB7fSwgX2V4dGVuZHMyW2NvbnN0YW50cy5GT0NVU19ESVNBQkxFRF0gPSBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBfZXh0ZW5kczJbY29uc3RhbnRzLkZPQ1VTX0dST1VQXSA9IGdyb3VwLCBfZXh0ZW5kczIpLCBjb250YWluZXJQcm9wcyk7XG4gIHZhciBoYXNMZWFkaW5nR3VhcmRzID0gbm9Gb2N1c0d1YXJkcyAhPT0gdHJ1ZTtcbiAgdmFyIGhhc1RhaWxpbmdHdWFyZHMgPSBoYXNMZWFkaW5nR3VhcmRzICYmIG5vRm9jdXNHdWFyZHMgIT09ICd0YWlsJztcbiAgdmFyIG1lcmdlZFJlZiA9IHVzZU1lcmdlUmVmcyhbcGFyZW50UmVmLCBzZXRPYnNlcnZlTm9kZV0pO1xuICB2YXIgZm9jdXNTY29wZVZhbHVlID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9ic2VydmVkOiBvYnNlcnZlZCxcbiAgICAgIHNoYXJkczogc2hhcmRzLFxuICAgICAgZW5hYmxlZDogIWRpc2FibGVkLFxuICAgICAgYWN0aXZlOiBpc0FjdGl2ZS5jdXJyZW50XG4gICAgfTtcbiAgfSwgW2Rpc2FibGVkLCBpc0FjdGl2ZS5jdXJyZW50LCBzaGFyZHMsIHJlYWxPYnNlcnZlZF0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIGhhc0xlYWRpbmdHdWFyZHMgJiYgW1xuICAvKiNfX1BVUkVfXyovXG4gIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJndWFyZC1maXJzdFwiLFxuICAgIFwiZGF0YS1mb2N1cy1ndWFyZFwiOiB0cnVlLFxuICAgIHRhYkluZGV4OiBkaXNhYmxlZCA/IC0xIDogMCxcbiAgICBzdHlsZTogaGlkZGVuR3VhcmRcbiAgfSksIGhhc1Bvc2l0aXZlSW5kaWNlcyA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwiZ3VhcmQtbmVhcmVzdFwiLFxuICAgIFwiZGF0YS1mb2N1cy1ndWFyZFwiOiB0cnVlLFxuICAgIHRhYkluZGV4OiBkaXNhYmxlZCA/IC0xIDogMSxcbiAgICBzdHlsZTogaGlkZGVuR3VhcmRcbiAgfSkgOiBudWxsXSwgIWRpc2FibGVkICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNpZGVDYXIsIHtcbiAgICBpZDogaWQsXG4gICAgc2lkZUNhcjogbWVkaXVtU2lkZWNhcixcbiAgICBvYnNlcnZlZDogcmVhbE9ic2VydmVkLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBwZXJzaXN0ZW50Rm9jdXM6IHBlcnNpc3RlbnRGb2N1cyxcbiAgICBjcm9zc0ZyYW1lOiBjcm9zc0ZyYW1lLFxuICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgIHdoaXRlTGlzdDogd2hpdGVMaXN0LFxuICAgIHNoYXJkczogc2hhcmRzLFxuICAgIG9uQWN0aXZhdGlvbjogb25BY3RpdmF0aW9uLFxuICAgIG9uRGVhY3RpdmF0aW9uOiBvbkRlYWN0aXZhdGlvbixcbiAgICByZXR1cm5Gb2N1czogcmV0dXJuRm9jdXMsXG4gICAgZm9jdXNPcHRpb25zOiBmb2N1c09wdGlvbnMsXG4gICAgbm9Gb2N1c0d1YXJkczogbm9Gb2N1c0d1YXJkc1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGFpbmVyLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBtZXJnZWRSZWZcbiAgfSwgbG9ja1Byb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25Gb2N1czogb25Gb2N1c1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoZm9jdXNTY29wZS5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBmb2N1c1Njb3BlVmFsdWVcbiAgfSwgY2hpbGRyZW4pKSwgaGFzVGFpbGluZ0d1YXJkcyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiAwLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSk7XG59KTtcbkZvY3VzTG9jay5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIGNoaWxkcmVuOiBub2RlLFxuICBkaXNhYmxlZDogYm9vbCxcbiAgcmV0dXJuRm9jdXM6IG9uZU9mVHlwZShbYm9vbCwgb2JqZWN0LCBmdW5jXSksXG4gIGZvY3VzT3B0aW9uczogb2JqZWN0LFxuICBub0ZvY3VzR3VhcmRzOiBib29sLFxuICBoYXNQb3NpdGl2ZUluZGljZXM6IGJvb2wsXG4gIGFsbG93VGV4dFNlbGVjdGlvbjogYm9vbCxcbiAgYXV0b0ZvY3VzOiBib29sLFxuICBwZXJzaXN0ZW50Rm9jdXM6IGJvb2wsXG4gIGNyb3NzRnJhbWU6IGJvb2wsXG4gIGdyb3VwOiBzdHJpbmcsXG4gIGNsYXNzTmFtZTogc3RyaW5nLFxuICB3aGl0ZUxpc3Q6IGZ1bmMsXG4gIHNoYXJkczogYXJyYXlPZihhbnkpLFxuICBhczogb25lT2ZUeXBlKFtzdHJpbmcsIGZ1bmMsIG9iamVjdF0pLFxuICBsb2NrUHJvcHM6IG9iamVjdCxcbiAgb25BY3RpdmF0aW9uOiBmdW5jLFxuICBvbkRlYWN0aXZhdGlvbjogZnVuYyxcbiAgc2lkZUNhcjogYW55LmlzUmVxdWlyZWRcbn0gOiB7fTtcbmV4cG9ydCBkZWZhdWx0IEZvY3VzTG9jazsiLCAiLyoqXG4gKiBkZWZpbmVzIGEgZm9jdXMgZ3JvdXBcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19HUk9VUCA9ICdkYXRhLWZvY3VzLWxvY2snO1xuLyoqXG4gKiBkaXNhYmxlcyBlbGVtZW50IGRpc2NvdmVyeSBpbnNpZGUgYSBncm91cCBtYXJrZWQgYnkga2V5XG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfRElTQUJMRUQgPSAnZGF0YS1mb2N1cy1sb2NrLWRpc2FibGVkJztcbi8qKlxuICogYWxsb3dzIHVuY29udHJvbGxlZCBmb2N1cyB3aXRoaW4gdGhlIG1hcmtlZCBhcmVhLCBlZmZlY3RpdmVseSBkaXNhYmxpbmcgZm9jdXMgbG9jayBmb3IgaXQncyBjb250ZW50XG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfQUxMT1cgPSAnZGF0YS1uby1mb2N1cy1sb2NrJztcbi8qKlxuICogaW5zdHJ1Y3RzIGF1dG9mb2N1cyBlbmdpbmUgdG8gcGljayBkZWZhdWx0IGF1dG9mb2N1cyBpbnNpZGUgYSBnaXZlbiBub2RlXG4gKiBjYW4gYmUgc2V0IG9uIHRoZSBlbGVtZW50IG9yIGNvbnRhaW5lclxuICovXG5leHBvcnQgdmFyIEZPQ1VTX0FVVE8gPSAnZGF0YS1hdXRvZm9jdXMtaW5zaWRlJztcbi8qKlxuICogaW5zdHJ1Y3RzIGF1dG9mb2N1cyB0byBpZ25vcmUgZWxlbWVudHMgd2l0aGluIGEgZ2l2ZW4gbm9kZVxuICogY2FuIGJlIHNldCBvbiB0aGUgZWxlbWVudCBvciBjb250YWluZXJcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19OT19BVVRPRk9DVVMgPSAnZGF0YS1uby1hdXRvZm9jdXMnO1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5leHBvcnQgdmFyIGhpZGRlbkd1YXJkID0ge1xuICB3aWR0aDogJzFweCcsXG4gIGhlaWdodDogJzBweCcsXG4gIHBhZGRpbmc6IDAsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIHRvcDogJzFweCcsXG4gIGxlZnQ6ICcxcHgnXG59O1xudmFyIEluRm9jdXNHdWFyZCA9IGZ1bmN0aW9uIEluRm9jdXNHdWFyZChfcmVmKSB7XG4gIHZhciBfcmVmJGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjaGlsZHJlbiA9IF9yZWYkY2hpbGRyZW4gPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJGNoaWxkcmVuO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwiZ3VhcmQtZmlyc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICBcImRhdGEtZm9jdXMtYXV0by1ndWFyZFwiOiB0cnVlLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSwgY2hpbGRyZW4sIGNoaWxkcmVuICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwiZ3VhcmQtbGFzdFwiLFxuICAgIFwiZGF0YS1mb2N1cy1ndWFyZFwiOiB0cnVlLFxuICAgIFwiZGF0YS1mb2N1cy1hdXRvLWd1YXJkXCI6IHRydWUsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pKTtcbn07XG5JbkZvY3VzR3VhcmQucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn0gOiB7fTtcbmV4cG9ydCBkZWZhdWx0IEluRm9jdXNHdWFyZDsiLCAiaW1wb3J0IHsgY3JlYXRlTWVkaXVtLCBjcmVhdGVTaWRlY2FyTWVkaXVtIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuZXhwb3J0IHZhciBtZWRpdW1Gb2N1cyA9IGNyZWF0ZU1lZGl1bSh7fSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIGN1cnJlbnRUYXJnZXQgPSBfcmVmLmN1cnJlbnRUYXJnZXQ7XG4gIHJldHVybiB7XG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgY3VycmVudFRhcmdldDogY3VycmVudFRhcmdldFxuICB9O1xufSk7XG5leHBvcnQgdmFyIG1lZGl1bUJsdXIgPSBjcmVhdGVNZWRpdW0oKTtcbmV4cG9ydCB2YXIgbWVkaXVtRWZmZWN0ID0gY3JlYXRlTWVkaXVtKCk7XG5leHBvcnQgdmFyIG1lZGl1bVNpZGVjYXIgPSBjcmVhdGVTaWRlY2FyTWVkaXVtKHtcbiAgYXN5bmM6IHRydWUsXG4gIHNzcjogdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xufSk7IiwgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIGZvY3VzU2NvcGUgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpOyIsICJleHBvcnQgZnVuY3Rpb24gZGVmZXJBY3Rpb24oYWN0aW9uKSB7XG4gIHNldFRpbWVvdXQoYWN0aW9uLCAxKTtcbn1cbmV4cG9ydCB2YXIgaW5saW5lUHJvcCA9IGZ1bmN0aW9uIGlubGluZVByb3AobmFtZSwgdmFsdWUpIHtcbiAgdmFyIG9iaiA9IHt9O1xuICBvYmpbbmFtZV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iajtcbn07XG5leHBvcnQgdmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiBleHRyYWN0UmVmKHJlZikge1xuICByZXR1cm4gcmVmICYmICdjdXJyZW50JyBpbiByZWYgPyByZWYuY3VycmVudCA6IHJlZjtcbn07IiwgImltcG9ydCBGb2N1c0xvY2tVSSBmcm9tICcuL0xvY2snO1xuaW1wb3J0IEF1dG9Gb2N1c0luc2lkZSBmcm9tICcuL0F1dG9Gb2N1c0luc2lkZSc7XG5pbXBvcnQgTW92ZUZvY3VzSW5zaWRlLCB7IHVzZUZvY3VzSW5zaWRlIH0gZnJvbSAnLi9Nb3ZlRm9jdXNJbnNpZGUnO1xuaW1wb3J0IEZyZWVGb2N1c0luc2lkZSBmcm9tICcuL0ZyZWVGb2N1c0luc2lkZSc7XG5pbXBvcnQgSW5Gb2N1c0d1YXJkIGZyb20gJy4vRm9jdXNHdWFyZCc7XG5pbXBvcnQgeyB1c2VGb2N1c0NvbnRyb2xsZXIsIHVzZUZvY3VzU2NvcGUgfSBmcm9tICcuL3VzZS1mb2N1cy1zY29wZSc7XG5pbXBvcnQgeyB1c2VGb2N1c1N0YXRlIH0gZnJvbSAnLi91c2UtZm9jdXMtc3RhdGUnO1xuZXhwb3J0IHsgQXV0b0ZvY3VzSW5zaWRlLCBNb3ZlRm9jdXNJbnNpZGUsIEZyZWVGb2N1c0luc2lkZSwgSW5Gb2N1c0d1YXJkLCBGb2N1c0xvY2tVSSwgdXNlRm9jdXNJbnNpZGUsIHVzZUZvY3VzQ29udHJvbGxlciwgdXNlRm9jdXNTY29wZSwgdXNlRm9jdXNTdGF0ZSB9O1xuZXhwb3J0IGRlZmF1bHQgRm9jdXNMb2NrVUk7IiwgImltcG9ydCB7IGNyZWF0ZVNpZGVjYXJNZWRpdW0gfSBmcm9tICd1c2Utc2lkZWNhcic7XG5leHBvcnQgdmFyIGVmZmVjdENhciA9IGNyZWF0ZVNpZGVjYXJNZWRpdW0oKTtcbmV4cG9ydCB2YXIgZm9jdXNIaWRkZW5NYXJrZXIgPSAnZGF0YS1mb2N1cy1vbi1oaWRkZW4nO1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgd2l0aFNpZGVFZmZlY3QgZnJvbSAncmVhY3QtY2xpZW50c2lkZS1lZmZlY3QnO1xuaW1wb3J0IHsgbW92ZUZvY3VzSW5zaWRlLCBmb2N1c0luc2lkZSwgZm9jdXNJc0hpZGRlbiwgZXhwYW5kRm9jdXNhYmxlTm9kZXMsIGdldEZvY3VzYWJsZU5vZGVzLCBmb2N1c05leHRFbGVtZW50LCBmb2N1c1ByZXZFbGVtZW50LCBmb2N1c0ZpcnN0RWxlbWVudCwgZm9jdXNMYXN0RWxlbWVudCwgY2FwdHVyZUZvY3VzUmVzdG9yZSB9IGZyb20gJ2ZvY3VzLWxvY2snO1xuaW1wb3J0IHsgZGVmZXJBY3Rpb24sIGV4dHJhY3RSZWYgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgbWVkaXVtRm9jdXMsIG1lZGl1bUJsdXIsIG1lZGl1bUVmZmVjdCB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBmb2N1c09uQm9keSA9IGZ1bmN0aW9uIGZvY3VzT25Cb2R5KCkge1xuICByZXR1cm4gZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keTtcbn07XG52YXIgaXNGcmVlRm9jdXMgPSBmdW5jdGlvbiBpc0ZyZWVGb2N1cygpIHtcbiAgcmV0dXJuIGZvY3VzT25Cb2R5KCkgfHwgZm9jdXNJc0hpZGRlbigpO1xufTtcbnZhciBsYXN0QWN0aXZlVHJhcCA9IG51bGw7XG52YXIgbGFzdEFjdGl2ZUZvY3VzID0gbnVsbDtcbnZhciB0cnlSZXN0b3JlRm9jdXMgPSBmdW5jdGlvbiB0cnlSZXN0b3JlRm9jdXMoKSB7XG4gIHJldHVybiBudWxsO1xufTtcbnZhciBsYXN0UG9ydGFsZWRFbGVtZW50ID0gbnVsbDtcbnZhciBmb2N1c1dhc091dHNpZGVXaW5kb3cgPSBmYWxzZTtcbnZhciB3aW5kb3dGb2N1c2VkID0gZmFsc2U7XG52YXIgZGVmYXVsdFdoaXRlbGlzdCA9IGZ1bmN0aW9uIGRlZmF1bHRXaGl0ZWxpc3QoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBmb2N1c1doaXRlbGlzdGVkID0gZnVuY3Rpb24gZm9jdXNXaGl0ZWxpc3RlZChhY3RpdmVFbGVtZW50KSB7XG4gIHJldHVybiAobGFzdEFjdGl2ZVRyYXAud2hpdGVMaXN0IHx8IGRlZmF1bHRXaGl0ZWxpc3QpKGFjdGl2ZUVsZW1lbnQpO1xufTtcbnZhciByZWNvcmRQb3J0YWwgPSBmdW5jdGlvbiByZWNvcmRQb3J0YWwob2JzZXJ2ZXJOb2RlLCBwb3J0YWxlZEVsZW1lbnQpIHtcbiAgbGFzdFBvcnRhbGVkRWxlbWVudCA9IHtcbiAgICBvYnNlcnZlck5vZGU6IG9ic2VydmVyTm9kZSxcbiAgICBwb3J0YWxlZEVsZW1lbnQ6IHBvcnRhbGVkRWxlbWVudFxuICB9O1xufTtcbnZhciBmb2N1c0lzUG9ydGFsZWRQYWlyID0gZnVuY3Rpb24gZm9jdXNJc1BvcnRhbGVkUGFpcihlbGVtZW50KSB7XG4gIHJldHVybiBsYXN0UG9ydGFsZWRFbGVtZW50ICYmIGxhc3RQb3J0YWxlZEVsZW1lbnQucG9ydGFsZWRFbGVtZW50ID09PSBlbGVtZW50O1xufTtcbmZ1bmN0aW9uIGF1dG9HdWFyZChzdGFydEluZGV4LCBlbmQsIHN0ZXAsIGFsbE5vZGVzKSB7XG4gIHZhciBsYXN0R3VhcmQgPSBudWxsO1xuICB2YXIgaSA9IHN0YXJ0SW5kZXg7XG4gIGRvIHtcbiAgICB2YXIgaXRlbSA9IGFsbE5vZGVzW2ldO1xuICAgIGlmIChpdGVtLmd1YXJkKSB7XG4gICAgICBpZiAoaXRlbS5ub2RlLmRhdGFzZXQuZm9jdXNBdXRvR3VhcmQpIHtcbiAgICAgICAgbGFzdEd1YXJkID0gaXRlbTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGl0ZW0ubG9ja0l0ZW0pIHtcbiAgICAgIGlmIChpICE9PSBzdGFydEluZGV4KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RHdWFyZCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSB3aGlsZSAoKGkgKz0gc3RlcCkgIT09IGVuZCk7XG4gIGlmIChsYXN0R3VhcmQpIHtcbiAgICBsYXN0R3VhcmQubm9kZS50YWJJbmRleCA9IDA7XG4gIH1cbn1cbnZhciBmb2N1c1dhc091dHNpZGUgPSBmdW5jdGlvbiBmb2N1c1dhc091dHNpZGUoY3Jvc3NGcmFtZU9wdGlvbikge1xuICBpZiAoY3Jvc3NGcmFtZU9wdGlvbikge1xuICAgIHJldHVybiBCb29sZWFuKGZvY3VzV2FzT3V0c2lkZVdpbmRvdyk7XG4gIH1cbiAgcmV0dXJuIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9PT0gJ21lYW53aGlsZSc7XG59O1xudmFyIGNoZWNrSW5Ib3N0ID0gZnVuY3Rpb24gY2hlY2tJbkhvc3QoY2hlY2ssIGVsLCBib3VuZGFyeSkge1xuICByZXR1cm4gZWwgJiYgKGVsLmhvc3QgPT09IGNoZWNrICYmICghZWwuYWN0aXZlRWxlbWVudCB8fCBib3VuZGFyeS5jb250YWlucyhlbC5hY3RpdmVFbGVtZW50KSkgfHwgZWwucGFyZW50Tm9kZSAmJiBjaGVja0luSG9zdChjaGVjaywgZWwucGFyZW50Tm9kZSwgYm91bmRhcnkpKTtcbn07XG52YXIgd2l0aGluSG9zdCA9IGZ1bmN0aW9uIHdpdGhpbkhvc3QoYWN0aXZlRWxlbWVudCwgd29ya2luZ0FyZWEpIHtcbiAgcmV0dXJuIHdvcmtpbmdBcmVhLnNvbWUoZnVuY3Rpb24gKGFyZWEpIHtcbiAgICByZXR1cm4gY2hlY2tJbkhvc3QoYWN0aXZlRWxlbWVudCwgYXJlYSwgYXJlYSk7XG4gIH0pO1xufTtcbnZhciBnZXROb2RlRm9jdXNhYmxlcyA9IGZ1bmN0aW9uIGdldE5vZGVGb2N1c2FibGVzKG5vZGVzKSB7XG4gIHJldHVybiBnZXRGb2N1c2FibGVOb2Rlcyhub2RlcywgbmV3IE1hcCgpKTtcbn07XG52YXIgaXNOb3RGb2N1c2FibGUgPSBmdW5jdGlvbiBpc05vdEZvY3VzYWJsZShub2RlKSB7XG4gIHJldHVybiAhZ2V0Tm9kZUZvY3VzYWJsZXMoW25vZGUucGFyZW50Tm9kZV0pLnNvbWUoZnVuY3Rpb24gKGVsKSB7XG4gICAgcmV0dXJuIGVsLm5vZGUgPT09IG5vZGU7XG4gIH0pO1xufTtcbnZhciBhY3RpdmF0ZVRyYXAgPSBmdW5jdGlvbiBhY3RpdmF0ZVRyYXAoKSB7XG4gIHZhciByZXN1bHQgPSBmYWxzZTtcbiAgaWYgKGxhc3RBY3RpdmVUcmFwKSB7XG4gICAgdmFyIF9sYXN0QWN0aXZlVHJhcCA9IGxhc3RBY3RpdmVUcmFwLFxuICAgICAgb2JzZXJ2ZWQgPSBfbGFzdEFjdGl2ZVRyYXAub2JzZXJ2ZWQsXG4gICAgICBwZXJzaXN0ZW50Rm9jdXMgPSBfbGFzdEFjdGl2ZVRyYXAucGVyc2lzdGVudEZvY3VzLFxuICAgICAgYXV0b0ZvY3VzID0gX2xhc3RBY3RpdmVUcmFwLmF1dG9Gb2N1cyxcbiAgICAgIHNoYXJkcyA9IF9sYXN0QWN0aXZlVHJhcC5zaGFyZHMsXG4gICAgICBjcm9zc0ZyYW1lID0gX2xhc3RBY3RpdmVUcmFwLmNyb3NzRnJhbWUsXG4gICAgICBmb2N1c09wdGlvbnMgPSBfbGFzdEFjdGl2ZVRyYXAuZm9jdXNPcHRpb25zLFxuICAgICAgbm9Gb2N1c0d1YXJkcyA9IF9sYXN0QWN0aXZlVHJhcC5ub0ZvY3VzR3VhcmRzO1xuICAgIHZhciB3b3JraW5nTm9kZSA9IG9ic2VydmVkIHx8IGxhc3RQb3J0YWxlZEVsZW1lbnQgJiYgbGFzdFBvcnRhbGVkRWxlbWVudC5wb3J0YWxlZEVsZW1lbnQ7XG4gICAgaWYgKGZvY3VzT25Cb2R5KCkgJiYgbGFzdEFjdGl2ZUZvY3VzKSB7XG4gICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnMobGFzdEFjdGl2ZUZvY3VzKSB8fCBpc05vdEZvY3VzYWJsZShsYXN0QWN0aXZlRm9jdXMpKSB7XG4gICAgICAgIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG4gICAgICAgIHZhciBuZXdUYXJnZXQgPSB0cnlSZXN0b3JlRm9jdXMoKTtcbiAgICAgICAgaWYgKG5ld1RhcmdldCkge1xuICAgICAgICAgIG5ld1RhcmdldC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAod29ya2luZ05vZGUpIHtcbiAgICAgIHZhciB3b3JraW5nQXJlYSA9IFt3b3JraW5nTm9kZV0uY29uY2F0KHNoYXJkcy5tYXAoZXh0cmFjdFJlZikuZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgIHZhciBzaG91bGRGb3JjZVJlc3RvcmVGb2N1cyA9IGZ1bmN0aW9uIHNob3VsZEZvcmNlUmVzdG9yZUZvY3VzKCkge1xuICAgICAgICBpZiAoIWZvY3VzV2FzT3V0c2lkZShjcm9zc0ZyYW1lKSB8fCAhbm9Gb2N1c0d1YXJkcyB8fCAhbGFzdEFjdGl2ZUZvY3VzIHx8IHdpbmRvd0ZvY3VzZWQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5vZGVzID0gZ2V0Tm9kZUZvY3VzYWJsZXMod29ya2luZ0FyZWEpO1xuICAgICAgICB2YXIgbGFzdEluZGV4ID0gbm9kZXMuZmluZEluZGV4KGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSBfcmVmLm5vZGU7XG4gICAgICAgICAgcmV0dXJuIG5vZGUgPT09IGxhc3RBY3RpdmVGb2N1cztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBsYXN0SW5kZXggPT09IDAgfHwgbGFzdEluZGV4ID09PSBub2Rlcy5sZW5ndGggLSAxO1xuICAgICAgfTtcbiAgICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCBmb2N1c1doaXRlbGlzdGVkKGFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIGlmIChwZXJzaXN0ZW50Rm9jdXMgfHwgc2hvdWxkRm9yY2VSZXN0b3JlRm9jdXMoKSB8fCAhaXNGcmVlRm9jdXMoKSB8fCAhbGFzdEFjdGl2ZUZvY3VzICYmIGF1dG9Gb2N1cykge1xuICAgICAgICAgIGlmICh3b3JraW5nTm9kZSAmJiAhKGZvY3VzSW5zaWRlKHdvcmtpbmdBcmVhKSB8fCBhY3RpdmVFbGVtZW50ICYmIHdpdGhpbkhvc3QoYWN0aXZlRWxlbWVudCwgd29ya2luZ0FyZWEpIHx8IGZvY3VzSXNQb3J0YWxlZFBhaXIoYWN0aXZlRWxlbWVudCwgd29ya2luZ05vZGUpKSkge1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50ICYmICFsYXN0QWN0aXZlRm9jdXMgJiYgYWN0aXZlRWxlbWVudCAmJiAhYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50LmJsdXIpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXN1bHQgPSBtb3ZlRm9jdXNJbnNpZGUod29ya2luZ0FyZWEsIGxhc3RBY3RpdmVGb2N1cywge1xuICAgICAgICAgICAgICAgIGZvY3VzT3B0aW9uczogZm9jdXNPcHRpb25zXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBsYXN0UG9ydGFsZWRFbGVtZW50ID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9IGZhbHNlO1xuICAgICAgICAgIGxhc3RBY3RpdmVGb2N1cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgdHJ5UmVzdG9yZUZvY3VzID0gY2FwdHVyZUZvY3VzUmVzdG9yZShsYXN0QWN0aXZlRm9jdXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZG9jdW1lbnQgJiYgYWN0aXZlRWxlbWVudCAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mb2N1cy1hdXRvLWd1YXJkXScpKSB7XG4gICAgICAgIHZhciBuZXdBY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgdmFyIGFsbE5vZGVzID0gZXhwYW5kRm9jdXNhYmxlTm9kZXMod29ya2luZ0FyZWEpO1xuICAgICAgICB2YXIgZm9jdXNlZEluZGV4ID0gYWxsTm9kZXMubWFwKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICAgIHZhciBub2RlID0gX3JlZjIubm9kZTtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSkuaW5kZXhPZihuZXdBY3RpdmVFbGVtZW50KTtcbiAgICAgICAgaWYgKGZvY3VzZWRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgYWxsTm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICAgICAgdmFyIGd1YXJkID0gX3JlZjMuZ3VhcmQsXG4gICAgICAgICAgICAgIG5vZGUgPSBfcmVmMy5ub2RlO1xuICAgICAgICAgICAgcmV0dXJuIGd1YXJkICYmIG5vZGUuZGF0YXNldC5mb2N1c0F1dG9HdWFyZDtcbiAgICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmNCkge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBfcmVmNC5ub2RlO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUucmVtb3ZlQXR0cmlidXRlKCd0YWJJbmRleCcpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGF1dG9HdWFyZChmb2N1c2VkSW5kZXgsIGFsbE5vZGVzLmxlbmd0aCwgKzEsIGFsbE5vZGVzKTtcbiAgICAgICAgICBhdXRvR3VhcmQoZm9jdXNlZEluZGV4LCAtMSwgLTEsIGFsbE5vZGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBvblRyYXAgPSBmdW5jdGlvbiBvblRyYXAoZXZlbnQpIHtcbiAgaWYgKGFjdGl2YXRlVHJhcCgpICYmIGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufTtcbnZhciBvbkJsdXIgPSBmdW5jdGlvbiBvbkJsdXIoKSB7XG4gIHJldHVybiBkZWZlckFjdGlvbihhY3RpdmF0ZVRyYXApO1xufTtcbnZhciBvbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cyhldmVudCkge1xuICB2YXIgc291cmNlID0gZXZlbnQudGFyZ2V0O1xuICB2YXIgY3VycmVudE5vZGUgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICBpZiAoIWN1cnJlbnROb2RlLmNvbnRhaW5zKHNvdXJjZSkpIHtcbiAgICByZWNvcmRQb3J0YWwoY3VycmVudE5vZGUsIHNvdXJjZSk7XG4gIH1cbn07XG52YXIgRm9jdXNXYXRjaGVyID0gZnVuY3Rpb24gRm9jdXNXYXRjaGVyKCkge1xuICByZXR1cm4gbnVsbDtcbn07XG52YXIgRm9jdXNUcmFwID0gZnVuY3Rpb24gRm9jdXNUcmFwKF9yZWY1KSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWY1LmNoaWxkcmVuO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIG9uQmx1cjogb25CbHVyLFxuICAgIG9uRm9jdXM6IG9uRm9jdXNcbiAgfSwgY2hpbGRyZW4pO1xufTtcbkZvY3VzVHJhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG59IDoge307XG52YXIgb25XaW5kb3dGb2N1cyA9IGZ1bmN0aW9uIG9uV2luZG93Rm9jdXMoKSB7XG4gIHdpbmRvd0ZvY3VzZWQgPSB0cnVlO1xufTtcbnZhciBvbldpbmRvd0JsdXIgPSBmdW5jdGlvbiBvbldpbmRvd0JsdXIoKSB7XG4gIHdpbmRvd0ZvY3VzZWQgPSBmYWxzZTtcbiAgZm9jdXNXYXNPdXRzaWRlV2luZG93ID0gJ2p1c3QnO1xuICBkZWZlckFjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgZm9jdXNXYXNPdXRzaWRlV2luZG93ID0gJ21lYW53aGlsZSc7XG4gIH0pO1xufTtcbnZhciBhdHRhY2hIYW5kbGVyID0gZnVuY3Rpb24gYXR0YWNoSGFuZGxlcigpIHtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIG9uVHJhcCk7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0Jywgb25CbHVyKTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgb25XaW5kb3dGb2N1cyk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgb25XaW5kb3dCbHVyKTtcbn07XG52YXIgZGV0YWNoSGFuZGxlciA9IGZ1bmN0aW9uIGRldGFjaEhhbmRsZXIoKSB7XG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBvblRyYXApO1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIG9uQmx1cik7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIG9uV2luZG93Rm9jdXMpO1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uV2luZG93Qmx1cik7XG59O1xuZnVuY3Rpb24gcmVkdWNlUHJvcHNUb1N0YXRlKHByb3BzTGlzdCkge1xuICByZXR1cm4gcHJvcHNMaXN0LmZpbHRlcihmdW5jdGlvbiAoX3JlZjYpIHtcbiAgICB2YXIgZGlzYWJsZWQgPSBfcmVmNi5kaXNhYmxlZDtcbiAgICByZXR1cm4gIWRpc2FibGVkO1xuICB9KTtcbn1cbnZhciBmb2N1c0xvY2tBUEkgPSB7XG4gIG1vdmVGb2N1c0luc2lkZTogbW92ZUZvY3VzSW5zaWRlLFxuICBmb2N1c0luc2lkZTogZm9jdXNJbnNpZGUsXG4gIGZvY3VzTmV4dEVsZW1lbnQ6IGZvY3VzTmV4dEVsZW1lbnQsXG4gIGZvY3VzUHJldkVsZW1lbnQ6IGZvY3VzUHJldkVsZW1lbnQsXG4gIGZvY3VzRmlyc3RFbGVtZW50OiBmb2N1c0ZpcnN0RWxlbWVudCxcbiAgZm9jdXNMYXN0RWxlbWVudDogZm9jdXNMYXN0RWxlbWVudCxcbiAgY2FwdHVyZUZvY3VzUmVzdG9yZTogY2FwdHVyZUZvY3VzUmVzdG9yZVxufTtcbmZ1bmN0aW9uIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQodHJhcHMpIHtcbiAgdmFyIHRyYXAgPSB0cmFwcy5zbGljZSgtMSlbMF07XG4gIGlmICh0cmFwICYmICFsYXN0QWN0aXZlVHJhcCkge1xuICAgIGF0dGFjaEhhbmRsZXIoKTtcbiAgfVxuICB2YXIgbGFzdFRyYXAgPSBsYXN0QWN0aXZlVHJhcDtcbiAgdmFyIHNhbWVUcmFwID0gbGFzdFRyYXAgJiYgdHJhcCAmJiB0cmFwLmlkID09PSBsYXN0VHJhcC5pZDtcbiAgbGFzdEFjdGl2ZVRyYXAgPSB0cmFwO1xuICBpZiAobGFzdFRyYXAgJiYgIXNhbWVUcmFwKSB7XG4gICAgbGFzdFRyYXAub25EZWFjdGl2YXRpb24oKTtcbiAgICBpZiAoIXRyYXBzLmZpbHRlcihmdW5jdGlvbiAoX3JlZjcpIHtcbiAgICAgIHZhciBpZCA9IF9yZWY3LmlkO1xuICAgICAgcmV0dXJuIGlkID09PSBsYXN0VHJhcC5pZDtcbiAgICB9KS5sZW5ndGgpIHtcbiAgICAgIGxhc3RUcmFwLnJldHVybkZvY3VzKCF0cmFwKTtcbiAgICB9XG4gIH1cbiAgaWYgKHRyYXApIHtcbiAgICBsYXN0QWN0aXZlRm9jdXMgPSBudWxsO1xuICAgIGlmICghc2FtZVRyYXAgfHwgbGFzdFRyYXAub2JzZXJ2ZWQgIT09IHRyYXAub2JzZXJ2ZWQpIHtcbiAgICAgIHRyYXAub25BY3RpdmF0aW9uKGZvY3VzTG9ja0FQSSk7XG4gICAgfVxuICAgIGFjdGl2YXRlVHJhcCh0cnVlKTtcbiAgICBkZWZlckFjdGlvbihhY3RpdmF0ZVRyYXApO1xuICB9IGVsc2Uge1xuICAgIGRldGFjaEhhbmRsZXIoKTtcbiAgICBsYXN0QWN0aXZlRm9jdXMgPSBudWxsO1xuICB9XG59XG5tZWRpdW1Gb2N1cy5hc3NpZ25TeW5jTWVkaXVtKG9uRm9jdXMpO1xubWVkaXVtQmx1ci5hc3NpZ25NZWRpdW0ob25CbHVyKTtcbm1lZGl1bUVmZmVjdC5hc3NpZ25NZWRpdW0oZnVuY3Rpb24gKGNiKSB7XG4gIHJldHVybiBjYihmb2N1c0xvY2tBUEkpO1xufSk7XG5leHBvcnQgZGVmYXVsdCB3aXRoU2lkZUVmZmVjdChyZWR1Y2VQcm9wc1RvU3RhdGUsIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQpKEZvY3VzV2F0Y2hlcik7IiwgImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0O1xuICB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5leHBvcnQgeyBfc2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHQsIG8pIHtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG8ucHJvdG90eXBlKSwgdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSB0LCBzZXRQcm90b3R5cGVPZih0LCBvKTtcbn1cbmV4cG9ydCB7IF9pbmhlcml0c0xvb3NlIGFzIGRlZmF1bHQgfTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UnO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eSc7XG5pbXBvcnQgUmVhY3QsIHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gd2l0aFNpZGVFZmZlY3QocmVkdWNlUHJvcHNUb1N0YXRlLCBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAodHlwZW9mIHJlZHVjZVByb3BzVG9TdGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCByZWR1Y2VQcm9wc1RvU3RhdGUgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKFdyYXBwZWRDb21wb25lbnQpIHtcbiAgICByZXR1cm4gV3JhcHBlZENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBXcmFwcGVkQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gd3JhcChXcmFwcGVkQ29tcG9uZW50KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgaWYgKHR5cGVvZiBXcmFwcGVkQ29tcG9uZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgV3JhcHBlZENvbXBvbmVudCB0byBiZSBhIFJlYWN0IGNvbXBvbmVudC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbW91bnRlZEluc3RhbmNlcyA9IFtdO1xuICAgIHZhciBzdGF0ZTtcblxuICAgIGZ1bmN0aW9uIGVtaXRDaGFuZ2UoKSB7XG4gICAgICBzdGF0ZSA9IHJlZHVjZVByb3BzVG9TdGF0ZShtb3VudGVkSW5zdGFuY2VzLm1hcChmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnByb3BzO1xuICAgICAgfSkpO1xuICAgICAgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudChzdGF0ZSk7XG4gICAgfVxuXG4gICAgdmFyIFNpZGVFZmZlY3QgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gICAgICBfaW5oZXJpdHNMb29zZShTaWRlRWZmZWN0LCBfUHVyZUNvbXBvbmVudCk7XG5cbiAgICAgIGZ1bmN0aW9uIFNpZGVFZmZlY3QoKSB7XG4gICAgICAgIHJldHVybiBfUHVyZUNvbXBvbmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIFRyeSB0byB1c2UgZGlzcGxheU5hbWUgb2Ygd3JhcHBlZCBjb21wb25lbnRcbiAgICAgIFNpZGVFZmZlY3QucGVlayA9IGZ1bmN0aW9uIHBlZWsoKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBfcHJvdG8gPSBTaWRlRWZmZWN0LnByb3RvdHlwZTtcblxuICAgICAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIG1vdW50ZWRJbnN0YW5jZXMucHVzaCh0aGlzKTtcbiAgICAgICAgZW1pdENoYW5nZSgpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgICAgZW1pdENoYW5nZSgpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIHZhciBpbmRleCA9IG1vdW50ZWRJbnN0YW5jZXMuaW5kZXhPZih0aGlzKTtcbiAgICAgICAgbW91bnRlZEluc3RhbmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICBlbWl0Q2hhbmdlKCk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoV3JhcHBlZENvbXBvbmVudCwgdGhpcy5wcm9wcyk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gU2lkZUVmZmVjdDtcbiAgICB9KFB1cmVDb21wb25lbnQpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KFNpZGVFZmZlY3QsIFwiZGlzcGxheU5hbWVcIiwgXCJTaWRlRWZmZWN0KFwiICsgZ2V0RGlzcGxheU5hbWUoV3JhcHBlZENvbXBvbmVudCkgKyBcIilcIik7XG5cbiAgICByZXR1cm4gU2lkZUVmZmVjdDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFNpZGVFZmZlY3Q7XG4iLCAiLypcbklFMTEgc3VwcG9ydFxuICovXG5leHBvcnQgdmFyIHRvQXJyYXkgPSBmdW5jdGlvbiAoYSkge1xuICAgIHZhciByZXQgPSBBcnJheShhLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHJldFtpXSA9IGFbaV07XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59O1xuZXhwb3J0IHZhciBhc0FycmF5ID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIChBcnJheS5pc0FycmF5KGEpID8gYSA6IFthXSk7IH07XG5leHBvcnQgdmFyIGdldEZpcnN0ID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIChBcnJheS5pc0FycmF5KGEpID8gYVswXSA6IGEpOyB9O1xuIiwgImltcG9ydCB7IEZPQ1VTX05PX0FVVE9GT0NVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG52YXIgaXNFbGVtZW50SGlkZGVuID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAvLyB3ZSBjYW4gbWVhc3VyZSBvbmx5IFwiZWxlbWVudHNcIlxuICAgIC8vIGNvbnNpZGVyIG90aGVycyBhcyBcInZpc2libGVcIlxuICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCk7XG4gICAgaWYgKCFjb21wdXRlZFN0eWxlIHx8ICFjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnZGlzcGxheScpID09PSAnbm9uZScgfHwgY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCd2aXNpYmlsaXR5JykgPT09ICdoaWRkZW4nKTtcbn07XG52YXIgZ2V0UGFyZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSBjYW4gYWxzbyBwb2ludCBvbiBTaGFkb3dSb290LiBJbiB0aGlzIGNhc2UgLmhvc3Qgd2lsbCBwb2ludCBvbiB0aGUgbmV4dCBub2RlXG4gICAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZSAmJiBub2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERVxuICAgICAgICA/IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBub2RlLnBhcmVudE5vZGUuaG9zdFxuICAgICAgICA6IG5vZGUucGFyZW50Tm9kZTtcbn07XG52YXIgaXNUb3BOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5vZGUgPT09IGRvY3VtZW50IHx8IChub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSk7XG59O1xudmFyIGlzSW5lcnQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZS5oYXNBdHRyaWJ1dGUoJ2luZXJ0Jyk7IH07XG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Rlc3RpbmctbGlicmFyeS9qZXN0LWRvbS9ibG9iL21haW4vc3JjL3RvLWJlLXZpc2libGUuanNcbiAqL1xudmFyIGlzVmlzaWJsZVVuY2FjaGVkID0gZnVuY3Rpb24gKG5vZGUsIGNoZWNrUGFyZW50KSB7XG4gICAgcmV0dXJuICFub2RlIHx8IGlzVG9wTm9kZShub2RlKSB8fCAoIWlzRWxlbWVudEhpZGRlbihub2RlKSAmJiAhaXNJbmVydChub2RlKSAmJiBjaGVja1BhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKSk7XG59O1xuZXhwb3J0IHZhciBpc1Zpc2libGVDYWNoZWQgPSBmdW5jdGlvbiAodmlzaWJpbGl0eUNhY2hlLCBub2RlKSB7XG4gICAgdmFyIGNhY2hlZCA9IHZpc2liaWxpdHlDYWNoZS5nZXQobm9kZSk7XG4gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBpc1Zpc2libGVVbmNhY2hlZChub2RlLCBpc1Zpc2libGVDYWNoZWQuYmluZCh1bmRlZmluZWQsIHZpc2liaWxpdHlDYWNoZSkpO1xuICAgIHZpc2liaWxpdHlDYWNoZS5zZXQobm9kZSwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBpc0F1dG9Gb2N1c0FsbG93ZWRVbmNhY2hlZCA9IGZ1bmN0aW9uIChub2RlLCBjaGVja1BhcmVudCkge1xuICAgIHJldHVybiBub2RlICYmICFpc1RvcE5vZGUobm9kZSkgPyAoaXNBdXRvRm9jdXNBbGxvd2VkKG5vZGUpID8gY2hlY2tQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSkgOiBmYWxzZSkgOiB0cnVlO1xufTtcbmV4cG9ydCB2YXIgaXNBdXRvRm9jdXNBbGxvd2VkQ2FjaGVkID0gZnVuY3Rpb24gKGNhY2hlLCBub2RlKSB7XG4gICAgdmFyIGNhY2hlZCA9IGNhY2hlLmdldChub2RlKTtcbiAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGlzQXV0b0ZvY3VzQWxsb3dlZFVuY2FjaGVkKG5vZGUsIGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZC5iaW5kKHVuZGVmaW5lZCwgY2FjaGUpKTtcbiAgICBjYWNoZS5zZXQobm9kZSwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydCB2YXIgZ2V0RGF0YXNldCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBub2RlLmRhdGFzZXQ7XG59O1xuZXhwb3J0IHZhciBpc0hUTUxCdXR0b25FbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ0JVVFRPTic7IH07XG5leHBvcnQgdmFyIGlzSFRNTElucHV0RWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdJTlBVVCc7IH07XG5leHBvcnQgdmFyIGlzUmFkaW9FbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpICYmIG5vZGUudHlwZSA9PT0gJ3JhZGlvJztcbn07XG5leHBvcnQgdmFyIG5vdEhpZGRlbklucHV0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gISgoaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpIHx8IGlzSFRNTEJ1dHRvbkVsZW1lbnQobm9kZSkpICYmIChub2RlLnR5cGUgPT09ICdoaWRkZW4nIHx8IG5vZGUuZGlzYWJsZWQpKTtcbn07XG5leHBvcnQgdmFyIGlzQXV0b0ZvY3VzQWxsb3dlZCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIGF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKEZPQ1VTX05PX0FVVE9GT0NVUyk7XG4gICAgcmV0dXJuICFbdHJ1ZSwgJ3RydWUnLCAnJ10uaW5jbHVkZXMoYXR0cmlidXRlKTtcbn07XG5leHBvcnQgdmFyIGlzR3VhcmQgPSBmdW5jdGlvbiAobm9kZSkgeyB2YXIgX2E7IHJldHVybiBCb29sZWFuKG5vZGUgJiYgKChfYSA9IGdldERhdGFzZXQobm9kZSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1c0d1YXJkKSk7IH07XG5leHBvcnQgdmFyIGlzTm90QUd1YXJkID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuICFpc0d1YXJkKG5vZGUpOyB9O1xuZXhwb3J0IHZhciBpc0RlZmluZWQgPSBmdW5jdGlvbiAoeCkgeyByZXR1cm4gQm9vbGVhbih4KTsgfTtcbiIsICJpbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG5leHBvcnQgdmFyIHRhYlNvcnQgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBhVGFiID0gTWF0aC5tYXgoMCwgYS50YWJJbmRleCk7XG4gICAgdmFyIGJUYWIgPSBNYXRoLm1heCgwLCBiLnRhYkluZGV4KTtcbiAgICB2YXIgdGFiRGlmZiA9IGFUYWIgLSBiVGFiO1xuICAgIHZhciBpbmRleERpZmYgPSBhLmluZGV4IC0gYi5pbmRleDtcbiAgICBpZiAodGFiRGlmZikge1xuICAgICAgICBpZiAoIWFUYWIpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYlRhYikge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YWJEaWZmIHx8IGluZGV4RGlmZjtcbn07XG52YXIgZ2V0VGFiSW5kZXggPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmIChub2RlLnRhYkluZGV4IDwgMCkge1xuICAgICAgICAvLyBhbGwgXCJmb2N1c2FibGVcIiBlbGVtZW50cyBhcmUgYWxyZWFkeSBwcmVzZWxlY3RlZFxuICAgICAgICAvLyBidXQgc29tZSBtaWdodCBoYXZlIGltcGxpY2l0IG5lZ2F0aXZlIHRhYkluZGV4XG4gICAgICAgIC8vIHJldHVybiAwIGZvciA8YXVkaW8gd2l0aG91dCB0YWJJbmRleCBhdHRyaWJ1dGUgLSBpdCBpcyBcInRhYmJhYmxlXCJcbiAgICAgICAgaWYgKCFub2RlLmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGUudGFiSW5kZXg7XG59O1xuZXhwb3J0IHZhciBvcmRlckJ5VGFiSW5kZXggPSBmdW5jdGlvbiAobm9kZXMsIGZpbHRlck5lZ2F0aXZlLCBrZWVwR3VhcmRzKSB7XG4gICAgcmV0dXJuIHRvQXJyYXkobm9kZXMpXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKG5vZGUsIGluZGV4KSB7XG4gICAgICAgIHZhciB0YWJJbmRleCA9IGdldFRhYkluZGV4KG5vZGUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIHRhYkluZGV4OiBrZWVwR3VhcmRzICYmIHRhYkluZGV4ID09PSAtMSA/ICgobm9kZS5kYXRhc2V0IHx8IHt9KS5mb2N1c0d1YXJkID8gMCA6IC0xKSA6IHRhYkluZGV4LFxuICAgICAgICB9O1xuICAgIH0pXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuICFmaWx0ZXJOZWdhdGl2ZSB8fCBkYXRhLnRhYkluZGV4ID49IDA7IH0pXG4gICAgICAgIC5zb3J0KHRhYlNvcnQpO1xufTtcbiIsICIvKipcbiAqIGxpc3Qgb2YgdGhlIG9iamVjdCB0byBiZSBjb25zaWRlcmVkIGFzIGZvY3VzYWJsZVxuICovXG5leHBvcnQgdmFyIHRhYmJhYmxlcyA9IFtcbiAgICAnYnV0dG9uOmVuYWJsZWQnLFxuICAgICdzZWxlY3Q6ZW5hYmxlZCcsXG4gICAgJ3RleHRhcmVhOmVuYWJsZWQnLFxuICAgICdpbnB1dDplbmFibGVkJyxcbiAgICAvLyBlbGVtZW50cyB3aXRoIGV4cGxpY2l0IHJvbGVzIHdpbGwgYWxzbyB1c2UgZXhwbGljaXQgdGFiaW5kZXhcbiAgICAvLyAnW3JvbGU9XCJidXR0b25cIl0nLFxuICAgICdhW2hyZWZdJyxcbiAgICAnYXJlYVtocmVmXScsXG4gICAgJ3N1bW1hcnknLFxuICAgICdpZnJhbWUnLFxuICAgICdvYmplY3QnLFxuICAgICdlbWJlZCcsXG4gICAgJ2F1ZGlvW2NvbnRyb2xzXScsXG4gICAgJ3ZpZGVvW2NvbnRyb2xzXScsXG4gICAgJ1t0YWJpbmRleF0nLFxuICAgICdbY29udGVudGVkaXRhYmxlXScsXG4gICAgJ1thdXRvZm9jdXNdJyxcbl07XG4iLCAiaW1wb3J0IHsgRk9DVVNfQVVUTyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG5pbXBvcnQgeyB0YWJiYWJsZXMgfSBmcm9tICcuL3RhYmJhYmxlcyc7XG52YXIgcXVlcnlUYWJiYWJsZXMgPSB0YWJiYWJsZXMuam9pbignLCcpO1xudmFyIHF1ZXJ5R3VhcmRUYWJiYWJsZXMgPSBcIlwiLmNvbmNhdChxdWVyeVRhYmJhYmxlcywgXCIsIFtkYXRhLWZvY3VzLWd1YXJkXVwiKTtcbnZhciBnZXRGb2N1c2FibGVzV2l0aFNoYWRvd0RvbSA9IGZ1bmN0aW9uIChwYXJlbnQsIHdpdGhHdWFyZHMpIHtcbiAgICByZXR1cm4gdG9BcnJheSgocGFyZW50LnNoYWRvd1Jvb3QgfHwgcGFyZW50KS5jaGlsZHJlbikucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KGNoaWxkLm1hdGNoZXMod2l0aEd1YXJkcyA/IHF1ZXJ5R3VhcmRUYWJiYWJsZXMgOiBxdWVyeVRhYmJhYmxlcykgPyBbY2hpbGRdIDogW10sIGdldEZvY3VzYWJsZXNXaXRoU2hhZG93RG9tKGNoaWxkKSk7XG4gICAgfSwgW10pO1xufTtcbnZhciBnZXRGb2N1c2FibGVzV2l0aElGcmFtZSA9IGZ1bmN0aW9uIChwYXJlbnQsIHdpdGhHdWFyZHMpIHtcbiAgICB2YXIgX2E7XG4gICAgLy8gY29udGVudERvY3VtZW50IG9mIGlmcmFtZSB3aWxsIGJlIG51bGwgaWYgY3VycmVudCBvcmlnaW4gY2Fubm90IGFjY2VzcyBpdFxuICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCAmJiAoKF9hID0gcGFyZW50LmNvbnRlbnREb2N1bWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmJvZHkpKSB7XG4gICAgICAgIHJldHVybiBnZXRGb2N1c2FibGVzKFtwYXJlbnQuY29udGVudERvY3VtZW50LmJvZHldLCB3aXRoR3VhcmRzKTtcbiAgICB9XG4gICAgcmV0dXJuIFtwYXJlbnRdO1xufTtcbmV4cG9ydCB2YXIgZ2V0Rm9jdXNhYmxlcyA9IGZ1bmN0aW9uIChwYXJlbnRzLCB3aXRoR3VhcmRzKSB7XG4gICAgcmV0dXJuIHBhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBhcmVudCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBmb2N1c2FibGVXaXRoU2hhZG93RG9tID0gZ2V0Rm9jdXNhYmxlc1dpdGhTaGFkb3dEb20ocGFyZW50LCB3aXRoR3VhcmRzKTtcbiAgICAgICAgdmFyIGZvY3VzYWJsZVdpdGhJZnJhbWVzID0gKF9hID0gW10pLmNvbmNhdC5hcHBseShfYSwgZm9jdXNhYmxlV2l0aFNoYWRvd0RvbS5tYXAoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGdldEZvY3VzYWJsZXNXaXRoSUZyYW1lKG5vZGUsIHdpdGhHdWFyZHMpOyB9KSk7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KFxuICAgICAgICAvLyBhZGQgYWxsIHRhYmJhYmxlcyBpbnNpZGUgYW5kIHdpdGhpbiBzaGFkb3cgRE9NcyBpbiBET00gb3JkZXJcbiAgICAgICAgZm9jdXNhYmxlV2l0aElmcmFtZXMsIFxuICAgICAgICAvLyBhZGQgaWYgbm9kZSBpcyB0YWJiYWJsZSBpdHNlbGZcbiAgICAgICAgcGFyZW50LnBhcmVudE5vZGVcbiAgICAgICAgICAgID8gdG9BcnJheShwYXJlbnQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5VGFiYmFibGVzKSkuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlID09PSBwYXJlbnQ7IH0pXG4gICAgICAgICAgICA6IFtdKTtcbiAgICB9LCBbXSk7XG59O1xuLyoqXG4gKiByZXR1cm4gYSBsaXN0IG9mIGZvY3VzYWJsZSBub2RlcyB3aXRoaW4gYW4gYXJlYSBtYXJrZWQgYXMgXCJhdXRvLWZvY3VzYWJsZVwiXG4gKiBAcGFyYW0gcGFyZW50XG4gKi9cbmV4cG9ydCB2YXIgZ2V0UGFyZW50QXV0b2ZvY3VzYWJsZXMgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgdmFyIHBhcmVudEZvY3VzID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbXCIuY29uY2F0KEZPQ1VTX0FVVE8sIFwiXVwiKSk7XG4gICAgcmV0dXJuIHRvQXJyYXkocGFyZW50Rm9jdXMpXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGdldEZvY3VzYWJsZXMoW25vZGVdKTsgfSlcbiAgICAgICAgLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBub2RlcykgeyByZXR1cm4gYWNjLmNvbmNhdChub2Rlcyk7IH0sIFtdKTtcbn07XG4iLCAiaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuaW1wb3J0IHsgaXNBdXRvRm9jdXNBbGxvd2VkQ2FjaGVkLCBpc1Zpc2libGVDYWNoZWQsIG5vdEhpZGRlbklucHV0IH0gZnJvbSAnLi9pcyc7XG5pbXBvcnQgeyBvcmRlckJ5VGFiSW5kZXggfSBmcm9tICcuL3RhYk9yZGVyJztcbmltcG9ydCB7IGdldEZvY3VzYWJsZXMsIGdldFBhcmVudEF1dG9mb2N1c2FibGVzIH0gZnJvbSAnLi90YWJVdGlscyc7XG4vKipcbiAqIGdpdmVuIGxpc3Qgb2YgZm9jdXNhYmxlIGVsZW1lbnRzIGtlZXBzIHRoZSBvbmVzIHVzZXIgY2FuIGludGVyYWN0IHdpdGhcbiAqIEBwYXJhbSBub2Rlc1xuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZVxuICovXG5leHBvcnQgdmFyIGZpbHRlckZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2RlcywgdmlzaWJpbGl0eUNhY2hlKSB7XG4gICAgcmV0dXJuIHRvQXJyYXkobm9kZXMpXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGlzVmlzaWJsZUNhY2hlZCh2aXNpYmlsaXR5Q2FjaGUsIG5vZGUpOyB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub3RIaWRkZW5JbnB1dChub2RlKTsgfSk7XG59O1xuZXhwb3J0IHZhciBmaWx0ZXJBdXRvRm9jdXNhYmxlID0gZnVuY3Rpb24gKG5vZGVzLCBjYWNoZSkge1xuICAgIGlmIChjYWNoZSA9PT0gdm9pZCAwKSB7IGNhY2hlID0gbmV3IE1hcCgpOyB9XG4gICAgcmV0dXJuIHRvQXJyYXkobm9kZXMpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gaXNBdXRvRm9jdXNBbGxvd2VkQ2FjaGVkKGNhY2hlLCBub2RlKTsgfSk7XG59O1xuLyoqXG4gKiAhX19XQVJOSU5HX18hIExvdyBsZXZlbCBBUEkuXG4gKiBAcmV0dXJucyBhbGwgdGFiYmFibGUgbm9kZXNcbiAqXG4gKiBAc2VlIHtAbGluayBnZXRGb2N1c2FibGVOb2Rlc30gdG8gZ2V0IGFueSBmb2N1c2FibGUgZWxlbWVudFxuICpcbiAqIEBwYXJhbSB0b3BOb2RlcyAtIGFycmF5IG9mIHRvcCBsZXZlbCBIVE1MRWxlbWVudHMgdG8gc2VhcmNoIGluc2lkZVxuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZSAtIGFuIGNhY2hlIHRvIHN0b3JlIGludGVybWVkaWF0ZSBtZWFzdXJlbWVudHMuIEV4cGVjdGVkIHRvIGJlIGEgZnJlc2ggYG5ldyBNYXBgIG9uIGV2ZXJ5IGNhbGxcbiAqL1xuZXhwb3J0IHZhciBnZXRUYWJiYWJsZU5vZGVzID0gZnVuY3Rpb24gKHRvcE5vZGVzLCB2aXNpYmlsaXR5Q2FjaGUsIHdpdGhHdWFyZHMpIHtcbiAgICByZXR1cm4gb3JkZXJCeVRhYkluZGV4KGZpbHRlckZvY3VzYWJsZShnZXRGb2N1c2FibGVzKHRvcE5vZGVzLCB3aXRoR3VhcmRzKSwgdmlzaWJpbGl0eUNhY2hlKSwgdHJ1ZSwgd2l0aEd1YXJkcyk7XG59O1xuLyoqXG4gKiAhX19XQVJOSU5HX18hIExvdyBsZXZlbCBBUEkuXG4gKlxuICogQHJldHVybnMgYW55dGhpbmcgXCJmb2N1c2FibGVcIiwgbm90IG9ubHkgdGFiYmFibGUuIFRoZSBkaWZmZXJlbmNlIGlzIGluIGB0YWJJbmRleD0tMWBcbiAqICh3aXRob3V0IGd1YXJkcywgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgdG8gYmUgZXZlciBmb2N1c2VkKVxuICpcbiAqIEBzZWUge0BsaW5rIGdldFRhYmJhYmxlTm9kZXN9IHRvIGdldCBvbmx5IHRhYmJsZSBub2RlcyBlbGVtZW50XG4gKlxuICogQHBhcmFtIHRvcE5vZGVzIC0gYXJyYXkgb2YgdG9wIGxldmVsIEhUTUxFbGVtZW50cyB0byBzZWFyY2ggaW5zaWRlXG4gKiBAcGFyYW0gdmlzaWJpbGl0eUNhY2hlIC0gYW4gY2FjaGUgdG8gc3RvcmUgaW50ZXJtZWRpYXRlIG1lYXN1cmVtZW50cy4gRXhwZWN0ZWQgdG8gYmUgYSBmcmVzaCBgbmV3IE1hcGAgb24gZXZlcnkgY2FsbFxuICovXG5leHBvcnQgdmFyIGdldEZvY3VzYWJsZU5vZGVzID0gZnVuY3Rpb24gKHRvcE5vZGVzLCB2aXNpYmlsaXR5Q2FjaGUpIHtcbiAgICByZXR1cm4gb3JkZXJCeVRhYkluZGV4KGZpbHRlckZvY3VzYWJsZShnZXRGb2N1c2FibGVzKHRvcE5vZGVzKSwgdmlzaWJpbGl0eUNhY2hlKSwgZmFsc2UpO1xufTtcbi8qKlxuICogcmV0dXJuIGxpc3Qgb2Ygbm9kZXMgd2hpY2ggYXJlIGV4cGVjdGVkIHRvIGJlIGF1dG8tZm9jdXNlZFxuICogQHBhcmFtIHRvcE5vZGVcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGVcbiAqL1xuZXhwb3J0IHZhciBwYXJlbnRBdXRvZm9jdXNhYmxlcyA9IGZ1bmN0aW9uICh0b3BOb2RlLCB2aXNpYmlsaXR5Q2FjaGUpIHtcbiAgICByZXR1cm4gZmlsdGVyRm9jdXNhYmxlKGdldFBhcmVudEF1dG9mb2N1c2FibGVzKHRvcE5vZGUpLCB2aXNpYmlsaXR5Q2FjaGUpO1xufTtcbi8qXG4gKiBEZXRlcm1pbmVzIGlmIGVsZW1lbnQgaXMgY29udGFpbmVkIGluIHNjb3BlLCBpbmNsdWRpbmcgbmVzdGVkIHNoYWRvdyBET01zXG4gKi9cbmV4cG9ydCB2YXIgY29udGFpbnMgPSBmdW5jdGlvbiAoc2NvcGUsIGVsZW1lbnQpIHtcbiAgICBpZiAoc2NvcGUuc2hhZG93Um9vdCkge1xuICAgICAgICByZXR1cm4gY29udGFpbnMoc2NvcGUuc2hhZG93Um9vdCwgZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHNjb3BlKS5jb250YWlucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc2NvcGUpLmNvbnRhaW5zLmNhbGwoc2NvcGUsIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9BcnJheShzY29wZS5jaGlsZHJlbikuc29tZShmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIGlmcmFtZUJvZHkgPSAoX2EgPSBjaGlsZC5jb250ZW50RG9jdW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ib2R5O1xuICAgICAgICAgICAgICAgIGlmIChpZnJhbWVCb2R5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250YWlucyhpZnJhbWVCb2R5LCBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKGNoaWxkLCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxufTtcbiIsICJpbXBvcnQgeyBGT0NVU19ESVNBQkxFRCwgRk9DVVNfR1JPVVAgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgYXNBcnJheSwgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuLyoqXG4gKiBpbiBjYXNlIG9mIG11bHRpcGxlIG5vZGVzIG5lc3RlZCBpbnNpZGUgZWFjaCBvdGhlclxuICoga2VlcHMgb25seSB0b3Agb25lc1xuICogdGhpcyBpcyBPKG5sb2duKVxuICogQHBhcmFtIG5vZGVzXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xudmFyIGZpbHRlck5lc3RlZCA9IGZ1bmN0aW9uIChub2Rlcykge1xuICAgIHZhciBjb250YWluZWQgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGwgPSBub2Rlcy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpICs9IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyBqIDwgbDsgaiArPSAxKSB7XG4gICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBub2Rlc1tpXS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihub2Rlc1tqXSk7XG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG4gICAgICAgICAgICBpZiAoKHBvc2l0aW9uICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lZC5hZGQoaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHBvc2l0aW9uICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOUykgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVkLmFkZChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChfLCBpbmRleCkgeyByZXR1cm4gIWNvbnRhaW5lZC5oYXMoaW5kZXgpOyB9KTtcbn07XG4vKipcbiAqIGZpbmRzIHRvcCBtb3N0IHBhcmVudCBmb3IgYSBub2RlXG4gKiBAcGFyYW0gbm9kZVxuICogQHJldHVybnMgeyp9XG4gKi9cbnZhciBnZXRUb3BQYXJlbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGUgPyBnZXRUb3BQYXJlbnQobm9kZS5wYXJlbnROb2RlKSA6IG5vZGU7XG59O1xuLyoqXG4gKiByZXR1cm5zIGFsbCBcImZvY3VzIGNvbnRhaW5lcnNcIiBpbnNpZGUgYSBnaXZlbiBub2RlXG4gKiBAcGFyYW0gbm9kZSAtIG5vZGUgb3Igbm9kZXMgdG8gbG9vayBpbnNpZGVcbiAqIEByZXR1cm5zIEVsZW1lbnRbXVxuICovXG5leHBvcnQgdmFyIGdldEFsbEFmZmVjdGVkTm9kZXMgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBub2RlcyA9IGFzQXJyYXkobm9kZSk7XG4gICAgcmV0dXJuIG5vZGVzLmZpbHRlcihCb29sZWFuKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgY3VycmVudE5vZGUpIHtcbiAgICAgICAgdmFyIGdyb3VwID0gY3VycmVudE5vZGUuZ2V0QXR0cmlidXRlKEZPQ1VTX0dST1VQKTtcbiAgICAgICAgYWNjLnB1c2guYXBwbHkoYWNjLCAoZ3JvdXBcbiAgICAgICAgICAgID8gZmlsdGVyTmVzdGVkKHRvQXJyYXkoZ2V0VG9wUGFyZW50KGN1cnJlbnROb2RlKS5xdWVyeVNlbGVjdG9yQWxsKFwiW1wiLmNvbmNhdChGT0NVU19HUk9VUCwgXCI9XFxcIlwiKS5jb25jYXQoZ3JvdXAsIFwiXFxcIl06bm90KFtcIikuY29uY2F0KEZPQ1VTX0RJU0FCTEVELCBcIj1cXFwiZGlzYWJsZWRcXFwiXSlcIikpKSlcbiAgICAgICAgICAgIDogW2N1cnJlbnROb2RlXSkpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbn07XG4iLCAiZXhwb3J0IHZhciBzYWZlUHJvYmUgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2IoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuIiwgIi8qKlxuICogcmV0dXJucyBhY3RpdmUgZWxlbWVudCBmcm9tIGRvY3VtZW50IG9yIGZyb20gbmVzdGVkIHNoYWRvd2RvbXNcbiAqL1xuaW1wb3J0IHsgc2FmZVByb2JlIH0gZnJvbSAnLi9zYWZlJztcbi8qKlxuICogcmV0dXJucyBjdXJyZW50IGFjdGl2ZSBlbGVtZW50LiBJZiB0aGUgYWN0aXZlIGVsZW1lbnQgaXMgYSBcImNvbnRhaW5lclwiIGl0c2VsZihzaGFkb3dSb290IG9yIGlmcmFtZSkgcmV0dXJucyBhY3RpdmUgZWxlbWVudCBpbnNpZGUgaXRcbiAqIEBwYXJhbSBbaW5Eb2N1bWVudF1cbiAqL1xuZXhwb3J0IHZhciBnZXRBY3RpdmVFbGVtZW50ID0gZnVuY3Rpb24gKGluRG9jdW1lbnQpIHtcbiAgICBpZiAoaW5Eb2N1bWVudCA9PT0gdm9pZCAwKSB7IGluRG9jdW1lbnQgPSBkb2N1bWVudDsgfVxuICAgIGlmICghaW5Eb2N1bWVudCB8fCAhaW5Eb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gaW5Eb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIHJldHVybiAoYWN0aXZlRWxlbWVudC5zaGFkb3dSb290XG4gICAgICAgID8gZ2V0QWN0aXZlRWxlbWVudChhY3RpdmVFbGVtZW50LnNoYWRvd1Jvb3QpXG4gICAgICAgIDogYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50ICYmIHNhZmVQcm9iZShmdW5jdGlvbiAoKSB7IHJldHVybiBhY3RpdmVFbGVtZW50LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7IH0pXG4gICAgICAgICAgICA/IGdldEFjdGl2ZUVsZW1lbnQoYWN0aXZlRWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50KVxuICAgICAgICAgICAgOiBhY3RpdmVFbGVtZW50KTtcbn07XG4iLCAiaW1wb3J0IHsgY29udGFpbnMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmltcG9ydCB7IGdldEFsbEFmZmVjdGVkTm9kZXMgfSBmcm9tICcuL3V0aWxzL2FsbC1hZmZlY3RlZCc7XG5pbXBvcnQgeyBnZXRGaXJzdCwgdG9BcnJheSB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgZ2V0QWN0aXZlRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvZ2V0QWN0aXZlRWxlbWVudCc7XG52YXIgZm9jdXNJbkZyYW1lID0gZnVuY3Rpb24gKGZyYW1lLCBhY3RpdmVFbGVtZW50KSB7IHJldHVybiBmcmFtZSA9PT0gYWN0aXZlRWxlbWVudDsgfTtcbnZhciBmb2N1c0luc2lkZUlmcmFtZSA9IGZ1bmN0aW9uICh0b3BOb2RlLCBhY3RpdmVFbGVtZW50KSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odG9BcnJheSh0b3BOb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lmcmFtZScpKS5zb21lKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBmb2N1c0luRnJhbWUobm9kZSwgYWN0aXZlRWxlbWVudCk7IH0pKTtcbn07XG4vKipcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlLCBpZiB0aGUgY3VycmVudCBmb2N1cyBpcyBpbnNpZGUgZ2l2ZW4gbm9kZSBvciBub2Rlcy5cbiAqIFN1cHBvcnRzIG5vZGVzIGhpZGRlbiBpbnNpZGUgc2hhZG93RG9tXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNJbnNpZGUgPSBmdW5jdGlvbiAodG9wTm9kZSwgYWN0aXZlRWxlbWVudCkge1xuICAgIC8vIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudCAmJiBnZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQgPT09IHZvaWQgMCkgeyBhY3RpdmVFbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChnZXRGaXJzdCh0b3BOb2RlKS5vd25lckRvY3VtZW50KTsgfVxuICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCAoYWN0aXZlRWxlbWVudC5kYXRhc2V0ICYmIGFjdGl2ZUVsZW1lbnQuZGF0YXNldC5mb2N1c0d1YXJkKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBnZXRBbGxBZmZlY3RlZE5vZGVzKHRvcE5vZGUpLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zKG5vZGUsIGFjdGl2ZUVsZW1lbnQpIHx8IGZvY3VzSW5zaWRlSWZyYW1lKG5vZGUsIGFjdGl2ZUVsZW1lbnQpO1xuICAgIH0pO1xufTtcbiIsICJpbXBvcnQgeyBGT0NVU19BTExPVyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi91dGlscy9ET011dGlscyc7XG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBnZXRBY3RpdmVFbGVtZW50IH0gZnJvbSAnLi91dGlscy9nZXRBY3RpdmVFbGVtZW50Jztcbi8qKlxuICogY2hlY2tzIGlmIGZvY3VzIGlzIGhpZGRlbiBGUk9NIHRoZSBmb2N1cy1sb2NrXG4gKiBpZSBjb250YWluZWQgaW5zaWRlIGEgbm9kZSBmb2N1cy1sb2NrIHNoYWxsIGlnbm9yZVxuICpcbiAqIFRoaXMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGNvdXBsZWQgd2l0aCB7QGxpbmsgRk9DVVNfQUxMT1d9IGNvbnN0YW50XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IGZvY3VzIGlzIGN1cnJlbnRseSBpcyBpbiBcImFsbG93XCIgYXJlYVxuICovXG5leHBvcnQgdmFyIGZvY3VzSXNIaWRkZW4gPSBmdW5jdGlvbiAoaW5Eb2N1bWVudCkge1xuICAgIGlmIChpbkRvY3VtZW50ID09PSB2b2lkIDApIHsgaW5Eb2N1bWVudCA9IGRvY3VtZW50OyB9XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KGluRG9jdW1lbnQpO1xuICAgIGlmICghYWN0aXZlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIHRoaXMgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIEZPQ1VTX0FMTE9XIHdpdGhpbiBzaGFkb3cgZG9tXG4gICAgcmV0dXJuIHRvQXJyYXkoaW5Eb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW1wiLmNvbmNhdChGT0NVU19BTExPVywgXCJdXCIpKSkuc29tZShmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gY29udGFpbnMobm9kZSwgYWN0aXZlRWxlbWVudCk7IH0pO1xufTtcbiIsICJpbXBvcnQgeyBpc1JhZGlvRWxlbWVudCB9IGZyb20gJy4vaXMnO1xudmFyIGZpbmRTZWxlY3RlZFJhZGlvID0gZnVuY3Rpb24gKG5vZGUsIG5vZGVzKSB7XG4gICAgcmV0dXJuIG5vZGVzXG4gICAgICAgIC5maWx0ZXIoaXNSYWRpb0VsZW1lbnQpXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5uYW1lID09PSBub2RlLm5hbWU7IH0pXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5jaGVja2VkOyB9KVswXSB8fCBub2RlO1xufTtcbmV4cG9ydCB2YXIgY29ycmVjdE5vZGUgPSBmdW5jdGlvbiAobm9kZSwgbm9kZXMpIHtcbiAgICBpZiAoaXNSYWRpb0VsZW1lbnQobm9kZSkgJiYgbm9kZS5uYW1lKSB7XG4gICAgICAgIHJldHVybiBmaW5kU2VsZWN0ZWRSYWRpbyhub2RlLCBub2Rlcyk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xufTtcbi8qKlxuICogZ2l2aW5nIGEgc2V0IG9mIHJhZGlvIGlucHV0cyBrZWVwcyBvbmx5IHNlbGVjdGVkICh0YWJiYWJsZSkgb25lc1xuICogQHBhcmFtIG5vZGVzXG4gKi9cbmV4cG9ydCB2YXIgY29ycmVjdE5vZGVzID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gICAgLy8gSUUxMSBoYXMgbm8gU2V0KGFycmF5KSBjb25zdHJ1Y3RvclxuICAgIHZhciByZXN1bHRTZXQgPSBuZXcgU2V0KCk7XG4gICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gcmVzdWx0U2V0LmFkZChjb3JyZWN0Tm9kZShub2RlLCBub2RlcykpOyB9KTtcbiAgICAvLyB1c2luZyBmaWx0ZXIgdG8gc3VwcG9ydCBJRTExXG4gICAgcmV0dXJuIG5vZGVzLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gcmVzdWx0U2V0Lmhhcyhub2RlKTsgfSk7XG59O1xuIiwgImltcG9ydCB7IGNvcnJlY3ROb2RlIH0gZnJvbSAnLi9jb3JyZWN0Rm9jdXMnO1xuZXhwb3J0IHZhciBwaWNrRmlyc3RGb2N1cyA9IGZ1bmN0aW9uIChub2Rlcykge1xuICAgIGlmIChub2Rlc1swXSAmJiBub2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiBjb3JyZWN0Tm9kZShub2Rlc1swXSwgbm9kZXMpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZXNbMF07XG59O1xuZXhwb3J0IHZhciBwaWNrRm9jdXNhYmxlID0gZnVuY3Rpb24gKG5vZGVzLCBub2RlKSB7XG4gICAgcmV0dXJuIG5vZGVzLmluZGV4T2YoY29ycmVjdE5vZGUobm9kZSwgbm9kZXMpKTtcbn07XG4iLCAiaW1wb3J0IHsgY29ycmVjdE5vZGVzIH0gZnJvbSAnLi91dGlscy9jb3JyZWN0Rm9jdXMnO1xuaW1wb3J0IHsgcGlja0ZvY3VzYWJsZSB9IGZyb20gJy4vdXRpbHMvZmlyc3RGb2N1cyc7XG5pbXBvcnQgeyBpc0d1YXJkIH0gZnJvbSAnLi91dGlscy9pcyc7XG5leHBvcnQgdmFyIE5FV19GT0NVUyA9ICdORVdfRk9DVVMnO1xuLyoqXG4gKiBNYWluIHNvbHZlciBmb3IgdGhlIFwiZmluZCBuZXh0IGZvY3VzXCIgcXVlc3Rpb25cbiAqIEBwYXJhbSBpbm5lck5vZGVzIC0gdXNlZCB0byBjb250cm9sIFwicmV0dXJuIGZvY3VzXCJcbiAqIEBwYXJhbSBpbm5lclRhYmJhYmxlcyAtIHVzZWQgdG8gY29udHJvbCBcImF1dG9mb2N1c1wiXG4gKiBAcGFyYW0gb3V0ZXJOb2Rlc1xuICogQHBhcmFtIGFjdGl2ZUVsZW1lbnRcbiAqIEBwYXJhbSBsYXN0Tm9kZVxuICogQHJldHVybnMge251bWJlcnxzdHJpbmd8dW5kZWZpbmVkfCp9XG4gKi9cbmV4cG9ydCB2YXIgbmV3Rm9jdXMgPSBmdW5jdGlvbiAoaW5uZXJOb2RlcywgaW5uZXJUYWJiYWJsZXMsIG91dGVyTm9kZXMsIGFjdGl2ZUVsZW1lbnQsIGxhc3ROb2RlKSB7XG4gICAgdmFyIGNudCA9IGlubmVyTm9kZXMubGVuZ3RoO1xuICAgIHZhciBmaXJzdEZvY3VzID0gaW5uZXJOb2Rlc1swXTtcbiAgICB2YXIgbGFzdEZvY3VzID0gaW5uZXJOb2Rlc1tjbnQgLSAxXTtcbiAgICB2YXIgaXNPbkd1YXJkID0gaXNHdWFyZChhY3RpdmVFbGVtZW50KTtcbiAgICAvLyBmb2N1cyBpcyBpbnNpZGVcbiAgICBpZiAoYWN0aXZlRWxlbWVudCAmJiBpbm5lck5vZGVzLmluZGV4T2YoYWN0aXZlRWxlbWVudCkgPj0gMCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgYWN0aXZlSW5kZXggPSBhY3RpdmVFbGVtZW50ICE9PSB1bmRlZmluZWQgPyBvdXRlck5vZGVzLmluZGV4T2YoYWN0aXZlRWxlbWVudCkgOiAtMTtcbiAgICB2YXIgbGFzdEluZGV4ID0gbGFzdE5vZGUgPyBvdXRlck5vZGVzLmluZGV4T2YobGFzdE5vZGUpIDogYWN0aXZlSW5kZXg7XG4gICAgdmFyIGxhc3ROb2RlSW5zaWRlID0gbGFzdE5vZGUgPyBpbm5lck5vZGVzLmluZGV4T2YobGFzdE5vZGUpIDogLTE7XG4gICAgLy8gbm8gYWN0aXZlIGZvY3VzIChvciBmb2N1cyBpcyBvbiB0aGUgYm9keSlcbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IC0xKSB7XG4gICAgICAgIC8vIGtub3duIGZhbGxiYWNrXG4gICAgICAgIGlmIChsYXN0Tm9kZUluc2lkZSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0Tm9kZUluc2lkZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTkVXX0ZPQ1VTO1xuICAgIH1cbiAgICAvLyBuZXcgZm9jdXMsIG5vdGhpbmcgdG8gY2FsY3VsYXRlXG4gICAgaWYgKGxhc3ROb2RlSW5zaWRlID09PSAtMSkge1xuICAgICAgICByZXR1cm4gTkVXX0ZPQ1VTO1xuICAgIH1cbiAgICB2YXIgaW5kZXhEaWZmID0gYWN0aXZlSW5kZXggLSBsYXN0SW5kZXg7XG4gICAgdmFyIGZpcnN0Tm9kZUluZGV4ID0gb3V0ZXJOb2Rlcy5pbmRleE9mKGZpcnN0Rm9jdXMpO1xuICAgIHZhciBsYXN0Tm9kZUluZGV4ID0gb3V0ZXJOb2Rlcy5pbmRleE9mKGxhc3RGb2N1cyk7XG4gICAgdmFyIGNvcnJlY3RlZE5vZGVzID0gY29ycmVjdE5vZGVzKG91dGVyTm9kZXMpO1xuICAgIHZhciBjb3JyZWN0ZWRJbmRleCA9IGFjdGl2ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCA/IGNvcnJlY3RlZE5vZGVzLmluZGV4T2YoYWN0aXZlRWxlbWVudCkgOiAtMTtcbiAgICB2YXIgY29ycmVjdGVkSW5kZXhEaWZmID0gY29ycmVjdGVkSW5kZXggLSAobGFzdE5vZGUgPyBjb3JyZWN0ZWROb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IGFjdGl2ZUluZGV4KTtcbiAgICAvLyBvbGQgZm9jdXNcbiAgICBpZiAoIWluZGV4RGlmZiAmJiBsYXN0Tm9kZUluc2lkZSA+PSAwKSB7XG4gICAgICAgIHJldHVybiBsYXN0Tm9kZUluc2lkZTtcbiAgICB9XG4gICAgLy8gbm8gdGFiYmFibGUgZWxlbWVudHMsIGF1dG9mb2N1cyBpcyBub3QgcG9zc2libGVcbiAgICBpZiAoaW5uZXJUYWJiYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGFuIGVkZ2UgY2FzZSB3aXRoIG5vIHRhYmJhYmxlIGVsZW1lbnRzXG4gICAgICAgIC8vIHJldHVybiB0aGUgbGFzdCBmb2N1c2FibGUgb25lXG4gICAgICAgIC8vIHdpdGggc29tZSBwcm9iYWJpbGl0eSB0aGlzIHdpbGwgcHJldmVudCBmb2N1cyBmcm9tIGN5Y2xpbmcgYWNyb3NzIHRoZSBsb2NrLCBidXQgdGhlcmUgaXMgbm8gdGFiYmFsZSBlbGVtZW50cyB0byBjeWNsZSB0b1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIHZhciByZXR1cm5GaXJzdE5vZGUgPSBwaWNrRm9jdXNhYmxlKGlubmVyTm9kZXMsIGlubmVyVGFiYmFibGVzWzBdKTtcbiAgICB2YXIgcmV0dXJuTGFzdE5vZGUgPSBwaWNrRm9jdXNhYmxlKGlubmVyTm9kZXMsIGlubmVyVGFiYmFibGVzW2lubmVyVGFiYmFibGVzLmxlbmd0aCAtIDFdKTtcbiAgICAvLyBmaXJzdCBlbGVtZW50XG4gICAgaWYgKGFjdGl2ZUluZGV4IDw9IGZpcnN0Tm9kZUluZGV4ICYmIGlzT25HdWFyZCAmJiBNYXRoLmFicyhpbmRleERpZmYpID4gMSkge1xuICAgICAgICByZXR1cm4gcmV0dXJuTGFzdE5vZGU7XG4gICAgfVxuICAgIC8vIGxhc3QgZWxlbWVudFxuICAgIGlmIChhY3RpdmVJbmRleCA+PSBsYXN0Tm9kZUluZGV4ICYmIGlzT25HdWFyZCAmJiBNYXRoLmFicyhpbmRleERpZmYpID4gMSkge1xuICAgICAgICByZXR1cm4gcmV0dXJuRmlyc3ROb2RlO1xuICAgIH1cbiAgICAvLyBqdW1wIG91dCwgYnV0IG5vdCBvbiB0aGUgZ3VhcmRcbiAgICBpZiAoaW5kZXhEaWZmICYmIE1hdGguYWJzKGNvcnJlY3RlZEluZGV4RGlmZikgPiAxKSB7XG4gICAgICAgIHJldHVybiBsYXN0Tm9kZUluc2lkZTtcbiAgICB9XG4gICAgLy8gZm9jdXMgYWJvdmUgbG9ja1xuICAgIGlmIChhY3RpdmVJbmRleCA8PSBmaXJzdE5vZGVJbmRleCkge1xuICAgICAgICByZXR1cm4gcmV0dXJuTGFzdE5vZGU7XG4gICAgfVxuICAgIC8vIGZvY3VzIGJlbG93IGxvY2tcbiAgICBpZiAoYWN0aXZlSW5kZXggPiBsYXN0Tm9kZUluZGV4KSB7XG4gICAgICAgIHJldHVybiByZXR1cm5GaXJzdE5vZGU7XG4gICAgfVxuICAgIC8vIGluZGV4IGlzIGluc2lkZSB0YWIgb3JkZXIsIGJ1dCBvdXRzaWRlIExvY2tcbiAgICBpZiAoaW5kZXhEaWZmKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhpbmRleERpZmYpID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoY250ICsgbGFzdE5vZGVJbnNpZGUgKyBpbmRleERpZmYpICUgY250O1xuICAgIH1cbiAgICAvLyBkbyBub3RoaW5nXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCAiaW1wb3J0IHsgZmlsdGVyQXV0b0ZvY3VzYWJsZSB9IGZyb20gJy4vRE9NdXRpbHMnO1xuaW1wb3J0IHsgcGlja0ZpcnN0Rm9jdXMgfSBmcm9tICcuL2ZpcnN0Rm9jdXMnO1xuaW1wb3J0IHsgZ2V0RGF0YXNldCB9IGZyb20gJy4vaXMnO1xudmFyIGZpbmRBdXRvRm9jdXNlZCA9IGZ1bmN0aW9uIChhdXRvRm9jdXNhYmxlcykge1xuICAgIHJldHVybiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBhdXRvZm9jdXMgPSAoX2EgPSBnZXREYXRhc2V0KG5vZGUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYXV0b2ZvY3VzO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIG5vZGUuYXV0b2ZvY3VzIHx8XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgKGF1dG9mb2N1cyAhPT0gdW5kZWZpbmVkICYmIGF1dG9mb2N1cyAhPT0gJ2ZhbHNlJykgfHxcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBhdXRvRm9jdXNhYmxlcy5pbmRleE9mKG5vZGUpID49IDApO1xuICAgIH07XG59O1xuZXhwb3J0IHZhciBwaWNrQXV0b2ZvY3VzID0gZnVuY3Rpb24gKG5vZGVzSW5kZXhlcywgb3JkZXJlZE5vZGVzLCBncm91cHMpIHtcbiAgICB2YXIgbm9kZXMgPSBub2Rlc0luZGV4ZXMubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBhdXRvRm9jdXNhYmxlID0gZmlsdGVyQXV0b0ZvY3VzYWJsZShub2Rlcy5maWx0ZXIoZmluZEF1dG9Gb2N1c2VkKGdyb3VwcykpKTtcbiAgICBpZiAoYXV0b0ZvY3VzYWJsZSAmJiBhdXRvRm9jdXNhYmxlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcGlja0ZpcnN0Rm9jdXMoYXV0b0ZvY3VzYWJsZSk7XG4gICAgfVxuICAgIHJldHVybiBwaWNrRmlyc3RGb2N1cyhmaWx0ZXJBdXRvRm9jdXNhYmxlKG9yZGVyZWROb2RlcykpO1xufTtcbiIsICJpbXBvcnQgeyBwYXJlbnRBdXRvZm9jdXNhYmxlcyB9IGZyb20gJy4vRE9NdXRpbHMnO1xuaW1wb3J0IHsgY29udGFpbnMgfSBmcm9tICcuL0RPTXV0aWxzJztcbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbnZhciBnZXRQYXJlbnRzID0gZnVuY3Rpb24gKG5vZGUsIHBhcmVudHMpIHtcbiAgICBpZiAocGFyZW50cyA9PT0gdm9pZCAwKSB7IHBhcmVudHMgPSBbXTsgfVxuICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIGdldFBhcmVudHMobm9kZS5wYXJlbnROb2RlLmhvc3QgfHwgbm9kZS5wYXJlbnROb2RlLCBwYXJlbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG59O1xuLyoqXG4gKiBmaW5kcyBhIHBhcmVudCBmb3IgYm90aCBub2RlQSBhbmQgbm9kZUJcbiAqIEBwYXJhbSBub2RlQVxuICogQHBhcmFtIG5vZGVCXG4gKiBAcmV0dXJucyB7Ym9vbGVhbnwqfVxuICovXG5leHBvcnQgdmFyIGdldENvbW1vblBhcmVudCA9IGZ1bmN0aW9uIChub2RlQSwgbm9kZUIpIHtcbiAgICB2YXIgcGFyZW50c0EgPSBnZXRQYXJlbnRzKG5vZGVBKTtcbiAgICB2YXIgcGFyZW50c0IgPSBnZXRQYXJlbnRzKG5vZGVCKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50c0EubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRzQVtpXTtcbiAgICAgICAgaWYgKHBhcmVudHNCLmluZGV4T2YoY3VycmVudFBhcmVudCkgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydCB2YXIgZ2V0VG9wQ29tbW9uUGFyZW50ID0gZnVuY3Rpb24gKGJhc2VBY3RpdmVFbGVtZW50LCBsZWZ0RW50cnksIHJpZ2h0RW50cmllcykge1xuICAgIHZhciBhY3RpdmVFbGVtZW50cyA9IGFzQXJyYXkoYmFzZUFjdGl2ZUVsZW1lbnQpO1xuICAgIHZhciBsZWZ0RW50cmllcyA9IGFzQXJyYXkobGVmdEVudHJ5KTtcbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnRzWzBdO1xuICAgIHZhciB0b3BDb21tb24gPSBmYWxzZTtcbiAgICBsZWZ0RW50cmllcy5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgdG9wQ29tbW9uID0gZ2V0Q29tbW9uUGFyZW50KHRvcENvbW1vbiB8fCBlbnRyeSwgZW50cnkpIHx8IHRvcENvbW1vbjtcbiAgICAgICAgcmlnaHRFbnRyaWVzLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChzdWJFbnRyeSkge1xuICAgICAgICAgICAgdmFyIGNvbW1vbiA9IGdldENvbW1vblBhcmVudChhY3RpdmVFbGVtZW50LCBzdWJFbnRyeSk7XG4gICAgICAgICAgICBpZiAoY29tbW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0b3BDb21tb24gfHwgY29udGFpbnMoY29tbW9uLCB0b3BDb21tb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcENvbW1vbiA9IGNvbW1vbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcENvbW1vbiA9IGdldENvbW1vblBhcmVudChjb21tb24sIHRvcENvbW1vbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyBUT0RPOiBhZGQgYXNzZXJ0IGhlcmU/XG4gICAgcmV0dXJuIHRvcENvbW1vbjtcbn07XG4vKipcbiAqIHJldHVybiBsaXN0IG9mIG5vZGVzIHdoaWNoIGFyZSBleHBlY3RlZCB0byBiZSBhdXRvZm9jdXNlZCBpbnNpZGUgYSBnaXZlbiB0b3Agbm9kZXNcbiAqIEBwYXJhbSBlbnRyaWVzXG4gKiBAcGFyYW0gdmlzaWJpbGl0eUNhY2hlXG4gKi9cbmV4cG9ydCB2YXIgYWxsUGFyZW50QXV0b2ZvY3VzYWJsZXMgPSBmdW5jdGlvbiAoZW50cmllcywgdmlzaWJpbGl0eUNhY2hlKSB7XG4gICAgcmV0dXJuIGVudHJpZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5vZGUpIHsgcmV0dXJuIGFjYy5jb25jYXQocGFyZW50QXV0b2ZvY3VzYWJsZXMobm9kZSwgdmlzaWJpbGl0eUNhY2hlKSk7IH0sIFtdKTtcbn07XG4iLCAiaW1wb3J0IHsgTkVXX0ZPQ1VTLCBuZXdGb2N1cyB9IGZyb20gJy4vc29sdmVyJztcbmltcG9ydCB7IGdldEZvY3VzYWJsZU5vZGVzIH0gZnJvbSAnLi91dGlscy9ET011dGlscyc7XG5pbXBvcnQgeyBnZXRBbGxBZmZlY3RlZE5vZGVzIH0gZnJvbSAnLi91dGlscy9hbGwtYWZmZWN0ZWQnO1xuaW1wb3J0IHsgYXNBcnJheSwgZ2V0Rmlyc3QgfSBmcm9tICcuL3V0aWxzL2FycmF5JztcbmltcG9ydCB7IHBpY2tBdXRvZm9jdXMgfSBmcm9tICcuL3V0aWxzL2F1dG8tZm9jdXMnO1xuaW1wb3J0IHsgZ2V0QWN0aXZlRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvZ2V0QWN0aXZlRWxlbWVudCc7XG5pbXBvcnQgeyBpc0RlZmluZWQsIGlzTm90QUd1YXJkIH0gZnJvbSAnLi91dGlscy9pcyc7XG5pbXBvcnQgeyBhbGxQYXJlbnRBdXRvZm9jdXNhYmxlcywgZ2V0VG9wQ29tbW9uUGFyZW50IH0gZnJvbSAnLi91dGlscy9wYXJlbnRpbmcnO1xudmFyIHJlb3JkZXJOb2RlcyA9IGZ1bmN0aW9uIChzcmNOb2RlcywgZHN0Tm9kZXMpIHtcbiAgICB2YXIgcmVtYXAgPSBuZXcgTWFwKCk7XG4gICAgLy8gbm8gU2V0KGRzdE5vZGVzKSBmb3IgSUUxMSA6KFxuICAgIGRzdE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGVudGl0eSkgeyByZXR1cm4gcmVtYXAuc2V0KGVudGl0eS5ub2RlLCBlbnRpdHkpOyB9KTtcbiAgICAvLyByZW1hcCB0byBkc3ROb2Rlc1xuICAgIHJldHVybiBzcmNOb2Rlcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlbWFwLmdldChub2RlKTsgfSkuZmlsdGVyKGlzRGVmaW5lZCk7XG59O1xuLyoqXG4gKiBjb250YWlucyB0aGUgbWFpbiBsb2dpYyBvZiB0aGUgYGZvY3VzLWxvY2tgIHBhY2thZ2UuXG4gKlxuICogISB5b3UgcHJvYmFibHkgZG9udCBuZWVkIHRoaXMgZnVuY3Rpb24gIVxuICpcbiAqIGdpdmVuIHRvcCBub2RlKHMpIGFuZCB0aGUgbGFzdCBhY3RpdmUgZWxlbWVudCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGJlIGZvY3VzZWQgbmV4dFxuICogQHJldHVybnMgZWxlbWVudCB3aGljaCBzaG91bGQgYmUgZm9jdXNlZCB0byBtb3ZlIGZvY3VzIGluc2lkZVxuICogQHBhcmFtIHRvcE5vZGVcbiAqIEBwYXJhbSBsYXN0Tm9kZVxuICovXG5leHBvcnQgdmFyIGZvY3VzU29sdmVyID0gZnVuY3Rpb24gKHRvcE5vZGUsIGxhc3ROb2RlKSB7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KGFzQXJyYXkodG9wTm9kZSkubGVuZ3RoID4gMCA/IGRvY3VtZW50IDogZ2V0Rmlyc3QodG9wTm9kZSkub3duZXJEb2N1bWVudCk7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRBbGxBZmZlY3RlZE5vZGVzKHRvcE5vZGUpLmZpbHRlcihpc05vdEFHdWFyZCk7XG4gICAgdmFyIGNvbW1vblBhcmVudCA9IGdldFRvcENvbW1vblBhcmVudChhY3RpdmVFbGVtZW50IHx8IHRvcE5vZGUsIHRvcE5vZGUsIGVudHJpZXMpO1xuICAgIHZhciB2aXNpYmlsaXR5Q2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgdmFyIGFueUZvY3VzYWJsZSA9IGdldEZvY3VzYWJsZU5vZGVzKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSk7XG4gICAgdmFyIGlubmVyRWxlbWVudHMgPSBhbnlGb2N1c2FibGUuZmlsdGVyKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBpc05vdEFHdWFyZChub2RlKTtcbiAgICB9KTtcbiAgICBpZiAoIWlubmVyRWxlbWVudHNbMF0pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIG91dGVyTm9kZXMgPSBnZXRGb2N1c2FibGVOb2RlcyhbY29tbW9uUGFyZW50XSwgdmlzaWJpbGl0eUNhY2hlKS5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSk7XG4gICAgdmFyIG9yZGVyZWRJbm5lckVsZW1lbnRzID0gcmVvcmRlck5vZGVzKG91dGVyTm9kZXMsIGlubmVyRWxlbWVudHMpO1xuICAgIC8vIGNvbGxlY3QgaW5uZXIgZm9jdXNhYmxlIGFuZCBzZXBhcmF0ZWx5IHRhYmJhYmxlc1xuICAgIHZhciBpbm5lckZvY3VzYWJsZXMgPSBvcmRlcmVkSW5uZXJFbGVtZW50cy5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSk7XG4gICAgdmFyIGlubmVyVGFiYmFibGUgPSBvcmRlcmVkSW5uZXJFbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciB0YWJJbmRleCA9IF9hLnRhYkluZGV4O1xuICAgICAgICByZXR1cm4gdGFiSW5kZXggPj0gMDtcbiAgICB9KS5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSk7XG4gICAgdmFyIG5ld0lkID0gbmV3Rm9jdXMoaW5uZXJGb2N1c2FibGVzLCBpbm5lclRhYmJhYmxlLCBvdXRlck5vZGVzLCBhY3RpdmVFbGVtZW50LCBsYXN0Tm9kZSk7XG4gICAgaWYgKG5ld0lkID09PSBORVdfRk9DVVMpIHtcbiAgICAgICAgdmFyIGZvY3VzTm9kZSA9IFxuICAgICAgICAvLyBmaXJzdCB0cnkgb25seSB0YWJiYWJsZSwgYW5kIHRoZSBmYWxsYmFjayB0byBhbGwgZm9jdXNhYmxlLCBhcyBsb25nIGFzIGF0IGxlYXN0IG9uZSBlbGVtZW50IHNob3VsZCBiZSBwaWNrZWQgZm9yIGZvY3VzXG4gICAgICAgIHBpY2tBdXRvZm9jdXMoYW55Rm9jdXNhYmxlLCBpbm5lclRhYmJhYmxlLCBhbGxQYXJlbnRBdXRvZm9jdXNhYmxlcyhlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpKSB8fFxuICAgICAgICAgICAgcGlja0F1dG9mb2N1cyhhbnlGb2N1c2FibGUsIGlubmVyRm9jdXNhYmxlcywgYWxsUGFyZW50QXV0b2ZvY3VzYWJsZXMoZW50cmllcywgdmlzaWJpbGl0eUNhY2hlKSk7XG4gICAgICAgIGlmIChmb2N1c05vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG5vZGU6IGZvY3VzTm9kZSB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmb2N1cy1sb2NrOiBjYW5ub3QgZmluZCBhbnkgbm9kZSB0byBtb3ZlIGZvY3VzIGludG8nKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5ld0lkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5ld0lkO1xuICAgIH1cbiAgICByZXR1cm4gb3JkZXJlZElubmVyRWxlbWVudHNbbmV3SWRdO1xufTtcbiIsICJpbXBvcnQgeyBnZXRBbGxBZmZlY3RlZE5vZGVzIH0gZnJvbSAnLi91dGlscy9hbGwtYWZmZWN0ZWQnO1xuaW1wb3J0IHsgaXNHdWFyZCwgaXNOb3RBR3VhcmQgfSBmcm9tICcuL3V0aWxzL2lzJztcbmltcG9ydCB7IGdldFRvcENvbW1vblBhcmVudCB9IGZyb20gJy4vdXRpbHMvcGFyZW50aW5nJztcbmltcG9ydCB7IG9yZGVyQnlUYWJJbmRleCB9IGZyb20gJy4vdXRpbHMvdGFiT3JkZXInO1xuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlcyB9IGZyb20gJy4vdXRpbHMvdGFiVXRpbHMnO1xuLyoqXG4gKiB0cmF2ZXJzZXMgYWxsIHJlbGF0ZWQgbm9kZXMgKGluY2x1ZGluZyBncm91cHMpIHJldHVybmluZyBhIGxpc3Qgb2YgYWxsIG5vZGVzKG91dGVyIGFuZCBpbnRlcm5hbCkgd2l0aCBtZXRhIGluZm9ybWF0aW9uXG4gKiBUaGlzIGlzIGxvdy1sZXZlbCBBUEkhXG4gKiBAcmV0dXJucyBsaXN0IG9mIGZvY3VzYWJsZSBlbGVtZW50cyBpbnNpZGUgYSBnaXZlbiB0b3AoISkgbm9kZS5cbiAqIEBzZWUge0BsaW5rIGdldEZvY3VzYWJsZU5vZGVzfSBwcm92aWRpbmcgYSBzaW1wbGVyIEFQSVxuICovXG5leHBvcnQgdmFyIGV4cGFuZEZvY3VzYWJsZU5vZGVzID0gZnVuY3Rpb24gKHRvcE5vZGUpIHtcbiAgICB2YXIgZW50cmllcyA9IGdldEFsbEFmZmVjdGVkTm9kZXModG9wTm9kZSkuZmlsdGVyKGlzTm90QUd1YXJkKTtcbiAgICB2YXIgY29tbW9uUGFyZW50ID0gZ2V0VG9wQ29tbW9uUGFyZW50KHRvcE5vZGUsIHRvcE5vZGUsIGVudHJpZXMpO1xuICAgIHZhciBvdXRlck5vZGVzID0gb3JkZXJCeVRhYkluZGV4KGdldEZvY3VzYWJsZXMoW2NvbW1vblBhcmVudF0sIHRydWUpLCB0cnVlLCB0cnVlKTtcbiAgICB2YXIgaW5uZXJFbGVtZW50cyA9IGdldEZvY3VzYWJsZXMoZW50cmllcywgZmFsc2UpO1xuICAgIHJldHVybiBvdXRlck5vZGVzLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlLCBpbmRleCA9IF9hLmluZGV4O1xuICAgICAgICByZXR1cm4gKHtcbiAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICBsb2NrSXRlbTogaW5uZXJFbGVtZW50cy5pbmRleE9mKG5vZGUpID49IDAsXG4gICAgICAgICAgICBndWFyZDogaXNHdWFyZChub2RlKSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuIiwgImV4cG9ydCB2YXIgZm9jdXNPbiA9IGZ1bmN0aW9uICh0YXJnZXQsIGZvY3VzT3B0aW9ucykge1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgIC8vIG5vdCBjbGVhciBob3csIGJ1dCBpcyBwb3NzaWJsZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L2ZvY3VzLWxvY2svaXNzdWVzLzUzXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCdmb2N1cycgaW4gdGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC5mb2N1cyhmb2N1c09wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoJ2NvbnRlbnRXaW5kb3cnIGluIHRhcmdldCAmJiB0YXJnZXQuY29udGVudFdpbmRvdykge1xuICAgICAgICB0YXJnZXQuY29udGVudFdpbmRvdy5mb2N1cygpO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHsgZm9jdXNPbiB9IGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0IHsgZm9jdXNTb2x2ZXIgfSBmcm9tICcuL2ZvY3VzU29sdmVyJztcbnZhciBndWFyZENvdW50ID0gMDtcbnZhciBsb2NrRGlzYWJsZWQgPSBmYWxzZTtcbi8qKlxuICogVGhlIG1haW4gZnVuY3Rpb25hbGl0eSBvZiB0aGUgZm9jdXMtbG9jayBwYWNrYWdlXG4gKlxuICogQ29udGFpbnMgZm9jdXMgYXQgYSBnaXZlbiBub2RlLlxuICogVGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50IHdpbGwgaGVscCB0byBkZXRlcm1pbmUgd2hpY2ggZWxlbWVudChmaXJzdCBvciBsYXN0KSBzaG91bGQgYmUgZm9jdXNlZC5cbiAqIFRoZSBmb3VuZCBlbGVtZW50IHdpbGwgYmUgZm9jdXNlZC5cbiAqXG4gKiBUaGlzIGlzIG9uZSB0aW1lIGFjdGlvbiAobW92ZSksIG5vdCBhIHBlcnNpc3RlbnQgZm9jdXMtbG9ja1xuICpcbiAqIEhUTUwgbWFya2VycyAoc2VlIHtAbGluayBpbXBvcnQoJy4vY29uc3RhbnRzJykuRk9DVVNfQVVUT30gY29uc3RhbnRzKSBjYW4gY29udHJvbCBhdXRvZm9jdXNcbiAqIEBzZWUge0BsaW5rIGZvY3VzU29sdmVyfSBmb3IgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSB3aXRob3V0IGF1dG9mb2N1c1xuICovXG5leHBvcnQgdmFyIG1vdmVGb2N1c0luc2lkZSA9IGZ1bmN0aW9uICh0b3BOb2RlLCBsYXN0Tm9kZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIGZvY3VzYWJsZSA9IGZvY3VzU29sdmVyKHRvcE5vZGUsIGxhc3ROb2RlKTtcbiAgICAvLyBnbG9iYWwgbG9jYWwgc2lkZSBlZmZlY3QgdG8gY291bnRhaW4gcmVjdXJzaXZlIGxvY2sgYWN0aXZhdGlvbiBhbmQgcmVzb2x2ZSBmb2N1cy1maWdodGluZ1xuICAgIGlmIChsb2NrRGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZm9jdXNhYmxlKSB7XG4gICAgICAgIC8qKiArRk9DVVMtRklHSFRJTkcgcHJldmVudGlvbiAqKi9cbiAgICAgICAgaWYgKGd1YXJkQ291bnQgPiAyKSB7XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIHJlY3Vyc2l2ZSBlbnRlcmVkIGJhY2sgdGhlIGxvY2sgYWN0aXZhdGlvblxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRm9jdXNMb2NrOiBmb2N1cy1maWdodGluZyBkZXRlY3RlZC4gT25seSBvbmUgZm9jdXMgbWFuYWdlbWVudCBzeXN0ZW0gY291bGQgYmUgYWN0aXZlLiAnICtcbiAgICAgICAgICAgICAgICAnU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvZm9jdXMtbG9jay8jZm9jdXMtZmlnaHRpbmcnKTtcbiAgICAgICAgICAgIGxvY2tEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsb2NrRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGd1YXJkQ291bnQrKztcbiAgICAgICAgZm9jdXNPbihmb2N1c2FibGUubm9kZSwgb3B0aW9ucy5mb2N1c09wdGlvbnMpO1xuICAgICAgICBndWFyZENvdW50LS07XG4gICAgfVxufTtcbiIsICJpbXBvcnQgeyBnZXRUYWJiYWJsZU5vZGVzIH0gZnJvbSAnLi91dGlscy9ET011dGlscyc7XG5mdW5jdGlvbiB3ZWFrUmVmKHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgLy8gIzY4IFNhZmFyaSAxNC4xIGRvbnQgaGF2ZSBpdCB5ZXRcbiAgICAvLyBGSVhNRTogcmVtb3ZlIGluIDIwMjVcbiAgICBpZiAodHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZSB8fCBudWxsOyB9O1xuICAgIH1cbiAgICB2YXIgdyA9IHZhbHVlID8gbmV3IFdlYWtSZWYodmFsdWUpIDogbnVsbDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHcgPT09IG51bGwgfHwgdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogdy5kZXJlZigpKSB8fCBudWxsOyB9O1xufVxuZXhwb3J0IHZhciByZWNvcmRFbGVtZW50TG9jYXRpb24gPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgdmFyIGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICB3aGlsZSAoY3VycmVudEVsZW1lbnQgJiYgY3VycmVudEVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBjdXJyZW50OiB3ZWFrUmVmKGN1cnJlbnRFbGVtZW50KSxcbiAgICAgICAgICAgIHBhcmVudDogd2Vha1JlZihjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50KSxcbiAgICAgICAgICAgIGxlZnQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyksXG4gICAgICAgICAgICByaWdodDogd2Vha1JlZihjdXJyZW50RWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpLFxuICAgICAgICB9KTtcbiAgICAgICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBlbGVtZW50OiB3ZWFrUmVmKGVsZW1lbnQpLFxuICAgICAgICBzdGFjazogc3RhY2ssXG4gICAgICAgIG93bmVyRG9jdW1lbnQ6IGVsZW1lbnQub3duZXJEb2N1bWVudCxcbiAgICB9O1xufTtcbnZhciByZXN0b3JlRm9jdXNUbyA9IGZ1bmN0aW9uIChsb2NhdGlvbikge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgaWYgKCFsb2NhdGlvbikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgc3RhY2sgPSBsb2NhdGlvbi5zdGFjaywgb3duZXJEb2N1bWVudCA9IGxvY2F0aW9uLm93bmVyRG9jdW1lbnQ7XG4gICAgdmFyIHZpc2liaWxpdHlDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKHZhciBfaSA9IDAsIHN0YWNrXzEgPSBzdGFjazsgX2kgPCBzdGFja18xLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgbGluZSA9IHN0YWNrXzFbX2ldO1xuICAgICAgICB2YXIgcGFyZW50XzEgPSAoX2EgPSBsaW5lLnBhcmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwobGluZSk7XG4gICAgICAgIC8vIGlzIGl0IHN0aWxsIGhlcmU/XG4gICAgICAgIGlmIChwYXJlbnRfMSAmJiBvd25lckRvY3VtZW50LmNvbnRhaW5zKHBhcmVudF8xKSkge1xuICAgICAgICAgICAgdmFyIGxlZnQgPSAoX2IgPSBsaW5lLmxlZnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKGxpbmUpO1xuICAgICAgICAgICAgdmFyIHNhdmVkQ3VycmVudCA9IGxpbmUuY3VycmVudCgpO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBwYXJlbnRfMS5jb250YWlucyhzYXZlZEN1cnJlbnQpID8gc2F2ZWRDdXJyZW50IDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gKF9jID0gbGluZS5yaWdodCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwobGluZSk7XG4gICAgICAgICAgICB2YXIgZm9jdXNhYmxlcyA9IGdldFRhYmJhYmxlTm9kZXMoW3BhcmVudF8xXSwgdmlzaWJpbGl0eUNhY2hlKTtcbiAgICAgICAgICAgIHZhciBhaW0gPSBcbiAgICAgICAgICAgIC8vIHRoYXQgaXMgZWxlbWVudCBpdHNlbGZcbiAgICAgICAgICAgIChfZSA9IChfZCA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudCAhPT0gdm9pZCAwID8gY3VycmVudCA6IFxuICAgICAgICAgICAgLy8gb3Igc29tZXRoaW5nIGluIGl0J3MgcGxhY2VcbiAgICAgICAgICAgIGxlZnQgPT09IG51bGwgfHwgbGVmdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGVmdC5uZXh0RWxlbWVudFNpYmxpbmcpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFxuICAgICAgICAgICAgLy8gb3Igc29tZWJvZHkgdG8gdGhlIHJpZ2h0LCBzdGlsbCBjbG9zZSBlbm91Z2hcbiAgICAgICAgICAgIHJpZ2h0KSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBcbiAgICAgICAgICAgIC8vIG9yIHNvbWVib2R5IHRvIHRoZSBsZWZ0LCBzb21ldGhpbmc/XG4gICAgICAgICAgICBsZWZ0O1xuICAgICAgICAgICAgd2hpbGUgKGFpbSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9mID0gMCwgZm9jdXNhYmxlc18xID0gZm9jdXNhYmxlczsgX2YgPCBmb2N1c2FibGVzXzEubGVuZ3RoOyBfZisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmb2N1c2FibGUgPSBmb2N1c2FibGVzXzFbX2ZdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWltID09PSBudWxsIHx8IGFpbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWltLmNvbnRhaW5zKGZvY3VzYWJsZS5ub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvY3VzYWJsZS5ub2RlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFpbSA9IGFpbS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9jdXNhYmxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBwYXJlbnQgY29udGFpbnMgYSBmb2N1c2FibGUgLSBtb3ZlIHRoZXJlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvY3VzYWJsZXNbMF0ubm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBub3RoaW5nIG1hdGNoZWRcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbi8qKlxuICogQ2FwdHVyZXMgdGhlIGN1cnJlbnQgZm9jdXNlZCBlbGVtZW50IHRvIHJlc3RvcmUgZm9jdXMgYXMgY2xvc2UgYXMgcG9zc2libGUgaW4gdGhlIGZ1dHVyZVxuICogSGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIHRoZSBmb2N1c2VkIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00gb3Igbm8gbG9uZ2VyIGZvY3VzYWJsZVxuICogbW92aW5nIGZvY3VzIHRvIHRoZSBjbG9zZXN0IGZvY3VzYWJsZSBlbGVtZW50XG4gKiBAcGFyYW0gdGFyZ2V0RWxlbWVudCAtIGVsZW1lbnQgd2hlcmUgZm9jdXMgc2hvdWxkIGJlIHJlc3RvcmVkXG4gKiBAcmV0dXJucyBhIGZ1bmN0aW9uIHJldHVybmluZyBhIG5ldyBlbGVtZW50IHRvIGZvY3VzXG4gKi9cbmV4cG9ydCB2YXIgY2FwdHVyZUZvY3VzUmVzdG9yZSA9IGZ1bmN0aW9uICh0YXJnZXRFbGVtZW50KSB7XG4gICAgdmFyIGxvY2F0aW9uID0gcmVjb3JkRWxlbWVudExvY2F0aW9uKHRhcmdldEVsZW1lbnQpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZXN0b3JlRm9jdXNUbyhsb2NhdGlvbik7XG4gICAgfTtcbn07XG4iLCAiaW1wb3J0IHsgZm9jdXNPbiB9IGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0IHsgZ2V0VGFiYmFibGVOb2RlcywgY29udGFpbnMsIGdldEZvY3VzYWJsZU5vZGVzIH0gZnJvbSAnLi91dGlscy9ET011dGlscyc7XG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnLi91dGlscy9hcnJheSc7XG4vKipcbiAqIGZvciBhIGdpdmVuIGBlbGVtZW50YCBpbiBhIGdpdmVuIGBzY29wZWAgcmV0dXJucyBmb2N1c2FibGUgc2libGluZ3NcbiAqIEBwYXJhbSBlbGVtZW50IC0gYmFzZSBlbGVtZW50XG4gKiBAcGFyYW0gc2NvcGUgLSBjb21tb24gcGFyZW50LiBDYW4gYmUgZG9jdW1lbnQsIGJ1dCBiZXR0ZXIgdG8gbmFycm93IGl0IGRvd24gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAqIEByZXR1cm5zIHtwcmV2LG5leHR9IC0gcmVmZXJlbmNlcyB0byBhIGZvY3VzYWJsZSBlbGVtZW50IGJlZm9yZSBhbmQgYWZ0ZXJcbiAqIEByZXR1cm5zIHVuZGVmaW5lZCAtIGlmIG9wZXJhdGlvbiBpcyBub3QgYXBwbGljYWJsZVxuICovXG5leHBvcnQgdmFyIGdldFJlbGF0aXZlRm9jdXNhYmxlID0gZnVuY3Rpb24gKGVsZW1lbnQsIHNjb3BlLCB1c2VUYWJiYWJsZXMpIHtcbiAgICBpZiAoIWVsZW1lbnQgfHwgIXNjb3BlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ25vIGVsZW1lbnQgb3Igc2NvcGUgZ2l2ZW4nKTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICB2YXIgc2hhcmRzID0gYXNBcnJheShzY29wZSk7XG4gICAgaWYgKHNoYXJkcy5ldmVyeShmdW5jdGlvbiAoc2hhcmQpIHsgcmV0dXJuICFjb250YWlucyhzaGFyZCwgZWxlbWVudCk7IH0pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FjdGl2ZSBlbGVtZW50IGlzIG5vdCBjb250YWluZWQgaW4gdGhlIHNjb3BlJyk7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgdmFyIGZvY3VzYWJsZXMgPSB1c2VUYWJiYWJsZXNcbiAgICAgICAgPyBnZXRUYWJiYWJsZU5vZGVzKHNoYXJkcywgbmV3IE1hcCgpKVxuICAgICAgICA6IGdldEZvY3VzYWJsZU5vZGVzKHNoYXJkcywgbmV3IE1hcCgpKTtcbiAgICB2YXIgY3VycmVudCA9IGZvY3VzYWJsZXMuZmluZEluZGV4KGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlID09PSBlbGVtZW50O1xuICAgIH0pO1xuICAgIGlmIChjdXJyZW50ID09PSAtMSkge1xuICAgICAgICAvLyBhbiBlZGdlIGNhc2UsIHdoZW4gYW5jaG9yIGVsZW1lbnQgaXMgbm90IGZvdW5kXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHByZXY6IGZvY3VzYWJsZXNbY3VycmVudCAtIDFdLFxuICAgICAgICBuZXh0OiBmb2N1c2FibGVzW2N1cnJlbnQgKyAxXSxcbiAgICAgICAgZmlyc3Q6IGZvY3VzYWJsZXNbMF0sXG4gICAgICAgIGxhc3Q6IGZvY3VzYWJsZXNbZm9jdXNhYmxlcy5sZW5ndGggLSAxXSxcbiAgICB9O1xufTtcbnZhciBnZXRCb3VuZGFyeSA9IGZ1bmN0aW9uIChzaGFyZHMsIHVzZVRhYmJhYmxlcykge1xuICAgIHZhciBzZXQgPSB1c2VUYWJiYWJsZXNcbiAgICAgICAgPyBnZXRUYWJiYWJsZU5vZGVzKGFzQXJyYXkoc2hhcmRzKSwgbmV3IE1hcCgpKVxuICAgICAgICA6IGdldEZvY3VzYWJsZU5vZGVzKGFzQXJyYXkoc2hhcmRzKSwgbmV3IE1hcCgpKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBmaXJzdDogc2V0WzBdLFxuICAgICAgICBsYXN0OiBzZXRbc2V0Lmxlbmd0aCAtIDFdLFxuICAgIH07XG59O1xudmFyIGRlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHNjb3BlOiBkb2N1bWVudC5ib2R5LFxuICAgICAgICBjeWNsZTogdHJ1ZSxcbiAgICAgICAgb25seVRhYmJhYmxlOiB0cnVlLFxuICAgIH0sIG9wdGlvbnMpO1xufTtcbnZhciBtb3ZlRm9jdXMgPSBmdW5jdGlvbiAoZnJvbUVsZW1lbnQsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgbmV3T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zKG9wdGlvbnMpO1xuICAgIHZhciBzb2x1dGlvbiA9IGdldFJlbGF0aXZlRm9jdXNhYmxlKGZyb21FbGVtZW50LCBuZXdPcHRpb25zLnNjb3BlLCBuZXdPcHRpb25zLm9ubHlUYWJiYWJsZSk7XG4gICAgaWYgKCFzb2x1dGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0YXJnZXQgPSBjYihzb2x1dGlvbiwgbmV3T3B0aW9ucy5jeWNsZSk7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgICBmb2N1c09uKHRhcmdldC5ub2RlLCBuZXdPcHRpb25zLmZvY3VzT3B0aW9ucyk7XG4gICAgfVxufTtcbi8qKlxuICogZm9jdXNlcyBuZXh0IGVsZW1lbnQgaW4gdGhlIHRhYi1vcmRlclxuICogQHBhcmFtIGZyb21FbGVtZW50IC0gY29tbW9uIHBhcmVudCB0byBzY29wZSBhY3RpdmUgZWxlbWVudCBzZWFyY2ggb3IgdGFiIGN5Y2xlIG9yZGVyXG4gKiBAcGFyYW0ge0ZvY3VzTmV4dE9wdGlvbnN9IFtvcHRpb25zXSAtIGZvY3VzIG9wdGlvbnNcbiAqL1xuZXhwb3J0IHZhciBmb2N1c05leHRFbGVtZW50ID0gZnVuY3Rpb24gKGZyb21FbGVtZW50LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICBtb3ZlRm9jdXMoZnJvbUVsZW1lbnQsIG9wdGlvbnMsIGZ1bmN0aW9uIChfYSwgY3ljbGUpIHtcbiAgICAgICAgdmFyIG5leHQgPSBfYS5uZXh0LCBmaXJzdCA9IF9hLmZpcnN0O1xuICAgICAgICByZXR1cm4gbmV4dCB8fCAoY3ljbGUgJiYgZmlyc3QpO1xuICAgIH0pO1xufTtcbi8qKlxuICogZm9jdXNlcyBwcmV2IGVsZW1lbnQgaW4gdGhlIHRhYiBvcmRlclxuICogQHBhcmFtIGZyb21FbGVtZW50IC0gY29tbW9uIHBhcmVudCB0byBzY29wZSBhY3RpdmUgZWxlbWVudCBzZWFyY2ggb3IgdGFiIGN5Y2xlIG9yZGVyXG4gKiBAcGFyYW0ge0ZvY3VzTmV4dE9wdGlvbnN9IFtvcHRpb25zXSAtIGZvY3VzIG9wdGlvbnNcbiAqL1xuZXhwb3J0IHZhciBmb2N1c1ByZXZFbGVtZW50ID0gZnVuY3Rpb24gKGZyb21FbGVtZW50LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICBtb3ZlRm9jdXMoZnJvbUVsZW1lbnQsIG9wdGlvbnMsIGZ1bmN0aW9uIChfYSwgY3ljbGUpIHtcbiAgICAgICAgdmFyIHByZXYgPSBfYS5wcmV2LCBsYXN0ID0gX2EubGFzdDtcbiAgICAgICAgcmV0dXJuIHByZXYgfHwgKGN5Y2xlICYmIGxhc3QpO1xuICAgIH0pO1xufTtcbnZhciBwaWNrQm91bmRhcnkgPSBmdW5jdGlvbiAoc2NvcGUsIG9wdGlvbnMsIHdoYXQpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIGJvdW5kYXJ5ID0gZ2V0Qm91bmRhcnkoc2NvcGUsIChfYSA9IG9wdGlvbnMub25seVRhYmJhYmxlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0cnVlKTtcbiAgICB2YXIgbm9kZSA9IGJvdW5kYXJ5W3doYXRdO1xuICAgIGlmIChub2RlKSB7XG4gICAgICAgIGZvY3VzT24obm9kZS5ub2RlLCBvcHRpb25zLmZvY3VzT3B0aW9ucyk7XG4gICAgfVxufTtcbi8qKlxuICogZm9jdXNlcyBmaXJzdCBlbGVtZW50IGluIHRoZSB0YWItb3JkZXJcbiAqIEBwYXJhbSB7Rm9jdXNOZXh0T3B0aW9uc30gb3B0aW9ucyAtIGZvY3VzIG9wdGlvbnNcbiAqL1xuZXhwb3J0IHZhciBmb2N1c0ZpcnN0RWxlbWVudCA9IGZ1bmN0aW9uIChzY29wZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcGlja0JvdW5kYXJ5KHNjb3BlLCBvcHRpb25zLCAnZmlyc3QnKTtcbn07XG4vKipcbiAqIGZvY3VzZXMgbGFzdCBlbGVtZW50IGluIHRoZSB0YWIgb3JkZXJcbiAqIEBwYXJhbSB7Rm9jdXNOZXh0T3B0aW9uc30gb3B0aW9ucyAtIGZvY3VzIG9wdGlvbnNcbiAqL1xuZXhwb3J0IHZhciBmb2N1c0xhc3RFbGVtZW50ID0gZnVuY3Rpb24gKHNjb3BlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICBwaWNrQm91bmRhcnkoc2NvcGUsIG9wdGlvbnMsICdsYXN0Jyk7XG59O1xuIiwgImltcG9ydCB7IGV4cG9ydFNpZGVjYXIgfSBmcm9tICd1c2Utc2lkZWNhcic7XG5pbXBvcnQgRm9jdXNUcmFwIGZyb20gJy4vVHJhcCc7XG5pbXBvcnQgeyBtZWRpdW1TaWRlY2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xuZXhwb3J0IGRlZmF1bHQgZXhwb3J0U2lkZWNhcihtZWRpdW1TaWRlY2FyLCBGb2N1c1RyYXApOyIsICJpbXBvcnQgeyBfX3NwcmVhZEFycmF5IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGxCYXIgfSBmcm9tICdyZWFjdC1yZW1vdmUtc2Nyb2xsLWJhcic7XG5pbXBvcnQgeyBzdHlsZVNpbmdsZXRvbiB9IGZyb20gJ3JlYWN0LXN0eWxlLXNpbmdsZXRvbic7XG5pbXBvcnQgeyBub25QYXNzaXZlIH0gZnJvbSAnLi9hZ2dyZXNpdmVDYXB0dXJlJztcbmltcG9ydCB7IGhhbmRsZVNjcm9sbCwgbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQgfSBmcm9tICcuL2hhbmRsZVNjcm9sbCc7XG5leHBvcnQgdmFyIGdldFRvdWNoWFkgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2NoYW5nZWRUb3VjaGVzJyBpbiBldmVudCA/IFtldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYLCBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZXSA6IFswLCAwXTtcbn07XG5leHBvcnQgdmFyIGdldERlbHRhWFkgPSBmdW5jdGlvbiAoZXZlbnQpIHsgcmV0dXJuIFtldmVudC5kZWx0YVgsIGV2ZW50LmRlbHRhWV07IH07XG52YXIgZXh0cmFjdFJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICByZXR1cm4gcmVmICYmICdjdXJyZW50JyBpbiByZWYgPyByZWYuY3VycmVudCA6IHJlZjtcbn07XG52YXIgZGVsdGFDb21wYXJlID0gZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuIHhbMF0gPT09IHlbMF0gJiYgeFsxXSA9PT0geVsxXTsgfTtcbnZhciBnZW5lcmF0ZVN0eWxlID0gZnVuY3Rpb24gKGlkKSB7IHJldHVybiBcIlxcbiAgLmJsb2NrLWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkLCBcIiB7cG9pbnRlci1ldmVudHM6IG5vbmU7fVxcbiAgLmFsbG93LWludGVyYWN0aXZpdHktXCIpLmNvbmNhdChpZCwgXCIge3BvaW50ZXItZXZlbnRzOiBhbGw7fVxcblwiKTsgfTtcbnZhciBpZENvdW50ZXIgPSAwO1xudmFyIGxvY2tTdGFjayA9IFtdO1xuZXhwb3J0IGZ1bmN0aW9uIFJlbW92ZVNjcm9sbFNpZGVDYXIocHJvcHMpIHtcbiAgICB2YXIgc2hvdWxkUHJldmVudFF1ZXVlID0gUmVhY3QudXNlUmVmKFtdKTtcbiAgICB2YXIgdG91Y2hTdGFydFJlZiA9IFJlYWN0LnVzZVJlZihbMCwgMF0pO1xuICAgIHZhciBhY3RpdmVBeGlzID0gUmVhY3QudXNlUmVmKCk7XG4gICAgdmFyIGlkID0gUmVhY3QudXNlU3RhdGUoaWRDb3VudGVyKyspWzBdO1xuICAgIHZhciBTdHlsZSA9IFJlYWN0LnVzZVN0YXRlKHN0eWxlU2luZ2xldG9uKVswXTtcbiAgICB2YXIgbGFzdFByb3BzID0gUmVhY3QudXNlUmVmKHByb3BzKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBsYXN0UHJvcHMuY3VycmVudCA9IHByb3BzO1xuICAgIH0sIFtwcm9wc10pO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwcm9wcy5pbmVydCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiYmxvY2staW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQpKTtcbiAgICAgICAgICAgIHZhciBhbGxvd18xID0gX19zcHJlYWRBcnJheShbcHJvcHMubG9ja1JlZi5jdXJyZW50XSwgKHByb3BzLnNoYXJkcyB8fCBbXSkubWFwKGV4dHJhY3RSZWYpLCB0cnVlKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgICAgICBhbGxvd18xLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKFwiYWxsb3ctaW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQpKTsgfSk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcImJsb2NrLWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7XG4gICAgICAgICAgICAgICAgYWxsb3dfMS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuY2xhc3NMaXN0LnJlbW92ZShcImFsbG93LWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7IH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfSwgW3Byb3BzLmluZXJ0LCBwcm9wcy5sb2NrUmVmLmN1cnJlbnQsIHByb3BzLnNoYXJkc10pO1xuICAgIHZhciBzaG91bGRDYW5jZWxFdmVudCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCwgcGFyZW50KSB7XG4gICAgICAgIGlmICgoJ3RvdWNoZXMnIGluIGV2ZW50ICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID09PSAyKSB8fCAoZXZlbnQudHlwZSA9PT0gJ3doZWVsJyAmJiBldmVudC5jdHJsS2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuICFsYXN0UHJvcHMuY3VycmVudC5hbGxvd1BpbmNoWm9vbTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG91Y2ggPSBnZXRUb3VjaFhZKGV2ZW50KTtcbiAgICAgICAgdmFyIHRvdWNoU3RhcnQgPSB0b3VjaFN0YXJ0UmVmLmN1cnJlbnQ7XG4gICAgICAgIHZhciBkZWx0YVggPSAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6IHRvdWNoU3RhcnRbMF0gLSB0b3VjaFswXTtcbiAgICAgICAgdmFyIGRlbHRhWSA9ICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDogdG91Y2hTdGFydFsxXSAtIHRvdWNoWzFdO1xuICAgICAgICB2YXIgY3VycmVudEF4aXM7XG4gICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIHZhciBtb3ZlRGlyZWN0aW9uID0gTWF0aC5hYnMoZGVsdGFYKSA+IE1hdGguYWJzKGRlbHRhWSkgPyAnaCcgOiAndic7XG4gICAgICAgIC8vIGFsbG93IGhvcml6b250YWwgdG91Y2ggbW92ZSBvbiBSYW5nZSBpbnB1dHMuIFRoZXkgd2lsbCBub3QgY2F1c2UgYW55IHNjcm9sbFxuICAgICAgICBpZiAoJ3RvdWNoZXMnIGluIGV2ZW50ICYmIG1vdmVEaXJlY3Rpb24gPT09ICdoJyAmJiB0YXJnZXQudHlwZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uID0gbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQobW92ZURpcmVjdGlvbiwgdGFyZ2V0KTtcbiAgICAgICAgaWYgKCFjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbikge1xuICAgICAgICAgICAgY3VycmVudEF4aXMgPSBtb3ZlRGlyZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudEF4aXMgPSBtb3ZlRGlyZWN0aW9uID09PSAndicgPyAnaCcgOiAndic7XG4gICAgICAgICAgICBjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uID0gbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQobW92ZURpcmVjdGlvbiwgdGFyZ2V0KTtcbiAgICAgICAgICAgIC8vIG90aGVyIGF4aXMgbWlnaHQgYmUgbm90IHNjcm9sbGFibGVcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFjdGl2ZUF4aXMuY3VycmVudCAmJiAnY2hhbmdlZFRvdWNoZXMnIGluIGV2ZW50ICYmIChkZWx0YVggfHwgZGVsdGFZKSkge1xuICAgICAgICAgICAgYWN0aXZlQXhpcy5jdXJyZW50ID0gY3VycmVudEF4aXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJyZW50QXhpcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNhbmNlbGluZ0F4aXMgPSBhY3RpdmVBeGlzLmN1cnJlbnQgfHwgY3VycmVudEF4aXM7XG4gICAgICAgIHJldHVybiBoYW5kbGVTY3JvbGwoY2FuY2VsaW5nQXhpcywgcGFyZW50LCBldmVudCwgY2FuY2VsaW5nQXhpcyA9PT0gJ2gnID8gZGVsdGFYIDogZGVsdGFZLCB0cnVlKTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNob3VsZFByZXZlbnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoX2V2ZW50KSB7XG4gICAgICAgIHZhciBldmVudCA9IF9ldmVudDtcbiAgICAgICAgaWYgKCFsb2NrU3RhY2subGVuZ3RoIHx8IGxvY2tTdGFja1tsb2NrU3RhY2subGVuZ3RoIC0gMV0gIT09IFN0eWxlKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIGxhc3QgYWN0aXZlXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlbHRhID0gJ2RlbHRhWScgaW4gZXZlbnQgPyBnZXREZWx0YVhZKGV2ZW50KSA6IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICB2YXIgc291cmNlRXZlbnQgPSBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUubmFtZSA9PT0gZXZlbnQudHlwZSAmJiAoZS50YXJnZXQgPT09IGV2ZW50LnRhcmdldCB8fCBldmVudC50YXJnZXQgPT09IGUuc2hhZG93UGFyZW50KSAmJiBkZWx0YUNvbXBhcmUoZS5kZWx0YSwgZGVsdGEpOyB9KVswXTtcbiAgICAgICAgLy8gc2VsZiBldmVudCwgYW5kIHNob3VsZCBiZSBjYW5jZWxlZFxuICAgICAgICBpZiAoc291cmNlRXZlbnQgJiYgc291cmNlRXZlbnQuc2hvdWxkKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3V0c2lkZSBvciBzaGFyZCBldmVudFxuICAgICAgICBpZiAoIXNvdXJjZUV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgc2hhcmROb2RlcyA9IChsYXN0UHJvcHMuY3VycmVudC5zaGFyZHMgfHwgW10pXG4gICAgICAgICAgICAgICAgLm1hcChleHRyYWN0UmVmKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7IH0pO1xuICAgICAgICAgICAgdmFyIHNob3VsZFN0b3AgPSBzaGFyZE5vZGVzLmxlbmd0aCA+IDAgPyBzaG91bGRDYW5jZWxFdmVudChldmVudCwgc2hhcmROb2Rlc1swXSkgOiAhbGFzdFByb3BzLmN1cnJlbnQubm9Jc29sYXRpb247XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RvcCkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHZhciBzaG91bGRDYW5jZWwgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAobmFtZSwgZGVsdGEsIHRhcmdldCwgc2hvdWxkKSB7XG4gICAgICAgIHZhciBldmVudCA9IHsgbmFtZTogbmFtZSwgZGVsdGE6IGRlbHRhLCB0YXJnZXQ6IHRhcmdldCwgc2hvdWxkOiBzaG91bGQsIHNoYWRvd1BhcmVudDogZ2V0T3V0ZXJtb3N0U2hhZG93UGFyZW50KHRhcmdldCkgfTtcbiAgICAgICAgc2hvdWxkUHJldmVudFF1ZXVlLmN1cnJlbnQucHVzaChldmVudCk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hvdWxkUHJldmVudFF1ZXVlLmN1cnJlbnQgPSBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgIT09IGV2ZW50OyB9KTtcbiAgICAgICAgfSwgMSk7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxUb3VjaFN0YXJ0ID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRvdWNoU3RhcnRSZWYuY3VycmVudCA9IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICBhY3RpdmVBeGlzLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxXaGVlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBzaG91bGRDYW5jZWwoZXZlbnQudHlwZSwgZ2V0RGVsdGFYWShldmVudCksIGV2ZW50LnRhcmdldCwgc2hvdWxkQ2FuY2VsRXZlbnQoZXZlbnQsIHByb3BzLmxvY2tSZWYuY3VycmVudCkpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2Nyb2xsVG91Y2hNb3ZlID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHNob3VsZENhbmNlbChldmVudC50eXBlLCBnZXRUb3VjaFhZKGV2ZW50KSwgZXZlbnQudGFyZ2V0LCBzaG91bGRDYW5jZWxFdmVudChldmVudCwgcHJvcHMubG9ja1JlZi5jdXJyZW50KSk7XG4gICAgfSwgW10pO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxvY2tTdGFjay5wdXNoKFN0eWxlKTtcbiAgICAgICAgcHJvcHMuc2V0Q2FsbGJhY2tzKHtcbiAgICAgICAgICAgIG9uU2Nyb2xsQ2FwdHVyZTogc2Nyb2xsV2hlZWwsXG4gICAgICAgICAgICBvbldoZWVsQ2FwdHVyZTogc2Nyb2xsV2hlZWwsXG4gICAgICAgICAgICBvblRvdWNoTW92ZUNhcHR1cmU6IHNjcm9sbFRvdWNoTW92ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHNob3VsZFByZXZlbnQsIG5vblBhc3NpdmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc2Nyb2xsVG91Y2hTdGFydCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2NrU3RhY2sgPSBsb2NrU3RhY2suZmlsdGVyKGZ1bmN0aW9uIChpbnN0KSB7IHJldHVybiBpbnN0ICE9PSBTdHlsZTsgfSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIHNob3VsZFByZXZlbnQsIG5vblBhc3NpdmUpO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc2Nyb2xsVG91Y2hTdGFydCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHZhciByZW1vdmVTY3JvbGxCYXIgPSBwcm9wcy5yZW1vdmVTY3JvbGxCYXIsIGluZXJ0ID0gcHJvcHMuaW5lcnQ7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBpbmVydCA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGUsIHsgc3R5bGVzOiBnZW5lcmF0ZVN0eWxlKGlkKSB9KSA6IG51bGwsXG4gICAgICAgIHJlbW92ZVNjcm9sbEJhciA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVtb3ZlU2Nyb2xsQmFyLCB7IGdhcE1vZGU6IHByb3BzLmdhcE1vZGUgfSkgOiBudWxsKSk7XG59XG5mdW5jdGlvbiBnZXRPdXRlcm1vc3RTaGFkb3dQYXJlbnQobm9kZSkge1xuICAgIHZhciBzaGFkb3dQYXJlbnQgPSBudWxsO1xuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgc2hhZG93UGFyZW50ID0gbm9kZS5ob3N0O1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gc2hhZG93UGFyZW50O1xufVxuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlU2luZ2xldG9uIH0gZnJvbSAncmVhY3Qtc3R5bGUtc2luZ2xldG9uJztcbmltcG9ydCB7IGZ1bGxXaWR0aENsYXNzTmFtZSwgemVyb1JpZ2h0Q2xhc3NOYW1lLCBub1Njcm9sbGJhcnNDbGFzc05hbWUsIHJlbW92ZWRCYXJTaXplVmFyaWFibGUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXRHYXBXaWR0aCB9IGZyb20gJy4vdXRpbHMnO1xudmFyIFN0eWxlID0gc3R5bGVTaW5nbGV0b24oKTtcbmV4cG9ydCB2YXIgbG9ja0F0dHJpYnV0ZSA9ICdkYXRhLXNjcm9sbC1sb2NrZWQnO1xuLy8gaW1wb3J0YW50IHRpcCAtIG9uY2Ugd2UgbWVhc3VyZSBzY3JvbGxCYXIgd2lkdGggYW5kIHJlbW92ZSB0aGVtXG4vLyB3ZSBjb3VsZCBub3QgcmVwZWF0IHRoaXMgb3BlcmF0aW9uXG4vLyB0aHVzIHdlIGFyZSB1c2luZyBzdHlsZS1zaW5nbGV0b24gLSBvbmx5IHRoZSBmaXJzdCBcInlldCBjb3JyZWN0XCIgc3R5bGUgd2lsbCBiZSBhcHBsaWVkLlxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uIChfYSwgYWxsb3dSZWxhdGl2ZSwgZ2FwTW9kZSwgaW1wb3J0YW50KSB7XG4gICAgdmFyIGxlZnQgPSBfYS5sZWZ0LCB0b3AgPSBfYS50b3AsIHJpZ2h0ID0gX2EucmlnaHQsIGdhcCA9IF9hLmdhcDtcbiAgICBpZiAoZ2FwTW9kZSA9PT0gdm9pZCAwKSB7IGdhcE1vZGUgPSAnbWFyZ2luJzsgfVxuICAgIHJldHVybiBcIlxcbiAgLlwiLmNvbmNhdChub1Njcm9sbGJhcnNDbGFzc05hbWUsIFwiIHtcXG4gICBvdmVyZmxvdzogaGlkZGVuIFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICBwYWRkaW5nLXJpZ2h0OiBcIikuY29uY2F0KGdhcCwgXCJweCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBib2R5W1wiKS5jb25jYXQobG9ja0F0dHJpYnV0ZSwgXCJdIHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbiBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XFxuICAgIFwiKS5jb25jYXQoW1xuICAgICAgICBhbGxvd1JlbGF0aXZlICYmIFwicG9zaXRpb246IHJlbGF0aXZlIFwiLmNvbmNhdChpbXBvcnRhbnQsIFwiO1wiKSxcbiAgICAgICAgZ2FwTW9kZSA9PT0gJ21hcmdpbicgJiZcbiAgICAgICAgICAgIFwiXFxuICAgIHBhZGRpbmctbGVmdDogXCIuY29uY2F0KGxlZnQsIFwicHg7XFxuICAgIHBhZGRpbmctdG9wOiBcIikuY29uY2F0KHRvcCwgXCJweDtcXG4gICAgcGFkZGluZy1yaWdodDogXCIpLmNvbmNhdChyaWdodCwgXCJweDtcXG4gICAgbWFyZ2luLWxlZnQ6MDtcXG4gICAgbWFyZ2luLXRvcDowO1xcbiAgICBtYXJnaW4tcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICAgXCIpLFxuICAgICAgICBnYXBNb2RlID09PSAncGFkZGluZycgJiYgXCJwYWRkaW5nLXJpZ2h0OiBcIi5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcIiksXG4gICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcnKSwgXCJcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoemVyb1JpZ2h0Q2xhc3NOYW1lLCBcIiB7XFxuICAgIHJpZ2h0OiBcIikuY29uY2F0KGdhcCwgXCJweCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoemVyb1JpZ2h0Q2xhc3NOYW1lLCBcIiAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIHtcXG4gICAgcmlnaHQ6IDAgXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdChmdWxsV2lkdGhDbGFzc05hbWUsIFwiIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAgXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICBib2R5W1wiKS5jb25jYXQobG9ja0F0dHJpYnV0ZSwgXCJdIHtcXG4gICAgXCIpLmNvbmNhdChyZW1vdmVkQmFyU2l6ZVZhcmlhYmxlLCBcIjogXCIpLmNvbmNhdChnYXAsIFwicHg7XFxuICB9XFxuXCIpO1xufTtcbnZhciBnZXRDdXJyZW50VXNlQ291bnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY291bnRlciA9IHBhcnNlSW50KGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUpIHx8ICcwJywgMTApO1xuICAgIHJldHVybiBpc0Zpbml0ZShjb3VudGVyKSA/IGNvdW50ZXIgOiAwO1xufTtcbmV4cG9ydCB2YXIgdXNlTG9ja0F0dHJpYnV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZShsb2NrQXR0cmlidXRlLCAoZ2V0Q3VycmVudFVzZUNvdW50ZXIoKSArIDEpLnRvU3RyaW5nKCkpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5ld0NvdW50ZXIgPSBnZXRDdXJyZW50VXNlQ291bnRlcigpIC0gMTtcbiAgICAgICAgICAgIGlmIChuZXdDb3VudGVyIDw9IDApIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUF0dHJpYnV0ZShsb2NrQXR0cmlidXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUsIG5ld0NvdW50ZXIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xufTtcbi8qKlxuICogUmVtb3ZlcyBwYWdlIHNjcm9sbGJhciBhbmQgYmxvY2tzIHBhZ2Ugc2Nyb2xsIHdoZW4gbW91bnRlZFxuICovXG5leHBvcnQgdmFyIFJlbW92ZVNjcm9sbEJhciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBub1JlbGF0aXZlID0gX2Eubm9SZWxhdGl2ZSwgbm9JbXBvcnRhbnQgPSBfYS5ub0ltcG9ydGFudCwgX2IgPSBfYS5nYXBNb2RlLCBnYXBNb2RlID0gX2IgPT09IHZvaWQgMCA/ICdtYXJnaW4nIDogX2I7XG4gICAgdXNlTG9ja0F0dHJpYnV0ZSgpO1xuICAgIC8qXG4gICAgIGdhcCB3aWxsIGJlIG1lYXN1cmVkIG9uIGV2ZXJ5IGNvbXBvbmVudCBtb3VudFxuICAgICBob3dldmVyIGl0IHdpbGwgYmUgdXNlZCBvbmx5IGJ5IHRoZSBcImZpcnN0XCIgaW52b2NhdGlvblxuICAgICBkdWUgdG8gc2luZ2xldG9uIG5hdHVyZSBvZiA8U3R5bGVcbiAgICAgKi9cbiAgICB2YXIgZ2FwID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiBnZXRHYXBXaWR0aChnYXBNb2RlKTsgfSwgW2dhcE1vZGVdKTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IGdldFN0eWxlcyhnYXAsICFub1JlbGF0aXZlLCBnYXBNb2RlLCAhbm9JbXBvcnRhbnQgPyAnIWltcG9ydGFudCcgOiAnJykgfSk7XG59O1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlc2hlZXRTaW5nbGV0b24gfSBmcm9tICcuL3NpbmdsZXRvbic7XG4vKipcbiAqIGNyZWF0ZXMgYSBob29rIHRvIGNvbnRyb2wgc3R5bGUgc2luZ2xldG9uXG4gKiBAc2VlIHtAbGluayBzdHlsZVNpbmdsZXRvbn0gZm9yIGEgc2FmZXIgY29tcG9uZW50IHZlcnNpb25cbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHVzZVN0eWxlID0gc3R5bGVIb29rU2luZ2xldG9uKCk7XG4gKiAvLy9cbiAqIHVzZVN0eWxlKCdib2R5IHsgb3ZlcmZsb3c6IGhpZGRlbn0nKTtcbiAqL1xuZXhwb3J0IHZhciBzdHlsZUhvb2tTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNoZWV0ID0gc3R5bGVzaGVldFNpbmdsZXRvbigpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3R5bGVzLCBpc0R5bmFtaWMpIHtcbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNoZWV0LmFkZChzdHlsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzaGVldC5yZW1vdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtzdHlsZXMgJiYgaXNEeW5hbWljXSk7XG4gICAgfTtcbn07XG4iLCAidmFyIGN1cnJlbnROb25jZTtcbmV4cG9ydCB2YXIgc2V0Tm9uY2UgPSBmdW5jdGlvbiAobm9uY2UpIHtcbiAgICBjdXJyZW50Tm9uY2UgPSBub25jZTtcbn07XG5leHBvcnQgdmFyIGdldE5vbmNlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjdXJyZW50Tm9uY2UpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb25jZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIF9fd2VicGFja19ub25jZV9fO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsICJpbXBvcnQgeyBnZXROb25jZSB9IGZyb20gJ2dldC1ub25jZSc7XG5mdW5jdGlvbiBtYWtlU3R5bGVUYWcoKSB7XG4gICAgaWYgKCFkb2N1bWVudClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgdGFnLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgIHZhciBub25jZSA9IGdldE5vbmNlKCk7XG4gICAgaWYgKG5vbmNlKSB7XG4gICAgICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgbm9uY2UpO1xuICAgIH1cbiAgICByZXR1cm4gdGFnO1xufVxuZnVuY3Rpb24gaW5qZWN0U3R5bGVzKHRhZywgY3NzKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0YWcuc3R5bGVTaGVldCkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRhZy5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVUYWcodGFnKSB7XG4gICAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgaGVhZC5hcHBlbmRDaGlsZCh0YWcpO1xufVxuZXhwb3J0IHZhciBzdHlsZXNoZWV0U2luZ2xldG9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgc3R5bGVzaGVldCA9IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWRkOiBmdW5jdGlvbiAoc3R5bGUpIHtcbiAgICAgICAgICAgIGlmIChjb3VudGVyID09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoKHN0eWxlc2hlZXQgPSBtYWtlU3R5bGVUYWcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0U3R5bGVzKHN0eWxlc2hlZXQsIHN0eWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0U3R5bGVUYWcoc3R5bGVzaGVldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvdW50ZXItLTtcbiAgICAgICAgICAgIGlmICghY291bnRlciAmJiBzdHlsZXNoZWV0KSB7XG4gICAgICAgICAgICAgICAgc3R5bGVzaGVldC5wYXJlbnROb2RlICYmIHN0eWxlc2hlZXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZXNoZWV0KTtcbiAgICAgICAgICAgICAgICBzdHlsZXNoZWV0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufTtcbiIsICJpbXBvcnQgeyBzdHlsZUhvb2tTaW5nbGV0b24gfSBmcm9tICcuL2hvb2snO1xuLyoqXG4gKiBjcmVhdGUgYSBDb21wb25lbnQgdG8gYWRkIHN0eWxlcyBvbiBkZW1hbmRcbiAqIC0gc3R5bGVzIGFyZSBhZGRlZCB3aGVuIGZpcnN0IGluc3RhbmNlIGlzIG1vdW50ZWRcbiAqIC0gc3R5bGVzIGFyZSByZW1vdmVkIHdoZW4gdGhlIGxhc3QgaW5zdGFuY2UgaXMgdW5tb3VudGVkXG4gKiAtIGNoYW5naW5nIHN0eWxlcyBpbiBydW50aW1lIGRvZXMgbm90aGluZyB1bmxlc3MgZHluYW1pYyBpcyBzZXQuIEJ1dCB3aXRoIG11bHRpcGxlIGNvbXBvbmVudHMgdGhhdCBjYW4gbGVhZCB0byB0aGUgdW5kZWZpbmVkIGJlaGF2aW9yXG4gKi9cbmV4cG9ydCB2YXIgc3R5bGVTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVzZVN0eWxlID0gc3R5bGVIb29rU2luZ2xldG9uKCk7XG4gICAgdmFyIFNoZWV0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBzdHlsZXMgPSBfYS5zdHlsZXMsIGR5bmFtaWMgPSBfYS5keW5hbWljO1xuICAgICAgICB1c2VTdHlsZShzdHlsZXMsIGR5bmFtaWMpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBTaGVldDtcbn07XG4iLCAiZXhwb3J0IHZhciB6ZXJvR2FwID0ge1xuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGdhcDogMCxcbn07XG52YXIgcGFyc2UgPSBmdW5jdGlvbiAoeCkgeyByZXR1cm4gcGFyc2VJbnQoeCB8fCAnJywgMTApIHx8IDA7IH07XG52YXIgZ2V0T2Zmc2V0ID0gZnVuY3Rpb24gKGdhcE1vZGUpIHtcbiAgICB2YXIgY3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTtcbiAgICB2YXIgbGVmdCA9IGNzW2dhcE1vZGUgPT09ICdwYWRkaW5nJyA/ICdwYWRkaW5nTGVmdCcgOiAnbWFyZ2luTGVmdCddO1xuICAgIHZhciB0b3AgPSBjc1tnYXBNb2RlID09PSAncGFkZGluZycgPyAncGFkZGluZ1RvcCcgOiAnbWFyZ2luVG9wJ107XG4gICAgdmFyIHJpZ2h0ID0gY3NbZ2FwTW9kZSA9PT0gJ3BhZGRpbmcnID8gJ3BhZGRpbmdSaWdodCcgOiAnbWFyZ2luUmlnaHQnXTtcbiAgICByZXR1cm4gW3BhcnNlKGxlZnQpLCBwYXJzZSh0b3ApLCBwYXJzZShyaWdodCldO1xufTtcbmV4cG9ydCB2YXIgZ2V0R2FwV2lkdGggPSBmdW5jdGlvbiAoZ2FwTW9kZSkge1xuICAgIGlmIChnYXBNb2RlID09PSB2b2lkIDApIHsgZ2FwTW9kZSA9ICdtYXJnaW4nOyB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB6ZXJvR2FwO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0cyA9IGdldE9mZnNldChnYXBNb2RlKTtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICB2YXIgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBvZmZzZXRzWzBdLFxuICAgICAgICB0b3A6IG9mZnNldHNbMV0sXG4gICAgICAgIHJpZ2h0OiBvZmZzZXRzWzJdLFxuICAgICAgICBnYXA6IE1hdGgubWF4KDAsIHdpbmRvd1dpZHRoIC0gZG9jdW1lbnRXaWR0aCArIG9mZnNldHNbMl0gLSBvZmZzZXRzWzBdKSxcbiAgICB9O1xufTtcbiIsICJ2YXIgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlO1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdwYXNzaXZlJywge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcGFzc2l2ZVN1cHBvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCB2YXIgbm9uUGFzc2l2ZSA9IHBhc3NpdmVTdXBwb3J0ZWQgPyB7IHBhc3NpdmU6IGZhbHNlIH0gOiBmYWxzZTtcbiIsICJ2YXIgYWx3YXlzQ29udGFpbnNTY3JvbGwgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIHRleHRhcmVhIHdpbGwgYWx3YXlzIF9jb250YWluXyBzY3JvbGwgaW5zaWRlIHNlbGYuIEl0IG9ubHkgY2FuIGJlIGhpZGRlblxuICAgIHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdURVhUQVJFQSc7XG59O1xudmFyIGVsZW1lbnRDYW5CZVNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUsIG92ZXJmbG93KSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuICAgIHJldHVybiAoXG4gICAgLy8gbm90LW5vdC1zY3JvbGxhYmxlXG4gICAgc3R5bGVzW292ZXJmbG93XSAhPT0gJ2hpZGRlbicgJiZcbiAgICAgICAgLy8gY29udGFpbnMgc2Nyb2xsIGluc2lkZSBzZWxmXG4gICAgICAgICEoc3R5bGVzLm92ZXJmbG93WSA9PT0gc3R5bGVzLm92ZXJmbG93WCAmJiAhYWx3YXlzQ29udGFpbnNTY3JvbGwobm9kZSkgJiYgc3R5bGVzW292ZXJmbG93XSA9PT0gJ3Zpc2libGUnKSk7XG59O1xudmFyIGVsZW1lbnRDb3VsZEJlVlNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGVsZW1lbnRDYW5CZVNjcm9sbGVkKG5vZGUsICdvdmVyZmxvd1knKTsgfTtcbnZhciBlbGVtZW50Q291bGRCZUhTY3JvbGxlZCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBlbGVtZW50Q2FuQmVTY3JvbGxlZChub2RlLCAnb3ZlcmZsb3dYJyk7IH07XG5leHBvcnQgdmFyIGxvY2F0aW9uQ291bGRCZVNjcm9sbGVkID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICB2YXIgY3VycmVudCA9IG5vZGU7XG4gICAgZG8ge1xuICAgICAgICAvLyBTa2lwIG92ZXIgc2hhZG93IHJvb3RcbiAgICAgICAgaWYgKHR5cGVvZiBTaGFkb3dSb290ICE9PSAndW5kZWZpbmVkJyAmJiBjdXJyZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaXNTY3JvbGxhYmxlID0gZWxlbWVudENvdWxkQmVTY3JvbGxlZChheGlzLCBjdXJyZW50KTtcbiAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSkge1xuICAgICAgICAgICAgdmFyIF9hID0gZ2V0U2Nyb2xsVmFyaWFibGVzKGF4aXMsIGN1cnJlbnQpLCBzY3JvbGxIZWlnaHQgPSBfYVsxXSwgY2xpZW50SGVpZ2h0ID0gX2FbMl07XG4gICAgICAgICAgICBpZiAoc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50Tm9kZTtcbiAgICB9IHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQgIT09IG93bmVyRG9jdW1lbnQuYm9keSk7XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbnZhciBnZXRWU2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNjcm9sbFRvcCA9IF9hLnNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0ID0gX2Euc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgPSBfYS5jbGllbnRIZWlnaHQ7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgIGNsaWVudEhlaWdodCxcbiAgICBdO1xufTtcbnZhciBnZXRIU2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNjcm9sbExlZnQgPSBfYS5zY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCA9IF9hLnNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aCA9IF9hLmNsaWVudFdpZHRoO1xuICAgIHJldHVybiBbXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgICBjbGllbnRXaWR0aCxcbiAgICBdO1xufTtcbnZhciBlbGVtZW50Q291bGRCZVNjcm9sbGVkID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICByZXR1cm4gYXhpcyA9PT0gJ3YnID8gZWxlbWVudENvdWxkQmVWU2Nyb2xsZWQobm9kZSkgOiBlbGVtZW50Q291bGRCZUhTY3JvbGxlZChub2RlKTtcbn07XG52YXIgZ2V0U2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICByZXR1cm4gYXhpcyA9PT0gJ3YnID8gZ2V0VlNjcm9sbFZhcmlhYmxlcyhub2RlKSA6IGdldEhTY3JvbGxWYXJpYWJsZXMobm9kZSk7XG59O1xudmFyIGdldERpcmVjdGlvbkZhY3RvciA9IGZ1bmN0aW9uIChheGlzLCBkaXJlY3Rpb24pIHtcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgZWxlbWVudCdzIGRpcmVjdGlvbiBpcyBydGwgKHJpZ2h0LXRvLWxlZnQpLCB0aGVuIHNjcm9sbExlZnQgaXMgMCB3aGVuIHRoZSBzY3JvbGxiYXIgaXMgYXQgaXRzIHJpZ2h0bW9zdCBwb3NpdGlvbixcbiAgICAgKiBhbmQgdGhlbiBpbmNyZWFzaW5nbHkgbmVnYXRpdmUgYXMgeW91IHNjcm9sbCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQuXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9zY3JvbGxMZWZ0XG4gICAgICovXG4gICAgcmV0dXJuIGF4aXMgPT09ICdoJyAmJiBkaXJlY3Rpb24gPT09ICdydGwnID8gLTEgOiAxO1xufTtcbmV4cG9ydCB2YXIgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKGF4aXMsIGVuZFRhcmdldCwgZXZlbnQsIHNvdXJjZURlbHRhLCBub092ZXJzY3JvbGwpIHtcbiAgICB2YXIgZGlyZWN0aW9uRmFjdG9yID0gZ2V0RGlyZWN0aW9uRmFjdG9yKGF4aXMsIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVuZFRhcmdldCkuZGlyZWN0aW9uKTtcbiAgICB2YXIgZGVsdGEgPSBkaXJlY3Rpb25GYWN0b3IgKiBzb3VyY2VEZWx0YTtcbiAgICAvLyBmaW5kIHNjcm9sbGFibGUgdGFyZ2V0XG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICB2YXIgdGFyZ2V0SW5Mb2NrID0gZW5kVGFyZ2V0LmNvbnRhaW5zKHRhcmdldCk7XG4gICAgdmFyIHNob3VsZENhbmNlbFNjcm9sbCA9IGZhbHNlO1xuICAgIHZhciBpc0RlbHRhUG9zaXRpdmUgPSBkZWx0YSA+IDA7XG4gICAgdmFyIGF2YWlsYWJsZVNjcm9sbCA9IDA7XG4gICAgdmFyIGF2YWlsYWJsZVNjcm9sbFRvcCA9IDA7XG4gICAgZG8ge1xuICAgICAgICB2YXIgX2EgPSBnZXRTY3JvbGxWYXJpYWJsZXMoYXhpcywgdGFyZ2V0KSwgcG9zaXRpb24gPSBfYVswXSwgc2Nyb2xsXzEgPSBfYVsxXSwgY2FwYWNpdHkgPSBfYVsyXTtcbiAgICAgICAgdmFyIGVsZW1lbnRTY3JvbGwgPSBzY3JvbGxfMSAtIGNhcGFjaXR5IC0gZGlyZWN0aW9uRmFjdG9yICogcG9zaXRpb247XG4gICAgICAgIGlmIChwb3NpdGlvbiB8fCBlbGVtZW50U2Nyb2xsKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudENvdWxkQmVTY3JvbGxlZChheGlzLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlU2Nyb2xsICs9IGVsZW1lbnRTY3JvbGw7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlU2Nyb2xsVG9wICs9IHBvc2l0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoXG4gICAgLy8gcG9ydGFsZWQgY29udGVudFxuICAgICghdGFyZ2V0SW5Mb2NrICYmIHRhcmdldCAhPT0gZG9jdW1lbnQuYm9keSkgfHxcbiAgICAgICAgLy8gc2VsZiBjb250ZW50XG4gICAgICAgICh0YXJnZXRJbkxvY2sgJiYgKGVuZFRhcmdldC5jb250YWlucyh0YXJnZXQpIHx8IGVuZFRhcmdldCA9PT0gdGFyZ2V0KSkpO1xuICAgIC8vIGhhbmRsZSBlcHNpbG9uIGFyb3VuZCAwIChub24gc3RhbmRhcmQgem9vbSBsZXZlbHMpXG4gICAgaWYgKGlzRGVsdGFQb3NpdGl2ZSAmJlxuICAgICAgICAoKG5vT3ZlcnNjcm9sbCAmJiBNYXRoLmFicyhhdmFpbGFibGVTY3JvbGwpIDwgMSkgfHwgKCFub092ZXJzY3JvbGwgJiYgZGVsdGEgPiBhdmFpbGFibGVTY3JvbGwpKSkge1xuICAgICAgICBzaG91bGRDYW5jZWxTY3JvbGwgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmICghaXNEZWx0YVBvc2l0aXZlICYmXG4gICAgICAgICgobm9PdmVyc2Nyb2xsICYmIE1hdGguYWJzKGF2YWlsYWJsZVNjcm9sbFRvcCkgPCAxKSB8fCAoIW5vT3ZlcnNjcm9sbCAmJiAtZGVsdGEgPiBhdmFpbGFibGVTY3JvbGxUb3ApKSkge1xuICAgICAgICBzaG91bGRDYW5jZWxTY3JvbGwgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc2hvdWxkQ2FuY2VsU2Nyb2xsO1xufTtcbiIsICJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0IHsgUmVtb3ZlU2Nyb2xsU2lkZUNhciB9IGZyb20gJy4vU2lkZUVmZmVjdCc7XG5pbXBvcnQgeyBlZmZlY3RDYXIgfSBmcm9tICcuL21lZGl1bSc7XG5leHBvcnQgZGVmYXVsdCBleHBvcnRTaWRlY2FyKGVmZmVjdENhciwgUmVtb3ZlU2Nyb2xsU2lkZUNhcik7XG4iLCAiaW1wb3J0IHsgX19zcHJlYWRBcnJheXMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGhpZGVPdGhlcnMgfSBmcm9tICdhcmlhLWhpZGRlbic7XG5pbXBvcnQgeyBJbnRlcmFjdGl2aXR5RGlzYWJsZXIgfSBmcm9tICcuL0ludGVyYWN0aXZpdHlEaXNhYmxlcic7XG5pbXBvcnQgeyBmb2N1c0hpZGRlbk1hcmtlciB9IGZyb20gJy4vbWVkaXVtJztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbnZhciBleHRyYWN0UmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgIHJldHVybiAnY3VycmVudCcgaW4gcmVmID8gcmVmLmN1cnJlbnQgOiByZWY7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEVmZmVjdChfYSkge1xuICAgIHZhciBzZXRMb2NrUHJvcHMgPSBfYS5zZXRMb2NrUHJvcHMsIG9uRXNjYXBlS2V5ID0gX2Eub25Fc2NhcGVLZXksIG9uQ2xpY2tPdXRzaWRlID0gX2Eub25DbGlja091dHNpZGUsIHNoYXJkcyA9IF9hLnNoYXJkcywgb25BY3RpdmF0aW9uID0gX2Eub25BY3RpdmF0aW9uLCBvbkRlYWN0aXZhdGlvbiA9IF9hLm9uRGVhY3RpdmF0aW9uLCBub0lzb2xhdGlvbiA9IF9hLm5vSXNvbGF0aW9uO1xuICAgIHZhciBfYiA9IHVzZVN0YXRlKHVuZGVmaW5lZCksIGFjdGl2ZU5vZGUgPSBfYlswXSwgc2V0QWN0aXZlTm9kZSA9IF9iWzFdO1xuICAgIHZhciBsYXN0RXZlbnRUYXJnZXQgPSB1c2VSZWYobnVsbCk7XG4gICAgdmFyIG1vdXNlVG91Y2hlcyA9IHVzZVJlZigwKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoKGV2ZW50LmNvZGUgPT09ICdFc2NhcGUnIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleSA9PT0gJ0VzY2FwZScgfHxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5Q29kZSA9PT0gMjcpICYmXG4gICAgICAgICAgICAgICAgICAgIG9uRXNjYXBlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXNjYXBlS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHxcbiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQgPT09IGxhc3RFdmVudFRhcmdldC5jdXJyZW50IHx8XG4gICAgICAgICAgICAgICAgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCAmJiBldmVudC5idXR0b24gIT09IDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNoYXJkcyAmJlxuICAgICAgICAgICAgICAgIHNoYXJkc1xuICAgICAgICAgICAgICAgICAgICAubWFwKGV4dHJhY3RSZWYpXG4gICAgICAgICAgICAgICAgICAgIC5zb21lKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAobm9kZSAmJiBub2RlLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID09PSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob25DbGlja091dHNpZGUpIHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrT3V0c2lkZShldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIG9uTW91c2VEb3duKGV2ZW50KTtcbiAgICAgICAgICAgIG1vdXNlVG91Y2hlcy5jdXJyZW50ID0gZXZlbnQudG91Y2hlcy5sZW5ndGg7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvblRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBtb3VzZVRvdWNoZXMuY3VycmVudCA9IGV2ZW50LnRvdWNoZXMubGVuZ3RoO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbk1vdXNlRG93bik7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIG9uVG91Y2hFbmQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sIFthY3RpdmVOb2RlLCBvbkNsaWNrT3V0c2lkZSwgb25Fc2NhcGVLZXldKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgaWYgKG9uQWN0aXZhdGlvbikge1xuICAgICAgICAgICAgICAgIG9uQWN0aXZhdGlvbihhY3RpdmVOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9uRGVhY3RpdmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRGVhY3RpdmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sIFshIWFjdGl2ZU5vZGVdKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3VuZG8gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgICAgICB2YXIgdW5tb3VudGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBvbk5vZGVBY3RpdmF0aW9uID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIGlmICghbm9Jc29sYXRpb24pIHtcbiAgICAgICAgICAgICAgICBfdW5kbyA9IGhpZGVPdGhlcnMoX19zcHJlYWRBcnJheXMoW25vZGVdLCAoc2hhcmRzIHx8IFtdKS5tYXAoZXh0cmFjdFJlZikpLCBkb2N1bWVudC5ib2R5LCBmb2N1c0hpZGRlbk1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRBY3RpdmVOb2RlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGU7IH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb25Ob2RlRGVhY3RpdmF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3VuZG8oKTtcbiAgICAgICAgICAgIGlmICghdW5tb3VudGVkKSB7XG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlTm9kZShudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2V0TG9ja1Byb3BzKHtcbiAgICAgICAgICAgIG9uTW91c2VEb3duOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGxhc3RFdmVudFRhcmdldC5jdXJyZW50ID0gZS50YXJnZXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Ub3VjaFN0YXJ0OiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGxhc3RFdmVudFRhcmdldC5jdXJyZW50ID0gZS50YXJnZXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25BY3RpdmF0aW9uOiBvbk5vZGVBY3RpdmF0aW9uLFxuICAgICAgICAgICAgb25EZWFjdGl2YXRpb246IG9uTm9kZURlYWN0aXZhdGlvblxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHVubW91bnRlZCA9IHRydWU7XG4gICAgICAgICAgICBzZXRMb2NrUHJvcHMoZmFsc2UpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJbnRlcmFjdGl2aXR5RGlzYWJsZXIsIG51bGwpO1xufVxuIiwgInZhciBnZXREZWZhdWx0UGFyZW50ID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0KSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBzYW1wbGVUYXJnZXQgPSBBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0WzBdIDogb3JpZ2luYWxUYXJnZXQ7XG4gICAgcmV0dXJuIHNhbXBsZVRhcmdldC5vd25lckRvY3VtZW50LmJvZHk7XG59O1xudmFyIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xudmFyIHVuY29udHJvbGxlZE5vZGVzID0gbmV3IFdlYWtNYXAoKTtcbnZhciBtYXJrZXJNYXAgPSB7fTtcbnZhciBsb2NrQ291bnQgPSAwO1xudmFyIHVud3JhcEhvc3QgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlICYmIChub2RlLmhvc3QgfHwgdW53cmFwSG9zdChub2RlLnBhcmVudE5vZGUpKTtcbn07XG52YXIgY29ycmVjdFRhcmdldHMgPSBmdW5jdGlvbiAocGFyZW50LCB0YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRhcmdldHNcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChwYXJlbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29ycmVjdGVkVGFyZ2V0ID0gdW53cmFwSG9zdCh0YXJnZXQpO1xuICAgICAgICBpZiAoY29ycmVjdGVkVGFyZ2V0ICYmIHBhcmVudC5jb250YWlucyhjb3JyZWN0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29ycmVjdGVkVGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2FyaWEtaGlkZGVuJywgdGFyZ2V0LCAnaW4gbm90IGNvbnRhaW5lZCBpbnNpZGUnLCBwYXJlbnQsICcuIERvaW5nIG5vdGhpbmcnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4gQm9vbGVhbih4KTsgfSk7XG59O1xuLyoqXG4gKiBNYXJrcyBldmVyeXRoaW5nIGV4Y2VwdCBnaXZlbiBub2RlKG9yIG5vZGVzKSBhcyBhcmlhLWhpZGRlblxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gW2NvbnRyb2xBdHRyaWJ1dGVdIC0gaHRtbCBBdHRyaWJ1dGUgdG8gY29udHJvbFxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbnZhciBhcHBseUF0dHJpYnV0ZVRvT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lLCBjb250cm9sQXR0cmlidXRlKSB7XG4gICAgdmFyIHRhcmdldHMgPSBjb3JyZWN0VGFyZ2V0cyhwYXJlbnROb2RlLCBBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0IDogW29yaWdpbmFsVGFyZ2V0XSk7XG4gICAgaWYgKCFtYXJrZXJNYXBbbWFya2VyTmFtZV0pIHtcbiAgICAgICAgbWFya2VyTWFwW21hcmtlck5hbWVdID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG4gICAgdmFyIG1hcmtlckNvdW50ZXIgPSBtYXJrZXJNYXBbbWFya2VyTmFtZV07XG4gICAgdmFyIGhpZGRlbk5vZGVzID0gW107XG4gICAgdmFyIGVsZW1lbnRzVG9LZWVwID0gbmV3IFNldCgpO1xuICAgIHZhciBlbGVtZW50c1RvU3RvcCA9IG5ldyBTZXQodGFyZ2V0cyk7XG4gICAgdmFyIGtlZXAgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgaWYgKCFlbCB8fCBlbGVtZW50c1RvS2VlcC5oYXMoZWwpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudHNUb0tlZXAuYWRkKGVsKTtcbiAgICAgICAga2VlcChlbC5wYXJlbnROb2RlKTtcbiAgICB9O1xuICAgIHRhcmdldHMuZm9yRWFjaChrZWVwKTtcbiAgICB2YXIgZGVlcCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKCFwYXJlbnQgfHwgZWxlbWVudHNUb1N0b3AuaGFzKHBhcmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHBhcmVudC5jaGlsZHJlbiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1RvS2VlcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBkZWVwKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBub2RlLmdldEF0dHJpYnV0ZShjb250cm9sQXR0cmlidXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFscmVhZHlIaWRkZW4gPSBhdHRyICE9PSBudWxsICYmIGF0dHIgIT09ICdmYWxzZSc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudGVyVmFsdWUgPSAoY291bnRlck1hcC5nZXQobm9kZSkgfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyVmFsdWUgPSAobWFya2VyQ291bnRlci5nZXQobm9kZSkgfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyTWFwLnNldChub2RlLCBjb3VudGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb3VudGVyLnNldChub2RlLCBtYXJrZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbk5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyVmFsdWUgPT09IDEgJiYgYWxyZWFkeUhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5jb250cm9sbGVkTm9kZXMuc2V0KG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXJrZXJWYWx1ZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobWFya2VyTmFtZSwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlIaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignYXJpYS1oaWRkZW46IGNhbm5vdCBvcGVyYXRlIG9uICcsIG5vZGUsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBkZWVwKHBhcmVudE5vZGUpO1xuICAgIGVsZW1lbnRzVG9LZWVwLmNsZWFyKCk7XG4gICAgbG9ja0NvdW50Kys7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGlkZGVuTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgdmFyIGNvdW50ZXJWYWx1ZSA9IGNvdW50ZXJNYXAuZ2V0KG5vZGUpIC0gMTtcbiAgICAgICAgICAgIHZhciBtYXJrZXJWYWx1ZSA9IG1hcmtlckNvdW50ZXIuZ2V0KG5vZGUpIC0gMTtcbiAgICAgICAgICAgIGNvdW50ZXJNYXAuc2V0KG5vZGUsIGNvdW50ZXJWYWx1ZSk7XG4gICAgICAgICAgICBtYXJrZXJDb3VudGVyLnNldChub2RlLCBtYXJrZXJWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWNvdW50ZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghdW5jb250cm9sbGVkTm9kZXMuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1bmNvbnRyb2xsZWROb2Rlcy5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1hcmtlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobWFya2VyTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2NrQ291bnQtLTtcbiAgICAgICAgaWYgKCFsb2NrQ291bnQpIHtcbiAgICAgICAgICAgIC8vIGNsZWFyXG4gICAgICAgICAgICBjb3VudGVyTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgICAgIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgdW5jb250cm9sbGVkTm9kZXMgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgbWFya2VyTWFwID0ge307XG4gICAgICAgIH1cbiAgICB9O1xufTtcbi8qKlxuICogTWFya3MgZXZlcnl0aGluZyBleGNlcHQgZ2l2ZW4gbm9kZShvciBub2RlcykgYXMgYXJpYS1oaWRkZW5cbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbmV4cG9ydCB2YXIgaGlkZU90aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSkge1xuICAgIGlmIChtYXJrZXJOYW1lID09PSB2b2lkIDApIHsgbWFya2VyTmFtZSA9ICdkYXRhLWFyaWEtaGlkZGVuJzsgfVxuICAgIHZhciB0YXJnZXRzID0gQXJyYXkuZnJvbShBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0IDogW29yaWdpbmFsVGFyZ2V0XSk7XG4gICAgdmFyIGFjdGl2ZVBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IGdldERlZmF1bHRQYXJlbnQob3JpZ2luYWxUYXJnZXQpO1xuICAgIGlmICghYWN0aXZlUGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfTtcbiAgICB9XG4gICAgLy8gd2Ugc2hvdWxkIG5vdCBoaWRlIGFyaWFMaXZlIGVsZW1lbnRzIC0gaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS9hcmlhLWhpZGRlbi9pc3N1ZXMvMTBcbiAgICB0YXJnZXRzLnB1c2guYXBwbHkodGFyZ2V0cywgQXJyYXkuZnJvbShhY3RpdmVQYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1thcmlhLWxpdmVdJykpKTtcbiAgICByZXR1cm4gYXBwbHlBdHRyaWJ1dGVUb090aGVycyh0YXJnZXRzLCBhY3RpdmVQYXJlbnROb2RlLCBtYXJrZXJOYW1lLCAnYXJpYS1oaWRkZW4nKTtcbn07XG4vKipcbiAqIE1hcmtzIGV2ZXJ5dGhpbmcgZXhjZXB0IGdpdmVuIG5vZGUob3Igbm9kZXMpIGFzIGluZXJ0XG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEByZXR1cm4ge1VuZG99IHVuZG8gY29tbWFuZFxuICovXG5leHBvcnQgdmFyIGluZXJ0T3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKSB7XG4gICAgaWYgKG1hcmtlck5hbWUgPT09IHZvaWQgMCkgeyBtYXJrZXJOYW1lID0gJ2RhdGEtaW5lcnQtZWQnOyB9XG4gICAgdmFyIGFjdGl2ZVBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IGdldERlZmF1bHRQYXJlbnQob3JpZ2luYWxUYXJnZXQpO1xuICAgIGlmICghYWN0aXZlUGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfTtcbiAgICB9XG4gICAgcmV0dXJuIGFwcGx5QXR0cmlidXRlVG9PdGhlcnMob3JpZ2luYWxUYXJnZXQsIGFjdGl2ZVBhcmVudE5vZGUsIG1hcmtlck5hbWUsICdpbmVydCcpO1xufTtcbi8qKlxuICogQHJldHVybnMgaWYgY3VycmVudCBicm93c2VyIHN1cHBvcnRzIGluZXJ0XG4gKi9cbmV4cG9ydCB2YXIgc3VwcG9ydHNJbmVydCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBIVE1MRWxlbWVudC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoJ2luZXJ0Jyk7XG59O1xuLyoqXG4gKiBBdXRvbWF0aWMgZnVuY3Rpb24gdG8gXCJzdXBwcmVzc1wiIERPTSBlbGVtZW50cyAtIF9oaWRlXyBvciBfaW5lcnRfIGluIHRoZSBiZXN0IHBvc3NpYmxlIHdheVxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xuZXhwb3J0IHZhciBzdXBwcmVzc090aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSkge1xuICAgIGlmIChtYXJrZXJOYW1lID09PSB2b2lkIDApIHsgbWFya2VyTmFtZSA9ICdkYXRhLXN1cHByZXNzZWQnOyB9XG4gICAgcmV0dXJuIChzdXBwb3J0c0luZXJ0KCkgPyBpbmVydE90aGVycyA6IGhpZGVPdGhlcnMpKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKTtcbn07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgZm9jdXNIaWRkZW5NYXJrZXIgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgU3R5bGUgPSBzdHlsZVNpbmdsZXRvbigpO1xudmFyIHN0eWxlcyA9IFwiXFxuIFtcIiArIGZvY3VzSGlkZGVuTWFya2VyICsgXCJdIHtcXG4gICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xcbiB9XFxuXCI7XG5leHBvcnQgdmFyIEludGVyYWN0aXZpdHlEaXNhYmxlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGUsIHsgc3R5bGVzOiBzdHlsZXMgfSk7IH07XG4iLCAiaW1wb3J0IHsgZXhwb3J0U2lkZWNhciB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmltcG9ydCAncmVhY3QtZm9jdXMtbG9jay9zaWRlY2FyJztcbmltcG9ydCAncmVhY3QtcmVtb3ZlLXNjcm9sbC9zaWRlY2FyJztcbmltcG9ydCB7IEVmZmVjdCB9IGZyb20gJy4vRWZmZWN0JztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbmV4cG9ydCBkZWZhdWx0IGV4cG9ydFNpZGVjYXIoZWZmZWN0Q2FyLCBFZmZlY3QpO1xuIiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJhbmNob3JQb3NpdGlvblwiLCBcImJ1dHRvblwiLCBcImluc2VydFwiLCBcImlzT3BlblwiLCBcIm93bkZvY3VzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjbG9zZVBvcG92ZXJcIiwgXCJwYW5lbENsYXNzTmFtZVwiLCBcInBhbmVsUGFkZGluZ1NpemVcIiwgXCJwYW5lbFByb3BzXCIsIFwicGFuZWxSZWZcIiwgXCJwYW5lbFN0eWxlXCIsIFwicG9wb3ZlclNjcmVlblJlYWRlclRleHRcIiwgXCJwb3BvdmVyUmVmXCIsIFwiaGFzQXJyb3dcIiwgXCJhcnJvd0NoaWxkcmVuXCIsIFwicmVwb3NpdGlvbk9uU2Nyb2xsXCIsIFwicmVwb3NpdGlvblRvQ3Jvc3NBeGlzXCIsIFwiaGFzRHJhZ0Ryb3BcIiwgXCJ6SW5kZXhcIiwgXCJhdHRhY2hUb0FuY2hvclwiLCBcImRpc3BsYXlcIiwgXCJvZmZzZXRcIiwgXCJvblBvc2l0aW9uQ2hhbmdlXCIsIFwiYnVmZmVyXCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcImNvbnRhaW5lclwiLCBcImZvY3VzVHJhcFByb3BzXCIsIFwiaW5pdGlhbEZvY3VzXCIsIFwidGFiSW5kZXhcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGZvY3VzYWJsZSB9IGZyb20gJ3RhYmJhYmxlJztcbmltcG9ydCB7IEV1aUZvY3VzVHJhcCB9IGZyb20gJy4uL2ZvY3VzX3RyYXAnO1xuaW1wb3J0IHsga2V5cywgZ2V0VHJhbnNpdGlvblRpbWluZ3MsIGdldFdhaXREdXJhdGlvbiwgcGVyZm9ybU9uRnJhbWUsIGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHNldE11bHRpcGxlUmVmcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2hvb2tzL3VzZUNvbWJpbmVkUmVmcyc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlQb3J0YWwgfSBmcm9tICcuLi9wb3J0YWwnO1xuaW1wb3J0IHsgRXVpTXV0YXRpb25PYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyL211dGF0aW9uX29ic2VydmVyJztcbmltcG9ydCB7IGZpbmRQb3BvdmVyUG9zaXRpb24sIGdldEVsZW1lbnRaSW5kZXggfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wb3BvdmVyJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aU91dHNpZGVDbGlja0RldGVjdG9yIH0gZnJvbSAnLi4vb3V0c2lkZV9jbGlja19kZXRlY3Rvcic7XG5pbXBvcnQgeyBFdWlQb3BvdmVyQXJyb3cgfSBmcm9tICcuL3BvcG92ZXJfYXJyb3cnO1xuaW1wb3J0IHsgZXVpUG9wb3ZlclN0eWxlcyB9IGZyb20gJy4vcG9wb3Zlci5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpUG9wb3ZlclBhbmVsIH0gZnJvbSAnLi9wb3BvdmVyX3BhbmVsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIHBvcG92ZXJBbmNob3JQb3NpdGlvbiA9IFsndXBDZW50ZXInLCAndXBMZWZ0JywgJ3VwUmlnaHQnLCAnZG93bkNlbnRlcicsICdkb3duTGVmdCcsICdkb3duUmlnaHQnLCAnbGVmdENlbnRlcicsICdsZWZ0VXAnLCAnbGVmdERvd24nLCAncmlnaHRDZW50ZXInLCAncmlnaHRVcCcsICdyaWdodERvd24nXTtcbnZhciBhbmNob3JQb3NpdGlvblRvUG9wb3ZlclBvc2l0aW9uTWFwID0ge1xuICB1cDogJ3RvcCcsXG4gIHJpZ2h0OiAncmlnaHQnLFxuICBkb3duOiAnYm90dG9tJyxcbiAgbGVmdDogJ2xlZnQnXG59O1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcG92ZXJQb3NpdGlvbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbikge1xuICAvLyBtYXBzIHRoZSBhbmNob3IgcG9zaXRpb24gdG8gdGhlIG1hdGNoaW5nIHBvcG92ZXIgcG9zaXRpb25cbiAgLy8gZS5nLiBcInVwTGVmdFwiIC0+IFwidG9wXCIsIFwiZG93blJpZ2h0XCIgLT4gXCJib3R0b21cIlxuXG4gIC8vIGV4dHJhY3QgdGhlIGZpcnN0IHBvc2l0aW9uYWwgd29yZCBmcm9tIGFuY2hvclBvc2l0aW9uOlxuICAvLyBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyAoXCIgXiBcIikgb2YgYW5jaG9yUG9zaXRpb24gYW5kXG4gIC8vIGNhcHR1cmVzIGFsbCBvZiB0aGUgY2hhcmFjdGVycyAoXCIgKC4qPykgXCIpIHVudGlsIHRoZVxuICAvLyBmaXJzdCBjYXBpdGFsIGxldHRlciAoXCIgW0EtWl0gXCIpIGlzIGVuY291bnRlcmVkXG4gIHZhciBfcmVmID0gYW5jaG9yUG9zaXRpb24ubWF0Y2goL14oLio/KVtBLVpdLyksXG4gICAgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSxcbiAgICBwcmltYXJ5UG9zaXRpb24gPSBfcmVmMlsxXTtcbiAgcmV0dXJuIGFuY2hvclBvc2l0aW9uVG9Qb3BvdmVyUG9zaXRpb25NYXBbcHJpbWFyeVBvc2l0aW9uXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3BvdmVyQWxpZ25Gcm9tQW5jaG9yUG9zaXRpb24oYW5jaG9yUG9zaXRpb24pIHtcbiAgLy8gbWFwcyB0aGUgZ3Jhdml0eSB0byB0aGUgbWF0Y2hpbmcgcG9wb3ZlciBwb3NpdGlvblxuICAvLyBlLmcuIFwidXBMZWZ0XCIgLT4gXCJsZWZ0XCIsIFwicmlnaHREb3duXCIgLT4gXCJib3R0b21cIlxuXG4gIC8vIGV4dHJhY3QgdGhlIHNlY29uZCBwb3NpdGlvbmFsIHdvcmQgZnJvbSBhbmNob3JQb3NpdGlvbjpcbiAgLy8gc3RhcnRzIGEgY2FwdHVyZSBncm91cCBhdCB0aGUgZmlyc3QgY2FwaXRhbCBsZXR0ZXJcbiAgLy8gYW5kIGluY2x1ZGVzIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXRcbiAgdmFyIF9yZWYzID0gYW5jaG9yUG9zaXRpb24ubWF0Y2goLyhbQS1aXS4qKS8pLFxuICAgIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjMsIDIpLFxuICAgIGFsaWduID0gX3JlZjRbMV07XG5cbiAgLy8gdGhpcyBwZXJmb3JtcyB0d28gdGFza3M6XG4gIC8vIDEuIG5vcm1hbGl6ZXMgdGhlIGFsaWduIHBvc2l0aW9uIGJ5IGxvd2VyY2FzaW5nIGl0XG4gIC8vIDIuIGBjZW50ZXJgIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGxvb2t1cCBtYXAgd2hpY2ggY29udmVydHMgaXQgdG8gYHVuZGVmaW5lZGAgbWVhbmluZyBubyBhbGlnblxuICByZXR1cm4gYW5jaG9yUG9zaXRpb25Ub1BvcG92ZXJQb3NpdGlvbk1hcFthbGlnbi50b0xvd2VyQ2FzZSgpXTtcbn1cbnZhciBERUZBVUxUX1BPUE9WRVJfU1RZTEVTID0ge1xuICB0b3A6IDUwLFxuICBsZWZ0OiA1MFxufTtcbnZhciByZXR1cm5Gb2N1c0NvbmZpZyA9IHtcbiAgcHJldmVudFNjcm9sbDogdHJ1ZVxufTtcbnZhciBjbG9zaW5nVHJhbnNpdGlvblRpbWUgPSAyNTA7IC8vIFRPRE86IERSWSBvdXQgdmFyIHdoZW4gY29udmVydGluZyB0byBDU1MtaW4tSlNcblxuZXhwb3J0IHZhciBFdWlQb3BvdmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aVBvcG92ZXIocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVBvcG92ZXIpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlQb3BvdmVyLCBbcHJvcHNdKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVzcG9zaXRpb25UaW1lb3V0XCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0cmFuZGVkRm9jdXNUaW1lb3V0XCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNsb3NpbmdUcmFuc2l0aW9uVGltZW91dFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImJ1dHRvblwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicGFuZWxcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImRlc2NyaXB0aW9uSWRcIiwgaHRtbElkR2VuZXJhdG9yKCkoKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNsb3NlUG9wb3ZlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIF90aGlzLnByb3BzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkVzY2FwZUtleVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pc09wZW4pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIF90aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgICBfdGhpcy5oYW5kbGVTdHJhbmRlZEZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImhhbmRsZVN0cmFuZGVkRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc3RyYW5kZWRGb2N1c1RpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIElmIGByZXR1cm5Gb2N1c2AgZmFpbGVkIGFuZCBmb2N1cyB3YXMgc3RyYW5kZWQsXG4gICAgICAgIC8vIGF0dGVtcHQgdG8gbWFudWFsbHkgcmVzdG9yZSBmb2N1cyB0byB0aGUgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgICAgLy8gVGhlIHN0cmFuZGVkIGZvY3VzIGlzIGVpdGhlciBpbiBtb3N0IGNhc2VzIG9uIGJvZHkgYnV0XG4gICAgICAgIC8vIGl0IHdpbGwgYmUgb24gdGhlIHBhbmVsIGluc3RlYWQgb24gbW91bnQgd2hlbiBpc09wZW49dHJ1ZVxuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBfdGhpcy5wYW5lbCkge1xuICAgICAgICAgIGlmICghX3RoaXMuYnV0dG9uKSByZXR1cm47XG4gICAgICAgICAgdmFyIGZvY3VzYWJsZUl0ZW1zID0gZm9jdXNhYmxlKF90aGlzLmJ1dHRvbik7XG4gICAgICAgICAgaWYgKCFmb2N1c2FibGVJdGVtcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICB2YXIgdG9nZ2xlQnV0dG9uID0gZm9jdXNhYmxlSXRlbXNbMF07XG4gICAgICAgICAgdG9nZ2xlQnV0dG9uLmZvY3VzKHJldHVybkZvY3VzQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgfSwgY2xvc2luZ1RyYW5zaXRpb25UaW1lKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0ga2V5cy5FU0NBUEUpIHtcbiAgICAgICAgX3RoaXMub25Fc2NhcGVLZXkoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkNsaWNrT3V0c2lkZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIG9ubHkgY2xvc2UgdGhlIHBvcG92ZXIgaWYgdGhlIGV2ZW50IHNvdXJjZSBpc24ndCB0aGUgYW5jaG9yIGJ1dHRvblxuICAgICAgLy8gb3RoZXJ3aXNlLCBpdCBpcyB1cCB0byB0aGUgYW5jaG9yIHRvIHRvZ2dsZSB0aGUgcG9wb3ZlcidzIG9wZW4gc3RhdHVzXG4gICAgICBpZiAoX3RoaXMuYnV0dG9uICYmIF90aGlzLmJ1dHRvbi5jb250YWlucyhldmVudC50YXJnZXQpID09PSBmYWxzZSkge1xuICAgICAgICBfdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25PcGVuUG9wb3ZlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjbGVhclRpbWVvdXQoX3RoaXMuc3RyYW5kZWRGb2N1c1RpbWVvdXQpO1xuICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLmNsb3NpbmdUcmFuc2l0aW9uVGltZW91dCk7XG4gICAgICBpZiAoX3RoaXMuY2xvc2luZ1RyYW5zaXRpb25BbmltYXRpb25GcmFtZSkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShfdGhpcy5jbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lKTtcbiAgICAgIH1cbiAgICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoaXMgc3RhdGUgYSBiZWF0IGFmdGVyIHRoZSByZW5kZXIgdGFrZXMgcGxhY2UsIHNvIHRoYXQgdGhlIENTU1xuICAgICAgLy8gdHJhbnNpdGlvbiBjYW4gdGFrZSBlZmZlY3QuXG4gICAgICBfdGhpcy5jbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc09wZW5pbmc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gZm9yIGVhY2ggY2hpbGQgZWxlbWVudCBvZiBgdGhpcy5wYW5lbGAsIGZpbmQgYW55IHRyYW5zaXRpb24gZHVyYXRpb24gd2Ugc2hvdWxkIHdhaXQgZm9yIGJlZm9yZSBzdGFiaWxpemluZ1xuICAgICAgdmFyIF9BcnJheSRwcm90b3R5cGUkc2xpYyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKF90aGlzLnBhbmVsID8gW190aGlzLnBhbmVsXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KEFycmF5LmZyb20oX3RoaXMucGFuZWwuY2hpbGRyZW4pKSkgOiBbXSkucmVkdWNlKGZ1bmN0aW9uIChfcmVmNSwgZWxlbWVudCkge1xuICAgICAgICAgIHZhciBkdXJhdGlvbk1hdGNoID0gX3JlZjUuZHVyYXRpb25NYXRjaCxcbiAgICAgICAgICAgIGRlbGF5TWF0Y2ggPSBfcmVmNS5kZWxheU1hdGNoO1xuICAgICAgICAgIHZhciB0cmFuc2l0aW9uVGltaW5ncyA9IGdldFRyYW5zaXRpb25UaW1pbmdzKGVsZW1lbnQpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkdXJhdGlvbk1hdGNoOiBNYXRoLm1heChkdXJhdGlvbk1hdGNoLCB0cmFuc2l0aW9uVGltaW5ncy5kdXJhdGlvbk1hdGNoKSxcbiAgICAgICAgICAgIGRlbGF5TWF0Y2g6IE1hdGgubWF4KGRlbGF5TWF0Y2gsIHRyYW5zaXRpb25UaW1pbmdzLmRlbGF5TWF0Y2gpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwge1xuICAgICAgICAgIGR1cmF0aW9uTWF0Y2g6IDAsXG4gICAgICAgICAgZGVsYXlNYXRjaDogMFxuICAgICAgICB9KSxcbiAgICAgICAgZHVyYXRpb25NYXRjaCA9IF9BcnJheSRwcm90b3R5cGUkc2xpYy5kdXJhdGlvbk1hdGNoLFxuICAgICAgICBkZWxheU1hdGNoID0gX0FycmF5JHByb3RvdHlwZSRzbGljLmRlbGF5TWF0Y2g7XG4gICAgICBjbGVhclRpbWVvdXQoX3RoaXMucmVzcG9zaXRpb25UaW1lb3V0KTtcbiAgICAgIF90aGlzLnJlc3Bvc2l0aW9uVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzT3BlblN0YWJsZTogdHJ1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBkdXJhdGlvbk1hdGNoICsgZGVsYXlNYXRjaCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uTXV0YXRpb25cIiwgZnVuY3Rpb24gKHJlY29yZHMpIHtcbiAgICAgIHZhciB3YWl0RHVyYXRpb24gPSBnZXRXYWl0RHVyYXRpb24ocmVjb3Jkcyk7XG4gICAgICBfdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCgpO1xuICAgICAgcGVyZm9ybU9uRnJhbWUod2FpdER1cmF0aW9uLCBfdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInBvc2l0aW9uUG9wb3ZlclwiLCBmdW5jdGlvbiAoYWxsb3dFbmZvcmNlUG9zaXRpb24pIHtcbiAgICAgIGlmIChfdGhpcy5idXR0b24gPT0gbnVsbCB8fCBfdGhpcy5wYW5lbCA9PSBudWxsKSByZXR1cm47XG4gICAgICB2YXIgX3JlZjYgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgYW5jaG9yUG9zaXRpb24gPSBfcmVmNi5hbmNob3JQb3NpdGlvbixcbiAgICAgICAgX3JlZjYkb2Zmc2V0ID0gX3JlZjYub2Zmc2V0LFxuICAgICAgICBvZmZzZXQgPSBfcmVmNiRvZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfcmVmNiRvZmZzZXQ7XG4gICAgICB2YXIgcG9zaXRpb24gPSBnZXRQb3BvdmVyUG9zaXRpb25Gcm9tQW5jaG9yUG9zaXRpb24oYW5jaG9yUG9zaXRpb24pO1xuICAgICAgdmFyIGZvcmNlUG9zaXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoYWxsb3dFbmZvcmNlUG9zaXRpb24gJiYgX3RoaXMuc3RhdGUuaXNPcGVuU3RhYmxlICYmIF90aGlzLnN0YXRlLm9wZW5Qb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIHBvc2l0aW9uID0gX3RoaXMuc3RhdGUub3BlblBvc2l0aW9uO1xuICAgICAgICBmb3JjZVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBfZmluZFBvcG92ZXJQb3NpdGlvbiA9IGZpbmRQb3BvdmVyUG9zaXRpb24oe1xuICAgICAgICAgIGNvbnRhaW5lcjogX3RoaXMucHJvcHMuY29udGFpbmVyLFxuICAgICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgICBmb3JjZVBvc2l0aW9uOiBmb3JjZVBvc2l0aW9uLFxuICAgICAgICAgIGFsaWduOiBnZXRQb3BvdmVyQWxpZ25Gcm9tQW5jaG9yUG9zaXRpb24oYW5jaG9yUG9zaXRpb24pLFxuICAgICAgICAgIGFuY2hvcjogX3RoaXMuYnV0dG9uLFxuICAgICAgICAgIHBvcG92ZXI6IF90aGlzLnBhbmVsLFxuICAgICAgICAgIG9mZnNldDogX3RoaXMucHJvcHMuYXR0YWNoVG9BbmNob3IgPyBvZmZzZXQgOiBfdGhpcy5wcm9wcy5oYXNBcnJvdyA/IDE2ICsgb2Zmc2V0IDogOCArIG9mZnNldCxcbiAgICAgICAgICBhcnJvd0NvbmZpZzogX3RoaXMucHJvcHMuaGFzQXJyb3cgPyB7XG4gICAgICAgICAgICBhcnJvd1dpZHRoOiAyNCxcbiAgICAgICAgICAgIGFycm93QnVmZmVyOiAxMFxuICAgICAgICAgIH0gOiB7XG4gICAgICAgICAgICBhcnJvd1dpZHRoOiAwLFxuICAgICAgICAgICAgYXJyb3dCdWZmZXI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJldHVybkJvdW5kaW5nQm94OiBfdGhpcy5wcm9wcy5hdHRhY2hUb0FuY2hvcixcbiAgICAgICAgICBhbGxvd0Nyb3NzQXhpczogX3RoaXMucHJvcHMucmVwb3NpdGlvblRvQ3Jvc3NBeGlzLFxuICAgICAgICAgIGJ1ZmZlcjogX3RoaXMucHJvcHMuYnVmZmVyXG4gICAgICAgIH0pLFxuICAgICAgICB0b3AgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi50b3AsXG4gICAgICAgIGxlZnQgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5sZWZ0LFxuICAgICAgICBmb3VuZFBvc2l0aW9uID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24ucG9zaXRpb24sXG4gICAgICAgIGFycm93ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24uYXJyb3c7XG5cbiAgICAgIC8vIHRoZSBwb3BvdmVyJ3Mgei1pbmRleCBtdXN0IGluaGVyaXQgZnJvbSB0aGUgYnV0dG9uXG4gICAgICAvLyB0aGlzIGtlZXBzIGEgYnV0dG9uJ3MgcG9wb3ZlciB1bmRlciBhIGZseW91dCB0aGF0IHdvdWxkIGNvdmVyIHRoZSBidXR0b25cbiAgICAgIC8vIGJ1dCBhIHBvcG92ZXIgdHJpZ2dlcmVkIGluc2lkZSBhIGZseW91dCB3aWxsIGFwcGVhciBvdmVyIHRoYXQgZmx5b3V0XG4gICAgICB2YXIgekluZGV4UHJvcCA9IF90aGlzLnByb3BzLnpJbmRleDtcbiAgICAgIHZhciB6SW5kZXggPSB6SW5kZXhQcm9wID09IG51bGwgPyBnZXRFbGVtZW50WkluZGV4KF90aGlzLmJ1dHRvbiwgX3RoaXMucGFuZWwpICsgMjAwMCA6IHpJbmRleFByb3A7XG4gICAgICB2YXIgcG9wb3ZlclN0eWxlcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgX3RoaXMucHJvcHMucGFuZWxTdHlsZSksIHt9LCB7XG4gICAgICAgIHRvcDogdG9wLFxuICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICB6SW5kZXg6IHpJbmRleFxuICAgICAgfSk7XG4gICAgICB2YXIgd2lsbFJlbmRlckFycm93ID0gIV90aGlzLnByb3BzLmF0dGFjaFRvQW5jaG9yICYmIF90aGlzLnByb3BzLmhhc0Fycm93O1xuICAgICAgdmFyIGFycm93U3R5bGVzID0gd2lsbFJlbmRlckFycm93ID8gYXJyb3cgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgYXJyb3dQb3NpdGlvbiA9IGZvdW5kUG9zaXRpb247XG4gICAgICBfdGhpcy5wcm9wcy5vblBvc2l0aW9uQ2hhbmdlICYmIF90aGlzLnByb3BzLm9uUG9zaXRpb25DaGFuZ2UoYXJyb3dQb3NpdGlvbik7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHBvcG92ZXJTdHlsZXM6IHBvcG92ZXJTdHlsZXMsXG4gICAgICAgIGFycm93U3R5bGVzOiBhcnJvd1N0eWxlcyxcbiAgICAgICAgYXJyb3dQb3NpdGlvbjogYXJyb3dQb3NpdGlvbixcbiAgICAgICAgb3BlblBvc2l0aW9uOiBmb3VuZFBvc2l0aW9uXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicG9zaXRpb25Qb3BvdmVyRml4ZWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyKHRydWUpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwb3NpdGlvblBvcG92ZXJGbHVpZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5wb3NpdGlvblBvcG92ZXIoZmFsc2UpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwYW5lbFJlZlwiLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgX3RoaXMucGFuZWwgPSBub2RlO1xuICAgICAgX3RoaXMucHJvcHMucGFuZWxSZWYgJiYgX3RoaXMucHJvcHMucGFuZWxSZWYobm9kZSk7XG4gICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgIC8vIHBhbmVsIGhhcyB1bm1vdW50ZWQsIHJlc3RvcmUgdGhlIHN0YXRlIGRlZmF1bHRzXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBwb3BvdmVyU3R5bGVzOiBERUZBVUxUX1BPUE9WRVJfU1RZTEVTLFxuICAgICAgICAgIGFycm93U3R5bGVzOiB7fSxcbiAgICAgICAgICBhcnJvd1Bvc2l0aW9uOiBudWxsLFxuICAgICAgICAgIG9wZW5Qb3NpdGlvbjogbnVsbCxcbiAgICAgICAgICBpc09wZW5TdGFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgX3RoaXMucG9zaXRpb25Qb3BvdmVyRmx1aWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcGFuZWwgaXMgY29taW5nIGludG8gZXhpc3RlbmNlXG4gICAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZsdWlkKCk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBfdGhpcy5wb3NpdGlvblBvcG92ZXJGbHVpZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInBvcG92ZXJSZWZcIiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIF90aGlzLmJ1dHRvbiA9IG5vZGU7XG4gICAgICBzZXRNdWx0aXBsZVJlZnMoW190aGlzLnByb3BzLnBvcG92ZXJSZWZdLCBub2RlKTtcbiAgICB9KTtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHByZXZQcm9wczoge1xuICAgICAgICBpc09wZW46IHByb3BzLmlzT3BlblxuICAgICAgfSxcbiAgICAgIHN1cHByZXNzaW5nUG9wb3ZlcjogcHJvcHMuaXNPcGVuLFxuICAgICAgLy8gb25seSBzdXBwcmVzcyBpZiBjcmVhdGVkIHdpdGggaXNPcGVuPXRydWVcbiAgICAgIGlzQ2xvc2luZzogZmFsc2UsXG4gICAgICBpc09wZW5pbmc6IGZhbHNlLFxuICAgICAgcG9wb3ZlclN0eWxlczogREVGQVVMVF9QT1BPVkVSX1NUWUxFUyxcbiAgICAgIGFycm93U3R5bGVzOiB7fSxcbiAgICAgIGFycm93UG9zaXRpb246IG51bGwsXG4gICAgICBvcGVuUG9zaXRpb246IG51bGwsXG4gICAgICAvLyBvbmNlIGEgc3RhYmxlIHBvc2l0aW9uIGhhcyBiZWVuIGZvdW5kLCBrZWVwIHRoZSBjb250ZW50cyBvbiB0aGF0IHNpZGVcbiAgICAgIGlzT3BlblN0YWJsZTogZmFsc2UgLy8gd2FpdCBmb3IgYW55IGluaXRpYWwgb3BlbmluZyB0cmFuc2l0aW9ucyB0byBmaW5pc2ggYmVmb3JlIG1hcmtpbmcgYXMgc3RhYmxlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aVBvcG92ZXIsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aVBvcG92ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5zdXBwcmVzc2luZ1BvcG92ZXIpIHtcbiAgICAgICAgLy8gY29tcG9uZW50IHdhcyBjcmVhdGVkIHdpdGggaXNPcGVuPXRydWU7IG5vdyB0aGF0IGl0J3MgbW91bnRlZFxuICAgICAgICAvLyBzdG9wIHN1cHByZXNzaW5nIGFuZCBzdGFydCBvcGVuaW5nXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHN1cHByZXNzaW5nUG9wb3ZlcjogZmFsc2UsXG4gICAgICAgICAgaXNPcGVuaW5nOiB0cnVlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIub25PcGVuUG9wb3ZlcigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnByb3BzLnJlcG9zaXRpb25PblNjcm9sbCkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgIC8vIFRoZSBwb3BvdmVyIGlzIGJlaW5nIG9wZW5lZC5cbiAgICAgIGlmICghcHJldlByb3BzLmlzT3BlbiAmJiB0aGlzLnByb3BzLmlzT3Blbikge1xuICAgICAgICB0aGlzLm9uT3BlblBvcG92ZXIoKTtcbiAgICAgIH1cblxuICAgICAgLy8gZW5zdXJlIHJlY2FsY3VsYXRpb24gb2YgcGFuZWwgcG9zaXRpb24gb24gcHJvcCB1cGRhdGVzXG4gICAgICBpZiAodGhpcy5wcm9wcy5pc09wZW4gJiYgKHByZXZQcm9wcy5hbmNob3JQb3NpdGlvbiAhPT0gdGhpcy5wcm9wcy5hbmNob3JQb3NpdGlvbiB8fCBwcmV2UHJvcHMuYnVmZmVyICE9PSB0aGlzLnByb3BzLmJ1ZmZlciB8fCBwcmV2UHJvcHMub2Zmc2V0ICE9PSB0aGlzLnByb3BzLm9mZnNldCB8fCBwcmV2UHJvcHMucGFuZWxQYWRkaW5nU2l6ZSAhPT0gdGhpcy5wcm9wcy5wYW5lbFBhZGRpbmdTaXplKSkge1xuICAgICAgICB0aGlzLnBvc2l0aW9uUG9wb3ZlckZsdWlkKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSBzY3JvbGwgbGlzdGVuZXJcbiAgICAgIGlmIChwcmV2UHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsICE9PSB0aGlzLnByb3BzLnJlcG9zaXRpb25PblNjcm9sbCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwpIHtcbiAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBwb3BvdmVyIGlzIGJlaW5nIGNsb3NlZC5cbiAgICAgIGlmIChwcmV2UHJvcHMuaXNPcGVuICYmICF0aGlzLnByb3BzLmlzT3Blbikge1xuICAgICAgICAvLyBJZiB0aGUgdXNlciBoYXMganVzdCBjbG9zZWQgdGhlIHBvcG92ZXIsIHF1ZXVlIHVwIHRoZSByZW1vdmFsIG9mIHRoZSBjb250ZW50IGFmdGVyIHRoZVxuICAgICAgICAvLyB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAgICB0aGlzLmNsb3NpbmdUcmFuc2l0aW9uVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNDbG9zaW5nOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBjbG9zaW5nVHJhbnNpdGlvblRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlc3Bvc2l0aW9uVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zdHJhbmRlZEZvY3VzVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zaW5nVHJhbnNpdGlvblRpbWVvdXQpO1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5jbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfcGFuZWxQcm9wcyR0YWJJbmRleCxcbiAgICAgICAgX3RoaXM0ID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGFuY2hvclBvc2l0aW9uID0gX3RoaXMkcHJvcHMuYW5jaG9yUG9zaXRpb24sXG4gICAgICAgIGJ1dHRvbiA9IF90aGlzJHByb3BzLmJ1dHRvbixcbiAgICAgICAgaW5zZXJ0ID0gX3RoaXMkcHJvcHMuaW5zZXJ0LFxuICAgICAgICBpc09wZW4gPSBfdGhpcyRwcm9wcy5pc09wZW4sXG4gICAgICAgIG93bkZvY3VzID0gX3RoaXMkcHJvcHMub3duRm9jdXMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgY2xvc2VQb3BvdmVyID0gX3RoaXMkcHJvcHMuY2xvc2VQb3BvdmVyLFxuICAgICAgICBwYW5lbENsYXNzTmFtZSA9IF90aGlzJHByb3BzLnBhbmVsQ2xhc3NOYW1lLFxuICAgICAgICBwYW5lbFBhZGRpbmdTaXplID0gX3RoaXMkcHJvcHMucGFuZWxQYWRkaW5nU2l6ZSxcbiAgICAgICAgcGFuZWxQcm9wcyA9IF90aGlzJHByb3BzLnBhbmVsUHJvcHMsXG4gICAgICAgIHBhbmVsUmVmID0gX3RoaXMkcHJvcHMucGFuZWxSZWYsXG4gICAgICAgIHBhbmVsU3R5bGUgPSBfdGhpcyRwcm9wcy5wYW5lbFN0eWxlLFxuICAgICAgICBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCA9IF90aGlzJHByb3BzLnBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0LFxuICAgICAgICBwb3BvdmVyUmVmID0gX3RoaXMkcHJvcHMucG9wb3ZlclJlZixcbiAgICAgICAgaGFzQXJyb3cgPSBfdGhpcyRwcm9wcy5oYXNBcnJvdyxcbiAgICAgICAgYXJyb3dDaGlsZHJlbiA9IF90aGlzJHByb3BzLmFycm93Q2hpbGRyZW4sXG4gICAgICAgIHJlcG9zaXRpb25PblNjcm9sbCA9IF90aGlzJHByb3BzLnJlcG9zaXRpb25PblNjcm9sbCxcbiAgICAgICAgcmVwb3NpdGlvblRvQ3Jvc3NBeGlzID0gX3RoaXMkcHJvcHMucmVwb3NpdGlvblRvQ3Jvc3NBeGlzLFxuICAgICAgICBoYXNEcmFnRHJvcCA9IF90aGlzJHByb3BzLmhhc0RyYWdEcm9wLFxuICAgICAgICB6SW5kZXggPSBfdGhpcyRwcm9wcy56SW5kZXgsXG4gICAgICAgIGF0dGFjaFRvQW5jaG9yID0gX3RoaXMkcHJvcHMuYXR0YWNoVG9BbmNob3IsXG4gICAgICAgIGRpc3BsYXkgPSBfdGhpcyRwcm9wcy5kaXNwbGF5LFxuICAgICAgICBvZmZzZXQgPSBfdGhpcyRwcm9wcy5vZmZzZXQsXG4gICAgICAgIG9uUG9zaXRpb25DaGFuZ2UgPSBfdGhpcyRwcm9wcy5vblBvc2l0aW9uQ2hhbmdlLFxuICAgICAgICBidWZmZXIgPSBfdGhpcyRwcm9wcy5idWZmZXIsXG4gICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgIGFyaWFMYWJlbGxlZEJ5ID0gX3RoaXMkcHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICBjb250YWluZXIgPSBfdGhpcyRwcm9wcy5jb250YWluZXIsXG4gICAgICAgIGZvY3VzVHJhcFByb3BzID0gX3RoaXMkcHJvcHMuZm9jdXNUcmFwUHJvcHMsXG4gICAgICAgIGluaXRpYWxGb2N1c1Byb3AgPSBfdGhpcyRwcm9wcy5pbml0aWFsRm9jdXMsXG4gICAgICAgIF90YWJJbmRleFByb3AgPSBfdGhpcyRwcm9wcy50YWJJbmRleCxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciB0YWJJbmRleFByb3AgPSAoX3BhbmVsUHJvcHMkdGFiSW5kZXggPSBwYW5lbFByb3BzID09PSBudWxsIHx8IHBhbmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhbmVsUHJvcHMudGFiSW5kZXgpICE9PSBudWxsICYmIF9wYW5lbFByb3BzJHRhYkluZGV4ICE9PSB2b2lkIDAgPyBfcGFuZWxQcm9wcyR0YWJJbmRleCA6IF90YWJJbmRleFByb3A7XG4gICAgICB2YXIgc3R5bGVzID0gZXVpUG9wb3ZlclN0eWxlcygpO1xuICAgICAgdmFyIHBvcG92ZXJTdHlsZXMgPSBbc3R5bGVzLmV1aVBvcG92ZXIsIHtcbiAgICAgICAgZGlzcGxheTogZGlzcGxheSxcbiAgICAgICAgbGFiZWw6IGRpc3BsYXlcbiAgICAgIH1dO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQb3BvdmVyJywge1xuICAgICAgICAnZXVpUG9wb3Zlci1pc09wZW4nOiB0aGlzLnN0YXRlLmlzT3BlbmluZ1xuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBzaG93QXJyb3cgPSBoYXNBcnJvdyAmJiAhYXR0YWNoVG9BbmNob3I7XG4gICAgICB2YXIgcGFuZWw7XG4gICAgICBpZiAoIXRoaXMuc3RhdGUuc3VwcHJlc3NpbmdQb3BvdmVyICYmIChpc09wZW4gfHwgdGhpcy5zdGF0ZS5pc0Nsb3NpbmcpKSB7XG4gICAgICAgIHZhciB0YWJJbmRleCA9IHRhYkluZGV4UHJvcDtcbiAgICAgICAgdmFyIGluaXRpYWxGb2N1cyA9IGluaXRpYWxGb2N1c1Byb3A7XG4gICAgICAgIHZhciBhcmlhRGVzY3JpYmVkYnk7XG4gICAgICAgIHZhciBhcmlhTGl2ZTtcbiAgICAgICAgdmFyIHBhbmVsQXJpYU1vZGFsID0gcGFuZWxQcm9wcyAhPT0gbnVsbCAmJiBwYW5lbFByb3BzICE9PSB2b2lkIDAgJiYgcGFuZWxQcm9wcy5oYXNPd25Qcm9wZXJ0eSgnYXJpYS1tb2RhbCcpID8gcGFuZWxQcm9wc1snYXJpYS1tb2RhbCddIDogJ3RydWUnO1xuICAgICAgICB2YXIgcGFuZWxSb2xlID0gcGFuZWxQcm9wcyAhPT0gbnVsbCAmJiBwYW5lbFByb3BzICE9PSB2b2lkIDAgJiYgcGFuZWxQcm9wcy5oYXNPd25Qcm9wZXJ0eSgncm9sZScpID8gcGFuZWxQcm9wcy5yb2xlIDogJ2RpYWxvZyc7XG4gICAgICAgIGlmIChvd25Gb2N1cyB8fCBwYW5lbEFyaWFNb2RhbCAhPT0gJ3RydWUnKSB7XG4gICAgICAgICAgdGFiSW5kZXggPSB0YWJJbmRleFByb3AgIT09IG51bGwgJiYgdGFiSW5kZXhQcm9wICE9PSB2b2lkIDAgPyB0YWJJbmRleFByb3AgOiAwO1xuICAgICAgICAgIGFyaWFMaXZlID0gJ29mZic7XG4gICAgICAgICAgaWYgKCFpbml0aWFsRm9jdXMpIHtcbiAgICAgICAgICAgIGluaXRpYWxGb2N1cyA9IGZ1bmN0aW9uIGluaXRpYWxGb2N1cygpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5wYW5lbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFyaWFMaXZlID0gJ2Fzc2VydGl2ZSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZvY3VzVHJhcFNjcmVlblJlYWRlclRleHQ7XG4gICAgICAgIGlmIChvd25Gb2N1cyB8fCBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCkge1xuICAgICAgICAgIGFyaWFEZXNjcmliZWRieSA9IHRoaXMuZGVzY3JpcHRpb25JZDtcbiAgICAgICAgICBmb2N1c1RyYXBTY3JlZW5SZWFkZXJUZXh0ID0gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgICBpZDogdGhpcy5kZXNjcmlwdGlvbklkXG4gICAgICAgICAgfSwgb3duRm9jdXMgJiYgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlQb3BvdmVyLnNjcmVlblJlYWRlckFubm91bmNlbWVudFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJZb3UgYXJlIGluIGEgZGlhbG9nLiBQcmVzcyBFc2NhcGUsIG9yIHRhcC9jbGljayBvdXRzaWRlIHRoZSBkaWFsb2cgdG8gY2xvc2UuXCJcbiAgICAgICAgICB9KSwgcG9wb3ZlclNjcmVlblJlYWRlclRleHQpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmV0dXJuRm9jdXMgPSB0aGlzLnN0YXRlLmlzT3BlblN0YWJsZSA/IHJldHVybkZvY3VzQ29uZmlnIDogZmFsc2U7XG4gICAgICAgIHBhbmVsID0gX19fRW1vdGlvbkpTWChFdWlQb3J0YWwsIGluc2VydCAmJiB7XG4gICAgICAgICAgaW5zZXJ0OiBpbnNlcnRcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlGb2N1c1RyYXAsIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGlja091dHNpZGVEaXNhYmxlczogdHJ1ZSxcbiAgICAgICAgICBvbkNsaWNrT3V0c2lkZTogdGhpcy5vbkNsaWNrT3V0c2lkZSxcbiAgICAgICAgICByZXR1cm5Gb2N1czogcmV0dXJuRm9jdXMgLy8gSWdub3JlIHRlbXBvcmFyeSBzdGF0ZSBvZiBpbmRlY2lzaXZlIGZvY3VzXG4gICAgICAgICAgLFxuICAgICAgICAgIGluaXRpYWxGb2N1czogaW5pdGlhbEZvY3VzLFxuICAgICAgICAgIG9uRXNjYXBlS2V5OiB0aGlzLm9uRXNjYXBlS2V5LFxuICAgICAgICAgIGRpc2FibGVkOiAhb3duRm9jdXMgfHwgIXRoaXMuc3RhdGUuaXNPcGVuU3RhYmxlIHx8IHRoaXMuc3RhdGUuaXNDbG9zaW5nXG4gICAgICAgIH0sIGZvY3VzVHJhcFByb3BzKSwgX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyUGFuZWwsIF9leHRlbmRzKHt9LCBwYW5lbFByb3BzLCB7XG4gICAgICAgICAgcGFuZWxSZWY6IHRoaXMucGFuZWxSZWYsXG4gICAgICAgICAgaXNPcGVuOiB0aGlzLnN0YXRlLmlzT3BlbmluZyxcbiAgICAgICAgICBwb3NpdGlvbjogdGhpcy5zdGF0ZS5hcnJvd1Bvc2l0aW9uLFxuICAgICAgICAgIGlzQXR0YWNoZWQ6IGF0dGFjaFRvQW5jaG9yLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhwYW5lbENsYXNzTmFtZSwgcGFuZWxQcm9wcyA9PT0gbnVsbCB8fCBwYW5lbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYW5lbFByb3BzLmNsYXNzTmFtZSksXG4gICAgICAgICAgaGFzRHJhZ0Ryb3A6IGhhc0RyYWdEcm9wLFxuICAgICAgICAgIGhhc1NoYWRvdzogZmFsc2UsXG4gICAgICAgICAgcGFkZGluZ1NpemU6IHBhbmVsUGFkZGluZ1NpemUsXG4gICAgICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgICAgIFwiYXJpYS1saXZlXCI6IGFyaWFMaXZlLFxuICAgICAgICAgIHJvbGU6IHBhbmVsUm9sZSxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbGxlZEJ5LFxuICAgICAgICAgIFwiYXJpYS1tb2RhbFwiOiBwYW5lbEFyaWFNb2RhbCxcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgICAgIHN0eWxlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRoaXMuc3RhdGUucG9wb3ZlclN0eWxlcyksIHt9LCB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgYHdpbGwtY2hhbmdlYCB0byByZWR1Y2UgcmlzayBvZiBhIGJsdXJyeSBhbmltYXRpb24gaW4gQ2hyb21lIDg2K1xuICAgICAgICAgICAgd2lsbENoYW5nZTogIXRoaXMuc3RhdGUuaXNPcGVuU3RhYmxlID8gJ3RyYW5zZm9ybSwgb3BhY2l0eScgOiB1bmRlZmluZWRcbiAgICAgICAgICB9KVxuICAgICAgICB9KSwgc2hvd0Fycm93ICYmIHRoaXMuc3RhdGUuYXJyb3dQb3NpdGlvbiAmJiBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXJBcnJvdywge1xuICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLnN0YXRlLmFycm93UG9zaXRpb24sXG4gICAgICAgICAgc3R5bGU6IHRoaXMuc3RhdGUuYXJyb3dTdHlsZXNcbiAgICAgICAgfSwgYXJyb3dDaGlsZHJlbiksIGZvY3VzVHJhcFNjcmVlblJlYWRlclRleHQsIF9fX0Vtb3Rpb25KU1goRXVpTXV0YXRpb25PYnNlcnZlciwge1xuICAgICAgICAgIG9ic2VydmVyT3B0aW9uczoge1xuICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICAgIC8vIGVsZW1lbnQgYXR0cmlidXRlIGNoYW5nZXNcbiAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgIC8vIGFkZGVkL3JlbW92ZWQgZWxlbWVudHNcbiAgICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAgICAgICAvLyB0ZXh0IGNoYW5nZXNcbiAgICAgICAgICAgIHN1YnRyZWU6IHRydWUgLy8gd2F0Y2ggYWxsIGNoaWxkIGVsZW1lbnRzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk11dGF0aW9uOiB0aGlzLm9uTXV0YXRpb25cbiAgICAgICAgfSwgZnVuY3Rpb24gKG11dGF0aW9uUmVmKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgcmVmOiBtdXRhdGlvblJlZlxuICAgICAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgfSkpKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlYWN0LWZvY3VzLW9uIGFuZCByZWxhdGVkIGRvIG5vdCByZWdpc3RlciBvdXRzaWRlIGNsaWNrIGRldGVjdGlvblxuICAgICAgLy8gd2hlbiBkaXNhYmxlZCwgc28gd2Ugc3RpbGwgbmVlZCB0byBjb25kaXRpb25hbGx5IGNoZWNrIGZvciB0aGF0IG91cnNlbHZlc1xuICAgICAgaWYgKG93bkZvY3VzKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjc3M6IHBvcG92ZXJTdHlsZXMsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHJlZjogdGhpcy5wb3BvdmVyUmVmXG4gICAgICAgIH0sIHJlc3QpLCBidXR0b24gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IG51bGwgOiBidXR0b24sIHBhbmVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aU91dHNpZGVDbGlja0RldGVjdG9yLCB7XG4gICAgICAgICAgb25PdXRzaWRlQ2xpY2s6IHRoaXMuY2xvc2VQb3BvdmVyXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNzczogcG9wb3ZlclN0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgcmVmOiB0aGlzLnBvcG92ZXJSZWYsXG4gICAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93blxuICAgICAgICB9LCByZXN0KSwgYnV0dG9uIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBudWxsIDogYnV0dG9uLCBwYW5lbCkpO1xuICAgICAgfVxuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIGlmIChwcmV2U3RhdGUucHJldlByb3BzLmlzT3BlbiAmJiAhbmV4dFByb3BzLmlzT3Blbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByZXZQcm9wczoge1xuICAgICAgICAgICAgaXNPcGVuOiBuZXh0UHJvcHMuaXNPcGVuXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpc0Nsb3Npbmc6IHRydWUsXG4gICAgICAgICAgaXNPcGVuaW5nOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHByZXZTdGF0ZS5wcmV2UHJvcHMuaXNPcGVuICE9PSBuZXh0UHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJldlByb3BzOiB7XG4gICAgICAgICAgICBpc09wZW46IG5leHRQcm9wcy5pc09wZW5cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlQb3BvdmVyLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGlzT3BlbjogZmFsc2UsXG4gIG93bkZvY3VzOiB0cnVlLFxuICByZXBvc2l0aW9uVG9Dcm9zc0F4aXM6IHRydWUsXG4gIGFuY2hvclBvc2l0aW9uOiAnZG93bkNlbnRlcicsXG4gIHBhbmVsUGFkZGluZ1NpemU6ICdtJyxcbiAgaGFzQXJyb3c6IHRydWUsXG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snXG59KTtcbkV1aVBvcG92ZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBBbGlnbm1lbnQgb2YgdGhlIHBvcG92ZXIgYW5kIGFycm93IHJlbGF0aXZlIHRvIHRoZSBidXR0b25cbiAgICAgKi9cbiAgYW5jaG9yUG9zaXRpb246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFN0eWxlIGFuZCBwb3NpdGlvbiBhbHRlcmF0aW9uIGZvciBhcnJvdy1sZXNzIGF0dGFjaG1lbnQuXG4gICAgICogSW50ZW5kZWQgZm9yIHVzZSB3aXRoIGlucHV0cyBhcyBhbmNob3JzLCBlLmcuIEV1aUlucHV0UG9wb3ZlclxuICAgICAqL1xuICBhdHRhY2hUb0FuY2hvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFRyaWdnZXJpbmcgZWxlbWVudCBmb3Igd2hpY2ggdG8gYWxpZ24gdGhlIHBvcG92ZXIgdG9cbiAgICAgKi9cbiAgYnV0dG9uOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGhhbmRsZSBoaWRpbmcgb2YgdGhlIHBvcG92ZXJcbiAgICAgKi9cbiAgY2xvc2VQb3BvdmVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBSZXN0cmljdCB0aGUgcG9wb3ZlcidzIHBvc2l0aW9uIHdpdGhpbiB0aGlzIGVsZW1lbnRcbiAgICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBDU1MgZGlzcGxheSB0eXBlIGZvciBib3RoIHRoZSBwb3BvdmVyIGFuZCBhbmNob3JcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byBFdWlGb2N1c1RyYXBcbiAgICAgKi9cbiAgZm9jdXNUcmFwUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFNob3cgYXJyb3cgaW5kaWNhdGluZyB0byBvcmlnaW5hdGluZyBidXR0b25cbiAgICAgKi9cbiAgaGFzQXJyb3c6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBTcGVjaWZpZXMgd2hhdCBlbGVtZW50IHNob3VsZCBpbml0aWFsbHkgaGF2ZSBmb2N1czsgQ2FuIGJlIGEgRE9NXG4gICAgICogbm9kZSwgb3IgYSBzZWxlY3RvciBzdHJpbmcgKHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvXG4gICAgICogZG9jdW1lbnQucXVlcnlTZWxlY3RvcigpIHRvIGZpbmQgdGhlIERPTSBub2RlKSwgb3IgYSBmdW5jdGlvbiB0aGF0XG4gICAgICogcmV0dXJucyBhIERPTSBub2RlLlxuICAgICAqXG4gICAgICogSWYgbm90IHBhc3NlZCwgaW5pdGlhbCBmb2N1cyBkZWZhdWx0cyB0byB0aGUgcG9wb3ZlciBwYW5lbC5cbiAgICAgKi9cbiAgaW5pdGlhbEZvY3VzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBQYXNzZWQgZGlyZWN0bHkgdG8gRXVpUG9ydGFsIGZvciBET00gcG9zaXRpb25pbmcuIEJvdGggcHJvcGVydGllcyBhcmVcbiAgICAgKiByZXF1aXJlZCBpZiBwcm9wIGlzIHNwZWNpZmllZFxuICAgICAqL1xuICBpbnNlcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgc2libGluZzogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYmVmb3JlXCIsIFwiYWZ0ZXJcIl0pLmlzUmVxdWlyZWRcbiAgfSksXG4gIC8qKlxuICAgICAqIFZpc2liaWxpdHkgc3RhdGUgb2YgdGhlIHBvcG92ZXJcbiAgICAgKi9cbiAgaXNPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogVHJhcHMgdGFiIGZvY3VzIHdpdGhpbiB0aGUgcG9wb3ZlciBjb250ZW50c1xuICAgICAqL1xuICBvd25Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEN1c3RvbSBjbGFzcyBhZGRlZCB0byB0aGUgRXVpUGFuZWwgY29udGFpbmluZyB0aGUgcG9wb3ZlciBjb250ZW50c1xuICAgICAqL1xuICBwYW5lbENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogRXVpUGFuZWwgcGFkZGluZyBvbiBhbGwgc2lkZXNcbiAgICAgKi9cbiAgcGFuZWxQYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogU3RhbmRhcmQgRE9NIGBzdHlsZWAgYXR0cmlidXRlLiBQYXNzZWQgdG8gdGhlIEV1aVBhbmVsXG4gICAgICovXG4gIHBhbmVsU3R5bGU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gRXVpUGFuZWwuIFNlZSAjRXVpUG9wb3ZlclBhbmVsUHJvcHNcbiAgICAgKi9cbiAgcGFuZWxQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBlbGVtZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCJdKSxcbiAgICAvKipcbiAgICAgICAqIFBhZGRpbmcgZm9yIGFsbCBmb3VyIHNpZGVzXG4gICAgICAgKi9cbiAgICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIENvcm5lciBib3JkZXIgcmFkaXVzXG4gICAgICAgKi9cbiAgICBib3JkZXJSYWRpdXM6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBXaGVuIHRydWUgdGhlIHBhbmVsIHdpbGwgZ3JvdyBpbiBoZWlnaHQgdG8gbWF0Y2ggYEV1aUZsZXhJdGVtYFxuICAgICAgICovXG4gICAgZ3JvdzogUHJvcFR5cGVzLmJvb2wsXG4gICAgcGFuZWxSZWY6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIHBhbmVsUmVmOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBPcHRpb25hbCBzY3JlZW4gcmVhZGVyIGluc3RydWN0aW9ucyB0byBhbm5vdW5jZSB1cG9uIHBvcG92ZXIgb3BlbixcbiAgICAgKiBpbiBhZGRpdGlvbiB0byBFVUkncyBkZWZhdWx0IHBvcG92ZXIgaW5zdHJ1Y3Rpb25zIGZvciBFc2NhcGUgb24gY2xvc2UuXG4gICAgICogVXNlZnVsIGZvciBwb3BvdmVycyB0aGF0IG1heSBoYXZlIGFkZGl0aW9uYWwga2V5Ym9hcmQgY2FwYWJpbGl0aWVzIHN1Y2ggYXNcbiAgICAgKiBhcnJvdyBuYXZpZ2F0aW9uLlxuICAgICAqL1xuICBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXSksXG4gIHBvcG92ZXJSZWY6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFdoZW4gYHRydWVgLCB0aGUgcG9wb3ZlcidzIHBvc2l0aW9uIGlzIHJlLWNhbGN1bGF0ZWQgd2hlbiB0aGUgdXNlclxuICAgICAqIHNjcm9sbHMsIHRoaXMgc3VwcG9ydHMgaGF2aW5nIGZpeGVkLXBvc2l0aW9uIHBvcG92ZXIgYW5jaG9ycy4gV2hlbiBuZXN0aW5nXG4gICAgICogYW4gYEV1aVBvcG92ZXJgIGluIGEgc2Nyb2xsYWJsZSBjb250YWluZXIsIGByZXBvc2l0aW9uT25TY3JvbGxgIHNob3VsZCBiZSBgdHJ1ZWBcbiAgICAgKi9cbiAgcmVwb3NpdGlvbk9uU2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgcG9wb3ZlcnMgd2lsbCBhdHRlbXB0IHRvIHBvc2l0aW9uIHRoZW1zZWx2ZXMgYWxvbmcgdGhlIGluaXRpYWxcbiAgICAgKiBheGlzIHNwZWNpZmllZC4gSWYgdGhlcmUgaXMgbm90IGVub3VnaCByb29tIGVpdGhlciB2ZXJ0aWNhbGx5IG9yIGhvcml6b250YWxseVxuICAgICAqIGhvd2V2ZXIsIHRoZSBwb3BvdmVyIHdpbGwgYXR0ZW1wdCB0byByZXBvc2l0aW9uIGl0c2VsZiBhbG9uZyB0aGUgc2Vjb25kYXJ5XG4gICAgICogY3Jvc3MgYXhpcyBpZiB0aGVyZSBpcyByb29tIHRoZXJlIGluc3RlYWQuXG4gICAgICpcbiAgICAgKiBJZiB5b3UgZG8gbm90IG5vdCB3YW50IHRoaXMgcmVwb3NpdGlvbmluZyB0byBvY2N1ciAoYW5kIGl0IGlzIGFjY2VwdGFibGUgZm9yXG4gICAgICogdGhlIHBvcG92ZXIgdG8gYXBwZWFyIG9mZnNjcmVlbiksIHNldCB0aGlzIHRvIGZhbHNlIHRvIGRpc2FibGUgdGhpcyBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgcmVwb3NpdGlvblRvQ3Jvc3NBeGlzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogTXVzdCBiZSBzZXQgdG8gdHJ1ZSBpZiB1c2luZyBgRXVpRHJhZ0Ryb3BDb250ZXh0YCB3aXRoaW4gYSBwb3BvdmVyLFxuICAgICAqIG90aGVyd2lzZSB5b3VyIG5lc3RlZCBkcmFnICYgZHJvcCB3aWxsIGhhdmUgaW5jb3JyZWN0IHBvc2l0aW9uaW5nXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBgdXNlUG9ydGFsYCBwcm9wIG9uIGNoaWxkcmVuIGBFdWlEcmFnZ2FibGVgIGNvbXBvbmVudHMgaW5zdGVhZC5cbiAgICAgKi9cbiAgaGFzRHJhZ0Ryb3A6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBwb3BvdmVyIGNvbnRlbnQgaW5oZXJpdHMgdGhlIHotaW5kZXggb2YgdGhlIGFuY2hvclxuICAgICAqIGNvbXBvbmVudDsgcGFzcyBgekluZGV4YCB0byBvdmVycmlkZVxuICAgICAqL1xuICB6SW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAqIERpc3RhbmNlIGF3YXkgZnJvbSB0aGUgYW5jaG9yIHRoYXQgdGhlIHBvcG92ZXIgd2lsbCByZW5kZXJcbiAgICAgKi9cbiAgb2Zmc2V0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICAgKiBNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBib3VuZGluZyBjb250YWluZXI7XG4gICAgICogUGFzcyBhbiBhcnJheSBvZiA0IHZhbHVlcyB0byBhZGp1c3QgZWFjaCBzaWRlIGRpZmZlcmVudGx5OiBgW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF1gXG4gICAgICogQGRlZmF1bHQgMTZcbiAgICAgKi9cbiAgYnVmZmVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBFbGVtZW50IHRvIHBhc3MgYXMgdGhlIGNoaWxkIGVsZW1lbnQgb2YgdGhlIGFycm93O1xuICAgICAqIFVzZSBjYXNlIGlzIHR5cGljYWxseSBsaW1pdGVkIHRvIGFuIGFjY29tcGFueWluZyBgRXVpQmVhY29uYFxuICAgICAqL1xuICBhcnJvd0NoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogUHJvdmlkZSBhIG5hbWUgdG8gdGhlIHBvcG92ZXIgcGFuZWxcbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIEFsdGVybmF0aXZlIG9wdGlvbiB0byBgYXJpYS1sYWJlbGAgdGhhdCB0YWtlcyBhbiBgaWRgLlxuICAgICAqIFVzdWFsbHkgdGFrZXMgdGhlIGBpZGAgb2YgdGhlIHBvcG92ZXIgdGl0bGVcbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogRnVuY3Rpb24gY2FsbGJhY2sgZm9yIHdoZW4gdGhlIHBvcG92ZXIgcG9zaXRvbiBjaGFuZ2VzXG4gICAgICovXG4gIG9uUG9zaXRpb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyJztcbmV4cG9ydCB2YXIgRXVpTXV0YXRpb25PYnNlcnZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0V1aU9ic2VydmVyKSB7XG4gIGZ1bmN0aW9uIEV1aU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlNdXRhdGlvbk9ic2VydmVyKTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlNdXRhdGlvbk9ic2VydmVyLCBbXS5jb25jYXQoYXJncykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJuYW1lXCIsICdFdWlNdXRhdGlvbk9ic2VydmVyJyk7XG4gICAgLy8gdGhlIGBvbk11dGF0aW9uYCBwcm9wIG1heSBjaGFuZ2Ugd2hpbGUgdGhlIG9ic2VydmVyIGlzIGJvdW5kLCBhYnN0cmFjdGluZ1xuICAgIC8vIGl0IG91dCBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gbWVhbnMgdGhlIGN1cnJlbnQgYG9uTXV0YXRpb25gIHZhbHVlIGlzIHVzZWRcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25NdXRhdGlvblwiLCBmdW5jdGlvbiAocmVjb3Jkcywgb2JzZXJ2ZXIpIHtcbiAgICAgIF90aGlzLnByb3BzLm9uTXV0YXRpb24ocmVjb3Jkcywgb2JzZXJ2ZXIpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJiZWdpbk9ic2VydmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNoaWxkTm9kZSA9IF90aGlzLmNoaWxkTm9kZTtcbiAgICAgIF90aGlzLm9ic2VydmVyID0gbWFrZU11dGF0aW9uT2JzZXJ2ZXIoY2hpbGROb2RlLCBfdGhpcy5wcm9wcy5vYnNlcnZlck9wdGlvbnMsIF90aGlzLm9uTXV0YXRpb24pO1xuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpTXV0YXRpb25PYnNlcnZlciwgX0V1aU9ic2VydmVyKTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlNdXRhdGlvbk9ic2VydmVyKTtcbn0oRXVpT2JzZXJ2ZXIpO1xudmFyIG1ha2VNdXRhdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gbWFrZU11dGF0aW9uT2JzZXJ2ZXIobm9kZSwgX29ic2VydmVyT3B0aW9ucywgY2FsbGJhY2spIHtcbiAgLy8gVGhlIE11dGF0aW9uT2JzZXJ2ZXIgcG9seWZpbGwgdXNlZCBpbiBLaWJhbmEgKGZvciBKZXN0KSBpbXBsZW1lbnRzXG4gIC8vIGFuIG9sZGVyIHNwZWMgaW4gd2hpY2ggc3BlY2lmeWluZyBgYXR0cmlidXRlT2xkVmFsdWVgIG9yIGBhdHRyaWJ1dGVGaWx0ZXJgXG4gIC8vIHdpdGhvdXQgc3BlY2lmeWluZyBgYXR0cmlidXRlc2AgcmVzdWx0cyBpbiBhIGBTeW50YXhFcnJvcmAuXG4gIC8vIFRoZSBmb2xsb3dpbmcgbG9naWMgcGF0Y2hlcyB0aGUgbmV3ZXIgc3BlYyBpbiB3aGljaCBgYXR0cmlidXRlczogdHJ1ZWAgY2FuIGJlXG4gIC8vIGltcGxpZWQgd2hlbiBhcHByb3ByaWF0ZSAoYGF0dHJpYnV0ZU9sZFZhbHVlYCBvciBgYXR0cmlidXRlRmlsdGVyYCBpcyBzcGVjaWZpZWQpLlxuICB2YXIgb2JzZXJ2ZXJPcHRpb25zID0gX29iamVjdFNwcmVhZCh7fSwgX29ic2VydmVyT3B0aW9ucyk7XG4gIHZhciBuZWVkc0F0dHJpYnV0ZXMgPSBvYnNlcnZlck9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2F0dHJpYnV0ZU9sZFZhbHVlJykgfHwgb2JzZXJ2ZXJPcHRpb25zLmhhc093blByb3BlcnR5KCdhdHRyaWJ1dGVGaWx0ZXInKTtcbiAgaWYgKG5lZWRzQXR0cmlidXRlcyAmJiAhb2JzZXJ2ZXJPcHRpb25zLmhhc093blByb3BlcnR5KCdhdHRyaWJ1dGVzJykpIHtcbiAgICBvYnNlcnZlck9wdGlvbnMuYXR0cmlidXRlcyA9IHRydWU7XG4gIH1cbiAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICBvYnNlcnZlci5vYnNlcnZlKG5vZGUsIG9ic2VydmVyT3B0aW9ucyk7XG4gIHJldHVybiBvYnNlcnZlcjtcbn07XG5leHBvcnQgdmFyIHVzZU11dGF0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiB1c2VNdXRhdGlvbk9ic2VydmVyKGNvbnRhaW5lciwgY2FsbGJhY2ssIG9ic2VydmVyT3B0aW9ucykge1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjb250YWluZXIgIT0gbnVsbCkge1xuICAgICAgdmFyIG9ic2VydmVyID0gbWFrZU11dGF0aW9uT2JzZXJ2ZXIoY29udGFpbmVyLCBvYnNlcnZlck9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSxcbiAgLy8gaWdub3JlIGNoYW5naW5nIG9ic2VydmVyT3B0aW9uc1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgW2NvbnRhaW5lciwgY2FsbGJhY2tdKTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHknO1xuZXhwb3J0IHZhciBFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciwgW3Byb3BzXSk7XG5cbiAgICAvLyB0aGUgaWQgaXMgdXNlZCB0byBpZGVudGlmeSB3aGljaCBFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvclxuICAgIC8vIGlzIHRoZSBzb3VyY2Ugb2YgYSBjbGljayBldmVudDsgYXMgdGhlIGNsaWNrIGV2ZW50IGJ1YmJsZXNcbiAgICAvLyB1cCBhbmQgcmVhY2hlcyB0aGUgY2xpY2sgZGV0ZWN0b3IncyBjaGlsZCBjb21wb25lbnQgdGhlXG4gICAgLy8gaWQgdmFsdWUgaXMgc3RhbXBlZCBvbiB0aGUgZXZlbnQuIFRoaXMgaWQgaXMgaW5zcGVjdGVkXG4gICAgLy8gaW4gdGhlIGRvY3VtZW50J3MgY2xpY2sgaGFuZGxlciwgYW5kIGlmIHRoZSBpZCBkb2Vzbid0XG4gICAgLy8gZXhpc3Qgb3IgZG9lc24ndCBtYXRjaCB0aGlzIGRldGVjdG9yJ3MgaWQsIHRoZW4gdHJpZ2dlclxuICAgIC8vIHRoZSBvdXRzaWRlQ2xpY2sgY2FsbGJhY2suXG4gICAgLy9cbiAgICAvLyBUYWtpbmcgdGhpcyBhcHByb2FjaCBpbnN0ZWFkIG9mIGNoZWNraW5nIGlmIHRoZSBldmVudCdzXG4gICAgLy8gdGFyZ2V0IGVsZW1lbnQgZXhpc3RzIGluIHRoaXMgY29tcG9uZW50J3MgRE9NIHN1Yi10cmVlIGlzXG4gICAgLy8gbmVjZXNzYXJ5IGZvciBoYW5kbGluZyBjbGlja3Mgb3JpZ2luYXRpbmcgZnJvbSBjaGlsZHJlblxuICAgIC8vIHJlbmRlcmVkIHRocm91Z2ggUmVhY3QncyBwb3J0YWxzIChFdWlQb3J0YWwpLiBUaGUgaWQgdHJhY2tpbmdcbiAgICAvLyB3b3JrcyBiZWNhdXNlIFJlYWN0IGd1YXJhbnRlZXMgdGhlIGV2ZW50IGJ1YmJsZXMgdGhyb3VnaCB0aGVcbiAgICAvLyB2aXJ0dWFsIERPTSBhbmQgZXhlY3V0ZXMgRXVpQ2xpY2tEZXRlY3RvcidzIG9uQ2xpY2sgaGFuZGxlcixcbiAgICAvLyBzdGFtcGluZyB0aGUgaWQgZXZlbiB0aG91Z2ggdGhlIGV2ZW50IG9yaWdpbmF0ZXMgb3V0c2lkZVxuICAgIC8vIHRoaXMgY29tcG9uZW50J3MgcmVpZmllZCBET00gdHJlZS5cbiAgICAvLyBXZSBhcmUgd29ya2luZyB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSBjbGljayBldmVudCBpc1xuICAgIC8vIGVxdWl2YWxlbnQgdG8gYSBzZXF1ZW50aWFsLCBjb21wb3VuZCBwcmVzcyBhbmQgcmVsZWFzZSBvZlxuICAgIC8vIHRoZSBwb2ludGluZyBkZXZpY2UgKG1vdXNlLCBmaW5nZXIsIHN0eWx1cywgZXRjLikuXG4gICAgLy8gQSBjbGljayBldmVudCdzIHRhcmdldCBjYW4gYmUgaW1wcmVjaXNlLCBhcyB0aGUgdmFsdWUgd2lsbCBiZVxuICAgIC8vIHRoZSBjbG9zZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgcHJlc3MgKG1vdXNlZG93biwgdG91Y2hzdGFydClcbiAgICAvLyBhbmQgcmVsZWFzZSAobW91c2V1cCwgdG91Y2hlbmQpIGV2ZW50cyAob2Z0ZW4gPGJvZHkgLz4pIGlmXG4gICAgLy8gdGhlIHRoZSB0YXJnZXQgb2YgZWFjaCBldmVudCBkaWZmZXJzLlxuICAgIC8vIFdlIG5lZWQgdGhlIGFjdHVhbCBldmVudCB0YXJnZXRzIHRvIG1ha2UgdGhlIGNvcnJlY3QgZGVjaXNpb25zXG4gICAgLy8gYWJvdXQgdXNlciBpbnRlbnRpb24uIFNvLCBjb25zaWRlciB0aGUgZG93bi9zdGFydCBhbmQgdXAvZW5kXG4gICAgLy8gaXRlbXMgYmVsb3cgYXMgdGhlIGRlY29uc3RydWN0aW9uIG9mIGEgY2xpY2sgZXZlbnQuXG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImlkXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNhcHR1cmVkRG93bklkc1wiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkNsaWNrT3V0c2lkZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgICBvbk91dHNpZGVDbGljayA9IF90aGlzJHByb3BzLm9uT3V0c2lkZUNsaWNrO1xuICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBldmVudCA9IGU7XG4gICAgICBpZiAoZXZlbnQuZXVpR2VuZXJhdGVkQnkgJiYgZXZlbnQuZXVpR2VuZXJhdGVkQnkuaW5jbHVkZXMoX3RoaXMuaWQpIHx8IF90aGlzLmNhcHR1cmVkRG93bklkcy5pbmNsdWRlcyhfdGhpcy5pZCkpIHtcbiAgICAgICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IFtdO1xuICAgICAgcmV0dXJuIG9uT3V0c2lkZUNsaWNrKGV2ZW50KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25DaGlsZENsaWNrXCIsIGZ1bmN0aW9uIChldmVudCwgY2IpIHtcbiAgICAgIC8vIHRvIHN1cHBvcnQgbmVzdGVkIGNsaWNrIGRldGVjdG9ycywgYnVpbGQgYW4gYXJyYXlcbiAgICAgIC8vIG9mIGRldGVjdG9yIGlkcyB0aGF0IGhhdmUgYmVlbiBlbmNvdW50ZXJlZDtcbiAgICAgIGlmIChldmVudC5uYXRpdmVFdmVudC5oYXNPd25Qcm9wZXJ0eSgnZXVpR2VuZXJhdGVkQnknKSkge1xuICAgICAgICBldmVudC5uYXRpdmVFdmVudC5ldWlHZW5lcmF0ZWRCeS5wdXNoKF90aGlzLmlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmV1aUdlbmVyYXRlZEJ5ID0gW190aGlzLmlkXTtcbiAgICAgIH1cbiAgICAgIGlmIChjYikgY2IoZXZlbnQpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkNoaWxkTW91c2VEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMub25DaGlsZENsaWNrKGV2ZW50LCBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgbmF0aXZlRXZlbnQgPSBlLm5hdGl2ZUV2ZW50O1xuICAgICAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBuYXRpdmVFdmVudC5ldWlHZW5lcmF0ZWRCeTtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uTW91c2VEb3duKSBfdGhpcy5wcm9wcy5vbk1vdXNlRG93bihlKTtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVG91Y2hTdGFydCkgX3RoaXMucHJvcHMub25Ub3VjaFN0YXJ0KGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQ2hpbGRNb3VzZVVwXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMub25DaGlsZENsaWNrKGV2ZW50LCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Nb3VzZVVwKSBfdGhpcy5wcm9wcy5vbk1vdXNlVXAoZSk7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vblRvdWNoRW5kKSBfdGhpcy5wcm9wcy5vblRvdWNoRW5kKGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX3RoaXMuaWQgPSBodG1sSWRHZW5lcmF0b3IoKSgpO1xuICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IFtdO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aU91dHNpZGVDbGlja0RldGVjdG9yLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uQ2xpY2tPdXRzaWRlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vbkNsaWNrT3V0c2lkZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25DbGlja091dHNpZGUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uQ2xpY2tPdXRzaWRlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGhpcy5wcm9wcy5jaGlsZHJlbi5wcm9wcyksIHtcbiAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25DaGlsZE1vdXNlRG93bixcbiAgICAgICAgb25Ub3VjaFN0YXJ0OiB0aGlzLm9uQ2hpbGRNb3VzZURvd24sXG4gICAgICAgIG9uTW91c2VVcDogdGhpcy5vbkNoaWxkTW91c2VVcCxcbiAgICAgICAgb25Ub3VjaEVuZDogdGhpcy5vbkNoaWxkTW91c2VVcFxuICAgICAgfSk7XG4gICAgICB2YXIgY2hpbGQgPSBDaGlsZHJlbi5vbmx5KHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGQsIHByb3BzKTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbkV1aU91dHNpZGVDbGlja0RldGVjdG9yLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIG9uT3V0c2lkZUNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jLFxuICBvbk1vdXNlVXA6IFByb3BUeXBlcy5mdW5jLFxuICBvblRvdWNoU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBvblRvdWNoRW5kOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwicG9zaXRpb25cIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBldWlQb3BvdmVyQXJyb3dTdHlsZXMgfSBmcm9tICcuL19wb3BvdmVyX2Fycm93LnN0eWxlcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFBPU0lUSU9OUyA9IFsndG9wJywgJ2xlZnQnLCAncmlnaHQnLCAnYm90dG9tJ107XG5leHBvcnQgdmFyIEV1aVBvcG92ZXJBcnJvdyA9IGZ1bmN0aW9uIEV1aVBvcG92ZXJBcnJvdyhfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVBvcG92ZXJBcnJvd1N0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVBvcG92ZXJBcnJvdywgc3R5bGVzW3Bvc2l0aW9uXV07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IFwiZXVpUG9wb3Zlcl9fYXJyb3dcIixcbiAgICBcImRhdGEtcG9wb3Zlci1hcnJvd1wiOiBwb3NpdGlvbixcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVBvcG92ZXJBcnJvdy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBwb3NpdGlvbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FscywgbG9naWNhbFNpemVDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIHBvcG92ZXJBcnJvd1NpemUgPSAnbSc7XG5leHBvcnQgdmFyIGV1aVBvcG92ZXJBcnJvd1N0eWxlcyA9IGZ1bmN0aW9uIGV1aVBvcG92ZXJBcnJvd1N0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgYm9yZGVyQ29sb3IgPSAndmFyKC0tZXVpUG9wb3ZlckJhY2tncm91bmRDb2xvciknO1xuICB2YXIgYXJyb3dTaXplID0gZXVpVGhlbWUuc2l6ZVtwb3BvdmVyQXJyb3dTaXplXTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpUG9wb3ZlckFycm93OiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxTaXplQ1NTKDAsIDApLCBcIiY6OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsU2l6ZUNTUygwLCAwKSwgXCI7fTtsYWJlbDpldWlQb3BvdmVyQXJyb3c7XCIpLFxuICAgIC8vIFBPU0lUSU9OU1xuICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhcIiY6OmJlZm9yZXtcIiwgbG9naWNhbHMuYm90dG9tLCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItbGVmdCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1yaWdodCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci10b3AnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgXCIsIGJvcmRlckNvbG9yLCBcIjt9O2xhYmVsOnRvcDtcIiksXG4gICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKFwiJjo6YmVmb3Jle1wiLCBsb2dpY2Fscy50b3AsIFwiOi1cIiwgYXJyb3dTaXplLCBcIjtcIiwgbG9naWNhbHNbJ2JvcmRlci1sZWZ0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLXJpZ2h0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLWJvdHRvbSddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6Ym90dG9tO1wiKSxcbiAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwiJjo6YmVmb3Jle1wiLCBsb2dpY2Fscy50b3AsIFwiOjUwJTtcIiwgbG9naWNhbHMucmlnaHQsIFwiOi1cIiwgYXJyb3dTaXplLCBcIjtcIiwgbG9naWNhbHNbJ2JvcmRlci10b3AnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItYm90dG9tJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLWxlZnQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgXCIsIGJvcmRlckNvbG9yLCBcIjt9O2xhYmVsOmxlZnQ7XCIpLFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwiJjo6YmVmb3Jle1wiLCBsb2dpY2Fscy50b3AsIFwiOjUwJTtcIiwgbG9naWNhbHMubGVmdCwgXCI6LVwiLCBhcnJvd1NpemUsIFwiO1wiLCBsb2dpY2Fsc1snYm9yZGVyLXRvcCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1ib3R0b20nXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItcmlnaHQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgXCIsIGJvcmRlckNvbG9yLCBcIjt9O2xhYmVsOnJpZ2h0O1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpUG9wb3ZlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVBvcG92ZXJTdHlsZXMoKSB7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZSBhbmNob3Igd3JhcHBlclxuICAgIGV1aVBvcG92ZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpldWlQb3BvdmVyO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaXNPcGVuXCIsIFwiaXNBdHRhY2hlZFwiLCBcImhhc0RyYWdEcm9wXCIsIFwicG9zaXRpb25cIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVBhbmVsIH0gZnJvbSAnLi4vLi4vcGFuZWwvcGFuZWwnO1xuaW1wb3J0IHsgZXVpUG9wb3ZlclBhbmVsU3R5bGVzIH0gZnJvbSAnLi9fcG9wb3Zlcl9wYW5lbC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBERUZBVUxUX1BBTkVMX1BBRERJTkdfU0laRSA9ICdsJztcbmV4cG9ydCB2YXIgRXVpUG9wb3ZlclBhbmVsQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHtcbiAgcGFkZGluZ1NpemU6IERFRkFVTFRfUEFORUxfUEFERElOR19TSVpFXG59KTtcbi8qKlxuICogKklOVEVSTkFMIE9OTFkqXG4gKiBQdXJlbHkgZm9yIHJlLXVzZSBvZiBzdHlsaW5nXG4gKi9cbmV4cG9ydCB2YXIgRXVpUG9wb3ZlclBhbmVsID0gZnVuY3Rpb24gRXVpUG9wb3ZlclBhbmVsKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBpc09wZW4gPSBfcmVmLmlzT3BlbixcbiAgICBpc0F0dGFjaGVkID0gX3JlZi5pc0F0dGFjaGVkLFxuICAgIGhhc0RyYWdEcm9wID0gX3JlZi5oYXNEcmFnRHJvcCxcbiAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBvcG92ZXJfX3BhbmVsJywgY2xhc3NOYW1lKTtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBjc3NTdHlsZXMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3R5bGVzID0gZXVpUG9wb3ZlclBhbmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gICAgdmFyIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgc2hhcmVkU3R5bGVzID0gW3N0eWxlcy5ldWlQb3BvdmVyX19wYW5lbCwgc3R5bGVzW2NvbG9yTW9kZV0sIGlzT3BlbiAmJiBzdHlsZXMuaXNPcGVuXTtcbiAgICBpZiAoaGFzRHJhZ0Ryb3ApIHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQoc2hhcmVkU3R5bGVzLCBbc3R5bGVzLmhhc0RyYWdEcm9wLmhhc0RyYWdEcm9wLCBwb3NpdGlvbiAmJiBzdHlsZXMuaGFzRHJhZ0Ryb3BbcG9zaXRpb25dXSk7XG4gICAgfVxuICAgIGlmIChpc0F0dGFjaGVkKSB7XG4gICAgICByZXR1cm4gW10uY29uY2F0KHNoYXJlZFN0eWxlcywgW3N0eWxlcy5pc0F0dGFjaGVkLmlzQXR0YWNoZWQsIHBvc2l0aW9uICYmIHN0eWxlcy5pc0F0dGFjaGVkW3Bvc2l0aW9uXV0pO1xuICAgIH1cbiAgICByZXR1cm4gW10uY29uY2F0KHNoYXJlZFN0eWxlcywgW3N0eWxlcy5oYXNUcmFuc2Zvcm0uaGFzVHJhbnNmb3JtLCBpc09wZW4gJiYgcG9zaXRpb24gJiYgc3R5bGVzLmhhc1RyYW5zZm9ybVtwb3NpdGlvbl1dKTtcbiAgfSwgW2V1aVRoZW1lQ29udGV4dCwgaXNPcGVuLCBwb3NpdGlvbiwgaXNBdHRhY2hlZCwgaGFzRHJhZ0Ryb3BdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlclBhbmVsQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB7XG4gICAgICBwYWRkaW5nU2l6ZTogcmVzdC5wYWRkaW5nU2l6ZSB8fCBERUZBVUxUX1BBTkVMX1BBRERJTkdfU0laRVxuICAgIH1cbiAgfSwgX19fRW1vdGlvbkpTWChFdWlQYW5lbCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBcImRhdGEtcG9wb3Zlci1wYW5lbFwiOiB0cnVlLFxuICAgIFwiZGF0YS1wb3BvdmVyLW9wZW5cIjogaXNPcGVuIHx8IHVuZGVmaW5lZFxuICB9LCByZXN0KSwgY2hpbGRyZW4pKTtcbn07XG5FdWlQb3BvdmVyUGFuZWwucHJvcFR5cGVzID0ge1xuICBlbGVtZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCJdKSxcbiAgLyoqXG4gICAgICogUGFkZGluZyBmb3IgYWxsIGZvdXIgc2lkZXNcbiAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIENvcm5lciBib3JkZXIgcmFkaXVzXG4gICAgICovXG4gIGJvcmRlclJhZGl1czogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogV2hlbiB0cnVlIHRoZSBwYW5lbCB3aWxsIGdyb3cgaW4gaGVpZ2h0IHRvIG1hdGNoIGBFdWlGbGV4SXRlbWBcbiAgICAgKi9cbiAgZ3JvdzogUHJvcFR5cGVzLmJvb2wsXG4gIHBhbmVsUmVmOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgaXNPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNBdHRhY2hlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSksXG4gIGhhc0RyYWdEcm9wOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwicGFkZGluZ1NpemVcIiwgXCJib3JkZXJSYWRpdXNcIiwgXCJjb2xvclwiLCBcImhhc1NoYWRvd1wiLCBcImhhc0JvcmRlclwiLCBcImdyb3dcIiwgXCJwYW5lbFJlZlwiLCBcImVsZW1lbnRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlRXVpQmFja2dyb3VuZENvbG9yQ1NTLCB1c2VFdWlQYWRkaW5nQ1NTLCBCQUNLR1JPVU5EX0NPTE9SUywgUEFERElOR19TSVpFUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBldWlQYW5lbFN0eWxlcyB9IGZyb20gJy4vcGFuZWwuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gUEFERElOR19TSVpFUztcblxuLy8gRXhwb3J0ZWQgcGFkZGluZyBzaXplcyBhbmQgY2xhc3MgbmFtZXMgbmVjZXNzYXJ5IGZvciBFdWlQb3BvdmVyIGFuZCBFdWlDYXJkLlxuLy8gV2hpY2ggY3VycmVudGx5IHdpbGwgb25seSBtYWludGFpbiBzdXBwb3J0IGZvciB0aGUgb3JpZ2luYWwgdmFsdWVzIHVudGlsIGNvbnZlcnNpb24uXG52YXIgcGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbm9uZTogbnVsbCxcbiAgczogJ3BhZGRpbmdTbWFsbCcsXG4gIG06ICdwYWRkaW5nTWVkaXVtJyxcbiAgbDogJ3BhZGRpbmdMYXJnZSdcbn07XG52YXIgX1NJWkVTID0ga2V5c09mKHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBCT1JERVJfUkFESUkgPSBbJ25vbmUnLCAnbSddO1xuZXhwb3J0IHZhciBDT0xPUlMgPSBCQUNLR1JPVU5EX0NPTE9SUztcbmV4cG9ydCB2YXIgRXVpUGFuZWwgPSBmdW5jdGlvbiBFdWlQYW5lbChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRwYWRkaW5nU2l6ZSA9IF9yZWYucGFkZGluZ1NpemUsXG4gICAgcGFkZGluZ1NpemUgPSBfcmVmJHBhZGRpbmdTaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHBhZGRpbmdTaXplLFxuICAgIF9yZWYkYm9yZGVyUmFkaXVzID0gX3JlZi5ib3JkZXJSYWRpdXMsXG4gICAgYm9yZGVyUmFkaXVzID0gX3JlZiRib3JkZXJSYWRpdXMgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkYm9yZGVyUmFkaXVzLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3BsYWluJyA6IF9yZWYkY29sb3IsXG4gICAgX3JlZiRoYXNTaGFkb3cgPSBfcmVmLmhhc1NoYWRvdyxcbiAgICBoYXNTaGFkb3cgPSBfcmVmJGhhc1NoYWRvdyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkaGFzU2hhZG93LFxuICAgIF9yZWYkaGFzQm9yZGVyID0gX3JlZi5oYXNCb3JkZXIsXG4gICAgaGFzQm9yZGVyID0gX3JlZiRoYXNCb3JkZXIgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRoYXNCb3JkZXIsXG4gICAgX3JlZiRncm93ID0gX3JlZi5ncm93LFxuICAgIGdyb3cgPSBfcmVmJGdyb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGdyb3csXG4gICAgcGFuZWxSZWYgPSBfcmVmLnBhbmVsUmVmLFxuICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICAvLyBTaGFkb3dzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiB0aGVyZSdzIGEgd2hpdGUgYmFja2dyb3VuZCAocGxhaW4pXG4gIHZhciBjYW5IYXZlU2hhZG93ID0gIWhhc0JvcmRlciAmJiBjb2xvciA9PT0gJ3BsYWluJztcbiAgdmFyIGNhbkhhdmVCb3JkZXIgPSBjb2xvciA9PT0gJ3BsYWluJyB8fCBjb2xvciA9PT0gJ3RyYW5zcGFyZW50JztcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVBhbmVsU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpUGFuZWwsIGdyb3cgJiYgc3R5bGVzLmdyb3csIHN0eWxlcy5yYWRpdXNbYm9yZGVyUmFkaXVzXSwgdXNlRXVpUGFkZGluZ0NTUygpW3BhZGRpbmdTaXplXSwgdXNlRXVpQmFja2dyb3VuZENvbG9yQ1NTKClbY29sb3JdLCBjYW5IYXZlU2hhZG93ICYmIGhhc1NoYWRvdyA9PT0gdHJ1ZSAmJiBzdHlsZXMuaGFzU2hhZG93LCBjYW5IYXZlQm9yZGVyICYmIGhhc0JvcmRlciA9PT0gdHJ1ZSAmJiBzdHlsZXMuaGFzQm9yZGVyLCByZXN0Lm9uQ2xpY2sgJiYgc3R5bGVzLmlzQ2xpY2thYmxlXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQYW5lbCcsIFwiZXVpUGFuZWwtLVwiLmNvbmNhdChjb2xvciksIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJldWlQYW5lbC0tXCIuY29uY2F0KHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXBbcGFkZGluZ1NpemVdKSwgcGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcFtwYWRkaW5nU2l6ZV0pLCBjbGFzc05hbWUpO1xuICBpZiAocmVzdC5vbkNsaWNrICYmIGVsZW1lbnQgIT09ICdkaXYnKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBwYW5lbFJlZixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNzczogY3NzU3R5bGVzXG4gICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgfVxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBwYW5lbFJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlQYW5lbC5wcm9wVHlwZXMgPSB7XG4gIGVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIl0pLCBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCJdKV0pLFxuICAvKipcbiAgICAgKiBBZGRzIGEgbWVkaXVtIHNoYWRvdyB0byB0aGUgcGFuZWw7XG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluXCJgXG4gICAgICovXG4gIC8qKlxuICAgICAqIEFkZHMgYSBtZWRpdW0gc2hhZG93IHRvIHRoZSBwYW5lbDtcbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW5cImBcbiAgICAgKi9cbiAgaGFzU2hhZG93OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQWRkcyBhIHNsaWdodCAxcHggYm9yZGVyIG9uIGFsbCBlZGdlcy5cbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW4gfCB0cmFuc3BhcmVudFwiYFxuICAgICAqL1xuICAvKipcbiAgICAgKiBBZGRzIGEgc2xpZ2h0IDFweCBib3JkZXIgb24gYWxsIGVkZ2VzLlxuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpbiB8IHRyYW5zcGFyZW50XCJgXG4gICAgICovXG4gIGhhc0JvcmRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFBhZGRpbmcgZm9yIGFsbCBmb3VyIHNpZGVzXG4gICAgICovXG4gIC8qKlxuICAgICAqIFBhZGRpbmcgZm9yIGFsbCBmb3VyIHNpZGVzXG4gICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBDb3JuZXIgYm9yZGVyIHJhZGl1c1xuICAgICAqL1xuICAvKipcbiAgICAgKiBDb3JuZXIgYm9yZGVyIHJhZGl1c1xuICAgICAqL1xuICBib3JkZXJSYWRpdXM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSB0aGUgcGFuZWwgd2lsbCBncm93IGluIGhlaWdodCB0byBtYXRjaCBgRXVpRmxleEl0ZW1gXG4gICAgICovXG4gIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSB0aGUgcGFuZWwgd2lsbCBncm93IGluIGhlaWdodCB0byBtYXRjaCBgRXVpRmxleEl0ZW1gXG4gICAgICovXG4gIGdyb3c6IFByb3BUeXBlcy5ib29sLFxuICBwYW5lbFJlZjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcGFuZWw7XG4gICAgICogVXN1YWxseSBhIGxpZ2h0ZW5lZCBmb3JtIG9mIHRoZSBicmFuZCBjb2xvcnNcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcGFuZWw7XG4gICAgICogVXN1YWxseSBhIGxpZ2h0ZW5lZCBmb3JtIG9mIHRoZSBicmFuZCBjb2xvcnNcbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlTaGFkb3cgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlLCBsb2dpY2FsQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTIybHcwZS1ncm93XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpncm93O1wiXG59IDoge1xuICBuYW1lOiBcIjEyMmx3MGUtZ3Jvd1wiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6Z3JvdztcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFrazdvZGktZXVpUGFuZWxcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzowO2xhYmVsOmV1aVBhbmVsO1wiXG59IDoge1xuICBuYW1lOiBcIjFrazdvZGktZXVpUGFuZWxcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzowO2xhYmVsOmV1aVBhbmVsO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVBhbmVsU3R5bGVzID0gZnVuY3Rpb24gZXVpUGFuZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpUGFuZWw6IF9yZWYyLFxuICAgIGdyb3c6IF9yZWYsXG4gICAgaGFzU2hhZG93OiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdtJyksIFwiOztsYWJlbDpoYXNTaGFkb3c7XCIpLFxuICAgIGhhc0JvcmRlcjogLyojX19QVVJFX18qL2NzcyhcImJvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLnRoaW4sIFwiOztsYWJlbDpoYXNCb3JkZXI7XCIpLFxuICAgIHJhZGl1czoge1xuICAgICAgbm9uZTogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpub25lO1wiKSxcbiAgICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSwgXCI7O2xhYmVsOm07XCIpXG4gICAgfSxcbiAgICAvLyBTZXR1cCBpbnRlcmFjdGl2ZSBiZWhhdmlvclxuICAgIGlzQ2xpY2thYmxlOiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246Ym94LXNoYWRvdyBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCIsdHJhbnNmb3JtIFwiLCBldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIjt9JjplbmFibGVke2Rpc3BsYXk6YmxvY2s7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCI7fSY6aG92ZXIsJjpmb2N1c3tcIiwgZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ2wnKSwgXCIgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7Y3Vyc29yOnBvaW50ZXI7fTtsYWJlbDppc0NsaWNrYWJsZTtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aVNoYWRvdywgZXVpU2hhZG93RmxhdCwgZXVpU2hhZG93TWVkaXVtIH0gZnJvbSAnLi4vLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuaW1wb3J0IHsgZ2V0U2hhZG93Q29sb3IgfSBmcm9tICcuLi8uLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyB0aW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgbG9naWNhbENTUywgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgb3BlbkFuaW1hdGlvblRpbWluZyA9ICdzbG93JztcblxuLyoqXG4gKiAxLiBDYW4gZXhwYW5kIGZ1cnRoZXIsIGJ1dCBpdCBsb29rcyB3ZWlyZCBpZiBpdCdzIHNtYWxsZXIgdGhhbiB0aGUgb3JpZ2luYXRpbmcgYnV0dG9uLlxuICogMi4gQW5pbWF0aW9uIGhhcHBlbnMgb24gdGhlIHBhbmVsLiBCdXQgZG9uJ3QgYW5pbWF0ZSBwb3NpdGlvbiB3aGVuIHVzaW5nIHRoZSBhdHRhY2hlZCBtb2RlIGxpa2UgZm9yIGlucHV0c1xuICogMy4gTWFrZSBzdXJlIHRoZSBwYW5lbCBzdGF5cyB3aXRoaW4gdGhlIHdpbmRvdy5cbiAqIDQuIE1ha2UgdGhlIHBvcG92ZXIgbGlnaHRlciBvbiBkYXJrIG1vZGUgKHRvbyBoYXJkIHRvIGRpc3Rpbmd1aXNoIGZyb20gcGxhaW4gYmdzIG90aGVyd2lzZSksIGFuZCBzZXQgYSBDU1MgdmFyIGZvciB0aGUgYXJyb3cgdG8gdXNlXG4gKi9cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImo1eTZ5eC1pc09wZW5cIixcbiAgc3R5bGVzOiBcIm9wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphdXRvO2xhYmVsOmlzT3BlbjtcIlxufSA6IHtcbiAgbmFtZTogXCJqNXk2eXgtaXNPcGVuXCIsXG4gIHN0eWxlczogXCJvcGFjaXR5OjE7cG9pbnRlci1ldmVudHM6YXV0bztsYWJlbDppc09wZW47XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpUG9wb3ZlclBhbmVsU3R5bGVzID0gZnVuY3Rpb24gZXVpUG9wb3ZlclBhbmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgdmFyIHRyYW5zbGF0ZURpc3RhbmNlID0gZXVpVGhlbWUuc2l6ZS5zO1xuICB2YXIgYW5pbWF0aW9uU3BlZWQgPSBldWlUaGVtZS5hbmltYXRpb25bb3BlbkFuaW1hdGlvblRpbWluZ107XG4gIHZhciBvcGFjaXR5VHJhbnNpdGlvbiA9IFwib3BhY2l0eSBcIi5jb25jYXQoZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZSwgXCIgXCIpLmNvbmNhdChhbmltYXRpb25TcGVlZCk7XG4gIHZhciB0cmFuc2Zvcm1UcmFuc2l0aW9uID0gXCJ0cmFuc2Zvcm0gXCIuY29uY2F0KGV1aVRoZW1lLmFuaW1hdGlvbi5ib3VuY2UsIFwiIFwiKS5jb25jYXQobWF0aFdpdGhVbml0cyhhbmltYXRpb25TcGVlZCwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4geCArIDEwMDtcbiAgfSkpO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlQb3BvdmVyX19wYW5lbDogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCBcIlwiLmNvbmNhdChldWlUaGVtZS5iYXNlICogNywgXCJweFwiKSksIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsIFwiY2FsYygxMDB2dyAtIFwiLmNvbmNhdChldWlUaGVtZS5zaXplLnhsLCBcIilcIikpLCBcImJhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tZXVpUG9wb3ZlckJhY2tncm91bmRDb2xvcik7XCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246XCIsIG9wYWNpdHlUcmFuc2l0aW9uLCBcIixcIiwgdHJhbnNmb3JtVHJhbnNpdGlvbiwgXCI7fSY6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6MDt9O2xhYmVsOmV1aVBvcG92ZXJfX3BhbmVsO1wiKSxcbiAgICBpc09wZW46IF9yZWYsXG4gICAgLyogNCAqL1xuICAgIGxpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwiLS1ldWlQb3BvdmVyQmFja2dyb3VuZENvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSwgXCI7O2xhYmVsOmxpZ2h0O1wiKSxcbiAgICBkYXJrOiAvKiNfX1BVUkVfXyovY3NzKFwiLS1ldWlQb3BvdmVyQmFja2dyb3VuZENvbG9yOlwiLCB0aW50KGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLCAwLjAyNSksIFwiOztsYWJlbDpkYXJrO1wiKSxcbiAgICAvLyBSZWd1bGFyIHBvcG92ZXIgd2l0aCBhbiBhcnJvdywgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uL3RyYW5zaXRpb24sIGFuZCBhXG4gICAgLy8gZHJvcCBzaGFkb3cgdmlhIGBmaWx0ZXJgICh3aGljaCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdGhlIGFycm93KVxuICAgIGhhc1RyYW5zZm9ybToge1xuICAgICAgaGFzVHJhbnNmb3JtOiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCkgdHJhbnNsYXRlWCgwKSB0cmFuc2xhdGVaKDApO1wiLCBldWlTaGFkb3dNZWRpdW0oZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIHByb3BlcnR5OiAnZmlsdGVyJ1xuICAgICAgfSksIFwiIFwiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOlwiLCBvcGFjaXR5VHJhbnNpdGlvbiwgXCIsXCIsIHRyYW5zZm9ybVRyYW5zaXRpb24sIFwiO307bGFiZWw6aGFzVHJhbnNmb3JtO1wiKSxcbiAgICAgIC8vIFBvc2l0aW9uc1xuICAgICAgdG9wOiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVkoXCIsIHRyYW5zbGF0ZURpc3RhbmNlLCBcIikgdHJhbnNsYXRlWigwKTs7bGFiZWw6dG9wO1wiKSxcbiAgICAgIGJvdHRvbTogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVZKC1cIiwgdHJhbnNsYXRlRGlzdGFuY2UsIFwiKSB0cmFuc2xhdGVaKDApOztsYWJlbDpib3R0b207XCIpLFxuICAgICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVYKFwiLCB0cmFuc2xhdGVEaXN0YW5jZSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOmxlZnQ7XCIpLFxuICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWCgtXCIsIHRyYW5zbGF0ZURpc3RhbmNlLCBcIikgdHJhbnNsYXRlWigwKTs7bGFiZWw6cmlnaHQ7XCIpXG4gICAgfSxcbiAgICAvLyBObyBhcnJvdywgdHJhbnNmb3JtLCBvciBmaWx0ZXJzXG4gICAgaXNBdHRhY2hlZDoge1xuICAgICAgaXNBdHRhY2hlZDogLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOlwiLCBvcGFjaXR5VHJhbnNpdGlvbiwgXCI7fTtsYWJlbDppc0F0dGFjaGVkO1wiKSxcbiAgICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhldWlTaGFkb3dGbGF0KGV1aVRoZW1lQ29udGV4dCksIFwiOztsYWJlbDp0b3A7XCIpLFxuICAgICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdtJyksIFwiOztsYWJlbDpib3R0b207XCIpLFxuICAgICAgZ2V0IGxlZnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvdHRvbTtcbiAgICAgIH0sXG4gICAgICBnZXQgcmlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvdHRvbTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIEhhcyBhbiBhcnJvdywgYnV0IGNhbm5vdCBoYXZlIHRyYW5zZm9ybSBvciBmaWx0ZXIgQ1NTIC0gdGhleSBjcmVhdGUgYVxuICAgIC8vIHN0YWNraW5nIGNvbnRleHQgdGhhdCBtZXNzZXMgdXAgdGhlIGRyYWcvZHJvcCBmaXhlZCBwb3NpdGlvbmluZ1xuICAgIGhhc0RyYWdEcm9wOiB7XG4gICAgICBoYXNEcmFnRHJvcDogLyojX19QVVJFX18qL2NzcyhldWlTaGFkb3dNZWRpdW0oZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIHByb3BlcnR5OiAnYm94LXNoYWRvdydcbiAgICAgIH0pLCBcIiBcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpcIiwgb3BhY2l0eVRyYW5zaXRpb24sIFwiO307bGFiZWw6aGFzRHJhZ0Ryb3A7XCIpLFxuICAgICAgLy8gVGhlIG9mZnNldCB0cmFuc2Zvcm1zIG11c3QgYmUgcmVjcmVhdGVkIGluIG1hcmdpbnNcbiAgICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jay1zdGFydDpcIiwgdHJhbnNsYXRlRGlzdGFuY2UsIFwiOztsYWJlbDp0b3A7XCIpLFxuICAgICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrLXN0YXJ0Oi1cIiwgdHJhbnNsYXRlRGlzdGFuY2UsIFwiOy5ldWlQb3BvdmVyX19hcnJvd3tmaWx0ZXI6ZHJvcC1zaGFkb3coXFxuICAgICAgICAgICAgMCAtNnB4IDZweCBcIiwgZ2V0U2hhZG93Q29sb3IoZXVpVGhlbWUuY29sb3JzLnNoYWRvdywgMC4xMiwgY29sb3JNb2RlKSwgXCJcXG4gICAgICAgICAgKTt9O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWlubGluZS1zdGFydDpcIiwgdHJhbnNsYXRlRGlzdGFuY2UsIFwiOy5ldWlQb3BvdmVyX19hcnJvd3tmaWx0ZXI6ZHJvcC1zaGFkb3coXFxuICAgICAgICAgICAgNnB4IDAgNnB4IFwiLCBnZXRTaGFkb3dDb2xvcihldWlUaGVtZS5jb2xvcnMuc2hhZG93LCAwLjEyLCBjb2xvck1vZGUpLCBcIlxcbiAgICAgICAgICApO307bGFiZWw6bGVmdDtcIiksXG4gICAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1pbmxpbmUtc3RhcnQ6LVwiLCB0cmFuc2xhdGVEaXN0YW5jZSwgXCI7LmV1aVBvcG92ZXJfX2Fycm93e2ZpbHRlcjpkcm9wLXNoYWRvdyhcXG4gICAgICAgICAgICAtNnB4IDAgNnB4IFwiLCBnZXRTaGFkb3dDb2xvcihldWlUaGVtZS5jb2xvcnMuc2hhZG93LCAwLjEyLCBjb2xvck1vZGUpLCBcIlxcbiAgICAgICAgICApO307bGFiZWw6cmlnaHQ7XCIpXG4gICAgfVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInNpemVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpU3BhY2VyU3R5bGVzIH0gZnJvbSAnLi9zcGFjZXIuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWyd4cycsICdzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcbmV4cG9ydCB2YXIgRXVpU3BhY2VyID0gZnVuY3Rpb24gRXVpU3BhY2VyKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbCcgOiBfcmVmJHNpemUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpU3BhY2VyU3R5bGVzKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTcGFjZXInLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiZXVpU3BhY2VyLS1cIi5jb25jYXQoc2l6ZSksIHNpemUpLCBjbGFzc05hbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlTcGFjZXIsIHN0eWxlc1tzaXplXV07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCkpO1xufTtcbkV1aVNwYWNlci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBzaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FscyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE5MXhpMW4tZXVpU3BhY2VyXCIsXG4gIHN0eWxlczogXCJmbGV4LXNocmluazowO2xhYmVsOmV1aVNwYWNlcjtcIlxufSA6IHtcbiAgbmFtZTogXCIxOTF4aTFuLWV1aVNwYWNlclwiLFxuICBzdHlsZXM6IFwiZmxleC1zaHJpbms6MDtsYWJlbDpldWlTcGFjZXI7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpU3BhY2VyU3R5bGVzID0gZnVuY3Rpb24gZXVpU3BhY2VyU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVNwYWNlcjogX3JlZixcbiAgICAvLyBTaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUueHMsIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2Fscy5oZWlnaHQsIFwiOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICB4eGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wic2l6ZVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwidGV4dFRyYW5zZm9ybVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcywgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRpdGxlU3R5bGVzIH0gZnJvbSAnLi90aXRsZS5zdHlsZXMnO1xuZXhwb3J0IHZhciBUSVRMRV9TSVpFUyA9IFsneHh4cycsICd4eHMnLCAneHMnLCAncycsICdtJywgJ2wnXTtcbmV4cG9ydCB2YXIgVEVYVF9UUkFOU0ZPUk0gPSBbJ3VwcGVyY2FzZSddO1xuZXhwb3J0IHZhciBFdWlUaXRsZSA9IGZ1bmN0aW9uIEV1aVRpdGxlKF9yZWYpIHtcbiAgdmFyIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHRleHRUcmFuc2Zvcm0gPSBfcmVmLnRleHRUcmFuc2Zvcm0sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGl0bGVTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUaXRsZSwgdGV4dFRyYW5zZm9ybSA/IHN0eWxlc1t0ZXh0VHJhbnNmb3JtXSA6IHVuZGVmaW5lZCwgc3R5bGVzW3NpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUaXRsZScsIGNsYXNzTmFtZSwgY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpO1xuICByZXR1cm4gY2xvbmVFbGVtZW50V2l0aENzcyhjaGlsZHJlbiwgcHJvcHMpO1xufTtcbkV1aVRpdGxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICB0ZXh0VHJhbnNmb3JtOiBQcm9wVHlwZXMuYW55LFxuICBpZDogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImRlc2NyaXB0aW9uXCIsIFwiaXNEaXNhYmxlZFwiLCBcInRpdGxlXCIsIFwidGl0bGVFbGVtZW50XCIsIFwidGl0bGVTaXplXCIsIFwiaWNvblwiLCBcImltYWdlXCIsIFwiY2hpbGRyZW5cIiwgXCJmb290ZXJcIiwgXCJvbkNsaWNrXCIsIFwiaHJlZlwiLCBcInJlbFwiLCBcInRhcmdldFwiLCBcInRleHRBbGlnblwiLCBcImJldGFCYWRnZVByb3BzXCIsIFwibGF5b3V0XCIsIFwic2VsZWN0YWJsZVwiLCBcImRpc3BsYXlcIiwgXCJwYWRkaW5nU2l6ZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImFuY2hvclByb3BzXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB1c2VFdWlUaGVtZSwgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUdlbmVyYXRlZEh0bWxJZCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gJy4uL3RleHQnO1xuaW1wb3J0IHsgRXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZSc7XG5pbXBvcnQgeyBFdWlCZXRhQmFkZ2UgfSBmcm9tICcuLi9iYWRnZS9iZXRhX2JhZGdlJztcbmltcG9ydCB7IEV1aVBhbmVsIH0gZnJvbSAnLi4vcGFuZWwnO1xuaW1wb3J0IHsgRXVpU3BhY2VyIH0gZnJvbSAnLi4vc3BhY2VyJztcbmltcG9ydCB7IEV1aUNhcmRTZWxlY3QgfSBmcm9tICcuL2NhcmRfc2VsZWN0JztcbmltcG9ydCB7IGV1aUNhcmRCZXRhQmFkZ2VTdHlsZXMsIGV1aUNhcmRTdHlsZXMsIGV1aUNhcmRUZXh0U3R5bGVzIH0gZnJvbSAnLi9jYXJkLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBBTElHTk1FTlRTID0gWydsZWZ0JywgJ2NlbnRlcicsICdyaWdodCddO1xuXG4vKipcbiAqIENlcnRhaW4gcHJvcHMgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHRoZSBsYXlvdXQgaXMgdmVydGljYWxcbiAqL1xuXG5leHBvcnQgdmFyIEV1aUNhcmQgPSBmdW5jdGlvbiBFdWlDYXJkKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGRlc2NyaXB0aW9uID0gX3JlZi5kZXNjcmlwdGlvbixcbiAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgX3JlZiR0aXRsZUVsZW1lbnQgPSBfcmVmLnRpdGxlRWxlbWVudCxcbiAgICB0aXRsZUVsZW1lbnQgPSBfcmVmJHRpdGxlRWxlbWVudCA9PT0gdm9pZCAwID8gJ3AnIDogX3JlZiR0aXRsZUVsZW1lbnQsXG4gICAgX3JlZiR0aXRsZVNpemUgPSBfcmVmLnRpdGxlU2l6ZSxcbiAgICB0aXRsZVNpemUgPSBfcmVmJHRpdGxlU2l6ZSA9PT0gdm9pZCAwID8gJ3MnIDogX3JlZiR0aXRsZVNpemUsXG4gICAgaWNvbiA9IF9yZWYuaWNvbixcbiAgICBpbWFnZSA9IF9yZWYuaW1hZ2UsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGZvb3RlciA9IF9yZWYuZm9vdGVyLFxuICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICByZWwgPSBfcmVmLnJlbCxcbiAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICBfcmVmJHRleHRBbGlnbiA9IF9yZWYudGV4dEFsaWduLFxuICAgIHRleHRBbGlnbiA9IF9yZWYkdGV4dEFsaWduID09PSB2b2lkIDAgPyAnY2VudGVyJyA6IF9yZWYkdGV4dEFsaWduLFxuICAgIGJldGFCYWRnZVByb3BzID0gX3JlZi5iZXRhQmFkZ2VQcm9wcyxcbiAgICBfcmVmJGxheW91dCA9IF9yZWYubGF5b3V0LFxuICAgIGxheW91dCA9IF9yZWYkbGF5b3V0ID09PSB2b2lkIDAgPyAndmVydGljYWwnIDogX3JlZiRsYXlvdXQsXG4gICAgc2VsZWN0YWJsZSA9IF9yZWYuc2VsZWN0YWJsZSxcbiAgICBkaXNwbGF5ID0gX3JlZi5kaXNwbGF5LFxuICAgIF9yZWYkcGFkZGluZ1NpemUgPSBfcmVmLnBhZGRpbmdTaXplLFxuICAgIHBhZGRpbmdTaXplID0gX3JlZiRwYWRkaW5nU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRwYWRkaW5nU2l6ZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfaXNEaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBpc0NsaWNrYWJsZSA9ICFpc0Rpc2FibGVkICYmIChvbkNsaWNrIHx8IGhyZWYgfHwgc2VsZWN0YWJsZSAmJiAhc2VsZWN0YWJsZS5pc0Rpc2FibGVkKTtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlDYXJkU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwgcGFkZGluZ1NpemUpO1xuICB2YXIgY2FyZFN0eWxlcyA9IFtzdHlsZXMuY2FyZC5ldWlDYXJkLFxuICAvLyBUZXh0IGFsaWdubWVudCBzaG91bGQgYWx3YXlzIGJlIGxlZnQgd2hlbiBob3Jpem9udGFsXG4gIHN0eWxlcy5jYXJkLmFsaWduZWRbbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcgPyAnbGVmdCcgOiB0ZXh0QWxpZ25dLCBpc0Rpc2FibGVkICYmIHN0eWxlcy5jYXJkLmRpc2FibGVkXTtcbiAgdmFyIGNvbnRlbnRTdHlsZXMgPSBbc3R5bGVzLmNvbnRlbnQuZXVpQ2FyZF9fY29udGVudCwgc3R5bGVzLmNvbnRlbnQubGF5b3V0W2xheW91dF1dO1xuICB2YXIgbWFpblN0eWxlcyA9IFtzdHlsZXMubWFpbi5ldWlDYXJkX19tYWluLCBzdHlsZXMubWFpbi5sYXlvdXRbbGF5b3V0XV07XG4gIHZhciB0ZXh0U3R5bGVzID0gZXVpQ2FyZFRleHRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIHRleHRDU1MgPSBbdGV4dFN0eWxlcy5ldWlDYXJkX190ZXh0LFxuICAvLyBUZXh0IGFsaWdubWVudCBzaG91bGQgYWx3YXlzIGJlIGxlZnQgd2hlbiBob3Jpem9udGFsXG4gIHRleHRTdHlsZXMuYWxpZ25lZFtsYXlvdXQgPT09ICdob3Jpem9udGFsJyA/ICdsZWZ0JyA6IHRleHRBbGlnbl0sIGlzQ2xpY2thYmxlICYmIHRleHRTdHlsZXMuaW50ZXJhY3RpdmUsIGlzRGlzYWJsZWQgJiYgdGV4dFN0eWxlcy5kaXNhYmxlZF07XG5cbiAgLyoqXG4gICAqIEZvciBhMTF5LCB3ZSBzaW11bGF0ZSB0aGUgc2FtZSBjbGljayB0aGF0J3MgcHJvdmlkZWQgb24gdGhlIHRpdGxlIHdoZW4gY2xpY2tpbmcgdGhlIHdob2xlIGNhcmRcbiAgICogd2l0aG91dCBoYXZpbmcgdG8gbWFrZSB0aGUgd2hvbGUgY2FyZCBhIGJ1dHRvbiBvciBhbmNob3IgdGFnLlxuICAgKiAqQ2FyZCBBY2Nlc3NpYmlsaXR5OiBUaGUgcmVkdW5kYW50IGNsaWNrIGV2ZW50IGh0dHBzOi8vaW5jbHVzaXZlLWNvbXBvbmVudHMuZGVzaWduL2NhcmRzLypcbiAgICovXG4gIHZhciBsaW5rID0gbnVsbDtcbiAgdmFyIG91dGVyT25DbGljayA9IGZ1bmN0aW9uIG91dGVyT25DbGljayhlKSB7XG4gICAgaWYgKGxpbmsgJiYgbGluayAhPT0gZS50YXJnZXQgJiYgIWxpbmsuY29udGFpbnMoZS50YXJnZXQpKSB7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuICB9O1xuICBpZiAobGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICBpZiAoaW1hZ2UgfHwgZm9vdGVyIHx8IHRleHRBbGlnbiAhPT0gJ2NlbnRlcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXVpQ2FyZDogYGxheW91dD1cImhvcml6b250YWxcImAgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgaW1hZ2VgLCBgZm9vdGVyYCwgb3IgYHRleHRBbGlnbmAuJyk7XG4gICAgfVxuICB9XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ2FyZCcsIGNsYXNzTmFtZSk7XG4gIHZhciBhcmlhSWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoKTtcbiAgdmFyIGFyaWFEZXNjID0gZGVzY3JpcHRpb24gPyBcIlwiLmNvbmNhdChhcmlhSWQsIFwiRGVzY3JpcHRpb25cIikgOiAnJztcblxuICAvKipcbiAgICogVG9wIGFyZWEgY29udGFpbmluZyBpbWFnZSwgaWNvbiBvciBib3RoXG4gICAqL1xuXG4gIHZhciBpbWFnZU5vZGU7XG4gIGlmIChpbWFnZSAmJiBsYXlvdXQgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICBpZiAoIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChpbWFnZSkgfHwgdHlwZW9mIGltYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIGltYWdlU3R5bGVzID0gW3N0eWxlcy5pbWFnZS5ldWlDYXJkX19pbWFnZSwgZGlzcGxheSA9PT0gJ3RyYW5zcGFyZW50JyAmJiBzdHlsZXMuaW1hZ2UudHJhbnNwYXJlbnRdO1xuICAgICAgaW1hZ2VOb2RlID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19pbWFnZVwiLFxuICAgICAgICBjc3M6IGltYWdlU3R5bGVzXG4gICAgICB9LCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoaW1hZ2UpID8gaW1hZ2UgOiBfX19FbW90aW9uSlNYKFwiaW1nXCIsIHtcbiAgICAgICAgc3JjOiBpbWFnZSxcbiAgICAgICAgYWx0OiBcIlwiXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGltYWdlTm9kZSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHZhciBpY29uTm9kZTtcbiAgaWYgKGljb24pIHtcbiAgICB2YXIgaWNvblN0eWxlcyA9IFtzdHlsZXMuaWNvbi5ldWlDYXJkX19pY29uLCBzdHlsZXMuaWNvbi5sYXlvdXRbbGF5b3V0XSwgaW1hZ2VOb2RlICYmIHN0eWxlcy5pY29uLndpdGhJbWFnZV07XG4gICAgaWNvbk5vZGUgPSBjbG9uZUVsZW1lbnRXaXRoQ3NzKGljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhpY29uLnByb3BzLmNsYXNzTmFtZSwgJ2V1aUNhcmRfX2ljb24nKSxcbiAgICAgIGNzczogaWNvblN0eWxlc1xuICAgIH0pO1xuICB9XG4gIHZhciBvcHRpb25hbENhcmRUb3A7XG4gIGlmIChpbWFnZU5vZGUgfHwgaWNvbk5vZGUpIHtcbiAgICB2YXIgdG9wU3R5bGVzID0gW3N0eWxlcy50b3AuZXVpQ2FyZF9fdG9wLCBzdHlsZXMudG9wLmxheW91dFtsYXlvdXRdLCBpc0Rpc2FibGVkICYmIHN0eWxlcy50b3AuZGlzYWJsZWRdO1xuICAgIG9wdGlvbmFsQ2FyZFRvcCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX3RvcFwiLFxuICAgICAgY3NzOiB0b3BTdHlsZXNcbiAgICB9LCBpbWFnZU5vZGUsIGljb25Ob2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBFdWlCZXRhQmFkZ2VcbiAgICovXG5cbiAgdmFyIG9wdGlvbmFsQmV0YUJhZGdlO1xuICB2YXIgb3B0aW9uYWxCZXRhQmFkZ2VJRCA9ICcnO1xuICB2YXIgb3B0aW9uYWxCZXRhQ1NTO1xuICBpZiAoYmV0YUJhZGdlUHJvcHMgIT09IG51bGwgJiYgYmV0YUJhZGdlUHJvcHMgIT09IHZvaWQgMCAmJiBiZXRhQmFkZ2VQcm9wcy5sYWJlbCkge1xuICAgIHZhciBiZXRhU3R5bGVzID0gZXVpQ2FyZEJldGFCYWRnZVN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHBhZGRpbmdTaXplKTtcbiAgICBvcHRpb25hbEJldGFDU1MgPSBiZXRhU3R5bGVzLmhhc0JldGFCYWRnZTtcbiAgICB2YXIgYW5jaG9yUHJvcHMgPSBiZXRhQmFkZ2VQcm9wcy5hbmNob3JQcm9wcyxcbiAgICAgIGNsZWFuZWRCZXRhQmFkZ2VQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhiZXRhQmFkZ2VQcm9wcywgX2V4Y2x1ZGVkMik7XG4gICAgdmFyIGFuY2hvckNTUyA9IFtiZXRhU3R5bGVzLmV1aUNhcmRfX2JldGFCYWRnZUFuY2hvciwgYW5jaG9yUHJvcHMgPT09IG51bGwgfHwgYW5jaG9yUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFuY2hvclByb3BzLmNzc107XG4gICAgdmFyIGJhZGdlQ1NTID0gW2JldGFTdHlsZXMuZXVpQ2FyZF9fYmV0YUJhZGdlLCBiZXRhQmFkZ2VQcm9wcyA9PT0gbnVsbCB8fCBiZXRhQmFkZ2VQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYmV0YUJhZGdlUHJvcHMuY3NzXTtcbiAgICBvcHRpb25hbEJldGFCYWRnZUlEID0gXCJcIi5jb25jYXQoYXJpYUlkLCBcIkJldGFCYWRnZVwiKTtcbiAgICBvcHRpb25hbEJldGFCYWRnZSA9IF9fX0Vtb3Rpb25KU1goRXVpQmV0YUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICBjb2xvcjogaXNEaXNhYmxlZCAmJiAhYmV0YUJhZGdlUHJvcHMub25DbGljayAmJiAhYmV0YUJhZGdlUHJvcHMuaHJlZiA/ICdzdWJkdWVkJyA6ICdob2xsb3cnXG4gICAgfSwgY2xlYW5lZEJldGFCYWRnZVByb3BzLCB7XG4gICAgICBjc3M6IGJhZGdlQ1NTLFxuICAgICAgYW5jaG9yUHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYW5jaG9yUHJvcHMpLCB7fSwge1xuICAgICAgICBjc3M6IGFuY2hvckNTU1xuICAgICAgfSksXG4gICAgICBpZDogb3B0aW9uYWxCZXRhQmFkZ2VJRFxuICAgIH0pKTtcblxuICAgIC8vIEluY3JlYXNlIHBhZGRpbmcgc2l6ZSB3aGVuIHRoZXJlIGlzIGEgYmV0YSBiYWRnZSB1bmxlc3MgaXQncyBhbHJlYWR5IGRldGVybWluZWRcbiAgICAvLyBwYWRkaW5nU2l6ZSA9IHBhZGRpbmdTaXplIHx8ICdsJztcbiAgfVxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBzZWxlY3RhYmxlIGJ1dHRvblxuICAgKi9cblxuICBpZiAoc2VsZWN0YWJsZSAmJiBpc0Rpc2FibGVkICYmIHNlbGVjdGFibGUuaXNEaXNhYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc2VsZWN0YWJsZS5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuICB2YXIgb3B0aW9uYWxTZWxlY3RCdXR0b247XG4gIGlmIChzZWxlY3RhYmxlKSB7XG4gICAgb3B0aW9uYWxTZWxlY3RCdXR0b24gPSBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBwYWRkaW5nU2l6ZSAhPT0gJ25vbmUnICYmIF9fX0Vtb3Rpb25KU1goRXVpU3BhY2VyLCB7XG4gICAgICBzaXplOiBwYWRkaW5nU2l6ZSB8fCAnbSdcbiAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlDYXJkU2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogXCJcIi5jb25jYXQoYXJpYUlkLCBcIlRpdGxlIFwiKS5jb25jYXQoYXJpYURlc2MpXG4gICAgfSwgc2VsZWN0YWJsZSwge1xuICAgICAgYnV0dG9uUmVmOiBmdW5jdGlvbiBidXR0b25SZWYobm9kZSkge1xuICAgICAgICBsaW5rID0gbm9kZTtcbiAgICAgIH1cbiAgICB9KSkpO1xuICB9XG4gIHZhciBUaXRsZUVsZW1lbnQgPSB0aXRsZUVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFdyYXBzIHRoZSB0aXRsZSB3aXRoIHRoZSBsaW5rICg8YT4pIG9yIGJ1dHRvbi5cbiAgICogVGhpcyBtYWtlcyB0aGUgdGl0bGUgZWxlbWVudCBhMTF5IGZyaWVuZGx5IGFuZCBnZXRzIGRlc2NyaWJlZCBieSBpdHMgY29udGVudCBpZiBpdHMgaW50ZXJhY3RhYmxlLlxuICAgKi9cblxuICB2YXIgdGhlVGl0bGU7XG4gIGlmICghaXNEaXNhYmxlZCAmJiBocmVmKSB7XG4gICAgdGhlVGl0bGUgPSBfX19FbW90aW9uSlNYKFwiYVwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fdGl0bGVBbmNob3JcIixcbiAgICAgIGNzczogdGV4dENTUyxcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2MsXG4gICAgICByZWw6IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICByZWw6IHJlbFxuICAgICAgfSksXG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0sIHRpdGxlKTtcbiAgfSBlbHNlIGlmIChpc0Rpc2FibGVkIHx8IG9uQ2xpY2spIHtcbiAgICB0aGVUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX3RpdGxlQnV0dG9uXCIsXG4gICAgICBjc3M6IHRleHRDU1MsXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogXCJcIi5jb25jYXQob3B0aW9uYWxCZXRhQmFkZ2VJRCwgXCIgXCIpLmNvbmNhdChhcmlhRGVzYyksXG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0sIHRpdGxlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGVUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNzczogdGV4dENTU1xuICAgIH0sIHRpdGxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGlsZHJlbiBhbmQvb3IgRGVzY3JpcHRpb24gY29udGVudFxuICAgKi9cbiAgdmFyIG9wdGlvbmFsQ2hpbGRyZW47XG4gIGlmIChjaGlsZHJlbikge1xuICAgIHZhciBjaGlsZHJlblN0eWxlcyA9IFtzdHlsZXMuZXVpQ2FyZF9fY2hpbGRyZW5dO1xuICAgIG9wdGlvbmFsQ2hpbGRyZW4gPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIGNzczogY2hpbGRyZW5TdHlsZXNcbiAgICB9LCBjaGlsZHJlbik7XG4gIH1cbiAgdmFyIG9wdGlvbmFsRGVzY3JpcHRpb247XG4gIGlmIChkZXNjcmlwdGlvbikge1xuICAgIHZhciBkZXNjcmlwdGlvblN0eWxlcyA9IFtzdHlsZXMuZXVpQ2FyZF9fZGVzY3JpcHRpb25dO1xuICAgIG9wdGlvbmFsRGVzY3JpcHRpb24gPSBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICAgIGlkOiBhcmlhRGVzYyxcbiAgICAgIHNpemU6IFwic1wiLFxuICAgICAgY3NzOiBkZXNjcmlwdGlvblN0eWxlc1xuICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGRlc2NyaXB0aW9uKSk7XG4gIH1cblxuICAvKipcbiAgICogRm9vdGVyIGNvbnRlbnRcbiAgICovXG4gIHZhciBvcHRpb25hbEZvb3RlcjtcbiAgaWYgKGxheW91dCA9PT0gJ3ZlcnRpY2FsJyAmJiBmb290ZXIpIHtcbiAgICB2YXIgZm9vdGVyU3R5bGVzID0gW3N0eWxlcy5ldWlDYXJkX19mb290ZXJdO1xuICAgIG9wdGlvbmFsRm9vdGVyID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICBjc3M6IGZvb3RlclN0eWxlc1xuICAgIH0sIGZvb3Rlcik7XG4gIH1cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUGFuZWwsIF9leHRlbmRzKHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IFtdLmNvbmNhdChjYXJkU3R5bGVzLCBbb3B0aW9uYWxCZXRhQ1NTXSksXG4gICAgb25DbGljazogaXNDbGlja2FibGUgPyBvdXRlck9uQ2xpY2sgOiB1bmRlZmluZWQsXG4gICAgY29sb3I6IGlzRGlzYWJsZWQgPyAnc3ViZHVlZCcgOiBkaXNwbGF5LFxuICAgIGhhc1NoYWRvdzogaXNEaXNhYmxlZCB8fCBkaXNwbGF5ID8gZmFsc2UgOiB0cnVlLFxuICAgIGhhc0JvcmRlcjogZGlzcGxheSA/IGZhbHNlIDogdW5kZWZpbmVkLFxuICAgIHBhZGRpbmdTaXplOiBwYWRkaW5nU2l6ZVxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX21haW5cIixcbiAgICBjc3M6IG1haW5TdHlsZXNcbiAgfSwgb3B0aW9uYWxDYXJkVG9wLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fY29udGVudFwiLFxuICAgIGNzczogY29udGVudFN0eWxlc1xuICB9LCBfX19FbW90aW9uSlNYKEV1aVRpdGxlLCB7XG4gICAgaWQ6IFwiXCIuY29uY2F0KGFyaWFJZCwgXCJUaXRsZVwiKSxcbiAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fdGl0bGVcIixcbiAgICBzaXplOiB0aXRsZVNpemVcbiAgfSwgX19fRW1vdGlvbkpTWChUaXRsZUVsZW1lbnQsIG51bGwsIHRoZVRpdGxlKSksIG9wdGlvbmFsRGVzY3JpcHRpb24sIG9wdGlvbmFsQ2hpbGRyZW4pLCBvcHRpb25hbEJldGFCYWRnZSwgb3B0aW9uYWxGb290ZXIpLCBvcHRpb25hbFNlbGVjdEJ1dHRvbik7XG59O1xuRXVpQ2FyZC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAgICogQ2hhbmdlIHRvIFwiaG9yaXpvbnRhbFwiIGlmIHlvdSBuZWVkIHRoZSBpY29uIHRvIGJlIGxlZnQgb2YgdGhlIGNvbnRlbnQuXG4gICAgICAgKiBIb3Jpem9udGFsIGxheW91dHMgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgaW1hZ2VgLCBgZm9vdGVyYCwgb3IgYHRleHRBbGlnbmAuXG4gICAgICAgKi9cbiAgbGF5b3V0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1widmVydGljYWxcIl0pLCBQcm9wVHlwZXMub25lT2YoW1wiaG9yaXpvbnRhbFwiXSkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIENoYW5nZXMgYWxpZ25tZW50IG9mIHRoZSB0aXRsZSBhbmQgZGVzY3JpcHRpb25cbiAgICAgICAqL1xuICB0ZXh0QWxpZ246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogQWNjZXB0cyBhbnkgY29tYmluYXRpb24gb2YgZWxlbWVudHNcbiAgICAgICAqL1xuICBmb290ZXI6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgICAqIEFjY2VwdHMgYSB1cmwgaW4gc3RyaW5nIGZvcm0gb3IgUmVhY3RFbGVtZW50IGZvciBhIGN1c3RvbSBpbWFnZSBjb21wb25lbnRcbiAgICAgICAqL1xuICBpbWFnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogQ2FyZHMgYXJlIHJlcXVpcmVkIHRvIGhhdmUgYXQgbGVhc3QgYSB0aXRsZSBhbmQgYSBkZXNjcmlwdGlvbiBhbmQvb3IgY2hpbGRyZW5cbiAgICAgICAqL1xuICB0aXRsZTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgICAqIERldGVybWluZXMgdGhlIHRpdGxlJ3MgaGVhZGluZyBlbGVtZW50XG4gICAgICAgKi9cbiAgdGl0bGVFbGVtZW50OiBQcm9wVHlwZXMub25lT2YoW1wiaDJcIiwgXCJoM1wiLCBcImg0XCIsIFwiaDVcIiwgXCJoNlwiLCBcInNwYW5cIiwgXCJwXCJdKSxcbiAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmVzIHRoZSB0aXRsZSdzIHNpemUsIG1hdGNoaW5nIHRoYXQgb2YgRXVpVGl0bGUuXG4gICAgICAgKiBUaG91Z2gsIGNhcmQgdGl0bGVzIGNhbid0IGJlIHRvbyBsYXJnZSBvciBzbWFsbCByZWxhdGl2ZSB0byB0aGUgZGVzY3JpcHRpb24gdGV4dC5cbiAgICAgICAqL1xuICB0aXRsZVNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwieHNcIl0pLFxuICAvKipcbiAgICAgICAqIFBsYWNlZCB3aXRoaW4gYSBzbWFsbCBFdWlUZXh0IGA8cD5gIHRhZ1xuICAgICAgICovXG4gIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW4gYDxFdWlJY29uPmAgbm9kZSBvciBgbnVsbGBcbiAgICAgICAqL1xuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW251bGxdKV0pLFxuICAvKipcbiAgICAgICAqIEN1c3RvbSBjaGlsZHJlblxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICAgKiBVc2Ugb25seSBpZiB5b3Ugd2FudCB0byBmb3JlZ28gYSBidXR0b24gaW4gdGhlIGZvb3RlciBhbmQgbWFrZSB0aGUgd2hvbGUgY2FyZCBjbGlja2FibGVcbiAgICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICAgKiBBZGRzIGEgYmFkZ2UgdG8gdG9wIG9mIHRoZSBjYXJkIHRvIGxhYmVsIGl0IGFzIFwiQmV0YVwiIG9yIG90aGVyIG5vbi1HQSBzdGF0ZS5cbiAgICAgICAqIEFjY2VwdHMgYWxsIHRoZSBwcm9wcyBvZiBbRXVpQmV0YUJhZGdlXSgjL2Rpc3BsYXkvYmFkZ2UjYmV0YS1iYWRnZS10eXBlKSwgd2hlcmUgYGxhYmVsYCBpcyByZXF1aXJlZC5cbiAgICAgICAqL1xuICBiZXRhQmFkZ2VQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICAgKi9cbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgb25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gICAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKlxuICAgICAgICogU3VwcGx5IGFuIGljb24gdHlwZSBpZiB0aGUgYmFkZ2Ugc2hvdWxkIGp1c3QgYmUgYW4gaWNvblxuICAgICAgICovXG4gICAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gICAgLyoqXG4gICAgICAgKiBPbmUgd29yZCBsYWJlbCBsaWtlIFwiQmV0YVwiIG9yIFwiTGFiXCJcbiAgICAgICAqL1xuICAgIC8qKlxuICAgICAgICogT25lIHdvcmQgbGFiZWwgbGlrZSBcIkJldGFcIiBvciBcIkxhYlwiXG4gICAgICAgKi9cbiAgICBsYWJlbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgLyoqXG4gICAgICAgKiBDb250ZW50IGZvciB0aGUgdG9vbHRpcFxuICAgICAgICovXG4gICAgdG9vbHRpcENvbnRlbnQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZF0pXSksXG4gICAgLyoqXG4gICAgICAgKiBDdXN0b20gcG9zaXRpb24gb2YgdGhlIHRvb2x0aXBcbiAgICAgICAqL1xuICAgIHRvb2x0aXBQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSksXG4gICAgLyoqXG4gICAgICAgKiBQYXNzZXMgb250byB0aGUgc3BhbiB3cmFwcGluZyB0aGUgYmFkZ2VcbiAgICAgICAqL1xuICAgIGFuY2hvclByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgICB9KSxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIHRpdGxlIHdpbGwgYmUgc3VwcGxpZWQgYXMgdG9vbHRpcCB0aXRsZSBvciB0aXRsZSBhdHRyaWJ1dGVcbiAgICAgICAqIG90aGVyd2lzZSB0aGUgbGFiZWwgd2lsbCBiZSB1c2VkXG4gICAgICAgKi9cbiAgICB0aXRsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nXSldKSxcbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgYWNjZW50LCBzdWJkdWVkIGFuZCBob2xsb3cuXG4gICAgICAgKi9cbiAgICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogU2V0cyB0aGUgYHZlcnRpY2FsLWFsaWduYCBDU1MgcHJvcGVydHlcbiAgICAgICAqL1xuICAgIGFsaWdubWVudDogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgLyoqXG4gICAgICAgKiBNYXRjaGVzIHRvIHRoZSBjb2xvciBwcm9wZXJ0eSBvZiBFdWlQYW5lbC4gSWYgZGVmaW5lZCwgcmVtb3ZlcyBhbnkgYm9yZGVyICYgc2hhZG93LlxuICAgICAgICogTGVhdmUgYXMgYHVuZGVmaW5lZGAgdG8gZGlzcGxheSBhcyBhIGRlZmF1bHQgcGFuZWwuXG4gICAgICAgKiBTZWxlY3RhYmxlIGNhcmRzIHdpbGwgYWx3YXlzIGRpc3BsYXkgYXMgYSBkZWZhdWx0IHBhbmVsLlxuICAgICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogUGFkZGluZyBhcHBsaWVkIGFyb3VuZCB0aGUgY29udGVudCBvZiB0aGUgY2FyZFxuICAgICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIEFkZHMgYSBidXR0b24gdG8gdGhlIGJvdHRvbSBvZiB0aGUgY2FyZCB0byBhbGxvdyBmb3IgaW4tcGxhY2Ugc2VsZWN0aW9uXG4gICAgICAgKi9cbiAgc2VsZWN0YWJsZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgICAqL1xuICAgIC8qKlxuICAgICAgICogTWFrZSBidXR0b24gYSBzb2xpZCBjb2xvciBmb3IgcHJvbWluZW5jZVxuICAgICAgICovXG4gICAgZmlsbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBBbnkgb2YgdGhlIG5hbWVkIGNvbG9yIHBhbGV0dGUgb3B0aW9ucy5cbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogVXNlIHNpemUgYHNgIGluIGNvbmZpbmVkIHNwYWNlc1xuICAgICAgICovXG4gICAgLyoqXG4gICAgICAgKiBVc2Ugc2l6ZSBgc2AgaW4gY29uZmluZWQgc3BhY2VzXG4gICAgICAgKi9cbiAgICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgICAqL1xuICAgIC8qKlxuICAgICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgICAqL1xuICAgIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBlbGVtZW50OiBQcm9wVHlwZXMub25lT2YoW1wiYVwiLCBcImJ1dHRvblwiLCBcInNwYW5cIl0pLFxuICAgIC8qKlxuICAgICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICAgKi9cbiAgICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIEV4dGVuZHMgdGhlIGJ1dHRvbiB0byAxMDAlIHdpZHRoXG4gICAgICAgKi9cbiAgICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWluaW11bSB3aWR0aFxuICAgICAgICovXG4gICAgbWluV2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gICAgLyoqXG4gICAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICAgKi9cbiAgICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAgICovXG4gICAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgICB9KSxcbiAgICBzdHlsZTogUHJvcFR5cGVzLmFueSxcbiAgICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICAgKi9cbiAgICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgICAvKipcbiAgICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICAgKi9cbiAgICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW3VuZGVmaW5lZF0pXSksXG4gICAgLyoqXG4gICAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQvY2hpbGRyZW4gb25seSAobm90IGljb24pXG4gICAgICAgKlxuICAgICAgICogVGhpcyBzcGFuIHdyYXBwZXIgY2FuIGJlIHJlbW92ZWQgYnkgcGFzc2luZyBgdGV4dFByb3BzPXtmYWxzZX1gLlxuICAgICAgICovXG4gICAgdGV4dFByb3BzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gICAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gICAgaWNvblNpemU6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIC8qKlxuICAgICAgICogVXNlIGEgYm9yZGVyIHN0eWxlIG9mIGNhcmQgaW5zdGVhZCBvZiBzaGFkb3dcbiAgICAgICAqL1xuICBoYXNCb3JkZXI6IFByb3BUeXBlcy5ib29sXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiaXNTZWxlY3RlZFwiLCBcImlzRGlzYWJsZWRcIiwgXCJkaXNhYmxlZFwiLCBcImNvbG9yXCIsIFwiY2hpbGRyZW5cIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlCdXR0b24gfSBmcm9tICcuLi8uLi9idXR0b24vYnV0dG9uJztcbmltcG9ydCB7IGV1aUNhcmRTZWxlY3RTdHlsZXMgfSBmcm9tICcuL2NhcmRfc2VsZWN0LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDYXJkU2VsZWN0ID0gZnVuY3Rpb24gRXVpQ2FyZFNlbGVjdChfcmVmKSB7XG4gIHZhciBfcmVmJGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgaXNTZWxlY3RlZCA9IF9yZWYkaXNTZWxlY3RlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzU2VsZWN0ZWQsXG4gICAgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzdHlsZXMgPSBldWlDYXJkU2VsZWN0U3R5bGVzKCk7XG4gIHZhciBiYXNlQ1NTID0gW3N0eWxlcy5ldWlDYXJkU2VsZWN0XTtcbiAgdmFyIGNoaWxkID0gZXVpQ2FyZFNlbGVjdGFibGVUZXh0KGlzU2VsZWN0ZWQsIGlzRGlzYWJsZWQgfHwgZGlzYWJsZWQsIGNoaWxkcmVuKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBiYXNlQ1NTLFxuICAgIGNvbG9yOiBldWlDYXJkU2VsZWN0YWJsZUNvbG9yKGNvbG9yLCBpc1NlbGVjdGVkKSxcbiAgICBzaXplOiBcIm1cIixcbiAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkIHx8IGRpc2FibGVkLFxuICAgIGljb25UeXBlOiBpc1NlbGVjdGVkID8gJ2NoZWNrJyA6IHVuZGVmaW5lZCxcbiAgICByb2xlOiBcInN3aXRjaFwiLFxuICAgIFwiYXJpYS1jaGVja2VkXCI6IGlzU2VsZWN0ZWQsXG4gICAgZnVsbFdpZHRoOiB0cnVlXG4gIH0sIHJlc3QpLCBjaGlsZCk7XG59O1xuRXVpQ2FyZFNlbGVjdC5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cbiAgLyoqXG4gICAgICogTWFrZSBidXR0b24gYSBzb2xpZCBjb2xvciBmb3IgcHJvbWluZW5jZVxuICAgICAqL1xuICBmaWxsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQW55IG9mIHRoZSBuYW1lZCBjb2xvciBwYWxldHRlIG9wdGlvbnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBVc2Ugc2l6ZSBgc2AgaW4gY29uZmluZWQgc3BhY2VzXG4gICAgICovXG4gIC8qKlxuICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG4gIGVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJhXCIsIFwiYnV0dG9uXCIsIFwic3BhblwiXSksXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEV4dGVuZHMgdGhlIGJ1dHRvbiB0byAxMDAlIHdpZHRoXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1pbmltdW0gd2lkdGhcbiAgICAgKi9cbiAgbWluV2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbdW5kZWZpbmVkXSldKSxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgYDxzcGFuPmAgd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0L2NoaWxkcmVuIG9ubHkgKG5vdCBpY29uKVxuICAgICAqXG4gICAgICogVGhpcyBzcGFuIHdyYXBwZXIgY2FuIGJlIHJlbW92ZWQgYnkgcGFzc2luZyBgdGV4dFByb3BzPXtmYWxzZX1gLlxuICAgICAqL1xuICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMuYW55XG59O1xuZnVuY3Rpb24gZXVpQ2FyZFNlbGVjdGFibGVUZXh0KGlzU2VsZWN0ZWQsIGlzRGlzYWJsZWQsIGNoaWxkcmVuKSB7XG4gIGlmIChjaGlsZHJlbikge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuICB2YXIgdGV4dDtcbiAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDYXJkU2VsZWN0LnNlbGVjdGVkXCIsXG4gICAgICBkZWZhdWx0OiBcIlNlbGVjdGVkXCJcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgdGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpQ2FyZFNlbGVjdC51bmF2YWlsYWJsZVwiLFxuICAgICAgZGVmYXVsdDogXCJVbmF2YWlsYWJsZVwiXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpQ2FyZFNlbGVjdC5zZWxlY3RcIixcbiAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0XCJcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdGV4dDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBldWlDYXJkU2VsZWN0YWJsZUNvbG9yKGNvbG9yLCBpc1NlbGVjdGVkKSB7XG4gIHZhciBjYWxjdWxhdGVkQ29sb3I7XG4gIGlmIChjb2xvcikge1xuICAgIGNhbGN1bGF0ZWRDb2xvciA9IGNvbG9yO1xuICB9IGVsc2UgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICBjYWxjdWxhdGVkQ29sb3IgPSAnc3VjY2Vzcyc7XG4gIH0gZWxzZSB7XG4gICAgY2FsY3VsYXRlZENvbG9yID0gJ3RleHQnO1xuICB9XG4gIHJldHVybiBjYWxjdWxhdGVkQ29sb3I7XG59IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImFvZ2w0LWV1aUNhcmRTZWxlY3RcIixcbiAgc3R5bGVzOiBcInRyYW5zZm9ybTpub25lIWltcG9ydGFudDthbGlnbi1zZWxmOmZsZXgtZW5kO2xhYmVsOmV1aUNhcmRTZWxlY3Q7XCJcbn0gOiB7XG4gIG5hbWU6IFwiYW9nbDQtZXVpQ2FyZFNlbGVjdFwiLFxuICBzdHlsZXM6IFwidHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50O2FsaWduLXNlbGY6ZmxleC1lbmQ7bGFiZWw6ZXVpQ2FyZFNlbGVjdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlDYXJkU2VsZWN0U3R5bGVzID0gZnVuY3Rpb24gZXVpQ2FyZFNlbGVjdFN0eWxlcygpIHtcbiAgcmV0dXJuIHtcbiAgICBldWlDYXJkU2VsZWN0OiBfcmVmXG4gIH07XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlQYWRkaW5nU2l6ZSwgZXVpU3VwcG9ydHNIYXMsIGxvZ2ljYWxDU1MsIGxvZ2ljYWxzLCBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpQnV0dG9uQ29sb3IgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG52YXIgcGFkZGluZ0tleSA9ICdtJztcbnZhciBoYWxmUGFkZGluZ0tleSA9ICdzJztcblxuLyoqXG4gKiAxLiBGb290ZXIgaXMgYWx3YXlzIGF0IHRoZSBib3R0b20uXG4gKiAzLiBIb3Jpem9udGFsIGxheW91dHMgc2hvdWxkIGFsd2F5cyB0b3AgbGVmdCBhbGlnbiBubyBtYXR0ZXIgdGhlIHRleHRBbGlnbiBwcm9wXG4gKiA0LiBFbnN1cmVzIHRoZSBjb250ZW50cyBhbHdheXMgc3RyZXRjaCBubyBtYXR0ZXIgdGhlIGZsZXggbGF5b3V0XG4gKi9cbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJyZXltdW4tZGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImZpbHRlcjpncmF5c2NhbGUoMTAwJSk7bGFiZWw6ZGlzYWJsZWQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwicmV5bXVuLWRpc2FibGVkXCIsXG4gIHN0eWxlczogXCJmaWx0ZXI6Z3JheXNjYWxlKDEwMCUpO2xhYmVsOmRpc2FibGVkO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiY3Izd3o3LWV1aUNhcmRfX2NvbnRlbnRcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOmV1aUNhcmRfX2NvbnRlbnQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiY3Izd3o3LWV1aUNhcmRfX2NvbnRlbnRcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOmV1aUNhcmRfX2NvbnRlbnQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxa3cweXhuLWhvcml6b250YWxcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2xhYmVsOmhvcml6b250YWw7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWt3MHl4bi1ob3Jpem9udGFsXCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtsYWJlbDpob3Jpem9udGFsO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwib21uazJsLXZlcnRpY2FsXCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpjb2x1bW47bGFiZWw6dmVydGljYWw7XCJcbn0gOiB7XG4gIG5hbWU6IFwib21uazJsLXZlcnRpY2FsXCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpjb2x1bW47bGFiZWw6dmVydGljYWw7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxbHl2ZHBmLWV1aUNhcmRfX21haW5cIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDtpbmxpbmUtc2l6ZToxMDAlO2ZsZXgtZ3JvdzoxO2xhYmVsOmV1aUNhcmRfX21haW47XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWx5dmRwZi1ldWlDYXJkX19tYWluXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7aW5saW5lLXNpemU6MTAwJTtmbGV4LWdyb3c6MTtsYWJlbDpldWlDYXJkX19tYWluO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUNhcmRTdHlsZXMgPSBmdW5jdGlvbiBldWlDYXJkU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwgcGFkZGluZ1NpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgcGFkZGluZ0Ftb3VudCA9IGV1aVBhZGRpbmdTaXplKGV1aVRoZW1lQ29udGV4dCwgcGFkZGluZ1NpemUpO1xuICB2YXIgc3BhY2luZyA9IGV1aVBhZGRpbmdTaXplKGV1aVRoZW1lQ29udGV4dCwgcGFkZGluZ0tleSk7XG4gIHZhciBoYWxmU3BhY2luZyA9IGV1aVBhZGRpbmdTaXplKGV1aVRoZW1lQ29udGV4dCwgaGFsZlBhZGRpbmdLZXkpO1xuICByZXR1cm4ge1xuICAgIGNhcmQ6IHtcbiAgICAgIGV1aUNhcmQ6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47JjpoYXMoXFxuICAgICAgICAgICAgW2NsYXNzKj0nZXVpQ2FyZF9fdGV4dCddW2NsYXNzKj0nLWludGVyYWN0aXZlJ106Zm9jdXM6Zm9jdXMtdmlzaWJsZVxcbiAgICAgICAgICApe291dGxpbmU6XCIsIGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIiBzb2xpZCBjdXJyZW50Q29sb3I7fTtsYWJlbDpldWlDYXJkO1wiKSxcbiAgICAgIGFsaWduZWQ6IHtcbiAgICAgICAgY2VudGVyOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIiBhbGlnbi1pdGVtczpjZW50ZXI7O2xhYmVsOmNlbnRlcjtcIiksXG4gICAgICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIiBhbGlnbi1pdGVtczpmbGV4LXN0YXJ0OztsYWJlbDpsZWZ0O1wiKSxcbiAgICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygncmlnaHQnKSwgXCIgYWxpZ24taXRlbXM6ZmxleC1lbmQ7O2xhYmVsOnJpZ2h0O1wiKVxuICAgICAgfSxcbiAgICAgIGRpc2FibGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6XCIsIGV1aUJ1dHRvbkNvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ2Rpc2FibGVkJyksIFwiO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LCBcIjs7bGFiZWw6ZGlzYWJsZWQ7XCIpXG4gICAgfSxcbiAgICBtYWluOiB7XG4gICAgICBldWlDYXJkX19tYWluOiBfcmVmNixcbiAgICAgIGxheW91dDoge1xuICAgICAgICB2ZXJ0aWNhbDogX3JlZjUsXG4gICAgICAgIGhvcml6b250YWw6IF9yZWY0XG4gICAgICB9XG4gICAgfSxcbiAgICBjb250ZW50OiB7XG4gICAgICBldWlDYXJkX19jb250ZW50OiBfcmVmMyxcbiAgICAgIGxheW91dDoge1xuICAgICAgICB2ZXJ0aWNhbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDp2ZXJ0aWNhbDtcIiksXG4gICAgICAgIGhvcml6b250YWw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnYXV0bycpLCBcIjs7bGFiZWw6aG9yaXpvbnRhbDtcIilcbiAgICAgIH1cbiAgICB9LFxuICAgIGV1aUNhcmRfX2NoaWxkcmVuOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoYWxmU3BhY2luZyksIFwiOztsYWJlbDpldWlDYXJkX19jaGlsZHJlbjtcIiksXG4gICAgZXVpQ2FyZF9fZGVzY3JpcHRpb246IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhhbGZTcGFjaW5nKSwgXCI7O2xhYmVsOmV1aUNhcmRfX2Rlc2NyaXB0aW9uO1wiKSxcbiAgICBldWlDYXJkX19mb290ZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJmbGV4LWdyb3c6MDtcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgc3BhY2luZyksIFwiOztsYWJlbDpldWlDYXJkX19mb290ZXI7XCIpLFxuICAgIHRvcDoge1xuICAgICAgZXVpQ2FyZF9fdG9wOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1ncm93OjA7Zm9udC1zaXplOjA7cG9zaXRpb246cmVsYXRpdmU7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBzcGFjaW5nKSwgXCI7O2xhYmVsOmV1aUNhcmRfX3RvcDtcIiksXG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgdmVydGljYWw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6dmVydGljYWw7XCIpLFxuICAgICAgICBob3Jpem9udGFsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJ2F1dG8nKSwgXCI7O2xhYmVsOmhvcml6b250YWw7XCIpXG4gICAgICB9LFxuICAgICAgZGlzYWJsZWQ6IF9yZWYyXG4gICAgfSxcbiAgICBpbWFnZToge1xuICAgICAgZXVpQ2FyZF9faW1hZ2U6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgXCJjYWxjKDEwMCUgKyAoXCIuY29uY2F0KHBhZGRpbmdBbW91bnQsIFwiICogMikpXCIpKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCBcIi1cIi5jb25jYXQocGFkZGluZ0Ftb3VudCkpLCBcIiBcIiwgbG9naWNhbENTUygndG9wJywgXCItXCIuY29uY2F0KHBhZGRpbmdBbW91bnQpKSwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIFwiLVwiLmNvbmNhdChwYWRkaW5nQW1vdW50KSksIGxvZ2ljYWxDU1MoJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnLCBcImNhbGMoXCIuY29uY2F0KGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBcIiAtIFwiKS5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiKVwiKSksIFwiIFwiLCBsb2dpY2Fsc1snYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMnXSwgXCI6Y2FsYyhcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiIC0gXCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIik7aW1ne1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiO307bGFiZWw6ZXVpQ2FyZF9faW1hZ2U7XCIpLFxuICAgICAgdHJhbnNwYXJlbnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSwgXCI7O2xhYmVsOnRyYW5zcGFyZW50O1wiKVxuICAgIH0sXG4gICAgaWNvbjoge1xuICAgICAgZXVpQ2FyZF9faWNvbjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlDYXJkX19pY29uO1wiKSxcbiAgICAgIHdpdGhJbWFnZTogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCAnNTAlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdsZWZ0JywgJzUwJScpLCBcInRyYW5zZm9ybTp0cmFuc2xhdGUoXFxuICAgICAgICAgIC01MCUsXFxuICAgICAgICAgIGNhbGMoLTUwJSArIC1cIiwgcGFkZGluZ0Ftb3VudCwgXCIpXFxuICAgICAgICApIWltcG9ydGFudDs7bGFiZWw6d2l0aEltYWdlO1wiKSxcbiAgICAgIGxheW91dDoge1xuICAgICAgICB2ZXJ0aWNhbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGFsZlNwYWNpbmcpLCBcIjs7bGFiZWw6dmVydGljYWw7XCIpLFxuICAgICAgICBob3Jpem9udGFsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21hcmdpbi1yaWdodCcsIHNwYWNpbmcpLCBcIjs7bGFiZWw6aG9yaXpvbnRhbDtcIilcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwicjhhZ3pnLWV1aUNhcmRfX3RleHRcIixcbiAgc3R5bGVzOiBcImZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O2N1cnNvcjppbmhlcml0O2xhYmVsOmV1aUNhcmRfX3RleHQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwicjhhZ3pnLWV1aUNhcmRfX3RleHRcIixcbiAgc3R5bGVzOiBcImZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O2N1cnNvcjppbmhlcml0O2xhYmVsOmV1aUNhcmRfX3RleHQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQ2FyZFRleHRTdHlsZXMgPSBmdW5jdGlvbiBldWlDYXJkVGV4dFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUNhcmRfX3RleHQ6IF9yZWYsXG4gICAgaW50ZXJhY3RpdmU6IC8qI19fUFVSRV9fKi9jc3MoXCJvdXRsaW5lLW9mZnNldDpcIiwgZXVpVGhlbWUuc2l6ZS54eHMsIFwiOy5ldWlDYXJkOmhvdmVyICYsLmV1aUNhcmQ6Zm9jdXMgJiwmOmhvdmVyLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9XCIsIGV1aVN1cHBvcnRzSGFzLCBcIntvdXRsaW5lOm5vbmUhaW1wb3J0YW50O307bGFiZWw6aW50ZXJhY3RpdmU7XCIpLFxuICAgIGFsaWduZWQ6IHtcbiAgICAgIGNlbnRlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCI7O2xhYmVsOmNlbnRlcjtcIiksXG4gICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCI7O2xhYmVsOmxlZnQ7XCIpLFxuICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygncmlnaHQnKSwgXCI7O2xhYmVsOnJpZ2h0O1wiKVxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkVGV4dCwgXCI7O2xhYmVsOmRpc2FibGVkO1wiKVxuICB9O1xufTtcbmV4cG9ydCB2YXIgZXVpQ2FyZEJldGFCYWRnZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNhcmRCZXRhQmFkZ2VTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBwYWRkaW5nU2l6ZSkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBwYWRkaW5nID0gZXVpUGFkZGluZ1NpemUoZXVpVGhlbWVDb250ZXh0LCBwYWRkaW5nU2l6ZSk7XG4gIHJldHVybiB7XG4gICAgaGFzQmV0YUJhZGdlOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6dmlzaWJsZTtcIiwgbG9naWNhbENTUygncGFkZGluZy10b3AnLCBcImNhbGMoXCIuY29uY2F0KHBhZGRpbmcsIFwiICsgXCIpLmNvbmNhdChldWlUaGVtZS5zaXplLnMsIFwiKVwiKSksIFwiOztsYWJlbDpoYXNCZXRhQmFkZ2U7XCIpLFxuICAgIGV1aUNhcmRfX2JldGFCYWRnZUFuY2hvcjogLyojX19QVVJFX18qL2NzcyhcImxpbmUtaGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxDU1MoJ3RvcCcsICcwJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdsZWZ0JywgJzUwJScpLCBcIiB0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC01MCUpO3otaW5kZXg6MztcIiwgbG9naWNhbENTUygnbWluLXdpZHRoJywgJ21pbigzMCUsIDExMnB4KScpLCBcIiBcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgXCJjYWxjKDEwMCUgLSAoXCIuY29uY2F0KHBhZGRpbmcsIFwiICogMikpXCIpKSwgXCI7O2xhYmVsOmV1aUNhcmRfX2JldGFCYWRnZUFuY2hvcjtcIiksXG4gICAgZXVpQ2FyZF9fYmV0YUJhZGdlOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmV1aUNhcmRfX2JldGFCYWRnZTtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpZFwiLCBcImNoZWNrZWRcIiwgXCJsYWJlbFwiLCBcIm9uQ2hhbmdlXCIsIFwidHlwZVwiLCBcImRpc2FibGVkXCIsIFwicmVhZE9ubHlcIiwgXCJpbmRldGVybWluYXRlXCIsIFwiaW5wdXRSZWZcIiwgXCJsYWJlbFByb3BzXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUNvbWJpbmVkUmVmcywgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBldWlDaGVja2JveFN0eWxlcyB9IGZyb20gJy4vY2hlY2tib3guc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNoZWNrYm94ID0gZnVuY3Rpb24gRXVpQ2hlY2tib3goX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgaWQgPSBfcmVmLmlkLFxuICAgIF9yZWYkY2hlY2tlZCA9IF9yZWYuY2hlY2tlZCxcbiAgICBjaGVja2VkID0gX3JlZiRjaGVja2VkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2hlY2tlZCxcbiAgICBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgb25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlLFxuICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgX3JlZiRkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgZGlzYWJsZWQgPSBfcmVmJGRpc2FibGVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkZGlzYWJsZWQsXG4gICAgX3JlZiRyZWFkT25seSA9IF9yZWYucmVhZE9ubHksXG4gICAgcmVhZE9ubHkgPSBfcmVmJHJlYWRPbmx5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkcmVhZE9ubHksXG4gICAgX3JlZiRpbmRldGVybWluYXRlID0gX3JlZi5pbmRldGVybWluYXRlLFxuICAgIGluZGV0ZXJtaW5hdGUgPSBfcmVmJGluZGV0ZXJtaW5hdGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpbmRldGVybWluYXRlLFxuICAgIGlucHV0UmVmID0gX3JlZi5pbnB1dFJlZixcbiAgICBsYWJlbFByb3BzID0gX3JlZi5sYWJlbFByb3BzLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDaGVja2JveCcsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlDaGVja2JveFN0eWxlcyk7XG4gIHZhciBpbnB1dFN0eWxlcyA9IFtzdHlsZXMuaW5wdXQuZXVpQ2hlY2tib3hfX3NxdWFyZSwgISFsYWJlbCAmJiBzdHlsZXMuaW5wdXQuaGFzTGFiZWwsIGRpc2FibGVkID8gY2hlY2tlZCB8fCBpbmRldGVybWluYXRlID8gc3R5bGVzLmlucHV0LmRpc2FibGVkLnNlbGVjdGVkIDogc3R5bGVzLmlucHV0LmRpc2FibGVkLnVuc2VsZWN0ZWQgOiBjaGVja2VkIHx8IGluZGV0ZXJtaW5hdGUgPyBzdHlsZXMuaW5wdXQuZW5hYmxlZC5zZWxlY3RlZCA6IHN0eWxlcy5pbnB1dC5lbmFibGVkLnVuc2VsZWN0ZWQsIHJlYWRPbmx5ICYmIHN0eWxlcy5pbnB1dC5yZWFkT25seV07XG4gIHZhciBsYWJlbENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDaGVja2JveF9fbGFiZWwnLCBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIGxhYmVsU3R5bGVzID0gW3N0eWxlcy5sYWJlbC5ldWlDaGVja2JveF9fbGFiZWwsIGRpc2FibGVkID8gc3R5bGVzLmxhYmVsLmRpc2FibGVkIDogc3R5bGVzLmxhYmVsLmVuYWJsZWQsIHJlYWRPbmx5ICYmIHN0eWxlcy5sYWJlbC5yZWFkT25seSwgbGFiZWxQcm9wcyA9PT0gbnVsbCB8fCBsYWJlbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYWJlbFByb3BzLmNzc107XG4gIHZhciBpY29uU3R5bGVzID0gW3N0eWxlcy5pbnB1dC5pY29uLmV1aUNoZWNrYm94X19pY29uLCBpbmRldGVybWluYXRlID8gc3R5bGVzLmlucHV0Lmljb24uaW5kZXRlcm1pbmF0ZSA6IHN0eWxlcy5pbnB1dC5pY29uLmNoZWNrXTtcblxuICAvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dC9jaGVja2JveCNpbmRldGVybWluYXRlX3N0YXRlX2NoZWNrYm94ZXNcbiAgdmFyIHNldEluZGV0ZXJtaW5hdGVTdGF0ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIGlmIChpbnB1dCkgaW5wdXQuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XG4gIH0sIFtpbmRldGVybWluYXRlXSk7XG4gIHZhciByZWZzID0gdXNlQ29tYmluZWRSZWZzKFtpbnB1dFJlZiwgc2V0SW5kZXRlcm1pbmF0ZVN0YXRlXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjc3M6IHN0eWxlcy5ldWlDaGVja2JveCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY3NzOiBpbnB1dFN0eWxlcyxcbiAgICBjbGFzc05hbWU6IFwiZXVpQ2hlY2tib3hfX3NxdWFyZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIGNzczogaWNvblN0eWxlcyxcbiAgICB0eXBlOiBpbmRldGVybWluYXRlID8gJ3N0b3BGaWxsZWQnIDogY2hlY2tlZCA/ICdjaGVjaycgOiAnZW1wdHknXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiaW5wdXRcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogc3R5bGVzLmlucHV0LmV1aUNoZWNrYm94X19pbnB1dCxcbiAgICBjbGFzc05hbWU6IFwiZXVpQ2hlY2tib3hfX2lucHV0XCIsXG4gICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgIGlkOiBpZCxcbiAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgcmVhZE9ubHk6IHJlYWRPbmx5LFxuICAgIHJlZjogcmVmc1xuICB9LCByZXN0KSkpLCBsYWJlbCAmJiBfX19FbW90aW9uSlNYKFwibGFiZWxcIiwgX2V4dGVuZHMoe30sIGxhYmVsUHJvcHMsIHtcbiAgICBjc3M6IGxhYmVsU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogbGFiZWxDbGFzc2VzLFxuICAgIGh0bWxGb3I6IGlkXG4gIH0pLCBsYWJlbCkpO1xufTtcbkV1aUNoZWNrYm94LnByb3BUeXBlcyA9IHtcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIC8vIG92ZXJyaWRpbmcgdG8gbWFrZSBpdCByZXF1aXJlZFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpbmRldGVybWluYXRlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPGxhYmVsLz5cbiAgICAgKi9cbiAgbGFiZWxQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvcm1DdXN0b21Db250cm9sU3R5bGVzLCBldWlGb3JtQ3VzdG9tQ29udHJvbFZhcmlhYmxlcyB9IGZyb20gJy4uL2Zvcm0uc3R5bGVzJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFtOG9iOWItcmVhZE9ubHlcIixcbiAgc3R5bGVzOiBcImN1cnNvcjpkZWZhdWx0O2xhYmVsOnJlYWRPbmx5O1wiXG59IDoge1xuICBuYW1lOiBcIjFtOG9iOWItcmVhZE9ubHlcIixcbiAgc3R5bGVzOiBcImN1cnNvcjpkZWZhdWx0O2xhYmVsOnJlYWRPbmx5O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwidTU0Z2x2LWluZGV0ZXJtaW5hdGVcIixcbiAgc3R5bGVzOiBcInRyYW5zZm9ybTpzY2FsZSgwLjUpO2xhYmVsOmluZGV0ZXJtaW5hdGU7XCJcbn0gOiB7XG4gIG5hbWU6IFwidTU0Z2x2LWluZGV0ZXJtaW5hdGVcIixcbiAgc3R5bGVzOiBcInRyYW5zZm9ybTpzY2FsZSgwLjUpO2xhYmVsOmluZGV0ZXJtaW5hdGU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQ2hlY2tib3hTdHlsZXMgPSBmdW5jdGlvbiBldWlDaGVja2JveFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgY29udHJvbFN0eWxlcyA9IGV1aUZvcm1DdXN0b21Db250cm9sU3R5bGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBfZXVpRm9ybUN1c3RvbUNvbnRyb2wgPSBldWlGb3JtQ3VzdG9tQ29udHJvbFZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIHVuc2VsZWN0ZWRCb3JkZXIgPSBfZXVpRm9ybUN1c3RvbUNvbnRyb2wuY29sb3JzLnVuc2VsZWN0ZWRCb3JkZXI7XG4gIHJldHVybiB7XG4gICAgZXVpQ2hlY2tib3g6IC8qI19fUFVSRV9fKi9jc3MoY29udHJvbFN0eWxlcy53cmFwcGVyLCBcIjtsYWJlbDpldWlDaGVja2JveDtcIiksXG4gICAgaW5wdXQ6IHtcbiAgICAgIGV1aUNoZWNrYm94X19zcXVhcmU6IC8qI19fUFVSRV9fKi9jc3MoY29udHJvbFN0eWxlcy5pbnB1dC5mYXV4SW5wdXQsIFwiIGJvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMuc21hbGwsIFwiOztsYWJlbDpldWlDaGVja2JveF9fc3F1YXJlO1wiKSxcbiAgICAgIGhhc0xhYmVsOiBjb250cm9sU3R5bGVzLmlucHV0Lmhhc0xhYmVsLFxuICAgICAgLy8gU2tpcCBjc3NgYCBjbGFzc05hbWUgZ2VuZXJhdGlvblxuICAgICAgZW5hYmxlZDoge1xuICAgICAgICBzZWxlY3RlZDogLyojX19QVVJFX18qL2Nzcyhjb250cm9sU3R5bGVzLmlucHV0LmVuYWJsZWQuc2VsZWN0ZWQsIFwiO2xhYmVsOnNlbGVjdGVkO1wiKSxcbiAgICAgICAgdW5zZWxlY3RlZDogLyojX19QVVJFX18qL2Nzcyhjb250cm9sU3R5bGVzLmlucHV0LmVuYWJsZWQudW5zZWxlY3RlZCwgXCI7bGFiZWw6dW5zZWxlY3RlZDtcIilcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlZDoge1xuICAgICAgICBzZWxlY3RlZDogLyojX19QVVJFX18qL2Nzcyhjb250cm9sU3R5bGVzLmlucHV0LmRpc2FibGVkLnNlbGVjdGVkLCBcIjtsYWJlbDpzZWxlY3RlZDtcIiksXG4gICAgICAgIHVuc2VsZWN0ZWQ6IC8qI19fUFVSRV9fKi9jc3MoY29udHJvbFN0eWxlcy5pbnB1dC5kaXNhYmxlZC51bnNlbGVjdGVkLCBcIjtsYWJlbDp1bnNlbGVjdGVkO1wiKVxuICAgICAgfSxcbiAgICAgIC8vIFJlYWRvbmx5IGNoZWNrYm94ZXMgYXJlIHVzZWQgYnkgRXVpTWFya2Rvd25FZGl0b3JcbiAgICAgIC8vIE1haW50YWluIHRoZSBpbml0aWFsIGNvbG9yIHRvIGVuZm9yY2UgdGhhdCBjbGlja3MgYXJlIG5vdCBkb2luZyBhbnl0aGluZ1xuICAgICAgcmVhZE9ubHk6IC8qI19fUFVSRV9fKi9jc3MoXCImOmhhcyhpbnB1dDpmb2N1cy12aXNpYmxlKXtvdXRsaW5lOlwiLCBldWlUaGVtZS5mb2N1cy53aWR0aCwgXCIgc29saWQgXCIsIHVuc2VsZWN0ZWRCb3JkZXIsIFwiO30mOmhhcyhpbnB1dDpmb2N1cyl7Ym9yZGVyLWNvbG9yOlwiLCB1bnNlbGVjdGVkQm9yZGVyLCBcIjt9O2xhYmVsOnJlYWRPbmx5O1wiKSxcbiAgICAgIGljb246IHtcbiAgICAgICAgZXVpQ2hlY2tib3hfX2ljb246IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpQ2hlY2tib3hfX2ljb247XCIpLFxuICAgICAgICBjaGVjazogLyojX19QVVJFX18qL2Nzcyhjb250cm9sU3R5bGVzLmlucHV0Lmljb24sIFwiIHN0cm9rZTpjdXJyZW50Q29sb3I7O2xhYmVsOmNoZWNrO1wiKSxcbiAgICAgICAgaW5kZXRlcm1pbmF0ZTogX3JlZjJcbiAgICAgIH0sXG4gICAgICBldWlDaGVja2JveF9faW5wdXQ6IC8qI19fUFVSRV9fKi9jc3MoY29udHJvbFN0eWxlcy5pbnB1dC5oaWRkZW5JbnB1dCwgXCIgJltyZWFkb25seV17Y3Vyc29yOmRlZmF1bHQ7fTtsYWJlbDpldWlDaGVja2JveF9faW5wdXQ7XCIpXG4gICAgfSxcbiAgICBsYWJlbDoge1xuICAgICAgZXVpQ2hlY2tib3hfX2xhYmVsOiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMubGFiZWwubGFiZWwsIFwiO2xhYmVsOmV1aUNoZWNrYm94X19sYWJlbDtcIiksXG4gICAgICBlbmFibGVkOiBjb250cm9sU3R5bGVzLmxhYmVsLmVuYWJsZWQsXG4gICAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2Nzcyhjb250cm9sU3R5bGVzLmxhYmVsLmRpc2FibGVkLCBcIjtsYWJlbDpkaXNhYmxlZDtcIiksXG4gICAgICByZWFkT25seTogX3JlZlxuICAgIH1cbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJmb250V2VpZ2h0XCJdO1xuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IGV1aUNhbkFuaW1hdGUsIGV1aVRleHRCcmVha1dvcmQgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlUaXRsZSB9IGZyb20gJy4uLy4uL3RpdGxlL3RpdGxlLnN0eWxlcyc7XG5leHBvcnQgdmFyIGV1aUZvcm1MYWJlbCA9IGZ1bmN0aW9uIGV1aUZvcm1MYWJlbChldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICAvLyBFeGNsdWRlIHRoZSBmb250V2VpZ2h0IGZyb20gdGhlIHRpdGxlLCBzaW5jZSB3ZSdyZSBzZXR0aW5nIG91ciBvd24gbGF0ZXJcbiAgdmFyIF9ldWlUaXRsZSA9IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4eHMnKSxcbiAgICBfID0gX2V1aVRpdGxlLmZvbnRXZWlnaHQsXG4gICAgX3RpdGxlU3R5bGVzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9ldWlUaXRsZSwgX2V4Y2x1ZGVkKTtcbiAgLy8gU2luY2Ugd2UncmUgbm90IHJldHVybmluZyBhIGNzc2BgIHN0cmluZyAodG8gYXZvaWQgZ2VuZXJhdGluZyBhbiBleHRyYSBFbW90aW9uXG4gIC8vIGNsYXNzTmFtZSksIHdlIG5lZWQgdG8gbWFudWFsbHkgc2VyaWFsaXplIHRoZSBzdHlsZSBvYmplY3QgaW50byBhIHN0cmluZ1xuICB2YXIgdGl0bGVTdHlsZXMgPSBzZXJpYWxpemVTdHlsZXMoW190aXRsZVN0eWxlc10pLnN0eWxlcztcbiAgcmV0dXJuIFwiXFxuICAgIFwiLmNvbmNhdCh0aXRsZVN0eWxlcywgXCJcXG4gICAgZm9udC13ZWlnaHQ6IFwiKS5jb25jYXQoZXVpVGhlbWUuZm9udC53ZWlnaHQuc2VtaUJvbGQsIFwiO1xcbiAgICBcIikuY29uY2F0KGV1aVRleHRCcmVha1dvcmQoKSwgXCJcXG4gIFwiKTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1MYWJlbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1MYWJlbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUZvcm1MYWJlbDogLyojX19QVVJFX18qL2NzcyhldWlGb3JtTGFiZWwoZXVpVGhlbWVDb250ZXh0KSwgXCIgZGlzcGxheTppbmxpbmUtYmxvY2s7XCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246Y29sb3IgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO307bGFiZWw6ZXVpRm9ybUxhYmVsO1wiKSxcbiAgICAvLyBTa2lwIGNzc2BgIHRvIGF2b2lkIGdlbmVyYXRpbmcgYW4gZXh0cmEgRW1vdGlvbiBjbGFzc05hbWVcbiAgICAvLyBVc2UgOndoZXJlIHRvIHJlZHVjZSBzcGVjaWZpY2l0eSAmIG1ha2UgdGhlIENTUyBlYXNpZXIgdG8gb3ZlcnJpZGUgYnkgcHJlcGVuZC9hcHBlbmQgbm9kZXNcbiAgICBub3REaXNhYmxlZDogXCJcXG4gICAgICAmOndoZXJlKFtmb3JdKSB7XFxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgfVxcbiAgICBcIixcbiAgICBpbnZhbGlkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYW5nZXIsIFwiOztsYWJlbDppbnZhbGlkO1wiKSxcbiAgICAvLyBGb2N1c2VkIHN0YXRlIHNob3VsZCBvdmVycmlkZSBpbnZhbGlkIHN0YXRlXG4gICAgZm9jdXNlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgXCI7O2xhYmVsOmZvY3VzZWQ7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZ3V0dGVyU2l6ZVwiLCBcImFsaWduSXRlbXNcIiwgXCJyZXNwb25zaXZlXCIsIFwianVzdGlmeUNvbnRlbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJ3cmFwXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlGbGV4R3JvdXBTdHlsZXMgfSBmcm9tICcuL2ZsZXhfZ3JvdXAuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEdVVFRFUl9TSVpFUyA9IFsnbm9uZScsICd4cycsICdzJywgJ20nLCAnbCcsICd4bCddO1xuZXhwb3J0IHZhciBBTElHTl9JVEVNUyA9IFsnc3RyZXRjaCcsICdmbGV4U3RhcnQnLCAnZmxleEVuZCcsICdjZW50ZXInLCAnYmFzZWxpbmUnXTtcbmV4cG9ydCB2YXIgSlVTVElGWV9DT05URU5UUyA9IFsnZmxleFN0YXJ0JywgJ2ZsZXhFbmQnLCAnY2VudGVyJywgJ3NwYWNlQmV0d2VlbicsICdzcGFjZUFyb3VuZCcsICdzcGFjZUV2ZW5seSddO1xuZXhwb3J0IHZhciBESVJFQ1RJT05TID0gWydyb3cnLCAncm93UmV2ZXJzZScsICdjb2x1bW4nLCAnY29sdW1uUmV2ZXJzZSddO1xudmFyIEV1aUZsZXhHcm91cEludGVybmFsID0gZnVuY3Rpb24gRXVpRmxleEdyb3VwSW50ZXJuYWwoX3JlZiwgcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJGNvbXBvbmVudCA9IF9yZWYuY29tcG9uZW50LFxuICAgIGNvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYkY29tcG9uZW50LFxuICAgIF9yZWYkZ3V0dGVyU2l6ZSA9IF9yZWYuZ3V0dGVyU2l6ZSxcbiAgICBndXR0ZXJTaXplID0gX3JlZiRndXR0ZXJTaXplID09PSB2b2lkIDAgPyAnbCcgOiBfcmVmJGd1dHRlclNpemUsXG4gICAgX3JlZiRhbGlnbkl0ZW1zID0gX3JlZi5hbGlnbkl0ZW1zLFxuICAgIGFsaWduSXRlbXMgPSBfcmVmJGFsaWduSXRlbXMgPT09IHZvaWQgMCA/ICdzdHJldGNoJyA6IF9yZWYkYWxpZ25JdGVtcyxcbiAgICBfcmVmJHJlc3BvbnNpdmUgPSBfcmVmLnJlc3BvbnNpdmUsXG4gICAgcmVzcG9uc2l2ZSA9IF9yZWYkcmVzcG9uc2l2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkcmVzcG9uc2l2ZSxcbiAgICBfcmVmJGp1c3RpZnlDb250ZW50ID0gX3JlZi5qdXN0aWZ5Q29udGVudCxcbiAgICBqdXN0aWZ5Q29udGVudCA9IF9yZWYkanVzdGlmeUNvbnRlbnQgPT09IHZvaWQgMCA/ICdmbGV4U3RhcnQnIDogX3JlZiRqdXN0aWZ5Q29udGVudCxcbiAgICBfcmVmJGRpcmVjdGlvbiA9IF9yZWYuZGlyZWN0aW9uLFxuICAgIGRpcmVjdGlvbiA9IF9yZWYkZGlyZWN0aW9uID09PSB2b2lkIDAgPyAncm93JyA6IF9yZWYkZGlyZWN0aW9uLFxuICAgIF9yZWYkd3JhcCA9IF9yZWYud3JhcCxcbiAgICB3cmFwID0gX3JlZiR3cmFwID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkd3JhcCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlGbGV4R3JvdXBTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlGbGV4R3JvdXAsIHJlc3BvbnNpdmUgJiYgIWRpcmVjdGlvbi5pbmNsdWRlcygnY29sdW1uJykgJiYgc3R5bGVzLnJlc3BvbnNpdmUsIHdyYXAgJiYgc3R5bGVzLndyYXAsIHN0eWxlcy5ndXR0ZXJTaXplc1tndXR0ZXJTaXplXSwgc3R5bGVzLmp1c3RpZnlDb250ZW50W2p1c3RpZnlDb250ZW50XSwgc3R5bGVzLmFsaWduSXRlbXNbYWxpZ25JdGVtc10sIHN0eWxlcy5kaXJlY3Rpb25bZGlyZWN0aW9uXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRmxleEdyb3VwJywgY2xhc3NOYW1lKTtcblxuICAvLyBDYXN0IGBjb21wb25lbnRgIHRvIEZ1bmN0aW9uQ29tcG9uZW50IHRvIHNpbXBsaWZ5IGl0cyB0eXBlLlxuICAvLyBOb3RlIHRoYXQgRnVuY3Rpb25Db21wb25lbnQgdHlwZSBpcyB1c2VkIGhlcmUgZm9yIHB1cmVseSB0eXBpbmdcbiAgLy8gY29udmVuaWVuY2Ugc2luY2Ugd2Ugc3BlY2lmeSB0aGUgcmV0dXJuIHR5cGUgYWJvdmUsIGFuZCBmdW5jdGlvblxuICAvLyBjb21wb25lbnRzIGRvbid0IHN1cHBvcnQgYHJlZmBzLCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlciBpbiB0aGlzIGNhc2UuXG4gIHZhciBDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKENvbXBvbmVudCwgX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICByZWY6IHJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSkpO1xufTtcblxuLy8gQ2FzdCBmb3J3YXJkUmVmIHJldHVybiB0eXBlIHRvIHdvcmsgd2l0aCB0aGUgZ2VuZXJpYyBUQ29tcG9uZW50IHR5cGVcbi8vIGFuZCBub3QgZmFsbGJhY2sgdG8gaW1wbGljaXQgYW55IHR5cGluZ1xuZXhwb3J0IHZhciBFdWlGbGV4R3JvdXAgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihFdWlGbGV4R3JvdXBJbnRlcm5hbCk7XG5FdWlGbGV4R3JvdXAuZGlzcGxheU5hbWUgPSAnRXVpRmxleEdyb3VwJzsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpTWF4QnJlYWtwb2ludCwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIm40aGRrZy1jb2x1bW5SZXZlcnNlXCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZTtsYWJlbDpjb2x1bW5SZXZlcnNlO1wiXG59IDoge1xuICBuYW1lOiBcIm40aGRrZy1jb2x1bW5SZXZlcnNlXCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZTtsYWJlbDpjb2x1bW5SZXZlcnNlO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibGw4a21xLWNvbHVtblwiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246Y29sdW1uO2xhYmVsOmNvbHVtbjtcIlxufSA6IHtcbiAgbmFtZTogXCJsbDhrbXEtY29sdW1uXCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpjb2x1bW47bGFiZWw6Y29sdW1uO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXZuaXpvMS1yb3dSZXZlcnNlXCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtsYWJlbDpyb3dSZXZlcnNlO1wiXG59IDoge1xuICBuYW1lOiBcIjF2bml6bzEtcm93UmV2ZXJzZVwiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7bGFiZWw6cm93UmV2ZXJzZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY0ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE1bXZqbW8tcm93XCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpyb3c7bGFiZWw6cm93O1wiXG59IDoge1xuICBuYW1lOiBcIjE1bXZqbW8tcm93XCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpyb3c7bGFiZWw6cm93O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibnE1ajl1LWJhc2VsaW5lXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpiYXNlbGluZTtsYWJlbDpiYXNlbGluZTtcIlxufSA6IHtcbiAgbmFtZTogXCJucTVqOXUtYmFzZWxpbmVcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmJhc2VsaW5lO2xhYmVsOmJhc2VsaW5lO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiODM5MWRiLWNlbnRlclwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6Y2VudGVyO2xhYmVsOmNlbnRlcjtcIlxufSA6IHtcbiAgbmFtZTogXCI4MzkxZGItY2VudGVyXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpjZW50ZXI7bGFiZWw6Y2VudGVyO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjcgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTRqNmVyNC1mbGV4RW5kXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpmbGV4LWVuZDtsYWJlbDpmbGV4RW5kO1wiXG59IDoge1xuICBuYW1lOiBcIjE0ajZlcjQtZmxleEVuZFwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6ZmxleC1lbmQ7bGFiZWw6ZmxleEVuZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY4ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFtbXRqdmItZmxleFN0YXJ0XCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2xhYmVsOmZsZXhTdGFydDtcIlxufSA6IHtcbiAgbmFtZTogXCIxbW10anZiLWZsZXhTdGFydFwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6ZmxleC1zdGFydDtsYWJlbDpmbGV4U3RhcnQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmOSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxdXdjNG9qLXN0cmV0Y2hcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOnN0cmV0Y2g7bGFiZWw6c3RyZXRjaDtcIlxufSA6IHtcbiAgbmFtZTogXCIxdXdjNG9qLXN0cmV0Y2hcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOnN0cmV0Y2g7bGFiZWw6c3RyZXRjaDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYxMCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxbTFieXEtY2VudGVyXCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xhYmVsOmNlbnRlcjtcIlxufSA6IHtcbiAgbmFtZTogXCIxbTFieXEtY2VudGVyXCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xhYmVsOmNlbnRlcjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYxMSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxNmxrdTU0LXNwYWNlQXJvdW5kXCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kO2xhYmVsOnNwYWNlQXJvdW5kO1wiXG59IDoge1xuICBuYW1lOiBcIjE2bGt1NTQtc3BhY2VBcm91bmRcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7bGFiZWw6c3BhY2VBcm91bmQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMTIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWgxNmJnci1zcGFjZUJldHdlZW5cIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xhYmVsOnNwYWNlQmV0d2VlbjtcIlxufSA6IHtcbiAgbmFtZTogXCIxaDE2YmdyLXNwYWNlQmV0d2VlblwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGFiZWw6c3BhY2VCZXR3ZWVuO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjEzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImp5a3dzaS1zcGFjZUV2ZW5seVwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OnNwYWNlLWV2ZW5seTtsYWJlbDpzcGFjZUV2ZW5seTtcIlxufSA6IHtcbiAgbmFtZTogXCJqeWt3c2ktc3BhY2VFdmVubHlcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHk7bGFiZWw6c3BhY2VFdmVubHk7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMTQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMW5mdXF3dy1mbGV4RW5kXCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bGFiZWw6ZmxleEVuZDtcIlxufSA6IHtcbiAgbmFtZTogXCIxbmZ1cXd3LWZsZXhFbmRcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpmbGV4LWVuZDtsYWJlbDpmbGV4RW5kO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjE1ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImU5bWlpdi1mbGV4U3RhcnRcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2xhYmVsOmZsZXhTdGFydDtcIlxufSA6IHtcbiAgbmFtZTogXCJlOW1paXYtZmxleFN0YXJ0XCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtsYWJlbDpmbGV4U3RhcnQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMTYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwicWc1eWM5LXdyYXBcIixcbiAgc3R5bGVzOiBcImZsZXgtd3JhcDp3cmFwO2xhYmVsOndyYXA7XCJcbn0gOiB7XG4gIG5hbWU6IFwicWc1eWM5LXdyYXBcIixcbiAgc3R5bGVzOiBcImZsZXgtd3JhcDp3cmFwO2xhYmVsOndyYXA7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMTcgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiNHF1eG00LWV1aUZsZXhHcm91cFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZmxleC1ncm93OjE7bGFiZWw6ZXVpRmxleEdyb3VwO1wiXG59IDoge1xuICBuYW1lOiBcIjRxdXhtNC1ldWlGbGV4R3JvdXBcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpzdHJldGNoO2ZsZXgtZ3JvdzoxO2xhYmVsOmV1aUZsZXhHcm91cDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlGbGV4R3JvdXBTdHlsZXMgPSBmdW5jdGlvbiBldWlGbGV4R3JvdXBTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlGbGV4R3JvdXA6IF9yZWYxNyxcbiAgICByZXNwb25zaXZlOiAvKiNfX1BVUkVfXyovY3NzKGV1aU1heEJyZWFrcG9pbnQoZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIntmbGV4LXdyYXA6d3JhcDsmPi5ldWlGbGV4SXRlbXtcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiBmbGV4LWJhc2lzOjEwMCU7fX07bGFiZWw6cmVzcG9uc2l2ZTtcIiksXG4gICAgd3JhcDogX3JlZjE2LFxuICAgIGd1dHRlclNpemVzOiB7XG4gICAgICBub25lOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOm5vbmU7XCIpLFxuICAgICAgeHM6IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUueHMsIFwiOztsYWJlbDp4cztcIiksXG4gICAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgICAgbDogLyojX19QVVJFX18qL2NzcyhcImdhcDpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgICB4bDogLyojX19QVVJFX18qL2NzcyhcImdhcDpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDp4bDtcIilcbiAgICB9LFxuICAgIGp1c3RpZnlDb250ZW50OiB7XG4gICAgICBmbGV4U3RhcnQ6IF9yZWYxNSxcbiAgICAgIGZsZXhFbmQ6IF9yZWYxNCxcbiAgICAgIHNwYWNlRXZlbmx5OiBfcmVmMTMsXG4gICAgICBzcGFjZUJldHdlZW46IF9yZWYxMixcbiAgICAgIHNwYWNlQXJvdW5kOiBfcmVmMTEsXG4gICAgICBjZW50ZXI6IF9yZWYxMFxuICAgIH0sXG4gICAgYWxpZ25JdGVtczoge1xuICAgICAgc3RyZXRjaDogX3JlZjksXG4gICAgICBmbGV4U3RhcnQ6IF9yZWY4LFxuICAgICAgZmxleEVuZDogX3JlZjcsXG4gICAgICBjZW50ZXI6IF9yZWY2LFxuICAgICAgYmFzZWxpbmU6IF9yZWY1XG4gICAgfSxcbiAgICBkaXJlY3Rpb246IHtcbiAgICAgIHJvdzogX3JlZjQsXG4gICAgICByb3dSZXZlcnNlOiBfcmVmMyxcbiAgICAgIGNvbHVtbjogX3JlZjIsXG4gICAgICBjb2x1bW5SZXZlcnNlOiBfcmVmXG4gICAgfVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZ3Jvd1wiLCBcImNvbXBvbmVudFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZXVpRmxleEl0ZW1TdHlsZXMgYXMgc3R5bGVzIH0gZnJvbSAnLi9mbGV4X2l0ZW0uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgVkFMSURfR1JPV19WQUxVRVMgPSBbbnVsbCwgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdO1xudmFyIEV1aUZsZXhJdGVtSW50ZXJuYWwgPSBmdW5jdGlvbiBFdWlGbGV4SXRlbUludGVybmFsKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkZ3JvdyA9IF9yZWYuZ3JvdyxcbiAgICBncm93ID0gX3JlZiRncm93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRncm93LFxuICAgIF9yZWYkY29tcG9uZW50ID0gX3JlZi5jb21wb25lbnQsXG4gICAgY29tcG9uZW50ID0gX3JlZiRjb21wb25lbnQgPT09IHZvaWQgMCA/ICdkaXYnIDogX3JlZiRjb21wb25lbnQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChWQUxJRF9HUk9XX1ZBTFVFUy5pbmRleE9mKGdyb3cpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvcCBgZ3Jvd2AgcGFzc2VkIHRvIGBFdWlGbGV4SXRlbWAgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDEwLCByZWNlaXZlZCBgXCIuY29uY2F0KGdyb3csIFwiYFwiKSk7XG4gICAgfVxuICB9LCBbZ3Jvd10pO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlGbGV4SXRlbSwgIWdyb3cgPyBzdHlsZXMuZ3Jvd1plcm8gOiBzdHlsZXMuZ3JvdywgZ3JvdyAmJiAodHlwZW9mIGdyb3cgPT09ICdudW1iZXInID8gc3R5bGVzLmdyb3dTaXplc1tncm93XSA6IHN0eWxlcy5ncm93U2l6ZXNbJzEnXSldO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZsZXhJdGVtJywgY2xhc3NOYW1lKTtcblxuICAvLyBDYXN0IGBjb21wb25lbnRgIHRvIEZ1bmN0aW9uQ29tcG9uZW50IHRvIHNpbXBsaWZ5IGl0cyB0eXBlLlxuICAvLyBOb3RlIHRoYXQgRnVuY3Rpb25Db21wb25lbnQgdHlwZSBpcyB1c2VkIGhlcmUgZm9yIHB1cmVseSB0eXBpbmdcbiAgLy8gY29udmVuaWVuY2Ugc2luY2Ugd2Ugc3BlY2lmeSB0aGUgcmV0dXJuIHR5cGUgYWJvdmUsIGFuZCBmdW5jdGlvblxuICAvLyBjb21wb25lbnRzIGRvbid0IHN1cHBvcnQgYHJlZmBzLCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlciBpbiB0aGlzIGNhc2UuXG4gIHZhciBDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKENvbXBvbmVudCwgX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICByZWY6IHJlZixcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSksIGNoaWxkcmVuKTtcbn07XG5cbi8vIENhc3QgZm9yd2FyZFJlZiByZXR1cm4gdHlwZSB0byB3b3JrIHdpdGggdGhlIGdlbmVyaWMgVENvbXBvbmVudCB0eXBlXG4vLyBhbmQgbm90IGZhbGxiYWNrIHRvIGltcGxpY2l0IGFueSB0eXBpbmdcbmV4cG9ydCB2YXIgRXVpRmxleEl0ZW0gPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihFdWlGbGV4SXRlbUludGVybmFsKTtcbkV1aUZsZXhJdGVtLmRpc3BsYXlOYW1lID0gJ0V1aUZsZXhJdGVtJzsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuZXhwb3J0IHZhciBldWlGbGV4SXRlbVN0eWxlcyA9IHtcbiAgLy8gMS4gQWxsb3cgRXVpUGFuZWxzIHRvIGV4cGFuZCB0byBmaWxsIHRoZSBpdGVtLlxuICBldWlGbGV4SXRlbTogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgIG5hbWU6IFwiMTloZjQ0bi1ldWlGbGV4SXRlbVwiLFxuICAgIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2xhYmVsOmV1aUZsZXhJdGVtO1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCIxOWhmNDRuLWV1aUZsZXhJdGVtXCIsXG4gICAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bGFiZWw6ZXVpRmxleEl0ZW07XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH0sXG4gIGdyb3daZXJvOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgbmFtZTogXCIxcGF0N24wLWdyb3daZXJvXCIsXG4gICAgc3R5bGVzOiBcImZsZXgtZ3JvdzowO2ZsZXgtYmFzaXM6YXV0bztsYWJlbDpncm93WmVybztcIlxuICB9IDoge1xuICAgIG5hbWU6IFwiMXBhdDduMC1ncm93WmVyb1wiLFxuICAgIHN0eWxlczogXCJmbGV4LWdyb3c6MDtmbGV4LWJhc2lzOmF1dG87bGFiZWw6Z3Jvd1plcm87XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH0sXG4gIGdyb3c6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICBuYW1lOiBcInRyNHdlci1ncm93XCIsXG4gICAgc3R5bGVzOiBcImZsZXgtYmFzaXM6MCU7bGFiZWw6Z3JvdztcIlxuICB9IDoge1xuICAgIG5hbWU6IFwidHI0d2VyLWdyb3dcIixcbiAgICBzdHlsZXM6IFwiZmxleC1iYXNpczowJTtsYWJlbDpncm93O1wiLFxuICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICB9LFxuICBncm93U2l6ZXM6IHtcbiAgICAnMSc6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwiMXY2dXlvai0xXCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6MTtcIlxuICAgIH0gOiB7XG4gICAgICBuYW1lOiBcIjF2NnV5b2otMVwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOjE7XCIsXG4gICAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgICB9LFxuICAgICcyJzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgICAgbmFtZTogXCIxbDg2eHhoLTJcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6MjtsYWJlbDoyO1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwiMWw4Nnh4aC0yXCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjI7bGFiZWw6MjtcIixcbiAgICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICAgIH0sXG4gICAgJzMnOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgICBuYW1lOiBcIjFzbDc5YXktM1wiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3JvdzozO2xhYmVsOjM7XCJcbiAgICB9IDoge1xuICAgICAgbmFtZTogXCIxc2w3OWF5LTNcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6MztsYWJlbDozO1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfSxcbiAgICAnNCc6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwiazRwbnNnLTRcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6NDtsYWJlbDo0O1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwiazRwbnNnLTRcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6NDtsYWJlbDo0O1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfSxcbiAgICAnNSc6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwiMWN4NWZ4cy01XCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjU7bGFiZWw6NTtcIlxuICAgIH0gOiB7XG4gICAgICBuYW1lOiBcIjFjeDVmeHMtNVwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo1O2xhYmVsOjU7XCIsXG4gICAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgICB9LFxuICAgICc2JzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgICAgbmFtZTogXCIxaW45aWl5LTZcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6NjtsYWJlbDo2O1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwiMWluOWlpeS02XCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjY7bGFiZWw6NjtcIixcbiAgICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICAgIH0sXG4gICAgJzcnOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgICBuYW1lOiBcImZ2aDNuei03XCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93Ojc7bGFiZWw6NztcIlxuICAgIH0gOiB7XG4gICAgICBuYW1lOiBcImZ2aDNuei03XCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93Ojc7bGFiZWw6NztcIixcbiAgICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICAgIH0sXG4gICAgJzgnOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgICBuYW1lOiBcImZqZGd6Yy04XCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93Ojg7bGFiZWw6ODtcIlxuICAgIH0gOiB7XG4gICAgICBuYW1lOiBcImZqZGd6Yy04XCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93Ojg7bGFiZWw6ODtcIixcbiAgICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICAgIH0sXG4gICAgJzknOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgICBuYW1lOiBcIjF0eXI4cDYtOVwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo5O2xhYmVsOjk7XCJcbiAgICB9IDoge1xuICAgICAgbmFtZTogXCIxdHlyOHA2LTlcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6OTtsYWJlbDo5O1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfSxcbiAgICAnMTAnOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgICBuYW1lOiBcIm43cG9sZi0xMFwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxMDtsYWJlbDoxMDtcIlxuICAgIH0gOiB7XG4gICAgICBuYW1lOiBcIm43cG9sZi0xMFwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxMDtsYWJlbDoxMDtcIixcbiAgICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICAgIH1cbiAgfVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgRm9ybUNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7XG4gIGRlZmF1bHRGdWxsV2lkdGg6IGZhbHNlXG59KTtcbmV4cG9ydCBmdW5jdGlvbiB1c2VGb3JtQ29udGV4dCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoRm9ybUNvbnRleHQpO1xufSIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuZnVuY3Rpb24gaXNNdXRhYmxlUmVmKHJlZikge1xuICByZXR1cm4gcmVmICE9IG51bGwgJiYgcmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50Jyk7XG59XG5cbi8qKlxuICogVGhlIGBFdWlWYWxpZGF0YWJsZUNvbnRyb2xgIGNvbXBvbmVudCBzaG91bGQgYmUgdXNlZCBpbiBzY2VuYXJpb3Mgd2hlcmVcbiAqIHdlIGNhbiByZW5kZXIgdGhlIHZhbGlkYXRlZCBgPGlucHV0PmAgYXMgaXRzIGRpcmVjdCBjaGlsZC5cbiAqL1xuXG5leHBvcnQgdmFyIEV1aVZhbGlkYXRhYmxlQ29udHJvbCA9IGZ1bmN0aW9uIEV1aVZhbGlkYXRhYmxlQ29udHJvbChfcmVmKSB7XG4gIHZhciBpc0ludmFsaWQgPSBfcmVmLmlzSW52YWxpZCxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIC8vIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgc3RhdGUgYW5kIG5vdCBhIHJlZiB0byBjYXVzZSBhIHJlcmVuZGVyL3NldCBpbnZhbGlkIHN0YXRlIG9uIGluaXRpYWwgbW91bnRcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG51bGwpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGNvbnRyb2wgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldENvbnRyb2wgPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgY2hpbGQgPSBDaGlsZHJlbi5vbmx5KGNoaWxkcmVuKTtcbiAgdmFyIGNoaWxkUmVmID0gY2hpbGQucmVmO1xuICB2YXIgcmVwbGFjZWRSZWYgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHNldENvbnRyb2woZWxlbWVudCk7XG5cbiAgICAvLyBDYWxsIHRoZSBvcmlnaW5hbCByZWYsIGlmIGFueVxuICAgIGlmICh0eXBlb2YgY2hpbGRSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNoaWxkUmVmKGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAoaXNNdXRhYmxlUmVmKGNoaWxkUmVmKSkge1xuICAgICAgY2hpbGRSZWYuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICB9LCBbY2hpbGRSZWZdKTtcbiAgdXNlU2V0Q29udHJvbFZhbGlkaXR5KHtcbiAgICBjb250cm9sRWw6IGNvbnRyb2wsXG4gICAgaXNJbnZhbGlkOiBpc0ludmFsaWRcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgcmVmOiByZXBsYWNlZFJlZixcbiAgICAnYXJpYS1pbnZhbGlkJzogaXNJbnZhbGlkIHx8IGNoaWxkLnByb3BzWydhcmlhLWludmFsaWQnXVxuICB9KTtcbn07XG5cbi8qKlxuICogVGhlIGBVc2VFdWlWYWxpZGF0YWJsZUNvbnRyb2xgIGhvb2sgc2hvdWxkIGJlIHVzZWQgaW4gc2NlbmFyaW9zIHdoZXJlXG4gKiB3ZSAqY2Fubm90KiBjb250cm9sIHdoZXJlIHRoZSB2YWxpZGF0ZWQgYDxpbnB1dD5gIGlzIHJlbmRlcmVkIChlLmcuLCBSZWFjdERhdGVQaWNrZXIpXG4gKiBhbmQgaW5zdGVhZCBuZWVkIHRvIGFjY2VzcyB0aGUgaW5wdXQgdmlhIGEgcmVmIGFuZCBwYXNzIHRoZSBlbGVtZW50IGluIGRpcmVjdGx5XG4gKi9cbkV1aVZhbGlkYXRhYmxlQ29udHJvbC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByZWY6IFByb3BUeXBlcy5hbnlcbiAgfSkuaXNSZXF1aXJlZFxufTtcbmV4cG9ydCB2YXIgdXNlRXVpVmFsaWRhdGFibGVDb250cm9sID0gZnVuY3Rpb24gdXNlRXVpVmFsaWRhdGFibGVDb250cm9sKF9yZWYyKSB7XG4gIHZhciBpc0ludmFsaWQgPSBfcmVmMi5pc0ludmFsaWQsXG4gICAgY29udHJvbEVsID0gX3JlZjIuY29udHJvbEVsO1xuICB1c2VTZXRDb250cm9sVmFsaWRpdHkoe1xuICAgIGNvbnRyb2xFbDogY29udHJvbEVsLFxuICAgIGlzSW52YWxpZDogaXNJbnZhbGlkXG4gIH0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghY29udHJvbEVsKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBpc0ludmFsaWQgPT09ICdib29sZWFuJykge1xuICAgICAgY29udHJvbEVsLnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgU3RyaW5nKGlzSW52YWxpZCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sRWwucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWludmFsaWQnKTtcbiAgICB9XG4gIH0sIFtpc0ludmFsaWQsIGNvbnRyb2xFbF0pO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBgc2V0Q3VzdG9tVmFsaWRpdHlgIGhlbHBlclxuICovXG52YXIgdXNlU2V0Q29udHJvbFZhbGlkaXR5ID0gZnVuY3Rpb24gdXNlU2V0Q29udHJvbFZhbGlkaXR5KF9yZWYzKSB7XG4gIHZhciBjb250cm9sRWwgPSBfcmVmMy5jb250cm9sRWwsXG4gICAgaXNJbnZhbGlkID0gX3JlZjMuaXNJbnZhbGlkO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjb250cm9sRWwgPT0gbnVsbCB8fCB0eXBlb2YgY29udHJvbEVsLnNldEN1c3RvbVZhbGlkaXR5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0ludmFsaWQpIHtcbiAgICAgIGNvbnRyb2xFbC5zZXRDdXN0b21WYWxpZGl0eSgnSW52YWxpZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sRWwuc2V0Q3VzdG9tVmFsaWRpdHkoJycpO1xuICAgIH1cbiAgfSwgW2lzSW52YWxpZCwgY29udHJvbEVsXSk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiaW5wdXRJZFwiLCBcImNsYXNzTmFtZVwiLCBcImNoaWxkcmVuXCIsIFwiaWNvblwiLCBcImljb25zUG9zaXRpb25cIiwgXCJjbGVhclwiLCBcImlzRHJvcGRvd25cIiwgXCJpc0xvYWRpbmdcIiwgXCJpc0ludmFsaWRcIiwgXCJpc0Rpc2FibGVkXCIsIFwicmVhZE9ubHlcIiwgXCJjb21wcmVzc2VkXCIsIFwicHJlcGVuZFwiLCBcImFwcGVuZFwiLCBcImlzRGVsaW1pdGVkXCIsIFwid3JhcHBlclByb3BzXCIsIFwiZnVsbFdpZHRoXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlGb3JtTGFiZWwgfSBmcm9tICcuLi9mb3JtX2xhYmVsJztcbmltcG9ydCB7IHVzZUZvcm1Db250ZXh0IH0gZnJvbSAnLi4vZXVpX2Zvcm1fY29udGV4dCc7XG5pbXBvcnQgeyBnZXRJY29uQWZmb3JkYW5jZVN0eWxlcywgaXNSaWdodFNpZGVJY29uIH0gZnJvbSAnLi9fbnVtX2ljb25zJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMgfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfaWNvbnMnO1xuaW1wb3J0IHsgZXVpRm9ybUNvbnRyb2xMYXlvdXRTdHlsZXMsIGV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVTdHlsZXMgfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1Db250cm9sTGF5b3V0ID0gZnVuY3Rpb24gRXVpRm9ybUNvbnRyb2xMYXlvdXQocHJvcHMpIHtcbiAgdmFyIF91c2VGb3JtQ29udGV4dCA9IHVzZUZvcm1Db250ZXh0KCksXG4gICAgZGVmYXVsdEZ1bGxXaWR0aCA9IF91c2VGb3JtQ29udGV4dC5kZWZhdWx0RnVsbFdpZHRoO1xuICB2YXIgaW5wdXRJZCA9IHByb3BzLmlucHV0SWQsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaWNvbiA9IHByb3BzLmljb24sXG4gICAgX3Byb3BzJGljb25zUG9zaXRpb24gPSBwcm9wcy5pY29uc1Bvc2l0aW9uLFxuICAgIGljb25zUG9zaXRpb24gPSBfcHJvcHMkaWNvbnNQb3NpdGlvbiA9PT0gdm9pZCAwID8gJ2Fic29sdXRlJyA6IF9wcm9wcyRpY29uc1Bvc2l0aW9uLFxuICAgIGNsZWFyID0gcHJvcHMuY2xlYXIsXG4gICAgaXNEcm9wZG93biA9IHByb3BzLmlzRHJvcGRvd24sXG4gICAgaXNMb2FkaW5nID0gcHJvcHMuaXNMb2FkaW5nLFxuICAgIGlzSW52YWxpZCA9IHByb3BzLmlzSW52YWxpZCxcbiAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICByZWFkT25seSA9IHByb3BzLnJlYWRPbmx5LFxuICAgIGNvbXByZXNzZWQgPSBwcm9wcy5jb21wcmVzc2VkLFxuICAgIHByZXBlbmQgPSBwcm9wcy5wcmVwZW5kLFxuICAgIGFwcGVuZCA9IHByb3BzLmFwcGVuZCxcbiAgICBpc0RlbGltaXRlZCA9IHByb3BzLmlzRGVsaW1pdGVkLFxuICAgIHdyYXBwZXJQcm9wcyA9IHByb3BzLndyYXBwZXJQcm9wcyxcbiAgICBfcHJvcHMkZnVsbFdpZHRoID0gcHJvcHMuZnVsbFdpZHRoLFxuICAgIGZ1bGxXaWR0aCA9IF9wcm9wcyRmdWxsV2lkdGggPT09IHZvaWQgMCA/IGRlZmF1bHRGdWxsV2lkdGggOiBfcHJvcHMkZnVsbFdpZHRoLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCk7XG4gIHZhciBpc0dyb3VwID0gISEocHJlcGVuZCB8fCBhcHBlbmQgfHwgaXNEZWxpbWl0ZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Db250cm9sTGF5b3V0Jywge1xuICAgICdldWlGb3JtQ29udHJvbExheW91dC0tZ3JvdXAnOiBpc0dyb3VwICYmICFpc0RlbGltaXRlZCxcbiAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtaXNEaXNhYmxlZCc6IGlzRGlzYWJsZWQsXG4gICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LXJlYWRPbmx5JzogcmVhZE9ubHlcbiAgfSwgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUZvcm1Db250cm9sTGF5b3V0U3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRm9ybUNvbnRyb2xMYXlvdXQsIGNvbXByZXNzZWQgPyBzdHlsZXMuY29tcHJlc3NlZCA6IHN0eWxlcy51bmNvbXByZXNzZWQsIGZ1bGxXaWR0aCA/IHN0eWxlcy5mdWxsV2lkdGggOiBzdHlsZXMuZm9ybVdpZHRoXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGlzR3JvdXAgPyBbc3R5bGVzLmdyb3VwLmdyb3VwLCBjb21wcmVzc2VkID8gc3R5bGVzLmdyb3VwLmNvbXByZXNzZWQgOiBzdHlsZXMuZ3JvdXAudW5jb21wcmVzc2VkXSA6IFtdKSk7XG4gIHZhciBjaGlsZHJlbldyYXBwZXJTdHlsZXMgPSBbc3R5bGVzLmNoaWxkcmVuLmV1aUZvcm1Db250cm9sTGF5b3V0X19jaGlsZHJlbldyYXBwZXIsIGlzR3JvdXAgJiYgc3R5bGVzLmNoaWxkcmVuLmluR3JvdXAsIGlzR3JvdXAgJiYgIWFwcGVuZCAmJiBzdHlsZXMuY2hpbGRyZW4ucHJlcGVuZE9ubHksIGlzR3JvdXAgJiYgIXByZXBlbmQgJiYgc3R5bGVzLmNoaWxkcmVuLmFwcGVuZE9ubHksIHdyYXBwZXJQcm9wcyA9PT0gbnVsbCB8fCB3cmFwcGVyUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdyYXBwZXJQcm9wcy5jc3NdO1xuICB2YXIgaGFzRHJvcGRvd25JY29uID0gIXJlYWRPbmx5ICYmICFpc0Rpc2FibGVkICYmIGlzRHJvcGRvd247XG4gIHZhciBoYXNSaWdodEljb24gPSBpc1JpZ2h0U2lkZUljb24oaWNvbik7XG4gIHZhciBoYXNMZWZ0SWNvbiA9IGljb24gJiYgIWhhc1JpZ2h0SWNvbjtcbiAgdmFyIGhhc1JpZ2h0SWNvbnMgPSBoYXNSaWdodEljb24gfHwgY2xlYXIgfHwgaXNMb2FkaW5nIHx8IGlzSW52YWxpZCB8fCBoYXNEcm9wZG93bkljb247XG4gIHZhciBpY29uQWZmb3JkYW5jZVN0eWxlcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChpY29uc1Bvc2l0aW9uID09PSAnc3RhdGljJykgcmV0dXJuOyAvLyBTdGF0aWMgaWNvbnMgZG9uJ3QgbmVlZCBwYWRkaW5nIGFmZm9yZGFuY2VcblxuICAgIHJldHVybiBnZXRJY29uQWZmb3JkYW5jZVN0eWxlcyh7XG4gICAgICBpY29uOiBpY29uLFxuICAgICAgY2xlYXI6IGNsZWFyLFxuICAgICAgaXNJbnZhbGlkOiBpc0ludmFsaWQsXG4gICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgIGlzRHJvcGRvd246IGhhc0Ryb3Bkb3duSWNvblxuICAgIH0pO1xuICB9LCBbaWNvbnNQb3NpdGlvbiwgaWNvbiwgY2xlYXIsIGlzSW52YWxpZCwgaXNMb2FkaW5nLCBoYXNEcm9wZG93bkljb25dKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dFNpZGVOb2Rlcywge1xuICAgIHNpZGU6IFwicHJlcGVuZFwiLFxuICAgIG5vZGVzOiBwcmVwZW5kLFxuICAgIGlucHV0SWQ6IGlucHV0SWQsXG4gICAgY29tcHJlc3NlZDogY29tcHJlc3NlZFxuICB9KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgd3JhcHBlclByb3BzLCB7XG4gICAgY3NzOiBjaGlsZHJlbldyYXBwZXJTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlGb3JtQ29udHJvbExheW91dF9fY2hpbGRyZW5XcmFwcGVyJywgd3JhcHBlclByb3BzID09PSBudWxsIHx8IHdyYXBwZXJQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd3JhcHBlclByb3BzLmNsYXNzTmFtZSksXG4gICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgaWNvbkFmZm9yZGFuY2VTdHlsZXMpLCB3cmFwcGVyUHJvcHMgPT09IG51bGwgfHwgd3JhcHBlclByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3cmFwcGVyUHJvcHMuc3R5bGUpXG4gIH0pLCBoYXNMZWZ0SWNvbiAmJiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMsIHtcbiAgICBzaWRlOiBcImxlZnRcIixcbiAgICBpY29uOiBpY29uLFxuICAgIGljb25zUG9zaXRpb246IGljb25zUG9zaXRpb24sXG4gICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkXG4gIH0pLCBjaGlsZHJlbiwgaGFzUmlnaHRJY29ucyAmJiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMsIHtcbiAgICBzaWRlOiBcInJpZ2h0XCIsXG4gICAgaWNvbjogaGFzUmlnaHRJY29uID8gaWNvbiA6IHVuZGVmaW5lZCxcbiAgICBpY29uc1Bvc2l0aW9uOiBpY29uc1Bvc2l0aW9uLFxuICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgY2xlYXI6IGNsZWFyLFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgIGlzSW52YWxpZDogaXNJbnZhbGlkLFxuICAgIGlzRHJvcGRvd246IGhhc0Ryb3Bkb3duSWNvbixcbiAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkXG4gIH0pKSwgX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dFNpZGVOb2Rlcywge1xuICAgIHNpZGU6IFwiYXBwZW5kXCIsXG4gICAgbm9kZXM6IGFwcGVuZCxcbiAgICBpbnB1dElkOiBpbnB1dElkLFxuICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWRcbiAgfSkpO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBzdWJjb21wb25lbnQgdXRpbGl0eSBmb3IgcHJlcGVuZC9hcHBlbmQgbm9kZXNcbiAqL1xuRXVpRm9ybUNvbnRyb2xMYXlvdXQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYmVmb3JlIGNoaWxkcmVuLlxuICAgICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAgICovXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYWZ0ZXIgY2hpbGRyZW4uXG4gICAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgICBzaWRlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICAgIHJlZjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSlcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIERldGVybWluZXMgd2hldGhlciBpY29ucyBhcmUgYWJzb2x1dGVseSBvciBzdGF0aWNhbGx5IHJlbmRlcmVkLiBGb3Igc2luZ2xlIGlucHV0cyxcbiAgICAgICAqIGFic29sdXRlIHJlbmRlcmluZyBpcyB0eXBpY2FsbHkgcHJlZmVycmVkLlxuICAgICAgICogQGRlZmF1bHQgYWJzb2x1dGVcbiAgICAgICAqL1xuICBpY29uc1Bvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYWJzb2x1dGVcIiwgXCJzdGF0aWNcIl0pLFxuICBjbGVhcjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pXG4gIH0pLFxuICAvKipcbiAgICAgICAqIEV4cGFuZCB0byBmaWxsIDEwMCUgb2YgdGhlIHBhcmVudC5cbiAgICAgICAqIERlZmF1bHRzIHRvIGBmdWxsV2lkdGhgIHByb3Agb2YgYDxFdWlGb3JtPmAuXG4gICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIENvbnRyb2xzIHRoZSBhZGRpbmcgb2YgYW5kIHZpc2liaWxpdHkgb2YgYSBkb3duIGFycm93IGljb25cbiAgICAgICAqL1xuICBpc0Ryb3Bkb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBDb25uZWN0cyB0aGUgcHJlcGVuZCBhbmQgYXBwZW5kIGxhYmVscyB0byB0aGUgaW5wdXRcbiAgICAgICAqL1xuICBpbnB1dElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgICAqIEFsbG93cyBwYXNzaW5nIG9wdGlvbmFsIGFkZGl0aW9uYWwgcHJvcHMgdG8gYC5ldWlGb3JtQ29udHJvbExheW91dF9fY2hpbGRyZW5XcmFwcGVyYFxuICAgICAgICovXG4gIHdyYXBwZXJQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgLy8gSW50ZXJuYWwgcHJvcCB1c2VkIGJ5IEV1aUZvcm1Db250cm9sTGF5b3V0RGVsaW1pdGVkXG4gIGlzRGVsaW1pdGVkOiBQcm9wVHlwZXMuYm9vbFxufTtcbnZhciBFdWlGb3JtQ29udHJvbExheW91dFNpZGVOb2RlcyA9IGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVzKF9yZWYpIHtcbiAgdmFyIHNpZGUgPSBfcmVmLnNpZGUsXG4gICAgbm9kZXMgPSBfcmVmLm5vZGVzLFxuICAgIGlucHV0SWQgPSBfcmVmLmlucHV0SWQsXG4gICAgY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZDtcbiAgdmFyIGNsYXNzTmFtZSA9IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRfX1wiLmNvbmNhdChzaWRlKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlGb3JtQ29udHJvbExheW91dF9fc2lkZSwgc3R5bGVzW3NpZGVdLCBjb21wcmVzc2VkID8gc3R5bGVzLmNvbXByZXNzZWQgOiBzdHlsZXMudW5jb21wcmVzc2VkXTtcbiAgaWYgKCFub2RlcykgcmV0dXJuIG51bGw7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCBSZWFjdC5DaGlsZHJlbi5tYXAobm9kZXMsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBub2RlID09PSAnc3RyaW5nJyA/IF9fX0Vtb3Rpb25KU1goRXVpRm9ybUxhYmVsLCB7XG4gICAgICBodG1sRm9yOiBpbnB1dElkXG4gICAgfSwgbm9kZSkgOiBub2RlO1xuICB9KSk7XG59O1xuRXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZXMucHJvcFR5cGVzID0ge1xuICBzaWRlOiBQcm9wVHlwZXMub25lT2YoW1wiYXBwZW5kXCIsIFwicHJlcGVuZFwiXSkuaXNSZXF1aXJlZCxcbiAgbm9kZXM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgLy8gRm9yIHNvbWUgYml6YXJyZSByZWFzb24gaWYgeW91IG1ha2UgdGhpcyB0aGUgYGNoaWxkcmVuYCBwcm9wIGluc3RlYWQsIFJlYWN0IGRvZXNuJ3QgcHJvcGVybHkgb3ZlcnJpZGUgY2xvbmVkIGtleXMgOnxcbiAgaW5wdXRJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0eXBlXCIsIFwiaXNGb2N1c2VkXCIsIFwiaXNJbnZhbGlkXCIsIFwiaXNEaXNhYmxlZFwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUZvcm1MYWJlbFN0eWxlcyB9IGZyb20gJy4vZm9ybV9sYWJlbC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUxhYmVsID0gZnVuY3Rpb24gRXVpRm9ybUxhYmVsKF9yZWYpIHtcbiAgdmFyIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAnbGFiZWwnIDogX3JlZiR0eXBlLFxuICAgIGlzRm9jdXNlZCA9IF9yZWYuaXNGb2N1c2VkLFxuICAgIGlzSW52YWxpZCA9IF9yZWYuaXNJbnZhbGlkLFxuICAgIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUZvcm1MYWJlbFN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUZvcm1MYWJlbCwgIWlzRGlzYWJsZWQgJiYgc3R5bGVzLm5vdERpc2FibGVkLCBpc0ludmFsaWQgJiYgc3R5bGVzLmludmFsaWQsIGlzRm9jdXNlZCAmJiBzdHlsZXMuZm9jdXNlZF07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUxhYmVsJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aUZvcm1MYWJlbC1pc0ZvY3VzZWQnOiBpc0ZvY3VzZWQsXG4gICAgJ2V1aUZvcm1MYWJlbC1pc0ludmFsaWQnOiBpc0ludmFsaWQsXG4gICAgJ2V1aUZvcm1MYWJlbC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZFxuICB9KTtcbiAgaWYgKHR5cGUgPT09ICdsZWdlbmQnKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsZWdlbmRcIiwgX2V4dGVuZHMoe1xuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGFiZWxcIiwgX2V4dGVuZHMoe1xuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpRm9ybUxhYmVsLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogRGVmYXVsdCB0eXBlIGlzIGEgYGxhYmVsYCBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBgbGVnZW5kYFxuICAgICAqIGlmIHVzaW5nIGluc2lkZSBhIGBmaWVsZHNldGAuXG4gICAgICovXG4gIC8qKlxuICAgICAqIERlZmF1bHQgdHlwZSBpcyBhIGBsYWJlbGAgYnV0IGNhbiBiZSBjaGFuZ2VkIHRvIGEgYGxlZ2VuZGBcbiAgICAgKiBpZiB1c2luZyBpbnNpZGUgYSBgZmllbGRzZXRgLlxuICAgICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wibGFiZWxcIl0pLCBQcm9wVHlwZXMub25lT2YoW1wibGFiZWxcIiwgXCJsZWdlbmRcIl0pXSksIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJsZWdlbmRcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiLCBcImxlZ2VuZFwiXSldKV0pLFxuICBpc0ZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBDaGFuZ2VzIGBjdXJzb3JgIHRvIGBkZWZhdWx0YC5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogQ2hhbmdlcyBgY3Vyc29yYCB0byBgZGVmYXVsdGAuXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcInJlZlwiLCBcInNpZGVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBSZW5kZXJXaXRoRXVpU3R5bGVzTWVtb2l6ZXIgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uLy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9jbGVhcl9idXR0b24nO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2N1c3RvbV9pY29uJztcbmltcG9ydCB7IGV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnNTdHlsZXMgfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfaWNvbnMuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIElDT05fU0lERVMgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbmV4cG9ydCB2YXIgaXNJY29uU2hhcGUgPSBmdW5jdGlvbiBpc0ljb25TaGFwZShpY29uKSB7XG4gIHJldHVybiAhIWljb24gJiYgaWNvbi5oYXNPd25Qcm9wZXJ0eSgndHlwZScpO1xufTtcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dEljb25zKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGb3JtQ29udHJvbExheW91dEljb25zKTtcbiAgICByZXR1cm4gX2NhbGxTdXBlcih0aGlzLCBFdWlGb3JtQ29udHJvbExheW91dEljb25zLCBhcmd1bWVudHMpO1xuICB9XG4gIF9pbmhlcml0cyhFdWlGb3JtQ29udHJvbExheW91dEljb25zLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlGb3JtQ29udHJvbExheW91dEljb25zLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkc2lkZSA9IF90aGlzJHByb3BzLnNpZGUsXG4gICAgICAgIHNpZGUgPSBfdGhpcyRwcm9wcyRzaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfdGhpcyRwcm9wcyRzaWRlLFxuICAgICAgICBfdGhpcyRwcm9wcyRpY29uc1Bvc2kgPSBfdGhpcyRwcm9wcy5pY29uc1Bvc2l0aW9uLFxuICAgICAgICBpY29uc1Bvc2l0aW9uID0gX3RoaXMkcHJvcHMkaWNvbnNQb3NpID09PSB2b2lkIDAgPyAnYWJzb2x1dGUnIDogX3RoaXMkcHJvcHMkaWNvbnNQb3NpLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMuY29tcHJlc3NlZCxcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzLmlzRGlzYWJsZWQ7XG4gICAgICB2YXIgY3VzdG9tSWNvbiA9IHRoaXMucmVuZGVyQ3VzdG9tSWNvbigpO1xuICAgICAgdmFyIGxvYWRpbmdTcGlubmVyID0gdGhpcy5yZW5kZXJMb2FkaW5nU3Bpbm5lcigpO1xuICAgICAgdmFyIGNsZWFyQnV0dG9uID0gdGhpcy5yZW5kZXJDbGVhckJ1dHRvbigpO1xuICAgICAgdmFyIGludmFsaWRJY29uID0gdGhpcy5yZW5kZXJJbnZhbGlkSWNvbigpO1xuICAgICAgdmFyIGRyb3Bkb3duSWNvbiA9IHRoaXMucmVuZGVyRHJvcGRvd25JY29uKCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZW5kZXJXaXRoRXVpU3R5bGVzTWVtb2l6ZXIsIG51bGwsIGZ1bmN0aW9uIChzdHlsZXNNZW1vaXplcikge1xuICAgICAgICB2YXIgc3R5bGVzID0gc3R5bGVzTWVtb2l6ZXIoZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29uc1N0eWxlcyk7XG4gICAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMsIGNvbXByZXNzZWQgPyBzdHlsZXMuY29tcHJlc3NlZCA6IHN0eWxlcy51bmNvbXByZXNzZWRdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoaWNvbnNQb3NpdGlvbiA9PT0gJ2Fic29sdXRlJyA/IFtzdHlsZXMucG9zaXRpb24uYWJzb2x1dGUuYWJzb2x1dGUsIGNvbXByZXNzZWQgPyBzdHlsZXMucG9zaXRpb24uYWJzb2x1dGUuY29tcHJlc3NlZFtzaWRlXSA6IHN0eWxlcy5wb3NpdGlvbi5hYnNvbHV0ZS51bmNvbXByZXNzZWRbc2lkZV1dIDogW3N0eWxlcy5wb3NpdGlvbi5zdGF0aWMuc3RhdGljLCBjb21wcmVzc2VkID8gc3R5bGVzLnBvc2l0aW9uLnN0YXRpYy5jb21wcmVzc2VkIDogc3R5bGVzLnBvc2l0aW9uLnN0YXRpYy51bmNvbXByZXNzZWRdKSwgW2lzRGlzYWJsZWQgJiYgc3R5bGVzLmRpc2FibGVkXSk7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29uc1wiXG4gICAgICAgIH0sIGNsZWFyQnV0dG9uLCBsb2FkaW5nU3Bpbm5lciwgaW52YWxpZEljb24sIGN1c3RvbUljb24sIGRyb3Bkb3duSWNvbik7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyQ3VzdG9tSWNvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJDdXN0b21JY29uKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGljb24gPSBfdGhpcyRwcm9wczIuaWNvbixcbiAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMi5jb21wcmVzc2VkLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMyLmlzRGlzYWJsZWQ7XG4gICAgICBpZiAoIWljb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgaWNvbiB0byBhbiBvYmplY3QgaWYgaXQncyBhIHN0cmluZy5cbiAgICAgIHZhciBpY29uUHJvcHMgPSBpc0ljb25TaGFwZShpY29uKSA/IGljb24gOiB7XG4gICAgICAgIHR5cGU6IGljb25cbiAgICAgIH07XG4gICAgICB2YXIgaWNvblJlZiA9IGljb25Qcm9wcy5yZWYsXG4gICAgICAgIHNpZGUgPSBpY29uUHJvcHMuc2lkZSxcbiAgICAgICAgaWNvblJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoaWNvblByb3BzLCBfZXhjbHVkZWQpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLCBfZXh0ZW5kcyh7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbScsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBpY29uUmVmOiBpY29uUmVmXG4gICAgICB9LCBpY29uUmVzdCkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJEcm9wZG93bkljb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyRHJvcGRvd25JY29uKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzRHJvcGRvd24gPSBfdGhpcyRwcm9wczMuaXNEcm9wZG93bixcbiAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMy5jb21wcmVzc2VkLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMzLmlzRGlzYWJsZWQ7XG4gICAgICBpZiAoIWlzRHJvcGRvd24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24sIHtcbiAgICAgICAgc2l6ZTogY29tcHJlc3NlZCA/ICdzJyA6ICdtJyxcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIHR5cGU6IFwiYXJyb3dEb3duXCJcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJMb2FkaW5nU3Bpbm5lclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJMb2FkaW5nU3Bpbm5lcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczQuaXNMb2FkaW5nLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHM0LmNvbXByZXNzZWQ7XG4gICAgICBpZiAoIWlzTG9hZGluZykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbSdcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDbGVhckJ1dHRvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJDbGVhckJ1dHRvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICBjbGVhciA9IF90aGlzJHByb3BzNS5jbGVhcixcbiAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzNS5jb21wcmVzc2VkLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM1LmlzRGlzYWJsZWQ7XG4gICAgICBpZiAoIWNsZWFyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiwgX2V4dGVuZHMoe1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nLFxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgfSwgY2xlYXIpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySW52YWxpZEljb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySW52YWxpZEljb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaXNJbnZhbGlkID0gX3RoaXMkcHJvcHM2LmlzSW52YWxpZCxcbiAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzNi5jb21wcmVzc2VkO1xuICAgICAgaWYgKCFpc0ludmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbScsXG4gICAgICAgIGNvbG9yOiBcImRhbmdlclwiLFxuICAgICAgICB0eXBlOiBcIndhcm5pbmdcIlxuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5FdWlGb3JtQ29udHJvbExheW91dEljb25zLnByb3BUeXBlcyA9IHtcbiAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgICBzaWRlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICAgIHJlZjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSlcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICBzaWRlOiBQcm9wVHlwZXMuYW55LFxuICBpY29uc1Bvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYWJzb2x1dGVcIiwgXCJzdGF0aWNcIl0pLFxuICBjbGVhcjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pXG4gIH0pLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0Ryb3Bkb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwib25DbGlja1wiLCBcInNpemVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgdXNlRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvblN0eWxlcyB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9jbGVhcl9idXR0b24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24gPSBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbicsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uU3R5bGVzKTtcbiAgdmFyIGljb25TdHlsZXMgPSBbc3R5bGVzLmV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b25fX2ljb24sIHN0eWxlcy5zaXplW3NpemVdXTtcbiAgdmFyIGFyaWFMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24ubGFiZWwnLCAnQ2xlYXIgaW5wdXQnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgY3NzOiBzdHlsZXMuZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICBjc3M6IGljb25TdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b25fX2ljb25cIixcbiAgICB0eXBlOiBcImNyb3NzXCIsXG4gICAgc2l6ZTogc2l6ZVxuICB9KSk7XG59O1xuRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgdmFyIEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b25TdHlsZXMgPSBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uU3R5bGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZTtcbiAgdmFyIGJhY2tncm91bmRDb2xvciA9IGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gZXVpVGhlbWUuY29sb3JzLmRhcmtTaGFkZSA6IGV1aVRoZW1lLmNvbG9ycy5tZWRpdW1TaGFkZTtcbiAgcmV0dXJuIHtcbiAgICBldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uOiAvKiNfX1BVUkVfXyovY3NzKFwicG9pbnRlci1ldmVudHM6YWxsO2JhY2tncm91bmQtY29sb3I6XCIsIGJhY2tncm91bmRDb2xvciwgXCI7Ym9yZGVyLXJhZGl1czo1MCU7bGluZS1oZWlnaHQ6MDsmOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWQsIFwiO307bGFiZWw6ZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbjtcIiksXG4gICAgZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbl9faWNvbjogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTpzY2FsZSgwLjUpO2ZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLCBcIjtzdHJva2U6XCIsIGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLCBcIjs7bGFiZWw6ZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbl9faWNvbjtcIiksXG4gICAgc2l6ZToge1xuICAgICAgczogLyojX19QVVJFX18qL2NzcyhcInN0cm9rZS13aWR0aDpcIiwgZXVpVGhlbWUuc2l6ZS54cywgXCI7O2xhYmVsOnM7XCIpLFxuICAgICAgbTogLyojX19QVVJFX18qL2NzcyhcInN0cm9rZS13aWR0aDpcIiwgZXVpVGhlbWUuc2l6ZS54eHMsIFwiOztsYWJlbDptO1wiKVxuICAgIH1cbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJvbkNsaWNrXCIsIFwidHlwZVwiLCBcImljb25SZWZcIiwgXCJzaXplXCIsIFwiY29sb3JcIiwgXCJkaXNhYmxlZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uID0gZnVuY3Rpb24gRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgdHlwZSA9IF9yZWYudHlwZSxcbiAgICBpY29uUmVmID0gX3JlZi5pY29uUmVmLFxuICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uJywgY2xhc3NOYW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLCBvbkNsaWNrID8gc3R5bGVzLmNsaWNrYWJsZSA6IHN0eWxlcy51bmNsaWNrYWJsZV07XG4gIGlmIChvbkNsaWNrKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIHJlZjogaWNvblJlZlxuICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb25fX2ljb25cIixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICBzaXplOiBzaXplLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGNvbG9yOiBjb2xvclxuICAgIH0pKTtcbiAgfVxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICByZWY6IGljb25SZWZcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb25fX2ljb25cIixcbiAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgIHNpemU6IHNpemUsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb2xvcjogY29sb3JcbiAgfSkpO1xufTtcbkV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbi5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIGljb25SZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG59O1xudmFyIHN0eWxlcyA9IHtcbiAgZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgbmFtZTogXCI3ZDFtYTgtZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uXCIsXG4gICAgc3R5bGVzOiBcImZvbnQtc2l6ZTowO2xhYmVsOmV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbjtcIlxuICB9IDoge1xuICAgIG5hbWU6IFwiN2QxbWE4LWV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvblwiLFxuICAgIHN0eWxlczogXCJmb250LXNpemU6MDtsYWJlbDpldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb247XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH0sXG4gIC8vIFNraXAgY3NzYGAgaGVyZSB0byBhdm9pZCBnZW5lcmF0aW5nIGFuIEVtb3Rpb24gY2xhc3NOYW1lXG4gIHVuY2xpY2thYmxlOiBcIlxcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIFwiLFxuICBjbGlja2FibGU6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICBuYW1lOiBcIjFqOHdneGotY2xpY2thYmxlXCIsXG4gICAgc3R5bGVzOiBcInBvaW50ZXItZXZlbnRzOmFsbDsmOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjpjdXJyZW50Q29sb3I7fTtsYWJlbDpjbGlja2FibGU7XCJcbiAgfSA6IHtcbiAgICBuYW1lOiBcIjFqOHdneGotY2xpY2thYmxlXCIsXG4gICAgc3R5bGVzOiBcInBvaW50ZXItZXZlbnRzOmFsbDsmOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjpjdXJyZW50Q29sb3I7fTtsYWJlbDpjbGlja2FibGU7XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH1cbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlGb3JtVmFyaWFibGVzIH0gZnJvbSAnLi4vZm9ybS5zdHlsZXMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiM2xmOWM0LWV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnNcIixcbiAgc3R5bGVzOiBcInBvaW50ZXItZXZlbnRzOm5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtsYWJlbDpldWlGb3JtQ29udHJvbExheW91dEljb25zO1wiXG59IDoge1xuICBuYW1lOiBcIjNsZjljNC1ldWlGb3JtQ29udHJvbExheW91dEljb25zXCIsXG4gIHN0eWxlczogXCJwb2ludGVyLWV2ZW50czpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bGFiZWw6ZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucztcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbExheW91dEljb25zU3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29uc1N0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIF9ldWlGb3JtVmFyaWFibGVzID0gZXVpRm9ybVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIGNvbnRyb2xQYWRkaW5nID0gX2V1aUZvcm1WYXJpYWJsZXMuY29udHJvbFBhZGRpbmcsXG4gICAgY29udHJvbENvbXByZXNzZWRQYWRkaW5nID0gX2V1aUZvcm1WYXJpYWJsZXMuY29udHJvbENvbXByZXNzZWRQYWRkaW5nLFxuICAgIGNvbnRyb2xEaXNhYmxlZENvbG9yID0gX2V1aUZvcm1WYXJpYWJsZXMuY29udHJvbERpc2FibGVkQ29sb3I7XG4gIHJldHVybiB7XG4gICAgZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29uczogX3JlZixcbiAgICB1bmNvbXByZXNzZWQ6IFwiXFxuICAgICAgZ2FwOiBcIi5jb25jYXQobWF0aFdpdGhVbml0cyhjb250cm9sUGFkZGluZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4IC8gMjtcbiAgICB9KSwgXCI7XFxuICAgIFwiKSxcbiAgICBjb21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBtYXRoV2l0aFVuaXRzKGNvbnRyb2xDb21wcmVzc2VkUGFkZGluZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4IC8gMjtcbiAgICB9KSwgXCI7O2xhYmVsOmNvbXByZXNzZWQ7XCIpLFxuICAgIGRpc2FibGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOlwiLCBjb250cm9sRGlzYWJsZWRDb2xvciwgXCI7O2xhYmVsOmRpc2FibGVkO1wiKSxcbiAgICBwb3NpdGlvbjoge1xuICAgICAgYWJzb2x1dGU6IHtcbiAgICAgICAgYWJzb2x1dGU6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygndmVydGljYWwnLCAwKSwgXCI7O2xhYmVsOmFic29sdXRlO1wiKSxcbiAgICAgICAgdW5jb21wcmVzc2VkOiB7XG4gICAgICAgICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcInotaW5kZXg6MTtcIiwgbG9naWNhbENTUygnbGVmdCcsIGNvbnRyb2xQYWRkaW5nKSwgXCI7O2xhYmVsOmxlZnQ7XCIpLFxuICAgICAgICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3JpZ2h0JywgY29udHJvbFBhZGRpbmcpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXByZXNzZWQ6IHtcbiAgICAgICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwiei1pbmRleDoxO1wiLCBsb2dpY2FsQ1NTKCdsZWZ0JywgY29udHJvbENvbXByZXNzZWRQYWRkaW5nKSwgXCI7O2xhYmVsOmxlZnQ7XCIpLFxuICAgICAgICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3JpZ2h0JywgY29udHJvbENvbXByZXNzZWRQYWRkaW5nKSwgXCI7O2xhYmVsOnJpZ2h0O1wiKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3RhdGljOiB7XG4gICAgICAgIHN0YXRpYzogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnN0YXRpYztcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgJzEwMCUnKSwgXCIgYWxpZ24tc2VsZjpzdHJldGNoO2ZsZXgtZ3JvdzowO1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCAnMTAwJScpLCBcIjs7bGFiZWw6c3RhdGljO1wiKSxcbiAgICAgICAgdW5jb21wcmVzc2VkOiBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBjb250cm9sUGFkZGluZyksXG4gICAgICAgIGNvbXByZXNzZWQ6IGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGNvbnRyb2xDb21wcmVzc2VkUGFkZGluZylcbiAgICAgIH1cbiAgICB9XG4gIH07XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGlzSWNvblNoYXBlIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2ljb25zJztcbmV4cG9ydCB2YXIgaXNSaWdodFNpZGVJY29uID0gZnVuY3Rpb24gaXNSaWdodFNpZGVJY29uKGljb24pIHtcbiAgcmV0dXJuICEhaWNvbiAmJiBpc0ljb25TaGFwZShpY29uKSAmJiBpY29uLnNpZGUgPT09ICdyaWdodCc7XG59O1xuZXhwb3J0IHZhciBnZXRJY29uQWZmb3JkYW5jZVN0eWxlcyA9IGZ1bmN0aW9uIGdldEljb25BZmZvcmRhbmNlU3R5bGVzKF9yZWYpIHtcbiAgdmFyIGljb24gPSBfcmVmLmljb24sXG4gICAgY2xlYXIgPSBfcmVmLmNsZWFyLFxuICAgIGlzTG9hZGluZyA9IF9yZWYuaXNMb2FkaW5nLFxuICAgIGlzSW52YWxpZCA9IF9yZWYuaXNJbnZhbGlkLFxuICAgIGlzRHJvcGRvd24gPSBfcmVmLmlzRHJvcGRvd247XG4gIHZhciBjc3NWYXJpYWJsZXMgPSB7XG4gICAgJy0tZXVpRm9ybUNvbnRyb2xMZWZ0SWNvbnNDb3VudCc6IDAsXG4gICAgJy0tZXVpRm9ybUNvbnRyb2xSaWdodEljb25zQ291bnQnOiAwXG4gIH07XG4gIGlmIChpY29uKSB7XG4gICAgaWYgKGlzUmlnaHRTaWRlSWNvbihpY29uKSkge1xuICAgICAgY3NzVmFyaWFibGVzWyctLWV1aUZvcm1Db250cm9sUmlnaHRJY29uc0NvdW50J10rKztcbiAgICB9IGVsc2Uge1xuICAgICAgY3NzVmFyaWFibGVzWyctLWV1aUZvcm1Db250cm9sTGVmdEljb25zQ291bnQnXSsrO1xuICAgIH1cbiAgfVxuICBpZiAoY2xlYXIpIGNzc1ZhcmlhYmxlc1snLS1ldWlGb3JtQ29udHJvbFJpZ2h0SWNvbnNDb3VudCddKys7XG4gIGlmIChpc0xvYWRpbmcpIGNzc1ZhcmlhYmxlc1snLS1ldWlGb3JtQ29udHJvbFJpZ2h0SWNvbnNDb3VudCddKys7XG4gIGlmIChpc0ludmFsaWQpIGNzc1ZhcmlhYmxlc1snLS1ldWlGb3JtQ29udHJvbFJpZ2h0SWNvbnNDb3VudCddKys7XG4gIGlmIChpc0Ryb3Bkb3duKSBjc3NWYXJpYWJsZXNbJy0tZXVpRm9ybUNvbnRyb2xSaWdodEljb25zQ291bnQnXSsrO1xuICB2YXIgZmlsdGVyZWQgPSBPYmplY3QuZW50cmllcyhjc3NWYXJpYWJsZXMpLmZpbHRlcihmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICB2YXIgX3JlZjMgPSBfc2xpY2VkVG9BcnJheShfcmVmMiwgMiksXG4gICAgICBjb3VudCA9IF9yZWYzWzFdO1xuICAgIHJldHVybiBjb3VudCA+IDA7XG4gIH0pO1xuICByZXR1cm4gZmlsdGVyZWQubGVuZ3RoID8gT2JqZWN0LmZyb21FbnRyaWVzKGZpbHRlcmVkKSA6IHVuZGVmaW5lZDtcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aVRleHRUcnVuY2F0ZSwgbG9naWNhbENTUywgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aUZvcm1WYXJpYWJsZXMgfSBmcm9tICcuLi9mb3JtLnN0eWxlcyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxdzEwbjFtLWluR3JvdXBcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjtsYWJlbDppbkdyb3VwO1wiXG59IDoge1xuICBuYW1lOiBcIjF3MTBuMW0taW5Hcm91cFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO2xhYmVsOmluR3JvdXA7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxbGJmYTZtLWV1aUZvcm1Db250cm9sTGF5b3V0X19jaGlsZHJlbldyYXBwZXJcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO2xhYmVsOmV1aUZvcm1Db250cm9sTGF5b3V0X19jaGlsZHJlbldyYXBwZXI7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWxiZmE2bS1ldWlGb3JtQ29udHJvbExheW91dF9fY2hpbGRyZW5XcmFwcGVyXCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpyZWxhdGl2ZTtsYWJlbDpldWlGb3JtQ29udHJvbExheW91dF9fY2hpbGRyZW5XcmFwcGVyO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sTGF5b3V0U3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUNvbnRyb2xMYXlvdXRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIGZvcm0gPSBldWlGb3JtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHJldHVybiB7XG4gICAgZXVpRm9ybUNvbnRyb2xMYXlvdXQ6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpRm9ybUNvbnRyb2xMYXlvdXQ7XCIpLFxuICAgIC8vIFNraXAgdGhlIGNzc2BgIG9uIHRoZSBkZWZhdWx0IGhlaWdodCB0byBhdm9pZCBnZW5lcmF0aW5nIGEgY2xhc3NOYW1lXG4gICAgdW5jb21wcmVzc2VkOiBcIlxcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCBmb3JtLmNvbnRyb2xIZWlnaHQpLCBcIlxcbiAgICBcIiksXG4gICAgY29tcHJlc3NlZDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdoZWlnaHQnLCBmb3JtLmNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0KSwgXCI7O2xhYmVsOmNvbXByZXNzZWQ7XCIpLFxuICAgIC8vIFNraXAgdGhlIGNzc2BgIG9uIHRoZSBkZWZhdWx0IHdpZHRoIHRvIGF2b2lkIGdlbmVyYXRpbmcgYSBjbGFzc05hbWVcbiAgICBmb3JtV2lkdGg6IFwiXFxuICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsIGZvcm0ubWF4V2lkdGgpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIlxcbiAgICBcIiksXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpLFxuICAgIGdyb3VwOiB7XG4gICAgICBncm91cDogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpzdHJldGNoO2JvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiLCBmb3JtLmJvcmRlckNvbG9yLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBmb3JtLmJhY2tncm91bmRDb2xvciwgXCI7b3ZlcmZsb3c6aGlkZGVuOz4qe1wiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCAnMTAwJScpLCBcIjt9O2xhYmVsOmdyb3VwO1wiKSxcbiAgICAgIC8vIFNraXBwaW5nIGNzc2BgIHRvIGF2b2lkIHJlcGVhdGVkIGNvbXByZXNzZWQvdW5jb21wcmVzc2VkIGNsYXNzTmFtZXNcbiAgICAgIHVuY29tcHJlc3NlZDogXCJcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IFwiLmNvbmNhdChmb3JtLmNvbnRyb2xCb3JkZXJSYWRpdXMsIFwiO1xcbiAgICAgIFwiKSxcbiAgICAgIGNvbXByZXNzZWQ6IFwiXFxuICAgICAgICBib3JkZXItcmFkaXVzOiBcIi5jb25jYXQoZm9ybS5jb250cm9sQ29tcHJlc3NlZEJvcmRlclJhZGl1cywgXCI7XFxuICAgICAgXCIpXG4gICAgfSxcbiAgICBjaGlsZHJlbjoge1xuICAgICAgZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlcjogX3JlZjIsXG4gICAgICBpbkdyb3VwOiBfcmVmLFxuICAgICAgcHJlcGVuZE9ubHk6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMnLCAnaW5oZXJpdCcpLCBcIiBcIiwgbG9naWNhbENTUygnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnLCAnaW5oZXJpdCcpLCBcIjs7bGFiZWw6cHJlcGVuZE9ubHk7XCIpLFxuICAgICAgYXBwZW5kT25seTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdib3JkZXItdG9wLWxlZnQtcmFkaXVzJywgJ2luaGVyaXQnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMnLCAnaW5oZXJpdCcpLCBcIjs7bGFiZWw6YXBwZW5kT25seTtcIilcbiAgICB9XG4gIH07XG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbExheW91dFNpZGVOb2RlU3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgZm9ybSA9IGV1aUZvcm1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIHVuY29tcHJlc3NlZEhlaWdodCA9IG1hdGhXaXRoVW5pdHMoW2Zvcm0uY29udHJvbEhlaWdodCwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW5dLCBmdW5jdGlvbiAoeCwgeSkge1xuICAgIHJldHVybiB4IC0geSAqIDI7XG4gIH0pO1xuICB2YXIgY29tcHJlc3NlZEhlaWdodCA9IG1hdGhXaXRoVW5pdHMoW2Zvcm0uY29udHJvbENvbXByZXNzZWRIZWlnaHQsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluXSwgZnVuY3Rpb24gKHgsIHkpIHtcbiAgICByZXR1cm4geCAtIHkgKiAyO1xuICB9KTtcbiAgdmFyIGJ1dHRvbnMgPSAnKjppcyguZXVpQnV0dG9uLCAuZXVpQnV0dG9uRW1wdHksIC5ldWlCdXR0b25JY29uKSc7XG4gIHZhciB0ZXh0ID0gJyo6aXMoLmV1aUZvcm1MYWJlbCwgLmV1aVRleHQpJztcbiAgcmV0dXJuIHtcbiAgICBldWlGb3JtQ29udHJvbExheW91dF9fc2lkZTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdoZWlnaHQnLCAnMTAwJScpLCBcIiBcIiwgZXVpVGV4dFRydW5jYXRlKCc1MCUnKSwgXCIgZmxleC1zaHJpbms6MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDpcIiwgZXVpVGhlbWUuc2l6ZS54cywgXCI7YmFja2dyb3VuZC1jb2xvcjpcIiwgZm9ybS5hcHBlbmRQcmVwZW5kQmFja2dyb3VuZCwgXCI7XCIsIGJ1dHRvbnMsIFwie3RyYW5zZm9ybTpub25lIWltcG9ydGFudDsmOmZvY3VzLXZpc2libGV7b3V0bGluZS1vZmZzZXQ6LVwiLCBldWlUaGVtZS5mb2N1cy53aWR0aCwgXCI7fX1cIiwgdGV4dCwgXCJ7Y3Vyc29yOmRlZmF1bHQ7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7fSY6bm90KDpoYXMoPiBcIiwgYnV0dG9ucywgXCI6Zmlyc3QtY2hpbGQsID4gKjpmaXJzdC1jaGlsZCA+IFwiLCBidXR0b25zLCBcIikpe1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBldWlUaGVtZS5zaXplLnMpLCBcIjt9Jjpub3QoOmhhcyg+IFwiLCBidXR0b25zLCBcIjpsYXN0LWNoaWxkLCA+ICo6bGFzdC1jaGlsZCA+IFwiLCBidXR0b25zLCBcIikpe1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLXJpZ2h0JywgZXVpVGhlbWUuc2l6ZS5zKSwgXCI7fTtsYWJlbDpldWlGb3JtQ29udHJvbExheW91dF9fc2lkZTtcIiksXG4gICAgYXBwZW5kOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmFwcGVuZDtcIiksXG4gICAgcHJlcGVuZDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpwcmVwZW5kO1wiKSxcbiAgICB1bmNvbXByZXNzZWQ6IFwiXFxuICAgICAgXCIuY29uY2F0KHRleHQsIFwiIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiXFxuICAgICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdCh1bmNvbXByZXNzZWRIZWlnaHQsIFwiO1xcbiAgICAgIH1cXG5cXG4gICAgICBcIikuY29uY2F0KGJ1dHRvbnMsIFwiIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0JywgdW5jb21wcmVzc2VkSGVpZ2h0KSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgLmV1aUJ1dHRvbkljb24ge1xcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgZXVpVGhlbWUuc2l6ZS54bCksIFwiXFxuICAgICAgfVxcbiAgICBcIiksXG4gICAgY29tcHJlc3NlZDogLyojX19QVVJFX18qL2Nzcyh0ZXh0LCBcIntcIiwgbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS54eHMpLCBcIiBsaW5lLWhlaWdodDpcIiwgY29tcHJlc3NlZEhlaWdodCwgXCI7fVwiLCBidXR0b25zLCBcIntcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgY29tcHJlc3NlZEhlaWdodCksIFwiO30uZXVpQnV0dG9uSWNvbntmbGV4LXNocmluazowO1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsIGV1aVRoZW1lLnNpemUueGwpLCBcIjt9O2xhYmVsOmNvbXByZXNzZWQ7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wic3R5bGVzTWVtb2l6ZXJcIiwgXCJjbGFzc05hbWVcIiwgXCJpZFwiLCBcIm5hbWVcIiwgXCJwbGFjZWhvbGRlclwiLCBcImlzSW52YWxpZFwiLCBcImRpc2FibGVkXCIsIFwiZnVsbFdpZHRoXCIsIFwiaXNMb2FkaW5nXCIsIFwiaW5wdXRSZWZcIiwgXCJpbmNyZW1lbnRhbFwiLCBcImNvbXByZXNzZWRcIiwgXCJvblNlYXJjaFwiLCBcImlzQ2xlYXJhYmxlXCIsIFwiYXBwZW5kXCIsIFwicHJlcGVuZFwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXMsIHdpdGhFdWlTdHlsZXNNZW1vaXplciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEJyb3dzZXIgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9icm93c2VyJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0IH0gZnJvbSAnLi4vZm9ybV9jb250cm9sX2xheW91dCc7XG5pbXBvcnQgeyBFdWlWYWxpZGF0YWJsZUNvbnRyb2wgfSBmcm9tICcuLi92YWxpZGF0YWJsZV9jb250cm9sJztcbmltcG9ydCB7IEZvcm1Db250ZXh0IH0gZnJvbSAnLi4vZXVpX2Zvcm1fY29udGV4dCc7XG5pbXBvcnQgeyBldWlGaWVsZFNlYXJjaFN0eWxlcyB9IGZyb20gJy4vZmllbGRfc2VhcmNoLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGlzU2VhcmNoU3VwcG9ydGVkID0gZmFsc2U7XG5leHBvcnQgdmFyIEV1aUZpZWxkU2VhcmNoQ2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpRmllbGRTZWFyY2hDbGFzcygpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZpZWxkU2VhcmNoQ2xhc3MpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aUZpZWxkU2VhcmNoQ2xhc3MsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0YXRlXCIsIHtcbiAgICAgIHZhbHVlOiBfdGhpcy5wcm9wcy52YWx1ZSB8fCBTdHJpbmcoX3RoaXMucHJvcHMuZGVmYXVsdFZhbHVlIHx8ICcnKVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpbnB1dEVsZW1lbnRcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNsZWFudXBzXCIsIFtdKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25DbGVhclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBjbGVhciB0aGUgZmllbGQncyB2YWx1ZVxuXG4gICAgICAvLyAxLiBSZWFjdCBkb2Vzbid0IGxpc3RlbiBmb3IgYGNoYW5nZWAgZXZlbnRzLCBpbnN0ZWFkIGl0IG1hcHMgYGlucHV0YCBldmVudHMgdG8gYGNoYW5nZWBcbiAgICAgIC8vIDIuIFJlYWN0IG9ubHkgZmlyZXMgdGhlIG1hcHBlZCBgY2hhbmdlYCBldmVudCBpZiB0aGUgZWxlbWVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkXG4gICAgICAvLyAzLiBBbiBpbnB1dCdzIHZhbHVlIGlzLCBpbiBhZGRpdGlvbiB0byBvdGhlciBtZXRob2RzLCB0cmFja2VkIGJ5IGludGVyY2VwdGluZyBlbGVtZW50LnZhbHVlID0gJy4uLidcbiAgICAgIC8vXG4gICAgICAvLyBTbyB3ZSBoYXZlIHRvIGdvIGJlbG93IHRoZSBlbGVtZW50J3MgdmFsdWUgc2V0dGVyIHRvIGF2b2lkIFJlYWN0IGludGVyY2VwdGluZyBpdCxcbiAgICAgIC8vIG9ubHkgdGhlbiB3aWxsIFJlYWN0IHRyZWF0IHRoZSB2YWx1ZSBhcyBkaWZmZXJlbnQgYW5kIGZpcmUgaXRzIGBjaGFuZ2VgIGV2ZW50XG4gICAgICAvL1xuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjM4OTI1NDcvd2hhdC1pcy10aGUtYmVzdC13YXktdG8tdHJpZ2dlci1vbmNoYW5nZS1ldmVudC1pbi1yZWFjdC1qc1xuICAgICAgdmFyIG5hdGl2ZUlucHV0VmFsdWUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCAndmFsdWUnKTtcbiAgICAgIHZhciBuYXRpdmVJbnB1dFZhbHVlU2V0dGVyID0gbmF0aXZlSW5wdXRWYWx1ZSA/IG5hdGl2ZUlucHV0VmFsdWUuc2V0IDogdW5kZWZpbmVkO1xuICAgICAgaWYgKG5hdGl2ZUlucHV0VmFsdWVTZXR0ZXIpIHtcbiAgICAgICAgbmF0aXZlSW5wdXRWYWx1ZVNldHRlci5jYWxsKF90aGlzLmlucHV0RWxlbWVudCwgJycpO1xuICAgICAgfVxuXG4gICAgICAvLyBkaXNwYXRjaCBpbnB1dCBldmVudFxuICAgICAgdmFyIGV2ZW50ID0gbmV3IEV2ZW50KCdpbnB1dCcsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgaWYgKF90aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgICBfdGhpcy5pbnB1dEVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgIC8vIHNldCBmb2N1cyBvbiB0aGUgc2VhcmNoIGZpZWxkXG4gICAgICAgIF90aGlzLmlucHV0RWxlbWVudC5mb2N1cygpO1xuICAgICAgICBfdGhpcy5pbnB1dEVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScpKTtcbiAgICAgIH1cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9KTtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICBpbmNyZW1lbnRhbCA9IF90aGlzJHByb3BzLmluY3JlbWVudGFsLFxuICAgICAgICBvblNlYXJjaCA9IF90aGlzJHByb3BzLm9uU2VhcmNoO1xuICAgICAgaWYgKG9uU2VhcmNoICYmIGluY3JlbWVudGFsKSB7XG4gICAgICAgIG9uU2VhcmNoKCcnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2V0UmVmXCIsIGZ1bmN0aW9uIChpbnB1dEVsZW1lbnQpIHtcbiAgICAgIF90aGlzLmlucHV0RWxlbWVudCA9IGlucHV0RWxlbWVudDtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pbnB1dFJlZikge1xuICAgICAgICBfdGhpcy5wcm9wcy5pbnB1dFJlZihpbnB1dEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbktleVVwXCIsIGZ1bmN0aW9uIChldmVudCwgaW5jcmVtZW50YWwsIG9uU2VhcmNoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgIH0pO1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uS2V5VXApIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25LZXlVcChldmVudCk7XG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAob25TZWFyY2ggJiYgKGV2ZW50LmtleSAhPT0ga2V5cy5FTlRFUiAmJiBpbmNyZW1lbnRhbCB8fCBldmVudC5rZXkgPT09IGtleXMuRU5URVIgJiYgIWlzU2VhcmNoU3VwcG9ydGVkKSkge1xuICAgICAgICBvblNlYXJjaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpRmllbGRTZWFyY2hDbGFzcywgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpRmllbGRTZWFyY2hDbGFzcywgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQpIHJldHVybjtcbiAgICAgIGlzU2VhcmNoU3VwcG9ydGVkID0gQnJvd3Nlci5pc0V2ZW50U3VwcG9ydGVkKCdzZWFyY2gnLCB0aGlzLmlucHV0RWxlbWVudCk7XG4gICAgICBpZiAoaXNTZWFyY2hTdXBwb3J0ZWQpIHtcbiAgICAgICAgdmFyIG9uU2VhcmNoID0gZnVuY3Rpb24gb25TZWFyY2goZXZlbnQpIHtcbiAgICAgICAgICBpZiAoX3RoaXMyLnByb3BzLm9uU2VhcmNoKSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50IHx8ICFldmVudC50YXJnZXQgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgICAgICAgICAgX3RoaXMyLnByb3BzLm9uU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWFyY2gnLCBvblNlYXJjaCk7XG4gICAgICAgIHRoaXMuY2xlYW51cHMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFfdGhpczIuaW5wdXRFbGVtZW50KSByZXR1cm47XG4gICAgICAgICAgX3RoaXMyLmlucHV0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzZWFyY2gnLCBvblNlYXJjaCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gb25DaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQudmFsdWUgIT09IF90aGlzMi5zdGF0ZS52YWx1ZSkge1xuICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2YWx1ZTogZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKF90aGlzMi5wcm9wcy5vblNlYXJjaCkge1xuICAgICAgICAgICAgX3RoaXMyLnByb3BzLm9uU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25DaGFuZ2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuY2xlYW51cHMuZm9yRWFjaChmdW5jdGlvbiAoY2xlYW51cCkge1xuICAgICAgICByZXR1cm4gY2xlYW51cCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgIHZhciBfcmVmID0gdGhpcy5jb250ZXh0LFxuICAgICAgICBkZWZhdWx0RnVsbFdpZHRoID0gX3JlZi5kZWZhdWx0RnVsbFdpZHRoO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIHN0eWxlc01lbW9pemVyID0gX3RoaXMkcHJvcHMyLnN0eWxlc01lbW9pemVyLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBpZCA9IF90aGlzJHByb3BzMi5pZCxcbiAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzMi5uYW1lLFxuICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzMi5wbGFjZWhvbGRlcixcbiAgICAgICAgaXNJbnZhbGlkID0gX3RoaXMkcHJvcHMyLmlzSW52YWxpZCxcbiAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wczIuZGlzYWJsZWQsXG4gICAgICAgIF90aGlzJHByb3BzMiRmdWxsV2lkdCA9IF90aGlzJHByb3BzMi5mdWxsV2lkdGgsXG4gICAgICAgIGZ1bGxXaWR0aCA9IF90aGlzJHByb3BzMiRmdWxsV2lkdCA9PT0gdm9pZCAwID8gZGVmYXVsdEZ1bGxXaWR0aCA6IF90aGlzJHByb3BzMiRmdWxsV2lkdCxcbiAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMyLmlzTG9hZGluZyxcbiAgICAgICAgaW5wdXRSZWYgPSBfdGhpcyRwcm9wczIuaW5wdXRSZWYsXG4gICAgICAgIGluY3JlbWVudGFsID0gX3RoaXMkcHJvcHMyLmluY3JlbWVudGFsLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMyLmNvbXByZXNzZWQsXG4gICAgICAgIG9uU2VhcmNoID0gX3RoaXMkcHJvcHMyLm9uU2VhcmNoLFxuICAgICAgICBfaXNDbGVhcmFibGUgPSBfdGhpcyRwcm9wczIuaXNDbGVhcmFibGUsXG4gICAgICAgIGFwcGVuZCA9IF90aGlzJHByb3BzMi5hcHBlbmQsXG4gICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wczIucHJlcGVuZCxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnZhbHVlICE9PSAnc3RyaW5nJykgdmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuXG4gICAgICAvLyBTZXQgYWN0dWFsIHZhbHVlIG9mIGlzQ2xlYXJhYmxlIGlmIHZhbHVlIGV4aXN0cyBhcyB3ZWxsXG4gICAgICB2YXIgaXNDbGVhcmFibGUgPSBCb29sZWFuKF9pc0NsZWFyYWJsZSAmJiB2YWx1ZSAmJiAhcmVzdC5yZWFkT25seSAmJiAhZGlzYWJsZWQpO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGaWVsZFNlYXJjaCcsIHtcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLWlzTG9hZGluZyc6IGlzTG9hZGluZyxcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLWlzQ2xlYXJhYmxlJzogaXNDbGVhcmFibGUsXG4gICAgICAgICdldWlGaWVsZFNlYXJjaC1pc0ludmFsaWQnOiBpc0ludmFsaWRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgc3R5bGVzID0gc3R5bGVzTWVtb2l6ZXIoZXVpRmllbGRTZWFyY2hTdHlsZXMpO1xuICAgICAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRmllbGRTZWFyY2gsIGNvbXByZXNzZWQgPyBzdHlsZXMuY29tcHJlc3NlZCA6IHN0eWxlcy51bmNvbXByZXNzZWQsIGZ1bGxXaWR0aCA/IHN0eWxlcy5mdWxsV2lkdGggOiBzdHlsZXMuZm9ybVdpZHRoLCAocHJlcGVuZCB8fCBhcHBlbmQpICYmIHN0eWxlcy5pbkdyb3VwXTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpRmllbGRTZWFyY2guY2xlYXJTZWFyY2hCdXR0b25MYWJlbFwiLFxuICAgICAgICBkZWZhdWx0OiBcIkNsZWFyIHNlYXJjaCBpbnB1dFwiXG4gICAgICB9LCBmdW5jdGlvbiAoY2xlYXJTZWFyY2hCdXR0b25MYWJlbCkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dCwge1xuICAgICAgICAgIGljb246IFwic2VhcmNoXCIsXG4gICAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgICAgaXNJbnZhbGlkOiBpc0ludmFsaWQsXG4gICAgICAgICAgaXNEaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgY2xlYXI6IGlzQ2xlYXJhYmxlID8ge1xuICAgICAgICAgICAgb25DbGljazogX3RoaXMzLm9uQ2xlYXIsXG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6IGNsZWFyU2VhcmNoQnV0dG9uTGFiZWwsXG4gICAgICAgICAgICAnZGF0YS10ZXN0LXN1YmonOiAnY2xlYXJTZWFyY2hCdXR0b24nXG4gICAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgICAgICAgIGFwcGVuZDogYXBwZW5kLFxuICAgICAgICAgIHByZXBlbmQ6IHByZXBlbmRcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlWYWxpZGF0YWJsZUNvbnRyb2wsIHtcbiAgICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZFxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwiaW5wdXRcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIHR5cGU6IFwic2VhcmNoXCIsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgICBvbktleVVwOiBmdW5jdGlvbiBvbktleVVwKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczMub25LZXlVcChlLCBpbmNyZW1lbnRhbCwgb25TZWFyY2gpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgIHJlZjogX3RoaXMzLnNldFJlZlxuICAgICAgICB9LCByZXN0KSkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aUZpZWxkU2VhcmNoQ2xhc3MsIFwiY29udGV4dFR5cGVcIiwgRm9ybUNvbnRleHQpO1xuX2RlZmluZVByb3BlcnR5KEV1aUZpZWxkU2VhcmNoQ2xhc3MsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgaW5jcmVtZW50YWw6IGZhbHNlLFxuICBjb21wcmVzc2VkOiBmYWxzZSxcbiAgaXNDbGVhcmFibGU6IHRydWVcbn0pO1xuRXVpRmllbGRTZWFyY2hDbGFzcy5wcm9wVHlwZXMgPSB7XG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEV4cGFuZCB0byBmaWxsIDEwMCUgb2YgdGhlIHBhcmVudC5cbiAgICAgKiBEZWZhdWx0cyB0byBgZnVsbFdpZHRoYCBwcm9wIG9mIGA8RXVpRm9ybT5gLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHByZXNzZXMgW0VudGVyXSBPUiBvbiBjaGFuZ2UgaWYgdGhlIGluY3JlbWVudGFsIHByb3AgaXMgYHRydWVgLlxuICAgICAqIElmIHlvdSBkb24ndCBuZWVkIHRoZSBvbltFbnRlcl0gZnVuY3Rpb25hbGl0eSwgcHJlZmVyIHVzaW5nIG9uQ2hhbmdlXG4gICAgICovXG4gIG9uU2VhcmNoOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgdGhlIHNlYXJjaCB3aWxsIGJlIGV4ZWN1dGVkICh0aGF0IGlzLCB0aGUgYG9uU2VhcmNoYCB3aWxsIGJlIGNhbGxlZCkgYXMgdGhlXG4gICAgICogdXNlciB0eXBlcy5cbiAgICAgKi9cbiAgaW5jcmVtZW50YWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiB3aGVuIGB0cnVlYCBjcmVhdGVzIGEgc2hvcnRlciBoZWlnaHQgaW5wdXRcbiAgICAgKi9cbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogU2hvd3MgYSBidXR0b24gdGhhdCBxdWlja2x5IGNsZWFycyBhbnkgaW5wdXRcbiAgICAgKi9cbiAgaXNDbGVhcmFibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYmVmb3JlIGlucHV0XG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBhZnRlciBpbnB1dC5cbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTtcbmV4cG9ydCB2YXIgRXVpRmllbGRTZWFyY2ggPSB3aXRoRXVpU3R5bGVzTWVtb2l6ZXIoRXVpRmllbGRTZWFyY2hDbGFzcyk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFdlIGRvbid0IG5vcm1hbGx5IHVzZSAnSScgcHJlZml4ZXMsIHRoaXMgZmlsZSBpcyBhbiBleGNlcHRpb25cblxudmFyIEJyb3dzZXJJbXBsID0ge1xuICBpc0V2ZW50U3VwcG9ydGVkOiBmdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKG5hbWUsIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gXCJvblwiLmNvbmNhdChuYW1lKSBpbiBlbGVtZW50O1xuICB9XG59O1xuZXhwb3J0IHZhciBCcm93c2VyID0gT2JqZWN0LmZyZWV6ZShCcm93c2VySW1wbCk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvcm1Db250cm9sU3R5bGVzIH0gZnJvbSAnLi4vZm9ybS5zdHlsZXMnO1xuZXhwb3J0IHZhciBldWlGaWVsZFNlYXJjaFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZpZWxkU2VhcmNoU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZm9ybVN0eWxlcyA9IGV1aUZvcm1Db250cm9sU3R5bGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHJldHVybiB7XG4gICAgZXVpRmllbGRTZWFyY2g6IC8qI19fUFVSRV9fKi9jc3MoXCItd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkOyY6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sJjo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTt9XCIsIGZvcm1TdHlsZXMuc2hhcmVkLCBcIiAmOmludmFsaWR7XCIsIGZvcm1TdHlsZXMuaW52YWxpZCwgXCI7fSY6Zm9jdXN7XCIsIGZvcm1TdHlsZXMuZm9jdXMsIFwiO30mOmRpc2FibGVke1wiLCBmb3JtU3R5bGVzLmRpc2FibGVkLCBcIjt9JltyZWFkT25seV17XCIsIGZvcm1TdHlsZXMucmVhZE9ubHksIFwiO30mOmF1dG9maWxse1wiLCBmb3JtU3R5bGVzLmF1dG9GaWxsLCBcIjt9O2xhYmVsOmV1aUZpZWxkU2VhcmNoO1wiKSxcbiAgICAvLyBTa2lwIHRoZSBjc3MoKSBvbiB0aGUgZGVmYXVsdCBoZWlnaHQgdG8gYXZvaWQgZ2VuZXJhdGluZyBhIGNsYXNzTmFtZVxuICAgIHVuY29tcHJlc3NlZDogZm9ybVN0eWxlcy51bmNvbXByZXNzZWQsXG4gICAgY29tcHJlc3NlZDogLyojX19QVVJFX18qL2Nzcyhmb3JtU3R5bGVzLmNvbXByZXNzZWQsIFwiO2xhYmVsOmNvbXByZXNzZWQ7XCIpLFxuICAgIC8vIFNraXAgdGhlIGNzcygpIG9uIHRoZSBkZWZhdWx0IHdpZHRoIHRvIGF2b2lkIGdlbmVyYXRpbmcgYSBjbGFzc05hbWVcbiAgICBmb3JtV2lkdGg6IGZvcm1TdHlsZXMuZm9ybVdpZHRoLFxuICAgIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhmb3JtU3R5bGVzLmZ1bGxXaWR0aCwgXCI7bGFiZWw6ZnVsbFdpZHRoO1wiKSxcbiAgICAvLyBMYXlvdXQgbW9kaWZpZXJzXG4gICAgaW5Hcm91cDogLyojX19QVVJFX18qL2Nzcyhmb3JtU3R5bGVzLmluR3JvdXAsIFwiO2xhYmVsOmluR3JvdXA7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpRm9ybUVycm9yVGV4dFN0eWxlcyB9IGZyb20gJy4vZm9ybV9lcnJvcl90ZXh0LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtRXJyb3JUZXh0ID0gZnVuY3Rpb24gRXVpRm9ybUVycm9yVGV4dChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1FcnJvclRleHQnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpRm9ybUVycm9yVGV4dFN0eWxlcyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IHN0eWxlcy5ldWlGb3JtRXJyb3JUZXh0LFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBcImFyaWEtbGl2ZVwiOiBcInBvbGl0ZVwiXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpRm9ybUVycm9yVGV4dC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpRm9ybUVycm9yVGV4dFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1FcnJvclRleHRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlGb3JtRXJyb3JUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3BhZGRpbmctdG9wJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiIFwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICd4cycpLCBcIiBjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhbmdlciwgXCI7O2xhYmVsOmV1aUZvcm1FcnJvclRleHQ7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpRm9ybUhlbHBUZXh0U3R5bGVzIH0gZnJvbSAnLi9mb3JtX2hlbHBfdGV4dC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUhlbHBUZXh0ID0gZnVuY3Rpb24gRXVpRm9ybUhlbHBUZXh0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUhlbHBUZXh0JywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUZvcm1IZWxwVGV4dFN0eWxlcyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IHN0eWxlcy5ldWlGb3JtSGVscFRleHQsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpRm9ybUhlbHBUZXh0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvbnRTaXplLCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlGb3JtSGVscFRleHRTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtSGVscFRleHRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlGb3JtSGVscFRleHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygncGFkZGluZy10b3AnLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgXCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiIGNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGFya1NoYWRlLCBcIjs7bGFiZWw6ZXVpRm9ybUhlbHBUZXh0O1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNoaWxkcmVuXCIsIFwiaGVscFRleHRcIiwgXCJpc0ludmFsaWRcIiwgXCJlcnJvclwiLCBcImxhYmVsXCIsIFwibGFiZWxUeXBlXCIsIFwibGFiZWxBcHBlbmRcIiwgXCJoYXNFbXB0eUxhYmVsU3BhY2VcIiwgXCJmdWxsV2lkdGhcIiwgXCJkZXNjcmliZWRCeUlkc1wiLCBcImRpc3BsYXlcIiwgXCJoYXNDaGlsZExhYmVsXCIsIFwiaWRcIiwgXCJpc0Rpc2FibGVkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBDaGlsZHJlbiwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VHZW5lcmF0ZWRIdG1sSWQsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpU3BhY2VyIH0gZnJvbSAnLi4vLi4vc3BhY2VyJztcbmltcG9ydCB7IEV1aUZvcm1IZWxwVGV4dCB9IGZyb20gJy4uL2Zvcm1faGVscF90ZXh0JztcbmltcG9ydCB7IEV1aUZvcm1FcnJvclRleHQgfSBmcm9tICcuLi9mb3JtX2Vycm9yX3RleHQnO1xuaW1wb3J0IHsgRXVpRm9ybUxhYmVsIH0gZnJvbSAnLi4vZm9ybV9sYWJlbCc7XG5pbXBvcnQgeyB1c2VGb3JtQ29udGV4dCB9IGZyb20gJy4uL2V1aV9mb3JtX2NvbnRleHQnO1xuaW1wb3J0IHsgZXVpRm9ybVJvd1N0eWxlcyB9IGZyb20gJy4vZm9ybV9yb3cuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIERJU1BMQVlTID0gWydyb3cnLCAnY29sdW1uQ29tcHJlc3NlZCcsICdjZW50ZXInLCAnY2VudGVyQ29tcHJlc3NlZCcsXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKi9cbidjb2x1bW5Db21wcmVzc2VkU3dpdGNoJyxcbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqL1xuJ3Jvd0NvbXByZXNzZWQnXTtcbmV4cG9ydCB2YXIgRXVpRm9ybVJvdyA9IGZ1bmN0aW9uIEV1aUZvcm1Sb3coX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGhlbHBUZXh0ID0gX3JlZi5oZWxwVGV4dCxcbiAgICBpc0ludmFsaWQgPSBfcmVmLmlzSW52YWxpZCxcbiAgICBlcnJvciA9IF9yZWYuZXJyb3IsXG4gICAgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgIF9yZWYkbGFiZWxUeXBlID0gX3JlZi5sYWJlbFR5cGUsXG4gICAgbGFiZWxUeXBlID0gX3JlZiRsYWJlbFR5cGUgPT09IHZvaWQgMCA/ICdsYWJlbCcgOiBfcmVmJGxhYmVsVHlwZSxcbiAgICBsYWJlbEFwcGVuZCA9IF9yZWYubGFiZWxBcHBlbmQsXG4gICAgX3JlZiRoYXNFbXB0eUxhYmVsU3BhID0gX3JlZi5oYXNFbXB0eUxhYmVsU3BhY2UsXG4gICAgaGFzRW1wdHlMYWJlbFNwYWNlID0gX3JlZiRoYXNFbXB0eUxhYmVsU3BhID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaGFzRW1wdHlMYWJlbFNwYSxcbiAgICBfZnVsbFdpZHRoID0gX3JlZi5mdWxsV2lkdGgsXG4gICAgZGVzY3JpYmVkQnlJZHMgPSBfcmVmLmRlc2NyaWJlZEJ5SWRzLFxuICAgIF9yZWYkZGlzcGxheSA9IF9yZWYuZGlzcGxheSxcbiAgICBkaXNwbGF5ID0gX3JlZiRkaXNwbGF5ID09PSB2b2lkIDAgPyAncm93JyA6IF9yZWYkZGlzcGxheSxcbiAgICBfcmVmJGhhc0NoaWxkTGFiZWwgPSBfcmVmLmhhc0NoaWxkTGFiZWwsXG4gICAgaGFzQ2hpbGRMYWJlbCA9IF9yZWYkaGFzQ2hpbGRMYWJlbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkaGFzQ2hpbGRMYWJlbCxcbiAgICBwcm9wc0lkID0gX3JlZi5pZCxcbiAgICBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIF91c2VGb3JtQ29udGV4dCA9IHVzZUZvcm1Db250ZXh0KCksXG4gICAgZGVmYXVsdEZ1bGxXaWR0aCA9IF91c2VGb3JtQ29udGV4dC5kZWZhdWx0RnVsbFdpZHRoO1xuICB2YXIgZnVsbFdpZHRoID0gX2Z1bGxXaWR0aCAhPT0gbnVsbCAmJiBfZnVsbFdpZHRoICE9PSB2b2lkIDAgPyBfZnVsbFdpZHRoIDogZGVmYXVsdEZ1bGxXaWR0aDtcbiAgdmFyIGlkID0gdXNlR2VuZXJhdGVkSHRtbElkKHtcbiAgICBjb25kaXRpb25hbElkOiBwcm9wc0lkXG4gIH0pO1xuICB2YXIgaGFzTGFiZWwgPSBsYWJlbCB8fCBsYWJlbEFwcGVuZDtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBpc0ZvY3VzZWQgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldElzRm9jdXNlZCA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBvbkZvY3VzV2l0aGluID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzZXRJc0ZvY3VzZWQodHJ1ZSk7XG4gIH0sIFtdKTtcbiAgdmFyIG9uQmx1cldpdGhpbiA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc2V0SXNGb2N1c2VkKGZhbHNlKTtcbiAgfSwgW10pO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Sb3cnLCB7XG4gICAgJ2V1aUZvcm1Sb3ctLWhhc0VtcHR5TGFiZWxTcGFjZSc6IGhhc0VtcHR5TGFiZWxTcGFjZSxcbiAgICAnZXVpRm9ybVJvdy0taGFzTGFiZWwnOiBoYXNMYWJlbFxuICB9LCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpRm9ybVJvd1N0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUZvcm1Sb3csIGZ1bGxXaWR0aCA/IHN0eWxlcy5mdWxsV2lkdGggOiBzdHlsZXMuZm9ybVdpZHRoLCBzdHlsZXNbZGlzcGxheV1dO1xuICB2YXIgb3B0aW9uYWxIZWxwVGV4dHMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWhlbHBUZXh0KSByZXR1cm47XG4gICAgdmFyIGhlbHBUZXh0cyA9IEFycmF5LmlzQXJyYXkoaGVscFRleHQpID8gaGVscFRleHQgOiBbaGVscFRleHRdO1xuICAgIHJldHVybiBoZWxwVGV4dHMubWFwKGZ1bmN0aW9uIChoZWxwVGV4dCwgaSkge1xuICAgICAgdmFyIGtleSA9IHR5cGVvZiBoZWxwVGV4dCA9PT0gJ3N0cmluZycgPyBoZWxwVGV4dCA6IGk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtSGVscFRleHQsIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdChpZCwgXCItaGVscC1cIikuY29uY2F0KGkpLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fdGV4dFwiXG4gICAgICB9LCBoZWxwVGV4dCk7XG4gICAgfSk7XG4gIH0sIFtoZWxwVGV4dCwgaWRdKTtcbiAgdmFyIG9wdGlvbmFsRXJyb3JzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCEoZXJyb3IgJiYgaXNJbnZhbGlkKSkgcmV0dXJuO1xuICAgIHZhciBlcnJvclRleHRzID0gQXJyYXkuaXNBcnJheShlcnJvcikgPyBlcnJvciA6IFtlcnJvcl07XG4gICAgcmV0dXJuIGVycm9yVGV4dHMubWFwKGZ1bmN0aW9uIChlcnJvciwgaSkge1xuICAgICAgdmFyIGtleSA9IHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycgPyBlcnJvciA6IGk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtRXJyb3JUZXh0LCB7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBpZDogXCJcIi5jb25jYXQoaWQsIFwiLWVycm9yLVwiKS5jb25jYXQoaSksXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtUm93X190ZXh0XCJcbiAgICAgIH0sIGVycm9yKTtcbiAgICB9KTtcbiAgfSwgW2Vycm9yLCBpc0ludmFsaWQsIGlkXSk7XG4gIHZhciBhcmlhRGVzY3JpYmVkQnkgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZGVzY3JpYmluZ0lkcyA9IF90b0NvbnN1bWFibGVBcnJheShkZXNjcmliZWRCeUlkcyB8fCBbXSk7XG4gICAgaWYgKG9wdGlvbmFsSGVscFRleHRzICE9PSBudWxsICYmIG9wdGlvbmFsSGVscFRleHRzICE9PSB2b2lkIDAgJiYgb3B0aW9uYWxIZWxwVGV4dHMubGVuZ3RoKSB7XG4gICAgICBvcHRpb25hbEhlbHBUZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb25hbEhlbHBUZXh0KSB7XG4gICAgICAgIHJldHVybiBkZXNjcmliaW5nSWRzLnB1c2gob3B0aW9uYWxIZWxwVGV4dC5wcm9wcy5pZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbmFsRXJyb3JzICE9PSBudWxsICYmIG9wdGlvbmFsRXJyb3JzICE9PSB2b2lkIDAgJiYgb3B0aW9uYWxFcnJvcnMubGVuZ3RoKSB7XG4gICAgICBvcHRpb25hbEVycm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICByZXR1cm4gZGVzY3JpYmluZ0lkcy5wdXNoKGVycm9yLnByb3BzLmlkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZGVzY3JpYmluZ0lkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBkZXNjcmliaW5nSWRzLmpvaW4oJyAnKTtcbiAgICB9XG4gIH0sIFtkZXNjcmliZWRCeUlkcywgb3B0aW9uYWxIZWxwVGV4dHMsIG9wdGlvbmFsRXJyb3JzXSk7XG4gIHZhciBmaWVsZCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBfcmVmMiwgX2NoaWxkJHByb3BzJGRpc2FibGVkO1xuICAgIHZhciBjaGlsZCA9IENoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICBpZDogaWQsXG4gICAgICAvLyBBbGxvdyB0aGUgY2hpbGQncyBkaXNhYmxlZCBvciBpc0Rpc2FibGVkIHByb3AgdG8gc3VwZXJjZWRlIHRoZSBgaXNEaXNhYmxlZGBcbiAgICAgIGRpc2FibGVkOiAoX3JlZjIgPSAoX2NoaWxkJHByb3BzJGRpc2FibGVkID0gY2hpbGQucHJvcHMuZGlzYWJsZWQpICE9PSBudWxsICYmIF9jaGlsZCRwcm9wcyRkaXNhYmxlZCAhPT0gdm9pZCAwID8gX2NoaWxkJHByb3BzJGRpc2FibGVkIDogY2hpbGQucHJvcHMuaXNEaXNhYmxlZCkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogaXNEaXNhYmxlZCxcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogYXJpYURlc2NyaWJlZEJ5XG4gICAgfSk7XG4gIH0sIFtjaGlsZHJlbiwgaWQsIGlzRGlzYWJsZWQsIGFyaWFEZXNjcmliZWRCeV0pO1xuICB2YXIgRWxlbWVudCA9IGxhYmVsVHlwZSA9PT0gJ2xlZ2VuZCcgPyAnZmllbGRzZXQnIDogJ2Rpdic7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgaWQ6IFwiXCIuY29uY2F0KGlkLCBcIi1yb3dcIilcbiAgfSwgcmVzdCksIGhhc0xhYmVsID8gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX2xhYmVsV3JhcHBlclwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUxhYmVsLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX2xhYmVsXCIsXG4gICAgXCJhcmlhLWludmFsaWRcIjogaXNJbnZhbGlkLFxuICAgIGlzSW52YWxpZDogaXNJbnZhbGlkLFxuICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQgJiYgIWlzRGlzYWJsZWQsXG4gICAgaWQ6IFwiXCIuY29uY2F0KGlkLCBcIi1sYWJlbFwiKVxuICAgIC8vIEV4Y2x1c2l2ZVVuaW9uIHNoZW5hbmlnYW5zXG4gIH0sIGxhYmVsVHlwZSA9PT0gJ2xlZ2VuZCcgPyB7XG4gICAgdHlwZTogbGFiZWxUeXBlXG4gIH0gOiB7XG4gICAgdHlwZTogbGFiZWxUeXBlLFxuICAgIGh0bWxGb3I6IGhhc0NoaWxkTGFiZWwgPyBpZCA6IHVuZGVmaW5lZFxuICB9KSwgbGFiZWwpLCBsYWJlbEFwcGVuZCAmJiAnICcsIGxhYmVsQXBwZW5kKSA6IGhhc0VtcHR5TGFiZWxTcGFjZSAmJiBfX19FbW90aW9uSlNYKEV1aVNwYWNlciwge1xuICAgIHNpemU6IFwibVwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlGb3JtUm93X19sYWJlbFdyYXBwZXJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX2ZpZWxkV3JhcHBlclwiLFxuICAgIG9uRm9jdXM6IG9uRm9jdXNXaXRoaW4sXG4gICAgb25CbHVyOiBvbkJsdXJXaXRoaW5cbiAgfSwgZmllbGQsIG9wdGlvbmFsRXJyb3JzLCBvcHRpb25hbEhlbHBUZXh0cykpO1xufTtcbkV1aUZvcm1Sb3cucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBEZWZhdWx0cyB0byByZW5kZXJpbmcgYSBgPGxhYmVsPmAgYnV0IGlmIHBhc3NlZCBgJ2xlZ2VuZCdgIGZvciBsYWJlbFR5cGUsXG4gICAgICogd2lsbCByZW5kZXIgYm90aCBhIGA8bGVnZW5kPmAgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250YWluZXIgYXMgYSBgPGZpZWxkc2V0PmBcbiAgICAgKi9cbiAgbGFiZWxUeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wibGFiZWxcIl0pLCBQcm9wVHlwZXMub25lT2YoW1wibGVnZW5kXCJdKV0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogLSBgY29sdW1uQ29tcHJlc3NlZGAgY3JlYXRlcyBhIGNvbXByZXNzZWQgYW5kIGhvcml6b250YWwgbGF5b3V0XG4gICAgICogLSBgY29sdW1uQ29tcHJlc3NlZFN3aXRjaGAgLSAqKmRlcHJlY2F0ZWQqKiwgdXNlIGBjb2x1bW5Db21wcmVzc2VkYCBpbnN0ZWFkXG4gICAgICogLSBgY2VudGVyYC9gY2VudGVyQ29tcHJlc3NlZGAgaGVscHMgYWxpZ24gbm9uLWlucHV0IGNvbnRlbnQgYmV0dGVyIHdpdGggaW5saW5lIGZvcm0gbGF5b3V0c1xuICAgICAqIC0gYHJvd0NvbXByZXNzZWRgIC0gKipkZXByZWNhdGVkKiosIGRvZXMgbm90IGN1cnJlbnRseSBhZmZlY3Qgc3R5bGluZ1xuICAgICAqL1xuICAvKipcbiAgICAgKiAtIGBjb2x1bW5Db21wcmVzc2VkYCBjcmVhdGVzIGEgY29tcHJlc3NlZCBhbmQgaG9yaXpvbnRhbCBsYXlvdXRcbiAgICAgKiAtIGBjb2x1bW5Db21wcmVzc2VkU3dpdGNoYCAtICoqZGVwcmVjYXRlZCoqLCB1c2UgYGNvbHVtbkNvbXByZXNzZWRgIGluc3RlYWRcbiAgICAgKiAtIGBjZW50ZXJgL2BjZW50ZXJDb21wcmVzc2VkYCBoZWxwcyBhbGlnbiBub24taW5wdXQgY29udGVudCBiZXR0ZXIgd2l0aCBpbmxpbmUgZm9ybSBsYXlvdXRzXG4gICAgICogLSBgcm93Q29tcHJlc3NlZGAgLSAqKmRlcHJlY2F0ZWQqKiwgZG9lcyBub3QgY3VycmVudGx5IGFmZmVjdCBzdHlsaW5nXG4gICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFVzZWZ1bCBmb3IgaW5saW5lIGZvcm0gbGF5b3V0cywgcHJpbWFyaWx5IGZvciBjb250ZW50IHRoYXRcbiAgICAgKiBuZWVkcyB0byBiZSBhbGlnbmVkIHdpdGggaW5wdXRzIGJ1dCBkb2VzIG5vdCBuZWVkIGEgbGFiZWxcbiAgICAgKi9cbiAgLyoqXG4gICAgICogVXNlZnVsIGZvciBpbmxpbmUgZm9ybSBsYXlvdXRzLCBwcmltYXJpbHkgZm9yIGNvbnRlbnQgdGhhdFxuICAgICAqIG5lZWRzIHRvIGJlIGFsaWduZWQgd2l0aCBpbnB1dHMgYnV0IGRvZXMgbm90IG5lZWQgYSBsYWJlbFxuICAgICAqL1xuICBoYXNFbXB0eUxhYmVsU3BhY2U6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBFeHBhbmQgdG8gZmlsbCAxMDAlIG9mIHRoZSBwYXJlbnQuXG4gICAgICogRGVmYXVsdHMgdG8gYGZ1bGxXaWR0aGAgcHJvcCBvZiBgPEV1aUZvcm0+YC5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAvKipcbiAgICAgKiBFeHBhbmQgdG8gZmlsbCAxMDAlIG9mIHRoZSBwYXJlbnQuXG4gICAgICogRGVmYXVsdHMgdG8gYGZ1bGxXaWR0aGAgcHJvcCBvZiBgPEV1aUZvcm0+YC5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBJRHMgb2YgYWRkaXRpb25hbCBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSBwYXJ0IG9mIGNoaWxkcmVuJ3MgYGFyaWEtZGVzY3JpYmVkYnlgXG4gICAgICovXG4gIC8qKlxuICAgICAqIElEcyBvZiBhZGRpdGlvbmFsIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHBhcnQgb2YgY2hpbGRyZW4ncyBgYXJpYS1kZXNjcmliZWRieWBcbiAgICAgKi9cbiAgZGVzY3JpYmVkQnlJZHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCksXG4gIC8qKlxuICAgICAqIEVzY2FwZSBoYXRjaCB0byBub3QgcmVuZGVyIGR1cGxpY2F0ZSBsYWJlbHMgaWYgdGhlIGNoaWxkIGFsc28gcmVuZGVycyBhIGxhYmVsXG4gICAgICovXG4gIC8qKlxuICAgICAqIEVzY2FwZSBoYXRjaCB0byBub3QgcmVuZGVyIGR1cGxpY2F0ZSBsYWJlbHMgaWYgdGhlIGNoaWxkIGFsc28gcmVuZGVycyBhIGxhYmVsXG4gICAgICovXG4gIGhhc0NoaWxkTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBSZWFjdEVsZW1lbnQgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICAvKipcbiAgICAgKiBSZWFjdEVsZW1lbnQgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBBZGRzIGFuIGV4dHJhIG5vZGUgdG8gdGhlIHJpZ2h0IG9mIHRoZSBmb3JtIGxhYmVsIHdpdGhvdXRcbiAgICAgKiBiZWluZyBjb250YWluZWQgaW5zaWRlIHRoZSBmb3JtIGxhYmVsLiBHb29kIGZvciB0aGluZ3NcbiAgICAgKiBsaWtlIGRvY3VtZW50YXRpb24gbGlua3MuXG4gICAgICovXG4gIC8qKlxuICAgICAqIEFkZHMgYW4gZXh0cmEgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIGZvcm0gbGFiZWwgd2l0aG91dFxuICAgICAqIGJlaW5nIGNvbnRhaW5lZCBpbnNpZGUgdGhlIGZvcm0gbGFiZWwuIEdvb2QgZm9yIHRoaW5nc1xuICAgICAqIGxpa2UgZG9jdW1lbnRhdGlvbiBsaW5rcy5cbiAgICAgKi9cbiAgbGFiZWxBcHBlbmQ6IFByb3BUeXBlcy5hbnksXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBlcnJvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiAgQWRkcyBhIHNpbmdsZSBub2RlL3N0cmluZyBvciBhbiBhcnJheSBvZiBub2Rlcy9zdHJpbmdzIGJlbG93IHRoZSBpbnB1dFxuICAgICAqL1xuICAvKipcbiAgICAgKiAgQWRkcyBhIHNpbmdsZSBub2RlL3N0cmluZyBvciBhbiBhcnJheSBvZiBub2Rlcy9zdHJpbmdzIGJlbG93IHRoZSBpbnB1dFxuICAgICAqL1xuICBoZWxwVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiAgUGFzc2VkIGFsb25nIHRvIHRoZSBsYWJlbCBlbGVtZW50OyBhbmQgdG8gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQgd2hlbiBgZGlzYWJsZWRgIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBvbiB0aGUgY2hpbGQgZmllbGQgZWxlbWVudC5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogIFBhc3NlZCBhbG9uZyB0byB0aGUgbGFiZWwgZWxlbWVudDsgYW5kIHRvIHRoZSBjaGlsZCBmaWVsZCBlbGVtZW50IHdoZW4gYGRpc2FibGVkYCBkb2Vzbid0IGFscmVhZHkgZXhpc3Qgb24gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQuXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpRm9ybVZhcmlhYmxlcyB9IGZyb20gJy4uL2Zvcm0uc3R5bGVzJztcbmV4cG9ydCB2YXIgZXVpRm9ybVJvd1N0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1Sb3dTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIF9ldWlGb3JtVmFyaWFibGVzID0gZXVpRm9ybVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIG1heFdpZHRoID0gX2V1aUZvcm1WYXJpYWJsZXMubWF4V2lkdGgsXG4gICAgY29udHJvbEhlaWdodCA9IF9ldWlGb3JtVmFyaWFibGVzLmNvbnRyb2xIZWlnaHQsXG4gICAgY29udHJvbENvbXByZXNzZWRIZWlnaHQgPSBfZXVpRm9ybVZhcmlhYmxlcy5jb250cm9sQ29tcHJlc3NlZEhlaWdodDtcbiAgcmV0dXJuIHtcbiAgICBldWlGb3JtUm93OiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTpmbGV4OysuZXVpQnV0dG9ue1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgZXVpVGhlbWUuc2l6ZS5iYXNlKSwgXCI7fTtsYWJlbDpldWlGb3JtUm93O1wiKSxcbiAgICAvLyBTa2lwIGNzc2BgIHRvIGF2b2lkIGdlbmVyYXRpbmcgYW4gRW1vdGlvbiBjbGFzc05hbWVcbiAgICBmb3JtV2lkdGg6IFwiXFxuICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsIG1heFdpZHRoKSwgXCJcXG4gICAgXCIpLFxuICAgIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKSxcbiAgICAvLyBTa2lwIGNzc2BgIHRvIGF2b2lkIGdlbmVyYXRpbmcgYW4gZXh0cmEgY2xhc3NOYW1lXG4gICAgcm93OiBcIlxcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgICAgcm93LWdhcDogXCIuY29uY2F0KGV1aVRoZW1lLnNpemUueHMsIFwiO1xcblxcbiAgICAgIC5ldWlGb3JtUm93X19sYWJlbFdyYXBwZXIge1xcbiAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcXG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgICB9XFxuXFxuICAgICAgKyAuZXVpRm9ybVJvdyB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBldWlUaGVtZS5zaXplLmJhc2UpLCBcIlxcbiAgICAgIH1cXG4gICAgXCIpLFxuICAgIC8vIE5vIGRpZmZlcmVuY2UgZnJvbSB0aGUgdW5jb21wcmVzc2VkIHJvdyBmb3IgdGhpcyBjdXJyZW50IHRoZW1lIEFGQUlDVFxuICAgIC8vIFRPRE86IERlcHJlY2F0ZSBwcm9wXG4gICAgZ2V0IHJvd0NvbXByZXNzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3c7XG4gICAgfSxcbiAgICBjb2x1bW5Db21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOnN0cmV0Y2g7Y29sdW1uLWdhcDpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjsuZXVpRm9ybVJvd19fbGFiZWx7aHlwaGVuczphdXRvO30uZXVpRm9ybVJvd19fbGFiZWxXcmFwcGVye2ZsZXgtYmFzaXM6Y2FsYygzMyUgLSBcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIik7XCIsIGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsIDApLCBcIiBsaW5lLWhlaWdodDpcIiwgY29udHJvbENvbXByZXNzZWRIZWlnaHQsIFwiO30uZXVpRm9ybVJvd19fZmllbGRXcmFwcGVye2ZsZXgtYmFzaXM6NjclO1wiLCBsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCAwKSwgXCI7fSsuZXVpRm9ybVJvd3tcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGV1aVRoZW1lLnNpemUucyksIFwiO30mOmhhcyguZXVpU3dpdGNoKXsmOm5vdCg6Zmlyc3QtY2hpbGQpe1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgZXVpVGhlbWUuc2l6ZS5tKSwgXCI7fSY6bm90KDpsYXN0LWNoaWxkKXtcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGV1aVRoZW1lLnNpemUubSksIFwiO30uZXVpRm9ybVJvd19fbGFiZWxXcmFwcGVye2xpbmUtaGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplLmJhc2UsIFwiO319O2xhYmVsOmNvbHVtbkNvbXByZXNzZWQ7XCIpLFxuICAgIC8vIEhhbmRsZWQgYnkgOmhhcyBDU1Mgbm93IHJhdGhlciB0aGFuIGEgc2VwYXJhdGUgbW9kaWZpZXIvcHJvcFxuICAgIC8vIFRPRE86IERlcHJlY2F0ZSBwcm9wXG4gICAgZ2V0IGNvbHVtbkNvbXByZXNzZWRTd2l0Y2goKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW5Db21wcmVzc2VkO1xuICAgIH0sXG4gICAgLy8gQ2VudGVyIGRpc3BsYXkgaXMgcHJpbWFyaWx5IGZvciBpbmxpbmUgZm9ybSByb3dzLCB3aGljaCBtYXkgaGF2ZSBoYXZlXG4gICAgLy8gZmllbGQgY29udGVudCB0aGF0IGlzIHNob3J0ZXIgdGhhbiBmb3JtIGNvbnRyb2xzIChlLmcuIHN3aXRjaGVzLCB0ZXh0KSxcbiAgICAvLyBhbmQgc2hvdWxkIHZlcnRpY2FsbHkgY2VudGVyIHNhaWQgY29udGVudFxuICAgIGNlbnRlckRpc3BsYXlDc3M6IGZ1bmN0aW9uIGNlbnRlckRpc3BsYXlDc3MoY29tcHJlc3NlZCkge1xuICAgICAgcmV0dXJuIFwiXFxuICAgICAgLmV1aUZvcm1Sb3dfX2ZpZWxkV3JhcHBlciB7XFxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdtaW4taGVpZ2h0JywgY29tcHJlc3NlZCA/IGNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0IDogY29udHJvbEhlaWdodCksIFwiXFxuICAgICAgfVxcbiAgICBcIik7XG4gICAgfSxcbiAgICBnZXQgY2VudGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jc3ModGhpcy5yb3csIFwiIFwiLCB0aGlzLmNlbnRlckRpc3BsYXlDc3MoZmFsc2UpLCBcIjs7bGFiZWw6Y2VudGVyO1wiKTtcbiAgICB9LFxuICAgIGdldCBjZW50ZXJDb21wcmVzc2VkKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jc3ModGhpcy5yb3csIFwiIFwiLCB0aGlzLmNlbnRlckRpc3BsYXlDc3ModHJ1ZSksIFwiOztsYWJlbDpjZW50ZXJDb21wcmVzc2VkO1wiKTtcbiAgICB9XG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwic2l6ZVwiLCBcIm1hcmdpblwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlIb3Jpem9udGFsUnVsZVN0eWxlcyB9IGZyb20gJy4vaG9yaXpvbnRhbF9ydWxlLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsnZnVsbCcsICdoYWxmJywgJ3F1YXJ0ZXInXTtcbmV4cG9ydCB2YXIgTUFSR0lOUyA9IFsnbm9uZScsICd4cycsICdzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcbmV4cG9ydCB2YXIgRXVpSG9yaXpvbnRhbFJ1bGUgPSBmdW5jdGlvbiBFdWlIb3Jpem9udGFsUnVsZShfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ2Z1bGwnIDogX3JlZiRzaXplLFxuICAgIF9yZWYkbWFyZ2luID0gX3JlZi5tYXJnaW4sXG4gICAgbWFyZ2luID0gX3JlZiRtYXJnaW4gPT09IHZvaWQgMCA/ICdsJyA6IF9yZWYkbWFyZ2luLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlIb3Jpem9udGFsUnVsZScsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlIb3Jpem9udGFsUnVsZVN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUhvcml6b250YWxSdWxlLCBzdHlsZXNbc2l6ZV0sIHN0eWxlc1ttYXJnaW5dXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJoclwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpKTtcbn07XG5FdWlIb3Jpem9udGFsUnVsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBIUi5cbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgbWFyZ2luOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpSG9yaXpvbnRhbFJ1bGVTdHlsZXMgPSBmdW5jdGlvbiBldWlIb3Jpem9udGFsUnVsZVN0eWxlcyhfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpSG9yaXpvbnRhbFJ1bGU6IC8qI19fUFVSRV9fKi9jc3MoXCJib3JkZXI6bm9uZTtcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4pLCBcIiBiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUaGVtZS5ib3JkZXIuY29sb3IsIFwiO2ZsZXgtc2hyaW5rOjA7ZmxleC1ncm93OjA7O2xhYmVsOmV1aUhvcml6b250YWxSdWxlO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIGZ1bGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbDtcIiksXG4gICAgaGFsZjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICc1MCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ob3Jpem9udGFsJywgJ2F1dG8nKSwgXCI7O2xhYmVsOmhhbGY7XCIpLFxuICAgIHF1YXJ0ZXI6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMjUlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXJnaW4taG9yaXpvbnRhbCcsICdhdXRvJyksIFwiOztsYWJlbDpxdWFydGVyO1wiKSxcbiAgICAvLyBNYXJnaW5zXG4gICAgbm9uZTogJycsXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLm0sIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLmJhc2UsIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLmwsIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICB4eGw6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUueHhsLCBcIjs7bGFiZWw6eHhsO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInN0eWxlc01lbW9pemVyXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJvbkNsb3NlXCIsIFwidGl0bGVcIiwgXCJvbkhlaWdodENoYW5nZVwiLCBcInRyYW5zaXRpb25UeXBlXCIsIFwidHJhbnNpdGlvbkRpcmVjdGlvblwiLCBcIm9uVHJhbnNpdGlvbkNvbXBsZXRlXCIsIFwib25Vc2VLZXlib2FyZFRvTmF2aWdhdGVcIiwgXCJpdGVtc1wiLCBcImluaXRpYWxGb2N1c2VkSXRlbUluZGV4XCIsIFwic2hvd05leHRQYW5lbFwiLCBcInNob3dQcmV2aW91c1BhbmVsXCIsIFwic2l6ZVwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdGFiYmFibGUgfSBmcm9tICd0YWJiYWJsZSc7XG5pbXBvcnQgeyB3aXRoRXVpU3R5bGVzTWVtb2l6ZXIsIGtleXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlSZXNpemVPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyL3Jlc2l6ZV9vYnNlcnZlcic7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudUl0ZW0gfSBmcm9tICcuL2NvbnRleHRfbWVudV9pdGVtJztcbmltcG9ydCB7IGV1aUNvbnRleHRNZW51UGFuZWxTdHlsZXMgfSBmcm9tICcuL2NvbnRleHRfbWVudV9wYW5lbC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ3MnLCAnbSddO1xuZXhwb3J0IHZhciBFdWlDb250ZXh0TWVudVBhbmVsQ2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpQ29udGV4dE1lbnVQYW5lbENsYXNzKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlDb250ZXh0TWVudVBhbmVsQ2xhc3MpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlDb250ZXh0TWVudVBhbmVsQ2xhc3MsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJfaXNNb3VudGVkXCIsIGZhbHNlKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYmFja0J1dHRvblwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicGFuZWxcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImluaXRpYWxQb3BvdmVyUGFyZW50XCIsIG51bGwpO1xuICAgIC8vIEZpbmQgYWxsIHRhYmJhYmxlIG1lbnUgaXRlbXMgb24gYm90aCBwYW5lbCBpbml0IGFuZFxuICAgIC8vIHdoZW5ldmVyIGBtZW51SXRlbXNgIHJlc2V0cyB3aGVuIGBwcm9wcy5pdGVtc2AgY2hhbmdlc1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJmaW5kTWVudUl0ZW1zXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRpdGVtcztcbiAgICAgIGlmICghX3RoaXMucGFuZWwpIHJldHVybjtcbiAgICAgIGlmICghKChfdGhpcyRwcm9wcyRpdGVtcyA9IF90aGlzLnByb3BzLml0ZW1zKSAhPT0gbnVsbCAmJiBfdGhpcyRwcm9wcyRpdGVtcyAhPT0gdm9pZCAwICYmIF90aGlzJHByb3BzJGl0ZW1zLmxlbmd0aCkpIHJldHVybjsgLy8gV2Ugb25seSBuZWVkIG1lbnUgaXRlbXMvYXJyb3cga2V5IG5hdmlnYXRpb24gZm9yIHRoZSBgaXRlbXNgIEFQSVxuICAgICAgaWYgKF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHJldHVybjsgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIG1lbnUgaXRlbXMsIG5vIG5lZWQgdG8gY29udGludWVcblxuICAgICAgdmFyIHRhYmJhYmxlSXRlbXMgPSB0YWJiYWJsZShfdGhpcy5wYW5lbCk7XG4gICAgICBpZiAodGFiYmFibGVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIG1lbnVJdGVtczogdGFiYmFibGVJdGVtc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZm9jdXNNZW51SXRlbVwiLCBmdW5jdGlvbiAoZGlyZWN0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUkbWVudUl0ZW1zO1xuICAgICAgdmFyIGluZGV4T2Zmc2V0ID0gZGlyZWN0aW9uID09PSAndXAnID8gLTEgOiAxO1xuICAgICAgdmFyIG5leHRGb2N1c2VkSXRlbUluZGV4O1xuICAgICAgaWYgKF90aGlzLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVzZXIncyBrZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBtZW51LCB0aGVuIHdlJ2xsIGZvY3VzXG4gICAgICAgIC8vIGVpdGhlciB0aGUgZmlyc3Qgb3IgbGFzdCBpdGVtLlxuICAgICAgICBuZXh0Rm9jdXNlZEl0ZW1JbmRleCA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGggLSAxIDogMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCArIGluZGV4T2Zmc2V0O1xuICAgICAgICBpZiAobmV4dEZvY3VzZWRJdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgbmV4dEZvY3VzZWRJdGVtSW5kZXggPSBfdGhpcy5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChuZXh0Rm9jdXNlZEl0ZW1JbmRleCA9PT0gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkSXRlbUluZGV4OiBuZXh0Rm9jdXNlZEl0ZW1JbmRleFxuICAgICAgfSk7XG4gICAgICAoX3RoaXMkc3RhdGUkbWVudUl0ZW1zID0gX3RoaXMuc3RhdGUubWVudUl0ZW1zW25leHRGb2N1c2VkSXRlbUluZGV4XSkgPT09IG51bGwgfHwgX3RoaXMkc3RhdGUkbWVudUl0ZW1zID09PSB2b2lkIDAgfHwgX3RoaXMkc3RhdGUkbWVudUl0ZW1zLmZvY3VzKCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIElmIHRoaXMgcGFuZWwgY29udGFpbnMgaXRlbXMgeW91IGNhbiB1c2UgdGhlIGxlZnQgYXJyb3cga2V5IHRvIGdvIGJhY2sgYXQgYW55IHRpbWUuXG4gICAgICAvLyBCdXQgaWYgaXQgZG9lc24ndCBjb250YWluIGl0ZW1zLCB0aGVuIHlvdSBoYXZlIHRvIGZvY3VzIG9uIHRoZSBiYWNrIGJ1dHRvbiBzcGVjaWZpY2FsbHksXG4gICAgICAvLyBzaW5jZSB0aGVyZSBjb3VsZCBiZSBjb250ZW50IGluc2lkZSB0aGUgcGFuZWwgd2hpY2ggcmVxdWlyZXMgdXNlIG9mIHRoZSBsZWZ0IGFycm93IGtleSxcbiAgICAgIC8vIGUuZy4gdGV4dCBpbnB1dHMuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wcy5pdGVtcyxcbiAgICAgICAgb25DbG9zZSA9IF90aGlzJHByb3BzLm9uQ2xvc2UsXG4gICAgICAgIHNob3dQcmV2aW91c1BhbmVsID0gX3RoaXMkcHJvcHMuc2hvd1ByZXZpb3VzUGFuZWw7XG4gICAgICBpZiAob25DbG9zZSAmJiAoaXRlbXMgIT09IG51bGwgJiYgaXRlbXMgIT09IHZvaWQgMCAmJiBpdGVtcy5sZW5ndGggfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gX3RoaXMuYmFja0J1dHRvbiB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBfdGhpcy5wYW5lbCkpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0ga2V5cy5BUlJPV19MRUZUKSB7XG4gICAgICAgICAgaWYgKHNob3dQcmV2aW91c1BhbmVsKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBzaG93UHJldmlvdXNQYW5lbCgpO1xuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXRlbXMgIT09IG51bGwgJiYgaXRlbXMgIT09IHZvaWQgMCAmJiBpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICBjYXNlIGtleXMuVEFCOlxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgLy8gTk9URTogZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpcyBzdGFsZSBpZiBub3Qgd3JhcHBlZCBpbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICAgICAgICAgICAgdmFyIGZvY3VzZWRJdGVtSW5kZXggPSBfdGhpcy5zdGF0ZS5tZW51SXRlbXMuaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHN5bmMgb3VyIGludGVybmFsIHN0YXRlIHdpdGggdGhlIHVzZXIgdGFiYmluZyB0aHJvdWdoIGl0ZW1zXG4gICAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBmb2N1c2VkSXRlbUluZGV4OiBmb2N1c2VkSXRlbUluZGV4ID49IDAgJiYgZm9jdXNlZEl0ZW1JbmRleCA8IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGggPyBmb2N1c2VkSXRlbUluZGV4IDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIGtleXMuQVJST1dfVVA6XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgX3RoaXMuZm9jdXNNZW51SXRlbSgndXAnKTtcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBrZXlzLkFSUk9XX0RPV046XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgX3RoaXMuZm9jdXNNZW51SXRlbSgnZG93bicpO1xuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIGtleXMuQVJST1dfUklHSFQ6XG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMuc2hvd05leHRQYW5lbCkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5zaG93TmV4dFBhbmVsKG9uQ2xvc2UgJiYgX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCA/IF90aGlzLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggLSAxIC8vIEFjY291bnQgZm9yIHBhbmVsIHRpdGxlIGJhY2sgYnV0dG9uXG4gICAgICAgICAgICAgIDogX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCk7XG4gICAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZWNsYWltUG9wb3ZlckZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgd2FpdGluZ0ZvckluaXRpYWxQb3BvdmVyOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBfdGhpcy50YWtlSW5pdGlhbEZvY3VzKCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uVHJhbnNpdGlvbkNvbXBsZXRlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vblRyYW5zaXRpb25Db21wbGV0ZSkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vblRyYW5zaXRpb25Db21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwYW5lbFJlZlwiLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgX3RoaXMucGFuZWwgPSBub2RlO1xuICAgICAgX3RoaXMudXBkYXRlSGVpZ2h0KCk7XG4gICAgICBfdGhpcy5nZXRJbml0aWFsUG9wb3ZlclBhcmVudCgpO1xuICAgICAgX3RoaXMuZmluZE1lbnVJdGVtcygpO1xuICAgIH0pO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgcHJldlByb3BzOiB7XG4gICAgICAgIGl0ZW1zOiBfdGhpcy5wcm9wcy5pdGVtc1xuICAgICAgfSxcbiAgICAgIG1lbnVJdGVtczogW10sXG4gICAgICBmb2N1c2VkSXRlbUluZGV4OiBwcm9wcy5vbkNsb3NlICYmIHByb3BzLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4ICE9IG51bGwgJiYgcHJvcHMuaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXggIT09IC0xID8gcHJvcHMuaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXggKyAxIC8vIEFjY291bnQgZm9yIHBhbmVsIHRpdGxlIGJhY2sgYnV0dG9uXG4gICAgICA6IHByb3BzLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4LFxuICAgICAgY3VycmVudEhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgd2FpdGluZ0ZvckluaXRpYWxQb3BvdmVyOiBmYWxzZSxcbiAgICAgIHRvb2tJbml0aWFsRm9jdXM6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUNvbnRleHRNZW51UGFuZWxDbGFzcywgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpQ29udGV4dE1lbnVQYW5lbENsYXNzLCBbe1xuICAgIGtleTogXCJ0YWtlSW5pdGlhbEZvY3VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRha2VJbml0aWFsRm9jdXMoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIC8vIEdpdmUgcG9zaXRpb25pbmcgdGltZSB0byByZW5kZXIgYmVmb3JlIGZvY3VzIGlzIGFwcGxpZWQuIE90aGVyd2lzZSBwYWdlIGp1bXBzLlxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFfdGhpczIuX2lzTW91bnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvbid0IHRha2UgZm9jdXMgeWV0IGlmIEV1aUNvbnRleHRNZW51IGlzIGluIGEgcG9wb3ZlclxuICAgICAgICAvLyBhbmQgdGhlIHBvcG92ZXIgaXMgaW5pdGlhbGx5IG9wZW5pbmcvdHJhbnNpdGlvbmluZyBpblxuICAgICAgICBpZiAoX3RoaXMyLmluaXRpYWxQb3BvdmVyUGFyZW50ICYmIF90aGlzMi5zdGF0ZS53YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXR0aW5nIGZvY3VzIHdoaWxlIHRyYW5zaXRpb25pbmcgY2F1c2VzIHRoZSBhbmltYXRpb24gdG8gZ2xpdGNoLCBzbyB3ZSBoYXZlIHRvIHdhaXRcbiAgICAgICAgLy8gdW50aWwgaXQncyBmaW5pc2hlZCBiZWZvcmUgd2UgZm9jdXMgYW55dGhpbmcuXG4gICAgICAgIGlmIChfdGhpczIucHJvcHMudHJhbnNpdGlvblR5cGUpIHtcbiAgICAgICAgICB2YXIgX3RoaXMyJHBhbmVsO1xuICAgICAgICAgIC8vIElmIHRoZSBwYW5lbCBpcyB0cmFuc2l0aW9uaW5nLCBzZXQgZm9jdXMgdG8gdGhlIHBhbmVsIHNvIHRoYXQgdXNlcnMgdXNpbmdcbiAgICAgICAgICAvLyBhcnJvdyBrZXlzIHRoYXQgYXJlIGZhc3QgY2xpY2tlcnMgZG9uJ3QgYWNjaWRlbnRhbGx5IGdldCBzdHJhbmRlZCBmb2N1c1xuICAgICAgICAgIC8vIG9yIHRyaWdnZXIga2V5c3Ryb2tlcyB3aGVuIGl0IHNob3VsZG4ndFxuICAgICAgICAgIChfdGhpczIkcGFuZWwgPSBfdGhpczIucGFuZWwpID09PSBudWxsIHx8IF90aGlzMiRwYW5lbCA9PT0gdm9pZCAwIHx8IF90aGlzMiRwYW5lbC5mb2N1cyh7XG4gICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5pdGlhbCBmb2N1cyBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQsIG5vIG5lZWQgdG8gY29udGludWUgYW5kIHBvdGVudGlhbGx5IGhpamFjay9mb2N1cyBmaWdodFxuICAgICAgICBpZiAoX3RoaXMyLnN0YXRlLnRvb2tJbml0aWFsRm9jdXMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBgaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXg9ey0xfWAgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHByZXZlbnRpbmcgaW5pdGlhbCBpdGVtIGZvY3VzIGlzIGRlc2lyZWRcbiAgICAgICAgaWYgKF90aGlzMi5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICAgIC8vIFJlc2V0dGluZyB0aGUgZm9jdXNlZEl0ZW1JbmRleCB0byAwIGFsbG93cyBrZXlib2FyZCB1cC9kb3duIGJlaGF2aW9yIHRvXG4gICAgICAgICAgLy8gc3RpbGwgd29yayBjb3JyZWN0bHkgbGF0ZXIgaWYgdGhlIHBhbmVsIGlzIG1hbnVhbGx5IHRhYmJlZCBpbnRvXG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgZm9jdXNlZEl0ZW1JbmRleDogMFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgYW4gaXRlbSBzaG91bGQgYmUgZm9jdXNlZCwgZm9jdXMgaXQgKGlmIGl0IGV4aXN0cylcbiAgICAgICAgaWYgKF90aGlzMi5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ICE9IG51bGwgJiYgX3RoaXMyLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZm9jdXNlZEl0ZW0gPSBfdGhpczIuc3RhdGUubWVudUl0ZW1zW190aGlzMi5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4XTtcbiAgICAgICAgICBpZiAoZm9jdXNlZEl0ZW0pIHtcbiAgICAgICAgICAgIGZvY3VzZWRJdGVtLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgdG9va0luaXRpYWxGb2N1czogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiB0aGUgYmFjayBidXR0b24gcGFuZWwgdGl0bGUgaXMgcHJlc2VudCwgZm9jdXMgaXRcbiAgICAgICAgaWYgKF90aGlzMi5iYWNrQnV0dG9uKSB7XG4gICAgICAgICAgLy8gRm9jdXMgdGhlIGJhY2sgYnV0dG9uIGZvciBib3RoIGBpdGVtc2AgYW5kIGBjaGlsZHJlbmAgQVBJc1xuICAgICAgICAgIF90aGlzMi5iYWNrQnV0dG9uLmZvY3VzKCk7XG4gICAgICAgICAgLy8gSWYgYGl0ZW1zYCwgZW5zdXJlIG91ciBmb2N1c2VkIGl0ZW0gaW5kZXggaXMgY29ycmVjdFxuICAgICAgICAgIGlmIChfdGhpczIuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgZm9jdXNlZEl0ZW1JbmRleDogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdG9va0luaXRpYWxGb2N1czogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9jdXMgb24gdGhlIHBhbmVsIGFzIGEgbGFzdCByZXNvcnQuXG4gICAgICAgIGlmIChfdGhpczIucGFuZWwgJiYgIV90aGlzMi5wYW5lbC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgIF90aGlzMi5wYW5lbC5mb2N1cygpO1xuICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKF8sIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS5tZW51SXRlbXMgIT09IHRoaXMuc3RhdGUubWVudUl0ZW1zKSB7XG4gICAgICAgIHRoaXMuZmluZE1lbnVJdGVtcygpO1xuICAgICAgfVxuICAgICAgLy8gRm9jdXMgaXNuJ3QgYWx3YXlzIHJlYWR5IHRvIGJlIHRha2VuIG9uIG1vdW50LCBzbyB3ZSBuZWVkIHRvIGNhbGwgaXRcbiAgICAgIC8vIG9uIHVwZGF0ZSBhcyB3ZWxsIGp1c3QgaW4gY2FzZVxuICAgICAgdGhpcy50YWtlSW5pdGlhbEZvY3VzKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgLy8gSWYgRXVpQ29udGV4dE1lbnUgaXMgdXNlZCB3aXRoaW4gYW4gRXVpUG9wb3Zlciwgd2UgbmVlZCB0byB3YWl0IGZvciBFdWlQb3BvdmVyIHRvOlxuICAgICAgLy8gMS4gQ29ycmVjdGx5IHNldCBpdHMgYHJldHVybkZvY3VzYCB0byB0aGUgdG9nZ2xpbmcgYnV0dG9uLFxuICAgICAgLy8gICAgc28gZm9jdXMgaXMgY29ycmVjdGx5IHJlc3RvcmVkIHRvIHRoZSBwb3BvdmVyIHRvZ2dsZSBvbiBjbG9zZVxuICAgICAgLy8gMi4gRmluaXNoIGl0cyByZWFjdC1mb2N1cy1vbiBgYXV0b0ZvY3VzYCBiZWhhdmlvciBhZnRlciB0cmFuc2l0aW9uaW5nIGluLFxuICAgICAgLy8gICAgc28gdGhlIHBhbmVsIGNhbiBoYW5kbGUgaXRzIG93biBmb2N1cyB3aXRob3V0IGZvY3VzIGZpZ2h0aW5nXG4gICAgICBpZiAodGhpcy5pbml0aWFsUG9wb3ZlclBhcmVudCkge1xuICAgICAgICB0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5yZWNsYWltUG9wb3ZlckZvY3VzLCB7XG4gICAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFrZUluaXRpYWxGb2N1cygpO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkaW5pdGlhbFBvcG92ZXJQO1xuICAgICAgKF90aGlzJGluaXRpYWxQb3BvdmVyUCA9IHRoaXMuaW5pdGlhbFBvcG92ZXJQYXJlbnQpID09PSBudWxsIHx8IF90aGlzJGluaXRpYWxQb3BvdmVyUCA9PT0gdm9pZCAwIHx8IF90aGlzJGluaXRpYWxQb3BvdmVyUC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMucmVjbGFpbVBvcG92ZXJGb2N1cyk7XG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXBkYXRlSGVpZ2h0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZUhlaWdodCgpIHtcbiAgICAgIHZhciBjdXJyZW50SGVpZ2h0ID0gdGhpcy5wYW5lbCA/IHRoaXMucGFuZWwuY2xpZW50SGVpZ2h0IDogMDtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmhlaWdodCAhPT0gY3VycmVudEhlaWdodCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkhlaWdodENoYW5nZSkge1xuICAgICAgICAgIHRoaXMucHJvcHMub25IZWlnaHRDaGFuZ2UoY3VycmVudEhlaWdodCk7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBoZWlnaHQ6IGN1cnJlbnRIZWlnaHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRJbml0aWFsUG9wb3ZlclBhcmVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbml0aWFsUG9wb3ZlclBhcmVudCgpIHtcbiAgICAgIHZhciBfcGFyZW50JHBhcmVudE5vZGU7XG4gICAgICAvLyBJZiBgdHJhbnNpdGlvblR5cGVgIGV4aXN0cywgdGhhdCBtZWFucyB3ZSdyZSBuYXZpZ2F0aW5nIGJldHdlZW4gcGFuZWxzXG4gICAgICAvLyBhbmQgdGhlIGluaXRpYWwgcG9wb3ZlciBoYXMgYWxyZWFkeSBsb2FkZWQsIHNvIHdlIHNob3VsZG4ndCBuZWVkIHRoaXMgbG9naWNcbiAgICAgIGlmICh0aGlzLnByb3BzLnRyYW5zaXRpb25UeXBlKSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMucGFuZWwpIHJldHVybjtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhbmVsLnBhcmVudE5vZGU7XG4gICAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICAgICAgdmFyIGhhc0V1aUNvbnRleHRNZW51UGFyZW50ID0gcGFyZW50LmNsYXNzTGlzdC5jb250YWlucygnZXVpQ29udGV4dE1lbnUnKTtcblxuICAgICAgLy8gSXQncyBwb3NzaWJsZSB0byB1c2UgYW4gRXVpQ29udGV4dE1lbnVQYW5lbCBkaXJlY3RseSBpbiBhIHBvcG92ZXIgd2l0aG91dFxuICAgICAgLy8gYW4gRXVpQ29udGV4dE1lbnUsIHNvIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhhdCB3aGVuIHNlYXJjaGluZyBwYXJlbnQgbm9kZXNcbiAgICAgIHZhciBwb3BvdmVyUGFyZW50ID0gaGFzRXVpQ29udGV4dE1lbnVQYXJlbnQgPyBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgfHwgKF9wYXJlbnQkcGFyZW50Tm9kZSA9IHBhcmVudC5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfcGFyZW50JHBhcmVudE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wYXJlbnQkcGFyZW50Tm9kZS5wYXJlbnROb2RlIDogcGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50LnBhcmVudE5vZGU7XG4gICAgICBpZiAoIXBvcG92ZXJQYXJlbnQpIHJldHVybjtcbiAgICAgIHZhciBoYXNQb3BvdmVyUGFyZW50ID0gISFwb3BvdmVyUGFyZW50LmRhdGFzZXQucG9wb3ZlclBhbmVsO1xuICAgICAgaWYgKCFoYXNQb3BvdmVyUGFyZW50KSByZXR1cm47XG4gICAgICB0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50ID0gcG9wb3ZlclBhcmVudDtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB3YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXI6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgc3R5bGVzTWVtb2l6ZXIgPSBfdGhpcyRwcm9wczIuc3R5bGVzTWVtb2l6ZXIsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMyLmNoaWxkcmVuLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBvbkNsb3NlID0gX3RoaXMkcHJvcHMyLm9uQ2xvc2UsXG4gICAgICAgIHRpdGxlID0gX3RoaXMkcHJvcHMyLnRpdGxlLFxuICAgICAgICBvbkhlaWdodENoYW5nZSA9IF90aGlzJHByb3BzMi5vbkhlaWdodENoYW5nZSxcbiAgICAgICAgdHJhbnNpdGlvblR5cGUgPSBfdGhpcyRwcm9wczIudHJhbnNpdGlvblR5cGUsXG4gICAgICAgIHRyYW5zaXRpb25EaXJlY3Rpb24gPSBfdGhpcyRwcm9wczIudHJhbnNpdGlvbkRpcmVjdGlvbixcbiAgICAgICAgb25UcmFuc2l0aW9uQ29tcGxldGUgPSBfdGhpcyRwcm9wczIub25UcmFuc2l0aW9uQ29tcGxldGUsXG4gICAgICAgIG9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlID0gX3RoaXMkcHJvcHMyLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlLFxuICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzMi5pdGVtcyxcbiAgICAgICAgaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXggPSBfdGhpcyRwcm9wczIuaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXgsXG4gICAgICAgIHNob3dOZXh0UGFuZWwgPSBfdGhpcyRwcm9wczIuc2hvd05leHRQYW5lbCxcbiAgICAgICAgc2hvd1ByZXZpb3VzUGFuZWwgPSBfdGhpcyRwcm9wczIuc2hvd1ByZXZpb3VzUGFuZWwsXG4gICAgICAgIHNpemUgPSBfdGhpcyRwcm9wczIuc2l6ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbnRleHRNZW51UGFuZWwnLCBjbGFzc05hbWUpO1xuICAgICAgdmFyIHN0eWxlcyA9IHN0eWxlc01lbW9pemVyKGV1aUNvbnRleHRNZW51UGFuZWxTdHlsZXMpO1xuICAgICAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpQ29udGV4dE1lbnVQYW5lbCwgdHJhbnNpdGlvbkRpcmVjdGlvbiAmJiB0cmFuc2l0aW9uVHlwZSAmJiBzdHlsZXNbdHJhbnNpdGlvbkRpcmVjdGlvbl1bdHJhbnNpdGlvblR5cGVdXTtcbiAgICAgIHZhciBwYW5lbFRpdGxlID0gdGl0bGUgJiYgX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIHtcbiAgICAgICAgY3NzOiBzdHlsZXMuZXVpQ29udGV4dE1lbnVQYW5lbF9fdGl0bGUsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudVBhbmVsX190aXRsZVwiLFxuICAgICAgICBvbkNsaWNrOiBvbkNsb3NlLFxuICAgICAgICBidXR0b25SZWY6IGZ1bmN0aW9uIGJ1dHRvblJlZihub2RlKSB7XG4gICAgICAgICAgaWYgKG9uQ2xvc2UpIF90aGlzMy5iYWNrQnV0dG9uID0gbm9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBvbkNsb3NlID8gJ2NvbnRleHRNZW51UGFuZWxUaXRsZUJ1dHRvbicgOiAnY29udGV4dE1lbnVQYW5lbFRpdGxlJyxcbiAgICAgICAgaWNvbjogb25DbG9zZSAmJiAnYXJyb3dMZWZ0J1xuICAgICAgfSwgdGl0bGUpO1xuICAgICAgdmFyIGNvbnRlbnQgPSBpdGVtcyAmJiBpdGVtcy5sZW5ndGggPyBpdGVtcy5tYXAoZnVuY3Rpb24gKE1lbnVJdGVtKSB7XG4gICAgICAgIHZhciBjbG9uZVByb3BzID0ge307XG4gICAgICAgIGlmIChzaXplKSB7XG4gICAgICAgICAgY2xvbmVQcm9wcy5zaXplID0gc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWVudUl0ZW0udHlwZSA9PT0gRXVpQ29udGV4dE1lbnVJdGVtID8gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChNZW51SXRlbSwgY2xvbmVQcm9wcykgOiBNZW51SXRlbTtcbiAgICAgIH0pIDogY2hpbGRyZW47XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogdGhpcy5wYW5lbFJlZixcbiAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICBvbkFuaW1hdGlvbkVuZDogdGhpcy5vblRyYW5zaXRpb25Db21wbGV0ZVxuICAgICAgfSwgcmVzdCksIHBhbmVsVGl0bGUsIF9fX0Vtb3Rpb25KU1goRXVpUmVzaXplT2JzZXJ2ZXIsIHtcbiAgICAgICAgb25SZXNpemU6IGZ1bmN0aW9uIG9uUmVzaXplKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMudXBkYXRlSGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGZ1bmN0aW9uIChyZXNpemVSZWYpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIHJlZjogcmVzaXplUmVmXG4gICAgICAgIH0sIGNvbnRlbnQpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhciBuZWVkc1VwZGF0ZSA9IGZhbHNlO1xuICAgICAgdmFyIG5leHRTdGF0ZSA9IHt9O1xuXG4gICAgICAvLyBDbGVhciByZWZzIHRvIG1lbnVJdGVtcyBpZiB3ZSdyZSBnZXR0aW5nIG5ldyBvbmVzLlxuICAgICAgaWYgKG5leHRQcm9wcy5pdGVtcyAhPT0gcHJldlN0YXRlLnByZXZQcm9wcy5pdGVtcykge1xuICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7XG4gICAgICAgIG5leHRTdGF0ZS5tZW51SXRlbXMgPSBbXTtcbiAgICAgICAgbmV4dFN0YXRlLnByZXZQcm9wcyA9IHtcbiAgICAgICAgICBpdGVtczogbmV4dFByb3BzLml0ZW1zXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAobmVlZHNVcGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aUNvbnRleHRNZW51UGFuZWxDbGFzcywgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBpdGVtczogW11cbn0pO1xuRXVpQ29udGV4dE1lbnVQYW5lbENsYXNzLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgaW5pdGlhbGx5IGZvY3VzZWQgbWVudSBpdGVtIGZvciBrZXlib2FyZCBhbmQgc2NyZWVuIHJlYWRlciB1c2Vycy5cbiAgICAgICAqXG4gICAgICAgKiBDYW4gYmUgc2V0IHRvIGAtMWAgdG8gcHJldmVudCBhdXRvZm9jdXMgKGFuIHVuY29tbW9uIGNhc2UgdGhhdCBtdXN0IGhhdmVcbiAgICAgICAqIGtleWJvYXJkIGFjY2Vzc2liaWxpdHkgYWNjb3VudGVkIGZvciBtYW51YWxseSBpZiB1c2VkKVxuICAgICAgICovXG4gIGluaXRpYWxGb2N1c2VkSXRlbUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBpdGVtczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCksXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkhlaWdodENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVHJhbnNpdGlvbkNvbXBsZXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Vc2VLZXlib2FyZFRvTmF2aWdhdGU6IFByb3BUeXBlcy5mdW5jLFxuICBzaG93TmV4dFBhbmVsOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2hvd1ByZXZpb3VzUGFuZWw6IFByb3BUeXBlcy5mdW5jLFxuICB0aXRsZTogUHJvcFR5cGVzLm5vZGUsXG4gIHRyYW5zaXRpb25EaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZihbXCJuZXh0XCIsIFwicHJldmlvdXNcIl0pLFxuICB0cmFuc2l0aW9uVHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImluXCIsIFwib3V0XCJdKSxcbiAgLyoqXG4gICAgICAgKiBBbHRlcnMgdGhlIHNpemUgb2YgdGhlIGl0ZW1zIGFuZCB0aGUgdGl0bGVcbiAgICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55XG59O1xuZXhwb3J0IHZhciBFdWlDb250ZXh0TWVudVBhbmVsID0gd2l0aEV1aVN0eWxlc01lbW9pemVyKEV1aUNvbnRleHRNZW51UGFuZWxDbGFzcyk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImhhc1BhbmVsXCIsIFwiaWNvblwiLCBcImJ1dHRvblJlZlwiLCBcImRpc2FibGVkXCIsIFwibGF5b3V0QWxpZ25cIiwgXCJ0b29sVGlwQ29udGVudFwiLCBcInRvb2xUaXBQcm9wc1wiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJzaXplXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcywgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi90b29sX3RpcCc7XG5pbXBvcnQgeyBldWlDb250ZXh0TWVudUl0ZW1TdHlsZXMgfSBmcm9tICcuL2NvbnRleHRfbWVudV9pdGVtLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsncycsICdtJ107XG52YXIgbGF5b3V0QWxpZ25Ub0NsYXNzTmFtZXMgPSB7XG4gIGNlbnRlcjogbnVsbCxcbiAgdG9wOiAnZXVpQ29udGV4dE1lbnVfX2l0ZW1MYXlvdXQtLXRvcCcsXG4gIGJvdHRvbTogJ2V1aUNvbnRleHRNZW51X19pdGVtTGF5b3V0LS1ib3R0b20nXG59O1xuZXhwb3J0IHZhciBMQVlPVVRfQUxJR04gPSBrZXlzT2YobGF5b3V0QWxpZ25Ub0NsYXNzTmFtZXMpO1xuZXhwb3J0IHZhciBFdWlDb250ZXh0TWVudUl0ZW0gPSBmdW5jdGlvbiBFdWlDb250ZXh0TWVudUl0ZW0oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGhhc1BhbmVsID0gX3JlZi5oYXNQYW5lbCxcbiAgICBpY29uID0gX3JlZi5pY29uLFxuICAgIGJ1dHRvblJlZiA9IF9yZWYuYnV0dG9uUmVmLFxuICAgIF9kaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgX3JlZiRsYXlvdXRBbGlnbiA9IF9yZWYubGF5b3V0QWxpZ24sXG4gICAgbGF5b3V0QWxpZ24gPSBfcmVmJGxheW91dEFsaWduID09PSB2b2lkIDAgPyAnY2VudGVyJyA6IF9yZWYkbGF5b3V0QWxpZ24sXG4gICAgdG9vbFRpcENvbnRlbnQgPSBfcmVmLnRvb2xUaXBDb250ZW50LFxuICAgIHRvb2xUaXBQcm9wcyA9IF9yZWYudG9vbFRpcFByb3BzLFxuICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgcmVsID0gX3JlZi5yZWwsXG4gICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgdmFyIGRpc2FibGVkID0gX2Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb250ZXh0TWVudUl0ZW0nLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpQ29udGV4dE1lbnVJdGVtU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpQ29udGV4dE1lbnVJdGVtLCBzdHlsZXMuc2l6ZXNbc2l6ZV0sIHN0eWxlcy5sYXlvdXRBbGlnbltsYXlvdXRBbGlnbl0sIGRpc2FibGVkICYmIHN0eWxlcy5kaXNhYmxlZF07XG4gIHZhciBpY29uSW5zdGFuY2UgPSBpY29uICYmICh0eXBlb2YgaWNvbiA9PT0gJ3N0cmluZycgPyBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICB0eXBlOiBpY29uLFxuICAgIHNpemU6IFwibVwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudV9faWNvblwiLFxuICAgIGNzczogc3R5bGVzLmV1aUNvbnRleHRNZW51X19pY29uLFxuICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG4gIH0pIDpcbiAgLy8gQXNzdW1lIGl0J3MgYWxyZWFkeSBhbiBpbnN0YW5jZSBvZiBhbiBpY29uLlxuICBjbG9uZUVsZW1lbnRXaXRoQ3NzKGljb24sIHtcbiAgICBjc3M6IHN0eWxlcy5ldWlDb250ZXh0TWVudV9faWNvblxuICB9KSk7XG4gIHZhciBhcnJvdyA9IGhhc1BhbmVsICYmIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiYXJyb3dSaWdodFwiLFxuICAgIHNpemU6IFwibVwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudV9fYXJyb3dcIixcbiAgICBjc3M6IHN0eWxlcy5ldWlDb250ZXh0TWVudUl0ZW1fX2Fycm93XG4gIH0pO1xuICB2YXIgdGV4dFN0eWxlcyA9IFtzdHlsZXMudGV4dC5ldWlDb250ZXh0TWVudUl0ZW1fX3RleHQsIHNpemUgPT09ICdzJyAmJiBzdHlsZXMudGV4dC5zXTtcbiAgdmFyIGJ1dHRvbkNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBpY29uSW5zdGFuY2UsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVJdGVtX190ZXh0XCIsXG4gICAgY3NzOiB0ZXh0U3R5bGVzXG4gIH0sIGNoaWxkcmVuKSwgYXJyb3cpO1xuICB2YXIgYnV0dG9uO1xuICAvLyA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuICBpZiAoaHJlZiAmJiAhZGlzYWJsZWQpIHtcbiAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgYnV0dG9uID0gX19fRW1vdGlvbkpTWChcImFcIiwgX2V4dGVuZHMoe1xuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHNlY3VyZVJlbCxcbiAgICAgIHJlZjogYnV0dG9uUmVmXG4gICAgfSwgcmVzdCksIGJ1dHRvbkNvbnRlbnQpO1xuICB9IGVsc2UgaWYgKGhyZWYgfHwgcmVzdC5vbkNsaWNrIHx8IHRvb2xUaXBDb250ZW50KSB7XG4gICAgYnV0dG9uID0gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICByZWY6IGJ1dHRvblJlZlxuICAgIH0sIHJlc3QpLCBidXR0b25Db250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBidXR0b24gPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgYnV0dG9uQ29udGVudCk7XG4gIH1cbiAgaWYgKHRvb2xUaXBDb250ZW50KSB7XG4gICAgdmFyIGFuY2hvckNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWktZGlzcGxheUJsb2NrJywgdG9vbFRpcFByb3BzID09PSBudWxsIHx8IHRvb2xUaXBQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogdG9vbFRpcFByb3BzLmFuY2hvckNsYXNzTmFtZSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwgX2V4dGVuZHMoe1xuICAgICAgcG9zaXRpb246IFwicmlnaHRcIlxuICAgIH0sIHRvb2xUaXBQcm9wcywge1xuICAgICAgYW5jaG9yQ2xhc3NOYW1lOiBhbmNob3JDbGFzc2VzLFxuICAgICAgY29udGVudDogdG9vbFRpcENvbnRlbnRcbiAgICB9KSwgYnV0dG9uKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYnV0dG9uO1xuICB9XG59O1xuRXVpQ29udGV4dE1lbnVJdGVtLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gIGhhc1BhbmVsOiBQcm9wVHlwZXMuYm9vbCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBSZXF1aXJlZCBpZiB1c2luZyBhIHRvb2x0aXAuIEFkZCBhbiBvcHRpb25hbCB0b29sdGlwIG9uIGhvdmVyXG4gICAgICovXG4gIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nIFtFdWlUb29sVGlwXSgvIy9kaXNwbGF5L3Rvb2x0aXApLlxuICAgICAqIEFjY2VwdHMgYW55IHByb3AgdGhhdCBFdWlUb29sVGlwIGRvZXMsIGV4Y2VwdCBmb3IgYGNvbnRlbnRgIGFuZCBgY2hpbGRyZW5gLlxuICAgICAqL1xuICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBIb3cgdG8gYWxpZ24gaWNvbiB3aXRoIGNvbnRlbnQgb2YgYnV0dG9uXG4gICAgICovXG4gIGxheW91dEFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wiY2VudGVyXCIsIFwidG9wXCIsIFwiYm90dG9tXCJdKSxcbiAgLyoqXG4gICAgICogUmVkdWNlIHRoZSBzaXplIHRvIGBzYCB3aGVuIGluIG5lZWQgb2YgYSBtb3JlIGNvbXByZXNzZWQgbWVudVxuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjRhazRzOC1ldWlDb250ZXh0TWVudUl0ZW1fX2Fycm93XCIsXG4gIHN0eWxlczogXCJhbGlnbi1zZWxmOmZsZXgtZW5kO2xhYmVsOmV1aUNvbnRleHRNZW51SXRlbV9fYXJyb3c7XCJcbn0gOiB7XG4gIG5hbWU6IFwiNGFrNHM4LWV1aUNvbnRleHRNZW51SXRlbV9fYXJyb3dcIixcbiAgc3R5bGVzOiBcImFsaWduLXNlbGY6ZmxleC1lbmQ7bGFiZWw6ZXVpQ29udGV4dE1lbnVJdGVtX19hcnJvdztcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIm8xZ2cyMi1ldWlDb250ZXh0TWVudUl0ZW1fX3RleHRcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjtsYWJlbDpldWlDb250ZXh0TWVudUl0ZW1fX3RleHQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwibzFnZzIyLWV1aUNvbnRleHRNZW51SXRlbV9fdGV4dFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO2xhYmVsOmV1aUNvbnRleHRNZW51SXRlbV9fdGV4dDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFsem9oY3MtZXVpQ29udGV4dE1lbnVfX2ljb25cIixcbiAgc3R5bGVzOiBcImZsZXgtc2hyaW5rOjA7bGFiZWw6ZXVpQ29udGV4dE1lbnVfX2ljb247XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWx6b2hjcy1ldWlDb250ZXh0TWVudV9faWNvblwiLFxuICBzdHlsZXM6IFwiZmxleC1zaHJpbms6MDtsYWJlbDpldWlDb250ZXh0TWVudV9faWNvbjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY0ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFtc2FldDItYm90dG9tXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpmbGV4LWVuZDtsYWJlbDpib3R0b207XCJcbn0gOiB7XG4gIG5hbWU6IFwiMW1zYWV0Mi1ib3R0b21cIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmZsZXgtZW5kO2xhYmVsOmJvdHRvbTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY1ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFnbndidmQtdG9wXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2xhYmVsOnRvcDtcIlxufSA6IHtcbiAgbmFtZTogXCIxZ253YnZkLXRvcFwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6ZmxleC1zdGFydDtsYWJlbDp0b3A7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI4MzkxZGItY2VudGVyXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpjZW50ZXI7bGFiZWw6Y2VudGVyO1wiXG59IDoge1xuICBuYW1lOiBcIjgzOTFkYi1jZW50ZXJcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmNlbnRlcjtsYWJlbDpjZW50ZXI7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQ29udGV4dE1lbnVJdGVtU3R5bGVzID0gZnVuY3Rpb24gZXVpQ29udGV4dE1lbnVJdGVtU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpQ29udGV4dE1lbnVJdGVtOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTpmbGV4O2dhcDpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjtcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiBcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIiBjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO291dGxpbmUtb2Zmc2V0Oi1cIiwgZXVpVGhlbWUuZm9jdXMud2lkdGgsIFwiOyY6d2hlcmUoYSwgYnV0dG9uKTpub3QoOmRpc2FibGVkKXsmOmhvdmVyLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9Jjpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUaGVtZS5mb2N1cy5iYWNrZ3JvdW5kQ29sb3IsIFwiO319O2xhYmVsOmV1aUNvbnRleHRNZW51SXRlbTtcIiksXG4gICAgZGlzYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkVGV4dCwgXCI7Y3Vyc29yOmRlZmF1bHQ7O2xhYmVsOmRpc2FibGVkO1wiKSxcbiAgICBsYXlvdXRBbGlnbjoge1xuICAgICAgY2VudGVyOiBfcmVmNixcbiAgICAgIHRvcDogX3JlZjUsXG4gICAgICBib3R0b206IF9yZWY0XG4gICAgfSxcbiAgICBzaXplczoge1xuICAgICAgbTogLyojX19QVVJFX18qL2NzcyhcInBhZGRpbmc6XCIsIGV1aVRoZW1lLnNpemUubSwgXCI7O2xhYmVsOm07XCIpLFxuICAgICAgczogLyojX19QVVJFX18qL2NzcyhcInBhZGRpbmc6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7O2xhYmVsOnM7XCIpXG4gICAgfSxcbiAgICAvLyBDaGlsZHJlblxuICAgIGV1aUNvbnRleHRNZW51X19pY29uOiBfcmVmMyxcbiAgICB0ZXh0OiB7XG4gICAgICBldWlDb250ZXh0TWVudUl0ZW1fX3RleHQ6IF9yZWYyLFxuICAgICAgczogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiOztsYWJlbDpzO1wiKVxuICAgIH0sXG4gICAgZXVpQ29udGV4dE1lbnVJdGVtX19hcnJvdzogX3JlZlxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbWF0aFdpdGhVbml0cywgZXVpQ2FuQW5pbWF0ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpQ29udGV4dE1lbnVWYXJpYWJsZXMgPSBmdW5jdGlvbiBldWlDb250ZXh0TWVudVZhcmlhYmxlcyhfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgcGFuZWxXaWR0aDogbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLmJhc2UsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAqIDE2O1xuICAgIH0pXG4gIH07XG59O1xuZXhwb3J0IHZhciBldWlDb250ZXh0TWVudVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNvbnRleHRNZW51U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBfZXVpQ29udGV4dE1lbnVWYXJpYWIgPSBldWlDb250ZXh0TWVudVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIHBhbmVsV2lkdGggPSBfZXVpQ29udGV4dE1lbnVWYXJpYWIucGFuZWxXaWR0aDtcbiAgcmV0dXJuIHtcbiAgICBldWlDb250ZXh0TWVudTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsIHBhbmVsV2lkdGgpLCBcIiBcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCIgcG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBcIjtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpoZWlnaHQgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO307bGFiZWw6ZXVpQ29udGV4dE1lbnU7XCIpXG4gIH07XG59OyIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0LCBfdGVtcGxhdGVPYmplY3QyLCBfdGVtcGxhdGVPYmplY3QzLCBfdGVtcGxhdGVPYmplY3Q0O1xuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChlLCB0KSB7IHJldHVybiB0IHx8ICh0ID0gZS5zbGljZSgwKSksIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUodCkgfSB9KSk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcywga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgZXVpQ2FudEFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlUaXRsZSB9IGZyb20gJy4uL3RpdGxlL3RpdGxlLnN0eWxlcyc7XG5pbXBvcnQgeyBldWlDb250ZXh0TWVudVZhcmlhYmxlcyB9IGZyb20gJy4vY29udGV4dF9tZW51LnN0eWxlcyc7XG5leHBvcnQgdmFyIGV1aUNvbnRleHRNZW51UGFuZWxTdHlsZXMgPSBmdW5jdGlvbiBldWlDb250ZXh0TWVudVBhbmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBfZXVpQ29udGV4dE1lbnVWYXJpYWIgPSBldWlDb250ZXh0TWVudVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIHBhbmVsV2lkdGggPSBfZXVpQ29udGV4dE1lbnVWYXJpYWIucGFuZWxXaWR0aDtcbiAgdmFyIGFuaW1hdGlvbnMgPSB7XG4gICAgdHJhbnNpdGlvbmluZzogLyojX19QVVJFX18qL2NzcyhcInBvaW50ZXItZXZlbnRzOm5vbmU7YW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkczthbmltYXRpb24tZHVyYXRpb246XCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ub3JtYWwsIFwiO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246XCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIjtcIiwgZXVpQ2FudEFuaW1hdGUsIFwie2FuaW1hdGlvbi1kdXJhdGlvbjowczt9O2xhYmVsOnRyYW5zaXRpb25pbmc7XCIpLFxuICAgIGluTGVmdDoga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgICAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWChcIiwgXCIpOyB9XFxuICAgICAgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsgfVxcbiAgICBcIl0pKSwgcGFuZWxXaWR0aCksXG4gICAgb3V0TGVmdDoga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdDIgfHwgKF90ZW1wbGF0ZU9iamVjdDIgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICAgIDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9XFxuICAgICAgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtXCIsIFwiKTsgfVxcbiAgICBcIl0pKSwgcGFuZWxXaWR0aCksXG4gICAgaW5SaWdodDoga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdDMgfHwgKF90ZW1wbGF0ZU9iamVjdDMgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICAgIDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC1cIiwgXCIpOyB9XFxuICAgICAgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsgfVxcbiAgICBcIl0pKSwgcGFuZWxXaWR0aCksXG4gICAgb3V0UmlnaHQ6IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3Q0IHx8IChfdGVtcGxhdGVPYmplY3Q0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgICAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsgfVxcbiAgICAgIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoXCIsIFwiKTsgfVxcbiAgICBcIl0pKSwgcGFuZWxXaWR0aClcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBldWlDb250ZXh0TWVudVBhbmVsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgdmlzaWJpbGl0eTp2aXNpYmxlO291dGxpbmUtb2Zmc2V0Oi1cIiwgZXVpVGhlbWUuZm9jdXMud2lkdGgsIFwiOyY6Zm9jdXN7b3V0bGluZTpub25lO307bGFiZWw6ZXVpQ29udGV4dE1lbnVQYW5lbDtcIiksXG4gICAgLy8gUGFuZWwgYW5pbWF0aW9uc1xuICAgIG5leHQ6IHtcbiAgICAgIGluOiAvKiNfX1BVUkVfXyovY3NzKGFuaW1hdGlvbnMudHJhbnNpdGlvbmluZywgXCIgYW5pbWF0aW9uLW5hbWU6XCIsIGFuaW1hdGlvbnMuaW5MZWZ0LCBcIjs7bGFiZWw6aW47XCIpLFxuICAgICAgb3V0OiAvKiNfX1BVUkVfXyovY3NzKGFuaW1hdGlvbnMudHJhbnNpdGlvbmluZywgXCIgYW5pbWF0aW9uLW5hbWU6XCIsIGFuaW1hdGlvbnMub3V0TGVmdCwgXCI7O2xhYmVsOm91dDtcIilcbiAgICB9LFxuICAgIHByZXZpb3VzOiB7XG4gICAgICBpbjogLyojX19QVVJFX18qL2NzcyhhbmltYXRpb25zLnRyYW5zaXRpb25pbmcsIFwiIGFuaW1hdGlvbi1uYW1lOlwiLCBhbmltYXRpb25zLmluUmlnaHQsIFwiOztsYWJlbDppbjtcIiksXG4gICAgICBvdXQ6IC8qI19fUFVSRV9fKi9jc3MoYW5pbWF0aW9ucy50cmFuc2l0aW9uaW5nLCBcIiBhbmltYXRpb24tbmFtZTpcIiwgYW5pbWF0aW9ucy5vdXRSaWdodCwgXCI7O2xhYmVsOm91dDtcIilcbiAgICB9LFxuICAgIC8vIENoaWxkcmVuXG4gICAgZXVpQ29udGV4dE1lbnVQYW5lbF9fdGl0bGU6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdib3JkZXItYm90dG9tJywgZXVpVGhlbWUuYm9yZGVyLnRoaW4pLCBcIiAmOmVuYWJsZWQ6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp1bnNldDt9O2xhYmVsOmV1aUNvbnRleHRNZW51UGFuZWxfX3RpdGxlO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImxhYmVsXCIsIFwiaWRcIiwgXCJjaGVja2VkXCIsIFwiZGlzYWJsZWRcIiwgXCJjb21wcmVzc2VkXCIsIFwibWluaVwiLCBcIm9uQ2hhbmdlXCIsIFwiY2xhc3NOYW1lXCIsIFwic2hvd0xhYmVsXCIsIFwidHlwZVwiLCBcImxhYmVsUHJvcHNcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUdlbmVyYXRlZEh0bWxJZCwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBldWlTd2l0Y2hTdHlsZXMgfSBmcm9tICcuL3N3aXRjaC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU3dpdGNoID0gZnVuY3Rpb24gRXVpU3dpdGNoKF9yZWYpIHtcbiAgdmFyIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICBpZCA9IF9yZWYuaWQsXG4gICAgY2hlY2tlZCA9IF9yZWYuY2hlY2tlZCxcbiAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICBtaW5pID0gX3JlZi5taW5pLFxuICAgIG9uQ2hhbmdlID0gX3JlZi5vbkNoYW5nZSxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJHNob3dMYWJlbCA9IF9yZWYuc2hvd0xhYmVsLFxuICAgIHNob3dMYWJlbCA9IF9yZWYkc2hvd0xhYmVsID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzaG93TGFiZWwsXG4gICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgIGxhYmVsUHJvcHMgPSBfcmVmLmxhYmVsUHJvcHMsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc3dpdGNoSWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoe1xuICAgIGNvbmRpdGlvbmFsSWQ6IGlkXG4gIH0pO1xuICB2YXIgbGFiZWxJZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCh7XG4gICAgY29uZGl0aW9uYWxJZDogbGFiZWxQcm9wcyA9PT0gbnVsbCB8fCBsYWJlbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYWJlbFByb3BzLmlkXG4gIH0pO1xuICB2YXIgb25DbGljayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBldmVudCA9IGU7XG4gICAgZXZlbnQudGFyZ2V0LmNoZWNrZWQgPSAhY2hlY2tlZDtcbiAgICBvbkNoYW5nZShldmVudCk7XG4gIH0sIFtjaGVja2VkLCBkaXNhYmxlZCwgb25DaGFuZ2VdKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTd2l0Y2gnLCBjbGFzc05hbWUpO1xuICB2YXIgbGFiZWxDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU3dpdGNoX19sYWJlbCcsIGxhYmVsUHJvcHMgPT09IG51bGwgfHwgbGFiZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFiZWxQcm9wcy5jbGFzc05hbWUpO1xuICBpZiAoc2hvd0xhYmVsID09PSBmYWxzZSAmJiB0eXBlb2YgbGFiZWwgIT09ICdzdHJpbmcnKSB7XG4gICAgY29uc29sZS53YXJuKCdFdWlTd2l0Y2ggYGxhYmVsYCBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gYHNob3dMYWJlbGAgaXMgZmFsc2UuJyk7XG4gIH1cbiAgdmFyIHNpemUgPSBtaW5pID8gJ21pbmknIDogY29tcHJlc3NlZCA/ICdjb21wcmVzc2VkJyA6ICd1bmNvbXByZXNzZWQnO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpU3dpdGNoU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpU3dpdGNoLCBkaXNhYmxlZCA/IHN0eWxlcy5kaXNhYmxlZCA6IHN0eWxlcy5lbmFibGVkXTtcbiAgdmFyIGJ1dHRvblN0eWxlcyA9IFtzdHlsZXMuYnV0dG9uLmV1aVN3aXRjaF9fYnV0dG9uLCBzdHlsZXMuYnV0dG9uW3NpemVdXTtcbiAgdmFyIGJvZHlTdHlsZXMgPSBbc3R5bGVzLmJvZHkuZXVpU3dpdGNoX19ib2R5LCBkaXNhYmxlZCA/IHN0eWxlcy5ib2R5LmRpc2FibGVkW3NpemVdIDogY2hlY2tlZCA/IHN0eWxlcy5ib2R5Lm9uIDogc3R5bGVzLmJvZHkub2ZmXTtcbiAgdmFyIGljb25zU3R5bGVzID0gW3N0eWxlcy5pY29ucy5ldWlTd2l0Y2hfX2ljb25zLCBjaGVja2VkID8gc3R5bGVzLmljb25zLm9uIDogc3R5bGVzLmljb25zLm9mZiwgZGlzYWJsZWQgPyBzdHlsZXMuaWNvbnMuZGlzYWJsZWQgOiBzdHlsZXMuaWNvbnMuZW5hYmxlZF07XG4gIHZhciB0aHVtYlN0eWxlcyA9IFtzdHlsZXMudGh1bWIuZXVpU3dpdGNoX190aHVtYiwgY2hlY2tlZCA/IHN0eWxlcy50aHVtYi5vbltzaXplXSA6IHN0eWxlcy50aHVtYi5vZmZdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoZGlzYWJsZWQgPyBbc3R5bGVzLnRodW1iLmRpc2FibGVkLmRpc2FibGVkLCBzdHlsZXMudGh1bWIuZGlzYWJsZWRbc2l6ZV1dIDogW3N0eWxlcy50aHVtYi5lbmFibGVkLmVuYWJsZWQsIHN0eWxlcy50aHVtYi5lbmFibGVkW3NpemVdXSkpO1xuICB2YXIgbGFiZWxTdHlsZXMgPSBbc3R5bGVzLmxhYmVsLmV1aVN3aXRjaF9fbGFiZWwsIHN0eWxlcy5sYWJlbFtzaXplXSwgZGlzYWJsZWQgJiYgc3R5bGVzLmxhYmVsLmRpc2FibGVkLCBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuY3NzXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICBpZDogc3dpdGNoSWQsXG4gICAgXCJhcmlhLWNoZWNrZWRcIjogY2hlY2tlZCB8fCBmYWxzZSxcbiAgICBjc3M6IGJ1dHRvblN0eWxlcyxcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dpdGNoX19idXR0b25cIixcbiAgICByb2xlOiBcInN3aXRjaFwiLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgXCJhcmlhLWxhYmVsXCI6IHNob3dMYWJlbCA/IHVuZGVmaW5lZCA6IGxhYmVsLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHNob3dMYWJlbCA/IGxhYmVsSWQgOiB1bmRlZmluZWRcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjc3M6IGJvZHlTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBcImV1aVN3aXRjaF9fYm9keVwiXG4gIH0sICEoY29tcHJlc3NlZCB8fCBtaW5pKSAmJiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY3NzOiBpY29uc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dpdGNoX19pY29uc1wiXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiY2hlY2tcIixcbiAgICBzaXplOiBcIm1cIlxuICB9KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJjcm9zc1wiLFxuICAgIHNpemU6IFwibVwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjc3M6IHRodW1iU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX3RodW1iXCJcbiAgfSkpLCBzaG93TGFiZWwgJiZcbiAgLy8gPGJ1dHRvbj4gKyA8bGFiZWw+IGhhcyBwb29yIHNjcmVlbiByZWFkZXIgc3VwcG9ydC5cbiAgLy8gQ2xpY2sgaGFuZGxlciBhZGRlZCB0byBzaW11bGF0ZSBuYXR1cmFsLCBzZWNvbmRhcnkgPGxhYmVsPiBpbnRlcmFjdGl2aXR5LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvbm8tbm9uaW50ZXJhY3RpdmUtZWxlbWVudC1pbnRlcmFjdGlvbnNcbiAgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe30sIGxhYmVsUHJvcHMsIHtcbiAgICBjc3M6IGxhYmVsU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogbGFiZWxDbGFzc2VzLFxuICAgIGlkOiBsYWJlbElkLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2tcbiAgfSksIGxhYmVsKSk7XG59O1xuRXVpU3dpdGNoLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogV2hldGhlciB0byByZW5kZXIgdGhlIHRleHQgbGFiZWxcbiAgICAgICAqL1xuICBzaG93TGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIE11c3QgYmUgYSBzdHJpbmcgaWYgYHNob3dMYWJlbGAgcHJvcCBpcyBmYWxzZVxuICAgICAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICBjaGVja2VkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIENvbXByZXNzZWQgc3dpdGNoZXMgYXJlIHNtYWxsZXIgYW5kIGNvbnRhaW4gbm8gaWNvbiBzaWduaWZpZXJzXG4gICAgICAgKi9cbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgbGFiZWwncyBgPHNwYW4gLz5gXG4gICAgICAgKi9cbiAgbGFiZWxQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgLyoqXG4gICAgICAgKiBNaW5pIHN0eWxpbmcgaXMgc2ltaWxhciB0byBjb21wcmVzc2VkLCBidXQgZXZlbiBzbWFsbGVyLlxuICAgICAgICogSXQncyB1bmRvY3VtZW50ZWQgYmVjYXVzZSBpdCBoYXMgdmVyeSBzcGVjaWZpYyB1c2VzLlxuICAgICAgICovXG4gIG1pbmk6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB0aW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgZXVpRm9jdXNSaW5nLCBldWlGb250U2l6ZSwgbG9naWNhbENTUywgbG9naWNhbFNpemVDU1MsIG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlGb3JtQ3VzdG9tQ29udHJvbFZhcmlhYmxlcyB9IGZyb20gJy4uL2Zvcm0uc3R5bGVzJztcbnZhciBldWlTd2l0Y2hWYXJzID0gZnVuY3Rpb24gZXVpU3dpdGNoVmFycyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgZm9ybVZhcnMgPSBldWlGb3JtQ3VzdG9tQ29udHJvbFZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgY29sb3JzID0ge1xuICAgIG9uOiBmb3JtVmFycy5jb2xvcnMuc2VsZWN0ZWQsXG4gICAgb2ZmOiBmb3JtVmFycy5jb2xvcnMudW5zZWxlY3RlZEJvcmRlcixcbiAgICBkaXNhYmxlZDogZm9ybVZhcnMuY29sb3JzLmRpc2FibGVkLFxuICAgIHRodW1iOiBmb3JtVmFycy5jb2xvcnMuc2VsZWN0ZWRJY29uLFxuICAgIHRodW1iQm9yZGVyOiBmb3JtVmFycy5jb2xvcnMudW5zZWxlY3RlZEJvcmRlcixcbiAgICB0aHVtYkJvcmRlckRpc2FibGVkOiBmb3JtVmFycy5jb2xvcnMudW5zZWxlY3RlZEJvcmRlclxuICB9O1xuICB2YXIgc2l6ZXMgPSB7XG4gICAgdW5jb21wcmVzc2VkOiB7XG4gICAgICBoZWlnaHQ6IG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuc2l6ZS5iYXNlLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAqIDEuMjU7XG4gICAgICB9KSxcbiAgICAgIHdpZHRoOiBtYXRoV2l0aFVuaXRzKFtldWlUaGVtZS5zaXplLnh4bCwgZXVpVGhlbWUuc2l6ZS54c10sIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgICAgIHJldHVybiB4ICsgeTtcbiAgICAgIH0pLFxuICAgICAgdGh1bWJTY2FsZXM6IHtcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgICAgaG92ZXI6IDEuMDUsXG4gICAgICAgIGFjdGl2ZTogMC45XG4gICAgICB9XG4gICAgfSxcbiAgICBjb21wcmVzc2VkOiB7XG4gICAgICBoZWlnaHQ6IGV1aVRoZW1lLnNpemUuYmFzZSxcbiAgICAgIHdpZHRoOiBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUuYmFzZSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggKiAxLjc1O1xuICAgICAgfSksXG4gICAgICB0aHVtYlNjYWxlczoge1xuICAgICAgICBkZWZhdWx0OiAwLjksXG4gICAgICAgIGhvdmVyOiAwLjk1LFxuICAgICAgICBhY3RpdmU6IDAuOFxuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0IG1pbmkoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHQ6IG1hdGhXaXRoVW5pdHModGhpcy51bmNvbXByZXNzZWQuaGVpZ2h0LCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgIHJldHVybiB4IC8gMjtcbiAgICAgICAgfSksXG4gICAgICAgIHdpZHRoOiBtYXRoV2l0aFVuaXRzKHRoaXMudW5jb21wcmVzc2VkLndpZHRoLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgIHJldHVybiB4IC8gMjtcbiAgICAgICAgfSksXG4gICAgICAgIHRodW1iU2NhbGVzOiB7XG4gICAgICAgICAgZGVmYXVsdDogMC44LFxuICAgICAgICAgIGhvdmVyOiB1bmRlZmluZWQsXG4gICAgICAgICAgYWN0aXZlOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIHZhciBhbmltYXRpb24gPSB7XG4gICAgc3BlZWQ6IGV1aVRoZW1lLmFuaW1hdGlvbi5ub3JtYWwsXG4gICAgZWFzaW5nOiBldWlUaGVtZS5hbmltYXRpb24uYm91bmNlXG4gIH07XG4gIHZhciBsYWJlbCA9IHtcbiAgICBkaXNhYmxlZDogZm9ybVZhcnMuY29sb3JzLmRpc2FibGVkTGFiZWwsXG4gICAgZ2FwOiBmb3JtVmFycy5zaXplcy5sYWJlbEdhcFxuICB9O1xuICByZXR1cm4ge1xuICAgIHNpemVzOiBzaXplcyxcbiAgICBjb2xvcnM6IGNvbG9ycyxcbiAgICBhbmltYXRpb246IGFuaW1hdGlvbixcbiAgICBsYWJlbDogbGFiZWxcbiAgfTtcbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiYjg2cG53LWRpc2FibGVkXCIsXG4gIHN0eWxlczogXCJjdXJzb3I6bm90LWFsbG93ZWQ7bGFiZWw6ZGlzYWJsZWQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiYjg2cG53LWRpc2FibGVkXCIsXG4gIHN0eWxlczogXCJjdXJzb3I6bm90LWFsbG93ZWQ7bGFiZWw6ZGlzYWJsZWQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJlZzY4cHAtZXVpU3dpdGNoXCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7LyogUmVxdWlyZWQgZm9yIGlubGluZS1mbGV4IENTUyB0byBub3QgcmVuZGVyIGFuIGV4dHJhIDItM3B4IG9mIHN0cnV0IGhlaWdodFxcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI3NTM2NDYxLzQyOTQ0NjIgKi92ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGFiZWw6ZXVpU3dpdGNoO1wiXG59IDoge1xuICBuYW1lOiBcImVnNjhwcC1ldWlTd2l0Y2hcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDsvKiBSZXF1aXJlZCBmb3IgaW5saW5lLWZsZXggQ1NTIHRvIG5vdCByZW5kZXIgYW4gZXh0cmEgMi0zcHggb2Ygc3RydXQgaGVpZ2h0XFxuICAgICAgICogQHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjc1MzY0NjEvNDI5NDQ2MiAqL3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtsYWJlbDpldWlTd2l0Y2g7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpU3dpdGNoU3R5bGVzID0gZnVuY3Rpb24gZXVpU3dpdGNoU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgc3dpdGNoVmFycyA9IGV1aVN3aXRjaFZhcnMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIHtcbiAgICBldWlTd2l0Y2g6IF9yZWYzLFxuICAgIC8vIFNraXAgY3NzYGAgdG8gYXZvaWQgZ2VuZXJhdGluZyBhbiBleHRyYSBFbW90aW9uIGNsYXNzTmFtZVxuICAgIGVuYWJsZWQ6IFwiXFxuICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICBcIixcbiAgICBkaXNhYmxlZDogX3JlZjIsXG4gICAgYnV0dG9uOiBidXR0b25TdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBzd2l0Y2hWYXJzKSxcbiAgICAvLyBUaGUgdHJhY2sgYm9keSBtdXN0IGJlIHNlcGFyYXRlIGZyb20gdGhlIGJ1dHRvbiB3cmFwcGVyLCBiZWNhdXNlIHRoZVxuICAgIC8vIGljb25zIGhhdmUgdGhlaXIgb3ZlcmZsb3cgaGlkZGVuIG91dHNpZGUgdGhlIGJ1dHRvbiwgYnV0IHRoZSB0aHVtYiBkb2Vzbid0XG4gICAgYm9keTogYm9keVN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHN3aXRjaFZhcnMpLFxuICAgIGljb25zOiBpY29uU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwgc3dpdGNoVmFycyksXG4gICAgdGh1bWI6IHRodW1iU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwgc3dpdGNoVmFycyksXG4gICAgbGFiZWw6IGxhYmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwgc3dpdGNoVmFycylcbiAgfTtcbn07XG52YXIgYnV0dG9uU3R5bGVzID0gZnVuY3Rpb24gYnV0dG9uU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwgc3dpdGNoVmFycykge1xuICB2YXIgX3N3aXRjaFZhcnMkc2l6ZXMgPSBzd2l0Y2hWYXJzLnNpemVzLFxuICAgIHVuY29tcHJlc3NlZCA9IF9zd2l0Y2hWYXJzJHNpemVzLnVuY29tcHJlc3NlZCxcbiAgICBjb21wcmVzc2VkID0gX3N3aXRjaFZhcnMkc2l6ZXMuY29tcHJlc3NlZCxcbiAgICBtaW5pID0gX3N3aXRjaFZhcnMkc2l6ZXMubWluaTtcbiAgcmV0dXJuIHtcbiAgICBldWlTd2l0Y2hfX2J1dHRvbjogLyojX19QVVJFX18qL2NzcyhcImZsZXgtc2hyaW5rOjA7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6aW5oZXJpdDtcIiwgZXVpRm9jdXNSaW5nKGV1aVRoZW1lQ29udGV4dCwgJ291dHNldCcpLCBcIjs7bGFiZWw6ZXVpU3dpdGNoX19idXR0b247XCIpLFxuICAgIC8vIFNraXAgY3NzYGAgdG8gYXZvaWQgZ2VuZXJhdGluZyBhbiBFbW90aW9uIGNsYXNzTmFtZVxuICAgIHVuY29tcHJlc3NlZDogXCJcXG4gICAgICBcIi5jb25jYXQobG9naWNhbFNpemVDU1ModW5jb21wcmVzc2VkLndpZHRoLCB1bmNvbXByZXNzZWQuaGVpZ2h0KSwgXCJcXG4gICAgICBib3JkZXItcmFkaXVzOiBcIikuY29uY2F0KHVuY29tcHJlc3NlZC5oZWlnaHQsIFwiO1xcbiAgICBcIiksXG4gICAgY29tcHJlc3NlZDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhjb21wcmVzc2VkLndpZHRoLCBjb21wcmVzc2VkLmhlaWdodCksIFwiIGJvcmRlci1yYWRpdXM6XCIsIGNvbXByZXNzZWQuaGVpZ2h0LCBcIjs7bGFiZWw6Y29tcHJlc3NlZDtcIiksXG4gICAgbWluaTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhtaW5pLndpZHRoLCBtaW5pLmhlaWdodCksIFwiIGJvcmRlci1yYWRpdXM6XCIsIG1pbmkuaGVpZ2h0LCBcIjs7bGFiZWw6bWluaTtcIilcbiAgfTtcbn07XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxOWN3dTZ2LWV1aVN3aXRjaF9fYm9keVwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7bGFiZWw6ZXVpU3dpdGNoX19ib2R5O1wiXG59IDoge1xuICBuYW1lOiBcIjE5Y3d1NnYtZXVpU3dpdGNoX19ib2R5XCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO292ZXJmbG93OmhpZGRlbjtib3JkZXItcmFkaXVzOmluaGVyaXQ7cG9pbnRlci1ldmVudHM6bm9uZTtsYWJlbDpldWlTd2l0Y2hfX2JvZHk7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBib2R5U3R5bGVzID0gZnVuY3Rpb24gYm9keVN0eWxlcyhfcmVmNCwgX3JlZjUpIHtcbiAgdmFyIGNvbG9yTW9kZSA9IF9yZWY0LmNvbG9yTW9kZTtcbiAgdmFyIGNvbG9ycyA9IF9yZWY1LmNvbG9ycztcbiAgLy8gVGhpcyBpcyBwcm9iYWJseSB2ZXJ5IGV4dHJhLCBidXQgdGhlIHZpc3VhbCB3ZWlnaHQgb2YgdGhlIGRlZmF1bHRcbiAgLy8gZGlzYWJsZWQgY3VzdG9tIGNvbnRyb2wgZmVlbHMgZGlmZmVyZW50IGluIGxpZ2h0IG1vZGUgZGVwZW5kaW5nXG4gIC8vIG9uIHRoZSBzaXplIG9mIHRoZSBzd2l0Y2gsIHNvIEknbSB0aW50aW5nIGl0IGJhc2VkIG9uIHRoYXQuXG4gIC8vIEdvdHRhIGp1c3RpZnkgbXkgc3R1cGlkbHkgZXhwZW5zaXZlIGFydCBkZWdyZWUhXG4gIHZhciBfY2FsY3VsYXRlRGlzYWJsZWRDb2xvciA9IGZ1bmN0aW9uIF9jYWxjdWxhdGVEaXNhYmxlZENvbG9yKHRpbnRBbW91bnQpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL2NzcyhcImxhYmVsOmRpc2FibGVkO2JhY2tncm91bmQtY29sb3I6XCIsIGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gY29sb3JzLmRpc2FibGVkIDogdGludChjb2xvcnMuZGlzYWJsZWQsIHRpbnRBbW91bnQpLCBcIjtcIik7XG4gIH07XG4gIHJldHVybiB7XG4gICAgZXVpU3dpdGNoX19ib2R5OiBfcmVmLFxuICAgIG9uOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgY29sb3JzLm9uLCBcIjs7bGFiZWw6b247XCIpLFxuICAgIG9mZjogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIGNvbG9ycy5vZmYsIFwiOztsYWJlbDpvZmY7XCIpLFxuICAgIGRpc2FibGVkOiB7XG4gICAgICB1bmNvbXByZXNzZWQ6IF9jYWxjdWxhdGVEaXNhYmxlZENvbG9yKDAuNSksXG4gICAgICBjb21wcmVzc2VkOiBfY2FsY3VsYXRlRGlzYWJsZWRDb2xvcigwLjI1KSxcbiAgICAgIG1pbmk6IF9jYWxjdWxhdGVEaXNhYmxlZENvbG9yKDApXG4gICAgfVxuICB9O1xufTtcbnZhciBpY29uU3R5bGVzID0gZnVuY3Rpb24gaWNvblN0eWxlcyhfcmVmNiwgX3JlZjcpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjYuZXVpVGhlbWU7XG4gIHZhciBjb2xvcnMgPSBfcmVmNy5jb2xvcnMsXG4gICAgYW5pbWF0aW9uID0gX3JlZjcuYW5pbWF0aW9uO1xuICByZXR1cm4ge1xuICAgIGV1aVN3aXRjaF9faWNvbnM6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygndmVydGljYWwnLCAwKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCAnLTUwJScpLCBcIiBcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMjAwJScpLCBcIiBkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDthbGlnbi1pdGVtczpjZW50ZXI7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIiBcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbi1wcm9wZXJ0eTppbnNldC1pbmxpbmUtc3RhcnQ7dHJhbnNpdGlvbi1kdXJhdGlvbjpcIiwgYW5pbWF0aW9uLnNwZWVkLCBcIjt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpcIiwgYW5pbWF0aW9uLmVhc2luZywgXCI7fTtsYWJlbDpldWlTd2l0Y2hfX2ljb25zO1wiKSxcbiAgICBvbjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdsZWZ0JywgJy0yNSUnKSwgXCI7O2xhYmVsOm9uO1wiKSxcbiAgICBvZmY6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbGVmdCcsICctNzUlJyksIFwiOztsYWJlbDpvZmY7XCIpLFxuICAgIGVuYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgY29sb3JzLnRodW1iLCBcIjs7bGFiZWw6ZW5hYmxlZDtcIiksXG4gICAgZGlzYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgY29sb3JzLnRodW1iQm9yZGVyRGlzYWJsZWQsIFwiOztsYWJlbDpkaXNhYmxlZDtcIilcbiAgfTtcbn07XG52YXIgdGh1bWJTdHlsZXMgPSBmdW5jdGlvbiB0aHVtYlN0eWxlcyhfcmVmOCwgc3dpdGNoVmFycykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmOC5ldWlUaGVtZTtcbiAgdmFyIHNpemVzID0gc3dpdGNoVmFycy5zaXplcyxcbiAgICBjb2xvcnMgPSBzd2l0Y2hWYXJzLmNvbG9ycyxcbiAgICBhbmltYXRpb24gPSBzd2l0Y2hWYXJzLmFuaW1hdGlvbjtcbiAgdmFyIHVuY29tcHJlc3NlZCA9IHNpemVzLnVuY29tcHJlc3NlZCxcbiAgICBjb21wcmVzc2VkID0gc2l6ZXMuY29tcHJlc3NlZCxcbiAgICBtaW5pID0gc2l6ZXMubWluaTtcbiAgdmFyIF9jYWxjdWxhdGVTY2FsZSA9IGZ1bmN0aW9uIF9jYWxjdWxhdGVTY2FsZShzaXplLCBob3ZlckFjdGl2ZVN0YXRlcykge1xuICAgIHZhciBiYXNlU2NhbGUgPSBcInRyYW5zZm9ybTogc2NhbGUoXCIuY29uY2F0KHNpemVzW3NpemVdLnRodW1iU2NhbGVzLmRlZmF1bHQsIFwiKTtcIik7XG4gICAgdmFyIHN0YXRlcyA9IGhvdmVyQWN0aXZlU3RhdGVzID8gXCJcXG4gICAgICAuZXVpU3dpdGNoOmhvdmVyICYge1xcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZShcIi5jb25jYXQoc2l6ZXNbc2l6ZV0udGh1bWJTY2FsZXMuaG92ZXIsIFwiKTtcXG4gICAgICB9XFxuICAgICAgLmV1aVN3aXRjaDphY3RpdmUgJiB7XFxuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKFwiKS5jb25jYXQoc2l6ZXNbc2l6ZV0udGh1bWJTY2FsZXMuYWN0aXZlLCBcIik7XFxuICAgICAgfVwiKSA6ICcnO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChiYXNlU2NhbGUpLmNvbmNhdChzdGF0ZXMpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGV1aVN3aXRjaF9fdGh1bWI6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygndmVydGljYWwnLCAwKSwgXCIgYXNwZWN0LXJhdGlvOjE7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJ2ZpdC1jb250ZW50JyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCAnMTAwJScpLCBcIiBib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uLXByb3BlcnR5Omluc2V0LWlubGluZS1zdGFydCx0cmFuc2Zvcm0sYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3I7dHJhbnNpdGlvbi1kdXJhdGlvbjpcIiwgYW5pbWF0aW9uLnNwZWVkLCBcIjt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpcIiwgYW5pbWF0aW9uLmVhc2luZywgXCI7fTtsYWJlbDpldWlTd2l0Y2hfX3RodW1iO1wiKSxcbiAgICBvZmY6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbGVmdCcsIDApLCBcIjs7bGFiZWw6b2ZmO1wiKSxcbiAgICBnZXQgb24oKSB7XG4gICAgICAvLyByaWdodDogMCB3b3JrcyBidXQgZG9lc24ndCB0cmFuc2l0aW9uL2FuaW1hdGUsIHNvIHdlIG5lZWQgdG9cbiAgICAgIC8vIG1hbnVhbGx5IGNhbGN1bGF0ZSB0aGUgbGVmdCBwb3NpdGlvbiBwZXIgc3dpdGNoIHNpemVcbiAgICAgIHZhciBfY2FsY3VsYXRlTGVmdCA9IGZ1bmN0aW9uIF9jYWxjdWxhdGVMZWZ0KGJvZHlXaWR0aCwgdGh1bWJXaWR0aCkge1xuICAgICAgICB2YXIgbGVmdFBvc2l0aW9uID0gbWF0aFdpdGhVbml0cyhbYm9keVdpZHRoLCB0aHVtYldpZHRoXSwgZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgICByZXR1cm4geCAtIHk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL2NzcyhcImxhYmVsOm9uO1wiLCBsb2dpY2FsQ1NTKCdsZWZ0JywgbGVmdFBvc2l0aW9uKSwgXCI7XCIpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVuY29tcHJlc3NlZDogX2NhbGN1bGF0ZUxlZnQodW5jb21wcmVzc2VkLndpZHRoLCB1bmNvbXByZXNzZWQuaGVpZ2h0KSxcbiAgICAgICAgY29tcHJlc3NlZDogX2NhbGN1bGF0ZUxlZnQoY29tcHJlc3NlZC53aWR0aCwgY29tcHJlc3NlZC5oZWlnaHQpLFxuICAgICAgICBtaW5pOiBfY2FsY3VsYXRlTGVmdChtaW5pLndpZHRoLCBtaW5pLmhlaWdodClcbiAgICAgIH07XG4gICAgfSxcbiAgICBlbmFibGVkOiB7XG4gICAgICBlbmFibGVkOiBcIlxcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIuY29uY2F0KGNvbG9ycy50aHVtYiwgXCI7XFxuICAgICAgICBib3JkZXI6IFwiKS5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiKS5jb25jYXQoY29sb3JzLnRodW1iQm9yZGVyLCBcIjtcXG4gICAgICBcIiksXG4gICAgICB1bmNvbXByZXNzZWQ6IF9jYWxjdWxhdGVTY2FsZSgndW5jb21wcmVzc2VkJywgdHJ1ZSksXG4gICAgICBjb21wcmVzc2VkOiBfY2FsY3VsYXRlU2NhbGUoJ2NvbXByZXNzZWQnLCB0cnVlKSxcbiAgICAgIG1pbmk6IF9jYWxjdWxhdGVTY2FsZSgnbWluaScsIGZhbHNlKVxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIGRpc2FibGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIiwgY29sb3JzLnRodW1iQm9yZGVyRGlzYWJsZWQsIFwiOztsYWJlbDpkaXNhYmxlZDtcIiksXG4gICAgICB1bmNvbXByZXNzZWQ6IF9jYWxjdWxhdGVTY2FsZSgndW5jb21wcmVzc2VkJywgZmFsc2UpLFxuICAgICAgY29tcHJlc3NlZDogX2NhbGN1bGF0ZVNjYWxlKCdjb21wcmVzc2VkJywgZmFsc2UpLFxuICAgICAgbWluaTogX2NhbGN1bGF0ZVNjYWxlKCdtaW5pJywgZmFsc2UpXG4gICAgfVxuICB9O1xufTtcbnZhciBsYWJlbFN0eWxlcyA9IGZ1bmN0aW9uIGxhYmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwgX3JlZjkpIHtcbiAgdmFyIHNpemVzID0gX3JlZjkuc2l6ZXMsXG4gICAgbGFiZWwgPSBfcmVmOS5sYWJlbDtcbiAgdmFyIHVuY29tcHJlc3NlZCA9IHNpemVzLnVuY29tcHJlc3NlZCxcbiAgICBjb21wcmVzc2VkID0gc2l6ZXMuY29tcHJlc3NlZCxcbiAgICBtaW5pID0gc2l6ZXMubWluaTtcbiAgcmV0dXJuIHtcbiAgICBldWlTd2l0Y2hfX2xhYmVsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIGxhYmVsLmdhcCksIFwiOztsYWJlbDpldWlTd2l0Y2hfX2xhYmVsO1wiKSxcbiAgICAvLyBTa2lwIGNzc2BgIHRvIGF2b2lkIGdlbmVyYXRpbmcgYW4gRW1vdGlvbiBjbGFzc05hbWVcbiAgICB1bmNvbXByZXNzZWQ6IFwiXFxuICAgICAgZm9udC1zaXplOiBcIi5jb25jYXQoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdCh1bmNvbXByZXNzZWQuaGVpZ2h0LCBcIjtcXG4gICAgXCIpLFxuICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKS5mb250U2l6ZSwgXCI7bGluZS1oZWlnaHQ6XCIsIGNvbXByZXNzZWQuaGVpZ2h0LCBcIjs7bGFiZWw6Y29tcHJlc3NlZDtcIiksXG4gICAgbWluaTogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnKS5mb250U2l6ZSwgXCI7bGluZS1oZWlnaHQ6XCIsIG1pbmkuaGVpZ2h0LCBcIjs7bGFiZWw6bWluaTtcIiksXG4gICAgZGlzYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgbGFiZWwuZGlzYWJsZWQsIFwiOztsYWJlbDpkaXNhYmxlZDtcIilcbiAgfTtcbn07IiwgImltcG9ydCBjcmVhdGVFbW90aW9uIGZyb20gJy4uL2NyZWF0ZS1pbnN0YW5jZS9kaXN0L2Vtb3Rpb24tY3NzLWNyZWF0ZS1pbnN0YW5jZS5lc20uanMnO1xuaW1wb3J0ICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL3V0aWxzJztcblxudmFyIF9jcmVhdGVFbW90aW9uID0gY3JlYXRlRW1vdGlvbih7XG4gIGtleTogJ2Nzcydcbn0pLFxuICAgIGZsdXNoID0gX2NyZWF0ZUVtb3Rpb24uZmx1c2gsXG4gICAgaHlkcmF0ZSA9IF9jcmVhdGVFbW90aW9uLmh5ZHJhdGUsXG4gICAgY3ggPSBfY3JlYXRlRW1vdGlvbi5jeCxcbiAgICBtZXJnZSA9IF9jcmVhdGVFbW90aW9uLm1lcmdlLFxuICAgIGdldFJlZ2lzdGVyZWRTdHlsZXMgPSBfY3JlYXRlRW1vdGlvbi5nZXRSZWdpc3RlcmVkU3R5bGVzLFxuICAgIGluamVjdEdsb2JhbCA9IF9jcmVhdGVFbW90aW9uLmluamVjdEdsb2JhbCxcbiAgICBrZXlmcmFtZXMgPSBfY3JlYXRlRW1vdGlvbi5rZXlmcmFtZXMsXG4gICAgY3NzID0gX2NyZWF0ZUVtb3Rpb24uY3NzLFxuICAgIHNoZWV0ID0gX2NyZWF0ZUVtb3Rpb24uc2hlZXQsXG4gICAgY2FjaGUgPSBfY3JlYXRlRW1vdGlvbi5jYWNoZTtcblxuZXhwb3J0IHsgY2FjaGUsIGNzcywgY3gsIGZsdXNoLCBnZXRSZWdpc3RlcmVkU3R5bGVzLCBoeWRyYXRlLCBpbmplY3RHbG9iYWwsIGtleWZyYW1lcywgbWVyZ2UsIHNoZWV0IH07XG4iLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNoaWxkcmVuXCIsIFwiaGVhZGVyWmluZGV4TG9jYXRpb25cIiwgXCJtYXNrUmVmXCJdO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjeCB9IGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgdXNlQ29tYmluZWRSZWZzLCB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVBvcnRhbCB9IGZyb20gJy4uL3BvcnRhbCc7XG5pbXBvcnQgeyBldWlPdmVybGF5TWFza1N0eWxlcyB9IGZyb20gJy4vb3ZlcmxheV9tYXNrLnN0eWxlcyc7XG5pbXBvcnQgeyBldWlPdmVybGF5TWFza0JvZHlTdHlsZXMgfSBmcm9tICcuL292ZXJsYXlfbWFza19ib2R5LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlPdmVybGF5TWFzayA9IGZ1bmN0aW9uIEV1aU92ZXJsYXlNYXNrKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBfcmVmJGhlYWRlclppbmRleExvY2EgPSBfcmVmLmhlYWRlclppbmRleExvY2F0aW9uLFxuICAgIGhlYWRlclppbmRleExvY2F0aW9uID0gX3JlZiRoZWFkZXJaaW5kZXhMb2NhID09PSB2b2lkIDAgPyAnYWJvdmUnIDogX3JlZiRoZWFkZXJaaW5kZXhMb2NhLFxuICAgIG1hc2tSZWYgPSBfcmVmLm1hc2tSZWYsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgb3ZlcmxheU1hc2tOb2RlID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRPdmVybGF5TWFza05vZGUgPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgY29tYmluZWRNYXNrUmVmID0gdXNlQ29tYmluZWRSZWZzKFtzZXRPdmVybGF5TWFza05vZGUsIG1hc2tSZWZdKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aU92ZXJsYXlNYXNrU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IGN4KFtzdHlsZXMuZXVpT3ZlcmxheU1hc2ssIHN0eWxlc1tcIlwiLmNvbmNhdChoZWFkZXJaaW5kZXhMb2NhdGlvbiwgXCJIZWFkZXJcIildXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFvdmVybGF5TWFza05vZGUpIHJldHVybjtcbiAgICBrZXlzT2YocmVzdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAodHlwZW9mIHJlc3Rba2V5XSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIHByb3BlcnR5IHR5cGUuIEV1aU92ZXJsYXlNYXNrIHByb3BlcnR5IFwiLmNvbmNhdChrZXksIFwiIGlzIG5vdCBhIHN0cmluZy5cIikpO1xuICAgICAgfVxuICAgICAgaWYgKG92ZXJsYXlNYXNrTm9kZSkge1xuICAgICAgICBvdmVybGF5TWFza05vZGUuc2V0QXR0cmlidXRlKGtleSwgcmVzdFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW292ZXJsYXlNYXNrTm9kZV0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuXG4gIC8vIE5vdGU6IFVzZSBgY2xhc3NMaXN0LmFkZC9yZW1vdmVgIGluc3RlYWQgb2Ygc2V0dGluZyB0aGUgZW50aXJlIGBjbGFzc05hbWVgXG4gIC8vIHNvIGFzIG5vdCB0byBvdmVycmlkZSBhbnkgZXhpc3RpbmcgY2xhc3NlcyBzZXQgYnkgYEV1aVBvcnRhbGBcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAob3ZlcmxheU1hc2tOb2RlKSB7XG4gICAgICBvdmVybGF5TWFza05vZGUuY2xhc3NMaXN0LmFkZCgnZXVpT3ZlcmxheU1hc2snLCBjc3NTdHlsZXMpO1xuICAgICAgb3ZlcmxheU1hc2tOb2RlLmRhdGFzZXQucmVsYXRpdmVUb0hlYWRlciA9IGhlYWRlclppbmRleExvY2F0aW9uO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlNYXNrTm9kZS5jbGFzc0xpc3QucmVtb3ZlKGNzc1N0eWxlcyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW292ZXJsYXlNYXNrTm9kZSwgY3NzU3R5bGVzLCBoZWFkZXJaaW5kZXhMb2NhdGlvbl0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjbGFzc05hbWUgJiYgb3ZlcmxheU1hc2tOb2RlKSB7XG4gICAgICB2YXIgX292ZXJsYXlNYXNrTm9kZSRjbGFzO1xuICAgICAgdmFyIGNsYXNzTmFtZUFyZ3MgPSBjbGFzc05hbWUuc3BsaXQoJyAnKTsgLy8gVGhlIGBjbGFzc0xpc3RgIEFQSSBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgY2xhc3NlcyBpbiB0aGUgc2FtZSBzdHJpbmdcbiAgICAgIChfb3ZlcmxheU1hc2tOb2RlJGNsYXMgPSBvdmVybGF5TWFza05vZGUuY2xhc3NMaXN0KS5hZGQuYXBwbHkoX292ZXJsYXlNYXNrTm9kZSRjbGFzLCBfdG9Db25zdW1hYmxlQXJyYXkoY2xhc3NOYW1lQXJncykpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9vdmVybGF5TWFza05vZGUkY2xhczI7XG4gICAgICAgIHJldHVybiAoX292ZXJsYXlNYXNrTm9kZSRjbGFzMiA9IG92ZXJsYXlNYXNrTm9kZS5jbGFzc0xpc3QpLnJlbW92ZS5hcHBseShfb3ZlcmxheU1hc2tOb2RlJGNsYXMyLCBfdG9Db25zdW1hYmxlQXJyYXkoY2xhc3NOYW1lQXJncykpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtvdmVybGF5TWFza05vZGUsIGNsYXNzTmFtZV0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3J0YWwsIHtcbiAgICBwb3J0YWxSZWY6IGNvbWJpbmVkTWFza1JlZlxuICB9LCBfX19FbW90aW9uSlNYKEdsb2JhbCwge1xuICAgIHN0eWxlczogZXVpT3ZlcmxheU1hc2tCb2R5U3R5bGVzXG4gIH0pLCBjaGlsZHJlbik7XG59O1xuRXVpT3ZlcmxheU1hc2sucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIFNob3VsZCB0aGUgbWFzayB2aXN1YWxseSBzaXQgYWJvdmUgb3IgYmVsb3cgdGhlIEV1aUhlYWRlciAoY29udHJvbGxlZCBieSB6LWluZGV4KVxuICAgICAqL1xuICBoZWFkZXJaaW5kZXhMb2NhdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcImFib3ZlXCIsIFwiYmVsb3dcIl0pLFxuICAvKipcbiAgICAgKiBSZWFjdCByZWYgdG8gYmUgcGFzc2VkIHRvIHRoZSB3cmFwcGluZyBjb250YWluZXJcbiAgICAgKi9cbiAgbWFza1JlZjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vY3NzJztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGV1aUFuaW1GYWRlSW4gfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmV4cG9ydCB2YXIgZXVpT3ZlcmxheU1hc2tTdHlsZXMgPSBmdW5jdGlvbiBldWlPdmVybGF5TWFza1N0eWxlcyhfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpT3ZlcmxheU1hc2s6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpmaXhlZDtcIiwgbG9naWNhbENTUygndG9wJywgMCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdsZWZ0JywgMCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdyaWdodCcsIDApLCBcIiBcIiwgbG9naWNhbENTUygnYm90dG9tJywgMCksIFwiIGRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtcIiwgbG9naWNhbENTUygncGFkZGluZy1ib3R0b20nLCAnMTB2aCcpLCBcIiBhbmltYXRpb246XCIsIGV1aUFuaW1GYWRlSW4sIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCIgZWFzZS1pbjtiYWNrZ3JvdW5kOlwiLCB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMuaW5rLCAwLjUpLCBcIjs7bGFiZWw6ZXVpT3ZlcmxheU1hc2s7XCIpLFxuICAgIGFib3ZlSGVhZGVyOiAvKiNfX1BVUkVfXyovY3NzKFwiei1pbmRleDpcIiwgZXVpVGhlbWUubGV2ZWxzLm1hc2ssIFwiOztsYWJlbDphYm92ZUhlYWRlcjtcIiksXG4gICAgYmVsb3dIZWFkZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJ6LWluZGV4OlwiLCBldWlUaGVtZS5sZXZlbHMubWFza0JlbG93SGVhZGVyLCBcIjtcIiwgbG9naWNhbENTUygndG9wJywgJ3ZhcigtLWV1aUZpeGVkSGVhZGVyc09mZnNldCwgMCknKSwgXCI7O2xhYmVsOmJlbG93SGVhZGVyO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuZXhwb3J0IHZhciBldWlPdmVybGF5TWFza0JvZHlTdHlsZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTMxMTYwLWV1aU92ZXJsYXlNYXNrQm9keVN0eWxlc1wiLFxuICBzdHlsZXM6IFwiYm9keXtvdmVyZmxvdzpoaWRkZW47fTtsYWJlbDpldWlPdmVybGF5TWFza0JvZHlTdHlsZXM7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTMxMTYwLWV1aU92ZXJsYXlNYXNrQm9keVN0eWxlc1wiLFxuICBzdHlsZXM6IFwiYm9keXtvdmVyZmxvdzpoaWRkZW47fTtsYWJlbDpldWlPdmVybGF5TWFza0JvZHlTdHlsZXM7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTsiLCAiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7XG4gIGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgcmV0dXJuIGU7XG59XG5leHBvcnQgeyBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGFzIGRlZmF1bHQgfTsiLCAidmFyIHNhZmVJc05hTiA9IE51bWJlci5pc05hTiB8fFxuICAgIGZ1bmN0aW9uIHBvbnlmaWxsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZTtcbiAgICB9O1xuZnVuY3Rpb24gaXNFcXVhbChmaXJzdCwgc2Vjb25kKSB7XG4gICAgaWYgKGZpcnN0ID09PSBzZWNvbmQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzYWZlSXNOYU4oZmlyc3QpICYmIHNhZmVJc05hTihzZWNvbmQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhcmVJbnB1dHNFcXVhbChuZXdJbnB1dHMsIGxhc3RJbnB1dHMpIHtcbiAgICBpZiAobmV3SW5wdXRzLmxlbmd0aCAhPT0gbGFzdElucHV0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0lucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzRXF1YWwobmV3SW5wdXRzW2ldLCBsYXN0SW5wdXRzW2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtZW1vaXplT25lKHJlc3VsdEZuLCBpc0VxdWFsKSB7XG4gICAgaWYgKGlzRXF1YWwgPT09IHZvaWQgMCkgeyBpc0VxdWFsID0gYXJlSW5wdXRzRXF1YWw7IH1cbiAgICB2YXIgbGFzdFRoaXM7XG4gICAgdmFyIGxhc3RBcmdzID0gW107XG4gICAgdmFyIGxhc3RSZXN1bHQ7XG4gICAgdmFyIGNhbGxlZE9uY2UgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBtZW1vaXplZCgpIHtcbiAgICAgICAgdmFyIG5ld0FyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG5ld0FyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGVkT25jZSAmJiBsYXN0VGhpcyA9PT0gdGhpcyAmJiBpc0VxdWFsKG5ld0FyZ3MsIGxhc3RBcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgICAgICBjYWxsZWRPbmNlID0gdHJ1ZTtcbiAgICAgICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgICAgICBsYXN0QXJncyA9IG5ld0FyZ3M7XG4gICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVPbmU7XG4iLCAiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkge1xuICBpZiAobnVsbCA9PSByKSByZXR1cm4ge307XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHtcbiAgICBpZiAoZS5pbmNsdWRlcyhuKSkgY29udGludWU7XG4gICAgdFtuXSA9IHJbbl07XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBhcyBkZWZhdWx0IH07IiwgIi8vIEBmbG93XG5cbi8vIEFuaW1hdGlvbiBmcmFtZSBiYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBzZXRUaW1lb3V0LlxuLy8gSW5zcGlyZWQgYnkgSm9lIExhbWJlcnQsIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2pvZWxhbWJlcnQvMTAwMjExNiNmaWxlLXJlcXVlc3R0aW1lb3V0LWpzXG5cbmNvbnN0IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID1cbiAgdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nO1xuXG5jb25zdCBub3cgPSBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vd1xuICA/ICgpID0+IHBlcmZvcm1hbmNlLm5vdygpXG4gIDogKCkgPT4gRGF0ZS5ub3coKTtcblxuZXhwb3J0IHR5cGUgVGltZW91dElEID0ge3xcbiAgaWQ6IEFuaW1hdGlvbkZyYW1lSUQsXG58fTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbmNlbFRpbWVvdXQodGltZW91dElEOiBUaW1lb3V0SUQpIHtcbiAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGltZW91dElELmlkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RUaW1lb3V0KGNhbGxiYWNrOiBGdW5jdGlvbiwgZGVsYXk6IG51bWJlcik6IFRpbWVvdXRJRCB7XG4gIGNvbnN0IHN0YXJ0ID0gbm93KCk7XG5cbiAgZnVuY3Rpb24gdGljaygpIHtcbiAgICBpZiAobm93KCkgLSBzdGFydCA+PSBkZWxheSkge1xuICAgICAgY2FsbGJhY2suY2FsbChudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGltZW91dElELmlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRpbWVvdXRJRDogVGltZW91dElEID0ge1xuICAgIGlkOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayksXG4gIH07XG5cbiAgcmV0dXJuIHRpbWVvdXRJRDtcbn1cbiIsICIvLyBAZmxvd1xuXG5sZXQgc2l6ZTogbnVtYmVyID0gLTE7XG5cbi8vIFRoaXMgdXRpbGl0eSBjb3BpZWQgZnJvbSBcImRvbS1oZWxwZXJzXCIgcGFja2FnZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JvbGxiYXJTaXplKHJlY2FsY3VsYXRlPzogYm9vbGVhbiA9IGZhbHNlKTogbnVtYmVyIHtcbiAgaWYgKHNpemUgPT09IC0xIHx8IHJlY2FsY3VsYXRlKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3Qgc3R5bGUgPSBkaXYuc3R5bGU7XG4gICAgc3R5bGUud2lkdGggPSAnNTBweCc7XG4gICAgc3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIHN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG5cbiAgICAoKGRvY3VtZW50LmJvZHk6IGFueSk6IEhUTUxCb2R5RWxlbWVudCkuYXBwZW5kQ2hpbGQoZGl2KTtcblxuICAgIHNpemUgPSBkaXYub2Zmc2V0V2lkdGggLSBkaXYuY2xpZW50V2lkdGg7XG5cbiAgICAoKGRvY3VtZW50LmJvZHk6IGFueSk6IEhUTUxCb2R5RWxlbWVudCkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgfVxuXG4gIHJldHVybiBzaXplO1xufVxuXG5leHBvcnQgdHlwZSBSVExPZmZzZXRUeXBlID1cbiAgfCAnbmVnYXRpdmUnXG4gIHwgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnXG4gIHwgJ3Bvc2l0aXZlLWFzY2VuZGluZyc7XG5cbmxldCBjYWNoZWRSVExSZXN1bHQ6IFJUTE9mZnNldFR5cGUgfCBudWxsID0gbnVsbDtcblxuLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuLy8gQ2hyb21lIGRvZXMgbm90IHNlZW0gdG8gYWRoZXJlOyBpdHMgc2Nyb2xsTGVmdCB2YWx1ZXMgYXJlIHBvc2l0aXZlIChtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4vLyBTYWZhcmkncyBlbGFzdGljIGJvdW5jZSBtYWtlcyBkZXRlY3RpbmcgdGhpcyBldmVuIG1vcmUgY29tcGxpY2F0ZWQgd3J0IHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZXMuXG4vLyBUaGUgc2FmZXN0IHdheSB0byBjaGVjayB0aGlzIGlzIHRvIGludGVudGlvbmFsbHkgc2V0IGEgbmVnYXRpdmUgb2Zmc2V0LFxuLy8gYW5kIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIHN1YnNlcXVlbnQgXCJzY3JvbGxcIiBldmVudCBtYXRjaGVzIHRoZSBuZWdhdGl2ZSBvZmZzZXQuXG4vLyBJZiBpdCBkb2VzIG5vdCBtYXRjaCwgdGhlbiB3ZSBjYW4gYXNzdW1lIGEgbm9uLXN0YW5kYXJkIFJUTCBzY3JvbGwgaW1wbGVtZW50YXRpb24uXG5leHBvcnQgZnVuY3Rpb24gZ2V0UlRMT2Zmc2V0VHlwZShyZWNhbGN1bGF0ZT86IGJvb2xlYW4gPSBmYWxzZSk6IFJUTE9mZnNldFR5cGUge1xuICBpZiAoY2FjaGVkUlRMUmVzdWx0ID09PSBudWxsIHx8IHJlY2FsY3VsYXRlKSB7XG4gICAgY29uc3Qgb3V0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBvdXRlclN0eWxlID0gb3V0ZXJEaXYuc3R5bGU7XG4gICAgb3V0ZXJTdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLmhlaWdodCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgb3V0ZXJTdHlsZS5kaXJlY3Rpb24gPSAncnRsJztcblxuICAgIGNvbnN0IGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgaW5uZXJTdHlsZSA9IGlubmVyRGl2LnN0eWxlO1xuICAgIGlubmVyU3R5bGUud2lkdGggPSAnMTAwcHgnO1xuICAgIGlubmVyU3R5bGUuaGVpZ2h0ID0gJzEwMHB4JztcblxuICAgIG91dGVyRGl2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5hcHBlbmRDaGlsZChvdXRlckRpdik7XG5cbiAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA+IDApIHtcbiAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICdwb3NpdGl2ZS1kZXNjZW5kaW5nJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ZXJEaXYuc2Nyb2xsTGVmdCA9IDE7XG4gICAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA9PT0gMCkge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAnbmVnYXRpdmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWFzY2VuZGluZyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgKChkb2N1bWVudC5ib2R5OiBhbnkpOiBIVE1MQm9keUVsZW1lbnQpLnJlbW92ZUNoaWxkKG91dGVyRGl2KTtcblxuICAgIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gY2FjaGVkUlRMUmVzdWx0O1xufVxuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjYW5jZWxUaW1lb3V0LCByZXF1ZXN0VGltZW91dCB9IGZyb20gJy4vdGltZXInO1xuaW1wb3J0IHsgZ2V0U2Nyb2xsYmFyU2l6ZSwgZ2V0UlRMT2Zmc2V0VHlwZSB9IGZyb20gJy4vZG9tSGVscGVycyc7XG5cbmltcG9ydCB0eXBlIHsgVGltZW91dElEIH0gZnJvbSAnLi90aW1lcic7XG5cbnR5cGUgRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJztcbmV4cG9ydCB0eXBlIFNjcm9sbFRvQWxpZ24gPSAnYXV0bycgfCAnc21hcnQnIHwgJ2NlbnRlcicgfCAnc3RhcnQnIHwgJ2VuZCc7XG5cbnR5cGUgaXRlbVNpemUgPSBudW1iZXIgfCAoKGluZGV4OiBudW1iZXIpID0+IG51bWJlcik7XG5cbnR5cGUgUmVuZGVyQ29tcG9uZW50UHJvcHM8VD4gPSB7fFxuICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICBkYXRhOiBULFxuICBpc1Njcm9sbGluZz86IGJvb2xlYW4sXG4gIHJvd0luZGV4OiBudW1iZXIsXG4gIHN0eWxlOiBPYmplY3QsXG58fTtcbmV4cG9ydCB0eXBlIFJlbmRlckNvbXBvbmVudDxUPiA9IFJlYWN0JENvbXBvbmVudFR5cGU8XG4gICRTaGFwZTxSZW5kZXJDb21wb25lbnRQcm9wczxUPj5cbj47XG5cbnR5cGUgU2Nyb2xsRGlyZWN0aW9uID0gJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJztcblxudHlwZSBPbkl0ZW1zUmVuZGVyZWRDYWxsYmFjayA9ICh7XG4gIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXg6IG51bWJlcixcbiAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlUm93U3RvcEluZGV4OiBudW1iZXIsXG59KSA9PiB2b2lkO1xudHlwZSBPblNjcm9sbENhbGxiYWNrID0gKHtcbiAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG4gIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG59KSA9PiB2b2lkO1xuXG50eXBlIFNjcm9sbEV2ZW50ID0gU3ludGhldGljRXZlbnQ8SFRNTERpdkVsZW1lbnQ+O1xudHlwZSBJdGVtU3R5bGVDYWNoZSA9IHsgW2tleTogc3RyaW5nXTogT2JqZWN0IH07XG5cbnR5cGUgT3V0ZXJQcm9wcyA9IHt8XG4gIGNoaWxkcmVuOiBSZWFjdCROb2RlLFxuICBjbGFzc05hbWU6IHN0cmluZyB8IHZvaWQsXG4gIG9uU2Nyb2xsOiBTY3JvbGxFdmVudCA9PiB2b2lkLFxuICBzdHlsZToge1xuICAgIFtzdHJpbmddOiBtaXhlZCxcbiAgfSxcbnx9O1xuXG50eXBlIElubmVyUHJvcHMgPSB7fFxuICBjaGlsZHJlbjogUmVhY3QkTm9kZSxcbiAgc3R5bGU6IHtcbiAgICBbc3RyaW5nXTogbWl4ZWQsXG4gIH0sXG58fTtcblxuZXhwb3J0IHR5cGUgUHJvcHM8VD4gPSB7fFxuICBjaGlsZHJlbjogUmVuZGVyQ29tcG9uZW50PFQ+LFxuICBjbGFzc05hbWU/OiBzdHJpbmcsXG4gIGNvbHVtbkNvdW50OiBudW1iZXIsXG4gIGNvbHVtbldpZHRoOiBpdGVtU2l6ZSxcbiAgZGlyZWN0aW9uOiBEaXJlY3Rpb24sXG4gIGhlaWdodDogbnVtYmVyLFxuICBpbml0aWFsU2Nyb2xsTGVmdD86IG51bWJlcixcbiAgaW5pdGlhbFNjcm9sbFRvcD86IG51bWJlcixcbiAgaW5uZXJSZWY/OiBhbnksXG4gIGlubmVyRWxlbWVudFR5cGU/OiBzdHJpbmcgfCBSZWFjdCRBYnN0cmFjdENvbXBvbmVudDxJbm5lclByb3BzLCBhbnk+LFxuICBpbm5lclRhZ05hbWU/OiBzdHJpbmcsIC8vIGRlcHJlY2F0ZWRcbiAgaXRlbURhdGE6IFQsXG4gIGl0ZW1LZXk/OiAocGFyYW1zOiB7fFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgZGF0YTogVCxcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICB8fSkgPT4gYW55LFxuICBvbkl0ZW1zUmVuZGVyZWQ/OiBPbkl0ZW1zUmVuZGVyZWRDYWxsYmFjayxcbiAgb25TY3JvbGw/OiBPblNjcm9sbENhbGxiYWNrLFxuICBvdXRlclJlZj86IGFueSxcbiAgb3V0ZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PE91dGVyUHJvcHMsIGFueT4sXG4gIG91dGVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBvdmVyc2NhbkNvbHVtbkNvdW50PzogbnVtYmVyLFxuICBvdmVyc2NhbkNvbHVtbnNDb3VudD86IG51bWJlciwgLy8gZGVwcmVjYXRlZFxuICBvdmVyc2NhbkNvdW50PzogbnVtYmVyLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuUm93Q291bnQ/OiBudW1iZXIsXG4gIG92ZXJzY2FuUm93c0NvdW50PzogbnVtYmVyLCAvLyBkZXByZWNhdGVkXG4gIHJvd0NvdW50OiBudW1iZXIsXG4gIHJvd0hlaWdodDogaXRlbVNpemUsXG4gIHN0eWxlPzogT2JqZWN0LFxuICB1c2VJc1Njcm9sbGluZzogYm9vbGVhbixcbiAgd2lkdGg6IG51bWJlcixcbnx9O1xuXG50eXBlIFN0YXRlID0ge3xcbiAgaW5zdGFuY2U6IGFueSxcbiAgaXNTY3JvbGxpbmc6IGJvb2xlYW4sXG4gIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICBzY3JvbGxUb3A6IG51bWJlcixcbiAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuLFxuICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxufH07XG5cbnR5cGUgZ2V0SXRlbU9mZnNldCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIGdldEl0ZW1TaXplID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZVByb3BzOiBhbnkpID0+IG51bWJlcjtcbnR5cGUgR2V0T2Zmc2V0Rm9ySXRlbUFuZEFsaWdubWVudCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55LFxuICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRTdGFydEluZGV4Rm9yT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgb2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBzdGFydEluZGV4OiBudW1iZXIsXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBJbml0SW5zdGFuY2VQcm9wcyA9IChwcm9wczogUHJvcHM8YW55PiwgaW5zdGFuY2U6IGFueSkgPT4gYW55O1xudHlwZSBWYWxpZGF0ZVByb3BzID0gKHByb3BzOiBQcm9wczxhbnk+KSA9PiB2b2lkO1xuXG5jb25zdCBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwgPSAxNTA7XG5cbmNvbnN0IGRlZmF1bHRJdGVtS2V5ID0gKHsgY29sdW1uSW5kZXgsIGRhdGEsIHJvd0luZGV4IH0pID0+XG4gIGAke3Jvd0luZGV4fToke2NvbHVtbkluZGV4fWA7XG5cbi8vIEluIERFViBtb2RlLCB0aGlzIFNldCBoZWxwcyB1cyBvbmx5IGxvZyBhIHdhcm5pbmcgb25jZSBwZXIgY29tcG9uZW50IGluc3RhbmNlLlxuLy8gVGhpcyBhdm9pZHMgc3BhbW1pbmcgdGhlIGNvbnNvbGUgZXZlcnkgdGltZSBhIHJlbmRlciBoYXBwZW5zLlxubGV0IGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgPSBudWxsO1xubGV0IGRldldhcm5pbmdzVGFnTmFtZSA9IG51bGw7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCA9IG5ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgPSBuZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSA9IG5ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldCxcbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgZ2V0Q29sdW1uV2lkdGgsXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQsXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCxcbiAgZ2V0Um93SGVpZ2h0LFxuICBnZXRSb3dPZmZzZXQsXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGluaXRJbnN0YW5jZVByb3BzLFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlLFxuICB2YWxpZGF0ZVByb3BzLFxufToge3xcbiAgZ2V0Q29sdW1uT2Zmc2V0OiBnZXRJdGVtT2Zmc2V0LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiBHZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4OiBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBnZXRDb2x1bW5XaWR0aDogZ2V0SXRlbVNpemUsXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0OiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6IGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiBHZXRPZmZzZXRGb3JJdGVtQW5kQWxpZ25tZW50LFxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IEdldE9mZnNldEZvckl0ZW1BbmRBbGlnbm1lbnQsXG4gIGdldFJvd09mZnNldDogZ2V0SXRlbU9mZnNldCxcbiAgZ2V0Um93SGVpZ2h0OiBnZXRJdGVtU2l6ZSxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogR2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IEluaXRJbnN0YW5jZVByb3BzLFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBib29sZWFuLFxuICB2YWxpZGF0ZVByb3BzOiBWYWxpZGF0ZVByb3BzLFxufH0pIHtcbiAgcmV0dXJuIGNsYXNzIEdyaWQ8VD4gZXh0ZW5kcyBQdXJlQ29tcG9uZW50PFByb3BzPFQ+LCBTdGF0ZT4ge1xuICAgIF9pbnN0YW5jZVByb3BzOiBhbnkgPSBpbml0SW5zdGFuY2VQcm9wcyh0aGlzLnByb3BzLCB0aGlzKTtcbiAgICBfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZDogVGltZW91dElEIHwgbnVsbCA9IG51bGw7XG4gICAgX291dGVyUmVmOiA/SFRNTERpdkVsZW1lbnQ7XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgICB1c2VJc1Njcm9sbGluZzogZmFsc2UsXG4gICAgfTtcblxuICAgIHN0YXRlOiBTdGF0ZSA9IHtcbiAgICAgIGluc3RhbmNlOiB0aGlzLFxuICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgc2Nyb2xsTGVmdDpcbiAgICAgICAgdHlwZW9mIHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnQgPT09ICdudW1iZXInXG4gICAgICAgICAgPyB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxMZWZ0XG4gICAgICAgICAgOiAwLFxuICAgICAgc2Nyb2xsVG9wOlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsVG9wXG4gICAgICAgICAgOiAwLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgfTtcblxuICAgIC8vIEFsd2F5cyB1c2UgZXhwbGljaXQgY29uc3RydWN0b3IgZm9yIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgLy8gSXQgcHJvZHVjZXMgbGVzcyBjb2RlIGFmdGVyIHRyYW5zcGlsYXRpb24uICgjMjYpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHM8VD4pIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgbmV4dFByb3BzOiBQcm9wczxUPixcbiAgICAgIHByZXZTdGF0ZTogU3RhdGVcbiAgICApOiAkU2hhcGU8U3RhdGU+IHwgbnVsbCB7XG4gICAgICB2YWxpZGF0ZVNoYXJlZFByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIHZhbGlkYXRlUHJvcHMobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHNjcm9sbFRvKHtcbiAgICAgIHNjcm9sbExlZnQsXG4gICAgICBzY3JvbGxUb3AsXG4gICAgfToge1xuICAgICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgfSk6IHZvaWQge1xuICAgICAgaWYgKHNjcm9sbExlZnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsTGVmdCk7XG4gICAgICB9XG4gICAgICBpZiAoc2Nyb2xsVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IHByZXZTdGF0ZS5zY3JvbGxMZWZ0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY3JvbGxUb3AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcm9sbFRvcCA9IHByZXZTdGF0ZS5zY3JvbGxUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJldlN0YXRlLnNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgJiZcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3BcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9XG5cbiAgICBzY3JvbGxUb0l0ZW0oe1xuICAgICAgYWxpZ24gPSAnYXV0bycsXG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIHJvd0luZGV4LFxuICAgIH06IHtcbiAgICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgICAgY29sdW1uSW5kZXg/OiBudW1iZXIsXG4gICAgICByb3dJbmRleD86IG51bWJlcixcbiAgICB9KTogdm9pZCB7XG4gICAgICBjb25zdCB7IGNvbHVtbkNvdW50LCBoZWlnaHQsIHJvd0NvdW50LCB3aWR0aCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgY29uc3Qgc2Nyb2xsYmFyU2l6ZSA9IGdldFNjcm9sbGJhclNpemUoKTtcblxuICAgICAgaWYgKGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29sdW1uSW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5JbmRleCwgY29sdW1uQ291bnQgLSAxKSk7XG4gICAgICB9XG4gICAgICBpZiAocm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByb3dJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0luZGV4LCByb3dDb3VudCAtIDEpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxIZWlnaHQgPSBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsV2lkdGggPSBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICAvLyBUaGUgc2Nyb2xsYmFyIHNpemUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBzY3JvbGxpbmcgYW4gaXRlbSBpbnRvIHZpZXcsXG4gICAgICAvLyB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cbiAgICAgIGNvbnN0IGhvcml6b250YWxTY3JvbGxiYXJTaXplID1cbiAgICAgICAgZXN0aW1hdGVkVG90YWxXaWR0aCA+IHdpZHRoID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG4gICAgICBjb25zdCB2ZXJ0aWNhbFNjcm9sbGJhclNpemUgPVxuICAgICAgICBlc3RpbWF0ZWRUb3RhbEhlaWdodCA+IGhlaWdodCA/IHNjcm9sbGJhclNpemUgOiAwO1xuXG4gICAgICB0aGlzLnNjcm9sbFRvKHtcbiAgICAgICAgc2Nyb2xsTGVmdDpcbiAgICAgICAgICBjb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudChcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgIGFsaWduLFxuICAgICAgICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhclNpemVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBzY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxUb3A6XG4gICAgICAgICAgcm93SW5kZXggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQoXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgICAgICBhbGlnbixcbiAgICAgICAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHNjcm9sbFRvcCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgY29uc3QgeyBpbml0aWFsU2Nyb2xsTGVmdCwgaW5pdGlhbFNjcm9sbFRvcCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbExlZnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IGluaXRpYWxTY3JvbGxMZWZ0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbFRvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsVG9wO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AsIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1hc2NlbmRpbmcnOlxuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBzY3JvbGxXaWR0aCB9ID0gb3V0ZXJSZWY7XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGNvbHVtbkNvdW50LFxuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgaW5uZXJSZWYsXG4gICAgICAgIGlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgIGlubmVyVGFnTmFtZSxcbiAgICAgICAgaXRlbURhdGEsXG4gICAgICAgIGl0ZW1LZXkgPSBkZWZhdWx0SXRlbUtleSxcbiAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSxcbiAgICAgICAgb3V0ZXJUYWdOYW1lLFxuICAgICAgICByb3dDb3VudCxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICB3aWR0aCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgY29uc3QgW1xuICAgICAgICBjb2x1bW5TdGFydEluZGV4LFxuICAgICAgICBjb2x1bW5TdG9wSW5kZXgsXG4gICAgICBdID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgIGNvbnN0IFtyb3dTdGFydEluZGV4LCByb3dTdG9wSW5kZXhdID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCk7XG5cbiAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50KSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgbGV0IHJvd0luZGV4ID0gcm93U3RhcnRJbmRleDtcbiAgICAgICAgICByb3dJbmRleCA8PSByb3dTdG9wSW5kZXg7XG4gICAgICAgICAgcm93SW5kZXgrK1xuICAgICAgICApIHtcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgbGV0IGNvbHVtbkluZGV4ID0gY29sdW1uU3RhcnRJbmRleDtcbiAgICAgICAgICAgIGNvbHVtbkluZGV4IDw9IGNvbHVtblN0b3BJbmRleDtcbiAgICAgICAgICAgIGNvbHVtbkluZGV4KytcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgICBpc1Njcm9sbGluZzogdXNlSXNTY3JvbGxpbmcgPyBpc1Njcm9sbGluZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBrZXk6IGl0ZW1LZXkoeyBjb2x1bW5JbmRleCwgZGF0YTogaXRlbURhdGEsIHJvd0luZGV4IH0pLFxuICAgICAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUocm93SW5kZXgsIGNvbHVtbkluZGV4KSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2JyxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBvblNjcm9sbDogdGhpcy5fb25TY3JvbGwsXG4gICAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlRWxlbWVudChpbm5lckVsZW1lbnRUeXBlIHx8IGlubmVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICAgIGNoaWxkcmVuOiBpdGVtcyxcbiAgICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBoZWlnaHQ6IGVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB3aWR0aDogZXN0aW1hdGVkVG90YWxXaWR0aCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZDogKFxuICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhblJvd1N0b3BJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVSb3dTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlUm93U3RvcEluZGV4OiBudW1iZXJcbiAgICApID0+IHZvaWQ7XG4gICAgX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXg6IG51bWJlcixcbiAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleDogbnVtYmVyXG4gICAgICApID0+XG4gICAgICAgICgodGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQ6IGFueSk6IE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrKSh7XG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVSb3dTdG9wSW5kZXgsXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIF9jYWxsT25TY3JvbGw6IChcbiAgICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uU2Nyb2xsID0gbWVtb2l6ZU9uZShcbiAgICAgIChcbiAgICAgICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgICAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW5cbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uU2Nyb2xsOiBhbnkpOiBPblNjcm9sbENhbGxiYWNrKSh7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICBjb25zdCB7IGNvbHVtbkNvdW50LCBvbkl0ZW1zUmVuZGVyZWQsIG9uU2Nyb2xsLCByb3dDb3VudCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKHR5cGVvZiBvbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKGNvbHVtbkNvdW50ID4gMCAmJiByb3dDb3VudCA+IDApIHtcbiAgICAgICAgICBjb25zdCBbXG4gICAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICBdID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICBjb25zdCBbXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleCxcbiAgICAgICAgICBdID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCk7XG4gICAgICAgICAgdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZChcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVSb3dTdG9wSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb25TY3JvbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsbE9uU2Nyb2xsKFxuICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGF6aWx5IGNyZWF0ZSBhbmQgY2FjaGUgaXRlbSBzdHlsZXMgd2hpbGUgc2Nyb2xsaW5nLFxuICAgIC8vIFNvIHRoYXQgcHVyZSBjb21wb25lbnQgc0NVIHdpbGwgcHJldmVudCByZS1yZW5kZXJzLlxuICAgIC8vIFdlIG1haW50YWluIHRoaXMgY2FjaGUsIGFuZCBwYXNzIGEgc3R5bGUgcHJvcCByYXRoZXIgdGhhbiBpbmRleCxcbiAgICAvLyBTbyB0aGF0IExpc3QgY2FuIGNsZWFyIGNhY2hlZCBzdHlsZXMgYW5kIGZvcmNlIGl0ZW0gcmUtcmVuZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICBfZ2V0SXRlbVN0eWxlOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gT2JqZWN0O1xuICAgIF9nZXRJdGVtU3R5bGUgPSAocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcik6IE9iamVjdCA9PiB7XG4gICAgICBjb25zdCB7IGNvbHVtbldpZHRoLCBkaXJlY3Rpb24sIHJvd0hlaWdodCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3QgaXRlbVN0eWxlQ2FjaGUgPSB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZShcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBjb2x1bW5XaWR0aCxcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb24sXG4gICAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgcm93SGVpZ2h0XG4gICAgICApO1xuXG4gICAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH06JHtjb2x1bW5JbmRleH1gO1xuXG4gICAgICBsZXQgc3R5bGU7XG4gICAgICBpZiAoaXRlbVN0eWxlQ2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBzdHlsZSA9IGl0ZW1TdHlsZUNhY2hlW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRDb2x1bW5PZmZzZXQoXG4gICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGlzUnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICAgICAgaXRlbVN0eWxlQ2FjaGVba2V5XSA9IHN0eWxlID0ge1xuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgIGxlZnQ6IGlzUnRsID8gdW5kZWZpbmVkIDogb2Zmc2V0LFxuICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IG9mZnNldCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0b3A6IGdldFJvd09mZnNldCh0aGlzLnByb3BzLCByb3dJbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgaGVpZ2h0OiBnZXRSb3dIZWlnaHQodGhpcy5wcm9wcywgcm93SW5kZXgsIHRoaXMuX2luc3RhbmNlUHJvcHMpLFxuICAgICAgICAgIHdpZHRoOiBnZXRDb2x1bW5XaWR0aCh0aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuXG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlOiAoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gSXRlbVN0eWxlQ2FjaGU7XG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZSgoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gKHt9KSk7XG5cbiAgICBfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb2x1bW5Db3VudCxcbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5Db3VudCxcbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5zQ291bnQsXG4gICAgICAgIG92ZXJzY2FuQ291bnQsXG4gICAgICAgIHJvd0NvdW50LFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sIGlzU2Nyb2xsaW5nLCBzY3JvbGxMZWZ0IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBjb25zdCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQ6IG51bWJlciA9XG4gICAgICAgIG92ZXJzY2FuQ29sdW1uQ291bnQgfHwgb3ZlcnNjYW5Db2x1bW5zQ291bnQgfHwgb3ZlcnNjYW5Db3VudCB8fCAxO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPT09IDAgfHwgcm93Q291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG4gICAgICBjb25zdCBvdmVyc2NhbkJhY2t3YXJkID1cbiAgICAgICAgIWlzU2Nyb2xsaW5nIHx8IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG4gICAgICBjb25zdCBvdmVyc2NhbkZvcndhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpXG4gICAgICAgICAgOiAxO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICBNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksXG4gICAgICAgIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHN0b3BJbmRleCxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvdW50LFxuICAgICAgICBvdmVyc2NhblJvd0NvdW50LFxuICAgICAgICBvdmVyc2NhblJvd3NDb3VudCxcbiAgICAgICAgcm93Q291bnQsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaXNTY3JvbGxpbmcsIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxUb3AgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQ291bnRSZXNvbHZlZDogbnVtYmVyID1cbiAgICAgICAgb3ZlcnNjYW5Sb3dDb3VudCB8fCBvdmVyc2NhblJvd3NDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RvcEluZGV4ID0gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG4gICAgICBjb25zdCBvdmVyc2NhbkJhY2t3YXJkID1cbiAgICAgICAgIWlzU2Nyb2xsaW5nIHx8IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpXG4gICAgICAgICAgOiAxO1xuICAgICAgY29uc3Qgb3ZlcnNjYW5Gb3J3YXJkID1cbiAgICAgICAgIWlzU2Nyb2xsaW5nIHx8IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93Q291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc3RvcEluZGV4LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBfb25TY3JvbGwgPSAoZXZlbnQ6IFNjcm9sbEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNsaWVudEhlaWdodCxcbiAgICAgICAgY2xpZW50V2lkdGgsXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBzY3JvbGxXaWR0aCxcbiAgICAgIH0gPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJldlN0YXRlLnNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgJiZcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3BcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgZGlyZWN0aW9uIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgIC8vIEl0J3MgYWxzbyBlYXNpZXIgZm9yIHRoaXMgY29tcG9uZW50IGlmIHdlIGNvbnZlcnQgb2Zmc2V0cyB0byB0aGUgc2FtZSBmb3JtYXQgYXMgdGhleSB3b3VsZCBiZSBpbiBmb3IgbHRyLlxuICAgICAgICAvLyBTbyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgY29udmVydCBiYXNlZCBvbiBpdC5cbiAgICAgICAgbGV0IGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnOlxuICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKGNhbGN1bGF0ZWRTY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjYWxjdWxhdGVkU2Nyb2xsVG9wID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbExlZnQ6IGNhbGN1bGF0ZWRTY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcDogY2FsY3VsYXRlZFNjcm9sbFRvcCxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPCBzY3JvbGxUb3AgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX291dGVyUmVmU2V0dGVyID0gKHJlZjogYW55KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7IG91dGVyUmVmIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICB0aGlzLl9vdXRlclJlZiA9ICgocmVmOiBhbnkpOiBIVE1MRGl2RWxlbWVudCk7XG5cbiAgICAgIGlmICh0eXBlb2Ygb3V0ZXJSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3V0ZXJSZWYocmVmKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIG91dGVyUmVmICE9IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIG91dGVyUmVmID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBvdXRlclJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpXG4gICAgICApIHtcbiAgICAgICAgb3V0ZXJSZWYuY3VycmVudCA9IHJlZjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gcmVxdWVzdFRpbWVvdXQoXG4gICAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmcsXG4gICAgICAgIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgX3Jlc2V0SXNTY3JvbGxpbmcgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlzU2Nyb2xsaW5nOiBmYWxzZSB9LCAoKSA9PiB7XG4gICAgICAgIC8vIENsZWFyIHN0eWxlIGNhY2hlIGFmdGVyIHN0YXRlIHVwZGF0ZSBoYXMgYmVlbiBjb21taXR0ZWQuXG4gICAgICAgIC8vIFRoaXMgd2F5IHdlIGRvbid0IGJyZWFrIHB1cmUgc0NVIGZvciBpdGVtcyB0aGF0IGRvbid0IHVzZSBpc1Njcm9sbGluZyBwYXJhbS5cbiAgICAgICAgdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn1cblxuY29uc3QgdmFsaWRhdGVTaGFyZWRQcm9wcyA9IChcbiAge1xuICAgIGNoaWxkcmVuLFxuICAgIGRpcmVjdGlvbixcbiAgICBoZWlnaHQsXG4gICAgaW5uZXJUYWdOYW1lLFxuICAgIG91dGVyVGFnTmFtZSxcbiAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICBvdmVyc2NhbkNvdW50LFxuICAgIG92ZXJzY2FuUm93c0NvdW50LFxuICAgIHdpZHRoLFxuICB9OiBQcm9wczxhbnk+LFxuICB7IGluc3RhbmNlIH06IFN0YXRlXG4pOiB2b2lkID0+IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIG92ZXJzY2FuQ291bnQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ICYmICFkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgb3ZlcnNjYW5Db3VudCBwcm9wIGhhcyBiZWVuIGRlcHJlY2F0ZWQuICcgK1xuICAgICAgICAgICAgJ1BsZWFzZSB1c2UgdGhlIG92ZXJzY2FuQ29sdW1uQ291bnQgYW5kIG92ZXJzY2FuUm93Q291bnQgcHJvcHMgaW5zdGVhZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG92ZXJzY2FuQ29sdW1uc0NvdW50ID09PSAnbnVtYmVyJyB8fFxuICAgICAgdHlwZW9mIG92ZXJzY2FuUm93c0NvdW50ID09PSAnbnVtYmVyJ1xuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCAmJlxuICAgICAgICAhZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuaGFzKGluc3RhbmNlKVxuICAgICAgKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50LmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIG92ZXJzY2FuQ29sdW1uc0NvdW50IGFuZCBvdmVyc2NhblJvd3NDb3VudCBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUgJiYgIWRldldhcm5pbmdzVGFnTmFtZS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgaW5uZXJFbGVtZW50VHlwZSBhbmQgb3V0ZXJFbGVtZW50VHlwZSBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIFJlYWN0IGNvbXBvbmVudC4gJyArXG4gICAgICAgICAgYFwiJHtjaGlsZHJlbiA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjaGlsZHJlbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArXG4gICAgICAgICAgICBgXCIke2RpcmVjdGlvbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHdpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwid2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgK1xuICAgICAgICAgIGBcIiR7d2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGh9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdHcmlkcyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArXG4gICAgICAgICAgYFwiJHtoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUdyaWRDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlR3JpZENvbXBvbmVudCc7XG5cbmNvbnN0IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSA9IDUwO1xuXG50eXBlIFZhcmlhYmxlU2l6ZVByb3BzID0ge3xcbiAgZXN0aW1hdGVkQ29sdW1uV2lkdGg6IG51bWJlcixcbiAgZXN0aW1hdGVkUm93SGVpZ2h0OiBudW1iZXIsXG4gIC4uLlByb3BzPGFueT4sXG58fTtcblxudHlwZSBpdGVtU2l6ZUdldHRlciA9IChpbmRleDogbnVtYmVyKSA9PiBudW1iZXI7XG50eXBlIEl0ZW1UeXBlID0gJ2NvbHVtbicgfCAncm93JztcblxudHlwZSBJdGVtTWV0YWRhdGEgPSB7fFxuICBvZmZzZXQ6IG51bWJlcixcbiAgc2l6ZTogbnVtYmVyLFxufH07XG50eXBlIEl0ZW1NZXRhZGF0YU1hcCA9IHsgW2luZGV4OiBudW1iZXJdOiBJdGVtTWV0YWRhdGEgfTtcbnR5cGUgSW5zdGFuY2VQcm9wcyA9IHt8XG4gIGNvbHVtbk1ldGFkYXRhTWFwOiBJdGVtTWV0YWRhdGFNYXAsXG4gIGVzdGltYXRlZENvbHVtbldpZHRoOiBudW1iZXIsXG4gIGVzdGltYXRlZFJvd0hlaWdodDogbnVtYmVyLFxuICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleDogbnVtYmVyLFxuICBsYXN0TWVhc3VyZWRSb3dJbmRleDogbnVtYmVyLFxuICByb3dNZXRhZGF0YU1hcDogSXRlbU1ldGFkYXRhTWFwLFxufH07XG5cbmNvbnN0IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gKFxuICB7IHJvd0NvdW50IH06IFByb3BzPGFueT4sXG4gIHsgcm93TWV0YWRhdGFNYXAsIGVzdGltYXRlZFJvd0hlaWdodCwgbGFzdE1lYXN1cmVkUm93SW5kZXggfTogSW5zdGFuY2VQcm9wc1xuKSA9PiB7XG4gIGxldCB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IDA7XG5cbiAgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcbiAgaWYgKGxhc3RNZWFzdXJlZFJvd0luZGV4ID49IHJvd0NvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkUm93SW5kZXggPSByb3dDb3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gMCkge1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IHJvd01ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZFJvd0luZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIGNvbnN0IG51bVVubWVhc3VyZWRJdGVtcyA9IHJvd0NvdW50IC0gbGFzdE1lYXN1cmVkUm93SW5kZXggLSAxO1xuICBjb25zdCB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZFJvd0hlaWdodDtcblxuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IGdldEVzdGltYXRlZFRvdGFsV2lkdGggPSAoXG4gIHsgY29sdW1uQ291bnQgfTogUHJvcHM8YW55PixcbiAge1xuICAgIGNvbHVtbk1ldGFkYXRhTWFwLFxuICAgIGVzdGltYXRlZENvbHVtbldpZHRoLFxuICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4LFxuICB9OiBJbnN0YW5jZVByb3BzXG4pID0+IHtcbiAgbGV0IHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDtcblxuICAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuICBpZiAobGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPj0gY29sdW1uQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGNvbHVtbkNvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSAwKSB7XG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gY29sdW1uTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gY29sdW1uQ291bnQgLSBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCAtIDE7XG4gIGNvbnN0IHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkQ29sdW1uV2lkdGg7XG5cbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG5jb25zdCBnZXRJdGVtTWV0YWRhdGEgPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbik6IEl0ZW1NZXRhZGF0YSA9PiB7XG4gIGxldCBpdGVtTWV0YWRhdGFNYXAsIGl0ZW1TaXplLCBsYXN0TWVhc3VyZWRJbmRleDtcbiAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXA7XG4gICAgaXRlbVNpemUgPSAoKHByb3BzLmNvbHVtbldpZHRoOiBhbnkpOiBpdGVtU2l6ZUdldHRlcik7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4O1xuICB9IGVsc2Uge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXA7XG4gICAgaXRlbVNpemUgPSAoKHByb3BzLnJvd0hlaWdodDogYW55KTogaXRlbVNpemVHZXR0ZXIpO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIGlmIChpbmRleCA+IGxhc3RNZWFzdXJlZEluZGV4KSB7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgICBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IGxhc3RNZWFzdXJlZEluZGV4ICsgMTsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICBsZXQgc2l6ZSA9IGl0ZW1TaXplKGkpO1xuXG4gICAgICBpdGVtTWV0YWRhdGFNYXBbaV0gPSB7XG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtID0gKFxuICBpdGVtVHlwZTogSXRlbVR5cGUsXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBvZmZzZXQ6IG51bWJlclxuKSA9PiB7XG4gIGxldCBpdGVtTWV0YWRhdGFNYXAsIGxhc3RNZWFzdXJlZEluZGV4O1xuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIH1cblxuICBjb25zdCBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID1cbiAgICBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICAgIGl0ZW1UeXBlLFxuICAgICAgcHJvcHMsXG4gICAgICBpbnN0YW5jZVByb3BzLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXgsXG4gICAgICAwLFxuICAgICAgb2Zmc2V0XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB3ZSBoYXZlbid0IHlldCBtZWFzdXJlZCB0aGlzIGhpZ2gsIGZhbGxiYWNrIHRvIGFuIGV4cG9uZW50aWFsIHNlYXJjaCB3aXRoIGFuIGlubmVyIGJpbmFyeSBzZWFyY2guXG4gICAgLy8gVGhlIGV4cG9uZW50aWFsIHNlYXJjaCBhdm9pZHMgcHJlLWNvbXB1dGluZyBzaXplcyBmb3IgdGhlIGZ1bGwgc2V0IG9mIGl0ZW1zIGFzIGEgYmluYXJ5IHNlYXJjaCB3b3VsZC5cbiAgICAvLyBUaGUgb3ZlcmFsbCBjb21wbGV4aXR5IGZvciB0aGlzIGFwcHJvYWNoIGlzIE8obG9nIG4pLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChcbiAgICAgIGl0ZW1UeXBlLFxuICAgICAgcHJvcHMsXG4gICAgICBpbnN0YW5jZVByb3BzLFxuICAgICAgTWF0aC5tYXgoMCwgbGFzdE1lYXN1cmVkSW5kZXgpLFxuICAgICAgb2Zmc2V0XG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoID0gKFxuICBpdGVtVHlwZTogSXRlbVR5cGUsXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBoaWdoOiBudW1iZXIsXG4gIGxvdzogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICBjb25zdCBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIG1pZGRsZSxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2ggPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIGluZGV4OiBudW1iZXIsXG4gIG9mZnNldDogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICBjb25zdCBpdGVtQ291bnQgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy5jb2x1bW5Db3VudCA6IHByb3BzLnJvd0NvdW50O1xuICBsZXQgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChcbiAgICBpbmRleCA8IGl0ZW1Db3VudCAmJlxuICAgIGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXRcbiAgKSB7XG4gICAgaW5kZXggKz0gaW50ZXJ2YWw7XG4gICAgaW50ZXJ2YWwgKj0gMjtcbiAgfVxuXG4gIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goXG4gICAgaXRlbVR5cGUsXG4gICAgcHJvcHMsXG4gICAgaW5zdGFuY2VQcm9wcyxcbiAgICBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSksXG4gICAgTWF0aC5mbG9vcihpbmRleCAvIDIpLFxuICAgIG9mZnNldFxuICApO1xufTtcblxuY29uc3QgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQgPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICBjb25zdCBzaXplID0gaXRlbVR5cGUgPT09ICdjb2x1bW4nID8gcHJvcHMud2lkdGggOiBwcm9wcy5oZWlnaHQ7XG4gIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKTtcblxuICAvLyBHZXQgZXN0aW1hdGVkIHRvdGFsIHNpemUgYWZ0ZXIgSXRlbU1ldGFkYXRhIGlzIGNvbXB1dGVkLFxuICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuICBjb25zdCBlc3RpbWF0ZWRUb3RhbFNpemUgPVxuICAgIGl0ZW1UeXBlID09PSAnY29sdW1uJ1xuICAgICAgPyBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHByb3BzLCBpbnN0YW5jZVByb3BzKVxuICAgICAgOiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG5cbiAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgMCxcbiAgICBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KVxuICApO1xuICBjb25zdCBtaW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAwLFxuICAgIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgc2Nyb2xsYmFyU2l6ZSArIGl0ZW1NZXRhZGF0YS5zaXplXG4gICk7XG5cbiAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICB9IGVsc2Uge1xuICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICBjYXNlICdlbmQnOlxuICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICBjYXNlICdjZW50ZXInOlxuICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcbiAgICBjYXNlICdhdXRvJzpcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIH1cbiAgfVxufTtcblxuY29uc3QgVmFyaWFibGVTaXplR3JpZCA9IGNyZWF0ZUdyaWRDb21wb25lbnQoe1xuICBnZXRDb2x1bW5PZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQsXG5cbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBmaW5kTmVhcmVzdEl0ZW0oJ2NvbHVtbicsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxMZWZ0KSxcblxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgeyBjb2x1bW5Db3VudCwgd2lkdGggfSA9IHByb3BzO1xuXG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKFxuICAgICAgJ2NvbHVtbicsXG4gICAgICBwcm9wcyxcbiAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICBpbnN0YW5jZVByb3BzXG4gICAgKTtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSBzY3JvbGxMZWZ0ICsgd2lkdGg7XG5cbiAgICBsZXQgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIGxldCBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGNvbHVtbkNvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuXG4gIGdldENvbHVtbldpZHRoOiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwW2luZGV4XS5zaXplLFxuXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoLFxuXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAnY29sdW1uJyxcbiAgICAgIHByb3BzLFxuICAgICAgaW5kZXgsXG4gICAgICBhbGlnbixcbiAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBzY3JvbGxiYXJTaXplXG4gICAgKSxcblxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PlxuICAgIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KFxuICAgICAgJ3JvdycsXG4gICAgICBwcm9wcyxcbiAgICAgIGluZGV4LFxuICAgICAgYWxpZ24sXG4gICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICBpbnN0YW5jZVByb3BzLFxuICAgICAgc2Nyb2xsYmFyU2l6ZVxuICAgICksXG5cbiAgZ2V0Um93T2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0LFxuXG4gIGdldFJvd0hlaWdodDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcFtpbmRleF0uc2l6ZSxcblxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZmluZE5lYXJlc3RJdGVtKCdyb3cnLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgc2Nyb2xsVG9wKSxcblxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IHJvd0NvdW50LCBoZWlnaHQgfSA9IHByb3BzO1xuXG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKFxuICAgICAgJ3JvdycsXG4gICAgICBwcm9wcyxcbiAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICBpbnN0YW5jZVByb3BzXG4gICAgKTtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSBzY3JvbGxUb3AgKyBoZWlnaHQ7XG5cbiAgICBsZXQgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIGxldCBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IHJvd0NvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KTogSW5zdGFuY2VQcm9wcyB7XG4gICAgY29uc3Qge1xuICAgICAgZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQsXG4gICAgfSA9ICgocHJvcHM6IGFueSk6IFZhcmlhYmxlU2l6ZVByb3BzKTtcblxuICAgIGNvbnN0IGluc3RhbmNlUHJvcHMgPSB7XG4gICAgICBjb2x1bW5NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aDogZXN0aW1hdGVkQ29sdW1uV2lkdGggfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0OiBlc3RpbWF0ZWRSb3dIZWlnaHQgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg6IC0xLFxuICAgICAgbGFzdE1lYXN1cmVkUm93SW5kZXg6IC0xLFxuICAgICAgcm93TWV0YWRhdGFNYXA6IHt9LFxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVyQ29sdW1uSW5kZXggPSAoXG4gICAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGU/OiBib29sZWFuID0gdHJ1ZVxuICAgICkgPT4ge1xuICAgICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMoeyBjb2x1bW5JbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUgfSk7XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJSb3dJbmRleCA9IChcbiAgICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZT86IGJvb2xlYW4gPSB0cnVlXG4gICAgKSA9PiB7XG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7IHJvd0luZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMgPSAoe1xuICAgICAgY29sdW1uSW5kZXgsXG4gICAgICByb3dJbmRleCxcbiAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZSxcbiAgICB9OiB7XG4gICAgICBjb2x1bW5JbmRleD86IG51bWJlcixcbiAgICAgIHJvd0luZGV4PzogbnVtYmVyLFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGU6IGJvb2xlYW4sXG4gICAgfSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5JbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IE1hdGgubWluKFxuICAgICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXgsXG4gICAgICAgICAgY29sdW1uSW5kZXggLSAxXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHJvd0luZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCxcbiAgICAgICAgICByb3dJbmRleCAtIDFcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgY291bGQgcG90ZW50aWFsbHkgb3B0aW1pemUgZnVydGhlciBieSBvbmx5IGV2aWN0aW5nIHN0eWxlcyBhZnRlciB0aGlzIGluZGV4LFxuICAgICAgLy8gQnV0IHNpbmNlIHN0eWxlcyBhcmUgb25seSBjYWNoZWQgd2hpbGUgc2Nyb2xsaW5nIGlzIGluIHByb2dyZXNzLVxuICAgICAgLy8gSXQgc2VlbXMgYW4gdW5uZWNlc3Nhcnkgb3B0aW1pemF0aW9uLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGF0IHJlc2V0QWZ0ZXJJbmRleCgpIHdpbGwgYmUgY2FsbGVkIHdoaWxlIGEgdXNlciBpcyBzY3JvbGxpbmcuXG4gICAgICBpbnN0YW5jZS5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuXG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHM7XG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogZmFsc2UsXG5cbiAgdmFsaWRhdGVQcm9wczogKHsgY29sdW1uV2lkdGgsIHJvd0hlaWdodCB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uV2lkdGggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArXG4gICAgICAgICAgICBgXCIke1xuICAgICAgICAgICAgICBjb2x1bW5XaWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjb2x1bW5XaWR0aFxuICAgICAgICAgICAgfVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygcm93SGVpZ2h0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7cm93SGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJvd0hlaWdodH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVmFyaWFibGVTaXplR3JpZDtcbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgbWVtb2l6ZU9uZSBmcm9tICdtZW1vaXplLW9uZSc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY2FuY2VsVGltZW91dCwgcmVxdWVzdFRpbWVvdXQgfSBmcm9tICcuL3RpbWVyJztcbmltcG9ydCB7IGdldFNjcm9sbGJhclNpemUsIGdldFJUTE9mZnNldFR5cGUgfSBmcm9tICcuL2RvbUhlbHBlcnMnO1xuXG5pbXBvcnQgdHlwZSB7IFRpbWVvdXRJRCB9IGZyb20gJy4vdGltZXInO1xuXG5leHBvcnQgdHlwZSBTY3JvbGxUb0FsaWduID0gJ2F1dG8nIHwgJ3NtYXJ0JyB8ICdjZW50ZXInIHwgJ3N0YXJ0JyB8ICdlbmQnO1xuXG50eXBlIGl0ZW1TaXplID0gbnVtYmVyIHwgKChpbmRleDogbnVtYmVyKSA9PiBudW1iZXIpO1xuLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9ucyBcImhvcml6b250YWxcIiBhbmQgXCJ2ZXJ0aWNhbFwiXG50eXBlIERpcmVjdGlvbiA9ICdsdHInIHwgJ3J0bCcgfCAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xudHlwZSBMYXlvdXQgPSAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuXG50eXBlIFJlbmRlckNvbXBvbmVudFByb3BzPFQ+ID0ge3xcbiAgZGF0YTogVCxcbiAgaW5kZXg6IG51bWJlcixcbiAgaXNTY3JvbGxpbmc/OiBib29sZWFuLFxuICBzdHlsZTogT2JqZWN0LFxufH07XG50eXBlIFJlbmRlckNvbXBvbmVudDxUPiA9IFJlYWN0JENvbXBvbmVudFR5cGU8JFNoYXBlPFJlbmRlckNvbXBvbmVudFByb3BzPFQ+Pj47XG5cbnR5cGUgU2Nyb2xsRGlyZWN0aW9uID0gJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJztcblxudHlwZSBvbkl0ZW1zUmVuZGVyZWRDYWxsYmFjayA9ICh7XG4gIG92ZXJzY2FuU3RhcnRJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhblN0b3BJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlU3RhcnRJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlU3RvcEluZGV4OiBudW1iZXIsXG59KSA9PiB2b2lkO1xudHlwZSBvblNjcm9sbENhbGxiYWNrID0gKHtcbiAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG59KSA9PiB2b2lkO1xuXG50eXBlIFNjcm9sbEV2ZW50ID0gU3ludGhldGljRXZlbnQ8SFRNTERpdkVsZW1lbnQ+O1xudHlwZSBJdGVtU3R5bGVDYWNoZSA9IHsgW2luZGV4OiBudW1iZXJdOiBPYmplY3QgfTtcblxudHlwZSBPdXRlclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIGNsYXNzTmFtZTogc3RyaW5nIHwgdm9pZCxcbiAgb25TY3JvbGw6IFNjcm9sbEV2ZW50ID0+IHZvaWQsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbnR5cGUgSW5uZXJQcm9wcyA9IHt8XG4gIGNoaWxkcmVuOiBSZWFjdCROb2RlLFxuICBzdHlsZToge1xuICAgIFtzdHJpbmddOiBtaXhlZCxcbiAgfSxcbnx9O1xuXG5leHBvcnQgdHlwZSBQcm9wczxUPiA9IHt8XG4gIGNoaWxkcmVuOiBSZW5kZXJDb21wb25lbnQ8VD4sXG4gIGNsYXNzTmFtZT86IHN0cmluZyxcbiAgZGlyZWN0aW9uOiBEaXJlY3Rpb24sXG4gIGhlaWdodDogbnVtYmVyIHwgc3RyaW5nLFxuICBpbml0aWFsU2Nyb2xsT2Zmc2V0PzogbnVtYmVyLFxuICBpbm5lclJlZj86IGFueSxcbiAgaW5uZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PElubmVyUHJvcHMsIGFueT4sXG4gIGlubmVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBpdGVtQ291bnQ6IG51bWJlcixcbiAgaXRlbURhdGE6IFQsXG4gIGl0ZW1LZXk/OiAoaW5kZXg6IG51bWJlciwgZGF0YTogVCkgPT4gYW55LFxuICBpdGVtU2l6ZTogaXRlbVNpemUsXG4gIGxheW91dDogTGF5b3V0LFxuICBvbkl0ZW1zUmVuZGVyZWQ/OiBvbkl0ZW1zUmVuZGVyZWRDYWxsYmFjayxcbiAgb25TY3JvbGw/OiBvblNjcm9sbENhbGxiYWNrLFxuICBvdXRlclJlZj86IGFueSxcbiAgb3V0ZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PE91dGVyUHJvcHMsIGFueT4sXG4gIG91dGVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBvdmVyc2NhbkNvdW50OiBudW1iZXIsXG4gIHN0eWxlPzogT2JqZWN0LFxuICB1c2VJc1Njcm9sbGluZzogYm9vbGVhbixcbiAgd2lkdGg6IG51bWJlciB8IHN0cmluZyxcbnx9O1xuXG50eXBlIFN0YXRlID0ge3xcbiAgaW5zdGFuY2U6IGFueSxcbiAgaXNTY3JvbGxpbmc6IGJvb2xlYW4sXG4gIHNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuLFxufH07XG5cbnR5cGUgR2V0SXRlbU9mZnNldCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEdldEl0ZW1TaXplID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0RXN0aW1hdGVkVG90YWxTaXplID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZVByb3BzOiBhbnkpID0+IG51bWJlcjtcbnR5cGUgR2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBvZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEluaXRJbnN0YW5jZVByb3BzID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KSA9PiBhbnk7XG50eXBlIFZhbGlkYXRlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4pID0+IHZvaWQ7XG5cbmNvbnN0IElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCA9IDE1MDtcblxuY29uc3QgZGVmYXVsdEl0ZW1LZXkgPSAoaW5kZXg6IG51bWJlciwgZGF0YTogYW55KSA9PiBpbmRleDtcblxuLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5sZXQgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSBudWxsO1xubGV0IGRldldhcm5pbmdzVGFnTmFtZSA9IG51bGw7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzRGlyZWN0aW9uID0gbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc1RhZ05hbWUgPSBuZXcgV2Vha1NldCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gIGdldEl0ZW1TaXplLFxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gIHZhbGlkYXRlUHJvcHMsXG59OiB7fFxuICBnZXRJdGVtT2Zmc2V0OiBHZXRJdGVtT2Zmc2V0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6IEdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0SXRlbVNpemU6IEdldEl0ZW1TaXplLFxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogR2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQsXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IEdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGluaXRJbnN0YW5jZVByb3BzOiBJbml0SW5zdGFuY2VQcm9wcyxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogYm9vbGVhbixcbiAgdmFsaWRhdGVQcm9wczogVmFsaWRhdGVQcm9wcyxcbnx9KSB7XG4gIHJldHVybiBjbGFzcyBMaXN0PFQ+IGV4dGVuZHMgUHVyZUNvbXBvbmVudDxQcm9wczxUPiwgU3RhdGU+IHtcbiAgICBfaW5zdGFuY2VQcm9wczogYW55ID0gaW5pdEluc3RhbmNlUHJvcHModGhpcy5wcm9wcywgdGhpcyk7XG4gICAgX291dGVyUmVmOiA/SFRNTERpdkVsZW1lbnQ7XG4gICAgX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQ6IFRpbWVvdXRJRCB8IG51bGwgPSBudWxsO1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgICBpdGVtRGF0YTogdW5kZWZpbmVkLFxuICAgICAgbGF5b3V0OiAndmVydGljYWwnLFxuICAgICAgb3ZlcnNjYW5Db3VudDogMixcbiAgICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgc3RhdGU6IFN0YXRlID0ge1xuICAgICAgaW5zdGFuY2U6IHRoaXMsXG4gICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICBzY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICAgIHNjcm9sbE9mZnNldDpcbiAgICAgICAgdHlwZW9mIHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbE9mZnNldCA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbE9mZnNldFxuICAgICAgICAgIDogMCxcbiAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgfTtcblxuICAgIC8vIEFsd2F5cyB1c2UgZXhwbGljaXQgY29uc3RydWN0b3IgZm9yIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgLy8gSXQgcHJvZHVjZXMgbGVzcyBjb2RlIGFmdGVyIHRyYW5zcGlsYXRpb24uICgjMjYpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHM8VD4pIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgbmV4dFByb3BzOiBQcm9wczxUPixcbiAgICAgIHByZXZTdGF0ZTogU3RhdGVcbiAgICApOiAkU2hhcGU8U3RhdGU+IHwgbnVsbCB7XG4gICAgICB2YWxpZGF0ZVNoYXJlZFByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIHZhbGlkYXRlUHJvcHMobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHNjcm9sbFRvKHNjcm9sbE9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBzY3JvbGxPZmZzZXQpO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH1cblxuICAgIHNjcm9sbFRvSXRlbShpbmRleDogbnVtYmVyLCBhbGlnbjogU2Nyb2xsVG9BbGlnbiA9ICdhdXRvJyk6IHZvaWQge1xuICAgICAgY29uc3QgeyBpdGVtQ291bnQsIGxheW91dCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgc2Nyb2xsT2Zmc2V0IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSk7XG5cbiAgICAgIC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldywgdG8gZW5zdXJlIGl0J3MgZnVsbHkgdmlzaWJsZS5cbiAgICAgIC8vIEJ1dCB3ZSBvbmx5IG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIHNpemUgd2hlbiBpdCdzIGFjdHVhbGx5IHZpc2libGUuXG4gICAgICAvLyBUaGlzIGlzIGFuIGVkZ2UgY2FzZSBmb3IgbGlzdHM7IG5vcm1hbGx5IHRoZXkgb25seSBzY3JvbGwgaW4gdGhlIGRvbWluYW50IGRpcmVjdGlvbi5cbiAgICAgIGxldCBzY3JvbGxiYXJTaXplID0gMDtcbiAgICAgIGlmICh0aGlzLl9vdXRlclJlZikge1xuICAgICAgICBjb25zdCBvdXRlclJlZiA9ICgodGhpcy5fb3V0ZXJSZWY6IGFueSk6IEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGxheW91dCA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIHNjcm9sbGJhclNpemUgPVxuICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsV2lkdGggPiBvdXRlclJlZi5jbGllbnRXaWR0aFxuICAgICAgICAgICAgICA/IGdldFNjcm9sbGJhclNpemUoKVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxIZWlnaHQgPiBvdXRlclJlZi5jbGllbnRIZWlnaHRcbiAgICAgICAgICAgICAgPyBnZXRTY3JvbGxiYXJTaXplKClcbiAgICAgICAgICAgICAgOiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG8oXG4gICAgICAgIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KFxuICAgICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgYWxpZ24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHMsXG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgY29uc3QgeyBkaXJlY3Rpb24sIGluaXRpYWxTY3JvbGxPZmZzZXQsIGxheW91dCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJyAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuICAgICAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IGluaXRpYWxTY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxPZmZzZXQsIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuXG4gICAgICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIG1pbWljIGl0LlxuICAgICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSAtc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1hc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjbGllbnRXaWR0aCwgc2Nyb2xsV2lkdGggfSA9IG91dGVyUmVmO1xuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGlubmVyUmVmLFxuICAgICAgICBpbm5lckVsZW1lbnRUeXBlLFxuICAgICAgICBpbm5lclRhZ05hbWUsXG4gICAgICAgIGl0ZW1Db3VudCxcbiAgICAgICAgaXRlbURhdGEsXG4gICAgICAgIGl0ZW1LZXkgPSBkZWZhdWx0SXRlbUtleSxcbiAgICAgICAgbGF5b3V0LFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICBvdXRlclRhZ05hbWUsXG4gICAgICAgIHN0eWxlLFxuICAgICAgICB1c2VJc1Njcm9sbGluZyxcbiAgICAgICAgd2lkdGgsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaXNTY3JvbGxpbmcgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgICAgY29uc3QgaXNIb3Jpem9udGFsID1cbiAgICAgICAgZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG5cbiAgICAgIGNvbnN0IG9uU2Nyb2xsID0gaXNIb3Jpem9udGFsXG4gICAgICAgID8gdGhpcy5fb25TY3JvbGxIb3Jpem9udGFsXG4gICAgICAgIDogdGhpcy5fb25TY3JvbGxWZXJ0aWNhbDtcblxuICAgICAgY29uc3QgW3N0YXJ0SW5kZXgsIHN0b3BJbmRleF0gPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCk7XG5cbiAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0SW5kZXg7IGluZGV4IDw9IHN0b3BJbmRleDsgaW5kZXgrKykge1xuICAgICAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICBrZXk6IGl0ZW1LZXkoaW5kZXgsIGl0ZW1EYXRhKSxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBzdHlsZTogdGhpcy5fZ2V0SXRlbVN0eWxlKGluZGV4KSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWFkIHRoaXMgdmFsdWUgQUZURVIgaXRlbXMgaGF2ZSBiZWVuIGNyZWF0ZWQsXG4gICAgICAvLyBTbyB0aGVpciBhY3R1YWwgc2l6ZXMgKGlmIHZhcmlhYmxlKSBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxTaXplID0gZ2V0RXN0aW1hdGVkVG90YWxTaXplKFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSB8fCBvdXRlclRhZ05hbWUgfHwgJ2RpdicsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgb25TY3JvbGwsXG4gICAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlRWxlbWVudChpbm5lckVsZW1lbnRUeXBlIHx8IGlubmVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICAgIGNoaWxkcmVuOiBpdGVtcyxcbiAgICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBoZWlnaHQ6IGlzSG9yaXpvbnRhbCA/ICcxMDAlJyA6IGVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IGlzU2Nyb2xsaW5nID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IGVzdGltYXRlZFRvdGFsU2l6ZSA6ICcxMDAlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZDogKFxuICAgICAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVTdG9wSW5kZXg6IG51bWJlclxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoXG4gICAgICAoXG4gICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlU3RvcEluZGV4OiBudW1iZXJcbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZDogYW55KTogb25JdGVtc1JlbmRlcmVkQ2FsbGJhY2spKHtcbiAgICAgICAgICBvdmVyc2NhblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVN0b3BJbmRleCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxPblNjcm9sbDogKFxuICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uU2Nyb2xsID0gbWVtb2l6ZU9uZShcbiAgICAgIChcbiAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW5cbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uU2Nyb2xsOiBhbnkpOiBvblNjcm9sbENhbGxiYWNrKSh7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IHsgaXRlbUNvdW50IH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuU3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCk7XG4gICAgICAgICAgdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZChcbiAgICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuU3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25TY3JvbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkLFxuICAgICAgICB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsbE9uU2Nyb2xsKFxuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGF6aWx5IGNyZWF0ZSBhbmQgY2FjaGUgaXRlbSBzdHlsZXMgd2hpbGUgc2Nyb2xsaW5nLFxuICAgIC8vIFNvIHRoYXQgcHVyZSBjb21wb25lbnQgc0NVIHdpbGwgcHJldmVudCByZS1yZW5kZXJzLlxuICAgIC8vIFdlIG1haW50YWluIHRoaXMgY2FjaGUsIGFuZCBwYXNzIGEgc3R5bGUgcHJvcCByYXRoZXIgdGhhbiBpbmRleCxcbiAgICAvLyBTbyB0aGF0IExpc3QgY2FuIGNsZWFyIGNhY2hlZCBzdHlsZXMgYW5kIGZvcmNlIGl0ZW0gcmUtcmVuZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICBfZ2V0SXRlbVN0eWxlOiAoaW5kZXg6IG51bWJlcikgPT4gT2JqZWN0O1xuICAgIF9nZXRJdGVtU3R5bGUgPSAoaW5kZXg6IG51bWJlcik6IE9iamVjdCA9PiB7XG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgaXRlbVNpemUsIGxheW91dCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3QgaXRlbVN0eWxlQ2FjaGUgPSB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZShcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBpdGVtU2l6ZSxcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBsYXlvdXQsXG4gICAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgZGlyZWN0aW9uXG4gICAgICApO1xuXG4gICAgICBsZXQgc3R5bGU7XG4gICAgICBpZiAoaXRlbVN0eWxlQ2FjaGUuaGFzT3duUHJvcGVydHkoaW5kZXgpKSB7XG4gICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVbaW5kZXhdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0SXRlbU9mZnNldCh0aGlzLnByb3BzLCBpbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICAgIGNvbnN0IHNpemUgPSBnZXRJdGVtU2l6ZSh0aGlzLnByb3BzLCBpbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG5cbiAgICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9XG4gICAgICAgICAgZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG5cbiAgICAgICAgY29uc3QgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICBjb25zdCBvZmZzZXRIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsID8gb2Zmc2V0IDogMDtcbiAgICAgICAgaXRlbVN0eWxlQ2FjaGVbaW5kZXhdID0gc3R5bGUgPSB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBvZmZzZXRIb3Jpem9udGFsLFxuICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IG9mZnNldEhvcml6b250YWwgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdG9wOiAhaXNIb3Jpem9udGFsID8gb2Zmc2V0IDogMCxcbiAgICAgICAgICBoZWlnaHQ6ICFpc0hvcml6b250YWwgPyBzaXplIDogJzEwMCUnLFxuICAgICAgICAgIHdpZHRoOiBpc0hvcml6b250YWwgPyBzaXplIDogJzEwMCUnLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfTtcblxuICAgIF9nZXRJdGVtU3R5bGVDYWNoZTogKF86IGFueSwgX186IGFueSwgX19fOiBhbnkpID0+IEl0ZW1TdHlsZUNhY2hlO1xuICAgIF9nZXRJdGVtU3R5bGVDYWNoZSA9IG1lbW9pemVPbmUoKF86IGFueSwgX186IGFueSwgX19fOiBhbnkpID0+ICh7fSkpO1xuXG4gICAgX2dldFJhbmdlVG9SZW5kZXIoKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgICAgY29uc3QgeyBpdGVtQ291bnQsIG92ZXJzY2FuQ291bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGlzU2Nyb2xsaW5nLCBzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbE9mZnNldCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKGl0ZW1Db3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gZ2V0U3RhcnRJbmRleEZvck9mZnNldChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RvcEluZGV4ID0gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG4gICAgICBjb25zdCBvdmVyc2NhbkJhY2t3YXJkID1cbiAgICAgICAgIWlzU2Nyb2xsaW5nIHx8IHNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudClcbiAgICAgICAgICA6IDE7XG4gICAgICBjb25zdCBvdmVyc2NhbkZvcndhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnQpXG4gICAgICAgICAgOiAxO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICBNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksXG4gICAgICAgIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzdG9wSW5kZXgsXG4gICAgICBdO1xuICAgIH1cblxuICAgIF9vblNjcm9sbEhvcml6b250YWwgPSAoZXZlbnQ6IFNjcm9sbEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBzY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCB9ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbExlZnQpIHtcbiAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgbGV0IHNjcm9sbE9mZnNldCA9IHNjcm9sbExlZnQ7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgIC8vIEl0J3MgYWxzbyBlYXNpZXIgZm9yIHRoaXMgY29tcG9uZW50IGlmIHdlIGNvbnZlcnQgb2Zmc2V0cyB0byB0aGUgc2FtZSBmb3JtYXQgYXMgdGhleSB3b3VsZCBiZSBpbiBmb3IgbHRyLlxuICAgICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnOlxuICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG4gICAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oc2Nyb2xsT2Zmc2V0LCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX29uU2Nyb2xsVmVydGljYWwgPSAoZXZlbnQ6IFNjcm9sbEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7IGNsaWVudEhlaWdodCwgc2Nyb2xsSGVpZ2h0LCBzY3JvbGxUb3AgfSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG4gICAgICAgIGNvbnN0IHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb3V0ZXJSZWZTZXR0ZXIgPSAocmVmOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgb3V0ZXJSZWYgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIHRoaXMuX291dGVyUmVmID0gKChyZWY6IGFueSk6IEhUTUxEaXZFbGVtZW50KTtcblxuICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgb3V0ZXJSZWYgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmXG4gICAgICAgIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JylcbiAgICAgICkge1xuICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChcbiAgICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZyxcbiAgICAgICAgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXNTY3JvbGxpbmc6IGZhbHNlIH0sICgpID0+IHtcbiAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSwgbnVsbCk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuXG4vLyBOT1RFOiBJIGNvbnNpZGVyZWQgZnVydGhlciB3cmFwcGluZyBpbmRpdmlkdWFsIGl0ZW1zIHdpdGggYSBwdXJlIExpc3RJdGVtIGNvbXBvbmVudC5cbi8vIFRoaXMgd291bGQgYXZvaWQgZXZlciBjYWxsaW5nIHRoZSByZW5kZXIgZnVuY3Rpb24gZm9yIHRoZSBzYW1lIGluZGV4IG1vcmUgdGhhbiBvbmNlLFxuLy8gQnV0IGl0IHdvdWxkIGFsc28gYWRkIHRoZSBvdmVyaGVhZCBvZiBhIGxvdCBvZiBjb21wb25lbnRzL2ZpYmVycy5cbi8vIEkgYXNzdW1lIHBlb3BsZSBhbHJlYWR5IGRvIHRoaXMgKHJlbmRlciBmdW5jdGlvbiByZXR1cm5pbmcgYSBjbGFzcyBjb21wb25lbnQpLFxuLy8gU28gbXkgZG9pbmcgaXQgd291bGQganVzdCB1bm5lY2Vzc2FyaWx5IGRvdWJsZSB0aGUgd3JhcHBlcnMuXG5cbmNvbnN0IHZhbGlkYXRlU2hhcmVkUHJvcHMgPSAoXG4gIHtcbiAgICBjaGlsZHJlbixcbiAgICBkaXJlY3Rpb24sXG4gICAgaGVpZ2h0LFxuICAgIGxheW91dCxcbiAgICBpbm5lclRhZ05hbWUsXG4gICAgb3V0ZXJUYWdOYW1lLFxuICAgIHdpZHRoLFxuICB9OiBQcm9wczxhbnk+LFxuICB7IGluc3RhbmNlIH06IFN0YXRlXG4pOiB2b2lkID0+IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUgJiYgIWRldldhcm5pbmdzVGFnTmFtZS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgaW5uZXJFbGVtZW50VHlwZSBhbmQgb3V0ZXJFbGVtZW50VHlwZSBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgaWYgKGRldldhcm5pbmdzRGlyZWN0aW9uICYmICFkZXZXYXJuaW5nc0RpcmVjdGlvbi5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgZGV2V2FybmluZ3NEaXJlY3Rpb24uYWRkKGluc3RhbmNlKTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAnVGhlIGRpcmVjdGlvbiBwcm9wIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiAoZGVmYXVsdCkgb3IgXCJydGxcIi4gJyArXG4gICAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBsYXlvdXQgcHJvcCB0byBzcGVjaWZ5IFwidmVydGljYWxcIiAoZGVmYXVsdCkgb3IgXCJob3Jpem9udGFsXCIgb3JpZW50YXRpb24uJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsdHInOlxuICAgICAgY2FzZSAncnRsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJkaXJlY3Rpb25cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIG9yIFwicnRsXCIuICcgK1xuICAgICAgICAgICAgYFwiJHtkaXJlY3Rpb259XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChsYXlvdXQpIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImxheW91dFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwiaG9yaXpvbnRhbFwiIG9yIFwidmVydGljYWxcIi4gJyArXG4gICAgICAgICAgICBgXCIke2xheW91dH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIFJlYWN0IGNvbXBvbmVudC4gJyArXG4gICAgICAgICAgYFwiJHtjaGlsZHJlbiA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjaGlsZHJlbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGlzSG9yaXpvbnRhbCAmJiB0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnSG9yaXpvbnRhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIHdpZHRoLiAnICtcbiAgICAgICAgICBgXCIke3dpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHdpZHRofVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCFpc0hvcml6b250YWwgJiYgdHlwZW9mIGhlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQW4gaW52YWxpZCBcImhlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmVydGljYWwgbGlzdHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciBoZWlnaHQuICcgK1xuICAgICAgICAgIGBcIiR7aGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGhlaWdodH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG59O1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBjcmVhdGVMaXN0Q29tcG9uZW50IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbmltcG9ydCB0eXBlIHsgUHJvcHMsIFNjcm9sbFRvQWxpZ24gfSBmcm9tICcuL2NyZWF0ZUxpc3RDb21wb25lbnQnO1xuXG5jb25zdCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUgPSA1MDtcblxudHlwZSBWYXJpYWJsZVNpemVQcm9wcyA9IHt8XG4gIGVzdGltYXRlZEl0ZW1TaXplOiBudW1iZXIsXG4gIC4uLlByb3BzPGFueT4sXG58fTtcblxudHlwZSBpdGVtU2l6ZUdldHRlciA9IChpbmRleDogbnVtYmVyKSA9PiBudW1iZXI7XG5cbnR5cGUgSXRlbU1ldGFkYXRhID0ge3xcbiAgb2Zmc2V0OiBudW1iZXIsXG4gIHNpemU6IG51bWJlcixcbnx9O1xudHlwZSBJbnN0YW5jZVByb3BzID0ge3xcbiAgaXRlbU1ldGFkYXRhTWFwOiB7IFtpbmRleDogbnVtYmVyXTogSXRlbU1ldGFkYXRhIH0sXG4gIGVzdGltYXRlZEl0ZW1TaXplOiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZEluZGV4OiBudW1iZXIsXG58fTtcblxuY29uc3QgZ2V0SXRlbU1ldGFkYXRhID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuKTogSXRlbU1ldGFkYXRhID0+IHtcbiAgY29uc3QgeyBpdGVtU2l6ZSB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuICBjb25zdCB7IGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXggfSA9IGluc3RhbmNlUHJvcHM7XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIGxldCBzaXplID0gKChpdGVtU2l6ZTogYW55KTogaXRlbVNpemVHZXR0ZXIpKGkpO1xuXG4gICAgICBpdGVtTWV0YWRhdGFNYXBbaV0gPSB7XG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgb2Zmc2V0OiBudW1iZXJcbikgPT4ge1xuICBjb25zdCB7IGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXggfSA9IGluc3RhbmNlUHJvcHM7XG5cbiAgY29uc3QgbGFzdE1lYXN1cmVkSXRlbU9mZnNldCA9XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPiAwID8gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XS5vZmZzZXQgOiAwO1xuXG4gIGlmIChsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID49IG9mZnNldCkge1xuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgbWVhc3VyZWQgaXRlbXMgd2l0aGluIHRoaXMgcmFuZ2UganVzdCB1c2UgYSBiaW5hcnkgc2VhcmNoIGFzIGl0J3MgZmFzdGVyLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCxcbiAgICAgIDAsXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKFxuICAgICAgcHJvcHMsXG4gICAgICBpbnN0YW5jZVByb3BzLFxuICAgICAgTWF0aC5tYXgoMCwgbGFzdE1lYXN1cmVkSW5kZXgpLFxuICAgICAgb2Zmc2V0XG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgaGlnaDogbnVtYmVyLFxuICBsb3c6IG51bWJlcixcbiAgb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgIGNvbnN0IG1pZGRsZSA9IGxvdyArIE1hdGguZmxvb3IoKGhpZ2ggLSBsb3cpIC8gMik7XG4gICAgY29uc3QgY3VycmVudE9mZnNldCA9IGdldEl0ZW1NZXRhZGF0YShwcm9wcywgbWlkZGxlLCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG5cbiAgICBpZiAoY3VycmVudE9mZnNldCA9PT0gb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbWlkZGxlO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA8IG9mZnNldCkge1xuICAgICAgbG93ID0gbWlkZGxlICsgMTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPiBvZmZzZXQpIHtcbiAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsb3cgPiAwKSB7XG4gICAgcmV0dXJuIGxvdyAtIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbmNvbnN0IGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgaW5kZXg6IG51bWJlcixcbiAgb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IHsgaXRlbUNvdW50IH0gPSBwcm9wcztcbiAgbGV0IGludGVydmFsID0gMTtcblxuICB3aGlsZSAoXG4gICAgaW5kZXggPCBpdGVtQ291bnQgJiZcbiAgICBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXRcbiAgKSB7XG4gICAgaW5kZXggKz0gaW50ZXJ2YWw7XG4gICAgaW50ZXJ2YWwgKj0gMjtcbiAgfVxuXG4gIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goXG4gICAgcHJvcHMsXG4gICAgaW5zdGFuY2VQcm9wcyxcbiAgICBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSksXG4gICAgTWF0aC5mbG9vcihpbmRleCAvIDIpLFxuICAgIG9mZnNldFxuICApO1xufTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gKFxuICB7IGl0ZW1Db3VudCB9OiBQcm9wczxhbnk+LFxuICB7IGl0ZW1NZXRhZGF0YU1hcCwgZXN0aW1hdGVkSXRlbVNpemUsIGxhc3RNZWFzdXJlZEluZGV4IH06IEluc3RhbmNlUHJvcHNcbikgPT4ge1xuICBsZXQgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gMDtcblxuICAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gaXRlbUNvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpdGVtQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIGNvbnN0IG51bVVubWVhc3VyZWRJdGVtcyA9IGl0ZW1Db3VudCAtIGxhc3RNZWFzdXJlZEluZGV4IC0gMTtcbiAgY29uc3QgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRJdGVtU2l6ZTtcblxuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG5jb25zdCBWYXJpYWJsZVNpemVMaXN0ID0gY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCxcblxuICBnZXRJdGVtU2l6ZTogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXBbaW5kZXhdLnNpemUsXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBoZWlnaHQsIGxheW91dCwgd2lkdGggfSA9IHByb3BzO1xuXG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKTtcblxuICAgIC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gICAgLy8gVG8gZW5zdXJlIGl0IHJlZmxlY3RzIGFjdHVhbCBtZWFzdXJlbWVudHMgaW5zdGVhZCBvZiBqdXN0IGVzdGltYXRlcy5cbiAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUocHJvcHMsIGluc3RhbmNlUHJvcHMpO1xuXG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oZXN0aW1hdGVkVG90YWxTaXplIC0gc2l6ZSwgaXRlbU1ldGFkYXRhLm9mZnNldClcbiAgICApO1xuICAgIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgaXRlbU1ldGFkYXRhLnNpemUgKyBzY3JvbGxiYXJTaXplXG4gICAgKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKFxuICAgICAgICBzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJlxuICAgICAgICBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZVxuICAgICAgKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBmaW5kTmVhcmVzdEl0ZW0ocHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCksXG5cbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgeyBkaXJlY3Rpb24sIGhlaWdodCwgaXRlbUNvdW50LCBsYXlvdXQsIHdpZHRoIH0gPSBwcm9wcztcblxuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIGNvbnN0IHNpemUgPSAoKChpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodCk6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSBzY3JvbGxPZmZzZXQgKyBzaXplO1xuXG4gICAgbGV0IG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICBsZXQgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCBpdGVtQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcblxuICBpbml0SW5zdGFuY2VQcm9wcyhwcm9wczogUHJvcHM8YW55PiwgaW5zdGFuY2U6IGFueSk6IEluc3RhbmNlUHJvcHMge1xuICAgIGNvbnN0IHsgZXN0aW1hdGVkSXRlbVNpemUgfSA9ICgocHJvcHM6IGFueSk6IFZhcmlhYmxlU2l6ZVByb3BzKTtcblxuICAgIGNvbnN0IGluc3RhbmNlUHJvcHMgPSB7XG4gICAgICBpdGVtTWV0YWRhdGFNYXA6IHt9LFxuICAgICAgZXN0aW1hdGVkSXRlbVNpemU6IGVzdGltYXRlZEl0ZW1TaXplIHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4OiAtMSxcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGV4ID0gKFxuICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgIHNob3VsZEZvcmNlVXBkYXRlPzogYm9vbGVhbiA9IHRydWVcbiAgICApID0+IHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCxcbiAgICAgICAgaW5kZXggLSAxXG4gICAgICApO1xuXG4gICAgICAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcblxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJpdGVtU2l6ZVwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArXG4gICAgICAgICAgICBgXCIke2l0ZW1TaXplID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGl0ZW1TaXplfVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWYXJpYWJsZVNpemVMaXN0O1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBjcmVhdGVHcmlkQ29tcG9uZW50IGZyb20gJy4vY3JlYXRlR3JpZENvbXBvbmVudCc7XG5cbmltcG9ydCB0eXBlIHsgUHJvcHMsIFNjcm9sbFRvQWxpZ24gfSBmcm9tICcuL2NyZWF0ZUdyaWRDb21wb25lbnQnO1xuXG5jb25zdCBGaXhlZFNpemVHcmlkID0gY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogKHsgY29sdW1uV2lkdGggfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgIGluZGV4ICogKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSxcblxuICBnZXRDb2x1bW5XaWR0aDogKHsgY29sdW1uV2lkdGggfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0Um93T2Zmc2V0OiAoeyByb3dIZWlnaHQgfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgIGluZGV4ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0Um93SGVpZ2h0OiAoeyByb3dIZWlnaHQgfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0OiAoeyByb3dDb3VudCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pID0+XG4gICAgKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcikgKiByb3dDb3VudCxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoOiAoeyBjb2x1bW5Db3VudCwgY29sdW1uV2lkdGggfTogUHJvcHM8YW55PikgPT5cbiAgICAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpICogY29sdW1uQ291bnQsXG5cbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiAoXG4gICAgeyBjb2x1bW5Db3VudCwgY29sdW1uV2lkdGgsIHdpZHRoIH06IFByb3BzPGFueT4sXG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogdHlwZW9mIHVuZGVmaW5lZCxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsYXN0Q29sdW1uT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgY29sdW1uQ291bnQgKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpIC0gd2lkdGhcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgbGFzdENvbHVtbk9mZnNldCxcbiAgICAgIGNvbHVtbkluZGV4ICogKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgY29sdW1uSW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpIC1cbiAgICAgICAgd2lkdGggK1xuICAgICAgICBzY3JvbGxiYXJTaXplICtcbiAgICAgICAgKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxMZWZ0ID49IG1pbk9mZnNldCAtIHdpZHRoICYmIHNjcm9sbExlZnQgPD0gbWF4T2Zmc2V0ICsgd2lkdGgpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIGNvbnN0IG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgbWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwod2lkdGggLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0Q29sdW1uT2Zmc2V0ICsgTWF0aC5mbG9vcih3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RDb2x1bW5PZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbExlZnQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbExlZnQ7XG4gICAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbExlZnQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50OiAoXG4gICAgeyByb3dIZWlnaHQsIGhlaWdodCwgcm93Q291bnQgfTogUHJvcHM8YW55PixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IHR5cGVvZiB1bmRlZmluZWQsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgbGFzdFJvd09mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIHJvd0NvdW50ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcikgLSBoZWlnaHRcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgbGFzdFJvd09mZnNldCxcbiAgICAgIHJvd0luZGV4ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIHJvd0luZGV4ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcikgLVxuICAgICAgICBoZWlnaHQgK1xuICAgICAgICBzY3JvbGxiYXJTaXplICtcbiAgICAgICAgKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcilcbiAgICApO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAtIGhlaWdodCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0ICsgaGVpZ2h0KSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICBjb25zdCBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMlxuICAgICAgICApO1xuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RSb3dPZmZzZXQgKyBNYXRoLmZsb29yKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RSb3dPZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbFRvcCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsVG9wIDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxUb3A7XG4gICAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFRvcCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyBjb2x1bW5XaWR0aCwgY29sdW1uQ291bnQgfTogUHJvcHM8YW55PixcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGNvbHVtbkNvdW50IC0gMSxcbiAgICAgICAgTWF0aC5mbG9vcihzY3JvbGxMZWZ0IC8gKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSlcbiAgICAgIClcbiAgICApLFxuXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IGNvbHVtbldpZHRoLCBjb2x1bW5Db3VudCwgd2lkdGggfTogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgbGVmdCA9IHN0YXJ0SW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IG51bVZpc2libGVDb2x1bW5zID0gTWF0aC5jZWlsKFxuICAgICAgKHdpZHRoICsgc2Nyb2xsTGVmdCAtIGxlZnQpIC8gKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKFxuICAgICAgICBjb2x1bW5Db3VudCAtIDEsXG4gICAgICAgIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlQ29sdW1ucyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICAgKVxuICAgICk7XG4gIH0sXG5cbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHsgcm93SGVpZ2h0LCByb3dDb3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHNjcm9sbFRvcDogbnVtYmVyXG4gICk6IG51bWJlciA9PlxuICAgIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKHJvd0NvdW50IC0gMSwgTWF0aC5mbG9vcihzY3JvbGxUb3AgLyAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSkpXG4gICAgKSxcblxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgeyByb3dIZWlnaHQsIHJvd0NvdW50LCBoZWlnaHQgfTogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsVG9wOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB0b3AgPSBzdGFydEluZGV4ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgbnVtVmlzaWJsZVJvd3MgPSBNYXRoLmNlaWwoXG4gICAgICAoaGVpZ2h0ICsgc2Nyb2xsVG9wIC0gdG9wKSAvICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIHJvd0NvdW50IC0gMSxcbiAgICAgICAgc3RhcnRJbmRleCArIG51bVZpc2libGVSb3dzIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgICApXG4gICAgKTtcbiAgfSxcblxuICBpbml0SW5zdGFuY2VQcm9wcyhwcm9wczogUHJvcHM8YW55Pik6IGFueSB7XG4gICAgLy8gTm9vcFxuICB9LFxuXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IHRydWUsXG5cbiAgdmFsaWRhdGVQcm9wczogKHsgY29sdW1uV2lkdGgsIHJvd0hlaWdodCB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uV2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiY29sdW1uV2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICtcbiAgICAgICAgICAgIGBcIiR7XG4gICAgICAgICAgICAgIGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoXG4gICAgICAgICAgICB9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygcm93SGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcInJvd0hlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgK1xuICAgICAgICAgICAgYFwiJHtyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaXhlZFNpemVHcmlkO1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBjcmVhdGVMaXN0Q29tcG9uZW50IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbmltcG9ydCB0eXBlIHsgUHJvcHMsIFNjcm9sbFRvQWxpZ24gfSBmcm9tICcuL2NyZWF0ZUxpc3RDb21wb25lbnQnO1xuXG50eXBlIEluc3RhbmNlUHJvcHMgPSBhbnk7XG5cbmNvbnN0IEZpeGVkU2l6ZUxpc3QgPSBjcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogKHsgaXRlbVNpemUgfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgIGluZGV4ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSxcblxuICBnZXRJdGVtU2l6ZTogKHsgaXRlbVNpemUgfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgICgoaXRlbVNpemU6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplOiAoeyBpdGVtQ291bnQsIGl0ZW1TaXplIH06IFByb3BzPGFueT4pID0+XG4gICAgKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAqIGl0ZW1Db3VudCxcblxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogKFxuICAgIHsgZGlyZWN0aW9uLCBoZWlnaHQsIGl0ZW1Db3VudCwgaXRlbVNpemUsIGxheW91dCwgd2lkdGggfTogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBsYXN0SXRlbU9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGl0ZW1Db3VudCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcikgLSBzaXplXG4gICAgKTtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1pbihcbiAgICAgIGxhc3RJdGVtT2Zmc2V0LFxuICAgICAgaW5kZXggKiAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICBjb25zdCBtaW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBpbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcikgLVxuICAgICAgICBzaXplICtcbiAgICAgICAgKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSArXG4gICAgICAgIHNjcm9sbGJhclNpemVcbiAgICApO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmXG4gICAgICAgIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplXG4gICAgICApIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOiB7XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgY29uc3QgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbChzaXplIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdEl0ZW1PZmZzZXQgKyBNYXRoLmZsb29yKHNpemUgLyAyKSkge1xuICAgICAgICAgIHJldHVybiBsYXN0SXRlbU9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHsgaXRlbUNvdW50LCBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LFxuICAgIG9mZnNldDogbnVtYmVyXG4gICk6IG51bWJlciA9PlxuICAgIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIE1hdGguZmxvb3Iob2Zmc2V0IC8gKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSkpXG4gICAgKSxcblxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgeyBkaXJlY3Rpb24sIGhlaWdodCwgaXRlbUNvdW50LCBpdGVtU2l6ZSwgbGF5b3V0LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIGNvbnN0IG9mZnNldCA9IHN0YXJ0SW5kZXggKiAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IHNpemUgPSAoKChpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodCk6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgbnVtVmlzaWJsZUl0ZW1zID0gTWF0aC5jZWlsKFxuICAgICAgKHNpemUgKyBzY3JvbGxPZmZzZXQgLSBvZmZzZXQpIC8gKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKFxuICAgICAgICBpdGVtQ291bnQgLSAxLFxuICAgICAgICBzdGFydEluZGV4ICsgbnVtVmlzaWJsZUl0ZW1zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgICApXG4gICAgKTtcbiAgfSxcblxuICBpbml0SW5zdGFuY2VQcm9wcyhwcm9wczogUHJvcHM8YW55Pik6IGFueSB7XG4gICAgLy8gTm9vcFxuICB9LFxuXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IHRydWUsXG5cbiAgdmFsaWRhdGVQcm9wczogKHsgaXRlbVNpemUgfTogUHJvcHM8YW55Pik6IHZvaWQgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW1TaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArXG4gICAgICAgICAgICBgXCIke2l0ZW1TaXplID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGl0ZW1TaXplfVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaXhlZFNpemVMaXN0O1xuIiwgIi8vIEBmbG93XG5cbi8vIFB1bGxlZCBmcm9tIHJlYWN0LWNvbXBhdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9wcmVhY3QtY29tcGF0L2Jsb2IvN2M1ZGUwMGU3Yzg1ZTJmZmQwMTFiZjNhZjAyODk5YjYzZjY5OWQzYS9zcmMvaW5kZXguanMjTDM0OVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hhbGxvd0RpZmZlcnMocHJldjogT2JqZWN0LCBuZXh0OiBPYmplY3QpOiBib29sZWFuIHtcbiAgZm9yIChsZXQgYXR0cmlidXRlIGluIHByZXYpIHtcbiAgICBpZiAoIShhdHRyaWJ1dGUgaW4gbmV4dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gbmV4dCkge1xuICAgIGlmIChwcmV2W2F0dHJpYnV0ZV0gIT09IG5leHRbYXR0cmlidXRlXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgc2hhbGxvd0RpZmZlcnMgZnJvbSAnLi9zaGFsbG93RGlmZmVycyc7XG5cbi8vIEN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBSZWFjdC5tZW1vKCkuXG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0bWVtb1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXJlRXF1YWwoXG4gIHByZXZQcm9wczogT2JqZWN0LFxuICBuZXh0UHJvcHM6IE9iamVjdFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgc3R5bGU6IHByZXZTdHlsZSwgLi4ucHJldlJlc3QgfSA9IHByZXZQcm9wcztcbiAgY29uc3QgeyBzdHlsZTogbmV4dFN0eWxlLCAuLi5uZXh0UmVzdCB9ID0gbmV4dFByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgIXNoYWxsb3dEaWZmZXJzKHByZXZTdHlsZSwgbmV4dFN0eWxlKSAmJiAhc2hhbGxvd0RpZmZlcnMocHJldlJlc3QsIG5leHRSZXN0KVxuICApO1xufVxuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBhcmVFcXVhbCBmcm9tICcuL2FyZUVxdWFsJztcbmltcG9ydCBzaGFsbG93RGlmZmVycyBmcm9tICcuL3NoYWxsb3dEaWZmZXJzJztcblxuLy8gQ3VzdG9tIHNob3VsZENvbXBvbmVudFVwZGF0ZSBmb3IgY2xhc3MgY29tcG9uZW50cy5cbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtY29tcG9uZW50Lmh0bWwjc2hvdWxkY29tcG9uZW50dXBkYXRlXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUoXG4gIG5leHRQcm9wczogT2JqZWN0LFxuICBuZXh0U3RhdGU6IE9iamVjdFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgIWFyZUVxdWFsKHRoaXMucHJvcHMsIG5leHRQcm9wcykgfHwgc2hhbGxvd0RpZmZlcnModGhpcy5zdGF0ZSwgbmV4dFN0YXRlKVxuICApO1xufVxuIiwgInZhciBfZXhjbHVkZWQgPSBbXCJkYXRhLXRlc3Qtc3VialwiLCBcImFzeW5jXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcHJlc3NlZFwiLCBcImN1c3RvbU9wdGlvblRleHRcIiwgXCJmdWxsV2lkdGhcIiwgXCJpZFwiLCBcImlucHV0UmVmXCIsIFwiaXNDYXNlU2Vuc2l0aXZlXCIsIFwiaXNDbGVhcmFibGVcIiwgXCJpc0Rpc2FibGVkXCIsIFwiaXNJbnZhbGlkXCIsIFwiaXNMb2FkaW5nXCIsIFwibm9TdWdnZXN0aW9uc1wiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25DcmVhdGVPcHRpb25cIiwgXCJvblNlYXJjaENoYW5nZVwiLCBcIm9wdGlvbnNcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlbmRlck9wdGlvblwiLCBcInJvd0hlaWdodFwiLCBcInNlbGVjdGVkT3B0aW9uc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcInByZXBlbmRcIiwgXCJzb3J0TWF0Y2hlc0J5XCIsIFwiZGVsaW1pdGVyXCIsIFwiYXBwZW5kXCIsIFwiYXV0b0ZvY3VzXCIsIFwidHJ1bmNhdGlvblByb3BzXCIsIFwiaW5wdXRQb3BvdmVyUHJvcHNcIiwgXCJvcHRpb25NYXRjaGVyXCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBFbGVtZW50cyB3aXRoaW4gRXVpQ29tYm9Cb3ggd2hpY2ggd291bGQgbm9ybWFsbHkgYmUgdGFiYmFibGUgKGlucHV0cywgYnV0dG9ucykgaGF2ZSBiZWVuIHJlbW92ZWRcbiAqIGZyb20gdGhlIHRhYiBvcmRlciB3aXRoIHRhYmluZGV4PXstMX0gc28gdGhhdCB3ZSBjYW4gY29udHJvbCB0aGUga2V5Ym9hcmQgbmF2aWdhdGlvbiBpbnRlcmZhY2UuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IFJlbmRlcldpdGhFdWlUaGVtZSwgaHRtbElkR2VuZXJhdG9yLCBrZXlzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgbG9naWNhbFN0eWxlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgRXVpSW5wdXRQb3BvdmVyIH0gZnJvbSAnLi4vcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBldWlGb3JtTWF4V2lkdGggfSBmcm9tICcuLi9mb3JtL2Zvcm0uc3R5bGVzJztcbmltcG9ydCB7IGdldE1hdGNoaW5nT3B0aW9ucywgZmxhdHRlbk9wdGlvbkdyb3VwcywgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSwgdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5LCBjcmVhdGVQYXJ0aWFsU3RyaW5nRXF1YWxpdHlPcHRpb25NYXRjaGVyIH0gZnJvbSAnLi9tYXRjaGluZ19vcHRpb25zJztcbmltcG9ydCB7IEV1aUNvbWJvQm94SW5wdXQgfSBmcm9tICcuL2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfaW5wdXQnO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCB9IGZyb20gJy4vY29tYm9fYm94X29wdGlvbnNfbGlzdCc7XG5pbXBvcnQgeyBldWlDb21ib0JveFN0eWxlcyBhcyBzdHlsZXMgfSBmcm9tICcuL2NvbWJvX2JveC5zdHlsZXMnO1xuXG4vKipcbiAqIEJlY2F1c2Ugb2YgaG93IFR5cGVTY3JpcHQncyBMaWJyYXJ5TWFuYWdlZEF0dHJpYnV0ZXMgaXMgZGVzaWduZWQgdG8gaGFuZGxlIGRlZmF1bHRQcm9wcyAoaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svcmVsZWFzZS1ub3Rlcy90eXBlc2NyaXB0LTMtMC5odG1sI3N1cHBvcnQtZm9yLWRlZmF1bHRwcm9wcy1pbi1qc3gpXG4gKiB3ZSBjYW4ndCBkaXJlY3RseSBleHBvcnQgdGhlIGFib3ZlIFByb3BzIGRlZmluaXRpb25zLCBhcyB0aGUgZGVmYXVsdGVkIHZhbHVlcyBhcmUgbm90IG1hZGUgb3B0aW9uYWxcbiAqIGFzIGl0IGlzbid0IHByb2Nlc3NlZCBieSBMaWJyYXJ5TWFuYWdlZEF0dHJpYnV0ZXMuIFRvIGdldCBhcm91bmQgdGhpcywgd2U6XG4gKiAtIHJlbW92ZSB0aGUgcHJvcHMgd2hpY2ggaGF2ZSBkZWZhdWx0IHZhbHVlcyBhcHBsaWVkXG4gKiAgIC0gYWRkaXRpb25hbGx5IHJlLWRlZmluZSBgb3B0aW9uc2AgYW5kIGBzZWxlY3RlZE9wdGlvbnNgIGRlZmF1bHRzLCBuZWNlc3NhcnkgYXMgc3RhdGljIG1lbWJlcnMgY2FuJ3QgYWNjZXNzIGdlbmVyaWNzIGFuZCBiZWNvbWUgbmV2ZXJbXVxuICogLSBleHBvcnQgKFByb3BzIC0gRGVmYXVsdHMpICYgUGFydGlhbDxEZWZhdWx0cz5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBpbml0aWFsU2VhcmNoVmFsdWUgPSAnJztcbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3ggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3goKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlDb21ib0JveCk7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpQ29tYm9Cb3gsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0YXRlXCIsIHtcbiAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiAtMSxcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZSxcbiAgICAgIGlzTGlzdE9wZW46IGZhbHNlLFxuICAgICAgbWF0Y2hpbmdPcHRpb25zOiBnZXRNYXRjaGluZ09wdGlvbnMoe1xuICAgICAgICBvcHRpb25zOiBfdGhpcy5wcm9wcy5vcHRpb25zLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IF90aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgc2VhcmNoVmFsdWU6IGluaXRpYWxTZWFyY2hWYWx1ZSxcbiAgICAgICAgb3B0aW9uTWF0Y2hlcjogX3RoaXMucHJvcHMub3B0aW9uTWF0Y2hlcixcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlOiBfdGhpcy5wcm9wcy5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQ6IF90aGlzLnByb3BzLmFzeW5jLFxuICAgICAgICBzaG93UHJldlNlbGVjdGVkOiBCb29sZWFuKF90aGlzLnByb3BzLnNpbmdsZVNlbGVjdGlvbiksXG4gICAgICAgIHNvcnRNYXRjaGVzQnk6IF90aGlzLnByb3BzLnNvcnRNYXRjaGVzQnlcbiAgICAgIH0pLFxuICAgICAgc2VhcmNoVmFsdWU6IGluaXRpYWxTZWFyY2hWYWx1ZVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyb290SWRcIiwgaHRtbElkR2VuZXJhdG9yKCkpO1xuICAgIC8vIFJlZnNcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY29tYm9Cb3hSZWZJbnN0YW5jZVwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY29tYm9Cb3hSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlID0gcmVmO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZWFyY2hJbnB1dFJlZkluc3RhbmNlXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZWFyY2hJbnB1dFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRpbnB1dFJlZiwgX3RoaXMkcHJvcHM7XG4gICAgICBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlID0gcmVmO1xuICAgICAgKF90aGlzJHByb3BzJGlucHV0UmVmID0gKF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMpLmlucHV0UmVmKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRpbnB1dFJlZiA9PT0gdm9pZCAwIHx8IF90aGlzJHByb3BzJGlucHV0UmVmLmNhbGwoX3RoaXMkcHJvcHMsIHJlZik7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImxpc3RSZWZJbnN0YW5jZVwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibGlzdFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RSZWZJbnN0YW5jZSA9IHJlZjtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib3Blbkxpc3RcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0xpc3RPcGVuOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2xvc2VMaXN0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzTGlzdE9wZW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXhcIiwgZnVuY3Rpb24gKGFtb3VudCkge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMgYXZhaWxhYmxlLCBkbyBub3RoaW5nLlxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBhY3RpdmVPcHRpb25JbmRleCA9IF9yZWYuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgbWF0Y2hpbmdPcHRpb25zID0gX3JlZi5tYXRjaGluZ09wdGlvbnM7XG4gICAgICAgIHZhciBuZXh0QWN0aXZlT3B0aW9uSW5kZXg7XG4gICAgICAgIGlmIChhY3RpdmVPcHRpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVzZXIncyBrZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBtZW51LCB0aGVuIHdlJ2xsIGZvY3VzXG4gICAgICAgICAgLy8gZWl0aGVyIHRoZSBmaXJzdCBvciBsYXN0IGl0ZW0uXG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYW1vdW50IDwgMCA/IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggLSAxIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhY3RpdmVPcHRpb25JbmRleCArIGFtb3VudDtcbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gR3JvdXAgdGl0bGVzIGFyZSBpbmNsdWRlZCBpbiBvcHRpb24gbGlzdCBidXQgYXJlIG5vdCBzZWxlY3RhYmxlXG4gICAgICAgIC8vIFNraXAgZ3JvdXAgdGl0bGUgb3B0aW9uc1xuICAgICAgICB2YXIgZGlyZWN0aW9uID0gYW1vdW50ID4gMCA/IDEgOiAtMTtcbiAgICAgICAgd2hpbGUgKG1hdGNoaW5nT3B0aW9uc1tuZXh0QWN0aXZlT3B0aW9uSW5kZXhdLmlzR3JvdXBMYWJlbE9wdGlvbikge1xuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IG5leHRBY3RpdmVPcHRpb25JbmRleCArIGRpcmVjdGlvbjtcbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IG5leHRBY3RpdmVPcHRpb25JbmRleFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImhhc0FjdGl2ZU9wdGlvblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggPiAtMSAmJiBfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCA8IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5sZW5ndGg7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNsZWFyQWN0aXZlT3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IC0xXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2xlYXJTZWFyY2hWYWx1ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5vblNlYXJjaENoYW5nZSgnJyk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImFkZEN1c3RvbU9wdGlvblwiLCBmdW5jdGlvbiAoaXNDb250YWluZXJCbHVyLCBzZWFyY2hWYWx1ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmUgPSBfdGhpcyRwcm9wczIuaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgICBvbkNyZWF0ZU9wdGlvbiA9IF90aGlzJHByb3BzMi5vbkNyZWF0ZU9wdGlvbixcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMi5vcHRpb25zLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczIuc2luZ2xlU2VsZWN0aW9uO1xuICAgICAgdmFyIG1hdGNoZWRPcHRpb24gPSBfdGhpcy5kb2VzU2VhcmNoTWF0Y2hPbmx5T3B0aW9uKCk7XG4gICAgICBpZiAobWF0Y2hlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gX3RoaXMub25BZGRPcHRpb24obWF0Y2hlZE9wdGlvbiwgaXNDb250YWluZXJCbHVyKTtcbiAgICAgIH1cbiAgICAgIGlmICghb25DcmVhdGVPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBEb24ndCBib3RoZXIgdHJ5aW5nIHRvIGNyZWF0ZSBhbiBvcHRpb24gaWYgdGhlIHVzZXIgaGFzbid0IHR5cGVkIGFueXRoaW5nLlxuICAgICAgaWYgKCFzZWFyY2hWYWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIERvbid0IGNyZWF0ZSB0aGUgdmFsdWUgaWYgaXQncyBhbHJlYWR5IGJlZW4gc2VsZWN0ZWQuXG4gICAgICBpZiAoZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSh7XG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZTogaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zXG4gICAgICB9KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBuZXcgY3VzdG9tIHBpbGwgaWYgdGhpcyBpcyBjdXN0b20gaW5wdXQsIGV2ZW4gaWYgaXQgcGFydGlhbGx5IG1hdGNoZXMgYW4gb3B0aW9uLlxuICAgICAgdmFyIGlzT3B0aW9uQ3JlYXRlZCA9IG9uQ3JlYXRlT3B0aW9uKHNlYXJjaFZhbHVlLCBmbGF0dGVuT3B0aW9uR3JvdXBzKG9wdGlvbnMpKTtcblxuICAgICAgLy8gRXhwZWN0IHRoZSBjb25zdW1lciB0byBiZSBleHBsaWNpdCBpbiByZWplY3RpbmcgYSBjdXN0b20gb3B0aW9uLlxuICAgICAgaWYgKGlzT3B0aW9uQ3JlYXRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3RoaXMuY2xlYXJTZWFyY2hWYWx1ZSgpO1xuICAgICAgaWYgKEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSkge1xuICAgICAgICAvLyBBZGRpbmcgYSBjdXN0b20gb3B0aW9uIHRvIGEgc2luZ2xlIHNlbGVjdCB0aGF0IGRvZXMgbm90IGFwcGVhciBpbiB0aGUgbGlzdCBvZiBvcHRpb25zXG4gICAgICAgIF90aGlzLmNsb3NlTGlzdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJkb2VzU2VhcmNoTWF0Y2hPbmx5T3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBpc0Nhc2VTZW5zaXRpdmUgPSBfdGhpcy5wcm9wcy5pc0Nhc2VTZW5zaXRpdmU7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSBfdGhpcy5zdGF0ZSxcbiAgICAgICAgbWF0Y2hpbmdPcHRpb25zID0gX3RoaXMkc3RhdGUubWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHN0YXRlLnNlYXJjaFZhbHVlO1xuICAgICAgaWYgKCFtYXRjaGluZ09wdGlvbnMubGVuZ3RoKSByZXR1cm47XG4gICAgICB2YXIgaXNNYXRjaFdpdGhHcm91cCA9IG1hdGNoaW5nT3B0aW9uc1swXS5pc0dyb3VwTGFiZWxPcHRpb247XG4gICAgICB2YXIgaXNPbmx5T3B0aW9uID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCA9PT0gKGlzTWF0Y2hXaXRoR3JvdXAgPyAyIDogMSk7XG4gICAgICBpZiAoIWlzT25seU9wdGlvbikgcmV0dXJuO1xuICAgICAgdmFyIG1hdGNoZWRPcHRpb24gPSBtYXRjaGluZ09wdGlvbnNbaXNNYXRjaFdpdGhHcm91cCA/IDEgOiAwXTtcbiAgICAgIHZhciBub3JtYWxpemVkU2VhcmNoU3ViamVjdCA9IHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eShtYXRjaGVkT3B0aW9uLmxhYmVsLCBpc0Nhc2VTZW5zaXRpdmUpO1xuICAgICAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eShzZWFyY2hWYWx1ZSwgaXNDYXNlU2Vuc2l0aXZlKTtcbiAgICAgIGlmIChub3JtYWxpemVkU2VhcmNoU3ViamVjdCA9PT0gbm9ybWFsaXplZFNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVkT3B0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJhcmVBbGxPcHRpb25zU2VsZWN0ZWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMzLm9wdGlvbnMsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIGFzeW5jID0gX3RoaXMkcHJvcHMzLmFzeW5jLFxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmUgPSBfdGhpcyRwcm9wczMuaXNDYXNlU2Vuc2l0aXZlO1xuICAgICAgLy8gQXNzdW1lIGlmIHRoaXMgaXMgYXN5bmMgdGhlbiB0aGVyZSBjb3VsZCBiZSBpbmZpbml0ZSBvcHRpb25zLlxuICAgICAgaWYgKGFzeW5jKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBmbGF0dGVuT3B0aW9ucyA9IGZsYXR0ZW5PcHRpb25Hcm91cHMob3B0aW9ucykubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uKSwge30sIHtcbiAgICAgICAgICBsYWJlbDogdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5KG9wdGlvbi5sYWJlbC50cmltKCksIGlzQ2FzZVNlbnNpdGl2ZSlcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHZhciBudW1iZXJPZlNlbGVjdGVkT3B0aW9ucyA9IDA7XG4gICAgICBzZWxlY3RlZE9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgdmFyIGxhYmVsID0gX3JlZjIubGFiZWw7XG4gICAgICAgIHZhciB0cmltbWVkTGFiZWwgPSB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkobGFiZWwudHJpbSgpLCBpc0Nhc2VTZW5zaXRpdmUpO1xuICAgICAgICBpZiAoZmxhdHRlbk9wdGlvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uLmxhYmVsID09PSB0cmltbWVkTGFiZWw7XG4gICAgICAgIH0pICE9PSAtMSkgbnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnMgKz0gMTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZsYXR0ZW5PcHRpb25zLmxlbmd0aCA9PT0gbnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnM7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQ29tYm9Cb3hGb2N1c1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkZvY3VzLCBfdGhpcyRwcm9wczQ7XG4gICAgICAoX3RoaXMkcHJvcHMkb25Gb2N1cyA9IChfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcykub25Gb2N1cykgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25Gb2N1cyA9PT0gdm9pZCAwIHx8IF90aGlzJHByb3BzJG9uRm9jdXMuY2FsbChfdGhpcyRwcm9wczQsIGV2ZW50KTtcbiAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2V0Q3VzdG9tT3B0aW9uc1wiLCBmdW5jdGlvbiAoaXNDb250YWluZXJCbHVyKSB7XG4gICAgICB2YXIgc2VhcmNoVmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWFyY2hWYWx1ZTtcbiAgICAgIHZhciBkZWxpbWl0ZXIgPSBfdGhpcy5wcm9wcy5kZWxpbWl0ZXI7XG4gICAgICBpZiAoZGVsaW1pdGVyKSB7XG4gICAgICAgIHNlYXJjaFZhbHVlLnNwbGl0KGRlbGltaXRlcikuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbi5sZW5ndGggPiAwKSBfdGhpcy5hZGRDdXN0b21PcHRpb24oaXNDb250YWluZXJCbHVyLCBvcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLmFkZEN1c3RvbU9wdGlvbihpc0NvbnRhaW5lckJsdXIsIHNlYXJjaFZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Db250YWluZXJCbHVyXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gY2xvc2UgdGhlIG9wdGlvbnMgbGlzdCwgdW5sZXNzIHRoZSB1c2VyIGNsaWNrZWQgb24gYW4gb3B0aW9uXG4gICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgICB2YXIgZm9jdXNlZEluT3B0aW9uc0xpc3QgPSByZWxhdGVkVGFyZ2V0ICYmIF90aGlzLmxpc3RSZWZJbnN0YW5jZSAmJiBfdGhpcy5saXN0UmVmSW5zdGFuY2UuY29udGFpbnMocmVsYXRlZFRhcmdldCk7XG4gICAgICB2YXIgZm9jdXNlZEluSW5wdXQgPSByZWxhdGVkVGFyZ2V0ICYmIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UgJiYgX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZS5jb250YWlucyhyZWxhdGVkVGFyZ2V0KTtcbiAgICAgIGlmICghZm9jdXNlZEluT3B0aW9uc0xpc3QgJiYgIWZvY3VzZWRJbklucHV0KSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkJsdXIsIF90aGlzJHByb3BzNTtcbiAgICAgICAgKF90aGlzJHByb3BzJG9uQmx1ciA9IChfdGhpcyRwcm9wczUgPSBfdGhpcy5wcm9wcykub25CbHVyKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkJsdXIgPT09IHZvaWQgMCB8fCBfdGhpcyRwcm9wcyRvbkJsdXIuY2FsbChfdGhpcyRwcm9wczUsIGV2ZW50KTtcbiAgICAgICAgX3RoaXMuY2xvc2VMaXN0KCk7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoYXNGb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgdGFicyBhd2F5IG9yIGNoYW5nZXMgZm9jdXMgdG8gYW5vdGhlciBlbGVtZW50LCB0YWtlIHdoYXRldmVyIGlucHV0IHRoZXkndmVcbiAgICAgICAgLy8gdHlwZWQgYW5kIGNvbnZlcnQgaXQgaW50byBhIHBpbGwsIHRvIHByZXZlbnQgdGhlIGNvbWJvIGJveCBmcm9tIGxvb2tpbmcgbGlrZSBhIHRleHQgaW5wdXQuXG4gICAgICAgIGlmICghX3RoaXMuaGFzQWN0aXZlT3B0aW9uKCkpIHtcbiAgICAgICAgICBfdGhpcy5zZXRDdXN0b21PcHRpb25zKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZvY3VzZWRJbk9wdGlvbnNMaXN0KSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvNTE3OVxuICAgICAgICAvLyBuZWVkIHRvIHJlc3RvcmUgZm9jdXMgdG8gdGhlIGlucHV0IGJveCB3aGVuIGNsaWNraW5nIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50c1xuXG4gICAgICAgIC8vIGZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IGNhbGxpbmcgLmZvY3VzKCkgZHVyaW5nIGEgYmx1ciBldmVudFxuICAgICAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD01MzU3OVxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBfdGhpcyRzZWFyY2hJbnB1dFJlZkk7XG4gICAgICAgICAgKF90aGlzJHNlYXJjaElucHV0UmVmSSA9IF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpID09PSBudWxsIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSSA9PT0gdm9pZCAwIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSS5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJG9uS2V5RG93biwgX3RoaXMkcHJvcHM2O1xuICAgICAgaWYgKF90aGlzLnByb3BzLmlzRGlzYWJsZWQpIHJldHVybjtcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTsgLy8gVE9ETzogUmVtb3ZlIG9uY2UgUmVhY3QgMTYgc3VwcG9ydCBpcyBkcm9wcGVkXG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIGtleXMuQVJST1dfVVA6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBpZiAoX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICAgICAgX3RoaXMuaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXgoLTEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX0RPV046XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBpZiAoX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICAgICAgX3RoaXMuaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXgoMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGtleXMuRVNDQVBFOlxuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Uga2V5cy5FTlRFUjpcbiAgICAgICAgICAvLyBEbyBub3QgYmxvY2sgZW50ZXIga2V5cHJlc3NlcyBmb3IgdGhlIGNsZWFyIGJ1dHRvbiBvciBkZWxldGUgc2VsZWN0aW9uIGJ1dHRvbnNcbiAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBpZiAoX3RoaXMuaGFzQWN0aXZlT3B0aW9uKCkpIHtcbiAgICAgICAgICAgICAgX3RoaXMub25BZGRPcHRpb24oX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zW190aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBfdGhpcy5zZXRDdXN0b21PcHRpb25zKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Uga2V5cy5UQUI6XG4gICAgICAgICAgLy8gRGlzYWxsb3cgdGFiYmluZyB3aGVuIHRoZSB1c2VyIGlzIG5hdmlnYXRpbmcgdGhlIG9wdGlvbnMuXG4gICAgICAgICAgaWYgKF90aGlzLmhhc0FjdGl2ZU9wdGlvbigpICYmIF90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgKF90aGlzJHByb3BzJG9uS2V5RG93biA9IChfdGhpcyRwcm9wczYgPSBfdGhpcy5wcm9wcykub25LZXlEb3duKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbktleURvd24gPT09IHZvaWQgMCB8fCBfdGhpcyRwcm9wcyRvbktleURvd24uY2FsbChfdGhpcyRwcm9wczYsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25PcHRpb25FbnRlcktleVwiLCBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICBfdGhpcy5vbkFkZE9wdGlvbihvcHRpb24pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk9wdGlvbkNsaWNrXCIsIGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgIF90aGlzLm9uQWRkT3B0aW9uKG9wdGlvbik7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQWRkT3B0aW9uXCIsIGZ1bmN0aW9uIChhZGRlZE9wdGlvbiwgaXNDb250YWluZXJCbHVyKSB7XG4gICAgICBpZiAoYWRkZWRPcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IF90aGlzLnByb3BzLFxuICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzNy5vbkNoYW5nZSxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM3LnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uUHJvcCA9IF90aGlzJHByb3BzNy5zaW5nbGVTZWxlY3Rpb247XG4gICAgICB2YXIgc2luZ2xlU2VsZWN0aW9uID0gQm9vbGVhbihzaW5nbGVTZWxlY3Rpb25Qcm9wKTtcbiAgICAgIHZhciBjaGFuZ2VPcHRpb25zID0gc2luZ2xlU2VsZWN0aW9uID8gW2FkZGVkT3B0aW9uXSA6IHNlbGVjdGVkT3B0aW9ucy5jb25jYXQoYWRkZWRPcHRpb24pO1xuICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCB8fCBvbkNoYW5nZShjaGFuZ2VPcHRpb25zKTtcbiAgICAgIF90aGlzLmNsZWFyU2VhcmNoVmFsdWUoKTtcbiAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG4gICAgICBpZiAoIWlzQ29udGFpbmVyQmx1cikge1xuICAgICAgICB2YXIgX3RoaXMkc2VhcmNoSW5wdXRSZWZJMjtcbiAgICAgICAgKF90aGlzJHNlYXJjaElucHV0UmVmSTIgPSBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSA9PT0gbnVsbCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkkyID09PSB2b2lkIDAgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJMi5mb2N1cygpO1xuICAgICAgfVxuICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbikge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5pbmRleE9mKGFkZGVkT3B0aW9uKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25SZW1vdmVPcHRpb25cIiwgZnVuY3Rpb24gKHJlbW92ZWRPcHRpb24pIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczgub25DaGFuZ2UsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzOC5zZWxlY3RlZE9wdGlvbnM7XG4gICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwIHx8IG9uQ2hhbmdlKHNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gb3B0aW9uICE9PSByZW1vdmVkT3B0aW9uO1xuICAgICAgfSkpO1xuICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2xlYXJTZWxlY3RlZE9wdGlvbnNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJG9uQ2hhbmdlLCBfdGhpcyRwcm9wczksIF90aGlzJHNlYXJjaElucHV0UmVmSTM7XG4gICAgICAoX3RoaXMkcHJvcHMkb25DaGFuZ2UgPSAoX3RoaXMkcHJvcHM5ID0gX3RoaXMucHJvcHMpLm9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkNoYW5nZSA9PT0gdm9pZCAwIHx8IF90aGlzJHByb3BzJG9uQ2hhbmdlLmNhbGwoX3RoaXMkcHJvcHM5LCBbXSk7XG5cbiAgICAgIC8vIENsaWNraW5nIHRoZSBjbGVhciBidXR0b24gd2lsbCBhbHNvIGNhdXNlIGl0IHRvIGRpc2FwcGVhci4gVGhpcyB3b3VsZCByZXN1bHQgaW4gZm9jdXNcbiAgICAgIC8vIHNoaWZ0aW5nIHVuZXhwZWN0ZWRseSB0byB0aGUgYm9keSBlbGVtZW50IHNvIHdlIHNldCBpdCB0byB0aGUgaW5wdXQgd2hpY2ggaXMgbW9yZSByZWFzb25hYmxlLFxuICAgICAgKF90aGlzJHNlYXJjaElucHV0UmVmSTMgPSBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSA9PT0gbnVsbCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkkzID09PSB2b2lkIDAgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJMy5mb2N1cygpO1xuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQ29tYm9Cb3hDbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkc2VhcmNoSW5wdXRSZWZJNDtcbiAgICAgIC8vIFdoZW4gdGhlIHVzZXIgY2xpY2tzIGFueXdoZXJlIG9uIHRoZSBib3gsIGVudGVyIHRoZSBpbnRlcmFjdGlvbiBzdGF0ZS5cbiAgICAgIChfdGhpcyRzZWFyY2hJbnB1dFJlZkk0ID0gX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkgPT09IG51bGwgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJNCA9PT0gdm9pZCAwIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSTQuZm9jdXMoKTtcblxuICAgICAgLy8gSWYgdGhlIHVzZXIgZG9lcyB0aGlzIGZyb20gYSBzdGF0ZSBpbiB3aGljaCBhbiBvcHRpb24gaGFzIGZvY3VzLCB0aGVuIHdlIG5lZWQgdG8gcmVzZXQgaXQgb3IgY2xlYXIgaXQuXG4gICAgICBpZiAoQm9vbGVhbihfdGhpcy5wcm9wcy5zaW5nbGVTZWxlY3Rpb24pICYmIF90aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIHNlbGVjdGVkT3B0aW9uSW5kZXggPSBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uLmxhYmVsID09PSBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnNbMF0ubGFiZWwgJiYgb3B0aW9uLmtleSA9PT0gX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zWzBdLmtleTtcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogc2VsZWN0ZWRPcHRpb25JbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uT3Blbkxpc3RDbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkc2VhcmNoSW5wdXRSZWZJNTtcbiAgICAgIChfdGhpcyRzZWFyY2hJbnB1dFJlZkk1ID0gX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkgPT09IG51bGwgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJNSA9PT0gdm9pZCAwIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSTUuZm9jdXMoKTtcbiAgICAgIGlmICghX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk9wdGlvbkxpc3RTY3JvbGxcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHNlYXJjaElucHV0UmVmSTY7XG4gICAgICAoX3RoaXMkc2VhcmNoSW5wdXRSZWZJNiA9IF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpID09PSBudWxsIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSTYgPT09IHZvaWQgMCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkk2LmZvY3VzKCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uU2VhcmNoQ2hhbmdlXCIsIGZ1bmN0aW9uIChzZWFyY2hWYWx1ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMTAgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgb25TZWFyY2hDaGFuZ2UgPSBfdGhpcyRwcm9wczEwLm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICBkZWxpbWl0ZXIgPSBfdGhpcyRwcm9wczEwLmRlbGltaXRlcjtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChzZWFyY2hWYWx1ZSAmJiBfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuID09PSBmYWxzZSkge1xuICAgICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uU2VhcmNoQ2hhbmdlKSB7XG4gICAgICAgICAgdmFyIGhhc01hdGNoaW5nT3B0aW9ucyA9IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5sZW5ndGggPiAwO1xuICAgICAgICAgIG9uU2VhcmNoQ2hhbmdlKHNlYXJjaFZhbHVlLCBoYXNNYXRjaGluZ09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChkZWxpbWl0ZXIgJiYgc2VhcmNoVmFsdWUuZW5kc1dpdGgoZGVsaW1pdGVyKSkge1xuICAgICAgICBfdGhpcy5zZXRDdXN0b21PcHRpb25zKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUNvbWJvQm94LCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTEgPSB0aGlzLnByb3BzLFxuICAgICAgICBkYXRhVGVzdFN1YmogPSBfdGhpcyRwcm9wczExWydkYXRhLXRlc3Qtc3ViaiddLFxuICAgICAgICBhc3luYyA9IF90aGlzJHByb3BzMTEuYXN5bmMsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMTEuY2xhc3NOYW1lLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMxMS5jb21wcmVzc2VkLFxuICAgICAgICBjdXN0b21PcHRpb25UZXh0ID0gX3RoaXMkcHJvcHMxMS5jdXN0b21PcHRpb25UZXh0LFxuICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wczExLmZ1bGxXaWR0aCxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczExLmlkLFxuICAgICAgICBpbnB1dFJlZiA9IF90aGlzJHByb3BzMTEuaW5wdXRSZWYsXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IF90aGlzJHByb3BzMTEuaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgICBpc0NsZWFyYWJsZSA9IF90aGlzJHByb3BzMTEuaXNDbGVhcmFibGUsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczExLmlzRGlzYWJsZWQsXG4gICAgICAgIGlzSW52YWxpZCA9IF90aGlzJHByb3BzMTEuaXNJbnZhbGlkLFxuICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczExLmlzTG9hZGluZyxcbiAgICAgICAgbm9TdWdnZXN0aW9ucyA9IF90aGlzJHByb3BzMTEubm9TdWdnZXN0aW9ucyxcbiAgICAgICAgb25CbHVyID0gX3RoaXMkcHJvcHMxMS5vbkJsdXIsXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMxMS5vbkNoYW5nZSxcbiAgICAgICAgb25DcmVhdGVPcHRpb24gPSBfdGhpcyRwcm9wczExLm9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICBvblNlYXJjaENoYW5nZSA9IF90aGlzJHByb3BzMTEub25TZWFyY2hDaGFuZ2UsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczExLm9wdGlvbnMsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHMxMS5wbGFjZWhvbGRlcixcbiAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMxMS5yZW5kZXJPcHRpb24sXG4gICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzMTEucm93SGVpZ2h0LFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczExLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMxMS5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wczExLnByZXBlbmQsXG4gICAgICAgIHNvcnRNYXRjaGVzQnkgPSBfdGhpcyRwcm9wczExLnNvcnRNYXRjaGVzQnksXG4gICAgICAgIGRlbGltaXRlciA9IF90aGlzJHByb3BzMTEuZGVsaW1pdGVyLFxuICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wczExLmFwcGVuZCxcbiAgICAgICAgYXV0b0ZvY3VzID0gX3RoaXMkcHJvcHMxMS5hdXRvRm9jdXMsXG4gICAgICAgIHRydW5jYXRpb25Qcm9wcyA9IF90aGlzJHByb3BzMTEudHJ1bmNhdGlvblByb3BzLFxuICAgICAgICBpbnB1dFBvcG92ZXJQcm9wcyA9IF90aGlzJHByb3BzMTEuaW5wdXRQb3BvdmVyUHJvcHMsXG4gICAgICAgIG9wdGlvbk1hdGNoZXIgPSBfdGhpcyRwcm9wczExLm9wdGlvbk1hdGNoZXIsXG4gICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzMTFbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgYXJpYUxhYmVsbGVkYnkgPSBfdGhpcyRwcm9wczExWydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczExLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkc3RhdGUyLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICBoYXNGb2N1cyA9IF90aGlzJHN0YXRlMi5oYXNGb2N1cyxcbiAgICAgICAgaXNMaXN0T3BlbiA9IF90aGlzJHN0YXRlMi5pc0xpc3RPcGVuLFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHN0YXRlMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgbWF0Y2hpbmdPcHRpb25zID0gX3RoaXMkc3RhdGUyLm1hdGNoaW5nT3B0aW9ucztcblxuICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSB2YWxpZCBJRCBpZiB1c2VycyBkb24ndCBwYXNzIG9uZSBhcyBhIHByb3BcbiAgICAgIHZhciBpbnB1dElkID0gaWQgIT09IG51bGwgJiYgaWQgIT09IHZvaWQgMCA/IGlkIDogdGhpcy5yb290SWQoJ19ldWktY29tYm9ib3gtaWQnKTtcblxuICAgICAgLy8gVmlzdWFsbHkgaW5kaWNhdGUgdGhlIGNvbWJvYm94IGlzIGluIGFuIGludmFsaWQgc3RhdGUgaWYgaXQgaGFzIGxvc3QgZm9jdXMgYnV0IHRoZXJlIGlzIHRleHQgZW50ZXJlZCBpbiB0aGUgaW5wdXQuXG4gICAgICAvLyBXaGVuIGN1c3RvbSBvcHRpb25zIGFyZSBkaXNhYmxlZCBhbmQgdGhlIHVzZXIgbGVhdmVzIHRoZSBjb21ibyBib3ggYWZ0ZXIgZW50ZXJpbmcgdGV4dCB0aGF0IGRvZXMgbm90IG1hdGNoIGFueVxuICAgICAgLy8gb3B0aW9ucywgdGhpcyB0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXkndmUgZW50ZXJlZCBpbnZhbGlkIGlucHV0LlxuICAgICAgdmFyIG1hcmtBc0ludmFsaWQgPSAhIShpc0ludmFsaWQgfHwgKGhhc0ZvY3VzID09PSBmYWxzZSB8fCBpc0xpc3RPcGVuID09PSBmYWxzZSkgJiYgc2VhcmNoVmFsdWUpO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveCcsIGNsYXNzTmFtZSwge1xuICAgICAgICAnZXVpQ29tYm9Cb3gtaXNEaXNhYmxlZCc6IGlzRGlzYWJsZWQsXG4gICAgICAgICdldWlDb21ib0JveC1pc0ludmFsaWQnOiBtYXJrQXNJbnZhbGlkLFxuICAgICAgICAnZXVpQ29tYm9Cb3gtaXNPcGVuJzogaXNMaXN0T3BlblxuICAgICAgfSk7XG4gICAgICB2YXIgdmFsdWUgPSBzZWxlY3RlZE9wdGlvbnMubWFwKGZ1bmN0aW9uIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb24ubGFiZWw7XG4gICAgICB9KS5qb2luKCcsICcpO1xuICAgICAgdmFyIG9wdGlvbnNMaXN0O1xuICAgICAgaWYgKCFub1N1Z2dlc3Rpb25zICYmIGlzTGlzdE9wZW4pIHtcbiAgICAgICAgdmFyIG9wdGlvbnNMaXN0RGF0YVRlc3RTdWJqID0gZGF0YVRlc3RTdWJqID8gXCJcIi5jb25jYXQoZGF0YVRlc3RTdWJqLCBcIi1vcHRpb25zTGlzdFwiKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgb3B0aW9uc0xpc3QgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveC5saXN0Ym94QXJpYUxhYmVsXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJDaG9vc2UgZnJvbSB0aGUgZm9sbG93aW5nIG9wdGlvbnNcIlxuICAgICAgICB9LCBmdW5jdGlvbiAobGlzdGJveEFyaWFMYWJlbCkge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIHtcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBfdGhpczIuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgICBhcmVBbGxPcHRpb25zU2VsZWN0ZWQ6IF90aGlzMi5hcmVBbGxPcHRpb25zU2VsZWN0ZWQoKSxcbiAgICAgICAgICAgIGN1c3RvbU9wdGlvblRleHQ6IGN1c3RvbU9wdGlvblRleHQsXG4gICAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IG9wdGlvbnNMaXN0RGF0YVRlc3RTdWJqLFxuICAgICAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmU6IGlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICAgICAgbGlzdFJlZjogX3RoaXMyLmxpc3RSZWZDYWxsYmFjayxcbiAgICAgICAgICAgIG1hdGNoaW5nT3B0aW9uczogbWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICAgICAgb25DbG9zZUxpc3Q6IF90aGlzMi5jbG9zZUxpc3QsXG4gICAgICAgICAgICBvbkNyZWF0ZU9wdGlvbjogb25DcmVhdGVPcHRpb24sXG4gICAgICAgICAgICBvbk9wdGlvbkNsaWNrOiBfdGhpczIub25PcHRpb25DbGljayxcbiAgICAgICAgICAgIG9uT3B0aW9uRW50ZXJLZXk6IF90aGlzMi5vbk9wdGlvbkVudGVyS2V5LFxuICAgICAgICAgICAgb25TY3JvbGw6IF90aGlzMi5vbk9wdGlvbkxpc3RTY3JvbGwsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0aW9uOiBzaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgICByZW5kZXJPcHRpb246IHJlbmRlck9wdGlvbixcbiAgICAgICAgICAgIHJvb3RJZDogX3RoaXMyLnJvb3RJZCxcbiAgICAgICAgICAgIHJvd0hlaWdodDogcm93SGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsVG9JbmRleDogYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICAgIGRlbGltaXRlcjogZGVsaW1pdGVyLFxuICAgICAgICAgICAgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZTogZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgIGxpc3Rib3hBcmlhTGFiZWw6IGxpc3Rib3hBcmlhTGFiZWwsXG4gICAgICAgICAgICB0cnVuY2F0aW9uUHJvcHM6IHRydW5jYXRpb25Qcm9wc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFdWlDb21ib0JveCBmb2xsb3dzIHRoZSBXQUktQVJJQSAxLjIgc3BlYyBmb3IgZWRpdGFibGUgY29tYm9ib3hlc1xuICAgICAgICAgKiB3aXRoIGxpc3QgYXV0b2NvbXBsZXRlLiBUaGlzIHBhdHRlcm4gaXMgYW4gaW1wcm92ZW1lbnQgb24gdGhlIHVzZXJcbiAgICAgICAgICogZXhwZXJpZW5jZSBmb3Igc2NyZWVuIHJlYWRlcnMgb3ZlciB0aGUgV0FJLUFSSUEgMS4xIHBhdHRlcm4uXG4gICAgICAgICAqXG4gICAgICAgICAqIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4yL2V4YW1wbGVzL2NvbWJvYm94L2NvbWJvYm94LWF1dG9jb21wbGV0ZS1saXN0Lmh0bWxcbiAgICAgICAgICovXG4gICAgICAgIF9fX0Vtb3Rpb25KU1goUmVuZGVyV2l0aEV1aVRoZW1lLCBudWxsLCBmdW5jdGlvbiAoZXVpVGhlbWUpIHtcbiAgICAgICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlDb21ib0JveCwgZnVsbFdpZHRoID8gc3R5bGVzLmZ1bGxXaWR0aCA6IGxvZ2ljYWxTdHlsZSgnbWF4LXdpZHRoJywgZXVpRm9ybU1heFdpZHRoKGV1aVRoZW1lKSldO1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIGNzczogY3NzU3R5bGVzXG4gICAgICAgICAgfSwgcmVzdCwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBkYXRhVGVzdFN1YmosXG4gICAgICAgICAgICBvbktleURvd246IF90aGlzMi5vbktleURvd24sXG4gICAgICAgICAgICBvbkJsdXI6IF90aGlzMi5vbkNvbnRhaW5lckJsdXIsXG4gICAgICAgICAgICByZWY6IF90aGlzMi5jb21ib0JveFJlZkNhbGxiYWNrXG4gICAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goRXVpSW5wdXRQb3BvdmVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgICAgICAgICAgZGlzYWJsZUZvY3VzVHJhcDogdHJ1ZSxcbiAgICAgICAgICAgIGNsb3NlT25TY3JvbGw6IHRydWVcbiAgICAgICAgICB9LCBpbnB1dFBvcG92ZXJQcm9wcywge1xuICAgICAgICAgICAgaXNPcGVuOiBpc0xpc3RPcGVuLFxuICAgICAgICAgICAgY2xvc2VQb3BvdmVyOiBfdGhpczIuY2xvc2VMaXN0LFxuICAgICAgICAgICAgaW5wdXQ6IF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hJbnB1dCwge1xuICAgICAgICAgICAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgICAgICAgICAgICBmb2N1c2VkT3B0aW9uSWQ6IF90aGlzMi5oYXNBY3RpdmVPcHRpb24oKSA/IF90aGlzMi5yb290SWQoXCJfb3B0aW9uLVwiLmNvbmNhdChfdGhpczIuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgpKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgICAgICAgIGhhc1NlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgIGlkOiBpbnB1dElkLFxuICAgICAgICAgICAgICBpbnB1dFJlZjogX3RoaXMyLnNlYXJjaElucHV0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgICAgIGlzTGlzdE9wZW46IGlzTGlzdE9wZW4sXG4gICAgICAgICAgICAgIG5vSWNvbjogISFub1N1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICBvbkNoYW5nZTogX3RoaXMyLm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgICAgICBvbkNsZWFyOiBpc0NsZWFyYWJsZSAmJiAhaXNEaXNhYmxlZCA/IF90aGlzMi5jbGVhclNlbGVjdGVkT3B0aW9ucyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgb25DbGljazogX3RoaXMyLm9uQ29tYm9Cb3hDbGljayxcbiAgICAgICAgICAgICAgb25DbG9zZUxpc3RDbGljazogX3RoaXMyLmNsb3NlTGlzdCxcbiAgICAgICAgICAgICAgb25Gb2N1czogX3RoaXMyLm9uQ29tYm9Cb3hGb2N1cyxcbiAgICAgICAgICAgICAgb25PcGVuTGlzdENsaWNrOiBfdGhpczIub25PcGVuTGlzdENsaWNrLFxuICAgICAgICAgICAgICBvblJlbW92ZU9wdGlvbjogX3RoaXMyLm9uUmVtb3ZlT3B0aW9uLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgIHJvb3RJZDogX3RoaXMyLnJvb3RJZCxcbiAgICAgICAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0aW9uOiBzaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgYXBwZW5kOiBzaW5nbGVTZWxlY3Rpb24gPyBhcHBlbmQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHByZXBlbmQ6IHNpbmdsZVNlbGVjdGlvbiA/IHByZXBlbmQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICAgICAgICBpc0ludmFsaWQ6IG1hcmtBc0ludmFsaWQsXG4gICAgICAgICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsLFxuICAgICAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcmlhTGFiZWxsZWRieVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KSwgb3B0aW9uc0xpc3QpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFyIGFzeW5jID0gbmV4dFByb3BzLmFzeW5jLFxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmUgPSBuZXh0UHJvcHMuaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgICBvcHRpb25zID0gbmV4dFByb3BzLm9wdGlvbnMsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IG5leHRQcm9wcy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IG5leHRQcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIHNvcnRNYXRjaGVzQnkgPSBuZXh0UHJvcHMuc29ydE1hdGNoZXNCeSxcbiAgICAgICAgb3B0aW9uTWF0Y2hlciA9IG5leHRQcm9wcy5vcHRpb25NYXRjaGVyO1xuICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gcHJldlN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IHByZXZTdGF0ZS5zZWFyY2hWYWx1ZTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIGFuZCBjYWNoZSB0aGUgb3B0aW9ucyB3aGljaCBtYXRjaCB0aGUgc2VhcmNoVmFsdWUsIGJlY2F1c2Ugd2UgdXNlIHRoaXMgaW5mb3JtYXRpb25cbiAgICAgIC8vIGluIG11bHRpcGxlIHBsYWNlcyBhbmQgaXQgd291bGQgYmUgZXhwZW5zaXZlIHRvIGNhbGN1bGF0ZSByZXBlYXRlZGx5LlxuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyh7XG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZTogaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgICBpc1ByZUZpbHRlcmVkOiBhc3luYyxcbiAgICAgICAgc2hvd1ByZXZTZWxlY3RlZDogQm9vbGVhbihzaW5nbGVTZWxlY3Rpb24pLFxuICAgICAgICBzb3J0TWF0Y2hlc0J5OiBzb3J0TWF0Y2hlc0J5LFxuICAgICAgICBvcHRpb25NYXRjaGVyOiBvcHRpb25NYXRjaGVyXG4gICAgICB9KTtcbiAgICAgIHZhciBzdGF0ZVVwZGF0ZSA9IHtcbiAgICAgICAgbWF0Y2hpbmdPcHRpb25zOiBtYXRjaGluZ09wdGlvbnNcbiAgICAgIH07XG4gICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggPj0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZVVwZGF0ZS5hY3RpdmVPcHRpb25JbmRleCA9IC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlVXBkYXRlO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aUNvbWJvQm94LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGFzeW5jOiBmYWxzZSxcbiAgY29tcHJlc3NlZDogZmFsc2UsXG4gIGZ1bGxXaWR0aDogZmFsc2UsXG4gIGlzQ2xlYXJhYmxlOiB0cnVlLFxuICBvcHRpb25zOiBbXSxcbiAgc2VsZWN0ZWRPcHRpb25zOiBbXSxcbiAgc2luZ2xlU2VsZWN0aW9uOiBmYWxzZSxcbiAgcHJlcGVuZDogdW5kZWZpbmVkLFxuICBhcHBlbmQ6IHVuZGVmaW5lZCxcbiAgc29ydE1hdGNoZXNCeTogJ25vbmUnLFxuICBvcHRpb25NYXRjaGVyOiBjcmVhdGVQYXJ0aWFsU3RyaW5nRXF1YWxpdHlPcHRpb25NYXRjaGVyKClcbn0pO1xuRXVpQ29tYm9Cb3gucHJvcFR5cGVzID0ge1xuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGxpc3Qgb2Ygb3B0aW9ucyBhc3luY2hyb25vdXNseVxuICAgICAqL1xuICBhc3luYzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCBjcmVhdGVzIGEgc2hvcnRlciBoZWlnaHQgaW5wdXRcbiAgICAgKi9cbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgZXhwYW5kcyB0byB0aGUgZW50aXJlIHdpZHRoIGF2YWlsYWJsZVxuICAgICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogU2hvd3MgYSBidXR0b24gdGhhdCBxdWlja2x5IGNsZWFycyBhbnkgaW5wdXRcbiAgICAgKi9cbiAgaXNDbGVhcmFibGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBpbnB1dFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogU3dhcHMgdGhlIGRyb3Bkb3duIG9wdGlvbnMgZm9yIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIERvZXNuJ3Qgc2hvdyB0aGUgc3VnZ2VzdGlvbnMgbGlzdC9kcm9wZG93blxuICAgICAqL1xuICBub1N1Z2dlc3Rpb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25CbHVyOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgcXVlcnkgaW4gdGhlIGNvbWJvIGJveCBpcyBwYXJzZWRcbiAgICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuYW55LFxuICBvbktleURvd246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIENhbGxlZCBldmVyeSB0aW1lIHRoZSB0ZXh0IHF1ZXJ5IGluIHRoZSBzZWFyY2ggYm94IGlzIHBhcnNlZFxuICAgICAqL1xuICBvblNlYXJjaENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIHBsYWNlaG9sZGVyIG9mIHRoZSBpbnB1dFxuICAgICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogRXZlcnkgb3B0aW9uIG11c3QgYmUgdGhlIHNhbWUgaGVpZ2h0IGFuZCBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0IGlmIHVzaW5nIGEgY3VzdG9tIHJlbmRlclxuICAgICAqL1xuICByb3dIZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAqIFdoZW4gYHRydWVgIG9ubHkgYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHNpbmdsZSBvcHRpb24uIFNldCB0byBgeyBhc1BsYWluVGV4dDogdHJ1ZSB9YCB0byBub3QgcmVuZGVyIGlucHV0IHNlbGVjdGlvbiBhcyBwaWxsc1xuICAgICAqL1xuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXNQbGFpblRleHQ6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBEaXNwbGF5IG1hdGNoaW5nIG9wdGlvbnMgYnk6XG4gICAgICogYHN0YXJ0c1dpdGhgOiBtb3ZlcyBpdGVtcyB0aGF0IHN0YXJ0IHdpdGggc2VhcmNoIHZhbHVlIHRvIHRvcCBvZiB0aGUgbGlzdDtcbiAgICAgKiBgbm9uZWA6IGRvbid0IGNoYW5nZSB0aGUgc29ydCBvcmRlciBvZiBpbml0aWFsIG9iamVjdFxuICAgICAqL1xuICBzb3J0TWF0Y2hlc0J5OiBQcm9wVHlwZXMub25lT2YoW1wibm9uZVwiLCBcInN0YXJ0c1dpdGhcIl0pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gbWF0Y2ggb3B0aW9ucyB3aXRoIGNhc2Ugc2Vuc2l0aXZpdHkuXG4gICAgICovXG4gIGlzQ2FzZVNlbnNpdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE9wdGlvbmFsIGN1c3RvbSBvcHRpb24gbWF0Y2hlciBmdW5jdGlvblxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCBleGFjdEVxdWFsaXR5TWF0Y2hlcjogRXVpQ29tYm9Cb3hPcHRpb25NYXRjaGVyID0gKHsgb3B0aW9uLCBzZWFyY2hWYWx1ZSB9KSA9PiB7XG4gICAgICogICByZXR1cm4gb3B0aW9uLmxhYmVsID09PSBzZWFyY2hWYWx1ZTtcbiAgICAgKiB9XG4gICAgICovXG4gIG9wdGlvbk1hdGNoZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYmVmb3JlIGlucHV0LiBJdCB3b24ndCBzaG93IGlmIGBzaW5nbGVTZWxlY3Rpb25gIGlzIHNldCB0byBgZmFsc2VgLlxuICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgKi9cbiAgcHJlcGVuZDogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGFmdGVyIGlucHV0LiBJdCB3b24ndCBzaG93IGlmIGBzaW5nbGVTZWxlY3Rpb25gIGlzIHNldCB0byBgZmFsc2VgLlxuICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBIHNwZWNpYWwgY2hhcmFjdGVyIHRvIHVzZSBhcyBhIHZhbHVlIHNlcGFyYXRvci4gVHlwaWNhbGx5IGEgY29tbWEgYCxgXG4gICAgICovXG4gIGRlbGltaXRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGlucHV0IHNob3VsZCBoYXZlIGZvY3VzIHdoZW4gdGhlIGNvbXBvbmVudCBsb2Fkc1xuICAgICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBSZXF1aXJlZCB3aGVuIHJlbmRlcmluZyB3aXRob3V0IGEgdmlzaWJsZSBsYWJlbCBmcm9tIFtFdWlGb3JtUm93XSgvIy9mb3Jtcy9mb3JtLWxheW91dHMpLlxuICAgICAqL1xuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogUmVmZXJlbmNlIElEIG9mIGEgdGV4dCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIHZpc2libGUgbGFiZWwgZm9yIHRoZSBjb21ibyBib3ggd2hlbiBub3RcbiAgICAgKiBzdXBwbGllZCBieSBgYXJpYS1sYWJlbGAgb3IgZnJvbSBbRXVpRm9ybVJvd10oLyMvZm9ybXMvZm9ybS1sYXlvdXRzKS5cbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgRXVpQ29tYm9Cb3ggd2lsbCB0cnVuY2F0ZSBvcHRpb24gbGFiZWxzIGF0IHRoZSBlbmQgb2ZcbiAgICAgKiB0aGUgc3RyaW5nLiBZb3UgY2FuIHVzZSBwYXNzIGluIGEgY3VzdG9tIHRydW5jYXRpb24gY29uZmlndXJhdGlvbiB0aGF0XG4gICAgICogYWNjZXB0cyBhbnkgW0V1aVRleHRUcnVuY2F0ZV0oLyMvdXRpbGl0aWVzL3RleHQtdHJ1bmNhdGlvbikgcHJvcCxcbiAgICAgKiBleGNlcHQgZm9yIGB0ZXh0YCBhbmQgYGNoaWxkcmVuYC5cbiAgICAgKlxuICAgICAqIE5vdGU6IHdoZW4gc2VhcmNoaW5nLCBjdXN0b20gdHJ1bmNhdGlvbiBwcm9wcyBhcmUgaWdub3JlZC4gVGhlIGhpZ2hsaWdodGVkIHNlYXJjaFxuICAgICAqIHRleHQgd2lsbCBhbHdheXMgdGFrZSBwcmVjZWRlbmNlLlxuICAgICAqL1xuICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFsbG93cyBjdXN0b21pemluZyB0aGUgdW5kZXJseWluZyBFdWlJbnB1dFBvcG92ZXIgY29tcG9uZW50XG4gICAgICogKGV4Y2VwdCBmb3IgcHJvcHMgdGhhdCBjb250cm9sIHN0YXRlKS5cbiAgICAgKi9cbiAgaW5wdXRQb3BvdmVyUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5ID0gZnVuY3Rpb24gdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5KHN0cmluZywgaXNDYXNlU2Vuc2l0aXZlKSB7XG4gIHJldHVybiBpc0Nhc2VTZW5zaXRpdmUgPyBzdHJpbmcgOiBzdHJpbmcudG9Mb3dlckNhc2UoKTtcbn07XG5leHBvcnQgdmFyIGZsYXR0ZW5PcHRpb25Hcm91cHMgPSBmdW5jdGlvbiBmbGF0dGVuT3B0aW9uR3JvdXBzKG9wdGlvbnNPckdyb3Vwcykge1xuICByZXR1cm4gb3B0aW9uc09yR3JvdXBzLnJlZHVjZShmdW5jdGlvbiAob3B0aW9ucywgb3B0aW9uT3JHcm91cCkge1xuICAgIGlmIChvcHRpb25Pckdyb3VwLm9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmNvbmNhdChvcHRpb25Pckdyb3VwLm9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnB1c2gob3B0aW9uT3JHcm91cCk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9LCBbXSk7XG59O1xuZXhwb3J0IHZhciBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShfcmVmKSB7XG4gIHZhciBpc0Nhc2VTZW5zaXRpdmUgPSBfcmVmLmlzQ2FzZVNlbnNpdGl2ZSxcbiAgICBzZWFyY2hWYWx1ZSA9IF9yZWYuc2VhcmNoVmFsdWUsXG4gICAgc2VsZWN0ZWRPcHRpb25zID0gX3JlZi5zZWxlY3RlZE9wdGlvbnMsXG4gICAgb3B0aW9uS2V5ID0gX3JlZi5vcHRpb25LZXk7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkoc2VhcmNoVmFsdWUsIGlzQ2FzZVNlbnNpdGl2ZSk7XG4gIHJldHVybiBzZWxlY3RlZE9wdGlvbnMuZmluZChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgdmFyIG5vcm1hbGl6ZWRPcHRpb24gPSB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkob3B0aW9uLmxhYmVsLCBpc0Nhc2VTZW5zaXRpdmUpO1xuICAgIHJldHVybiBub3JtYWxpemVkT3B0aW9uID09PSBub3JtYWxpemVkU2VhcmNoVmFsdWUgJiYgKCFvcHRpb25LZXkgfHwgb3B0aW9uLmtleSA9PT0gb3B0aW9uS2V5KTtcbiAgfSk7XG59O1xudmFyIGNvbGxlY3RNYXRjaGluZ09wdGlvbiA9IGZ1bmN0aW9uIGNvbGxlY3RNYXRjaGluZ09wdGlvbihfcmVmMikge1xuICB2YXIgYWNjdW11bGF0b3IgPSBfcmVmMi5hY2N1bXVsYXRvcixcbiAgICBvcHRpb24gPSBfcmVmMi5vcHRpb24sXG4gICAgc2VsZWN0ZWRPcHRpb25zID0gX3JlZjIuc2VsZWN0ZWRPcHRpb25zLFxuICAgIHNlYXJjaFZhbHVlID0gX3JlZjIuc2VhcmNoVmFsdWUsXG4gICAgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gX3JlZjIubm9ybWFsaXplZFNlYXJjaFZhbHVlLFxuICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IF9yZWYyLmlzQ2FzZVNlbnNpdGl2ZSxcbiAgICBpc1ByZUZpbHRlcmVkID0gX3JlZjIuaXNQcmVGaWx0ZXJlZCxcbiAgICBzaG93UHJldlNlbGVjdGVkID0gX3JlZjIuc2hvd1ByZXZTZWxlY3RlZCxcbiAgICBvcHRpb25NYXRjaGVyID0gX3JlZjIub3B0aW9uTWF0Y2hlcjtcbiAgLy8gT25seSBzaG93IG9wdGlvbnMgd2hpY2ggaGF2ZW4ndCB5ZXQgYmVlbiBzZWxlY3RlZCB1bmxlc3MgcmVxdWVzdGVkLlxuICB2YXIgc2VsZWN0ZWRPcHRpb24gPSBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKHtcbiAgICBpc0Nhc2VTZW5zaXRpdmU6IGlzQ2FzZVNlbnNpdGl2ZSxcbiAgICBzZWFyY2hWYWx1ZTogb3B0aW9uLmxhYmVsLFxuICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLFxuICAgIG9wdGlvbktleTogb3B0aW9uLmtleVxuICB9KTtcbiAgaWYgKHNlbGVjdGVkT3B0aW9uICYmICFzaG93UHJldlNlbGVjdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gSWYgdGhlIG9wdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJlLWZpbHRlcmVkIHRoZW4gd2UgY2FuIHNraXAgZmlsdGVyaW5nIGFnYWluc3QgdGhlIHNlYXJjaCB2YWx1ZS5cbiAgaWYgKGlzUHJlRmlsdGVyZWQpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghbm9ybWFsaXplZFNlYXJjaFZhbHVlKSB7XG4gICAgYWNjdW11bGF0b3IucHVzaChvcHRpb24pO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaXNNYXRjaGluZyA9IG9wdGlvbk1hdGNoZXIoe1xuICAgIG9wdGlvbjogb3B0aW9uLFxuICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICBub3JtYWxpemVkU2VhcmNoVmFsdWU6IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSxcbiAgICBpc0Nhc2VTZW5zaXRpdmU6IGlzQ2FzZVNlbnNpdGl2ZSAhPT0gbnVsbCAmJiBpc0Nhc2VTZW5zaXRpdmUgIT09IHZvaWQgMCA/IGlzQ2FzZVNlbnNpdGl2ZSA6IHRydWVcbiAgfSk7XG4gIGlmIChpc01hdGNoaW5nKSB7XG4gICAgYWNjdW11bGF0b3IucHVzaChvcHRpb24pO1xuICB9XG59O1xuZXhwb3J0IHZhciBnZXRNYXRjaGluZ09wdGlvbnMgPSBmdW5jdGlvbiBnZXRNYXRjaGluZ09wdGlvbnMoX3JlZjMpIHtcbiAgdmFyIG9wdGlvbnMgPSBfcmVmMy5vcHRpb25zLFxuICAgIHNlbGVjdGVkT3B0aW9ucyA9IF9yZWYzLnNlbGVjdGVkT3B0aW9ucyxcbiAgICBzZWFyY2hWYWx1ZSA9IF9yZWYzLnNlYXJjaFZhbHVlLFxuICAgIG9wdGlvbk1hdGNoZXIgPSBfcmVmMy5vcHRpb25NYXRjaGVyLFxuICAgIF9yZWYzJGlzQ2FzZVNlbnNpdGl2ZSA9IF9yZWYzLmlzQ2FzZVNlbnNpdGl2ZSxcbiAgICBpc0Nhc2VTZW5zaXRpdmUgPSBfcmVmMyRpc0Nhc2VTZW5zaXRpdmUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjMkaXNDYXNlU2Vuc2l0aXZlLFxuICAgIF9yZWYzJGlzUHJlRmlsdGVyZWQgPSBfcmVmMy5pc1ByZUZpbHRlcmVkLFxuICAgIGlzUHJlRmlsdGVyZWQgPSBfcmVmMyRpc1ByZUZpbHRlcmVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYzJGlzUHJlRmlsdGVyZWQsXG4gICAgX3JlZjMkc2hvd1ByZXZTZWxlY3RlID0gX3JlZjMuc2hvd1ByZXZTZWxlY3RlZCxcbiAgICBzaG93UHJldlNlbGVjdGVkID0gX3JlZjMkc2hvd1ByZXZTZWxlY3RlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYzJHNob3dQcmV2U2VsZWN0ZSxcbiAgICBfcmVmMyRzb3J0TWF0Y2hlc0J5ID0gX3JlZjMuc29ydE1hdGNoZXNCeSxcbiAgICBzb3J0TWF0Y2hlc0J5ID0gX3JlZjMkc29ydE1hdGNoZXNCeSA9PT0gdm9pZCAwID8gJ25vbmUnIDogX3JlZjMkc29ydE1hdGNoZXNCeTtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eShzZWFyY2hWYWx1ZS50cmltKCksIGlzQ2FzZVNlbnNpdGl2ZSk7XG4gIHZhciBtYXRjaGluZ09wdGlvbnMgPSBbXTtcbiAgb3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICBpZiAob3B0aW9uLm9wdGlvbnMpIHtcbiAgICAgIHZhciBtYXRjaGluZ09wdGlvbnNGb3JHcm91cCA9IFtdO1xuICAgICAgb3B0aW9uLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXBPcHRpb24pIHtcbiAgICAgICAgY29sbGVjdE1hdGNoaW5nT3B0aW9uKHtcbiAgICAgICAgICBhY2N1bXVsYXRvcjogbWF0Y2hpbmdPcHRpb25zRm9yR3JvdXAsXG4gICAgICAgICAgb3B0aW9uOiBncm91cE9wdGlvbixcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgbm9ybWFsaXplZFNlYXJjaFZhbHVlOiBub3JtYWxpemVkU2VhcmNoVmFsdWUsXG4gICAgICAgICAgaXNDYXNlU2Vuc2l0aXZlOiBpc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgICAgaXNQcmVGaWx0ZXJlZDogaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgICBzaG93UHJldlNlbGVjdGVkOiBzaG93UHJldlNlbGVjdGVkLFxuICAgICAgICAgIG9wdGlvbk1hdGNoZXI6IG9wdGlvbk1hdGNoZXJcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChtYXRjaGluZ09wdGlvbnNGb3JHcm91cC5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEFkZCBvcHRpb24gZm9yIGdyb3VwIGxhYmVsXG4gICAgICAgIG1hdGNoaW5nT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICBrZXk6IG9wdGlvbi5rZXksXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgICBpc0dyb3VwTGFiZWxPcHRpb246IHRydWUsXG4gICAgICAgICAgYXBwZW5kOiBvcHRpb24uYXBwZW5kLFxuICAgICAgICAgIHByZXBlbmQ6IG9wdGlvbi5wcmVwZW5kXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBBZGQgbWF0Y2hpbmcgb3B0aW9ucyBmb3IgZ3JvdXBcbiAgICAgICAgLy8gdXNlIGNvbmNhdCBvdmVyIHNwcmVhZGluZyB0byBzdXBwb3J0IGxhcmdlIGFycmF5cyAtIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9kZW1vL2phdmFzY3JpcHQtYXJndW1lbnQtY291bnRcbiAgICAgICAgbWF0Y2hpbmdPcHRpb25zID0gbWF0Y2hpbmdPcHRpb25zLmNvbmNhdChtYXRjaGluZ09wdGlvbnNGb3JHcm91cCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbGxlY3RNYXRjaGluZ09wdGlvbih7XG4gICAgICAgIGFjY3VtdWxhdG9yOiBtYXRjaGluZ09wdGlvbnMsXG4gICAgICAgIG9wdGlvbjogb3B0aW9uLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICBub3JtYWxpemVkU2VhcmNoVmFsdWU6IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSxcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlOiBpc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQ6IGlzUHJlRmlsdGVyZWQsXG4gICAgICAgIHNob3dQcmV2U2VsZWN0ZWQ6IHNob3dQcmV2U2VsZWN0ZWQsXG4gICAgICAgIG9wdGlvbk1hdGNoZXI6IG9wdGlvbk1hdGNoZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIGlmIChzb3J0TWF0Y2hlc0J5ID09PSAnc3RhcnRzV2l0aCcpIHtcbiAgICB2YXIgcmVmT2JqID0ge1xuICAgICAgc3RhcnRXaXRoOiBbXSxcbiAgICAgIG90aGVyczogW11cbiAgICB9O1xuICAgIG1hdGNoaW5nT3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHZhciBub3JtYWxpemVkTGFiZWwgPSB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkob2JqZWN0LmxhYmVsLCBpc0Nhc2VTZW5zaXRpdmUpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRMYWJlbC5zdGFydHNXaXRoKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkpIHtcbiAgICAgICAgcmVmT2JqLnN0YXJ0V2l0aC5wdXNoKG9iamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZPYmoub3RoZXJzLnB1c2gob2JqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZWZPYmouc3RhcnRXaXRoKSwgX3RvQ29uc3VtYWJsZUFycmF5KHJlZk9iai5vdGhlcnMpKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hpbmdPcHRpb25zO1xufTtcblxuLyoqXG4gKiBQYXJ0aWFsIHN0cmluZyBlcXVhbGl0eSBvcHRpb24gbWF0Y2hlciBmb3IgRXVpQ29tYm9Cb3guXG4gKiBJdCBtYXRjaGVzIGFsbCBvcHRpb25zIHdpdGggbGFiZWxzIGluY2x1ZGluZyB0aGUgc2VhcmNoZWQgc3RyaW5nLlxuICovXG5leHBvcnQgdmFyIGNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIgPSBmdW5jdGlvbiBjcmVhdGVQYXJ0aWFsU3RyaW5nRXF1YWxpdHlPcHRpb25NYXRjaGVyKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgdmFyIG9wdGlvbiA9IF9yZWY0Lm9wdGlvbixcbiAgICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IF9yZWY0LmlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IF9yZWY0Lm5vcm1hbGl6ZWRTZWFyY2hWYWx1ZTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZhciBub3JtYWxpemVkT3B0aW9uID0gdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5KG9wdGlvbi5sYWJlbC50cmltKCksIGlzQ2FzZVNlbnNpdGl2ZSk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRPcHRpb24uaW5jbHVkZXMobm9ybWFsaXplZFNlYXJjaFZhbHVlKTtcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJrZXlcIiwgXCJsYWJlbFwiLCBcImNvbG9yXCIsIFwib25DbGlja1wiLCBcImFwcGVuZFwiLCBcInByZXBlbmRcIiwgXCJ0cnVuY2F0aW9uUHJvcHNcIiwgXCJ0b29sVGlwQ29udGVudFwiLCBcInRvb2xUaXBQcm9wc1wiXTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzLCBDYW52YXNUZXh0VXRpbHMsIFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi8uLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0IH0gZnJvbSAnLi4vLi4vZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0JztcbmltcG9ydCB7IEV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEV1aUNvbWJvQm94UGlsbCB9IGZyb20gJy4vY29tYm9fYm94X3BpbGwnO1xuaW1wb3J0IHsgZXVpQ29tYm9Cb3hJbnB1dFN0eWxlcyB9IGZyb20gJy4vY29tYm9fYm94X2lucHV0LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDb21ib0JveElucHV0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aUNvbWJvQm94SW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlDb21ib0JveElucHV0KTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlDb21ib0JveElucHV0LCBbXS5jb25jYXQoYXJncykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzdGF0ZVwiLCB7XG4gICAgICBpbnB1dFdpZHRoOiAyLFxuICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIndpZHRoVXRpbHNcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaW5wdXRSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRpbnB1dFJlZiwgX3RoaXMkcHJvcHM7XG4gICAgICBfdGhpcy53aWR0aFV0aWxzID0gbmV3IENhbnZhc1RleHRVdGlscyh7XG4gICAgICAgIGNvbnRhaW5lcjogZWxcbiAgICAgIH0pO1xuICAgICAgKF90aGlzJHByb3BzJGlucHV0UmVmID0gKF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMpLmlucHV0UmVmKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRpbnB1dFJlZiA9PT0gdm9pZCAwIHx8IF90aGlzJHByb3BzJGlucHV0UmVmLmNhbGwoX3RoaXMkcHJvcHMsIGVsKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidXBkYXRlSW5wdXRTaXplXCIsIGZ1bmN0aW9uIChpbnB1dFZhbHVlKSB7XG4gICAgICBpZiAoIV90aGlzLndpZHRoVXRpbHMpIHJldHVybjtcbiAgICAgIGlmIChfdGhpcy5hc1BsYWluVGV4dCkgcmV0dXJuO1xuICAgICAgX3RoaXMud2lkdGhVdGlscy5zZXRUZXh0VG9DaGVjayhpbnB1dFZhbHVlKTtcbiAgICAgIC8vIENhbnZhcyBoYXMgbWludXRlIHN1YnBpeGVsIGRpZmZlcmVuY2VzIGluIHJlbmRlcmluZyBjb21wYXJlZCB0byBET01cbiAgICAgIC8vIFdlJ2xsIGJ1ZmZlciB0aGUgaW5wdXQgYnkgfjJweCBqdXN0IHRvIGVuc3VyZSBzdWZmaWNpZW50IHdpZHRoXG4gICAgICB2YXIgaW5wdXRXaWR0aCA9IE1hdGguY2VpbChfdGhpcy53aWR0aFV0aWxzLnRleHRXaWR0aCkgKyAyO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpbnB1dFdpZHRoOiBpbnB1dFdpZHRoXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLnByb3BzLm9uRm9jdXMoZXZlbnQpO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQmx1clwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgaGFzU2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLmhhc1NlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgb25SZW1vdmVPcHRpb24gPSBfdGhpcyRwcm9wczIub25SZW1vdmVPcHRpb24sXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzMi5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIGlzTGlzdE9wZW4gPSBfdGhpcyRwcm9wczIuaXNMaXN0T3BlbixcbiAgICAgICAgb25PcGVuTGlzdENsaWNrID0gX3RoaXMkcHJvcHMyLm9uT3Blbkxpc3RDbGljayxcbiAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczIub25DaGFuZ2U7XG4gICAgICB2YXIgc2VhcmNoSXNFbXB0eSA9ICFzZWFyY2hWYWx1ZS5sZW5ndGg7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkJBQ0tTUEFDRSkge1xuICAgICAgICAvLyBXaGVuIGJhY2tzcGFjaW5nIGluIGEgcGxhaW4gdGV4dCBjb21ib2JveCwgY2hhbmdlIG5vcm1hbGx5IGFuZCByZW1vdmUgdGhlIHNlbGVjdGlvblxuICAgICAgICBpZiAoX3RoaXMuYXNQbGFpblRleHQpIHtcbiAgICAgICAgICBvbkNoYW5nZShldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICBpZiAoaGFzU2VsZWN0ZWRPcHRpb25zKSB7XG4gICAgICAgICAgICBvblJlbW92ZU9wdGlvbihzZWxlY3RlZE9wdGlvbnNbc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2hlbiBiYWNrc3BhY2luZyBmcm9tIGFuIGVtcHR5IGlucHV0LCBkZWxldGUgdGhlIGxhc3QgcGlsbCBvcHRpb24gaW4gdGhlIGxpc3RcbiAgICAgICAgZWxzZSBpZiAoc2VhcmNoSXNFbXB0eSAmJiBoYXNTZWxlY3RlZE9wdGlvbnMpIHtcbiAgICAgICAgICBvblJlbW92ZU9wdGlvbihzZWxlY3RlZE9wdGlvbnNbc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICBpZiAoISFzaW5nbGVTZWxlY3Rpb24gJiYgIWlzTGlzdE9wZW4pIHtcbiAgICAgICAgICAgIG9uT3Blbkxpc3RDbGljaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZW5kZXJQaWxsc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBEb24ndCByZW5kZXIgYSBwaWxsIGZvciBwbGFpbiB0ZXh0IGNvbWJvYm94ZXMgLSB1c2UgdGhlIGlucHV0IGluc3RlYWRcbiAgICAgIGlmIChfdGhpcy5hc1BsYWluVGV4dCkgcmV0dXJuIG51bGw7XG4gICAgICAvLyBEb24ndCByZW5kZXIgdGhlIHNpbmdsZSBwaWxsIHNlbGVjdGlvbiB3aGlsZSBzZWFyY2hpbmdcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5zaW5nbGVTZWxlY3Rpb24gJiYgX3RoaXMucHJvcHMuc2VhcmNoVmFsdWUpIHJldHVybiBudWxsO1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMzLmlzRGlzYWJsZWQsXG4gICAgICAgIG9uUmVtb3ZlT3B0aW9uID0gX3RoaXMkcHJvcHMzLm9uUmVtb3ZlT3B0aW9uO1xuICAgICAgaWYgKCFzZWxlY3RlZE9wdGlvbnMgfHwgIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICB2YXIga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgICAgICBsYWJlbCA9IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgICBjb2xvciA9IG9wdGlvbi5jb2xvcixcbiAgICAgICAgICBvbkNsaWNrID0gb3B0aW9uLm9uQ2xpY2ssXG4gICAgICAgICAgYXBwZW5kID0gb3B0aW9uLmFwcGVuZCxcbiAgICAgICAgICBwcmVwZW5kID0gb3B0aW9uLnByZXBlbmQsXG4gICAgICAgICAgdHJ1bmNhdGlvblByb3BzID0gb3B0aW9uLnRydW5jYXRpb25Qcm9wcyxcbiAgICAgICAgICB0b29sVGlwQ29udGVudCA9IG9wdGlvbi50b29sVGlwQ29udGVudCxcbiAgICAgICAgICB0b29sVGlwUHJvcHMgPSBvcHRpb24udG9vbFRpcFByb3BzLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9uLCBfZXhjbHVkZWQpO1xuICAgICAgICB2YXIgcGlsbE9uQ2xvc2UgPSBpc0Rpc2FibGVkIHx8IF90aGlzLnByb3BzLnNpbmdsZVNlbGVjdGlvbiB8fCBvbkNsaWNrID8gdW5kZWZpbmVkIDogb25SZW1vdmVPcHRpb247XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94UGlsbCwgX2V4dGVuZHMoe1xuICAgICAgICAgIG9wdGlvbjogb3B0aW9uLFxuICAgICAgICAgIG9uQ2xvc2U6IHBpbGxPbkNsb3NlLFxuICAgICAgICAgIGtleToga2V5ICE9PSBudWxsICYmIGtleSAhPT0gdm9pZCAwID8ga2V5IDogbGFiZWwudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgICAgICBvbkNsaWNrQXJpYUxhYmVsOiBvbkNsaWNrID8gJ0NoYW5nZScgOiB1bmRlZmluZWRcbiAgICAgICAgfSwgcmVzdCksIGxhYmVsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpQ29tYm9Cb3hJbnB1dCwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpQ29tYm9Cb3hJbnB1dCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMuc2VhcmNoVmFsdWUgIT09IHRoaXMucHJvcHMuc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dFNpemUodGhpcy5wcm9wcy5zZWFyY2hWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFzUGxhaW5UZXh0XCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgc2luZ2xlU2VsZWN0aW9uID0gdGhpcy5wcm9wcy5zaW5nbGVTZWxlY3Rpb247XG4gICAgICB2YXIgaXNTaW5nbGVTZWxlY3Rpb25Db25maWcgPSBzaW5nbGVTZWxlY3Rpb24gJiYgX3R5cGVvZihzaW5nbGVTZWxlY3Rpb24pID09PSAnb2JqZWN0JztcbiAgICAgIHJldHVybiAhIShpc1NpbmdsZVNlbGVjdGlvbkNvbmZpZyAmJiBzaW5nbGVTZWxlY3Rpb24uYXNQbGFpblRleHQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZWFyY2hWYWx1ZVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHM0LnNlYXJjaFZhbHVlLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczQuc2VsZWN0ZWRPcHRpb25zO1xuICAgICAgaWYgKHRoaXMuYXNQbGFpblRleHQpIHtcbiAgICAgICAgdmFyIF9zZWxlY3RlZE9wdGlvbnMkO1xuICAgICAgICByZXR1cm4gc2VhcmNoVmFsdWUgfHwgKHNlbGVjdGVkT3B0aW9ucyA9PT0gbnVsbCB8fCBzZWxlY3RlZE9wdGlvbnMgPT09IHZvaWQgMCB8fCAoX3NlbGVjdGVkT3B0aW9ucyQgPSBzZWxlY3RlZE9wdGlvbnNbMF0pID09PSBudWxsIHx8IF9zZWxlY3RlZE9wdGlvbnMkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfc2VsZWN0ZWRPcHRpb25zJC5sYWJlbCkgfHwgJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VhcmNoVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHM1LmNvbXByZXNzZWQsXG4gICAgICAgIGZvY3VzZWRPcHRpb25JZCA9IF90aGlzJHByb3BzNS5mb2N1c2VkT3B0aW9uSWQsXG4gICAgICAgIGZ1bGxXaWR0aCA9IF90aGlzJHByb3BzNS5mdWxsV2lkdGgsXG4gICAgICAgIGhhc1NlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzNS5oYXNTZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIGlkID0gX3RoaXMkcHJvcHM1LmlkLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM1LmlzRGlzYWJsZWQsXG4gICAgICAgIGlzTGlzdE9wZW4gPSBfdGhpcyRwcm9wczUuaXNMaXN0T3BlbixcbiAgICAgICAgbm9JY29uID0gX3RoaXMkcHJvcHM1Lm5vSWNvbixcbiAgICAgICAgX29uQ2hhbmdlID0gX3RoaXMkcHJvcHM1Lm9uQ2hhbmdlLFxuICAgICAgICBvbkNsZWFyID0gX3RoaXMkcHJvcHM1Lm9uQ2xlYXIsXG4gICAgICAgIG9uQ2xpY2sgPSBfdGhpcyRwcm9wczUub25DbGljayxcbiAgICAgICAgb25Gb2N1cyA9IF90aGlzJHByb3BzNS5vbkZvY3VzLFxuICAgICAgICBvbkNsb3NlTGlzdENsaWNrID0gX3RoaXMkcHJvcHM1Lm9uQ2xvc2VMaXN0Q2xpY2ssXG4gICAgICAgIG9uT3Blbkxpc3RDbGljayA9IF90aGlzJHByb3BzNS5vbk9wZW5MaXN0Q2xpY2ssXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHM1LnBsYWNlaG9sZGVyLFxuICAgICAgICByb290SWQgPSBfdGhpcyRwcm9wczUucm9vdElkLFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzNS5zZWFyY2hWYWx1ZSxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM1LnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHM1LnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgdmFsdWUgPSBfdGhpcyRwcm9wczUudmFsdWUsXG4gICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wczUucHJlcGVuZCxcbiAgICAgICAgYXBwZW5kID0gX3RoaXMkcHJvcHM1LmFwcGVuZCxcbiAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHM1LmlzTG9hZGluZyxcbiAgICAgICAgaXNJbnZhbGlkID0gX3RoaXMkcHJvcHM1LmlzSW52YWxpZCxcbiAgICAgICAgYXV0b0ZvY3VzID0gX3RoaXMkcHJvcHM1LmF1dG9Gb2N1cyxcbiAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHM1WydhcmlhLWxhYmVsJ10sXG4gICAgICAgIGFyaWFMYWJlbGxlZGJ5ID0gX3RoaXMkcHJvcHM1WydhcmlhLWxhYmVsbGVkYnknXTtcbiAgICAgIHZhciByZW1vdmVPcHRpb25NZXNzYWdlO1xuICAgICAgdmFyIHJlbW92ZU9wdGlvbk1lc3NhZ2VJZDtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmhhc0ZvY3VzKSB7XG4gICAgICAgIHZhciByZWFkUGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlciA/IFwiXCIuY29uY2F0KHBsYWNlaG9sZGVyLCBcIi5cIikgOiAnJztcbiAgICAgICAgdmFyIHJlbW92ZU9wdGlvbk1lc3NhZ2VDb250ZW50ID0gXCJDb21ibyBib3guIFNlbGVjdGVkLiBcIi5jb25jYXQoc2VhcmNoVmFsdWUgPyBcIlwiLmNvbmNhdChzZWFyY2hWYWx1ZSwgXCIuIFNlbGVjdGVkLiBcIikgOiAnJykuY29uY2F0KHNlbGVjdGVkT3B0aW9ucyAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCA/IFwiXCIuY29uY2F0KHZhbHVlLCBcIi4gUHJlc3MgQmFja3NwYWNlIHRvIGRlbGV0ZSBcIikuY29uY2F0KHNlbGVjdGVkT3B0aW9uc1tzZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMV0ubGFiZWwsIFwiLiBcIikgOiAnJywgXCJDb21ibyBib3ggaW5wdXQuIFwiKS5jb25jYXQocmVhZFBsYWNlaG9sZGVyLCBcIiBUeXBlIHNvbWUgdGV4dCBvciwgdG8gZGlzcGxheSBhIGxpc3Qgb2YgY2hvaWNlcywgcHJlc3MgRG93biBBcnJvdy4gXCIpICsgJ1RvIGV4aXQgdGhlIGxpc3Qgb2YgY2hvaWNlcywgcHJlc3MgRXNjYXBlLic7XG4gICAgICAgIHJlbW92ZU9wdGlvbk1lc3NhZ2VJZCA9IHJvb3RJZCgncmVtb3ZlT3B0aW9uTWVzc2FnZScpO1xuXG4gICAgICAgIC8vIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIHdpbGwgcmVhZCB0aGlzIG1lc3NhZ2UgYWxvdWQgaW1tZWRpYXRlbHkgb25jZSBpdCBlbnRlcnMgdGhlIERPTS5cbiAgICAgICAgLy8gV2UnbGwgcmVuZGVyIHRvIHRoZSBET00gd2hlbiB0aGUgaW5wdXQgZ2FpbnMgZm9jdXMgYW5kIHJlbW92ZSBpdCB3aGVuIHRoZSBpbnB1dCBsb3NlcyBmb2N1cy5cbiAgICAgICAgLy8gV2UnbGwgdXNlIGFyaWEtaGlkZGVuIHRvIHByZXZlbnQgZGVmYXVsdCBhcmlhIGluZm9ybWF0aW9uIGZyb20gYmVpbmcgcmVhZCBieSB0aGUgc2NyZWVuXG4gICAgICAgIC8vIHJlYWRlci5cbiAgICAgICAgcmVtb3ZlT3B0aW9uTWVzc2FnZSA9IF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgIFwiYXJpYS1saXZlXCI6IFwicG9saXRlXCIsXG4gICAgICAgICAgaWQ6IHJlbW92ZU9wdGlvbk1lc3NhZ2VJZFxuICAgICAgICB9LCByZW1vdmVPcHRpb25NZXNzYWdlQ29udGVudCkpO1xuICAgICAgfVxuICAgICAgdmFyIGlzSW5Hcm91cCA9IHNpbmdsZVNlbGVjdGlvbiAmJiAocHJlcGVuZCB8fCBhcHBlbmQpO1xuICAgICAgdmFyIHNob3dQbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyICYmICEoc2VsZWN0ZWRPcHRpb25zICE9PSBudWxsICYmIHNlbGVjdGVkT3B0aW9ucyAhPT0gdm9pZCAwICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpICYmICFzZWFyY2hWYWx1ZTtcbiAgICAgIHZhciBjbGlja1Byb3BzID0ge307XG4gICAgICBpZiAoIWlzRGlzYWJsZWQgJiYgb25DbGVhciAmJiBoYXNTZWxlY3RlZE9wdGlvbnMpIHtcbiAgICAgICAgY2xpY2tQcm9wcy5jbGVhciA9IHtcbiAgICAgICAgICAnZGF0YS10ZXN0LXN1YmonOiAnY29tYm9Cb3hDbGVhckJ1dHRvbicsXG4gICAgICAgICAgb25DbGljazogb25DbGVhclxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIGljb247XG4gICAgICBpZiAoIW5vSWNvbiAmJiAhaXNEaXNhYmxlZCkge1xuICAgICAgICBpY29uID0ge1xuICAgICAgICAgICdhcmlhLWxhYmVsJzogaXNMaXN0T3BlbiA/ICdDbG9zZSBsaXN0IG9mIG9wdGlvbnMnIDogJ09wZW4gbGlzdCBvZiBvcHRpb25zJyxcbiAgICAgICAgICAnZGF0YS10ZXN0LXN1YmonOiAnY29tYm9Cb3hUb2dnbGVMaXN0QnV0dG9uJyxcbiAgICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBvbkNsaWNrOiBpc0xpc3RPcGVuICYmICFpc0Rpc2FibGVkID8gb25DbG9zZUxpc3RDbGljayA6IG9uT3Blbkxpc3RDbGljayxcbiAgICAgICAgICBzaWRlOiAncmlnaHQnLFxuICAgICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgICB0eXBlOiAnYXJyb3dEb3duJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIHdyYXBDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcCcsIHtcbiAgICAgICAgJ2V1aUNvbWJvQm94X19pbnB1dFdyYXAtLXBsYWluVGV4dCc6IHRoaXMuYXNQbGFpblRleHRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyLCBudWxsLCBmdW5jdGlvbiAoc3R5bGVzTWVtb2l6ZXIpIHtcbiAgICAgICAgdmFyIHN0eWxlcyA9IHN0eWxlc01lbW9pemVyKGV1aUNvbWJvQm94SW5wdXRTdHlsZXMpO1xuICAgICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlDb21ib0JveElucHV0V3JhcHBlciwgIXNpbmdsZVNlbGVjdGlvbiAmJiBzdHlsZXMubXVsdGlTZWxlY3QsIGNvbXByZXNzZWQgPyBzdHlsZXMuY29tcHJlc3NlZCA6IHN0eWxlcy51bmNvbXByZXNzZWRdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoX3RoaXMyLmFzUGxhaW5UZXh0IHx8IHNob3dQbGFjZWhvbGRlciA/IFtzdHlsZXMucGxhaW5UZXh0LnBsYWluVGV4dCwgY29tcHJlc3NlZCA/IHN0eWxlcy5wbGFpblRleHQuY29tcHJlc3NlZCA6IHN0eWxlcy5wbGFpblRleHQudW5jb21wcmVzc2VkXSA6IFtdKSwgW2lzRGlzYWJsZWQgPyBzdHlsZXMuZGlzYWJsZWQgOiBpc0ludmFsaWQgPyBzdHlsZXMuaW52YWxpZCA6IGlzTGlzdE9wZW4gPyBzdHlsZXMub3BlbiA6IHVuZGVmaW5lZCwgaXNJbkdyb3VwICYmIHN0eWxlcy5pbkdyb3VwXSk7XG4gICAgICAgIHZhciBmb3JtTGF5b3V0U3R5bGVzID0gW3N0eWxlcy5mb3JtTGF5b3V0LmV1aUNvbWJvQm94X19mb3JtQ29udHJvbExheW91dCwgIXNpbmdsZVNlbGVjdGlvbiAmJiBzdHlsZXMuZm9ybUxheW91dC5tdWx0aVNlbGVjdF07XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgaWNvbjogaWNvblxuICAgICAgICB9LCBjbGlja1Byb3BzLCB7XG4gICAgICAgICAgaW5wdXRJZDogaWQsXG4gICAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgICAgaXNJbnZhbGlkOiBpc0ludmFsaWQsXG4gICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgICAgICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgICAgICAgIHByZXBlbmQ6IHByZXBlbmQsXG4gICAgICAgICAgYXBwZW5kOiBhcHBlbmQsXG4gICAgICAgICAgY3NzOiBmb3JtTGF5b3V0U3R5bGVzXG4gICAgICAgIH0pLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IHdyYXBDbGFzc2VzLFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjb21ib0JveElucHV0XCIsXG4gICAgICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgICAgICB0YWJJbmRleDogLTEgLy8gYmVjb21lcyBvbkJsdXIgZXZlbnQncyByZWxhdGVkVGFyZ2V0LCBvdGhlcndpc2UgcmVsYXRlZFRhcmdldCBpcyBudWxsIHdoZW4gY2xpY2tpbmcgb24gdGhpcyBkaXZcbiAgICAgICAgfSwgX3RoaXMyLnJlbmRlclBpbGxzKCksIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hPcHRpb25BcHBlbmRQcmVwZW5kLCB7XG4gICAgICAgICAgb3B0aW9uOiBfdGhpczIuYXNQbGFpblRleHQgPyBzZWxlY3RlZE9wdGlvbnMgPT09IG51bGwgfHwgc2VsZWN0ZWRPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZE9wdGlvbnNbMF0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgY2xhc3NOYW1lUHJlZml4OiBcImV1aUNvbWJvQm94UGxhaW5UZXh0U2VsZWN0aW9uXCIsXG4gICAgICAgICAgbWFyZ2luU2l6ZTogXCJ4eHNcIlxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwiaW5wdXRcIiwge1xuICAgICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IGZvY3VzZWRPcHRpb25JZCxcbiAgICAgICAgICBcImFyaWEtYXV0b2NvbXBsZXRlXCI6IFwibGlzdFwiLFxuICAgICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiBpc0xpc3RPcGVuID8gcm9vdElkKCdsaXN0Ym94JykgOiAnJyxcbiAgICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogaXNMaXN0T3BlbixcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbGxlZGJ5LFxuICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IGlzSW52YWxpZCxcbiAgICAgICAgICBjc3M6IHN0eWxlcy5ldWlDb21ib0JveElucHV0LFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveF9faW5wdXRcIixcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiY29tYm9Cb3hTZWFyY2hJbnB1dFwiLFxuICAgICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBvbkJsdXI6IF90aGlzMi5vbkJsdXIsXG4gICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX29uQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkZvY3VzOiBfdGhpczIub25Gb2N1cyxcbiAgICAgICAgICBvbktleURvd246IF90aGlzMi5vbktleURvd24sXG4gICAgICAgICAgcmVmOiBfdGhpczIuaW5wdXRSZWZDYWxsYmFjayxcbiAgICAgICAgICByb2xlOiBcImNvbWJvYm94XCIsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGlubGluZVNpemU6IF90aGlzMi5hc1BsYWluVGV4dCB8fCBzaG93UGxhY2Vob2xkZXIgPyAnMTAwJScgOiBfdGhpczIuc3RhdGUuaW5wdXRXaWR0aFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHNob3dQbGFjZWhvbGRlciA/IHBsYWNlaG9sZGVyIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHZhbHVlOiBfdGhpczIuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICAgICAgYXV0b0NvbXBsZXRlOiBcIm9mZlwiXG4gICAgICAgICAgLy8gRm9yY2UgdGhlIG1lbnUgdG8gcmUtb3BlbiBvbiBldmVyeSBpbnB1dCBjbGljayAtIG9ubHkgbmVjZXNzYXJ5IHdoZW4gcGxhaW4gdGV4dFxuICAgICAgICAgICxcbiAgICAgICAgICBvbkNsaWNrOiBfdGhpczIuYXNQbGFpblRleHQgPyBvbkZvY3VzIDogdW5kZWZpbmVkIC8vIFR5cGUgc2hlbmFuaWdhbnMgLSBldmVudCBzaG91bGQgYmUgbW9zdGx5IHRoZSBzYW1lXG4gICAgICAgIH0pKSwgcmVtb3ZlT3B0aW9uTWVzc2FnZSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5FdWlDb21ib0JveElucHV0LnByb3BUeXBlcyA9IHtcbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgZm9jdXNlZE9wdGlvbklkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBoYXNTZWxlY3RlZE9wdGlvbnM6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmFueSxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzTGlzdE9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG5vSWNvbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgb25CbHVyOiBQcm9wVHlwZXMuYW55LFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uQ2xvc2VMaXN0Q2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgb25PcGVuTGlzdENsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvblJlbW92ZU9wdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJvb3RJZDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBzZWFyY2hWYWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWxlY3RlZE9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgICAvKipcbiAgICAgICAgICogT3B0aW9uYWwgY3VzdG9tIHRvb2x0aXAgY29udGVudCBmb3IgdGhlIGJ1dHRvblxuICAgICAgICAgKi9cbiAgICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIC8qKlxuICAgICAgICAgKiBPcHRpb25hbCBwcm9wcyB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nICoqW0V1aVRvb2xUaXBdKC8jL2Rpc3BsYXkvdG9vbHRpcCkqKlxuICAgICAgICAgKi9cbiAgICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gICAgfSkuaXNSZXF1aXJlZCksXG4gICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBjdXN0b20gdG9vbHRpcCBjb250ZW50IGZvciB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBwcm9wcyB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nICoqW0V1aVRvb2xUaXBdKC8jL2Rpc3BsYXkvdG9vbHRpcCkqKlxuICAgICAgICovXG4gICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhc1BsYWluVGV4dDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICB0b2dnbGVCdXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwcmVwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGFwcGVuZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuaW1wb3J0IHsgY3NzIGFzIF9jc3MgfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgbG9naWNhbFN0eWxlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbi8qKlxuICogRFJZIHV0aWwgZm9yIHJlbmRlcmluZyBhbiBvcHRpb24gd2l0aCBpdHMgcHJlcGVuZCBhbmQgYXBwZW5kIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IHZhciBFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQgPSBmdW5jdGlvbiBFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIG9wdGlvbiA9IF9yZWYub3B0aW9uLFxuICAgIGNsYXNzTmFtZVByZWZpeCA9IF9yZWYuY2xhc3NOYW1lUHJlZml4LFxuICAgIF9yZWYkbWFyZ2luU2l6ZSA9IF9yZWYubWFyZ2luU2l6ZSxcbiAgICBtYXJnaW5TaXplID0gX3JlZiRtYXJnaW5TaXplID09PSB2b2lkIDAgPyAneHMnIDogX3JlZiRtYXJnaW5TaXplO1xuICB2YXIgX3VzZUV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKSxcbiAgICBldWlUaGVtZSA9IF91c2VFdWlUaGVtZS5ldWlUaGVtZTtcbiAgdmFyIG1hcmdpbiA9IGV1aVRoZW1lLnNpemVbbWFyZ2luU2l6ZV07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCAob3B0aW9uID09PSBudWxsIHx8IG9wdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9uLnByZXBlbmQpICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KGNsYXNzTmFtZVByZWZpeCwgXCJfX3ByZXBlbmRcIiksXG4gICAgY3NzOiAvKiNfX1BVUkVfXyovX2Nzcyhfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGxvZ2ljYWxTdHlsZSgnbWFyZ2luLXJpZ2h0JywgbWFyZ2luKSksIGNlbnRlckljb25zKSwgXCI7bGFiZWw6RXVpQ29tYm9Cb3hPcHRpb25BcHBlbmRQcmVwZW5kO1wiKVxuICB9LCBvcHRpb24ucHJlcGVuZCksIGNoaWxkcmVuLCAob3B0aW9uID09PSBudWxsIHx8IG9wdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9uLmFwcGVuZCkgJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoY2xhc3NOYW1lUHJlZml4LCBcIl9fYXBwZW5kXCIpLFxuICAgIGNzczogLyojX19QVVJFX18qL19jc3MoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBsb2dpY2FsU3R5bGUoJ21hcmdpbi1sZWZ0JywgbWFyZ2luKSksIGNlbnRlckljb25zKSwgXCI7bGFiZWw6RXVpQ29tYm9Cb3hPcHRpb25BcHBlbmRQcmVwZW5kO1wiKVxuICB9LCBvcHRpb24uYXBwZW5kKSk7XG59O1xuXG4vLyBGaXggdmVydGljYWwgYWxpZ25tZW50IG9mIEV1aUljb25zIGluIHByZXBlbmQvYXBwZW5kIG5vZGVzXG52YXIgY2VudGVySWNvbnMgPSB7XG4gICcuZXVpSWNvbic6IHtcbiAgICBkaXNwbGF5OiAnYmxvY2snXG4gIH1cbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwib25DbGlja1wiLCBcIm9uQ2xpY2tBcmlhTGFiZWxcIiwgXCJvbkNsb3NlXCIsIFwib3B0aW9uXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUJhZGdlIH0gZnJvbSAnLi4vLi4vYmFkZ2UnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hPcHRpb25BcHBlbmRQcmVwZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZXVpQ29tYm9Cb3hQaWxsU3R5bGVzIH0gZnJvbSAnLi9jb21ib19ib3hfcGlsbC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3hQaWxsID0gZnVuY3Rpb24gRXVpQ29tYm9Cb3hQaWxsKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdob2xsb3cnIDogX3JlZiRjb2xvcixcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgIG9uQ2xpY2tBcmlhTGFiZWwgPSBfcmVmLm9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgb25DbG9zZSA9IF9yZWYub25DbG9zZSxcbiAgICBvcHRpb24gPSBfcmVmLm9wdGlvbixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29tYm9Cb3hQaWxsJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUNvbWJvQm94UGlsbFN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBzdHlsZXMuZXVpQ29tYm9Cb3hQaWxsO1xuICB2YXIgb25DbGlja1Byb3BzID0gb25DbGljayAmJiBvbkNsaWNrQXJpYUxhYmVsID8ge1xuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgb25DbGlja0FyaWFMYWJlbDogb25DbGlja0FyaWFMYWJlbFxuICB9IDoge307XG4gIHZhciBjb250ZW50ID0gX19fRW1vdGlvbkpTWChFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQsIHtcbiAgICBvcHRpb246IG9wdGlvbixcbiAgICBjbGFzc05hbWVQcmVmaXg6IFwiZXVpQ29tYm9Cb3hQaWxsXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWktdGV4dFRydW5jYXRlXCJcbiAgfSwgY2hpbGRyZW4pKTtcbiAgaWYgKG9uQ2xvc2UpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDb21ib0JveFBpbGwucmVtb3ZlU2VsZWN0aW9uXCIsXG4gICAgICBkZWZhdWx0OiBcIlJlbW92ZSB7Y2hpbGRyZW59IGZyb20gc2VsZWN0aW9uIGluIHRoaXMgZ3JvdXBcIixcbiAgICAgIHZhbHVlczoge1xuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAocmVtb3ZlU2VsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJldWlDb21ib0JveFBpbGxcIixcbiAgICAgICAgaWNvbk9uQ2xpY2s6IGZ1bmN0aW9uIGljb25PbkNsaWNrKCkge1xuICAgICAgICAgIHJldHVybiBvbkNsb3NlKG9wdGlvbik7XG4gICAgICAgIH0sXG4gICAgICAgIGljb25PbkNsaWNrQXJpYUxhYmVsOiByZW1vdmVTZWxlY3Rpb24sXG4gICAgICAgIGljb25TaWRlOiBcInJpZ2h0XCIsXG4gICAgICAgIGljb25UeXBlOiBcImNyb3NzXCIsXG4gICAgICAgIHRpdGxlOiBjaGlsZHJlblxuICAgICAgfSwgb25DbGlja1Byb3BzLCByZXN0KSwgY29udGVudCk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQmFkZ2UsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY29sb3I6IGNvbG9yLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJldWlDb21ib0JveFBpbGxcIixcbiAgICB0aXRsZTogY2hpbGRyZW5cbiAgfSwgcmVzdCwgb25DbGlja1Byb3BzKSwgY29udGVudCk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlDb21ib0JveFBpbGxTdHlsZXMgPSBmdW5jdGlvbiBldWlDb21ib0JveFBpbGxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcblxuICAvLyBFbnN1cmUgdGhlIGlucHV0IGRvZXNuJ3QgZHJvcCB0byB0aGUgbmV4dCBsaW5lIHdoZW4gdGhlIEV1aUJhZGdlIGhhcyBhIHZlcnkgbG9uZyB0ZXh0XG4gIHZhciBwaWxsTWF4V2lkdGggPSBcImNhbGMoMTAwJSAtIFwiLmNvbmNhdChldWlUaGVtZS5zaXplLnh4cywgXCIgLSBcIikuY29uY2F0KGV1aVRoZW1lLnNpemUuYmFzZSwgXCIpXCIpO1xuICB2YXIgcGlsbEhlaWdodCA9IG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuc2l6ZS5sLCBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB4IC0gMjtcbiAgfSk7XG4gIHZhciBwaWxsTGluZUhlaWdodCA9IG1hdGhXaXRoVW5pdHMocGlsbEhlaWdodCwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4geCAtIDI7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGV1aUNvbWJvQm94UGlsbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBwaWxsTWF4V2lkdGgpLCBcIiBcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgcGlsbEhlaWdodCksIFwiIGxpbmUtaGVpZ2h0OlwiLCBwaWxsTGluZUhlaWdodCwgXCI7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi12ZXJ0aWNhbCcsICcxcHgnKSwgXCImKy5ldWlCYWRnZXtcIiwgbG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCAwKSwgXCI7fS5ldWlCYWRnZV9fdGV4dHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyOy5ldWlJY29ue2Rpc3BsYXk6YmxvY2s7fX07bGFiZWw6ZXVpQ29tYm9Cb3hQaWxsO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aUZvcm1Db250cm9sU3R5bGVzLCBldWlGb3JtQ29udHJvbERlZmF1bHRTaGFkb3csIGV1aUZvcm1Db250cm9sVGV4dCB9IGZyb20gJy4uLy4uL2Zvcm0vZm9ybS5zdHlsZXMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwia2VkdTFoLXBsYWluVGV4dFwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6Y2VudGVyO2N1cnNvcjp0ZXh0O2xhYmVsOnBsYWluVGV4dDtcIlxufSA6IHtcbiAgbmFtZTogXCJrZWR1MWgtcGxhaW5UZXh0XCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpjZW50ZXI7Y3Vyc29yOnRleHQ7bGFiZWw6cGxhaW5UZXh0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiZGt6cjFnLW11bHRpU2VsZWN0XCIsXG4gIHN0eWxlczogXCJmbGV4LXdyYXA6d3JhcDtsYWJlbDptdWx0aVNlbGVjdDtcIlxufSA6IHtcbiAgbmFtZTogXCJka3pyMWctbXVsdGlTZWxlY3RcIixcbiAgc3R5bGVzOiBcImZsZXgtd3JhcDp3cmFwO2xhYmVsOm11bHRpU2VsZWN0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUNvbWJvQm94SW5wdXRTdHlsZXMgPSBmdW5jdGlvbiBldWlDb21ib0JveElucHV0U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBmb3JtU3R5bGVzID0gZXVpRm9ybUNvbnRyb2xTdHlsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIHtcbiAgICAvLyBXcmFwcGVyIHdoaWNoIHZpc3VhbGx5IG1pbWljcyBhIGZvcm0gY29udHJvbFxuICAgIGV1aUNvbWJvQm94SW5wdXRXcmFwcGVyOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvcm1Db250cm9sRGVmYXVsdFNoYWRvdyhldWlUaGVtZUNvbnRleHQpLCBcIiBkaXNwbGF5OmZsZXg7O2xhYmVsOmV1aUNvbWJvQm94SW5wdXRXcmFwcGVyO1wiKSxcbiAgICBtdWx0aVNlbGVjdDogX3JlZjIsXG4gICAgdW5jb21wcmVzc2VkOiBcIlxcbiAgICAgIFwiLmNvbmNhdChmb3JtU3R5bGVzLnVuY29tcHJlc3NlZCwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsICdhdXRvJyksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLXZlcnRpY2FsJywgZXVpVGhlbWUuc2l6ZS5zKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIGV1aVRoZW1lLnNpemUucyksIFwiXFxuICAgICAgY29sdW1uLWdhcDogXCIpLmNvbmNhdChldWlUaGVtZS5zaXplLnMsIFwiO1xcbiAgICAgIHJvdy1nYXA6IFwiKS5jb25jYXQoZXVpVGhlbWUuc2l6ZS54cywgXCI7XFxuICAgIFwiKSxcbiAgICBjb21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKGZvcm1TdHlsZXMuY29tcHJlc3NlZCwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsICdhdXRvJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLXZlcnRpY2FsJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgY29sdW1uLWdhcDpcIiwgZXVpVGhlbWUuc2l6ZS54cywgXCI7cm93LWdhcDpcIiwgZXVpVGhlbWUuc2l6ZS54eHMsIFwiOztsYWJlbDpjb21wcmVzc2VkO1wiKSxcbiAgICBwbGFpblRleHQ6IHtcbiAgICAgIHBsYWluVGV4dDogX3JlZixcbiAgICAgIGNvbXByZXNzZWQ6IFwiXFxuICAgICAgICBcIi5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgZXVpVGhlbWUuc2l6ZS5zKSwgXCJcXG4gICAgICBcIiksXG4gICAgICB1bmNvbXByZXNzZWQ6IFwiXFxuICAgICAgICBcIi5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgZXVpVGhlbWUuc2l6ZS5tKSwgXCJcXG4gICAgICBcIilcbiAgICB9LFxuICAgIGludmFsaWQ6IC8qI19fUFVSRV9fKi9jc3MoZm9ybVN0eWxlcy5pbnZhbGlkLCBcIjtsYWJlbDppbnZhbGlkO1wiKSxcbiAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2Nzcyhmb3JtU3R5bGVzLmRpc2FibGVkLCBcIjtsYWJlbDpkaXNhYmxlZDtcIiksXG4gICAgb3BlbjogLyojX19QVVJFX18qL2Nzcyhmb3JtU3R5bGVzLmZvY3VzLCBcIjtsYWJlbDpvcGVuO1wiKSxcbiAgICBpbkdyb3VwOiAvKiNfX1BVUkVfXyovY3NzKGZvcm1TdHlsZXMuaW5Hcm91cCwgXCI7bGFiZWw6aW5Hcm91cDtcIiksXG4gICAgLy8gQWN0dWFsIGlucHV0IGVsZW1lbnQsIHdoaWNoIGhhcyB2YXJpYWJsZSB3aWR0aCBkZXBlbmRpbmcgb24gaXRzIHZhbHVlXG4gICAgZXVpQ29tYm9Cb3hJbnB1dDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdoZWlnaHQnLCBldWlUaGVtZS5zaXplLmwpLCBcIiBcIiwgbG9naWNhbENTUygnbWluLXdpZHRoJywgJzJweCcpLCBcIiBcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgZXVpRm9ybUNvbnRyb2xUZXh0KGV1aVRoZW1lQ29udGV4dCksIFwiIGJhY2tncm91bmQ6dHJhbnNwYXJlbnQ7JjpkaXNhYmxlZHtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkVGV4dCwgXCI7fWFwcGVhcmFuY2U6bm9uZSFpbXBvcnRhbnQ7Ym9yZGVyOm5vbmUhaW1wb3J0YW50O2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnQ7b3V0bGluZTpub25lIWltcG9ydGFudDs7bGFiZWw6ZXVpQ29tYm9Cb3hJbnB1dDtcIiksXG4gICAgLy8gRXVpRm9ybUNvbnRyb2xMYXlvdXQgb3ZlcnJpZGVzXG4gICAgZm9ybUxheW91dDoge1xuICAgICAgZXVpQ29tYm9Cb3hfX2Zvcm1Db250cm9sTGF5b3V0OiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmV1aUNvbWJvQm94X19mb3JtQ29udHJvbExheW91dDtcIiksXG4gICAgICAvLyBBbGxvdyB0aGUgZm9ybSBjb250cm9sIHRvIGV4cGFuZCB0byBhbnkgaGVpZ2h0IHRvIGFjY29tbW9kYXRlIG11bHRpcGxlIHJvd3Mgb2YgcGlsbHNcbiAgICAgIG11bHRpU2VsZWN0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2hlaWdodCcsICdhdXRvJyksIFwiOztsYWJlbDptdWx0aVNlbGVjdDtcIilcbiAgICB9XG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJrZXlcIiwgXCJpc0dyb3VwTGFiZWxPcHRpb25cIiwgXCJsYWJlbFwiLCBcInZhbHVlXCIsIFwicHJlcGVuZFwiLCBcImFwcGVuZFwiLCBcInRydW5jYXRpb25Qcm9wc1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcImRhdGEtdGVzdC1zdWJqXCIsIFwiYWN0aXZlT3B0aW9uSW5kZXhcIiwgXCJhcmVBbGxPcHRpb25zU2VsZWN0ZWRcIiwgXCJjdXN0b21PcHRpb25UZXh0XCIsIFwiZnVsbFdpZHRoXCIsIFwiZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZVwiLCBcImlzQ2FzZVNlbnNpdGl2ZVwiLCBcImlzTG9hZGluZ1wiLCBcImxpc3RSZWZcIiwgXCJtYXRjaGluZ09wdGlvbnNcIiwgXCJvbkNsb3NlTGlzdFwiLCBcIm9uQ3JlYXRlT3B0aW9uXCIsIFwib25PcHRpb25DbGlja1wiLCBcIm9uT3B0aW9uRW50ZXJLZXlcIiwgXCJvblNjcm9sbFwiLCBcIm9wdGlvbnNcIiwgXCJyZW5kZXJPcHRpb25cIiwgXCJyb290SWRcIiwgXCJyb3dIZWlnaHRcIiwgXCJzY3JvbGxUb0luZGV4XCIsIFwic2VhcmNoVmFsdWVcIiwgXCJzZWxlY3RlZE9wdGlvbnNcIiwgXCJzaW5nbGVTZWxlY3Rpb25cIiwgXCJkZWxpbWl0ZXJcIiwgXCJ0cnVuY2F0aW9uUHJvcHNcIiwgXCJsaXN0Ym94QXJpYUxhYmVsXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBGaXhlZFNpemVMaXN0IH0gZnJvbSAncmVhY3Qtd2luZG93JztcbmltcG9ydCB7IFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0gfSBmcm9tICcuLi8uLi9mbGV4JztcbmltcG9ydCB7IEV1aUhpZ2hsaWdodCB9IGZyb20gJy4uLy4uL2hpZ2hsaWdodCc7XG5pbXBvcnQgeyBFdWlNYXJrIH0gZnJvbSAnLi4vLi4vbWFyayc7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vLi4vdGV4dCc7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uLy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpRmlsdGVyU2VsZWN0SXRlbSB9IGZyb20gJy4uLy4uL2ZpbHRlcl9ncm91cC9maWx0ZXJfc2VsZWN0X2l0ZW0nO1xuaW1wb3J0IHsgRXVpQmFkZ2UgfSBmcm9tICcuLi8uLi9iYWRnZSc7XG5pbXBvcnQgeyBFdWlUZXh0VHJ1bmNhdGUgfSBmcm9tICcuLi8uLi90ZXh0X3RydW5jYXRlJztcbmltcG9ydCB7IEV1aUlucHV0UG9wb3ZlcldpZHRoQ29udGV4dCB9IGZyb20gJy4uLy4uL3BvcG92ZXIvaW5wdXRfcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBFdWlDb21ib0JveFRpdGxlIH0gZnJvbSAnLi9jb21ib19ib3hfdGl0bGUnO1xuaW1wb3J0IHsgZXVpQ29tYm9Cb3hPcHRpb25MaXN0U3R5bGVzLCBMSVNUX01BWF9IRUlHSFQgfSBmcm9tICcuL2NvbWJvX2JveF9vcHRpb25zX2xpc3Quc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaGl0RW50ZXJCYWRnZSA9IF9fX0Vtb3Rpb25KU1goRXVpQmFkZ2UsIHtcbiAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19lbnRlckJhZGdlXCIsXG4gIGNvbG9yOiBcImhvbGxvd1wiLFxuICBpY29uVHlwZTogXCJyZXR1cm5LZXlcIixcbiAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIlxufSk7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94T3B0aW9uc0xpc3QgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCgpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94T3B0aW9uc0xpc3QpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImxpc3RSZWZcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNldExpc3RSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMubGlzdFJlZiA9IHJlZjtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiTGlzdElubmVyRWxlbWVudFwiLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF90aGlzLnByb3BzLmxpc3Rib3hBcmlhTGFiZWwsXG4gICAgICAgIGlkOiBfdGhpcy5wcm9wcy5yb290SWQoJ2xpc3Rib3gnKSxcbiAgICAgICAgcm9sZTogXCJsaXN0Ym94XCIsXG4gICAgICAgIHRhYkluZGV4OiBcIjBcIlxuICAgICAgfSksIGNoaWxkcmVuKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiTGlzdFJvd1wiLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciBfb3B0aW9uJGtleTtcbiAgICAgIHZhciBkYXRhID0gX3JlZjIuZGF0YSxcbiAgICAgICAgaW5kZXggPSBfcmVmMi5pbmRleCxcbiAgICAgICAgc3R5bGUgPSBfcmVmMi5zdHlsZTtcbiAgICAgIHZhciBvcHRpb24gPSBkYXRhW2luZGV4XTtcbiAgICAgIHZhciBrZXkgPSBvcHRpb24ua2V5LFxuICAgICAgICBpc0dyb3VwTGFiZWxPcHRpb24gPSBvcHRpb24uaXNHcm91cExhYmVsT3B0aW9uLFxuICAgICAgICBsYWJlbCA9IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgdmFsdWUgPSBvcHRpb24udmFsdWUsXG4gICAgICAgIHByZXBlbmQgPSBvcHRpb24ucHJlcGVuZCxcbiAgICAgICAgYXBwZW5kID0gb3B0aW9uLmFwcGVuZCxcbiAgICAgICAgX3RydW5jYXRpb25Qcm9wcyA9IG9wdGlvbi50cnVuY2F0aW9uUHJvcHMsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9uLCBfZXhjbHVkZWQyKTtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzLm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzLnJlbmRlck9wdGlvbixcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wcy5zZWFyY2hWYWx1ZSxcbiAgICAgICAgcm9vdElkID0gX3RoaXMkcHJvcHMucm9vdElkO1xuICAgICAgdmFyIGhhc1RydW5jYXRpb25Qcm9wcyA9IF90aGlzLnByb3BzLnRydW5jYXRpb25Qcm9wcyB8fCBfdHJ1bmNhdGlvblByb3BzO1xuICAgICAgdmFyIHRydW5jYXRpb25Qcm9wcyA9IGhhc1RydW5jYXRpb25Qcm9wcyA/IC8vIEluZGl2aWR1YWwgdHJ1bmNhdGlvbiBzZXR0aW5ncyBzaG91bGQgb3ZlcnJpZGUgY29tcG9uZW50IHByb3BcbiAgICAgIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgX3RoaXMucHJvcHMudHJ1bmNhdGlvblByb3BzKSwgX3RydW5jYXRpb25Qcm9wcykgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoaXNHcm91cExhYmVsT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBrZXk6IGtleSAhPT0gbnVsbCAmJiBrZXkgIT09IHZvaWQgMCA/IGtleSA6IGxhYmVsLFxuICAgICAgICAgIHN0eWxlOiBzdHlsZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94VGl0bGUsIG51bGwsIHByZXBlbmQsIGxhYmVsLCBhcHBlbmQpKTtcbiAgICAgIH1cbiAgICAgIHZhciBjaGVja2VkID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbiAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoICYmIHNlbGVjdGVkT3B0aW9uc1swXS5sYWJlbCA9PT0gbGFiZWwgJiYgc2VsZWN0ZWRPcHRpb25zWzBdLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGNoZWNrZWQgPSAnb24nO1xuICAgICAgfVxuICAgICAgdmFyIG9wdGlvbklzRm9jdXNlZCA9IGFjdGl2ZU9wdGlvbkluZGV4ID09PSBpbmRleDtcbiAgICAgIHZhciBvcHRpb25Jc0Rpc2FibGVkID0gb3B0aW9uLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpICYmIG9wdGlvbi5kaXNhYmxlZCA9PT0gdHJ1ZTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZpbHRlclNlbGVjdEl0ZW0sIF9leHRlbmRzKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBrZXk6IChfb3B0aW9uJGtleSA9IG9wdGlvbi5rZXkpICE9PSBudWxsICYmIF9vcHRpb24ka2V5ICE9PSB2b2lkIDAgPyBfb3B0aW9uJGtleSA6IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICBpZiAob25PcHRpb25DbGljaykge1xuICAgICAgICAgICAgb25PcHRpb25DbGljayhvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaXNGb2N1c2VkOiBvcHRpb25Jc0ZvY3VzZWQsXG4gICAgICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgICAgIHNob3dJY29uczogc2luZ2xlU2VsZWN0aW9uID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICBpZDogcm9vdElkKFwiX29wdGlvbi1cIi5jb25jYXQoaW5kZXgpKSxcbiAgICAgICAgdGl0bGU6IGxhYmVsXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2NvbnRlbnRXcmFwcGVyXCJcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hPcHRpb25BcHBlbmRQcmVwZW5kLCB7XG4gICAgICAgIG9wdGlvbjogb3B0aW9uLFxuICAgICAgICBjbGFzc05hbWVQcmVmaXg6IFwiZXVpQ29tYm9Cb3hPcHRpb25cIixcbiAgICAgICAgbWFyZ2luU2l6ZTogXCJzXCJcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19jb250ZW50XCJcbiAgICAgIH0sIHJlbmRlck9wdGlvbiA/IHJlbmRlck9wdGlvbihvcHRpb24sIHNlYXJjaFZhbHVlLCAnZXVpQ29tYm9Cb3hPcHRpb25fX3JlbmRlck9wdGlvbicpIDogX3RoaXMucmVuZGVyVHJ1bmNhdGVkT3B0aW9uKGxhYmVsLCB0cnVuY2F0aW9uUHJvcHMpKSksIG9wdGlvbklzRm9jdXNlZCAmJiAhb3B0aW9uSXNEaXNhYmxlZCA/IGhpdEVudGVyQmFkZ2UgOiBudWxsKSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9wdGlvbldpZHRoXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNldE9wdGlvbldpZHRoXCIsIGZ1bmN0aW9uICh3aWR0aCkge1xuICAgICAgX3RoaXMub3B0aW9uV2lkdGggPSB3aWR0aDtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVuZGVyVHJ1bmNhdGVkT3B0aW9uXCIsIGZ1bmN0aW9uICh0ZXh0LCB0cnVuY2F0aW9uUHJvcHMpIHtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IF90aGlzLnByb3BzLnNlYXJjaFZhbHVlLnRyaW0oKTtcbiAgICAgIGlmICghdHJ1bmNhdGlvblByb3BzICYmICFzZWFyY2hWYWx1ZSkge1xuICAgICAgICAvLyBEZWZhdWx0IHRvIENTUyB0ZXh0LW92ZXJmbG93XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgfVxuICAgICAgaWYgKCFzZWFyY2hWYWx1ZSkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUZXh0VHJ1bmNhdGUsIF9leHRlbmRzKHtcbiAgICAgICAgICB3aWR0aDogX3RoaXMub3B0aW9uV2lkdGgsXG4gICAgICAgICAgb25SZXNpemU6IF90aGlzLnNldE9wdGlvbldpZHRoXG4gICAgICAgIH0sIHRydW5jYXRpb25Qcm9wcywge1xuICAgICAgICAgIHRleHQ6IHRleHRcbiAgICAgICAgfSksIGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdmFyIHNlYXJjaFBvc2l0aW9uU3RhcnQgPSBfdGhpcy5wcm9wcy5pc0Nhc2VTZW5zaXRpdmUgPyB0ZXh0LmluZGV4T2Yoc2VhcmNoVmFsdWUpIDogdGV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICB2YXIgc2VhcmNoUG9zaXRpb25DZW50ZXIgPSBzZWFyY2hQb3NpdGlvblN0YXJ0ICsgTWF0aC5mbG9vcihzZWFyY2hWYWx1ZS5sZW5ndGggLyAyKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRleHRUcnVuY2F0ZSwgX2V4dGVuZHMoe1xuICAgICAgICB3aWR0aDogX3RoaXMub3B0aW9uV2lkdGgsXG4gICAgICAgIG9uUmVzaXplOiBfdGhpcy5zZXRPcHRpb25XaWR0aFxuICAgICAgfSwgdHJ1bmNhdGlvblByb3BzLCB7XG4gICAgICAgIC8vIFdoZW4gc2VhcmNoaW5nLCBkb24ndCBhbGxvdyBvdmVycmlkaW5nIHRoZSB0cnVuY2F0aW9uIHNldHRpbmdzXG4gICAgICAgIHRydW5jYXRpb246IFwic3RhcnRFbmRcIixcbiAgICAgICAgdHJ1bmNhdGlvblBvc2l0aW9uOiBzZWFyY2hQb3NpdGlvbkNlbnRlcixcbiAgICAgICAgdGV4dDogdGV4dFxuICAgICAgfSksIGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCB0ZXh0Lmxlbmd0aCA+PSBzZWFyY2hWYWx1ZS5sZW5ndGggPyBfX19FbW90aW9uSlNYKEV1aUhpZ2hsaWdodCwge1xuICAgICAgICAgIHNlYXJjaDogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc3RyaWN0OiBfdGhpcy5wcm9wcy5pc0Nhc2VTZW5zaXRpdmVcbiAgICAgICAgfSwgdGV4dCkgOlxuICAgICAgICAvLyBJZiB0aGUgYXZhaWxhYmxlIHRydW5jYXRlZCB0ZXh0IGlzIHNob3J0ZXIgdGhhbiB0aGUgZnVsbCBzZWFyY2ggc3RyaW5nLFxuICAgICAgICAvLyBqdXN0IGhpZ2hsaWdodCB0aGUgZW50aXJlIHRydW5jYXRlZCB0ZXh0XG4gICAgICAgIF9fX0Vtb3Rpb25KU1goRXVpTWFyaywgbnVsbCwgdGV4dCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlDb21ib0JveE9wdGlvbnNMaXN0LCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveE9wdGlvbnNMaXN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKHRoaXMubGlzdFJlZiAmJiB0eXBlb2YgdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCAhPT0gcHJldlByb3BzLmFjdGl2ZU9wdGlvbkluZGV4KSB7XG4gICAgICAgIHRoaXMubGlzdFJlZi5zY3JvbGxUb0l0ZW0odGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCwgJ2F1dG8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGRhdGFUZXN0U3ViaiA9IF90aGlzJHByb3BzMlsnZGF0YS10ZXN0LXN1YmonXSxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczIuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIGFyZUFsbE9wdGlvbnNTZWxlY3RlZCA9IF90aGlzJHByb3BzMi5hcmVBbGxPcHRpb25zU2VsZWN0ZWQsXG4gICAgICAgIGN1c3RvbU9wdGlvblRleHQgPSBfdGhpcyRwcm9wczIuY3VzdG9tT3B0aW9uVGV4dCxcbiAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMyLmZ1bGxXaWR0aCxcbiAgICAgICAgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzMi5nZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlLFxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmUgPSBfdGhpcyRwcm9wczIuaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczIuaXNMb2FkaW5nLFxuICAgICAgICBsaXN0UmVmID0gX3RoaXMkcHJvcHMyLmxpc3RSZWYsXG4gICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IF90aGlzJHByb3BzMi5tYXRjaGluZ09wdGlvbnMsXG4gICAgICAgIG9uQ2xvc2VMaXN0ID0gX3RoaXMkcHJvcHMyLm9uQ2xvc2VMaXN0LFxuICAgICAgICBvbkNyZWF0ZU9wdGlvbiA9IF90aGlzJHByb3BzMi5vbkNyZWF0ZU9wdGlvbixcbiAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzMi5vbk9wdGlvbkNsaWNrLFxuICAgICAgICBvbk9wdGlvbkVudGVyS2V5ID0gX3RoaXMkcHJvcHMyLm9uT3B0aW9uRW50ZXJLZXksXG4gICAgICAgIG9uU2Nyb2xsID0gX3RoaXMkcHJvcHMyLm9uU2Nyb2xsLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMyLm9wdGlvbnMsXG4gICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzMi5yZW5kZXJPcHRpb24sXG4gICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzMi5yb290SWQsXG4gICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzMi5yb3dIZWlnaHQsXG4gICAgICAgIHNjcm9sbFRvSW5kZXggPSBfdGhpcyRwcm9wczIuc2Nyb2xsVG9JbmRleCxcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuc2VhcmNoVmFsdWUsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMi5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzMi5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIGRlbGltaXRlciA9IF90aGlzJHByb3BzMi5kZWxpbWl0ZXIsXG4gICAgICAgIHRydW5jYXRpb25Qcm9wcyA9IF90aGlzJHByb3BzMi50cnVuY2F0aW9uUHJvcHMsXG4gICAgICAgIGxpc3Rib3hBcmlhTGFiZWwgPSBfdGhpcyRwcm9wczIubGlzdGJveEFyaWFMYWJlbCxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZDMpO1xuICAgICAgdmFyIGVtcHR5U3RhdGVDb250ZW50O1xuICAgICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgICAgICAgZ3V0dGVyU2l6ZTogXCJzXCIsXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgcmVzcG9uc2l2ZTogZmFsc2VcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgICAgICAgIGdyb3c6IGZhbHNlXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpTG9hZGluZ1NwaW5uZXIsIHtcbiAgICAgICAgICBzaXplOiBcIm1cIlxuICAgICAgICB9KSksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgICBncm93OiBmYWxzZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmxvYWRpbmdPcHRpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJMb2FkaW5nIG9wdGlvbnNcIlxuICAgICAgICB9KSkpO1xuICAgICAgfSBlbHNlIGlmIChzZWFyY2hWYWx1ZSAmJiBtYXRjaGluZ09wdGlvbnMgJiYgbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAob25DcmVhdGVPcHRpb24gJiYgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSkge1xuICAgICAgICAgIGlmIChkZWxpbWl0ZXIgJiYgc2VhcmNoVmFsdWUuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19jb250ZW50V3JhcHBlclwiXG4gICAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3QuZGVsaW1pdGVyTWVzc2FnZVwiLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBcIkFkZCBlYWNoIGl0ZW0gc2VwYXJhdGVkIGJ5IHtkZWxpbWl0ZXJ9XCIsXG4gICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgIGRlbGltaXRlcjogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBkZWxpbWl0ZXIpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKSwgaGl0RW50ZXJCYWRnZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZE9wdGlvbkZvclZhbHVlID0gZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSh7XG4gICAgICAgICAgICAgIGlzQ2FzZVNlbnNpdGl2ZTogaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbkZvclZhbHVlKSB7XG4gICAgICAgICAgICAgIC8vIERpc2FsbG93IGR1cGxpY2F0ZSBjdXN0b20gb3B0aW9ucy5cbiAgICAgICAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmFscmVhZHlBZGRlZFwiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwie2xhYmVsfSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkXCIsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWxlY3RlZE9wdGlvbkZvclZhbHVlLmxhYmVsKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGhpZ2hsaWdodFNlYXJjaFZhbHVlID0gZnVuY3Rpb24gaGlnaGxpZ2h0U2VhcmNoVmFsdWUodGV4dCwgc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgvKFxce3NlYXJjaFZhbHVlfSkvLCAnZ2knKTtcbiAgICAgICAgICAgICAgICB2YXIgcGFydHMgPSB0ZXh0LnNwbGl0KHJlZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgICAgICAgIH0sIHBhcnRzLm1hcChmdW5jdGlvbiAocGFydCwgaWR4KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGFydC5tYXRjaChyZWcpID8gX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaWR4XG4gICAgICAgICAgICAgICAgICB9LCBzZWFyY2hWYWx1ZSkgOiBwYXJ0O1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2NvbnRlbnRXcmFwcGVyXCJcbiAgICAgICAgICAgICAgfSwgY3VzdG9tT3B0aW9uVGV4dCA/IGhpZ2hsaWdodFNlYXJjaFZhbHVlKGN1c3RvbU9wdGlvblRleHQsIHNlYXJjaFZhbHVlKSA6IF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2VtcHR5U3RhdGVUZXh0XCJcbiAgICAgICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5jcmVhdGVDdXN0b21PcHRpb25cIixcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBcIkFkZCB7c2VhcmNoVmFsdWV9IGFzIGEgY3VzdG9tIG9wdGlvblwiLFxuICAgICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgICAgc2VhcmNoVmFsdWU6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgc2VhcmNoVmFsdWUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSksIGhpdEVudGVyQmFkZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5ub01hdGNoaW5nT3B0aW9uc1wiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJ7c2VhcmNoVmFsdWV9IGRvZXNuJ3QgbWF0Y2ggYW55IG9wdGlvbnNcIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWFyY2hWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5ub0F2YWlsYWJsZU9wdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRoZXJlIGFyZW4ndCBhbnkgb3B0aW9ucyBhdmFpbGFibGVcIlxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2UgaWYgKGFyZUFsbE9wdGlvbnNTZWxlY3RlZCkge1xuICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3QuYWxsT3B0aW9uc1NlbGVjdGVkXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJZb3UndmUgc2VsZWN0ZWQgYWxsIGF2YWlsYWJsZSBvcHRpb25zXCJcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgdmFyIG51bVZpc2libGVPcHRpb25zID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCA8IDcgPyBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIDogNztcbiAgICAgIHZhciBoZWlnaHQgPSBudW1WaXNpYmxlT3B0aW9ucyAqIChyb3dIZWlnaHQgKyAxKTsgLy8gQWRkIG9uZSBmb3IgdGhlIGJvcmRlclxuXG4gICAgICAvLyBib3VuZGVkIGJ5IG1heC1oZWlnaHQgb2YgLmV1aUNvbWJvQm94T3B0aW9uc0xpc3RcbiAgICAgIHZhciBib3VuZGVkSGVpZ2h0ID0gaGVpZ2h0ID4gTElTVF9NQVhfSEVJR0hUID8gTElTVF9NQVhfSEVJR0hUIDogaGVpZ2h0O1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyLCBudWxsLCBmdW5jdGlvbiAoc3R5bGVzTWVtb2l6ZXIpIHtcbiAgICAgICAgdmFyIHN0eWxlcyA9IHN0eWxlc01lbW9pemVyKGV1aUNvbWJvQm94T3B0aW9uTGlzdFN0eWxlcyk7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjc3M6IHN0eWxlcy5ldWlDb21ib0JveE9wdGlvbkxpc3QsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3RcIixcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGNsYXNzTmFtZXMoJ2NvbWJvQm94T3B0aW9uc0xpc3QnLCBkYXRhVGVzdFN1YmopLFxuICAgICAgICAgIHJlZjogbGlzdFJlZlxuICAgICAgICB9LCByZXN0KSwgZW1wdHlTdGF0ZUNvbnRlbnQgPyBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICAgICAgICBzaXplOiBcInhzXCIsXG4gICAgICAgICAgY3NzOiBzdHlsZXMuZXVpQ29tYm9Cb3hPcHRpb25zTGlzdF9fZW1wdHksXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX2VtcHR5XCJcbiAgICAgICAgfSwgZW1wdHlTdGF0ZUNvbnRlbnQpIDogX19fRW1vdGlvbkpTWChGaXhlZFNpemVMaXN0LCB7XG4gICAgICAgICAgY3NzOiBzdHlsZXMuZXVpQ29tYm9Cb3hPcHRpb25MaXN0X192aXJ0dWFsaXphdGlvbixcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdF9fdmlydHVhbGl6YXRpb25cIixcbiAgICAgICAgICBoZWlnaHQ6IGJvdW5kZWRIZWlnaHQsXG4gICAgICAgICAgb25TY3JvbGw6IG9uU2Nyb2xsLFxuICAgICAgICAgIGl0ZW1Db3VudDogbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCxcbiAgICAgICAgICBpdGVtU2l6ZTogcm93SGVpZ2h0LFxuICAgICAgICAgIGl0ZW1EYXRhOiBtYXRjaGluZ09wdGlvbnMsXG4gICAgICAgICAgcmVmOiBfdGhpczIuc2V0TGlzdFJlZixcbiAgICAgICAgICBpbm5lckVsZW1lbnRUeXBlOiBfdGhpczIuTGlzdElubmVyRWxlbWVudCxcbiAgICAgICAgICB3aWR0aDogX3RoaXMyLmNvbnRleHRcbiAgICAgICAgfSwgX3RoaXMyLkxpc3RSb3cpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIFwiY29udGV4dFR5cGVcIiwgRXVpSW5wdXRQb3BvdmVyV2lkdGhDb250ZXh0KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlDb21ib0JveE9wdGlvbnNMaXN0LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gICdkYXRhLXRlc3Qtc3Viaic6ICcnLFxuICByb3dIZWlnaHQ6IDI5LFxuICAvLyByb3cgaGVpZ2h0IG9mIGRlZmF1bHQgb3B0aW9uIHJlbmRlcmVyXG4gIGlzQ2FzZVNlbnNpdGl2ZTogZmFsc2Vcbn0pO1xuRXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBhY3RpdmVPcHRpb25JbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgYXJlQWxsT3B0aW9uc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgbGlzdGJveEFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY3VzdG9tIHRleHQgb3B0aW9uLiBZb3UgY2FuIHVzZSBge3NlYXJjaFZhbHVlfWAgaW5zaWRlIHlvdXIgc3RyaW5nIHRvIGJldHRlciBjdXN0b21pemUgeW91ciB0ZXh0LlxuICAgICAqIEl0IHdvbid0IHNob3cgaWYgdGhlcmUncyBubyBvbkNyZWF0ZU9wdGlvbi5cbiAgICAgKi9cbiAgY3VzdG9tT3B0aW9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGlzQ2FzZVNlbnNpdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGxpc3RSZWY6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgbWF0Y2hpbmdPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgdHJ1bmNhdGlvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgICAgLyoqXG4gICAgICAgICAqIE9wdGlvbmFsIGN1c3RvbSB0b29sdGlwIGNvbnRlbnQgZm9yIHRoZSBidXR0b25cbiAgICAgICAgICovXG4gICAgICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICAvKipcbiAgICAgICAgICogT3B0aW9uYWwgcHJvcHMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyAqKltFdWlUb29sVGlwXSgvIy9kaXNwbGF5L3Rvb2x0aXApKipcbiAgICAgICAgICovXG4gICAgICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGNzczogUHJvcFR5cGVzLmFueVxuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgdHJ1bmNhdGlvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgY3VzdG9tIHRvb2x0aXAgY29udGVudCBmb3IgdGhlIGJ1dHRvblxuICAgICAgICovXG4gICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgcHJvcHMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyAqKltFdWlUb29sVGlwXSgvIy9kaXNwbGF5L3Rvb2x0aXApKipcbiAgICAgICAqL1xuICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuICBvbkNsb3NlTGlzdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DcmVhdGVPcHRpb246IFByb3BUeXBlcy5mdW5jLFxuICBvbk9wdGlvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25PcHRpb25FbnRlcktleTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU2Nyb2xsOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBcnJheSBvZiBFdWlDb21ib0JveE9wdGlvbk9wdGlvbiBvYmplY3RzLiBTZWUgI0V1aUNvbWJvQm94T3B0aW9uT3B0aW9uXG4gICAgICovXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGNzczogUHJvcFR5cGVzLmFueVxuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgdHJ1bmNhdGlvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgcmVuZGVyT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgcm9vdElkOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIHJvd0hlaWdodDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBzY3JvbGxUb0luZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBzZWFyY2hWYWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWxlY3RlZE9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGNzczogUHJvcFR5cGVzLmFueVxuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgdHJ1bmNhdGlvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgc2luZ2xlU2VsZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFzUGxhaW5UZXh0OiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkXSksXG4gIGRlbGltaXRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHJ1bmNhdGlvblByb3BzOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJzZWFyY2hcIiwgXCJzdHJpY3RcIiwgXCJoaWdobGlnaHRBbGxcIiwgXCJoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlNYXJrIH0gZnJvbSAnLi4vbWFyayc7XG5pbXBvcnQgeyBIaWdobGlnaHRBbGwgfSBmcm9tICcuL19oaWdobGlnaHRfYWxsJztcbmltcG9ydCB7IEhpZ2hsaWdodEZpcnN0IH0gZnJvbSAnLi9faGlnaGxpZ2h0X2ZpcnN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUhpZ2hsaWdodCA9IGZ1bmN0aW9uIEV1aUhpZ2hsaWdodChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgc2VhcmNoID0gX3JlZi5zZWFyY2gsXG4gICAgX3JlZiRzdHJpY3QgPSBfcmVmLnN0cmljdCxcbiAgICBzdHJpY3QgPSBfcmVmJHN0cmljdCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHN0cmljdCxcbiAgICBfcmVmJGhpZ2hsaWdodEFsbCA9IF9yZWYuaGlnaGxpZ2h0QWxsLFxuICAgIGhpZ2hsaWdodEFsbCA9IF9yZWYkaGlnaGxpZ2h0QWxsID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaGlnaGxpZ2h0QWxsLFxuICAgIF9yZWYkaGFzU2NyZWVuUmVhZGVySCA9IF9yZWYuaGFzU2NyZWVuUmVhZGVySGVscFRleHQsXG4gICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQgPSBfcmVmJGhhc1NjcmVlblJlYWRlckggPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGhhc1NjcmVlblJlYWRlckgsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaGFzU2VhcmNoID0gc2VhcmNoICYmIHNlYXJjaC5sZW5ndGggPiAwO1xuICB2YXIgSGlnaGxpZ2h0Q29tcG9uZW50ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIENvbXBvbmVudCA9IGZ1bmN0aW9uIENvbXBvbmVudChfcmVmMikge1xuICAgICAgdmFyIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW47XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlNYXJrLCB7XG4gICAgICAgIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0OiBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dFxuICAgICAgfSwgY2hpbGRyZW4pO1xuICAgIH07XG4gICAgQ29tcG9uZW50LnByb3BUeXBlcyA9IHtcbiAgICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbiAgICB9O1xuICAgIENvbXBvbmVudC5kaXNwbGF5TmFtZSA9ICdfSGlnaGxpZ2h0Q29tcG9uZW50JztcbiAgICByZXR1cm4gQ29tcG9uZW50O1xuICB9LCBbaGFzU2NyZWVuUmVhZGVySGVscFRleHRdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCByZXN0KSwgY2hpbGRyZW4gJiYgaGFzU2VhcmNoID8gaGlnaGxpZ2h0QWxsID8gX19fRW1vdGlvbkpTWChIaWdobGlnaHRBbGwsIHtcbiAgICBzZWFyY2hWYWx1ZTogc2VhcmNoLFxuICAgIHNlYXJjaFN1YmplY3Q6IGNoaWxkcmVuLFxuICAgIGlzU3RyaWN0OiBzdHJpY3QsXG4gICAgaGlnaGxpZ2h0Q29tcG9uZW50OiBIaWdobGlnaHRDb21wb25lbnRcbiAgfSkgOiBfX19FbW90aW9uSlNYKEhpZ2hsaWdodEZpcnN0LCB7XG4gICAgc2VhcmNoVmFsdWU6IHNlYXJjaCxcbiAgICBzZWFyY2hTdWJqZWN0OiBjaGlsZHJlbixcbiAgICBpc1N0cmljdDogc3RyaWN0LFxuICAgIGhpZ2hsaWdodENvbXBvbmVudDogSGlnaGxpZ2h0Q29tcG9uZW50XG4gIH0pIDogY2hpbGRyZW4pO1xufTtcbkV1aUhpZ2hsaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIHN0cmluZyB0byBoaWdobGlnaHQgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICAgKiBXaGF0IHRvIHNlYXJjaCBmb3IuXG4gICAgICAgKlxuICAgICAgICogQWxsb3dzIHBhc3NpbmcgYW4gYXJyYXkgb2Ygc3RyaW5ncyAoc2VhcmNoaW5nIGJ5IG11bHRpcGxlIHNlcGFyYXRlXG4gICAgICAgKiB3b3JkcyBvciBwaHJhc2VzKSAqKm9ubHkqKiBpZiBgaGlnaGxpZ2h0QWxsYCBpcyBhbHNvIHNldCB0byBgdHJ1ZWAuXG4gICAgICAgKi9cbiAgc2VhcmNoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAgICogU2hvdWxkIHRoZSBzZWFyY2ggYmUgc3RyaWN0IG9yIG5vdFxuICAgICAgICovXG4gIHN0cmljdDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogU2hvdWxkIGhpZ2hsaWdodCBhbGwgbWF0Y2hlc1xuICAgICAgICovXG4gIGhpZ2hsaWdodEFsbDogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImhhc1NjcmVlblJlYWRlckhlbHBUZXh0XCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlNYXJrU3R5bGVzLCBldWlNYXJrU2NyZWVuUmVhZGVyU3R5bGVzIH0gZnJvbSAnLi9tYXJrLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlNYXJrID0gZnVuY3Rpb24gRXVpTWFyayhfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRoYXNTY3JlZW5SZWFkZXJIID0gX3JlZi5oYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCxcbiAgICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCA9IF9yZWYkaGFzU2NyZWVuUmVhZGVySCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkaGFzU2NyZWVuUmVhZGVySCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpTWFyaycsIGNsYXNzTmFtZSk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlNYXJrU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGhpZ2hsaWdodFN0YXJ0ID0gdXNlRXVpSTE4bignZXVpTWFyay5oaWdobGlnaHRTdGFydCcsICdoaWdobGlnaHQgc3RhcnQnKTtcbiAgdmFyIGhpZ2hsaWdodEVuZCA9IHVzZUV1aUkxOG4oJ2V1aU1hcmsuaGlnaGxpZ2h0RW5kJywgJ2hpZ2hsaWdodCBlbmQnKTtcbiAgdmFyIHNjcmVlblJlYWRlclN0eWxlcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBldWlNYXJrU2NyZWVuUmVhZGVyU3R5bGVzKGhpZ2hsaWdodFN0YXJ0LCBoaWdobGlnaHRFbmQpO1xuICB9LCBbaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVuZF0pO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlNYXJrLCBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCAmJiBzY3JlZW5SZWFkZXJTdHlsZXMuaGFzU2NyZWVuUmVhZGVySGVscFRleHRdO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcIm1hcmtcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aU1hcmsucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byByZW1vdmUgdGhlIENTUyA6YmVmb3JlIGFuZCA6YWZ0ZXJcbiAgICAgICAqIHNjcmVlbiByZWFkZXIgaGVscGVyIHRleHRcbiAgICAgICAqL1xuICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5leHBvcnQgdmFyIGV1aU1hcmtTdHlsZXMgPSBmdW5jdGlvbiBldWlNYXJrU3R5bGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZTtcbiAgLy8gVE9ETzogV2FzICRldWlGb2N1c0JhY2tncm91bmRDb2xvclxuICB2YXIgdHJhbnNwYXJlbmN5ID0ge1xuICAgIExJR0hUOiAwLjEsXG4gICAgREFSSzogMC4zXG4gIH07XG4gIHJldHVybiB7XG4gICAgZXVpTWFyazogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCB0cmFuc3BhcmVuY3lbY29sb3JNb2RlXSksIFwiO2ZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5ib2xkLCBcIjtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiOztsYWJlbDpldWlNYXJrO1wiKVxuICB9O1xufTtcbmV4cG9ydCB2YXIgZXVpTWFya1NjcmVlblJlYWRlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aU1hcmtTY3JlZW5SZWFkZXJTdHlsZXMoaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVuZCkge1xuICByZXR1cm4ge1xuICAgIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0OiAvKiNfX1BVUkVfXyovY3NzKFwiJjo6YmVmb3JlLCY6OmFmdGVye1wiLCBldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO30mOjpiZWZvcmV7Y29udGVudDonIFtcIiwgaGlnaGxpZ2h0U3RhcnQsIFwiXSAnO30mOjphZnRlcntjb250ZW50OicgW1wiLCBoaWdobGlnaHRFbmQsIFwiXSAnO307bGFiZWw6aGFzU2NyZWVuUmVhZGVySGVscFRleHQ7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgZXNjYXBlUmVnRXhwIGZyb20gJ2xvZGFzaC9lc2NhcGVSZWdFeHAnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbi8qKlxuICogSW50ZXJuYWwgc3ViY29tcG9uZW50IHdpdGggbG9naWMgZm9yIGhpZ2hsaWdodGluZyBhbGwgb2NjdXJyZW5jZXNcbiAqIG9mIGEgc2VhcmNoIHZhbHVlIHdpdGhpbiBhIHN1YmplY3RcbiAqXG4gKiBVc2VzIHJlZ2V4IHJhdGhlciB0aGFuIGluZGV4T2Yvd2hpbGUgbG9vcHMgZm9yIGVhc2llciBkZXYgbWFpbnRhaW5hYmlsaXR5XG4gKi9cbmV4cG9ydCB2YXIgSGlnaGxpZ2h0QWxsID0gZnVuY3Rpb24gSGlnaGxpZ2h0QWxsKF9yZWYpIHtcbiAgdmFyIHNlYXJjaFN1YmplY3QgPSBfcmVmLnNlYXJjaFN1YmplY3QsXG4gICAgX3NlYXJjaFZhbHVlID0gX3JlZi5zZWFyY2hWYWx1ZSxcbiAgICBpc1N0cmljdCA9IF9yZWYuaXNTdHJpY3QsXG4gICAgX3JlZiRoaWdobGlnaHRDb21wb25lID0gX3JlZi5oaWdobGlnaHRDb21wb25lbnQsXG4gICAgSGlnaGxpZ2h0Q29tcG9uZW50ID0gX3JlZiRoaWdobGlnaHRDb21wb25lID09PSB2b2lkIDAgPyAnbWFyaycgOiBfcmVmJGhpZ2hsaWdodENvbXBvbmU7XG4gIHZhciBzZWFyY2hWYWx1ZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KF9zZWFyY2hWYWx1ZSkgPyBfc2VhcmNoVmFsdWUubWFwKGVzY2FwZVJlZ0V4cCkuam9pbignfCcpIDogZXNjYXBlUmVnRXhwKF9zZWFyY2hWYWx1ZSk7XG4gIH0sIFtfc2VhcmNoVmFsdWVdKTtcbiAgdmFyIGNodW5rcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWdleCA9IG5ldyBSZWdFeHAoc2VhcmNoVmFsdWUsIGlzU3RyaWN0ID8gJ2cnIDogJ2dpJyk7XG4gICAgdmFyIG1hdGNoZXMgPSBfdG9Db25zdW1hYmxlQXJyYXkoc2VhcmNoU3ViamVjdC5tYXRjaEFsbChyZWdleCkpLm1hcChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiBtYXRjaC5pbmRleCB8fCAwLFxuICAgICAgICBlbmQ6IChtYXRjaC5pbmRleCB8fCAwKSArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlsbEluQ2h1bmtzKG1hdGNoZXMsIHNlYXJjaFN1YmplY3QubGVuZ3RoKTtcbiAgfSwgW3NlYXJjaFZhbHVlLCBzZWFyY2hTdWJqZWN0LCBpc1N0cmljdF0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2h1bmtzLm1hcChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICB2YXIgZW5kID0gY2h1bmsuZW5kLFxuICAgICAgaGlnaGxpZ2h0ID0gY2h1bmsuaGlnaGxpZ2h0LFxuICAgICAgc3RhcnQgPSBjaHVuay5zdGFydDtcbiAgICB2YXIgdmFsdWUgPSBzZWFyY2hTdWJqZWN0LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcbiAgICByZXR1cm4gaGlnaGxpZ2h0ID8gX19fRW1vdGlvbkpTWChIaWdobGlnaHRDb21wb25lbnQsIHtcbiAgICAgIGtleTogc3RhcnRcbiAgICB9LCB2YWx1ZSkgOiB2YWx1ZTtcbiAgfSkpO1xufTtcblxuLyoqXG4gKiBDaHVuayB1dGlsaXR5XG4gKi9cbkhpZ2hsaWdodEFsbC5wcm9wVHlwZXMgPSB7XG4gIHNlYXJjaFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIHNlYXJjaFN1YmplY3Q6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgaXNTdHJpY3Q6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGhpZ2hsaWdodENvbXBvbmVudDogUHJvcFR5cGVzLmFueVxufTtcbnZhciBmaWxsSW5DaHVua3MgPSBmdW5jdGlvbiBmaWxsSW5DaHVua3MoY2h1bmtzVG9IaWdobGlnaHQsIHRvdGFsTGVuZ3RoKSB7XG4gIHZhciBhbGxDaHVua3MgPSBbXTtcbiAgdmFyIGFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChzdGFydCwgZW5kLCBoaWdobGlnaHQpIHtcbiAgICBpZiAoZW5kIC0gc3RhcnQgPiAwKSB7XG4gICAgICBhbGxDaHVua3MucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgZW5kOiBlbmQsXG4gICAgICAgIGhpZ2hsaWdodDogaGlnaGxpZ2h0XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIGlmIChjaHVua3NUb0hpZ2hsaWdodC5sZW5ndGggPT09IDApIHtcbiAgICBhcHBlbmQoMCwgdG90YWxMZW5ndGgsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGFzdEluZGV4ID0gMDtcbiAgICBjaHVua3NUb0hpZ2hsaWdodC5mb3JFYWNoKGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgYXBwZW5kKGxhc3RJbmRleCwgY2h1bmsuc3RhcnQsIGZhbHNlKTtcbiAgICAgIGFwcGVuZChjaHVuay5zdGFydCwgY2h1bmsuZW5kLCB0cnVlKTtcbiAgICAgIGxhc3RJbmRleCA9IGNodW5rLmVuZDtcbiAgICB9KTtcbiAgICBhcHBlbmQobGFzdEluZGV4LCB0b3RhbExlbmd0aCwgZmFsc2UpO1xuICB9XG4gIHJldHVybiBhbGxDaHVua3M7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbi8qKlxuICogSW50ZXJuYWwgc3ViY29tcG9uZW50IHdpdGggbG9naWMgZm9yIGhpZ2hsaWdodGluZyBvbmx5IHRoZSBmaXJzdCBvY2N1cnJlbmNlXG4gKiBvZiBhIHNlYXJjaCB2YWx1ZSB3aXRoaW4gYSBzdWJqZWN0XG4gKlxuICogVXNlcyBpbmRleE9mIGZvciBwZXJmb3JtYW5jZSAod2hpY2ggZG9lcyBtYXR0ZXIgZm9yLCBlLmcuIEV1aVNlbGVjdGFibGUgc2VhcmNoaW5nKVxuICovXG5leHBvcnQgdmFyIEhpZ2hsaWdodEZpcnN0ID0gZnVuY3Rpb24gSGlnaGxpZ2h0Rmlyc3QoX3JlZikge1xuICB2YXIgc2VhcmNoU3ViamVjdCA9IF9yZWYuc2VhcmNoU3ViamVjdCxcbiAgICBzZWFyY2hWYWx1ZSA9IF9yZWYuc2VhcmNoVmFsdWUsXG4gICAgaXNTdHJpY3QgPSBfcmVmLmlzU3RyaWN0LFxuICAgIF9yZWYkaGlnaGxpZ2h0Q29tcG9uZSA9IF9yZWYuaGlnaGxpZ2h0Q29tcG9uZW50LFxuICAgIEhpZ2hsaWdodENvbXBvbmVudCA9IF9yZWYkaGlnaGxpZ2h0Q29tcG9uZSA9PT0gdm9pZCAwID8gJ21hcmsnIDogX3JlZiRoaWdobGlnaHRDb21wb25lO1xuICBpZiAoQXJyYXkuaXNBcnJheShzZWFyY2hWYWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSBtdWx0aXBsZSBzZWFyY2ggc3RyaW5ncyB3aXRob3V0IGBoaWdobGlnaHRBbGxgIGVuYWJsZWQnKTtcbiAgfVxuICB2YXIgbm9ybWFsaXplZFNlYXJjaFN1YmplY3QgPSBpc1N0cmljdCA/IHNlYXJjaFN1YmplY3QgOiBzZWFyY2hTdWJqZWN0LnRvTG93ZXJDYXNlKCk7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBpc1N0cmljdCA/IHNlYXJjaFZhbHVlIDogc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgdmFyIGluZGV4T2ZNYXRjaCA9IG5vcm1hbGl6ZWRTZWFyY2hTdWJqZWN0LmluZGV4T2Yobm9ybWFsaXplZFNlYXJjaFZhbHVlKTtcbiAgaWYgKGluZGV4T2ZNYXRjaCA9PT0gLTEpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgc2VhcmNoU3ViamVjdCk7XG4gIH1cbiAgdmFyIHByZU1hdGNoID0gc2VhcmNoU3ViamVjdC5zdWJzdHJpbmcoMCwgaW5kZXhPZk1hdGNoKTtcbiAgdmFyIG1hdGNoID0gc2VhcmNoU3ViamVjdC5zdWJzdHJpbmcoaW5kZXhPZk1hdGNoLCBpbmRleE9mTWF0Y2ggKyBzZWFyY2hWYWx1ZS5sZW5ndGgpO1xuICB2YXIgcG9zdE1hdGNoID0gc2VhcmNoU3ViamVjdC5zdWJzdHJpbmcoaW5kZXhPZk1hdGNoICsgc2VhcmNoVmFsdWUubGVuZ3RoKTtcbiAgcmV0dXJuIChcbiAgICAvLyBOb3RlOiBSZWFjdCAxNi8xNyB3aWxsIHJlbmRlciBlbXB0eSBzdHJpbmdzIGluIHRoZSBET00uIFRoZVxuICAgIC8vIGB8fCB1bmRlZmluZWRgIHByZXZlbnRzIHRoaXMgJiBrZWVwcyBzbmFwc2hvdHMgdGhlIHNhbWUgZm9yIGFsbCB2ZXJzaW9uc1xuICAgIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHByZU1hdGNoIHx8IHVuZGVmaW5lZCwgX19fRW1vdGlvbkpTWChIaWdobGlnaHRDb21wb25lbnQsIG51bGwsIG1hdGNoKSwgcG9zdE1hdGNoIHx8IHVuZGVmaW5lZClcbiAgKTtcbn07XG5IaWdobGlnaHRGaXJzdC5wcm9wVHlwZXMgPSB7XG4gIHNlYXJjaFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIHNlYXJjaFN1YmplY3Q6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgaXNTdHJpY3Q6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGhpZ2hsaWdodENvbXBvbmVudDogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRoZW1lXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImNoZWNrZWRcIiwgXCJpc0ZvY3VzZWRcIiwgXCJzaG93SWNvbnNcIiwgXCJ0b29sVGlwQ29udGVudFwiLCBcInRvb2xUaXBQcm9wc1wiLCBcInN0eWxlXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjcmVhdGVSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHdpdGhFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0gfSBmcm9tICcuLi9mbGV4JztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi90b29sX3RpcCc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBldWlGaWx0ZXJTZWxlY3RJdGVtU3R5bGVzIH0gZnJvbSAnLi9maWx0ZXJfc2VsZWN0X2l0ZW0uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgcmVzb2x2ZUljb25BbmRDb2xvciA9IGZ1bmN0aW9uIHJlc29sdmVJY29uQW5kQ29sb3IoY2hlY2tlZCkge1xuICBpZiAoIWNoZWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWNvbjogJ2VtcHR5J1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGNoZWNrZWQgPT09ICdvbicgPyB7XG4gICAgaWNvbjogJ2NoZWNrJyxcbiAgICBjb2xvcjogJ3RleHQnXG4gIH0gOiB7XG4gICAgaWNvbjogJ2Nyb3NzJyxcbiAgICBjb2xvcjogJ3RleHQnXG4gIH07XG59O1xuXG4vKipcbiAqIFRPRE86IFRoaXMgY29tcG9uZW50IHNob3VsZCByZW1vdmVkIGluIGZhdm9yIG9mIEV1aVNlbGVjdGFibGUgdXNhZ2VcbiAqIG9uY2UgRXVpQ29tYm9Cb3ggaGFzIGJlZW4gY29udmVydGVkIHRvIGRvZ2Zvb2QgRXVpU2VsZWN0YWJsZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCAtIFVzZSBFdWlTZWxlY3RhYmxlIGluc3RlYWRcbiAqL1xuZXhwb3J0IHZhciBFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpRmlsdGVyU2VsZWN0SXRlbUNsYXNzKCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRmlsdGVyU2VsZWN0SXRlbUNsYXNzKTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImJ1dHRvblJlZlwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidG9vbHRpcFJlZlwiLCAvKiNfX1BVUkVfXyovY3JlYXRlUmVmKCkpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzdGF0ZVwiLCB7XG4gICAgICBoYXNGb2N1czogZmFsc2VcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLmJ1dHRvblJlZikge1xuICAgICAgICBfdGhpcy5idXR0b25SZWYuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidG9nZ2xlVG9vbFRpcFwiLCBmdW5jdGlvbiAoaXNGb2N1c2VkKSB7XG4gICAgICBpZiAoaXNGb2N1c2VkKSB7XG4gICAgICAgIHZhciBfdGhpcyR0b29sdGlwUmVmO1xuICAgICAgICAoX3RoaXMkdG9vbHRpcFJlZiA9IF90aGlzLnRvb2x0aXBSZWYpID09PSBudWxsIHx8IF90aGlzJHRvb2x0aXBSZWYgPT09IHZvaWQgMCB8fCAoX3RoaXMkdG9vbHRpcFJlZiA9IF90aGlzJHRvb2x0aXBSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3RoaXMkdG9vbHRpcFJlZiA9PT0gdm9pZCAwIHx8IF90aGlzJHRvb2x0aXBSZWYuc2hvd1Rvb2xUaXAoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfdGhpcyR0b29sdGlwUmVmMjtcbiAgICAgICAgKF90aGlzJHRvb2x0aXBSZWYyID0gX3RoaXMudG9vbHRpcFJlZikgPT09IG51bGwgfHwgX3RoaXMkdG9vbHRpcFJlZjIgPT09IHZvaWQgMCB8fCAoX3RoaXMkdG9vbHRpcFJlZjIgPSBfdGhpcyR0b29sdGlwUmVmMi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdGhpcyR0b29sdGlwUmVmMiA9PT0gdm9pZCAwIHx8IF90aGlzJHRvb2x0aXBSZWYyLmhpZGVUb29sVGlwKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImhhc0ZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5oYXNGb2N1cztcbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUZpbHRlclNlbGVjdEl0ZW1DbGFzcywgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpRmlsdGVyU2VsZWN0SXRlbUNsYXNzLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICB0aGVtZSA9IF90aGlzJHByb3BzLnRoZW1lLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMuZGlzYWJsZWQsXG4gICAgICAgIGNoZWNrZWQgPSBfdGhpcyRwcm9wcy5jaGVja2VkLFxuICAgICAgICBpc0ZvY3VzZWQgPSBfdGhpcyRwcm9wcy5pc0ZvY3VzZWQsXG4gICAgICAgIHNob3dJY29ucyA9IF90aGlzJHByb3BzLnNob3dJY29ucyxcbiAgICAgICAgdG9vbFRpcENvbnRlbnQgPSBfdGhpcyRwcm9wcy50b29sVGlwQ29udGVudCxcbiAgICAgICAgdG9vbFRpcFByb3BzID0gX3RoaXMkcHJvcHMudG9vbFRpcFByb3BzLFxuICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzLnN0eWxlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIHN0eWxlcyA9IGV1aUZpbHRlclNlbGVjdEl0ZW1TdHlsZXModGhlbWUpO1xuICAgICAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRmlsdGVyU2VsZWN0SXRlbSwgaXNGb2N1c2VkICYmIHN0eWxlcy5pc0ZvY3VzZWRdO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGaWx0ZXJTZWxlY3RJdGVtJywgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBoYXNUb29sVGlwID1cbiAgICAgIC8vIHdlJ3JlIHVzaW5nIGlzVmFsaWRFbGVtZW50IGhlcmUgYXMgRXVpVG9vbFRpcEFuY2hvciB1c2VzXG4gICAgICAvLyBjbG9uZUVsZW1lbnQgdG8gZW5oYW5jZSB0aGUgZWxlbWVudCB3aXRoIHJlcXVpcmVkIGF0dHJpYnV0ZXNcbiAgICAgIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiYgIWRpc2FibGVkICYmIHRvb2xUaXBDb250ZW50O1xuICAgICAgdmFyIGFuY2hvclByb3BzID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGhhc1Rvb2xUaXApIHtcbiAgICAgICAgdmFyIF90b29sVGlwUHJvcHMkYW5jaG9yUCwgX3Rvb2xUaXBQcm9wcyRhbmNob3JQMjtcbiAgICAgICAgdmFyIGFuY2hvclN0eWxlcyA9IHRvb2xUaXBQcm9wcyAhPT0gbnVsbCAmJiB0b29sVGlwUHJvcHMgIT09IHZvaWQgMCAmJiAoX3Rvb2xUaXBQcm9wcyRhbmNob3JQID0gdG9vbFRpcFByb3BzLmFuY2hvclByb3BzKSAhPT0gbnVsbCAmJiBfdG9vbFRpcFByb3BzJGFuY2hvclAgIT09IHZvaWQgMCAmJiBfdG9vbFRpcFByb3BzJGFuY2hvclAuc3R5bGUgPyBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRvb2xUaXBQcm9wcyA9PT0gbnVsbCB8fCB0b29sVGlwUHJvcHMgPT09IHZvaWQgMCB8fCAoX3Rvb2xUaXBQcm9wcyRhbmNob3JQMiA9IHRvb2xUaXBQcm9wcy5hbmNob3JQcm9wcykgPT09IG51bGwgfHwgX3Rvb2xUaXBQcm9wcyRhbmNob3JQMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3Rvb2xUaXBQcm9wcyRhbmNob3JQMi5zdHlsZSksIHN0eWxlKSA6IHN0eWxlO1xuICAgICAgICBhbmNob3JQcm9wcyA9IHRvb2xUaXBQcm9wcyAhPT0gbnVsbCAmJiB0b29sVGlwUHJvcHMgIT09IHZvaWQgMCAmJiB0b29sVGlwUHJvcHMuYW5jaG9yUHJvcHMgPyBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRvb2xUaXBQcm9wcy5hbmNob3JQcm9wcyksIHt9LCB7XG4gICAgICAgICAgc3R5bGU6IGFuY2hvclN0eWxlc1xuICAgICAgICB9KSA6IHtcbiAgICAgICAgICBzdHlsZTogc3R5bGVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50b2dnbGVUb29sVGlwKGlzRm9jdXNlZCAhPT0gbnVsbCAmJiBpc0ZvY3VzZWQgIT09IHZvaWQgMCA/IGlzRm9jdXNlZCA6IGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHZhciBpY29uTm9kZTtcbiAgICAgIGlmIChzaG93SWNvbnMpIHtcbiAgICAgICAgdmFyIF9yZXNvbHZlSWNvbkFuZENvbG9yID0gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSxcbiAgICAgICAgICBpY29uID0gX3Jlc29sdmVJY29uQW5kQ29sb3IuaWNvbixcbiAgICAgICAgICBjb2xvciA9IF9yZXNvbHZlSWNvbkFuZENvbG9yLmNvbG9yO1xuICAgICAgICBpY29uTm9kZSA9IF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgICBncm93OiBmYWxzZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgICAgdHlwZTogaWNvblxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICB2YXIgb3B0aW9uSXRlbSA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihfcmVmKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5idXR0b25SZWYgPSBfcmVmO1xuICAgICAgICB9LFxuICAgICAgICByb2xlOiBcIm9wdGlvblwiLFxuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBcImFyaWEtc2VsZWN0ZWRcIjogaXNGb2N1c2VkLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCxcbiAgICAgICAgc3R5bGU6ICFoYXNUb29sVGlwID8gc3R5bGUgOiB1bmRlZmluZWRcbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICBndXR0ZXJTaXplOiBcInNcIixcbiAgICAgICAgY29tcG9uZW50OiBcInNwYW5cIixcbiAgICAgICAgcmVzcG9uc2l2ZTogZmFsc2VcbiAgICAgIH0sIGljb25Ob2RlLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlGaWx0ZXJTZWxlY3RJdGVtX19jb250ZW50IGV1aS10ZXh0VHJ1bmNhdGVcIixcbiAgICAgICAgY29tcG9uZW50OiBcInNwYW5cIlxuICAgICAgfSwgY2hpbGRyZW4pKSk7XG4gICAgICByZXR1cm4gaGFzVG9vbFRpcCA/IF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IHRoaXMudG9vbHRpcFJlZixcbiAgICAgICAgZGlzcGxheTogXCJibG9ja1wiLFxuICAgICAgICBjb250ZW50OiB0b29sVGlwQ29udGVudCxcbiAgICAgICAgcG9zaXRpb246IFwibGVmdFwiXG4gICAgICB9LCB0b29sVGlwUHJvcHMsIHtcbiAgICAgICAgYW5jaG9yUHJvcHM6IGFuY2hvclByb3BzXG4gICAgICB9KSwgb3B0aW9uSXRlbSkgOiBvcHRpb25JdGVtO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIC0gVXNlIEV1aVNlbGVjdGFibGUgaW5zdGVhZFxuICovXG5fZGVmaW5lUHJvcGVydHkoRXVpRmlsdGVyU2VsZWN0SXRlbUNsYXNzLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHNob3dJY29uczogdHJ1ZVxufSk7XG5FdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MucHJvcFR5cGVzID0ge1xuICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIl0pLFxuICBzaG93SWNvbnM6IFByb3BUeXBlcy5ib29sLFxuICBpc0ZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07XG5leHBvcnQgdmFyIEV1aUZpbHRlclNlbGVjdEl0ZW0gPSB3aXRoRXVpVGhlbWUoRXVpRmlsdGVyU2VsZWN0SXRlbUNsYXNzKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsU2hvcnRoYW5kQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpRmlsdGVyU2VsZWN0SXRlbVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZpbHRlclNlbGVjdEl0ZW1TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIGZvY3VzU3R5bGVzID0gXCJcXG4gICAgY29sb3I6IFwiLmNvbmNhdChldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgXCI7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQoZXVpVGhlbWUuZm9jdXMuYmFja2dyb3VuZENvbG9yLCBcIjtcXG4gICAgb3V0bGluZS1vZmZzZXQ6IC1cIikuY29uY2F0KGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIjtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuXFxuICAgICY6ZGlzYWJsZWQge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQodHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkLCAwLjEpLCBcIjtcXG4gICAgfVxcbiAgXCIpO1xuICByZXR1cm4ge1xuICAgIGV1aUZpbHRlclNlbGVjdEl0ZW06IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmJsb2NrO1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIFwiLCBsb2dpY2FsU2hvcnRoYW5kQ1NTKCdwYWRkaW5nJywgXCJcIi5jb25jYXQoZXVpVGhlbWUuc2l6ZS54cywgXCIgXCIpLmNvbmNhdChldWlUaGVtZS5zaXplLm0pKSwgXCIgXCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCIgXCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCIgY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjtcIiwgbG9naWNhbENTUygnYm9yZGVyLWJvdHRvbScsIFwiXCIuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIikuY29uY2F0KGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlKSksIFwiICY6aG92ZXJ7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9Jjpmb2N1c3tcIiwgZm9jdXNTdHlsZXMsIFwiO30mOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkVGV4dCwgXCI7fTtsYWJlbDpldWlGaWx0ZXJTZWxlY3RJdGVtO1wiKSxcbiAgICBpc0ZvY3VzZWQ6IC8qI19fUFVSRV9fKi9jc3MoZm9jdXNTdHlsZXMsIFwiOztsYWJlbDppc0ZvY3VzZWQ7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wid2lkdGhcIiwgXCJvblJlc2l6ZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcIndpZHRoXCIsIFwiY2hpbGRyZW5cIiwgXCJ0ZXh0XCIsIFwidHJ1bmNhdGlvblwiLCBcInRydW5jYXRpb25PZmZzZXRcIiwgXCJ0cnVuY2F0aW9uUG9zaXRpb25cIiwgXCJlbGxpcHNpc1wiLCBcImNhbGN1bGF0aW9uRGVsYXlNc1wiLCBcImNvbnRhaW5lclJlZlwiLCBcImNsYXNzTmFtZVwiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcIm9uUmVzaXplXCJdO1xuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlQ29tYmluZWRSZWZzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXInO1xuaW1wb3J0IHsgVHJ1bmNhdGlvblV0aWxzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBldWlUZXh0VHJ1bmNhdGVTdHlsZXMgYXMgc3R5bGVzIH0gZnJvbSAnLi90ZXh0X3RydW5jYXRlLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIFRSVU5DQVRJT05fVFlQRVMgPSBbJ2VuZCcsICdzdGFydCcsICdzdGFydEVuZCcsICdtaWRkbGUnXTtcbmV4cG9ydCB2YXIgRXVpVGV4dFRydW5jYXRlID0gZnVuY3Rpb24gRXVpVGV4dFRydW5jYXRlKF9yZWYpIHtcbiAgdmFyIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICBvblJlc2l6ZSA9IF9yZWYub25SZXNpemUsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIHdpZHRoICE9IG51bGwgPyBfX19FbW90aW9uSlNYKEV1aVRleHRUcnVuY2F0ZVdpdGhXaWR0aCwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiB3aWR0aFxuICB9LCBwcm9wcykpIDogX19fRW1vdGlvbkpTWChFdWlUZXh0VHJ1bmNhdGVXaXRoUmVzaXplT2JzZXJ2ZXIsIF9leHRlbmRzKHtcbiAgICBvblJlc2l6ZTogb25SZXNpemVcbiAgfSwgcHJvcHMpKTtcbn07XG5FdWlUZXh0VHJ1bmNhdGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBUaGUgZnVsbCB0ZXh0IHN0cmluZyB0byB0cnVuY2F0ZVxuICAgICAgICovXG4gIHRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICAgKiBUaGUgdHJ1bmNhdGlvbiB0eXBlIGRlc2lyZWQuIERldGVybWluZXMgd2hlcmUgdGhlIGVsbGlwc2VzIGFyZSBwbGFjZWQuXG4gICAgICAgKi9cbiAgdHJ1bmNhdGlvbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBUaGlzIHByb3AgKipvbmx5KiogYXBwbGllcyB0byB0aGUgYHN0YXJ0YCBhbmQgYGVuZGAgdHJ1bmNhdGlvbiB0eXBlcy5cbiAgICAgICAqIEl0IGFsbG93cyBwcmVzZXJ2aW5nIGEgY2VydGFpbiBudW1iZXIgb2YgY2hhcmFjdGVycyBvZiBlaXRoZXIgdGhlXG4gICAgICAgKiBzdGFydGluZyBvciBlbmRpbmcgdGV4dC5cbiAgICAgICAqXG4gICAgICAgKiBJZiB0aGUgcGFzc2VkIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIHRleHQgbGVuZ3RoLFxuICAgICAgICogdGhlIG9mZnNldCB3aWxsIGJlIGlnbm9yZWQuXG4gICAgICAgKi9cbiAgdHJ1bmNhdGlvbk9mZnNldDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICAgKiBUaGlzIHByb3AgKipvbmx5KiogYXBwbGllcyB0byB0aGUgYHN0YXJ0RW5kYCB0cnVuY2F0aW9uIHR5cGUuXG4gICAgICAgKiBJdCBhbGxvd3MgY3VzdG9taXppbmcgdGhlIGFuY2hvciBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheWVkIHRleHQsXG4gICAgICAgKiB3aGljaCBvdGhlcndpc2UgZGVmYXVsdHMgdG8gdGhlIG1pZGRsZSBvZiB0aGUgdGV4dCBzdHJpbmcuXG4gICAgICAgKlxuICAgICAgICogVGhlIHByaW1hcnkgdXNlIGNhc2UgZm9yIHRoaXMgcHJvcCBmb3IgaXMgc2VhcmNoIGhpZ2hsaWdodGluZyAtIGUuZy4sIGlmXG4gICAgICAgKiBhIHVzZXIgc2VhcmNoZXMgZm9yIGEgc3BlY2lmaWMgd29yZCBpbiB0aGUgdGV4dCwgcGFzcyB0aGUgaW5kZXggb2YgdGhhdFxuICAgICAgICogZm91bmQgd29yZCB0byBlbnN1cmUgaXQgaXMgYWx3YXlzIHZpc2libGUuXG4gICAgICAgKlxuICAgICAgICogVGhpcyBiZWhhdmlvciB3aWxsIGludGVsbGlnZW50bHkgZGV0ZWN0IHdoZW4gcG9zaXRpb25zIGFyZSBjbG9zZSB0byB0aGUgc3RhcnRcbiAgICAgICAqIG9yIGVuZCBvZiB0aGUgdGV4dCwgYW5kIG9taXQgbGVhZGluZyBvciB0cmFpbGluZyBlbGxpcHNlcyB3aGVuIG5lY2Vzc2FyeS5cbiAgICAgICAqIElmIHRoZSBwYXNzZWQgcG9zaXRpb24gaXMgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCB0ZXh0IGxlbmd0aCxcbiAgICAgICAqIHRoZSB0cnVuY2F0aW9uIHdpbGwgc2ltcGx5IGRlZmF1bHQgdG8gYHN0YXJ0YCBpbnN0ZWFkLlxuICAgICAgICovXG4gIHRydW5jYXRpb25Qb3NpdGlvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICAgKiBEZWZhdWx0cyB0byB0aGUgaG9yaXpvbnRhbCBlbGxpcHNpcyBjaGFyYWN0ZXIuXG4gICAgICAgKiBDYW4gYmUgb3B0aW9uYWxseSBjb25maWd1cmVkIHRvIHVzZSBvdGhlciBwdW5jdHVhdGlvbixcbiAgICAgICAqIGUuZy4gc3BhY2VzLCBicmFja2V0cywgaHlwaGVucywgYXN0ZXJpc2tzLCBldGMuXG4gICAgICAgKi9cbiAgZWxsaXBzaXM6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAgICogQnkgZGVmYXVsdCwgRXVpVGV4dFRydW5jYXRlIHdpbGwgcmVuZGVyIGEgcmVzaXplIG9ic2VydmVyIHRvIGRldGVjdCB0aGVcbiAgICAgICAqIGF2YWlsYWJsZSB3aWR0aCBpdCBoYXMuIEZvciBwZXJmb3JtYW5jZSByZWFzb25zIChlLmcuIG11bHRpcGxlIHRydW5jYXRlZFxuICAgICAgICogdGV4dCBpdGVtcyB3aXRoaW4gdGhlIHNhbWUgY29udGFpbmVyKSwgeW91IG1heSBvcHQgdG8gcGFzcyBpbiB5b3VyIG93blxuICAgICAgICogY29udGFpbmVyIHdpZHRoLCB3aGljaCB3aWxsIHNraXAgaW5pdGlhbGl6aW5nIGEgcmVzaXplIG9ic2VydmVyLlxuICAgICAgICovXG4gIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICAgICAqIE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgZmlyZXMgd2hlbiB0aGUgZGVmYXVsdCByZXNpemVyIG9ic2VydmVyIGJvdGggbW91bnRzIGFuZFxuICAgICAgICogcmVnaXN0ZXJzIGEgc2l6ZSBjaGFuZ2UuIFRoaXMgY2FsbGJhY2sgd2lsbCAqKm5vdCoqIGZpcmUgaWYgYHdpZHRoYCBpcyBwYXNzZWQuXG4gICAgICAgKi9cbiAgb25SZXNpemU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgICAqIEJ5IGRlZmF1bHQsIEV1aVRleHRUcnVuY2F0ZSB3aWxsIHJlbmRlciB0aGUgdHJ1bmNhdGVkIHN0cmluZyBkaXJlY3RseS5cbiAgICAgICAqIFlvdSBjYW4gb3B0aW9uYWxseSBwYXNzIGEgcmVuZGVyIHByb3AgZnVuY3Rpb24gdG8gdGhlIGNvbXBvbmVudCwgd2hpY2hcbiAgICAgICAqIGFsbG93cyBmb3IgbW9yZSBmbGV4aWJsZSB0ZXh0IHJlbmRlcmluZywgZS5nLiBhZGRpbmcgY3VzdG9tIG1hcmt1cFxuICAgICAgICogb3IgaGlnaGxpZ2h0aW5nXG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgICAqIEZvciBzb21lIGVkZ2UgY2FzZSBzY2VuYXJpb3MsIEV1aVRleHRUcnVuY2F0ZSdzIGNhbGN1bGF0aW9ucyBtYXkgYmUgb2ZmIHVudGlsXG4gICAgICAgKiBmb250cyBhcmUgZG9uZSBsb2FkaW5nIG9yIGxheW91dCBpcyBkb25lIHNoaWZ0aW5nIG9yIHNldHRsaW5nLiBBZGRpbmcgYSBkZWxheVxuICAgICAgICogbWF5IGhlbHAgcmVzb2x2ZSBhbnkgcmVuZGVyaW5nIGlzc3Vlcy5cbiAgICAgICAqL1xuICBjYWxjdWxhdGlvbkRlbGF5TXM6IFByb3BUeXBlcy5udW1iZXJcbn07XG52YXIgRXVpVGV4dFRydW5jYXRlV2l0aFdpZHRoID0gZnVuY3Rpb24gRXVpVGV4dFRydW5jYXRlV2l0aFdpZHRoKF9yZWYyKSB7XG4gIHZhciB3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgdGV4dCA9IF9yZWYyLnRleHQsXG4gICAgX3JlZjIkdHJ1bmNhdGlvbiA9IF9yZWYyLnRydW5jYXRpb24sXG4gICAgX3RydW5jYXRpb24gPSBfcmVmMiR0cnVuY2F0aW9uID09PSB2b2lkIDAgPyAnZW5kJyA6IF9yZWYyJHRydW5jYXRpb24sXG4gICAgX3JlZjIkdHJ1bmNhdGlvbk9mZnNlID0gX3JlZjIudHJ1bmNhdGlvbk9mZnNldCxcbiAgICBfdHJ1bmNhdGlvbk9mZnNldCA9IF9yZWYyJHRydW5jYXRpb25PZmZzZSA9PT0gdm9pZCAwID8gMCA6IF9yZWYyJHRydW5jYXRpb25PZmZzZSxcbiAgICB0cnVuY2F0aW9uUG9zaXRpb24gPSBfcmVmMi50cnVuY2F0aW9uUG9zaXRpb24sXG4gICAgX3JlZjIkZWxsaXBzaXMgPSBfcmVmMi5lbGxpcHNpcyxcbiAgICBlbGxpcHNpcyA9IF9yZWYyJGVsbGlwc2lzID09PSB2b2lkIDAgPyAnXHUyMDI2JyA6IF9yZWYyJGVsbGlwc2lzLFxuICAgIGNhbGN1bGF0aW9uRGVsYXlNcyA9IF9yZWYyLmNhbGN1bGF0aW9uRGVsYXlNcyxcbiAgICBjb250YWluZXJSZWYgPSBfcmVmMi5jb250YWluZXJSZWYsXG4gICAgY2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZDIpO1xuICAvLyBOb3RlOiBUaGlzIG5lZWRzIHRvIGJlIGEgc3RhdGUgYW5kIG5vdCBhIHJlZiB0byB0cmlnZ2VyIGEgcmVyZW5kZXIgb24gbW91bnRcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG51bGwpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGNvbnRhaW5lckVsID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRDb250YWluZXJFbCA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciByZWZzID0gdXNlQ29tYmluZWRSZWZzKFtzZXRDb250YWluZXJFbCwgY29udGFpbmVyUmVmXSk7XG5cbiAgLy8gSWYgbmVjZXNzYXJ5LCB3YWl0IGEgdGljayBvbiBtb3VudCBiZWZvcmUgdHJ1bmNhdGluZ1xuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKCFjYWxjdWxhdGlvbkRlbGF5TXMpLFxuICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICByZWFkeSA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0UmVhZHkgPSBfdXNlU3RhdGU0WzFdO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYWxjdWxhdGlvbkRlbGF5TXMpIHtcbiAgICAgIHZhciB0aW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzZXRSZWFkeSh0cnVlKTtcbiAgICAgIH0sIGNhbGN1bGF0aW9uRGVsYXlNcyk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtjYWxjdWxhdGlvbkRlbGF5TXNdKTtcblxuICAvLyBIYW5kbGUgZXhjZXB0aW9ucyB3aGVyZSB3ZSBuZWVkIHRvIG92ZXJyaWRlIHRoZSBwYXNzZWQgcHJvcHNcbiAgdmFyIF91c2VNZW1vID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdHJ1bmNhdGlvbiA9IF90cnVuY2F0aW9uO1xuICAgICAgdmFyIHRydW5jYXRpb25PZmZzZXQgPSAwO1xuICAgICAgaWYgKF90cnVuY2F0aW9uID09PSAnZW5kJyB8fCBfdHJ1bmNhdGlvbiA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICBpZiAoMCA8IF90cnVuY2F0aW9uT2Zmc2V0ICYmIF90cnVuY2F0aW9uT2Zmc2V0IDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICB0cnVuY2F0aW9uT2Zmc2V0ID0gX3RydW5jYXRpb25PZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoX3RydW5jYXRpb24gPT09ICdzdGFydEVuZCcgJiYgdHJ1bmNhdGlvblBvc2l0aW9uICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHRydW5jYXRpb25Qb3NpdGlvbiA8PSAwKSB7XG4gICAgICAgICAgdHJ1bmNhdGlvbiA9ICdlbmQnO1xuICAgICAgICB9IGVsc2UgaWYgKHRydW5jYXRpb25Qb3NpdGlvbiA+PSB0ZXh0Lmxlbmd0aCkge1xuICAgICAgICAgIHRydW5jYXRpb24gPSAnc3RhcnQnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0cnVuY2F0aW9uOiB0cnVuY2F0aW9uLFxuICAgICAgICB0cnVuY2F0aW9uT2Zmc2V0OiB0cnVuY2F0aW9uT2Zmc2V0XG4gICAgICB9O1xuICAgIH0sIFtfdHJ1bmNhdGlvbiwgX3RydW5jYXRpb25PZmZzZXQsIHRydW5jYXRpb25Qb3NpdGlvbiwgdGV4dC5sZW5ndGhdKSxcbiAgICB0cnVuY2F0aW9uID0gX3VzZU1lbW8udHJ1bmNhdGlvbixcbiAgICB0cnVuY2F0aW9uT2Zmc2V0ID0gX3VzZU1lbW8udHJ1bmNhdGlvbk9mZnNldDtcbiAgdmFyIHRydW5jYXRlZFRleHQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdHJ1bmNhdGVkVGV4dCA9ICcnO1xuICAgIGlmICghcmVhZHkgfHwgIWNvbnRhaW5lckVsKSByZXR1cm4gdGV4dDtcbiAgICBpZiAoIXdpZHRoKSByZXR1cm4gdHJ1bmNhdGVkVGV4dDtcbiAgICB2YXIgdXRpbHMgPSBuZXcgVHJ1bmNhdGlvblV0aWxzKHtcbiAgICAgIGZ1bGxUZXh0OiB0ZXh0LFxuICAgICAgZWxsaXBzaXM6IGVsbGlwc2lzLFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXJFbCxcbiAgICAgIGF2YWlsYWJsZVdpZHRoOiB3aWR0aFxuICAgIH0pO1xuICAgIGlmICh1dGlscy5jaGVja0lmVHJ1bmNhdGlvbklzTmVlZGVkKCkgPT09IGZhbHNlKSB7XG4gICAgICB0cnVuY2F0ZWRUZXh0ID0gdGV4dDtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmNoZWNrU3VmZmljaWVudEVsbGlwc2lzV2lkdGgodHJ1bmNhdGlvbikgPT09IGZhbHNlKSB7XG4gICAgICB0cnVuY2F0ZWRUZXh0ID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAodHJ1bmNhdGlvbikge1xuICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgIHRydW5jYXRlZFRleHQgPSB1dGlscy50cnVuY2F0ZUVuZCh0cnVuY2F0aW9uT2Zmc2V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICAgIHRydW5jYXRlZFRleHQgPSB1dGlscy50cnVuY2F0ZVN0YXJ0KHRydW5jYXRpb25PZmZzZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdGFydEVuZCc6XG4gICAgICAgICAgaWYgKHRydW5jYXRpb25Qb3NpdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gdXRpbHMudHJ1bmNhdGVTdGFydEVuZEF0TWlkZGxlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRydW5jYXRlZFRleHQgPSB1dGlscy50cnVuY2F0ZVN0YXJ0RW5kQXRQb3NpdGlvbih0cnVuY2F0aW9uUG9zaXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gdXRpbHMudHJ1bmNhdGVNaWRkbGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydW5jYXRlZFRleHQ7XG4gIH0sIFtyZWFkeSwgd2lkdGgsIHRleHQsIHRydW5jYXRpb24sIHRydW5jYXRpb25PZmZzZXQsIHRydW5jYXRpb25Qb3NpdGlvbiwgZWxsaXBzaXMsIGNvbnRhaW5lckVsXSk7XG4gIHZhciBpc1RydW5jYXRpbmcgPSB0cnVuY2F0ZWRUZXh0ICE9PSB0ZXh0O1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlUZXh0VHJ1bmNhdGUnLCBjbGFzc05hbWUpLFxuICAgIGNzczogc3R5bGVzLmV1aVRleHRUcnVuY2F0ZSxcbiAgICByZWY6IHJlZnMsXG4gICAgdGl0bGU6IGlzVHJ1bmNhdGluZyA/IHRleHQgOiB1bmRlZmluZWRcbiAgfSwgcmVzdCksIGlzVHJ1bmNhdGluZyA/IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGV4dFRydW5jYXRlX190cnVuY2F0ZWRUZXh0XCIsXG4gICAgY3NzOiBzdHlsZXMuZXVpVGV4dFRydW5jYXRlX190cnVuY2F0ZWRUZXh0LFxuICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidHJ1bmNhdGVkVGV4dFwiXG4gIH0sIGNoaWxkcmVuID8gY2hpbGRyZW4odHJ1bmNhdGVkVGV4dCkgOiB0cnVuY2F0ZWRUZXh0KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUZXh0VHJ1bmNhdGVfX2Z1bGxUZXh0XCIsXG4gICAgY3NzOiBzdHlsZXMuZXVpVGV4dFRydW5jYXRlX19mdWxsVGV4dCxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZnVsbFRleHRcIlxuICB9LCB0ZXh0KSkgOiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRleHRUcnVuY2F0ZV9fZnVsbFRleHRcIixcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZnVsbFRleHRcIlxuICB9LCBjaGlsZHJlbiA/IGNoaWxkcmVuKHRleHQpIDogdGV4dCkpO1xufTtcbkV1aVRleHRUcnVuY2F0ZVdpdGhXaWR0aC5wcm9wVHlwZXMgPSB7XG4gIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIGNvbnRhaW5lclJlZjogUHJvcFR5cGVzLmFueVxufTtcbnZhciBFdWlUZXh0VHJ1bmNhdGVXaXRoUmVzaXplT2JzZXJ2ZXIgPSBmdW5jdGlvbiBFdWlUZXh0VHJ1bmNhdGVXaXRoUmVzaXplT2JzZXJ2ZXIoX3JlZjMpIHtcbiAgdmFyIF9vblJlc2l6ZSA9IF9yZWYzLm9uUmVzaXplLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYzLCBfZXhjbHVkZWQzKTtcbiAgdmFyIF91c2VTdGF0ZTUgPSB1c2VTdGF0ZSgwKSxcbiAgICBfdXNlU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNSwgMiksXG4gICAgd2lkdGggPSBfdXNlU3RhdGU2WzBdLFxuICAgIHNldFdpZHRoID0gX3VzZVN0YXRlNlsxXTtcbiAgdmFyIG9uUmVzaXplID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgdmFyIHdpZHRoID0gX3JlZjQud2lkdGg7XG4gICAgc2V0V2lkdGgod2lkdGgpO1xuICAgIF9vblJlc2l6ZSA9PT0gbnVsbCB8fCBfb25SZXNpemUgPT09IHZvaWQgMCB8fCBfb25SZXNpemUod2lkdGgpO1xuICB9LCBbX29uUmVzaXplXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVJlc2l6ZU9ic2VydmVyLCB7XG4gICAgb25SZXNpemU6IG9uUmVzaXplXG4gIH0sIGZ1bmN0aW9uIChyZWYpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUZXh0VHJ1bmNhdGVXaXRoV2lkdGgsIF9leHRlbmRzKHtcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGNvbnRhaW5lclJlZjogcmVmXG4gICAgfSwgcHJvcHMsIHtcbiAgICAgIFwiZGF0YS1yZXNpemUtb2JzZXJ2ZXJcIjogXCJ0cnVlXCJcbiAgICB9KSk7XG4gIH0pO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImZ1bGxUZXh0XCIsIFwiZWxsaXBzaXNcIiwgXCJhdmFpbGFibGVXaWR0aFwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0KCkgeyByZXR1cm4gX2dldCA9IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFJlZmxlY3QgJiYgUmVmbGVjdC5nZXQgPyBSZWZsZWN0LmdldC5iaW5kKCkgOiBmdW5jdGlvbiAoZSwgdCwgcikgeyB2YXIgcCA9IF9zdXBlclByb3BCYXNlKGUsIHQpOyBpZiAocCkgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocCwgdCk7IHJldHVybiBuLmdldCA/IG4uZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBlIDogcikgOiBuLnZhbHVlOyB9IH0sIF9nZXQuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2UodCwgbykgeyBmb3IgKDsgIXt9Lmhhc093blByb3BlcnR5LmNhbGwodCwgbykgJiYgbnVsbCAhPT0gKHQgPSBfZ2V0UHJvdG90eXBlT2YodCkpOyk7IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IENhbnZhc1RleHRVdGlscyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhbnZhcyc7XG4vKipcbiAqIFV0aWxpdGllcyBmb3IgdHJ1bmNhdGluZyB0eXBlcyBhdCB2YXJpb3VzIHBvc2l0aW9ucywgYXMgd2VsbCBhc1xuICogZGV0ZXJtaW5pbmcgd2hldGhlciB0cnVuY2F0aW9uIGlzIHBvc3NpYmxlIG9yIGV2ZW4gbmVjZXNzYXJ5LlxuICovXG5leHBvcnQgdmFyIFRydW5jYXRpb25VdGlscyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NhbnZhc1RleHRVdGlscykge1xuICBmdW5jdGlvbiBUcnVuY2F0aW9uVXRpbHMoX3JlZikge1xuICAgIHZhciBfdGhpcztcbiAgICB2YXIgZnVsbFRleHQgPSBfcmVmLmZ1bGxUZXh0LFxuICAgICAgZWxsaXBzaXMgPSBfcmVmLmVsbGlwc2lzLFxuICAgICAgX2F2YWlsYWJsZVdpZHRoID0gX3JlZi5hdmFpbGFibGVXaWR0aCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHJ1bmNhdGlvblV0aWxzKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgVHJ1bmNhdGlvblV0aWxzLCBbcmVzdF0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJmdWxsVGV4dFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJlbGxpcHNpc1wiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJhdmFpbGFibGVXaWR0aFwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFBlcmZvcm1hbmNlIHV0aWxpdGllc1xuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJkZWJ1Z1BlcmZvcm1hbmNlXCIsIGZhbHNlKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZGVidWdDb3VudGVyXCIsIDApO1xuICAgIC8qKlxuICAgICAqIEludGVybmFsIHV0aWxzIGZvciBjYWxjdWxhdGluZyBhIHJhdGlvIGJhc2VkIG9uIHRoZSBwYXNzZWQgYXZhaWxhYmxlIHdpZHRoXG4gICAgICogdnMgdGhlIGZ1bGwgdGV4dCB3aWR0aC5cbiAgICAgKiBUaGlzIHJhdGlvIGlzIHVzZWQgdG8gZ2V0IGFuIGluaXRpYWwgX2FwcHJveGltYXRlXyB0ZXh0IHN0cmluZyB0aGF0IHNob3VsZFxuICAgICAqIGJlIHNsaWdodGx5IG92ZXIgdGhlIGF2YWlsYWJsZSB3aWR0aCwgd2hpY2ggd2UgY2FuIHRoZW4gcmVtb3ZlIGZyb21cbiAgICAgKiBjaGFyYWN0ZXItYnktY2hhcmFjdGVyIHVudGlsIHRoZSB0ZXh0IGp1c3QgZml0cyB3aXRoaW4gdGhlIGF2YWlsYWJsZSB3aWR0aC5cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwid2lkdGhSYXRpb1wiLCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2V0VGV4dFdpZHRoUmF0aW9cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRleHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IF90aGlzLmZ1bGxUZXh0O1xuICAgICAgdmFyIHRleHRUb09mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7XG4gICAgICAvLyBBY2NvdW50IGZvciByZWR1Y2VkIGF2YWlsYWJsZSB3aWR0aCBkdWUgdG8gKGUuZy4pIHRydW5jYXRpb24gb2Zmc2V0XG4gICAgICB2YXIgYXZhaWxhYmxlV2lkdGggPSBfdGhpcy5hdmFpbGFibGVXaWR0aDtcbiAgICAgIGlmICh0ZXh0VG9PZmZzZXQpIHtcbiAgICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2sodGV4dFRvT2Zmc2V0KTtcbiAgICAgICAgYXZhaWxhYmxlV2lkdGggPSBhdmFpbGFibGVXaWR0aCAtIF90aGlzLnRleHRXaWR0aDtcbiAgICAgIH1cbiAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKHRleHQpO1xuICAgICAgX3RoaXMud2lkdGhSYXRpbyA9IGF2YWlsYWJsZVdpZHRoIC8gX3RoaXMudGV4dFdpZHRoO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJnZXRUZXh0RnJvbVJhdGlvXCIsIGZ1bmN0aW9uICh0ZXh0LCB0eXBlKSB7XG4gICAgICB2YXIgY2hhcmFjdGVyUmF0aW8gPSBNYXRoLmNlaWwodGV4dC5sZW5ndGggKiBfdGhpcy53aWR0aFJhdGlvKTtcbiAgICAgIHZhciBpbmRleCA9IHR5cGUgPT09ICdzdGFydCcgPyB0ZXh0Lmxlbmd0aCAtIGNoYXJhY3RlclJhdGlvIDogY2hhcmFjdGVyUmF0aW87XG4gICAgICB2YXIgX3NwbGl0VGV4dCRhdCA9IHNwbGl0VGV4dCh0ZXh0KS5hdChpbmRleCksXG4gICAgICAgIF9zcGxpdFRleHQkYXQyID0gX3NsaWNlZFRvQXJyYXkoX3NwbGl0VGV4dCRhdCwgMiksXG4gICAgICAgIGVuZCA9IF9zcGxpdFRleHQkYXQyWzBdLFxuICAgICAgICBzdGFydCA9IF9zcGxpdFRleHQkYXQyWzFdO1xuICAgICAgcmV0dXJuIHR5cGUgPT09ICdzdGFydCcgPyBzdGFydCA6IGVuZDtcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBFYXJseSByZXR1cm4gY2hlY2tzXG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNoZWNrSWZUcnVuY2F0aW9uSXNOZWVkZWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2soX3RoaXMuZnVsbFRleHQpO1xuICAgICAgaWYgKF90aGlzLmF2YWlsYWJsZVdpZHRoID49IF90aGlzLnRleHRXaWR0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNoZWNrU3VmZmljaWVudEVsbGlwc2lzV2lkdGhcIiwgZnVuY3Rpb24gKHRydW5jYXRpb24pIHtcbiAgICAgIHZhciB0ZXh0VG9DaGVjayA9IHRydW5jYXRpb24gPT09ICdzdGFydEVuZCcgPyBcIlwiLmNvbmNhdChfdGhpcy5lbGxpcHNpcywgXCIgXCIpLmNvbmNhdChfdGhpcy5lbGxpcHNpcykgLy8gc3RhcnRFbmQgbmVlZHMgYSBsaXR0bGUgbW9yZSBzcGFjZVxuICAgICAgOiBfdGhpcy5lbGxpcHNpcztcbiAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKHRleHRUb0NoZWNrKTtcbiAgICAgIGlmIChfdGhpcy50ZXh0V2lkdGggPj0gX3RoaXMuYXZhaWxhYmxlV2lkdGggKiAwLjkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIHRydW5jYXRpb24gZWxsaXBzaXMgaXMgbGFyZ2VyIHRoYW4gdGhlIGF2YWlsYWJsZSB3aWR0aC4gTm8gdGV4dCBjYW4gYmUgcmVuZGVyZWQuJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2hlY2tUcnVuY2F0aW9uT2Zmc2V0V2lkdGhcIiwgZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKHRleHQpO1xuICAgICAgaWYgKF90aGlzLnRleHRXaWR0aCA+IF90aGlzLmF2YWlsYWJsZVdpZHRoKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBwYXNzZWQgdHJ1bmNhdGlvbk9mZnNldCBpcyB0b28gbGFyZ2UgZm9yIHRoZSBhdmFpbGFibGUgd2lkdGguIFRydW5jYXRpbmcgdGhlIG9mZnNldCBpbnN0ZWFkLicpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogVHJ1bmNhdGlvbiB0eXBlcyBsb2dpYy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVuc1xuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0cnVuY2F0ZVN0YXJ0XCIsIGZ1bmN0aW9uICh0cnVuY2F0aW9uT2Zmc2V0KSB7XG4gICAgICB2YXIgdHJ1bmNhdGVkVGV4dCA9IF90aGlzLmZ1bGxUZXh0O1xuICAgICAgdmFyIGxlYWRpbmdUZXh0ID0gJyc7XG4gICAgICB2YXIgY29tYmluZWRUZXh0ID0gZnVuY3Rpb24gY29tYmluZWRUZXh0KCkge1xuICAgICAgICByZXR1cm4gbGVhZGluZ1RleHQgKyB0cnVuY2F0ZWRUZXh0O1xuICAgICAgfTtcbiAgICAgIGlmICh0cnVuY2F0aW9uT2Zmc2V0KSB7XG4gICAgICAgIHZhciBfc3BsaXRUZXh0JGF0MyA9IHNwbGl0VGV4dChfdGhpcy5mdWxsVGV4dCkuYXQodHJ1bmNhdGlvbk9mZnNldCk7XG4gICAgICAgIHZhciBfc3BsaXRUZXh0JGF0NCA9IF9zbGljZWRUb0FycmF5KF9zcGxpdFRleHQkYXQzLCAyKTtcbiAgICAgICAgbGVhZGluZ1RleHQgPSBfc3BsaXRUZXh0JGF0NFswXTtcbiAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IF9zcGxpdFRleHQkYXQ0WzFdO1xuICAgICAgICB2YXIgd2lkdGhDaGVjayA9IGxlYWRpbmdUZXh0ICsgX3RoaXMuZWxsaXBzaXM7XG4gICAgICAgIGlmIChfdGhpcy5jaGVja1RydW5jYXRpb25PZmZzZXRXaWR0aCh3aWR0aENoZWNrKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gbGVhZGluZ1RleHQ7XG4gICAgICAgICAgbGVhZGluZ1RleHQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBHZXQgdGV4dCB3aWR0aCByYXRpbyB3aWR0aCBhY2NvdW50aW5nIGZvciBhbnkgdHJ1bmNhdGlvbiBvZmZzZXQgdGV4dCxcbiAgICAgIC8vIGFuZCBndWVzc3RpbWF0ZSBhbiBpbml0aWFsIHRydW5jYXRlZCBzdHJpbmdcbiAgICAgIF90aGlzLnNldFRleHRXaWR0aFJhdGlvKHRydW5jYXRlZFRleHQsIGxlYWRpbmdUZXh0KTtcbiAgICAgIHRydW5jYXRlZFRleHQgPSBfdGhpcy5nZXRUZXh0RnJvbVJhdGlvKHRydW5jYXRlZFRleHQsICdzdGFydCcpO1xuICAgICAgbGVhZGluZ1RleHQgKz0gX3RoaXMuZWxsaXBzaXM7XG4gICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayhjb21iaW5lZFRleHQoKSk7XG4gICAgICB3aGlsZSAoX3RoaXMudGV4dFdpZHRoID4gX3RoaXMuYXZhaWxhYmxlV2lkdGgpIHtcbiAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IHJlbW92ZUZpcnN0Q2hhcmFjdGVyKHRydW5jYXRlZFRleHQpO1xuICAgICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayhjb21iaW5lZFRleHQoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tYmluZWRUZXh0KCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRydW5jYXRlRW5kXCIsIGZ1bmN0aW9uICh0cnVuY2F0aW9uT2Zmc2V0KSB7XG4gICAgICB2YXIgdHJ1bmNhdGVkVGV4dCA9IF90aGlzLmZ1bGxUZXh0O1xuICAgICAgdmFyIHRyYWlsaW5nVGV4dCA9ICcnO1xuICAgICAgdmFyIGNvbWJpbmVkVGV4dCA9IGZ1bmN0aW9uIGNvbWJpbmVkVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRydW5jYXRlZFRleHQgKyB0cmFpbGluZ1RleHQ7XG4gICAgICB9O1xuICAgICAgaWYgKHRydW5jYXRpb25PZmZzZXQpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gX3RoaXMuZnVsbFRleHQubGVuZ3RoIC0gdHJ1bmNhdGlvbk9mZnNldDtcbiAgICAgICAgdmFyIF9zcGxpdFRleHQkYXQ1ID0gc3BsaXRUZXh0KF90aGlzLmZ1bGxUZXh0KS5hdChpbmRleCk7XG4gICAgICAgIHZhciBfc3BsaXRUZXh0JGF0NiA9IF9zbGljZWRUb0FycmF5KF9zcGxpdFRleHQkYXQ1LCAyKTtcbiAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IF9zcGxpdFRleHQkYXQ2WzBdO1xuICAgICAgICB0cmFpbGluZ1RleHQgPSBfc3BsaXRUZXh0JGF0NlsxXTtcbiAgICAgICAgdmFyIHdpZHRoQ2hlY2sgPSBfdGhpcy5lbGxpcHNpcyArIHRyYWlsaW5nVGV4dDtcbiAgICAgICAgaWYgKF90aGlzLmNoZWNrVHJ1bmNhdGlvbk9mZnNldFdpZHRoKHdpZHRoQ2hlY2spID09PSBmYWxzZSkge1xuICAgICAgICAgIHRydW5jYXRlZFRleHQgPSB0cmFpbGluZ1RleHQ7XG4gICAgICAgICAgdHJhaWxpbmdUZXh0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHRleHQgd2lkdGggcmF0aW8gd2lkdGggYWNjb3VudGluZyBmb3IgYW55IHRydW5jYXRpb24gb2Zmc2V0IHRleHQsXG4gICAgICAvLyBhbmQgZ3Vlc3N0aW1hdGUgYW4gaW5pdGlhbCB0cnVuY2F0ZWQgc3RyaW5nXG4gICAgICBfdGhpcy5zZXRUZXh0V2lkdGhSYXRpbyh0cnVuY2F0ZWRUZXh0LCB0cmFpbGluZ1RleHQpO1xuICAgICAgdHJ1bmNhdGVkVGV4dCA9IF90aGlzLmdldFRleHRGcm9tUmF0aW8odHJ1bmNhdGVkVGV4dCwgJ2VuZCcpO1xuICAgICAgdHJhaWxpbmdUZXh0ID0gX3RoaXMuZWxsaXBzaXMgKyB0cmFpbGluZ1RleHQ7XG4gICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayhjb21iaW5lZFRleHQoKSk7XG4gICAgICB3aGlsZSAoX3RoaXMudGV4dFdpZHRoID4gX3RoaXMuYXZhaWxhYmxlV2lkdGgpIHtcbiAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IHJlbW92ZUxhc3RDaGFyYWN0ZXIodHJ1bmNhdGVkVGV4dCk7XG4gICAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKGNvbWJpbmVkVGV4dCgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21iaW5lZFRleHQoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidHJ1bmNhdGVTdGFydEVuZEF0UG9zaXRpb25cIiwgZnVuY3Rpb24gKHRydW5jYXRpb25Qb3NpdGlvbikge1xuICAgICAgLy8gU3BsaXQgdGhlIHRleHQgZnJvbSB0aGUgYW5jaG9yIHBvc2l0aW9uLCB1c2luZyB0aGUgd2lkdGggcmF0aW9cbiAgICAgIC8vIHRvIGdldCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBpbmRpY2VzIGZyb20gdGhlIHBvc2l0aW9uXG4gICAgICBfdGhpcy5zZXRUZXh0V2lkdGhSYXRpbygpO1xuICAgICAgdmFyIGNoYXJhY3RlclJhdGlvID0gTWF0aC5mbG9vcihfdGhpcy5mdWxsVGV4dC5sZW5ndGggKiBfdGhpcy53aWR0aFJhdGlvIC8gMik7XG4gICAgICB2YXIgdHJ1bmNhdGVTdGFydCA9IHRydW5jYXRpb25Qb3NpdGlvbiAtIGNoYXJhY3RlclJhdGlvO1xuICAgICAgdmFyIHRydW5jYXRlRW5kID0gdHJ1bmNhdGlvblBvc2l0aW9uICsgY2hhcmFjdGVyUmF0aW87XG5cbiAgICAgIC8vIElmIGVpdGhlciBvZiB0aGUgYXBwcm94aW1hdGUgc3RhcnQvZW5kIHRydW5jYXRpb24gaW5kaWNlcyBnbyBiZXlvbmQgdGhlXG4gICAgICAvLyBib3VuZHMgb2YgdGhlIGFjdHVhbCB0ZXh0LCB3ZSBjYW4gc2ltcGx5IHVzZSBlbmQgb3Igc3RhcnQgdHJ1bmNhdGlvbiBpbnN0ZWFkXG4gICAgICBpZiAodHJ1bmNhdGVTdGFydCA8IDApIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnRydW5jYXRlRW5kKCk7XG4gICAgICB9XG4gICAgICBpZiAodHJ1bmNhdGVFbmQgPj0gX3RoaXMuZnVsbFRleHQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy50cnVuY2F0ZVN0YXJ0KCk7XG4gICAgICB9XG4gICAgICB2YXIgdHJ1bmNhdGVkVGV4dCA9IF90aGlzLmZ1bGxUZXh0LnN1YnN0cmluZyh0cnVuY2F0ZVN0YXJ0LCB0cnVuY2F0ZUVuZCk7XG4gICAgICB2YXIgY29tYmluZWRUZXh0ID0gZnVuY3Rpb24gY29tYmluZWRUZXh0KCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuZWxsaXBzaXMgKyB0cnVuY2F0ZWRUZXh0ICsgX3RoaXMuZWxsaXBzaXM7XG4gICAgICB9O1xuICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2soY29tYmluZWRUZXh0KCkpO1xuICAgICAgdmFyIGFsdGVybmF0aW5nO1xuICAgICAgd2hpbGUgKF90aGlzLnRleHRXaWR0aCA+IF90aGlzLmF2YWlsYWJsZVdpZHRoKSB7XG4gICAgICAgIHRydW5jYXRlZFRleHQgPSBhbHRlcm5hdGluZyA/IHJlbW92ZUxhc3RDaGFyYWN0ZXIodHJ1bmNhdGVkVGV4dCkgOiByZW1vdmVGaXJzdENoYXJhY3Rlcih0cnVuY2F0ZWRUZXh0KTtcbiAgICAgICAgYWx0ZXJuYXRpbmcgPSAhYWx0ZXJuYXRpbmc7XG4gICAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKGNvbWJpbmVkVGV4dCgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21iaW5lZFRleHQoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidHJ1bmNhdGVTdGFydEVuZEF0TWlkZGxlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBtaWRkbGVQb3NpdGlvbiA9IE1hdGguZmxvb3IoX3RoaXMuZnVsbFRleHQubGVuZ3RoIC8gMik7XG4gICAgICByZXR1cm4gX3RoaXMudHJ1bmNhdGVTdGFydEVuZEF0UG9zaXRpb24obWlkZGxlUG9zaXRpb24pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0cnVuY2F0ZU1pZGRsZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbWlkZGxlUG9zaXRpb24gPSBNYXRoLmZsb29yKF90aGlzLmZ1bGxUZXh0Lmxlbmd0aCAvIDIpO1xuICAgICAgdmFyIF9zcGxpdFRleHQkYXQ3ID0gc3BsaXRUZXh0KF90aGlzLmZ1bGxUZXh0KS5hdChtaWRkbGVQb3NpdGlvbiksXG4gICAgICAgIF9zcGxpdFRleHQkYXQ4ID0gX3NsaWNlZFRvQXJyYXkoX3NwbGl0VGV4dCRhdDcsIDIpLFxuICAgICAgICBmaXJzdEhhbGYgPSBfc3BsaXRUZXh0JGF0OFswXSxcbiAgICAgICAgc2Vjb25kSGFsZiA9IF9zcGxpdFRleHQkYXQ4WzFdO1xuICAgICAgX3RoaXMuc2V0VGV4dFdpZHRoUmF0aW8oKTtcbiAgICAgIGZpcnN0SGFsZiA9IF90aGlzLmdldFRleHRGcm9tUmF0aW8oZmlyc3RIYWxmLCAnZW5kJyk7XG4gICAgICBzZWNvbmRIYWxmID0gX3RoaXMuZ2V0VGV4dEZyb21SYXRpbyhzZWNvbmRIYWxmLCAnc3RhcnQnKTtcbiAgICAgIHZhciBjb21iaW5lZFRleHQgPSBmdW5jdGlvbiBjb21iaW5lZFRleHQoKSB7XG4gICAgICAgIHJldHVybiBmaXJzdEhhbGYgKyBfdGhpcy5lbGxpcHNpcyArIHNlY29uZEhhbGY7XG4gICAgICB9O1xuICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2soY29tYmluZWRUZXh0KCkpO1xuICAgICAgdmFyIGFsdGVybmF0aW5nO1xuICAgICAgd2hpbGUgKF90aGlzLnRleHRXaWR0aCA+IF90aGlzLmF2YWlsYWJsZVdpZHRoKSB7XG4gICAgICAgIGFsdGVybmF0aW5nID0gIWFsdGVybmF0aW5nO1xuICAgICAgICBpZiAoYWx0ZXJuYXRpbmcpIHtcbiAgICAgICAgICBmaXJzdEhhbGYgPSByZW1vdmVMYXN0Q2hhcmFjdGVyKGZpcnN0SGFsZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Vjb25kSGFsZiA9IHJlbW92ZUZpcnN0Q2hhcmFjdGVyKHNlY29uZEhhbGYpO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKGNvbWJpbmVkVGV4dCgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21iaW5lZFRleHQoKTtcbiAgICB9KTtcbiAgICBfdGhpcy5mdWxsVGV4dCA9IGZ1bGxUZXh0O1xuICAgIF90aGlzLmVsbGlwc2lzID0gZWxsaXBzaXM7XG4gICAgX3RoaXMuYXZhaWxhYmxlV2lkdGggPSBfYXZhaWxhYmxlV2lkdGg7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhUcnVuY2F0aW9uVXRpbHMsIF9DYW52YXNUZXh0VXRpbHMpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKFRydW5jYXRpb25VdGlscywgW3tcbiAgICBrZXk6IFwidGV4dFdpZHRoXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1Z1BlcmZvcm1hbmNlKSB7XG4gICAgICAgIHRoaXMuZGVidWdDb3VudGVyKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gX2dldChfZ2V0UHJvdG90eXBlT2YoVHJ1bmNhdGlvblV0aWxzLnByb3RvdHlwZSksIFwidGV4dFdpZHRoXCIsIHRoaXMpO1xuICAgIH1cbiAgfV0pO1xufShDYW52YXNUZXh0VXRpbHMpO1xuXG4vKipcbiAqIERSWSBjaGFyYWN0ZXIvc3Vic3RyaW5nIHV0aWxzXG4gKi9cblxudmFyIHJlbW92ZUxhc3RDaGFyYWN0ZXIgPSBmdW5jdGlvbiByZW1vdmVMYXN0Q2hhcmFjdGVyKHRleHQpIHtcbiAgcmV0dXJuIHRleHQuc3Vic3RyaW5nKDAsIHRleHQubGVuZ3RoIC0gMSk7XG59O1xudmFyIHJlbW92ZUZpcnN0Q2hhcmFjdGVyID0gZnVuY3Rpb24gcmVtb3ZlRmlyc3RDaGFyYWN0ZXIodGV4dCkge1xuICByZXR1cm4gdGV4dC5zdWJzdHJpbmcoMSk7XG59O1xudmFyIHNwbGl0VGV4dCA9IGZ1bmN0aW9uIHNwbGl0VGV4dCh0ZXh0KSB7XG4gIHJldHVybiB7XG4gICAgYXQ6IGZ1bmN0aW9uIGF0KGluZGV4KSB7XG4gICAgICByZXR1cm4gW3RleHQuc3Vic3RyaW5nKDAsIGluZGV4KSwgdGV4dC5zdWJzdHJpbmcoaW5kZXgpXTtcbiAgICB9XG4gIH07XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgdmFyIGV1aVRleHRUcnVuY2F0ZVN0eWxlcyA9IHtcbiAgZXVpVGV4dFRydW5jYXRlOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgbmFtZTogXCI3bzVxbnotZXVpVGV4dFRydW5jYXRlXCIsXG4gICAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7bGFiZWw6ZXVpVGV4dFRydW5jYXRlO1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCI3bzVxbnotZXVpVGV4dFRydW5jYXRlXCIsXG4gICAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7bGFiZWw6ZXVpVGV4dFRydW5jYXRlO1wiLFxuICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICB9LFxuICAvKipcbiAgICogVGhlIGJlbG93IENTUyBpcyBhIGhhY2sgdG8gZ2V0IGRvdWJsZSBjbGlja2luZyBhbmQgc2VsZWN0aW5nIHRoZSAqZnVsbCogdGV4dFxuICAgKiBpbnN0ZWFkIG9mIHRoZSB0cnVuY2F0ZWQgdGV4dCAodXNlZnVsIGZvciBjb3B5aW5nL3Bhc3RpbmcsIGFuZCBtaW1pY3MgaG93XG4gICAqIGB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpc2Agd29ya3MpLlxuICAgKlxuICAgKiBSZWFsIHRhbGs6IEknbSBsb3drZXkgYW1hemVkIGl0IHdvcmtzIGFuZCBpdCB3b3VsZG4ndCBzdXJwcmlzZSBtZSBpZiB3ZSByYW4gaW50b1xuICAgKiBjcm9zcy1icm93c2VyIGlzc3VlcyB3aXRoIHRoaXMgYXQgc29tZSBwb2ludC4gSG9wZWZ1bGx5IENTUyBuYXRpdmVseSBpbXBsZW1lbnRzXG4gICAqIGN1c3RvbSB0ZXh0IHRydW5jYXRpb24gc29tZSBkYXkgKGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vlcy8zOTM3KVxuICAgKiBhbmQgdGhlcmUnbGwgYmUgbm8gbmVlZCBmb3IgdGhlIGVudGlyZSBjb21wb25lbnQgYXQgdGhhdCBwb2ludCBcdUQ4M0RcdURFNEZcbiAgICovXG4gIC8vIE1ha2VzIHRoZSB0cnVuY2F0ZWQgdGV4dCB1bnNlbGVjdGFibGUvdW4tY2xpY2thYmxlXG4gIGV1aVRleHRUcnVuY2F0ZV9fdHJ1bmNhdGVkVGV4dDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgIG5hbWU6IFwiMXNqeGtiMS1ldWlUZXh0VHJ1bmNhdGVfX3RydW5jYXRlZFRleHRcIixcbiAgICBzdHlsZXM6IFwidXNlci1zZWxlY3Q6bm9uZTtwb2ludGVyLWV2ZW50czpub25lO2xhYmVsOmV1aVRleHRUcnVuY2F0ZV9fdHJ1bmNhdGVkVGV4dDtcIlxuICB9IDoge1xuICAgIG5hbWU6IFwiMXNqeGtiMS1ldWlUZXh0VHJ1bmNhdGVfX3RydW5jYXRlZFRleHRcIixcbiAgICBzdHlsZXM6IFwidXNlci1zZWxlY3Q6bm9uZTtwb2ludGVyLWV2ZW50czpub25lO2xhYmVsOmV1aVRleHRUcnVuY2F0ZV9fdHJ1bmNhdGVkVGV4dDtcIixcbiAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgfSxcbiAgLy8gUG9zaXRpb25zIHRoZSBmdWxsIHRleHQgb24gdG9wIG9mIHRoZSB0cnVuY2F0ZWQgdGV4dCAoc28gdGhhdCBjbGlja2luZyB0YXJnZXRzIGl0KVxuICAvLyBhbmQgZ2l2ZXMgaXQgYSBjb2xvciBvcGFjaXR5IG9mIDAgc28gdGhhdCBpdCdzIG5vdCBhY3R1YWxseSB2aXNpYmxlXG4gIGV1aVRleHRUcnVuY2F0ZV9fZnVsbFRleHQ6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICBuYW1lOiBcIjE5YzlncWktZXVpVGV4dFRydW5jYXRlX19mdWxsVGV4dFwiLFxuICAgIHN0eWxlczogXCJwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO292ZXJmbG93OmhpZGRlbjtjb2xvcjpyZ2JhKDAsIDAsIDAsIDApO0BzdXBwb3J0cyAoLXdlYmtpdC1oeXBoZW5zOiBub25lKXt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO307bGFiZWw6ZXVpVGV4dFRydW5jYXRlX19mdWxsVGV4dDtcIlxuICB9IDoge1xuICAgIG5hbWU6IFwiMTljOWdxaS1ldWlUZXh0VHJ1bmNhdGVfX2Z1bGxUZXh0XCIsXG4gICAgc3R5bGVzOiBcInBvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7b3ZlcmZsb3c6aGlkZGVuO2NvbG9yOnJnYmEoMCwgMCwgMCwgMCk7QHN1cHBvcnRzICgtd2Via2l0LWh5cGhlbnM6IG5vbmUpe3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7fTtsYWJlbDpldWlUZXh0VHJ1bmNhdGVfX2Z1bGxUZXh0O1wiLFxuICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICB9XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJzdHlsZVwiLCBcImxpbmVzXCIsIFwiY2xvbmVFbGVtZW50XCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBpc1ZhbGlkRWxlbWVudCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgc3R5bGVzID0ge1xuICBldWlUZXh0QmxvY2tUcnVuY2F0ZTogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgIG5hbWU6IFwiMWNmbTNnZS1ldWlUZXh0QmxvY2tUcnVuY2F0ZVwiLFxuICAgIHN0eWxlczogXCJkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWxpbmUtY2xhbXA6MDtvdmVyZmxvdzpoaWRkZW47bGFiZWw6ZXVpVGV4dEJsb2NrVHJ1bmNhdGU7XCJcbiAgfSA6IHtcbiAgICBuYW1lOiBcIjFjZm0zZ2UtZXVpVGV4dEJsb2NrVHJ1bmNhdGVcIixcbiAgICBzdHlsZXM6IFwiZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7LXdlYmtpdC1saW5lLWNsYW1wOjA7b3ZlcmZsb3c6aGlkZGVuO2xhYmVsOmV1aVRleHRCbG9ja1RydW5jYXRlO1wiLFxuICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICB9XG59O1xuZXhwb3J0IHZhciBFdWlUZXh0QmxvY2tUcnVuY2F0ZSA9IGZ1bmN0aW9uIEV1aVRleHRCbG9ja1RydW5jYXRlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgbGluZXMgPSBfcmVmLmxpbmVzLFxuICAgIGNsb25lRWxlbWVudCA9IF9yZWYuY2xvbmVFbGVtZW50LFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUZXh0QmxvY2tUcnVuY2F0ZScsIGNsYXNzTmFtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBzdHlsZXMuZXVpVGV4dEJsb2NrVHJ1bmNhdGU7XG4gIHZhciBpbmxpbmVTdHlsZXMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgICBXZWJraXRMaW5lQ2xhbXA6IGxpbmVzXG4gICAgfSwgc3R5bGUpO1xuICB9LCBbbGluZXMsIHN0eWxlXSk7XG4gIGlmICggLyojX19QVVJFX18qL2lzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJiBjbG9uZUVsZW1lbnQpIHtcbiAgICByZXR1cm4gY2xvbmVFbGVtZW50V2l0aENzcyhjaGlsZHJlbiwge1xuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBzdHlsZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjaGlsZHJlbi5wcm9wcy5zdHlsZSksIGlubGluZVN0eWxlcyksXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lLCBjbGFzc2VzKVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgc3R5bGU6IGlubGluZVN0eWxlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH1cbn07XG5FdWlUZXh0QmxvY2tUcnVuY2F0ZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIE51bWJlciBvZiBsaW5lcyBvZiB0ZXh0IHRvIHRydW5jYXRlIHRvXG4gICAgICAgKi9cbiAgbGluZXM6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICAgKiBBcHBsaWVzIHN0eWxpbmcgdG8gdGhlIGNoaWxkIGVsZW1lbnQgaW5zdGVhZCBvZiByZW5kZXJpbmcgYSBwYXJlbnQgd3JhcHBlciBgZGl2YC5cbiAgICAgICAqIENhbiBvbmx5IGJlIHVzZWQgd2hlbiB3cmFwcGluZyBhICpzaW5nbGUqIGNoaWxkIGVsZW1lbnQvdGFnLCBhbmQgbm90IHJhdyB0ZXh0LlxuICAgICAgICovXG4gIGNsb25lRWxlbWVudDogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDb21ib0JveFRpdGxlID0gZnVuY3Rpb24gRXVpQ29tYm9Cb3hUaXRsZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hUaXRsZVwiXG4gIH0sIGNoaWxkcmVuKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIG1hdGhXaXRoVW5pdHMsIGV1aVNjcm9sbEJhclN0eWxlcywgZXVpVGV4dEJyZWFrV29yZCwgZXVpVGV4dFRydW5jYXRlIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpVGl0bGUgfSBmcm9tICcuLi8uLi90aXRsZS90aXRsZS5zdHlsZXMnO1xuZXhwb3J0IHZhciBMSVNUX01BWF9IRUlHSFQgPSAyMDA7XG5leHBvcnQgdmFyIGV1aUNvbWJvQm94T3B0aW9uTGlzdFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNvbWJvQm94T3B0aW9uTGlzdFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUNvbWJvQm94T3B0aW9uTGlzdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXgtaGVpZ2h0JywgXCJcIi5jb25jYXQoTElTVF9NQVhfSEVJR0hULCBcInB4XCIpKSwgXCIgb3ZlcmZsb3c6aGlkZGVuOy5ldWlUZXh0VHJ1bmNhdGV7cG9pbnRlci1ldmVudHM6bm9uZTt9LmV1aUNvbWJvQm94T3B0aW9uX19jb250ZW50V3JhcHBlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO30uZXVpQ29tYm9Cb3hPcHRpb25fX2NvbnRlbnR7ZmxleDoxO3RleHQtYWxpZ246c3RhcnQ7XCIsIGV1aVRleHRUcnVuY2F0ZSgpLCBcIjt9LmV1aUNvbWJvQm94T3B0aW9uX19lbXB0eVN0YXRlVGV4dHtmbGV4OjE7dGV4dC1hbGlnbjpzdGFydDtcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIDApLCBcIjt9LmV1aUNvbWJvQm94T3B0aW9uX19lbnRlckJhZGdle1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tbGVmdCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIjt9LmV1aUNvbWJvQm94VGl0bGV7ZGlzcGxheTpmbGV4O1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnMpLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLXRvcCcsIG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuc2l6ZS5zLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggKyAxO1xuICAgIH0pKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctYm90dG9tJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiIFwiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJyksIFwiO307bGFiZWw6ZXVpQ29tYm9Cb3hPcHRpb25MaXN0O1wiKSxcbiAgICBldWlDb21ib0JveE9wdGlvbkxpc3RfX3ZpcnR1YWxpemF0aW9uOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZUNvbnRleHQpLCBcIjs7bGFiZWw6ZXVpQ29tYm9Cb3hPcHRpb25MaXN0X192aXJ0dWFsaXphdGlvbjtcIiksXG4gICAgZXVpQ29tYm9Cb3hPcHRpb25zTGlzdF9fZW1wdHk6IC8qI19fUFVSRV9fKi9jc3MoXCJwYWRkaW5nOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiO3RleHQtYWxpZ246Y2VudGVyO1wiLCBldWlUZXh0QnJlYWtXb3JkKCksIFwiOztsYWJlbDpldWlDb21ib0JveE9wdGlvbnNMaXN0X19lbXB0eTtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUNvbWJvQm94U3R5bGVzID0ge1xuICBldWlDb21ib0JveDogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnJlbGF0aXZlO1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCAnYXV0bycpLCBcIjs7bGFiZWw6ZXVpQ29tYm9Cb3g7XCIpLFxuICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIilcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJhY3RpdmVQYWdlXCIsIFwiaXRlbXNQZXJQYWdlXCIsIFwiaXRlbXNQZXJQYWdlT3B0aW9uc1wiLCBcInNob3dQZXJQYWdlT3B0aW9uc1wiLCBcIm9uQ2hhbmdlSXRlbXNQZXJQYWdlXCIsIFwib25DaGFuZ2VQYWdlXCIsIFwicGFnZUNvdW50XCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uLy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudUl0ZW0sIEV1aUNvbnRleHRNZW51UGFuZWwgfSBmcm9tICcuLi8uLi9jb250ZXh0X21lbnUnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uLy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpUGFnaW5hdGlvbiB9IGZyb20gJy4uLy4uL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgRXVpUG9wb3ZlciB9IGZyb20gJy4uLy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgdXNlUHJvcHNXaXRoQ29tcG9uZW50RGVmYXVsdHMgfSBmcm9tICcuLi8uLi9wcm92aWRlci9jb21wb25lbnRfZGVmYXVsdHMnO1xuaW1wb3J0IHsgZXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMgfSBmcm9tICcuL3RhYmxlX3BhZ2luYXRpb25fZGVmYXVsdHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVQYWdpbmF0aW9uID0gZnVuY3Rpb24gRXVpVGFibGVQYWdpbmF0aW9uKHByb3BzKSB7XG4gIHZhciBfdXNlUHJvcHNXaXRoQ29tcG9uZW4gPSB1c2VQcm9wc1dpdGhDb21wb25lbnREZWZhdWx0cygnRXVpVGFibGVQYWdpbmF0aW9uJywgcHJvcHMpLFxuICAgIGFjdGl2ZVBhZ2UgPSBfdXNlUHJvcHNXaXRoQ29tcG9uZW4uYWN0aXZlUGFnZSxcbiAgICBfdXNlUHJvcHNXaXRoQ29tcG9uZW4yID0gX3VzZVByb3BzV2l0aENvbXBvbmVuLml0ZW1zUGVyUGFnZSxcbiAgICBpdGVtc1BlclBhZ2UgPSBfdXNlUHJvcHNXaXRoQ29tcG9uZW4yID09PSB2b2lkIDAgPyBldWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cy5pdGVtc1BlclBhZ2UgOiBfdXNlUHJvcHNXaXRoQ29tcG9uZW4yLFxuICAgIF91c2VQcm9wc1dpdGhDb21wb25lbjMgPSBfdXNlUHJvcHNXaXRoQ29tcG9uZW4uaXRlbXNQZXJQYWdlT3B0aW9ucyxcbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gX3VzZVByb3BzV2l0aENvbXBvbmVuMyA9PT0gdm9pZCAwID8gZXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMuaXRlbXNQZXJQYWdlT3B0aW9ucyA6IF91c2VQcm9wc1dpdGhDb21wb25lbjMsXG4gICAgX3VzZVByb3BzV2l0aENvbXBvbmVuNCA9IF91c2VQcm9wc1dpdGhDb21wb25lbi5zaG93UGVyUGFnZU9wdGlvbnMsXG4gICAgc2hvd1BlclBhZ2VPcHRpb25zID0gX3VzZVByb3BzV2l0aENvbXBvbmVuNCA9PT0gdm9pZCAwID8gZXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMuc2hvd1BlclBhZ2VPcHRpb25zIDogX3VzZVByb3BzV2l0aENvbXBvbmVuNCxcbiAgICBvbkNoYW5nZUl0ZW1zUGVyUGFnZSA9IF91c2VQcm9wc1dpdGhDb21wb25lbi5vbkNoYW5nZUl0ZW1zUGVyUGFnZSxcbiAgICBvbkNoYW5nZVBhZ2UgPSBfdXNlUHJvcHNXaXRoQ29tcG9uZW4ub25DaGFuZ2VQYWdlLFxuICAgIHBhZ2VDb3VudCA9IF91c2VQcm9wc1dpdGhDb21wb25lbi5wYWdlQ291bnQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdXNlUHJvcHNXaXRoQ29tcG9uZW4sIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgaXNQb3BvdmVyT3BlbiA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0SXNQb3BvdmVyT3BlbiA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciB0b2dnbGVQb3BvdmVyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHNldElzUG9wb3Zlck9wZW4oZnVuY3Rpb24gKGlzT3Blbikge1xuICAgICAgcmV0dXJuICFpc09wZW47XG4gICAgfSk7XG4gIH0sIFtdKTtcbiAgdmFyIGNsb3NlUG9wb3ZlciA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJc1BvcG92ZXJPcGVuKGZhbHNlKTtcbiAgfSwgW10pO1xuICB2YXIgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgIHNpemU6IFwieHNcIixcbiAgICBjb2xvcjogXCJ0ZXh0XCIsXG4gICAgaWNvblR5cGU6IFwiYXJyb3dEb3duXCIsXG4gICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVQYWdpbmF0aW9uUG9wb3ZlckJ1dHRvblwiLFxuICAgIG9uQ2xpY2s6IHRvZ2dsZVBvcG92ZXJcbiAgfSwgaXRlbXNQZXJQYWdlID09PSAwID8gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLmFsbFJvd3NcIixcbiAgICBkZWZhdWx0OiBcIlNob3dpbmcgYWxsIHJvd3NcIlxuICB9KSA6IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5yb3dzUGVyUGFnZVwiLFxuICAgIGRlZmF1bHQ6IFwiUm93cyBwZXIgcGFnZVwiXG4gIH0pLCBcIjogXCIsIGl0ZW1zUGVyUGFnZSkpO1xuICB2YXIgaXRlbXMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaXRlbXNQZXJQYWdlT3B0aW9ucy5tYXAoZnVuY3Rpb24gKGl0ZW1zUGVyUGFnZU9wdGlvbikge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVJdGVtLCB7XG4gICAgICAgIGtleTogaXRlbXNQZXJQYWdlT3B0aW9uLFxuICAgICAgICBpY29uOiBpdGVtc1BlclBhZ2VPcHRpb24gPT09IGl0ZW1zUGVyUGFnZSA/ICdjaGVjaycgOiAnZW1wdHknLFxuICAgICAgICBcImFyaWEtY3VycmVudFwiOiBpdGVtc1BlclBhZ2VPcHRpb24gPT09IGl0ZW1zUGVyUGFnZSA/ICd0cnVlJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICBjbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgICBvbkNoYW5nZUl0ZW1zUGVyUGFnZSA9PT0gbnVsbCB8fCBvbkNoYW5nZUl0ZW1zUGVyUGFnZSA9PT0gdm9pZCAwIHx8IG9uQ2hhbmdlSXRlbXNQZXJQYWdlKGl0ZW1zUGVyUGFnZU9wdGlvbik7XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0YWJsZVBhZ2luYXRpb24tXCIuY29uY2F0KGl0ZW1zUGVyUGFnZU9wdGlvbiwgXCItcm93c1wiKVxuICAgICAgfSwgaXRlbXNQZXJQYWdlT3B0aW9uID09PSAwID8gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5yb3dzUGVyUGFnZU9wdGlvblNob3dBbGxSb3dzXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiU2hvdyBhbGwgcm93c1wiXG4gICAgICB9KSA6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlUYWJsZVBhZ2luYXRpb24ucm93c1BlclBhZ2VPcHRpb25cIixcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgcm93c1BlclBhZ2U6IGl0ZW1zUGVyUGFnZU9wdGlvblxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiBcIntyb3dzUGVyUGFnZX0gcm93c1wiXG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH0sIFtpdGVtc1BlclBhZ2VPcHRpb25zLCBpdGVtc1BlclBhZ2UsIG9uQ2hhbmdlSXRlbXNQZXJQYWdlLCBjbG9zZVBvcG92ZXJdKTtcbiAgdmFyIGl0ZW1zUGVyUGFnZVBvcG92ZXIgPSBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXIsIHtcbiAgICBidXR0b246IGJ1dHRvbixcbiAgICBpc09wZW46IGlzUG9wb3Zlck9wZW4sXG4gICAgY2xvc2VQb3BvdmVyOiBjbG9zZVBvcG92ZXIsXG4gICAgcGFuZWxQYWRkaW5nU2l6ZTogXCJub25lXCIsXG4gICAgYW5jaG9yUG9zaXRpb246IFwidXBSaWdodFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVQYW5lbCwge1xuICAgIGl0ZW1zOiBpdGVtcyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVQYWdpbmF0aW9uUm93T3B0aW9uc1wiXG4gIH0pKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAganVzdGlmeUNvbnRlbnQ6IFwic3BhY2VCZXR3ZWVuXCIsXG4gICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICByZXNwb25zaXZlOiBmYWxzZSxcbiAgICB3cmFwOiB0cnVlLFxuICAgIGd1dHRlclNpemU6IFwic1wiLFxuICAgIGNsYXNzTmFtZTogXCJldWkteFNjcm9sbFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICBncm93OiBmYWxzZVxuICB9LCBzaG93UGVyUGFnZU9wdGlvbnMgJiYgaXRlbXNQZXJQYWdlUG9wb3ZlciksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICBncm93OiBmYWxzZVxuICB9LCBpdGVtc1BlclBhZ2UgPiAwICYmIF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbiwgX2V4dGVuZHMoe1xuICAgIHBhZ2VDb3VudDogcGFnZUNvdW50LFxuICAgIGFjdGl2ZVBhZ2U6IGFjdGl2ZVBhZ2UsXG4gICAgb25QYWdlQ2xpY2s6IG9uQ2hhbmdlUGFnZVxuICB9LCByZXN0KSkpKTtcbn07XG5FdWlUYWJsZVBhZ2luYXRpb24ucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBPcHRpb24gdG8gY29tcGxldGVseSBoaWRlIHRoZSBcIlJvd3MgcGVyIHBhZ2VcIiBzZWxlY3Rvci5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgc2hvd1BlclBhZ2VPcHRpb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQ3VycmVudCBzZWxlY3Rpb24gZm9yIFwiUm93cyBwZXIgcGFnZVwiLlxuICAgICAqIFBhc3MgYDBgIHRvIGRpc3BsYXkgdGhlIHNlbGVjdGVkIFwiU2hvdyBhbGxcIiBvcHRpb24gYW5kIGhpZGUgdGhlIHBhZ2luYXRpb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICBpdGVtc1BlclBhZ2U6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAqIEN1c3RvbSBhcnJheSBvZiBvcHRpb25zIGZvciBcIlJvd3MgcGVyIHBhZ2VcIi5cbiAgICAgKiBQYXNzIGAwYCBhcyBvbmUgb2YgdGhlIG9wdGlvbnMgdG8gY3JlYXRlIGEgXCJTaG93IGFsbFwiIG9wdGlvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFsxMCwgMjUsIDUwXVxuICAgICAqL1xuICBpdGVtc1BlclBhZ2VPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQpLFxuICAvKipcbiAgICAgKiBDbGljayBoYW5kbGVyIHRoYXQgcGFzc2VzIGJhY2sgc2VsZWN0ZWQgYHBhZ2VTaXplYCBudW1iZXJcbiAgICAgKi9cbiAgb25DaGFuZ2VJdGVtc1BlclBhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNoYW5nZVBhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBSZXF1aXJlcyB0aGUgYGlkYCBvZiB0aGUgdGFibGUgYmVpbmcgY29udHJvbGxlZFxuICAgICAqL1xuICBcImFyaWEtY29udHJvbHNcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJwYWdlQ291bnRcIiwgXCJhY3RpdmVQYWdlXCIsIFwib25QYWdlQ2xpY2tcIiwgXCJjb21wcmVzc2VkXCIsIFwiYXJpYS1jb250cm9sc1wiLCBcInJlc3BvbnNpdmVcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpUGFnaW5hdGlvbkJ1dHRvbiB9IGZyb20gJy4vcGFnaW5hdGlvbl9idXR0b24nO1xuaW1wb3J0IHsgRXVpSTE4biwgdXNlRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gJy4uL3RleHQnO1xuaW1wb3J0IHsgRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93IH0gZnJvbSAnLi9wYWdpbmF0aW9uX2J1dHRvbl9hcnJvdyc7XG5pbXBvcnQgeyB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzLCB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGV1aVBhZ2luYXRpb25TdHlsZXMgfSBmcm9tICcuL3BhZ2luYXRpb24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgTUFYX1ZJU0lCTEVfUEFHRVMgPSA1O1xudmFyIE5VTUJFUl9TVVJST1VORElOR19QQUdFUyA9IE1hdGguZmxvb3IoTUFYX1ZJU0lCTEVfUEFHRVMgKiAwLjUpO1xuZXhwb3J0IHZhciBFdWlQYWdpbmF0aW9uID0gZnVuY3Rpb24gRXVpUGFnaW5hdGlvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJHBhZ2VDb3VudCA9IF9yZWYucGFnZUNvdW50LFxuICAgIHBhZ2VDb3VudCA9IF9yZWYkcGFnZUNvdW50ID09PSB2b2lkIDAgPyAxIDogX3JlZiRwYWdlQ291bnQsXG4gICAgX3JlZiRhY3RpdmVQYWdlID0gX3JlZi5hY3RpdmVQYWdlLFxuICAgIGFjdGl2ZVBhZ2UgPSBfcmVmJGFjdGl2ZVBhZ2UgPT09IHZvaWQgMCA/IDAgOiBfcmVmJGFjdGl2ZVBhZ2UsXG4gICAgX3JlZiRvblBhZ2VDbGljayA9IF9yZWYub25QYWdlQ2xpY2ssXG4gICAgb25QYWdlQ2xpY2sgPSBfcmVmJG9uUGFnZUNsaWNrID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoKSB7fSA6IF9yZWYkb25QYWdlQ2xpY2ssXG4gICAgX2NvbXByZXNzZWQgPSBfcmVmLmNvbXByZXNzZWQsXG4gICAgYXJpYUNvbnRyb2xzID0gX3JlZlsnYXJpYS1jb250cm9scyddLFxuICAgIF9yZWYkcmVzcG9uc2l2ZSA9IF9yZWYucmVzcG9uc2l2ZSxcbiAgICByZXNwb25zaXZlID0gX3JlZiRyZXNwb25zaXZlID09PSB2b2lkIDAgPyBbJ3hzJywgJ3MnXSA6IF9yZWYkcmVzcG9uc2l2ZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzKHJlc3BvbnNpdmUsICEhcmVzcG9uc2l2ZSk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlQYWdpbmF0aW9uU3R5bGVzKGV1aVRoZW1lKTtcblxuICAvLyBGb3JjZSB0byBgY29tcHJlc3NlZGAgdmVyc2lvbiBpZiBzcGVjaWZpZWQgb3Igd2l0aGluIHRoZSByZXNwb25zaXZlIGJyZWFrcG9pbnRzXG4gIHZhciBjb21wcmVzc2VkID0gX2NvbXByZXNzZWQgfHwgaXNSZXNwb25zaXZlO1xuICB2YXIgc2FmZUNsaWNrID0gZnVuY3Rpb24gc2FmZUNsaWNrKGUsIHBhZ2VJbmRleCkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoYXJpYUNvbnRyb2xzKSB7XG4gICAgICB2YXIgY29udHJvbGxlZEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhcmlhQ29udHJvbHMpO1xuICAgICAgaWYgKGNvbnRyb2xsZWRFbGVtZW50KSB7XG4gICAgICAgIGNvbnRyb2xsZWRFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIG9uUGFnZUNsaWNrKHBhZ2VJbmRleCk7XG4gIH07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUGFnaW5hdGlvbicsIGNsYXNzTmFtZSk7XG4gIHZhciBmaXJzdEJ1dHRvbiA9IChwYWdlQ291bnQgPCAxIHx8IGNvbXByZXNzZWQpICYmIF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LCB7XG4gICAgdHlwZTogXCJmaXJzdFwiLFxuICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCAwKTtcbiAgICB9LFxuICAgIGRpc2FibGVkOiBhY3RpdmVQYWdlID09PSAwXG4gIH0pO1xuICB2YXIgcHJldmlvdXNCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwicHJldmlvdXNcIixcbiAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgYWN0aXZlUGFnZSAtIDEpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGFjdGl2ZVBhZ2UgPT09IDBcbiAgfSk7XG4gIHZhciBuZXh0QnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3csIHtcbiAgICB0eXBlOiBcIm5leHRcIixcbiAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgYWN0aXZlUGFnZSArIDEpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGFjdGl2ZVBhZ2UgPT09IC0xIHx8IGFjdGl2ZVBhZ2UgPT09IHBhZ2VDb3VudCAtIDFcbiAgfSk7XG4gIHZhciBsYXN0QnV0dG9uID0gKHBhZ2VDb3VudCA8IDEgfHwgY29tcHJlc3NlZCkgJiYgX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3csIHtcbiAgICB0eXBlOiBcImxhc3RcIixcbiAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgcGFnZUNvdW50ID8gcGFnZUNvdW50IC0gMSA6IC0xKTtcbiAgICB9LFxuICAgIGRpc2FibGVkOiBhY3RpdmVQYWdlID09PSAtMSB8fCBhY3RpdmVQYWdlID09PSBwYWdlQ291bnQgLSAxXG4gIH0pO1xuICB2YXIgY2VudGVyUGFnZUNvdW50O1xuICBpZiAocGFnZUNvdW50KSB7XG4gICAgdmFyIHNoYXJlZEJ1dHRvblByb3BzID0ge1xuICAgICAgYWN0aXZlUGFnZTogYWN0aXZlUGFnZSxcbiAgICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgICAgc2FmZUNsaWNrOiBzYWZlQ2xpY2ssXG4gICAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudFxuICAgIH07XG4gICAgaWYgKGNvbXByZXNzZWQpIHtcbiAgICAgIGNlbnRlclBhZ2VDb3VudCA9IF9fX0Vtb3Rpb25KU1goRXVpVGV4dCwge1xuICAgICAgICBzaXplOiBcInNcIixcbiAgICAgICAgY3NzOiBzdHlsZXMuZXVpUGFnaW5hdGlvbl9fY29tcHJlc3NlZFRleHQsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19jb21wcmVzc2VkVGV4dFwiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbi5wYWdlT2ZUb3RhbENvbXByZXNzZWRcIixcbiAgICAgICAgZGVmYXVsdDogXCJ7cGFnZX0gb2Yge3RvdGFsfVwiLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICBwYWdlOiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBudWxsLCBhY3RpdmVQYWdlICsgMSksXG4gICAgICAgICAgdG90YWw6IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIHBhZ2VDb3VudClcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcGFnZXMgPSBbXTtcbiAgICAgIHZhciBmaXJzdFBhZ2VJblJhbmdlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oYWN0aXZlUGFnZSAtIE5VTUJFUl9TVVJST1VORElOR19QQUdFUywgcGFnZUNvdW50IC0gTUFYX1ZJU0lCTEVfUEFHRVMpKTtcbiAgICAgIHZhciBsYXN0UGFnZUluUmFuZ2UgPSBNYXRoLm1pbihwYWdlQ291bnQsIGZpcnN0UGFnZUluUmFuZ2UgKyBNQVhfVklTSUJMRV9QQUdFUyk7XG4gICAgICBmb3IgKHZhciBpID0gZmlyc3RQYWdlSW5SYW5nZSwgaW5kZXggPSAwOyBpIDwgbGFzdFBhZ2VJblJhbmdlOyBpKyssIGluZGV4KyspIHtcbiAgICAgICAgcGFnZXMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgcGFnZUluZGV4OiBpLFxuICAgICAgICAgIGtleTogaVxuICAgICAgICB9LCBzaGFyZWRCdXR0b25Qcm9wcykpKTtcbiAgICAgIH1cbiAgICAgIHZhciBmaXJzdFBhZ2VCdXR0b25zID0gW107XG4gICAgICBpZiAoZmlyc3RQYWdlSW5SYW5nZSA+IDApIHtcbiAgICAgICAgZmlyc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAga2V5OiAwXG4gICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgICBpZiAoZmlyc3RQYWdlSW5SYW5nZSA+IDEgJiYgZmlyc3RQYWdlSW5SYW5nZSAhPT0gMikge1xuICAgICAgICAgIGZpcnN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIGtleTogXCJzdGFydGluZ0VsbGlwc2VzXCIsXG4gICAgICAgICAgICB0b2tlbjogXCJldWlQYWdpbmF0aW9uLmZpcnN0UmFuZ2VBcmlhTGFiZWxcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiU2tpcHBpbmcgcGFnZXMgMiB0byB7bGFzdFBhZ2V9XCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgbGFzdFBhZ2U6IGZpcnN0UGFnZUluUmFuZ2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBmdW5jdGlvbiAoZmlyc3RSYW5nZUFyaWFMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsaVwiLCB7XG4gICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBmaXJzdFJhbmdlQXJpYUxhYmVsLFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpUGFnaW5hdGlvbl9faXRlbVwiLFxuICAgICAgICAgICAgICBjc3M6IHN0eWxlcy5ldWlQYWdpbmF0aW9uX19lbGxpcHNpc1xuICAgICAgICAgICAgfSwgXCJcXHUyMDI2XCIpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaXJzdFBhZ2VJblJhbmdlID09PSAyKSB7XG4gICAgICAgICAgZmlyc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIHBhZ2VJbmRleDogMSxcbiAgICAgICAgICAgIGtleTogMVxuICAgICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgbGFzdFBhZ2VCdXR0b25zID0gW107XG4gICAgICBpZiAobGFzdFBhZ2VJblJhbmdlIDwgcGFnZUNvdW50KSB7XG4gICAgICAgIGlmIChsYXN0UGFnZUluUmFuZ2UgKyAxID09PSBwYWdlQ291bnQgLSAxKSB7XG4gICAgICAgICAgbGFzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgcGFnZUluZGV4OiBsYXN0UGFnZUluUmFuZ2UsXG4gICAgICAgICAgICBrZXk6IGxhc3RQYWdlSW5SYW5nZVxuICAgICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3RQYWdlSW5SYW5nZSA8IHBhZ2VDb3VudCAtIDEpIHtcbiAgICAgICAgICBsYXN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIGtleTogXCJlbmRpbmdFbGxpcHNlc1wiLFxuICAgICAgICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbi5sYXN0UmFuZ2VBcmlhTGFiZWxcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiU2tpcHBpbmcgcGFnZXMge2ZpcnN0UGFnZX0gdG8ge2xhc3RQYWdlfVwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGZpcnN0UGFnZTogbGFzdFBhZ2VJblJhbmdlICsgMSxcbiAgICAgICAgICAgICAgbGFzdFBhZ2U6IHBhZ2VDb3VudCAtIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBmdW5jdGlvbiAobGFzdFJhbmdlQXJpYUxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGxhc3RSYW5nZUFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25fX2l0ZW1cIixcbiAgICAgICAgICAgICAgY3NzOiBzdHlsZXMuZXVpUGFnaW5hdGlvbl9fZWxsaXBzaXNcbiAgICAgICAgICAgIH0sIFwiXFx1MjAyNlwiKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgIHBhZ2VJbmRleDogcGFnZUNvdW50IC0gMSxcbiAgICAgICAgICBrZXk6IHBhZ2VDb3VudCAtIDFcbiAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICB9XG4gICAgICB2YXIgc2VsZWN0YWJsZVBhZ2VzID0gcGFnZXM7XG4gICAgICB2YXIgYWNjZXNzaWJsZU5hbWUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3RbJ2FyaWEtbGFiZWwnXSAmJiB7XG4gICAgICAgICdhcmlhLWxhYmVsJzogcmVzdFsnYXJpYS1sYWJlbCddXG4gICAgICB9KSwgcmVzdFsnYXJpYS1sYWJlbGxlZGJ5J10gJiYge1xuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogcmVzdFsnYXJpYS1sYWJlbGxlZGJ5J11cbiAgICAgIH0pO1xuICAgICAgY2VudGVyUGFnZUNvdW50ID0gX19fRW1vdGlvbkpTWChcInVsXCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25fX2xpc3RcIixcbiAgICAgICAgY3NzOiBzdHlsZXMuZXVpUGFnaW5hdGlvbl9fbGlzdFxuICAgICAgfSwgYWNjZXNzaWJsZU5hbWUpLCBmaXJzdFBhZ2VCdXR0b25zLCBzZWxlY3RhYmxlUGFnZXMsIGxhc3RQYWdlQnV0dG9ucyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWxsIHRoZSBpMThuIHN0cmluZ3MgdXNlZCB0byBidWlsZCB0aGUgd2hvbGUgU1Itb25seSB0ZXh0XG4gIHZhciBsYXN0TGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLmxhc3QnLCAnTGFzdCcpO1xuICB2YXIgcGFnZUxhYmVsID0gdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbi5wYWdlJywgJ1BhZ2UnKTtcbiAgdmFyIG9mTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLm9mJywgJ29mJyk7XG4gIHZhciBjb2xsZWN0aW9uTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLmNvbGxlY3Rpb24nLCAnY29sbGVjdGlvbicpO1xuICB2YXIgZnJvbUVuZExhYmVsID0gdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbi5mcm9tRW5kTGFiZWwnLCAnZnJvbSBlbmQnKTtcblxuICAvLyBCYXNlZCBvbiB0aGUgYGFjdGl2ZVBhZ2VgIGNvdW50LCBidWlsZCB0aGUgZnJvbnQgb2YgdGhlIFNSLW9ubHkgdGV4dFxuICAvLyBpLmUuIGBQYWdlIDFgLCBgUGFnZSAyIGZyb20gZW5kYCwgYExhc3QgUGFnZWBcbiAgdmFyIGFjY2Vzc2libGVQYWdlU3RyaW5nID0gZnVuY3Rpb24gYWNjZXNzaWJsZVBhZ2VTdHJpbmcoKSB7XG4gICAgaWYgKGFjdGl2ZVBhZ2UgPCAtMSkgcmV0dXJuIFwiXCIuY29uY2F0KHBhZ2VMYWJlbCwgXCIgXCIpLmNvbmNhdChNYXRoLmFicyhhY3RpdmVQYWdlKSwgXCIgXCIpLmNvbmNhdChmcm9tRW5kTGFiZWwpO1xuICAgIGlmIChhY3RpdmVQYWdlID09PSAtMSkgcmV0dXJuIFwiXCIuY29uY2F0KGxhc3RMYWJlbCwgXCIgXCIpLmNvbmNhdChwYWdlTGFiZWwpO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChwYWdlTGFiZWwsIFwiIFwiKS5jb25jYXQoYWN0aXZlUGFnZSArIDEpO1xuICB9O1xuXG4gIC8vIElmIGBwYWdlQ291bnRgIGlzIHVua25vd24gY2FsbCBpdCBgY29sbGVjdGlvbmBcbiAgdmFyIGFjY2Vzc2libGVDb2xsZWN0aW9uU3RyaW5nID0gcGFnZUNvdW50ID09PSAwID8gY29sbGVjdGlvbkxhYmVsIDogcGFnZUNvdW50LnRvU3RyaW5nKCk7XG5cbiAgLy8gQ3JlYXRlIHRoZSB3aG9sZSBzdHJpbmcgd2l0aCB0b3RhbCBwYWdlQ291bnQgb3IgYGNvbGxlY3Rpb25gXG4gIHZhciBhY2Nlc3NpYmxlUGFnZUNvdW50ID0gXCJcIi5jb25jYXQoYWNjZXNzaWJsZVBhZ2VTdHJpbmcoKSwgXCIgXCIpLmNvbmNhdChvZkxhYmVsLCBcIiBcIikuY29uY2F0KGFjY2Vzc2libGVDb2xsZWN0aW9uU3RyaW5nKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJuYXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogc3R5bGVzLmV1aVBhZ2luYXRpb24sXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBcImFyaWEtYXRvbWljXCI6IFwidHJ1ZVwiLFxuICAgIFwiYXJpYS1yZWxldmFudFwiOiBcImFkZGl0aW9ucyB0ZXh0XCIsXG4gICAgcm9sZTogXCJzdGF0dXNcIlxuICB9LCBhY2Nlc3NpYmxlUGFnZUNvdW50KSksIGZpcnN0QnV0dG9uLCBwcmV2aW91c0J1dHRvbiwgY2VudGVyUGFnZUNvdW50LCBuZXh0QnV0dG9uLCBsYXN0QnV0dG9uKTtcbn07XG5FdWlQYWdpbmF0aW9uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMuXG4gICAgICogUGFzcyBgMGAgaWYgdG90YWwgY291bnQgaXMgdW5rbm93bi5cbiAgICAgKi9cbiAgcGFnZUNvdW50OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBwYWdlIHVzaW5nIGEgemVybyBiYXNlZCBpbmRleC5cbiAgICAgKiBTbyBpZiB5b3Ugc2V0IHRoZSBhY3RpdmVQYWdlIHRvIDEsIGl0IHdpbGwgYWN0aXZhdGUgdGhlIHNlY29uZCBwYWdlLlxuICAgICAqIFBhc3MgYC0xYCBmb3IgZm9yY2luZyB0byBsYXN0IHBhZ2UuXG4gICAgICovXG4gIGFjdGl2ZVBhZ2U6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAqIENsaWNrIGhhbmRsZXIgdGhhdCBwYXNzZXMgYmFjayB0aGUgaW50ZXJuYWxseSBjYWxjdWxhdGVkIGBhY3RpdmVQYWdlYCBpbmRleFxuICAgICAqL1xuICBvblBhZ2VDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIElmIHRydWUsIHdpbGwgb25seSBzaG93IG5leHQvcHJldiBhcnJvd3MgYW5kIHNpbXBsaWZpZWQgbnVtYmVyIHNldC5cbiAgICAgKi9cbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIElmIHBhc3NlZCBpbiwgcGFzc2VzIHZhbHVlIHRocm91Z2ggdG8gZWFjaCBidXR0b24gdG8gc2V0IGFyaWEtY29udHJvbHMuXG4gICAgICovXG4gIFwiYXJpYS1jb250cm9sc1wiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBBdXRvbWF0aWNhbGx5IHJlZHVjZXMgdG8gdGhlIGBjb21wcmVzc2VkYCB2ZXJzaW9uIG9uIHNtYWxsZXIgc2NyZWVucy5cbiAgICAgKiBSZW1vdmUgY29tcGxldGVseSB3aXRoIGBmYWxzZWAgb3IgcHJvdmlkZSB5b3VyIG93biBsaXN0IG9mIHJlc3BvbnNpdmUgYnJlYWtwb2ludHMuXG4gICAgICovXG4gIHJlc3BvbnNpdmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbZmFsc2VdKSwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSlcbn07XG52YXIgUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIgPSBmdW5jdGlvbiBQYWdpbmF0aW9uQnV0dG9uV3JhcHBlcihfcmVmMikge1xuICB2YXIgcGFnZUluZGV4ID0gX3JlZjIucGFnZUluZGV4LFxuICAgIF9yZWYyJGluTGlzdCA9IF9yZWYyLmluTGlzdCxcbiAgICBpbkxpc3QgPSBfcmVmMiRpbkxpc3QgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRpbkxpc3QsXG4gICAgYWN0aXZlUGFnZSA9IF9yZWYyLmFjdGl2ZVBhZ2UsXG4gICAgcGFnZUNvdW50ID0gX3JlZjIucGFnZUNvdW50LFxuICAgIGFyaWFDb250cm9scyA9IF9yZWYyLmFyaWFDb250cm9scyxcbiAgICBzYWZlQ2xpY2sgPSBfcmVmMi5zYWZlQ2xpY2ssXG4gICAgZGlzYWJsZWQgPSBfcmVmMi5kaXNhYmxlZDtcbiAgdmFyIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbiwge1xuICAgIGlzQWN0aXZlOiBwYWdlSW5kZXggPT09IGFjdGl2ZVBhZ2UsXG4gICAgdG90YWxQYWdlczogcGFnZUNvdW50LFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBwYWdlSW5kZXgpO1xuICAgIH0sXG4gICAgcGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgXCJhcmlhLWNvbnRyb2xzXCI6IGFyaWFDb250cm9scyxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgfSk7XG4gIGlmIChpbkxpc3QpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19pdGVtXCJcbiAgICB9LCBidXR0b24pO1xuICB9XG4gIHJldHVybiBidXR0b247XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiaXNBY3RpdmVcIiwgXCJwYWdlSW5kZXhcIiwgXCJ0b3RhbFBhZ2VzXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5IH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpUGFnaW5hdGlvbkJ1dHRvblN0eWxlcyB9IGZyb20gJy4vcGFnaW5hdGlvbl9idXR0b24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVBhZ2luYXRpb25CdXR0b24gPSBmdW5jdGlvbiBFdWlQYWdpbmF0aW9uQnV0dG9uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGlzQWN0aXZlID0gX3JlZi5pc0FjdGl2ZSxcbiAgICBwYWdlSW5kZXggPSBfcmVmLnBhZ2VJbmRleCxcbiAgICB0b3RhbFBhZ2VzID0gX3JlZi50b3RhbFBhZ2VzLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVBhZ2luYXRpb25CdXR0b25TdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgcGFnaW5hdGlvbkJ1dHRvbkNzcyA9IFtzdHlsZXMuZXVpUGFnaW5hdGlvbkJ1dHRvbiwgaXNBY3RpdmUgJiYgc3R5bGVzLmlzQWN0aXZlXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQYWdpbmF0aW9uQnV0dG9uJywgY2xhc3NOYW1lKTtcbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgIGNzczogcGFnaW5hdGlvbkJ1dHRvbkNzcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc2l6ZTogJ3MnLFxuICAgIGNvbG9yOiAndGV4dCcsXG4gICAgJ2RhdGEtdGVzdC1zdWJqJzogXCJwYWdpbmF0aW9uLWJ1dHRvbi1cIi5jb25jYXQocGFnZUluZGV4KSxcbiAgICBpc0Rpc2FibGVkOiBpc0FjdGl2ZVxuICB9LCBpc0FjdGl2ZSAmJiB7XG4gICAgJ2FyaWEtY3VycmVudCc6IHRydWVcbiAgfSksIHJlc3RbJ2FyaWEtY29udHJvbHMnXSAmJiB7XG4gICAgaHJlZjogXCIjXCIuY29uY2F0KHJlc3RbJ2FyaWEtY29udHJvbHMnXSlcbiAgfSksIHJlc3QpO1xuICB2YXIgcGFnZU51bWJlciA9IHBhZ2VJbmRleCArIDE7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICB0b2tlbjogXCJldWlQYWdpbmF0aW9uQnV0dG9uLmxvbmdQYWdlU3RyaW5nXCIsXG4gICAgZGVmYXVsdDogXCJQYWdlIHtwYWdlfSBvZiB7dG90YWxQYWdlc31cIixcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHBhZ2U6IHBhZ2VOdW1iZXIsXG4gICAgICB0b3RhbFBhZ2VzOiB0b3RhbFBhZ2VzXG4gICAgfVxuICB9LCBmdW5jdGlvbiAobG9uZ1BhZ2VTdHJpbmcpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlQYWdpbmF0aW9uQnV0dG9uLnNob3J0UGFnZVN0cmluZ1wiLFxuICAgICAgZGVmYXVsdDogXCJQYWdlIHtwYWdlfVwiLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgIHBhZ2U6IHBhZ2VOdW1iZXJcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoc2hvcnRQYWdlU3RyaW5nKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwgX2V4dGVuZHMoe1xuICAgICAgICBcImFyaWEtbGFiZWxcIjogdG90YWxQYWdlcyA/IGxvbmdQYWdlU3RyaW5nIDogc2hvcnRQYWdlU3RyaW5nXG4gICAgICB9LCBwcm9wcyksIHBhZ2VOdW1iZXIpO1xuICAgIH0pO1xuICB9KTtcbn07XG5FdWlQYWdpbmF0aW9uQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIEFueSBvZiB0aGUgbmFtZWQgY29sb3IgcGFsZXR0ZSBvcHRpb25zLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG4gIGZsdXNoOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5hbnksXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgYDxzcGFuPmAgd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgYDxzcGFuPmAgd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICAvKipcbiAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbdW5kZWZpbmVkXSldKSxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgYDxzcGFuPmAgd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0L2NoaWxkcmVuIG9ubHkgKG5vdCBpY29uKVxuICAgICAqXG4gICAgICogVGhpcyBzcGFuIHdyYXBwZXIgY2FuIGJlIHJlbW92ZWQgYnkgcGFzc2luZyBgdGV4dFByb3BzPXtmYWxzZX1gLlxuICAgICAqL1xuICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgaXNBY3RpdmU6IFByb3BUeXBlcy5ib29sLFxuICBwYWdlSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgdG90YWxQYWdlczogUHJvcFR5cGVzLm51bWJlclxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuZXhwb3J0IHZhciBldWlQYWdpbmF0aW9uQnV0dG9uU3R5bGVzID0gZnVuY3Rpb24gZXVpUGFnaW5hdGlvbkJ1dHRvblN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlQYWdpbmF0aW9uQnV0dG9uOiAvKiNfX1BVUkVfXyovY3NzKFwib3V0bGluZS1vZmZzZXQ6LVwiLCBldWlUaGVtZS5mb2N1cy53aWR0aCwgXCI7O2xhYmVsOmV1aVBhZ2luYXRpb25CdXR0b247XCIpLFxuICAgIC8vIFN0YXRlc1xuICAgIGlzQWN0aXZlOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0LmJvbGQsIFwiO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgXCI7JiwmOmhvdmVye2N1cnNvcjpkZWZhdWx0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fTtsYWJlbDppc0FjdGl2ZTtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uSWNvbiB9IGZyb20gJy4uL2J1dHRvbi9idXR0b25faWNvbic7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgdXNlRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlQYWdpbmF0aW9uQnV0dG9uU3R5bGVzIH0gZnJvbSAnLi9wYWdpbmF0aW9uX2J1dHRvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciB0eXBlVG9JY29uVHlwZU1hcCA9IHtcbiAgZmlyc3Q6ICdhcnJvd1N0YXJ0JyxcbiAgcHJldmlvdXM6ICdhcnJvd0xlZnQnLFxuICBuZXh0OiAnYXJyb3dSaWdodCcsXG4gIGxhc3Q6ICdhcnJvd0VuZCdcbn07XG5leHBvcnQgdmFyIFRZUEVTID0ga2V5c09mKHR5cGVUb0ljb25UeXBlTWFwKTtcbmV4cG9ydCB2YXIgRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93ID0gZnVuY3Rpb24gRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93KF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIGFyaWFDb250cm9scyA9IF9yZWYuYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2s7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlQYWdpbmF0aW9uQnV0dG9uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGxhYmVscyA9IHtcbiAgICBmaXJzdDogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LmZpcnN0UGFnZScsICdGaXJzdCBwYWdlJyksXG4gICAgcHJldmlvdXM6IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5wcmV2aW91c1BhZ2UnLCAnUHJldmlvdXMgcGFnZScpLFxuICAgIG5leHQ6IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5uZXh0UGFnZScsICdOZXh0IHBhZ2UnKSxcbiAgICBsYXN0OiB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cubGFzdFBhZ2UnLCAnTGFzdCBwYWdlJylcbiAgfTtcbiAgdmFyIGJ1dHRvblByb3BzID0ge307XG4gIGlmIChhcmlhQ29udHJvbHMgJiYgIWRpc2FibGVkKSB7XG4gICAgYnV0dG9uUHJvcHMuaHJlZiA9IFwiI1wiLmNvbmNhdChhcmlhQ29udHJvbHMpO1xuICAgIGJ1dHRvblByb3BzWydhcmlhLWNvbnRyb2xzJ10gPSBhcmlhQ29udHJvbHM7XG4gIH1cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwgX2V4dGVuZHMoe1xuICAgIGNzczogc3R5bGVzLmV1aVBhZ2luYXRpb25CdXR0b24sXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlQYWdpbmF0aW9uQXJyb3dCdXR0b24nLCBjbGFzc05hbWUpLFxuICAgIGNvbG9yOiBcInRleHRcIixcbiAgICBcImFyaWEtbGFiZWxcIjogbGFiZWxzW3R5cGVdLFxuICAgIHRpdGxlOiBkaXNhYmxlZCA/IHVuZGVmaW5lZCA6IGxhYmVsc1t0eXBlXSxcbiAgICBpc0Rpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJwYWdpbmF0aW9uLWJ1dHRvbi1cIi5jb25jYXQodHlwZSksXG4gICAgaWNvblR5cGU6IHR5cGVUb0ljb25UeXBlTWFwW3R5cGVdXG4gIH0sIGJ1dHRvblByb3BzKSk7XG59O1xuRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LnByb3BUeXBlcyA9IHtcbiAgdHlwZTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGFyaWFDb250cm9sczogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbENTU1dpdGhGYWxsYmFjaywgZXVpU2Nyb2xsQmFyU3R5bGVzLCBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFkYmQycmMtZXVpUGFnaW5hdGlvbl9fbGlzdFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2xhYmVsOmV1aVBhZ2luYXRpb25fX2xpc3Q7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWRiZDJyYy1ldWlQYWdpbmF0aW9uX19saXN0XCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7bGFiZWw6ZXVpUGFnaW5hdGlvbl9fbGlzdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlQYWdpbmF0aW9uU3R5bGVzID0gZnVuY3Rpb24gZXVpUGFnaW5hdGlvblN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlQYWdpbmF0aW9uOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZUNvbnRleHQpLCBcIiBkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO1wiLCBsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrKCdvdmVyZmxvdy15JywgJ2hpZGRlbicpLCBcIiBcIiwgbG9naWNhbENTU1dpdGhGYWxsYmFjaygnb3ZlcmZsb3cteCcsICdhdXRvJyksIFwiOztsYWJlbDpldWlQYWdpbmF0aW9uO1wiKSxcbiAgICAvLyBFbGVtZW50c1xuICAgIGV1aVBhZ2luYXRpb25fX2NvbXByZXNzZWRUZXh0OiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bGluZS1oZWlnaHQ6MTs+c3BhbntcIiwgbG9naWNhbENTUygnbWFyZ2luLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnMpLCBcIiBmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQuc2VtaUJvbGQsIFwiOyY6Zmlyc3Qtb2YtdHlwZXtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnlUZXh0LCBcIjt9fTtsYWJlbDpldWlQYWdpbmF0aW9uX19jb21wcmVzc2VkVGV4dDtcIiksXG4gICAgZXVpUGFnaW5hdGlvbl9fbGlzdDogX3JlZixcbiAgICBldWlQYWdpbmF0aW9uX19lbGxpcHNpczogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LCBcIjtmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKS5mb250U2l6ZSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUucyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBldWlUaGVtZS5zaXplLmwpLCBcIjs7bGFiZWw6ZXVpUGFnaW5hdGlvbl9fZWxsaXBzaXM7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb21wb25lbnREZWZhdWx0cyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVyL2NvbXBvbmVudF9kZWZhdWx0cyc7XG4vKipcbiAqIFRhYmxlIHBhZ2luYXRpb24gcHJvcCBkZWZhdWx0cyBsaXZlIGluIGEgc2VwYXJhdGUgZmlsZSBiZWNhdXNlXG4gKiB0aGV5J2xsIGJlIHJldXNlZCBieSBiYXNpYyB0YWJsZXMgYW5kIGRhdGFncmlkcyBhcyBmYWxsYmFja3NcbiAqL1xuXG5leHBvcnQgdmFyIGV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzID0ge1xuICBpdGVtc1BlclBhZ2U6IDEwLFxuICBpdGVtc1BlclBhZ2VPcHRpb25zOiBbMTAsIDI1LCA1MF0sXG4gIHNob3dQZXJQYWdlT3B0aW9uczogdHJ1ZVxufTtcbmV4cG9ydCB2YXIgdXNlRXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiB1c2VFdWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cygpIHtcbiAgdmFyIGNvbnN1bWVyRGVmYXVsdHMgPSB1c2VDb21wb25lbnREZWZhdWx0cygpLkV1aVRhYmxlUGFnaW5hdGlvbjtcbiAgcmV0dXJuIHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzKSwgY29uc3VtZXJEZWZhdWx0cyk7XG4gIH0sIFtjb25zdW1lckRlZmF1bHRzXSk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiaXNTZWxlY3RlZFwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJocmVmXCIsIFwidGFyZ2V0XCIsIFwicmVsXCIsIFwicHJlcGVuZFwiLCBcImFwcGVuZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBldWlUYWJTdHlsZXMsIGV1aVRhYkNvbnRlbnRTdHlsZXMgfSBmcm9tICcuL3RhYi5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpVGFic0NvbnRleHQgfSBmcm9tICcuL3RhYnNfY29udGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWIgPSBmdW5jdGlvbiBFdWlUYWIoX3JlZikge1xuICB2YXIgaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX2Rpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIHJlbCA9IF9yZWYucmVsLFxuICAgIHByZXBlbmQgPSBfcmVmLnByZXBlbmQsXG4gICAgYXBwZW5kID0gX3JlZi5hcHBlbmQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgX3VzZUNvbnRleHQgPSB1c2VDb250ZXh0KEV1aVRhYnNDb250ZXh0KSxcbiAgICBzaXplID0gX3VzZUNvbnRleHQuc2l6ZSxcbiAgICBleHBhbmQgPSBfdXNlQ29udGV4dC5leHBhbmQ7XG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgdmFyIGRpc2FibGVkID0gX2Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcblxuICAvLyBLZWVwIENTUyBjbGFzc25hbWVzIGZvciByZWZlcmVuY2VcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWInLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFiLWlzU2VsZWN0ZWQnOiBpc1NlbGVjdGVkXG4gIH0pO1xuICB2YXIgdGFiU3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFiU3R5bGVzKTtcbiAgdmFyIGNzc1RhYlN0eWxlcyA9IFt0YWJTdHlsZXMuZXVpVGFiLCBleHBhbmQgJiYgdGFiU3R5bGVzLmV4cGFuZGVkLCBkaXNhYmxlZCAmJiB0YWJTdHlsZXMuZGlzYWJsZWQuZGlzYWJsZWQsIGlzU2VsZWN0ZWQgJiYgKGRpc2FibGVkID8gdGFiU3R5bGVzLmRpc2FibGVkLnNlbGVjdGVkIDogdGFiU3R5bGVzLnNlbGVjdGVkKV07XG4gIHZhciB0YWJDb250ZW50U3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFiQ29udGVudFN0eWxlcyk7XG4gIHZhciBjc3NUYWJDb250ZW50U3R5bGVzID0gW3RhYkNvbnRlbnRTdHlsZXMuZXVpVGFiX19jb250ZW50LCBzaXplICYmIHRhYkNvbnRlbnRTdHlsZXNbc2l6ZV1dO1xuICB2YXIgcHJlcGVuZE5vZGUgPSBwcmVwZW5kICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFiX19wcmVwZW5kXCJcbiAgfSwgcHJlcGVuZCk7XG4gIHZhciBhcHBlbmROb2RlID0gYXBwZW5kICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFiX19hcHBlbmRcIlxuICB9LCBhcHBlbmQpO1xuXG4gIC8vICA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gIHRoaXMgaXMgYSBidXR0b24gYW5kIHBpZ2d5YmFjayBvZmYgaXRzIGRpc2FibGVkIHN0eWxlcy5cbiAgaWYgKGhyZWYgJiYgIWRpc2FibGVkKSB7XG4gICAgdmFyIHNlY3VyZVJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICByb2xlOiBcInRhYlwiLFxuICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6ICEhaXNTZWxlY3RlZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNzczogY3NzVGFiU3R5bGVzLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiBzZWN1cmVSZWxcbiAgICB9LCByZXN0KSwgcHJlcGVuZE5vZGUsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX2NvbnRlbnQgZXVpLXRleHRUcnVuY2F0ZVwiLFxuICAgICAgY3NzOiBjc3NUYWJDb250ZW50U3R5bGVzXG4gICAgfSwgY2hpbGRyZW4pLCBhcHBlbmROb2RlKTtcbiAgfVxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgcm9sZTogXCJ0YWJcIixcbiAgICBcImFyaWEtc2VsZWN0ZWRcIjogISFpc1NlbGVjdGVkLFxuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzVGFiU3R5bGVzLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICB9LCByZXN0KSwgcHJlcGVuZE5vZGUsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFiX19jb250ZW50IGV1aS10ZXh0VHJ1bmNhdGVcIixcbiAgICBjc3M6IGNzc1RhYkNvbnRlbnRTdHlsZXNcbiAgfSwgY2hpbGRyZW4pLCBhcHBlbmROb2RlKTtcbn07XG5FdWlUYWIucHJvcFR5cGVzID0ge1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBiZWZvcmUgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAqL1xuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBiZWZvcmUgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogUGxhY2VzIGNvbnRlbnQgYWZ0ZXIgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAqL1xuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBhZnRlciB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbWF0aFdpdGhVbml0cywgZXVpRm9udFNpemUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxMHRzbzc4LWV4cGFuZGVkXCIsXG4gIHN0eWxlczogXCJmbGV4LWJhc2lzOjAlO2ZsZXgtZ3JvdzoxO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGFiZWw6ZXhwYW5kZWQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTB0c283OC1leHBhbmRlZFwiLFxuICBzdHlsZXM6IFwiZmxleC1iYXNpczowJTtmbGV4LWdyb3c6MTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xhYmVsOmV4cGFuZGVkO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVRhYlN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYlN0eWxlcyhfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUYWI6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCAwKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUueHMpLCBcImZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5zZW1pQm9sZCwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50aXRsZSwgXCI7Jjpmb2N1c3tvdXRsaW5lLW9mZnNldDotXCIsIGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIjt9O2xhYmVsOmV1aVRhYjtcIiksXG4gICAgLy8gdmFyaWF0aW9uc1xuICAgIGV4cGFuZGVkOiBfcmVmLFxuICAgIHNlbGVjdGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiYm94LXNoYWRvdzppbnNldCAwIC1cIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaWNrLCBcIiAwIFwiLCBldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7O2xhYmVsOnNlbGVjdGVkO1wiKSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgZGlzYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZFRleHQsIFwiOztsYWJlbDpkaXNhYmxlZDtcIiksXG4gICAgICBzZWxlY3RlZDogLyojX19QVVJFX18qL2NzcyhcImJveC1zaGFkb3c6aW5zZXQgMCAtXCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGljaywgXCIgMCBcIiwgZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkVGV4dCwgXCI7O2xhYmVsOnNlbGVjdGVkO1wiKVxuICAgIH1cbiAgfTtcbn07XG5leHBvcnQgdmFyIGV1aVRhYkNvbnRlbnRTdHlsZXMgPSBmdW5jdGlvbiBldWlUYWJDb250ZW50U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpVGFiX19jb250ZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0W2V1aVRoZW1lLmZvbnQudGl0bGUud2VpZ2h0XSwgXCI7O2xhYmVsOmV1aVRhYl9fY29udGVudDtcIiksXG4gICAgLy8gc2l6ZXNcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC1zaXplOlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICd4cycpLmZvbnRTaXplLCBcIjtsaW5lLWhlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKS5mb250U2l6ZSwgXCI7bGluZS1oZWlnaHQ6XCIsIGV1aVRoZW1lLnNpemUueHhsLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAnbScpLmZvbnRTaXplLCBcIjtsaW5lLWhlaWdodDpcIiwgbWF0aFdpdGhVbml0cyhbZXVpVGhlbWUuc2l6ZS54bCwgZXVpVGhlbWUuc2l6ZS5zXSwgZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ICsgeTtcbiAgICB9KSwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC1zaXplOlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdsJykuZm9udFNpemUsIFwiO2xpbmUtaGVpZ2h0OlwiLCBtYXRoV2l0aFVuaXRzKFtldWlUaGVtZS5zaXplLnh4eGwsIGV1aVRoZW1lLnNpemUuc10sIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgICByZXR1cm4geCArIHk7XG4gICAgfSksIFwiOztsYWJlbDp4bDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIGNvbnRleHREZWZhdWx0cyA9IHtcbiAgZXhwYW5kOiBmYWxzZSxcbiAgc2l6ZTogJ20nXG59O1xuZXhwb3J0IHZhciBFdWlUYWJzQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KGNvbnRleHREZWZhdWx0cyk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImJvdHRvbUJvcmRlclwiLCBcImV4cGFuZFwiLCBcInNpemVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRhYnNTdHlsZXMgfSBmcm9tICcuL3RhYnMuc3R5bGVzJztcbmltcG9ydCB7IEV1aVRhYnNDb250ZXh0IH0gZnJvbSAnLi90YWJzX2NvbnRleHQnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ3MnLCAnbScsICdsJywgJ3hsJ107XG5leHBvcnQgdmFyIEV1aVRhYnMgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRib3R0b21Cb3JkZXIgPSBfcmVmLmJvdHRvbUJvcmRlcixcbiAgICBib3R0b21Cb3JkZXIgPSBfcmVmJGJvdHRvbUJvcmRlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkYm90dG9tQm9yZGVyLFxuICAgIF9yZWYkZXhwYW5kID0gX3JlZi5leHBhbmQsXG4gICAgZXhwYW5kID0gX3JlZiRleHBhbmQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRleHBhbmQsXG4gICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFicycsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJzU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGFicywgc3R5bGVzW3NpemVdLCBib3R0b21Cb3JkZXIgJiYgc3R5bGVzLmJvdHRvbUJvcmRlcl07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgY2hpbGRyZW4gJiYge1xuICAgIHJvbGU6ICd0YWJsaXN0J1xuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlUYWJzQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB7XG4gICAgICBleHBhbmQ6IGV4cGFuZCxcbiAgICAgIHNpemU6IHNpemVcbiAgICB9XG4gIH0sIGNoaWxkcmVuKSk7XG59KTtcbkV1aVRhYnMucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICAgKiBFdmVubHkgc3RyZXRjaGVzIGVhY2ggdGFiIHRvIGZpbGwgdGhlXG4gICAgICAgKiBob3Jpem9udGFsIHNwYWNlXG4gICAgICAgKi9cbiAgZXhwYW5kOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBBZGRzIGEgYm90dG9tIGJvcmRlciB0byBzZXBhcmF0ZSBpdCBmcm9tIHRoZSBjb250ZW50IGFmdGVyXG4gICAgICAgKi9cbiAgYm90dG9tQm9yZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBTaXplcyBhZmZlY3QgYm90aCBmb250IHNpemUgYW5kIG92ZXJhbGwgc2l6ZS5cbiAgICAgICAqIE9ubHkgdXNlIHRoZSBgeGxgIHNpemUgd2hlbiBkaXNwbGF5ZWQgYXMgcGFnZSB0aXRsZXMuXG4gICAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueVxufTtcbkV1aVRhYnMuZGlzcGxheU5hbWUgPSAnRXVpVGFicyc7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxDU1NXaXRoRmFsbGJhY2sgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aVRhYnNTdHlsZXMgPSBmdW5jdGlvbiBldWlUYWJzU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpVGFiczogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6ZmxleDtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1NXaXRoRmFsbGJhY2soJ292ZXJmbG93LXgnLCAnYXV0bycpLCBcIiBcIiwgbG9naWNhbENTU1dpdGhGYWxsYmFjaygnb3ZlcmZsb3cteScsICdoaWRkZW4nKSwgXCIgcG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MDs7bGFiZWw6ZXVpVGFicztcIiksXG4gICAgYm90dG9tQm9yZGVyOiAvKiNfX1BVUkVfXyovY3NzKFwiYm94LXNoYWRvdzppbnNldCAwIC1cIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIDAgXCIsIGV1aVRoZW1lLmJvcmRlci5jb2xvciwgXCI7O2xhYmVsOmJvdHRvbUJvcmRlcjtcIiksXG4gICAgLy8gc2l6ZXNcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLm0sIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLmJhc2UsIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLmwsIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2NzcyhcImdhcDpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnhsO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImV4cGFuZFwiLCBcImluaXRpYWxTZWxlY3RlZFRhYlwiLCBcIm9uVGFiQ2xpY2tcIiwgXCJzZWxlY3RlZFRhYlwiLCBcInNpemVcIiwgXCJ0YWJzXCIsIFwiYXV0b0ZvY3VzXCJdLFxuICBfZXhjbHVkZWQyID0gW1wiaWRcIiwgXCJuYW1lXCIsIFwiY29udGVudFwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgY3JlYXRlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVGFicyB9IGZyb20gJy4uL3RhYnMnO1xuaW1wb3J0IHsgRXVpVGFiIH0gZnJvbSAnLi4vdGFiJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG4vKipcbiAqIE1hcmtlZCBhcyBjb25zdCBzbyB0eXBlIGlzIGBbJ2luaXRpYWwnLCAnc2VsZWN0ZWQnXWAgaW5zdGVhZCBvZiBgc3RyaW5nW11gXG4gKi9cbmV4cG9ydCB2YXIgQVVUT0ZPQ1VTID0gWydpbml0aWFsJywgJ3NlbGVjdGVkJ107XG5leHBvcnQgdmFyIEV1aVRhYmJlZENvbnRlbnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpVGFiYmVkQ29udGVudChwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpVGFiYmVkQ29udGVudCk7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aVRhYmJlZENvbnRlbnQsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyb290SWRcIiwgaHRtbElkR2VuZXJhdG9yKCkoKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRhYnNSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZm9jdXNUYWJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRhcmdldFRhYiA9IF90aGlzLnRhYnNSZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKFwiI1wiLmNvbmNhdChfdGhpcy5zdGF0ZS5zZWxlY3RlZFRhYklkKSk7XG4gICAgICB0YXJnZXRUYWIuZm9jdXMoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaW5pdGlhbGl6ZUZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMuc3RhdGUuaW5Gb2N1cyAmJiBfdGhpcy5wcm9wcy5hdXRvRm9jdXMgPT09ICdzZWxlY3RlZCcpIHtcbiAgICAgICAgLy8gTXVzdCB3YWl0IGZvciBzZXRTdGF0ZSB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgYC5mb2N1cygpYFxuICAgICAgICAvLyBhcyB0aGUgZm9jdXMgY2FsbCB0cmlnZ2VycyBhIGJsdXIgb24gdGhlIGZpcnN0IHRhYlxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW5Gb2N1czogdHJ1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuZm9jdXNUYWIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlbW92ZUZvY3VzXCIsIGZ1bmN0aW9uIChibHVyRXZlbnQpIHtcbiAgICAgIC8vIG9ubHkgc2V0IGluRm9jdXMgdG8gZmFsc2UgaWYgdGhlIHdyYXBwaW5nIGRpdiBkb2Vzbid0IGNvbnRhaW4gdGhlIG5vdy1mb2N1c2luZyBlbGVtZW50XG4gICAgICB2YXIgY3VycmVudFRhcmdldCA9IGJsdXJFdmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSBibHVyRXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICAgIGlmIChjdXJyZW50VGFyZ2V0LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpID09PSBmYWxzZSkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW5Gb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uVGFiQ2xpY2tcIiwgZnVuY3Rpb24gKHNlbGVjdGVkVGFiKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgb25UYWJDbGljayA9IF90aGlzJHByb3BzLm9uVGFiQ2xpY2ssXG4gICAgICAgIGV4dGVybmFsU2VsZWN0ZWRUYWIgPSBfdGhpcyRwcm9wcy5zZWxlY3RlZFRhYjtcbiAgICAgIGlmIChvblRhYkNsaWNrKSB7XG4gICAgICAgIG9uVGFiQ2xpY2soc2VsZWN0ZWRUYWIpO1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHRyYWNrIHNlbGVjdGlvbiBzdGF0ZSBpZiBpdCdzIG5vdCBjb250cm9sbGVkIGV4dGVybmFsbHkuXG4gICAgICBpZiAoIWV4dGVybmFsU2VsZWN0ZWRUYWIpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHNlbGVjdGVkVGFiSWQ6IHNlbGVjdGVkVGFiLmlkXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5mb2N1c1RhYigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgaW5pdGlhbFNlbGVjdGVkVGFiID0gcHJvcHMuaW5pdGlhbFNlbGVjdGVkVGFiLFxuICAgICAgX3NlbGVjdGVkVGFiID0gcHJvcHMuc2VsZWN0ZWRUYWIsXG4gICAgICB0YWJzID0gcHJvcHMudGFicztcblxuICAgIC8vIE9ubHkgdHJhY2sgc2VsZWN0aW9uIHN0YXRlIGlmIGl0J3Mgbm90IGNvbnRyb2xsZWQgZXh0ZXJuYWxseS5cbiAgICB2YXIgc2VsZWN0ZWRUYWJJZDtcbiAgICBpZiAoIV9zZWxlY3RlZFRhYikge1xuICAgICAgc2VsZWN0ZWRUYWJJZCA9IChpbml0aWFsU2VsZWN0ZWRUYWIgPT09IG51bGwgfHwgaW5pdGlhbFNlbGVjdGVkVGFiID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbml0aWFsU2VsZWN0ZWRUYWIuaWQpIHx8IHRhYnNbMF0uaWQ7XG4gICAgfVxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc2VsZWN0ZWRUYWJJZDogc2VsZWN0ZWRUYWJJZCxcbiAgICAgIGluRm9jdXM6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aVRhYmJlZENvbnRlbnQsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aVRhYmJlZENvbnRlbnQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBleHBhbmQgPSBfdGhpcyRwcm9wczIuZXhwYW5kLFxuICAgICAgICBpbml0aWFsU2VsZWN0ZWRUYWIgPSBfdGhpcyRwcm9wczIuaW5pdGlhbFNlbGVjdGVkVGFiLFxuICAgICAgICBvblRhYkNsaWNrID0gX3RoaXMkcHJvcHMyLm9uVGFiQ2xpY2ssXG4gICAgICAgIGV4dGVybmFsU2VsZWN0ZWRUYWIgPSBfdGhpcyRwcm9wczIuc2VsZWN0ZWRUYWIsXG4gICAgICAgIHNpemUgPSBfdGhpcyRwcm9wczIuc2l6ZSxcbiAgICAgICAgdGFicyA9IF90aGlzJHByb3BzMi50YWJzLFxuICAgICAgICBhdXRvRm9jdXMgPSBfdGhpcyRwcm9wczIuYXV0b0ZvY3VzLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcblxuICAgICAgLy8gQWxsb3cgdGhlIGNvbnN1bWVyIHRvIGNvbnRyb2wgdGFiIHNlbGVjdGlvbi5cbiAgICAgIHZhciBzZWxlY3RlZFRhYiA9IGV4dGVybmFsU2VsZWN0ZWRUYWIgfHwgdGFicy5maW5kKGZ1bmN0aW9uICh0YWIpIHtcbiAgICAgICAgcmV0dXJuIHRhYi5pZCA9PT0gX3RoaXMyLnN0YXRlLnNlbGVjdGVkVGFiSWQ7XG4gICAgICB9KSB8fCB0YWJzWzBdOyAvLyBGYWxsIGJhY2sgdG8gdGhlIGZpcnN0IHRhYiBpZiBhIHNlbGVjdGVkIHRhYiBjYW4ndCBiZSBmb3VuZFxuXG4gICAgICB2YXIgc2VsZWN0ZWRUYWJDb250ZW50ID0gc2VsZWN0ZWRUYWIuY29udGVudCxcbiAgICAgICAgc2VsZWN0ZWRUYWJJZCA9IHNlbGVjdGVkVGFiLmlkO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpVGFicywge1xuICAgICAgICByZWY6IHRoaXMudGFic1JlZixcbiAgICAgICAgZXhwYW5kOiBleHBhbmQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMuaW5pdGlhbGl6ZUZvY3VzLFxuICAgICAgICBvbkJsdXI6IHRoaXMucmVtb3ZlRm9jdXNcbiAgICAgIH0sIHRhYnMubWFwKGZ1bmN0aW9uICh0YWIpIHtcbiAgICAgICAgdmFyIGlkID0gdGFiLmlkLFxuICAgICAgICAgIG5hbWUgPSB0YWIubmFtZSxcbiAgICAgICAgICBjb250ZW50ID0gdGFiLmNvbnRlbnQsXG4gICAgICAgICAgdGFiUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXModGFiLCBfZXhjbHVkZWQyKTtcbiAgICAgICAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICBrZXk6IGlkLFxuICAgICAgICAgIGlkOiBpZFxuICAgICAgICB9LCB0YWJQcm9wcyksIHt9LCB7XG4gICAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczIub25UYWJDbGljayh0YWIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaXNTZWxlY3RlZDogdGFiID09PSBzZWxlY3RlZFRhYixcbiAgICAgICAgICAnYXJpYS1jb250cm9scyc6IFwiXCIuY29uY2F0KF90aGlzMi5yb290SWQpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWIsIHByb3BzLCBuYW1lKTtcbiAgICAgIH0pKSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIHJvbGU6IFwidGFicGFuZWxcIixcbiAgICAgICAgaWQ6IFwiXCIuY29uY2F0KHRoaXMucm9vdElkKSxcbiAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogc2VsZWN0ZWRUYWJJZFxuICAgICAgfSwgc2VsZWN0ZWRUYWJDb250ZW50KSk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpVGFiYmVkQ29udGVudCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBhdXRvRm9jdXM6ICdpbml0aWFsJ1xufSk7XG5FdWlUYWJiZWRDb250ZW50LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogV2hlbiB0YWJiaW5nIGludG8gdGhlIHRhYnMsIHNldCB0aGUgZm9jdXMgb24gYGluaXRpYWxgIGZvciB0aGUgZmlyc3QgdGFiLFxuICAgICAgICogb3IgYHNlbGVjdGVkYCBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0YWIuIEJlc3QgdXNlIGNhc2UgaXMgZm9yIGluc2lkZSBvZlxuICAgICAgICogb3ZlcmxheSBjb250ZW50IGxpa2UgcG9wb3ZlcnMgb3IgZmx5b3V0cy5cbiAgICAgICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5vbmVPZihbXCJpbml0aWFsXCIsIFwic2VsZWN0ZWRcIl0pLFxuICAvKipcbiAgICAgICAqIEV2ZW5seSBzdHJldGNoZXMgZWFjaCB0YWIgdG8gZmlsbCB0aGUgaG9yaXpvbnRhbCBzcGFjZVxuICAgICAgICovXG4gIGV4cGFuZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogVXNlIHRoaXMgcHJvcCB0byBzZXQgdGhlIGluaXRpYWxseSBzZWxlY3RlZCB0YWIgd2hpbGUgbGV0dGluZyB0aGUgdGFiYmVkIGNvbnRlbnQgY29tcG9uZW50XG4gICAgICAgKiBjb250cm9sIHNlbGVjdGlvbiBzdGF0ZSBpbnRlcm5hbGx5XG4gICAgICAgKi9cbiAgaW5pdGlhbFNlbGVjdGVkVGFiOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBjb250ZW50OiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIFBsYWNlcyBjb250ZW50IGJlZm9yZSB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgICAqL1xuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIC8qKlxuICAgICAgICogUGxhY2VzIGNvbnRlbnQgYWZ0ZXIgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICAgKi9cbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICBvblRhYkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICAgKiBVc2UgdGhpcyBwcm9wIGlmIHlvdSB3YW50IHRvIGNvbnRyb2wgc2VsZWN0aW9uIHN0YXRlIHdpdGhpbiB0aGUgb3duZXIgY29tcG9uZW50XG4gICAgICAgKi9cbiAgc2VsZWN0ZWRUYWI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogRWFjaCB0YWIgbmVlZHMgaWQgYW5kIGNvbnRlbnQgcHJvcGVydGllcywgc28gd2UgY2FuIGFzc29jaWF0ZSBpdCB3aXRoIGl0cyBwYW5lbCBmb3IgYWNjZXNzaWJpbGl0eS5cbiAgICAgICAqIFRoZSBuYW1lIHByb3BlcnR5IChhIG5vZGUpIGlzIGFsc28gcmVxdWlyZWQgdG8gZGlzcGxheSB0byB0aGUgdXNlci5cbiAgICAgICAqL1xuICB0YWJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBjb250ZW50OiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5leHBvcnQgdmFyIEV1aURlbGF5UmVuZGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aURlbGF5UmVuZGVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlEZWxheVJlbmRlcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aURlbGF5UmVuZGVyLCBbcHJvcHNdKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZGVsYXlJRFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0b0JlRGVsYXllZFwiLCB0cnVlKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RhcnREZWxheWluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KF90aGlzLmRlbGF5SUQpO1xuICAgICAgX3RoaXMudG9CZURlbGF5ZWQgPSB0cnVlO1xuICAgICAgX3RoaXMuZGVsYXlJRCA9IHdpbmRvdy5zZXRUaW1lb3V0KF90aGlzLnN0b3BEZWxheWluZywgX3RoaXMucHJvcHMuZGVsYXkpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzdG9wRGVsYXlpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dChfdGhpcy5kZWxheUlEKTtcbiAgICAgIF90aGlzLnRvQmVEZWxheWVkID0gZmFsc2U7XG4gICAgICBfdGhpcy5zaG91bGRVcGRhdGUoKTtcbiAgICB9KTtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHRvZ2dsZTogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpRGVsYXlSZW5kZXIsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aURlbGF5UmVuZGVyLCBbe1xuICAgIGtleTogXCJzaG91bGRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkVXBkYXRlKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgdG9nZ2xlID0gX3JlZi50b2dnbGU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG9nZ2xlOiAhdG9nZ2xlXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLnN0YXJ0RGVsYXlpbmcoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2hvdWxkQ29tcG9uZW50VXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICAgIGlmICh0aGlzLnRvQmVEZWxheWVkKSB7XG4gICAgICAgIHRoaXMuc3RhcnREZWxheWluZygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5zdG9wRGVsYXlpbmcoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMudG9CZURlbGF5ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuICF0aGlzLnRvQmVEZWxheWVkID8gdGhpcy5wcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpRGVsYXlSZW5kZXIsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgZGVsYXk6IDUwMFxufSk7XG5FdWlEZWxheVJlbmRlci5wcm9wVHlwZXMgPSB7XG4gIGRlbGF5OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwidGV4dFNpemVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpSGVhbHRoU3R5bGVzIH0gZnJvbSAnLi9oZWFsdGguc3R5bGVzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0gfSBmcm9tICcuLi9mbGV4JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFRFWFRfU0laRVMgPSBbJ3hzJywgJ3MnLCAnbScsICdpbmhlcml0J107XG5leHBvcnQgdmFyIEV1aUhlYWx0aCA9IGZ1bmN0aW9uIEV1aUhlYWx0aChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIF9yZWYkdGV4dFNpemUgPSBfcmVmLnRleHRTaXplLFxuICAgIHRleHRTaXplID0gX3JlZiR0ZXh0U2l6ZSA9PT0gdm9pZCAwID8gJ3MnIDogX3JlZiR0ZXh0U2l6ZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlIZWFsdGhTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlIZWFsdGgsIHN0eWxlc1t0ZXh0U2l6ZV1dO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUhlYWx0aCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgZ3V0dGVyU2l6ZTogXCJ4c1wiLFxuICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgcmVzcG9uc2l2ZTogZmFsc2VcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiZG90XCIsXG4gICAgY29sb3I6IGNvbG9yXG4gIH0pKSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIGNoaWxkcmVuKSkpO1xufTtcbkV1aUhlYWx0aC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBkb3QgaWNvbi5cbiAgICAgICAqIEl0IGFjY2VwdHMgYW55IGBJY29uQ29sb3JgOiBgZGVmYXVsdGAsIGBwcmltYXJ5YCwgYHN1Y2Nlc3NgLCBgYWNjZW50YCwgYHdhcm5pbmdgLCBgZGFuZ2VyYCwgYHRleHRgLFxuICAgICAgICogYHN1YmR1ZWRgIG9yIGBnaG9zdGA7IG9yIGFueSB2YWxpZCBDU1MgY29sb3IgdmFsdWUgYXMgYSBgc3RyaW5nYFxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIE1hdGNoZXMgdGhlIHRleHQgc2NhbGVzIG9mIEV1aVRleHQuXG4gICAgICAgKiBUaGUgYGluaGVyaXRgIHN0eWxlIHdpbGwgZ2V0IGl0cyBmb250IHNpemUgZnJvbSB0aGUgcGFyZW50IGVsZW1lbnRcbiAgICAgICAqL1xuICB0ZXh0U2l6ZTogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxcWhvanJpLWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImZvbnQtc2l6ZTppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXFob2pyaS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJmb250LXNpemU6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiajh1aGNrLWV1aUhlYWx0aFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7bGFiZWw6ZXVpSGVhbHRoO1wiXG59IDoge1xuICBuYW1lOiBcImo4dWhjay1ldWlIZWFsdGhcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6aW5saW5lLWJsb2NrO2xhYmVsOmV1aUhlYWx0aDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlIZWFsdGhTdHlsZXMgPSBmdW5jdGlvbiBldWlIZWFsdGhTdHlsZXMoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIHtcbiAgICBldWlIZWFsdGg6IF9yZWYyLFxuICAgIC8vIFRleHQgc2l6ZXNcbiAgICB4czogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZSwgJ3hzJyksIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZSwgJ3MnKSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWUsICdtJyksIFwiOztsYWJlbDptO1wiKSxcbiAgICBpbmhlcml0OiBfcmVmXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiYWx0XCIsIFwidXJsXCIsIFwic3JjXCIsIFwic2l6ZVwiLCBcImhhc1NoYWRvd1wiLCBcInN0eWxlXCIsIFwid3JhcHBlclByb3BzXCIsIFwiZnVsbFNjcmVlbkljb25Db2xvclwiLCBcImFsbG93RnVsbFNjcmVlblwiLCBcImNhcHRpb25cIiwgXCJmbG9hdFwiLCBcIm1hcmdpblwiLCBcIm9uRnVsbFNjcmVlblwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZVdyYXBwZXIgfSBmcm9tICcuL2ltYWdlX3dyYXBwZXInO1xuaW1wb3J0IHsgZXVpSW1hZ2VTdHlsZXMgfSBmcm9tICcuL2ltYWdlLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyIH0gZnJvbSAnLi9pbWFnZV9mdWxsc2NyZWVuX3dyYXBwZXInO1xuaW1wb3J0IHsgU0laRVMgfSBmcm9tICcuL2ltYWdlX3R5cGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUltYWdlID0gZnVuY3Rpb24gRXVpSW1hZ2UoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgYWx0ID0gX3JlZi5hbHQsXG4gICAgdXJsID0gX3JlZi51cmwsXG4gICAgc3JjID0gX3JlZi5zcmMsXG4gICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdvcmlnaW5hbCcgOiBfcmVmJHNpemUsXG4gICAgaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIHdyYXBwZXJQcm9wcyA9IF9yZWYud3JhcHBlclByb3BzLFxuICAgIGZ1bGxTY3JlZW5JY29uQ29sb3IgPSBfcmVmLmZ1bGxTY3JlZW5JY29uQ29sb3IsXG4gICAgYWxsb3dGdWxsU2NyZWVuID0gX3JlZi5hbGxvd0Z1bGxTY3JlZW4sXG4gICAgY2FwdGlvbiA9IF9yZWYuY2FwdGlvbixcbiAgICBmbG9hdCA9IF9yZWYuZmxvYXQsXG4gICAgbWFyZ2luID0gX3JlZi5tYXJnaW4sXG4gICAgb25GdWxsU2NyZWVuID0gX3JlZi5vbkZ1bGxTY3JlZW4sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGlzRnVsbFNjcmVlbiA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0SXNGdWxsU2NyZWVuID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIGlzTmFtZWRTaXplID0gdHlwZW9mIHNpemUgPT09ICdzdHJpbmcnICYmIFNJWkVTLmluY2x1ZGVzKHNpemUpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUltYWdlJywgY2xhc3NOYW1lKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUltYWdlU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2UsIGlzTmFtZWRTaXplICYmIHN0eWxlc1tzaXplXSwgIWlzTmFtZWRTaXplICYmIHN0eWxlcy5jdXN0b21TaXplLCBoYXNTaGFkb3cgJiYgc3R5bGVzLmhhc1NoYWRvd107XG4gIHZhciBjc3NJc0Z1bGxTY3JlZW5TdHlsZXMgPSBbc3R5bGVzLmV1aUltYWdlLCBzdHlsZXMuaXNGdWxsU2NyZWVuXTtcbiAgdmFyIGlzQ3VzdG9tU2l6ZSA9ICFpc05hbWVkU2l6ZSAmJiBzaXplICE9PSAnb3JpZ2luYWwnO1xuICB2YXIgY3VzdG9tU2l6ZSA9IHR5cGVvZiBzaXplID09PSAnc3RyaW5nJyA/IHNpemUgOiBcIlwiLmNvbmNhdChzaXplLCBcInB4XCIpO1xuICB2YXIgaW1hZ2VTdHlsZVdpdGhDdXN0b21TaXplID0gaXNDdXN0b21TaXplID8gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZSksIHt9LCB7XG4gICAgbWF4V2lkdGg6IGN1c3RvbVNpemUsXG4gICAgbWF4SGVpZ2h0OiBjdXN0b21TaXplXG4gIH0pIDogc3R5bGU7XG4gIHZhciBpc0Z1bGxXaWR0aCA9IHNpemUgPT09ICdmdWxsV2lkdGgnO1xuICB2YXIgY29tbW9uV3JhcHBlclByb3BzID0ge1xuICAgIGhhc1NoYWRvdzogaGFzU2hhZG93LFxuICAgIHdyYXBwZXJQcm9wczogd3JhcHBlclByb3BzLFxuICAgIHNldElzRnVsbFNjcmVlbjogc2V0SXNGdWxsU2NyZWVuLFxuICAgIGZ1bGxTY3JlZW5JY29uQ29sb3I6IGZ1bGxTY3JlZW5JY29uQ29sb3IsXG4gICAgaXNGdWxsV2lkdGg6IGlzRnVsbFdpZHRoLFxuICAgIGFsbG93RnVsbFNjcmVlbjogYWxsb3dGdWxsU2NyZWVuLFxuICAgIGFsdDogYWx0LFxuICAgIGNhcHRpb246IGNhcHRpb24sXG4gICAgZmxvYXQ6IGZsb2F0LFxuICAgIG1hcmdpbjogbWFyZ2luLFxuICAgIG9uRnVsbFNjcmVlbjogb25GdWxsU2NyZWVuXG4gIH07XG4gIHZhciBjb21tb25JbWdQcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzcmM6IHNyYyB8fCB1cmxcbiAgfSwgcmVzdCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUltYWdlV3JhcHBlciwgY29tbW9uV3JhcHBlclByb3BzLCBfX19FbW90aW9uSlNYKFwiaW1nXCIsIF9leHRlbmRzKHtcbiAgICBhbHQ6IGFsdCxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBzdHlsZTogaW1hZ2VTdHlsZVdpdGhDdXN0b21TaXplXG4gIH0sIGNvbW1vbkltZ1Byb3BzKSkpLCBhbGxvd0Z1bGxTY3JlZW4gJiYgaXNGdWxsU2NyZWVuICYmIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciwgY29tbW9uV3JhcHBlclByb3BzLCBfX19FbW90aW9uSlNYKFwiaW1nXCIsIF9leHRlbmRzKHtcbiAgICBhbHQ6IGFsdCxcbiAgICBjc3M6IGNzc0lzRnVsbFNjcmVlblN0eWxlcyxcbiAgICBzdHlsZTogc3R5bGVcbiAgfSwgY29tbW9uSW1nUHJvcHMpKSkpO1xufTtcbkV1aUltYWdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogUmVxdWlyZXMgZWl0aGVyIGBzcmNgIG9yIGB1cmxgIGJ1dCBkZWZhdWx0cyB0byB1c2luZyBgc3JjYCBpZiBib3RoIGFyZSBwcm92aWRlZFxuICAgICAgICovXG4gIHNyYzogUHJvcFR5cGVzLnN0cmluZyxcbiAgdXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgICAqIEFsdCB0ZXh0IHNob3VsZCBkZXNjcmliZSB0aGUgaW1hZ2UgdG8gYWlkIHNjcmVlbiByZWFkZXIgdXNlcnMuIFNlZVxuICAgICAgICogaHR0cHM6Ly93ZWJhaW0ub3JnL3RlY2huaXF1ZXMvYWx0dGV4dC8gZm9yIGEgZ3VpZGUgb24gd3JpdGluZ1xuICAgICAgICogZWZmZWN0aXZlIGFsdCB0ZXh0LlxuICAgICAgICpcbiAgICAgICAqIElmIG5vIG1lYW5pbmdmdWwgZGVzY3JpcHRpb24gZXhpc3RzLCBvciBpZiB0aGUgaW1hZ2UgaXMgYWRlcXVhdGVseVxuICAgICAgICogZGVzY3JpYmVkIGJ5IHRoZSBzdXJyb3VuZGluZyB0ZXh0LCBwYXNzIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgICAqL1xuICBhbHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICAgKiBQcm92aWRlcyBhIHZpc2libGUgY2FwdGlvbiB0byB0aGUgaW1hZ2VcbiAgICAgICAqL1xuICBjYXB0aW9uOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGBzYCAvIGBtYCAvIGBsYCAvIGB4bGAgLyBgb3JpZ2luYWxgIC8gYGZ1bGxXaWR0aGAgLyBvciBhIENTUyBzaXplIG9mIGBudW1iZXJgIG9yIGBzdHJpbmdgLlxuICAgICAgICogYGZ1bGxXaWR0aGAgd2lsbCBzZXQgdGhlIGZpZ3VyZSB0byBzdHJldGNoIHRvIDEwMCUgb2YgaXRzIGNvbnRhaW5lci5cbiAgICAgICAqIGBzdHJpbmdgIGFuZCBgbnVtYmVyYCB0eXBlcyB3aWxsIG1heCBib3RoIHRoZSB3aWR0aCBvciBoZWlnaHQsIHdoaWNoZXZlciBpcyBncmVhdGVyLlxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBGbG9hdCB0aGUgaW1hZ2UgdG8gdGhlIGxlZnQgb3IgcmlnaHQuIFVzZWZ1bCBpbiBsYXJnZSB0ZXh0IGJsb2Nrcy5cbiAgICAgICAqL1xuICBmbG9hdDogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBNYXJnaW4gYXJvdW5kIHRoZSBpbWFnZS5cbiAgICAgICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogV2hlbiBzZXQgdG8gYHRydWVgIChkZWZhdWx0KSB3aWxsIGFwcGx5IGEgc2xpZ2h0IHNoYWRvdyB0byB0aGUgaW1hZ2VcbiAgICAgICAqL1xuICBoYXNTaGFkb3c6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIFdoZW4gc2V0IHRvIGB0cnVlYCB3aWxsIG1ha2UgdGhlIGltYWdlIGNsaWNrYWJsZSB0byBhIGxhcmdlciB2ZXJzaW9uXG4gICAgICAgKi9cbiAgYWxsb3dGdWxsU2NyZWVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBDYWxsYmFjayB3aGVuIHRoZSBpbWFnZSBpcyBjbGlja2VkIGFuZCBgYWxsb3dGdWxsU2NyZWVuYCBpcyBgdHJ1ZWBcbiAgICAgICAqL1xuICBvbkZ1bGxTY3JlZW46IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgICAqIENoYW5nZXMgdGhlIGNvbG9yIG9mIHRoZSBpY29uIHRoYXQgZmxvYXRzIGFib3ZlIHRoZSBpbWFnZSB3aGVuIGl0IGNhbiBiZSBjbGlja2VkIHRvIGZ1bGxzY3JlZW4uXG4gICAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBgbGlnaHRgIGlzIGZpbmUgdW5sZXNzIHlvdXIgaW1hZ2UgaGFzIGEgd2hpdGUgYmFja2dyb3VuZCwgaW4gd2hpY2ggY2FzZSB5b3Ugc2hvdWxkIGNoYW5nZSBpdCB0byBgZGFya2AuXG4gICAgICAgKi9cbiAgZnVsbFNjcmVlbkljb25Db2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcImxpZ2h0XCIsIFwiZGFya1wiXSksXG4gIC8qKlxuICAgICAgICogUHJvcHMgdG8gYWRkIHRvIHRoZSB3cmFwcGluZyBmaWd1cmUgZWxlbWVudFxuICAgICAgICovXG4gIHdyYXBwZXJQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KVxufTsiLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyBldWlJbWFnZVdyYXBwZXJTdHlsZXMgfSBmcm9tICcuL2ltYWdlX3dyYXBwZXIuc3R5bGVzJztcbmltcG9ydCB7IEV1aUltYWdlQnV0dG9uIH0gZnJvbSAnLi9pbWFnZV9idXR0b24nO1xuaW1wb3J0IHsgRXVpSW1hZ2VDYXB0aW9uIH0gZnJvbSAnLi9pbWFnZV9jYXB0aW9uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUltYWdlV3JhcHBlciA9IGZ1bmN0aW9uIEV1aUltYWdlV3JhcHBlcihfcmVmKSB7XG4gIHZhciBhbHQgPSBfcmVmLmFsdCxcbiAgICBjYXB0aW9uID0gX3JlZi5jYXB0aW9uLFxuICAgIGhhc1NoYWRvdyA9IF9yZWYuaGFzU2hhZG93LFxuICAgIGFsbG93RnVsbFNjcmVlbiA9IF9yZWYuYWxsb3dGdWxsU2NyZWVuLFxuICAgIGZsb2F0ID0gX3JlZi5mbG9hdCxcbiAgICBtYXJnaW4gPSBfcmVmLm1hcmdpbixcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgc2V0SXNGdWxsU2NyZWVuID0gX3JlZi5zZXRJc0Z1bGxTY3JlZW4sXG4gICAgd3JhcHBlclByb3BzID0gX3JlZi53cmFwcGVyUHJvcHMsXG4gICAgZnVsbFNjcmVlbkljb25Db2xvciA9IF9yZWYuZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICBpc0Z1bGxXaWR0aCA9IF9yZWYuaXNGdWxsV2lkdGgsXG4gICAgb25GdWxsU2NyZWVuID0gX3JlZi5vbkZ1bGxTY3JlZW47XG4gIHZhciBvcGVuRnVsbFNjcmVlbiA9IGZ1bmN0aW9uIG9wZW5GdWxsU2NyZWVuKCkge1xuICAgIHNldElzRnVsbFNjcmVlbih0cnVlKTtcbiAgICBvbkZ1bGxTY3JlZW4gPT09IG51bGwgfHwgb25GdWxsU2NyZWVuID09PSB2b2lkIDAgfHwgb25GdWxsU2NyZWVuKHRydWUpO1xuICB9O1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUltYWdlV3JhcHBlcicsIHdyYXBwZXJQcm9wcyAmJiB3cmFwcGVyUHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUltYWdlV3JhcHBlclN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NGaWd1cmVTdHlsZXMgPSBbc3R5bGVzLmV1aUltYWdlV3JhcHBlciwgZmxvYXQgJiYgc3R5bGVzW2Zsb2F0XSwgbWFyZ2luICYmIHN0eWxlc1ttYXJnaW5dLCBhbGxvd0Z1bGxTY3JlZW4gJiYgc3R5bGVzLmFsbG93RnVsbFNjcmVlbiwgaXNGdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aCwgd3JhcHBlclByb3BzID09PSBudWxsIHx8IHdyYXBwZXJQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd3JhcHBlclByb3BzLmNzc107XG4gIHZhciBfdXNlSW5uZXJUZXh0ID0gdXNlSW5uZXJUZXh0KCksXG4gICAgX3VzZUlubmVyVGV4dDIgPSBfc2xpY2VkVG9BcnJheShfdXNlSW5uZXJUZXh0LCAyKSxcbiAgICBvcHRpb25hbENhcHRpb25SZWYgPSBfdXNlSW5uZXJUZXh0MlswXSxcbiAgICBvcHRpb25hbENhcHRpb25UZXh0ID0gX3VzZUlubmVyVGV4dDJbMV07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZmlndXJlXCIsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtbGFiZWxcIjogb3B0aW9uYWxDYXB0aW9uVGV4dFxuICB9LCB3cmFwcGVyUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NGaWd1cmVTdHlsZXNcbiAgfSksIGFsbG93RnVsbFNjcmVlbiA/IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VCdXR0b24sIHtcbiAgICBoYXNBbHQ6ICEhYWx0LFxuICAgIGhhc1NoYWRvdzogaGFzU2hhZG93LFxuICAgIG9uQ2xpY2s6IG9wZW5GdWxsU2NyZWVuLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJhY3RpdmF0ZUZ1bGxTY3JlZW5CdXR0b25cIixcbiAgICBpc0Z1bGxXaWR0aDogaXNGdWxsV2lkdGgsXG4gICAgZnVsbFNjcmVlbkljb25Db2xvcjogZnVsbFNjcmVlbkljb25Db2xvclxuICB9LCBjaGlsZHJlbikpIDogY2hpbGRyZW4sIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VDYXB0aW9uLCB7XG4gICAgcmVmOiBvcHRpb25hbENhcHRpb25SZWYsXG4gICAgY2FwdGlvbjogY2FwdGlvblxuICB9KSk7XG59O1xuRXVpSW1hZ2VXcmFwcGVyLnByb3BUeXBlcyA9IHtcbiAgaXNGdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHNldElzRnVsbFNjcmVlbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpTWluQnJlYWtwb2ludCwgbG9naWNhbENTUywgbG9naWNhbFRleHRBbGlnbkNTUywgbG9naWNhbFNpZGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJnYWNubWMtYWxsb3dGdWxsU2NyZWVuXCIsXG4gIHN0eWxlczogXCImOmhvdmVyIFtjbGFzcyo9J2V1aUltYWdlQ2FwdGlvbidde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fTtsYWJlbDphbGxvd0Z1bGxTY3JlZW47XCJcbn0gOiB7XG4gIG5hbWU6IFwiZ2Fjbm1jLWFsbG93RnVsbFNjcmVlblwiLFxuICBzdHlsZXM6IFwiJjpob3ZlciBbY2xhc3MqPSdldWlJbWFnZUNhcHRpb24nXXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO307bGFiZWw6YWxsb3dGdWxsU2NyZWVuO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUltYWdlV3JhcHBlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlV3JhcHBlclN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJbWFnZVdyYXBwZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmlubGluZS1ibG9jaztcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcImxpbmUtaGVpZ2h0OjA7ZmxleC1zaHJpbms6MDs7bGFiZWw6ZXVpSW1hZ2VXcmFwcGVyO1wiKSxcbiAgICBhbGxvd0Z1bGxTY3JlZW46IF9yZWYsXG4gICAgLy8gTWFyZ2luc1xuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW46XCIsIGV1aVRoZW1lLnNpemUucywgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW46XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW46XCIsIGV1aVRoZW1lLnNpemUubCwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luOlwiLCBldWlUaGVtZS5zaXplLnhsLCBcIjs7bGFiZWw6eGw7XCIpLFxuICAgIC8vIEZsb2F0c1xuICAgIC8vIDE6IExvZ2ljYWwgcHJvcGVydGllcy92YWx1ZXMgaW4gYGZsb2F0YCBpcyBjdXJyZW50bHkgbm90IHlldCBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJzIHcvbyBmbGFnc1xuICAgIC8vIEBzZWUgaHR0cHM6Ly9jYW5pdXNlLmNvbS9tZG4tY3NzX3Byb3BlcnRpZXNfZmxvYXRfZmxvd19yZWxhdGl2ZV92YWx1ZXMgZm9yIHdoZW4gd2UgY2FuIHJlbW92ZSBsZWZ0L3JpZ2h0IGZhbGxiYWNrc1xuICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpTWluQnJlYWtwb2ludChldWlUaGVtZUNvbnRleHQsICdtJyksIFwie2Zsb2F0OmxlZnQ7ZmxvYXQ6XCIsIGxvZ2ljYWxTaWRlLmxlZnQsIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tbGVmdCcsICcwJyksIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgJzAnKSwgXCI7fTtsYWJlbDpsZWZ0O1wiKSxcbiAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhldWlNaW5CcmVha3BvaW50KGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCJ7ZmxvYXQ6cmlnaHQ7ZmxvYXQ6XCIsIGxvZ2ljYWxTaWRlLnJpZ2h0LCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLXJpZ2h0JywgJzAnKSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCAnMCcpLCBcIjt9O2xhYmVsOnJpZ2h0O1wiKSxcbiAgICAvLyBTaXplc1xuICAgIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiaGFzQWx0XCIsIFwiaGFzU2hhZG93XCIsIFwiY2hpbGRyZW5cIiwgXCJvbkNsaWNrXCIsIFwib25LZXlEb3duXCIsIFwiaXNGdWxsU2NyZWVuXCIsIFwiaXNGdWxsV2lkdGhcIiwgXCJmdWxsU2NyZWVuSWNvbkNvbG9yXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBldWlJbWFnZUJ1dHRvblN0eWxlcywgZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzIH0gZnJvbSAnLi9pbWFnZV9idXR0b24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZnVsbFNjcmVlbkljb25Db2xvck1hcCA9IHtcbiAgbGlnaHQ6ICdnaG9zdCcsXG4gIGRhcms6ICdkZWZhdWx0J1xufTtcbmV4cG9ydCB2YXIgRXVpSW1hZ2VCdXR0b24gPSBmdW5jdGlvbiBFdWlJbWFnZUJ1dHRvbihfcmVmKSB7XG4gIHZhciBoYXNBbHQgPSBfcmVmLmhhc0FsdCxcbiAgICBoYXNTaGFkb3cgPSBfcmVmLmhhc1NoYWRvdyxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICBvbktleURvd24gPSBfcmVmLm9uS2V5RG93bixcbiAgICBpc0Z1bGxTY3JlZW4gPSBfcmVmLmlzRnVsbFNjcmVlbixcbiAgICBpc0Z1bGxXaWR0aCA9IF9yZWYuaXNGdWxsV2lkdGgsXG4gICAgX3JlZiRmdWxsU2NyZWVuSWNvbkNvID0gX3JlZi5mdWxsU2NyZWVuSWNvbkNvbG9yLFxuICAgIGZ1bGxTY3JlZW5JY29uQ29sb3IgPSBfcmVmJGZ1bGxTY3JlZW5JY29uQ28gPT09IHZvaWQgMCA/ICdsaWdodCcgOiBfcmVmJGZ1bGxTY3JlZW5JY29uQ28sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgYnV0dG9uU3R5bGVzID0gZXVpSW1hZ2VCdXR0b25TdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzQnV0dG9uU3R5bGVzID0gW2J1dHRvblN0eWxlcy5ldWlJbWFnZUJ1dHRvbiwgaGFzU2hhZG93ID8gYnV0dG9uU3R5bGVzLmhhc1NoYWRvd0hvdmVyIDogYnV0dG9uU3R5bGVzLnNoYWRvd0hvdmVyLCAhaXNGdWxsU2NyZWVuICYmIGlzRnVsbFdpZHRoICYmIGJ1dHRvblN0eWxlcy5mdWxsV2lkdGhdO1xuICB2YXIgaWNvblN0eWxlcyA9IGV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NJY29uU3R5bGVzID0gW2ljb25TdHlsZXMuZXVpSW1hZ2VCdXR0b25fX2ljb24sIGljb25TdHlsZXMub3BlbkZ1bGxTY3JlZW5dO1xuICB2YXIgb3BlbkZ1bGxTY3JlZW5JbnN0cnVjdGlvbnMgPSB1c2VFdWlJMThuKCdldWlJbWFnZUJ1dHRvbi5vcGVuRnVsbFNjcmVlbicsICdDbGljayB0byBvcGVuIHRoaXMgaW1hZ2UgaW4gZnVsbHNjcmVlbiBtb2RlJyk7XG4gIHZhciBjbG9zZUZ1bGxTY3JlZW5JbnN0cnVjdGlvbnMgPSB1c2VFdWlJMThuKCdldWlJbWFnZUJ1dHRvbi5jbG9zZUZ1bGxTY3JlZW4nLCAnUHJlc3MgRXNjYXBlIG9yIGNsaWNrIHRvIGNsb3NlIGltYWdlIGZ1bGxzY3JlZW4gbW9kZScpO1xuICB2YXIgaWNvbkNvbG9yID0gZnVsbFNjcmVlbkljb25Db2xvck1hcFtmdWxsU2NyZWVuSWNvbkNvbG9yXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgY3NzOiBjc3NCdXR0b25TdHlsZXMsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBvbktleURvd246IG9uS2V5RG93blxuICB9LCByZXN0KSwgaXNGdWxsU2NyZWVuICYmXG4gIC8vIEluIGZ1bGxzY3JlZW4gbW9kZSwgaW5zdHJ1Y3Rpb25zIHNob3VsZCBjb21lIGZpcnN0IHRvIGFsbG93IHNjcmVlbiByZWFkZXJcbiAgLy8gdXNlcnMgdG8gcXVpY2tseSBleGl0IHZzLiBwb3RlbnRpYWxseSByZWFkaW5nIG91dCBsb25nL3Vuc2tpcHBhYmxlIGFsdCB0ZXh0XG4gIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgY2xvc2VGdWxsU2NyZWVuSW5zdHJ1Y3Rpb25zLCBoYXNBbHQgJiYgJyBcdTIwMTQgJykpLCBjaGlsZHJlbiwgIWlzRnVsbFNjcmVlbiAmJiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjc3M6IGNzc0ljb25TdHlsZXNcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBoYXNBbHQgJiYgJyBcdTIwMTQgJywgb3BlbkZ1bGxTY3JlZW5JbnN0cnVjdGlvbnMpKSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJmdWxsU2NyZWVuXCIsXG4gICAgY29sb3I6IGljb25Db2xvclxuICB9KSkpKTtcbn07XG5FdWlJbWFnZUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGhhc0FsdDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgaXNGdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGlzRnVsbFNjcmVlbjogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvY3VzUmluZywgbG9naWNhbENTUywgZXVpQ2FuQW5pbWF0ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVNoYWRvdyB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbmV4cG9ydCB2YXIgZXVpSW1hZ2VCdXR0b25TdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZUJ1dHRvblN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJbWFnZUJ1dHRvbjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO3RleHQtYWxpZ246bWF0Y2gtcGFyZW50O2xpbmUtaGVpZ2h0OjA7Jjo6YmVmb3Jle29wYWNpdHk6MDtjb250ZW50OicnO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpvcGFjaXR5IFwiLCBldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIjt9fSY6aG92ZXIsJjpmb2N1c3smOjpiZWZvcmV7b3BhY2l0eToxO31bY2xhc3MqPSdldWlJbWFnZUJ1dHRvbl9faWNvbidde29wYWNpdHk6MTt9fSY6Zm9jdXN7XCIsIGV1aUZvY3VzUmluZyhldWlUaGVtZUNvbnRleHQsICdvdXRzZXQnKSwgXCI7fTtsYWJlbDpldWlJbWFnZUJ1dHRvbjtcIiksXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIiksXG4gICAgc2hhZG93SG92ZXI6IC8qI19fUFVSRV9fKi9jc3MoXCImOjpiZWZvcmV7XCIsIGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdzJyksIFwiO307bGFiZWw6c2hhZG93SG92ZXI7XCIpLFxuICAgIGhhc1NoYWRvd0hvdmVyOiAvKiNfX1BVUkVfXyovY3NzKFwiJjo6YmVmb3Jle1wiLCBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIjt9O2xhYmVsOmhhc1NoYWRvd0hvdmVyO1wiKVxuICB9O1xufTtcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInhqNGRzYS1jbG9zZUZ1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcInBvaW50ZXItZXZlbnRzOm5vbmU7bGFiZWw6Y2xvc2VGdWxsU2NyZWVuO1wiXG59IDoge1xuICBuYW1lOiBcInhqNGRzYS1jbG9zZUZ1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcInBvaW50ZXItZXZlbnRzOm5vbmU7bGFiZWw6Y2xvc2VGdWxsU2NyZWVuO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyhfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VCdXR0b25fX2ljb246IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygndG9wJywgZXVpVGhlbWUuc2l6ZS5iYXNlKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3JpZ2h0JywgZXVpVGhlbWUuc2l6ZS5iYXNlKSwgXCI7O2xhYmVsOmV1aUltYWdlQnV0dG9uX19pY29uO1wiKSxcbiAgICBvcGVuRnVsbFNjcmVlbjogLyojX19QVVJFX18qL2NzcyhcIm9wYWNpdHk6MDtjdXJzb3I6cG9pbnRlcjtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpvcGFjaXR5IFwiLCBldWlUaGVtZS5hbmltYXRpb24uc2xvdywgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIjt9O2xhYmVsOm9wZW5GdWxsU2NyZWVuO1wiKSxcbiAgICBjbG9zZUZ1bGxTY3JlZW46IF9yZWZcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlJbWFnZUNhcHRpb25TdHlsZXMgfSBmcm9tICcuL2ltYWdlX2NhcHRpb24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUltYWdlQ2FwdGlvbiA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgX3JlZiRpc09uT3ZlcmxheU1hc2sgPSBfcmVmLmlzT25PdmVybGF5TWFzayxcbiAgICBpc09uT3ZlcmxheU1hc2sgPSBfcmVmJGlzT25PdmVybGF5TWFzayA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzT25PdmVybGF5TWFzaztcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUltYWdlQ2FwdGlvblN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUltYWdlQ2FwdGlvbiwgaXNPbk92ZXJsYXlNYXNrICYmIHN0eWxlcy5pc09uT3ZlcmxheU1hc2tdO1xuICByZXR1cm4gY2FwdGlvbiA/IF9fX0Vtb3Rpb25KU1goXCJmaWdjYXB0aW9uXCIsIHtcbiAgICByZWY6IHJlZixcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCBjYXB0aW9uKSA6IG51bGw7XG59KTtcbkV1aUltYWdlQ2FwdGlvbi5wcm9wVHlwZXMgPSB7XG4gIGlzT25PdmVybGF5TWFzazogUHJvcFR5cGVzLmJvb2xcbn07XG5FdWlJbWFnZUNhcHRpb24uZGlzcGxheU5hbWUgPSAnRXVpSW1hZ2VDYXB0aW9uJzsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmV4cG9ydCB2YXIgZXVpSW1hZ2VDYXB0aW9uU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VDYXB0aW9uU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUltYWdlQ2FwdGlvbjogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiOztsYWJlbDpldWlJbWFnZUNhcHRpb247XCIpLFxuICAgIGlzT25PdmVybGF5TWFzazogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZ2hvc3QsIFwiO3RleHQtc2hhZG93OjAgMXB4IDJweCBcIiwgdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmluaywgMC42KSwgXCI7W2NsYXNzKj0nZXVpTGluaydde2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZ2hvc3QsIFwiO307bGFiZWw6aXNPbk92ZXJsYXlNYXNrO1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVNoYWRvdyB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbmV4cG9ydCB2YXIgZXVpSW1hZ2VTdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIHtcbiAgICBldWlJbWFnZTogLyojX19QVVJFX18qL2NzcyhcInZlcnRpY2FsLWFsaWduOm1pZGRsZTtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCIgJixbY2xhc3MqPSdldWlUZXh0J10gJntcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIDApLCBcIjt9O2xhYmVsOmV1aUltYWdlO1wiKSxcbiAgICAvLyBWYXJpYXRpb25zXG4gICAgaXNGdWxsU2NyZWVuOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7XCIsIGxvZ2ljYWxDU1MoJ21heC1oZWlnaHQnLCAnODB2aCcpLCBcIiBcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzgwdncnKSwgXCI7O2xhYmVsOmlzRnVsbFNjcmVlbjtcIiksXG4gICAgaGFzU2hhZG93OiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdzJyksIFwiOztsYWJlbDpoYXNTaGFkb3c7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgLy8gVGhlc2Ugc2l6ZXMgYXJlIG1vc3RseSBzdWdnZXN0aW9ucy4gRG9uJ3QgbG9vayB0b28gaGFyZCBmb3IgbWVhbmluZyBpbiB0aGVpciB2YWx1ZXMuXG4gICAgLy8gU2l6ZSBpcyBhcHBsaWVkIHRvIHRoZSBpbWFnZSwgcmF0aGVyIHRoYW4gdGhlIHdyYXBwZXIgZmlndXJlIHRvIHdvcmsgYmV0dGVyIHdpdGggZmxvYXRzXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDBweCcpLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcyMDBweCcpLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICczNjBweCcpLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnNjAwcHgnKSwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICBvcmlnaW5hbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICdhdXRvJyksIFwiOztsYWJlbDpvcmlnaW5hbDtcIiksXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIiksXG4gICAgY3VzdG9tU2l6ZTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICdhdXRvJyksIFwiOztsYWJlbDpjdXN0b21TaXplO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUZvY3VzVHJhcCB9IGZyb20gJy4uL2ZvY3VzX3RyYXAnO1xuaW1wb3J0IHsgRXVpT3ZlcmxheU1hc2sgfSBmcm9tICcuLi9vdmVybGF5X21hc2snO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUsIGtleXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VJbm5lclRleHQgfSBmcm9tICcuLi9pbm5lcl90ZXh0JztcbmltcG9ydCB7IGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMgfSBmcm9tICcuL2ltYWdlX2Z1bGxzY3JlZW5fd3JhcHBlci5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpSW1hZ2VCdXR0b24gfSBmcm9tICcuL2ltYWdlX2J1dHRvbic7XG5pbXBvcnQgeyBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMgfSBmcm9tICcuL2ltYWdlX2J1dHRvbi5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpSW1hZ2VDYXB0aW9uIH0gZnJvbSAnLi9pbWFnZV9jYXB0aW9uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIgPSBmdW5jdGlvbiBFdWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyKF9yZWYpIHtcbiAgdmFyIGFsdCA9IF9yZWYuYWx0LFxuICAgIGhhc1NoYWRvdyA9IF9yZWYuaGFzU2hhZG93LFxuICAgIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIHNldElzRnVsbFNjcmVlbiA9IF9yZWYuc2V0SXNGdWxsU2NyZWVuLFxuICAgIHdyYXBwZXJQcm9wcyA9IF9yZWYud3JhcHBlclByb3BzLFxuICAgIGlzRnVsbFdpZHRoID0gX3JlZi5pc0Z1bGxXaWR0aCxcbiAgICBmdWxsU2NyZWVuSWNvbkNvbG9yID0gX3JlZi5mdWxsU2NyZWVuSWNvbkNvbG9yLFxuICAgIG9uRnVsbFNjcmVlbiA9IF9yZWYub25GdWxsU2NyZWVuO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlclN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXIsIHdyYXBwZXJQcm9wcyA9PT0gbnVsbCB8fCB3cmFwcGVyUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdyYXBwZXJQcm9wcy5jc3NdO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUltYWdlRnVsbFNjcmVlbldyYXBwZXInLCB3cmFwcGVyUHJvcHMgJiYgd3JhcHBlclByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciBvbktleURvd24gPSBmdW5jdGlvbiBvbktleURvd24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkVTQ0FQRSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY2xvc2VGdWxsU2NyZWVuKCk7XG4gICAgfVxuICB9O1xuICB2YXIgY2xvc2VGdWxsU2NyZWVuID0gZnVuY3Rpb24gY2xvc2VGdWxsU2NyZWVuKCkge1xuICAgIHNldElzRnVsbFNjcmVlbihmYWxzZSk7XG4gICAgb25GdWxsU2NyZWVuID09PSBudWxsIHx8IG9uRnVsbFNjcmVlbiA9PT0gdm9pZCAwIHx8IG9uRnVsbFNjcmVlbihmYWxzZSk7XG4gIH07XG4gIHZhciBfdXNlSW5uZXJUZXh0ID0gdXNlSW5uZXJUZXh0KCksXG4gICAgX3VzZUlubmVyVGV4dDIgPSBfc2xpY2VkVG9BcnJheShfdXNlSW5uZXJUZXh0LCAyKSxcbiAgICBvcHRpb25hbENhcHRpb25SZWYgPSBfdXNlSW5uZXJUZXh0MlswXSxcbiAgICBvcHRpb25hbENhcHRpb25UZXh0ID0gX3VzZUlubmVyVGV4dDJbMV07XG4gIHZhciBpY29uU3R5bGVzID0gZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc0ljb25TdHlsZXMgPSBbaWNvblN0eWxlcy5ldWlJbWFnZUJ1dHRvbl9faWNvbiwgaWNvblN0eWxlcy5jbG9zZUZ1bGxTY3JlZW5dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlPdmVybGF5TWFzaywge1xuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJmdWxsU2NyZWVuT3ZlcmxheU1hc2tcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUZvY3VzVHJhcCwge1xuICAgIHNjcm9sbExvY2s6IHRydWUsXG4gICAgcHJldmVudFNjcm9sbE9uRm9jdXM6IHRydWUsXG4gICAgb25DbGlja091dHNpZGU6IGNsb3NlRnVsbFNjcmVlblxuICB9LCBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKFwiZmlndXJlXCIsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtbGFiZWxcIjogb3B0aW9uYWxDYXB0aW9uVGV4dFxuICB9LCB3cmFwcGVyUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSksIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VCdXR0b24sIHtcbiAgICBoYXNBbHQ6ICEhYWx0LFxuICAgIGhhc1NoYWRvdzogaGFzU2hhZG93LFxuICAgIG9uQ2xpY2s6IGNsb3NlRnVsbFNjcmVlbixcbiAgICBvbktleURvd246IG9uS2V5RG93bixcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZGVhY3RpdmF0ZUZ1bGxTY3JlZW5CdXR0b25cIixcbiAgICBpc0Z1bGxTY3JlZW46IHRydWUsXG4gICAgaXNGdWxsV2lkdGg6IGlzRnVsbFdpZHRoLFxuICAgIGZ1bGxTY3JlZW5JY29uQ29sb3I6IGZ1bGxTY3JlZW5JY29uQ29sb3JcbiAgfSwgY2hpbGRyZW4pLCBfX19FbW90aW9uSlNYKEV1aUltYWdlQ2FwdGlvbiwge1xuICAgIGNhcHRpb246IGNhcHRpb24sXG4gICAgcmVmOiBvcHRpb25hbENhcHRpb25SZWYsXG4gICAgaXNPbk92ZXJsYXlNYXNrOiB0cnVlXG4gIH0pKSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJmdWxsU2NyZWVuRXhpdFwiLFxuICAgIGNvbG9yOiBcImdob3N0XCIsXG4gICAgY3NzOiBjc3NJY29uU3R5bGVzXG4gIH0pKSkpO1xufTtcbkV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIucHJvcFR5cGVzID0ge1xuICBpc0Z1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgc2V0SXNGdWxsU2NyZWVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBldWlDYW5BbmltYXRlLCBldWlBbmltU2xpZGVJblVwIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlclN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21heC1oZWlnaHQnLCAnODB2aCcpLCBcIiBcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzgwdncnKSwgXCIgXCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcImxpbmUtaGVpZ2h0OjA7XCIsIGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgZXVpQW5pbVNsaWRlSW5VcChldWlUaGVtZS5zaXplLnh4eHhsKSwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5leHRyYVNsb3csIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24uYm91bmNlLCBcIjt9Jjpob3ZlciBbY2xhc3MqPSdldWlJbWFnZUNhcHRpb24nXXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO307bGFiZWw6ZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlcjtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciBTSVpFUyA9IFsncycsICdtJywgJ2wnLCAneGwnLCAnZnVsbFdpZHRoJywgJ29yaWdpbmFsJ107XG52YXIgRkxPQVRTID0gWydsZWZ0JywgJ3JpZ2h0J107XG52YXIgTUFSR0lOUyA9IFsncycsICdtJywgJ2wnLCAneGwnXTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aVRoZW1lUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBlbWl0RXVpUHJvdmlkZXJXYXJuaW5nIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvd2FybmluZyc7XG5pbXBvcnQgeyBjYWNoZSBhcyBmYWxsYmFja0NhY2hlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW1vdGlvbi9jc3MnO1xuaW1wb3J0IHsgRXVpR2xvYmFsU3R5bGVzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcvcmVzZXQvZ2xvYmFsX3N0eWxlcyc7XG5pbXBvcnQgeyBFdWlVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nL3V0aWxpdHkvdXRpbGl0eSc7XG5pbXBvcnQgeyBFdWlUaGVtZUFtc3RlcmRhbSB9IGZyb20gJy4uLy4uL3RoZW1lcyc7XG5pbXBvcnQgeyBFdWlDYWNoZVByb3ZpZGVyIH0gZnJvbSAnLi9jYWNoZSc7XG5pbXBvcnQgeyBFdWlTeXN0ZW1Db2xvck1vZGVQcm92aWRlciB9IGZyb20gJy4vc3lzdGVtX2NvbG9yX21vZGUnO1xuaW1wb3J0IHsgRXVpUHJvdmlkZXJOZXN0ZWRDaGVjaywgdXNlSXNOZXN0ZWRFdWlQcm92aWRlciB9IGZyb20gJy4vbmVzdGVkJztcbmltcG9ydCB7IEV1aUNvbXBvbmVudERlZmF1bHRzUHJvdmlkZXIgfSBmcm9tICcuL2NvbXBvbmVudF9kZWZhdWx0cyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGlzRW1vdGlvbkNhY2hlT2JqZWN0ID0gZnVuY3Rpb24gaXNFbW90aW9uQ2FjaGVPYmplY3Qob2JqKSB7XG4gIHJldHVybiBvYmouaGFzT3duUHJvcGVydHkoJ2tleScpO1xufTtcbmV4cG9ydCB2YXIgRXVpUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlQcm92aWRlcihfcmVmKSB7XG4gIHZhciBfZGVmYXVsdENhY2hlO1xuICB2YXIgX3JlZiRjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgY2FjaGUgPSBfcmVmJGNhY2hlID09PSB2b2lkIDAgPyBmYWxsYmFja0NhY2hlIDogX3JlZiRjYWNoZSxcbiAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICB0aGVtZSA9IF9yZWYkdGhlbWUgPT09IHZvaWQgMCA/IEV1aVRoZW1lQW1zdGVyZGFtIDogX3JlZiR0aGVtZSxcbiAgICBfcmVmJGdsb2JhbFN0eWxlcyA9IF9yZWYuZ2xvYmFsU3R5bGVzLFxuICAgIEdsb2JhbHMgPSBfcmVmJGdsb2JhbFN0eWxlcyA9PT0gdm9pZCAwID8gRXVpR2xvYmFsU3R5bGVzIDogX3JlZiRnbG9iYWxTdHlsZXMsXG4gICAgX3JlZiR1dGlsaXR5Q2xhc3NlcyA9IF9yZWYudXRpbGl0eUNsYXNzZXMsXG4gICAgVXRpbGl0aWVzID0gX3JlZiR1dGlsaXR5Q2xhc3NlcyA9PT0gdm9pZCAwID8gRXVpVXRpbGl0eUNsYXNzZXMgOiBfcmVmJHV0aWxpdHlDbGFzc2VzLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlLFxuICAgIG1vZGlmeSA9IF9yZWYubW9kaWZ5LFxuICAgIGNvbXBvbmVudERlZmF1bHRzID0gX3JlZi5jb21wb25lbnREZWZhdWx0cyxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciBpc05lc3RlZCA9IHVzZUlzTmVzdGVkRXVpUHJvdmlkZXIoKTtcbiAgaWYgKGlzTmVzdGVkKSB7XG4gICAgdmFyIHByb3ZpZGVyTWVzc2FnZSA9IFwiYEV1aVByb3ZpZGVyYCBzaG91bGQgbm90IGJlIG5lc3RlZCBvciB1c2VkIG1vcmUgdGhhbiBvbmNlLCBvdGhlciB0aGFuIGF0IHRoZSB0b3AgbGV2ZWwgb2YgeW91ciBhcHAuXFxuICAgIFVzZSBgRXVpVGhlbWVQcm92aWRlcmAgaW5zdGVhZCBmb3IgbmVzdGVkIGNvbXBvbmVudC1sZXZlbCB0aGVtaW5nOiBodHRwczovL2VsYS5zdC9ldWlwcm92aWRlci5cIjtcbiAgICBlbWl0RXVpUHJvdmlkZXJXYXJuaW5nKHByb3ZpZGVyTWVzc2FnZSk7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHZhciBkZWZhdWx0Q2FjaGU7XG4gIHZhciBnbG9iYWxDYWNoZTtcbiAgdmFyIHV0aWxpdHlDYWNoZTtcbiAgaWYgKGNhY2hlKSB7XG4gICAgaWYgKGlzRW1vdGlvbkNhY2hlT2JqZWN0KGNhY2hlKSkge1xuICAgICAgY2FjaGUuY29tcGF0ID0gdHJ1ZTtcbiAgICAgIGRlZmF1bHRDYWNoZSA9IGNhY2hlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2FjaGUuZGVmYXVsdCkge1xuICAgICAgICBjYWNoZS5kZWZhdWx0LmNvbXBhdCA9IHRydWU7XG4gICAgICB9XG4gICAgICBkZWZhdWx0Q2FjaGUgPSBjYWNoZS5kZWZhdWx0O1xuICAgICAgaWYgKGNhY2hlLmdsb2JhbCkge1xuICAgICAgICBjYWNoZS5nbG9iYWwuY29tcGF0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGdsb2JhbENhY2hlID0gY2FjaGUuZ2xvYmFsO1xuICAgICAgaWYgKGNhY2hlLnV0aWxpdHkpIHtcbiAgICAgICAgY2FjaGUudXRpbGl0eS5jb21wYXQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdXRpbGl0eUNhY2hlID0gY2FjaGUudXRpbGl0eTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUHJvdmlkZXJOZXN0ZWRDaGVjaywgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlDYWNoZVByb3ZpZGVyLCB7XG4gICAgY2FjaGU6IChfZGVmYXVsdENhY2hlID0gZGVmYXVsdENhY2hlKSAhPT0gbnVsbCAmJiBfZGVmYXVsdENhY2hlICE9PSB2b2lkIDAgPyBfZGVmYXVsdENhY2hlIDogZmFsbGJhY2tDYWNoZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aVN5c3RlbUNvbG9yTW9kZVByb3ZpZGVyLCBudWxsLCBmdW5jdGlvbiAoc3lzdGVtQ29sb3JNb2RlKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGhlbWVQcm92aWRlciwge1xuICAgICAgdGhlbWU6IHRoZW1lICE9PSBudWxsICYmIHRoZW1lICE9PSB2b2lkIDAgPyB0aGVtZSA6IHVuZGVmaW5lZCxcbiAgICAgIGNvbG9yTW9kZTogY29sb3JNb2RlICE9PSBudWxsICYmIGNvbG9yTW9kZSAhPT0gdm9pZCAwID8gY29sb3JNb2RlIDogc3lzdGVtQ29sb3JNb2RlLFxuICAgICAgbW9kaWZ5OiBtb2RpZnlcbiAgICB9LCB0aGVtZSAmJiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUNhY2hlUHJvdmlkZXIsIHtcbiAgICAgIGNhY2hlOiBnbG9iYWxDYWNoZSxcbiAgICAgIGNoaWxkcmVuOiBHbG9iYWxzICYmIF9fX0Vtb3Rpb25KU1goR2xvYmFscywgbnVsbClcbiAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlDYWNoZVByb3ZpZGVyLCB7XG4gICAgICBjYWNoZTogdXRpbGl0eUNhY2hlLFxuICAgICAgY2hpbGRyZW46IFV0aWxpdGllcyAmJiBfX19FbW90aW9uSlNYKFV0aWxpdGllcywgbnVsbClcbiAgICB9KSksIF9fX0Vtb3Rpb25KU1goRXVpQ29tcG9uZW50RGVmYXVsdHNQcm92aWRlciwge1xuICAgICAgY29tcG9uZW50RGVmYXVsdHM6IGNvbXBvbmVudERlZmF1bHRzXG4gICAgfSwgY2hpbGRyZW4pKTtcbiAgfSkpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBHbG9iYWwsIGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvaG9va3MnO1xuaW1wb3J0IHsgZXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYWNjZXNzaWJpbGl0eS9zY3JlZW5fcmVhZGVyX29ubHkvc2NyZWVuX3JlYWRlcl9vbmx5LnN0eWxlcyc7XG5pbXBvcnQgeyBldWlGdWxsSGVpZ2h0LCBldWlUZXh0QnJlYWtXb3JkLCBldWlUZXh0VHJ1bmNhdGUsIGV1aU51bWJlckZvcm1hdCwgZXVpU2Nyb2xsQmFyU3R5bGVzLCBldWlZU2Nyb2xsLCBldWlYU2Nyb2xsLCBldWlZU2Nyb2xsV2l0aFNoYWRvd3MsIGV1aVhTY3JvbGxXaXRoU2hhZG93cywgZXVpQnJlYWtwb2ludCB9IGZyb20gJy4uL21peGlucyc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIGdsb2JhbFN0eWxlcyA9IGZ1bmN0aW9uIGdsb2JhbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jc3MoXCIuZXVpU2NyZWVuUmVhZGVyT25seXtcIiwgZXVpU2NyZWVuUmVhZGVyT25seSgpLCBcIjt9LmV1aS1hbGlnbkJhc2VsaW5le3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lIWltcG9ydGFudDt9LmV1aS1hbGlnbkJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjpib3R0b20haW1wb3J0YW50O30uZXVpLWFsaWduTWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZSFpbXBvcnRhbnQ7fS5ldWktYWxpZ25Ub3B7dmVydGljYWwtYWxpZ246dG9wIWltcG9ydGFudDt9LmV1aS1kaXNwbGF5QmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7fS5ldWktZGlzcGxheUlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnQ7fS5ldWktZGlzcGxheUlubGluZUJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudDt9LmV1aS1mdWxsV2lkdGh7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUgIWltcG9ydGFudCcpLCBcIjt9LmV1aS1mdWxsSGVpZ2h0e1wiLCBldWlGdWxsSGVpZ2h0KCksIFwiO30uZXVpLXRleHRDZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50O30uZXVpLXRleHRMZWZ0e3RleHQtYWxpZ246c3RhcnQhaW1wb3J0YW50O30uZXVpLXRleHRSaWdodHt0ZXh0LWFsaWduOmVuZCFpbXBvcnRhbnQ7fS5ldWktdGV4dE5vV3JhcHt3aGl0ZS1zcGFjZTpub3dyYXAhaW1wb3J0YW50O30uZXVpLXRleHRJbmhlcml0Q29sb3J7Y29sb3I6aW5oZXJpdCFpbXBvcnRhbnQ7fS5ldWktdGV4dEJyZWFrV29yZHtcIiwgZXVpVGV4dEJyZWFrV29yZCgpLCBcIjt9LmV1aS10ZXh0QnJlYWtBbGx7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkIWltcG9ydGFudDt3b3JkLWJyZWFrOmJyZWFrLWFsbCFpbXBvcnRhbnQ7fS5ldWktdGV4dEJyZWFrTm9ybWFse292ZXJmbG93LXdyYXA6bm9ybWFsIWltcG9ydGFudDt3b3JkLXdyYXA6bm9ybWFsIWltcG9ydGFudDt3b3JkLWJyZWFrOm5vcm1hbCFpbXBvcnRhbnQ7fS5ldWktdGV4dFRydW5jYXRle1wiLCBldWlUZXh0VHJ1bmNhdGUoKSwgXCI7fS5ldWktdGV4dE51bWJlcntcIiwgZXVpTnVtYmVyRm9ybWF0KGV1aVRoZW1lQ29udGV4dCksIFwiO30uZXVpLXNjcm9sbEJhcntcIiwgZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCksIFwiO30uZXVpLXlTY3JvbGx7XCIsIGV1aVlTY3JvbGwoZXVpVGhlbWVDb250ZXh0KSwgXCI7fS5ldWkteFNjcm9sbHtcIiwgZXVpWFNjcm9sbChldWlUaGVtZUNvbnRleHQpLCBcIjt9LmV1aS15U2Nyb2xsV2l0aFNoYWRvd3N7XCIsIGV1aVlTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZUNvbnRleHQpLCBcIjt9LmV1aS14U2Nyb2xsV2l0aFNoYWRvd3N7XCIsIGV1aVhTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZUNvbnRleHQpLCBcIjt9W2NsYXNzKj0nZXVpLXNob3dGb3InXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50O31cIiwgT2JqZWN0LmtleXMoZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLmJyZWFrcG9pbnQpLm1hcChmdW5jdGlvbiAoc2l6ZSkge1xuICAgIHJldHVybiBcIlxcbiAgICAgIC5ldWktaGlkZUZvci0tXCIuY29uY2F0KHNpemUsIFwiIHtcXG4gICAgICAgIFwiKS5jb25jYXQoZXVpQnJlYWtwb2ludChldWlUaGVtZUNvbnRleHQsIFtzaXplXSksIFwiIHtcXG4gICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICAuZXVpLXNob3dGb3ItLVwiKS5jb25jYXQoc2l6ZSwgXCIge1xcbiAgICAgICAgXCIpLmNvbmNhdChldWlCcmVha3BvaW50KGV1aVRoZW1lQ29udGV4dCwgW3NpemVdKSwgXCIge1xcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLmV1aS1zaG93Rm9yLS1cIikuY29uY2F0KHNpemUsIFwiLS1ibG9jayB7XFxuICAgICAgICBcIikuY29uY2F0KGV1aUJyZWFrcG9pbnQoZXVpVGhlbWVDb250ZXh0LCBbc2l6ZV0pLCBcIiB7XFxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIC5ldWktc2hvd0Zvci0tXCIpLmNvbmNhdChzaXplLCBcIi0taW5saW5lQmxvY2sge1xcbiAgICAgICAgXCIpLmNvbmNhdChldWlCcmVha3BvaW50KGV1aVRoZW1lQ29udGV4dCwgW3NpemVdKSwgXCIge1xcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLmV1aS1zaG93Rm9yLS1cIikuY29uY2F0KHNpemUsIFwiLS1mbGV4IHtcXG4gICAgICAgIFwiKS5jb25jYXQoZXVpQnJlYWtwb2ludChldWlUaGVtZUNvbnRleHQsIFtzaXplXSksIFwiIHtcXG4gICAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xcbiAgICAgICAgfVxcbiAgICAgIH1cIik7XG4gIH0pLCBcIjs7bGFiZWw6Z2xvYmFsU3R5bGVzO1wiKTtcbn07XG5leHBvcnQgdmFyIEV1aVV0aWxpdHlDbGFzc2VzID0gZnVuY3Rpb24gRXVpVXRpbGl0eUNsYXNzZXMoKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEdsb2JhbCwge1xuICAgIHN0eWxlczogZ2xvYmFsU3R5bGVzKGV1aVRoZW1lKVxuICB9KTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDYWNoZVByb3ZpZGVyIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ2FjaGVQcm92aWRlciA9IGZ1bmN0aW9uIEV1aUNhY2hlUHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIGNoaWxkcmVuICYmIGNhY2hlID8gX19fRW1vdGlvbkpTWChDYWNoZVByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNhY2hlXG4gIH0sIGNoaWxkcmVuKSA6IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIGNoaWxkcmVuKTtcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmV4cG9ydCB2YXIgQ09MT1JfTU9ERV9NRURJQV9RVUVSWSA9ICcocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspJztcbmV4cG9ydCB2YXIgRXVpU3lzdGVtQ29sb3JNb2RlUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlTeXN0ZW1Db2xvck1vZGVQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIC8vIENoZWNrIHR5cGVvZiBhbmQgdXNlIG9wdGlvbmFsIGNoYWluaW5nIGZvciBTU1Igb3IgdGVzdCBlbnZpcm9ubWVudHNcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfd2luZG93JG1hdGNoTWVkaWEsIF93aW5kb3c7XG4gICAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKF93aW5kb3ckbWF0Y2hNZWRpYSA9IChfd2luZG93ID0gd2luZG93KS5tYXRjaE1lZGlhKSAhPT0gbnVsbCAmJiBfd2luZG93JG1hdGNoTWVkaWEgIT09IHZvaWQgMCAmJiAoX3dpbmRvdyRtYXRjaE1lZGlhID0gX3dpbmRvdyRtYXRjaE1lZGlhLmNhbGwoX3dpbmRvdywgQ09MT1JfTU9ERV9NRURJQV9RVUVSWSkpICE9PSBudWxsICYmIF93aW5kb3ckbWF0Y2hNZWRpYSAhPT0gdm9pZCAwICYmIF93aW5kb3ckbWF0Y2hNZWRpYS5tYXRjaGVzID8gJ0RBUksnIDogJ0xJR0hUJztcbiAgICB9KSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBzeXN0ZW1Db2xvck1vZGUgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldFN5c3RlbUNvbG9yTW9kZSA9IF91c2VTdGF0ZTJbMV07XG5cbiAgLy8gTGlzdGVuIGZvciBzeXN0ZW0gY2hhbmdlc1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBfd2luZG93JG1hdGNoTWVkaWEyLCBfd2luZG93MiwgX3dpbmRvdyRtYXRjaE1lZGlhMiRjLCBfd2luZG93JG1hdGNoTWVkaWEyJGMyO1xuICAgIHZhciBldmVudExpc3RlbmVyID0gZnVuY3Rpb24gZXZlbnRMaXN0ZW5lcihldmVudCkge1xuICAgICAgc2V0U3lzdGVtQ29sb3JNb2RlKGV2ZW50Lm1hdGNoZXMgPyAnREFSSycgOiAnTElHSFQnKTtcbiAgICB9O1xuXG4gICAgLy8gT3B0aW9uYWwgY2hhaW5pbmcgaGVyZSBpcyBmb3IgdGVzdCBlbnZpcm9ubWVudHMgLSBTU1Igc2hvdWxkIG5vdCBydW4gdXNlRWZmZWN0XG4gICAgKF93aW5kb3ckbWF0Y2hNZWRpYTIgPSAoX3dpbmRvdzIgPSB3aW5kb3cpLm1hdGNoTWVkaWEpID09PSBudWxsIHx8IF93aW5kb3ckbWF0Y2hNZWRpYTIgPT09IHZvaWQgMCB8fCAoX3dpbmRvdyRtYXRjaE1lZGlhMiRjID0gKF93aW5kb3ckbWF0Y2hNZWRpYTIkYzIgPSBfd2luZG93JG1hdGNoTWVkaWEyLmNhbGwoX3dpbmRvdzIsIENPTE9SX01PREVfTUVESUFfUVVFUlkpKS5hZGRFdmVudExpc3RlbmVyKSA9PT0gbnVsbCB8fCBfd2luZG93JG1hdGNoTWVkaWEyJGMgPT09IHZvaWQgMCB8fCBfd2luZG93JG1hdGNoTWVkaWEyJGMuY2FsbChfd2luZG93JG1hdGNoTWVkaWEyJGMyLCAnY2hhbmdlJywgZXZlbnRMaXN0ZW5lcik7XG5cbiAgICAvLyBDbGVhbiB1cCB0aGUgbGlzdGVuZXIgb24gdW5tb3VudFxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3dpbmRvdyRtYXRjaE1lZGlhMywgX3dpbmRvdzMsIF93aW5kb3ckbWF0Y2hNZWRpYTMkYywgX3dpbmRvdyRtYXRjaE1lZGlhMyRjMjtcbiAgICAgIChfd2luZG93JG1hdGNoTWVkaWEzID0gKF93aW5kb3czID0gd2luZG93KS5tYXRjaE1lZGlhKSA9PT0gbnVsbCB8fCBfd2luZG93JG1hdGNoTWVkaWEzID09PSB2b2lkIDAgfHwgKF93aW5kb3ckbWF0Y2hNZWRpYTMkYyA9IChfd2luZG93JG1hdGNoTWVkaWEzJGMyID0gX3dpbmRvdyRtYXRjaE1lZGlhMy5jYWxsKF93aW5kb3czLCBDT0xPUl9NT0RFX01FRElBX1FVRVJZKSkucmVtb3ZlRXZlbnRMaXN0ZW5lcikgPT09IG51bGwgfHwgX3dpbmRvdyRtYXRjaE1lZGlhMyRjID09PSB2b2lkIDAgfHwgX3dpbmRvdyRtYXRjaE1lZGlhMyRjLmNhbGwoX3dpbmRvdyRtYXRjaE1lZGlhMyRjMiwgJ2NoYW5nZScsIGV2ZW50TGlzdGVuZXIpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIGNoaWxkcmVuKHN5c3RlbUNvbG9yTW9kZSk7XG59O1xuRXVpU3lzdGVtQ29sb3JNb2RlUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogVGhpcyB1dGlsIGNyZWF0ZXMgYSBjb250ZXh0IGZvciBFdWlQcm92aWRlcnMgdG8gdXNlIGFuZCBkZXRlcm1pbmUgaWYgdGhleSdyZVxuICogdGhlIG9ubHkgKHRvcC1tb3N0KSBFdWlQcm92aWRlciBpbiB0aGUgYXBwLiBJZiB0aGV5IGFyZW4ndCAoaS5lLiwgdGhleSdyZVxuICogbmVzdGVkIHdpdGhpbiBhbm90aGVyIEV1aVByb3ZpZGVyKSB3ZSBzaG91bGQgdGhyb3cgYSB3YXJuaW5nIGFuZCBub3RcbiAqIHJlbmRlciBpbnN0YW50aWF0ZSB0aGUgbmVzdGVkIEV1aVByb3ZpZGVyLlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlOZXN0ZWRQcm92aWRlckNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChmYWxzZSk7XG5leHBvcnQgdmFyIEV1aVByb3ZpZGVyTmVzdGVkQ2hlY2sgPSBmdW5jdGlvbiBFdWlQcm92aWRlck5lc3RlZENoZWNrKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpTmVzdGVkUHJvdmlkZXJDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRydWVcbiAgfSwgY2hpbGRyZW4pO1xufTtcbmV4cG9ydCB2YXIgdXNlSXNOZXN0ZWRFdWlQcm92aWRlciA9IGZ1bmN0aW9uIHVzZUlzTmVzdGVkRXVpUHJvdmlkZXIoKSB7XG4gIHJldHVybiAhIXVzZUNvbnRleHQoRXVpTmVzdGVkUHJvdmlkZXJDb250ZXh0KTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcIm9wdGlvbnNcIiwgXCJvbkNoYW5nZVwiLCBcIm9uQWN0aXZlT3B0aW9uQ2hhbmdlXCIsIFwic2VhcmNoYWJsZVwiLCBcInNlYXJjaFByb3BzXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwiaXNMb2FkaW5nXCIsIFwibGlzdFByb3BzXCIsIFwicmVuZGVyT3B0aW9uXCIsIFwiaGVpZ2h0XCIsIFwiYWxsb3dFeGNsdXNpb25zXCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJsb2FkaW5nTWVzc2FnZVwiLCBcIm5vTWF0Y2hlc01lc3NhZ2VcIiwgXCJlbXB0eU1lc3NhZ2VcIiwgXCJlcnJvck1lc3NhZ2VcIiwgXCJzZWxlY3RhYmxlU2NyZWVuUmVhZGVyVGV4dFwiLCBcImlzUHJlRmlsdGVyZWRcIiwgXCJvcHRpb25NYXRjaGVyXCJdLFxuICBfZXhjbHVkZWQyID0gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJvbkNoYW5nZVwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImlucHV0UmVmXCJdLFxuICBfZXhjbHVkZWQzID0gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJpc1ZpcnR1YWxpemVkXCIsIFwicm93SGVpZ2h0XCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIGNyZWF0ZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5cywgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuLi9sb2FkaW5nJztcbmltcG9ydCB7IEV1aVNwYWNlciB9IGZyb20gJy4uL3NwYWNlcic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJMaXZlLCBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlTZWxlY3RhYmxlU2VhcmNoIH0gZnJvbSAnLi9zZWxlY3RhYmxlX3NlYXJjaCc7XG5pbXBvcnQgeyBFdWlTZWxlY3RhYmxlTWVzc2FnZSB9IGZyb20gJy4vc2VsZWN0YWJsZV9tZXNzYWdlJztcbmltcG9ydCB7IEV1aVNlbGVjdGFibGVMaXN0IH0gZnJvbSAnLi9zZWxlY3RhYmxlX2xpc3QnO1xuaW1wb3J0IHsgY3JlYXRlUGFydGlhbFN0cmluZ0VxdWFsaXR5T3B0aW9uTWF0Y2hlciwgZ2V0TWF0Y2hpbmdPcHRpb25zIH0gZnJvbSAnLi9tYXRjaGluZ19vcHRpb25zJztcbmltcG9ydCB7IGV1aVNlbGVjdGFibGVTdHlsZXMgYXMgc3R5bGVzIH0gZnJvbSAnLi9zZWxlY3RhYmxlLnN0eWxlcyc7XG5cbi8vIFRoZSBgc2VhcmNoYWJsZWAgcHJvcCBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciBhMTF5LlxuLy8gV2hlbiBwcmVzZW50LCB3ZSBlZmZlY3RpdmVseSBjaGFuZ2UgZnJvbSBhZGhlcmluZ1xuLy8gdG8gdGhlIEFSSUEgYGxpc3Rib3hgIHNwZWMgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4yLyNMaXN0Ym94KVxuLy8gdG8gdGhlIEFSSUEgYGNvbWJvYm94YCBzcGVjIChodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLTEuMi8jY29tYm9ib3gpXG4vLyBhbmQgKHJlKWltcGxlbWVudCBhbGwgcmVsZXZhbnQgYXR0cmlidXRlcyBhbmQga2V5Ym9hcmQgaW50ZXJhY3Rpb25zLlxuLy8gVGFrZSBub3RlIG9mIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIGBzZWFyY2hhYmxlYCB0byBlbnN1cmUgdGhhdCBhbnlcbi8vIG1vZGlmaWNhdGlvbnMgcmVtYWluIGluIGFsaWdubWVudC5cbi8vXG4vLyBgc2VhcmNoUHJvcHNgIGNhbiBvbmx5IGJlIHNwZWNpZmllZCB3aGVuIGBzZWFyY2hhYmxlYCBpcyB0cnVlXG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aVNlbGVjdGFibGUocHJvcHMpIHtcbiAgICB2YXIgX3NlYXJjaFByb3BzJG9uQ2hhbmdlO1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpU2VsZWN0YWJsZSk7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aVNlbGVjdGFibGUsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpbnB1dFJlZlwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY29udGFpbmVyUmVmXCIsIC8qI19fUFVSRV9fKi9jcmVhdGVSZWYoKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9wdGlvbnNMaXN0UmVmXCIsIC8qI19fUFVSRV9fKi9jcmVhdGVSZWYoKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInByZXZlbnRPbkZvY3VzXCIsIGZhbHNlKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicm9vdElkXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm1lc3NhZ2VDb250ZW50SWRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibGlzdElkXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImlzRm9jdXNPblNlYXJjaE9yTGlzdEJveFwiLCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICB2YXIgX3RoaXMkb3B0aW9uc0xpc3RSZWYkO1xuICAgICAgdmFyIHNlYXJjaEhhc0ZvY3VzID0gX3RoaXMucHJvcHMuc2VhcmNoYWJsZSAmJiB0YXJnZXQgPT09IF90aGlzLmlucHV0UmVmO1xuICAgICAgdmFyIGxpc3RCb3ggPSAoX3RoaXMkb3B0aW9uc0xpc3RSZWYkID0gX3RoaXMub3B0aW9uc0xpc3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkID09PSB2b2lkIDAgfHwgKF90aGlzJG9wdGlvbnNMaXN0UmVmJCA9IF90aGlzJG9wdGlvbnNMaXN0UmVmJC5saXN0Qm94UmVmKSA9PT0gbnVsbCB8fCBfdGhpcyRvcHRpb25zTGlzdFJlZiQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnNMaXN0UmVmJC5wYXJlbnRFbGVtZW50O1xuICAgICAgdmFyIGxpc3RCb3hDb250YWluc0ZvY3VzID0gdGFyZ2V0IGluc3RhbmNlb2YgTm9kZSAmJiAobGlzdEJveCA9PT0gbnVsbCB8fCBsaXN0Qm94ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsaXN0Qm94LmNvbnRhaW5zKHRhcmdldCkpO1xuICAgICAgdmFyIGxpc3RCb3hIYXNGb2N1cyA9IHRhcmdldCA9PT0gbGlzdEJveCB8fCBsaXN0Qm94Q29udGFpbnNGb2N1cztcbiAgICAgIHJldHVybiBzZWFyY2hIYXNGb2N1cyB8fCBsaXN0Qm94SGFzRm9jdXM7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uTW91c2VEb3duXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEJ5cGFzcyBvbkZvY3VzIHdoZW4gYSBjbGljayBldmVudCBvcmlnaW5hdGVzIGZyb20gdGhpcy5jb250YWluZXJSZWYuXG4gICAgICAvLyBQcmV2ZW50cyBvbkZvY3VzIGZyb20gc2Nyb2xsaW5nIGF3YXkgZnJvbSBhIGNsaWNrZWQgb3B0aW9uIGFuZCBuZWdhdGluZyB0aGUgc2VsZWN0aW9uIGV2ZW50LlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL2lzc3Vlcy80MTQ3XG4gICAgICBfdGhpcy5wcmV2ZW50T25Gb2N1cyA9IHRydWU7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uRm9jdXNcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJldmVudE9uRm9jdXMpIHtcbiAgICAgICAgX3RoaXMucHJldmVudE9uRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9ucy5sZW5ndGggfHwgX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgJiYgIV90aGlzLmlzRm9jdXNPblNlYXJjaE9yTGlzdEJveChldmVudC50YXJnZXQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBmaXJzdFNlbGVjdGVkID0gX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi5jaGVja2VkICYmICFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5pc0dyb3VwTGFiZWw7XG4gICAgICB9KTtcbiAgICAgIGlmIChmaXJzdFNlbGVjdGVkID4gLTEpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBmaXJzdFNlbGVjdGVkLFxuICAgICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiAhb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaXNHcm91cExhYmVsO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIG9wdGlvbnNMaXN0ID0gX3RoaXMub3B0aW9uc0xpc3RSZWYuY3VycmVudDtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIHVzZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aCBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGVcbiAgICAgIC8vIHNlYXJjaGJveCBvciBzZWxlY3Rpb24gbGlzdC4gSWYgc28sIHRoZSB1c2VyIG1heSBiZSBhdHRlbXB0aW5nIHRvXG4gICAgICAvLyBpbnRlcmFjdCB3aXRoIHRoZSBzZWFyY2ggY2xlYXIgYnV0dG9uIG9yIGEgdG90YWxseSBjdXN0b20gYnV0dG9uLFxuICAgICAgLy8gYW5kIGxpc3Rib3gga2V5Ym9hcmQgbmF2aWdhdGlvbi9zZWxlY3Rpb24gc2hvdWxkIG5vdCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoIV90aGlzLmlzRm9jdXNPblNlYXJjaE9yTGlzdEJveChldmVudC50YXJnZXQpKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogdW5kZWZpbmVkLFxuICAgICAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19VUDpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIF90aGlzLmluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4KC0xKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX0RPV046XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgxKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGb3Igbm9uLXNlYXJjaGFibGUgaW5zdGFuY2VzLCBTUEFDRSBpbnRlcmFjdGlvbiBzaG91bGQgYWxpZ24gd2l0aFxuICAgICAgICAvLyB0aGUgdXNlciBleHBlY3RhdGlvbiBvZiBzZWxlY3Rpb24gdG9nZ2xpbmcgKGUuZy4sIGlucHV0W3R5cGU9Y2hlY2tib3hdKS5cbiAgICAgICAgLy8gRU5URVIgaXMgYWxzbyBhIHZhbGlkIHNlbGVjdGlvbiBtZWNoYW5pc20gaW4gdGhpcyBjYXNlLlxuICAgICAgICBjYXNlIGtleXMuRU5URVI6XG4gICAgICAgIGNhc2Uga2V5cy5TUEFDRTpcbiAgICAgICAgICBpZiAoX3RoaXMucHJvcHMuc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgLy8gRm9yIHNlYXJjaGFibGUgaW5zdGFuY2VzLCBTUEFDRSBpcyByZXNlcnZlZCBhcyBhIGNoYXJhY3RlciBmb3IgZmlsdGVyaW5nXG4gICAgICAgICAgICAvLyB2aWEgdGhlIGlucHV0IGJveCwgYW5kIGFzIHN1Y2ggb25seSBFTlRFUiB3aWxsIHRvZ2dsZSBzZWxlY3Rpb24uXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBfdGhpcy5pbnB1dFJlZiAmJiBldmVudC5rZXkgPT09IGtleXMuU1BBQ0UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCAhPSBudWxsICYmIG9wdGlvbnNMaXN0KSB7XG4gICAgICAgICAgICBldmVudC5wZXJzaXN0KCk7IC8vIE5PVEU6IFRoaXMgaXMgbmVlZGVkIGZvciBSZWFjdCB2MTYgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgIG9wdGlvbnNMaXN0Lm9uQWRkT3JSZW1vdmVPcHRpb24oX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnNbX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXhdLCBldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGtleXMuQUxUOlxuICAgICAgICBjYXNlIGtleXMuU0hJRlQ6XG4gICAgICAgIGNhc2Uga2V5cy5DVFJMOlxuICAgICAgICBjYXNlIGtleXMuTUVUQTpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogdW5kZWZpbmVkXG4gICAgICAgICAgfSwgX3RoaXMub25Gb2N1cyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4XCIsIGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBvcHRpb25zIGF2YWlsYWJsZSwgZG8gbm90aGluZy5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBhY3RpdmVPcHRpb25JbmRleCA9IF9yZWYuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnMgPSBfcmVmLnZpc2libGVPcHRpb25zO1xuICAgICAgICB2YXIgbmV4dEFjdGl2ZU9wdGlvbkluZGV4O1xuICAgICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggPT0gbnVsbCkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdXNlcidzIGtleWJvYXJkIG5hdmlnYXRpb24gb2YgdGhlIG1lbnUsIHRoZW4gd2UnbGwgZm9jdXNcbiAgICAgICAgICAvLyBlaXRoZXIgdGhlIGZpcnN0IG9yIGxhc3QgaXRlbS5cbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhbW91bnQgPCAwID8gdmlzaWJsZU9wdGlvbnMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYWN0aXZlT3B0aW9uSW5kZXggKyBhbW91bnQ7XG4gICAgICAgICAgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IHZpc2libGVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IHZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHcm91cCB0aXRsZXMgYW5kIGRpc2FibGVkIG9wdGlvbnMgYXJlIGluY2x1ZGVkIGluIG9wdGlvbiBsaXN0IGJ1dCBhcmUgbm90IHNlbGVjdGFibGVcbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGFtb3VudCA+IDAgPyAxIDogLTE7XG4gICAgICAgIHdoaWxlICh2aXNpYmxlT3B0aW9uc1tuZXh0QWN0aXZlT3B0aW9uSW5kZXhdLmlzR3JvdXBMYWJlbCB8fCB2aXNpYmxlT3B0aW9uc1tuZXh0QWN0aXZlT3B0aW9uSW5kZXhdLmRpc2FibGVkKSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbmV4dEFjdGl2ZU9wdGlvbkluZGV4ICsgZGlyZWN0aW9uO1xuICAgICAgICAgIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSB2aXNpYmxlT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4ID09PSB2aXNpYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IG5leHRBY3RpdmVPcHRpb25JbmRleFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uU2VhcmNoQ2hhbmdlXCIsIGZ1bmN0aW9uIChzZWFyY2hWYWx1ZSwgdmlzaWJsZU9wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRzZWFyY2hQcm8sIF90aGlzJHByb3BzJHNlYXJjaFBybzI7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgdmlzaWJsZU9wdGlvbnM6IHZpc2libGVPcHRpb25zLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogdW5kZWZpbmVkXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICBfdGhpcy5vbkZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgKF90aGlzJHByb3BzJHNlYXJjaFBybyA9IF90aGlzLnByb3BzLnNlYXJjaFByb3BzKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRzZWFyY2hQcm8gPT09IHZvaWQgMCB8fCAoX3RoaXMkcHJvcHMkc2VhcmNoUHJvMiA9IF90aGlzJHByb3BzJHNlYXJjaFByby5vbkNoYW5nZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkc2VhcmNoUHJvMiA9PT0gdm9pZCAwIHx8IF90aGlzJHByb3BzJHNlYXJjaFBybzIuY2FsbChfdGhpcyRwcm9wcyRzZWFyY2hQcm8sIHNlYXJjaFZhbHVlLCB2aXNpYmxlT3B0aW9ucyk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQ29udGFpbmVyQmx1clwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgLy8gSWdub3JlIGJsdXIgZXZlbnRzIHdoZW4gbW92aW5nIGZyb20gc2VhcmNoIHRvIG9wdGlvbiB0byBhdm9pZCBhY3RpdmVPcHRpb25JbmRleCBjb25mbGljdHNcbiAgICAgIGlmIChfdGhpcy5pc0ZvY3VzT25TZWFyY2hPckxpc3RCb3goZS5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWQsXG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk9wdGlvbkNsaWNrXCIsIGZ1bmN0aW9uIChvcHRpb25zLCBldmVudCwgY2xpY2tlZE9wdGlvbikge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQgPSBfdGhpcyRwcm9wcy5pc1ByZUZpbHRlcmVkLFxuICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzLm9uQ2hhbmdlLFxuICAgICAgICBvcHRpb25NYXRjaGVyID0gX3RoaXMkcHJvcHMub3B0aW9uTWF0Y2hlcjtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IF90aGlzLnN0YXRlLnNlYXJjaFZhbHVlO1xuICAgICAgdmFyIHZpc2libGVPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKHtcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlICE9PSBudWxsICYmIHNlYXJjaFZhbHVlICE9PSB2b2lkIDAgPyBzZWFyY2hWYWx1ZSA6ICcnLFxuICAgICAgICBpc1ByZUZpbHRlcmVkOiAhIWlzUHJlRmlsdGVyZWQsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczogW10sXG4gICAgICAgIG9wdGlvbk1hdGNoZXI6IG9wdGlvbk1hdGNoZXJcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2aXNpYmxlT3B0aW9uczogdmlzaWJsZU9wdGlvbnNcbiAgICAgIH0pO1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKG9wdGlvbnMsIGV2ZW50LCBjbGlja2VkT3B0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2Nyb2xsVG9JdGVtXCIsIGZ1bmN0aW9uIChpbmRleCwgYWxpZ24pIHtcbiAgICAgIHZhciBfdGhpcyRvcHRpb25zTGlzdFJlZiQyO1xuICAgICAgKF90aGlzJG9wdGlvbnNMaXN0UmVmJDIgPSBfdGhpcy5vcHRpb25zTGlzdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdGhpcyRvcHRpb25zTGlzdFJlZiQyID09PSB2b2lkIDAgfHwgKF90aGlzJG9wdGlvbnNMaXN0UmVmJDIgPSBfdGhpcyRvcHRpb25zTGlzdFJlZiQyLmxpc3RSZWYpID09PSBudWxsIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJDIgPT09IHZvaWQgMCB8fCBfdGhpcyRvcHRpb25zTGlzdFJlZiQyLnNjcm9sbFRvSXRlbShpbmRleCwgYWxpZ24pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJtYWtlT3B0aW9uSWRcIiwgZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICByZXR1cm4gaW5kZXggIT0gbnVsbCA/IFwiXCIuY29uY2F0KF90aGlzLmxpc3RJZCwgXCJfb3B0aW9uLVwiKS5jb25jYXQoaW5kZXgpIDogJyc7XG4gICAgfSk7XG4gICAgX3RoaXMucm9vdElkID0gcHJvcHMuaWQgPyBmdW5jdGlvbiAoc3VmZml4KSB7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQocHJvcHMuaWQpLmNvbmNhdChzdWZmaXggPyBcIl9cIi5jb25jYXQoc3VmZml4KSA6ICcnKTtcbiAgICB9IDogaHRtbElkR2VuZXJhdG9yKCk7XG4gICAgX3RoaXMubGlzdElkID0gX3RoaXMucm9vdElkKCdsaXN0Ym94Jyk7XG4gICAgX3RoaXMubWVzc2FnZUNvbnRlbnRJZCA9IF90aGlzLnJvb3RJZCgnbWVzc2FnZUNvbnRlbnQnKTtcbiAgICB2YXIgX29wdGlvbnMgPSBwcm9wcy5vcHRpb25zLFxuICAgICAgc2luZ2xlU2VsZWN0aW9uID0gcHJvcHMuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgX2lzUHJlRmlsdGVyZWQgPSBwcm9wcy5pc1ByZUZpbHRlcmVkLFxuICAgICAgc2VhcmNoUHJvcHMgPSBwcm9wcy5zZWFyY2hQcm9wcztcbiAgICB2YXIgaW5pdGlhbFNlYXJjaFZhbHVlID0gKHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWFyY2hQcm9wcy52YWx1ZSkgfHwgU3RyaW5nKChzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VhcmNoUHJvcHMuZGVmYXVsdFZhbHVlKSB8fCAnJyk7XG4gICAgdmFyIF92aXNpYmxlT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyh7XG4gICAgICBvcHRpb25zOiBfb3B0aW9ucyxcbiAgICAgIHNlYXJjaFZhbHVlOiBpbml0aWFsU2VhcmNoVmFsdWUsXG4gICAgICBpc1ByZUZpbHRlcmVkOiAhIV9pc1ByZUZpbHRlcmVkLFxuICAgICAgc2VsZWN0ZWRPcHRpb25zOiBbXSxcbiAgICAgIG9wdGlvbk1hdGNoZXI6IHByb3BzLm9wdGlvbk1hdGNoZXJcbiAgICB9KTtcbiAgICBzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwIHx8IChfc2VhcmNoUHJvcHMkb25DaGFuZ2UgPSBzZWFyY2hQcm9wcy5vbkNoYW5nZSkgPT09IG51bGwgfHwgX3NlYXJjaFByb3BzJG9uQ2hhbmdlID09PSB2b2lkIDAgfHwgX3NlYXJjaFByb3BzJG9uQ2hhbmdlLmNhbGwoc2VhcmNoUHJvcHMsIGluaXRpYWxTZWFyY2hWYWx1ZSwgX3Zpc2libGVPcHRpb25zKTtcblxuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc2luZ2xlIG9wdGlvbiBpcyBhY3RpdmUgaWYgaXQgaXMgaW4gdGhlIHZpc2libGVPcHRpb25zXG4gICAgdmFyIHNlbGVjdGVkT3B0aW9ucyA9IF9vcHRpb25zLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICByZXR1cm4gb3B0aW9uLmNoZWNrZWQ7XG4gICAgfSk7XG4gICAgdmFyIF9hY3RpdmVPcHRpb25JbmRleDtcbiAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGlmIChfdmlzaWJsZU9wdGlvbnMuaW5jbHVkZXMoc2VsZWN0ZWRPcHRpb25zWzBdKSkge1xuICAgICAgICBfYWN0aXZlT3B0aW9uSW5kZXggPSBfdmlzaWJsZU9wdGlvbnMuaW5kZXhPZihzZWxlY3RlZE9wdGlvbnNbMF0pO1xuICAgICAgfVxuICAgIH1cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBfYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICBzZWFyY2hWYWx1ZTogaW5pdGlhbFNlYXJjaFZhbHVlLFxuICAgICAgdmlzaWJsZU9wdGlvbnM6IF92aXNpYmxlT3B0aW9ucyxcbiAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpU2VsZWN0YWJsZSwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpU2VsZWN0YWJsZSwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCAhPT0gdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25BY3RpdmVPLCBfdGhpcyRwcm9wczI7XG4gICAgICAgIHZhciBhY3RpdmVPcHRpb24gPSB0aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGwgPyB0aGlzLnN0YXRlLnZpc2libGVPcHRpb25zW3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXhdIDogbnVsbDtcbiAgICAgICAgKF90aGlzJHByb3BzJG9uQWN0aXZlTyA9IChfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzKS5vbkFjdGl2ZU9wdGlvbkNoYW5nZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25BY3RpdmVPID09PSB2b2lkIDAgfHwgX3RoaXMkcHJvcHMkb25BY3RpdmVPLmNhbGwoX3RoaXMkcHJvcHMyLCBhY3RpdmVPcHRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczMuY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMy5jbGFzc05hbWUsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczMub3B0aW9ucyxcbiAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczMub25DaGFuZ2UsXG4gICAgICAgIG9uQWN0aXZlT3B0aW9uQ2hhbmdlID0gX3RoaXMkcHJvcHMzLm9uQWN0aXZlT3B0aW9uQ2hhbmdlLFxuICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMzLnNlYXJjaGFibGUsXG4gICAgICAgIHNlYXJjaFByb3BzID0gX3RoaXMkcHJvcHMzLnNlYXJjaFByb3BzLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczMuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczMuaXNMb2FkaW5nLFxuICAgICAgICBsaXN0UHJvcHMgPSBfdGhpcyRwcm9wczMubGlzdFByb3BzLFxuICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczMucmVuZGVyT3B0aW9uLFxuICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczMuaGVpZ2h0LFxuICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wczMuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wczNbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgYXJpYURlc2NyaWJlZGJ5ID0gX3RoaXMkcHJvcHMzWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgIGxvYWRpbmdNZXNzYWdlID0gX3RoaXMkcHJvcHMzLmxvYWRpbmdNZXNzYWdlLFxuICAgICAgICBub01hdGNoZXNNZXNzYWdlID0gX3RoaXMkcHJvcHMzLm5vTWF0Y2hlc01lc3NhZ2UsXG4gICAgICAgIGVtcHR5TWVzc2FnZSA9IF90aGlzJHByb3BzMy5lbXB0eU1lc3NhZ2UsXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IF90aGlzJHByb3BzMy5lcnJvck1lc3NhZ2UsXG4gICAgICAgIHNlbGVjdGFibGVTY3JlZW5SZWFkZXJUZXh0ID0gX3RoaXMkcHJvcHMzLnNlbGVjdGFibGVTY3JlZW5SZWFkZXJUZXh0LFxuICAgICAgICBpc1ByZUZpbHRlcmVkID0gX3RoaXMkcHJvcHMzLmlzUHJlRmlsdGVyZWQsXG4gICAgICAgIG9wdGlvbk1hdGNoZXIgPSBfdGhpcyRwcm9wczMub3B0aW9uTWF0Y2hlcixcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczMsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHN0YXRlLnNlYXJjaFZhbHVlLFxuICAgICAgICB2aXNpYmxlT3B0aW9ucyA9IF90aGlzJHN0YXRlLnZpc2libGVPcHRpb25zLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4O1xuXG4gICAgICAvLyBTb21lIG1lc3N5IGRlc3RydWN0dXJpbmcgaGVyZSB0byByZW1vdmUgYXJpYS1sYWJlbC9kZXNjcmliZWRieSBmcm9tIHNlYXJjaFByb3BzIGFuZCBsaXN0UHJvcHNcbiAgICAgIC8vIE1hZGUgbWVzc2llciBieSBzb21lIFRTIHJlcXVpcmVtZW50c1xuICAgICAgLy8gVGhlIGFyaWEgYXR0cmlidXRlcyBhcmUgdGhlbiB1c2VkIGluIGdldEFjY2Vzc2libGVOYW1lKCkgdG8gcGxhY2UgdGhlbSB3aGVyZSB0aGV5IG5lZWQgdG8gZ29cbiAgICAgIHZhciB1bmtub3duQWNjZXNzaWJsZU5hbWUgPSB7XG4gICAgICAgICdhcmlhLWxhYmVsJzogdW5kZWZpbmVkLFxuICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIHZhciBfcmVmMiA9IHNlYXJjaFByb3BzIHx8IHVua25vd25BY2Nlc3NpYmxlTmFtZSxcbiAgICAgICAgc2VhcmNoQXJpYUxhYmVsID0gX3JlZjJbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgc2VhcmNoQXJpYURlc2NyaWJlZGJ5ID0gX3JlZjJbJ2FyaWEtZGVzY3JpYmVkYnknXSxcbiAgICAgICAgcHJvcHNPbkNoYW5nZSA9IF9yZWYyLm9uQ2hhbmdlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcmVmMi5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGlucHV0UmVmID0gX3JlZjIuaW5wdXRSZWYsXG4gICAgICAgIGNsZWFuZWRTZWFyY2hQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgX2V4Y2x1ZGVkMik7XG4gICAgICB2YXIgX3JlZjMgPSBsaXN0UHJvcHMgfHwgdW5rbm93bkFjY2Vzc2libGVOYW1lLFxuICAgICAgICBsaXN0QXJpYUxhYmVsID0gX3JlZjNbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgbGlzdEFyaWFEZXNjcmliZWRieSA9IF9yZWYzWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgIGlzVmlydHVhbGl6ZWQgPSBfcmVmMy5pc1ZpcnR1YWxpemVkLFxuICAgICAgICByb3dIZWlnaHQgPSBfcmVmMy5yb3dIZWlnaHQsXG4gICAgICAgIGNsZWFuZWRMaXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIF9leGNsdWRlZDMpO1xuICAgICAgdmFyIHZpcnR1YWxpemVkUHJvcHM7XG4gICAgICBpZiAoaXNWaXJ0dWFsaXplZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdmlydHVhbGl6ZWRQcm9wcyA9IHtcbiAgICAgICAgICBpc1ZpcnR1YWxpemVkOiBpc1ZpcnR1YWxpemVkXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHJvd0hlaWdodCAhPSBudWxsKSB7XG4gICAgICAgIHZpcnR1YWxpemVkUHJvcHMgPSB7XG4gICAgICAgICAgcm93SGVpZ2h0OiByb3dIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZScsIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlTZWxlY3RhYmxlLCBoZWlnaHQgPT09ICdmdWxsJyAmJiBzdHlsZXMuZnVsbEhlaWdodF07XG5cbiAgICAgIC8qKiBDcmVhdGUgbWVzc2FnZSBjb250ZW50IHRoYXQgcmVwbGFjZXMgdGhlIGxpc3QgaWYgbm8gb3B0aW9ucyBhcmUgYXZhaWxhYmxlICh5ZXQpICovXG4gICAgICB2YXIgbWVzc2FnZUNvbnRlbnQ7XG4gICAgICBpZiAoZXJyb3JNZXNzYWdlICE9IG51bGwpIHtcbiAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSB0eXBlb2YgZXJyb3JNZXNzYWdlID09PSAnc3RyaW5nJyA/IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGVycm9yTWVzc2FnZSkgOiBlcnJvck1lc3NhZ2U7XG4gICAgICB9IGVsc2UgaWYgKGlzTG9hZGluZykge1xuICAgICAgICBpZiAobG9hZGluZ01lc3NhZ2UgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgbG9hZGluZ01lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgICAgICBzaXplOiBcIm1cIlxuICAgICAgICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aVNwYWNlciwge1xuICAgICAgICAgICAgc2l6ZTogXCJ4c1wiXG4gICAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGxvYWRpbmdNZXNzYWdlIHx8IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5sb2FkaW5nT3B0aW9uc1wiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJMb2FkaW5nIG9wdGlvbnNcIlxuICAgICAgICAgIH0pKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGxvYWRpbmdNZXNzYWdlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLm1lc3NhZ2VDb250ZW50SWRcbiAgICAgICAgICB9LCBsb2FkaW5nTWVzc2FnZS5wcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNlYXJjaFZhbHVlICYmIHZpc2libGVPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAobm9NYXRjaGVzTWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBub01hdGNoZXNNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgbm9NYXRjaGVzTWVzc2FnZSB8fCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUubm9NYXRjaGluZ09wdGlvbnNcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwie3NlYXJjaFZhbHVlfSBkb2Vzbid0IG1hdGNoIGFueSBvcHRpb25zXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVmFsdWU6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgc2VhcmNoVmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChub01hdGNoZXNNZXNzYWdlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLm1lc3NhZ2VDb250ZW50SWRcbiAgICAgICAgICB9LCBub01hdGNoZXNNZXNzYWdlLnByb3BzKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChlbXB0eU1lc3NhZ2UgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgZW1wdHlNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgZW1wdHlNZXNzYWdlIHx8IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5ub0F2YWlsYWJsZU9wdGlvbnNcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiTm8gb3B0aW9ucyBhdmFpbGFibGVcIlxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoZW1wdHlNZXNzYWdlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLm1lc3NhZ2VDb250ZW50SWRcbiAgICAgICAgICB9LCBlbXB0eU1lc3NhZ2UucHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFRoZXJlIGFyZSBsb3RzIG9mIHdheXMgdG8gYWRkIGFuIGFjY2Vzc2libGUgbmFtZVxuICAgICAgICogVXN1YWxseSB3ZSB3YW50IHRoZSBzYW1lIG5hbWUgZm9yIHRoZSBpbnB1dCBhbmQgdGhlIGxpc3Rib3ggKHdoaWNoIGlzIGFkZGVkIGJ5IGFyaWEtbGFiZWwvZGVzY3JpYmVkYnkpXG4gICAgICAgKiBCdXQgeW91IGNhbiBhbHdheXMgb3ZlcnJpZGUgaXQgdXNpbmcgc2VhcmNoUHJvcHMgb3IgbGlzdFByb3BzXG4gICAgICAgKiBUaGlzIGZpbmRzIHRoZSBjb3JyZWN0IG5hbWUgdG8gdXNlXG4gICAgICAgKlxuICAgICAgICogVE9ETzogVGhpcyBkb2Vzbid0IGhhbmRsZSBiZWluZyBsYWJlbGxlZCAoPGxhYmVsIGZvcj1cImlkT2ZJbnB1dFwiPilcbiAgICAgICAqL1xuICAgICAgdmFyIGdldEFjY2Vzc2libGVOYW1lID0gZnVuY3Rpb24gZ2V0QWNjZXNzaWJsZU5hbWUocHJvcHMsIG1lc3NhZ2VDb250ZW50SWQpIHtcbiAgICAgICAgaWYgKHByb3BzICYmIHByb3BzWydhcmlhLWxhYmVsJ10pIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiBwcm9wc1snYXJpYS1sYWJlbCddXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWVzc2FnZUNvbnRlbnRJZFN0cmluZyA9IG1lc3NhZ2VDb250ZW50SWQgPyBcIiBcIi5jb25jYXQobWVzc2FnZUNvbnRlbnRJZCkgOiAnJztcbiAgICAgICAgaWYgKHByb3BzICYmIHByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J10pIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBcIlwiLmNvbmNhdChwcm9wc1snYXJpYS1kZXNjcmliZWRieSddKS5jb25jYXQobWVzc2FnZUNvbnRlbnRJZFN0cmluZylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmlhTGFiZWwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiBhcmlhTGFiZWxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmlhRGVzY3JpYmVkYnkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBcIlwiLmNvbmNhdChhcmlhRGVzY3JpYmVkYnkpLmNvbmNhdChtZXNzYWdlQ29udGVudElkU3RyaW5nKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfTtcbiAgICAgIHZhciBzZWFyY2hBY2Nlc3NpYmxlTmFtZSA9IGdldEFjY2Vzc2libGVOYW1lKHNlYXJjaFByb3BzLCB0aGlzLm1lc3NhZ2VDb250ZW50SWQpO1xuICAgICAgdmFyIHNlYXJjaEhhc0FjY2Vzc2libGVOYW1lID0gQm9vbGVhbihPYmplY3Qua2V5cyhzZWFyY2hBY2Nlc3NpYmxlTmFtZSkubGVuZ3RoKTtcbiAgICAgIHZhciBzZWFyY2ggPSBzZWFyY2hhYmxlID8gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuczogWydldWlTZWxlY3RhYmxlLnNjcmVlblJlYWRlckluc3RydWN0aW9ucycsICdldWlTZWxlY3RhYmxlLnBsYWNlaG9sZGVyTmFtZSddLFxuICAgICAgICBkZWZhdWx0czogWydVc2UgdGhlIFVwIGFuZCBEb3duIGFycm93IGtleXMgdG8gbW92ZSBmb2N1cyBvdmVyIG9wdGlvbnMuIFByZXNzIEVudGVyIHRvIHNlbGVjdC4gUHJlc3MgRXNjYXBlIHRvIGNvbGxhcHNlIG9wdGlvbnMuJywgJ0ZpbHRlciBvcHRpb25zJ11cbiAgICAgIH0sIGZ1bmN0aW9uIChfcmVmNCkge1xuICAgICAgICB2YXIgX3JlZjUgPSBfc2xpY2VkVG9BcnJheShfcmVmNCwgMiksXG4gICAgICAgICAgc2NyZWVuUmVhZGVySW5zdHJ1Y3Rpb25zID0gX3JlZjVbMF0sXG4gICAgICAgICAgcGxhY2Vob2xkZXJOYW1lID0gX3JlZjVbMV07XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVTZWFyY2gsIF9leHRlbmRzKHtcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogbGlzdEFyaWFEZXNjcmliZWRieUlkLFxuICAgICAgICAgIGtleTogXCJsaXN0U2VhcmNoXCIsXG4gICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICB2YWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgb25DaGFuZ2U6IF90aGlzMi5vblNlYXJjaENoYW5nZSxcbiAgICAgICAgICBsaXN0SWQ6IF90aGlzMi5vcHRpb25zTGlzdFJlZi5jdXJyZW50ID8gX3RoaXMyLmxpc3RJZCA6IHVuZGVmaW5lZCAvLyBPbmx5IHBhc3MgdGhlIGxpc3RJZCBpZiBpdCBleGlzdHMgb24gdGhlIHBhZ2VcbiAgICAgICAgICAsXG4gICAgICAgICAgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjogX3RoaXMyLm1ha2VPcHRpb25JZChhY3RpdmVPcHRpb25JbmRleCkgLy8gdGhlIGN1cnJlbnQgZmF1eC1mb2N1c2VkIG9wdGlvblxuICAgICAgICAgICxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXJOYW1lLFxuICAgICAgICAgIGlzUHJlRmlsdGVyZWQ6ICEhaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgICBvcHRpb25NYXRjaGVyOiBvcHRpb25NYXRjaGVyLFxuICAgICAgICAgIGlucHV0UmVmOiBmdW5jdGlvbiBpbnB1dFJlZihub2RlKSB7XG4gICAgICAgICAgICB2YXIgX3NlYXJjaFByb3BzJGlucHV0UmVmO1xuICAgICAgICAgICAgX3RoaXMyLmlucHV0UmVmID0gbm9kZTtcbiAgICAgICAgICAgIHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgfHwgKF9zZWFyY2hQcm9wcyRpbnB1dFJlZiA9IHNlYXJjaFByb3BzLmlucHV0UmVmKSA9PT0gbnVsbCB8fCBfc2VhcmNoUHJvcHMkaW5wdXRSZWYgPT09IHZvaWQgMCB8fCBfc2VhcmNoUHJvcHMkaW5wdXRSZWYuY2FsbChzZWFyY2hQcm9wcywgbm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBzZWFyY2hIYXNBY2Nlc3NpYmxlTmFtZSA/IHNlYXJjaEFjY2Vzc2libGVOYW1lIDoge1xuICAgICAgICAgICdhcmlhLWxhYmVsJzogcGxhY2Vob2xkZXJOYW1lXG4gICAgICAgIH0sIGNsZWFuZWRTZWFyY2hQcm9wcykpLCBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICBpZDogbGlzdEFyaWFEZXNjcmliZWRieUlkXG4gICAgICAgIH0sIHNlbGVjdGFibGVTY3JlZW5SZWFkZXJUZXh0LCBcIiBcIiwgc2NyZWVuUmVhZGVySW5zdHJ1Y3Rpb25zKSkpO1xuICAgICAgfSkgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgcmVzdWx0c0xlbmd0aCA9IHZpc2libGVPcHRpb25zLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiAhb3B0aW9uLmRpc2FibGVkO1xuICAgICAgfSkubGVuZ3RoO1xuICAgICAgdmFyIGxpc3RTY3JlZW5SZWFkZXJTdGF0dXMgPSBzZWFyY2hhYmxlICYmIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLnNlYXJjaFJlc3VsdHNcIixcbiAgICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoX3JlZjYpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0c0xlbmd0aCA9IF9yZWY2LnJlc3VsdHNMZW5ndGg7XG4gICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHJlc3VsdHNMZW5ndGgsIFwiIHJlc3VsdFwiKS5jb25jYXQocmVzdWx0c0xlbmd0aCA9PT0gMSA/ICcnIDogJ3MnLCBcIiBhdmFpbGFibGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlczoge1xuICAgICAgICAgIHJlc3VsdHNMZW5ndGg6IHJlc3VsdHNMZW5ndGhcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB2YXIgbGlzdEFyaWFEZXNjcmliZWRieUlkID0gdGhpcy5yb290SWQoJ2luc3RydWN0aW9ucycpO1xuICAgICAgdmFyIGxpc3RBY2Nlc3NpYmxlTmFtZSA9IGdldEFjY2Vzc2libGVOYW1lKGxpc3RQcm9wcywgbGlzdEFyaWFEZXNjcmliZWRieUlkKTtcbiAgICAgIHZhciBsaXN0SGFzQWNjZXNzaWJsZU5hbWUgPSBCb29sZWFuKE9iamVjdC5rZXlzKGxpc3RBY2Nlc3NpYmxlTmFtZSkubGVuZ3RoKTtcbiAgICAgIHZhciBsaXN0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUucGxhY2Vob2xkZXJOYW1lXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiRmlsdGVyIG9wdGlvbnNcIlxuICAgICAgfSwgZnVuY3Rpb24gKHBsYWNlaG9sZGVyTmFtZSkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgc2VhcmNoYWJsZSAmJiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlckxpdmUsIHtcbiAgICAgICAgICBpc0FjdGl2ZTogbWVzc2FnZUNvbnRlbnQgIT0gbnVsbCB8fCBhY3RpdmVPcHRpb25JbmRleCAhPSBudWxsXG4gICAgICAgIH0sIG1lc3NhZ2VDb250ZW50IHx8IGxpc3RTY3JlZW5SZWFkZXJTdGF0dXMpLCBtZXNzYWdlQ29udGVudCA/IF9fX0Vtb3Rpb25KU1goRXVpU2VsZWN0YWJsZU1lc3NhZ2UsIHtcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpU2VsZWN0YWJsZU1lc3NhZ2VcIixcbiAgICAgICAgICBpZDogX3RoaXMyLm1lc3NhZ2VDb250ZW50SWQsXG4gICAgICAgICAgYm9yZGVyZWQ6IGxpc3RQcm9wcyAmJiBsaXN0UHJvcHMuYm9yZGVyZWRcbiAgICAgICAgfSwgbWVzc2FnZUNvbnRlbnQpIDogX19fRW1vdGlvbkpTWChFdWlTZWxlY3RhYmxlTGlzdCwgX2V4dGVuZHMoe1xuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJldWlTZWxlY3RhYmxlTGlzdFwiLFxuICAgICAgICAgIGtleTogXCJsaXN0XCIsXG4gICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICB2aXNpYmxlT3B0aW9uczogdmlzaWJsZU9wdGlvbnMsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgIGlzUHJlRmlsdGVyZWQ6IGlzUHJlRmlsdGVyZWQsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IGFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4OiBmdW5jdGlvbiBzZXRBY3RpdmVPcHRpb25JbmRleChpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBpbmRleFxuICAgICAgICAgICAgfSwgY2IpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25PcHRpb25DbGljazogX3RoaXMyLm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uOiBzaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgcmVmOiBfdGhpczIub3B0aW9uc0xpc3RSZWYsXG4gICAgICAgICAgcmVuZGVyT3B0aW9uOiByZW5kZXJPcHRpb24sXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgYWxsb3dFeGNsdXNpb25zOiBhbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgICAgc2VhcmNoYWJsZTogc2VhcmNoYWJsZSxcbiAgICAgICAgICBtYWtlT3B0aW9uSWQ6IF90aGlzMi5tYWtlT3B0aW9uSWQsXG4gICAgICAgICAgbGlzdElkOiBfdGhpczIubGlzdElkXG4gICAgICAgIH0sIGxpc3RIYXNBY2Nlc3NpYmxlTmFtZSA/IGxpc3RBY2Nlc3NpYmxlTmFtZSA6IHNlYXJjaGFibGUgJiYge1xuICAgICAgICAgICdhcmlhLWxhYmVsJzogcGxhY2Vob2xkZXJOYW1lXG4gICAgICAgIH0sIGNsZWFuZWRMaXN0UHJvcHMsIHZpcnR1YWxpemVkUHJvcHMpKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgcmVmOiB0aGlzLmNvbnRhaW5lclJlZixcbiAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uQ29udGFpbmVyQmx1cixcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbk1vdXNlRG93blxuICAgICAgfSwgcmVzdCksIGNoaWxkcmVuICYmIGNoaWxkcmVuKGxpc3QsIHNlYXJjaCkpO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhciBfc3RhdGVVcGRhdGUkc2VhcmNoVmE7XG4gICAgICB2YXIgb3B0aW9ucyA9IG5leHRQcm9wcy5vcHRpb25zLFxuICAgICAgICBpc1ByZUZpbHRlcmVkID0gbmV4dFByb3BzLmlzUHJlRmlsdGVyZWQsXG4gICAgICAgIHNlYXJjaFByb3BzID0gbmV4dFByb3BzLnNlYXJjaFByb3BzLFxuICAgICAgICBvcHRpb25NYXRjaGVyID0gbmV4dFByb3BzLm9wdGlvbk1hdGNoZXI7XG4gICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBwcmV2U3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gcHJldlN0YXRlLnNlYXJjaFZhbHVlO1xuICAgICAgdmFyIHN0YXRlVXBkYXRlID0ge1xuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBhY3RpdmVPcHRpb25JbmRleFxuICAgICAgfTtcbiAgICAgIGlmICgoc2VhcmNoUHJvcHMgPT09IG51bGwgfHwgc2VhcmNoUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlYXJjaFByb3BzLnZhbHVlKSAhPSBudWxsICYmIHNlYXJjaFByb3BzLnZhbHVlICE9PSBzZWFyY2hWYWx1ZSkge1xuICAgICAgICBzdGF0ZVVwZGF0ZS5zZWFyY2hWYWx1ZSA9IHNlYXJjaFByb3BzLnZhbHVlO1xuICAgICAgfVxuICAgICAgc3RhdGVVcGRhdGUudmlzaWJsZU9wdGlvbnMgPSBnZXRNYXRjaGluZ09wdGlvbnMoe1xuICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICBzZWFyY2hWYWx1ZTogKF9zdGF0ZVVwZGF0ZSRzZWFyY2hWYSA9IHN0YXRlVXBkYXRlLnNlYXJjaFZhbHVlKSAhPT0gbnVsbCAmJiBfc3RhdGVVcGRhdGUkc2VhcmNoVmEgIT09IHZvaWQgMCA/IF9zdGF0ZVVwZGF0ZSRzZWFyY2hWYSA6ICcnLFxuICAgICAgICBpc1ByZUZpbHRlcmVkOiAhIWlzUHJlRmlsdGVyZWQsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczogW10sXG4gICAgICAgIG9wdGlvbk1hdGNoZXI6IG9wdGlvbk1hdGNoZXJcbiAgICAgIH0pO1xuICAgICAgaWYgKGFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGwgJiYgYWN0aXZlT3B0aW9uSW5kZXggPj0gc3RhdGVVcGRhdGUudmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRlVXBkYXRlLmFjdGl2ZU9wdGlvbkluZGV4ID0gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGVVcGRhdGU7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpU2VsZWN0YWJsZSwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBvcHRpb25zOiBbXSxcbiAgc2luZ2xlU2VsZWN0aW9uOiBmYWxzZSxcbiAgc2VhcmNoYWJsZTogZmFsc2UsXG4gIGlzUHJlRmlsdGVyZWQ6IGZhbHNlLFxuICBvcHRpb25NYXRjaGVyOiBjcmVhdGVQYXJ0aWFsU3RyaW5nRXF1YWxpdHlPcHRpb25NYXRjaGVyKClcbn0pO1xuRXVpU2VsZWN0YWJsZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIEhvb2tzIHVwIGEgc2VhcmNoIGJveCB0byBmaWx0ZXIgdGhlIGxpc3QgKGJvb2xlYW4pXG4gICAgICAgKi9cbiAgc2VhcmNoYWJsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgICAqIFBhc3NlcyBwcm9wcyBkb3duIHRvIHRoZSBgRXVpRmllbGRTZWFyY2hgLlxuICAgICAgICogU2VlICNFdWlTZWxlY3RhYmxlU2VhcmNoUHJvcHNcbiAgICAgICAqL1xuICBzZWFyY2hQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBGdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBgbGlzdGAgbm9kZSBhbmQgdGhlblxuICAgICAgICogdGhlIGBzZWFyY2hgIG5vZGUgKGlmIGBzZWFyY2hhYmxlYCBpcyBhcHBsaWVkKVxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICAgKiBBcnJheSBvZiBFdWlTZWxlY3RhYmxlT3B0aW9uIG9iamVjdHMuIFNlZSAjRXVpU2VsZWN0YWJsZU9wdGlvblByb3BzXG4gICAgICAgKi9cbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIGBib29sZWFuYC5cbiAgICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gaW5kaWNhdGUgb2JqZWN0IGlzIGp1c3QgYSBncm91cGluZyBsYWJlbCwgbm90IGEgc2VsZWN0YWJsZSBpdGVtXG4gICAgICAgKi9cbiAgICBpc0dyb3VwTGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogVmlzaWJsZSBsYWJlbCBvZiBvcHRpb24uXG4gICAgICAgKiBNdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgaXRlbXMgaWYgYGtleWAgaXMgbm90IHN1cHBsaWVkXG4gICAgICAgKi9cbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsbHkgY2hhbmdlIHRoZSBzZWFyY2hhYmxlIHRlcm0gYnkgcGFzc2luZyBhIGRpZmZlcmVudCBzdHJpbmcgb3RoZXIgdGhhbiB0aGUgYGxhYmVsYC5cbiAgICAgICAqIEJlc3QgdXNlZCB3aGVuIGNyZWF0aW5nIGEgY3VzdG9tIGBvcHRpb25SZW5kZXJgIHRvIHNlcGFyYXRlIHRoZSBsYWJlbCBmcm9tIG1ldGFkYXRhIGJ1dCBhbGxvd2luZyB0byBzZWFyY2ggb24gYm90aFxuICAgICAgICovXG4gICAgc2VhcmNoYWJsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKlxuICAgICAgICogTXVzdCBiZSB1bmlxdWUgYWNyb3NzIGl0ZW1zLlxuICAgICAgICogV2lsbCBiZSB1c2VkIHRvIG1hdGNoIG9wdGlvbnMgaW5zdGVhZCBvZiBgbGFiZWxgXG4gICAgICAgKi9cbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLyoqXG4gICAgICAgKiBMZWF2ZSBgdW5kZWZpbmVkYCB0byBpbmRpY2F0ZSBub3Qgc2VsZWN0ZWQuIFBhc3MgYSBzdHJpbmcgb2ZcbiAgICAgICAqICdvbicgdG8gaW5kaWNhdGUgaW5jbHVzaW9uLCAnb2ZmJyB0byBpbmRpY2F0ZSBleGNsdXNpb24sXG4gICAgICAgKiBvciAnbWl4ZWQnIHRvIGluZGljYXRlIGluY2x1c2lvbiBmb3Igc29tZS5cbiAgICAgICAqL1xuICAgIGNoZWNrZWQ6IFByb3BUeXBlcy5hbnksXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogTm9kZSB0byBhZGQgYmV0d2VlbiB0aGUgc2VsZWN0aW9uIGljb24gYW5kIHRoZSBsYWJlbFxuICAgICAgICovXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCB0byB0aGUgZmFyIHJpZ2h0IG9mIHRoZSBpdGVtXG4gICAgICAgKi9cbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb24gZGF0YSB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGByZW5kZXJPcHRpb25zYCBlbGVtZW50LlxuICAgICAgICogQnlwYXNzIGBFdWlTZWxlY3RhYmxlSXRlbWAgYW5kIGF2b2lkIERPTSBhdHRyaWJ1dGUgd2FybmluZ3MuXG4gICAgICAgKi9cbiAgICBkYXRhOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuICAgIC8qKlxuICAgICAgICogSG93IHRvIGhhbmRsZSBsb25nIHRleHQgd2l0aGluIHRoZSBpdGVtLlxuICAgICAgICogV3JhcHBpbmcgb25seSB3b3JrcyBpZiBgaXNWaXJ0dWFsaXphdGlvbmAgaXMgZmFsc2UuXG4gICAgICAgKiBAZGVmYXVsdCAndHJ1bmNhdGUnXG4gICAgICAgKi9cbiAgICB0ZXh0V3JhcDogUHJvcFR5cGVzLm9uZU9mKFtcInRydW5jYXRlXCIsIFwid3JhcFwiXSksXG4gICAgLyoqXG4gICAgICAgKiBJZiB0ZXh0V3JhcCBpcyBzZXQgdG8gYHRydW5jYXRlYCwgeW91IGNhbiBwYXNzIGEgY3VzdG9tIHRydW5jYXRpb24gY29uZmlndXJhdGlvblxuICAgICAgICogdGhhdCBhY2NlcHRzIGFueSBbRXVpVGV4dFRydW5jYXRlXSgvIy91dGlsaXRpZXMvdGV4dC10cnVuY2F0aW9uKSBwcm9wIGV4Y2VwdCBmb3JcbiAgICAgICAqIGB0ZXh0YCBhbmQgYGNoaWxkcmVuYC5cbiAgICAgICAqXG4gICAgICAgKiBOb3RlOiB3aGVuIHNlYXJjaGluZywgY3VzdG9tIHRydW5jYXRpb24gcHJvcHMgYXJlIGlnbm9yZWQuIFRoZSBoaWdobGlnaHRlZCBzZWFyY2hcbiAgICAgICAqIHRleHQgd2lsbCBhbHdheXMgdGFrZSBwcmVjZWRlbmNlLlxuICAgICAgICovXG4gICAgdHJ1bmNhdGlvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgY3VzdG9tIHRvb2x0aXAgY29udGVudCBmb3IgdGhlIGJ1dHRvblxuICAgICAgICovXG4gICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgcHJvcHMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyAqKltFdWlUb29sVGlwXSgvIy9kaXNwbGF5L3Rvb2x0aXApKipcbiAgICAgICAqL1xuICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgICAqIFBhc3NlcyBiYWNrIHRoZSBhbHRlcmVkIGBvcHRpb25zYCBhcnJheSB3aXRoIHNlbGVjdGVkIG9wdGlvbnMgaGF2aW5nIGBjaGVja2VkOiAnb24nYC5cbiAgICAgICAqIEFsc28gcGFzc2VzIGJhY2sgdGhlIFJlYWN0IGNsaWNrL2tleWJvYXJkIGV2ZW50IGFzIGEgc2Vjb25kIGFyZ3VtZW50LFxuICAgICAgICogYW5kIHRoZSBvcHRpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIG9uQ2hhbmdlIGV2ZW50IGFzIGEgdGhpcmQgYXJndW1lbnQuXG4gICAgICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgICAqIFBhc3NlcyBiYWNrIHRoZSBjdXJyZW50IGFjdGl2ZSBvcHRpb24gd2hlbmV2ZXIgdGhlIHVzZXIgY2hhbmdlcyB0aGUgY3VycmVudGx5XG4gICAgICAgKiBoaWdobGlnaHRlZCBvcHRpb24gdmlhIGtleWJvYXJkIG5hdmlnYXRpb24gb3Igc2VhcmNoaW5nLlxuICAgICAgICovXG4gIG9uQWN0aXZlT3B0aW9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICAgKiBTZXRzIHRoZSBzaW5nbGUgc2VsZWN0aW9uIHBvbGljeSBvZlxuICAgICAgICogYGZhbHNlYDogYWxsb3dzIG11bHRpcGxlIHNlbGVjdGlvblxuICAgICAgICogYHRydWVgOiBvbmx5IGFsbG93cyBvbmUgc2VsZWN0aW9uXG4gICAgICAgKiBgYWx3YXlzYDogY2FuIGFuZCBtdXN0IGhhdmUgb25seSBvbmUgc2VsZWN0aW9uXG4gICAgICAgKi9cbiAgc2luZ2xlU2VsZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWx3YXlzXCJdKSwgUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIEFsbG93cyBtYXJraW5nIG9wdGlvbnMgYXMgYGNoZWNrZWQ9J29mZidgIGFzIHdlbGwgYXMgYCdvbidgXG4gICAgICAgKi9cbiAgYWxsb3dFeGNsdXNpb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBTaG93IGFuIGxvYWRpbmcgaW5kaWNhdG9yIHdoaWxlIHlvdSBsb2FkIGFuZCBob29rIHVwIHlvdXIgZGF0YVxuICAgICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogU2V0cyB0aGUgbWF4IGhlaWdodCBpbiBwaXhlbHMgb3IgcGFzcyBgZnVsbGAgdG8gYWxsb3dcbiAgICAgICAqIHRoZSB3aG9sZSBncm91cCB0byBmaWxsIHRoZSBoZWlnaHQgb2YgaXRzIGNvbnRhaW5lciBhbmRcbiAgICAgICAqIGFsbG93cyB0aGUgbGlzdCBncm93IGFzIHdlbGxcbiAgICAgICAqL1xuICBoZWlnaHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImZ1bGxcIl0pXSksXG4gIC8qKlxuICAgICAgICogU2VlICNFdWlTZWxlY3RhYmxlT3B0aW9uc0xpc3RcbiAgICAgICAqL1xuICBsaXN0UHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogQ3VzdG9tIHJlbmRlciBmdW5jdGlvbiBmb3IgZWFjaCBvcHRpb24uXG4gICAgICAgKiBSZXR1cm5zIGAob3B0aW9uLCBzZWFyY2hWYWx1ZSlgXG4gICAgICAgKi9cbiAgcmVuZGVyT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICAgKiBDdXN0b21pemUgdGhlIGxvYWRpbmcgbWVzc2FnZS4gUGFzcyBhIHN0cmluZyB0byBzaW1wbHkgY2hhbmdlIHRoZSB0ZXh0LFxuICAgICAgICogb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKi9cbiAgbG9hZGluZ01lc3NhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIEN1c3RvbWl6ZSB0aGUgbm8gbWF0Y2hlcyBtZXNzYWdlLiBQYXNzIGEgc3RyaW5nIHRvIHNpbXBseSBjaGFuZ2UgdGhlIHRleHQsXG4gICAgICAgKiBvciBhIG5vZGUgdG8gcmVwbGFjZSB0aGUgd2hvbGUgY29udGVudC5cbiAgICAgICAqL1xuICBub01hdGNoZXNNZXNzYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBDdXN0b21pemUgdGhlIGVtcHR5IG1lc3NhZ2UuIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCxcbiAgICAgICAqIG9yIGEgbm9kZSB0byByZXBsYWNlIHRoZSB3aG9sZSBjb250ZW50LlxuICAgICAgICovXG4gIGVtcHR5TWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogQWRkIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgKiBUaGUgbWVzc2FnZSB3aWxsIGJlIHNob3duIHdoZW4gdGhlIHZhbHVlIGlzIG5vdCBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gICAgICAgKiBQYXNzIGEgc3RyaW5nIHRvIHNpbXBseSBjaGFuZ2UgdGhlIHRleHQsIG9yIGEgbm9kZSB0byByZXBsYWNlIHRoZSB3aG9sZSBjb250ZW50LlxuICAgICAgICpcbiAgICAgICAqIGBlcnJvck1lc3NhZ2U9e2hhc0Vycm9ycyA/ICdNeSBlcnJvciBtZXNzYWdlJyA6IG51bGx9YFxuICAgICAgICovXG4gIGVycm9yTWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW251bGxdKV0pLFxuICAvKipcbiAgICAgICAqIENvbnRyb2wgd2hldGhlciBvciBub3Qgb3B0aW9ucyBnZXQgZmlsdGVyZWQgaW50ZXJuYWxseSAoaS5lLiwgd2hldGhlciBmaWx0ZXJpbmcgaXNcbiAgICAgICAqIGhhbmRsZWQgYnkgRVVJIG9yIGJ5IHlvdSwgdGhlIGNvbnN1bWVyKS5cbiAgICAgICAqIElmIHNldCB0byBgdHJ1ZWAsIGFsbCBwYXNzZWQgYG9wdGlvbnNgIHdpbGwgYmUgZGlzcGxheWVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHVzZXInc1xuICAgICAgICogc2VhcmNoIGlucHV0LlxuICAgICAgICpcbiAgICAgICAqIEFkZGl0aW9uYWxseSBhbGxvd3MgcGFzc2luZyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHdoaWNoIGVuYWJsZXMgdHVybmluZyBvZmZcbiAgICAgICAqIHNlYXJjaCBoaWdobGlnaHRpbmcgaWYgbmVlZGVkLlxuICAgICAgICpcbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgaXNQcmVGaWx0ZXJlZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBoaWdobGlnaHRTZWFyY2g6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBzY3JlZW4gcmVhZGVyIGluc3RydWN0aW9ucyB0byBhbm5vdW5jZSB1cG9uIGZvY3VzL2ludGVyYWN0aW9uLiBUaGlzIHRleHQgaXMgcmVhZCBvdXRcbiAgICAgICAqIGFmdGVyIHRoZSBgRXVpU2VsZWN0YWJsZWAgbGFiZWwgYW5kIGEgYnJpZWYgcGF1c2UsIGJ1dCBiZWZvcmUgdGhlIGRlZmF1bHQga2V5Ym9hcmQgaW5zdHJ1Y3Rpb25zIGZvclxuICAgICAgICogaW50ZXJhY3Rpbmcgd2l0aCBhIHNlbGVjdGFibGUgYXJlIHJlYWQgb3V0LlxuICAgICAgICovXG4gIHNlbGVjdGFibGVTY3JlZW5SZWFkZXJUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgICAqIE9wdGlvbmFsIGN1c3RvbSBvcHRpb24gbWF0Y2hlciBmdW5jdGlvblxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKiBjb25zdCBleGFjdEVxdWFsaXR5TWF0Y2hlcjogRXVpU2VsZWN0YWJsZU9wdGlvbk1hdGNoZXIgPSAoeyBvcHRpb24sIHNlYXJjaFZhbHVlIH0pID0+IHtcbiAgICAgICAqICAgcmV0dXJuIG9wdGlvbi5sYWJlbCA9PT0gc2VhcmNoVmFsdWU7XG4gICAgICAgKiB9XG4gICAgICAgKi9cbiAgb3B0aW9uTWF0Y2hlcjogUHJvcFR5cGVzLmZ1bmNcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJvbkNoYW5nZVwiLCBcIm9wdGlvbnNcIiwgXCJ2YWx1ZVwiLCBcInBsYWNlaG9sZGVyXCIsIFwiaXNQcmVGaWx0ZXJlZFwiLCBcImxpc3RJZFwiLCBcImNsYXNzTmFtZVwiLCBcIm9wdGlvbk1hdGNoZXJcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpRmllbGRTZWFyY2ggfSBmcm9tICcuLi8uLi9mb3JtJztcbmltcG9ydCB7IGdldE1hdGNoaW5nT3B0aW9ucyB9IGZyb20gJy4uL21hdGNoaW5nX29wdGlvbnMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aVNlbGVjdGFibGVTZWFyY2goX3JlZikge1xuICB2YXIgb25DaGFuZ2VDYWxsYmFjayA9IF9yZWYub25DaGFuZ2UsXG4gICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXG4gICAgcGxhY2Vob2xkZXIgPSBfcmVmLnBsYWNlaG9sZGVyLFxuICAgIGlzUHJlRmlsdGVyZWQgPSBfcmVmLmlzUHJlRmlsdGVyZWQsXG4gICAgbGlzdElkID0gX3JlZi5saXN0SWQsXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgb3B0aW9uTWF0Y2hlciA9IF9yZWYub3B0aW9uTWF0Y2hlcixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHNlYXJjaFZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyh7XG4gICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgaXNQcmVGaWx0ZXJlZDogaXNQcmVGaWx0ZXJlZCxcbiAgICAgIG9wdGlvbk1hdGNoZXI6IG9wdGlvbk1hdGNoZXJcbiAgICB9KTtcbiAgICBvbkNoYW5nZUNhbGxiYWNrKHNlYXJjaFZhbHVlLCBtYXRjaGluZ09wdGlvbnMpO1xuICB9LCBbb3B0aW9ucywgaXNQcmVGaWx0ZXJlZCwgb25DaGFuZ2VDYWxsYmFjaywgb3B0aW9uTWF0Y2hlcl0pO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVTZWFyY2gnLCBjbGFzc05hbWUpO1xuICB2YXIgYXJpYVByb3BzSWZMaXN0SXNQcmVzZW50ID0gbGlzdElkID8ge1xuICAgIHJvbGU6ICdjb21ib2JveCcsXG4gICAgJ2FyaWEtYXV0b2NvbXBsZXRlJzogJ2xpc3QnLFxuICAgICdhcmlhLWV4cGFuZGVkJzogdHJ1ZSxcbiAgICAnYXJpYS1jb250cm9scyc6IGxpc3RJZCxcbiAgICAnYXJpYS1vd25zJzogbGlzdElkIC8vIGxlZ2FjeSBhdHRyaWJ1dGUgYnV0IHNoaW1zIHN1cHBvcnQgZm9yIG5lYXJseSBldmVyeXRoaW5nIGF0bVxuICB9IDogdW5kZWZpbmVkO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGaWVsZFNlYXJjaCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICBpbmNyZW1lbnRhbDogdHJ1ZSxcbiAgICBmdWxsV2lkdGg6IHRydWUsXG4gICAgYXV0b0NvbXBsZXRlOiBcIm9mZlwiLFxuICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcImxpc3Rib3hcIlxuICB9LCBhcmlhUHJvcHNJZkxpc3RJc1ByZXNlbnQsIHJlc3QpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbnZhciBnZXRTZWFyY2hhYmxlTGFiZWwgPSBmdW5jdGlvbiBnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uKSB7XG4gIHZhciBub3JtYWxpemUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHZhciBzZWFyY2hhYmxlTGFiZWwgPSBvcHRpb24uc2VhcmNoYWJsZUxhYmVsIHx8IG9wdGlvbi5sYWJlbDtcbiAgcmV0dXJuIG5vcm1hbGl6ZSA/IHNlYXJjaGFibGVMYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSA6IHNlYXJjaGFibGVMYWJlbDtcbn07XG52YXIgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSA9IGZ1bmN0aW9uIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoc2VhcmNoVmFsdWUsIHNlbGVjdGVkT3B0aW9ucykge1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHNlbGVjdGVkT3B0aW9ucy5maW5kKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICByZXR1cm4gZ2V0U2VhcmNoYWJsZUxhYmVsKG9wdGlvbikgPT09IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZTtcbiAgfSk7XG59O1xudmFyIGNvbGxlY3RNYXRjaGluZ09wdGlvbiA9IGZ1bmN0aW9uIGNvbGxlY3RNYXRjaGluZ09wdGlvbihfcmVmKSB7XG4gIHZhciBzZWxlY3RlZE9wdGlvbnMgPSBfcmVmLnNlbGVjdGVkT3B0aW9ucyxcbiAgICBpc1ByZUZpbHRlcmVkID0gX3JlZi5pc1ByZUZpbHRlcmVkLFxuICAgIG9wdGlvbiA9IF9yZWYub3B0aW9uLFxuICAgIGFjY3VtdWxhdG9yID0gX3JlZi5hY2N1bXVsYXRvcixcbiAgICBzZWFyY2hWYWx1ZSA9IF9yZWYuc2VhcmNoVmFsdWUsXG4gICAgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gX3JlZi5ub3JtYWxpemVkU2VhcmNoVmFsdWUsXG4gICAgb3B0aW9uTWF0Y2hlciA9IF9yZWYub3B0aW9uTWF0Y2hlcjtcbiAgLy8gRG9uJ3Qgc2hvdyBvcHRpb25zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIGlmXG4gIC8vIHRoZSBzZWxlY3RlZE9wdGlvbnMgbGlzdCBleGlzdHNcbiAgaWYgKHNlbGVjdGVkT3B0aW9ucykge1xuICAgIHZhciBzZWxlY3RlZE9wdGlvbiA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoZ2V0U2VhcmNoYWJsZUxhYmVsKG9wdGlvbiwgZmFsc2UpLCBzZWxlY3RlZE9wdGlvbnMpO1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZSBvcHRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIHByZWZpbHRlcmVkIHRoZW4gd2UgY2FuIHNraXAgZmlsdGVyaW5nIGFnYWluc3QgdGhlIHNlYXJjaCB2YWx1ZS5cbiAgLy8gVE9ETzogSSBzdGlsbCBkb24ndCBxdWl0ZSB1bmRlcnN0YW5kIGhvdyB0aGlzIHdvcmtzIHdoZW4gaG9va2VkIHVwIHRvIGFzeW5jXG4gIGlmIChpc1ByZUZpbHRlcmVkKSB7XG4gICAgYWNjdW11bGF0b3IucHVzaChvcHRpb24pO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIW5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGlzTWF0Y2hpbmcgPSBvcHRpb25NYXRjaGVyKHtcbiAgICBvcHRpb246IG9wdGlvbixcbiAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgbm9ybWFsaXplZFNlYXJjaFZhbHVlOiBub3JtYWxpemVkU2VhcmNoVmFsdWVcbiAgfSk7XG4gIGlmIChpc01hdGNoaW5nKSB7XG4gICAgYWNjdW11bGF0b3IucHVzaChvcHRpb24pO1xuICB9XG59O1xuZXhwb3J0IHZhciBnZXRNYXRjaGluZ09wdGlvbnMgPSBmdW5jdGlvbiBnZXRNYXRjaGluZ09wdGlvbnMoX3JlZjIpIHtcbiAgdmFyIHNlYXJjaFZhbHVlID0gX3JlZjIuc2VhcmNoVmFsdWUsXG4gICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnMsXG4gICAgaXNQcmVGaWx0ZXJlZCA9IF9yZWYyLmlzUHJlRmlsdGVyZWQsXG4gICAgX3JlZjIkc2VsZWN0ZWRPcHRpb25zID0gX3JlZjIuc2VsZWN0ZWRPcHRpb25zLFxuICAgIHNlbGVjdGVkT3B0aW9ucyA9IF9yZWYyJHNlbGVjdGVkT3B0aW9ucyA9PT0gdm9pZCAwID8gW10gOiBfcmVmMiRzZWxlY3RlZE9wdGlvbnMsXG4gICAgb3B0aW9uTWF0Y2hlciA9IF9yZWYyLm9wdGlvbk1hdGNoZXI7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gW107XG4gIG9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgY29sbGVjdE1hdGNoaW5nT3B0aW9uKHtcbiAgICAgIGFjY3VtdWxhdG9yOiBtYXRjaGluZ09wdGlvbnMsXG4gICAgICBvcHRpb246IG9wdGlvbixcbiAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZTogbm9ybWFsaXplZFNlYXJjaFZhbHVlLFxuICAgICAgaXNQcmVGaWx0ZXJlZDogaXNQcmVGaWx0ZXJlZCxcbiAgICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgb3B0aW9uTWF0Y2hlcjogb3B0aW9uTWF0Y2hlclxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG1hdGNoaW5nT3B0aW9ucztcbn07XG5cbi8qKlxuICogUGFydGlhbCBzdHJpbmcgZXF1YWxpdHkgb3B0aW9uIG1hdGNoZXIgZm9yIEV1aVNlbGVjdGFibGVcbiAqIEl0IG1hdGNoZXMgYWxsIG9wdGlvbnMgd2l0aCBsYWJlbHMgaW5jbHVkaW5nIHRoZSBzZWFyY2hlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCB2YXIgY3JlYXRlUGFydGlhbFN0cmluZ0VxdWFsaXR5T3B0aW9uTWF0Y2hlciA9IGZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIoKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICB2YXIgb3B0aW9uID0gX3JlZjMub3B0aW9uLFxuICAgICAgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gX3JlZjMubm9ybWFsaXplZFNlYXJjaFZhbHVlO1xuICAgIHZhciBub3JtYWxpemVkT3B0aW9uID0gZ2V0U2VhcmNoYWJsZUxhYmVsKG9wdGlvbik7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRPcHRpb24uaW5jbHVkZXMobm9ybWFsaXplZFNlYXJjaFZhbHVlKTtcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImJvcmRlcmVkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi8uLi90ZXh0JztcbmltcG9ydCB7IGV1aVNlbGVjdGFibGVNZXNzYWdlU3R5bGVzIH0gZnJvbSAnLi9zZWxlY3RhYmxlX21lc3NhZ2Uuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGVNZXNzYWdlID0gZnVuY3Rpb24gRXVpU2VsZWN0YWJsZU1lc3NhZ2UoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkYm9yZGVyZWQgPSBfcmVmLmJvcmRlcmVkLFxuICAgIGJvcmRlcmVkID0gX3JlZiRib3JkZXJlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGJvcmRlcmVkLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlTWVzc2FnZScsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlTZWxlY3RhYmxlTWVzc2FnZVN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVNlbGVjdGFibGVNZXNzYWdlLCBib3JkZXJlZCAmJiBzdHlsZXMuYm9yZGVyZWRdO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUZXh0LCBfZXh0ZW5kcyh7XG4gICAgY29sb3I6IFwic3ViZHVlZFwiLFxuICAgIHNpemU6IFwieHNcIixcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlTZWxlY3RhYmxlTWVzc2FnZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIE1hdGNoIHRoaXMgdG8gdGhlIGBsaXN0UHJvcHMuYm9yZGVyZWRgIHByb3BlcnR5IG9mIHlvdXIgYEV1aVNlbGVjdGFibGVgIGluc3RhbmNlXG4gICAgICAgKi9cbiAgYm9yZGVyZWQ6IFByb3BUeXBlcy5ib29sXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgdmFyIGV1aVNlbGVjdGFibGVNZXNzYWdlU3R5bGVzID0gZnVuY3Rpb24gZXVpU2VsZWN0YWJsZU1lc3NhZ2VTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlTZWxlY3RhYmxlTWVzc2FnZTogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjt0ZXh0LWFsaWduOmNlbnRlcjt3b3JkLXdyYXA6YnJlYWstd29yZDs7bGFiZWw6ZXVpU2VsZWN0YWJsZU1lc3NhZ2U7XCIpLFxuICAgIC8vIE1hdGNoIGJvcmRlciBmcm9tIHNlbGVjdGFibGVfbGlzdFxuICAgIGJvcmRlcmVkOiAvKiNfX1BVUkVfXyovY3NzKFwib3ZlcmZsb3c6aGlkZGVuO2JvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLnRoaW4sIFwiO2JvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBcIjs7bGFiZWw6Ym9yZGVyZWQ7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiZGF0YVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImxhYmVsXCIsIFwiaXNHcm91cExhYmVsXCIsIFwiY2hlY2tlZFwiLCBcImRpc2FibGVkXCIsIFwicHJlcGVuZFwiLCBcImFwcGVuZFwiLCBcInJlZlwiLCBcImtleVwiLCBcInNlYXJjaGFibGVMYWJlbFwiLCBcImRhdGFcIiwgXCJ0cnVuY2F0aW9uUHJvcHNcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJjbGFzc05hbWVcIiwgXCJvcHRpb25zXCIsIFwic2VhcmNoVmFsdWVcIiwgXCJvbk9wdGlvbkNsaWNrXCIsIFwicmVuZGVyT3B0aW9uXCIsIFwiaGVpZ2h0XCIsIFwid2luZG93UHJvcHNcIiwgXCJyb3dIZWlnaHRcIiwgXCJhY3RpdmVPcHRpb25JbmRleFwiLCBcIm1ha2VPcHRpb25JZFwiLCBcInNob3dJY29uc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcInZpc2libGVPcHRpb25zXCIsIFwiYWxsb3dFeGNsdXNpb25zXCIsIFwiYm9yZGVyZWRcIiwgXCJwYWRkaW5nU2l6ZVwiLCBcInNlYXJjaGFibGVcIiwgXCJvbkZvY3VzQmFkZ2VcIiwgXCJsaXN0SWRcIiwgXCJzZXRBY3RpdmVPcHRpb25JbmRleFwiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwicm9sZVwiLCBcImlzUHJlRmlsdGVyZWRcIiwgXCJpc1ZpcnR1YWxpemVkXCIsIFwidGV4dFdyYXBcIiwgXCJ0cnVuY2F0aW9uUHJvcHNcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIG1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QsIGFyZUVxdWFsIH0gZnJvbSAncmVhY3Qtd2luZG93JztcbmltcG9ydCB7IFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUF1dG9TaXplciB9IGZyb20gJy4uLy4uL2F1dG9fc2l6ZXInO1xuaW1wb3J0IHsgRXVpSGlnaGxpZ2h0IH0gZnJvbSAnLi4vLi4vaGlnaGxpZ2h0JztcbmltcG9ydCB7IEV1aU1hcmsgfSBmcm9tICcuLi8uLi9tYXJrJztcbmltcG9ydCB7IEV1aVRleHRUcnVuY2F0ZSB9IGZyb20gJy4uLy4uL3RleHRfdHJ1bmNhdGUnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZUxpc3RJdGVtIH0gZnJvbSAnLi9zZWxlY3RhYmxlX2xpc3RfaXRlbSc7XG5pbXBvcnQgeyBldWlTZWxlY3RhYmxlTGlzdFN0eWxlcyB9IGZyb20gJy4vc2VsZWN0YWJsZV9saXN0LnN0eWxlcyc7XG5cbi8vIENvbnN1bWVyIENvbmZpZ3VyYWJsZSBQcm9wcyB2aWEgYEV1aVNlbGVjdGFibGUubGlzdFByb3BzYFxuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZUxpc3QgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpU2VsZWN0YWJsZUxpc3QocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVNlbGVjdGFibGVMaXN0KTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpU2VsZWN0YWJsZUxpc3QsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJhbmltYXRpb25GcmFtZUlkXCIsIHZvaWQgMCk7XG4gICAgLy8gY291bnRlciBmb3IgdHJhY2tpbmcgbGlzdCByZW5kZXJzIGFuZCBlbnN1cmluZyByZXJlbmRlcnNcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibGlzdFJvd1JlcmVuZGVyXCIsIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJsaXN0UmVmXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJsaXN0Qm94UmVmXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZXRMaXN0UmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RSZWYgPSByZWY7XG4gICAgICBpZiAocmVmICYmIF90aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4KSB7XG4gICAgICAgIHJlZi5zY3JvbGxUb0l0ZW0oX3RoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgsICdhdXRvJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlbW92ZVNjcm9sbGFibGVUYWJTdG9wXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIC8vIEZpcmVmb3ggYWRkcyBhIHRhYiBzdG9wIGZvciBzY3JvbGxhYmxlIGNvbnRhaW5lcnNcbiAgICAgIC8vIFdlIGhhbmRsZSB0aGlzIGluc2lkZSBzbyBuZWVkIHRvIHN0b3AgZmlyZWZveCBmcm9tIGRvaW5nIGl0cyB0aGluZ1xuICAgICAgaWYgKHJlZikge1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZXRMaXN0Qm94UmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RCb3hSZWYgPSByZWY7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgbGlzdElkID0gX3RoaXMkcHJvcHMubGlzdElkLFxuICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMuc2VhcmNoYWJsZSxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbCddLFxuICAgICAgICBhcmlhTGFiZWxsZWRieSA9IF90aGlzJHByb3BzWydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgICAgYXJpYURlc2NyaWJlZGJ5ID0gX3RoaXMkcHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXTtcbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnaWQnLCBsaXN0SWQpO1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2xpc3Rib3gnKTtcbiAgICAgICAgaWYgKHNlYXJjaGFibGUgIT09IHRydWUpIHtcbiAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbiAhPT0gJ2Fsd2F5cycgJiYgc2luZ2xlU2VsZWN0aW9uICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLW11bHRpc2VsZWN0YWJsZScsICd0cnVlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJpYUxhYmVsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBhcmlhTGFiZWwpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmlhTGFiZWxsZWRieSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknLCBhcmlhTGFiZWxsZWRieSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmlhRGVzY3JpYmVkYnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIGFyaWFEZXNjcmliZWRieSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBUaGlzIHV0aWxpdHkgaXMgbmVjZXNzYXJ5IHRvIGV4Y2x1ZGUgZ3JvdXAgbGFiZWxzIGZyb20gdGhlIGFyaWEgc2V0IGNvdW50XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNhbGN1bGF0ZUFyaWFTZXRBdHRyc1wiLCBmdW5jdGlvbiAob3B0aW9uQXJyYXkpIHtcbiAgICAgIHZhciBhcmlhUG9zSW5TZXRNYXAgPSB7fTtcbiAgICAgIHZhciBsYXRlc3RBcmlhUG9zSW5kZXggPSAwO1xuICAgICAgb3B0aW9uQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uLCBpbmRleCkge1xuICAgICAgICBpZiAoIW9wdGlvbi5pc0dyb3VwTGFiZWwpIHtcbiAgICAgICAgICBsYXRlc3RBcmlhUG9zSW5kZXgrKztcbiAgICAgICAgICBhcmlhUG9zSW5TZXRNYXBbaW5kZXhdID0gbGF0ZXN0QXJpYVBvc0luZGV4O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFyaWFQb3NJblNldE1hcDogYXJpYVBvc0luU2V0TWFwLFxuICAgICAgICBhcmlhU2V0U2l6ZTogbGF0ZXN0QXJpYVBvc0luZGV4XG4gICAgICB9O1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJMaXN0Um93XCIsIC8qI19fUFVSRV9fKi9tZW1vKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgX29wdGlvbiR0ZXh0V3JhcDtcbiAgICAgIHZhciBkYXRhID0gX3JlZi5kYXRhLFxuICAgICAgICBpbmRleCA9IF9yZWYuaW5kZXgsXG4gICAgICAgIHN0eWxlID0gX3JlZi5zdHlsZTtcbiAgICAgIHZhciBvcHRpb24gPSBkYXRhW2luZGV4XTtcbiAgICAgIHZhciBvcHRpb25EYXRhID0gb3B0aW9uLmRhdGEsXG4gICAgICAgIF9vcHRpb24gPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9uLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICBpc0dyb3VwTGFiZWwgPSBvcHRpb24uaXNHcm91cExhYmVsLFxuICAgICAgICBjaGVja2VkID0gb3B0aW9uLmNoZWNrZWQsXG4gICAgICAgIGRpc2FibGVkID0gb3B0aW9uLmRpc2FibGVkLFxuICAgICAgICBwcmVwZW5kID0gb3B0aW9uLnByZXBlbmQsXG4gICAgICAgIGFwcGVuZCA9IG9wdGlvbi5hcHBlbmQsXG4gICAgICAgIHJlZiA9IG9wdGlvbi5yZWYsXG4gICAgICAgIGtleSA9IG9wdGlvbi5rZXksXG4gICAgICAgIHNlYXJjaGFibGVMYWJlbCA9IG9wdGlvbi5zZWFyY2hhYmxlTGFiZWwsXG4gICAgICAgIF9kYXRhID0gb3B0aW9uLmRhdGEsXG4gICAgICAgIF90cnVuY2F0aW9uUHJvcHMgPSBvcHRpb24udHJ1bmNhdGlvblByb3BzLFxuICAgICAgICBvcHRpb25SZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9wdGlvbiwgX2V4Y2x1ZGVkMik7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMyLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wczIuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICBvbkZvY3VzQmFkZ2UgPSBfdGhpcyRwcm9wczIub25Gb2N1c0JhZGdlLFxuICAgICAgICBwYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzMi5wYWRkaW5nU2l6ZSxcbiAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHMyLnNob3dJY29ucyxcbiAgICAgICAgbWFrZU9wdGlvbklkID0gX3RoaXMkcHJvcHMyLm1ha2VPcHRpb25JZCxcbiAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMyLnJlbmRlck9wdGlvbixcbiAgICAgICAgc2V0QWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczIuc2V0QWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wczIuc2VhcmNoYWJsZSxcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuc2VhcmNoVmFsdWUsXG4gICAgICAgIGlzUHJlRmlsdGVyZWQgPSBfdGhpcyRwcm9wczIuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgaXNWaXJ0dWFsaXplZCA9IF90aGlzJHByb3BzMi5pc1ZpcnR1YWxpemVkO1xuICAgICAgaWYgKGlzR3JvdXBMYWJlbCkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZW5kZXJXaXRoRXVpU3R5bGVzTWVtb2l6ZXIsIG51bGwsIGZ1bmN0aW9uIChzdHlsZXNNZW1vaXplcikge1xuICAgICAgICAgIHZhciBzdHlsZXMgPSBzdHlsZXNNZW1vaXplcihldWlTZWxlY3RhYmxlTGlzdFN0eWxlcyk7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsaVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICByb2xlOiBcInByZXNlbnRhdGlvblwiLFxuICAgICAgICAgICAgY3NzOiBzdHlsZXMuZXVpU2VsZWN0YWJsZUxpc3RfX2dyb3VwTGFiZWwsXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RfX2dyb3VwTGFiZWxcIixcbiAgICAgICAgICAgIHN0eWxlOiBzdHlsZVxuICAgICAgICAgIH0sIG9wdGlvblJlc3QpLCBwcmVwZW5kLCBsYWJlbCwgYXBwZW5kKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB2YXIgaWQgPSBtYWtlT3B0aW9uSWQoaW5kZXgpO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IGFjdGl2ZU9wdGlvbkluZGV4ID09PSBpbmRleDtcblxuICAgICAgLy8gU2VhcmNoIGhpZ2hsaWdodGluZ1xuICAgICAgdmFyIGhhc1NlYXJjaCA9ICEhc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgaGlnaGxpZ2h0U2VhcmNoID0gaGFzU2VhcmNoICYmIChfdHlwZW9mKGlzUHJlRmlsdGVyZWQpID09PSAnb2JqZWN0JyA/IGlzUHJlRmlsdGVyZWQuaGlnaGxpZ2h0U2VhcmNoICE9PSBmYWxzZSA6IHRydWUpO1xuXG4gICAgICAvLyBUZXh0IHdyYXBwaW5nXG4gICAgICB2YXIgY2FuV3JhcCA9ICFpc1ZpcnR1YWxpemVkO1xuICAgICAgdmFyIF90ZXh0V3JhcCA9IChfb3B0aW9uJHRleHRXcmFwID0gb3B0aW9uLnRleHRXcmFwKSAhPT0gbnVsbCAmJiBfb3B0aW9uJHRleHRXcmFwICE9PSB2b2lkIDAgPyBfb3B0aW9uJHRleHRXcmFwIDogX3RoaXMucHJvcHMudGV4dFdyYXA7XG4gICAgICB2YXIgdGV4dFdyYXAgPSBjYW5XcmFwID8gX3RleHRXcmFwIDogJ3RydW5jYXRlJztcblxuICAgICAgLy8gVHJ1bmNhdGlvbiBjb25maWcgKGlmIGFueSkuIElmIG5vbmUsIENTUyB0cnVuY2F0aW9uIGlzIHVzZWRcbiAgICAgIHZhciB0cnVuY2F0aW9uUHJvcHMgPSB0ZXh0V3JhcCA9PT0gJ3RydW5jYXRlJyA/IF90aGlzLmdldFRydW5jYXRpb25Qcm9wcyhvcHRpb24sIGhpZ2hsaWdodFNlYXJjaCwgaXNGb2N1c2VkKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVMaXN0SXRlbSwgX2V4dGVuZHMoe1xuICAgICAgICBrZXk6IGlkLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIG9uTW91c2VEb3duKCkge1xuICAgICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4KGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTsgLy8gTk9URTogVGhpcyBpcyBuZWVkZWQgZm9yIFJlYWN0IHYxNiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgICAgIF90aGlzLm9uQWRkT3JSZW1vdmVPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkLFxuICAgICAgICB0aXRsZTogc2VhcmNoYWJsZUxhYmVsIHx8IGxhYmVsLFxuICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIHByZXBlbmQ6IHByZXBlbmQsXG4gICAgICAgIGFwcGVuZDogYXBwZW5kLFxuICAgICAgICBcImFyaWEtcG9zaW5zZXRcIjogX3RoaXMuc3RhdGUuYXJpYVBvc0luU2V0TWFwW2luZGV4XSxcbiAgICAgICAgXCJhcmlhLXNldHNpemVcIjogX3RoaXMuc3RhdGUuYXJpYVNldFNpemUsXG4gICAgICAgIG9uRm9jdXNCYWRnZTogb25Gb2N1c0JhZGdlLFxuICAgICAgICBhbGxvd0V4Y2x1c2lvbnM6IGFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgc2hvd0ljb25zOiBzaG93SWNvbnMsXG4gICAgICAgIHBhZGRpbmdTaXplOiBwYWRkaW5nU2l6ZSxcbiAgICAgICAgc2VhcmNoYWJsZTogc2VhcmNoYWJsZSxcbiAgICAgICAgdGV4dFdyYXA6IHRleHRXcmFwXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgY29tcGxleFxuICAgICAgfSwgb3B0aW9uUmVzdCksIHJlbmRlck9wdGlvbiA/IHJlbmRlck9wdGlvbiggLy8gQHRzLWlnbm9yZSBjb21wbGV4XG4gICAgICBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIF9vcHRpb24pLCBvcHRpb25EYXRhKSwgc2VhcmNoVmFsdWUpIDogaGlnaGxpZ2h0U2VhcmNoID8gX3RoaXMucmVuZGVyU2VhcmNoZWRUZXh0KGxhYmVsLCB0cnVuY2F0aW9uUHJvcHMpIDogdHJ1bmNhdGlvblByb3BzID8gX3RoaXMucmVuZGVyVHJ1bmNhdGVkVGV4dChsYWJlbCwgdHJ1bmNhdGlvblByb3BzKSA6IGxhYmVsKTtcbiAgICB9LCBhcmVFcXVhbCkpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZW5kZXJWaXJ0dWFsaXplZExpc3RcIiwgZnVuY3Rpb24gKGxpc3RDbGFzc2VzKSB7XG4gICAgICBpZiAoIV90aGlzLnByb3BzLmlzVmlydHVhbGl6ZWQpIHJldHVybiBudWxsO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gX3RoaXMuc3RhdGUsXG4gICAgICAgIG9wdGlvbkFycmF5ID0gX3RoaXMkc3RhdGUub3B0aW9uQXJyYXksXG4gICAgICAgIGl0ZW1EYXRhID0gX3RoaXMkc3RhdGUuaXRlbURhdGE7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIHdpbmRvd1Byb3BzID0gX3RoaXMkcHJvcHMzLndpbmRvd1Byb3BzLFxuICAgICAgICBmb3JjZWRIZWlnaHQgPSBfdGhpcyRwcm9wczMuaGVpZ2h0LFxuICAgICAgICByb3dIZWlnaHQgPSBfdGhpcyRwcm9wczMucm93SGVpZ2h0O1xuICAgICAgdmFyIGhlaWdodElzRnVsbCA9IGZvcmNlZEhlaWdodCA9PT0gJ2Z1bGwnO1xuICAgICAgdmFyIHZpcnR1YWxpemF0aW9uUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgY2xhc3NOYW1lOiBsaXN0Q2xhc3NlcyxcbiAgICAgICAgcmVmOiBfdGhpcy5zZXRMaXN0UmVmLFxuICAgICAgICBvdXRlclJlZjogX3RoaXMucmVtb3ZlU2Nyb2xsYWJsZVRhYlN0b3AsXG4gICAgICAgIGlubmVyUmVmOiBfdGhpcy5zZXRMaXN0Qm94UmVmLFxuICAgICAgICBpbm5lckVsZW1lbnRUeXBlOiAndWwnLFxuICAgICAgICBpdGVtQ291bnQ6IG9wdGlvbkFycmF5Lmxlbmd0aCxcbiAgICAgICAgaXRlbURhdGE6IGl0ZW1EYXRhLFxuICAgICAgICBpdGVtU2l6ZTogcm93SGVpZ2h0LFxuICAgICAgICAnZGF0YS1za2lwLWF4ZSc6ICdzY3JvbGxhYmxlLXJlZ2lvbi1mb2N1c2FibGUnXG4gICAgICB9LCB3aW5kb3dQcm9wcyk7XG5cbiAgICAgIC8vIENhbGN1bGF0ZWQgaGVpZ2h0IGlzIG9ubHkgdXNlZCBpZiBoZWlnaHQgaXMgbm90IGZ1bGxcbiAgICAgIHZhciBjYWxjdWxhdGVkSGVpZ2h0ID0gIWhlaWdodElzRnVsbCA/IGZvcmNlZEhlaWdodCB8fCAwIDogMDtcblxuICAgICAgLy8gSWYgY2FsY3VsYXRlZEhlaWdodCBpcyBzdGlsbCBmYWxzeSwgdGhlbiBjYWxjdWxhdGUgaXRcbiAgICAgIGlmICghaGVpZ2h0SXNGdWxsICYmICFjYWxjdWxhdGVkSGVpZ2h0KSB7XG4gICAgICAgIHZhciBtYXhWaXNpYmxlT3B0aW9ucyA9IDc7XG4gICAgICAgIHZhciBudW1WaXNpYmxlT3B0aW9ucyA9IG9wdGlvbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgdmFyIG51bVZpc2libGVNb3JlVGhhbk1heCA9IG9wdGlvbkFycmF5Lmxlbmd0aCA+IG1heFZpc2libGVPcHRpb25zO1xuICAgICAgICBpZiAobnVtVmlzaWJsZU1vcmVUaGFuTWF4KSB7XG4gICAgICAgICAgLy8gU2hvdyBvbmx5IGhhbGYgb2YgdGhlIGxhc3Qgb25lIHRvIGluZGljYXRlIHRoZXJlJ3MgbW9yZSB0byBzY3JvbGwgdG9cbiAgICAgICAgICBjYWxjdWxhdGVkSGVpZ2h0ID0gKG1heFZpc2libGVPcHRpb25zIC0gMC41KSAqIHJvd0hlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxjdWxhdGVkSGVpZ2h0ID0gbnVtVmlzaWJsZU9wdGlvbnMgKiByb3dIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBoZWlnaHRJc0Z1bGwgPyBfX19FbW90aW9uSlNYKEV1aUF1dG9TaXplciwge1xuICAgICAgICBvblJlc2l6ZTogX3RoaXMuY2FsY3VsYXRlRGVmYXVsdE9wdGlvbldpZHRoXG4gICAgICB9LCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgdmFyIHdpZHRoID0gX3JlZjIud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0ID0gX3JlZjIuaGVpZ2h0O1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChGaXhlZFNpemVMaXN0LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0XG4gICAgICAgIH0sIHZpcnR1YWxpemF0aW9uUHJvcHMpLCBfdGhpcy5MaXN0Um93KTtcbiAgICAgIH0pIDogX19fRW1vdGlvbkpTWChFdWlBdXRvU2l6ZXIsIHtcbiAgICAgICAgZGlzYWJsZUhlaWdodDogdHJ1ZSxcbiAgICAgICAgb25SZXNpemU6IF90aGlzLmNhbGN1bGF0ZURlZmF1bHRPcHRpb25XaWR0aFxuICAgICAgfSwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgIHZhciB3aWR0aCA9IF9yZWYzLndpZHRoO1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChGaXhlZFNpemVMaXN0LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIGhlaWdodDogY2FsY3VsYXRlZEhlaWdodFxuICAgICAgICB9LCB2aXJ0dWFsaXphdGlvblByb3BzKSwgX3RoaXMuTGlzdFJvdyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZm9yY2VWaXJ0dWFsaXplZExpc3RSb3dSZXJlbmRlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGl0ZW1EYXRhOiBfb2JqZWN0U3ByZWFkKHt9LCBfdGhpcy5zdGF0ZS5vcHRpb25BcnJheSlcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIEV1aVRleHRUcnVuY2F0ZSBpcyBleHBlbnNpdmUgcGVyZi13aXNlIC0gd2UgdXNlIHNldmVyYWwgdXRpbGl0aWVzIGhlcmUgdG9cbiAgICAvLyBvZmZzZXQgaXRzIHBlcmZvcm1hbmNlIGNvc3RcbiAgICAvLyBhbmQgY3JlYXRlcyBhIHJlc2l6ZSBvYnNlcnZlciBmb3JcbiAgICAvLyBlYWNoIGluZGl2aWR1YWwgaXRlbS4gVGhpcyBsb2dpYyB0cmllcyB0byBvZmZzZXQgdGhpcyBwZXJmb3JtYW5jZSBoaXQgYnlcbiAgICAvLyBndWVzc3RpbWF0aW5nIGEgZGVmYXVsdCB3aWR0aCBmb3IgZWFjaCBvcHRpb25cbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZm9jdXNCYWRnZU9mZnNldFwiLCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2FsY3VsYXRlRGVmYXVsdE9wdGlvbldpZHRoXCIsIGZ1bmN0aW9uIChfcmVmNCkge1xuICAgICAgdmFyIGNvbnRhaW5lcldpZHRoID0gX3JlZjQud2lkdGg7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIHRydW5jYXRpb25Qcm9wcyA9IF90aGlzJHByb3BzNC50cnVuY2F0aW9uUHJvcHMsXG4gICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wczQuc2VhcmNoYWJsZSxcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczQuc2VhcmNoVmFsdWU7XG5cbiAgICAgIC8vIElmIGl0J3Mgbm90IGxpa2VseSB3ZSdsbCBuZWVkIHRvIHVzZSBFdWlUZXh0VHJ1bmNhdGUsIGRvbid0IHNldCBzdGF0ZS9yZXJlbmRlciBvbiBldmVyeSBwYW5lbCByZXNpemVcbiAgICAgIHZhciBtYXlUcnVuY2F0ZSA9IHNlYXJjaGFibGUgfHwgdHJ1bmNhdGlvblByb3BzO1xuICAgICAgaWYgKCFtYXlUcnVuY2F0ZSkgcmV0dXJuO1xuICAgICAgdmFyIHBhZGRpbmdPZmZzZXQgPSBfdGhpcy5wcm9wcy5wYWRkaW5nU2l6ZSA9PT0gJ25vbmUnID8gMCA6IDI0OyAvLyBEZWZhdWx0cyB0byAncydcbiAgICAgIHZhciBjaGVja2VkSWNvbk9mZnNldCA9IF90aGlzLnByb3BzLnNob3dJY29ucyA9PT0gZmFsc2UgPyAwIDogMjg7IC8vIERlZmF1bHRzIHRvIHRydWVcbiAgICAgIF90aGlzLmZvY3VzQmFkZ2VPZmZzZXQgPSBfdGhpcy5wcm9wcy5vbkZvY3VzQmFkZ2UgPT09IGZhbHNlID8gMCA6IDQ2O1xuXG4gICAgICAvLyBXYWl0IGEgdGljayBmb3IgdGhlIGxpc3Rib3ggcmVmIHRvIHVwZGF0ZSBiZWZvcmUgcHJvY2VlZGluZ1xuICAgICAgX3RoaXMuYW5pbWF0aW9uRnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzY3JvbGxiYXJPZmZzZXQgPSBfdGhpcy5saXN0Qm94UmVmID8gY29udGFpbmVyV2lkdGggLSBfdGhpcy5saXN0Qm94UmVmLm9mZnNldFdpZHRoIDogMDtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGRlZmF1bHRPcHRpb25XaWR0aDogY29udGFpbmVyV2lkdGggLSBzY3JvbGxiYXJPZmZzZXQgLSBwYWRkaW5nT2Zmc2V0IC0gY2hlY2tlZEljb25PZmZzZXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUG90ZW50aWFsbHkgZm9yY2UgbGlzdCByb3dzIHRvIHJlcmVuZGVyIG9uIGR5bmFtaWMgcmVzaXplIGFzIHdlbGwsXG4gICAgICAgIC8vIGJ1dCB0cnkgdG8gZG8gaXQgYXMgbGlnaHRseSBhcyBwb3NzaWJsZVxuICAgICAgICBpZiAodHJ1bmNhdGlvblByb3BzIHx8IHNlYXJjaGFibGUgJiYgc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICBfdGhpcy5mb3JjZVZpcnR1YWxpemVkTGlzdFJvd1JlcmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJnZXRUcnVuY2F0aW9uUHJvcHNcIiwgZnVuY3Rpb24gKG9wdGlvbiwgaGlnaGxpZ2h0U2VhcmNoLCBpc0ZvY3VzZWQpIHtcbiAgICAgIC8vIEluZGl2aWR1YWwgdHJ1bmNhdGlvbiBzZXR0aW5ncyBzaG91bGQgb3ZlcnJpZGUgY29tcG9uZW50LXdpZGUgc2V0dGluZ3NcbiAgICAgIHZhciB0cnVuY2F0aW9uUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIF90aGlzLnByb3BzLnRydW5jYXRpb25Qcm9wcyksIG9wdGlvbi50cnVuY2F0aW9uUHJvcHMpO1xuXG4gICAgICAvLyBJZiB3ZSdyZSBub3QgYWN0dWFsbHkgdXNpbmcgRXVpVGV4dFRydW5jYXRlLCBubyBuZWVkIHRvIGNvbnRpbnVlXG4gICAgICB2YXIgaGFzQ29tcGxleFRydW5jYXRpb24gPSBoaWdobGlnaHRTZWFyY2ggfHwgT2JqZWN0LmtleXModHJ1bmNhdGlvblByb3BzKS5sZW5ndGggPiAwO1xuICAgICAgaWYgKCFoYXNDb21wbGV4VHJ1bmNhdGlvbikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgd2UgY2FuIHVzZSB0aGUgb3B0aW1pemVkIGRlZmF1bHQgb3B0aW9uIHdpZHRoXG4gICAgICB2YXIgZGVmYXVsdE9wdGlvbldpZHRoID0gX3RoaXMuc3RhdGUuZGVmYXVsdE9wdGlvbldpZHRoO1xuICAgICAgdmFyIHVzZURlZmF1bHRXaWR0aCA9ICFvcHRpb24uYXBwZW5kICYmICFvcHRpb24ucHJlcGVuZDtcbiAgICAgIHZhciBkZWZhdWx0V2lkdGggPSB1c2VEZWZhdWx0V2lkdGggJiYgZGVmYXVsdE9wdGlvbldpZHRoID8gaXNGb2N1c2VkID8gZGVmYXVsdE9wdGlvbldpZHRoIC0gX3RoaXMuZm9jdXNCYWRnZU9mZnNldCA6IGRlZmF1bHRPcHRpb25XaWR0aCA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgd2lkdGg6IGRlZmF1bHRXaWR0aFxuICAgICAgfSwgdHJ1bmNhdGlvblByb3BzKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVuZGVyU2VhcmNoZWRUZXh0XCIsIGZ1bmN0aW9uICh0ZXh0LCB0cnVuY2F0aW9uUHJvcHMpIHtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IF90aGlzLnByb3BzLnNlYXJjaFZhbHVlO1xuXG4gICAgICAvLyBJZiB0cnVuY2F0aW9uUHJvcHMgaXMgdW5kZWZpbmVkLCB3ZSdyZSB1c2luZyBub24tdmlydHVhbGl6ZWQgdGV4dCB3cmFwcGluZ1xuICAgICAgaWYgKCF0cnVuY2F0aW9uUHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSGlnaGxpZ2h0LCB7XG4gICAgICAgICAgc2VhcmNoOiBzZWFyY2hWYWx1ZVxuICAgICAgICB9LCB0ZXh0KTtcbiAgICAgIH1cbiAgICAgIHZhciBzZWFyY2hQb3NpdGlvblN0YXJ0ID0gdGV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICB2YXIgc2VhcmNoUG9zaXRpb25DZW50ZXIgPSBzZWFyY2hQb3NpdGlvblN0YXJ0ICsgTWF0aC5mbG9vcihzZWFyY2hWYWx1ZS5sZW5ndGggLyAyKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRleHRUcnVuY2F0ZSwgX2V4dGVuZHMoe30sIHRydW5jYXRpb25Qcm9wcywge1xuICAgICAgICAvLyBXaGVuIHNlYXJjaGluZywgZG9uJ3QgYWxsb3cgb3ZlcnJpZGluZyB0aGUgdHJ1bmNhdGlvbiBzZXR0aW5nc1xuICAgICAgICB0cnVuY2F0aW9uOiBcInN0YXJ0RW5kXCIsXG4gICAgICAgIHRydW5jYXRpb25Qb3NpdGlvbjogc2VhcmNoUG9zaXRpb25DZW50ZXIsXG4gICAgICAgIHRleHQ6IHRleHRcbiAgICAgIH0pLCBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgdGV4dC5sZW5ndGggPj0gc2VhcmNoVmFsdWUubGVuZ3RoID8gX19fRW1vdGlvbkpTWChFdWlIaWdobGlnaHQsIHtcbiAgICAgICAgICBzZWFyY2g6IHNlYXJjaFZhbHVlXG4gICAgICAgIH0sIHRleHQpIDpcbiAgICAgICAgLy8gSWYgdGhlIGF2YWlsYWJsZSB0cnVuY2F0ZWQgdGV4dCBpcyBzaG9ydGVyIHRoYW4gdGhlIGZ1bGwgc2VhcmNoIHN0cmluZyxcbiAgICAgICAgLy8ganVzdCBoaWdobGlnaHQgdGhlIGVudGlyZSB0cnVuY2F0ZWQgdGV4dFxuICAgICAgICBfX19FbW90aW9uSlNYKEV1aU1hcmssIG51bGwsIHRleHQpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZW5kZXJUcnVuY2F0ZWRUZXh0XCIsIGZ1bmN0aW9uICh0ZXh0LCB0cnVuY2F0aW9uUHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEZvciBzb21lIGJpemFycmUgcmVhc29uLCB0cnVuY2F0aW9uIGluIEV1aVNlbGVjdGFibGUgaXMgb2ZmIG9uIGluaXRpYWwgbW91bnRcbiAgICAgICAgLy8gKGJ1dCBub3Qgb24gcmVyZW5kZXIpIGZvciBTYWZhcmkgYW5kIF9zb21lXyB0cnVuY2F0aW9uIHR5cGVzIGluIEZpcmVmb3ggOnxcbiAgICAgICAgLy8gV2FpdGluZyBhIHRpY2sgYmVmb3JlIGNhbGN1bGF0aW5nIHRydW5jYXRpb24gc2VlbXMgdG8gc21vb3RoIG92ZXIgdGhlIGlzc3VlXG4gICAgICAgIF9fX0Vtb3Rpb25KU1goRXVpVGV4dFRydW5jYXRlLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2FsY3VsYXRpb25EZWxheU1zOiAyXG4gICAgICAgIH0sIHRydW5jYXRpb25Qcm9wcywge1xuICAgICAgICAgIHRleHQ6IHRleHRcbiAgICAgICAgfSksIGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkFkZE9yUmVtb3ZlT3B0aW9uXCIsIGZ1bmN0aW9uIChvcHRpb24sIGV2ZW50KSB7XG4gICAgICBpZiAob3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHM1LmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzNS5vcHRpb25zLFxuICAgICAgICBfdGhpcyRwcm9wczUkdmlzaWJsZU8gPSBfdGhpcyRwcm9wczUudmlzaWJsZU9wdGlvbnMsXG4gICAgICAgIHZpc2libGVPcHRpb25zID0gX3RoaXMkcHJvcHM1JHZpc2libGVPID09PSB2b2lkIDAgPyBvcHRpb25zIDogX3RoaXMkcHJvcHM1JHZpc2libGVPO1xuICAgICAgX3RoaXMucHJvcHMuc2V0QWN0aXZlT3B0aW9uSW5kZXgodmlzaWJsZU9wdGlvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChfcmVmNSkge1xuICAgICAgICB2YXIgbGFiZWwgPSBfcmVmNS5sYWJlbDtcbiAgICAgICAgcmV0dXJuIGxhYmVsID09PSBvcHRpb24ubGFiZWw7XG4gICAgICB9KSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAob3B0aW9uLmNoZWNrZWQgPT09ICdvbicgJiYgYWxsb3dFeGNsdXNpb25zKSB7XG4gICAgICAgICAgX3RoaXMub25FeGNsdWRlT3B0aW9uKG9wdGlvbiwgZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5jaGVja2VkID09PSAnb24nIHx8IG9wdGlvbi5jaGVja2VkID09PSAnb2ZmJykge1xuICAgICAgICAgIF90aGlzLm9uUmVtb3ZlT3B0aW9uKG9wdGlvbiwgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLm9uQWRkT3B0aW9uKG9wdGlvbiwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25BZGRPcHRpb25cIiwgZnVuY3Rpb24gKGFkZGVkT3B0aW9uLCBldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IF90aGlzLnByb3BzLFxuICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHM2Lm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczYub3B0aW9ucyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHM2LnNpbmdsZVNlbGVjdGlvbjtcbiAgICAgIHZhciBjaGFuZ2VkT3B0aW9uID0gX29iamVjdFNwcmVhZCh7fSwgYWRkZWRPcHRpb24pO1xuICAgICAgdmFyIHVwZGF0ZWRPcHRpb25zID0gb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAvLyBpZiBzaW5nbGVTZWxlY3Rpb24gaXMgZW5hYmxlZCwgdW5jaGVjayBhbnkgc2VsZWN0ZWQgb3B0aW9uKHMpXG4gICAgICAgIHZhciB1cGRhdGVkT3B0aW9uID0gX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uKTtcbiAgICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbikge1xuICAgICAgICAgIGRlbGV0ZSB1cGRhdGVkT3B0aW9uLmNoZWNrZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIGlzIHRoZSBub3ctc2VsZWN0ZWQgb3B0aW9uLCBjaGVjayBpdFxuICAgICAgICBpZiAob3B0aW9uID09PSBhZGRlZE9wdGlvbikge1xuICAgICAgICAgIHVwZGF0ZWRPcHRpb24uY2hlY2tlZCA9ICdvbic7XG4gICAgICAgICAgY2hhbmdlZE9wdGlvbiA9IHVwZGF0ZWRPcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRPcHRpb247XG4gICAgICB9KTtcbiAgICAgIG9uT3B0aW9uQ2xpY2sodXBkYXRlZE9wdGlvbnMsIGV2ZW50LCBjaGFuZ2VkT3B0aW9uKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25SZW1vdmVPcHRpb25cIiwgZnVuY3Rpb24gKHJlbW92ZWRPcHRpb24sIGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczcub25PcHRpb25DbGljayxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHM3LnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzNy5vcHRpb25zO1xuICAgICAgdmFyIGNoYW5nZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCByZW1vdmVkT3B0aW9uKTtcbiAgICAgIHZhciB1cGRhdGVkT3B0aW9ucyA9IG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pO1xuICAgICAgICBpZiAob3B0aW9uID09PSByZW1vdmVkT3B0aW9uICYmIHNpbmdsZVNlbGVjdGlvbiAhPT0gJ2Fsd2F5cycpIHtcbiAgICAgICAgICBkZWxldGUgdXBkYXRlZE9wdGlvbi5jaGVja2VkO1xuICAgICAgICAgIGNoYW5nZWRPcHRpb24gPSB1cGRhdGVkT3B0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cGRhdGVkT3B0aW9uO1xuICAgICAgfSk7XG4gICAgICBvbk9wdGlvbkNsaWNrKHVwZGF0ZWRPcHRpb25zLCBldmVudCwgY2hhbmdlZE9wdGlvbik7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uRXhjbHVkZU9wdGlvblwiLCBmdW5jdGlvbiAoZXhjbHVkZWRPcHRpb24sIGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM4ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczgub25PcHRpb25DbGljayxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzOC5vcHRpb25zO1xuICAgICAgdmFyIGNoYW5nZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBleGNsdWRlZE9wdGlvbik7XG4gICAgICB2YXIgdXBkYXRlZE9wdGlvbnMgPSBvcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHZhciB1cGRhdGVkT3B0aW9uID0gX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uKTtcbiAgICAgICAgaWYgKG9wdGlvbiA9PT0gZXhjbHVkZWRPcHRpb24pIHtcbiAgICAgICAgICB1cGRhdGVkT3B0aW9uLmNoZWNrZWQgPSAnb2ZmJztcbiAgICAgICAgICBjaGFuZ2VkT3B0aW9uID0gdXBkYXRlZE9wdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXBkYXRlZE9wdGlvbjtcbiAgICAgIH0pO1xuICAgICAgb25PcHRpb25DbGljayh1cGRhdGVkT3B0aW9ucywgZXZlbnQsIGNoYW5nZWRPcHRpb24pO1xuICAgIH0pO1xuICAgIHZhciBfb3B0aW9uQXJyYXkgPSBwcm9wcy52aXNpYmxlT3B0aW9ucyB8fCBwcm9wcy5vcHRpb25zO1xuICAgIF90aGlzLnN0YXRlID0gX29iamVjdFNwcmVhZCh7XG4gICAgICBkZWZhdWx0T3B0aW9uV2lkdGg6IDAsXG4gICAgICBvcHRpb25BcnJheTogX29wdGlvbkFycmF5LFxuICAgICAgaXRlbURhdGE6IF9vYmplY3RTcHJlYWQoe30sIF9vcHRpb25BcnJheSlcbiAgICB9LCBfdGhpcy5jYWxjdWxhdGVBcmlhU2V0QXR0cnMoX29wdGlvbkFycmF5KSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlTZWxlY3RhYmxlTGlzdCwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpU2VsZWN0YWJsZUxpc3QsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgLy8gZW5zdXJlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBpcyBjYW5jZWxlZCBvbiB1bm1vdW50IGFzXG4gICAgICAvLyBpdCBjb3VsZCBwb3RlbnRpYWxseSBydW4gb24gYSBuZXh0IHRpY2sgb3RoZXJ3aXNlXG4gICAgICBpZiAodGhpcy5hbmltYXRpb25GcmFtZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRpb25GcmFtZUlkKTtcbiAgICAgICAgdGhpcy5hbmltYXRpb25GcmFtZUlkID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzaG91bGRDb21wb25lbnRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xuICAgICAgdmFyIF90aGlzJHByb3BzOSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzOS5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgIHNob3dJY29ucyA9IF90aGlzJHByb3BzOS5zaG93SWNvbnMsXG4gICAgICAgIHBhZGRpbmdTaXplID0gX3RoaXMkcHJvcHM5LnBhZGRpbmdTaXplLFxuICAgICAgICB0ZXh0V3JhcCA9IF90aGlzJHByb3BzOS50ZXh0V3JhcCxcbiAgICAgICAgb25Gb2N1c0JhZGdlID0gX3RoaXMkcHJvcHM5Lm9uRm9jdXNCYWRnZSxcbiAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzOS5zZWFyY2hhYmxlO1xuXG4gICAgICAvLyB1c2luZyBzaG91bGRDb21wb25lbnRVcGRhdGUgdG8gZGV0ZXJtaW5lIG5lZWRlZCByZXJlbmRlciBiZWZvcmUgYWN0dWFsIHJlcmVuZGVyXG4gICAgICAvLyB3aXRob3V0IG5lZWRpbmcgc3RhdGUgdXBkYXRlcyBvciBsYWdnaW5nIGJlaGluZCBvbiB1cGRhdGVzXG4gICAgICBpZiAobmV4dFByb3BzLmFsbG93RXhjbHVzaW9ucyAhPT0gYWxsb3dFeGNsdXNpb25zIHx8IG5leHRQcm9wcy5zaG93SWNvbnMgIT09IHNob3dJY29ucyB8fCBuZXh0UHJvcHMucGFkZGluZ1NpemUgIT09IHBhZGRpbmdTaXplIHx8IG5leHRQcm9wcy50ZXh0V3JhcCAhPT0gdGV4dFdyYXAgfHwgbmV4dFByb3BzLm9uRm9jdXNCYWRnZSAhPT0gb25Gb2N1c0JhZGdlIHx8IG5leHRQcm9wcy5zZWFyY2hhYmxlICE9PSBzZWFyY2hhYmxlKSB7XG4gICAgICAgIHRoaXMubGlzdFJvd1JlcmVuZGVyICs9IDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczEwID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaXNWaXJ0dWFsaXplZCA9IF90aGlzJHByb3BzMTAuaXNWaXJ0dWFsaXplZCxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczEwLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICB2aXNpYmxlT3B0aW9ucyA9IF90aGlzJHByb3BzMTAudmlzaWJsZU9wdGlvbnMsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczEwLm9wdGlvbnMsXG4gICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzMTAuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wczEwLnNob3dJY29ucyxcbiAgICAgICAgcGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wczEwLnBhZGRpbmdTaXplLFxuICAgICAgICB0ZXh0V3JhcCA9IF90aGlzJHByb3BzMTAudGV4dFdyYXAsXG4gICAgICAgIG9uRm9jdXNCYWRnZSA9IF90aGlzJHByb3BzMTAub25Gb2N1c0JhZGdlLFxuICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMxMC5zZWFyY2hhYmxlO1xuICAgICAgaWYgKHByZXZQcm9wcy5hY3RpdmVPcHRpb25JbmRleCAhPT0gYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgdmFyIG1ha2VPcHRpb25JZCA9IHRoaXMucHJvcHMubWFrZU9wdGlvbklkO1xuICAgICAgICBpZiAodGhpcy5saXN0Qm94UmVmICYmIHRoaXMucHJvcHMuc2VhcmNoYWJsZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMubGlzdEJveFJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIG1ha2VPcHRpb25JZChhY3RpdmVPcHRpb25JbmRleCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aXZlT3B0aW9uSW5kZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaWYgKGlzVmlydHVhbGl6ZWQpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyRsaXN0UmVmO1xuICAgICAgICAgICAgKF90aGlzJGxpc3RSZWYgPSB0aGlzLmxpc3RSZWYpID09PSBudWxsIHx8IF90aGlzJGxpc3RSZWYgPT09IHZvaWQgMCB8fCBfdGhpcyRsaXN0UmVmLnNjcm9sbFRvSXRlbShhY3RpdmVPcHRpb25JbmRleCwgJ2F1dG8nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIF90aGlzJGxpc3RCb3hSZWY7XG4gICAgICAgICAgICB2YXIgYWN0aXZlT3B0aW9uSWQgPSBcIiNcIi5jb25jYXQobWFrZU9wdGlvbklkKGFjdGl2ZU9wdGlvbkluZGV4KSk7XG4gICAgICAgICAgICB2YXIgYWN0aXZlT3B0aW9uRWwgPSAoX3RoaXMkbGlzdEJveFJlZiA9IHRoaXMubGlzdEJveFJlZikgPT09IG51bGwgfHwgX3RoaXMkbGlzdEJveFJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkbGlzdEJveFJlZi5xdWVyeVNlbGVjdG9yKGFjdGl2ZU9wdGlvbklkKTtcbiAgICAgICAgICAgIGlmIChhY3RpdmVPcHRpb25FbCkge1xuICAgICAgICAgICAgICB2YXIgX2FjdGl2ZU9wdGlvbkVsJHNjcm9sO1xuICAgICAgICAgICAgICAvLyBUT0RPOiB3ZSBjYW4gcmVtb3ZlIHNjcm9sbEludG9WaWV3J3MgY29uZGl0aW9uYWwgY2hhaW5pbmcgb25jZSBqc2RvbSBzdHVicyBpdFxuICAgICAgICAgICAgICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qc2RvbS9qc2RvbS9pc3N1ZXMvMTY5NVxuICAgICAgICAgICAgICAoX2FjdGl2ZU9wdGlvbkVsJHNjcm9sID0gYWN0aXZlT3B0aW9uRWwuc2Nyb2xsSW50b1ZpZXcpID09PSBudWxsIHx8IF9hY3RpdmVPcHRpb25FbCRzY3JvbCA9PT0gdm9pZCAwIHx8IF9hY3RpdmVPcHRpb25FbCRzY3JvbC5jYWxsKGFjdGl2ZU9wdGlvbkVsLCB7XG4gICAgICAgICAgICAgICAgYmxvY2s6ICduZWFyZXN0J1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBvcHRpb25BcnJheSA9IHZpc2libGVPcHRpb25zIHx8IG9wdGlvbnM7XG4gICAgICBpZiAocHJldlByb3BzLnZpc2libGVPcHRpb25zICE9PSB2aXNpYmxlT3B0aW9ucyB8fCBwcmV2UHJvcHMub3B0aW9ucyAhPT0gb3B0aW9ucykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIG9wdGlvbkFycmF5OiBvcHRpb25BcnJheSxcbiAgICAgICAgICBpdGVtRGF0YTogX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uQXJyYXkpXG4gICAgICAgIH0sIHRoaXMuY2FsY3VsYXRlQXJpYVNldEF0dHJzKG9wdGlvbkFycmF5KSkpO1xuICAgICAgfSBlbHNlIGlmIChpc1ZpcnR1YWxpemVkKSB7XG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IExpc3RSb3cgdXBkYXRlcyBiYXNlZCBvbiBpdGVtIHByb3BzXG4gICAgICAgIGlmIChwcmV2UHJvcHMuYWxsb3dFeGNsdXNpb25zICE9PSBhbGxvd0V4Y2x1c2lvbnMgfHwgcHJldlByb3BzLnNob3dJY29ucyAhPT0gc2hvd0ljb25zIHx8IHByZXZQcm9wcy5wYWRkaW5nU2l6ZSAhPT0gcGFkZGluZ1NpemUgfHwgcHJldlByb3BzLnRleHRXcmFwICE9PSB0ZXh0V3JhcCB8fCBwcmV2UHJvcHMub25Gb2N1c0JhZGdlICE9PSBvbkZvY3VzQmFkZ2UgfHwgcHJldlByb3BzLnNlYXJjaGFibGUgIT09IHNlYXJjaGFibGUpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGl0ZW1EYXRhOiBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb25BcnJheSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMTEuY2xhc3NOYW1lLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMxMS5vcHRpb25zLFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzMTEuc2VhcmNoVmFsdWUsXG4gICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczExLm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzMTEucmVuZGVyT3B0aW9uLFxuICAgICAgICBmb3JjZWRIZWlnaHQgPSBfdGhpcyRwcm9wczExLmhlaWdodCxcbiAgICAgICAgd2luZG93UHJvcHMgPSBfdGhpcyRwcm9wczExLndpbmRvd1Byb3BzLFxuICAgICAgICByb3dIZWlnaHQgPSBfdGhpcyRwcm9wczExLnJvd0hlaWdodCxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczExLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICBtYWtlT3B0aW9uSWQgPSBfdGhpcyRwcm9wczExLm1ha2VPcHRpb25JZCxcbiAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHMxMS5zaG93SWNvbnMsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzMTEuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICB2aXNpYmxlT3B0aW9ucyA9IF90aGlzJHByb3BzMTEudmlzaWJsZU9wdGlvbnMsXG4gICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzMTEuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICBib3JkZXJlZCA9IF90aGlzJHByb3BzMTEuYm9yZGVyZWQsXG4gICAgICAgIHBhZGRpbmdTaXplID0gX3RoaXMkcHJvcHMxMS5wYWRkaW5nU2l6ZSxcbiAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzMTEuc2VhcmNoYWJsZSxcbiAgICAgICAgb25Gb2N1c0JhZGdlID0gX3RoaXMkcHJvcHMxMS5vbkZvY3VzQmFkZ2UsXG4gICAgICAgIGxpc3RJZCA9IF90aGlzJHByb3BzMTEubGlzdElkLFxuICAgICAgICBzZXRBY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMTEuc2V0QWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzMTFbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgYXJpYUxhYmVsbGVkYnkgPSBfdGhpcyRwcm9wczExWydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgICAgYXJpYURlc2NyaWJlZGJ5ID0gX3RoaXMkcHJvcHMxMVsnYXJpYS1kZXNjcmliZWRieSddLFxuICAgICAgICByb2xlID0gX3RoaXMkcHJvcHMxMS5yb2xlLFxuICAgICAgICBpc1ByZUZpbHRlcmVkID0gX3RoaXMkcHJvcHMxMS5pc1ByZUZpbHRlcmVkLFxuICAgICAgICBpc1ZpcnR1YWxpemVkID0gX3RoaXMkcHJvcHMxMS5pc1ZpcnR1YWxpemVkLFxuICAgICAgICB0ZXh0V3JhcCA9IF90aGlzJHByb3BzMTEudGV4dFdyYXAsXG4gICAgICAgIHRydW5jYXRpb25Qcm9wcyA9IF90aGlzJHByb3BzMTEudHJ1bmNhdGlvblByb3BzLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMTEsIF9leGNsdWRlZDMpO1xuICAgICAgdmFyIGhlaWdodElzRnVsbCA9IGZvcmNlZEhlaWdodCA9PT0gJ2Z1bGwnO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlTGlzdCcsIGNsYXNzTmFtZSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZW5kZXJXaXRoRXVpU3R5bGVzTWVtb2l6ZXIsIG51bGwsIGZ1bmN0aW9uIChzdHlsZXNNZW1vaXplcikge1xuICAgICAgICB2YXIgc3R5bGVzID0gc3R5bGVzTWVtb2l6ZXIoZXVpU2VsZWN0YWJsZUxpc3RTdHlsZXMpO1xuICAgICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlTZWxlY3RhYmxlTGlzdCwgaGVpZ2h0SXNGdWxsICYmIHN0eWxlcy5mdWxsSGVpZ2h0LCBib3JkZXJlZCAmJiBzdHlsZXMuYm9yZGVyZWRdO1xuICAgICAgICB2YXIgbGlzdENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlTGlzdF9fbGlzdCcsIHN0eWxlcy5ldWlTZWxlY3RhYmxlTGlzdF9fbGlzdCk7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgICAgfSwgcmVzdCksIGlzVmlydHVhbGl6ZWQgPyBfdGhpczIucmVuZGVyVmlydHVhbGl6ZWRMaXN0KGxpc3RDbGFzc2VzKSA6IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogbGlzdENsYXNzZXMsXG4gICAgICAgICAgc3R5bGU6ICFoZWlnaHRJc0Z1bGwgPyB7XG4gICAgICAgICAgICBibG9ja1NpemU6IGZvcmNlZEhlaWdodFxuICAgICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgcmVmOiBfdGhpczIucmVtb3ZlU2Nyb2xsYWJsZVRhYlN0b3BcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcInVsXCIsIHtcbiAgICAgICAgICByZWY6IF90aGlzMi5zZXRMaXN0Qm94UmVmXG4gICAgICAgIH0sIF90aGlzMi5zdGF0ZS5vcHRpb25BcnJheS5tYXAoZnVuY3Rpb24gKF8sIGluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KF90aGlzMi5MaXN0Um93LCB7XG4gICAgICAgICAgICBrZXk6IFwiXCIuY29uY2F0KGluZGV4LCBcIi1cIikuY29uY2F0KF90aGlzMi5saXN0Um93UmVyZW5kZXIpLFxuICAgICAgICAgICAgZGF0YTogX3RoaXMyLnN0YXRlLm9wdGlvbkFycmF5LFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgICAgfSwgbnVsbCk7XG4gICAgICAgIH0pKSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpU2VsZWN0YWJsZUxpc3QsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgcm93SGVpZ2h0OiAzMixcbiAgc2VhcmNoVmFsdWU6ICcnLFxuICBpc1ZpcnR1YWxpemVkOiB0cnVlXG59KTtcbkV1aVNlbGVjdGFibGVMaXN0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogVGhlIGluZGV4IG9mIHRoZSBvcHRpb24gdG8gYmUgaGlnaGxpZ2h0ZWQgYXMgcHNldWRvLWZvY3VzZWQ7XG4gICAgICAgKiBHb29kIGZvciB1c2Ugd2hlbiBvbmx5IG9uZSBzZWxlY3Rpb24gaXMgYWxsb3dlZCBhbmQgbmVlZGluZyB0byBvcGVuXG4gICAgICAgKiBkaXJlY3RseSB0byB0aGF0IG9wdGlvblxuICAgICAgICovXG4gIGFjdGl2ZU9wdGlvbkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICAgICAqIFNob3cgdGhlIGNoZWNrL2Nyb3NzIHNlbGVjdGlvbiBpbmRpY2F0b3IgaWNvbnNcbiAgICAgICAqL1xuICBzaG93SWNvbnM6IFByb3BUeXBlcy5ib29sLFxuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhbHdheXNcIl0pLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogQW55IHByb3BzIHRvIHNlbmQgc3BlY2lmaWNhbGx5IHRvIHRoZSByZWFjdC13aW5kb3cgYEZpeGVkU2l6ZUxpc3RgXG4gICAgICAgKi9cbiAgd2luZG93UHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogQWRkcyBhIGJvcmRlciBhcm91bmQgdGhlIGxpc3QgdG8gaW5kaWNhdGUgdGhlIGJvdW5kcztcbiAgICAgICAqIFVzZWZ1bCB3aGVuIHRoZSBsaXN0IHNjcm9sbHMsIG90aGVyd2lzZSB1c2UgeW91ciBvd24gY29udGFpbmVyXG4gICAgICAgKi9cbiAgYm9yZGVyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIFdoZW4gZW5hYmxlZCBieSBzZXR0aW5nIHRvIGVpdGhlciBgdHJ1ZWAgb3IgcGFzc2luZyBjdXN0b20gdGV4dCxcbiAgICAgICAqIHNob3dzIGEgaG9sbG93IGJhZGdlIGFzIGFuIGFwcGVuZCAoZmFyIHJpZ2h0KSB3aGVuIHRoZSBpdGVtIGlzIGZvY3VzZWQuXG4gICAgICAgKiBUaGUgZGVmYXVsdCBjb250ZW50IHdoZW4gYHRydWVgIGlzIGBcdTIxQTkgdG8gc2VsZWN0L2Rlc2VsZWN0L2luY2x1ZGUvZXhjbHVkZWBcbiAgICAgICAqL1xuICBvbkZvY3VzQmFkZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGFueSBzdHJpbmcgZnJvbSBvdXIgaWNvbiBsaWJyYXJ5XG4gICAgICAgKi9cbiAgICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgICAvKipcbiAgICAgICAqIFRoZSBzaWRlIG9mIHRoZSBiYWRnZSB0aGUgaWNvbiBzaG91bGQgc2l0XG4gICAgICAgKi9cbiAgICBpY29uU2lkZTogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgZWl0aGVyIG91ciBwYWxldHRlIGNvbG9ycyAocHJpbWFyeSwgc3VjY2VzcyAuLmV0Yykgb3IgYSBoZXggdmFsdWUgYCNGRkZGRkZgLCBgIzAwMGAuXG4gICAgICAgKi9cbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcbiAgICAvKipcbiAgICAgICAqIFdpbGwgb3ZlcnJpZGUgYW55IGNvbG9yIHBhc3NlZCB0aHJvdWdoIHRoZSBgY29sb3JgIHByb3AuXG4gICAgICAgKi9cbiAgICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIFByb3BzIHBhc3NlZCB0byB0aGUgY2xvc2UgYnV0dG9uLlxuICAgICAgICovXG4gICAgY2xvc2VCdXR0b25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byBpY29uIHdpdGhpbiB0aGUgYmFkZ2VcbiAgICAgICAqL1xuICAgIGljb25PbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgaWNvbk9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBpY29uT25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICAgKi9cbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgb25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gICAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBQYWRkaW5nIGZvciB0aGUgbGlzdCBpdGVtcy5cbiAgICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBIb3cgdG8gaGFuZGxlIGxvbmcgdGV4dCB3aXRoaW4gdGhlIGl0ZW0uXG4gICAgICAgKiBXcmFwcGluZyBvbmx5IHdvcmtzIGlmIHZpcnR1YWxpemF0aW9uIGlzIG9mZi5cbiAgICAgICAqL1xuICB0ZXh0V3JhcDogUHJvcFR5cGVzLm9uZU9mKFtcInRydW5jYXRlXCIsIFwid3JhcFwiXSksXG4gIC8qKlxuICAgICAgICogSWYgdGV4dFdyYXAgaXMgc2V0IHRvIGB0cnVuY2F0ZWAsIHlvdSBjYW4gcGFzcyBhIGN1c3RvbSB0cnVuY2F0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICAgICAqIHRoYXQgYWNjZXB0cyBhbnkgW0V1aVRleHRUcnVuY2F0ZV0oLyMvdXRpbGl0aWVzL3RleHQtdHJ1bmNhdGlvbikgcHJvcCBleGNlcHQgZm9yXG4gICAgICAgKiBgdGV4dGAgYW5kIGBjaGlsZHJlbmAuXG4gICAgICAgKlxuICAgICAgICogTm90ZTogd2hlbiBzZWFyY2hpbmcsIGN1c3RvbSB0cnVuY2F0aW9uIHByb3BzIGFyZSBpZ25vcmVkLiBUaGUgaGlnaGxpZ2h0ZWQgc2VhcmNoXG4gICAgICAgKiB0ZXh0IHdpbGwgYWx3YXlzIHRha2UgcHJlY2VkZW5jZS5cbiAgICAgICAqL1xuICB0cnVuY2F0aW9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogVXNlIHZpcnR1YWxpemVkIHJlbmRlcmluZyBmb3IgbGlzdCBpdGVtcyB3aXRoIGByZWFjdC13aW5kb3dgLlxuICAgICAgICogU2V0cyBlYWNoIHJvdydzIGhlaWdodCB0byB0aGUgdmFsdWUgb2YgYHJvd0hlaWdodGAuXG4gICAgICAgKi9cbiAgaXNWaXJ0dWFsaXplZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSksIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogIFRoZSBoZWlnaHQgb2YgZWFjaCBvcHRpb24gaW4gcGl4ZWxzLiBEZWZhdWx0cyB0byBgMzJgLlxuICAgICAgICogIEhhcyBubyBlZmZlY3QgaWYgYGlzVmlydHVhbGl6ZWQ9ZmFsc2VgLlxuICAgICAgICovXG4gIHJvd0hlaWdodDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICogQWxsIHBvc3NpYmxlIG9wdGlvbnNcbiAgICAgKi9cbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIGBib29sZWFuYC5cbiAgICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gaW5kaWNhdGUgb2JqZWN0IGlzIGp1c3QgYSBncm91cGluZyBsYWJlbCwgbm90IGEgc2VsZWN0YWJsZSBpdGVtXG4gICAgICAgKi9cbiAgICBpc0dyb3VwTGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogVmlzaWJsZSBsYWJlbCBvZiBvcHRpb24uXG4gICAgICAgKiBNdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgaXRlbXMgaWYgYGtleWAgaXMgbm90IHN1cHBsaWVkXG4gICAgICAgKi9cbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsbHkgY2hhbmdlIHRoZSBzZWFyY2hhYmxlIHRlcm0gYnkgcGFzc2luZyBhIGRpZmZlcmVudCBzdHJpbmcgb3RoZXIgdGhhbiB0aGUgYGxhYmVsYC5cbiAgICAgICAqIEJlc3QgdXNlZCB3aGVuIGNyZWF0aW5nIGEgY3VzdG9tIGBvcHRpb25SZW5kZXJgIHRvIHNlcGFyYXRlIHRoZSBsYWJlbCBmcm9tIG1ldGFkYXRhIGJ1dCBhbGxvd2luZyB0byBzZWFyY2ggb24gYm90aFxuICAgICAgICovXG4gICAgc2VhcmNoYWJsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKlxuICAgICAgICogTXVzdCBiZSB1bmlxdWUgYWNyb3NzIGl0ZW1zLlxuICAgICAgICogV2lsbCBiZSB1c2VkIHRvIG1hdGNoIG9wdGlvbnMgaW5zdGVhZCBvZiBgbGFiZWxgXG4gICAgICAgKi9cbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLyoqXG4gICAgICAgKiBMZWF2ZSBgdW5kZWZpbmVkYCB0byBpbmRpY2F0ZSBub3Qgc2VsZWN0ZWQuIFBhc3MgYSBzdHJpbmcgb2ZcbiAgICAgICAqICdvbicgdG8gaW5kaWNhdGUgaW5jbHVzaW9uLCAnb2ZmJyB0byBpbmRpY2F0ZSBleGNsdXNpb24sXG4gICAgICAgKiBvciAnbWl4ZWQnIHRvIGluZGljYXRlIGluY2x1c2lvbiBmb3Igc29tZS5cbiAgICAgICAqL1xuICAgIGNoZWNrZWQ6IFByb3BUeXBlcy5hbnksXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogTm9kZSB0byBhZGQgYmV0d2VlbiB0aGUgc2VsZWN0aW9uIGljb24gYW5kIHRoZSBsYWJlbFxuICAgICAgICovXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCB0byB0aGUgZmFyIHJpZ2h0IG9mIHRoZSBpdGVtXG4gICAgICAgKi9cbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb24gZGF0YSB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGByZW5kZXJPcHRpb25zYCBlbGVtZW50LlxuICAgICAgICogQnlwYXNzIGBFdWlTZWxlY3RhYmxlSXRlbWAgYW5kIGF2b2lkIERPTSBhdHRyaWJ1dGUgd2FybmluZ3MuXG4gICAgICAgKi9cbiAgICBkYXRhOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuICAgIC8qKlxuICAgICAgICogSG93IHRvIGhhbmRsZSBsb25nIHRleHQgd2l0aGluIHRoZSBpdGVtLlxuICAgICAgICogV3JhcHBpbmcgb25seSB3b3JrcyBpZiBgaXNWaXJ0dWFsaXphdGlvbmAgaXMgZmFsc2UuXG4gICAgICAgKiBAZGVmYXVsdCAndHJ1bmNhdGUnXG4gICAgICAgKi9cbiAgICB0ZXh0V3JhcDogUHJvcFR5cGVzLm9uZU9mKFtcInRydW5jYXRlXCIsIFwid3JhcFwiXSksXG4gICAgLyoqXG4gICAgICAgKiBJZiB0ZXh0V3JhcCBpcyBzZXQgdG8gYHRydW5jYXRlYCwgeW91IGNhbiBwYXNzIGEgY3VzdG9tIHRydW5jYXRpb24gY29uZmlndXJhdGlvblxuICAgICAgICogdGhhdCBhY2NlcHRzIGFueSBbRXVpVGV4dFRydW5jYXRlXSgvIy91dGlsaXRpZXMvdGV4dC10cnVuY2F0aW9uKSBwcm9wIGV4Y2VwdCBmb3JcbiAgICAgICAqIGB0ZXh0YCBhbmQgYGNoaWxkcmVuYC5cbiAgICAgICAqXG4gICAgICAgKiBOb3RlOiB3aGVuIHNlYXJjaGluZywgY3VzdG9tIHRydW5jYXRpb24gcHJvcHMgYXJlIGlnbm9yZWQuIFRoZSBoaWdobGlnaHRlZCBzZWFyY2hcbiAgICAgICAqIHRleHQgd2lsbCBhbHdheXMgdGFrZSBwcmVjZWRlbmNlLlxuICAgICAgICovXG4gICAgdHJ1bmNhdGlvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgY3VzdG9tIHRvb2x0aXAgY29udGVudCBmb3IgdGhlIGJ1dHRvblxuICAgICAgICovXG4gICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgcHJvcHMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyAqKltFdWlUb29sVGlwXSgvIy9kaXNwbGF5L3Rvb2x0aXApKipcbiAgICAgICAqL1xuICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBGaWx0ZXJlZCBvcHRpb25zIGxpc3QgKGlmIGFwcGxpY2FibGUpXG4gICAgICovXG4gIHZpc2libGVPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VhcmNoYWJsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjaGVja2VkOiBQcm9wVHlwZXMuYW55LFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZGF0YTogUHJvcFR5cGVzLnNoYXBlKHt9KSxcbiAgICB0ZXh0V3JhcDogUHJvcFR5cGVzLm9uZU9mKFtcInRydW5jYXRlXCIsIFwid3JhcFwiXSksXG4gICAgdHJ1bmNhdGlvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnlcbiAgfSkuaXNSZXF1aXJlZCksXG4gIC8qKlxuICAgICAqIFNlYXJjaCB2YWx1ZSB0byBoaWdobGlnaHQgb24gdGhlIG9wdGlvbiByZW5kZXJcbiAgICAgKi9cbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYXJyYXkgb2Ygb3B0aW9ucyB3aXRoIGFsdGVyZWQgY2hlY2tlZCBzdGF0ZSwgdGhlIGNsaWNrL2tleWJvYXJkIGV2ZW50LFxuICAgICAqIGFuZCB0aGUgb3B0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBjbGljay9rZXlib2FyZCBldmVudFxuICAgICAqL1xuICBvbk9wdGlvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBDdXN0b20gcmVuZGVyIGZvciB0aGUgbGFiZWwgcG9ydGlvbiBvZiB0aGUgb3B0aW9uO1xuICAgICAqIFRha2VzIChvcHRpb24sIHNlYXJjaFZhbHVlKSwgcmV0dXJucyBSZWFjdE5vZGVcbiAgICAgKi9cbiAgcmVuZGVyT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF4IGhlaWdodCBpbiBwaXhlbHMgb3IgcGFzcyBgZnVsbGAgdG8gYWxsb3dcbiAgICAgKiB0aGUgd2hvbGUgZ3JvdXAgdG8gZmlsbCB0aGUgaGVpZ2h0IG9mIGl0cyBjb250YWluZXIgYW5kXG4gICAgICogYWxsb3dzIHRoZSBsaXN0IGdyb3cgYXMgd2VsbFxuICAgICAqL1xuICBoZWlnaHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImZ1bGxcIl0pXSksXG4gIC8qKlxuICAgICAqIEFsbG93IGN5Y2xpbmcgdGhyb3VnaCB0aGUgb24sIG9mZiBhbmQgdW5kZWZpbmVkIHN0YXRlIG9mIG9wdGlvbi5jaGVja2VkXG4gICAgICogYW5kIG5vdCBqdXN0IG9uIGFuZCB1bmRlZmluZWRcbiAgICAgKi9cbiAgYWxsb3dFeGNsdXNpb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2VhcmNoYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIGlzUHJlRmlsdGVyZWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaGlnaGxpZ2h0U2VhcmNoOiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkXSksXG4gIG1ha2VPcHRpb25JZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgbGlzdElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHNldEFjdGl2ZU9wdGlvbkluZGV4OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImNoZWNrZWRcIiwgXCJpc0ZvY3VzZWRcIiwgXCJzaG93SWNvbnNcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCIsIFwiYWxsb3dFeGNsdXNpb25zXCIsIFwib25Gb2N1c0JhZGdlXCIsIFwicGFkZGluZ1NpemVcIiwgXCJyb2xlXCIsIFwic2VhcmNoYWJsZVwiLCBcInRleHRXcmFwXCIsIFwidG9vbFRpcENvbnRlbnRcIiwgXCJ0b29sVGlwUHJvcHNcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCJdLFxuICBfZXhjbHVkZWQyID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uLy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpQmFkZ2UgfSBmcm9tICcuLi8uLi9iYWRnZSc7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgZXVpU2VsZWN0YWJsZUxpc3RJdGVtU3R5bGVzIH0gZnJvbSAnLi9zZWxlY3RhYmxlX2xpc3RfaXRlbS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmZ1bmN0aW9uIHJlc29sdmVJY29uQW5kQ29sb3IoY2hlY2tlZCkge1xuICBzd2l0Y2ggKGNoZWNrZWQpIHtcbiAgICBjYXNlICdvbic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpY29uOiAnY2hlY2snLFxuICAgICAgICBjb2xvcjogJ3RleHQnXG4gICAgICB9O1xuICAgIGNhc2UgJ29mZic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpY29uOiAnY3Jvc3MnLFxuICAgICAgICBjb2xvcjogJ3RleHQnXG4gICAgICB9O1xuICAgIGNhc2UgJ21peGVkJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGljb246ICdtaW51cycsXG4gICAgICAgIGNvbG9yOiAndGV4dCdcbiAgICAgIH07XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGljb246ICdlbXB0eSdcbiAgICAgIH07XG4gIH1cbn1cbmV4cG9ydCB2YXIgUEFERElOR19TSVpFUyA9IFsnbm9uZScsICdzJ107XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGVMaXN0SXRlbSA9IGZ1bmN0aW9uIEV1aVNlbGVjdGFibGVMaXN0SXRlbShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIGNoZWNrZWQgPSBfcmVmLmNoZWNrZWQsXG4gICAgaXNGb2N1c2VkID0gX3JlZi5pc0ZvY3VzZWQsXG4gICAgX3JlZiRzaG93SWNvbnMgPSBfcmVmLnNob3dJY29ucyxcbiAgICBzaG93SWNvbnMgPSBfcmVmJHNob3dJY29ucyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkc2hvd0ljb25zLFxuICAgIHByZXBlbmQgPSBfcmVmLnByZXBlbmQsXG4gICAgYXBwZW5kID0gX3JlZi5hcHBlbmQsXG4gICAgYWxsb3dFeGNsdXNpb25zID0gX3JlZi5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgX3JlZiRvbkZvY3VzQmFkZ2UgPSBfcmVmLm9uRm9jdXNCYWRnZSxcbiAgICBvbkZvY3VzQmFkZ2UgPSBfcmVmJG9uRm9jdXNCYWRnZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkb25Gb2N1c0JhZGdlLFxuICAgIF9yZWYkcGFkZGluZ1NpemUgPSBfcmVmLnBhZGRpbmdTaXplLFxuICAgIHBhZGRpbmdTaXplID0gX3JlZiRwYWRkaW5nU2l6ZSA9PT0gdm9pZCAwID8gJ3MnIDogX3JlZiRwYWRkaW5nU2l6ZSxcbiAgICBfcmVmJHJvbGUgPSBfcmVmLnJvbGUsXG4gICAgcm9sZSA9IF9yZWYkcm9sZSA9PT0gdm9pZCAwID8gJ29wdGlvbicgOiBfcmVmJHJvbGUsXG4gICAgc2VhcmNoYWJsZSA9IF9yZWYuc2VhcmNoYWJsZSxcbiAgICBfcmVmJHRleHRXcmFwID0gX3JlZi50ZXh0V3JhcCxcbiAgICB0ZXh0V3JhcCA9IF9yZWYkdGV4dFdyYXAgPT09IHZvaWQgMCA/ICd0cnVuY2F0ZScgOiBfcmVmJHRleHRXcmFwLFxuICAgIHRvb2xUaXBDb250ZW50ID0gX3JlZi50b29sVGlwQ29udGVudCxcbiAgICB0b29sVGlwUHJvcHMgPSBfcmVmLnRvb2xUaXBQcm9wcyxcbiAgICBfYXJpYURlc2NyaWJlZEJ5ID0gX3JlZlsnYXJpYS1kZXNjcmliZWRieSddLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlTGlzdEl0ZW0nLCB7XG4gICAgJ2V1aVNlbGVjdGFibGVMaXN0SXRlbS1pc0ZvY3VzZWQnOiBpc0ZvY3VzZWRcbiAgfSwgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVNlbGVjdGFibGVMaXN0SXRlbVN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVNlbGVjdGFibGVMaXN0SXRlbSwgc3R5bGVzLnBhZGRpbmdbcGFkZGluZ1NpemVdXTtcbiAgdmFyIHRleHRTdHlsZXMgPSBbc3R5bGVzLmV1aVNlbGVjdGFibGVMaXN0SXRlbV9fdGV4dCwgc3R5bGVzLnRleHRXcmFwW3RleHRXcmFwXV07XG4gIHZhciBvcHRpb25JY29uID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNob3dJY29ucykge1xuICAgICAgdmFyIF9yZXNvbHZlSWNvbkFuZENvbG9yID0gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSxcbiAgICAgICAgaWNvbiA9IF9yZXNvbHZlSWNvbkFuZENvbG9yLmljb24sXG4gICAgICAgIGNvbG9yID0gX3Jlc29sdmVJY29uQW5kQ29sb3IuY29sb3I7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgIGNzczogc3R5bGVzLmV1aVNlbGVjdGFibGVMaXN0SXRlbV9faWNvbixcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9faWNvblwiLFxuICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgIHR5cGU6IGljb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW3Nob3dJY29ucywgY2hlY2tlZCwgc3R5bGVzXSk7XG4gIHZhciBwcmVwZW5kTm9kZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChwcmVwZW5kKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjc3M6IHN0eWxlcy5ldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3ByZXBlbmQsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3ByZXBlbmRcIlxuICAgICAgfSwgcHJlcGVuZCk7XG4gICAgfVxuICB9LCBbcHJlcGVuZCwgc3R5bGVzXSk7XG4gIHZhciBvbkZvY3VzQmFkZ2VOb2RlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRlZmF1bHRPbkZvY3VzQmFkZ2VQcm9wcyA9IHtcbiAgICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgICBpY29uVHlwZTogJ3JldHVybktleScsXG4gICAgICBpY29uU2lkZTogJ2xlZnQnLFxuICAgICAgY29sb3I6ICdob2xsb3cnXG4gICAgfTtcbiAgICBpZiAob25Gb2N1c0JhZGdlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19vbkZvY3VzQmFkZ2VcIlxuICAgICAgfSwgZGVmYXVsdE9uRm9jdXNCYWRnZVByb3BzKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb25Gb2N1c0JhZGdlICE9PSAnYm9vbGVhbicgJiYgISFvbkZvY3VzQmFkZ2UpIHtcbiAgICAgIHZhciBfY2hpbGRyZW4gPSBvbkZvY3VzQmFkZ2UuY2hpbGRyZW4sXG4gICAgICAgIF9jbGFzc05hbWUgPSBvbkZvY3VzQmFkZ2UuY2xhc3NOYW1lLFxuICAgICAgICByZXN0QmFkZ2VQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvbkZvY3VzQmFkZ2UsIF9leGNsdWRlZDIpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQmFkZ2UsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX29uRm9jdXNCYWRnZScsIF9jbGFzc05hbWUpXG4gICAgICB9LCBkZWZhdWx0T25Gb2N1c0JhZGdlUHJvcHMsIHJlc3RCYWRnZVByb3BzKSwgX2NoaWxkcmVuKTtcbiAgICB9XG4gIH0sIFtvbkZvY3VzQmFkZ2VdKTtcbiAgdmFyIHNob3dPbkZvY3VzQmFkZ2UgPSAhIShpc0ZvY3VzZWQgJiYgIWRpc2FibGVkICYmIG9uRm9jdXNCYWRnZU5vZGUpO1xuICB2YXIgYXBwZW5kTm9kZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChhcHBlbmQgfHwgc2hvd09uRm9jdXNCYWRnZSkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY3NzOiBzdHlsZXMuZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19hcHBlbmQsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2FwcGVuZFwiXG4gICAgICB9LCBhcHBlbmQsIFwiIFwiLCBzaG93T25Gb2N1c0JhZGdlID8gb25Gb2N1c0JhZGdlTm9kZSA6IG51bGwpO1xuICAgIH1cbiAgfSwgW2FwcGVuZCwgc2hvd09uRm9jdXNCYWRnZSwgb25Gb2N1c0JhZGdlTm9kZSwgc3R5bGVzXSk7XG4gIHZhciBzY3JlZW5SZWFkZXJUZXh0ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIHZhciBpbnN0cnVjdGlvbnM7XG4gICAgdmFyIHNjcmVlblJlYWRlclN0cmluZ3MgPSB7XG4gICAgICBjaGVja2VkOiB7XG4gICAgICAgIHN0YXRlOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uY2hlY2tlZE9wdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiQ2hlY2tlZCBvcHRpb24uXCJcbiAgICAgICAgfSksXG4gICAgICAgIGluc3RydWN0aW9uczogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLmNoZWNrT3B0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUbyBjaGVjayB0aGlzIG9wdGlvbiwgcHJlc3MgRW50ZXIuXCJcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICB1bmNoZWNrZWQ6IHtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0udW5jaGVja09wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gdW5jaGVjayB0aGlzIG9wdGlvbiwgcHJlc3MgRW50ZXIuXCJcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICBleGNsdWRlZDoge1xuICAgICAgICBzdGF0ZTogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLmV4Y2x1ZGVkT3B0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJFeGNsdWRlZCBvcHRpb24uXCJcbiAgICAgICAgfSksXG4gICAgICAgIGluc3RydWN0aW9uczogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLmV4Y2x1ZGVPcHRpb25JbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIGV4Y2x1ZGUgdGhpcyBvcHRpb24sIHByZXNzIEVudGVyLlwiXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgbWl4ZWQ6IHtcbiAgICAgICAgc3RhdGU6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5taXhlZE9wdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiTWl4ZWQgKGluZGV0ZXJtaW5hdGUpIG9wdGlvbi5cIlxuICAgICAgICB9KSxcbiAgICAgICAgaW5zdHJ1Y3Rpb25zOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0ubWl4ZWRPcHRpb25JbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIGNoZWNrIHRoaXMgb3B0aW9uIGZvciBhbGwsIHByZXNzIEVudGVyIG9uY2UuXCJcbiAgICAgICAgfSksXG4gICAgICAgIHVuY2hlY2tJbnN0cnVjdGlvbnM6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5taXhlZE9wdGlvblVuY2hlY2tJbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIHVuY2hlY2sgdGhpcyBvcHRpb24gZm9yIGFsbCwgcHJlc3MgRW50ZXIgdHdpY2UuXCJcbiAgICAgICAgfSksXG4gICAgICAgIGV4Y2x1ZGVJbnN0cnVjdGlvbnM6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5taXhlZE9wdGlvbkV4Y2x1ZGVJbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIGV4Y2x1ZGUgdGhpcyBvcHRpb24gZm9yIGFsbCwgcHJlc3MgRW50ZXIgdHdpY2UuXCJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9O1xuICAgIHN3aXRjaCAoY2hlY2tlZCkge1xuICAgICAgY2FzZSAnb24nOlxuICAgICAgICBzdGF0ZSA9IHNjcmVlblJlYWRlclN0cmluZ3MuY2hlY2tlZC5zdGF0ZTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zID0gYWxsb3dFeGNsdXNpb25zID8gc2NyZWVuUmVhZGVyU3RyaW5ncy5leGNsdWRlZC5pbnN0cnVjdGlvbnMgOiBzZWFyY2hhYmxlID8gc2NyZWVuUmVhZGVyU3RyaW5ncy51bmNoZWNrZWQuaW5zdHJ1Y3Rpb25zIDogdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29mZic6XG4gICAgICAgIHN0YXRlID0gc2NyZWVuUmVhZGVyU3RyaW5ncy5leGNsdWRlZC5zdGF0ZTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zID0gc2NyZWVuUmVhZGVyU3RyaW5ncy51bmNoZWNrZWQuaW5zdHJ1Y3Rpb25zO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21peGVkJzpcbiAgICAgICAgc3RhdGUgPSBzY3JlZW5SZWFkZXJTdHJpbmdzLm1peGVkLnN0YXRlO1xuICAgICAgICBpbnN0cnVjdGlvbnMgPSBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBzY3JlZW5SZWFkZXJTdHJpbmdzLm1peGVkLmluc3RydWN0aW9ucywgJyAnLCBhbGxvd0V4Y2x1c2lvbnMgPyBzY3JlZW5SZWFkZXJTdHJpbmdzLm1peGVkLmV4Y2x1ZGVJbnN0cnVjdGlvbnMgOiBzY3JlZW5SZWFkZXJTdHJpbmdzLm1peGVkLnVuY2hlY2tJbnN0cnVjdGlvbnMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaW5zdHJ1Y3Rpb25zID0gYWxsb3dFeGNsdXNpb25zIHx8IHNlYXJjaGFibGUgPyBzY3JlZW5SZWFkZXJTdHJpbmdzLmNoZWNrZWQuaW5zdHJ1Y3Rpb25zIDogdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlIHx8IGluc3RydWN0aW9ucyA/IF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCBudWxsLCBzdGF0ZSB8fCBpbnN0cnVjdGlvbnMgPyAnLiAnIDogbnVsbCwgc3RhdGUsIHN0YXRlICYmIGluc3RydWN0aW9ucyA/ICcgJyA6IG51bGwsIGluc3RydWN0aW9ucykpIDogbnVsbDtcbiAgfSwgW2NoZWNrZWQsIHNlYXJjaGFibGUsIGFsbG93RXhjbHVzaW9uc10pO1xuXG4gIC8vIGFyaWEtY2hlY2tlZCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggcm9sZT1cImNoZWNrYm94XCIgYnV0XG4gIC8vIHRoZSBNRE4gZG9jdW1lbnRhdGlvbiBsaXN0cyBpdCBhcyBhIHBvc3NpYmlsaXR5IGZvciByb2xlPVwib3B0aW9uXCIuXG4gIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BY2Nlc3NpYmlsaXR5L0FSSUEvQXR0cmlidXRlcy9hcmlhLWNoZWNrZWRcbiAgLy8gYW5kIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FjY2Vzc2liaWxpdHkvQVJJQS9Sb2xlcy9vcHRpb25fcm9sZVxuICB2YXIgYXJpYUNoZWNrZWQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcm9sZXNUaGF0Q2FuQmVNaXhlZCA9IFsnb3B0aW9uJywgJ2NoZWNrYm94JywgJ21lbnVpdGVtY2hlY2tib3gnXTtcbiAgICB2YXIgcm9sZXNUaGF0Q2FuQmVDaGVja2VkID0gW10uY29uY2F0KHJvbGVzVGhhdENhbkJlTWl4ZWQsIFsncmFkaW8nLCAnbWVudWl0ZW1yYWRpbycsICdzd2l0Y2gnXSk7XG4gICAgaWYgKCFyb2xlc1RoYXRDYW5CZUNoZWNrZWQuaW5jbHVkZXMocm9sZSkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3dpdGNoIChjaGVja2VkKSB7XG4gICAgICBjYXNlICdvbic6XG4gICAgICBjYXNlICdvZmYnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ21peGVkJzpcbiAgICAgICAgaWYgKHJvbGVzVGhhdENhbkJlTWl4ZWQuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICByZXR1cm4gJ21peGVkJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIFtyb2xlLCBjaGVja2VkXSk7XG4gIHZhciBoYXNUb29sVGlwID0gISF0b29sVGlwQ29udGVudCAmJiAhZGlzYWJsZWQ7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICB0b29sdGlwUmVmID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRUb29sdGlwUmVmID0gX3VzZVN0YXRlMlsxXTsgLy8gTmVlZHMgdG8gYmUgc3RhdGUgYW5kIG5vdCBhIHJlZiB0byB0cmlnZ2VyIHVzZUVmZmVjdFxuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKF9hcmlhRGVzY3JpYmVkQnkpLFxuICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICBhcmlhRGVzY3JpYmVkQnkgPSBfdXNlU3RhdGU0WzBdLFxuICAgIHNldEFyaWFEZXNjcmliZWRCeSA9IF91c2VTdGF0ZTRbMV07XG5cbiAgLy8gTWFudWFsbHkgdHJpZ2dlciB0aGUgdG9vbHRpcCBvbiBrZXlib2FyZCBmb2N1c1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghdG9vbHRpcFJlZikgcmV0dXJuO1xuICAgIGlmIChpc0ZvY3VzZWQpIHtcbiAgICAgIHRvb2x0aXBSZWYuc2hvd1Rvb2xUaXAoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9vbHRpcFJlZi5oaWRlVG9vbFRpcCgpO1xuICAgIH1cbiAgfSwgW2lzRm9jdXNlZCwgdG9vbHRpcFJlZl0pO1xuXG4gIC8vIE1hbnVhbGx5IHNldCB0aGUgYGFyaWEtZGVzY3JpYmVkYnlgIGlkIG9uIHRoZSA8bGk+IHdyYXBwZXJcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodG9vbHRpcFJlZikge1xuICAgICAgdmFyIHRvb2x0aXBJZCA9IHRvb2x0aXBSZWYuc3RhdGUuaWQ7XG4gICAgICBzZXRBcmlhRGVzY3JpYmVkQnkoY2xhc3NOYW1lcyh0b29sdGlwSWQsIF9hcmlhRGVzY3JpYmVkQnkpKTtcbiAgICB9XG4gIH0sIFt0b29sdGlwUmVmLCBfYXJpYURlc2NyaWJlZEJ5XSk7XG4gIHZhciBjb250ZW50ID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNzczogc3R5bGVzLmV1aVNlbGVjdGFibGVMaXN0SXRlbV9fY29udGVudCxcbiAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19jb250ZW50XCJcbiAgfSwgb3B0aW9uSWNvbiwgcHJlcGVuZE5vZGUsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjc3M6IHRleHRTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fdGV4dFwiXG4gIH0sIGNoaWxkcmVuLCBzY3JlZW5SZWFkZXJUZXh0KSwgYXBwZW5kTm9kZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IHJvbGUsXG4gICAgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkLFxuICAgIFwiYXJpYS1jaGVja2VkXCI6IGFyaWFDaGVja2VkIC8vIFdoZXRoZXIgdGhlIGl0ZW0gaXMgXCJjaGVja2VkXCJcbiAgICAsXG4gICAgXCJhcmlhLXNlbGVjdGVkXCI6ICFkaXNhYmxlZCAmJiBpc0ZvY3VzZWQgLy8gV2hldGhlciB0aGUgaXRlbSBoYXMga2V5Ym9hcmQgZm9jdXMgcGVyIFczIHNwZWNcbiAgICAsXG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QsIHtcbiAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2NyaWJlZEJ5XG4gIH0pLCBoYXNUb29sVGlwID8gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBzZXRUb29sdGlwUmVmLFxuICAgIGNvbnRlbnQ6IHRvb2xUaXBDb250ZW50LFxuICAgIGFuY2hvckNsYXNzTmFtZTogXCJldWktZnVsbFdpZHRoXCIsXG4gICAgcG9zaXRpb246IFwibGVmdFwiXG4gIH0sIHRvb2xUaXBQcm9wcyksIGNvbnRlbnQpIDogY29udGVudCk7XG59O1xuRXVpU2VsZWN0YWJsZUxpc3RJdGVtLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICAgKiBBcHBsaWVzIGFuIGljb24gYW5kIHZpc3VhbCBzdHlsaW5nIHRvIGFjdGl2YXRlZCBpdGVtc1xuICAgICAgICovXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogU2hvd3MgaWNvbnMgYmFzZWQgb24gYGNoZWNrZWRgIHR5cGVcbiAgICAgICAqL1xuICBzaG93SWNvbnM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIEhpZ2hsaWdodHMgdGhlIGl0ZW0gZm9yIHBzZXVkbyBmb2N1c1xuICAgICAgICovXG4gIGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gIGFsbG93RXhjbHVzaW9uczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogV2hlbiBlbmFibGVkIGJ5IHNldHRpbmcgdG8gZWl0aGVyIGB0cnVlYCBvciBwYXNzaW5nIGN1c3RvbSBhIGN1c3RvbSBiYWRnZSxcbiAgICAgICAqIHNob3dzIGEgaG9sbG93IGJhZGdlIGFzIGFuIGFwcGVuZCAoZmFyIHJpZ2h0KSB3aGVuIHRoZSBpdGVtIGlzIGZvY3VzZWQuXG4gICAgICAgKiBUaGUgZGVmYXVsdCBjb250ZW50IHdoZW4gYHRydWVgIGlzIGBcdTIxQTkgdG8gc2VsZWN0L2Rlc2VsZWN0L2luY2x1ZGUvZXhjbHVkZWBcbiAgICAgICAqL1xuICBvbkZvY3VzQmFkZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGFueSBzdHJpbmcgZnJvbSBvdXIgaWNvbiBsaWJyYXJ5XG4gICAgICAgKi9cbiAgICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgICAvKipcbiAgICAgICAqIFRoZSBzaWRlIG9mIHRoZSBiYWRnZSB0aGUgaWNvbiBzaG91bGQgc2l0XG4gICAgICAgKi9cbiAgICBpY29uU2lkZTogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgZWl0aGVyIG91ciBwYWxldHRlIGNvbG9ycyAocHJpbWFyeSwgc3VjY2VzcyAuLmV0Yykgb3IgYSBoZXggdmFsdWUgYCNGRkZGRkZgLCBgIzAwMGAuXG4gICAgICAgKi9cbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcbiAgICAvKipcbiAgICAgICAqIFdpbGwgb3ZlcnJpZGUgYW55IGNvbG9yIHBhc3NlZCB0aHJvdWdoIHRoZSBgY29sb3JgIHByb3AuXG4gICAgICAgKi9cbiAgICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIFByb3BzIHBhc3NlZCB0byB0aGUgY2xvc2UgYnV0dG9uLlxuICAgICAgICovXG4gICAgY2xvc2VCdXR0b25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byBpY29uIHdpdGhpbiB0aGUgYmFkZ2VcbiAgICAgICAqL1xuICAgIGljb25PbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgaWNvbk9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBpY29uT25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICAgKi9cbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgb25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gICAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBQYWRkaW5nIGZvciB0aGUgbGlzdCBpdGVtcy5cbiAgICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBXaGV0aGVyIHRoZSBgRXVpU2VsZWN0YWJsZWAgaW5zdGFuY2UgaXMgc2VhcmNoYWJsZS5cbiAgICAgICAqIFdoZW4gdHJ1ZSwgdGhlIFNwYWNlIGtleSB3aWxsIG5vdCB0b2dnbGUgc2VsZWN0aW9uLCBhcyBpdCB3aWxsIHR5cGUgaW50byB0aGUgc2VhcmNoIGJveCBpbnN0ZWFkLiBTY3JlZW4gcmVhZGVyIGluc3RydWN0aW9ucyB3aWxsIGJlIGFkZGVkIGluc3RydWN0aW5nIHVzZXJzIHRvIHVzZSB0aGUgRW50ZXIga2V5IHRvIHNlbGVjdCBpdGVtcy5cbiAgICAgICAqIFdoZW4gZmFsc2UsIHRoZSBTcGFjZSBrZXkgd2lsbCB0b2dnbGUgaXRlbSBzZWxlY3Rpb24uIE5vIGV4dHJhIHNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHdpbGwgYmUgYWRkZWQsIGFzIFNwYWNlIHRvIHRvZ2dsZSBpcyBhIGdlbmVyYWxseSBzdGFuZGFyZCBmb3IgbW9zdCBzZWxlY3QvY2hlY2tlZCBlbGVtZW50cy5cbiAgICAgICAqL1xuICBzZWFyY2hhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBBdHRyaWJ1dGUgYXBwbGllZCB0aGUgb3B0aW9uIGA8bGk+YC5cbiAgICAgICAqIElmIHNldCB0byBhIHJvbGUgdGhhdCBhbGxvd3MgW2FyaWEtY2hlY2tlZF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQWNjZXNzaWJpbGl0eS9BUklBL0F0dHJpYnV0ZXMvYXJpYS1jaGVja2VkKSxcbiAgICAgICAqIGBhcmlhLWNoZWNrZWRgIHdpbGwgYmUgYXV0b21hdGljYWxseSBjb25maWd1cmVkLlxuICAgICAgICovXG4gIHJvbGU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogSG93IHRvIGhhbmRsZSBsb25nIHRleHQgd2l0aGluIHRoZSBpdGVtLlxuICAgICAgICogV3JhcHBpbmcgb25seSB3b3JrcyBpZiB2aXJ0dWFsaXphdGlvbiBpcyBvZmYuXG4gICAgICAgKi9cbiAgdGV4dFdyYXA6IFByb3BUeXBlcy5vbmVPZihbXCJ0cnVuY2F0ZVwiLCBcIndyYXBcIl0pLFxuICAvKipcbiAgICAgICAqIE9wdGlvbmFsIGN1c3RvbSB0b29sdGlwIGNvbnRlbnQgZm9yIHRoZSBidXR0b25cbiAgICAgICAqL1xuICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAgICogT3B0aW9uYWwgcHJvcHMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyAqKltFdWlUb29sVGlwXSgvIy9kaXNwbGF5L3Rvb2x0aXApKipcbiAgICAgICAqL1xuICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUsIGV1aVRleHRUcnVuY2F0ZSwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpU2VsZWN0YWJsZUxpc3RJdGVtVmFyaWFibGVzID0gZnVuY3Rpb24gZXVpU2VsZWN0YWJsZUxpc3RJdGVtVmFyaWFibGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICB2YXIgbGlnaHRlckJvcmRlciA9IHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmJvcmRlci5jb2xvciwgMC40KTtcbiAgcmV0dXJuIHtcbiAgICBib3JkZXI6IFwiXCIuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIikuY29uY2F0KGxpZ2h0ZXJCb3JkZXIpLFxuICAgIHBhZGRpbmdIb3Jpem9udGFsOiBldWlUaGVtZS5zaXplLm0sXG4gICAgcGFkZGluZ1ZlcnRpY2FsOiBldWlUaGVtZS5zaXplLnhzXG4gIH07XG59O1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXJuZW5ydC1ldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHRcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOmV1aVNlbGVjdGFibGVMaXN0SXRlbV9fdGV4dDtcIlxufSA6IHtcbiAgbmFtZTogXCIxcm5lbnJ0LWV1aVNlbGVjdGFibGVMaXN0SXRlbV9fdGV4dFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6ZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVNlbGVjdGFibGVMaXN0SXRlbVN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNlbGVjdGFibGVMaXN0SXRlbVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgX2V1aVNlbGVjdGFibGVMaXN0SXRlID0gZXVpU2VsZWN0YWJsZUxpc3RJdGVtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgYm9yZGVyID0gX2V1aVNlbGVjdGFibGVMaXN0SXRlLmJvcmRlcixcbiAgICBwYWRkaW5nSG9yaXpvbnRhbCA9IF9ldWlTZWxlY3RhYmxlTGlzdEl0ZS5wYWRkaW5nSG9yaXpvbnRhbCxcbiAgICBwYWRkaW5nVmVydGljYWwgPSBfZXVpU2VsZWN0YWJsZUxpc3RJdGUucGFkZGluZ1ZlcnRpY2FsO1xuICByZXR1cm4ge1xuICAgIGV1aVNlbGVjdGFibGVMaXN0SXRlbTogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6aW5saW5lLWZsZXg7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgbGluZS1oZWlnaHQ6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ20nKS5saW5lSGVpZ2h0LCBcIjtmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKS5mb250U2l6ZSwgXCI7dGV4dC1hbGlnbjpzdGFydDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47Jjpub3QoOmxhc3Qtb2YtdHlwZSl7XCIsIGxvZ2ljYWxDU1MoJ2JvcmRlci1ib3R0b20nLCBib3JkZXIpLCBcIjt9JlthcmlhLWRpc2FibGVkPSd0cnVlJ117Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZFRleHQsIFwiO2N1cnNvcjpub3QtYWxsb3dlZDt9Jjpob3ZlciwmLmV1aVNlbGVjdGFibGVMaXN0SXRlbS1pc0ZvY3VzZWR7Jjpub3QoW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSl7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7YmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVGhlbWUuZm9jdXMuYmFja2dyb3VuZENvbG9yLCBcIjsuZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0e3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fX19O2xhYmVsOmV1aVNlbGVjdGFibGVMaXN0SXRlbTtcIiksXG4gICAgcGFkZGluZzoge1xuICAgICAgbm9uZTogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpub25lO1wiKSxcbiAgICAgIHM6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygncGFkZGluZy12ZXJ0aWNhbCcsIHBhZGRpbmdWZXJ0aWNhbCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBwYWRkaW5nSG9yaXpvbnRhbCksIFwiOztsYWJlbDpzO1wiKVxuICAgIH0sXG4gICAgLy8gQ2hpbGQgZWxlbWVudHNcblxuICAgIGV1aVNlbGVjdGFibGVMaXN0SXRlbV9fY29udGVudDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIGRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7O2xhYmVsOmV1aVNlbGVjdGFibGVMaXN0SXRlbV9fY29udGVudDtcIiksXG4gICAgZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0OiBfcmVmLFxuICAgIHRleHRXcmFwOiB7XG4gICAgICB0cnVuY2F0ZTogLyojX19QVVJFX18qL2NzcyhldWlUZXh0VHJ1bmNhdGUoKSwgXCI7bGFiZWw6dHJ1bmNhdGU7XCIpLFxuICAgICAgd3JhcDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDp3cmFwO1wiKVxuICAgIH0sXG4gICAgZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19wcmVwZW5kOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1zaHJpbms6MDtcIiwgbG9naWNhbENTUygnbWFyZ2luLXJpZ2h0JywgcGFkZGluZ0hvcml6b250YWwpLCBcIjs7bGFiZWw6ZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19wcmVwZW5kO1wiKSxcbiAgICBldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2FwcGVuZDogLyojX19QVVJFX18qL2NzcyhcImZsZXgtc2hyaW5rOjA7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgcGFkZGluZ0hvcml6b250YWwpLCBcIjs7bGFiZWw6ZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19hcHBlbmQ7XCIpLFxuICAgIGdldCBldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2ljb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3ByZXBlbmQ7XG4gICAgfVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuLy8gLmV1aVNlbGVjdGFibGVMaXN0X19saXN0IHJlcXVpcmVzIGEgc3RhdGljIHZhbmlsbGEgY2xhc3NOYW1lXG4vLyBhcyBpdCdzIHBhc3NlZCBkb3duIHRvIHJlYWN0LXdpbmRvdydzIHZpcnR1YWxpemF0aW9uIGxpYnJhcnlcbmltcG9ydCB7IGNzcyBhcyBjbGFzc05hbWVDc3MgfSBmcm9tICdAZW1vdGlvbi9jc3MnO1xuaW1wb3J0IHsgZXVpRm9jdXNSaW5nLCBldWlZU2Nyb2xsV2l0aFNoYWRvd3MsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlUaXRsZSB9IGZyb20gJy4uLy4uL3RpdGxlL3RpdGxlLnN0eWxlcyc7XG5pbXBvcnQgeyBldWlTZWxlY3RhYmxlTGlzdEl0ZW1WYXJpYWJsZXMgfSBmcm9tICcuL3NlbGVjdGFibGVfbGlzdF9pdGVtLnN0eWxlcyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxZ2l1OGo1LWZ1bGxIZWlnaHRcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOmZ1bGxIZWlnaHQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWdpdThqNS1mdWxsSGVpZ2h0XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpmdWxsSGVpZ2h0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVNlbGVjdGFibGVMaXN0U3R5bGVzID0gZnVuY3Rpb24gZXVpU2VsZWN0YWJsZUxpc3RTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIGl0ZW1WYXJzID0gZXVpU2VsZWN0YWJsZUxpc3RJdGVtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHJldHVybiB7XG4gICAgZXVpU2VsZWN0YWJsZUxpc3Q6IC8qI19fUFVSRV9fKi9jc3MoXCImOmhhcyg6Zm9jdXMtdmlzaWJsZSl7XCIsIGV1aUZvY3VzUmluZyhldWlUaGVtZUNvbnRleHQsICdvdXRzZXQnKSwgXCI7fTtsYWJlbDpldWlTZWxlY3RhYmxlTGlzdDtcIiksXG4gICAgZnVsbEhlaWdodDogX3JlZixcbiAgICBib3JkZXJlZDogLyojX19QVVJFX18qL2NzcyhcIm92ZXJmbG93OmhpZGRlbjtib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci50aGluLCBcIjtib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSwgXCI7O2xhYmVsOmJvcmRlcmVkO1wiKSxcbiAgICBldWlTZWxlY3RhYmxlTGlzdF9fbGlzdDogLyojX19QVVJFX18qL2NsYXNzTmFtZUNzcyhldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWVDb250ZXh0KSwgXCIgJjpmb2N1cywmPnVsOmZvY3Vze291dGxpbmU6bm9uZTt9O2xhYmVsOmV1aVNlbGVjdGFibGVMaXN0X19saXN0O1wiKSxcbiAgICBldWlTZWxlY3RhYmxlTGlzdF9fZ3JvdXBMYWJlbDogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJyksIFwiIGRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7XCIsIGxvZ2ljYWxDU1MoJ2JvcmRlci1ib3R0b20nLCBpdGVtVmFycy5ib3JkZXIpLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy12ZXJ0aWNhbCcsIGl0ZW1WYXJzLnBhZGRpbmdWZXJ0aWNhbCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBpdGVtVmFycy5wYWRkaW5nSG9yaXpvbnRhbCksIFwiOztsYWJlbDpldWlTZWxlY3RhYmxlTGlzdF9fZ3JvdXBMYWJlbDtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aVNlbGVjdGFibGVTdHlsZXMgPSB7XG4gIGV1aVNlbGVjdGFibGU6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICBuYW1lOiBcIjFzZDBxdi1ldWlTZWxlY3RhYmxlXCIsXG4gICAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bGFiZWw6ZXVpU2VsZWN0YWJsZTtcIlxuICB9IDoge1xuICAgIG5hbWU6IFwiMXNkMHF2LWV1aVNlbGVjdGFibGVcIixcbiAgICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsYWJlbDpldWlTZWxlY3RhYmxlO1wiLFxuICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICB9LFxuICBmdWxsSGVpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsSGVpZ2h0O1wiKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcHJlc3NlZFwiLCBcInRhYmxlTGF5b3V0XCIsIFwicmVzcG9uc2l2ZUJyZWFrcG9pbnRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlSXNFdWlUYWJsZVJlc3BvbnNpdmUsIEV1aVRhYmxlSXNSZXNwb25zaXZlQ29udGV4dCB9IGZyb20gJy4vbW9iaWxlL3Jlc3BvbnNpdmVfY29udGV4dCc7XG5pbXBvcnQgeyBldWlUYWJsZVN0eWxlcyB9IGZyb20gJy4vdGFibGUuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlID0gZnVuY3Rpb24gRXVpVGFibGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGNvbXByZXNzZWQgPSBfcmVmLmNvbXByZXNzZWQsXG4gICAgX3JlZiR0YWJsZUxheW91dCA9IF9yZWYudGFibGVMYXlvdXQsXG4gICAgdGFibGVMYXlvdXQgPSBfcmVmJHRhYmxlTGF5b3V0ID09PSB2b2lkIDAgPyAnZml4ZWQnIDogX3JlZiR0YWJsZUxheW91dCxcbiAgICByZXNwb25zaXZlQnJlYWtwb2ludCA9IF9yZWYucmVzcG9uc2l2ZUJyZWFrcG9pbnQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNSZXNwb25zaXZlID0gdXNlSXNFdWlUYWJsZVJlc3BvbnNpdmUocmVzcG9uc2l2ZUJyZWFrcG9pbnQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYmxlU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGFibGUsIHN0eWxlcy5sYXlvdXRbdGFibGVMYXlvdXRdLCAoIWNvbXByZXNzZWQgfHwgaXNSZXNwb25zaXZlKSAmJiBzdHlsZXMudW5jb21wcmVzc2VkLCBjb21wcmVzc2VkICYmICFpc1Jlc3BvbnNpdmUgJiYgc3R5bGVzLmNvbXByZXNzZWQsIGlzUmVzcG9uc2l2ZSA/IHN0eWxlcy5tb2JpbGUgOiBzdHlsZXMuZGVza3RvcF07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGFibGVcIiwgX2V4dGVuZHMoe1xuICAgIHRhYkluZGV4OiAtMSxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVJc1Jlc3BvbnNpdmVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGlzUmVzcG9uc2l2ZVxuICB9LCBjaGlsZHJlbikpO1xufTtcbkV1aVRhYmxlLnByb3BUeXBlcyA9IHtcbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE5hbWVkIGJyZWFrcG9pbnQuIEJlbG93IHRoaXMgc2l6ZSwgdGhlIHRhYmxlIHdpbGwgY29sbGFwc2VcbiAgICAgKiBpbnRvIHJlc3BvbnNpdmUgY2FyZHMuXG4gICAgICpcbiAgICAgKiBQYXNzIGBmYWxzZWAgdG8gbmV2ZXIgY29sbGFwc2UgdG8gYSBtb2JpbGUgdmlldywgb3IgaW52ZXJzZWx5LFxuICAgICAqIGB0cnVlYCB0byBhbHdheXMgcmVuZGVyIG1vYmlsZS1mcmllbmRseSBjYXJkcy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IG1cbiAgICAgKi9cbiAgcmVzcG9uc2l2ZUJyZWFrcG9pbnQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBTZXRzIHRoZSB0YWJsZS1sYXlvdXQgQ1NTIHByb3BlcnR5XG4gICAgICovXG4gIHRhYmxlTGF5b3V0OiBQcm9wVHlwZXMub25lT2YoW1wiZml4ZWRcIiwgXCJhdXRvXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VJc1dpdGhpbk1pbkJyZWFrcG9pbnQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VDb21wb25lbnREZWZhdWx0cyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVyL2NvbXBvbmVudF9kZWZhdWx0cyc7XG5leHBvcnQgdmFyIERFRkFVTFRfVEFCTEVfQlJFQUtQT0lOVCA9ICdtJztcblxuLyoqXG4gKiBVc2VkIGJ5IHBhcmVudC90b3AtbGV2ZWwgdGFibGUgY29tcG9uZW50cyB0byBkZXRlcm1pbmUgaXNSZXNwb25zaXZlIHN0YXRlXG4gKiBiYXNlZCBvbiB0aGUgcGFzc2VkIGJyZWFrcG9pbnRcbiAqL1xuZXhwb3J0IHZhciB1c2VJc0V1aVRhYmxlUmVzcG9uc2l2ZSA9IGZ1bmN0aW9uIHVzZUlzRXVpVGFibGVSZXNwb25zaXZlKGNvbXBvbmVudFByb3ApIHtcbiAgdmFyIF91c2VDb21wb25lbnREZWZhdWx0cywgX3JlZjtcbiAgdmFyIGNvbXBvbmVudERlZmF1bHQgPSAoX3VzZUNvbXBvbmVudERlZmF1bHRzID0gdXNlQ29tcG9uZW50RGVmYXVsdHMoKS5FdWlUYWJsZSkgPT09IG51bGwgfHwgX3VzZUNvbXBvbmVudERlZmF1bHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdXNlQ29tcG9uZW50RGVmYXVsdHMucmVzcG9uc2l2ZUJyZWFrcG9pbnQ7XG4gIHZhciBicmVha3BvaW50ID0gKF9yZWYgPSBjb21wb25lbnRQcm9wICE9PSBudWxsICYmIGNvbXBvbmVudFByb3AgIT09IHZvaWQgMCA/IGNvbXBvbmVudFByb3AgOiBjb21wb25lbnREZWZhdWx0KSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogREVGQVVMVF9UQUJMRV9CUkVBS1BPSU5UO1xuICB2YXIgaXNCb29sZWFuID0gdHlwZW9mIGJyZWFrcG9pbnQgPT09ICdib29sZWFuJztcblxuICAvLyBOb3RlOiB3ZSdyZSB1c2luZyBgIXVzZUlzV2l0aGluTWluQnJlYWtwb2ludGAgaGVyZSBpbnN0ZWFkIG9mIGB1c2VJc1dpdGhpbk1heEJyZWFrcG9pbnRgXG4gIC8vIGJlY2F1c2UgaXQgbW9yZSBhY2N1cmF0ZWx5IHJlZmxlY3RzIHRoZSBzaW5nbGUgYnJlYWtwb2ludCBhdCB3aGljaCB0YWJsZXMgY29sbGFwc2VcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9ICF1c2VJc1dpdGhpbk1pbkJyZWFrcG9pbnQoaXNCb29sZWFuID8gJycgOiBicmVha3BvaW50KTtcbiAgcmV0dXJuIGlzQm9vbGVhbiA/IGJyZWFrcG9pbnQgOiBpc1Jlc3BvbnNpdmU7XG59O1xuXG4vKipcbiAqIENvbnRleHQgc2V0IGJ5IHBhcmVudCB0YWJsZSBjb21wb25lbnRzXG4gKiBIb29rIHVzZWQgYnkgY2VsbHMgdG8gZmV0Y2ggcGFyZW50IGlzUmVzcG9uc2l2ZSBzdGF0ZVxuICovXG5leHBvcnQgdmFyIEV1aVRhYmxlSXNSZXNwb25zaXZlQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KGZhbHNlKTtcbmV4cG9ydCB2YXIgdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUgPSBmdW5jdGlvbiB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoRXVpVGFibGVJc1Jlc3BvbnNpdmVDb250ZXh0KTtcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvbnRTaXplLCBldWlOdW1iZXJGb3JtYXQsIGxvZ2ljYWxDU1MsIG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aVRhYmxlVmFyaWFibGVzID0gZnVuY3Rpb24gZXVpVGFibGVWYXJpYWJsZXMoX3JlZjQpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjQuZXVpVGhlbWU7XG4gIHZhciBjZWxsQ29udGVudFBhZGRpbmcgPSBldWlUaGVtZS5zaXplLnM7XG4gIHZhciBjb21wcmVzc2VkQ2VsbENvbnRlbnRQYWRkaW5nID0gZXVpVGhlbWUuc2l6ZS54cztcbiAgdmFyIG1vYmlsZVNpemVzID0ge1xuICAgIGFjdGlvbnM6IHtcbiAgICAgIHdpZHRoOiBldWlUaGVtZS5zaXplLnh4bCxcbiAgICAgIG9mZnNldDogbWF0aFdpdGhVbml0cyhjZWxsQ29udGVudFBhZGRpbmcsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICogMjtcbiAgICAgIH0pXG4gICAgfSxcbiAgICBjaGVja2JveDoge1xuICAgICAgd2lkdGg6IG1hdGhXaXRoVW5pdHMoW2V1aVRoZW1lLnNpemUueGwsIGV1aVRoZW1lLnNpemUueHNdLCBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICByZXR1cm4geCArIHk7XG4gICAgICB9KSxcbiAgICAgIG9mZnNldDogbWF0aFdpdGhVbml0cyhjZWxsQ29udGVudFBhZGRpbmcsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4IC8gMjtcbiAgICAgIH0pXG4gICAgfVxuICB9O1xuICB2YXIgY2hlY2tib3hTaXplID0gZXVpVGhlbWUuc2l6ZS54bDtcbiAgcmV0dXJuIHtcbiAgICBjZWxsQ29udGVudFBhZGRpbmc6IGNlbGxDb250ZW50UGFkZGluZyxcbiAgICBjb21wcmVzc2VkQ2VsbENvbnRlbnRQYWRkaW5nOiBjb21wcmVzc2VkQ2VsbENvbnRlbnRQYWRkaW5nLFxuICAgIG1vYmlsZVNpemVzOiBtb2JpbGVTaXplcyxcbiAgICBjaGVja2JveFNpemU6IGNoZWNrYm94U2l6ZVxuICB9O1xufTtcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImd0MnYxYy1tb2JpbGVcIixcbiAgc3R5bGVzOiBcInRoZWFke2Rpc3BsYXk6bm9uZTt9dGZvb3R7ZGlzcGxheTpub25lO307bGFiZWw6bW9iaWxlO1wiXG59IDoge1xuICBuYW1lOiBcImd0MnYxYy1tb2JpbGVcIixcbiAgc3R5bGVzOiBcInRoZWFke2Rpc3BsYXk6bm9uZTt9dGZvb3R7ZGlzcGxheTpub25lO307bGFiZWw6bW9iaWxlO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTh1b2xqYy1hdXRvXCIsXG4gIHN0eWxlczogXCJ0YWJsZS1sYXlvdXQ6YXV0bztsYWJlbDphdXRvO1wiXG59IDoge1xuICBuYW1lOiBcIjE4dW9samMtYXV0b1wiLFxuICBzdHlsZXM6IFwidGFibGUtbGF5b3V0OmF1dG87bGFiZWw6YXV0bztcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFmbTZ6ZnctZml4ZWRcIixcbiAgc3R5bGVzOiBcInRhYmxlLWxheW91dDpmaXhlZDtsYWJlbDpmaXhlZDtcIlxufSA6IHtcbiAgbmFtZTogXCIxZm02emZ3LWZpeGVkXCIsXG4gIHN0eWxlczogXCJ0YWJsZS1sYXlvdXQ6Zml4ZWQ7bGFiZWw6Zml4ZWQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpVGFibGVTdHlsZXMgPSBmdW5jdGlvbiBldWlUYWJsZVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgX2V1aVRhYmxlVmFyaWFibGVzID0gZXVpVGFibGVWYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBjZWxsQ29udGVudFBhZGRpbmcgPSBfZXVpVGFibGVWYXJpYWJsZXMuY2VsbENvbnRlbnRQYWRkaW5nLFxuICAgIGNvbXByZXNzZWRDZWxsQ29udGVudFBhZGRpbmcgPSBfZXVpVGFibGVWYXJpYWJsZXMuY29tcHJlc3NlZENlbGxDb250ZW50UGFkZGluZztcbiAgcmV0dXJuIHtcbiAgICBldWlUYWJsZTogLyojX19QVVJFX18qL2NzcyhldWlOdW1iZXJGb3JtYXQoZXVpVGhlbWVDb250ZXh0KSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgYm9yZGVyOm5vbmU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLCBcIjs7bGFiZWw6ZXVpVGFibGU7XCIpLFxuICAgIGxheW91dDoge1xuICAgICAgZml4ZWQ6IF9yZWYzLFxuICAgICAgYXV0bzogX3JlZjJcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIDEuIFRoZSBwYWRkaW5nIG9uIHRoZSBgLmV1aVRhYmxlQ2VsbENvbnRlbnRgIGRpdiBhbGxvd3MgdGhlIGVsbGlwc2lzIHRvIHNob3cgaWYgdGhlXG4gICAgICogY29udGVudCBpcyB0cnVuY2F0ZWQuIElmIHRoZSBwYWRkaW5nIHdhcyBvbiB0aGUgY2VsbCwgdGhlIGVsbGlwc2lzIHdvdWxkIGJlIGNyb3BwZWQuXG4gICAgICogMi4gVGhlIGA6d2hlcmUoKWAgc2VsZWN0b3Igc2V0cyB0aGUgc3BlY2lmaWNpdHkgdG8gMCwgYWxsb3dpbmcgY29uc3VtZXJzIHRvIG1vcmUgZWFzaWx5XG4gICAgICogb3ZlcnJpZGUgb3VyIENTUyBpZiBuZWVkZWRcbiAgICAgKi9cbiAgICB1bmNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKS5mb250U2l6ZSwgXCI7bGluZS1oZWlnaHQ6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ20nKS5saW5lSGVpZ2h0LCBcIjsmIDp3aGVyZSguZXVpVGFibGVDZWxsQ29udGVudCl7cGFkZGluZzpcIiwgY2VsbENvbnRlbnRQYWRkaW5nLCBcIjt9O2xhYmVsOnVuY29tcHJlc3NlZDtcIiksXG4gICAgY29tcHJlc3NlZDogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICd4cycpLCBcIiYgOndoZXJlKC5ldWlUYWJsZUNlbGxDb250ZW50KXtwYWRkaW5nOlwiLCBjb21wcmVzc2VkQ2VsbENvbnRlbnRQYWRkaW5nLCBcIjt9O2xhYmVsOmNvbXByZXNzZWQ7XCIpLFxuICAgIC8qKlxuICAgICAqIFJlc3BvbnNpdmUvbW9iaWxlIHZzIGRlc2t0b3Agc3R5bGVzXG4gICAgICogSW5kaXZpZHVhbCByb3cvY2VsbHMgaGFuZGxlIHRoZWlyIG93biBkZXNrdG9wIHZzIG1vYmlsZSBzdHlsZXNcbiAgICAgKi9cbiAgICBkZXNrdG9wOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmRlc2t0b3A7XCIpLFxuICAgIG1vYmlsZTogX3JlZlxuICB9O1xufTtcblxuLy8gVGhlIHRhYmxlIGNhcHRpb24gbmVlZHMgdG8gbm90IGJlIGFic29sdXRlbHkgcG9zaXRpb25lZCwgYmVjYXVzZSBmb3Igc29tZSByZWFzb25cbi8vIGl0IGNhdXNlcyB3ZWlyZCBsYXlvdXQgaXNzdWVzL2RvdWJsZSBib3JkZXJzIHdoZW4gdXNlZCB3aXRoaW4gYSA8dGFibGU+XG4vLyBBbHNvIG5lZWRzIHRvIGJlICFpbXBvcnRhbnQgdG8gb3ZlcnJpZGUgZXVpU2NyZWVuUmVhZGVyT25seSBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuZXhwb3J0IHZhciBldWlUYWJsZUNhcHRpb25TdHlsZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWhuaW85OC1ldWlUYWJsZUNhcHRpb25TdHlsZXNcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlIWltcG9ydGFudDtsYWJlbDpldWlUYWJsZUNhcHRpb25TdHlsZXM7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWhuaW85OC1ldWlUYWJsZUNhcHRpb25TdHlsZXNcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlIWltcG9ydGFudDtsYWJlbDpldWlUYWJsZUNhcHRpb25TdHlsZXM7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYm9keVJlZlwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlQm9keSA9IGZ1bmN0aW9uIEV1aVRhYmxlQm9keShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgYm9keVJlZiA9IF9yZWYuYm9keVJlZixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGJvZHlcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIHJlZjogYm9keVJlZlxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlQm9keS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBib2R5UmVmOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUZvb3RlciA9IGZ1bmN0aW9uIEV1aVRhYmxlRm9vdGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGZvb3RcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwidHJcIiwgbnVsbCwgY2hpbGRyZW4pKTtcbn07XG5FdWlUYWJsZUZvb3Rlci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJhbGlnblwiLCBcImNsYXNzTmFtZVwiLCBcIndpZHRoXCIsIFwic3R5bGVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzLCBMRUZUX0FMSUdOTUVOVCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHJlc29sdmVXaWR0aEFzU3R5bGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEV1aVRhYmxlQ2VsbENvbnRlbnQgfSBmcm9tICcuL190YWJsZV9jZWxsX2NvbnRlbnQnO1xuaW1wb3J0IHsgZXVpVGFibGVIZWFkZXJGb290ZXJDZWxsU3R5bGVzIH0gZnJvbSAnLi90YWJsZV9jZWxsc19zaGFyZWQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlRm9vdGVyQ2VsbCA9IGZ1bmN0aW9uIEV1aVRhYmxlRm9vdGVyQ2VsbChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgX3JlZiRhbGlnbiA9IF9yZWYuYWxpZ24sXG4gICAgYWxpZ24gPSBfcmVmJGFsaWduID09PSB2b2lkIDAgPyBMRUZUX0FMSUdOTUVOVCA6IF9yZWYkYWxpZ24sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVGb290ZXJDZWxsJywgY2xhc3NOYW1lKTtcbiAgdmFyIGlubGluZVN0eWxlcyA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYmxlSGVhZGVyRm9vdGVyQ2VsbFN0eWxlcyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGRcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogc3R5bGVzLmV1aVRhYmxlRm9vdGVyQ2VsbCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc3R5bGU6IGlubGluZVN0eWxlc1xuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlUYWJsZUNlbGxDb250ZW50LCB7XG4gICAgYWxpZ246IGFsaWduLFxuICAgIHRydW5jYXRlVGV4dDogdHJ1ZSxcbiAgICB0ZXh0T25seTogdHJ1ZVxuICB9LCBjaGlsZHJlbikpO1xufTtcbkV1aVRhYmxlRm9vdGVyQ2VsbC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBhbGlnbjogUHJvcFR5cGVzLmFueSxcbiAgd2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSlcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJ3aWR0aFwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciBXQVJOSU5HX01FU1NBR0UgPSAnVHdvIGB3aWR0aGAgcHJvcGVydGllcyB3ZXJlIHByb3ZpZGVkLiBQcm92aWRlIG9ubHkgb25lIG9mIGBzdHlsZS53aWR0aGAgb3IgYHdpZHRoYCB0byBhdm9pZCBjb25mbGljdHMuJztcbmV4cG9ydCB2YXIgcmVzb2x2ZVdpZHRoQXNTdHlsZSA9IGZ1bmN0aW9uIHJlc29sdmVXaWR0aEFzU3R5bGUoKSB7XG4gIHZhciBzdHlsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciB3aWR0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgc3R5bGVXaWR0aCA9IHN0eWxlLndpZHRoLFxuICAgIHN0eWxlUmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzdHlsZSwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGF0dHJXaWR0aCA9IHdpZHRoO1xuICBpZiAoYXR0cldpZHRoICE9IG51bGwgJiYgKHR5cGVvZiBhdHRyV2lkdGggPT09ICdudW1iZXInIHx8ICFpc05hTihOdW1iZXIoYXR0cldpZHRoKSkpIC8vIHRyYW5zZm9ybSB7bnVtYmVyfSBvciB1bml0bGVzcyAnbnVtYmVyJyB0byBweCBzdHJpbmdcbiAgKSB7XG4gICAgYXR0cldpZHRoID0gXCJcIi5jb25jYXQoYXR0cldpZHRoLCBcInB4XCIpO1xuICB9XG4gIGlmIChzdHlsZVdpZHRoICYmIGF0dHJXaWR0aCkge1xuICAgIGNvbnNvbGUud2FybihXQVJOSU5HX01FU1NBR0UpO1xuICB9XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlUmVzdCksIHt9LCB7XG4gICAgd2lkdGg6IGF0dHJXaWR0aCB8fCBzdHlsZVdpZHRoXG4gIH0pO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYWxpZ25cIiwgXCJ0ZXh0T25seVwiLCBcInRydW5jYXRlVGV4dFwiLCBcImhhc0FjdGlvbnNcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgTEVGVF9BTElHTk1FTlQsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgRXVpVGV4dEJsb2NrVHJ1bmNhdGUgfSBmcm9tICcuLi90ZXh0X3RydW5jYXRlJztcbmltcG9ydCB7IHVzZUV1aVRhYmxlSXNSZXNwb25zaXZlIH0gZnJvbSAnLi9tb2JpbGUvcmVzcG9uc2l2ZV9jb250ZXh0JztcbmltcG9ydCB7IGV1aVRhYmxlQ2VsbENvbnRlbnRTdHlsZXMgfSBmcm9tICcuL190YWJsZV9jZWxsX2NvbnRlbnQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlQ2VsbENvbnRlbnQgPSBmdW5jdGlvbiBFdWlUYWJsZUNlbGxDb250ZW50KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJGFsaWduID0gX3JlZi5hbGlnbixcbiAgICBhbGlnbiA9IF9yZWYkYWxpZ24gPT09IHZvaWQgMCA/IExFRlRfQUxJR05NRU5UIDogX3JlZiRhbGlnbixcbiAgICB0ZXh0T25seSA9IF9yZWYudGV4dE9ubHksXG4gICAgX3JlZiR0cnVuY2F0ZVRleHQgPSBfcmVmLnRydW5jYXRlVGV4dCxcbiAgICB0cnVuY2F0ZVRleHQgPSBfcmVmJHRydW5jYXRlVGV4dCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHRydW5jYXRlVGV4dCxcbiAgICBoYXNBY3Rpb25zID0gX3JlZi5oYXNBY3Rpb25zLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IHVzZUV1aVRhYmxlSXNSZXNwb25zaXZlKCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJsZUNlbGxDb250ZW50U3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGFibGVDZWxsQ29udGVudCwgc3R5bGVzW2FsaWduXSwgdHJ1bmNhdGVUZXh0ID09PSB0cnVlICYmIHN0eWxlcy50cnVuY2F0ZVRleHQsIHRydW5jYXRlVGV4dCA9PT0gZmFsc2UgJiYgc3R5bGVzLndyYXBUZXh0XS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGhhc0FjdGlvbnMgPyBbc3R5bGVzLmhhc0FjdGlvbnMuYWN0aW9ucywgIWlzUmVzcG9uc2l2ZSAmJiBzdHlsZXMuaGFzQWN0aW9ucy5kZXNrdG9wLCBpc1Jlc3BvbnNpdmUgJiYgaGFzQWN0aW9ucyAhPT0gJ2N1c3RvbScgJiYgc3R5bGVzLmhhc0FjdGlvbnMubW9iaWxlXSA6IFtdKSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVDZWxsQ29udGVudCcsIGNsYXNzTmFtZSk7XG4gIHZhciByZW5kZXJlZENoaWxkcmVuID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRleHRDbGFzc2VzID0gJ2V1aVRhYmxlQ2VsbENvbnRlbnRfX3RleHQnO1xuICAgIGlmIChpc09iamVjdCh0cnVuY2F0ZVRleHQpICYmIHRydW5jYXRlVGV4dC5saW5lcykge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGV4dEJsb2NrVHJ1bmNhdGUsIHtcbiAgICAgICAgbGluZXM6IHRydW5jYXRlVGV4dC5saW5lcyxcbiAgICAgICAgY2xvbmVFbGVtZW50OiB0cnVlXG4gICAgICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogdGV4dENsYXNzZXNcbiAgICAgIH0sIGNoaWxkcmVuKSk7XG4gICAgfVxuICAgIGlmICh0ZXh0T25seSA9PT0gdHJ1ZSB8fCB0cnVuY2F0ZVRleHQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogdGV4dENsYXNzZXNcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9LCBbY2hpbGRyZW4sIHRleHRPbmx5LCB0cnVuY2F0ZVRleHRdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgcmVuZGVyZWRDaGlsZHJlbik7XG59O1xuRXVpVGFibGVDZWxsQ29udGVudC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICB0cnVuY2F0ZVRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbGluZXM6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxuICB9KS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtudWxsXSldKVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpVGV4dFRydW5jYXRlLCBldWlUZXh0QnJlYWtXb3JkLCBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXQxcHRsYy1tb2JpbGVcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjA7bGFiZWw6bW9iaWxlO1wiXG59IDoge1xuICBuYW1lOiBcIjF0MXB0bGMtbW9iaWxlXCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzowO2xhYmVsOm1vYmlsZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIm85dGRqZC1kZXNrdG9wXCIsXG4gIHN0eWxlczogXCJmbGV4LXdyYXA6d3JhcDtsYWJlbDpkZXNrdG9wO1wiXG59IDoge1xuICBuYW1lOiBcIm85dGRqZC1kZXNrdG9wXCIsXG4gIHN0eWxlczogXCJmbGV4LXdyYXA6d3JhcDtsYWJlbDpkZXNrdG9wO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXgzeDNqaC1jZW50ZXJcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7bGFiZWw6Y2VudGVyO1wiXG59IDoge1xuICBuYW1lOiBcIjF4M3gzamgtY2VudGVyXCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyO2xhYmVsOmNlbnRlcjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY0ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjF2c2lkMmQtZXVpVGFibGVDZWxsQ29udGVudFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtsYWJlbDpldWlUYWJsZUNlbGxDb250ZW50O1wiXG59IDoge1xuICBuYW1lOiBcIjF2c2lkMmQtZXVpVGFibGVDZWxsQ29udGVudFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtsYWJlbDpldWlUYWJsZUNlbGxDb250ZW50O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVRhYmxlQ2VsbENvbnRlbnRTdHlsZXMgPSBmdW5jdGlvbiBldWlUYWJsZUNlbGxDb250ZW50U3R5bGVzKF9yZWY1KSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY1LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVRhYmxlQ2VsbENvbnRlbnQ6IF9yZWY0LFxuICAgIC8vIEFsaWduXG4gICAgbGVmdDogbnVsbCxcbiAgICAvLyBEZWZhdWx0LCBubyBDU1MgbmVlZGVkXG4gICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7XCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ3JpZ2h0JyksIFwiOztsYWJlbDpyaWdodDtcIiksXG4gICAgY2VudGVyOiBfcmVmMyxcbiAgICAvLyBUZXh0IHdyYXBwaW5nXG4gICAgdHJ1bmNhdGVUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHRUcnVuY2F0ZSgpLCBcIi5ldWlUYWJsZUNlbGxDb250ZW50X190ZXh0e292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO307bGFiZWw6dHJ1bmNhdGVUZXh0O1wiKSxcbiAgICB3cmFwVGV4dDogLyojX19QVVJFX18qL2NzcyhldWlUZXh0QnJlYWtXb3JkKCksIFwiOztsYWJlbDp3cmFwVGV4dDtcIiksXG4gICAgLy8gQWN0aW9uIGNlbGxzXG4gICAgaGFzQWN0aW9uczoge1xuICAgICAgYWN0aW9uczogLyojX19QVVJFX18qL2NzcyhcImdhcDpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6YWN0aW9ucztcIiksXG4gICAgICBkZXNrdG9wOiBfcmVmMixcbiAgICAgIG1vYmlsZTogX3JlZlxuICAgIH1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbWFrZUhpZ2hDb250cmFzdENvbG9yLCB0aW50T3JTaGFkZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUZvbnRTaXplLCBsb2dpY2FsQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpVGFibGVWYXJpYWJsZXMgfSBmcm9tICcuL3RhYmxlLnN0eWxlcyc7XG5leHBvcnQgdmFyIGV1aVRhYmxlSGVhZGVyRm9vdGVyQ2VsbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYmxlSGVhZGVyRm9vdGVyQ2VsbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG5cbiAgLy8gZXVpRm9udFNpemUgcmV0dXJucyBhbiBvYmplY3QsIHNvIHdlIGtlZXAgb2JqZWN0IG5vdGF0aW9uIGhlcmUgdG8gbWVyZ2UgaW50byBjc3NgYFxuICB2YXIgc2hhcmVkU3R5bGVzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICd4cycpKSwge30sIHtcbiAgICBmb250V2VpZ2h0OiBldWlUaGVtZS5mb250LndlaWdodC5zZW1pQm9sZCxcbiAgICBjb2xvcjogZXVpVGhlbWUuY29sb3JzLnRpdGxlLFxuICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGV1aVRhYmxlSGVhZGVyQ2VsbDogLyojX19QVVJFX18qL2NzcyhzaGFyZWRTdHlsZXMsIFwiOztsYWJlbDpldWlUYWJsZUhlYWRlckNlbGw7XCIpLFxuICAgIGV1aVRhYmxlSGVhZGVyQ2VsbF9fY29udGVudDogLyojX19QVVJFX18qL2NzcyhcImdhcDpcIiwgZXVpVGhlbWUuc2l6ZS54cywgXCI7O2xhYmVsOmV1aVRhYmxlSGVhZGVyQ2VsbF9fY29udGVudDtcIiksXG4gICAgZXVpVGFibGVIZWFkZXJDZWxsX19idXR0b246IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiBmb250LXdlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7LmV1aVRhYmxlU29ydEljb24tLXNvcnRhYmxle2NvbG9yOlwiLCBtYWtlSGlnaENvbnRyYXN0Q29sb3IoXG4gICAgLy8gVGludCBpdCBhcmJpdHJhcmlseSBoaWdoLCB0aGUgY29udHJhc3QgdXRpbCB3aWxsIHRha2UgY2FyZSBvZiBsb3dlcmluZyBiYWNrIGRvd24gdG8gV0NBR1xuICAgIHRpbnRPclNoYWRlKGV1aVRoZW1lLmNvbG9ycy5zdWJkdWVkVGV4dCwgMC45LCBjb2xvck1vZGUpLCAzIC8vIDM6MSByYXRpbyBmcm9tIGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvV0NBRzIyL1VuZGVyc3RhbmRpbmcvbm9uLXRleHQtY29udHJhc3QuaHRtbFxuICAgICkoZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUpLCBcIjt9Jjpob3ZlciwmOmZvY3Vze2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQsIFwiO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LmV1aVRhYmxlU29ydEljb24tLXNvcnRhYmxle2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQsIFwiO319O2xhYmVsOmV1aVRhYmxlSGVhZGVyQ2VsbF9fYnV0dG9uO1wiKSxcbiAgICBldWlUYWJsZUZvb3RlckNlbGw6IC8qI19fUFVSRV9fKi9jc3Moc2hhcmVkU3R5bGVzLCBcIiBiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMubGlnaHRlc3RTaGFkZSwgXCI7O2xhYmVsOmV1aVRhYmxlRm9vdGVyQ2VsbDtcIilcbiAgfTtcbn07XG5leHBvcnQgdmFyIGV1aVRhYmxlQ2VsbENoZWNrYm94U3R5bGVzID0gZnVuY3Rpb24gZXVpVGFibGVDZWxsQ2hlY2tib3hTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIF9ldWlUYWJsZVZhcmlhYmxlcyA9IGV1aVRhYmxlVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgY2VsbENvbnRlbnRQYWRkaW5nID0gX2V1aVRhYmxlVmFyaWFibGVzLmNlbGxDb250ZW50UGFkZGluZyxcbiAgICBtb2JpbGVTaXplcyA9IF9ldWlUYWJsZVZhcmlhYmxlcy5tb2JpbGVTaXplcyxcbiAgICBjaGVja2JveFNpemUgPSBfZXVpVGFibGVWYXJpYWJsZXMuY2hlY2tib3hTaXplO1xuICB2YXIgc2hhcmVkQ2hlY2tib3hTdHlsZXMgPSBcIlxcbiAgICBcIi5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCBjaGVja2JveFNpemUpLCBcIlxcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgXCIpO1xuICByZXR1cm4ge1xuICAgIGV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94OiAvKiNfX1BVUkVfXyovY3NzKHNoYXJlZENoZWNrYm94U3R5bGVzLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiOztsYWJlbDpldWlUYWJsZUhlYWRlckNlbGxDaGVja2JveDtcIiksXG4gICAgZXVpVGFibGVSb3dDZWxsQ2hlY2tib3g6IC8qI19fUFVSRV9fKi9jc3Moc2hhcmVkQ2hlY2tib3hTdHlsZXMsIFwiOztsYWJlbDpldWlUYWJsZVJvd0NlbGxDaGVja2JveDtcIiksXG4gICAgZGVza3RvcDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdib3JkZXItdmVydGljYWwnLCBldWlUaGVtZS5ib3JkZXIudGhpbiksIFwiOztsYWJlbDpkZXNrdG9wO1wiKSxcbiAgICBtb2JpbGU6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygndG9wJywgY2VsbENvbnRlbnRQYWRkaW5nKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCBtb2JpbGVTaXplcy5jaGVja2JveC5vZmZzZXQpLCBcIjs7bGFiZWw6bW9iaWxlO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwid3JhcFdpdGhUYWJsZVJvd1wiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlSGVhZGVyID0gZnVuY3Rpb24gRXVpVGFibGVIZWFkZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkd3JhcFdpdGhUYWJsZVJvdyA9IF9yZWYud3JhcFdpdGhUYWJsZVJvdyxcbiAgICB3cmFwV2l0aFRhYmxlUm93ID0gX3JlZiR3cmFwV2l0aFRhYmxlUm93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiR3cmFwV2l0aFRhYmxlUm93LFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0aGVhZFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgcmVzdCksIHdyYXBXaXRoVGFibGVSb3cgPyBfX19FbW90aW9uSlNYKFwidHJcIiwgbnVsbCwgY2hpbGRyZW4pIDogY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlSGVhZGVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogQ2hpbGRyZW4gbXVzdCBiZSB2YWxpZCBET00gc3RydWN0dXJlIHJlc2lkaW5nIHdpdGhpbiBgPHRoZWFkPmAuXG4gICAgICAgKiBVc2UgYDx0ZD4gfCA8dGg+YCBieSBkZWZhdWx0LCBvciBgPHRyPjx0aC8+PC90cj5gIHdoZW4gYHdyYXBXaXRoVGFibGVSb3c9ZmFsc2VgXG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgICAqIEF1dG9tYXRpY2FsbHkgYWRkcyBhIHdyYXBwaW5nIGA8dHI+YCBlbGVtZW50IGFyb3VuZCB0aGUgY2hpbGRyZW5cbiAgICAgICAqL1xuICB3cmFwV2l0aFRhYmxlUm93OiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiYWxpZ25cIiwgXCJvblNvcnRcIiwgXCJpc1NvcnRlZFwiLCBcImlzU29ydEFzY2VuZGluZ1wiLCBcImNsYXNzTmFtZVwiLCBcInNjb3BlXCIsIFwibW9iaWxlT3B0aW9uc1wiLCBcIndpZHRoXCIsIFwic3R5bGVcIiwgXCJyZWFkT25seVwiLCBcImRlc2NyaXB0aW9uXCIsIFwiYXBwZW5kXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcywgTEVGVF9BTElHTk1FTlQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlJbm5lclRleHQgfSBmcm9tICcuLi9pbm5lcl90ZXh0JztcbmltcG9ydCB7IHJlc29sdmVXaWR0aEFzU3R5bGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHVzZUV1aVRhYmxlSXNSZXNwb25zaXZlIH0gZnJvbSAnLi9tb2JpbGUvcmVzcG9uc2l2ZV9jb250ZXh0JztcbmltcG9ydCB7IEV1aVRhYmxlQ2VsbENvbnRlbnQgfSBmcm9tICcuL190YWJsZV9jZWxsX2NvbnRlbnQnO1xuaW1wb3J0IHsgZXVpVGFibGVIZWFkZXJGb290ZXJDZWxsU3R5bGVzIH0gZnJvbSAnLi90YWJsZV9jZWxsc19zaGFyZWQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgQ2VsbENvbnRlbnRzID0gZnVuY3Rpb24gQ2VsbENvbnRlbnRzKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGFsaWduID0gX3JlZi5hbGlnbixcbiAgICBkZXNjcmlwdGlvbiA9IF9yZWYuZGVzY3JpcHRpb24sXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNhblNvcnQgPSBfcmVmLmNhblNvcnQsXG4gICAgaXNTb3J0ZWQgPSBfcmVmLmlzU29ydGVkLFxuICAgIGlzU29ydEFzY2VuZGluZyA9IF9yZWYuaXNTb3J0QXNjZW5kaW5nO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZUNlbGxDb250ZW50LCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgYWxpZ246IGFsaWduLFxuICAgIHRleHRPbmx5OiBmYWxzZSxcbiAgICB0cnVuY2F0ZVRleHQ6IG51bGxcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aVRhYmxlSGVhZGVyQ2VsbC50aXRsZVRleHRXaXRoRGVzY1wiLFxuICAgICAgZGVmYXVsdDogXCJ7aW5uZXJUZXh0fTsge2Rlc2NyaXB0aW9ufVwiLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgIGlubmVyVGV4dDogaW5uZXJUZXh0LFxuICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAodGl0bGVUZXh0V2l0aERlc2MpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIHRpdGxlOiBkZXNjcmlwdGlvbiA/IHRpdGxlVGV4dFdpdGhEZXNjIDogaW5uZXJUZXh0LFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aS10ZXh0VHJ1bmNhdGVcIlxuICAgICAgfSwgY2hpbGRyZW4pO1xuICAgIH0pO1xuICB9KSwgZGVzY3JpcHRpb24gJiYgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCBudWxsLCBkZXNjcmlwdGlvbikpLCBpc1NvcnRlZCA/IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZVNvcnRJY29uXCIsXG4gICAgdHlwZTogaXNTb3J0QXNjZW5kaW5nID8gJ3NvcnRVcCcgOiAnc29ydERvd24nLFxuICAgIHNpemU6IFwibVwiXG4gIH0pIDogY2FuU29ydCA/IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZVNvcnRJY29uIGV1aVRhYmxlU29ydEljb24tLXNvcnRhYmxlXCIsXG4gICAgdHlwZTogXCJzb3J0YWJsZVwiLFxuICAgIHNpemU6IFwibVwiLFxuICAgIGNvbG9yOiBcInN1YmR1ZWRcIiAvLyBUaW50ZWQgYSBiaXQgZnVydGhlciB2aWEgQ1NTXG4gIH0pIDogbnVsbCk7XG59O1xuZXhwb3J0IHZhciBFdWlUYWJsZUhlYWRlckNlbGwgPSBmdW5jdGlvbiBFdWlUYWJsZUhlYWRlckNlbGwoX3JlZjIpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgX3JlZjIkYWxpZ24gPSBfcmVmMi5hbGlnbixcbiAgICBhbGlnbiA9IF9yZWYyJGFsaWduID09PSB2b2lkIDAgPyBMRUZUX0FMSUdOTUVOVCA6IF9yZWYyJGFsaWduLFxuICAgIG9uU29ydCA9IF9yZWYyLm9uU29ydCxcbiAgICBpc1NvcnRlZCA9IF9yZWYyLmlzU29ydGVkLFxuICAgIGlzU29ydEFzY2VuZGluZyA9IF9yZWYyLmlzU29ydEFzY2VuZGluZyxcbiAgICBjbGFzc05hbWUgPSBfcmVmMi5jbGFzc05hbWUsXG4gICAgc2NvcGUgPSBfcmVmMi5zY29wZSxcbiAgICBtb2JpbGVPcHRpb25zID0gX3JlZjIubW9iaWxlT3B0aW9ucyxcbiAgICB3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgIHN0eWxlID0gX3JlZjIuc3R5bGUsXG4gICAgcmVhZE9ubHkgPSBfcmVmMi5yZWFkT25seSxcbiAgICBkZXNjcmlwdGlvbiA9IF9yZWYyLmRlc2NyaXB0aW9uLFxuICAgIGFwcGVuZCA9IF9yZWYyLmFwcGVuZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFibGVIZWFkZXJGb290ZXJDZWxsU3R5bGVzKTtcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IHVzZUV1aVRhYmxlSXNSZXNwb25zaXZlKCk7XG4gIHZhciBoaWRlRm9yRGVza3RvcCA9ICFpc1Jlc3BvbnNpdmUgJiYgKG1vYmlsZU9wdGlvbnMgPT09IG51bGwgfHwgbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbW9iaWxlT3B0aW9ucy5vbmx5KTtcbiAgdmFyIGhpZGVGb3JNb2JpbGUgPSBpc1Jlc3BvbnNpdmUgJiYgKG1vYmlsZU9wdGlvbnMgPT09IG51bGwgfHwgbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbW9iaWxlT3B0aW9ucy5zaG93KSA9PT0gZmFsc2U7XG4gIGlmIChoaWRlRm9yRGVza3RvcCB8fCBoaWRlRm9yTW9iaWxlKSByZXR1cm4gbnVsbDtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlckNlbGwnLCBjbGFzc05hbWUpO1xuICB2YXIgaW5saW5lU3R5bGVzID0gcmVzb2x2ZVdpZHRoQXNTdHlsZShzdHlsZSwgd2lkdGgpO1xuICB2YXIgQ2VsbENvbXBvbmVudCA9IGNoaWxkcmVuID8gJ3RoJyA6ICd0ZCc7XG4gIHZhciBjZWxsU2NvcGUgPSBDZWxsQ29tcG9uZW50ID09PSAndGgnID8gc2NvcGUgIT09IG51bGwgJiYgc2NvcGUgIT09IHZvaWQgMCA/IHNjb3BlIDogJ2NvbCcgOiB1bmRlZmluZWQ7IC8vIGBzY29wZWAgaXMgb25seSB2YWxpZCBvbiBgdGhgIGVsZW1lbnRzXG5cbiAgdmFyIGNhblNvcnQgPSAhIShvblNvcnQgJiYgIXJlYWRPbmx5KTtcbiAgdmFyIGFyaWFTb3J0VmFsdWU7XG4gIGlmIChpc1NvcnRlZCkge1xuICAgIGFyaWFTb3J0VmFsdWUgPSBpc1NvcnRBc2NlbmRpbmcgPyAnYXNjZW5kaW5nJyA6ICdkZXNjZW5kaW5nJztcbiAgfSBlbHNlIGlmIChjYW5Tb3J0KSB7XG4gICAgYXJpYVNvcnRWYWx1ZSA9ICdub25lJztcbiAgfVxuICB2YXIgY2VsbENvbnRlbnRzUHJvcHMgPSB7XG4gICAgY3NzOiBzdHlsZXMuZXVpVGFibGVIZWFkZXJDZWxsX19jb250ZW50LFxuICAgIGFsaWduOiBhbGlnbixcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgY2FuU29ydDogY2FuU29ydCxcbiAgICBpc1NvcnRlZDogaXNTb3J0ZWQsXG4gICAgaXNTb3J0QXNjZW5kaW5nOiBpc1NvcnRBc2NlbmRpbmcsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKENlbGxDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICBjc3M6IHN0eWxlcy5ldWlUYWJsZUhlYWRlckNlbGwsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNjb3BlOiBjZWxsU2NvcGUsXG4gICAgcm9sZTogXCJjb2x1bW5oZWFkZXJcIixcbiAgICBcImFyaWEtc29ydFwiOiBhcmlhU29ydFZhbHVlLFxuICAgIHN0eWxlOiBpbmxpbmVTdHlsZXNcbiAgfSwgcmVzdCksIGNhblNvcnQgPyBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIGNzczogc3R5bGVzLmV1aVRhYmxlSGVhZGVyQ2VsbF9fYnV0dG9uLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpVGFibGVIZWFkZXJCdXR0b24nLCB7XG4gICAgICAnZXVpVGFibGVIZWFkZXJCdXR0b24taXNTb3J0ZWQnOiBpc1NvcnRlZFxuICAgIH0pLFxuICAgIG9uQ2xpY2s6IG9uU29ydCxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVIZWFkZXJTb3J0QnV0dG9uXCJcbiAgfSwgX19fRW1vdGlvbkpTWChDZWxsQ29udGVudHMsIGNlbGxDb250ZW50c1Byb3BzKSkgOiBfX19FbW90aW9uSlNYKENlbGxDb250ZW50cywgY2VsbENvbnRlbnRzUHJvcHMpLCBhcHBlbmQpO1xufTtcbkV1aVRhYmxlSGVhZGVyQ2VsbC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBhbGlnbjogUHJvcFR5cGVzLmFueSxcbiAgaXNTb3J0QXNjZW5kaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNTb3J0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBtb2JpbGVPcHRpb25zOiBQcm9wVHlwZXMuYW55LFxuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBzY29wZTogUHJvcFR5cGVzLmFueSxcbiAgd2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSksXG4gIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgICAqIFNob3dzIHRoZSBzb3J0IGluZGljYXRvciBidXQgcmVtb3ZlcyB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIENvbnRlbnQgcmVuZGVyZWQgb3V0c2lkZSB0aGUgdmlzaWJsZSBjZWxsIGNvbnRlbnQgd3JhcHBlci4gVXNlZnVsIGZvciwgZS5nLiBzY3JlZW4gcmVhZGVyIHRleHQuXG4gICAgICAgKlxuICAgICAgICogVXNlZCBieSBFdWlCYXNpY1RhYmxlIHRvIHJlbmRlciBoaWRkZW4gY29weSBtYXJrZXJzXG4gICAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic2NvcGVcIiwgXCJzdHlsZVwiLCBcIndpZHRoXCIsIFwiYXBwZW5kXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHJlc29sdmVXaWR0aEFzU3R5bGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGV1aVRhYmxlQ2VsbENoZWNrYm94U3R5bGVzIH0gZnJvbSAnLi90YWJsZV9jZWxsc19zaGFyZWQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94ID0gZnVuY3Rpb24gRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3goX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgIHNjb3BlID0gX3JlZiRzY29wZSA9PT0gdm9pZCAwID8gJ2NvbCcgOiBfcmVmJHNjb3BlLFxuICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgYXBwZW5kID0gX3JlZi5hcHBlbmQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94JywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYmxlQ2VsbENoZWNrYm94U3R5bGVzKTtcbiAgdmFyIGlubGluZVN0eWxlcyA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0aFwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBzdHlsZXMuZXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3gsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNjb3BlOiBzY29wZSxcbiAgICBzdHlsZTogaW5saW5lU3R5bGVzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVDZWxsQ29udGVudFwiXG4gIH0sIGNoaWxkcmVuKSwgYXBwZW5kKTtcbn07XG5FdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICB3aWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKSxcbiAgc2NvcGU6IFByb3BUeXBlcy5hbnksXG4gIGFwcGVuZDogUHJvcFR5cGVzLm5vZGVcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInJlc3BvbnNpdmVCcmVha3BvaW50XCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUlzRXVpVGFibGVSZXNwb25zaXZlIH0gZnJvbSAnLi9yZXNwb25zaXZlX2NvbnRleHQnO1xuaW1wb3J0IHsgZXVpVGFibGVIZWFkZXJNb2JpbGVTdHlsZXMgfSBmcm9tICcuL3RhYmxlX2hlYWRlcl9tb2JpbGUuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlSGVhZGVyTW9iaWxlID0gZnVuY3Rpb24gRXVpVGFibGVIZWFkZXJNb2JpbGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHJlc3BvbnNpdmVCcmVha3BvaW50ID0gX3JlZi5yZXNwb25zaXZlQnJlYWtwb2ludCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VJc0V1aVRhYmxlUmVzcG9uc2l2ZShyZXNwb25zaXZlQnJlYWtwb2ludCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJsZUhlYWRlck1vYmlsZVN0eWxlcyk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVIZWFkZXJNb2JpbGUnLCBjbGFzc05hbWUpO1xuICByZXR1cm4gaXNSZXNwb25zaXZlID8gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogc3R5bGVzLmV1aVRhYmxlSGVhZGVyTW9iaWxlXG4gIH0sIHJlc3QpLCBjaGlsZHJlbikgOiBudWxsO1xufTtcbkV1aVRhYmxlSGVhZGVyTW9iaWxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB2YXIgZXVpVGFibGVIZWFkZXJNb2JpbGVTdHlsZXMgPSBmdW5jdGlvbiBldWlUYWJsZUhlYWRlck1vYmlsZVN0eWxlcyhfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpVGFibGVIZWFkZXJNb2JpbGU6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6YmFzZWxpbmU7cGFkZGluZy1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6ZXVpVGFibGVIZWFkZXJNb2JpbGU7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiYW5jaG9yUG9zaXRpb25cIiwgXCJpdGVtc1wiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5IH0gZnJvbSAnLi4vLi4vYnV0dG9uL2J1dHRvbl9lbXB0eSc7XG5pbXBvcnQgeyBFdWlQb3BvdmVyIH0gZnJvbSAnLi4vLi4vcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudVBhbmVsIH0gZnJvbSAnLi4vLi4vY29udGV4dF9tZW51JztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IEV1aVRhYmxlU29ydE1vYmlsZUl0ZW0gfSBmcm9tICcuL3RhYmxlX3NvcnRfbW9iaWxlX2l0ZW0nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVTb3J0TW9iaWxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aVRhYmxlU29ydE1vYmlsZSgpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVRhYmxlU29ydE1vYmlsZSk7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpVGFibGVTb3J0TW9iaWxlLCBbXS5jb25jYXQoYXJncykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzdGF0ZVwiLCB7XG4gICAgICBpc1BvcG92ZXJPcGVuOiBmYWxzZVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkJ1dHRvbkNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNQb3BvdmVyT3BlbjogIV90aGlzLnN0YXRlLmlzUG9wb3Zlck9wZW5cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjbG9zZVBvcG92ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc1BvcG92ZXJPcGVuOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gQWxpZ25zIHRoZSBidXR0b24gdG8gdGhlIHJpZ2h0IGV2ZW4gd2hlbiBpdCdzIHRoZSBvbmx5IGVsZW1lbnQgcHJlc2VudFxuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJldWlUYWJsZVNvcnRNb2JpbGVTdHlsZXNcIiwge1xuICAgICAgbWFyZ2luSW5saW5lU3RhcnQ6ICdhdXRvJyxcbiAgICAgIGxhYmVsOiAnZXVpVGFibGVTb3J0TW9iaWxlJ1xuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpVGFibGVTb3J0TW9iaWxlLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlUYWJsZVNvcnRNb2JpbGUsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIGFuY2hvclBvc2l0aW9uID0gX3RoaXMkcHJvcHMuYW5jaG9yUG9zaXRpb24sXG4gICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMuaXRlbXMsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlU29ydE1vYmlsZScsIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgbW9iaWxlU29ydEJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRW1wdHksIHtcbiAgICAgICAgaWNvblR5cGU6IFwiYXJyb3dEb3duXCIsXG4gICAgICAgIGljb25TaWRlOiBcInJpZ2h0XCIsXG4gICAgICAgIG9uQ2xpY2s6IHRoaXMub25CdXR0b25DbGljay5iaW5kKHRoaXMpLFxuICAgICAgICBmbHVzaDogXCJyaWdodFwiLFxuICAgICAgICBzaXplOiBcInhzXCJcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlUYWJsZVNvcnRNb2JpbGUuc29ydGluZ1wiLFxuICAgICAgICBkZWZhdWx0OiBcIlNvcnRpbmdcIlxuICAgICAgfSkpO1xuICAgICAgdmFyIG1vYmlsZVNvcnRQb3BvdmVyID0gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyLCBfZXh0ZW5kcyh7XG4gICAgICAgIGJ1dHRvbjogbW9iaWxlU29ydEJ1dHRvbixcbiAgICAgICAgaXNPcGVuOiB0aGlzLnN0YXRlLmlzUG9wb3Zlck9wZW4sXG4gICAgICAgIGNsb3NlUG9wb3ZlcjogdGhpcy5jbG9zZVBvcG92ZXIsXG4gICAgICAgIGFuY2hvclBvc2l0aW9uOiBhbmNob3JQb3NpdGlvbiB8fCAnZG93blJpZ2h0JyxcbiAgICAgICAgcGFuZWxQYWRkaW5nU2l6ZTogXCJub25lXCJcbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51UGFuZWwsIHtcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBtaW5XaWR0aDogMjAwXG4gICAgICAgIH0sXG4gICAgICAgIGl0ZW1zOiBpdGVtcyAmJiBpdGVtcy5sZW5ndGggPyBpdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZVNvcnRNb2JpbGVJdGVtLCB7XG4gICAgICAgICAgICBrZXk6IGl0ZW0ua2V5LFxuICAgICAgICAgICAgb25Tb3J0OiBpdGVtLm9uU29ydCxcbiAgICAgICAgICAgIGlzU29ydGVkOiBpdGVtLmlzU29ydGVkLFxuICAgICAgICAgICAgaXNTb3J0QXNjZW5kaW5nOiBpdGVtLmlzU29ydEFzY2VuZGluZ1xuICAgICAgICAgIH0sIGl0ZW0ubmFtZSk7XG4gICAgICAgIH0pIDogdW5kZWZpbmVkXG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgY3NzOiB0aGlzLmV1aVRhYmxlU29ydE1vYmlsZVN0eWxlc1xuICAgICAgfSwgbW9iaWxlU29ydFBvcG92ZXIpO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuRXVpVGFibGVTb3J0TW9iaWxlLnByb3BUeXBlcyA9IHtcbiAgYW5jaG9yUG9zaXRpb246IFByb3BUeXBlcy5hbnksXG4gIGl0ZW1zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAga2V5OiBQcm9wVHlwZXMuYW55LFxuICAgIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNTb3J0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGlzU29ydEFzY2VuZGluZzogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZCksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJvblNvcnRcIiwgXCJpc1NvcnRlZFwiLCBcImlzU29ydEFzY2VuZGluZ1wiLCBcImNsYXNzTmFtZVwiLCBcImFyaWFMYWJlbFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpQ29udGV4dE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vY29udGV4dF9tZW51JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlU29ydE1vYmlsZUl0ZW0gPSBmdW5jdGlvbiBFdWlUYWJsZVNvcnRNb2JpbGVJdGVtKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBvblNvcnQgPSBfcmVmLm9uU29ydCxcbiAgICBpc1NvcnRlZCA9IF9yZWYuaXNTb3J0ZWQsXG4gICAgaXNTb3J0QXNjZW5kaW5nID0gX3JlZi5pc1NvcnRBc2NlbmRpbmcsXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgYXJpYUxhYmVsID0gX3JlZi5hcmlhTGFiZWwsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc29ydEljb24gPSAnZW1wdHknO1xuICBpZiAoaXNTb3J0ZWQpIHtcbiAgICBzb3J0SWNvbiA9IGlzU29ydEFzY2VuZGluZyA/ICdzb3J0VXAnIDogJ3NvcnREb3duJztcbiAgfVxuICB2YXIgYnV0dG9uQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlU29ydE1vYmlsZUl0ZW0nLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVTb3J0TW9iaWxlSXRlbS1pc1NvcnRlZCc6IGlzU29ydGVkXG4gIH0pO1xuICB2YXIgY29sdW1uVGl0bGUgPSBhcmlhTGFiZWwgPyBhcmlhTGFiZWwgOiBjaGlsZHJlbjtcbiAgdmFyIHN0YXRlZnVsQXJpYUxhYmVsID0gXCJTb3J0IFwiLmNvbmNhdChjb2x1bW5UaXRsZSwgXCIgXCIpLmNvbmNhdChpc1NvcnRBc2NlbmRpbmcgPyAnZGVzY2VuZGluZycgOiAnYXNjZW5kaW5nJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51SXRlbSwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogYnV0dG9uQ2xhc3NlcyxcbiAgICBpY29uOiBzb3J0SWNvbixcbiAgICBvbkNsaWNrOiBvblNvcnQsXG4gICAgXCJhcmlhLWxhYmVsXCI6IHN0YXRlZnVsQXJpYUxhYmVsXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpVGFibGVTb3J0TW9iaWxlSXRlbS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGtub3cgd2hlbiBhbiBpdGVtIGhhcyBiZWVuIGNsaWNrZWRcbiAgICAgKi9cbiAgb25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGN1cnJlbnQgb3B0aW9uIGlzIHRoZSBzb3J0ZWQgb24gY29sdW1uXG4gICAgICovXG4gIGlzU29ydGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoaWNoIGRpcmVjdGlvbiB0aGUgY3VycmVudCBjb2x1bW4gaXMgc29ydGVkIG9uXG4gICAgICovXG4gIGlzU29ydEFzY2VuZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImhhc1NlbGVjdGlvblwiLCBcImlzU2VsZWN0ZWRcIiwgXCJpc1NlbGVjdGFibGVcIiwgXCJoYXNBY3Rpb25zXCIsIFwiaXNFeHBhbmRlZFJvd1wiLCBcImlzRXhwYW5kYWJsZVwiLCBcIm9uQ2xpY2tcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXMsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUgfSBmcm9tICcuL21vYmlsZS9yZXNwb25zaXZlX2NvbnRleHQnO1xuaW1wb3J0IHsgZXVpVGFibGVSb3dTdHlsZXMgfSBmcm9tICcuL3RhYmxlX3Jvdy5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVSb3cgPSBmdW5jdGlvbiBFdWlUYWJsZVJvdyhfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgaGFzU2VsZWN0aW9uID0gX3JlZi5oYXNTZWxlY3Rpb24sXG4gICAgaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICBpc1NlbGVjdGFibGUgPSBfcmVmLmlzU2VsZWN0YWJsZSxcbiAgICBoYXNBY3Rpb25zID0gX3JlZi5oYXNBY3Rpb25zLFxuICAgIGlzRXhwYW5kZWRSb3cgPSBfcmVmLmlzRXhwYW5kZWRSb3csXG4gICAgaXNFeHBhbmRhYmxlID0gX3JlZi5pc0V4cGFuZGFibGUsXG4gICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSgpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFibGVSb3dTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gaXNSZXNwb25zaXZlID8gW3N0eWxlcy5ldWlUYWJsZVJvdywgc3R5bGVzLm1vYmlsZS5tb2JpbGUsIGlzU2VsZWN0ZWQgJiYgc3R5bGVzLm1vYmlsZS5zZWxlY3RlZCwgaXNFeHBhbmRlZFJvdyAmJiBzdHlsZXMubW9iaWxlLmV4cGFuZGVkLCAoaGFzQWN0aW9ucyA9PT0gdHJ1ZSB8fCBpc0V4cGFuZGFibGUgfHwgaXNFeHBhbmRlZFJvdykgJiYgc3R5bGVzLm1vYmlsZS5oYXNSaWdodENvbHVtbiwgaGFzU2VsZWN0aW9uICYmIHN0eWxlcy5tb2JpbGUuaGFzTGVmdENvbHVtbl0gOiBbc3R5bGVzLmV1aVRhYmxlUm93LCBzdHlsZXMuZGVza3RvcC5kZXNrdG9wLCBpc1NlbGVjdGVkICYmIHN0eWxlcy5kZXNrdG9wLnNlbGVjdGVkLCBpc0V4cGFuZGVkUm93ICYmIHN0eWxlcy5kZXNrdG9wLmV4cGFuZGVkLCBvbkNsaWNrICYmIHN0eWxlcy5kZXNrdG9wLmNsaWNrYWJsZSwgaXNFeHBhbmRlZFJvdyAmJiBoYXNTZWxlY3Rpb24gJiYgc3R5bGVzLmRlc2t0b3AuY2hlY2tib3hPZmZzZXRdO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlUm93JywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlUm93LWlzU2VsZWN0YWJsZSc6IGlzU2VsZWN0YWJsZSxcbiAgICAnZXVpVGFibGVSb3ctaXNTZWxlY3RlZCc6IGlzU2VsZWN0ZWQsXG4gICAgJ2V1aVRhYmxlUm93LWhhc0FjdGlvbnMnOiBoYXNBY3Rpb25zLFxuICAgICdldWlUYWJsZVJvdy1pc0V4cGFuZGVkUm93JzogaXNFeHBhbmRlZFJvdyxcbiAgICAnZXVpVGFibGVSb3ctaXNFeHBhbmRhYmxlJzogaXNFeHBhbmRhYmxlLFxuICAgICdldWlUYWJsZVJvdy1pc0NsaWNrYWJsZSc6IG9uQ2xpY2tcbiAgfSk7XG4gIGlmICghb25DbGljaykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwidHJcIiwgX2V4dGVuZHMoe1xuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICB9XG4gIHZhciBvbktleURvd24gPSBmdW5jdGlvbiBvbktleURvd24oZXZlbnQpIHtcbiAgICAvLyBQcmV2ZW50IGEgc2Nyb2xsIGZyb20gb2NjdXJyaW5nIGlmIHRoZSB1c2VyIGhhcyBoaXQgc3BhY2UuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0ga2V5cy5TUEFDRSkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfTtcbiAgdmFyIG9uS2V5VXAgPSBmdW5jdGlvbiBvbktleVVwKGV2ZW50KSB7XG4gICAgLy8gU3VwcG9ydCBrZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGJ5IGVtdWxhdGluZyBtb3VzZSBjbGljayBvbiBFTlRFUiBvciBTUEFDRSBrZXlwcmVzcy5cbiAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkVOVEVSIHx8IGV2ZW50LmtleSA9PT0ga2V5cy5TUEFDRSkge1xuICAgICAgb25DbGljayhldmVudCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRyXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBvbktleURvd246IG9uS2V5RG93bixcbiAgICBvbktleVVwOiBvbktleVVwLFxuICAgIHRhYkluZGV4OiAwXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpVGFibGVSb3cucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSB0YWJsZSBoYXMgYSBzaW5nbGUgY29sdW1uIG9mIGNoZWNrYm94ZXMgZm9yIHNlbGVjdGluZ1xuICAgICAqIHJvd3MgKHVzZWQgZm9yIG1vYmlsZSBzdHlsaW5nKVxuICAgICAqL1xuICBoYXNTZWxlY3Rpb246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudCByb3cncyBjaGVja2JveCBpcyBzZWxlY3RhYmxlIC8gbm90IGRpc2FibGVkXG4gICAgICovXG4gIGlzU2VsZWN0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgY3VycmVudCByb3cgaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgdGFibGUgaGFzIGEgZGVkaWNhdGVkIGNvbHVtbiBmb3IgYWN0aW9uc1xuICAgICAqICh1c2VkIGZvciBtb2JpbGUgc3R5bGluZyBhbmQgZGVza3RvcCBhY3Rpb24gaG92ZXIgYmVoYXZpb3IpXG4gICAgICovXG4gIGhhc0FjdGlvbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbXCJjdXN0b21cIl0pXSksXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgcm93IHdpbGwgaGF2ZSBhbiBleHBhbmRlZCByb3dcbiAgICAgKi9cbiAgaXNFeHBhbmRhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSByb3cgd2lsbCBiZSB0aGUgZXhwYW5kZWQgcm93XG4gICAgICovXG4gIGlzRXhwYW5kZWRSb3c6IFByb3BUeXBlcy5ib29sLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0O1xuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChlLCB0KSB7IHJldHVybiB0IHx8ICh0ID0gZS5zbGljZSgwKSksIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUodCkgfSB9KSk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcywga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdGludCwgc2hhZGUsIHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgZXVpQmFja2dyb3VuZENvbG9yLCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpU2hhZG93IH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuaW1wb3J0IHsgZXVpVGFibGVWYXJpYWJsZXMgfSBmcm9tICcuL3RhYmxlLnN0eWxlcyc7XG5leHBvcnQgdmFyIGV1aVRhYmxlUm93U3R5bGVzID0gZnVuY3Rpb24gZXVpVGFibGVSb3dTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIHJvd0NvbG9ycyA9IF9yb3dDb2xvclZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgZXhwYW5kZWRBbmltYXRpb25Dc3MgPSBfZXhwYW5kZWRSb3dBbmltYXRpb24oZXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIF9ldWlUYWJsZVZhcmlhYmxlcyA9IGV1aVRhYmxlVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgY2VsbENvbnRlbnRQYWRkaW5nID0gX2V1aVRhYmxlVmFyaWFibGVzLmNlbGxDb250ZW50UGFkZGluZyxcbiAgICBtb2JpbGVTaXplcyA9IF9ldWlUYWJsZVZhcmlhYmxlcy5tb2JpbGVTaXplcyxcbiAgICBjaGVja2JveFNpemUgPSBfZXVpVGFibGVWYXJpYWJsZXMuY2hlY2tib3hTaXplO1xuICByZXR1cm4ge1xuICAgIGV1aVRhYmxlUm93OiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmV1aVRhYmxlUm93O1wiKSxcbiAgICBkZXNrdG9wOiB7XG4gICAgICBkZXNrdG9wOiAvKiNfX1BVUkVfXyovY3NzKFwiJjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOlwiLCByb3dDb2xvcnMuaG92ZXIsIFwiO307bGFiZWw6ZGVza3RvcDtcIiksXG4gICAgICBleHBhbmRlZDogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHJvd0NvbG9ycy5ob3ZlciwgXCI7XCIsIGV4cGFuZGVkQW5pbWF0aW9uQ3NzLCBcIjs7bGFiZWw6ZXhwYW5kZWQ7XCIpLFxuICAgICAgY2xpY2thYmxlOiAvKiNfX1BVUkVfXyovY3NzKFwiJjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOlwiLCByb3dDb2xvcnMuY2xpY2thYmxlLmhvdmVyLCBcIjtjdXJzb3I6cG9pbnRlcjt9Jjpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOlwiLCByb3dDb2xvcnMuY2xpY2thYmxlLmZvY3VzLCBcIjt9O2xhYmVsOmNsaWNrYWJsZTtcIiksXG4gICAgICBzZWxlY3RlZDogLyojX19QVVJFX18qL2NzcyhcIiYsJisuZXVpVGFibGVSb3ctaXNFeHBhbmRlZFJvd3tiYWNrZ3JvdW5kLWNvbG9yOlwiLCByb3dDb2xvcnMuc2VsZWN0ZWQuY29sb3IsIFwiO30mOmhvdmVyLCY6aG92ZXIrLmV1aVRhYmxlUm93LWlzRXhwYW5kZWRSb3d7YmFja2dyb3VuZC1jb2xvcjpcIiwgcm93Q29sb3JzLnNlbGVjdGVkLmhvdmVyLCBcIjt9O2xhYmVsOnNlbGVjdGVkO1wiKSxcbiAgICAgIC8vIE9mZnNldCBleHBhbmRlZCAmIHNlbGVjdGFibGUgcm93cyBieSB0aGUgY2hlY2tib3ggd2lkdGggdG8gbGluZSB1cCBjb250ZW50IHdpdGggdGhlIDJuZCBjb2x1bW5cbiAgICAgIC8vIFNldCBvbiB0aGUgYDx0ZD5gIGJlY2F1c2UgcGFkZGluZyBjYW4ndCBiZSBhcHBsaWVkIHRvIGA8dHI+YCBlbGVtZW50cyBkaXJlY3RseVxuICAgICAgY2hlY2tib3hPZmZzZXQ6IC8qI19fUFVSRV9fKi9jc3MoXCImPi5ldWlUYWJsZVJvd0NlbGw6Zmlyc3QtY2hpbGR7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIGNoZWNrYm94U2l6ZSksIFwiO307bGFiZWw6Y2hlY2tib3hPZmZzZXQ7XCIpXG4gICAgfSxcbiAgICBtb2JpbGU6IHtcbiAgICAgIG1vYmlsZTogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtwYWRkaW5nOlwiLCBjZWxsQ29udGVudFBhZGRpbmcsIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgY2VsbENvbnRlbnRQYWRkaW5nKSwgZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCIgYmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ3BsYWluJyksIFwiO2JvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBcIjs7bGFiZWw6bW9iaWxlO1wiKSxcbiAgICAgIHNlbGVjdGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiJiwmKy5ldWlUYWJsZVJvdy1pc0V4cGFuZGVkUm93e2JhY2tncm91bmQtY29sb3I6XCIsIHJvd0NvbG9ycy5zZWxlY3RlZC5jb2xvciwgXCI7fTtsYWJlbDpzZWxlY3RlZDtcIiksXG4gICAgICAvKipcbiAgICAgICAqIExlZnQgY29sdW1uIG9mZnNldCAobm8gYm9yZGVyKVxuICAgICAgICogVXNlZCBmb3Igc2VsZWN0aW9uIGNoZWNrYm94LCB3aGljaCB3aWxsIGJlIGFic29sdXRlbHkgcG9zaXRpb25lZFxuICAgICAgICovXG4gICAgICBoYXNMZWZ0Q29sdW1uOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIG1vYmlsZVNpemVzLmNoZWNrYm94LndpZHRoKSwgXCI7O2xhYmVsOmhhc0xlZnRDb2x1bW47XCIpLFxuICAgICAgLyoqXG4gICAgICAgKiBSaWdodCBjb2x1bW4gc3R5bGVzICsgYm9yZGVyXG4gICAgICAgKiBVc2VkIGZvciBjZWxsIGFjdGlvbnMgYW5kIHJvdyBleHBhbmRlciBhcnJvd1xuICAgICAgICovXG4gICAgICBoYXNSaWdodENvbHVtbjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdwYWRkaW5nLXJpZ2h0JywgbW9iaWxlU2l6ZXMuYWN0aW9ucy53aWR0aCksIFwiICY6OmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxDU1MoJ3ZlcnRpY2FsJywgMCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdyaWdodCcsIG1vYmlsZVNpemVzLmFjdGlvbnMud2lkdGgpLCBcIiBcIiwgbG9naWNhbENTUygnd2lkdGgnLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiksIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmJvcmRlci5jb2xvciwgXCI7fTtsYWJlbDpoYXNSaWdodENvbHVtbjtcIiksXG4gICAgICAvKipcbiAgICAgICAqIEJvdHRvbSBvZiBjYXJkIC0gZXhwYW5kZWQgcm93c1xuICAgICAgICovXG4gICAgICBleHBhbmRlZDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgXCItXCIuY29uY2F0KG1vYmlsZVNpemVzLmFjdGlvbnMub2Zmc2V0KSksIGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIGNlbGxDb250ZW50UGFkZGluZyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdib3JkZXItdG9wJywgZXVpVGhlbWUuYm9yZGVyLnRoaW4pLCBcIiBcIiwgbG9naWNhbENTUygnYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cycsIDApLCBcIiBcIiwgbG9naWNhbENTUygnYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMnLCAwKSwgXCI+LmV1aVRhYmxlUm93Q2VsbHtcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjt9XCIsIGV4cGFuZGVkQW5pbWF0aW9uQ3NzLCBcIjs7bGFiZWw6ZXhwYW5kZWQ7XCIpXG4gICAgfVxuICB9O1xufTtcbnZhciBfZXhwYW5kZWRSb3dBbmltYXRpb24gPSBmdW5jdGlvbiBfZXhwYW5kZWRSb3dBbmltYXRpb24oX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICAvLyBEbyBub3QgYXR0ZW1wdCB0byBhbmltYXRlIHRvIGhlaWdodCBhdXRvIC0gZG93biB0aGF0IHJvYWQgZHJhZ29ucyBsaWVcbiAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC82ODI2XG4gIHZhciBleHBhbmRSb3cgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICAwJSB7XFxuICAgICAgb3BhY2l0eTogMDtcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLVwiLCBcIik7XFxuICAgIH1cXG4gICAgMTAwJSB7XFxuICAgICAgb3BhY2l0eTogMTtcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XFxuICAgIH1cXG4gIFwiXSkpLCBldWlUaGVtZS5zaXplLm0pO1xuXG4gIC8vIEFuaW1hdGlvbiBtdXN0IGJlIG9uIHRoZSBjb250ZW50cyBkaXYgaW5zaWRlLCBub3QgdGhlIHJvdyBpdHNlbGZcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jc3MoZXVpQ2FuQW5pbWF0ZSwgXCJ7LmV1aVRhYmxlQ2VsbENvbnRlbnR7YW5pbWF0aW9uOlwiLCBldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIiAxIG5vcm1hbCBub25lIFwiLCBleHBhbmRSb3csIFwiO319XCIpO1xufTtcbnZhciBfcm93Q29sb3JWYXJpYWJsZXMgPSBmdW5jdGlvbiBfcm93Q29sb3JWYXJpYWJsZXMoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gX3JlZjIuY29sb3JNb2RlO1xuICByZXR1cm4ge1xuICAgIGhvdmVyOiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlIDogdGludChldWlUaGVtZS5jb2xvcnMubGlnaHRlc3RTaGFkZSwgMC41KSxcbiAgICBzZWxlY3RlZDoge1xuICAgICAgY29sb3I6IGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gc2hhZGUoZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIDAuNykgOiB0aW50KGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCAwLjk2KSxcbiAgICAgIGhvdmVyOiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHNoYWRlKGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCAwLjc1KSA6IHRpbnQoZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIDAuOSlcbiAgICB9LFxuICAgIGNsaWNrYWJsZToge1xuICAgICAgaG92ZXI6IHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCAwLjA1KSxcbiAgICAgIGZvY3VzOiB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgMC4xKVxuICAgIH1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJhbGlnblwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwidHJ1bmNhdGVUZXh0XCIsIFwic2V0U2NvcGVSb3dcIiwgXCJ0ZXh0T25seVwiLCBcImhhc0FjdGlvbnNcIiwgXCJpc0V4cGFuZGVyXCIsIFwic3R5bGVcIiwgXCJ3aWR0aFwiLCBcInZhbGlnblwiLCBcIm1vYmlsZU9wdGlvbnNcIiwgXCJhcHBlbmRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzLCBMRUZUX0FMSUdOTUVOVCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUV1aVRhYmxlSXNSZXNwb25zaXZlIH0gZnJvbSAnLi9tb2JpbGUvcmVzcG9uc2l2ZV9jb250ZXh0JztcbmltcG9ydCB7IHJlc29sdmVXaWR0aEFzU3R5bGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEV1aVRhYmxlQ2VsbENvbnRlbnQgfSBmcm9tICcuL190YWJsZV9jZWxsX2NvbnRlbnQnO1xuaW1wb3J0IHsgZXVpVGFibGVSb3dDZWxsU3R5bGVzIH0gZnJvbSAnLi90YWJsZV9yb3dfY2VsbC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVSb3dDZWxsID0gZnVuY3Rpb24gRXVpVGFibGVSb3dDZWxsKF9yZWYpIHtcbiAgdmFyIF9yZWYkYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgIGFsaWduID0gX3JlZiRhbGlnbiA9PT0gdm9pZCAwID8gTEVGVF9BTElHTk1FTlQgOiBfcmVmJGFsaWduLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICB0cnVuY2F0ZVRleHQgPSBfcmVmLnRydW5jYXRlVGV4dCxcbiAgICBzZXRTY29wZVJvdyA9IF9yZWYuc2V0U2NvcGVSb3csXG4gICAgX3JlZiR0ZXh0T25seSA9IF9yZWYudGV4dE9ubHksXG4gICAgdGV4dE9ubHkgPSBfcmVmJHRleHRPbmx5ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiR0ZXh0T25seSxcbiAgICBoYXNBY3Rpb25zID0gX3JlZi5oYXNBY3Rpb25zLFxuICAgIGlzRXhwYW5kZXIgPSBfcmVmLmlzRXhwYW5kZXIsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICBfcmVmJHZhbGlnbiA9IF9yZWYudmFsaWduLFxuICAgIHZhbGlnbiA9IF9yZWYkdmFsaWduID09PSB2b2lkIDAgPyAnbWlkZGxlJyA6IF9yZWYkdmFsaWduLFxuICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmLm1vYmlsZU9wdGlvbnMsXG4gICAgYXBwZW5kID0gX3JlZi5hcHBlbmQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNSZXNwb25zaXZlID0gdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUoKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYmxlUm93Q2VsbFN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRhYmxlUm93Q2VsbCwgc2V0U2NvcGVSb3cgJiYgc3R5bGVzLnJvd0hlYWRlciwgaXNFeHBhbmRlciAmJiBzdHlsZXMuaXNFeHBhbmRlciwgaGFzQWN0aW9ucyAmJiBzdHlsZXMuaGFzQWN0aW9ucywgc3R5bGVzW3ZhbGlnbl1dLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoaXNSZXNwb25zaXZlID8gW3N0eWxlcy5tb2JpbGUubW9iaWxlLCAobW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLmVubGFyZ2UpICYmIHN0eWxlcy5tb2JpbGUuZW5sYXJnZSwgaGFzQWN0aW9ucyA9PT0gJ2N1c3RvbScgJiYgc3R5bGVzLm1vYmlsZS5jdXN0b21BY3Rpb25zLCBoYXNBY3Rpb25zID09PSB0cnVlICYmIHN0eWxlcy5tb2JpbGUuYWN0aW9ucywgaXNFeHBhbmRlciAmJiBzdHlsZXMubW9iaWxlLmV4cGFuZGVyXSA6IFtzdHlsZXMuZGVza3RvcC5kZXNrdG9wLCBoYXNBY3Rpb25zICYmIHN0eWxlcy5kZXNrdG9wLmFjdGlvbnNdKSk7XG4gIHZhciBjZWxsQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlUm93Q2VsbCcsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZVJvd0NlbGwtLWhhc0FjdGlvbnMnOiBoYXNBY3Rpb25zLFxuICAgICdldWlUYWJsZVJvd0NlbGwtLWlzRXhwYW5kZXInOiBpc0V4cGFuZGVyXG4gIH0pO1xuICB2YXIgd2lkdGhWYWx1ZSA9IGlzUmVzcG9uc2l2ZSA/IGhhc0FjdGlvbnMgfHwgaXNFeHBhbmRlciA/IHVuZGVmaW5lZCAvLyBPbiBtb2JpbGUsIGFjdGlvbnMgYXJlIHNoaWZ0ZWQgdG8gYSByaWdodCBjb2x1bW4gdmlhIENTU1xuICA6IG1vYmlsZU9wdGlvbnMgPT09IG51bGwgfHwgbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbW9iaWxlT3B0aW9ucy53aWR0aCA6IHdpZHRoO1xuICB2YXIgc3R5bGVPYmogPSByZXNvbHZlV2lkdGhBc1N0eWxlKHN0eWxlLCB3aWR0aFZhbHVlKTtcbiAgdmFyIEVsZW1lbnQgPSBzZXRTY29wZVJvdyA/ICd0aCcgOiAndGQnO1xuICB2YXIgc2hhcmVkUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBzY29wZTogc2V0U2NvcGVSb3cgPyAncm93JyA6IHVuZGVmaW5lZCxcbiAgICBzdHlsZTogc3R5bGVPYmosXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCk7XG4gIHZhciBzaGFyZWRDb250ZW50UHJvcHMgPSB7XG4gICAgYWxpZ246IGFsaWduLFxuICAgIHRleHRPbmx5OiB0ZXh0T25seSxcbiAgICB0cnVuY2F0ZVRleHQ6IHRydW5jYXRlVGV4dCxcbiAgICBoYXNBY3Rpb25zOiBoYXNBY3Rpb25zIHx8IGlzRXhwYW5kZXJcbiAgfTtcbiAgaWYgKGlzUmVzcG9uc2l2ZSkge1xuICAgIC8vIE1vYmlsZSB2aWV3XG4gICAgaWYgKChtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMuc2hvdykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9tb2JpbGVPcHRpb25zJGFsaWduLCBfbW9iaWxlT3B0aW9ucyR0cnVuY2EsIF9tb2JpbGVPcHRpb25zJHRleHRPbjtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjZWxsQ2xhc3Nlc1xuICAgICAgfSwgc2hhcmVkUHJvcHMpLCAobW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLmhlYWRlcikgJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZVJvd0NlbGxfX21vYmlsZUhlYWRlclwiLFxuICAgICAgICBjc3M6IHN0eWxlcy5ldWlUYWJsZVJvd0NlbGxfX21vYmlsZUhlYWRlclxuICAgICAgfSwgbW9iaWxlT3B0aW9ucy5oZWFkZXIpLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlQ2VsbENvbnRlbnQsIF9leHRlbmRzKHt9LCBzaGFyZWRDb250ZW50UHJvcHMsIHtcbiAgICAgICAgYWxpZ246IChfbW9iaWxlT3B0aW9ucyRhbGlnbiA9IG1vYmlsZU9wdGlvbnMgPT09IG51bGwgfHwgbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbW9iaWxlT3B0aW9ucy5hbGlnbikgIT09IG51bGwgJiYgX21vYmlsZU9wdGlvbnMkYWxpZ24gIT09IHZvaWQgMCA/IF9tb2JpbGVPcHRpb25zJGFsaWduIDogJ2xlZnQnIC8vIERlZmF1bHQgdG8gbGVmdCBhbGlnbmVkIG1vYmlsZSBjZWxscywgdW5sZXNzIGNvbnN1bWVycyBzcGVjaWZpY2FsbHkgc2V0IGFuIGFsaWdubWVudCBmb3IgbW9iaWxlXG4gICAgICAgICxcbiAgICAgICAgdHJ1bmNhdGVUZXh0OiAoX21vYmlsZU9wdGlvbnMkdHJ1bmNhID0gbW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLnRydW5jYXRlVGV4dCkgIT09IG51bGwgJiYgX21vYmlsZU9wdGlvbnMkdHJ1bmNhICE9PSB2b2lkIDAgPyBfbW9iaWxlT3B0aW9ucyR0cnVuY2EgOiB0cnVuY2F0ZVRleHQsXG4gICAgICAgIHRleHRPbmx5OiAoX21vYmlsZU9wdGlvbnMkdGV4dE9uID0gbW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLnRleHRPbmx5KSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyR0ZXh0T24gIT09IHZvaWQgMCA/IF9tb2JpbGVPcHRpb25zJHRleHRPbiA6IHRleHRPbmx5XG4gICAgICB9KSwgKG1vYmlsZU9wdGlvbnMgPT09IG51bGwgfHwgbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbW9iaWxlT3B0aW9ucy5yZW5kZXIpIHx8IGNoaWxkcmVuKSwgYXBwZW5kKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gRGVza3RvcCB2aWV3XG4gICAgaWYgKG1vYmlsZU9wdGlvbnMgIT09IG51bGwgJiYgbW9iaWxlT3B0aW9ucyAhPT0gdm9pZCAwICYmIG1vYmlsZU9wdGlvbnMub25seSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjZWxsQ2xhc3Nlc1xuICAgICAgfSwgc2hhcmVkUHJvcHMpLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlQ2VsbENvbnRlbnQsIHNoYXJlZENvbnRlbnRQcm9wcywgY2hpbGRyZW4pLCBhcHBlbmQpO1xuICAgIH1cbiAgfVxufTtcbkV1aVRhYmxlUm93Q2VsbC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBWZXJ0aWNhbCBhbGlnbm1lbnQgb2YgdGhlIGNvbnRlbnQgaW4gdGhlIGNlbGxcbiAgICAgKi9cbiAgdmFsaWduOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY2VsbCBzaG91bGQgYmUgbWFya2VkIGFzIHRoZSBoZWFkaW5nIGZvciBpdHMgcm93XG4gICAgICovXG4gIHNldFNjb3BlUm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBjZWxsIGlzIGRlZGljYXRlZCB0byByb3cgYWN0aW9uc1xuICAgICAqICh1c2VkIGZvciBtb2JpbGUgc3R5bGluZyBhbmQgZGVza3RvcCBhY3Rpb24gaG92ZXIgYmVoYXZpb3IpXG4gICAgICovXG4gIGhhc0FjdGlvbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbXCJjdXN0b21cIl0pXSksXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIGlzIGRlZGljYXRlZCBhcyB0aGUgZXhwYW5kYWJsZSByb3cgdG9nZ2xlXG4gICAgICovXG4gIGlzRXhwYW5kZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBNb2JpbGUgb3B0aW9ucyBmb3IgZGlzcGxheWluZyBkaWZmZXJlbnRseSBhdCBzbWFsbCBzY3JlZW5zO1xuICAgICAqIFNlZSAjRXVpVGFibGVSb3dDZWxsTW9iaWxlT3B0aW9uc1NoYXBlXG4gICAgICovXG4gIG1vYmlsZU9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBJZiBmYWxzZSwgd2lsbCBub3QgcmVuZGVyIHRoZSBjZWxsIGF0IGFsbCBmb3IgbW9iaWxlXG4gICAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICAgKi9cbiAgICBzaG93OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIE9ubHkgc2hvdyBmb3IgbW9iaWxlPyBJZiB0cnVlLCB3aWxsIG5vdCByZW5kZXIgdGhlIGNvbHVtbiBhdCBhbGwgZm9yIGRlc2t0b3BcbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgICBvbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIEN1c3RvbSByZW5kZXIvY2hpbGRyZW4gaWYgZGlmZmVyZW50IGZyb20gZGVza3RvcFxuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgICAqIFRoZSBjb2x1bW4ncyBoZWFkZXIgZm9yIHVzZSBpbiBtb2JpbGUgdmlldyAoYXV0b21hdGljYWxseSBwYXNzZWQgZG93blxuICAgICAgICogd2hlbiB1c2luZyBgRXVpQmFzaWNUYWJsZWApLlxuICAgICAgICogT3IgcGFzcyBgZmFsc2VgIHRvIG5vdCBzaG93IGEgaGVhZGVyIGF0IGFsbC5cbiAgICAgICAqL1xuICAgIGhlYWRlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogSW5jcmVhc2UgdGV4dCBzaXplIGNvbXBhcmVkIHRvIHJlc3Qgb2YgY2VsbHNcbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgICBlbmxhcmdlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIEFwcGxpZXMgdGhlIHZhbHVlIHRvIHRoZSB3aWR0aCBvZiB0aGUgY2VsbCBpbiBtb2JpbGUgdmlldyAodHlwaWNhbGx5IDUwJSlcbiAgICAgICAqIEBkZWZhdWx0IDUwJVxuICAgICAgICovXG4gICAgd2lkdGg6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBIb3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGUgdGV4dCBpbiB0aGUgY2VsbFxuICAgICAgICovXG4gICAgYWxpZ246IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgdGV4dCB3cmFwcGVyIGFyb3VuZCBjZWxsIGNvbnRlbnQgdGhhdCBoZWxwcyB3b3JkIGJyZWFrIG9yIHRydW5jYXRlXG4gICAgICAgKiBsb25nIHRleHQgY29ycmVjdGx5LlxuICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICovXG4gICAgdGV4dE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjb2x1bW4gc2hvdWxkIHRydW5jYXRlIG92ZXJmbG93aW5nIHRleHQgY29udGVudC5cbiAgICAgICAqIC0gU2V0IHRvIGB0cnVlYCB0byBlbmFibGUgc2luZ2xlLWxpbmUgdHJ1bmNhdGlvbi5cbiAgICAgICAqIC0gVG8gZW5hYmxlIG11bHRpLWxpbmUgdHJ1bmNhdGlvbiwgdXNlIGEgY29uZmlndXJhdGlvbiBvYmplY3Qgd2l0aCBgbGluZXNgXG4gICAgICAgKiBzZXQgdG8gYSBudW1iZXIgb2YgbGluZXMgdG8gdHJ1bmNhdGUgdG8uXG4gICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICovXG4gICAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbGluZXM6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWRdKVxuICB9KSxcbiAgLyoqXG4gICAgICogQ29udGVudCByZW5kZXJlZCBvdXRzaWRlIHRoZSB2aXNpYmxlIGNlbGwgY29udGVudCB3cmFwcGVyLiBVc2VmdWwgZm9yLCBlLmcuIHNjcmVlbiByZWFkZXIgdGV4dC5cbiAgICAgKlxuICAgICAqIFVzZWQgYnkgRXVpQmFzaWNUYWJsZSB0byByZW5kZXIgaGlkZGVuIGNvcHkgbWFya2Vyc1xuICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBIb3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGUgdGV4dCBpbiB0aGUgY2VsbFxuICAgICAqL1xuICBhbGlnbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHRleHQgd3JhcHBlciBhcm91bmQgY2VsbCBjb250ZW50IHRoYXQgaGVscHMgd29yZCBicmVhayBvciB0cnVuY2F0ZVxuICAgICAqIGxvbmcgdGV4dCBjb3JyZWN0bHkuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICB0ZXh0T25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgY29sdW1uIHNob3VsZCB0cnVuY2F0ZSBvdmVyZmxvd2luZyB0ZXh0IGNvbnRlbnQuXG4gICAgICogLSBTZXQgdG8gYHRydWVgIHRvIGVuYWJsZSBzaW5nbGUtbGluZSB0cnVuY2F0aW9uLlxuICAgICAqIC0gVG8gZW5hYmxlIG11bHRpLWxpbmUgdHJ1bmNhdGlvbiwgdXNlIGEgY29uZmlndXJhdGlvbiBvYmplY3Qgd2l0aCBgbGluZXNgXG4gICAgICogc2V0IHRvIGEgbnVtYmVyIG9mIGxpbmVzIHRvIHRydW5jYXRlIHRvLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIHRydW5jYXRlVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBsaW5lczogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgd2lkdGg6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUNhbkFuaW1hdGUsIGV1aUZvbnRTaXplLCBldWlUZXh0VHJ1bmNhdGUsIGxvZ2ljYWxDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlUYWJsZVZhcmlhYmxlcyB9IGZyb20gJy4vdGFibGUuc3R5bGVzJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFhbXZkeTYtYm90dG9tXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjpib3R0b207bGFiZWw6Ym90dG9tO1wiXG59IDoge1xuICBuYW1lOiBcIjFhbXZkeTYtYm90dG9tXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjpib3R0b207bGFiZWw6Ym90dG9tO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMmY3NjRlLXRvcFwiLFxuICBzdHlsZXM6IFwidmVydGljYWwtYWxpZ246dG9wO2xhYmVsOnRvcDtcIlxufSA6IHtcbiAgbmFtZTogXCIyZjc2NGUtdG9wXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjp0b3A7bGFiZWw6dG9wO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTloZXhoeS1iYXNlbGluZVwiLFxuICBzdHlsZXM6IFwidmVydGljYWwtYWxpZ246YmFzZWxpbmU7bGFiZWw6YmFzZWxpbmU7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTloZXhoeS1iYXNlbGluZVwiLFxuICBzdHlsZXM6IFwidmVydGljYWwtYWxpZ246YmFzZWxpbmU7bGFiZWw6YmFzZWxpbmU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJsMW5tZTctbWlkZGxlXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGFiZWw6bWlkZGxlO1wiXG59IDoge1xuICBuYW1lOiBcImwxbm1lNy1taWRkbGVcIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOm1pZGRsZTtsYWJlbDptaWRkbGU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpVGFibGVSb3dDZWxsU3R5bGVzID0gZnVuY3Rpb24gZXVpVGFibGVSb3dDZWxsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBfZXVpVGFibGVWYXJpYWJsZXMgPSBldWlUYWJsZVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIG1vYmlsZVNpemVzID0gX2V1aVRhYmxlVmFyaWFibGVzLm1vYmlsZVNpemVzO1xuXG4gIC8vIFVuc2V0cyB0aGUgZXh0cmEgc3RydXQgY2F1c2VkIGJ5IGlubGluZS1ibG9jayBkaXNwbGF5IG9mIGJ1dHRvbnMvaWNvbnMvdG9vbHRpcHMuXG4gIC8vIFdpdGhvdXQgdGhpcywgdGhlIHJvdyBoZWlnaHQganVtcHMgd2hlbmV2ZXIgYWN0aW9ucyBhcmUgZGlzYWJsZWQuXG4gIHZhciBoYXNJY29ucyA9IFwibGluZS1oZWlnaHQ6IDE7XCI7XG4gIHJldHVybiB7XG4gICAgZXVpVGFibGVSb3dDZWxsOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjs7bGFiZWw6ZXVpVGFibGVSb3dDZWxsO1wiKSxcbiAgICByb3dIZWFkZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQucmVndWxhciwgXCI7XCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCI7O2xhYmVsOnJvd0hlYWRlcjtcIiksXG4gICAgaXNFeHBhbmRlcjogLyojX19QVVJFX18qL2NzcyhoYXNJY29ucywgXCI7O2xhYmVsOmlzRXhwYW5kZXI7XCIpLFxuICAgIGhhc0FjdGlvbnM6IC8qI19fUFVSRV9fKi9jc3MoaGFzSWNvbnMsIFwiOztsYWJlbDpoYXNBY3Rpb25zO1wiKSxcbiAgICAvLyB2YWxpZ25cbiAgICBtaWRkbGU6IF9yZWY0LFxuICAgIGJhc2VsaW5lOiBfcmVmMyxcbiAgICB0b3A6IF9yZWYyLFxuICAgIGJvdHRvbTogX3JlZixcbiAgICBkZXNrdG9wOiB7XG4gICAgICBkZXNrdG9wOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2JvcmRlci12ZXJ0aWNhbCcsIGV1aVRoZW1lLmJvcmRlci50aGluKSwgXCI7O2xhYmVsOmRlc2t0b3A7XCIpLFxuICAgICAgYWN0aW9uczogLyojX19QVVJFX18qL2NzcyhcIi5ldWlCYXNpY1RhYmxlQWN0aW9uLXNob3dPbkhvdmVye29wYWNpdHk6MDtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpvcGFjaXR5IFwiLCBldWlUaGVtZS5hbmltYXRpb24ubm9ybWFsLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO319Jjpmb2N1cy13aXRoaW4sLmV1aVRhYmxlUm93LWhhc0FjdGlvbnM6aG92ZXIgJnsuZXVpQmFzaWNUYWJsZUFjdGlvbi1zaG93T25Ib3ZlcntvcGFjaXR5OjE7fX07bGFiZWw6YWN0aW9ucztcIilcbiAgICB9LFxuICAgIG1vYmlsZToge1xuICAgICAgbW9iaWxlOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsICc1MCUnKSwgXCI7O2xhYmVsOm1vYmlsZTtcIiksXG4gICAgICBlbmxhcmdlOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7O2xhYmVsOmVubGFyZ2U7XCIpLFxuICAgICAgcmlnaHRDb2x1bW5Db250ZW50OiBcIlxcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ3JpZ2h0JywgMCksIFwiXFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsICcwJyksIFwiXFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgbW9iaWxlU2l6ZXMuYWN0aW9ucy53aWR0aCksIFwiXFxuICAgICAgXCIpLFxuICAgICAgZ2V0IGFjdGlvbnMoKSB7XG4gICAgICAgIC8vIE5vdGU6IFZpc2libGUtb24taG92ZXIgYWN0aW9ucyBvbiBkZXNrdG9wIGFsd2F5cyBzaG93IG9uIG1vYmlsZVxuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL2Nzcyh0aGlzLnJpZ2h0Q29sdW1uQ29udGVudCwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3RvcCcsIG1vYmlsZVNpemVzLmFjdGlvbnMub2Zmc2V0KSwgXCI7O2xhYmVsOmFjdGlvbnM7XCIpO1xuICAgICAgfSxcbiAgICAgIGdldCBleHBhbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jc3ModGhpcy5yaWdodENvbHVtbkNvbnRlbnQsIFwiIFwiLCBsb2dpY2FsQ1NTKCdib3R0b20nLCBtb2JpbGVTaXplcy5hY3Rpb25zLm9mZnNldCksIFwiOztsYWJlbDpleHBhbmRlcjtcIik7XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBDdXN0b20gYWN0aW9ucyBtYXkgbm90IGJlIGljb25zIGFuZCB0aGVyZWZvcmUgbWF5IG5vdCBmaXQgaW4gYSBjb2x1bW5cbiAgICAgICAqIElmIHRoZXkncmUgdGhlIGxhc3QgY2VsbCwgd2UgY2FuIGNyZWF0ZSBhIHBzZXVkbyBcInJvd1wiL1wiYm9yZGVyLXRvcFwiXG4gICAgICAgKiB0aGF0IG1pbWlja3MgdGhlIHZpc3VhbCBzZXBhcmF0aW9uIHRoYXQgdGhlIHJpZ2h0IGNvbHVtbiBoYXNcbiAgICAgICAqL1xuICAgICAgY3VzdG9tQWN0aW9uczogLyojX19QVVJFX18qL2NzcyhcIiY6bGFzdC1jaGlsZHtcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiAmOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygnaG9yaXpvbnRhbCcsIDApLCBcIiBcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4pLCBcIiBiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUaGVtZS5ib3JkZXIuY29sb3IsIFwiO30uZXVpVGFibGVDZWxsQ29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZTtcIiwgbG9naWNhbENTUygndG9wJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiO319O2xhYmVsOmN1c3RvbUFjdGlvbnM7XCIpXG4gICAgfSxcbiAgICBldWlUYWJsZVJvd0NlbGxfX21vYmlsZUhlYWRlcjogLyojX19QVVJFX18qL2NzcyhldWlUZXh0VHJ1bmNhdGUoKSwgXCIgZm9udC1zaXplOlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJywge1xuICAgICAgY3VzdG9tU2NhbGU6ICd4eHMnXG4gICAgfSkuZm9udFNpemUsIFwiO2Rpc3BsYXk6YmxvY2s7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYXJrU2hhZGUsIFwiO3BhZGRpbmc6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7cGFkZGluZy1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stZW5kOi1cIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjsuZXVpVGFibGVSb3dDZWxsOm5vdCg6b25seS1jaGlsZCkgJntcIiwgbG9naWNhbENTUygnbWluLWhlaWdodCcsIGV1aVRoZW1lLnNpemUubCksIFwiO307bGFiZWw6ZXVpVGFibGVSb3dDZWxsX19tb2JpbGVIZWFkZXI7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJhcHBlbmRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUgfSBmcm9tICcuL21vYmlsZS9yZXNwb25zaXZlX2NvbnRleHQnO1xuaW1wb3J0IHsgZXVpVGFibGVDZWxsQ2hlY2tib3hTdHlsZXMgfSBmcm9tICcuL3RhYmxlX2NlbGxzX3NoYXJlZC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVSb3dDZWxsQ2hlY2tib3ggPSBmdW5jdGlvbiBFdWlUYWJsZVJvd0NlbGxDaGVja2JveChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgYXBwZW5kID0gX3JlZi5hcHBlbmQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNSZXNwb25zaXZlID0gdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUoKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYmxlQ2VsbENoZWNrYm94U3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGFibGVSb3dDZWxsQ2hlY2tib3gsIGlzUmVzcG9uc2l2ZSA/IHN0eWxlcy5tb2JpbGUgOiBzdHlsZXMuZGVza3RvcF07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVSb3dDZWxsQ2hlY2tib3gnLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRkXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNlbGxDb250ZW50XCJcbiAgfSwgY2hpbGRyZW4pLCBhcHBlbmQpO1xufTtcbkV1aVRhYmxlUm93Q2VsbENoZWNrYm94LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGFwcGVuZDogUHJvcFR5cGVzLm5vZGVcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJsb2FkaW5nXCIsIFwiaXRlbXNcIiwgXCJpdGVtSWRcIiwgXCJjb2x1bW5zXCIsIFwicGFnaW5hdGlvblwiLCBcInNvcnRpbmdcIiwgXCJzZWxlY3Rpb25cIiwgXCJvbkNoYW5nZVwiLCBcImVycm9yXCIsIFwibm9JdGVtc01lc3NhZ2VcIiwgXCJjb21wcmVzc2VkXCIsIFwiaXRlbUlkVG9FeHBhbmRlZFJvd01hcFwiLCBcInJlc3BvbnNpdmVCcmVha3BvaW50XCIsIFwicm93UHJvcHNcIiwgXCJjZWxsUHJvcHNcIiwgXCJ0YWJsZUNhcHRpb25cIiwgXCJyb3dIZWFkZXJcIiwgXCJ0YWJsZUxheW91dFwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImFsaWduXCIsIFwicmVuZGVyXCIsIFwiZGF0YVR5cGVcIiwgXCJpc0V4cGFuZGVyXCIsIFwidGV4dE9ubHlcIiwgXCJuYW1lXCIsIFwiZmllbGRcIiwgXCJkZXNjcmlwdGlvblwiLCBcInNvcnRhYmxlXCIsIFwiZm9vdGVyXCIsIFwibW9iaWxlT3B0aW9uc1wiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGZvcm1hdEF1dG8sIGZvcm1hdEJvb2xlYW4sIGZvcm1hdERhdGUsIGZvcm1hdE51bWJlciwgZm9ybWF0VGV4dCwgTEVGVF9BTElHTk1FTlQsIFJJR0hUX0FMSUdOTUVOVCwgU29ydERpcmVjdGlvbiwgUmVuZGVyV2l0aEV1aVRoZW1lLCBPdmVycmlkZUNvcGllZFRhYnVsYXJDb250ZW50LCB0YWJ1bGFyQ29weU1hcmtlcnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IGdldCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29iamVjdHMnO1xuaW1wb3J0IHsgRXVpQ2hlY2tib3ggfSBmcm9tICcuLi9mb3JtJztcbmltcG9ydCB7IEV1aUNvbXBvbmVudERlZmF1bHRzQ29udGV4dCB9IGZyb20gJy4uL3Byb3ZpZGVyL2NvbXBvbmVudF9kZWZhdWx0cyc7XG5pbXBvcnQgeyBldWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cyB9IGZyb20gJy4uL3RhYmxlL3RhYmxlX3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgRXVpVGFibGUsIEV1aVRhYmxlQm9keSwgRXVpVGFibGVGb290ZXIsIEV1aVRhYmxlRm9vdGVyQ2VsbCwgRXVpVGFibGVIZWFkZXIsIEV1aVRhYmxlSGVhZGVyQ2VsbCwgRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3gsIEV1aVRhYmxlSGVhZGVyTW9iaWxlLCBFdWlUYWJsZVJvdywgRXVpVGFibGVSb3dDZWxsLCBFdWlUYWJsZVJvd0NlbGxDaGVja2JveCwgRXVpVGFibGVTb3J0TW9iaWxlIH0gZnJvbSAnLi4vdGFibGUnO1xuaW1wb3J0IHsgZXVpVGFibGVDYXB0aW9uU3R5bGVzIH0gZnJvbSAnLi4vdGFibGUvdGFibGUuc3R5bGVzJztcbmltcG9ydCB7IENvbGxhcHNlZEl0ZW1BY3Rpb25zIH0gZnJvbSAnLi9jb2xsYXBzZWRfaXRlbV9hY3Rpb25zJztcbmltcG9ydCB7IEV4cGFuZGVkSXRlbUFjdGlvbnMgfSBmcm9tICcuL2V4cGFuZGVkX2l0ZW1fYWN0aW9ucyc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQmFyIH0gZnJvbSAnLi9wYWdpbmF0aW9uX2Jhcic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlEZWxheVJlbmRlciB9IGZyb20gJy4uL2RlbGF5X3JlbmRlcic7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGV1aUJhc2ljVGFibGVCb2R5TG9hZGluZywgc2FmYXJpTG9hZGluZ1dvcmthcm91bmQgfSBmcm9tICcuL2Jhc2ljX3RhYmxlLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGRhdGFUeXBlc1Byb2ZpbGVzID0ge1xuICBhdXRvOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0QXV0byh2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBzdHJpbmc6IHtcbiAgICBhbGlnbjogTEVGVF9BTElHTk1FTlQsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXRUZXh0KHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIG51bWJlcjoge1xuICAgIGFsaWduOiBSSUdIVF9BTElHTk1FTlQsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXROdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgYm9vbGVhbjoge1xuICAgIGFsaWduOiBMRUZUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEJvb2xlYW4odmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgZGF0ZToge1xuICAgIGFsaWduOiBMRUZUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUpO1xuICAgIH1cbiAgfVxufTtcbnZhciBEQVRBX1RZUEVTID0gT2JqZWN0LmtleXMoZGF0YVR5cGVzUHJvZmlsZXMpO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChpdGVtLCBpdGVtSWQpIHtcbiAgaWYgKGl0ZW1JZCkge1xuICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1JZCkpIHtcbiAgICAgIHJldHVybiBpdGVtSWQoaXRlbSk7XG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmUgbmV2ZXIgbWluZCBhYm91dCB0aGUgaW5kZXggc2lnbmF0dXJlXG4gICAgcmV0dXJuIGl0ZW1baXRlbUlkXTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0Um93UHJvcHMoaXRlbSwgcm93UHJvcHMpIHtcbiAgaWYgKHJvd1Byb3BzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24ocm93UHJvcHMpKSB7XG4gICAgICByZXR1cm4gcm93UHJvcHMoaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByb3dQcm9wcztcbiAgfVxuICByZXR1cm4ge307XG59XG5mdW5jdGlvbiBnZXRDZWxsUHJvcHMoaXRlbSwgY29sdW1uLCBjZWxsUHJvcHMpIHtcbiAgaWYgKGNlbGxQcm9wcykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNlbGxQcm9wcykpIHtcbiAgICAgIHJldHVybiBjZWxsUHJvcHMoaXRlbSwgY29sdW1uKTtcbiAgICB9XG4gICAgcmV0dXJuIGNlbGxQcm9wcztcbiAgfVxuICByZXR1cm4ge307XG59XG5mdW5jdGlvbiBnZXRDb2x1bW5Gb290ZXIoY29sdW1uLCBfcmVmKSB7XG4gIHZhciBpdGVtcyA9IF9yZWYuaXRlbXMsXG4gICAgcGFnaW5hdGlvbiA9IF9yZWYucGFnaW5hdGlvbjtcbiAgdmFyIF9yZWYyID0gY29sdW1uLFxuICAgIGZvb3RlciA9IF9yZWYyLmZvb3RlcjtcbiAgaWYgKGZvb3Rlcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZvb3RlcikpIHtcbiAgICAgIHJldHVybiBmb290ZXIoe1xuICAgICAgICBpdGVtczogaXRlbXMsXG4gICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZm9vdGVyO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBoYXNQYWdpbmF0aW9uKHgpIHtcbiAgcmV0dXJuIHguaGFzT3duUHJvcGVydHkoJ3BhZ2luYXRpb24nKSAmJiAhIXgucGFnaW5hdGlvbjtcbn1cbmV4cG9ydCB2YXIgRXVpQmFzaWNUYWJsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlCYXNpY1RhYmxlKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlCYXNpY1RhYmxlKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpQmFzaWNUYWJsZSwgW3Byb3BzXSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRhYmxlSWRcIiwgaHRtbElkR2VuZXJhdG9yKCdfX3RhYmxlJykoKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNlbGVjdEFsbElkR2VuZXJhdG9yXCIsIGh0bWxJZEdlbmVyYXRvcignX3NlbGVjdGlvbl9jb2x1bW4tY2hlY2tib3gnKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlbmRlclNlbGVjdEFsbFwiLCBmdW5jdGlvbiAoaXNNb2JpbGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzLml0ZW1zLFxuICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wcy5zZWxlY3Rpb247XG4gICAgICBpZiAoIXNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgc2VsZWN0YWJsZUl0ZW1zID0gaXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiAhc2VsZWN0aW9uLnNlbGVjdGFibGUgfHwgc2VsZWN0aW9uLnNlbGVjdGFibGUoaXRlbSk7XG4gICAgICB9KTtcbiAgICAgIHZhciBjaGVja2VkID0gX3RoaXMuc3RhdGUuc2VsZWN0aW9uICYmIHNlbGVjdGFibGVJdGVtcy5sZW5ndGggPiAwICYmIF90aGlzLnN0YXRlLnNlbGVjdGlvbi5sZW5ndGggPT09IHNlbGVjdGFibGVJdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgaW5kZXRlcm1pbmF0ZSA9ICFjaGVja2VkICYmIF90aGlzLnN0YXRlLnNlbGVjdGlvbiAmJiBzZWxlY3RhYmxlSXRlbXMubGVuZ3RoID4gMCAmJiBfdGhpcy5zdGF0ZS5zZWxlY3Rpb24ubGVuZ3RoID4gMDtcbiAgICAgIHZhciBkaXNhYmxlZCA9IHNlbGVjdGFibGVJdGVtcy5sZW5ndGggPT09IDA7XG4gICAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiBvbkNoYW5nZShldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQgJiYgIWluZGV0ZXJtaW5hdGUpIHtcbiAgICAgICAgICBfdGhpcy5jaGFuZ2VTZWxlY3Rpb24oc2VsZWN0YWJsZUl0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpcy5jaGFuZ2VTZWxlY3Rpb24oW10pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbnM6IFsnZXVpQmFzaWNUYWJsZS5zZWxlY3RBbGxSb3dzJywgJ2V1aUJhc2ljVGFibGUuZGVzZWxlY3RSb3dzJ10sXG4gICAgICAgIGRlZmF1bHRzOiBbJ1NlbGVjdCBhbGwgcm93cycsICdEZXNlbGVjdCByb3dzJ11cbiAgICAgIH0sIGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgICAgICAgc2VsZWN0QWxsUm93cyA9IF9yZWY0WzBdLFxuICAgICAgICAgIGRlc2VsZWN0Um93cyA9IF9yZWY0WzFdO1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDaGVja2JveCwge1xuICAgICAgICAgIGlkOiBfdGhpcy5zZWxlY3RBbGxJZEdlbmVyYXRvcigpLFxuICAgICAgICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgICAgICAgaW5kZXRlcm1pbmF0ZTogaW5kZXRlcm1pbmF0ZSxcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjaGVja2JveFNlbGVjdEFsbFwiLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBjaGVja2VkIHx8IGluZGV0ZXJtaW5hdGUgPyBkZXNlbGVjdFJvd3MgOiBzZWxlY3RBbGxSb3dzLFxuICAgICAgICAgIHRpdGxlOiBjaGVja2VkIHx8IGluZGV0ZXJtaW5hdGUgPyBkZXNlbGVjdFJvd3MgOiBzZWxlY3RBbGxSb3dzLFxuICAgICAgICAgIGxhYmVsOiBpc01vYmlsZSA/IHNlbGVjdEFsbFJvd3MgOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlbmRlckNvcHlDaGFyXCIsIGZ1bmN0aW9uIChjb2x1bW5JbmRleCkge1xuICAgICAgdmFyIGlzTGFzdENvbHVtbiA9IGNvbHVtbkluZGV4ID09PSBfdGhpcy5wcm9wcy5jb2x1bW5zLmxlbmd0aCAtIDE7XG4gICAgICByZXR1cm4gaXNMYXN0Q29sdW1uID8gdGFidWxhckNvcHlNYXJrZXJzLmhpZGRlbk5ld2xpbmUgOiB0YWJ1bGFyQ29weU1hcmtlcnMuaGlkZGVuVGFiO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZXNvbHZlQ29sdW1uU29ydERpcmVjdGlvblwiLCBmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICB2YXIgc29ydGluZyA9IF90aGlzLnByb3BzLnNvcnRpbmc7XG4gICAgICB2YXIgX3JlZjUgPSBjb2x1bW4sXG4gICAgICAgIHNvcnRhYmxlID0gX3JlZjUuc29ydGFibGUsXG4gICAgICAgIGZpZWxkID0gX3JlZjUuZmllbGQsXG4gICAgICAgIG5hbWUgPSBfcmVmNS5uYW1lO1xuICAgICAgaWYgKCFzb3J0aW5nIHx8ICFzb3J0aW5nLnNvcnQgfHwgIXNvcnRhYmxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzb3J0aW5nLnNvcnQuZmllbGQgPT09IGZpZWxkIHx8IHNvcnRpbmcuc29ydC5maWVsZCA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gc29ydGluZy5zb3J0LmRpcmVjdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVzb2x2ZUNvbHVtbk9uU29ydFwiLCBmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICB2YXIgc29ydGluZyA9IF90aGlzLnByb3BzLnNvcnRpbmc7XG4gICAgICB2YXIgX3JlZjYgPSBjb2x1bW4sXG4gICAgICAgIHNvcnRhYmxlID0gX3JlZjYuc29ydGFibGUsXG4gICAgICAgIG5hbWUgPSBfcmVmNi5uYW1lO1xuICAgICAgaWYgKCFzb3J0aW5nIHx8ICFzb3J0YWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIV90aGlzLnByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhc2ljVGFibGUgaXMgY29uZmlndXJlZCB0byBiZSBzb3J0YWJsZSBvbiBjb2x1bW4gW1wiLmNvbmNhdChuYW1lLCBcIl0gYnV0XFxuICAgICAgICAgIFtvbkNoYW5nZV0gaXMgbm90IGNvbmZpZ3VyZWQuIFRoaXMgY2FsbGJhY2sgbXVzdCBiZSBpbXBsZW1lbnRlZCB0byBoYW5kbGUgdGhlIHNvcnQgcmVxdWVzdHNcIikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9uQ29sdW1uU29ydENoYW5nZShjb2x1bW4pO1xuICAgICAgfTtcbiAgICB9KTtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIC8vIHVzZWQgZm9yIGNoZWNraW5nIGlmICBpbml0aWFsIHNlbGVjdGlvbiBpcyByZW5kZXJlZFxuICAgICAgaW5pdGlhbFNlbGVjdGlvblJlbmRlcmVkOiBmYWxzZSxcbiAgICAgIHNlbGVjdGlvbjogW11cbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpQmFzaWNUYWJsZSwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpQmFzaWNUYWJsZSwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuZ2V0SW5pdGlhbFNlbGVjdGlvbigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwYWdlU2l6ZVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIF9yZWY3LCBfdGhpcyRwcm9wcyRwYWdpbmF0aW8sIF90aGlzJHByb3BzJHBhZ2luYXRpbzIsIF90aGlzJGNvbnRleHQkRXVpVGFibDtcbiAgICAgIHJldHVybiAoX3JlZjcgPSAoX3RoaXMkcHJvcHMkcGFnaW5hdGlvID0gKF90aGlzJHByb3BzJHBhZ2luYXRpbzIgPSB0aGlzLnByb3BzLnBhZ2luYXRpb24pID09PSBudWxsIHx8IF90aGlzJHByb3BzJHBhZ2luYXRpbzIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJHBhZ2luYXRpbzIucGFnZVNpemUpICE9PSBudWxsICYmIF90aGlzJHByb3BzJHBhZ2luYXRpbyAhPT0gdm9pZCAwID8gX3RoaXMkcHJvcHMkcGFnaW5hdGlvIDogKF90aGlzJGNvbnRleHQkRXVpVGFibCA9IHRoaXMuY29udGV4dC5FdWlUYWJsZVBhZ2luYXRpb24pID09PSBudWxsIHx8IF90aGlzJGNvbnRleHQkRXVpVGFibCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkY29udGV4dCRFdWlUYWJsLml0ZW1zUGVyUGFnZSkgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMuaXRlbXNQZXJQYWdlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc1NlbGVjdGlvbkNvbnRyb2xsZWRcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRzZWxlY3Rpb247XG4gICAgICByZXR1cm4gISEoKF90aGlzJHByb3BzJHNlbGVjdGlvbiA9IHRoaXMucHJvcHMuc2VsZWN0aW9uKSAhPT0gbnVsbCAmJiBfdGhpcyRwcm9wcyRzZWxlY3Rpb24gIT09IHZvaWQgMCAmJiBfdGhpcyRwcm9wcyRzZWxlY3Rpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRJbml0aWFsU2VsZWN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEluaXRpYWxTZWxlY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5pc1NlbGVjdGlvbkNvbnRyb2xsZWQpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdGlvbiAmJiB0aGlzLnByb3BzLnNlbGVjdGlvbi5pbml0aWFsU2VsZWN0ZWQgJiYgIXRoaXMuc3RhdGUuaW5pdGlhbFNlbGVjdGlvblJlbmRlcmVkICYmIHRoaXMucHJvcHMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzZWxlY3Rpb246IHRoaXMucHJvcHMuc2VsZWN0aW9uLmluaXRpYWxTZWxlY3RlZCxcbiAgICAgICAgICBpbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImJ1aWxkQ3JpdGVyaWFcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRDcml0ZXJpYShwcm9wcykge1xuICAgICAgdmFyIGNyaXRlcmlhID0ge307XG4gICAgICBpZiAoaGFzUGFnaW5hdGlvbihwcm9wcykpIHtcbiAgICAgICAgY3JpdGVyaWEucGFnZSA9IHtcbiAgICAgICAgICBpbmRleDogcHJvcHMucGFnaW5hdGlvbi5wYWdlSW5kZXgsXG4gICAgICAgICAgc2l6ZTogdGhpcy5wYWdlU2l6ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnNvcnRpbmcpIHtcbiAgICAgICAgY3JpdGVyaWEuc29ydCA9IHByb3BzLnNvcnRpbmcuc29ydDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcml0ZXJpYTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2hhbmdlU2VsZWN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNoYW5nZVNlbGVjdGlvbihjaGFuZ2VkU2VsZWN0aW9uKSB7XG4gICAgICB2YXIgX3NlbGVjdGlvbiRvblNlbGVjdGlvO1xuICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMucHJvcHMuc2VsZWN0aW9uO1xuICAgICAgaWYgKCFzZWxlY3Rpb24pIHJldHVybjtcbiAgICAgIChfc2VsZWN0aW9uJG9uU2VsZWN0aW8gPSBzZWxlY3Rpb24ub25TZWxlY3Rpb25DaGFuZ2UpID09PSBudWxsIHx8IF9zZWxlY3Rpb24kb25TZWxlY3RpbyA9PT0gdm9pZCAwIHx8IF9zZWxlY3Rpb24kb25TZWxlY3Rpby5jYWxsKHNlbGVjdGlvbiwgY2hhbmdlZFNlbGVjdGlvbik7XG4gICAgICBpZiAoIXRoaXMuaXNTZWxlY3Rpb25Db250cm9sbGVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHNlbGVjdGlvbjogY2hhbmdlZFNlbGVjdGlvblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2xlYXJTZWxlY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbihbXSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uUGFnZVNpemVDaGFuZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25QYWdlU2l6ZUNoYW5nZShzaXplKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB2YXIgY3VycmVudENyaXRlcmlhID0gdGhpcy5idWlsZENyaXRlcmlhKHRoaXMucHJvcHMpO1xuICAgICAgdmFyIGNyaXRlcmlhID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjdXJyZW50Q3JpdGVyaWEpLCB7fSwge1xuICAgICAgICBwYWdlOiB7XG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgLy8gd2hlbiBwYWdlIHNpemUgY2hhbmdlcywgd2UgdGFrZSB0aGUgdXNlciBiYWNrIHRvIHRoZSBmaXJzdCBwYWdlXG4gICAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoY3JpdGVyaWEpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvblBhZ2VDaGFuZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25QYWdlQ2hhbmdlKGluZGV4KSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB2YXIgY3VycmVudENyaXRlcmlhID0gdGhpcy5idWlsZENyaXRlcmlhKHRoaXMucHJvcHMpO1xuICAgICAgdmFyIGNyaXRlcmlhID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjdXJyZW50Q3JpdGVyaWEpLCB7fSwge1xuICAgICAgICBwYWdlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGN1cnJlbnRDcml0ZXJpYS5wYWdlKSwge30sIHtcbiAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShjcml0ZXJpYSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ29sdW1uU29ydENoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNvbHVtblNvcnRDaGFuZ2UoY29sdW1uKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB2YXIgY3VycmVudENyaXRlcmlhID0gdGhpcy5idWlsZENyaXRlcmlhKHRoaXMucHJvcHMpO1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IFNvcnREaXJlY3Rpb24uQVNDO1xuICAgICAgaWYgKGN1cnJlbnRDcml0ZXJpYSAmJiBjdXJyZW50Q3JpdGVyaWEuc29ydCAmJiAoY3VycmVudENyaXRlcmlhLnNvcnQuZmllbGQgPT09IGNvbHVtbi5maWVsZCB8fCBjdXJyZW50Q3JpdGVyaWEuc29ydC5maWVsZCA9PT0gY29sdW1uLm5hbWUpKSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IFNvcnREaXJlY3Rpb24ucmV2ZXJzZShjdXJyZW50Q3JpdGVyaWEuc29ydC5kaXJlY3Rpb24pO1xuICAgICAgfVxuICAgICAgdmFyIGNyaXRlcmlhID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjdXJyZW50Q3JpdGVyaWEpLCB7fSwge1xuICAgICAgICAvLyByZXNldHRpbmcgdGhlIHBhZ2UgaWYgdGhlIGNyaXRlcmlhIGhhcyBvbmVcbiAgICAgICAgcGFnZTogIWN1cnJlbnRDcml0ZXJpYS5wYWdlID8gdW5kZWZpbmVkIDoge1xuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHNpemU6IGN1cnJlbnRDcml0ZXJpYS5wYWdlLnNpemVcbiAgICAgICAgfSxcbiAgICAgICAgc29ydDoge1xuICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQgfHwgY29sdW1uLm5hbWUsXG4gICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb25cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGNvbXBsZXggcmVsYXRpb25zaGlwIGJldHdlZW4gcGFnaW5hdGlvbidzIGV4aXN0ZW5jZSBhbmQgY3JpdGVyaWEsIHRoZSBjb2RlIGxvZ2ljIGVuc3VyZXMgdGhpcyBpcyBjb3JyZWN0bHkgbWFpbnRhaW5lZFxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGNyaXRlcmlhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBsb2FkaW5nID0gX3RoaXMkcHJvcHMyLmxvYWRpbmcsXG4gICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMyLml0ZW1zLFxuICAgICAgICBpdGVtSWQgPSBfdGhpcyRwcm9wczIuaXRlbUlkLFxuICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHMyLmNvbHVtbnMsXG4gICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczIucGFnaW5hdGlvbixcbiAgICAgICAgc29ydGluZyA9IF90aGlzJHByb3BzMi5zb3J0aW5nLFxuICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczIuc2VsZWN0aW9uLFxuICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMi5vbkNoYW5nZSxcbiAgICAgICAgZXJyb3IgPSBfdGhpcyRwcm9wczIuZXJyb3IsXG4gICAgICAgIG5vSXRlbXNNZXNzYWdlID0gX3RoaXMkcHJvcHMyLm5vSXRlbXNNZXNzYWdlLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMyLmNvbXByZXNzZWQsXG4gICAgICAgIGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXAgPSBfdGhpcyRwcm9wczIuaXRlbUlkVG9FeHBhbmRlZFJvd01hcCxcbiAgICAgICAgcmVzcG9uc2l2ZUJyZWFrcG9pbnQgPSBfdGhpcyRwcm9wczIucmVzcG9uc2l2ZUJyZWFrcG9pbnQsXG4gICAgICAgIHJvd1Byb3BzID0gX3RoaXMkcHJvcHMyLnJvd1Byb3BzLFxuICAgICAgICBjZWxsUHJvcHMgPSBfdGhpcyRwcm9wczIuY2VsbFByb3BzLFxuICAgICAgICB0YWJsZUNhcHRpb24gPSBfdGhpcyRwcm9wczIudGFibGVDYXB0aW9uLFxuICAgICAgICByb3dIZWFkZXIgPSBfdGhpcyRwcm9wczIucm93SGVhZGVyLFxuICAgICAgICB0YWJsZUxheW91dCA9IF90aGlzJHByb3BzMi50YWJsZUxheW91dCxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJhc2ljVGFibGUnLCB7XG4gICAgICAgICdldWlCYXNpY1RhYmxlLWxvYWRpbmcnOiBsb2FkaW5nXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIHRhYmxlID0gdGhpcy5yZW5kZXJUYWJsZSgpO1xuICAgICAgdmFyIHBhZ2luYXRpb25CYXIgPSB0aGlzLnJlbmRlclBhZ2luYXRpb25CYXIoKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICB9LCByZXN0KSwgdGFibGUsIHBhZ2luYXRpb25CYXIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMzLmNvbXByZXNzZWQsXG4gICAgICAgIHJlc3BvbnNpdmVCcmVha3BvaW50ID0gX3RoaXMkcHJvcHMzLnJlc3BvbnNpdmVCcmVha3BvaW50LFxuICAgICAgICB0YWJsZUxheW91dCA9IF90aGlzJHByb3BzMy50YWJsZUxheW91dCxcbiAgICAgICAgbG9hZGluZyA9IF90aGlzJHByb3BzMy5sb2FkaW5nO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJNb2JpbGUsIHtcbiAgICAgICAgcmVzcG9uc2l2ZUJyZWFrcG9pbnQ6IHJlc3BvbnNpdmVCcmVha3BvaW50XG4gICAgICB9LCB0aGlzLnJlbmRlclNlbGVjdEFsbCh0cnVlKSwgdGhpcy5yZW5kZXJUYWJsZU1vYmlsZVNvcnQoKSksIF9fX0Vtb3Rpb25KU1goT3ZlcnJpZGVDb3BpZWRUYWJ1bGFyQ29udGVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZSwge1xuICAgICAgICBpZDogdGhpcy50YWJsZUlkLFxuICAgICAgICB0YWJsZUxheW91dDogdGFibGVMYXlvdXQsXG4gICAgICAgIHJlc3BvbnNpdmVCcmVha3BvaW50OiByZXNwb25zaXZlQnJlYWtwb2ludCxcbiAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICAgICAgY3NzOiBsb2FkaW5nICYmIHNhZmFyaUxvYWRpbmdXb3JrYXJvdW5kXG4gICAgICB9LCB0aGlzLnJlbmRlclRhYmxlQ2FwdGlvbigpLCB0aGlzLnJlbmRlclRhYmxlSGVhZCgpLCB0aGlzLnJlbmRlclRhYmxlQm9keSgpLCB0aGlzLnJlbmRlclRhYmxlRm9vdGVyKCkpKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlTW9iaWxlU29ydFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZU1vYmlsZVNvcnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHM0LmNvbHVtbnMsXG4gICAgICAgIHNvcnRpbmcgPSBfdGhpcyRwcm9wczQuc29ydGluZztcbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuICAgICAgaWYgKCFzb3J0aW5nKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGluZGV4KSB7XG4gICAgICAgIHZhciBfY29sdW1uO1xuICAgICAgICBpZiAoY29sdW1uLmZpZWxkICYmIHNvcnRpbmcuc29ydCAmJiAhIXNvcnRpbmcuZW5hYmxlQWxsQ29sdW1ucyAmJiBjb2x1bW4uc29ydGFibGUgPT0gbnVsbCkge1xuICAgICAgICAgIGNvbHVtbiA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY29sdW1uKSwge30sIHtcbiAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb2x1bW4uc29ydGFibGUgfHwgKChfY29sdW1uID0gY29sdW1uKSA9PT0gbnVsbCB8fCBfY29sdW1uID09PSB2b2lkIDAgfHwgKF9jb2x1bW4gPSBfY29sdW1uLm1vYmlsZU9wdGlvbnMpID09PSBudWxsIHx8IF9jb2x1bW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb2x1bW4uc2hvdykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzb3J0RGlyZWN0aW9uID0gX3RoaXMyLnJlc29sdmVDb2x1bW5Tb3J0RGlyZWN0aW9uKGNvbHVtbik7XG4gICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgIGtleTogXCJfZGF0YV9zX1wiLmNvbmNhdChTdHJpbmcoY29sdW1uLmZpZWxkKSwgXCJfXCIpLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgb25Tb3J0OiBfdGhpczIucmVzb2x2ZUNvbHVtbk9uU29ydChjb2x1bW4pLFxuICAgICAgICAgIGlzU29ydGVkOiAhIXNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgaXNTb3J0QXNjZW5kaW5nOiBzb3J0RGlyZWN0aW9uID8gU29ydERpcmVjdGlvbi5pc0FzYyhzb3J0RGlyZWN0aW9uKSA6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVTb3J0TW9iaWxlLCB7XG4gICAgICAgIGl0ZW1zOiBpdGVtc1xuICAgICAgfSkgOiBudWxsO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZUNhcHRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyVGFibGVDYXB0aW9uKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHM1Lml0ZW1zLFxuICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHM1LnBhZ2luYXRpb24sXG4gICAgICAgIHRhYmxlQ2FwdGlvbiA9IF90aGlzJHByb3BzNS50YWJsZUNhcHRpb247XG4gICAgICB2YXIgaXRlbUNvdW50ID0gaXRlbXMubGVuZ3RoO1xuICAgICAgdmFyIHRvdGFsSXRlbUNvdW50ID0gcGFnaW5hdGlvbiA/IHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgOiBpdGVtQ291bnQ7XG4gICAgICB2YXIgcGFnZSA9IHBhZ2luYXRpb24gPyBwYWdpbmF0aW9uLnBhZ2VJbmRleCArIDEgOiAxO1xuICAgICAgdmFyIHBhZ2VDb3VudCA9IHBhZ2luYXRpb24gPyBNYXRoLmNlaWwocGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCAvIHRoaXMucGFnZVNpemUpIDogMTtcbiAgICAgIHZhciBjYXB0aW9uRWxlbWVudDtcbiAgICAgIGlmICh0YWJsZUNhcHRpb24pIHtcbiAgICAgICAgaWYgKHBhZ2luYXRpb24pIHtcbiAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZUNhcHRpb25XaXRoUGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJ7dGFibGVDYXB0aW9ufTsgUGFnZSB7cGFnZX0gb2Yge3BhZ2VDb3VudH0uXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgdGFibGVDYXB0aW9uOiB0YWJsZUNhcHRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgICAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSB0YWJsZUNhcHRpb247XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICAgICAgaWYgKHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgPiAwKSB7XG4gICAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlQXV0b0NhcHRpb25XaXRoUGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93cyBvdXQgb2Yge3RvdGFsSXRlbUNvdW50fSByb3dzOyBQYWdlIHtwYWdlfSBvZiB7cGFnZUNvdW50fS5cIixcbiAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgdG90YWxJdGVtQ291bnQ6IHRvdGFsSXRlbUNvdW50LFxuICAgICAgICAgICAgICAgIGl0ZW1Db3VudDogaXRlbUNvdW50LFxuICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgICAgICAgICAgcGFnZUNvdW50OiBwYWdlQ291bnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVTaW1wbGVBdXRvQ2FwdGlvbldpdGhQYWdpbmF0aW9uXCIsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IFwiVGhpcyB0YWJsZSBjb250YWlucyB7aXRlbUNvdW50fSByb3dzOyBQYWdlIHtwYWdlfSBvZiB7cGFnZUNvdW50fS5cIixcbiAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnQsXG4gICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICAgICAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVBdXRvQ2FwdGlvbldpdGhvdXRQYWdpbmF0aW9uXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93cy5cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwiY2FwdGlvblwiLCB7XG4gICAgICAgIGNzczogZXVpVGFibGVDYXB0aW9uU3R5bGVzLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVDYXB0aW9uXCJcbiAgICAgIH0sIHRhYnVsYXJDb3B5TWFya2Vycy5oaWRkZW5Ob0NvcHlCb3VuZGFyeSwgX19fRW1vdGlvbkpTWChFdWlEZWxheVJlbmRlciwgbnVsbCwgY2FwdGlvbkVsZW1lbnQpLCB0YWJ1bGFyQ29weU1hcmtlcnMuaGlkZGVuTm9Db3B5Qm91bmRhcnkpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVIZWFkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlSGVhZCgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczYuY29sdW1ucyxcbiAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHM2LnNlbGVjdGlvbjtcbiAgICAgIHZhciBoZWFkZXJzID0gW107XG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94LCB7XG4gICAgICAgICAga2V5OiBcIl9zZWxlY3Rpb25fY29sdW1uX2hcIixcbiAgICAgICAgICBhcHBlbmQ6IHRoaXMucmVuZGVyQ29weUNoYXIoLTEpXG4gICAgICAgIH0sIHRoaXMucmVuZGVyU2VsZWN0QWxsKGZhbHNlKSkpO1xuICAgICAgfVxuICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGluZGV4KSB7XG4gICAgICAgIHZhciBfcmVmOCA9IGNvbHVtbixcbiAgICAgICAgICBmaWVsZCA9IF9yZWY4LmZpZWxkLFxuICAgICAgICAgIHdpZHRoID0gX3JlZjgud2lkdGgsXG4gICAgICAgICAgbmFtZSA9IF9yZWY4Lm5hbWUsXG4gICAgICAgICAgYWxpZ24gPSBfcmVmOC5hbGlnbixcbiAgICAgICAgICBkYXRhVHlwZSA9IF9yZWY4LmRhdGFUeXBlLFxuICAgICAgICAgIHNvcnRhYmxlID0gX3JlZjguc29ydGFibGUsXG4gICAgICAgICAgbW9iaWxlT3B0aW9ucyA9IF9yZWY4Lm1vYmlsZU9wdGlvbnMsXG4gICAgICAgICAgcmVhZE9ubHkgPSBfcmVmOC5yZWFkT25seSxcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IF9yZWY4LmRlc2NyaXB0aW9uO1xuICAgICAgICB2YXIgY29sdW1uQWxpZ24gPSBhbGlnbiB8fCBfdGhpczMuZ2V0QWxpZ25Gb3JEYXRhVHlwZShkYXRhVHlwZSk7XG4gICAgICAgIHZhciBzaGFyZWRQcm9wcyA9IHtcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgICAgICAgIG1vYmlsZU9wdGlvbnM6IG1vYmlsZU9wdGlvbnMsXG4gICAgICAgICAgYWxpZ246IGNvbHVtbkFsaWduLFxuICAgICAgICAgIGFwcGVuZDogX3RoaXMzLnJlbmRlckNvcHlDaGFyKGluZGV4KVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFjdGlvbnMgY29sdW1uXG4gICAgICAgIGlmIChjb2x1bW4uYWN0aW9ucykge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbCwgX2V4dGVuZHMoe30sIHNoYXJlZFByb3BzLCB7XG4gICAgICAgICAgICBrZXk6IFwiX2FjdGlvbnNfaF9cIi5jb25jYXQoaW5kZXgpLFxuICAgICAgICAgICAgYWxpZ246IFwicmlnaHRcIlxuICAgICAgICAgIH0pLCBuYW1lKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29tcHV0ZWQgY29sdW1uXG4gICAgICAgIGlmICghY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgdmFyIF9zb3J0aW5nID0ge307XG4gICAgICAgICAgLy8gY29tcHV0ZWQgY29sdW1ucyBhcmUgb25seSBzb3J0YWJsZSBpZiB0aGVpciBgc29ydGFibGVgIGlzIGEgZnVuY3Rpb25cbiAgICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcgJiYgdHlwZW9mIHNvcnRhYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgc29ydERpcmVjdGlvbiA9IF90aGlzMy5yZXNvbHZlQ29sdW1uU29ydERpcmVjdGlvbihjb2x1bW4pO1xuICAgICAgICAgICAgX3NvcnRpbmcuaXNTb3J0ZWQgPSAhIXNvcnREaXJlY3Rpb247XG4gICAgICAgICAgICBfc29ydGluZy5pc1NvcnRBc2NlbmRpbmcgPSBzb3J0RGlyZWN0aW9uID8gU29ydERpcmVjdGlvbi5pc0FzYyhzb3J0RGlyZWN0aW9uKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIF9zb3J0aW5nLm9uU29ydCA9IF90aGlzMy5yZXNvbHZlQ29sdW1uT25Tb3J0KGNvbHVtbik7XG4gICAgICAgICAgICBfc29ydGluZy5yZWFkT25seSA9IF90aGlzMy5wcm9wcy5zb3J0aW5nLnJlYWRPbmx5IHx8IHJlYWRPbmx5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBoZWFkZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlckNlbGwsIF9leHRlbmRzKHt9LCBzaGFyZWRQcm9wcywge1xuICAgICAgICAgICAga2V5OiBcIl9jb21wdXRlZF9jb2x1bW5faF9cIi5jb25jYXQoaW5kZXgpLFxuICAgICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyQ2VsbF9cIi5jb25jYXQodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnID8gbmFtZSA6ICcnLCBcIl9cIikuY29uY2F0KGluZGV4KVxuICAgICAgICAgIH0sIF9zb3J0aW5nKSwgbmFtZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZpZWxkIGRhdGEgY29sdW1uXG4gICAgICAgIHZhciBzb3J0aW5nID0ge307XG4gICAgICAgIGlmIChfdGhpczMucHJvcHMuc29ydGluZykge1xuICAgICAgICAgIGlmIChfdGhpczMucHJvcHMuc29ydGluZy5zb3J0ICYmICEhX3RoaXMzLnByb3BzLnNvcnRpbmcuZW5hYmxlQWxsQ29sdW1ucyAmJiBjb2x1bW4uc29ydGFibGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29sdW1uID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb2x1bW4pLCB7fSwge1xuICAgICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBfcmVmOSA9IGNvbHVtbixcbiAgICAgICAgICAgIF9zb3J0YWJsZSA9IF9yZWY5LnNvcnRhYmxlO1xuICAgICAgICAgIGlmIChfc29ydGFibGUpIHtcbiAgICAgICAgICAgIHZhciBfc29ydERpcmVjdGlvbiA9IF90aGlzMy5yZXNvbHZlQ29sdW1uU29ydERpcmVjdGlvbihjb2x1bW4pO1xuICAgICAgICAgICAgc29ydGluZy5pc1NvcnRlZCA9ICEhX3NvcnREaXJlY3Rpb247XG4gICAgICAgICAgICBzb3J0aW5nLmlzU29ydEFzY2VuZGluZyA9IF9zb3J0RGlyZWN0aW9uID8gU29ydERpcmVjdGlvbi5pc0FzYyhfc29ydERpcmVjdGlvbikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBzb3J0aW5nLm9uU29ydCA9IF90aGlzMy5yZXNvbHZlQ29sdW1uT25Tb3J0KGNvbHVtbik7XG4gICAgICAgICAgICBzb3J0aW5nLnJlYWRPbmx5ID0gX3RoaXMzLnByb3BzLnNvcnRpbmcucmVhZE9ubHkgfHwgcmVhZE9ubHk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbCwgX2V4dGVuZHMoe30sIHNoYXJlZFByb3BzLCB7XG4gICAgICAgICAga2V5OiBcIl9kYXRhX2hfXCIuY29uY2F0KFN0cmluZyhmaWVsZCksIFwiX1wiKS5jb25jYXQoaW5kZXgpLFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0YWJsZUhlYWRlckNlbGxfXCIuY29uY2F0KFN0cmluZyhmaWVsZCksIFwiX1wiKS5jb25jYXQoaW5kZXgpXG4gICAgICAgIH0sIHNvcnRpbmcpLCBuYW1lKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyLCBudWxsLCBoZWFkZXJzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVGb290ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyVGFibGVGb290ZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wczcuaXRlbXMsXG4gICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczcuY29sdW1ucyxcbiAgICAgICAgcGFnaW5hdGlvbiA9IF90aGlzJHByb3BzNy5wYWdpbmF0aW9uLFxuICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczcuc2VsZWN0aW9uO1xuICAgICAgdmFyIGZvb3RlcnMgPSBbXTtcbiAgICAgIHZhciBoYXNEZWZpbmVkRm9vdGVyID0gZmFsc2U7XG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhbiBlbXB0eSBjZWxsIHRvIGNvbXBlbnNhdGUgZm9yIGFkZGl0aW9uYWwgc2VsZWN0aW9uIGNvbHVtblxuICAgICAgICBmb290ZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlckNlbGwsIHtcbiAgICAgICAgICBrZXk6IFwiX3NlbGVjdGlvbl9jb2x1bW5fZlwiXG4gICAgICAgIH0sIHVuZGVmaW5lZCkpO1xuICAgICAgfVxuICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgdmFyIGZvb3RlciA9IGdldENvbHVtbkZvb3Rlcihjb2x1bW4sIHtcbiAgICAgICAgICBpdGVtczogaXRlbXMsXG4gICAgICAgICAgcGFnaW5hdGlvbjogcGFnaW5hdGlvblxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIF9yZWYxMCA9IGNvbHVtbixcbiAgICAgICAgICBtb2JpbGVPcHRpb25zID0gX3JlZjEwLm1vYmlsZU9wdGlvbnMsXG4gICAgICAgICAgZmllbGQgPSBfcmVmMTAuZmllbGQsXG4gICAgICAgICAgYWxpZ24gPSBfcmVmMTAuYWxpZ247XG4gICAgICAgIGlmIChtb2JpbGVPcHRpb25zICE9PSBudWxsICYmIG1vYmlsZU9wdGlvbnMgIT09IHZvaWQgMCAmJiBtb2JpbGVPcHRpb25zLm9ubHkpIHtcbiAgICAgICAgICByZXR1cm47IC8vIGV4Y2x1ZGUgY29sdW1ucyB0aGF0IG9ubHkgZXhpc3QgZm9yIG1vYmlsZSBoZWFkZXJzXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvb3Rlcikge1xuICAgICAgICAgIGZvb3RlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlRm9vdGVyQ2VsbCwge1xuICAgICAgICAgICAga2V5OiBcImZvb3Rlcl9cIi5jb25jYXQoU3RyaW5nKGZpZWxkKSwgXCJfXCIpLmNvbmNhdChmb290ZXJzLmxlbmd0aCAtIDEpLFxuICAgICAgICAgICAgYWxpZ246IGFsaWduXG4gICAgICAgICAgfSwgZm9vdGVyKSk7XG4gICAgICAgICAgaGFzRGVmaW5lZEZvb3RlciA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRm9vdGVyIGlzIHVuZGVmaW5lZCwgc28gY3JlYXRlIGFuIGVtcHR5IGNlbGwgdG8gcHJlc2VydmUgbGF5b3V0XG4gICAgICAgICAgZm9vdGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVGb290ZXJDZWxsLCB7XG4gICAgICAgICAgICBrZXk6IFwiZm9vdGVyX2VtcHR5X1wiLmNvbmNhdChmb290ZXJzLmxlbmd0aCAtIDEpLFxuICAgICAgICAgICAgYWxpZ246IGFsaWduXG4gICAgICAgICAgfSwgdW5kZWZpbmVkKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZvb3RlcnMubGVuZ3RoICYmIGhhc0RlZmluZWRGb290ZXIgPyBfX19FbW90aW9uSlNYKEV1aVRhYmxlRm9vdGVyLCBudWxsLCBmb290ZXJzKSA6IG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlQm9keVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUJvZHkoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICBlcnJvciA9IF90aGlzJHByb3BzOC5lcnJvcixcbiAgICAgICAgbG9hZGluZyA9IF90aGlzJHByb3BzOC5sb2FkaW5nLFxuICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzOC5pdGVtcztcbiAgICAgIHZhciBjb250ZW50O1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNvbnRlbnQgPSB0aGlzLnJlbmRlckVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb250ZW50ID0gdGhpcy5yZW5kZXJFbXB0eU1lc3NhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRlbnQgPSBpdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgICAgLy8gaWYgdGhlcmUncyBwYWdpbmF0aW9uIHRoZSBpdGVtJ3MgaW5kZXggbXVzdCBiZSBhZGp1c3RlZCB0byB0aGUgd2hlcmUgaXQgaXMgaW4gdGhlIHdob2xlIGRhdGFzZXRcbiAgICAgICAgICB2YXIgdGFibGVJdGVtSW5kZXggPSBoYXNQYWdpbmF0aW9uKF90aGlzNC5wcm9wcykgJiYgX3RoaXM0LnBhZ2VTaXplID4gMCA/IF90aGlzNC5wcm9wcy5wYWdpbmF0aW9uLnBhZ2VJbmRleCAqIF90aGlzNC5wYWdlU2l6ZSArIGluZGV4IDogaW5kZXg7XG4gICAgICAgICAgcmV0dXJuIF90aGlzNC5yZW5kZXJJdGVtUm93KGl0ZW0sIHRhYmxlSXRlbUluZGV4LCBpbmRleCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVuZGVyV2l0aEV1aVRoZW1lLCBudWxsLCBmdW5jdGlvbiAodGhlbWUpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVCb2R5LCB7XG4gICAgICAgICAgY3NzOiBsb2FkaW5nICYmIGV1aUJhc2ljVGFibGVCb2R5TG9hZGluZyh0aGVtZSlcbiAgICAgICAgfSwgY29udGVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRXJyb3JNZXNzYWdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckVycm9yTWVzc2FnZShlcnJvcikge1xuICAgICAgdmFyIGNvbFNwYW4gPSB0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoICsgKHRoaXMucHJvcHMuc2VsZWN0aW9uID8gMSA6IDApO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3csIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCB7XG4gICAgICAgIGFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICBjb2xTcGFuOiBjb2xTcGFuLFxuICAgICAgICBtb2JpbGVPcHRpb25zOiB7XG4gICAgICAgICAgd2lkdGg6ICcxMDAlJ1xuICAgICAgICB9XG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgdHlwZTogXCJtaW51c0luQ2lyY2xlXCIsXG4gICAgICAgIGNvbG9yOiBcImRhbmdlclwiXG4gICAgICB9KSwgXCIgXCIsIGVycm9yKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckVtcHR5TWVzc2FnZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJFbXB0eU1lc3NhZ2UoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM5ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzOS5jb2x1bW5zLFxuICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczkuc2VsZWN0aW9uLFxuICAgICAgICBub0l0ZW1zTWVzc2FnZSA9IF90aGlzJHByb3BzOS5ub0l0ZW1zTWVzc2FnZTtcbiAgICAgIHZhciBjb2xTcGFuID0gY29sdW1ucy5sZW5ndGggKyAoc2VsZWN0aW9uID8gMSA6IDApO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3csIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCB7XG4gICAgICAgIGFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICBjb2xTcGFuOiBjb2xTcGFuLFxuICAgICAgICBtb2JpbGVPcHRpb25zOiB7XG4gICAgICAgICAgd2lkdGg6ICcxMDAlJ1xuICAgICAgICB9XG4gICAgICB9LCBub0l0ZW1zTWVzc2FnZSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtUm93XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1Sb3coaXRlbSwgcm93SW5kZXgsIGRpc3BsYXllZFJvd0luZGV4KSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczEwID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzMTAuY29sdW1ucyxcbiAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHMxMC5zZWxlY3Rpb24sXG4gICAgICAgIHJvd0hlYWRlciA9IF90aGlzJHByb3BzMTAucm93SGVhZGVyLFxuICAgICAgICBpdGVtSWRUb0V4cGFuZGVkUm93TWFwID0gX3RoaXMkcHJvcHMxMC5pdGVtSWRUb0V4cGFuZGVkUm93TWFwO1xuICAgICAgdmFyIGNlbGxzID0gW107XG4gICAgICB2YXIgaXRlbUlkQ2FsbGJhY2sgPSB0aGlzLnByb3BzLml0ZW1JZDtcbiAgICAgIHZhciBpdGVtSWQgPSBnZXRJdGVtSWQoaXRlbSwgaXRlbUlkQ2FsbGJhY2spICE9IG51bGwgPyBnZXRJdGVtSWQoaXRlbSwgaXRlbUlkQ2FsbGJhY2spIDogcm93SW5kZXg7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSAhc2VsZWN0aW9uID8gZmFsc2UgOiB0aGlzLnN0YXRlLnNlbGVjdGlvbiAmJiAhIXRoaXMuc3RhdGUuc2VsZWN0aW9uLmZpbmQoZnVuY3Rpb24gKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICByZXR1cm4gZ2V0SXRlbUlkKHNlbGVjdGVkSXRlbSwgaXRlbUlkQ2FsbGJhY2spID09PSBpdGVtSWQ7XG4gICAgICB9KTtcbiAgICAgIHZhciByb3dTZWxlY3Rpb25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMkcmVuZGVySXRlbVNlbGVjID0gdGhpcy5yZW5kZXJJdGVtU2VsZWN0aW9uQ2VsbChpdGVtSWQsIGl0ZW0sIHNlbGVjdGVkLCBkaXNwbGF5ZWRSb3dJbmRleCksXG4gICAgICAgICAgX3RoaXMkcmVuZGVySXRlbVNlbGVjMiA9IF9zbGljZWRUb0FycmF5KF90aGlzJHJlbmRlckl0ZW1TZWxlYywgMiksXG4gICAgICAgICAgY2hlY2tib3hDZWxsID0gX3RoaXMkcmVuZGVySXRlbVNlbGVjMlswXSxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcmVuZGVySXRlbVNlbGVjMlsxXTtcbiAgICAgICAgY2VsbHMucHVzaChjaGVja2JveENlbGwpO1xuICAgICAgICByb3dTZWxlY3Rpb25EaXNhYmxlZCA9ICEhaXNEaXNhYmxlZDtcbiAgICAgIH1cbiAgICAgIHZhciBoYXNBY3Rpb25zID0gZmFsc2U7XG4gICAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbiwgY29sdW1uSW5kZXgpIHtcbiAgICAgICAgdmFyIGNvbHVtbkFjdGlvbnMgPSBjb2x1bW4uYWN0aW9ucztcbiAgICAgICAgaWYgKGNvbHVtbkFjdGlvbnMpIHtcbiAgICAgICAgICB2YXIgaGFzQ3VzdG9tQWN0aW9ucyA9IGNvbHVtbkFjdGlvbnMuc29tZShmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gISFhY3Rpb24ucmVuZGVyO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNlbGxzLnB1c2goX3RoaXM1LnJlbmRlckl0ZW1BY3Rpb25zQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIHJvd0luZGV4LCBoYXNDdXN0b21BY3Rpb25zKSk7XG4gICAgICAgICAgLy8gQSB0YWJsZSB0aGVvcmV0aWNhbGx5IGNvdWxkIGhhdmUgYm90aCBjdXN0b20gYW5kIGRlZmF1bHQgYWN0aW9uIGl0ZW1zXG4gICAgICAgICAgLy8gSWYgaXQgaGFzIGJvdGgsIGRlZmF1bHQgYWN0aW9uIG1vYmlsZSByb3cgc3R5bGVzIHRha2UgcHJlY2VkZW5jZSBvdmVyIGN1c3RvbVxuICAgICAgICAgIGhhc0FjdGlvbnMgPSAhaGFzQWN0aW9ucyAmJiBoYXNDdXN0b21BY3Rpb25zID8gJ2N1c3RvbScgOiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5maWVsZCkge1xuICAgICAgICAgIHZhciBmaWVsZERhdGFDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgICAgY2VsbHMucHVzaChfdGhpczUucmVuZGVySXRlbUZpZWxkRGF0YUNlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4LCBmaWVsZERhdGFDb2x1bW4uZmllbGQgPT09IHJvd0hlYWRlcikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNlbGxzLnB1c2goX3RoaXM1LnJlbmRlckl0ZW1Db21wdXRlZENlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBPY2N1cHkgZnVsbCB3aWR0aCBvZiB0YWJsZSwgdGFraW5nIGNoZWNrYm94ICYgbW9iaWxlIG9ubHkgY29sdW1ucyBpbnRvIGFjY291bnQuXG4gICAgICB2YXIgZXhwYW5kZWRSb3dDb2xTcGFuID0gc2VsZWN0aW9uID8gY29sdW1ucy5sZW5ndGggKyAxIDogY29sdW1ucy5sZW5ndGg7XG4gICAgICB2YXIgbW9iaWxlT25seUNvbHMgPSBjb2x1bW5zLnJlZHVjZShmdW5jdGlvbiAobnVtLCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIF9tb2JpbGVPcHRpb25zO1xuICAgICAgICByZXR1cm4gY29sdW1uICE9PSBudWxsICYmIGNvbHVtbiAhPT0gdm9pZCAwICYmIChfbW9iaWxlT3B0aW9ucyA9IGNvbHVtbi5tb2JpbGVPcHRpb25zKSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyAhPT0gdm9pZCAwICYmIF9tb2JpbGVPcHRpb25zLm9ubHkgPyBudW0gKyAxIDogbnVtICsgMDsgLy8gQldDIG9ubHlcbiAgICAgIH0sIDApO1xuICAgICAgZXhwYW5kZWRSb3dDb2xTcGFuID0gZXhwYW5kZWRSb3dDb2xTcGFuIC0gbW9iaWxlT25seUNvbHM7XG5cbiAgICAgIC8vIFdlJ2xsIHVzZSB0aGUgSUQgdG8gYXNzb2NpYXRlIHRoZSBleHBhbmRlZCByb3cgd2l0aCB0aGUgb3JpZ2luYWwuXG4gICAgICB2YXIgaGFzRXhwYW5kZWRSb3cgPSBpdGVtSWRUb0V4cGFuZGVkUm93TWFwID09PSBudWxsIHx8IGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXAuaGFzT3duUHJvcGVydHkoaXRlbUlkKTtcbiAgICAgIHZhciBleHBhbmRlZFJvd0lkID0gaGFzRXhwYW5kZWRSb3cgPyBcInJvd19cIi5jb25jYXQoaXRlbUlkLCBcIl9leHBhbnNpb25cIikgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgZXhwYW5kZWRSb3cgPSBoYXNFeHBhbmRlZFJvdyA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3csIHtcbiAgICAgICAgaWQ6IGV4cGFuZGVkUm93SWQsXG4gICAgICAgIGlzRXhwYW5kZWRSb3c6IHRydWUsXG4gICAgICAgIGhhc1NlbGVjdGlvbjogISFzZWxlY3Rpb25cbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCB7XG4gICAgICAgIGNvbFNwYW46IGV4cGFuZGVkUm93Q29sU3BhbixcbiAgICAgICAgdGV4dE9ubHk6IGZhbHNlLFxuICAgICAgICBhcHBlbmQ6IHRhYnVsYXJDb3B5TWFya2Vycy5oaWRkZW5OZXdsaW5lXG4gICAgICB9LCBpdGVtSWRUb0V4cGFuZGVkUm93TWFwW2l0ZW1JZF0pKSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciByb3dQcm9wc0NhbGxiYWNrID0gdGhpcy5wcm9wcy5yb3dQcm9wcztcbiAgICAgIHZhciByb3dQcm9wcyA9IGdldFJvd1Byb3BzKGl0ZW0sIHJvd1Byb3BzQ2FsbGJhY2spO1xuICAgICAgdmFyIHJvdyA9IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3csIF9leHRlbmRzKHtcbiAgICAgICAgXCJhcmlhLW93bnNcIjogZXhwYW5kZWRSb3dJZCxcbiAgICAgICAgaGFzU2VsZWN0aW9uOiAhIXNlbGVjdGlvbixcbiAgICAgICAgaXNTZWxlY3RhYmxlOiAhcm93U2VsZWN0aW9uRGlzYWJsZWQsXG4gICAgICAgIGlzU2VsZWN0ZWQ6IHNlbGVjdGVkLFxuICAgICAgICBoYXNBY3Rpb25zOiBoYXNBY3Rpb25zLFxuICAgICAgICBpc0V4cGFuZGFibGU6IGhhc0V4cGFuZGVkUm93XG4gICAgICB9LCByb3dQcm9wcyksIGNlbGxzKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCB7XG4gICAgICAgIGtleTogXCJyb3dfXCIuY29uY2F0KGl0ZW1JZClcbiAgICAgIH0sIHJvdywgZXhwYW5kZWRSb3cpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtU2VsZWN0aW9uQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtU2VsZWN0aW9uQ2VsbChpdGVtSWQsIGl0ZW0sIHNlbGVjdGVkLCBkaXNwbGF5ZWRSb3dJbmRleCkge1xuICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG4gICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5wcm9wcy5zZWxlY3Rpb247XG4gICAgICB2YXIga2V5ID0gXCJfc2VsZWN0aW9uX2NvbHVtbl9cIi5jb25jYXQoaXRlbUlkKTtcbiAgICAgIHZhciBjaGVja2VkID0gc2VsZWN0ZWQ7XG4gICAgICB2YXIgZGlzYWJsZWQgPSBzZWxlY3Rpb24uc2VsZWN0YWJsZSAmJiAhc2VsZWN0aW9uLnNlbGVjdGFibGUoaXRlbSk7XG4gICAgICB2YXIgdGl0bGUgPSBzZWxlY3Rpb24uc2VsZWN0YWJsZU1lc3NhZ2UgJiYgc2VsZWN0aW9uLnNlbGVjdGFibGVNZXNzYWdlKCFkaXNhYmxlZCwgaXRlbSk7XG4gICAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiBvbkNoYW5nZShldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgICBfdGhpczYuY2hhbmdlU2VsZWN0aW9uKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoX3RoaXM2LnN0YXRlLnNlbGVjdGlvbiksIFtpdGVtXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBpdGVtSWRDYWxsYmFjayA9IF90aGlzNi5wcm9wcy5pdGVtSWQ7XG4gICAgICAgICAgX3RoaXM2LmNoYW5nZVNlbGVjdGlvbihfdGhpczYuc3RhdGUuc2VsZWN0aW9uLnJlZHVjZShmdW5jdGlvbiAoc2VsZWN0aW9uLCBzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChnZXRJdGVtSWQoc2VsZWN0ZWRJdGVtLCBpdGVtSWRDYWxsYmFjaykgIT09IGl0ZW1JZCkge1xuICAgICAgICAgICAgICBzZWxlY3Rpb24ucHVzaChzZWxlY3RlZEl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICAgICAgICB9LCBbXSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIFtfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbENoZWNrYm94LCB7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBhcHBlbmQ6IHRoaXMucmVuZGVyQ29weUNoYXIoLTEpXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS5zZWxlY3RUaGlzUm93XCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0IHJvdyB7aW5kZXh9XCIsXG4gICAgICAgIHZhbHVlczoge1xuICAgICAgICAgIGluZGV4OiBkaXNwbGF5ZWRSb3dJbmRleCArIDFcbiAgICAgICAgfVxuICAgICAgfSwgZnVuY3Rpb24gKHNlbGVjdFRoaXNSb3cpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ2hlY2tib3gsIHtcbiAgICAgICAgICBpZDogXCJcIi5jb25jYXQoX3RoaXM2LnRhYmxlSWQpLmNvbmNhdChrZXksIFwiLWNoZWNrYm94XCIpLFxuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICAgICAgICB0aXRsZTogdGl0bGUgfHwgc2VsZWN0VGhpc1JvdyxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogdGl0bGUgfHwgc2VsZWN0VGhpc1JvdyxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiY2hlY2tib3hTZWxlY3RSb3ctXCIuY29uY2F0KGl0ZW1JZClcbiAgICAgICAgfSk7XG4gICAgICB9KSksIGRpc2FibGVkXTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySXRlbUFjdGlvbnNDZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1BY3Rpb25zQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIHJvd0luZGV4LCBoYXNDdXN0b21BY3Rpb25zKSB7XG4gICAgICAvLyBEaXNhYmxlIGFsbCBhY3Rpb25zIGlmIGFueSByb3cocykgYXJlIHNlbGVjdGVkXG4gICAgICB2YXIgYWxsRGlzYWJsZWQgPSB0aGlzLnN0YXRlLnNlbGVjdGlvbi5sZW5ndGggPiAwO1xuICAgICAgdmFyIGFjdHVhbEFjdGlvbnMgPSBjb2x1bW4uYWN0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICByZXR1cm4gIWFjdGlvbi5hdmFpbGFibGUgfHwgYWN0aW9uLmF2YWlsYWJsZShpdGVtKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGFjdHVhbEFjdGlvbnMubGVuZ3RoID4gMikge1xuICAgICAgICBpZiAoYWxsRGlzYWJsZWQpIHtcbiAgICAgICAgICAvLyBJZiBhbGwgYWN0aW9ucyBhcmUgZGlzYWJsZWQsIGRvIG5vdCBzaG93IGFueSBhY3Rpb25zIGJ1dCB0aGUgcG9wb3ZlciB0b2dnbGVcbiAgICAgICAgICBhY3R1YWxBY3Rpb25zID0gW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaWYgYW55IG9mIHRoZSBhY3Rpb25zIGBpc1ByaW1hcnlgLCBhZGQgdGhlbSBpbmxpbmUgYXMgd2VsbCwgYnV0IG9ubHkgdGhlIGZpcnN0IDIsXG4gICAgICAgICAgLy8gd2hpY2ggd2UnbGwgZm9yY2UgdG8gb25seSBzaG93IG9uIGhvdmVyIGZvciBkZXNrdG9wIHZpZXdzXG4gICAgICAgICAgdmFyIHByaW1hcnlBY3Rpb25zID0gYWN0dWFsQWN0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5pc1ByaW1hcnk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYWN0dWFsQWN0aW9ucyA9IHByaW1hcnlBY3Rpb25zLnNsaWNlKDAsIDIpLm1hcChmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhY3Rpb24pLCB7fSwge1xuICAgICAgICAgICAgICBzaG93T25Ib3ZlcjogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIG1vcmUgdGhhbiAxIGFjdGlvbiwgd2UgZG9uJ3Qgc2hvdyB0aGVtIGFsbCBpbiB0aGUgY2VsbCwgaW5zdGVhZCB3ZVxuICAgICAgICAvLyBwdXQgdGhlbSBhbGwgaW4gYSBwb3BvdmVyIHRvb2wuIFRoaXMgZWZmZWN0aXZlbHkgbWVhbnMgd2UgY2FuIG9ubHkgaGF2ZSBhIG1heGltdW1cbiAgICAgICAgLy8gb2Ygb25lIHRvb2wgcGVyIHJvdyAoaXQncyBlaXRoZXIgYW5kIG5vcm1hbCBhY3Rpb24sIG9yIGl0J3MgYSBwb3BvdmVyIHRoYXQgc2hvd3MgbXVsdGlwbGUgYWN0aW9ucylcbiAgICAgICAgLy9cbiAgICAgICAgLy8gaGVyZSB3ZSBjcmVhdGUgYSBzaW5nbGUgY3VzdG9tIGFjdGlvbiB0aGF0IHRyaWdnZXJzIHRoZSBwb3BvdmVyIHdpdGggYWxsIHRoZSBjb25maWd1cmVkIGFjdGlvbnNcblxuICAgICAgICBhY3R1YWxBY3Rpb25zLnB1c2goe1xuICAgICAgICAgIG5hbWU6ICdBbGwgYWN0aW9ucycsXG4gICAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29sbGFwc2VkSXRlbUFjdGlvbnMsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUJhc2ljVGFibGVfX2NvbGxhcHNlZEFjdGlvbnNcIixcbiAgICAgICAgICAgICAgYWN0aW9uczogY29sdW1uLmFjdGlvbnMsXG4gICAgICAgICAgICAgIGFjdGlvbnNEaXNhYmxlZDogYWxsRGlzYWJsZWQsXG4gICAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICBkaXNwbGF5ZWRSb3dJbmRleDogcm93SW5kZXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB2YXIga2V5ID0gXCJyZWNvcmRfYWN0aW9uc19cIi5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGNvbHVtbkluZGV4KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgYWxpZ246IFwicmlnaHRcIixcbiAgICAgICAgdGV4dE9ubHk6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25zOiBoYXNDdXN0b21BY3Rpb25zID8gJ2N1c3RvbScgOiB0cnVlLFxuICAgICAgICBhcHBlbmQ6IHRoaXMucmVuZGVyQ29weUNoYXIoY29sdW1uSW5kZXgpXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV4cGFuZGVkSXRlbUFjdGlvbnMsIHtcbiAgICAgICAgYWN0aW9uczogYWN0dWFsQWN0aW9ucyxcbiAgICAgICAgYWN0aW9uc0Rpc2FibGVkOiBhbGxEaXNhYmxlZCxcbiAgICAgICAgaXRlbUlkOiBpdGVtSWQsXG4gICAgICAgIGl0ZW06IGl0ZW1cbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySXRlbUZpZWxkRGF0YUNlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbUZpZWxkRGF0YUNlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4LCBzZXRTY29wZVJvdykge1xuICAgICAgdmFyIGZpZWxkID0gY29sdW1uLmZpZWxkLFxuICAgICAgICByZW5kZXIgPSBjb2x1bW4ucmVuZGVyLFxuICAgICAgICBkYXRhVHlwZSA9IGNvbHVtbi5kYXRhVHlwZTtcbiAgICAgIHZhciBrZXkgPSBcIl9kYXRhX2NvbHVtbl9cIi5jb25jYXQoU3RyaW5nKGZpZWxkKSwgXCJfXCIpLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoY29sdW1uSW5kZXgpO1xuICAgICAgdmFyIGNvbnRlbnRSZW5kZXJlciA9IHJlbmRlciB8fCB0aGlzLmdldFJlbmRlcmVyRm9yRGF0YVR5cGUoZGF0YVR5cGUpO1xuICAgICAgdmFyIHZhbHVlID0gZ2V0KGl0ZW0sIGZpZWxkKTtcbiAgICAgIHZhciBjb250ZW50ID0gY29udGVudFJlbmRlcmVyKHZhbHVlLCBpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckl0ZW1DZWxsKGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIGtleSwgY29udGVudCwgc2V0U2NvcGVSb3cpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQ29tcHV0ZWRDZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1Db21wdXRlZENlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4KSB7XG4gICAgICB2YXIgcmVuZGVyID0gY29sdW1uLnJlbmRlcjtcbiAgICAgIHZhciBrZXkgPSBcIl9jb21wdXRlZF9jb2x1bW5fXCIuY29uY2F0KGl0ZW1JZCwgXCJfXCIpLmNvbmNhdChjb2x1bW5JbmRleCk7XG4gICAgICB2YXIgY29udGVudFJlbmRlcmVyID0gcmVuZGVyIHx8IHRoaXMuZ2V0UmVuZGVyZXJGb3JEYXRhVHlwZSgpO1xuICAgICAgdmFyIGNvbnRlbnQgPSBjb250ZW50UmVuZGVyZXIoaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4LCBrZXksIGNvbnRlbnQsIGZhbHNlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySXRlbUNlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbUNlbGwoaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCwga2V5LCBjb250ZW50LCBzZXRTY29wZVJvdykge1xuICAgICAgdmFyIF9tb2JpbGVPcHRpb25zJHJlbmRlciwgX21vYmlsZU9wdGlvbnMkaGVhZGVyO1xuICAgICAgdmFyIF9yZWYxMSA9IGNvbHVtbixcbiAgICAgICAgYWxpZ24gPSBfcmVmMTEuYWxpZ24sXG4gICAgICAgIHJlbmRlciA9IF9yZWYxMS5yZW5kZXIsXG4gICAgICAgIGRhdGFUeXBlID0gX3JlZjExLmRhdGFUeXBlLFxuICAgICAgICBpc0V4cGFuZGVyID0gX3JlZjExLmlzRXhwYW5kZXIsXG4gICAgICAgIHRleHRPbmx5ID0gX3JlZjExLnRleHRPbmx5LFxuICAgICAgICBuYW1lID0gX3JlZjExLm5hbWUsXG4gICAgICAgIGZpZWxkID0gX3JlZjExLmZpZWxkLFxuICAgICAgICBkZXNjcmlwdGlvbiA9IF9yZWYxMS5kZXNjcmlwdGlvbixcbiAgICAgICAgc29ydGFibGUgPSBfcmVmMTEuc29ydGFibGUsXG4gICAgICAgIGZvb3RlciA9IF9yZWYxMS5mb290ZXIsXG4gICAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmMTEubW9iaWxlT3B0aW9ucyxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMTEsIF9leGNsdWRlZDIpO1xuICAgICAgdmFyIGNvbHVtbkFsaWduID0gYWxpZ24gfHwgdGhpcy5nZXRBbGlnbkZvckRhdGFUeXBlKGRhdGFUeXBlKTtcbiAgICAgIHZhciBjZWxsUHJvcHNDYWxsYmFjayA9IHRoaXMucHJvcHMuY2VsbFByb3BzO1xuICAgICAgdmFyIGNlbGxQcm9wcyA9IGdldENlbGxQcm9wcyhpdGVtLCBjb2x1bW4sIGNlbGxQcm9wc0NhbGxiYWNrKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwgX2V4dGVuZHMoe1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgYWxpZ246IGNvbHVtbkFsaWduLFxuICAgICAgICBpc0V4cGFuZGVyOiBpc0V4cGFuZGVyLFxuICAgICAgICB0ZXh0T25seTogdGV4dE9ubHkgfHwgIXJlbmRlcixcbiAgICAgICAgc2V0U2NvcGVSb3c6IHNldFNjb3BlUm93LFxuICAgICAgICBtb2JpbGVPcHRpb25zOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1vYmlsZU9wdGlvbnMpLCB7fSwge1xuICAgICAgICAgIHJlbmRlcjogbW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgfHwgKF9tb2JpbGVPcHRpb25zJHJlbmRlciA9IG1vYmlsZU9wdGlvbnMucmVuZGVyKSA9PT0gbnVsbCB8fCBfbW9iaWxlT3B0aW9ucyRyZW5kZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9tb2JpbGVPcHRpb25zJHJlbmRlci5jYWxsKG1vYmlsZU9wdGlvbnMsIGl0ZW0pLFxuICAgICAgICAgIGhlYWRlcjogKF9tb2JpbGVPcHRpb25zJGhlYWRlciA9IG1vYmlsZU9wdGlvbnMgPT09IG51bGwgfHwgbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbW9iaWxlT3B0aW9ucy5oZWFkZXIpICE9PSBudWxsICYmIF9tb2JpbGVPcHRpb25zJGhlYWRlciAhPT0gdm9pZCAwID8gX21vYmlsZU9wdGlvbnMkaGVhZGVyIDogbmFtZVxuICAgICAgICB9KVxuICAgICAgfSwgY2VsbFByb3BzLCByZXN0LCB7XG4gICAgICAgIGFwcGVuZDogdGhpcy5yZW5kZXJDb3B5Q2hhcihjb2x1bW5JbmRleClcbiAgICAgIH0pLCBjb250ZW50KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UmVuZGVyZXJGb3JEYXRhVHlwZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlckZvckRhdGFUeXBlKCkge1xuICAgICAgdmFyIGRhdGFUeXBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnYXV0byc7XG4gICAgICB2YXIgcHJvZmlsZSA9IGRhdGFUeXBlc1Byb2ZpbGVzW2RhdGFUeXBlXTtcbiAgICAgIGlmICghcHJvZmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlIFtcIi5jb25jYXQoZGF0YVR5cGUsIFwiXS4gVGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzIGFyZSBbXCIpLmNvbmNhdChEQVRBX1RZUEVTLmpvaW4oJywgJyksIFwiXVwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZmlsZS5yZW5kZXI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEFsaWduRm9yRGF0YVR5cGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QWxpZ25Gb3JEYXRhVHlwZSgpIHtcbiAgICAgIHZhciBkYXRhVHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ2F1dG8nO1xuICAgICAgdmFyIHByb2ZpbGUgPSBkYXRhVHlwZXNQcm9maWxlc1tkYXRhVHlwZV07XG4gICAgICBpZiAoIXByb2ZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBkYXRhVHlwZSBbXCIuY29uY2F0KGRhdGFUeXBlLCBcIl0uIFRoZSBzdXBwb3J0ZWQgZGF0YSB0eXBlcyBhcmUgW1wiKS5jb25jYXQoREFUQV9UWVBFUy5qb2luKCcsICcpLCBcIl1cIikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb2ZpbGUuYWxpZ247XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclBhZ2luYXRpb25CYXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyUGFnaW5hdGlvbkJhcigpIHtcbiAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTEgPSB0aGlzLnByb3BzLFxuICAgICAgICBlcnJvciA9IF90aGlzJHByb3BzMTEuZXJyb3IsXG4gICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczExLnBhZ2luYXRpb24sXG4gICAgICAgIHRhYmxlQ2FwdGlvbiA9IF90aGlzJHByb3BzMTEudGFibGVDYXB0aW9uLFxuICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMTEub25DaGFuZ2U7XG4gICAgICBpZiAoIWVycm9yICYmIHBhZ2luYXRpb24gJiYgcGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgaWYgKCFvbkNoYW5nZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBCYXNpYyBUYWJsZSBpcyBjb25maWd1cmVkIHdpdGggcGFnaW5hdGlvbiBidXQgW29uQ2hhbmdlXSBpc1xcbiAgICAgICAgbm90IGNvbmZpZ3VyZWQuIFRoaXMgY2FsbGJhY2sgbXVzdCBiZSBpbXBsZW1lbnRlZCB0byBoYW5kbGUgcGFnaW5hdGlvbiBjaGFuZ2VzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlUGFnaW5hdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiUGFnaW5hdGlvbiBmb3IgdGFibGU6IHt0YWJsZUNhcHRpb259XCIsXG4gICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICB0YWJsZUNhcHRpb246IHRhYmxlQ2FwdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKHRhYmxlUGFnaW5hdGlvbikge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CYXIsIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb24sXG4gICAgICAgICAgICBvblBhZ2VTaXplQ2hhbmdlOiBfdGhpczcub25QYWdlU2l6ZUNoYW5nZS5iaW5kKF90aGlzNyksXG4gICAgICAgICAgICBvblBhZ2VDaGFuZ2U6IF90aGlzNy5vblBhZ2VDaGFuZ2UuYmluZChfdGhpczcpLFxuICAgICAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IF90aGlzNy50YWJsZUlkLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRhYmxlUGFnaW5hdGlvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAoIW5leHRQcm9wcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgLy8gbmV4dCBwcm9wcyBkb2Vzbid0IGhhdmUgYSBzZWxlY3Rpb24sIHJlc2V0IG91ciBzdGF0ZVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNlbGVjdGlvbjogW11cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciBjb250cm9sbGVkU2VsZWN0aW9uID0gbmV4dFByb3BzLnNlbGVjdGlvbi5zZWxlY3RlZDtcbiAgICAgIHZhciB1bmZpbHRlcmVkU2VsZWN0aW9uID0gY29udHJvbGxlZFNlbGVjdGlvbiAhPT0gbnVsbCAmJiBjb250cm9sbGVkU2VsZWN0aW9uICE9PSB2b2lkIDAgPyBjb250cm9sbGVkU2VsZWN0aW9uIDogcHJldlN0YXRlLnNlbGVjdGlvbjtcblxuICAgICAgLy8gRW5zdXJlIHdlJ3JlIG5vdCBpbmNsdWRpbmcgc2VsZWN0aW9ucyB0aGF0IGFyZW4ndCBpbiB0aGVcbiAgICAgIC8vIGN1cnJlbnQgYGl0ZW1zYCBhcnJheSAoYWZmZWN0ZWQgYnkgcGFnaW5hdGlvbilcbiAgICAgIHZhciBpdGVtSWQgPSBuZXh0UHJvcHMuaXRlbUlkLFxuICAgICAgICBpdGVtcyA9IG5leHRQcm9wcy5pdGVtcztcbiAgICAgIHZhciBzZWxlY3Rpb24gPSB1bmZpbHRlcmVkU2VsZWN0aW9uLmZpbHRlcihmdW5jdGlvbiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtcy5maW5kSW5kZXgoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZCkgPT09IGdldEl0ZW1JZChzZWxlY3RlZEl0ZW0sIGl0ZW1JZCk7XG4gICAgICAgIH0pICE9PSAtMTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiBzb21lIHNlbGVjdGVkIGl0ZW1zIHdlcmUgZmlsdGVyZWQgb3V0LCB1cGRhdGUgc3RhdGUgYW5kIGNhbGxiYWNrXG4gICAgICBpZiAoc2VsZWN0aW9uLmxlbmd0aCAhPT0gdW5maWx0ZXJlZFNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgdmFyIF9uZXh0UHJvcHMkc2VsZWN0aW9uJCwgX25leHRQcm9wcyRzZWxlY3Rpb247XG4gICAgICAgIChfbmV4dFByb3BzJHNlbGVjdGlvbiQgPSAoX25leHRQcm9wcyRzZWxlY3Rpb24gPSBuZXh0UHJvcHMuc2VsZWN0aW9uKS5vblNlbGVjdGlvbkNoYW5nZSkgPT09IG51bGwgfHwgX25leHRQcm9wcyRzZWxlY3Rpb24kID09PSB2b2lkIDAgfHwgX25leHRQcm9wcyRzZWxlY3Rpb24kLmNhbGwoX25leHRQcm9wcyRzZWxlY3Rpb24sIHNlbGVjdGlvbik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb25cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBzZWxlY3Rpb24gc3RhdGUgZnJvbSBwcm9wcyBpZiBjb250cm9sbGVkXG4gICAgICBpZiAoY29udHJvbGxlZFNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlCYXNpY1RhYmxlLCBcImNvbnRleHRUeXBlXCIsIEV1aUNvbXBvbmVudERlZmF1bHRzQ29udGV4dCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpQmFzaWNUYWJsZSwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICB0YWJsZUxheW91dDogJ2ZpeGVkJyxcbiAgbm9JdGVtc01lc3NhZ2U6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUubm9JdGVtc01lc3NhZ2VcIixcbiAgICBkZWZhdWx0OiBcIk5vIGl0ZW1zIGZvdW5kXCJcbiAgfSlcbn0pO1xuRXVpQmFzaWNUYWJsZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBEZXNjcmliZXMgaG93IHRvIGV4dHJhY3QgYSB1bmlxdWUgSUQgZnJvbSBlYWNoIGl0ZW0sIHVzZWQgZm9yIHNlbGVjdGlvbnMgJiBleHBhbmRlZCByb3dzXG4gICAgICovXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyBob3cgdG8gZXh0cmFjdCBhIHVuaXF1ZSBJRCBmcm9tIGVhY2ggaXRlbSwgdXNlZCBmb3Igc2VsZWN0aW9ucyAmIGV4cGFuZGVkIHJvd3NcbiAgICAgKi9cbiAgaXRlbUlkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBSb3cgZXhwYW5zaW9uIHVzZXMgdGhlIGl0ZW1JZCBwcm9wIHRvIGlkZW50aWZ5IGVhY2ggcm93XG4gICAgICovXG4gIC8qKlxuICAgICAqIFJvdyBleHBhbnNpb24gdXNlcyB0aGUgaXRlbUlkIHByb3AgdG8gaWRlbnRpZnkgZWFjaCByb3dcbiAgICAgKi9cbiAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcDogUHJvcFR5cGVzLnNoYXBlKHt9KSxcbiAgLyoqXG4gICAgICogQSBsaXN0IG9mIG9iamVjdHMgdG8gYXBwZWFyIGluIHRoZSB0YWJsZSAtIGFuIGl0ZW0gcGVyIHJvd1xuICAgICAqL1xuICAvKipcbiAgICAgKiBBIGxpc3Qgb2Ygb2JqZWN0cyB0byBhcHBlYXIgaW4gdGhlIHRhYmxlIC0gYW4gaXRlbSBwZXIgcm93XG4gICAgICovXG4gIGl0ZW1zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd0NlbGxgXG4gICAgICovXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gYEV1aVRhYmxlUm93Q2VsbGBcbiAgICAgKi9cbiAgY2VsbFByb3BzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygb25lIG9mIHRoZSBvYmplY3RzOiAjRXVpVGFibGVGaWVsZERhdGFDb2x1bW5UeXBlLCAjRXVpVGFibGVDb21wdXRlZENvbHVtblR5cGUgb3IgI0V1aVRhYmxlQWN0aW9uc0NvbHVtblR5cGUuXG4gICAgICovXG4gIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIG9uZSBvZiB0aGUgb2JqZWN0czogI0V1aVRhYmxlRmllbGREYXRhQ29sdW1uVHlwZSwgI0V1aVRhYmxlQ29tcHV0ZWRDb2x1bW5UeXBlIG9yICNFdWlUYWJsZUFjdGlvbnNDb2x1bW5UeXBlLlxuICAgICAqL1xuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogQSBmaWVsZCBvZiB0aGUgaXRlbSAobWF5IGJlIGEgbmVzdGVkIGZpZWxkKVxuICAgICAgICovXG4gICAgLy8gdHlwZSBoYWNrIHVzZWQgZm9yIGJldHRlciBhdXRvY29tcGxldGUgc3VwcG9ydFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjk3MjlcbiAgICBmaWVsZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgIC8vIHN1cHBvcnRzIG91dGVyLmlubmVyIGtleSBwYXRoc1xuICAgIC8qKlxuICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgY29sdW1uXG4gICAgICAgKi9cbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIC8qKlxuICAgICAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgY29sdW1uICh3aWxsIGJlIHByZXNlbnRlZCBhcyBhIHRpdGxlIG92ZXIgdGhlIGNvbHVtbiBoZWFkZXIpXG4gICAgICAgKi9cbiAgICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvKipcbiAgICAgICAqIERlc2NyaWJlcyB0aGUgZGF0YSB0eXBlcyBvZiB0aGUgZGlzcGxheWVkIHZhbHVlIChzZXJ2ZXMgYXMgYSByZW5kZXJpbmcgaGludCBmb3IgdGhlIHRhYmxlKVxuICAgICAgICovXG4gICAgZGF0YVR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJhdXRvXCIsIFwic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiYm9vbGVhblwiLCBcImRhdGVcIl0pLFxuICAgIC8qKlxuICAgICAgICogQSBDU1Mgd2lkdGggcHJvcGVydHkuIEhpbnRzIGZvciB0aGUgcmVxdWlyZWQgd2lkdGggb2YgdGhlIGNvbHVtbiAoZS5nLiBcIjMwJVwiLCBcIjEwMHB4XCIsIGV0Yy4uKVxuICAgICAgICovXG4gICAgd2lkdGg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLyoqXG4gICAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHVzZXIgY2FuIHNvcnQgb24gdGhpcyBjb2x1bW4uIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgdG8gc29ydCBhZ2FpbnN0XG4gICAgICAgKi9cbiAgICBzb3J0YWJsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogRGlzYWJsZXMgdGhlIHVzZXIncyBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgc29ydCwgYnV0IHdpbGwgc3RpbGxcbiAgICAgICAqIHNob3cgdGhlIGN1cnJlbnQgc29ydCBkaXJlY3Rpb24gaW4gdGhlIGNvbHVtbiBoZWFkZXJcbiAgICAgICAqL1xuICAgIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIERlZmluZXMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSBjb2x1bW5cbiAgICAgICAqIEBkZWZhdWx0IGxlZnRcbiAgICAgICAqL1xuICAgIGFsaWduOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogQ3JlYXRlcyBhIHRleHQgd3JhcHBlciBhcm91bmQgY2VsbCBjb250ZW50IHRoYXQgaGVscHMgd29yZCBicmVhayBvciB0cnVuY2F0ZVxuICAgICAgICogbG9uZyB0ZXh0IGNvcnJlY3RseS5cbiAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAqL1xuICAgIHRleHRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgY29sdW1uIHNob3VsZCB0cnVuY2F0ZSBvdmVyZmxvd2luZyB0ZXh0IGNvbnRlbnQuXG4gICAgICAgKiAtIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIHNpbmdsZS1saW5lIHRydW5jYXRpb24uXG4gICAgICAgKiAtIFRvIGVuYWJsZSBtdWx0aS1saW5lIHRydW5jYXRpb24sIHVzZSBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHdpdGggYGxpbmVzYFxuICAgICAgICogc2V0IHRvIGEgbnVtYmVyIG9mIGxpbmVzIHRvIHRydW5jYXRlIHRvLlxuICAgICAgICovXG4gICAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbGluZXM6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWRdKSxcbiAgICAvKipcbiAgICAgICAqIEFsbG93cyBjb25maWd1cmluZyBjdXN0b20gcmVuZGVyIG9wdGlvbnMgb3IgYXBwZWFyYW5jZXMgZm9yIGNvbHVtbiBjZWxsc1xuICAgICAgICogd2hlbiB0aGUgdGFibGUgcmVzcG9uc2l2ZWx5IGNvbGxhcHNlcyBpbnRvIGEgbW9iaWxlLWZyaWVuZGx5IHZpZXdcbiAgICAgICAqL1xuICAgIG1vYmlsZU9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jXG4gICAgfSksXG4gICAgLyoqXG4gICAgICAgKiBEZXNjcmliZSBhIGN1c3RvbSByZW5kZXJlciBmdW5jdGlvbiBmb3IgdGhlIGNvbnRlbnRcbiAgICAgICAqL1xuICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBDb250ZW50IHRvIGRpc3BsYXkgaW4gdGhlIGZvb3RlciBiZW5lYXRoIHRoaXMgY29sdW1uXG4gICAgICAgKi9cbiAgICBmb290ZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogSWYgcGFzc2luZyBgaXRlbUlkVG9FeHBhbmRlZFJvd01hcGAgdG8geW91ciB0YWJsZSwgc2V0IHRoaXMgZmxhZyB0byBgdHJ1ZWBcbiAgICAgICAqIGZvciB0aGUgY3VzdG9tIGNvbHVtbiBvciBjZWxsIHVzZWQgdG8gdG9nZ2xlIHRoZSBleHBhbmRlZCByb3cuXG4gICAgICAgKi9cbiAgICBpc0V4cGFuZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICAgKiBBIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgdGhlIHZhbHVlIGZvciBlYWNoIGl0ZW0gYW5kIHJlbmRlcnMgaXRcbiAgICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIC8qKlxuICAgICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb2x1bW5cbiAgICAgICAgICovXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICAgICAqIElmIHByb3ZpZGVkLCBhbGxvd3MgdGhpcyBjb2x1bW4gdG8gYmUgc29ydGVkIG9uLiBNdXN0IHJldHVybiB0aGUgdmFsdWUgdG8gc29ydCBhZ2FpbnN0LlxuICAgICAgICAgKi9cbiAgICBzb3J0YWJsZTogUHJvcFR5cGVzLmZ1bmNcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEFuIGFycmF5IG9mIG9uZSBvZiB0aGUgb2JqZWN0czogI0RlZmF1bHRJdGVtQWN0aW9uIG9yICNDdXN0b21JdGVtQWN0aW9uXG4gICAgICAgKi9cbiAgICBhY3Rpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB0eXBlIG9mIGFjdGlvblxuICAgICAgICAgKi9cbiAgICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIl0pLCBQcm9wVHlwZXMub25lT2YoW1wiaWNvblwiXSkuaXNSZXF1aXJlZF0pLFxuICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIGNvbG9yIG9mIHRoZSBidXR0b25cbiAgICAgICAgICovXG4gICAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gICAgICAvKipcbiAgICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgYWN0aW9uICh3aWxsIHJlbmRlciBhcyB2aXNpYmxlIHRleHQgaWYgcmVuZGVyZWQgd2l0aGluIGEgY29sbGFwc2VkIG1lbnUpXG4gICAgICAgICAqL1xuICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGFjdGlvbiAod2lsbCByZW5kZXIgYXMgdmlzaWJsZSB0ZXh0IGlmIHJlbmRlcmVkIHdpdGhpbiBhIGNvbGxhcHNlZCBtZW51KVxuICAgICAgICAgKi9cbiAgICAgIG5hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgICAgLyoqXG4gICAgICAgICAqIERlc2NyaWJlcyB0aGUgYWN0aW9uICh3aWxsIHJlbmRlciBhcyB0b29sdGlwIGNvbnRlbnQpXG4gICAgICAgICAqL1xuICAgICAgLyoqXG4gICAgICAgICAqIERlc2NyaWJlcyB0aGUgYWN0aW9uICh3aWxsIHJlbmRlciBhcyB0b29sdGlwIGNvbnRlbnQpXG4gICAgICAgICAqL1xuICAgICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgICAvKipcbiAgICAgICAgICogQSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGFjdGlvbi4gUGFzc2VzIGJhY2sgdGhlIGN1cnJlbnQgcm93XG4gICAgICAgICAqIGl0ZW0gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCBhbmQgdGhlIG9yaWdpbmF0aW5nIFJlYWN0IGNsaWNrIGV2ZW50XG4gICAgICAgICAqIGFzIGEgc2Vjb25kIGFyZ3VtZW50LlxuICAgICAgICAgKi9cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGhhbmRsZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgYWN0aW9uLiBQYXNzZXMgYmFjayB0aGUgY3VycmVudCByb3dcbiAgICAgICAgICogaXRlbSBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGFuZCB0aGUgb3JpZ2luYXRpbmcgUmVhY3QgY2xpY2sgZXZlbnRcbiAgICAgICAgICogYXMgYSBzZWNvbmQgYXJndW1lbnQuXG4gICAgICAgICAqL1xuICAgICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBocmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcbiAgICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgICAqL1xuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAgICovXG4gICAgICBhdmFpbGFibGU6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgICAqL1xuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgICAqL1xuICAgICAgZW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICAgICAgLyoqXG4gICAgICAgICAqIElmIG1vcmUgdGhhbiAzIGFjdGlvbnMgYXJlIHBhc3NlZCwgMiBwcmltYXJ5IGFjdGlvbnMgd2lsbCBzaG93IChvbiBob3ZlcilcbiAgICAgICAgICogbmV4dCB0byBhbiBleHBhbnNpb24gbWVudSBvZiBhbGwgYWN0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogT24gbW9iaWxlLCBwcmltYXJ5IGFjdGlvbnMgd2lsbCBiZSB0dWNrZWQgYXdheSBpbiB0aGUgZXhwYW5zaW9uIG1lbnUgZm9yIHNwYWNlLlxuICAgICAgICAgKi9cbiAgICAgIC8qKlxuICAgICAgICAgKiBJZiBtb3JlIHRoYW4gMyBhY3Rpb25zIGFyZSBwYXNzZWQsIDIgcHJpbWFyeSBhY3Rpb25zIHdpbGwgc2hvdyAob24gaG92ZXIpXG4gICAgICAgICAqIG5leHQgdG8gYW4gZXhwYW5zaW9uIG1lbnUgb2YgYWxsIGFjdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIE9uIG1vYmlsZSwgcHJpbWFyeSBhY3Rpb25zIHdpbGwgYmUgdHVja2VkIGF3YXkgaW4gdGhlIGV4cGFuc2lvbiBtZW51IGZvciBzcGFjZS5cbiAgICAgICAgICovXG4gICAgICBpc1ByaW1hcnk6IFByb3BUeXBlcy5ib29sLFxuICAgICAgLyoqXG4gICAgICAgICAqIEFsbG93cyBvbmx5IHNob3dpbmcgdGhlIGFjdGlvbiBvbiBtb3VzZSBob3ZlciBvciBrZXlib2FyZCBmb2N1cy5cbiAgICAgICAgICogSWYgbW9yZSB0aGFuIDMgYWN0aW9ucyBhcmUgcGFzc2VkLCB0aGlzIHdpbGwgYWx3YXlzIGJlIHRydWUgZm9yIGBpc1ByaW1hcnlgIGFjdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEhhcyBubyBlZmZlY3Qgb24gbW9iaWxlLCBvciBpZiBgaGFzQWN0aW9uc2AgaXMgbm90IHNldC5cbiAgICAgICAgICovXG4gICAgICAvKipcbiAgICAgICAgICogQWxsb3dzIG9ubHkgc2hvd2luZyB0aGUgYWN0aW9uIG9uIG1vdXNlIGhvdmVyIG9yIGtleWJvYXJkIGZvY3VzLlxuICAgICAgICAgKiBJZiBtb3JlIHRoYW4gMyBhY3Rpb25zIGFyZSBwYXNzZWQsIHRoaXMgd2lsbCBhbHdheXMgYmUgdHJ1ZSBmb3IgYGlzUHJpbWFyeWAgYWN0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogSGFzIG5vIGVmZmVjdCBvbiBtb2JpbGUsIG9yIGlmIGBoYXNBY3Rpb25zYCBpcyBub3Qgc2V0LlxuICAgICAgICAgKi9cbiAgICAgIHNob3dPbkhvdmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIC8qKlxuICAgICAgICAgKiBBc3NvY2lhdGVzIGFuIGljb24gd2l0aCB0aGUgYnV0dG9uXG4gICAgICAgICAqL1xuICAgICAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICAgIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAvKipcbiAgICAgICAgICogQWxsb3dzIHJlbmRlcmluZyBhIHRvdGFsbHkgY3VzdG9tIGFjdGlvblxuICAgICAgICAgKi9cbiAgICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgICAqL1xuICAgICAgYXZhaWxhYmxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICAgKi9cbiAgICAgIGVuYWJsZWQ6IFByb3BUeXBlcy5mdW5jXG4gICAgfSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlXG4gIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKSxcbiAgLyoqXG4gICAgICogRXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5XG4gICAgICovXG4gIC8qKlxuICAgICAqIEVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheVxuICAgICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogRGVzY3JpYmVzIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGNhcHRpb24gd2lsbCBiZSBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93cy5cIlxuICAgICAqL1xuICAvKipcbiAgICAgKiBEZXNjcmliZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHRhYmxlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY2FwdGlvbiB3aWxsIGJlIFwiVGhpcyB0YWJsZSBjb250YWlucyB7aXRlbUNvdW50fSByb3dzLlwiXG4gICAgICovXG4gIHRhYmxlQ2FwdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoaWNoIGNvbHVtbiBzaG91bGQgYmUgdXNlZCBhcyB0aGUgaWRlbnRpZnlpbmcgY2VsbCBpbiBlYWNoIHJvdy4gU2hvdWxkIG1hdGNoIGEgXCJmaWVsZFwiIHByb3AgaW4gRmllbGREYXRhQ29sdW1uXG4gICAgICovXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGljaCBjb2x1bW4gc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGlkZW50aWZ5aW5nIGNlbGwgaW4gZWFjaCByb3cuIFNob3VsZCBtYXRjaCBhIFwiZmllbGRcIiBwcm9wIGluIEZpZWxkRGF0YUNvbHVtblxuICAgICAqL1xuICByb3dIZWFkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFByb3ZpZGVzIGFuIGluZmluaXRlIGxvYWRpbmcgaW5kaWNhdG9yXG4gICAgICovXG4gIC8qKlxuICAgICAqIFByb3ZpZGVzIGFuIGluZmluaXRlIGxvYWRpbmcgaW5kaWNhdG9yXG4gICAgICovXG4gIGxvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBNZXNzYWdlIHRvIGRpc3BsYXkgaWYgdGFibGUgaXMgZW1wdHlcbiAgICAgKi9cbiAgLyoqXG4gICAgICogTWVzc2FnZSB0byBkaXNwbGF5IGlmIHRhYmxlIGlzIGVtcHR5XG4gICAgICovXG4gIG5vSXRlbXNNZXNzYWdlOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW5ldmVyIHBhZ2luYXRpb24gb3Igc29ydGluZyBjaGFuZ2VzICh0aGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkIHdoZW4gZWl0aGVyIHBhZ2luYXRpb24gb3Igc29ydGluZyBpcyBjb25maWd1cmVkKS4gU2VlICNDcml0ZXJpYSBvciAjQ3JpdGVyaWFXaXRoUGFnaW5hdGlvblxuICAgICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI1BhZ2luYXRpb25cbiAgICAgKi9cbiAgcGFnaW5hdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt1bmRlZmluZWRdKSwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIFRoZSBjdXJyZW50IHBhZ2UgKHplcm8tYmFzZWQpIGluZGV4XG4gICAgICAgKi9cbiAgICBwYWdlSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICAvKipcbiAgICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzaG93biBpbiBhIHNpbmdsZSBwYWdlLlxuICAgICAgICogUGFzcyBgMGAgdG8gZGlzcGxheSB0aGUgc2VsZWN0ZWQgXCJTaG93IGFsbFwiIG9wdGlvbiBhbmQgaGlkZSB0aGUgcGFnaW5hdGlvbi5cbiAgICAgICAqXG4gICAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAgICovXG4gICAgcGFnZVNpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgLyoqXG4gICAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHRoZSBwYWdlIGlzIFwic2xpY2VkXCIgb2ZcbiAgICAgICAqL1xuICAgIHRvdGFsSXRlbUNvdW50OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgLyoqXG4gICAgICAgKiBDb25maWd1cmVzIHRoZSBwYWdlIHNpemUgZHJvcGRvd24gb3B0aW9ucy5cbiAgICAgICAqIFBhc3MgYDBgIGFzIG9uZSBvZiB0aGUgb3B0aW9ucyB0byBjcmVhdGUgYSBcIlNob3cgYWxsXCIgb3B0aW9uLlxuICAgICAgICpcbiAgICAgICAqIEBkZWZhdWx0IFsxMCwgMjUsIDUwXVxuICAgICAgICovXG4gICAgcGFnZVNpemVPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQpLFxuICAgIC8qKlxuICAgICAgICogU2V0IHRvIGZhbHNlIHRvIGhpZGUgdGhlIHBhZ2Ugc2l6ZSBkcm9wZG93blxuICAgICAgICpcbiAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAqL1xuICAgIHNob3dQZXJQYWdlT3B0aW9uczogUHJvcFR5cGVzLmJvb2xcbiAgfSldKSxcbiAgLyoqXG4gICAgICogQXBwbGllZCB0byBgRXVpVGFibGVSb3dgXG4gICAgICovXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gYEV1aVRhYmxlUm93YFxuICAgICAqL1xuICByb3dQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU2VsZWN0aW9uVHlwZVxuICAgICAqL1xuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNFdWlUYWJsZVNlbGVjdGlvblR5cGVcbiAgICAgKi9cbiAgc2VsZWN0aW9uOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBpdGVtIHNlbGVjdGlvbiBjaGFuZ2VzLlxuICAgICAgICpcbiAgICAgICAqIFJlcXVpcmVkIGlmIGBzZWxlY3RlZGAgaXMgcGFzc2VkLlxuICAgICAgICovXG4gICAgb25TZWxlY3Rpb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCBwZXIgaXRlbSB0byBpbmRpY2F0ZSB3aGV0aGVyIGl0IGlzIHNlbGVjdGFibGVcbiAgICAgICAqL1xuICAgIHNlbGVjdGFibGU6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCBwZXIgaXRlbSB0byByZXRyaWV2ZSBhIG1lc3NhZ2UgZm9yIGl0cyBzZWxlY3RhYmxlIHN0YXRlLlxuICAgICAgICogV2UgZGlzcGxheSB0aGVzZSBtZXNzYWdlcyBhcyBhIHRvb2x0aXAgb24gYW4gdW5zZWxlY3RhYmxlIGNoZWNrYm94XG4gICAgICAgKi9cbiAgICBzZWxlY3RhYmxlTWVzc2FnZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBTZXRzIGluaXRpYWxseSBzZWxlY3RlZCBpdGVtcy4gVXNlIGZvciB1bmNvbnRyb2xsZWQgc2VsZWN0aW9uIGJlaGF2aW9yIChjaGVja2JveFxuICAgICAgICogd2lsbCBvbmx5IGNoYW5nZSBmcm9tIHVzZXIgaW5wdXQsIGFuZCBub3QgZnJvbSBkZXZlbG9wZXIgY29udHJvbCkuXG4gICAgICAgKlxuICAgICAgICogVGhpcyBwcm9wIHdpbGwgYmUgaWdub3JlZCBpZiBgc2VsZWN0ZWRgIGlzIHBhc3NlZC5cbiAgICAgICAqL1xuICAgIGluaXRpYWxTZWxlY3RlZDogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAvKipcbiAgICAgICAqIFVzZWQgZm9yIGNvbnRyb2xsZWQgc2VsZWN0aW9uIGJlaGF2aW9yLCBlLmcuIHdoZW4geW91IHdhbnQgdG8gcHJvZ3JhbW1hdGljYWxseVxuICAgICAgICogY29udHJvbCB3aGljaCBzZWxlY3Rpb24gY2hlY2tib3hlcyBhcmUgY2hlY2tlZCwgYW5kIHdoaWNoIGFyZSBub3QuXG4gICAgICAgKi9cbiAgICBzZWxlY3RlZDogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKVxuICB9KSxcbiAgLyoqXG4gICAgICogQ29uZmlndXJlcyAjRXVpVGFibGVTb3J0aW5nVHlwZVxuICAgICAqL1xuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNFdWlUYWJsZVNvcnRpbmdUeXBlXG4gICAgICovXG4gIHNvcnRpbmc6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBJbmRpY2F0ZXMgdGhlIHByb3BlcnR5L2ZpZWxkIHRvIHNvcnQgb25cbiAgICAgICAqL1xuICAgIHNvcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBmaWVsZDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgICAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYXNjXCIsIFwiZGVzY1wiXSkuaXNSZXF1aXJlZFxuICAgIH0pLFxuICAgIC8qKlxuICAgICAgICogRW5hYmxlcy9kaXNhYmxlcyB1bnNvcnRpbmcgb2YgdGFibGUgY29sdW1ucy4gU3VwcG9ydGVkIGJ5IEV1aUluTWVtb3J5VGFibGUuXG4gICAgICAgKi9cbiAgICBhbGxvd05ldXRyYWxTb3J0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIEVuYWJsZXMgdGhlIGRlZmF1bHQgc29ydGluZyBhYmlsaXR5IGZvciBlYWNoIGNvbHVtbi5cbiAgICAgICAqL1xuICAgIGVuYWJsZUFsbENvbHVtbnM6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogRGlzYWJsZXMgdGhlIHVzZXIncyBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgc29ydCBidXQgc3RpbGwgc2hvd3MgdGhlIGN1cnJlbnQgZGlyZWN0aW9uXG4gICAgICAgKi9cbiAgICByZWFkT25seTogUHJvcFR5cGVzLmJvb2xcbiAgfSksXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIHRhYmxlLWxheW91dCBDU1MgcHJvcGVydHkuIE5vdGUgdGhhdCBhdXRvIHRhYmxlTGF5b3V0IHByZXZlbnRzIHRydW5jYXRlVGV4dCBmcm9tIHdvcmtpbmcgcHJvcGVybHkuXG4gICAgICovXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIHRhYmxlLWxheW91dCBDU1MgcHJvcGVydHkuIE5vdGUgdGhhdCBhdXRvIHRhYmxlTGF5b3V0IHByZXZlbnRzIHRydW5jYXRlVGV4dCBmcm9tIHdvcmtpbmcgcHJvcGVybHkuXG4gICAgICovXG4gIHRhYmxlTGF5b3V0OiBQcm9wVHlwZXMub25lT2YoW1wiZml4ZWRcIiwgXCJhdXRvXCJdKVxufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpQ29udGV4dE1lbnVJdGVtLCBFdWlDb250ZXh0TWVudVBhbmVsIH0gZnJvbSAnLi4vY29udGV4dF9tZW51JztcbmltcG9ydCB7IEV1aVBvcG92ZXIgfSBmcm9tICcuLi9wb3BvdmVyJztcbmltcG9ydCB7IEV1aUJ1dHRvbkljb24gfSBmcm9tICcuLi9idXR0b24nO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGlzQ3VzdG9tSXRlbUFjdGlvbiwgY2FsbFdpdGhJdGVtSWZGdW5jdGlvbiB9IGZyb20gJy4vYWN0aW9uX3R5cGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIENvbGxhcHNlZEl0ZW1BY3Rpb25zID0gZnVuY3Rpb24gQ29sbGFwc2VkSXRlbUFjdGlvbnMoX3JlZikge1xuICB2YXIgYWN0aW9ucyA9IF9yZWYuYWN0aW9ucyxcbiAgICBpdGVtSWQgPSBfcmVmLml0ZW1JZCxcbiAgICBpdGVtID0gX3JlZi5pdGVtLFxuICAgIGFjdGlvbnNEaXNhYmxlZCA9IF9yZWYuYWN0aW9uc0Rpc2FibGVkLFxuICAgIGRpc3BsYXllZFJvd0luZGV4ID0gX3JlZi5kaXNwbGF5ZWRSb3dJbmRleCxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBwb3BvdmVyT3BlbiA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0UG9wb3Zlck9wZW4gPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgY2xvc2VQb3BvdmVyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzZXRQb3BvdmVyT3BlbihmYWxzZSk7XG4gIH0sIFtdKTtcbiAgdmFyIGFsbEFjdGlvbnNUb29sdGlwID0gdXNlRXVpSTE4bignZXVpQ29sbGFwc2VkSXRlbUFjdGlvbnMuYWxsQWN0aW9uc1Rvb2x0aXAnLCAnQWxsIGFjdGlvbnMnKTtcbiAgdmFyIGFsbEFjdGlvbnNCdXR0b25BcmlhTGFiZWwgPSB1c2VFdWlJMThuKCdldWlDb2xsYXBzZWRJdGVtQWN0aW9ucy5hbGxBY3Rpb25zJywgJ0FsbCBhY3Rpb25zLCByb3cge2luZGV4fScsIHtcbiAgICBpbmRleDogZGlzcGxheWVkUm93SW5kZXggKyAxXG4gIH0pO1xuICB2YXIgYWxsQWN0aW9uc0J1dHRvbkRpc2FibGVkQXJpYUxhYmVsID0gdXNlRXVpSTE4bignZXVpQ29sbGFwc2VkSXRlbUFjdGlvbnMuYWxsQWN0aW9uc0Rpc2FibGVkJywgJ0luZGl2aWR1YWwgaXRlbSBhY3Rpb25zIGFyZSBkaXNhYmxlZCB3aGVuIHJvd3MgYXJlIGJlaW5nIHNlbGVjdGVkLicpO1xuICB2YXIgY29udHJvbHMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gYWN0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKGNvbnRyb2xzLCBhY3Rpb24sIGluZGV4KSB7XG4gICAgICB2YXIgX2FjdGlvbiRhdmFpbGFibGUsIF9hY3Rpb24kYXZhaWxhYmxlMjtcbiAgICAgIHZhciBhdmFpbGFibGUgPSAoX2FjdGlvbiRhdmFpbGFibGUgPSAoX2FjdGlvbiRhdmFpbGFibGUyID0gYWN0aW9uLmF2YWlsYWJsZSkgPT09IG51bGwgfHwgX2FjdGlvbiRhdmFpbGFibGUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYWN0aW9uJGF2YWlsYWJsZTIuY2FsbChhY3Rpb24sIGl0ZW0pKSAhPT0gbnVsbCAmJiBfYWN0aW9uJGF2YWlsYWJsZSAhPT0gdm9pZCAwID8gX2FjdGlvbiRhdmFpbGFibGUgOiB0cnVlO1xuICAgICAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBjb250cm9scztcbiAgICAgIHZhciBlbmFibGVkID0gYWN0aW9uLmVuYWJsZWQgPT0gbnVsbCB8fCBhY3Rpb24uZW5hYmxlZChpdGVtKTtcbiAgICAgIGlmIChpc0N1c3RvbUl0ZW1BY3Rpb24oYWN0aW9uKSkge1xuICAgICAgICB2YXIgY3VzdG9tQWN0aW9uID0gYWN0aW9uO1xuICAgICAgICB2YXIgYWN0aW9uQ29udHJvbCA9IGN1c3RvbUFjdGlvbi5yZW5kZXIoaXRlbSwgZW5hYmxlZCk7XG4gICAgICAgIGNvbnRyb2xzLnB1c2goXG4gICAgICAgIC8vIERvIG5vdCBwdXQgdGhlIGBvbkNsaWNrYCBvbiB0aGUgRXVpQ29udGV4dE1lbnVJdGVtIGl0c2VsZiAtIG90aGVyd2lzZVxuICAgICAgICAvLyBpdCByZW5kZXJzIGEgPGJ1dHRvbj4gdGFnIGluc3RlYWQgb2YgYSA8ZGl2PiwgYW5kIHdlIGVuZCB1cCB3aXRoIG5lc3RlZFxuICAgICAgICAvLyBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuICAgICAgICBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51SXRlbSwge1xuICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUJhc2ljVGFibGVfX2NvbGxhcHNlZEN1c3RvbUFjdGlvblwiXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICBvbkNsaWNrOiBjbG9zZVBvcG92ZXJcbiAgICAgICAgfSwgYWN0aW9uQ29udHJvbCkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpY29uID0gYWN0aW9uLmljb24gPyBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pKGFjdGlvbi5pY29uKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGJ1dHRvbkNvbnRlbnQgPSBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pKGFjdGlvbi5uYW1lKTtcbiAgICAgICAgdmFyIHRvb2xUaXBDb250ZW50ID0gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb24uZGVzY3JpcHRpb24pO1xuICAgICAgICB2YXIgaHJlZiA9IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uLmhyZWYpO1xuICAgICAgICB2YXIgZGF0YVRlc3RTdWJqID0gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb25bJ2RhdGEtdGVzdC1zdWJqJ10pO1xuICAgICAgICB2YXIgX29uQ2xpY2sgPSBhY3Rpb24ub25DbGljayxcbiAgICAgICAgICB0YXJnZXQgPSBhY3Rpb24udGFyZ2V0O1xuICAgICAgICBjb250cm9scy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVJdGVtLCB7XG4gICAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFzaWNUYWJsZV9fY29sbGFwc2VkQWN0aW9uXCIsXG4gICAgICAgICAgZGlzYWJsZWQ6ICFlbmFibGVkICYmICFhY3Rpb25zRGlzYWJsZWQsXG4gICAgICAgICAgaHJlZjogaHJlZixcbiAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICBpY29uOiBpY29uLFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogZGF0YVRlc3RTdWJqLFxuICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTtcbiAgICAgICAgICAgIF9vbkNsaWNrID09PSBudWxsIHx8IF9vbkNsaWNrID09PSB2b2lkIDAgfHwgX29uQ2xpY2soaXRlbSwgZXZlbnQpO1xuICAgICAgICAgICAgLy8gQWxsb3cgY29uc3VtZXIgZXZlbnRzIHRvIHByZXZlbnQgdGhlIHBvcG92ZXIgZnJvbSBjbG9zaW5nIGlmIG5lY2Vzc2FyeVxuICAgICAgICAgICAgaWYgKCFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSBjbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvb2xUaXBDb250ZW50OiB0b29sVGlwQ29udGVudCxcbiAgICAgICAgICB0b29sVGlwUHJvcHM6IHtcbiAgICAgICAgICAgIGRlbGF5OiAnbG9uZydcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGJ1dHRvbkNvbnRlbnQpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250cm9scztcbiAgICB9LCBbXSk7XG4gIH0sIFthY3Rpb25zLCBhY3Rpb25zRGlzYWJsZWQsIGl0ZW0sIGNsb3NlUG9wb3Zlcl0pO1xuICB2YXIgcG9wb3ZlckJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBhY3Rpb25zRGlzYWJsZWQgPyBhbGxBY3Rpb25zQnV0dG9uRGlzYWJsZWRBcmlhTGFiZWwgOiBhbGxBY3Rpb25zQnV0dG9uQXJpYUxhYmVsLFxuICAgIHRpdGxlOiBhY3Rpb25zRGlzYWJsZWQgPyBhbGxBY3Rpb25zQnV0dG9uRGlzYWJsZWRBcmlhTGFiZWwgOiB1bmRlZmluZWQsXG4gICAgaWNvblR5cGU6IFwiYm94ZXNIb3Jpem9udGFsXCIsXG4gICAgY29sb3I6IFwidGV4dFwiLFxuICAgIGlzRGlzYWJsZWQ6IGFjdGlvbnNEaXNhYmxlZCxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgcmV0dXJuIHNldFBvcG92ZXJPcGVuKGZ1bmN0aW9uIChpc09wZW4pIHtcbiAgICAgICAgcmV0dXJuICFpc09wZW47XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJldWlDb2xsYXBzZWRJdGVtQWN0aW9uc0J1dHRvblwiXG4gIH0pO1xuICB2YXIgd2l0aFRvb2x0aXAgPSAhYWN0aW9uc0Rpc2FibGVkICYmIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgIGNvbnRlbnQ6IGFsbEFjdGlvbnNUb29sdGlwLFxuICAgIGRlbGF5OiBcImxvbmdcIlxuICB9LCBwb3BvdmVyQnV0dG9uKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3Zlciwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIGlkOiBcIlwiLmNvbmNhdChpdGVtSWQsIFwiLWFjdGlvbnNcIiksXG4gICAgaXNPcGVuOiBwb3BvdmVyT3BlbixcbiAgICBidXR0b246IHdpdGhUb29sdGlwIHx8IHBvcG92ZXJCdXR0b24sXG4gICAgY2xvc2VQb3BvdmVyOiBjbG9zZVBvcG92ZXIsXG4gICAgcGFuZWxQYWRkaW5nU2l6ZTogXCJub25lXCIsXG4gICAgYW5jaG9yUG9zaXRpb246IFwibGVmdENlbnRlclwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVQYW5lbCwge1xuICAgIGNsYXNzTmFtZTogXCJldWlCYXNpY1RhYmxlX19jb2xsYXBzZWRBY3Rpb25zXCIsXG4gICAgaXRlbXM6IGNvbnRyb2xzXG4gIH0pKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgaXNDdXN0b21JdGVtQWN0aW9uID0gZnVuY3Rpb24gaXNDdXN0b21JdGVtQWN0aW9uKGFjdGlvbikge1xuICByZXR1cm4gYWN0aW9uLmhhc093blByb3BlcnR5KCdyZW5kZXInKTtcbn07XG5leHBvcnQgdmFyIGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24gPSBmdW5jdGlvbiBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBwcm9wID09PSAnZnVuY3Rpb24nID8gcHJvcChpdGVtKSA6IHByb3A7XG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBEZWZhdWx0SXRlbUFjdGlvbiB9IGZyb20gJy4vZGVmYXVsdF9pdGVtX2FjdGlvbic7XG5pbXBvcnQgeyBDdXN0b21JdGVtQWN0aW9uIH0gZnJvbSAnLi9jdXN0b21faXRlbV9hY3Rpb24nO1xuaW1wb3J0IHsgaXNDdXN0b21JdGVtQWN0aW9uIH0gZnJvbSAnLi9hY3Rpb25fdHlwZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXhwYW5kZWRJdGVtQWN0aW9ucyA9IGZ1bmN0aW9uIEV4cGFuZGVkSXRlbUFjdGlvbnMoX3JlZikge1xuICB2YXIgYWN0aW9ucyA9IF9yZWYuYWN0aW9ucyxcbiAgICBpdGVtSWQgPSBfcmVmLml0ZW1JZCxcbiAgICBpdGVtID0gX3JlZi5pdGVtLFxuICAgIGFjdGlvbnNEaXNhYmxlZCA9IF9yZWYuYWN0aW9uc0Rpc2FibGVkLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgYWN0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHRvb2xzLCBhY3Rpb24sIGluZGV4KSB7XG4gICAgdmFyIGF2YWlsYWJsZSA9IGFjdGlvbi5hdmFpbGFibGUgPyBhY3Rpb24uYXZhaWxhYmxlKGl0ZW0pIDogdHJ1ZTtcbiAgICBpZiAoIWF2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIHRvb2xzO1xuICAgIH1cbiAgICB2YXIgZW5hYmxlZCA9IGFjdGlvbi5lbmFibGVkID09IG51bGwgfHwgYWN0aW9uLmVuYWJsZWQoaXRlbSk7XG4gICAgdmFyIGtleSA9IFwiaXRlbV9hY3Rpb25fXCIuY29uY2F0KGl0ZW1JZCwgXCJfXCIpLmNvbmNhdChpbmRleCk7XG4gICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKGNsYXNzTmFtZSwge1xuICAgICAgJ2V1aUJhc2ljVGFibGVBY3Rpb24tc2hvd09uSG92ZXInOiBhY3Rpb24uc2hvd09uSG92ZXJcbiAgICB9KTtcbiAgICBpZiAoaXNDdXN0b21JdGVtQWN0aW9uKGFjdGlvbikpIHtcbiAgICAgIC8vIGN1c3RvbSBhY3Rpb24gaGFzIGEgcmVuZGVyIGZ1bmN0aW9uXG4gICAgICB0b29scy5wdXNoKF9fX0Vtb3Rpb25KU1goQ3VzdG9tSXRlbUFjdGlvbiwge1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBlbmFibGVkOiBlbmFibGVkICYmICFhY3Rpb25zRGlzYWJsZWQsXG4gICAgICAgIGl0ZW06IGl0ZW1cbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9vbHMucHVzaChfX19FbW90aW9uSlNYKERlZmF1bHRJdGVtQWN0aW9uLCB7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBlbmFibGVkOiBlbmFibGVkICYmICFhY3Rpb25zRGlzYWJsZWQsXG4gICAgICAgIGl0ZW06IGl0ZW1cbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRvb2xzO1xuICB9LCBbXSkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpQnV0dG9uRW1wdHksIEV1aUJ1dHRvbkljb24gfSBmcm9tICcuLi9idXR0b24nO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IHVzZUdlbmVyYXRlZEh0bWxJZCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgY2FsbFdpdGhJdGVtSWZGdW5jdGlvbiB9IGZyb20gJy4vYWN0aW9uX3R5cGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIERlZmF1bHRJdGVtQWN0aW9uID0gZnVuY3Rpb24gRGVmYXVsdEl0ZW1BY3Rpb24oX3JlZikge1xuICB2YXIgYWN0aW9uID0gX3JlZi5hY3Rpb24sXG4gICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZCxcbiAgICBpdGVtID0gX3JlZi5pdGVtLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lO1xuICBpZiAoIWFjdGlvbi5vbkNsaWNrICYmICFhY3Rpb24uaHJlZikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZW5kZXIgaXRlbSBhY3Rpb24gW1wiLmNvbmNhdChhY3Rpb24ubmFtZSwgXCJdLiBNaXNzaW5nIHJlcXVpcmVkICdvbkNsaWNrJyBjYWxsYmFja1xcbiAgICAgIG9yICdocmVmJyBzdHJpbmcuIElmIHlvdSB3YW50IHRvIHByb3ZpZGUgYSBjdXN0b20gYWN0aW9uIGNvbnRyb2wsIG1ha2Ugc3VyZSB0byBkZWZpbmUgdGhlICdyZW5kZXInIGNhbGxiYWNrXCIpKTtcbiAgfVxuICB2YXIgb25DbGljayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmICghYWN0aW9uLm9uQ2xpY2spIHJldHVybjtcbiAgICBldmVudC5wZXJzaXN0KCk7IC8vIFRPRE86IFJlbW92ZSBvbmNlIFJlYWN0IDE2IHN1cHBvcnQgaXMgZHJvcHBlZFxuICAgIGFjdGlvbi5vbkNsaWNrKGl0ZW0sIGV2ZW50KTtcbiAgfSwgW2FjdGlvbi5vbkNsaWNrLCBpdGVtXSk7XG4gIHZhciBjb2xvciA9IGFjdGlvbi5jb2xvciA/IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uLmNvbG9yKSA6ICdwcmltYXJ5JztcbiAgdmFyIGljb24gPSBhY3Rpb24uaWNvbiA/IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uLmljb24pIDogdW5kZWZpbmVkO1xuICB2YXIgYWN0aW9uQ29udGVudCA9IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uLm5hbWUpO1xuICB2YXIgdG9vbHRpcENvbnRlbnQgPSBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pKGFjdGlvbi5kZXNjcmlwdGlvbik7XG4gIHZhciBocmVmID0gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb24uaHJlZik7XG4gIHZhciBkYXRhVGVzdFN1YmogPSBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pKGFjdGlvblsnZGF0YS10ZXN0LXN1YmonXSk7XG4gIHZhciBhcmlhTGFiZWxJZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCgpO1xuICB2YXIgYXJpYUxhYmVsbGVkQnk7XG4gIHZhciBidXR0b247XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gJ2ljb24nKSB7XG4gICAgaWYgKCFpY29uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVuZGVyIGl0ZW0gYWN0aW9uIFtcIi5jb25jYXQoYWN0aW9uLm5hbWUsIFwiXS4gSXQgaXMgY29uZmlndXJlZCB0byByZW5kZXIgYXMgYW4gaWNvbiBidXQgbm9cXG4gICAgICBpY29uIGlzIHByb3ZpZGVkLiBNYWtlIHN1cmUgdG8gc2V0IHRoZSAnaWNvbicgcHJvcGVydHkgb2YgdGhlIGFjdGlvblwiKSk7XG4gICAgfVxuICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcmlhTGFiZWxJZCxcbiAgICAgIGlzRGlzYWJsZWQ6ICFlbmFibGVkLFxuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgaWNvblR5cGU6IGljb24sXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogYWN0aW9uLnRhcmdldCxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogZGF0YVRlc3RTdWJqXG4gICAgICAvLyBJZiBhY3Rpb24gaXMgZGlzYWJsZWQsIHRoZSBub3JtYWwgdG9vbHRpcCBjYW4ndCBzaG93IC0gYXR0ZW1wdCB0b1xuICAgICAgLy8gcHJvdmlkZSBzb21lIGFtb3VudCBvZiBhZmZvcmRhbmNlIHdpdGggYSBicm93c2VyIHRpdGxlIHRvb2x0aXBcbiAgICAgICxcbiAgICAgIHRpdGxlOiAhZW5hYmxlZCA/IHRvb2x0aXBDb250ZW50IDogdW5kZWZpbmVkXG4gICAgfSk7XG4gICAgLy8gYWN0aW9uQ29udGVudCAoYWN0aW9uLm5hbWUpIGlzIGEgUmVhY3ROb2RlIGFuZCBtdXN0IGJlIHJlbmRlcmVkXG4gICAgLy8gdG8gYW4gZWxlbWVudCBhbmQgcmVmZXJlbmNlZCBieSBJRCBmb3Igc2NyZWVuIHJlYWRlcnNcbiAgICBhcmlhTGFiZWxsZWRCeSA9IF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgaWQ6IGFyaWFMYWJlbElkXG4gICAgfSwgYWN0aW9uQ29udGVudCkpO1xuICB9IGVsc2Uge1xuICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRW1wdHksIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICBpc0Rpc2FibGVkOiAhZW5hYmxlZCxcbiAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgIGljb25UeXBlOiBpY29uLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IGFjdGlvbi50YXJnZXQsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGRhdGFUZXN0U3ViaixcbiAgICAgIGZsdXNoOiBcInJpZ2h0XCJcbiAgICB9LCBhY3Rpb25Db250ZW50KTtcbiAgfVxuICByZXR1cm4gZW5hYmxlZCA/IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgIGNvbnRlbnQ6IHRvb2x0aXBDb250ZW50LFxuICAgIGRlbGF5OiBcImxvbmdcIlxuICB9LCBidXR0b24pLCBhcmlhTGFiZWxsZWRCeSkgOiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBidXR0b24sIGFyaWFMYWJlbGxlZEJ5KTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDdXN0b21JdGVtQWN0aW9uID0gZnVuY3Rpb24gQ3VzdG9tSXRlbUFjdGlvbihfcmVmKSB7XG4gIHZhciBhY3Rpb24gPSBfcmVmLmFjdGlvbixcbiAgICBlbmFibGVkID0gX3JlZi5lbmFibGVkLFxuICAgIGl0ZW0gPSBfcmVmLml0ZW0sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWU7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCBhY3Rpb24ucmVuZGVyKGl0ZW0sIGVuYWJsZWQpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlTcGFjZXIgfSBmcm9tICcuLi9zcGFjZXInO1xuaW1wb3J0IHsgRXVpVGFibGVQYWdpbmF0aW9uLCB1c2VFdWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cyB9IGZyb20gJy4uL3RhYmxlL3RhYmxlX3BhZ2luYXRpb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgUGFnaW5hdGlvbkJhciA9IGZ1bmN0aW9uIFBhZ2luYXRpb25CYXIoX3JlZikge1xuICB2YXIgcGFnaW5hdGlvbiA9IF9yZWYucGFnaW5hdGlvbixcbiAgICBvblBhZ2VTaXplQ2hhbmdlID0gX3JlZi5vblBhZ2VTaXplQ2hhbmdlLFxuICAgIG9uUGFnZUNoYW5nZSA9IF9yZWYub25QYWdlQ2hhbmdlLFxuICAgIGFyaWFDb250cm9scyA9IF9yZWZbJ2FyaWEtY29udHJvbHMnXSxcbiAgICBhcmlhTGFiZWwgPSBfcmVmWydhcmlhLWxhYmVsJ107XG4gIHZhciBkZWZhdWx0cyA9IHVzZUV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzKCk7XG4gIHZhciBwYWdlSW5kZXggPSBwYWdpbmF0aW9uLnBhZ2VJbmRleCxcbiAgICB0b3RhbEl0ZW1Db3VudCA9IHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQsXG4gICAgX3BhZ2luYXRpb24kcGFnZVNpemUgPSBwYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgIHBhZ2VTaXplID0gX3BhZ2luYXRpb24kcGFnZVNpemUgPT09IHZvaWQgMCA/IGRlZmF1bHRzLml0ZW1zUGVyUGFnZSA6IF9wYWdpbmF0aW9uJHBhZ2VTaXplLFxuICAgIF9wYWdpbmF0aW9uJHBhZ2VTaXplTyA9IHBhZ2luYXRpb24ucGFnZVNpemVPcHRpb25zLFxuICAgIHBhZ2VTaXplT3B0aW9ucyA9IF9wYWdpbmF0aW9uJHBhZ2VTaXplTyA9PT0gdm9pZCAwID8gZGVmYXVsdHMuaXRlbXNQZXJQYWdlT3B0aW9ucyA6IF9wYWdpbmF0aW9uJHBhZ2VTaXplTyxcbiAgICBfcGFnaW5hdGlvbiRzaG93UGVyUGEgPSBwYWdpbmF0aW9uLnNob3dQZXJQYWdlT3B0aW9ucyxcbiAgICBzaG93UGVyUGFnZU9wdGlvbnMgPSBfcGFnaW5hdGlvbiRzaG93UGVyUGEgPT09IHZvaWQgMCA/IGRlZmF1bHRzLnNob3dQZXJQYWdlT3B0aW9ucyA6IF9wYWdpbmF0aW9uJHNob3dQZXJQYTtcbiAgdmFyIHBhZ2VDb3VudCA9IHBhZ2VTaXplID8gTWF0aC5jZWlsKHRvdGFsSXRlbUNvdW50IC8gcGFnZVNpemUpIDogMTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocGFnZUNvdW50IDwgcGFnZUluZGV4ICsgMSkge1xuICAgICAgb25QYWdlQ2hhbmdlID09PSBudWxsIHx8IG9uUGFnZUNoYW5nZSA9PT0gdm9pZCAwIHx8IG9uUGFnZUNoYW5nZShwYWdlQ291bnQgLSAxKTtcbiAgICB9XG4gIH0sIFtwYWdlQ291bnQsIG9uUGFnZUNoYW5nZSwgcGFnZUluZGV4XSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpU3BhY2VyLCB7XG4gICAgc2l6ZTogXCJtXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVQYWdpbmF0aW9uLCB7XG4gICAgYWN0aXZlUGFnZTogcGFnZUluZGV4LFxuICAgIHNob3dQZXJQYWdlT3B0aW9uczogc2hvd1BlclBhZ2VPcHRpb25zLFxuICAgIGl0ZW1zUGVyUGFnZTogcGFnZVNpemUsXG4gICAgaXRlbXNQZXJQYWdlT3B0aW9uczogcGFnZVNpemVPcHRpb25zLFxuICAgIHBhZ2VDb3VudDogcGFnZUNvdW50LFxuICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlOiBvblBhZ2VTaXplQ2hhbmdlLFxuICAgIG9uQ2hhbmdlUGFnZTogb25QYWdlQ2hhbmdlLFxuICAgIFwiYXJpYS1jb250cm9sc1wiOiBhcmlhQ29udHJvbHMsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbFxuICB9KSk7XG59OyIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0O1xuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChlLCB0KSB7IHJldHVybiB0IHx8ICh0ID0gZS5zbGljZSgwKSksIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUodCkgfSB9KSk7IH1cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcywga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgZXVpQ2FudEFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgdGFibGVMb2FkaW5nTGluZSA9IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICBmcm9tIHtcXG4gICAgXCIsIFwiXFxuICAgIFwiLCBcIlxcbiAgfVxcblxcbiAgMjAlIHtcXG4gICAgXCIsIFwiXFxuICAgIFwiLCBcIlxcbiAgfVxcblxcbiAgODAlIHtcXG4gICAgXCIsIFwiXFxuICAgIFwiLCBcIlxcbiAgfVxcblxcbiAgMTAwJSB7XFxuICAgIFwiLCBcIlxcbiAgICBcIiwgXCJcXG4gIH1cXG5cIl0pKSwgbG9naWNhbENTUygnbGVmdCcsIDApLCBsb2dpY2FsQ1NTKCd3aWR0aCcsIDApLCBsb2dpY2FsQ1NTKCdsZWZ0JywgMCksIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzQwJScpLCBsb2dpY2FsQ1NTKCdsZWZ0JywgJzYwJScpLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICc0MCUnKSwgbG9naWNhbENTUygnbGVmdCcsICcxMDAlJyksIGxvZ2ljYWxDU1MoJ3dpZHRoJywgMCkpO1xuZXhwb3J0IHZhciBldWlCYXNpY1RhYmxlQm9keUxvYWRpbmcgPSBmdW5jdGlvbiBldWlCYXNpY1RhYmxlQm9keUxvYWRpbmcoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICByZXR1cm4gLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjsmOjpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDonJztcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiBcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaWNrKSwgXCIgYmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIFwiO2FuaW1hdGlvbjpcIiwgdGFibGVMb2FkaW5nTGluZSwgXCIgMXMgbGluZWFyIGluZmluaXRlO1wiLCBldWlDYW50QW5pbWF0ZSwgXCJ7YW5pbWF0aW9uLWR1cmF0aW9uOjJzO319O2xhYmVsOmV1aUJhc2ljVGFibGVCb2R5TG9hZGluZztcIik7XG59O1xuXG4vLyBGaXggdG8gbWFrZSB0aGUgbG9hZGluZyBpbmRpY2F0b3IgcG9zaXRpb24gY29ycmVjdGx5IGluIFNhZmFyaVxuLy8gRm9yIHdoYXRldmVyIGFubm95aW5nIHJlYXNvbiwgU2FmYXJpIGRvZXNuJ3QgcmVzcGVjdCBgcG9zaXRpb246IHJlbGF0aXZlO2Bcbi8vIG9uIGB0Ym9keWAgd2l0aG91dCBgcG9zaXRpb246IHJlbGF0aXZlYCBvbiB0aGUgcGFyZW50IGB0YWJsZWBcbmV4cG9ydCB2YXIgc2FmYXJpTG9hZGluZ1dvcmthcm91bmQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiNnhibnc0LXNhZmFyaUxvYWRpbmdXb3JrYXJvdW5kXCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpyZWxhdGl2ZTtsYWJlbDpzYWZhcmlMb2FkaW5nV29ya2Fyb3VuZDtcIlxufSA6IHtcbiAgbmFtZTogXCI2eGJudzQtc2FmYXJpTG9hZGluZ1dvcmthcm91bmRcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOnJlbGF0aXZlO2xhYmVsOnNhZmFyaUxvYWRpbmdXb3JrYXJvdW5kO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07IiwgImV4cG9ydCB2YXIgU3Vic2NyaWJhYmxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3Vic2NyaWJhYmxlKCkge1xuICAgIHRoaXMubGlzdGVuZXJzID0gW107XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3Vic2NyaWJhYmxlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBjYWxsYmFjayA9IGxpc3RlbmVyIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIHRoaXMubGlzdGVuZXJzLnB1c2goY2FsbGJhY2spO1xuICAgIHRoaXMub25TdWJzY3JpYmUoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMubGlzdGVuZXJzID0gX3RoaXMubGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPT0gY2FsbGJhY2s7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMub25VbnN1YnNjcmliZSgpO1xuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uIGhhc0xpc3RlbmVycygpIHtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lcnMubGVuZ3RoID4gMDtcbiAgfTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHsvLyBEbyBub3RoaW5nXG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkgey8vIERvIG5vdGhpbmdcbiAgfTtcblxuICByZXR1cm4gU3Vic2NyaWJhYmxlO1xufSgpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbi8vIFRZUEVTXG4vLyBVVElMU1xuZXhwb3J0IHZhciBpc1NlcnZlciA9IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnO1xuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKSB7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZnVuY3Rpb25hbFVwZGF0ZSh1cGRhdGVyLCBpbnB1dCkge1xuICByZXR1cm4gdHlwZW9mIHVwZGF0ZXIgPT09ICdmdW5jdGlvbicgPyB1cGRhdGVyKGlucHV0KSA6IHVwZGF0ZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFRpbWVvdXQodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCAmJiB2YWx1ZSAhPT0gSW5maW5pdHk7XG59XG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlUXVlcnlLZXlBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG59XG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZShhcnJheTEsIGFycmF5Mikge1xuICByZXR1cm4gYXJyYXkxLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiBhcnJheTIuaW5kZXhPZih4KSA9PT0gLTE7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VBdChhcnJheSwgaW5kZXgsIHZhbHVlKSB7XG4gIHZhciBjb3B5ID0gYXJyYXkuc2xpY2UoMCk7XG4gIGNvcHlbaW5kZXhdID0gdmFsdWU7XG4gIHJldHVybiBjb3B5O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVVbnRpbFN0YWxlKHVwZGF0ZWRBdCwgc3RhbGVUaW1lKSB7XG4gIHJldHVybiBNYXRoLm1heCh1cGRhdGVkQXQgKyAoc3RhbGVUaW1lIHx8IDApIC0gRGF0ZS5ub3coKSwgMCk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAoIWlzUXVlcnlLZXkoYXJnMSkpIHtcbiAgICByZXR1cm4gYXJnMTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYXJnMiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMywge1xuICAgICAgcXVlcnlLZXk6IGFyZzEsXG4gICAgICBxdWVyeUZuOiBhcmcyXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICBxdWVyeUtleTogYXJnMVxuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU11dGF0aW9uQXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIGlmIChpc1F1ZXJ5S2V5KGFyZzEpKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzMsIHtcbiAgICAgICAgbXV0YXRpb25LZXk6IGFyZzEsXG4gICAgICAgIG11dGF0aW9uRm46IGFyZzJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgICAgbXV0YXRpb25LZXk6IGFyZzFcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYXJnMSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgICAgbXV0YXRpb25GbjogYXJnMVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcxKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMykge1xuICByZXR1cm4gaXNRdWVyeUtleShhcmcxKSA/IFtfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIHF1ZXJ5S2V5OiBhcmcxXG4gIH0pLCBhcmczXSA6IFthcmcxIHx8IHt9LCBhcmcyXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU11dGF0aW9uRmlsdGVyQXJncyhhcmcxLCBhcmcyKSB7XG4gIHJldHVybiBpc1F1ZXJ5S2V5KGFyZzEpID8gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICBtdXRhdGlvbktleTogYXJnMVxuICB9KSA6IGFyZzE7XG59XG5leHBvcnQgZnVuY3Rpb24gbWFwUXVlcnlTdGF0dXNGaWx0ZXIoYWN0aXZlLCBpbmFjdGl2ZSkge1xuICBpZiAoYWN0aXZlID09PSB0cnVlICYmIGluYWN0aXZlID09PSB0cnVlIHx8IGFjdGl2ZSA9PSBudWxsICYmIGluYWN0aXZlID09IG51bGwpIHtcbiAgICByZXR1cm4gJ2FsbCc7XG4gIH0gZWxzZSBpZiAoYWN0aXZlID09PSBmYWxzZSAmJiBpbmFjdGl2ZSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gJ25vbmUnO1xuICB9IGVsc2Uge1xuICAgIC8vIEF0IHRoaXMgcG9pbnQsIGFjdGl2ZXxpbmFjdGl2ZSBjYW4gb25seSBiZSB0cnVlfGZhbHNlIG9yIGZhbHNlfHRydWVcbiAgICAvLyBzbywgd2hlbiBvbmx5IG9uZSB2YWx1ZSBpcyBwcm92aWRlZCwgdGhlIG1pc3Npbmcgb25lIGhhcyB0byBiZSB0aGUgbmVnYXRlZCB2YWx1ZVxuICAgIHZhciBpc0FjdGl2ZSA9IGFjdGl2ZSAhPSBudWxsID8gYWN0aXZlIDogIWluYWN0aXZlO1xuICAgIHJldHVybiBpc0FjdGl2ZSA/ICdhY3RpdmUnIDogJ2luYWN0aXZlJztcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUXVlcnkoZmlsdGVycywgcXVlcnkpIHtcbiAgdmFyIGFjdGl2ZSA9IGZpbHRlcnMuYWN0aXZlLFxuICAgICAgZXhhY3QgPSBmaWx0ZXJzLmV4YWN0LFxuICAgICAgZmV0Y2hpbmcgPSBmaWx0ZXJzLmZldGNoaW5nLFxuICAgICAgaW5hY3RpdmUgPSBmaWx0ZXJzLmluYWN0aXZlLFxuICAgICAgcHJlZGljYXRlID0gZmlsdGVycy5wcmVkaWNhdGUsXG4gICAgICBxdWVyeUtleSA9IGZpbHRlcnMucXVlcnlLZXksXG4gICAgICBzdGFsZSA9IGZpbHRlcnMuc3RhbGU7XG5cbiAgaWYgKGlzUXVlcnlLZXkocXVlcnlLZXkpKSB7XG4gICAgaWYgKGV4YWN0KSB7XG4gICAgICBpZiAocXVlcnkucXVlcnlIYXNoICE9PSBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIHF1ZXJ5Lm9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFwYXJ0aWFsTWF0Y2hLZXkocXVlcnkucXVlcnlLZXksIHF1ZXJ5S2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBxdWVyeVN0YXR1c0ZpbHRlciA9IG1hcFF1ZXJ5U3RhdHVzRmlsdGVyKGFjdGl2ZSwgaW5hY3RpdmUpO1xuXG4gIGlmIChxdWVyeVN0YXR1c0ZpbHRlciA9PT0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyICE9PSAnYWxsJykge1xuICAgIHZhciBpc0FjdGl2ZSA9IHF1ZXJ5LmlzQWN0aXZlKCk7XG5cbiAgICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdhY3RpdmUnICYmICFpc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChxdWVyeVN0YXR1c0ZpbHRlciA9PT0gJ2luYWN0aXZlJyAmJiBpc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RhbGUgPT09ICdib29sZWFuJyAmJiBxdWVyeS5pc1N0YWxlKCkgIT09IHN0YWxlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBmZXRjaGluZyA9PT0gJ2Jvb2xlYW4nICYmIHF1ZXJ5LmlzRmV0Y2hpbmcoKSAhPT0gZmV0Y2hpbmcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUocXVlcnkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbikge1xuICB2YXIgZXhhY3QgPSBmaWx0ZXJzLmV4YWN0LFxuICAgICAgZmV0Y2hpbmcgPSBmaWx0ZXJzLmZldGNoaW5nLFxuICAgICAgcHJlZGljYXRlID0gZmlsdGVycy5wcmVkaWNhdGUsXG4gICAgICBtdXRhdGlvbktleSA9IGZpbHRlcnMubXV0YXRpb25LZXk7XG5cbiAgaWYgKGlzUXVlcnlLZXkobXV0YXRpb25LZXkpKSB7XG4gICAgaWYgKCFtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGV4YWN0KSB7XG4gICAgICBpZiAoaGFzaFF1ZXJ5S2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpICE9PSBoYXNoUXVlcnlLZXkobXV0YXRpb25LZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFwYXJ0aWFsTWF0Y2hLZXkobXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSwgbXV0YXRpb25LZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBmZXRjaGluZyA9PT0gJ2Jvb2xlYW4nICYmIG11dGF0aW9uLnN0YXRlLnN0YXR1cyA9PT0gJ2xvYWRpbmcnICE9PSBmZXRjaGluZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcmVkaWNhdGUgJiYgIXByZWRpY2F0ZShtdXRhdGlvbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIG9wdGlvbnMpIHtcbiAgdmFyIGhhc2hGbiA9IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnF1ZXJ5S2V5SGFzaEZuKSB8fCBoYXNoUXVlcnlLZXk7XG4gIHJldHVybiBoYXNoRm4ocXVlcnlLZXkpO1xufVxuLyoqXG4gKiBEZWZhdWx0IHF1ZXJ5IGtleXMgaGFzaCBmdW5jdGlvbi5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzaFF1ZXJ5S2V5KHF1ZXJ5S2V5KSB7XG4gIHZhciBhc0FycmF5ID0gZW5zdXJlUXVlcnlLZXlBcnJheShxdWVyeUtleSk7XG4gIHJldHVybiBzdGFibGVWYWx1ZUhhc2goYXNBcnJheSk7XG59XG4vKipcbiAqIEhhc2hlcyB0aGUgdmFsdWUgaW50byBhIHN0YWJsZSBoYXNoLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFibGVWYWx1ZUhhc2godmFsdWUpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBmdW5jdGlvbiAoXywgdmFsKSB7XG4gICAgcmV0dXJuIGlzUGxhaW5PYmplY3QodmFsKSA/IE9iamVjdC5rZXlzKHZhbCkuc29ydCgpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsW2tleV07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHt9KSA6IHZhbDtcbiAgfSk7XG59XG4vKipcbiAqIENoZWNrcyBpZiBrZXkgYGJgIHBhcnRpYWxseSBtYXRjaGVzIHdpdGgga2V5IGBhYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbE1hdGNoS2V5KGEsIGIpIHtcbiAgcmV0dXJuIHBhcnRpYWxEZWVwRXF1YWwoZW5zdXJlUXVlcnlLZXlBcnJheShhKSwgZW5zdXJlUXVlcnlLZXlBcnJheShiKSk7XG59XG4vKipcbiAqIENoZWNrcyBpZiBgYmAgcGFydGlhbGx5IG1hdGNoZXMgd2l0aCBgYWAuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWxEZWVwRXF1YWwoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiAhT2JqZWN0LmtleXMoYikuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gIXBhcnRpYWxEZWVwRXF1YWwoYVtrZXldLCBiW2tleV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYGFgIGlmIGBiYCBpcyBkZWVwbHkgZXF1YWwuXG4gKiBJZiBub3QsIGl0IHdpbGwgcmVwbGFjZSBhbnkgZGVlcGx5IGVxdWFsIGNoaWxkcmVuIG9mIGBiYCB3aXRoIHRob3NlIG9mIGBhYC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgZm9yIHN0cnVjdHVyYWwgc2hhcmluZyBiZXR3ZWVuIEpTT04gdmFsdWVzIGZvciBleGFtcGxlLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRXF1YWxEZWVwKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIHZhciBhcnJheSA9IEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKTtcblxuICBpZiAoYXJyYXkgfHwgaXNQbGFpbk9iamVjdChhKSAmJiBpc1BsYWluT2JqZWN0KGIpKSB7XG4gICAgdmFyIGFTaXplID0gYXJyYXkgPyBhLmxlbmd0aCA6IE9iamVjdC5rZXlzKGEpLmxlbmd0aDtcbiAgICB2YXIgYkl0ZW1zID0gYXJyYXkgPyBiIDogT2JqZWN0LmtleXMoYik7XG4gICAgdmFyIGJTaXplID0gYkl0ZW1zLmxlbmd0aDtcbiAgICB2YXIgY29weSA9IGFycmF5ID8gW10gOiB7fTtcbiAgICB2YXIgZXF1YWxJdGVtcyA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJTaXplOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBhcnJheSA/IGkgOiBiSXRlbXNbaV07XG4gICAgICBjb3B5W2tleV0gPSByZXBsYWNlRXF1YWxEZWVwKGFba2V5XSwgYltrZXldKTtcblxuICAgICAgaWYgKGNvcHlba2V5XSA9PT0gYVtrZXldKSB7XG4gICAgICAgIGVxdWFsSXRlbXMrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYVNpemUgPT09IGJTaXplICYmIGVxdWFsSXRlbXMgPT09IGFTaXplID8gYSA6IGNvcHk7XG4gIH1cblxuICByZXR1cm4gYjtcbn1cbi8qKlxuICogU2hhbGxvdyBjb21wYXJlIG9iamVjdHMuIE9ubHkgd29ya3Mgd2l0aCBvYmplY3RzIHRoYXQgYWx3YXlzIGhhdmUgdGhlIHNhbWUgcHJvcGVydGllcy5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2hhbGxvd0VxdWFsT2JqZWN0cyhhLCBiKSB7XG4gIGlmIChhICYmICFiIHx8IGIgJiYgIWEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBrZXkgaW4gYSkge1xuICAgIGlmIChhW2tleV0gIT09IGJba2V5XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufSAvLyBDb3BpZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtcGxhaW4tb2JqZWN0XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG8pIHtcbiAgaWYgKCFoYXNPYmplY3RQcm90b3R5cGUobykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSWYgaGFzIG1vZGlmaWVkIGNvbnN0cnVjdG9yXG5cblxuICB2YXIgY3RvciA9IG8uY29uc3RydWN0b3I7XG5cbiAgaWYgKHR5cGVvZiBjdG9yID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIElmIGhhcyBtb2RpZmllZCBwcm90b3R5cGVcblxuXG4gIHZhciBwcm90ID0gY3Rvci5wcm90b3R5cGU7XG5cbiAgaWYgKCFoYXNPYmplY3RQcm90b3R5cGUocHJvdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSWYgY29uc3RydWN0b3IgZG9lcyBub3QgaGF2ZSBhbiBPYmplY3Qtc3BlY2lmaWMgbWV0aG9kXG5cblxuICBpZiAoIXByb3QuaGFzT3duUHJvcGVydHkoJ2lzUHJvdG90eXBlT2YnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBNb3N0IGxpa2VseSBhIHBsYWluIE9iamVjdFxuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGhhc09iamVjdFByb3RvdHlwZShvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNRdWVyeUtleSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0Vycm9yKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVycm9yO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKHRpbWVvdXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KTtcbiAgfSk7XG59XG4vKipcbiAqIFNjaGVkdWxlcyBhIG1pY3JvdGFzay5cbiAqIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBzY2hlZHVsZSBzdGF0ZSB1cGRhdGVzIGFmdGVyIHJlbmRlcmluZy5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVNaWNyb3Rhc2soY2FsbGJhY2spIHtcbiAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihjYWxsYmFjaykuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFib3J0Q29udHJvbGxlcigpIHtcbiAgaWYgKHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICB9XG59IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB2YXIgRm9jdXNNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKEZvY3VzTWFuYWdlciwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gRm9jdXNNYW5hZ2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5zZXR1cCA9IGZ1bmN0aW9uIChvbkZvY3VzKSB7XG4gICAgICB2YXIgX3dpbmRvdztcblxuICAgICAgaWYgKCFpc1NlcnZlciAmJiAoKF93aW5kb3cgPSB3aW5kb3cpID09IG51bGwgPyB2b2lkIDAgOiBfd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgIHJldHVybiBvbkZvY3VzKCk7XG4gICAgICAgIH07IC8vIExpc3RlbiB0byB2aXNpYmlsbGl0eWNoYW5nZSBhbmQgZm9jdXNcblxuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBCZSBzdXJlIHRvIHVuc3Vic2NyaWJlIGlmIGEgbmV3IGhhbmRsZXIgaXMgc2V0XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBsaXN0ZW5lcik7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgbGlzdGVuZXIpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gRm9jdXNNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuY2xlYW51cCkge1xuICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKHRoaXMuc2V0dXApO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB2YXIgX3RoaXMkY2xlYW51cDtcblxuICAgICAgKF90aGlzJGNsZWFudXAgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwLmNhbGwodGhpcyk7XG4gICAgICB0aGlzLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gc2V0RXZlbnRMaXN0ZW5lcihzZXR1cCkge1xuICAgIHZhciBfdGhpcyRjbGVhbnVwMixcbiAgICAgICAgX3RoaXMyID0gdGhpcztcblxuICAgIHRoaXMuc2V0dXAgPSBzZXR1cDtcbiAgICAoX3RoaXMkY2xlYW51cDIgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwMi5jYWxsKHRoaXMpO1xuICAgIHRoaXMuY2xlYW51cCA9IHNldHVwKGZ1bmN0aW9uIChmb2N1c2VkKSB7XG4gICAgICBpZiAodHlwZW9mIGZvY3VzZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICBfdGhpczIuc2V0Rm9jdXNlZChmb2N1c2VkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzMi5vbkZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnNldEZvY3VzZWQgPSBmdW5jdGlvbiBzZXRGb2N1c2VkKGZvY3VzZWQpIHtcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xuXG4gICAgaWYgKGZvY3VzZWQpIHtcbiAgICAgIHRoaXMub25Gb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRm9jdXNlZCA9IGZ1bmN0aW9uIGlzRm9jdXNlZCgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb2N1c2VkO1xuICAgIH0gLy8gZG9jdW1lbnQgZ2xvYmFsIGNhbiBiZSB1bmF2YWlsYWJsZSBpbiByZWFjdCBuYXRpdmVcblxuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBbdW5kZWZpbmVkLCAndmlzaWJsZScsICdwcmVyZW5kZXInXS5pbmNsdWRlcyhkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUpO1xuICB9O1xuXG4gIHJldHVybiBGb2N1c01hbmFnZXI7XG59KFN1YnNjcmliYWJsZSk7XG5leHBvcnQgdmFyIGZvY3VzTWFuYWdlciA9IG5ldyBGb2N1c01hbmFnZXIoKTsiLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBpc1NlcnZlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHZhciBPbmxpbmVNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKE9ubGluZU1hbmFnZXIsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIE9ubGluZU1hbmFnZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcblxuICAgIF90aGlzLnNldHVwID0gZnVuY3Rpb24gKG9uT25saW5lKSB7XG4gICAgICB2YXIgX3dpbmRvdztcblxuICAgICAgaWYgKCFpc1NlcnZlciAmJiAoKF93aW5kb3cgPSB3aW5kb3cpID09IG51bGwgPyB2b2lkIDAgOiBfd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgIHJldHVybiBvbk9ubGluZSgpO1xuICAgICAgICB9OyAvLyBMaXN0ZW4gdG8gb25saW5lXG5cblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIEJlIHN1cmUgdG8gdW5zdWJzY3JpYmUgaWYgYSBuZXcgaGFuZGxlciBpcyBzZXRcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb25saW5lJywgbGlzdGVuZXIpO1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgbGlzdGVuZXIpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gT25saW5lTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmNsZWFudXApIHtcbiAgICAgIHRoaXMuc2V0RXZlbnRMaXN0ZW5lcih0aGlzLnNldHVwKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdmFyIF90aGlzJGNsZWFudXA7XG5cbiAgICAgIChfdGhpcyRjbGVhbnVwID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cC5jYWxsKHRoaXMpO1xuICAgICAgdGhpcy5jbGVhbnVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIHNldEV2ZW50TGlzdGVuZXIoc2V0dXApIHtcbiAgICB2YXIgX3RoaXMkY2xlYW51cDIsXG4gICAgICAgIF90aGlzMiA9IHRoaXM7XG5cbiAgICB0aGlzLnNldHVwID0gc2V0dXA7XG4gICAgKF90aGlzJGNsZWFudXAyID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cDIuY2FsbCh0aGlzKTtcbiAgICB0aGlzLmNsZWFudXAgPSBzZXR1cChmdW5jdGlvbiAob25saW5lKSB7XG4gICAgICBpZiAodHlwZW9mIG9ubGluZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIF90aGlzMi5zZXRPbmxpbmUob25saW5lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzMi5vbk9ubGluZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5zZXRPbmxpbmUgPSBmdW5jdGlvbiBzZXRPbmxpbmUob25saW5lKSB7XG4gICAgdGhpcy5vbmxpbmUgPSBvbmxpbmU7XG5cbiAgICBpZiAob25saW5lKSB7XG4gICAgICB0aGlzLm9uT25saW5lKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc09ubGluZSA9IGZ1bmN0aW9uIGlzT25saW5lKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5vbmxpbmUgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHRoaXMub25saW5lO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgbmF2aWdhdG9yLm9uTGluZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3Iub25MaW5lO1xuICB9O1xuXG4gIHJldHVybiBPbmxpbmVNYW5hZ2VyO1xufShTdWJzY3JpYmFibGUpO1xuZXhwb3J0IHZhciBvbmxpbmVNYW5hZ2VyID0gbmV3IE9ubGluZU1hbmFnZXIoKTsiLCAiaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSAnLi9mb2N1c01hbmFnZXInO1xuaW1wb3J0IHsgb25saW5lTWFuYWdlciB9IGZyb20gJy4vb25saW5lTWFuYWdlcic7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJy4vdXRpbHMnO1xuXG5mdW5jdGlvbiBkZWZhdWx0UmV0cnlEZWxheShmYWlsdXJlQ291bnQpIHtcbiAgcmV0dXJuIE1hdGgubWluKDEwMDAgKiBNYXRoLnBvdygyLCBmYWlsdXJlQ291bnQpLCAzMDAwMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbmNlbGFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiAodmFsdWUgPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlLmNhbmNlbCkgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnQgdmFyIENhbmNlbGxlZEVycm9yID0gZnVuY3Rpb24gQ2FuY2VsbGVkRXJyb3Iob3B0aW9ucykge1xuICB0aGlzLnJldmVydCA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucmV2ZXJ0O1xuICB0aGlzLnNpbGVudCA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lsZW50O1xufTtcbmV4cG9ydCBmdW5jdGlvbiBpc0NhbmNlbGxlZEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIENhbmNlbGxlZEVycm9yO1xufSAvLyBDTEFTU1xuXG5leHBvcnQgdmFyIFJldHJ5ZXIgPSBmdW5jdGlvbiBSZXRyeWVyKGNvbmZpZykge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBjYW5jZWxSZXRyeSA9IGZhbHNlO1xuICB2YXIgY2FuY2VsRm47XG4gIHZhciBjb250aW51ZUZuO1xuICB2YXIgcHJvbWlzZVJlc29sdmU7XG4gIHZhciBwcm9taXNlUmVqZWN0O1xuICB0aGlzLmFib3J0ID0gY29uZmlnLmFib3J0O1xuXG4gIHRoaXMuY2FuY2VsID0gZnVuY3Rpb24gKGNhbmNlbE9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2FuY2VsRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNhbmNlbEZuKGNhbmNlbE9wdGlvbnMpO1xuICB9O1xuXG4gIHRoaXMuY2FuY2VsUmV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2FuY2VsUmV0cnkgPSB0cnVlO1xuICB9O1xuXG4gIHRoaXMuY29udGludWVSZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjYW5jZWxSZXRyeSA9IGZhbHNlO1xuICB9O1xuXG4gIHRoaXMuY29udGludWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVlRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRpbnVlRm4oKTtcbiAgfTtcblxuICB0aGlzLmZhaWx1cmVDb3VudCA9IDA7XG4gIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgdGhpcy5pc1Jlc29sdmVkID0gZmFsc2U7XG4gIHRoaXMuaXNUcmFuc3BvcnRDYW5jZWxhYmxlID0gZmFsc2U7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChvdXRlclJlc29sdmUsIG91dGVyUmVqZWN0KSB7XG4gICAgcHJvbWlzZVJlc29sdmUgPSBvdXRlclJlc29sdmU7XG4gICAgcHJvbWlzZVJlamVjdCA9IG91dGVyUmVqZWN0O1xuICB9KTtcblxuICB2YXIgcmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUodmFsdWUpIHtcbiAgICBpZiAoIV90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgIF90aGlzLmlzUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uU3VjY2Vzcyh2YWx1ZSk7XG4gICAgICBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gICAgICBwcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciByZWplY3QgPSBmdW5jdGlvbiByZWplY3QodmFsdWUpIHtcbiAgICBpZiAoIV90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgIF90aGlzLmlzUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgY29uZmlnLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkVycm9yKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRpbnVlRm4oKTtcbiAgICAgIHByb21pc2VSZWplY3QodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcGF1c2UgPSBmdW5jdGlvbiBwYXVzZSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGNvbnRpbnVlUmVzb2x2ZSkge1xuICAgICAgY29udGludWVGbiA9IGNvbnRpbnVlUmVzb2x2ZTtcbiAgICAgIF90aGlzLmlzUGF1c2VkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vblBhdXNlID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25QYXVzZSgpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY29udGludWVGbiA9IHVuZGVmaW5lZDtcbiAgICAgIF90aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gICAgICBjb25maWcub25Db250aW51ZSA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uQ29udGludWUoKTtcbiAgICB9KTtcbiAgfTsgLy8gQ3JlYXRlIGxvb3AgZnVuY3Rpb25cblxuXG4gIHZhciBydW4gPSBmdW5jdGlvbiBydW4oKSB7XG4gICAgLy8gRG8gbm90aGluZyBpZiBhbHJlYWR5IHJlc29sdmVkXG4gICAgaWYgKF90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJvbWlzZU9yVmFsdWU7IC8vIEV4ZWN1dGUgcXVlcnlcblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlT3JWYWx1ZSA9IGNvbmZpZy5mbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwcm9taXNlT3JWYWx1ZSA9IFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9IC8vIENyZWF0ZSBjYWxsYmFjayB0byBjYW5jZWwgdGhpcyBmZXRjaFxuXG5cbiAgICBjYW5jZWxGbiA9IGZ1bmN0aW9uIGNhbmNlbEZuKGNhbmNlbE9wdGlvbnMpIHtcbiAgICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgICByZWplY3QobmV3IENhbmNlbGxlZEVycm9yKGNhbmNlbE9wdGlvbnMpKTtcbiAgICAgICAgX3RoaXMuYWJvcnQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLmFib3J0KCk7IC8vIENhbmNlbCB0cmFuc3BvcnQgaWYgc3VwcG9ydGVkXG5cbiAgICAgICAgaWYgKGlzQ2FuY2VsYWJsZShwcm9taXNlT3JWYWx1ZSkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZU9yVmFsdWUuY2FuY2VsKCk7XG4gICAgICAgICAgfSBjYXRjaCAoX3VudXNlZCkge31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07IC8vIENoZWNrIGlmIHRoZSB0cmFuc3BvcnQgbGF5ZXIgc3VwcG9ydCBjYW5jZWxsYXRpb25cblxuXG4gICAgX3RoaXMuaXNUcmFuc3BvcnRDYW5jZWxhYmxlID0gaXNDYW5jZWxhYmxlKHByb21pc2VPclZhbHVlKTtcbiAgICBQcm9taXNlLnJlc29sdmUocHJvbWlzZU9yVmFsdWUpLnRoZW4ocmVzb2x2ZSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICB2YXIgX2NvbmZpZyRyZXRyeSwgX2NvbmZpZyRyZXRyeURlbGF5O1xuXG4gICAgICAvLyBTdG9wIGlmIHRoZSBmZXRjaCBpcyBhbHJlYWR5IHJlc29sdmVkXG4gICAgICBpZiAoX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIERvIHdlIG5lZWQgdG8gcmV0cnkgdGhlIHJlcXVlc3Q/XG5cblxuICAgICAgdmFyIHJldHJ5ID0gKF9jb25maWckcmV0cnkgPSBjb25maWcucmV0cnkpICE9IG51bGwgPyBfY29uZmlnJHJldHJ5IDogMztcbiAgICAgIHZhciByZXRyeURlbGF5ID0gKF9jb25maWckcmV0cnlEZWxheSA9IGNvbmZpZy5yZXRyeURlbGF5KSAhPSBudWxsID8gX2NvbmZpZyRyZXRyeURlbGF5IDogZGVmYXVsdFJldHJ5RGVsYXk7XG4gICAgICB2YXIgZGVsYXkgPSB0eXBlb2YgcmV0cnlEZWxheSA9PT0gJ2Z1bmN0aW9uJyA/IHJldHJ5RGVsYXkoX3RoaXMuZmFpbHVyZUNvdW50LCBlcnJvcikgOiByZXRyeURlbGF5O1xuICAgICAgdmFyIHNob3VsZFJldHJ5ID0gcmV0cnkgPT09IHRydWUgfHwgdHlwZW9mIHJldHJ5ID09PSAnbnVtYmVyJyAmJiBfdGhpcy5mYWlsdXJlQ291bnQgPCByZXRyeSB8fCB0eXBlb2YgcmV0cnkgPT09ICdmdW5jdGlvbicgJiYgcmV0cnkoX3RoaXMuZmFpbHVyZUNvdW50LCBlcnJvcik7XG5cbiAgICAgIGlmIChjYW5jZWxSZXRyeSB8fCAhc2hvdWxkUmV0cnkpIHtcbiAgICAgICAgLy8gV2UgYXJlIGRvbmUgaWYgdGhlIHF1ZXJ5IGRvZXMgbm90IG5lZWQgdG8gYmUgcmV0cmllZFxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmZhaWx1cmVDb3VudCsrOyAvLyBOb3RpZnkgb24gZmFpbFxuXG4gICAgICBjb25maWcub25GYWlsID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25GYWlsKF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpOyAvLyBEZWxheVxuXG4gICAgICBzbGVlcChkZWxheSkgLy8gUGF1c2UgaWYgdGhlIGRvY3VtZW50IGlzIG5vdCB2aXNpYmxlIG9yIHdoZW4gdGhlIGRldmljZSBpcyBvZmZsaW5lXG4gICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpIHx8ICFvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgICByZXR1cm4gcGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjYW5jZWxSZXRyeSkge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcnVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9OyAvLyBTdGFydCBsb29wXG5cblxuICBydW4oKTtcbn07IiwgImltcG9ydCB7IHNjaGVkdWxlTWljcm90YXNrIH0gZnJvbSAnLi91dGlscyc7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIE5vdGlmeU1hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBOb3RpZnlNYW5hZ2VyKCkge1xuICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IDA7XG5cbiAgICB0aGlzLm5vdGlmeUZuID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG5cbiAgICB0aGlzLmJhdGNoTm90aWZ5Rm4gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBOb3RpZnlNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYmF0Y2ggPSBmdW5jdGlvbiBiYXRjaChjYWxsYmFjaykge1xuICAgIHZhciByZXN1bHQ7XG4gICAgdGhpcy50cmFuc2FjdGlvbnMrKztcblxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsYmFjaygpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9ucy0tO1xuXG4gICAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb25zKSB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIF9wcm90by5zY2hlZHVsZSA9IGZ1bmN0aW9uIHNjaGVkdWxlKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9ucykge1xuICAgICAgdGhpcy5xdWV1ZS5wdXNoKGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5ub3RpZnlGbihjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEFsbCBjYWxscyB0byB0aGUgd3JhcHBlZCBmdW5jdGlvbiB3aWxsIGJlIGJhdGNoZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmJhdGNoQ2FsbHMgPSBmdW5jdGlvbiBiYXRjaENhbGxzKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhbGxiYWNrLmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIHF1ZXVlID0gdGhpcy5xdWV1ZTtcbiAgICB0aGlzLnF1ZXVlID0gW107XG5cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICBzY2hlZHVsZU1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5iYXRjaE5vdGlmeUZuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBxdWV1ZS5mb3JFYWNoKGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgX3RoaXMzLm5vdGlmeUZuKGNhbGxiYWNrKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBzZXQgYSBjdXN0b20gbm90aWZ5IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGZvciBleGFtcGxlIHdyYXAgbm90aWZpY2F0aW9ucyB3aXRoIGBSZWFjdC5hY3RgIHdoaWxlIHJ1bm5pbmcgdGVzdHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldE5vdGlmeUZ1bmN0aW9uID0gZnVuY3Rpb24gc2V0Tm90aWZ5RnVuY3Rpb24oZm4pIHtcbiAgICB0aGlzLm5vdGlmeUZuID0gZm47XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBzZXQgYSBjdXN0b20gZnVuY3Rpb24gdG8gYmF0Y2ggbm90aWZpY2F0aW9ucyB0b2dldGhlciBpbnRvIGEgc2luZ2xlIHRpY2suXG4gICAqIEJ5IGRlZmF1bHQgUmVhY3QgUXVlcnkgd2lsbCB1c2UgdGhlIGJhdGNoIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IFJlYWN0RE9NIG9yIFJlYWN0IE5hdGl2ZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbiA9IGZ1bmN0aW9uIHNldEJhdGNoTm90aWZ5RnVuY3Rpb24oZm4pIHtcbiAgICB0aGlzLmJhdGNoTm90aWZ5Rm4gPSBmbjtcbiAgfTtcblxuICByZXR1cm4gTm90aWZ5TWFuYWdlcjtcbn0oKTsgLy8gU0lOR0xFVE9OXG5cbmV4cG9ydCB2YXIgbm90aWZ5TWFuYWdlciA9IG5ldyBOb3RpZnlNYW5hZ2VyKCk7IiwgIi8vIFRZUEVTXG4vLyBGVU5DVElPTlNcbnZhciBsb2dnZXIgPSBjb25zb2xlO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcigpIHtcbiAgcmV0dXJuIGxvZ2dlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2dnZXIobmV3TG9nZ2VyKSB7XG4gIGxvZ2dlciA9IG5ld0xvZ2dlcjtcbn0iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBnZXRBYm9ydENvbnRyb2xsZXIsIGZ1bmN0aW9uYWxVcGRhdGUsIGlzVmFsaWRUaW1lb3V0LCBub29wLCByZXBsYWNlRXF1YWxEZWVwLCB0aW1lVW50aWxTdGFsZSwgZW5zdXJlUXVlcnlLZXlBcnJheSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBSZXRyeWVyLCBpc0NhbmNlbGxlZEVycm9yIH0gZnJvbSAnLi9yZXRyeWVyJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnkgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeShjb25maWcpIHtcbiAgICB0aGlzLmFib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhhZE9ic2VydmVycyA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBjb25maWcuZGVmYXVsdE9wdGlvbnM7XG4gICAgdGhpcy5zZXRPcHRpb25zKGNvbmZpZy5vcHRpb25zKTtcbiAgICB0aGlzLm9ic2VydmVycyA9IFtdO1xuICAgIHRoaXMuY2FjaGUgPSBjb25maWcuY2FjaGU7XG4gICAgdGhpcy5xdWVyeUtleSA9IGNvbmZpZy5xdWVyeUtleTtcbiAgICB0aGlzLnF1ZXJ5SGFzaCA9IGNvbmZpZy5xdWVyeUhhc2g7XG4gICAgdGhpcy5pbml0aWFsU3RhdGUgPSBjb25maWcuc3RhdGUgfHwgdGhpcy5nZXREZWZhdWx0U3RhdGUodGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5pbml0aWFsU3RhdGU7XG4gICAgdGhpcy5tZXRhID0gY29uZmlnLm1ldGE7XG4gICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnkucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRPcHRpb25zID0gZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMkY2FjaGVUaTtcblxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICB0aGlzLm1ldGEgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLm1ldGE7IC8vIERlZmF1bHQgdG8gNSBtaW51dGVzIGlmIG5vdCBjYWNoZSB0aW1lIGlzIHNldFxuXG4gICAgdGhpcy5jYWNoZVRpbWUgPSBNYXRoLm1heCh0aGlzLmNhY2hlVGltZSB8fCAwLCAoX3RoaXMkb3B0aW9ucyRjYWNoZVRpID0gdGhpcy5vcHRpb25zLmNhY2hlVGltZSkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkY2FjaGVUaSA6IDUgKiA2MCAqIDEwMDApO1xuICB9O1xuXG4gIF9wcm90by5zZXREZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2NoZWR1bGVHYyA9IGZ1bmN0aW9uIHNjaGVkdWxlR2MoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcblxuICAgIGlmIChpc1ZhbGlkVGltZW91dCh0aGlzLmNhY2hlVGltZSkpIHtcbiAgICAgIHRoaXMuZ2NUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICB9LCB0aGlzLmNhY2hlVGltZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhckdjVGltZW91dCA9IGZ1bmN0aW9uIGNsZWFyR2NUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLmdjVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZ2NUaW1lb3V0KTtcbiAgICAgIHRoaXMuZ2NUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub3B0aW9uYWxSZW1vdmUgPSBmdW5jdGlvbiBvcHRpb25hbFJlbW92ZSgpIHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuaXNGZXRjaGluZykge1xuICAgICAgICBpZiAodGhpcy5oYWRPYnNlcnZlcnMpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYWNoZS5yZW1vdmUodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXREYXRhID0gZnVuY3Rpb24gc2V0RGF0YSh1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMkaXNEYXRhRSwgX3RoaXMkb3B0aW9ucztcblxuICAgIHZhciBwcmV2RGF0YSA9IHRoaXMuc3RhdGUuZGF0YTsgLy8gR2V0IHRoZSBuZXcgZGF0YVxuXG4gICAgdmFyIGRhdGEgPSBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIHByZXZEYXRhKTsgLy8gVXNlIHByZXYgZGF0YSBpZiBhbiBpc0RhdGFFcXVhbCBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCByZXR1cm5zIGB0cnVlYFxuXG4gICAgaWYgKChfdGhpcyRvcHRpb25zJGlzRGF0YUUgPSAoX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0aW9ucykuaXNEYXRhRXF1YWwpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGlzRGF0YUUuY2FsbChfdGhpcyRvcHRpb25zLCBwcmV2RGF0YSwgZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBwcmV2RGF0YTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIFN0cnVjdHVyYWxseSBzaGFyZSBkYXRhIGJldHdlZW4gcHJldiBhbmQgbmV3IGRhdGEgaWYgbmVlZGVkXG4gICAgICBkYXRhID0gcmVwbGFjZUVxdWFsRGVlcChwcmV2RGF0YSwgZGF0YSk7XG4gICAgfSAvLyBTZXQgZGF0YSBhbmQgbWFyayBpdCBhcyBjYWNoZWRcblxuXG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy51cGRhdGVkQXRcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICBfcHJvdG8uc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSwgc2V0U3RhdGVPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnc2V0U3RhdGUnLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0U3RhdGVPcHRpb25zOiBzZXRTdGF0ZU9wdGlvbnNcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjtcblxuICAgIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuICAgIChfdGhpcyRyZXRyeWVyID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllci5jYW5jZWwob3B0aW9ucyk7XG4gICAgcmV0dXJuIHByb21pc2UgPyBwcm9taXNlLnRoZW4obm9vcCkuY2F0Y2gobm9vcCkgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICAgIHRoaXMuY2FuY2VsKHtcbiAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5pbml0aWFsU3RhdGUpO1xuICB9O1xuXG4gIF9wcm90by5pc0FjdGl2ZSA9IGZ1bmN0aW9uIGlzQWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVycy5zb21lKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIG9ic2VydmVyLm9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzRmV0Y2hpbmc7XG4gIH07XG5cbiAgX3Byb3RvLmlzU3RhbGUgPSBmdW5jdGlvbiBpc1N0YWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgIXRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCB8fCB0aGlzLm9ic2VydmVycy5zb21lKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKS5pc1N0YWxlO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc1N0YWxlQnlUaW1lID0gZnVuY3Rpb24gaXNTdGFsZUJ5VGltZShzdGFsZVRpbWUpIHtcbiAgICBpZiAoc3RhbGVUaW1lID09PSB2b2lkIDApIHtcbiAgICAgIHN0YWxlVGltZSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCB8fCAhdGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0IHx8ICF0aW1lVW50aWxTdGFsZSh0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQsIHN0YWxlVGltZSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyMjtcblxuICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnNob3VsZEZldGNoT25XaW5kb3dGb2N1cygpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5yZWZldGNoKCk7XG4gICAgfSAvLyBDb250aW51ZSBmZXRjaCBpZiBjdXJyZW50bHkgcGF1c2VkXG5cblxuICAgIChfdGhpcyRyZXRyeWVyMiA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIyLmNvbnRpbnVlKCk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXIzO1xuXG4gICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc2hvdWxkRmV0Y2hPblJlY29ubmVjdCgpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5yZWZldGNoKCk7XG4gICAgfSAvLyBDb250aW51ZSBmZXRjaCBpZiBjdXJyZW50bHkgcGF1c2VkXG5cblxuICAgIChfdGhpcyRyZXRyeWVyMyA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIzLmNvbnRpbnVlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmFkZE9ic2VydmVyID0gZnVuY3Rpb24gYWRkT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcikgPT09IC0xKSB7XG4gICAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICAgIHRoaXMuaGFkT2JzZXJ2ZXJzID0gdHJ1ZTsgLy8gU3RvcCB0aGUgcXVlcnkgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZFxuXG4gICAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgICB0aGlzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdvYnNlcnZlckFkZGVkJyxcbiAgICAgICAgcXVlcnk6IHRoaXMsXG4gICAgICAgIG9ic2VydmVyOiBvYnNlcnZlclxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpICE9PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IG9ic2VydmVyO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIElmIHRoZSB0cmFuc3BvcnQgbGF5ZXIgZG9lcyBub3Qgc3VwcG9ydCBjYW5jZWxsYXRpb25cbiAgICAgICAgLy8gd2UnbGwgbGV0IHRoZSBxdWVyeSBjb250aW51ZSBzbyB0aGUgcmVzdWx0IGNhbiBiZSBjYWNoZWRcbiAgICAgICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgICAgIGlmICh0aGlzLnJldHJ5ZXIuaXNUcmFuc3BvcnRDYW5jZWxhYmxlIHx8IHRoaXMuYWJvcnRTaWduYWxDb25zdW1lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXRyeWVyLmNhbmNlbCh7XG4gICAgICAgICAgICAgIHJldmVydDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmV0cnllci5jYW5jZWxSZXRyeSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhY2hlVGltZSkge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ29ic2VydmVyUmVtb3ZlZCcsXG4gICAgICAgIHF1ZXJ5OiB0aGlzLFxuICAgICAgICBvYnNlcnZlcjogb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0T2JzZXJ2ZXJzQ291bnQgPSBmdW5jdGlvbiBnZXRPYnNlcnZlcnNDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pbnZhbGlkYXRlID0gZnVuY3Rpb24gaW52YWxpZGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdpbnZhbGlkYXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5mZXRjaCA9IGZ1bmN0aW9uIGZldGNoKG9wdGlvbnMsIGZldGNoT3B0aW9ucykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzLFxuICAgICAgICBfdGhpcyRvcHRpb25zJGJlaGF2aW8sXG4gICAgICAgIF9jb250ZXh0JGZldGNoT3B0aW9ucyxcbiAgICAgICAgX2Fib3J0Q29udHJvbGxlciRhYm9yO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuaXNGZXRjaGluZykge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiAoZmV0Y2hPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE9wdGlvbnMuY2FuY2VsUmVmZXRjaCkpIHtcbiAgICAgICAgLy8gU2lsZW50bHkgY2FuY2VsIGN1cnJlbnQgZmV0Y2ggaWYgdGhlIHVzZXIgd2FudHMgdG8gY2FuY2VsIHJlZmV0Y2hlc1xuICAgICAgICB0aGlzLmNhbmNlbCh7XG4gICAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb21pc2UpIHtcbiAgICAgICAgdmFyIF90aGlzJHJldHJ5ZXI0O1xuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHJldHJpZXMgdGhhdCB3ZXJlIHBvdGVudGlhbGx5IGNhbmNlbGxlZCBkdWUgdG8gdW5tb3VudHMgY2FuIGNvbnRpbnVlXG4gICAgICAgIChfdGhpcyRyZXRyeWVyNCA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXI0LmNvbnRpbnVlUmV0cnkoKTsgLy8gUmV0dXJuIGN1cnJlbnQgcHJvbWlzZSBpZiB3ZSBhcmUgYWxyZWFkeSBmZXRjaGluZ1xuXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gICAgICB9XG4gICAgfSAvLyBVcGRhdGUgY29uZmlnIGlmIHBhc3NlZCwgb3RoZXJ3aXNlIHRoZSBjb25maWcgZnJvbSB0aGUgbGFzdCBleGVjdXRpb24gaXMgdXNlZFxuXG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIH0gLy8gVXNlIHRoZSBvcHRpb25zIGZyb20gdGhlIGZpcnN0IG9ic2VydmVyIHdpdGggYSBxdWVyeSBmdW5jdGlvbiBpZiBubyBmdW5jdGlvbiBpcyBmb3VuZC5cbiAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgcXVlcnkgaXMgaHlkcmF0ZWQgb3IgY3JlYXRlZCB3aXRoIHNldFF1ZXJ5RGF0YS5cblxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geC5vcHRpb25zLnF1ZXJ5Rm47XG4gICAgICB9KTtcblxuICAgICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyhvYnNlcnZlci5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcXVlcnlLZXkgPSBlbnN1cmVRdWVyeUtleUFycmF5KHRoaXMucXVlcnlLZXkpO1xuICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBnZXRBYm9ydENvbnRyb2xsZXIoKTsgLy8gQ3JlYXRlIHF1ZXJ5IGZ1bmN0aW9uIGNvbnRleHRcblxuICAgIHZhciBxdWVyeUZuQ29udGV4dCA9IHtcbiAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgIHBhZ2VQYXJhbTogdW5kZWZpbmVkLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlGbkNvbnRleHQsICdzaWduYWwnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgICAgICBfdGhpczIuYWJvcnRTaWduYWxDb25zdW1lZCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pOyAvLyBDcmVhdGUgZmV0Y2ggZnVuY3Rpb25cblxuICAgIHZhciBmZXRjaEZuID0gZnVuY3Rpb24gZmV0Y2hGbigpIHtcbiAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ01pc3NpbmcgcXVlcnlGbicpO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuYWJvcnRTaWduYWxDb25zdW1lZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLnF1ZXJ5Rm4ocXVlcnlGbkNvbnRleHQpO1xuICAgIH07IC8vIFRyaWdnZXIgYmVoYXZpb3IgaG9va1xuXG5cbiAgICB2YXIgY29udGV4dCA9IHtcbiAgICAgIGZldGNoT3B0aW9uczogZmV0Y2hPcHRpb25zLFxuICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICBmZXRjaEZuOiBmZXRjaEZuLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcblxuICAgIGlmICgoX3RoaXMkb3B0aW9ucyRiZWhhdmlvID0gdGhpcy5vcHRpb25zLmJlaGF2aW9yKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRiZWhhdmlvLm9uRmV0Y2gpIHtcbiAgICAgIHZhciBfdGhpcyRvcHRpb25zJGJlaGF2aW8yO1xuXG4gICAgICAoX3RoaXMkb3B0aW9ucyRiZWhhdmlvMiA9IHRoaXMub3B0aW9ucy5iZWhhdmlvcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkYmVoYXZpbzIub25GZXRjaChjb250ZXh0KTtcbiAgICB9IC8vIFN0b3JlIHN0YXRlIGluIGNhc2UgdGhlIGN1cnJlbnQgZmV0Y2ggbmVlZHMgdG8gYmUgcmV2ZXJ0ZWRcblxuXG4gICAgdGhpcy5yZXZlcnRTdGF0ZSA9IHRoaXMuc3RhdGU7IC8vIFNldCB0byBmZXRjaGluZyBzdGF0ZSBpZiBub3QgYWxyZWFkeSBpbiBpdFxuXG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzRmV0Y2hpbmcgfHwgdGhpcy5zdGF0ZS5mZXRjaE1ldGEgIT09ICgoX2NvbnRleHQkZmV0Y2hPcHRpb25zID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMubWV0YSkpIHtcbiAgICAgIHZhciBfY29udGV4dCRmZXRjaE9wdGlvbnMyO1xuXG4gICAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ2ZldGNoJyxcbiAgICAgICAgbWV0YTogKF9jb250ZXh0JGZldGNoT3B0aW9uczIgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczIubWV0YVxuICAgICAgfSk7XG4gICAgfSAvLyBUcnkgdG8gZmV0Y2ggdGhlIGRhdGFcblxuXG4gICAgdGhpcy5yZXRyeWVyID0gbmV3IFJldHJ5ZXIoe1xuICAgICAgZm46IGNvbnRleHQuZmV0Y2hGbixcbiAgICAgIGFib3J0OiBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IChfYWJvcnRDb250cm9sbGVyJGFib3IgPSBhYm9ydENvbnRyb2xsZXIuYWJvcnQpID09IG51bGwgPyB2b2lkIDAgOiBfYWJvcnRDb250cm9sbGVyJGFib3IuYmluZChhYm9ydENvbnRyb2xsZXIpLFxuICAgICAgb25TdWNjZXNzOiBmdW5jdGlvbiBvblN1Y2Nlc3MoZGF0YSkge1xuICAgICAgICBfdGhpczIuc2V0RGF0YShkYXRhKTsgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG5cblxuICAgICAgICBfdGhpczIuY2FjaGUuY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMyLmNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMyKTsgLy8gUmVtb3ZlIHF1ZXJ5IGFmdGVyIGZldGNoaW5nIGlmIGNhY2hlIHRpbWUgaXMgMFxuXG4gICAgICAgIGlmIChfdGhpczIuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICAgICAgX3RoaXMyLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkVycm9yOiBmdW5jdGlvbiBvbkVycm9yKGVycm9yKSB7XG4gICAgICAgIC8vIE9wdGltaXN0aWNhbGx5IHVwZGF0ZSBzdGF0ZSBpZiBuZWVkZWRcbiAgICAgICAgaWYgKCEoaXNDYW5jZWxsZWRFcnJvcihlcnJvcikgJiYgZXJyb3Iuc2lsZW50KSkge1xuICAgICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgICAgX3RoaXMyLmNhY2hlLmNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczIuY2FjaGUuY29uZmlnLm9uRXJyb3IoZXJyb3IsIF90aGlzMik7IC8vIExvZyBlcnJvclxuXG4gICAgICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9IC8vIFJlbW92ZSBxdWVyeSBhZnRlciBmZXRjaGluZyBpZiBjYWNoZSB0aW1lIGlzIDBcblxuXG4gICAgICAgIGlmIChfdGhpczIuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICAgICAgX3RoaXMyLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkZhaWw6IGZ1bmN0aW9uIG9uRmFpbCgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhdXNlOiBmdW5jdGlvbiBvblBhdXNlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdwYXVzZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogZnVuY3Rpb24gb25Db250aW51ZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnY29udGludWUnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJldHJ5OiBjb250ZXh0Lm9wdGlvbnMucmV0cnksXG4gICAgICByZXRyeURlbGF5OiBjb250ZXh0Lm9wdGlvbnMucmV0cnlEZWxheVxuICAgIH0pO1xuICAgIHRoaXMucHJvbWlzZSA9IHRoaXMucmV0cnllci5wcm9taXNlO1xuICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLnN0YXRlID0gdGhpcy5yZWR1Y2VyKHRoaXMuc3RhdGUsIGFjdGlvbik7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMub2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLm9uUXVlcnlVcGRhdGUoYWN0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpczMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgcXVlcnk6IF90aGlzMyxcbiAgICAgICAgdHlwZTogJ3F1ZXJ5VXBkYXRlZCcsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdFN0YXRlID0gZnVuY3Rpb24gZ2V0RGVmYXVsdFN0YXRlKG9wdGlvbnMpIHtcbiAgICB2YXIgZGF0YSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5pbml0aWFsRGF0YSgpIDogb3B0aW9ucy5pbml0aWFsRGF0YTtcbiAgICB2YXIgaGFzSW5pdGlhbERhdGEgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgdmFyIGluaXRpYWxEYXRhVXBkYXRlZEF0ID0gaGFzSW5pdGlhbERhdGEgPyB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQoKSA6IG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQgOiAwO1xuICAgIHZhciBoYXNEYXRhID0gdHlwZW9mIGRhdGEgIT09ICd1bmRlZmluZWQnO1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgZGF0YVVwZGF0ZUNvdW50OiAwLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogaGFzRGF0YSA/IGluaXRpYWxEYXRhVXBkYXRlZEF0ICE9IG51bGwgPyBpbml0aWFsRGF0YVVwZGF0ZWRBdCA6IERhdGUubm93KCkgOiAwLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBlcnJvclVwZGF0ZUNvdW50OiAwLFxuICAgICAgZXJyb3JVcGRhdGVkQXQ6IDAsXG4gICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgIGZldGNoTWV0YTogbnVsbCxcbiAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgaXNJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICBzdGF0dXM6IGhhc0RhdGEgPyAnc3VjY2VzcycgOiAnaWRsZSdcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5yZWR1Y2VyID0gZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgdmFyIF9hY3Rpb24kbWV0YSwgX2FjdGlvbiRkYXRhVXBkYXRlZEF0O1xuXG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCArIDFcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3BhdXNlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzUGF1c2VkOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdjb250aW51ZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ZldGNoJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgIGZldGNoTWV0YTogKF9hY3Rpb24kbWV0YSA9IGFjdGlvbi5tZXRhKSAhPSBudWxsID8gX2FjdGlvbiRtZXRhIDogbnVsbCxcbiAgICAgICAgICBpc0ZldGNoaW5nOiB0cnVlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgICB9LCAhc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiB7XG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgc3RhdHVzOiAnbG9hZGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgICAgZGF0YVVwZGF0ZUNvdW50OiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgKyAxLFxuICAgICAgICAgIGRhdGFVcGRhdGVkQXQ6IChfYWN0aW9uJGRhdGFVcGRhdGVkQXQgPSBhY3Rpb24uZGF0YVVwZGF0ZWRBdCkgIT0gbnVsbCA/IF9hY3Rpb24kZGF0YVVwZGF0ZWRBdCA6IERhdGUubm93KCksXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgaXNGZXRjaGluZzogZmFsc2UsXG4gICAgICAgICAgaXNJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHZhciBlcnJvciA9IGFjdGlvbi5lcnJvcjtcblxuICAgICAgICBpZiAoaXNDYW5jZWxsZWRFcnJvcihlcnJvcikgJiYgZXJyb3IucmV2ZXJ0ICYmIHRoaXMucmV2ZXJ0U3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHRoaXMucmV2ZXJ0U3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICBlcnJvclVwZGF0ZUNvdW50OiBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICBlcnJvclVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6ICdlcnJvcidcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ludmFsaWRhdGUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNJbnZhbGlkYXRlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnc2V0U3RhdGUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBhY3Rpb24uc3RhdGUpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBRdWVyeTtcbn0oKTsiLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBoYXNoUXVlcnlLZXlCeU9wdGlvbnMsIG1hdGNoUXVlcnksIHBhcnNlRmlsdGVyQXJncyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgUXVlcnkgfSBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnlDYWNoZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShRdWVyeUNhY2hlLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBRdWVyeUNhY2hlKGNvbmZpZykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIF90aGlzLnF1ZXJpZXMgPSBbXTtcbiAgICBfdGhpcy5xdWVyaWVzTWFwID0ge307XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5Q2FjaGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZCA9IGZ1bmN0aW9uIGJ1aWxkKGNsaWVudCwgb3B0aW9ucywgc3RhdGUpIHtcbiAgICB2YXIgX29wdGlvbnMkcXVlcnlIYXNoO1xuXG4gICAgdmFyIHF1ZXJ5S2V5ID0gb3B0aW9ucy5xdWVyeUtleTtcbiAgICB2YXIgcXVlcnlIYXNoID0gKF9vcHRpb25zJHF1ZXJ5SGFzaCA9IG9wdGlvbnMucXVlcnlIYXNoKSAhPSBudWxsID8gX29wdGlvbnMkcXVlcnlIYXNoIDogaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBvcHRpb25zKTtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLmdldChxdWVyeUhhc2gpO1xuXG4gICAgaWYgKCFxdWVyeSkge1xuICAgICAgcXVlcnkgPSBuZXcgUXVlcnkoe1xuICAgICAgICBjYWNoZTogdGhpcyxcbiAgICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgICBxdWVyeUhhc2g6IHF1ZXJ5SGFzaCxcbiAgICAgICAgb3B0aW9uczogY2xpZW50LmRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucyksXG4gICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgZGVmYXVsdE9wdGlvbnM6IGNsaWVudC5nZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KSxcbiAgICAgICAgbWV0YTogb3B0aW9ucy5tZXRhXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkKHF1ZXJ5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH07XG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChxdWVyeSkge1xuICAgIGlmICghdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF0pIHtcbiAgICAgIHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdID0gcXVlcnk7XG4gICAgICB0aGlzLnF1ZXJpZXMucHVzaChxdWVyeSk7XG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdxdWVyeUFkZGVkJyxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShxdWVyeSkge1xuICAgIHZhciBxdWVyeUluTWFwID0gdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF07XG5cbiAgICBpZiAocXVlcnlJbk1hcCkge1xuICAgICAgcXVlcnkuZGVzdHJveSgpO1xuICAgICAgdGhpcy5xdWVyaWVzID0gdGhpcy5xdWVyaWVzLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPT0gcXVlcnk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHF1ZXJ5SW5NYXAgPT09IHF1ZXJ5KSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAncXVlcnlSZW1vdmVkJyxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5xdWVyaWVzLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIF90aGlzMi5yZW1vdmUocXVlcnkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldCA9IGZ1bmN0aW9uIGdldChxdWVyeUhhc2gpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5SGFzaF07XG4gIH07XG5cbiAgX3Byb3RvLmdldEFsbCA9IGZ1bmN0aW9uIGdldEFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzO1xuICB9O1xuXG4gIF9wcm90by5maW5kID0gZnVuY3Rpb24gZmluZChhcmcxLCBhcmcyKSB7XG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzWzBdO1xuXG4gICAgaWYgKHR5cGVvZiBmaWx0ZXJzLmV4YWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZmlsdGVycy5leGFjdCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucXVlcmllcy5maW5kKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgcmV0dXJuIG1hdGNoUXVlcnkoZmlsdGVycywgcXVlcnkpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5maW5kQWxsID0gZnVuY3Rpb24gZmluZEFsbChhcmcxLCBhcmcyKSB7XG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MyID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczJbMF07XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZmlsdGVycykubGVuZ3RoID4gMCA/IHRoaXMucXVlcmllcy5maWx0ZXIoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSk7XG4gICAgfSkgOiB0aGlzLnF1ZXJpZXM7XG4gIH07XG5cbiAgX3Byb3RvLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeShldmVudCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM0LnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkub25Gb2N1cygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNS5xdWVyaWVzLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Lm9uT25saW5lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gUXVlcnlDYWNoZTtcbn0oU3Vic2NyaWJhYmxlKTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IFJldHJ5ZXIgfSBmcm9tICcuL3JldHJ5ZXInO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4vdXRpbHMnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBNdXRhdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE11dGF0aW9uKGNvbmZpZykge1xuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCBjb25maWcuZGVmYXVsdE9wdGlvbnMsIGNvbmZpZy5vcHRpb25zKTtcbiAgICB0aGlzLm11dGF0aW9uSWQgPSBjb25maWcubXV0YXRpb25JZDtcbiAgICB0aGlzLm11dGF0aW9uQ2FjaGUgPSBjb25maWcubXV0YXRpb25DYWNoZTtcbiAgICB0aGlzLm9ic2VydmVycyA9IFtdO1xuICAgIHRoaXMuc3RhdGUgPSBjb25maWcuc3RhdGUgfHwgZ2V0RGVmYXVsdFN0YXRlKCk7XG4gICAgdGhpcy5tZXRhID0gY29uZmlnLm1ldGE7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTXV0YXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRTdGF0ZSA9IGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlKSB7XG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnc2V0U3RhdGUnLFxuICAgICAgc3RhdGU6IHN0YXRlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmFkZE9ic2VydmVyID0gZnVuY3Rpb24gYWRkT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcikgPT09IC0xKSB7XG4gICAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZU9ic2VydmVyID0gZnVuY3Rpb24gcmVtb3ZlT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggIT09IG9ic2VydmVyO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWwgPSBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgdGhpcy5yZXRyeWVyLmNhbmNlbCgpO1xuICAgICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuXG4gIF9wcm90by5jb250aW51ZSA9IGZ1bmN0aW9uIF9jb250aW51ZSgpIHtcbiAgICBpZiAodGhpcy5yZXRyeWVyKSB7XG4gICAgICB0aGlzLnJldHJ5ZXIuY29udGludWUoKTtcbiAgICAgIHJldHVybiB0aGlzLnJldHJ5ZXIucHJvbWlzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGUgPSBmdW5jdGlvbiBleGVjdXRlKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgZGF0YTtcbiAgICB2YXIgcmVzdG9yZWQgPSB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gJ2xvYWRpbmcnO1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICBpZiAoIXJlc3RvcmVkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ2xvYWRpbmcnLFxuICAgICAgICB2YXJpYWJsZXM6IHRoaXMub3B0aW9ucy52YXJpYWJsZXNcbiAgICAgIH0pO1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbk11dGF0ZSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25NdXRhdGUoX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25NdXRhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25NdXRhdGUoX3RoaXMuc3RhdGUudmFyaWFibGVzKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgaWYgKGNvbnRleHQgIT09IF90aGlzLnN0YXRlLmNvbnRleHQpIHtcbiAgICAgICAgICBfdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnbG9hZGluZycsXG4gICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgICAgdmFyaWFibGVzOiBfdGhpcy5zdGF0ZS52YXJpYWJsZXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuZXhlY3V0ZU11dGF0aW9uKCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICBkYXRhID0gcmVzdWx0OyAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcblxuICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0LCBfdGhpcyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25TdWNjZXNzKGRhdGEsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25TZXR0bGVkKGRhdGEsIG51bGwsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbkVycm9yKGVycm9yLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQsIF90aGlzKTsgLy8gTG9nIGVycm9yXG5cbiAgICAgIGdldExvZ2dlcigpLmVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vbkVycm9yKGVycm9yLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblNldHRsZWQodW5kZWZpbmVkLCBlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZU11dGF0aW9uID0gZnVuY3Rpb24gZXhlY3V0ZU11dGF0aW9uKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzLFxuICAgICAgICBfdGhpcyRvcHRpb25zJHJldHJ5O1xuXG4gICAgdGhpcy5yZXRyeWVyID0gbmV3IFJldHJ5ZXIoe1xuICAgICAgZm46IGZ1bmN0aW9uIGZuKCkge1xuICAgICAgICBpZiAoIV90aGlzMi5vcHRpb25zLm11dGF0aW9uRm4pIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ05vIG11dGF0aW9uRm4gZm91bmQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5tdXRhdGlvbkZuKF90aGlzMi5zdGF0ZS52YXJpYWJsZXMpO1xuICAgICAgfSxcbiAgICAgIG9uRmFpbDogZnVuY3Rpb24gb25GYWlsKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdmYWlsZWQnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uUGF1c2U6IGZ1bmN0aW9uIG9uUGF1c2UoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ3BhdXNlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvbkNvbnRpbnVlOiBmdW5jdGlvbiBvbkNvbnRpbnVlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdjb250aW51ZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcmV0cnk6IChfdGhpcyRvcHRpb25zJHJldHJ5ID0gdGhpcy5vcHRpb25zLnJldHJ5KSAhPSBudWxsID8gX3RoaXMkb3B0aW9ucyRyZXRyeSA6IDAsXG4gICAgICByZXRyeURlbGF5OiB0aGlzLm9wdGlvbnMucmV0cnlEZWxheVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnJldHJ5ZXIucHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8uZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMuc3RhdGUgPSByZWR1Y2VyKHRoaXMuc3RhdGUsIGFjdGlvbik7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMub2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLm9uTXV0YXRpb25VcGRhdGUoYWN0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpczMubXV0YXRpb25DYWNoZS5ub3RpZnkoX3RoaXMzKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTXV0YXRpb247XG59KCk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFN0YXRlKCkge1xuICByZXR1cm4ge1xuICAgIGNvbnRleHQ6IHVuZGVmaW5lZCxcbiAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgZmFpbHVyZUNvdW50OiAwLFxuICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICBzdGF0dXM6ICdpZGxlJyxcbiAgICB2YXJpYWJsZXM6IHVuZGVmaW5lZFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGZhaWx1cmVDb3VudDogc3RhdGUuZmFpbHVyZUNvdW50ICsgMVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdwYXVzZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGlzUGF1c2VkOiB0cnVlXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2NvbnRpbnVlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBjb250ZXh0OiBhY3Rpb24uY29udGV4dCxcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgICAgdmFyaWFibGVzOiBhY3Rpb24udmFyaWFibGVzXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBkYXRhOiBhY3Rpb24uZGF0YSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnZXJyb3InOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiBhY3Rpb24uZXJyb3IsXG4gICAgICAgIGZhaWx1cmVDb3VudDogc3RhdGUuZmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICBzdGF0dXM6ICdlcnJvcidcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnc2V0U3RhdGUnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgYWN0aW9uLnN0YXRlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn0iLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IE11dGF0aW9uIH0gZnJvbSAnLi9tdXRhdGlvbic7XG5pbXBvcnQgeyBtYXRjaE11dGF0aW9uLCBub29wIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIE11dGF0aW9uQ2FjaGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoTXV0YXRpb25DYWNoZSwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gTXV0YXRpb25DYWNoZShjb25maWcpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBfdGhpcy5tdXRhdGlvbnMgPSBbXTtcbiAgICBfdGhpcy5tdXRhdGlvbklkID0gMDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTXV0YXRpb25DYWNoZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkID0gZnVuY3Rpb24gYnVpbGQoY2xpZW50LCBvcHRpb25zLCBzdGF0ZSkge1xuICAgIHZhciBtdXRhdGlvbiA9IG5ldyBNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbkNhY2hlOiB0aGlzLFxuICAgICAgbXV0YXRpb25JZDogKyt0aGlzLm11dGF0aW9uSWQsXG4gICAgICBvcHRpb25zOiBjbGllbnQuZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKSxcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zLm11dGF0aW9uS2V5ID8gY2xpZW50LmdldE11dGF0aW9uRGVmYXVsdHMob3B0aW9ucy5tdXRhdGlvbktleSkgOiB1bmRlZmluZWQsXG4gICAgICBtZXRhOiBvcHRpb25zLm1ldGFcbiAgICB9KTtcbiAgICB0aGlzLmFkZChtdXRhdGlvbik7XG4gICAgcmV0dXJuIG11dGF0aW9uO1xuICB9O1xuXG4gIF9wcm90by5hZGQgPSBmdW5jdGlvbiBhZGQobXV0YXRpb24pIHtcbiAgICB0aGlzLm11dGF0aW9ucy5wdXNoKG11dGF0aW9uKTtcbiAgICB0aGlzLm5vdGlmeShtdXRhdGlvbik7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShtdXRhdGlvbikge1xuICAgIHRoaXMubXV0YXRpb25zID0gdGhpcy5tdXRhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAhPT0gbXV0YXRpb247XG4gICAgfSk7XG4gICAgbXV0YXRpb24uY2FuY2VsKCk7XG4gICAgdGhpcy5ub3RpZnkobXV0YXRpb24pO1xuICB9O1xuXG4gIF9wcm90by5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIubXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgIF90aGlzMi5yZW1vdmUobXV0YXRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldEFsbCA9IGZ1bmN0aW9uIGdldEFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmQgPSBmdW5jdGlvbiBmaW5kKGZpbHRlcnMpIHtcbiAgICBpZiAodHlwZW9mIGZpbHRlcnMuZXhhY3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmaWx0ZXJzLmV4YWN0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbnMuZmluZChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZmluZEFsbCA9IGZ1bmN0aW9uIGZpbmRBbGwoZmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICByZXR1cm4gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbik7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeShtdXRhdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgIGxpc3RlbmVyKG11dGF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB0aGlzLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHRoaXMucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc3VtZVBhdXNlZE11dGF0aW9ucyA9IGZ1bmN0aW9uIHJlc3VtZVBhdXNlZE11dGF0aW9ucygpIHtcbiAgICB2YXIgcGF1c2VkTXV0YXRpb25zID0gdGhpcy5tdXRhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5zdGF0ZS5pc1BhdXNlZDtcbiAgICB9KTtcbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcGF1c2VkTXV0YXRpb25zLnJlZHVjZShmdW5jdGlvbiAocHJvbWlzZSwgbXV0YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIG11dGF0aW9uLmNvbnRpbnVlKCkuY2F0Y2gobm9vcCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNdXRhdGlvbkNhY2hlO1xufShTdWJzY3JpYmFibGUpOyIsICJpbXBvcnQgeyBpc0NhbmNlbGFibGUgfSBmcm9tICcuL3JldHJ5ZXInO1xuaW1wb3J0IHsgZ2V0QWJvcnRDb250cm9sbGVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgZnVuY3Rpb24gaW5maW5pdGVRdWVyeUJlaGF2aW9yKCkge1xuICByZXR1cm4ge1xuICAgIG9uRmV0Y2g6IGZ1bmN0aW9uIG9uRmV0Y2goY29udGV4dCkge1xuICAgICAgY29udGV4dC5mZXRjaEZuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2NvbnRleHQkZmV0Y2hPcHRpb25zLCBfY29udGV4dCRmZXRjaE9wdGlvbnMyLCBfY29udGV4dCRmZXRjaE9wdGlvbnMzLCBfY29udGV4dCRmZXRjaE9wdGlvbnM0LCBfY29udGV4dCRzdGF0ZSRkYXRhLCBfY29udGV4dCRzdGF0ZSRkYXRhMjtcblxuICAgICAgICB2YXIgcmVmZXRjaFBhZ2UgPSAoX2NvbnRleHQkZmV0Y2hPcHRpb25zID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiAoX2NvbnRleHQkZmV0Y2hPcHRpb25zMiA9IF9jb250ZXh0JGZldGNoT3B0aW9ucy5tZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zMi5yZWZldGNoUGFnZTtcbiAgICAgICAgdmFyIGZldGNoTW9yZSA9IChfY29udGV4dCRmZXRjaE9wdGlvbnMzID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiAoX2NvbnRleHQkZmV0Y2hPcHRpb25zNCA9IF9jb250ZXh0JGZldGNoT3B0aW9uczMubWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczQuZmV0Y2hNb3JlO1xuICAgICAgICB2YXIgcGFnZVBhcmFtID0gZmV0Y2hNb3JlID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE1vcmUucGFnZVBhcmFtO1xuICAgICAgICB2YXIgaXNGZXRjaGluZ05leHRQYWdlID0gKGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLmRpcmVjdGlvbikgPT09ICdmb3J3YXJkJztcbiAgICAgICAgdmFyIGlzRmV0Y2hpbmdQcmV2aW91c1BhZ2UgPSAoZmV0Y2hNb3JlID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE1vcmUuZGlyZWN0aW9uKSA9PT0gJ2JhY2t3YXJkJztcbiAgICAgICAgdmFyIG9sZFBhZ2VzID0gKChfY29udGV4dCRzdGF0ZSRkYXRhID0gY29udGV4dC5zdGF0ZS5kYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkc3RhdGUkZGF0YS5wYWdlcykgfHwgW107XG4gICAgICAgIHZhciBvbGRQYWdlUGFyYW1zID0gKChfY29udGV4dCRzdGF0ZSRkYXRhMiA9IGNvbnRleHQuc3RhdGUuZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JHN0YXRlJGRhdGEyLnBhZ2VQYXJhbXMpIHx8IFtdO1xuICAgICAgICB2YXIgYWJvcnRDb250cm9sbGVyID0gZ2V0QWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIHZhciBhYm9ydFNpZ25hbCA9IGFib3J0Q29udHJvbGxlciA9PSBudWxsID8gdm9pZCAwIDogYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgICAgICAgdmFyIG5ld1BhZ2VQYXJhbXMgPSBvbGRQYWdlUGFyYW1zO1xuICAgICAgICB2YXIgY2FuY2VsbGVkID0gZmFsc2U7IC8vIEdldCBxdWVyeSBmdW5jdGlvblxuXG4gICAgICAgIHZhciBxdWVyeUZuID0gY29udGV4dC5vcHRpb25zLnF1ZXJ5Rm4gfHwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTWlzc2luZyBxdWVyeUZuJyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGJ1aWxkTmV3UGFnZXMgPSBmdW5jdGlvbiBidWlsZE5ld1BhZ2VzKHBhZ2VzLCBwYXJhbSwgcGFnZSwgcHJldmlvdXMpIHtcbiAgICAgICAgICBuZXdQYWdlUGFyYW1zID0gcHJldmlvdXMgPyBbcGFyYW1dLmNvbmNhdChuZXdQYWdlUGFyYW1zKSA6IFtdLmNvbmNhdChuZXdQYWdlUGFyYW1zLCBbcGFyYW1dKTtcbiAgICAgICAgICByZXR1cm4gcHJldmlvdXMgPyBbcGFnZV0uY29uY2F0KHBhZ2VzKSA6IFtdLmNvbmNhdChwYWdlcywgW3BhZ2VdKTtcbiAgICAgICAgfTsgLy8gQ3JlYXRlIGZ1bmN0aW9uIHRvIGZldGNoIGEgcGFnZVxuXG5cbiAgICAgICAgdmFyIGZldGNoUGFnZSA9IGZ1bmN0aW9uIGZldGNoUGFnZShwYWdlcywgbWFudWFsLCBwYXJhbSwgcHJldmlvdXMpIHtcbiAgICAgICAgICBpZiAoY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ0NhbmNlbGxlZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICd1bmRlZmluZWQnICYmICFtYW51YWwgJiYgcGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBhZ2VzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcXVlcnlGbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBxdWVyeUtleTogY29udGV4dC5xdWVyeUtleSxcbiAgICAgICAgICAgIHNpZ25hbDogYWJvcnRTaWduYWwsXG4gICAgICAgICAgICBwYWdlUGFyYW06IHBhcmFtLFxuICAgICAgICAgICAgbWV0YTogY29udGV4dC5tZXRhXG4gICAgICAgICAgfTtcbiAgICAgICAgICB2YXIgcXVlcnlGblJlc3VsdCA9IHF1ZXJ5Rm4ocXVlcnlGbkNvbnRleHQpO1xuICAgICAgICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHF1ZXJ5Rm5SZXN1bHQpLnRoZW4oZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBidWlsZE5ld1BhZ2VzKHBhZ2VzLCBwYXJhbSwgcGFnZSwgcHJldmlvdXMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKGlzQ2FuY2VsYWJsZShxdWVyeUZuUmVzdWx0KSkge1xuICAgICAgICAgICAgdmFyIHByb21pc2VBc0FueSA9IHByb21pc2U7XG4gICAgICAgICAgICBwcm9taXNlQXNBbnkuY2FuY2VsID0gcXVlcnlGblJlc3VsdC5jYW5jZWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHByb21pc2U7IC8vIEZldGNoIGZpcnN0IHBhZ2U/XG5cbiAgICAgICAgaWYgKCFvbGRQYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICBwcm9taXNlID0gZmV0Y2hQYWdlKFtdKTtcbiAgICAgICAgfSAvLyBGZXRjaCBuZXh0IHBhZ2U/XG4gICAgICAgIGVsc2UgaWYgKGlzRmV0Y2hpbmdOZXh0UGFnZSkge1xuICAgICAgICAgICAgdmFyIG1hbnVhbCA9IHR5cGVvZiBwYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgdmFyIHBhcmFtID0gbWFudWFsID8gcGFnZVBhcmFtIDogZ2V0TmV4dFBhZ2VQYXJhbShjb250ZXh0Lm9wdGlvbnMsIG9sZFBhZ2VzKTtcbiAgICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2Uob2xkUGFnZXMsIG1hbnVhbCwgcGFyYW0pO1xuICAgICAgICAgIH0gLy8gRmV0Y2ggcHJldmlvdXMgcGFnZT9cbiAgICAgICAgICBlbHNlIGlmIChpc0ZldGNoaW5nUHJldmlvdXNQYWdlKSB7XG4gICAgICAgICAgICAgIHZhciBfbWFudWFsID0gdHlwZW9mIHBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgICAgICAgICAgICAgdmFyIF9wYXJhbSA9IF9tYW51YWwgPyBwYWdlUGFyYW0gOiBnZXRQcmV2aW91c1BhZ2VQYXJhbShjb250ZXh0Lm9wdGlvbnMsIG9sZFBhZ2VzKTtcblxuICAgICAgICAgICAgICBwcm9taXNlID0gZmV0Y2hQYWdlKG9sZFBhZ2VzLCBfbWFudWFsLCBfcGFyYW0sIHRydWUpO1xuICAgICAgICAgICAgfSAvLyBSZWZldGNoIHBhZ2VzXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgbmV3UGFnZVBhcmFtcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgdmFyIG1hbnVhbCA9IHR5cGVvZiBjb250ZXh0Lm9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbSA9PT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgICAgICAgICB2YXIgc2hvdWxkRmV0Y2hGaXJzdFBhZ2UgPSByZWZldGNoUGFnZSAmJiBvbGRQYWdlc1swXSA/IHJlZmV0Y2hQYWdlKG9sZFBhZ2VzWzBdLCAwLCBvbGRQYWdlcykgOiB0cnVlOyAvLyBGZXRjaCBmaXJzdCBwYWdlXG5cbiAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzaG91bGRGZXRjaEZpcnN0UGFnZSA/IGZldGNoUGFnZShbXSwgbWFudWFsLCBvbGRQYWdlUGFyYW1zWzBdKSA6IFByb21pc2UucmVzb2x2ZShidWlsZE5ld1BhZ2VzKFtdLCBvbGRQYWdlUGFyYW1zWzBdLCBvbGRQYWdlc1swXSkpOyAvLyBGZXRjaCByZW1haW5pbmcgcGFnZXNcblxuICAgICAgICAgICAgICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChwYWdlcykge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRGZXRjaE5leHRQYWdlID0gcmVmZXRjaFBhZ2UgJiYgb2xkUGFnZXNbaV0gPyByZWZldGNoUGFnZShvbGRQYWdlc1tpXSwgaSwgb2xkUGFnZXMpIDogdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRGZXRjaE5leHRQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3BhcmFtMiA9IG1hbnVhbCA/IG9sZFBhZ2VQYXJhbXNbaV0gOiBnZXROZXh0UGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgcGFnZXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2hQYWdlKHBhZ2VzLCBtYW51YWwsIF9wYXJhbTIpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYnVpbGROZXdQYWdlcyhwYWdlcywgb2xkUGFnZVBhcmFtc1tpXSwgb2xkUGFnZXNbaV0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG9sZFBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9sb29wKGkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICB2YXIgZmluYWxQcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChwYWdlcykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYWdlczogcGFnZXMsXG4gICAgICAgICAgICBwYWdlUGFyYW1zOiBuZXdQYWdlUGFyYW1zXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBmaW5hbFByb21pc2VBc0FueSA9IGZpbmFsUHJvbWlzZTtcblxuICAgICAgICBmaW5hbFByb21pc2VBc0FueS5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuXG4gICAgICAgICAgaWYgKGlzQ2FuY2VsYWJsZShwcm9taXNlKSkge1xuICAgICAgICAgICAgcHJvbWlzZS5jYW5jZWwoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGZpbmFsUHJvbWlzZTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbSA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtKHBhZ2VzW3BhZ2VzLmxlbmd0aCAtIDFdLCBwYWdlcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZ2V0UHJldmlvdXNQYWdlUGFyYW0gPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZ2V0UHJldmlvdXNQYWdlUGFyYW0ocGFnZXNbMF0sIHBhZ2VzKTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgbmV4dCBwYWdlLlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzTmV4dFBhZ2Uob3B0aW9ucywgcGFnZXMpIHtcbiAgaWYgKG9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbSAmJiBBcnJheS5pc0FycmF5KHBhZ2VzKSkge1xuICAgIHZhciBuZXh0UGFnZVBhcmFtID0gZ2V0TmV4dFBhZ2VQYXJhbShvcHRpb25zLCBwYWdlcyk7XG4gICAgcmV0dXJuIHR5cGVvZiBuZXh0UGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJyAmJiBuZXh0UGFnZVBhcmFtICE9PSBudWxsICYmIG5leHRQYWdlUGFyYW0gIT09IGZhbHNlO1xuICB9XG59XG4vKipcbiAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIHByZXZpb3VzIHBhZ2UuXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNQcmV2aW91c1BhZ2Uob3B0aW9ucywgcGFnZXMpIHtcbiAgaWYgKG9wdGlvbnMuZ2V0UHJldmlvdXNQYWdlUGFyYW0gJiYgQXJyYXkuaXNBcnJheShwYWdlcykpIHtcbiAgICB2YXIgcHJldmlvdXNQYWdlUGFyYW0gPSBnZXRQcmV2aW91c1BhZ2VQYXJhbShvcHRpb25zLCBwYWdlcyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJldmlvdXNQYWdlUGFyYW0gIT09IG51bGwgJiYgcHJldmlvdXNQYWdlUGFyYW0gIT09IGZhbHNlO1xuICB9XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgaGFzaFF1ZXJ5S2V5LCBub29wLCBwYXJzZUZpbHRlckFyZ3MsIHBhcnNlUXVlcnlBcmdzLCBwYXJ0aWFsTWF0Y2hLZXksIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgUXVlcnlDYWNoZSB9IGZyb20gJy4vcXVlcnlDYWNoZSc7XG5pbXBvcnQgeyBNdXRhdGlvbkNhY2hlIH0gZnJvbSAnLi9tdXRhdGlvbkNhY2hlJztcbmltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gJy4vZm9jdXNNYW5hZ2VyJztcbmltcG9ydCB7IG9ubGluZU1hbmFnZXIgfSBmcm9tICcuL29ubGluZU1hbmFnZXInO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IgfSBmcm9tICcuL2luZmluaXRlUXVlcnlCZWhhdmlvcic7XG4vLyBDTEFTU1xuZXhwb3J0IHZhciBRdWVyeUNsaWVudCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFF1ZXJ5Q2xpZW50KGNvbmZpZykge1xuICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkge1xuICAgICAgY29uZmlnID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5xdWVyeUNhY2hlID0gY29uZmlnLnF1ZXJ5Q2FjaGUgfHwgbmV3IFF1ZXJ5Q2FjaGUoKTtcbiAgICB0aGlzLm11dGF0aW9uQ2FjaGUgPSBjb25maWcubXV0YXRpb25DYWNoZSB8fCBuZXcgTXV0YXRpb25DYWNoZSgpO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBjb25maWcuZGVmYXVsdE9wdGlvbnMgfHwge307XG4gICAgdGhpcy5xdWVyeURlZmF1bHRzID0gW107XG4gICAgdGhpcy5tdXRhdGlvbkRlZmF1bHRzID0gW107XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnlDbGllbnQucHJvdG90eXBlO1xuXG4gIF9wcm90by5tb3VudCA9IGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLnVuc3Vic2NyaWJlRm9jdXMgPSBmb2N1c01hbmFnZXIuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgJiYgb25saW5lTWFuYWdlci5pc09ubGluZSgpKSB7XG4gICAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUub25Gb2N1cygpO1xuXG4gICAgICAgIF90aGlzLnF1ZXJ5Q2FjaGUub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudW5zdWJzY3JpYmVPbmxpbmUgPSBvbmxpbmVNYW5hZ2VyLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpICYmIG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLm9uT25saW5lKCk7XG5cbiAgICAgICAgX3RoaXMucXVlcnlDYWNoZS5vbk9ubGluZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by51bm1vdW50ID0gZnVuY3Rpb24gdW5tb3VudCgpIHtcbiAgICB2YXIgX3RoaXMkdW5zdWJzY3JpYmVGb2N1LCBfdGhpcyR1bnN1YnNjcmliZU9ubGk7XG5cbiAgICAoX3RoaXMkdW5zdWJzY3JpYmVGb2N1ID0gdGhpcy51bnN1YnNjcmliZUZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkdW5zdWJzY3JpYmVGb2N1LmNhbGwodGhpcyk7XG4gICAgKF90aGlzJHVuc3Vic2NyaWJlT25saSA9IHRoaXMudW5zdWJzY3JpYmVPbmxpbmUpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyR1bnN1YnNjcmliZU9ubGkuY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uaXNGZXRjaGluZyA9IGZ1bmN0aW9uIGlzRmV0Y2hpbmcoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnc1swXTtcblxuICAgIGZpbHRlcnMuZmV0Y2hpbmcgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmlzTXV0YXRpbmcgPSBmdW5jdGlvbiBpc011dGF0aW5nKGZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlLmZpbmRBbGwoX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIGZldGNoaW5nOiB0cnVlXG4gICAgfSkpLmxlbmd0aDtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlEYXRhID0gZnVuY3Rpb24gZ2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCBmaWx0ZXJzKSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDtcblxuICAgIHJldHVybiAoX3RoaXMkcXVlcnlDYWNoZSRmaW5kID0gdGhpcy5xdWVyeUNhY2hlLmZpbmQocXVlcnlLZXksIGZpbHRlcnMpKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcXVlcnlDYWNoZSRmaW5kLnN0YXRlLmRhdGE7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJpZXNEYXRhID0gZnVuY3Rpb24gZ2V0UXVlcmllc0RhdGEocXVlcnlLZXlPckZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUNhY2hlKCkuZmluZEFsbChxdWVyeUtleU9yRmlsdGVycykubWFwKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgcXVlcnlLZXkgPSBfcmVmLnF1ZXJ5S2V5LFxuICAgICAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgICAgIHZhciBkYXRhID0gc3RhdGUuZGF0YTtcbiAgICAgIHJldHVybiBbcXVlcnlLZXksIGRhdGFdO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyeURhdGEgPSBmdW5jdGlvbiBzZXRRdWVyeURhdGEocXVlcnlLZXksIHVwZGF0ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKHF1ZXJ5S2V5KTtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhwYXJzZWRPcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpLnNldERhdGEodXBkYXRlciwgb3B0aW9ucyk7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJpZXNEYXRhID0gZnVuY3Rpb24gc2V0UXVlcmllc0RhdGEocXVlcnlLZXlPckZpbHRlcnMsIHVwZGF0ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczIuZ2V0UXVlcnlDYWNoZSgpLmZpbmRBbGwocXVlcnlLZXlPckZpbHRlcnMpLm1hcChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgdmFyIHF1ZXJ5S2V5ID0gX3JlZjIucXVlcnlLZXk7XG4gICAgICAgIHJldHVybiBbcXVlcnlLZXksIF90aGlzMi5zZXRRdWVyeURhdGEocXVlcnlLZXksIHVwZGF0ZXIsIG9wdGlvbnMpXTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyeVN0YXRlID0gZnVuY3Rpb24gZ2V0UXVlcnlTdGF0ZShxdWVyeUtleSwgZmlsdGVycykge1xuICAgIHZhciBfdGhpcyRxdWVyeUNhY2hlJGZpbmQyO1xuXG4gICAgcmV0dXJuIChfdGhpcyRxdWVyeUNhY2hlJGZpbmQyID0gdGhpcy5xdWVyeUNhY2hlLmZpbmQocXVlcnlLZXksIGZpbHRlcnMpKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcXVlcnlDYWNoZSRmaW5kMi5zdGF0ZTtcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlUXVlcmllcyA9IGZ1bmN0aW9uIHJlbW92ZVF1ZXJpZXMoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzMiA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3MyWzBdO1xuXG4gICAgdmFyIHF1ZXJ5Q2FjaGUgPSB0aGlzLnF1ZXJ5Q2FjaGU7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnlDYWNoZS5yZW1vdmUocXVlcnkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0UXVlcmllcyA9IGZ1bmN0aW9uIHJlc2V0UXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczMgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzM1swXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3MzWzFdO1xuXG4gICAgdmFyIHF1ZXJ5Q2FjaGUgPSB0aGlzLnF1ZXJ5Q2FjaGU7XG5cbiAgICB2YXIgcmVmZXRjaEZpbHRlcnMgPSBfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgYWN0aXZlOiB0cnVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkucmVzZXQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF90aGlzMy5yZWZldGNoUXVlcmllcyhyZWZldGNoRmlsdGVycywgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbFF1ZXJpZXMgPSBmdW5jdGlvbiBjYW5jZWxRdWVyaWVzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNCA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M0WzBdLFxuICAgICAgICBfcGFyc2VGaWx0ZXJBcmdzNCQgPSBfcGFyc2VGaWx0ZXJBcmdzNFsxXSxcbiAgICAgICAgY2FuY2VsT3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M0JCA9PT0gdm9pZCAwID8ge30gOiBfcGFyc2VGaWx0ZXJBcmdzNCQ7XG5cbiAgICBpZiAodHlwZW9mIGNhbmNlbE9wdGlvbnMucmV2ZXJ0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgY2FuY2VsT3B0aW9ucy5yZXZlcnQgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBwcm9taXNlcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzNC5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubWFwKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICByZXR1cm4gcXVlcnkuY2FuY2VsKGNhbmNlbE9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5pbnZhbGlkYXRlUXVlcmllcyA9IGZ1bmN0aW9uIGludmFsaWRhdGVRdWVyaWVzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgX3JlZjMsXG4gICAgICAgIF9maWx0ZXJzJHJlZmV0Y2hBY3RpdixcbiAgICAgICAgX2ZpbHRlcnMkcmVmZXRjaEluYWN0LFxuICAgICAgICBfdGhpczUgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3M1ID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczVbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNVsxXTtcblxuICAgIHZhciByZWZldGNoRmlsdGVycyA9IF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICAvLyBpZiBmaWx0ZXJzLnJlZmV0Y2hBY3RpdmUgaXMgbm90IHByb3ZpZGVkIGFuZCBmaWx0ZXJzLmFjdGl2ZSBpcyBleHBsaWNpdGx5IGZhbHNlLFxuICAgICAgLy8gZS5nLiBpbnZhbGlkYXRlUXVlcmllcyh7IGFjdGl2ZTogZmFsc2UgfSksIHdlIGRvbid0IHdhbnQgdG8gcmVmZXRjaCBhY3RpdmUgcXVlcmllc1xuICAgICAgYWN0aXZlOiAoX3JlZjMgPSAoX2ZpbHRlcnMkcmVmZXRjaEFjdGl2ID0gZmlsdGVycy5yZWZldGNoQWN0aXZlKSAhPSBudWxsID8gX2ZpbHRlcnMkcmVmZXRjaEFjdGl2IDogZmlsdGVycy5hY3RpdmUpICE9IG51bGwgPyBfcmVmMyA6IHRydWUsXG4gICAgICBpbmFjdGl2ZTogKF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCA9IGZpbHRlcnMucmVmZXRjaEluYWN0aXZlKSAhPSBudWxsID8gX2ZpbHRlcnMkcmVmZXRjaEluYWN0IDogZmFsc2VcbiAgICB9KTtcblxuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNS5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkuaW52YWxpZGF0ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfdGhpczUucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZWZldGNoUXVlcmllcyA9IGZ1bmN0aW9uIHJlZmV0Y2hRdWVyaWVzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNiA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M2WzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczZbMV07XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczYucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmZldGNoKHVuZGVmaW5lZCwgX2V4dGVuZHMoe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICByZWZldGNoUGFnZTogZmlsdGVycyA9PSBudWxsID8gdm9pZCAwIDogZmlsdGVycy5yZWZldGNoUGFnZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKTtcblxuICAgIGlmICghKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudGhyb3dPbkVycm9yKSkge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuY2F0Y2gobm9vcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoUXVlcnkgPSBmdW5jdGlvbiBmZXRjaFF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKHBhcnNlZE9wdGlvbnMpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vdGFubmVybGluc2xleS9yZWFjdC1xdWVyeS9pc3N1ZXMvNjUyXG5cbiAgICBpZiAodHlwZW9mIGRlZmF1bHRlZE9wdGlvbnMucmV0cnkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIHJldHVybiBxdWVyeS5pc1N0YWxlQnlUaW1lKGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lKSA/IHF1ZXJ5LmZldGNoKGRlZmF1bHRlZE9wdGlvbnMpIDogUHJvbWlzZS5yZXNvbHZlKHF1ZXJ5LnN0YXRlLmRhdGEpO1xuICB9O1xuXG4gIF9wcm90by5wcmVmZXRjaFF1ZXJ5ID0gZnVuY3Rpb24gcHJlZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaEluZmluaXRlUXVlcnkgPSBmdW5jdGlvbiBmZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgcGFyc2VkT3B0aW9ucy5iZWhhdmlvciA9IGluZmluaXRlUXVlcnlCZWhhdmlvcigpO1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkocGFyc2VkT3B0aW9ucyk7XG4gIH07XG5cbiAgX3Byb3RvLnByZWZldGNoSW5maW5pdGVRdWVyeSA9IGZ1bmN0aW9uIHByZWZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbE11dGF0aW9ucyA9IGZ1bmN0aW9uIGNhbmNlbE11dGF0aW9ucygpIHtcbiAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzNy5tdXRhdGlvbkNhY2hlLmdldEFsbCgpLm1hcChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG11dGF0aW9uLmNhbmNlbCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5yZXN1bWVQYXVzZWRNdXRhdGlvbnMgPSBmdW5jdGlvbiByZXN1bWVQYXVzZWRNdXRhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TXV0YXRpb25DYWNoZSgpLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlTXV0YXRpb24gPSBmdW5jdGlvbiBleGVjdXRlTXV0YXRpb24ob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9uQ2FjaGUuYnVpbGQodGhpcywgb3B0aW9ucykuZXhlY3V0ZSgpO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyeUNhY2hlID0gZnVuY3Rpb24gZ2V0UXVlcnlDYWNoZSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlO1xuICB9O1xuXG4gIF9wcm90by5nZXRNdXRhdGlvbkNhY2hlID0gZnVuY3Rpb24gZ2V0TXV0YXRpb25DYWNoZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlO1xuICB9O1xuXG4gIF9wcm90by5nZXREZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRPcHRpb25zO1xuICB9O1xuXG4gIF9wcm90by5zZXREZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcnlEZWZhdWx0cyA9IGZ1bmN0aW9uIHNldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXksIG9wdGlvbnMpIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5xdWVyeURlZmF1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBoYXNoUXVlcnlLZXkocXVlcnlLZXkpID09PSBoYXNoUXVlcnlLZXkoeC5xdWVyeUtleSk7XG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXN1bHQuZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnF1ZXJ5RGVmYXVsdHMucHVzaCh7XG4gICAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgICAgZGVmYXVsdE9wdGlvbnM6IG9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlEZWZhdWx0cyA9IGZ1bmN0aW9uIGdldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXkpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlEZWZhdWx0cyRmO1xuXG4gICAgcmV0dXJuIHF1ZXJ5S2V5ID8gKF90aGlzJHF1ZXJ5RGVmYXVsdHMkZiA9IHRoaXMucXVlcnlEZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcGFydGlhbE1hdGNoS2V5KHF1ZXJ5S2V5LCB4LnF1ZXJ5S2V5KTtcbiAgICB9KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5RGVmYXVsdHMkZi5kZWZhdWx0T3B0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICBfcHJvdG8uc2V0TXV0YXRpb25EZWZhdWx0cyA9IGZ1bmN0aW9uIHNldE11dGF0aW9uRGVmYXVsdHMobXV0YXRpb25LZXksIG9wdGlvbnMpIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5tdXRhdGlvbkRlZmF1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBoYXNoUXVlcnlLZXkobXV0YXRpb25LZXkpID09PSBoYXNoUXVlcnlLZXkoeC5tdXRhdGlvbktleSk7XG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXN1bHQuZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11dGF0aW9uRGVmYXVsdHMucHVzaCh7XG4gICAgICAgIG11dGF0aW9uS2V5OiBtdXRhdGlvbktleSxcbiAgICAgICAgZGVmYXVsdE9wdGlvbnM6IG9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0TXV0YXRpb25EZWZhdWx0cyA9IGZ1bmN0aW9uIGdldE11dGF0aW9uRGVmYXVsdHMobXV0YXRpb25LZXkpIHtcbiAgICB2YXIgX3RoaXMkbXV0YXRpb25EZWZhdWx0O1xuXG4gICAgcmV0dXJuIG11dGF0aW9uS2V5ID8gKF90aGlzJG11dGF0aW9uRGVmYXVsdCA9IHRoaXMubXV0YXRpb25EZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcGFydGlhbE1hdGNoS2V5KG11dGF0aW9uS2V5LCB4Lm11dGF0aW9uS2V5KTtcbiAgICB9KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG11dGF0aW9uRGVmYXVsdC5kZWZhdWx0T3B0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdFF1ZXJ5T3B0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLl9kZWZhdWx0ZWQpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gX2V4dGVuZHMoe30sIHRoaXMuZGVmYXVsdE9wdGlvbnMucXVlcmllcywgdGhpcy5nZXRRdWVyeURlZmF1bHRzKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucXVlcnlLZXkpLCBvcHRpb25zLCB7XG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoICYmIGRlZmF1bHRlZE9wdGlvbnMucXVlcnlLZXkpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoID0gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKGRlZmF1bHRlZE9wdGlvbnMucXVlcnlLZXksIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0ZWRPcHRpb25zO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucyk7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRNdXRhdGlvbk9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5fZGVmYXVsdGVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHRoaXMuZGVmYXVsdE9wdGlvbnMubXV0YXRpb25zLCB0aGlzLmdldE11dGF0aW9uRGVmYXVsdHMob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5tdXRhdGlvbktleSksIG9wdGlvbnMsIHtcbiAgICAgIF9kZWZhdWx0ZWQ6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB0aGlzLnF1ZXJ5Q2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLm11dGF0aW9uQ2FjaGUuY2xlYXIoKTtcbiAgfTtcblxuICByZXR1cm4gUXVlcnlDbGllbnQ7XG59KCk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBpc1NlcnZlciwgaXNWYWxpZFRpbWVvdXQsIG5vb3AsIHJlcGxhY2VFcXVhbERlZXAsIHNoYWxsb3dFcXVhbE9iamVjdHMsIHRpbWVVbnRpbFN0YWxlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gJy4vZm9jdXNNYW5hZ2VyJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGlzQ2FuY2VsbGVkRXJyb3IgfSBmcm9tICcuL3JldHJ5ZXInO1xuZXhwb3J0IHZhciBRdWVyeU9ic2VydmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKFF1ZXJ5T2JzZXJ2ZXIsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIFF1ZXJ5T2JzZXJ2ZXIoY2xpZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgX3RoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgX3RoaXMudHJhY2tlZFByb3BzID0gW107XG4gICAgX3RoaXMuc2VsZWN0RXJyb3IgPSBudWxsO1xuXG4gICAgX3RoaXMuYmluZE1ldGhvZHMoKTtcblxuICAgIF90aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnlPYnNlcnZlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJpbmRNZXRob2RzID0gZnVuY3Rpb24gYmluZE1ldGhvZHMoKSB7XG4gICAgdGhpcy5yZW1vdmUgPSB0aGlzLnJlbW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVmZXRjaCA9IHRoaXMucmVmZXRjaC5iaW5kKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICh0aGlzLmxpc3RlbmVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXJ5LmFkZE9ic2VydmVyKHRoaXMpO1xuXG4gICAgICBpZiAoc2hvdWxkRmV0Y2hPbk1vdW50KHRoaXMuY3VycmVudFF1ZXJ5LCB0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZUZldGNoKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlVGltZXJzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMubGlzdGVuZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zaG91bGRGZXRjaE9uUmVjb25uZWN0ID0gZnVuY3Rpb24gc2hvdWxkRmV0Y2hPblJlY29ubmVjdCgpIHtcbiAgICByZXR1cm4gc2hvdWxkRmV0Y2hPbih0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zLCB0aGlzLm9wdGlvbnMucmVmZXRjaE9uUmVjb25uZWN0KTtcbiAgfTtcblxuICBfcHJvdG8uc2hvdWxkRmV0Y2hPbldpbmRvd0ZvY3VzID0gZnVuY3Rpb24gc2hvdWxkRmV0Y2hPbldpbmRvd0ZvY3VzKCkge1xuICAgIHJldHVybiBzaG91bGRGZXRjaE9uKHRoaXMuY3VycmVudFF1ZXJ5LCB0aGlzLm9wdGlvbnMsIHRoaXMub3B0aW9ucy5yZWZldGNoT25XaW5kb3dGb2N1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMubGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5jbGVhclRpbWVycygpO1xuICAgIHRoaXMuY3VycmVudFF1ZXJ5LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5zZXRPcHRpb25zID0gZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zLCBub3RpZnlPcHRpb25zKSB7XG4gICAgdmFyIHByZXZPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBwcmV2UXVlcnkgPSB0aGlzLmN1cnJlbnRRdWVyeTtcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmNsaWVudC5kZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBlbmFibGVkIHRvIGJlIGEgYm9vbGVhbicpO1xuICAgIH0gLy8gS2VlcCBwcmV2aW91cyBxdWVyeSBrZXkgaWYgdGhlIHVzZXIgZG9lcyBub3Qgc3VwcGx5IG9uZVxuXG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5xdWVyeUtleSkge1xuICAgICAgdGhpcy5vcHRpb25zLnF1ZXJ5S2V5ID0gcHJldk9wdGlvbnMucXVlcnlLZXk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVRdWVyeSgpO1xuICAgIHZhciBtb3VudGVkID0gdGhpcy5oYXNMaXN0ZW5lcnMoKTsgLy8gRmV0Y2ggaWYgdGhlcmUgYXJlIHN1YnNjcmliZXJzXG5cbiAgICBpZiAobW91bnRlZCAmJiBzaG91bGRGZXRjaE9wdGlvbmFsbHkodGhpcy5jdXJyZW50UXVlcnksIHByZXZRdWVyeSwgdGhpcy5vcHRpb25zLCBwcmV2T3B0aW9ucykpIHtcbiAgICAgIHRoaXMuZXhlY3V0ZUZldGNoKCk7XG4gICAgfSAvLyBVcGRhdGUgcmVzdWx0XG5cblxuICAgIHRoaXMudXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpOyAvLyBVcGRhdGUgc3RhbGUgaW50ZXJ2YWwgaWYgbmVlZGVkXG5cbiAgICBpZiAobW91bnRlZCAmJiAodGhpcy5jdXJyZW50UXVlcnkgIT09IHByZXZRdWVyeSB8fCB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gcHJldk9wdGlvbnMuZW5hYmxlZCB8fCB0aGlzLm9wdGlvbnMuc3RhbGVUaW1lICE9PSBwcmV2T3B0aW9ucy5zdGFsZVRpbWUpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YWxlVGltZW91dCgpO1xuICAgIH1cblxuICAgIHZhciBuZXh0UmVmZXRjaEludGVydmFsID0gdGhpcy5jb21wdXRlUmVmZXRjaEludGVydmFsKCk7IC8vIFVwZGF0ZSByZWZldGNoIGludGVydmFsIGlmIG5lZWRlZFxuXG4gICAgaWYgKG1vdW50ZWQgJiYgKHRoaXMuY3VycmVudFF1ZXJ5ICE9PSBwcmV2UXVlcnkgfHwgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09IHByZXZPcHRpb25zLmVuYWJsZWQgfHwgbmV4dFJlZmV0Y2hJbnRlcnZhbCAhPT0gdGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsKSkge1xuICAgICAgdGhpcy51cGRhdGVSZWZldGNoSW50ZXJ2YWwobmV4dFJlZmV0Y2hJbnRlcnZhbCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5nZXRPcHRpbWlzdGljUmVzdWx0ID0gZnVuY3Rpb24gZ2V0T3B0aW1pc3RpY1Jlc3VsdChvcHRpb25zKSB7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmNsaWVudC5kZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMob3B0aW9ucyk7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmJ1aWxkKHRoaXMuY2xpZW50LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVSZXN1bHQocXVlcnksIGRlZmF1bHRlZE9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5nZXRDdXJyZW50UmVzdWx0ID0gZnVuY3Rpb24gZ2V0Q3VycmVudFJlc3VsdCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UmVzdWx0O1xuICB9O1xuXG4gIF9wcm90by50cmFja1Jlc3VsdCA9IGZ1bmN0aW9uIHRyYWNrUmVzdWx0KHJlc3VsdCwgZGVmYXVsdGVkT3B0aW9ucykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIHRyYWNrZWRSZXN1bHQgPSB7fTtcblxuICAgIHZhciB0cmFja1Byb3AgPSBmdW5jdGlvbiB0cmFja1Byb3Aoa2V5KSB7XG4gICAgICBpZiAoIV90aGlzMi50cmFja2VkUHJvcHMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBfdGhpczIudHJhY2tlZFByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgT2JqZWN0LmtleXMocmVzdWx0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0cmFja2VkUmVzdWx0LCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgdHJhY2tQcm9wKGtleSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFtrZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChkZWZhdWx0ZWRPcHRpb25zLnVzZUVycm9yQm91bmRhcnkgfHwgZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSkge1xuICAgICAgdHJhY2tQcm9wKCdlcnJvcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFja2VkUmVzdWx0O1xuICB9O1xuXG4gIF9wcm90by5nZXROZXh0UmVzdWx0ID0gZnVuY3Rpb24gZ2V0TmV4dFJlc3VsdChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHVuc3Vic2NyaWJlID0gX3RoaXMzLnN1YnNjcmliZShmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIGlmICghcmVzdWx0LmlzRmV0Y2hpbmcpIHtcbiAgICAgICAgICB1bnN1YnNjcmliZSgpO1xuXG4gICAgICAgICAgaWYgKHJlc3VsdC5pc0Vycm9yICYmIChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnRocm93T25FcnJvcikpIHtcbiAgICAgICAgICAgIHJlamVjdChyZXN1bHQuZXJyb3IpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0Q3VycmVudFF1ZXJ5ID0gZnVuY3Rpb24gZ2V0Q3VycmVudFF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRRdWVyeTtcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgIHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5yZW1vdmUodGhpcy5jdXJyZW50UXVlcnkpO1xuICB9O1xuXG4gIF9wcm90by5yZWZldGNoID0gZnVuY3Rpb24gcmVmZXRjaChvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goX2V4dGVuZHMoe30sIG9wdGlvbnMsIHtcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgcmVmZXRjaFBhZ2U6IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucmVmZXRjaFBhZ2VcbiAgICAgIH1cbiAgICB9KSk7XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoT3B0aW1pc3RpYyA9IGZ1bmN0aW9uIGZldGNoT3B0aW1pc3RpYyhvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuY2xpZW50LmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKTtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLmNsaWVudC5nZXRRdWVyeUNhY2hlKCkuYnVpbGQodGhpcy5jbGllbnQsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIHJldHVybiBxdWVyeS5mZXRjaCgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzNC5jcmVhdGVSZXN1bHQocXVlcnksIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaCA9IGZ1bmN0aW9uIGZldGNoKGZldGNoT3B0aW9ucykge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUZldGNoKGZldGNoT3B0aW9ucykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUudXBkYXRlUmVzdWx0KCk7XG5cbiAgICAgIHJldHVybiBfdGhpczUuY3VycmVudFJlc3VsdDtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZUZldGNoID0gZnVuY3Rpb24gZXhlY3V0ZUZldGNoKGZldGNoT3B0aW9ucykge1xuICAgIC8vIE1ha2Ugc3VyZSB3ZSByZWZlcmVuY2UgdGhlIGxhdGVzdCBxdWVyeSBhcyB0aGUgY3VycmVudCBvbmUgbWlnaHQgaGF2ZSBiZWVuIHJlbW92ZWRcbiAgICB0aGlzLnVwZGF0ZVF1ZXJ5KCk7IC8vIEZldGNoXG5cbiAgICB2YXIgcHJvbWlzZSA9IHRoaXMuY3VycmVudFF1ZXJ5LmZldGNoKHRoaXMub3B0aW9ucywgZmV0Y2hPcHRpb25zKTtcblxuICAgIGlmICghKGZldGNoT3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hPcHRpb25zLnRocm93T25FcnJvcikpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVTdGFsZVRpbWVvdXQgPSBmdW5jdGlvbiB1cGRhdGVTdGFsZVRpbWVvdXQoKSB7XG4gICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICB0aGlzLmNsZWFyU3RhbGVUaW1lb3V0KCk7XG5cbiAgICBpZiAoaXNTZXJ2ZXIgfHwgdGhpcy5jdXJyZW50UmVzdWx0LmlzU3RhbGUgfHwgIWlzVmFsaWRUaW1lb3V0KHRoaXMub3B0aW9ucy5zdGFsZVRpbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRpbWUgPSB0aW1lVW50aWxTdGFsZSh0aGlzLmN1cnJlbnRSZXN1bHQuZGF0YVVwZGF0ZWRBdCwgdGhpcy5vcHRpb25zLnN0YWxlVGltZSk7IC8vIFRoZSB0aW1lb3V0IGlzIHNvbWV0aW1lcyB0cmlnZ2VyZWQgMSBtcyBiZWZvcmUgdGhlIHN0YWxlIHRpbWUgZXhwaXJhdGlvbi5cbiAgICAvLyBUbyBtaXRpZ2F0ZSB0aGlzIGlzc3VlIHdlIGFsd2F5cyBhZGQgMSBtcyB0byB0aGUgdGltZW91dC5cblxuICAgIHZhciB0aW1lb3V0ID0gdGltZSArIDE7XG4gICAgdGhpcy5zdGFsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFfdGhpczYuY3VycmVudFJlc3VsdC5pc1N0YWxlKSB7XG4gICAgICAgIF90aGlzNi51cGRhdGVSZXN1bHQoKTtcbiAgICAgIH1cbiAgICB9LCB0aW1lb3V0KTtcbiAgfTtcblxuICBfcHJvdG8uY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCA9IGZ1bmN0aW9uIGNvbXB1dGVSZWZldGNoSW50ZXJ2YWwoKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMkcmVmZXRjaDtcblxuICAgIHJldHVybiB0eXBlb2YgdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwodGhpcy5jdXJyZW50UmVzdWx0LmRhdGEsIHRoaXMuY3VycmVudFF1ZXJ5KSA6IChfdGhpcyRvcHRpb25zJHJlZmV0Y2ggPSB0aGlzLm9wdGlvbnMucmVmZXRjaEludGVydmFsKSAhPSBudWxsID8gX3RoaXMkb3B0aW9ucyRyZWZldGNoIDogZmFsc2U7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVJlZmV0Y2hJbnRlcnZhbCA9IGZ1bmN0aW9uIHVwZGF0ZVJlZmV0Y2hJbnRlcnZhbChuZXh0SW50ZXJ2YWwpIHtcbiAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgIHRoaXMuY2xlYXJSZWZldGNoSW50ZXJ2YWwoKTtcbiAgICB0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwgPSBuZXh0SW50ZXJ2YWw7XG5cbiAgICBpZiAoaXNTZXJ2ZXIgfHwgdGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IGZhbHNlIHx8ICFpc1ZhbGlkVGltZW91dCh0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwpIHx8IHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVmZXRjaEludGVydmFsSWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXM3Lm9wdGlvbnMucmVmZXRjaEludGVydmFsSW5CYWNrZ3JvdW5kIHx8IGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSkge1xuICAgICAgICBfdGhpczcuZXhlY3V0ZUZldGNoKCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsKTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlVGltZXJzID0gZnVuY3Rpb24gdXBkYXRlVGltZXJzKCkge1xuICAgIHRoaXMudXBkYXRlU3RhbGVUaW1lb3V0KCk7XG4gICAgdGhpcy51cGRhdGVSZWZldGNoSW50ZXJ2YWwodGhpcy5jb21wdXRlUmVmZXRjaEludGVydmFsKCkpO1xuICB9O1xuXG4gIF9wcm90by5jbGVhclRpbWVycyA9IGZ1bmN0aW9uIGNsZWFyVGltZXJzKCkge1xuICAgIHRoaXMuY2xlYXJTdGFsZVRpbWVvdXQoKTtcbiAgICB0aGlzLmNsZWFyUmVmZXRjaEludGVydmFsKCk7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyU3RhbGVUaW1lb3V0ID0gZnVuY3Rpb24gY2xlYXJTdGFsZVRpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhbGVUaW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN0YWxlVGltZW91dElkKTtcbiAgICAgIHRoaXMuc3RhbGVUaW1lb3V0SWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhclJlZmV0Y2hJbnRlcnZhbCA9IGZ1bmN0aW9uIGNsZWFyUmVmZXRjaEludGVydmFsKCkge1xuICAgIGlmICh0aGlzLnJlZmV0Y2hJbnRlcnZhbElkKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucmVmZXRjaEludGVydmFsSWQpO1xuICAgICAgdGhpcy5yZWZldGNoSW50ZXJ2YWxJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNyZWF0ZVJlc3VsdCA9IGZ1bmN0aW9uIGNyZWF0ZVJlc3VsdChxdWVyeSwgb3B0aW9ucykge1xuICAgIHZhciBwcmV2UXVlcnkgPSB0aGlzLmN1cnJlbnRRdWVyeTtcbiAgICB2YXIgcHJldk9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHByZXZSZXN1bHQgPSB0aGlzLmN1cnJlbnRSZXN1bHQ7XG4gICAgdmFyIHByZXZSZXN1bHRTdGF0ZSA9IHRoaXMuY3VycmVudFJlc3VsdFN0YXRlO1xuICAgIHZhciBwcmV2UmVzdWx0T3B0aW9ucyA9IHRoaXMuY3VycmVudFJlc3VsdE9wdGlvbnM7XG4gICAgdmFyIHF1ZXJ5Q2hhbmdlID0gcXVlcnkgIT09IHByZXZRdWVyeTtcbiAgICB2YXIgcXVlcnlJbml0aWFsU3RhdGUgPSBxdWVyeUNoYW5nZSA/IHF1ZXJ5LnN0YXRlIDogdGhpcy5jdXJyZW50UXVlcnlJbml0aWFsU3RhdGU7XG4gICAgdmFyIHByZXZRdWVyeVJlc3VsdCA9IHF1ZXJ5Q2hhbmdlID8gdGhpcy5jdXJyZW50UmVzdWx0IDogdGhpcy5wcmV2aW91c1F1ZXJ5UmVzdWx0O1xuICAgIHZhciBzdGF0ZSA9IHF1ZXJ5LnN0YXRlO1xuICAgIHZhciBkYXRhVXBkYXRlZEF0ID0gc3RhdGUuZGF0YVVwZGF0ZWRBdCxcbiAgICAgICAgZXJyb3IgPSBzdGF0ZS5lcnJvcixcbiAgICAgICAgZXJyb3JVcGRhdGVkQXQgPSBzdGF0ZS5lcnJvclVwZGF0ZWRBdCxcbiAgICAgICAgaXNGZXRjaGluZyA9IHN0YXRlLmlzRmV0Y2hpbmcsXG4gICAgICAgIHN0YXR1cyA9IHN0YXRlLnN0YXR1cztcbiAgICB2YXIgaXNQcmV2aW91c0RhdGEgPSBmYWxzZTtcbiAgICB2YXIgaXNQbGFjZWhvbGRlckRhdGEgPSBmYWxzZTtcbiAgICB2YXIgZGF0YTsgLy8gT3B0aW1pc3RpY2FsbHkgc2V0IHJlc3VsdCBpbiBmZXRjaGluZyBzdGF0ZSBpZiBuZWVkZWRcblxuICAgIGlmIChvcHRpb25zLm9wdGltaXN0aWNSZXN1bHRzKSB7XG4gICAgICB2YXIgbW91bnRlZCA9IHRoaXMuaGFzTGlzdGVuZXJzKCk7XG4gICAgICB2YXIgZmV0Y2hPbk1vdW50ID0gIW1vdW50ZWQgJiYgc2hvdWxkRmV0Y2hPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKTtcbiAgICAgIHZhciBmZXRjaE9wdGlvbmFsbHkgPSBtb3VudGVkICYmIHNob3VsZEZldGNoT3B0aW9uYWxseShxdWVyeSwgcHJldlF1ZXJ5LCBvcHRpb25zLCBwcmV2T3B0aW9ucyk7XG5cbiAgICAgIGlmIChmZXRjaE9uTW91bnQgfHwgZmV0Y2hPcHRpb25hbGx5KSB7XG4gICAgICAgIGlzRmV0Y2hpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICghZGF0YVVwZGF0ZWRBdCkge1xuICAgICAgICAgIHN0YXR1cyA9ICdsb2FkaW5nJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gS2VlcCBwcmV2aW91cyBkYXRhIGlmIG5lZWRlZFxuXG5cbiAgICBpZiAob3B0aW9ucy5rZWVwUHJldmlvdXNEYXRhICYmICFzdGF0ZS5kYXRhVXBkYXRlQ291bnQgJiYgKHByZXZRdWVyeVJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogcHJldlF1ZXJ5UmVzdWx0LmlzU3VjY2VzcykgJiYgc3RhdHVzICE9PSAnZXJyb3InKSB7XG4gICAgICBkYXRhID0gcHJldlF1ZXJ5UmVzdWx0LmRhdGE7XG4gICAgICBkYXRhVXBkYXRlZEF0ID0gcHJldlF1ZXJ5UmVzdWx0LmRhdGFVcGRhdGVkQXQ7XG4gICAgICBzdGF0dXMgPSBwcmV2UXVlcnlSZXN1bHQuc3RhdHVzO1xuICAgICAgaXNQcmV2aW91c0RhdGEgPSB0cnVlO1xuICAgIH0gLy8gU2VsZWN0IGRhdGEgaWYgbmVlZGVkXG4gICAgZWxzZSBpZiAob3B0aW9ucy5zZWxlY3QgJiYgdHlwZW9mIHN0YXRlLmRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIE1lbW9pemUgc2VsZWN0IHJlc3VsdFxuICAgICAgICBpZiAocHJldlJlc3VsdCAmJiBzdGF0ZS5kYXRhID09PSAocHJldlJlc3VsdFN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UmVzdWx0U3RhdGUuZGF0YSkgJiYgb3B0aW9ucy5zZWxlY3QgPT09IHRoaXMuc2VsZWN0Rm4pIHtcbiAgICAgICAgICBkYXRhID0gdGhpcy5zZWxlY3RSZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Rm4gPSBvcHRpb25zLnNlbGVjdDtcbiAgICAgICAgICAgIGRhdGEgPSBvcHRpb25zLnNlbGVjdChzdGF0ZS5kYXRhKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RydWN0dXJhbFNoYXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGRhdGEgPSByZXBsYWNlRXF1YWxEZWVwKHByZXZSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHQuZGF0YSwgZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVzdWx0ID0gZGF0YTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgIH0gY2F0Y2ggKHNlbGVjdEVycm9yKSB7XG4gICAgICAgICAgICBnZXRMb2dnZXIoKS5lcnJvcihzZWxlY3RFcnJvcik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVycm9yID0gc2VsZWN0RXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIFVzZSBxdWVyeSBkYXRhXG4gICAgICBlbHNlIHtcbiAgICAgICAgICBkYXRhID0gc3RhdGUuZGF0YTtcbiAgICAgICAgfSAvLyBTaG93IHBsYWNlaG9sZGVyIGRhdGEgaWYgbmVlZGVkXG5cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJyAmJiAoc3RhdHVzID09PSAnbG9hZGluZycgfHwgc3RhdHVzID09PSAnaWRsZScpKSB7XG4gICAgICB2YXIgcGxhY2Vob2xkZXJEYXRhOyAvLyBNZW1vaXplIHBsYWNlaG9sZGVyIGRhdGFcblxuICAgICAgaWYgKChwcmV2UmVzdWx0ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UmVzdWx0LmlzUGxhY2Vob2xkZXJEYXRhKSAmJiBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSA9PT0gKHByZXZSZXN1bHRPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UmVzdWx0T3B0aW9ucy5wbGFjZWhvbGRlckRhdGEpKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IHByZXZSZXN1bHQuZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IHR5cGVvZiBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhKCkgOiBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YTtcblxuICAgICAgICBpZiAob3B0aW9ucy5zZWxlY3QgJiYgdHlwZW9mIHBsYWNlaG9sZGVyRGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXJEYXRhID0gb3B0aW9ucy5zZWxlY3QocGxhY2Vob2xkZXJEYXRhKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RydWN0dXJhbFNoYXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IHJlcGxhY2VFcXVhbERlZXAocHJldlJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdC5kYXRhLCBwbGFjZWhvbGRlckRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVycm9yID0gbnVsbDtcbiAgICAgICAgICB9IGNhdGNoIChzZWxlY3RFcnJvcikge1xuICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3Ioc2VsZWN0RXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IHNlbGVjdEVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHBsYWNlaG9sZGVyRGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc3RhdHVzID0gJ3N1Y2Nlc3MnO1xuICAgICAgICBkYXRhID0gcGxhY2Vob2xkZXJEYXRhO1xuICAgICAgICBpc1BsYWNlaG9sZGVyRGF0YSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0RXJyb3IpIHtcbiAgICAgIGVycm9yID0gdGhpcy5zZWxlY3RFcnJvcjtcbiAgICAgIGRhdGEgPSB0aGlzLnNlbGVjdFJlc3VsdDtcbiAgICAgIGVycm9yVXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgICAgIHN0YXR1cyA9ICdlcnJvcic7XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogc3RhdHVzLFxuICAgICAgaXNMb2FkaW5nOiBzdGF0dXMgPT09ICdsb2FkaW5nJyxcbiAgICAgIGlzU3VjY2Vzczogc3RhdHVzID09PSAnc3VjY2VzcycsXG4gICAgICBpc0Vycm9yOiBzdGF0dXMgPT09ICdlcnJvcicsXG4gICAgICBpc0lkbGU6IHN0YXR1cyA9PT0gJ2lkbGUnLFxuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IGRhdGFVcGRhdGVkQXQsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgICBlcnJvclVwZGF0ZWRBdDogZXJyb3JVcGRhdGVkQXQsXG4gICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50LFxuICAgICAgZXJyb3JVcGRhdGVDb3VudDogc3RhdGUuZXJyb3JVcGRhdGVDb3VudCxcbiAgICAgIGlzRmV0Y2hlZDogc3RhdGUuZGF0YVVwZGF0ZUNvdW50ID4gMCB8fCBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50ID4gMCxcbiAgICAgIGlzRmV0Y2hlZEFmdGVyTW91bnQ6IHN0YXRlLmRhdGFVcGRhdGVDb3VudCA+IHF1ZXJ5SW5pdGlhbFN0YXRlLmRhdGFVcGRhdGVDb3VudCB8fCBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50ID4gcXVlcnlJbml0aWFsU3RhdGUuZXJyb3JVcGRhdGVDb3VudCxcbiAgICAgIGlzRmV0Y2hpbmc6IGlzRmV0Y2hpbmcsXG4gICAgICBpc1JlZmV0Y2hpbmc6IGlzRmV0Y2hpbmcgJiYgc3RhdHVzICE9PSAnbG9hZGluZycsXG4gICAgICBpc0xvYWRpbmdFcnJvcjogc3RhdHVzID09PSAnZXJyb3InICYmIHN0YXRlLmRhdGFVcGRhdGVkQXQgPT09IDAsXG4gICAgICBpc1BsYWNlaG9sZGVyRGF0YTogaXNQbGFjZWhvbGRlckRhdGEsXG4gICAgICBpc1ByZXZpb3VzRGF0YTogaXNQcmV2aW91c0RhdGEsXG4gICAgICBpc1JlZmV0Y2hFcnJvcjogc3RhdHVzID09PSAnZXJyb3InICYmIHN0YXRlLmRhdGFVcGRhdGVkQXQgIT09IDAsXG4gICAgICBpc1N0YWxlOiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKSxcbiAgICAgIHJlZmV0Y2g6IHRoaXMucmVmZXRjaCxcbiAgICAgIHJlbW92ZTogdGhpcy5yZW1vdmVcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLnNob3VsZE5vdGlmeUxpc3RlbmVycyA9IGZ1bmN0aW9uIHNob3VsZE5vdGlmeUxpc3RlbmVycyhyZXN1bHQsIHByZXZSZXN1bHQpIHtcbiAgICBpZiAoIXByZXZSZXN1bHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyRvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBub3RpZnlPbkNoYW5nZVByb3BzID0gX3RoaXMkb3B0aW9ucy5ub3RpZnlPbkNoYW5nZVByb3BzLFxuICAgICAgICBub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucyA9IF90aGlzJG9wdGlvbnMubm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnM7XG5cbiAgICBpZiAoIW5vdGlmeU9uQ2hhbmdlUHJvcHMgJiYgIW5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobm90aWZ5T25DaGFuZ2VQcm9wcyA9PT0gJ3RyYWNrZWQnICYmICF0aGlzLnRyYWNrZWRQcm9wcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBpbmNsdWRlZFByb3BzID0gbm90aWZ5T25DaGFuZ2VQcm9wcyA9PT0gJ3RyYWNrZWQnID8gdGhpcy50cmFja2VkUHJvcHMgOiBub3RpZnlPbkNoYW5nZVByb3BzO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXN1bHQpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIHR5cGVkS2V5ID0ga2V5O1xuICAgICAgdmFyIGNoYW5nZWQgPSByZXN1bHRbdHlwZWRLZXldICE9PSBwcmV2UmVzdWx0W3R5cGVkS2V5XTtcbiAgICAgIHZhciBpc0luY2x1ZGVkID0gaW5jbHVkZWRQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogaW5jbHVkZWRQcm9wcy5zb21lKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ID09PSBrZXk7XG4gICAgICB9KTtcbiAgICAgIHZhciBpc0V4Y2x1ZGVkID0gbm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zLnNvbWUoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IGtleTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNoYW5nZWQgJiYgIWlzRXhjbHVkZWQgJiYgKCFpbmNsdWRlZFByb3BzIHx8IGlzSW5jbHVkZWQpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVSZXN1bHQgPSBmdW5jdGlvbiB1cGRhdGVSZXN1bHQobm90aWZ5T3B0aW9ucykge1xuICAgIHZhciBwcmV2UmVzdWx0ID0gdGhpcy5jdXJyZW50UmVzdWx0O1xuICAgIHRoaXMuY3VycmVudFJlc3VsdCA9IHRoaXMuY3JlYXRlUmVzdWx0KHRoaXMuY3VycmVudFF1ZXJ5LCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuY3VycmVudFJlc3VsdFN0YXRlID0gdGhpcy5jdXJyZW50UXVlcnkuc3RhdGU7XG4gICAgdGhpcy5jdXJyZW50UmVzdWx0T3B0aW9ucyA9IHRoaXMub3B0aW9uczsgLy8gT25seSBub3RpZnkgaWYgc29tZXRoaW5nIGhhcyBjaGFuZ2VkXG5cbiAgICBpZiAoc2hhbGxvd0VxdWFsT2JqZWN0cyh0aGlzLmN1cnJlbnRSZXN1bHQsIHByZXZSZXN1bHQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZXRlcm1pbmUgd2hpY2ggY2FsbGJhY2tzIHRvIHRyaWdnZXJcblxuXG4gICAgdmFyIGRlZmF1bHROb3RpZnlPcHRpb25zID0ge1xuICAgICAgY2FjaGU6IHRydWVcbiAgICB9O1xuXG4gICAgaWYgKChub3RpZnlPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBub3RpZnlPcHRpb25zLmxpc3RlbmVycykgIT09IGZhbHNlICYmIHRoaXMuc2hvdWxkTm90aWZ5TGlzdGVuZXJzKHRoaXMuY3VycmVudFJlc3VsdCwgcHJldlJlc3VsdCkpIHtcbiAgICAgIGRlZmF1bHROb3RpZnlPcHRpb25zLmxpc3RlbmVycyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnkoX2V4dGVuZHMoe30sIGRlZmF1bHROb3RpZnlPcHRpb25zLCBub3RpZnlPcHRpb25zKSk7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVF1ZXJ5ID0gZnVuY3Rpb24gdXBkYXRlUXVlcnkoKSB7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmJ1aWxkKHRoaXMuY2xpZW50LCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgaWYgKHF1ZXJ5ID09PSB0aGlzLmN1cnJlbnRRdWVyeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcmV2UXVlcnkgPSB0aGlzLmN1cnJlbnRRdWVyeTtcbiAgICB0aGlzLmN1cnJlbnRRdWVyeSA9IHF1ZXJ5O1xuICAgIHRoaXMuY3VycmVudFF1ZXJ5SW5pdGlhbFN0YXRlID0gcXVlcnkuc3RhdGU7XG4gICAgdGhpcy5wcmV2aW91c1F1ZXJ5UmVzdWx0ID0gdGhpcy5jdXJyZW50UmVzdWx0O1xuXG4gICAgaWYgKHRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHByZXZRdWVyeSA9PSBudWxsID8gdm9pZCAwIDogcHJldlF1ZXJ5LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICAgICAgcXVlcnkuYWRkT2JzZXJ2ZXIodGhpcyk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblF1ZXJ5VXBkYXRlID0gZnVuY3Rpb24gb25RdWVyeVVwZGF0ZShhY3Rpb24pIHtcbiAgICB2YXIgbm90aWZ5T3B0aW9ucyA9IHt9O1xuXG4gICAgaWYgKGFjdGlvbi50eXBlID09PSAnc3VjY2VzcycpIHtcbiAgICAgIG5vdGlmeU9wdGlvbnMub25TdWNjZXNzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSAnZXJyb3InICYmICFpc0NhbmNlbGxlZEVycm9yKGFjdGlvbi5lcnJvcikpIHtcbiAgICAgIG5vdGlmeU9wdGlvbnMub25FcnJvciA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVSZXN1bHQobm90aWZ5T3B0aW9ucyk7XG5cbiAgICBpZiAodGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdGhpcy51cGRhdGVUaW1lcnMoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeShub3RpZnlPcHRpb25zKSB7XG4gICAgdmFyIF90aGlzOCA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEZpcnN0IHRyaWdnZXIgdGhlIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2tzXG4gICAgICBpZiAobm90aWZ5T3B0aW9ucy5vblN1Y2Nlc3MpIHtcbiAgICAgICAgX3RoaXM4Lm9wdGlvbnMub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczgub3B0aW9ucy5vblN1Y2Nlc3MoX3RoaXM4LmN1cnJlbnRSZXN1bHQuZGF0YSk7XG4gICAgICAgIF90aGlzOC5vcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXM4Lm9wdGlvbnMub25TZXR0bGVkKF90aGlzOC5jdXJyZW50UmVzdWx0LmRhdGEsIG51bGwpO1xuICAgICAgfSBlbHNlIGlmIChub3RpZnlPcHRpb25zLm9uRXJyb3IpIHtcbiAgICAgICAgX3RoaXM4Lm9wdGlvbnMub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXM4Lm9wdGlvbnMub25FcnJvcihfdGhpczguY3VycmVudFJlc3VsdC5lcnJvcik7XG4gICAgICAgIF90aGlzOC5vcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXM4Lm9wdGlvbnMub25TZXR0bGVkKHVuZGVmaW5lZCwgX3RoaXM4LmN1cnJlbnRSZXN1bHQuZXJyb3IpO1xuICAgICAgfSAvLyBUaGVuIHRyaWdnZXIgdGhlIGxpc3RlbmVyc1xuXG5cbiAgICAgIGlmIChub3RpZnlPcHRpb25zLmxpc3RlbmVycykge1xuICAgICAgICBfdGhpczgubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgICAgbGlzdGVuZXIoX3RoaXM4LmN1cnJlbnRSZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICAgIH0gLy8gVGhlbiB0aGUgY2FjaGUgbGlzdGVuZXJzXG5cblxuICAgICAgaWYgKG5vdGlmeU9wdGlvbnMuY2FjaGUpIHtcbiAgICAgICAgX3RoaXM4LmNsaWVudC5nZXRRdWVyeUNhY2hlKCkubm90aWZ5KHtcbiAgICAgICAgICBxdWVyeTogX3RoaXM4LmN1cnJlbnRRdWVyeSxcbiAgICAgICAgICB0eXBlOiAnb2JzZXJ2ZXJSZXN1bHRzVXBkYXRlZCdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5T2JzZXJ2ZXI7XG59KFN1YnNjcmliYWJsZSk7XG5cbmZ1bmN0aW9uIHNob3VsZExvYWRPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlICYmICFxdWVyeS5zdGF0ZS5kYXRhVXBkYXRlZEF0ICYmICEocXVlcnkuc3RhdGUuc3RhdHVzID09PSAnZXJyb3InICYmIG9wdGlvbnMucmV0cnlPbk1vdW50ID09PSBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEZldGNoT25Nb3VudChxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gc2hvdWxkTG9hZE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHx8IHF1ZXJ5LnN0YXRlLmRhdGFVcGRhdGVkQXQgPiAwICYmIHNob3VsZEZldGNoT24ocXVlcnksIG9wdGlvbnMsIG9wdGlvbnMucmVmZXRjaE9uTW91bnQpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRGZXRjaE9uKHF1ZXJ5LCBvcHRpb25zLCBmaWVsZCkge1xuICBpZiAob3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZSkge1xuICAgIHZhciB2YWx1ZSA9IHR5cGVvZiBmaWVsZCA9PT0gJ2Z1bmN0aW9uJyA/IGZpZWxkKHF1ZXJ5KSA6IGZpZWxkO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJ2Fsd2F5cycgfHwgdmFsdWUgIT09IGZhbHNlICYmIGlzU3RhbGUocXVlcnksIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzaG91bGRGZXRjaE9wdGlvbmFsbHkocXVlcnksIHByZXZRdWVyeSwgb3B0aW9ucywgcHJldk9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2UgJiYgKHF1ZXJ5ICE9PSBwcmV2UXVlcnkgfHwgcHJldk9wdGlvbnMuZW5hYmxlZCA9PT0gZmFsc2UpICYmICghb3B0aW9ucy5zdXNwZW5zZSB8fCBxdWVyeS5zdGF0ZS5zdGF0dXMgIT09ICdlcnJvcicpICYmIGlzU3RhbGUocXVlcnksIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKSB7XG4gIHJldHVybiBxdWVyeS5pc1N0YWxlQnlUaW1lKG9wdGlvbnMuc3RhbGVUaW1lKTtcbn0iLCAiaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5leHBvcnQgdmFyIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gUmVhY3RET00udW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM7IiwgImltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIH0gZnJvbSAnLi9yZWFjdEJhdGNoZWRVcGRhdGVzJztcbm5vdGlmeU1hbmFnZXIuc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbih1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyk7IiwgImV4cG9ydCB2YXIgbG9nZ2VyID0gY29uc29sZTsiLCAiaW1wb3J0IHsgc2V0TG9nZ2VyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5zZXRMb2dnZXIobG9nZ2VyKTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBkZWZhdWx0Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG52YXIgUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KGZhbHNlKTsgLy8gaWYgY29udGV4dFNoYXJpbmcgaXMgb24sIHdlIHNoYXJlIHRoZSBmaXJzdCBhbmQgYXQgbGVhc3Qgb25lXG4vLyBpbnN0YW5jZSBvZiB0aGUgY29udGV4dCBhY3Jvc3MgdGhlIHdpbmRvd1xuLy8gdG8gZW5zdXJlIHRoYXQgaWYgUmVhY3QgUXVlcnkgaXMgdXNlZCBhY3Jvc3Ncbi8vIGRpZmZlcmVudCBidW5kbGVzIG9yIG1pY3JvZnJvbnRlbmRzIHRoZXkgd2lsbFxuLy8gYWxsIHVzZSB0aGUgc2FtZSAqKmluc3RhbmNlKiogb2YgY29udGV4dCwgcmVnYXJkbGVzc1xuLy8gb2YgbW9kdWxlIHNjb3BpbmcuXG5cbmZ1bmN0aW9uIGdldFF1ZXJ5Q2xpZW50Q29udGV4dChjb250ZXh0U2hhcmluZykge1xuICBpZiAoY29udGV4dFNoYXJpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoIXdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dCkge1xuICAgICAgd2luZG93LlJlYWN0UXVlcnlDbGllbnRDb250ZXh0ID0gZGVmYXVsdENvbnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dDtcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0Q29udGV4dDtcbn1cblxuZXhwb3J0IHZhciB1c2VRdWVyeUNsaWVudCA9IGZ1bmN0aW9uIHVzZVF1ZXJ5Q2xpZW50KCkge1xuICB2YXIgcXVlcnlDbGllbnQgPSBSZWFjdC51c2VDb250ZXh0KGdldFF1ZXJ5Q2xpZW50Q29udGV4dChSZWFjdC51c2VDb250ZXh0KFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQpKSk7XG5cbiAgaWYgKCFxdWVyeUNsaWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gUXVlcnlDbGllbnQgc2V0LCB1c2UgUXVlcnlDbGllbnRQcm92aWRlciB0byBzZXQgb25lJyk7XG4gIH1cblxuICByZXR1cm4gcXVlcnlDbGllbnQ7XG59O1xuZXhwb3J0IHZhciBRdWVyeUNsaWVudFByb3ZpZGVyID0gZnVuY3Rpb24gUXVlcnlDbGllbnRQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjbGllbnQgPSBfcmVmLmNsaWVudCxcbiAgICAgIF9yZWYkY29udGV4dFNoYXJpbmcgPSBfcmVmLmNvbnRleHRTaGFyaW5nLFxuICAgICAgY29udGV4dFNoYXJpbmcgPSBfcmVmJGNvbnRleHRTaGFyaW5nID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY29udGV4dFNoYXJpbmcsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgY2xpZW50Lm1vdW50KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsaWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgfSwgW2NsaWVudF0pO1xuICB2YXIgQ29udGV4dCA9IGdldFF1ZXJ5Q2xpZW50Q29udGV4dChjb250ZXh0U2hhcmluZyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHRTaGFyaW5nXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2xpZW50XG4gIH0sIGNoaWxkcmVuKSk7XG59OyIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBDT05URVhUXG5cbmZ1bmN0aW9uIGNyZWF0ZVZhbHVlKCkge1xuICB2YXIgX2lzUmVzZXQgPSBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBjbGVhclJlc2V0OiBmdW5jdGlvbiBjbGVhclJlc2V0KCkge1xuICAgICAgX2lzUmVzZXQgPSBmYWxzZTtcbiAgICB9LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgIF9pc1Jlc2V0ID0gdHJ1ZTtcbiAgICB9LFxuICAgIGlzUmVzZXQ6IGZ1bmN0aW9uIGlzUmVzZXQoKSB7XG4gICAgICByZXR1cm4gX2lzUmVzZXQ7XG4gICAgfVxuICB9O1xufVxuXG52YXIgUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoY3JlYXRlVmFsdWUoKSk7IC8vIEhPT0tcblxuZXhwb3J0IHZhciB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSA9IGZ1bmN0aW9uIHVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5KCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChRdWVyeUVycm9yUmVzZXRCb3VuZGFyeUNvbnRleHQpO1xufTsgLy8gQ09NUE9ORU5UXG5cbmV4cG9ydCB2YXIgUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgPSBmdW5jdGlvbiBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciB2YWx1ZSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjcmVhdGVWYWx1ZSgpO1xuICB9LCBbXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChRdWVyeUVycm9yUmVzZXRCb3VuZGFyeUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSwgdHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4odmFsdWUpIDogY2hpbGRyZW4pO1xufTsiLCAiZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFRocm93RXJyb3Ioc3VzcGVuc2UsIF91c2VFcnJvckJvdW5kYXJ5LCBwYXJhbXMpIHtcbiAgLy8gQWxsb3cgdXNlRXJyb3JCb3VuZGFyeSBmdW5jdGlvbiB0byBvdmVycmlkZSB0aHJvd2luZyBiZWhhdmlvciBvbiBhIHBlci1lcnJvciBiYXNpc1xuICBpZiAodHlwZW9mIF91c2VFcnJvckJvdW5kYXJ5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF91c2VFcnJvckJvdW5kYXJ5LmFwcGx5KHZvaWQgMCwgcGFyYW1zKTtcbiAgfSAvLyBBbGxvdyB1c2VFcnJvckJvdW5kYXJ5IHRvIG92ZXJyaWRlIHN1c3BlbnNlJ3MgdGhyb3dpbmcgYmVoYXZpb3JcblxuXG4gIGlmICh0eXBlb2YgX3VzZUVycm9yQm91bmRhcnkgPT09ICdib29sZWFuJykgcmV0dXJuIF91c2VFcnJvckJvdW5kYXJ5OyAvLyBJZiBzdXNwZW5zZSBpcyBlbmFibGVkIGRlZmF1bHQgdG8gdGhyb3dpbmcgZXJyb3JzXG5cbiAgcmV0dXJuICEhc3VzcGVuc2U7XG59IiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IHVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5IH0gZnJvbSAnLi9RdWVyeUVycm9yUmVzZXRCb3VuZGFyeSc7XG5pbXBvcnQgeyB1c2VRdWVyeUNsaWVudCB9IGZyb20gJy4vUXVlcnlDbGllbnRQcm92aWRlcic7XG5pbXBvcnQgeyBzaG91bGRUaHJvd0Vycm9yIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgZnVuY3Rpb24gdXNlQmFzZVF1ZXJ5KG9wdGlvbnMsIE9ic2VydmVyKSB7XG4gIHZhciBtb3VudGVkUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcblxuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoMCksXG4gICAgICBmb3JjZVVwZGF0ZSA9IF9SZWFjdCR1c2VTdGF0ZVsxXTtcblxuICB2YXIgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuICB2YXIgZXJyb3JSZXNldEJvdW5kYXJ5ID0gdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkoKTtcbiAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSBxdWVyeUNsaWVudC5kZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMob3B0aW9ucyk7IC8vIE1ha2Ugc3VyZSByZXN1bHRzIGFyZSBvcHRpbWlzdGljYWxseSBzZXQgaW4gZmV0Y2hpbmcgc3RhdGUgYmVmb3JlIHN1YnNjcmliaW5nIG9yIHVwZGF0aW5nIG9wdGlvbnNcblxuICBkZWZhdWx0ZWRPcHRpb25zLm9wdGltaXN0aWNSZXN1bHRzID0gdHJ1ZTsgLy8gSW5jbHVkZSBjYWxsYmFja3MgaW4gYmF0Y2ggcmVuZGVyc1xuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IpIHtcbiAgICBkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IgPSBub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yKTtcbiAgfVxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2Vzcykge1xuICAgIGRlZmF1bHRlZE9wdGlvbnMub25TdWNjZXNzID0gbm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKGRlZmF1bHRlZE9wdGlvbnMub25TdWNjZXNzKTtcbiAgfVxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCkge1xuICAgIGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkID0gbm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkKTtcbiAgfVxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlKSB7XG4gICAgLy8gQWx3YXlzIHNldCBzdGFsZSB0aW1lIHdoZW4gdXNpbmcgc3VzcGVuc2UgdG8gcHJldmVudFxuICAgIC8vIGZldGNoaW5nIGFnYWluIHdoZW4gZGlyZWN0bHkgbW91bnRpbmcgYWZ0ZXIgc3VzcGVuZGluZ1xuICAgIGlmICh0eXBlb2YgZGVmYXVsdGVkT3B0aW9ucy5zdGFsZVRpbWUgIT09ICdudW1iZXInKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSA9IDEwMDA7XG4gICAgfSAvLyBTZXQgY2FjaGUgdGltZSB0byAxIGlmIHRoZSBvcHRpb24gaGFzIGJlZW4gc2V0IHRvIDBcbiAgICAvLyB3aGVuIHVzaW5nIHN1c3BlbnNlIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcCBvZiBmZXRjaGVzXG5cblxuICAgIGlmIChkZWZhdWx0ZWRPcHRpb25zLmNhY2hlVGltZSA9PT0gMCkge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5jYWNoZVRpbWUgPSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlIHx8IGRlZmF1bHRlZE9wdGlvbnMudXNlRXJyb3JCb3VuZGFyeSkge1xuICAgIC8vIFByZXZlbnQgcmV0cnlpbmcgZmFpbGVkIHF1ZXJ5IGlmIHRoZSBlcnJvciBib3VuZGFyeSBoYXMgbm90IGJlZW4gcmVzZXQgeWV0XG4gICAgaWYgKCFlcnJvclJlc2V0Qm91bmRhcnkuaXNSZXNldCgpKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5T25Nb3VudCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBfUmVhY3QkdXNlU3RhdGUyID0gUmVhY3QudXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2ZXIocXVlcnlDbGllbnQsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICB9KSxcbiAgICAgIG9ic2VydmVyID0gX1JlYWN0JHVzZVN0YXRlMlswXTtcblxuICB2YXIgcmVzdWx0ID0gb2JzZXJ2ZXIuZ2V0T3B0aW1pc3RpY1Jlc3VsdChkZWZhdWx0ZWRPcHRpb25zKTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBtb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIGVycm9yUmVzZXRCb3VuZGFyeS5jbGVhclJlc2V0KCk7XG4gICAgdmFyIHVuc3Vic2NyaWJlID0gb2JzZXJ2ZXIuc3Vic2NyaWJlKG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAobW91bnRlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGZvcmNlVXBkYXRlKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIHggKyAxO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KSk7IC8vIFVwZGF0ZSByZXN1bHQgdG8gbWFrZSBzdXJlIHdlIGRpZCBub3QgbWlzcyBhbnkgcXVlcnkgdXBkYXRlc1xuICAgIC8vIGJldHdlZW4gY3JlYXRpbmcgdGhlIG9ic2VydmVyIGFuZCBzdWJzY3JpYmluZyB0byBpdC5cblxuICAgIG9ic2VydmVyLnVwZGF0ZVJlc3VsdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBtb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgfSwgW2Vycm9yUmVzZXRCb3VuZGFyeSwgb2JzZXJ2ZXJdKTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBEbyBub3Qgbm90aWZ5IG9uIHVwZGF0ZXMgYmVjYXVzZSBvZiBjaGFuZ2VzIGluIHRoZSBvcHRpb25zIGJlY2F1c2VcbiAgICAvLyB0aGVzZSBjaGFuZ2VzIHNob3VsZCBhbHJlYWR5IGJlIHJlZmxlY3RlZCBpbiB0aGUgb3B0aW1pc3RpYyByZXN1bHQuXG4gICAgb2JzZXJ2ZXIuc2V0T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zLCB7XG4gICAgICBsaXN0ZW5lcnM6IGZhbHNlXG4gICAgfSk7XG4gIH0sIFtkZWZhdWx0ZWRPcHRpb25zLCBvYnNlcnZlcl0pOyAvLyBIYW5kbGUgc3VzcGVuc2VcblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSAmJiByZXN1bHQuaXNMb2FkaW5nKSB7XG4gICAgdGhyb3cgb2JzZXJ2ZXIuZmV0Y2hPcHRpbWlzdGljKGRlZmF1bHRlZE9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBkYXRhID0gX3JlZi5kYXRhO1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IGRlZmF1bHRlZE9wdGlvbnMub25TdWNjZXNzKGRhdGEpO1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkKGRhdGEsIG51bGwpO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgZXJyb3JSZXNldEJvdW5kYXJ5LmNsZWFyUmVzZXQoKTtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yKGVycm9yKTtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCh1bmRlZmluZWQsIGVycm9yKTtcbiAgICB9KTtcbiAgfSAvLyBIYW5kbGUgZXJyb3IgYm91bmRhcnlcblxuXG4gIGlmIChyZXN1bHQuaXNFcnJvciAmJiAhZXJyb3JSZXNldEJvdW5kYXJ5LmlzUmVzZXQoKSAmJiAhcmVzdWx0LmlzRmV0Y2hpbmcgJiYgc2hvdWxkVGhyb3dFcnJvcihkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlLCBkZWZhdWx0ZWRPcHRpb25zLnVzZUVycm9yQm91bmRhcnksIFtyZXN1bHQuZXJyb3IsIG9ic2VydmVyLmdldEN1cnJlbnRRdWVyeSgpXSkpIHtcbiAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gIH0gLy8gSGFuZGxlIHJlc3VsdCBwcm9wZXJ0eSB1c2FnZSB0cmFja2luZ1xuXG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMubm90aWZ5T25DaGFuZ2VQcm9wcyA9PT0gJ3RyYWNrZWQnKSB7XG4gICAgcmVzdWx0ID0gb2JzZXJ2ZXIudHJhY2tSZXN1bHQocmVzdWx0LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59IiwgImltcG9ydCB7IFF1ZXJ5T2JzZXJ2ZXIgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IHBhcnNlUXVlcnlBcmdzIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyB1c2VCYXNlUXVlcnkgfSBmcm9tICcuL3VzZUJhc2VRdWVyeSc7IC8vIEhPT0tcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgcmV0dXJuIHVzZUJhc2VRdWVyeShwYXJzZWRPcHRpb25zLCBRdWVyeU9ic2VydmVyKTtcbn0iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlCYWRnZSwgRXVpSWNvbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtCcmVhZGNydW1iUHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gQnJlYWRjcnVtYlByZXNlbnRhdGlvbihwcm9wczogQnJlYWRjcnVtYlByZXNlbnRhdGlvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHtpZihwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSkgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kocHJvcHMub250b2xvZ3lJZCB8fCBcIlwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCl9fT5cbiAgICAgICAgICAgICAgICA8RXVpQmFkZ2UgY2xhc3NOYW1lPXtwcm9wcy5vbnRvbG9neUlkID8gXCJicmVhZGNydW1iIGNsaWNrYWJsZS1icmVhZGNydW1iXCIgOiBcImJyZWFkY3J1bWJcIn0gY29sb3I9e3Byb3BzLmNvbG9yRmlyc3QgfHwgXCJwcmltYXJ5XCJ9PlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMub250b2xvZ3lOYW1lID8gcHJvcHMub250b2xvZ3lOYW1lLnRvVXBwZXJDYXNlKCkgOiBcIk5vIG9udG9sb2d5IG5hbWUgYXZhaWxhYmxlXCJ9XG4gICAgICAgICAgICAgICAgPC9FdWlCYWRnZT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgJm5ic3A7PEV1aUljb24gdHlwZT1cImFycm93UmlnaHRcIi8+Jm5ic3A7XG4gICAgICAgICAgICA8RXVpQmFkZ2UgY2xhc3NOYW1lPVwiYnJlYWRjcnVtYlwiIGNvbG9yPXtwcm9wcy5jb2xvclNlY29uZCB8fCBcInN1Y2Nlc3NcIn0+XG4gICAgICAgICAgICAgICAge3Byb3BzLnNob3J0Rm9ybSA/IHByb3BzLnNob3J0Rm9ybS50b1VwcGVyQ2FzZSgpIDogXCJObyBzaG9ydCBmb3JtIGF2YWlsYWJsZVwifVxuICAgICAgICAgICAgPC9FdWlCYWRnZT5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlDYXJkLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge09udG9sb2dpZXN9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge0RhdGFDb250ZW50V2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIERhdGFDb250ZW50V2lkZ2V0KHByb3BzOiBEYXRhQ29udGVudFdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgYXBpLCBwYXJhbWV0ZXIsIC4uLnJlc3QgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGE6IG9udG9sb2dpZXNEYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc0Vycm9yLFxuICAgIGRhdGFVcGRhdGVkQXRcbiAgfSA9IHVzZVF1ZXJ5PE9udG9sb2dpZXM+KFxuICAgIFtcIm9udG9sb2dpZXNEYXRhXCIsIGFwaSwgcGFyYW1ldGVyXSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldE9udG9sb2dpZXNEYXRhKFxuICAgICAgICBwcm9wcy5wYXJhbWV0ZXJcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxFdWlDYXJkXG4gICAgICAgIHRpdGxlPVwiRGF0YSBDb250ZW50XCJcbiAgICAgICAgZGVzY3JpcHRpb249e2RhdGFVcGRhdGVkQXQgPyBgVXBkYXRlZCAke25ldyBEYXRlKGRhdGFVcGRhdGVkQXQpLnRvTG9jYWxlU3RyaW5nKCl9YCA6IFwiXCJ9XG4gICAgICAgIGxheW91dD1cImhvcml6b250YWxcIlxuICAgICAgPlxuICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG4gICAgICAgICAgeyhpc0Vycm9yKSAmJiA8RXVpVGV4dD5ObyBkYXRhIGNvbnRlbnQgYXZhaWxhYmxlPC9FdWlUZXh0Pn1cbiAgICAgICAgICB7aXNMb2FkaW5nXG4gICAgICAgICAgICA/IDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+XG4gICAgICAgICAgICA6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgIHsob250b2xvZ2llc0RhdGE/LmdldFRvdGFsT250b2xvZ2llcygpXG4gICAgICAgICAgICAgICAgPyA8bGk+e29udG9sb2dpZXNEYXRhPy5nZXRUb3RhbE9udG9sb2dpZXMoKS50b0xvY2FsZVN0cmluZygpfSBvbnRvbG9naWVzIGFuZCB0ZXJtaW5vbG9naWVzPC9saT5cbiAgICAgICAgICAgICAgICA6IDxsaSBzdHlsZT17eyBmb250U3R5bGU6IFwiaXRhbGljXCIgfX0+b250b2xvZ3kgbnVtYmVyIG5vdCBhdmFpbGFibGU8L2xpPil9XG4gICAgICAgICAgICAgIHsob250b2xvZ2llc0RhdGE/LmdldE51bUNsYXNzZXMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0TnVtQ2xhc3NlcygpLnRvTG9jYWxlU3RyaW5nKCl9IHRlcm1zPC9saT5cbiAgICAgICAgICAgICAgICA6IDxsaSBzdHlsZT17eyBmb250U3R5bGU6IFwiaXRhbGljXCIgfX0+dGVybSBudW1iZXIgbm90IGF2YWlsYWJsZTwvbGk+KX1cbiAgICAgICAgICAgICAgeyhvbnRvbG9naWVzRGF0YT8uZ2V0TnVtUHJvcGVydGllcygpXG4gICAgICAgICAgICAgICAgPyA8bGk+e29udG9sb2dpZXNEYXRhPy5nZXROdW1Qcm9wZXJ0aWVzKCkudG9Mb2NhbGVTdHJpbmcoKX0gcHJvcGVydGllczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19PnByb3BlcnR5IG51bWJlciBub3QgYXZhaWxhYmxlPC9saT4pfVxuICAgICAgICAgICAgICB7KG9udG9sb2dpZXNEYXRhPy5nZXROdW1JbmRpdmlkdWFscygpXG4gICAgICAgICAgICAgICAgPyA8bGk+e29udG9sb2dpZXNEYXRhPy5nZXROdW1JbmRpdmlkdWFscygpLnRvTG9jYWxlU3RyaW5nKCl9IGluZGl2aWR1YWxzPC9saT5cbiAgICAgICAgICAgICAgICA6IDxsaSBzdHlsZT17eyBmb250U3R5bGU6IFwiaXRhbGljXCIgfX0+aW5kaXZpZHVhbCBudW1iZXIgbm90IGF2YWlsYWJsZTwvbGk+KX1cbiAgICAgICAgICAgICAgey8qIDxsaT5WZXJzaW9uIHtOT1RfQVZBSUxBQkxFfTwvbGk+ICovfSB7LyogVE9ETyBob3cgdG8gZ2V0IEFQSSB2ZXJzaW9uPyAqL31cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgfVxuICAgICAgICA8L0V1aVRleHQ+XG4gICAgICA8L0V1aUNhcmQ+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURhdGFDb250ZW50KHByb3BzOiBEYXRhQ29udGVudFdpZGdldFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZERhdGFDb250ZW50V2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWREYXRhQ29udGVudFdpZGdldChwcm9wczogRGF0YUNvbnRlbnRXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxEYXRhQ29udGVudFdpZGdldFxuICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IERhdGFDb250ZW50V2lkZ2V0LCBjcmVhdGVEYXRhQ29udGVudCB9O1xuIiwgImltcG9ydCBSZWFjdCwge1JlYWN0RWxlbWVudH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUNhcmQsIEV1aUZsZXhJdGVtLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVNwYWNlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtPbHNBcGl9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSAncmVhY3QtcXVlcnknO1xuaW1wb3J0IHthc0FycmF5LCBjYXBpdGFsaXplLCBkZUNhbWVsQ2FzZSwgZGVVbmRlcnNjb3JlLCBnZXRFbnRpdHlUeXBlTmFtZSwgcmFuZG9tU3RyaW5nLCBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXl9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtnZXRDbGFzc0V4cHJlc3Npb25KU1gsIGdldEVudGl0eUxpbmtKU1gsIGdldFJlaWZpZWRKU1gsIGdldFRvb2x0aXB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9TdHJ1Y3R1cmVSZW5kZXJpbmdcIjtcbmltcG9ydCB7UHJvcGVydHksIFRoaW5nLCBDbGFzcywgRW50aXR5LCBJbmRpdmlkdWFsfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtpc0NsYXNzLCBpc1Byb3BlcnR5LCBpc0luZGl2aWR1YWx9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHtFbnRpdHlJbmZvV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IERFRkFVTFRfSEFTX1RJVExFID0gdHJ1ZTtcblxuZnVuY3Rpb24gRW50aXR5SW5mb1dpZGdldChwcm9wczogRW50aXR5SW5mb1dpZGdldFByb3BzKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHsgYXBpLCBpcmksIG9udG9sb2d5SWQsIGhhc1RpdGxlID0gREVGQVVMVF9IQVNfVElUTEUsIGVudGl0eVR5cGUsIHBhcmFtZXRlciwgc2hvd0JhZGdlcyAsIHVzZUxlZ2FjeSwgb25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlICwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gICAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhOiBlbnRpdHksXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nRW50aXR5LFxuICAgICAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc0VudGl0eSxcbiAgICAgICAgaXNFcnJvcjogaXNFcnJvckVudGl0eSxcbiAgICAgICAgZXJyb3I6IGVycm9yRW50aXR5LFxuICAgIH0gPSB1c2VRdWVyeShcbiAgICAgICAgW1xuICAgICAgICAgICAgXCJlbnRpdHlJbmZvXCIsXG4gICAgICAgICAgICBwcm9wc1xuICAgICAgICBdLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBnZXRMYWJlbFNlY3Rpb24oZW50aXR5OiBFbnRpdHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2VudGl0eS5nZXRMYWJlbCgpICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+TGFiZWw6PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge2VudGl0eS5nZXRMYWJlbCgpfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjxFdWlTcGFjZXIvPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN5bm9ueW1zU2VjdGlvbihlbnRpdHk6IEVudGl0eSkgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7ZW50aXR5LmdldFN5bm9ueW1zKCkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPlN5bm9ueW1zOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnRpdHkuZ2V0U3lub255bXMoKS5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e2VudGl0eS5nZXRTeW5vbnltcygpLm1hcCgoc3lub255bSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9IGlkPXtzeW5vbnltLnZhbHVlfT57Z2V0UmVpZmllZEpTWChlbnRpdHksIHN5bm9ueW0sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57Z2V0UmVpZmllZEpTWChlbnRpdHksIGVudGl0eS5nZXRTeW5vbnltcygpWzBdLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SGFzS2V5U2VjdGlvbih0ZXJtOiBDbGFzcykgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCBrZXlzID0gdGVybS5nZXRIYXNLZXkoKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2tleXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkhhcyBLZXk6PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge2tleXMubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntrZXlzLm1hcCgoa2V5cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRDbGFzc0V4cHJlc3Npb25KU1godGVybSwgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLCBrZXlzLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHRlcm0sIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSwga2V5c1swXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN1YnNldHNTZWN0aW9uKHRlcm06IENsYXNzKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHsgdGVybS5nZXRTdWJzZXRzKCkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkluIFN1YnNldHM6PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Rlcm0uZ2V0U3Vic2V0cygpLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57dGVybS5nZXRTdWJzZXRzKCkubWFwKChzdWJzZXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17c3Vic2V0ICsgcmFuZG9tU3RyaW5nKCl9PntnZXRFbnRpdHlMaW5rSlNYKHRlcm0sIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSwgc3Vic2V0LCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57Z2V0RW50aXR5TGlua0pTWCh0ZXJtLCB0ZXJtLmdldExpbmtlZEVudGl0aWVzKCksIHRlcm0uZ2V0U3Vic2V0cygpWzBdLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UHJvcGVydHlDaGFyYWN0ZXJpc3RpY3NTZWN0aW9uKHByb3BlcnR5OiBQcm9wZXJ0eSkgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjaGFyYWN0ZXJpc3RpY3MgPSBwcm9wZXJ0eS5nZXRSZGZUeXBlcygpLm1hcCh0eXBlID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoe1xuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNGdW5jdGlvbmFsUHJvcGVydHknOiAnRnVuY3Rpb25hbCcsXG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI0ludmVyc2VGdW5jdGlvbmFsUHJvcGVydHknOiAnSW52ZXJzZSBGdW5jdGlvbmFsJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjVHJhbnNpdGl2ZVByb3BlcnR5JzogJ1RyYW5zaXRpdmUnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNTeW1tZXRyaWNQcm9wZXJ0eSc6ICdTeW1tZXRyaWMnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNBc3ltbWV0cmljUHJvcGVydHknOiAnQXN5bW1ldHJpYycsXG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1JlZmxleGl2ZVByb3BlcnR5JzogJ1JlZmxleGl2ZScsXG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI0lycmVmbGV4aXZlUHJvcGVydHknOiAnSXJyZWZsZXhpdmUnLFxuICAgICAgICAgICAgfSlbdHlwZV07XG4gICAgICAgIH0pLmZpbHRlcigodHlwZSkgPT4gISF0eXBlKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7Y2hhcmFjdGVyaXN0aWNzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5DaGFyYWN0ZXJpc3RpY3M6PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoYXJhY3RlcmlzdGljcy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e2NoYXJhY3RlcmlzdGljcy5tYXAoKGNoYXJhY3RlcmlzdGljKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2NoYXJhY3RlcmlzdGljfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2NoYXJhY3RlcmlzdGljc1swXX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RG9tYWluU2VjdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZG9tYWlucyA9IHByb3BlcnR5LmdldERvbWFpbigpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7ZG9tYWlucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+RG9tYWluOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtkb21haW5zLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57ZG9tYWlucy5tYXAoKGRvbWFpbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBkb21haW5zLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBkb21haW5zWzBdLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UmFuZ2VTZWN0aW9uKHByb3BlcnR5OiBQcm9wZXJ0eSkgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCByYW5nZXMgPSBwcm9wZXJ0eS5nZXRSYW5nZSgpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7cmFuZ2VzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+UmFuZ2U6PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Jhbmdlcy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e3Jhbmdlcy5tYXAoKHJhbmdlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRDbGFzc0V4cHJlc3Npb25KU1gocHJvcGVydHksIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksIHJhbmdlcywgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgcmFuZ2VzWzBdLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFByb3BlcnR5QXNzZXJ0aW9uc1NlY3Rpb24oaW5kaXZpZHVhbDogSW5kaXZpZHVhbCkgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eUlyaXMgPSBPYmplY3Qua2V5cyhpbmRpdmlkdWFsLnByb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCBuZWdhdGl2ZVByb3BlcnRpZXMgPSBwcm9wZXJ0eUlyaXMuZmlsdGVyKChrZXkpID0+IGtleS5zdGFydHNXaXRoKFwibmVnYXRpdmVQcm9wZXJ0eUFzc2VydGlvbitcIikpO1xuICAgICAgICBjb25zdCBvYmplY3RQcm9wZXJ0aWVzID0gcHJvcGVydHlJcmlzLmZpbHRlcigoa2V5KSA9PiBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGtleSkgJiYgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLmdldChrZXkpPy50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTEpXG4gICAgICAgIGNvbnN0IGRhdGFQcm9wZXJ0aWVzID0gcHJvcGVydHlJcmlzLmZpbHRlcigoa2V5KSA9PiBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGtleSkgJiYgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLmdldChrZXkpPy50eXBlLmluZGV4T2YoXCJkYXRhUHJvcGVydHlcIikgIT09IC0xKVxuICAgICAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbnM6IFJlYWN0RWxlbWVudFtdID0gW107XG5cbiAgICAgICAgZm9yKGNvbnN0IGlyaSBvZiBvYmplY3RQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBhc0FycmF5KGluZGl2aWR1YWwucHJvcGVydGllc1tpcmldKTtcbiAgICAgICAgICAgIGZvcihjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIGlyaSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7dHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgdi5pbmNsdWRlcyhcImh0dHBcIikgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e2ZvbnRTaXplOiBcIm1lZGl1bVwiLCBjb2xvcjogXCJncmF5XCJ9fT4mIzk2NTY7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCB2LCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFRvb2x0aXAoKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiID8gdiA6IHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHYpICYmIHYudmFsdWUgPyBKU09OLnN0cmluZ2lmeSh2LnZhbHVlKSA6IEpTT04uc3RyaW5naWZ5KHYpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yKGNvbnN0IGlyaSBvZiBkYXRhUHJvcGVydGllcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gYXNBcnJheShpbmRpdmlkdWFsLnByb3BlcnRpZXNbaXJpXSk7XG4gICAgICAgICAgICBmb3IoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBpcmksIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgezw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwifX0+JiM5NjU2Ozwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHYsIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+fVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IoY29uc3Qga2V5IG9mIG5lZ2F0aXZlUHJvcGVydGllcykge1xuICAgICAgICAgICAgY29uc3QgaXJpID0ga2V5LnNsaWNlKFwibmVnYXRpdmVQcm9wZXJ0eUFzc2VydGlvbitcIi5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgbGlua2VkRW50aXR5ID0gaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLmdldChpcmkpO1xuICAgICAgICAgICAgY29uc3QgaGFzRGF0YVByb3BlcnR5ID0gbGlua2VkRW50aXR5Py50eXBlLmluZGV4T2YoXCJkYXRhUHJvcGVydHlcIikgIT09IC0xO1xuICAgICAgICAgICAgY29uc3QgaGFzT2JqZWN0UHJvcGVydHkgPSBsaW5rZWRFbnRpdHk/LnR5cGUuaW5kZXhPZihcIm9iamVjdFByb3BlcnR5XCIpICE9PSAtMTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoaW5kaXZpZHVhbC5wcm9wZXJ0aWVzW2tleV0pO1xuXG4gICAgICAgICAgICBmb3IoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT5ub3Q8L2k+e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIGlyaSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7dHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgdi5pbmNsdWRlcyhcImh0dHBcIikgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Zm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIn19PiYjOTY1Njs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHYsIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNPYmplY3RQcm9wZXJ0eSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRUb29sdGlwKCh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiA/IHYgOiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2KSAmJiB2LnZhbHVlID8gSlNPTi5zdHJpbmdpZnkodi52YWx1ZSkgOiBKU09OLnN0cmluZ2lmeSh2KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0RhdGFQcm9wZXJ0eSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwifX0+JiM5NjU2Ozwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgdiwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7cHJvcGVydHlBc3NlcnRpb25zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5Qcm9wZXJ0eSBhc3NlcnRpb25zOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wZXJ0eUFzc2VydGlvbnMubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntwcm9wZXJ0eUFzc2VydGlvbnMubWFwKChwYSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntwYX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KCl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntwcm9wZXJ0eUFzc2VydGlvbnNbMF19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEFubm90YXRpb25TZWN0aW9uKHRoaW5nOiBUaGluZykgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7dGhpbmcuZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKS5tYXAoKGFubm9LZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5ub3MgPSB0aGluZy5nZXRBbm5vdGF0aW9uQnlJZChhbm5vS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYoYW5ub3MubGVuZ3RoID09IDApIHJldHVybiA8PjwvPjtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfSBrZXk9e2Fubm9LZXl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+e2NhcGl0YWxpemUoZGVVbmRlcnNjb3JlKGRlQ2FtZWxDYXNlKHRoaW5nLmdldEFubm90YXRpb25UaXRsZUJ5SWQoYW5ub0tleSkpKSl9OjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthbm5vcy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e2Fubm9zLm1hcCgoYW5ub3RhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9IGlkPXthbm5vdGF0aW9uLnZhbHVlfT57Z2V0UmVpZmllZEpTWCh0aGluZywgYW5ub3RhdGlvbiwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRSZWlmaWVkSlNYKHRoaW5nLCBhbm5vc1swXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpQ2FyZFxuICAgICAgICAgICAgICAgIHRpdGxlPXtoYXNUaXRsZSA/IChlbnRpdHlUeXBlID8gY2FwaXRhbGl6ZShnZXRFbnRpdHlUeXBlTmFtZShlbnRpdHlUeXBlKSkgOiAoaXNTdWNjZXNzRW50aXR5ICYmIGVudGl0eSkgPyBjYXBpdGFsaXplKGVudGl0eS5nZXRUeXBlKCkpIDogXCJcIikgICsgXCIgSW5mb3JtYXRpb25cIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICA+XG5cbiAgICAgICAgICAgICAgICB7aXNMb2FkaW5nRW50aXR5ICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXsncyd9Lz59XG4gICAgICAgICAgICAgICAge2lzU3VjY2Vzc0VudGl0eSAmJiBlbnRpdHkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0TGFiZWxTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0U3lub255bXNTZWN0aW9uKGVudGl0eSl9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc0NsYXNzKGVudGl0eSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0U3Vic2V0c1NlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEhhc0tleVNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAge2lzUHJvcGVydHkoZW50aXR5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRQcm9wZXJ0eUNoYXJhY3RlcmlzdGljc1NlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldERvbWFpblNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldFJhbmdlU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNJbmRpdmlkdWFsKGVudGl0eSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0SW5kaXZpZHVhbFByb3BlcnR5QXNzZXJ0aW9uc1NlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAge2dldEFubm90YXRpb25TZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2lzRXJyb3JFbnRpdHkgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvckVudGl0eSwgXCJpbmZvcm1hdGlvblwiKX08L0V1aVRleHQ+fVxuICAgICAgICAgICAgPC9FdWlDYXJkPlxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlJbmZvKHByb3BzOiBFbnRpdHlJbmZvV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogYW55LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRFbnRpdGl5SW5mb1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRW50aXRpeUluZm9XaWRnZXQocHJvcHM6IEVudGl0eUluZm9XaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8RW50aXR5SW5mb1dpZGdldFxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGhhc1RpdGxlPXtwcm9wcy5oYXNUaXRsZX1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzPXtwcm9wcy5zaG93QmFkZ2VzfVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e3Byb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgRW50aXR5SW5mb1dpZGdldCwgY3JlYXRlRW50aXR5SW5mbyB9O1xuIiwgImltcG9ydCB7VGhpbmd9IGZyb20gXCIuL2ludGVyZmFjZXNcIjtcbmltcG9ydCBSZWFjdCwge1JlYWN0RWxlbWVudH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUljb25UaXAsIEV1aUljb259IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7YXNBcnJheSwgaW5mZXJUeXBlRnJvbVR5cGVBcnJheSwgcmFuZG9tU3RyaW5nfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBMaW5rZWRFbnRpdGllcyBmcm9tIFwiLi9MaW5rZWRFbnRpdGllc1wiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiO1xuaW1wb3J0IFwiLi4vc3R5bGUvc2VtbG9va3Atc3R5bGVzLmNzc1wiO1xuaW1wb3J0IHtPbk5hdmlnYXRlc30gZnJvbSBcIi4uL2FwcC90eXBlc1wiO1xuXG5jb25zdCBERUZBVUxUX1NIT1dfQkFER0VTID0gdHJ1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRvb2x0aXAodGV4dDogc3RyaW5nKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aUljb25UaXAgdHlwZT17XCJpSW5DaXJjbGVcIn0gY29sb3I9e1wic3ViZHVlZFwifSBjb250ZW50PXt0ZXh0fS8+XG4gICAgKTtcbn1cblxuLyoqXG4gKiBPTkxZIFVTQUJMRSBXSVRIIFYyLUFQSSBFTlRJVElFU1xuICpcbiAqIFJldHVybnMgUmVpZmllZCBheGlvbXMgYXMgSlNYIGVsZW1lbnQgKHNpbWlsYXIgdG8gTWV0YWRhdGFUb29sdGlwIGNvbXBvbmVudCBpbiBvbHM0IHByb2plY3QpXG4gKiBAcGFyYW0gcGFyZW50RW50aXR5IHRoZSBzdXJyb3VuZGluZyBlbnRpdHkgb2YgdGhlIGF4aW9tcyBhcnJheSAoZm9yIGV2ZW50dWFsIGxhYmVsIGZldGNoaW5nKVxuICogQHBhcmFtIGF4aW9tc0RpY3QgdGhlIGVudGl0aWVzIGF4aW9tcyBpbiB0aGUgZm9ybWF0IHJldHVybmVkIGJ5IFJlaWZpZWQ6OmdldE1ldGFkYXRhKClcbiAqIEByZXR1cm5zIFJlYWN0RWxlbWVudCB0aGUgYXhpb21zIGluIEpTWCBmb3JtYXQgdG8gZGlzcGxheVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXhpb21zSW5mb3JtYXRpb25KU1gocGFyZW50RW50aXR5OiBUaGluZywgYXhpb21zRGljdDogYW55IHwgbnVsbCkgOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IGF4aW9tc1RleHQgPSBPYmplY3Qua2V5cyhheGlvbXNEaWN0KVxuICAgICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gcGFyZW50RW50aXR5LmdldExpbmtlZEVudGl0aWVzKCkuZ2V0TGFiZWxGb3JJcmkoa2V5KSB8fCBrZXk7XG4gICAgICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBcIipcIiArIGF4aW9tc0RpY3Rba2V5XSArIFwiIChcIiArIGxhYmVsICsgXCIpXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSByZXR1cm4gXCJcIjtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIilcblxuICAgIHJldHVybiBnZXRUb29sdGlwKGF4aW9tc1RleHQpO1xufVxuXG4vKipcbiAqIE9OTFkgVVNBQkxFIFdJVEggVjItQVBJIEVOVElUSUVTXG4gKlxuICogUmV0dXJucyBhIGxhYmVsZWQgZW50aXR5IGxpbmsgYXMgSlNYIGVsZW1lbnRcbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHkgdGhlIGVudGl0eSBvYmplY3QgaW4gd2hpY2ggdGhlIGxpbmtlZCBlbnRpdHkgZXhpc3RzXG4gKiBAcGFyYW0gbGlua2VkRW50aXRpZXMgdGhlIGxpbmtlZEVudGl0aWVzIG9iamVjdCAoZXhpc3RzIGFzIHBhcmFtIGJlY2F1c2UgaXQgaXMgbmVjZXNzYXJ5IHRoYXQgdGhlIGVudGl0eSBoYXMgYSBsaW5rZWRFbnRpdGllcyBibG9jayBpbiBwcm9wZXJ0aWVzKVxuICogQHBhcmFtIGlyaSAgIHRoZSBlbnRpdGllcycgaXJpXG4gKiBAcGFyYW0gc2hvd0JhZGdlcyAgICBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMgZnVuY3Rpb25zIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBjbGlja2FibGUgaXRlbXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIGVudGl0aWVzIG5hbWVcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gb250b2xvZ3kgYmFkZ2VcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGEgZGlzYW1iaWd1YXRpb24gYmFkZ2VcbiAqIEByZXR1cm5zIFJlYWN0RWxlbWVudCB0aGUgZW50aXR5IGxpbmsgSlNYXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRpdHlMaW5rSlNYKHBhcmVudEVudGl0eTogVGhpbmcsIGxpbmtlZEVudGl0aWVzOiBMaW5rZWRFbnRpdGllcywgaXJpOiBzdHJpbmcsIHNob3dCYWRnZXMgOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUywgLypUT0RPOiBjaGFuZ2UgdG8gdXNpbmcgKGVudGl0eSA6IEVudGl0eURhdGEpIGxhdGVyKi8gb25OYXZpZ2F0ZXM6IE9uTmF2aWdhdGVzKTogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCBsYWJlbCA9IGxpbmtlZEVudGl0aWVzLmdldExhYmVsRm9ySXJpKGlyaSkgfHwgaXJpLnNwbGl0KFwiL1wiKS5wb3AoKSB8fCBpcmk7XG4gICAgY29uc3QgbGlua2VkRW50aXR5ID0gbGlua2VkRW50aXRpZXMuZ2V0KGlyaSk7XG4gICAgY29uc3QgbG9jYWxPbnRvbG9neSA9IHBhcmVudEVudGl0eS5nZXRPbnRvbG9neUlkKCk7XG5cbiAgICAvLyByZWZlcmVuY2UgdG8gc2VsZjoganVzdCBkaXNwbGF5IGxhYmVsIGJlY2F1c2Ugd2UgYXJlIGFscmVhZHkgb24gdGhhdCBwYWdlXG4gICAgaWYgKHBhcmVudEVudGl0eS5nZXRUeXBlKCkgIT09IFwib250b2xvZ3lcIiAmJiBpcmkgPT09IHBhcmVudEVudGl0eT8uZ2V0SXJpKCkpIHtcbiAgICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cImhpZ2hsaWdodFwiPntwYXJlbnRFbnRpdHkuZ2V0TGFiZWwoKX08L3NwYW4+XG4gICAgfVxuXG4gICAgaWYgKCFsaW5rZWRFbnRpdHkpIHtcbiAgICAgICAgaWYoaXJpLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gPGEgY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgaHJlZj17aXJpfT57bGFiZWx9PC9hPjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNvIGZhciBvbmx5IGtub3duIG9jY3VycmVuY2Ugb2YgdGhpcyBicmFuY2ggaXMgZm9yIG93bCNUaGluZ1xuICAgICAgICAgICAgcmV0dXJuIDxzcGFuPntsYWJlbH08L3NwYW4+O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3RoZXJEZWZpbmVkQnkgPSBsaW5rZWRFbnRpdHlbXCJkZWZpbmVkQnlcIl0gPyBsaW5rZWRFbnRpdHlbXCJkZWZpbmVkQnlcIl0uZmlsdGVyKChlbGVtOiBhbnkpID0+IHtyZXR1cm4gZWxlbSAhPT0gbG9jYWxPbnRvbG9neX0pIDogW107XG4gICAgY29uc3QgbGlua2VkRW50aXR5VHlwZSA9IGxpbmtlZEVudGl0eVtcInR5cGVcIl0gPyBpbmZlclR5cGVGcm9tVHlwZUFycmF5KGxpbmtlZEVudGl0eVtcInR5cGVcIl0pIDogcGFyZW50RW50aXR5LmdldFR5cGUoKTtcblxuICAgIC8vIHNlZSBodHRwczovL2dpdGxhYi56Ym1lZC5kZS9rbS9zZW1sb29rcC9vbHM0Ly0vYmxvYi9kZXYvZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvRW50aXR5TGluay50c3ggZm9yIG9yaWdpbmFsIHJlZmVyZW5jZVxuICAgIGlmKG90aGVyRGVmaW5lZEJ5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBpZihsaW5rZWRFbnRpdHlbXCJoYXNMb2NhbERlZmluaXRpb25cIl0pIHtcbiAgICAgICAgICAgIC8vIHNob3cgPGxhYmVsPiA8b250b2xvZ3lJZD4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybSBpbiB0aGlzIG9udG9sb2d5IGFuZCA8b250b2xvZ3lJZD4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhlIGRlZmluaW5nIG9udG9sb2d5XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KGxvY2FsT250b2xvZ3ksIGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT57bGFiZWx9PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIiBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5KG90aGVyRGVmaW5lZEJ5WzBdLCBsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+ezxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+e290aGVyRGVmaW5lZEJ5WzBdLnRvVXBwZXJDYXNlKCl9PC9zcGFuPn08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNob3cgPGxhYmVsPiA8b250b2xvZ3lJZD4gbGlua2luZyB0byB0aGUgdGVybSBpbiB0aGUgZGVmaW5pbmcgb250b2xvZ3lcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkob3RoZXJEZWZpbmVkQnlbMF0sIGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT57bGFiZWx9PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIiBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5KG90aGVyRGVmaW5lZEJ5WzBdLCBsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+ezxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+e290aGVyRGVmaW5lZEJ5WzBdLnRvVXBwZXJDYXNlKCl9PC9zcGFuPn08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmKG90aGVyRGVmaW5lZEJ5Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYobGlua2VkRW50aXR5W1wiaGFzTG9jYWxEZWZpbml0aW9uXCJdKSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD4gPG9udG9sb2d5SWQxPiA8b250b2xvZ3lJZDI+IC4uLiA8b250b2xvZ3lJZE4+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhpcyBvbnRvbG9neSBhbmQgPG9udG9sb2d5SWRJPiBsaW5rcyB0byB0aGUgdGVybSBpbiB0aGF0IGRlZmluaW5nIG9udG9sb2d5XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KGxvY2FsT250b2xvZ3ksIGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT57bGFiZWx9PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3RoZXJEZWZpbmVkQnkubWFwKChlbGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwibm8tZGVjb3JhdGlvblwiIGtleT17cmFuZG9tU3RyaW5nKCl9IG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3koZWxlbSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19Pns8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPntlbGVtLnRvVXBwZXJDYXNlKCl9PC9zcGFuPn08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD48SUNPTj4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybXMnIGlyaSBhbmQgPElDT04+IGxpbmtzIHRvIGRpc2FtYmlndWF0aW9uIHBhZ2VcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgaHJlZj17aXJpfT57bGFiZWx9PC9hPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJuby1kZWNvcmF0aW9uXCIga2V5PXtyYW5kb21TdHJpbmcoKX0gb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlKGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlJY29uIHR5cGU9e1wic2VhcmNoXCJ9IHNpemU9e1wic1wifS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvdGhlckRlZmluZWRCeS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcIm9udG9sb2dpZXNcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmKGxpbmtlZEVudGl0eVtcImhhc0xvY2FsRGVmaW5pdGlvblwiXSkge1xuICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhpcyBvbnRvbG9neVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eShsb2NhbE9udG9sb2d5LCBsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+e2xhYmVsfTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYocGFyc2VJbnQobGlua2VkRW50aXR5W1wibnVtQXBwZWFyc0luXCJdKSA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBzaG93IDxsYWJlbD48SUNPTj4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybXMnIGlyaSBhbmQgPElDT04+IGxpbmtzIHRvIGRpc2FtYmlndWF0aW9uIHBhZ2VcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgaHJlZj17aXJpfT57bGFiZWx9PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIiBrZXk9e3JhbmRvbVN0cmluZygpfSBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlKSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUobGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlJY29uIHR5cGU9e1wic2VhcmNoXCJ9IHNpemU9e1wic1wifS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGlua2VkRW50aXR5W1wibnVtQXBwZWFyc0luXCJdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnNlSW50KGxpbmtlZEVudGl0eVtcIm51bUFwcGVhcnNJblwiXSkgPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwib250b2xvZ2llc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwib250b2xvZ3lcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc2hvdyByYXcgaXJpXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e2xpbmtlZEVudGl0eVtcInVybFwiXSB8fCBpcml9PntsYWJlbH08L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBPTkxZIFVTQUJMRSBXSVRIIFYyLUFQSSBFTlRJVElFU1xuICpcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyBvbmUgZWxlbWVudCBvZiBhIHNlY3Rpb25zJyBsaXN0LCBwb3NzaWJseSBpbiBhIHJlY3Vyc2l2ZSBmYXNoaW9uIGJ5IHBhcnNpbmcgdGhlIHJlc3BvbnNlIG9iamVjdCBhdCB0aGUgY3VycmVudFJlc3BvbnNlUGF0aCB0byBzaG93IE1hbmNoZXN0ZXIgc3ludGF4LlxuICogQHBhcmFtIHBhcmVudEVudGl0eSB0aGUgZW50aXR5IG9iamVjdCBwb3NzZXNzaW5nIHRoZSB3aG9sZSByZXNwb25zZSBvYmplY3RcbiAqIEBwYXJhbSBsaW5rZWRFbnRpdGllcyB0aGUgbGlua2VkRW50aXRpZXMgb2JqZWN0IChleGlzdHMgYXMgcGFyYW0gYmVjYXVzZSBpdCBpcyBuZWNlc3NhcnkgdGhhdCB0aGUgZW50aXR5IGhhcyBhIGxpbmtlZEVudGl0aWVzIGJsb2NrIGluIHByb3BlcnRpZXMpXG4gKiBAcGFyYW0gY3VycmVudFJlc3BvbnNlUGF0aCB0aGUgY3VycmVudCBzdWItb2JqZWN0IG9mIHRoZSBwYXJlbnRFbnRpdGllcyByZXNwb25zZSBvYmplY3QgcGFyc2VkIGFzIGNsYXNzIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBzaG93QmFkZ2VzIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIGlmIGJhZGdlcyBzaG91bGQgYmUgc2hvd25cbiAqIEBwYXJhbSBvbk5hdmlnYXRlcyBmdW5jdGlvbnMgZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIGNsaWNrYWJsZSBpdGVtc1xuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gZW50aXRpZXMgbmFtZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBvbnRvbG9neSBiYWRnZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYSBkaXNhbWJpZ3VhdGlvbiBiYWRnZVxuICogQHJldHVybnMgUmVhY3RFbGVtZW50IHRoZSBjbGFzcyBleHByZXNzaW9uIEpTWFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eTogVGhpbmcsIGxpbmtlZEVudGl0aWVzOiBMaW5rZWRFbnRpdGllcywgY3VycmVudFJlc3BvbnNlUGF0aDogYW55LCBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUywgLypUT0RPOiBjaGFuZ2UgdG8gdXNpbmcgKGVudGl0eSA6IEVudGl0eURhdGEpIGxhdGVyKi8gb25OYXZpZ2F0ZXM6IE9uTmF2aWdhdGVzKTogUmVhY3RFbGVtZW50IHtcbiAgICBsZXQgcmVzdWx0ID0gPD48Lz47XG5cbiAgICAvLyBtZXJnZSBsaW5rZWRFbnRpdGllcyBvZiBjdXJyZW50UmVzcG9uc2VQYXRoIGlmIGN1cnJlbnRSZXNwb25zZVBhdGgubGlua2VkRW50aXRpZXMgaXMgbm90IHVuZGVmaW5lZFxuICAgIGxpbmtlZEVudGl0aWVzID0gbGlua2VkRW50aXRpZXMubWVyZ2VXaXRoKGN1cnJlbnRSZXNwb25zZVBhdGgubGlua2VkRW50aXRpZXMpO1xuXG4gICAgaWYgKHR5cGVvZiBjdXJyZW50UmVzcG9uc2VQYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJlc3VsdCA9IGdldEVudGl0eUxpbmtKU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgY3VycmVudFJlc3BvbnNlUGF0aCwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY3VycmVudFJlc3BvbnNlUGF0aCA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoKSAmJiBBcnJheS5pc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJ0eXBlXCJdKSAmJiBjdXJyZW50UmVzcG9uc2VQYXRoW1widHlwZVwiXS5pbmRleE9mKFwicmVpZmljYXRpb25cIikgIT09IC0xKSB7IC8vIFRPRE86IENvbmNhdCB3aXRoIGVsc2UgcGFydD8gU2VlIHJlbGF0ZWRGcm9tIChNYW5jaGVzdGVyIHN5bnRheCBkb2VzIG5vdCBnZXQgZGlzcGxheWVkLCBidXQgbmVpdGhlciBpbiBvbHM0KVxuICAgICAgICAvLyBjdXJyZW50IHJlc3BvbnNlIHBhdGggaXMgcmVpZmljYXRpb25cbiAgICAgICAgcmVzdWx0ID0gZ2V0UmVpZmllZEpTWChwYXJlbnRFbnRpdHksIFJlaWZpZWQuZnJvbUpzb248YW55PihjdXJyZW50UmVzcG9uc2VQYXRoKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpO1xuICAgIH1cbiAgICBlbHNlIHsgLy8gdHlwZSA9PT0gXCJvYmplY3RcIlxuICAgICAgICBjb25zdCBzb21lVmFsdWVzRnJvbSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNzb21lVmFsdWVzRnJvbVwiXTtcbiAgICAgICAgY29uc3QgYWxsVmFsdWVzRnJvbSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNhbGxWYWx1ZXNGcm9tXCJdO1xuICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25PZiA9IGFzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludGVyc2VjdGlvbk9mXCJdKTtcbiAgICAgICAgY29uc3QgdW5pb25PZiA9IGFzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3VuaW9uT2ZcIl0pO1xuICAgICAgICBjb25zdCBoYXNWYWx1ZSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNWYWx1ZVwiXTtcbiAgICAgICAgY29uc3QgbWluQ2FyZGluYWxpdHkgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjbWluQ2FyZGluYWxpdHlcIl0gfHwgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21pblF1YWxpZmllZENhcmRpbmFsaXR5XCJdO1xuICAgICAgICBjb25zdCBtYXhDYXJkaW5hbGl0eSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNtYXhDYXJkaW5hbGl0eVwiXSB8fCBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjbWF4UXVhbGlmaWVkQ2FyZGluYWxpdHlcIl07XG4gICAgICAgIGNvbnN0IGNhcmRpbmFsaXR5ID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2NhcmRpbmFsaXR5XCJdIHx8IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNxdWFsaWZpZWRDYXJkaW5hbGl0eVwiXTtcbiAgICAgICAgY29uc3QgaGFzU2VsZiA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNTZWxmXCJdO1xuICAgICAgICBjb25zdCBjb21wbGVtZW50T2YgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjY29tcGxlbWVudE9mXCJdO1xuICAgICAgICBjb25zdCBvbmVPZiA9IGFzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI29uZU9mXCJdKTtcbiAgICAgICAgY29uc3QgaW52ZXJzZU9mID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludmVyc2VPZlwiXTtcbiAgICAgICAgY29uc3Qgb25Qcm9wZXJ0eSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNvblByb3BlcnR5XCJdO1xuICAgICAgICBjb25zdCBvbkRhdGFUeXBlID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI29uRGF0YXR5cGVcIl07XG5cbiAgICAgICAgaWYob25EYXRhVHlwZSkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHM6IFJlYWN0RWxlbWVudFtdID0gW1xuICAgICAgICAgICAgICAgIGdldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvbkRhdGFUeXBlLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcylcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGNvbnN0IHdpdGhSZXN0cmljdGlvbnMgPSBhc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN3aXRoUmVzdHJpY3Rpb25zXCJdKTtcbiAgICAgICAgICAgIGlmKHdpdGhSZXN0cmljdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goPD5bPC8+KTtcblxuICAgICAgICAgICAgICAgIGxldCBpc0ZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgcmVzdHJpY3Rpb24gb2Ygd2l0aFJlc3RyaWN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZihpc0ZpcnN0KSBpc0ZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgZWxlbWVudHMucHVzaCg8PiwmbmJzcDs8Lz4pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pbkV4Y2x1c2l2ZSA9IHJlc3RyaWN0aW9uW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjbWluRXhjbHVzaXZlXCJdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5JbmNsdXNpdmUgPSByZXN0cmljdGlvbltcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI21pbkluY2x1c2l2ZVwiXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4RXhjbHVzaXZlID0gcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtYXhFeGNsdXNpdmVcIl07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heEluY2x1c2l2ZSA9IHJlc3RyaWN0aW9uW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjbWF4SW5jbHVzaXZlXCJdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmKG1pbkV4Y2x1c2l2ZSkgZWxlbWVudHMucHVzaCg8PiZndDsge21pbkV4Y2x1c2l2ZX08Lz4pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKG1pbkluY2x1c2l2ZSkgZWxlbWVudHMucHVzaCg8PiZnZTsge21pbkluY2x1c2l2ZX08Lz4pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKG1heEV4Y2x1c2l2ZSkgZWxlbWVudHMucHVzaCg8PiZsdDsge21heEV4Y2x1c2l2ZX08Lz4pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKG1heEluY2x1c2l2ZSkgZWxlbWVudHMucHVzaCg8PiZsZTsge21heEluY2x1c2l2ZX08Lz4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goPD5dPC8+KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0ID0gPD57ZWxlbWVudHMubWFwKChlbGVtKSA9PiA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+KX08Lz5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzb21lVmFsdWVzRnJvbSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25Qcm9wZXJ0eSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IHNvbWUgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoc29tZVZhbHVlc0Zyb20pWzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFsbFZhbHVlc0Zyb20pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19PiBvbmx5IDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KGFsbFZhbHVlc0Zyb20pWzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGludGVyc2VjdGlvbk9mLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBSZWFjdEVsZW1lbnRbXSA9IFtcbiAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAmIzQwO1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW0gb2YgaW50ZXJzZWN0aW9uT2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGk+IGFuZCA8L2k+XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGdldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBlbGVtLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAmIzQxO1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPHNwYW4+e2VsZW1lbnRzLm1hcCgoZWxlbSkgPT4gPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e2VsZW19PC9zcGFuPil9PC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bmlvbk9mLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBSZWFjdEVsZW1lbnRbXSA9IFtcbiAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAmIzQwO1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW0gb2YgdW5pb25PZikge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICA8aT4gb3IgPC9pPlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgZWxlbSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiM0MTtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDxzcGFuPntlbGVtZW50cy5tYXAoKGVsZW0pID0+IDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PntlbGVtfTwvc3Bhbj4pfTwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19PiB2YWx1ZSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShoYXNWYWx1ZSlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWluQ2FyZGluYWxpdHkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19PiBtaW4gPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkobWluQ2FyZGluYWxpdHkpWzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1heENhcmRpbmFsaXR5KSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gbWF4IDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KG1heENhcmRpbmFsaXR5KVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYXJkaW5hbGl0eSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25Qcm9wZXJ0eSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IGV4YWN0bHkgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoY2FyZGluYWxpdHkpWzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc1NlbGYpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19PiBTZWxmIDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KGhhc1NlbGYpWzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbXBsZW1lbnRPZikge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxpPm5vdCA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShjb21wbGVtZW50T2YpWzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9uZU9mLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBSZWFjdEVsZW1lbnRbXSA9IFtcbiAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAmIzEyMztcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtIG9mIG9uZU9mKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICYjNDQ7Jm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGdldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBlbGVtLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAmIzEyNTtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDxzcGFuPntlbGVtZW50cy5tYXAoKGVsZW0pID0+IDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PntlbGVtfTwvc3Bhbj4pfTwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW52ZXJzZU9mKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19PmludmVyc2UgPC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICYjNDA7XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBpbnZlcnNlT2YsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAmIzQxO1xuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgYW4gYXJyYXkgb2Ygc2VjdGlvbiBsaXN0IGVsZW1lbnRzIHNwZWNpZmllZCBhdCBgY3VycmVudFJlc3BvbnNlUGF0aGBcbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHlcbiAqIEBwYXJhbSBsaW5rZWRFbnRpdGllc1xuICogQHBhcmFtIGFycmF5XG4gKiBAcGFyYW0gc2hvd0JhZGdlc1xuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWN0aW9uTGlzdEpTWChwYXJlbnRFbnRpdHk6IFRoaW5nLCBsaW5rZWRFbnRpdGllczogTGlua2VkRW50aXRpZXMsIGFycmF5OiBhbnlbXSwgc2hvd0JhZGdlczogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMsIC8qVE9ETzogY2hhbmdlIHRvIHVzaW5nIChlbnRpdHkgOiBFbnRpdHlEYXRhKSBsYXRlciovIG9uTmF2aWdhdGVzOiBPbk5hdmlnYXRlcyk6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHthcnJheS5sZW5ndGggPT09IDEgPyAoXG4gICAgICAgICAgICAgICAgPHA+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIHBhcmVudEVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBhcnJheVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfTwvcD5cbiAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9ID57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgcGFyZW50RW50aXR5LmdldExpbmtlZEVudGl0aWVzKCksIGl0ZW0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX08L2xpPik7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC91bD59XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cbi8qKlxuICogSW5zZXJ0cyBsaW5rcyBpbnRvIHRleHQgKHBvdGVudGlhbGx5IHdpdGggbGFiZWwgaW5zdGVhZCBvZiBsaW5rIGRpc3BsYXllZCBpZiBsaW5rIGV4aXN0cyBhcyBrZXkgaW5zaWRlIGxpbmtlZEVudGl0aWVzKSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIEpTWCBlbGVtZW50XG4gKiBAcGFyYW0gcGFyZW50RW50aXR5IHRoZSBlbnRpdHkgb2JqZWN0IHBvc3Nlc3NpbmcgdGhlIHdob2xlIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHRleHQgdGhlIHRleHQgdG8gaW5zZXJ0IGxpbmtzIGludG9cbiAqIEBwYXJhbSBsaW5rZWRFbnRpdGllcyB0aGUgbGlua2VkRW50aXRpZXMgb2JqZWN0IChpZiB1bmRlZmluZWQsIG5vIGxhYmVscyBhcmUgaW5mZXJyZWQpXG4gKiBAcGFyYW0gc2hvd0JhZGdlcyBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMgZnVuY3Rpb25zIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBjbGlja2FibGUgaXRlbXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIGVudGl0aWVzIG5hbWVcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gb250b2xvZ3kgYmFkZ2VcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGEgZGlzYW1iaWd1YXRpb24gYmFkZ2VcbiAqL1xuZnVuY3Rpb24gYWRkTGlua3NUb1RleHQocGFyZW50RW50aXR5OiBUaGluZywgdGV4dDogc3RyaW5nLCBsaW5rZWRFbnRpdGllczogTGlua2VkRW50aXRpZXMgfCB1bmRlZmluZWQsIHNob3dCYWRnZXM6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTLCAvKlRPRE86IGNoYW5nZSB0byB1c2luZyAoZW50aXR5IDogRW50aXR5RGF0YSkgbGF0ZXIqLyBvbk5hdmlnYXRlczogT25OYXZpZ2F0ZXMpIHtcbiAgICBjb25zdCBsaW5rc1RvU3BsaWNlOiBBcnJheTx7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyOyBsaW5rOiBSZWFjdEVsZW1lbnQgfT4gPVxuICAgICAgICBbXTtcblxuICAgIGlmKGxpbmtlZEVudGl0aWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZW50aXR5SWQgb2YgT2JqZWN0LmtleXMobGlua2VkRW50aXRpZXMubGlua2VkRW50aXRpZXMpKSB7XG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIGxldCBuID0gdGV4dC5pbmRleE9mKGVudGl0eUlkLCAwKTtcbiAgICAgICAgICAgICAgICBuICE9PSAtMTtcbiAgICAgICAgICAgICAgICBuID0gdGV4dC5pbmRleE9mKGVudGl0eUlkLCBuKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbGlua3NUb1NwbGljZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG4sXG4gICAgICAgICAgICAgICAgICAgIGVuZDogbiArIGVudGl0eUlkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgbGluazogZ2V0RW50aXR5TGlua0pTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBlbnRpdHlJZCwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbiArPSBlbnRpdHlJZC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1cmxSZSA9IC9bQS16XSs6XFwvXFwvW15cXHNdKy9nO1xuICAgIGZvciAobGV0IG1hdGNoID0gdXJsUmUuZXhlYyh0ZXh0KTsgbWF0Y2g7IG1hdGNoID0gdXJsUmUuZXhlYyh0ZXh0KSkge1xuICAgICAgICBjb25zdCB1cmwgPSBtYXRjaFswXTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJmb3VuZCBtYXRjaCBcIiArIHVybCk7XG5cbiAgICAgICAgbGlua3NUb1NwbGljZS5wdXNoKHtcbiAgICAgICAgICAgIHN0YXJ0OiBtYXRjaC5pbmRleCxcbiAgICAgICAgICAgIGVuZDogbWF0Y2guaW5kZXggKyB1cmwubGVuZ3RoLFxuICAgICAgICAgICAgbGluazogKFxuICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBocmVmPXt1cmx9Pnt1cmx9PC9hPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxpbmtzVG9TcGxpY2Uuc29ydCgoYSxiKSA9PiBhLnN0YXJ0IC0gYi5zdGFydCk7XG5cbiAgICByZW1vdmVPdmVybGFwcGluZzogZm9yIChsZXQgbiA9IDA7IG4gPCBsaW5rc1RvU3BsaWNlLmxlbmd0aDsgKSB7XG4gICAgICAgIGZvciAobGV0IG4yID0gbiArIDE7IG4yIDwgbGlua3NUb1NwbGljZS5sZW5ndGg7ICsrbjIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGljZUEgPSBsaW5rc1RvU3BsaWNlW25dO1xuICAgICAgICAgICAgY29uc3Qgc3BsaWNlQiA9IGxpbmtzVG9TcGxpY2VbbjJdO1xuXG4gICAgICAgICAgICBpZiAoc3BsaWNlQSA9PT0gc3BsaWNlQikgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIFRoZSBzcGxpY2VzIG92ZXJsYXAgaWYgbmVpdGhlciBlbmRzIGJlZm9yZSB0aGUgb3RoZXIgc3RhcnRzXG4gICAgICAgICAgICBpZiAoc3BsaWNlQS5lbmQgPj0gc3BsaWNlQi5zdGFydCAmJiBzcGxpY2VCLmVuZCA+PSBzcGxpY2VBLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJSZW1vdmluZyBvdmVybGFwcGluZ1wiKTtcblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgc2hvcnRlciBsaW5rIG9mIGJvdGhcbiAgICAgICAgICAgICAgICBpZihzcGxpY2VBLmVuZCAtIHNwbGljZUEuc3RhcnQgPCBzcGxpY2VCLmVuZCAtIHNwbGljZUIuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlua3NUb1NwbGljZS5zcGxpY2UobiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsaW5rc1RvU3BsaWNlLnNwbGljZShuMiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlIHJlbW92ZU92ZXJsYXBwaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICsrbjtcbiAgICB9XG5cbiAgICBpZiAobGlua3NUb1NwbGljZS5sZW5ndGggPT09IDApIHJldHVybiA8Pnt0ZXh0fTwvPjtcblxuICAgIGNvbnN0IHJlczogUmVhY3RFbGVtZW50W10gPSBbXTtcbiAgICBsZXQgbiA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3NUb1NwbGljZSkge1xuICAgICAgICByZXMucHVzaChcbiAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgIHt0ZXh0LnN1YnN0cmluZyhuLCBsaW5rLnN0YXJ0KX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKTtcbiAgICAgICAgcmVzLnB1c2gobGluay5saW5rKTtcbiAgICAgICAgbiA9IGxpbmsuZW5kO1xuICAgIH1cbiAgICByZXMucHVzaChcbiAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e3RleHQuc2xpY2Uobil9PC9zcGFuPlxuICAgICk7XG5cbiAgICByZXR1cm4gPD57cmVzfTwvPjtcbn1cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBnaXZlbiBSZWlmaWVkXG4gKiBAcGFyYW0gZW50aXR5IHRoZSBlbnRpdHkgdGhlIFJlaWZpZWQgZXhpc3RzIGluXG4gKiBAcGFyYW0gcmVpZmllZCB0aGUgUmVpZmllZFxuICogQHBhcmFtIHNob3dCYWRnZXMgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWlmaWVkSlNYKGVudGl0eTogVGhpbmcsIHJlaWZpZWQ6IFJlaWZpZWQ8YW55Piwgc2hvd0JhZGdlczogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMsIC8qVE9ETzogY2hhbmdlIHRvIHVzaW5nIChlbnRpdHkgOiBFbnRpdHlEYXRhKSBsYXRlciovIG9uTmF2aWdhdGVzOiBPbk5hdmlnYXRlcyk6IFJlYWN0RWxlbWVudCB7XG4gICAgZnVuY3Rpb24gZ2V0VmFsdWVKU1godmFsdWU6IFJlaWZpZWQ8YW55Pik6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGxpbmtlZEVudGl0aWVzID0gZW50aXR5LmdldExpbmtlZEVudGl0aWVzKCk7XG5cbiAgICAgICAgLy8gbGlua2VkRW50aXRpZXMgbm90IGV4aXN0ZW50IG9uIGVudGl0eSAoLT4gcHJvYmFibHkgbGVnYWN5IGFwaSB2ZXJzaW9uKVxuICAgICAgICBpZihPYmplY3Qua2V5cyhsaW5rZWRFbnRpdGllcy5saW5rZWRFbnRpdGllcykubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZS52YWx1ZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZExpbmtzVG9UZXh0KGVudGl0eSwgdmFsdWUudmFsdWUudG9TdHJpbmcoKSwgdW5kZWZpbmVkLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgbm90IGhhcHBlbiwgcHJvdmUgdGhhdCB0aGlzIGlzIG5ldmVyIHRoZSBjYXNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIDw+e0pTT04uc3RyaW5naWZ5KHZhbHVlLnZhbHVlKX08Lz47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSBsaW5rZWRFbnRpdGllcy5nZXQodmFsdWUudmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAobGlua2VkRW50aXR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldEVudGl0eUxpbmtKU1goZW50aXR5LCBsaW5rZWRFbnRpdGllcywgdmFsdWUudmFsdWUsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUudmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoZW50aXR5LmdldFR5cGUoKSA9PSBcIm9udG9sb2d5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8PntKU09OLnN0cmluZ2lmeSh2YWx1ZS52YWx1ZSl9PC8+O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldENsYXNzRXhwcmVzc2lvbkpTWChlbnRpdHksIGxpbmtlZEVudGl0aWVzLCB2YWx1ZS52YWx1ZSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkTGlua3NUb1RleHQoZW50aXR5LCB2YWx1ZS52YWx1ZS50b1N0cmluZygpLCBsaW5rZWRFbnRpdGllcywgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICB7Z2V0VmFsdWVKU1gocmVpZmllZCl9XG4gICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgIHtyZWlmaWVkLmhhc01ldGFkYXRhKCkgJiYgZ2V0QXhpb21zSW5mb3JtYXRpb25KU1goZW50aXR5LCByZWlmaWVkLmdldE1ldGFkYXRhKCkpfVxuICAgICAgICA8Lz5cbiAgICApO1xufSIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUJ1dHRvbiwgRXVpUHJvdmlkZXJ9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7SnNvbkFwaVdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlcn0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5cbmZ1bmN0aW9uIEpzb25BcGlXaWRnZXQocHJvcHM6IEpzb25BcGlXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaVF1ZXJ5LCBidXR0b25UZXh0LCBidXR0b25TaXplIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxFdWlCdXR0b24gaHJlZj17YXBpUXVlcnl9IHRhcmdldD1cIl9ibGFua1wiIHNpemU9e2J1dHRvblNpemUgfHwgXCJtXCJ9PntidXR0b25UZXh0fTwvRXVpQnV0dG9uPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVKc29uQXBpKHByb3BzOiBKc29uQXBpV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEpzb25BcGlXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEpzb25BcGlXaWRnZXQocHJvcHM6IEpzb25BcGlXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxKc29uQXBpV2lkZ2V0XG4gICAgICAgICAgICAgIGFwaVF1ZXJ5PXtwcm9wcy5hcGlRdWVyeX1cbiAgICAgICAgICAgICAgYnV0dG9uVGV4dD17cHJvcHMuYnV0dG9uVGV4dH1cbiAgICAgICAgICAgICAgYnV0dG9uU2l6ZT17cHJvcHMuYnV0dG9uU2l6ZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IEpzb25BcGlXaWRnZXQsIGNyZWF0ZUpzb25BcGkgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUJhZGdlLCBFdWlJY29uLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXJ9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0JyZWFkY3J1bWJXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHtpc0VudGl0eX0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQnJlYWRjcnVtYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uL3N0eWxlL3NlbWxvb2twLXN0eWxlcy5jc3NcIjtcblxuZnVuY3Rpb24gQnJlYWRjcnVtYldpZGdldChwcm9wczogQnJlYWRjcnVtYldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgYXBpLCBvbnRvbG9neUlkLCBpcmksIGVudGl0eVR5cGUsIGNvbG9yRmlyc3QsIGNvbG9yU2Vjb25kLCBwYXJhbWV0ZXIgLCB1c2VMZWdhY3ksIG9uTmF2aWdhdGVUb09udG9sb2d5fSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeShcbiAgICBbXCJicmVhZGNydW1iXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmcgJiZcbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4ge2lmKHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5ICYmIHByb3BzLm9udG9sb2d5SWQpIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KHByb3BzLm9udG9sb2d5SWQgfHwgXCJcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQpfX0+XG4gICAgICAgICAgICAgICAgPEV1aUJhZGdlIGNsYXNzTmFtZT17cHJvcHMub250b2xvZ3lJZCA/IFwiYnJlYWRjcnVtYiBjbGlja2FibGUtYnJlYWRjcnVtYlwiIDogXCJicmVhZGNydW1iXCJ9IGNvbG9yPXtjb2xvckZpcnN0IHx8ICgocHJvcHMub250b2xvZ3lJZCkgPyBcInByaW1hcnlcIiA6IFwid2FybmluZ1wiKX0+e3Byb3BzLm9udG9sb2d5SWQ/LnRvVXBwZXJDYXNlKCkgfHwgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9e1wic1wifS8+fTwvRXVpQmFkZ2U+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAmbmJzcDs8RXVpSWNvbiB0eXBlPVwiYXJyb3dSaWdodFwiLz4mbmJzcDtcbiAgICAgICAgICAgIDxFdWlCYWRnZSBjbGFzc05hbWU9XCJicmVhZGNydW1iXCIgY29sb3I9e2NvbG9yU2Vjb25kIHx8IFwid2FybmluZ1wifT57PEV1aUxvYWRpbmdTcGlubmVyIHNpemU9e1wic1wifS8+fTwvRXVpQmFkZ2U+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgfVxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmIGlzRW50aXR5KGRhdGEpICYmXG4gICAgICAgIDxCcmVhZGNydW1iUHJlc2VudGF0aW9uXG4gICAgICAgICAgb250b2xvZ3lOYW1lPXtkYXRhLmdldE9udG9sb2d5SWQoKX1cbiAgICAgICAgICBzaG9ydEZvcm09e2RhdGEuZ2V0U2hvcnRGb3JtKCl9XG4gICAgICAgICAgb250b2xvZ3lJZD17b250b2xvZ3lJZCB8fCBkYXRhLmdldE9udG9sb2d5SWQoKX1cbiAgICAgICAgICBjb2xvckZpcnN0PXtjb2xvckZpcnN0fVxuICAgICAgICAgIGNvbG9yU2Vjb25kPXtjb2xvclNlY29uZH1cbiAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17b25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgICB7aXNFcnJvciAmJlxuICAgICAgICAgIDxCcmVhZGNydW1iUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgIG9udG9sb2d5TmFtZT17cHJvcHMub250b2xvZ3lJZD8udG9VcHBlckNhc2UoKSB8fCAoZGF0YSAmJiBkYXRhLmdldE9udG9sb2d5SWQoKS50b1VwcGVyQ2FzZSgpKSB8fCBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwib250b2xvZ3lcIil9XG4gICAgICAgICAgICAgIHNob3J0Rm9ybT17KGRhdGEgJiYgZGF0YS5nZXRTaG9ydEZvcm0oKSkgPyBkYXRhLmdldFNob3J0Rm9ybSgpLnRvVXBwZXJDYXNlKCkgOiBcIlwifVxuICAgICAgICAgICAgICBvbnRvbG9neUlkPXtvbnRvbG9neUlkIHx8IChkYXRhID8gZGF0YS5nZXRPbnRvbG9neUlkKCkgOiBcIlwiKX1cbiAgICAgICAgICAgICAgY29sb3JGaXJzdD17Y29sb3JGaXJzdCB8fCAoKHByb3BzLm9udG9sb2d5SWQgfHwgKGRhdGEgJiYgZGF0YS5nZXRPbnRvbG9neUlkKCkpKSA/IFwicHJpbWFyeVwiIDogXCJkYW5nZXJcIil9XG4gICAgICAgICAgICAgIGNvbG9yU2Vjb25kPXtjb2xvclNlY29uZCB8fCAoKGRhdGEgJiYgZGF0YS5nZXRTaG9ydEZvcm0oKSkgPyBcInN1Y2Nlc3NcIiA6IFwiZGFuZ2VyXCIpfVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17b25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgLz5cbiAgICAgIH1cbiAgICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCcmVhZGNydW1iKHByb3BzOiBCcmVhZGNydW1iV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OigpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkQnJlYWRjcnVtYldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkQnJlYWRjcnVtYldpZGdldChwcm9wczogQnJlYWRjcnVtYldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPEJyZWFkY3J1bWJXaWRnZXRcbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICBjb2xvckZpcnN0PXtwcm9wcy5jb2xvckZpcnN0fVxuICAgICAgICAgICAgICBjb2xvclNlY29uZD17cHJvcHMuY29sb3JTZWNvbmR9XG4gICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgQnJlYWRjcnVtYldpZGdldCwgY3JlYXRlQnJlYWRjcnVtYiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0Rlc2NyaXB0aW9uV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IERlc2NyaXB0aW9uUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vRGVzY3JpcHRpb25QcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IE5PX0RFU0NSSVBUSU9OID0gXCJObyBkZXNjcmlwdGlvbiBhdmFpbGFibGUuXCI7XG5cbmZ1bmN0aW9uIERlc2NyaXB0aW9uV2lkZ2V0KHByb3BzOiBEZXNjcmlwdGlvbldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgYXBpLCBvbnRvbG9neUlkLCBpcmksIGRlc2NUZXh0LCB0aGluZ1R5cGUsIHBhcmFtZXRlciwgdXNlTGVnYWN5LCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcImRlc2NyaXB0aW9uXCIsIGFwaSwgcGFyYW1ldGVyLCB0aGluZ1R5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldFRoaW5nT2JqZWN0KGlyaSwgdGhpbmdUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJzXCIgLz59XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPERlc2NyaXB0aW9uUHJlc2VudGF0aW9uIGRlc2NyaXB0aW9uPXtkYXRhLmdldERlc2NyaXB0aW9uKCkgfHwgTk9fREVTQ1JJUFRJT059IGRlc2NUZXh0PXtkZXNjVGV4dH0gey4uLnJlc3R9Lz5cbiAgICAgIH1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiZGVzY3JpcHRpb25cIil9PC9FdWlUZXh0Pn1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVzY3JpcHRpb24ocHJvcHM6IERlc2NyaXB0aW9uV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OigpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkRGVzY3JpcHRpb25XaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZERlc2NyaXB0aW9uV2lkZ2V0KHByb3BzOiBEZXNjcmlwdGlvbldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPERlc2NyaXB0aW9uV2lkZ2V0XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgZGVzY1RleHQ9e3Byb3BzLmRlc2NUZXh0fVxuICAgICAgICAgICAgICB0aGluZ1R5cGU9e3Byb3BzLnRoaW5nVHlwZX1cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgIGNvbG9yPXtwcm9wcy5jb2xvcn1cbiAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBEZXNjcmlwdGlvbldpZGdldCwgY3JlYXRlRGVzY3JpcHRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtEZXNjcmlwdGlvblByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIERlc2NyaXB0aW9uUHJlc2VudGF0aW9uKHByb3BzOiBEZXNjcmlwdGlvblByZXNlbnRhdGlvblByb3BzKSB7XG4gIGNvbnN0IHtkZXNjVGV4dCwgZGVzY3JpcHRpb24sIC4uLnJlc3R9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEV1aVRleHQgey4uLnJlc3R9PntkZXNjVGV4dCB8fCBkZXNjcmlwdGlvbn08L0V1aVRleHQ+XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IERlc2NyaXB0aW9uUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7dXNlU3RhdGV9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlGbGV4SXRlbSwgRXVpTGluaywgRXVpUHJvdmlkZXIsIEV1aUJ1dHRvbkljb259IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7SXJpV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7aXNFdWlMaW5rQ29sb3IsIGlzSGV4Q29sb3IsIGlzUmdiQ29sb3J9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXJ9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuXG5mdW5jdGlvbiBJcmlXaWRnZXQocHJvcHM6IElyaVdpZGdldFByb3BzKSB7ICAgICAgIFxuICBjb25zdCB7IGlyaSwgaXJpVGV4dCwgY29sb3IsIGV4dGVybmFsSWNvbiwgdXJsUHJlZml4LCBjb3B5QnV0dG9uIH0gPSBwcm9wcztcbiAgY29uc3QgW2NvcGllZCwgc2V0Q29waWVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgdXJsUHJlZml4RXhpc3QgPSB0eXBlb2YodXJsUHJlZml4KSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB1cmxQcmVmaXggIT09IFwiXCIgPyB0cnVlIDogZmFsc2U7XG4gIGNvbnN0IGlyaVVybCA9IHVybFByZWZpeEV4aXN0ID8gdXJsUHJlZml4ICsgZW5jb2RlVVJJQ29tcG9uZW50KGlyaSkgOiBpcmk7XG5cbiAgY29uc3QgQ29weUxpbmtCdXR0b24gPSAoKSA9PiB7XG4gICAgaWYgKCFjb3BpZWQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlCdXR0b25JY29uIFxuICAgICAgICAgIGRpc3BsYXk9XCJiYXNlXCJcbiAgICAgICAgICBpY29uVHlwZT1cImNvcHlcIiAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAga2V5PXtcImNvcHktYnRuXCJ9XG4gICAgICAgICAgc3R5bGU9e3ttYXJnaW5MZWZ0OiBcIjVweFwiLCBtYXJnaW5SaWdodDogXCI1cHhcIiwgY29sb3I6IGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCJ9fSBcbiAgICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4geyAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaXJpVXJsKTtcbiAgICAgICAgICAgIHNldENvcGllZCh0cnVlKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge3NldENvcGllZChmYWxzZSk7fSwgMjAwMCk7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgIH19XG4gICAgICAgICAgPiAgICAgICAgICAgIFxuICAgICAgICA8L0V1aUJ1dHRvbkljb24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPEV1aUJ1dHRvbkljb24gXG4gICAgICAgIHN0eWxlPXt7bWFyZ2luTGVmdDogXCI1cHhcIiwgY29sb3I6IGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCJ9fSAgIFxuICAgICAgICBkaXNwbGF5PVwiYmFzZVwiIFxuICAgICAgICBpY29uVHlwZT1cImNoZWNrXCIgXG4gICAgICAgIGtleT17XCJjb3B5LWJ0blwifVxuICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgID5cbiAgICAgIDwvRXVpQnV0dG9uSWNvbj5cbiAgICApOyAgICBcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICA8ZGl2PlxuICAgICAgICB7Y29weUJ1dHRvbiA9PT0gJ2xlZnQnICYmIDxDb3B5TGlua0J1dHRvbiAvPn1cbiAgICAgICAgPEV1aUxpbmsgXG4gICAgICAgICAgaHJlZj17aXJpVXJsfSBcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiBcbiAgICAgICAgICBzdHlsZT17e2NvbG9yOiBjb2xvciAmJiAoaXNIZXhDb2xvcihjb2xvcikgfHwgaXNSZ2JDb2xvcihjb2xvcikpID8gY29sb3IgOiBcIlwifX0gXG4gICAgICAgICAgY29sb3I9e2NvbG9yICYmIGlzRXVpTGlua0NvbG9yKGNvbG9yKSA/IGNvbG9yIDogdW5kZWZpbmVkfVxuICAgICAgICAgIGV4dGVybmFsPXtleHRlcm5hbEljb259XG4gICAgICAgICAgPlxuICAgICAgICAgIHtpcmlUZXh0ID8gaXJpVGV4dCA6IGlyaX0gICAgICAgICAgXG4gICAgICAgIDwvRXVpTGluaz5cbiAgICAgICAge2NvcHlCdXR0b24gPT09ICdyaWdodCcgJiYgPENvcHlMaW5rQnV0dG9uIC8+fVxuICAgICAgPC9kaXY+XG4gICAgPC9FdWlGbGV4SXRlbT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSXJpKHByb3BzOiBJcmlXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7ICAgICAgIFxuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkSXJpV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRJcmlXaWRnZXQocHJvcHM6IElyaVdpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTsgICAgXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8SXJpV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBpcmlUZXh0PXtwcm9wcy5pcmlUZXh0fVxuICAgICAgICAgICAgICAgICAgICBjb2xvcj17cHJvcHMuY29sb3J9XG4gICAgICAgICAgICAgICAgICAgIGV4dGVybmFsSWNvbj17cHJvcHMuZXh0ZXJuYWxJY29ufVxuICAgICAgICAgICAgICAgICAgICB1cmxQcmVmaXg9e3Byb3BzLnVybFByZWZpeH1cbiAgICAgICAgICAgICAgICAgICAgY29weUJ1dHRvbj17cHJvcHMuY29weUJ1dHRvbn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgSXJpV2lkZ2V0LCBjcmVhdGVJcmkgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtPbHNBcGl9IGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1RhYldpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RW50aXR5VHlwZU5hbWUsIGlzRW50aXR5fSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIFRhYldpZGdldChwcm9wczogVGFiV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBpcmksIGFwaSwgb250b2xvZ3lJZCwgZW50aXR5VHlwZSwgcGFyYW1ldGVyLCB1c2VMZWdhY3ksIGhpZXJhcmNoeVRhYiwgY3Jvc3NSZWZUYWIsIHRlcm1pbm9sb2d5SW5mb1RhYiwgYWx0TmFtZXNUYWIsIC4uLnJlc3QgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxFbnRpdHk+KFxuICAgIFtcInRhYmRhdGFcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyKGRhdGE6IEVudGl0eSkge1xuICAgIHJldHVybiAoXG4gICAgICA8VGFiUHJlc2VudGF0aW9uIHsuLi5yZXN0fVxuICAgICAgICBkYXRhPXtkYXRhfVxuICAgICAgICBpcmk9e2lyaX1cbiAgICAgICAgYXBpPXthcGl9XG4gICAgICAgIHVzZUxlZ2FjeT17dXNlTGVnYWN5fVxuICAgICAgICBlbnRpdHlUeXBlPXtkYXRhLmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZX1cbiAgICAgICAgb250b2xvZ3lJZD17b250b2xvZ3lJZCA/IG9udG9sb2d5SWQgOiBkYXRhLmdldE9udG9sb2d5SWQoKX1cbiAgICAgICAgaGllcmFyY2h5VGFiPXtoaWVyYXJjaHlUYWJ9XG4gICAgICAgIGNyb3NzUmVmVGFiPXtjcm9zc1JlZlRhYn1cbiAgICAgICAgdGVybWlub2xvZ3lJbmZvVGFiPXt0ZXJtaW5vbG9neUluZm9UYWJ9XG4gICAgICAgIGFsdE5hbWVzVGFiPXthbHROYW1lc1RhYn1cbiAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgIGhpZXJhcmNoeVByZWZlcnJlZFJvb3RzPXtwcm9wcy5oaWVyYXJjaHlQcmVmZXJyZWRSb290c31cbiAgICAgICAgaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMuaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgaGllcmFyY2h5U2hvd1NpYmxpbmdzT25Jbml0PXtwcm9wcy5oaWVyYXJjaHlTaG93U2libGluZ3NPbkluaXR9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiZGVzY3JpcHRpb25cIil9PC9FdWlUZXh0Pn1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJlxuICAgICAgICA8PlxuICAgICAgICAgIHtpc0VudGl0eShkYXRhKSA/IHJlbmRlcihkYXRhKSA6IG51bGx9XG4gICAgICAgIDwvPlxuICAgICAgfVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUYWIocHJvcHM6IFRhYldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRUYWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFRhYldpZGdldChwcm9wczogVGFiV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8VGFiV2lkZ2V0XG4gICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICBhbHROYW1lc1RhYj17cHJvcHMuYWx0TmFtZXNUYWJ9XG4gICAgICAgICAgICAgIGhpZXJhcmNoeVRhYj17cHJvcHMuaGllcmFyY2h5VGFifVxuICAgICAgICAgICAgICBjcm9zc1JlZlRhYj17cHJvcHMuY3Jvc3NSZWZUYWJ9XG4gICAgICAgICAgICAgIHRlcm1pbm9sb2d5SW5mb1RhYj17cHJvcHMudGVybWlub2xvZ3lJbmZvVGFifVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e3Byb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX1cbiAgICAgICAgICAgICAgaGllcmFyY2h5UHJlZmVycmVkUm9vdHM9e3Byb3BzLmhpZXJhcmNoeVByZWZlcnJlZFJvb3RzfVxuICAgICAgICAgICAgICBoaWVyYXJjaHlLZWVwRXhwYW5zaW9uU3RhdGVzPXtwcm9wcy5oaWVyYXJjaHlLZWVwRXhwYW5zaW9uU3RhdGVzfVxuICAgICAgICAgICAgICBoaWVyYXJjaHlTaG93U2libGluZ3NPbkluaXQ9e3Byb3BzLmhpZXJhcmNoeVNob3dTaWJsaW5nc09uSW5pdH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IFRhYldpZGdldCwgY3JlYXRlVGFiIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGFiYmVkQ29udGVudCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBpc0VudGl0eSwgaXNJbmRpdmlkdWFsLCBpc1Byb3BlcnR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0Nyb3NzUmVmV2lkZ2V0L0Nyb3NzUmVmVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IHtUYWJQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgT250b2xvZ3lJbmZvV2lkZ2V0IH0gZnJvbSBcIi4uLy4uL09udG9sb2d5SW5mb1dpZGdldFwiO1xuaW1wb3J0IHtIaWVyYXJjaHlXaWRnZXR9IGZyb20gXCIuL0hpZXJhcmNoeVdpZGdldFNlbUxvb2tQXCI7XG5cbmZ1bmN0aW9uIFRhYlByZXNlbnRhdGlvbihwcm9wczogVGFiUHJlc2VudGF0aW9uUHJvcHMpIHtcbiAgZnVuY3Rpb24gcmVuZGVyKGRhdGE6IEVudGl0eSkge1xuICAgIGNvbnN0IHRhYnMgPSBbXTtcbiAgICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIHNob3cgdGhlIHRhYnMuIFRoZXJlZm9yZSwgdW5kZWZpbmVkIGdldHMgdHJlYXRlZCBhcyB0cnV0aHkuXG4gICAgICovXG4gICAgaWYocHJvcHMuYWx0TmFtZXNUYWIgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5hbHROYW1lc1RhYil7XG4gICAgICB0YWJzLnB1c2goXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgICAgICA8QWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIHN5bm9ueW1zPXtkYXRhLmdldFN5bm9ueW1zKCkubWFwKHN5bm9ueW0gPT4gc3lub255bS52YWx1ZSl9IC8+XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGlkOiBcInRhYjFcIixcbiAgICAgICAgICAgICAgbmFtZTogXCJBbHRlcm5hdGl2ZSBOYW1lc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmhpZXJhcmNoeVRhYiA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmhpZXJhcmNoeVRhYil7XG4gICAgICB0YWJzLnB1c2goXG4gICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHsvKiBUT0RPOiBJcyBvdmVyZmxvdzogXCJhdXRvXCIgd2FudGVkPyAqL31cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBvdmVyZmxvdzogXCJhdXRvXCJ9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8SGllcmFyY2h5V2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBiYWNrZW5kX3R5cGUgYW5kIGFwaUtleSBtaXNzaW5nIGhlcmUuIElmIFRhYldpZGdldC8gTWV0YWRhdGFXaWRnZXQgc2hhbGwgYmUgdXNlZCBmb3Igb3RoZXIgYmFja2VuZCB0eXBlcyBsYXRlciwgdGhpcyBoYXMgdG8gYmUgcHJvdmlkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaVVybD17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkIHx8ICgoZGF0YSAmJiBkYXRhLmdldE9udG9sb2d5SWQoKSAhPT0gdW5kZWZpbmVkKSA/IGRhdGEuZ2V0T250b2xvZ3lJZCgpIDogXCJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZFJvb3RzPXtwcm9wcy5oaWVyYXJjaHlQcmVmZXJyZWRSb290c31cbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dTaWJsaW5nc09uSW5pdD17cHJvcHMuaGllcmFyY2h5U2hvd1NpYmxpbmdzT25Jbml0fVxuICAgICAgICAgICAgICAgICAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMuaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgaWQ6IFwidGFiMlwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiSGllcmFyY2h5XCJcbiAgICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmKHByb3BzLmNyb3NzUmVmVGFiID09PSB1bmRlZmluZWQgfHwgcHJvcHMuY3Jvc3NSZWZUYWIgKXtcbiAgICAgIHRhYnMucHVzaChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6XG4gICAgICAgICAgICAgICAgPENyb3NzUmVmVGFiUHJlc2VudGF0aW9uIGNyb3NzcmVmcz17UmVpZmllZC5mcm9tSnNvbihkYXRhLmdldENyb3NzUmVmZXJlbmNlcygpKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgfSl9IC8+LFxuICAgICAgICAgICAgICBpZDogXCJ0YWIzXCIsXG4gICAgICAgICAgICAgIG5hbWU6IFwiQ3Jvc3MgcmVmZXJlbmNlc1wiXG4gICAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZihwcm9wcy50ZXJtaW5vbG9neUluZm9UYWIgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy50ZXJtaW5vbG9neUluZm9UYWIpe1xuICAgICAgdGFicy5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgICBjb250ZW50OlxuICAgICAgICAgICAgICA8T250b2xvZ3lJbmZvV2lkZ2V0XG4gICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZCB8fCBkYXRhLmdldE9udG9sb2d5SWQoKX1cbiAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e1wiXCJ9XG4gICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgc2hvd0JhZGdlcz17ZmFsc2V9XG4gICAgICAgICAgICAgICAgaGFzVGl0bGU9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIHdpZHRoPXs2MDB9XG4gICAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgICBpZDogXCJ0YWI0XCIsXG4gICAgICAgICAgICAgIG5hbWU6IGBBYm91dCAke3Byb3BzLm9udG9sb2d5SWQ/LnRvVXBwZXJDYXNlKCl9YFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuXG4gICAgaWYodGFicy5sZW5ndGggPT09IDApe1xuICAgICAgLyoqXG4gICAgICAgKiBFdWlUYWJiZWRDb250ZW50IGNvbXBvbmVudCByYWlzZXMgZXhjZXB0aW9uIGlmIG5vIHRhYiBpcyBwcm92aWRlZC5cbiAgICAgICAqL1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgICAgPEV1aVRhYmJlZENvbnRlbnQgc2l6ZT1cInNcIiB0YWJzPXt0YWJzfSAvPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0VudGl0eShwcm9wcy5kYXRhKSB8fCBpc1Byb3BlcnR5KHByb3BzLmRhdGEpIHx8IGlzSW5kaXZpZHVhbChwcm9wcy5kYXRhKSA/IHJlbmRlcihwcm9wcy5kYXRhKSA6IG51bGx9XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IFRhYlByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0sIEV1aVBhbmVsLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24ocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByZXNlbnRhdGlvblByb3BzKSB7XG5cbiAgZnVuY3Rpb24gcmVuZGVyQWx0TGFiZWwoKSB7XG4gICAgaWYgKHByb3BzLnN5bm9ueW1zICYmIHByb3BzLnN5bm9ueW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBwcm9wcy5zeW5vbnltcy5tYXAoKHZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgPEV1aUZsZXhJdGVtIGtleT17dmFsdWUgKyBpbmRleH0+e3ZhbHVlfTwvRXVpRmxleEl0ZW0+XG4gICAgICApKTtcbiAgICB9XG4gICAgcmV0dXJuIDxFdWlUZXh0Pk5vIGFsdGVybmF0aXZlIG5hbWVzIGV4aXN0LjwvRXVpVGV4dD47XG4gIH1cblxuICAvLyBVc2luZyByZWlmaWNhdGlvbi9wYXNzaW5nIHRoZSBFbnRpdHkgY2xhc3MgY291bGQgcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uXG4gIC8vIGZ1bmN0aW9uIHJlbmRlckFsdExhYmVsKGVudGl0eTogRW50aXR5KSB7XG4gIC8vICAgaWYgKGVudGl0eS5nZXRTeW5vbnltcygpLmxlbmd0aCA+IDApIHtcbiAgLy8gICAgIHJldHVybiBlbnRpdHkuZ2V0U3lub255bXMoKS5tYXAoKHJmOiBSZWlmaWVkPGFueT4sIGluZGV4OiBudW1iZXIpID0+IChcbiAgLy8gICAgICAgPHAga2V5PXtyZi52YWx1ZSArIGluZGV4fT57Z2V0UmVpZmllZEpTWChlbnRpdHksIHJmLCBhcGkpfTwvcD5cbiAgLy8gICAgICkpO1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gPEV1aVRleHQ+Tm8gYWx0ZXJuYXRpdmUgbmFtZXMgZXhpc3QuPC9FdWlUZXh0PjtcbiAgLy8gfVxuXG4gIHJldHVybiAoXG4gICAgPEV1aVBhbmVsPlxuICAgICAgPEV1aUZsZXhHcm91cCBzdHlsZT17eyBwYWRkaW5nOiAxMCB9fSBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAge3JlbmRlckFsdExhYmVsKCl9XG4gICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICA8L0V1aVBhbmVsPlxuICApO1xufVxuXG5leHBvcnQgeyBBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtLCBFdWlQYW5lbCwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7Q3Jvc3NSZWZQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbihwcm9wczogQ3Jvc3NSZWZQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gIGZ1bmN0aW9uIHJlbmRlckNyb3NzUmVmcyhjcm9zc3JlZnM6IGFueSkge1xuICAgIGlmIChjcm9zc3JlZnMgJiYgY3Jvc3NyZWZzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBjcm9zc3JlZnM/Lm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiAoXG4gICAgICAgIDxFdWlGbGV4SXRlbSBrZXk9e2luZGV4fT5cbiAgICAgICAgICB7aXRlbX1cbiAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICkpO1xuICAgIH1cbiAgICByZXR1cm4gPEV1aVRleHQ+Tm8gY3Jvc3MgcmVmZXJlbmNlcyBleGlzdC48L0V1aVRleHQ+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpUGFuZWw+XG4gICAgICA8PlxuICAgICAgICA8RXVpRmxleEdyb3VwIHN0eWxlPXt7IHBhZGRpbmc6IDcgfX0gZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAge3JlbmRlckNyb3NzUmVmcyhwcm9wcy5jcm9zc3JlZnMpfVxuICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgIDwvPlxuICAgIDwvRXVpUGFuZWw+XG4gICk7XG59XG5cbmV4cG9ydCB7IENyb3NzUmVmVGFiUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7UmVhY3RFbGVtZW50fSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQ2FyZCwgRXVpRmxleEl0ZW0sIEV1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpU3BhY2VyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtPbnRvbG9neSwgVGhpbmd9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge2NhcGl0YWxpemUsIGRlQ2FtZWxDYXNlLCBkZVVuZGVyc2NvcmUsIHJhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge2dldEVudGl0eUxpbmtKU1gsIGdldFJlaWZpZWRKU1h9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9TdHJ1Y3R1cmVSZW5kZXJpbmdcIjtcbmltcG9ydCB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5fSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7T250b2xvZ3lJbmZvV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IERFRkFVTFRfSEFTX1RJVExFID0gdHJ1ZTtcblxuZnVuY3Rpb24gT250b2xvZ3lJbmZvV2lkZ2V0KHByb3BzOiBPbnRvbG9neUluZm9XaWRnZXRQcm9wcykge1xuICBjb25zdCB7IG9udG9sb2d5SWQsIGFwaSwgcGFyYW1ldGVyLCBoYXNUaXRsZSA9IERFRkFVTFRfSEFTX1RJVExFLCB1c2VMZWdhY3ksIHNob3dCYWRnZXMsIC4uLnJlc3QgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG4gIGNvbnN0IG9uTmF2aWdhdGVzID0ge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfTtcblxuICBjb25zdCB7XG4gICAgZGF0YTogb250b2xvZ3ksXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdPbnRvbG9neSxcbiAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc09udG9sb2d5LFxuICAgIGlzRXJyb3I6IGlzRXJyb3JPbnRvbG9neSxcbiAgICBlcnJvcjogZXJyb3JPbnRvbG9neSxcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgICAgW1xuICAgICAgICBcIm9udG9sb2d5SW5mb1wiLFxuICAgICAgICBwcm9wc1xuICAgICAgXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICk7XG5cbiAgZnVuY3Rpb24gZ2V0T250b2xvZ3lJcmlTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSk6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7KG9udG9sb2d5LmdldElyaSgpIHx8IG9udG9sb2d5LmdldE9udG9sb2d5UHVybCgpKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+T250b2xvZ3kgSVJJOjwvYj5cbiAgICAgICAgICAgICAgICA8cD48YSBpZD17XCJvbnRvbG9neUlyaVwifSBocmVmPXtvbnRvbG9neS5nZXRJcmkoKSB8fCBvbnRvbG9neS5nZXRPbnRvbG9neVB1cmwoKX0+XG4gICAgICAgICAgICAgICAgICB7b250b2xvZ3kuZ2V0SXJpKCkgfHwgb250b2xvZ3kuZ2V0T250b2xvZ3lQdXJsKCl9XG4gICAgICAgICAgICAgICAgPC9hPjwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRWZXJzaW9uSXJpU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXRWZXJzaW9uSXJpKCkgJiZcbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPlZlcnNpb24gSVJJOjwvYj5cbiAgICAgICAgICAgICAgICA8cD48YSBpZD17XCJ2ZXJzaW9uSXJpXCJ9IGhyZWY9e29udG9sb2d5LmdldFZlcnNpb25JcmkoKX0+XG4gICAgICAgICAgICAgICAgICB7b250b2xvZ3kuZ2V0VmVyc2lvbklyaSgpfVxuICAgICAgICAgICAgICAgIDwvYT48L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGFzdExvYWRTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldFNvdXJjZUZpbGVUaW1lc3RhbXAoKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+TGFzdCBsb2FkZWQ6PC9iPlxuICAgICAgICAgICAgICAgIDxwPntuZXcgRGF0ZShvbnRvbG9neS5nZXRTb3VyY2VGaWxlVGltZXN0YW1wKCkpLnRvU3RyaW5nKCl9PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE9udG9sb2d5SWRTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldE9udG9sb2d5SWQoKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+T250b2xvZ3kgSUQ6PC9iPlxuICAgICAgICAgICAgICAgIDxwPntvbnRvbG9neS5nZXRPbnRvbG9neUlkKCl9PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFZlcnNpb25TZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldFZlcnNpb24oKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+VmVyc2lvbjo8L2I+XG4gICAgICAgICAgICAgICAgPHA+e29udG9sb2d5LmdldFZlcnNpb24oKX08L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TnVtQ2xhc3Nlc1NlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0TnVtQ2xhc3NlcygpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5OdW1iZXIgb2YgY2xhc3Nlczo8L2I+XG4gICAgICAgICAgICAgICAgPHA+e29udG9sb2d5LmdldE51bUNsYXNzZXMoKS50b0xvY2FsZVN0cmluZygpfTwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDcmVhdG9yc1NlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0Q3JlYXRvcnMoKS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPkNyZWF0b3JzOjwvYj5cbiAgICAgICAgICAgICAgICB7b250b2xvZ3kuZ2V0Q3JlYXRvcnMoKS5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgPHVsPntvbnRvbG9neS5nZXRDcmVhdG9ycygpLm1hcCgoY3JlYXRvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtjcmVhdG9yICsgcmFuZG9tU3RyaW5nKCl9PntnZXRFbnRpdHlMaW5rSlNYKG9udG9sb2d5LCBvbnRvbG9neS5nZXRMaW5rZWRFbnRpdGllcygpLCBjcmVhdG9yLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICA8cD57Z2V0RW50aXR5TGlua0pTWChvbnRvbG9neSwgb250b2xvZ3kuZ2V0TGlua2VkRW50aXRpZXMoKSwgb250b2xvZ3kuZ2V0Q3JlYXRvcnMoKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PEV1aVNwYWNlci8+PC8+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvblNlY3Rpb24odGhpbmc6IFRoaW5nKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7dGhpbmcuZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKS5tYXAoKGFubm9LZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbm5vcyA9IHRoaW5nLmdldEFubm90YXRpb25CeUlkKGFubm9LZXkpO1xuICAgICAgICAgICAgICAgIGlmKGFubm9zLmxlbmd0aCA9PSAwKSByZXR1cm4gPD48Lz47XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfSBrZXk9e2Fubm9LZXl9PlxuICAgICAgICAgICAgICAgICAgPGI+e2NhcGl0YWxpemUoZGVVbmRlcnNjb3JlKGRlQ2FtZWxDYXNlKHRoaW5nLmdldEFubm90YXRpb25UaXRsZUJ5SWQoYW5ub0tleSkpKSl9OjwvYj5cbiAgICAgICAgICAgICAgICAgIHthbm5vcy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICA8dWw+e2Fubm9zLm1hcCgoYW5ub3RhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17YW5ub3RhdGlvbi52YWx1ZX0+e2dldFJlaWZpZWRKU1godGhpbmcsIGFubm90YXRpb24sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX08L2xpPjtcbiAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgPHAga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldFJlaWZpZWRKU1godGhpbmcsIGFubm9zWzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9PC9wPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxFdWlDYXJkXG4gICAgICAgICAgICB0aXRsZT17aGFzVGl0bGUgPyBcIk9udG9sb2d5IEluZm9ybWF0aW9uXCIgOiBcIlwifVxuICAgICAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICBzdHlsZT17cHJvcHMud2lkdGggPyB7d2lkdGg6IHByb3BzLndpZHRofSA6IHt9fVxuICAgICAgICA+XG5cbiAgICAgICAgICB7aXNMb2FkaW5nT250b2xvZ3kgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9eydzJ30vPn1cbiAgICAgICAgICB7aXNTdWNjZXNzT250b2xvZ3kgJiYgb250b2xvZ3kgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG5cbiAgICAgICAgICAgICAgICB7Z2V0T250b2xvZ3lJcmlTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICB7Z2V0VmVyc2lvbklyaVNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgIHtnZXRMYXN0TG9hZFNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgIHsvKiBUT0RPOiBEbyB3ZSB3YW50IHRoZSBmb2xsb3dpbmcgb24gdGhlIGluZm9ybWF0aW9uIHdpZGdldD9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEViaSBkb2VzIG5vdCBoYXZlIHRoZW0gdGhlcmUsIGJ1dCBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgZW50aXR5IHBhZ2UgKi9cbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRPbnRvbG9neUlkU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgIHtnZXRWZXJzaW9uU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgIHtnZXROdW1DbGFzc2VzU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgIHsvKntnZXRDcmVhdG9yc1NlY3Rpb24oZW50aXR5SW5mbyl9Ki8gLyogcmVkdW5kYW50IGFzIGl0J3MgbGlzdGVkIGluIGFubm90YXRpb25zIGFueXdheSAqL31cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHtnZXRBbm5vdGF0aW9uU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICB9XG4gICAgICAgICAge2lzRXJyb3JPbnRvbG9neSAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yT250b2xvZ3ksIFwiaW5mb3JtYXRpb25cIil9PC9FdWlUZXh0Pn1cbiAgICAgICAgPC9FdWlDYXJkPlxuICAgICAgPC8+XG4gICk7XG5cbn1cblxuZnVuY3Rpb24gY3JlYXRlT250b2xvZ3lJbmZvKHByb3BzOiBPbnRvbG9neUluZm9XaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkT250b2xvZ3lJbmZvV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRPbnRvbG9neUluZm9XaWRnZXQocHJvcHM6IE9udG9sb2d5SW5mb1dpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPE9udG9sb2d5SW5mb1dpZGdldFxuICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICBzaG93QmFkZ2VzPXtwcm9wcy5zaG93QmFkZ2VzfVxuICAgICAgICAgICAgICBoYXNUaXRsZT17cHJvcHMuaGFzVGl0bGV9XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT17cHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgT250b2xvZ3lJbmZvV2lkZ2V0LCBjcmVhdGVPbnRvbG9neUluZm8gfTtcbiIsICJpbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlUmVkdWNlcn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlUZXh0LCBFdWlJY29uLCBFdWlQcm92aWRlciwgRXVpQ2FyZH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtPbHNBcGl9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge0hpZXJhcmNoeSwgVHJlZU5vZGV9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzL0hpZXJhcmNoeVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7U2tvc0FwaX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwaS9Ta29zQXBpXCI7XG5pbXBvcnQge0hpZXJhcmNoeUJ1aWxkZXJ9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHtPbnRvUG9ydGFsQXBpfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL09udG9Qb3J0YWxBcGlcIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uLy4uL3N0eWxlL3NlbWxvb2twLXN0eWxlcy5jc3NcIjtcbmltcG9ydCB7cmFuZG9tU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7SGllcmFyY2h5V2lkZ2V0UHJvcHMsIEVudGl0eURhdGF9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7aXNJbmRpdmlkdWFsVHlwZU5hbWV9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY29uc3QgSElFUkFSQ0hZX1dJREdFVF9ERUZBVUxUX1ZBTFVFUyA9IHtcbiAgICBJTkNMVURFX09CU09MRVRFX0VOVElUSUVTOiBmYWxzZSxcbiAgICBQUkVGRVJSRURfUk9PVFM6IGZhbHNlLFxuICAgIEtFRVBfRVhQQU5TSU9OX1NUQVRFUzogZmFsc2UsXG4gICAgU0hPV19TSUJMSU5HU19PTl9JTklUOiBmYWxzZSxcbiAgICBVU0VfTEVHQUNZOiBmYWxzZVxufSBhcyBjb25zdDtcblxuLy8gVE9ETzogdXNlIG9mIGVudGl0eVR5cGUgaGFzIHRvIGJlIHJldmlld2VkLiBDdXJyZW50bHkgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBlbnRpdHlUeXBlIG9mIHRoZSBoaWVyYXJjaHkgYW5kIHRoZSBzcGVjaWZpYyBlbnRpdHkgaW5zaWRlIGl0IGFsd2F5cyBtYXRjaCAobm90IG5lY2Vzc2FyaWx5IHRydWUgZm9yIGluZGl2aWR1YWwgaGllcmFyY2hpZXMsIGJ1dCB0aGVzZSBoYXZlIHRvIGJlIHJldmlld2VkIGFueXdheXMpXG5mdW5jdGlvbiBUcmVlTGluayhwcm9wczoge2VudGl0eURhdGE6IEVudGl0eURhdGEsIGNoaWxkUmVsYXRpb25Ub1BhcmVudD86IHN0cmluZywgb250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlPzogc3RyaW5nLCBvbk5hdmlnYXRlVG9FbnRpdHk/OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlPzogc3RyaW5nLCBlbnRpdHk/OiBFbnRpdHlEYXRhKSA9PiB2b2lkLCBvbk5hdmlnYXRlVG9PbnRvbG9neT86IChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IEVudGl0eURhdGEpID0+IHZvaWQsIGhpZ2hsaWdodDogYm9vbGVhbn0pIHtcbiAgICBsZXQgZGVmaW5lZEJ5OiBzdHJpbmdbXSA9IHByb3BzLmVudGl0eURhdGEuZGVmaW5lZEJ5IHx8IFtdO1xuICAgIGlmKGRlZmluZWRCeS5pbmNsdWRlcyhwcm9wcy5vbnRvbG9neUlkKSkgZGVmaW5lZEJ5ID0gW107XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtwcm9wcy5oaWdobGlnaHQgPyBcImhpZ2hsaWdodFwiIDogdW5kZWZpbmVkfT5cbiAgICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09IFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0JGT18wMDAwMDUwXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7bWFyZ2luSW5saW5lU3RhcnQ6IFwiMS41cHhcIiwgbWFyZ2luVG9wOiBcIjIuNXB4XCJ9fSBjbGFzc05hbWU9XCJzdXJyb3VuZENpcmNsZVwiPiZuYnNwO1AmbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtwcm9wcy5jaGlsZFJlbGF0aW9uVG9QYXJlbnQgPT0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwiICYmXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e21hcmdpbklubGluZVN0YXJ0OiBcIjEuNXB4XCIsIG1hcmdpblRvcDogXCIyLjVweFwifX0gY2xhc3NOYW1lPVwic3Vycm91bmRDaXJjbGVcIj5JPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtpZihwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHkpIHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eShwcm9wcy5vbnRvbG9neUlkLCBwcm9wcy5lbnRpdHlUeXBlIHx8IFwiXCIsIHByb3BzLmVudGl0eURhdGEpfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7cHJvcHMuZW50aXR5RGF0YS5sYWJlbCB8fCBwcm9wcy5lbnRpdHlEYXRhLmlyaX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAge2RlZmluZWRCeS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgIHtkZWZpbmVkQnkubWFwKChkZWZpbmluZ09udG9sb2d5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtwcm9wcy5lbnRpdHlEYXRhLmlyaX06JHtkZWZpbmluZ09udG9sb2d5fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtpZihwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSkgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3koZGVmaW5pbmdPbnRvbG9neSwgcHJvcHMuZW50aXR5VHlwZSB8fCBcIlwiLCBwcm9wcy5lbnRpdHlEYXRhKX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPntkZWZpbmluZ09udG9sb2d5LnRvVXBwZXJDYXNlKCl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gSGllcmFyY2h5V2lkZ2V0KHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgICAgYXBpVXJsLFxuICAgICAgICBiYWNrZW5kVHlwZSxcbiAgICAgICAgYXBpS2V5LFxuICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5LFxuXG4gICAgICAgIGlyaSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLklOQ0xVREVfT0JTT0xFVEVfRU5USVRJRVMsXG4gICAgICAgIHByZWZlcnJlZFJvb3RzID0gSElFUkFSQ0hZX1dJREdFVF9ERUZBVUxUX1ZBTFVFUy5QUkVGRVJSRURfUk9PVFMsXG4gICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXMgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLktFRVBfRVhQQU5TSU9OX1NUQVRFUyxcbiAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0ID0gSElFUkFSQ0hZX1dJREdFVF9ERUZBVUxUX1ZBTFVFUy5TSE9XX1NJQkxJTkdTX09OX0lOSVQsXG4gICAgICAgIHVzZUxlZ2FjeSA9IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMuVVNFX0xFR0FDWSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICAvLyB1c2VkIHRvIG1hbnVhbGx5IHJlcmVuZGVyIHRoZSBjb21wb25lbnQgb24gdXBkYXRlIG9mIGhpZXJhcmNoeSAoYXMgaGllcmFyY2h5IG9iamVjdCBpcyBuZXN0ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIHN0YXRlIHZhcmlhYmxlIGl0c2VsZilcbiAgICBjb25zdCBbLCBmb3JjZVVwZGF0ZV0gPSB1c2VSZWR1Y2VyKHggPT4geCArIDEgJSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgMCk7XG5cbiAgICBjb25zdCBhcGkgOiBIaWVyYXJjaHlCdWlsZGVyID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChiYWNrZW5kVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvbHNcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPbHNBcGkoYXBpVXJsKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2tvc21vc1wiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNrb3NBcGkoYXBpVXJsKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwib250b3BvcnRhbFwiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9udG9Qb3J0YWxBcGkoYXBpVXJsLCBhcGlLZXkgfHwgXCJcIik7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPbHNBcGkoYXBpVXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW2FwaVVybCwgYmFja2VuZFR5cGUsIGFwaUtleV1cbiAgICApO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhOiBoaWVyYXJjaHksXG4gICAgICAgIGlzU3VjY2VzczogaXNTdWNjZXNzSGllcmFyY2h5LFxuICAgIH0gPSB1c2VRdWVyeShcbiAgICAgIFtcImhpZXJhcmNoeVNlbUxvb2tQXCIsIGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcHJlZmVycmVkUm9vdHMsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLCBrZWVwRXhwYW5zaW9uU3RhdGVzLCBzaG93U2libGluZ3NPbkluaXQsIHVzZUxlZ2FjeV0sXG4gICAgICBhc3luYyBmdW5jdGlvbiBnZXROZXdIaWVyYXJjaHkoKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGFwaS5idWlsZEhpZXJhcmNoeVdpdGhJcmkoe1xuICAgICAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgICAgICAgICBpcmk6IGlyaSxcbiAgICAgICAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcbiAgICAgICAgICAgICAgcHJlZmVycmVkUm9vdHM6IHByZWZlcnJlZFJvb3RzLFxuICAgICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgICAgICAgIHNob3dTaWJsaW5nc09uSW5pdDogc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgICAgICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgdG9nZ2xlTm9kZSA9IHVzZUNhbGxiYWNrKChub2RlOiBUcmVlTm9kZSkgPT4ge1xuICAgICAgICBpZighKGhpZXJhcmNoeSBpbnN0YW5jZW9mIEhpZXJhcmNoeSkpIHRocm93IEVycm9yKFwiSGllcmFyY2h5IG9iamVjdCB3YXMgdW5kZWZpbmVkIHdoaWxlIHRyeWluZyB0byBleHBhbmQgYSB0cmVlIG5vZGUuIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5cIik7XG5cbiAgICAgICAgLy8gVE9ETzogaW5kaXZpZHVhbCBoaWVyYXJjaGllcyBhcmUgZnJvemVuIGZvciBub3cgKGJlZm9yZSB1bmRvaW5nLCBjb3JyZWN0IGNoaWxkIGxvYWRpbmcgaGFzIHRvIGJlIGltcGxlbWVudGVkIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzKVxuICAgICAgICBpZihoaWVyYXJjaHkuZW50aXR5VHlwZSAmJiBpc0luZGl2aWR1YWxUeXBlTmFtZShoaWVyYXJjaHkuZW50aXR5VHlwZSkpIHJldHVybjtcblxuICAgICAgICAvLyB0b2dnbGUgZXhwYW5zaW9uIHN0YXRlIGFuZCBmb3JjZSBjb21wb25lbnQgdG8gcmVyZW5kZXIgYWZ0ZXJ3YXJkXG4gICAgICAgIG5vZGUuZXhwYW5kZWQgPSAhbm9kZS5leHBhbmRlZDtcblxuICAgICAgICAvLyBmZXRjaCBuZWVkZWQgaW5mb3JtYXRpb24gYW5kIHJlcmVuZGVyIGFnYWluIGlmIG5lZWRlZFxuICAgICAgICBpZihub2RlLmV4cGFuZGVkKXtcbiAgICAgICAgICAgIG5vZGUubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZSgpO1xuXG4gICAgICAgICAgICBoaWVyYXJjaHkuZmV0Y2hJbmZvcm1hdGlvbkZvckV4cGFuc2lvbihub2RlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgICBoaWVyYXJjaHkuY2xvc2VOb2RlKG5vZGUpO1xuICAgICAgICB9XG4gICAgfSxbaGllcmFyY2h5XSlcblxuICAgIGZ1bmN0aW9uIHJlbmRlclRyZWVOb2RlKGhpZXJhcmNoeTogSGllcmFyY2h5LCBub2RlOiBUcmVlTm9kZSwgZHJhd0xpbmU/OiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgIDxFdWlUZXh0PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7aGVpZ2h0OiBcIjI0cHhcIn19PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3twb3NpdGlvbjogXCJyZWxhdGl2ZVwiLCBib3JkZXJMZWZ0OiBcIjFweCBkb3R0ZWQgYmxhY2tcIiwgYm9yZGVyQm90dG9tOiBcIjFweCBkb3R0ZWQgYmxhY2tcIiwgd2lkdGg6IFwiMTJweFwiLCBoZWlnaHQ6IFwiMTZweFwiLCBsZWZ0OiBcIjUuNXB4XCIsIHRvcDogXCItMXB4XCJ9fT48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7cG9zaXRpb246IFwicmVsYXRpdmVcIiwgYm9yZGVyTGVmdDogZHJhd0xpbmUgPyBcIjFweCBkb3R0ZWQgYmxhY2tcIjpcIlwiLCB3aWR0aDogXCIxMnB4XCIsIGhlaWdodDogXCI5cHhcIiwgbGVmdDogXCI1LjVweFwiLCB0b3A6IFwiMHB4XCJ9fT48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7cG9zaXRpb246IFwicmVsYXRpdmVcIiwgdG9wOiBcIi0yMnB4XCJ9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIW5vZGUuZW50aXR5RGF0YS5oYXNDaGlsZHJlbiA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUljb24gdHlwZT17XCJlbXB0eVwifS8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7fX0gb25DbGljaz17KCkgPT4ge3RvZ2dsZU5vZGUobm9kZSl9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUljb24gdHlwZT17bm9kZS5leHBhbmRlZCA/IFwiYXJyb3dEb3duXCIgOiBcImFycm93UmlnaHRcIn0gc2l6ZT17XCJzXCJ9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfTwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFRyZWVMaW5rIGVudGl0eURhdGE9e25vZGUuZW50aXR5RGF0YX0gY2hpbGRSZWxhdGlvblRvUGFyZW50PXtub2RlLmNoaWxkUmVsYXRpb25Ub1BhcmVudH0gb250b2xvZ3lJZD17aGllcmFyY2h5Lm9udG9sb2d5SWR9IGVudGl0eVR5cGU9e2hpZXJhcmNoeS5lbnRpdHlUeXBlfSBvbk5hdmlnYXRlVG9FbnRpdHk9e29uTmF2aWdhdGVUb0VudGl0eX0gb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fSBoaWdobGlnaHQ9e25vZGUuZW50aXR5RGF0YS5pcmkgPT0gaGllcmFyY2h5Py5tYWluRW50aXR5SXJpfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7bm9kZS5lbnRpdHlEYXRhLm51bURlc2NlbmRhbnRzICE9IHVuZGVmaW5lZCAmJiBub2RlLmVudGl0eURhdGEubnVtRGVzY2VuZGFudHMgPiAwICYmIDxzcGFuIHN0eWxlPXt7Y29sb3I6IFwiZ3JheVwifX0+KHtub2RlLmVudGl0eURhdGEubnVtRGVzY2VuZGFudHMudG9Mb2NhbGVTdHJpbmcoKX0pPC9zcGFuPn1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICAgICAgICB7bm9kZS5leHBhbmRlZCAmJlxuICAgICAgICAgICAgICAgICAgICA8dWwgc3R5bGU9e3ttYXJnaW5CbG9ja0VuZDogXCIwXCIsIG1hcmdpbklubGluZVN0YXJ0OiBcIjUuNXB4XCJ9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtub2RlLmxvYWRpbmcgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlMb2FkaW5nU3Bpbm5lciBzdHlsZT17e3Bvc2l0aW9uOiBcInJlbGF0aXZlXCIsIGxlZnQ6IFwiMTNweFwiLCB0b3A6IFwiNXB4XCJ9fS8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxvYWRlZENoaWxkcmVuLm1hcCgoY2hpbGQsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBrZXk9e3JhbmRvbVN0cmluZygpfSBzdHlsZT17e2JvcmRlckxlZnQ6IGRyYXdMaW5lID8gXCIxcHggZG90dGVkIGJsYWNrXCI6XCJcIiwgcGFkZGluZ0xlZnQ6IFwiMXJlbVwifX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyVHJlZU5vZGUoaGllcmFyY2h5LCBjaGlsZCwgaWR4IDwgbm9kZS5sb2FkZWRDaGlsZHJlbi5sZW5ndGggLSAxKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpQ2FyZCB0aXRsZT17XCJcIn0gbGF5b3V0PXtcImhvcml6b250YWxcIn0gc3R5bGU9e3sgb3ZlcmZsb3dYOiBcImF1dG9cIiwgb3ZlcmZsb3dZOiBcImhpZGRlblwiIH19PlxuICAgICAgICAgICAgeyhpc1N1Y2Nlc3NIaWVyYXJjaHkgJiYgaGllcmFyY2h5ICE9IHVuZGVmaW5lZCkgP1xuICAgICAgICAgICAgICAgIDxFdWlUZXh0IHN0eWxlPXt7d2hpdGVTcGFjZTogXCJub3dyYXBcIn19PiB7LyogLy8gVE9ETzogRG9lcyBub3QgZ2V0IGRpc3BsYXllZCBjb3JyZWN0bHkgb24gc3Rvcnlib29rIG1haW4gcGFnZSAqL31cbiAgICAgICAgICAgICAgICAgICAge2hpZXJhcmNoeS5yb290cy5tYXAoKHJvb3ROb2RlLCBpZHgpID0+IHJlbmRlclRyZWVOb2RlKGhpZXJhcmNoeSwgcm9vdE5vZGUsIGlkeCA8IGhpZXJhcmNoeS5yb290cy5sZW5ndGggLSAxKSl9XG4gICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgICAgIDogPEV1aUxvYWRpbmdTcGlubmVyLz59XG4gICAgICAgIDwvRXVpQ2FyZD5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWVyYXJjaHkocHJvcHM6IEhpZXJhcmNoeVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEhpZXJhcmNoeVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkSGllcmFyY2h5V2lkZ2V0KHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8SGllcmFyY2h5V2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGFwaVVybD17cHJvcHMuYXBpVXJsfVxuICAgICAgICAgICAgICAgICAgICBhcGlLZXk9e3Byb3BzLmFwaUtleX1cbiAgICAgICAgICAgICAgICAgICAgYmFja2VuZFR5cGU9e3Byb3BzLmJhY2tlbmRUeXBlfVxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM9e3Byb3BzLmluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkUm9vdHM9e3Byb3BzLnByZWZlcnJlZFJvb3RzfVxuICAgICAgICAgICAgICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzPXtwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzfVxuICAgICAgICAgICAgICAgICAgICBzaG93U2libGluZ3NPbkluaXQ9e3Byb3BzLnNob3dTaWJsaW5nc09uSW5pdH1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHtIaWVyYXJjaHlXaWRnZXQsIGNyZWF0ZUhpZXJhcmNoeX07IiwgImltcG9ydCBheGlvcywge0F4aW9zSW5zdGFuY2UsIEF4aW9zUmVxdWVzdENvbmZpZ30gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQge0J1aWxkSGllcmFyY2h5UHJvcHMsIEhpZXJhcmNoeUJ1aWxkZXIsIEhpZXJhcmNoeUlyaVByb3AsIExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzfSBmcm9tIFwiLi9IaWVyYXJjaHlCdWlsZGVyXCI7XG5pbXBvcnQgeyBIaWVyYXJjaHksIFBhcmVudENoaWxkUmVsYXRpb24sIFRyZWVOb2RlfSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHlcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9tb2RlbC9SZWlmaWVkXCI7XG5pbXBvcnQgeyBFbnRpdHlEYXRhIH0gZnJvbSBcIi4uL2FwcC90eXBlc1wiO1xuXG50eXBlIFRvcENvbmNlcHQgPSB7XG4gICAgdXJpOiBzdHJpbmcsXG4gICAgbGFiZWw/OiBzdHJpbmcsXG4gICAgdG9wQ29uY2VwdE9mPzogc3RyaW5nLFxuICAgIGhhc0NoaWxkcmVuOiBib29sZWFuLFxuICAgIG5vdGF0aW9uPzogc3RyaW5nXG59XG5cbnR5cGUgTGFiZWxBbmRVcmlBbmRDaGlsZHJlbiA9IHtcbiAgICB1cmk6IHN0cmluZyxcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIGhhc0NoaWxkcmVuOiBib29sZWFuLFxuICAgIG5vdGF0aW9uPzogc3RyaW5nXG59XG5cbnR5cGUgSGllcmFyY2h5UmVzdWx0ID0ge1xuICAgIHVyaTogc3RyaW5nLFxuICAgIHByZWZMYWJlbDogc3RyaW5nO1xuICAgIHRvcD86IHN0cmluZyxcbiAgICBicm9hZGVyPzogc3RyaW5nW10sXG4gICAgbmFycm93ZXI/OiBMYWJlbEFuZFVyaUFuZENoaWxkcmVuW11cbn07XG5cbnR5cGUgUHJlZkFuZFVyaUFuZENoaWxkcmVuID0ge1xuICAgIHVyaTogc3RyaW5nLFxuICAgIHByZWZMYWJlbDogc3RyaW5nLFxuICAgIGhhc0NoaWxkcmVuOiBib29sZWFuXG4gICAgbm90YXRpb24/OiBzdHJpbmdcbn1cblxuYWJzdHJhY3QgY2xhc3MgU2tvc0VudGl0eURhdGFCdWlsZGVyIHtcbiAgICBzdGF0aWMgZnJvbVRvcENvbmNlcHQob2JqOiBUb3BDb25jZXB0KSA6IEVudGl0eURhdGEge1xuICAgICAgICByZXR1cm4gIHtcbiAgICAgICAgICAgIGlyaTogb2JqLnVyaSxcbiAgICAgICAgICAgIGxhYmVsOiBvYmoubGFiZWwsXG4gICAgICAgICAgICBoYXNDaGlsZHJlbjogb2JqLmhhc0NoaWxkcmVuLFxuICAgICAgICAgICAgcGFyZW50czogW11cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUhpZXJhcmNoeVJlc3VsdChvYmo6IEhpZXJhcmNoeVJlc3VsdCkgOiBFbnRpdHlEYXRhIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogb2JqLnVyaSxcbiAgICAgICAgICAgIGxhYmVsOiBvYmoucHJlZkxhYmVsLFxuICAgICAgICAgICAgaGFzQ2hpbGRyZW46IG9iai5uYXJyb3dlciAhPSB1bmRlZmluZWQgJiYgb2JqLm5hcnJvd2VyLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICBwYXJlbnRzOiBSZWlmaWVkLmZyb21Kc29uKG9iai5icm9hZGVyKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21QcmVmQW5kVXJpQW5kQ2hpbGRyZW4ob2JqOiBQcmVmQW5kVXJpQW5kQ2hpbGRyZW4sIHBhcmVudHM/OiBzdHJpbmdbXSkgOiBFbnRpdHlEYXRhIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogb2JqLnVyaSxcbiAgICAgICAgICAgIGxhYmVsOiBvYmoucHJlZkxhYmVsLFxuICAgICAgICAgICAgaGFzQ2hpbGRyZW46IG9iai5oYXNDaGlsZHJlbixcbiAgICAgICAgICAgIHBhcmVudHM6IFJlaWZpZWQuZnJvbUpzb24ocGFyZW50cylcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUxhYmVsQW5kVXJpQW5kQ2hpbGRyZW4ob2JqOiBMYWJlbEFuZFVyaUFuZENoaWxkcmVuLCBwYXJlbnRzPzogc3RyaW5nW10pIDogRW50aXR5RGF0YSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IG9iai51cmksXG4gICAgICAgICAgICBsYWJlbDogb2JqLmxhYmVsLFxuICAgICAgICAgICAgaGFzQ2hpbGRyZW46IG9iai5oYXNDaGlsZHJlbixcbiAgICAgICAgICAgIHBhcmVudHM6IFJlaWZpZWQuZnJvbUpzb24ocGFyZW50cylcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNrb3NBcGkgaW1wbGVtZW50cyBIaWVyYXJjaHlCdWlsZGVye1xuICAgIHByaXZhdGUgYXhpb3NJbnN0YW5jZTogQXhpb3NJbnN0YW5jZTtcblxuICAgIGNvbnN0cnVjdG9yKGFwaTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgICAgICAgICBiYXNlVVJMOiBhcGksXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAvLyBDb250ZW50X1R5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLCAvLyBsZWFkcyB0byBwcmVmbGlnaHQgZXJyb3JcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbWFrZUNhbGwodXJsOiBzdHJpbmcsIGNvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnPG5ldmVyPiB8IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQodXJsLCBjb25maWcpKS5kYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBidWlsZEhpZXJhcmNoeVdpdGhJcmkocHJvcHM6IEJ1aWxkSGllcmFyY2h5UHJvcHMgJiBIaWVyYXJjaHlJcmlQcm9wKSA6IFByb21pc2U8SGllcmFyY2h5PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGlyaSxcbiAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICBzaG93U2libGluZ3NPbkluaXQsXG4gICAgICAgIH0gPSBwcm9wcztcblxuICAgICAgICBpZighb250b2xvZ3lJZCkgdGhyb3cgRXJyb3IoXCJvbnRvbG9neUlkIGhhcyB0byBiZSBzcGVjaWZpZWQgZm9yIFNLT1MgQVBJLlwiKTtcblxuICAgICAgICBjb25zdCByb290RW50aXRpZXM6IHN0cmluZ1tdID0gW11cbiAgICAgICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPigpO1xuICAgICAgICBjb25zdCBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+KCk7XG4gICAgICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgY29uc3Qgb25Jbml0aWFsUGF0aDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTsgLy8gb25seSB1c2VkIGlmIHNob3dTaWJsaW5nc09uSW5pdCA9PSBmYWxzZVxuXG4gICAgICAgIGlmKGlyaSkge1xuICAgICAgICAgICAgY29uc3QgYnJvYWRlclRyYW5zaXRpdmU6IEhpZXJhcmNoeVJlc3VsdFtdID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgLyR7b250b2xvZ3lJZH0vaGllcmFyY2h5YCwge3BhcmFtczoge3VyaTogaXJpLCBsYW5nOiBcImVuXCIsIGZvcm1hdDogXCJhcHBsaWNhdGlvbi9qc29uXCJ9fSlcbiAgICAgICAgICAgICAgICAudGhlbigob2JqKSA9PiBPYmplY3Qua2V5cyhvYmpbXCJicm9hZGVyVHJhbnNpdGl2ZVwiXSkubWFwKChrZXkpID0+IG9ialtcImJyb2FkZXJUcmFuc2l0aXZlXCJdW2tleV0pKVxuXG4gICAgICAgICAgICAvLyBzdG9yZXMgYWxsIGVudGl0aWVzIGFwcGVhcmluZyBpbiBicm9hZGVyVHJhbnNpdGl2ZVxuICAgICAgICAgICAgLy9jb25zdCBlbnRpdGllczogTWFwPHN0cmluZywgRW50aXR5RGF0YT4gPSBuZXcgTWFwPHN0cmluZywgRW50aXR5RGF0YT4oKVxuXG4gICAgICAgICAgICBmb3IoY29uc3Qgbm9kZSBvZiBicm9hZGVyVHJhbnNpdGl2ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVEYXRhOiBFbnRpdHlEYXRhID0gU2tvc0VudGl0eURhdGFCdWlsZGVyLmZyb21IaWVyYXJjaHlSZXN1bHQobm9kZSk7XG5cbiAgICAgICAgICAgICAgICBlbnRpdGllc0RhdGEuc2V0KG5vZGVEYXRhLmlyaSwgbm9kZURhdGEpO1xuICAgICAgICAgICAgICAgIGlmKG5vZGUudG9wKSByb290RW50aXRpZXMucHVzaChub2RlRGF0YS5pcmkpO1xuXG4gICAgICAgICAgICAgICAgaWYoIXNob3dTaWJsaW5nc09uSW5pdCkgb25Jbml0aWFsUGF0aC5hZGQobm9kZURhdGEuaXJpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcihjb25zdCBub2RlIG9mIGJyb2FkZXJUcmFuc2l0aXZlKSB7XG4gICAgICAgICAgICAgICAgaWYobm9kZS5uYXJyb3dlciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW46IEVudGl0eURhdGFbXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBjaGlsZE5vZGUgb2Ygbm9kZS5uYXJyb3dlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkTm9kZURhdGEgPSBlbnRpdGllc0RhdGEuZ2V0KGNoaWxkTm9kZS51cmkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2hpbGROb2RlRGF0YSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGVEYXRhID0gU2tvc0VudGl0eURhdGFCdWlsZGVyLmZyb21MYWJlbEFuZFVyaUFuZENoaWxkcmVuKGNoaWxkTm9kZSwgW25vZGUudXJpXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdGllc0RhdGEuc2V0KGNoaWxkTm9kZURhdGEuaXJpLCBjaGlsZE5vZGVEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFjaGlsZE5vZGVEYXRhLnBhcmVudHMubWFwKChyKSA9PiByLnZhbHVlKS5pbmNsdWRlcyhub2RlLnVyaSkpIGNoaWxkTm9kZURhdGEucGFyZW50cy5wdXNoKC4uLlJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihub2RlLnVyaSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZE5vZGVEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnNvcnQoKGEsIGIpID0+IChhLmxhYmVsIHx8IGEuaXJpKS5sb2NhbGVDb21wYXJlKGIubGFiZWwgfHwgYi5pcmkpKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucy5zZXQobm9kZS51cmksIGNoaWxkcmVuLm1hcCgoYykgPT4ge3JldHVybiB7Y2hpbGRJcmk6IGMuaXJpfX0pKTtcbiAgICAgICAgICAgICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50LmFkZChub2RlLnVyaSk7IC8vIGluIHNrb3MsIGFsbCBjaGlsZHJlbiBhcmUgbG9hZGVkIGlmIGFueSBhcmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0b3Bjb25jZXB0czogVG9wQ29uY2VwdFtdID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgLyR7b250b2xvZ3lJZH0vdG9wQ29uY2VwdHNgLCB7cGFyYW1zOiB7bGFuZzogXCJlblwiLCBmb3JtYXQ6IFwiYXBwbGljYXRpb24vanNvblwifX0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKG9iaikgPT4gb2JqW1widG9wY29uY2VwdHNcIl0pXG5cbiAgICAgICAgICAgIGZvcihjb25zdCBjb25jZXB0IG9mIHRvcGNvbmNlcHRzKSB7XG4gICAgICAgICAgICAgICAgcm9vdEVudGl0aWVzLnB1c2goY29uY2VwdC51cmkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHJlZU5vZGUoZW50aXR5RGF0YTogRW50aXR5RGF0YSwgY3ljbGVDaGVjazogU2V0PHN0cmluZz4pOiBUcmVlTm9kZSB7XG4gICAgICAgICAgICBjeWNsZUNoZWNrLmFkZChlbnRpdHlEYXRhLmlyaSk7IC8vIGFkZCBjdXJyZW50IGVudGl0eSB0byBjeWNsZSBjaGVjayBzZXRcblxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBUcmVlTm9kZShlbnRpdHlEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KGVudGl0eURhdGEuaXJpKSB8fCBbXTtcblxuICAgICAgICAgICAgaWYoIXNob3dTaWJsaW5nc09uSW5pdCkge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBpZihjeWNsZUNoZWNrLmhhcyhjaGlsZC5jaGlsZElyaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN5Y2xpYyB0cmVlLCBza2lwIGN5Y2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDeWNsaWMgdHJlZSBhdCBlbnRpdHkgXCIke2NoaWxkLmNoaWxkSXJpfVwiLmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZERhdGEgPSBlbnRpdGllc0RhdGEuZ2V0KGNoaWxkLmNoaWxkSXJpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2hpbGREYXRhICE9IHVuZGVmaW5lZCAmJiBvbkluaXRpYWxQYXRoLmhhcyhjaGlsZC5jaGlsZElyaSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGRDaGlsZChjcmVhdGVUcmVlTm9kZShjaGlsZERhdGEsIGN5Y2xlQ2hlY2spKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBpZihjeWNsZUNoZWNrLmhhcyhjaGlsZC5jaGlsZElyaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN5Y2xpYyB0cmVlLCBza2lwIGN5Y2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDeWNsaWMgdHJlZSBhdCBlbnRpdHkgXCIke2NoaWxkLmNoaWxkSXJpfVwiLmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZERhdGEgPSBlbnRpdGllc0RhdGEuZ2V0KGNoaWxkLmNoaWxkSXJpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2hpbGREYXRhICE9IHVuZGVmaW5lZCkgbm9kZS5hZGRDaGlsZChjcmVhdGVUcmVlTm9kZShjaGlsZERhdGEsIGN5Y2xlQ2hlY2spKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKG5vZGUubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoID4gMCkgbm9kZS5leHBhbmRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGN5Y2xlQ2hlY2suZGVsZXRlKGVudGl0eURhdGEuaXJpKTtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3ljbGVDaGVjazogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTsgLy8gQ29udGFpbnMgaXJpcyBvZiBhbGwgZW50aXRpZXMgdGhhdCBoYXZlIG9jY3VycmVkIHdpdGhpbiB0aGUgY3VycmVudCByZWN1cnNpb24gYnJhbmNoLiBJcyB1c2VkIHRvIGNoZWNrIGZvciBjeWNsZXMuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIGNvbnN0IHJvb3ROb2RlczogVHJlZU5vZGVbXSA9IHJvb3RFbnRpdGllcy5tYXAoKHJvb3RFbnRpdHkpID0+IGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQocm9vdEVudGl0eSkhLCBjeWNsZUNoZWNrKSkuc29ydCgoYSxiKSA9PiAoYS5lbnRpdHlEYXRhLmxhYmVsIHx8IGEuZW50aXR5RGF0YS5pcmkpLmxvY2FsZUNvbXBhcmUoYi5lbnRpdHlEYXRhLmxhYmVsIHx8IGIuZW50aXR5RGF0YS5pcmkpKTtcblxuICAgICAgICByZXR1cm4gbmV3IEhpZXJhcmNoeSh7XG4gICAgICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9uczogcGFyZW50Q2hpbGRSZWxhdGlvbnMsXG4gICAgICAgICAgICBlbnRpdGllc0RhdGE6IGVudGl0aWVzRGF0YSxcbiAgICAgICAgICAgIGFsbENoaWxkcmVuUHJlc2VudDogYWxsQ2hpbGRyZW5QcmVzZW50LFxuICAgICAgICAgICAgcm9vdHM6IHJvb3ROb2RlcyxcbiAgICAgICAgICAgIGFwaTogbmV3IFNrb3NBcGkodGhpcy5heGlvc0luc3RhbmNlLmdldFVyaSgpKSxcbiAgICAgICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsXG4gICAgICAgICAgICBtYWluRW50aXR5SXJpOiBpcmksXG4gICAgICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBsb2FkSGllcmFyY2h5Q2hpbGRyZW4ocHJvcHM6IExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzKTogUHJvbWlzZTxFbnRpdHlEYXRhW10+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgbm9kZVRvRXhwYW5kLFxuICAgICAgICAgICAgb250b2xvZ3lJZFxuICAgICAgICB9ID0gcHJvcHM7XG5cbiAgICAgICAgY29uc3QgbmFycm93ZXI6IFByZWZBbmRVcmlBbmRDaGlsZHJlbltdID0gKGF3YWl0IHRoaXMubWFrZUNhbGwoYC8ke29udG9sb2d5SWR9L2NoaWxkcmVuYCwge3BhcmFtczoge3VyaTogbm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpLCBsYW5nOiBcImVuXCIsIGZvcm1hdDogXCJhcHBsaWNhdGlvbi9qc29uXCJ9fSkpW1wibmFycm93ZXJcIl07XG5cbiAgICAgICAgcmV0dXJuIG5hcnJvd2VyLm1hcCgob2JqKSA9PiBTa29zRW50aXR5RGF0YUJ1aWxkZXIuZnJvbVByZWZBbmRVcmlBbmRDaGlsZHJlbihvYmosIFtub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmldKSk7XG4gICAgfVxuXG59IiwgImltcG9ydCB7QnVpbGRIaWVyYXJjaHlQcm9wcywgSGllcmFyY2h5QnVpbGRlciwgSGllcmFyY2h5SXJpUHJvcCwgTG9hZEhpZXJhcmNoeUNoaWxkcmVuUHJvcHN9IGZyb20gXCIuL0hpZXJhcmNoeUJ1aWxkZXJcIjtcbmltcG9ydCBheGlvcywge0F4aW9zSW5zdGFuY2UsIEF4aW9zUmVxdWVzdENvbmZpZ30gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgeyBIaWVyYXJjaHksIFBhcmVudENoaWxkUmVsYXRpb24sIFRyZWVOb2RlfSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHlcIjtcbmltcG9ydCB7cGx1cmFsaXplVHlwZX0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eURhdGF9IGZyb20gXCIuLi9hcHAvdHlwZXNcIjtcblxudHlwZSBIaWVyYXJjaHlOb2RlID0ge1xuICAgIHByZWZMYWJlbDogc3RyaW5nXG4gICAgaGFzQ2hpbGRyZW46IGJvb2xlYW5cbiAgICBjaGlsZHJlbjogSGllcmFyY2h5Tm9kZVtdXG4gICAgb2Jzb2xldGU6IGJvb2xlYW4gLy8gVE9ETzogdXNlIHRoaXMgdG8gZW5hYmxlIHNob3dpbmcgb2Jzb2xldGVUZXJtcz9cbiAgICBbXCJAaWRcIl06IHN0cmluZ1xuICAgIFtcIkB0eXBlXCJdOiBzdHJpbmdcbiAgICAvLyBsaW5rczogb2JqZWN0IC0gbm90IG5lZWRlZCBoZXJlXG4gICAgW1wiQGNvbnRleHRcIl06IHtcbiAgICAgICAgW1wiQHZvY2FiXCJdOiBzdHJpbmdcbiAgICAgICAgcHJlZkxhYmVsOiBzdHJpbmdcbiAgICAgICAgb2Jzb2xldGU6IHN0cmluZ1xuICAgICAgICBbXCJAbGFuZ3VhZ2VcIl06IHN0cmluZ1xuICAgIH1cbn1cblxuZnVuY3Rpb24gSGllcmFyY2h5Tm9kZVRvRW50aXR5RGF0YShoaWVyYXJjaHlOb2RlOiBIaWVyYXJjaHlOb2RlKSA6IEVudGl0eURhdGEge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlyaTogaGllcmFyY2h5Tm9kZVtcIkBpZFwiXSxcbiAgICAgICAgbGFiZWw6IGhpZXJhcmNoeU5vZGVbXCJwcmVmTGFiZWxcIl0sXG4gICAgICAgIGhhc0NoaWxkcmVuOiBoaWVyYXJjaHlOb2RlW1wiaGFzQ2hpbGRyZW5cIl0sXG4gICAgICAgIHBhcmVudHM6IFtdXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT250b1BvcnRhbEFwaSBpbXBsZW1lbnRzIEhpZXJhcmNoeUJ1aWxkZXJ7XG4gICAgcHJpdmF0ZSBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlO1xuICAgIHByaXZhdGUgYXBpS2V5OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihhcGk6IHN0cmluZywgYXBpS2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5heGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgICAgICAgIGJhc2VVUkw6IGFwaSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIC8vIENvbnRlbnRfVHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsIC8vIGxlYWRzIHRvIHByZWZsaWdodCBlcnJvclxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgICAgICB0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKChjb25maWcpID0+IHtcbiAgICAgICAgICAgIGNvbmZpZy5wYXJhbXMgPSBjb25maWcucGFyYW1zIHx8IHt9O1xuXG4gICAgICAgICAgICAvLyBkZWZhdWx0IHBhcmFtc1xuICAgICAgICAgICAgY29uZmlnLnBhcmFtc1tcImFwaWtleVwiXSA9IHRoaXMuYXBpS2V5O1xuICAgICAgICAgICAgY29uZmlnLnBhcmFtc1tcImZvcm1hdFwiXSA9IFwianNvblwiO1xuXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbWFrZUNhbGwodXJsOiBzdHJpbmcsIGNvbmZpZz86IEF4aW9zUmVxdWVzdENvbmZpZzxuZXZlcj4pIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KHVybCwgY29uZmlnKSkuZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYnVpbGRIaWVyYXJjaHlXaXRoSXJpKHByb3BzOiBCdWlsZEhpZXJhcmNoeVByb3BzICYgSGllcmFyY2h5SXJpUHJvcCkgOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpcmksXG4gICAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICAgIHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgICAgfSA9IHByb3BzO1xuXG4gICAgICAgIGlmKCFvbnRvbG9neUlkKSB0aHJvdyBFcnJvcihcIm9udG9sb2d5SWQgaGFzIHRvIGJlIHNwZWNpZmllZCBmb3IgT250b1BvcnRhbCBBUEkuXCIpO1xuICAgICAgICBpZighZW50aXR5VHlwZSkgdGhyb3cgRXJyb3IoXCJlbnRpdHlUeXBlIGhhcyB0byBiZSBzcGVjaWZpZWQgZm9yIE9udG9Qb3J0YWwgQVBJLlwiKTtcblxuICAgICAgICBjb25zdCByb290RW50aXRpZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YT4gPSBuZXcgTWFwPHN0cmluZywgRW50aXR5RGF0YT4oKTtcbiAgICAgICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPigpO1xuICAgICAgICBjb25zdCBhbGxDaGlsZHJlblByZXNlbnQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGNvbnN0IG9uSW5pdGlhbFBhdGg6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIG9ubHkgdXNlZCBpZiBzaG93U2libGluZ3NPbkluaXQgPT0gZmFsc2VcblxuICAgICAgICBmdW5jdGlvbiBidWlsZFJlbGF0aW9ucyhjdXJyTm9kZTogSGllcmFyY2h5Tm9kZSkge1xuICAgICAgICAgICAgZW50aXRpZXNEYXRhLnNldChjdXJyTm9kZVtcIkBpZFwiXSwgSGllcmFyY2h5Tm9kZVRvRW50aXR5RGF0YShjdXJyTm9kZSkpXG4gICAgICAgICAgICBpZihjdXJyTm9kZS5oYXNDaGlsZHJlbiAmJiBjdXJyTm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KGN1cnJOb2RlW1wiQGlkXCJdLCBjdXJyTm9kZS5jaGlsZHJlbi5tYXAoKGMpID0+IHtyZXR1cm4ge2NoaWxkSXJpOiBjW1wiQGlkXCJdfX0pKTtcblxuICAgICAgICAgICAgICAgIGFsbENoaWxkcmVuUHJlc2VudC5hZGQoY3Vyck5vZGVbXCJAaWRcIl0pO1xuICAgICAgICAgICAgICAgIG9uSW5pdGlhbFBhdGguYWRkKGN1cnJOb2RlW1wiQGlkXCJdKTtcblxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBjaGlsZCBvZiBjdXJyTm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBidWlsZFJlbGF0aW9ucyhjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoaXJpKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9wZXJ0eSB3aGljaCBpcyBjaGlsZCBvZiBtdWx0aXBsZSBwcm9wZXJ0aWVzIG9ubHkgaXMgcmV0dXJuZWQgaW4gb25lIHBhcmVudCBpbiAvdHJlZSBxdWVyeSAoLT4gZG8gaXQgcmlnaHQgbWFudWFsbHk/KSAoZS5nLjogaHR0cDovL3N3ZWV0b250b2xvZ3kubmV0L3JlbGFUaW1lL2hhc05IVGltZSAtPiBoYXMgbW9yZSB0aGFuIG9uZSBwYXJlbnQsIGJ1dCBpcyBvbmx5IHNob3duIGluIG9uZSBwYXJlbnQgaW4gL3RyZWUpXG4gICAgICAgICAgICBjb25zdCBhcGlfdHJlZTogSGllcmFyY2h5Tm9kZVtdID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgL29udG9sb2dpZXMvJHtvbnRvbG9neUlkLnRvVXBwZXJDYXNlKCl9LyR7cGx1cmFsaXplVHlwZShlbnRpdHlUeXBlLCBmYWxzZSl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlyaSl9L3RyZWVgLCB7cGFyYW1zOiB7aW5jbHVkZTogXCJAaWQscHJlZkxhYmVsLGhhc0NoaWxkcmVuLGNoaWxkcmVuXCJ9fSk7XG5cbiAgICAgICAgICAgIGZvcihjb25zdCByb290Tm9kZSBvZiBhcGlfdHJlZSkge1xuICAgICAgICAgICAgICAgIHJvb3RFbnRpdGllcy5wdXNoKHJvb3ROb2RlW1wiQGlkXCJdKTtcbiAgICAgICAgICAgICAgICBvbkluaXRpYWxQYXRoLmFkZChyb290Tm9kZVtcIkBpZFwiXSk7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWxhdGlvbnMocm9vdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25Jbml0aWFsUGF0aC5hZGQoaXJpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RzIDogSGllcmFyY2h5Tm9kZVtdID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgICAgICAgICBgL29udG9sb2dpZXMvJHtvbnRvbG9neUlkLnRvVXBwZXJDYXNlKCl9LyR7cGx1cmFsaXplVHlwZShlbnRpdHlUeXBlLCBmYWxzZSl9L3Jvb3RzYCxcbiAgICAgICAgICAgICAgICB7cGFyYW1zOiB7aW5jbHVkZTogXCJAaWQscHJlZkxhYmVsLGhhc0NoaWxkcmVuXCJ9fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZm9yKGNvbnN0IHJvb3ROb2RlIG9mIHJvb3RzKSB7XG4gICAgICAgICAgICAgICAgcm9vdEVudGl0aWVzLnB1c2gocm9vdE5vZGVbXCJAaWRcIl0pO1xuICAgICAgICAgICAgICAgIG9uSW5pdGlhbFBhdGguYWRkKHJvb3ROb2RlW1wiQGlkXCJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVRyZWVOb2RlKGVudGl0eURhdGE6IEVudGl0eURhdGEsIGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+KTogVHJlZU5vZGUge1xuICAgICAgICAgICAgY3ljbGVDaGVjay5hZGQoZW50aXR5RGF0YS5pcmkpOyAvLyBhZGQgY3VycmVudCBlbnRpdHkgdG8gY3ljbGUgY2hlY2sgc2V0XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJlZU5vZGUoZW50aXR5RGF0YSk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkUmVsYXRpb25zLmdldChlbnRpdHlEYXRhLmlyaSkgfHwgW107XG5cbiAgICAgICAgICAgIGlmKCFzaG93U2libGluZ3NPbkluaXQpIHtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjeWNsaWMgdHJlZSwgc2tpcCBjeWNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYob25Jbml0aWFsUGF0aC5oYXMoY2hpbGQuY2hpbGRJcmkpKSBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpISwgY3ljbGVDaGVjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBpZihjeWNsZUNoZWNrLmhhcyhjaGlsZC5jaGlsZElyaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN5Y2xpYyB0cmVlLCBza2lwIGN5Y2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDeWNsaWMgdHJlZSBhdCBlbnRpdHkgXCIke2NoaWxkLmNoaWxkSXJpfVwiLmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgICAgICBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpISwgY3ljbGVDaGVjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYobm9kZS5sb2FkZWRDaGlsZHJlbi5sZW5ndGggPiAwKSBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgY3ljbGVDaGVjay5kZWxldGUoZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBDb250YWlucyBpcmlzIG9mIGFsbCBlbnRpdGllcyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBicmFuY2guIElzIHVzZWQgdG8gY2hlY2sgZm9yIGN5Y2xlcy5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgY29uc3Qgcm9vdE5vZGVzOiBUcmVlTm9kZVtdID0gcm9vdEVudGl0aWVzLm1hcCgocm9vdEVudGl0eSkgPT4gY3JlYXRlVHJlZU5vZGUoZW50aXRpZXNEYXRhLmdldChyb290RW50aXR5KSEsIGN5Y2xlQ2hlY2spKS5zb3J0KChhLGIpID0+IChhLmVudGl0eURhdGEubGFiZWwgfHwgYS5lbnRpdHlEYXRhLmlyaSkubG9jYWxlQ29tcGFyZShiLmVudGl0eURhdGEubGFiZWwgfHwgYi5lbnRpdHlEYXRhLmlyaSkpO1xuXG4gICAgICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgICAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBhbGxDaGlsZHJlblByZXNlbnQsXG4gICAgICAgICAgICByb290czogcm9vdE5vZGVzLFxuICAgICAgICAgICAgYXBpOiBuZXcgT250b1BvcnRhbEFwaSh0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0VXJpKCksIHRoaXMuYXBpS2V5KSxcbiAgICAgICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsXG4gICAgICAgICAgICBtYWluRW50aXR5SXJpOiBpcmksXG4gICAgICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbG9hZEhpZXJhcmNoeUNoaWxkcmVuKHByb3BzOiBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wcyk6IFByb21pc2U8RW50aXR5RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG5vZGVUb0V4cGFuZCxcbiAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICBlbnRpdHlUeXBlXG4gICAgICAgIH0gPSBwcm9wcztcblxuICAgICAgICBpZihlbnRpdHlUeXBlID09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoXCJlbnRpdHlUeXBlIGhhcyB0byBiZSBwcm92aWRlZCB0byBsb2FkIGNoaWxkcmVuIGluIGFuIE9udG9Qb3J0YWwgaGllcmFyY2h5LlwiKTtcblxuICAgICAgICBjb25zdCBjaGlsZHJlbiA6IEhpZXJhcmNoeU5vZGVbXSA9IChhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICAgICAgYC9vbnRvbG9naWVzLyR7b250b2xvZ3lJZC50b1VwcGVyQ2FzZSgpfS8ke3BsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSwgZmFsc2UpfS8ke2VuY29kZVVSSUNvbXBvbmVudChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpfS9jaGlsZHJlbmAsXG4gICAgICAgICAgICB7cGFyYW1zOiB7aW5jbHVkZTogXCJAaWQscHJlZkxhYmVsLGhhc0NoaWxkcmVuXCJ9fVxuICAgICAgICApKVtcImNvbGxlY3Rpb25cIl07XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IEhpZXJhcmNoeU5vZGVUb0VudGl0eURhdGEoY2hpbGQpKTtcbiAgICB9XG59IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9hcGkvT2xzQXBpJ1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gJ3JlYWN0LXF1ZXJ5J1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0FsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBpc0VudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcImFsdGVybmF0aXZlTmFtZVRhYlwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiYgaXNFbnRpdHkoZGF0YSkgJiZcbiAgICAgICAgPEFsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbiBzeW5vbnltcz17ZGF0YS5nZXRTeW5vbnltcygpLm1hcChzeW5vbnltID0+IHN5bm9ueW0udmFsdWUpfSAvPn1cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIC8+fVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJhbHRlcm5hdGl2ZSBuYW1lc1wiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEFsdGVybmF0aXZlTmFtZVRhYldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0KHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8QWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldCwgY3JlYXRlQWx0ZXJuYXRpdmVOYW1lVGFiIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IENyb3NzUmVmV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBpc0VudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9Dcm9zc1JlZlRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL1JlaWZpZWRcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIENyb3NzUmVmVGFiV2lkZ2V0KHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcImNyb3NzUmVmVGFiXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiBpc0VudGl0eShkYXRhKSAmJlxuICAgICAgICA8Q3Jvc3NSZWZUYWJQcmVzZW50YXRpb24gY3Jvc3NyZWZzPXtSZWlmaWVkLmZyb21Kc29uKGRhdGEuZ2V0Q3Jvc3NSZWZlcmVuY2VzKCkpLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH0pfSAvPn1cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIC8+fVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJjcm9zcyByZWZlcmVuY2VzXCIpfTwvRXVpVGV4dD59XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNyb3NzUmVmVGFiKHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZENyb3NzUmVmVGFiV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRDcm9zc1JlZlRhYldpZGdldChwcm9wczogQ3Jvc3NSZWZXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8Q3Jvc3NSZWZUYWJXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IENyb3NzUmVmVGFiV2lkZ2V0LCBjcmVhdGVDcm9zc1JlZlRhYiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgVGl0bGVXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGlzT250b2xvZ3kgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IFRpdGxlUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGl0bGVQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IE5PX1RJVExFID0gXCJObyB0aXRsZSBhdmFpbGFibGUuXCI7XG5cbmZ1bmN0aW9uIFRpdGxlV2lkZ2V0KHByb3BzOiBUaXRsZVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpcmksXG4gICAgb250b2xvZ3lJZCxcbiAgICBhcGksXG4gICAgdGl0bGVUZXh0LFxuICAgIHRoaW5nVHlwZSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5LFxuICAgIGRlZmF1bHRWYWx1ZSxcbiAgICBjbGFzc05hbWVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG4gIGNvbnN0IGZpbmFsQ2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwiZGVmYXVsdC1jbGFzc1wiO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcInRpdGxlRGF0YVwiLCBhcGksIHBhcmFtZXRlciwgdGhpbmdUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHt0aXRsZVRleHQgJiZcbiAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICAgICAgdGl0bGVUZXh0PXt0aXRsZVRleHR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0gLz5cbiAgICAgIH1cblxuICAgICAgeyF0aXRsZVRleHQgJiYgaXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICAgICAgdGl0bGU9e2lzT250b2xvZ3koZGF0YSkgPyBkYXRhLmdldE5hbWUoKSA6IGRhdGEuZ2V0TGFiZWwoKX0gY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0gLz5cbiAgICAgIH1cblxuICAgICAgeyF0aXRsZVRleHQgJiYgaXNMb2FkaW5nICYmIChkZWZhdWx0VmFsdWUgPyAoXG4gICAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uIHRpdGxlVGV4dD17ZGVmYXVsdFZhbHVlfSBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfSAvPilcbiAgICAgICAgOiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPilcbiAgICAgIH1cblxuICAgICAgeyF0aXRsZVRleHQgJiYgaXNFcnJvciAmJiAoZGVmYXVsdFZhbHVlID9cbiAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uIHRpdGxlVGV4dD17ZGVmYXVsdFZhbHVlfSBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfSAvPiA6XG4gICAgICAgIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwidGl0bGVcIil9PC9FdWlUZXh0Pil9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRpdGxlKHByb3BzOiBUaXRsZVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFRpdGxlV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRUaXRsZVdpZGdldChwcm9wczogVGl0bGVXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxUaXRsZVdpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIHRoaW5nVHlwZT17cHJvcHMudGhpbmdUeXBlfVxuICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgdGl0bGVUZXh0PXtwcm9wcy50aXRsZVRleHR9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgZGVmYXVsdFZhbHVlPXtwcm9wcy5kZWZhdWx0VmFsdWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgVGl0bGVXaWRnZXQsIGNyZWF0ZVRpdGxlIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7VGl0bGVQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBUaXRsZVByZXNlbnRhdGlvbihwcm9wczogVGl0bGVQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gIHJldHVybiAoXG4gICAgPEV1aVRleHQgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9Pntwcm9wcy50aXRsZVRleHQgfHwgcHJvcHMudGl0bGV9PC9FdWlUZXh0PlxuICApO1xufVxuXG5leHBvcnQgeyBUaXRsZVByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0LCBFdWlMaW5rfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBJcmlXaWRnZXQgfSBmcm9tIFwiLi9JcmlXaWRnZXRcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtNZXRhZGF0YVdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgQnJlYWRjcnVtYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGFiV2lkZ2V0L1RhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgRGVzY3JpcHRpb25QcmVzZW50YXRpb24gfSBmcm9tIFwiLi9EZXNjcmlwdGlvbldpZGdldC9EZXNjcmlwdGlvblByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgVGl0bGVQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9UaXRsZVdpZGdldC9UaXRsZVByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eVR5cGVOYW1lLCBpc0VudGl0eX0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHtjcmVhdGVNb2RlbE9iamVjdCwgZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxPYmplY3RDcmVhdG9yXCI7XG5pbXBvcnQge0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9ufSBmcm9tIFwiLi9FbnRpdHlPbnRvTGlzdFdpZGdldC9FbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHtFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb259IGZyb20gXCIuL0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb25cIjtcbmltcG9ydCBcIi4uLy4uLy4uL3N0eWxlL3NlbWxvb2twLXN0eWxlcy5jc3NcIlxuXG50eXBlIE1ldGFkYXRhSW5mbyA9IHtcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBvbnRvTGlzdDogc3RyaW5nW10sXG4gICAgZGVmaW5lZEJ5OiBzdHJpbmdbXVxufVxuXG5mdW5jdGlvbiBNZXRhZGF0YVdpZGdldChwcm9wczogTWV0YWRhdGFXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSwgb25OYXZpZ2F0ZVRvT250b2xvZ3ksIGhpZXJhcmNoeVRhYiwgY3Jvc3NSZWZUYWIsIHRlcm1pbm9sb2d5SW5mb1RhYiwgYWx0TmFtZXNUYWIsIHRlcm1MaW5rIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuICBjb25zdCBtZXRhZGF0YVdpZGdldENTUyA9IGBcbiAgICAuYm9sZFRleHR7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG4gIGA7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxNZXRhZGF0YUluZm8+KFxuICAgIFtcIm1ldGFkYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgZW50aXR5OiBFbnRpdHksIG9udG9MaXN0OiBzdHJpbmdbXSwgZGVmaW5lZEJ5OiBzdHJpbmdbXTtcbiAgICAgICAgaWYodXNlTGVnYWN5KSB7XG4gICAgICAgICAgICBjb25zdCBlbWJlZGRlZCA9IChhd2FpdCBvbHNBcGkuZ2V0RW50aXR5UmVzcG9uc2UoaXJpLCBlbnRpdHlUeXBlLCB1bmRlZmluZWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KSlbXCJfZW1iZWRkZWRcIl07XG4gICAgICAgICAgICBlbnRpdHkgPSBjcmVhdGVNb2RlbE9iamVjdCh7IFwiX2VtYmVkZGVkXCI6IHsgW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV06IGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dLCB1c2VMZWdhY3ksIG9udG9sb2d5SWQpIH19KSBhcyBFbnRpdHk7XG4gICAgICAgICAgICBvbnRvTGlzdCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAgICAgICAubWFwKChlbnRpdHlJbk9udG9sb2d5IDogYW55KSA9PiBlbnRpdHlJbk9udG9sb2d5W1wib250b2xvZ3lfbmFtZVwiXSk7XG4gICAgICAgICAgICBkZWZpbmVkQnkgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdKVxuICAgICAgICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3kgOiBhbnkpID0+IGVudGl0eUluT250b2xvZ3lbXCJvbnRvbG9neV9uYW1lXCJdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVudGl0eSA9IGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICAgICAgICBvbnRvTGlzdCA9IGVudGl0eS5nZXRBcHBlYXJzSW4oKTtcbiAgICAgICAgICAgIGRlZmluZWRCeSA9IGVudGl0eS5nZXREZWZpbmVkQnkoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmluZWRCeSA9IGRlZmluZWRCeS5maWx0ZXIoKG9udG86IHN0cmluZykgPT4gb250byAhPSBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpKS5zb3J0KCk7XG4gICAgICAgIG9udG9MaXN0ID0gb250b0xpc3QuZmlsdGVyKChvbnRvIDogc3RyaW5nKSA9PiBvbnRvICE9IGVudGl0eS5nZXRPbnRvbG9neUlkKCkgJiYgIWRlZmluZWRCeS5pbmNsdWRlcyhvbnRvKSkuc29ydCgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbnRpdHk6IGVudGl0eSxcbiAgICAgICAgICAgIG9udG9MaXN0OiBvbnRvTGlzdCxcbiAgICAgICAgICAgIGRlZmluZWRCeTogZGVmaW5lZEJ5XG4gICAgICAgIH0gYXMgTWV0YWRhdGFJbmZvO1xuICAgIH1cbiAgKTtcblxuICBmdW5jdGlvbiByZW5kZXIoZGF0YTogTWV0YWRhdGFJbmZvKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxzdHlsZT57bWV0YWRhdGFXaWRnZXRDU1N9PC9zdHlsZT5cbiAgICAgICAgPEV1aUZsZXhHcm91cCBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9IHN0eWxlPXt7IG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICAgICAge3Rlcm1MaW5rID9cbiAgICAgICAgICAgICAgICAgIDxFdWlMaW5rIGhyZWY9e3Rlcm1MaW5rfSB0YXJnZXQ9XCJfYmxhbmtcIiBleHRlcm5hbD17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgICA8VGl0bGVQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9e2RhdGEuZW50aXR5LmdldExhYmVsKCl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvbGRUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvRXVpTGluaz5cbiAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgIDxUaXRsZVByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17ZGF0YS5lbnRpdHkuZ2V0TGFiZWwoKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9sZFRleHRcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgPEJyZWFkY3J1bWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtvbnRvbG9neUlkIHx8IGRhdGEuZW50aXR5LmdldE9udG9sb2d5SWQoKX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lOYW1lPXtkYXRhLmVudGl0eS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgICAgICAgICAgIHNob3J0Rm9ybT17ZGF0YS5lbnRpdHkuZ2V0U2hvcnRGb3JtKCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxFdWlGbGV4R3JvdXAgZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfSBzdHlsZT17eyBtYXhXaWR0aDogNjAwIH19PlxuICAgICAgICAgICAgICAgICAgICA8SXJpV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgICAgaXJpPXtpcml9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0gc3R5bGU9e3sgbWF4V2lkdGg6IDYwMCB9fT5cbiAgICAgICAgICAgIDxEZXNjcmlwdGlvblByZXNlbnRhdGlvblxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17ZGF0YS5lbnRpdHkuZ2V0RGVzY3JpcHRpb24oKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cblxuICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW46IFwiMCAxMnB4IDBcIiwgbWF4V2lkdGg6IDYwMCB9fT5cbiAgICAgICAgICAgICAgPEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uIGlyaT17cHJvcHMuaXJpfSBsYWJlbD17ZGF0YS5lbnRpdHkuZ2V0TGFiZWwoKSB8fCBcIlwifSBvbnRvbGlzdD17ZGF0YS5vbnRvTGlzdH0gZW50aXR5VHlwZT17ZW50aXR5VHlwZSB8fCBkYXRhLmVudGl0eS5nZXRUeXBlKCkgYXMgRW50aXR5VHlwZU5hbWV9IG9uTmF2aWdhdGVUb09udG9sb2d5PXtvbk5hdmlnYXRlVG9PbnRvbG9neX0gLz5cbiAgICAgICAgICAgICAgPEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbiBpcmk9e3Byb3BzLmlyaX0gb250b2xpc3Q9e2RhdGEuZGVmaW5lZEJ5fSBsYWJlbD17ZGF0YS5lbnRpdHkuZ2V0TGFiZWwoKSB8fCBcIlwifSBlbnRpdHlUeXBlPXtlbnRpdHlUeXBlIHx8IGRhdGEuZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZX0gb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fSAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICA8VGFiUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgICAgZGF0YT17ZGF0YS5lbnRpdHl9XG4gICAgICAgICAgICAgICAgaXJpPXtpcml9XG4gICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICBhcGk9e2FwaX1cbiAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkID8gcHJvcHMub250b2xvZ3lJZCA6IGRhdGEuZW50aXR5LmdldE9udG9sb2d5SWQoKX1cbiAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3VzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICBoaWVyYXJjaHlUYWI9e2hpZXJhcmNoeVRhYn1cbiAgICAgICAgICAgICAgICBjcm9zc1JlZlRhYj17Y3Jvc3NSZWZUYWJ9XG4gICAgICAgICAgICAgICAgdGVybWlub2xvZ3lJbmZvVGFiPXt0ZXJtaW5vbG9neUluZm9UYWJ9XG4gICAgICAgICAgICAgICAgYWx0TmFtZXNUYWI9e2FsdE5hbWVzVGFifVxuICAgICAgICAgICAgICAgIGhpZXJhcmNoeVByZWZlcnJlZFJvb3RzPXtwcm9wcy5oaWVyYXJjaHlQcmVmZXJyZWRSb290c31cbiAgICAgICAgICAgICAgICBoaWVyYXJjaHlTaG93U2libGluZ3NPbkluaXQ9e3Byb3BzLmhpZXJhcmNoeVNob3dTaWJsaW5nc09uSW5pdH1cbiAgICAgICAgICAgICAgICBoaWVyYXJjaHlLZWVwRXhwYW5zaW9uU3RhdGVzPXtwcm9wcy5oaWVyYXJjaHlLZWVwRXhwYW5zaW9uU3RhdGVzfVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e3Byb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwibWV0YWRhdGFcIil9PC9FdWlUZXh0Pn1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJlxuICAgICAgICA8PlxuICAgICAgICAgIHtpc0VudGl0eShkYXRhLmVudGl0eSkgPyByZW5kZXIoZGF0YSkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgIH1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWV0YWRhdGEocHJvcHM6IE1ldGFkYXRhV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkTWV0YWRhdGFXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZE1ldGFkYXRhV2lkZ2V0KHByb3BzOiBNZXRhZGF0YVdpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxNZXRhZGF0YVdpZGdldFxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAgICAgdGVybUxpbms9e3Byb3BzLnRlcm1MaW5rfVxuICAgICAgICAgICAgICAgICAgICBhbHROYW1lc1RhYj17cHJvcHMuYWx0TmFtZXNUYWJ9XG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeVRhYj17cHJvcHMuaGllcmFyY2h5VGFifVxuICAgICAgICAgICAgICAgICAgICBjcm9zc1JlZlRhYj17cHJvcHMuY3Jvc3NSZWZUYWJ9XG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbm9sb2d5SW5mb1RhYj17cHJvcHMudGVybWlub2xvZ3lJbmZvVGFifVxuICAgICAgICAgICAgICAgICAgICBoaWVyYXJjaHlQcmVmZXJyZWRSb290cz17cHJvcHMuaGllcmFyY2h5UHJlZmVycmVkUm9vdHN9XG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeVNob3dTaWJsaW5nc09uSW5pdD17cHJvcHMuaGllcmFyY2h5U2hvd1NpYmxpbmdzT25Jbml0fVxuICAgICAgICAgICAgICAgICAgICBoaWVyYXJjaHlLZWVwRXhwYW5zaW9uU3RhdGVzPXtwcm9wcy5oaWVyYXJjaHlLZWVwRXhwYW5zaW9uU3RhdGVzfVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e3Byb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgTWV0YWRhdGFXaWRnZXQsIGNyZWF0ZU1ldGFkYXRhIH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7dXNlU3RhdGV9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7RW50aXR5T250b0xpc3RQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHtyYW5kb21TdHJpbmd9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuXG5jb25zdCBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZID0gNSBhcyBjb25zdDtcblxuZnVuY3Rpb24gRW50aXR5T250b0xpc3RQcmVzZW50YXRpb24ocHJvcHM6IEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uUHJvcHMpIHtcblxuICAgIGNvbnN0IFthcHBlYXJzSW5FeHBhbmRlZCwgc2V0QXBwZWFyc0luRXhwYW5kZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGZ1bmN0aW9uIHJlbmRlck9udG9CYWRnZShvbnRvbG9neTogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAga2V5PXtyYW5kb21TdHJpbmcoKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge2lmKHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KSBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neShvbnRvbG9neSwgcHJvcHMuZW50aXR5VHlwZSB8fCBcIlwiLCB7IGlyaTogcHJvcHMuaXJpLCBsYWJlbDogcHJvcHMubGFiZWwgfSl9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57b250b2xvZ3kudG9VcHBlckNhc2UoKX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICApO1xuICB9XG5cbiAgICBmdW5jdGlvbiByZW5kZXJPbnRvQmFkZ2VzKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcHJvcHMub250b2xpc3QubGVuZ3RoID4gTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSAmJiAhYXBwZWFyc0luRXhwYW5kZWQ/XG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLm9udG9saXN0LnNsaWNlKDAsIE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkpLm1hcCgob250b2xvZ3k6IHN0cmluZykgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiZXhwYW5kLW9udG8tbGlzdFwiIG9uQ2xpY2s9eygpID0+IHNldEFwcGVhcnNJbkV4cGFuZGVkKHRydWUpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICsge3Byb3BzLm9udG9saXN0Lmxlbmd0aCAtIE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVl9XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvPiA6XG5cbiAgICAgICAgICAgICAgICBwcm9wcy5vbnRvbGlzdC5tYXAoKG9udG9sb2d5OiBzdHJpbmcpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAge3JlbmRlck9udG9CYWRnZShvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICAgIHtwcm9wcy5vbnRvbGlzdCAmJiBwcm9wcy5vbnRvbGlzdC5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxFdWlUZXh0IHN0eWxlPXt7Zm9udFdlaWdodDogXCJub3JtYWxcIn19PlxuICAgICAgICAgICAgICAgIEFsc28gYXBwZWFycyBpbiZuYnNwO1xuICAgICAgICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2VzKCl9XG4gICAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICl9XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7dXNlU3RhdGV9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7RW50aXR5T250b0xpc3RQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHtyYW5kb21TdHJpbmd9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuXG5jb25zdCBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZID0gNSBhcyBjb25zdDtcblxuZnVuY3Rpb24gRW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uKHByb3BzOiBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblByb3BzKSB7XG5cbiAgICBjb25zdCBbYXBwZWFyc0luRXhwYW5kZWQsIHNldEFwcGVhcnNJbkV4cGFuZGVkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblxuICBmdW5jdGlvbiByZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3k6IHN0cmluZykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtpZihwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSkgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kob250b2xvZ3ksIHByb3BzLmVudGl0eVR5cGUgfHwgXCJcIiwgeyBpcmk6IHByb3BzLmlyaSwgbGFiZWw6IHByb3BzLmxhYmVsIH0pfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+e29udG9sb2d5LnRvVXBwZXJDYXNlKCl9PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlck9udG9CYWRnZXMoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAgIHByb3BzLm9udG9saXN0Lmxlbmd0aCA+IE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkgJiYgIWFwcGVhcnNJbkV4cGFuZGVkP1xuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAge3Byb3BzLm9udG9saXN0LnNsaWNlKDAsIE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkpLm1hcCgob250b2xvZ3k6IHN0cmluZykgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImV4cGFuZC1vbnRvLWxpc3RcIiBvbkNsaWNrPXsoKSA9PiBzZXRBcHBlYXJzSW5FeHBhbmRlZCh0cnVlKX0+XG4gICAgICAgICAgICAgICAgICAgICAgKyB7cHJvcHMub250b2xpc3QubGVuZ3RoIC0gTUFYX09OVE9MT0dJRVNfT05fRElTUExBWX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8Lz4gOlxuXG4gICAgICAgICAgICAgIHByb3BzLm9udG9saXN0Lm1hcCgob250b2xvZ3k6IHN0cmluZykgPT4gKFxuICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAge3JlbmRlck9udG9CYWRnZShvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICkpXG4gICAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgICB7cHJvcHMub250b2xpc3QgJiYgcHJvcHMub250b2xpc3QubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8RXVpVGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6IFwibm9ybWFsXCJ9fT5cbiAgICAgICAgICAgICAgICBEZWZpbmVkIGJ5Jm5ic3A7XG4gICAgICAgICAgICAgICAge3JlbmRlck9udG9CYWRnZXMoKX1cbiAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgKX1cbiAgICA8Lz5cblxuICApO1xufVxuXG5leHBvcnQgeyBFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIENvbXBhcmF0b3JzLFxuICBDcml0ZXJpYVdpdGhQYWdpbmF0aW9uLFxuICBFdWlCYXNpY1RhYmxlLFxuICBFdWlCdXR0b25JY29uLFxuICBFdWlIb3Jpem9udGFsUnVsZSxcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aUxpbmssXG4gIEV1aVNwYWNlcixcbiAgRXVpVGV4dFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgY3NzLCBTZXJpYWxpemVkU3R5bGVzIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5pbXBvcnQgeyBFdWlCYXNpY1RhYmxlQ29sdW1uIH0gZnJvbSBcIkBlbGFzdGljL2V1aS9zcmMvY29tcG9uZW50cy9iYXNpY190YWJsZS9iYXNpY190YWJsZVwiO1xuaW1wb3J0IHsgT2xzUmVzb3VyY2UsIFJlc291cmNlc1dpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgT250b2xvZ2llcyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0lOSVRJQUxfRU5UUklFU19QRVJfUEFHRSA9IDEwO1xuY29uc3QgREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyA9IFsxMCwgMjUsIDUwLCAxMDBdO1xuY29uc3QgREVGQVVMVF9JTklUSUFMX1NPUlRfRklFTEQgPSBcImNvbmZpZy5wcmVmZXJyZWRQcmVmaXhcIjtcbmNvbnN0IERFRkFVTFRfSU5JVElBTF9TT1JUX0RJUiA9IFwiYXNjXCIgYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIFJlc291cmNlc1dpZGdldChwcm9wczogUmVzb3VyY2VzV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBpbml0aWFsRW50cmllc1BlclBhZ2UgPSBERUZBVUxUX0lOSVRJQUxfRU5UUklFU19QRVJfUEFHRSxcbiAgICBwYWdlU2l6ZU9wdGlvbnMgPSBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TLFxuICAgIGluaXRpYWxTb3J0RmllbGQgPSBERUZBVUxUX0lOSVRJQUxfU09SVF9GSUVMRCxcbiAgICBpbml0aWFsU29ydERpciA9IERFRkFVTFRfSU5JVElBTF9TT1JUX0RJUixcbiAgICB0YXJnZXRMaW5rLFxuICAgIHBhcmFtZXRlcixcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3QgW3BhZ2VJbmRleCwgc2V0UGFnZUluZGV4XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbcGFnZVNpemUsIHNldFBhZ2VTaXplXSA9IHVzZVN0YXRlKGluaXRpYWxFbnRyaWVzUGVyUGFnZSk7XG4gIGNvbnN0IFtzb3J0RmllbGQsIHNldFNvcnRGaWVsZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudW1iZXI+KGluaXRpYWxTb3J0RmllbGQpO1xuICBjb25zdCBbc29ydERpcmVjdGlvbiwgc2V0U29ydERpcmVjdGlvbl0gPSB1c2VTdGF0ZShpbml0aWFsU29ydERpcik7XG5cblxuICBjb25zdCBjb2x1bW5zOiBBcnJheTxFdWlCYXNpY1RhYmxlQ29sdW1uPE9sc1Jlc291cmNlPiAmIHsgY3NzPzogU2VyaWFsaXplZFN0eWxlcyB9PiA9IFtcbiAgICB7XG4gICAgICBuYW1lOiBcIlJlc291cmNlIE5hbWVcIixcbiAgICAgIGZpZWxkOiBcImNvbmZpZy50aXRsZVwiLFxuICAgICAgd2lkdGg6IFwiMTUlXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJTaG9ydCBOYW1lXCIsXG4gICAgICBmaWVsZDogXCJvbnRvbG9neUlkXCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogc3RyaW5nKSA9PiAoXG4gICAgICAgIHRhcmdldExpbmsgPyA8RXVpTGluayBocmVmPXt0YXJnZXRMaW5rICsgXCJvbnRvbG9naWVzL1wiICsgdmFsdWUgKyBcIi9cIn0+e3ZhbHVlfTwvRXVpTGluaz4gOiB2YWx1ZVxuICAgICAgKSxcbiAgICAgIHdpZHRoOiBcIjEwJVwiLFxuICAgICAgc29ydGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiRGVzY3JpcHRpb25cIixcbiAgICAgIGZpZWxkOiBcImNvbmZpZy5kZXNjcmlwdGlvblwiLFxuICAgICAgd2lkdGg6IFwiMzAlXCIsXG4gICAgICBjc3M6IGNzc2BcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIGBcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgZmllbGQ6IFwiY29uZmlnLnZlcnNpb25cIixcbiAgICAgIHdpZHRoOiBcIjcuNSVcIlxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJMb2FkZWQgb25cIixcbiAgICAgIGZpZWxkOiBcImxvYWRlZFwiLFxuICAgICAgd2lkdGg6IFwiMTAlXCIsXG4gICAgICBkYXRhVHlwZTogXCJkYXRlXCIgYXMgY29uc3QsXG4gICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJUZXJtc1wiLFxuICAgICAgZmllbGQ6IFwibnVtYmVyT2ZUZXJtc1wiLFxuICAgICAgcmVuZGVyOiAodmFsdWU6IG51bWJlcikgPT4gPD57dmFsdWUudG9Mb2NhbGVTdHJpbmcoKX08Lz4sXG4gICAgICB3aWR0aDogXCI3LjUlXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJQcm9wZXJ0aWVzXCIsXG4gICAgICBmaWVsZDogXCJudW1iZXJPZlByb3BlcnRpZXNcIixcbiAgICAgIHJlbmRlcjogKHZhbHVlOiBudW1iZXIpID0+IDw+e3ZhbHVlLnRvTG9jYWxlU3RyaW5nKCl9PC8+LFxuICAgICAgd2lkdGg6IFwiNy41JVwiLFxuICAgICAgc29ydGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiSW5kaXZpZHVhbHNcIixcbiAgICAgIGZpZWxkOiBcIm51bWJlck9mSW5kaXZpZHVhbHNcIixcbiAgICAgIHJlbmRlcjogKHZhbHVlOiBudW1iZXIpID0+IDw+e3ZhbHVlLnRvTG9jYWxlU3RyaW5nKCl9PC8+LFxuICAgICAgd2lkdGg6IFwiNy41JVwiLFxuICAgICAgc29ydGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHdpZHRoOiBcIjUlXCIsXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIC4uLihwcm9wcy5hY3Rpb25zIHx8IFtdKSxcbiAgICAgICAge1xuICAgICAgICAgIHJlbmRlcjogKGl0ZW06IE9sc1Jlc291cmNlKSA9PiAoXG4gICAgICAgICAgICA8RXVpQnV0dG9uSWNvblxuICAgICAgICAgICAgICBocmVmPXtpdGVtLmNvbmZpZy5maWxlTG9jYXRpb259XG4gICAgICAgICAgICAgIGljb25UeXBlPVwiZG93bmxvYWRcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRG93bmxvYWRcIlxuICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAhaXRlbS5jb25maWcuYWxsb3dEb3dubG9hZCB8fFxuICAgICAgICAgICAgICAgIGl0ZW0uY29uZmlnLmZpbGVMb2NhdGlvbi5zdGFydHNXaXRoKFwiZmlsZTovL1wiKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgXTtcblxuICBjb25zdCBvblRhYmxlQ2hhbmdlID0gKHtcbiAgICBwYWdlLFxuICAgIHNvcnQsXG4gIH06IENyaXRlcmlhV2l0aFBhZ2luYXRpb248T2xzUmVzb3VyY2U+KSA9PiB7XG4gICAgY29uc3QgeyBpbmRleDogcGFnZUluZGV4LCBzaXplOiBwYWdlU2l6ZSB9ID0gcGFnZTtcbiAgICBzZXRQYWdlSW5kZXgocGFnZUluZGV4KTtcbiAgICBzZXRQYWdlU2l6ZShwYWdlU2l6ZSk7XG5cbiAgICBpZiAoc29ydCkge1xuICAgICAgY29uc3QgeyBmaWVsZDogc29ydEZpZWxkLCBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gfSA9IHNvcnQ7XG4gICAgICBzZXRTb3J0RmllbGQoc29ydEZpZWxkKTtcbiAgICAgIHNldFNvcnREaXJlY3Rpb24oc29ydERpcmVjdGlvbik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBvbnRvbG9naWVzRGF0YSxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBpc0xvYWRpbmdcbiAgfSA9IHVzZVF1ZXJ5PE9udG9sb2dpZXM+KFxuICAgIFtcIm9udG9sb2dpZXNEYXRhXCIsIGFwaSwgcGFyYW1ldGVyXSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldE9udG9sb2dpZXNEYXRhKFxuICAgICAgICBwcm9wcy5wYXJhbWV0ZXIsXG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuXG4gIGNvbnN0IG9udG9zID0gb250b2xvZ2llc0RhdGE/LnByb3BlcnRpZXMubWFwKG9udG9sb2d5ID0+ICh7XG4gICAgLi4ub250b2xvZ3kucHJvcGVydGllc1xuICB9KSkgfHwgW107XG5jb25zb2xlLmxvZyhvbnRvcylcbiAgY29uc3QgZmluZE9udG9sb2dpZXMgPSAoXG4gICAgb250b2xvZ2llczogYW55W10sXG4gICAgcGFnZUluZGV4OiBudW1iZXIsXG4gICAgcGFnZVNpemU6IG51bWJlcixcbiAgICBzb3J0RmllbGQ6IGFueSxcbiAgICBzb3J0RGlyZWN0aW9uOiBcImFzY1wiIHwgXCJkZXNjXCJcbiAgKSA9PiB7XG4gICAgbGV0IGl0ZW1zO1xuXG4gICAgaWYgKHNvcnRGaWVsZCkge1xuICAgICAgaXRlbXMgPSBvbnRvbG9naWVzXG4gICAgICAgIC5zbGljZSgwKVxuICAgICAgICAuc29ydChcbiAgICAgICAgICBDb21wYXJhdG9ycy5wcm9wZXJ0eShzb3J0RmllbGQsIENvbXBhcmF0b3JzLmRlZmF1bHQoc29ydERpcmVjdGlvbikpXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zID0gb250b2xvZ2llcztcbiAgICB9XG5cbiAgICBsZXQgcGFnZU9mSXRlbXM7XG5cbiAgICBpZiAoIXBhZ2VJbmRleCAmJiAhcGFnZVNpemUpIHtcbiAgICAgIHBhZ2VPZkl0ZW1zID0gaXRlbXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBwYWdlSW5kZXggKiBwYWdlU2l6ZTtcbiAgICAgIHBhZ2VPZkl0ZW1zID0gaXRlbXMuc2xpY2UoXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIE1hdGgubWluKHN0YXJ0SW5kZXggKyBwYWdlU2l6ZSwgb250b2xvZ2llcy5sZW5ndGgpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwYWdlT2ZJdGVtcyxcbiAgICAgIHRvdGFsSXRlbUNvdW50OiBvbnRvbG9naWVzLmxlbmd0aFxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgeyBwYWdlT2ZJdGVtcywgdG90YWxJdGVtQ291bnQgfSA9IGZpbmRPbnRvbG9naWVzKFxuICAgIG9udG9zLFxuICAgIHBhZ2VJbmRleCxcbiAgICBwYWdlU2l6ZSxcbiAgICBzb3J0RmllbGQsXG4gICAgc29ydERpcmVjdGlvblxuICApO1xuXG4gIGNvbnN0IHBhZ2luYXRpb24gPSB7XG4gICAgcGFnZUluZGV4LFxuICAgIHBhZ2VTaXplLFxuICAgIHRvdGFsSXRlbUNvdW50LFxuICAgIHBhZ2VTaXplT3B0aW9uc1xuICB9O1xuXG4gIGNvbnN0IHJlc3VsdHNDb3VudCA9XG4gICAgcGFnZVNpemUgPT09IDAgPyAoXG4gICAgICA8c3Ryb25nPkFsbDwvc3Ryb25nPlxuICAgICkgOiAoXG4gICAgICA8PlxuICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgIHtwYWdlU2l6ZSAqIHBhZ2VJbmRleCArIDF9LXtwYWdlU2l6ZSAqIHBhZ2VJbmRleCArIHBhZ2VTaXplfVxuICAgICAgICA8L3N0cm9uZz57XCIgXCJ9XG4gICAgICAgIG9mIHt0b3RhbEl0ZW1Db3VudH1cbiAgICAgIDwvPlxuICAgICk7XG5cblxuICBjb25zdCBzb3J0aW5nID0ge1xuICAgIHNvcnQ6IHtcbiAgICAgIGZpZWxkOiBzb3J0RmllbGQsXG4gICAgICBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb25cbiAgICB9XG4gIH07XG5cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNTdWNjZXNzICYmXG4gICAgICAgIDw+XG4gICAgICAgICAgPEV1aVRleHQgc2l6ZT1cInhzXCI+XG4gICAgICAgICAgICBTaG93aW5nIHtyZXN1bHRzQ291bnR9IDxzdHJvbmc+T250b2xvZ2llczwvc3Ryb25nPlxuICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cbiAgICAgICAgICA8RXVpSG9yaXpvbnRhbFJ1bGUgbWFyZ2luPVwibm9uZVwiIHN0eWxlPXt7IGhlaWdodDogMiB9fSAvPlxuXG4gICAgICAgICAgPEV1aUJhc2ljVGFibGVcbiAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICBpdGVtcz17cGFnZU9mSXRlbXN9XG4gICAgICAgICAgICBvbkNoYW5nZT17b25UYWJsZUNoYW5nZX1cbiAgICAgICAgICAgIHBhZ2luYXRpb249e3BhZ2luYXRpb259XG4gICAgICAgICAgICBzb3J0aW5nPXtzb3J0aW5nfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvPlxuICAgICAgfVxuICAgICAge2lzTG9hZGluZyAmJlxuICAgICAgICA8RXVpQmFzaWNUYWJsZVxuICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgaXRlbXM9e3BhZ2VPZkl0ZW1zfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvblRhYmxlQ2hhbmdlfVxuICAgICAgICAgIHBhZ2luYXRpb249e3BhZ2luYXRpb259XG4gICAgICAgICAgc29ydGluZz17c29ydGluZ31cbiAgICAgICAgICBsb2FkaW5nXG4gICAgICAgIC8+XG5cbiAgICAgIH1cbiAgICAgIHtpc0Vycm9yICYmXG4gICAgICAgIDxFdWlCYXNpY1RhYmxlXG4gICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICBpdGVtcz17cGFnZU9mSXRlbXN9XG4gICAgICAgICAgb25DaGFuZ2U9e29uVGFibGVDaGFuZ2V9XG4gICAgICAgICAgcGFnaW5hdGlvbj17cGFnaW5hdGlvbn1cbiAgICAgICAgICBzb3J0aW5nPXtzb3J0aW5nfVxuICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXtnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwicmVzb3VyY2VzXCIpfVxuICAgICAgICAgICovXG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlcyhwcm9wczogUmVzb3VyY2VzV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFJlc291cmNlc1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkUmVzb3VyY2VzV2lkZ2V0KHByb3BzOiBSZXNvdXJjZXNXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxSZXNvdXJjZXNXaWRnZXRcbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIGluaXRpYWxFbnRyaWVzUGVyUGFnZT17cHJvcHMuaW5pdGlhbEVudHJpZXNQZXJQYWdlfVxuICAgICAgICAgICAgICBwYWdlU2l6ZU9wdGlvbnM9e3Byb3BzLnBhZ2VTaXplT3B0aW9uc31cbiAgICAgICAgICAgICAgaW5pdGlhbFNvcnRGaWVsZD17cHJvcHMuaW5pdGlhbFNvcnRGaWVsZH1cbiAgICAgICAgICAgICAgaW5pdGlhbFNvcnREaXI9e3Byb3BzLmluaXRpYWxTb3J0RGlyfVxuICAgICAgICAgICAgICB0YXJnZXRMaW5rPXtwcm9wcy50YXJnZXRMaW5rfVxuICAgICAgICAgICAgICBhY3Rpb25zPXtwcm9wcy5hY3Rpb25zfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IFJlc291cmNlc1dpZGdldCwgY3JlYXRlUmVzb3VyY2VzIH07XG4iLCAiaW1wb3J0IHsgRXVpQ29tYm9Cb3gsIEV1aVByb3ZpZGVyLCBFdWlTdWdnZXN0LCBFdWlTdWdnZXN0aW9uUHJvcHMgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgU2VhcmNoQmFyV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hPcHRpb25PcHRpb24gfSBmcm9tIFwiQGVsYXN0aWMvZXVpL3NyYy9jb21wb25lbnRzL2NvbWJvX2JveC90eXBlc1wiO1xuXG5mdW5jdGlvbiBTZWFyY2hCYXJXaWRnZXQocHJvcHM6IFNlYXJjaEJhcldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBhcGksXG4gICAgcXVlcnksXG4gICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgLyoqXG4gICAqIHN1Z2dlc3Rpb25zXG4gICAqL1xuICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+Pj4oKTtcblxuICAvKipcbiAgICogc2VsZWN0ZWQgc3VnZ2VzdGlvbiAob24gY2xpY2spXG4gICAqL1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZF0gPSB1c2VTdGF0ZTxBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+Pj4oW10pO1xuXG4gIC8qKlxuICAgKiBjdXJyZW50IHNlYXJjaCB2YWx1ZVxuICAgKi9cbiAgY29uc3QgW3NlYXJjaFZhbHVlLCBzZXRTZWFyY2hWYWx1ZV0gPSB1c2VTdGF0ZTxzdHJpbmc+KHF1ZXJ5KTtcblxuICBjb25zdCBvbkNoYW5nZSA9IChzZWxlY3RlZE9wdGlvbjogQXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4pID0+IHtcbiAgICBzZXRTZWxlY3RlZChzZWxlY3RlZE9wdGlvbik7XG4gIH07XG5cbiAgY29uc3Qgb25DcmVhdGVPcHRpb24gPSAoc2VhcmNoVmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKCFub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdPcHRpb246IEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+ID0gW3tcbiAgICAgIGxhYmVsOiBzZWFyY2hWYWx1ZVxuICAgIH1dO1xuXG4gICAgc2V0U2VsZWN0ZWQobmV3T3B0aW9uKTtcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBmZXRjaGVzIHN1Z2dlc3Rpb25zIHdoZW4gc2VhcmNoVmFsdWUgY2hhbmdlc1xuICAgKi9cbiAgY29uc3Qge1xuICAgIGlzTG9hZGluZ1xuICB9ID0gdXNlUXVlcnkoXG4gICAgW1xuICAgICAgXCJzdWdnZXN0aW9uc1wiLFxuICAgICAgc2VhcmNoVmFsdWVcbiAgICBdLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2VhcmNoVmFsdWUudHJpbSgpKSB7XG4gICAgICAgIHJldHVybjsgLy8gRXhpdCBlYXJseSBpZiBzZWFyY2hWYWx1ZSBpcyBlbXB0eVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9sc0FwaS5zdWdnZXN0KFxuICAgICAgICB7XG4gICAgICAgICAgcXVlcnk6IHNlYXJjaFZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBwcm9wcy5wYXJhbWV0ZXJcbiAgICAgICkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3BvbnNlLmRvY3MpIHtcbiAgICAgICAgICBzZXRPcHRpb25zKHJlc3BvbnNlLnJlc3BvbnNlLmRvY3MubWFwKChzdWdnZXN0aW9uOiBhbnkpID0+IChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6IHN1Z2dlc3Rpb24uYXV0b3N1Z2dlc3QsXG4gICAgICAgICAgICAgIHR5cGU6IHsgY29sb3I6IFwidGludDFcIiwgaWNvblR5cGU6IFwiXCIgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICApO1xuXG4gIC8qKlxuICAgKiBPbmNlIHRoZSBzZWxlY3RlZCBvcHRpb24gY2hhbmdlcywgcGFzcyB0aGUgZXZlbnQgYnkgaW52b2tpbmcgdGhlIHBhc3NlZCBmdW5jdGlvbi5cbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KFxuICAgICAgc2VsZWN0ZWRPcHRpb25zLm1hcCgoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYWJlbDogc2VsZWN0ZWRPcHRpb24ubGFiZWxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW3NlbGVjdGVkT3B0aW9uc10pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxFdWlDb21ib0JveFxuICAgICAgICBpZD17XCJzdWdnZXN0XCJ9XG4gICAgICAgIGlzQ2xlYXJhYmxlXG4gICAgICAgIGFyaWEtbGFiZWw9XCJzZWFyY2hCYXJcIlxuICAgICAgICBmdWxsV2lkdGg9e3RydWV9XG4gICAgICAgIGFzeW5jPXt0cnVlfVxuICAgICAgICBwbGFjZWhvbGRlcj17XCJTZWFyY2hcIn1cbiAgICAgICAgYXV0b0ZvY3VzXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbj17dHJ1ZX1cbiAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucz17c2VsZWN0ZWRPcHRpb25zfVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIG9uQ3JlYXRlT3B0aW9uPXtvbkNyZWF0ZU9wdGlvbn1cbiAgICAgICAgb25TZWFyY2hDaGFuZ2U9eyhpdGVtKSA9PiB7XG4gICAgICAgICAgc2V0U2VhcmNoVmFsdWUoaXRlbSk7XG4gICAgICAgIH19XG4gICAgICAvPlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTZWFyY2hCYXIocHJvcHM6IFNlYXJjaEJhcldpZGdldFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkU2VhcmNoQmFyV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRTZWFyY2hCYXJXaWRnZXQocHJvcHM6IFNlYXJjaEJhcldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPFNlYXJjaEJhcldpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIHF1ZXJ5PXtwcm9wcy5xdWVyeX1cbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQ9e3Byb3BzLnNlbGVjdGlvbkNoYW5nZWRFdmVudH1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBTZWFyY2hCYXJXaWRnZXQsIGNyZWF0ZVNlYXJjaEJhciB9O1xuIiwgImltcG9ydCB7XG4gIEV1aUJ1dHRvbkVtcHR5LFxuICBFdWlGbGV4R3JvdXAsXG4gIEV1aUZsZXhJdGVtLFxuICBFdWlGb3JtUm93LFxuICBFdWlIb3Jpem9udGFsUnVsZSxcbiAgRXVpTG9hZGluZ1NwaW5uZXIsXG4gIEV1aVBhbmVsLCBFdWlQcm92aWRlcixcbiAgRXVpU2VsZWN0YWJsZSxcbiAgRXVpU2VsZWN0YWJsZU9wdGlvbixcbiAgRXVpU3BhY2VyLFxuICBFdWlTd2l0Y2gsXG4gIEV1aVRhYmxlUGFnaW5hdGlvbixcbiAgRXVpVGV4dFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgTWV0YWRhdGFDb21wYWN0IH0gZnJvbSBcIi4vTWV0YWRhdGFDb21wYWN0XCI7XG5pbXBvcnQgeyBTZWFyY2hSZXN1bHRzTGlzdFdpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlV2lkZ2V0IH0gZnJvbSBcIi4uL0F1dG9jb21wbGV0ZVdpZGdldFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IFNlYXJjaEJhcldpZGdldCB9IGZyb20gXCIuLi9TZWFyY2hCYXJXaWRnZXRcIjtcblxuY29uc3QgREVGQVVMVF9JTklUSUFMX0lURU1TX1BFUl9QQUdFID0gMTA7XG5jb25zdCBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TID0gWzEwLCAyNSwgNTAsIDEwMF07XG5cbmZ1bmN0aW9uIFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0KHByb3BzOiBTZWFyY2hSZXN1bHRzTGlzdFdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBhcGksXG4gICAgcXVlcnksXG4gICAgcGFyYW1ldGVyLFxuICAgIGluaXRpYWxJdGVtc1BlclBhZ2UgPSBERUZBVUxUX0lOSVRJQUxfSVRFTVNfUEVSX1BBR0UsXG4gICAgaXRlbXNQZXJQYWdlT3B0aW9ucyA9IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMsXG4gICAgdGFyZ2V0TGluayxcbiAgICBwcmVzZWxlY3RlZCxcbiAgICB1c2VMZWdhY3kgPSB0cnVlLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3QgW3NlYXJjaFZhbHVlLCBzZXRTZWFyY2hWYWx1ZV0gPSB1c2VTdGF0ZShxdWVyeSk7XG4gIGNvbnN0IFthY3RpdmVQYWdlLCBzZXRBY3RpdmVQYWdlXSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbcGFnZUNvdW50LCBzZXRQYWdlQ291bnRdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtpdGVtc1BlclBhZ2UsIHNldEl0ZW1zUGVyUGFnZV0gPSB1c2VTdGF0ZShpbml0aWFsSXRlbXNQZXJQYWdlKTtcbiAgY29uc3QgW3RvdGFsSXRlbXMsIHNldFRvdGFsSXRlbXNdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtleGFjdE1hdGNoLCBzZXRFeGFjdE1hdGNoXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nob3dPYnNvbGV0ZVRlcm1zLCBzZXRTaG93T2Jzb2xldGVUZXJtc10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtmaWx0ZXJCeVR5cGVPcHRpb25zLCBzZXRGaWx0ZXJCeVR5cGVPcHRpb25zXSA9IHVzZVN0YXRlPEV1aVNlbGVjdGFibGVPcHRpb25bXT4oW10pO1xuICBjb25zdCBbZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsIHNldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zXSA9IHVzZVN0YXRlPEV1aVNlbGVjdGFibGVPcHRpb25bXT4oW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U2VhcmNoVmFsdWUocXVlcnkpO1xuICB9LCBbcXVlcnldKTtcblxuICBmdW5jdGlvbiB1cGRhdGVGaWx0ZXJPcHRpb25zKGN1cnJlbnRPcHRpb25zOiBFdWlTZWxlY3RhYmxlT3B0aW9uW10sIG9wdGlvbkNvdW50czogYW55W10sIHNldE9wdGlvbnM6IEZ1bmN0aW9uLCByZW5kZXI/OiAodmFsdWU6IHN0cmluZykgPT4gc3RyaW5nKSB7XG4gICAgaWYgKGN1cnJlbnRPcHRpb25zLmxlbmd0aCA9PSAwKSB7XG4gICAgICBzZXRPcHRpb25zKG9wdGlvbkNvdW50cy5yZWR1Y2UoKGFjY3VtdWxhdG9yOiBhbnlbXSwgY3VycmVudFZhbHVlOiBzdHJpbmcsIGN1cnJlbnRJbmRleDogbnVtYmVyLCBhcnJheTogYW55W10pID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAlIDIgPT09IDApIHtcbiAgICAgICAgICBhY2N1bXVsYXRvci5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiByZW5kZXIgPyByZW5kZXIoY3VycmVudFZhbHVlKSA6IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIGtleTogY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgYXBwZW5kOiBcIihcIiArIGFycmF5W2N1cnJlbnRJbmRleCArIDFdICsgXCIpXCIsXG4gICAgICAgICAgICBkaXNhYmxlZDogYXJyYXlbY3VycmVudEluZGV4ICsgMV0gPT0gMCxcbiAgICAgICAgICAgIGRhdGE6IHsgdG90YWxDb3VudDogYXJyYXlbY3VycmVudEluZGV4ICsgMV0gfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICAgIH0sIFtdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld09wdGlvbnM6IEV1aVNlbGVjdGFibGVPcHRpb25bXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50T3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBuZXdPcHRpb25zLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgY3VycmVudE9wdGlvbnNbaV0pKTsgLy8gdXNpbmcgT2JqZWN0LmFzc2lnbiB0byBwYXNzIGJ5IHZhbHVlLCBub3QgYnkgcmVmZXJlbmNlXG4gICAgICB9XG5cbiAgICAgIG9wdGlvbkNvdW50cy5mb3JFYWNoKChjdXJyZW50VmFsdWU6IHN0cmluZywgY3VycmVudEluZGV4OiBudW1iZXIsIGFycmF5OiBhbnlbXSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudEluZGV4ICUgMiA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IG5ld09wdGlvbnMuZmluZCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5ID09IGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgb3B0aW9uLmFwcGVuZCA9IFwiKFwiICsgYXJyYXlbY3VycmVudEluZGV4ICsgMV07XG4gICAgICAgICAgICBpZiAob3B0aW9uLmRhdGEgJiYgYXJyYXlbY3VycmVudEluZGV4ICsgMV0gPCBvcHRpb24uZGF0YS50b3RhbENvdW50KSB7XG4gICAgICAgICAgICAgIG9wdGlvbi5hcHBlbmQgKz0gXCIvXCIgKyBvcHRpb24uZGF0YS50b3RhbENvdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9uLmFwcGVuZCArPSBcIilcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc2V0T3B0aW9ucyhuZXdPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBmaWx0ZXJTZWxlY3RlZE9wdGlvbnMgPSAob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24uY2hlY2tlZCA9PT0gXCJvblwiO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBzZWFyY2hSZXN1bHRzLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnkoXG4gICAgW1xuICAgICAgXCJzZWFyY2hSZXN1bHRzXCIsXG4gICAgICBhcGksXG4gICAgICBzZWFyY2hWYWx1ZSxcbiAgICAgIGV4YWN0TWF0Y2gsXG4gICAgICBzaG93T2Jzb2xldGVUZXJtcyxcbiAgICAgIGFjdGl2ZVBhZ2UsXG4gICAgICBpdGVtc1BlclBhZ2UsXG4gICAgICBmaWx0ZXJCeVR5cGVPcHRpb25zLmZpbHRlcihmaWx0ZXJTZWxlY3RlZE9wdGlvbnMpLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KSxcbiAgICAgIGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLmZpbHRlcihmaWx0ZXJTZWxlY3RlZE9wdGlvbnMpLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KSxcbiAgICAgIHBhcmFtZXRlclxuICAgIF0sXG4gICAgYXN5bmMgKHsgc2lnbmFsIH0pID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuc2VhcmNoKFxuICAgICAgICB7XG4gICAgICAgICAgcXVlcnk6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgIGV4YWN0TWF0Y2g6IGV4YWN0TWF0Y2gsXG4gICAgICAgICAgc2hvd09ic29sZXRlVGVybXM6IHNob3dPYnNvbGV0ZVRlcm1zLFxuICAgICAgICAgIHR5cGVzOiBmaWx0ZXJCeVR5cGVPcHRpb25zLmZpbHRlcihmaWx0ZXJTZWxlY3RlZE9wdGlvbnMpLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KS5qb2luKFwiLFwiKSxcbiAgICAgICAgICBvbnRvbG9neTogZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucykubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkpLmpvaW4oXCIsXCIpLFxuICAgICAgICAgIGdyb3VwQnlJcmk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhZ2U6IGFjdGl2ZVBhZ2UudG9TdHJpbmcoKSxcbiAgICAgICAgICBzaXplOiBpdGVtc1BlclBhZ2UudG9TdHJpbmcoKVxuICAgICAgICB9LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHByb3BzLnBhcmFtZXRlcixcbiAgICAgICAgc2lnbmFsXG4gICAgICApLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZVtcInJlc3BvbnNlXCJdICYmIHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJkb2NzXCJdICE9IG51bGwgJiYgcmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcIm51bUZvdW5kXCJdICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl0gJiYgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl0pIHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcInR5cGVcIl0pIHtcbiAgICAgICAgICAgICAgdXBkYXRlRmlsdGVyT3B0aW9ucyhcbiAgICAgICAgICAgICAgICBmaWx0ZXJCeVR5cGVPcHRpb25zLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1widHlwZVwiXSxcbiAgICAgICAgICAgICAgICBzZXRGaWx0ZXJCeVR5cGVPcHRpb25zLFxuICAgICAgICAgICAgICAgIChjdXJyZW50VmFsdWU6IHN0cmluZykgPT4gYCR7Y3VycmVudFZhbHVlWzBdLnRvVXBwZXJDYXNlKCl9JHtjdXJyZW50VmFsdWUuc2xpY2UoMSl9YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neV9uYW1lXCJdKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlRmlsdGVyT3B0aW9ucyhcbiAgICAgICAgICAgICAgICAgIGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neV9uYW1lXCJdLFxuICAgICAgICAgICAgICAgICAgc2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAoY3VycmVudFZhbHVlOiBzdHJpbmcpID0+IGN1cnJlbnRWYWx1ZS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1wib250b2xvZ3lJZFwiXSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZUZpbHRlck9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1wib250b2xvZ3lJZFwiXSxcbiAgICAgICAgICAgICAgICAgIHNldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnRWYWx1ZTogc3RyaW5nKSA9PiBjdXJyZW50VmFsdWUudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXRUb3RhbEl0ZW1zKHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJudW1Gb3VuZFwiXSk7XG4gICAgICAgICAgY29uc3QgbmV3UGFnZUNvdW50ID0gTWF0aC5jZWlsKHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJudW1Gb3VuZFwiXSAvIGl0ZW1zUGVyUGFnZSk7XG4gICAgICAgICAgc2V0UGFnZUNvdW50KG5ld1BhZ2VDb3VudCk7XG4gICAgICAgICAgaWYgKGFjdGl2ZVBhZ2UgPj0gbmV3UGFnZUNvdW50KSB7XG4gICAgICAgICAgICBzZXRBY3RpdmVQYWdlKDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXNwb25zZS5yZXNwb25zZS5kb2NzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgQVBJIHJlc3BvbnNlXCIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHtcbiAgICAgIGtlZXBQcmV2aW91c0RhdGE6IHRydWVcbiAgICB9IC8vIFNlZTogaHR0cHM6Ly9yZWFjdC1xdWVyeS12My50YW5zdGFjay5jb20vZ3VpZGVzL3BhZ2luYXRlZC1xdWVyaWVzXG4gICk7XG5cbiAgZnVuY3Rpb24gb25DaGFuZ2VJdGVtc1BlclBhZ2UobmV3SXRlbXNQZXJQYWdlOiBudW1iZXIpIHtcbiAgICBzZXRBY3RpdmVQYWdlKE1hdGguZmxvb3IoKGFjdGl2ZVBhZ2UgKiBpdGVtc1BlclBhZ2UgKyAxKSAvIG5ld0l0ZW1zUGVyUGFnZSkpO1xuICAgIHNldEl0ZW1zUGVyUGFnZShuZXdJdGVtc1BlclBhZ2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlRXhhY3RNYXRjaCgpIHtcbiAgICBzZXRFeGFjdE1hdGNoKCFleGFjdE1hdGNoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVNob3dPYnNvbGV0ZVRlcm1zKCkge1xuICAgIHNldFNob3dPYnNvbGV0ZVRlcm1zKCFzaG93T2Jzb2xldGVUZXJtcyk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckZpbHRlcihjdXJyZW50T3B0aW9uczogRXVpU2VsZWN0YWJsZU9wdGlvbltdLCBzZXRPcHRpb25zOiBGdW5jdGlvbikge1xuICAgIGNvbnN0IG5ld09wdGlvbnMgPSBbLi4uY3VycmVudE9wdGlvbnNdO1xuICAgIHNldE9wdGlvbnMobmV3T3B0aW9ucy5tYXAoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gKHsgLi4ub3B0aW9uLCBjaGVja2VkOiB1bmRlZmluZWQgfSkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyQWxsRmlsdGVycygpIHtcbiAgICBjbGVhckZpbHRlcihmaWx0ZXJCeVR5cGVPcHRpb25zLCBzZXRGaWx0ZXJCeVR5cGVPcHRpb25zKTtcbiAgICBjbGVhckZpbHRlcihmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucywgc2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnMpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtX3RvX3NlYXJjaFZhbHVlKHNlbGVjdGVkT3B0aW9uOiB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBpcmk/OiBzdHJpbmc7XG4gICAgb250b2xvZ3lfbmFtZT86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nXG4gIH1bXSkge1xuICAgIHNldFNlYXJjaFZhbHVlKHNlbGVjdGVkT3B0aW9uWzBdID8gc2VsZWN0ZWRPcHRpb25bMF0ubGFiZWwgOiBcIlwiKTtcbiAgfVxuXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFNlYXJjaEJhcldpZGdldFxuICAgICAgICBhcGk9e2FwaX1cbiAgICAgICAgcXVlcnk9e1wiXCJ9XG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudD17KHNlbGVjdGVkT3B0aW9uKSA9PiB7XG4gICAgICAgICAgdHJhbnNmb3JtX3RvX3NlYXJjaFZhbHVlKHNlbGVjdGVkT3B0aW9uKTtcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICA8RXVpU3BhY2VyIHNpemU9XCJ4bFwiIC8+XG4gICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cblxuICAgICAgPEV1aUZsZXhHcm91cD5cbiAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9ezN9IHN0eWxlPXt7IG1pbldpZHRoOiAyNTAgfX0+XG4gICAgICAgICAgPEV1aVBhbmVsPlxuICAgICAgICAgICAge2lzU3VjY2VzcyAmJlxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSB0eXBlXCI+XG4gICAgICAgICAgICAgICAgPEV1aVNlbGVjdGFibGVcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e2ZpbHRlckJ5VHlwZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0RmlsdGVyQnlUeXBlT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIGxpc3RQcm9wcz17eyBib3JkZXJlZDogdHJ1ZSB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHsobGlzdCkgPT4gbGlzdH1cbiAgICAgICAgICAgICAgICA8L0V1aVNlbGVjdGFibGU+XG4gICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHtpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgdHlwZVwiPlxuICAgICAgICAgICAgICAgIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+XG4gICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHtpc0Vycm9yICYmXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IHR5cGVcIj5cbiAgICAgICAgICAgICAgICA8RXVpU2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17W119XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0RmlsdGVyQnlUeXBlT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIGxpc3RQcm9wcz17eyBib3JkZXJlZDogdHJ1ZSB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHsobGlzdCkgPT4gbGlzdH1cbiAgICAgICAgICAgICAgICA8L0V1aVNlbGVjdGFibGU+XG4gICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAge2lzU3VjY2VzcyAmJlxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSBvbnRvbG9neVwiPlxuICAgICAgICAgICAgICAgIDxFdWlTZWxlY3RhYmxlXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtmaWx0ZXJCeU9udG9sb2d5T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIGxpc3RQcm9wcz17eyBib3JkZXJlZDogdHJ1ZSB9fVxuICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHsobGlzdCwgc2VhcmNoKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAge3NlYXJjaH1cbiAgICAgICAgICAgICAgICAgICAgICB7bGlzdH1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRXVpU2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2lzTG9hZGluZyAmJlxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSBvbnRvbG9neVwiPlxuICAgICAgICAgICAgICAgIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+XG4gICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHtpc0Vycm9yICYmXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IG9udG9sb2d5XCI+XG4gICAgICAgICAgICAgICAgPEV1aVNlbGVjdGFibGVcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e1tdfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgbGlzdFByb3BzPXt7IGJvcmRlcmVkOiB0cnVlIH19XG4gICAgICAgICAgICAgICAgICBzZWFyY2hhYmxlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgeyhsaXN0LCBzZWFyY2gpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICB7c2VhcmNofVxuICAgICAgICAgICAgICAgICAgICAgIHtsaXN0fVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDxFdWlCdXR0b25FbXB0eVxuICAgICAgICAgICAgICBvbkNsaWNrPXtjbGVhckFsbEZpbHRlcnN9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENsZWFyIGFsbCBmaWx0ZXJzXG4gICAgICAgICAgICA8L0V1aUJ1dHRvbkVtcHR5PlxuICAgICAgICAgIDwvRXVpUGFuZWw+XG4gICAgICAgIDwvRXVpRmxleEl0ZW0+XG5cbiAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9ezd9PlxuICAgICAgICAgIDxFdWlQYW5lbCBjb2xvcj1cInRyYW5zcGFyZW50XCIgZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgPEV1aUZsZXhHcm91cD5cbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfT5cbiAgICAgICAgICAgICAgICA8RXVpU3dpdGNoIGxhYmVsPVwiRXhhY3QgbWF0Y2hcIiBjaGVja2VkPXtleGFjdE1hdGNofSBvbkNoYW5nZT17dG9nZ2xlRXhhY3RNYXRjaH0gLz5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxFdWlTd2l0Y2ggbGFiZWw9XCJTaG93IG9ubHkgb2Jzb2xldGUgdGVybXNcIiBjaGVja2VkPXtzaG93T2Jzb2xldGVUZXJtc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0b2dnbGVTaG93T2Jzb2xldGVUZXJtc30gLz5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJtXCIgLz5cblxuICAgICAgICAgICAgPEV1aVRleHQgc2l6ZT1cInhzXCIgc3R5bGU9e3sgcGFkZGluZzogXCIwIDhweFwiIH19PlxuICAgICAgICAgICAgICBTaG93aW5nIHtNYXRoLm1pbihhY3RpdmVQYWdlICogaXRlbXNQZXJQYWdlICsgMSwgdG90YWxJdGVtcyl9IHRvIHtNYXRoLm1pbigoYWN0aXZlUGFnZSArIDEpICogaXRlbXNQZXJQYWdlLCB0b3RhbEl0ZW1zKX0gb2Yge3RvdGFsSXRlbXN9IHJlc3VsdHNcbiAgICAgICAgICAgIDwvRXVpVGV4dD5cblxuICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG5cbiAgICAgICAgICAgIDxFdWlIb3Jpem9udGFsUnVsZSBtYXJnaW49XCJub25lXCIgc3R5bGU9e3sgaGVpZ2h0OiAyIH19IC8+XG5cbiAgICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIiAvPlxuXG4gICAgICAgICAgICA8RXVpVGFibGVQYWdpbmF0aW9uXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2ggcmVzdWx0IHBhZ2luYXRpb25cIlxuICAgICAgICAgICAgICBwYWdlQ291bnQ9e3BhZ2VDb3VudH1cbiAgICAgICAgICAgICAgYWN0aXZlUGFnZT17YWN0aXZlUGFnZX1cbiAgICAgICAgICAgICAgb25DaGFuZ2VQYWdlPXtzZXRBY3RpdmVQYWdlfVxuICAgICAgICAgICAgICBpdGVtc1BlclBhZ2U9e2l0ZW1zUGVyUGFnZX1cbiAgICAgICAgICAgICAgb25DaGFuZ2VJdGVtc1BlclBhZ2U9e29uQ2hhbmdlSXRlbXNQZXJQYWdlfVxuICAgICAgICAgICAgICBpdGVtc1BlclBhZ2VPcHRpb25zPXtpdGVtc1BlclBhZ2VPcHRpb25zfVxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG5cbiAgICAgICAgICAgIHtzZWFyY2hSZXN1bHRzICYmIHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQ6IGFueSkgPT4gKFxuICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtyZXN1bHQuaWR9PlxuICAgICAgICAgICAgICAgIDxNZXRhZGF0YUNvbXBhY3QgYXBpPXthcGl9IHJlc3VsdD17cmVzdWx0fSB0YXJnZXRMaW5rPXt0YXJnZXRMaW5rfSAvPlxuICAgICAgICAgICAgICAgIDxFdWlTcGFjZXIgLz5cbiAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvRXVpUGFuZWw+XG4gICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QocHJvcHM6IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogYW55LCBjYWxsYmFjaz86ICgpID0+IHZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRTZWFyY2hSZXN1bHRzTGlzdFdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQocHJvcHM6IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8U2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBxdWVyeT17cHJvcHMucXVlcnl9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgaW5pdGlhbEl0ZW1zUGVyUGFnZT17cHJvcHMuaW5pdGlhbEl0ZW1zUGVyUGFnZX1cbiAgICAgICAgICBpdGVtc1BlclBhZ2VPcHRpb25zPXtwcm9wcy5pdGVtc1BlclBhZ2VPcHRpb25zfVxuICAgICAgICAgIHRhcmdldExpbms9e3Byb3BzLnRhcmdldExpbmt9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQsIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0IH07XG4iLCAiaW1wb3J0IHsgRXVpQ2FyZCwgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSwgRXVpU3BhY2VyLCBFdWlUaXRsZSB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWJXaWRnZXQsIERlc2NyaXB0aW9uV2lkZ2V0LCBJcmlXaWRnZXQgfSBmcm9tIFwiLi4vTWV0YWRhdGFXaWRnZXRcIjtcbmltcG9ydCB7TWV0YWRhdGFDb21wYWN0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7cGx1cmFsaXplVHlwZX0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5cbmZ1bmN0aW9uIE1ldGFkYXRhQ29tcGFjdChwcm9wczogTWV0YWRhdGFDb21wYWN0UHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICB0YXJnZXRMaW5rLFxuICAgICAgICAuLi5yZXN0XG4gICAgfSA9IHByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aUNhcmRcbiAgICAgICAgICAgIHRleHRBbGlnbj1cImxlZnRcIlxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICBocmVmPXt0YXJnZXRMaW5rID9cbiAgICAgICAgICAgICAgICAocmVzdWx0LnR5cGUgIT0gXCJvbnRvbG9neVwiID9cbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TGluayArIFwib250b2xvZ2llcy9cIiArIHJlc3VsdC5vbnRvbG9neV9uYW1lICsgXCIvXCIgKyBwbHVyYWxpemVUeXBlKHJlc3VsdC50eXBlLCB0cnVlKSArIFwiP2lyaT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChyZXN1bHQuaXJpKVxuICAgICAgICAgICAgICAgICAgICA6IHRhcmdldExpbmsgKyBcIm9udG9sb2dpZXMvXCIgKyByZXN1bHQub250b2xvZ3lfbmFtZSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEV1aVRpdGxlPjxoMj57cmVzdWx0LmxhYmVsfTwvaDI+PC9FdWlUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Jlc3VsdC50eXBlICE9IFwib250b2xvZ3lcIiAmJiA8QnJlYWRjcnVtYldpZGdldCBhcGk9e2FwaX0gaXJpPXtyZXN1bHQuaXJpfSBlbnRpdHlUeXBlPXtyZXN1bHQudHlwZX0gb250b2xvZ3lJZD17cmVzdWx0Lm9udG9sb2d5X25hbWV9Lz59XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICAgIHtyZXN1bHQudHlwZSAhPSBcIm9udG9sb2d5XCIgPyA8SXJpV2lkZ2V0IGlyaT17cmVzdWx0LmlyaX0vPiA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIi8+XG4gICAgICAgICAgICA8RGVzY3JpcHRpb25XaWRnZXQgYXBpPXthcGl9IG9udG9sb2d5SWQ9e3Jlc3VsdC5vbnRvbG9neV9uYW1lfSBpcmk9e3Jlc3VsdC5pcml9IHRoaW5nVHlwZT17cmVzdWx0LnR5cGV9Lz5cbiAgICAgICAgPC9FdWlDYXJkPlxuXG4gICAgKTtcbn1cblxuZXhwb3J0IHsgTWV0YWRhdGFDb21wYWN0IH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gJy4uLy4uLy4uLy4uL2FwaS9PbHNBcGknXG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSAncmVhY3QtcXVlcnknXG5pbXBvcnQge2dldEVycm9yTWVzc2FnZVRvRGlzcGxheSwgc2luZ3VsYXJpemVUeXBlfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RW50aXR5T250b0xpc3RXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgRW50aXR5T250b0xpc3RQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9FbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uL3N0eWxlL3NlbWxvb2twLXN0eWxlcy5jc3NcIjtcbmltcG9ydCB7RW50aXR5VHlwZU5hbWV9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuXG5mdW5jdGlvbiBFbnRpdHlPbnRvTGlzdFdpZGdldChwcm9wczogRW50aXR5T250b0xpc3RXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHVzZUxlZ2FjeSB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PHtvbnRvTGlzdDogc3RyaW5nW10sIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLCBsYWJlbDogc3RyaW5nfT4oXG4gICAgW1wiZW50aXR5T250b0xpc3RcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCBvbnRvbGlzdCA6IHN0cmluZ1tdO1xuICAgICAgICBsZXQgcmVhbEVudGl0eVR5cGUgOiBFbnRpdHlUeXBlTmFtZTtcbiAgICAgICAgbGV0IGxhYmVsIDogc3RyaW5nO1xuICAgICAgICBpZih1c2VMZWdhY3kpIHtcbiAgICAgICAgICAgIGNvbnN0IGVtYmVkZGVkID0gKGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlSZXNwb25zZShpcmksIGVudGl0eVR5cGUsIHVuZGVmaW5lZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpKVtcIl9lbWJlZGRlZFwiXTtcblxuICAgICAgICAgICAgLy8gb2J0YWluIGRlZmluZWRCeSB0byBmaWx0ZXIgdGhlc2Ugb3V0IG9mIG9udG9saXN0XG4gICAgICAgICAgICBjb25zdCBkZWZpbmVkQnkgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdKVxuICAgICAgICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3kgOiBhbnkpID0+IGVudGl0eUluT250b2xvZ3lbXCJvbnRvbG9neV9uYW1lXCJdKTtcblxuICAgICAgICAgICAgb250b2xpc3QgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dLm1hcCgoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pLmZpbHRlcigoZWxlbTogYW55KSA9PiAhZGVmaW5lZEJ5LmluY2x1ZGVzKGVsZW0pKTtcbiAgICAgICAgICAgIHJlYWxFbnRpdHlUeXBlID0gZW50aXR5VHlwZSB8fCBzaW5ndWxhcml6ZVR5cGUoT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdKSBhcyBFbnRpdHlUeXBlTmFtZTtcbiAgICAgICAgICAgIGxhYmVsID0gZW1iZWRkZWRbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXVswXVtcImxhYmVsXCJdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gYXdhaXQgb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgICAgICAgIG9udG9saXN0ID0gZW50aXR5LmdldEFwcGVhcnNJbigpLmZpbHRlcigoZWxlbTogYW55KSA9PiAhZW50aXR5LmdldERlZmluZWRCeSgpLmluY2x1ZGVzKGVsZW0pKTtcbiAgICAgICAgICAgIHJlYWxFbnRpdHlUeXBlID0gZW50aXR5VHlwZSB8fCBlbnRpdHkuZ2V0VHlwZSgpIGFzIEVudGl0eVR5cGVOYW1lO1xuICAgICAgICAgICAgbGFiZWwgPSBlbnRpdHkuZ2V0TGFiZWwoKSB8fCBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIG9udG9saXN0ID0gb250b2xpc3QuZmlsdGVyKChvbnRvIDogc3RyaW5nKSA9PiBvbnRvICE9IG9udG9sb2d5SWQpLnNvcnQoKTtcbiAgICAgICAgcmV0dXJuIHtvbnRvTGlzdDogb250b2xpc3QsIGVudGl0eVR5cGU6IHJlYWxFbnRpdHlUeXBlLCBsYWJlbDogbGFiZWx9O1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uIG9udG9saXN0PXtkYXRhLm9udG9MaXN0fSBlbnRpdHlUeXBlPXtkYXRhLmVudGl0eVR5cGV9IGxhYmVsPXtkYXRhLmxhYmVsfSBpcmk9e2lyaX0gb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fSAvPn1cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIC8+fVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJvbnRvbG9neSBsaXN0XCIpfTwvRXVpVGV4dD59XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eU9udG9MaXN0KHByb3BzOiBFbnRpdHlPbnRvTGlzdFdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEVudGl0eU9udG9MaXN0V2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRFbnRpdHlPbnRvTGlzdFdpZGdldChwcm9wczogRW50aXR5T250b0xpc3RXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8RW50aXR5T250b0xpc3RXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgRW50aXR5T250b0xpc3RXaWRnZXQsIGNyZWF0ZUVudGl0eU9udG9MaXN0IH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gJy4uLy4uLy4uLy4uL2FwaS9PbHNBcGknXG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSAncmVhY3QtcXVlcnknXG5pbXBvcnQge2dldEVycm9yTWVzc2FnZVRvRGlzcGxheSwgc2luZ3VsYXJpemVUeXBlfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RW50aXR5RGVmaW5lZEJ5V2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0VudGl0eURlZmluZWRCeVByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uL3N0eWxlL3NlbWxvb2twLXN0eWxlcy5jc3NcIjtcbmltcG9ydCB7RW50aXR5VHlwZU5hbWV9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuXG5mdW5jdGlvbiBFbnRpdHlEZWZpbmVkQnlXaWRnZXQocHJvcHM6IEVudGl0eURlZmluZWRCeVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8e29udG9MaXN0OiBzdHJpbmdbXSwgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIGxhYmVsOiBzdHJpbmd9PihcbiAgICBbXCJlbnRpdHlEZWZpbmVkQnlcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCBvbnRvbGlzdCA6IHN0cmluZ1tdO1xuICAgICAgICBsZXQgcmVhbEVudGl0eVR5cGUgOiBFbnRpdHlUeXBlTmFtZTtcbiAgICAgICAgbGV0IGxhYmVsIDogc3RyaW5nO1xuICAgICAgICBpZih1c2VMZWdhY3kpIHtcbiAgICAgICAgICAgIGNvbnN0IGVtYmVkZGVkID0gKGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlSZXNwb25zZShpcmksIGVudGl0eVR5cGUsIHVuZGVmaW5lZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpKVtcIl9lbWJlZGRlZFwiXTtcbiAgICAgICAgICAgIG9udG9saXN0ID0gZW1iZWRkZWRbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGVudGl0eUluT250b2xvZ3kgOiBhbnkpID0+IGVudGl0eUluT250b2xvZ3lbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSlcbiAgICAgICAgICAgICAgICAubWFwKChlbnRpdHlJbk9udG9sb2d5IDogYW55KSA9PiBlbnRpdHlJbk9udG9sb2d5W1wib250b2xvZ3lfbmFtZVwiXSk7XG4gICAgICAgICAgICByZWFsRW50aXR5VHlwZSA9IGVudGl0eVR5cGUgfHwgc2luZ3VsYXJpemVUeXBlKE9iamVjdC5rZXlzKGVtYmVkZGVkKVswXSkgYXMgRW50aXR5VHlwZU5hbWU7XG4gICAgICAgICAgICBsYWJlbCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1bMF1bXCJsYWJlbFwiXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICAgICAgICBvbnRvbGlzdCA9IGVudGl0eS5nZXREZWZpbmVkQnkoKS5maWx0ZXIoKG9udG9sb2d5KSA9PiBvbnRvbG9neSAhPSBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpKTtcbiAgICAgICAgICAgIHJlYWxFbnRpdHlUeXBlID0gZW50aXR5VHlwZSB8fCBlbnRpdHkuZ2V0VHlwZSgpIGFzIEVudGl0eVR5cGVOYW1lO1xuICAgICAgICAgICAgbGFiZWwgPSBlbnRpdHkuZ2V0TGFiZWwoKSB8fCBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIG9udG9saXN0ID0gb250b2xpc3Quc29ydCgpO1xuICAgICAgICByZXR1cm4ge29udG9MaXN0OiBvbnRvbGlzdCwgZW50aXR5VHlwZTogcmVhbEVudGl0eVR5cGUsIGxhYmVsOiBsYWJlbH07XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJlxuICAgICAgICA8RW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uIG9udG9saXN0PXtkYXRhLm9udG9MaXN0fSBlbnRpdHlUeXBlPXtkYXRhLmVudGl0eVR5cGV9IGxhYmVsPXtkYXRhLmxhYmVsfSBpcmk9e2lyaX0gb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fSAvPn1cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIC8+fVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJvbnRvbG9neSBsaXN0XCIpfTwvRXVpVGV4dD59XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eURlZmluZWRCeShwcm9wczogRW50aXR5RGVmaW5lZEJ5V2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkRW50aXR5RGVmaW5lZEJ5V2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRFbnRpdHlEZWZpbmVkQnlXaWRnZXQocHJvcHM6IEVudGl0eURlZmluZWRCeVdpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxFbnRpdHlEZWZpbmVkQnlXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgRW50aXR5RGVmaW5lZEJ5V2lkZ2V0LCBjcmVhdGVFbnRpdHlEZWZpbmVkQnkgfTtcbiIsICJpbXBvcnQgUmVhY3QsIHtSZWFjdEVsZW1lbnR9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7RXVpQ2FyZCwgRXVpRmxleEl0ZW0sIEV1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtDbGFzcywgRW50aXR5LCBJbmRpdmlkdWFsLCBQcm9wZXJ0eSwgVGhpbmd9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge2dldENsYXNzRXhwcmVzc2lvbkpTWCwgZ2V0RW50aXR5TGlua0pTWCwgZ2V0UmVpZmllZEpTWCwgZ2V0U2VjdGlvbkxpc3RKU1h9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9TdHJ1Y3R1cmVSZW5kZXJpbmdcIjtcbmltcG9ydCB7aXNDbGFzcywgaXNJbmRpdmlkdWFsLCBpc1Byb3BlcnR5fSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi8uLi8uLi9tb2RlbC9SZWlmaWVkXCI7XG5pbXBvcnQge2FzQXJyYXksIGNhcGl0YWxpemUsIGdldEVudGl0eVR5cGVOYW1lLCByYW5kb21TdHJpbmd9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgREVGQVVMVF9IQVNfVElUTEUgPSB0cnVlO1xuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgdHlwZSBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGluZGl2aWR1YWxcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFR5cGVzU2VjdGlvbkpTWChpbmRpdmlkdWFsOiBJbmRpdmlkdWFsLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHR5cGVzID0gaW5kaXZpZHVhbC5nZXRSZGZUeXBlcygpLmZpbHRlcigoZWxlbTogc3RyaW5nKSA9PiBlbGVtICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmICFlbGVtLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpKTtcblxuICAgIGlmKGluZGl2aWR1YWwuZ2V0UmRmVHlwZXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPGI+VHlwZTwvYj5cbiAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHR5cGVzLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgPC9FdWlGbGV4SXRlbT4pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHNhbWUgYXMgc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBpbmRpdmlkdWFsXG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldEluZGl2aWR1YWxTYW1lQXNTZWN0aW9uSlNYKGluZGl2aWR1YWw6IEluZGl2aWR1YWwsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2FtZUFzID0gaW5kaXZpZHVhbC5nZXRTYW1lQXMoKTtcblxuICAgIGlmKHNhbWVBcy5sZW5ndGggPiAwKXtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5TYW1lIEFzPC9iPlxuICAgICAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHNhbWVBcywgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGRpZmZlcmVudCBmcm9tIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gaW5kaXZpZHVhbFxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRJbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb25KU1goaW5kaXZpZHVhbDogSW5kaXZpZHVhbCwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBkaWZmZXJlbnRGcm9tID0gaW5kaXZpZHVhbC5nZXREaWZmZXJlbnRGcm9tKCk7XG5cbiAgICBpZihkaWZmZXJlbnRGcm9tLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5EaWZmZXJlbnQgZnJvbTwvYj5cbiAgICAgICAgICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBkaWZmZXJlbnRGcm9tLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgZGlzam9pbnQgd2l0aCBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXREaXNqb2ludFdpdGhTZWN0aW9uSlNYKGVudGl0eTogUHJvcGVydHkgfCBDbGFzcywgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBkaXNqb2ludFdpdGggPSBlbnRpdHkuZ2V0RGlzam9pbnRXaXRoKCk7XG5cbiAgICBpZihkaXNqb2ludFdpdGgubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPkRpc2pvaW50IHdpdGg8L2I+XG4gICAgICAgICAgICAgICAge2dldFNlY3Rpb25MaXN0SlNYKGVudGl0eSwgZW50aXR5LmdldExpbmtlZEVudGl0aWVzKCksIGRpc2pvaW50V2l0aCwgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGludmVyc2Ugb2Ygc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUludmVyc2VPZlNlY3Rpb25KU1gocHJvcGVydHk6IFByb3BlcnR5LCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGludmVyc2VPZnMgPSBwcm9wZXJ0eS5nZXRJbnZlcnNlT2YoKTtcblxuICAgIGlmKGludmVyc2VPZnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPkludmVyc2Ugb2Y8L2I+XG4gICAgICAgICAgICAgICAge2dldFNlY3Rpb25MaXN0SlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBpbnZlcnNlT2ZzLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyBvbmUgcHJvcGVydHkgY2hhaW4gSlNYIGVsZW1lbnQuIElzIHVzZWQgZm9yIHtAbGluayBnZXRQcm9wZXJ0eUNoYWluU2VjdGlvbkpTWH0uXG4gKiBAcGFyYW0gcHJvcGVydHlDaGFpbiB0aGUgcHJvcGVydHkgY2hhaW5cbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BzICAgICB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnRbXX0gdGhlIGNoYWlucyBKU1ggZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUNoYWluSlNYKHByb3BlcnR5Q2hhaW46IGFueVtdLCBwcm9wZXJ0eTogUHJvcGVydHksIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudFtdIHtcbiAgICByZXR1cm4gYXNBcnJheShwcm9wZXJ0eUNoYWluKS5zbGljZSgpLnJldmVyc2UoKS5tYXAoKHByb3BlcnR5RXhwciwgaSkgPT4geyAvLyB1c2luZyAuc2xpY2UoKSBoZXJlIGlzIGltcG9ydGFudCBiZWNhdXNlIGEgbXV0YXRpb24gb2YgcHJvcGVydHlDaGFpbiB3b3VsZCB0cmlnZ2VyIGEgdXNlUXVlcnkoKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNwYW4ga2V5PXtwcm9wZXJ0eUV4cHJ9PlxuICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocHJvcGVydHksIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksIHByb3BlcnR5RXhwciwgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2kgPCBhc0FycmF5KHByb3BlcnR5Q2hhaW4pLmxlbmd0aCAtIDEgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwifX0+Jm5ic3A7JiM5NjY2OyZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHByb3BlcnR5IGNoYWlucyBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldFByb3BlcnR5Q2hhaW5TZWN0aW9uSlNYKHByb3BlcnR5OiBQcm9wZXJ0eSwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwcm9wZXJ0eUNoYWlucyA9IHByb3BlcnR5LmdldFByb3BlcnR5Q2hhaW5zKCkubWFwKChyZWlmaWVkIDogUmVpZmllZDxhbnk+KSA9PiByZWlmaWVkLnZhbHVlKTtcblxuICAgIGNvbnN0IGhhc011bHRpcGxlQ2hhaW5zID0gcHJvcGVydHlDaGFpbnMuZmlsdGVyKChlbGVtOiBhbnkpID0+IEFycmF5LmlzQXJyYXkoZWxlbSkpLmxlbmd0aCA+IDA7XG5cbiAgICBpZihwcm9wZXJ0eUNoYWlucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+eyFoYXNNdWx0aXBsZUNoYWlucyA/IFwiUHJvcGVydHkgY2hhaW5cIiA6IFwiUHJvcGVydHkgY2hhaW5zXCJ9PC9iPlxuICAgICAgICAgICAgICAgIHshaGFzTXVsdGlwbGVDaGFpbnMgP1xuICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD57Z2V0UHJvcGVydHlDaGFpbkpTWChwcm9wZXJ0eUNoYWlucywgcHJvcGVydHksIHByb3BzKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlDaGFpbnMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldFByb3BlcnR5Q2hhaW5KU1goaXRlbSwgcHJvcGVydHksIHByb3BzKX08L2xpPik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGVxdWl2YWxlbnQgdG8gc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0RW50aXR5RXF1aXZhbGVudFRvU2VjdGlvbkpTWChlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZXF1aXZhbGVudHMgPSBlbnRpdHkuZ2V0RXF1aXZhbGVudHMoKTtcblxuICAgIGlmKGVxdWl2YWxlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5FcXVpdmFsZW50IHRvPC9iPlxuICAgICAgICAgICAgICAgIHtlcXVpdmFsZW50cy5sZW5ndGggPT09IDEgP1xuICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD57Z2V0UmVpZmllZEpTWChlbnRpdHksIGVxdWl2YWxlbnRzWzBdLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L3A+XG4gICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1aXZhbGVudHMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gPntnZXRSZWlmaWVkSlNYKGVudGl0eSwgaXRlbSwgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBzdWJlbnRpdHkgb2Ygc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0U3ViRW50aXR5T2ZTZWN0aW9uSlNYKGVudGl0eTogUHJvcGVydHkgfCBDbGFzcywgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdXBlckVudGl0aWVzID0gZW50aXR5LmdldFN1cGVyRW50aXRpZXMoKTtcblxuICAgIGlmKHN1cGVyRW50aXRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPlN1YntlbnRpdHkuZ2V0VHlwZSgpfSBvZjwvYj5cbiAgICAgICAgICAgICAgICB7c3VwZXJFbnRpdGllcy5sZW5ndGggPT09IDEgP1xuICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD57Z2V0UmVpZmllZEpTWChlbnRpdHksIHN1cGVyRW50aXRpZXNbMF0sIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlckVudGl0aWVzLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRSZWlmaWVkSlNYKGVudGl0eSwgaXRlbSwgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSByZWxhdGVkIGZyb20gc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0RW50aXR5UmVsYXRlZEZyb21TZWN0aW9uSlNYKGVudGl0eTogUHJvcGVydHkgfCBDbGFzcywgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWxhdGVkRnJvbXMgPSBlbnRpdHkuZ2V0UmVsYXRlZEZyb20oKTtcbiAgICBjb25zdCBwcmVkaWNhdGVzOiBzdHJpbmdbXSA9IEFycmF5LmZyb20obmV3IFNldChyZWxhdGVkRnJvbXMubWFwKChlbGVtOiBhbnkpID0+IHtyZXR1cm4gZWxlbS52YWx1ZVtcInByb3BlcnR5XCJdfSkpKTtcblxuICAgIGlmKHJlbGF0ZWRGcm9tcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+UmVsYXRlZCBmcm9tPC9iPlxuICAgICAgICAgICAgICAgIHtwcmVkaWNhdGVzLm1hcCgocCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLmdldExhYmVsRm9ySXJpKHApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3AudG9TdHJpbmcoKSArIHJhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBzdHlsZT17e2NvbG9yOiBcImJsYWNrXCJ9fSBocmVmPXtwfT48aT57bGFiZWwgfHwgcH08L2k+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBzdHlsZT17e21hcmdpbkJvdHRvbTogMH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVsYXRlZEZyb21zLmZpbHRlcigoZWxlbTogYW55KSA9PiB7cmV0dXJuIGVsZW0udmFsdWVbXCJwcm9wZXJ0eVwiXSA9PT0gcH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChlbGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldENsYXNzRXhwcmVzc2lvbkpTWChlbnRpdHksIGVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBlbGVtLnZhbHVlW1widmFsdWVcIl0sIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48L3A+IHsvKiBXb3JrcyBhcyBlbXB0eSBzcGFjZSBsZWZ0IHRvIG5leHQgc2VjdGlvbiAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApO30pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBjbGFzcyBpbnN0YW5jZXMgc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSB0ZXJtXG4gKiBAcGFyYW0gaW5zdGFuY2VzIGFuIGFycmF5IG9mIHRoZSBjbGFzc2VzJyBpbnN0YW5jZXNcbiAqIEBwYXJhbSBwcm9wc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRDbGFzc0luc3RhbmNlc1NlY3Rpb25KU1godGVybTogQ2xhc3MsIGluc3RhbmNlczogVGhpbmdbXSwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZihpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgPGI+SW5zdGFuY2VzPC9iPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcy5tYXAoKGluc3RhbmNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKHRlcm0sIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSwgaW5zdGFuY2UuZ2V0SXJpKCksIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIEVudGl0eVJlbGF0aW9uc1dpZGdldChwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3QgeyBhcGksIGlyaSwgb250b2xvZ3lJZCwgaGFzVGl0bGUgPSBERUZBVUxUX0hBU19USVRMRSwgc2hvd0JhZGdlcywgZW50aXR5VHlwZSwgcGFyYW1ldGVyLCBvbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSwgb25OYXZpZ2F0ZVRvT250b2xvZ3ksIC4uLnJlc3QgfSA9IHByb3BzO1xuXG4gICAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBmZXRjaCBhbiBlbnRpdGllcycgZGF0YSB0byBiZSBzaG93biBpbiBkaWZmZXJlbnQgc2VjdGlvbnNcbiAgICAgKi9cbiAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IGVudGl0eSxcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdFbnRpdHlSZWxhdGlvbixcbiAgICAgICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NFbnRpdHlSZWxhdGlvbixcbiAgICAgICAgaXNFcnJvcjogaXNFcnJvckVudGl0eVJlbGF0aW9uLFxuICAgIH0gPSB1c2VRdWVyeShcbiAgICAgICAgW1xuICAgICAgICAgICAgXCJlbnRpdHlKc29uXCIsXG4gICAgICAgICAgICBhcGksXG4gICAgICAgICAgICBpcmksXG4gICAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICAgIHNob3dCYWRnZXNcbiAgICAgICAgXSxcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsICBmYWxzZSk7IC8vIGFsd2F5cyB1c2UgdjIvIEFQSVxuICAgICAgICB9LFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGZldGNoIGEgY2xhc3NlcyBpbnN0YW5jZXMgdG8gYmUgc2hvd24gaW4gY2xhc3MgaW5zdGFuY2VzIHNlY3Rpb25cbiAgICAgKi9cbiAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IGluc3RhbmNlcyxcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdJbnN0YW5jZXMsXG4gICAgICAgIGlzU3VjY2VzczogaXNTdWNjZXNzSW5zdGFuY2VzLFxuICAgIH0gPSB1c2VRdWVyeSh7XG4gICAgICAgIHF1ZXJ5S2V5OiBbXG4gICAgICAgICAgICBcImluc3RhbmNlc1wiLFxuICAgICAgICAgICAgZW50aXR5XG4gICAgICAgIF0sXG4gICAgICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoZW50aXR5ICYmIGlzQ2xhc3MoZW50aXR5KSAmJiBlbnRpdHkuaGFzRGlyZWN0Q2hpbGRyZW4oKSkgPyBvbHNBcGkuZ2V0Q2xhc3NJbnN0YW5jZXMoZW50aXR5LmdldElyaSgpLCBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpKSA6IFtdO1xuICAgICAgICB9LFxuICAgICAgICBlbmFibGVkOiAhIWVudGl0eVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gcmVuZGVyU2VjdGlvbnMoZW50aXR5OiBFbnRpdHksIGluc3RhbmNlczogSW5kaXZpZHVhbFtdKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25MaXN0IDogUmVhY3RFbGVtZW50W10gPSBbXTtcblxuICAgICAgICBpZihpc0luZGl2aWR1YWwoZW50aXR5KSkge1xuICAgICAgICAgICAgY29uc3QgaW5kaXZpZHVhbFR5cGVzU2VjdGlvbiA9IGdldEluZGl2aWR1YWxUeXBlc1NlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihpbmRpdmlkdWFsVHlwZXNTZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChpbmRpdmlkdWFsVHlwZXNTZWN0aW9uKTtcblxuICAgICAgICAgICAgY29uc3QgaW5kaXZpZHVhbFNhbWVBc1NlY3Rpb24gPSBnZXRJbmRpdmlkdWFsU2FtZUFzU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKGluZGl2aWR1YWxTYW1lQXNTZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChpbmRpdmlkdWFsU2FtZUFzU2VjdGlvbik7XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGl2aWR1YWxEaWZmZXJlbnRGcm9tU2VjdGlvbiA9IGdldEluZGl2aWR1YWxEaWZmZXJlbnRGcm9tU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKGluZGl2aWR1YWxEaWZmZXJlbnRGcm9tU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goaW5kaXZpZHVhbERpZmZlcmVudEZyb21TZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZihpc1Byb3BlcnR5KGVudGl0eSkgfHwgaXNDbGFzcyhlbnRpdHkpKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNqb2ludFdpdGhTZWN0aW9uID0gZ2V0RGlzam9pbnRXaXRoU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKGRpc2pvaW50V2l0aFNlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKGRpc2pvaW50V2l0aFNlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmKGlzUHJvcGVydHkoZW50aXR5KSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlJbnZlcnNlT2ZTZWN0aW9uID0gZ2V0UHJvcGVydHlJbnZlcnNlT2ZTZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYocHJvcGVydHlJbnZlcnNlT2ZTZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChwcm9wZXJ0eUludmVyc2VPZlNlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eUNoYWluU2VjdGlvbiA9IGdldFByb3BlcnR5Q2hhaW5TZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYocHJvcGVydHlDaGFpblNlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKHByb3BlcnR5Q2hhaW5TZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZihpc1Byb3BlcnR5KGVudGl0eSkgfHwgaXNDbGFzcyhlbnRpdHkpKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHlFcXVpdmFsZW50VG9TZWN0aW9uID0gZ2V0RW50aXR5RXF1aXZhbGVudFRvU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKGVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKGVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBzdWJFbnRpdHlPZlNlY3Rpb24gPSBnZXRTdWJFbnRpdHlPZlNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihzdWJFbnRpdHlPZlNlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKHN1YkVudGl0eU9mU2VjdGlvbik7XG5cbiAgICAgICAgICAgIGNvbnN0IGVudGl0eVJlbGF0ZWRGcm9tU2VjdGlvbiA9IGdldEVudGl0eVJlbGF0ZWRGcm9tU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKGVudGl0eVJlbGF0ZWRGcm9tU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goZW50aXR5UmVsYXRlZEZyb21TZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZihpc0NsYXNzKGVudGl0eSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzSW5zdGFuY2VzU2VjdGlvbiA9IGdldENsYXNzSW5zdGFuY2VzU2VjdGlvbkpTWChlbnRpdHksIGluc3RhbmNlcywgcHJvcHMpO1xuICAgICAgICAgICAgaWYoY2xhc3NJbnN0YW5jZXNTZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChjbGFzc0luc3RhbmNlc1NlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoc2VjdGlvbkxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG4gICAgICAgICAgICAgICAgICAgIHtzZWN0aW9uTGlzdH1cbiAgICAgICAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT5cbiAgICAgICAgICAgICAgICAgICAgTm8gcmVsYXRpb25zIGF2YWlsYWJsZS5cbiAgICAgICAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxFdWlDYXJkXG4gICAgICAgICAgICAgICAgdGl0bGU9e2hhc1RpdGxlID8gKGVudGl0eVR5cGUgPyBjYXBpdGFsaXplKGdldEVudGl0eVR5cGVOYW1lKGVudGl0eVR5cGUpKSA6IChpc1N1Y2Nlc3NFbnRpdHlSZWxhdGlvbiAmJiBlbnRpdHkpID8gY2FwaXRhbGl6ZShlbnRpdHkuZ2V0VHlwZSgpKSA6IFwiXCIpICsgXCIgUmVsYXRpb25zXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgIGxheW91dD1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHsoaXNMb2FkaW5nRW50aXR5UmVsYXRpb24gfHwgaXNMb2FkaW5nSW5zdGFuY2VzKSAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17J3MnfS8+fVxuICAgICAgICAgICAgICAgIHtpc0Vycm9yRW50aXR5UmVsYXRpb24gJiYgPEV1aVRleHQ+UmVxdWVzdGVkIHJlc291cmNlIG5vdCBhdmFpbGFibGU8L0V1aVRleHQ+fVxuICAgICAgICAgICAgICAgIHsoaXNTdWNjZXNzRW50aXR5UmVsYXRpb24gJiYgaXNTdWNjZXNzSW5zdGFuY2VzKSAmJiBlbnRpdHkgIT09IHVuZGVmaW5lZCAmJiBpbnN0YW5jZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICByZW5kZXJTZWN0aW9ucyhlbnRpdHksIGluc3RhbmNlcylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L0V1aUNhcmQ+XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eVJlbGF0aW9ucyhwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkRW50aXR5UmVsYXRpb25zV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRFbnRpdHlSZWxhdGlvbnNXaWRnZXQocHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxFbnRpdHlSZWxhdGlvbnNXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBoYXNUaXRsZT17cHJvcHMuaGFzVGl0bGV9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzPXtwcm9wcy5zaG93QmFkZ2VzfVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e3Byb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgY3JlYXRlRW50aXR5UmVsYXRpb25zLCBFbnRpdHlSZWxhdGlvbnNXaWRnZXQgfTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IFRlcm1EZXBpY3Rpb25XaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyB1c2VRdWVyeSwgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXJ9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHQsIEV1aUltYWdlfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcblxuXG5mdW5jdGlvbiBUZXJtRGVwaWN0aW9uV2lkZ2V0KHByb3BzOlRlcm1EZXBpY3Rpb25XaWRnZXRQcm9wcyl7XG4gICAgY29uc3Qge2FwaSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3l9ID0gcHJvcHM7XG4gICAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhLFxuICAgICAgICBpc0xvYWRpbmcsXG4gICAgICAgIGlzU3VjY2VzcyxcbiAgICAgICAgaXNFcnJvcixcbiAgICAgICAgZXJyb3JcbiAgICAgIH0gPSB1c2VRdWVyeTxUaGluZz4oXG4gICAgICAgIFtcInRlcm1EZXBpY3Rpb25cIiwgYXBpLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gb2xzQXBpLmdldFRoaW5nT2JqZWN0KGlyaSwgXCJjbGFzc1wiLCBvbnRvbG9neUlkLCBcIlwiLCB1c2VMZWdhY3kpOyAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIFxuICAgIFxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJzXCIgLz59XG4gICAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiBkYXRhLmdldERlcGljdGlvblVybCgpICYmXG4gICAgICAgICAgICAgIDw+ICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPEV1aUltYWdlXG4gICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgIGhhc1NoYWRvd1xuICAgICAgICAgICAgICAgIGFsbG93RnVsbFNjcmVlbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBhbHQ9e2RhdGEuZ2V0RGVwaWN0aW9uVXJsKCl9XG4gICAgICAgICAgICAgICAgc3JjPXtkYXRhLmdldERlcGljdGlvblVybCgpfSAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHA+PHNtYWxsPkNsaWNrIHRvIGV4cGFuZC48L3NtYWxsPjwvcD5cbiAgICAgICAgICAgICAgPC8+ICAgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJkZXBpY3Rpb25cIil9PC9FdWlUZXh0Pn1cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuXG5mdW5jdGlvbiBjcmVhdGVEZXBpY3Rpb24ocHJvcHM6IFRlcm1EZXBpY3Rpb25XaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkVGVybURlcGljdGlvbldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkVGVybURlcGljdGlvbldpZGdldChwcm9wczogVGVybURlcGljdGlvbldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgPFRlcm1EZXBpY3Rpb25XaWRnZXRcbiAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfSAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfSAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9ICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQge2NyZWF0ZURlcGljdGlvbiwgVGVybURlcGljdGlvbldpZGdldH07IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IEdyYXBoVmlld1dpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IHVzZVF1ZXJ5LCBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgRXVpUHJvdmlkZXIsIEV1aUxvYWRpbmdTcGlubmVyLCBFdWlUZXh0LCBFdWlCdXR0b24sIEV1aVBhbmVsLEV1aVN3aXRjaCwgRXVpUG9wb3ZlciwgRXVpQnV0dG9uRW1wdHkgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSAndmlzLW5ldHdvcmsnO1xuaW1wb3J0IHsgRGF0YVNldCB9IGZyb20gJ3Zpcy1kYXRhJztcbmltcG9ydCB7IE9sc0dyYXBoTm9kZSwgT2xzR3JhcGhFZGdlIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBKU1RyZWVOb2RlIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcblxuZnVuY3Rpb24gR3JhcGhWaWV3V2lkZ2V0KHByb3BzOiBHcmFwaFZpZXdXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaSwgaXJpLCBvbnRvbG9neUlkLCByb290V2FsayB9ID0gcHJvcHM7XG5cbiAgY29uc3QgW3NlbGVjdGVkSXJpLCBzZXRTZWxlY3RlZElyaV0gPSB1c2VTdGF0ZShpcmkpO1xuICBjb25zdCBbZmlyc3RMb2FkLCBzZXRGaXJzdExvYWRdID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtkYmNsaWNrZWQsIHNldERiY2xpY2tlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtyb290V2Fsa0lzU2VsZWN0ZWQsIHNldFJvb3RXYWxrSXNTZWxlY3RlZF0gPSB1c2VTdGF0ZShyb290V2FsayA/IHJvb3RXYWxrIDogZmFsc2UpO1xuICBjb25zdCBbaXNQb3BvdmVyT3Blbiwgc2V0SXNQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIFxuICAvLyBuZWVkZWQgZm9yIHVzZVF1ZXJ5LiB3aXRob3V0IGl0IHRoZSBncmFwaCB3b24ndCBnZXQgdXBkYXRlZCBvbiBzd2l0Y2hpbmcgYmVyd2VlbiByb290V2Fsaz10cnVlIGFuZCBmYWxzZS5cbiAgY29uc3QgW2NvdW50ZXIsIHNldENvdW50ZXJdID0gdXNlU3RhdGUoMCk7IFxuXG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvcixcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcInRlcm1HcmFwaFwiLCBhcGksIHNlbGVjdGVkSXJpLCBvbnRvbG9neUlkLCByb290V2Fsa0lzU2VsZWN0ZWQsIGRiY2xpY2tlZCxjb3VudGVyXSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAocm9vdFdhbGtJc1NlbGVjdGVkICYmIGZpcnN0TG9hZCkge1xuICAgICAgICAvLyBvbmx5IHVzZSB0aGlzIGNhbGwgb24gbG9hZC4gRG91YmxlIGNraWNraW5nIG9uIGEgbm9kZSBzaG91bGQgY2FsbCB0aGUgbm9ybWFsIGdldFRlcm1SZWxhdGlvbnMgZnVuY3Rpb24uXG4gICAgICAgIHJldHVybiBvbHNBcGkuZ2V0VGVybVRyZWUoe29udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaX0sIHt2aWV3TW9kZTogXCJBbGxcIiwgc2libGluZ3M6IGZhbHNlfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICAgICAgfWVsc2UgaWYoZmlyc3RMb2FkIHx8IGRiY2xpY2tlZCl7XG4gICAgICAgIHJldHVybiBvbHNBcGkuZ2V0VGVybVJlbGF0aW9ucyh7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IHNlbGVjdGVkSXJpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgKTtcblxuXG4gIGNvbnN0IG5vZGVzID0gdXNlUmVmKG5ldyBEYXRhU2V0KFtdKSk7XG4gIGNvbnN0IGVkZ2VzID0gdXNlUmVmKG5ldyBEYXRhU2V0KFtdKSk7XG4gIGNvbnN0IGdyYXBoTmV0d29yayA9IHVzZVJlZih7fSk7XG4gIGNvbnN0IGNvbnRhaW5lciA9IHVzZVJlZihudWxsKTtcblxuICBjb25zdCBncmFwaE5ldHdvcmtDb25maWcgPSB7XG4gICAgLyoqXG4gICAgICogZm9yIG1vcmUgb3B0aW9ucyBoYXZlIGEgbG9vayBhdDogaHR0cHM6Ly92aXNqcy5naXRodWIuaW8vdmlzLW5ldHdvcmsvZG9jcy9uZXR3b3JrLyNvcHRpb25zXG4gICAgICovXG4gICAgYXV0b1Jlc2l6ZTogdHJ1ZSxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGxvY2FsZTogJ2VuJyxcbiAgICBsYXlvdXQ6IHtcbiAgICAgIHJhbmRvbVNlZWQ6IDEsXG4gICAgICBpbXByb3ZlZExheW91dDogdHJ1ZSxcbiAgICAgIGNsdXN0ZXJUaHJlc2hvbGQ6IDE1MCxcbiAgICB9LFxuICAgIHBoeXNpY3M6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBiYXJuZXNIdXQ6IHtcbiAgICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiAtMjAwMDAsXG4gICAgICAgIGNlbnRyYWxHcmF2aXR5OiAwLjMsXG4gICAgICAgIHNwcmluZ0xlbmd0aDogMTAsXG4gICAgICAgIHNwcmluZ0NvbnN0YW50OiAwLjA0LFxuICAgICAgICBkYW1waW5nOiAwLjA5LFxuICAgICAgICBhdm9pZE92ZXJsYXA6IDAsXG4gICAgICB9XG4gICAgfVxuICB9O1xuXG5cbiAgY2xhc3MgR3JhcGhOb2RlIHtcbiAgICBpZD86IHN0cmluZztcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBjb2xvcjoge1xuICAgICAgYmFja2dyb3VuZDogc3RyaW5nO1xuICAgICAgaGlnaGxpZ2h0OiB7XG4gICAgICAgIGJvcmRlcjogc3RyaW5nO1xuICAgICAgICBiYWNrZ3JvdW5kOiBzdHJpbmc7XG4gICAgICB9O1xuICAgIH07XG4gICAgc2hhcGU6IHN0cmluZztcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogc3RyaW5nO1xuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcih7IG5vZGUgfTogT2xzR3JhcGhOb2RlKSB7XG4gICAgICAvKipcbiAgICAgICAqIGZvciBtb3JlIG9wdGlvbnMgaGF2ZSBhIGxvb2sgYXQ6IGh0dHBzOi8vdmlzanMuZ2l0aHViLmlvL3Zpcy1uZXR3b3JrL2RvY3MvbmV0d29yay9ub2Rlcy5odG1sXG4gICAgICAgKi9cbiAgICAgIHRoaXMuaWQgPSBub2RlWydpcmknXTtcbiAgICAgIHRoaXMubGFiZWwgPSBub2RlWydsYWJlbCddO1xuICAgICAgdGhpcy5jb2xvciA9IHtcbiAgICAgICAgYmFja2dyb3VuZDogJyM0NTU0NjknLFxuICAgICAgICBoaWdobGlnaHQ6IHtcbiAgICAgICAgICBib3JkZXI6ICcjNDA0MDQwJyxcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAnIzQwNDA0MCdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuc2hhcGUgPSAnYm94JztcbiAgICAgIHRoaXMuZm9udCA9IHtcbiAgICAgICAgY29sb3I6ICd3aGl0ZScsXG4gICAgICB9O1xuXG4gICAgfVxuICB9XG5cbiAgY2xhc3MgR3JhcGhFZGdlIHtcbiAgICBpZD86IHN0cmluZztcbiAgICBmcm9tPzogc3RyaW5nO1xuICAgIHRvPzogc3RyaW5nO1xuICAgIGxhYmVsPzogc3RyaW5nO1xuICAgIGFycm93cz86IHtcbiAgICAgIHRvPzogYm9vbGVhbjtcbiAgICB9O1xuICAgIHdpZHRoPzogbnVtYmVyO1xuICAgIGNvbG9yPzoge1xuICAgICAgY29sb3I/OiBzdHJpbmc7XG4gICAgICBoaWdobGlnaHQ/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBmb250Pzoge1xuICAgICAgc2l6ZT86IG51bWJlcjtcbiAgICB9O1xuICAgIGRhc2hlcz86IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcih7IGVkZ2UgfTogT2xzR3JhcGhFZGdlKSB7XG4gICAgICBpZiAoZWRnZVsnc291cmNlJ10gJiYgZWRnZVsndGFyZ2V0J10gJiYgZWRnZVsndXJpJ10pIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGZvciBtb3JlIG9wdGlvbnMgaGF2ZSBhIGxvb2sgYXQ6IGh0dHBzOi8vdmlzanMuZ2l0aHViLmlvL3Zpcy1uZXR3b3JrL2RvY3MvbmV0d29yay9lZGdlcy5odG1sXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlkID0gZWRnZVsnc291cmNlJ10gKyBlZGdlWyd0YXJnZXQnXSArIFwiJnVyaT1cIiArIGVkZ2VbJ3VyaSddO1xuICAgICAgICB0aGlzLmZyb20gPSBlZGdlWydzb3VyY2UnXTtcbiAgICAgICAgdGhpcy50byA9IGVkZ2VbJ3RhcmdldCddO1xuICAgICAgICB0aGlzLmxhYmVsID0gZWRnZVsnbGFiZWwnXTtcbiAgICAgICAgdGhpcy5hcnJvd3MgPSB7IHRvOiB0cnVlIH07XG4gICAgICAgIHRoaXMud2lkdGggPSAyO1xuICAgICAgICB0aGlzLmNvbG9yID0ge1xuICAgICAgICAgIGNvbG9yOiAnZ3JheScsXG4gICAgICAgICAgaGlnaGxpZ2h0OiAnIzAwNjE3QydcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5mb250ID0ge1xuICAgICAgICAgIHNpemU6IDE2XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRUb09sc0dyYXBoRm9ybWF0KGxpc3RPZkpzVHJlZU5vZGVzOiBBcnJheTxKU1RyZWVOb2RlPikge1xuICAgIC8vIHVzZWQgZm9yIGNvbnZlcnRpbmcgdGhlIGxpc3Qgb2YgYW5jZXN0b3JzIHRvIHRoZSBvbHMgYXBpIGdyYXBoIGVuZHBvaW50cyBmb3JtYXQuIHRvIGJlIGNvbnN1bWVkIGJ5IEdyYXBoTm9kZSBhbmQgR3JhcGhFZGdlIGNsYXNzZXMgY29uc3RydWN0b3IuXG4gICAgLy8gY3VycmVudGx5IHVzZWQgaW4gc2hvd2luZyBhbmNlc3RvcnMuIEVxdWl2YWxlbnQgdG8gaXMtYSByZWxhdGlvbi5cbiAgICBsZXQgZGF0YTogeyBub2RlczogYW55W107IGVkZ2VzOiBhbnlbXSB9ID0geyBcIm5vZGVzXCI6IFtdLCBcImVkZ2VzXCI6IFtdIH07XG4gICAgbGlzdE9mSnNUcmVlTm9kZXMubWFwKCh0cmVlTm9kZTogSlNUcmVlTm9kZSkgPT4ge1xuICAgICAgaWYoIWRhdGEubm9kZXMuZmluZCgob2JqKSA9PiBvYmouaXJpID09PSB0cmVlTm9kZS5pcmkpKXtcbiAgICAgICAgbGV0IG5vZGUgPSB7IFwiaXJpXCI6IHRyZWVOb2RlLmlyaSwgXCJsYWJlbFwiOiB0cmVlTm9kZS50ZXh0IH07XG4gICAgICAgIGRhdGEubm9kZXMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICAgIGxldCBwYXJlbnROb2RlID0gbGlzdE9mSnNUcmVlTm9kZXMuZmluZCgob2JqOkpTVHJlZU5vZGUpID0+IG9iai5pZCA9PT0gdHJlZU5vZGUucGFyZW50KTtcbiAgICAgIGlmIChwYXJlbnROb2RlKXsgICAgICAgIFxuICAgICAgICAvLyBwYXJlbnQgZG9lcyBub3QgZXhpc3RzIC0tPiAnIycgaWQgdGhhdCBpbmRpY2F0ZXMgYSBub2RlIGlzIGEgcm9vdC5cbiAgICAgICAgbGV0IGVkZ2UgPSB7IFwic291cmNlXCI6IHRyZWVOb2RlLmlyaSwgXCJ0YXJnZXRcIjogcGFyZW50Tm9kZS5pcmksIFwibGFiZWxcIjogXCJzdWJDbGFzc09mXCIsIFwidXJpXCI6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YkNsYXNzT2ZcIiB9O1xuICAgICAgICBpZighZGF0YS5lZGdlcy5maW5kKChvYmopID0+IG9iai5zb3VyY2UgPT09IGVkZ2Uuc291cmNlICYmIG9iai50YXJnZXQgPT09IGVkZ2UudGFyZ2V0KSl7XG4gICAgICAgICAgZGF0YS5lZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBpZiAoZGF0YSAmJiAoZmlyc3RMb2FkIHx8IGRiY2xpY2tlZCkpIHtcbiAgICBsZXQgZ0RhdGEgPSBkYXRhO1xuICAgIGlmIChyb290V2Fsa0lzU2VsZWN0ZWQgJiYgZmlyc3RMb2FkKSB7XG4gICAgICBnRGF0YSA9IGNvbnZlcnRUb09sc0dyYXBoRm9ybWF0KGRhdGEpO1xuICAgIH1cbiAgICBmb3IgKGxldCBub2RlIG9mIGdEYXRhWydub2RlcyddKSB7XG4gICAgICBsZXQgZ05vZGUgPSBuZXcgR3JhcGhOb2RlKHsgbm9kZTogbm9kZSB9KTtcbiAgICAgIC8vQHRzLWlnbm9yZSAgICAgICAgICAgICAgICBcbiAgICAgIGlmICghbm9kZXMuY3VycmVudC5nZXQoZ05vZGUuaWQpKSB7XG4gICAgICAgIGlmKGdOb2RlLmlkID09PSBpcmkgJiYgcm9vdFdhbGtJc1NlbGVjdGVkKXtcbiAgICAgICAgICBnTm9kZS5jb2xvci5iYWNrZ3JvdW5kID0gJyMwQkJCRUYnO1xuICAgICAgICAgIGdOb2RlLmZvbnQuY29sb3IgPSAnYmxhY2snO1xuICAgICAgICB9XG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBub2Rlcy5jdXJyZW50LmFkZChnTm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGVkZ2Ugb2YgZ0RhdGFbJ2VkZ2VzJ10pIHtcbiAgICAgIGxldCBnRWRnZSA9IG5ldyBHcmFwaEVkZ2UoeyBlZGdlOiBlZGdlIH0pO1xuICAgICAgbGV0IGRhc2hlZCA9IChlZGdlLnVyaSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViQ2xhc3NPZlwiIHx8IHJvb3RXYWxrSXNTZWxlY3RlZCkgPyBmYWxzZSA6IHRydWU7XG4gICAgICBnRWRnZS5kYXNoZXMgPSBkYXNoZWQ7XG4gICAgICAvL0B0cy1pZ25vcmUgICAgICAgICAgICAgICBcbiAgICAgIGlmICghZWRnZXMuY3VycmVudC5nZXQoZ0VkZ2UuaWQpKSB7XG4gICAgICAgIGlmKGdFZGdlLmlkPy5pbmNsdWRlcyhpcmkpICYmIHJvb3RXYWxrSXNTZWxlY3RlZCl7XG4gICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgZ0VkZ2UuY29sb3IuY29sb3IgPSAnYmxhY2snO1xuICAgICAgICB9XG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBlZGdlcy5jdXJyZW50LmFkZChnRWRnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmaXJzdExvYWQpIHtcbiAgICAgIHNldEZpcnN0TG9hZChmYWxzZSk7XG4gICAgfVxuICAgIGlmKGRiY2xpY2tlZCl7XG4gICAgICBzZXREYmNsaWNrZWQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG5cbiAgZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgbm9kZXMuY3VycmVudC5jbGVhcigpO1xuICAgIGVkZ2VzLmN1cnJlbnQuY2xlYXIoKTtcbiAgICBzZXRTZWxlY3RlZElyaShpcmkpO1xuICAgIHNldEZpcnN0TG9hZCh0cnVlKTtcbiAgICBzZXREYmNsaWNrZWQoZmFsc2UpO1xuICAgIHNldENvdW50ZXIoY291bnRlcisxKTtcbiAgfVxuXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgZ3JhcGhEYXRhID0geyBub2Rlczogbm9kZXMuY3VycmVudCwgZWRnZXM6IGVkZ2VzLmN1cnJlbnQgfTtcbiAgICAvL0B0cy1pZ25vcmVcbiAgICBncmFwaE5ldHdvcmsuY3VycmVudCA9IG5ldyBOZXR3b3JrKGNvbnRhaW5lci5jdXJyZW50LCBncmFwaERhdGEsIGdyYXBoTmV0d29ya0NvbmZpZyk7XG4gIH0sIFtdKTtcblxuXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZ3JhcGhOZXR3b3JrLmN1cnJlbnQpIHtcbiAgICAgIC8vQHRzLWlnbm9yZSAgICAgICAgICAgICAgICAgICBcbiAgICAgIGdyYXBoTmV0d29yay5jdXJyZW50Lm9uKFwiZG91YmxlQ2xpY2tcIiwgZnVuY3Rpb24ocGFyYW1zKSB7XG4gICAgICAgIGlmIChwYXJhbXMubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxldCBub2RlSXJpID0gcGFyYW1zLm5vZGVzWzBdO1xuICAgICAgICAgIHNldFNlbGVjdGVkSXJpKG5vZGVJcmkpO1xuICAgICAgICAgIHNldERiY2xpY2tlZCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gIH0sIFtncmFwaE5ldHdvcmtdKTtcblxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gbG9hZCB0aGUgZ3JhcGggZGF0YSBhZ2FpbiB3aGVuIHRoZSB1c2VyIGNoYW5nZSB0aGUgbW9kZSB0byByb290V2FsayBhbmQgdmljZSB2ZXJzYSBPUiBpbnB1dCBwcm9wcyBjaGFuZ2VzLlxuICAgIHJlc2V0KCk7XG4gIH0sIFtyb290V2Fsa0lzU2VsZWN0ZWQsIGFwaSwgb250b2xvZ3lJZCwgaXJpXSk7XG4gIFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIHdoZW4gdXNlciBjaGFuZ2UgdGhlIHN0b3J5Ym9vayByb290V2FsayB2YWx1ZVxuICAgIHNldFJvb3RXYWxrSXNTZWxlY3RlZChyb290V2FsayA/IHJvb3RXYWxrIDogZmFsc2UpO1xuICB9LCBbcm9vdFdhbGtdKTtcblxuXG5cbiAgY29uc3Qgb25CdXR0b25DbGljayA9ICgpID0+XG4gICAgc2V0SXNQb3BvdmVyT3BlbigoaXNQb3BvdmVyT3BlbikgPT4gIWlzUG9wb3Zlck9wZW4pO1xuICBjb25zdCBjbG9zZVBvcG92ZXIgPSAoKSA9PiBzZXRJc1BvcG92ZXJPcGVuKGZhbHNlKTtcblxuICBjb25zdCBidXR0b24gPSAoXG4gICAgICAgIDxFdWlCdXR0b25FbXB0eVxuICAgICAgICAgICAgaWNvblR5cGU9XCJpSW5DaXJjbGVcIlxuICAgICAgICAgICAgaWNvblNpZGU9XCJyaWdodFwiXG4gICAgICAgICAgICBvbkNsaWNrPXtvbkJ1dHRvbkNsaWNrfVxuICAgICAgICAgID5cbiAgICAgICAgIEd1aWRlIG1lIFxuICAgICAgICA8L0V1aUJ1dHRvbkVtcHR5PlxuICAgICAgKTtcblxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiZ3JhcGhcIil9PC9FdWlUZXh0Pn1cbiAgICAgIDxFdWlQYW5lbCBzdHlsZT17eyBmb250U2l6ZTogMTIgfX0gcGFkZGluZ1NpemU9J3MnIGJvcmRlclJhZGl1cz1cIm5vbmVcIj5cbiAgICAgICAgPEV1aUJ1dHRvbiBzaXplPVwic1wiIG9uQ2xpY2s9e3Jlc2V0fT5SZXNldDwvRXVpQnV0dG9uPlxuICAgICAgICA8RXVpUG9wb3ZlclxuICAgICAgICAgIGJ1dHRvbj17YnV0dG9ufVxuICAgICAgICAgIGlzT3Blbj17aXNQb3BvdmVyT3Blbn1cbiAgICAgICAgICBjbG9zZVBvcG92ZXI9e2Nsb3NlUG9wb3Zlcn1cbiAgICAgICAgICA+XG4gICAgICAgICAgPEV1aVRleHQgc3R5bGU9e3sgd2lkdGg6IDMwMCwgcGFkZGluZzogMTAgfX0+XG4gICAgICAgICAgICA8bGk+WW91IGNhbiBleHBhbmQgdGhlIG5vZGVzIGJ5IGRvdWJsZSBjbGlja2luZyBvbiB0aGVtPC9saT5cbiAgICAgICAgICAgIDxsaT5Zb3UgY2FuIHpvb20gb3V0L2luIGJ5IHNjcm9sbGluZyBvbiB0aGUgZ3JhcGguPC9saT5cbiAgICAgICAgICAgIDxsaT5Zb3UgY2FuIGdvIGJhY2sgdG8gdGhlIGluaXRpYWwgZ3JhcGggYnkgY2xpY2tpbmcgb24gdGhlIFJlc2V0IGJ1dHRvbi48L2xpPlxuICAgICAgICAgICAgPGxpPllvdSBjYW4gbW92ZSB0aGUgbm9kZXMgYW5kIGVkZ2VzIGFyb3VuZCBieSBkcmFnZ2luZy48L2xpPlxuICAgICAgICAgICAgPGxpPlJvb3R3YWxrIHRvZ2dsZSBlbmFibGUgdGhlIHJvb3Qgd2FsayBtb2RlIGluIHRoZSBncmFwaCwgd2hlcmUgeW91IGNhbiBzZWUgdGhlIHBhdGggZnJvbSByb290cyB0byB0aGUgdGFyZ2V0IG5vZGUuPC9saT4gICAgICAgICAgXG4gICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICA8L0V1aVBvcG92ZXI+XG4gICAgICAgIDxkaXYgc3R5bGU9e3tkaXNwbGF5OiAnaW5saW5lLWJsb2NrJywgZmxvYXQ6ICdyaWdodCcsIHBhZGRpbmdUb3A6IDEwfX0+XG4gICAgICAgICAgPEV1aVN3aXRjaCBcbiAgICAgICAgICAgIGxhYmVsPVwicm9vdCB3YWxrXCIgXG4gICAgICAgICAgICBjaGVja2VkPXtyb290V2Fsa0lzU2VsZWN0ZWR9IFxuICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IHtzZXRSb290V2Fsa0lzU2VsZWN0ZWQoIXJvb3RXYWxrSXNTZWxlY3RlZCl9fVxuICAgICAgICAgICAgdGl0bGU9XCJFbmFibGUgdGhlIHJvb3Qgd2FsayBtb2RlIGluIHRoZSBncmFwaDogWW91IGNhbiBzZWUgdGhlIHBhdGggZnJvbSByb290cyB0byB0aGUgdGFyZ2V0IG5vZGVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9FdWlQYW5lbD5cbiAgICAgIFxuICAgICAgPEV1aVBhbmVsIHN0eWxlPXt7IHdpZHRoOiA5MDAsIGhlaWdodDogOTAwIH19IGhhc1NoYWRvdz17ZmFsc2V9IGhhc0JvcmRlcj17dHJ1ZX0gYm9yZGVyUmFkaXVzPVwibm9uZVwiID5cbiAgICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cIm1cIiAvPn1cbiAgICAgICAgPGRpdiByZWY9e2NvbnRhaW5lcn0gY2xhc3NOYW1lPSdncmFwaC1jb250YWluZXInIHN0eWxlPXt7IHdpZHRoOiBcIjg1MHB4XCIsIGhlaWdodDogXCI4NTBweFwiLCBtYXJnaW46J2F1dG8nIH19IC8+XG4gICAgICA8L0V1aVBhbmVsPlxuICAgIDwvPlxuICApO1xufVxuXG5cbmZ1bmN0aW9uIGNyZWF0ZUdyYXBoVmlldyhwcm9wczogR3JhcGhWaWV3V2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkR3JhcGhWaWV3V2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRHcmFwaFZpZXdXaWRnZXQocHJvcHM6IEdyYXBoVmlld1dpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPEdyYXBoVmlld1dpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgcm9vdFdhbGs9e3Byb3BzLnJvb3RXYWxrfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuXG5leHBvcnQgeyBjcmVhdGVHcmFwaFZpZXcsIEdyYXBoVmlld1dpZGdldCB9XG4iLCAiaW1wb3J0IHsgY3JlYXRlQXV0b2NvbXBsZXRlIH0gZnJvbSBcIi4vQXV0b2NvbXBsZXRlV2lkZ2V0L0F1dG9jb21wbGV0ZVdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlRGF0YUNvbnRlbnQgfSBmcm9tIFwiLi9EYXRhQ29udGVudFdpZGdldC9EYXRhQ29udGVudFdpZGdldFwiXG5pbXBvcnQgeyBjcmVhdGVFbnRpdHlJbmZvIH0gZnJvbSBcIi4vRW50aXR5SW5mb1dpZGdldC9FbnRpdHlJbmZvV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVKc29uQXBpfSBmcm9tIFwiLi9Kc29uQXBpV2lkZ2V0L0pzb25BcGlXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUJyZWFkY3J1bWIgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9CcmVhZGNydW1iV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZURlc2NyaXB0aW9uIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvRGVzY3JpcHRpb25XaWRnZXQvRGVzY3JpcHRpb25XaWRnZXRcIlxuaW1wb3J0IHsgY3JlYXRlSXJpIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvSXJpV2lkZ2V0L0lyaVdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlVGFiIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L1RhYldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlQWx0ZXJuYXRpdmVOYW1lVGFiIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUNyb3NzUmVmVGFiIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0Nyb3NzUmVmV2lkZ2V0L0Nyb3NzUmVmVGFiV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVIaWVyYXJjaHkgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0U2VtTG9va1AvSGllcmFyY2h5V2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVUaXRsZX0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGl0bGVXaWRnZXQvVGl0bGVXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZU1ldGFkYXRhIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvTWV0YWRhdGFXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZU9udG9sb2d5SW5mbyB9IGZyb20gXCIuL09udG9sb2d5SW5mb1dpZGdldC9PbnRvbG9neUluZm9XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVJlc291cmNlcyB9IGZyb20gXCIuL1Jlc291cmNlc1dpZGdldC9SZXNvdXJjZXNXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVNlYXJjaEJhciB9IGZyb20gXCIuL1NlYXJjaEJhcldpZGdldC9TZWFyY2hCYXJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0IH0gZnJvbSBcIi4vU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRcIjtcbmltcG9ydCB7Y3JlYXRlRW50aXR5UmVsYXRpb25zfSBmcm9tIFwiLi9FbnRpdHlSZWxhdGlvbnNXaWRnZXQvRW50aXR5UmVsYXRpb25zV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVEZXBpY3Rpb24gfSBmcm9tIFwiLi9UZXJtRGVwaWN0aW9uV2lkZ2V0L1Rlcm1EZXBpY3Rpb25XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUVudGl0eU9udG9MaXN0IH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvRW50aXR5T250b0xpc3RXaWRnZXQvRW50aXR5T250b0xpc3RXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUVudGl0eURlZmluZWRCeSB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlXaWRnZXRcIlxuaW1wb3J0IHsgY3JlYXRlR3JhcGhWaWV3IH0gZnJvbSBcIi4vR3JhcGhWaWV3V2lkZ2V0L0dyYXBoVmlld1dpZGdldFwiO1xuXG4od2luZG93IGFzIGFueSlbJ1NlbUxvb2tQV2lkZ2V0cyddID0ge1xuICAgIGNyZWF0ZUF1dG9jb21wbGV0ZSxcbiAgICBjcmVhdGVEYXRhQ29udGVudCxcbiAgICBjcmVhdGVFbnRpdHlJbmZvLFxuICAgIGNyZWF0ZUVudGl0eVJlbGF0aW9ucyxcbiAgICBjcmVhdGVKc29uQXBpLFxuICAgIGNyZWF0ZUJyZWFkY3J1bWIsXG4gICAgY3JlYXRlRGVzY3JpcHRpb24sXG4gICAgY3JlYXRlSXJpLFxuICAgIGNyZWF0ZVRhYixcbiAgICBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIsXG4gICAgY3JlYXRlQ3Jvc3NSZWZUYWIsXG4gICAgY3JlYXRlSGllcmFyY2h5LFxuICAgIGNyZWF0ZVRpdGxlLFxuICAgIGNyZWF0ZU9udG9sb2d5SW5mbyxcbiAgICBjcmVhdGVSZXNvdXJjZXMsXG4gICAgY3JlYXRlU2VhcmNoQmFyLFxuICAgIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0LFxuICAgIGNyZWF0ZU1ldGFkYXRhLFxuICAgIGNyZWF0ZURlcGljdGlvbixcbiAgICBjcmVhdGVFbnRpdHlPbnRvTGlzdCxcbiAgICBjcmVhdGVFbnRpdHlEZWZpbmVkQnksXG4gICAgY3JlYXRlR3JhcGhWaWV3LFxufVxuXG5leHBvcnQge1xuICAgIGNyZWF0ZUF1dG9jb21wbGV0ZSxcbiAgICBjcmVhdGVEYXRhQ29udGVudCxcbiAgICBjcmVhdGVFbnRpdHlJbmZvLFxuICAgIGNyZWF0ZUVudGl0eVJlbGF0aW9ucyxcbiAgICBjcmVhdGVKc29uQXBpLFxuICAgIGNyZWF0ZUJyZWFkY3J1bWIsXG4gICAgY3JlYXRlRGVzY3JpcHRpb24sXG4gICAgY3JlYXRlSXJpLFxuICAgIGNyZWF0ZVRhYixcbiAgICBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIsXG4gICAgY3JlYXRlQ3Jvc3NSZWZUYWIsXG4gICAgY3JlYXRlVGl0bGUsXG4gICAgY3JlYXRlT250b2xvZ3lJbmZvLFxuICAgIGNyZWF0ZVJlc291cmNlcyxcbiAgICBjcmVhdGVTZWFyY2hCYXIsXG4gICAgY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QsXG4gICAgY3JlYXRlTWV0YWRhdGEsXG4gICAgY3JlYXRlRGVwaWN0aW9uLFxuICAgIGNyZWF0ZUhpZXJhcmNoeSxcbiAgICBjcmVhdGVFbnRpdHlPbnRvTGlzdCxcbiAgICBjcmVhdGVFbnRpdHlEZWZpbmVkQnksXG4gICAgY3JlYXRlR3JhcGhWaWV3LFxufVxuXG5leHBvcnQgKiBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vQXV0b2NvbXBsZXRlV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Kc29uQXBpV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9EYXRhQ29udGVudFdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vUmVzb3VyY2VzV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9PbnRvbG9neUluZm9XaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1NlYXJjaEJhcldpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0VudGl0eUluZm9XaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0VudGl0eVJlbGF0aW9uc1dpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vVGVybURlcGljdGlvbldpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhWaWV3V2lkZ2V0XCI7Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQVFBLFVBQUksd0JBQXdCLE9BQU87QUFDbkMsVUFBSUEsa0JBQWlCLE9BQU8sVUFBVTtBQUN0QyxVQUFJLG1CQUFtQixPQUFPLFVBQVU7QUFFeEMsZUFBUyxTQUFTLEtBQUs7QUFDdEIsWUFBSSxRQUFRLFFBQVEsUUFBUSxRQUFXO0FBQ3RDLGdCQUFNLElBQUksVUFBVSx1REFBdUQ7QUFBQSxRQUM1RTtBQUVBLGVBQU8sT0FBTyxHQUFHO0FBQUEsTUFDbEI7QUFFQSxlQUFTLGtCQUFrQjtBQUMxQixZQUFJO0FBQ0gsY0FBSSxDQUFDLE9BQU8sUUFBUTtBQUNuQixtQkFBTztBQUFBLFVBQ1I7QUFLQSxjQUFJLFFBQVEsSUFBSSxPQUFPLEtBQUs7QUFDNUIsZ0JBQU0sQ0FBQyxJQUFJO0FBQ1gsY0FBSSxPQUFPLG9CQUFvQixLQUFLLEVBQUUsQ0FBQyxNQUFNLEtBQUs7QUFDakQsbUJBQU87QUFBQSxVQUNSO0FBR0EsY0FBSSxRQUFRLENBQUM7QUFDYixtQkFBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLEtBQUs7QUFDNUIsa0JBQU0sTUFBTSxPQUFPLGFBQWEsQ0FBQyxDQUFDLElBQUk7QUFBQSxVQUN2QztBQUNBLGNBQUksU0FBUyxPQUFPLG9CQUFvQixLQUFLLEVBQUUsSUFBSSxTQUFVLEdBQUc7QUFDL0QsbUJBQU8sTUFBTSxDQUFDO0FB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QUFXO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxjQUFjO0FBQUEsWUFDZCxLQUFLO0FBQUEsWUFDTCxNQUFNO0FBQUEsWUFDTixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixhQUFhO0FBQUEsWUFDYixnQkFBZ0I7QUFBQSxZQUNoQixZQUFZO0FBQUEsWUFDWixhQUFhO0FBQUEsWUFDYixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsWUFDUixNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixVQUFVO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxXQUFXO0FBQUEsWUFDWCxjQUFjO0FBQUEsWUFDZCxNQUFNO0FBQUEsWUFDTixJQUFJO0FBQUEsWUFDSixXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxJQUFJO0FBQUEsWUFDSixRQUFRO0FBQUEsWUFDUixVQUFVO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsWUFDVixXQUFXO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsWUFDUCxNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixLQUFLO0FBQUEsWUFDTCxVQUFVO0FBQUEsWUFDVixhQUFhO0FBQUEsWUFDYixjQUFjO0FBQUEsWUFDZCxLQUFLO0FBQUEsWUFDTCxXQUFXO0FBQUEsWUFDWCxPQUFPO0FBQUEsWUFDUCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsWUFDUixLQUFLO0FBQUEsWUFDTCxXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsWUFDUCxNQUFNO0FBQUEsWUFDTixVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsWUFDUCxZQUFZO0FBQUEsWUFDWixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxhQUFhO0FBQUEsWUFDYixhQUFhO0FBQUEsWUFD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LHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsT0FBQUEsVUFBQUEsU0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsMkJBQUFBLE1BQUFBLEdBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxrQkFBQUEsVUFBQUEsTUFBQUEsVUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxnQkFBQUEsTUFBQUEsMkNBQUFBLEtBQUFBLEVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtZQUFBQSxFQUFBQSxFQUFBQSxNQUFBQSxNQUFBQSxNQUFBQSxZQUFBQSxPQUFBQSxHQUFBQSxRQUFBQTtBQUFBQSxjQUFBQSxPQUFBQSxLQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsV0FBQUE7Y0FBQUE7QUFBQUEscUJBQUFBLEVBQUFBLEdBQUFBLElBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxNQUFBQSxHQUFBQSxTQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxzQkFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7WUFBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVBQUFBLHVJQUFBQTtVQUFBQTtBQUFBQSxjQUFBQSxJQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtBQUFBQSxpQkFBQUEsRUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsWUFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsRUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxNQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUE7QUFBQUEsY0FBQUEsTUFBQUEsUUFBQUEsR0FBQUEsVUFBQUEsR0FBQUEsT0FBQUE7WUFBQUEsVUFBQUE7QUFBQUEsa0JBQUFBO0FBQUFBLHNCQUFBQTtZQUFBQTtVQUFBQSxFQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsV0FBQUEsUUFBQUEsTUFBQUEsS0FBQUEsR0FBQUEsWUFBQUEsS0FBQUEsR0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLElBQUFBLE1BQUFBLEVBQUFBLEdBQUFBLEtBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEdBQUFBLEVBQUFBLElBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGlCQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsS0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLFVBQUFBLFFBQUFBLEtBQUFBLElBQUFBLE1BQUFBLEVBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEdBQUFBLEVBQUFBLElBQUFBLFVBQUFBLEVBQUFBO0FBQUFBLGlCQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxnQkFBQUEsS0FBQUEsV0FBQUE7QUFBQUEsdUJBQUFBLEtBQUFBLFdBQUFBO0FBQUFBLG9CQUFBQSxLQUFBQTtBQUFBQSx1QkFBQUEsU0FBQUEsSUFBQUE7QUFBQUEsMkJBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLFFBQUFBLE1BQUFBO0FBQUFBLHdCQUFBQSxLQUFBQSx1QkFBQUEsTUFBQUEsR0FBQUEsV0FBQUEsRUFBQUE7QUFBQUEsb0JBQUFBLE1BQUFBLEtBQUFBLE9BQUFBLEdBQUFBLE1BQUFBLE1BQUFBLFFBQUFBLEdBQUFBLE1BQUFBLGNBQUFBLE1BQUFBO2tCQUFBQTtBQUFBQSx5QkFBQUEseUJBQUFBLE9BQUFBO2dCQUFBQTtjQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxVQUFBQSxRQUFBQTtBQUFBQSxpQkFBQUEsTUFBQUEsR0FBQUEsS0FBQUEsS0FBQUEsVUFBQUEsVUFBQUEsS0FBQUEsU0FBQUEsVUFBQUEsRUFBQUEsQ0FBQUEsS0FBQUEsTUFBQUEsTUFBQUEsS0FBQUEsTUFBQUEsR0FBQUEsS0FBQUEsS0FBQUEsVUFBQUEsVUFBQUEsS0FBQUEsU0FBQUEsVUFBQUEsRUFBQUEsQ0FBQUEsS0FBQUEsTUFBQUEsTUFBQUEsS0FBQUEsTUFBQUEsR0FBQUEsS0FBQUEsS0FBQUEsVUFBQUEsVUFBQUEsS0FBQUEsU0FBQUEsVUFBQUEsRUFBQUEsQ0FBQUEsS0FBQUEsTUFBQUEsTUFBQUE7QUFBQUEscUJBQUFBLENBQUFBLElBQUFBLElBQUFBLEVBQUFBO1lBQUFBLEVBQUFBLEVBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLElBQUFBLENBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLENBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLENBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLENBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLFdBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxVQUFBQSxLQUFBQSx3QkFBQUE7QUFBQUEscUJBQUFBLEtBQUFBLElBQUFBLEtBQUFBLElBQUFBLEtBQUFBLE1BQUFBLEtBQUFBLElBQUFBO1lBQUFBO0FBQUFBLG1CQUFBQSxHQUFBQSxTQUFBQSxXQUFBQTtBQUFBQSxxQkFBQUEsYUFBQUEsR0FBQUE7WUFBQUEsR0FBQUEsR0FBQUEsVUFBQUEsV0FBQUE7QUFBQUEscUJBQUFBLEdBQUFBLElBQUFBLHlCQUFBQSxVQUFBQSxHQUFBQSxJQUFBQTtZQUFBQSxHQUFBQSxHQUFBQSxZQUFBQSxRQUFBQSxHQUFBQSxPQUFBQSxJQUFBQSxHQUFBQSxVQUFBQSxPQUFBQTtVQUFBQSxFQUFB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QUFBcWEsR0FBQSxZQUFBLFFBQUFyYSxHQUFBLFVBQUFxYSxHQUFBLFFBQUEsV0FBQSxHQUFBcmEsR0FBQSxTQUFBLElBQUEsRUFBQSxRQUFBQSxHQUFBLFdBQUEsWUFBQUEsR0FBQSxVQUFBLElBQUEsRUFBQSxZQUFBQSxHQUFBLGFBQUFBLEdBQUEsVUFBQSxjQUFBcWEsR0FBQSxVQUFBLFlBQUEsUUFBQXJhLEdBQUEsYUFBQUEsR0FBQSxVQUFBLFVBQUFxYSxHQUFBLFVBQUEsT0FBQSxHQUFBLE9BQUEsR0FBQXJhLEdBQUEsS0FBQSxJQUFBLEVBQUEsUUFBQUEsR0FBQSxPQUFBLFlBQUFBLEdBQUEsTUFBQSxJQUFBLEVBQUEsUUFBQUEsR0FBQSxTQUFBQSxHQUFBLE1BQUEsVUFBQXFhLEdBQUEsTUFBQSxRQUFBLFlBQUFyYSxHQUFBLFNBQUFBLEdBQUEsTUFBQSxjQUFBcWEsR0FBQSxNQUFBLFdBQUEsRUFBQSxJQUFBLEVBQUEsWUFBQXJhLEdBQUEsY0FBQSxRQUFBLFFBQUFBLEdBQUEsVUFBQSxRQUFBLFdBQUEsR0FBQUEsR0FBQSxTQUFBLElBQUEsRUFBQSxRQUFBQSxHQUFBLFdBQUEsWUFBQUEsR0FBQSxVQUFBLElBQUEsRUFBQSxZQUFBQSxHQUFBLGFBQUFBLEdBQUEsVUFBQSxjQUFBLFFBQUEsUUFBQUEsR0FBQSxhQUFBQSxHQUFBLFVBQUEsVUFBQSxPQUFBLEdBQUEsT0FBQSxHQUFBQSxHQUFBLEtBQUEsSUFBQSxFQUFBLFFBQUFBLEdBQUEsT0FBQSxZQUFBQSxHQUFBLE1BQUEsSUFBQSxFQUFBLFFBQUFBLEdBQUEsU0FBQUEsR0FBQSxNQUFBLFVBQUEsUUFBQSxZQUFBQSxHQUFBLFNBQUFBLEdBQUEsTUFBQSxjQUFBLE9BQUEsRUFBQTtRQUFBO0FBQUEsaUJBQUEsR0FBQUEsSUFBQXFhLElBQUF4Z0IsSUFBQTtBQUFBLFVBQUFtRyxNQUFBLEtBQUFxYSxNQUFBLEtBQUF4Z0IsTUFBQTtBQUFBLGNBQUF1ZSxLQUFBLEtBQUEsSUFBQXBZLElBQUEsS0FBQSxJQUFBcWEsSUFBQXhnQixFQUFB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QSxXQUFBLE1BQUEsV0FBQSxVQUFBLFdBQUEsWUFBQSxXQUFBLE1BQUEsV0FBQSxXQUFBLFdBQUEsT0FBQSxXQUFBLE1BQUEsV0FBQSxVQUFBLFdBQUEsYUFBQSxXQUFBLGVBQUEsV0FBQSxtQkFBQSxXQUFBLE1BQUEsV0FBQSxhQUFBLFdBQUEsTUFBQSxXQUFBLE1BQUEsV0FBQSxjQUFBLFdBQUEsWUFBQSxXQUFBLGVBQUEsV0FBQSxhQUFBLFdBQUEsVUFBQSxXQUFBLGVBQUEsV0FBQSxXQUFBLFdBQUEsZ0JBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxlQUFBLFdBQUEsaUJBQUEsV0FBQSxRQUFBLFdBQUEsZ0JBQUEsV0FBQSxXQUFBLFdBQUEsZ0JBQUEsV0FBQSxrQkFBQSxXQUFBLFNBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxnQkFBQSxXQUFBLGlCQUFBLFdBQUEsV0FBQSxXQUFBLFlBQUEsV0FBQSxZQUFBLFdBQUEsUUFBQSxXQUFBLFFBQUEsV0FBQSxPQUFBLFdBQUEsTUFBQSxXQUFBLFNBQUEsV0FBQSxjQUFBLFdBQUEsWUFBQSxXQUFBLFNBQUEsV0FBQSxhQUFBLFdBQUEsYUFBQSxXQUFBLGNBQUEsV0FBQSxZQUFBLFdBQUEsY0FBQSxXQUFBLFlBQUEsV0FBQSxXQUFBLFdBQUEsWUFBQSxXQUFBLGFBQUEsV0FBQSxRQUFBLFdBQUEsT0FBQSxXQUFBLFVBQUEsV0FBQSxXQUFBLFdBQUEsYUFBQSxXQUFBLGVBQUEsV0FBQSxnQkFBQSxXQUFBLFlBQUEsV0FBQSxXQUFBLFdBQUEsZUFBQSxXQUFBLGNBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxXQUFBLFFBQUEsV0FBQSxpQkFBQSxXQUFBLFdBQUEsV0FBQSxNQUFBLFdBQUEsV0FBQSxXQUFBLEtBQUEsV0FBQSxXQUFBLFdBQUEsZUFBQSxXQUFBLFNBQUEsV0FBQSxRQUFBLFdBQUEsV0FBQSxXQUFBLFNBQUEsV0FBQSxXQUFBLFdBQUEsTUFBQSxXQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsVUFBQSxXQUFBLFlBQUEsV0FBQSxRQUFBLFdBQUEsZUFBQSxXQUFBLFlBQUEsV0FBQSxPQUFBLFdBQUEsV0FBQSxXQUFBLFVBQUEsV0FBQSxPQUFBLFdBQUEsWUFBQSxXQUFBLE9BQUEsV0FBQSxPQUFBLFdBQUEsWUFBQSxXQUFBLFdBQUEsV0FBQSxZQUFBLFdBQUEsUUFBQSxXQUFBLGNBQUEsV0FBQSxPQUFBLFdBQUEsc0JBQUEsV0FBQSxTQUFBLFdBQUEsS0FBQSxXQUFBLFNBQUEsV0FBQSxTQUFBLFdBQUEsVUFBQSxXQUFBLFdBQUEsV0FBQSxRQUFBLFdBQUEsU0FBQSxXQUFBLE9BQUEsV0FBQSxZQUFBLFdBQUEsYUFBQSxXQUFBLFFBQUEsV0FBQSxXQUFBLFdBQUEsTUFBQSxXQUFBLE1BQUEsV0FBQSxXQUFBLFdBQUEsYUFBQSxXQUFBLFVBQUEsV0FBQSxRQUFBLFdBQUEsV0FBQSxXQUFBLGdCQUFBLFdBQUEsWUFBQSxXQUFBLGVBQUEsV0FBQSxVQUFBLFdBQUEsVUFBQSxXQUFBLGNBQUEsV0FBQSxhQUFBLFdBQUEsTUFBQSxXQUFBLFFBQUEsV0FBQSxhQUFBLFdBQUEsT0FBQSxXQUFBLE9BQUEsVUFBQSxHQUFBLEtBQUEsV0FBQTtBQUFBLG1CQUFBbUcsS0FBQTtBQUFBLGdCQUFBcWEsS0FBQSxVQUFBLFNBQUEsS0FBQSxXQUFBLFVBQUEsQ0FBQSxJQUFBLFVBQUEsQ0FBQSxJQUFBO0FBQUEsZUFBQSxNQUFBcmEsRUFBQSxHQUFBLEtBQUEsYUFBQXFhLElBQUEsS0FBQSxZQUFBLE9BQUEsS0FBQSxvQkFBQSxFQUFBLEdBQUEsT0FBQSxHQUFBLE1BQUEsR0FBQSxLQUFBLElBQUEsTUFBQSxNQUFBLEtBQUEsUUFBQSxFQUFBLEdBQUEsS0FBQSxHQUFBLEtBQUEsR0FBQSxLQUFBLEdBQUEsRUFBQSxHQUFBLEtBQUEsWUFBQSxRQUFBLEtBQUEsZUFBQSxFQUFBLEdBQUEsS0FBQSxHQUFBLEtBQUEsR0FBQSxLQUFBLEdBQUEsRUFBQSxHQUFBLEtBQUEsZ0JBQUEsUUFBQSxLQUFBLFVBQUEsT0FBQSxLQUFB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Y0FBQSxHQUFBLEtBQUEsZ0JBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxLQUFBLE1BQUEsTUFBQSxVQUFBLFNBQUEsS0FBQSxtQkFBQTtVQUFBLEVBQUEsR0FBQSxFQUFBLEtBQUEsU0FBQSxPQUFBLFdBQUE7QUFBQSxnQkFBQXJhLEtBQUE7QUFBQSxzQkFBQSxFQUFBLFVBQUEsU0FBQSxLQUFBLFdBQUEsVUFBQSxDQUFBLE1BQUEsVUFBQSxDQUFBLE9BQUEsS0FBQSxnQkFBQSxHQUFBLENBQUEsR0FBQSxLQUFBLEtBQUEsSUFBQSxTQUFBLEtBQUEsV0FBQSxLQUFBLGVBQUEsS0FBQSxZQUFBLEdBQUEsS0FBQSxNQUFBLE1BQUEsVUFBQSxRQUFBLEdBQUEsV0FBQTtBQUFBLHlCQUFBQSxHQUFBLGtCQUFBQSxHQUFBLGNBQUEsR0FBQUEsR0FBQSxnQkFBQTtZQUFBLEdBQUEsQ0FBQTtVQUFBLEVBQUEsR0FBQSxFQUFBLEtBQUEsU0FBQSxPQUFBLFdBQUE7QUFBQSxpQkFBQSxlQUFBLEtBQUEsS0FBQSxHQUFBLEtBQUEsVUFBQSxPQUFBLEtBQUEsTUFBQTtVQUFBLEVBQUEsR0FBQSxFQUFBLEtBQUEsVUFBQSxPQUFBLFdBQUE7QUFBQSxpQkFBQSxVQUFBLE1BQUEsS0FBQSxlQUFBLEtBQUEsS0FBQSxHQUFBLEtBQUEsY0FBQSxLQUFBLEtBQUE7VUFBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLGFBQUEsT0FBQSxXQUFBO0FBQUEsdUJBQUEsS0FBQSxnQkFBQSxLQUFBLFNBQUEsS0FBQSxlQUFBLEtBQUEsSUFBQSxNQUFBLG1DQUFBO1VBQUEsRUFBQSxHQUFBLEVBQUEsS0FBQSxhQUFBLE9BQUEsU0FBQUEsSUFBQTtBQUFBLHNCQUFBLEVBQUEsVUFBQSxTQUFBLEtBQUEsV0FBQSxVQUFBLENBQUEsTUFBQSxVQUFBLENBQUEsT0FBQSxLQUFBLGVBQUEsR0FBQSxDQUFBLEdBQUFBLEVBQUEsSUFBQSxLQUFBLFFBQUFBO0FBQUEsZ0JBQUFxYSxLQUFBLEdBQUFyYSxHQUFBLEdBQUFBLEdBQUEsR0FBQUEsR0FBQSxD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QSxhQUFBLFlBQUEseUJBQUEsS0FBQSxhQUFBLFlBQUEsVUFBQSxLQUFBLGFBQUEsVUFBQSxHQUFBSSxLQUFBLEtBQUEsS0FBQSxFQUFBLEtBQUFBLElBQUEsTUFBQSxLQUFBLEdBQUEsS0FBQSxjQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxZQUFBLFlBQUEsd0JBQUEsS0FBQSxZQUFBLFlBQUEsU0FBQSxLQUFBLFlBQUEsVUFBQSxHQUFBcWEsS0FBQSxLQUFBLE1BQUEsRUFBQSxLQUFBQSxJQUFBLElBQUEsR0FBQSxLQUFBLGFBQUEsU0FBQSxjQUFBLEtBQUEsR0FBQSxLQUFBLFdBQUEsWUFBQSx1QkFBQSxLQUFBLFdBQUEsWUFBQSxRQUFBLEtBQUEsV0FBQSxVQUFBLEdBQUF4Z0IsS0FBQSxLQUFBLEtBQUEsRUFBQSxLQUFBQSxJQUFBLElBQUEsR0FBQSxLQUFBLGFBQUEsU0FBQSxjQUFBLEtBQUEsR0FBQSxLQUFBLFdBQUEsWUFBQSx1QkFBQSxLQUFBLFdBQUEsWUFBQSxhQUFBLEtBQUEsV0FBQSxVQUFBLEdBQUF1ZSxLQUFBLEtBQUEsU0FBQSxFQUFBLEtBQUFBLElBQUEsSUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsY0FBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsUUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsZUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsYUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsWUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsVUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsV0FBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsZUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsWUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsV0FBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsVUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsVUFBQTtVQUFBLEVBQUEsR0FBQSxFQUFBLEtBQUEsZUFBQSxPQUFBLFdB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RixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FHMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUcxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FHMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxDQUFBLEdBSTVDOXhDLEtBQUs2TCxVQUFVLENBQUEsR0FDZjdMLEtBQUt1NUMsaUJBQWlCLEVBQ3BCQyxrQkFBQUEsS0FBa0IsR0FFcEJDLEdBQWN6NUMsS0FBSzZMLFNBQVM3TCxLQUFLdTVDLGNBQUFBO1VBQ25DO0FBbUZDLGlCQWpGRDFyQixHQUFBc3JCLElBQUEsQ0FBQSxFQUFBM3lDLEtBQUEsY0FBQW5ELE9BSUEsU0FBV3dJLElBQUFBO0FBQ1QsZ0JBQU02dEMsS0FBZSxDQUFDLGtCQUFBO0FBRXRCLGdCQUFBLFdBQUk3dEM7QUFDRix1QkFBVzh0QyxNQUFhOXRDO0FBQ3RCLG9CQUFJekosT0FBT3hCLFVBQVVILGVBQWVLLEtBQUsrSyxJQUFTOHRDLEVBQUFBLEtBQUFBLE9BQzVDcE4sR0FBQW1OLEVBQUFBLEVBQVk1NEMsS0FBWjQ0QyxJQUFxQkMsRUFBQUEsR0FBbUI7QUFDMUMsc0JBQU1DLEtBQVEvdEMsR0FBUTh0QyxFQUFBQTtBQUN0QjM1Qyx1QkFBS3VtQyxJQUFJb1QsSUFBV0MsRUFBQUE7Z0JBQ3RCOztVQUlSLEVBQUEsR0FFQSxFQUFBcHpDLEtBQUEsU0FBQW5ELE9BR0EsV0FBQTtBQUNFckQsaUJBQUs2NUMsVUFBVSxJQUFBQyxNQUNmOTVDLEtBQUsrNUMsY0FBYyxDQUFBO1VBQ3JCLEVBQUEsR0FFQSxFQUFBdnpDLEtBQUEsT0FBQW5ELE9BUUEsU0FBSTIyQyxJQUFBQTtBQUFnQyxnQkFBckJDLEtBQUFBLEVBQVloNUMsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLE1BQUFBLFVBQUEsQ0FBQSxHQUNyQjI0QyxLQUFRNTVDLEtBQUs2NUMsUUFBUXYzQyxJQUFJMDNDLEVBQUFBO0FBRTdCLGdCQUFBLFdBQUlKLE1BQXVCSztBQUN6QixrQkFBQSxVQUNFajZDLEtBQUs2TCxRQUFRMnRDLG9CQUNieDVDLEtBQUsrNUMsWUFBWXIxQyxTQUFTLEdBQzFCO0FBRUEsb0JBQU1rSixLQUFRNU4sS0FBS3E1QyxjQUFjcjVDLEtBQUsrNUMsWUFBWXIxQztBQUFBQSxrQkFDaEQxRSxLQUFLcTVDLGNBQ1BPLEtBQVEsQ0FBQSxHQUNGek8sUUFBUW5yQyxLQUFLNjVDLFFBQVF2M0MsSUFBSXRDLEtBQUsrNUMsWUFBWW5zQyxFQUFBQSxDQUFBQSxHQUNoRDVOLEtBQUs2NUMsUUFBUXpqQyxJQUFJNGpDLElBQVdKLEVBQUFBO2NBQzlCLE9BQU87QUFFTCxvQkFBTWhzQyxLQUFRNU4sS0FBS281QyxnQkFBZ0JwNUMsS0FBS3M1QyxlQUFlNTBDO0FBQ3ZEMUUscUJBQUtvNUMsa0JBQ0xRLEtBQVEsQ0FBQSxHQUNGek8sUUFBUW5yQyxLQUFLczVDLGVBQWUxckMsRUFBQUEsR0FDbEM1TixLQUFLNjVDLFFBQVF6akMsSUFBSTRqQyxJQUFXSixFQUFBQTtjQUM5QjtBQUdGLG1CQUFPQTtVQUNULEVBQUEsR0FFQSxFQUFBcHpDLEtBQUEsT0FBQW5ELE9BVUEsU0FBSXMyQyxJQUFXMy9CLElBQUFBO0FBUWIsbUJBSktoYSxLQUFLNjVDLFFBQVF4akMsSUFBSXNqQyxFQUFBQSxLQUNwQjM1QyxLQUFLKzVDLFlBQVlsekMsS0FBSzh5QyxFQUFBQSxHQUV4QjM1QyxLQUFLNjVDLFFBQVF6akMsSUFBSXVqQyxJQUFXMy9CLEVBQUFBLEdBQ3JCQTtVQUNULEVBQUEsQ0FBQSxDQUFBLEdBQUNtL0I7UUFBQSxFQS9OZ0I7QUNGWDc0QyxXQUlOLEVBQUVnTSxRQUFRLFVBQVVHLE1BQUFBLEtBQU0sR0FBUSxFQUNsQ3NnQyxPQUFPLFNBQWV2L0IsSUFBQUE7QUFFcEIsaUJBQU9BLE1BQVdBO1FBQ25CLEVBQUEsQ0FBQTtBQ1BILFlBQUEsS0FBQSxFQUFXOUwsR0FFV2dzQixPQUFPcWYsS0FBQUEsR0NEekJtTixLQUZTNTVDLEVBRWU2NUMsVUFLNUJDLEtBQWlCMXNCLE9BQU95c0IsWUFBWSxTQUFrQno2QyxJQUFBQTtBQUNwRCxpQkFBb0IsWUFBQSxPQUFOQSxNQUFrQnc2QyxHQUFleDZDLEVBQUFBO1FBQ2pEO0FDVFFZLFdBS04sRUFBRWdNLFFBQVEsVUFBVUcsTUFBQUEsS0FBTSxHQUFRLEVBQUUwdEMsVUFKakJ6NEMsR0FBQUEsQ0FBQUE7QUNBckIsWUFBQSxLQUFBLEVBQVdBLEdBRVdnc0IsT0FBT3lzQixRQUFBQSxHQ0Z6QkUsS0FBUTM0QyxHQUF3Q29sQjtBQUQ1Q3htQixXQVFOLEVBQUVnTSxRQUFRLFNBQVNLLE9BQUFBLE1BQWFHLFFBQUFBLENBTlJySixHQUVjLE1BQUEsRUFBQSxHQUlvQixFQUMxRHFqQixNQUFNLFNBQWNMLElBQUFBO0FBQ2xCLGlCQUFPNHpCLEdBQU1yNkMsTUFBTXltQixJQUFZeGxCLFVBQVV5RCxTQUFTLElBQUl6RCxVQUFVLENBQUEsSUFBQSxNQUFLNGQ7UUFDdEUsRUFBQSxDQUFBO0FDVkgsWUFFQWlJLEtBRm1CcGxCLEdBRVcsT0FBQSxFQUFTb2xCLE1DSG5DbGlCLEtBQWdCdEUsSUFDaEJtRSxLQUFTL0MsSUFFVHdkLEtBQWlCbEosTUFBTXBWLFdDSHZCb1EsS0RLYSxTQUFVdFIsSUFBQUE7QUFDekIsY0FBSXVSLEtBQU12UixHQUFHb25CO0FBQ2IsaUJBQU9wbkIsT0FBT3dmLE1BQW1CdGEsR0FBY3NhLElBQWdCeGYsRUFBQUEsS0FBT3VSLE9BQVFpTyxHQUFlNEgsT0FBUXJpQixLQUFTd007UUFDaEgsR0FBQSxLQUFBLEVDTmlCRCxFQUFBQSxHQUFBQSxLQUFBQSxFQ0ROdFAsR0FFV1UsT0FBT3FELHFCQUFBQSxHQUFBQSxLQUFBQSxFQUFBQSxTQUFBQSxDQUFBQSxFQUFBQSxHQ0h6QjJXLEtBQUk5YixJQUNKSixLQUFRd0IsR0FDUndDLEtBQWtCVCxHQUNsQjZsQixLQUFpQ3RqQixFQUEyRG5ELEdBQzVGcUcsS0FBY3ZCO0FBTWxCeVUsV0FBRSxFQUFFOVAsUUFBUSxVQUFVRyxNQUFBQSxNQUFZSyxRQUFBQSxDQUpwQjVELE1BQWVoSixHQUFNLFdBQUE7QUFBY29wQixhQUErQixDQUFBO1FBQUcsQ0FBQSxHQUlqQzFqQixNQUFBQSxDQUFPc0QsR0FBQUEsR0FBZSxFQUN0RXhHLDBCQUEwQixTQUFrQ2hELElBQUk4RyxJQUFBQTtBQUM5RCxpQkFBTzhpQixHQUErQnBsQixHQUFnQnhFLEVBQUFBLEdBQUs4RyxFQUFBQTtRQUM1RCxFQUFBLENBQUE7QUNaSCxZQUVJcEUsS0FGT1YsR0FFT1UsUUFFZE0sS0FBMkJtbEIsR0FBQTNTLFVBQWlCLFNBQWtDeFYsSUFBSThHLElBQUFBO0FBQ3BGLGlCQUFPcEUsR0FBT00seUJBQXlCaEQsSUFBSThHLEVBQUFBO1FBQzdDO0FBRUlwRSxXQUFPTSx5QkFBeUJrRCxTQUFNbEQsR0FBeUJrRCxPQUFBQTtBQUFPLFlDUDFFbEQsS0FBQUEsR0FBQUEsU0FBQUEsS0FBQUEsRUNIaUJwQyxFQUFBQSxHQ0dic3ZCLEtBQVVuc0IsSUFDVlMsS0FBa0I4QixHQUNsQjZoQixLQUFpQ2xnQixHQUNqQ29ZLEtBQWlCbFk7QUFMYnZILFdBU04sRUFBRWdNLFFBQVEsVUFBVUcsTUFBQUEsTUFBWTdHLE1BQUFBLENBUmhCbEUsRUFBQUEsR0FRc0MsRUFDdEQ0NEMsMkJBQTJCLFNBQW1DbHZDLElBQUFBO0FBTzVELG1CQURJNUUsSUFBS3pELElBTEwwRyxLQUFJdkYsR0FBZ0JrSCxFQUFBQSxHQUNwQjFJLEtBQTJCbWxCLEdBQStCaGxCLEdBQzFEbU0sS0FBTzRnQixHQUFRbm1CLEVBQUFBLEdBQ2ZmLEtBQVMsQ0FBQSxHQUNUa0YsS0FBUSxHQUVMb0IsR0FBS3RLLFNBQVNrSjtBQUFBQSx3QkFDbkI3SyxLQUFhTCxHQUF5QitHLElBQUdqRCxLQUFNd0ksR0FBS3BCLElBQUFBLENBQUFBLE1BQ3RCbVMsR0FBZXJYLElBQVFsQyxJQUFLekQsRUFBQUE7QUFFNUQsaUJBQU8yRjtRQUNSLEVBQUEsQ0FBQTtBQ3JCSCxZQUFBLEtBQUEsRUFBV2hILEdBRVdVLE9BQU9rNEMseUJBQUFBLEdBQUFBLEtBQUFBLEVBQUFBLFNBQUFBLENBQUFBLEVBQUFBLEdDSHpCbCtCLEtBQUk5YixJQUNKNEksS0FBY3hILEdBQ2Q4VyxLQUFtQi9VLEdBQWlEWjtBQUt2RTAzQyxXQUFDLEVBQUVqdUMsUUFBUSxVQUFVRyxNQUFBQSxNQUFZSyxRQUFRMUssT0FBT29XLHFCQUFxQkEsSUFBa0I1UyxNQUFBQSxDQUFPc0QsR0FBQUEsR0FBZSxFQUM1R3NQLGtCQUFrQkEsR0FBQUEsQ0FBQUE7QUNQcEIsWUFFSXBXLEtBRk9WLEdBRU9VLFFBRWRvVyxLQUFtQkssR0FBQTNELFVBQWlCLFNBQTBCckYsSUFBR2lqQixJQUFBQTtBQUNuRSxpQkFBTzF3QixHQUFPb1csaUJBQWlCM0ksSUFBR2lqQixFQUFBQTtRQUNwQztBQUVJMXdCLFdBQU9vVyxpQkFBaUI1UyxTQUFNNFMsR0FBaUI1UyxPQUFBQTtBQUFPLFlBQUEsS0FBQSxFQUFBLEdBQUEsT0FBQSxHQUFBLEtBQUEsRUNWekN0RixFQUFBQTtBQ0VGLGlCQUFTazZDLEdBQWdCeHNDLElBQUt4SCxJQUFLbkQsSUFBQUE7QUFZaEQsa0JBWEFtRCxLQUFNb0MsR0FBY3BDLEVBQUFBLE1BQ1R3SCxLQUNUNGYsR0FBdUI1ZixJQUFLeEgsSUFBSyxFQUMvQm5ELE9BQU9BLElBQ1BMLFlBQUFBLE1BQ0FNLGNBQUFBLE1BQ0FDLFVBQUFBLEtBQVUsQ0FBQSxJQUdaeUssR0FBSXhILEVBQUFBLElBQU9uRCxJQUVOMks7UUFDVDtBQ2RBLFlBQUlwTyxLQUFTVSxHQUNUSixLQUFRd0IsR0FFUkosS0FBVzBFLElBQ1hvc0IsS0FBT3pxQixHQUFvQ3lxQixNQUMzQ0wsS0FBY2xxQixJQUVkK08sS0FMY25ULEVBS08sR0FBR21ULE1BQUFBLEdBQ3hCNmpDLEtBQWM3NkMsR0FBTzg2QyxZQUNyQi8wQyxLQUFTL0YsR0FBTytGLFFBQ2hCdVYsS0FBV3ZWLE1BQVVBLEdBQU9HLFVBT2hDNjBDLEtBTmEsSUFBSUYsR0FBWTFvQixLQUFjLElBQUEsS0FBQSxLQUFXNm9CLEtBRWhEMS9CLE1BQUFBLENBQWFoYixHQUFNLFdBQUE7QUFBY3U2QyxhQUFZcjRDLE9BQU84WSxFQUFBQSxDQUFBQTtRQUFhLENBQUEsSUFJN0MsU0FBb0JoUixJQUFBQTtBQUM1QyxjQUFJMndDLEtBQWdCem9CLEdBQUs5d0IsR0FBUzRJLEVBQUFBLENBQUFBLEdBQzlCeEIsS0FBUyt4QyxHQUFZSSxFQUFBQTtBQUN6QixpQkFBa0IsTUFBWG55QyxNQUE2QyxRQUE3QmtPLEdBQU9pa0MsSUFBZSxDQUFBLElBQUEsS0FBa0JueUM7UUFDakUsSUFBSSt4QztBQ3JCSW42QyxXQUtOLEVBQUVWLFFBQUFBLE1BQWNrTixRQUFRNHRDLGVBSlJoNUMsR0FBQUEsR0FJc0MsRUFDdERnNUMsWUFMZ0JoNUMsR0FBQUEsQ0FBQUE7QUNBbEIsWUFBQSxLQUFBLEVBQVdBLEdBRVdnNUMsVUFBQUEsR0NIbEJ0K0IsS0FBSTliLElBQ0pKLEtBQVF3QixHQUNSeWpCLEtBQXNCMWhCLEdBQStEWjtBQU96RnVaLFdBQUUsRUFBRTlQLFFBQVEsVUFBVUcsTUFBQUEsTUFBWUssUUFKUjVNLEdBQU0sV0FBQTtBQUFjLGlCQUFBLENBQVFrQyxPQUFPK2lCLG9CQUFvQixDQUFBO1FBQUcsQ0FBQSxFQUFBLEdBSW5CLEVBQy9EQSxxQkFBcUJBLEdBQUFBLENBQUFBO0FDVHZCLFlBRUkvaUIsS0FGT1YsR0FFT1UsUUNIZDRPLEtES2EsU0FBNkJ0UixJQUFBQTtBQUM1QyxpQkFBTzBDLEdBQU8raUIsb0JBQW9CemxCLEVBQUFBO1FBQ3BDLEdBQUEsS0FBQSxFQ0xpQnNSLEVBQUFBO0FDd0JWLGlCQUFTOHBDLEdBQVNDLElBQVdDLElBQUFBO0FBRWxDLGNBQU1DLEtBQVUsQ0FBQyxRQUFRLFFBQVEsT0FBQSxHQUM3QjUzQyxLQUFBQSxNQUVFNjNDLEtBQVNDLEdBQVFILElBQU0sUUFBQTtBQUM3QixjQUFzQixhQUFBLE9BQVhFO0FBQ1Q3M0MsWUFBQUEsS0FBUTYzQzttQkFDbUIsYUFBbEJodUIsR0FBT2d1QixFQUFBQSxHQUFxQjtBQUNyQyxnQkFBQSxPQUFJM08sR0FBQTBPLEVBQUFBLEVBQU9uNkMsS0FBUG02QyxJQUFnQkYsRUFBQUE7QUFDbEIsb0JBQU0sSUFBSS9TLE1BQ1IsMEJBQ0UrUyxLQURGLHlCQUlFRSxHQUFRcnJDLEtBQUssTUFBQSxJQUNiLEdBQUE7QUFJTixnQkFBTXdyQyxLQUFhRCxHQUFRSCxJQUFNLENBQUMsVUFBVUQsRUFBQUEsQ0FBQUE7QUFDbEIseUJBQUEsT0FBZkssTUFBa0QsY0FBQSxPQUFmQSxPQUM1Qy8zQyxLQUFRKzNDO1VBRVo7QUFFQSxpQkFBTy8zQztRQUNUO0FBVU8saUJBQVNnNEMsR0FBWTltQyxJQUFNcUssSUFBTzA4QixJQUFBQTtBQUN2QyxjQUFJL21DLEdBQUsyK0IsU0FBUyxLQUFLMytCLEdBQUs0K0IsVUFBVTtBQUNwQyxtQkFBQTtBQUdGLGNBQUEsV0FBSW1JLElBQTZCO0FBRS9CLGdCQUFNQyxLQUFNLEVBQ1ZsdUMsR0FBR3VSLEdBQU12UixJQUFJaXVDLEdBQWNqdUMsR0FDM0IrRCxHQUFHd04sR0FBTXhOLElBQUlrcUMsR0FBY2xxQyxFQUFBQTtBQUc3QixnQkFBNEIsTUFBeEJrcUMsR0FBY3JnQixPQUFhO0FBRzdCLGtCQUFNQSxLQUFBQSxDQUFTcWdCLEdBQWNyZ0I7QUFNN0JyYyxjQUFBQSxLQUphLEVBQ1h2UixHQUFHMU4sS0FBS3dVLElBQUk4bUIsRUFBQUEsSUFBU3NnQixHQUFJbHVDLElBQUkxTixLQUFLeVUsSUFBSTZtQixFQUFBQSxJQUFTc2dCLEdBQUlucUMsR0FDbkRBLEdBQUd6UixLQUFLeVUsSUFBSTZtQixFQUFBQSxJQUFTc2dCLEdBQUlsdUMsSUFBSTFOLEtBQUt3VSxJQUFJOG1CLEVBQUFBLElBQVNzZ0IsR0FBSW5xQyxFQUFBQTtZQUd2RDtBQUNFd04sY0FBQUEsS0FBUTI4QjtVQU9aO0FBRUEsY0FBTUMsS0FBUWpuQyxHQUFLbEgsSUFBSWtILEdBQUsyK0IsT0FDdEJ1SSxLQUFTbG5DLEdBQUtuRCxJQUFJbUQsR0FBSzIrQjtBQUU3QixpQkFDRTMrQixHQUFLMi9CLE9BQU90MUIsR0FBTXZSLEtBQ2xCbXVDLEtBQVE1OEIsR0FBTXZSLEtBQ2RrSCxHQUFLNC9CLE1BQU12MUIsR0FBTXhOLEtBQ2pCcXFDLEtBQVM3OEIsR0FBTXhOO1FBRW5CO0FBUU8saUJBQVNzcUMsR0FBYXpNLElBQUFBO0FBRTNCLGlCQUF1QixZQUFBLE9BQVRBLE1BQThCLE9BQVRBO1FBQ3JDO0FBV08saUJBQVMwTSxHQUFzQnhxQyxJQUFLOHBCLElBQU94bUIsSUFBUWtsQixJQUFBQTtBQUN4RCxjQUFJdHNCLEtBQUlzc0IsR0FBS3RzQixHQUNUK0QsS0FBSXVvQixHQUFLdm9CO0FBRWIsY0FBcUMsY0FBQSxPQUExQnVvQixHQUFLaWlCLGtCQUFpQztBQUkvQyxnQkFBTUMsS0FBZWxpQixHQUFLaWlCLGlCQUFpQnpxQyxJQUFLOHBCLEVBQUFBLEdBQzFDNmdCLEtBQWtCbjhDLEtBQUt5VSxJQUFJNm1CLEVBQUFBLElBQVM0Z0IsSUFDcENFLEtBQWtCcDhDLEtBQUt3VSxJQUFJOG1CLEVBQUFBLElBQVM0Z0I7QUFLdENFLFlBQUFBLE9BQW9CRixNQUN0Qnh1QyxNQUFLd3VDLElBQ0x6cUMsS0FBSXVvQixHQUFLdm9CLEtBQ0EwcUMsT0FBb0JELE1BQzdCeHVDLEtBQUlzc0IsR0FBS3RzQixHQUNUK0QsTUFBS3lxQyxPQUVMeHVDLE1BQUswdUMsSUFDTDNxQyxNQUFLMHFDO1VBRVQ7QUFBV25pQixZQUFBQSxHQUFLd1csTUFBTStDLFFBQVF2WixHQUFLd1csTUFBTWdELFVBQ3ZDOWxDLEtBQUlzc0IsR0FBS3RzQixJQUF1QixNQUFuQnNzQixHQUFLd1csTUFBTStDLE9BQ3hCOWhDLEtBQUl1b0IsR0FBS3ZvQixJQUFJcUQsT0FFYnBILEtBQUlzc0IsR0FBS3RzQixJQUFJb0gsSUFDYnJELEtBQUl1b0IsR0FBS3ZvQixJQUF3QixNQUFwQnVvQixHQUFLd1csTUFBTWdEO0FBRzFCLGlCQUFPLEVBQUU5bEMsR0FBQUEsSUFBRytELEdBQUFBLEdBQUFBO1FBQ2Q7QUM5SkEsWUFFQStNLEtBRm1CMWEsR0FFVyxPQUFBLEVBQVMwYSxRQ0huQzNhLEtBQVU5QixJQUNWMEYsS0FBUzNELElBQ1RtQixLQUFnQm9CLElBQ2hCdkIsS0NKU25FLElETVQ0ZSxLQUFpQmxKLE1BQU1wVixXQUV2QjRnQixLQUFlLEVBQ2pCTyxjQUFBQSxNQUNBVSxVQUFBQSxLQUFVLEdFWFp0RSxLRmNpQixTQUFVemUsSUFBQUE7QUFDekIsY0FBSXVSLEtBQU12UixHQUFHeWU7QUFDYixpQkFBT3plLE9BQU93ZixNQUFtQnRhLEdBQWNzYSxJQUFnQnhmLEVBQUFBLEtBQU91UixPQUFRaU8sR0FBZWYsVUFDeEYvVyxHQUFPb2EsSUFBY2hlLEdBQVE5RCxFQUFBQSxDQUFBQSxJQUFPK0UsS0FBU3dNO1FBQ3BELEdBQUEsS0FBQSxFQUFBLEVBQUEsR0dKTStxQyxLQUFnQixXQUFBO0FBSXBCLG1CQUFBQSxHQUFZQyxJQUFBQTtBQUFhdDRCLGVBQUFBLE1BQUFxNEIsRUFBQUEsR0FDdkJoOEMsS0FBS2k4QyxjQUFjQSxJQUNuQmo4QyxLQUFLaUwsVUFBVSxHQUNmakwsS0FBS2t6QyxRQUFRLEdBQ2JsekMsS0FBS216QyxTQUFTLEdBQ2RuekMsS0FBS2s4QyxRQUFRLENBQUE7VUFDZjtBQXVNQyxpQkFyTURydUIsR0FBQW11QixJQUFBLENBQUEsRUFBQXgxQyxLQUFBLFFBQUFuRCxPQVFBLFNBQUs2ckIsSUFBRytmLElBQUFBO0FBQXNCLGdCQUFoQmtOLEtBQUdsN0MsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLElBQUFBLFVBQUEsQ0FBQSxJQUFHO0FBQUEsdUJBQ2RqQixLQUFLazhDLE1BQU1odEIsRUFBQUEsTUFDYmx2QixLQUFLazhDLE1BQU1odEIsRUFBQUEsSUFBSyxFQUNkZ2tCLE9BQU8sR0FDUEMsUUFBUSxHQUNSaUosUUFBUSxDQUFBLEVBQUE7QUFVWixnQkFBSUMsS0FBVXBOO0FBQUFBLHVCQUNWQSxNQUErQixPQUFUQSxPQUFhb04sS0FBVTtBQUdqRCxnQkFBTTN6QyxLQUFTMUksS0FBS2k4QyxZQUFZSSxJQUFTRixFQUFBQSxHQUNuQ0csS0FBUTdDLEdBQWMsQ0FBQSxHQUFFOEMsR0FBRTd6QyxFQUFBQSxDQUFBQTtBQUNoQzR6QyxZQUFBQSxHQUFNck4sT0FBT0EsSUFDYnFOLEdBQU1wSixRQUFReHFDLEdBQU93cUMsT0FDckJvSixHQUFNSCxNQUFNQSxJQUFBQSxXQUVSbE4sTUFBK0IsT0FBVEEsT0FDeEJxTixHQUFNcEosUUFBUSxJQUdoQmx6QyxLQUFLazhDLE1BQU1odEIsRUFBQUEsRUFBR2t0QixPQUFPdjFDLEtBQUt5MUMsRUFBQUEsR0FHMUJ0OEMsS0FBS2s4QyxNQUFNaHRCLEVBQUFBLEVBQUdna0IsU0FBU29KLEdBQU1wSjtVQUMvQixFQUFBLEdBRUEsRUFBQTFzQyxLQUFBLFlBQUFuRCxPQUtBLFdBQUE7QUFDRSxnQkFBTW01QyxLQUFPeDhDLEtBQUtrOEMsTUFBTWw4QyxLQUFLaUwsT0FBQUE7QUFDN0IsbUJBQUEsV0FBSXV4QyxLQUEyQixJQUV4QkEsR0FBS3RKO1VBQ2QsRUFBQSxHQUVBLEVBQUExc0MsS0FBQSxVQUFBbkQsT0FNQSxTQUFPNHJDLElBQUFBO0FBQXNCLGdCQUFoQmtOLEtBQUdsN0MsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLElBQUFBLFVBQUEsQ0FBQSxJQUFHO0FBQ2pCakIsaUJBQUt5OEMsS0FBS3o4QyxLQUFLaUwsU0FBU2drQyxJQUFNa04sRUFBQUE7VUFDaEMsRUFBQSxHQUVBLEVBQUEzMUMsS0FBQSxXQUFBbkQsT0FNQSxTQUFRNHJDLElBQUFBO0FBQXNCLGdCQUFoQmtOLEtBQUdsN0MsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLElBQUFBLFVBQUEsQ0FBQSxJQUFHO0FBQ2xCakIsaUJBQUt5OEMsS0FBS3o4QyxLQUFLaUwsU0FBU2drQyxJQUFNa04sRUFBQUEsR0FDOUJuOEMsS0FBS2lMO1VBQ1AsRUFBQSxHQUVBLEVBQUF6RSxLQUFBLHdCQUFBbkQsT0FPQSxXQUFBO0FBQ0UscUJBQVMyaEIsS0FBSSxHQUFHQSxLQUFJaGxCLEtBQUtrOEMsTUFBTXgzQyxRQUFRc2dCLE1BQUs7QUFDMUMsa0JBQU13M0IsS0FBT3g4QyxLQUFLazhDLE1BQU1sM0IsRUFBQUEsR0FHcEJtdUIsS0FBUztBQUViLGtCQUFBLFdBQUlxSixHQUFLSjtBQUVQLHlCQUFTbHRCLEtBQUksR0FBR0EsS0FBSXN0QixHQUFLSixPQUFPMTNDLFFBQVF3cUIsTUFBSztBQUMzQyxzQkFBTW90QixLQUFRRSxHQUFLSixPQUFPbHRCLEVBQUFBO0FBRXRCaWtCLGtCQUFBQSxLQUFTbUosR0FBTW5KLFdBQ2pCQSxLQUFTbUosR0FBTW5KO2dCQUVuQjtBQUdGcUosY0FBQUEsR0FBS3JKLFNBQVNBO1lBQ2hCO1VBQ0YsRUFBQSxHQUVBLEVBQUEzc0MsS0FBQSxzQkFBQW5ELE9BS0EsV0FBQTtBQUdFLHFCQUZJNnZDLEtBQVEsR0FDUkMsS0FBUyxHQUNKbnVCLEtBQUksR0FBR0EsS0FBSWhsQixLQUFLazhDLE1BQU14M0MsUUFBUXNnQixNQUFLO0FBQzFDLGtCQUFNdzNCLEtBQU94OEMsS0FBS2s4QyxNQUFNbDNCLEVBQUFBO0FBRXBCdzNCLGNBQUFBLEdBQUt0SixRQUFRQSxPQUNmQSxLQUFRc0osR0FBS3RKLFFBRWZDLE1BQVVxSixHQUFLcko7WUFDakI7QUFFQW56QyxpQkFBS2t6QyxRQUFRQSxJQUNibHpDLEtBQUttekMsU0FBU0E7VUFDaEIsRUFBQSxHQUVBLEVBQUEzc0MsS0FBQSxxQkFBQW5ELE9BU0EsV0FBQTtBQUVFLHFCQURNcTVDLEtBQVcsQ0FBQSxHQUNSMTNCLEtBQUksR0FBR0EsS0FBSWhsQixLQUFLazhDLE1BQU14M0MsUUFBUXNnQixNQUFLO0FBQzFDLGtCQUFNdzNCLEtBQU94OEMsS0FBS2s4QyxNQUFNbDNCLEVBQUFBO0FBSXhCLGtCQUEyQixNQUF2QnczQixHQUFLSixPQUFPMTNDLFdBR1pzZ0IsT0FBTWhsQixLQUFLazhDLE1BQU14M0MsU0FBUyxLQUNULE1BQWY4M0MsR0FBS3RKLFFBRFg7QUFJQSxvQkFBTXlKLEtBQVUsQ0FBQTtBQUNoQmxELG1CQUFja0QsSUFBU0gsRUFBQUEsR0FDdkJHLEdBQVFQLFNBQVMsQ0FBQTtBQUlqQix5QkFGSVEsS0FBQUEsUUFDRUMsS0FBWSxDQUFBLEdBQ1QzdEIsS0FBSSxHQUFHQSxLQUFJc3RCLEdBQUtKLE9BQU8xM0MsUUFBUXdxQixNQUFLO0FBQzNDLHNCQUFNb3RCLEtBQVFFLEdBQUtKLE9BQU9sdEIsRUFBQUE7QUFDTix3QkFBaEJvdEIsR0FBTXBKLFFBQ1IySixHQUFVaDJDLEtBQUt5MUMsRUFBQUEsSUFBQUEsV0FFWE0sT0FDRkEsS0FBa0JOO2dCQUd4QjtBQUd5QixzQkFBckJPLEdBQVVuNEMsVUFBQUEsV0FBZ0JrNEMsTUFDNUJDLEdBQVVoMkMsS0FBSysxQyxFQUFBQSxHQUdqQkQsR0FBUVAsU0FBU1MsSUFFakJILEdBQVM3MUMsS0FBSzgxQyxFQUFBQTtjQTFCZDtZQTJCRjtBQUVBLG1CQUFPRDtVQUNULEVBQUEsR0FFQSxFQUFBbDJDLEtBQUEsWUFBQW5ELE9BS0EsV0FBQTtBQUdFckQsaUJBQUs4OEMscUJBQUFBLEdBQ0w5OEMsS0FBSys4QyxtQkFBQUE7QUFDTCxnQkFBTUwsS0FBVzE4QyxLQUFLZzlDLGtCQUFBQTtBQUd0QixtQkFBTyxFQUNMOUosT0FBT2x6QyxLQUFLa3pDLE9BQ1pDLFFBQVFuekMsS0FBS216QyxRQUNiK0ksT0FBT1EsR0FBQUE7VUFFWCxFQUFBLENBQUEsQ0FBQSxHQUFDVjtRQUFBLEVBak5tQixHQ1ZoQmlCLEtBQWEsRUFFakIsT0FBTyxPQUNQLE9BQU8sT0FDUCxVQUFVLFVBQ1YsUUFBUSxTQUNSLFFBQVEsU0FDUixXQUFXLFlBRVgsS0FBSyxNQUNMQyxHQUFHLEtBQ0gsS0FBSyxLQUNMQyxXQUFXLFFBQ1hDLFdBQVcsUUFDWEMsV0FBVyxPQUFBLEdBU1BDLEtBQWlCLFdBQUE7QUFNckIsbUJBQUFBLEdBQVlyTyxJQUFBQTtBQUFNdHJCLGVBQUFBLE1BQUEyNUIsRUFBQUEsR0FDaEJ0OUMsS0FBS2l2QyxPQUFPQSxJQUNaanZDLEtBQUt1OUMsT0FBQUEsT0FDTHY5QyxLQUFLdzlDLE9BQUFBLE9BQ0x4OUMsS0FBS3k5QyxPQUFBQSxPQUNMejlDLEtBQUswOUMsVUFBQUEsT0FDTDE5QyxLQUFLa1gsV0FBVyxHQUNoQmxYLEtBQUt5MUMsU0FBUyxJQUNkejFDLEtBQUsyOUMsV0FBVyxDQUFBLEdBRWhCMzlDLEtBQUtvOEMsU0FBUyxDQUFBO1VBQ2hCO0FBd05DLGlCQXRORHZ1QixHQUFBeXZCLElBQUEsQ0FBQSxFQUFBOTJDLEtBQUEsT0FBQW5ELE9BTUEsV0FBQTtBQUNFLG1CQUFnQyxNQUF6QnJELEtBQUsyOUMsU0FBU2o1QyxTQUFlLFdBQVcxRSxLQUFLMjlDLFNBQVMsQ0FBQTtVQUMvRCxFQUFBLEdBRUEsRUFBQW4zQyxLQUFBLFdBQUFuRCxPQU1BLFdBQUE7QUFDRSxtQkFBNkIsTUFBekJyRCxLQUFLMjlDLFNBQVNqNUMsU0FBcUIsV0FDVCxXQUFyQjFFLEtBQUsyOUMsU0FBUyxDQUFBLElBQXNCLFNBRXZDMzlDLEtBQUt1OUMsUUFBUXY5QyxLQUFLdzlDLE9BQ2IsYUFDRXg5QyxLQUFLdTlDLE9BQ1AsU0FDRXY5QyxLQUFLdzlDLE9BQ1AsU0FBQTtVQUdiLEVBQUEsR0FFQSxFQUFBaDNDLEtBQUEsYUFBQW5ELE9BR0EsV0FBQTtBQUNNckQsaUJBQUswOUMsWUFDUDE5QyxLQUFLdW1DLElBQUksR0FBQSxHQUNUdm1DLEtBQUswOUMsVUFBQUEsUUFFSDE5QyxLQUFLeTFDLE9BQU8vd0MsU0FBUyxNQUN2QjFFLEtBQUtvOEMsT0FBT3YxQyxLQUFLLEVBQUVvb0MsTUFBTWp2QyxLQUFLeTFDLFFBQVEwRyxLQUFLbjhDLEtBQUs0OUMsUUFBQUEsRUFBQUEsQ0FBQUEsR0FDaEQ1OUMsS0FBS3kxQyxTQUFTO1VBRWxCLEVBQUEsR0FFQSxFQUFBanZDLEtBQUEsT0FBQW5ELE9BTUEsU0FBSTRyQyxJQUFBQTtBQUNXLG9CQUFUQSxPQUNGanZDLEtBQUswOUMsVUFBQUEsT0FFSDE5QyxLQUFLMDlDLFlBQ1AxOUMsS0FBS3kxQyxVQUFVLEtBQ2Z6MUMsS0FBSzA5QyxVQUFBQSxRQUVLLE9BQVJ6TyxPQUNGanZDLEtBQUt5MUMsVUFBVXhHO1VBRW5CLEVBQUEsR0FFQSxFQUFBem9DLEtBQUEsV0FBQW5ELE9BTUEsU0FBUXc2QyxJQUFBQTtBQUNOLG1CQUFBLENBQUEsQ0FBSSxRQUFRdDlDLEtBQUtzOUMsRUFBQUEsTUFDVjc5QyxLQUFLeTlDLE9BR1J6OUMsS0FBS3VtQyxJQUFJc1gsRUFBQUEsSUFGVDc5QyxLQUFLMDlDLFVBQUFBLE1BQVU7VUFRckIsRUFBQSxHQUVBLEVBQUFsM0MsS0FBQSxVQUFBbkQsT0FJQSxTQUFPeTZDLElBQUFBO0FBQ0w5OUMsaUJBQUsrOUMsVUFBQUEsR0FDTC85QyxLQUFLODlDLEVBQUFBLElBQUFBLE1BQ0w5OUMsS0FBSzI5QyxTQUFTSyxRQUFRRixFQUFBQTtVQUN4QixFQUFBLEdBRUEsRUFBQXQzQyxLQUFBLFlBQUFuRCxPQUlBLFNBQVN5NkMsSUFBQUE7QUFDUDk5QyxpQkFBSys5QyxVQUFBQSxHQUNMLzlDLEtBQUs4OUMsRUFBQUEsSUFBQUEsT0FDTDk5QyxLQUFLMjlDLFNBQVMxUixNQUFBQTtVQUNoQixFQUFBLEdBRUEsRUFBQXpsQyxLQUFBLGlCQUFBbkQsT0FLQSxTQUFjeTZDLElBQVNwbkMsSUFBQUE7QUFFckIsbUJBQUEsRUFBSzFXLEtBQUt5OUMsUUFBU3o5QyxLQUFLODlDLEVBQUFBLEtBQUFBLENBQVk5OUMsS0FBS2lELE1BQU15VCxFQUFBQSxPQUM3QzFXLEtBQUtpK0MsT0FBT0gsRUFBQUEsR0FBQUE7VUFLaEIsRUFBQSxHQUVBLEVBQUF0M0MsS0FBQSxTQUFBbkQsT0FNQSxTQUFNcVQsSUFBQUE7QUFBcUIsZ0JBQWhCd25DLEtBQUFBLEVBQU9qOUMsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLE1BQUFBLFVBQUEsQ0FBQSxHQUNnQ2s5QyxLQUFBbnZCLEdBQXZCaHZCLEtBQUtvK0MsY0FBYzFuQyxFQUFBQSxHQUFJLENBQUEsR0FBekMybkMsS0FBTUYsR0FBQSxDQUFBLEdBQUV6NUMsS0FBTXk1QyxHQUFBLENBQUEsR0FDZkcsS0FBVUQsR0FBTzk5QyxLQUFLUCxLQUFLaXZDLEtBQUtFLE9BQU9udkMsS0FBS2tYLFVBQVV4UyxFQUFBQSxDQUFBQTtBQU01RCxtQkFKSTQ1QyxNQUFXSixPQUNibCtDLEtBQUtrWCxZQUFZeFMsS0FBUyxJQUdyQjQ1QztVQUNULEVBQUEsR0FFQSxFQUFBOTNDLEtBQUEsZUFBQW5ELE9BTUEsU0FBWXk2QyxJQUFTcG5DLElBQUs2bkMsSUFBQUE7QUFDeEIsZ0JBQUlDLEtBQVd4K0MsS0FBS204QyxJQUFBQSxNQUFVMkI7QUFROUIsbUJBQUEsRUFBQSxFQUxFVSxLQUZjLFdBQVpWLEtBRVNVLE1BQVl4K0MsS0FBS3k5QyxPQUVqQmUsTUFBQUEsQ0FBYXgrQyxLQUFLeTlDLFNBQUFBLENBR2Z6OUMsS0FBS2lELE1BQU15VCxFQUFBQSxPQUFBQSxXQUNyQjZuQyxNQUlBditDLEtBQUtrWCxhQUFhbFgsS0FBS2l2QyxLQUFLdnFDLFNBQVMsS0FDckMxRSxLQUFLaUQsTUFBTXM3QyxJQUFBQSxLQUFTLE1BRXBCditDLEtBQUt5K0MsU0FBU1gsRUFBQUEsSUFHaEI5OUMsS0FBS3krQyxTQUFTWCxFQUFBQSxHQUFBQTtVQU9wQixFQUFBLEdBRUEsRUFBQXQzQyxLQUFBLFdBQUFuRCxPQUtBLFNBQVFxVCxJQUFLclQsSUFBQUE7QUFDWCxtQkFBQSxDQUFBLENBQUlyRCxLQUFLaUQsTUFBTXlULEVBQUFBLE1BQ2IxVyxLQUFLdW1DLElBQUlsakMsRUFBQUEsR0FDVHJELEtBQUtrWCxZQUFZeFMsU0FBUyxHQUFBO1VBSzlCLEVBQUEsR0FFQSxFQUFBOEIsS0FBQSxpQkFBQW5ELE9BV0EsU0FBY3FULElBQUFBO0FBQ1osZ0JBQUloUyxJQUNBMjVDO0FBQ0osZ0JBQUkzbkMsY0FBZXViO0FBQ2pCb3NCLGNBQUFBLEtBQVMzbkMsSUFDVGhTLEtBQVM7aUJBQ0o7QUFFTCxrQkFBTWc2QyxLQUFXekIsR0FBV3ZtQyxFQUFBQTtBQUUxQjJuQyxjQUFBQSxLQUFBQSxXQURFSyxLQUNPQSxLQUVBLElBQUl6c0IsT0FBT3ZiLEVBQUFBLEdBR3RCaFMsS0FBU2dTLEdBQUloUztZQUNmO0FBRUEsbUJBQU8sQ0FBQzI1QyxJQUFRMzVDLEVBQUFBO1VBQ2xCLEVBQUEsQ0FBQSxDQUFBLEdBQUM0NEM7UUFBQSxFQXpPb0IsR0FpUGpCcUIsS0FBYSxXQUFBO0FBT2pCLG1CQUFBQSxHQUFZeHRDLElBQUtILElBQVE0dEMsSUFBVTNNLElBQUFBO0FBQU8sZ0JBQUF0VCxLQUFBMytCO0FBQUEyakIsZUFBQUEsTUFBQWc3QixFQUFBQSxHQUN4QzMrQyxLQUFLbVIsTUFBTUEsSUFDWG5SLEtBQUtnUixTQUFTQSxJQUNkaFIsS0FBSzQrQyxXQUFXQSxJQUNoQjUrQyxLQUFLaXlDLFFBQVFBO0FBeUJianlDLGlCQUFLazhDLFFBQVEsSUFBSUYsR0FoQkMsU0FBQy9NLElBQU1rTixJQUFBQTtBQUN2QixrQkFBQSxXQUFJbE47QUFBb0IsdUJBQU87QUFJL0Isa0JBQU05d0IsS0FBU3dnQixHQUFLM3RCLE9BQU82dEMsb0JBQW9CMXRDLElBQUt5dEMsSUFBVTNNLElBQU9rSyxFQUFBQSxHQUVqRWpKLEtBQVE7QUFDQyxxQkFBVGpFLE9BRUZpRSxLQURnQnZVLEdBQUt4dEIsSUFBSThxQyxZQUFZaE4sRUFBQUEsRUFDckJpRTtBQUdsQixxQkFBTyxFQUFFQSxPQUFBQSxJQUFPLzBCLFFBQVFBLEdBQUFBO1lBQUFBLENBQUFBO1VBSTVCO0FBZ1ZDLGlCQTlVRDBQLEdBQUE4d0IsSUFBQSxDQUFBLEVBQUFuNEMsS0FBQSxXQUFBbkQsT0FpQkEsU0FBUTRyQyxJQUFBQTtBQUNOLGdCQUFBLENBQUt5TSxHQUFhek0sRUFBQUE7QUFDaEIscUJBQU9qdkMsS0FBS2s4QyxNQUFNNEMsU0FBQUE7QUFHcEIsZ0JBQU1DLEtBQU8vK0MsS0FBS2dSLE9BQU9ndUM7QUFJekIvUCxZQUFBQSxNQURBQSxLQUFPQSxHQUFLOWtDLFFBQVEsU0FBUyxJQUFBLEdBQ2pCQSxRQUFRLE9BQU8sSUFBQTtBQUszQixnQkFBTTgwQyxLQUFVbDZDLE9BQU9rcUMsRUFBQUEsRUFBTXRyQyxNQUFNLElBQUEsR0FDN0J1N0MsS0FBWUQsR0FBUXY2QztBQUUxQixnQkFBSXE2QyxHQUFLSTtBQUVQLHVCQUFTdndDLEtBQUksR0FBR0EsS0FBSXN3QyxJQUFXdHdDLE1BQUs7QUFDbEMsb0JBQU13dEMsS0FBU3A4QyxLQUFLby9DLFlBQVlILEdBQVFyd0MsRUFBQUEsR0FBSW13QyxHQUFLSSxLQUFBQTtBQUdqRCxvQkFBQSxXQUFJL0M7QUFFSixzQkFBc0IsTUFBbEJBLEdBQU8xM0MsUUFBWDtBQUtBLHdCQUFJcTZDLEdBQUtNLFNBQVM7QUFHaEIsK0JBQVNydkMsS0FBSSxHQUFHQSxLQUFJb3NDLEdBQU8xM0MsUUFBUXNMLE1BQUs7QUFDdEMsNEJBQU1tc0MsS0FBTUMsR0FBT3BzQyxFQUFBQSxFQUFHbXNDLEtBQ2hCbE4sS0FBT21OLEdBQU9wc0MsRUFBQUEsRUFBR2kvQjtBQUN2Qmp2Qyw2QkFBS3MvQyxxQkFBcUJyUSxJQUFNa04sSUFBQUEsSUFBSztzQkFDdkM7O0FBR0EsK0JBQVNuc0MsS0FBSSxHQUFHQSxLQUFJb3NDLEdBQU8xM0MsUUFBUXNMLE1BQUs7QUFDdEMsNEJBQU1tc0MsS0FBTUMsR0FBT3BzQyxFQUFBQSxFQUFHbXNDLEtBQ2hCbE4sS0FBT21OLEdBQU9wc0MsRUFBQUEsRUFBR2kvQjtBQUN2Qmp2Qyw2QkFBS2s4QyxNQUFNcUQsT0FBT3RRLElBQU1rTixFQUFBQTtzQkFDMUI7QUFHRm44Qyx5QkFBS2s4QyxNQUFNc0QsUUFBQUE7a0JBbkJYO0FBRkV4L0MseUJBQUtrOEMsTUFBTXNELFFBQVEsRUFBQTtjQXNCdkI7cUJBR0lULEdBQUtNLFNBQVM7QUFHaEIsdUJBQVN6d0MsS0FBSSxHQUFHQSxLQUFJc3dDLElBQVd0d0M7QUFDN0I1TyxxQkFBS3MvQyxxQkFBcUJMLEdBQVFyd0MsRUFBQUEsQ0FBQUE7O0FBSXBDLHVCQUFTQSxLQUFJLEdBQUdBLEtBQUlzd0MsSUFBV3R3QztBQUM3QjVPLHFCQUFLazhDLE1BQU1zRCxRQUFRUCxHQUFRcndDLEVBQUFBLENBQUFBO0FBS2pDLG1CQUFPNU8sS0FBS2s4QyxNQUFNNEMsU0FBQUE7VUFDcEIsRUFBQSxHQUVBLEVBQUF0NEMsS0FBQSxzQkFBQW5ELE9BTUEsU0FBbUJvOEMsSUFBQUE7QUFDakIsZ0JBQUlDLEtBQVM7QUFNYixtQkFMcUIsZUFBakJELE1BQWdELFNBQWpCQSxLQUNqQ0MsS0FBUyxhQUFBLFNBQ0FELE1BQTBDLFdBQWpCQSxPQUNsQ0MsS0FBUyxTQUVKQTtVQUNULEVBQUEsR0FFQSxFQUFBbDVDLEtBQUEsbUJBQUFuRCxPQUtBLFNBQWdCNHJDLElBQUFBO0FBa0JkLHFCQWpCTXQ2QixLQUFJLElBQUkyb0MsR0FBa0JyTyxFQUFBQSxHQUUxQjBRLEtBQWdCLFNBQUM5QixJQUFBQTtBQUNyQixxQkFBQSxDQUFBLENBQUksSUFBSXQ5QyxLQUFLczlDLEVBQUFBLE1BRVRscEMsR0FBRXhLLFFBQVF3SyxHQUFFczZCLE1BQU0sUUFBUSxHQUFBLEtBQVF0NkIsR0FBRXhLLFFBQVF3SyxHQUFFczZCLE1BQU0sU0FBUyxHQUFBLEtBRzdEdDZCLEdBQUU0eEIsSUFBSSxHQUFBLEdBQUE7WUFHRCxHQU1KNXhCLEdBQUV1QyxXQUFXdkMsR0FBRXM2QixLQUFLdnFDLFVBQVE7QUFDakMsa0JBQU1tNUMsS0FBS2xwQyxHQUFFczZCLEtBQUtyNEIsT0FBT2pDLEdBQUV1QyxRQUFBQTtBQUd6QnZDLGNBQUFBLEdBQUVpckMsUUFBUS9CLEVBQUFBLEtBQ1QsSUFBSXQ5QyxLQUFLczlDLEVBQUFBLE1BQ1BscEMsR0FBRWtyQyxjQUFjLFFBQVEsS0FBQSxLQUN2QmxyQyxHQUFFa3JDLGNBQWMsUUFBUSxLQUFBLEtBQ3hCbHJDLEdBQUVrckMsY0FBYyxRQUFRLFFBQUEsS0FDeEJsckMsR0FBRW1yQyxZQUFZLFFBQVEsTUFBQSxLQUN0Qm5yQyxHQUFFbXJDLFlBQVksUUFBUSxNQUFBLEtBQ3RCbnJDLEdBQUVtckMsWUFBWSxRQUFRLFNBQUEsTUFDMUJILEdBQWM5QixFQUFBQSxLQUdkbHBDLEdBQUU0eEIsSUFBSXNYLEVBQUFBLEdBRVJscEMsR0FBRXVDO1lBQ0o7QUFFQSxtQkFEQXZDLEdBQUVvcEMsVUFBQUEsR0FDS3BwQyxHQUFFeW5DO1VBQ1gsRUFBQSxHQUVBLEVBQUE1MUMsS0FBQSx1QkFBQW5ELE9BS0EsU0FBb0I0ckMsSUFBQUE7QUF1QmxCLHFCQXZCd0JsTCxLQUFBL2pDLE1BQ2xCMlUsS0FBSSxJQUFJMm9DLEdBQWtCck8sRUFBQUEsR0FDNUI4USxLQUFBQSxNQUVFQyxLQUFnQixTQUFDbkMsSUFBQUE7QUFDckIscUJBQUEsQ0FBQSxDQUFJLEtBQUt0OUMsS0FBS3M5QyxFQUFBQSxNQUNSbHBDLEdBQUV1QyxXQUFXNnNCLEdBQUtrTCxLQUFLdnFDLFNBQVMsTUFDbENpUSxHQUFFdUMsWUFDRjJtQyxLQUFLOVosR0FBS2tMLEtBQUtyNEIsT0FBT2pDLEdBQUV1QyxRQUFBQSxHQUNwQixNQUFNM1csS0FBS3M5QyxFQUFBQSxJQUNibHBDLEdBQUUrb0MsVUFBQUEsUUFFRi9vQyxHQUFFNHhCLElBQUlzWCxFQUFBQSxHQUNOa0MsS0FBQUEsU0FBWTtZQUlULEdBTUpwckMsR0FBRXVDLFdBQVd2QyxHQUFFczZCLEtBQUt2cUMsVUFBUTtBQUNqQyxrQkFBTW01QyxLQUFLbHBDLEdBQUVzNkIsS0FBS3I0QixPQUFPakMsR0FBRXVDLFFBQUFBO0FBR3pCdkMsY0FBQUEsR0FBRWlyQyxRQUFRL0IsRUFBQUEsS0FDVm1DLEdBQWNuQyxFQUFBQSxNQUNaa0MsTUFBYXByQyxHQUFFK29DLGFBQ2Qvb0MsR0FBRWtyQyxjQUFjLFFBQVEsR0FBQSxLQUN2QmxyQyxHQUFFa3JDLGNBQWMsUUFBUSxHQUFBLEtBQ3hCbHJDLEdBQUVrckMsY0FBYyxRQUFRLEdBQUEsTUFDNUJsckMsR0FBRW1yQyxZQUFZLFFBQVEsS0FBSyxXQUFBLEtBQzNCbnJDLEdBQUVtckMsWUFBWSxRQUFRLEtBQUssV0FBQSxLQUMzQm5yQyxHQUFFbXJDLFlBQVksUUFBUSxLQUFLLFdBQUEsTUFHM0JuckMsR0FBRTR4QixJQUFJc1gsRUFBQUEsR0FDTmtDLEtBQUFBLFFBRUZwckMsR0FBRXVDO1lBQ0o7QUFFQSxtQkFEQXZDLEdBQUVvcEMsVUFBQUEsR0FDS3BwQyxHQUFFeW5DO1VBQ1gsRUFBQSxHQUVBLEVBQUE1MUMsS0FBQSxlQUFBbkQsT0FRQSxTQUFZNHJDLElBQU13USxJQUFBQTtBQUNoQixnQkFBTUMsS0FBUzEvQyxLQUFLaWdELG1CQUFtQlIsRUFBQUE7QUFDdkMsbUJBQWUsV0FBWEMsS0FDSyxDQUNMLEVBQ0V6USxNQUFNQSxJQUNOa04sS0FBSyxTQUFBLENBQUEsSUFHVyxlQUFYdUQsS0FDRjEvQyxLQUFLa2dELG9CQUFvQmpSLEVBQUFBLElBQ1osV0FBWHlRLEtBQ0YxL0MsS0FBS21nRCxnQkFBZ0JsUixFQUFBQSxJQUFBQTtVQUVoQyxFQUFBLEdBRUEsRUFBQXpvQyxLQUFBLGdCQUFBbkQsT0FLQSxTQUFhNHJDLElBQUFBO0FBQ1gsZ0JBQU1pRSxLQUFRbHpDLEtBQUttUixJQUFJOHFDLFlBQVloTixFQUFBQSxFQUFNaUU7QUFDekMsbUJBQU9sekMsS0FBS2s4QyxNQUFNa0UsU0FBQUEsSUFBYWxOLEtBQVFsekMsS0FBS2dSLE9BQU9ndUMsWUFBWUs7VUFDakUsRUFBQSxHQUVBLEVBQUE3NEMsS0FBQSxpQkFBQW5ELE9BUUEsU0FBY2c5QyxJQUFBQTtBQUlaLHFCQUhJcFIsS0FBTyxJQUNQdDlCLEtBQUksR0FFREEsS0FBSTB1QyxHQUFNMzdDLFVBQVE7QUFDdkIsa0JBQ000N0MsS0FBVXJSLE1BREssT0FBVEEsS0FBYyxLQUFLLE9BQ0ZvUixHQUFNMXVDLEVBQUFBO0FBRW5DLGtCQUFJM1IsS0FBS3VnRCxhQUFhRCxFQUFBQTtBQUFVO0FBQ2hDclIsY0FBQUEsS0FBT3FSLElBQ1AzdUM7WUFDRjtBQUVBLG1CQUFPQTtVQUNULEVBQUEsR0FFQSxFQUFBbkwsS0FBQSxxQkFBQW5ELE9BT0EsU0FBa0JnOUMsSUFBQUE7QUFHaEIscUJBRkkxdUMsS0FBSSxHQUVEQSxLQUFJMHVDLEdBQU0zN0MsVUFBQUEsQ0FDWDFFLEtBQUt1Z0QsYUFBYXp4QixHQUFBdXhCLEVBQUFBLEVBQUt2L0MsS0FBTHUvQyxJQUFZLEdBQUcxdUMsRUFBQUEsQ0FBQUE7QUFDckNBLGNBQUFBO0FBR0YsbUJBQU9BO1VBQ1QsRUFBQSxHQUVBLEVBQUFuTCxLQUFBLHdCQUFBbkQsT0FjQSxTQUFxQncwQixJQUFBQTtBQUF5QyxnQkFBcENza0IsS0FBR2w3QyxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsSUFBQUEsVUFBQSxDQUFBLElBQUcsVUFBVXUvQyxLQUFVdi9DLFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUEsQ0FBQSxLQUFBQSxVQUFBLENBQUE7QUFJbERqQixpQkFBS2dSLE9BQU82dEMsb0JBQW9CNytDLEtBQUttUixLQUFLblIsS0FBSzQrQyxVQUFVNStDLEtBQUtpeUMsT0FBT2tLLEVBQUFBO0FBT3JFLHFCQUZJa0UsTUFESnhvQixNQURBQSxLQUFNQSxHQUFJMXRCLFFBQVEsVUFBVSxNQUFBLEdBQ2xCQSxRQUFRLHFCQUFxQixVQUFBLEdBQ3ZCeEcsTUFBTSxJQUFBLEdBRWYwOEMsR0FBTTM3QyxTQUFTLEtBQUc7QUFDdkIsa0JBQUlpTixLQUFJM1IsS0FBS3lnRCxjQUFjSixFQUFBQTtBQUUzQixrQkFBVSxNQUFOMXVDLElBQVM7QUFFWCxvQkFBTSt1QyxLQUFPTCxHQUFNLENBQUEsR0FHYmh6QyxLQUFJck4sS0FBSzJnRCxrQkFBa0JELEVBQUFBO0FBQ2pDMWdELHFCQUFLazhDLE1BQU1zRCxRQUFRMXdCLEdBQUE0eEIsRUFBQUEsRUFBSTUvQyxLQUFKNC9DLElBQVcsR0FBR3J6QyxFQUFBQSxHQUFJOHVDLEVBQUFBLEdBR3JDa0UsR0FBTSxDQUFBLElBQUt2eEIsR0FBQTR4QixFQUFBQSxFQUFJNS9DLEtBQUo0L0MsSUFBV3J6QyxFQUFBQTtjQUN4QixPQUFPO0FBRUwsb0JBQUl1ekMsS0FBT2p2QztBQUNVLHdCQUFqQjB1QyxHQUFNMXVDLEtBQUksQ0FBQSxJQUNaQSxPQUN5QixRQUFoQjB1QyxHQUFNTyxFQUFBQSxLQUNmQTtBQUdGLG9CQUFNM1IsS0FBT25nQixHQUFBdXhCLEVBQUFBLEVBQUt2L0MsS0FBTHUvQyxJQUFZLEdBQUcxdUMsRUFBQUEsRUFBRy9CLEtBQUssRUFBQTtBQUVoQytCLGdCQUFBQSxNQUFLMHVDLEdBQU0zN0MsVUFBVTg3QyxLQUN2QnhnRCxLQUFLazhDLE1BQU1xRCxPQUFPdFEsSUFBTWtOLEVBQUFBLElBRXhCbjhDLEtBQUtrOEMsTUFBTXNELFFBQVF2USxJQUFNa04sRUFBQUEsR0FJM0JrRSxLQUFRdnhCLEdBQUF1eEIsRUFBQUEsRUFBS3YvQyxLQUFMdS9DLElBQVlPLEVBQUFBO2NBQ3RCO1lBQ0Y7VUFDRixFQUFBLENBQUEsQ0FBQSxHQUFDakM7UUFBQSxFQXJYZ0IsR0NuUWJrQyxLQUFpQixDQUFDLFFBQVEsUUFBUSxZQUFZLE1BQUEsR0FLOUNDLEtBQUssV0FBQTtBQU1ULG1CQUFBQSxHQUFZM0wsSUFBTXRwQyxJQUFBQTtBQUE0QixnQkFBbkJrMUMsS0FBUzkvQyxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsS0FBQUEsVUFBQSxDQUFBO0FBQVEwaUIsZUFBQUEsTUFBQW05QixFQUFBQSxHQUMxQzlnRCxLQUFLbTFDLE9BQU9BLElBQ1puMUMsS0FBS2doRCxjQUFBQSxPQUNMaGhELEtBQUtpaEQsV0FBQUEsUUFDTGpoRCxLQUFLZy9DLGNBQWMsQ0FBQSxHQUNuQmgvQyxLQUFLa2hELFdBQVdyMUMsRUFBQUEsR0FDaEI3TCxLQUFLbVgsT0FBTyxFQUFFZzlCLEtBQUssR0FBR0QsTUFBTSxHQUFHaEIsT0FBTyxHQUFHQyxRQUFRLEdBQUdnTyxPQUFPLEVBQUEsR0FDM0RuaEQsS0FBS29oRCxjQUFjTDtVQUNyQjtBQWtGQyxpQkFoRkRsekIsR0FBQWl6QixJQUFBLENBQUEsRUFBQXQ2QyxLQUFBLGNBQUFuRCxPQUdBLFNBQVd3SSxJQUFBQTtBQVlULGdCQVhBN0wsS0FBS3FoRCxpQkFBaUJ4MUMsSUFFdEI3TCxLQUFLc2hELGdCQUFnQnoxQyxHQUFRa3pDLElBQUFBLEdBRXpCckQsR0FBYTd2QyxHQUFRb2tDLEtBQUFBLElBQ3ZCandDLEtBQUt1aEQsYUFBQUEsT0FHTDExQyxHQUFRb2tDLFFBQUFBLFFBQVFweEIsV0FHZGhULEdBQVFrekMsUUFBdUMsU0FBakJsekMsR0FBUWt6QztBQUV4QyxrQkFBNEIsWUFBQSxPQUFqQmx6QyxHQUFRa3pDO0FBQ2pCLytDLHFCQUFLaWhELFdBQVdqaEQsS0FBS2cvQyxZQUFZN25DO3VCQUNBLGFBQXhCK1YsR0FBT3JoQixHQUFRa3pDLElBQUFBLEdBQW1CO0FBQzNDLG9CQUFNNW5DLEtBQU90TCxHQUFRa3pDLEtBQUs1bkM7QUFBQUEsMkJBRXRCQSxPQUNGblgsS0FBS2loRCxXQUFXOXBDO2NBRXBCOztVQUVKLEVBQUEsR0FFQSxFQUFBM1EsS0FBQSxtQkFBQW5ELE9BU0EsU0FBZ0JtK0MsSUFBQUE7QUFBZ0IsZ0JBQUE3aUIsS0FBQTMrQjtBQUc5QjBQLGVBQVFteEMsSUFBZ0IsU0FBQzdtQyxJQUFBQTtBQUN2QjJrQixjQUFBQSxHQUFLcWdCLFlBQVlobEMsRUFBQUEsSUFBUyxDQUFBO1lBQzVCLENBQUEsR0FHSThtQyxHQUFNVyxnQkFBZ0J6aEQsS0FBS2cvQyxhQUFhd0MsRUFBQUEsSUFDMUN4aEQsS0FBS2cvQyxZQUFZMEMsVUFBVSxJQUs3Qmh5QyxHQUFROHhDLElBQWdCLFNBQUNuc0IsSUFBTS9uQixJQUFBQTtBQUN6QituQixzQkFBQUEsTUFBdUQsYUFBaEJuSSxHQUFPbUksRUFBQUEsTUFDaERzSixHQUFLcWdCLFlBQVkxeEMsRUFBQUEsSUFBSytuQjtZQUUxQixDQUFBO1VBQ0YsRUFBQSxHQUVBLEVBQUE3dUIsS0FBQSxhQUFBbkQsT0E4QkEsU0FBVTIzQyxJQUFBQTtBQUlSLGdCQUFNZ0UsS0FBYyxFQUNsQjJDLGdCQUFBQSxPQUNBdEMsUUFBQUEsSUFDQXVDLFFBQUFBLElBQ0FDLGlCQUFBQSxPQUNBQyxRQUFBQSxJQUNBQyxRQUFRLFNBQUEsR0FHSkMsS0FBa0I3RyxHQUFRSCxJQUFNLGlCQUFBO0FBQ3RDLGdCQUErQixZQUFBLE9BQXBCZ0g7QUFDVGhELGNBQUFBLEdBQVlLLFNBQVMzeEIsT0FBT3MwQixFQUFBQSxHQUM1QmhELEdBQVk0QyxTQUFTbDBCLE9BQU9zMEIsRUFBQUE7cUJBQ1EsYUFBM0I5MEIsR0FBTzgwQixFQUFBQSxHQUE4QjtBQUM5QyxrQkFBTUMsS0FBeUI5RyxHQUFRSCxJQUFNLENBQzNDLG1CQUNBLFNBQUEsQ0FBQTtBQUVvQywwQkFBQSxPQUEzQmlILE9BQ1RqRCxHQUFZSyxTQUFTM3hCLE9BQU91MEIsRUFBQUE7QUFFOUIsa0JBQU1DLEtBQXlCL0csR0FBUUgsSUFBTSxDQUMzQyxtQkFDQSxTQUFBLENBQUE7QUFFb0MsMEJBQUEsT0FBM0JrSCxPQUNUbEQsR0FBWTRDLFNBQVNsMEIsT0FBT3cwQixFQUFBQTtZQUVoQztBQUVBLGdCQUFNQyxLQUFtQmhILEdBQVFILElBQU0sa0JBQUE7QUFDdkMsZ0JBQWdDLFlBQUEsT0FBckJtSDtBQUNUbkQsY0FBQUEsR0FBWThDLFNBQVNwMEIsT0FBT3kwQixFQUFBQTtxQkFDUyxhQUE1QmoxQixHQUFPaTFCLEVBQUFBLEdBQStCO0FBQy9DLGtCQUFNQyxLQUEwQmpILEdBQVFILElBQU0sQ0FDNUMsb0JBQ0EsU0FBQSxDQUFBO0FBRXFDLDBCQUFBLE9BQTVCb0gsT0FDVHBELEdBQVk4QyxTQUFTcDBCLE9BQU8wMEIsRUFBQUE7QUFFOUIsa0JBQU1DLEtBQXlCbEgsR0FBUUgsSUFBTSxDQUMzQyxvQkFDQSxRQUFBLENBQUE7QUFFb0MsMEJBQUEsT0FBM0JxSCxPQUVvQixVQUEzQkEsTUFDMkIsYUFBM0JBLE9BRUFyRCxHQUFZK0MsU0FBU007WUFHM0I7QUFFQSxtQkFBT3JEO1VBQ1QsRUFBQSxHQUVBLEVBQUF4NEMsS0FBQSxVQUFBbkQsT0FNQSxTQUFPd0ksSUFBU212QyxJQUFBQTtBQUNkaDdDLGlCQUFLa2hELFdBQVdyMUMsSUFBQUEsSUFBUyxHQUN6QjdMLEtBQUtzaUQsZUFBZXRILEVBQUFBLEdBQ3BCdUgsR0FBV3ZpRCxLQUFLZy9DLGFBQWFoL0MsS0FBS3dpRCxVQUFVeEgsRUFBQUEsQ0FBQUEsR0FDNUNoN0MsS0FBS2cvQyxZQUFZeUQsVUFBVTNILEdBQVMsU0FBU0UsRUFBQUE7VUFDL0MsRUFBQSxHQUVBLEVBQUF4MEMsS0FBQSxlQUFBbkQsT0FNQSxTQUFZcS9DLElBQUFBO0FBQ1YsZ0JBQU1DLEtBQVlELEtBQVVBLEdBQVFsSCxRQUFRa0gsR0FBUXhPLE9BQU87QUFDdkRsMEMsaUJBQUtnL0MsWUFBWTJDLG1CQUNuQjNoRCxLQUFLZy9DLFlBQVlLLFVBQVVzRCxJQUMzQjNpRCxLQUFLZy9DLFlBQVk0QyxVQUFVZTtBQUU3QixnQkFBTUMsS0FBYUYsS0FBVUEsR0FBUXZPLE1BQU11TyxHQUFRakgsU0FBUztBQUN4RHo3QyxpQkFBS2cvQyxZQUFZNkMsb0JBQ25CN2hELEtBQUtnL0MsWUFBWThDLFVBQVVjO1VBRS9CLEVBQUEsR0FPQSxFQUFBcDhDLEtBQUEsd0JBQUFuRCxPQU9BLFNBQXFCdy9DLElBQVNDLElBQUFBO0FBQzVCLHFCQUFTbDBDLEtBQUksR0FBR0EsS0FBSWswQyxHQUFRcCtDLFFBQUFBLEVBQVVrSztBQUNwQzVPLG1CQUFLK2lELGNBQWNGLElBQVNDLEdBQVFsMEMsRUFBQUEsQ0FBQUE7VUFFeEMsRUFBQSxHQUVBLEVBQUFwSSxLQUFBLGlCQUFBbkQsT0FRQSxTQUFjMjNDLElBQU1udkMsSUFBQUE7QUFDbEIsZ0JBQUEsV0FBSUEsTUFBQUEsV0FDQUEsR0FBUWt6QyxRQUF1QyxTQUFqQmx6QyxHQUFRa3pDLE1BQTFDO0FBRUEsa0JBQU01d0IsS0FBT3RpQixHQUFRa3pDO0FBQ3JCL0QsY0FBQUEsR0FBS24wQyxLQUFLc25CLEVBQUFBO1lBSCtDO1VBSTNELEVBQUEsR0FFQSxFQUFBM25CLEtBQUEsbUJBQUFuRCxPQU9BLFNBQWdCMjNDLElBQUFBO0FBSWQscUJBSE1nSSxLQUFNLENBQUEsR0FHSDExQyxLQUFJLEdBQUdBLEtBQUkwdEMsR0FBS3QyQyxRQUFBQSxFQUFVNEksSUFBRztBQUNwQyxrQkFBSTB4QyxLQUFjaEUsR0FBSzF0QyxFQUFBQSxHQUdqQjIxQyxLQUFlLENBQUE7QUFDakJuQyxjQUFBQSxHQUFNVyxnQkFBZ0J3QixJQUFjakUsRUFBQUEsTUFDdENBLEtBQWNpRSxLQUdoQnZ6QyxHQUFRc3ZDLElBQWEsU0FBQ2tFLElBQUtoN0MsSUFBQUE7QUFBQUEsMkJBQ3JCZzdDLE9BQ0E5Z0QsT0FBT3hCLFVBQVVILGVBQWVLLEtBQUtraUQsSUFBSzk2QyxFQUFBQSxNQUFBQSxPQUUxQ3FrQyxHQUFBc1UsRUFBQUEsRUFBYy8vQyxLQUFkKy9DLElBQXVCMzRDLEVBQUFBLElBRXpCODZDLEdBQUk5NkMsRUFBQUEsSUFBUSxDQUFBLElBRVo4NkMsR0FBSTk2QyxFQUFBQSxJQUFRZzdDO2NBRWhCLENBQUE7WUFDRjtBQUVBLG1CQUFPRjtVQUNULEVBQUEsR0FFQSxFQUFBeDhDLEtBQUEsaUJBQUFuRCxPQTJCQSxTQUFjMjNDLElBQU1tSSxJQUFXQyxJQUFBQTtBQUk3QixxQkFISUMsSUFHSy8xQyxLQUFJLEdBQUdBLEtBQUkwdEMsR0FBS3QyQyxRQUFBQSxFQUFVNEksSUFBRztBQUNwQyxrQkFBTTB4QyxLQUFjaEUsR0FBSzF0QyxFQUFBQTtBQUV6QixrQkFBSWxMLE9BQU94QixVQUFVSCxlQUFlSyxLQUFLaytDLElBQWFtRSxFQUFBQSxHQUFZO0FBRWhFLG9CQUFJRSxTQURKQSxLQUFZckUsR0FBWW1FLEVBQUFBO0FBQzJCO0FBSW5ELG9CQUFNRixLQUFlLENBQUE7QUFLckIsb0JBSkluQyxHQUFNVyxnQkFBZ0J3QixJQUFjSSxFQUFBQSxNQUN0Q0EsS0FBWUosS0FHVjdnRCxPQUFPeEIsVUFBVUgsZUFBZUssS0FBS3VpRCxJQUFXRCxFQUFBQTtBQUNsRCx5QkFBT0MsR0FBVUQsRUFBQUE7Y0FFckI7WUFDRjtBQUlBLGdCQUFJaGhELE9BQU94QixVQUFVSCxlQUFlSyxLQUFLZCxLQUFLZy9DLGFBQWFvRSxFQUFBQTtBQUN6RCxxQkFBT3BqRCxLQUFLZy9DLFlBQVlvRSxFQUFBQTtBQUkxQixrQkFBTSxJQUFJcGIsTUFDUixzREFBc0RvYixLQUFTLEdBQUE7VUFFbkUsRUFBQSxHQUVBLEVBQUE1OEMsS0FBQSxrQkFBQW5ELE9BVUEsU0FBZTIzQyxJQUFNbUksSUFBQUE7QUFJbkIscUJBSE16NkMsS0FBUyxDQUFBLEdBQ1Q0NkMsS0FBYyxDQUFDLFNBQVMsUUFBUSxRQUFRLE9BQU8sU0FBQSxHQUU1QzEwQyxLQUFJLEdBQUdBLEtBQUkwMEMsR0FBWTUrQyxRQUFBQSxFQUFVa0ssSUFBRztBQUMzQyxrQkFBTXV0QyxLQUFNbUgsR0FBWTEwQyxFQUFBQTtBQUN4QmxHLGNBQUFBLEdBQU95ekMsRUFBQUEsSUFBT244QyxLQUFLdWpELGNBQWN2SSxJQUFNbUksSUFBV2hILEVBQUFBO1lBQ3BEO0FBRUEsbUJBQU96ekM7VUFDVCxFQUFBLEdBTUEsRUFBQWxDLEtBQUEsa0JBQUFuRCxPQU9BLFNBQWUyM0MsSUFBQUE7QUFBTSxnQkFBQWpYLEtBQUEvakMsTUFDYndqRCxLQUFXLENBQUE7QUFHakJ4akQsaUJBQUt5akQscUJBQXFCRCxJQUFVeEksRUFBQUEsR0FDcENoN0MsS0FBS2cvQyxjQUFjaC9DLEtBQUswakQsZ0JBQWdCRixFQUFBQTtBQUd4QyxxQkFEQUcsS0FBQUEsV0FBQUE7QUFFRSxrQkFBTXhILEtBQU0wRSxHQUFlanlDLEVBQUFBLEdBQ3JCZzFDLEtBQWE3ZixHQUFLaWIsWUFBWTdDLEVBQUFBO0FBSXBDenNDLGlCQUg0QnEwQixHQUFLOGYsZUFBZUwsSUFBVXJILEVBQUFBLEdBRzdCLFNBQUNpSCxJQUFROTFDLElBQUFBO0FBQ3BDczJDLGdCQUFBQSxHQUFXdDJDLEVBQUFBLElBQUs4MUM7Y0FDbEIsQ0FBQSxHQUVBUSxHQUFXenNDLE9BQU91VyxPQUFPazJCLEdBQVd6c0MsSUFBQUEsR0FDcEN5c0MsR0FBV2xDLFVBQVVoMEIsT0FBT2syQixHQUFXbEMsT0FBQUE7WUFBQUEsR0FYaEM5eUMsS0FBSSxHQUFHQSxLQUFJaXlDLEdBQWVuOEMsUUFBQUEsRUFBVWtLO0FBQUMrMEMsY0FBQUEsR0FBQUE7VUFhaEQsRUFBQSxHQUVBLEVBQUFuOUMsS0FBQSxRQUFBbkQsT0FVQSxTQUFLOE4sSUFBSzlELElBQUcrRCxJQUFHd3RDLElBQVUzTSxJQUFBQTtBQUE0QixnQkFBckI2UixLQUFRN2lELFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUEsQ0FBQSxJQUFBQSxVQUFBLENBQUEsSUFBRztBQUUxQyxnQkFBQSxXQUFJakIsS0FBS3FoRCxlQUFlcFIsT0FBeEI7QUFHQSxrQkFBSThULEtBQWUvakQsS0FBS2cvQyxZQUFZN25DLE9BQU9uWCxLQUFLbTFDLEtBQUs2TyxLQUFLdm9CO0FBRXhEejdCLG1CQUFLcWhELGVBQWVwUixTQUNwQjhULEtBQWUvakQsS0FBS3FoRCxlQUFlNEMsUUFBUWhVLE1BQU1pVSxnQkFBZ0IsTUFNL0RILE1BQWdCL2pELEtBQUtxaEQsZUFBZTRDLFFBQVFoVSxNQUFNa1UsZUFDcERKLEtBQ0VyMkIsT0FBTzF0QixLQUFLcWhELGVBQWU0QyxRQUFRaFUsTUFBTWtVLFVBQUFBLElBQ3pDbmtELEtBQUttMUMsS0FBSzZPLEtBQUt2b0IsUUFJbkJ6N0IsS0FBS29rRCxtQkFBbUJqekMsSUFBS3l0QyxJQUFVM00sSUFBTzVrQyxJQUFHK0QsSUFBRzB5QyxFQUFBQSxHQUNwRDlqRCxLQUFLcWtELGdCQUFnQmx6QyxFQUFBQSxHQUNyQm5SLEtBQUtza0QsVUFBVW56QyxJQUFLOUQsSUFBR3JOLEtBQUttWCxLQUFLZ3FDLE9BQU8yQyxJQUFVQyxFQUFBQTtZQXJCTDtVQXNCL0MsRUFBQSxHQUVBLEVBQUF2OUMsS0FBQSxtQkFBQW5ELE9BTUEsU0FBZ0I4TixJQUFBQTtBQUNkLGdCQUFBLFdBQ0VuUixLQUFLZy9DLFlBQVlsTixjQUNlLFdBQWhDOXhDLEtBQUtnL0MsWUFBWWxOLFlBQ2pCO0FBQ0EzZ0MsY0FBQUEsR0FBSW96QyxZQUFZdmtELEtBQUtnL0MsWUFBWWxOO0FBQ2pDLGtCQUFNMzZCLEtBQU9uWCxLQUFLd2tELFFBQUFBO0FBQ2xCcnpDLGNBQUFBLEdBQUlzekMsU0FBU3R0QyxHQUFLKzhCLE1BQU0vOEIsR0FBS2c5QixLQUFLaDlCLEdBQUsrN0IsT0FBTy83QixHQUFLZzhCLE1BQUFBO1lBQ3JEO1VBQ0YsRUFBQSxHQUVBLEVBQUEzc0MsS0FBQSxhQUFBbkQsT0FTQSxTQUFVOE4sSUFBSzlELElBQUcrRCxJQUFBQTtBQUFzQyxnQkFBbkMweUMsS0FBUTdpRCxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsSUFBQUEsVUFBQSxDQUFBLElBQUcsVUFBVThpRCxLQUFZOWlELFVBQUF5RCxTQUFBekQsSUFBQUEsVUFBQUEsQ0FBQUEsSUFBQUEsUUFDSnlqRCxLQUFBMTFCLEdBQXZDaHZCLEtBQUsya0QsY0FBY3h6QyxJQUFLOUQsSUFBRytELElBQUcweUMsRUFBQUEsR0FBUyxDQUFBO0FBQS9DejJDLFlBQUFBLEtBQUNxM0MsR0FBQSxDQUFBLEdBQUV0ekMsS0FBQ3N6QyxHQUFBLENBQUEsR0FFTHZ6QyxHQUFJeXpDLFlBQVksUUFDaEJ2M0MsTUFBUXJOLEtBQUttWCxLQUFLKzdCLFFBQVEsR0FDdEJsekMsS0FBS2cvQyxZQUFZK0MsVUFBVS9oRCxLQUFLbVgsS0FBS2c4QixTQUFTbnpDLEtBQUttWCxLQUFLMHRDLGdCQUMxQixVQUE1QjdrRCxLQUFLZy9DLFlBQVkrQyxXQUNuQjN3QyxPQUFNcFIsS0FBS21YLEtBQUtnOEIsU0FBU256QyxLQUFLbVgsS0FBSzB0QyxlQUFlLElBRXBCLGFBQTVCN2tELEtBQUtnL0MsWUFBWStDLFdBQ25CM3dDLE9BQU1wUixLQUFLbVgsS0FBS2c4QixTQUFTbnpDLEtBQUttWCxLQUFLMHRDLGVBQWU7QUFLdEQscUJBQVNqMkMsS0FBSSxHQUFHQSxLQUFJNU8sS0FBS2svQyxXQUFXdHdDLE1BQUs7QUFDdkMsa0JBQU00dEMsS0FBT3g4QyxLQUFLazhDLE1BQU10dEMsRUFBQUE7QUFDeEIsa0JBQUk0dEMsTUFBUUEsR0FBS0osUUFBUTtBQUN2QixvQkFBSWxKLEtBQVE7QUFDUmx6QyxxQkFBS29oRCxlQUEwQyxhQUEzQnBoRCxLQUFLZy9DLFlBQVk4RixRQUN2QzVSLE9BQVVsekMsS0FBS21YLEtBQUsrN0IsUUFBUXNKLEdBQUt0SixTQUFTLElBQ04sWUFBM0JsekMsS0FBS2cvQyxZQUFZOEYsVUFDMUI1UixNQUFTbHpDLEtBQUttWCxLQUFLKzdCLFFBQVFzSixHQUFLdEo7QUFFbEMseUJBQVNsakMsS0FBSSxHQUFHQSxLQUFJd3NDLEdBQUtKLE9BQU8xM0MsUUFBUXNMLE1BQUs7QUFDM0Msc0JBQU1zc0MsS0FBUUUsR0FBS0osT0FBT3BzQyxFQUFBQTtBQUMxQm1CLGtCQUFBQSxHQUFJNHRDLE9BQU96QyxHQUFNeUM7QUFDakIsc0JBSUNnRyxLQUFBLzFCLEdBSmdDaHZCLEtBQUtnbEQsVUFDcEMxSSxHQUFNblIsT0FDTjRZLElBQ0F6SCxHQUFNMkksV0FBQUEsR0FDUCxDQUFBLEdBSk1DLEtBQVNILEdBQUEsQ0FBQSxHQUFFRSxLQUFXRixHQUFBLENBQUE7QUFLekJ6SSxrQkFBQUEsR0FBTTZJLGNBQWMsTUFDdEJoMEMsR0FBSWkwQyxZQUFZOUksR0FBTTZJLGFBQ3RCaDBDLEdBQUlrMEMsY0FBY0osSUFDbEI5ekMsR0FBSW0wQyxXQUFXLFVBRWpCbjBDLEdBQUlvekMsWUFBWVcsSUFFWjVJLEdBQU02SSxjQUFjLEtBQ3RCaDBDLEdBQUlvMEMsV0FBV2pKLEdBQU1yTixNQUFNNWhDLEtBQUk2bEMsSUFBTzloQyxLQUFJa3JDLEdBQU1vRixPQUFBQSxHQUVsRHZ3QyxHQUFJcTBDLFNBQVNsSixHQUFNck4sTUFBTTVoQyxLQUFJNmxDLElBQU85aEMsS0FBSWtyQyxHQUFNb0YsT0FBQUEsR0FDOUN4TyxNQUFTb0osR0FBTXBKO2dCQUNqQjtBQUNBOWhDLGdCQUFBQSxNQUFLb3JDLEdBQUtySjtjQUNaO1lBQ0Y7VUFDRixFQUFBLEdBRUEsRUFBQTNzQyxLQUFBLGlCQUFBbkQsT0FTQSxTQUFjOE4sSUFBSzlELElBQUcrRCxJQUFHMHlDLElBQUFBO0FBR3ZCLGdCQUNFOWpELEtBQUtvaEQsZUFDc0IsaUJBQTNCcGhELEtBQUtnL0MsWUFBWThGLFNBQUFBLFVBQ2pCOWtELEtBQUtnaEQsYUFDTDtBQUNBM3pDLGNBQUFBLEtBQUksR0FDSitELEtBQUk7QUFHMkIsd0JBQTNCcFIsS0FBS2cvQyxZQUFZOEYsU0FDbkIzekMsR0FBSXMwQyxlQUFlLGNBQ25CcjBDLE1BQUssS0FDK0IsYUFBM0JwUixLQUFLZy9DLFlBQVk4RixTQUMxQjN6QyxHQUFJczBDLGVBQWUsV0FDbkJyMEMsTUFBSyxLQUVMRCxHQUFJczBDLGVBQWU7WUFFdkI7QUFDRXQwQyxjQUFBQSxHQUFJczBDLGVBQWUzQjtBQUVyQixtQkFBTyxDQUFDejJDLElBQUcrRCxFQUFBQTtVQUNiLEVBQUEsR0FFQSxFQUFBNUssS0FBQSxhQUFBbkQsT0FVQSxTQUFVOG5DLElBQU80WSxJQUFjMkIsSUFBQUE7QUFDN0IsZ0JBQUlSLEtBQVkvWixNQUFTLFdBQ3JCOFosS0FBY1MsTUFBc0I7QUFDeEMsZ0JBQUkzQixNQUFnQi9qRCxLQUFLcWhELGVBQWU0QyxRQUFRaFUsTUFBTWlVLGVBQWU7QUFDbkUsa0JBQU15QixLQUFVaG1ELEtBQUs4TixJQUNuQixHQUNBOU4sS0FBSytOLElBQ0gsR0FDQSxLQUFLMU4sS0FBS3FoRCxlQUFlNEMsUUFBUWhVLE1BQU1pVSxnQkFBZ0JILEdBQUFBLENBQUFBO0FBRzNEbUIsY0FBQUEsS0FBWVUsR0FBZ0JWLElBQVdTLEVBQUFBLEdBQ3ZDVixLQUFjVyxHQUFnQlgsSUFBYVUsRUFBQUE7WUFDN0M7QUFDQSxtQkFBTyxDQUFDVCxJQUFXRCxFQUFBQTtVQUNyQixFQUFBLEdBRUEsRUFBQXorQyxLQUFBLGVBQUFuRCxPQU9BLFNBQVk4TixJQUFBQTtBQUFzQyxnQkFBakN5dEMsS0FBUTM5QyxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsS0FBQUEsVUFBQSxDQUFBLEdBQVVneEMsS0FBS2h4QyxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsS0FBQUEsVUFBQSxDQUFBO0FBRXRDLG1CQURBakIsS0FBSzZsRCxjQUFjMTBDLElBQUt5dEMsSUFBVTNNLEVBQUFBLEdBQzNCLEVBQ0xpQixPQUFPbHpDLEtBQUttWCxLQUFLKzdCLE9BQ2pCQyxRQUFRbnpDLEtBQUttWCxLQUFLZzhCLFFBQ2xCK0wsV0FBV2wvQyxLQUFLay9DLFVBQUFBO1VBRXBCLEVBQUEsR0FFQSxFQUFBMTRDLEtBQUEsV0FBQW5ELE9BS0EsV0FBQTtBQUNFLGdCQUNJZ0ssS0FBSXJOLEtBQUttWCxLQUFLKzhCLE1BQ2Q5aUMsS0FBSXBSLEtBQUttWCxLQUFLZzlCLE1BQU07QUFFeEIsZ0JBQUluMEMsS0FBS29oRCxhQUFhO0FBQ3BCLGtCQUFNdHVDLEtBQXdCLE1BQUEsQ0FBbEI5UyxLQUFLbVgsS0FBSys3QjtBQUV0QixzQkFBUWx6QyxLQUFLZy9DLFlBQVk4RixPQUFBQTtnQkFDdkIsS0FBSztBQUNIejNDLGtCQUFBQSxLQUFJeUYsSUFDSjFCLEtBQXdCLE1BQUEsQ0FBbkJwUixLQUFLbVgsS0FBS2c4QjtBQUNmO2dCQUNGLEtBQUs7QUFDSDlsQyxrQkFBQUEsS0FBSXlGLElBQ0oxQixLQUFBQSxFQUFNcFIsS0FBS21YLEtBQUtnOEIsU0FkSDtBQWViO2dCQUNGLEtBQUs7QUFDSDlsQyxrQkFBQUEsS0FBSXlGLElBQ0oxQixLQWxCYTtjQUFBO1lBcUJuQjtBQVNBLG1CQVBZLEVBQ1Y4aUMsTUFBTTdtQyxJQUNOOG1DLEtBQUsvaUMsSUFDTDhoQyxPQUFPbHpDLEtBQUttWCxLQUFLKzdCLE9BQ2pCQyxRQUFRbnpDLEtBQUttWCxLQUFLZzhCLE9BQUFBO1VBSXRCLEVBQUEsR0FFQSxFQUFBM3NDLEtBQUEsc0JBQUFuRCxPQVNBLFNBQW1COE4sSUFBS3l0QyxJQUFVM00sSUFBQUE7QUFBMEMsZ0JBQW5DNWtDLEtBQUNwTSxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsSUFBQUEsVUFBQSxDQUFBLElBQUcsR0FBR21RLEtBQUNuUSxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsSUFBQUEsVUFBQSxDQUFBLElBQUcsR0FBRzZpRCxLQUFRN2lELFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUEsQ0FBQSxJQUFBQSxVQUFBLENBQUEsSUFBRztBQUNoRWpCLGlCQUFLNmxELGNBQWMxMEMsSUFBS3l0QyxJQUFVM00sRUFBQUEsR0FDbENqeUMsS0FBS21YLEtBQUsrOEIsT0FBTzdtQyxLQUFzQixNQUFsQnJOLEtBQUttWCxLQUFLKzdCLE9BQy9CbHpDLEtBQUttWCxLQUFLZzlCLE1BQU0vaUMsS0FBdUIsTUFBbkJwUixLQUFLbVgsS0FBS2c4QixRQUM5Qm56QyxLQUFLbVgsS0FBS2dxQyxRQUFRL3ZDLEtBQTJCLE9BQXRCLElBQUlwUixLQUFLay9DLGFBQW1CbC9DLEtBQUtnL0MsWUFBWTduQyxNQUNuRCxjQUFiMnNDLE9BQ0Y5akQsS0FBS21YLEtBQUtnOUIsT0FBTyxNQUFNbjBDLEtBQUtnL0MsWUFBWTduQyxNQUN4Q25YLEtBQUttWCxLQUFLZzlCLE9BQU8sR0FDakJuMEMsS0FBS21YLEtBQUtncUMsU0FBUztVQUV2QixFQUFBLEdBRUEsRUFBQTM2QyxLQUFBLHVCQUFBbkQsT0FRQSxTQUFvQjhOLElBQUt5dEMsSUFBVTNNLElBQU9rSyxJQUFBQTtBQUN4QyxnQkFBTTJKLEtBQVcsU0FBVTlHLElBQWE3QyxJQUFLaUgsSUFBQUE7QUFDM0MscUJBQVksYUFBUmpILEtBQ2EsVUFBWGlILEtBQXlCLEtBQ3RCcEUsR0FBWW9FLEVBQUFBLElBQUFBLFdBR2pCcEUsR0FBWTdDLEVBQUFBLEVBQUtpSCxFQUFBQSxJQUVacEUsR0FBWTdDLEVBQUFBLEVBQUtpSCxFQUFBQSxJQUdqQnBFLEdBQVlvRSxFQUFBQTtZQUFBQSxHQUlqQmpsQyxLQUFTLEVBQ2JndEIsT0FBTzJhLEdBQVM5bEQsS0FBS2cvQyxhQUFhN0MsSUFBSyxPQUFBLEdBQ3ZDaGxDLE1BQU0ydUMsR0FBUzlsRCxLQUFLZy9DLGFBQWE3QyxJQUFLLE1BQUEsR0FDdEM0SixNQUFNRCxHQUFTOWxELEtBQUtnL0MsYUFBYTdDLElBQUssTUFBQSxHQUN0Q0EsS0FBSzJKLEdBQVM5bEQsS0FBS2cvQyxhQUFhN0MsSUFBSyxLQUFBLEdBQ3JDdUYsU0FBU29FLEdBQVM5bEQsS0FBS2cvQyxhQUFhN0MsSUFBSyxTQUFBLEdBQ3pDZ0osYUFBYW5sRCxLQUFLZy9DLFlBQVltRyxhQUM5QkYsYUFBYWpsRCxLQUFLZy9DLFlBQVlpRyxZQUFBQTtBQUFBQSxhQUU1QnJHLE1BQVkzTSxRQUVKLGFBQVJrSyxNQUFBQSxTQUNBbjhDLEtBQUtnL0MsWUFBWXlELFdBQ2pCemlELEtBQUtxaEQsZUFBZTJFLHFCQUVwQjduQyxHQUFPZytCLE1BQU0sU0FFMkIsY0FBQSxPQUE3Qm44QyxLQUFLZy9DLFlBQVl5RCxXQUMxQnppRCxLQUFLZy9DLFlBQVl5RCxRQUNmdGtDLElBQ0FuZSxLQUFLcWhELGVBQWVoNkMsSUFDcEJ1M0MsSUFDQTNNLEVBQUFBO0FBTVIsZ0JBQUlnVSxLQUFhO0FBVWpCLG1CQUFBLFdBVEk5bkMsR0FBT2crQixPQUFvQyxPQUFmaCtCLEdBQU9nK0IsUUFFckM4SixNQUFjOW5DLEdBQU9nK0IsTUFBTSxNQUU3QjhKLE1BQWM5bkMsR0FBT2hILE9BQU8sUUFBUWdILEdBQU80bkMsTUFFM0M1MEMsR0FBSTR0QyxPQUFPa0gsR0FBVzk3QyxRQUFRLE1BQU0sRUFBQSxHQUNwQ2dVLEdBQU80Z0MsT0FBTzV0QyxHQUFJNHRDLE1BQ2xCNWdDLEdBQU9nMUIsU0FBU2gxQixHQUFPaEgsTUFDaEJnSDtVQUNULEVBQUEsR0FFQSxFQUFBM1gsS0FBQSxrQkFBQW5ELE9BTUEsU0FBZXU3QyxJQUFVM00sSUFBQUE7QUFDdkIsbUJBQU8yTSxPQUFhNStDLEtBQUtrbUQsaUJBQWlCalUsT0FBVWp5QyxLQUFLbW1EO1VBQzNELEVBQUEsR0FFQSxFQUFBMy9DLEtBQUEscUJBQUFuRCxPQVVBLFNBQWtCOE4sSUFBS3l0QyxJQUFVM00sSUFBT21VLElBQUFBO0FBRXRDLG1CQURpQixJQUFJekgsR0FBY3h0QyxJQUFLblIsTUFBTTQrQyxJQUFVM00sRUFBQUEsRUFDeENodEMsUUFBUW1oRCxFQUFBQTtVQUMxQixFQUFBLEdBRUEsRUFBQTUvQyxLQUFBLGlCQUFBbkQsT0FRQSxTQUFjOE4sSUFBS3l0QyxJQUFVM00sSUFBQUE7QUFDM0IsZ0JBQUEsVUFBSWp5QyxLQUFLdWhELGNBQXlCdmhELEtBQUtxbUQsZUFBZXpILElBQVUzTSxFQUFBQSxHQUFoRTtBQUdBLGtCQUFNdDZCLEtBQVEzWCxLQUFLc21ELGtCQUNqQm4xQyxJQUNBeXRDLElBQ0EzTSxJQUNBanlDLEtBQUtxaEQsZUFBZXBSLEtBQUFBO0FBR2xCandDLG1CQUFLZy9DLFlBQVk0QyxTQUFTLEtBQUtqcUMsR0FBTXU3QixRQUFRbHpDLEtBQUtnL0MsWUFBWTRDLFdBQ2hFanFDLEdBQU11N0IsUUFBUWx6QyxLQUFLZy9DLFlBQVk0QyxTQUdqQzVoRCxLQUFLbVgsS0FBSzB0QyxjQUFjbHRDLEdBQU13N0IsUUFDMUJuekMsS0FBS2cvQyxZQUFZOEMsU0FBUyxLQUFLbnFDLEdBQU13N0IsU0FBU256QyxLQUFLZy9DLFlBQVk4QyxXQUNqRW5xQyxHQUFNdzdCLFNBQVNuekMsS0FBS2cvQyxZQUFZOEMsU0FHbEM5aEQsS0FBS2s4QyxRQUFRdmtDLEdBQU11a0MsT0FDbkJsOEMsS0FBS2svQyxZQUFZdm5DLEdBQU11a0MsTUFBTXgzQyxRQUM3QjFFLEtBQUttWCxLQUFLKzdCLFFBQVF2N0IsR0FBTXU3QixPQUN4Qmx6QyxLQUFLbVgsS0FBS2c4QixTQUFTeDdCLEdBQU13N0IsUUFDekJuekMsS0FBS2ttRCxnQkFBZ0J0SCxJQUNyQjUrQyxLQUFLbW1ELGFBQWFsVSxJQUVsQmp5QyxLQUFLdWhELGFBQUFBO1lBekJIO1VBMEJKLEVBQUEsR0FFQSxFQUFBLzZDLEtBQUEsV0FBQW5ELE9BS0EsV0FBQTtBQUNFLG1CQUNzQixNQUFwQnJELEtBQUttWCxLQUFLKzdCLFNBQ1csTUFBckJsekMsS0FBS21YLEtBQUtnOEIsVUFBQUEsV0FDVm56QyxLQUFLcWhELGVBQWVwUixTQUFBQSxFQUtEandDLEtBQUtnL0MsWUFBWTduQyxPQUFPblgsS0FBS20xQyxLQUFLNk8sS0FBS3ZvQixRQUN6Q3o3QixLQUFLcWhELGVBQWU0QyxRQUFRaFUsTUFBTWlVLGdCQUFnQjtVQUt2RSxFQUFBLENBQUEsR0FBQyxDQUFBLEVBQUExOUMsS0FBQSxtQkFBQW5ELE9BNXJCRCxTQUF1QmtqRCxJQUFZQyxJQUFBQTtBQUNqQyxnQkFBQSxDQUFLQSxNQUFrQyxZQUFBLE9BQWRBO0FBQXdCLHFCQUFBO0FBRWpELGdCQUFNQyxLQUFrQkQsR0FBVTdpRCxNQUFNLEdBQUE7QUFNeEMsbUJBSkE0aUQsR0FBV3B2QyxPQUFBQSxDQUFRc3ZDLEdBQWdCLENBQUEsRUFBR3Q4QyxRQUFRLE1BQU0sRUFBQSxHQUNwRG84QyxHQUFXUixPQUFPVSxHQUFnQixDQUFBLEdBQ2xDRixHQUFXcGIsUUFBUXNiLEdBQWdCLENBQUEsR0FBQTtVQUdyQyxFQUFBLENBQUEsQ0FBQSxHQUFDM0Y7UUFBQSxFQWhHUSxHQ2JQamhDLEtBQWdCdmYsSUFDaEI0RixLQUFjeEUsSUFFZG9DLEtBQWFDLFdDSGJxWSxLQUFJOWIsSUFFSk8sS0FBUTRDLEdBQ1JqRCxLQUFPd0YsSUFDUDBnRCxLREVhLFNBQVV4a0QsSUFBQUE7QUFDekIsY0FBSTJkLEdBQWMzZCxFQUFBQTtBQUFXLG1CQUFPQTtBQUNwQyxnQkFBTSxJQUFJNEIsR0FBV29DLEdBQVloRSxFQUFBQSxJQUFZLHVCQUFBO1FBQy9DLEdDSkl1SSxLQUFXNUMsSUFDWDFELEtBQVdpRixJQUNYc1IsS0FBU3BSLElBQ1RwSixLQUFRbUwsR0FFUnM3QyxLQVRhamxELEdBU2dCLFdBQVcsV0FBQSxHQUN4Q3FaLEtBQWtCM1ksT0FBT3hCLFdBQ3pCaUcsS0FBTyxDQUFBLEVBQUdBLE1BTVYrL0MsS0FBaUIxbUQsR0FBTSxXQUFBO0FBQ3pCLG1CQUFTb1EsS0FBQUE7VUFBbUI7QUFDNUIsaUJBQUEsRUFBU3EyQyxHQUFnQixXQUFBO1VBQTJCLEdBQUUsQ0FBQSxHQUFJcjJDLEVBQUFBLGFBQWNBO1FBQzFFLENBQUEsR0FFSXUyQyxLQUFBQSxDQUFZM21ELEdBQU0sV0FBQTtBQUNwQnltRCxhQUFnQixXQUFBO1VBQVksQ0FBQTtRQUM5QixDQUFBLEdBRUk3NkMsS0FBUzg2QyxNQUFrQkM7QUFFL0J6cUMsV0FBRSxFQUFFOVAsUUFBUSxXQUFXRyxNQUFBQSxNQUFZSyxRQUFRaEIsSUFBUWxHLE1BQU1rRyxHQUFBQSxHQUFVLEVBQ2pFMFQsV0FBVyxTQUFtQnNuQyxJQUFRcDJDLElBQUFBO0FBQ3BDZzJDLGFBQWFJLEVBQUFBLEdBQ2JyOEMsR0FBU2lHLEVBQUFBO0FBQ1QsY0FBSXEyQyxLQUFZOWxELFVBQVV5RCxTQUFTLElBQUlvaUQsS0FBU0osR0FBYXpsRCxVQUFVLENBQUEsQ0FBQTtBQUN2RSxjQUFJNGxELE1BQUFBLENBQWFEO0FBQWdCLG1CQUFPRCxHQUFnQkcsSUFBUXAyQyxJQUFNcTJDLEVBQUFBO0FBQ3RFLGNBQUlELE9BQVdDLElBQVc7QUFFeEIsb0JBQVFyMkMsR0FBS2hNLFFBQUFBO2NBQ1gsS0FBSztBQUFHLHVCQUFPLElBQUlvaUQ7Y0FDbkIsS0FBSztBQUFHLHVCQUFPLElBQUlBLEdBQU9wMkMsR0FBSyxDQUFBLENBQUE7Y0FDL0IsS0FBSztBQUFHLHVCQUFPLElBQUlvMkMsR0FBT3AyQyxHQUFLLENBQUEsR0FBSUEsR0FBSyxDQUFBLENBQUE7Y0FDeEMsS0FBSztBQUFHLHVCQUFPLElBQUlvMkMsR0FBT3AyQyxHQUFLLENBQUEsR0FBSUEsR0FBSyxDQUFBLEdBQUlBLEdBQUssQ0FBQSxDQUFBO2NBQ2pELEtBQUs7QUFBRyx1QkFBTyxJQUFJbzJDLEdBQU9wMkMsR0FBSyxDQUFBLEdBQUlBLEdBQUssQ0FBQSxHQUFJQSxHQUFLLENBQUEsR0FBSUEsR0FBSyxDQUFBLENBQUE7WUFBQTtBQUc1RCxnQkFBSXMyQyxLQUFRLENBQUMsSUFBQTtBQUViLG1CQURBbm1ELEdBQU1nRyxJQUFNbWdELElBQU90MkMsRUFBQUEsR0FDWixLQUFLN1AsR0FBTUwsSUFBTXNtRCxJQUFRRSxFQUFBQTtVQUNqQztBQUVELGNBQUlyNkMsS0FBUW82QyxHQUFVbm1ELFdBQ2xCZ2pCLEtBQVdsSixHQUFPdlcsR0FBU3dJLEVBQUFBLElBQVNBLEtBQVFvTyxFQUFBQSxHQUM1Q3JTLEtBQVM3SCxHQUFNaW1ELElBQVFsakMsSUFBVWxULEVBQUFBO0FBQ3JDLGlCQUFPdk0sR0FBU3VFLEVBQUFBLElBQVVBLEtBQVNrYjtRQUNwQyxFQUFBLENBQUE7QUNyREgsWUFBQSxLQUFBLEVBQVdsaUIsR0FFV1YsUUFBUXdlLFNBQUFBLEdBQUFBLEtBQUFBLEVDSGpCbGYsRUFBQUE7QUNBTEEsV0FLTixFQUFFZ00sUUFBUSxVQUFVRyxNQUFBQSxLQUFNLEdBQVEsRUFDbEN1UCxnQkFMbUJ0YSxHQUFBQSxDQUFBQTtBQ0FyQixZQUFBLEtBQUEsRUFBV0EsR0FFV1UsT0FBTzRaLGNBQUFBLEdBQUFBLEtBQUFBLEVDSGhCMWIsRUFBQUE7QUNDRSxpQkFBUzJtRCxHQUFnQjk1QixJQUFHNmMsSUFBQUE7QUFDekMsY0FBSXBiO0FBS0osaUJBSkFxNEIsS0FBa0JDLEtBQXlCQyxHQUFzQnY0QixLQUFXczRCLEVBQUFBLEVBQXdCcG1ELEtBQUs4dEIsRUFBQUEsSUFBWSxTQUF5QnpCLElBQUc2YyxJQUFBQTtBQUUvSSxtQkFEQTdjLEdBQUVoUixZQUFZNnRCLElBQ1A3YztVQUNYLEdBQ1M4NUIsR0FBZ0I5NUIsSUFBRzZjLEVBQUFBO1FBQzVCO0FDTmUsaUJBQVNvZCxJQUFVOXlCLElBQVVDLElBQUFBO0FBQzFDLGNBQTBCLGNBQUEsT0FBZkEsTUFBNEMsU0FBZkE7QUFDdEMsa0JBQU0sSUFBSXh3QixVQUFVLG9EQUFBO0FBRXRCdXdCLFVBQUFBLEdBQVMxekIsWUFBWTRxQyxHQUFlalgsTUFBY0EsR0FBVzN6QixXQUFXLEVBQ3RFZ2EsYUFBYSxFQUNYdlgsT0FBT2l4QixJQUNQL3dCLFVBQUFBLE1BQ0FELGNBQUFBLEtBQWMsRUFBQSxDQUFBLEdBR2xCc3FCLEdBQXVCMEcsSUFBVSxhQUFhLEVBQzVDL3dCLFVBQUFBLE1BQVUsQ0FBQSxHQUVSZ3hCLE1BQVl2WSxHQUFlc1ksSUFBVUMsRUFBQUE7UUFDM0M7QUNoQmUsaUJBQVM4eUIsR0FBMkJ0bkQsSUFBTWUsSUFBQUE7QUFDdkQsY0FBSUEsT0FBMkIsYUFBbEJvc0IsR0FBUXBzQixFQUFBQSxLQUFzQyxjQUFBLE9BQVRBO0FBQ2hELG1CQUFPQTtBQUNGLGNBQUEsV0FBSUE7QUFDVCxrQkFBTSxJQUFJaUQsVUFBVSwwREFBQTtBQUV0QixpQkNSYSxTQUFnQ2hFLElBQUFBO0FBQzdDLGdCQUFBLFdBQUlBO0FBQ0Ysb0JBQU0sSUFBSTAwQixlQUFlLDJEQUFBO0FBRTNCLG1CQUFPMTBCO1VBQ1QsRURHK0JBLEVBQUFBO1FBQy9CO0FFUkEsWUFBQSxLQUFBLEVBQWFPLEVBQUFBO0FDRUUsaUJBQVNnbkQsR0FBZ0JuNkIsSUFBQUE7QUFDdEMsY0FBSXlCO0FBSUosaUJBSEEwNEIsS0FBa0JKLEtBQXlCQyxHQUFzQnY0QixLQUFXMjRCLEVBQUFBLEVBQXdCem1ELEtBQUs4dEIsRUFBQUEsSUFBWSxTQUF5QnpCLElBQUFBO0FBQzVJLG1CQUFPQSxHQUFFaFIsYUFBYW9yQyxHQUF1QnA2QixFQUFBQTtVQUNqRCxHQUNTbTZCLEdBQWdCbjZCLEVBQUFBO1FBQ3pCO0FDVEEsWUFHTXE2QixLQUFRLFdBQUE7QUFNWixtQkFBQUEsR0FBWTM3QyxJQUFTc3BDLElBQU1zUyxJQUFBQTtBQUFhOWpDLGVBQUFBLE1BQUE2akMsRUFBQUEsR0FDdEN4bkQsS0FBS20xQyxPQUFPQSxJQUNabjFDLEtBQUt5bkQsY0FBY0EsSUFDbkJ6bkQsS0FBS2toRCxXQUFXcjFDLEVBQUFBLEdBQ2hCN0wsS0FBS20wQyxNQUFBQSxRQUNMbjBDLEtBQUtrMEMsT0FBQUEsUUFDTGwwQyxLQUFLbXpDLFNBQUFBLFFBQ0xuekMsS0FBS2t6QyxRQUFBQSxRQUNMbHpDLEtBQUt5VSxTQUFBQSxRQUNMelUsS0FBSzBuRCxTQUFBQSxRQUNMMW5ELEtBQUsybkQsZ0JBQUFBLE1BQ0wzbkQsS0FBSzRuRCxjQUFjLEVBQUV6VCxLQUFLLEdBQUdELE1BQU0sR0FBR3NILE9BQU8sR0FBR0MsUUFBUSxFQUFBO1VBQzFEO0FBdVJDLGlCQXJSRDV0QixHQUFBMjVCLElBQUEsQ0FBQSxFQUFBaGhELEtBQUEsY0FBQW5ELE9BSUEsU0FBV3dJLElBQUFBO0FBQ1Q3TCxpQkFBSzZMLFVBQVVBO1VBQ2pCLEVBQUEsR0FFQSxFQUFBckYsS0FBQSxlQUFBbkQsT0FLQSxTQUFZb2tELElBQUFBO0FBQ1Z6bkQsaUJBQUswbkQsU0FBUyxDQUFBLEdBQ1YxbkQsS0FBSzZMLFFBQVE2N0MsV0FDbUIsWUFBOUJ4NkIsR0FBT2x0QixLQUFLNkwsUUFBUTY3QyxNQUFBQSxLQUN0QjFuRCxLQUFLMG5ELE9BQU92VCxNQUFNbjBDLEtBQUs2TCxRQUFRNjdDLE9BQU92VCxLQUN0Q24wQyxLQUFLMG5ELE9BQU9sTSxRQUFReDdDLEtBQUs2TCxRQUFRNjdDLE9BQU9sTSxPQUN4Q3g3QyxLQUFLMG5ELE9BQU9qTSxTQUFTejdDLEtBQUs2TCxRQUFRNjdDLE9BQU9qTSxRQUN6Q3o3QyxLQUFLMG5ELE9BQU94VCxPQUFPbDBDLEtBQUs2TCxRQUFRNjdDLE9BQU94VCxTQUV2Q2wwQyxLQUFLMG5ELE9BQU92VCxNQUFNbjBDLEtBQUs2TCxRQUFRNjdDLFFBQy9CMW5ELEtBQUswbkQsT0FBT2xNLFFBQVF4N0MsS0FBSzZMLFFBQVE2N0MsUUFDakMxbkQsS0FBSzBuRCxPQUFPak0sU0FBU3o3QyxLQUFLNkwsUUFBUTY3QyxRQUNsQzFuRCxLQUFLMG5ELE9BQU94VCxPQUFPbDBDLEtBQUs2TCxRQUFRNjdDLFVBR3BDRCxHQUFZSSxZQUFZN25ELEtBQUswbkQsTUFBQUE7VUFDL0IsRUFBQSxHQUVBLEVBQUFsaEQsS0FBQSxxQkFBQW5ELE9BT0EsU0FBa0I4TixJQUFLOHBCLElBQUFBO0FBQ3JCLGdCQUFNNnNCLEtBQWM5bkQsS0FBSzZMLFFBQVFpOEM7QUFJakMsbUJBSEkzMkMsTUFDRm5SLEtBQUsrbkQsT0FBTzUyQyxFQUFBQSxHQUdaeFIsS0FBSytOLElBQ0gvTixLQUFLczFCLElBQUlqMUIsS0FBS2t6QyxRQUFRLElBQUl2ekMsS0FBS3dVLElBQUk4bUIsRUFBQUEsQ0FBQUEsR0FDbkN0N0IsS0FBS3MxQixJQUFJajFCLEtBQUttekMsU0FBUyxJQUFJeHpDLEtBQUt5VSxJQUFJNm1CLEVBQUFBLENBQUFBLENBQUFBLElBQ2xDNnNCO1VBRVIsRUFBQSxHQUVBLEVBQUF0aEQsS0FBQSxnQkFBQW5ELE9BS0EsU0FBYThOLElBQUtnTixJQUFBQTtBQUNaQSxZQUFBQSxHQUFPNnBDLFdBQ1Q3MkMsR0FBSTgyQyxjQUFjOXBDLEdBQU84cEMsYUFDekI5MkMsR0FBSSsyQyxhQUFhL3BDLEdBQU9ncUMsWUFDeEJoM0MsR0FBSWkzQyxnQkFBZ0JqcUMsR0FBT2txQyxTQUMzQmwzQyxHQUFJbTNDLGdCQUFnQm5xQyxHQUFPb3FDO1VBRS9CLEVBQUEsR0FFQSxFQUFBL2hELEtBQUEsaUJBQUFuRCxPQUtBLFNBQWM4TixJQUFLZ04sSUFBQUE7QUFDYkEsWUFBQUEsR0FBTzZwQyxXQUNUNzJDLEdBQUk4MkMsY0FBYyxpQkFDbEI5MkMsR0FBSSsyQyxhQUFhLEdBQ2pCLzJDLEdBQUlpM0MsZ0JBQWdCLEdBQ3BCajNDLEdBQUltM0MsZ0JBQWdCO1VBRXhCLEVBQUEsR0FFQSxFQUFBOWhELEtBQUEsc0JBQUFuRCxPQUtBLFNBQW1COE4sSUFBS2dOLElBQUFBO0FBQ3RCLGdCQUFBLFVBQUlBLEdBQU9xcUM7QUFDVCxrQkFBQSxXQUFJcjNDLEdBQUlzM0MsYUFBMkI7QUFDakMsb0JBQUlDLEtBQVN2cUMsR0FBT3FxQztBQUFBQSx5QkFDaEJFLE9BQ0ZBLEtBQVMsQ0FBQyxHQUFHLEVBQUEsSUFFZnYzQyxHQUFJczNDLFlBQVlDLEVBQUFBO2NBQ2xCO0FBQ0V2Z0Isd0JBQVFDLEtBQ04sa0ZBQUEsR0FFRnBvQyxLQUFLNkwsUUFBUTg4QyxnQkFBZ0JILGVBQUFBLE9BQzdCcnFDLEdBQU9xcUMsZUFBQUE7VUFHYixFQUFBLEdBRUEsRUFBQWhpRCxLQUFBLHVCQUFBbkQsT0FLQSxTQUFvQjhOLElBQUtnTixJQUFBQTtBQUFBQSxzQkFDbkJBLEdBQU9xcUMsaUJBQUFBLFdBQ0xyM0MsR0FBSXMzQyxjQUNOdDNDLEdBQUlzM0MsWUFBWSxDQUFDLENBQUEsQ0FBQSxLQUVqQnRnQixRQUFRQyxLQUNOLGtGQUFBLEdBRUZwb0MsS0FBSzZMLFFBQVE4OEMsZ0JBQWdCSCxlQUFBQSxPQUM3QnJxQyxHQUFPcXFDLGVBQUFBO1VBR2IsRUFBQSxHQUVBLEVBQUFoaUQsS0FBQSxnQkFBQW5ELE9BUUEsU0FBYXU3QyxJQUFVM00sSUFBQUE7QUFDckIsbUJBQUEsU0FBSWp5QyxLQUFLMm5ELGlCQUdQM25ELEtBQUsybkQsZ0JBQUFBLE9BQWdCLFFBQ2QsV0FJUDNuRCxLQUFLa3pDLFNBQ0xsekMsS0FBS3luRCxZQUFZcEIsZUFBZXpILElBQVUzTSxFQUFBQTtVQUU5QyxFQUFBLEdBRUEsRUFBQXpyQyxLQUFBLHNCQUFBbkQsT0FLQSxTQUFtQjhOLElBQUtnTixJQUFBQTtBQUN0QixnQkFBTTJwQyxLQUFjM3BDLEdBQU8ycEMsY0FBYzluRCxLQUFLbTFDLEtBQUs2TyxLQUFLdm9CO0FBRXhEdHFCLFlBQUFBLEdBQUlpMEMsWUFBWXpsRCxLQUFLK04sSUFBSTFOLEtBQUtrekMsT0FBTzRVLEVBQUFBLEdBQ3JDMzJDLEdBQUlrMEMsY0FBY2xuQyxHQUFPeXFDLGFBQ3pCejNDLEdBQUlvekMsWUFBWXBtQyxHQUFPZ3RCO1VBQ3pCLEVBQUEsR0FFQSxFQUFBM2tDLEtBQUEsaUJBQUFuRCxPQUtBLFNBQWM4TixJQUFLZ04sSUFBQUE7QUFDakIsZ0JBQU0ycEMsS0FBYzNwQyxHQUFPMnBDLGNBQWM5bkQsS0FBS20xQyxLQUFLNk8sS0FBS3ZvQjtBQUd4RHRxQixZQUFBQSxHQUFJMDNDLEtBQUFBLEdBRUFmLEtBQWMsTUFDaEI5bkQsS0FBSzhvRCxtQkFBbUIzM0MsSUFBS2dOLEVBQUFBLEdBRTdCaE4sR0FBSTQzQyxPQUFBQSxHQUVKL29ELEtBQUtncEQsb0JBQW9CNzNDLElBQUtnTixFQUFBQSxJQUVoQ2hOLEdBQUk4M0MsUUFBQUE7VUFDTixFQUFBLEdBRUEsRUFBQXppRCxLQUFBLGVBQUFuRCxPQUtBLFNBQVk4TixJQUFLZ04sSUFBQUE7QUFDZmhOLFlBQUFBLEdBQUkwM0MsS0FBQUEsR0FDSjEzQyxHQUFJb3pDLFlBQVlwbUMsR0FBT2d0QixPQUV2Qm5yQyxLQUFLa3BELGFBQWEvM0MsSUFBS2dOLEVBQUFBLEdBRXZCZ3JDLEdBQUFoNEMsRUFBQUEsRUFBR3JRLEtBQUhxUSxFQUFBQSxHQUVBblIsS0FBS29wRCxjQUFjajRDLElBQUtnTixFQUFBQSxHQUV4QmhOLEdBQUk4M0MsUUFBQUEsR0FDSmpwRCxLQUFLcXBELGNBQWNsNEMsSUFBS2dOLEVBQUFBO1VBQzFCLEVBQUEsR0FFQSxFQUFBM1gsS0FBQSx5QkFBQW5ELE9BS0EsU0FBc0Jxa0QsSUFBQUE7QUFDcEIxbkQsaUJBQUs0bkQsWUFBWTFULFFBQVF3VCxJQUN6QjFuRCxLQUFLNG5ELFlBQVl6VCxPQUFPdVQsSUFDeEIxbkQsS0FBSzRuRCxZQUFZbk0sVUFBVWlNLElBQzNCMW5ELEtBQUs0bkQsWUFBWXBNLFNBQVNrTTtVQUM1QixFQUFBLEdBRUEsRUFBQWxoRCxLQUFBLHNCQUFBbkQsT0FhQSxTQUFtQmdLLElBQUcrRCxJQUFHRCxJQUFLeXRDLElBQVUzTSxJQUFBQTtBQUFBQSx1QkFDbEM5Z0MsTUFDRm5SLEtBQUsrbkQsT0FBTzUyQyxJQUFLeXRDLElBQVUzTSxFQUFBQSxHQUc3Qmp5QyxLQUFLazBDLE9BQU83bUMsS0FBSXJOLEtBQUtrekMsUUFBUSxHQUM3Qmx6QyxLQUFLbTBDLE1BQU0vaUMsS0FBSXBSLEtBQUttekMsU0FBUyxHQUU3Qm56QyxLQUFLNG5ELFlBQVkxVCxPQUFPbDBDLEtBQUtrMEMsTUFDN0JsMEMsS0FBSzRuRCxZQUFZelQsTUFBTW4wQyxLQUFLbTBDLEtBQzVCbjBDLEtBQUs0bkQsWUFBWW5NLFNBQVN6N0MsS0FBS20wQyxNQUFNbjBDLEtBQUttekMsUUFDMUNuekMsS0FBSzRuRCxZQUFZcE0sUUFBUXg3QyxLQUFLazBDLE9BQU9sMEMsS0FBS2t6QztVQUM1QyxFQUFBLEdBRUEsRUFBQTFzQyxLQUFBLHFCQUFBbkQsT0FVQSxTQUFrQmdLLElBQUcrRCxJQUFHRCxJQUFLeXRDLElBQVUzTSxJQUFBQTtBQUNyQ2p5QyxpQkFBS3NwRCxtQkFBbUJqOEMsSUFBRytELElBQUdELElBQUt5dEMsSUFBVTNNLEVBQUFBO1VBQy9DLEVBQUEsR0FFQSxFQUFBenJDLEtBQUEsMEJBQUFuRCxPQWFBLFNBQXVCOE4sSUFBS3l0QyxJQUFVM00sSUFBQUE7QUFHcENqeUMsaUJBQUt1cEQsV0FBV3ZwRCxLQUFLeW5ELFlBQVkrQixZQUFZcjRDLElBQUt5dEMsSUFBVTNNLEVBQUFBO0FBQzVELGdCQUFJaUIsS0FBUWx6QyxLQUFLdXBELFNBQVNyVyxPQUN0QkMsS0FBU256QyxLQUFLdXBELFNBQVNwVztBQVMzQixtQkFOYyxNQUFWRCxPQUVGQSxLQUhtQixJQUluQkMsS0FKbUIsS0FPZCxFQUFFRCxPQUFPQSxJQUFPQyxRQUFRQSxHQUFBQTtVQUNqQyxFQUFBLENBQUEsQ0FBQSxHQUFDcVU7UUFBQSxFQXpTVztBQ0hELGlCQUFBaUMsR0FBQUMsSUFBQUE7QUFBQUMsY0FBQUEsS0FBQSxXQUFBO0FBQUEzb0QsZ0JBQUE0b0QsZUFBQUEsT0FBQTVvRCxXQUFBQSxDQUFBNG9EO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsR0FBQWhrRDtBQUFBLHFCQUFBO0FBQUEsZ0JBQUEsY0FBQSxPQUFBaWtEO0FBQUEscUJBQUE7QUFBQSxnQkFBQTtBQUFBLHFCQUFBbmxDLFFBQUE5akIsVUFBQTJILFFBQUF6SCxLQUFBOG9ELEdBQUFsbEMsU0FBQSxDQUFBLEdBQUEsV0FBQTtjQUFBLENBQUEsQ0FBQSxHQUFBO1lBQUEsU0FBQTBLLElBQUFBO0FBQUEscUJBQUE7WUFBQTtVQUFBLEVBQUEwNkI7QUFBQSxpQkFBQSxXQUFBO0FBQUFDLGdCQUFBcmhELElBQUFxaEQsS0FBQXpDLEdBQUFvQyxFQUFBQTtBQUFBQSxnQkFBQUMsSUFBQTtBQUFBLGtCQUFBSyxLQUFBMUMsR0FBQUEsSUFBQUEsRUFBQTFzQztBQUFBbFMsY0FBQUEsS0FBQWtoRCxHQUFBRyxJQUFBOW9ELFdBQUErb0QsRUFBQUE7WUFBQUE7QUFBQXRoRCxjQUFBQSxLQUFBcWhELEdBQUFscEQsTUFBQUEsTUFBQUksU0FBQUE7QUFBQSxtQkFBQW9tRCxHQUFBcm5ELE1BQUEwSSxFQUFBQTtVQUFBO1FBQUE7QUFLYixZQUtNdWhELEtBQUFBLFNBQUdDLElBQUFBO0FBQUE5QyxVQUFBQSxJQUFBNkMsSUFBQUMsRUFBQUE7QUFBQSxjQUFBcmhCLEtBQUE0Z0IsR0FBQVEsRUFBQUE7QUFNUCxtQkFBQUEsR0FBWXArQyxJQUFTc3BDLElBQU1zUyxJQUFBQTtBQUFhLGdCQUFBOW9CO0FBRVIsbUJBRlFoYixHQUFBQSxNQUFBc21DLEVBQUFBLElBQ3RDdHJCLEtBQUFrSyxHQUFBL25DLEtBQUFBLE1BQU0rSyxJQUFTc3BDLElBQU1zUyxFQUFBQSxHQUNoQjBDLFlBQVkxQyxFQUFBQSxHQUFhOW9CO1VBQ2hDO0FBc0ZDLGlCQXBGRDlRLEdBQUFvOEIsSUFBQSxDQUFBLEVBQUF6akQsS0FBQSxVQUFBbkQsT0FNQSxTQUFPOE4sSUFBQUE7QUFBbUQsZ0JBQTlDeXRDLEtBQVEzOUMsVUFBQXlELFNBQUF6RCxLQUFBQSxXQUFBQSxVQUFBNGQsQ0FBQUEsSUFBQTVkLFVBQUcsQ0FBQSxJQUFBakIsS0FBSzQrQyxVQUFVM00sS0FBS2h4QyxVQUFBeUQsU0FBQXpELEtBQUFBLFdBQUFBLFVBQUE0ZCxDQUFBQSxJQUFBNWQsVUFBRyxDQUFBLElBQUFqQixLQUFLaXlDO0FBQ2pELGdCQUFJanlDLEtBQUtvcUQsYUFBYXhMLElBQVUzTSxFQUFBQSxHQUFRO0FBQ3RDLGtCQUFNb1ksS0FBYXJxRCxLQUFLc3FELHVCQUF1Qm41QyxJQUFLeXRDLElBQVUzTSxFQUFBQTtBQUU5RGp5QyxtQkFBS2t6QyxRQUFRbVgsR0FBV25YLFFBQVFsekMsS0FBSzBuRCxPQUFPbE0sUUFBUXg3QyxLQUFLMG5ELE9BQU94VCxNQUNoRWwwQyxLQUFLbXpDLFNBQVNrWCxHQUFXbFgsU0FBU256QyxLQUFLMG5ELE9BQU92VCxNQUFNbjBDLEtBQUswbkQsT0FBT2pNLFFBQ2hFejdDLEtBQUt5VSxTQUFTelUsS0FBS2t6QyxRQUFRO1lBQzdCO1VBQ0YsRUFBQSxHQUVBLEVBQUExc0MsS0FBQSxRQUFBbkQsT0FTQSxTQUFLOE4sSUFBSzlELElBQUcrRCxJQUFHd3RDLElBQVUzTSxJQUFPOXpCLElBQUFBO0FBQy9CbmUsaUJBQUsrbkQsT0FBTzUyQyxJQUFLeXRDLElBQVUzTSxFQUFBQSxHQUMzQmp5QyxLQUFLazBDLE9BQU83bUMsS0FBSXJOLEtBQUtrekMsUUFBUSxHQUM3Qmx6QyxLQUFLbTBDLE1BQU0vaUMsS0FBSXBSLEtBQUttekMsU0FBUyxHQUU3Qm56QyxLQUFLdXFELG1CQUFtQnA1QyxJQUFLZ04sRUFBQUEsR0FDN0J6TSxHQUNFUCxJQUNBblIsS0FBS2swQyxNQUNMbDBDLEtBQUttMEMsS0FDTG4wQyxLQUFLa3pDLE9BQ0xsekMsS0FBS216QyxRQUNMaDFCLEdBQU9xc0MsWUFBQUEsR0FFVHhxRCxLQUFLeXFELFlBQVl0NUMsSUFBS2dOLEVBQUFBLEdBRXRCbmUsS0FBSzBxRCxrQkFBa0JyOUMsSUFBRytELElBQUdELElBQUt5dEMsSUFBVTNNLEVBQUFBLEdBQzVDanlDLEtBQUt5bkQsWUFBWWowQyxLQUNmckMsSUFDQW5SLEtBQUtrMEMsT0FBT2wwQyxLQUFLdXBELFNBQVNyVyxRQUFRLElBQUlsekMsS0FBSzBuRCxPQUFPeFQsTUFDbERsMEMsS0FBS20wQyxNQUFNbjBDLEtBQUt1cEQsU0FBU3BXLFNBQVMsSUFBSW56QyxLQUFLMG5ELE9BQU92VCxLQUNsRHlLLElBQ0EzTSxFQUFBQTtVQUVKLEVBQUEsR0FFQSxFQUFBenJDLEtBQUEscUJBQUFuRCxPQVFBLFNBQWtCZ0ssSUFBRytELElBQUdELElBQUt5dEMsSUFBVTNNLElBQUFBO0FBQ3JDanlDLGlCQUFLc3BELG1CQUFtQmo4QyxJQUFHK0QsSUFBR0QsSUFBS3l0QyxJQUFVM00sRUFBQUE7QUFFN0MsZ0JBQU11WSxLQUFleHFELEtBQUs2TCxRQUFRODhDLGdCQUFnQjZCO0FBQ2xEeHFELGlCQUFLMnFELHNCQUFzQkgsRUFBQUE7VUFDN0IsRUFBQSxHQUVBLEVBQUFoa0QsS0FBQSxvQkFBQW5ELE9BTUEsU0FBaUI4TixJQUFLOHBCLElBQUFBO0FBQ2hCOXBCLFlBQUFBLE1BQ0ZuUixLQUFLK25ELE9BQU81MkMsRUFBQUE7QUFFZCxnQkFBTTIyQyxLQUFjOW5ELEtBQUs2TCxRQUFRaThDO0FBRWpDLG1CQUNFbm9ELEtBQUsrTixJQUNIL04sS0FBS3MxQixJQUFJajFCLEtBQUtrekMsUUFBUSxJQUFJdnpDLEtBQUt3VSxJQUFJOG1CLEVBQUFBLENBQUFBLEdBQ25DdDdCLEtBQUtzMUIsSUFBSWoxQixLQUFLbXpDLFNBQVMsSUFBSXh6QyxLQUFLeVUsSUFBSTZtQixFQUFBQSxDQUFBQSxDQUFBQSxJQUNsQzZzQjtVQUVSLEVBQUEsQ0FBQSxDQUFBLEdBQUNtQztRQUFBLEVBL0ZlekMsRUFBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxlQUFBQSxPQUFBQSxXQUFBQSxDQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsY0FBQUEsT0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQTtBQUFBQSxxQkFBQUEsUUFBQUEsVUFBQUEsUUFBQUEsS0FBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsR0FBQUEsV0FBQUE7Y0FBQUEsQ0FBQUEsQ0FBQUEsR0FBQUE7WUFBQUEsU0FBQUEsSUFBQUE7QUFBQUEscUJBQUFBO1lBQUFBO1VBQUFBLEVBQUFBO0FBQUFBLGlCQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUEsS0FBQUEsR0FBQUEsRUFBQUE7QUFBQUEsZ0JBQUFBLElBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxHQUFBQSxJQUFBQSxXQUFBQSxFQUFBQTtZQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxHQUFBQSxNQUFBQSxNQUFBQSxTQUFBQTtBQUFBQSxtQkFBQUEsR0FBQUEsTUFBQUEsRUFBQUE7VUFBQUE7UUFBQUE7QUNQbEIsWUFlTW9ELEtBQUFBLFNBQWVWLElBQUFBO0FBQUE5QyxVQUFBQSxJQUFBd0QsSUFBQVYsRUFBQUE7QUFBQSxjQUFBcmhCLEtBQUE0Z0IsR0FBQW1CLEVBQUFBO0FBTW5CLG1CQUFBQSxHQUFZLytDLElBQVNzcEMsSUFBTXNTLElBQUFBO0FBQWEsZ0JBQUE5b0I7QUFHaEIsbUJBSGdCaGIsR0FBQUEsTUFBQWluQyxFQUFBQSxJQUN0Q2pzQixLQUFBa0ssR0FBQS9uQyxLQUFBQSxNQUFNK0ssSUFBU3NwQyxJQUFNc1MsRUFBQUEsR0FDaEJvRCxjQUFjLEdBQ25CbHNCLEdBQUtpZ0IsV0FBQUEsT0FBaUJqZ0I7VUFDeEI7QUEwTUMsaUJBeE1EOVEsR0FBQSs4QixJQUFBLENBQUEsRUFBQXBrRCxLQUFBLGNBQUFuRCxPQU1BLFNBQVd3SSxJQUFTaS9DLElBQVVDLElBQUFBO0FBQzVCL3FELGlCQUFLNkwsVUFBVUEsSUFBQUEsV0FFVGkvQyxNQUFBQSxXQUEwQkMsTUFDOUIvcUQsS0FBS2dyRCxVQUFVRixJQUFVQyxFQUFBQTtVQUU3QixFQUFBLEdBRUEsRUFBQXZrRCxLQUFBLGFBQUFuRCxPQVlBLFNBQVV5bkQsSUFBVUMsSUFBQUE7QUFDZEEsWUFBQUEsTUFBZS9xRCxLQUFLNCtDLFlBQ3RCNStDLEtBQUs4cUQsV0FBV0MsSUFDaEIvcUQsS0FBSytxRCxjQUFjRCxPQUVuQjlxRCxLQUFLOHFELFdBQVdBLElBQ2hCOXFELEtBQUsrcUQsY0FBY0E7VUFFdkIsRUFBQSxHQUVBLEVBQUF2a0QsS0FBQSxnQkFBQW5ELE9BT0EsU0FBYXU3QyxJQUFBQTtBQUNYLGdCQUFNcU0sS0FDSHJNLE1BQUFBLENBQWE1K0MsS0FBSzQrQyxZQUFBQSxDQUFlQSxNQUFZNStDLEtBQUs0K0M7QUFHckQsZ0JBRkE1K0MsS0FBSzQrQyxXQUFXQSxJQUFBQSxXQUVaNStDLEtBQUsrcUQsZUFBNkJFLElBQW1CO0FBQ3ZELGtCQUFNQyxLQUFXbHJELEtBQUs4cUQ7QUFDdEI5cUQsbUJBQUs4cUQsV0FBVzlxRCxLQUFLK3FELGFBQ3JCL3FELEtBQUsrcUQsY0FBY0c7WUFDckI7VUFDRixFQUFBLEdBRUEsRUFBQTFrRCxLQUFBLG9CQUFBbkQsT0FNQSxXQUFBO0FBQ0UsZ0JBQU04bkQsS0FBYSxFQUFFaFgsS0FBSyxHQUFHcUgsT0FBTyxHQUFHQyxRQUFRLEdBQUd2SCxNQUFNLEVBQUE7QUFDeEQsZ0JBQUlsMEMsS0FBSzZMLFFBQVF1L0MsY0FBYztBQUM3QixrQkFBTUMsS0FBZ0JyckQsS0FBSzZMLFFBQVF1L0M7QUFDUCwwQkFBeEJsK0IsR0FBT20rQixFQUFBQSxLQUNURixHQUFXaFgsTUFBTWtYLEdBQWNsWCxLQUMvQmdYLEdBQVczUCxRQUFRNlAsR0FBYzdQLE9BQ2pDMlAsR0FBVzFQLFNBQVM0UCxHQUFjNVAsUUFDbEMwUCxHQUFXalgsT0FBT21YLEdBQWNuWCxTQUVoQ2lYLEdBQVdoWCxNQUFNa1gsSUFDakJGLEdBQVczUCxRQUFRNlAsSUFDbkJGLEdBQVcxUCxTQUFTNFAsSUFDcEJGLEdBQVdqWCxPQUFPbVg7WUFFdEI7QUFFQSxtQkFBT0Y7VUFDVCxFQUFBLEdBRUEsRUFBQTNrRCxLQUFBLGdCQUFBbkQsT0FLQSxXQUFBO0FBQ0UsZ0JBQUk2dkMsSUFBT0M7QUFFWCxnQkFBQSxVQUFJbnpDLEtBQUs2TCxRQUFRODhDLGdCQUFnQjJDLGNBQXdCO0FBRXZELGtCQUFJQyxLQUFjLEdBQ2RDLEtBQWU7QUFHZnhyRCxtQkFBSzhxRCxTQUFTNVgsU0FBU2x6QyxLQUFLOHFELFNBQVMzWCxXQUNuQ256QyxLQUFLOHFELFNBQVM1WCxRQUFRbHpDLEtBQUs4cUQsU0FBUzNYLFNBQ3RDb1ksS0FBY3ZyRCxLQUFLOHFELFNBQVM1WCxRQUFRbHpDLEtBQUs4cUQsU0FBUzNYLFNBRWxEcVksS0FBZXhyRCxLQUFLOHFELFNBQVMzWCxTQUFTbnpDLEtBQUs4cUQsU0FBUzVYLFFBSXhEQSxLQUE0QixJQUFwQmx6QyxLQUFLNkwsUUFBUXNMLE9BQVdvMEMsSUFDaENwWSxLQUE2QixJQUFwQm56QyxLQUFLNkwsUUFBUXNMLE9BQVdxMEM7WUFDbkMsT0FBTztBQUVMLGtCQUFNTCxLQUFhbnJELEtBQUt5ckQsaUJBQUFBO0FBQ3hCdlksY0FBQUEsS0FBUWx6QyxLQUFLOHFELFNBQVM1WCxRQUFRaVksR0FBV2pYLE9BQU9pWCxHQUFXM1AsT0FDM0RySSxLQUFTbnpDLEtBQUs4cUQsU0FBUzNYLFNBQVNnWSxHQUFXaFgsTUFBTWdYLEdBQVcxUDtZQUM5RDtBQUVBejdDLGlCQUFLa3pDLFFBQVFBLElBQ2JsekMsS0FBS216QyxTQUFTQSxJQUNkbnpDLEtBQUt5VSxTQUFTLE1BQU16VSxLQUFLa3pDO1VBQzNCLEVBQUEsR0FFQSxFQUFBMXNDLEtBQUEsa0JBQUFuRCxPQVFBLFNBQWU4TixJQUFLOUQsSUFBRytELElBQUcrTSxJQUFBQTtBQUN4Qm5lLGlCQUFLdXFELG1CQUFtQnA1QyxJQUFLZ04sRUFBQUEsR0FDN0JqTixHQUFXQyxJQUFLOUQsSUFBRytELElBQUcrTSxHQUFPaEgsSUFBQUEsR0FDN0JuWCxLQUFLeXFELFlBQVl0NUMsSUFBS2dOLEVBQUFBO1VBQ3hCLEVBQUEsR0FFQSxFQUFBM1gsS0FBQSx3QkFBQW5ELE9BTUEsU0FBcUI4TixJQUFLZ04sSUFBQUE7QUFDeEIsZ0JBQTJCLEtBQXZCbmUsS0FBSzhxRCxTQUFTNVgsT0FBWTtBQUU1Qi9oQyxjQUFBQSxHQUFJdTZDLGNBQUFBLFdBQWN2dEMsR0FBT3duQyxVQUF3QnhuQyxHQUFPd25DLFVBQVUsR0FHbEUzbEQsS0FBS2twRCxhQUFhLzNDLElBQUtnTixFQUFBQTtBQUV2QixrQkFBSTgxQixLQUFTO0FBQUEsdUJBQ1RqMEMsS0FBSzZMLFFBQVE4OEMsZ0JBQWdCZ0Qsa0JBQy9CMVgsS0FBU2owQyxLQUFLOHFELFNBQVM1WCxRQUFRbHpDLEtBQUtrekMsUUFBUWx6QyxLQUFLbTFDLEtBQUs2TyxLQUFLdm9CO0FBRzdELGtCQUFNMHZCLEtBQWFuckQsS0FBS3lyRCxpQkFBQUEsR0FFbEJHLEtBQWE1ckQsS0FBS2swQyxPQUFPaVgsR0FBV2pYLE1BQ3BDMlgsS0FBWTdyRCxLQUFLbTBDLE1BQU1nWCxHQUFXaFgsS0FDbEMyWCxLQUFXOXJELEtBQUtrekMsUUFBUWlZLEdBQVdqWCxPQUFPaVgsR0FBVzNQLE9BQ3JEdVEsS0FBWS9yRCxLQUFLbXpDLFNBQVNnWSxHQUFXaFgsTUFBTWdYLEdBQVcxUDtBQUM1RHo3QyxtQkFBSzhxRCxTQUFTa0Isb0JBQ1o3NkMsSUFDQThpQyxJQUNBMlgsSUFDQUMsSUFDQUMsSUFDQUMsRUFBQUEsR0FJRi9yRCxLQUFLb3BELGNBQWNqNEMsSUFBS2dOLEVBQUFBO1lBQzFCO1VBQ0YsRUFBQSxHQUVBLEVBQUEzWCxLQUFBLG1CQUFBbkQsT0FTQSxTQUFnQjhOLElBQUs5RCxJQUFHK0QsSUFBR3d0QyxJQUFVM00sSUFBQUE7QUFDbkMsZ0JBQUlobUIsS0FBUztBQUViLGdCQUFBLFdBQUlqc0IsS0FBS216QyxRQUFzQjtBQUM3QmxuQixjQUFBQSxLQUF1QixNQUFkanNCLEtBQUttekM7QUFDZCxrQkFBTThZLEtBQWtCanNELEtBQUt5bkQsWUFBWStCLFlBQ3ZDcjRDLElBQ0F5dEMsSUFDQTNNLEVBQUFBO0FBRUVnYSxjQUFBQSxHQUFnQi9NLGFBQWEsTUFDL0JqekIsTUFBVWdnQyxHQUFnQjlZLFNBQVM7WUFFdkM7QUFFQSxnQkFBTStZLEtBQVM5NkMsS0FBSTZhO0FBRWZqc0IsaUJBQUs2TCxRQUFRb2tDLFVBQ2Zqd0MsS0FBSzZxRCxjQUFjNStCLEtBRXJCanNCLEtBQUt5bkQsWUFBWWowQyxLQUFLckMsSUFBSzlELElBQUc2K0MsSUFBUXROLElBQVUzTSxJQUFPLFNBQUE7VUFDekQsRUFBQSxDQUFBLENBQUEsR0FBQzJZO1FBQUEsRUFwTjJCcEQsRUFBQUE7QUNsQmpCLGlCQUFBaUMsR0FBQUMsSUFBQUE7QUFBQUMsY0FBQUEsS0FBQSxXQUFBO0FBQUEzb0QsZ0JBQUE0b0QsZUFBQUEsT0FBQTVvRCxXQUFBQSxDQUFBNG9EO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsR0FBQWhrRDtBQUFBLHFCQUFBO0FBQUEsZ0JBQUEsY0FBQSxPQUFBaWtEO0FBQUEscUJBQUE7QUFBQSxnQkFBQTtBQUFBLHFCQUFBbmxDLFFBQUE5akIsVUFBQTJILFFBQUF6SCxLQUFBOG9ELEdBQUFsbEMsU0FBQSxDQUFBLEdBQUEsV0FBQTtjQUFBLENBQUEsQ0FBQSxHQUFBO1lBQUEsU0FBQTBLLElBQUFBO0FBQUEscUJBQUE7WUFBQTtVQUFBLEVBQUEwNkI7QUFBQSxpQkFBQSxXQUFBO0FBQUFDLGdCQUFBcmhELElBQUFxaEQsS0FBQXpDLEdBQUFvQyxFQUFBQTtBQUFBQSxnQkFBQUMsSUFBQTtBQUFBLGtCQUFBSyxLQUFBMUMsR0FBQUEsSUFBQUEsRUFBQTFzQztBQUFBbFMsY0FBQUEsS0FBQWtoRCxHQUFBRyxJQUFBOW9ELFdBQUErb0QsRUFBQUE7WUFBQUE7QUFBQXRoRCxjQUFBQSxLQUFBcWhELEdBQUFscEQsTUFBQUEsTUFBQUksU0FBQUE7QUFBQSxtQkFBQW9tRCxHQUFBcm5ELE1BQUEwSSxFQUFBQTtVQUFBO1FBQUE7QUFJYixZQUtNeWpELEtBQUFBLFNBQU1DLElBQUFBO0FBQUFoRixVQUFBQSxJQUFBK0UsSUFBQUMsRUFBQUE7QUFBQSxjQUFBdmpCLEtBQUE0Z0IsR0FBQTBDLEVBQUFBO0FBTVYsbUJBQUFBLEdBQVl0Z0QsSUFBU3NwQyxJQUFNc1MsSUFBQUE7QUFBYSxnQkFBQTlvQjtBQUVSLG1CQUZRaGIsR0FBQUEsTUFBQXdvQyxFQUFBQSxJQUN0Q3h0QixLQUFBa0ssR0FBQS9uQyxLQUFBQSxNQUFNK0ssSUFBU3NwQyxJQUFNc1MsRUFBQUEsR0FDaEIwQyxZQUFZMUMsRUFBQUEsR0FBYTlvQjtVQUNoQztBQXdFQyxpQkF0RUQ5USxHQUFBcytCLElBQUEsQ0FBQSxFQUFBM2xELEtBQUEsVUFBQW5ELE9BTUEsU0FBTzhOLElBQUFBO0FBQW1ELGdCQUE5Q3l0QyxLQUFRMzlDLFVBQUF5RCxTQUFBekQsS0FBQUEsV0FBQUEsVUFBQTRkLENBQUFBLElBQUE1ZCxVQUFHLENBQUEsSUFBQWpCLEtBQUs0K0MsVUFBVTNNLEtBQUtoeEMsVUFBQXlELFNBQUF6RCxLQUFBQSxXQUFBQSxVQUFBNGQsQ0FBQUEsSUFBQTVkLFVBQUcsQ0FBQSxJQUFBakIsS0FBS2l5QztBQUNqRCxnQkFBSWp5QyxLQUFLb3FELGFBQWF4TCxJQUFVM00sRUFBQUEsR0FBUTtBQUN0QyxrQkFBTW9ZLEtBQWFycUQsS0FBS3NxRCx1QkFBdUJuNUMsSUFBS3l0QyxJQUFVM00sRUFBQUEsR0FFeERvYSxLQUFXMXNELEtBQUs4TixJQUNwQjQ4QyxHQUFXblgsUUFBUWx6QyxLQUFLMG5ELE9BQU9sTSxRQUFReDdDLEtBQUswbkQsT0FBT3hULE1BQ25EbVcsR0FBV2xYLFNBQVNuekMsS0FBSzBuRCxPQUFPdlQsTUFBTW4wQyxLQUFLMG5ELE9BQU9qTSxNQUFBQTtBQUdwRHo3QyxtQkFBSzZMLFFBQVFzTCxPQUFPazFDLEtBQVcsR0FDL0Jyc0QsS0FBS2t6QyxRQUFRbVosSUFDYnJzRCxLQUFLbXpDLFNBQVNrWixJQUNkcnNELEtBQUt5VSxTQUFTelUsS0FBS2t6QyxRQUFRO1lBQzdCO1VBQ0YsRUFBQSxHQUVBLEVBQUExc0MsS0FBQSxRQUFBbkQsT0FTQSxTQUFLOE4sSUFBSzlELElBQUcrRCxJQUFHd3RDLElBQVUzTSxJQUFPOXpCLElBQUFBO0FBQy9CbmUsaUJBQUsrbkQsT0FBTzUyQyxJQUFLeXRDLElBQVUzTSxFQUFBQSxHQUMzQmp5QyxLQUFLazBDLE9BQU83bUMsS0FBSXJOLEtBQUtrekMsUUFBUSxHQUM3Qmx6QyxLQUFLbTBDLE1BQU0vaUMsS0FBSXBSLEtBQUttekMsU0FBUyxHQUU3Qm56QyxLQUFLc3NELGVBQWVuN0MsSUFBSzlELElBQUcrRCxJQUFHK00sRUFBQUEsR0FFL0JuZSxLQUFLMHFELGtCQUFrQnI5QyxJQUFHK0QsRUFBQUEsR0FDMUJwUixLQUFLeW5ELFlBQVlqMEMsS0FDZnJDLElBQ0FuUixLQUFLazBDLE9BQU9sMEMsS0FBS3VwRCxTQUFTclcsUUFBUSxJQUFJbHpDLEtBQUswbkQsT0FBT3hULE1BQ2xEOWlDLElBQ0F3dEMsSUFDQTNNLEVBQUFBO1VBRUosRUFBQSxHQUVBLEVBQUF6ckMsS0FBQSxxQkFBQW5ELE9BS0EsU0FBa0JnSyxJQUFHK0QsSUFBQUE7QUFDbkJwUixpQkFBSzRuRCxZQUFZelQsTUFBTS9pQyxLQUFJcFIsS0FBSzZMLFFBQVFzTCxNQUN4Q25YLEtBQUs0bkQsWUFBWTFULE9BQU83bUMsS0FBSXJOLEtBQUs2TCxRQUFRc0wsTUFDekNuWCxLQUFLNG5ELFlBQVlwTSxRQUFRbnVDLEtBQUlyTixLQUFLNkwsUUFBUXNMLE1BQzFDblgsS0FBSzRuRCxZQUFZbk0sU0FBU3JxQyxLQUFJcFIsS0FBSzZMLFFBQVFzTDtVQUM3QyxFQUFBLEdBRUEsRUFBQTNRLEtBQUEsb0JBQUFuRCxPQUtBLFNBQWlCOE4sSUFBQUE7QUFJZixtQkFISUEsTUFDRm5SLEtBQUsrbkQsT0FBTzUyQyxFQUFBQSxHQUVNLE1BQWJuUixLQUFLa3pDO1VBQ2QsRUFBQSxDQUFBLENBQUEsR0FBQ2laO1FBQUEsRUFqRmtCdkIsRUFBQUE7QUNUUixpQkFBQW5CLEdBQUFDLElBQUFBO0FBQUFDLGNBQUFBLEtBQUEsV0FBQTtBQUFBM29ELGdCQUFBNG9ELGVBQUFBLE9BQUE1b0QsV0FBQUEsQ0FBQTRvRDtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFoa0Q7QUFBQSxxQkFBQTtBQUFBLGdCQUFBLGNBQUEsT0FBQWlrRDtBQUFBLHFCQUFBO0FBQUEsZ0JBQUE7QUFBQSxxQkFBQW5sQyxRQUFBOWpCLFVBQUEySCxRQUFBekgsS0FBQThvRCxHQUFBbGxDLFNBQUEsQ0FBQSxHQUFBLFdBQUE7Y0FBQSxDQUFBLENBQUEsR0FBQTtZQUFBLFNBQUEwSyxJQUFBQTtBQUFBLHFCQUFBO1lBQUE7VUFBQSxFQUFBMDZCO0FBQUEsaUJBQUEsV0FBQTtBQUFBQyxnQkFBQXJoRCxJQUFBcWhELEtBQUF6QyxHQUFBb0MsRUFBQUE7QUFBQUEsZ0JBQUFDLElBQUE7QUFBQSxrQkFBQUssS0FBQTFDLEdBQUFBLElBQUFBLEVBQUExc0M7QUFBQWxTLGNBQUFBLEtBQUFraEQsR0FBQUcsSUFBQTlvRCxXQUFBK29ELEVBQUFBO1lBQUFBO0FBQUF0aEQsY0FBQUEsS0FBQXFoRCxHQUFBbHBELE1BQUFBLE1BQUFJLFNBQUFBO0FBQUEsbUJBQUFvbUQsR0FBQXJuRCxNQUFBMEksRUFBQUE7VUFBQTtRQUFBO0FBSWIsWUFLTTZqRCxLQUFBQSxTQUFhSCxJQUFBQTtBQUFBaEYsVUFBQUEsSUFBQW1GLElBQUFILEVBQUFBO0FBQUEsY0FBQXZqQixLQUFBNGdCLEdBQUE4QyxFQUFBQTtBQVFqQixtQkFBQUEsR0FBWTFnRCxJQUFTc3BDLElBQU1zUyxJQUFhcUQsSUFBVUMsSUFBQUE7QUFBYSxnQkFBQXBzQjtBQUd2QixtQkFIdUJoYixHQUFBQSxNQUFBNG9DLEVBQUFBLElBQzdENXRCLEtBQUFrSyxHQUFBL25DLEtBQUFBLE1BQU0rSyxJQUFTc3BDLElBQU1zUyxFQUFBQSxHQUVoQnVELFVBQVVGLElBQVVDLEVBQUFBLEdBQWFwc0I7VUFDeEM7QUFtSEMsaUJBakhEOVEsR0FBQTArQixJQUFBLENBQUEsRUFBQS9sRCxLQUFBLFVBQUFuRCxPQU1BLFNBQU84TixJQUFBQTtBQUFtRCxnQkFBOUN5dEMsS0FBUTM5QyxVQUFBeUQsU0FBQXpELEtBQUFBLFdBQUFBLFVBQUE0ZCxDQUFBQSxJQUFBNWQsVUFBRyxDQUFBLElBQUFqQixLQUFLNCtDLFVBQVUzTSxLQUFLaHhDLFVBQUF5RCxTQUFBekQsS0FBQUEsV0FBQUEsVUFBQTRkLENBQUFBLElBQUE1ZCxVQUFHLENBQUEsSUFBQWpCLEtBQUtpeUM7QUFNakQsZ0JBQUEsV0FKRWp5QyxLQUFLOHFELFNBQVMzd0MsT0FBQUEsV0FDZG5hLEtBQUs4cUQsU0FBUzVYLFNBQUFBLFdBQ2RsekMsS0FBSzhxRCxTQUFTM1gsUUFFQztBQUNmLGtCQUFNa1osS0FBK0IsSUFBcEJyc0QsS0FBSzZMLFFBQVFzTDtBQUk5QixxQkFIQW5YLEtBQUtrekMsUUFBUW1aLElBQ2Jyc0QsS0FBS216QyxTQUFTa1osSUFBQUEsTUFDZHJzRCxLQUFLeVUsU0FBUyxNQUFNelUsS0FBS2t6QztZQUUzQjtBQUdJbHpDLGlCQUFLb3FELGFBQWF4TCxJQUFVM00sRUFBQUEsS0FDOUJqeUMsS0FBS3dzRCxhQUFBQTtVQUVULEVBQUEsR0FFQSxFQUFBaG1ELEtBQUEsUUFBQW5ELE9BU0EsU0FBSzhOLElBQUs5RCxJQUFHK0QsSUFBR3d0QyxJQUFVM00sSUFBTzl6QixJQUFBQTtBQUMvQm5lLGlCQUFLeXNELGFBQWE3TixFQUFBQSxHQUNsQjUrQyxLQUFLK25ELE9BQUFBO0FBRUwsZ0JBQUkyRSxLQUFTci9DLElBQ1hzL0MsS0FBU3Y3QztBQUUyQywyQkFBbERwUixLQUFLNkwsUUFBUTg4QyxnQkFBZ0JpRSxvQkFDL0I1c0QsS0FBS2swQyxPQUFPN21DLElBQ1pyTixLQUFLbTBDLE1BQU0vaUMsSUFDWHM3QyxNQUFVMXNELEtBQUtrekMsUUFBUSxHQUN2QnlaLE1BQVUzc0QsS0FBS216QyxTQUFTLE1BRXhCbnpDLEtBQUtrMEMsT0FBTzdtQyxLQUFJck4sS0FBS2t6QyxRQUFRLEdBQzdCbHpDLEtBQUttMEMsTUFBTS9pQyxLQUFJcFIsS0FBS216QyxTQUFTLElBSS9CbnpDLEtBQUtzc0QsZUFBZW43QyxJQUFLdTdDLElBQVFDLElBQVF4dUMsRUFBQUEsR0FHekNoTixHQUFJMDNDLEtBQUFBLEdBRUoxM0MsR0FBSTA3QyxLQUFBQSxHQUVKN3NELEtBQUs4c0QscUJBQXFCMzdDLElBQUtnTixFQUFBQSxHQUUvQmhOLEdBQUk4M0MsUUFBQUEsR0FFSmpwRCxLQUFLK3NELGdCQUFnQjU3QyxJQUFLdTdDLElBQVFDLElBQVEvTixJQUFVM00sRUFBQUEsR0FFcERqeUMsS0FBSzBxRCxrQkFBa0JyOUMsSUFBRytELEVBQUFBO1VBQzVCLEVBQUEsR0FHQSxFQUFBNUssS0FBQSxxQkFBQW5ELE9BS0EsU0FBa0JnSyxJQUFHK0QsSUFBQUE7QUFDbUMsMkJBQWxEcFIsS0FBSzZMLFFBQVE4OEMsZ0JBQWdCaUUsb0JBQy9CNXNELEtBQUs0bkQsWUFBWXpULE1BQU0vaUMsSUFDdkJwUixLQUFLNG5ELFlBQVkxVCxPQUFPN21DLElBQ3hCck4sS0FBSzRuRCxZQUFZcE0sUUFBUW51QyxLQUF3QixJQUFwQnJOLEtBQUs2TCxRQUFRc0wsTUFDMUNuWCxLQUFLNG5ELFlBQVluTSxTQUFTcnFDLEtBQXdCLElBQXBCcFIsS0FBSzZMLFFBQVFzTCxTQUUzQ25YLEtBQUs0bkQsWUFBWXpULE1BQU0vaUMsS0FBSXBSLEtBQUs2TCxRQUFRc0wsTUFDeENuWCxLQUFLNG5ELFlBQVkxVCxPQUFPN21DLEtBQUlyTixLQUFLNkwsUUFBUXNMLE1BQ3pDblgsS0FBSzRuRCxZQUFZcE0sUUFBUW51QyxLQUFJck4sS0FBSzZMLFFBQVFzTCxNQUMxQ25YLEtBQUs0bkQsWUFBWW5NLFNBQVNycUMsS0FBSXBSLEtBQUs2TCxRQUFRc0wsT0FJN0NuWCxLQUFLNG5ELFlBQVkxVCxPQUFPdjBDLEtBQUsrTixJQUMzQjFOLEtBQUs0bkQsWUFBWTFULE1BQ2pCbDBDLEtBQUt5bkQsWUFBWXR3QyxLQUFLKzhCLElBQUFBLEdBRXhCbDBDLEtBQUs0bkQsWUFBWXBNLFFBQVE3N0MsS0FBSzhOLElBQzVCek4sS0FBSzRuRCxZQUFZcE0sT0FDakJ4N0MsS0FBS3luRCxZQUFZdHdDLEtBQUsrOEIsT0FBT2wwQyxLQUFLeW5ELFlBQVl0d0MsS0FBSys3QixLQUFBQSxHQUVyRGx6QyxLQUFLNG5ELFlBQVluTSxTQUFTOTdDLEtBQUs4TixJQUM3QnpOLEtBQUs0bkQsWUFBWW5NLFFBQ2pCejdDLEtBQUs0bkQsWUFBWW5NLFNBQVN6N0MsS0FBSzZxRCxXQUFBQTtVQUVuQyxFQUFBLEdBRUEsRUFBQXJrRCxLQUFBLG9CQUFBbkQsT0FLQSxTQUFpQjhOLElBQUFBO0FBSWYsbUJBSElBLE1BQ0ZuUixLQUFLK25ELE9BQU81MkMsRUFBQUEsR0FFTSxNQUFiblIsS0FBS2t6QztVQUNkLEVBQUEsQ0FBQSxDQUFBLEdBQUNxWjtRQUFBLEVBL0h5QjNCLEVBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsZUFBQUEsT0FBQUEsV0FBQUEsQ0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxHQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLGNBQUFBLE9BQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUE7QUFBQUEscUJBQUFBLFFBQUFBLFVBQUFBLFFBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEdBQUFBLFdBQUFBO2NBQUFBLENBQUFBLENBQUFBLEdBQUFBO1lBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHFCQUFBQTtZQUFBQTtVQUFBQSxFQUFBQTtBQUFBQSxpQkFBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLElBQUFBLEtBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsSUFBQUEsV0FBQUEsRUFBQUE7WUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsTUFBQUEsTUFBQUEsU0FBQUE7QUFBQUEsbUJBQUFBLEdBQUFBLE1BQUFBLEVBQUFBO1VBQUFBO1FBQUFBO0FDTjVCLFlBS01vQyxLQUFBQSxTQUFTOUMsSUFBQUE7QUFBQTlDLFVBQUFBLElBQUE0RixJQUFBOUMsRUFBQUE7QUFBQSxjQUFBcmhCLEtBQUE0Z0IsR0FBQXVELEVBQUFBO0FBTWIsbUJBQUFBLEdBQVluaEQsSUFBU3NwQyxJQUFNc1MsSUFBQUE7QUFBYSxtQkFBQTlqQyxHQUFBQSxNQUFBcXBDLEVBQUFBLEdBQUFua0IsR0FBQS9uQyxLQUFBZCxNQUNoQzZMLElBQVNzcEMsSUFBTXNTLEVBQUFBO1VBQ3ZCO0FBNEdDLGlCQTFHRDU1QixHQUFBbS9CLElBQUEsQ0FBQSxFQUFBeG1ELEtBQUEsVUFBQW5ELE9BT0EsU0FDRThOLElBQUFBO0FBSUEsZ0JBSEF5dEMsS0FBUTM5QyxVQUFBeUQsU0FBQXpELEtBQUFBLFdBQUFBLFVBQUE0ZCxDQUFBQSxJQUFBNWQsVUFBRyxDQUFBLElBQUFqQixLQUFLNCtDLFVBQ2hCM00sS0FBS2h4QyxVQUFBeUQsU0FBQXpELEtBQUFBLFdBQUFBLFVBQUE0ZCxDQUFBQSxJQUFBNWQsVUFBRyxDQUFBLElBQUFqQixLQUFLaXlDLE9BQ2I5ekIsS0FBTWxkLFVBQUF5RCxTQUFBekQsS0FBQUEsV0FBQUEsVUFBQTRkLENBQUFBLElBQUE1ZCxVQUFHLENBQUEsSUFBQSxFQUFFa1csTUFBTW5YLEtBQUs2TCxRQUFRc0wsS0FBQUE7QUFFOUIsZ0JBQUluWCxLQUFLb3FELGFBQWF4TCxJQUFVM00sRUFBQUEsR0FBUTtBQUFBLGtCQUFBZ2IsSUFBQUM7QUFDdENsdEQsbUJBQUt5bkQsWUFBWStCLFlBQVlyNEMsSUFBS3l0QyxJQUFVM00sRUFBQUE7QUFDNUMsa0JBQU05NkIsS0FBTyxJQUFJZ0gsR0FBT2hIO0FBQ3hCblgsbUJBQUtrekMsUUFBNEIrWixVQUF2QkEsS0FBR2p0RCxLQUFLbXRELG9CQUFBQSxXQUFlRixLQUFBQSxLQUFJOTFDLElBQ3JDblgsS0FBS216QyxTQUE4QitaLFVBQXhCQSxLQUFHbHRELEtBQUtvdEQscUJBQUFBLFdBQWdCRixLQUFBQSxLQUFJLzFDLElBQ3ZDblgsS0FBS3lVLFNBQVMsTUFBTXpVLEtBQUtrekM7WUFDM0I7VUFDRixFQUFBLEdBRUEsRUFBQTFzQyxLQUFBLGNBQUFuRCxPQWFBLFNBQVc4TixJQUFLZy9CLElBQU9rZCxJQUFnQmhnRCxJQUFHK0QsSUFBR3d0QyxJQUFVM00sSUFBTzl6QixJQUFBQTtBQUFRLGdCNVJ3VnRFalcsSTRSeFZzRXkyQixLQUFBMytCO0FBdUJwRSxtQkF0QkFBLEtBQUsrbkQsT0FBTzUyQyxJQUFLeXRDLElBQVUzTSxJQUFPOXpCLEVBQUFBLEdBQ2xDbmUsS0FBS2swQyxPQUFPN21DLEtBQUlyTixLQUFLa3pDLFFBQVEsR0FDN0JsekMsS0FBS20wQyxNQUFNL2lDLEtBQUlwUixLQUFLbXpDLFNBQVMsR0FFN0JuekMsS0FBS3VxRCxtQkFBbUJwNUMsSUFBS2dOLEVBQUFBLEk1Um1WL0JqVyxLNFJsVldpb0MsSTVSb1ZQL3RDLE9BQU94QixVQUFVSCxlQUFlSyxLQUFLNlMsSUFBVXpMLEVBQUFBLElBQ3pDeUwsR0FBaUJ6TCxFQUFBQSxJQUVsQixTQUFVaUosSUFBQUE7QUFBNkMsdUJBQUFtOEMsS0FBQXJzRCxVQUFBeUQsUUFBWGdNLEtBQUFBLElBQVdzRixNQUFBczNDLEtBQUFBLElBQUFBLEtBQUFBLElBQUFBLENBQUFBLEdBQUFDLEtBQUEsR0FBQUEsS0FBQUQsSUFBQUM7QUFBWDc4QyxnQkFBQUEsR0FBVzY4QyxLQUFBdHNELENBQUFBLElBQUFBLFVBQUFzc0QsRUFBQUE7QUFDM0RDLHVDQUF5QjVzRCxVQUFrQnNILEVBQUFBLEVBQU1wSCxLQUFLcVEsSUFBS1QsRUFBQUE7WUFBQUEsRzRSeFY5Q1MsSUFBSzlELElBQUcrRCxJQUFHK00sR0FBT2hILElBQUFBLEdBQ2xDblgsS0FBS3lxRCxZQUFZdDVDLElBQUtnTixFQUFBQSxHQUFBQSxXQUVsQm5lLEtBQUs2TCxRQUFRNGhELFFBQUFBLFdBQ1h6dEQsS0FBSzZMLFFBQVE0aEQsS0FBS0MsU0FDcEJ2OEMsR0FBSTR0QyxRQUNESCxLQUFXLFVBQVUsTUFDdEI1K0MsS0FBS216QyxTQUFTLElBQ2QsU0FDQ256QyxLQUFLNkwsUUFBUTRoRCxLQUFLMUgsUUFBUSxnQkFDN0I1MEMsR0FBSW96QyxZQUFZdmtELEtBQUs2TCxRQUFRNGhELEtBQUt0aUIsU0FBUyxTQUMzQ2g2QixHQUFJeXpDLFlBQVksVUFDaEJ6ekMsR0FBSXMwQyxlQUFlLFVBQ25CdDBDLEdBQUlxMEMsU0FBU3hsRCxLQUFLNkwsUUFBUTRoRCxLQUFLQyxNQUFNcmdELElBQUcrRCxFQUFBQSxJQUlyQyxFQUNMdThDLG1CQUFtQixXQUFBO0FBQ2pCLGtCQUFBLFdBQUlodkIsR0FBSzl5QixRQUFRb2tDLE9BQXFCO0FBR3BDdFIsZ0JBQUFBLEdBQUs4b0IsWUFBWXJELG1CQUNmanpDLElBQ0F5dEMsSUFDQTNNLElBQ0E1a0MsSUFDQStELElBQ0EsU0FBQTtBQUVGLG9CQUFNODZDLEtBQ0o5NkMsS0FBSSxNQUFNdXRCLEdBQUt3VSxTQUFTLE1BQU14VSxHQUFLOG9CLFlBQVl0d0MsS0FBS2c4QjtBQUN0RHhVLGdCQUFBQSxHQUFLOG9CLFlBQVlqMEMsS0FBS3JDLElBQUs5RCxJQUFHNitDLElBQVF0TixJQUFVM00sSUFBTyxTQUFBO2NBQ3pEO0FBRUF0VCxjQUFBQSxHQUFLK3JCLGtCQUFrQnI5QyxJQUFHK0QsRUFBQUE7WUFDNUIsRUFBQTtVQUVKLEVBQUEsR0FFQSxFQUFBNUssS0FBQSxxQkFBQW5ELE9BS0EsU0FBa0JnSyxJQUFHK0QsSUFBQUE7QUFDbkJwUixpQkFBSzRuRCxZQUFZelQsTUFBTS9pQyxLQUFJcFIsS0FBSzZMLFFBQVFzTCxNQUN4Q25YLEtBQUs0bkQsWUFBWTFULE9BQU83bUMsS0FBSXJOLEtBQUs2TCxRQUFRc0wsTUFDekNuWCxLQUFLNG5ELFlBQVlwTSxRQUFRbnVDLEtBQUlyTixLQUFLNkwsUUFBUXNMLE1BQzFDblgsS0FBSzRuRCxZQUFZbk0sU0FBU3JxQyxLQUFJcFIsS0FBSzZMLFFBQVFzTCxNQUFBQSxXQUV2Q25YLEtBQUs2TCxRQUFRb2tDLFNBQXVCandDLEtBQUt5bkQsWUFBWXR3QyxLQUFLKzdCLFFBQVEsTUFDcEVsekMsS0FBSzRuRCxZQUFZMVQsT0FBT3YwQyxLQUFLK04sSUFDM0IxTixLQUFLNG5ELFlBQVkxVCxNQUNqQmwwQyxLQUFLeW5ELFlBQVl0d0MsS0FBSys4QixJQUFBQSxHQUV4QmwwQyxLQUFLNG5ELFlBQVlwTSxRQUFRNzdDLEtBQUs4TixJQUM1QnpOLEtBQUs0bkQsWUFBWXBNLE9BQ2pCeDdDLEtBQUt5bkQsWUFBWXR3QyxLQUFLKzhCLE9BQU9sMEMsS0FBS3luRCxZQUFZdHdDLEtBQUsrN0IsS0FBQUEsR0FFckRsekMsS0FBSzRuRCxZQUFZbk0sU0FBUzk3QyxLQUFLOE4sSUFDN0J6TixLQUFLNG5ELFlBQVluTSxRQUNqQno3QyxLQUFLNG5ELFlBQVluTSxTQUFTejdDLEtBQUt5bkQsWUFBWXR3QyxLQUFLZzhCLE1BQUFBO1VBR3RELEVBQUEsQ0FBQSxDQUFBLEdBQUM2WjtRQUFBLEVBcEhxQnhGLEVBQUFBO0FDUlgsaUJBQUE1M0IsR0FBQVIsSUFBQS9kLElBQUFBO0FBQUFBLGNBQUEwRCxLQUFBNjRDLEdBQUF4K0IsRUFBQUE7QUFBQSxjQUFBeStCLElBQUExZ0M7QUFBQUEsZ0JBQUFBLEtBQUEwZ0MsR0FBQXorQixFQUFBQTtBQUFBL2QsWUFBQUEsT0FBQThiLEtBQUEyZ0MsR0FBQTNnQyxFQUFBQSxFQUFBcnNCLEtBQUFxc0IsSUFBQTliLFNBQUFBLElBQUFBO0FBQUFBLHFCQUFBMDhDLEdBQUEzK0IsSUFBQS9kLEVBQUFBLEVBQUFyTztZQUFBK1IsQ0FBQUEsSUFBQUEsR0FBQWxPLEtBQUFoRyxNQUFBa1UsSUFBQW9ZLEVBQUFBO1VBQUE7QUFBQSxpQkFBQXBZO1FBQUE7QUFBQSxpQkFBQWk1QyxHQUFBNStCLElBQUFBO0FBQUEvZCxtQkFBQUEsS0FBQUEsR0FBQUEsS0FBQXBRLFVBQUF5RCxRQUFBMk0sTUFBQTtBQUFBLGdCQUFBdWQsSUFBQWdoQixJQUFBNzZCLEtBQUEsUUFBQTlULFVBQUFvUSxFQUFBQSxJQUFBcFEsVUFBQW9RLEVBQUFBLElBQUFBLENBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLElBQUFvK0IsR0FBQTdnQixLQUFBZ0IsR0FBQXh0QixPQUFBMlMsRUFBQUEsR0FBQUEsSUFBQWpVLENBQUFBLEVBQUFBLEtBQUE4dEIsSUFBQSxTQUFBdmQsSUFBQUE7QUFBQW1wQyxpQkFBQXByQixJQUFBL2QsSUFBQTBELEdBQUExRCxFQUFBQSxDQUFBQTtZQUFBLENBQUEsSUFBQTQ4QyxLQUFBQyxHQUFBOStCLElBQUE2K0IsR0FBQWw1QyxFQUFBQSxDQUFBQSxJQUFBMDZCLEdBQUFHLEtBQUFoZ0IsR0FBQXh0QixPQUFBMlMsRUFBQUEsQ0FBQUEsQ0FBQUEsRUFBQWpVLEtBQUE4dUMsSUFBQSxTQUFBditCLElBQUFBO0FBQUF1YyxpQkFBQXdCLElBQUEvZCxJQUFBMDhDLEdBQUFoNUMsSUFBQTFELEVBQUFBLENBQUFBO1lBQUEsQ0FBQTtVQUFBO0FBQUEsaUJBQUErZDtRQUFBO0FBQUEsaUJBQUFxNkIsR0FBQUMsSUFBQUE7QUFBQUMsY0FBQUEsS0FBQSxXQUFBO0FBQUEzb0QsZ0JBQUE0b0QsZUFBQUEsT0FBQTVvRCxXQUFBQSxDQUFBNG9EO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsR0FBQWhrRDtBQUFBLHFCQUFBO0FBQUEsZ0JBQUEsY0FBQSxPQUFBaWtEO0FBQUEscUJBQUE7QUFBQSxnQkFBQTtBQUFBLHFCQUFBbmxDLFFBQUE5akIsVUFBQTJILFFBQUF6SCxLQUFBOG9ELEdBQUFsbEMsU0FBQSxDQUFBLEdBQUEsV0FBQTtjQUFBLENBQUEsQ0FBQSxHQUFBO1lBQUEsU0FBQTBLLElBQUFBO0FBQUEscUJBQUE7WUFBQTtVQUFBLEVBQUEwNkI7QUFBQSxpQkFBQSxXQUFBO0FBQUFDLGdCQUFBcmhELElBQUFxaEQsS0FBQXpDLEdBQUFvQyxFQUFBQTtBQUFBQSxnQkFBQUMsSUFBQTtBQUFBLGtCQUFBSyxLQUFBMUMsR0FBQUEsSUFBQUEsRUFBQTFzQztBQUFBbFMsY0FBQUEsS0FBQWtoRCxHQUFBRyxJQUFBOW9ELFdBQUErb0QsRUFBQUE7WUFBQUE7QUFBQXRoRCxjQUFBQSxLQUFBcWhELEdBQUFscEQsTUFBQUEsTUFBQUksU0FBQUE7QUFBQSxtQkFBQW9tRCxHQUFBcm5ELE1BQUEwSSxFQUFBQTtVQUFBO1FBQUE7QUFJYixZQUtNeWxELEtBQUFBLFNBQVdDLElBQUFBO0FBQUFoSCxVQUFBQSxJQUFBK0csSUFBQUMsRUFBQUE7QUFBQSxjQUFBdmxCLEtBQUE0Z0IsR0FBQTBFLEVBQUFBO0FBT2YsbUJBQUFBLEdBQVl0aUQsSUFBU3NwQyxJQUFNc1MsSUFBYTRHLElBQUFBO0FBQWEsZ0JBQUExdkI7QUFFcEIsbUJBRm9CaGIsR0FBQUEsTUFBQXdxQyxFQUFBQSxJQUNuRHh2QixLQUFBa0ssR0FBQS9uQyxLQUFBZCxNQUFNNkwsSUFBU3NwQyxJQUFNc1MsSUFBYTRHLEVBQUFBLEdBQzdCQSxjQUFjQSxJQUFZMXZCO1VBQ2pDO0FBNERDLGlCQTFERDlRLEdBQUFzZ0MsSUFBQSxDQUFBLEVBQUEzbkQsS0FBQSxRQUFBbkQsT0FVQSxTQUFLOE4sSUFBSzlELElBQUcrRCxJQUFHd3RDLElBQVUzTSxJQUFPOXpCLElBQUFBO0FBQy9CbmUsaUJBQUsrbkQsT0FBTzUyQyxJQUFLeXRDLElBQVUzTSxJQUFPOXpCLEVBQUFBLEdBQ2xDbmUsS0FBS2swQyxPQUFPN21DLEtBQUlyTixLQUFLa3pDLFFBQVEsR0FDN0JsekMsS0FBS20wQyxNQUFNL2lDLEtBQUlwUixLQUFLbXpDLFNBQVMsR0FHN0JoaUMsR0FBSTAzQyxLQUFBQTtBQUNKLGdCQUFNeUYsS0FBWXR1RCxLQUFLcXVELFlBQVksRUFDakNsOUMsS0FBQUEsSUFDQTlKLElBQUlySCxLQUFLNkwsUUFBUXhFLElBQ2pCZ0csR0FBQUEsSUFDQStELEdBQUFBLElBQ0F1RyxPQUFPLEVBQUVpbkMsVUFBQUEsSUFBVTNNLE9BQUFBLEdBQUFBLEdBQ25CajRCLE9BQUtnMEMsR0FBTzd2QyxDQUFBQSxHQUFBQSxFQUFBQSxHQUNaOHhCLE9BQU9qd0MsS0FBSzZMLFFBQVFva0MsTUFBQUEsQ0FBQUE7QUFRdEIsZ0JBTDBCLFFBQXRCcWUsR0FBVUMsWUFDWkQsR0FBVUMsU0FBQUEsR0FFWnA5QyxHQUFJODNDLFFBQUFBLEdBRUFxRixHQUFVWCxtQkFBbUI7QUFFL0Isa0JBQU1BLEtBQW9CVyxHQUFVWDtBQUNwQ1csY0FBQUEsR0FBVVgsb0JBQW9CLFdBQUE7QUFDNUJ4OEMsZ0JBQUFBLEdBQUkwM0MsS0FBQUEsR0FDSjhFLEdBQUFBLEdBQ0F4OEMsR0FBSTgzQyxRQUFBQTtjQUFBQTtZQUVSO0FBT0EsbUJBTElxRixHQUFVRSxtQkFDWnh1RCxLQUFLbXRELGtCQUFrQm1CLEdBQVVFLGVBQWV0YixPQUNoRGx6QyxLQUFLb3RELG1CQUFtQmtCLEdBQVVFLGVBQWVyYixTQUc1Q21iO1VBQ1QsRUFBQSxHQUVBLEVBQUE5bkQsS0FBQSxvQkFBQW5ELE9BTUEsU0FBaUI4TixJQUFLOHBCLElBQUFBO0FBQ3BCLG1CQUFPajdCLEtBQUt5dUQsa0JBQWtCdDlDLElBQUs4cEIsRUFBQUE7VUFDckMsRUFBQSxDQUFBLENBQUEsR0FBQ2t6QjtRQUFBLEVBdEV1Qm5CLEVBQUFBO0FDVGIsaUJBQUF2RCxHQUFBQyxJQUFBQTtBQUFBQyxjQUFBQSxLQUFBLFdBQUE7QUFBQTNvRCxnQkFBQTRvRCxlQUFBQSxPQUFBNW9ELFdBQUFBLENBQUE0b0Q7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxHQUFBaGtEO0FBQUEscUJBQUE7QUFBQSxnQkFBQSxjQUFBLE9BQUFpa0Q7QUFBQSxxQkFBQTtBQUFBLGdCQUFBO0FBQUEscUJBQUFubEMsUUFBQTlqQixVQUFBMkgsUUFBQXpILEtBQUE4b0QsR0FBQWxsQyxTQUFBLENBQUEsR0FBQSxXQUFBO2NBQUEsQ0FBQSxDQUFBLEdBQUE7WUFBQSxTQUFBMEssSUFBQUE7QUFBQSxxQkFBQTtZQUFBO1VBQUEsRUFBQTA2QjtBQUFBLGlCQUFBLFdBQUE7QUFBQUMsZ0JBQUFyaEQsSUFBQXFoRCxLQUFBekMsR0FBQW9DLEVBQUFBO0FBQUFBLGdCQUFBQyxJQUFBO0FBQUEsa0JBQUFLLEtBQUExQyxHQUFBQSxJQUFBQSxFQUFBMXNDO0FBQUFsUyxjQUFBQSxLQUFBa2hELEdBQUFHLElBQUE5b0QsV0FBQStvRCxFQUFBQTtZQUFBQTtBQUFBdGhELGNBQUFBLEtBQUFxaEQsR0FBQWxwRCxNQUFBQSxNQUFBSSxTQUFBQTtBQUFBLG1CQUFBb21ELEdBQUFybkQsTUFBQTBJLEVBQUFBO1VBQUE7UUFBQTtBQUtiLFlBS01nbUQsS0FBQUEsU0FBUXhFLElBQUFBO0FBQUE5QyxVQUFBQSxJQUFBc0gsSUFBQXhFLEVBQUFBO0FBQUEsY0FBQXJoQixLQUFBNGdCLEdBQUFpRixFQUFBQTtBQU1aLG1CQUFBQSxHQUFZN2lELElBQVNzcEMsSUFBTXNTLElBQUFBO0FBQWEsZ0JBQUE5b0I7QUFFUixtQkFGUWhiLEdBQUFBLE1BQUErcUMsRUFBQUEsSUFDdEMvdkIsS0FBQWtLLEdBQUEvbkMsS0FBQUEsTUFBTStLLElBQVNzcEMsSUFBTXNTLEVBQUFBLEdBQ2hCMEMsWUFBWTFDLEVBQUFBLEdBQWE5b0I7VUFDaEM7QUE0REMsaUJBMUREOVEsR0FBQTZnQyxJQUFBLENBQUEsRUFBQWxvRCxLQUFBLFVBQUFuRCxPQU1BLFNBQU84TixJQUFLeXRDLElBQVUzTSxJQUFBQTtBQUNwQixnQkFBSWp5QyxLQUFLb3FELGFBQWF4TCxJQUFVM00sRUFBQUEsR0FBUTtBQUN0QyxrQkFDTTk2QixLQURhblgsS0FBS3NxRCx1QkFBdUJuNUMsSUFBS3l0QyxJQUFVM00sRUFBQUEsRUFDdENpQixRQUFRbHpDLEtBQUswbkQsT0FBT2xNLFFBQVF4N0MsS0FBSzBuRCxPQUFPeFQ7QUFFaEVsMEMsbUJBQUtrekMsUUFBUS83QixJQUNiblgsS0FBS216QyxTQUFTaDhCLElBQ2RuWCxLQUFLeVUsU0FBU3pVLEtBQUtrekMsUUFBUTtZQUM3QjtVQUNGLEVBQUEsR0FFQSxFQUFBMXNDLEtBQUEsUUFBQW5ELE9BU0EsU0FBSzhOLElBQUs5RCxJQUFHK0QsSUFBR3d0QyxJQUFVM00sSUFBTzl6QixJQUFBQTtBQUMvQm5lLGlCQUFLK25ELE9BQU81MkMsSUFBS3l0QyxJQUFVM00sRUFBQUEsR0FDM0JqeUMsS0FBS2swQyxPQUFPN21DLEtBQUlyTixLQUFLa3pDLFFBQVEsR0FDN0JsekMsS0FBS20wQyxNQUFNL2lDLEtBQUlwUixLQUFLbXpDLFNBQVMsR0FFN0JuekMsS0FBS3VxRCxtQkFBbUJwNUMsSUFBS2dOLEVBQUFBLEdBQzdCMUwsR0FDRXRCLElBQ0E5RCxLQUFJck4sS0FBS2t6QyxRQUFRLEdBQ2pCOWhDLEtBQUlwUixLQUFLbXpDLFNBQVMsR0FDbEJuekMsS0FBS2t6QyxPQUNMbHpDLEtBQUttekMsTUFBQUEsR0FFUG56QyxLQUFLeXFELFlBQVl0NUMsSUFBS2dOLEVBQUFBLEdBRXRCbmUsS0FBSzBxRCxrQkFBa0JyOUMsSUFBRytELElBQUdELElBQUt5dEMsSUFBVTNNLEVBQUFBLEdBQzVDanlDLEtBQUt5bkQsWUFBWWowQyxLQUNmckMsSUFDQW5SLEtBQUtrMEMsT0FBT2wwQyxLQUFLdXBELFNBQVNyVyxRQUFRLElBQUlsekMsS0FBSzBuRCxPQUFPeFQsTUFDbERsMEMsS0FBS20wQyxNQUFNbjBDLEtBQUt1cEQsU0FBU3BXLFNBQVMsSUFBSW56QyxLQUFLMG5ELE9BQU92VCxLQUNsRHlLLElBQ0EzTSxFQUFBQTtVQUVKLEVBQUEsR0FDQSxFQUFBenJDLEtBQUEsb0JBQUFuRCxPQU1BLFNBQWlCOE4sSUFBSzhwQixJQUFBQTtBQUNwQixtQkFBT2o3QixLQUFLeXVELGtCQUFrQnQ5QyxJQUFLOHBCLEVBQUFBO1VBQ3JDLEVBQUEsQ0FBQSxDQUFBLEdBQUN5ekI7UUFBQSxFQXJFb0JsSCxFQUFBQTtBQ1ZWLGlCQUFBaUMsR0FBQUMsSUFBQUE7QUFBQUMsY0FBQUEsS0FBQSxXQUFBO0FBQUEzb0QsZ0JBQUE0b0QsZUFBQUEsT0FBQTVvRCxXQUFBQSxDQUFBNG9EO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsR0FBQWhrRDtBQUFBLHFCQUFBO0FBQUEsZ0JBQUEsY0FBQSxPQUFBaWtEO0FBQUEscUJBQUE7QUFBQSxnQkFBQTtBQUFBLHFCQUFBbmxDLFFBQUE5akIsVUFBQTJILFFBQUF6SCxLQUFBOG9ELEdBQUFsbEMsU0FBQSxDQUFBLEdBQUEsV0FBQTtjQUFBLENBQUEsQ0FBQSxHQUFBO1lBQUEsU0FBQTBLLElBQUFBO0FBQUEscUJBQUE7WUFBQTtVQUFBLEVBQUEwNkI7QUFBQSxpQkFBQSxXQUFBO0FBQUFDLGdCQUFBcmhELElBQUFxaEQsS0FBQXpDLEdBQUFvQyxFQUFBQTtBQUFBQSxnQkFBQUMsSUFBQTtBQUFBLGtCQUFBSyxLQUFBMUMsR0FBQUEsSUFBQUEsRUFBQTFzQztBQUFBbFMsY0FBQUEsS0FBQWtoRCxHQUFBRyxJQUFBOW9ELFdBQUErb0QsRUFBQUE7WUFBQUE7QUFBQXRoRCxjQUFBQSxLQUFBcWhELEdBQUFscEQsTUFBQUEsTUFBQUksU0FBQUE7QUFBQSxtQkFBQW9tRCxHQUFBcm5ELE1BQUEwSSxFQUFBQTtVQUFBO1FBQUE7QUFJYixZQUtNaW1ELEtBQUFBLFNBQU9QLElBQUFBO0FBQUFoSCxVQUFBQSxJQUFBdUgsSUFBQVAsRUFBQUE7QUFBQSxjQUFBdmxCLEtBQUE0Z0IsR0FBQWtGLEVBQUFBO0FBTVgsbUJBQUFBLEdBQVk5aUQsSUFBU3NwQyxJQUFNc1MsSUFBQUE7QUFBYSxtQkFBQTlqQyxHQUFBQSxNQUFBZ3JDLEVBQUFBLEdBQUE5bEIsR0FBQS9uQyxLQUFBZCxNQUNoQzZMLElBQVNzcEMsSUFBTXNTLEVBQUFBO1VBQ3ZCO0FBd0JDLGlCQXRCRDU1QixHQUFBOGdDLElBQUEsQ0FBQSxFQUFBbm9ELEtBQUEsUUFBQW5ELE9BVUEsU0FBSzhOLElBQUs5RCxJQUFHK0QsSUFBR3d0QyxJQUFVM00sSUFBTzl6QixJQUFBQTtBQUMvQixtQkFBT25lLEtBQUs0dUQsV0FBV3o5QyxJQUFLLFdBQVcsR0FBRzlELElBQUcrRCxJQUFHd3RDLElBQVUzTSxJQUFPOXpCLEVBQUFBO1VBQ25FLEVBQUEsR0FFQSxFQUFBM1gsS0FBQSxvQkFBQW5ELE9BTUEsU0FBaUI4TixJQUFLOHBCLElBQUFBO0FBQ3BCLG1CQUFPajdCLEtBQUt5dUQsa0JBQWtCdDlDLElBQUs4cEIsRUFBQUE7VUFDckMsRUFBQSxDQUFBLENBQUEsR0FBQzB6QjtRQUFBLEVBaENtQjNCLEVBQUFBO0FDVFQsaUJBQUF2RCxHQUFBQyxJQUFBQTtBQUFBQyxjQUFBQSxLQUFBLFdBQUE7QUFBQTNvRCxnQkFBQTRvRCxlQUFBQSxPQUFBNW9ELFdBQUFBLENBQUE0b0Q7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxHQUFBaGtEO0FBQUEscUJBQUE7QUFBQSxnQkFBQSxjQUFBLE9BQUFpa0Q7QUFBQSxxQkFBQTtBQUFBLGdCQUFBO0FBQUEscUJBQUFubEMsUUFBQTlqQixVQUFBMkgsUUFBQXpILEtBQUE4b0QsR0FBQWxsQyxTQUFBLENBQUEsR0FBQSxXQUFBO2NBQUEsQ0FBQSxDQUFBLEdBQUE7WUFBQSxTQUFBMEssSUFBQUE7QUFBQSxxQkFBQTtZQUFBO1VBQUEsRUFBQTA2QjtBQUFBLGlCQUFBLFdBQUE7QUFBQUMsZ0JBQUFyaEQsSUFBQXFoRCxLQUFBekMsR0FBQW9DLEVBQUFBO0FBQUFBLGdCQUFBQyxJQUFBO0FBQUEsa0JBQUFLLEtBQUExQyxHQUFBQSxJQUFBQSxFQUFBMXNDO0FBQUFsUyxjQUFBQSxLQUFBa2hELEdBQUFHLElBQUE5b0QsV0FBQStvRCxFQUFBQTtZQUFBQTtBQUFBdGhELGNBQUFBLEtBQUFxaEQsR0FBQWxwRCxNQUFBQSxNQUFBSSxTQUFBQTtBQUFBLG1CQUFBb21ELEdBQUFybkQsTUFBQTBJLEVBQUFBO1VBQUE7UUFBQTtBQUliLFlBS01tbUQsS0FBQUEsU0FBR1QsSUFBQUE7QUFBQWhILFVBQUFBLElBQUF5SCxJQUFBVCxFQUFBQTtBQUFBLGNBQUF2bEIsS0FBQTRnQixHQUFBb0YsRUFBQUE7QUFNUCxtQkFBQUEsR0FBWWhqRCxJQUFTc3BDLElBQU1zUyxJQUFBQTtBQUFhLG1CQUFBOWpDLEdBQUFBLE1BQUFrckMsRUFBQUEsR0FBQWhtQixHQUFBL25DLEtBQUFkLE1BQ2hDNkwsSUFBU3NwQyxJQUFNc1MsRUFBQUE7VUFDdkI7QUEwQkMsaUJBeEJENTVCLEdBQUFnaEMsSUFBQSxDQUFBLEVBQUFyb0QsS0FBQSxRQUFBbkQsT0FVQSxTQUFLOE4sSUFBSzlELElBQUcrRCxJQUFHd3RDLElBQVUzTSxJQUFPOXpCLElBQUFBO0FBQy9CLG1CQUFPbmUsS0FBSzR1RCxXQUFXejlDLElBQUssVUFBVSxHQUFHOUQsSUFBRytELElBQUd3dEMsSUFBVTNNLElBQU85ekIsRUFBQUE7VUFDbEUsRUFBQSxHQUVBLEVBQUEzWCxLQUFBLG9CQUFBbkQsT0FLQSxTQUFpQjhOLElBQUFBO0FBSWYsbUJBSElBLE1BQ0ZuUixLQUFLK25ELE9BQU81MkMsRUFBQUEsR0FFUG5SLEtBQUs2TCxRQUFRc0w7VUFDdEIsRUFBQSxDQUFBLENBQUEsR0FBQzAzQztRQUFBLEVBbENlN0IsRUFBQUE7QUNUTCxpQkFBQXZELEdBQUFDLElBQUFBO0FBQUFDLGNBQUFBLEtBQUEsV0FBQTtBQUFBM29ELGdCQUFBNG9ELGVBQUFBLE9BQUE1b0QsV0FBQUEsQ0FBQTRvRDtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFoa0Q7QUFBQSxxQkFBQTtBQUFBLGdCQUFBLGNBQUEsT0FBQWlrRDtBQUFBLHFCQUFBO0FBQUEsZ0JBQUE7QUFBQSxxQkFBQW5sQyxRQUFBOWpCLFVBQUEySCxRQUFBekgsS0FBQThvRCxHQUFBbGxDLFNBQUEsQ0FBQSxHQUFBLFdBQUE7Y0FBQSxDQUFBLENBQUEsR0FBQTtZQUFBLFNBQUEwSyxJQUFBQTtBQUFBLHFCQUFBO1lBQUE7VUFBQSxFQUFBMDZCO0FBQUEsaUJBQUEsV0FBQTtBQUFBQyxnQkFBQXJoRCxJQUFBcWhELEtBQUF6QyxHQUFBb0MsRUFBQUE7QUFBQUEsZ0JBQUFDLElBQUE7QUFBQSxrQkFBQUssS0FBQTFDLEdBQUFBLElBQUFBLEVBQUExc0M7QUFBQWxTLGNBQUFBLEtBQUFraEQsR0FBQUcsSUFBQTlvRCxXQUFBK29ELEVBQUFBO1lBQUFBO0FBQUF0aEQsY0FBQUEsS0FBQXFoRCxHQUFBbHBELE1BQUFBLE1BQUFJLFNBQUFBO0FBQUEsbUJBQUFvbUQsR0FBQXJuRCxNQUFBMEksRUFBQUE7VUFBQTtRQUFBO0FBS2IsWUFLTW9tRCxLQUFBQSxTQUFPNUUsSUFBQUE7QUFBQTlDLFVBQUFBLElBQUEwSCxJQUFBNUUsRUFBQUE7QUFBQSxjQUFBcmhCLEtBQUE0Z0IsR0FBQXFGLEVBQUFBO0FBTVgsbUJBQUFBLEdBQVlqakQsSUFBU3NwQyxJQUFNc1MsSUFBQUE7QUFBYSxtQkFBQTlqQyxHQUFBQSxNQUFBbXJDLEVBQUFBLEdBQUFqbUIsR0FBQS9uQyxLQUFBZCxNQUNoQzZMLElBQVNzcEMsSUFBTXNTLEVBQUFBO1VBQ3ZCO0FBdURDLGlCQXJERDU1QixHQUFBaWhDLElBQUEsQ0FBQSxFQUFBdG9ELEtBQUEsVUFBQW5ELE9BTUEsU0FBTzhOLElBQUFBO0FBQW1ELGdCQUE5Q3l0QyxLQUFRMzlDLFVBQUF5RCxTQUFBekQsS0FBQUEsV0FBQUEsVUFBQTRkLENBQUFBLElBQUE1ZCxVQUFHLENBQUEsSUFBQWpCLEtBQUs0K0MsVUFBVTNNLEtBQUtoeEMsVUFBQXlELFNBQUF6RCxLQUFBQSxXQUFBQSxVQUFBNGQsQ0FBQUEsSUFBQTVkLFVBQUcsQ0FBQSxJQUFBakIsS0FBS2l5QztBQUNqRCxnQkFBSWp5QyxLQUFLb3FELGFBQWF4TCxJQUFVM00sRUFBQUEsR0FBUTtBQUN0QyxrQkFBTW9ZLEtBQWFycUQsS0FBS3NxRCx1QkFBdUJuNUMsSUFBS3l0QyxJQUFVM00sRUFBQUE7QUFFOURqeUMsbUJBQUttekMsU0FBNkIsSUFBcEJrWCxHQUFXbFgsUUFDekJuekMsS0FBS2t6QyxRQUFRbVgsR0FBV25YLFFBQVFtWCxHQUFXbFgsUUFDM0NuekMsS0FBS3lVLFNBQVMsTUFBTXpVLEtBQUtrekM7WUFDM0I7VUFDRixFQUFBLEdBRUEsRUFBQTFzQyxLQUFBLFFBQUFuRCxPQVNBLFNBQUs4TixJQUFLOUQsSUFBRytELElBQUd3dEMsSUFBVTNNLElBQU85ekIsSUFBQUE7QUFDL0JuZSxpQkFBSytuRCxPQUFPNTJDLElBQUt5dEMsSUFBVTNNLEVBQUFBLEdBQzNCanlDLEtBQUtrMEMsT0FBTzdtQyxLQUFpQixNQUFick4sS0FBS2t6QyxPQUNyQmx6QyxLQUFLbTBDLE1BQU0vaUMsS0FBa0IsTUFBZHBSLEtBQUttekMsUUFFcEJuekMsS0FBS3VxRCxtQkFBbUJwNUMsSUFBS2dOLEVBQUFBLEdBQzdCbk0sR0FBWWIsSUFBS25SLEtBQUtrMEMsTUFBTWwwQyxLQUFLbTBDLEtBQUtuMEMsS0FBS2t6QyxPQUFPbHpDLEtBQUttekMsTUFBQUEsR0FDdkRuekMsS0FBS3lxRCxZQUFZdDVDLElBQUtnTixFQUFBQSxHQUV0Qm5lLEtBQUswcUQsa0JBQWtCcjlDLElBQUcrRCxJQUFHRCxJQUFLeXRDLElBQVUzTSxFQUFBQSxHQUM1Q2p5QyxLQUFLeW5ELFlBQVlqMEMsS0FBS3JDLElBQUs5RCxJQUFHK0QsSUFBR3d0QyxJQUFVM00sRUFBQUE7VUFDN0MsRUFBQSxHQUVBLEVBQUF6ckMsS0FBQSxvQkFBQW5ELE9BTUEsU0FBaUI4TixJQUFLOHBCLElBQUFBO0FBQ2hCOXBCLFlBQUFBLE1BQ0ZuUixLQUFLK25ELE9BQU81MkMsRUFBQUE7QUFFZCxnQkFBTWxJLEtBQWlCLE1BQWJqSixLQUFLa3pDLE9BQ1R4bkMsS0FBa0IsTUFBZDFMLEtBQUttekMsUUFDVHhoQyxLQUFJaFMsS0FBS3lVLElBQUk2bUIsRUFBQUEsSUFBU2h5QixJQUN0QjJJLEtBQUlqUyxLQUFLd1UsSUFBSThtQixFQUFBQSxJQUFTdnZCO0FBQzVCLG1CQUFRekMsS0FBSXlDLEtBQUsvTCxLQUFLMlQsS0FBSzNCLEtBQUlBLEtBQUlDLEtBQUlBLEVBQUFBO1VBQ3pDLEVBQUEsQ0FBQSxDQUFBLEdBQUNrOUM7UUFBQSxFQS9EbUJ0SCxFQUFBQTtBQ1ZULGlCQUFBaUMsR0FBQUMsSUFBQUE7QUFBQUMsY0FBQUEsS0FBQSxXQUFBO0FBQUEzb0QsZ0JBQUE0b0QsZUFBQUEsT0FBQTVvRCxXQUFBQSxDQUFBNG9EO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsR0FBQWhrRDtBQUFBLHFCQUFBO0FBQUEsZ0JBQUEsY0FBQSxPQUFBaWtEO0FBQUEscUJBQUE7QUFBQSxnQkFBQTtBQUFBLHFCQUFBbmxDLFFBQUE5akIsVUFBQTJILFFBQUF6SCxLQUFBOG9ELEdBQUFsbEMsU0FBQSxDQUFBLEdBQUEsV0FBQTtjQUFBLENBQUEsQ0FBQSxHQUFBO1lBQUEsU0FBQTBLLElBQUFBO0FBQUEscUJBQUE7WUFBQTtVQUFBLEVBQUEwNkI7QUFBQSxpQkFBQSxXQUFBO0FBQUFDLGdCQUFBcmhELElBQUFxaEQsS0FBQXpDLEdBQUFvQyxFQUFBQTtBQUFBQSxnQkFBQUMsSUFBQTtBQUFBLGtCQUFBSyxLQUFBMUMsR0FBQUEsSUFBQUEsRUFBQTFzQztBQUFBbFMsY0FBQUEsS0FBQWtoRCxHQUFBRyxJQUFBOW9ELFdBQUErb0QsRUFBQUE7WUFBQUE7QUFBQXRoRCxjQUFBQSxLQUFBcWhELEdBQUFscEQsTUFBQUEsTUFBQUksU0FBQUE7QUFBQSxtQkFBQW9tRCxHQUFBcm5ELE1BQUEwSSxFQUFBQTtVQUFBO1FBQUE7QUFJYixZQUtNcW1ELEtBQUFBLFNBQUk3RSxJQUFBQTtBQUFBOUMsVUFBQUEsSUFBQTJILElBQUE3RSxFQUFBQTtBQUFBLGNBQUFyaEIsS0FBQTRnQixHQUFBc0YsRUFBQUE7QUFNUixtQkFBQUEsR0FBWWxqRCxJQUFTc3BDLElBQU1zUyxJQUFBQTtBQUFhLGdCQUFBOW9CO0FBRVIsbUJBRlFoYixHQUFBQSxNQUFBb3JDLEVBQUFBLElBQ3RDcHdCLEtBQUFrSyxHQUFBL25DLEtBQUFBLE1BQU0rSyxJQUFTc3BDLElBQU1zUyxFQUFBQSxHQUNoQjBDLFlBQVkxQyxFQUFBQSxHQUFhOW9CO1VBQ2hDO0FBd0lDLGlCQXRJRDlRLEdBQUFraEMsSUFBQSxDQUFBLEVBQUF2b0QsS0FBQSxVQUFBbkQsT0FNQSxTQUFPOE4sSUFBS3l0QyxJQUFVM00sSUFBQUE7QUFDaEJqeUMsaUJBQUtvcUQsYUFBYXhMLElBQVUzTSxFQUFBQSxNQUM5Qmp5QyxLQUFLZ3ZELFdBQVcsRUFDZDliLE9BQU94bEIsT0FBTzF0QixLQUFLNkwsUUFBUTRoRCxLQUFLdDJDLElBQUFBLEdBQ2hDZzhCLFFBQVF6bEIsT0FBTzF0QixLQUFLNkwsUUFBUTRoRCxLQUFLdDJDLElBQUFBLEVBQUFBLEdBRW5DblgsS0FBS2t6QyxRQUFRbHpDLEtBQUtndkQsU0FBUzliLFFBQVFsekMsS0FBSzBuRCxPQUFPbE0sUUFBUXg3QyxLQUFLMG5ELE9BQU94VCxNQUNuRWwwQyxLQUFLbXpDLFNBQVNuekMsS0FBS2d2RCxTQUFTN2IsU0FBU256QyxLQUFLMG5ELE9BQU92VCxNQUFNbjBDLEtBQUswbkQsT0FBT2pNLFFBQ25FejdDLEtBQUt5VSxTQUFTLE1BQU16VSxLQUFLa3pDO1VBRTdCLEVBQUEsR0FFQSxFQUFBMXNDLEtBQUEsUUFBQW5ELE9BVUEsU0FBSzhOLElBQUs5RCxJQUFHK0QsSUFBR3d0QyxJQUFVM00sSUFBTzl6QixJQUFBQTtBQUFRLGdCQUFBNGxCLEtBQUEvakM7QUFRdkMsbUJBUEFBLEtBQUsrbkQsT0FBTzUyQyxJQUFLeXRDLElBQVUzTSxFQUFBQSxHQUMzQmp5QyxLQUFLNkwsUUFBUTRoRCxLQUFLdDJDLE9BQU9uWCxLQUFLNkwsUUFBUTRoRCxLQUFLdDJDLFFBQVEsSUFFbkRuWCxLQUFLazBDLE9BQU83bUMsS0FBSXJOLEtBQUtrekMsUUFBUSxHQUM3Qmx6QyxLQUFLbTBDLE1BQU0vaUMsS0FBSXBSLEtBQUttekMsU0FBUyxHQUM3Qm56QyxLQUFLaXZELE1BQU05OUMsSUFBSzlELElBQUcrRCxJQUFHd3RDLElBQVUzTSxJQUFPOXpCLEVBQUFBLEdBRWhDLEVBQ0x3dkMsbUJBQW1CLFdBQUE7QUFDakIsa0JBQUEsV0FBSTVwQixHQUFLbDRCLFFBQVFva0MsT0FBcUI7QUFFcENsTSxnQkFBQUEsR0FBSzBqQixZQUFZajBDLEtBQ2ZyQyxJQUNBNHlCLEdBQUttUSxPQUFPblEsR0FBS2lyQixTQUFTOWIsUUFBUSxJQUFJblAsR0FBSzJqQixPQUFPeFQsTUFDbEQ5aUMsS0FBSTJ5QixHQUFLb1AsU0FBUyxJQUpJLEdBS3RCeUwsRUFBQUE7Y0FFSjtBQUVBN2EsY0FBQUEsR0FBSzJtQixrQkFBa0JyOUMsSUFBRytELEVBQUFBO1lBQzVCLEVBQUE7VUFFSixFQUFBLEdBRUEsRUFBQTVLLEtBQUEscUJBQUFuRCxPQUtBLFNBQWtCZ0ssSUFBRytELElBQUFBO0FBTW5CLGdCQUxBcFIsS0FBSzRuRCxZQUFZelQsTUFBTS9pQyxLQUE2QixNQUF6QnBSLEtBQUs2TCxRQUFRNGhELEtBQUt0MkMsTUFDN0NuWCxLQUFLNG5ELFlBQVkxVCxPQUFPN21DLEtBQTZCLE1BQXpCck4sS0FBSzZMLFFBQVE0aEQsS0FBS3QyQyxNQUM5Q25YLEtBQUs0bkQsWUFBWXBNLFFBQVFudUMsS0FBNkIsTUFBekJyTixLQUFLNkwsUUFBUTRoRCxLQUFLdDJDLE1BQy9DblgsS0FBSzRuRCxZQUFZbk0sU0FBU3JxQyxLQUE2QixNQUF6QnBSLEtBQUs2TCxRQUFRNGhELEtBQUt0MkMsTUFBQUEsV0FFNUNuWCxLQUFLNkwsUUFBUW9rQyxTQUF1Qmp3QyxLQUFLeW5ELFlBQVl0d0MsS0FBSys3QixRQUFRLEdBQUc7QUFFdkVsekMsbUJBQUs0bkQsWUFBWTFULE9BQU92MEMsS0FBSytOLElBQzNCMU4sS0FBSzRuRCxZQUFZMVQsTUFDakJsMEMsS0FBS3luRCxZQUFZdHdDLEtBQUsrOEIsSUFBQUEsR0FFeEJsMEMsS0FBSzRuRCxZQUFZcE0sUUFBUTc3QyxLQUFLOE4sSUFDNUJ6TixLQUFLNG5ELFlBQVlwTSxPQUNqQng3QyxLQUFLeW5ELFlBQVl0d0MsS0FBSys4QixPQUFPbDBDLEtBQUt5bkQsWUFBWXR3QyxLQUFLKzdCLEtBQUFBLEdBRXJEbHpDLEtBQUs0bkQsWUFBWW5NLFNBQVM5N0MsS0FBSzhOLElBQzdCek4sS0FBSzRuRCxZQUFZbk0sUUFDakJ6N0MsS0FBSzRuRCxZQUFZbk0sU0FBU3o3QyxLQUFLeW5ELFlBQVl0d0MsS0FBS2c4QixTQVgxQixDQUFBO1lBYTFCO1VBQ0YsRUFBQSxHQUVBLEVBQUEzc0MsS0FBQSxTQUFBbkQsT0FTQSxTQUFNOE4sSUFBSzlELElBQUcrRCxJQUFHd3RDLElBQVUzTSxJQUFPOXpCLElBQUFBO0FBQ2hDLGdCQUFNNndDLEtBQVd0aEMsT0FBTzF0QixLQUFLNkwsUUFBUTRoRCxLQUFLdDJDLElBQUFBO0FBQUFBLHVCQUV0Q25YLEtBQUs2TCxRQUFRNGhELEtBQUtDLFFBQ3BCdjhDLEdBQUk0dEMsT0FBTyxDQUNtQixRQUE1Qi8rQyxLQUFLNkwsUUFBUTRoRCxLQUFLeUIsU0FDZGx2RCxLQUFLNkwsUUFBUTRoRCxLQUFLeUIsU0FDbEJ0USxLQUNBLFNBQ0EsS0FHeUIsUUFBNUI1K0MsS0FBSzZMLFFBQVE0aEQsS0FBS3lCLFVBQWtCdFEsS0FBVyxJQUFJLEtBQ2xEb1EsS0FDQSxNQUNGaHZELEtBQUs2TCxRQUFRNGhELEtBQUsxSCxJQUFBQSxFQUNsQm4yQyxLQUFLLEdBQUEsR0FHUHVCLEdBQUlvekMsWUFBWXZrRCxLQUFLNkwsUUFBUTRoRCxLQUFLdGlCLFNBQVMsU0FDM0NoNkIsR0FBSXl6QyxZQUFZLFVBQ2hCenpDLEdBQUlzMEMsZUFBZSxVQUduQnpsRCxLQUFLa3BELGFBQWEvM0MsSUFBS2dOLEVBQUFBLEdBQ3ZCaE4sR0FBSXEwQyxTQUFTeGxELEtBQUs2TCxRQUFRNGhELEtBQUtDLE1BQU1yZ0QsSUFBRytELEVBQUFBLEdBR3hDcFIsS0FBS29wRCxjQUFjajRDLElBQUtnTixFQUFBQSxLQUV4QmdxQixRQUFRL25DLE1BQ04sMkhBQUE7VUFHTixFQUFBLEdBRUEsRUFBQW9HLEtBQUEsb0JBQUFuRCxPQU1BLFNBQWlCOE4sSUFBSzhwQixJQUFBQTtBQUNwQixtQkFBT2o3QixLQUFLeXVELGtCQUFrQnQ5QyxJQUFLOHBCLEVBQUFBO1VBQ3JDLEVBQUEsQ0FBQSxDQUFBLEdBQUM4ekI7UUFBQSxFQWpKZ0J2SCxFQUFBQTtBQ1ROLGlCQUFBaUMsR0FBQUMsSUFBQUE7QUFBQUMsY0FBQUEsS0FBQSxXQUFBO0FBQUEzb0QsZ0JBQUE0b0QsZUFBQUEsT0FBQTVvRCxXQUFBQSxDQUFBNG9EO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsR0FBQWhrRDtBQUFBLHFCQUFBO0FBQUEsZ0JBQUEsY0FBQSxPQUFBaWtEO0FBQUEscUJBQUE7QUFBQSxnQkFBQTtBQUFBLHFCQUFBbmxDLFFBQUE5akIsVUFBQTJILFFBQUF6SCxLQUFBOG9ELEdBQUFsbEMsU0FBQSxDQUFBLEdBQUEsV0FBQTtjQUFBLENBQUEsQ0FBQSxHQUFBO1lBQUEsU0FBQTBLLElBQUFBO0FBQUEscUJBQUE7WUFBQTtVQUFBLEVBQUEwNkI7QUFBQSxpQkFBQSxXQUFBO0FBQUFDLGdCQUFBcmhELElBQUFxaEQsS0FBQXpDLEdBQUFvQyxFQUFBQTtBQUFBQSxnQkFBQUMsSUFBQTtBQUFBLGtCQUFBSyxLQUFBMUMsR0FBQUEsSUFBQUEsRUFBQTFzQztBQUFBbFMsY0FBQUEsS0FBQWtoRCxHQUFBRyxJQUFBOW9ELFdBQUErb0QsRUFBQUE7WUFBQUE7QUFBQXRoRCxjQUFBQSxLQUFBcWhELEdBQUFscEQsTUFBQUEsTUFBQUksU0FBQUE7QUFBQSxtQkFBQW9tRCxHQUFBcm5ELE1BQUEwSSxFQUFBQTtVQUFBO1FBQUE7QUFLYixZQUtNcXFDLEtBQUFBLFNBQUtxWixJQUFBQTtBQUFBaEYsVUFBQUEsSUFBQXJVLElBQUFxWixFQUFBQTtBQUFBLGNBQUF2akIsS0FBQTRnQixHQUFBMVcsRUFBQUE7QUFRVCxtQkFBQUEsR0FBWWxuQyxJQUFTc3BDLElBQU1zUyxJQUFhcUQsSUFBVUMsSUFBQUE7QUFBYSxnQkFBQXBzQjtBQUd2QixtQkFIdUJoYixHQUFBQSxNQUFBb3ZCLEVBQUFBLElBQzdEcFUsS0FBQWtLLEdBQUEvbkMsS0FBQUEsTUFBTStLLElBQVNzcEMsSUFBTXNTLEVBQUFBLEdBRWhCdUQsVUFBVUYsSUFBVUMsRUFBQUEsR0FBYXBzQjtVQUN4QztBQXVKQyxpQkFySkQ5USxHQUFBa2xCLElBQUEsQ0FBQSxFQUFBdnNDLEtBQUEsVUFBQW5ELE9BTUEsU0FBTzhOLElBQUFBO0FBQW1ELGdCQUE5Q3l0QyxLQUFRMzlDLFVBQUF5RCxTQUFBekQsS0FBQUEsV0FBQUEsVUFBQTRkLENBQUFBLElBQUE1ZCxVQUFHLENBQUEsSUFBQWpCLEtBQUs0K0MsVUFBVTNNLEtBQUtoeEMsVUFBQXlELFNBQUF6RCxLQUFBQSxXQUFBQSxVQUFBNGQsQ0FBQUEsSUFBQTVkLFVBQUcsQ0FBQSxJQUFBakIsS0FBS2l5QztBQU1qRCxnQkFBQSxXQUpFanlDLEtBQUs4cUQsU0FBUzN3QyxPQUFBQSxXQUNkbmEsS0FBSzhxRCxTQUFTNVgsU0FBQUEsV0FDZGx6QyxLQUFLOHFELFNBQVMzWCxRQUVDO0FBQ2Ysa0JBQU1nYyxLQUEyQixJQUFwQm52RCxLQUFLNkwsUUFBUXNMO0FBRzFCLHFCQUZBblgsS0FBS2t6QyxRQUFRaWMsSUFBQUEsTUFDYm52RCxLQUFLbXpDLFNBQVNnYztZQUVoQjtBQUVJbnZELGlCQUFLb3FELGFBQWF4TCxJQUFVM00sRUFBQUEsS0FDOUJqeUMsS0FBS3dzRCxhQUFBQTtVQUVULEVBQUEsR0FFQSxFQUFBaG1ELEtBQUEsUUFBQW5ELE9BU0EsU0FBSzhOLElBQUs5RCxJQUFHK0QsSUFBR3d0QyxJQUFVM00sSUFBTzl6QixJQUFBQTtBQUMvQmhOLFlBQUFBLEdBQUkwM0MsS0FBQUEsR0FDSjdvRCxLQUFLeXNELGFBQWE3TixFQUFBQSxHQUNsQjUrQyxLQUFLK25ELE9BQUFBO0FBRUwsZ0JBQUkyRSxLQUFTci9DLElBQ1hzL0MsS0FBU3Y3QztBQVlYLGdCQVZzRCxlQUFsRHBSLEtBQUs2TCxRQUFRODhDLGdCQUFnQmlFLG9CQUMvQjVzRCxLQUFLazBDLE9BQU83bUMsSUFDWnJOLEtBQUttMEMsTUFBTS9pQyxJQUNYczdDLE1BQVUxc0QsS0FBS2t6QyxRQUFRLEdBQ3ZCeVosTUFBVTNzRCxLQUFLbXpDLFNBQVMsTUFFeEJuekMsS0FBS2swQyxPQUFPN21DLEtBQUlyTixLQUFLa3pDLFFBQVEsR0FDN0JsekMsS0FBS20wQyxNQUFNL2lDLEtBQUlwUixLQUFLbXpDLFNBQVMsSUFBQSxTQUczQm56QyxLQUFLNkwsUUFBUTg4QyxnQkFBZ0J5RyxvQkFBNkI7QUFDNUQsa0JBQU1DLEtBQXFCcnZELEtBQUs2TCxRQUFRaThDLGFBQ2xDd0gsS0FDSnR2RCxLQUFLNkwsUUFBUTBqRCx1QkFBdUIsSUFBSXZ2RCxLQUFLNkwsUUFBUWk4QyxhQUNqREEsTUFDSGxKLEtBQVcwUSxLQUFxQkQsTUFDakNydkQsS0FBS20xQyxLQUFLNk8sS0FBS3ZvQjtBQUNqQnRxQixjQUFBQSxHQUFJaTBDLFlBQVl6bEQsS0FBSytOLElBQUkxTixLQUFLa3pDLE9BQU80VSxFQUFBQSxHQUVyQzMyQyxHQUFJRyxVQUFBQTtBQUNKLGtCQUFJK3pDLEtBQWN6RyxLQUNkNStDLEtBQUs2TCxRQUFRcy9CLE1BQU02RyxVQUFVRCxTQUM3QkUsS0FDQWp5QyxLQUFLNkwsUUFBUXMvQixNQUFNOEcsTUFBTUYsU0FDekIveEMsS0FBSzZMLFFBQVFzL0IsTUFBTTRHLFFBQ25Cd1MsS0FBWTNGLEtBQ1o1K0MsS0FBSzZMLFFBQVFzL0IsTUFBTTZHLFVBQVVGLGFBQzdCRyxLQUNBanlDLEtBQUs2TCxRQUFRcy9CLE1BQU04RyxNQUFNSCxhQUN6Qjl4QyxLQUFLNkwsUUFBUXMvQixNQUFNMkc7QUFBQUEseUJBRW5CM3pCLEdBQU93bkMsWUFDVE4sS0FBY08sR0FBZ0JQLElBQWFsbkMsR0FBT3duQyxPQUFBQSxHQUNsRHBCLEtBQVlxQixHQUFnQnJCLElBQVdwbUMsR0FBT3duQyxPQUFBQSxJQUdoRHgwQyxHQUFJazBDLGNBQWNBLElBR2xCbDBDLEdBQUlvekMsWUFBWUEsSUFHaEJwekMsR0FBSW9ELEtBQ0Z2VSxLQUFLazBDLE9BQU8sTUFBTS9pQyxHQUFJaTBDLFdBQ3RCcGxELEtBQUttMEMsTUFBTSxNQUFNaGpDLEdBQUlpMEMsV0FDckJwbEQsS0FBS2t6QyxRQUFRL2hDLEdBQUlpMEMsV0FDakJwbEQsS0FBS216QyxTQUFTaGlDLEdBQUlpMEMsU0FBQUEsR0FFcEIrRCxHQUFBaDRDLEVBQUFBLEVBQUdyUSxLQUFIcVEsRUFBQUEsR0FFQW5SLEtBQUtxcEQsY0FBY2w0QyxJQUFLZ04sRUFBQUEsR0FFeEJoTixHQUFJTSxVQUFBQTtZQUNOO0FBRUF6UixpQkFBSzhzRCxxQkFBcUIzN0MsSUFBS2dOLEVBQUFBLEdBRS9CbmUsS0FBSytzRCxnQkFBZ0I1N0MsSUFBS3U3QyxJQUFRQyxJQUFRL04sSUFBVTNNLEVBQUFBLEdBRXBEanlDLEtBQUswcUQsa0JBQWtCcjlDLElBQUcrRCxFQUFBQSxHQUMxQkQsR0FBSTgzQyxRQUFBQTtVQUNOLEVBQUEsR0FFQSxFQUFBemlELEtBQUEscUJBQUFuRCxPQUtBLFNBQWtCZ0ssSUFBRytELElBQUFBO0FBQ25CcFIsaUJBQUsrbkQsT0FBQUEsR0FFaUQsZUFBbEQvbkQsS0FBSzZMLFFBQVE4OEMsZ0JBQWdCaUUsb0JBQy9CNXNELEtBQUtrMEMsT0FBTzdtQyxJQUNack4sS0FBS20wQyxNQUFNL2lDLE9BRVhwUixLQUFLazBDLE9BQU83bUMsS0FBSXJOLEtBQUtrekMsUUFBUSxHQUM3Qmx6QyxLQUFLbTBDLE1BQU0vaUMsS0FBSXBSLEtBQUttekMsU0FBUyxJQUcvQm56QyxLQUFLNG5ELFlBQVkxVCxPQUFPbDBDLEtBQUtrMEMsTUFDN0JsMEMsS0FBSzRuRCxZQUFZelQsTUFBTW4wQyxLQUFLbTBDLEtBQzVCbjBDLEtBQUs0bkQsWUFBWW5NLFNBQVN6N0MsS0FBS20wQyxNQUFNbjBDLEtBQUttekMsUUFDMUNuekMsS0FBSzRuRCxZQUFZcE0sUUFBUXg3QyxLQUFLazBDLE9BQU9sMEMsS0FBS2t6QyxPQUFBQSxXQUV0Q2x6QyxLQUFLNkwsUUFBUW9rQyxTQUF1Qmp3QyxLQUFLeW5ELFlBQVl0d0MsS0FBSys3QixRQUFRLE1BQ3BFbHpDLEtBQUs0bkQsWUFBWTFULE9BQU92MEMsS0FBSytOLElBQzNCMU4sS0FBSzRuRCxZQUFZMVQsTUFDakJsMEMsS0FBS3luRCxZQUFZdHdDLEtBQUsrOEIsSUFBQUEsR0FFeEJsMEMsS0FBSzRuRCxZQUFZcE0sUUFBUTc3QyxLQUFLOE4sSUFDNUJ6TixLQUFLNG5ELFlBQVlwTSxPQUNqQng3QyxLQUFLeW5ELFlBQVl0d0MsS0FBSys4QixPQUFPbDBDLEtBQUt5bkQsWUFBWXR3QyxLQUFLKzdCLEtBQUFBLEdBRXJEbHpDLEtBQUs0bkQsWUFBWW5NLFNBQVM5N0MsS0FBSzhOLElBQzdCek4sS0FBSzRuRCxZQUFZbk0sUUFDakJ6N0MsS0FBSzRuRCxZQUFZbk0sU0FBU3o3QyxLQUFLNnFELFdBQUFBO1VBR3JDLEVBQUEsR0FFQSxFQUFBcmtELEtBQUEsb0JBQUFuRCxPQU1BLFNBQWlCOE4sSUFBSzhwQixJQUFBQTtBQUNwQixtQkFBT2o3QixLQUFLeXVELGtCQUFrQnQ5QyxJQUFLOHBCLEVBQUFBO1VBQ3JDLEVBQUEsQ0FBQSxDQUFBLEdBQUM4WDtRQUFBLEVBbktpQjZYLEVBQUFBO0FDVlAsaUJBQUFuQixHQUFBQyxJQUFBQTtBQUFBQyxjQUFBQSxLQUFBLFdBQUE7QUFBQTNvRCxnQkFBQTRvRCxlQUFBQSxPQUFBNW9ELFdBQUFBLENBQUE0b0Q7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxHQUFBaGtEO0FBQUEscUJBQUE7QUFBQSxnQkFBQSxjQUFBLE9BQUFpa0Q7QUFBQSxxQkFBQTtBQUFBLGdCQUFBO0FBQUEscUJBQUFubEMsUUFBQTlqQixVQUFBMkgsUUFBQXpILEtBQUE4b0QsR0FBQWxsQyxTQUFBLENBQUEsR0FBQSxXQUFBO2NBQUEsQ0FBQSxDQUFBLEdBQUE7WUFBQSxTQUFBMEssSUFBQUE7QUFBQSxxQkFBQTtZQUFBO1VBQUEsRUFBQTA2QjtBQUFBLGlCQUFBLFdBQUE7QUFBQUMsZ0JBQUFyaEQsSUFBQXFoRCxLQUFBekMsR0FBQW9DLEVBQUFBO0FBQUFBLGdCQUFBQyxJQUFBO0FBQUEsa0JBQUFLLEtBQUExQyxHQUFBQSxJQUFBQSxFQUFBMXNDO0FBQUFsUyxjQUFBQSxLQUFBa2hELEdBQUFHLElBQUE5b0QsV0FBQStvRCxFQUFBQTtZQUFBQTtBQUFBdGhELGNBQUFBLEtBQUFxaEQsR0FBQWxwRCxNQUFBQSxNQUFBSSxTQUFBQTtBQUFBLG1CQUFBb21ELEdBQUFybkQsTUFBQTBJLEVBQUFBO1VBQUE7UUFBQTtBQUliLFlBS004bUQsS0FBQUEsU0FBTXBCLElBQUFBO0FBQUFoSCxVQUFBQSxJQUFBb0ksSUFBQXBCLEVBQUFBO0FBQUEsY0FBQXZsQixLQUFBNGdCLEdBQUErRixFQUFBQTtBQU1WLG1CQUFBQSxHQUFZM2pELElBQVNzcEMsSUFBTXNTLElBQUFBO0FBQWEsbUJBQUE5akMsR0FBQUEsTUFBQTZyQyxFQUFBQSxHQUFBM21CLEdBQUEvbkMsS0FBQWQsTUFDaEM2TCxJQUFTc3BDLElBQU1zUyxFQUFBQTtVQUN2QjtBQXdCQyxpQkF0QkQ1NUIsR0FBQTJoQyxJQUFBLENBQUEsRUFBQWhwRCxLQUFBLFFBQUFuRCxPQVVBLFNBQUs4TixJQUFLOUQsSUFBRytELElBQUd3dEMsSUFBVTNNLElBQU85ekIsSUFBQUE7QUFDL0IsbUJBQU9uZSxLQUFLNHVELFdBQVd6OUMsSUFBSyxVQUFVLEdBQUc5RCxJQUFHK0QsSUFBR3d0QyxJQUFVM00sSUFBTzl6QixFQUFBQTtVQUNsRSxFQUFBLEdBRUEsRUFBQTNYLEtBQUEsb0JBQUFuRCxPQU1BLFNBQWlCOE4sSUFBSzhwQixJQUFBQTtBQUNwQixtQkFBT2o3QixLQUFLeXVELGtCQUFrQnQ5QyxJQUFLOHBCLEVBQUFBO1VBQ3JDLEVBQUEsQ0FBQSxDQUFBLEdBQUN1MEI7UUFBQSxFQWhDa0J4QyxFQUFBQTtBQ1RSLGlCQUFBdkQsR0FBQUMsSUFBQUE7QUFBQUMsY0FBQUEsS0FBQSxXQUFBO0FBQUEzb0QsZ0JBQUE0b0QsZUFBQUEsT0FBQTVvRCxXQUFBQSxDQUFBNG9EO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsR0FBQWhrRDtBQUFBLHFCQUFBO0FBQUEsZ0JBQUEsY0FBQSxPQUFBaWtEO0FBQUEscUJBQUE7QUFBQSxnQkFBQTtBQUFBLHFCQUFBbmxDLFFBQUE5akIsVUFBQTJILFFBQUF6SCxLQUFBOG9ELEdBQUFsbEMsU0FBQSxDQUFBLEdBQUEsV0FBQTtjQUFBLENBQUEsQ0FBQSxHQUFBO1lBQUEsU0FBQTBLLElBQUFBO0FBQUEscUJBQUE7WUFBQTtVQUFBLEVBQUEwNkI7QUFBQSxpQkFBQSxXQUFBO0FBQUFDLGdCQUFBcmhELElBQUFxaEQsS0FBQXpDLEdBQUFvQyxFQUFBQTtBQUFBQSxnQkFBQUMsSUFBQTtBQUFBLGtCQUFBSyxLQUFBMUMsR0FBQUEsSUFBQUEsRUFBQTFzQztBQUFBbFMsY0FBQUEsS0FBQWtoRCxHQUFBRyxJQUFBOW9ELFdBQUErb0QsRUFBQUE7WUFBQUE7QUFBQXRoRCxjQUFBQSxLQUFBcWhELEdBQUFscEQsTUFBQUEsTUFBQUksU0FBQUE7QUFBQSxtQkFBQW9tRCxHQUFBcm5ELE1BQUEwSSxFQUFBQTtVQUFBO1FBQUE7QUFJYixZQUtNK21ELEtBQUFBLFNBQU9yQixJQUFBQTtBQUFBaEgsVUFBQUEsSUFBQXFJLElBQUFyQixFQUFBQTtBQUFBLGNBQUF2bEIsS0FBQTRnQixHQUFBZ0csRUFBQUE7QUFNWCxtQkFBQUEsR0FBWTVqRCxJQUFTc3BDLElBQU1zUyxJQUFBQTtBQUFhLG1CQUFBOWpDLEdBQUFBLE1BQUE4ckMsRUFBQUEsR0FBQTVtQixHQUFBL25DLEtBQUFkLE1BQ2hDNkwsSUFBU3NwQyxJQUFNc1MsRUFBQUE7VUFDdkI7QUF3QkMsaUJBdEJENTVCLEdBQUE0aEMsSUFBQSxDQUFBLEVBQUFqcEQsS0FBQSxRQUFBbkQsT0FVQSxTQUFLOE4sSUFBSzlELElBQUcrRCxJQUFHd3RDLElBQVUzTSxJQUFPOXpCLElBQUFBO0FBQy9CLG1CQUFPbmUsS0FBSzR1RCxXQUFXejlDLElBQUssV0FBVyxHQUFHOUQsSUFBRytELElBQUd3dEMsSUFBVTNNLElBQU85ekIsRUFBQUE7VUFDbkUsRUFBQSxHQUVBLEVBQUEzWCxLQUFBLG9CQUFBbkQsT0FNQSxTQUFpQjhOLElBQUs4cEIsSUFBQUE7QUFDcEIsbUJBQU9qN0IsS0FBS3l1RCxrQkFBa0J0OUMsSUFBSzhwQixFQUFBQTtVQUNyQyxFQUFBLENBQUEsQ0FBQSxHQUFDdzBCO1FBQUEsRUFoQ21CekMsRUFBQUE7QUNUVCxpQkFBQXZELEdBQUFDLElBQUFBO0FBQUFDLGNBQUFBLEtBQUEsV0FBQTtBQUFBM29ELGdCQUFBNG9ELGVBQUFBLE9BQUE1b0QsV0FBQUEsQ0FBQTRvRDtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFoa0Q7QUFBQSxxQkFBQTtBQUFBLGdCQUFBLGNBQUEsT0FBQWlrRDtBQUFBLHFCQUFBO0FBQUEsZ0JBQUE7QUFBQSxxQkFBQW5sQyxRQUFBOWpCLFVBQUEySCxRQUFBekgsS0FBQThvRCxHQUFBbGxDLFNBQUEsQ0FBQSxHQUFBLFdBQUE7Y0FBQSxDQUFBLENBQUEsR0FBQTtZQUFBLFNBQUEwSyxJQUFBQTtBQUFBLHFCQUFBO1lBQUE7VUFBQSxFQUFBMDZCO0FBQUEsaUJBQUEsV0FBQTtBQUFBQyxnQkFBQXJoRCxJQUFBcWhELEtBQUF6QyxHQUFBb0MsRUFBQUE7QUFBQUEsZ0JBQUFDLElBQUE7QUFBQSxrQkFBQUssS0FBQTFDLEdBQUFBLElBQUFBLEVBQUExc0M7QUFBQWxTLGNBQUFBLEtBQUFraEQsR0FBQUcsSUFBQTlvRCxXQUFBK29ELEVBQUFBO1lBQUFBO0FBQUF0aEQsY0FBQUEsS0FBQXFoRCxHQUFBbHBELE1BQUFBLE1BQUFJLFNBQUFBO0FBQUEsbUJBQUFvbUQsR0FBQXJuRCxNQUFBMEksRUFBQUE7VUFBQTtRQUFBO0FBSWIsWUFLTWduRCxLQUFBQSxTQUFJdEIsSUFBQUE7QUFBQWhILFVBQUFBLElBQUFzSSxJQUFBdEIsRUFBQUE7QUFBQSxjQUFBdmxCLEtBQUE0Z0IsR0FBQWlHLEVBQUFBO0FBTVIsbUJBQUFBLEdBQVk3akQsSUFBU3NwQyxJQUFNc1MsSUFBQUE7QUFBYSxtQkFBQTlqQyxHQUFBQSxNQUFBK3JDLEVBQUFBLEdBQUE3bUIsR0FBQS9uQyxLQUFBZCxNQUNoQzZMLElBQVNzcEMsSUFBTXNTLEVBQUFBO1VBQ3ZCO0FBd0JDLGlCQXRCRDU1QixHQUFBNmhDLElBQUEsQ0FBQSxFQUFBbHBELEtBQUEsUUFBQW5ELE9BVUEsU0FBSzhOLElBQUs5RCxJQUFHK0QsSUFBR3d0QyxJQUFVM00sSUFBTzl6QixJQUFBQTtBQUMvQixtQkFBT25lLEtBQUs0dUQsV0FBV3o5QyxJQUFLLFFBQVEsR0FBRzlELElBQUcrRCxJQUFHd3RDLElBQVUzTSxJQUFPOXpCLEVBQUFBO1VBQ2hFLEVBQUEsR0FFQSxFQUFBM1gsS0FBQSxvQkFBQW5ELE9BTUEsU0FBaUI4TixJQUFLOHBCLElBQUFBO0FBQ3BCLG1CQUFPajdCLEtBQUt5dUQsa0JBQWtCdDlDLElBQUs4cEIsRUFBQUE7VUFDckMsRUFBQSxDQUFBLENBQUEsR0FBQ3kwQjtRQUFBLEVBaENnQjFDLEVBQUFBO0FDVE4saUJBQUF2RCxHQUFBQyxJQUFBQTtBQUFBQyxjQUFBQSxLQUFBLFdBQUE7QUFBQTNvRCxnQkFBQTRvRCxlQUFBQSxPQUFBNW9ELFdBQUFBLENBQUE0b0Q7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxHQUFBaGtEO0FBQUEscUJBQUE7QUFBQSxnQkFBQSxjQUFBLE9BQUFpa0Q7QUFBQSxxQkFBQTtBQUFBLGdCQUFBO0FBQUEscUJBQUFubEMsUUFBQTlqQixVQUFBMkgsUUFBQXpILEtBQUE4b0QsR0FBQWxsQyxTQUFBLENBQUEsR0FBQSxXQUFBO2NBQUEsQ0FBQSxDQUFBLEdBQUE7WUFBQSxTQUFBMEssSUFBQUE7QUFBQSxxQkFBQTtZQUFBO1VBQUEsRUFBQTA2QjtBQUFBLGlCQUFBLFdBQUE7QUFBQUMsZ0JBQUFyaEQsSUFBQXFoRCxLQUFBekMsR0FBQW9DLEVBQUFBO0FBQUFBLGdCQUFBQyxJQUFBO0FBQUEsa0JBQUFLLEtBQUExQyxHQUFBQSxJQUFBQSxFQUFBMXNDO0FBQUFsUyxjQUFBQSxLQUFBa2hELEdBQUFHLElBQUE5b0QsV0FBQStvRCxFQUFBQTtZQUFBQTtBQUFBdGhELGNBQUFBLEtBQUFxaEQsR0FBQWxwRCxNQUFBQSxNQUFBSSxTQUFBQTtBQUFBLG1CQUFBb21ELEdBQUFybkQsTUFBQTBJLEVBQUFBO1VBQUE7UUFBQTtBQUliLFlBS01pbkQsS0FBQUEsU0FBSXpGLElBQUFBO0FBQUE5QyxVQUFBQSxJQUFBdUksSUFBQXpGLEVBQUFBO0FBQUEsY0FBQXJoQixLQUFBNGdCLEdBQUFrRyxFQUFBQTtBQU1SLG1CQUFBQSxHQUFZOWpELElBQVNzcEMsSUFBTXNTLElBQUFBO0FBQWEsZ0JBQUE5b0I7QUFFUixtQkFGUWhiLEdBQUFBLE1BQUFnc0MsRUFBQUEsSUFDdENoeEIsS0FBQWtLLEdBQUEvbkMsS0FBQUEsTUFBTStLLElBQVNzcEMsSUFBTXNTLEVBQUFBLEdBQ2hCMEMsWUFBWTFDLEVBQUFBLEdBQWE5b0I7VUFDaEM7QUF1REMsaUJBckREOVEsR0FBQThoQyxJQUFBLENBQUEsRUFBQW5wRCxLQUFBLFVBQUFuRCxPQU1BLFNBQU84TixJQUFLeXRDLElBQVUzTSxJQUFBQTtBQUNoQmp5QyxpQkFBS29xRCxhQUFheEwsSUFBVTNNLEVBQUFBLE1BQzlCanlDLEtBQUt1cEQsV0FBV3ZwRCxLQUFLeW5ELFlBQVkrQixZQUFZcjRDLElBQUt5dEMsSUFBVTNNLEVBQUFBLEdBQzVEanlDLEtBQUtrekMsUUFBUWx6QyxLQUFLdXBELFNBQVNyVyxRQUFRbHpDLEtBQUswbkQsT0FBT2xNLFFBQVF4N0MsS0FBSzBuRCxPQUFPeFQsTUFDbkVsMEMsS0FBS216QyxTQUFTbnpDLEtBQUt1cEQsU0FBU3BXLFNBQVNuekMsS0FBSzBuRCxPQUFPdlQsTUFBTW4wQyxLQUFLMG5ELE9BQU9qTSxRQUNuRXo3QyxLQUFLeVUsU0FBUyxNQUFNelUsS0FBS2t6QztVQUU3QixFQUFBLEdBRUEsRUFBQTFzQyxLQUFBLFFBQUFuRCxPQVNBLFNBQUs4TixJQUFLOUQsSUFBRytELElBQUd3dEMsSUFBVTNNLElBQU85ekIsSUFBQUE7QUFDL0JuZSxpQkFBSytuRCxPQUFPNTJDLElBQUt5dEMsSUFBVTNNLEVBQUFBLEdBQzNCanlDLEtBQUtrMEMsT0FBTzdtQyxLQUFJck4sS0FBS2t6QyxRQUFRLEdBQzdCbHpDLEtBQUttMEMsTUFBTS9pQyxLQUFJcFIsS0FBS216QyxTQUFTLEdBRzdCbnpDLEtBQUtrcEQsYUFBYS8zQyxJQUFLZ04sRUFBQUEsR0FDdkJuZSxLQUFLeW5ELFlBQVlqMEMsS0FDZnJDLElBQ0FuUixLQUFLazBDLE9BQU9sMEMsS0FBS3VwRCxTQUFTclcsUUFBUSxJQUFJbHpDLEtBQUswbkQsT0FBT3hULE1BQ2xEbDBDLEtBQUttMEMsTUFBTW4wQyxLQUFLdXBELFNBQVNwVyxTQUFTLElBQUluekMsS0FBSzBuRCxPQUFPdlQsS0FDbER5SyxJQUNBM00sRUFBQUEsR0FJRmp5QyxLQUFLb3BELGNBQWNqNEMsSUFBS2dOLEVBQUFBLEdBRXhCbmUsS0FBSzBxRCxrQkFBa0JyOUMsSUFBRytELElBQUdELElBQUt5dEMsSUFBVTNNLEVBQUFBO1VBQzlDLEVBQUEsR0FFQSxFQUFBenJDLEtBQUEsb0JBQUFuRCxPQU1BLFNBQWlCOE4sSUFBSzhwQixJQUFBQTtBQUNwQixtQkFBT2o3QixLQUFLeXVELGtCQUFrQnQ5QyxJQUFLOHBCLEVBQUFBO1VBQ3JDLEVBQUEsQ0FBQSxDQUFBLEdBQUMwMEI7UUFBQSxFQWhFZ0JuSSxFQUFBQTtBQ1ROLGlCQUFBaUMsR0FBQUMsSUFBQUE7QUFBQUMsY0FBQUEsS0FBQSxXQUFBO0FBQUEzb0QsZ0JBQUE0b0QsZUFBQUEsT0FBQTVvRCxXQUFBQSxDQUFBNG9EO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsR0FBQWhrRDtBQUFBLHFCQUFBO0FBQUEsZ0JBQUEsY0FBQSxPQUFBaWtEO0FBQUEscUJBQUE7QUFBQSxnQkFBQTtBQUFBLHFCQUFBbmxDLFFBQUE5akIsVUFBQTJILFFBQUF6SCxLQUFBOG9ELEdBQUFsbEMsU0FBQSxDQUFBLEdBQUEsV0FBQTtjQUFBLENBQUEsQ0FBQSxHQUFBO1lBQUEsU0FBQTBLLElBQUFBO0FBQUEscUJBQUE7WUFBQTtVQUFBLEVBQUEwNkI7QUFBQSxpQkFBQSxXQUFBO0FBQUFDLGdCQUFBcmhELElBQUFxaEQsS0FBQXpDLEdBQUFvQyxFQUFBQTtBQUFBQSxnQkFBQUMsSUFBQTtBQUFBLGtCQUFBSyxLQUFBMUMsR0FBQUEsSUFBQUEsRUFBQTFzQztBQUFBbFMsY0FBQUEsS0FBQWtoRCxHQUFBRyxJQUFBOW9ELFdBQUErb0QsRUFBQUE7WUFBQUE7QUFBQXRoRCxjQUFBQSxLQUFBcWhELEdBQUFscEQsTUFBQUEsTUFBQUksU0FBQUE7QUFBQSxtQkFBQW9tRCxHQUFBcm5ELE1BQUEwSSxFQUFBQTtVQUFBO1FBQUE7QUFJYixZQUtNa25ELEtBQUFBLFNBQVF4QixJQUFBQTtBQUFBaEgsVUFBQUEsSUFBQXdJLElBQUF4QixFQUFBQTtBQUFBLGNBQUF2bEIsS0FBQTRnQixHQUFBbUcsRUFBQUE7QUFNWixtQkFBQUEsR0FBWS9qRCxJQUFTc3BDLElBQU1zUyxJQUFBQTtBQUFhLG1CQUFBOWpDLEdBQUFBLE1BQUFpc0MsRUFBQUEsR0FBQS9tQixHQUFBL25DLEtBQUFkLE1BQ2hDNkwsSUFBU3NwQyxJQUFNc1MsRUFBQUE7VUFDdkI7QUF3QkMsaUJBdEJENTVCLEdBQUEraEMsSUFBQSxDQUFBLEVBQUFwcEQsS0FBQSxRQUFBbkQsT0FVQSxTQUFLOE4sSUFBSzlELElBQUcrRCxJQUFHd3RDLElBQVUzTSxJQUFPOXpCLElBQUFBO0FBQy9CLG1CQUFPbmUsS0FBSzR1RCxXQUFXejlDLElBQUssWUFBWSxHQUFHOUQsSUFBRytELElBQUd3dEMsSUFBVTNNLElBQU85ekIsRUFBQUE7VUFDcEUsRUFBQSxHQUVBLEVBQUEzWCxLQUFBLG9CQUFBbkQsT0FNQSxTQUFpQjhOLElBQUs4cEIsSUFBQUE7QUFDcEIsbUJBQU9qN0IsS0FBS3l1RCxrQkFBa0J0OUMsSUFBSzhwQixFQUFBQTtVQUNyQyxFQUFBLENBQUEsQ0FBQSxHQUFDMjBCO1FBQUEsRUFoQ29CNUMsRUFBQUE7QUNUVixpQkFBQXZELEdBQUFDLElBQUFBO0FBQUFDLGNBQUFBLEtBQUEsV0FBQTtBQUFBM29ELGdCQUFBNG9ELGVBQUFBLE9BQUE1b0QsV0FBQUEsQ0FBQTRvRDtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFoa0Q7QUFBQSxxQkFBQTtBQUFBLGdCQUFBLGNBQUEsT0FBQWlrRDtBQUFBLHFCQUFBO0FBQUEsZ0JBQUE7QUFBQSxxQkFBQW5sQyxRQUFBOWpCLFVBQUEySCxRQUFBekgsS0FBQThvRCxHQUFBbGxDLFNBQUEsQ0FBQSxHQUFBLFdBQUE7Y0FBQSxDQUFBLENBQUEsR0FBQTtZQUFBLFNBQUEwSyxJQUFBQTtBQUFBLHFCQUFBO1lBQUE7VUFBQSxFQUFBMDZCO0FBQUEsaUJBQUEsV0FBQTtBQUFBQyxnQkFBQXJoRCxJQUFBcWhELEtBQUF6QyxHQUFBb0MsRUFBQUE7QUFBQUEsZ0JBQUFDLElBQUE7QUFBQSxrQkFBQUssS0FBQTFDLEdBQUFBLElBQUFBLEVBQUExc0M7QUFBQWxTLGNBQUFBLEtBQUFraEQsR0FBQUcsSUFBQTlvRCxXQUFBK29ELEVBQUFBO1lBQUFBO0FBQUF0aEQsY0FBQUEsS0FBQXFoRCxHQUFBbHBELE1BQUFBLE1BQUFJLFNBQUFBO0FBQUEsbUJBQUFvbUQsR0FBQXJuRCxNQUFBMEksRUFBQUE7VUFBQTtRQUFBO0FBSWIsWUFLTW1uRCxLQUFBQSxTQUFZekIsSUFBQUE7QUFBQWhILFVBQUFBLElBQUF5SSxJQUFBekIsRUFBQUE7QUFBQSxjQUFBdmxCLEtBQUE0Z0IsR0FBQW9HLEVBQUFBO0FBTWhCLG1CQUFBQSxHQUFZaGtELElBQVNzcEMsSUFBTXNTLElBQUFBO0FBQWEsbUJBQUE5akMsR0FBQUEsTUFBQWtzQyxFQUFBQSxHQUFBaG5CLEdBQUEvbkMsS0FBQWQsTUFDaEM2TCxJQUFTc3BDLElBQU1zUyxFQUFBQTtVQUN2QjtBQWlDQyxpQkEvQkQ1NUIsR0FBQWdpQyxJQUFBLENBQUEsRUFBQXJwRCxLQUFBLFFBQUFuRCxPQVVBLFNBQUs4TixJQUFLOUQsSUFBRytELElBQUd3dEMsSUFBVTNNLElBQU85ekIsSUFBQUE7QUFDL0IsbUJBQU9uZSxLQUFLNHVELFdBQ1Z6OUMsSUFDQSxnQkFDQSxHQUNBOUQsSUFDQStELElBQ0F3dEMsSUFDQTNNLElBQ0E5ekIsRUFBQUE7VUFFSixFQUFBLEdBRUEsRUFBQTNYLEtBQUEsb0JBQUFuRCxPQU1BLFNBQWlCOE4sSUFBSzhwQixJQUFBQTtBQUNwQixtQkFBT2o3QixLQUFLeXVELGtCQUFrQnQ5QyxJQUFLOHBCLEVBQUFBO1VBQ3JDLEVBQUEsQ0FBQSxDQUFBLEdBQUM0MEI7UUFBQSxFQXpDd0I3QyxFQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsRUFBQUE7QUFBQUEsY0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLFlBQUFBLE9BQUFBLEtBQUFBLEdBQUFBLEVBQUFBLEVBQUFBLEtBQUFBLElBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHFCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQSxFQUFBQTtZQUFBQSxDQUFBQSxJQUFBQSxHQUFBQSxLQUFBQSxNQUFBQSxJQUFBQSxFQUFBQTtVQUFBQTtBQUFBQSxpQkFBQUE7UUFBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxVQUFBQSxRQUFBQSxNQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUEsSUFBQUEsS0FBQUEsUUFBQUEsVUFBQUEsRUFBQUEsSUFBQUEsVUFBQUEsRUFBQUEsSUFBQUEsQ0FBQUE7QUFBQUEsWUFBQUEsS0FBQUEsSUFBQUEsR0FBQUEsS0FBQUEsR0FBQUEsT0FBQUEsRUFBQUEsR0FBQUEsSUFBQUEsQ0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsU0FBQUEsSUFBQUE7QUFBQUEsaUJBQUFBLElBQUFBLElBQUFBLEdBQUFBLEVBQUFBLENBQUFBO1lBQUFBLENBQUFBLElBQUFBLEtBQUFBLEdBQUFBLElBQUFBLEdBQUFBLEVBQUFBLENBQUFBLElBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLE9BQUFBLEVBQUFBLENBQUFBLENBQUFBLEVBQUFBLEtBQUFBLElBQUFBLFNBQUFBLElBQUFBO0FBQUFBLGlCQUFBQSxJQUFBQSxJQUFBQSxHQUFBQSxJQUFBQSxFQUFBQSxDQUFBQTtZQUFBQSxDQUFBQTtVQUFBQTtBQUFBQSxpQkFBQUE7UUFBQUE7QUNvQjNCLFlBR004QyxLQUFJLFdBQUE7QUFvQlIsbUJBQUFBLEdBQ0Vqa0QsSUFDQXNwQyxJQUNBNGEsSUFDQUMsSUFDQUMsSUFDQTFXLElBQUFBO0FBQ0E1MUIsZUFBQUEsTUFBQW1zQyxFQUFBQSxHQUNBOXZELEtBQUs2TCxVQUFVcWtELEdBQWFELEVBQUFBLEdBQzVCandELEtBQUtpd0QsZ0JBQWdCQSxJQUNyQmp3RCxLQUFLdTVDLGlCQUFpQkEsSUFDdEJ2NUMsS0FBS20xQyxPQUFPQSxJQUVabjFDLEtBQUt5c0MsUUFBUSxDQUFBLEdBR2J6c0MsS0FBS3FILEtBQUFBLFFBQ0xySCxLQUFLK3ZELFlBQVlBLElBQ2pCL3ZELEtBQUtnd0QsWUFBWUEsSUFHakJod0QsS0FBS3FOLElBQUFBLFFBQ0xyTixLQUFLb1IsSUFBQUEsUUFDTHBSLEtBQUtpaEQsV0FBV2poRCxLQUFLNkwsUUFBUXNMLE1BQzdCblgsS0FBS213RCxlQUFlbndELEtBQUs2TCxRQUFRa3pDLEtBQUs1bkMsTUFDdENuWCxLQUFLb3dELHFCQUFBQSxPQUNMcHdELEtBQUs0K0MsV0FBQUEsT0FDTDUrQyxLQUFLaXlDLFFBQUFBLE9BRUxqeUMsS0FBS3luRCxjQUFjLElBQUkzRyxHQUNyQjlnRCxLQUFLbTFDLE1BQ0xuMUMsS0FBSzZMLFNBQUFBLEtBQ0wsR0FFRjdMLEtBQUtraEQsV0FBV3IxQyxFQUFBQTtVQUNsQjtBQXN2QkMsaUJBcHZCRGdpQixHQUFBaWlDLElBQUEsQ0FBQSxFQUFBdHBELEtBQUEsY0FBQW5ELE9BS0EsU0FBV3VuQyxJQUFBQTtBQUFNLGdCQUFBaGM7QUFBQUEsbUJBQ1gyZCxHQUFBM2QsS0FBSTV1QixLQUFDeXNDLEtBQUFBLEVBQUszckMsS0FBQTh0QixJQUFTZ2MsRUFBQUEsS0FDckI1cUMsS0FBS3lzQyxNQUFNNWxDLEtBQUsrakMsRUFBQUE7VUFFcEIsRUFBQSxHQUVBLEVBQUFwa0MsS0FBQSxjQUFBbkQsT0FLQSxTQUFXdW5DLElBQUFBO0FBQU0sZ0JBQUFnRixJQUVFUSxJQURYeGlDLEtBQVEyK0IsR0FBQXFELEtBQUk1dkMsS0FBQ3lzQyxLQUFBQSxFQUFLM3JDLEtBQUE4dUMsSUFBU2hGLEVBQUFBO0FBQUFBLGtCQUM3Qmg5QixNQUNGa2hDLEdBQUFzQixLQUFJcHdDLEtBQUN5c0MsS0FBQUEsRUFBSzNyQyxLQUFBc3ZDLElBQVF4aUMsSUFBTyxDQUFBO1VBRTdCLEVBQUEsR0FFQSxFQUFBcEgsS0FBQSxjQUFBbkQsT0FNQSxTQUFXd0ksSUFBQUE7QUFDVCxnQkFBTXdrRCxLQUFlcndELEtBQUs2TCxRQUFRc2tDO0FBRWxDLGdCQUFLdGtDLElBQUw7QUFpQkEsa0JBQUEsV0FUV0EsR0FBUXMvQixVQUNqQm5yQyxLQUFLc3dELGNBQWN6a0QsR0FBUXMvQixRQUFBQSxXQUl6QnQvQixHQUFReEUsT0FDVnJILEtBQUtxSCxLQUFLd0UsR0FBUXhFLEtBQUFBLFdBR2hCckgsS0FBS3FIO0FBQ1Asc0JBQU0sSUFBSTJnQyxNQUFNLHNCQUFBO0FBR2xCOG5CLGNBQUFBLEdBQUtTLFVBQVUxa0QsSUFBUzdMLEtBQUtxSCxFQUFBQSxHQUFBQSxXQUl6QndFLEdBQVF3QixNQUNRLFNBQWR4QixHQUFRd0IsS0FDVnJOLEtBQUtxTixJQUFBQSxRQUNMck4sS0FBS293RCxxQkFBQUEsVUFFTHB3RCxLQUFLcU4sSUFBSW1qRCxHQUFTM2tELEdBQVF3QixDQUFBQSxHQUMxQnJOLEtBQUtvd0QscUJBQUFBLFFBQXFCLFdBRzFCdmtELEdBQVF1RixNQUNRLFNBQWR2RixHQUFRdUYsS0FDVnBSLEtBQUtvUixJQUFBQSxRQUNMcFIsS0FBS293RCxxQkFBQUEsVUFFTHB3RCxLQUFLb1IsSUFBSW8vQyxHQUFTM2tELEdBQVF1RixDQUFBQSxHQUMxQnBSLEtBQUtvd0QscUJBQUFBLFFBQXFCLFdBRzFCdmtELEdBQVFzTCxTQUNWblgsS0FBS2loRCxXQUFXcDFDLEdBQVFzTCxPQUFBQSxXQUV0QnRMLEdBQVF4SSxVQUNWd0ksR0FBUXhJLFFBQVFvdEQsR0FBVzVrRCxHQUFReEksS0FBQUEsSUFJckN5c0QsR0FBS1ksYUFDSDF3RCxLQUFLNkwsU0FDTEEsSUFBQUEsTUFFQTdMLEtBQUtpd0QsZUFDTGp3RCxLQUFLZ3dELFNBQUFBO0FBR1Asa0JBQU1oVixLQUFPLENBQUNudkMsSUFBUzdMLEtBQUs2TCxTQUFTN0wsS0FBS3U1QyxjQUFBQTtBQWExQyxxQkFaQXY1QyxLQUFLeWlELFVBQVUzSCxHQUFTLFFBQVFFLEVBQUFBLEdBRWhDaDdDLEtBQUsyd0QsYUFBQUEsR0FDTDN3RCxLQUFLNHdELGtCQUFrQi9rRCxFQUFBQSxHQUFBQSxXQUduQkEsR0FBUTg1QyxXQUF5Qm1LLEdBQUtlLGFBQWFobEQsR0FBUTg1QyxPQUFBQSxNQUM3RDNsRCxLQUFLNkwsUUFBUTg1QyxVQUFVOTVDLEdBQVE4NUMsVUFHakMzbEQsS0FBSzh3RCxZQUFZVCxFQUFBQSxHQUFBQSxXQUVWeGtELEdBQVFrbEQsVUFBQUEsV0FBd0JsbEQsR0FBUW1sRDtZQXRFL0M7VUF1RUYsRUFBQSxHQUVBLEVBQUF4cUQsS0FBQSxnQkFBQW5ELE9BUUEsV0FBQTtBQUNFLGlCQUN5QixvQkFBdkJyRCxLQUFLNkwsUUFBUXNrQyxTQUNVLFlBQXZCbndDLEtBQUs2TCxRQUFRc2tDLFVBQUFBLFdBRVRud0MsS0FBSzZMLFFBQVFxa0M7QUFDZixvQkFBTSxJQUFJbEksTUFDUixpREFDRWhvQyxLQUFLNkwsUUFBUXNrQyxRQUNiLEdBQUE7QUFLUixnQkFBQSxXQUFJbndDLEtBQUs2TCxRQUFRcWtDLE9BQWpCO0FBSUEsa0JBQUEsV0FBSWx3QyxLQUFLK3ZEO0FBQ1Asc0JBQU0sSUFBSS9uQixNQUFNLG9DQUFBO0FBR2xCLGtCQUFrQyxZQUFBLE9BQXZCaG9DLEtBQUs2TCxRQUFRcWtDO0FBQ3RCbHdDLHFCQUFLOHFELFdBQVc5cUQsS0FBSyt2RCxVQUFVa0IsS0FDN0JqeEQsS0FBSzZMLFFBQVFxa0MsT0FDYmx3QyxLQUFLNkwsUUFBUXFsRCxhQUNibHhELEtBQUtxSCxFQUFBQTttQkFFRjtBQUNMLG9CQUFBLFdBQUlySCxLQUFLNkwsUUFBUXFrQyxNQUFNaWhCO0FBQ3JCLHdCQUFNLElBQUlucEIsTUFBTSw4QkFBQTtBQUdsQmhvQyxxQkFBSzhxRCxXQUFXOXFELEtBQUsrdkQsVUFBVWtCLEtBQzdCanhELEtBQUs2TCxRQUFRcWtDLE1BQU1paEIsWUFDbkJueEQsS0FBSzZMLFFBQVFxbEQsYUFDYmx4RCxLQUFLcUgsRUFBQUEsR0FBQUEsV0FHSHJILEtBQUs2TCxRQUFRcWtDLE1BQU0wTyxXQUNyQjUrQyxLQUFLK3FELGNBQWMvcUQsS0FBSyt2RCxVQUFVa0IsS0FDaENqeEQsS0FBSzZMLFFBQVFxa0MsTUFBTTBPLFVBQ25CNStDLEtBQUs2TCxRQUFRcWxELGFBQ2JseEQsS0FBS3FILEVBQUFBLElBR1BySCxLQUFLK3FELGNBQUFBO2NBRVQ7WUFoQ0E7VUFpQ0YsRUFBQSxHQUVBLEVBQUF2a0QsS0FBQSx1QkFBQW5ELE9BdUxBLFdBQUE7QUFDRSxnQkFBTThhLEtBQVMsRUFDYmd0QixPQUFPbnJDLEtBQUs2TCxRQUFRcy9CLE1BQU0yRyxZQUMxQjZULFNBQVMzbEQsS0FBSzZMLFFBQVE4NUMsU0FDdEJtQyxhQUFhOW5ELEtBQUs2TCxRQUFRaThDLGFBQzFCYyxhQUFhNW9ELEtBQUs2TCxRQUFRcy9CLE1BQU00RyxRQUNoQzU2QixNQUFNblgsS0FBSzZMLFFBQVFzTCxNQUNuQnF4QyxjQUFjeG9ELEtBQUs2TCxRQUFRODhDLGdCQUFnQkgsY0FDM0NnQyxjQUFjeHFELEtBQUs2TCxRQUFRODhDLGdCQUFnQjZCLGNBQzNDeEMsUUFBUWhvRCxLQUFLNkwsUUFBUW04QyxPQUFPcmIsU0FDNUJzYixhQUFham9ELEtBQUs2TCxRQUFRbThDLE9BQU83YyxPQUNqQ2dkLFlBQVlub0QsS0FBSzZMLFFBQVFtOEMsT0FBTzd3QyxNQUNoQ2t4QyxTQUFTcm9ELEtBQUs2TCxRQUFRbThDLE9BQU8zNkMsR0FDN0JrN0MsU0FBU3ZvRCxLQUFLNkwsUUFBUW04QyxPQUFPNTJDLEVBQUFBO0FBa0MvQixnQkFoQ0lwUixLQUFLNCtDLFlBQVk1K0MsS0FBS2l5QyxRQUFBQSxTQUNwQmp5QyxLQUFLeWlELFVBQ0h6aUQsS0FBSzQrQyxZQUNpQyxRQUFwQzUrQyxLQUFLNkwsUUFBUTBqRCxzQkFDZnB4QyxHQUFPMnBDLGNBQWM5bkQsS0FBSzZMLFFBQVEwakQsc0JBRWxDcHhDLEdBQU8ycEMsZUFBZSxHQUV4QjNwQyxHQUFPZ3RCLFFBQVFuckMsS0FBSzZMLFFBQVFzL0IsTUFBTTZHLFVBQVVGLFlBQzVDM3pCLEdBQU95cUMsY0FBYzVvRCxLQUFLNkwsUUFBUXMvQixNQUFNNkcsVUFBVUQsUUFDbEQ1ekIsR0FBTzZwQyxTQUFTaG9ELEtBQUs2TCxRQUFRbThDLE9BQU9yYixXQUMzQjNzQyxLQUFLaXlDLFVBQ2Q5ekIsR0FBT2d0QixRQUFRbnJDLEtBQUs2TCxRQUFRcy9CLE1BQU04RyxNQUFNSCxZQUN4QzN6QixHQUFPeXFDLGNBQWM1b0QsS0FBSzZMLFFBQVFzL0IsTUFBTThHLE1BQU1GLFFBQzlDNXpCLEdBQU82cEMsU0FBU2hvRCxLQUFLNkwsUUFBUW04QyxPQUFPcmIsV0FFTCxjQUFBLE9BQWpCM3NDLEtBQUt5aUQsWUFDckJ6aUQsS0FBS3lpRCxRQUFRdGtDLElBQVFuZSxLQUFLNkwsUUFBUXhFLElBQUlySCxLQUFLNCtDLFVBQVU1K0MsS0FBS2l5QyxLQUFBQSxHQUFBQSxVQUN0RDl6QixHQUFPNnBDLFdBRVA3cEMsR0FBTzhwQyxnQkFBZ0Jqb0QsS0FBSzZMLFFBQVFtOEMsT0FBTzdjLFNBQzNDaHRCLEdBQU9ncUMsZUFBZW5vRCxLQUFLNkwsUUFBUW04QyxPQUFPN3dDLFFBQzFDZ0gsR0FBT2txQyxZQUFZcm9ELEtBQUs2TCxRQUFRbThDLE9BQU8zNkMsS0FDdkM4USxHQUFPb3FDLFlBQVl2b0QsS0FBSzZMLFFBQVFtOEMsT0FBTzUyQyxNQUV2QytNLEdBQU82cEMsU0FBQUEsVUFLYjdwQyxHQUFPNnBDLFNBQVNob0QsS0FBSzZMLFFBQVFtOEMsT0FBT3JiLFNBQUFBLFdBRWxDM3NDLEtBQUs2TCxRQUFRODVDLFNBQXVCO0FBQ3RDLGtCQUFNQSxLQUFVM2xELEtBQUs2TCxRQUFRODVDO0FBQzdCeG5DLGNBQUFBLEdBQU95cUMsY0FBY2hELEdBQWdCem5DLEdBQU95cUMsYUFBYWpELEVBQUFBLEdBQ3pEeG5DLEdBQU9ndEIsUUFBUXlhLEdBQWdCem5DLEdBQU9ndEIsT0FBT3dhLEVBQUFBLEdBQzdDeG5DLEdBQU84cEMsY0FBY3JDLEdBQWdCem5DLEdBQU84cEMsYUFBYXRDLEVBQUFBO1lBQzNEO0FBQ0EsbUJBQU94bkM7VUFDVCxFQUFBLEdBRUEsRUFBQTNYLEtBQUEscUJBQUFuRCxPQUlBLFNBQWtCd0ksSUFBQUE7QUFBQUEsdUJBQ1o3TCxLQUFLNkwsUUFBUW9rQyxTQUE4QyxTQUF2Qmp3QyxLQUFLNkwsUUFBUW9rQyxVQUNuRGp3QyxLQUFLNkwsUUFBUW9rQyxRQUFRLEtBR3ZCNmYsR0FBS3NCLG1CQUNIcHhELEtBQUs2TCxTQUFPbWlELEdBQUFBLEdBQUEsQ0FBQSxHQUVQbmlELEVBQUFBLEdBQU8sQ0FBQSxHQUFBLEVBQ1ZzL0IsT0FBUXQvQixNQUFXQSxHQUFRcy9CLFNBQVVuckMsS0FBS3N3RCxlQUFBQSxPQUFlenhDLENBQUFBLEdBRTNEN2UsS0FBS2d3RCxTQUFBQTtBQWFQLGdCQUFNcUIsS0FBZXJ4RCxLQUFLZ3dELFVBQVUxdEQsSUFBSXRDLEtBQUs2TCxRQUFRK3RDLE9BQUFBLEtBQU8sR0FDdERvQixLQUFPLENBQ1hudkMsSUFDQTdMLEtBQUs2TCxTQUNMd2xELElBQ0FyeEQsS0FBS2l3RCxlQUNMandELEtBQUt1NUMsY0FBQUE7QUFFUHY1QyxpQkFBS3luRCxZQUFZdHZCLE9BQU9uNEIsS0FBSzZMLFNBQVNtdkMsRUFBQUEsR0FBQUEsV0FFbENoN0MsS0FBS3luRCxZQUFZeEcsYUFDbkJqaEQsS0FBS213RCxlQUFlbndELEtBQUt5bkQsWUFBWXhHO1VBRXpDLEVBQUEsR0FFQSxFQUFBejZDLEtBQUEsZUFBQW5ELE9BSUEsU0FBWWd0RCxJQUFBQTtBQUNWLGdCQUFJQSxPQUFpQnJ3RCxLQUFLNkwsUUFBUXNrQyxTQUFTbndDLEtBQUttd0M7QUFDOUNud0MsbUJBQUttd0MsTUFBTStRLFdBQVdsaEQsS0FBSzZMLFNBQVM3TCxLQUFLOHFELFVBQVU5cUQsS0FBSytxRCxXQUFBQTs7QUFHeEQsc0JBQVEvcUQsS0FBSzZMLFFBQVFza0MsT0FBQUE7Z0JBQ25CLEtBQUs7QUFDSG53Qyx1QkFBS213QyxRQUFRLElBQUk4WixHQUFJanFELEtBQUs2TCxTQUFTN0wsS0FBS20xQyxNQUFNbjFDLEtBQUt5bkQsV0FBQUE7QUFDbkQ7Z0JBQ0YsS0FBSztBQUNIem5ELHVCQUFLbXdDLFFBQVEsSUFBSWdjLEdBQU9uc0QsS0FBSzZMLFNBQVM3TCxLQUFLbTFDLE1BQU1uMUMsS0FBS3luRCxXQUFBQTtBQUN0RDtnQkFDRixLQUFLO0FBQ0h6bkQsdUJBQUttd0MsUUFBUSxJQUFJb2MsR0FDZnZzRCxLQUFLNkwsU0FDTDdMLEtBQUttMUMsTUFDTG4xQyxLQUFLeW5ELGFBQ0x6bkQsS0FBSzhxRCxVQUNMOXFELEtBQUsrcUQsV0FBQUE7QUFFUDtnQkFDRixLQUFLO0FBQ0gvcUQsdUJBQUttd0MsUUFBUSxJQUFJZ2UsR0FDZm51RCxLQUFLNkwsU0FDTDdMLEtBQUttMUMsTUFDTG4xQyxLQUFLeW5ELGFBQ0x6bkQsS0FBSzZMLFFBQVF3aUQsV0FBQUE7QUFFZjtnQkFDRixLQUFLO0FBQ0hydUQsdUJBQUttd0MsUUFBUSxJQUFJdWUsR0FBUzF1RCxLQUFLNkwsU0FBUzdMLEtBQUttMUMsTUFBTW4xQyxLQUFLeW5ELFdBQUFBO0FBQ3hEO2dCQUNGLEtBQUs7QUFDSHpuRCx1QkFBS213QyxRQUFRLElBQUl3ZSxHQUFRM3VELEtBQUs2TCxTQUFTN0wsS0FBS20xQyxNQUFNbjFDLEtBQUt5bkQsV0FBQUE7QUFDdkQ7Z0JBQ0YsS0FBSztBQUNIem5ELHVCQUFLbXdDLFFBQVEsSUFBSTBlLEdBQUk3dUQsS0FBSzZMLFNBQVM3TCxLQUFLbTFDLE1BQU1uMUMsS0FBS3luRCxXQUFBQTtBQUNuRDtnQkFDRixLQUFLO2dCQXFDTDtBQUNFem5ELHVCQUFLbXdDLFFBQVEsSUFBSTJlLEdBQVE5dUQsS0FBSzZMLFNBQVM3TCxLQUFLbTFDLE1BQU1uMUMsS0FBS3luRCxXQUFBQTtBQUN2RDtnQkFwQ0YsS0FBSztBQUNIem5ELHVCQUFLbXdDLFFBQVEsSUFBSTRlLEdBQUsvdUQsS0FBSzZMLFNBQVM3TCxLQUFLbTFDLE1BQU1uMUMsS0FBS3luRCxXQUFBQTtBQUNwRDtnQkFDRixLQUFLO0FBQ0h6bkQsdUJBQUttd0MsUUFBUSxJQUFJNEMsR0FDZi95QyxLQUFLNkwsU0FDTDdMLEtBQUttMUMsTUFDTG4xQyxLQUFLeW5ELGFBQ0x6bkQsS0FBSzhxRCxVQUNMOXFELEtBQUsrcUQsV0FBQUE7QUFFUDtnQkFDRixLQUFLO0FBQ0gvcUQsdUJBQUttd0MsUUFBUSxJQUFJcWYsR0FBT3h2RCxLQUFLNkwsU0FBUzdMLEtBQUttMUMsTUFBTW4xQyxLQUFLeW5ELFdBQUFBO0FBQ3REO2dCQUNGLEtBQUs7QUFDSHpuRCx1QkFBS213QyxRQUFRLElBQUlzZixHQUFRenZELEtBQUs2TCxTQUFTN0wsS0FBS20xQyxNQUFNbjFDLEtBQUt5bkQsV0FBQUE7QUFDdkQ7Z0JBQ0YsS0FBSztBQUNIem5ELHVCQUFLbXdDLFFBQVEsSUFBSXVmLEdBQUsxdkQsS0FBSzZMLFNBQVM3TCxLQUFLbTFDLE1BQU1uMUMsS0FBS3luRCxXQUFBQTtBQUNwRDtnQkFDRixLQUFLO0FBQ0h6bkQsdUJBQUttd0MsUUFBUSxJQUFJd2YsR0FBSzN2RCxLQUFLNkwsU0FBUzdMLEtBQUttMUMsTUFBTW4xQyxLQUFLeW5ELFdBQUFBO0FBQ3BEO2dCQUNGLEtBQUs7QUFDSHpuRCx1QkFBS213QyxRQUFRLElBQUl5ZixHQUFTNXZELEtBQUs2TCxTQUFTN0wsS0FBS20xQyxNQUFNbjFDLEtBQUt5bkQsV0FBQUE7QUFDeEQ7Z0JBQ0YsS0FBSztBQUNIem5ELHVCQUFLbXdDLFFBQVEsSUFBSTBmLEdBQ2Y3dkQsS0FBSzZMLFNBQ0w3TCxLQUFLbTFDLE1BQ0xuMUMsS0FBS3luRCxXQUFBQTtjQUFBQTtBQVFiem5ELGlCQUFLb3FELGFBQUFBO1VBQ1AsRUFBQSxHQUVBLEVBQUE1akQsS0FBQSxVQUFBbkQsT0FHQSxXQUFBO0FBQ0VyRCxpQkFBSzQrQyxXQUFBQSxNQUNMNStDLEtBQUtvcUQsYUFBQUE7VUFDUCxFQUFBLEdBRUEsRUFBQTVqRCxLQUFBLFlBQUFuRCxPQUdBLFdBQUE7QUFDRXJELGlCQUFLNCtDLFdBQUFBLE9BQ0w1K0MsS0FBS29xRCxhQUFBQTtVQUNQLEVBQUEsR0FFQSxFQUFBNWpELEtBQUEsZ0JBQUFuRCxPQUdBLFdBQUE7QUFDRXJELGlCQUFLbXdDLE1BQU13WCxnQkFBQUE7VUFDYixFQUFBLEdBRUEsRUFBQW5oRCxLQUFBLFlBQUFuRCxPQU1BLFdBQUE7QUFDRSxtQkFBT3JELEtBQUs2TCxRQUFROGxDO1VBQ3RCLEVBQUEsR0FFQSxFQUFBbnJDLEtBQUEsb0JBQUFuRCxPQU9BLFNBQWlCOE4sSUFBSzhwQixJQUFBQTtBQUNwQixtQkFBT2o3QixLQUFLbXdDLE1BQU15TCxpQkFBaUJ6cUMsSUFBSzhwQixFQUFBQTtVQUMxQyxFQUFBLEdBRUEsRUFBQXowQixLQUFBLFdBQUFuRCxPQUtBLFdBQUE7QUFDRSxtQkFBT3JELEtBQUs2TCxRQUFRc2xDLE1BQU05akMsS0FBS3JOLEtBQUs2TCxRQUFRc2xDLE1BQU0vL0I7VUFDcEQsRUFBQSxHQUVBLEVBQUE1SyxLQUFBLGNBQUFuRCxPQUtBLFdBQUE7QUFDRSxtQkFBT3JELEtBQUs0K0M7VUFDZCxFQUFBLEdBRUEsRUFBQXA0QyxLQUFBLFlBQUFuRCxPQUtBLFdBQUE7QUFDRSxtQkFBT3JELEtBQUs2TCxRQUFReEk7VUFDdEIsRUFBQSxHQUVBLEVBQUFtRCxLQUFBLGdCQUFBbkQsT0FLQSxXQUFBO0FBQ0UsbUJBQU9yRCxLQUFLeW5ELFlBQVl0d0MsS0FBQUE7VUFDMUIsRUFBQSxHQUVBLEVBQUEzUSxLQUFBLGlCQUFBbkQsT0FRQSxTQUFjcUssSUFBS0QsSUFBSzZqRCxJQUFBQTtBQUN0QixnQkFBQSxXQUFJdHhELEtBQUs2TCxRQUFReEksT0FBcUI7QUFDcEMsa0JBQU1vNEIsS0FBUXo3QixLQUFLNkwsUUFBUW80QyxRQUFRc04sc0JBQ2pDN2pELElBQ0FELElBQ0E2akQsSUFDQXR4RCxLQUFLNkwsUUFBUXhJLEtBQUFBLEdBRVRtdUQsS0FBV3h4RCxLQUFLNkwsUUFBUW80QyxRQUFReDJDLE1BQU16TixLQUFLNkwsUUFBUW80QyxRQUFRdjJDO0FBQ2pFLGtCQUFBLFNBQUkxTixLQUFLNkwsUUFBUW80QyxRQUFRaFUsTUFBTXRELFNBQWtCO0FBQy9DLG9CQUFNOGtCLEtBQ0p6eEQsS0FBSzZMLFFBQVFvNEMsUUFBUWhVLE1BQU14aUMsTUFBTXpOLEtBQUs2TCxRQUFRbzRDLFFBQVFoVSxNQUFNdmlDO0FBQzlEMU4scUJBQUs2TCxRQUFRa3pDLEtBQUs1bkMsT0FDaEJuWCxLQUFLNkwsUUFBUW80QyxRQUFRaFUsTUFBTXZpQyxNQUFNK3RCLEtBQVFnMkI7Y0FDN0M7QUFDQXp4RCxtQkFBSzZMLFFBQVFzTCxPQUFPblgsS0FBSzZMLFFBQVFvNEMsUUFBUXYyQyxNQUFNK3RCLEtBQVErMUI7WUFDekQ7QUFDRXh4RCxtQkFBSzZMLFFBQVFzTCxPQUFPblgsS0FBS2loRCxVQUN6QmpoRCxLQUFLNkwsUUFBUWt6QyxLQUFLNW5DLE9BQU9uWCxLQUFLbXdEO0FBR2hDbndELGlCQUFLNHdELGtCQUFBQTtVQUNQLEVBQUEsR0FFQSxFQUFBcHFELEtBQUEsUUFBQW5ELE9BT0EsU0FBSzhOLElBQUFBO0FBQ0gsZ0JBQU1nTixLQUFTbmUsS0FBSzYrQyxvQkFBQUE7QUFDcEIsbUJBQ0U3K0MsS0FBS213QyxNQUFNMzhCLEtBQUtyQyxJQUFLblIsS0FBS3FOLEdBQUdyTixLQUFLb1IsR0FBR3BSLEtBQUs0K0MsVUFBVTUrQyxLQUFLaXlDLE9BQU85ekIsRUFBQUEsS0FDaEUsQ0FBQTtVQUVKLEVBQUEsR0FFQSxFQUFBM1gsS0FBQSxxQkFBQW5ELE9BS0EsU0FBa0I4TixJQUFBQTtBQUNoQm5SLGlCQUFLbXdDLE1BQU11YSxrQkFBa0IxcUQsS0FBS3FOLEdBQUdyTixLQUFLb1IsR0FBR0QsRUFBQUE7VUFDL0MsRUFBQSxHQUVBLEVBQUEzSyxLQUFBLFVBQUFuRCxPQU1BLFNBQU84TixJQUFBQTtBQUNMLGdCQUFNZ04sS0FBU25lLEtBQUs2K0Msb0JBQUFBO0FBQ3BCNytDLGlCQUFLbXdDLE1BQU00WCxPQUFPNTJDLElBQUtuUixLQUFLNCtDLFVBQVU1K0MsS0FBS2l5QyxPQUFPOXpCLEVBQUFBO1VBQ3BELEVBQUEsR0FFQSxFQUFBM1gsS0FBQSxtQkFBQW5ELE9BT0EsU0FBZ0J1YixJQUFBQTtBQUNkLGdCQUFNb2tDLEtBQU0sQ0FBQTtBQVlaLG1CQVZJaGpELEtBQUt5bkQsWUFBWWlLLFFBQUFBLEtBQ2ZyVyxHQUFZcjdDLEtBQUt5bkQsWUFBWWpELFFBQUFBLEdBQVc1bEMsRUFBQUEsS0FDMUNva0MsR0FBSW44QyxLQUFLLEVBQUU4cUQsUUFBUTN4RCxLQUFLcUgsSUFBSXVxRCxTQUFTLEVBQUEsQ0FBQSxHQUlyQ3ZXLEdBQVlyN0MsS0FBS213QyxNQUFNeVgsYUFBYWhwQyxFQUFBQSxLQUN0Q29rQyxHQUFJbjhDLEtBQUssRUFBRThxRCxRQUFRM3hELEtBQUtxSCxHQUFBQSxDQUFBQSxHQUduQjI3QztVQUNULEVBQUEsR0FFQSxFQUFBeDhDLEtBQUEscUJBQUFuRCxPQU1BLFNBQWtCMkssSUFBQUE7QUFDaEIsbUJBQ0VoTyxLQUFLbXdDLE1BQU0rRCxPQUFPbG1DLEdBQUl3dEMsU0FDdEJ4N0MsS0FBS213QyxNQUFNK0QsT0FBT2wwQyxLQUFLbXdDLE1BQU0rQyxRQUFRbGxDLEdBQUlrbUMsUUFDekNsMEMsS0FBS213QyxNQUFNZ0UsTUFBTW5tQyxHQUFJeXRDLFVBQ3JCejdDLEtBQUttd0MsTUFBTWdFLE1BQU1uMEMsS0FBS213QyxNQUFNZ0QsU0FBU25sQyxHQUFJbW1DO1VBRTdDLEVBQUEsR0FFQSxFQUFBM3RDLEtBQUEsZ0NBQUFuRCxPQU1BLFNBQTZCMkssSUFBQUE7QUFDM0IsbUJBQ0VoTyxLQUFLbXdDLE1BQU15WCxZQUFZMVQsT0FBT2xtQyxHQUFJd3RDLFNBQ2xDeDdDLEtBQUttd0MsTUFBTXlYLFlBQVlwTSxRQUFReHRDLEdBQUlrbUMsUUFDbkNsMEMsS0FBS213QyxNQUFNeVgsWUFBWXpULE1BQU1ubUMsR0FBSXl0QyxVQUNqQ3o3QyxLQUFLbXdDLE1BQU15WCxZQUFZbk0sU0FBU3p0QyxHQUFJbW1DO1VBRXhDLEVBQUEsQ0FBQSxHQUVBLENBQUEsRUFBQTN0QyxLQUFBLGdCQUFBbkQsT0FuakJBLFNBQW9Cc2lELElBQUFBO0FBQ2xCLG1CQUFPLEtBQUtBLE1BQVdBLE1BQVc7VUFDcEMsRUFBQSxHQUVBLEVBQUFuL0MsS0FBQSx5QkFBQW5ELE9BTUEsU0FBNkJ3dUQsSUFBQUE7QUFDM0IsbUJBQUEsV0FBT0EsTUFBbUMsYUFBWEEsTUFBa0MsZUFBWEE7VUFDeEQsRUFBQSxHQUVBLEVBQUFyckQsS0FBQSxzQkFBQW5ELE9BWUEsU0FBMEJ5dUQsSUFBZUMsSUFBWUMsSUFBQUE7QUFBVyxnQkFBQXhoQjtBQUM5RCxnQkFBQSxXQUFJd2hCLElBQUo7QUFFQSxrQkFBTXBZLEtBQVFrWSxHQUFjbFk7QUFHNUIsa0JBQUEsV0FDRW1ZLE1BQUFBLFdBQ0FBLEdBQVduWSxTQUNYQSxPQUFVbVksR0FBV25ZO0FBRXJCLHNCQUFNLElBQUk1UixNQUNSLDBEQUFBO0FBTUosa0JBRG1CLFlBQUEsT0FBVjRSLE1BQXdDLFlBQUEsT0FBVkEsTUFBK0IsTUFBVEEsSUFDN0Q7QUFFQSxvQkFBTXFZLEtBQVdELEdBQVUxdkQsSUFBSXMzQyxFQUFBQTtBQUFBQSwyQkFFM0JxWSxHQUFTdE0sV0FBQUEsV0FBeUJvTSxHQUFXcE0sWUFDMUNtSyxHQUFLZSxhQUFhb0IsR0FBU3RNLE9BQUFBLE1BQzlCeGQsUUFBUS9uQyxNQUNOLDRFQUNFNnhELEdBQVN0TSxPQUFBQSxHQUVic00sR0FBU3RNLFVBQUFBO0FBS2Isb0JBQU11TSxLQUFpQnBFLEdBQUF0ZCxLQUFBMmhCLEdBQTJCSixFQUFBQSxDQUFBQSxFQUFXanhELEtBQUEwdkMsSUFDM0QsU0FBQ3hHLElBQUFBO0FBQUMseUJBQXNCLFFBQWpCK25CLEdBQVcvbkIsRUFBQUE7Z0JBQVUsQ0FBQTtBQUc5QmtvQixnQkFBQUEsR0FBZXJyRCxLQUFLLE1BQUEsR0FDcEJ1ckQsR0FBdUJGLElBQWdCSixJQUFlRyxFQUFBQSxHQUl0REgsR0FBYzNtQixRQUFRaUcsR0FBVzBnQixHQUFjM21CLEtBQUFBO2NBeEJ6QjtZQWpCYztVQTBDdEMsRUFBQSxHQUVBLEVBQUEza0MsS0FBQSxnQkFBQW5ELE9BV0EsU0FDRXl1RCxJQUNBQyxJQUFBQTtBQUlBLGdCQUhBTSxLQUFhcHhELFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUEsQ0FBQSxLQUFBQSxVQUFBLENBQUEsR0FDYmd2RCxLQUFhaHZELFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUEsQ0FBQSxJQUFBQSxVQUFBLENBQUEsSUFBRyxDQUFBLEdBQ2hCK3dELEtBQVMvd0QsVUFBQXlELFNBQUF6RCxJQUFBQSxVQUFBQSxDQUFBQSxJQUFBQTtBQXlDVCxnQkF0Q0FteEQsR0FEZSxDQUFDLFNBQVMsU0FBUyxRQUFBLEdBQ0hOLElBQWVDLElBQVlNLEVBQUFBLEdBRTFEdkMsR0FBS1MsVUFBVXdCLEVBQUFBLEdBQUFBLFdBRVhELEdBQWNuTSxZQUNYbUssR0FBS2UsYUFBYWlCLEdBQWNuTSxPQUFBQSxNQUNuQ3hkLFFBQVEvbkMsTUFDTiw0RUFDRTB4RCxHQUFjbk0sT0FBQUEsR0FFbEJtTSxHQUFjbk0sVUFBQUEsVUFBVTltQyxXQUl4Qmt6QyxHQUFXcE0sWUFDUm1LLEdBQUtlLGFBQWFrQixHQUFXcE0sT0FBQUEsTUFDaEN4ZCxRQUFRL25DLE1BQ04sNEVBQ0UyeEQsR0FBV3BNLE9BQUFBLEdBRWZvTSxHQUFXcE0sVUFBQUEsVUFLYm9NLEdBQVdwSixtQkFBQUEsQ0FDVm1ILEdBQUt3QyxzQkFBc0JQLEdBQVdwSixnQkFBZ0JpRSxnQkFBQUEsS0FFdkR6a0IsUUFBUS9uQyxNQUNOLHNEQUNFMnhELEdBQVdwSixnQkFBZ0JpRSxnQkFBQUEsR0FLakMyRixHQUFhVCxJQUFlQyxJQUFZLFVBQVU5QixFQUFBQSxHQUFBQSxXQUc5QzhCLEdBQVc1bUIsU0FBNEMsU0FBckI0bUIsR0FBVzVtQixPQUFnQjtBQUMvRCxrQkFBTXFuQixLQUFjcGhCLEdBQVcyZ0IsR0FBVzVtQixLQUFBQTtBQUMxQ3NuQixpQkFBY1gsR0FBYzNtQixPQUFPcW5CLEVBQUFBO1lBQ3BDO0FBQUEsdUJBQVVILE1BQStDLFNBQXJCTixHQUFXNW1CLFVBQzlDMm1CLEdBQWMzbUIsUUFBUStrQixHQUFhRCxHQUFjOWtCLEtBQUFBO0FBQUFBLHVCQUkvQzRtQixHQUFXNWdCLFNBQTRDLFNBQXJCNGdCLEdBQVc1Z0IsVUFDZixhQUFBLE9BQXJCNGdCLEdBQVc1Z0IsU0FDcEIyZ0IsR0FBYzNnQixNQUFNOWpDLElBQUkwa0QsR0FBVzVnQixPQUNuQzJnQixHQUFjM2dCLE1BQU0vL0IsSUFBSTJnRCxHQUFXNWdCLFVBQUFBLFdBR2pDNGdCLEdBQVc1Z0IsTUFBTTlqQyxLQUNhLGFBQUEsT0FBdkIwa0QsR0FBVzVnQixNQUFNOWpDLE1BRXhCeWtELEdBQWMzZ0IsTUFBTTlqQyxJQUFJMGtELEdBQVc1Z0IsTUFBTTlqQyxJQUFBQSxXQUd6QzBrRCxHQUFXNWdCLE1BQU0vL0IsS0FDYSxhQUFBLE9BQXZCMmdELEdBQVc1Z0IsTUFBTS8vQixNQUV4QjBnRCxHQUFjM2dCLE1BQU0vL0IsSUFBSTJnRCxHQUFXNWdCLE1BQU0vL0IsTUFBQUEsU0FLM0NpaEQsTUFBOEMsU0FBcEJOLEdBQVdoVCxTQUN2QytTLEdBQWMvUyxPQUFPbVIsR0FBYUQsR0FBY2xSLElBQUFBLElBR2xEK1EsR0FBS3NCLG1CQUFtQlUsSUFBZUMsSUFBWUMsRUFBQUEsR0FBQUEsV0FHL0NELEdBQVc5TixXQUNic08sR0FDRVQsR0FBYzdOLFNBQ2Q4TixHQUFXOU4sU0FDWCxTQUNBZ00sR0FBY2hNLE9BQUFBO1VBR3BCLEVBQUEsR0FBQyxFQUFBejlDLEtBQUEsYUFBQW5ELE9BaVpELFNBQWlCd0ksSUFBU3hFLElBQUFBO0FBQ3hCLGdCQUFBLFdBQUl3RSxHQUFRNm1ELFFBQXNCN21ELEdBQVE2bUQsUUFBUSxHQUFHO0FBQ25ELGtCQUFJQyxLQUFRO0FBQUEseUJBQ1J0ckQsT0FDRnNyRCxLQUFRLGtCQUFrQnRyRCxLQUU1QjhnQyxRQUFRL25DLE1BQ04sdUNBQXVDdXlELEtBQVEsd0JBQy9DQyxFQUFBQSxHQUVGL21ELEdBQVE2bUQsT0FBTztZQUNqQjtVQUNGLEVBQUEsQ0FBQSxDQUFBLEdBQUM1QztRQUFBLEVBN3lCTztBQUFBLGlCQUFBLEdBQUEvNkMsSUFBQXFhLElBQUE7QUFBQSxjQUFBeGdCLEtBQUEsV0FBQSxNQUFBLEdBQUFtRyxFQUFBLEtBQUFBLEdBQUEsWUFBQTtBQUFBLGNBQUEsQ0FBQW5HLElBQUE7QUFBQSxnQkFBQSxHQUFBbUcsRUFBQSxNQUFBbkcsS0FBQSxTQUFBbUcsSUFBQXFhLElBQUE7QUFBQSxrQkFBQXhnQjtBQUFBLGtCQUFBLENBQUFtRztBQUFBO0FBQUEsa0JBQUEsWUFBQSxPQUFBQTtBQUFBLHVCQUFBLEdBQUFBLElBQUFxYSxFQUFBO0FBQUEsa0JBQUFqQyxLQUFBLEdBQUF2ZSxLQUFBLE9BQUEsVUFBQSxTQUFBLEtBQUFtRyxFQUFBLENBQUEsRUFBQSxLQUFBbkcsSUFBQSxHQUFBLEVBQUE7QUFBQSwyQkFBQXVlLE1BQUFwWSxHQUFBLGdCQUFBb1ksS0FBQXBZLEdBQUEsWUFBQTtBQUFBLGtCQUFBLFVBQUFvWSxNQUFBLFVBQUFBO0FBQUEsdUJBQUEsR0FBQXBZLEVBQUE7QUFBQSxrQkFBQSxnQkFBQW9ZLE1BQUEsMkNBQUEsS0FBQUEsRUFBQTtBQUFBLHVCQUFBLEdBQUFwWSxJQUFBcWEsRUFBQTtZQUFBLEVBQUFyYSxFQUFBLE1BQUFxYSxNQUFBcmEsTUFBQSxZQUFBLE9BQUFBLEdBQUEsUUFBQTtBQUFBLGNBQUFuRyxPQUFBbUcsS0FBQW5HO0FBQUEsa0JBQUF1ZSxLQUFBLEdBQUE3ZixLQUFBLFdBQUE7Y0FBQTtBQUFBLHFCQUFBLEVBQUEsR0FBQUEsSUFBQSxHQUFBLFdBQUE7QUFBQSx1QkFBQTZmLE1BQUFwWSxHQUFBLFNBQUEsRUFBQSxNQUFBLEtBQUEsSUFBQSxFQUFBLE1BQUEsT0FBQSxPQUFBQSxHQUFBb1ksSUFBQSxFQUFBO2NBQUEsR0FBQSxHQUFBLFNBQUFwWSxJQUFBO0FBQUEsc0JBQUFBO2NBQUEsR0FBQSxHQUFBekgsR0FBQTtZQUFBO0FBQUEsa0JBQUEsSUFBQSxVQUFBLHVJQUFBO1VBQUE7QUFBQSxjQUFBK0QsSUFBQXNELEtBQUEsTUFBQTFMLEtBQUE7QUFBQSxpQkFBQSxFQUFBLEdBQUEsV0FBQTtBQUFBLFlBQUEyRixLQUFBQSxHQUFBLEtBQUFtRyxFQUFBO1VBQUEsR0FBQSxHQUFBLFdBQUE7QUFBQSxnQkFBQUEsS0FBQW5HLEdBQUEsS0FBQTtBQUFBLG1CQUFBK0YsS0FBQUksR0FBQSxNQUFBQTtVQUFBLEdBQUEsR0FBQSxTQUFBQSxJQUFBO0FBQUEsWUFBQTlMLEtBQUEsTUFBQW9JLEtBQUEwRDtVQUFBLEdBQUEsR0FBQSxXQUFBO0FBQUEsZ0JBQUE7QUFBQSxjQUFBSixNQUFBLFFBQUEvRixHQUFBLFVBQUFBLEdBQUEsT0FBQTtZQUFBLFVBQUE7QUFBQSxrQkFBQTNGO0FBQUEsc0JBQUFvSTtZQUFBO1VBQUEsRUFBQTtRQUFBO0FBQUEsaUJBQUEsR0FBQTBELElBQUFxYSxJQUFBO0FBQUEsV0FBQSxRQUFBQSxNQUFBQSxLQUFBcmEsR0FBQSxZQUFBcWEsS0FBQXJhLEdBQUE7QUFBQSxtQkFBQW5HLEtBQUEsR0FBQXVlLEtBQUEsSUFBQSxNQUFBaUMsRUFBQSxHQUFBeGdCLEtBQUF3Z0IsSUFBQXhnQjtBQUFBLFlBQUF1ZSxHQUFBdmUsRUFBQSxJQUFBbUcsR0FBQW5HLEVBQUE7QUFBQSxpQkFBQXVlO1FBQUE7QUM1QlYsWUFHTTBsQyxLQUFZLFdBQUE7QUFPaEIsbUJBQUFBLEdBQVkxZCxJQUFNZCxJQUFReWUsSUFBUUMsSUFBQUE7QUFBYyxnQkFBQW5rQyxJQUFBK1AsS0FBQTMrQjtBQTBJOUMsZ0JBMUk4QzJqQixHQUFBQSxNQUFBa3ZDLEVBQUFBLEdBQzlDN3lELEtBQUttMUMsT0FBT0EsSUFDWm4xQyxLQUFLcTBDLFNBQVNBLElBQ2RyMEMsS0FBSzh5RCxTQUFTQSxJQUNkOXlELEtBQUsreUQsZUFBZUEsSUFHcEIveUQsS0FBS20xQyxLQUFLNmQsVUFBVUMsYUFBYTlMLEdBQUF2NEIsS0FBSTV1QixLQUFDMGEsTUFBQUEsRUFBTTVaLEtBQUE4dEIsSUFBTTV1QixJQUFBQSxHQUVsREEsS0FBS2t6RCxpQkFBaUIsRUFDcEIzc0IsS0FBSyxTQUFDbHhCLElBQU95ZSxJQUFBQTtBQUNYNkssY0FBQUEsR0FBSzRILElBQUl6UyxHQUFPcS9CLEtBQUFBO1lBQ2pCLEdBQ0RoN0IsUUFBUSxTQUFDOWlCLElBQU95ZSxJQUFBQTtBQUNkNkssY0FBQUEsR0FBS3hHLE9BQU9yRSxHQUFPcS9CLE9BQU9yL0IsR0FBT2hxQixNQUFNZ3FCLEdBQU9zL0IsT0FBQUE7WUFDL0MsR0FDRHBzQixRQUFRLFNBQUMzeEIsSUFBT3llLElBQUFBO0FBQ2Q2SyxjQUFBQSxHQUFLcUksT0FBT2xULEdBQU9xL0IsS0FBQUE7WUFDckIsRUFBQSxHQUdGbnpELEtBQUt1NUMsaUJBQWlCLEVBQ3BCdU8sYUFBYSxHQUNieUgscUJBQUFBLFFBQ0EyQixhQUFBQSxRQUNBL2xCLE9BQU8sRUFDTDRHLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQ1RELFFBQVEsV0FDUkQsWUFBWSxVQUFBLEdBRWRHLE9BQU8sRUFDTEYsUUFBUSxXQUNSRCxZQUFZLFVBQUEsRUFBQSxHQUdoQjZULFNBQUFBLFFBQ0F4VSxPQUFPLEVBQ0w5akMsR0FBQUEsT0FDQStELEdBQUFBLE1BQUcsR0FFTDJ0QyxNQUFNLEVBQ0o1VCxPQUFPLFdBQ1BoMEIsTUFBTSxJQUNONHVDLE1BQU0sU0FDTmpVLFlBQVksUUFDWnFULGFBQWEsR0FDYkYsYUFBYSxXQUNiSCxPQUFPLFVBQ1BwRCxTQUFTLEdBQ1R2QyxPQUFBQSxPQUNBNUIsTUFBTSxFQUNKcEIsS0FBSyxPQUFBLEdBRVBrWCxVQUFVLEVBQ1JsWCxLQUFLLGNBQUEsR0FFUHFCLE1BQU0sRUFDSnJCLEtBQUssU0FBQSxHQUVQc0IsTUFBTSxFQUNKdEIsS0FBSyxJQUNMaGxDLE1BQU0sSUFDTjR1QyxNQUFNLGFBQ05yRSxTQUFTLEVBQUEsRUFBQSxHQUdiOUgsT0FBQUEsUUFDQW1YLFFBQUFBLE9BQ0F0RCxNQUFNLEVBQ0oxSCxNQUFNLGVBQ04ySCxNQUFBQSxRQUNBdjJDLE1BQU0sSUFDTmcwQixPQUFPLFVBQUEsR0FFVCtFLE9BQUFBLFFBQ0FrYixjQUFjLEVBRVpqWCxLQUFLLEdBQ0xxSCxPQUFPLEdBQ1BDLFFBQVEsR0FDUnZILE1BQU0sRUFBQSxHQUVSakUsT0FBQUEsUUFDQStWLG9CQUFBQSxNQUNBc04sT0FBQUEsUUFDQTVMLFFBQVEsRUFDTnZULEtBQUssR0FDTHFILE9BQU8sR0FDUEMsUUFBUSxHQUNSdkgsTUFBTSxFQUFBLEdBRVJ3ZSxNQUFNLEdBQ04xQixTQUFBQSxNQUNBL00sU0FBUyxFQUNQdjJDLEtBQUssSUFDTEQsS0FBSyxJQUNMd2lDLE9BQU8sRUFDTHRELFNBQUFBLE9BQ0FqL0IsS0FBSyxJQUNMRCxLQUFLLElBQ0wwMkMsWUFBWSxJQUNaRCxlQUFlLEVBQUEsR0FFakJxTix1QkFBdUIsU0FBVTdqRCxJQUFLRCxJQUFLNmpELElBQU9qdUQsSUFBQUE7QUFDaEQsa0JBQUlvSyxPQUFRQztBQUNWLHVCQUFPO0FBRVAsa0JBQU0rdEIsS0FBUSxLQUFLaHVCLEtBQU1DO0FBQ3pCLHFCQUFPL04sS0FBSzhOLElBQUksSUFBSXBLLEtBQVFxSyxNQUFPK3RCLEVBQUFBO1lBRXZDLEVBQUEsR0FFRnVzQixRQUFRLEVBQ05yYixTQUFBQSxPQUNBeEIsT0FBTyxtQkFDUGgwQixNQUFNLElBQ045SixHQUFHLEdBQ0grRCxHQUFHLEVBQUEsR0FFTCsrQixPQUFPLFdBQ1B3WSxpQkFBaUIsRUFDZkgsY0FBQUEsT0FDQWdDLGNBQWMsR0FDZG1CLGVBQUFBLE1BQ0FMLGNBQUFBLE9BQ0E4RCxvQkFBQUEsT0FDQXhDLGtCQUFrQixTQUFBLEdBRXBCejFDLE1BQU0sSUFDTnc2QixPQUFBQSxRQUNBdHVDLE9BQUFBLFFBQ0FnSyxHQUFBQSxRQUNBK0QsR0FBQUEsT0FBR3lOLEdBSUQ3ZSxLQUFLdTVDLGVBQWVtWixRQUFRO0FBQzlCLG9CQUFNO0FBR1IxeUQsaUJBQUs2TCxVQUFVcWtELEdBQWFsd0QsS0FBS3U1QyxjQUFBQSxHQUVqQ3Y1QyxLQUFLdXpELG1CQUFBQTtVQUNQO0FBdWFDLGlCQXJhRDFsQyxHQUFBZ2xDLElBQUEsQ0FBQSxFQUFBcnNELEtBQUEsc0JBQUFuRCxPQUdBLFdBQUE7QUFBcUIsZ0JBQUF1c0MsSUFBQVEsSUFBQXJNLEtBQUEvakM7QUFFbkJBLGlCQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsZ0JBQWdCZ3lDLEdBQUF2WCxLQUFJNXZDLEtBQUN5ekQsT0FBQUEsRUFBTzN5RCxLQUFBOHVDLElBQU01dkMsSUFBQUEsQ0FBQUEsR0FDdkRBLEtBQUttMUMsS0FBS3FlLFFBQVFyK0MsR0FBRyxXQUFXZ3lDLEdBQUEvVyxLQUFJcHdDLEtBQUN5ekQsT0FBQUEsRUFBTzN5RCxLQUFBc3ZDLElBQU1wd0MsSUFBQUEsQ0FBQUEsR0FDbERBLEtBQUttMUMsS0FBS3FlLFFBQVFyK0MsR0FBRyxXQUFXLFdBQUE7QUFDOUJ6RixpQkFBUXEwQixHQUFLbXZCLGdCQUFnQixTQUFDbi9CLElBQVUxZSxJQUFBQTtBQUNsQzB1QixnQkFBQUEsR0FBS29SLEtBQUtyckMsS0FBS3NpQyxTQUFPckksR0FBS29SLEtBQUtyckMsS0FBS3NpQyxNQUFNNTJCLElBQUlILElBQU8wZSxFQUFBQTtjQUM1RCxDQUFBLEdBQUEsT0FDT2dRLEdBQUtvUixLQUFLNmQsVUFBVUMsWUFBQUEsT0FDcEJsdkIsR0FBS212QixlQUFlM3NCLEtBQUFBLE9BQ3BCeEMsR0FBS212QixlQUFlLzZCLFFBQUFBLE9BQ3BCNEwsR0FBS212QixlQUFlbHNCLFFBQUFBLE9BQ3BCakQsR0FBS212QjtZQUNkLENBQUE7VUFDRixFQUFBLEdBRUEsRUFBQTFzRCxLQUFBLGNBQUFuRCxPQUlBLFNBQVd3SSxJQUFBQTtBQUNULGdCQUFBLFdBQUlBLElBQXVCO0FBc0J6QixrQkFyQkFpa0QsR0FBS1ksYUFBYTF3RCxLQUFLNkwsU0FBU0EsRUFBQUEsR0FBQUEsV0FJNUJBLEdBQVE4NUMsWUFFUitOLEdBQWE3bkQsR0FBUTg1QyxPQUFBQSxLQUFBQSxDQUNwQmdPLEdBQWdCOW5ELEdBQVE4NUMsT0FBQUEsS0FDekI5NUMsR0FBUTg1QyxVQUFVLEtBQ2xCOTVDLEdBQVE4NUMsVUFBVSxJQUVsQnhkLFFBQVEvbkMsTUFDTiw0RUFDRXlMLEdBQVE4NUMsT0FBQUEsSUFHWjNsRCxLQUFLNkwsUUFBUTg1QyxVQUFVOTVDLEdBQVE4NUMsVUFBQUEsV0FLL0I5NUMsR0FBUXNrQztBQUNWLHlCQUFXd2hCLE1BQVUzeEQsS0FBS20xQyxLQUFLL0k7QUFDekJocUMseUJBQU94QixVQUFVSCxlQUFlSyxLQUFLZCxLQUFLbTFDLEtBQUsvSSxPQUFPdWxCLEVBQUFBLEtBQ3hEM3hELEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUEsRUFBUWIsWUFBQUE7QUFNOUIsa0JBQUEsV0FDU2psRCxHQUFRa3pDLFFBQUFBLFdBQ1JsekMsR0FBUW0yQyxtQkFBQUEsV0FDUm4yQyxHQUFRczJDO0FBRWYseUJBQUF5UixLQUFBQSxHQUFBaEcsS0FBcUJpRyxHQUFZN3pELEtBQUttMUMsS0FBSy9JLEtBQUFBLEdBQU13bkIsS0FBQWhHLEdBQUFscEQsUUFBQWt2RCxNQUFFO0FBQTlDLHNCQUFNakMsS0FBTS9ELEdBQUFnRyxFQUFBQTtBQUNmNXpELHVCQUFLbTFDLEtBQUsvSSxNQUFNdWxCLEVBQUFBLEVBQVFmLGtCQUFBQSxHQUN4QjV3RCxLQUFLbTFDLEtBQUsvSSxNQUFNdWxCLEVBQUFBLEVBQVF2SCxhQUFBQTtnQkFDMUI7QUFJRixrQkFBQSxXQUFJditDLEdBQVFzTDtBQUNWLHlCQUFXdzZDLE1BQVUzeEQsS0FBS20xQyxLQUFLL0k7QUFDekJocUMseUJBQU94QixVQUFVSCxlQUFlSyxLQUFLZCxLQUFLbTFDLEtBQUsvSSxPQUFPdWxCLEVBQUFBLEtBQ3hEM3hELEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUEsRUFBUXZILGFBQUFBO0FBQUFBLHlCQU0xQnYrQyxHQUFRa2xELFVBQUFBLFdBQXdCbGxELEdBQVFtbEQsV0FDMUNoeEQsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLGNBQUE7WUFFM0I7VUFDRixFQUFBLEdBRUEsRUFBQXZQLEtBQUEsV0FBQW5ELE9BT0EsU0FBUStvQyxJQUFBQTtBQUEwQixnQkFBbkIwbkIsS0FBUzd5RCxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsS0FBQUEsVUFBQSxDQUFBLEdBQ2hCOHlELEtBQWUvekQsS0FBS20xQyxLQUFLcnJDLEtBQUtzaUM7QUFFcEMsZ0JBQUk0bkIsRUFBY0EsZUFBQyxNQUFNNW5CLEVBQUFBO0FBQ3ZCcHNDLG1CQUFLbTFDLEtBQUtyckMsS0FBS3NpQyxRQUFRQTtxQkFDZG5kLEdBQWNtZCxFQUFBQTtBQUN2QnBzQyxtQkFBS20xQyxLQUFLcnJDLEtBQUtzaUMsUUFBUSxJQUFJNm5CLEVBQU9BLFdBQ2xDajBELEtBQUttMUMsS0FBS3JyQyxLQUFLc2lDLE1BQU03RixJQUFJNkYsRUFBQUE7aUJBQ3BCO0FBQUEsa0JBQUtBO0FBR1Ysc0JBQU0sSUFBSXJvQyxVQUFVLDJCQUFBO0FBRnBCL0QsbUJBQUttMUMsS0FBS3JyQyxLQUFLc2lDLFFBQVEsSUFBSTZuQixFQUFPQTtZQUdwQztBQVlBLGdCQVZJRixNQUVGcmtELEdBQVExUCxLQUFLa3pELGdCQUFnQixTQUFVbi9CLElBQVUxZSxJQUFBQTtBQUMvQzArQyxjQUFBQSxHQUFhditDLElBQUlILElBQU8wZSxFQUFBQTtZQUMxQixDQUFBLEdBSUYvekIsS0FBS20xQyxLQUFLL0ksUUFBUSxDQUFBLEdBRWRwc0MsS0FBS20xQyxLQUFLcnJDLEtBQUtzaUMsT0FBTztBQUV4QixrQkFBTThuQixLQUFLbDBEO0FBQ1gwUCxpQkFBUTFQLEtBQUtrekQsZ0JBQWdCLFNBQVVuL0IsSUFBVTFlLElBQUFBO0FBQy9DNitDLGdCQUFBQSxHQUFHL2UsS0FBS3JyQyxLQUFLc2lDLE1BQU1qM0IsR0FBR0UsSUFBTzBlLEVBQUFBO2NBQy9CLENBQUE7QUFHQSxrQkFBTW9nQyxLQUFNbjBELEtBQUttMUMsS0FBS3JyQyxLQUFLc2lDLE1BQU1nb0IsT0FBQUE7QUFDakNwMEQsbUJBQUt1bUMsSUFBSTR0QixJQUFBQSxJQUFLO1lBQ2hCO0FBQUEsc0JBRUlMLE1BQ0Y5ekQsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLGNBQUE7VUFFM0IsRUFBQSxHQUVBLEVBQUF2UCxLQUFBLE9BQUFuRCxPQU9BLFNBQUk4d0QsSUFBQUE7QUFHRixxQkFGSTlzRCxJQURHeXNELEtBQVM3eUQsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLEtBQUFBLFVBQUEsQ0FBQSxHQUVWb3pELEtBQVcsQ0FBQSxHQUNSemxELEtBQUksR0FBR0EsS0FBSXVsRCxHQUFJenZELFFBQVFrSyxNQUFLO0FBQ25DdkgsY0FBQUEsS0FBSzhzRCxHQUFJdmxELEVBQUFBO0FBQ1Qsa0JBQU11YixLQUFhbnFCLEtBQUttMUMsS0FBS3JyQyxLQUFLc2lDLE1BQU05cEMsSUFBSStFLEVBQUFBLEdBQ3RDc3lCLEtBQU8zNUIsS0FBSzBhLE9BQU95UCxFQUFBQTtBQUN6QmtxQyxjQUFBQSxHQUFTeHRELEtBQUs4eUIsRUFBQUEsR0FDZDM1QixLQUFLbTFDLEtBQUsvSSxNQUFNL2tDLEVBQUFBLElBQU1zeUI7WUFDeEI7QUFFQTM1QixpQkFBSyt5RCxhQUFhdUIsa0JBQWtCRCxFQUFBQSxHQUFBQSxVQUVoQ1AsTUFDRjl6RCxLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssY0FBQTtVQUUzQixFQUFBLEdBRUEsRUFBQXZQLEtBQUEsVUFBQW5ELE9BUUEsU0FBTzh3RCxJQUFLSSxJQUFhbkIsSUFBQUE7QUFHdkIscUJBRk1obkIsS0FBUXBzQyxLQUFLbTFDLEtBQUsvSSxPQUNwQm9vQixLQUFBQSxPQUNLNWxELEtBQUksR0FBR0EsS0FBSXVsRCxHQUFJenZELFFBQVFrSyxNQUFLO0FBQ25DLGtCQUFNdkgsS0FBSzhzRCxHQUFJdmxELEVBQUFBLEdBQ1grcUIsS0FBT3lTLEdBQU0va0MsRUFBQUEsR0FDWHlDLEtBQU95cUQsR0FBWTNsRCxFQUFBQTtBQUFBQSx5QkFDckIrcUIsS0FFRUEsR0FBS3VuQixXQUFXcDNDLEVBQUFBLE1BQ2xCMHFELEtBQUFBLFNBR0ZBLEtBQUFBLE1BRUE3NkIsS0FBTzM1QixLQUFLMGEsT0FBTzVRLEVBQUFBLEdBQ25Cc2lDLEdBQU0va0MsRUFBQUEsSUFBTXN5QjtZQUVoQjtBQUVLNjZCLFlBQUFBLE1BQUFBLFdBQWVwQixPQUlsQm9CLEtBQWNDLEdBQUFGLEVBQUFBLEVBQVd6ekQsS0FBWHl6RCxJQUFpQixTQUFVRyxJQUFVOW1ELElBQUFBO0FBQ2pELGtCQUFNK21ELEtBQVd2QixHQUFReGxELEVBQUFBO0FBQ3pCLHFCQUFPK21ELE1BQVlBLEdBQVNyQixVQUFVb0IsR0FBU3BCO1lBQ2pELENBQUEsSUFBQSxTQUdFa0IsS0FDRngwRCxLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssY0FBQSxJQUV2Qi9WLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxjQUFBO1VBRTNCLEVBQUEsR0FFQSxFQUFBdlAsS0FBQSxVQUFBbkQsT0FNQSxTQUFPOHdELElBQUFBO0FBR0wscUJBRk0vbkIsS0FBUXBzQyxLQUFLbTFDLEtBQUsvSSxPQUVmeDlCLEtBQUksR0FBR0EsS0FBSXVsRCxHQUFJenZELFFBQVFrSyxNQUFLO0FBQUEscUJBRTVCdzlCLEdBREkrbkIsR0FBSXZsRCxFQUFBQSxDQUFBQTtZQUVqQjtBQUVBNU8saUJBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxjQUFBO1VBQ3pCLEVBQUEsR0FFQSxFQUFBdlAsS0FBQSxVQUFBbkQsT0FPQSxTQUFPOG1CLElBQUFBO0FBQ0wsbUJBQU8sS0FEMEJscEIsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLElBQUFBLFVBQUEsQ0FBQSxJQUFHNnVELElBRWxDM2xDLElBQ0FucUIsS0FBS20xQyxNQUNMbjFDLEtBQUtxMEMsUUFDTHIwQyxLQUFLOHlELFFBQ0w5eUQsS0FBSzZMLFNBQ0w3TCxLQUFLdTVDLGNBQUFBO1VBRVQsRUFBQSxHQUVBLEVBQUEveUMsS0FBQSxXQUFBbkQsT0FJQSxXQUFBO0FBQWdDLGdCQUFBaWhDLEtBQUF0a0MsTUFBeEI0MEQsS0FBYzN6RCxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsS0FBQUEsVUFBQSxDQUFBO0FBQ3BCeU8sZUFBUTFQLEtBQUttMUMsS0FBSy9JLE9BQU8sU0FBQ3pTLElBQU1nNEIsSUFBQUE7QUFDOUIsa0JBQU03bkQsS0FBT3c2QixHQUFLNlEsS0FBS3JyQyxLQUFLc2lDLE1BQU05cEMsSUFBSXF2RCxFQUFBQTtBQUFBQSx5QkFDbEM3bkQsT0FBQUEsU0FDRThxRCxNQUNGajdCLEdBQUt1bkIsV0FBVyxFQUFFN3pDLEdBQUcsTUFBTStELEdBQUcsS0FBQSxDQUFBLEdBRWhDdW9CLEdBQUt1bkIsV0FBVyxFQUFFL1AsT0FBQUEsTUFBTyxDQUFBLEdBQ3pCeFgsR0FBS3VuQixXQUFXcDNDLEVBQUFBO1lBRXBCLENBQUE7VUFDRixFQUFBLEdBRUEsRUFBQXRELEtBQUEsZ0JBQUFuRCxPQU1BLFNBQWE4d0QsSUFBQUE7QUFDWCxnQkFBTVUsS0FBWSxDQUFBO0FBQ2xCLGdCQUFBLFdBQUlWLElBQUFBO0FBQ0Ysa0JBQUEsU0FBSWxsQyxHQUFja2xDLEVBQUFBLEdBQUFBO0FBQ2hCLHlCQUFTdmxELEtBQUksR0FBR0EsS0FBSXVsRCxHQUFJenZELFFBQVFrSztBQUM5QixzQkFBQSxXQUFJNU8sS0FBS20xQyxLQUFLL0ksTUFBTStuQixHQUFJdmxELEVBQUFBLENBQUFBLEdBQW1CO0FBQ3pDLHdCQUFNK3FCLEtBQU8zNUIsS0FBS20xQyxLQUFLL0ksTUFBTStuQixHQUFJdmxELEVBQUFBLENBQUFBO0FBQ2pDaW1ELG9CQUFBQSxHQUFVVixHQUFJdmxELEVBQUFBLENBQUFBLElBQU0sRUFDbEJ2QixHQUFHMU4sS0FBS3ExQixNQUFNMkUsR0FBS3RzQixDQUFBQSxHQUNuQitELEdBQUd6UixLQUFLcTFCLE1BQU0yRSxHQUFLdm9CLENBQUFBLEVBQUFBO2tCQUV2QjtjQUFBLFdBR0YsV0FBSXBSLEtBQUttMUMsS0FBSy9JLE1BQU0rbkIsRUFBQUEsR0FBb0I7QUFDdEMsb0JBQU14NkIsS0FBTzM1QixLQUFLbTFDLEtBQUsvSSxNQUFNK25CLEVBQUFBO0FBQzdCVSxnQkFBQUEsR0FBVVYsRUFBQUEsSUFBTyxFQUFFOW1ELEdBQUcxTixLQUFLcTFCLE1BQU0yRSxHQUFLdHNCLENBQUFBLEdBQUkrRCxHQUFHelIsS0FBS3ExQixNQUFNMkUsR0FBS3ZvQixDQUFBQSxFQUFBQTtjQUMvRDtZQUFBO0FBR0YsdUJBQVN4QyxLQUFJLEdBQUdBLEtBQUk1TyxLQUFLbTFDLEtBQUsyZixZQUFZcHdELFFBQVFrSyxNQUFLO0FBQ3JELG9CQUFNK3FCLEtBQU8zNUIsS0FBS20xQyxLQUFLL0ksTUFBTXBzQyxLQUFLbTFDLEtBQUsyZixZQUFZbG1ELEVBQUFBLENBQUFBO0FBQ25EaW1ELGdCQUFBQSxHQUFVNzBELEtBQUttMUMsS0FBSzJmLFlBQVlsbUQsRUFBQUEsQ0FBQUEsSUFBTSxFQUNwQ3ZCLEdBQUcxTixLQUFLcTFCLE1BQU0yRSxHQUFLdHNCLENBQUFBLEdBQ25CK0QsR0FBR3pSLEtBQUtxMUIsTUFBTTJFLEdBQUt2b0IsQ0FBQUEsRUFBQUE7Y0FFdkI7QUFFRixtQkFBT3lqRDtVQUNULEVBQUEsR0FFQSxFQUFBcnVELEtBQUEsZUFBQW5ELE9BUUEsU0FBWWdFLElBQUFBO0FBQ1YsZ0JBQVV3WCxRQUFOeFg7QUFDRixvQkFBTSxJQUFJdEQsVUFBVSw2Q0FBQTtBQUNmLGdCQUEyQjhhLFFBQXZCN2UsS0FBS20xQyxLQUFLL0ksTUFBTS9rQyxFQUFBQTtBQUN6QixvQkFBTSxJQUFJb3RCLGVBQWMsNkRBQUFwbEIsT0FDdUNoSSxFQUFBQSxDQUFBQTtBQUcvRCxtQkFBTyxFQUNMZ0csR0FBRzFOLEtBQUtxMUIsTUFBTWgxQixLQUFLbTFDLEtBQUsvSSxNQUFNL2tDLEVBQUFBLEVBQUlnRyxDQUFBQSxHQUNsQytELEdBQUd6UixLQUFLcTFCLE1BQU1oMUIsS0FBS20xQyxLQUFLL0ksTUFBTS9rQyxFQUFBQSxFQUFJK0osQ0FBQUEsRUFBQUE7VUFHeEMsRUFBQSxHQUVBLEVBQUE1SyxLQUFBLGtCQUFBbkQsT0FHQSxXQUFBO0FBRUUsZ0JBR2tDMHhELElBSDVCRixLQUFZLENBQUEsR0FDWkcsS0FBVWgxRCxLQUFLbTFDLEtBQUtyckMsS0FBS3NpQyxNQUFNNm9CLFdBQUFBLEdBQWFDLEtBQUFDLEdBRTdCSCxHQUFRMXlELElBQUFBLENBQUFBO0FBQUssZ0JBQUE7QUFBbEMsbUJBQUE0eUQsR0FBQXZnRCxFQUFBQSxHQUFBQSxFQUFBb2dELEtBQUFHLEdBQUE1bkQsRUFBQUEsR0FBQStRLFFBQW9DO0FBQUEsb0JBQXpCKzJDLEtBQU1MLEdBQUExeEQsT0FDVGdFLEtBQUsrdEQsR0FBTy90RCxJQUNaZ3VELEtBQVdyMUQsS0FBS20xQyxLQUFLL0ksTUFBTS9rQyxFQUFBQSxHQUMzQmdHLEtBQUkxTixLQUFLcTFCLE1BQU1xZ0MsR0FBU2hvRCxDQUFBQSxHQUN4QitELEtBQUl6UixLQUFLcTFCLE1BQU1xZ0MsR0FBU2prRCxDQUFBQTtBQUUxQmdrRCxnQkFBQUEsR0FBTy9uRCxNQUFNQSxNQUFLK25ELEdBQU9oa0QsTUFBTUEsTUFDakN5akQsR0FBVWh1RCxLQUFLLEVBQUVRLElBQUFBLElBQUlnRyxHQUFBQSxJQUFHK0QsR0FBQUEsR0FBQUEsQ0FBQUE7Y0FFNUI7WUFBQyxTQUFBa2tELElBQUFBO0FBQUFKLGNBQUFBLEdBQUE5bEMsRUFBQWttQyxFQUFBQTtZQUFBLFVBQUE7QUFBQUosY0FBQUEsR0FBQXJ5RCxFQUFBQTtZQUFBO0FBRURteUQsWUFBQUEsR0FBUTc4QixPQUFPMDhCLEVBQUFBO1VBQ2pCLEVBQUEsR0FFQSxFQUFBcnVELEtBQUEsa0JBQUFuRCxPQU1BLFNBQWVzdUQsSUFBQUE7QUFDYixnQkFBQSxXQUFJM3hELEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUE7QUFDbEIscUJBQU8zeEQsS0FBS20xQyxLQUFLL0ksTUFBTXVsQixFQUFBQSxFQUFReGhCLE1BQU15WDtVQUV6QyxFQUFBLEdBRUEsRUFBQXBoRCxLQUFBLHFCQUFBbkQsT0FRQSxTQUFrQnN1RCxJQUFROTRCLElBQUFBO0FBQ3hCLGdCQUFNMDhCLEtBQVcsQ0FBQTtBQUNqQixnQkFBQSxXQUFJdjFELEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUE7QUFHbEIsdUJBRk1oNEIsS0FBTzM1QixLQUFLbTFDLEtBQUsvSSxNQUFNdWxCLEVBQUFBLEdBQ3ZCNkQsS0FBVSxDQUFBLEdBQ1A1bUQsS0FBSSxHQUFHQSxLQUFJK3FCLEdBQUs4UyxNQUFNL25DLFFBQVFrSyxNQUFLO0FBQzFDLG9CQUFNZzhCLEtBQU9qUixHQUFLOFMsTUFBTTc5QixFQUFBQTtBQUNOLHlCQUFkaXFCLE1BQXNCK1IsR0FBSzZxQixRQUFROTdCLEdBQUt0eUIsS0FBQUEsV0FFdENtdUQsR0FBUTVxQixHQUFLOHFCLE1BQUFBLE1BQ2ZILEdBQVMxdUQsS0FBSytqQyxHQUFLOHFCLE1BQUFBLEdBQ25CRixHQUFRNXFCLEdBQUs4cUIsTUFBQUEsSUFBQUEsUUFFUSxXQUFkNzhCLE1BQXdCK1IsR0FBSzhxQixVQUFVLzdCLEdBQUt0eUIsTUFBQUEsV0FFakRtdUQsR0FBUTVxQixHQUFLNnFCLElBQUFBLE1BQ2ZGLEdBQVMxdUQsS0FBSytqQyxHQUFLNnFCLElBQUFBLEdBQ25CRCxHQUFRNXFCLEdBQUs2cUIsSUFBQUEsSUFBQUE7Y0FHbkI7QUFFRixtQkFBT0Y7VUFDVCxFQUFBLEdBRUEsRUFBQS91RCxLQUFBLHFCQUFBbkQsT0FNQSxTQUFrQnN1RCxJQUFBQTtBQUNoQixnQkFBTWdFLEtBQVcsQ0FBQTtBQUNqQixnQkFBQSxXQUFJMzFELEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUE7QUFFbEIsdUJBRE1oNEIsS0FBTzM1QixLQUFLbTFDLEtBQUsvSSxNQUFNdWxCLEVBQUFBLEdBQ3BCL2lELEtBQUksR0FBR0EsS0FBSStxQixHQUFLOFMsTUFBTS9uQyxRQUFRa0s7QUFDckMrbUQsZ0JBQUFBLEdBQVM5dUQsS0FBSzh5QixHQUFLOFMsTUFBTTc5QixFQUFBQSxFQUFHdkgsRUFBQUE7O0FBRzlCOGdDLHNCQUFRL25DLE1BQ04sb0VBQ0F1eEQsRUFBQUE7QUFHSixtQkFBT2dFO1VBQ1QsRUFBQSxHQUVBLEVBQUFudkQsS0FBQSxZQUFBbkQsT0FPQSxTQUFTc3VELElBQVF0a0QsSUFBRytELElBQUFBO0FBQUcsZ0JBQUF3a0QsS0FBQTUxRDtBQUFBQSx1QkFDakJBLEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUEsS0FDbEIzeEQsS0FBS20xQyxLQUFLL0ksTUFBTXVsQixFQUFBQSxFQUFRdGtELElBQUlxZ0IsT0FBT3JnQixFQUFBQSxHQUNuQ3JOLEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUEsRUFBUXZnRCxJQUFJc2MsT0FBT3RjLEVBQUFBLEdBQ25DeWtELEdBQVcsV0FBQTtBQUNURCxjQUFBQSxHQUFLemdCLEtBQUtxZSxRQUFRejlDLEtBQUssaUJBQUE7WUFDeEIsR0FBRSxDQUFBLEtBRUhveUIsUUFBUS9uQyxNQUNOLDJEQUNBdXhELEVBQUFBO1VBR04sRUFBQSxDQUFBLENBQUEsR0FBQ2tCO1FBQUEsRUEvakJlLEdDTmR6ckQsS0FBUzlHLElDQ1RRLEtBQU9ZLEdBQ1B5QyxLQUFXVixJQUNYZ0gsS0FBV3pFLElBQ1g4dkQsS0RGYSxTQUFVL3lELElBQUFBO0FBQ3pCLGlCQUFBLFdBQU9BLE9BQTZCcUUsR0FBT3JFLElBQVksT0FBQSxLQUFZcUUsR0FBT3JFLElBQVksVUFBQTtRQUN4RixHQ0NJOGtCLEtBQWlDaGdCLEdBQ2pDZ1QsS0FBaUJ6UjtBQU5iOUksV0FxQk4sRUFBRWdNLFFBQVEsV0FBV0csTUFBQUEsS0FBTSxHQUFRLEVBQ25DbkssS0FaRixTQUFTQSxHQUFJZ0ssSUFBUTBULElBQUFBO0FBQ25CLGNBQ0lqZCxJQUFZbkMsSUFEWm0xRCxLQUFXOTBELFVBQVV5RCxTQUFTLElBQUk0SCxLQUFTckwsVUFBVSxDQUFBO0FBRXpELGlCQUFJd0osR0FBUzZCLEVBQUFBLE1BQVl5cEQsS0FBaUJ6cEQsR0FBTzBULEVBQUFBLEtBQ2pEamQsS0FBYThrQixHQUErQmhsQixFQUFFeUosSUFBUTBULEVBQUFBLEtBQy9CODFDLEdBQWlCL3lELEVBQUFBLElBQ3BDQSxHQUFXTSxRQUFBQSxXQUNYTixHQUFXVCxNQUFBQSxTQUFnQ3hCLEdBQUtpQyxHQUFXVCxLQUFLeXpELEVBQUFBLElBQ2hFNXhELEdBQVN2RCxLQUFZaWEsR0FBZXZPLEVBQUFBLENBQUFBLElBQWlCaEssR0FBSTFCLElBQVdvZixJQUFhKzFDLEVBQUFBLElBQUFBO1FBQ3ZGLEVBQUEsQ0FBQTtBQ2xCQSxZQUFBLEtBQUEsRUFBV3IwRCxHQUVXVixRQUFRc0IsR0FBQUEsR0FBQUEsS0FBQUEsRUNIakJoQyxFQUFBQTtBQ0dFLGlCQUFTMDFELEtBQUFBO0FBRXBCLGNBQUlwbkM7QUFEaUIseUJBQUEsT0FBWjV0QixXQUEyQmkxRCxLQUVwQ0QsS0FBTzdPLEdBQXNCdjRCLEtBQVdxbkMsRUFBQUEsRUFBY24xRCxLQUFLOHRCLEVBQUFBLElBRTNEb25DLEtBQU8sU0FBYzFwRCxJQUFRNm9CLElBQVU0Z0MsSUFBQUE7QUFDckMsZ0JBQUlydEIsS0NUSyxTQUF3QnQ5QixJQUFRK3BCLElBQUFBO0FBQzdDLHFCQUFBLENBQVEveUIsT0FBT3hCLFVBQVVILGVBQWVLLEtBQUtzSyxJQUFRK3BCLEVBQUFBLEtBRXBDLFVBRGYvcEIsS0FBU3lQLEdBQWV6UCxFQUFBQTtBQUFBQTtBQUcxQixxQkFBT0E7WUFDVCxFREcrQmtCLElBQVE2b0IsRUFBQUE7QUFDakMsZ0JBQUt1VCxJQUFMO0FBQ0Esa0JBQUkza0IsS0FBT2dxQyxHQUFpQ3JsQixJQUFNdlQsRUFBQUE7QUFDbEQscUJBQUlwUixHQUFLemhCLE1BQ0F5aEIsR0FBS3poQixJQUFJeEIsS0FBS0csVUFBVXlELFNBQVMsSUFBSTRILEtBQVN5cEQsRUFBQUEsSUFFaERoeUMsR0FBSzFnQjtZQUxNO1VBTXhCO0FBRUUsaUJBQU8yeUQsR0FBS24xRCxNQUFNYixNQUFNaUIsU0FBQUE7UUFDMUI7QUVuQkEsWUFBSW1iLEtBQUk5YixJQUdKNDFELEtBQVN2MkQsS0FBS3cyRCxPQUNkbGhDLEtBQU10MUIsS0FBS3MxQixLQUNYM2hCLEtBQU8zVCxLQUFLMlQ7QUFRaEI4SSxXQUFFLEVBQUU5UCxRQUFRLFFBQVFHLE1BQUFBLE1BQVl3RCxPQUFPLEdBQUduRCxRQUFBQSxDQUFBQSxDQUozQm9wRCxNQUFVQSxHQUFPdGIsSUFBQUEsR0FBVXdiLEdBQUFBLE1BQVN4YixJQUFBQSxFQUFBQSxHQUlTLEVBRTFEdWIsT0FBTyxTQUFlRSxJQUFRQyxJQUFBQTtBQU01QixtQkFESXZ4QyxJQUFLd3hDLElBSkxDLEtBQU0sR0FDTjVuRCxLQUFJLEdBQ0o2bkQsS0FBT3gxRCxVQUFVeUQsUUFDakJneUQsS0FBTyxHQUVKOW5ELEtBQUk2bkQ7QUFFTEMsWUFBQUEsTUFESjN4QyxLQUFNa1EsR0FBSWgwQixVQUFVMk4sSUFBQUEsQ0FBQUEsTUFHbEI0bkQsS0FBTUEsTUFETkQsS0FBTUcsS0FBTzN4QyxNQUNLd3hDLEtBQU0sR0FDeEJHLEtBQU8zeEMsTUFHUHl4QyxNQUZTenhDLEtBQU0sS0FDZnd4QyxLQUFNeHhDLEtBQU0yeEMsTUFDQ0gsS0FDRHh4QztBQUVoQixpQkFBTzJ4QyxPQUFTOWIsSUFBQUEsSUFBV0EsSUFBQUEsSUFBVzhiLEtBQU9wakQsR0FBS2tqRCxFQUFBQTtRQUNuRCxFQUFBLENBQUE7QUNoQ0gsWUFBQSxLQUFBLEVBQVc5MEQsR0FFVy9CLEtBQUt3MkQsS0FBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxlQUFBQSxPQUFBQSxXQUFBQSxDQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsY0FBQUEsT0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQTtBQUFBQSxxQkFBQUEsUUFBQUEsVUFBQUEsUUFBQUEsS0FBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsR0FBQUEsV0FBQUE7Y0FBQUEsQ0FBQUEsQ0FBQUEsR0FBQUE7WUFBQUEsU0FBQUEsSUFBQUE7QUFBQUEscUJBQUFBO1lBQUFBO1VBQUFBLEVBQUFBO0FBQUFBLGlCQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUEsS0FBQUEsR0FBQUEsRUFBQUE7QUFBQUEsZ0JBQUFBLElBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxHQUFBQSxJQUFBQSxXQUFBQSxFQUFBQTtZQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxHQUFBQSxNQUFBQSxNQUFBQSxTQUFBQTtBQUFBQSxtQkFBQUEsR0FBQUEsTUFBQUEsRUFBQUE7VUFBQUE7UUFBQUE7QUM0QjNCLFlBS01RLEtBQVEsV0FBQTtBQUFBLG1CQUFBQSxLQUFBQTtBQUFBaHpDLGVBQUFBLE1BQUFnekMsRUFBQUE7VUFBQTtBQTZDWCxpQkE3Q1c5b0MsR0FBQThvQyxJQUFBLE1BQUEsQ0FBQSxFQUFBbndELEtBQUEsYUFBQW5ELE9BWUwsU0FBaUJ1ekQsSUFBeUJDLElBQUFBO0FBQzFDNW5DLGVBQWMybkMsRUFBQUEsTUFDakJBLEtBQVMsQ0FBQ0EsRUFBQUE7QUFRWixxQkFMTXZwRCxLQUFJd3BELEdBQVVqNEMsTUFBTXZSLEdBQ3BCK0QsS0FBSXlsRCxHQUFVajRDLE1BQU14TixHQUNwQjZwQixLQUFRNDdCLEdBQVU1N0IsT0FDbEJ2MkIsS0FBU215RCxHQUFVbnlELFFBRWhCa0ssS0FBSSxHQUFHQSxLQUFJZ29ELEdBQU9seUQsUUFBQUEsRUFBVWtLLElBQUc7QUFDdEMsa0JBQU1vN0IsS0FBSTRzQixHQUFPaG9ELEVBQUFBLEdBQ1hrb0QsS0FBSzlzQixHQUFFMzhCLElBQUkxTixLQUFLd1UsSUFBSThtQixFQUFBQSxJQUFTK08sR0FBRTU0QixJQUFJelIsS0FBS3lVLElBQUk2bUIsRUFBQUEsR0FDNUM4N0IsS0FBSy9zQixHQUFFMzhCLElBQUkxTixLQUFLeVUsSUFBSTZtQixFQUFBQSxJQUFTK08sR0FBRTU0QixJQUFJelIsS0FBS3dVLElBQUk4bUIsRUFBQUE7QUFFbEQrTyxjQUFBQSxHQUFFMzhCLElBQUlBLEtBQUkzSSxLQUFTb3lELElBQ25COXNCLEdBQUU1NEIsSUFBSUEsS0FBSTFNLEtBQVNxeUQ7WUFDcEI7VUFDSCxFQUFBLEdBRUEsRUFBQXZ3RCxLQUFBLFlBQUFuRCxPQU1PLFNBQWdCOE4sSUFBK0J5bEQsSUFBQUE7QUFDcER6bEQsWUFBQUEsR0FBSUcsVUFBQUEsR0FDSkgsR0FBSVcsT0FBTzhrRCxHQUFPLENBQUEsRUFBR3ZwRCxHQUFHdXBELEdBQU8sQ0FBQSxFQUFHeGxELENBQUFBO0FBQ2xDLHFCQUFTeEMsS0FBSSxHQUFHQSxLQUFJZ29ELEdBQU9seUQsUUFBQUEsRUFBVWtLO0FBQ25DdUMsY0FBQUEsR0FBSVksT0FBTzZrRCxHQUFPaG9ELEVBQUFBLEVBQUd2QixHQUFHdXBELEdBQU9ob0QsRUFBQUEsRUFBR3dDLENBQUFBO0FBRXBDRCxZQUFBQSxHQUFJTSxVQUFBQTtVQUNOLEVBQUEsQ0FBQSxDQUFBLEdBQUNrbEQ7UUFBQSxFQTdDVyxHQW1EUjVqQixLQUFBQSxTQUFNaWtCLElBQUFBO0FBQUE1UCxVQUFBQSxJQUFBclUsSUFBQWlrQixFQUFBQTtBQUFBLGNBQUFudUIsS0FBQTRnQixHQUFBMVcsRUFBQUE7QUFBQSxtQkFBQUEsS0FBQUE7QUFBQSxtQkFBQXB2QixHQUFBQSxNQUFBb3ZCLEVBQUFBLEdBQUFsSyxHQUFBaG9DLE1BQUFiLE1BQUFpQixTQUFBQTtVQUFBO0FBd0NULGlCQXhDUzRzQixHQUFBa2xCLElBQUEsTUFBQSxDQUFBLEVBQUF2c0MsS0FBQSxRQUFBbkQsT0FRSCxTQUNMOE4sSUFDQTBsRCxJQUFBQTtBQUVBLGdCQUFJQSxHQUFVM21CLE9BQU87QUFDbkIvK0IsY0FBQUEsR0FBSTAzQyxLQUFBQSxHQUVKMTNDLEdBQUk4bEQsVUFBVUosR0FBVWo0QyxNQUFNdlIsR0FBR3dwRCxHQUFVajRDLE1BQU14TixDQUFBQSxHQUNqREQsR0FBSStsRCxPQUFPdjNELEtBQUs2UixLQUFLLElBQUlxbEQsR0FBVTU3QixLQUFBQTtBQUVuQyxrQkFBTWlZLEtBQ29CLFFBQXhCMmpCLEdBQVVNLGFBQ05OLEdBQVVNLGFBQ1ZOLEdBQVUzbUIsTUFBTWdELE9BQ2hCQyxLQUNxQixRQUF6QjBqQixHQUFVTyxjQUNOUCxHQUFVTyxjQUNWUCxHQUFVM21CLE1BQU1pRDtBQUV0QjBqQixjQUFBQSxHQUFVM21CLE1BQU04YixvQkFDZDc2QyxJQUNBLEdBQUEsQ0FDQytoQyxLQUFRLEdBQ1QsR0FDQUEsSUFDQUMsRUFBQUEsR0FHRmhpQyxHQUFJODNDLFFBQUFBO1lBQ0w7QUFFRCxtQkFBQTtVQUNGLEVBQUEsQ0FBQSxDQUFBLEdBQUNsVztRQUFBLEVBeENpQjRqQixFQUFBQSxHQThDZFUsS0FBQUEsU0FBTUMsSUFBQUE7QUFBQWxRLFVBQUFBLElBQUFpUSxJQUFBQyxFQUFBQTtBQUFBLGNBQUFDLEtBQUE5TixHQUFBNE4sRUFBQUE7QUFBQSxtQkFBQUEsS0FBQUE7QUFBQSxtQkFBQTF6QyxHQUFBQSxNQUFBMHpDLEVBQUFBLEdBQUFFLEdBQUExMkQsTUFBQWIsTUFBQWlCLFNBQUFBO1VBQUE7QUF5QlQsaUJBekJTNHNCLEdBQUF3cEMsSUFBQSxNQUFBLENBQUEsRUFBQTd3RCxLQUFBLFFBQUFuRCxPQVFILFNBQ0w4TixJQUNBMGxELElBQUFBO0FBSUEsZ0JBQU1ELEtBQVMsQ0FDYixFQUFFdnBELEdBQUcsR0FBRytELEdBQUcsRUFBQSxHQUNYLEVBQUUvRCxHQUFBQSxJQUFPK0QsR0FBRyxJQUFBLEdBQ1osRUFBRS9ELEdBQUFBLE1BQVMrRCxHQUFHLEVBQUEsR0FDZCxFQUFFL0QsR0FBQUEsSUFBTytELEdBQUFBLEtBQUksQ0FBQTtBQU1mLG1CQUhBdWxELEdBQVNhLFVBQVVaLElBQVFDLEVBQUFBLEdBQzNCRixHQUFTYyxTQUFTdG1ELElBQUt5bEQsRUFBQUEsR0FBQUE7VUFHekIsRUFBQSxDQUFBLENBQUEsR0FBQ1M7UUFBQSxFQXpCaUJWLEVBQUFBLEdBK0JkZSxLQUFJLFdBQUE7QUFBQSxtQkFBQUEsS0FBQUE7QUFBQS96QyxlQUFBQSxNQUFBK3pDLEVBQUFBO1VBQUE7QUF5QlAsaUJBekJPN3BDLEdBQUE2cEMsSUFBQSxNQUFBLENBQUEsRUFBQWx4RCxLQUFBLFFBQUFuRCxPQVFELFNBQ0w4TixJQUNBMGxELElBQUFBO0FBSUEsZ0JBQU1ELEtBQVMsQ0FDYixFQUFFdnBELEdBQUFBLElBQU8rRCxHQUFHLEVBQUEsR0FDWixFQUFFL0QsR0FBRyxHQUFHK0QsR0FBRyxJQUFBLEdBQ1gsRUFBRS9ELEdBQUFBLE1BQVMrRCxHQUFHLEVBQUEsR0FDZCxFQUFFL0QsR0FBRyxHQUFHK0QsR0FBQUEsS0FBSSxDQUFBO0FBTWQsbUJBSEF1bEQsR0FBU2EsVUFBVVosSUFBUUMsRUFBQUEsR0FDM0JGLEdBQVNjLFNBQVN0bUQsSUFBS3lsRCxFQUFBQSxHQUFBQTtVQUd6QixFQUFBLENBQUEsQ0FBQSxHQUFDYztRQUFBLEVBekJPLEdBK0JKQyxLQUFLLFdBQUE7QUFBQSxtQkFBQUEsS0FBQUE7QUFBQWgwQyxlQUFBQSxNQUFBZzBDLEVBQUFBO1VBQUE7QUFxQ1IsaUJBckNROXBDLEdBQUE4cEMsSUFBQSxNQUFBLENBQUEsRUFBQW54RCxLQUFBLFFBQUFuRCxPQVFGLFNBQ0w4TixJQUNBMGxELElBQUFBO0FBSUEsZ0JBQU1qNEMsS0FBUSxFQUFFdlIsR0FBQUEsTUFBUytELEdBQUcsRUFBQTtBQUM1QnVsRCxlQUFTYSxVQUFVNTRDLElBQU9pNEMsRUFBQUEsR0FHMUIxbEQsR0FBSWswQyxjQUFjbDBDLEdBQUlvekMsV0FDdEJwekMsR0FBSW96QyxZQUFZO0FBR2hCLGdCQUFNcVQsS0FBS2o0RCxLQUFLNlIsSUFDVnFtRCxLQUFhaEIsR0FBVTU3QixRQUFRMjhCLEtBQUssR0FDcENFLEtBQVdqQixHQUFVNTdCLFFBQVEyOEIsS0FBSztBQVl4QyxtQkFYQXptRCxHQUFJRyxVQUFBQSxHQUNKSCxHQUFJSSxJQUNGcU4sR0FBTXZSLEdBQ051UixHQUFNeE4sR0FDYSxNQUFuQnlsRCxHQUFVbnlELFFBQ1ZtekQsSUFDQUMsSUFBQUEsS0FDQSxHQUVGM21ELEdBQUk0M0MsT0FBQUEsR0FBQUE7VUFHTixFQUFBLENBQUEsQ0FBQSxHQUFDNE87UUFBQSxFQXJDUSxHQTJDTEksS0FBYSxXQUFBO0FBQUEsbUJBQUFBLEtBQUFBO0FBQUFwMEMsZUFBQUEsTUFBQW8wQyxFQUFBQTtVQUFBO0FBcUNoQixpQkFyQ2dCbHFDLEdBQUFrcUMsSUFBQSxNQUFBLENBQUEsRUFBQXZ4RCxLQUFBLFFBQUFuRCxPQVFWLFNBQ0w4TixJQUNBMGxELElBQUFBO0FBSUEsZ0JBQU1qNEMsS0FBUSxFQUFFdlIsR0FBQUEsTUFBUytELEdBQUcsRUFBQTtBQUM1QnVsRCxlQUFTYSxVQUFVNTRDLElBQU9pNEMsRUFBQUEsR0FHMUIxbEQsR0FBSWswQyxjQUFjbDBDLEdBQUlvekMsV0FDdEJwekMsR0FBSW96QyxZQUFZO0FBR2hCLGdCQUFNcVQsS0FBS2o0RCxLQUFLNlIsSUFDVnFtRCxLQUFhaEIsR0FBVTU3QixRQUFRMjhCLEtBQUssR0FDcENFLEtBQVdqQixHQUFVNTdCLFFBQVMsSUFBSTI4QixLQUFNO0FBWTlDLG1CQVhBem1ELEdBQUlHLFVBQUFBLEdBQ0pILEdBQUlJLElBQ0ZxTixHQUFNdlIsR0FDTnVSLEdBQU14TixHQUNhLE1BQW5CeWxELEdBQVVueUQsUUFDVm16RCxJQUNBQyxJQUFBQSxLQUNBLEdBRUYzbUQsR0FBSTQzQyxPQUFBQSxHQUFBQTtVQUdOLEVBQUEsQ0FBQSxDQUFBLEdBQUNnUDtRQUFBLEVBckNnQixHQTJDYm5JLEtBQVEsV0FBQTtBQUFBLG1CQUFBQSxLQUFBQTtBQUFBanNDLGVBQUFBLE1BQUFpc0MsRUFBQUE7VUFBQTtBQXdCWCxpQkF4QlcvaEMsR0FBQStoQyxJQUFBLE1BQUEsQ0FBQSxFQUFBcHBELEtBQUEsUUFBQW5ELE9BUUwsU0FDTDhOLElBQ0EwbEQsSUFBQUE7QUFJQSxnQkFBTUQsS0FBUyxDQUNiLEVBQUV2cEQsR0FBRyxNQUFNK0QsR0FBRyxFQUFBLEdBQ2QsRUFBRS9ELEdBQUFBLElBQU8rRCxHQUFHLElBQUEsR0FDWixFQUFFL0QsR0FBQUEsSUFBTytELEdBQUFBLEtBQUksQ0FBQTtBQU1mLG1CQUhBdWxELEdBQVNhLFVBQVVaLElBQVFDLEVBQUFBLEdBQzNCRixHQUFTYyxTQUFTdG1ELElBQUt5bEQsRUFBQUEsR0FBQUE7VUFHekIsRUFBQSxDQUFBLENBQUEsR0FBQ2hIO1FBQUEsRUF4QlcsR0E4QlJvSSxLQUFnQixXQUFBO0FBQUEsbUJBQUFBLEtBQUFBO0FBQUFyMEMsZUFBQUEsTUFBQXEwQyxFQUFBQTtVQUFBO0FBd0JuQixpQkF4Qm1CbnFDLEdBQUFtcUMsSUFBQSxNQUFBLENBQUEsRUFBQXh4RCxLQUFBLFFBQUFuRCxPQVFiLFNBQ0w4TixJQUNBMGxELElBQUFBO0FBSUEsZ0JBQU1ELEtBQVMsQ0FDYixFQUFFdnBELEdBQUcsR0FBRytELEdBQUcsSUFBQSxHQUNYLEVBQUUvRCxHQUFHLEdBQUcrRCxHQUFBQSxLQUFJLEdBQ1osRUFBRS9ELEdBQUFBLElBQU8rRCxHQUFHLEVBQUEsQ0FBQTtBQU1kLG1CQUhBdWxELEdBQVNhLFVBQVVaLElBQVFDLEVBQUFBLEdBQzNCRixHQUFTYyxTQUFTdG1ELElBQUt5bEQsRUFBQUEsR0FBQUE7VUFHekIsRUFBQSxDQUFBLENBQUEsR0FBQ29CO1FBQUEsRUF4Qm1CLEdBOEJoQjdMLEtBQU0sV0FBQTtBQUFBLG1CQUFBQSxLQUFBQTtBQUFBeG9DLGVBQUFBLE1BQUF3b0MsRUFBQUE7VUFBQTtBQWtCVCxpQkFsQlN0K0IsR0FBQXMrQixJQUFBLE1BQUEsQ0FBQSxFQUFBM2xELEtBQUEsUUFBQW5ELE9BUUgsU0FDTDhOLElBQ0EwbEQsSUFBQUE7QUFFQSxnQkFBTWo0QyxLQUFRLEVBQUV2UixHQUFBQSxNQUFTK0QsR0FBRyxFQUFBO0FBSzVCLG1CQUhBdWxELEdBQVNhLFVBQVU1NEMsSUFBT2k0QyxFQUFBQSxHQUMxQjNsRCxHQUFXQyxJQUFLeU4sR0FBTXZSLEdBQUd1UixHQUFNeE4sR0FBc0IsTUFBbkJ5bEQsR0FBVW55RCxNQUFBQSxHQUFBQTtVQUc5QyxFQUFBLENBQUEsQ0FBQSxHQUFDeW5EO1FBQUEsRUFsQlMsR0F3Qk44TCxLQUFHLFdBQUE7QUFBQSxtQkFBQUEsS0FBQUE7QUFBQXQwQyxlQUFBQSxNQUFBczBDLEVBQUFBO1VBQUE7QUFvQ04saUJBcENNcHFDLEdBQUFvcUMsSUFBQSxNQUFBLENBQUEsRUFBQXp4RCxLQUFBLFFBQUFuRCxPQVFBLFNBQ0w4TixJQUNBMGxELElBQUFBO0FBZUEsZ0JBQU1ELEtBQVMsQ0FDYixFQUFFdnBELEdBQUcsR0FBRytELEdBQUcsSUFBQSxHQUNYLEVBQUUvRCxHQUFHLEdBQUcrRCxHQUFBQSxLQUFJLEdBQ1osRUFBRS9ELEdBQUFBLE9BQVUrRCxHQUFBQSxLQUFJLEdBQ2hCLEVBQUUvRCxHQUFBQSxPQUFVK0QsR0FBRyxJQUFBLENBQUE7QUFNakIsbUJBSEF1bEQsR0FBU2EsVUFBVVosSUFBUUMsRUFBQUEsR0FDM0JGLEdBQVNjLFNBQVN0bUQsSUFBS3lsRCxFQUFBQSxHQUFBQTtVQUd6QixFQUFBLENBQUEsQ0FBQSxHQUFDcUI7UUFBQSxFQXBDTSxHQTBDSGhPLEtBQUcsV0FBQTtBQUFBLG1CQUFBQSxLQUFBQTtBQUFBdG1DLGVBQUFBLE1BQUFzbUMsRUFBQUE7VUFBQTtBQXVCTixpQkF2Qk1wOEIsR0FBQW84QixJQUFBLE1BQUEsQ0FBQSxFQUFBempELEtBQUEsUUFBQW5ELE9BUUEsU0FDTDhOLElBQ0EwbEQsSUFBQUE7QUFFQSxnQkFBTUQsS0FBUyxDQUNiLEVBQUV2cEQsR0FBRyxHQUFHK0QsR0FBRyxJQUFBLEdBQ1gsRUFBRS9ELEdBQUcsR0FBRytELEdBQUFBLEtBQUksR0FDWixFQUFFL0QsR0FBQUEsTUFBUytELEdBQUFBLEtBQUksR0FDZixFQUFFL0QsR0FBQUEsTUFBUytELEdBQUcsSUFBQSxDQUFBO0FBTWhCLG1CQUhBdWxELEdBQVNhLFVBQVVaLElBQVFDLEVBQUFBLEdBQzNCRixHQUFTYyxTQUFTdG1ELElBQUt5bEQsRUFBQUEsR0FBQUE7VUFHekIsRUFBQSxDQUFBLENBQUEsR0FBQzNNO1FBQUEsRUF2Qk0sR0E2QkgwRSxLQUFPLFdBQUE7QUFBQSxtQkFBQUEsS0FBQUE7QUFBQWhyQyxlQUFBQSxNQUFBZ3JDLEVBQUFBO1VBQUE7QUF1QlYsaUJBdkJVOWdDLEdBQUE4Z0MsSUFBQSxNQUFBLENBQUEsRUFBQW5vRCxLQUFBLFFBQUFuRCxPQVFKLFNBQ0w4TixJQUNBMGxELElBQUFBO0FBRUEsZ0JBQU1ELEtBQVMsQ0FDYixFQUFFdnBELEdBQUcsR0FBRytELEdBQUcsRUFBQSxHQUNYLEVBQUUvRCxHQUFBQSxNQUFTK0QsR0FBQUEsS0FBSSxHQUNmLEVBQUUvRCxHQUFBQSxJQUFPK0QsR0FBRyxFQUFBLEdBQ1osRUFBRS9ELEdBQUFBLE1BQVMrRCxHQUFHLElBQUEsQ0FBQTtBQU1oQixtQkFIQXVsRCxHQUFTYSxVQUFVWixJQUFRQyxFQUFBQSxHQUMzQkYsR0FBU2MsU0FBU3RtRCxJQUFLeWxELEVBQUFBLEdBQUFBO1VBR3pCLEVBQUEsQ0FBQSxDQUFBLEdBQUNqSTtRQUFBLEVBdkJVLEdBNkJQdUosS0FBRyxXQUFBO0FBQUEsbUJBQUFBLEtBQUFBO0FBQUF2MEMsZUFBQUEsTUFBQXUwQyxFQUFBQTtVQUFBO0FBeUJOLGlCQXpCTXJxQyxHQUFBcXFDLElBQUEsTUFBQSxDQUFBLEVBQUExeEQsS0FBQSxRQUFBbkQsT0FRQSxTQUNMOE4sSUFDQTBsRCxJQUFBQTtBQUlBLGdCQUFNRCxLQUFTLENBQ2IsRUFBRXZwRCxHQUFBQSxJQUFPK0QsR0FBRyxJQUFBLEdBQ1osRUFBRS9ELEdBQUFBLE1BQVMrRCxHQUFHLEVBQUEsR0FDZCxFQUFFL0QsR0FBQUEsSUFBTytELEdBQUFBLEtBQUksR0FDYixFQUFFL0QsR0FBRyxHQUFHK0QsR0FBRyxFQUFBLENBQUE7QUFNYixtQkFIQXVsRCxHQUFTYSxVQUFVWixJQUFRQyxFQUFBQSxHQUMzQkYsR0FBU2MsU0FBU3RtRCxJQUFLeWxELEVBQUFBLEdBQUFBO1VBR3pCLEVBQUEsQ0FBQSxDQUFBLEdBQUNzQjtRQUFBLEVBekJNLEdBK0JJQyxLQUFTLFdBQUE7QUFBQSxtQkFBQUEsS0FBQUE7QUFBQXgwQyxlQUFBQSxNQUFBdzBDLEVBQUFBO1VBQUE7QUE0Q25CLGlCQTVDbUJ0cUMsR0FBQXNxQyxJQUFBLE1BQUEsQ0FBQSxFQUFBM3hELEtBQUEsUUFBQW5ELE9BUWIsU0FDTDhOLElBQ0EwbEQsSUFBQUE7QUFFQSxnQkFBSTErQztBQUtKLG9CQUpJMCtDLEdBQVUxK0MsU0FDWkEsS0FBTzArQyxHQUFVMStDLEtBQUsvTixZQUFBQSxJQUdoQitOLElBQUFBO2NBQ04sS0FBSztBQUNILHVCQUFPNDZCLEdBQU12L0IsS0FBS3JDLElBQUswbEQsRUFBQUE7Y0FDekIsS0FBSztBQUNILHVCQUFPMUssR0FBTzM0QyxLQUFLckMsSUFBSzBsRCxFQUFBQTtjQUMxQixLQUFLO0FBQ0gsdUJBQU81TSxHQUFJejJDLEtBQUtyQyxJQUFLMGxELEVBQUFBO2NBQ3ZCLEtBQUs7QUFDSCx1QkFBT2EsR0FBS2xrRCxLQUFLckMsSUFBSzBsRCxFQUFBQTtjQUN4QixLQUFLO0FBQ0gsdUJBQU9jLEdBQU1ua0QsS0FBS3JDLElBQUswbEQsRUFBQUE7Y0FDekIsS0FBSztBQUNILHVCQUFPbEksR0FBUW43QyxLQUFLckMsSUFBSzBsRCxFQUFBQTtjQUMzQixLQUFLO0FBQ0gsdUJBQU9rQixHQUFjdmtELEtBQUtyQyxJQUFLMGxELEVBQUFBO2NBQ2pDLEtBQUs7QUFDSCx1QkFBT2pILEdBQVNwOEMsS0FBS3JDLElBQUswbEQsRUFBQUE7Y0FDNUIsS0FBSztBQUNILHVCQUFPbUIsR0FBaUJ4a0QsS0FBS3JDLElBQUswbEQsRUFBQUE7Y0FDcEMsS0FBSztBQUNILHVCQUFPb0IsR0FBSXprRCxLQUFLckMsSUFBSzBsRCxFQUFBQTtjQUN2QixLQUFLO0FBQ0gsdUJBQU9xQixHQUFJMWtELEtBQUtyQyxJQUFLMGxELEVBQUFBO2NBRXZCO0FBQ0UsdUJBQU9RLEdBQU03akQsS0FBS3JDLElBQUswbEQsRUFBQUE7WUFBQUE7VUFFN0IsRUFBQSxDQUFBLENBQUEsR0FBQ3NCO1FBQUEsRUE1Q21CO0FBQUEsaUJBQUEsR0FBQXBqRCxJQUFBcWEsSUFBQTtBQUFBLGNBQUF4Z0IsS0FBQSxHQUFBbUcsRUFBQTtBQUFBLGNBQUEsSUFBQTtBQUFBLGdCQUFBb1ksS0FBQSxHQUFBcFksRUFBQTtBQUFBLFlBQUFxYSxPQUFBakMsS0FBQSxHQUFBQSxFQUFBLEVBQUEsS0FBQUEsSUFBQSxTQUFBaUMsSUFBQTtBQUFBLHFCQUFBLEdBQUFyYSxJQUFBcWEsRUFBQSxFQUFBO1lBQUEsQ0FBQSxJQUFBeGdCLEdBQUEsS0FBQSxNQUFBQSxJQUFBdWUsRUFBQTtVQUFBO0FBQUEsaUJBQUF2ZTtRQUFBO0FBQUEsaUJBQUEsR0FBQW1HLElBQUE7QUFBQSxtQkFBQXFhLEtBQUEsR0FBQUEsS0FBQSxVQUFBLFFBQUFBLE1BQUE7QUFBQSxnQkFBQXhnQixJQUFBdWUsSUFBQTdmLEtBQUEsUUFBQSxVQUFBOGhCLEVBQUEsSUFBQSxVQUFBQSxFQUFBLElBQUEsQ0FBQTtBQUFBLFlBQUFBLEtBQUEsSUFBQSxHQUFBeGdCLEtBQUEsR0FBQSxPQUFBdEIsRUFBQSxHQUFBLElBQUEsQ0FBQSxFQUFBLEtBQUFzQixJQUFBLFNBQUF3Z0IsSUFBQTtBQUFBLGlCQUFBcmEsSUFBQXFhLElBQUE5aEIsR0FBQThoQixFQUFBLENBQUE7WUFBQSxDQUFBLElBQUEsS0FBQSxHQUFBcmEsSUFBQSxHQUFBekgsRUFBQSxDQUFBLElBQUEsR0FBQTZmLEtBQUEsR0FBQSxPQUFBN2YsRUFBQSxDQUFBLENBQUEsRUFBQSxLQUFBNmYsSUFBQSxTQUFBaUMsSUFBQTtBQUFBLGlCQUFBcmEsSUFBQXFhLElBQUEsR0FBQTloQixJQUFBOGhCLEVBQUEsQ0FBQTtZQUFBLENBQUE7VUFBQTtBQUFBLGlCQUFBcmE7UUFBQTtBQy9jdEIsWUFBc0JxakQsS0FBUSxXQUFBO0FBcUI1QixtQkFBQUEsR0FDRXZzRCxJQUNVd3NELElBQ0FDLElBQUFBO0FBQW1CMzBDLGVBQUFBLE1BQUF5MEMsRUFBQUEsR0FEbkJwNEQsS0FBS3E0RCxRQUFMQSxJQUNBcjRELEtBQVlzNEQsZUFBWkEsSUFqQkx0NEQsS0FBS21yQyxRQUFZLENBQUEsR0FDakJuckMsS0FBVXU0RCxhQUFBQSxNQUdWdjRELEtBQVV3NEQsYUFBRyxLQUNieDRELEtBQWN5NEQsaUJBQUcsR0FjdEJ6NEQsS0FBS2toRCxXQUFXcjFDLEVBQUFBLEdBRWhCN0wsS0FBSzA0RCxZQUFZMTRELEtBQUswZ0IsTUFDdEIxZ0IsS0FBSzI0RCxVQUFVMzRELEtBQUs4d0I7VUFDdEI7QUEwM0JDLGlCQWgyQkRqRCxHQUFBdXFDLElBQUEsQ0FBQSxFQUFBNXhELEtBQUEsV0FBQW5ELE9BQ08sV0FBQTtBQUNMckQsaUJBQUswZ0IsT0FBTzFnQixLQUFLcTRELE1BQU1qc0IsTUFBTXBzQyxLQUFLNkwsUUFBUTZVLElBQUFBLEdBQzFDMWdCLEtBQUs4d0IsS0FBSzl3QixLQUFLcTRELE1BQU1qc0IsTUFBTXBzQyxLQUFLNkwsUUFBUWlsQixFQUFBQTtVQUMxQyxFQUFBLEdBRUEsRUFBQXRxQixLQUFBLFdBQUFuRCxPQUNPLFdBQUE7QUFDTCxtQkFBQTtVQUNGLEVBQUEsR0FFQSxFQUFBbUQsS0FBQSxjQUFBbkQsT0FLTyxTQUFXd0ksSUFBQUE7QUFDaEI3TCxpQkFBSzZMLFVBQVVBLElBRWY3TCxLQUFLMGdCLE9BQU8xZ0IsS0FBS3E0RCxNQUFNanNCLE1BQU1wc0MsS0FBSzZMLFFBQVE2VSxJQUFBQSxHQUMxQzFnQixLQUFLOHdCLEtBQUs5d0IsS0FBS3E0RCxNQUFNanNCLE1BQU1wc0MsS0FBSzZMLFFBQVFpbEIsRUFBQUEsR0FDeEM5d0IsS0FBS3FILEtBQUtySCxLQUFLNkwsUUFBUXhFO1VBQ3pCLEVBQUEsR0FFQSxFQUFBYixLQUFBLFlBQUFuRCxPQUNPLFNBQ0w4TixJQUNBZ04sSUFVQXk2QyxJQUNBQyxJQUFBQTtBQUNnQyxnQkFBaENDLEtBQUE3M0QsVUFBQXlELFNBQUFBLEtBQUFBLFdBQUF6RCxVQUFBLENBQUEsSUFBQUEsVUFBZSxDQUFBLElBQUFqQixLQUFLKzRELFdBQUFBO0FBR3BCNW5ELFlBQUFBLEdBQUlrMEMsY0FBY3JsRCxLQUFLZzVELFNBQVM3bkQsSUFBS2dOLEVBQUFBLEdBQ3JDaE4sR0FBSWkwQyxZQUFZam5DLEdBQU8rMEIsT0FBQUEsVUFFbkIvMEIsR0FBT3VxQyxTQUNUMW9ELEtBQUtpNUQsZ0JBQWdCOW5ELElBQUtnTixJQUFRMjZDLEVBQUFBLElBRWxDOTRELEtBQUtrNUQsVUFBVS9uRCxJQUFLZ04sSUFBUTI2QyxFQUFBQTtVQUVoQyxFQUFBLEdBRUEsRUFBQXR5RCxLQUFBLGFBQUFuRCxPQVNRLFNBQ044TixJQUNBZ04sSUFJQTI2QyxJQUNBSixJQUNBQyxJQUFBQTtBQUVBLGdCQUFJMzRELEtBQUswZ0IsUUFBUTFnQixLQUFLOHdCO0FBRXBCOXdCLG1CQUFLbTVELE1BQU1ob0QsSUFBS2dOLElBQVEyNkMsSUFBU0osSUFBV0MsRUFBQUE7aUJBQ3ZDO0FBQ0wsa0JBQStDUyxLQUFBcHFDLEdBQXhCaHZCLEtBQUtxNUQsZUFBZWxvRCxFQUFBQSxHQUFJLENBQUEsR0FBeEM5RCxLQUFDK3JELEdBQUEsQ0FBQSxHQUFFaG9ELEtBQUNnb0QsR0FBQSxDQUFBLEdBQUUza0QsS0FBTTJrRCxHQUFBLENBQUE7QUFDbkJwNUQsbUJBQUtzNUQsUUFBUW5vRCxJQUFLZ04sSUFBUTlRLElBQUcrRCxJQUFHcUQsRUFBQUE7WUFDakM7VUFDSCxFQUFBLEdBRUEsRUFBQWpPLEtBQUEsbUJBQUFuRCxPQVNRLFNBQ044TixJQUNBZ04sSUFJQTI2QyxJQUNBUyxJQUNBQyxJQUFBQTtBQUVBcm9ELFlBQUFBLEdBQUlzb0QsVUFBVTtBQUNkLGdCQUFNem1ELEtBQVVpYyxHQUFjOVEsR0FBT3VxQyxNQUFBQSxJQUFVdnFDLEdBQU91cUMsU0FBUyxDQUFDLEdBQUcsQ0FBQTtBQUduRSxnQkFBQSxXQUFJdjNDLEdBQUlzM0MsYUFBMkI7QUFRakMsa0JBUEF0M0MsR0FBSTAzQyxLQUFBQSxHQUdKMTNDLEdBQUlzM0MsWUFBWXoxQyxFQUFBQSxHQUNoQjdCLEdBQUl1b0QsaUJBQWlCLEdBR2pCMTVELEtBQUswZ0IsUUFBUTFnQixLQUFLOHdCO0FBRXBCOXdCLHFCQUFLbTVELE1BQU1ob0QsSUFBS2dOLElBQVEyNkMsRUFBQUE7bUJBQ25CO0FBQ0wsb0JBQStDYSxLQUFBM3FDLEdBQXhCaHZCLEtBQUtxNUQsZUFBZWxvRCxFQUFBQSxHQUFJLENBQUEsR0FBeEM5RCxLQUFDc3NELEdBQUEsQ0FBQSxHQUFFdm9ELEtBQUN1b0QsR0FBQSxDQUFBLEdBQUVsbEQsS0FBTWtsRCxHQUFBLENBQUE7QUFDbkIzNUQscUJBQUtzNUQsUUFBUW5vRCxJQUFLZ04sSUFBUTlRLElBQUcrRCxJQUFHcUQsRUFBQUE7Y0FDakM7QUFHRHRELGNBQUFBLEdBQUlzM0MsWUFBWSxDQUFDLENBQUEsQ0FBQSxHQUNqQnQzQyxHQUFJdW9ELGlCQUFpQixHQUNyQnZvRCxHQUFJODNDLFFBQUFBO1lBQ0wsT0FBTTtBQUVMLGtCQUFJanBELEtBQUswZ0IsUUFBUTFnQixLQUFLOHdCO0FBRXBCamUsbUJBQ0UxQixJQUNBblIsS0FBSzBnQixLQUFLclQsR0FDVnJOLEtBQUswZ0IsS0FBS3RQLEdBQ1ZwUixLQUFLOHdCLEdBQUd6akIsR0FDUnJOLEtBQUs4d0IsR0FBRzFmLEdBQ1I0QixFQUFBQTttQkFFRztBQUNMLG9CQUErQzRtRCxLQUFBNXFDLEdBQXhCaHZCLEtBQUtxNUQsZUFBZWxvRCxFQUFBQSxHQUFJLENBQUEsR0FBeEM5RCxLQUFDdXNELEdBQUEsQ0FBQSxHQUFFeG9ELEtBQUN3b0QsR0FBQSxDQUFBLEdBQUVubEQsS0FBTW1sRCxHQUFBLENBQUE7QUFDbkI1NUQscUJBQUtzNUQsUUFBUW5vRCxJQUFLZ04sSUFBUTlRLElBQUcrRCxJQUFHcUQsRUFBQUE7Y0FDakM7QUFFRHpVLG1CQUFLa3BELGFBQWEvM0MsSUFBS2dOLEVBQUFBLEdBRXZCaE4sR0FBSTQzQyxPQUFBQSxHQUdKL29ELEtBQUtvcEQsY0FBY2o0QyxJQUFLZ04sRUFBQUE7WUFDekI7VUFDSCxFQUFBLEdBbUJBLEVBQUEzWCxLQUFBLHNCQUFBbkQsT0FRTyxTQUNMczJCLElBQ0F4b0IsSUFDQXRGLElBQUFBO0FBRUEsbUJBQUk3TCxLQUFLMGdCLFFBQVExZ0IsS0FBSzh3QixLQUNiOXdCLEtBQUs2NUQsb0JBQW9CbGdDLElBQU14b0IsSUFBS3RGLEVBQUFBLElBRXBDN0wsS0FBSzg1RCwwQkFBMEJuZ0MsSUFBTXhvQixJQUFLdEYsRUFBQUE7VUFFckQsRUFBQSxHQUVBLEVBQUFyRixLQUFBLHVCQUFBbkQsT0FDTyxTQUFvQjhOLElBQUFBO0FBSXpCLGdCQUFJblIsS0FBSzBnQixRQUFRMWdCLEtBQUs4d0I7QUFDcEIscUJBQU8sRUFDTHBRLE1BQU0xZ0IsS0FBSzY1RCxvQkFBb0I3NUQsS0FBSzBnQixNQUFNdlAsRUFBQUEsR0FDMUMyZixJQUFJOXdCLEtBQUs2NUQsb0JBQW9CNzVELEtBQUs4d0IsSUFBSTNmLEVBQUFBLEVBQUFBO0FBRW5DLGdCQUFBeWQsSUFDOENtckMsS0FBQS9xQyxHQUFwQ0YsR0FBQUYsS0FBQTV1QixLQUFLcTVELGVBQWVsb0QsRUFBQUEsQ0FBQUEsRUFBSXJRLEtBQUE4dEIsSUFBTyxHQUFHLENBQUEsR0FBRSxDQUFBLEdBQTVDdmhCLEtBQUMwc0QsR0FBQSxDQUFBLEdBQUUzb0QsS0FBQzJvRCxHQUFBLENBQUE7QUFFWCxtQkFBTyxFQUNMcjVDLE1BQU0xZ0IsS0FBSzg1RCwwQkFBMEI5NUQsS0FBSzBnQixNQUFNdlAsSUFBSyxFQUNuRDlELEdBQUFBLElBQ0ErRCxHQUFBQSxJQUNBc2EsS0FBSyxNQUNMc3VDLE1BQU0sS0FDTm5oQyxXQUFBQSxHQUFZLENBQUEsR0FFZC9ILElBQUk5d0IsS0FBSzg1RCwwQkFBMEI5NUQsS0FBSzBnQixNQUFNdlAsSUFBSyxFQUNqRDlELEdBQUFBLElBQ0ErRCxHQUFBQSxJQUNBc2EsS0FBSyxLQUNMc3VDLE1BQU0sS0FDTm5oQyxXQUFXLEVBQUEsQ0FBQSxFQUFBO1VBSW5CLEVBQUEsR0FFQSxFQUFBcnlCLEtBQUEsa0JBQUFuRCxPQU1VLFNBQ1I4TixJQUFBQTtBQUVBLGdCQUFNc0QsS0FBU3pVLEtBQUs2TCxRQUFRb3VELGNBQWM5aUQ7QUFBQUEsdUJBRXRDaEcsTUFBQUEsV0FDRW5SLEtBQUswZ0IsS0FBS3l2QixNQUFNK0MsU0FDbEJsekMsS0FBSzBnQixLQUFLeXZCLE1BQU00WCxPQUFPNTJDLEVBQUFBO0FBSzNCLGdCQUFNeWlDLEtBQWMrSCxHQUNsQnhxQyxJQUNBblIsS0FBSzZMLFFBQVFvdUQsY0FBY2gvQixPQUMzQnhtQixJQUNBelUsS0FBSzBnQixJQUFBQTtBQUdQLG1CQUFPLENBQUNrekIsR0FBWXZtQyxHQUFHdW1DLEdBQVl4aUMsR0FBR3FELEVBQUFBO1VBQ3hDLEVBQUEsR0FFQSxFQUFBak8sS0FBQSxrQkFBQW5ELE9BU1EsU0FDTmdLLElBQ0ErRCxJQUNBcUQsSUFDQXlDLElBQUFBO0FBRUEsZ0JBQU0rakIsS0FBbUIsSUFBWC9qQixLQUFldlgsS0FBSzZSO0FBQ2xDLG1CQUFPLEVBQ0xuRSxHQUFHQSxLQUFJb0gsS0FBUzlVLEtBQUt3VSxJQUFJOG1CLEVBQUFBLEdBQ3pCN3BCLEdBQUdBLEtBQUlxRCxLQUFTOVUsS0FBS3lVLElBQUk2bUIsRUFBQUEsRUFBQUE7VUFFN0IsRUFBQSxHQUVBLEVBQUF6MEIsS0FBQSw2QkFBQW5ELE9BVVEsU0FDTjYyRCxJQUNBL29ELElBQ0F0RixJQUFBQTtBQUVBLGdCQVNJa0wsSUFURTFKLEtBQUl4QixHQUFRd0IsR0FDWitELEtBQUl2RixHQUFRdUYsR0FDZHNhLEtBQU03ZixHQUFRNmYsS0FDZHN1QyxLQUFPbnVELEdBQVFtdUQsTUFDYm5oQyxLQUFZaHRCLEdBQVFndEIsV0FHcEJwa0IsS0FBU3pVLEtBQUs2TCxRQUFRb3VELGNBQWM5aUQsTUFJdENnakQsS0FBd0IsT0FBZHp1QyxLQUFNc3VDLEtBRWhCSSxLQUFpQjtBQUFBLHFCQUNqQnA2RCxLQUFLNkwsUUFBUXd1RCx1QkFBQUEsT0FDWHhoQyxLQUNGdWhDLEtBQWlCcDZELEtBQUs2TCxRQUFRdXVELGVBQWUxNUMsT0FDdEIsTUFBZG1ZLE9BQ1R1aEMsS0FBaUJwNkQsS0FBSzZMLFFBQVF1dUQsZUFBZXRwQztBQUlqRCxnQkFBSXdwQyxLQUFZO0FBQ2hCLGVBQUc7QUFDREgsY0FBQUEsS0FBd0IsT0FBZHp1QyxLQUFNc3VDLEtBRWhCampELEtBQU0vVyxLQUFLdTZELGVBQWVsdEQsSUFBRytELElBQUdxRCxJQUFRMGxELEVBQUFBO0FBQ3hDLGtCQUFNbC9CLEtBQVF0N0IsS0FBSys2QixNQUFNdy9CLEdBQVM5b0QsSUFBSTJGLEdBQUkzRixHQUFHOG9ELEdBQVM3c0QsSUFBSTBKLEdBQUkxSixDQUFBQSxHQVF4RG10RCxLQUxKTixHQUFTdGUsaUJBQWlCenFDLElBQUs4cEIsRUFBQUEsSUFBU20vQixLQUVsQno2RCxLQUFLMlQsS0FDM0IzVCxLQUFLODZELElBQUkxakQsR0FBSTFKLElBQUk2c0QsR0FBUzdzRCxHQUFHLENBQUEsSUFBSzFOLEtBQUs4NkQsSUFBSTFqRCxHQUFJM0YsSUFBSThvRCxHQUFTOW9ELEdBQUcsQ0FBQSxDQUFBO0FBR2pFLGtCQUFJelIsS0FBS3MxQixJQUFJdWxDLEVBQUFBLElBNUJHO0FBNkJkO0FBQ1NBLGNBQUFBLEtBQWEsSUFFbEIzaEMsS0FBWSxJQUNkbk4sS0FBTXl1QyxLQUVOSCxLQUFPRyxLQUdMdGhDLEtBQVksSUFDZG1oQyxLQUFPRyxLQUVQenVDLEtBQU15dUMsSUFBQUEsRUFJUkc7WUFDSCxTQUFRNXVDLE1BQU9zdUMsTUFBUU0sS0FoREY7QUFrRHRCLG1CQUFBdE0sR0FBQUEsR0FBQSxDQUFBLEdBQ0tqM0MsRUFBQUEsR0FBRyxDQUFBLEdBQUEsRUFDTmhDLEdBQUdvbEQsR0FBQUEsQ0FBQUE7VUFFUCxFQUFBLEdBRUEsRUFBQTN6RCxLQUFBLGdCQUFBbkQsT0FPTyxTQUFhdTdDLElBQW1CM00sSUFBQUE7QUFDckMsbUJBQUEsU0FBSTJNLEtBQ0tqL0MsS0FBSzhOLElBQUl6TixLQUFLeTRELGdCQUFnQixNQUFNejRELEtBQUtxNEQsTUFBTXJVLEtBQUt2b0IsS0FBQUEsSUFBQUEsU0FDbER3VyxLQUNGdHlDLEtBQUs4TixJQUFJek4sS0FBS3c0RCxZQUFZLE1BQU14NEQsS0FBS3E0RCxNQUFNclUsS0FBS3ZvQixLQUFBQSxJQUVoRDk3QixLQUFLOE4sSUFBSXpOLEtBQUs2TCxRQUFRcW5DLE9BQU8sTUFBTWx6QyxLQUFLcTRELE1BQU1yVSxLQUFLdm9CLEtBQUFBO1VBRTlELEVBQUEsR0FFQSxFQUFBajFCLEtBQUEsWUFBQW5ELE9BU08sU0FDTDhOLElBQ0FnTixJQUFBQTtBQUVBLGdCQUFBLFVBQUlBLEdBQU91OEMsZUFBeUI7QUFFbEMsa0JBQTZCLFdBQXpCdjhDLEdBQU91OEMsaUJBQTRCMTZELEtBQUswZ0IsS0FBS3JaLE9BQU9ySCxLQUFLOHdCLEdBQUd6cEIsSUFBSTtBQUNsRSxvQkFBTXN6RCxLQUFNeHBELEdBQUl5cEQscUJBQ2Q1NkQsS0FBSzBnQixLQUFLclQsR0FDVnJOLEtBQUswZ0IsS0FBS3RQLEdBQ1ZwUixLQUFLOHdCLEdBQUd6akIsR0FDUnJOLEtBQUs4d0IsR0FBRzFmLENBQUFBLEdBRU55cEQsS0FBWTc2RCxLQUFLMGdCLEtBQUs3VSxRQUFRcy9CLE1BQU02RyxVQUFVRCxRQUM5QytvQixLQUFVOTZELEtBQUs4d0IsR0FBR2psQixRQUFRcy9CLE1BQU02RyxVQUFVRDtBQW9COUMsdUJBQUEsVUFsQkkveEMsS0FBSzBnQixLQUFLaytCLFlBQUFBLFVBQXNCNStDLEtBQUs4d0IsR0FBRzh0QixZQUMxQ2ljLEtBQVlqVixHQUNWNWxELEtBQUswZ0IsS0FBSzdVLFFBQVFzL0IsTUFBTTRHLFFBQ3hCNXpCLEdBQU93bkMsT0FBQUEsR0FFVG1WLEtBQVVsVixHQUNSNWxELEtBQUs4d0IsR0FBR2psQixRQUFRcy9CLE1BQU00RyxRQUN0QjV6QixHQUFPd25DLE9BQUFBLEtBQUFBLFNBRUEzbEQsS0FBSzBnQixLQUFLaytCLFlBQUFBLFVBQXFCNStDLEtBQUs4d0IsR0FBRzh0QixXQUNoRGtjLEtBQVU5NkQsS0FBSzh3QixHQUFHamxCLFFBQVFzL0IsTUFBTTRHLFNBQUFBLFVBQ3ZCL3hDLEtBQUswZ0IsS0FBS2srQixZQUFBQSxTQUFzQjUrQyxLQUFLOHdCLEdBQUc4dEIsYUFDakRpYyxLQUFZNzZELEtBQUswZ0IsS0FBSzdVLFFBQVFzL0IsTUFBTTRHLFNBRXRDNG9CLEdBQUlJLGFBQWEsR0FBR0YsRUFBQUEsR0FDcEJGLEdBQUlJLGFBQWEsR0FBR0QsRUFBQUEsR0FHYkg7Y0FDUjtBQUVELHFCQUE2QixTQUF6Qng4QyxHQUFPdThDLGdCQUNGOVUsR0FBZ0I1bEQsS0FBSzh3QixHQUFHamxCLFFBQVFzL0IsTUFBTTRHLFFBQVE1ekIsR0FBT3duQyxPQUFBQSxJQUdyREMsR0FBZ0I1bEQsS0FBSzBnQixLQUFLN1UsUUFBUXMvQixNQUFNNEcsUUFBUTV6QixHQUFPd25DLE9BQUFBO1lBRWpFO0FBQ0MsbUJBQU9DLEdBQWdCem5DLEdBQU9ndEIsT0FBT2h0QixHQUFPd25DLE9BQUFBO1VBRWhELEVBQUEsR0FFQSxFQUFBbi9DLEtBQUEsV0FBQW5ELE9BU1EsU0FDTjhOLElBQ0FnTixJQUlBOVEsSUFDQStELElBQ0FxRCxJQUFBQTtBQUdBelUsaUJBQUtrcEQsYUFBYS8zQyxJQUFLZ04sRUFBQUE7QUFHdkIsZ0JBQUk2OEMsS0FBWSxHQUNaQyxLQUFvQixJQUFWdDdELEtBQUs2UjtBQUVuQixnQkFBQSxDQUFLeFIsS0FBSzZMLFFBQVFvdUQsY0FBY2lCLHFCQUFxQjtBQUluRCxrQkFBTXh2QyxLQUFNMXJCLEtBQUs2TCxRQUFRb3VELGNBQWNoL0IsT0FDakMrK0IsS0FBT2g2RCxLQUFLNkwsUUFBUW91RCxjQUFjaC9CLFFBQVF0N0IsS0FBSzZSLElBQy9DMnBELEtBQWFuN0QsS0FBSzg1RCwwQkFBMEI5NUQsS0FBSzBnQixNQUFNdlAsSUFBSyxFQUNoRTlELEdBQUFBLElBQ0ErRCxHQUFBQSxJQUNBc2EsS0FBQUEsSUFDQXN1QyxNQUFBQSxJQUNBbmhDLFdBQUFBLEdBQVksQ0FBQSxHQUVSdWlDLEtBQVdwN0QsS0FBSzg1RCwwQkFBMEI5NUQsS0FBSzBnQixNQUFNdlAsSUFBSyxFQUM5RDlELEdBQUFBLElBQ0ErRCxHQUFBQSxJQUNBc2EsS0FBQUEsSUFDQXN1QyxNQUFBQSxJQUNBbmhDLFdBQVcsRUFBQSxDQUFBO0FBRWJtaUMsY0FBQUEsS0FBWXI3RCxLQUFLKzZCLE1BQU15Z0MsR0FBVy9wRCxJQUFJQSxJQUFHK3BELEdBQVc5dEQsSUFBSUEsRUFBQUEsR0FDeEQ0dEQsS0FBVXQ3RCxLQUFLKzZCLE1BQU0wZ0MsR0FBU2hxRCxJQUFJQSxJQUFHZ3FELEdBQVMvdEQsSUFBSUEsRUFBQUE7WUFDbkQ7QUFHRDhELFlBQUFBLEdBQUlHLFVBQUFBLEdBQ0pILEdBQUlJLElBQUlsRSxJQUFHK0QsSUFBR3FELElBQVF1bUQsSUFBV0MsSUFBQUEsS0FBUyxHQUMxQzlwRCxHQUFJNDNDLE9BQUFBLEdBR0ovb0QsS0FBS29wRCxjQUFjajRDLElBQUtnTixFQUFBQTtVQUMxQixFQUFBLEdBRUEsRUFBQTNYLEtBQUEscUJBQUFuRCxPQUtPLFNBQ0xnNEQsSUFDQUMsSUFDQXhvRCxJQUNBQyxJQUNBd29ELElBQ0FDLElBQUFBO0FBRUEsZ0JBQUl4N0QsS0FBSzBnQixRQUFRMWdCLEtBQUs4d0I7QUFDcEIscUJBQU85d0IsS0FBS3k3RCxtQkFBbUJKLElBQUlDLElBQUl4b0QsSUFBSUMsSUFBSXdvRCxJQUFJQyxFQUFBQTtBQUVuRCxnQkFBcURFLEtBQUExc0MsR0FBOUJodkIsS0FBS3E1RCxlQUFBQSxNQUFleDZDLEdBQVUsQ0FBQSxHQUE5Q3hSLEtBQUNxdUQsR0FBQSxDQUFBLEdBQUV0cUQsS0FBQ3NxRCxHQUFBLENBQUEsR0FBRWpuRCxLQUFNaW5ELEdBQUEsQ0FBQSxHQUNieG9ELEtBQUs3RixLQUFJa3VELElBQ1Rwb0QsS0FBSy9CLEtBQUlvcUQ7QUFDZixtQkFBTzc3RCxLQUFLczFCLElBQUl0MUIsS0FBSzJULEtBQUtKLEtBQUtBLEtBQUtDLEtBQUtBLEVBQUFBLElBQU1zQixFQUFBQTtVQUVuRCxFQUFBLEdBMEJBLEVBQUFqTyxLQUFBLHNCQUFBbkQsT0FXVSxTQUNSZzRELElBQ0FDLElBQ0F4b0QsSUFDQUMsSUFDQXdvRCxJQUNBQyxJQUFBQTtBQUVBLGdCQUFNRyxLQUFLN29ELEtBQUt1b0QsSUFDVk8sS0FBSzdvRCxLQUFLdW9ELElBRVpqc0MsT0FBTWtzQyxLQUFLRixNQUFNTSxNQUFNSCxLQUFLRixNQUFNTSxPQURwQkQsS0FBS0EsS0FBS0MsS0FBS0E7QUFHN0J2c0MsWUFBQUEsS0FBSSxJQUNOQSxLQUFJLElBQ0tBLEtBQUksTUFDYkEsS0FBSTtBQUdOLGdCQUVNbmMsS0FGSW1vRCxLQUFLaHNDLEtBQUlzc0MsS0FFSkosSUFDVHBvRCxLQUZJbW9ELEtBQUtqc0MsS0FBSXVzQyxLQUVKSjtBQVFmLG1CQUFPNzdELEtBQUsyVCxLQUFLSixLQUFLQSxLQUFLQyxLQUFLQSxFQUFBQTtVQUNsQyxFQUFBLEdBc0NBLEVBQUEzTSxLQUFBLGdCQUFBbkQsT0FDTyxTQUNMOE4sSUFDQStGLElBQ0E0aEQsSUFDQUYsSUFDQUMsSUFDQTE2QyxJQUFBQTtBQUdBLGdCQUFJOGMsSUFDQTRnQyxJQUNBQyxJQUNBQyxJQUNBQyxJQUNBQyxJQUNBOWpELElBQ0VpdEMsS0FBb0JqbkMsR0FBTyswQjtBQUVoQix1QkFBYmg4QixNQUNGNGtELEtBQVE5N0QsS0FBSzBnQixNQUNicTdDLEtBQVEvN0QsS0FBSzh3QixJQUNia3JDLEtBQVc3OUMsR0FBTys5QyxpQkFBa0IsR0FDcENELEtBQWN0OEQsS0FBS3MxQixJQUFJOVcsR0FBTys5QyxjQUFBQSxHQUM5Qi9qRCxLQUFPZ0csR0FBT2crQyxpQkFDUSxTQUFiamxELE1BQ1Q0a0QsS0FBUTk3RCxLQUFLOHdCLElBQ2JpckMsS0FBUS83RCxLQUFLMGdCLE1BQ2JzN0MsS0FBVzc5QyxHQUFPaStDLGVBQWdCLEdBQ2xDSCxLQUFjdDhELEtBQUtzMUIsSUFBSTlXLEdBQU9pK0MsWUFBQUEsR0FDOUJqa0QsS0FBT2dHLEdBQU9rK0MsZ0JBRWRQLEtBQVE5N0QsS0FBSzh3QixJQUNiaXJDLEtBQVEvN0QsS0FBSzBnQixNQUNiczdDLEtBQVc3OUMsR0FBT20rQyxtQkFBb0IsR0FDdENMLEtBQWN0OEQsS0FBS3MxQixJQUFJOVcsR0FBT20rQyxnQkFBQUEsR0FDOUJua0QsS0FBT2dHLEdBQU9vK0M7QUFHaEIsZ0JBQU03M0QsS0FBUyxLQUFLdTNELEtBQWMsSUFBSTdXO0FBR3RDLGdCQUFJMFcsTUFBU0MsSUFBTztBQUNsQixrQkFJTVMsS0FBaUI5M0QsS0FKTyszRCxHQUM1QlgsR0FBTXp1RCxJQUFJMHVELEdBQU0xdUQsR0FDaEJ5dUQsR0FBTTFxRCxJQUFJMnFELEdBQU0zcUQsQ0FBQUE7QUFJbEIsa0JBQWlCLGFBQWI4RjtBQUVGLG9CQUFBLFNBQUlsWCxLQUFLNkwsUUFBUTZ3RCxPQUFPL3ZCLFNBQWtCO0FBQ3hDLHNCQUFNZ3dCLEtBQVMzOEQsS0FBSzY1RCxvQkFBb0JpQyxJQUFPM3FELElBQUssRUFBRXlyRCxLQUFLOUQsR0FBQUEsQ0FBQUEsR0FDckQrRCxLQUFXNzhELEtBQUs4OEQsU0FDcEJILEdBQU81bkQsSUFBSXluRCxNQUErQixXQUFidGxELEtBQXNCLElBQUEsS0FDbkQ0aEQsRUFBQUE7QUFFRjc5QixrQkFBQUEsS0FBUXQ3QixLQUFLKzZCLE1BQU1paUMsR0FBT3ZyRCxJQUFJeXJELEdBQVN6ckQsR0FBR3VyRCxHQUFPdHZELElBQUl3dkQsR0FBU3h2RCxDQUFBQSxHQUM5RHd1RCxLQUFhYztnQkFDZDtBQUNDMWhDLGtCQUFBQSxLQUFRdDdCLEtBQUsrNkIsTUFBTW9oQyxHQUFNMXFELElBQUkycUQsR0FBTTNxRCxHQUFHMHFELEdBQU16dUQsSUFBSTB1RCxHQUFNMXVELENBQUFBLEdBQ3REd3VELEtBQWE3N0QsS0FBSzY1RCxvQkFBb0JpQyxJQUFPM3FELEVBQUFBO21CQUUxQztBQUVMLG9CQUFNNHJELE1BQWNmLEtBQUFBLENBQVlRLEtBQWlCQSxNQUFrQixHQUM3RFEsS0FBWWg5RCxLQUFLODhELFNBQVMsTUFBTUMsSUFBWWpFLEVBQUFBLEdBQzVDbUUsS0FBWWo5RCxLQUFLODhELFNBQVMsTUFBTUMsSUFBWWpFLEVBQUFBO0FBQ2xENzlCLGdCQUFBQSxLQUFRdDdCLEtBQUsrNkIsTUFDWHNpQyxHQUFVNXJELElBQUk2ckQsR0FBVTdyRCxHQUN4QjRyRCxHQUFVM3ZELElBQUk0dkQsR0FBVTV2RCxDQUFBQSxHQUUxQnd1RCxLQUFhNzdELEtBQUs4OEQsU0FBUyxLQUFLaEUsRUFBQUE7Y0FDakM7WUFDRixPQUFNO0FBRUwsa0JBQStDb0UsS0FBQWx1QyxHQUF4Qmh2QixLQUFLcTVELGVBQWVsb0QsRUFBQUEsR0FBSSxDQUFBLEdBQXhDOUQsS0FBQzZ2RCxHQUFBLENBQUEsR0FBRTlyRCxLQUFDOHJELEdBQUEsQ0FBQSxHQUFFem9ELEtBQU15b0QsR0FBQSxDQUFBO0FBRW5CLGtCQUFpQixXQUFiaG1ELElBQXFCO0FBQ3ZCLG9CQUFNd1UsS0FBTTFyQixLQUFLNkwsUUFBUW91RCxjQUFjaC9CLE9BQ2pDKytCLEtBQU9oNkQsS0FBSzZMLFFBQVFvdUQsY0FBY2gvQixRQUFRdDdCLEtBQUs2UixJQUUvQ21yRCxLQUFTMzhELEtBQUs4NUQsMEJBQTBCOTVELEtBQUswZ0IsTUFBTXZQLElBQUssRUFDNUQ5RCxHQUFBQSxJQUNBK0QsR0FBQUEsSUFDQXNhLEtBQUFBLElBQ0FzdUMsTUFBQUEsSUFDQW5oQyxXQUFBQSxHQUFZLENBQUE7QUFFZG9DLGdCQUFBQSxLQUFBQSxLQUFRMGhDLEdBQU81bkQsSUFBU3BWLEtBQUs2UixLQUFLLE1BQU03UixLQUFLNlIsS0FBSyxNQUFNN1IsS0FBSzZSLElBQzdEcXFELEtBQWFjO2NBQ2QsV0FBdUIsU0FBYnpsRCxJQUFtQjtBQUM1QixvQkFBTXdVLEtBQU0xckIsS0FBSzZMLFFBQVFvdUQsY0FBY2gvQixPQUNqQysrQixLQUFPaDZELEtBQUs2TCxRQUFRb3VELGNBQWNoL0IsUUFBUXQ3QixLQUFLNlIsSUFFL0NtckQsS0FBUzM4RCxLQUFLODVELDBCQUEwQjk1RCxLQUFLMGdCLE1BQU12UCxJQUFLLEVBQzVEOUQsR0FBQUEsSUFDQStELEdBQUFBLElBQ0FzYSxLQUFBQSxJQUNBc3VDLE1BQUFBLElBQ0FuaEMsV0FBVyxFQUFBLENBQUE7QUFFYm9DLGdCQUFBQSxLQUFBQSxLQUFRMGhDLEdBQU81bkQsSUFBU3BWLEtBQUs2UixLQUFLLE1BQU03UixLQUFLNlIsS0FBSyxNQUFNN1IsS0FBSzZSLElBQzdEcXFELEtBQWFjO2NBQ2QsT0FBTTtBQUNMLG9CQUFNNWxELEtBQU0vVyxLQUFLNkwsUUFBUW91RCxjQUFjaC9CLFNBQVMsSUFBSXQ3QixLQUFLNlI7QUFDekRxcUQsZ0JBQUFBLEtBQWE3N0QsS0FBS3U2RCxlQUFlbHRELElBQUcrRCxJQUFHcUQsSUFBUXNDLEVBQUFBLEdBQy9Da2tCLEtBQUFBLEtBQVFsa0IsS0FBV3BYLEtBQUs2UixLQUFLLE1BQU03UixLQUFLNlIsS0FBSyxNQUFNN1IsS0FBSzZSO2NBQ3pEO1lBQ0Y7QUFNRCxtQkFBTyxFQUNMb04sT0FBT2k5QyxJQUNQc0IsTUFKZ0IsRUFBRTl2RCxHQUZUd3VELEdBQVd4dUQsSUFBYSxNQUFUM0ksS0FBZS9FLEtBQUt3VSxJQUFJOG1CLEVBQUFBLEdBRXZCN3BCLEdBRGhCeXFELEdBQVd6cUQsSUFBYSxNQUFUMU0sS0FBZS9FLEtBQUt5VSxJQUFJNm1CLEVBQUFBLEVBQUFBLEdBTWhEQSxPQUFPQSxJQUNQdjJCLFFBQVFBLElBQ1J5VCxNQUFNQSxHQUFBQTtVQUVWLEVBQUEsR0FFQSxFQUFBM1IsS0FBQSxpQkFBQW5ELE9BQ08sU0FDTDhOLElBQ0FnTixJQVVBeTZDLElBQ0FDLElBQ0FoQyxJQUFBQTtBQUdBMWxELFlBQUFBLEdBQUlrMEMsY0FBY3JsRCxLQUFLZzVELFNBQVM3bkQsSUFBS2dOLEVBQUFBLEdBQ3JDaE4sR0FBSW96QyxZQUFZcHpDLEdBQUlrMEMsYUFDcEJsMEMsR0FBSWkwQyxZQUFZam5DLEdBQU8rMEIsT0FFUGlsQixHQUFVM2tELEtBQUtyQyxJQUFLMGxELEVBQUFBLE1BSWxDNzJELEtBQUtrcEQsYUFBYS8zQyxJQUFLZ04sRUFBQUEsR0FDdkJnckMsR0FBQWg0QyxFQUFBQSxFQUFHclEsS0FBSHFRLEVBQUFBLEdBRUFuUixLQUFLb3BELGNBQWNqNEMsSUFBS2dOLEVBQUFBO1VBRTVCLEVBQUEsR0FFQSxFQUFBM1gsS0FBQSxnQkFBQW5ELE9BTU8sU0FDTDhOLElBQ0FnTixJQUFBQTtBQUFBQSxxQkFLSUEsR0FBTzZwQyxXQUNUNzJDLEdBQUk4MkMsY0FBYzlwQyxHQUFPOHBDLGFBQ3pCOTJDLEdBQUkrMkMsYUFBYS9wQyxHQUFPZ3FDLFlBQ3hCaDNDLEdBQUlpM0MsZ0JBQWdCanFDLEdBQU9rcUMsU0FDM0JsM0MsR0FBSW0zQyxnQkFBZ0JucUMsR0FBT29xQztVQUUvQixFQUFBLEdBRUEsRUFBQS9oRCxLQUFBLGlCQUFBbkQsT0FNTyxTQUNMOE4sSUFDQWdOLElBQUFBO0FBQUFBLHFCQUVJQSxHQUFPNnBDLFdBQ1Q3MkMsR0FBSTgyQyxjQUFjLGlCQUNsQjkyQyxHQUFJKzJDLGFBQWEsR0FDakIvMkMsR0FBSWkzQyxnQkFBZ0IsR0FDcEJqM0MsR0FBSW0zQyxnQkFBZ0I7VUFFeEIsRUFBQSxHQUVBLEVBQUE5aEQsS0FBQSxrQkFBQW5ELE9BTU8sU0FDTDhOLElBQ0FnTixJQUFBQTtBQUtBLGdCQUFBLFVBQUlBLEdBQU8yekIsWUFBc0I7QUFFL0Isa0JBQU1zckIsS0FBYyxFQUNsQi9YLGFBQWFsMEMsR0FBSWswQyxhQUNqQkQsV0FBV2owQyxHQUFJaTBDLFdBQ2ZzRCxRQUFTdjNDLEdBQVl1M0MsT0FBQUE7QUFHdkJ2M0MsY0FBQUEsR0FBSWswQyxjQUFjbG5DLEdBQU9rL0MsaUJBQ3pCbHNELEdBQUlpMEMsWUFBWWpuQyxHQUFPbS9DLGdCQUN2QnQ5RCxLQUFLdTlELGdCQUFnQnBzRCxJQUFLZ04sR0FBT3EvQyxnQkFBQUEsR0FFakNyc0QsR0FBSTQzQyxPQUFBQSxHQUdKNTNDLEdBQUlrMEMsY0FBYytYLEdBQVkvWCxhQUM5QmwwQyxHQUFJaTBDLFlBQVlnWSxHQUFZaFksV0FDM0JqMEMsR0FBWXUzQyxTQUFTMFUsR0FBWTFVLFFBQ2xDMW9ELEtBQUt1OUQsZ0JBQWdCcHNELElBQUtnTixHQUFPdXFDLE1BQUFBO1lBQ2xDO1VBQ0gsRUFBQSxHQUVBLEVBQUFsaUQsS0FBQSxtQkFBQW5ELE9BTU8sU0FDTDhOLElBQ0F1M0MsSUFBQUE7QUFFQSxnQkFBQSxVQUFJQTtBQUNGLGtCQUFBLFdBQUl2M0MsR0FBSXMzQyxhQUEyQjtBQUNqQyxvQkFBTXoxQyxLQUFVaWMsR0FBY3k1QixFQUFBQSxJQUFVQSxLQUFTLENBQUMsR0FBRyxDQUFBO0FBQ3JEdjNDLGdCQUFBQSxHQUFJczNDLFlBQVl6MUMsRUFBQUE7Y0FDakI7QUFDQ20xQix3QkFBUUMsS0FDTixpRkFBQTs7QUFBQSx5QkFJQWozQixHQUFJczNDLGNBQ050M0MsR0FBSXMzQyxZQUFZLENBQUEsQ0FBQSxJQUVoQnRnQixRQUFRQyxLQUNOLGlGQUFBO1VBSVIsRUFBQSxDQUFBLENBQUEsR0FBQ2d3QjtRQUFBLEVBeDVCMkI7QUFBQSxpQkFBQSxHQUFBcmpELElBQUFxYSxJQUFBO0FBQUEsY0FBQXhnQixLQUFBLEdBQUFtRyxFQUFBO0FBQUEsY0FBQSxJQUFBO0FBQUEsZ0JBQUFvWSxLQUFBLEdBQUFwWSxFQUFBO0FBQUEsWUFBQXFhLE9BQUFqQyxLQUFBLEdBQUFBLEVBQUEsRUFBQSxLQUFBQSxJQUFBLFNBQUFpQyxJQUFBO0FBQUEscUJBQUEsR0FBQXJhLElBQUFxYSxFQUFBLEVBQUE7WUFBQSxDQUFBLElBQUF4Z0IsR0FBQSxLQUFBLE1BQUFBLElBQUF1ZSxFQUFBO1VBQUE7QUFBQSxpQkFBQXZlO1FBQUE7QUFBQSxpQkFBQSxHQUFBbUcsSUFBQTtBQUFBLG1CQUFBcWEsS0FBQSxHQUFBQSxLQUFBLFVBQUEsUUFBQUEsTUFBQTtBQUFBLGdCQUFBeGdCLElBQUF1ZSxJQUFBN2YsS0FBQSxRQUFBLFVBQUE4aEIsRUFBQSxJQUFBLFVBQUFBLEVBQUEsSUFBQSxDQUFBO0FBQUEsWUFBQUEsS0FBQSxJQUFBLEdBQUF4Z0IsS0FBQSxHQUFBLE9BQUF0QixFQUFBLEdBQUEsSUFBQSxDQUFBLEVBQUEsS0FBQXNCLElBQUEsU0FBQXdnQixJQUFBO0FBQUEsaUJBQUFyYSxJQUFBcWEsSUFBQTloQixHQUFBOGhCLEVBQUEsQ0FBQTtZQUFBLENBQUEsSUFBQSxLQUFBLEdBQUFyYSxJQUFBLEdBQUF6SCxFQUFBLENBQUEsSUFBQSxHQUFBNmYsS0FBQSxHQUFBLE9BQUE3ZixFQUFBLENBQUEsQ0FBQSxFQUFBLEtBQUE2ZixJQUFBLFNBQUFpQyxJQUFBO0FBQUEsaUJBQUFyYSxJQUFBcWEsSUFBQSxHQUFBOWhCLElBQUE4aEIsRUFBQSxDQUFBO1lBQUEsQ0FBQTtVQUFBO0FBQUEsaUJBQUFyYTtRQUFBO0FBQUEsaUJBQUEsR0FBQUEsSUFBQTtBQUFBLGNBQUFxYSxLQUFBLFdBQUE7QUFBQSxnQkFBQSxlQUFBLE9BQUEsV0FBQSxDQUFBO0FBQUEscUJBQUE7QUFBQSxnQkFBQSxHQUFBO0FBQUEscUJBQUE7QUFBQSxnQkFBQSxjQUFBLE9BQUE7QUFBQSxxQkFBQTtBQUFBLGdCQUFBO0FBQUEscUJBQUEsUUFBQSxVQUFBLFFBQUEsS0FBQSxHQUFBLFNBQUEsQ0FBQSxHQUFBLFdBQUE7Y0FBQSxDQUFBLENBQUEsR0FBQTtZQUFBLFNBQUFyYSxJQUFBO0FBQUEscUJBQUE7WUFBQTtVQUFBLEVBQUE7QUFBQSxpQkFBQSxXQUFBO0FBQUEsZ0JBQUFuRyxJQUFBdWUsS0FBQSxHQUFBcFksRUFBQTtBQUFBLGdCQUFBcWEsSUFBQTtBQUFBLGtCQUFBOWhCLEtBQUEsR0FBQSxJQUFBLEVBQUE7QUFBQSxjQUFBc0IsS0FBQSxHQUFBdWUsSUFBQSxXQUFBN2YsRUFBQTtZQUFBO0FBQUEsY0FBQXNCLEtBQUF1ZSxHQUFBLE1BQUEsTUFBQSxTQUFBO0FBQUEsbUJBQUEsR0FBQSxNQUFBdmUsRUFBQTtVQUFBO1FBQUE7QUNsQlI2dUQsWUFBQUEsS0FBQUEsU0FBb0JDLElBQUFBO0FBQUF0VyxVQUFBQSxJQUFBcVcsSUFBQUMsRUFBQUE7QUFBQSxjQUFBNzBCLEtBQUE0Z0IsR0FBQWdVLEVBQUFBO0FBUXhDLG1CQUFBQSxHQUFtQjV4RCxJQUFzQnNwQyxJQUFhc1MsSUFBQUE7QUFBa0IsbUJBQUE5akMsR0FBQUEsTUFBQTg1QyxFQUFBQSxHQUFBNTBCLEdBQUEvbkMsS0FBQWQsTUFDaEU2TCxJQUFTc3BDLElBQU1zUyxFQUFBQTtVQUN2QjtBQXVNQyxpQkE5TEQ1NUIsR0FBQTR2QyxJQUFBLENBQUEsRUFBQWozRCxLQUFBLDZCQUFBbkQsT0FVVSxTQUNSNjJELElBQ0Evb0QsSUFBQUE7QUFDd0MsZ0JBUXBDNEYsSUFDQW9qRCxJQVRKckIsS0FBZTczRCxVQUFBeUQsU0FBQUEsS0FBQUEsV0FBQXpELFVBQUEsQ0FBQSxJQUFBQSxVQUFBLENBQUEsSUFBQWpCLEtBQUsyOUQsbUJBQUFBLEdBSWhCajlDLEtBQUFBLE9BQ0FzNUMsS0FBTyxHQUNQdHVDLEtBQU0sR0FDTmlPLEtBQU8zNUIsS0FBSzh3QixJQUlac3BDLEtBQWlCcDZELEtBQUs2TCxRQUFRdXVELGlCQUM5QnA2RCxLQUFLNkwsUUFBUXV1RCxlQUFldHBDLEtBQzVCO0FBRUFvcEMsWUFBQUEsR0FBUzd5RCxPQUFPckgsS0FBSzBnQixLQUFLclosT0FDNUJzeUIsS0FBTzM1QixLQUFLMGdCLE1BQ1pBLEtBQUFBLE1BRUEwNUMsS0FBaUJwNkQsS0FBSzZMLFFBQVF1dUQsaUJBQzFCcDZELEtBQUs2TCxRQUFRdXVELGVBQWUxNUMsT0FDNUIsSUFBQSxVQUdGMWdCLEtBQUs2TCxRQUFRd3VELHVCQUNmRCxLQUFpQjtBQUduQixnQkFBSUUsS0FBWTtBQUNoQixlQUFHO0FBQ0RILGNBQUFBLEtBQXdCLE9BQWR6dUMsS0FBTXN1QyxLQUVoQmpqRCxLQUFNL1csS0FBSzg4RCxTQUFTM0MsSUFBUXJCLEVBQUFBO0FBQzVCLGtCQUFNNzlCLEtBQVF0N0IsS0FBSys2QixNQUFNZixHQUFLdm9CLElBQUkyRixHQUFJM0YsR0FBR3VvQixHQUFLdHNCLElBQUkwSixHQUFJMUosQ0FBQUEsR0FRaERtdEQsS0FMSjdnQyxHQUFLaWlCLGlCQUFpQnpxQyxJQUFLOHBCLEVBQUFBLElBQVNtL0IsS0FFZHo2RCxLQUFLMlQsS0FDM0IzVCxLQUFLODZELElBQUkxakQsR0FBSTFKLElBQUlzc0IsR0FBS3RzQixHQUFHLENBQUEsSUFBSzFOLEtBQUs4NkQsSUFBSTFqRCxHQUFJM0YsSUFBSXVvQixHQUFLdm9CLEdBQUcsQ0FBQSxDQUFBO0FBR3pELGtCQUFJelIsS0FBS3MxQixJQUFJdWxDLEVBQUFBLElBdkNHO0FBd0NkO0FBQ1NBLGNBQUFBLEtBQWEsSUFBQSxVQUVsQjk1QyxLQUNGZ0wsS0FBTXl1QyxLQUVOSCxLQUFPRyxLQUFBQSxVQUdMejVDLEtBQ0ZzNUMsS0FBT0csS0FFUHp1QyxLQUFNeXVDLElBQUFBLEVBSVJHO1lBQ0gsU0FBUTV1QyxNQUFPc3VDLE1BQVFNLEtBMURGO0FBNER0QixtQkFBQXRNLEdBQUFBLEdBQUEsQ0FBQSxHQUNLajNDLEVBQUFBLEdBQUcsQ0FBQSxHQUFBLEVBQ05oQyxHQUFHb2xELEdBQUFBLENBQUFBO1VBRVAsRUFBQSxHQUVBLEVBQUEzekQsS0FBQSw0QkFBQW5ELE9BY1UsU0FDUmc0RCxJQUNBQyxJQUNBeG9ELElBQ0FDLElBQ0F3b0QsSUFDQUMsSUFDQW9CLElBQUFBO0FBR0EsZ0JBQ0l0akMsSUFDQTFxQixJQUFHbUcsSUFBRzFILElBQUcrRCxJQUZUd3NELEtBQWMsS0FHZEMsS0FBUXhDLElBQ1J5QyxLQUFReEM7QUFDWixpQkFBSzFzRCxLQUFJLEdBQUdBLEtBQUksSUFBSUE7QUFDbEJtRyxjQUFBQSxLQUFJLE1BQU1uRyxJQUNWdkIsS0FDRTFOLEtBQUs4NkQsSUFBSSxJQUFJMWxELElBQUcsQ0FBQSxJQUFLc21ELEtBQUssSUFBSXRtRCxNQUFLLElBQUlBLE1BQUs2bkQsR0FBSXZ2RCxJQUFJMU4sS0FBSzg2RCxJQUFJMWxELElBQUcsQ0FBQSxJQUFLakMsSUFDdkUxQixLQUNFelIsS0FBSzg2RCxJQUFJLElBQUkxbEQsSUFBRyxDQUFBLElBQUt1bUQsS0FBSyxJQUFJdm1ELE1BQUssSUFBSUEsTUFBSzZuRCxHQUFJeHJELElBQUl6UixLQUFLODZELElBQUkxbEQsSUFBRyxDQUFBLElBQUtoQyxJQUNuRW5FLEtBQUksTUFFTmd2RCxNQURBdGtDLEtBQVd0NUIsS0FBSys5RCxtQkFBbUJGLElBQU9DLElBQU96d0QsSUFBRytELElBQUdtcUQsSUFBSUMsRUFBQUEsS0FDbENvQyxLQUFjdGtDLEtBQVdza0MsS0FFcERDLEtBQVF4d0QsSUFDUnl3RCxLQUFRMXNEO0FBR1YsbUJBQU93c0Q7VUFDVCxFQUFBLEdBRUEsRUFBQXAzRCxLQUFBLGdCQUFBbkQsT0FXVSxTQUNSOE4sSUFDQWdOLElBU0E2L0MsSUFDQUMsSUFBQUE7QUFFQTlzRCxZQUFBQSxHQUFJRyxVQUFBQSxHQUNKSCxHQUFJVyxPQUFPOVIsS0FBSzA0RCxVQUFVcnJELEdBQUdyTixLQUFLMDRELFVBQVV0bkQsQ0FBQUEsR0FFNUIsUUFBWjRzRCxNQUFrQyxRQUFkQSxHQUFTM3dELElBQ2YsUUFBWjR3RCxNQUFrQyxRQUFkQSxHQUFTNXdELElBQy9COEQsR0FBSXFCLGNBQ0Z3ckQsR0FBUzN3RCxHQUNUMndELEdBQVM1c0QsR0FDVDZzRCxHQUFTNXdELEdBQ1Q0d0QsR0FBUzdzRCxHQUNUcFIsS0FBSzI0RCxRQUFRdHJELEdBQ2JyTixLQUFLMjRELFFBQVF2bkQsQ0FBQUEsSUFHZkQsR0FBSStzRCxpQkFDRkYsR0FBUzN3RCxHQUNUMndELEdBQVM1c0QsR0FDVHBSLEtBQUsyNEQsUUFBUXRyRCxHQUNick4sS0FBSzI0RCxRQUFRdm5ELENBQUFBLElBS2pCRCxHQUFJWSxPQUFPL1IsS0FBSzI0RCxRQUFRdHJELEdBQUdyTixLQUFLMjRELFFBQVF2bkQsQ0FBQUEsR0FJMUNwUixLQUFLbStELGVBQWVodEQsSUFBS2dOLEVBQUFBLEdBR3pCbmUsS0FBS2twRCxhQUFhLzNDLElBQUtnTixFQUFBQSxHQUN2QmhOLEdBQUk0M0MsT0FBQUEsR0FDSi9vRCxLQUFLb3BELGNBQWNqNEMsSUFBS2dOLEVBQUFBO1VBQzFCLEVBQUEsR0FFQSxFQUFBM1gsS0FBQSxjQUFBbkQsT0FDTyxXQUFBO0FBQ0wsbUJBQU9yRCxLQUFLMjlELG1CQUFBQTtVQUNkLEVBQUEsQ0FBQSxDQUFBLEdBQUNGO1FBQUEsRUFqTitDckYsRUFBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxlQUFBQSxPQUFBQSxXQUFBQSxDQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsY0FBQUEsT0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQTtBQUFBQSxxQkFBQUEsUUFBQUEsVUFBQUEsUUFBQUEsS0FBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsR0FBQUEsV0FBQUE7Y0FBQUEsQ0FBQUEsQ0FBQUEsR0FBQUE7WUFBQUEsU0FBQUEsSUFBQUE7QUFBQUEscUJBQUFBO1lBQUFBO1VBQUFBLEVBQUFBO0FBQUFBLGlCQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUEsS0FBQUEsR0FBQUEsRUFBQUE7QUFBQUEsZ0JBQUFBLElBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxHQUFBQSxJQUFBQSxXQUFBQSxFQUFBQTtZQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxHQUFBQSxNQUFBQSxNQUFBQSxTQUFBQTtBQUFBQSxtQkFBQUEsR0FBQUEsTUFBQUEsRUFBQUE7VUFBQUE7UUFBQUE7QUNHckNnRyxZQUFBQSxLQUFBQSxTQUFrQkMsSUFBQUE7QUFBQWpYLFVBQUFBLElBQUFnWCxJQUFBQyxFQUFBQTtBQUFBLGNBQUF4MUIsS0FBQTRnQixHQUFBMlUsRUFBQUE7QUFXN0IsbUJBQUFBLEdBQW1CdnlELElBQXNCc3BDLElBQWFzUyxJQUFBQTtBQUFrQixnQkFBQTlvQjtBQU1ELG1CQU5DaGIsR0FBQUEsTUFBQXk2QyxFQUFBQSxJQUV0RXovQixLQUFBa0ssR0FBQS9uQyxLQUFBZCxNQUFNNkwsSUFBU3NwQyxJQUFNc1MsRUFBQUEsR0FaaEJtVixNQUFhaitCLEdBQUtpK0IsS0FhdkJqK0IsR0FBSzIvQixpQkFBaUIsV0FBQTtBQUNwQjMvQixjQUFBQSxHQUFLNC9CLG1CQUFBQTtZQUFBQSxHQUVQNS9CLEdBQUswNUIsTUFBTTdFLFFBQVFyK0MsR0FBRywwQkFBMEJ3cEIsR0FBSzIvQixjQUFBQSxHQUFnQjMvQjtVQUN2RTtBQTRLQyxpQkExS0Q5USxHQUFBdXdDLElBQUEsQ0FBQSxFQUFBNTNELEtBQUEsY0FBQW5ELE9BQ08sU0FBV3dJLElBQUFBO0FBQ2hCbXFELGVBQUExTyxHQUFBOFcsR0FBQXg5RCxTQUFBQSxHQUFBLGNBQUFaLElBQUFBLEVBQUFjLEtBQUFkLE1BQWlCNkwsRUFBQUE7QUFHakIsZ0JBQUkyeUQsS0FBQUE7QUFDQXgrRCxpQkFBSzZMLFFBQVFtbEQsWUFBWW5sRCxHQUFRbWxELFlBQ25Dd04sS0FBQUEsT0FJRngrRCxLQUFLNkwsVUFBVUEsSUFDZjdMLEtBQUtxSCxLQUFLckgsS0FBSzZMLFFBQVF4RSxJQUN2QnJILEtBQUswZ0IsT0FBTzFnQixLQUFLcTRELE1BQU1qc0IsTUFBTXBzQyxLQUFLNkwsUUFBUTZVLElBQUFBLEdBQzFDMWdCLEtBQUs4d0IsS0FBSzl3QixLQUFLcTRELE1BQU1qc0IsTUFBTXBzQyxLQUFLNkwsUUFBUWlsQixFQUFBQSxHQUd4Qzl3QixLQUFLeStELGlCQUFBQSxHQUNMeitELEtBQUswK0QsUUFBQUEsR0FBQUEsU0FHREYsT0FDRngrRCxLQUFLNDhELElBQUkxYixXQUFXLEVBQUU4UCxTQUFTaHhELEtBQUs2TCxRQUFRbWxELFFBQUFBLENBQUFBLEdBQzVDaHhELEtBQUt1K0QsbUJBQUFBO1VBRVQsRUFBQSxHQUVBLEVBQUEvM0QsS0FBQSxXQUFBbkQsT0FDTyxXQUFBO0FBQ0xyRCxpQkFBSzBnQixPQUFPMWdCLEtBQUtxNEQsTUFBTWpzQixNQUFNcHNDLEtBQUs2TCxRQUFRNlUsSUFBQUEsR0FDMUMxZ0IsS0FBSzh3QixLQUFLOXdCLEtBQUtxNEQsTUFBTWpzQixNQUFNcHNDLEtBQUs2TCxRQUFRaWxCLEVBQUFBLEdBQUFBLFdBRXRDOXdCLEtBQUswZ0IsUUFBQUEsV0FDTDFnQixLQUFLOHdCLE1BQUFBLFVBQ0w5d0IsS0FBSzZMLFFBQVFtbEQsV0FLVGh4RCxLQUFLMGdCLEtBQUtyWixPQUFPckgsS0FBSzh3QixHQUFHenBCLEtBSDdCckgsS0FBSzQ4RCxJQUFJMWIsV0FBVyxFQUFFOFAsU0FBQUEsTUFBUyxDQUFBLElBTTdCaHhELEtBQUs0OEQsSUFBSTFiLFdBQVcsRUFBRThQLFNBQUFBLEtBQVMsQ0FBQTtVQUdyQyxFQUFBLEdBRUEsRUFBQXhxRCxLQUFBLFdBQUFuRCxPQUNPLFdBQUE7QUFFTCxtQkFEQXJELEtBQUtxNEQsTUFBTTdFLFFBQVFoK0MsSUFBSSwwQkFBMEJ4VixLQUFLcytELGNBQUFBLEdBQUFBLFdBQ2xEdCtELEtBQUs0OEQsUUFBQUEsT0FDQTU4RCxLQUFLcTRELE1BQU1qc0IsTUFBTXBzQyxLQUFLNDhELElBQUl2MUQsRUFBQUEsR0FDakNySCxLQUFLNDhELE1BQUFBLFFBQU0vOUM7VUFJZixFQUFBLEdBRUEsRUFBQXJZLEtBQUEsb0JBQUFuRCxPQVVPLFdBQUE7QUFDTCxnQkFBQSxXQUFJckQsS0FBSzQ4RCxLQUFtQjtBQUMxQixrQkFBTWpMLEtBQVMsWUFBWTN4RCxLQUFLcUgsSUFDMUJzeUIsS0FBTzM1QixLQUFLcTRELE1BQU1yRixVQUFVQyxXQUFXLEVBQzNDNXJELElBQUlzcUQsSUFDSnhoQixPQUFPLFVBQ1A2Z0IsU0FBQUEsTUFDQUQsUUFBQUEsS0FBUSxDQUFBO0FBRVYvd0QsbUJBQUtxNEQsTUFBTWpzQixNQUFNdWxCLEVBQUFBLElBQVVoNEIsSUFDM0IzNUIsS0FBSzQ4RCxNQUFNampDLElBQ1gzNUIsS0FBSzQ4RCxJQUFJK0IsZUFBZTMrRCxLQUFLcUgsSUFDN0JySCxLQUFLdStELG1CQUFBQTtZQUNOO1VBQ0gsRUFBQSxHQUVBLEVBQUEvM0QsS0FBQSxzQkFBQW5ELE9BR08sV0FBQTtBQUFBLHVCQUVIckQsS0FBSzQ4RCxPQUFBQSxXQUNMNThELEtBQUswZ0IsUUFBQUEsV0FDTDFnQixLQUFLOHdCLE1BRUw5d0IsS0FBSzQ4RCxJQUFJdnZELElBQUksT0FBT3JOLEtBQUswZ0IsS0FBS3JULElBQUlyTixLQUFLOHdCLEdBQUd6akIsSUFDMUNyTixLQUFLNDhELElBQUl4ckQsSUFBSSxPQUFPcFIsS0FBSzBnQixLQUFLdFAsSUFBSXBSLEtBQUs4d0IsR0FBRzFmLE1BQUFBLFdBQ2pDcFIsS0FBSzQ4RCxRQUNkNThELEtBQUs0OEQsSUFBSXZ2RCxJQUFJLEdBQ2JyTixLQUFLNDhELElBQUl4ckQsSUFBSTtVQUVqQixFQUFBLEdBRUEsRUFBQTVLLEtBQUEsU0FBQW5ELE9BQ1UsU0FDUjhOLElBQ0FnTixJQVNBMjZDLElBQUFBO0FBRUE5NEQsaUJBQUs0K0QsYUFBYXp0RCxJQUFLZ04sSUFBUTI2QyxFQUFBQTtVQUNqQyxFQUFBLEdBRUEsRUFBQXR5RCxLQUFBLHNCQUFBbkQsT0FDVSxXQUFBO0FBQ1IsbUJBQU9yRCxLQUFLNDhEO1VBQ2QsRUFBQSxHQUVBLEVBQUFwMkQsS0FBQSxjQUFBbkQsT0FDTyxXQUFBO0FBQ0wsbUJBQU9yRCxLQUFLNDhEO1VBQ2QsRUFBQSxHQUVBLEVBQUFwMkQsS0FBQSxZQUFBbkQsT0FDTyxTQUFTNlQsSUFBQUE7QUFBMkMsZ0JBQXpCNGhELEtBQWlCNzNELFVBQUF5RCxTQUFBekQsS0FBQUEsV0FBQUEsVUFBQTRkLENBQUFBLElBQUE1ZCxVQUFBLENBQUEsSUFBQWpCLEtBQUs0OEQ7QUFDdEQsZ0JBQUk1OEQsS0FBSzBnQixTQUFTMWdCLEtBQUs4d0IsSUFBSTtBQUN6QixrQkFBMENzb0MsS0FBQXBxQyxHQUFyQmh2QixLQUFLcTVELGVBQUFBLEdBQWdCLENBQUEsR0FBbkN3RixLQUFFekYsR0FBQSxDQUFBLEdBQUUwRixLQUFFMUYsR0FBQSxDQUFBLEdBQUUyRixLQUFFM0YsR0FBQSxDQUFBLEdBQ1hud0QsS0FBSSxJQUFJdEosS0FBSzZSLE1BQU0sSUFBSTBGO0FBQzdCLHFCQUFPLEVBQ0w3SixHQUFHd3hELEtBQUtFLEtBQUtwL0QsS0FBS3lVLElBQUluTCxFQUFBQSxHQUN0Qm1JLEdBQUcwdEQsS0FBS0MsS0FBS0EsTUFBTSxJQUFJcC9ELEtBQUt3VSxJQUFJbEwsRUFBQUEsR0FBQUE7WUFFbkM7QUFDQyxtQkFBTyxFQUNMb0UsR0FDRTFOLEtBQUs4NkQsSUFBSSxJQUFJdmpELElBQVUsQ0FBQSxJQUFLbFgsS0FBSzA0RCxVQUFVcnJELElBQzNDLElBQUk2SixNQUFZLElBQUlBLE1BQVk0aEQsR0FBUXpyRCxJQUN4QzFOLEtBQUs4NkQsSUFBSXZqRCxJQUFVLENBQUEsSUFBS2xYLEtBQUsyNEQsUUFBUXRyRCxHQUN2QytELEdBQ0V6UixLQUFLODZELElBQUksSUFBSXZqRCxJQUFVLENBQUEsSUFBS2xYLEtBQUswNEQsVUFBVXRuRCxJQUMzQyxJQUFJOEYsTUFBWSxJQUFJQSxNQUFZNGhELEdBQVExbkQsSUFDeEN6UixLQUFLODZELElBQUl2akQsSUFBVSxDQUFBLElBQUtsWCxLQUFLMjRELFFBQVF2bkQsRUFBQUE7VUFHN0MsRUFBQSxHQUVBLEVBQUE1SyxLQUFBLHVCQUFBbkQsT0FDVSxTQUNSNjJELElBQ0Evb0QsSUFBQUE7QUFFQSxtQkFBT25SLEtBQUtnL0QsMEJBQTBCOUUsSUFBVS9vRCxJQUFLblIsS0FBSzQ4RCxHQUFBQTtVQUM1RCxFQUFBLEdBRUEsRUFBQXAyRCxLQUFBLHNCQUFBbkQsT0FDVSxTQUNSZzRELElBQ0FDLElBQ0F4b0QsSUFDQUMsSUFDQXdvRCxJQUNBQyxJQUFBQTtBQUdBLG1CQUFPeDdELEtBQUtpL0QseUJBQXlCNUQsSUFBSUMsSUFBSXhvRCxJQUFJQyxJQUFJd29ELElBQUlDLElBQUl4N0QsS0FBSzQ4RCxHQUFBQTtVQUNwRSxFQUFBLENBQUEsQ0FBQSxHQUFDd0I7UUFBQSxFQTlMb0NYLEVBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsZUFBQUEsT0FBQUEsV0FBQUEsQ0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxHQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLGNBQUFBLE9BQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUE7QUFBQUEscUJBQUFBLFFBQUFBLFVBQUFBLFFBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEdBQUFBLFdBQUFBO2NBQUFBLENBQUFBLENBQUFBLEdBQUFBO1lBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHFCQUFBQTtZQUFBQTtVQUFBQSxFQUFBQTtBQUFBQSxpQkFBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLElBQUFBLEtBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsSUFBQUEsV0FBQUEsRUFBQUE7WUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsTUFBQUEsTUFBQUEsU0FBQUE7QUFBQUEsbUJBQUFBLEdBQUFBLE1BQUFBLEVBQUFBO1VBQUFBO1FBQUFBO0FDSjFCeUIsWUFBQUEsS0FBQUEsU0FBaUJiLElBQUFBO0FBQUFqWCxVQUFBQSxJQUFBOFgsSUFBQWIsRUFBQUE7QUFBQSxjQUFBeDFCLEtBQUE0Z0IsR0FBQXlWLEVBQUFBO0FBUTVCLG1CQUFBQSxHQUFtQnJ6RCxJQUFzQnNwQyxJQUFhc1MsSUFBQUE7QUFBa0IsbUJBQUE5akMsR0FBQUEsTUFBQXU3QyxFQUFBQSxHQUFBcjJCLEdBQUEvbkMsS0FBQWQsTUFDaEU2TCxJQUFTc3BDLElBQU1zUyxFQUFBQTtVQUN2QjtBQW9OQyxpQkFsTkQ1NUIsR0FBQXF4QyxJQUFBLENBQUEsRUFBQTE0RCxLQUFBLFNBQUFuRCxPQUNVLFNBQ1I4TixJQUNBZ04sSUFTQTI2QyxJQUFBQTtBQUVBOTRELGlCQUFLNCtELGFBQWF6dEQsSUFBS2dOLElBQVEyNkMsRUFBQUE7VUFDakMsRUFBQSxHQUVBLEVBQUF0eUQsS0FBQSxjQUFBbkQsT0FDTyxXQUFBO0FBQ0wsbUJBQU9yRCxLQUFLMjlELG1CQUFBQTtVQUNkLEVBQUEsR0FFQSxFQUFBbjNELEtBQUEsc0JBQUFuRCxPQU9VLFdBQUE7QUFFUixnQkF1R004N0QsSUFDQUMsSUF4R0FuckIsS0FBU2owQyxLQUFLNkwsUUFBUTZ3RCxPQUFPMkMsV0FDN0JsbkQsS0FBT25ZLEtBQUs2TCxRQUFRNndELE9BQU92a0QsTUFDN0JqRixLQUFLdlQsS0FBS3MxQixJQUFJajFCLEtBQUswZ0IsS0FBS3JULElBQUlyTixLQUFLOHdCLEdBQUd6akIsQ0FBQUEsR0FDcEM4RixLQUFLeFQsS0FBS3MxQixJQUFJajFCLEtBQUswZ0IsS0FBS3RQLElBQUlwUixLQUFLOHdCLEdBQUcxZixDQUFBQTtBQUN4QyxnQkFBYSxlQUFUK0csTUFBZ0Msb0JBQVRBLElBQTBCO0FBQ25ELGtCQUFJZ25ELElBQ0FDO0FBR0ZELGNBQUFBLEtBQVFDLEtBRE5sc0QsTUFBTUMsS0FDUThnQyxLQUFTOWdDLEtBRVQ4Z0MsS0FBUy9nQyxJQUd2QmxULEtBQUswZ0IsS0FBS3JULElBQUlyTixLQUFLOHdCLEdBQUd6akIsTUFDeEI4eEQsS0FBQUEsQ0FBU0EsS0FFUG4vRCxLQUFLMGdCLEtBQUt0UCxLQUFLcFIsS0FBSzh3QixHQUFHMWYsTUFDekJndUQsS0FBQUEsQ0FBU0E7QUFHWCxrQkFBSUUsS0FBT3QvRCxLQUFLMGdCLEtBQUtyVCxJQUFJOHhELElBQ3JCSSxLQUFPdi9ELEtBQUswZ0IsS0FBS3RQLElBQUlndUQ7QUFVekIscUJBUmEsZUFBVGpuRCxPQUNFakYsTUFBTUMsS0FDUm1zRCxLQUFPcHNELEtBQUsrZ0MsS0FBUzlnQyxLQUFLblQsS0FBSzBnQixLQUFLclQsSUFBSWl5RCxLQUV4Q0MsS0FBT3BzRCxLQUFLOGdDLEtBQVMvZ0MsS0FBS2xULEtBQUswZ0IsS0FBS3RQLElBQUltdUQsS0FJckMsRUFBRWx5RCxHQUFHaXlELElBQU1sdUQsR0FBR211RCxHQUFBQTtZQUN0QjtBQUFNLGdCQUFhLG9CQUFUcG5ELElBQTBCO0FBQ25DLGtCQUFJZ25ELE1BQVMsSUFBSWxyQixNQUFVL2dDLElBQ3ZCa3NELE1BQVMsSUFBSW5yQixNQUFVOWdDO0FBZ0IzQixxQkFkSUQsTUFBTUMsTUFFUmdzRCxLQUFRLEdBQ0puL0QsS0FBSzBnQixLQUFLdFAsSUFBSXBSLEtBQUs4d0IsR0FBRzFmLE1BQ3hCZ3VELEtBQUFBLENBQVNBLFFBSVBwL0QsS0FBSzBnQixLQUFLclQsSUFBSXJOLEtBQUs4d0IsR0FBR3pqQixNQUN4Qjh4RCxLQUFBQSxDQUFTQSxLQUVYQyxLQUFRLElBR0gsRUFDTC94RCxHQUFHck4sS0FBSzh3QixHQUFHempCLElBQUk4eEQsSUFDZi90RCxHQUFHcFIsS0FBSzh3QixHQUFHMWYsSUFBSWd1RCxHQUFBQTtZQUVsQjtBQUFNLGdCQUFhLGlCQUFUam5ELElBQXVCO0FBQ2hDLGtCQUFJZ25ELE1BQVMsSUFBSWxyQixNQUFVL2dDO0FBSzNCLHFCQUpJbFQsS0FBSzBnQixLQUFLclQsSUFBSXJOLEtBQUs4d0IsR0FBR3pqQixNQUN4Qjh4RCxLQUFBQSxDQUFTQSxLQUdKLEVBQ0w5eEQsR0FBR3JOLEtBQUs4d0IsR0FBR3pqQixJQUFJOHhELElBQ2YvdEQsR0FBR3BSLEtBQUswZ0IsS0FBS3RQLEVBQUFBO1lBRWhCO0FBQU0sZ0JBQWEsZUFBVCtHLElBQXFCO0FBQzlCLGtCQUFJaW5ELE1BQVMsSUFBSW5yQixNQUFVOWdDO0FBSzNCLHFCQUpJblQsS0FBSzBnQixLQUFLdFAsSUFBSXBSLEtBQUs4d0IsR0FBRzFmLE1BQ3hCZ3VELEtBQUFBLENBQVNBLEtBR0osRUFDTC94RCxHQUFHck4sS0FBSzBnQixLQUFLclQsR0FDYitELEdBQUdwUixLQUFLOHdCLEdBQUcxZixJQUFJZ3VELEdBQUFBO1lBRWxCO0FBQU0sZ0JBQWEsZUFBVGpuRCxJQUFxQjtBQUM5QmpGLGNBQUFBLEtBQUtsVCxLQUFLOHdCLEdBQUd6akIsSUFBSXJOLEtBQUswZ0IsS0FBS3JULEdBQzNCOEYsS0FBS25ULEtBQUswZ0IsS0FBS3RQLElBQUlwUixLQUFLOHdCLEdBQUcxZjtBQUMzQixrQkFBTXFELEtBQVM5VSxLQUFLMlQsS0FBS0osS0FBS0EsS0FBS0MsS0FBS0EsRUFBQUEsR0FDbEN5a0QsS0FBS2o0RCxLQUFLNlIsSUFHVmd1RCxNQURnQjcvRCxLQUFLKzZCLE1BQU12bkIsSUFBSUQsRUFBQUEsS0FDTSxNQUFUK2dDLEtBQWUsT0FBTzJqQixPQUFPLElBQUlBO0FBRW5FLHFCQUFPLEVBQ0x2cUQsR0FBR3JOLEtBQUswZ0IsS0FBS3JULEtBQWMsTUFBVDRtQyxLQUFlLE9BQU94L0IsS0FBUzlVLEtBQUt5VSxJQUFJb3JELEVBQUFBLEdBQzFEcHVELEdBQUdwUixLQUFLMGdCLEtBQUt0UCxLQUFjLE1BQVQ2aUMsS0FBZSxPQUFPeC9CLEtBQVM5VSxLQUFLd1UsSUFBSXFyRCxFQUFBQSxFQUFBQTtZQUU3RDtBQUFNLGdCQUFhLGdCQUFUcm5ELElBQXNCO0FBQy9CakYsY0FBQUEsS0FBS2xULEtBQUs4d0IsR0FBR3pqQixJQUFJck4sS0FBSzBnQixLQUFLclQsR0FDM0I4RixLQUFLblQsS0FBSzBnQixLQUFLdFAsSUFBSXBSLEtBQUs4d0IsR0FBRzFmO0FBQzNCLGtCQUFNcUQsS0FBUzlVLEtBQUsyVCxLQUFLSixLQUFLQSxLQUFLQyxLQUFLQSxFQUFBQSxHQUNsQ3lrRCxLQUFLajRELEtBQUs2UixJQUdWZ3VELE1BRGdCNy9ELEtBQUsrNkIsTUFBTXZuQixJQUFJRCxFQUFBQSxLQUNPLE1BQUEsQ0FBVCtnQyxLQUFlLE9BQU8yakIsT0FBTyxJQUFJQTtBQUVwRSxxQkFBTyxFQUNMdnFELEdBQUdyTixLQUFLMGdCLEtBQUtyVCxLQUFjLE1BQVQ0bUMsS0FBZSxPQUFPeC9CLEtBQVM5VSxLQUFLeVUsSUFBSW9yRCxFQUFBQSxHQUMxRHB1RCxHQUFHcFIsS0FBSzBnQixLQUFLdFAsS0FBYyxNQUFUNmlDLEtBQWUsT0FBT3gvQixLQUFTOVUsS0FBS3dVLElBQUlxckQsRUFBQUEsRUFBQUE7WUFFN0Q7QUFNR0wsWUFBQUEsS0FBUUMsS0FETmxzRCxNQUFNQyxLQUNROGdDLEtBQVM5Z0MsS0FFVDhnQyxLQUFTL2dDLElBR3ZCbFQsS0FBSzBnQixLQUFLclQsSUFBSXJOLEtBQUs4d0IsR0FBR3pqQixNQUN4Qjh4RCxLQUFBQSxDQUFTQSxLQUVQbi9ELEtBQUswZ0IsS0FBS3RQLEtBQUtwUixLQUFLOHdCLEdBQUcxZixNQUN6Qmd1RCxLQUFBQSxDQUFTQTtBQUdYLGdCQUFJRSxLQUFPdC9ELEtBQUswZ0IsS0FBS3JULElBQUk4eEQsSUFDckJJLEtBQU92L0QsS0FBSzBnQixLQUFLdFAsSUFBSWd1RDtBQWdCekIsbUJBZElsc0QsTUFBTUMsS0FFTm1zRCxLQURFdC9ELEtBQUswZ0IsS0FBS3JULEtBQUtyTixLQUFLOHdCLEdBQUd6akIsSUFDbEJyTixLQUFLOHdCLEdBQUd6akIsSUFBSWl5RCxLQUFPdC9ELEtBQUs4d0IsR0FBR3pqQixJQUFJaXlELEtBRS9CdC9ELEtBQUs4d0IsR0FBR3pqQixJQUFJaXlELEtBQU90L0QsS0FBSzh3QixHQUFHempCLElBQUlpeUQsS0FJdENDLEtBREV2L0QsS0FBSzBnQixLQUFLdFAsS0FBS3BSLEtBQUs4d0IsR0FBRzFmLElBQ2xCcFIsS0FBSzh3QixHQUFHMWYsSUFBSW11RCxLQUFPdi9ELEtBQUs4d0IsR0FBRzFmLElBQUltdUQsS0FFL0J2L0QsS0FBSzh3QixHQUFHMWYsSUFBSW11RCxLQUFPdi9ELEtBQUs4d0IsR0FBRzFmLElBQUltdUQsSUFJbkMsRUFBRWx5RCxHQUFHaXlELElBQU1sdUQsR0FBR211RCxHQUFBQTtVQUV6QixFQUFBLEdBRUEsRUFBQS80RCxLQUFBLHVCQUFBbkQsT0FDVSxTQUNSNjJELElBQ0Evb0QsSUFBQUE7QUFDNkIsZ0JBQTdCdEYsS0FBQUEsVUFBQUEsU0FBQUEsS0FBQUEsV0FBQUEsVUFBQUEsQ0FBQUEsSUFBQUEsVUFBQUEsQ0FBQUEsSUFBMkIsQ0FBQTtBQUUzQixtQkFBTzdMLEtBQUtnL0QsMEJBQTBCOUUsSUFBVS9vRCxJQUFLdEYsR0FBUSt3RCxHQUFBQTtVQUMvRCxFQUFBLEdBRUEsRUFBQXAyRCxLQUFBLHNCQUFBbkQsT0FDVSxTQUNSZzRELElBQ0FDLElBQ0F4b0QsSUFDQUMsSUFDQXdvRCxJQUNBQyxJQUFBQTtBQUNtQyxnQkFBbkMxQyxLQUFPNzNELFVBQUF5RCxTQUFBQSxLQUFBQSxXQUFBekQsVUFBQSxDQUFBLElBQUFBLFVBQUcsQ0FBQSxJQUFBakIsS0FBSzI5RCxtQkFBQUE7QUFHZixtQkFBTzM5RCxLQUFLaS9ELHlCQUF5QjVELElBQUlDLElBQUl4b0QsSUFBSUMsSUFBSXdvRCxJQUFJQyxJQUFJMUMsRUFBQUE7VUFDL0QsRUFBQSxHQUVBLEVBQUF0eUQsS0FBQSxZQUFBbkQsT0FDTyxTQUNMNlQsSUFBQUE7QUFDMEMsZ0JBQTFDNGhELEtBQUFBLFVBQUFBLFNBQUFBLEtBQUFBLFdBQUFBLFVBQUFBLENBQUFBLElBQUFBLFVBQWlCLENBQUEsSUFBQTk0RCxLQUFLMjlELG1CQUFBQSxHQUVoQjVvRCxLQUFJbUM7QUFVVixtQkFBTyxFQUFFN0osR0FSUDFOLEtBQUs4NkQsSUFBSSxJQUFJMWxELElBQUcsQ0FBQSxJQUFLL1UsS0FBSzA0RCxVQUFVcnJELElBQ3BDLElBQUkwSCxNQUFLLElBQUlBLE1BQUsrakQsR0FBUXpyRCxJQUMxQjFOLEtBQUs4NkQsSUFBSTFsRCxJQUFHLENBQUEsSUFBSy9VLEtBQUsyNEQsUUFBUXRyRCxHQU1qQitELEdBSmJ6UixLQUFLODZELElBQUksSUFBSTFsRCxJQUFHLENBQUEsSUFBSy9VLEtBQUswNEQsVUFBVXRuRCxJQUNwQyxJQUFJMkQsTUFBSyxJQUFJQSxNQUFLK2pELEdBQVExbkQsSUFDMUJ6UixLQUFLODZELElBQUkxbEQsSUFBRyxDQUFBLElBQUsvVSxLQUFLMjRELFFBQVF2bkQsRUFBQUE7VUFHbEMsRUFBQSxDQUFBLENBQUEsR0FBQzh0RDtRQUFBLEVBOU5tQ3pCLEVBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsZUFBQUEsT0FBQUEsV0FBQUEsQ0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxHQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLGNBQUFBLE9BQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUE7QUFBQUEscUJBQUFBLFFBQUFBLFVBQUFBLFFBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEdBQUFBLFdBQUFBO2NBQUFBLENBQUFBLENBQUFBLEdBQUFBO1lBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHFCQUFBQTtZQUFBQTtVQUFBQSxFQUFBQTtBQUFBQSxpQkFBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLElBQUFBLEtBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsSUFBQUEsV0FBQUEsRUFBQUE7WUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsTUFBQUEsTUFBQUEsU0FBQUE7QUFBQUEsbUJBQUFBLEdBQUFBLE1BQUFBLEVBQUFBO1VBQUFBO1FBQUFBO0FDTmhCZ0MsWUFBQUEsS0FBQUEsU0FBeUJwQixJQUFBQTtBQUFBalgsVUFBQUEsSUFBQXFZLElBQUFwQixFQUFBQTtBQUFBLGNBQUF4MUIsS0FBQTRnQixHQUFBZ1csRUFBQUE7QUFRN0MsbUJBQUFBLEdBQW1CNXpELElBQXNCc3BDLElBQWFzUyxJQUFBQTtBQUFrQixtQkFBQTlqQyxHQUFBQSxNQUFBODdDLEVBQUFBLEdBQUE1MkIsR0FBQS9uQyxLQUFBZCxNQUNoRTZMLElBQVNzcEMsSUFBTXNTLEVBQUFBO1VBQ3ZCO0FBa0RDLGlCQWhERDU1QixHQUFBNHhDLElBQUEsQ0FBQSxFQUFBajVELEtBQUEsNkJBQUFuRCxPQWdCVSxTQUNSZzRELElBQ0FDLElBQ0F4b0QsSUFDQUMsSUFDQXdvRCxJQUNBQyxJQUNBa0UsSUFDQUMsSUFBQUE7QUFPQSxxQkFKSS9CLEtBQWMsS0FDZEMsS0FBUXhDLElBQ1J5QyxLQUFReEMsSUFDTnNFLEtBQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFBLEdBQ2JoeEQsS0FBSSxHQUFHQSxLQUFJLElBQUlBLE1BQUs7QUFDM0Isa0JBQU1tRyxLQUFJLE1BQU1uRztBQUNoQmd4RCxjQUFBQSxHQUFJLENBQUEsSUFBS2pnRSxLQUFLODZELElBQUksSUFBSTFsRCxJQUFHLENBQUEsR0FDekI2cUQsR0FBSSxDQUFBLElBQUssSUFBSTdxRCxLQUFJcFYsS0FBSzg2RCxJQUFJLElBQUkxbEQsSUFBRyxDQUFBLEdBQ2pDNnFELEdBQUksQ0FBQSxJQUFLLElBQUlqZ0UsS0FBSzg2RCxJQUFJMWxELElBQUcsQ0FBQSxLQUFNLElBQUlBLEtBQ25DNnFELEdBQUksQ0FBQSxJQUFLamdFLEtBQUs4NkQsSUFBSTFsRCxJQUFHLENBQUE7QUFDckIsa0JBQU0xSCxLQUFJdXlELEdBQUksQ0FBQSxJQUFLdkUsS0FBS3VFLEdBQUksQ0FBQSxJQUFLRixHQUFLcnlELElBQUl1eUQsR0FBSSxDQUFBLElBQUtELEdBQUt0eUQsSUFBSXV5RCxHQUFJLENBQUEsSUFBSzlzRCxJQUMvRDFCLEtBQUl3dUQsR0FBSSxDQUFBLElBQUt0RSxLQUFLc0UsR0FBSSxDQUFBLElBQUtGLEdBQUt0dUQsSUFBSXd1RCxHQUFJLENBQUEsSUFBS0QsR0FBS3Z1RCxJQUFJd3VELEdBQUksQ0FBQSxJQUFLN3NEO0FBQ3JFLGtCQUFJbkUsS0FBSSxHQUFHO0FBQ1Qsb0JBQU0wcUIsS0FBV3Q1QixLQUFLKzlELG1CQUFtQkYsSUFBT0MsSUFBT3p3RCxJQUFHK0QsSUFBR21xRCxJQUFJQyxFQUFBQTtBQUNqRW9DLGdCQUFBQSxLQUFjdGtDLEtBQVdza0MsS0FBY3RrQyxLQUFXc2tDO2NBQ25EO0FBQ0RDLGNBQUFBLEtBQVF4d0QsSUFDUnl3RCxLQUFRMXNEO1lBQ1Q7QUFFRCxtQkFBT3dzRDtVQUNULEVBQUEsQ0FBQSxDQUFBLEdBQUM2QjtRQUFBLEVBNURvRGhDLEVBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsZUFBQUEsT0FBQUEsV0FBQUEsQ0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxHQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLGNBQUFBLE9BQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUE7QUFBQUEscUJBQUFBLFFBQUFBLFVBQUFBLFFBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEdBQUFBLFdBQUFBO2NBQUFBLENBQUFBLENBQUFBLEdBQUFBO1lBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHFCQUFBQTtZQUFBQTtVQUFBQSxFQUFBQTtBQUFBQSxpQkFBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLElBQUFBLEtBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsSUFBQUEsV0FBQUEsRUFBQUE7WUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsTUFBQUEsTUFBQUEsU0FBQUE7QUFBQUEsbUJBQUFBLEdBQUFBLE1BQUFBLEVBQUFBO1VBQUFBO1FBQUFBO0FDTTFDb0MsWUFBQUEsS0FBQUEsU0FBZ0JDLElBQUFBO0FBQUExWSxVQUFBQSxJQUFBeVksSUFBQUMsRUFBQUE7QUFBQSxjQUFBajNCLEtBQUE0Z0IsR0FBQW9XLEVBQUFBO0FBUTNCLG1CQUFBQSxHQUFtQmgwRCxJQUFzQnNwQyxJQUFhc1MsSUFBQUE7QUFBa0IsbUJBQUE5akMsR0FBQUEsTUFBQWs4QyxFQUFBQSxHQUFBaDNCLEdBQUEvbkMsS0FBQWQsTUFDaEU2TCxJQUFTc3BDLElBQU1zUyxFQUFBQTtVQUN2QjtBQWdIQyxpQkE5R0Q1NUIsR0FBQWd5QyxJQUFBLENBQUEsRUFBQXI1RCxLQUFBLFNBQUFuRCxPQUNVLFNBQ1I4TixJQUNBZ04sSUFTQTRoRCxJQUFBQTtBQUdBLGdCQUFNTCxLQUFPSyxHQUFTLENBQUEsR0FDaEJKLEtBQU9JLEdBQVMsQ0FBQTtBQUN0Qi8vRCxpQkFBSzQrRCxhQUFhenRELElBQUtnTixJQUFRdWhELElBQU1DLEVBQUFBO1VBQ3ZDLEVBQUEsR0FFQSxFQUFBbjVELEtBQUEsc0JBQUFuRCxPQUtVLFdBQUE7QUFDUixnQkFHSWc0RCxJQUNBQyxJQUNBeG9ELElBQ0FDLElBTkVHLEtBQUtsVCxLQUFLMGdCLEtBQUtyVCxJQUFJck4sS0FBSzh3QixHQUFHempCLEdBQzNCOEYsS0FBS25ULEtBQUswZ0IsS0FBS3RQLElBQUlwUixLQUFLOHdCLEdBQUcxZixHQU0zQml1RCxLQUFZci9ELEtBQUs2TCxRQUFRNndELE9BQU8yQztBQW9CdEMsb0JBaEJHMS9ELEtBQUtzMUIsSUFBSS9oQixFQUFBQSxJQUFNdlQsS0FBS3MxQixJQUFJOWhCLEVBQUFBLEtBQUFBLFNBQ3ZCblQsS0FBSzZMLFFBQVE2d0QsT0FBT3NELGtCQUNtQixpQkFBdkNoZ0UsS0FBSzZMLFFBQVE2d0QsT0FBT3NELG1CQUNpQixlQUF2Q2hnRSxLQUFLNkwsUUFBUTZ3RCxPQUFPc0Qsa0JBRXBCMUUsS0FBS3Q3RCxLQUFLMGdCLEtBQUt0UCxHQUNmMkIsS0FBSy9TLEtBQUs4d0IsR0FBRzFmLEdBQ2JpcUQsS0FBS3I3RCxLQUFLMGdCLEtBQUtyVCxJQUFJZ3lELEtBQVluc0QsSUFDL0JKLEtBQUs5UyxLQUFLOHdCLEdBQUd6akIsSUFBSWd5RCxLQUFZbnNELE9BRTdCb29ELEtBQUt0N0QsS0FBSzBnQixLQUFLdFAsSUFBSWl1RCxLQUFZbHNELElBQy9CSixLQUFLL1MsS0FBSzh3QixHQUFHMWYsSUFBSWl1RCxLQUFZbHNELElBQzdCa29ELEtBQUtyN0QsS0FBSzBnQixLQUFLclQsR0FDZnlGLEtBQUs5UyxLQUFLOHdCLEdBQUd6akIsSUFHUixDQUNMLEVBQUVBLEdBQUdndUQsSUFBSWpxRCxHQUFHa3FELEdBQUFBLEdBQ1osRUFBRWp1RCxHQUFHeUYsSUFBSTFCLEdBQUcyQixHQUFBQSxDQUFBQTtVQUVoQixFQUFBLEdBRUEsRUFBQXZNLEtBQUEsY0FBQW5ELE9BQ08sV0FBQTtBQUNMLG1CQUFPckQsS0FBSzI5RCxtQkFBQUE7VUFDZCxFQUFBLEdBRUEsRUFBQW4zRCxLQUFBLHVCQUFBbkQsT0FDVSxTQUNSNjJELElBQ0Evb0QsSUFBQUE7QUFFQSxtQkFBT25SLEtBQUtnL0QsMEJBQTBCOUUsSUFBVS9vRCxFQUFBQTtVQUNsRCxFQUFBLEdBRUEsRUFBQTNLLEtBQUEsc0JBQUFuRCxPQUNVLFNBQ1JnNEQsSUFDQUMsSUFDQXhvRCxJQUNBQyxJQUNBd29ELElBQ0FDLElBQUFBO0FBQ3dELGdCQUFBeUUsS0FBQWp4QyxHQUFBL3RCLFVBQUF5RCxTQUFBQSxLQUFBQSxXQUFBekQsVUFBQSxDQUFBLElBQUFBLFVBQXpCLENBQUEsSUFBQWpCLEtBQUsyOUQsbUJBQUFBLEdBQW9CLENBQUEsR0FBdkQrQixLQUFJTyxHQUFBLENBQUEsR0FBRU4sS0FBSU0sR0FBQSxDQUFBO0FBR1gsbUJBQU9qZ0UsS0FBS2tnRSwwQkFBMEI3RSxJQUFJQyxJQUFJeG9ELElBQUlDLElBQUl3b0QsSUFBSUMsSUFBSWtFLElBQU1DLEVBQUFBO1VBQ3RFLEVBQUEsR0FFQSxFQUFBbjVELEtBQUEsWUFBQW5ELE9BQ08sU0FDTDZULElBQUFBO0FBQ3dELGdCQUFBaXBELEtBQUFueEMsR0FBQS90QixVQUFBeUQsU0FBQUEsS0FBQUEsV0FBQXpELFVBQUEsQ0FBQSxJQUFBQSxVQUF6QixDQUFBLElBQUFqQixLQUFLMjlELG1CQUFBQSxHQUFvQixDQUFBLEdBQXZEK0IsS0FBSVMsR0FBQSxDQUFBLEdBQUVSLEtBQUlRLEdBQUEsQ0FBQSxHQUVMcHJELEtBQUltQyxJQUNKMG9ELEtBQXdDLENBQzVDamdFLEtBQUs4NkQsSUFBSSxJQUFJMWxELElBQUcsQ0FBQSxHQUNoQixJQUFJQSxLQUFJcFYsS0FBSzg2RCxJQUFJLElBQUkxbEQsSUFBRyxDQUFBLEdBQ3hCLElBQUlwVixLQUFLODZELElBQUkxbEQsSUFBRyxDQUFBLEtBQU0sSUFBSUEsS0FDMUJwVixLQUFLODZELElBQUkxbEQsSUFBRyxDQUFBLENBQUE7QUFhZCxtQkFBTyxFQUFFMUgsR0FWUHV5RCxHQUFJLENBQUEsSUFBSzUvRCxLQUFLMDRELFVBQVVyckQsSUFDeEJ1eUQsR0FBSSxDQUFBLElBQUtGLEdBQUtyeUQsSUFDZHV5RCxHQUFJLENBQUEsSUFBS0QsR0FBS3R5RCxJQUNkdXlELEdBQUksQ0FBQSxJQUFLNS9ELEtBQUsyNEQsUUFBUXRyRCxHQU9UK0QsR0FMYnd1RCxHQUFJLENBQUEsSUFBSzUvRCxLQUFLMDRELFVBQVV0bkQsSUFDeEJ3dUQsR0FBSSxDQUFBLElBQUtGLEdBQUt0dUQsSUFDZHd1RCxHQUFJLENBQUEsSUFBS0QsR0FBS3Z1RCxJQUNkd3VELEdBQUksQ0FBQSxJQUFLNS9ELEtBQUsyNEQsUUFBUXZuRCxFQUFBQTtVQUcxQixFQUFBLENBQUEsQ0FBQSxHQUFDeXVEO1FBQUEsRUExSGtDSixFQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLGVBQUFBLE9BQUFBLFdBQUFBLENBQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsR0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxjQUFBQSxPQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBO0FBQUFBLHFCQUFBQSxRQUFBQSxVQUFBQSxRQUFBQSxLQUFBQSxHQUFBQSxTQUFBQSxDQUFBQSxHQUFBQSxXQUFBQTtjQUFBQSxDQUFBQSxDQUFBQSxHQUFBQTtZQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxxQkFBQUE7WUFBQUE7VUFBQUEsRUFBQUE7QUFBQUEsaUJBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQSxLQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLElBQUFBLEVBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLEdBQUFBLElBQUFBLFdBQUFBLEVBQUFBO1lBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLEdBQUFBLE1BQUFBLE1BQUFBLFNBQUFBO0FBQUFBLG1CQUFBQSxHQUFBQSxNQUFBQSxFQUFBQTtVQUFBQTtRQUFBQTtBQ0F4QlcsWUFBQUEsS0FBQUEsU0FBYTFDLElBQUFBO0FBQUF0VyxVQUFBQSxJQUFBZ1osSUFBQTFDLEVBQUFBO0FBQUEsY0FBQTcwQixLQUFBNGdCLEdBQUEyVyxFQUFBQTtBQVF4QixtQkFBQUEsR0FBbUJ2MEQsSUFBc0JzcEMsSUFBYXNTLElBQUFBO0FBQWtCLG1CQUFBOWpDLEdBQUFBLE1BQUF5OEMsRUFBQUEsR0FBQXYzQixHQUFBL25DLEtBQUFkLE1BQ2hFNkwsSUFBU3NwQyxJQUFNc1MsRUFBQUE7VUFDdkI7QUF1RUMsaUJBckVENTVCLEdBQUF1eUMsSUFBQSxDQUFBLEVBQUE1NUQsS0FBQSxTQUFBbkQsT0FDVSxTQUNSOE4sSUFDQWdOLElBQUFBO0FBTUFoTixZQUFBQSxHQUFJRyxVQUFBQSxHQUNKSCxHQUFJVyxPQUFPOVIsS0FBSzA0RCxVQUFVcnJELEdBQUdyTixLQUFLMDRELFVBQVV0bkQsQ0FBQUEsR0FDNUNELEdBQUlZLE9BQU8vUixLQUFLMjRELFFBQVF0ckQsR0FBR3JOLEtBQUsyNEQsUUFBUXZuRCxDQUFBQSxHQUV4Q3BSLEtBQUtrcEQsYUFBYS8zQyxJQUFLZ04sRUFBQUEsR0FDdkJoTixHQUFJNDNDLE9BQUFBLEdBQ0ovb0QsS0FBS29wRCxjQUFjajRDLElBQUtnTixFQUFBQTtVQUMxQixFQUFBLEdBRUEsRUFBQTNYLEtBQUEsY0FBQW5ELE9BQ08sV0FBQTtVQUVQLEVBQUEsR0FFQSxFQUFBbUQsS0FBQSxZQUFBbkQsT0FDTyxTQUFTNlQsSUFBQUE7QUFDZCxtQkFBTyxFQUNMN0osSUFBSSxJQUFJNkosTUFBWWxYLEtBQUswNEQsVUFBVXJyRCxJQUFJNkosS0FBV2xYLEtBQUsyNEQsUUFBUXRyRCxHQUMvRCtELElBQUksSUFBSThGLE1BQVlsWCxLQUFLMDRELFVBQVV0bkQsSUFBSThGLEtBQVdsWCxLQUFLMjRELFFBQVF2bkQsRUFBQUE7VUFFbkUsRUFBQSxHQUVBLEVBQUE1SyxLQUFBLHVCQUFBbkQsT0FDVSxTQUNSNjJELElBQ0Evb0QsSUFBQUE7QUFFQSxnQkFBSTJxRCxLQUFROTdELEtBQUs4d0IsSUFDYmlyQyxLQUFRLzdELEtBQUswZ0I7QUFDYnc1QyxZQUFBQSxHQUFTN3lELE9BQU9ySCxLQUFLMGdCLEtBQUtyWixPQUM1QnkwRCxLQUFROTdELEtBQUswZ0IsTUFDYnE3QyxLQUFRLzdELEtBQUs4d0I7QUFHZixnQkFBTW1LLEtBQVF0N0IsS0FBSys2QixNQUFNb2hDLEdBQU0xcUQsSUFBSTJxRCxHQUFNM3FELEdBQUcwcUQsR0FBTXp1RCxJQUFJMHVELEdBQU0xdUQsQ0FBQUEsR0FDdEQ2RixLQUFLNG9ELEdBQU16dUQsSUFBSTB1RCxHQUFNMXVELEdBQ3JCOEYsS0FBSzJvRCxHQUFNMXFELElBQUkycUQsR0FBTTNxRCxHQUNyQml2RCxLQUFvQjFnRSxLQUFLMlQsS0FBS0osS0FBS0EsS0FBS0MsS0FBS0EsRUFBQUEsR0FFN0NtdEQsTUFDSEQsS0FGa0JuRyxHQUFTdGUsaUJBQWlCenFDLElBQUs4cEIsRUFBQUEsS0FFYm9sQztBQUV2QyxtQkFBTyxFQUNMaHpELElBQUksSUFBSWl6RCxNQUFpQnZFLEdBQU0xdUQsSUFBSWl6RCxLQUFnQnhFLEdBQU16dUQsR0FDekQrRCxJQUFJLElBQUlrdkQsTUFBaUJ2RSxHQUFNM3FELElBQUlrdkQsS0FBZ0J4RSxHQUFNMXFELEdBQ3pEMkQsR0FBRyxFQUFBO1VBRVAsRUFBQSxHQUVBLEVBQUF2TyxLQUFBLHNCQUFBbkQsT0FDVSxTQUNSZzRELElBQ0FDLElBQ0F4b0QsSUFDQUMsSUFDQXdvRCxJQUNBQyxJQUFBQTtBQUdBLG1CQUFPeDdELEtBQUsrOUQsbUJBQW1CMUMsSUFBSUMsSUFBSXhvRCxJQUFJQyxJQUFJd29ELElBQUlDLEVBQUFBO1VBQ3JELEVBQUEsQ0FBQSxDQUFBLEdBQUM0RTtRQUFBLEVBakYrQmhJLEVBQUFBLEdDUzVCbUksS0FBSSxXQUFBO0FBUVIsbUJBQUFBLEdBQVkxMEQsSUFBU3NwQyxJQUFNNGEsSUFBV0UsSUFBZTFXLElBQUFBO0FBQ25ELGdCQURtRTUxQixHQUFBQSxNQUFBNDhDLEVBQUFBLEdBQUFBLFdBQy9EcHJCO0FBQ0Ysb0JBQU0sSUFBSW5OLE1BQU0sa0JBQUE7QUFNbEJob0MsaUJBQUs2TCxVQUFVcWtELEdBQWFELEVBQUFBLEdBQzVCandELEtBQUtpd0QsZ0JBQWdCQSxJQUNyQmp3RCxLQUFLdTVDLGlCQUFpQkEsSUFDdEJ2NUMsS0FBS20xQyxPQUFPQSxJQUNabjFDLEtBQUsrdkQsWUFBWUEsSUFHakIvdkQsS0FBS3FILEtBQUFBLFFBQ0xySCxLQUFLMDFELFNBQUFBLFFBQ0wxMUQsS0FBS3kxRCxPQUFBQSxRQUNMejFELEtBQUs0K0MsV0FBQUEsT0FDTDUrQyxLQUFLaXlDLFFBQUFBLE9BQ0xqeUMsS0FBS3VoRCxhQUFBQSxNQUVMdmhELEtBQUt3Z0UsWUFBWXhnRSxLQUFLNkwsUUFBUXFuQyxPQUM5Qmx6QyxLQUFLbXdELGVBQWVud0QsS0FBSzZMLFFBQVFrekMsS0FBSzVuQyxNQUV0Q25YLEtBQUswZ0IsT0FBQUEsUUFDTDFnQixLQUFLOHdCLEtBQUFBLFFBRUw5d0IsS0FBS3lnRSxXQUFBQSxRQUVMemdFLEtBQUswZ0UsWUFBQUEsT0FFTDFnRSxLQUFLeW5ELGNBQWMsSUFBSTNHLEdBQ3JCOWdELEtBQUttMUMsTUFDTG4xQyxLQUFLNkwsU0FBQUEsSUFDTCxHQUVGN0wsS0FBS2toRCxXQUFXcjFDLEVBQUFBO1VBQ2xCO0FBd1JDLGlCQXRSRGdpQixHQUFBMHlDLElBQUEsQ0FBQSxFQUFBLzVELEtBQUEsY0FBQW5ELE9BTUEsU0FBV3dJLElBQUFBO0FBQ1QsZ0JBQUtBLElBQUw7QUFLQSxrQkFBSTgwRCxLQUFBQSxXQUNNOTBELEdBQVFtbEQsV0FDZGh4RCxLQUFLNkwsUUFBUW1sRCxZQUFZbmxELEdBQVFtbEQsV0FBQUEsV0FDM0JubEQsR0FBUWtsRCxXQUNiL3dELEtBQUs2TCxRQUFRa2xELFVBQUFBLFlBQXNCbGxELEdBQVFrbEQsVUFBQUEsVUFBVSxXQUNoRGxsRCxHQUFRNlUsUUFDZDFnQixLQUFLNkwsUUFBUTZVLFNBQVM3VSxHQUFRNlUsUUFBQUEsV0FDeEI3VSxHQUFRaWxCLE1BQXNCOXdCLEtBQUs2TCxRQUFRaWxCLE9BQU9qbEIsR0FBUWlsQjtBQUVwRXl2QyxjQUFBQSxHQUFLN1AsYUFBYTF3RCxLQUFLNkwsU0FBU0EsSUFBQUEsTUFBZTdMLEtBQUtpd0QsYUFBQUEsR0FBQUEsV0FFaERwa0QsR0FBUXhFLE9BQ1ZySCxLQUFLcUgsS0FBS3dFLEdBQVF4RSxLQUFBQSxXQUVoQndFLEdBQVE2VSxTQUNWMWdCLEtBQUswMUQsU0FBUzdwRCxHQUFRNlUsT0FBQUEsV0FFcEI3VSxHQUFRaWxCLE9BQ1Y5d0IsS0FBS3kxRCxPQUFPNXBELEdBQVFpbEIsS0FBQUEsV0FFbEJqbEIsR0FBUThsQyxVQUNWM3hDLEtBQUsyeEMsUUFBUTlsQyxHQUFROGxDLFFBQUFBLFdBRW5COWxDLEdBQVF4SSxVQUNWd0ksR0FBUXhJLFFBQVFvdEQsR0FBVzVrRCxHQUFReEksS0FBQUE7QUFHckMsa0JBQU0yM0MsS0FBTyxDQUFDbnZDLElBQVM3TCxLQUFLNkwsU0FBUzdMLEtBQUt1NUMsY0FBQUE7QUFlMUMscUJBZEF2NUMsS0FBS3lpRCxVQUFVM0gsR0FBUyxRQUFRRSxFQUFBQSxHQUdoQ2g3QyxLQUFLNHdELGtCQUFrQi9rRCxFQUFBQSxHQUd2QjgwRCxLQUFnQjNnRSxLQUFLNGdFLGVBQUFBLEtBQW9CRCxJQUd6QzNnRSxLQUFLNmdFLHNCQUFBQSxHQUdMN2dFLEtBQUswK0QsUUFBQUEsR0FFRWlDO1lBN0NQO1VBOENGLEVBQUEsR0FFQSxFQUFBbjZELEtBQUEsdUJBQUFuRCxPQW1PQSxXQUFBO0FBQ0UsZ0JBQU15OUQsS0FBQUEsU0FDSjlnRSxLQUFLNkwsUUFBUStnQyxPQUFPOWIsTUFBQUEsU0FDcEI5d0IsS0FBSzZMLFFBQVErZ0MsT0FBTzliLEdBQUc2YixTQUNuQm8wQixLQUFBQSxTQUNKL2dFLEtBQUs2TCxRQUFRK2dDLE9BQU9sc0IsUUFBQUEsU0FDcEIxZ0IsS0FBSzZMLFFBQVErZ0MsT0FBT2xzQixLQUFLaXNCLFNBQ3JCcTBCLEtBQUFBLFNBQ0poaEUsS0FBSzZMLFFBQVErZ0MsT0FBT3V0QixVQUFBQSxTQUNwQm42RCxLQUFLNkwsUUFBUStnQyxPQUFPdXRCLE9BQU94dEIsU0FDdkIrdEIsS0FBZ0IxNkQsS0FBSzZMLFFBQVFzL0IsTUFBTTNDLFNBQ25DcnFCLEtBQVMsRUFDYjJpRCxTQUFTQSxJQUNUMUUsY0FBY3A4RCxLQUFLNkwsUUFBUStnQyxPQUFPOWIsR0FBR21yQyxhQUNyQ0ksYUFBYXI4RCxLQUFLNkwsUUFBUStnQyxPQUFPOWIsR0FBRzNZLE1BQ3BDOG9ELFlBQVlqaEUsS0FBSzZMLFFBQVErZ0MsT0FBTzliLEdBQUczVyxLQUNuQyttRCxtQkFBbUJsaEUsS0FBSzZMLFFBQVErZ0MsT0FBTzliLEdBQUdxbUMsWUFDMUNnSyxvQkFBb0JuaEUsS0FBSzZMLFFBQVErZ0MsT0FBTzliLEdBQUdzbUMsYUFDM0M0SixhQUFhQSxJQUNiMUUsa0JBQWtCdDhELEtBQUs2TCxRQUFRK2dDLE9BQU91dEIsT0FBTzhCLGFBQzdDTSxpQkFBaUJ2OEQsS0FBSzZMLFFBQVErZ0MsT0FBT3V0QixPQUFPaGlELE1BQzVDaXBELGdCQUFnQnBoRSxLQUFLNkwsUUFBUStnQyxPQUFPdXRCLE9BQU9oZ0QsS0FDM0NrbkQsdUJBQXVCcmhFLEtBQUs2TCxRQUFRK2dDLE9BQU91dEIsT0FBT2hELFlBQ2xEbUssd0JBQXdCdGhFLEtBQUs2TCxRQUFRK2dDLE9BQU91dEIsT0FBTy9DLGFBQ25EMkosV0FBV0EsSUFDWDdFLGdCQUFnQmw4RCxLQUFLNkwsUUFBUStnQyxPQUFPbHNCLEtBQUt1N0MsYUFDekNFLGVBQWVuOEQsS0FBSzZMLFFBQVErZ0MsT0FBT2xzQixLQUFLdkksTUFDeENvcEQsY0FBY3ZoRSxLQUFLNkwsUUFBUStnQyxPQUFPbHNCLEtBQUt2RyxLQUN2Q3FuRCxxQkFBcUJ4aEUsS0FBSzZMLFFBQVErZ0MsT0FBT2xzQixLQUFLeTJDLFlBQzlDc0ssc0JBQXNCemhFLEtBQUs2TCxRQUFRK2dDLE9BQU9sc0IsS0FBSzAyQyxhQUMvQ2lELG9CQUFvQnI2RCxLQUFLNkwsUUFBUXd1RCxvQkFDakNsdkIsT0FBT3V2QixLQUFBQSxTQUE0QjE2RCxLQUFLNkwsUUFBUXMvQixNQUFNQSxPQUN0RHV2QixlQUFlQSxJQUNmL1UsU0FBUzNsRCxLQUFLNkwsUUFBUXMvQixNQUFNd2EsU0FDNUJvTCxRQUFRL3dELEtBQUs2TCxRQUFRa2xELFFBQ3JCcnNELFFBQVExRSxLQUFLNkwsUUFBUW5ILFFBQ3JCc2pELFFBQVFob0QsS0FBSzZMLFFBQVFtOEMsT0FBT3JiLFNBQzVCc2IsYUFBYWpvRCxLQUFLNkwsUUFBUW04QyxPQUFPN2MsT0FDakNnZCxZQUFZbm9ELEtBQUs2TCxRQUFRbThDLE9BQU83d0MsTUFDaENreEMsU0FBU3JvRCxLQUFLNkwsUUFBUW04QyxPQUFPMzZDLEdBQzdCazdDLFNBQVN2b0QsS0FBSzZMLFFBQVFtOEMsT0FBTzUyQyxHQUM3QnMzQyxRQUFRMW9ELEtBQUs2TCxRQUFRNjhDLFFBQ3JCeFYsT0FBT2x6QyxLQUFLNkwsUUFBUXFuQyxPQUNwQnBCLFlBQVk5eEMsS0FBSzZMLFFBQVFpbUMsV0FBV25GLFNBQ3BDMHdCLGlCQUFpQnI5RCxLQUFLNkwsUUFBUWltQyxXQUFXM0csT0FDekNteUIsZ0JBQWdCdDlELEtBQUs2TCxRQUFRaW1DLFdBQVczNkIsTUFDeENxbUQsa0JBQWtCeDlELEtBQUs2TCxRQUFRaW1DLFdBQVc0VyxPQUFBQTtBQUU1QyxnQkFBSTFvRCxLQUFLNCtDLFlBQVk1K0MsS0FBS2l5QztBQUN4QixrQkFBQSxTQUFJanlDLEtBQUt5aUQsU0FBQUE7QUFDUCxvQkFBSXppRCxLQUFLNCtDLFVBQVU7QUFDakIsc0JBQU04aUIsS0FBZ0IxaEUsS0FBSzZMLFFBQVE0c0Q7QUFDTixnQ0FBQSxPQUFsQmlKLEtBQ1R2akQsR0FBTyswQixRQUFRd3VCLEdBQWN2akQsR0FBTyswQixLQUFBQSxJQUNGLFlBQUEsT0FBbEJ3dUIsT0FDaEJ2akQsR0FBTyswQixTQUFTd3VCLEtBRWxCdmpELEdBQU8rMEIsUUFBUXZ6QyxLQUFLOE4sSUFBSTBRLEdBQU8rMEIsT0FBTyxNQUFNbHpDLEtBQUttMUMsS0FBSzZPLEtBQUt2b0IsS0FBQUEsR0FDM0R0ZCxHQUFPZ3RCLFFBQVFuckMsS0FBSzZMLFFBQVFzL0IsTUFBTTZHLFdBQ2xDN3pCLEdBQU82cEMsU0FBU2hvRCxLQUFLNkwsUUFBUW04QyxPQUFPcmI7Z0JBQ3RDLFdBQVczc0MsS0FBS2l5QyxPQUFPO0FBQ3JCLHNCQUFNdW1CLEtBQWF4NEQsS0FBSzZMLFFBQVEyc0Q7QUFDTixnQ0FBQSxPQUFmQSxLQUNUcjZDLEdBQU8rMEIsUUFBUXNsQixHQUFXcjZDLEdBQU8rMEIsS0FBQUEsSUFDRixZQUFBLE9BQWZzbEIsT0FDaEJyNkMsR0FBTyswQixTQUFTc2xCLEtBRWxCcjZDLEdBQU8rMEIsUUFBUXZ6QyxLQUFLOE4sSUFBSTBRLEdBQU8rMEIsT0FBTyxNQUFNbHpDLEtBQUttMUMsS0FBSzZPLEtBQUt2b0IsS0FBQUEsR0FDM0R0ZCxHQUFPZ3RCLFFBQVFuckMsS0FBSzZMLFFBQVFzL0IsTUFBTThHLE9BQ2xDOXpCLEdBQU82cEMsU0FBU2hvRCxLQUFLNkwsUUFBUW04QyxPQUFPcmI7Z0JBQ3RDO2NBQUE7QUFDaUMsOEJBQUEsT0FBakIzc0MsS0FBS3lpRCxZQUNyQnppRCxLQUFLeWlELFFBQVF0a0MsSUFBUW5lLEtBQUs2TCxRQUFReEUsSUFBSXJILEtBQUs0K0MsVUFBVTUrQyxLQUFLaXlDLEtBQUFBLEdBQUFBLFdBQ3REOXpCLEdBQU9ndEIsVUFDVGh0QixHQUFPdThDLGdCQUFBQSxRQUFnQixVQUVyQnY4QyxHQUFPNnBDLFdBRVA3cEMsR0FBTzhwQyxnQkFBZ0Jqb0QsS0FBSzZMLFFBQVFtOEMsT0FBTzdjLFNBQzNDaHRCLEdBQU9ncUMsZUFBZW5vRCxLQUFLNkwsUUFBUW04QyxPQUFPN3dDLFFBQzFDZ0gsR0FBT2txQyxZQUFZcm9ELEtBQUs2TCxRQUFRbThDLE9BQU8zNkMsS0FDdkM4USxHQUFPb3FDLFlBQVl2b0QsS0FBSzZMLFFBQVFtOEMsT0FBTzUyQyxNQUV2QytNLEdBQU82cEMsU0FBQUE7O0FBS2I3cEMsY0FBQUEsR0FBTzZwQyxTQUFTaG9ELEtBQUs2TCxRQUFRbThDLE9BQU9yYixTQUNwQ3h1QixHQUFPKzBCLFFBQVF2ekMsS0FBSzhOLElBQUkwUSxHQUFPKzBCLE9BQU8sTUFBTWx6QyxLQUFLbTFDLEtBQUs2TyxLQUFLdm9CLEtBQUFBO0FBRTdELG1CQUFPdGQ7VUFDVCxFQUFBLEdBRUEsRUFBQTNYLEtBQUEscUJBQUFuRCxPQUtBLFNBQWtCd0ksSUFBQUE7QUFDaEIsZ0JBQU1tdkMsS0FBTyxDQUNYbnZDLElBQ0E3TCxLQUFLNkwsU0FDTDdMLEtBQUtpd0QsZUFDTGp3RCxLQUFLdTVDLGNBQUFBO0FBR1B2NUMsaUJBQUt5bkQsWUFBWXR2QixPQUFPbjRCLEtBQUs2TCxTQUFTbXZDLEVBQUFBLEdBQUFBLFdBRWxDaDdDLEtBQUt5bkQsWUFBWXhHLGFBQ25CamhELEtBQUttd0QsZUFBZW53RCxLQUFLeW5ELFlBQVl4RztVQUV6QyxFQUFBLEdBRUEsRUFBQXo2QyxLQUFBLGtCQUFBbkQsT0FLQSxXQUFBO0FBQ0UsZ0JBQU1xNUQsS0FBUzE4RCxLQUFLNkwsUUFBUTZ3RCxRQUN4QmxJLEtBQUFBLE9BQ0FtTixLQUFBQTtBQXNESixtQkFBQSxXQXJESTNoRSxLQUFLeWdFLGNBRUp6Z0UsS0FBS3lnRSxvQkFBb0JyQyxNQUFBQSxTQUN4QjFCLEdBQU8vdkIsV0FDUyxjQUFoQit2QixHQUFPdmtELFFBQ1JuWSxLQUFLeWdFLG9CQUFvQlosTUFBQUEsU0FDeEJuRCxHQUFPL3ZCLFdBQ1Msa0JBQWhCK3ZCLEdBQU92a0QsUUFDUm5ZLEtBQUt5Z0Usb0JBQW9CdkIsTUFBQUEsU0FDeEJ4QyxHQUFPL3ZCLFdBQ1MsY0FBaEIrdkIsR0FBT3ZrRCxRQUNTLGtCQUFoQnVrRCxHQUFPdmtELFFBQ1JuWSxLQUFLeWdFLG9CQUFvQkwsTUFBQUEsVUFBZ0IxRCxHQUFPdmtELEtBQUt3MEIsYUFFdERnMUIsS0FBQUEsUUFBZSxTQUViQSxPQUNGbk4sS0FBY3gwRCxLQUFLNGhFLFFBQUFBLEtBQUFBLFNBR25CRCxLQUFBQSxTQUNFakYsR0FBTy92QixVQUNXLGNBQWhCK3ZCLEdBQU92a0QsUUFDVHE4QyxLQUFBQSxNQUNBeDBELEtBQUt5Z0UsV0FBVyxJQUFJckMsR0FDbEJwK0QsS0FBSzZMLFNBQ0w3TCxLQUFLbTFDLE1BQ0xuMUMsS0FBS3luRCxXQUFBQSxLQUVrQixrQkFBaEJpVixHQUFPdmtELE9BQ2hCblksS0FBS3lnRSxXQUFXLElBQUlaLEdBQ2xCNy9ELEtBQUs2TCxTQUNMN0wsS0FBS20xQyxNQUNMbjFDLEtBQUt5bkQsV0FBQUEsSUFHUHpuRCxLQUFLeWdFLFdBQVcsSUFBSXZCLEdBQ2xCbC9ELEtBQUs2TCxTQUNMN0wsS0FBS20xQyxNQUNMbjFDLEtBQUt5bkQsV0FBQUEsSUFJVHpuRCxLQUFLeWdFLFdBQVcsSUFBSUwsR0FDbEJwZ0UsS0FBSzZMLFNBQ0w3TCxLQUFLbTFDLE1BQ0xuMUMsS0FBS3luRCxXQUFBQSxJQUtUem5ELEtBQUt5Z0UsU0FBU3ZmLFdBQVdsaEQsS0FBSzZMLE9BQUFBLEdBRXpCMm9EO1VBQ1QsRUFBQSxHQUVBLEVBQUFodUQsS0FBQSxXQUFBbkQsT0FHQSxXQUFBO0FBQ0VyRCxpQkFBSzZoRSxXQUFBQSxHQUVMN2hFLEtBQUswZ0IsT0FBTzFnQixLQUFLbTFDLEtBQUsvSSxNQUFNcHNDLEtBQUswMUQsTUFBQUEsS0FBQUEsUUFDakMxMUQsS0FBSzh3QixLQUFLOXdCLEtBQUttMUMsS0FBSy9JLE1BQU1wc0MsS0FBS3kxRCxJQUFBQSxLQUFBQSxRQUMvQnoxRCxLQUFLMGdFLFlBQUFBLFdBQVkxZ0UsS0FBSzBnQixRQUFBQSxXQUFzQjFnQixLQUFLOHdCLElBQUFBLFNBRTdDOXdCLEtBQUswZ0UsYUFDUDFnRSxLQUFLMGdCLEtBQUtvaEQsV0FBVzloRSxJQUFBQSxHQUNyQkEsS0FBSzh3QixHQUFHZ3hDLFdBQVc5aEUsSUFBQUEsTUFFZkEsS0FBSzBnQixRQUNQMWdCLEtBQUswZ0IsS0FBS3FoRCxXQUFXL2hFLElBQUFBLEdBRW5CQSxLQUFLOHdCLE1BQ1A5d0IsS0FBSzh3QixHQUFHaXhDLFdBQVcvaEUsSUFBQUEsSUFJdkJBLEtBQUt5Z0UsU0FBUy9CLFFBQUFBO1VBQ2hCLEVBQUEsR0FFQSxFQUFBbDRELEtBQUEsY0FBQW5ELE9BR0EsV0FBQTtBQUNNckQsaUJBQUswZ0IsU0FDUDFnQixLQUFLMGdCLEtBQUtxaEQsV0FBVy9oRSxJQUFBQSxHQUNyQkEsS0FBSzBnQixPQUFBQSxTQUVIMWdCLEtBQUs4d0IsT0FDUDl3QixLQUFLOHdCLEdBQUdpeEMsV0FBVy9oRSxJQUFBQSxHQUNuQkEsS0FBSzh3QixLQUFBQSxTQUdQOXdCLEtBQUswZ0UsWUFBQUE7VUFDUCxFQUFBLEdBRUEsRUFBQWw2RCxLQUFBLFlBQUFuRCxPQU1BLFdBQUE7QUFDRSxtQkFBT3JELEtBQUsyeEM7VUFDZCxFQUFBLEdBRUEsRUFBQW5yQyxLQUFBLGNBQUFuRCxPQUtBLFdBQUE7QUFDRSxtQkFBT3JELEtBQUs0K0M7VUFDZCxFQUFBLEdBRUEsRUFBQXA0QyxLQUFBLFlBQUFuRCxPQUtBLFdBQUE7QUFDRSxtQkFBT3JELEtBQUs2TCxRQUFReEk7VUFDdEIsRUFBQSxHQUVBLEVBQUFtRCxLQUFBLGlCQUFBbkQsT0FRQSxTQUFjcUssSUFBS0QsSUFBSzZqRCxJQUFBQTtBQUN0QixnQkFBQSxXQUFJdHhELEtBQUs2TCxRQUFReEksT0FBcUI7QUFDcEMsa0JBQU1vNEIsS0FBUXo3QixLQUFLNkwsUUFBUW80QyxRQUFRc04sc0JBQ2pDN2pELElBQ0FELElBQ0E2akQsSUFDQXR4RCxLQUFLNkwsUUFBUXhJLEtBQUFBLEdBRVQyK0QsS0FBWWhpRSxLQUFLNkwsUUFBUW80QyxRQUFReDJDLE1BQU16TixLQUFLNkwsUUFBUW80QyxRQUFRdjJDO0FBQ2xFLGtCQUFBLFNBQUkxTixLQUFLNkwsUUFBUW80QyxRQUFRaFUsTUFBTXRELFNBQWtCO0FBQy9DLG9CQUFNOGtCLEtBQ0p6eEQsS0FBSzZMLFFBQVFvNEMsUUFBUWhVLE1BQU14aUMsTUFBTXpOLEtBQUs2TCxRQUFRbzRDLFFBQVFoVSxNQUFNdmlDO0FBQzlEMU4scUJBQUs2TCxRQUFRa3pDLEtBQUs1bkMsT0FDaEJuWCxLQUFLNkwsUUFBUW80QyxRQUFRaFUsTUFBTXZpQyxNQUFNK3RCLEtBQVFnMkI7Y0FDN0M7QUFDQXp4RCxtQkFBSzZMLFFBQVFxbkMsUUFBUWx6QyxLQUFLNkwsUUFBUW80QyxRQUFRdjJDLE1BQU0rdEIsS0FBUXVtQztZQUMxRDtBQUNFaGlFLG1CQUFLNkwsUUFBUXFuQyxRQUFRbHpDLEtBQUt3Z0UsV0FDMUJ4Z0UsS0FBSzZMLFFBQVFrekMsS0FBSzVuQyxPQUFPblgsS0FBS213RDtBQUdoQ253RCxpQkFBSzZnRSxzQkFBQUEsR0FDTDdnRSxLQUFLNHdELGtCQUFBQTtVQUNQLEVBQUEsR0FFQSxFQUFBcHFELEtBQUEseUJBQUFuRCxPQUlBLFdBQUE7QUFDeUMsMEJBQUEsT0FBNUJyRCxLQUFLNkwsUUFBUTJzRCxhQUN0Qng0RCxLQUFLeWdFLFNBQVNqSSxhQUFheDRELEtBQUs2TCxRQUFRMnNELFdBQVd4NEQsS0FBSzZMLFFBQVFxbkMsS0FBQUEsSUFFaEVsekMsS0FBS3lnRSxTQUFTakksYUFBYXg0RCxLQUFLNkwsUUFBUTJzRCxhQUFheDRELEtBQUs2TCxRQUFRcW5DLE9BRXpCLGNBQUEsT0FBaENsekMsS0FBSzZMLFFBQVE0c0QsaUJBQ3RCejRELEtBQUt5Z0UsU0FBU2hJLGlCQUFpQno0RCxLQUFLNkwsUUFBUTRzRCxlQUMxQ3o0RCxLQUFLNkwsUUFBUXFuQyxLQUFBQSxJQUdmbHpDLEtBQUt5Z0UsU0FBU2hJLGlCQUNaejRELEtBQUs2TCxRQUFRNHNELGlCQUFpQno0RCxLQUFLNkwsUUFBUXFuQztVQUVqRCxFQUFBLEdBRUEsRUFBQTFzQyxLQUFBLFFBQUFuRCxPQU9BLFNBQUs4TixJQUFBQTtBQUNILGdCQUFNZ04sS0FBU25lLEtBQUs2K0Msb0JBQUFBO0FBQ3BCLGdCQUFBLENBQUkxZ0MsR0FBTzR5QyxRQUFYO0FBS0Esa0JBQU0rSCxLQUFVOTRELEtBQUt5Z0UsU0FBUzFILFdBQUFBO0FBRzlCLzRELG1CQUFLeWdFLFNBQVN3QixTQUFTOXdELElBQUtnTixJQUFRbmUsS0FBSzQrQyxVQUFVNStDLEtBQUtpeUMsT0FBTzZtQixFQUFBQSxHQUMvRDk0RCxLQUFLa2lFLFVBQVUvd0QsSUFBSzJuRCxFQUFBQTtZQVBwQjtVQVFGLEVBQUEsR0FFQSxFQUFBdHlELEtBQUEsY0FBQW5ELE9BT0EsU0FBVzhOLElBQUFBO0FBQ1QsZ0JBQU1nTixLQUFTbmUsS0FBSzYrQyxvQkFBQUE7QUFDcEIsZ0JBQUEsQ0FBSTFnQyxHQUFPNHlDLFFBQVg7QUFLQSxrQkFBTStILEtBQVU5NEQsS0FBS3lnRSxTQUFTMUgsV0FBQUEsR0FDeEJsQyxLQUFZLENBQUE7QUFHbEI3MkQsbUJBQUt5Z0UsU0FBUy9ILFlBQVkxNEQsS0FBS3lnRSxTQUFTLy9DLE1BQ3hDMWdCLEtBQUt5Z0UsU0FBUzlILFVBQVUzNEQsS0FBS3lnRSxTQUFTM3ZDLElBR2xDM1MsR0FBTzRpRCxjQUNUbEssR0FBVW4yQyxPQUFPMWdCLEtBQUt5Z0UsU0FBUzBCLGFBQzdCaHhELElBQ0EsUUFDQTJuRCxJQUNBOTRELEtBQUs0K0MsVUFDTDUrQyxLQUFLaXlDLE9BQ0w5ekIsRUFBQUEsR0FBQUEsVUFFRUEsR0FBT2s4Qyx1QkFDVHI2RCxLQUFLeWdFLFNBQVMvSCxZQUFZN0IsR0FBVW4yQyxLQUFLeThDLE9BQ3ZDaC9DLEdBQU9vakQsaUJBQ1QxSyxHQUFVbjJDLEtBQUt3dkIsUUFBUWx3QyxLQUFLK3ZELFVBQVVrQixLQUFLOXlDLEdBQU9vakQsWUFBQUEsSUFFaERwakQsR0FBT3FqRCx3QkFDVDNLLEdBQVVuMkMsS0FBS3kyQyxhQUFhaDVDLEdBQU9xakQsc0JBRWpDcmpELEdBQU9zakQseUJBQ1Q1SyxHQUFVbjJDLEtBQUswMkMsY0FBY2o1QyxHQUFPc2pELHdCQUdwQ3RqRCxHQUFPMmlELFlBQ1RqSyxHQUFVL2xDLEtBQUs5d0IsS0FBS3lnRSxTQUFTMEIsYUFDM0JoeEQsSUFDQSxNQUNBMm5ELElBQ0E5NEQsS0FBSzQrQyxVQUNMNStDLEtBQUtpeUMsT0FDTDl6QixFQUFBQSxHQUFBQSxVQUVFQSxHQUFPazhDLHVCQUNUcjZELEtBQUt5Z0UsU0FBUzlILFVBQVU5QixHQUFVL2xDLEdBQUdxc0MsT0FDbkNoL0MsR0FBTzhpRCxlQUNUcEssR0FBVS9sQyxHQUFHb2YsUUFBUWx3QyxLQUFLK3ZELFVBQVVrQixLQUFLOXlDLEdBQU84aUQsVUFBQUEsSUFFOUM5aUQsR0FBTytpRCxzQkFDVHJLLEdBQVUvbEMsR0FBR3FtQyxhQUFhaDVDLEdBQU8raUQsb0JBRS9CL2lELEdBQU9nakQsdUJBQ1R0SyxHQUFVL2xDLEdBQUdzbUMsY0FBY2o1QyxHQUFPZ2pELHNCQUtsQ2hqRCxHQUFPNmlELGdCQUNUbkssR0FBVXNELFNBQVNuNkQsS0FBS3lnRSxTQUFTMEIsYUFDL0JoeEQsSUFDQSxVQUNBMm5ELElBQ0E5NEQsS0FBSzQrQyxVQUNMNStDLEtBQUtpeUMsT0FDTDl6QixFQUFBQSxHQUdFQSxHQUFPaWpELG1CQUNUdkssR0FBVXNELE9BQU9qcUIsUUFBUWx3QyxLQUFLK3ZELFVBQVVrQixLQUFLOXlDLEdBQU9pakQsY0FBQUEsSUFFbERqakQsR0FBT2tqRCwwQkFDVHhLLEdBQVVzRCxPQUFPaEQsYUFBYWg1QyxHQUFPa2pELHdCQUVuQ2xqRCxHQUFPbWpELDJCQUNUekssR0FBVXNELE9BQU8vQyxjQUFjajVDLEdBQU9takQsMEJBSXRDbmpELEdBQU80aUQsYUFDVC9nRSxLQUFLeWdFLFNBQVMyQixjQUNaanhELElBQ0FnTixJQUNBbmUsS0FBSzQrQyxVQUNMNStDLEtBQUtpeUMsT0FDTDRrQixHQUFVbjJDLElBQUFBLEdBR1Z2QyxHQUFPNmlELGVBQ1RoaEUsS0FBS3lnRSxTQUFTMkIsY0FDWmp4RCxJQUNBZ04sSUFDQW5lLEtBQUs0K0MsVUFDTDUrQyxLQUFLaXlDLE9BQ0w0a0IsR0FBVXNELE1BQUFBLEdBR1ZoOEMsR0FBTzJpRCxXQUNUOWdFLEtBQUt5Z0UsU0FBUzJCLGNBQ1pqeEQsSUFDQWdOLElBQ0FuZSxLQUFLNCtDLFVBQ0w1K0MsS0FBS2l5QyxPQUNMNGtCLEdBQVUvbEMsRUFBQUE7WUFwR2Q7VUF1R0YsRUFBQSxHQUVBLEVBQUF0cUIsS0FBQSxhQUFBbkQsT0FLQSxTQUFVOE4sSUFBSzJuRCxJQUFBQTtBQUNiLGdCQUFBLFdBQUk5NEQsS0FBSzZMLFFBQVFva0MsT0FBcUI7QUFFcEMsa0JBT0lyeEIsSUFQRWs5QyxLQUFROTdELEtBQUswZ0IsTUFDYnE3QyxLQUFRLzdELEtBQUs4d0I7QUFPbkIsa0JBTEk5d0IsS0FBS3luRCxZQUFZcEIsZUFBZXJtRCxLQUFLNCtDLFVBQVU1K0MsS0FBS2l5QyxLQUFBQSxLQUN0RGp5QyxLQUFLeW5ELFlBQVkrQixZQUFZcjRDLElBQUtuUixLQUFLNCtDLFVBQVU1K0MsS0FBS2l5QyxLQUFBQSxHQUlwRDZwQixHQUFNejBELE1BQU0wMEQsR0FBTTEwRCxJQUFJO0FBQ3hCckgscUJBQUt5bkQsWUFBWXpHLGNBQUFBLE9BQ2pCcGlDLEtBQVE1ZSxLQUFLeWdFLFNBQVMzRCxTQUFTLEtBQUtoRSxFQUFBQSxHQUNwQzNuRCxHQUFJMDNDLEtBQUFBO0FBRUosb0JBQU12TixLQUFnQnQ3QyxLQUFLcWlFLGFBQWFseEQsRUFBQUE7QUFDYixxQkFBdkJtcUMsR0FBY3JnQixVQUNoQjlwQixHQUFJOGxELFVBQVUzYixHQUFjanVDLEdBQUdpdUMsR0FBY2xxQyxDQUFBQSxHQUM3Q0QsR0FBSStsRCxPQUFPNWIsR0FBY3JnQixLQUFBQSxJQUkzQmo3QixLQUFLeW5ELFlBQVlqMEMsS0FBS3JDLElBQUt5TixHQUFNdlIsR0FBR3VSLEdBQU14TixHQUFHcFIsS0FBSzQrQyxVQUFVNStDLEtBQUtpeUMsS0FBQUEsR0FXakU5Z0MsR0FBSTgzQyxRQUFBQTtjQUNOLE9BQU87QUFFTGpwRCxxQkFBS3luRCxZQUFZekcsY0FBQUE7QUFHakIsb0JBQU1wTixLQUFjK0gsR0FDbEJ4cUMsSUFDQW5SLEtBQUs2TCxRQUFRb3VELGNBQWNoL0IsT0FDM0JqN0IsS0FBSzZMLFFBQVFvdUQsY0FBYzlpRCxNQUMzQjJrRCxFQUFBQTtBQUdGbDlDLGdCQUFBQSxLQUFRNWUsS0FBS3U2RCxlQUNYM21CLEdBQVl2bUMsR0FDWnVtQyxHQUFZeGlDLEdBQ1pwUixLQUFLNkwsUUFBUW91RCxjQUFjOWlELE1BQzNCblgsS0FBSzZMLFFBQVFvdUQsY0FBY2gvQixLQUFBQSxHQUc3Qmo3QixLQUFLeW5ELFlBQVlqMEMsS0FBS3JDLElBQUt5TixHQUFNdlIsR0FBR3VSLEdBQU14TixHQUFHcFIsS0FBSzQrQyxVQUFVNStDLEtBQUtpeUMsS0FBQUE7Y0FDbkU7WUFDRjtVQUNGLEVBQUEsR0FFQSxFQUFBenJDLEtBQUEsbUJBQUFuRCxPQU9BLFNBQWdCdWIsSUFBQUE7QUFDZCxnQkFBTW9rQyxLQUFNLENBQUE7QUFFWixnQkFBSWhqRCxLQUFLeW5ELFlBQVlpSyxRQUFBQSxHQUFXO0FBQzlCLGtCQUFNcFcsS0FBZ0J0N0MsS0FBS3FpRSxhQUFBQTtBQUN2QmhuQixpQkFBWXI3QyxLQUFLeW5ELFlBQVlqRCxRQUFBQSxHQUFXNWxDLElBQU8wOEIsRUFBQUEsS0FDakQwSCxHQUFJbjhDLEtBQUssRUFBRXk3RCxRQUFRdGlFLEtBQUtxSCxJQUFJdXFELFNBQVMsRUFBQSxDQUFBO1lBRXpDO0FBRUEsZ0JBQU01akQsS0FBTSxFQUNWa21DLE1BQU10MUIsR0FBTXZSLEdBQ1o4bUMsS0FBS3YxQixHQUFNeE4sRUFBQUE7QUFPYixtQkFKSXBSLEtBQUt1aUUsa0JBQWtCdjBELEVBQUFBLEtBQ3pCZzFDLEdBQUluOEMsS0FBSyxFQUFFeTdELFFBQVF0aUUsS0FBS3FILEdBQUFBLENBQUFBLEdBR25CMjdDO1VBQ1QsRUFBQSxHQUVBLEVBQUF4OEMsS0FBQSxxQkFBQW5ELE9BTUEsU0FBa0IySyxJQUFBQTtBQUNoQixnQkFBSWhPLEtBQUswZ0UsV0FBVztBQUNsQixrQkFDTThCLEtBQVF4aUUsS0FBSzBnQixLQUFLclQsR0FDbEJvMUQsS0FBUXppRSxLQUFLMGdCLEtBQUt0UCxHQUNsQnN4RCxLQUFNMWlFLEtBQUs4d0IsR0FBR3pqQixHQUNkczFELEtBQU0zaUUsS0FBSzh3QixHQUFHMWYsR0FDZHd4RCxLQUFPNTBELEdBQUlrbUMsTUFDWDJ1QixLQUFPNzBELEdBQUltbUM7QUFXakIscUJBVGFuMEMsS0FBS3lnRSxTQUFTcUMsa0JBQ3pCTixJQUNBQyxJQUNBQyxJQUNBQyxJQUNBQyxJQUNBQyxFQUFBQSxJQWRjO1lBa0JsQjtBQUNFLG1CQUFBO1VBRUosRUFBQSxHQUVBLEVBQUFyOEQsS0FBQSxnQkFBQW5ELE9BT0EsU0FBYThOLElBQUFBO0FBQ1gsZ0JBQU0ybkQsS0FBVTk0RCxLQUFLeWdFLFNBQVMxSCxXQUFBQSxHQUN4Qm42QyxLQUFRNWUsS0FBS3lnRSxTQUFTM0QsU0FBUyxLQUFLaEUsRUFBQUE7QUFBQUEsdUJBRXRDM25ELE1BQ0ZuUixLQUFLeW5ELFlBQVlyRCxtQkFDZmp6QyxJQUNBblIsS0FBSzQrQyxVQUNMNStDLEtBQUtpeUMsT0FDTHJ6QixHQUFNdlIsR0FDTnVSLEdBQU14TixDQUFBQTtBQUlWLGdCQUFNNHhDLEtBQU0sRUFDVjMxQyxHQUFHdVIsR0FBTXZSLEdBQ1QrRCxHQUFHcFIsS0FBS3luRCxZQUFZdHdDLEtBQUtncUMsT0FDekJsbUIsT0FBTyxFQUFBO0FBR1QsZ0JBQUEsQ0FBS2o3QixLQUFLeW5ELFlBQVlpSyxRQUFBQTtBQUNwQixxQkFBTzFPO0FBR1QsZ0JBQWdDLGlCQUE1QmhqRCxLQUFLNkwsUUFBUWt6QyxLQUFLK0Y7QUFDcEIscUJBQU85QjtBQUdULGdCQUFNN3ZDLEtBQUtuVCxLQUFLMGdCLEtBQUt0UCxJQUFJcFIsS0FBSzh3QixHQUFHMWYsR0FDM0I4QixLQUFLbFQsS0FBSzBnQixLQUFLclQsSUFBSXJOLEtBQUs4d0IsR0FBR3pqQixHQUM3QjR0QixLQUFRdDdCLEtBQUsrNkIsTUFBTXZuQixJQUFJRCxFQUFBQTtBQVEzQixvQkFMSytuQixLQUFBQSxNQUFjL25CLEtBQUssS0FBTytuQixLQUFRLEtBQUsvbkIsS0FBSyxPQUMvQytuQixNQUFTdDdCLEtBQUs2UixLQUVoQnd4QyxHQUFJL25CLFFBQVFBLElBRUwrbkI7VUFDVCxFQUFBLEdBRUEsRUFBQXg4QyxLQUFBLGtCQUFBbkQsT0FVQSxTQUFlZ0ssSUFBRytELElBQUdxRCxJQUFRd21CLElBQUFBO0FBQzNCLG1CQUFPLEVBQ0w1dEIsR0FBR0EsS0FBSW9ILEtBQVM5VSxLQUFLd1UsSUFBSThtQixFQUFBQSxHQUN6QjdwQixHQUFHQSxLQUFJcUQsS0FBUzlVLEtBQUt5VSxJQUFJNm1CLEVBQUFBLEVBQUFBO1VBRTdCLEVBQUEsR0FFQSxFQUFBejBCLEtBQUEsVUFBQW5ELE9BR0EsV0FBQTtBQUNFckQsaUJBQUs0K0MsV0FBQUE7VUFDUCxFQUFBLEdBRUEsRUFBQXA0QyxLQUFBLFlBQUFuRCxPQUdBLFdBQUE7QUFDRXJELGlCQUFLNCtDLFdBQUFBO1VBQ1AsRUFBQSxHQUVBLEVBQUFwNEMsS0FBQSxXQUFBbkQsT0FLQSxXQUFBO0FBQ0UsbUJBQU9yRCxLQUFLeWdFLFNBQVNtQixRQUFBQTtVQUN2QixFQUFBLEdBRUEsRUFBQXA3RCxLQUFBLFVBQUFuRCxPQUdBLFdBQUE7QUFDRXJELGlCQUFLNGhFLFFBQUFBLEdBQ0w1aEUsS0FBSzZoRSxXQUFBQSxHQUFBQSxPQUNFN2hFLEtBQUttMUMsS0FBSzFJLE1BQU16c0MsS0FBS3FILEVBQUFBO1VBQzlCLEVBQUEsR0FFQSxFQUFBYixLQUFBLGtCQUFBbkQsT0FLQSxXQUFBO0FBQ0UsbUJBQUEsV0FDRXJELEtBQUttMUMsS0FBSy9JLE1BQU1wc0MsS0FBSzAxRCxNQUFBQSxLQUFBQSxXQUNyQjExRCxLQUFLbTFDLEtBQUsvSSxNQUFNcHNDLEtBQUt5MUQsSUFBQUE7VUFFekIsRUFBQSxDQUFBLEdBQUMsQ0FBQSxFQUFBanZELEtBQUEsZ0JBQUFuRCxPQXgzQkQsU0FDRXl1RCxJQUNBQyxJQUFBQTtBQUlBLGdCQUhBTSxLQUFhcHhELFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUEsQ0FBQSxLQUFBQSxVQUFBLENBQUEsR0FDYmd2RCxLQUFhaHZELFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUEsQ0FBQSxJQUFBQSxVQUFBLENBQUEsSUFBRyxDQUFBLEdBQ2hCOGhFLEtBQWU5aEUsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLEtBQUFBLFVBQUEsQ0FBQTtBQWlHZixnQkFyRUEraEUsR0ExQmUsQ0FDYixrQkFDQSxzQkFDQSxNQUNBLFFBQ0EsVUFDQSxjQUNBLHNCQUNBLFVBQ0EsUUFDQSxXQUNBLFdBQ0EsV0FDQSxrQkFDQSxxQkFDQSxpQkFDQSxNQUNBLFNBQ0EsU0FDQSxTQUNBLFFBQ0EsVUFDQSxpQkFBQSxHQUkwQmxSLElBQWVDLElBQVlNLEVBQUFBLEdBQUFBLFdBSXJETixHQUFXcUksa0JBQUFBLFdBQ1hySSxHQUFXcUksZUFBZTE1QyxTQUV0Qml6QyxHQUFnQjVCLEdBQVdxSSxlQUFlMTVDLElBQUFBLElBQzVDb3hDLEdBQWNzSSxlQUFlMTVDLE9BQU9xeEMsR0FBV3FJLGVBQWUxNUMsUUFFOURveEMsR0FBY3NJLGVBQWUxNUMsT0FBQUEsV0FDM0J1dkMsR0FBY21LLGVBQWUxNUMsT0FDekJ1dkMsR0FBY21LLGVBQWUxNUMsT0FDN0IsR0FDTnluQixRQUFRL25DLE1BQU0sMkNBQUEsS0FBQSxXQUtoQjJ4RCxHQUFXcUksa0JBQUFBLFdBQ1hySSxHQUFXcUksZUFBZXRwQyxPQUV0QjZpQyxHQUFnQjVCLEdBQVdxSSxlQUFldHBDLEVBQUFBLElBQzVDZ2hDLEdBQWNzSSxlQUFldHBDLEtBQUtpaEMsR0FBV3FJLGVBQWV0cEMsTUFFNURnaEMsR0FBY3NJLGVBQWV0cEMsS0FBQUEsV0FDM0JtL0IsR0FBY21LLGVBQWV0cEMsS0FDekJtL0IsR0FBY21LLGVBQWV0cEMsS0FDN0IsR0FDTnFYLFFBQVEvbkMsTUFBTSx5Q0FBQSxLQUtkczdDLEdBQWFxVyxHQUFXOWhCLEtBQUFBLElBQzFCNmhCLEdBQWM3aEIsUUFBUThoQixHQUFXOWhCLFFBQ3ZCeUwsR0FBYW9XLEdBQWM3aEIsS0FBQUEsTUFDckM2aEIsR0FBYzdoQixRQUFBQSxTQUdoQnNpQixHQUFhVCxJQUFlQyxJQUFZLFVBQVU5QixFQUFBQSxHQUNsRHNDLEdBQWFULElBQWVDLElBQVksVUFBVTlCLEVBQUFBLEdBQ2xEc0MsR0FBYVQsSUFBZUMsSUFBWSxjQUFjOUIsRUFBQUEsR0FBQUEsV0FFbEQ4QixHQUFXckosVUFBOEMsU0FBdEJxSixHQUFXckosU0FDaERvSixHQUFjcEosU0FBU3FKLEdBQVdySixTQUFBQSxTQUN6QjJKLE1BQWdELFNBQXRCTixHQUFXckosV0FDOUNvSixHQUFjcEosU0FBU2xkLEdBQWN5a0IsR0FBY3ZILE1BQUFBLElBQUFBLFdBSWpEcUosR0FBVzlOLFdBQWdELFNBQXZCOE4sR0FBVzlOLFdBQUFBLFdBQzdDOE4sR0FBVzlOLFFBQVF2MkMsUUFDckJva0QsR0FBYzdOLFFBQVF2MkMsTUFBTXFrRCxHQUFXOU4sUUFBUXYyQyxNQUFBQSxXQUU3Q3FrRCxHQUFXOU4sUUFBUXgyQyxRQUNyQnFrRCxHQUFjN04sUUFBUXgyQyxNQUFNc2tELEdBQVc5TixRQUFReDJDLE1BRWpEOGtELEdBQ0VULEdBQWM3TixTQUNkOE4sR0FBVzlOLFNBQ1gsU0FDQWdNLEdBQWNoTSxPQUFBQSxLQUFBQSxTQUVQb08sTUFBaUQsU0FBdkJOLEdBQVc5TixZQUM5QzZOLEdBQWM3TixVQUFVelksR0FBY3lrQixHQUFjaE0sT0FBQUEsSUFBQUEsV0FJbEQ4TixHQUFXbmxCLFVBQThDLFNBQXRCbWxCLEdBQVdubEI7QUFDaEQsa0JBQWlDLFlBQUEsT0FBdEJtbEIsR0FBV25sQixRQUFxQjtBQUN6QyxvQkFBTUEsS0FBU21sQixHQUFXbmxCLE9BQU94aUMsWUFBQUE7QUFDakMwbkQsZ0JBQUFBLEdBQWNsbEIsT0FBTzliLEdBQUc2YixVQUFBQSxNQUFVSixHQUFBSyxFQUFBQSxFQUFNOXJDLEtBQU44ckMsSUFBZSxJQUFBLEdBQ2pEa2xCLEdBQWNsbEIsT0FBT3V0QixPQUFPeHRCLFVBQUFBLE1BQVVKLEdBQUFLLEVBQUFBLEVBQU05ckMsS0FBTjhyQyxJQUFlLFFBQUEsR0FDckRrbEIsR0FBY2xsQixPQUFPbHNCLEtBQUtpc0IsVUFBQUEsTUFBVUosR0FBQUssRUFBQUEsRUFBTTlyQyxLQUFOOHJDLElBQWUsTUFBQTtjQUNwRCxPQUFNO0FBQUEsb0JBQWlDLGFBQTdCMWYsR0FBTzZrQyxHQUFXbmxCLE1BQUFBO0FBb0IzQix3QkFBTSxJQUFJNUUsTUFDUixrR0FDRWk3QixHQUFlbFIsR0FBV25sQixNQUFBQSxDQUFBQTtBQXJCOUIybEIsbUJBQ0VULEdBQWNsbEIsUUFDZG1sQixHQUFXbmxCLFFBQ1gsTUFDQXFqQixHQUFjcmpCLE1BQUFBLEdBRWhCMmxCLEdBQ0VULEdBQWNsbEIsUUFDZG1sQixHQUFXbmxCLFFBQ1gsVUFDQXFqQixHQUFjcmpCLE1BQUFBLEdBRWhCMmxCLEdBQ0VULEdBQWNsbEIsUUFDZG1sQixHQUFXbmxCLFFBQ1gsUUFDQXFqQixHQUFjcmpCLE1BQUFBO2NBT2xCOztBQUFBLHVCQUNTeWxCLE1BQWdELFNBQXRCTixHQUFXbmxCLFdBQzlDa2xCLEdBQWNsbEIsU0FBU3BCLEdBQWN5a0IsR0FBY3JqQixNQUFBQTtBQUlyRCxnQkFBQSxXQUFJbWxCLEdBQVc1bUIsU0FBNEMsU0FBckI0bUIsR0FBVzVtQixPQUFnQjtBQUMvRCxrQkFBTTB2QixLQUFZcUksR0FBU25SLEdBQVc1bUIsS0FBQUEsSUFDbEMsRUFDRUEsT0FBTzRtQixHQUFXNW1CLE9BQ2xCNkcsV0FBVytmLEdBQVc1bUIsT0FDdEI4RyxPQUFPOGYsR0FBVzVtQixPQUNsQjNDLFNBQUFBLE9BQ0FtZCxTQUFTLEVBQUEsSUFFWG9NLEdBQVc1bUIsT0FDVDJ2QixLQUFVaEosR0FBYzNtQjtBQUc5QixrQkFBSTQzQjtBQUNGeGdCLG1CQUFXdVksSUFBUzdLLEdBQWM5a0IsT0FBQUEsT0FBY2tuQixFQUFBQTs7QUFHaEQseUJBQVd6akQsTUFBS2tzRDtBQUNWMTRELHlCQUFPeEIsVUFBVUgsZUFBZUssS0FBS2c2RCxJQUFTbHNELEVBQUFBLEtBQUFBLE9BQ3pDa3NELEdBQVFsc0QsRUFBQUE7QUFLckIsa0JBQUlzMEQsR0FBU3BJLEVBQUFBO0FBQ1hBLGdCQUFBQSxHQUFRM3ZCLFFBQVEydkIsSUFDaEJBLEdBQVE5b0IsWUFBWThvQixJQUNwQkEsR0FBUTdvQixRQUFRNm9CLElBQ2hCQSxHQUFRdHlCLFVBQUFBLE9BQVUsV0FDZHF5QixHQUFVbFYsWUFDWm1WLEdBQVFuVixVQUFVO21CQUVmO0FBQ0wsb0JBQUl3ZCxLQUFBQTtBQUFnQiwyQkFDaEJ0SSxHQUFVMXZCLFVBQ1oydkIsR0FBUTN2QixRQUFRMHZCLEdBQVUxdkIsT0FDMUJnNEIsS0FBQUEsT0FBZ0IsV0FFZHRJLEdBQVU3b0IsY0FDWjhvQixHQUFROW9CLFlBQVk2b0IsR0FBVTdvQixXQUM5Qm14QixLQUFBQSxPQUFnQixXQUVkdEksR0FBVTVvQixVQUNaNm9CLEdBQVE3b0IsUUFBUTRvQixHQUFVNW9CLE9BQzFCa3hCLEtBQUFBLE9BQWdCLFdBRWR0SSxHQUFVcnlCLFlBQ1pzeUIsR0FBUXR5QixVQUFVcXlCLEdBQVVyeUIsVUFBQUEsV0FFMUJxeUIsR0FBVWxWLFlBQ1ptVixHQUFRblYsVUFBVWhtRCxLQUFLK04sSUFBSSxHQUFHL04sS0FBSzhOLElBQUksR0FBR290RCxHQUFVbFYsT0FBQUEsQ0FBQUEsSUFBQUEsU0FHbER3ZCxLQUNGckksR0FBUXR5QixVQUFBQSxRQUFVLFdBRWRzeUIsR0FBUXR5QixZQUNWc3lCLEdBQVF0eUIsVUFBVTtjQUd4QjtZQUNEO0FBQUEsdUJBQVU2cEIsTUFBK0MsU0FBckJOLEdBQVc1bUIsVUFDOUMybUIsR0FBYzNtQixRQUFRK2tCLEdBQWFELEdBQWM5a0IsS0FBQUE7QUFBQUEscUJBRy9Da25CLE1BQThDLFNBQXBCTixHQUFXaFQsU0FDdkMrUyxHQUFjL1MsT0FBT21SLEdBQWFELEdBQWNsUixJQUFBQSxJQUc5QzM4QyxPQUFPeEIsVUFBVUgsZUFBZUssS0FBS2l4RCxJQUFZLG1CQUFBLE1BQ25ENXBCLFFBQVFDLEtBQ04sbUxBQUEsR0FFRjBwQixHQUFjbUksY0FBYzlpRCxPQUFPNDZDLEdBQVdxUjtVQUVsRCxFQUFBLENBQUEsQ0FBQSxHQUFDN0M7UUFBQSxFQXRVTyxHQ2pCSjhDLEtBQVksV0FBQTtBQU1oQixtQkFBQUEsR0FBWWx1QixJQUFNZCxJQUFReWUsSUFBQUE7QUFBUSxnQkFBQWxrQyxJQUFBK1AsS0FBQTMrQjtBQUFBMmpCLGVBQUFBLE1BQUEwL0MsRUFBQUEsR0FDaENyakUsS0FBS20xQyxPQUFPQSxJQUNabjFDLEtBQUtxMEMsU0FBU0EsSUFDZHIwQyxLQUFLOHlELFNBQVNBLElBR2Q5eUQsS0FBS20xQyxLQUFLNmQsVUFBVXRtQixhQUFheWEsR0FBQXY0QixLQUFJNXVCLEtBQUMwYSxNQUFBQSxFQUFNNVosS0FBQTh0QixJQUFNNXVCLElBQUFBLEdBRWxEQSxLQUFLc2pFLGlCQUFpQixFQUNwQi84QixLQUFLLFNBQUNseEIsSUFBT3llLElBQUFBO0FBQ1g2SyxjQUFBQSxHQUFLNEgsSUFBSXpTLEdBQU9xL0IsS0FBQUE7WUFDakIsR0FDRGg3QixRQUFRLFNBQUM5aUIsSUFBT3llLElBQUFBO0FBQ2Q2SyxjQUFBQSxHQUFLeEcsT0FBT3JFLEdBQU9xL0IsS0FBQUE7WUFDcEIsR0FDRG5zQixRQUFRLFNBQUMzeEIsSUFBT3llLElBQUFBO0FBQ2Q2SyxjQUFBQSxHQUFLcUksT0FBT2xULEdBQU9xL0IsS0FBQUE7WUFDckIsRUFBQSxHQUdGbnpELEtBQUs2TCxVQUFVLENBQUEsR0FDZjdMLEtBQUt1NUMsaUJBQWlCLEVBQ3BCM00sUUFBUSxFQUNOOWIsSUFBSSxFQUFFNmIsU0FBQUEsT0FBZ0JzdkIsYUFBYSxHQUFHOWpELE1BQU0sUUFBQSxHQUM1Q2dpRCxRQUFRLEVBQUV4dEIsU0FBQUEsT0FBZ0JzdkIsYUFBYSxHQUFHOWpELE1BQU0sUUFBQSxHQUNoRHVJLE1BQU0sRUFBRWlzQixTQUFBQSxPQUFnQnN2QixhQUFhLEdBQUc5akQsTUFBTSxRQUFBLEVBQUEsR0FFaERpaUQsZ0JBQWdCLEVBQ2QxNUMsTUFBTSxHQUNOb1EsSUFBSSxFQUFBLEdBRU51cEMsb0JBQUFBLE1BQ0FsdkIsT0FBTyxFQUNMQSxPQUFPLFdBQ1A2RyxXQUFXLFdBQ1hDLE9BQU8sV0FDUHpKLFNBQVMsUUFDVG1kLFNBQVMsRUFBQSxHQUVYK0MsUUFBQUEsT0FDQTNKLE1BQU0sRUFDSjVULE9BQU8sV0FDUGgwQixNQUFNLElBQ040dUMsTUFBTSxTQUNOalUsWUFBWSxRQUNacVQsYUFBYSxHQUNiRixhQUFhLFdBQ2JILE9BQU8sY0FDUDNGLE9BQUFBLE9BQ0F1QyxTQUFTLEdBQ1RuRSxNQUFNLEVBQ0pwQixLQUFLLE9BQUEsR0FFUGtYLFVBQVUsRUFDUmxYLEtBQUssY0FBQSxHQUVQcUIsTUFBTSxFQUNKckIsS0FBSyxTQUFBLEdBRVBzQixNQUFNLEVBQ0p0QixLQUFLLElBQ0xobEMsTUFBTSxJQUNONHVDLE1BQU0sZUFDTnJFLFNBQVMsRUFBQSxFQUFBLEdBR2JxUCxRQUFBQSxPQUNBeUgsWUFBWSxLQUNadm9CLE9BQUFBLFFBQ0ErVixvQkFBQUEsTUFDQXRoRCxRQUFBQSxRQUNBc3NELFNBQUFBLE1BQ0EvTSxTQUFTLEVBQ1B2MkMsS0FBSyxHQUNMRCxLQUFLLElBQ0x3aUMsT0FBTyxFQUNMdEQsU0FBQUEsTUFDQWovQixLQUFLLElBQ0xELEtBQUssSUFDTDAyQyxZQUFZLElBQ1pELGVBQWUsRUFBQSxHQUVqQnFOLHVCQUF1QixTQUFVN2pELElBQUtELElBQUs2akQsSUFBT2p1RCxJQUFBQTtBQUNoRCxrQkFBSW9LLE9BQVFDO0FBQ1YsdUJBQU87QUFFUCxrQkFBTSt0QixLQUFRLEtBQUtodUIsS0FBTUM7QUFDekIscUJBQU8vTixLQUFLOE4sSUFBSSxJQUFJcEssS0FBUXFLLE1BQU8rdEIsRUFBQUE7WUFFdkMsRUFBQSxHQUVGZzlCLGdCQUFnQixLQUNoQndCLGVBQWUsRUFDYjlpRCxNQUFNLElBQ044akIsT0FBT3Q3QixLQUFLNlIsS0FBSyxHQUNqQjBwRCxxQkFBQUEsS0FBcUIsR0FFdkJsVCxRQUFRLEVBQ05yYixTQUFBQSxPQUNBeEIsT0FBTyxtQkFDUGgwQixNQUFNLElBQ045SixHQUFHLEdBQ0grRCxHQUFHLEVBQUEsR0FFTDBnQyxZQUFZLEVBQ1ZuRixTQUFBQSxPQUNBeEIsT0FBTyx1QkFDUGgwQixNQUFNLElBQ051eEMsUUFBQUEsTUFBUSxHQUVWZ1UsUUFBUSxFQUNOL3ZCLFNBQUFBLE1BQ0F4MEIsTUFBTSxXQUNONm5ELGdCQUFnQixRQUNoQlgsV0FBVyxJQUFBLEdBRWIxdEIsT0FBQUEsUUFDQXVCLE9BQU8sR0FDUDd2QyxPQUFBQSxPQUFPd2IsR0FHVDBqQyxHQUFXdmlELEtBQUs2TCxTQUFTN0wsS0FBS3U1QyxjQUFBQSxHQUU5QnY1QyxLQUFLdXpELG1CQUFBQTtVQUNQO0FBeVhDLGlCQXZYRDFsQyxHQUFBdzFDLElBQUEsQ0FBQSxFQUFBNzhELEtBQUEsc0JBQUFuRCxPQUdBLFdBQUE7QUFBcUIsZ0JBQUF1c0MsSUFBQVEsSUFBQXJNLEtBQUEvakM7QUFFbkJBLGlCQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsOEJBQThCLFNBQUNnRCxJQUFBQTtBQUFzQixrQkFBaEJwQyxLQUFBQSxFQUFJOVUsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLE1BQUFBLFVBQUEsQ0FBQTtBQUMvQyw0QkFBVGtYLE9BQ0ZBLEtBQU87QUFFVCxrQkFBSXE4QyxLQUFBQTtBQUNKLHVCQUFXOE4sTUFBVXYrQixHQUFLb1IsS0FBSzFJO0FBQzdCLG9CQUFJcnFDLE9BQU94QixVQUFVSCxlQUFlSyxLQUFLaWpDLEdBQUtvUixLQUFLMUksT0FBTzYxQixFQUFBQSxHQUFTO0FBQ2pFLHNCQUFNMTNCLEtBQU83RyxHQUFLb1IsS0FBSzFJLE1BQU02MUIsRUFBQUEsR0FDdkJpQixLQUFXeC9CLEdBQUtvUixLQUFLcnJDLEtBQUsyaUMsTUFBTW5xQyxJQUFJZ2dFLEVBQUFBO0FBSTFDLHNCQUFnQixRQUFaaUIsSUFBa0I7QUFDcEIsd0JBQU1DLEtBQWdCRCxHQUFTN0c7QUFBQUEsK0JBQzNCOEcsTUFBQUEsU0FFQUEsR0FBYzcyQixXQUNTLGNBQXZCNjJCLEdBQWNyckQsU0FBQUEsV0FFVkEsS0FDRnl5QixHQUFLc1csV0FBVyxFQUFFd2IsUUFBQUEsTUFBUSxDQUFBLElBRTFCOXhCLEdBQUtzVyxXQUFXLEVBQUV3YixRQUFRLEVBQUV2a0QsTUFBTUEsR0FBQUEsRUFBQUEsQ0FBQUEsR0FFcENxOEMsS0FBQUE7a0JBR047Z0JBQ0Y7QUFBQSx1QkFFRXorQyxNQUFBQSxTQUFpQnkrQyxNQUNuQnp3QixHQUFLb1IsS0FBS3FlLFFBQVF6OUMsS0FBSyxjQUFBO1lBRTNCLENBQUEsR0FVQS9WLEtBQUttMUMsS0FBS3FlLFFBQVFyK0MsR0FBRyxnQkFBZ0IsV0FBQTtBQUNuQzR1QixjQUFBQSxHQUFLMC9CLGVBQUFBO1lBQ1AsQ0FBQSxHQUdBempFLEtBQUttMUMsS0FBS3FlLFFBQVFyK0MsR0FBRyxnQkFBZ0JneUMsR0FBQXZYLEtBQUk1dkMsS0FBQ3l6RCxPQUFBQSxFQUFPM3lELEtBQUE4dUMsSUFBTTV2QyxJQUFBQSxDQUFBQSxHQUN2REEsS0FBS20xQyxLQUFLcWUsUUFBUXIrQyxHQUFHLFdBQVdneUMsR0FBQS9XLEtBQUlwd0MsS0FBQ3l6RCxPQUFBQSxFQUFPM3lELEtBQUFzdkMsSUFBTXB3QyxJQUFBQSxDQUFBQSxHQUNsREEsS0FBS20xQyxLQUFLcWUsUUFBUXIrQyxHQUFHLFdBQVcsV0FBQTtBQUM5QnpGLGlCQUFRcTBCLEdBQUt1L0IsZ0JBQWdCLFNBQUN2dkMsSUFBVTFlLElBQUFBO0FBQ2xDMHVCLGdCQUFBQSxHQUFLb1IsS0FBS3JyQyxLQUFLMmlDLFNBQU8xSSxHQUFLb1IsS0FBS3JyQyxLQUFLMmlDLE1BQU1qM0IsSUFBSUgsSUFBTzBlLEVBQUFBO2NBQzVELENBQUEsR0FBQSxPQUNPZ1EsR0FBS29SLEtBQUs2ZCxVQUFVdG1CLFlBQUFBLE9BQ3BCM0ksR0FBS3UvQixlQUFlLzhCLEtBQUFBLE9BQ3BCeEMsR0FBS3UvQixlQUFlbnJDLFFBQUFBLE9BQ3BCNEwsR0FBS3UvQixlQUFldDhCLFFBQUFBLE9BQ3BCakQsR0FBS3UvQjtZQUNkLENBQUE7VUFDRixFQUFBLEdBRUEsRUFBQTk4RCxLQUFBLGNBQUFuRCxPQUlBLFNBQVd3SSxJQUFBQTtBQUNULGdCQUFBLFdBQUlBLElBQXVCO0FBRXpCMDBELGlCQUFLN1AsYUFBYTF3RCxLQUFLNkwsU0FBU0EsSUFBQUEsTUFBZTdMLEtBQUt1NUMsZ0JBQUFBLElBQWdCO0FBR3BFLGtCQUFJaWIsS0FBQUE7QUFDSixrQkFBQSxXQUFJM29ELEdBQVE2d0Q7QUFDVix5QkFBVzRGLE1BQVV0aUUsS0FBS20xQyxLQUFLMUk7QUFDekJycUMseUJBQU94QixVQUFVSCxlQUFlSyxLQUFLZCxLQUFLbTFDLEtBQUsxSSxPQUFPNjFCLEVBQUFBLE1BQ3hEOU4sS0FDRXgwRCxLQUFLbTFDLEtBQUsxSSxNQUFNNjFCLEVBQUFBLEVBQVExQixlQUFBQSxLQUFvQnBNO0FBTXBELGtCQUFBLFdBQUkzb0QsR0FBUWt6QztBQUNWLHlCQUFXdWpCLE1BQVV0aUUsS0FBS20xQyxLQUFLMUk7QUFDekJycUMseUJBQU94QixVQUFVSCxlQUFlSyxLQUFLZCxLQUFLbTFDLEtBQUsxSSxPQUFPNjFCLEVBQUFBLEtBQ3hEdGlFLEtBQUttMUMsS0FBSzFJLE1BQU02MUIsRUFBQUEsRUFBUTFSLGtCQUFBQTtBQUFBQSx5QkFPNUIva0QsR0FBUWtsRCxVQUFBQSxXQUNSbGxELEdBQVFtbEQsV0FBQUEsU0FDUndELE1BRUF4MEQsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLGNBQUE7WUFFM0I7VUFDRixFQUFBLEdBRUEsRUFBQXZQLEtBQUEsV0FBQW5ELE9BT0EsU0FBUW9wQyxJQUFBQTtBQUEwQixnQkFBQW5JLEtBQUF0a0MsTUFBbkI4ekQsS0FBUzd5RCxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsS0FBQUEsVUFBQSxDQUFBLEdBQ2hCeWlFLEtBQWUxakUsS0FBS20xQyxLQUFLcnJDLEtBQUsyaUM7QUFFcEMsZ0JBQUl1bkIsRUFBY0EsZUFBQyxNQUFNdm5CLEVBQUFBO0FBQ3ZCenNDLG1CQUFLbTFDLEtBQUtyckMsS0FBSzJpQyxRQUFRQTtxQkFDZHhkLEdBQWN3ZCxFQUFBQTtBQUN2QnpzQyxtQkFBS20xQyxLQUFLcnJDLEtBQUsyaUMsUUFBUSxJQUFJd25CLEVBQU9BLFdBQ2xDajBELEtBQUttMUMsS0FBS3JyQyxLQUFLMmlDLE1BQU1sRyxJQUFJa0csRUFBQUE7aUJBQ3BCO0FBQUEsa0JBQUtBO0FBR1Ysc0JBQU0sSUFBSTFvQyxVQUFVLDJCQUFBO0FBRnBCL0QsbUJBQUttMUMsS0FBS3JyQyxLQUFLMmlDLFFBQVEsSUFBSXduQixFQUFPQTtZQUdwQztBQWNBLGdCQVhJeVAsTUFFRmgwRCxHQUFRMVAsS0FBS3NqRSxnQkFBZ0IsU0FBQ3Z2QyxJQUFVMWUsSUFBQUE7QUFDdENxdUQsY0FBQUEsR0FBYWx1RCxJQUFJSCxJQUFPMGUsRUFBQUE7WUFDMUIsQ0FBQSxHQUlGL3pCLEtBQUttMUMsS0FBSzFJLFFBQVEsQ0FBQSxHQUdkenNDLEtBQUttMUMsS0FBS3JyQyxLQUFLMmlDLE9BQU87QUFFeEIvOEIsaUJBQVExUCxLQUFLc2pFLGdCQUFnQixTQUFDdnZDLElBQVUxZSxJQUFBQTtBQUN0Q2l2QixnQkFBQUEsR0FBSzZRLEtBQUtyckMsS0FBSzJpQyxNQUFNdDNCLEdBQUdFLElBQU8wZSxFQUFBQTtjQUNqQyxDQUFBO0FBR0Esa0JBQU1vZ0MsS0FBTW4wRCxLQUFLbTFDLEtBQUtyckMsS0FBSzJpQyxNQUFNMm5CLE9BQUFBO0FBQ2pDcDBELG1CQUFLdW1DLElBQUk0dEIsSUFBQUEsSUFBSztZQUNoQjtBQUVBbjBELGlCQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssbUNBQUEsR0FBQSxVQUNuQis5QyxNQUNGOXpELEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxjQUFBO1VBRTNCLEVBQUEsR0FFQSxFQUFBdlAsS0FBQSxPQUFBbkQsT0FPQSxTQUFJOHdELElBQUFBO0FBSUYscUJBSk9MLEtBQVM3eUQsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLEtBQUFBLFVBQUEsQ0FBQSxHQUNWd3JDLEtBQVF6c0MsS0FBS20xQyxLQUFLMUksT0FDbEJrM0IsS0FBWTNqRSxLQUFLbTFDLEtBQUtyckMsS0FBSzJpQyxPQUV4Qjc5QixLQUFJLEdBQUdBLEtBQUl1bEQsR0FBSXp2RCxRQUFRa0ssTUFBSztBQUNuQyxrQkFBTXZILEtBQUs4c0QsR0FBSXZsRCxFQUFBQSxHQUVUZzFELEtBQVVuM0IsR0FBTXBsQyxFQUFBQTtBQUNsQnU4RCxjQUFBQSxNQUNGQSxHQUFRL0IsV0FBQUE7QUFHVixrQkFBTS8zRCxLQUFPNjVELEdBQVVyaEUsSUFBSStFLElBQUksRUFBRXc4RCxpQkFBQUEsS0FBaUIsQ0FBQTtBQUNsRHAzQixjQUFBQSxHQUFNcGxDLEVBQUFBLElBQU1ySCxLQUFLMGEsT0FBTzVRLEVBQUFBO1lBQzFCO0FBRUE5SixpQkFBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLG1DQUFBLEdBQUEsVUFFbkIrOUMsTUFDRjl6RCxLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssY0FBQTtVQUUzQixFQUFBLEdBRUEsRUFBQXZQLEtBQUEsVUFBQW5ELE9BTUEsU0FBTzh3RCxJQUFBQTtBQUlMLHFCQUhNMW5CLEtBQVF6c0MsS0FBS20xQyxLQUFLMUksT0FDbEJrM0IsS0FBWTNqRSxLQUFLbTFDLEtBQUtyckMsS0FBSzJpQyxPQUM3QituQixLQUFBQSxPQUNLNWxELEtBQUksR0FBR0EsS0FBSXVsRCxHQUFJenZELFFBQVFrSyxNQUFLO0FBQ25DLGtCQUFNdkgsS0FBSzhzRCxHQUFJdmxELEVBQUFBLEdBQ1Q5RSxLQUFPNjVELEdBQVVyaEUsSUFBSStFLEVBQUFBLEdBQ3JCdWpDLEtBQU82QixHQUFNcGxDLEVBQUFBO0FBQUFBLHlCQUNmdWpDLE1BRUZBLEdBQUtpM0IsV0FBQUEsR0FDTHJOLEtBQWM1cEIsR0FBS3NXLFdBQVdwM0MsRUFBQUEsS0FBUzBxRCxJQUN2QzVwQixHQUFLOHpCLFFBQUFBLE1BR0wxK0QsS0FBS20xQyxLQUFLMUksTUFBTXBsQyxFQUFBQSxJQUFNckgsS0FBSzBhLE9BQU81USxFQUFBQSxHQUNsQzBxRCxLQUFBQTtZQUVKO0FBQUEscUJBRUlBLE1BQ0Z4MEQsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLG1DQUFBLEdBQ3ZCL1YsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLGNBQUEsS0FFdkIvVixLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssY0FBQTtVQUUzQixFQUFBLEdBRUEsRUFBQXZQLEtBQUEsVUFBQW5ELE9BT0EsU0FBTzh3RCxJQUFBQTtBQUFrQixnQkFBYnArQyxLQUFBQSxFQUFJOVUsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLE1BQUFBLFVBQUEsQ0FBQTtBQUNkLGdCQUFtQixNQUFma3pELEdBQUl6dkQsUUFBUjtBQUVBLGtCQUFNK25DLEtBQVF6c0MsS0FBS20xQyxLQUFLMUk7QUFDeEIvOEIsaUJBQVF5a0QsSUFBSyxTQUFDOXNELElBQUFBO0FBQ1osb0JBQU11akMsS0FBTzZCLEdBQU1wbEMsRUFBQUE7QUFBQUEsMkJBQ2Z1akMsTUFDRkEsR0FBSzVELE9BQUFBO2NBRVQsQ0FBQSxHQUVJanhCLE1BQ0YvVixLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssY0FBQTtZQVhJO1VBYS9CLEVBQUEsR0FFQSxFQUFBdlAsS0FBQSxXQUFBbkQsT0FHQSxXQUFBO0FBQVUsZ0JBQUF1eUQsS0FBQTUxRDtBQUNSMFAsZUFBUTFQLEtBQUttMUMsS0FBSzFJLE9BQU8sU0FBQzdCLElBQU0wM0IsSUFBQUE7QUFDOUIsa0JBQU14NEQsS0FBTzhyRCxHQUFLemdCLEtBQUtyckMsS0FBSzJpQyxNQUFNbnFDLElBQUlnZ0UsRUFBQUE7QUFBQUEseUJBQ2xDeDRELE1BQ0Y4Z0MsR0FBS3NXLFdBQVdwM0MsRUFBQUE7WUFFcEIsQ0FBQTtVQUNGLEVBQUEsR0FFQSxFQUFBdEQsS0FBQSxVQUFBbkQsT0FLQSxTQUFPOG1CLElBQUFBO0FBQ0wsbUJBQU8sSUFBSW8yQyxHQUNUcDJDLElBQ0FucUIsS0FBS20xQyxNQUNMbjFDLEtBQUtxMEMsUUFDTHIwQyxLQUFLNkwsU0FDTDdMLEtBQUt1NUMsY0FBQUE7VUFFVCxFQUFBLEdBRUEsRUFBQS95QyxLQUFBLGtCQUFBbkQsT0FLQSxXQUFBO0FBQ0UsZ0JBQUlnRSxJQUNFK2tDLEtBQVFwc0MsS0FBS20xQyxLQUFLL0ksT0FDbEJLLEtBQVF6c0MsS0FBS20xQyxLQUFLMUk7QUFFeEIsaUJBQUtwbEMsTUFBTStrQztBQUNMaHFDLHFCQUFPeEIsVUFBVUgsZUFBZUssS0FBS3NyQyxJQUFPL2tDLEVBQUFBLE1BQzlDK2tDLEdBQU0va0MsRUFBQUEsRUFBSW9sQyxRQUFRLENBQUE7QUFJdEIsaUJBQUtwbEMsTUFBTW9sQztBQUNULGtCQUFJcnFDLE9BQU94QixVQUFVSCxlQUFlSyxLQUFLMnJDLElBQU9wbEMsRUFBQUEsR0FBSztBQUNuRCxvQkFBTXVqQyxLQUFPNkIsR0FBTXBsQyxFQUFBQTtBQUNuQnVqQyxnQkFBQUEsR0FBS2xxQixPQUFPLE1BQ1prcUIsR0FBSzlaLEtBQUssTUFDVjhaLEdBQUs4ekIsUUFBQUE7Y0FDUDtVQUVKLEVBQUEsR0FFQSxFQUFBbDRELEtBQUEscUJBQUFuRCxPQUtBLFNBQWtCaS9ELElBQUFBO0FBQ2hCLGdCQUFNL00sS0FBVyxDQUFBO0FBQ2pCLGdCQUFBLFdBQUl2MUQsS0FBS20xQyxLQUFLMUksTUFBTTYxQixFQUFBQSxHQUF1QjtBQUN6QyxrQkFBTTEzQixLQUFPNXFDLEtBQUttMUMsS0FBSzFJLE1BQU02MUIsRUFBQUE7QUFBQUEseUJBQ3pCMTNCLEdBQUs4cUIsVUFDUEgsR0FBUzF1RCxLQUFLK2pDLEdBQUs4cUIsTUFBQUEsR0FBQUEsV0FFakI5cUIsR0FBSzZxQixRQUNQRixHQUFTMXVELEtBQUsrakMsR0FBSzZxQixJQUFBQTtZQUV2QjtBQUNBLG1CQUFPRjtVQUNULEVBQUEsR0FFQSxFQUFBL3VELEtBQUEsZ0JBQUFuRCxPQUlBLFdBQUE7QUFDRXJELGlCQUFLOGpFLGlCQUFBQSxHQUNMOWpFLEtBQUsrakUsb0JBQUFBO1VBQ1AsRUFBQSxHQUVBLEVBQUF2OUQsS0FBQSx1QkFBQW5ELE9BS0EsV0FBQTtBQUFzQixnQkFBQTJnRSxLQUFBaGtFLE1BQ2Rpa0UsS0FBZ0IsQ0FBQTtBQUV0QnYwRCxlQUFRMVAsS0FBS20xQyxLQUFLMUksT0FBTyxTQUFDN0IsSUFBTXZqQyxJQUFBQTtBQUM5QixrQkFBTTY4RCxLQUFTRixHQUFLN3VCLEtBQUsvSSxNQUFNeEIsR0FBSzZxQixJQUFBQSxHQUM5QjBPLEtBQVdILEdBQUs3dUIsS0FBSy9JLE1BQU14QixHQUFLOHFCLE1BQUFBO0FBQUFBLHlCQUluQ3dPLE1BQUFBLFNBQXdCQSxHQUFPRSxhQUFBQSxXQUMvQkQsTUFBQUEsU0FBMEJBLEdBQVNDLGFBQUFBLFdBS2xDRixNQUFBQSxXQUF3QkMsTUFDMUJGLEdBQWNwOUQsS0FBS1EsRUFBQUE7WUFFdkIsQ0FBQSxHQUVBckgsS0FBS2duQyxPQUFPaTlCLElBQUFBLEtBQWU7VUFDN0IsRUFBQSxHQUVBLEVBQUF6OUQsS0FBQSxvQkFBQW5ELE9BS0EsV0FBQTtBQUNFLGdCQUFNc2dFLEtBQVkzakUsS0FBS20xQyxLQUFLcnJDLEtBQUsyaUM7QUFDakMsZ0JBQUlrM0IsUUFBQUEsSUFBSjtBQUlBLGtCQUFNbDNCLEtBQVF6c0MsS0FBS20xQyxLQUFLMUksT0FDbEI0M0IsS0FBUyxDQUFBO0FBRWY1MEIsaUJBQUFrMEIsRUFBQUEsRUFBUzdpRSxLQUFUNmlFLElBQWtCLFNBQUNKLElBQVVqQixJQUFBQTtBQUFBQSwyQkFDZDcxQixHQUFNNjFCLEVBQUFBLEtBRWpCK0IsR0FBT3g5RCxLQUFLeTdELEVBQUFBO2NBRWhCLENBQUEsR0FFQXRpRSxLQUFLdW1DLElBQUk4OUIsSUFBQUEsSUFBUTtZQVpqQjtVQWFGLEVBQUEsQ0FBQSxDQUFBLEdBQUNoQjtRQUFBLEVBM2ZlLEdDRlppQixLQUFlLFdBQUE7QUFNbkIsbUJBQUFBLEdBQVludkIsSUFBTW92QixJQUFhMTRELElBQUFBO0FBQVM4WCxlQUFBQSxNQUFBMmdELEVBQUFBLEdBQ3RDdGtFLEtBQUttMUMsT0FBT0EsSUFDWm4xQyxLQUFLdWtFLGNBQWNBLElBQ25CdmtFLEtBQUt3a0UsZUFDTHhrRSxLQUFLa2hELFdBQVdyMUMsRUFBQUEsR0FDaEI3TCxLQUFLeWtFLE9BQU9DLEdBQUssbUJBQUE7VUFJbkI7QUFnZEMsaUJBOWNENzJDLEdBQUF5MkMsSUFBQSxDQUFBLEVBQUE5OUQsS0FBQSxjQUFBbkQsT0FJQSxTQUFXd0ksSUFBQUE7QUFDVDdMLGlCQUFLNkwsVUFBVUEsSUFDZjdMLEtBQUsya0UsZ0JBQWdCLElBQUkza0UsS0FBSzZMLFFBQVErNEQsT0FHdEM1a0UsS0FBSzZrRSx5QkFDSCxJQUFJbGxFLEtBQUs4TixJQUFJLEdBQUc5TixLQUFLK04sSUFBSSxHQUFHMU4sS0FBSzZMLFFBQVFpNUQsWUFBQUEsQ0FBQUE7VUFDN0MsRUFBQSxHQUVBLEVBQUF0K0QsS0FBQSxTQUFBbkQsT0FNQSxXQUFBO0FBQ0UsZ0JBQ3lDLE1BQXZDckQsS0FBSzZMLFFBQVFrNUQseUJBQ2Iva0UsS0FBS3VrRSxZQUFZUyxtQkFBbUJ0Z0UsU0FBUyxHQUM3QztBQUNBLGtCQUFJaTFCLElBQ0V5UyxLQUFRcHNDLEtBQUttMUMsS0FBSy9JLE9BQ2xCMG9CLEtBQWM5MEQsS0FBS3VrRSxZQUFZUyxvQkFDL0JDLEtBQVluUSxHQUFZcHdELFFBR3hCOC9ELEtBQWdCeGtFLEtBQUtrbEUsbUJBQW1COTRCLElBQU8wb0IsRUFBQUE7QUFHckQ5MEQsbUJBQUt3a0UsZ0JBQWdCQTtBQUdyQix1QkFBUzUxRCxLQUFJLEdBQUdBLEtBQUlxMkQsSUFBV3IyRDtBQUFBQSxpQkFDN0IrcUIsS0FBT3lTLEdBQU0wb0IsR0FBWWxtRCxFQUFBQSxDQUFBQSxHQUNoQi9DLFFBQVE2bUQsT0FBTyxLQUV0QjF5RCxLQUFLbWxFLHVCQUF1QlgsR0FBY2w1QyxNQUFNcU8sRUFBQUE7WUFHdEQ7VUFDRixFQUFBLEdBRUEsRUFBQW56QixLQUFBLDBCQUFBbkQsT0FLQSxTQUF1QitoRSxJQUFjenJDLElBQUFBO0FBQ25DMzVCLGlCQUFLcWxFLHNCQUFzQkQsR0FBYUUsU0FBU0MsSUFBSTVyQyxFQUFBQSxHQUNyRDM1QixLQUFLcWxFLHNCQUFzQkQsR0FBYUUsU0FBU0UsSUFBSTdyQyxFQUFBQSxHQUNyRDM1QixLQUFLcWxFLHNCQUFzQkQsR0FBYUUsU0FBU0csSUFBSTlyQyxFQUFBQSxHQUNyRDM1QixLQUFLcWxFLHNCQUFzQkQsR0FBYUUsU0FBU0ksSUFBSS9yQyxFQUFBQTtVQUN2RCxFQUFBLEdBRUEsRUFBQW56QixLQUFBLHlCQUFBbkQsT0FRQSxTQUFzQitoRSxJQUFjenJDLElBQUFBO0FBRWxDLGdCQUFJeXJDLEdBQWFPLGdCQUFnQixHQUFHO0FBRWxDLGtCQUFNenlELEtBQUtreUQsR0FBYVEsYUFBYXY0RCxJQUFJc3NCLEdBQUt0c0IsR0FDeEM4RixLQUFLaXlELEdBQWFRLGFBQWF4MEQsSUFBSXVvQixHQUFLdm9CLEdBQ3hDa29CLEtBQVczNUIsS0FBSzJULEtBQUtKLEtBQUtBLEtBQUtDLEtBQUtBLEVBQUFBO0FBS3RDbW1CLGNBQUFBLEtBQVc4ckMsR0FBYVMsV0FBVzdsRSxLQUFLMmtFLGdCQUMxQzNrRSxLQUFLOGxFLGlCQUFpQnhzQyxJQUFVcG1CLElBQUlDLElBQUl3bUIsSUFBTXlyQyxFQUFBQSxJQUdYLE1BQS9CQSxHQUFhTyxnQkFDZjNsRSxLQUFLbWxFLHVCQUF1QkMsSUFBY3pyQyxFQUFBQSxJQUd0Q3lyQyxHQUFhRSxTQUFTeDdELEtBQUt6QyxNQUFNc3lCLEdBQUt0eUIsTUFFeENySCxLQUFLOGxFLGlCQUFpQnhzQyxJQUFVcG1CLElBQUlDLElBQUl3bUIsSUFBTXlyQyxFQUFBQTtZQUl0RDtVQUNGLEVBQUEsR0FFQSxFQUFBNStELEtBQUEsb0JBQUFuRCxPQVVBLFNBQWlCaTJCLElBQVVwbUIsSUFBSUMsSUFBSXdtQixJQUFNeXJDLElBQUFBO0FBQ3RCLGtCQUFiOXJDLE9BRUZwbUIsS0FEQW9tQixLQUFXLE1BSVR0NUIsS0FBSzZrRSx5QkFBeUIsS0FBS2xyQyxHQUFLd1csTUFBTTE3QixXQUNoRDZrQixLQUFXMzVCLEtBQUs4TixJQUNkLE1BQU16TixLQUFLNmtFLHlCQUF5QmxyQyxHQUFLd1csTUFBTTE3QixRQUMvQzZrQixLQUFXSyxHQUFLd1csTUFBTTE3QixNQUFBQTtBQU0xQixnQkFBTXN4RCxLQUNIL2xFLEtBQUs2TCxRQUFRazVELHdCQUNaSyxHQUFhMVMsT0FDYi80QixHQUFLOXRCLFFBQVE2bUQsT0FDZi95RCxLQUFLODZELElBQUluaEMsSUFBVSxDQUFBLEdBQ2Ywc0MsS0FBSzl5RCxLQUFLNnlELElBQ1ZFLEtBQUs5eUQsS0FBSzR5RDtBQUVoQi9sRSxpQkFBS3VrRSxZQUFZMkIsT0FBT3ZzQyxHQUFLdHlCLEVBQUFBLEVBQUlnRyxLQUFLMjRELElBQ3RDaG1FLEtBQUt1a0UsWUFBWTJCLE9BQU92c0MsR0FBS3R5QixFQUFBQSxFQUFJK0osS0FBSzYwRDtVQUN4QyxFQUFBLEdBRUEsRUFBQXovRCxLQUFBLHNCQUFBbkQsT0FRQSxTQUFtQitvQyxJQUFPMG9CLElBQUFBO0FBVXhCLHFCQVRJbjdCLElBQ0VzckMsS0FBWW5RLEdBQVlwd0QsUUFFMUJ5aEUsS0FBTy81QixHQUFNMG9CLEdBQVksQ0FBQSxDQUFBLEVBQUl6bkQsR0FDN0IrNEQsS0FBT2g2QixHQUFNMG9CLEdBQVksQ0FBQSxDQUFBLEVBQUkxakQsR0FDN0JpMUQsS0FBT2o2QixHQUFNMG9CLEdBQVksQ0FBQSxDQUFBLEVBQUl6bkQsR0FDN0JpNUQsS0FBT2w2QixHQUFNMG9CLEdBQVksQ0FBQSxDQUFBLEVBQUkxakQsR0FHeEJ4QyxLQUFJLEdBQUdBLEtBQUlxMkQsSUFBV3IyRCxNQUFLO0FBQ2xDLGtCQUFNK3FCLEtBQU95UyxHQUFNMG9CLEdBQVlsbUQsRUFBQUEsQ0FBQUEsR0FDekJ2QixLQUFJc3NCLEdBQUt0c0IsR0FDVCtELEtBQUl1b0IsR0FBS3ZvQjtBQUNYdW9CLGNBQUFBLEdBQUs5dEIsUUFBUTZtRCxPQUFPLE1BQ2xCcmxELEtBQUk4NEQsT0FDTkEsS0FBTzk0RCxLQUVMQSxLQUFJZzVELE9BQ05BLEtBQU9oNUQsS0FFTCtELEtBQUlnMUQsT0FDTkEsS0FBT2gxRCxLQUVMQSxLQUFJazFELE9BQ05BLEtBQU9sMUQ7WUFHYjtBQUVBLGdCQUFNb2dELEtBQVc3eEQsS0FBS3MxQixJQUFJb3hDLEtBQU9GLEVBQUFBLElBQVF4bUUsS0FBS3MxQixJQUFJcXhDLEtBQU9GLEVBQUFBO0FBQ3JENVUsWUFBQUEsS0FBVyxLQUNiNFUsTUFBUSxNQUFNNVUsSUFDZDhVLE1BQVEsTUFBTTlVLE9BR2QyVSxNQUFRLE1BQU0zVSxJQUNkNlUsTUFBUSxNQUFNN1U7QUFHaEIsZ0JBQ00rVSxLQUFXNW1FLEtBQUs4TixJQURFLE1BQ21COU4sS0FBS3MxQixJQUFJb3hDLEtBQU9GLEVBQUFBLENBQUFBLEdBQ3JESyxLQUFlLE1BQU1ELElBQ3JCRSxLQUFVLE9BQU9OLEtBQU9FLEtBQzVCSyxLQUFVLE9BQU9OLEtBQU9FLEtBR3BCOUIsS0FBZ0IsRUFDcEJsNUMsTUFBTSxFQUNKczZDLGNBQWMsRUFBRXY0RCxHQUFHLEdBQUcrRCxHQUFHLEVBQUEsR0FDekJzaEQsTUFBTSxHQUNOaVUsT0FBTyxFQUNMUixNQUFNTSxLQUFVRCxJQUNoQkgsTUFBTUksS0FBVUQsSUFDaEJKLE1BQU1NLEtBQVVGLElBQ2hCRixNQUFNSSxLQUFVRixHQUFBQSxHQUVsQnJ2RCxNQUFNb3ZELElBQ05WLFVBQVUsSUFBSVUsSUFDZGpCLFVBQVUsRUFBRXg3RCxNQUFNLEtBQUEsR0FDbEI4OEQsVUFBVSxHQUNWdFQsT0FBTyxHQUNQcVMsZUFBZSxFQUFBLEVBQUE7QUFHbkIzbEUsaUJBQUs2bUUsYUFBYXJDLEdBQWNsNUMsSUFBQUE7QUFHaEMscUJBQVMxYyxLQUFJLEdBQUdBLEtBQUlxMkQsSUFBV3IyRDtBQUFBQSxlQUM3QitxQixLQUFPeVMsR0FBTTBvQixHQUFZbG1ELEVBQUFBLENBQUFBLEdBQ2hCL0MsUUFBUTZtRCxPQUFPLEtBQ3RCMXlELEtBQUs4bUUsYUFBYXRDLEdBQWNsNUMsTUFBTXFPLEVBQUFBO0FBSzFDLG1CQUFPNnFDO1VBQ1QsRUFBQSxHQUVBLEVBQUFoK0QsS0FBQSxxQkFBQW5ELE9BT0EsU0FBa0IraEUsSUFBY3pyQyxJQUFBQTtBQUM5QixnQkFBTWlzQyxLQUFlUixHQUFhUSxjQUM1Qm1CLEtBQVkzQixHQUFhMVMsT0FBTy80QixHQUFLOXRCLFFBQVE2bUQsTUFDN0NzVSxLQUFlLElBQUlEO0FBRXpCbkIsWUFBQUEsR0FBYXY0RCxJQUNYdTRELEdBQWF2NEQsSUFBSSszRCxHQUFhMVMsT0FBTy80QixHQUFLdHNCLElBQUlzc0IsR0FBSzl0QixRQUFRNm1ELE1BQzdEa1QsR0FBYXY0RCxLQUFLMjVELElBRWxCcEIsR0FBYXgwRCxJQUNYdzBELEdBQWF4MEQsSUFBSWcwRCxHQUFhMVMsT0FBTy80QixHQUFLdm9CLElBQUl1b0IsR0FBSzl0QixRQUFRNm1ELE1BQzdEa1QsR0FBYXgwRCxLQUFLNDFELElBRWxCNUIsR0FBYTFTLE9BQU9xVTtBQUNwQixnQkFBTUUsS0FBY3RuRSxLQUFLOE4sSUFDdkI5TixLQUFLOE4sSUFBSWtzQixHQUFLd1osUUFBUXhaLEdBQUtsbEIsTUFBQUEsR0FDM0JrbEIsR0FBS3VaLEtBQUFBO0FBRVBreUIsWUFBQUEsR0FBYXdCLFdBQ1h4QixHQUFhd0IsV0FBV0ssS0FBY0EsS0FBYzdCLEdBQWF3QjtVQUNyRSxFQUFBLEdBRUEsRUFBQXBnRSxLQUFBLGdCQUFBbkQsT0FRQSxTQUFhK2hFLElBQWN6ckMsSUFBTXV0QyxJQUFBQTtBQUNULGlCQUFsQkEsTUFBQUEsV0FBMEJBLE1BRTVCbG5FLEtBQUttbkUsa0JBQWtCL0IsSUFBY3pyQyxFQUFBQTtBQUd2QyxnQkFDSXl0QyxJQURFVCxLQUFRdkIsR0FBYUUsU0FBU0MsR0FBR29CO0FBS25DUyxZQUFBQSxLQUhBVCxHQUFNTixPQUFPMXNDLEdBQUt0c0IsSUFFaEJzNUQsR0FBTUwsT0FBTzNzQyxHQUFLdm9CLElBQ1gsT0FFQSxPQUlQdTFELEdBQU1MLE9BQU8zc0MsR0FBS3ZvQixJQUNYLE9BRUEsTUFJYnBSLEtBQUtxbkUsZUFBZWpDLElBQWN6ckMsSUFBTXl0QyxFQUFBQTtVQUMxQyxFQUFBLEdBRUEsRUFBQTVnRSxLQUFBLGtCQUFBbkQsT0FRQSxTQUFlK2hFLElBQWN6ckMsSUFBTXl0QyxJQUFBQTtBQUNqQyxnQkFBTTlCLEtBQVdGLEdBQWFFLFNBQVM4QixFQUFBQTtBQUV2QyxvQkFBUTlCLEdBQVNLLGVBQUFBO2NBQ2YsS0FBSztBQUNITCxnQkFBQUEsR0FBU0EsU0FBU3g3RCxPQUFPNnZCLElBQ3pCMnJDLEdBQVNLLGdCQUFnQixHQUN6QjNsRSxLQUFLbW5FLGtCQUFrQjdCLElBQVUzckMsRUFBQUE7QUFDakM7Y0FDRixLQUFLO0FBSUQyckMsZ0JBQUFBLEdBQVNBLFNBQVN4N0QsS0FBS3VELE1BQU1zc0IsR0FBS3RzQixLQUNsQ2k0RCxHQUFTQSxTQUFTeDdELEtBQUtzSCxNQUFNdW9CLEdBQUt2b0IsS0FFbEN1b0IsR0FBS3RzQixLQUFLck4sS0FBS3lrRSxLQUFBQSxHQUNmOXFDLEdBQUt2b0IsS0FBS3BSLEtBQUt5a0UsS0FBQUEsTUFFZnprRSxLQUFLNm1FLGFBQWF2QixFQUFBQSxHQUNsQnRsRSxLQUFLOG1FLGFBQWF4QixJQUFVM3JDLEVBQUFBO0FBRTlCO2NBQ0YsS0FBSztBQUNIMzVCLHFCQUFLOG1FLGFBQWF4QixJQUFVM3JDLEVBQUFBO1lBQUFBO1VBR2xDLEVBQUEsR0FFQSxFQUFBbnpCLEtBQUEsZ0JBQUFuRCxPQU9BLFNBQWEraEUsSUFBQUE7QUFFWCxnQkFBSWtDLEtBQWdCO0FBQ2Usa0JBQS9CbEMsR0FBYU8sa0JBQ2YyQixLQUFnQmxDLEdBQWFFLFNBQVN4N0QsTUFDdENzN0QsR0FBYTFTLE9BQU8sR0FDcEIwUyxHQUFhUSxhQUFhdjRELElBQUksR0FDOUIrM0QsR0FBYVEsYUFBYXgwRCxJQUFJLElBRWhDZzBELEdBQWFPLGdCQUFnQixHQUM3QlAsR0FBYUUsU0FBU3g3RCxPQUFPLE1BQzdCOUosS0FBS3VuRSxjQUFjbkMsSUFBYyxJQUFBLEdBQ2pDcGxFLEtBQUt1bkUsY0FBY25DLElBQWMsSUFBQSxHQUNqQ3BsRSxLQUFLdW5FLGNBQWNuQyxJQUFjLElBQUEsR0FDakNwbEUsS0FBS3VuRSxjQUFjbkMsSUFBYyxJQUFBLEdBRVosUUFBakJrQyxNQUNGdG5FLEtBQUs4bUUsYUFBYTFCLElBQWNrQyxFQUFBQTtVQUVwQyxFQUFBLEdBRUEsRUFBQTlnRSxLQUFBLGlCQUFBbkQsT0FTQSxTQUFjK2hFLElBQWNnQyxJQUFBQTtBQUMxQixnQkFBSWpCLElBQU1FLElBQU1ELElBQU1FLElBQ2hCa0IsS0FBWSxNQUFNcEMsR0FBYWp1RDtBQUNyQyxvQkFBUWl3RCxJQUFBQTtjQUNOLEtBQUs7QUFDSGpCLGdCQUFBQSxLQUFPZixHQUFhdUIsTUFBTVIsTUFDMUJFLEtBQU9qQixHQUFhdUIsTUFBTVIsT0FBT3FCLElBQ2pDcEIsS0FBT2hCLEdBQWF1QixNQUFNUCxNQUMxQkUsS0FBT2xCLEdBQWF1QixNQUFNUCxPQUFPb0I7QUFDakM7Y0FDRixLQUFLO0FBQ0hyQixnQkFBQUEsS0FBT2YsR0FBYXVCLE1BQU1SLE9BQU9xQixJQUNqQ25CLEtBQU9qQixHQUFhdUIsTUFBTU4sTUFDMUJELEtBQU9oQixHQUFhdUIsTUFBTVAsTUFDMUJFLEtBQU9sQixHQUFhdUIsTUFBTVAsT0FBT29CO0FBQ2pDO2NBQ0YsS0FBSztBQUNIckIsZ0JBQUFBLEtBQU9mLEdBQWF1QixNQUFNUixNQUMxQkUsS0FBT2pCLEdBQWF1QixNQUFNUixPQUFPcUIsSUFDakNwQixLQUFPaEIsR0FBYXVCLE1BQU1QLE9BQU9vQixJQUNqQ2xCLEtBQU9sQixHQUFhdUIsTUFBTUw7QUFDMUI7Y0FDRixLQUFLO0FBQ0hILGdCQUFBQSxLQUFPZixHQUFhdUIsTUFBTVIsT0FBT3FCLElBQ2pDbkIsS0FBT2pCLEdBQWF1QixNQUFNTixNQUMxQkQsS0FBT2hCLEdBQWF1QixNQUFNUCxPQUFPb0IsSUFDakNsQixLQUFPbEIsR0FBYXVCLE1BQU1MO1lBQUFBO0FBSTlCbEIsWUFBQUEsR0FBYUUsU0FBUzhCLEVBQUFBLElBQVUsRUFDOUJ4QixjQUFjLEVBQUV2NEQsR0FBRyxHQUFHK0QsR0FBRyxFQUFBLEdBQ3pCc2hELE1BQU0sR0FDTmlVLE9BQU8sRUFBRVIsTUFBTUEsSUFBTUUsTUFBTUEsSUFBTUQsTUFBTUEsSUFBTUUsTUFBTUEsR0FBQUEsR0FDbkRudkQsTUFBTSxNQUFNaXVELEdBQWFqdUQsTUFDekIwdUQsVUFBVSxJQUFJVCxHQUFhUyxVQUMzQlAsVUFBVSxFQUFFeDdELE1BQU0sS0FBQSxHQUNsQjg4RCxVQUFVLEdBQ1Z0VCxPQUFPOFIsR0FBYTlSLFFBQVEsR0FDNUJxUyxlQUFlLEVBQUE7VUFFbkIsRUFBQSxHQUlBLEVBQUFuL0QsS0FBQSxVQUFBbkQsT0FPQSxTQUFPOE4sSUFBS2c2QixJQUFBQTtBQUFBQSx1QkFDTm5yQyxLQUFLd2tFLGtCQUNQcnpELEdBQUlpMEMsWUFBWSxHQUVoQnBsRCxLQUFLeW5FLFlBQVl6bkUsS0FBS3drRSxjQUFjbDVDLE1BQU1uYSxJQUFLZzZCLEVBQUFBO1VBRW5ELEVBQUEsR0FFQSxFQUFBM2tDLEtBQUEsZUFBQW5ELE9BUUEsU0FBWXFrRSxJQUFRdjJELElBQUtnNkIsSUFBQUE7QUFBQUEsdUJBQ25CQSxPQUNGQSxLQUFRLFlBR21CLE1BQXpCdThCLEdBQU8vQixrQkFDVDNsRSxLQUFLeW5FLFlBQVlDLEdBQU9wQyxTQUFTQyxJQUFJcDBELEVBQUFBLEdBQ3JDblIsS0FBS3luRSxZQUFZQyxHQUFPcEMsU0FBU0UsSUFBSXIwRCxFQUFBQSxHQUNyQ25SLEtBQUt5bkUsWUFBWUMsR0FBT3BDLFNBQVNJLElBQUl2MEQsRUFBQUEsR0FDckNuUixLQUFLeW5FLFlBQVlDLEdBQU9wQyxTQUFTRyxJQUFJdDBELEVBQUFBLElBRXZDQSxHQUFJazBDLGNBQWNsYSxJQUNsQmg2QixHQUFJRyxVQUFBQSxHQUNKSCxHQUFJVyxPQUFPNDFELEdBQU9mLE1BQU1SLE1BQU11QixHQUFPZixNQUFNUCxJQUFBQSxHQUMzQ2oxRCxHQUFJWSxPQUFPMjFELEdBQU9mLE1BQU1OLE1BQU1xQixHQUFPZixNQUFNUCxJQUFBQSxHQUMzQ2oxRCxHQUFJNDNDLE9BQUFBLEdBRUo1M0MsR0FBSUcsVUFBQUEsR0FDSkgsR0FBSVcsT0FBTzQxRCxHQUFPZixNQUFNTixNQUFNcUIsR0FBT2YsTUFBTVAsSUFBQUEsR0FDM0NqMUQsR0FBSVksT0FBTzIxRCxHQUFPZixNQUFNTixNQUFNcUIsR0FBT2YsTUFBTUwsSUFBQUEsR0FDM0NuMUQsR0FBSTQzQyxPQUFBQSxHQUVKNTNDLEdBQUlHLFVBQUFBLEdBQ0pILEdBQUlXLE9BQU80MUQsR0FBT2YsTUFBTU4sTUFBTXFCLEdBQU9mLE1BQU1MLElBQUFBLEdBQzNDbjFELEdBQUlZLE9BQU8yMUQsR0FBT2YsTUFBTVIsTUFBTXVCLEdBQU9mLE1BQU1MLElBQUFBLEdBQzNDbjFELEdBQUk0M0MsT0FBQUEsR0FFSjUzQyxHQUFJRyxVQUFBQSxHQUNKSCxHQUFJVyxPQUFPNDFELEdBQU9mLE1BQU1SLE1BQU11QixHQUFPZixNQUFNTCxJQUFBQSxHQUMzQ24xRCxHQUFJWSxPQUFPMjFELEdBQU9mLE1BQU1SLE1BQU11QixHQUFPZixNQUFNUCxJQUFBQSxHQUMzQ2oxRCxHQUFJNDNDLE9BQUFBO1VBUU4sRUFBQSxDQUFBLENBQUEsR0FBQ3ViO1FBQUEsRUEvZGtCLEdDQWZxRCxLQUFlLFdBQUE7QUFNbkIsbUJBQUFBLEdBQVl4eUIsSUFBTW92QixJQUFhMTRELElBQUFBO0FBQVM4WCxlQUFBQSxNQUFBZ2tELEVBQUFBLEdBQ3RDM25FLEtBQUt5a0UsT0FBT0MsR0FBSyxrQkFBQSxHQUVqQjFrRSxLQUFLbTFDLE9BQU9BLElBQ1puMUMsS0FBS3VrRSxjQUFjQSxJQUNuQnZrRSxLQUFLa2hELFdBQVdyMUMsRUFBQUE7VUFDbEI7QUFpRUMsaUJBL0REZ2lCLEdBQUE4NUMsSUFBQSxDQUFBLEVBQUFuaEUsS0FBQSxjQUFBbkQsT0FJQSxTQUFXd0ksSUFBQUE7QUFDVDdMLGlCQUFLNkwsVUFBVUE7VUFDakIsRUFBQSxHQUVBLEVBQUFyRixLQUFBLFNBQUFuRCxPQU1BLFdBQUE7QUFnQkUscUJBZkk2UCxJQUFJQyxJQUFJbW1CLElBQVUwc0MsSUFBSUMsSUFBSTJCLElBQWdCOUwsSUFBT0MsSUFFL0MzdkIsS0FBUXBzQyxLQUFLbTFDLEtBQUsvSSxPQUNsQjBvQixLQUFjOTBELEtBQUt1a0UsWUFBWVMsb0JBQy9Ca0IsS0FBU2xtRSxLQUFLdWtFLFlBQVkyQixRQUcxQjJCLEtBQWU3bkUsS0FBSzZMLFFBQVFnOEQsY0FHNUI1K0QsS0FBQUEsS0FBUyxJQUFJNCtELElBS1ZqNUQsS0FBSSxHQUFHQSxLQUFJa21ELEdBQVlwd0QsU0FBUyxHQUFHa0ssTUFBSztBQUMvQ2t0RCxjQUFBQSxLQUFRMXZCLEdBQU0wb0IsR0FBWWxtRCxFQUFBQSxDQUFBQTtBQUMxQix1QkFBU29CLEtBQUlwQixLQUFJLEdBQUdvQixLQUFJOGtELEdBQVlwd0QsUUFBUXNMO0FBRzFDa0QsZ0JBQUFBLE1BRkE2b0QsS0FBUTN2QixHQUFNMG9CLEdBQVk5a0QsRUFBQUEsQ0FBQUEsR0FFZjNDLElBQUl5dUQsR0FBTXp1RCxHQUNyQjhGLEtBQUs0b0QsR0FBTTNxRCxJQUFJMHFELEdBQU0xcUQsR0FJSixPQUhqQmtvQixLQUFXMzVCLEtBQUsyVCxLQUFLSixLQUFLQSxLQUFLQyxLQUFLQSxFQUFBQSxPQUtsQ0QsS0FEQW9tQixLQUFXLE1BQU10NUIsS0FBS3lrRSxLQUFBQSxJQUlwQm5yQyxLQUFXLElBQUl1dUMsT0FFZkQsS0FERXR1QyxLQUFXLE1BQU11dUMsS0FDRixJQUVBNStELEtBQUlxd0IsS0F2Qm5CLG9CQTJCSjBzQyxLQUFLOXlELE1BRkwwMEQsTUFBa0N0dUMsS0FHbEMyc0MsS0FBSzl5RCxLQUFLeTBELElBRVYxQixHQUFPcEssR0FBTXowRCxFQUFBQSxFQUFJZ0csS0FBSzI0RCxJQUN0QkUsR0FBT3BLLEdBQU16MEQsRUFBQUEsRUFBSStKLEtBQUs2MEQsSUFDdEJDLEdBQU9uSyxHQUFNMTBELEVBQUFBLEVBQUlnRyxLQUFLMjRELElBQ3RCRSxHQUFPbkssR0FBTTEwRCxFQUFBQSxFQUFJK0osS0FBSzYwRDtZQUc1QjtVQUNGLEVBQUEsQ0FBQSxDQUFBLEdBQUMwQjtRQUFBLEVBN0VrQixHQ0ZmRyxLQUEyQixXQUFBO0FBTS9CLG1CQUFBQSxHQUFZM3lCLElBQU1vdkIsSUFBYTE0RCxJQUFBQTtBQUFTOFgsZUFBQUEsTUFBQW1rRCxFQUFBQSxHQUN0QzluRSxLQUFLbTFDLE9BQU9BLElBQ1puMUMsS0FBS3VrRSxjQUFjQSxJQUNuQnZrRSxLQUFLa2hELFdBQVdyMUMsRUFBQUE7VUFDbEI7QUFxRUMsaUJBbkVEZ2lCLEdBQUFpNkMsSUFBQSxDQUFBLEVBQUF0aEUsS0FBQSxjQUFBbkQsT0FJQSxTQUFXd0ksSUFBQUE7QUFDVDdMLGlCQUFLNkwsVUFBVUEsSUFDZjdMLEtBQUs2a0UseUJBQXlCbGxFLEtBQUs4TixJQUNqQyxHQUNBOU4sS0FBSytOLElBQUksR0FBRzFOLEtBQUs2TCxRQUFRaTVELGdCQUFnQixDQUFBLENBQUE7VUFFN0MsRUFBQSxHQUVBLEVBQUF0K0QsS0FBQSxTQUFBbkQsT0FNQSxXQUFBO0FBVUUscUJBVE0rb0MsS0FBUXBzQyxLQUFLbTFDLEtBQUsvSSxPQUNsQjBvQixLQUFjOTBELEtBQUt1a0UsWUFBWVMsb0JBQy9Ca0IsS0FBU2xtRSxLQUFLdWtFLFlBQVkyQixRQUcxQjJCLEtBQWU3bkUsS0FBSzZMLFFBQVFnOEQsY0FJekJqNUQsS0FBSSxHQUFHQSxLQUFJa21ELEdBQVlwd0QsU0FBUyxHQUFHa0s7QUFFMUMsdUJBRE1rdEQsS0FBUTF2QixHQUFNMG9CLEdBQVlsbUQsRUFBQUEsQ0FBQUEsR0FDdkJvQixLQUFJcEIsS0FBSSxHQUFHb0IsS0FBSThrRCxHQUFZcHdELFFBQVFzTCxNQUFLO0FBQy9DLG9CQUFNK3JELEtBQVEzdkIsR0FBTTBvQixHQUFZOWtELEVBQUFBLENBQUFBO0FBR2hDLG9CQUFJOHJELEdBQU14SSxVQUFVeUksR0FBTXpJLE9BQU87QUFDL0Isc0JBQU15VSxLQUNKRixLQUNBN25FLEtBQUs2a0UsMkJBQ0QvSSxHQUFNM3JCLE1BQU0xN0IsVUFBVSxLQUFLLEtBQUtzbkQsR0FBTTVyQixNQUFNMTdCLFVBQVUsS0FBSyxJQUUzRHZCLEtBQUs2b0QsR0FBTTF1RCxJQUFJeXVELEdBQU16dUQsR0FDckI4RixLQUFLNG9ELEdBQU0zcUQsSUFBSTBxRCxHQUFNMXFELEdBQ3JCa29CLEtBQVczNUIsS0FBSzJULEtBQUtKLEtBQUtBLEtBQUtDLEtBQUtBLEVBQUFBLEdBR3RDeTBELEtBQUFBO0FBRUZBLGtCQUFBQSxLQURFdHVDLEtBQVd5dUMsS0FBQUEsQ0FFVnBvRSxLQUFLODZELElBSlEsT0FJUW5oQyxJQUFVLENBQUEsSUFDaEMzNUIsS0FBSzg2RCxJQUxTLE9BS09zTixJQUFvQixDQUFBLElBRTFCLEdBR0YsTUFBYnp1QyxPQUNGc3VDLE1BQWtDdHVDO0FBRXBDLHNCQUFNMHNDLEtBQUs5eUQsS0FBSzAwRCxJQUNWM0IsS0FBSzl5RCxLQUFLeTBEO0FBRWhCMUIsa0JBQUFBLEdBQU9wSyxHQUFNejBELEVBQUFBLEVBQUlnRyxLQUFLMjRELElBQ3RCRSxHQUFPcEssR0FBTXowRCxFQUFBQSxFQUFJK0osS0FBSzYwRCxJQUN0QkMsR0FBT25LLEdBQU0xMEQsRUFBQUEsRUFBSWdHLEtBQUsyNEQsSUFDdEJFLEdBQU9uSyxHQUFNMTBELEVBQUFBLEVBQUkrSixLQUFLNjBEO2dCQUN4QjtjQUNGO1VBRUosRUFBQSxDQUFBLENBQUEsR0FBQzZCO1FBQUEsRUEvRThCLEdDQTNCRSxLQUFZLFdBQUE7QUFNaEIsbUJBQUFBLEdBQVk3eUIsSUFBTW92QixJQUFhMTRELElBQUFBO0FBQVM4WCxlQUFBQSxNQUFBcWtELEVBQUFBLEdBQ3RDaG9FLEtBQUttMUMsT0FBT0EsSUFDWm4xQyxLQUFLdWtFLGNBQWNBLElBQ25CdmtFLEtBQUtraEQsV0FBV3IxQyxFQUFBQTtVQUNsQjtBQXFGQyxpQkFuRkRnaUIsR0FBQW02QyxJQUFBLENBQUEsRUFBQXhoRSxLQUFBLGNBQUFuRCxPQUlBLFNBQVd3SSxJQUFBQTtBQUNUN0wsaUJBQUs2TCxVQUFVQTtVQUNqQixFQUFBLEdBRUEsRUFBQXJGLEtBQUEsU0FBQW5ELE9BS0EsV0FBQTtBQU9FLHFCQU5JNGtFLElBQVlyOUIsSUFHWmt4QixJQUFPQyxJQUFPbU0sSUFGWkMsS0FBY25vRSxLQUFLdWtFLFlBQVk2RCxvQkFDL0IzN0IsS0FBUXpzQyxLQUFLbTFDLEtBQUsxSSxPQUlmNzlCLEtBQUksR0FBR0EsS0FBSXU1RCxHQUFZempFLFFBQVFrSztBQUFBQSx3QkFDdENnOEIsS0FBTzZCLEdBQU0wN0IsR0FBWXY1RCxFQUFBQSxDQUFBQSxHQUNoQjh4RCxhQUFzQjkxQixHQUFLNnFCLFNBQVM3cUIsR0FBSzhxQixVQUFBQSxXQUc5QzExRCxLQUFLbTFDLEtBQUsvSSxNQUFNeEIsR0FBSzZxQixJQUFBQSxLQUFBQSxXQUNyQnoxRCxLQUFLbTFDLEtBQUsvSSxNQUFNeEIsR0FBSzhxQixNQUFBQSxNQUFBQSxXQUVqQjlxQixHQUFLNjFCLFNBQVM3RCxPQUNoQnFMLEtBQUFBLFdBQ0VyOUIsR0FBSy8rQixRQUFRbkgsU0FDVDFFLEtBQUs2TCxRQUFRdzhELGVBQ2J6OUIsR0FBSy8rQixRQUFRbkgsUUFDbkJvM0QsS0FBUWx4QixHQUFLOVosSUFDYmlyQyxLQUFRbnhCLEdBQUs2MUIsU0FBUzdELEtBQ3RCc0wsS0FBUXQ5QixHQUFLbHFCLE1BRWIxZ0IsS0FBS3NvRSxzQkFBc0J4TSxJQUFPQyxJQUFPLE1BQU1rTSxFQUFBQSxHQUMvQ2pvRSxLQUFLc29FLHNCQUFzQnZNLElBQU9tTSxJQUFPLE1BQU1ELEVBQUFBLE1BSS9DQSxLQUFBQSxXQUNFcjlCLEdBQUsvK0IsUUFBUW5ILFNBQ21CLE1BQTVCMUUsS0FBSzZMLFFBQVF3OEQsZUFDYno5QixHQUFLLytCLFFBQVFuSCxRQUNuQjFFLEtBQUtzb0Usc0JBQXNCMTlCLEdBQUtscUIsTUFBTWtxQixHQUFLOVosSUFBSW0zQyxFQUFBQTtVQUt6RCxFQUFBLEdBRUEsRUFBQXpoRSxLQUFBLHlCQUFBbkQsT0FRQSxTQUFzQnk0RCxJQUFPQyxJQUFPa00sSUFBQUE7QUFDbEMsZ0JBQU0vMEQsS0FBSzRvRCxHQUFNenVELElBQUkwdUQsR0FBTTF1RCxHQUNyQjhGLEtBQUsyb0QsR0FBTTFxRCxJQUFJMnFELEdBQU0zcUQsR0FDckJrb0IsS0FBVzM1QixLQUFLOE4sSUFBSTlOLEtBQUsyVCxLQUFLSixLQUFLQSxLQUFLQyxLQUFLQSxFQUFBQSxHQUFLLElBQUEsR0FHbERvMUQsS0FDSHZvRSxLQUFLNkwsUUFBUTI4RCxrQkFBa0JQLEtBQWEzdUMsTUFBYUEsSUFFdEQwc0MsS0FBSzl5RCxLQUFLcTFELElBQ1Z0QyxLQUFLOXlELEtBQUtvMUQ7QUFBQUEsdUJBR1p2b0UsS0FBS3VrRSxZQUFZMkIsT0FBT3BLLEdBQU16MEQsRUFBQUEsTUFDaENySCxLQUFLdWtFLFlBQVkyQixPQUFPcEssR0FBTXowRCxFQUFBQSxFQUFJZ0csS0FBSzI0RCxJQUN2Q2htRSxLQUFLdWtFLFlBQVkyQixPQUFPcEssR0FBTXowRCxFQUFBQSxFQUFJK0osS0FBSzYwRCxLQUFBQSxXQUdyQ2ptRSxLQUFLdWtFLFlBQVkyQixPQUFPbkssR0FBTTEwRCxFQUFBQSxNQUNoQ3JILEtBQUt1a0UsWUFBWTJCLE9BQU9uSyxHQUFNMTBELEVBQUFBLEVBQUlnRyxLQUFLMjRELElBQ3ZDaG1FLEtBQUt1a0UsWUFBWTJCLE9BQU9uSyxHQUFNMTBELEVBQUFBLEVBQUkrSixLQUFLNjBEO1VBRTNDLEVBQUEsQ0FBQSxDQUFBLEdBQUMrQjtRQUFBLEVBL0ZlLEdDQVpTLEtBQXdCLFdBQUE7QUFNNUIsbUJBQUFBLEdBQVl0ekIsSUFBTW92QixJQUFhMTRELElBQUFBO0FBQVM4WCxlQUFBQSxNQUFBOGtELEVBQUFBLEdBQ3RDem9FLEtBQUttMUMsT0FBT0EsSUFDWm4xQyxLQUFLdWtFLGNBQWNBLElBQ25CdmtFLEtBQUtraEQsV0FBV3IxQyxFQUFBQTtVQUNsQjtBQTZHQyxpQkEzR0RnaUIsR0FBQTQ2QyxJQUFBLENBQUEsRUFBQWppRSxLQUFBLGNBQUFuRCxPQUlBLFNBQVd3SSxJQUFBQTtBQUNUN0wsaUJBQUs2TCxVQUFVQTtVQUNqQixFQUFBLEdBRUEsRUFBQXJGLEtBQUEsU0FBQW5ELE9BS0EsV0FBQTtBQVdFLHFCQVZJNGtFLElBQVlyOUIsSUFDWjEzQixJQUFJQyxJQUFJNnlELElBQUlDLElBQUlzQyxJQUFhanZDLElBNEQ3Qm92QyxJQUFVQyxJQTNEUmw4QixLQUFRenNDLEtBQUttMUMsS0FBSzFJLE9BQ2xCd0gsS0FBUyxLQUVUazBCLEtBQWNub0UsS0FBS3VrRSxZQUFZNkQsb0JBQy9CdFQsS0FBYzkwRCxLQUFLdWtFLFlBQVlTLG9CQUMvQmtCLEtBQVNsbUUsS0FBS3VrRSxZQUFZMkIsUUFHdkJ0M0QsS0FBSSxHQUFHQSxLQUFJa21ELEdBQVlwd0QsUUFBUWtLLE1BQUs7QUFDM0Msa0JBQU0raUQsS0FBU21ELEdBQVlsbUQsRUFBQUE7QUFDM0JzM0QsY0FBQUEsR0FBT3ZVLEVBQUFBLEVBQVErVyxXQUFXLEdBQzFCeEMsR0FBT3ZVLEVBQUFBLEVBQVFnWCxXQUFXO1lBQzVCO0FBR0EscUJBQVMvNUQsS0FBSSxHQUFHQSxLQUFJdTVELEdBQVl6akUsUUFBUWtLO0FBQUFBLHdCQUN0Q2c4QixLQUFPNkIsR0FBTTA3QixHQUFZdjVELEVBQUFBLENBQUFBLEdBQ2hCOHhELGNBQ1B1SCxLQUFBQSxXQUNFcjlCLEdBQUsvK0IsUUFBUW5ILFNBQ1QxRSxLQUFLNkwsUUFBUXc4RCxlQUNiejlCLEdBQUsvK0IsUUFBUW5ILFFBRW5Cd08sS0FBSzAzQixHQUFLbHFCLEtBQUtyVCxJQUFJdTlCLEdBQUs5WixHQUFHempCLEdBQzNCOEYsS0FBS3kzQixHQUFLbHFCLEtBQUt0UCxJQUFJdzVCLEdBQUs5WixHQUFHMWYsR0FFM0Jrb0IsS0FBd0IsT0FEeEJBLEtBQVczNUIsS0FBSzJULEtBQUtKLEtBQUtBLEtBQUtDLEtBQUtBLEVBQUFBLEtBQ1IsT0FBT21tQixJQU1uQzBzQyxLQUFLOXlELE1BSExxMUQsS0FDR3ZvRSxLQUFLNkwsUUFBUTI4RCxrQkFBa0JQLEtBQWEzdUMsTUFBYUEsS0FHNUQyc0MsS0FBSzl5RCxLQUFLbzFELElBRU4zOUIsR0FBSzlaLEdBQUd3aUMsU0FBUzFvQixHQUFLbHFCLEtBQUs0eUMsU0FBQUEsV0FDekI0UyxHQUFPdDdCLEdBQUs2cUIsSUFBQUEsTUFDZHlRLEdBQU90N0IsR0FBSzZxQixJQUFBQSxFQUFNaVQsWUFBWTFDLElBQzlCRSxHQUFPdDdCLEdBQUs2cUIsSUFBQUEsRUFBTWtULFlBQVkxQyxLQUFBQSxXQUU1QkMsR0FBT3Q3QixHQUFLOHFCLE1BQUFBLE1BQ2R3USxHQUFPdDdCLEdBQUs4cUIsTUFBQUEsRUFBUWdULFlBQVkxQyxJQUNoQ0UsR0FBT3Q3QixHQUFLOHFCLE1BQUFBLEVBQVFpVCxZQUFZMUMsUUFBQUEsV0FHOUJDLEdBQU90N0IsR0FBSzZxQixJQUFBQSxNQUNkeVEsR0FBT3Q3QixHQUFLNnFCLElBQUFBLEVBQU1wb0QsS0FBSzRtQyxLQUFTK3hCLElBQ2hDRSxHQUFPdDdCLEdBQUs2cUIsSUFBQUEsRUFBTXJrRCxLQUFLNmlDLEtBQVNneUIsS0FBQUEsV0FFOUJDLEdBQU90N0IsR0FBSzhxQixNQUFBQSxNQUNkd1EsR0FBT3Q3QixHQUFLOHFCLE1BQUFBLEVBQVFyb0QsS0FBSzRtQyxLQUFTK3hCLElBQ2xDRSxHQUFPdDdCLEdBQUs4cUIsTUFBQUEsRUFBUXRrRCxLQUFLNmlDLEtBQVNneUI7QUFPMUNzQyxZQUFBQSxLQUFjO0FBRWQscUJBQVMzNUQsS0FBSSxHQUFHQSxLQUFJa21ELEdBQVlwd0QsUUFBUWtLLE1BQUs7QUFDM0Msa0JBQU0raUQsS0FBU21ELEdBQVlsbUQsRUFBQUE7QUFDM0I4NUQsY0FBQUEsS0FBVy9vRSxLQUFLK04sSUFDZDY2RCxJQUNBNW9FLEtBQUs4TixJQUFBQSxDQUFLODZELElBQWFyQyxHQUFPdlUsRUFBQUEsRUFBUStXLFFBQUFBLENBQUFBLEdBRXhDQyxLQUFXaHBFLEtBQUsrTixJQUNkNjZELElBQ0E1b0UsS0FBSzhOLElBQUFBLENBQUs4NkQsSUFBYXJDLEdBQU92VSxFQUFBQSxFQUFRZ1gsUUFBQUEsQ0FBQUEsR0FHeEN6QyxHQUFPdlUsRUFBQUEsRUFBUXRrRCxLQUFLcTdELElBQ3BCeEMsR0FBT3ZVLEVBQUFBLEVBQVF2Z0QsS0FBS3UzRDtZQUN0QjtBQUtBLHFCQUZJQyxLQUFVLEdBQ1ZDLEtBQVUsR0FDTGo2RCxLQUFJLEdBQUdBLEtBQUlrbUQsR0FBWXB3RCxRQUFRa0ssTUFBSztBQUMzQyxrQkFBTStpRCxLQUFTbUQsR0FBWWxtRCxFQUFBQTtBQUMzQmc2RCxjQUFBQSxNQUFXMUMsR0FBT3ZVLEVBQUFBLEVBQVF0a0QsR0FDMUJ3N0QsTUFBVzNDLEdBQU92VSxFQUFBQSxFQUFRdmdEO1lBQzVCO0FBSUEscUJBSE0wM0QsS0FBZUYsS0FBVTlULEdBQVlwd0QsUUFDckNxa0UsS0FBZUYsS0FBVS9ULEdBQVlwd0QsUUFFbENrSyxLQUFJLEdBQUdBLEtBQUlrbUQsR0FBWXB3RCxRQUFRa0ssTUFBSztBQUMzQyxrQkFBTStpRCxLQUFTbUQsR0FBWWxtRCxFQUFBQTtBQUMzQnMzRCxjQUFBQSxHQUFPdlUsRUFBQUEsRUFBUXRrRCxLQUFLeTdELElBQ3BCNUMsR0FBT3ZVLEVBQUFBLEVBQVF2Z0QsS0FBSzIzRDtZQUN0QjtVQUNGLEVBQUEsQ0FBQSxDQUFBLEdBQUNOO1FBQUEsRUF2SDJCLEdDQXhCTyxLQUFvQixXQUFBO0FBTXhCLG1CQUFBQSxHQUFZN3pCLElBQU1vdkIsSUFBYTE0RCxJQUFBQTtBQUFTOFgsZUFBQUEsTUFBQXFsRCxFQUFBQSxHQUN0Q2hwRSxLQUFLbTFDLE9BQU9BLElBQ1puMUMsS0FBS3VrRSxjQUFjQSxJQUNuQnZrRSxLQUFLa2hELFdBQVdyMUMsRUFBQUE7VUFDbEI7QUE2Q0MsaUJBM0NEZ2lCLEdBQUFtN0MsSUFBQSxDQUFBLEVBQUF4aUUsS0FBQSxjQUFBbkQsT0FJQSxTQUFXd0ksSUFBQUE7QUFDVDdMLGlCQUFLNkwsVUFBVUE7VUFDakIsRUFBQSxHQUVBLEVBQUFyRixLQUFBLFNBQUFuRCxPQUdBLFdBQUE7QUFNRSxxQkFMSTZQLElBQUlDLElBQUltbUIsSUFBVUssSUFDaEJ5UyxLQUFRcHNDLEtBQUttMUMsS0FBSy9JLE9BQ2xCMG9CLEtBQWM5MEQsS0FBS3VrRSxZQUFZUyxvQkFDL0JrQixLQUFTbG1FLEtBQUt1a0UsWUFBWTJCLFFBRXZCdDNELEtBQUksR0FBR0EsS0FBSWttRCxHQUFZcHdELFFBQVFrSyxNQUFLO0FBRzNDc0UsY0FBQUEsS0FBQUEsRUFEQXltQixLQUFPeVMsR0FEUTBvQixHQUFZbG1ELEVBQUFBLENBQUFBLEdBRWhCdkIsR0FDWDhGLEtBQUFBLENBQU13bUIsR0FBS3ZvQixHQUNYa29CLEtBQVczNUIsS0FBSzJULEtBQUtKLEtBQUtBLEtBQUtDLEtBQUtBLEVBQUFBLEdBRXBDblQsS0FBSzhsRSxpQkFBaUJ4c0MsSUFBVXBtQixJQUFJQyxJQUFJK3lELElBQVF2c0MsRUFBQUE7WUFDbEQ7VUFDRixFQUFBLEdBRUEsRUFBQW56QixLQUFBLG9CQUFBbkQsT0FVQSxTQUFpQmkyQixJQUFVcG1CLElBQUlDLElBQUkreUQsSUFBUXZzQyxJQUFBQTtBQUN6QyxnQkFBTW9zQyxLQUNTLE1BQWJ6c0MsS0FBaUIsSUFBSXQ1QixLQUFLNkwsUUFBUW85RCxpQkFBaUIzdkM7QUFDckQ0c0MsWUFBQUEsR0FBT3ZzQyxHQUFLdHlCLEVBQUFBLEVBQUlnRyxJQUFJNkYsS0FBSzZ5RCxJQUN6QkcsR0FBT3ZzQyxHQUFLdHlCLEVBQUFBLEVBQUkrSixJQUFJK0IsS0FBSzR5RDtVQUMzQixFQUFBLENBQUEsQ0FBQSxHQUFDaUQ7UUFBQSxFQXZEdUI7QUFBQSxpQkFBQSxHQUFBajBELElBQUE7QUFBQSxjQUFBcWEsS0FBQSxXQUFBO0FBQUEsZ0JBQUEsZUFBQSxPQUFBLFdBQUEsQ0FBQTtBQUFBLHFCQUFBO0FBQUEsZ0JBQUEsR0FBQTtBQUFBLHFCQUFBO0FBQUEsZ0JBQUEsY0FBQSxPQUFBO0FBQUEscUJBQUE7QUFBQSxnQkFBQTtBQUFBLHFCQUFBLFFBQUEsVUFBQSxRQUFBLEtBQUEsR0FBQSxTQUFBLENBQUEsR0FBQSxXQUFBO2NBQUEsQ0FBQSxDQUFBLEdBQUE7WUFBQSxTQUFBcmEsSUFBQTtBQUFBLHFCQUFBO1lBQUE7VUFBQSxFQUFBO0FBQUEsaUJBQUEsV0FBQTtBQUFBLGdCQUFBbkcsSUFBQXVlLEtBQUEsR0FBQXBZLEVBQUE7QUFBQSxnQkFBQXFhLElBQUE7QUFBQSxrQkFBQTloQixLQUFBLEdBQUEsSUFBQSxFQUFBO0FBQUEsY0FBQXNCLEtBQUEsR0FBQXVlLElBQUEsV0FBQTdmLEVBQUE7WUFBQTtBQUFBLGNBQUFzQixLQUFBdWUsR0FBQSxNQUFBLE1BQUEsU0FBQTtBQUFBLG1CQUFBLEdBQUEsTUFBQXZlLEVBQUE7VUFBQTtRQUFBO0FDQTFCLFlBR01zNkQsS0FBQUEsU0FBK0JDLElBQUFBO0FBQUEvaEIsVUFBQUEsSUFBQThoQixJQUFBQyxFQUFBQTtBQUFBLGNBQUF0Z0MsS0FBQTRnQixHQUFBeWYsRUFBQUE7QUFNbkMsbUJBQUFBLEdBQVkvekIsSUFBTW92QixJQUFhMTRELElBQUFBO0FBQVMsZ0JBQUE4eUI7QUFHbUIsbUJBSG5CaGIsR0FBQUEsTUFBQXVsRCxFQUFBQSxJQUN0Q3ZxQyxLQUFBa0ssR0FBQS9uQyxLQUFBQSxNQUFNcTBDLElBQU1vdkIsSUFBYTE0RCxFQUFBQSxHQUVwQjQ0RCxPQUFPQyxHQUFLLHNDQUFBLEdBQXdDL2xDO1VBQzNEO0FBdUNDLGlCQXJDRDlRLEdBQUFxN0MsSUFBQSxDQUFBLEVBQUExaUUsS0FBQSxvQkFBQW5ELE9BVUEsU0FBaUJpMkIsSUFBVXBtQixJQUFJQyxJQUFJd21CLElBQU15ckMsSUFBQUE7QUFDdEIsa0JBQWI5ckMsT0FFRnBtQixLQURBb21CLEtBQVcsTUFBTXQ1QixLQUFLeWtFLEtBQUFBLElBSXBCemtFLEtBQUs2a0UseUJBQXlCLEtBQUtsckMsR0FBS3dXLE1BQU0xN0IsV0FDaEQ2a0IsS0FBVzM1QixLQUFLOE4sSUFDZCxNQUFNek4sS0FBSzZrRSx5QkFBeUJsckMsR0FBS3dXLE1BQU0xN0IsUUFDL0M2a0IsS0FBV0ssR0FBS3dXLE1BQU0xN0IsTUFBQUE7QUFJMUIsZ0JBQU0yMEQsS0FBU3p2QyxHQUFLOFMsTUFBTS9uQyxTQUFTLEdBRzdCcWhFLEtBQ0gvbEUsS0FBSzZMLFFBQVFrNUQsd0JBQ1pLLEdBQWExUyxPQUNiLzRCLEdBQUs5dEIsUUFBUTZtRCxPQUNiMFcsS0FDRnpwRSxLQUFLODZELElBQUluaEMsSUFBVSxDQUFBLEdBQ2Ywc0MsS0FBSzl5RCxLQUFLNnlELElBQ1ZFLEtBQUs5eUQsS0FBSzR5RDtBQUVoQi9sRSxpQkFBS3VrRSxZQUFZMkIsT0FBT3ZzQyxHQUFLdHlCLEVBQUFBLEVBQUlnRyxLQUFLMjRELElBQ3RDaG1FLEtBQUt1a0UsWUFBWTJCLE9BQU92c0MsR0FBS3R5QixFQUFBQSxFQUFJK0osS0FBSzYwRDtVQUN4QyxFQUFBLENBQUEsQ0FBQSxHQUFDaUQ7UUFBQSxFQWpEMkM1RSxFQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLGVBQUFBLE9BQUFBLFdBQUFBLENBQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsR0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxjQUFBQSxPQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBO0FBQUFBLHFCQUFBQSxRQUFBQSxVQUFBQSxRQUFBQSxLQUFBQSxHQUFBQSxTQUFBQSxDQUFBQSxHQUFBQSxXQUFBQTtjQUFBQSxDQUFBQSxDQUFBQSxHQUFBQTtZQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxxQkFBQUE7WUFBQUE7VUFBQUEsRUFBQUE7QUFBQUEsaUJBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQSxLQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLElBQUFBLEVBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLEdBQUFBLElBQUFBLFdBQUFBLEVBQUFBO1lBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLEdBQUFBLE1BQUFBLE1BQUFBLFNBQUFBO0FBQUFBLG1CQUFBQSxHQUFBQSxNQUFBQSxFQUFBQTtVQUFBQTtRQUFBQTtBQ0o5QyxZQUdNK0UsS0FBQUEsU0FBb0NDLElBQUFBO0FBQUFsaUIsVUFBQUEsSUFBQWlpQixJQUFBQyxFQUFBQTtBQUFBLGNBQUF6Z0MsS0FBQTRnQixHQUFBNGYsRUFBQUE7QUFNeEMsbUJBQUFBLEdBQVlsMEIsSUFBTW92QixJQUFhMTRELElBQUFBO0FBQVMsbUJBQUE4WCxHQUFBQSxNQUFBMGxELEVBQUFBLEdBQUF4Z0MsR0FBQS9uQyxLQUFBZCxNQUNoQ20xQyxJQUFNb3ZCLElBQWExNEQsRUFBQUE7VUFDM0I7QUFvQkMsaUJBbEJEZ2lCLEdBQUF3N0MsSUFBQSxDQUFBLEVBQUE3aUUsS0FBQSxvQkFBQW5ELE9BVUEsU0FBaUJpMkIsSUFBVXBtQixJQUFJQyxJQUFJK3lELElBQVF2c0MsSUFBQUE7QUFDekMsZ0JBQUlMLEtBQVcsR0FBRztBQUNoQixrQkFBTTh2QyxLQUFTenZDLEdBQUs4UyxNQUFNL25DLFNBQVMsR0FDN0JxaEUsS0FDSi9sRSxLQUFLNkwsUUFBUW85RCxpQkFBaUJHLEtBQVN6dkMsR0FBSzl0QixRQUFRNm1EO0FBQ3REd1QsY0FBQUEsR0FBT3ZzQyxHQUFLdHlCLEVBQUFBLEVBQUlnRyxJQUFJNkYsS0FBSzZ5RCxJQUN6QkcsR0FBT3ZzQyxHQUFLdHlCLEVBQUFBLEVBQUkrSixJQUFJK0IsS0FBSzR5RDtZQUMzQjtVQUNGLEVBQUEsQ0FBQSxDQUFBLEdBQUNzRDtRQUFBLEVBNUJnREwsRUFBQUEsR0NhN0NPLEtBQWEsV0FBQTtBQUlqQixtQkFBQUEsR0FBWXAwQixJQUFBQTtBQUFNeHhCLGVBQUFBLE1BQUE0bEQsRUFBQUEsR0FDaEJ2cEUsS0FBS20xQyxPQUFPQSxJQUNabjFDLEtBQUt1a0UsY0FBYyxFQUNqQlMsb0JBQW9CLENBQUEsR0FDcEJvRCxvQkFBb0IsQ0FBQSxHQUNwQmxDLFFBQVEsQ0FBRSxHQUNWc0QsWUFBWSxDQUFDLEVBQUEsR0FHZnhwRSxLQUFLeXBFLGlCQUFBQSxNQUNMenBFLEtBQUswcEUscUJBQXFCLE1BQU8sSUFDakMxcEUsS0FBSzJwRSxrQkFBQUEsTUFDTDNwRSxLQUFLNHBFLGlCQUFpQixDQUFBLEdBQ3RCNXBFLEtBQUs2cEUsaUJBQWlCLENBQUEsR0FDdEI3cEUsS0FBSzhwRSxjQUFjLENBQUEsR0FDbkI5cEUsS0FBSytwRSxjQUFBQSxRQUdML3BFLEtBQUtncUUsbUJBQUFBLE9BQ0xocUUsS0FBS2lxRSwwQkFBQUEsT0FDTGpxRSxLQUFLa3FFLGtCQUFrQixHQUN2QmxxRSxLQUFLbXFFLG1CQUFtQixHQUV4Qm5xRSxLQUFLb3FFLGFBQUFBLE9BQ0xwcUUsS0FBS3FxRSx1QkFBQUEsT0FDTHJxRSxLQUFLc3FFLDBCQUEwQixHQUMvQnRxRSxLQUFLdXFFLFFBQUFBLE9BR0x2cUUsS0FBSzZMLFVBQVUsQ0FBQSxHQUNmN0wsS0FBS3U1QyxpQkFBaUIsRUFDcEI1TSxTQUFBQSxNQUNBNjlCLFdBQVcsRUFDVDVGLE9BQU8sS0FDUEcsdUJBQUFBLE1BQ0FrRSxnQkFBZ0IsS0FDaEJaLGNBQWMsSUFDZEcsZ0JBQWdCLE1BQ2hCaUMsU0FBUyxNQUNUM0YsY0FBYyxFQUFBLEdBRWhCNEYsa0JBQWtCLEVBQ2hCOUYsT0FBTyxLQUNQRyx1QkFBQUEsS0FDQWtFLGdCQUFnQixNQUNoQlQsZ0JBQWdCLE1BQ2hCSCxjQUFjLEtBQ2RvQyxTQUFTLEtBQ1QzRixjQUFjLEVBQUEsR0FFaEI2RixXQUFXLEVBQ1QxQixnQkFBZ0IsS0FDaEJaLGNBQWMsS0FDZEcsZ0JBQWdCLE1BQ2hCWCxjQUFjLEtBQ2Q0QyxTQUFTLE1BQ1QzRixjQUFjLEVBQUEsR0FFaEI4Rix1QkFBdUIsRUFDckIzQixnQkFBZ0IsR0FDaEJaLGNBQWMsS0FDZEcsZ0JBQWdCLE1BQ2hCWCxjQUFjLEtBQ2Q0QyxTQUFTLEtBQUEsR0FFWEksYUFBYSxJQUNiQyxhQUFhLE1BQ2JDLFFBQVEsYUFDUkMsZUFBZSxFQUNicitCLFNBQUFBLE1BQ0FxSCxZQUFZLEtBQ1ppM0IsZ0JBQWdCLElBQ2hCQyxrQkFBQUEsT0FDQUMsS0FBQUEsS0FBSyxHQUVQQyxVQUFVLEtBQ1ZwQixrQkFBQUEsTUFDQXFCLE1BQU0sRUFBRWgrRCxHQUFHLEdBQUcrRCxHQUFHLEVBQUEsRUFBQSxHQUVuQnFvQyxHQUFjejVDLEtBQUs2TCxTQUFTN0wsS0FBS3U1QyxjQUFBQSxHQUNqQ3Y1QyxLQUFLb3JFLFdBQVcsS0FDaEJwckUsS0FBS3NyRSxlQUFBQSxPQUVMdHJFLEtBQUt1ekQsbUJBQUFBO1VBQ1A7QUErdkJDLGlCQTd2QkQxbEMsR0FBQTA3QyxJQUFBLENBQUEsRUFBQS9pRSxLQUFBLHNCQUFBbkQsT0FHQSxXQUFBO0FBQXFCLGdCQUFBczdCLEtBQUEzK0I7QUFDbkJBLGlCQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsZUFBZSxXQUFBO0FBQ2xDd3BCLGNBQUFBLEdBQUs0c0MsWUFBQUE7WUFDUCxDQUFBLEdBQ0F2ckUsS0FBS20xQyxLQUFLcWUsUUFBUXIrQyxHQUFHLGlCQUFpQixXQUFBO0FBQ3BDd3BCLGNBQUFBLEdBQUsyc0MsZUFBQUE7WUFDUCxDQUFBLEdBQ0F0ckUsS0FBS20xQyxLQUFLcWUsUUFBUXIrQyxHQUFHLGdCQUFnQixXQUFBO0FBQ25Dd3BCLGNBQUFBLEdBQUs2c0MsZUFBQUEsR0FDTDdzQyxHQUFLNHJDLFFBQUFBO1lBQ1AsQ0FBQSxHQUNBdnFFLEtBQUttMUMsS0FBS3FlLFFBQVFyK0MsR0FBRyxrQkFBa0IsV0FBQTtBQUNyQ3dwQixjQUFBQSxHQUFLOHFDLGlCQUFBQSxPQUNMOXFDLEdBQUs2c0MsZUFBQUE7WUFDUCxDQUFBLEdBQ0F4ckUsS0FBS20xQyxLQUFLcWUsUUFBUXIrQyxHQUFHLGtCQUFrQixXQUFBO0FBQ3JDd3BCLGNBQUFBLEdBQUt1aUIsV0FBV3ZpQixHQUFLOXlCLE9BQUFBLEdBQUFBLFNBQ2pCOHlCLEdBQUs0ckMsU0FDUDVyQyxHQUFLOHNDLGdCQUFBQTtZQUVULENBQUEsR0FDQXpyRSxLQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsbUJBQW1CLFdBQUE7QUFBQSx1QkFDbEN3cEIsR0FBSzRyQyxTQUNQNXJDLEdBQUs4c0MsZ0JBQUFBO1lBRVQsQ0FBQSxHQUNBenJFLEtBQUttMUMsS0FBS3FlLFFBQVFyK0MsR0FBRyxrQkFBa0IsV0FBQTtBQUNyQ3dwQixjQUFBQSxHQUFLNnNDLGVBQUFBO1lBQ1AsQ0FBQSxHQUNBeHJFLEtBQUttMUMsS0FBS3FlLFFBQVFyK0MsR0FBRyxXQUFXLFdBQUE7QUFDOUJ3cEIsY0FBQUEsR0FBSzZzQyxlQUFBQSxLQUFlLEdBQ3BCN3NDLEdBQUt3VyxLQUFLcWUsUUFBUWgrQyxJQUFBQTtZQUNwQixDQUFBLEdBQ0F4VixLQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsZ0JBQWdCLFdBQUE7QUFFbkN3cEIsY0FBQUEsR0FBSytzQyxrQkFBQUE7WUFDUCxDQUFBO1VBSUYsRUFBQSxHQUVBLEVBQUFsbEUsS0FBQSxjQUFBbkQsT0FLQSxTQUFXd0ksSUFBQUE7QUFDVCxnQkFBQSxXQUFJQTtBQUNGLGtCQUFBLFVBQUlBO0FBQ0Y3TCxxQkFBSzZMLFFBQVE4Z0MsVUFBQUEsT0FDYjNzQyxLQUFLeXBFLGlCQUFBQSxPQUNMenBFLEtBQUt3ckUsZUFBQUE7dUJBQ0EsU0FBSTMvRDtBQUNUN0wscUJBQUs2TCxRQUFROGdDLFVBQUFBLE1BQ2Izc0MsS0FBS3lwRSxpQkFBQUEsTUFDTHpwRSxLQUFLeXJFLGdCQUFBQTttQkFDQTtBQUNMenJFLHFCQUFLeXBFLGlCQUFBQSxNQUNMclgsR0FBdUIsQ0FBQyxlQUFBLEdBQWtCcHlELEtBQUs2TCxTQUFTQSxFQUFBQSxHQUN4RDBtRCxHQUFhdnlELEtBQUs2TCxTQUFTQSxJQUFTLGVBQUEsR0FBQSxXQUVoQ0EsR0FBUThnQyxZQUNWM3NDLEtBQUs2TCxRQUFROGdDLFVBQUFBLE9BQVUsVUFHckIzc0MsS0FBSzZMLFFBQVE4Z0MsWUFDZjNzQyxLQUFLeXBFLGlCQUFBQSxPQUNMenBFLEtBQUt3ckUsZUFBQUE7QUFHUCxvQkFBTUgsS0FBT3JyRSxLQUFLNkwsUUFBUXcvRDtBQUN0QkEsZ0JBQUFBLFFBQ29CLFlBQUEsT0FBWEEsR0FBS2grRCxLQUFrQnFtRCxHQUFhMlgsR0FBS2grRCxDQUFBQSxPQUNsRGcrRCxHQUFLaCtELElBQUksS0FFVyxZQUFBLE9BQVhnK0QsR0FBS2o2RCxLQUFrQnNpRCxHQUFhMlgsR0FBS2o2RCxDQUFBQSxPQUNsRGk2RCxHQUFLajZELElBQUksS0FLYnBSLEtBQUtvckUsV0FBV3ByRSxLQUFLNkwsUUFBUXUvRDtjQUMvQjtBQUVGcHJFLGlCQUFLdTlCLEtBQUFBO1VBQ1AsRUFBQSxHQUVBLEVBQUEvMkIsS0FBQSxRQUFBbkQsT0FHQSxXQUFBO0FBQ0UsZ0JBQUl3STtBQUN3QixtQ0FBeEI3TCxLQUFLNkwsUUFBUWsvRCxVQUNmbC9ELEtBQVU3TCxLQUFLNkwsUUFBUTYrRCxrQkFDdkIxcUUsS0FBSzJyRSxjQUFjLElBQUl6QyxHQUNyQmxwRSxLQUFLbTFDLE1BQ0xuMUMsS0FBS3VrRSxhQUNMMTRELEVBQUFBLEdBRUY3TCxLQUFLNHJFLGNBQWMsSUFBSTVELEdBQWFob0UsS0FBS20xQyxNQUFNbjFDLEtBQUt1a0UsYUFBYTE0RCxFQUFBQSxHQUNqRTdMLEtBQUs2ckUsZ0JBQWdCLElBQUl4QyxHQUN2QnJwRSxLQUFLbTFDLE1BQ0xuMUMsS0FBS3VrRSxhQUNMMTRELEVBQUFBLEtBRStCLGdCQUF4QjdMLEtBQUs2TCxRQUFRay9ELFVBQ3RCbC9ELEtBQVU3TCxLQUFLNkwsUUFBUTgrRCxXQUN2QjNxRSxLQUFLMnJFLGNBQWMsSUFBSUcsR0FBVTlyRSxLQUFLbTFDLE1BQU1uMUMsS0FBS3VrRSxhQUFhMTRELEVBQUFBLEdBQzlEN0wsS0FBSzRyRSxjQUFjLElBQUk1RCxHQUFhaG9FLEtBQUttMUMsTUFBTW4xQyxLQUFLdWtFLGFBQWExNEQsRUFBQUEsR0FDakU3TCxLQUFLNnJFLGdCQUFnQixJQUFJN0MsR0FDdkJocEUsS0FBS20xQyxNQUNMbjFDLEtBQUt1a0UsYUFDTDE0RCxFQUFBQSxLQUUrQiw0QkFBeEI3TCxLQUFLNkwsUUFBUWsvRCxVQUN0QmwvRCxLQUFVN0wsS0FBSzZMLFFBQVErK0QsdUJBQ3ZCNXFFLEtBQUsyckUsY0FBYyxJQUFJSSxHQUNyQi9yRSxLQUFLbTFDLE1BQ0xuMUMsS0FBS3VrRSxhQUNMMTRELEVBQUFBLEdBRUY3TCxLQUFLNHJFLGNBQWMsSUFBSW5ELEdBQ3JCem9FLEtBQUttMUMsTUFDTG4xQyxLQUFLdWtFLGFBQ0wxNEQsRUFBQUEsR0FFRjdMLEtBQUs2ckUsZ0JBQWdCLElBQUk3QyxHQUN2QmhwRSxLQUFLbTFDLE1BQ0xuMUMsS0FBS3VrRSxhQUNMMTRELEVBQUFBLE1BSUZBLEtBQVU3TCxLQUFLNkwsUUFBUTIrRCxXQUN2QnhxRSxLQUFLMnJFLGNBQWMsSUFBSXJILEdBQ3JCdGtFLEtBQUttMUMsTUFDTG4xQyxLQUFLdWtFLGFBQ0wxNEQsRUFBQUEsR0FFRjdMLEtBQUs0ckUsY0FBYyxJQUFJNUQsR0FBYWhvRSxLQUFLbTFDLE1BQU1uMUMsS0FBS3VrRSxhQUFhMTRELEVBQUFBLEdBQ2pFN0wsS0FBSzZyRSxnQkFBZ0IsSUFBSTdDLEdBQ3ZCaHBFLEtBQUttMUMsTUFDTG4xQyxLQUFLdWtFLGFBQ0wxNEQsRUFBQUEsSUFJSjdMLEtBQUtnc0UsZUFBZW5nRTtVQUN0QixFQUFBLEdBRUEsRUFBQXJGLEtBQUEsZUFBQW5ELE9BR0EsV0FBQTtBQUFBLHFCQUNNckQsS0FBS3lwRSxrQkFBQUEsU0FBMkJ6cEUsS0FBSzZMLFFBQVE4Z0MsVUFBQUEsU0FDM0Mzc0MsS0FBSzZMLFFBQVFtL0QsY0FBY3IrQixVQUM3QjNzQyxLQUFLaXNFLFVBQUFBLEtBRUxqc0UsS0FBS29xRSxhQUFBQSxPQUNMcHFFLEtBQUt1cUUsUUFBQUEsTUFDTHZxRSxLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssT0FBTyxDQUFBLEdBQUkvVixLQUFLc3JFLFlBQUFBLEdBQ3ZDdHJFLEtBQUt5ckUsZ0JBQUFBLE1BR1B6ckUsS0FBS3VxRSxRQUFBQSxNQUNMdnFFLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxLQUFBO1VBRTNCLEVBQUEsR0FFQSxFQUFBdlAsS0FBQSxtQkFBQW5ELE9BR0EsV0FBQTtBQVN5QyxnQkFBQXVyQjtBQUFBQSxxQkFSbkM1dUIsS0FBS3lwRSxrQkFBQUEsU0FBMkJ6cEUsS0FBSzZMLFFBQVE4Z0MsV0FDL0Mzc0MsS0FBS29xRSxhQUFBQSxPQUdMcHFFLEtBQUtncUUsbUJBQUFBLE9BR0xocUUsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLGNBQUEsR0FBQSxXQUNuQi9WLEtBQUtrc0UsaUJBQ1Bsc0UsS0FBS2tzRSxlQUFlL2tCLEdBQUF2NEIsS0FBQTV1QixLQUFLbXNFLGNBQUFBLEVBQWNyckUsS0FBQTh0QixJQUFNNXVCLElBQUFBLEdBQzdDQSxLQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsY0FBY25WLEtBQUtrc0UsWUFBQUEsR0FDeENsc0UsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLGlCQUFBLE1BR3pCL1YsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLFNBQUE7VUFFM0IsRUFBQSxHQUVBLEVBQUF2UCxLQUFBLGtCQUFBbkQsT0FLQSxXQUFBO0FBQTRCLGdCQUFiMFMsS0FBQUEsRUFBSTlVLFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUEsQ0FBQSxNQUFBQSxVQUFBLENBQUE7QUFDakJqQixpQkFBS29xRSxhQUFBQSxNQUFhLFNBQ2RyMEQsTUFDRi9WLEtBQUtvc0UsZ0JBQUFBLEdBQUFBLFdBRUhwc0UsS0FBS2tzRSxpQkFDUGxzRSxLQUFLbTFDLEtBQUtxZSxRQUFRaCtDLElBQUksY0FBY3hWLEtBQUtrc0UsWUFBQUEsR0FDekNsc0UsS0FBS2tzRSxlQUFBQSxRQUFlcnRELFNBQ2hCOUksTUFDRi9WLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxnQkFBQTtVQUc3QixFQUFBLEdBRUEsRUFBQXZQLEtBQUEsa0JBQUFuRCxPQUlBLFdBQUE7QUFFRSxnQkFBTWdwRSxLQUFZQyxHQUFBQTtBQUNsQnRzRSxpQkFBS3VzRSxZQUFBQSxJQUNlRCxHQUFBQSxJQUFhRCxLQUloQixNQUFNcnNFLEtBQUswcEUsc0JBQUFBLFNBQ3hCMXBFLEtBQUt3c0UsbUJBQUFBLFVBQ1B4c0UsS0FBS29xRSxlQUVMcHFFLEtBQUt1c0UsWUFBQUEsR0FHTHZzRSxLQUFLd3NFLGlCQUFBQSxPQUFpQixTQUdwQnhzRSxLQUFLb3FFLGNBQ1BwcUUsS0FBS3dyRSxlQUFBQTtVQUVULEVBQUEsR0FFQSxFQUFBaGxFLEtBQUEsbUJBQUFuRCxPQU1BLFdBQUE7QUFBbUUsZ0JBQUEwZ0MsS0FBQS9qQyxNQUFuRHlzRSxLQUFrQnhyRSxVQUFBeUQsU0FBQXpELEtBQUFBLFdBQUFBLFVBQUE0ZCxDQUFBQSxJQUFBNWQsVUFBRyxDQUFBLElBQUFqQixLQUFLc3FFO0FBQUFBLGFBRXRDdHFFLEtBQUtzcUUsMEJBQTBCLEtBQUEsU0FDL0J0cUUsS0FBS3FxRSx5QkFFTHhVLEdBQVcsV0FBQTtBQUNUOXhCLGNBQUFBLEdBQUtvUixLQUFLcWUsUUFBUXo5QyxLQUFLLGNBQWMsRUFDbkNpK0IsWUFBWXk0QixHQUFBQSxDQUFBQSxHQUVkMW9DLEdBQUtzbUMsdUJBQUFBLE9BQ0x0bUMsR0FBS3VtQywwQkFBMEI7WUFDaEMsR0FBRSxDQUFBO1VBRVAsRUFBQSxHQUVBLEVBQUE5akUsS0FBQSxlQUFBbkQsT0FLQSxXQUFBO0FBQ0VyRCxpQkFBSzZyRSxjQUFjYSxNQUFBQSxHQUNuQjFzRSxLQUFLMnJFLFlBQVllLE1BQUFBLEdBQ2pCMXNFLEtBQUs0ckUsWUFBWWMsTUFBQUEsR0FDakIxc0UsS0FBSzJzRSxVQUFBQTtVQUNQLEVBQUEsR0FFQSxFQUFBbm1FLEtBQUEsa0JBQUFuRCxPQU9BLFdBQUE7QUFBQSxxQkFJTXJELEtBQUs0c0UscUJBQUFBLElBQ1A1c0UsS0FBS29yRSxXQUpRLE1BSVlwckUsS0FBS29yRSxXQUsxQnByRSxLQUFLb3JFLFdBVEksTUFTZ0JwckUsS0FBSzZMLFFBQVF1L0QsV0FDeENwckUsS0FBS29yRSxXQUFXcHJFLEtBQUs2TCxRQUFRdS9ELFlBSTdCcHJFLEtBQUtrcUUsa0JBQUFBLElBQ0xscUUsS0FBS29yRSxXQUFXenJFLEtBQUs4TixJQUFJek4sS0FBSzZMLFFBQVF1L0QsVUFBVXByRSxLQUFLb3JFLFdBZjFDLEdBQUE7VUFrQmpCLEVBQUEsR0FFQSxFQUFBNWtFLEtBQUEsZUFBQW5ELE9BS0EsV0FBQTtBQUVFLGdCQURBckQsS0FBSzZzRSxrQkFBQUEsR0FBQUEsU0FDRDdzRSxLQUFLb3FFLFlBQVQ7QUFHQSxrQkFBQSxTQUNFcHFFLEtBQUtncUUsb0JBQUFBLFNBQ0xocUUsS0FBS2lxRTtBQUdjanFFLHFCQUFLa3FFLGtCQUFrQmxxRSxLQUFLbXFFLG9CQUFxQixLQUlsRW5xRSxLQUFLb3JFLFdBQVcsSUFBSXByRSxLQUFLb3JFLFVBQ3pCcHJFLEtBQUs4c0UsWUFBQUEsR0FDTDlzRSxLQUFLK3NFLE9BQUFBLEdBR0wvc0UsS0FBS29yRSxXQUFXLE1BQU1wckUsS0FBS29yRSxVQUczQnByRSxLQUFLOHNFLFlBQUFBLEdBQ0w5c0UsS0FBSzhzRSxZQUFBQSxHQUVMOXNFLEtBQUtndEUsZUFBQUEsS0FFTGh0RSxLQUFLOHNFLFlBQUFBLEdBR1A5c0UsS0FBS2txRSxtQkFBbUI7O0FBR3hCbHFFLHFCQUFLb3JFLFdBQVdwckUsS0FBSzZMLFFBQVF1L0QsVUFDN0JwckUsS0FBSzhzRSxZQUFBQTtBQUFBQSx1QkFHSDlzRSxLQUFLb3FFLGNBQXFCcHFFLEtBQUsrc0UsT0FBQUEsR0FDbkMvc0UsS0FBS3NxRTtZQXBDeUI7VUFxQ2hDLEVBQUEsR0FFQSxFQUFBOWpFLEtBQUEscUJBQUFuRCxPQUtBLFdBQUE7QUFDRXJELGlCQUFLdWtFLFlBQVkyQixTQUFTLENBQUEsR0FDMUJsbUUsS0FBS3VrRSxZQUFZUyxxQkFBcUIsQ0FBQSxHQUN0Q2hsRSxLQUFLdWtFLFlBQVk2RCxxQkFBcUIsQ0FBQTtBQUN0QyxnQkFBTWg4QixLQUFRcHNDLEtBQUttMUMsS0FBSy9JLE9BQ2xCSyxLQUFRenNDLEtBQUttMUMsS0FBSzFJO0FBR3hCLHFCQUFXa2xCLE1BQVV2bEI7QUFDZmhxQyxxQkFBT3hCLFVBQVVILGVBQWVLLEtBQUtzckMsSUFBT3VsQixFQUFBQSxLQUFBQSxTQUMxQ3ZsQixHQUFNdWxCLEVBQUFBLEVBQVE5bEQsUUFBUW1sRCxXQUN4Qmh4RCxLQUFLdWtFLFlBQVlTLG1CQUFtQm4rRCxLQUFLdWxDLEdBQU11bEIsRUFBQUEsRUFBUXRxRCxFQUFBQTtBQU03RCxxQkFBV2k3RCxNQUFVNzFCO0FBQ2ZycUMscUJBQU94QixVQUFVSCxlQUFlSyxLQUFLMnJDLElBQU82MUIsRUFBQUEsS0FBQUEsU0FDMUM3MUIsR0FBTTYxQixFQUFBQSxFQUFRejJELFFBQVFtbEQsV0FDeEJoeEQsS0FBS3VrRSxZQUFZNkQsbUJBQW1CdmhFLEtBQUs0bEMsR0FBTTYxQixFQUFBQSxFQUFRajdELEVBQUFBO0FBTTdELHFCQUFTdUgsS0FBSSxHQUFHQSxLQUFJNU8sS0FBS3VrRSxZQUFZUyxtQkFBbUJ0Z0UsUUFBUWtLLE1BQUs7QUFDbkUsa0JBQU0raUQsS0FBUzN4RCxLQUFLdWtFLFlBQVlTLG1CQUFtQnAyRCxFQUFBQTtBQUNuRDVPLG1CQUFLdWtFLFlBQVkyQixPQUFPdlUsRUFBQUEsSUFBVSxFQUFFdGtELEdBQUcsR0FBRytELEdBQUcsRUFBQSxHQUFBLFdBR3pDcFIsS0FBS3VrRSxZQUFZaUYsV0FBVzdYLEVBQUFBLE1BQzlCM3hELEtBQUt1a0UsWUFBWWlGLFdBQVc3WCxFQUFBQSxJQUFVLEVBQUV0a0QsR0FBRyxHQUFHK0QsR0FBRyxFQUFBO1lBRXJEO0FBR0EscUJBQVd1Z0QsTUFBVTN4RCxLQUFLdWtFLFlBQVlpRjtBQUFBQSx5QkFDaENwOUIsR0FBTXVsQixFQUFBQSxLQUFBQSxPQUNEM3hELEtBQUt1a0UsWUFBWWlGLFdBQVc3WCxFQUFBQTtVQUd6QyxFQUFBLEdBRUEsRUFBQW5yRCxLQUFBLFVBQUFuRCxPQUdBLFdBQUE7QUFDRSxnQkFBTTRwRSxLQUFVcmYsR0FBWTV0RCxLQUFLNHBFLGNBQUFBLEdBQzNCeDlCLEtBQVFwc0MsS0FBS20xQyxLQUFLL0ksT0FDbEJvOUIsS0FBYXhwRSxLQUFLdWtFLFlBQVlpRjtBQUNwQ3hwRSxpQkFBSzZwRSxpQkFBaUIsQ0FBQTtBQUV0QixxQkFBU2o3RCxLQUFJLEdBQUdBLEtBQUlxK0QsR0FBUXZvRSxRQUFRa0ssTUFBSztBQUN2QyxrQkFBTStpRCxLQUFTc2IsR0FBUXIrRCxFQUFBQTtBQUFBQSx5QkFDbkJ3OUIsR0FBTXVsQixFQUFBQSxJQUFBQSxTQUNKdmxCLEdBQU11bEIsRUFBQUEsRUFBUTlsRCxRQUFRbWxELFlBQ3hCaHhELEtBQUs2cEUsZUFBZWxZLEVBQUFBLElBQVUsRUFDNUJ1YixXQUFXLEVBQUU3L0QsR0FBRysrQixHQUFNdWxCLEVBQUFBLEVBQVF0a0QsR0FBRytELEdBQUdnN0IsR0FBTXVsQixFQUFBQSxFQUFRdmdELEVBQUFBLEVBQUFBLEdBRXBEbzRELEdBQVc3WCxFQUFBQSxFQUFRdGtELElBQUlyTixLQUFLNHBFLGVBQWVqWSxFQUFBQSxFQUFRd2IsSUFDbkQzRCxHQUFXN1gsRUFBQUEsRUFBUXZnRCxJQUFJcFIsS0FBSzRwRSxlQUFlalksRUFBQUEsRUFBUXliLElBQ25EaGhDLEdBQU11bEIsRUFBQUEsRUFBUXRrRCxJQUFJck4sS0FBSzRwRSxlQUFlalksRUFBQUEsRUFBUXRrRCxHQUM5QysrQixHQUFNdWxCLEVBQUFBLEVBQVF2Z0QsSUFBSXBSLEtBQUs0cEUsZUFBZWpZLEVBQUFBLEVBQVF2Z0QsS0FBQUEsT0FHekNwUixLQUFLNHBFLGVBQWVqWSxFQUFBQTtZQUUvQjtVQUNGLEVBQUEsR0FFQSxFQUFBbnJELEtBQUEsd0JBQUFuRCxPQU1BLFdBQUE7QUFDRSxnQkFBSTZQLElBQUlDLElBQ0ZpNUIsS0FBUXBzQyxLQUFLbTFDLEtBQUsvSSxPQUNsQmloQyxLQUFZcnRFLEtBQUs2cEU7QUFHdkIscUJBQVdsWSxNQUFVM3hELEtBQUs2cEU7QUFDeEIsa0JBQ0V6bkUsT0FBT3hCLFVBQVVILGVBQWVLLEtBQUtkLEtBQUs2cEUsZ0JBQWdCbFksRUFBQUEsS0FBQUEsV0FDMUR2bEIsR0FBTXVsQixFQUFBQSxNQUVOeitDLEtBQUtrNUIsR0FBTXVsQixFQUFBQSxFQUFRdGtELElBQUlnZ0UsR0FBVTFiLEVBQUFBLEVBQVF1YixVQUFVNy9ELEdBQ25EOEYsS0FBS2k1QixHQUFNdWxCLEVBQUFBLEVBQVF2Z0QsSUFBSWk4RCxHQUFVMWIsRUFBQUEsRUFBUXViLFVBQVU5N0QsR0FFNUN6UixLQUFLMlQsS0FBSzNULEtBQUs4NkQsSUFBSXZuRCxJQUFJLENBQUEsSUFBS3ZULEtBQUs4NkQsSUFBSXRuRCxJQUFJLENBQUEsQ0FBQSxJQVYvQjtBQWFmLHVCQUFBO0FBSU4sbUJBQUE7VUFDRixFQUFBLEdBRUEsRUFBQTNNLEtBQUEsYUFBQW5ELE9BR0EsV0FBQTtBQVFFLHFCQVBNeXhELEtBQWM5MEQsS0FBS3VrRSxZQUFZUyxvQkFDakNzSSxLQUFrQixHQUNsQkMsS0FBc0IsR0FLakIzK0QsS0FBSSxHQUFHQSxLQUFJa21ELEdBQVlwd0QsUUFBUWtLLE1BQUs7QUFDM0Msa0JBQU0raUQsS0FBU21ELEdBQVlsbUQsRUFBQUEsR0FDckI0K0QsS0FBZXh0RSxLQUFLeXRFLGFBQWE5YixFQUFBQTtBQUV2QzJiLGNBQUFBLEtBQWtCM3RFLEtBQUs4TixJQUFJNi9ELElBQWlCRSxFQUFBQSxHQUM1Q0QsTUFBdUJDO1lBQ3pCO0FBR0F4dEUsaUJBQUtpcUUsMEJBQ0hzRCxLQUFzQnpZLEdBQVlwd0QsU0FaRixHQWFsQzFFLEtBQUtvcUUsYUFBYWtELEtBQWtCdHRFLEtBQUs2TCxRQUFRaS9EO1VBQ25ELEVBQUEsR0FFQSxFQUFBdGtFLEtBQUEsOEJBQUFuRCxPQVNBLFNBQTJCNDRCLElBQUdwNUIsSUFBRzZxRSxJQUFBQTtBQUkvQnp4QyxZQUFBQSxPQUZXcDVCLEtBREE3QyxLQUFLZ3NFLGFBQWF2QixVQUFVeHVDLE1BQ2xCeXhDLEtBRVoxdEUsS0FBS29yRTtBQUdkLGdCQUFNdUMsS0FBTzN0RSxLQUFLNkwsUUFBUWcvRCxlQUFlO0FBS3pDLG1CQUpJbHJFLEtBQUtzMUIsSUFBSWdILEVBQUFBLElBQUsweEMsT0FDaEIxeEMsS0FBSUEsS0FBSSxJQUFJMHhDLEtBQUFBLENBQVFBLEtBR2YxeEM7VUFDVCxFQUFBLEdBRUEsRUFBQXoxQixLQUFBLGdCQUFBbkQsT0FPQSxTQUFhc3VELElBQUFBO0FBQ1gsZ0JBQU1oNEIsS0FBTzM1QixLQUFLbTFDLEtBQUsvSSxNQUFNdWxCLEVBQUFBLEdBQ3ZCL3FCLEtBQVE1bUMsS0FBS3VrRSxZQUFZMkIsT0FBT3ZVLEVBQUFBO0FBRWxDM3hELGlCQUFLNkwsUUFBUXcvRCxTQUNmemtDLEdBQU12NUIsS0FBS3JOLEtBQUs2TCxRQUFRdy9ELEtBQUtoK0QsR0FDN0J1NUIsR0FBTXgxQixLQUFLcFIsS0FBSzZMLFFBQVF3L0QsS0FBS2o2RDtBQUcvQixnQkFBTXdxQixLQUFXNTdCLEtBQUt1a0UsWUFBWWlGLFdBQVc3WCxFQUFBQTtBQXFDN0MsbUJBbENBM3hELEtBQUs0cEUsZUFBZWpZLEVBQUFBLElBQVUsRUFDNUJ0a0QsR0FBR3NzQixHQUFLdHNCLEdBQ1IrRCxHQUFHdW9CLEdBQUt2b0IsR0FDUis3RCxJQUFJdnhDLEdBQVN2dUIsR0FDYisvRCxJQUFJeHhDLEdBQVN4cUIsRUFBQUEsR0FBQUEsVUFHWHVvQixHQUFLOXRCLFFBQVFzbEMsTUFBTTlqQyxLQUNyQnV1QixHQUFTdnVCLElBQUlyTixLQUFLNHRFLDJCQUNoQmh5QyxHQUFTdnVCLEdBQ1R1NUIsR0FBTXY1QixHQUNOc3NCLEdBQUs5dEIsUUFBUTZtRCxJQUFBQSxHQUVmLzRCLEdBQUt0c0IsS0FBS3V1QixHQUFTdnVCLElBQUlyTixLQUFLb3JFLGFBRTVCeGtDLEdBQU12NUIsSUFBSSxHQUNWdXVCLEdBQVN2dUIsSUFBSSxJQUFBLFVBR1hzc0IsR0FBSzl0QixRQUFRc2xDLE1BQU0vL0IsS0FDckJ3cUIsR0FBU3hxQixJQUFJcFIsS0FBSzR0RSwyQkFDaEJoeUMsR0FBU3hxQixHQUNUdzFCLEdBQU14MUIsR0FDTnVvQixHQUFLOXRCLFFBQVE2bUQsSUFBQUEsR0FFZi80QixHQUFLdm9CLEtBQUt3cUIsR0FBU3hxQixJQUFJcFIsS0FBS29yRSxhQUU1QnhrQyxHQUFNeDFCLElBQUksR0FDVndxQixHQUFTeHFCLElBQUksSUFHT3pSLEtBQUsyVCxLQUN6QjNULEtBQUs4NkQsSUFBSTcrQixHQUFTdnVCLEdBQUcsQ0FBQSxJQUFLMU4sS0FBSzg2RCxJQUFJNytCLEdBQVN4cUIsR0FBRyxDQUFBLENBQUE7VUFHbkQsRUFBQSxHQUVBLEVBQUE1SyxLQUFBLGdCQUFBbkQsT0FNQSxXQUFBO0FBQ0UsZ0JBQU0rb0MsS0FBUXBzQyxLQUFLbTFDLEtBQUsvSTtBQUN4QixxQkFBVy9rQyxNQUFNK2tDO0FBQ2Ysa0JBQUlocUMsT0FBT3hCLFVBQVVILGVBQWVLLEtBQUtzckMsSUFBTy9rQyxFQUFBQSxLQUMxQytrQyxHQUFNL2tDLEVBQUFBLEVBQUlnRyxLQUFLKytCLEdBQU0va0MsRUFBQUEsRUFBSStKLEdBQUc7QUFDOUIsb0JBQU0rL0IsS0FBUS9FLEdBQU0va0MsRUFBQUEsRUFBSXdFLFFBQVFzbEM7QUFDaENueEMscUJBQUs4cEUsWUFBWXppRSxFQUFBQSxJQUFNLEVBQUVnRyxHQUFHOGpDLEdBQU05akMsR0FBRytELEdBQUcrL0IsR0FBTS8vQixFQUFBQSxHQUM5QysvQixHQUFNOWpDLElBQUFBLE1BQ044akMsR0FBTS8vQixJQUFBQTtjQUNSO1VBR04sRUFBQSxHQUVBLEVBQUE1SyxLQUFBLHVCQUFBbkQsT0FLQSxXQUFBO0FBQ0UsZ0JBQU0rb0MsS0FBUXBzQyxLQUFLbTFDLEtBQUsvSTtBQUN4QixxQkFBVy9rQyxNQUFNK2tDO0FBQ1hocUMscUJBQU94QixVQUFVSCxlQUFlSyxLQUFLc3JDLElBQU8va0MsRUFBQUEsS0FBQUEsV0FDMUNySCxLQUFLOHBFLFlBQVl6aUUsRUFBQUEsTUFDbkIra0MsR0FBTS9rQyxFQUFBQSxFQUFJd0UsUUFBUXNsQyxNQUFNOWpDLElBQUlyTixLQUFLOHBFLFlBQVl6aUUsRUFBQUEsRUFBSWdHLEdBQ2pEKytCLEdBQU0va0MsRUFBQUEsRUFBSXdFLFFBQVFzbEMsTUFBTS8vQixJQUFJcFIsS0FBSzhwRSxZQUFZemlFLEVBQUFBLEVBQUkrSjtBQUl2RHBSLGlCQUFLOHBFLGNBQWMsQ0FBQTtVQUNyQixFQUFBLEdBRUEsRUFBQXRqRSxLQUFBLGFBQUFuRCxPQUtBLFdBQUE7QUFBOEQsZ0JBQUFpaEMsS0FBQXRrQyxNQUFwRGcwQyxLQUFVL3lDLFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUE0ZCxDQUFBQSxJQUFBNWQsVUFBQUEsQ0FBQUEsSUFBR2pCLEtBQUs2TCxRQUFRbS9ELGNBQWNoM0I7QUFDdEIsd0JBQUEsT0FBZkEsT0FDVEEsS0FBYWgwQyxLQUFLNkwsUUFBUW0vRCxjQUFjaDNCLFlBQ3hDN0wsUUFBUS9uQyxNQUNOLHFGQUNBNHpDLEVBQUFBLElBSStDLE1BQS9DaDBDLEtBQUt1a0UsWUFBWVMsbUJBQW1CdGdFLFVBTXhDMUUsS0FBS2dxRSxtQkFBMkJocUUsS0FBSzZMLFFBQVFtK0Qsa0JBRzdDaHFFLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxjQUFBLEdBRXZCL1YsS0FBS3dyRSxlQUFBQSxHQUNMeHJFLEtBQUtvcUUsYUFBQUEsT0FHTHBxRSxLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssY0FBQSxHQUN2Qi9WLEtBQUs2dEUsbUJBQW1CNzVCLElBQUFBLFNBR3BCaDBDLEtBQUs2TCxRQUFRbS9ELGNBQWNFLG9CQUM3QmxyRSxLQUFLOHRFLGFBQUFBLEdBRVA5dEUsS0FBS3NxRSwwQkFBMEIsR0FFL0J6VSxHQUFXLFdBQUE7QUFBQSxxQkFBTXZ4QixHQUFLeXBDLG9CQUFBQTtZQUFxQixHQUFFLENBQUEsS0F2QjNDL3RFLEtBQUt1cUUsUUFBQUE7VUF3QlQsRUFBQSxHQUVBLEVBQUEvakUsS0FBQSxxQkFBQW5ELE9BTUEsV0FBQTtBQUNFLG1CQUFBLFNBQUlyRCxLQUFLcXFFLHlCQUVUcnFFLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxrQkFBQSxHQUN2Qi9WLEtBQUtxcUUsdUJBQUFBLE1BQXVCO1VBRTlCLEVBQUEsR0FFQSxFQUFBN2pFLEtBQUEsdUJBQUFuRCxPQUtBLFdBQUE7QUFBc0IsZ0JBQUF1eUQsS0FBQTUxRCxNQUNkZ3VFLEtBQVUsV0FBQTtBQUFILHFCQUFBLFVBQ1hwWSxHQUFLd1UsY0FDTHhVLEdBQUswVSwwQkFBMEIxVSxHQUFLaVk7WUFBZ0IsR0FFaERJLEtBQWUsV0FBQTtBQUNuQnJZLGNBQUFBLEdBQUt6Z0IsS0FBS3FlLFFBQVF6OUMsS0FBSyx5QkFBeUIsRUFDOUNpK0IsWUFBWTRoQixHQUFLMFUseUJBQ2pCaFosT0FBT3NFLEdBQUtpWSxpQkFBQUEsQ0FBQUE7WUFBQUE7QUFJWjd0RSxpQkFBSzZzRSxrQkFBQUEsS0FDUG9CLEdBQUFBO0FBSUYscUJBT2VyK0IsSUFSWDlMLEtBQVEsR0FDTGtxQyxHQUFBQSxLQUFhbHFDLEtBQVE5akMsS0FBSzZMLFFBQVFtL0QsY0FBY0M7QUFDckRqckUsbUJBQUt1c0UsWUFBQUEsR0FDTHpvQztBQUFBQSxhQUdGbXFDLEdBQUFBLEdBRUlELEdBQUFBLEtBQ0ZuWSxHQUFXMU8sR0FBQXZYLEtBQUE1dkMsS0FBSyt0RSxtQkFBQUEsRUFBbUJqdEUsS0FBQTh1QyxJQUFNNXZDLElBQUFBLEdBQU8sQ0FBQSxJQUVoREEsS0FBS2t1RSx1QkFBQUE7VUFFVCxFQUFBLEdBRUEsRUFBQTFuRSxLQUFBLDBCQUFBbkQsT0FLQSxXQUFBO0FBQ0VyRCxpQkFBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLGNBQUEsR0FBQSxTQUNuQi9WLEtBQUs2TCxRQUFRbS9ELGNBQWNHLE9BQzdCbnJFLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxLQUFBLEdBQUEsU0FHckIvVixLQUFLNkwsUUFBUW0vRCxjQUFjRSxvQkFDN0JsckUsS0FBS211RSxvQkFBQUEsR0FHUG51RSxLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssNkJBQUEsR0FDdkIvVixLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssZ0JBQUEsR0FBQSxTQUVuQi9WLEtBQUtvcUUsYUFDUHBxRSxLQUFLb3NFLGdCQUFBQSxJQUVMcHNFLEtBQUt5ckUsZ0JBQUFBLEdBR1B6ckUsS0FBS3VxRSxRQUFBQTtVQUNQLEVBQUEsR0FJQSxFQUFBL2pFLEtBQUEsZUFBQW5ELE9BUUEsU0FBWThOLElBQUFBO0FBQ1YscUJBQVN2QyxLQUFJLEdBQUdBLEtBQUk1TyxLQUFLdWtFLFlBQVlTLG1CQUFtQnRnRSxRQUFRa0ssTUFBSztBQUNuRSxrQkFBTWhCLEtBQVE1TixLQUFLdWtFLFlBQVlTLG1CQUFtQnAyRCxFQUFBQSxHQUM1QytxQixLQUFPMzVCLEtBQUttMUMsS0FBSy9JLE1BQU14K0IsRUFBQUEsR0FDdkJnNUIsS0FBUTVtQyxLQUFLdWtFLFlBQVkyQixPQUFPdDRELEVBQUFBLEdBR2hDd2dFLEtBQVl6dUUsS0FBSzJULEtBQUszVCxLQUFLODZELElBQUk3ekIsR0FBTXY1QixHQUFHLENBQUEsSUFBSzFOLEtBQUs4NkQsSUFBSTd6QixHQUFNdjVCLEdBQUcsQ0FBQSxDQUFBLEdBRS9EOEosS0FBT3hYLEtBQUsrTixJQUFJL04sS0FBSzhOLElBQUksR0FBRzJnRSxFQUFBQSxHQUFZLEVBQUEsR0FDeENDLEtBQVksSUFBSWwzRCxJQUVoQmcwQixLQUFRbWpDLElBQ1gsTUFBMEQsTUFBcEQzdUUsS0FBSytOLElBQUksR0FBRy9OLEtBQUs4TixJQUFJLEdBUFYsT0FPMkIyZ0UsRUFBQUEsQ0FBQUEsS0FBcUIsS0FDbEUsR0FDQSxDQUFBLEdBR0l4dkQsS0FBUSxFQUNadlIsR0FBR3NzQixHQUFLdHNCLElBZEssS0FjUXU1QixHQUFNdjVCLEdBQzNCK0QsR0FBR3VvQixHQUFLdm9CLElBZkssS0FlUXcxQixHQUFNeDFCLEVBQUFBO0FBRzdCRCxjQUFBQSxHQUFJaTBDLFlBQVlqdUMsSUFDaEJoRyxHQUFJazBDLGNBQWNsYSxJQUNsQmg2QixHQUFJRyxVQUFBQSxHQUNKSCxHQUFJVyxPQUFPNm5CLEdBQUt0c0IsR0FBR3NzQixHQUFLdm9CLENBQUFBLEdBQ3hCRCxHQUFJWSxPQUFPNk0sR0FBTXZSLEdBQUd1UixHQUFNeE4sQ0FBQUEsR0FDMUJELEdBQUk0M0MsT0FBQUE7QUFFSixrQkFBTTl0QixLQUFRdDdCLEtBQUsrNkIsTUFBTWtNLEdBQU14MUIsR0FBR3cxQixHQUFNdjVCLENBQUFBO0FBQ3hDOEQsY0FBQUEsR0FBSW96QyxZQUFZcFosSUFDaEJndEIsR0FBVTNrRCxLQUFLckMsSUFBSyxFQUNsQmdILE1BQU0sU0FDTnlHLE9BQU9BLElBQ1BxYyxPQUFPQSxJQUNQdjJCLFFBQVEycEUsR0FBQUEsQ0FBQUEsR0FFVmxsQixHQUFBaDRDLEVBQUFBLEVBQUdyUSxLQUFIcVEsRUFBQUE7WUFDRjtVQUNGLEVBQUEsQ0FBQSxDQUFBLEdBQUNvNEQ7UUFBQSxFQXYxQmdCO0FDZm5CLFlBQUlnRjtBQUNKLGNBQU1DLEtBQVEsSUFBSUMsV0FBVyxFQUFBO0FBQ2QsaUJBQVNDLEtBQUFBO0FBRXRCLGNBQUEsQ0FBS0gsT0FFSEEsS0FBb0MsZUFBQSxPQUFYSSxVQUEwQkEsT0FBT0osbUJBQW1CSSxPQUFPSixnQkFBZ0IvdEUsS0FBS211RSxNQUFBQSxHQUFBQSxDQUVwR0o7QUFDSCxrQkFBTSxJQUFJdm1DLE1BQU0sMEdBQUE7QUFJcEIsaUJBQU91bUMsR0FBZ0JDLEVBQUFBO1FBQ3pCO0FDWEEsY0FBTUksS0FBWSxDQUFBO0FBRWxCLGlCQUFTaGdFLEtBQUksR0FBR0EsS0FBSSxLQUFBLEVBQU9BO0FBQ3pCZ2dFLGFBQVUvbkUsTUFBTStILEtBQUksS0FBT3ROLFNBQVMsRUFBQSxFQUFJRSxNQUFNLENBQUEsQ0FBQTtBQ1JqQyxZQUFBcXRFLEtBQUEsRUFDYkMsWUFGbUMsZUFBQSxPQUFYSCxVQUEwQkEsT0FBT0csY0FBY0gsT0FBT0csV0FBV3R1RSxLQUFLbXVFLE1BQUFBLEVBQUFBO0FDSWhHLGlCQUFTSSxHQUFHbGpFLElBQVNtakUsSUFBSy9pRCxJQUFBQTtBQUN4QixjQUFJNGlELEdBQU9DLGNBQUFBLENBQWVFLE1BQUFBLENBQVFuakU7QUFDaEMsbUJBQU9nakUsR0FBT0MsV0FBQUE7QUFJaEIsZ0JBQU1HLE1BRE5wakUsS0FBVUEsTUFBVyxDQUFBLEdBQ0F0RSxXQUFXc0UsR0FBUTZpRSxPQUFPQSxJQUFBQTtBQUsvQyxjQUhBTyxHQUFLLENBQUEsSUFBZSxLQUFWQSxHQUFLLENBQUEsSUFBWSxJQUMzQkEsR0FBSyxDQUFBLElBQWUsS0FBVkEsR0FBSyxDQUFBLElBQVksS0FFdkJELElBQUs7QUFDUC9pRCxZQUFBQSxLQUFTQSxNQUFVO0FBRW5CLHFCQUFTcmQsS0FBSSxHQUFHQSxLQUFJLElBQUEsRUFBTUE7QUFDeEJvZ0UsY0FBQUEsR0FBSS9pRCxLQUFTcmQsRUFBQUEsSUFBS3FnRSxHQUFLcmdFLEVBQUFBO0FBR3pCLG1CQUFPb2dFO1VBQ1I7QUFFRCxpQkZiSyxTQUF5QnhnRCxJQUFLdkMsS0FBUyxHQUFBO0FBRzVDLG1CQUFPMmlELEdBQVVwZ0QsR0FBSXZDLEtBQVMsQ0FBQSxDQUFBLElBQU0yaUQsR0FBVXBnRCxHQUFJdkMsS0FBUyxDQUFBLENBQUEsSUFBTTJpRCxHQUFVcGdELEdBQUl2QyxLQUFTLENBQUEsQ0FBQSxJQUFNMmlELEdBQVVwZ0QsR0FBSXZDLEtBQVMsQ0FBQSxDQUFBLElBQU0sTUFBTTJpRCxHQUFVcGdELEdBQUl2QyxLQUFTLENBQUEsQ0FBQSxJQUFNMmlELEdBQVVwZ0QsR0FBSXZDLEtBQVMsQ0FBQSxDQUFBLElBQU0sTUFBTTJpRCxHQUFVcGdELEdBQUl2QyxLQUFTLENBQUEsQ0FBQSxJQUFNMmlELEdBQVVwZ0QsR0FBSXZDLEtBQVMsQ0FBQSxDQUFBLElBQU0sTUFBTTJpRCxHQUFVcGdELEdBQUl2QyxLQUFTLENBQUEsQ0FBQSxJQUFNMmlELEdBQVVwZ0QsR0FBSXZDLEtBQVMsQ0FBQSxDQUFBLElBQU0sTUFBTTJpRCxHQUFVcGdELEdBQUl2QyxLQUFTLEVBQUEsQ0FBQSxJQUFPMmlELEdBQVVwZ0QsR0FBSXZDLEtBQVMsRUFBQSxDQUFBLElBQU8yaUQsR0FBVXBnRCxHQUFJdkMsS0FBUyxFQUFBLENBQUEsSUFBTzJpRCxHQUFVcGdELEdBQUl2QyxLQUFTLEVBQUEsQ0FBQSxJQUFPMmlELEdBQVVwZ0QsR0FBSXZDLEtBQVMsRUFBQSxDQUFBLElBQU8yaUQsR0FBVXBnRCxHQUFJdkMsS0FBUyxFQUFBLENBQUE7VUFDaGYsRUVTeUJnakQsRUFBQUE7UUFDekI7QUN4QkEsWUFHTUMsS0FBVyxXQUFBO0FBSWYsbUJBQUFBLEtBQUFBO0FBQWN2ckQsZUFBQUEsTUFBQXVyRCxFQUFBQTtVQUFDO0FBNkdkLGlCQTNHRHJoRCxHQUFBcWhELElBQUEsTUFBQSxDQUFBLEVBQUExb0UsS0FBQSxZQUFBbkQsT0FRQSxTQUFnQjhyRSxJQUFBQTtBQUE4QixnQkFLMUN4MUMsSUFMc0J5MUMsS0FBYW51RSxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsSUFBQUEsVUFBQSxDQUFBLElBQUcsQ0FBQSxHQUNwQ21sRSxLQUFPLEtBQ1RFLEtBQUFBLE1BQ0FILEtBQU8sS0FDUEUsS0FBQUE7QUFFRixnQkFBSStJLEdBQWMxcUUsU0FBUztBQUN6Qix1QkFBU2tLLEtBQUksR0FBR0EsS0FBSXdnRSxHQUFjMXFFLFFBQVFrSztBQUVwQ3UzRCxnQkFBQUEsTUFESnhzQyxLQUFPdzFDLEdBQVNDLEdBQWN4Z0UsRUFBQUEsQ0FBQUEsR0FDZHVoQyxNQUFNeVgsWUFBWTFULFNBQ2hDaXlCLEtBQU94c0MsR0FBS3dXLE1BQU15WCxZQUFZMVQsT0FFNUJteUIsS0FBTzFzQyxHQUFLd1csTUFBTXlYLFlBQVlwTSxVQUNoQzZxQixLQUFPMXNDLEdBQUt3VyxNQUFNeVgsWUFBWXBNLFFBRTVCNHFCLEtBQU96c0MsR0FBS3dXLE1BQU15WCxZQUFZelQsUUFDaENpeUIsS0FBT3pzQyxHQUFLd1csTUFBTXlYLFlBQVl6VCxNQUU1Qm15QixLQUFPM3NDLEdBQUt3VyxNQUFNeVgsWUFBWW5NLFdBQ2hDNnFCLEtBQU8zc0MsR0FBS3dXLE1BQU15WCxZQUFZbk07QUFRcEMsbUJBSGEsUUFBVDBxQixNQUFBQSxTQUFnQkUsTUFBMEIsUUFBVEQsTUFBQUEsU0FBZ0JFLE9BQ2xERixLQUFPLEdBQUtFLEtBQU8sR0FBS0gsS0FBTyxHQUFLRSxLQUFPLElBRXZDLEVBQUVGLE1BQU1BLElBQU1FLE1BQU1BLElBQU1ELE1BQU1BLElBQU1FLE1BQU1BLEdBQUFBO1VBQ3JELEVBQUEsR0FFQSxFQUFBOS9ELEtBQUEsZ0JBQUFuRCxPQVFBLFNBQW9COHJFLElBQUFBO0FBQThCLGdCQUs5Q3gxQyxJQUwwQnkxQyxLQUFhbnVFLFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUEsQ0FBQSxJQUFBQSxVQUFBLENBQUEsSUFBRyxDQUFBLEdBQ3hDbWxFLEtBQU8sS0FDVEUsS0FBQUEsTUFDQUgsS0FBTyxLQUNQRSxLQUFBQTtBQUVGLGdCQUFJK0ksR0FBYzFxRSxTQUFTO0FBQ3pCLHVCQUFTa0ssS0FBSSxHQUFHQSxLQUFJd2dFLEdBQWMxcUUsUUFBUWtLO0FBRXBDdTNELGdCQUFBQSxNQURKeHNDLEtBQU93MUMsR0FBU0MsR0FBY3hnRSxFQUFBQSxDQUFBQSxHQUNkdkIsTUFDZDg0RCxLQUFPeHNDLEdBQUt0c0IsSUFFVmc1RCxLQUFPMXNDLEdBQUt0c0IsTUFDZGc1RCxLQUFPMXNDLEdBQUt0c0IsSUFFVis0RCxLQUFPenNDLEdBQUt2b0IsTUFDZGcxRCxLQUFPenNDLEdBQUt2b0IsSUFFVmsxRCxLQUFPM3NDLEdBQUt2b0IsTUFDZGsxRCxLQUFPM3NDLEdBQUt2b0I7QUFRbEIsbUJBSGEsUUFBVCswRCxNQUFBQSxTQUFnQkUsTUFBMEIsUUFBVEQsTUFBQUEsU0FBZ0JFLE9BQ2xERixLQUFPLEdBQUtFLEtBQU8sR0FBS0gsS0FBTyxHQUFLRSxLQUFPLElBRXZDLEVBQUVGLE1BQU1BLElBQU1FLE1BQU1BLElBQU1ELE1BQU1BLElBQU1FLE1BQU1BLEdBQUFBO1VBQ3JELEVBQUEsR0FFQSxFQUFBOS9ELEtBQUEsY0FBQW5ELE9BS0EsU0FBa0JzakUsSUFBQUE7QUFDaEIsbUJBQU8sRUFDTHQ1RCxHQUFHLE9BQU9zNUQsR0FBTU4sT0FBT00sR0FBTVIsT0FDN0IvMEQsR0FBRyxPQUFPdTFELEdBQU1MLE9BQU9LLEdBQU1QLE1BQUFBO1VBRWpDLEVBQUEsR0FFQSxFQUFBNS9ELEtBQUEsZ0JBQUFuRCxPQVFBLFNBQW9COHFCLElBQU1oVyxJQUFBQTtBQUN4QixnQkFBTWszRCxLQUFnQixDQUFBO0FBU3RCLG1CQUFBLFdBUklsM0QsTUFBK0IsV0FBVEEsTUFDeEJvcUMsR0FBVzhzQixJQUFlbGhELEdBQUt0aUIsU0FBQUEsSUFBUyxHQUN4Q3dqRSxHQUFjaGlFLElBQUk4Z0IsR0FBSzlnQixHQUN2QmdpRSxHQUFjaitELElBQUkrYyxHQUFLL2MsR0FDdkJpK0QsR0FBY0Msc0JBQXNCbmhELEdBQUtzZSxNQUFNL25DLFVBRS9DNjlDLEdBQVc4c0IsSUFBZWxoRCxHQUFLdGlCLFNBQUFBLElBQVMsR0FFbkN3akU7VUFDVCxFQUFBLENBQUEsQ0FBQSxHQUFDSDtRQUFBLEVBakhjO0FBQUEsaUJBQUEsR0FBQW42RCxJQUFBO0FBQUEsY0FBQXFhLEtBQUEsV0FBQTtBQUFBLGdCQUFBLGVBQUEsT0FBQSxXQUFBLENBQUE7QUFBQSxxQkFBQTtBQUFBLGdCQUFBLEdBQUE7QUFBQSxxQkFBQTtBQUFBLGdCQUFBLGNBQUEsT0FBQTtBQUFBLHFCQUFBO0FBQUEsZ0JBQUE7QUFBQSxxQkFBQSxRQUFBLFVBQUEsUUFBQSxLQUFBLEdBQUEsU0FBQSxDQUFBLEdBQUEsV0FBQTtjQUFBLENBQUEsQ0FBQSxHQUFBO1lBQUEsU0FBQXJhLElBQUE7QUFBQSxxQkFBQTtZQUFBO1VBQUEsRUFBQTtBQUFBLGlCQUFBLFdBQUE7QUFBQSxnQkFBQW5HLElBQUF1ZSxLQUFBLEdBQUFwWSxFQUFBO0FBQUEsZ0JBQUFxYSxJQUFBO0FBQUEsa0JBQUE5aEIsS0FBQSxHQUFBLElBQUEsRUFBQTtBQUFBLGNBQUFzQixLQUFBLEdBQUF1ZSxJQUFBLFdBQUE3ZixFQUFBO1lBQUE7QUFBQSxjQUFBc0IsS0FBQXVlLEdBQUEsTUFBQSxNQUFBLFNBQUE7QUFBQSxtQkFBQSxHQUFBLE1BQUF2ZSxFQUFBO1VBQUE7UUFBQTtBQ0ZqQixZQU1NMmdFLEtBQUFBLFNBQU9DLElBQUFBO0FBQUFwb0IsVUFBQUEsSUFBQW1vQixJQUFBQyxFQUFBQTtBQUFBLGNBQUEzbUMsS0FBQTRnQixHQUFBOGxCLEVBQUFBO0FBU1gsbUJBQUFBLEdBQ0UxakUsSUFDQXNwQyxJQUNBNGEsSUFDQUMsSUFDQUMsSUFDQTFXLElBQUFBO0FBQ0EsZ0JBQUE1YTtBQUt5QixtQkFMekJoYixHQUFBQSxNQUFBNHJELEVBQUFBLElBQ0E1d0MsS0FBQWtLLEdBQUEvbkMsS0FBQUEsTUFBTStLLElBQVNzcEMsSUFBTTRhLElBQVdDLElBQVdDLElBQWUxVyxFQUFBQSxHQUVyRDZxQixZQUFBQSxNQUNMemxDLEdBQUs4d0MsaUJBQWlCLENBQUEsR0FDdEI5d0MsR0FBSyt3QyxpQkFBaUIsQ0FBQSxHQUFHL3dDO1VBQzNCO0FBMkRDLGlCQXpERDlRLEdBQUEwaEQsSUFBQSxDQUFBLEVBQUEvb0UsS0FBQSxxQkFBQW5ELE9BT0EsU0FBa0Jzc0UsSUFBQUE7QUFBZ0IsZ0JBQUE1ckMsS0FBQS9qQyxNQUMxQjR2RSxLQUFlNXZFLEtBQUttMUMsS0FBSy9JLE1BQU11akMsRUFBQUE7QUFDckMsZ0JBQUEsV0FBSTN2RSxLQUFLeXZFLGVBQWVFLEVBQUFBO0FBQ3RCLG9CQUFNLElBQUkzbkMsTUFDUixtQkFBbUIybkMsS0FBaUIseUJBQUE7QUFHeEMsZ0JBQUEsQ0FBS0MsR0FBYXhMO0FBQ2hCLG9CQUFNLElBQUlwOEIsTUFBTSxtQkFBbUIybkMsS0FBaUIsbUJBQUE7QUFBQSxtQkFJL0MzdkUsS0FBS3l2RSxlQUFlRSxFQUFBQSxHQUMzQmpnRSxHQUFRa2dFLEdBQWFuakMsT0FBTyxTQUFDN0IsSUFBQUE7QUFBQUEscUJBQ3BCN0csR0FBSzJyQyxlQUFlOWtDLEdBQUt2akMsRUFBQUE7WUFDbEMsQ0FBQSxHQUdBcUksR0FBUWtnRSxHQUFhSCxnQkFBZ0IsU0FBQzkxQyxJQUFNZzRCLElBQUFBO0FBQzFDNXRCLGNBQUFBLEdBQUswckMsZUFBZTlkLEVBQUFBLElBQVVoNEI7WUFDaEMsQ0FBQSxHQUNBaTJDLEdBQWFILGlCQUFpQixDQUFBLEdBRTlCLy9ELEdBQVFrZ0UsR0FBYUYsZ0JBQWdCLFNBQUM5a0MsSUFBTTAzQixJQUFBQTtBQUMxQ3YrQixjQUFBQSxHQUFLMnJDLGVBQWVwTixFQUFBQSxJQUFVMTNCO1lBQ2hDLENBQUEsR0FDQWdsQyxHQUFhRixpQkFBaUIsQ0FBQSxHQUc5QmhnRSxHQUFRa2dFLEdBQWFuakMsT0FBTyxTQUFDb2pDLElBQUFBO0FBQzNCbmdFLGlCQUFRcTBCLEdBQUswSSxPQUFPLFNBQUNxakMsSUFBQUE7QUFBc0Isb0JBQUFsaEQsSUFBQWdoQixJQUduQ2hpQyxLQUFRMitCLEdBQUEzZCxLQUFBa2hELEdBQWtCQywwQkFBQUEsRUFBMEJqdkUsS0FBQTh0QixJQUN4RGloRCxHQUFZeG9FLEVBQUFBO0FBQUFBLHVCQUVWdUcsT0FFSjhCLEdBQVFtZ0UsR0FBWUUsNEJBQTRCLFNBQUNDLElBQUFBO0FBQy9DRixrQkFBQUEsR0FBa0JDLDJCQUEyQmxwRSxLQUFLbXBFLEVBQUFBLEdBR2xEanNDLEdBQUtvUixLQUFLMUksTUFBTXVqQyxFQUFBQSxFQUFPQyxtQkFBbUJILEdBQWtCem9FO2dCQUM5RCxDQUFBLEdBR0F5bkMsR0FBQWMsS0FBQWtnQyxHQUFrQkMsMEJBQUFBLEVBQTBCanZFLEtBQUE4dUMsSUFBUWhpQyxJQUFPLENBQUE7Y0FDN0QsQ0FBQTtZQUNGLENBQUEsR0FDQWdpRSxHQUFhbmpDLFFBQVEsQ0FBQTtVQUN2QixFQUFBLENBQUEsQ0FBQSxHQUFDOGlDO1FBQUEsRUFqRm1CemYsRUFBQUEsR0M2RmhCb2dCLEtBQWEsV0FBQTtBQUlqQixtQkFBQUEsR0FBWS82QixJQUFBQTtBQUFNLGdCQUFBeFcsS0FBQTMrQjtBQUFBMmpCLGVBQUFBLE1BQUF1c0QsRUFBQUEsR0FDaEJsd0UsS0FBS20xQyxPQUFPQSxJQUNabjFDLEtBQUttd0UsaUJBQWlCLENBQUEsR0FDdEJud0UsS0FBS293RSxpQkFBaUIsQ0FBQSxHQUV0QnB3RSxLQUFLNkwsVUFBVSxDQUFBLEdBQ2Y3TCxLQUFLdTVDLGlCQUFpQixDQUFBLEdBQ3RCRSxHQUFjejVDLEtBQUs2TCxTQUFTN0wsS0FBS3U1QyxjQUFBQSxHQUVqQ3Y1QyxLQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsY0FBYyxXQUFBO0FBQ2pDd3BCLGNBQUFBLEdBQUt3eEMsaUJBQWlCLENBQUEsR0FDdEJ4eEMsR0FBS3l4QyxpQkFBaUIsQ0FBQTtZQUN4QixDQUFBO1VBQ0Y7QUFxNkNDLGlCQW42Q0R2aUQsR0FBQXFpRCxJQUFBLENBQUEsRUFBQTFwRSxLQUFBLG9CQUFBbkQsT0FLQSxTQUFpQmd0RSxJQUFTeGtFLElBQUFBO0FBQUFBLHVCQUNwQndrRSxLQUNGQSxLQUFVcndFLEtBQUtzd0UsWUFBQUEsSUFDYSxhQUFuQnBqRCxHQUFPbWpELEVBQUFBLE1BQ2hCeGtFLEtBQVU3TCxLQUFLdXdFLGNBQWNGLEVBQUFBLEdBQzdCQSxLQUFVcndFLEtBQUtzd0UsWUFBQUE7QUFJakIscUJBRE1FLEtBQWlCLENBQUEsR0FDZDVoRSxLQUFJLEdBQUdBLEtBQUk1TyxLQUFLbTFDLEtBQUsyZixZQUFZcHdELFFBQVFrSyxNQUFLO0FBQ3JELGtCQUFNK3FCLEtBQU8zNUIsS0FBS20xQyxLQUFLL0ksTUFBTXBzQyxLQUFLbTFDLEtBQUsyZixZQUFZbG1ELEVBQUFBLENBQUFBO0FBQy9DK3FCLGNBQUFBLEdBQUs4UyxNQUFNL25DLFVBQVUyckUsTUFDdkJHLEdBQWUzcEUsS0FBSzh5QixHQUFLdHlCLEVBQUFBO1lBRTdCO0FBRUEscUJBQVN1SCxLQUFJLEdBQUdBLEtBQUk0aEUsR0FBZTlyRSxRQUFRa0s7QUFDekM1TyxtQkFBS3l3RSxvQkFBb0JELEdBQWU1aEUsRUFBQUEsR0FBSS9DLElBQUFBLElBQVM7QUFHdkQ3TCxpQkFBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLGNBQUE7VUFDekIsRUFBQSxHQUVBLEVBQUF2UCxLQUFBLFdBQUFuRCxPQU1BLFdBQUE7QUFBMEMsZ0JBQUEwZ0MsS0FBQS9qQyxNQUFsQzZMLEtBQU81SyxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsSUFBQUEsVUFBQSxDQUFBLElBQUcsQ0FBQSxHQUFJeXZFLEtBQUFBLEVBQVd6dkUsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLE1BQUFBLFVBQUEsQ0FBQTtBQUMvQixnQkFBQSxXQUFJNEssR0FBUThrRTtBQUNWLG9CQUFNLElBQUkzb0MsTUFDUixnRkFBQTtBQUtKbjhCLFlBQUFBLEtBQVU3TCxLQUFLdXdFLGNBQWMxa0UsRUFBQUE7QUFFN0IsZ0JBQU0ra0UsS0FBZ0IsQ0FBQSxHQUNoQkMsS0FBZ0IsQ0FBQTtBQUd0Qm5oRSxlQUFRMVAsS0FBS20xQyxLQUFLL0ksT0FBTyxTQUFDelMsSUFBTWc0QixJQUFBQTtBQUMxQmg0QixjQUFBQSxHQUFLOXRCLFdBQUFBLFNBQVdBLEdBQVE4a0UsY0FBY2gzQyxHQUFLOXRCLE9BQUFBLE1BQzdDK2tFLEdBQWNqZixFQUFBQSxJQUFVaDRCLElBR3hCanFCLEdBQVFpcUIsR0FBSzhTLE9BQU8sU0FBQzdCLElBQUFBO0FBQUFBLDJCQUNmN0csR0FBS3FzQyxlQUFleGxDLEdBQUt2akMsRUFBQUEsTUFDM0J3cEUsR0FBY2ptQyxHQUFLdmpDLEVBQUFBLElBQU11akM7Y0FFN0IsQ0FBQTtZQUVKLENBQUEsR0FFQTVxQyxLQUFLOHdFLFNBQVNGLElBQWVDLElBQWVobEUsSUFBUzZrRSxFQUFBQTtVQUN2RCxFQUFBLEdBRUEsRUFBQWxxRSxLQUFBLHNCQUFBbkQsT0FPQSxTQUFtQjB0RSxJQUFXbGxFLElBQUFBO0FBQTZCLGdCQUFBeTRCLEtBQUF0a0MsTUFBcEIwd0UsS0FBQUEsRUFBV3p2RSxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsTUFBQUEsVUFBQSxDQUFBO0FBQ2hENEssWUFBQUEsS0FBVTdMLEtBQUt1d0UsY0FBYzFrRSxFQUFBQTtBQUs3QixxQkFGSSsrQixJQUFNNkIsSUFBT3VrQyxJQUZYQyxLQUFXLENBQUEsR0FDWEMsS0FBWSxDQUFBLEdBRWxCdnRCLEtBQUFBLFdBQUFBO0FBRUUsa0JBQU1pdEIsS0FBZ0IsQ0FBQSxHQUNoQkMsS0FBZ0IsQ0FBQSxHQUNoQmxmLEtBQVNydEIsR0FBSzZRLEtBQUsyZixZQUFZbG1ELEVBQUFBLEdBQy9CK3FCLEtBQU8ySyxHQUFLNlEsS0FBSy9JLE1BQU11bEIsRUFBQUE7QUFHN0Isa0JBQUEsV0FBSXVmLEdBQVV2ZixFQUFBQSxHQUF1QjtBQUNuQ3FmLGdCQUFBQSxLQUFvQixHQUNwQnZrQyxLQUFRLENBQUE7QUFDUix5QkFBU3o4QixLQUFJLEdBQUdBLEtBQUkycEIsR0FBSzhTLE1BQU0vbkMsUUFBUXNMO0FBQ3JDNDZCLGtCQUFBQSxLQUFPalIsR0FBSzhTLE1BQU16OEIsRUFBQUEsR0FBQUEsV0FDZHMwQixHQUFLOHJDLGVBQWV4bEMsR0FBS3ZqQyxFQUFBQSxNQUN2QnVqQyxHQUFLNnFCLFNBQVM3cUIsR0FBSzhxQixVQUNyQnNiLE1BRUZ2a0MsR0FBTTVsQyxLQUFLK2pDLEVBQUFBO0FBS2Ysb0JBQUlvbUMsT0FBc0JELElBQVc7QUFjbkMsMkJBYk1JLEtBQXFCLFNBQVV4M0MsSUFBQUE7QUFDbkMsd0JBQUEsV0FDRTl0QixHQUFROGtFLGlCQUNrQixTQUExQjlrRSxHQUFROGtFO0FBRVIsNkJBQUE7QUFHRix3QkFBTXRCLEtBQWdCSCxHQUFZa0MsYUFBYXozQyxFQUFBQTtBQUMvQywyQkFBTzl0QixHQUFROGtFLGNBQWN0QixFQUFBQTtrQkFBQUEsR0FHM0JnQyxLQUFBQSxNQUNLcmhFLEtBQUksR0FBR0EsS0FBSXk4QixHQUFNL25DLFFBQVFzTCxNQUFLO0FBQ3JDNDZCLG9CQUFBQSxLQUFPNkIsR0FBTXo4QixFQUFBQTtBQUNiLHdCQUFNc2hFLEtBQWNodEMsR0FBS2l0QyxnQkFBZ0IzbUMsSUFBTSttQixFQUFBQTtBQUUvQyx3QkFBQSxDQUFJd2YsR0FBbUJ4M0MsRUFBQUEsR0FLaEI7QUFFTDAzQyxzQkFBQUEsS0FBQUE7QUFDQTtvQkFDRjtBQVJFUixvQkFBQUEsR0FBY2ptQyxHQUFLdmpDLEVBQUFBLElBQU11akMsSUFDekJnbUMsR0FBY2pmLEVBQUFBLElBQVVoNEIsSUFDeEJpM0MsR0FBY1UsRUFBQUEsSUFBZWh0QyxHQUFLNlEsS0FBSy9JLE1BQU1rbEMsRUFBQUEsR0FDN0NKLEdBQVV2ZixFQUFBQSxJQUFBQTtrQkFNZDtBQUdBLHNCQUNFL0QsR0FBWWdqQixFQUFBQSxFQUFlbHNFLFNBQVMsS0FDcENrcEQsR0FBWWlqQixFQUFBQSxFQUFlbnNFLFNBQVMsS0FBQSxTQUNwQzJzRSxJQUNBO0FBTUEsd0JBZU1HLEtBZmtCLFdBQUE7QUFDdEIsK0JBQVNsa0UsS0FBSSxHQUFHQSxLQUFJMmpFLEdBQVN2c0UsUUFBQUEsRUFBVTRJO0FBRXJDLGlDQUFXb2dFLE1BQUtrRDtBQUNkLDhCQUFBLFdBQUlLLEdBQVMzakUsRUFBQUEsRUFBRzgrQixNQUFNc2hDLEVBQUFBO0FBQ3BCLG1DQUFPdUQsR0FBUzNqRSxFQUFBQTtvQkFBQUEsRUFVSG1rRTtBQUNyQix3QkFBQSxXQUFJRCxJQUE0QjtBQUU5QiwrQkFBVzlELE1BQUtrRDtBQUFBQSxtQ0FDVlksR0FBYXBsQyxNQUFNc2hDLEVBQUFBLE1BQ3JCOEQsR0FBYXBsQyxNQUFNc2hDLEVBQUFBLElBQUtrRCxHQUFjbEQsRUFBQUE7QUFLMUMsK0JBQVdBLE1BQUttRDtBQUFBQSxtQ0FDVlcsR0FBYS9rQyxNQUFNaWhDLEVBQUFBLE1BQ3JCOEQsR0FBYS9rQyxNQUFNaWhDLEVBQUFBLElBQUttRCxHQUFjbkQsRUFBQUE7b0JBRzVDO0FBRUV1RCxzQkFBQUEsR0FBU3BxRSxLQUFLLEVBQUV1bEMsT0FBT3drQyxJQUFlbmtDLE9BQU9va0MsR0FBQUEsQ0FBQUE7a0JBRWpEO2dCQUNGO2NBQ0Y7WUFBQSxHQWxHT2ppRSxLQUFJLEdBQUdBLEtBQUk1TyxLQUFLbTFDLEtBQUsyZixZQUFZcHdELFFBQVFrSztBQUFHKzBDLGNBQUFBLEdBQUFBO0FBcUdyRCxxQkFBUy8wQyxLQUFJLEdBQUdBLEtBQUlxaUUsR0FBU3ZzRSxRQUFRa0s7QUFDbkM1TyxtQkFBSzh3RSxTQUFTRyxHQUFTcmlFLEVBQUFBLEVBQUd3OUIsT0FBTzZrQyxHQUFTcmlFLEVBQUFBLEVBQUc2OUIsT0FBTzVnQyxJQUFBQSxLQUFTO0FBQUEscUJBRzNENmtFLE1BQ0Yxd0UsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLGNBQUE7VUFFM0IsRUFBQSxHQUVBLEVBQUF2UCxLQUFBLG1CQUFBbkQsT0FNQSxTQUFnQndJLElBQUFBO0FBQTZCLGdCQUFwQjZrRSxLQUFBQSxFQUFXenZFLFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUEsQ0FBQSxNQUFBQSxVQUFBLENBQUE7QUFDbENqQixpQkFBSzB4RSxtQkFBbUIsR0FBRzdsRSxJQUFTNmtFLEVBQUFBO1VBQ3RDLEVBQUEsR0FFQSxFQUFBbHFFLEtBQUEsa0JBQUFuRCxPQU1BLFNBQWV3SSxJQUFBQTtBQUE2QixnQkFBcEI2a0UsS0FBQUEsRUFBV3p2RSxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsTUFBQUEsVUFBQSxDQUFBO0FBQ2pDakIsaUJBQUsweEUsbUJBQW1CLEdBQUc3bEUsSUFBUzZrRSxFQUFBQTtVQUN0QyxFQUFBLEdBRUEsRUFBQWxxRSxLQUFBLHVCQUFBbkQsT0FPQSxTQUFvQnN1RCxJQUFROWxELElBQUFBO0FBQTZCLGdCQUFBK2lCLElBQXBCOGhELEtBQUFBLEVBQVd6dkUsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLE1BQUFBLFVBQUEsQ0FBQTtBQUU5QyxnQkFBQSxXQUFJMHdEO0FBQ0Ysb0JBQU0sSUFBSTNwQixNQUFNLDRDQUFBO0FBRWxCLGdCQUFBLFdBQUlob0MsS0FBS20xQyxLQUFLL0ksTUFBTXVsQixFQUFBQTtBQUNsQixvQkFBTSxJQUFJM3BCLE1BQ1IseURBQUE7QUFJSixnQkFBTXJPLEtBQU8zNUIsS0FBS20xQyxLQUFLL0ksTUFBTXVsQixFQUFBQTtBQUFBQSx3QkFDN0I5bEQsS0FBVTdMLEtBQUt1d0UsY0FBYzFrRSxJQUFTOHRCLEVBQUFBLEdBQzFCZzRDLHNCQUFzQnRrRSxNQUNoQ3hCLEdBQVE4bEUsc0JBQXNCdGtFLElBQUlzc0IsR0FBS3RzQixJQUFBQSxXQUVyQ3hCLEdBQVE4bEUsc0JBQXNCdmdFLE1BQ2hDdkYsR0FBUThsRSxzQkFBc0J2Z0UsSUFBSXVvQixHQUFLdm9CLElBQUFBLFdBRXJDdkYsR0FBUThsRSxzQkFBc0J4Z0MsVUFDaEN0bEMsR0FBUThsRSxzQkFBc0J4Z0MsUUFBUSxDQUFBLEdBQ3RDdGxDLEdBQVE4bEUsc0JBQXNCeGdDLE1BQU05akMsSUFBSXNzQixHQUFLOXRCLFFBQVFzbEMsTUFBTTlqQyxHQUMzRHhCLEdBQVE4bEUsc0JBQXNCeGdDLE1BQU0vL0IsSUFBSXVvQixHQUFLOXRCLFFBQVFzbEMsTUFBTS8vQjtBQUc3RCxnQkFBTXcvRCxLQUFnQixDQUFBLEdBQ2hCQyxLQUFnQixDQUFBLEdBQ2hCZSxLQUFlajRDLEdBQUt0eUIsSUFDcEJ3cUUsS0FBc0IzQyxHQUFZa0MsYUFBYXozQyxFQUFBQTtBQUNyRGkzQyxZQUFBQSxHQUFjZ0IsRUFBQUEsSUFBZ0JqNEM7QUFHOUIscUJBQVMvcUIsS0FBSSxHQUFHQSxLQUFJK3FCLEdBQUs4UyxNQUFNL25DLFFBQVFrSyxNQUFLO0FBQzFDLGtCQUFNZzhCLEtBQU9qUixHQUFLOFMsTUFBTTc5QixFQUFBQTtBQUN4QixrQkFBQSxXQUFJNU8sS0FBS293RSxlQUFleGxDLEdBQUt2akMsRUFBQUEsR0FBbUI7QUFDOUMsb0JBQU1pcUUsS0FBY3R4RSxLQUFLdXhFLGdCQUFnQjNtQyxJQUFNZ25DLEVBQUFBO0FBRy9DLG9CQUFBLFdBQUk1eEUsS0FBS213RSxlQUFlbUIsRUFBQUE7QUFDdEIsc0JBQUlBLE9BQWdCTTtBQUNsQix3QkFBQSxXQUFJL2xFLEdBQVE4a0U7QUFDVkUsc0JBQUFBLEdBQWNqbUMsR0FBS3ZqQyxFQUFBQSxJQUFNdWpDLElBQ3pCZ21DLEdBQWNVLEVBQUFBLElBQWV0eEUsS0FBS20xQyxLQUFLL0ksTUFBTWtsQyxFQUFBQTt5QkFDeEM7QUFFTCwwQkFBTVEsS0FBcUI1QyxHQUFZa0MsYUFDckNweEUsS0FBS20xQyxLQUFLL0ksTUFBTWtsQyxFQUFBQSxDQUFBQTtBQUFBQSwrQkFHaEJ6bEUsR0FBUThrRSxjQUNOa0IsSUFDQUMsRUFBQUEsTUFHRmpCLEdBQWNqbUMsR0FBS3ZqQyxFQUFBQSxJQUFNdWpDLElBQ3pCZ21DLEdBQWNVLEVBQUFBLElBQWV0eEUsS0FBS20xQyxLQUFLL0ksTUFBTWtsQyxFQUFBQTtvQkFFakQ7O0FBR0FULG9CQUFBQSxHQUFjam1DLEdBQUt2akMsRUFBQUEsSUFBTXVqQztjQUcvQjtZQUNGO0FBQ0EsZ0JBQU1tbkMsS0FBZXhnQyxHQUFBM2lCLEtBQUFnL0IsR0FBWWdqQixFQUFBQSxDQUFBQSxFQUFjOXZFLEtBQUE4dEIsSUFBSyxTQUFVb2pELElBQUFBO0FBQzVELHFCQUFPcEIsR0FBY29CLEVBQUFBLEVBQVczcUU7WUFDbEMsQ0FBQTtBQUVBLHFCQUFXNHFFLE1BQWdCckI7QUFDekIsa0JBQUt4dUUsT0FBT3hCLFVBQVVILGVBQWVLLEtBQUs4dkUsSUFBZXFCLEVBQUFBO0FBSXpELHlCQURNRCxLQUFZcEIsR0FBY3FCLEVBQUFBLEdBQ3ZCN2dFLEtBQUksR0FBR0EsS0FBSTRnRSxHQUFVdmxDLE1BQU0vbkMsUUFBUTBNLE1BQUs7QUFDL0Msc0JBQU04Z0UsS0FBWUYsR0FBVXZsQyxNQUFNcjdCLEVBQUFBO0FBRWhDbTdCLHFCQUFBd2xDLEVBQUFBLEVBQVlqeEUsS0FBWml4RSxJQUFxQi94RSxLQUFLdXhFLGdCQUFnQlcsSUFBV0YsR0FBVTNxRSxFQUFBQSxDQUFBQSxJQUFBQSxPQUcvRHdwRSxHQUFjcUIsR0FBVTdxRSxFQUFBQSxJQUFNNnFFO2dCQUVsQztBQUVGbHlFLGlCQUFLOHdFLFNBQVNGLElBQWVDLElBQWVobEUsSUFBUzZrRSxFQUFBQTtVQUN2RCxFQUFBLEdBRUEsRUFBQWxxRSxLQUFBLHVCQUFBbkQsT0FVQSxTQUNFdXRFLElBQ0FDLElBQ0FjLElBQ0FRLElBQUFBO0FBUUEscUJBTkl2bkMsSUFBTTBtQyxJQUFhVSxJQUFXdmMsSUFBTUMsSUFBUTBjLElBSTFDQyxLQUFZemtCLEdBQVlnakIsRUFBQUEsR0FDeEIwQixLQUFjLENBQUEsR0FDWDFqRSxLQUFJLEdBQUdBLEtBQUl5akUsR0FBVTN0RSxRQUFRa0ssTUFBSztBQUV6Q29qRSxjQUFBQSxLQUFZcEIsR0FEWlUsS0FBY2UsR0FBVXpqRSxFQUFBQSxDQUFBQTtBQUl4Qix1QkFBU29CLEtBQUksR0FBR0EsS0FBSWdpRSxHQUFVdmxDLE1BQU0vbkMsUUFBUXNMO0FBQzFDNDZCLGdCQUFBQSxLQUFPb25DLEdBQVV2bEMsTUFBTXo4QixFQUFBQSxHQUFBQSxXQUVuQmhRLEtBQUtvd0UsZUFBZXhsQyxHQUFLdmpDLEVBQUFBLE1BRXZCdWpDLEdBQUs2cUIsUUFBUTdxQixHQUFLOHFCLFNBQ3BCbWIsR0FBY2ptQyxHQUFLdmpDLEVBQUFBLElBQU11akMsS0FHckJBLEdBQUs2cUIsUUFBUTZiLE1BRWY3YixLQUFPa2MsR0FBc0J0cUUsSUFFN0IrcUUsS0FEQTFjLEtBQVM5cUIsR0FBSzhxQixXQUdkRCxLQUFPN3FCLEdBQUs2cUIsTUFDWkMsS0FBU2ljLEdBQXNCdHFFLElBQy9CK3FFLEtBQWMzYyxLQUFBQSxXQUtkbWIsR0FBY3dCLEVBQUFBLEtBQ2hCRSxHQUFZenJFLEtBQUssRUFBRStqQyxNQUFNQSxJQUFNOHFCLFFBQVFBLElBQVFELE1BQU1BLEdBQUFBLENBQUFBO1lBSTdEO0FBc0NBLHFCQTVCTThjLEtBQVcsQ0FBQSxHQVFYQyxLQUFhLFNBQVVDLElBQUFBO0FBQzNCLHVCQUFTemlFLEtBQUksR0FBR0EsS0FBSXVpRSxHQUFTN3RFLFFBQVFzTCxNQUFLO0FBQ3hDLG9CQUFNMGlFLEtBQVVILEdBQVN2aUUsRUFBQUEsR0FHbkIyaUUsS0FDSkYsR0FBWS9jLFdBQVdnZCxHQUFRaGQsVUFDL0IrYyxHQUFZaGQsU0FBU2lkLEdBQVFqZCxNQUN6Qm1kLEtBQ0pILEdBQVkvYyxXQUFXZ2QsR0FBUWpkLFFBQy9CZ2QsR0FBWWhkLFNBQVNpZCxHQUFRaGQ7QUFFL0Isb0JBQUlpZCxNQUFvQkM7QUFDdEIseUJBQU9GO2NBRVg7QUFFQSxxQkFBTztZQUFBLEdBR0ExaUUsS0FBSSxHQUFHQSxLQUFJc2lFLEdBQVk1dEUsUUFBUXNMLE1BQUs7QUFDM0Msa0JBQU15aUUsS0FBY0gsR0FBWXRpRSxFQUFBQSxHQUMxQjQ2QixLQUFPNm5DLEdBQVk3bkMsTUFDckI4bkMsS0FBVUYsR0FBV0MsRUFBQUE7QUFFVCx1QkFBWkMsTUFFRkEsS0FBVTF5RSxLQUFLNnlFLHFCQUNiSixHQUFZL2MsUUFDWitjLEdBQVloZCxNQUNaN3FCLElBQ0F1bkMsRUFBQUEsR0FHRkksR0FBUzFyRSxLQUFLNnJFLEVBQUFBLEtBRWRBLEdBQVEzQywyQkFBMkJscEUsS0FBSytqQyxHQUFLdmpDLEVBQUFBLEdBSS9DckgsS0FBS20xQyxLQUFLMUksTUFBTTdCLEdBQUt2akMsRUFBQUEsRUFBSTRvRSxtQkFBbUJ5QyxHQUFRcnJFLElBR3BEckgsS0FBSzh5RSxtQkFBbUJsb0MsRUFBQUEsR0FDeEJBLEdBQUtzVyxXQUFXLEVBQUU4UCxTQUFBQSxNQUFTLENBQUE7WUFDN0I7VUFDRixFQUFBLEdBRUEsRUFBQXhxRCxLQUFBLGlCQUFBbkQsT0FRQSxXQUFBO0FBQTRCLGdCQUFkd0ksS0FBTzVLLFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUEsQ0FBQSxJQUFBQSxVQUFBLENBQUEsSUFBRyxDQUFBO0FBUXRCLG1CQUFBLFdBUEk0SyxHQUFRc21FLDBCQUNWdG1FLEdBQVFzbUUsd0JBQXdCLENBQUEsSUFBQSxXQUU5QnRtRSxHQUFROGxFLDBCQUNWOWxFLEdBQVE4bEUsd0JBQXdCLENBQUEsSUFHM0I5bEU7VUFDVCxFQUFBLEdBRUEsRUFBQXJGLEtBQUEsWUFBQW5ELE9BUUEsU0FBU3V0RSxJQUFlQyxJQUFlaGxFLElBQUFBO0FBQTZCLGdCQUFwQjZrRSxLQUFBQSxFQUFXenZFLFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUEsQ0FBQSxNQUFBQSxVQUFBLENBQUEsR0FFbkQ4eEUsS0FBbUIsQ0FBQTtBQUN6QixxQkFBV3BoQixNQUFVaWY7QUFDZnh1RSxxQkFBT3hCLFVBQVVILGVBQWVLLEtBQUs4dkUsSUFBZWpmLEVBQUFBLEtBQUFBLFdBQ2xEM3hELEtBQUttd0UsZUFBZXhlLEVBQUFBLEtBQ3RCb2hCLEdBQWlCbHNFLEtBQUs4cUQsRUFBQUE7QUFLNUIscUJBQVNya0QsS0FBSSxHQUFHQSxLQUFJeWxFLEdBQWlCcnVFLFFBQUFBLEVBQVU0STtBQUFBQSxxQkFDdENzakUsR0FBY21DLEdBQWlCemxFLEVBQUFBLENBQUFBO0FBSXhDLGdCQUF5QyxLQUFyQ3NnRCxHQUFZZ2pCLEVBQUFBLEVBQWVsc0UsV0FNUSxLQUFyQ2twRCxHQUFZZ2pCLEVBQUFBLEVBQWVsc0UsVUFDNkIsS0FBeERtSCxHQUFROGxFLHNCQUFzQnFCLHlCQUZoQztBQU9BLGtCQUFJckIsS0FBd0JwdkIsR0FBVyxDQUFFLEdBQUUxMkMsR0FBUThsRSxxQkFBQUE7QUFHbkQsa0JBQUEsV0FBSTlsRSxHQUFRb25FLG1CQUFpQztBQUUzQyxvQkFBTUMsS0FBb0IsQ0FBQTtBQUMxQix5QkFBV3ZoQixNQUFVaWY7QUFDbkIsc0JBQUl4dUUsT0FBT3hCLFVBQVVILGVBQWVLLEtBQUs4dkUsSUFBZWpmLEVBQUFBLEdBQVM7QUFDL0Qsd0JBQU0wZCxLQUFnQkgsR0FBWWtDLGFBQWFSLEdBQWNqZixFQUFBQSxDQUFBQTtBQUM3RHVoQixvQkFBQUEsR0FBa0Jyc0UsS0FBS3dvRSxFQUFBQTtrQkFDekI7QUFJRixvQkFBTThELEtBQW9CLENBQUE7QUFDMUIseUJBQVc3USxNQUFVdU87QUFDbkIsc0JBQUl6dUUsT0FBT3hCLFVBQVVILGVBQWVLLEtBQUsrdkUsSUFBZXZPLEVBQUFBLEtBRXpCLG1CQUF6QkEsR0FBT256QixPQUFPLEdBQUcsRUFBQSxHQUF3QjtBQUMzQyx3QkFBTWtnQyxLQUFnQkgsR0FBWWtDLGFBQ2hDUCxHQUFjdk8sRUFBQUEsR0FDZCxNQUFBO0FBRUY2USxvQkFBQUEsR0FBa0J0c0UsS0FBS3dvRSxFQUFBQTtrQkFDekI7QUFTSixvQkFBQSxFQUxBc0MsS0FBd0I5bEUsR0FBUW9uRSxrQkFDOUJ0QixJQUNBdUIsSUFDQUMsRUFBQUE7QUFHQSx3QkFBTSxJQUFJbnJDLE1BQ1IsNERBQUE7Y0FHTjtBQUFBLHlCQUdJMnBDLEdBQXNCdHFFLE9BQ3hCc3FFLEdBQXNCdHFFLEtBQUssYUFBYXluRSxHQUFBQTtBQUUxQyxrQkFBTXNFLEtBQVl6QixHQUFzQnRxRTtBQUFBQSx5QkFFcENzcUUsR0FBc0IxaEMsVUFDeEIwaEMsR0FBc0IxaEMsUUFBUTtBQUloQyxrQkFBSWw1QixLQUFBQTtBQUFNOEgseUJBQ044eUQsR0FBc0J0a0UsTUFDeEIwSixLQUFNL1csS0FBS3F6RSxvQkFBb0J6QyxFQUFBQSxHQUMvQmUsR0FBc0J0a0UsSUFBSTBKLEdBQUkxSixJQUFBQSxXQUU1QnNrRSxHQUFzQnZnRSxNQUFBQSxXQUNwQjJGLE9BQ0ZBLEtBQU0vVyxLQUFLcXpFLG9CQUFvQnpDLEVBQUFBLElBRWpDZSxHQUFzQnZnRSxJQUFJMkYsR0FBSTNGLElBSWhDdWdFLEdBQXNCdHFFLEtBQUsrckU7QUFJM0Isa0JBQU1FLEtBQWN0ekUsS0FBS20xQyxLQUFLNmQsVUFBVUMsV0FDdEMwZSxJQUNBcEMsRUFBQUE7QUFFRitELGNBQUFBLEdBQVk3RCxpQkFBaUJtQixJQUM3QjBDLEdBQVk1RCxpQkFBaUJtQixJQUU3QnlDLEdBQVluQix3QkFBd0J0bUUsR0FBUXNtRSx1QkFHNUNueUUsS0FBS20xQyxLQUFLL0ksTUFBTXVsQyxHQUFzQnRxRSxFQUFBQSxJQUFNaXNFLElBRTVDdHpFLEtBQUt1ekUsY0FDSDNDLElBQ0FDLElBQ0FjLElBQ0E5bEUsR0FBUXNtRSxxQkFBQUEsR0FJVlIsR0FBc0J0cUUsS0FBQUEsUUFBS3dYLFNBR3ZCNnhELE1BQ0Yxd0UsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLGNBQUE7WUE5RnpCO1VBZ0dGLEVBQUEsR0FFQSxFQUFBdlAsS0FBQSxzQkFBQW5ELE9BS0EsU0FBbUJ1bkMsSUFBQUE7QUFBQUEsdUJBQ2I1cUMsS0FBS293RSxlQUFleGxDLEdBQUt2akMsRUFBQUEsTUFDM0JySCxLQUFLb3dFLGVBQWV4bEMsR0FBS3ZqQyxFQUFBQSxJQUFNLEVBQUUycEQsU0FBU3BtQixHQUFLLytCLFFBQVFtbEQsUUFBQUE7VUFFM0QsRUFBQSxHQUVBLEVBQUF4cUQsS0FBQSxnQkFBQW5ELE9BS0EsU0FBYXVuQyxJQUFBQTtBQUNYLGdCQUFNNG9DLEtBQWtCeHpFLEtBQUtvd0UsZUFBZXhsQyxHQUFLdmpDLEVBQUFBO0FBQUFBLHVCQUM3Q21zRSxPQUNGNW9DLEdBQUtzVyxXQUFXLEVBQUU4UCxTQUFTd2lCLEdBQWdCeGlCLFFBQUFBLENBQUFBLEdBQUFBLE9BQ3BDaHhELEtBQUtvd0UsZUFBZXhsQyxHQUFLdmpDLEVBQUFBO1VBRXBDLEVBQUEsR0FFQSxFQUFBYixLQUFBLGFBQUFuRCxPQU1BLFNBQVVzdUQsSUFBQUE7QUFDUixtQkFBQSxXQUFJM3hELEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUEsSUFBQUEsU0FDWDN4RCxLQUFLbTFDLEtBQUsvSSxNQUFNdWxCLEVBQUFBLEVBQVF5UyxhQUUvQmo4QixRQUFRL25DLE1BQU0sc0JBQUEsR0FBQTtVQUdsQixFQUFBLEdBRUEsRUFBQW9HLEtBQUEsdUJBQUFuRCxPQU9BLFNBQW9CdXRFLElBQUFBO0FBT2xCLHFCQURJajNDLElBTEUwNEMsS0FBWXprQixHQUFZZ2pCLEVBQUFBLEdBQzFCekssS0FBT3lLLEdBQWN5QixHQUFVLENBQUEsQ0FBQSxFQUFJaGxFLEdBQ25DZzVELEtBQU91SyxHQUFjeUIsR0FBVSxDQUFBLENBQUEsRUFBSWhsRSxHQUNuQys0RCxLQUFPd0ssR0FBY3lCLEdBQVUsQ0FBQSxDQUFBLEVBQUlqaEUsR0FDbkNrMUQsS0FBT3NLLEdBQWN5QixHQUFVLENBQUEsQ0FBQSxFQUFJamhFLEdBRTlCeEMsS0FBSSxHQUFHQSxLQUFJeWpFLEdBQVUzdEUsUUFBUWtLO0FBRXBDdTNELGNBQUFBLE1BREF4c0MsS0FBT2kzQyxHQUFjeUIsR0FBVXpqRSxFQUFBQSxDQUFBQSxHQUNuQnZCLElBQUk4NEQsS0FBT3hzQyxHQUFLdHNCLElBQUk4NEQsSUFDaENFLEtBQU8xc0MsR0FBS3RzQixJQUFJZzVELEtBQU8xc0MsR0FBS3RzQixJQUFJZzVELElBQ2hDRCxLQUFPenNDLEdBQUt2b0IsSUFBSWcxRCxLQUFPenNDLEdBQUt2b0IsSUFBSWcxRCxJQUNoQ0UsS0FBTzNzQyxHQUFLdm9CLElBQUlrMUQsS0FBTzNzQyxHQUFLdm9CLElBQUlrMUQ7QUFHbEMsbUJBQU8sRUFBRWo1RCxHQUFHLE9BQU84NEQsS0FBT0UsS0FBT2oxRCxHQUFHLE9BQU9nMUQsS0FBT0UsSUFBQUE7VUFDcEQsRUFBQSxHQUVBLEVBQUE5L0QsS0FBQSxlQUFBbkQsT0FPQSxTQUFZb3dFLElBQWU1bkUsSUFBQUE7QUFBNkIsZ0JBQXBCNmtFLEtBQUFBLEVBQVd6dkUsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLE1BQUFBLFVBQUEsQ0FBQTtBQUU3QyxnQkFBQSxXQUFJd3lFO0FBQ0Ysb0JBQU0sSUFBSXpyQyxNQUFNLDJDQUFBO0FBR2xCLGdCQUFNc3JDLEtBQWN0ekUsS0FBS20xQyxLQUFLL0ksTUFBTXFuQyxFQUFBQTtBQUVwQyxnQkFBQSxXQUFJSDtBQUNGLG9CQUFNLElBQUl0ckMsTUFDUiwyREFBQTtBQUdKLGdCQUFBLFNBQ0VzckMsR0FBWWxQLGFBQUFBLFdBQ1prUCxHQUFZN0Qsa0JBQUFBLFdBQ1o2RCxHQUFZNUQ7QUFFWixvQkFBTSxJQUFJMW5DLE1BQU0sY0FBY3lyQyxLQUFnQiwwQkFBQTtBQUloRCxnQkFBTXhyQyxLQUFRam9DLEtBQUswekUsU0FBU0QsRUFBQUEsR0FDdEJFLEtBQWNwbkMsR0FBQXRFLEVBQUFBLEVBQUtubkMsS0FBTG1uQyxJQUFjd3JDLEVBQUFBLElBQWlCO0FBQ25ELGdCQUFJRSxNQUFlLEdBQUc7QUFFcEIsa0JBQU1DLEtBQXNCM3JDLEdBQU0wckMsRUFBQUE7QUFZbEMscUJBWDBCM3pFLEtBQUttMUMsS0FBSy9JLE1BQU13bkMsRUFBQUEsRUFHeEJDLGtCQUFrQkosRUFBQUEsR0FBQUEsT0FHN0J6ekUsS0FBS20xQyxLQUFLL0ksTUFBTXFuQyxFQUFBQSxHQUFBQSxNQUFBQSxTQUNuQi9DLE1BQ0Yxd0UsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLGNBQUE7WUFJM0I7QUFHQSxnQkFBTTA1RCxLQUFpQjZELEdBQVk3RCxnQkFDN0JDLEtBQWlCNEQsR0FBWTVEO0FBR25DLGdCQUFBLFdBQ0U3akUsTUFBQUEsV0FDQUEsR0FBUWlvRSxtQkFDMkIsY0FBQSxPQUE1QmpvRSxHQUFRaW9FLGlCQUNmO0FBQ0Esa0JBQU01RyxLQUFZLENBQUEsR0FDWjZHLEtBQWtCLEVBQUUxbUUsR0FBR2ltRSxHQUFZam1FLEdBQUcrRCxHQUFHa2lFLEdBQVlsaUUsRUFBQUE7QUFDM0QsdUJBQVd1Z0QsTUFBVThkO0FBQ25CLG9CQUFJcnRFLE9BQU94QixVQUFVSCxlQUFlSyxLQUFLMnVFLElBQWdCOWQsRUFBQUEsR0FBUztBQUNoRSxzQkFBTTJWLEtBQWdCdG5FLEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUE7QUFDdEN1YixrQkFBQUEsR0FBVXZiLEVBQUFBLElBQVUsRUFBRXRrRCxHQUFHaTZELEdBQWNqNkQsR0FBRytELEdBQUdrMkQsR0FBY2wyRCxFQUFBQTtnQkFDN0Q7QUFFRixrQkFBTTRpRSxLQUFlbm9FLEdBQVFpb0UsZ0JBQWdCQyxJQUFpQjdHLEVBQUFBO0FBRTlELHVCQUFXdmIsTUFBVThkO0FBQ25CLG9CQUFJcnRFLE9BQU94QixVQUFVSCxlQUFlSyxLQUFLMnVFLElBQWdCOWQsRUFBQUEsR0FBUztBQUNoRSxzQkFBTTJWLEtBQWdCdG5FLEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUE7QUFBQUEsNkJBQ2xDcWlCLEdBQWFyaUIsRUFBQUEsTUFDZjJWLEdBQWNqNkQsSUFBQUEsV0FDWjJtRSxHQUFhcmlCLEVBQUFBLEVBQVF0a0QsSUFDakJpbUUsR0FBWWptRSxJQUNaMm1FLEdBQWFyaUIsRUFBQUEsRUFBUXRrRCxHQUMzQmk2RCxHQUFjbDJELElBQUFBLFdBQ1o0aUUsR0FBYXJpQixFQUFBQSxFQUFRdmdELElBQ2pCa2lFLEdBQVlsaUUsSUFDWjRpRSxHQUFhcmlCLEVBQUFBLEVBQVF2Z0Q7Z0JBRS9CO1lBRUo7QUFFRTFCLGlCQUFRKy9ELElBQWdCLFNBQVVuSSxJQUFBQTtBQUFBQSwwQkFFNUJBLEdBQWN6N0QsUUFBUXNsQyxNQUFNOWpDLE1BQzlCaTZELEdBQWNqNkQsSUFBSWltRSxHQUFZam1FLElBQUFBLFVBRTVCaTZELEdBQWN6N0QsUUFBUXNsQyxNQUFNLy9CLE1BQzlCazJELEdBQWNsMkQsSUFBSWtpRSxHQUFZbGlFO2NBRWxDLENBQUE7QUFJRixxQkFBV3VnRCxNQUFVOGQ7QUFDbkIsa0JBQUlydEUsT0FBT3hCLFVBQVVILGVBQWVLLEtBQUsydUUsSUFBZ0I5ZCxFQUFBQSxHQUFTO0FBQ2hFLG9CQUFNMlYsS0FBZ0J0bkUsS0FBS20xQyxLQUFLL0ksTUFBTXVsQixFQUFBQTtBQUd0QzJWLGdCQUFBQSxHQUFjNkYsS0FBS21HLEdBQVluRyxJQUMvQjdGLEdBQWM4RixLQUFLa0csR0FBWWxHLElBRS9COUYsR0FBY3BtQixXQUFXLEVBQUU4UCxTQUFBQSxLQUFTLENBQUEsR0FBQSxPQUU3Qmh4RCxLQUFLbXdFLGVBQWV4ZSxFQUFBQTtjQUM3QjtBQUtGLHFCQURNc2lCLEtBQW1CLENBQUEsR0FDaEJybEUsS0FBSSxHQUFHQSxLQUFJMGtFLEdBQVk3bUMsTUFBTS9uQyxRQUFRa0s7QUFDNUNxbEUsY0FBQUEsR0FBaUJwdEUsS0FBS3lzRSxHQUFZN21DLE1BQU03OUIsRUFBQUEsQ0FBQUE7QUFJMUMscUJBQVNBLEtBQUksR0FBR0EsS0FBSXFsRSxHQUFpQnZ2RSxRQUFRa0ssTUFBSztBQUtoRCx1QkFKTWc4QixLQUFPcXBDLEdBQWlCcmxFLEVBQUFBLEdBQ3hCd2pFLEtBQWNweUUsS0FBS3V4RSxnQkFBZ0IzbUMsSUFBTTZvQyxFQUFBQSxHQUN6Q1MsS0FBWWwwRSxLQUFLbXdFLGVBQWVpQyxFQUFBQSxHQUU3QnBpRSxLQUFJLEdBQUdBLEtBQUk0NkIsR0FBS21sQywyQkFBMkJyckUsUUFBUXNMLE1BQUs7QUFDL0Qsb0JBQU1ta0UsS0FBYXZwQyxHQUFLbWxDLDJCQUEyQi8vRCxFQUFBQSxHQUM3Q29rRSxLQUFlcDBFLEtBQUttMUMsS0FBSzFJLE1BQU0wbkMsRUFBQUE7QUFDckMsb0JBQUEsV0FBSUM7QUFHSixzQkFBQSxXQUFJRixJQUF5QjtBQUUzQix3QkFBTUcsS0FBZXIwRSxLQUFLbTFDLEtBQUsvSSxNQUFNOG5DLEdBQVVkLFNBQUFBO0FBQy9DaUIsb0JBQUFBLEdBQWEzRSxlQUFlMEUsR0FBYS9zRSxFQUFBQSxJQUFNK3NFLElBQUFBLE9BR3hDMUUsR0FBZTBFLEdBQWEvc0UsRUFBQUE7QUFHbkMsd0JBQUlxdUQsS0FBUzBlLEdBQWExZSxRQUN0QkQsS0FBTzJlLEdBQWEzZTtBQUNwQjJlLG9CQUFBQSxHQUFhM2UsUUFBUTJjLEtBQ3ZCM2MsS0FBT3llLEdBQVVkLFlBRWpCMWQsS0FBU3dlLEdBQVVkLFdBSXJCcHpFLEtBQUs2eUUscUJBQ0huZCxJQUNBRCxJQUNBMmUsSUFDQUMsR0FBYWxDLHVCQUNiLEVBQUVwaEIsUUFBQUEsT0FBZUMsU0FBQUEsS0FBUyxDQUFBO2tCQUU5QjtBQUNFaHhELHlCQUFLczBFLGFBQWFGLEVBQUFBO2NBRXRCO0FBRUF4cEMsY0FBQUEsR0FBSzVELE9BQUFBO1lBQ1A7QUFHQSxxQkFBV3M3QixNQUFVb047QUFDZnR0RSxxQkFBT3hCLFVBQVVILGVBQWVLLEtBQUs0dUUsSUFBZ0JwTixFQUFBQSxLQUN2RHRpRSxLQUFLczBFLGFBQWE1RSxHQUFlcE4sRUFBQUEsQ0FBQUE7QUFBQUEsbUJBSzlCdGlFLEtBQUttMUMsS0FBSy9JLE1BQU1xbkMsRUFBQUEsR0FBQUEsU0FFbkIvQyxNQUNGMXdFLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxjQUFBO1VBRTNCLEVBQUEsR0FFQSxFQUFBdlAsS0FBQSxxQkFBQW5ELE9BS0EsU0FBa0IrdkUsSUFBQUE7QUFDaEIsZ0JBQU1tQixLQUFhLENBQUE7QUFDbkIsZ0JBQUEsU0FBSXYwRSxLQUFLb2tFLFVBQVVnUCxFQUFBQSxHQUFxQjtBQUN0QyxrQkFBTTNELEtBQWlCenZFLEtBQUttMUMsS0FBSy9JLE1BQU1nbkMsRUFBQUEsRUFBVzNEO0FBQ2xELHVCQUFXOWQsTUFBVThkO0FBQ2ZydEUsdUJBQU94QixVQUFVSCxlQUFlSyxLQUFLMnVFLElBQWdCOWQsRUFBQUEsS0FDdkQ0aUIsR0FBVzF0RSxLQUFLN0csS0FBS20xQyxLQUFLL0ksTUFBTXVsQixFQUFBQSxFQUFRdHFELEVBQUFBO1lBRzlDO0FBRUEsbUJBQU9rdEU7VUFDVCxFQUFBLEdBRUEsRUFBQS90RSxLQUFBLFlBQUFuRCxPQVFBLFNBQVNzdUQsSUFBQUE7QUFNUCxxQkFGSWg0QixJQUhFc08sS0FBUSxDQUFBLEdBRVZ1c0MsS0FBVSxHQUFBLFdBR1B4MEUsS0FBS213RSxlQUFleGUsRUFBQUEsS0FBeUI2aUIsS0FKeEMsT0FJdUQ7QUFFakUsa0JBQUEsWUFEQTc2QyxLQUFPMzVCLEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUE7QUFDQyx1QkFBTyxDQUFBO0FBQy9CMXBCLGNBQUFBLEdBQU1waEMsS0FBSzh5QixHQUFLdHlCLEVBQUFBLEdBRWhCc3FELEtBQVMzeEQsS0FBS213RSxlQUFleGUsRUFBQUEsRUFBUXloQixXQUNyQ29CO1lBQ0Y7QUFHQSxtQkFBQSxZQURBNzZDLEtBQU8zNUIsS0FBS20xQyxLQUFLL0ksTUFBTXVsQixFQUFBQSxLQUNRLENBQUEsS0FDL0IxcEIsR0FBTXBoQyxLQUFLOHlCLEdBQUt0eUIsRUFBQUEsR0FFaEJvdEUsR0FBQXhzQyxFQUFBQSxFQUFLbm5DLEtBQUxtbkMsRUFBQUEsR0FDT0E7VUFDVCxFQUFBLEdBRUEsRUFBQXpoQyxLQUFBLHVCQUFBbkQsT0FNQSxTQUFvQnF4RSxJQUFpQjNpQixJQUFBQTtBQUNuQyxnQkFBQSxXQUFJMmlCO0FBQ0Ysb0JBQU0sSUFBSTFzQyxNQUFNLHFEQUFBO0FBRWxCLGdCQUFBLFdBQUkrcEI7QUFDRixvQkFBTSxJQUFJL3BCLE1BQU0sZ0RBQUE7QUFFbEIsZ0JBQUEsV0FBSWhvQyxLQUFLbTFDLEtBQUsvSSxNQUFNc29DLEVBQUFBO0FBQ2xCLG9CQUFNLElBQUkxc0MsTUFDUixxRUFBQTtBQUlKaG9DLGlCQUFLbTFDLEtBQUsvSSxNQUFNc29DLEVBQUFBLEVBQWlCeHpCLFdBQVc2USxFQUFBQSxHQUM1Qy94RCxLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssY0FBQTtVQUN6QixFQUFBLEdBRUEsRUFBQXZQLEtBQUEsY0FBQW5ELE9BTUEsU0FBV3N4RSxJQUFhNWlCLElBQUFBO0FBQ3RCLGdCQUFBLFdBQUk0aUI7QUFDRixvQkFBTSxJQUFJM3NDLE1BQU0sd0NBQUE7QUFFbEIsZ0JBQUEsV0FBSStwQjtBQUNGLG9CQUFNLElBQUkvcEIsTUFBTSx1Q0FBQTtBQUVsQixnQkFBQSxXQUFJaG9DLEtBQUttMUMsS0FBSzFJLE1BQU1rb0MsRUFBQUE7QUFDbEIsb0JBQU0sSUFBSTNzQyxNQUFNLHdEQUFBO0FBSWxCLHFCQURNNHNDLEtBQWE1MEUsS0FBSzYwRSxrQkFBa0JGLEVBQUFBLEdBQ2pDL2xFLEtBQUksR0FBR0EsS0FBSWdtRSxHQUFXbHdFLFFBQVFrSyxNQUFLO0FBQzdCNU8sbUJBQUttMUMsS0FBSzFJLE1BQU1tb0MsR0FBV2htRSxFQUFBQSxDQUFBQSxFQUNuQ3N5QyxXQUFXNlEsRUFBQUE7WUFDbEI7QUFDQS94RCxpQkFBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLGNBQUE7VUFDekIsRUFBQSxHQUVBLEVBQUF2UCxLQUFBLHFCQUFBbkQsT0FNQSxTQUFrQmkvRCxJQUFBQTtBQUtoQixxQkFKTXI2QixLQUFRLENBQUEsR0FFVnVzQyxLQUFVLEdBQUEsV0FHWmxTLE1BQUFBLFdBQ0F0aUUsS0FBS20xQyxLQUFLMUksTUFBTTYxQixFQUFBQSxLQUNoQmtTLEtBTlU7QUFRVnZzQyxjQUFBQSxHQUFNcGhDLEtBQUs3RyxLQUFLbTFDLEtBQUsxSSxNQUFNNjFCLEVBQUFBLEVBQVFqN0QsRUFBQUEsR0FDbkNpN0QsS0FBU3RpRSxLQUFLbTFDLEtBQUsxSSxNQUFNNjFCLEVBQUFBLEVBQVEyTixrQkFDakN1RTtBQUdGLG1CQURBQyxHQUFBeHNDLEVBQUFBLEVBQUtubkMsS0FBTG1uQyxFQUFBQSxHQUNPQTtVQUNULEVBQUEsR0FFQSxFQUFBemhDLEtBQUEsZUFBQW5ELE9BUUEsU0FBWXl4RSxJQUFBQTtBQUVWLG1CQUFPOTBFLEtBQUsrMEUsYUFBYUQsRUFBQUEsRUFBaUIsQ0FBQTtVQUM1QyxFQUFBLEdBRUEsRUFBQXR1RSxLQUFBLGdCQUFBbkQsT0FNQSxTQUFheXhFLElBQUFBO0FBT1gscUJBTk1FLEtBQWMsQ0FBQ0YsRUFBQUEsR0FDZkcsS0FBVSxDQUFBLEdBQ1ZDLEtBQVcsQ0FBQSxHQUViVixLQUFVLEdBRVBRLEdBQVl0d0UsU0FBUyxLQUFLOHZFLEtBSHJCLE9BR29DO0FBQzlDLGtCQUFNVyxLQUFTSCxHQUFZM2xDLElBQUFBO0FBQzNCLGtCQUFBLFdBQUk4bEMsSUFBSjtBQUNBLG9CQUFNQyxLQUFXcDFFLEtBQUttMUMsS0FBSzFJLE1BQU0wb0MsRUFBQUE7QUFDakMsb0JBQUEsV0FBSUMsSUFBSjtBQUNBWixrQkFBQUE7QUFFQSxzQkFBTWEsS0FBZUQsR0FBU3JGO0FBQzlCLHNCQUFBLFdBQUlzRjtBQUVGSCxvQkFBQUEsR0FBU3J1RSxLQUFLc3VFLEVBQUFBOztBQUdkLDZCQUFTdm1FLEtBQUksR0FBR0EsS0FBSXltRSxHQUFhM3dFLFFBQUFBLEVBQVVrSyxJQUFHO0FBQzVDLDBCQUFNMG1FLEtBQWNELEdBQWF6bUUsRUFBQUE7QUFBQUEsNkJBSy9CMjlCLEdBQUF5b0MsRUFBQUEsRUFBV2wwRSxLQUFYazBFLElBQW9CSyxFQUFBQSxLQUFBQSxPQUNwQjlvQyxHQUFBMG9DLEVBQUFBLEVBQU9uMEUsS0FBUG0wRSxJQUFnQkksRUFBQUEsS0FLbEJMLEdBQVludUUsS0FBS3l1RSxFQUFBQTtvQkFDbkI7QUFHRkwsa0JBQUFBLEdBQVFwdUUsS0FBS3N1RSxFQUFBQTtnQkF6QmU7Y0FGTztZQTRCckM7QUFFQSxtQkFBT0Q7VUFDVCxFQUFBLEdBRUEsRUFBQTF1RSxLQUFBLG1CQUFBbkQsT0FRQSxTQUFnQnVuQyxJQUFNK21CLElBQUFBO0FBQ3BCLG1CQUFJL21CLEdBQUs2cUIsUUFBUTlELEtBQ1IvbUIsR0FBSzZxQixRQUNIN3FCLEdBQUs4cUIsUUFDUDlxQixHQUFLOHFCO1VBSWhCLEVBQUEsR0FFQSxFQUFBbHZELEtBQUEsZUFBQW5ELE9BT0EsV0FBQTtBQU1FLHFCQUxJa3lFLEtBQVUsR0FDVkMsS0FBaUIsR0FDakJDLEtBQWEsR0FDYkMsS0FBYSxHQUVSOW1FLEtBQUksR0FBR0EsS0FBSTVPLEtBQUttMUMsS0FBSzJmLFlBQVlwd0QsUUFBUWtLLE1BQUs7QUFDckQsa0JBQU0rcUIsS0FBTzM1QixLQUFLbTFDLEtBQUsvSSxNQUFNcHNDLEtBQUttMUMsS0FBSzJmLFlBQVlsbUQsRUFBQUEsQ0FBQUE7QUFDL0MrcUIsY0FBQUEsR0FBSzhTLE1BQU0vbkMsU0FBU2d4RSxPQUN0QkEsS0FBYS83QyxHQUFLOFMsTUFBTS9uQyxTQUUxQjZ3RSxNQUFXNTdDLEdBQUs4UyxNQUFNL25DLFFBQ3RCOHdFLE1BQWtCNzFFLEtBQUs4NkQsSUFBSTlnQyxHQUFLOFMsTUFBTS9uQyxRQUFRLENBQUEsR0FDOUMrd0UsTUFBYztZQUNoQjtBQUNBRixZQUFBQSxNQUFvQkU7QUFHcEIsZ0JBQU1FLE1BRk5ILE1BQWtDQyxNQUVBOTFFLEtBQUs4NkQsSUFBSThhLElBQVMsQ0FBQSxHQUM5Q0ssS0FBb0JqMkUsS0FBSzJULEtBQUtxaUUsRUFBQUEsR0FFaENFLEtBQWVsMkUsS0FBS3dOLE1BQU1vb0UsS0FBVSxJQUFJSyxFQUFBQTtBQU81QyxtQkFKSUMsS0FBZUgsT0FDakJHLEtBQWVILEtBR1ZHO1VBQ1QsRUFBQSxHQUVBLEVBQUFydkUsS0FBQSx3QkFBQW5ELE9BV0EsU0FDRXF5RCxJQUNBRCxJQUNBcWdCLElBQ0EzRCxJQUNBNEQsSUFBQUE7QUFHQSxnQkFBTTFHLEtBQWdCSCxHQUFZa0MsYUFBYTBFLElBQVUsTUFBQTtBQUV6RHZ6QixlQUFXOHNCLElBQWU4QyxFQUFBQSxHQUcxQjlDLEdBQWMzdUQsT0FBT2cxQyxJQUNyQjJaLEdBQWN2K0MsS0FBSzJrQyxJQUNuQjRaLEdBQWNob0UsS0FBSyxpQkFBaUJ5bkUsR0FBQUEsR0FBQUEsV0FHaENpSCxNQUNGeHpCLEdBQVc4c0IsSUFBZTBHLEVBQUFBO0FBRzVCLGdCQUFNckQsS0FBVTF5RSxLQUFLbTFDLEtBQUs2ZCxVQUFVdG1CLFdBQVcyaUMsRUFBQUE7QUFPL0MsbUJBTkFxRCxHQUFRM0MsNkJBQTZCLENBQUMrRixHQUFTenVFLEVBQUFBLEdBQy9DcXJFLEdBQVFoVSxRQUFBQSxHQUdSMStELEtBQUttMUMsS0FBSzFJLE1BQU1pbUMsR0FBUXJyRSxFQUFBQSxJQUFNcXJFLElBRXZCQTtVQUNULEVBQUEsR0FFQSxFQUFBbHNFLEtBQUEsaUJBQUFuRCxPQVNBLFNBQWMyeUUsSUFBWUMsSUFBWTNDLElBQWFuQixJQUFBQTtBQUNqRCxnQkFBSThELGNBQXNCMVYsSUFBTTtBQUM5QixrQkFBTTMxQixLQUFPcXJDLElBQ1Bqb0UsS0FBTSxDQUFBO0FBQ1pBLGNBQUFBLEdBQUk0OEIsR0FBS3ZqQyxFQUFBQSxJQUFNdWpDLElBQ2ZxckMsS0FBYWpvRTtZQUNmO0FBRUEsZ0JBQUlnb0UsY0FBc0JsbUIsSUFBTTtBQUM5QixrQkFBTW4yQixLQUFPcThDLElBQ1Bob0UsS0FBTSxDQUFBO0FBQ1pBLGNBQUFBLEdBQUkyckIsR0FBS3R5QixFQUFBQSxJQUFNc3lCLElBQ2ZxOEMsS0FBYWhvRTtZQUNmO0FBRUEsZ0JBQUlzbEUsUUFBQUE7QUFDRixvQkFBTSxJQUFJdHJDLE1BQU0sK0NBQUE7QUFrQmxCLHFCQUFXczZCLE1BQUFBLFdBZlA2UCxPQUVGQSxLQUF3Qm1CLEdBQVluQix3QkFLdENueUUsS0FBS2syRSxvQkFDSEYsSUFDQUMsSUFDQTNDLElBQ0FuQixFQUFBQSxHQUltQjhEO0FBQ25CLGtCQUFJN3pFLE9BQU94QixVQUFVSCxlQUFlSyxLQUFLbTFFLElBQVkzVCxFQUFBQSxLQUFBQSxXQUMvQ3RpRSxLQUFLbTFDLEtBQUsxSSxNQUFNNjFCLEVBQUFBLEdBQXVCO0FBQ3pDLG9CQUFNMTNCLEtBQU81cUMsS0FBS20xQyxLQUFLMUksTUFBTTYxQixFQUFBQTtBQUU3QnRpRSxxQkFBSzh5RSxtQkFBbUJsb0MsRUFBQUEsR0FFeEJBLEdBQUtzVyxXQUFXLEVBQUU4UCxTQUFBQSxNQUFTLENBQUE7Y0FDN0I7QUFLSixxQkFBV1csTUFBVXFrQjtBQUNmNXpFLHFCQUFPeEIsVUFBVUgsZUFBZUssS0FBS2sxRSxJQUFZcmtCLEVBQUFBLE1BQ25EM3hELEtBQUttd0UsZUFBZXhlLEVBQUFBLElBQVUsRUFDNUJ5aEIsV0FBV0UsR0FBWWpzRSxJQUN2QnN5QixNQUFNMzVCLEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUEsRUFBQUEsR0FFeEIzeEQsS0FBS20xQyxLQUFLL0ksTUFBTXVsQixFQUFBQSxFQUFRelEsV0FBVyxFQUFFOFAsU0FBQUEsTUFBUyxDQUFBO1VBR3BELEVBQUEsR0FFQSxFQUFBeHFELEtBQUEsMEJBQUFuRCxPQVdBLFNBQXVCc3VELElBQUFBO0FBQ3JCLGdCQUFBLFdBQUlBLElBQUo7QUFDQSxrQkFBTXdrQixLQUFnQm4yRSxLQUFLbXdFLGVBQWV4ZSxFQUFBQTtBQUcxQyxrQkFBQSxXQUFJd2tCLElBQUo7QUFDQSxvQkFBTS9DLEtBQVkrQyxHQUFjL0M7QUFDaEMsb0JBQUEsV0FBSUE7QUFFSix5QkFBT3B6RSxLQUFLbTFDLEtBQUsvSSxNQUFNZ25DLEVBQUFBO2NBSjBCO1lBSlA7VUFTNUMsRUFBQSxHQUVBLEVBQUE1c0UsS0FBQSxXQUFBbkQsT0FVQSxTQUFRbXJCLElBQUt1RixJQUFBQTtBQUNYLGdCQUFNaXZCLEtBQU0sQ0FBQTtBQVFaLG1CQU5BdHpDLEdBQVE4ZSxJQUFLLFNBQUNMLElBQUFBO0FBQ1I0RixjQUFBQSxHQUFTNUYsRUFBQUEsS0FDWDYwQixHQUFJbjhDLEtBQUtzbkIsRUFBQUE7WUFFYixDQUFBLEdBRU82MEI7VUFDVCxFQUFBLEdBRUEsRUFBQXg4QyxLQUFBLGdCQUFBbkQsT0FTQSxXQUFBO0FBQWUsZ0JBQ1RzdUQsSUFEU2lFLEtBQUE1MUQsTUFFUG8yRSxLQUFpQixDQUFBLEdBQ2pCQyxLQUFpQixDQUFBLEdBT2pCQyxLQUFrQixTQUFDdmlELElBQUFBO0FBQ3ZCcmtCLGlCQUFRa21ELEdBQUt6Z0IsS0FBSy9JLE9BQU8sU0FBQ3pTLElBQUFBO0FBQUFBLHlCQUNwQkEsR0FBS3lxQyxhQUNQcndDLEdBQVM0RixFQUFBQTtjQUViLENBQUE7WUFBQTtBQVFGLGlCQUFLZzRCLE1BQVUzeEQsS0FBS213RSxnQkFBZ0I7QUFDbEMsa0JBQUsvdEUsT0FBT3hCLFVBQVVILGVBQWVLLEtBQUtkLEtBQUttd0UsZ0JBQWdCeGUsRUFBQUE7QUFBQUEsMkJBRWxEM3hELEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUEsS0FHM0J5a0IsR0FBZXZ2RSxLQUFLOHFELEVBQUFBO1lBRXhCO0FBR0Eya0IsWUFBQUEsR0FBZ0IsU0FBVWhELElBQUFBO0FBQ3hCLHVCQUFTaG1FLEtBQUksR0FBR0EsS0FBSThvRSxHQUFlMXhFLFFBQVE0STtBQUFBQSx1QkFDbENnbUUsR0FBWTdELGVBQWUyRyxHQUFlOW9FLEVBQUFBLENBQUFBO1lBRXJELENBQUE7QUFHQSxxQkFBU0EsS0FBSSxHQUFHQSxLQUFJOG9FLEdBQWUxeEUsUUFBUTRJO0FBQUFBLHFCQUNsQ3ROLEtBQUttd0UsZUFBZWlHLEdBQWU5b0UsRUFBQUEsQ0FBQUE7QUFRNUNvQyxlQUFRMVAsS0FBS293RSxnQkFBZ0IsU0FBQzlOLElBQUFBO0FBQzVCLGtCQUFNMTNCLEtBQU9nckIsR0FBS3pnQixLQUFLMUksTUFBTTYxQixFQUFBQTtBQUFBQSx5QkFDekIxM0IsTUFBdUJBLEdBQUsyckMsZUFBQUEsTUFDOUJGLEdBQWUvVCxFQUFBQSxJQUFVQTtZQUU3QixDQUFBLEdBS0FnVSxHQUFnQixTQUFVaEQsSUFBQUE7QUFDeEI1akUsaUJBQVE0akUsR0FBWTVELGdCQUFnQixTQUFDOWtDLElBQU0wM0IsSUFBQUE7QUFDcEMxM0IsZ0JBQUFBLEdBQUsyckMsZUFBQUEsS0FBcUJGLEdBQWUvVCxFQUFBQSxNQUM1QytULEdBQWUvVCxFQUFBQSxJQUFVQTtjQUU3QixDQUFBO1lBQ0YsQ0FBQSxHQUlBNXlELEdBQVExUCxLQUFLbTFDLEtBQUsxSSxPQUFPLFNBQUM3QixJQUFNMDNCLElBQUFBO0FBRTlCLGtCQUFJejlCLEtBQUFBLE1BQ0UyeEMsS0FBYzVyQyxHQUFLbWxDO0FBQ3pCLGtCQUFBLFdBQUl5RyxJQUEyQjtBQUM3QixvQkFBSUMsS0FBVztBQUVmL21FLG1CQUFROG1FLElBQWEsU0FBQ0UsSUFBQUE7QUFDcEIsc0JBQU1DLEtBQWdCL2dCLEdBQUt6Z0IsS0FBSzFJLE1BQU1pcUMsRUFBQUE7QUFBQUEsNkJBRWxDQyxNQUErQkEsR0FBY0osZUFBQUEsTUFDL0NFLE1BQVk7Z0JBRWhCLENBQUEsR0FFQTV4QyxLQUFVNHhDLEtBQVc7Y0FDdkI7QUFFSzdyQyxjQUFBQSxHQUFLMnJDLGVBQUFBLEtBQXFCMXhDLE9BQzdCd3hDLEdBQWUvVCxFQUFBQSxJQUFVQTtZQUU3QixDQUFBLEdBR0FnVSxHQUFnQixTQUFDaEQsSUFBQUE7QUFDZjVqRSxpQkFBUTJtRSxJQUFnQixTQUFDTyxJQUFBQTtBQUFBQSx1QkFDaEJ0RCxHQUFZNUQsZUFBZWtILEVBQUFBLEdBRWxDbG5FLEdBQVE0akUsR0FBWTdtQyxPQUFPLFNBQUM3QixJQUFNOGlDLElBQUFBO0FBQzVCOWlDLGtCQUFBQSxHQUFLdmpDLE9BQU91dkUsS0FLaEJoc0MsR0FBS21sQyw2QkFBNkJuYSxHQUFLaWhCLFFBQ3JDanNDLEdBQUttbEMsNEJBQ0wsU0FBVTFvRSxJQUFBQTtBQUNSLDJCQUFBLENBQVFndkUsR0FBZWh2RSxFQUFBQTtrQkFDekIsQ0FBQSxJQVJBaXNFLEdBQVk3bUMsTUFBTWloQyxFQUFBQSxJQUFLO2dCQVUzQixDQUFBLEdBR0E0RixHQUFZN21DLFFBQVFtcEIsR0FBS2loQixRQUFRdkQsR0FBWTdtQyxPQUFPLFNBQVV0ZSxJQUFBQTtBQUM1RCx5QkFBZ0IsU0FBVEE7Z0JBQ1QsQ0FBQTtjQUNGLENBQUE7WUFDRixDQUFBLEdBR0F6ZSxHQUFRMm1FLElBQWdCLFNBQUMvVCxJQUFBQTtBQUFBQSxxQkFDaEIxTSxHQUFLd2EsZUFBZTlOLEVBQUFBO1lBQzdCLENBQUEsR0FLQTV5RCxHQUFRMm1FLElBQWdCLFNBQUMvVCxJQUFBQTtBQUFBQSxxQkFDaEIxTSxHQUFLemdCLEtBQUsxSSxNQUFNNjFCLEVBQUFBO1lBQ3pCLENBQUEsR0FRQTV5RCxHQURZaytDLEdBQVk1dEQsS0FBS20xQyxLQUFLMUksS0FBQUEsR0FDckIsU0FBQzYxQixJQUFBQTtBQUNaLGtCQUFNMTNCLEtBQU9nckIsR0FBS3pnQixLQUFLMUksTUFBTTYxQixFQUFBQSxHQUV2QndVLEtBQ0psaEIsR0FBS21oQixpQkFBaUJuc0MsR0FBSzhxQixNQUFBQSxLQUFXRSxHQUFLbWhCLGlCQUFpQm5zQyxHQUFLNnFCLElBQUFBO0FBQ25FLGtCQUFJcWhCLE9BQXNCbGhCLEdBQUtvaEIsaUJBQWlCcHNDLEdBQUt2akMsRUFBQUE7QUFJckQsb0JBQUl5dkUsSUFBbUI7QUFFckIsc0JBQU1HLEtBQWNyaEIsR0FBS3NoQix1QkFBdUJ0c0MsR0FBSzhxQixNQUFBQTtBQUFBQSw2QkFDakR1aEIsTUFDRnJoQixHQUFLMmQsY0FBYzNkLEdBQUt6Z0IsS0FBSy9JLE1BQU14QixHQUFLOHFCLE1BQUFBLEdBQVM5cUIsSUFBTXFzQyxFQUFBQTtBQUd6RCxzQkFBTUUsS0FBWXZoQixHQUFLc2hCLHVCQUF1QnRzQyxHQUFLNnFCLElBQUFBO0FBQUFBLDZCQUMvQzBoQixNQUNGdmhCLEdBQUsyZCxjQUFjM2QsR0FBS3pnQixLQUFLL0ksTUFBTXhCLEdBQUs2cUIsSUFBQUEsR0FBTzdxQixJQUFNdXNDLEVBQUFBO2dCQUt6RDtBQUFBLHlCQUNTdmhCLEdBQUsyZCxjQUFjalIsRUFBQUEsR0FDMUIxTSxHQUFLMGUsYUFBYTFwQyxFQUFBQTtZQVF0QixDQUFBO0FBS0EscUJBRkloRCxLQUFBQSxPQUNBd3ZDLEtBQUFBLE1BQW9CQyxLQUFBQSxXQUFBQTtBQUV0QixrQkFBTUMsS0FBaUIsQ0FBQTtBQUd2QmhCLGNBQUFBLEdBQWdCLFNBQVVoRCxJQUFBQTtBQUN4QixvQkFBTWlFLEtBQVczcEIsR0FBWTBsQixHQUFZN0QsY0FBQUEsRUFBZ0IvcUUsUUFDbkQ4eUUsS0FBQUEsU0FBY2xFLEdBQVl6bkUsUUFBUW1uRTtBQUFBQSxpQkFDbkN3RSxNQUFlRCxLQUFXLEtBQUEsQ0FBUUMsTUFBZUQsS0FBVyxNQUMvREQsR0FBZXp3RSxLQUFLeXNFLEdBQVlqc0UsRUFBQUE7Y0FFcEMsQ0FBQTtBQUdBLHVCQUFTaUcsS0FBSSxHQUFHQSxLQUFJZ3FFLEdBQWU1eUUsUUFBQUEsRUFBVTRJO0FBQzNDc29ELGdCQUFBQSxHQUFLNmhCLFlBQ0hILEdBQWVocUUsRUFBQUEsR0FDZixDQUFBLEdBQUEsS0FDQTtBQUlKOHBFLGNBQUFBLEtBQWVFLEdBQWU1eUUsU0FBUyxHQUN2Q2tqQyxLQUFVQSxNQUFXd3ZDO1lBQUFBLEdBdEJoQkE7QUFBWUMsY0FBQUEsR0FBQUE7QUF5QmZ6dkMsWUFBQUEsTUFDRjVuQyxLQUFLMDNFLGFBQUFBO1VBRVQsRUFBQSxHQUVBLEVBQUFseEUsS0FBQSxvQkFBQW5ELE9BTUEsU0FBaUJzdUQsSUFBQUE7QUFDZixtQkFBQSxXQUFPM3hELEtBQUttd0UsZUFBZXhlLEVBQUFBO1VBQzdCLEVBQUEsR0FFQSxFQUFBbnJELEtBQUEsb0JBQUFuRCxPQVVBLFNBQWlCaS9ELElBQUFBO0FBQ2YsbUJBQUEsV0FBT3RpRSxLQUFLb3dFLGVBQWU5TixFQUFBQTtVQUM3QixFQUFBLENBQUEsQ0FBQSxHQUFDNE47UUFBQSxFQXQ3Q2dCO0FDekRuQixZQUdNeUgsS0FBYyxXQUFBO0FBS2xCLG1CQUFBQSxHQUFZeGlDLElBQU1uQyxJQUFBQTtBQTlCcEIsZ0JBQ00xc0M7QUE2QnNCcWQsZUFBQUEsTUFBQWcwRCxFQUFBQSxHQUFBQSxXQTNCdEI3M0UsV0FDRndHLEtBQ0V4RyxPQUFPODNFLHlCQUNQOTNFLE9BQU8rM0UsNEJBQ1AvM0UsT0FBT2c0RSwrQkFDUGg0RSxPQUFPaTRFLDBCQUtUajRFLE9BQU84M0Usd0JBQUFBLFdBRkx0eEUsS0FFNkIsU0FBVXl0QixJQUFBQTtBQUV2Q0EsY0FBQUEsR0FBQUE7WUFBQUEsSUFHNkJ6dEIsSUFjL0J0RyxLQUFLbTFDLE9BQU9BLElBQ1puMUMsS0FBS2d6QyxTQUFTQSxJQUVkaHpDLEtBQUtnNEUsa0JBQUFBLE9BQ0xoNEUsS0FBSytwRSxjQUFBQSxRQUNML3BFLEtBQUsycEUsa0JBQUFBLE1BQ0wzcEUsS0FBS2k0RSxrQkFBQUEsT0FDTGo0RSxLQUFLazRFLGlCQUFpQixHQUN0Qmw0RSxLQUFLbTRFLGNBQUFBLE1BRUxuNEUsS0FBS280RSxXQUFBQSxPQUNMcDRFLEtBQUtxNEUsVUFBQUEsT0FDTHI0RSxLQUFLNkwsVUFBVSxDQUFBLEdBQ2Y3TCxLQUFLdTVDLGlCQUFpQixFQUNwQisrQixpQkFBQUEsT0FDQUMsaUJBQUFBLE9BQ0FDLGlCQUFBQSxNQUFpQixHQUVuQi8rQixHQUFjejVDLEtBQUs2TCxTQUFTN0wsS0FBS3U1QyxjQUFBQSxHQUVqQ3Y1QyxLQUFLeTRFLHdCQUFBQSxHQUNMejRFLEtBQUt1ekQsbUJBQUFBO1VBQ1A7QUFxZUMsaUJBbmVEMWxDLEdBQUE4cEQsSUFBQSxDQUFBLEVBQUFueEUsS0FBQSxzQkFBQW5ELE9BR0EsV0FBQTtBQUFxQixnQkFBQXVzQyxJQUFBalIsS0FBQTMrQjtBQUNuQkEsaUJBQUttMUMsS0FBS3FlLFFBQVFyK0MsR0FBRyxhQUFhLFdBQUE7QUFDaEN3cEIsY0FBQUEsR0FBS3k1QyxXQUFBQTtZQUNQLENBQUEsR0FDQXA0RSxLQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsV0FBVyxXQUFBO0FBQzlCd3BCLGNBQUFBLEdBQUt5NUMsV0FBQUE7WUFDUCxDQUFBLEdBQ0FwNEUsS0FBS20xQyxLQUFLcWUsUUFBUXIrQyxHQUFHLFFBQVEsV0FBQTtBQUMzQndwQixjQUFBQSxHQUFLMDVDLFVBQUFBLE1BQ0x2NEUsT0FBT3lrQyxhQUFhNUYsR0FBSys1QyxhQUFBQSxHQUN6Qi81QyxHQUFLKzVDLGdCQUFnQjdpQixHQUFrQixXQUFBO0FBQU0sb0JBQUFqbkM7QUFDM0MrUCxnQkFBQUEsR0FBSzA1QyxVQUFBQSxPQUNMbHhCLEdBQUF2NEIsS0FBQStQLEdBQUtnNkMsY0FBQUEsRUFBYzczRSxLQUFBOHRCLElBQU0rUCxFQUFBQSxFQUF6QndvQjtjQUNELEdBQUUsR0FBQTtZQUNMLENBQUEsR0FDQW5uRCxLQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsZ0JBQWdCLFdBQUE7QUFDbkN3cEIsY0FBQUEsR0FBS2k2QyxhQUFBQTtZQUNQLENBQUEsR0FDQTU0RSxLQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsV0FBVyxXQUFBO0FBQUEsd0JBQzFCd3BCLEdBQUtzNUMsbUJBQ1B0NUMsR0FBS2s2QyxRQUFBQTtZQUVULENBQUEsR0FDQTc0RSxLQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsZ0JBQWdCLFdBQUE7QUFDbkN3cEIsY0FBQUEsR0FBS3c1QyxjQUFBQTtZQUNQLENBQUEsR0FDQW40RSxLQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsZ0JBQWdCLFdBQUE7QUFDbkN3cEIsY0FBQUEsR0FBS3c1QyxjQUFBQSxNQUNMeDVDLEdBQUtxNUMsa0JBQUFBO1lBQ1AsQ0FBQSxHQUNBaDRFLEtBQUttMUMsS0FBS3FlLFFBQVFyK0MsR0FBRyxrQkFBa0JneUMsR0FBQXZYLEtBQUk1dkMsS0FBQzI0RSxjQUFBQSxFQUFjNzNFLEtBQUE4dUMsSUFBTTV2QyxJQUFBQSxDQUFBQSxHQUNoRUEsS0FBS20xQyxLQUFLcWUsUUFBUXIrQyxHQUFHLG1CQUFtQixXQUFBO0FBQ3RDd3BCLGNBQUFBLEdBQUt1NUMsa0JBQWtCLEdBQ3ZCdjVDLEdBQUtzNUMsa0JBQUFBLE1BQ0x0NUMsR0FBS202QyxnQkFBQUE7WUFDUCxDQUFBLEdBQ0E5NEUsS0FBS20xQyxLQUFLcWUsUUFBUXIrQyxHQUFHLGtCQUFrQixXQUFBO0FBQ3JDd3BCLGNBQUFBLEdBQUt1NUMsa0JBQWtCLEdBQ3ZCdjVDLEdBQUtzNUMsa0JBQWtCdDVDLEdBQUt1NUMsaUJBQWlCLEdBQzdDdjVDLEdBQUtvckMsY0FBQUE7WUFDUCxDQUFBLEdBQ0EvcEUsS0FBS20xQyxLQUFLcWUsUUFBUXIrQyxHQUFHLFdBQVcsV0FBQTtBQUM5QndwQixjQUFBQSxHQUFLdTVDLGlCQUFpQixHQUN0QnY1QyxHQUFLdzVDLGNBQUFBLE9BQ0x4NUMsR0FBS3M1QyxrQkFBQUEsT0FBa0IsU0FDbkJ0NUMsR0FBS2dyQyxrQkFDUHBsQyxhQUFhNUYsR0FBS29yQyxXQUFBQSxJQUVsQmpxRSxPQUFPaTVFLHFCQUFxQnA2QyxHQUFLb3JDLFdBQUFBLEdBRW5DcHJDLEdBQUt3VyxLQUFLcWUsUUFBUWgrQyxJQUFBQTtZQUNwQixDQUFBO1VBQ0YsRUFBQSxHQUVBLEVBQUFoUCxLQUFBLGNBQUFuRCxPQUlBLFNBQVd3SSxJQUFBQTtBQUNULGdCQUFBLFdBQUlBLElBQXVCO0FBRXpCbTNELGlCQURlLENBQUMsbUJBQW1CLG1CQUFtQixpQkFBQSxHQUMxQmhqRSxLQUFLNkwsU0FBU0EsRUFBQUE7WUFDNUM7VUFDRixFQUFBLEdBRUEsRUFBQXJGLEtBQUEscUJBQUFuRCxPQVVBLFNBQWtCMHdCLElBQVVpbEQsSUFBQUE7QUFZMUIsZ0JBQXNCLGVBQUEsT0FBWGw1RSxRQUFYO0FBRUEsa0JBQUltNUUsSUFFRUMsS0FBV3A1RTtBQVlqQixxQkFBQSxTQVRJRSxLQUFLMnBFLGtCQUVQc1AsS0FBUXBqQixHQUFvQjloQyxJQUFVaWxELEVBQUFBLElBRWxDRSxHQUFTdEIsMEJBQ1hxQixLQUFRQyxHQUFTdEIsc0JBQXNCN2pELEVBQUFBLElBSXBDa2xEO1lBaEJtQztVQWlCNUMsRUFBQSxHQUVBLEVBQUF6eUUsS0FBQSxtQkFBQW5ELE9BSUEsV0FBQTtBQUV3QyxnQkFBQStzQztBQUFBQSxxQkFEbENwd0MsS0FBS2k0RSxvQkFBQUEsV0FDSGo0RSxLQUFLK3BFLGdCQUNQL3BFLEtBQUsrcEUsY0FBYy9wRSxLQUFLbTVFLGtCQUN0Qmh5QixHQUFBL1csS0FBSXB3QyxLQUFDbzVFLFdBQUFBLEVBQVd0NEUsS0FBQXN2QyxJQUFNcHdDLElBQUFBLEdBQ3RCQSxLQUFLMHBFLGtCQUFBQTtVQUliLEVBQUEsR0FFQSxFQUFBbGpFLEtBQUEsZUFBQW5ELE9BSUEsV0FBQTtBQUFBLHFCQUNNckQsS0FBS2k0RSxvQkFFUGo0RSxLQUFLK3BFLGNBQUFBLFFBQWNsckQsU0FFZjdlLEtBQUsycEUsbUJBRVAzcEUsS0FBSzg0RSxnQkFBQUEsR0FHUDk0RSxLQUFLNjRFLFFBQUFBLEdBQUFBLFVBRUQ3NEUsS0FBSzJwRSxtQkFFUDNwRSxLQUFLODRFLGdCQUFBQTtVQUdYLEVBQUEsR0FFQSxFQUFBdHlFLEtBQUEsVUFBQW5ELE9BSUEsV0FBQTtBQUNFckQsaUJBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxTQUFBLEdBQ3ZCL1YsS0FBSzY0RSxRQUFBQTtVQUNQLEVBQUEsR0FFQSxFQUFBcnlFLEtBQUEsa0JBQUFuRCxPQUtBLFdBQUE7QUFBaUIsZ0JBQUEwZ0MsS0FBQS9qQztBQUFBQSxxQkFFYkEsS0FBS2c0RSxtQkFBQUEsVUFDTGg0RSxLQUFLaTRFLG1CQUFBQSxTQUNMajRFLEtBQUttNEUsZ0JBRUxuNEUsS0FBS2c0RSxrQkFBQUEsTUFDTGg0RSxLQUFLbTVFLGtCQUFrQixXQUFBO0FBQ3JCcDFDLGNBQUFBLEdBQUs4MEMsUUFBQUEsS0FBUTtZQUNkLEdBQUUsQ0FBQTtVQUVQLEVBQUEsR0FFQSxFQUFBcnlFLEtBQUEsV0FBQW5ELE9BT0EsV0FBQTtBQUF3QixnQkFBaEIwdEQsS0FBTTl2RCxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsS0FBQUEsVUFBQSxDQUFBO0FBQ1osZ0JBQUEsU0FBSWpCLEtBQUttNEUsYUFBc0I7QUFDN0JuNEUsbUJBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxZQUFBLEdBRXZCL1YsS0FBS2c0RSxrQkFBQUE7QUFFTCxrQkFBTTFwQixLQUFZLEVBQ2hCK3FCLG9CQUFvQixLQUFBO0FBS2Usb0JBQW5DcjVFLEtBQUtnekMsT0FBT3NtQyxNQUFNdG1DLE9BQU9FLFNBQ1csTUFBcENsekMsS0FBS2d6QyxPQUFPc21DLE1BQU10bUMsT0FBT0csVUFFekJuekMsS0FBS2d6QyxPQUFPdW1DLFFBQUFBLEdBR2R2NUUsS0FBS2d6QyxPQUFPd21DLGFBQUFBO0FBRVosa0JBQU1yb0UsS0FBTW5SLEtBQUtnekMsT0FBT2MsV0FBQUEsR0FHbEJuaUMsS0FBSTNSLEtBQUtnekMsT0FBT3NtQyxNQUFNdG1DLE9BQU95bUMsYUFDN0I3bkUsS0FBSTVSLEtBQUtnekMsT0FBT3NtQyxNQUFNdG1DLE9BQU8wbUM7QUFJbkMsa0JBSEF2b0UsR0FBSXdvRSxVQUFVLEdBQUcsR0FBR2hvRSxJQUFHQyxFQUFBQSxHQUdlLE1BQWxDNVIsS0FBS2d6QyxPQUFPc21DLE1BQU1HO0FBQ3BCO0FBd0JGLGtCQXBCQXRvRSxHQUFJMDNDLEtBQUFBLEdBQ0oxM0MsR0FBSThsRCxVQUFVajNELEtBQUttMUMsS0FBSzZPLEtBQUs0MUIsWUFBWXZzRSxHQUFHck4sS0FBS20xQyxLQUFLNk8sS0FBSzQxQixZQUFZeG9FLENBQUFBLEdBQ3ZFRCxHQUFJc3FCLE1BQU16N0IsS0FBS20xQyxLQUFLNk8sS0FBS3ZvQixPQUFPejdCLEtBQUttMUMsS0FBSzZPLEtBQUt2b0IsS0FBQUEsR0FFL0N0cUIsR0FBSUcsVUFBQUEsR0FDSnRSLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxpQkFBaUI1RSxFQUFBQSxHQUN4Q0EsR0FBSU0sVUFBQUEsR0FBQUEsVUFFQXMvQyxPQUFBQSxVQUVDL3dELEtBQUtvNEUsWUFBQUEsU0FDSHA0RSxLQUFLbzRFLFlBQUFBLFVBQ0pwNEUsS0FBSzZMLFFBQVF5c0UscUJBQUFBLFVBQ2hCdDRFLEtBQUtxNEUsV0FBQUEsU0FDSHI0RSxLQUFLcTRFLFdBQUFBLFVBQW9CcjRFLEtBQUs2TCxRQUFRMHNFLG9CQUV6Q3Y0RSxLQUFLNjVFLFdBQVcxb0UsRUFBQUEsR0FBQUEsVUFLbEJuUixLQUFLbzRFLFlBQUFBLFNBQ0pwNEUsS0FBS280RSxZQUFBQSxVQUFxQnA0RSxLQUFLNkwsUUFBUTJzRSxpQkFDeEM7QUFDQSxvQkFBUWEsS0FBdUJyNUUsS0FBSzg1RSxXQUFXM29FLElBQUs0L0MsRUFBQUEsRUFBNUNzb0I7QUFDUi9xQixnQkFBQUEsR0FBVStxQixxQkFBcUJBO2NBQ2pDO0FBQUEsd0JBR0l0b0IsT0FBQUEsVUFFQy93RCxLQUFLbzRFLFlBQUFBLFNBQ0hwNEUsS0FBS280RSxZQUFBQSxVQUNKcDRFLEtBQUs2TCxRQUFReXNFLHFCQUFBQSxVQUNoQnQ0RSxLQUFLcTRFLFdBQUFBLFNBQ0hyNEUsS0FBS3E0RSxXQUFBQSxVQUFvQnI0RSxLQUFLNkwsUUFBUTBzRSxvQkFFekN2NEUsS0FBSys1RSxZQUFZNW9FLEVBQUFBLEdBSWUsUUFBaENtOUMsR0FBVStxQixzQkFDWi9xQixHQUFVK3FCLG1CQUFBQSxHQUFBQSxVQUdSdG9CLE1BQ0Yvd0QsS0FBS2c2RSxrQkFBa0I3b0UsRUFBQUEsR0FHekJBLEdBQUlHLFVBQUFBLEdBQ0p0UixLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssZ0JBQWdCNUUsRUFBQUEsR0FDdkNBLEdBQUlNLFVBQUFBLEdBR0pOLEdBQUk4M0MsUUFBQUEsR0FBQUEsU0FDQThILE1BQ0Y1L0MsR0FBSXdvRSxVQUFVLEdBQUcsR0FBR2hvRSxJQUFHQyxFQUFBQTtZQUUzQjtVQUNGLEVBQUEsR0FFQSxFQUFBcEwsS0FBQSxnQkFBQW5ELE9BT0EsV0FBQTtBQUNFckQsaUJBQUtnekMsT0FBT3dtQyxhQUFBQTtBQUNaLGdCQUFNcm9FLEtBQU1uUixLQUFLZ3pDLE9BQU9jLFdBQUFBO0FBQ3hCM2lDLFlBQUFBLEdBQUkwM0MsS0FBQUEsR0FDSjEzQyxHQUFJOGxELFVBQVVqM0QsS0FBS20xQyxLQUFLNk8sS0FBSzQxQixZQUFZdnNFLEdBQUdyTixLQUFLbTFDLEtBQUs2TyxLQUFLNDFCLFlBQVl4b0UsQ0FBQUEsR0FDdkVELEdBQUlzcUIsTUFBTXo3QixLQUFLbTFDLEtBQUs2TyxLQUFLdm9CLE9BQU96N0IsS0FBS20xQyxLQUFLNk8sS0FBS3ZvQixLQUFBQTtBQUUvQyxnQkFDSTlCLElBREV5UyxLQUFRcHNDLEtBQUttMUMsS0FBSy9JO0FBSXhCLHFCQUFXdWxCLE1BQVV2bEI7QUFDZmhxQyxxQkFBT3hCLFVBQVVILGVBQWVLLEtBQUtzckMsSUFBT3VsQixFQUFBQSxPQUM5Q2g0QixLQUFPeVMsR0FBTXVsQixFQUFBQSxHQUNSNUosT0FBTzUyQyxFQUFBQSxHQUNad29CLEdBQUsrd0Isa0JBQWtCdjVDLElBQUt3b0IsR0FBS2lsQixRQUFBQTtBQUtyQ3p0QyxZQUFBQSxHQUFJODNDLFFBQUFBO1VBQ04sRUFBQSxHQUVBLEVBQUF6aUQsS0FBQSxjQUFBbkQsT0FRQSxTQUFXOE4sSUFBQUE7QUFzQlQscUJBbkJJd29CLElBMkNBL3FCLElBOUNVcXJFLEtBQVVoNUUsVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLEtBQUFBLFVBQUEsQ0FBQSxHQUNsQm1yQyxLQUFRcHNDLEtBQUttMUMsS0FBSy9JLE9BQ2xCMG9CLEtBQWM5MEQsS0FBS20xQyxLQUFLMmYsYUFFeEJsVyxLQUFXLENBQUEsR0FDWHM3QixLQUFVLENBQUEsR0FFVkMsS0FBVW42RSxLQUFLZ3pDLE9BQU9vbkMsWUFBWSxFQUFFL3NFLEdBQUFBLEtBQVkrRCxHQUFBQSxJQUR2QyxDQUFBLEdBRVRpcEUsS0FBY3I2RSxLQUFLZ3pDLE9BQU9vbkMsWUFBWSxFQUMxQy9zRSxHQUFHck4sS0FBS2d6QyxPQUFPc21DLE1BQU10bUMsT0FBT3ltQyxjQUhmLElBSWJyb0UsR0FBR3BSLEtBQUtnekMsT0FBT3NtQyxNQUFNdG1DLE9BQU8wbUMsZUFKZixHQUFBLENBQUEsR0FNVFksS0FBZSxFQUNuQm5tQyxLQUFLZ21DLEdBQVEvb0UsR0FDYjhpQyxNQUFNaW1DLEdBQVE5c0UsR0FDZG91QyxRQUFRNCtCLEdBQVlqcEUsR0FDcEJvcUMsT0FBTzYrQixHQUFZaHRFLEVBQUFBLEdBR2Znc0UsS0FBcUIsQ0FBQSxHQUdsQnpxRSxLQUFJLEdBQUdBLEtBQUlrbUQsR0FBWXB3RCxRQUFRa0s7QUFHdEMsbUJBRkErcUIsS0FBT3lTLEdBQU0wb0IsR0FBWWxtRCxFQUFBQSxDQUFBQSxHQUVoQnFqQztBQUNQaW9DLGdCQUFBQSxHQUFRcnpFLEtBQUtpdUQsR0FBWWxtRCxFQUFBQSxDQUFBQTt1QkFDaEIrcUIsR0FBSzRnRCxXQUFBQTtBQUNkMzdCLGdCQUFBQSxHQUFTLzNDLEtBQUtpdUQsR0FBWWxtRCxFQUFBQSxDQUFBQTt1QkFFMUIsU0FBSXFyRSxJQUFxQjtBQUN2QixvQkFBTTNyQixLQUFZMzBCLEdBQUtubUIsS0FBS3JDLEVBQUFBO0FBQ08sd0JBQS9CbTlDLEdBQVVYLHFCQUNaMHJCLEdBQW1CeHlFLEtBQUt5bkQsR0FBVVgsaUJBQUFBO2NBRXJDLFdBQU0sU0FBSWgwQixHQUFLNmdELDZCQUE2QkYsRUFBQUEsR0FBd0I7QUFDbkUsb0JBQU1oc0IsS0FBWTMwQixHQUFLbm1CLEtBQUtyQyxFQUFBQTtBQUNPLHdCQUEvQm05QyxHQUFVWCxxQkFDWjByQixHQUFtQnh5RSxLQUFLeW5ELEdBQVVYLGlCQUFBQTtjQUV0QztBQUNFaDBCLGdCQUFBQSxHQUFLK3dCLGtCQUFrQnY1QyxJQUFLd29CLEdBQUtpbEIsUUFBQUE7QUFNdkMsZ0JBQU02N0IsS0FBaUI3N0IsR0FBU2w2QyxRQUMxQmcyRSxLQUFnQlIsR0FBUXgxRTtBQUc5QixpQkFBS2tLLEtBQUksR0FBR0EsS0FBSTZyRSxJQUFnQjdyRSxNQUFLO0FBRW5DLGtCQUFNMC9DLE1BRE4zMEIsS0FBT3lTLEdBQU13UyxHQUFTaHdDLEVBQUFBLENBQUFBLEdBQ0M0RSxLQUFLckMsRUFBQUE7QUFDTyxzQkFBL0JtOUMsR0FBVVgscUJBQ1owckIsR0FBbUJ4eUUsS0FBS3luRCxHQUFVWCxpQkFBQUE7WUFFdEM7QUFHQSxpQkFBSy8rQyxLQUFJLEdBQUdBLEtBQUk4ckUsSUFBZTlyRSxNQUFLO0FBRWxDLGtCQUFNMC9DLE1BRE4zMEIsS0FBT3lTLEdBQU04dEMsR0FBUXRyRSxFQUFBQSxDQUFBQSxHQUNFNEUsS0FBS3JDLEVBQUFBO0FBQ08sc0JBQS9CbTlDLEdBQVVYLHFCQUNaMHJCLEdBQW1CeHlFLEtBQUt5bkQsR0FBVVgsaUJBQUFBO1lBRXRDO0FBRUEsbUJBQU8sRUFDTDByQixvQkFBb0IsV0FBQTtBQUNsQix1QkFBQXNCLEtBQUEsR0FBQUMsS0FBbUJ2QixJQUFrQnNCLEtBQUFDLEdBQUFsMkUsUUFBQWkyRSxNQUFFO0FBQUEsaUJBQ3JDbm5FLEdBRGFvbkUsR0FBQUQsRUFBQUEsR0FBQUE7Y0FFZjtZQUNGLEVBQUE7VUFFSixFQUFBLEdBRUEsRUFBQW4wRSxLQUFBLGNBQUFuRCxPQU1BLFNBQVc4TixJQUFBQTtBQUlULHFCQUhNczdCLEtBQVF6c0MsS0FBS20xQyxLQUFLMUksT0FDbEIwN0IsS0FBY25vRSxLQUFLbTFDLEtBQUtnekIsYUFFckJ2NUQsS0FBSSxHQUFHQSxLQUFJdTVELEdBQVl6akUsUUFBUWtLLE1BQUs7QUFDM0Msa0JBQU1nOEIsS0FBTzZCLEdBQU0wN0IsR0FBWXY1RCxFQUFBQSxDQUFBQTtBQUFBQSx1QkFDM0JnOEIsR0FBSzgxQixhQUNQOTFCLEdBQUtwM0IsS0FBS3JDLEVBQUFBO1lBRWQ7VUFDRixFQUFBLEdBRUEsRUFBQTNLLEtBQUEsZUFBQW5ELE9BTUEsU0FBWThOLElBQUFBO0FBSVYscUJBSE1zN0IsS0FBUXpzQyxLQUFLbTFDLEtBQUsxSSxPQUNsQjA3QixLQUFjbm9FLEtBQUttMUMsS0FBS2d6QixhQUVyQnY1RCxLQUFJLEdBQUdBLEtBQUl1NUQsR0FBWXpqRSxRQUFRa0ssTUFBSztBQUMzQyxrQkFBTWc4QixLQUFPNkIsR0FBTTA3QixHQUFZdjVELEVBQUFBLENBQUFBO0FBQUFBLHVCQUMzQmc4QixHQUFLODFCLGFBQ1A5MUIsR0FBS2l3QyxXQUFXMXBFLEVBQUFBO1lBRXBCO1VBQ0YsRUFBQSxHQUVBLEVBQUEzSyxLQUFBLDJCQUFBbkQsT0FNQSxXQUFBO0FBQ0UsZ0JBQXNCLGVBQUEsT0FBWHZELFFBQXdCO0FBQ2pDLGtCQUFNZzdFLEtBQWNoMkUsVUFBVUUsVUFBVW9GLFlBQUFBO0FBQ3hDcEssbUJBQUsycEUsa0JBQUFBLFFBQWtCLE1BQ25CcDlCLEdBQUF1dUMsRUFBQUEsRUFBV2g2RSxLQUFYZzZFLElBQW9CLFVBQUEsS0FBQSxNQUdidnVDLEdBQUF1dUMsRUFBQUEsRUFBV2g2RSxLQUFYZzZFLElBQW9CLFFBQUEsS0FFekJ2dUMsR0FBQXV1QyxFQUFBQSxFQUFXaDZFLEtBQVhnNkUsSUFBb0IsUUFBQSxLQUFBLFFBSHhCOTZFLEtBQUsycEUsa0JBQUFBO1lBT1Q7QUFDRTNwRSxtQkFBSzJwRSxrQkFBQUE7VUFFVCxFQUFBLEdBRUEsRUFBQW5qRSxLQUFBLHFCQUFBbkQsT0FNQSxTQUFrQjhOLElBQUFBO0FBQ2hCLGdCQUFJblIsS0FBS20xQyxLQUFLNGxDLGFBQWFDLE1BQU07QUFDL0I3cEUsY0FBQUEsR0FBSUcsVUFBQUE7QUFDSixrQkFBTTRoQyxLQUNKbHpDLEtBQUttMUMsS0FBSzRsQyxhQUFhN2pFLFNBQVNvTyxJQUFJalksSUFDcENyTixLQUFLbTFDLEtBQUs0bEMsYUFBYTdqRSxTQUFTbU8sTUFBTWhZLEdBQ2xDOGxDLEtBQ0puekMsS0FBS20xQyxLQUFLNGxDLGFBQWE3akUsU0FBU29PLElBQUlsVSxJQUNwQ3BSLEtBQUttMUMsS0FBSzRsQyxhQUFhN2pFLFNBQVNtTyxNQUFNalU7QUFDeENELGNBQUFBLEdBQUlvRCxLQUNGdlUsS0FBS20xQyxLQUFLNGxDLGFBQWE3akUsU0FBU21PLE1BQU1oWSxHQUN0Q3JOLEtBQUttMUMsS0FBSzRsQyxhQUFhN2pFLFNBQVNtTyxNQUFNalUsR0FDdEM4aEMsSUFDQUMsRUFBQUEsR0FFRmhpQyxHQUFJb3pDLFlBQVksNEJBQ2hCcHpDLEdBQUlzekMsU0FDRnprRCxLQUFLbTFDLEtBQUs0bEMsYUFBYTdqRSxTQUFTbU8sTUFBTWhZLEdBQ3RDck4sS0FBS20xQyxLQUFLNGxDLGFBQWE3akUsU0FBU21PLE1BQU1qVSxHQUN0QzhoQyxJQUNBQyxFQUFBQSxHQUVGaGlDLEdBQUlrMEMsY0FBYywwQkFDbEJsMEMsR0FBSTQzQyxPQUFBQTtZQUNOO0FBQ0U1M0MsY0FBQUEsR0FBSU0sVUFBQUE7VUFFUixFQUFBLENBQUEsQ0FBQSxHQUFDa21FO1FBQUEsRUFsZ0JpQixHQUFBLEtBQUEsRUM5Q1RqMkUsR0FFV3N5QixXQUFBQTtBQ0VmLGlCQUFTaW5ELEdBQVFDLElBQVFubkQsSUFBQUE7QUFDOUJBLFVBQUFBLEdBQVNxSSxlQUFlLFNBQVUvbUIsSUFBQUE7QUFDNUJBLFlBQUFBLEdBQU1tbkIsV0FDUnpJLEdBQVMxZSxFQUFBQTtVQUFBQSxHQUliNmxFLEdBQU8vbEUsR0FBRyxnQkFBZ0I0ZSxHQUFTcUksWUFBQUE7UUFDckM7QUFTTyxpQkFBUysrQyxHQUFVRCxJQUFRbm5ELElBQUFBO0FBT2hDLGlCQU5BQSxHQUFTcUksZUFBZSxTQUFVL21CLElBQUFBO0FBQzVCQSxZQUFBQSxHQUFNb25CLFdBQ1IxSSxHQUFTMWUsRUFBQUE7VUFBQUEsR0FJTjZsRSxHQUFPL2xFLEdBQUcsZ0JBQWdCNGUsR0FBU3FJLFlBQUFBO1FBQzVDO0FDM0JBLFlBTU1nL0MsS0FBTSxXQUFBO0FBSVYsbUJBQUFBLEdBQVlqbUMsSUFBQUE7QUFBTXh4QixlQUFBQSxNQUFBeTNELEVBQUFBLEdBQ2hCcDdFLEtBQUttMUMsT0FBT0EsSUFDWm4xQyxLQUFLcTdFLGFBQWEsR0FDbEJyN0UsS0FBS3M3RSxjQUFjLENBQUEsR0FDbkJ0N0UsS0FBS2l6QyxjQUFBQSxPQUNManpDLEtBQUt1N0UsbUJBQW1CLENBQUEsR0FDeEJ2N0UsS0FBS3c3RSxvQkFBb0IsQ0FBQSxHQUV6Qng3RSxLQUFLNkwsVUFBVSxDQUFBLEdBQ2Y3TCxLQUFLdTVDLGlCQUFpQixFQUNwQmtpQyxZQUFBQSxNQUNBdG9DLFFBQVEsUUFDUkQsT0FBTyxPQUFBLEdBRVR1RyxHQUFjejVDLEtBQUs2TCxTQUFTN0wsS0FBS3U1QyxjQUFBQSxHQUVqQ3Y1QyxLQUFLdXpELG1CQUFBQTtVQUNQO0FBaWhCQyxpQkEvZ0JEMWxDLEdBQUF1dEQsSUFBQSxDQUFBLEVBQUE1MEUsS0FBQSxzQkFBQW5ELE9BR0EsV0FBQTtBQUFxQixnQkFBQXVyQixJQUFBK1AsS0FBQTMrQjtBQUVuQkEsaUJBQUttMUMsS0FBS3FlLFFBQVFqK0MsS0FBSyxVQUFVLFNBQUN2SCxJQUFBQTtBQUNkLG9CQUFkQSxHQUFJa2xDLFVBQ052VSxHQUFLd1csS0FBSzZPLEtBQUs0MUIsWUFBWXZzRSxJQUFnQixNQUFaVyxHQUFJa2xDLFFBRWxCLE1BQWZsbEMsR0FBSW1sQyxXQUNOeFUsR0FBS3dXLEtBQUs2TyxLQUFLNDFCLFlBQVl4b0UsSUFBaUIsTUFBYnBELEdBQUltbEM7WUFFdkMsQ0FBQSxHQUNBbnpDLEtBQUttMUMsS0FBS3FlLFFBQVFyK0MsR0FBRyxXQUFXZ3lDLEdBQUF2NEIsS0FBSTV1QixLQUFDdTVFLE9BQUFBLEVBQU96NEUsS0FBQTh0QixJQUFNNXVCLElBQUFBLENBQUFBLEdBQ2xEQSxLQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsV0FBVyxXQUFBO0FBQzlCd3BCLGNBQUFBLEdBQUsrOEMsWUFBWS85QyxRQUFBQSxHQUNqQmdCLEdBQUt1OEMsT0FBT3Y5QyxRQUFBQSxHQUNaZ0IsR0FBS2c5QyxTQUFBQTtZQUNQLENBQUE7VUFDRixFQUFBLEdBRUEsRUFBQW4xRSxLQUFBLGNBQUFuRCxPQUdBLFNBQVd3SSxJQUFBQTtBQUFTLGdCQUFBazRCLEtBQUEvakM7QUFDbEIsZ0JBQUEsV0FBSTZMLElBQXVCO0FBRXpCbTNELGlCQURlLENBQUMsU0FBUyxVQUFVLFlBQUEsR0FDUGhqRSxLQUFLNkwsU0FBU0EsRUFBQUE7WUFDNUM7QUFJQSxnQkFEQTdMLEtBQUsyN0UsU0FBQUEsR0FBQUEsU0FDRDM3RSxLQUFLNkwsUUFBUTR2RSxZQUFxQjtBQUFBLGtCQUFBN3JDO0FBQ3BDLGtCQUFJOXZDLE9BQU84N0UsZ0JBQWdCO0FBRXpCLG9CQUFNQyxLQUFXLElBQUlELGVBQWUsV0FBQTtBQUFBLDJCQUNsQjczQyxHQUFLdzFDLFFBQUFBLEtBRW5CeDFDLEdBQUtvUixLQUFLcWUsUUFBUXo5QyxLQUFLLGdCQUFBO2dCQUUzQixDQUFBLEdBQ1F1akUsS0FBVXQ1RSxLQUFWczVFO0FBRVJ1QyxnQkFBQUEsR0FBU0MsUUFBUXhDLEVBQUFBLEdBQ2pCdDVFLEtBQUt3N0Usa0JBQWtCMzBFLEtBQUssV0FBQTtBQUMxQmcxRSxrQkFBQUEsR0FBU0UsVUFBVXpDLEVBQUFBO2dCQUNyQixDQUFBO2NBQ0YsT0FBTztBQUVMLG9CQUFNMEMsS0FBY0MsR0FBWSxXQUFBO0FBQUEsMkJBQ2RsNEMsR0FBS3cxQyxRQUFBQSxLQUVuQngxQyxHQUFLb1IsS0FBS3FlLFFBQVF6OUMsS0FBSyxnQkFBQTtnQkFFMUIsR0FBRSxHQUFBO0FBQ0gvVixxQkFBS3c3RSxrQkFBa0IzMEUsS0FBSyxXQUFBO0FBQzFCcTFFLGdDQUFjRixFQUFBQTtnQkFDaEIsQ0FBQTtjQUNGO0FBR0Esa0JBQU1HLEtBQWlCaDFCLEdBQUF2WCxLQUFJNXZDLEtBQUNvOEUsU0FBQUEsRUFBU3Q3RSxLQUFBOHVDLElBQU01dkMsSUFBQUE7QUFDM0NGLHFCQUFPc1YsaUJBQWlCLFVBQVUrbUUsRUFBQUEsR0FDbENuOEUsS0FBS3c3RSxrQkFBa0IzMEUsS0FBSyxXQUFBO0FBQzFCL0csdUJBQU82VixvQkFBb0IsVUFBVXdtRSxFQUFBQTtjQUN2QyxDQUFBO1lBQ0Y7VUFDRixFQUFBLEdBRUEsRUFBQTMxRSxLQUFBLFlBQUFuRCxPQUdBLFdBQUE7QUFBVyxnQkFBQStzQyxJQUFBSSxJQUFBRztBQUNUbEIsZUFBQVcsS0FBQXFrQyxHQUFBamtDLEtBQUExQixHQUFBNkIsS0FBQTN3QyxLQUFLdzdFLGlCQUFBQSxFQUFpQjE2RSxLQUFBNnZDLElBQ1osQ0FBQSxDQUFBLEVBQUU3dkMsS0FBQTB2QyxFQUFBQSxDQUFBQSxFQUNBMXZDLEtBQUFzdkMsSUFDRCxTQUFDcmMsSUFBQUE7QUFDUixrQkFBQTtBQUNFQSxnQkFBQUEsR0FBQUE7Y0FDRCxTQUFRM3pCLElBQUFBO0FBQ1ArbkMsd0JBQVEvbkMsTUFBTUEsRUFBQUE7Y0FDaEI7WUFDRixDQUFBO1VBQ0osRUFBQSxHQUVBLEVBQUFvRyxLQUFBLGFBQUFuRCxPQUdBLFdBQUE7QUFDRXJELGlCQUFLdTVFLFFBQUFBLEdBQ0x2NUUsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLFNBQUE7VUFDekIsRUFBQSxHQUVBLEVBQUF2UCxLQUFBLG1CQUFBbkQsT0FNQSxXQUFBO0FBQThDLGdCQUE5Qmc0RSxLQUFVcDZFLFVBQUF5RCxTQUFBekQsS0FBQUEsV0FBQUEsVUFBQTRkLENBQUFBLElBQUE1ZCxVQUFHLENBQUEsSUFBQWpCLEtBQUtxN0U7QUFBQUEscUJBQzVCcjdFLEtBQUtpekMsZ0JBQ1BqekMsS0FBS3M3RSxZQUFZZSxnQkFBZ0JyOEUsS0FBS3M1RSxNQUFNdG1DLE9BQU9FLFFBQVFtb0MsSUFDM0RyN0UsS0FBS3M3RSxZQUFZZ0IsaUJBQWlCdDhFLEtBQUtzNUUsTUFBTXRtQyxPQUFPRyxTQUFTa29DLElBQzdEcjdFLEtBQUtzN0UsWUFBWTcvQyxRQUFRejdCLEtBQUttMUMsS0FBSzZPLEtBQUt2b0IsT0FDeEN6N0IsS0FBS3M3RSxZQUFZcGtFLFdBQVdsWCxLQUFLbzZFLFlBQVksRUFDM0Mvc0UsR0FBSSxNQUFNck4sS0FBS3M1RSxNQUFNdG1DLE9BQU9FLFFBQVNtb0MsSUFDckNqcUUsR0FBSSxNQUFNcFIsS0FBS3M1RSxNQUFNdG1DLE9BQU9HLFNBQVVrb0MsR0FBQUEsQ0FBQUE7VUFHNUMsRUFBQSxHQUVBLEVBQUE3MEUsS0FBQSxtQkFBQW5ELE9BS0EsV0FBQTtBQUNFLGdCQUFBLFdBQ0VyRCxLQUFLczdFLFlBQVk3L0MsU0FDaUIsTUFBbEN6N0IsS0FBS3M1RSxNQUFNdG1DLE9BQU95bUMsZUFDaUIsTUFBbkN6NUUsS0FBS3M1RSxNQUFNdG1DLE9BQU8wbUMsZ0JBQ0UsTUFBcEIxNUUsS0FBS3E3RSxjQUNMcjdFLEtBQUtzN0UsWUFBWWUsZ0JBQWdCLEtBQ2pDcjhFLEtBQUtzN0UsWUFBWWdCLGlCQUFpQixHQUNsQztBQUNBLGtCQUFNQyxLQUNKdjhFLEtBQUtzNUUsTUFBTXRtQyxPQUFPRSxRQUNsQmx6QyxLQUFLcTdFLGFBQ0xyN0UsS0FBS3M3RSxZQUFZZSxlQUNiRyxLQUNKeDhFLEtBQUtzNUUsTUFBTXRtQyxPQUFPRyxTQUNsQm56QyxLQUFLcTdFLGFBQ0xyN0UsS0FBS3M3RSxZQUFZZ0IsZ0JBQ2ZHLEtBQVd6OEUsS0FBS3M3RSxZQUFZNy9DO0FBRWQsbUJBQWQ4Z0QsTUFBa0MsS0FBZkMsS0FDckJDLEtBQW9DLE1BQXpCejhFLEtBQUtzN0UsWUFBWTcvQyxTQUFlOGdELEtBQWFDLE1BQ2pDLEtBQWRELEtBQ1RFLEtBQVd6OEUsS0FBS3M3RSxZQUFZNy9DLFFBQVE4Z0QsS0FDWixLQUFmQyxPQUNUQyxLQUFXejhFLEtBQUtzN0UsWUFBWTcvQyxRQUFRK2dELEtBR3RDeDhFLEtBQUttMUMsS0FBSzZPLEtBQUt2b0IsUUFBUWdoRDtBQUV2QixrQkFBTUMsS0FBb0IxOEUsS0FBS282RSxZQUFZLEVBQ3pDL3NFLEdBQUcsTUFBTXJOLEtBQUtzNUUsTUFBTXRtQyxPQUFPeW1DLGFBQzNCcm9FLEdBQUcsTUFBTXBSLEtBQUtzNUUsTUFBTXRtQyxPQUFPMG1DLGFBQUFBLENBQUFBLEdBR3ZCaUQsS0FBcUIsRUFFekJ0dkUsR0FBR3F2RSxHQUFrQnJ2RSxJQUFJck4sS0FBS3M3RSxZQUFZcGtFLFNBQVM3SixHQUNuRCtELEdBQUdzckUsR0FBa0J0ckUsSUFBSXBSLEtBQUtzN0UsWUFBWXBrRSxTQUFTOUYsRUFBQUE7QUFFckRwUixtQkFBS20xQyxLQUFLNk8sS0FBSzQxQixZQUFZdnNFLEtBQ3pCc3ZFLEdBQW1CdHZFLElBQUlyTixLQUFLbTFDLEtBQUs2TyxLQUFLdm9CLE9BQ3hDejdCLEtBQUttMUMsS0FBSzZPLEtBQUs0MUIsWUFBWXhvRSxLQUN6QnVyRSxHQUFtQnZyRSxJQUFJcFIsS0FBS20xQyxLQUFLNk8sS0FBS3ZvQjtZQUMxQztVQUNGLEVBQUEsR0FFQSxFQUFBajFCLEtBQUEsaUJBQUFuRCxPQU1BLFNBQWNBLElBQUFBO0FBQ1osZ0JBQXFCLFlBQUEsT0FBVkE7QUFDVCxxQkFBT0EsS0FBUTtBQUNWLGdCQUFxQixZQUFBLE9BQVZBLElBQW9CO0FBQ3BDLGtCQUFBLE9BQUlrcEMsR0FBQWxwQyxFQUFBQSxFQUFLdkMsS0FBTHVDLElBQWMsR0FBQSxLQUFBLE9BQWVrcEMsR0FBQWxwQyxFQUFBQSxFQUFLdkMsS0FBTHVDLElBQWMsSUFBQTtBQUM3Qyx1QkFBT0E7QUFDRixrQkFBQSxPQUFJa3BDLEdBQUFscEMsRUFBQUEsRUFBS3ZDLEtBQUx1QyxJQUFjLEdBQUE7QUFDdkIsdUJBQU9BLEtBQVE7WUFFbkI7QUFDQSxrQkFBTSxJQUFJMmtDLE1BQ1IsMERBQTBEM2tDLEVBQUFBO1VBRTlELEVBQUEsR0FFQSxFQUFBbUQsS0FBQSxXQUFBbkQsT0FHQSxXQUFBO0FBRUUsbUJBQU9yRCxLQUFLbTFDLEtBQUt5bkMsVUFBVUMsY0FBQUE7QUFDekI3OEUsbUJBQUttMUMsS0FBS3luQyxVQUFVdG5DLFlBQVl0MUMsS0FBS20xQyxLQUFLeW5DLFVBQVVFLFVBQUFBO0FBZXRELGdCQVpBOThFLEtBQUtzNUUsUUFBUXozRSxTQUFTaUgsY0FBYyxLQUFBLEdBQ3BDOUksS0FBS3M1RSxNQUFNeUQsWUFBWSxlQUN2Qi84RSxLQUFLczVFLE1BQU10L0QsTUFBTTlDLFdBQVcsWUFDNUJsWCxLQUFLczVFLE1BQU10L0QsTUFBTWdqRSxXQUFXLFVBQzVCaDlFLEtBQUtzNUUsTUFBTTJELFdBQVcsR0FJdEJqOUUsS0FBS3M1RSxNQUFNdG1DLFNBQVNueEMsU0FBU2lILGNBQWMsUUFBQSxHQUMzQzlJLEtBQUtzNUUsTUFBTXRtQyxPQUFPaDVCLE1BQU05QyxXQUFXLFlBQ25DbFgsS0FBS3M1RSxNQUFNcC9ELFlBQVlsYSxLQUFLczVFLE1BQU10bUMsTUFBQUEsR0FFN0JoekMsS0FBS3M1RSxNQUFNdG1DLE9BQU9jO0FBUXJCOXpDLG1CQUFLazlFLGVBQUFBLEdBQ0xsOUUsS0FBS3c1RSxhQUFBQTtpQkFUNEI7QUFDakMsa0JBQU0yRCxLQUFXdDdFLFNBQVNpSCxjQUFjLEtBQUE7QUFDeENxMEUsY0FBQUEsR0FBU25qRSxNQUFNbXhCLFFBQVEsT0FDdkJneUMsR0FBU25qRSxNQUFNb2pFLGFBQWEsUUFDNUJELEdBQVNuakUsTUFBTXFqRSxVQUFVLFFBQ3pCRixHQUFTRyxZQUFZLG9EQUNyQnQ5RSxLQUFLczVFLE1BQU10bUMsT0FBTzk0QixZQUFZaWpFLEVBQUFBO1lBQ2hDO0FBTUFuOUUsaUJBQUttMUMsS0FBS3luQyxVQUFVMWlFLFlBQVlsYSxLQUFLczVFLEtBQUFBLEdBRXJDdDVFLEtBQUttMUMsS0FBSzZPLEtBQUt2b0IsUUFBUSxHQUN2Qno3QixLQUFLbTFDLEtBQUs2TyxLQUFLNDFCLGNBQWMsRUFDM0J2c0UsR0FBRyxNQUFNck4sS0FBS3M1RSxNQUFNdG1DLE9BQU95bUMsYUFDM0Jyb0UsR0FBRyxNQUFNcFIsS0FBS3M1RSxNQUFNdG1DLE9BQU8wbUMsYUFBQUEsR0FHN0IxNUUsS0FBS3U5RSxZQUFBQTtVQUNQLEVBQUEsR0FFQSxFQUFBLzJFLEtBQUEsZUFBQW5ELE9BS0EsV0FBQTtBQUFjLGdCQUFBaWhDLEtBQUF0a0M7QUFBQUEsdUJBQ1JBLEtBQUtrN0UsVUFDUGw3RSxLQUFLazdFLE9BQU92OUMsUUFBQUEsR0FFZDM5QixLQUFLdzlFLE9BQU8sQ0FBQSxHQUNaeDlFLEtBQUt5OUUsUUFBUSxDQUFBLEdBR2J6OUUsS0FBS2s3RSxTQUFTLElBQUlueUMsR0FBTy9vQyxLQUFLczVFLE1BQU10bUMsTUFBQUEsR0FDcENoekMsS0FBS2s3RSxPQUFPNTRFLElBQUksT0FBQSxFQUFTOFQsSUFBSSxFQUFFbWlCLFFBQUFBLEtBQVEsQ0FBQSxHQUV2Q3Y0QixLQUFLazdFLE9BQ0Y1NEUsSUFBSSxLQUFBLEVBQ0o4VCxJQUFJLEVBQUVvdEIsV0FBVyxHQUFHM0ssV0FBV2tRLEdBQU96UixjQUFBQSxDQUFBQSxHQUV6QzJqRCxHQUFRajdFLEtBQUtrN0UsUUFBUSxTQUFDN2xFLElBQUFBO0FBQ3BCaXZCLGNBQUFBLEdBQUs2USxLQUFLdW9DLGVBQWV6QyxRQUFRNWxFLEVBQUFBO1lBQ25DLENBQUEsR0FDQXJWLEtBQUtrN0UsT0FBTy9sRSxHQUFHLE9BQU8sU0FBQ0UsSUFBQUE7QUFDckJpdkIsY0FBQUEsR0FBSzZRLEtBQUt1b0MsZUFBZUMsTUFBTXRvRSxFQUFBQTtZQUNqQyxDQUFBLEdBQ0FyVixLQUFLazdFLE9BQU8vbEUsR0FBRyxhQUFhLFNBQUNFLElBQUFBO0FBQzNCaXZCLGNBQUFBLEdBQUs2USxLQUFLdW9DLGVBQWVFLFlBQVl2b0UsRUFBQUE7WUFDdkMsQ0FBQSxHQUNBclYsS0FBS2s3RSxPQUFPL2xFLEdBQUcsU0FBUyxTQUFDRSxJQUFBQTtBQUN2Qml2QixjQUFBQSxHQUFLNlEsS0FBS3VvQyxlQUFlRyxPQUFPeG9FLEVBQUFBO1lBQ2xDLENBQUEsR0FDQXJWLEtBQUtrN0UsT0FBTy9sRSxHQUFHLFlBQVksU0FBQ0UsSUFBQUE7QUFDMUJpdkIsY0FBQUEsR0FBSzZRLEtBQUt1b0MsZUFBZUksWUFBWXpvRSxFQUFBQTtZQUN2QyxDQUFBLEdBQ0FyVixLQUFLazdFLE9BQU8vbEUsR0FBRyxXQUFXLFNBQUNFLElBQUFBO0FBQ3pCaXZCLGNBQUFBLEdBQUs2USxLQUFLdW9DLGVBQWVLLE9BQU8xb0UsRUFBQUE7WUFDbEMsQ0FBQSxHQUNBclYsS0FBS2s3RSxPQUFPL2xFLEdBQUcsVUFBVSxTQUFDRSxJQUFBQTtBQUN4Qml2QixjQUFBQSxHQUFLNlEsS0FBS3VvQyxlQUFlTSxVQUFVM29FLEVBQUFBO1lBQ3JDLENBQUEsR0FDQXJWLEtBQUtrN0UsT0FBTy9sRSxHQUFHLFNBQVMsU0FBQ0UsSUFBQUE7QUFDdkJpdkIsY0FBQUEsR0FBSzZRLEtBQUt1b0MsZUFBZU8sUUFBUTVvRSxFQUFBQTtZQUNuQyxDQUFBLEdBR0FyVixLQUFLczVFLE1BQU10bUMsT0FBTzU5QixpQkFBaUIsU0FBUyxTQUFDQyxJQUFBQTtBQUMzQ2l2QixjQUFBQSxHQUFLNlEsS0FBS3VvQyxlQUFlUSxhQUFhN29FLEVBQUFBO1lBQ3hDLENBQUEsR0FFQXJWLEtBQUtzNUUsTUFBTXRtQyxPQUFPNTlCLGlCQUFpQixhQUFhLFNBQUNDLElBQUFBO0FBQy9DaXZCLGNBQUFBLEdBQUs2USxLQUFLdW9DLGVBQWVTLFlBQVk5b0UsRUFBQUE7WUFDdkMsQ0FBQSxHQUNBclYsS0FBS3M1RSxNQUFNdG1DLE9BQU81OUIsaUJBQWlCLGVBQWUsU0FBQ0MsSUFBQUE7QUFDakRpdkIsY0FBQUEsR0FBSzZRLEtBQUt1b0MsZUFBZVUsVUFBVS9vRSxFQUFBQTtZQUNyQyxDQUFBLEdBRUFyVixLQUFLMDdFLGNBQWMsSUFBSTN5QyxHQUFPL29DLEtBQUtzNUUsS0FBQUEsR0FDbkM2QixHQUFVbjdFLEtBQUswN0UsYUFBYSxTQUFDcm1FLElBQUFBO0FBQzNCaXZCLGNBQUFBLEdBQUs2USxLQUFLdW9DLGVBQWV2QyxVQUFVOWxFLEVBQUFBO1lBQ3JDLENBQUE7VUFDRixFQUFBLEdBRUEsRUFBQTdPLEtBQUEsV0FBQW5ELE9BU0EsV0FBQTtBQUFrRSxnQkFBMUQ2dkMsS0FBS2p5QyxVQUFBeUQsU0FBQUEsS0FBQUEsV0FBQXpELFVBQUEsQ0FBQSxJQUFBQSxVQUFHLENBQUEsSUFBQWpCLEtBQUs2TCxRQUFRcW5DLE9BQU9DLEtBQU1seUMsVUFBQXlELFNBQUFBLEtBQUFBLFdBQUF6RCxVQUFBLENBQUEsSUFBQUEsVUFBRyxDQUFBLElBQUFqQixLQUFLNkwsUUFBUXNuQztBQUN4REQsWUFBQUEsS0FBUWx6QyxLQUFLcStFLGNBQWNuckMsRUFBQUEsR0FDM0JDLEtBQVNuekMsS0FBS3ErRSxjQUFjbHJDLEVBQUFBO0FBRTVCLGdCQUFJbXJDLEtBQUFBLE9BQ0VDLEtBQVd2K0UsS0FBS3M1RSxNQUFNdG1DLE9BQU9FLE9BQzdCc3JDLEtBQVl4K0UsS0FBS3M1RSxNQUFNdG1DLE9BQU9HLFFBYzlCc3JDLEtBQWdCeitFLEtBQUtxN0U7QUFHM0IsZ0JBRkFyN0UsS0FBS2s5RSxlQUFBQSxHQUdIaHFDLE1BQVNsekMsS0FBSzZMLFFBQVFxbkMsU0FDdEJDLE1BQVVuekMsS0FBSzZMLFFBQVFzbkMsVUFDdkJuekMsS0FBS3M1RSxNQUFNdC9ELE1BQU1rNUIsU0FBU0EsTUFDMUJsekMsS0FBS3M1RSxNQUFNdC9ELE1BQU1tNUIsVUFBVUE7QUFFM0JuekMsbUJBQUswK0UsZ0JBQWdCRCxFQUFBQSxHQUVyQnorRSxLQUFLczVFLE1BQU10L0QsTUFBTWs1QixRQUFRQSxJQUN6Qmx6QyxLQUFLczVFLE1BQU10L0QsTUFBTW01QixTQUFTQSxJQUUxQm56QyxLQUFLczVFLE1BQU10bUMsT0FBT2g1QixNQUFNazVCLFFBQVEsUUFDaENsekMsS0FBS3M1RSxNQUFNdG1DLE9BQU9oNUIsTUFBTW01QixTQUFTLFFBRWpDbnpDLEtBQUtzNUUsTUFBTXRtQyxPQUFPRSxRQUFRdnpDLEtBQUtxMUIsTUFDN0JoMUIsS0FBS3M1RSxNQUFNdG1DLE9BQU95bUMsY0FBY3o1RSxLQUFLcTdFLFVBQUFBLEdBRXZDcjdFLEtBQUtzNUUsTUFBTXRtQyxPQUFPRyxTQUFTeHpDLEtBQUtxMUIsTUFDOUJoMUIsS0FBS3M1RSxNQUFNdG1DLE9BQU8wbUMsZUFBZTE1RSxLQUFLcTdFLFVBQUFBLEdBR3hDcjdFLEtBQUs2TCxRQUFRcW5DLFFBQVFBLElBQ3JCbHpDLEtBQUs2TCxRQUFRc25DLFNBQVNBLElBRXRCbnpDLEtBQUt1N0UsbUJBQW1CLEVBQ3RCbHVFLEdBQUcsTUFBTXJOLEtBQUtzNUUsTUFBTUcsYUFDcEJyb0UsR0FBRyxNQUFNcFIsS0FBS3M1RSxNQUFNSSxhQUFBQSxHQUd0QjRFLEtBQUFBO2lCQUNLO0FBSUwsa0JBQU1LLEtBQVdoL0UsS0FBS3ExQixNQUNwQmgxQixLQUFLczVFLE1BQU10bUMsT0FBT3ltQyxjQUFjejVFLEtBQUtxN0UsVUFBQUEsR0FFakN1RCxLQUFZai9FLEtBQUtxMUIsTUFDckJoMUIsS0FBS3M1RSxNQUFNdG1DLE9BQU8wbUMsZUFBZTE1RSxLQUFLcTdFLFVBQUFBO0FBS3RDcjdFLG1CQUFLczVFLE1BQU10bUMsT0FBT0UsVUFBVXlyQyxNQUM1QjMrRSxLQUFLczVFLE1BQU10bUMsT0FBT0csV0FBV3lyQyxNQUU3QjUrRSxLQUFLMCtFLGdCQUFnQkQsRUFBQUEsR0FHbkJ6K0UsS0FBS3M1RSxNQUFNdG1DLE9BQU9FLFVBQVV5ckMsT0FDOUIzK0UsS0FBS3M1RSxNQUFNdG1DLE9BQU9FLFFBQVF5ckMsSUFDMUJMLEtBQUFBLE9BRUV0K0UsS0FBS3M1RSxNQUFNdG1DLE9BQU9HLFdBQVd5ckMsT0FDL0I1K0UsS0FBS3M1RSxNQUFNdG1DLE9BQU9HLFNBQVN5ckMsSUFDM0JOLEtBQUFBO1lBRUo7QUFnQkEsbUJBQUEsU0FkSUEsT0FDRnQrRSxLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssVUFBVSxFQUMvQm05QixPQUFPdnpDLEtBQUtxMUIsTUFBTWgxQixLQUFLczVFLE1BQU10bUMsT0FBT0UsUUFBUWx6QyxLQUFLcTdFLFVBQUFBLEdBQ2pEbG9DLFFBQVF4ekMsS0FBS3ExQixNQUFNaDFCLEtBQUtzNUUsTUFBTXRtQyxPQUFPRyxTQUFTbnpDLEtBQUtxN0UsVUFBQUEsR0FDbkRrRCxVQUFVNStFLEtBQUtxMUIsTUFBTXVwRCxLQUFXditFLEtBQUtxN0UsVUFBQUEsR0FDckNtRCxXQUFXNytFLEtBQUtxMUIsTUFBTXdwRCxLQUFZeCtFLEtBQUtxN0UsVUFBQUEsRUFBQUEsQ0FBQUEsR0FJekNyN0UsS0FBSzYrRSxnQkFBQUEsSUFJUDcrRSxLQUFLaXpDLGNBQUFBLE1BQ0VxckM7VUFDVCxFQUFBLEdBRUEsRUFBQTkzRSxLQUFBLGNBQUFuRCxPQUlBLFdBQUE7QUFDRSxtQkFBT3JELEtBQUtzNUUsTUFBTXRtQyxPQUFPYyxXQUFXLElBQUE7VUFDdEMsRUFBQSxHQUVBLEVBQUF0dEMsS0FBQSx3QkFBQW5ELE9BTUEsV0FBQTtBQUNFLGdCQUFNOE4sS0FBTW5SLEtBQUs4ekMsV0FBQUE7QUFDakIsZ0JBQUEsV0FBSTNpQztBQUNGLG9CQUFNLElBQUk2MkIsTUFBTSw4QkFBQTtBQUdsQixnQkFBSTgyQyxLQUFZO0FBZWhCLG1CQWRzQixlQUFBLE9BQVhoL0UsV0FHVGcvRSxLQUFZaC9FLE9BQU9pL0Usb0JBQW9CLElBV2xDRCxNQVBMM3RFLEdBQUk2dEUsZ0NBQ0o3dEUsR0FBSTh0RSw2QkFDSjl0RSxHQUFJK3RFLDRCQUNKL3RFLEdBQUlndUUsMkJBQ0podUUsR0FBSWl1RSwwQkFDSjtVQUdKLEVBQUEsR0FFQSxFQUFBNTRFLEtBQUEsa0JBQUFuRCxPQUtBLFdBQUE7QUFDRXJELGlCQUFLcTdFLGFBQWFyN0UsS0FBS3EvRSxxQkFBQUE7VUFDekIsRUFBQSxHQUVBLEVBQUE3NEUsS0FBQSxnQkFBQW5ELE9BR0EsV0FBQTtBQUNFLGdCQUFNOE4sS0FBTW5SLEtBQUs4ekMsV0FBQUE7QUFDakIsZ0JBQUEsV0FBSTNpQztBQUNGLG9CQUFNLElBQUk2MkIsTUFBTSw4QkFBQTtBQUdsQjcyQixZQUFBQSxHQUFJcW9FLGFBQWF4NUUsS0FBS3E3RSxZQUFZLEdBQUcsR0FBR3I3RSxLQUFLcTdFLFlBQVksR0FBRyxDQUFBO1VBQzlELEVBQUEsR0FFQSxFQUFBNzBFLEtBQUEsd0JBQUFuRCxPQVFBLFNBQXFCZ0ssSUFBQUE7QUFDbkIsb0JBQVFBLEtBQUlyTixLQUFLbTFDLEtBQUs2TyxLQUFLNDFCLFlBQVl2c0UsS0FBS3JOLEtBQUttMUMsS0FBSzZPLEtBQUt2b0I7VUFDN0QsRUFBQSxHQUVBLEVBQUFqMUIsS0FBQSx3QkFBQW5ELE9BUUEsU0FBcUJnSyxJQUFBQTtBQUNuQixtQkFBT0EsS0FBSXJOLEtBQUttMUMsS0FBSzZPLEtBQUt2b0IsUUFBUXo3QixLQUFLbTFDLEtBQUs2TyxLQUFLNDFCLFlBQVl2c0U7VUFDL0QsRUFBQSxHQUVBLEVBQUE3RyxLQUFBLHdCQUFBbkQsT0FRQSxTQUFxQitOLElBQUFBO0FBQ25CLG9CQUFRQSxLQUFJcFIsS0FBS20xQyxLQUFLNk8sS0FBSzQxQixZQUFZeG9FLEtBQUtwUixLQUFLbTFDLEtBQUs2TyxLQUFLdm9CO1VBQzdELEVBQUEsR0FFQSxFQUFBajFCLEtBQUEsd0JBQUFuRCxPQVFBLFNBQXFCK04sSUFBQUE7QUFDbkIsbUJBQU9BLEtBQUlwUixLQUFLbTFDLEtBQUs2TyxLQUFLdm9CLFFBQVF6N0IsS0FBS20xQyxLQUFLNk8sS0FBSzQxQixZQUFZeG9FO1VBQy9ELEVBQUEsR0FFQSxFQUFBNUssS0FBQSxlQUFBbkQsT0FJQSxTQUFZMFQsSUFBQUE7QUFDVixtQkFBTyxFQUNMMUosR0FBR3JOLEtBQUtzL0UscUJBQXFCdm9FLEdBQUkxSixDQUFBQSxHQUNqQytELEdBQUdwUixLQUFLdS9FLHFCQUFxQnhvRSxHQUFJM0YsQ0FBQUEsRUFBQUE7VUFFckMsRUFBQSxHQUVBLEVBQUE1SyxLQUFBLGVBQUFuRCxPQUtBLFNBQVkwVCxJQUFBQTtBQUNWLG1CQUFPLEVBQ0wxSixHQUFHck4sS0FBS3cvRSxxQkFBcUJ6b0UsR0FBSTFKLENBQUFBLEdBQ2pDK0QsR0FBR3BSLEtBQUt5L0UscUJBQXFCMW9FLEdBQUkzRixDQUFBQSxFQUFBQTtVQUVyQyxFQUFBLENBQUEsQ0FBQSxHQUFDZ3FFO1FBQUEsRUF0aUJTO0FDTFosWUFHTXNFLEtBQUksV0FBQTtBQUtSLG1CQUFBQSxHQUFZdnFDLElBQU1uQyxJQUFBQTtBQUFRLGdCQUFBcGtCLElBQUFnaEIsSUFBQWpSLEtBQUEzK0I7QUFBQTJqQixlQUFBQSxNQUFBKzdELEVBQUFBLEdBQ3hCMS9FLEtBQUttMUMsT0FBT0EsSUFDWm4xQyxLQUFLZ3pDLFNBQVNBLElBRWRoekMsS0FBSzIvRSxpQkFBaUIsSUFBSTMvRSxLQUFLNC9FLG1CQUMvQjUvRSxLQUFLNi9FLDBCQUEwQixrQkFDL0I3L0UsS0FBSzgvRSxhQUFhLEdBQ2xCOS9FLEtBQUsrL0UsY0FBYyxHQUNuQi8vRSxLQUFLZ2dGLGNBQWMsR0FDbkJoZ0YsS0FBS2lnRixvQkFBb0IsR0FDekJqZ0YsS0FBS2tnRixvQkFBb0IsR0FDekJsZ0YsS0FBS21nRixpQkFBQUEsUUFDTG5nRixLQUFLb2dGLHFCQUFBQSxRQUNMcGdGLEtBQUtxZ0YsWUFBWSxHQUVqQnJnRixLQUFLa3NFLGVBQUFBLFFBRUxsc0UsS0FBS20xQyxLQUFLcWUsUUFBUXIrQyxHQUFHLE9BQU9neUMsR0FBQXY0QixLQUFJNXVCLEtBQUNtckUsR0FBQUEsRUFBR3JxRSxLQUFBOHRCLElBQU01dUIsSUFBQUEsQ0FBQUEsR0FDMUNBLEtBQUttMUMsS0FBS3FlLFFBQVFyK0MsR0FBRyxxQkFBcUIsV0FBQTtBQUN4Q3dwQixjQUFBQSxHQUFLd1csS0FBS3FlLFFBQVF6OUMsS0FBSyxnQkFBQTtZQUN6QixDQUFBLEdBQ0EvVixLQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsY0FBY2d5QyxHQUFBdlgsS0FBSTV2QyxLQUFDc2dGLFdBQUFBLEVBQVd4L0UsS0FBQTh1QyxJQUFNNXZDLElBQUFBLENBQUFBO1VBQzNEO0FBa1lDLGlCQWhZRDZ0QixHQUFBNnhELElBQUEsQ0FBQSxFQUFBbDVFLEtBQUEsY0FBQW5ELE9BSUEsV0FBQTtBQUF5QixnQkFBZHdJLEtBQU81SyxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsSUFBQUEsVUFBQSxDQUFBLElBQUcsQ0FBQTtBQUNuQmpCLGlCQUFLNkwsVUFBVUE7VUFDakIsRUFBQSxHQUVBLEVBQUFyRixLQUFBLE9BQUFuRCxPQU9BLFNBQUl3SSxJQUFBQTtBQUE4QixnQkFBckIwMEUsS0FBV3QvRSxVQUFBeUQsU0FBQSxLQUFBLFdBQUF6RCxVQUFBLENBQUEsS0FBQUEsVUFBQSxDQUFBO0FBQ3RCNEssWUFBQUEsS0NyQ1ksU0FDZDIwRSxJQUNBQyxJQUFBQTtBQUVBLGtCQUFNNTBFLEtBQVU0dEMsR0FDZCxFQUNFck4sT0FBT3EwQyxJQUNQQyxjQUFjaHpELE9BQU9pekQsV0FDckJDLGNBQWMsRUFBQSxHQUVoQkosUUFBQUEsS0FBQUEsS0FBYyxDQUFBLENBQUE7QUFHaEIsa0JBQUEsQ0FBS3Z4RCxHQUFjcGpCLEdBQVF1Z0MsS0FBQUE7QUFDekIsc0JBQU0sSUFBSXJvQyxVQUFVLGtDQUFBO0FBTXRCLGtCQUo2QixNQUF6QjhILEdBQVF1Z0MsTUFBTTFuQyxXQUNoQm1ILEdBQVF1Z0MsUUFBUXEwQyxLQUFBQSxFQUdvQixZQUFBLE9BQXpCNTBFLEdBQVE2MEUsZ0JBQTZCNzBFLEdBQVE2MEUsZUFBZTtBQUN2RSxzQkFBTSxJQUFJMzhFLFVBQVUscURBQUE7QUFHdEIsa0JBQUEsRUFFb0MsWUFBQSxPQUF6QjhILEdBQVErMEUsZ0JBQ2YvMEUsR0FBUTYwRSxnQkFBZ0I3MEUsR0FBUSswRTtBQUdsQyxzQkFBTSxJQUFJNzhFLFVBQ1IsK0RBQUE7QUFJSixxQkFBTzhIO1lBQ1QsRURDa0NBLElBQVM3TCxLQUFLbTFDLEtBQUsyZixXQUFBQTtBQUVqRCxnQkFHSTZSLElBQ0FrYSxJQUpFQyxLQUFjOWdGLEtBQUtnekMsT0FBT3NtQyxNQUFNdG1DLE9BQU95bUMsYUFDdkNzSCxLQUFlL2dGLEtBQUtnekMsT0FBT3NtQyxNQUFNdG1DLE9BQU8wbUM7QUFJOUMsZ0JBQW9CLE1BQWhCb0gsTUFBc0MsTUFBakJDO0FBTXZCRixjQUFBQSxLQUFZLEdBRVpsYSxLQUFRdUksR0FBWThSLFNBQVNoaEYsS0FBS20xQyxLQUFLL0ksT0FBT3ZnQyxHQUFRdWdDLEtBQUFBO3FCQUNqRCxTQUFJbTBDLElBQXNCO0FBRS9CLGtCQUFJVSxLQUFrQjtBQUN0Qix1QkFBV3R2QixNQUFVM3hELEtBQUttMUMsS0FBSy9JLE9BQU87QUFDcEMsb0JBQUlocUMsT0FBT3hCLFVBQVVILGVBQWVLLEtBQUtkLEtBQUttMUMsS0FBSy9JLE9BQU91bEIsRUFBQUE7QUFBQUEsMkJBQzNDM3hELEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUEsRUFDcEJ2Qix1QkFDUDZ3QixNQUFtQjtjQUd6QjtBQUNBLGtCQUFJQSxLQUFrQixNQUFNamhGLEtBQUttMUMsS0FBSzJmLFlBQVlwd0Q7QUFFaEQsdUJBQUEsS0FEQTFFLEtBQUttckUsSUFBSXQvRCxJQUFBQSxLQUFTO0FBSXBCODZELGNBQUFBLEtBQVF1SSxHQUFZOFIsU0FBU2hoRixLQUFLbTFDLEtBQUsvSSxPQUFPdmdDLEdBQVF1Z0MsS0FBQUEsR0FHdER5MEMsS0FBWSxVQURVN2dGLEtBQUttMUMsS0FBSzJmLFlBQVlwd0QsU0FDTixVQUFVLFdBSWhEbThFLE1BRGVsaEYsS0FBSytOLElBQUlvekUsS0FBYyxLQUFLQyxLQUFlLEdBQUE7WUFFNUQsT0FBTztBQUNML2dGLG1CQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssY0FBQSxHQUN2QjR3RCxLQUFRdUksR0FBWThSLFNBQVNoaEYsS0FBS20xQyxLQUFLL0ksT0FBT3ZnQyxHQUFRdWdDLEtBQUFBO0FBRXRELGtCQUdNODBDLEtBQWFKLE1BSG1DLE1BQXBDbmhGLEtBQUtzMUIsSUFBSTB4QyxHQUFNTixPQUFPTSxHQUFNUixJQUFBQSxJQUl4Q2diLEtBQWFKLE1BSG1DLE1BQXBDcGhGLEtBQUtzMUIsSUFBSTB4QyxHQUFNTCxPQUFPSyxHQUFNUCxJQUFBQTtBQUs5Q3lhLGNBQUFBLEtBQVlLLE1BQWNDLEtBQWFELEtBQWFDO1lBQ3REO0FBRUlOLFlBQUFBLEtBQVloMUUsR0FBUSswRSxlQUN0QkMsS0FBWWgxRSxHQUFRKzBFLGVBQ1hDLEtBQVloMUUsR0FBUTYwRSxpQkFDN0JHLEtBQVloMUUsR0FBUTYwRTtBQUd0QixnQkFDTVUsS0FBbUIsRUFDdkJscUUsVUFGYWc0RCxHQUFZbVMsV0FBVzFhLEVBQUFBLEdBR3BDbHJDLE9BQU9vbEQsSUFDUFMsV0FBV3oxRSxHQUFReTFFLFVBQUFBO0FBRXJCdGhGLGlCQUFLOFIsT0FBT3N2RSxFQUFBQTtVQUNkLEVBQUEsR0FJQSxFQUFBNTZFLEtBQUEsU0FBQW5ELE9BTUEsU0FBTXN1RCxJQUFBQTtBQUFzQixnQkFBZDlsRCxLQUFPNUssVUFBQXlELFNBQUEsS0FBQSxXQUFBekQsVUFBQSxDQUFBLElBQUFBLFVBQUEsQ0FBQSxJQUFHLENBQUE7QUFDdEIsZ0JBQUEsV0FBSWpCLEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUEsR0FBdUI7QUFDekMsa0JBQU00dkIsS0FBZSxFQUNuQmwwRSxHQUFHck4sS0FBS20xQyxLQUFLL0ksTUFBTXVsQixFQUFBQSxFQUFRdGtELEdBQzNCK0QsR0FBR3BSLEtBQUttMUMsS0FBSy9JLE1BQU11bEIsRUFBQUEsRUFBUXZnRCxFQUFBQTtBQUU3QnZGLGNBQUFBLEdBQVFxTCxXQUFXcXFFLElBQ25CMTFFLEdBQVEyMUUsZUFBZTd2QixJQUV2QjN4RCxLQUFLOFIsT0FBT2pHLEVBQUFBO1lBQ2Q7QUFDRXM4QixzQkFBUS9uQyxNQUFNLFdBQVd1eEQsS0FBUyxtQkFBQTtVQUV0QyxFQUFBLEdBRUEsRUFBQW5yRCxLQUFBLFVBQUFuRCxPQU9BLFNBQU93SSxJQUFBQTtBQUNMLGdCQUFBLFdBQUlBLElBQUo7QUFLQSxrQkFBc0IsUUFBbEJBLEdBQVFvZ0IsUUFBZ0I7QUFDMUIsb0JBQXdCLFFBQXBCcGdCLEdBQVFvZ0IsT0FBTzVlLEdBQUFBO0FBR2pCLHNCQURBeEIsR0FBUW9nQixPQUFPNWUsSUFBQUEsQ0FBS3hCLEdBQVFvZ0IsT0FBTzVlLEdBQUFBLENBQzlCc21ELEdBQWdCOW5ELEdBQVFvZ0IsT0FBTzVlLENBQUFBO0FBQ2xDLDBCQUFNLElBQUl0SixVQUNSLGtEQUFBO2dCQUFBO0FBSUo4SCxrQkFBQUEsR0FBUW9nQixPQUFPNWUsSUFBSTtBQUdyQixvQkFBd0IsUUFBcEJ4QixHQUFRb2dCLE9BQU83YSxHQUFBQTtBQUdqQixzQkFEQXZGLEdBQVFvZ0IsT0FBTzdhLElBQUFBLENBQUt2RixHQUFRb2dCLE9BQU83YSxHQUFBQSxDQUM5QnVpRCxHQUFnQjluRCxHQUFRb2dCLE9BQU83YSxDQUFBQTtBQUNsQywwQkFBTSxJQUFJck4sVUFDUixrREFBQTtnQkFBQTtBQUlKOEgsa0JBQUFBLEdBQVFvZ0IsT0FBTzVlLElBQUk7Y0FFdkI7QUFDRXhCLGdCQUFBQSxHQUFRb2dCLFNBQVMsRUFDZjVlLEdBQUcsR0FDSCtELEdBQUcsRUFBQTtBQUlQLGtCQUF3QixRQUFwQnZGLEdBQVFxTCxVQUFrQjtBQUM1QixvQkFBMEIsUUFBdEJyTCxHQUFRcUwsU0FBUzdKLEdBQUFBO0FBR25CLHNCQURBeEIsR0FBUXFMLFNBQVM3SixJQUFBQSxDQUFLeEIsR0FBUXFMLFNBQVM3SixHQUFBQSxDQUNsQ3NtRCxHQUFnQjluRCxHQUFRcUwsU0FBUzdKLENBQUFBO0FBQ3BDLDBCQUFNLElBQUl0SixVQUNSLG9EQUFBO2dCQUFBO0FBSUo4SCxrQkFBQUEsR0FBUXFMLFNBQVM3SixJQUFJO0FBR3ZCLG9CQUEwQixRQUF0QnhCLEdBQVFxTCxTQUFTOUYsR0FBQUE7QUFHbkIsc0JBREF2RixHQUFRcUwsU0FBUzlGLElBQUFBLENBQUt2RixHQUFRcUwsU0FBUzlGLEdBQUFBLENBQ2xDdWlELEdBQWdCOW5ELEdBQVFxTCxTQUFTOUYsQ0FBQUE7QUFDcEMsMEJBQU0sSUFBSXJOLFVBQ1Isb0RBQUE7Z0JBQUE7QUFJSjhILGtCQUFBQSxHQUFRcUwsU0FBUzdKLElBQUk7Y0FFekI7QUFDRXhCLGdCQUFBQSxHQUFRcUwsV0FBV2xYLEtBQUt5aEYsZ0JBQUFBO0FBRzFCLGtCQUFxQixRQUFqQjUxRSxHQUFRNHZCLE9BQUFBO0FBR1Ysb0JBREE1dkIsR0FBUTR2QixRQUFBQSxDQUFTNXZCLEdBQVE0dkIsT0FBQUEsRUFDbkI1dkIsR0FBUTR2QixRQUFRO0FBQ3BCLHdCQUFNLElBQUkxM0IsVUFDUiwwREFBQTtjQUFBO0FBSUo4SCxnQkFBQUEsR0FBUTR2QixRQUFRejdCLEtBQUttMUMsS0FBSzZPLEtBQUt2b0I7QUFBQUEseUJBRzdCNXZCLEdBQVF5MUUsY0FDVnoxRSxHQUFReTFFLFlBQVksRUFBRUksVUFBVSxFQUFBLElBQUEsVUFFOUI3MUUsR0FBUXkxRSxjQUNWejFFLEdBQVF5MUUsWUFBWSxFQUFFSSxVQUFVLEVBQUEsSUFBQSxTQUU5QjcxRSxHQUFReTFFLGNBQ1Z6MUUsR0FBUXkxRSxZQUFZLENBQUEsSUFBQSxXQUVsQnoxRSxHQUFReTFFLFVBQVVJLGFBQ3BCNzFFLEdBQVF5MUUsVUFBVUksV0FBVyxNQUFBLFdBRTNCNzFFLEdBQVF5MUUsVUFBVUssbUJBQ3BCOTFFLEdBQVF5MUUsVUFBVUssaUJBQWlCLGtCQUdyQzNoRixLQUFLNGhGLFlBQVkvMUUsRUFBQUE7WUF6RmpCO0FBRkVBLGNBQUFBLEtBQVUsQ0FBQTtVQTRGZCxFQUFBLEdBRUEsRUFBQXJGLEtBQUEsZUFBQW5ELE9BV0EsU0FBWXdJLElBQUFBO0FBQ1YsZ0JBQUEsV0FBSUEsSUFBSjtBQUdBN0wsbUJBQUs2L0UsMEJBQTBCaDBFLEdBQVF5MUUsVUFBVUssZ0JBRWpEM2hGLEtBQUtzZ0YsWUFBQUEsR0FBQUEsU0FDRHowRSxHQUFRZzJFLFdBQ1Y3aEYsS0FBS21nRixpQkFBaUJ0MEUsR0FBUTIxRSxjQUM5QnhoRixLQUFLb2dGLHFCQUFxQnYwRSxHQUFRb2dCLFNBSWIsS0FBbkJqc0IsS0FBSzgvRSxjQUNQOS9FLEtBQUs4aEYsa0JBQUFBLElBQWtCLEdBR3pCOWhGLEtBQUsrL0UsY0FBYy8vRSxLQUFLbTFDLEtBQUs2TyxLQUFLdm9CLE9BQ2xDejdCLEtBQUtpZ0Ysb0JBQW9CamdGLEtBQUttMUMsS0FBSzZPLEtBQUs0MUIsYUFDeEM1NUUsS0FBS2dnRixjQUFjbjBFLEdBQVE0dkIsT0FJM0J6N0IsS0FBS20xQyxLQUFLNk8sS0FBS3ZvQixRQUFRejdCLEtBQUtnZ0Y7QUFDNUIsa0JBdUJ3QzV2QyxJQVFqQ0ksSUEvQkR1eEMsS0FBYS9oRixLQUFLZ3pDLE9BQU9vbkMsWUFBWSxFQUN6Qy9zRSxHQUFHLE1BQU1yTixLQUFLZ3pDLE9BQU9zbUMsTUFBTXRtQyxPQUFPeW1DLGFBQ2xDcm9FLEdBQUcsTUFBTXBSLEtBQUtnekMsT0FBT3NtQyxNQUFNdG1DLE9BQU8wbUMsYUFBQUEsQ0FBQUEsR0FHOUJpRCxLQUVEb0YsR0FBVzEwRSxJQUFJeEIsR0FBUXFMLFNBQVM3SixHQUYvQnN2RSxLQUdEb0YsR0FBVzN3RSxJQUFJdkYsR0FBUXFMLFNBQVM5RjtBQWNyQyxrQkFaQXBSLEtBQUtrZ0Ysb0JBQW9CLEVBQ3ZCN3lFLEdBQ0VyTixLQUFLaWdGLGtCQUFrQjV5RSxJQUN2QnN2RSxLQUF1QjM4RSxLQUFLZ2dGLGNBQzVCbjBFLEdBQVFvZ0IsT0FBTzVlLEdBQ2pCK0QsR0FDRXBSLEtBQUtpZ0Ysa0JBQWtCN3VFLElBQ3ZCdXJFLEtBQXVCMzhFLEtBQUtnZ0YsY0FDNUJuMEUsR0FBUW9nQixPQUFPN2EsRUFBQUEsR0FJZ0IsTUFBL0J2RixHQUFReTFFLFVBQVVJO0FBQ3BCLG9CQUEyQjdpRSxRQUF2QjdlLEtBQUttZ0Y7QUFDUG5nRix1QkFBS2tzRSxlQUFlL2tCLEdBQUEvVyxLQUFBcHdDLEtBQUtnaUYsYUFBQUEsRUFBYWxoRixLQUFBc3ZDLElBQU1wd0MsSUFBQUEsR0FDNUNBLEtBQUttMUMsS0FBS3FlLFFBQVFyK0MsR0FBRyxjQUFjblYsS0FBS2tzRSxZQUFBQTs7QUFFeENsc0UsdUJBQUttMUMsS0FBSzZPLEtBQUt2b0IsUUFBUXo3QixLQUFLZ2dGLGFBQzVCaGdGLEtBQUttMUMsS0FBSzZPLEtBQUs0MUIsY0FBYzU1RSxLQUFLa2dGLG1CQUNsQ2xnRixLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssZ0JBQUE7O0FBR3pCL1YscUJBQUsyL0UsaUJBQ0gsS0FBSyxLQUFLOXpFLEdBQVF5MUUsVUFBVUksV0FBVyxTQUFVLElBQUksSUFDdkQxaEYsS0FBSzYvRSwwQkFBMEJoMEUsR0FBUXkxRSxVQUFVSyxnQkFFakQzaEYsS0FBS2tzRSxlQUFlL2tCLEdBQUEzVyxLQUFBeHdDLEtBQUs4aEYsaUJBQUFBLEVBQWlCaGhGLEtBQUEwdkMsSUFBTXh3QyxJQUFBQSxHQUNoREEsS0FBS20xQyxLQUFLcWUsUUFBUXIrQyxHQUFHLGNBQWNuVixLQUFLa3NFLFlBQUFBLEdBQ3hDbHNFLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxpQkFBQTtZQTNEekI7VUE2REYsRUFBQSxHQUVBLEVBQUF2UCxLQUFBLGlCQUFBbkQsT0FLQSxXQUFBO0FBQ0UsZ0JBQU1rK0UsS0FDRHZoRixLQUFLbTFDLEtBQUsvSSxNQUFNcHNDLEtBQUttZ0YsY0FBQUEsRUFBZ0I5eUUsR0FEcENrMEUsS0FFRHZoRixLQUFLbTFDLEtBQUsvSSxNQUFNcHNDLEtBQUttZ0YsY0FBQUEsRUFBZ0IvdUUsR0FFcEMyd0UsS0FBYS9oRixLQUFLZ3pDLE9BQU9vbkMsWUFBWSxFQUN6Qy9zRSxHQUFHLE1BQU1yTixLQUFLZ3pDLE9BQU9zbUMsTUFBTXRtQyxPQUFPeW1DLGFBQ2xDcm9FLEdBQUcsTUFBTXBSLEtBQUtnekMsT0FBT3NtQyxNQUFNdG1DLE9BQU8wbUMsYUFBQUEsQ0FBQUEsR0FFOUJpRCxLQUVEb0YsR0FBVzEwRSxJQUFJazBFLElBRmQ1RSxLQUdEb0YsR0FBVzN3RSxJQUFJbXdFLElBRWR0QixLQUFvQmpnRixLQUFLbTFDLEtBQUs2TyxLQUFLNDFCLGFBQ25Dc0csS0FBb0IsRUFDeEI3eUUsR0FDRTR5RSxHQUFrQjV5RSxJQUNsQnN2RSxLQUF1QjM4RSxLQUFLbTFDLEtBQUs2TyxLQUFLdm9CLFFBQ3RDejdCLEtBQUtvZ0YsbUJBQW1CL3lFLEdBQzFCK0QsR0FDRTZ1RSxHQUFrQjd1RSxJQUNsQnVyRSxLQUF1QjM4RSxLQUFLbTFDLEtBQUs2TyxLQUFLdm9CLFFBQ3RDejdCLEtBQUtvZ0YsbUJBQW1CaHZFLEVBQUFBO0FBRzVCcFIsaUJBQUttMUMsS0FBSzZPLEtBQUs0MUIsY0FBY3NHO1VBQy9CLEVBQUEsR0FFQSxFQUFBMTVFLEtBQUEsZUFBQW5ELE9BR0EsV0FBQTtBQUFBLHVCQUNNckQsS0FBS21nRixrQkFBQUEsV0FBZ0NuZ0YsS0FBS2tzRSxpQkFDNUNsc0UsS0FBS20xQyxLQUFLcWUsUUFBUWgrQyxJQUFJLGNBQWN4VixLQUFLa3NFLFlBQUFBLEdBQ3pDbHNFLEtBQUttZ0YsaUJBQUFBLFFBQ0xuZ0YsS0FBS29nRixxQkFBQUE7VUFFVCxFQUFBLEdBRUEsRUFBQTU1RSxLQUFBLHFCQUFBbkQsT0FJQSxXQUFBO0FBQW9DLGdCQUFsQjQrRSxLQUFRaGhGLFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUEsQ0FBQSxLQUFBQSxVQUFBLENBQUE7QUFDeEJqQixpQkFBSzgvRSxjQUFjOS9FLEtBQUsyL0UsZ0JBQ3hCMy9FLEtBQUs4L0UsYUFBQUEsU0FBYW1DLEtBQW9CLElBQU1qaUYsS0FBSzgvRTtBQUVqRCxnQkFBTW9DLEtBQVdDLEdBQWdCbmlGLEtBQUs2L0UsdUJBQUFBLEVBQ3BDNy9FLEtBQUs4L0UsVUFBQUE7QUFlUCxnQkFaQTkvRSxLQUFLbTFDLEtBQUs2TyxLQUFLdm9CLFFBQ2J6N0IsS0FBSysvRSxlQUFlLy9FLEtBQUtnZ0YsY0FBY2hnRixLQUFLKy9FLGVBQWVtQyxJQUM3RGxpRixLQUFLbTFDLEtBQUs2TyxLQUFLNDFCLGNBQWMsRUFDM0J2c0UsR0FDRXJOLEtBQUtpZ0Ysa0JBQWtCNXlFLEtBQ3RCck4sS0FBS2tnRixrQkFBa0I3eUUsSUFBSXJOLEtBQUtpZ0Ysa0JBQWtCNXlFLEtBQUs2MEUsSUFDMUQ5d0UsR0FDRXBSLEtBQUtpZ0Ysa0JBQWtCN3VFLEtBQ3RCcFIsS0FBS2tnRixrQkFBa0I5dUUsSUFBSXBSLEtBQUtpZ0Ysa0JBQWtCN3VFLEtBQUs4d0UsR0FBQUEsR0FJeERsaUYsS0FBSzgvRSxjQUFjLEdBQUs7QUFHWSxrQkFBQW52QztBQUF0QyxrQkFGQTN3QyxLQUFLbTFDLEtBQUtxZSxRQUFRaCtDLElBQUksY0FBY3hWLEtBQUtrc0UsWUFBQUEsR0FDekNsc0UsS0FBSzgvRSxhQUFhLEdBQ1NqaEUsUUFBdkI3ZSxLQUFLbWdGO0FBQ1BuZ0YscUJBQUtrc0UsZUFBZS9rQixHQUFBeFcsS0FBQTN3QyxLQUFLZ2lGLGFBQUFBLEVBQWFsaEYsS0FBQTZ2QyxJQUFNM3dDLElBQUFBLEdBQzVDQSxLQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsY0FBY25WLEtBQUtrc0UsWUFBQUE7QUFFMUNsc0UsbUJBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxtQkFBQTtZQUN6QjtVQUNGLEVBQUEsR0FFQSxFQUFBdlAsS0FBQSxZQUFBbkQsT0FJQSxXQUFBO0FBQ0UsbUJBQU9yRCxLQUFLbTFDLEtBQUs2TyxLQUFLdm9CO1VBQ3hCLEVBQUEsR0FFQSxFQUFBajFCLEtBQUEsbUJBQUFuRCxPQUlBLFdBQUE7QUFDRSxtQkFBT3JELEtBQUtnekMsT0FBT29uQyxZQUFZLEVBQzdCL3NFLEdBQUcsTUFBTXJOLEtBQUtnekMsT0FBT3NtQyxNQUFNdG1DLE9BQU95bUMsYUFDbENyb0UsR0FBRyxNQUFNcFIsS0FBS2d6QyxPQUFPc21DLE1BQU10bUMsT0FBTzBtQyxhQUFBQSxDQUFBQTtVQUV0QyxFQUFBLENBQUEsQ0FBQSxHQUFDZ0c7UUFBQSxFQTdaTztBRUxLLGlCQUFTMEMsR0FBU3YyRSxJQUFBQTtBQUMvQixjQU9JK0MsSUFQQXFxQixLQUFpQnB0QixNQUFXQSxHQUFRb3RCLGtCQUFBQSxPQUVwQzJqRCxLQUFZL3dFLE1BQVdBLEdBQVErd0UsYUFBYTk4RSxRQUU1Q3VpRixLQUFtQixDQUFBLEdBQ25CQyxLQUFTLEVBQUNDLFNBQVEsQ0FBRSxHQUFFQyxPQUFNLENBQUUsRUFBQSxHQUM5QkMsS0FBUSxDQUFBO0FBSVosZUFBSzd6RSxLQUFJLElBQUlBLE1BQUssS0FBS0E7QUFBTTZ6RSxZQUFBQSxHQUFNMTlFLE9BQU8yOUUsYUFBYTl6RSxFQUFBQSxDQUFBQSxJQUFNLEVBQUM4K0MsTUFBVzkrQyxLQUFJLEtBQVYsSUFBZXE5QixPQUFBQSxNQUFPO0FBRXpGLGVBQUtyOUIsS0FBSSxJQUFJQSxNQUFLLElBQUlBO0FBQU02ekUsWUFBQUEsR0FBTTE5RSxPQUFPMjlFLGFBQWE5ekUsRUFBQUEsQ0FBQUEsSUFBTSxFQUFDOCtDLE1BQUs5K0MsSUFBR3E5QixPQUFBQSxLQUFPO0FBRTVFLGVBQUtyOUIsS0FBSSxHQUFJQSxNQUFLLEdBQUtBO0FBQU02ekUsWUFBQUEsR0FBTSxLQUFLN3pFLEVBQUFBLElBQUssRUFBQzgrQyxNQUFLLEtBQUs5K0MsSUFBR3E5QixPQUFBQSxNQUFPO0FBRWxFLGVBQUtyOUIsS0FBSSxHQUFJQSxNQUFLLElBQU1BO0FBQU02ekUsWUFBQUEsR0FBTSxNQUFNN3pFLEVBQUFBLElBQUssRUFBQzgrQyxNQUFLLE1BQU05K0MsSUFBR3E5QixPQUFBQSxNQUFPO0FBRXJFLGVBQUtyOUIsS0FBSSxHQUFJQSxNQUFLLEdBQUtBO0FBQU02ekUsWUFBQUEsR0FBTSxRQUFRN3pFLEVBQUFBLElBQUssRUFBQzgrQyxNQUFLLEtBQUs5K0MsSUFBR3E5QixPQUFBQSxNQUFPO0FBR3JFdzJDLFVBQUFBLEdBQU0sTUFBQSxJQUFVLEVBQUMvMEIsTUFBSyxLQUFLemhCLE9BQUFBLE1BQU8sR0FDbEN3MkMsR0FBTSxNQUFBLElBQVUsRUFBQy8wQixNQUFLLEtBQUt6aEIsT0FBQUEsTUFBTyxHQUNsQ3cyQyxHQUFNLE1BQUEsSUFBVSxFQUFDLzBCLE1BQUssS0FBS3poQixPQUFBQSxNQUFPLEdBQ2xDdzJDLEdBQU0sTUFBQSxJQUFVLEVBQUMvMEIsTUFBSyxLQUFLemhCLE9BQUFBLE1BQU8sR0FDbEN3MkMsR0FBTSxNQUFBLElBQVUsRUFBQy8wQixNQUFLLEtBQUt6aEIsT0FBQUEsTUFBTyxHQUVsQ3cyQyxHQUFZLE9BQUssRUFBQy8wQixNQUFLLElBQUl6aEIsT0FBQUEsTUFBTyxHQUNsQ3cyQyxHQUFVLEtBQU8sRUFBQy8wQixNQUFLLElBQUl6aEIsT0FBQUEsTUFBTyxHQUNsQ3cyQyxHQUFhLFFBQUksRUFBQy8wQixNQUFLLElBQUl6aEIsT0FBQUEsTUFBTyxHQUNsQ3cyQyxHQUFZLE9BQUssRUFBQy8wQixNQUFLLElBQUl6aEIsT0FBQUEsTUFBTyxHQUVsQ3cyQyxHQUFhLFFBQUksRUFBQy8wQixNQUFLLElBQUl6aEIsT0FBQUEsTUFBTyxHQUNsQ3cyQyxHQUFhLFFBQUksRUFBQy8wQixNQUFLLElBQUl6aEIsT0FBQUEsTUFBTyxHQUNsQ3cyQyxHQUFhLFFBQUksRUFBQy8wQixNQUFLLElBQUl6aEIsT0FBQUEsT0FBT3B0QixHQUNsQzRqRSxHQUFXLE1BQU0sRUFBQy8wQixNQUFLLElBQUl6aEIsT0FBQUEsTUFBTyxHQUNsQ3cyQyxHQUFpQixZQUFJLEVBQUMvMEIsTUFBSyxHQUFHemhCLE9BQUFBLE1BQU8sR0FDckN3MkMsR0FBVyxNQUFVLEVBQUMvMEIsTUFBSyxHQUFHemhCLE9BQUFBLE1BQU8sR0FDckN3MkMsR0FBWSxPQUFTLEVBQUMvMEIsTUFBSyxJQUFJemhCLE9BQUFBLE1BQU8sR0FDdEN3MkMsR0FBVyxNQUFVLEVBQUMvMEIsTUFBSyxJQUFJemhCLE9BQUFBLE1BQU8sR0FDdEN3MkMsR0FBYyxTQUFPLEVBQUMvMEIsTUFBSyxJQUFJemhCLE9BQUFBLE1BQU8sR0FDdEN3MkMsR0FBYyxTQUFPLEVBQUMvMEIsTUFBSyxJQUFJemhCLE9BQUFBLE1BQU8sR0FDdEN3MkMsR0FBZ0IsV0FBSyxFQUFDLzBCLE1BQUssSUFBSXpoQixPQUFBQSxNQUFPLEdBRXRDdzJDLEdBQU0sR0FBQSxJQUFXLEVBQUMvMEIsTUFBSyxLQUFLemhCLE9BQUFBLE1BQU8sR0FDbkN3MkMsR0FBTSxHQUFBLElBQVcsRUFBQy8wQixNQUFLLEtBQUt6aEIsT0FBQUEsTUFBTyxHQUNuQ3cyQyxHQUFNLEdBQUEsSUFBVyxFQUFDLzBCLE1BQUssS0FBS3poQixPQUFBQSxNQUFPLEdBQ25DdzJDLEdBQU0sR0FBQSxJQUFXLEVBQUMvMEIsTUFBSyxLQUFLemhCLE9BQUFBLE1BQU87QUFJbkMsY0FBSTAyQyxLQUFPLFNBQVN0dEUsSUFBQUE7QUFBUXV0RSxZQUFBQSxHQUFZdnRFLElBQU0sU0FBQTtVQUFXLEdBQ3JEd3RFLEtBQUssU0FBU3h0RSxJQUFBQTtBQUFRdXRFLFlBQUFBLEdBQVl2dEUsSUFBTSxPQUFBO1VBQVMsR0FHakR1dEUsS0FBYyxTQUFTdnRFLElBQU04QyxJQUFBQTtBQUMvQixnQkFBQSxXQUFJbXFFLEdBQU9ucUUsRUFBQUEsRUFBTTlDLEdBQU15dEUsT0FBQUEsR0FBd0I7QUFFN0MsdUJBRElDLEtBQVFULEdBQU9ucUUsRUFBQUEsRUFBTTlDLEdBQU15dEUsT0FBQUEsR0FDdEJsMEUsS0FBSSxHQUFHQSxLQUFJbTBFLEdBQU1yK0UsUUFBUWtLO0FBQUFBLGlCQUFBQSxXQUM1Qm0wRSxHQUFNbjBFLEVBQUFBLEVBQUdxOUIsU0FHYyxLQUFsQjgyQyxHQUFNbjBFLEVBQUFBLEVBQUdxOUIsU0FBbUMsS0FBbEI1MkIsR0FBTTJ0RSxZQUdkLEtBQWxCRCxHQUFNbjBFLEVBQUFBLEVBQUdxOUIsU0FBb0MsS0FBbEI1MkIsR0FBTTJ0RSxhQUx4Q0QsR0FBTW4wRSxFQUFBQSxFQUFHeE4sR0FBR2lVLEVBQUFBO0FBVU0sbUJBQWxCNGpCLE1BQ0Y1akIsR0FBTTRqQixlQUFBQTtZQUVUO1VBQ0w7QUF5RkUsaUJBdEZBb3BELEdBQWlCN2hGLE9BQU8sU0FBU2dHLElBQUt1dEIsSUFBVTViLElBQUFBO0FBSTlDLGdCQUFBLFdBSElBLE9BQ0ZBLEtBQU8sWUFBQSxXQUVMc3FFLEdBQU1qOEUsRUFBQUE7QUFDUixvQkFBTSxJQUFJd2hDLE1BQU0sc0JBQXNCeGhDLEVBQUFBO0FBQUFBLHVCQUVwQzg3RSxHQUFPbnFFLEVBQUFBLEVBQU1zcUUsR0FBTWo4RSxFQUFBQSxFQUFLa25ELElBQUFBLE1BQzFCNDBCLEdBQU9ucUUsRUFBQUEsRUFBTXNxRSxHQUFNajhFLEVBQUFBLEVBQUtrbkQsSUFBQUEsSUFBUSxDQUFBLElBRWxDNDBCLEdBQU9ucUUsRUFBQUEsRUFBTXNxRSxHQUFNajhFLEVBQUFBLEVBQUtrbkQsSUFBQUEsRUFBTTdtRCxLQUFLLEVBQUN6RixJQUFHMnlCLElBQVVrWSxPQUFNdzJDLEdBQU1qOEUsRUFBQUEsRUFBS3lsQyxNQUFBQSxDQUFBQTtVQUN0RSxHQUlFbzJDLEdBQWlCWSxVQUFVLFNBQVNsdkQsSUFBVTViLElBQUFBO0FBSTVDLHFCQUFTM1IsTUFBQUEsV0FITDJSLE9BQ0ZBLEtBQU8sWUFFT3NxRTtBQUNWQSxjQUFBQSxHQUFNaGlGLGVBQWUrRixFQUFBQSxLQUN2QjY3RSxHQUFpQjdoRixLQUFLZ0csSUFBSXV0QixJQUFTNWIsRUFBQUE7VUFHM0MsR0FHRWtxRSxHQUFpQmEsU0FBUyxTQUFTN3RFLElBQUFBO0FBQ2pDLHFCQUFTN08sTUFBT2k4RTtBQUNkLGtCQUFJQSxHQUFNaGlGLGVBQWUrRixFQUFBQSxHQUFNO0FBQzdCLG9CQUFzQixLQUFsQjZPLEdBQU0ydEUsWUFBd0MsS0FBcEJQLEdBQU1qOEUsRUFBQUEsRUFBS3lsQyxTQUFpQjUyQixHQUFNeXRFLFdBQVdMLEdBQU1qOEUsRUFBQUEsRUFBS2tuRDtBQUNwRix5QkFBT2xuRDtBQUVKLG9CQUFzQixLQUFsQjZPLEdBQU0ydEUsWUFBeUMsS0FBcEJQLEdBQU1qOEUsRUFBQUEsRUFBS3lsQyxTQUFrQjUyQixHQUFNeXRFLFdBQVdMLEdBQU1qOEUsRUFBQUEsRUFBS2tuRDtBQUMzRix5QkFBT2xuRDtBQUVKLG9CQUFJNk8sR0FBTXl0RSxXQUFXTCxHQUFNajhFLEVBQUFBLEVBQUtrbkQsUUFBZSxXQUFQbG5EO0FBQzNDLHlCQUFPQTtjQUVWO0FBRUgsbUJBQU87VUFDWCxHQUdFNjdFLEdBQWlCYyxTQUFTLFNBQVMzOEUsSUFBS3V0QixJQUFVNWIsSUFBQUE7QUFJaEQsZ0JBQUEsV0FISUEsT0FDRkEsS0FBTyxZQUFBLFdBRUxzcUUsR0FBTWo4RSxFQUFBQTtBQUNSLG9CQUFNLElBQUl3aEMsTUFBTSxzQkFBc0J4aEMsRUFBQUE7QUFFeEMsZ0JBQUEsV0FBSXV0QixJQUF3QjtBQUMxQixrQkFBSXF2RCxLQUFjLENBQUEsR0FDZEwsS0FBUVQsR0FBT25xRSxFQUFBQSxFQUFNc3FFLEdBQU1qOEUsRUFBQUEsRUFBS2tuRCxJQUFBQTtBQUNwQyxrQkFBQSxXQUFJcTFCO0FBQ0YseUJBQVNuMEUsS0FBSSxHQUFHQSxLQUFJbTBFLEdBQU1yK0UsUUFBUWtLO0FBQzFCbTBFLGtCQUFBQSxHQUFNbjBFLEVBQUFBLEVBQUd4TixNQUFNMnlCLE1BQVlndkQsR0FBTW4wRSxFQUFBQSxFQUFHcTlCLFNBQVN3MkMsR0FBTWo4RSxFQUFBQSxFQUFLeWxDLFNBQzVEbTNDLEdBQVl2OEUsS0FBS3k3RSxHQUFPbnFFLEVBQUFBLEVBQU1zcUUsR0FBTWo4RSxFQUFBQSxFQUFLa25ELElBQUFBLEVBQU05K0MsRUFBQUEsQ0FBQUE7QUFJckQwekUsY0FBQUEsR0FBT25xRSxFQUFBQSxFQUFNc3FFLEdBQU1qOEUsRUFBQUEsRUFBS2tuRCxJQUFBQSxJQUFRMDFCO1lBQ2pDO0FBRUNkLGNBQUFBLEdBQU9ucUUsRUFBQUEsRUFBTXNxRSxHQUFNajhFLEVBQUFBLEVBQUtrbkQsSUFBQUEsSUFBUSxDQUFBO1VBRXRDLEdBR0UyMEIsR0FBaUJuL0MsUUFBUSxXQUFBO0FBQ3ZCby9DLFlBQUFBLEtBQVMsRUFBQ0MsU0FBUSxDQUFFLEdBQUVDLE9BQU0sQ0FBRSxFQUFBO1VBQ2xDLEdBR0VILEdBQWlCMWtELFVBQVUsV0FBQTtBQUN6QjJrRCxZQUFBQSxLQUFTLEVBQUNDLFNBQVEsQ0FBRSxHQUFFQyxPQUFNLENBQUUsRUFBQSxHQUM5QjVGLEdBQVVqbkUsb0JBQW9CLFdBQVdndEUsSUFBQUEsSUFBTSxHQUMvQy9GLEdBQVVqbkUsb0JBQW9CLFNBQVNrdEUsSUFBQUEsSUFBSTtVQUMvQyxHQUdFakcsR0FBVXhuRSxpQkFBaUIsV0FBVXV0RSxJQUFBQSxJQUFLLEdBQzFDL0YsR0FBVXhuRSxpQkFBaUIsU0FBUXl0RSxJQUFBQSxJQUFHLEdBRy9CUjtRQUNUO0FDbEtBLFlBR01nQixLQUFpQixXQUFBO0FBS3JCLG1CQUFBQSxHQUFZbHVDLElBQU1uQyxJQUFBQTtBQUFRLGdCQUFBclUsS0FBQTMrQjtBQUFBMmpCLGVBQUFBLE1BQUEwL0QsRUFBQUEsR0FDeEJyakYsS0FBS20xQyxPQUFPQSxJQUNabjFDLEtBQUtnekMsU0FBU0EsSUFFZGh6QyxLQUFLc2pGLGVBQUFBLE9BQ0x0akYsS0FBS3VqRixvQkFBb0IsQ0FBQSxHQUN6QnZqRixLQUFLd2pGLGlCQUFpQixDQUFBLEdBQ3RCeGpGLEtBQUtxZ0YsWUFBWSxHQUNqQnJnRixLQUFLeWpGLFlBQUFBLE9BRUx6akYsS0FBS20xQyxLQUFLcWUsUUFBUXIrQyxHQUFHLFlBQVksV0FBQTtBQUMvQndwQixjQUFBQSxHQUFLOGtELFlBQUFBLE1BQ0w5a0QsR0FBSytrRCwwQkFBQUE7WUFDUCxDQUFBLEdBQ0ExakYsS0FBS20xQyxLQUFLcWUsUUFBUXIrQyxHQUFHLGNBQWMsV0FBQTtBQUNqQ3dwQixjQUFBQSxHQUFLOGtELFlBQUFBLE9BQ0w5a0QsR0FBSytrRCwwQkFBQUE7WUFDUCxDQUFBLEdBQ0ExakYsS0FBS20xQyxLQUFLcWUsUUFBUXIrQyxHQUFHLFdBQVcsV0FBQTtBQUFBLHlCQUMxQndwQixHQUFLeWpELFlBQ1B6akQsR0FBS3lqRCxTQUFTemtELFFBQUFBO1lBRWxCLENBQUEsR0FFQTM5QixLQUFLNkwsVUFBVSxDQUFBO1VBQ2pCO0FBeWJDLGlCQXZiRGdpQixHQUFBdzFELElBQUEsQ0FBQSxFQUFBNzhFLEtBQUEsY0FBQW5ELE9BSUEsU0FBV3dJLElBQUFBO0FBQUFBLHVCQUNMQSxPQUNGN0wsS0FBSzZMLFVBQVVBLElBQ2Y3TCxLQUFLMGEsT0FBQUE7VUFFVCxFQUFBLEdBRUEsRUFBQWxVLEtBQUEsVUFBQW5ELE9BR0EsV0FBQTtBQUFBLHFCQUNNckQsS0FBSzZMLFFBQVE4M0Usb0JBQUFBLFVBQ1gzakYsS0FBS3NqRixnQkFDUHRqRixLQUFLNGpGLHVCQUFBQSxJQUFBQSxTQUVFNWpGLEtBQUtzakYsZ0JBQ2R0akYsS0FBSzZqRixnQkFBQUEsR0FHUDdqRixLQUFLMGpGLDBCQUFBQTtVQUNQLEVBQUEsR0FFQSxFQUFBbDlFLEtBQUEsbUJBQUFuRCxPQUdBLFdBQUE7QUFFRSxnQkFBcUMsS0FBakNyRCxLQUFLdWpGLGtCQUFrQjcrRSxRQUFhO0FBQ3RDLHVCQUFTa0ssS0FBSSxHQUFHQSxLQUFJNU8sS0FBS3VqRixrQkFBa0I3K0UsUUFBUWtLO0FBQ2pENU8scUJBQUt1akYsa0JBQWtCMzBFLEVBQUFBLEVBQUcrdUIsUUFBQUE7QUFFNUIzOUIsbUJBQUt1akYsb0JBQW9CLENBQUE7WUFDM0I7QUFJRXZqRixpQkFBSzhqRixpQkFDTDlqRixLQUFLOGpGLGNBQXVCLFdBQzVCOWpGLEtBQUs4akYsY0FBdUIsUUFBRWxxRCxjQUU5QjU1QixLQUFLOGpGLGNBQXVCLFFBQUVscUQsV0FBVzBiLFlBQ3ZDdDFDLEtBQUs4akYsY0FBdUIsT0FBQSxHQUloQzlqRixLQUFLc2pGLGVBQUFBO1VBQ1AsRUFBQSxHQUVBLEVBQUE5OEUsS0FBQSwwQkFBQW5ELE9BUUEsV0FBQTtBQUF5QixnQkFBQTBnQyxLQUFBL2pDO0FBQ3ZCQSxpQkFBSzZqRixnQkFBQUEsR0FFTDdqRixLQUFLOGpGLGdCQUFnQixDQUFBO0FBQ3JCLGdCQUFNQyxLQUFpQixDQUNyQixNQUNBLFFBQ0EsUUFDQSxTQUNBLFVBQ0EsV0FDQSxhQUFBLEdBRUlDLEtBQXVCLENBQzNCLFdBQ0EsYUFDQSxhQUNBLGNBQ0EsV0FDQSxZQUNBLE1BQUE7QUFHRmhrRixpQkFBSzhqRixjQUF1QixVQUFJamlGLFNBQVNpSCxjQUFjLEtBQUEsR0FDdkQ5SSxLQUFLOGpGLGNBQXVCLFFBQUUvRyxZQUFZLGtCQUMxQy84RSxLQUFLZ3pDLE9BQU9zbUMsTUFBTXAvRCxZQUFZbGEsS0FBSzhqRixjQUF1QixPQUFBO0FBRTFELHFCQUFTbDFFLEtBQUksR0FBR0EsS0FBSW0xRSxHQUFlci9FLFFBQVFrSyxNQUFLO0FBQzlDNU8sbUJBQUs4akYsY0FBY0MsR0FBZW4xRSxFQUFBQSxDQUFBQSxJQUFNL00sU0FBU2lILGNBQWMsS0FBQSxHQUMvRDlJLEtBQUs4akYsY0FBY0MsR0FBZW4xRSxFQUFBQSxDQUFBQSxFQUFJbXVFLFlBQ3BDLG9CQUFvQmdILEdBQWVuMUUsRUFBQUEsR0FDckM1TyxLQUFLOGpGLGNBQXVCLFFBQUU1cEUsWUFDNUJsYSxLQUFLOGpGLGNBQWNDLEdBQWVuMUUsRUFBQUEsQ0FBQUEsQ0FBQUE7QUFHcEMsa0JBQ3dDZ2dCLElBRWpDZ2hCLElBSERzckMsS0FBUyxJQUFJbnlDLEdBQU8vb0MsS0FBSzhqRixjQUFjQyxHQUFlbjFFLEVBQUFBLENBQUFBLENBQUFBO0FBQzVELGtCQUFnQyxXQUE1Qm8xRSxHQUFxQnAxRSxFQUFBQTtBQUN2QnFzRSxtQkFBUUMsSUFBUS96QixHQUFBdjRCLEtBQUk1dUIsS0FBQ2lrRixJQUFBQSxFQUFJbmpGLEtBQUE4dEIsSUFBTTV1QixJQUFBQSxDQUFBQTs7QUFFL0JpN0UsbUJBQVFDLElBQVEvekIsR0FBQXZYLEtBQUE1dkMsS0FBS2trRixZQUFBQSxFQUFZcGpGLEtBQUE4dUMsSUFBTTV2QyxNQUFNZ2tGLEdBQXFCcDFFLEVBQUFBLENBQUFBLENBQUFBO0FBR3BFNU8sbUJBQUt1akYsa0JBQWtCMThFLEtBQUtxMEUsRUFBQUE7WUFDOUI7QUFJQSxnQkFBTVEsS0FBYyxJQUFJM3lDLEdBQU8vb0MsS0FBS2d6QyxPQUFPc21DLEtBQUFBO0FBQzNDNkIsZUFBVU8sSUFBYSxXQUFBO0FBQ3JCMzNDLGNBQUFBLEdBQUtvZ0QsY0FBQUE7WUFDUCxDQUFBLEdBQ0Fua0YsS0FBS3VqRixrQkFBa0IxOEUsS0FBSzYwRSxFQUFBQSxHQUU1QjE3RSxLQUFLc2pGLGVBQUFBO1VBQ1AsRUFBQSxHQUVBLEVBQUE5OEUsS0FBQSxnQkFBQW5ELE9BSUEsU0FBYStnRixJQUFBQTtBQUNvQyxnQkFBQWgwQztBQUFBQSx1QkFBM0Nwd0MsS0FBS3dqRixlQUFlWSxFQUFBQSxNQUN0QnBrRixLQUFLd2pGLGVBQWVZLEVBQUFBLElBQVVqOUIsR0FBQS9XLEtBQUFBLEtBQUtnMEMsRUFBQUEsQ0FBQUEsRUFBT3RqRixLQUFBc3ZDLElBQU1wd0MsSUFBQUEsR0FDaERBLEtBQUttMUMsS0FBS3FlLFFBQVFyK0MsR0FBRyxjQUFjblYsS0FBS3dqRixlQUFlWSxFQUFBQSxDQUFBQSxHQUN2RHBrRixLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssaUJBQUE7VUFFM0IsRUFBQSxHQUVBLEVBQUF2UCxLQUFBLG9CQUFBbkQsT0FJQSxTQUFpQitnRixJQUFBQTtBQUFBQSx1QkFDWHBrRixLQUFLd2pGLGVBQWVZLEVBQUFBLE1BQ3RCcGtGLEtBQUttMUMsS0FBS3FlLFFBQVFoK0MsSUFBSSxjQUFjeFYsS0FBS3dqRixlQUFlWSxFQUFBQSxDQUFBQSxHQUN4RHBrRixLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssZ0JBQUEsR0FBQSxPQUNoQi9WLEtBQUt3akYsZUFBZVksRUFBQUE7VUFFL0IsRUFBQSxHQUVBLEVBQUE1OUUsS0FBQSxRQUFBbkQsT0FLQSxXQUFBO0FBQUEsYUFDTSxvQkFBSTJzQixRQUFPem5CLFFBQUFBLElBQVl2SSxLQUFLcWdGLFlBQVksUUFFMUNyZ0YsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLE9BQU8sRUFBRTJyRSxVQUFVLElBQUEsQ0FBQSxHQUMxQzFoRixLQUFLcWdGLGFBQVksb0JBQUlyd0QsUUFBT3puQixRQUFBQTtVQUVoQyxFQUFBLEdBRUEsRUFBQS9CLEtBQUEsaUJBQUFuRCxPQUtBLFdBQUE7QUFDRSxxQkFBV2doRixNQUFlcmtGLEtBQUt3akY7QUFFM0JwaEYscUJBQU94QixVQUFVSCxlQUFlSyxLQUFLZCxLQUFLd2pGLGdCQUFnQmEsRUFBQUEsTUFFMURya0YsS0FBS20xQyxLQUFLcWUsUUFBUWgrQyxJQUFJLGNBQWN4VixLQUFLd2pGLGVBQWVhLEVBQUFBLENBQUFBLEdBQ3hEcmtGLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxnQkFBQTtBQUczQi9WLGlCQUFLd2pGLGlCQUFpQixDQUFBO1VBQ3hCLEVBQUEsR0FDQSxFQUFBaDlFLEtBQUEsV0FBQW5ELE9BSUEsV0FBQTtBQUNFckQsaUJBQUttMUMsS0FBSzZPLEtBQUs0MUIsWUFBWXhvRSxLQUFLcFIsS0FBSzZMLFFBQVF5NEUsU0FBU0MsTUFBTW56RTtVQUM5RCxFQUFBLEdBQ0EsRUFBQTVLLEtBQUEsYUFBQW5ELE9BSUEsV0FBQTtBQUNFckQsaUJBQUttMUMsS0FBSzZPLEtBQUs0MUIsWUFBWXhvRSxLQUFLcFIsS0FBSzZMLFFBQVF5NEUsU0FBU0MsTUFBTW56RTtVQUM5RCxFQUFBLEdBQ0EsRUFBQTVLLEtBQUEsYUFBQW5ELE9BSUEsV0FBQTtBQUNFckQsaUJBQUttMUMsS0FBSzZPLEtBQUs0MUIsWUFBWXZzRSxLQUFLck4sS0FBSzZMLFFBQVF5NEUsU0FBU0MsTUFBTWwzRTtVQUM5RCxFQUFBLEdBQ0EsRUFBQTdHLEtBQUEsY0FBQW5ELE9BSUEsV0FBQTtBQUNFckQsaUJBQUttMUMsS0FBSzZPLEtBQUs0MUIsWUFBWXZzRSxLQUFLck4sS0FBSzZMLFFBQVF5NEUsU0FBU0MsTUFBTWwzRTtVQUM5RCxFQUFBLEdBQ0EsRUFBQTdHLEtBQUEsV0FBQW5ELE9BSUEsV0FBQTtBQUNFLGdCQUFNbWhGLEtBQVd4a0YsS0FBS20xQyxLQUFLNk8sS0FBS3ZvQixPQUMxQkEsS0FBUXo3QixLQUFLbTFDLEtBQUs2TyxLQUFLdm9CLFNBQVMsSUFBSXo3QixLQUFLNkwsUUFBUXk0RSxTQUFTQyxNQUFNRSxPQUNoRTdLLEtBQWM1NUUsS0FBS20xQyxLQUFLNk8sS0FBSzQxQixhQUM3QjhLLEtBQVlqcEQsS0FBUStvRCxJQUNwQkcsTUFDSCxJQUFJRCxNQUFhMWtGLEtBQUtnekMsT0FBT3VvQyxpQkFBaUJsdUUsSUFDL0N1c0UsR0FBWXZzRSxJQUFJcTNFLElBQ1pFLE1BQ0gsSUFBSUYsTUFBYTFrRixLQUFLZ3pDLE9BQU91b0MsaUJBQWlCbnFFLElBQy9Dd29FLEdBQVl4b0UsSUFBSXN6RTtBQUVsQjFrRixpQkFBS20xQyxLQUFLNk8sS0FBS3ZvQixRQUFRQSxJQUN2Qno3QixLQUFLbTFDLEtBQUs2TyxLQUFLNDFCLGNBQWMsRUFBRXZzRSxHQUFHczNFLElBQUl2ekUsR0FBR3d6RSxHQUFBQSxHQUN6QzVrRixLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssUUFBUSxFQUM3QjhpQixXQUFXLEtBQ1g0QyxPQUFPejdCLEtBQUttMUMsS0FBSzZPLEtBQUt2b0IsT0FDdEJvcEQsU0FBUyxLQUFBLENBQUE7VUFFYixFQUFBLEdBRUEsRUFBQXIrRSxLQUFBLFlBQUFuRCxPQUlBLFdBQUE7QUFDRSxnQkFBTW1oRixLQUFXeGtGLEtBQUttMUMsS0FBSzZPLEtBQUt2b0IsT0FDMUJBLEtBQVF6N0IsS0FBS20xQyxLQUFLNk8sS0FBS3ZvQixTQUFTLElBQUl6N0IsS0FBSzZMLFFBQVF5NEUsU0FBU0MsTUFBTUUsT0FDaEU3SyxLQUFjNTVFLEtBQUttMUMsS0FBSzZPLEtBQUs0MUIsYUFDN0I4SyxLQUFZanBELEtBQVErb0QsSUFDcEJHLE1BQ0gsSUFBSUQsTUFBYTFrRixLQUFLZ3pDLE9BQU91b0MsaUJBQWlCbHVFLElBQy9DdXNFLEdBQVl2c0UsSUFBSXEzRSxJQUNaRSxNQUNILElBQUlGLE1BQWExa0YsS0FBS2d6QyxPQUFPdW9DLGlCQUFpQm5xRSxJQUMvQ3dvRSxHQUFZeG9FLElBQUlzekU7QUFFbEIxa0YsaUJBQUttMUMsS0FBSzZPLEtBQUt2b0IsUUFBUUEsSUFDdkJ6N0IsS0FBS20xQyxLQUFLNk8sS0FBSzQxQixjQUFjLEVBQUV2c0UsR0FBR3MzRSxJQUFJdnpFLEdBQUd3ekUsR0FBQUEsR0FDekM1a0YsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLFFBQVEsRUFDN0I4aUIsV0FBVyxLQUNYNEMsT0FBT3o3QixLQUFLbTFDLEtBQUs2TyxLQUFLdm9CLE9BQ3RCb3BELFNBQVMsS0FBQSxDQUFBO1VBRWIsRUFBQSxHQUVBLEVBQUFyK0UsS0FBQSw2QkFBQW5ELE9BR0EsV0FBQTtBQUE0QixnQkFpQkttdEMsSUFBQUcsSUFBQW0wQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQUFBQyxJQWpCTDdoRCxLQUFBdGtDO0FBQUFBLGFBQUFBLFdBQ3RCQSxLQUFLb2lGLFlBQ1BwaUYsS0FBS29pRixTQUFTemtELFFBQUFBLEdBQUFBLFNBR1ozOUIsS0FBSzZMLFFBQVF5NEUsU0FBUzMzQyxhQUFBQSxTQUNwQjNzQyxLQUFLNkwsUUFBUXk0RSxTQUFTOEIsZUFDeEJwbUYsS0FBS29pRixXQUFXQSxHQUFTLEVBQUV4RixXQUFXOThFLFFBQVFtNUIsZ0JBQUFBLEtBQWdCLENBQUEsSUFFOURqNUIsS0FBS29pRixXQUFXQSxHQUFTLEVBQ3ZCeEYsV0FBVzU4RSxLQUFLZ3pDLE9BQU9zbUMsT0FDdkJyZ0QsZ0JBQUFBLEtBQWdCLENBQUEsR0FJcEJqNUIsS0FBS29pRixTQUFTbC9DLE1BQUFBLEdBQUFBLFNBRVZsakMsS0FBS3lqRixjQUNQdDhCLEdBQUEzVyxLQUFJeHdDLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBMHZDLElBQ1gsTUFDQSxXQUFBO0FBQ0VsTSxjQUFBQSxHQUFLNC9DLGFBQWEsU0FBQTtZQUNuQixHQUNELFNBQUEsR0FFRi84QixHQUFBeFcsS0FBSTN3QyxLQUFDb2lGLFFBQUFBLEVBQVF0aEYsS0FBQTZ2QyxJQUNYLFFBQ0EsV0FBQTtBQUNFck0sY0FBQUEsR0FBSzQvQyxhQUFhLFdBQUE7WUFDbkIsR0FDRCxTQUFBLEdBRUYvOEIsR0FBQTI5QixLQUFJOWtGLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBZ2tGLElBQ1gsUUFDQSxXQUFBO0FBQ0V4Z0QsY0FBQUEsR0FBSzQvQyxhQUFhLFdBQUE7WUFDbkIsR0FDRCxTQUFBLEdBRUYvOEIsR0FBQTQ5QixLQUFJL2tGLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBaWtGLElBQ1gsU0FDQSxXQUFBO0FBQ0V6Z0QsY0FBQUEsR0FBSzQvQyxhQUFhLFlBQUE7WUFDbkIsR0FDRCxTQUFBLEdBRUYvOEIsR0FBQTY5QixLQUFJaGxGLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBa2tGLElBQ1gsS0FDQSxXQUFBO0FBQ0UxZ0QsY0FBQUEsR0FBSzQvQyxhQUFhLFNBQUE7WUFDbkIsR0FDRCxTQUFBLEdBRUYvOEIsR0FBQTg5QixLQUFJamxGLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBbWtGLElBQ1gsUUFDQSxXQUFBO0FBQ0UzZ0QsY0FBQUEsR0FBSzQvQyxhQUFhLFNBQUE7WUFDbkIsR0FDRCxTQUFBLEdBRUYvOEIsR0FBQSs5QixLQUFJbGxGLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBb2tGLElBQ1gsUUFDQSxXQUFBO0FBQ0U1Z0QsY0FBQUEsR0FBSzQvQyxhQUFhLFVBQUE7WUFDbkIsR0FDRCxTQUFBLEdBRUYvOEIsR0FBQWcrQixLQUFJbmxGLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBcWtGLElBQ1gsS0FDQSxXQUFBO0FBQ0U3Z0QsY0FBQUEsR0FBSzQvQyxhQUFhLFVBQUE7WUFDbkIsR0FDRCxTQUFBLEdBRUYvOEIsR0FBQWkrQixLQUFJcGxGLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBc2tGLElBQ1gsS0FDQSxXQUFBO0FBQ0U5Z0QsY0FBQUEsR0FBSzQvQyxhQUFhLFVBQUE7WUFDbkIsR0FDRCxTQUFBLEdBRUYvOEIsR0FBQWsrQixLQUFJcmxGLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBdWtGLElBQ1gsS0FDQSxXQUFBO0FBQ0UvZ0QsY0FBQUEsR0FBSzQvQyxhQUFhLFNBQUE7WUFDbkIsR0FDRCxTQUFBLEdBRUYvOEIsR0FBQW0rQixLQUFJdGxGLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBd2tGLElBQ1gsVUFDQSxXQUFBO0FBQ0VoaEQsY0FBQUEsR0FBSzQvQyxhQUFhLFNBQUE7WUFDbkIsR0FDRCxTQUFBLEdBRUYvOEIsR0FBQW8rQixLQUFJdmxGLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBeWtGLElBQ1gsWUFDQSxXQUFBO0FBQ0VqaEQsY0FBQUEsR0FBSzQvQyxhQUFhLFVBQUE7WUFDbkIsR0FDRCxTQUFBLEdBR0YvOEIsR0FBQXErQixLQUFJeGxGLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBMGtGLElBQ1gsTUFDQSxXQUFBO0FBQ0VsaEQsY0FBQUEsR0FBSytoRCxpQkFBaUIsU0FBQTtZQUN2QixHQUNELE9BQUEsR0FFRmwvQixHQUFBcytCLEtBQUl6bEYsS0FBQ29pRixRQUFBQSxFQUFRdGhGLEtBQUEya0YsSUFDWCxRQUNBLFdBQUE7QUFDRW5oRCxjQUFBQSxHQUFLK2hELGlCQUFpQixXQUFBO1lBQ3ZCLEdBQ0QsT0FBQSxHQUVGbC9CLEdBQUF1K0IsS0FBSTFsRixLQUFDb2lGLFFBQUFBLEVBQVF0aEYsS0FBQTRrRixJQUNYLFFBQ0EsV0FBQTtBQUNFcGhELGNBQUFBLEdBQUsraEQsaUJBQWlCLFdBQUE7WUFDdkIsR0FDRCxPQUFBLEdBRUZsL0IsR0FBQXcrQixLQUFJM2xGLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBNmtGLElBQ1gsU0FDQSxXQUFBO0FBQ0VyaEQsY0FBQUEsR0FBSytoRCxpQkFBaUIsWUFBQTtZQUN2QixHQUNELE9BQUEsR0FFRmwvQixHQUFBeStCLEtBQUk1bEYsS0FBQ29pRixRQUFBQSxFQUFRdGhGLEtBQUE4a0YsSUFDWCxLQUNBLFdBQUE7QUFDRXRoRCxjQUFBQSxHQUFLK2hELGlCQUFpQixTQUFBO1lBQ3ZCLEdBQ0QsT0FBQSxHQUVGbC9CLEdBQUEwK0IsS0FBSTdsRixLQUFDb2lGLFFBQUFBLEVBQVF0aEYsS0FBQStrRixJQUNYLFFBQ0EsV0FBQTtBQUNFdmhELGNBQUFBLEdBQUsraEQsaUJBQWlCLFNBQUE7WUFDdkIsR0FDRCxPQUFBLEdBRUZsL0IsR0FBQTIrQixLQUFJOWxGLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBZ2xGLElBQ1gsUUFDQSxXQUFBO0FBQ0V4aEQsY0FBQUEsR0FBSytoRCxpQkFBaUIsVUFBQTtZQUN2QixHQUNELE9BQUEsR0FFRmwvQixHQUFBNCtCLEtBQUkvbEYsS0FBQ29pRixRQUFBQSxFQUFRdGhGLEtBQUFpbEYsSUFDWCxLQUNBLFdBQUE7QUFDRXpoRCxjQUFBQSxHQUFLK2hELGlCQUFpQixVQUFBO1lBQ3ZCLEdBQ0QsT0FBQSxHQUVGbC9CLEdBQUE2K0IsS0FBSWhtRixLQUFDb2lGLFFBQUFBLEVBQVF0aEYsS0FBQWtsRixJQUNYLEtBQ0EsV0FBQTtBQUNFMWhELGNBQUFBLEdBQUsraEQsaUJBQWlCLFVBQUE7WUFDdkIsR0FDRCxPQUFBLEdBRUZsL0IsR0FBQTgrQixLQUFJam1GLEtBQUNvaUYsUUFBQUEsRUFBUXRoRixLQUFBbWxGLElBQ1gsS0FDQSxXQUFBO0FBQ0UzaEQsY0FBQUEsR0FBSytoRCxpQkFBaUIsU0FBQTtZQUN2QixHQUNELE9BQUEsR0FFRmwvQixHQUFBKytCLEtBQUlsbUYsS0FBQ29pRixRQUFBQSxFQUFRdGhGLEtBQUFvbEYsSUFDWCxVQUNBLFdBQUE7QUFDRTVoRCxjQUFBQSxHQUFLK2hELGlCQUFpQixTQUFBO1lBQ3ZCLEdBQ0QsT0FBQSxHQUVGbC9CLEdBQUFnL0IsS0FBSW5tRixLQUFDb2lGLFFBQUFBLEVBQVF0aEYsS0FBQXFsRixJQUNYLFlBQ0EsV0FBQTtBQUNFN2hELGNBQUFBLEdBQUsraEQsaUJBQWlCLFVBQUE7WUFDdkIsR0FDRCxPQUFBO1VBSVIsRUFBQSxDQUFBLENBQUEsR0FBQ2hEO1FBQUEsRUF2ZG9CO0FBQUEsaUJBQUEsR0FBQXR1RSxJQUFBcWEsSUFBQTtBQUFBLGNBQUF4Z0IsS0FBQSxXQUFBLE1BQUEsR0FBQW1HLEVBQUEsS0FBQUEsR0FBQSxZQUFBO0FBQUEsY0FBQSxDQUFBbkcsSUFBQTtBQUFBLGdCQUFBLEdBQUFtRyxFQUFBLE1BQUFuRyxLQUFBLFNBQUFtRyxJQUFBcWEsSUFBQTtBQUFBLGtCQUFBeGdCO0FBQUEsa0JBQUEsQ0FBQW1HO0FBQUE7QUFBQSxrQkFBQSxZQUFBLE9BQUFBO0FBQUEsdUJBQUEsR0FBQUEsSUFBQXFhLEVBQUE7QUFBQSxrQkFBQWpDLEtBQUEsR0FBQXZlLEtBQUEsT0FBQSxVQUFBLFNBQUEsS0FBQW1HLEVBQUEsQ0FBQSxFQUFBLEtBQUFuRyxJQUFBLEdBQUEsRUFBQTtBQUFBLDJCQUFBdWUsTUFBQXBZLEdBQUEsZ0JBQUFvWSxLQUFBcFksR0FBQSxZQUFBO0FBQUEsa0JBQUEsVUFBQW9ZLE1BQUEsVUFBQUE7QUFBQSx1QkFBQSxHQUFBcFksRUFBQTtBQUFBLGtCQUFBLGdCQUFBb1ksTUFBQSwyQ0FBQSxLQUFBQSxFQUFBO0FBQUEsdUJBQUEsR0FBQXBZLElBQUFxYSxFQUFBO1lBQUEsRUFBQXJhLEVBQUEsTUFBQXFhLE1BQUFyYSxNQUFBLFlBQUEsT0FBQUEsR0FBQSxRQUFBO0FBQUEsY0FBQW5HLE9BQUFtRyxLQUFBbkc7QUFBQSxrQkFBQXVlLEtBQUEsR0FBQTdmLEtBQUEsV0FBQTtjQUFBO0FBQUEscUJBQUEsRUFBQSxHQUFBQSxJQUFBLEdBQUEsV0FBQTtBQUFBLHVCQUFBNmYsTUFBQXBZLEdBQUEsU0FBQSxFQUFBLE1BQUEsS0FBQSxJQUFBLEVBQUEsTUFBQSxPQUFBLE9BQUFBLEdBQUFvWSxJQUFBLEVBQUE7Y0FBQSxHQUFBLEdBQUEsU0FBQXBZLElBQUE7QUFBQSxzQkFBQUE7Y0FBQSxHQUFBLEdBQUF6SCxHQUFBO1lBQUE7QUFBQSxrQkFBQSxJQUFBLFVBQUEsdUlBQUE7VUFBQTtBQUFBLGNBQUErRCxJQUFBc0QsS0FBQSxNQUFBMUwsS0FBQTtBQUFBLGlCQUFBLEVBQUEsR0FBQSxXQUFBO0FBQUEsWUFBQTJGLEtBQUFBLEdBQUEsS0FBQW1HLEVBQUE7VUFBQSxHQUFBLEdBQUEsV0FBQTtBQUFBLGdCQUFBQSxLQUFBbkcsR0FBQSxLQUFBO0FBQUEsbUJBQUErRixLQUFBSSxHQUFBLE1BQUFBO1VBQUEsR0FBQSxHQUFBLFNBQUFBLElBQUE7QUFBQSxZQUFBOUwsS0FBQSxNQUFBb0ksS0FBQTBEO1VBQUEsR0FBQSxHQUFBLFdBQUE7QUFBQSxnQkFBQTtBQUFBLGNBQUFKLE1BQUEsUUFBQS9GLEdBQUEsVUFBQUEsR0FBQSxPQUFBO1lBQUEsVUFBQTtBQUFBLGtCQUFBM0Y7QUFBQSxzQkFBQW9JO1lBQUE7VUFBQSxFQUFBO1FBQUE7QUFBQSxpQkFBQSxHQUFBMEQsSUFBQXFhLElBQUE7QUFBQSxXQUFBLFFBQUFBLE1BQUFBLEtBQUFyYSxHQUFBLFlBQUFxYSxLQUFBcmEsR0FBQTtBQUFBLG1CQUFBbkcsS0FBQSxHQUFBdWUsS0FBQSxJQUFBLE1BQUFpQyxFQUFBLEdBQUF4Z0IsS0FBQXdnQixJQUFBeGdCO0FBQUEsWUFBQXVlLEdBQUF2ZSxFQUFBLElBQUFtRyxHQUFBbkcsRUFBQTtBQUFBLGlCQUFBdWU7UUFBQTtBQ0N2QixZQUdNbTVELEtBQWtCLFdBQUE7QUFNdEIsbUJBQUFBLEdBQVlueEMsSUFBTW5DLElBQVF1ekMsSUFBQUE7QUFBa0IsZ0JBQUEzM0QsSUFBQWdoQixJQUFBUSxJQUFBSSxJQUFBRyxJQUFBbTBDLElBQUFDLElBQUFDLElBQUFDLElBQUFDLElBQUFDLElBQUFDLElBQUFDO0FBQUExaEUsZUFBQUEsTUFBQTJpRSxFQUFBQSxHQUMxQ3RtRixLQUFLbTFDLE9BQU9BLElBQ1puMUMsS0FBS2d6QyxTQUFTQSxJQUNkaHpDLEtBQUt1bUYsbUJBQW1CQSxJQUN4QnZtRixLQUFLd21GLG9CQUFvQixJQUFJbkQsR0FBa0JsdUMsSUFBTW5DLEVBQUFBLEdBR3JEaHpDLEtBQUttMUMsS0FBS3VvQyxlQUFlQyxRQUFReDJCLEdBQUF2NEIsS0FBSTV1QixLQUFDMjlFLEtBQUFBLEVBQUs3OEUsS0FBQTh0QixJQUFNNXVCLElBQUFBLEdBQ2pEQSxLQUFLbTFDLEtBQUt1b0MsZUFBZXpDLFVBQVU5ekIsR0FBQXZYLEtBQUk1dkMsS0FBQ2k3RSxPQUFBQSxFQUFPbjZFLEtBQUE4dUMsSUFBTTV2QyxJQUFBQSxHQUNyREEsS0FBS20xQyxLQUFLdW9DLGVBQWVFLGNBQWN6MkIsR0FBQS9XLEtBQUlwd0MsS0FBQzQ5RSxXQUFBQSxFQUFXOThFLEtBQUFzdkMsSUFBTXB3QyxJQUFBQSxHQUM3REEsS0FBS20xQyxLQUFLdW9DLGVBQWVHLFNBQVMxMkIsR0FBQTNXLEtBQUl4d0MsS0FBQzY5RSxNQUFBQSxFQUFNLzhFLEtBQUEwdkMsSUFBTXh3QyxJQUFBQSxHQUNuREEsS0FBS20xQyxLQUFLdW9DLGVBQWVJLGNBQWMzMkIsR0FBQXhXLEtBQUkzd0MsS0FBQzg5RSxXQUFBQSxFQUFXaDlFLEtBQUE2dkMsSUFBTTN3QyxJQUFBQSxHQUM3REEsS0FBS20xQyxLQUFLdW9DLGVBQWVLLFNBQVM1MkIsR0FBQTI5QixLQUFJOWtGLEtBQUMrOUUsTUFBQUEsRUFBTWo5RSxLQUFBZ2tGLElBQU05a0YsSUFBQUEsR0FDbkRBLEtBQUttMUMsS0FBS3VvQyxlQUFlTSxZQUFZNzJCLEdBQUE0OUIsS0FBSS9rRixLQUFDZytFLFNBQUFBLEVBQVNsOUUsS0FBQWlrRixJQUFNL2tGLElBQUFBLEdBQ3pEQSxLQUFLbTFDLEtBQUt1b0MsZUFBZVEsZUFBZS8yQixHQUFBNjlCLEtBQUlobEYsS0FBQ2srRSxZQUFBQSxFQUFZcDlFLEtBQUFra0YsSUFBTWhsRixJQUFBQSxHQUMvREEsS0FBS20xQyxLQUFLdW9DLGVBQWVPLFVBQVU5MkIsR0FBQTg5QixLQUFJamxGLEtBQUNpK0UsT0FBQUEsRUFBT245RSxLQUFBbWtGLElBQU1qbEYsSUFBQUEsR0FDckRBLEtBQUttMUMsS0FBS3VvQyxlQUFlUyxjQUFjaDNCLEdBQUErOUIsS0FBSWxsRixLQUFDbStFLFdBQUFBLEVBQVdyOUUsS0FBQW9rRixJQUFNbGxGLElBQUFBLEdBQzdEQSxLQUFLbTFDLEtBQUt1b0MsZUFBZXZDLFlBQVloMEIsR0FBQWcrQixLQUFJbmxGLEtBQUNtN0UsU0FBQUEsRUFBU3I2RSxLQUFBcWtGLElBQU1ubEYsSUFBQUEsR0FDekRBLEtBQUttMUMsS0FBS3VvQyxlQUFlVSxZQUFZajNCLEdBQUFpK0IsS0FBSXBsRixLQUFDbytFLFNBQUFBLEVBQVN0OUUsS0FBQXNrRixJQUFNcGxGLElBQUFBLEdBRXpEQSxLQUFLcWdGLFlBQVksR0FDakJyZ0YsS0FBS3c5RSxPQUFPLENBQUEsR0FDWng5RSxLQUFLeTlFLFFBQVEsQ0FBQSxHQUNiejlFLEtBQUt5bUYsUUFBQUEsUUFDTHptRixLQUFLMG1GLFdBQUFBLFFBQ0wxbUYsS0FBSzJtRixhQUFBQSxRQUVMM21GLEtBQUttMUMsS0FBSzZkLFVBQVU0ekIsYUFBYXovQixHQUFBaytCLEtBQUlybEYsS0FBQzRtRixVQUFBQSxFQUFVOWxGLEtBQUF1a0YsSUFBTXJsRixJQUFBQSxHQUV0REEsS0FBSzZMLFVBQVUsQ0FBQSxHQUNmN0wsS0FBS3U1QyxpQkFBaUIsRUFDcEJzdEMsV0FBQUEsTUFDQUMsVUFBQUEsTUFDQTcwQyxPQUFBQSxPQUNBcXlDLFVBQVUsRUFDUjMzQyxTQUFBQSxPQUNBNDNDLE9BQU8sRUFBRWwzRSxHQUFHLElBQUkrRCxHQUFHLElBQUlxekUsTUFBTSxLQUFBLEdBQzdCMkIsY0FBQUEsTUFDQVcsV0FBQUEsS0FBVyxHQUVicEQsbUJBQUFBLE9BQ0FxRCxjQUFjLEtBQ2RDLFVBQUFBLE1BQ0FDLFdBQVcsRUFBQSxHQUVienRDLEdBQWN6NUMsS0FBSzZMLFNBQVM3TCxLQUFLdTVDLGNBQUFBLEdBRWpDdjVDLEtBQUt1ekQsbUJBQUFBO1VBQ1A7QUEwdUJDLGlCQXh1QkQxbEMsR0FBQXk0RCxJQUFBLENBQUEsRUFBQTkvRSxLQUFBLHNCQUFBbkQsT0FHQSxXQUFBO0FBQXFCLGdCQUFBczdCLEtBQUEzK0I7QUFDbkJBLGlCQUFLbTFDLEtBQUtxZSxRQUFRcitDLEdBQUcsV0FBVyxXQUFBO0FBQzlCb3ZCLDJCQUFhNUYsR0FBS2dvRCxVQUFBQSxHQUFBQSxPQUNYaG9ELEdBQUt3VyxLQUFLNmQsVUFBVTR6QjtZQUM3QixDQUFBO1VBQ0YsRUFBQSxHQUVBLEVBQUFwZ0YsS0FBQSxjQUFBbkQsT0FJQSxTQUFXd0ksSUFBQUE7QUFDVCxnQkFBQSxXQUFJQSxJQUF1QjtBQVd6QnVtRCxpQkFUZSxDQUNiLG1CQUNBLG1CQUNBLG1CQUNBLFlBQ0EsZUFDQSxjQUNBLHNCQUFBLEdBRTZCcHlELEtBQUs2TCxTQUFTQSxFQUFBQSxHQUc3QzBtRCxHQUFhdnlELEtBQUs2TCxTQUFTQSxJQUFTLFVBQUEsR0FFaENBLEdBQVF3L0IsWUFDVm9PLEdBQWN6NUMsS0FBSzZMLFFBQVF3L0IsU0FBU3gvQixHQUFRdy9CLE9BQUFBLEdBQ3hDeC9CLEdBQVF3L0IsUUFBUUYsVUFDbEJuckMsS0FBSzZMLFFBQVF3L0IsUUFBUUYsUUFBUWlHLEdBQVd2bEMsR0FBUXcvQixRQUFRRixLQUFBQTtZQUc5RDtBQUVBbnJDLGlCQUFLd21GLGtCQUFrQnRsQyxXQUFXbGhELEtBQUs2TCxPQUFBQTtVQUN6QyxFQUFBLEdBRUEsRUFBQXJGLEtBQUEsY0FBQW5ELE9BT0EsU0FBV2k5QixJQUFBQTtBQUNULG1CQUFPLEVBQ0xqekIsR0FBR2l6QixHQUFNanpCLEtBQUFBLEtBQW9Cck4sS0FBS2d6QyxPQUFPc21DLE1BQU10bUMsUUFBQUEsR0FBQUEsc0JBQUFBLEVBQUFBLE9BQy9DNWhDLEdBQUdrdkIsR0FBTWx2QixJQUFJKzFFLEdBQWVubkYsS0FBS2d6QyxPQUFPc21DLE1BQU10bUMsTUFBQUEsRUFBQUE7QUFBQUEsZ0JBQUFBO1VBRWxELEVBQUEsR0FFQSxFQUFBeHNDLEtBQUEsV0FBQW5ELE9BTUEsU0FBUWdTLElBQUFBO0FBQUFBLGFBQ0Ysb0JBQUkyYSxRQUFPem5CLFFBQUFBLElBQVl2SSxLQUFLcWdGLFlBQVksT0FDMUNyZ0YsS0FBS3c5RSxLQUFLcUgsVUFBVTdrRixLQUFLNG1GLFdBQVd2eEUsR0FBTThrQixNQUFBQSxHQUMxQ242QixLQUFLdzlFLEtBQUs0SixVQUFBQSxPQUNWcG5GLEtBQUt5OUUsTUFBTWhpRCxRQUFRejdCLEtBQUttMUMsS0FBSzZPLEtBQUt2b0IsT0FFbEN6N0IsS0FBS3FnRixhQUFZLG9CQUFJcndELFFBQU96bkIsUUFBQUE7VUFFaEMsRUFBQSxHQUVBLEVBQUEvQixLQUFBLFNBQUFuRCxPQU1BLFNBQU1nUyxJQUFBQTtBQUNKLGdCQUFNd3ZFLEtBQVU3a0YsS0FBSzRtRixXQUFXdnhFLEdBQU04a0IsTUFBQUEsR0FDaENrdEQsS0FDSnJuRixLQUFLdW1GLGlCQUFpQjE2RSxRQUFRdzdFLGdCQUM3Qmh5RSxHQUFNa25CLGdCQUFnQixDQUFBLEVBQUcrcUQsV0FBV2p5RSxHQUFNa25CLGdCQUFnQixDQUFBLEVBQUdnckQ7QUFFaEV2bkYsaUJBQUt3bkYsc0JBQXNCM0MsSUFBU3dDLEVBQUFBLEdBRXBDcm5GLEtBQUt1bUYsaUJBQWlCa0IsY0FBYzVDLElBQVN4dkUsRUFBQUEsR0FDN0NyVixLQUFLdW1GLGlCQUFpQm1CLG1CQUFtQixTQUFTcnlFLElBQU93dkUsRUFBQUE7VUFDM0QsRUFBQSxHQUVBLEVBQUFyK0UsS0FBQSxlQUFBbkQsT0FNQSxTQUFZZ1MsSUFBQUE7QUFDVixnQkFBTXd2RSxLQUFVN2tGLEtBQUs0bUYsV0FBV3Z4RSxHQUFNOGtCLE1BQUFBO0FBQ3RDbjZCLGlCQUFLdW1GLGlCQUFpQm1CLG1CQUFtQixlQUFlcnlFLElBQU93dkUsRUFBQUE7VUFDakUsRUFBQSxHQUVBLEVBQUFyK0UsS0FBQSxVQUFBbkQsT0FNQSxTQUFPZ1MsSUFBQUE7QUFDTCxnQkFBTXd2RSxLQUFVN2tGLEtBQUs0bUYsV0FBV3Z4RSxHQUFNOGtCLE1BQUFBLEdBQ2hDa3RELEtBQWNybkYsS0FBS3VtRixpQkFBaUIxNkUsUUFBUXc3RTtBQUVsRHJuRixpQkFBS3duRixzQkFBc0IzQyxJQUFTd0MsRUFBQUEsR0FFcENybkYsS0FBS3VtRixpQkFBaUJrQixjQUFjNUMsSUFBU3h2RSxFQUFBQSxHQUM3Q3JWLEtBQUt1bUYsaUJBQWlCbUIsbUJBQW1CLFNBQVNyeUUsSUFBT3d2RSxFQUFBQSxHQUN6RDdrRixLQUFLdW1GLGlCQUFpQm1CLG1CQUFtQixRQUFRcnlFLElBQU93dkUsRUFBQUE7VUFDMUQsRUFBQSxHQUVBLEVBQUFyK0UsS0FBQSxhQUFBbkQsT0FNQSxTQUFVZ1MsSUFBQUE7QUFDUixpQkFBSSxvQkFBSTJhLFFBQU96bkIsUUFBQUEsSUFBWXZJLEtBQUtxZ0YsWUFBWSxJQUFJO0FBQzlDLGtCQUFNd0UsS0FBVTdrRixLQUFLNG1GLFdBQVd2eEUsR0FBTThrQixNQUFBQTtBQUN0Q242QixtQkFBS3VtRixpQkFBaUJtQixtQkFBbUIsV0FBV3J5RSxJQUFPd3ZFLEVBQUFBLEdBRTNEN2tGLEtBQUtxZ0YsYUFBWSxvQkFBSXJ3RCxRQUFPem5CLFFBQUFBO1lBQzlCO1VBQ0YsRUFBQSxHQUVBLEVBQUEvQixLQUFBLGFBQUFuRCxPQUlBLFNBQVVnUyxJQUFBQTtBQUNSLGdCQUFNd3ZFLEtBQVU3a0YsS0FBSzRtRixXQUFXLEVBQUV2NUUsR0FBR2dJLEdBQU0wa0IsU0FBUzNvQixHQUFHaUUsR0FBTTJrQixRQUFBQSxDQUFBQTtBQUM3RGg2QixpQkFBS3VtRixpQkFBaUJtQixtQkFBbUIsYUFBYXJ5RSxJQUFPd3ZFLEVBQUFBO1VBQy9ELEVBQUEsR0FFQSxFQUFBcitFLEtBQUEseUJBQUFuRCxPQU1BLFNBQXNCd2hGLElBQUFBO0FBQUFBLHNCQUFZNWpGLFVBQUF5RCxTQUFBLEtBQUEsV0FBQXpELFVBQUEsQ0FBQSxLQUFBQSxVQUFBLENBQUEsS0FFOUJqQixLQUFLdW1GLGlCQUFpQm9CLHdCQUF3QjlDLEVBQUFBLElBRTlDN2tGLEtBQUt1bUYsaUJBQWlCcUIsY0FBYy9DLEVBQUFBO1VBRXhDLEVBQUEsR0FFQSxFQUFBcitFLEtBQUEsd0JBQUFuRCxPQVFBLFNBQXFCd2tGLElBQVVDLElBQUFBO0FBQzdCLGdCQUFNQyxLQUFZLFNBQVVDLElBQVVDLElBQUFBO0FBR3BDLHVCQUZNdi9FLEtBQVMsQ0FBQSxHQUVOa0csS0FBSSxHQUFHQSxLQUFJbzVFLEdBQVN0akYsUUFBUWtLLE1BQUs7QUFDeEMsb0JBQU12TCxLQUFRMmtGLEdBQVNwNUUsRUFBQUE7QUFBQUEsdUJBQ25CMjlCLEdBQUEwN0MsRUFBQUEsRUFBU25uRixLQUFUbW5GLElBQWtCNWtGLEVBQUFBLEtBQ3BCcUYsR0FBTzdCLEtBQUt4RCxFQUFBQTtjQUVoQjtBQUVBLHFCQUFPcUY7WUFBQUE7QUFHVCxtQkFBTyxFQUNMMGpDLE9BQU8yN0MsR0FBVUYsR0FBU3o3QyxPQUFPMDdDLEdBQVUxN0MsS0FBQUEsR0FDM0NLLE9BQU9zN0MsR0FBVUYsR0FBU3A3QyxPQUFPcTdDLEdBQVVyN0MsS0FBQUEsRUFBQUE7VUFFL0MsRUFBQSxHQUVBLEVBQUFqbUMsS0FBQSxlQUFBbkQsT0FPQSxTQUFZZ1MsSUFBQUE7QUFHVixnQkFBQSxDQUFJclYsS0FBS3c5RSxLQUFLcEYsVUFBZDtBQUFBLHlCQUtJcDRFLEtBQUt3OUUsS0FBS3FILFdBQ1o3a0YsS0FBS2k3RSxRQUFRNWxFLEVBQUFBO0FBSWYsa0JBQU1za0IsS0FBTzM1QixLQUFLdW1GLGlCQUFpQjJCLFVBQVVsb0YsS0FBS3c5RSxLQUFLcUgsT0FBQUE7QUFPdkQsa0JBTEE3a0YsS0FBS3c5RSxLQUFLcEYsV0FBQUEsTUFDVnA0RSxLQUFLdzlFLEtBQUsySyxZQUFZLENBQUEsR0FDdEJub0YsS0FBS3c5RSxLQUFLNUQsY0FBY25nQyxHQUFjLENBQUEsR0FBSXo1QyxLQUFLbTFDLEtBQUs2TyxLQUFLNDFCLFdBQUFBLEdBQ3pENTVFLEtBQUt3OUUsS0FBSzdyQixTQUFBQSxRQUVOdDhDLEdBQU11akIsU0FBU29xRCxVQUFVO0FBQzNCaGpGLHFCQUFLbTFDLEtBQUs0bEMsYUFBYUMsT0FBQUE7QUFDdkIsb0JBQU02SixLQUFVN2tGLEtBQUs0bUYsV0FBV3Z4RSxHQUFNOGtCLE1BQUFBO0FBRXRDbjZCLHFCQUFLbTFDLEtBQUs0bEMsYUFBYTdqRSxTQUFTbU8sUUFBUSxFQUN0Q2hZLEdBQUdyTixLQUFLZ3pDLE9BQU93c0MscUJBQXFCcUYsR0FBUXgzRSxDQUFBQSxHQUM1QytELEdBQUdwUixLQUFLZ3pDLE9BQU95c0MscUJBQXFCb0YsR0FBUXp6RSxDQUFBQSxFQUFBQSxHQUU5Q3BSLEtBQUttMUMsS0FBSzRsQyxhQUFhN2pFLFNBQVNvTyxNQUFNLEVBQ3BDalksR0FBR3JOLEtBQUtnekMsT0FBT3dzQyxxQkFBcUJxRixHQUFReDNFLENBQUFBLEdBQzVDK0QsR0FBR3BSLEtBQUtnekMsT0FBT3lzQyxxQkFBcUJvRixHQUFRenpFLENBQUFBLEVBQUFBO2NBRWhELFdBQU8sV0FBSXVvQixNQUFBQSxTQUFzQjM1QixLQUFLNkwsUUFBUWc3RSxXQUFvQjtBQUNoRTdtRixxQkFBS3c5RSxLQUFLN3JCLFNBQVNoNEIsR0FBS3R5QixJQUFBQSxVQUVwQnN5QixHQUFLNGdELFdBQUFBLEtBQ1B2NkUsS0FBS3VtRixpQkFBaUI2QixhQUFhLEVBQUVoOEMsT0FBTyxDQUFDelMsR0FBS3R5QixFQUFBQSxFQUFBQSxDQUFBQSxHQUlwRHJILEtBQUt1bUYsaUJBQWlCbUIsbUJBQ3BCLGFBQ0FyeUUsSUFDQXJWLEtBQUt3OUUsS0FBS3FILE9BQUFBO0FBR1osb0JBQzJEOXZCLElBRDNERyxLQUFBQyxHQUNtQm4xRCxLQUFLdW1GLGlCQUFpQjhCLGlCQUFBQSxDQUFBQTtBQUFrQixvQkFBQTtBQUEzRCx1QkFBQW56QixHQUFBdmdELEVBQUFBLEdBQUFBLEVBQUFvZ0QsS0FBQUcsR0FBQTVuRCxFQUFBQSxHQUFBK1EsUUFBNkQ7QUFBQSx3QkFBbERzYixLQUFJbzdCLEdBQUExeEQsT0FDUHNSLEtBQUksRUFDUnROLElBQUlzeUIsR0FBS3R5QixJQUNUc3lCLE1BQU1BLElBR050c0IsR0FBR3NzQixHQUFLdHNCLEdBQ1IrRCxHQUFHdW9CLEdBQUt2b0IsR0FDUmszRSxRQUFRM3VELEdBQUs5dEIsUUFBUXNsQyxNQUFNOWpDLEdBQzNCazdFLFFBQVE1dUQsR0FBSzl0QixRQUFRc2xDLE1BQU0vL0IsRUFBQUE7QUFHN0J1b0Isb0JBQUFBLEdBQUs5dEIsUUFBUXNsQyxNQUFNOWpDLElBQUFBLE1BQ25Cc3NCLEdBQUs5dEIsUUFBUXNsQyxNQUFNLy9CLElBQUFBLE1BRW5CcFIsS0FBS3c5RSxLQUFLMkssVUFBVXRoRixLQUFLOE4sRUFBQUE7a0JBQzNCO2dCQUFDLFNBQUEyZ0QsSUFBQUE7QUFBQUosa0JBQUFBLEdBQUE5bEMsRUFBQWttQyxFQUFBQTtnQkFBQSxVQUFBO0FBQUFKLGtCQUFBQSxHQUFBcnlELEVBQUFBO2dCQUFBO2NBQ0g7QUFFRTdDLHFCQUFLdW1GLGlCQUFpQm1CLG1CQUNwQixhQUNBcnlFLElBQ0FyVixLQUFLdzlFLEtBQUtxSCxTQUFBQSxRQUNWaG1FLElBQ0E7WUFsRUo7VUFxRUYsRUFBQSxHQUVBLEVBQUFyWSxLQUFBLFVBQUFuRCxPQU1BLFNBQU9nUyxJQUFBQTtBQUFPLGdCQUFBMHVCLEtBQUEvakM7QUFDWixnQkFBQSxTQUFJQSxLQUFLdzlFLEtBQUs0SixTQUFkO0FBS0FwbkYsbUJBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxZQUFBO0FBRXZCLGtCQUFNOHVFLEtBQVU3a0YsS0FBSzRtRixXQUFXdnhFLEdBQU04a0IsTUFBQUEsR0FFaENndUQsS0FBWW5vRixLQUFLdzlFLEtBQUsySztBQUM1QixrQkFBSUEsTUFBYUEsR0FBVXpqRixVQUFBQSxTQUFVMUUsS0FBSzZMLFFBQVFnN0UsV0FBb0I7QUFDcEU3bUYscUJBQUt1bUYsaUJBQWlCbUIsbUJBQW1CLFlBQVlyeUUsSUFBT3d2RSxFQUFBQTtBQUc1RCxvQkFBTXpxRCxLQUFTeXFELEdBQVF4M0UsSUFBSXJOLEtBQUt3OUUsS0FBS3FILFFBQVF4M0UsR0FDdkNndEIsS0FBU3dxRCxHQUFRenpFLElBQUlwUixLQUFLdzlFLEtBQUtxSCxRQUFRenpFO0FBRzdDcStCLG1CQUFBMDRDLEVBQUFBLEVBQVNybkYsS0FBVHFuRixJQUFrQixTQUFDQSxJQUFBQTtBQUNqQixzQkFBTXh1RCxLQUFPd3VELEdBQVV4dUQ7QUFBQUEsNEJBRW5Cd3VELEdBQVVHLFdBQ1ozdUQsR0FBS3RzQixJQUFJMDJCLEdBQUtpUCxPQUFPd3NDLHFCQUNuQno3QyxHQUFLaVAsT0FBT3NzQyxxQkFBcUI2SSxHQUFVOTZFLENBQUFBLElBQUsrc0IsRUFBQUEsSUFBQUEsVUFJaEQrdEQsR0FBVUksV0FDWjV1RCxHQUFLdm9CLElBQUkyeUIsR0FBS2lQLE9BQU95c0MscUJBQ25CMTdDLEdBQUtpUCxPQUFPdXNDLHFCQUFxQjRJLEdBQVUvMkUsQ0FBQUEsSUFBS2lwQixFQUFBQTtnQkFHdEQsQ0FBQSxHQUdBcjZCLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxpQkFBQTtjQUN6QixPQUFPO0FBRUwsb0JBQUlWLEdBQU11akIsU0FBU29xRCxVQUFVO0FBVTNCLHNCQVRBaGpGLEtBQUt1bUYsaUJBQWlCbUIsbUJBQ3BCLFlBQ0FyeUUsSUFDQXd2RSxJQUFBQSxRQUNBaG1FLElBQ0EsR0FBQSxXQUlFN2UsS0FBS3c5RSxLQUFLcUg7QUFFWiwyQkFBQSxLQURBN2tGLEtBQUs4OUUsWUFBWXpvRSxFQUFBQTtBQUluQnJWLHVCQUFLbTFDLEtBQUs0bEMsYUFBYTdqRSxTQUFTb08sTUFBTSxFQUNwQ2pZLEdBQUdyTixLQUFLZ3pDLE9BQU93c0MscUJBQXFCcUYsR0FBUXgzRSxDQUFBQSxHQUM1QytELEdBQUdwUixLQUFLZ3pDLE9BQU95c0MscUJBQXFCb0YsR0FBUXp6RSxDQUFBQSxFQUFBQSxHQUU5Q3BSLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxnQkFBQTtnQkFDekI7QUFHQSxvQkFBQSxTQUFJL1YsS0FBSzZMLFFBQVFpN0UsWUFBQUEsQ0FBc0J6eEUsR0FBTXVqQixTQUFTb3FELFVBQVU7QUFVOUQsc0JBVEFoakYsS0FBS3VtRixpQkFBaUJtQixtQkFDcEIsWUFDQXJ5RSxJQUNBd3ZFLElBQUFBLFFBQ0FobUUsSUFDQSxHQUFBLFdBSUU3ZSxLQUFLdzlFLEtBQUtxSDtBQUVaLDJCQUFBLEtBREE3a0YsS0FBSzg5RSxZQUFZem9FLEVBQUFBO0FBSW5CLHNCQUFNbXpFLEtBQVEzRCxHQUFReDNFLElBQUlyTixLQUFLdzlFLEtBQUtxSCxRQUFReDNFLEdBQ3RDbzdFLEtBQVE1RCxHQUFRenpFLElBQUlwUixLQUFLdzlFLEtBQUtxSCxRQUFRenpFO0FBRTVDcFIsdUJBQUttMUMsS0FBSzZPLEtBQUs0MUIsY0FBYyxFQUMzQnZzRSxHQUFHck4sS0FBS3c5RSxLQUFLNUQsWUFBWXZzRSxJQUFJbTdFLElBQzdCcDNFLEdBQUdwUixLQUFLdzlFLEtBQUs1RCxZQUFZeG9FLElBQUlxM0UsR0FBQUEsR0FFL0J6b0YsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLGdCQUFBO2dCQUN6QjtjQUNGO1lBbkZBO1VBb0ZGLEVBQUEsR0FFQSxFQUFBdlAsS0FBQSxhQUFBbkQsT0FNQSxTQUFVZ1MsSUFBQUE7QUFBTyxnQkFBQWl2QixLQUFBdGtDO0FBR2YsZ0JBRkFBLEtBQUt3OUUsS0FBS3BGLFdBQUFBLE9BRU5wNEUsS0FBS20xQyxLQUFLNGxDLGFBQWFDLE1BQU07QUFBQSxrQkFBQXNLO0FBQy9CdGxGLG1CQUFLbTFDLEtBQUs0bEMsYUFBYUMsT0FBQUE7QUFDdkIsa0JBQU0wTixLQUF1QjFvRixLQUFLbTFDLEtBQUs0bEMsYUFBYTdqRSxVQUM5Q3l4RSxLQUE2QixFQUNqQ3hpQixNQUFNeG1FLEtBQUsrTixJQUNUZzdFLEdBQXFCcmpFLE1BQU1oWSxHQUMzQnE3RSxHQUFxQnBqRSxJQUFJalksQ0FBQUEsR0FFM0IrNEQsTUFBTXptRSxLQUFLK04sSUFDVGc3RSxHQUFxQnJqRSxNQUFNalUsR0FDM0JzM0UsR0FBcUJwakUsSUFBSWxVLENBQUFBLEdBRTNCaTFELE1BQU0xbUUsS0FBSzhOLElBQ1RpN0UsR0FBcUJyakUsTUFBTWhZLEdBQzNCcTdFLEdBQXFCcGpFLElBQUlqWSxDQUFBQSxHQUUzQmk1RCxNQUFNM21FLEtBQUs4TixJQUNUaTdFLEdBQXFCcmpFLE1BQU1qVSxHQUMzQnMzRSxHQUFxQnBqRSxJQUFJbFUsQ0FBQUEsRUFBQUEsR0FJdkJ3M0UsS0FBb0I5NkIsR0FBQXczQixLQUFBQSxLQUFLbndDLEtBQUsyZixXQUFBQSxFQUFXaDBELEtBQUF3a0YsSUFBUSxTQUFDM3pCLElBQUFBO0FBQ3RELG9CQUFNaDRCLEtBQU8ySyxHQUFLNlEsS0FBSy9JLE1BQU11bEIsRUFBQUE7QUFDN0IsdUJBQ0VoNEIsR0FBS3RzQixLQUFLczdFLEdBQTJCeGlCLFFBQ3JDeHNDLEdBQUt0c0IsS0FBS3M3RSxHQUEyQnRpQixRQUNyQzFzQyxHQUFLdm9CLEtBQUt1M0UsR0FBMkJ2aUIsUUFDckN6c0MsR0FBS3ZvQixLQUFLdTNFLEdBQTJCcmlCO2NBRXpDLENBQUE7QUFFQTcyQixpQkFBQW01QyxFQUFBQSxFQUFpQjluRixLQUFqQjhuRixJQUEwQixTQUFDajNCLElBQUFBO0FBQU0sdUJBQy9CcnRCLEdBQUtpaUQsaUJBQWlCc0MsYUFBYXZrRCxHQUFLNlEsS0FBSy9JLE1BQU11bEIsRUFBQUEsQ0FBQUE7Y0FBUSxDQUFBO0FBRzdELGtCQUFNa3pCLEtBQVU3a0YsS0FBSzRtRixXQUFXdnhFLEdBQU04a0IsTUFBQUE7QUFDdENuNkIsbUJBQUt1bUYsaUJBQWlCa0IsY0FBYzVDLElBQVN4dkUsRUFBQUEsR0FDN0NyVixLQUFLdW1GLGlCQUFpQm1CLG1CQUNwQixXQUNBcnlFLElBQ0FyVixLQUFLNG1GLFdBQVd2eEUsR0FBTThrQixNQUFBQSxHQUFBQSxRQUN0QnRiLElBQ0EsR0FFRjdlLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxnQkFBQTtZQUN6QixPQUFPO0FBQ0wsa0JBQU1veUUsS0FBWW5vRixLQUFLdzlFLEtBQUsySztBQUN4QkEsY0FBQUEsTUFBYUEsR0FBVXpqRixVQUN6QitxQyxHQUFBMDRDLEVBQUFBLEVBQVNybkYsS0FBVHFuRixJQUFrQixTQUFVeHpFLElBQUFBO0FBRTFCQSxnQkFBQUEsR0FBRWdsQixLQUFLOXRCLFFBQVFzbEMsTUFBTTlqQyxJQUFJc0gsR0FBRTJ6RSxRQUMzQjN6RSxHQUFFZ2xCLEtBQUs5dEIsUUFBUXNsQyxNQUFNLy9CLElBQUl1RCxHQUFFNHpFO2NBQzdCLENBQUEsR0FDQXZvRixLQUFLdW1GLGlCQUFpQm1CLG1CQUNwQixXQUNBcnlFLElBQ0FyVixLQUFLNG1GLFdBQVd2eEUsR0FBTThrQixNQUFBQSxDQUFBQSxHQUV4Qm42QixLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssaUJBQUEsTUFFdkIvVixLQUFLdW1GLGlCQUFpQm1CLG1CQUNwQixXQUNBcnlFLElBQ0FyVixLQUFLNG1GLFdBQVd2eEUsR0FBTThrQixNQUFBQSxHQUFBQSxRQUN0QnRiLElBQ0EsR0FFRjdlLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxnQkFBQTtZQUUzQjtVQUNGLEVBQUEsR0FFQSxFQUFBdlAsS0FBQSxXQUFBbkQsT0FNQSxTQUFRZ1MsSUFBQUE7QUFDTixnQkFBTXd2RSxLQUFVN2tGLEtBQUs0bUYsV0FBV3Z4RSxHQUFNOGtCLE1BQUFBO0FBRXRDbjZCLGlCQUFLdzlFLEtBQUs0SixVQUFBQSxNQUFVLFdBQ2hCcG5GLEtBQUt5OUUsTUFBYSxVQUNwQno5RSxLQUFLeTlFLE1BQU1oaUQsUUFBUTtBQUlyQixnQkFBTUEsS0FBUXo3QixLQUFLeTlFLE1BQU1oaUQsUUFBUXBtQixHQUFNb21CO0FBQ3ZDejdCLGlCQUFLeWtGLEtBQUtocEQsSUFBT29wRCxFQUFBQTtVQUNuQixFQUFBLEdBRUEsRUFBQXIrRSxLQUFBLFFBQUFuRCxPQU9BLFNBQUtvNEIsSUFBT29wRCxJQUFBQTtBQUNWLGdCQUFBLFNBQUk3a0YsS0FBSzZMLFFBQVFvN0UsVUFBbUI7QUFDbEMsa0JBQU16QyxLQUFXeGtGLEtBQUttMUMsS0FBSzZPLEtBQUt2b0I7QUFDNUJBLGNBQUFBLEtBQVEsU0FDVkEsS0FBUSxPQUVOQSxLQUFRLE9BQ1ZBLEtBQVE7QUFHVixrQkFBSXF0RCxLQUFBQTtBQUFzQmpxRSx5QkFDdEI3ZSxLQUFLdzlFLFFBQUFBLFNBQ0h4OUUsS0FBS3c5RSxLQUFLcEYsYUFDWjBRLEtBQXNCOW9GLEtBQUtnekMsT0FBT29uQyxZQUFZcDZFLEtBQUt3OUUsS0FBS3FILE9BQUFBO0FBSTVELGtCQUFNakwsS0FBYzU1RSxLQUFLbTFDLEtBQUs2TyxLQUFLNDFCLGFBRTdCOEssS0FBWWpwRCxLQUFRK29ELElBQ3BCRyxNQUFNLElBQUlELE1BQWFHLEdBQVF4M0UsSUFBSXVzRSxHQUFZdnNFLElBQUlxM0UsSUFDbkRFLE1BQU0sSUFBSUYsTUFBYUcsR0FBUXp6RSxJQUFJd29FLEdBQVl4b0UsSUFBSXN6RTtBQUt6RCxrQkFIQTFrRixLQUFLbTFDLEtBQUs2TyxLQUFLdm9CLFFBQVFBLElBQ3ZCejdCLEtBQUttMUMsS0FBSzZPLEtBQUs0MUIsY0FBYyxFQUFFdnNFLEdBQUdzM0UsSUFBSXZ6RSxHQUFHd3pFLEdBQUFBLEdBRWQvbEUsUUFBdkJpcUUsSUFBa0M7QUFDcEMsb0JBQU1DLEtBQ0ovb0YsS0FBS2d6QyxPQUFPZzJDLFlBQVlGLEVBQUFBO0FBQzFCOW9GLHFCQUFLdzlFLEtBQUtxSCxRQUFReDNFLElBQUkwN0UsR0FBcUIxN0UsR0FDM0NyTixLQUFLdzlFLEtBQUtxSCxRQUFRenpFLElBQUkyM0UsR0FBcUIzM0U7Y0FDN0M7QUFFQXBSLG1CQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssZ0JBQUEsR0FFbkJ5dUUsS0FBVy9vRCxLQUNiejdCLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxRQUFRLEVBQzdCOGlCLFdBQVcsS0FDWDRDLE9BQU96N0IsS0FBS20xQyxLQUFLNk8sS0FBS3ZvQixPQUN0Qm9wRCxTQUFTQSxHQUFBQSxDQUFBQSxJQUdYN2tGLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxRQUFRLEVBQzdCOGlCLFdBQVcsS0FDWDRDLE9BQU96N0IsS0FBS20xQyxLQUFLNk8sS0FBS3ZvQixPQUN0Qm9wRCxTQUFTQSxHQUFBQSxDQUFBQTtZQUdmO1VBQ0YsRUFBQSxHQUVBLEVBQUFyK0UsS0FBQSxnQkFBQW5ELE9BUUEsU0FBYWdTLElBQUFBO0FBQ1gsZ0JBQUEsU0FBSXJWLEtBQUs2TCxRQUFRbzdFLFVBQW1CO0FBSWxDLGtCQUFxQixNQUFqQjV4RSxHQUFNZ2xCLFFBQWM7QUFFdEIsb0JBQUlvQixLQUFRejdCLEtBQUttMUMsS0FBSzZPLEtBQUt2b0I7QUFDM0JBLGdCQUFBQSxNQUNFLEtBQUtwbUIsR0FBTWdsQixTQUFTLElBQUksSUFBQSxPQUFvQyxNQUF6QnI2QixLQUFLNkwsUUFBUXE3RTtBQUdsRCxvQkFBTXJDLEtBQVU3a0YsS0FBSzRtRixXQUFXLEVBQUV2NUUsR0FBR2dJLEdBQU0wa0IsU0FBUzNvQixHQUFHaUUsR0FBTTJrQixRQUFBQSxDQUFBQTtBQUc3RGg2QixxQkFBS3lrRixLQUFLaHBELElBQU9vcEQsRUFBQUE7Y0FDbkI7QUFHQXh2RSxjQUFBQSxHQUFNNGpCLGVBQUFBO1lBQ1I7VUFDRixFQUFBLEdBRUEsRUFBQXp5QixLQUFBLGVBQUFuRCxPQU1BLFNBQVlnUyxJQUFBQTtBQUFPLGdCQUFBdWdELEtBQUE1MUQsTUFDWDZrRixLQUFVN2tGLEtBQUs0bUYsV0FBVyxFQUFFdjVFLEdBQUdnSSxHQUFNMGtCLFNBQVMzb0IsR0FBR2lFLEdBQU0ya0IsUUFBQUEsQ0FBQUEsR0FDekRpdkQsS0FBQUE7QUFBZSx1QkFHZmpwRixLQUFLeW1GLFVBQUFBLFVBQ0h6bUYsS0FBS3ltRixNQUFNMTFCLFVBQ2Ivd0QsS0FBS2twRixnQkFBZ0JyRSxFQUFBQSxHQUFBQSxVQUluQjdrRixLQUFLeW1GLE1BQU0xMUIsV0FDYms0QixLQUFBQSxNQUNBanBGLEtBQUt5bUYsTUFBTTBDLFlBQVl0RSxHQUFReDNFLElBQUksR0FBR3czRSxHQUFRenpFLElBQUksQ0FBQSxHQUNsRHBSLEtBQUt5bUYsTUFBTXpMLEtBQUFBLEtBTWJoN0UsS0FBSzZMLFFBQVF5NEUsU0FBU3lDLGFBQUFBLFVBQ3RCL21GLEtBQUs2TCxRQUFReTRFLFNBQVM4QixnQkFBQUEsU0FDdEJwbUYsS0FBSzZMLFFBQVF5NEUsU0FBUzMzQyxXQUV0QjNzQyxLQUFLZ3pDLE9BQU9zbUMsTUFBTThQLE1BQUFBLEdBQUFBLFVBSWhCSCxPQUFBQSxXQUNFanBGLEtBQUsybUYsZUFDUHpLLGNBQWNsOEUsS0FBSzJtRixVQUFBQSxHQUNuQjNtRixLQUFLMm1GLGFBQUFBLFNBRUYzbUYsS0FBS3c5RSxLQUFLcEYsYUFDYnA0RSxLQUFLMm1GLGFBQWE5d0IsR0FDaEIsV0FBQTtBQUFBLHFCQUFNRCxHQUFLeXpCLGdCQUFnQnhFLEVBQUFBO1lBQVEsR0FDbkM3a0YsS0FBSzZMLFFBQVFtN0UsWUFBQUEsS0FBQUEsU0FNZmhuRixLQUFLNkwsUUFBUW9tQyxTQUNmanlDLEtBQUt1bUYsaUJBQWlCK0MsWUFBWWowRSxJQUFPd3ZFLEVBQUFBO1VBRTdDLEVBQUEsR0FFQSxFQUFBcitFLEtBQUEsbUJBQUFuRCxPQVFBLFNBQWdCd2hGLElBQUFBO0FBQ2QsZ0JBQU14M0UsS0FBSXJOLEtBQUtnekMsT0FBT3dzQyxxQkFBcUJxRixHQUFReDNFLENBQUFBLEdBQzdDK0QsS0FBSXBSLEtBQUtnekMsT0FBT3lzQyxxQkFBcUJvRixHQUFRenpFLENBQUFBLEdBQzdDbTRFLEtBQWEsRUFDakJyMUMsTUFBTTdtQyxJQUNOOG1DLEtBQUsvaUMsSUFDTG9xQyxPQUFPbnVDLElBQ1BvdUMsUUFBUXJxQyxHQUFBQSxHQUdKbzRFLEtBQUFBLFdBQ0p4cEYsS0FBSzBtRixXQUFBQSxTQUFxQzFtRixLQUFLMG1GLFNBQVNyL0UsSUFDdERvaUYsS0FBQUEsT0FDQUMsS0FBWTtBQUdoQixnQkFBQSxXQUFJMXBGLEtBQUswbUYsVUFBd0I7QUFNL0IsdUJBRkkvc0QsSUFGRW03QixLQUFjOTBELEtBQUttMUMsS0FBSzJmLGFBQ3hCMW9CLEtBQVFwc0MsS0FBS20xQyxLQUFLL0ksT0FFbEJ1OUMsS0FBbUIsQ0FBQSxHQUNoQi82RSxLQUFJLEdBQUdBLEtBQUlrbUQsR0FBWXB3RCxRQUFRa0s7QUFBQUEsMEJBQ3RDK3FCLEtBQU95UyxHQUFNMG9CLEdBQVlsbUQsRUFBQUEsQ0FBQUEsR0FDaEIyekQsa0JBQWtCZ25CLEVBQUFBLE1BQ3pCRSxLQUFBQSxNQUFrQixXQUNkOXZELEdBQUtpd0QsU0FBQUEsS0FDUEQsR0FBaUI5aUYsS0FBS2l1RCxHQUFZbG1ELEVBQUFBLENBQUFBO0FBS3BDKzZFLGNBQUFBLEdBQWlCamxGLFNBQVMsTUFFNUIxRSxLQUFLMG1GLFdBQVd0NkMsR0FBTXU5QyxHQUFpQkEsR0FBaUJqbEYsU0FBUyxDQUFBLENBQUEsR0FFakUra0YsS0FBQUE7WUFFSjtBQUVBLGdCQUFBLFdBQUl6cEYsS0FBSzBtRixZQUFBQSxVQUEwQitDLElBQTJCO0FBTTVELHVCQUZJNytDLElBRkV1OUIsS0FBY25vRSxLQUFLbTFDLEtBQUtnekIsYUFDeEIxN0IsS0FBUXpzQyxLQUFLbTFDLEtBQUsxSSxPQUVsQm85QyxLQUFtQixDQUFBLEdBQ2hCajdFLEtBQUksR0FBR0EsS0FBSXU1RCxHQUFZempFLFFBQVFrSztBQUFBQSwwQkFDdENnOEIsS0FBTzZCLEdBQU0wN0IsR0FBWXY1RCxFQUFBQSxDQUFBQSxHQUNoQjJ6RCxrQkFBa0JnbkIsRUFBQUEsS0FBQUEsU0FDckIzK0MsR0FBSzgxQixhQUFBQSxXQUFzQjkxQixHQUFLZy9DLFNBQUFBLEtBQ2xDQyxHQUFpQmhqRixLQUFLc2hFLEdBQVl2NUQsRUFBQUEsQ0FBQUE7QUFLcENpN0UsY0FBQUEsR0FBaUJubEYsU0FBUyxNQUM1QjFFLEtBQUswbUYsV0FBV2o2QyxHQUFNbzlDLEdBQWlCQSxHQUFpQm5sRixTQUFTLENBQUEsQ0FBQSxHQUNqRWdsRixLQUFZO1lBRWhCO0FBQUEsdUJBRUkxcEYsS0FBSzBtRixXQUVIMW1GLEtBQUswbUYsU0FBU3IvRSxPQUFPbWlGLE9BQUFBLFdBQ25CeHBGLEtBQUt5bUYsVUFDUHptRixLQUFLeW1GLFFBQVEsSUFBSXFELEdBQU05cEYsS0FBS2d6QyxPQUFPc21DLEtBQUFBLElBR3JDdDVFLEtBQUt5bUYsTUFBTXNELGtCQUFrQkwsSUFDN0IxcEYsS0FBS3ltRixNQUFNdUQsZ0JBQWdCaHFGLEtBQUswbUYsU0FBU3IvRSxJQUt6Q3JILEtBQUt5bUYsTUFBTTBDLFlBQVl0RSxHQUFReDNFLElBQUksR0FBR3czRSxHQUFRenpFLElBQUksQ0FBQSxHQUNsRHBSLEtBQUt5bUYsTUFBTXdELFFBQVFqcUYsS0FBSzBtRixTQUFTa0QsU0FBQUEsQ0FBQUEsR0FDakM1cEYsS0FBS3ltRixNQUFNekwsS0FBQUEsR0FDWGg3RSxLQUFLbTFDLEtBQUtxZSxRQUFRejlDLEtBQUssYUFBYS9WLEtBQUswbUYsU0FBU3IvRSxFQUFBQSxLQUFBQSxXQUdoRHJILEtBQUt5bUYsVUFDUHptRixLQUFLeW1GLE1BQU15RCxLQUFBQSxHQUNYbHFGLEtBQUttMUMsS0FBS3FlLFFBQVF6OUMsS0FBSyxXQUFBO1VBRzdCLEVBQUEsR0FFQSxFQUFBdlAsS0FBQSxtQkFBQW5ELE9BT0EsU0FBZ0J3aEYsSUFBQUE7QUFDZCxnQkFBTTBFLEtBQWF2cEYsS0FBS3VtRixpQkFBaUI0RCx5QkFBeUJ0RixFQUFBQSxHQUU5RHVGLEtBQUFBO0FBQ0osZ0JBQW1DLFdBQS9CcHFGLEtBQUt5bUYsTUFBTXNELGlCQUFBQTtBQUNiLGtCQUFBLFdBQUkvcEYsS0FBS20xQyxLQUFLL0ksTUFBTXBzQyxLQUFLeW1GLE1BQU11RCxhQUFBQSxLQUFBQSxVQUM3QkksS0FDRXBxRixLQUFLbTFDLEtBQUsvSSxNQUFNcHNDLEtBQUt5bUYsTUFBTXVELGFBQUFBLEVBQWV6bkIsa0JBQ3hDZ25CLEVBQUFBLElBS3FCO0FBQ3ZCLG9CQUFNYyxLQUFXcnFGLEtBQUt1bUYsaUJBQWlCMkIsVUFBVXJELEVBQUFBO0FBQ2pEdUYsZ0JBQUFBLEtBQUFBLFdBQ0VDLE1BRUlBLEdBQVNoakYsT0FBT3JILEtBQUt5bUYsTUFBTXVEO2NBQ25DO1lBQUE7QUFBQSx5QkFHRWhxRixLQUFLdW1GLGlCQUFpQjJCLFVBQVVyRCxFQUFBQSxLQUFBQSxXQUM5QjdrRixLQUFLbTFDLEtBQUsxSSxNQUFNenNDLEtBQUt5bUYsTUFBTXVELGFBQUFBLE1BQzdCSSxLQUNFcHFGLEtBQUttMUMsS0FBSzFJLE1BQU16c0MsS0FBS3ltRixNQUFNdUQsYUFBQUEsRUFBZXpuQixrQkFDeENnbkIsRUFBQUE7QUFBQUEsc0JBTU5hLE9BQ0ZwcUYsS0FBSzBtRixXQUFBQSxRQUNMMW1GLEtBQUt5bUYsTUFBTXlELEtBQUFBLEdBQ1hscUYsS0FBS20xQyxLQUFLcWUsUUFBUXo5QyxLQUFLLFdBQUE7VUFFM0IsRUFBQSxDQUFBLENBQUEsR0FBQ3V3RTtRQUFBLEVBaHlCcUI7QUNaUGhtRixXQUtOLE9BQU8sU0FBVWk5QixJQUFBQTtBQUMxQixpQkFBTyxXQUFBO0FBQWlCLG1CQUFPQSxHQUFLdjlCLE1BQU1pQixVQUFVeUQsU0FBU3pELFVBQVUsQ0FBQSxJQUFBLE1BQUs0ZDtVQUFXO1FBQ3pGLEdBTnVCbmQsRUFBQUE7QUNHdkIsWUFBQSxLQUFBLEVBQVdpRyxHQUVXMmlGLEdBQUFBLEdDTmxCanBGLEtBQWNmLEdBQ2Q4M0MsS0FBaUIxMkMsSUFDakIrMEMsS0FBY2h6QyxHQUEwQ2d6QyxhQUN4RGEsS0FBYXR4QyxJQUNieUUsS0FBVzlDLElBQ1g5RCxLQUFvQmdFLEdBQ3BCMUQsS0FBV2lGLElBQ1h5dEMsS0FBVXZ0QyxJQUVWbEMsS0FBU2tFLElBR1RtVCxLQUZzQjlCLEdBRWlCdkcsS0FDdkNvaEMsS0FIc0I3NkIsR0FHdUIxRSxXQUM3QytPLEtBTnVCM2IsR0FNSzJiLE1BQzVCQyxLQVB1QjViLEdBT1U0YixXQUNqQ25SLEtBQVN6VSxHQUFZLENBQUEsRUFBR3lVLE1BQUFBLEdBQ3hCek8sS0FBSyxHQUdMa2pGLEtBQXNCLFNBQVU1eUUsSUFBQUE7QUFDbEMsaUJBQU9BLEdBQU02eUUsV0FBVzd5RSxHQUFNNnlFLFNBQVMsSUFBSUM7UUFDN0MsR0FFSUEsS0FBc0IsV0FBQTtBQUN4QnpxRixlQUFLa2UsVUFBVSxDQUFBO1FBQ2pCLEdBRUl3c0UsS0FBcUIsU0FBVS9qRixJQUFPSCxJQUFBQTtBQUN4QyxpQkFBT3dnQixHQUFLcmdCLEdBQU11WCxTQUFTLFNBQVV4ZSxJQUFBQTtBQUNuQyxtQkFBT0EsR0FBRyxDQUFBLE1BQU84RztVQUNyQixDQUFBO1FBQ0E7QUFFQWlrRixXQUFvQjdwRixZQUFZLEVBQzlCMEIsS0FBSyxTQUFVa0UsSUFBQUE7QUFDYixjQUFJa3lDLEtBQVFneUMsR0FBbUIxcUYsTUFBTXdHLEVBQUFBO0FBQ3JDLGNBQUlreUM7QUFBTyxtQkFBT0EsR0FBTSxDQUFBO1FBQ3pCLEdBQ0RyaUMsS0FBSyxTQUFVN1AsSUFBQUE7QUFDYixpQkFBQSxDQUFBLENBQVNra0YsR0FBbUIxcUYsTUFBTXdHLEVBQUFBO1FBQ25DLEdBQ0Q0UCxLQUFLLFNBQVU1UCxJQUFLbkQsSUFBQUE7QUFDbEIsY0FBSXExQyxLQUFRZ3lDLEdBQW1CMXFGLE1BQU13RyxFQUFBQTtBQUNqQ2t5QyxVQUFBQSxLQUFPQSxHQUFNLENBQUEsSUFBS3IxQyxLQUNqQnJELEtBQUtrZSxRQUFRclgsS0FBSyxDQUFDTCxJQUFLbkQsRUFBQUEsQ0FBQUE7UUFDOUIsR0FDRHkxQyxRQUFVLFNBQVV0eUMsSUFBQUE7QUFDbEIsY0FBSW9ILEtBQVFxWixHQUFVam5CLEtBQUtrZSxTQUFTLFNBQVV4ZSxJQUFBQTtBQUM1QyxtQkFBT0EsR0FBRyxDQUFBLE1BQU84RztVQUN2QixDQUFBO0FBRUksaUJBQUEsQ0FES29ILE1BQU9rSSxHQUFPOVYsS0FBS2tlLFNBQVN0USxJQUFPLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FDOUJBO1FBQ1gsRUFBQTtBQUdILFlDM0JJKzhFLElEMkJKQyxLQUFpQixFQUNmMXlDLGdCQUFnQixTQUFVUCxJQUFTRCxJQUFrQnh4QixJQUFRNHhCLElBQUFBO0FBQzNELGNBQUlqMEIsS0FBYzh6QixHQUFRLFNBQVVwdEMsSUFBTTRXLElBQUFBO0FBQ3hDbTJCLGVBQVcvc0MsSUFBTWdHLEVBQUFBLEdBQ2pCa08sR0FBaUJsVSxJQUFNLEVBQ3JCNE4sTUFBTXUvQixJQUNOcndDLElBQUlBLE1BQ0ptakYsUUFBQUEsT0FBUTNyRSxDQUFBQSxHQUVMaGIsR0FBa0JzZCxFQUFBQSxLQUFXMDFCLEdBQVExMUIsSUFBVTVXLEdBQUt1dEMsRUFBQUEsR0FBUSxFQUFFdnRDLE1BQU1BLElBQU15c0MsWUFBWTl3QixHQUFBQSxDQUFBQTtVQUNqRyxDQUFBLEdBRVEzVixLQUFZc1QsR0FBWWpqQixXQUV4QjhkLEtBQW1CODRCLEdBQXVCRSxFQUFBQSxHQUUxQ2MsS0FBUyxTQUFVanVDLElBQU0vRCxJQUFLbkQsSUFBQUE7QUFDaEMsZ0JBQUlzVSxLQUFRK0csR0FBaUJuVSxFQUFBQSxHQUN6QlQsS0FBTzJzQyxHQUFZaHNDLEdBQVNqRSxFQUFBQSxHQUFBQSxJQUFNO0FBR3RDLG1CQUFBLFNBRklzRCxLQUFleWdGLEdBQW9CNXlFLEVBQUFBLEVBQU92QixJQUFJNVAsSUFBS25ELEVBQUFBLElBQ2xEeUcsR0FBSzZOLEdBQU10USxFQUFBQSxJQUFNaEUsSUFDZmtIO1VBQ2I7QUFpREksaUJBL0NBNnRDLEdBQWU3bkMsSUFBVyxFQUl4QnVvQyxRQUFVLFNBQVV0eUMsSUFBQUE7QUFDbEIsZ0JBQUltUixLQUFRK0csR0FBaUIxZSxJQUFBQTtBQUM3QixnQkFBQSxDQUFLbUUsR0FBU3FDLEVBQUFBO0FBQU0scUJBQUE7QUFDcEIsZ0JBQUlzRCxLQUFPMnNDLEdBQVlqd0MsRUFBQUE7QUFDdkIsbUJBQUEsU0FBSXNELEtBQXNCeWdGLEdBQW9CNXlFLEVBQUFBLEVBQWUsT0FBRW5SLEVBQUFBLElBQ3hEc0QsTUFBUTFDLEdBQU8wQyxJQUFNNk4sR0FBTXRRLEVBQUFBLEtBQUFBLE9BQWN5QyxHQUFLNk4sR0FBTXRRLEVBQUFBO1VBQzVELEdBSURnUCxLQUFLLFNBQWE3UCxJQUFBQTtBQUNoQixnQkFBSW1SLEtBQVErRyxHQUFpQjFlLElBQUFBO0FBQzdCLGdCQUFBLENBQUttRSxHQUFTcUMsRUFBQUE7QUFBTSxxQkFBQTtBQUNwQixnQkFBSXNELEtBQU8yc0MsR0FBWWp3QyxFQUFBQTtBQUN2QixtQkFBQSxTQUFJc0QsS0FBc0J5Z0YsR0FBb0I1eUUsRUFBQUEsRUFBT3RCLElBQUk3UCxFQUFBQSxJQUNsRHNELE1BQVExQyxHQUFPMEMsSUFBTTZOLEdBQU10USxFQUFBQTtVQUNuQyxFQUFBLENBQUEsR0FHSCt3QyxHQUFlN25DLElBQVcyVixLQUFTLEVBR2pDNWpCLEtBQUssU0FBYWtFLElBQUFBO0FBQ2hCLGdCQUFJbVIsS0FBUStHLEdBQWlCMWUsSUFBQUE7QUFDN0IsZ0JBQUltRSxHQUFTcUMsRUFBQUEsR0FBTTtBQUNqQixrQkFBSXNELEtBQU8yc0MsR0FBWWp3QyxFQUFBQTtBQUN2QixxQkFBQSxTQUFJc0QsS0FBc0J5Z0YsR0FBb0I1eUUsRUFBQUEsRUFBT3JWLElBQUlrRSxFQUFBQSxJQUNsRHNELEtBQU9BLEdBQUs2TixHQUFNdFEsRUFBQUEsSUFBQUE7WUFDMUI7VUFDRixHQUdEK08sS0FBSyxTQUFhNVAsSUFBS25ELElBQUFBO0FBQ3JCLG1CQUFPbTFDLEdBQU94NEMsTUFBTXdHLElBQUtuRCxFQUFBQTtVQUMxQixFQUFBLElBQ0MsRUFHRmtqQyxLQUFLLFNBQWFsakMsSUFBQUE7QUFDaEIsbUJBQU9tMUMsR0FBT3g0QyxNQUFNcUQsSUFBQUEsSUFBTztVQUM1QixFQUFBLENBQUEsR0FHSXdnQjtRQUNSLEVBQUEsR0NoSUNveUIsS0FBVzMxQyxJQUNYVixLQUFTOEIsR0FDVEwsS0FBY29DLEdBQ2QyMEMsS0FBaUJweUMsSUFDakJ1eEMsS0FBeUI1dkMsSUFDekI4dkMsS0FBYTV2QyxJQUNiK2lGLEtBQWlCeGhGLElBQ2pCakYsS0FBV21GLElBQ1h1aEYsS0FBdUJ4L0UsR0FBdUMyTSxTQUM5RDlYLEtBQVFvTCxHQUNSbU0sS0FBa0JrRixJQUVsQmpaLEtBQVV0QixRQUVWNGhCLEtBQVVoTyxNQUFNZ08sU0FFaEIweEIsS0FBZWh5QyxHQUFRZ3lDLGNBRXZCbzFDLEtBQVdwbkYsR0FBUW9uRixVQUVuQkMsS0FBV3JuRixHQUFRcW5GLFVBRW5CQyxLQUFTdG5GLEdBQVFzbkYsUUFFakJDLEtBQU92bkYsR0FBUXVuRixNQUVmQyxLQUFTLENBQUEsR0FDVEMsS0FBUyxDQUFBLEdBQ1RDLEtBQUFBLENBQVd4ckYsR0FBTytaLGlCQUFpQixtQkFBbUIvWixJQUd0RCszQyxLQUFVLFNBQVVwYSxJQUFBQTtBQUN0QixpQkFBTyxXQUFBO0FBQ0wsbUJBQU9BLEdBQUt2OUIsTUFBTWlCLFVBQVV5RCxTQUFTekQsVUFBVSxDQUFBLElBQUEsTUFBSzRkO1VBQ3hEO1FBQ0EsR0FJSXdzRSxLQUFXNXpDLEdBQVcsV0FBV0UsSUFBU2l6QyxFQUFBQSxHQUMxQ1UsS0FBbUJELEdBQVN6cUYsV0FDNUIycUYsS0FBWWxxRixHQUFZaXFGLEdBQWlCbDFFLEdBQUFBO0FBYzdDLFlBQUlxQjtBQUFpQixjQUFJMnpFLElBQVM7QUFDaENULGlCQUFrQkMsR0FBZTF5QyxlQUFlUCxJQUFTLFdBQUEsSUFBVyxHQUNwRUosR0FBdUJoZixPQUFBQTtBQUN2QixnQkFBSWl6RCxLQUFlbnFGLEdBQVlpcUYsR0FBeUIsTUFBQSxHQUNwREcsS0FBWXBxRixHQUFZaXFGLEdBQWlCajFFLEdBQUFBLEdBQ3pDcTFFLEtBQVlycUYsR0FBWWlxRixHQUFpQmhwRixHQUFBQTtBQUM3QzgxQyxlQUFla3pDLElBQWtCLEVBQy9CeHlDLFFBQVUsU0FBVXR5QyxJQUFBQTtBQUNsQixrQkFBSXJDLEdBQVNxQyxFQUFBQSxLQUFBQSxDQUFTa3ZDLEdBQWFsdkMsRUFBQUEsR0FBTTtBQUN2QyxvQkFBSW1SLEtBQVFrekUsR0FBcUI3cUYsSUFBQUE7QUFFakMsdUJBREsyWCxHQUFNNnlFLFdBQVE3eUUsR0FBTTZ5RSxTQUFTLElBQUlHLE9BQy9CYSxHQUFheHJGLE1BQU13RyxFQUFBQSxLQUFRbVIsR0FBTTZ5RSxPQUFlLE9BQUVoa0YsRUFBQUE7Y0FDMUQ7QUFBQyxxQkFBT2dsRixHQUFheHJGLE1BQU13RyxFQUFBQTtZQUM3QixHQUNENlAsS0FBSyxTQUFhN1AsSUFBQUE7QUFDaEIsa0JBQUlyQyxHQUFTcUMsRUFBQUEsS0FBQUEsQ0FBU2t2QyxHQUFhbHZDLEVBQUFBLEdBQU07QUFDdkMsb0JBQUltUixLQUFRa3pFLEdBQXFCN3FGLElBQUFBO0FBRWpDLHVCQURLMlgsR0FBTTZ5RSxXQUFRN3lFLEdBQU02eUUsU0FBUyxJQUFJRyxPQUMvQmMsR0FBVXpyRixNQUFNd0csRUFBQUEsS0FBUW1SLEdBQU02eUUsT0FBT24wRSxJQUFJN1AsRUFBQUE7Y0FDakQ7QUFBQyxxQkFBT2lsRixHQUFVenJGLE1BQU13RyxFQUFBQTtZQUMxQixHQUNEbEUsS0FBSyxTQUFha0UsSUFBQUE7QUFDaEIsa0JBQUlyQyxHQUFTcUMsRUFBQUEsS0FBQUEsQ0FBU2t2QyxHQUFhbHZDLEVBQUFBLEdBQU07QUFDdkMsb0JBQUltUixLQUFRa3pFLEdBQXFCN3FGLElBQUFBO0FBRWpDLHVCQURLMlgsR0FBTTZ5RSxXQUFRN3lFLEdBQU02eUUsU0FBUyxJQUFJRyxPQUMvQmMsR0FBVXpyRixNQUFNd0csRUFBQUEsSUFBT2tsRixHQUFVMXJGLE1BQU13RyxFQUFBQSxJQUFPbVIsR0FBTTZ5RSxPQUFPbG9GLElBQUlrRSxFQUFBQTtjQUN2RTtBQUFDLHFCQUFPa2xGLEdBQVUxckYsTUFBTXdHLEVBQUFBO1lBQzFCLEdBQ0Q0UCxLQUFLLFNBQWE1UCxJQUFLbkQsSUFBQUE7QUFDckIsa0JBQUljLEdBQVNxQyxFQUFBQSxLQUFBQSxDQUFTa3ZDLEdBQWFsdkMsRUFBQUEsR0FBTTtBQUN2QyxvQkFBSW1SLEtBQVFrekUsR0FBcUI3cUYsSUFBQUE7QUFDNUIyWCxnQkFBQUEsR0FBTTZ5RSxXQUFRN3lFLEdBQU02eUUsU0FBUyxJQUFJRyxPQUN0Q2MsR0FBVXpyRixNQUFNd0csRUFBQUEsSUFBTytrRixHQUFVdnJGLE1BQU13RyxJQUFLbkQsRUFBQUEsSUFBU3NVLEdBQU02eUUsT0FBT3AwRSxJQUFJNVAsSUFBS25ELEVBQUFBO2NBQzVFO0FBQU1rb0YsbUJBQVV2ckYsTUFBTXdHLElBQUtuRCxFQUFBQTtBQUM1QixxQkFBT3JEO1lBQ1IsRUFBQSxDQUFBO1VBR0w7QUFoRFNpMkMsa0JBQVkvMUMsR0FBTSxXQUFBO0FBQ3ZCLGtCQUFJeXJGLEtBQWNYLEdBQU8sQ0FBQSxDQUFBO0FBRXpCLHFCQURBTyxHQUFVLElBQUlGLE1BQVlNLElBQWEsQ0FBQSxHQUFBLENBQy9CYixHQUFTYSxFQUFBQTtZQUNyQixDQUFBLEtBNkNFdnpDLEdBQWVrekMsSUFBa0IsRUFDL0JsMUUsS0FBSyxTQUFhNVAsSUFBS25ELElBQUFBO0FBQ3JCLGtCQUFJdW9GO0FBUUoscUJBUEk1bkUsR0FBUXhkLEVBQUFBLE1BQ05za0YsR0FBU3RrRixFQUFBQSxJQUFNb2xGLEtBQXNCVixLQUNoQ0gsR0FBU3ZrRixFQUFBQSxNQUFNb2xGLEtBQXNCVCxNQUVoREksR0FBVXZyRixNQUFNd0csSUFBS25ELEVBQUFBLEdBQ2pCdW9GLE9BQXdCVixNQUFRRixHQUFPeGtGLEVBQUFBLEdBQ3ZDb2xGLE9BQXdCVCxNQUFRRixHQUFLemtGLEVBQUFBLEdBQ2xDeEc7WUFDUixFQUFBLENBQUE7QUN0R0wsWUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsS0FBQSxFQUFXZ0csR0FFV3NSLE9BQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQSxJQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxjQUFBQSxRQUFBQSxNQUFBQSxDQUFBQTtBQUFBQSxrQkFBQUEsSUFBQUEsVUFBQUEsK0NBQUFBO0FBQUFBLGNBQUFBLGNBQUFBLE9BQUFBLEtBQUFBLE9BQUFBLE1BQUFBLENBQUFBLEtBQUFBLENBQUFBLEdBQUFBLElBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxVQUFBQSwwRUFBQUE7QUFBQUEsaUJBQUFBLFFBQUFBLEtBQUFBLEtBQUFBLFFBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLEVBQUFBLElBQUFBLEtBQUFBLEdBQUFBLFFBQUFBLEdBQUFBLElBQUFBLEVBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQSxJQUFBQSxJQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxjQUFBQSxRQUFBQTtBQUFBQSxrQkFBQUEsSUFBQUEsVUFBQUEsZ0NBQUFBO0FBQUFBLGNBQUFBLFFBQUFBLE1BQUFBLENBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxVQUFBQSwrQ0FBQUE7QUFBQUEsY0FBQUEsY0FBQUEsT0FBQUEsS0FBQUEsT0FBQUEsTUFBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVBQUFBLHlFQUFBQTtBQUFBQSxpQkFBQUEsUUFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsSUFBQUEsRUFBQUEsSUFBQUEsS0FBQUEsR0FBQUEsUUFBQUEsS0FBQUEsR0FBQUEsSUFBQUEsSUFBQUEsRUFBQUEsR0FBQUE7UUFBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBLElBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLFdBQUFBLE1BQUFBLEdBQUFBLEVBQUFBLEtBQUFBLEdBQUFBLFlBQUFBO0FBQUFBLGNBQUFBLENBQUFBLElBQUFBO0FBQUFBLGdCQUFBQSxHQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxTQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxrQkFBQUE7QUFBQUEsa0JBQUFBLENBQUFBO0FBQUFBO0FBQUFBLGtCQUFBQSxZQUFBQSxPQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsSUFBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLE9BQUFBLFVBQUFBLFNBQUFBLEtBQUFBLEVBQUFBLENBQUFBLEVBQUFBLEtBQUFBLElBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLDJCQUFBQSxNQUFBQSxHQUFBQSxnQkFBQUEsS0FBQUEsR0FBQUEsWUFBQUE7QUFBQUEsa0JBQUFBLFVBQUFBLE1BQUFBLFVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsZ0JBQUFBLE1BQUFBLDJDQUFBQSxLQUFBQSxFQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsSUFBQUEsRUFBQUE7WUFBQUEsRUFBQUEsRUFBQUEsTUFBQUEsTUFBQUEsTUFBQUEsWUFBQUEsT0FBQUEsR0FBQUEsUUFBQUE7QUFBQUEsY0FBQUEsT0FBQUEsS0FBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLFdBQUFBO2NBQUFBO0FBQUFBLHFCQUFBQSxFQUFBQSxHQUFBQSxJQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSx1QkFBQUEsTUFBQUEsR0FBQUEsU0FBQUEsRUFBQUEsTUFBQUEsS0FBQUEsSUFBQUEsRUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsU0FBQUEsSUFBQUE7QUFBQUEsc0JBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLEdBQUFBO1lBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxVQUFBQSx1SUFBQUE7VUFBQUE7QUFBQUEsY0FBQUEsSUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7QUFBQUEsaUJBQUFBLEVBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLEVBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUEsR0FBQUEsTUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsU0FBQUEsSUFBQUE7QUFBQUEsWUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBO0FBQUFBLGNBQUFBLE1BQUFBLFFBQUFBLEdBQUFBLFVBQUFBLEdBQUFBLE9BQUFBO1lBQUFBLFVBQUFBO0FBQUFBLGtCQUFB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QUFBQSxPQUFBQSxVQUFBQSxTQUFBQSxLQUFBQSxFQUFBQSxDQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSwyQkFBQUEsTUFBQUEsR0FBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLFlBQUFBO0FBQUFBLGtCQUFBQSxVQUFBQSxNQUFBQSxVQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLGdCQUFBQSxNQUFBQSwyQ0FBQUEsS0FBQUEsRUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO1lBQUFBLEVBQUFBLEVBQUFBLE1BQUFBLE1BQUFBLE1BQUFBLFlBQUFBLE9BQUFBLEdBQUFBLFFBQUFBO0FBQUFBLGNBQUFBLE9BQUFBLEtBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxXQUFBQTtjQUFBQTtBQUFBQSxxQkFBQUEsRUFBQUEsR0FBQUEsSUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsdUJBQUFBLE1BQUFBLEdBQUFBLFNBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLElBQUFBLEVBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLElBQUFBLEVBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHNCQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtZQUFBQTtBQUFBQSxrQkFBQUEsSUFBQUEsVUFBQUEsdUlBQUFBO1VBQUFBO0FBQUFBLGNBQUFBLElBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO0FBQUFBLGlCQUFBQSxFQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxFQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLE1BQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdB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QUEsa0JBQUFBLENBQUFBO0FBQUFBO0FBQUFBLGtCQUFBQSxZQUFBQSxPQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsSUFBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLE9BQUFBLFVBQUFBLFNBQUFBLEtBQUFBLEVBQUFBLENBQUFBLEVBQUFBLEtBQUFBLElBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLDJCQUFBQSxNQUFBQSxHQUFBQSxnQkFBQUEsS0FBQUEsR0FBQUEsWUFBQUE7QUFBQUEsa0JBQUFBLFVBQUFBLE1BQUFBLFVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsZ0JBQUFBLE1BQUFBLDJDQUFBQSxLQUFBQSxFQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsSUFBQUEsRUFBQUE7WUFBQUEsRUFBQUEsRUFBQUEsTUFBQUEsTUFBQUEsTUFBQUEsWUFBQUEsT0FBQUEsR0FBQUEsUUFBQUE7QUFBQUEsY0FBQUEsT0FBQUEsS0FBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLFdBQUFBO2NBQUFBO0FBQUFBLHFCQUFBQSxFQUFBQSxHQUFBQSxJQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSx1QkFBQUEsTUFBQUEsR0FBQUEsU0FBQUEsRUFBQUEsTUFBQUEsS0FBQUEsSUFBQUEsRUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsU0FBQUEsSUFBQUE7QUFBQUEsc0JBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLEdBQUFBO1lBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxVQUFBQSx1SUFBQUE7VUFBQUE7QUFBQUEsY0FBQUEsSUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7QUFBQUEsaUJBQUFBLEVBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLEVBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQTtBQUFBQSxt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QSxPQUFBQSxLQUFBQSxHQUFBQSxFQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxxQkFBQUEsR0FBQUEsSUFBQUEsRUFBQUEsRUFBQUE7WUFBQUEsQ0FBQUEsSUFBQUEsR0FBQUEsS0FBQUEsTUFBQUEsSUFBQUEsRUFBQUE7VUFBQUE7QUFBQUEsaUJBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsVUFBQUEsUUFBQUEsTUFBQUE7QUFBQUEsZ0JBQUFBLElBQUFBLElBQUFBLEtBQUFBLFFBQUFBLFVBQUFBLEVBQUFBLElBQUFBLFVBQUFBLEVBQUFBLElBQUFBLENBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLElBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLE9BQUFBLEVBQUFBLEdBQUFBLElBQUFBLENBQUFBLEVBQUFBLEtBQUFBLElBQUFBLFNBQUFBLElBQUFBO0FBQUFBLGlCQUFBQSxJQUFBQSxJQUFBQSxHQUFBQSxFQUFBQSxDQUFBQTtZQUFBQSxDQUFBQSxJQUFBQSxLQUFBQSxHQUFBQSxJQUFBQSxHQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxPQUFBQSxFQUFBQSxDQUFBQSxDQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxpQkFBQUEsSUFBQUEsSUFBQUEsR0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUE7WUFBQUEsQ0FBQUE7VUFBQUE7QUFBQUEsaUJBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxXQUFBQSxNQUFBQSxHQUFBQSxFQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxjQUFBQSxDQUFBQSxJQUFBQTtBQUFBQSxnQkFBQUEsR0FBQUEsRUFBQUEsTUFBQUEsS0FBQUEsU0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsa0JBQUFBO0FBQUFBLGtCQUFBQSxDQUFBQTtBQUFBQTtBQUFBQSxrQkFBQUEsWUFBQUEsT0FBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxPQUFBQSxVQUFBQSxTQUFBQSxLQUFBQSxFQUFBQSxDQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSwyQkFBQUEsTUFBQUEsR0FBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLFlBQUFBO0FBQUFBLGtCQUFBQSxVQUFBQSxNQUFBQSxVQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLGdCQUFBQSxNQUFBQSwyQ0FBQUEsS0FBQUEsRUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO1lBQUFBLEVBQUFBLEVBQUFBLE1BQUFBLE1BQUFBLE1BQUFBLFlBQUFBLE9BQUFBLEdBQUFBLFFBQUFBO0FBQUFBLGNBQUFBLE9BQUFBLEtBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxXQUFBQTtjQUFBQTtBQUFBQSxxQkFBQUEsRUFBQUEsR0FBQUEsSUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsdUJBQUFBLE1BQUFBLEdBQUFBLFNBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLElBQUFBLEVBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLElBQUFBLEVBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHNCQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtZQUFBQTtBQUFBQSxrQkFBQUEsSUFBQUEsVUFBQUEsdUlBQUFBO1VBQUFBO0FBQUFBLGNBQUFBLElBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO0FBQUFBLGlCQUFBQSxFQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxFQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLE1BQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQTtBQUFBQSxjQUFBQSxNQUFBQSxRQUFBQSxHQUFBQSxVQUFBQSxHQUFBQSxPQUFBQTtZQUFBQSxVQUFBQTtBQUFBQSxrQkFBQUE7QUFBQUEsc0JBQUFBO1lBQUFBO1VBQUFBLEVBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxXQUFBQSxRQUFBQSxNQUFBQSxLQUFBQSxHQUFBQSxZQUFBQSxLQUFBQSxHQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsSUFBQUEsTUFBQUEsRUFBQUEsR0FBQUEsS0FBQUEsSUFBQUE7QUFBQUEsWUFBQUEsR0FBQUEsRUFBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsaUJBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsZUFBQUEsT0FBQUEsV0FBQUEsQ0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxHQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLGNBQUFBLE9BQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUE7QUFBQUEscUJBQUFBLFFBQUFBLFVBQUFBLFFBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEdBQUFBLFdBQUFBO2NBQUFBLENBQUFBLENBQUFBLEdBQUFBO1lBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHFCQUFBQTtZQUFBQTtVQUFBQSxFQUFBQTtBQUFBQSxpQkFBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLElBQUFBLEtBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsSUFBQUEsV0FBQUEsRUFBQUE7WUFBQUE7QUFBQUEs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QTtBQUFBQSxxQkFBQUEsRUFBQUEsR0FBQUEsSUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsdUJBQUFBLE1BQUFBLEdBQUFBLFNBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLElBQUFBLEVBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLElBQUFBLEVBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHNCQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtZQUFBQTtBQUFBQSxrQkFBQUEsSUFBQUEsVUFBQUEsdUlBQUFBO1VBQUFBO0FBQUFBLGNBQUFBLElBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO0FBQUFBLGlCQUFBQSxFQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxFQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLE1BQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQTtBQUFBQSxjQUFBQSxNQUFBQSxRQUFBQSxHQUFBQSxVQUFBQSxHQUFBQSxPQUFBQTtZQUFBQSxVQUFBQTtBQUFBQSxrQkFBQUE7QUFBQUEsc0JBQUFBO1lBQUFBO1VBQUFBLEVBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxXQUFBQSxRQUFBQSxNQUFBQSxLQUFBQSxHQUFBQSxZQUFBQSxLQUFBQSxHQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsSUFBQUEsTUFBQUEsRUFBQUEsR0FBQUEsS0FBQUEsSUFBQUE7QUFBQUEsWUFBQUEsR0FBQUEsRUFBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsaUJBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsZUFBQUEsT0FBQUEsV0FBQUEsQ0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxHQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLGNBQUFBLE9BQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUE7QUFBQUEscUJBQUFBLFFBQUFBLFVBQUFBLFFBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEdBQUFBLFdBQUFBO2NBQUFBLENBQUFBLENBQUFBLEdBQUFBO1lBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHFCQUFBQTtZQUFBQTtVQUFBQSxFQUFBQTtBQUFBQSxpQkFBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLElBQUFBLEtBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsSUFBQUEsV0FBQUEsRUFBQUE7WUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsTUFBQUEsTUFBQUEsU0FBQUE7QUFBQUEsbUJBQUFBLEdBQUFBLE1BQUFBLEVBQUFBO1VBQUFBO1FBQUFBO0FDekRHeUgsWUFBQUEsTUFBQUEsU0FJWHBELElBQUFBO0FBQUE3WSxhQUFBaWMsSUFBQXBELEVBQUFBO0FBQUEsY0FBQS9iLEtBQUFnYyxHQUFBbUQsRUFBQUE7QUFxQkEsbUJBQUFBLEdBQ0V6N0MsSUFDQStCLElBQUFBO0FBQXVDLGdCQUFBK2MsSUFBQXNUO0FBUXBCLG1CQVJvQjc4QixFQUFBQSxNQUFBa21ELEVBQUFBLEdBcEJ6Q3YvQixHQUFBMEwsR0FzQkV3SyxLQUFBa0ssR0FBQXJsQyxLQUFBZCxJQUFBQSxDQUFBQSxHQUFBQSxVQXJCYyxDQUFBLEdBTzZCK2xCLEdBQUEwTCxHQUFBd0ssRUFBQUEsR0FBQUEsUUFDWixJQUFBc2pCLElBQUFBLEdBZS9CdGpCLEdBQUttbUIsV0FBV3gyQyxNQUFXLENBQUEsR0FFM0Jxd0IsR0FBS3NwQixZQUFZeDhCLEdBQUFKLEtBQUFzVCxHQUFLdXBCLFFBQUFBLEVBQVExa0QsS0FBQTZuQixJQUFBOEksR0FBQXdLLEVBQUFBLENBQUFBLEdBRTlCQSxHQUFLd3BCLFFBQVE1N0MsRUFBQUEsR0FBTW95QjtVQUNyQjtBQWljQyxpQkE1YkRyVyxHQUFBMC9CLElBQUEsQ0FBQSxFQUFBLytDLEtBQUEsVUFBQWpFLEtBL0JBLFdBQUE7QUFDRSxtQkFBT3RDLEtBQUswbEQsV0FBQUEsRUFBYTFDO1VBQzNCLEVBQUEsR0FBQyxFQUFBejhDLEtBQUEsV0FBQWxELE9BdUNNLFNBQVF3RyxJQUFBQTtBQUNiLGdCQUFJN0osS0FBS3FpRCxPQUFPO0FBRVZyaUQsbUJBQUtxaUQsTUFBTTc0QixPQUNieHBCLEtBQUtxaUQsTUFBTTc0QixJQUFJLEtBQUt4cEIsS0FBS3VsRCxTQUFBQTtBQUkzQixrQkFBTTdCLEtBQU0xakQsS0FBS3FpRCxNQUFNc0QsT0FBTyxFQUFFanVDLFFBQU13UyxHQUFFbHFCLEtBQUtvaUQsUUFBQUEsRUFBQUEsQ0FBQUEsR0FDdkMzNEIsS0FBUXpwQixLQUFLcWlELE1BQU0vL0MsSUFBSW9oRCxFQUFBQTtBQUU3QjFqRCxtQkFBSzRsRCxLQUFLcDFCLE1BQUFBLEdBQ1Z4d0IsS0FBS3lFLFNBQVMsR0FDZHpFLEtBQUs2aUQsU0FBUyxVQUFVLEVBQUVwNUIsT0FBT2k2QixJQUFLMzVCLFNBQVNOLEdBQUFBLENBQUFBO1lBQ2hEO0FBRUQsZ0JBQVksUUFBUjVmLElBQWM7QUFDaEI3SixtQkFBS3FpRCxRQUFReDRDO0FBSWIsdUJBRE02NUMsS0FBTTFqRCxLQUFLcWlELE1BQU1zRCxPQUFPLEVBQUVqdUMsUUFBTXdTLEdBQUVscUIsS0FBS29pRCxRQUFBQSxFQUFBQSxDQUFBQSxHQUNwQ3h4QyxLQUFJLEdBQUdFLEtBQU00eUMsR0FBSWovQyxRQUFRbU0sS0FBSUUsSUFBS0YsTUFBSztBQUM5QyxvQkFBTXhKLEtBQUtzOEMsR0FBSTl5QyxFQUFBQTtBQUNmNVEscUJBQUs0bEQsS0FBSzk4QixJQUFJMWhCLEVBQUFBO2NBQ2Y7QUFDRHBILG1CQUFLeUUsU0FBU2kvQyxHQUFJai9DLFFBQ2xCekUsS0FBSzZpRCxTQUFTLE9BQU8sRUFBRXA1QixPQUFPaTZCLEdBQUFBLENBQUFBO1lBQy9CO0FBQ0MxakQsbUJBQUtxaUQsUUFBUSxJQUFJSjtBQUlmamlELGlCQUFLcWlELE1BQU0vNEIsTUFDYnRwQixLQUFLcWlELE1BQU0vNEIsR0FBRyxLQUFLdHBCLEtBQUt1bEQsU0FBQUE7VUFFNUIsRUFBQSxHQUVBLEVBQUFoL0MsS0FBQSxXQUFBbEQsT0FJTyxXQUFBO0FBV0wscUJBVk1xZ0QsS0FBTTFqRCxLQUFLcWlELE1BQU1zRCxPQUFPLEVBQzVCanVDLFFBQU13UyxHQUFFbHFCLEtBQUtvaUQsUUFBQUEsRUFBQUEsQ0FBQUEsR0FFVHlELEtBQU16NEIsR0FBT3B0QixLQUFLNGxELElBQUFBLEdBQ2xCRSxLQUE4QixDQUFBLEdBQzlCdEQsS0FBaUIsQ0FBQSxHQUNqQmtDLEtBQW1CLENBQUEsR0FDbkJDLEtBQXlDLENBQUEsR0FHdEMvekMsS0FBSSxHQUFHRSxLQUFNNHlDLEdBQUlqL0MsUUFBUW1NLEtBQUlFLElBQUtGLE1BQUs7QUFDOUMsa0JBQU14SixLQUFLczhDLEdBQUk5eUMsRUFBQUE7QUFDZmsxQyxjQUFBQSxHQUFPMStDLEVBQUFBLElBQUFBLE1BQ0ZwSCxLQUFLNGxELEtBQUt0d0MsSUFBSWxPLEVBQUFBLE1BQ2pCbzdDLEdBQVM1N0MsS0FBS1EsRUFBQUEsR0FDZHBILEtBQUs0bEQsS0FBSzk4QixJQUFJMWhCLEVBQUFBO1lBRWpCO0FBR0QscUJBQVN3SixLQUFJLEdBQUdFLEtBQU0rMEMsR0FBT3BoRCxRQUFRbU0sS0FBSUUsSUFBS0YsTUFBSztBQUNqRCxrQkFBTXhKLEtBQUt5K0MsR0FBT2oxQyxFQUFBQSxHQUNaa2IsS0FBTzlyQixLQUFLcWlELE1BQU0vL0MsSUFBSThFLEVBQUFBO0FBQ2hCLHNCQUFSMGtCLEtBS0YyWixRQUFRcmxDLE1BQU0sb0NBQUEsSUFDSjBsRCxHQUFPMStDLEVBQUFBLE1BQ2pCczlDLEdBQVc5OUMsS0FBS1EsRUFBQUEsR0FDaEJ1OUMsR0FBYS85QyxLQUFLa2xCLEVBQUFBLEdBQ2xCOXJCLEtBQUs0bEQsS0FBS24xQixPQUFPcnBCLEVBQUFBO1lBRXBCO0FBRURwSCxpQkFBS3lFLFVBQVUrOUMsR0FBUy85QyxTQUFTaWdELEdBQVdqZ0QsUUFHeEMrOUMsR0FBUy85QyxVQUNYekUsS0FBSzZpRCxTQUFTLE9BQU8sRUFBRXA1QixPQUFPKzRCLEdBQUFBLENBQUFBLEdBRTVCa0MsR0FBV2pnRCxVQUNiekUsS0FBSzZpRCxTQUFTLFVBQVUsRUFBRXA1QixPQUFPaTdCLElBQVkzNkIsU0FBUzQ2QixHQUFBQSxDQUFBQTtVQUUxRCxFQUFBLEdBNERBLEVBQUFwK0MsS0FBQSxPQUFBbEQsT0FDTyxTQUNMb2hCLElBQ0FDLElBQUFBO0FBTUEsZ0JBQWtCLFFBQWQxa0IsS0FBS3FpRDtBQUNQLHFCQUFPO0FBSVQsZ0JBQ0l6MkMsSUFEQTgzQyxLQUF3QjtBQUV4QjFHLGVBQUt2NEIsRUFBQUEsS0FBVWtJLEdBQWNsSSxFQUFBQSxLQUMvQmkvQixLQUFNai9CLElBQ043WSxLQUFVOFksTUFFVjlZLEtBQVU2WTtBQUlaLGdCQUFNc2hDLEtBQTZDMUMsR0FDakQsQ0FBQSxHQUNBcmpELEtBQUtvaUQsVUFDTHgyQyxFQUFBQSxHQUlJbzZDLEtBQVU5N0IsR0FBR2xxQixLQUFLb2lELFFBQUFBLEdBQ2xCNkQsS0FBZ0JyNkMsTUFBT3NlLEdBQUl0ZSxFQUFBQTtBQU9qQyxtQkFOSW82QyxNQUFjQyxPQUNoQkYsR0FBWXJ1QyxTQUFTLFNBQUNvVSxJQUFBQTtBQUNwQixxQkFBT2s2QixHQUFXbDZCLEVBQUFBLEtBQVNtNkIsR0FBY242QixFQUFBQTtZQUFBQSxJQUlsQyxRQUFQNDNCLEtBQ0sxakQsS0FBS3FpRCxNQUFNLy9DLElBQUl5akQsRUFBQUEsSUFFZi9sRCxLQUFLcWlELE1BQU0vL0MsSUFBSW9oRCxJQUFLcUMsRUFBQUE7VUFFL0IsRUFBQSxHQUVBLEVBQUF4L0MsS0FBQSxVQUFBbEQsT0FDTyxTQUFPdUksSUFBQUE7QUFDWixnQkFBSTVMLEtBQUtxaUQsTUFBTTU5QyxRQUFRO0FBQ3JCLGtCQUVJaVQsSUFGRXd1QyxLQUFhaDhCLEdBQUdscUIsS0FBS29pRCxRQUFBQSxHQUNyQjZELEtBQTJCLFFBQVhyNkMsS0FBZXNlLEdBQUd0ZSxFQUFBQSxJQUFpQjtBQWV6RCxxQkFWSThMLEtBRkF1dUMsS0FDRUMsS0FDTyxTQUFDcDZCLElBQUFBO0FBQ1IsdUJBQU9vNkIsR0FBY3A2QixFQUFBQSxLQUFTbTZCLEdBQWNuNkIsRUFBQUE7Y0FBQUEsSUFHckNtNkIsS0FHRkMsSUFHSmxtRCxLQUFLcWlELE1BQU1zRCxPQUFPLEVBQ3ZCanVDLFFBQVFBLElBQ1Jzc0MsT0FBT3A0QyxNQUFXQSxHQUFRbzRDLE1BQUFBLENBQUFBO1lBRTdCO0FBQ0MsbUJBQU8sQ0FBQTtVQUVYLEVBQUEsR0FFQSxFQUFBejlDLEtBQUEsV0FBQWxELE9BQ08sU0FDTDRtQixJQUNBcmUsSUFBQUE7QUFFQSxnQkFBSTVMLEtBQUtxaUQsT0FBTztBQUFBLGtCQUFBejVCLElBR1ZsUixJQUZFd3VDLEtBQWFoOEIsR0FBR2xxQixLQUFLb2lELFFBQUFBLEdBQ3JCNkQsS0FBZ0JyNkMsTUFBT3NlLEdBQUl0ZSxFQUFBQTtBQUs3QjhMLGNBQUFBLEtBRkF1dUMsS0FDRUMsS0FDTyxTQUFVcDZCLElBQUFBO0FBQ2pCLHVCQUFPbzZCLEdBQWNwNkIsRUFBQUEsS0FBU202QixHQUFjbjZCLEVBQUFBO2NBQUFBLElBR3JDbTZCLEtBR0ZDLElBR1h0UixHQUFBaHNCLEtBQUE1b0IsS0FBS3FpRCxLQUFBQSxFQUFLdmhELEtBQUE4bkIsSUFBU3FCLElBQVUsRUFDM0J2UyxRQUFRQSxJQUNSc3NDLE9BQU9wNEMsTUFBV0EsR0FBUW80QyxNQUFBQSxDQUFBQTtZQUU3QjtVQUNILEVBQUEsR0FFQSxFQUFBejlDLEtBQUEsT0FBQWxELE9BQ08sU0FDTDRtQixJQUNBcmUsSUFBQUE7QUFJQSxnQkFBSTVMLEtBQUtxaUQsT0FBTztBQUFBLGtCQUFBeDVCLElBR1ZuUixJQUZFd3VDLEtBQWFoOEIsR0FBR2xxQixLQUFLb2lELFFBQUFBLEdBQ3JCNkQsS0FBZ0JyNkMsTUFBT3NlLEdBQUl0ZSxFQUFBQTtBQWVqQyxxQkFWSThMLEtBRkF1dUMsS0FDRUMsS0FDTyxTQUFDcDZCLElBQUFBO0FBQ1IsdUJBQU9vNkIsR0FBY3A2QixFQUFBQSxLQUFTbTZCLEdBQWNuNkIsRUFBQUE7Y0FBQUEsSUFHckNtNkIsS0FHRkMsSUFHSi83QixHQUFBdEIsS0FBQTdvQixLQUFLcWlELEtBQUFBLEVBQUt2aEQsS0FBQStuQixJQUFLb0IsSUFBVSxFQUM5QnZTLFFBQVFBLElBQ1Jzc0MsT0FBT3A0QyxNQUFXQSxHQUFRbzRDLE1BQUFBLENBQUFBO1lBRTdCO0FBQ0MsbUJBQU8sQ0FBQTtVQUVYLEVBQUEsR0FFQSxFQUFBejlDLEtBQUEsY0FBQWxELE9BQ08sV0FBQTtBQUNMLG1CQUFPckQsS0FBS3FpRCxNQUFNcUQsV0FBQUE7VUFDcEIsRUFBQSxHQUVBLEVBQUFuL0MsS0FBQSxVQUFBbEQsT0FDTyxTQUFPcWdELElBQUFBO0FBQWtCLGdCQUFBaDZCO0FBQzlCLG1CQUFPMXBCLEtBQUtxaUQsTUFBTThELE9BQ2hCekMsTUFBTyxFQUNMdCtCLENBQUFBLEVBQUFBLEdBQW1CMkQsR0FBQVcsS0FBQXE2QixHQUFBL2pELEtBQUs0bEQsSUFBQUEsQ0FBQUEsRUFBSTlrRCxLQUFBNG9CLElBQVcxcEIsS0FBSzRsRCxJQUFBQSxFQUFBQSxDQUFBQTtVQUdsRCxFQUFBLEdBRUEsRUFBQXIvQyxLQUFBLFdBQUFsRCxPQVFPLFdBQUE7QUFBTyxnQkFBQStpRDtBQUNFQSxzQkFBZEEsS0FBSXBtRCxLQUFLcWlELFVBQUFBLFdBQUsrRCxNQUFWQSxHQUFZNThCLE9BQ2R4cEIsS0FBS3FpRCxNQUFNNzRCLElBQUksS0FBS3hwQixLQUFLdWxELFNBQUFBO0FBRzNCLGdCQVdxRHhkLElBWC9DM0MsS0FBVSxnREFDVjM3QixLQUFjLEVBQ2xCbkgsS0FBSyxXQUFBO0FBQ0gsb0JBQU0sSUFBSWdqQyxNQUFNRixFQUFBQTtZQUNqQixHQUNEL3ZCLEtBQUssV0FBQTtBQUNILG9CQUFNLElBQUlpd0IsTUFBTUYsRUFBQUE7WUFDakIsR0FFRDloQyxjQUFBQSxNQUFjLEdBQ2Qwa0MsS0FBQUMsR0FDZ0JDLEdBQWdCb2QsR0FBUzFrRCxTQUFBQSxDQUFBQTtBQUFVLGdCQUFBO0FBQXJELG1CQUFBb25DLEdBQUFHLEVBQUFBLEdBQUFBLEVBQUFKLEtBQUFDLEdBQUFyNkIsRUFBQUEsR0FBQXNULFFBQXVEO0FBQUEsb0JBQTVDMWEsS0FBR3doQyxHQUFBMWtDO0FBQ1pzaUIsbUJBQXNCM2xCLE1BQU11RyxJQUFLa0QsRUFBQUE7Y0FDbEM7WUFBQSxTQUFBNCtCLElBQUFBO0FBQUFMLGNBQUFBLEdBQUFqYixFQUFBc2IsRUFBQUE7WUFBQSxVQUFBO0FBQUFMLGNBQUFBLEdBQUFubEMsRUFBQUE7WUFBQTtVQUNILEVBQUEsR0FFQSxFQUFBMEQsS0FBQSxZQUFBbEQsT0FPUSxTQUNOOHNCLElBQ0FOLElBQ0FpdUIsSUFBQUE7QUFFQSxnQkFBS2p1QixNQUFXQSxHQUFPcEcsU0FBVXpwQixLQUFLcWlELE9BQXRDO0FBSUEsa0JBQU1xQixLQUFNN3pCLEdBQU9wRyxPQUNiKzRCLEtBQWlCLENBQUEsR0FDakJNLEtBQW1CLENBQUEsR0FDbkI0QixLQUFtQixDQUFBLEdBQ25CMkIsS0FBcUMsQ0FBQSxHQUNyQ0MsS0FBeUMsQ0FBQSxHQUN6QzNCLEtBQXlDLENBQUE7QUFFL0Msc0JBQVF4MEIsSUFBQUE7Z0JBQ04sS0FBSztBQUVILDJCQUFTdmYsS0FBSSxHQUFHRSxLQUFNNHlDLEdBQUlqL0MsUUFBUW1NLEtBQUlFLElBQUtGLE1BQUs7QUFDOUMsd0JBQU14SixLQUFLczhDLEdBQUk5eUMsRUFBQUE7QUFDRjVRLHlCQUFLc0MsSUFBSThFLEVBQUFBLE1BRXBCcEgsS0FBSzRsRCxLQUFLOThCLElBQUkxaEIsRUFBQUEsR0FDZG83QyxHQUFTNTdDLEtBQUtRLEVBQUFBO2tCQUVqQjtBQUVEO2dCQUVGLEtBQUs7QUFHSCwyQkFBU3dKLEtBQUksR0FBR0UsS0FBTTR5QyxHQUFJai9DLFFBQVFtTSxLQUFJRSxJQUFLRixNQUFLO0FBQzlDLHdCQUFNeEosS0FBS3M4QyxHQUFJOXlDLEVBQUFBO0FBQ0Y1USx5QkFBS3NDLElBQUk4RSxFQUFBQSxJQUdoQnBILEtBQUs0bEQsS0FBS3R3QyxJQUFJbE8sRUFBQUEsS0FDaEIwN0MsR0FBV2w4QyxLQUFLUSxFQUFBQSxHQUNoQmsvQyxHQUFhMS9DLEtBQ1ZpcEIsR0FBNENobUIsS0FBSytHLEVBQUFBLENBQUFBLEdBRXBEeTFDLEdBQVN6L0MsS0FDTmlwQixHQUE0QzlGLFFBQVFuWixFQUFBQSxDQUFBQSxNQUd2RDVRLEtBQUs0bEQsS0FBSzk4QixJQUFJMWhCLEVBQUFBLEdBQ2RvN0MsR0FBUzU3QyxLQUFLUSxFQUFBQSxLQUdacEgsS0FBSzRsRCxLQUFLdHdDLElBQUlsTyxFQUFBQSxNQUNoQnBILEtBQUs0bEQsS0FBS24xQixPQUFPcnBCLEVBQUFBLEdBQ2pCczlDLEdBQVc5OUMsS0FBS1EsRUFBQUEsR0FDaEJ1OUMsR0FBYS85QyxLQUNWaXBCLEdBQTRDOUYsUUFBUW5aLEVBQUFBLENBQUFBO2tCQU01RDtBQUVEO2dCQUVGLEtBQUs7QUFFSCwyQkFBU0EsS0FBSSxHQUFHRSxLQUFNNHlDLEdBQUlqL0MsUUFBUW1NLEtBQUlFLElBQUtGLE1BQUs7QUFDOUMsd0JBQU14SixLQUFLczhDLEdBQUk5eUMsRUFBQUE7QUFDWDVRLHlCQUFLNGxELEtBQUt0d0MsSUFBSWxPLEVBQUFBLE1BQ2hCcEgsS0FBSzRsRCxLQUFLbjFCLE9BQU9ycEIsRUFBQUEsR0FDakJzOUMsR0FBVzk5QyxLQUFLUSxFQUFBQSxHQUNoQnU5QyxHQUFhLzlDLEtBQ1ZpcEIsR0FBNEM5RixRQUFRblosRUFBQUEsQ0FBQUE7a0JBRzFEO2NBQUE7QUFLTDVRLG1CQUFLeUUsVUFBVSs5QyxHQUFTLzlDLFNBQVNpZ0QsR0FBV2pnRCxRQUV4Qys5QyxHQUFTLzlDLFVBQ1h6RSxLQUFLNmlELFNBQVMsT0FBTyxFQUFFcDVCLE9BQU8rNEIsR0FBQUEsR0FBWTFFLEVBQUFBLEdBRXhDZ0YsR0FBV3IrQyxVQUNiekUsS0FBSzZpRCxTQUNILFVBQ0EsRUFBRXA1QixPQUFPcTVCLElBQVkvNEIsU0FBU3M4QixJQUFVeDhDLE1BQU15OEMsR0FBQUEsR0FDOUN4SSxFQUFBQSxHQUdBNEcsR0FBV2pnRCxVQUNiekUsS0FBSzZpRCxTQUNILFVBQ0EsRUFBRXA1QixPQUFPaTdCLElBQVkzNkIsU0FBUzQ2QixHQUFBQSxHQUM5QjdHLEVBQUFBO1lBM0ZIO1VBOEZILEVBQUEsQ0FBQSxDQUFBLEdBQUN3SDtRQUFBLEVBamVPekgsRUFBQUE7QUM3RU0saUJBQUEwSSxHQUdkdkQsSUFBZ0J6cEIsSUFBQUE7QUFDaEIsaUJBQ2UsWUFBQSxPQUFOQSxNQUNELFNBQU5BLE1BQ0F5cEIsT0FBV3pwQixHQUFFeXBCLFVBQ0ksY0FBQSxPQUFWenBCLEdBQUV6USxPQUNVLGNBQUEsT0FBWnlRLEdBQUUvSSxTQUNhLGNBQUEsT0FBZitJLEdBQUVpdEIsWUFDWSxjQUFBLE9BQXJCNVIsR0FBT3JiLEVBQUFBLEtBQ1UsY0FBQSxPQUFWQSxHQUFFajNCLE9BQ2UsY0FBQSxPQUFqQmkzQixHQUFFbXNCLGNBQ1csY0FBQSxPQUFibnNCLEdBQUVvc0IsVUFDVyxZQUFBLE9BQWJwc0IsR0FBRTkwQixVQUNRLGNBQUEsT0FBakIwbEIsR0FBT29QLEVBQUFBLEtBQ1UsY0FBQSxPQUFWQSxHQUFFdG9CLE9BQ1EsY0FBQSxPQUFWc29CLEdBQUV6ckIsT0FDUSxjQUFBLE9BQVZ5ckIsR0FBRS9QLE9BQ08sY0FBQSxPQUFUK1AsR0FBRWpRLE1BQ1csY0FBQSxPQUFiaVEsR0FBRXRRLFVBQ2UsY0FBQSxPQUFqQnNRLEdBQUU0akIsY0FDVyxjQUFBLE9BQWI1akIsR0FBRTRzQixVQUNXLGNBQUEsT0FBYjVzQixHQUFFcFEsVUFDZSxjQUFBLE9BQWpCb1EsR0FBRWt0QjtRQUViO0FBQUEsVUFBQSxTQUFBLElBQUEsRUFBQSxVQUFBLElBQUEsRUFBQSxhQUFBLElBQUEsRUFBQSxXQUFBQyxLQUFBLEVBQUEsUUFBQSxJQUFBLEVBQUEsd0IzTStCTSxTQUdKejdCLElBQUFBO0FBQ0EsaUJBQU8sSUFBSWpCLEdBQTBCaUIsRUFBQUE7UUFDdkMsR0FBQSxFQUFBLGdCQUFBLElBQUEsRUFBQSxpQjRNOURnQixTQUdkKzNCLElBQWdCenBCLElBQUFBO0FBQ2hCLGlCQUNlLFlBQUEsT0FBTkEsTUFDRCxTQUFOQSxNQUNBeXBCLE9BQVd6cEIsR0FBRXlwQixVQUNRLGNBQUEsT0FBckJwTyxHQUFPcmIsRUFBQUEsS0FDVSxjQUFBLE9BQVZBLEdBQUVqM0IsT0FDZSxjQUFBLE9BQWpCaTNCLEdBQUVtc0IsY0FDVyxjQUFBLE9BQWJuc0IsR0FBRW9zQixVQUNXLFlBQUEsT0FBYnBzQixHQUFFOTBCLFVBQ1EsY0FBQSxPQUFqQjBsQixHQUFPb1AsRUFBQUEsS0FDVSxjQUFBLE9BQVZBLEdBQUUvUCxPQUNPLGNBQUEsT0FBVCtQLEdBQUVqUSxNQUNXLGNBQUEsT0FBYmlRLEdBQUU0c0IsVUFDVEksR0FBY3ZELElBQVF6cEIsR0FBRW1zQixXQUFBQSxDQUFBQTtRQUU1QjtNQUFBLENBQUE7Ozs7O0FDOUJBLE1BQUFpQixrQkFBMkM7QUFDM0MsTUFBQUMsb0JBQXFCOzs7QUNDTixXQUFSLEtBQXNCLElBQUksU0FBUztBQUN4QyxXQUFPLFNBQVMsT0FBTztBQUNyQixhQUFPLEdBQUcsTUFBTSxTQUFTLFNBQVM7QUFBQSxJQUNwQztBQUFBLEVBQ0Y7OztBQ0FBLE1BQU0sRUFBQyxTQUFRLElBQUksT0FBTztBQUMxQixNQUFNLEVBQUMsZUFBYyxJQUFJO0FBRXpCLE1BQU0sVUFBVSxDQUFBQyxXQUFTLFdBQVM7QUFDOUIsVUFBTSxNQUFNLFNBQVMsS0FBSyxLQUFLO0FBQy9CLFdBQU9BLE9BQU0sR0FBRyxNQUFNQSxPQUFNLEdBQUcsSUFBSSxJQUFJLE1BQU0sR0FBRyxFQUFFLEVBQUUsWUFBWTtBQUFBLEVBQ3BFLEdBQUcsdUJBQU8sT0FBTyxJQUFJLENBQUM7QUFFdEIsTUFBTSxhQUFhLENBQUMsU0FBUztBQUMzQixXQUFPLEtBQUssWUFBWTtBQUN4QixXQUFPLENBQUMsVUFBVSxPQUFPLEtBQUssTUFBTTtBQUFBLEVBQ3RDO0FBRUEsTUFBTSxhQUFhLFVBQVEsV0FBUyxPQUFPLFVBQVU7QUFTckQsTUFBTSxFQUFDLFFBQU8sSUFBSTtBQVNsQixNQUFNLGNBQWMsV0FBVyxXQUFXO0FBUzFDLFdBQVMsU0FBUyxLQUFLO0FBQ3JCLFdBQU8sUUFBUSxRQUFRLENBQUMsWUFBWSxHQUFHLEtBQUssSUFBSSxnQkFBZ0IsUUFBUSxDQUFDLFlBQVksSUFBSSxXQUFXLEtBQy9GLFdBQVcsSUFBSSxZQUFZLFFBQVEsS0FBSyxJQUFJLFlBQVksU0FBUyxHQUFHO0FBQUEsRUFDM0U7QUFTQSxNQUFNLGdCQUFnQixXQUFXLGFBQWE7QUFVOUMsV0FBUyxrQkFBa0IsS0FBSztBQUM5QixRQUFJO0FBQ0osUUFBSyxPQUFPLGdCQUFnQixlQUFpQixZQUFZLFFBQVM7QUFDaEUsZUFBUyxZQUFZLE9BQU8sR0FBRztBQUFBLElBQ2pDLE9BQU87QUFDTCxlQUFVLE9BQVMsSUFBSSxVQUFZLGNBQWMsSUFBSSxNQUFNO0FBQUEsSUFDN0Q7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQVNBLE1BQU0sV0FBVyxXQUFXLFFBQVE7QUFRcEMsTUFBTSxhQUFhLFdBQVcsVUFBVTtBQVN4QyxNQUFNLFdBQVcsV0FBVyxRQUFRO0FBU3BDLE1BQU0sV0FBVyxDQUFDLFVBQVUsVUFBVSxRQUFRLE9BQU8sVUFBVTtBQVEvRCxNQUFNLFlBQVksV0FBUyxVQUFVLFFBQVEsVUFBVTtBQVN2RCxNQUFNLGdCQUFnQixDQUFDLFFBQVE7QUFDN0IsUUFBSSxPQUFPLEdBQUcsTUFBTSxVQUFVO0FBQzVCLGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTUMsYUFBWSxlQUFlLEdBQUc7QUFDcEMsWUFBUUEsZUFBYyxRQUFRQSxlQUFjLE9BQU8sYUFBYSxPQUFPLGVBQWVBLFVBQVMsTUFBTSxTQUFTLEVBQUUsT0FBTyxlQUFlLFFBQVEsRUFBRSxPQUFPLFlBQVk7QUFBQSxFQUNySztBQVNBLE1BQU0sU0FBUyxXQUFXLE1BQU07QUFTaEMsTUFBTSxTQUFTLFdBQVcsTUFBTTtBQVNoQyxNQUFNLFNBQVMsV0FBVyxNQUFNO0FBU2hDLE1BQU0sYUFBYSxXQUFXLFVBQVU7QUFTeEMsTUFBTSxXQUFXLENBQUMsUUFBUSxTQUFTLEdBQUcsS0FBSyxXQUFXLElBQUksSUFBSTtBQVM5RCxNQUFNLGFBQWEsQ0FBQyxVQUFVO0FBQzVCLFFBQUk7QUFDSixXQUFPLFVBQ0osT0FBTyxhQUFhLGNBQWMsaUJBQWlCLFlBQ2xELFdBQVcsTUFBTSxNQUFNLE9BQ3BCLE9BQU8sT0FBTyxLQUFLLE9BQU87QUFBQSxJQUUxQixTQUFTLFlBQVksV0FBVyxNQUFNLFFBQVEsS0FBSyxNQUFNLFNBQVMsTUFBTTtBQUFBLEVBSWpGO0FBU0EsTUFBTSxvQkFBb0IsV0FBVyxpQkFBaUI7QUFFdEQsTUFBTSxDQUFDLGtCQUFrQixXQUFXLFlBQVksU0FBUyxJQUFJLENBQUMsa0JBQWtCLFdBQVcsWUFBWSxTQUFTLEVBQUUsSUFBSSxVQUFVO0FBU2hJLE1BQU0sT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUN4QixJQUFJLEtBQUssSUFBSSxJQUFJLFFBQVEsc0NBQXNDLEVBQUU7QUFpQm5FLFdBQVMsUUFBUSxLQUFLLElBQUksRUFBQyxhQUFhLE1BQUssSUFBSSxDQUFDLEdBQUc7QUFFbkQsUUFBSSxRQUFRLFFBQVEsT0FBTyxRQUFRLGFBQWE7QUFDOUM7QUFBQSxJQUNGO0FBRUEsUUFBSTtBQUNKLFFBQUk7QUFHSixRQUFJLE9BQU8sUUFBUSxVQUFVO0FBRTNCLFlBQU0sQ0FBQyxHQUFHO0FBQUEsSUFDWjtBQUVBLFFBQUksUUFBUSxHQUFHLEdBQUc7QUFFaEIsV0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVEsSUFBSSxHQUFHLEtBQUs7QUFDdEMsV0FBRyxLQUFLLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQUEsTUFDOUI7QUFBQSxJQUNGLE9BQU87QUFFTCxZQUFNQyxRQUFPLGFBQWEsT0FBTyxvQkFBb0IsR0FBRyxJQUFJLE9BQU8sS0FBSyxHQUFHO0FBQzNFLFlBQU0sTUFBTUEsTUFBSztBQUNqQixVQUFJO0FBRUosV0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLEtBQUs7QUFDeEIsY0FBTUEsTUFBSyxDQUFDO0FBQ1osV0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEdBQUcsS0FBSyxHQUFHO0FBQUEsTUFDbEM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFdBQVMsUUFBUSxLQUFLLEtBQUs7QUFDekIsVUFBTSxJQUFJLFlBQVk7QUFDdEIsVUFBTUEsUUFBTyxPQUFPLEtBQUssR0FBRztBQUM1QixRQUFJLElBQUlBLE1BQUs7QUFDYixRQUFJO0FBQ0osV0FBTyxNQUFNLEdBQUc7QUFDZCxhQUFPQSxNQUFLLENBQUM7QUFDYixVQUFJLFFBQVEsS0FBSyxZQUFZLEdBQUc7QUFDOUIsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFNLFdBQVcsTUFBTTtBQUVyQixRQUFJLE9BQU8sZUFBZTtBQUFhLGFBQU87QUFDOUMsV0FBTyxPQUFPLFNBQVMsY0FBYyxPQUFRLE9BQU8sV0FBVyxjQUFjLFNBQVM7QUFBQSxFQUN4RixHQUFHO0FBRUgsTUFBTSxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsWUFBWSxPQUFPLEtBQUssWUFBWTtBQW9CM0UsV0FBUyxRQUFtQztBQUMxQyxVQUFNLEVBQUMsU0FBUSxJQUFJLGlCQUFpQixJQUFJLEtBQUssUUFBUSxDQUFDO0FBQ3RELFVBQU0sU0FBUyxDQUFDO0FBQ2hCLFVBQU0sY0FBYyxDQUFDLEtBQUssUUFBUTtBQUNoQyxZQUFNLFlBQVksWUFBWSxRQUFRLFFBQVEsR0FBRyxLQUFLO0FBQ3RELFVBQUksY0FBYyxPQUFPLFNBQVMsQ0FBQyxLQUFLLGNBQWMsR0FBRyxHQUFHO0FBQzFELGVBQU8sU0FBUyxJQUFJLE1BQU0sT0FBTyxTQUFTLEdBQUcsR0FBRztBQUFBLE1BQ2xELFdBQVcsY0FBYyxHQUFHLEdBQUc7QUFDN0IsZUFBTyxTQUFTLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRztBQUFBLE1BQ25DLFdBQVcsUUFBUSxHQUFHLEdBQUc7QUFDdkIsZUFBTyxTQUFTLElBQUksSUFBSSxNQUFNO0FBQUEsTUFDaEMsT0FBTztBQUNMLGVBQU8sU0FBUyxJQUFJO0FBQUEsTUFDdEI7QUFBQSxJQUNGO0FBRUEsYUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsSUFBSSxHQUFHLEtBQUs7QUFDaEQsZ0JBQVUsQ0FBQyxLQUFLLFFBQVEsVUFBVSxDQUFDLEdBQUcsV0FBVztBQUFBLElBQ25EO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFZQSxNQUFNLFNBQVMsQ0FBQyxHQUFHLEdBQUcsU0FBUyxFQUFDLFdBQVUsSUFBRyxDQUFDLE1BQU07QUFDbEQsWUFBUSxHQUFHLENBQUMsS0FBSyxRQUFRO0FBQ3ZCLFVBQUksV0FBVyxXQUFXLEdBQUcsR0FBRztBQUM5QixVQUFFLEdBQUcsSUFBSSxLQUFLLEtBQUssT0FBTztBQUFBLE1BQzVCLE9BQU87QUFDTCxVQUFFLEdBQUcsSUFBSTtBQUFBLE1BQ1g7QUFBQSxJQUNGLEdBQUcsRUFBQyxXQUFVLENBQUM7QUFDZixXQUFPO0FBQUEsRUFDVDtBQVNBLE1BQU0sV0FBVyxDQUFDLFlBQVk7QUFDNUIsUUFBSSxRQUFRLFdBQVcsQ0FBQyxNQUFNLE9BQVE7QUFDcEMsZ0JBQVUsUUFBUSxNQUFNLENBQUM7QUFBQSxJQUMzQjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBV0EsTUFBTSxXQUFXLENBQUMsYUFBYSxrQkFBa0IsT0FBT0MsaUJBQWdCO0FBQ3RFLGdCQUFZLFlBQVksT0FBTyxPQUFPLGlCQUFpQixXQUFXQSxZQUFXO0FBQzdFLGdCQUFZLFVBQVUsY0FBYztBQUNwQyxXQUFPLGVBQWUsYUFBYSxTQUFTO0FBQUEsTUFDMUMsT0FBTyxpQkFBaUI7QUFBQSxJQUMxQixDQUFDO0FBQ0QsYUFBUyxPQUFPLE9BQU8sWUFBWSxXQUFXLEtBQUs7QUFBQSxFQUNyRDtBQVdBLE1BQU0sZUFBZSxDQUFDLFdBQVcsU0FBU0MsU0FBUSxlQUFlO0FBQy9ELFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSTtBQUNKLFVBQU0sU0FBUyxDQUFDO0FBRWhCLGNBQVUsV0FBVyxDQUFDO0FBRXRCLFFBQUksYUFBYTtBQUFNLGFBQU87QUFFOUIsT0FBRztBQUNELGNBQVEsT0FBTyxvQkFBb0IsU0FBUztBQUM1QyxVQUFJLE1BQU07QUFDVixhQUFPLE1BQU0sR0FBRztBQUNkLGVBQU8sTUFBTSxDQUFDO0FBQ2QsYUFBSyxDQUFDLGNBQWMsV0FBVyxNQUFNLFdBQVcsT0FBTyxNQUFNLENBQUMsT0FBTyxJQUFJLEdBQUc7QUFDMUUsa0JBQVEsSUFBSSxJQUFJLFVBQVUsSUFBSTtBQUM5QixpQkFBTyxJQUFJLElBQUk7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFDQSxrQkFBWUEsWUFBVyxTQUFTLGVBQWUsU0FBUztBQUFBLElBQzFELFNBQVMsY0FBYyxDQUFDQSxXQUFVQSxRQUFPLFdBQVcsT0FBTyxNQUFNLGNBQWMsT0FBTztBQUV0RixXQUFPO0FBQUEsRUFDVDtBQVdBLE1BQU0sV0FBVyxDQUFDLEtBQUssY0FBY0MsY0FBYTtBQUNoRCxVQUFNLE9BQU8sR0FBRztBQUNoQixRQUFJQSxjQUFhLFVBQWFBLFlBQVcsSUFBSSxRQUFRO0FBQ25ELE1BQUFBLFlBQVcsSUFBSTtBQUFBLElBQ2pCO0FBQ0EsSUFBQUEsYUFBWSxhQUFhO0FBQ3pCLFVBQU0sWUFBWSxJQUFJLFFBQVEsY0FBY0EsU0FBUTtBQUNwRCxXQUFPLGNBQWMsTUFBTSxjQUFjQTtBQUFBLEVBQzNDO0FBVUEsTUFBTSxVQUFVLENBQUMsVUFBVTtBQUN6QixRQUFJLENBQUM7QUFBTyxhQUFPO0FBQ25CLFFBQUksUUFBUSxLQUFLO0FBQUcsYUFBTztBQUMzQixRQUFJLElBQUksTUFBTTtBQUNkLFFBQUksQ0FBQyxTQUFTLENBQUM7QUFBRyxhQUFPO0FBQ3pCLFVBQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQztBQUN2QixXQUFPLE1BQU0sR0FBRztBQUNkLFVBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUFBLElBQ2xCO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFXQSxNQUFNLGdCQUFnQixnQkFBYztBQUVsQyxXQUFPLFdBQVM7QUFDZCxhQUFPLGNBQWMsaUJBQWlCO0FBQUEsSUFDeEM7QUFBQSxFQUNGLEdBQUcsT0FBTyxlQUFlLGVBQWUsZUFBZSxVQUFVLENBQUM7QUFVbEUsTUFBTSxlQUFlLENBQUMsS0FBSyxPQUFPO0FBQ2hDLFVBQU0sWUFBWSxPQUFPLElBQUksT0FBTyxRQUFRO0FBRTVDLFVBQU0sV0FBVyxVQUFVLEtBQUssR0FBRztBQUVuQyxRQUFJO0FBRUosWUFBUSxTQUFTLFNBQVMsS0FBSyxNQUFNLENBQUMsT0FBTyxNQUFNO0FBQ2pELFlBQU0sT0FBTyxPQUFPO0FBQ3BCLFNBQUcsS0FBSyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQUEsSUFDL0I7QUFBQSxFQUNGO0FBVUEsTUFBTSxXQUFXLENBQUMsUUFBUSxRQUFRO0FBQ2hDLFFBQUlDO0FBQ0osVUFBTSxNQUFNLENBQUM7QUFFYixZQUFRQSxXQUFVLE9BQU8sS0FBSyxHQUFHLE9BQU8sTUFBTTtBQUM1QyxVQUFJLEtBQUtBLFFBQU87QUFBQSxJQUNsQjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBR0EsTUFBTSxhQUFhLFdBQVcsaUJBQWlCO0FBRS9DLE1BQU0sY0FBYyxTQUFPO0FBQ3pCLFdBQU8sSUFBSSxZQUFZLEVBQUU7QUFBQSxNQUFRO0FBQUEsTUFDL0IsU0FBUyxTQUFTLEdBQUcsSUFBSSxJQUFJO0FBQzNCLGVBQU8sR0FBRyxZQUFZLElBQUk7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBR0EsTUFBTSxrQkFBa0IsQ0FBQyxFQUFDLGdCQUFBQyxnQkFBYyxNQUFNLENBQUMsS0FBSyxTQUFTQSxnQkFBZSxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU8sU0FBUztBQVM3RyxNQUFNLFdBQVcsV0FBVyxRQUFRO0FBRXBDLE1BQU0sb0JBQW9CLENBQUMsS0FBS0MsYUFBWTtBQUMxQyxVQUFNTCxlQUFjLE9BQU8sMEJBQTBCLEdBQUc7QUFDeEQsVUFBTSxxQkFBcUIsQ0FBQztBQUU1QixZQUFRQSxjQUFhLENBQUMsWUFBWSxTQUFTO0FBQ3pDLFVBQUk7QUFDSixXQUFLLE1BQU1LLFNBQVEsWUFBWSxNQUFNLEdBQUcsT0FBTyxPQUFPO0FBQ3BELDJCQUFtQixJQUFJLElBQUksT0FBTztBQUFBLE1BQ3BDO0FBQUEsSUFDRixDQUFDO0FBRUQsV0FBTyxpQkFBaUIsS0FBSyxrQkFBa0I7QUFBQSxFQUNqRDtBQU9BLE1BQU0sZ0JBQWdCLENBQUMsUUFBUTtBQUM3QixzQkFBa0IsS0FBSyxDQUFDLFlBQVksU0FBUztBQUUzQyxVQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsYUFBYSxVQUFVLFFBQVEsRUFBRSxRQUFRLElBQUksTUFBTSxJQUFJO0FBQzdFLGVBQU87QUFBQSxNQUNUO0FBRUEsWUFBTUMsU0FBUSxJQUFJLElBQUk7QUFFdEIsVUFBSSxDQUFDLFdBQVdBLE1BQUs7QUFBRztBQUV4QixpQkFBVyxhQUFhO0FBRXhCLFVBQUksY0FBYyxZQUFZO0FBQzVCLG1CQUFXLFdBQVc7QUFDdEI7QUFBQSxNQUNGO0FBRUEsVUFBSSxDQUFDLFdBQVcsS0FBSztBQUNuQixtQkFBVyxNQUFNLE1BQU07QUFDckIsZ0JBQU0sTUFBTSx1Q0FBd0MsT0FBTyxHQUFJO0FBQUEsUUFDakU7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUVBLE1BQU0sY0FBYyxDQUFDLGVBQWVDLGVBQWM7QUFDaEQsVUFBTSxNQUFNLENBQUM7QUFFYixVQUFNQyxVQUFTLENBQUMsUUFBUTtBQUN0QixVQUFJLFFBQVEsQ0FBQUYsV0FBUztBQUNuQixZQUFJQSxNQUFLLElBQUk7QUFBQSxNQUNmLENBQUM7QUFBQSxJQUNIO0FBRUEsWUFBUSxhQUFhLElBQUlFLFFBQU8sYUFBYSxJQUFJQSxRQUFPLE9BQU8sYUFBYSxFQUFFLE1BQU1ELFVBQVMsQ0FBQztBQUU5RixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQU0sT0FBTyxNQUFNO0FBQUEsRUFBQztBQUVwQixNQUFNLGlCQUFpQixDQUFDRCxRQUFPLGlCQUFpQjtBQUM5QyxXQUFPQSxVQUFTLFFBQVEsT0FBTyxTQUFTQSxTQUFRLENBQUNBLE1BQUssSUFBSUEsU0FBUTtBQUFBLEVBQ3BFO0FBRUEsTUFBTSxRQUFRO0FBRWQsTUFBTSxRQUFRO0FBRWQsTUFBTSxXQUFXO0FBQUEsSUFDZjtBQUFBLElBQ0E7QUFBQSxJQUNBLGFBQWEsUUFBUSxNQUFNLFlBQVksSUFBSTtBQUFBLEVBQzdDO0FBRUEsTUFBTSxpQkFBaUIsQ0FBQ0csUUFBTyxJQUFJLFdBQVcsU0FBUyxnQkFBZ0I7QUFDckUsUUFBSSxNQUFNO0FBQ1YsVUFBTSxFQUFDLFFBQUFDLFFBQU0sSUFBSTtBQUNqQixXQUFPRCxTQUFRO0FBQ2IsYUFBTyxTQUFTLEtBQUssT0FBTyxJQUFJQyxVQUFPLENBQUM7QUFBQSxJQUMxQztBQUVBLFdBQU87QUFBQSxFQUNUO0FBU0EsV0FBUyxvQkFBb0IsT0FBTztBQUNsQyxXQUFPLENBQUMsRUFBRSxTQUFTLFdBQVcsTUFBTSxNQUFNLEtBQUssTUFBTSxPQUFPLFdBQVcsTUFBTSxjQUFjLE1BQU0sT0FBTyxRQUFRO0FBQUEsRUFDbEg7QUFFQSxNQUFNLGVBQWUsQ0FBQyxRQUFRO0FBQzVCLFVBQU0sUUFBUSxJQUFJLE1BQU0sRUFBRTtBQUUxQixVQUFNLFFBQVEsQ0FBQyxRQUFRLE1BQU07QUFFM0IsVUFBSSxTQUFTLE1BQU0sR0FBRztBQUNwQixZQUFJLE1BQU0sUUFBUSxNQUFNLEtBQUssR0FBRztBQUM5QjtBQUFBLFFBQ0Y7QUFFQSxZQUFHLEVBQUUsWUFBWSxTQUFTO0FBQ3hCLGdCQUFNLENBQUMsSUFBSTtBQUNYLGdCQUFNLFNBQVMsUUFBUSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUM7QUFFdkMsa0JBQVEsUUFBUSxDQUFDSixRQUFPLFFBQVE7QUFDOUIsa0JBQU0sZUFBZSxNQUFNQSxRQUFPLElBQUksQ0FBQztBQUN2QyxhQUFDLFlBQVksWUFBWSxNQUFNLE9BQU8sR0FBRyxJQUFJO0FBQUEsVUFDL0MsQ0FBQztBQUVELGdCQUFNLENBQUMsSUFBSTtBQUVYLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sTUFBTSxLQUFLLENBQUM7QUFBQSxFQUNyQjtBQUVBLE1BQU0sWUFBWSxXQUFXLGVBQWU7QUFFNUMsTUFBTSxhQUFhLENBQUMsVUFDbEIsVUFBVSxTQUFTLEtBQUssS0FBSyxXQUFXLEtBQUssTUFBTSxXQUFXLE1BQU0sSUFBSSxLQUFLLFdBQVcsTUFBTSxLQUFLO0FBS3JHLE1BQU0saUJBQWlCLENBQUMsdUJBQXVCLHlCQUF5QjtBQUN0RSxRQUFJLHVCQUF1QjtBQUN6QixhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sd0JBQXdCLENBQUNLLFFBQU8sY0FBYztBQUNuRCxjQUFRLGlCQUFpQixXQUFXLENBQUMsRUFBQyxRQUFRLEtBQUksTUFBTTtBQUN0RCxZQUFJLFdBQVcsV0FBVyxTQUFTQSxRQUFPO0FBQ3hDLG9CQUFVLFVBQVUsVUFBVSxNQUFNLEVBQUU7QUFBQSxRQUN4QztBQUFBLE1BQ0YsR0FBRyxLQUFLO0FBRVIsYUFBTyxDQUFDLE9BQU87QUFDYixrQkFBVSxLQUFLLEVBQUU7QUFDakIsZ0JBQVEsWUFBWUEsUUFBTyxHQUFHO0FBQUEsTUFDaEM7QUFBQSxJQUNGLEdBQUcsU0FBUyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxXQUFXLEVBQUU7QUFBQSxFQUMxRDtBQUFBLElBQ0UsT0FBTyxpQkFBaUI7QUFBQSxJQUN4QixXQUFXLFFBQVEsV0FBVztBQUFBLEVBQ2hDO0FBRUEsTUFBTSxPQUFPLE9BQU8sbUJBQW1CLGNBQ3JDLGVBQWUsS0FBSyxPQUFPLElBQU0sT0FBTyxZQUFZLGVBQWUsUUFBUSxZQUFZO0FBSXpGLE1BQU8sZ0JBQVE7QUFBQSxJQUNiO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFlBQVk7QUFBQTtBQUFBLElBQ1o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxjQUFjO0FBQUEsSUFDZDtBQUFBLEVBQ0Y7OztBQ3h1QkEsV0FBUyxXQUFXLFNBQVMsTUFBTSxRQUFRLFNBQVMsVUFBVTtBQUM1RCxVQUFNLEtBQUssSUFBSTtBQUVmLFFBQUksTUFBTSxtQkFBbUI7QUFDM0IsWUFBTSxrQkFBa0IsTUFBTSxLQUFLLFdBQVc7QUFBQSxJQUNoRCxPQUFPO0FBQ0wsV0FBSyxRQUFTLElBQUksTUFBTSxFQUFHO0FBQUEsSUFDN0I7QUFFQSxTQUFLLFVBQVU7QUFDZixTQUFLLE9BQU87QUFDWixhQUFTLEtBQUssT0FBTztBQUNyQixlQUFXLEtBQUssU0FBUztBQUN6QixnQkFBWSxLQUFLLFVBQVU7QUFDM0IsUUFBSSxVQUFVO0FBQ1osV0FBSyxXQUFXO0FBQ2hCLFdBQUssU0FBUyxTQUFTLFNBQVMsU0FBUyxTQUFTO0FBQUEsSUFDcEQ7QUFBQSxFQUNGO0FBRUEsZ0JBQU0sU0FBUyxZQUFZLE9BQU87QUFBQSxJQUNoQyxRQUFRLFNBQVMsU0FBUztBQUN4QixhQUFPO0FBQUE7QUFBQSxRQUVMLFNBQVMsS0FBSztBQUFBLFFBQ2QsTUFBTSxLQUFLO0FBQUE7QUFBQSxRQUVYLGFBQWEsS0FBSztBQUFBLFFBQ2xCLFFBQVEsS0FBSztBQUFBO0FBQUEsUUFFYixVQUFVLEtBQUs7QUFBQSxRQUNmLFlBQVksS0FBSztBQUFBLFFBQ2pCLGNBQWMsS0FBSztBQUFBLFFBQ25CLE9BQU8sS0FBSztBQUFBO0FBQUEsUUFFWixRQUFRLGNBQU0sYUFBYSxLQUFLLE1BQU07QUFBQSxRQUN0QyxNQUFNLEtBQUs7QUFBQSxRQUNYLFFBQVEsS0FBSztBQUFBLE1BQ2Y7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBRUQsTUFBTSxZQUFZLFdBQVc7QUFDN0IsTUFBTSxjQUFjLENBQUM7QUFFckI7QUFBQSxJQUNFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQTtBQUFBLEVBRUYsRUFBRSxRQUFRLFVBQVE7QUFDaEIsZ0JBQVksSUFBSSxJQUFJLEVBQUMsT0FBTyxLQUFJO0FBQUEsRUFDbEMsQ0FBQztBQUVELFNBQU8saUJBQWlCLFlBQVksV0FBVztBQUMvQyxTQUFPLGVBQWUsV0FBVyxnQkFBZ0IsRUFBQyxPQUFPLEtBQUksQ0FBQztBQUc5RCxhQUFXLE9BQU8sQ0FBQyxPQUFPLE1BQU0sUUFBUSxTQUFTLFVBQVUsZ0JBQWdCO0FBQ3pFLFVBQU0sYUFBYSxPQUFPLE9BQU8sU0FBUztBQUUxQyxrQkFBTSxhQUFhLE9BQU8sWUFBWSxTQUFTQyxRQUFPLEtBQUs7QUFDekQsYUFBTyxRQUFRLE1BQU07QUFBQSxJQUN2QixHQUFHLFVBQVE7QUFDVCxhQUFPLFNBQVM7QUFBQSxJQUNsQixDQUFDO0FBRUQsZUFBVyxLQUFLLFlBQVksTUFBTSxTQUFTLE1BQU0sUUFBUSxTQUFTLFFBQVE7QUFFMUUsZUFBVyxRQUFRO0FBRW5CLGVBQVcsT0FBTyxNQUFNO0FBRXhCLG1CQUFlLE9BQU8sT0FBTyxZQUFZLFdBQVc7QUFFcEQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFPLHFCQUFROzs7QUNyR2YsTUFBTyxlQUFROzs7QUNhZixXQUFTLFlBQVksT0FBTztBQUMxQixXQUFPLGNBQU0sY0FBYyxLQUFLLEtBQUssY0FBTSxRQUFRLEtBQUs7QUFBQSxFQUMxRDtBQVNBLFdBQVMsZUFBZSxLQUFLO0FBQzNCLFdBQU8sY0FBTSxTQUFTLEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxHQUFHLEVBQUUsSUFBSTtBQUFBLEVBQ3hEO0FBV0EsV0FBUyxVQUFVLE1BQU0sS0FBSyxNQUFNO0FBQ2xDLFFBQUksQ0FBQztBQUFNLGFBQU87QUFDbEIsV0FBTyxLQUFLLE9BQU8sR0FBRyxFQUFFLElBQUksU0FBU0MsTUFBS0MsUUFBTyxHQUFHO0FBRWxELE1BQUFBLFNBQVEsZUFBZUEsTUFBSztBQUM1QixhQUFPLENBQUMsUUFBUSxJQUFJLE1BQU1BLFNBQVEsTUFBTUE7QUFBQSxJQUMxQyxDQUFDLEVBQUUsS0FBSyxPQUFPLE1BQU0sRUFBRTtBQUFBLEVBQ3pCO0FBU0EsV0FBUyxZQUFZLEtBQUs7QUFDeEIsV0FBTyxjQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVc7QUFBQSxFQUNwRDtBQUVBLE1BQU0sYUFBYSxjQUFNLGFBQWEsZUFBTyxDQUFDLEdBQUcsTUFBTSxTQUFTLE9BQU8sTUFBTTtBQUMzRSxXQUFPLFdBQVcsS0FBSyxJQUFJO0FBQUEsRUFDN0IsQ0FBQztBQXlCRCxXQUFTLFdBQVcsS0FBSyxVQUFVLFNBQVM7QUFDMUMsUUFBSSxDQUFDLGNBQU0sU0FBUyxHQUFHLEdBQUc7QUFDeEIsWUFBTSxJQUFJLFVBQVUsMEJBQTBCO0FBQUEsSUFDaEQ7QUFHQSxlQUFXLFlBQVksS0FBSyxnQkFBb0IsVUFBVTtBQUcxRCxjQUFVLGNBQU0sYUFBYSxTQUFTO0FBQUEsTUFDcEMsWUFBWTtBQUFBLE1BQ1osTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ1gsR0FBRyxPQUFPLFNBQVMsUUFBUSxRQUFRLFFBQVE7QUFFekMsYUFBTyxDQUFDLGNBQU0sWUFBWSxPQUFPLE1BQU0sQ0FBQztBQUFBLElBQzFDLENBQUM7QUFFRCxVQUFNLGFBQWEsUUFBUTtBQUUzQixVQUFNLFVBQVUsUUFBUSxXQUFXO0FBQ25DLFVBQU0sT0FBTyxRQUFRO0FBQ3JCLFVBQU0sVUFBVSxRQUFRO0FBQ3hCLFVBQU0sUUFBUSxRQUFRLFFBQVEsT0FBTyxTQUFTLGVBQWU7QUFDN0QsVUFBTSxVQUFVLFNBQVMsY0FBTSxvQkFBb0IsUUFBUTtBQUUzRCxRQUFJLENBQUMsY0FBTSxXQUFXLE9BQU8sR0FBRztBQUM5QixZQUFNLElBQUksVUFBVSw0QkFBNEI7QUFBQSxJQUNsRDtBQUVBLGFBQVMsYUFBYUMsUUFBTztBQUMzQixVQUFJQSxXQUFVO0FBQU0sZUFBTztBQUUzQixVQUFJLGNBQU0sT0FBT0EsTUFBSyxHQUFHO0FBQ3ZCLGVBQU9BLE9BQU0sWUFBWTtBQUFBLE1BQzNCO0FBRUEsVUFBSSxDQUFDLFdBQVcsY0FBTSxPQUFPQSxNQUFLLEdBQUc7QUFDbkMsY0FBTSxJQUFJLG1CQUFXLDhDQUE4QztBQUFBLE1BQ3JFO0FBRUEsVUFBSSxjQUFNLGNBQWNBLE1BQUssS0FBSyxjQUFNLGFBQWFBLE1BQUssR0FBRztBQUMzRCxlQUFPLFdBQVcsT0FBTyxTQUFTLGFBQWEsSUFBSSxLQUFLLENBQUNBLE1BQUssQ0FBQyxJQUFJLE9BQU8sS0FBS0EsTUFBSztBQUFBLE1BQ3RGO0FBRUEsYUFBT0E7QUFBQSxJQUNUO0FBWUEsYUFBUyxlQUFlQSxRQUFPLEtBQUssTUFBTTtBQUN4QyxVQUFJLE1BQU1BO0FBRVYsVUFBSUEsVUFBUyxDQUFDLFFBQVEsT0FBT0EsV0FBVSxVQUFVO0FBQy9DLFlBQUksY0FBTSxTQUFTLEtBQUssSUFBSSxHQUFHO0FBRTdCLGdCQUFNLGFBQWEsTUFBTSxJQUFJLE1BQU0sR0FBRyxFQUFFO0FBRXhDLFVBQUFBLFNBQVEsS0FBSyxVQUFVQSxNQUFLO0FBQUEsUUFDOUIsV0FDRyxjQUFNLFFBQVFBLE1BQUssS0FBSyxZQUFZQSxNQUFLLE1BQ3hDLGNBQU0sV0FBV0EsTUFBSyxLQUFLLGNBQU0sU0FBUyxLQUFLLElBQUksT0FBTyxNQUFNLGNBQU0sUUFBUUEsTUFBSyxJQUNsRjtBQUVILGdCQUFNLGVBQWUsR0FBRztBQUV4QixjQUFJLFFBQVEsU0FBU0YsTUFBSyxJQUFJLE9BQU87QUFDbkMsY0FBRSxjQUFNLFlBQVksRUFBRSxLQUFLLE9BQU8sU0FBUyxTQUFTO0FBQUE7QUFBQSxjQUVsRCxZQUFZLE9BQU8sVUFBVSxDQUFDLEdBQUcsR0FBRyxPQUFPLElBQUksSUFBSyxZQUFZLE9BQU8sTUFBTSxNQUFNO0FBQUEsY0FDbkYsYUFBYSxFQUFFO0FBQUEsWUFDakI7QUFBQSxVQUNGLENBQUM7QUFDRCxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBRUEsVUFBSSxZQUFZRSxNQUFLLEdBQUc7QUFDdEIsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLE9BQU8sVUFBVSxNQUFNLEtBQUssSUFBSSxHQUFHLGFBQWFBLE1BQUssQ0FBQztBQUUvRCxhQUFPO0FBQUEsSUFDVDtBQUVBLFVBQU0sUUFBUSxDQUFDO0FBRWYsVUFBTSxpQkFBaUIsT0FBTyxPQUFPLFlBQVk7QUFBQSxNQUMvQztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBRUQsYUFBUyxNQUFNQSxRQUFPLE1BQU07QUFDMUIsVUFBSSxjQUFNLFlBQVlBLE1BQUs7QUFBRztBQUU5QixVQUFJLE1BQU0sUUFBUUEsTUFBSyxNQUFNLElBQUk7QUFDL0IsY0FBTSxNQUFNLG9DQUFvQyxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFDaEU7QUFFQSxZQUFNLEtBQUtBLE1BQUs7QUFFaEIsb0JBQU0sUUFBUUEsUUFBTyxTQUFTRixNQUFLLElBQUksS0FBSztBQUMxQyxjQUFNLFNBQVMsRUFBRSxjQUFNLFlBQVksRUFBRSxLQUFLLE9BQU8sU0FBUyxRQUFRO0FBQUEsVUFDaEU7QUFBQSxVQUFVO0FBQUEsVUFBSSxjQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJO0FBQUEsVUFBSztBQUFBLFVBQU07QUFBQSxRQUM5RDtBQUVBLFlBQUksV0FBVyxNQUFNO0FBQ25CLGdCQUFNLElBQUksT0FBTyxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQUEsUUFDM0M7QUFBQSxNQUNGLENBQUM7QUFFRCxZQUFNLElBQUk7QUFBQSxJQUNaO0FBRUEsUUFBSSxDQUFDLGNBQU0sU0FBUyxHQUFHLEdBQUc7QUFDeEIsWUFBTSxJQUFJLFVBQVUsd0JBQXdCO0FBQUEsSUFDOUM7QUFFQSxVQUFNLEdBQUc7QUFFVCxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQU8scUJBQVE7OztBQzlNZixXQUFTLE9BQU8sS0FBSztBQUNuQixVQUFNLFVBQVU7QUFBQSxNQUNkLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxJQUNUO0FBQ0EsV0FBTyxtQkFBbUIsR0FBRyxFQUFFLFFBQVEsb0JBQW9CLFNBQVMsU0FBU0csUUFBTztBQUNsRixhQUFPLFFBQVFBLE1BQUs7QUFBQSxJQUN0QixDQUFDO0FBQUEsRUFDSDtBQVVBLFdBQVMscUJBQXFCLFFBQVEsU0FBUztBQUM3QyxTQUFLLFNBQVMsQ0FBQztBQUVmLGNBQVUsbUJBQVcsUUFBUSxNQUFNLE9BQU87QUFBQSxFQUM1QztBQUVBLE1BQU1DLGFBQVkscUJBQXFCO0FBRXZDLEVBQUFBLFdBQVUsU0FBUyxTQUFTLE9BQU8sTUFBTUMsUUFBTztBQUM5QyxTQUFLLE9BQU8sS0FBSyxDQUFDLE1BQU1BLE1BQUssQ0FBQztBQUFBLEVBQ2hDO0FBRUEsRUFBQUQsV0FBVSxXQUFXLFNBQVNFLFVBQVMsU0FBUztBQUM5QyxVQUFNLFVBQVUsVUFBVSxTQUFTRCxRQUFPO0FBQ3hDLGFBQU8sUUFBUSxLQUFLLE1BQU1BLFFBQU8sTUFBTTtBQUFBLElBQ3pDLElBQUk7QUFFSixXQUFPLEtBQUssT0FBTyxJQUFJLFNBQVNFLE1BQUssTUFBTTtBQUN6QyxhQUFPLFFBQVEsS0FBSyxDQUFDLENBQUMsSUFBSSxNQUFNLFFBQVEsS0FBSyxDQUFDLENBQUM7QUFBQSxJQUNqRCxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUc7QUFBQSxFQUNqQjtBQUVBLE1BQU8sK0JBQVE7OztBQzVDZixXQUFTQyxRQUFPLEtBQUs7QUFDbkIsV0FBTyxtQkFBbUIsR0FBRyxFQUMzQixRQUFRLFNBQVMsR0FBRyxFQUNwQixRQUFRLFFBQVEsR0FBRyxFQUNuQixRQUFRLFNBQVMsR0FBRyxFQUNwQixRQUFRLFFBQVEsR0FBRyxFQUNuQixRQUFRLFNBQVMsR0FBRyxFQUNwQixRQUFRLFNBQVMsR0FBRztBQUFBLEVBQ3hCO0FBV2UsV0FBUixTQUEwQixLQUFLLFFBQVEsU0FBUztBQUVyRCxRQUFJLENBQUMsUUFBUTtBQUNYLGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTSxVQUFVLFdBQVcsUUFBUSxVQUFVQTtBQUU3QyxVQUFNLGNBQWMsV0FBVyxRQUFRO0FBRXZDLFFBQUk7QUFFSixRQUFJLGFBQWE7QUFDZix5QkFBbUIsWUFBWSxRQUFRLE9BQU87QUFBQSxJQUNoRCxPQUFPO0FBQ0wseUJBQW1CLGNBQU0sa0JBQWtCLE1BQU0sSUFDL0MsT0FBTyxTQUFTLElBQ2hCLElBQUksNkJBQXFCLFFBQVEsT0FBTyxFQUFFLFNBQVMsT0FBTztBQUFBLElBQzlEO0FBRUEsUUFBSSxrQkFBa0I7QUFDcEIsWUFBTSxnQkFBZ0IsSUFBSSxRQUFRLEdBQUc7QUFFckMsVUFBSSxrQkFBa0IsSUFBSTtBQUN4QixjQUFNLElBQUksTUFBTSxHQUFHLGFBQWE7QUFBQSxNQUNsQztBQUNBLGNBQVEsSUFBSSxRQUFRLEdBQUcsTUFBTSxLQUFLLE1BQU0sT0FBTztBQUFBLElBQ2pEO0FBRUEsV0FBTztBQUFBLEVBQ1Q7OztBQzFEQSxNQUFNLHFCQUFOLE1BQXlCO0FBQUEsSUFDdkIsY0FBYztBQUNaLFdBQUssV0FBVyxDQUFDO0FBQUEsSUFDbkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFVQSxJQUFJLFdBQVcsVUFBVSxTQUFTO0FBQ2hDLFdBQUssU0FBUyxLQUFLO0FBQUEsUUFDakI7QUFBQSxRQUNBO0FBQUEsUUFDQSxhQUFhLFVBQVUsUUFBUSxjQUFjO0FBQUEsUUFDN0MsU0FBUyxVQUFVLFFBQVEsVUFBVTtBQUFBLE1BQ3ZDLENBQUM7QUFDRCxhQUFPLEtBQUssU0FBUyxTQUFTO0FBQUEsSUFDaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU0EsTUFBTSxJQUFJO0FBQ1IsVUFBSSxLQUFLLFNBQVMsRUFBRSxHQUFHO0FBQ3JCLGFBQUssU0FBUyxFQUFFLElBQUk7QUFBQSxNQUN0QjtBQUFBLElBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPQSxRQUFRO0FBQ04sVUFBSSxLQUFLLFVBQVU7QUFDakIsYUFBSyxXQUFXLENBQUM7QUFBQSxNQUNuQjtBQUFBLElBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBWUEsUUFBUSxJQUFJO0FBQ1Ysb0JBQU0sUUFBUSxLQUFLLFVBQVUsU0FBUyxlQUFlLEdBQUc7QUFDdEQsWUFBSSxNQUFNLE1BQU07QUFDZCxhQUFHLENBQUM7QUFBQSxRQUNOO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFFQSxNQUFPLDZCQUFROzs7QUNwRWYsTUFBTyx1QkFBUTtBQUFBLElBQ2IsbUJBQW1CO0FBQUEsSUFDbkIsbUJBQW1CO0FBQUEsSUFDbkIscUJBQXFCO0FBQUEsRUFDdkI7OztBQ0hBLE1BQU8sMEJBQVEsT0FBTyxvQkFBb0IsY0FBYyxrQkFBa0I7OztBQ0QxRSxNQUFPLG1CQUFRLE9BQU8sYUFBYSxjQUFjLFdBQVc7OztBQ0E1RCxNQUFPLGVBQVEsT0FBTyxTQUFTLGNBQWMsT0FBTzs7O0FDRXBELE1BQU8sa0JBQVE7QUFBQSxJQUNiLFdBQVc7QUFBQSxJQUNYLFNBQVM7QUFBQSxNQUNQO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsSUFDQSxXQUFXLENBQUMsUUFBUSxTQUFTLFFBQVEsUUFBUSxPQUFPLE1BQU07QUFBQSxFQUM1RDs7O0FDWkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BQU0sZ0JBQWdCLE9BQU8sV0FBVyxlQUFlLE9BQU8sYUFBYTtBQUUzRSxNQUFNLGFBQWEsT0FBTyxjQUFjLFlBQVksYUFBYTtBQW1CakUsTUFBTSx3QkFBd0Isa0JBQzNCLENBQUMsY0FBYyxDQUFDLGVBQWUsZ0JBQWdCLElBQUksRUFBRSxRQUFRLFdBQVcsT0FBTyxJQUFJO0FBV3RGLE1BQU0sa0NBQWtDLE1BQU07QUFDNUMsV0FDRSxPQUFPLHNCQUFzQjtBQUFBLElBRTdCLGdCQUFnQixxQkFDaEIsT0FBTyxLQUFLLGtCQUFrQjtBQUFBLEVBRWxDLEdBQUc7QUFFSCxNQUFNLFNBQVMsaUJBQWlCLE9BQU8sU0FBUyxRQUFROzs7QUN2Q3hELE1BQU8sbUJBQVE7QUFBQSxJQUNiLEdBQUc7QUFBQSxJQUNILEdBQUc7QUFBQSxFQUNMOzs7QUNBZSxXQUFSLGlCQUFrQyxNQUFNLFNBQVM7QUFDdEQsV0FBTyxtQkFBVyxNQUFNLElBQUksaUJBQVMsUUFBUSxnQkFBZ0IsR0FBRyxPQUFPLE9BQU87QUFBQSxNQUM1RSxTQUFTLFNBQVNDLFFBQU8sS0FBSyxNQUFNLFNBQVM7QUFDM0MsWUFBSSxpQkFBUyxVQUFVLGNBQU0sU0FBU0EsTUFBSyxHQUFHO0FBQzVDLGVBQUssT0FBTyxLQUFLQSxPQUFNLFNBQVMsUUFBUSxDQUFDO0FBQ3pDLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGVBQU8sUUFBUSxlQUFlLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFDckQ7QUFBQSxJQUNGLEdBQUcsT0FBTyxDQUFDO0FBQUEsRUFDYjs7O0FDTkEsV0FBUyxjQUFjLE1BQU07QUFLM0IsV0FBTyxjQUFNLFNBQVMsaUJBQWlCLElBQUksRUFBRSxJQUFJLENBQUFDLFdBQVM7QUFDeEQsYUFBT0EsT0FBTSxDQUFDLE1BQU0sT0FBTyxLQUFLQSxPQUFNLENBQUMsS0FBS0EsT0FBTSxDQUFDO0FBQUEsSUFDckQsQ0FBQztBQUFBLEVBQ0g7QUFTQSxXQUFTLGNBQWMsS0FBSztBQUMxQixVQUFNLE1BQU0sQ0FBQztBQUNiLFVBQU1DLFFBQU8sT0FBTyxLQUFLLEdBQUc7QUFDNUIsUUFBSTtBQUNKLFVBQU0sTUFBTUEsTUFBSztBQUNqQixRQUFJO0FBQ0osU0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLEtBQUs7QUFDeEIsWUFBTUEsTUFBSyxDQUFDO0FBQ1osVUFBSSxHQUFHLElBQUksSUFBSSxHQUFHO0FBQUEsSUFDcEI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQVNBLFdBQVMsZUFBZSxVQUFVO0FBQ2hDLGFBQVMsVUFBVSxNQUFNQyxRQUFPLFFBQVEsT0FBTztBQUM3QyxVQUFJLE9BQU8sS0FBSyxPQUFPO0FBRXZCLFVBQUksU0FBUztBQUFhLGVBQU87QUFFakMsWUFBTSxlQUFlLE9BQU8sU0FBUyxDQUFDLElBQUk7QUFDMUMsWUFBTSxTQUFTLFNBQVMsS0FBSztBQUM3QixhQUFPLENBQUMsUUFBUSxjQUFNLFFBQVEsTUFBTSxJQUFJLE9BQU8sU0FBUztBQUV4RCxVQUFJLFFBQVE7QUFDVixZQUFJLGNBQU0sV0FBVyxRQUFRLElBQUksR0FBRztBQUNsQyxpQkFBTyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksR0FBR0EsTUFBSztBQUFBLFFBQ3JDLE9BQU87QUFDTCxpQkFBTyxJQUFJLElBQUlBO0FBQUEsUUFDakI7QUFFQSxlQUFPLENBQUM7QUFBQSxNQUNWO0FBRUEsVUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsY0FBTSxTQUFTLE9BQU8sSUFBSSxDQUFDLEdBQUc7QUFDbEQsZUFBTyxJQUFJLElBQUksQ0FBQztBQUFBLE1BQ2xCO0FBRUEsWUFBTSxTQUFTLFVBQVUsTUFBTUEsUUFBTyxPQUFPLElBQUksR0FBRyxLQUFLO0FBRXpELFVBQUksVUFBVSxjQUFNLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRztBQUN6QyxlQUFPLElBQUksSUFBSSxjQUFjLE9BQU8sSUFBSSxDQUFDO0FBQUEsTUFDM0M7QUFFQSxhQUFPLENBQUM7QUFBQSxJQUNWO0FBRUEsUUFBSSxjQUFNLFdBQVcsUUFBUSxLQUFLLGNBQU0sV0FBVyxTQUFTLE9BQU8sR0FBRztBQUNwRSxZQUFNLE1BQU0sQ0FBQztBQUViLG9CQUFNLGFBQWEsVUFBVSxDQUFDLE1BQU1BLFdBQVU7QUFDNUMsa0JBQVUsY0FBYyxJQUFJLEdBQUdBLFFBQU8sS0FBSyxDQUFDO0FBQUEsTUFDOUMsQ0FBQztBQUVELGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFPLHlCQUFROzs7QUMxRWYsV0FBUyxnQkFBZ0IsVUFBVSxRQUFRLFNBQVM7QUFDbEQsUUFBSSxjQUFNLFNBQVMsUUFBUSxHQUFHO0FBQzVCLFVBQUk7QUFDRixTQUFDLFVBQVUsS0FBSyxPQUFPLFFBQVE7QUFDL0IsZUFBTyxjQUFNLEtBQUssUUFBUTtBQUFBLE1BQzVCLFNBQVMsR0FBRztBQUNWLFlBQUksRUFBRSxTQUFTLGVBQWU7QUFDNUIsZ0JBQU07QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxZQUFRLFdBQVcsS0FBSyxXQUFXLFFBQVE7QUFBQSxFQUM3QztBQUVBLE1BQU0sV0FBVztBQUFBLElBRWYsY0FBYztBQUFBLElBRWQsU0FBUyxDQUFDLE9BQU8sUUFBUSxPQUFPO0FBQUEsSUFFaEMsa0JBQWtCLENBQUMsU0FBUyxpQkFBaUIsTUFBTSxTQUFTO0FBQzFELFlBQU0sY0FBYyxRQUFRLGVBQWUsS0FBSztBQUNoRCxZQUFNLHFCQUFxQixZQUFZLFFBQVEsa0JBQWtCLElBQUk7QUFDckUsWUFBTSxrQkFBa0IsY0FBTSxTQUFTLElBQUk7QUFFM0MsVUFBSSxtQkFBbUIsY0FBTSxXQUFXLElBQUksR0FBRztBQUM3QyxlQUFPLElBQUksU0FBUyxJQUFJO0FBQUEsTUFDMUI7QUFFQSxZQUFNQyxjQUFhLGNBQU0sV0FBVyxJQUFJO0FBRXhDLFVBQUlBLGFBQVk7QUFDZCxlQUFPLHFCQUFxQixLQUFLLFVBQVUsdUJBQWUsSUFBSSxDQUFDLElBQUk7QUFBQSxNQUNyRTtBQUVBLFVBQUksY0FBTSxjQUFjLElBQUksS0FDMUIsY0FBTSxTQUFTLElBQUksS0FDbkIsY0FBTSxTQUFTLElBQUksS0FDbkIsY0FBTSxPQUFPLElBQUksS0FDakIsY0FBTSxPQUFPLElBQUksS0FDakIsY0FBTSxpQkFBaUIsSUFBSSxHQUMzQjtBQUNBLGVBQU87QUFBQSxNQUNUO0FBQ0EsVUFBSSxjQUFNLGtCQUFrQixJQUFJLEdBQUc7QUFDakMsZUFBTyxLQUFLO0FBQUEsTUFDZDtBQUNBLFVBQUksY0FBTSxrQkFBa0IsSUFBSSxHQUFHO0FBQ2pDLGdCQUFRLGVBQWUsbURBQW1ELEtBQUs7QUFDL0UsZUFBTyxLQUFLLFNBQVM7QUFBQSxNQUN2QjtBQUVBLFVBQUlDO0FBRUosVUFBSSxpQkFBaUI7QUFDbkIsWUFBSSxZQUFZLFFBQVEsbUNBQW1DLElBQUksSUFBSTtBQUNqRSxpQkFBTyxpQkFBaUIsTUFBTSxLQUFLLGNBQWMsRUFBRSxTQUFTO0FBQUEsUUFDOUQ7QUFFQSxhQUFLQSxjQUFhLGNBQU0sV0FBVyxJQUFJLE1BQU0sWUFBWSxRQUFRLHFCQUFxQixJQUFJLElBQUk7QUFDNUYsZ0JBQU0sWUFBWSxLQUFLLE9BQU8sS0FBSyxJQUFJO0FBRXZDLGlCQUFPO0FBQUEsWUFDTEEsY0FBYSxFQUFDLFdBQVcsS0FBSSxJQUFJO0FBQUEsWUFDakMsYUFBYSxJQUFJLFVBQVU7QUFBQSxZQUMzQixLQUFLO0FBQUEsVUFDUDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsVUFBSSxtQkFBbUIsb0JBQXFCO0FBQzFDLGdCQUFRLGVBQWUsb0JBQW9CLEtBQUs7QUFDaEQsZUFBTyxnQkFBZ0IsSUFBSTtBQUFBLE1BQzdCO0FBRUEsYUFBTztBQUFBLElBQ1QsQ0FBQztBQUFBLElBRUQsbUJBQW1CLENBQUMsU0FBUyxrQkFBa0IsTUFBTTtBQUNuRCxZQUFNQyxnQkFBZSxLQUFLLGdCQUFnQixTQUFTO0FBQ25ELFlBQU0sb0JBQW9CQSxpQkFBZ0JBLGNBQWE7QUFDdkQsWUFBTSxnQkFBZ0IsS0FBSyxpQkFBaUI7QUFFNUMsVUFBSSxjQUFNLFdBQVcsSUFBSSxLQUFLLGNBQU0saUJBQWlCLElBQUksR0FBRztBQUMxRCxlQUFPO0FBQUEsTUFDVDtBQUVBLFVBQUksUUFBUSxjQUFNLFNBQVMsSUFBSSxNQUFPLHFCQUFxQixDQUFDLEtBQUssZ0JBQWlCLGdCQUFnQjtBQUNoRyxjQUFNLG9CQUFvQkEsaUJBQWdCQSxjQUFhO0FBQ3ZELGNBQU0sb0JBQW9CLENBQUMscUJBQXFCO0FBRWhELFlBQUk7QUFDRixpQkFBTyxLQUFLLE1BQU0sSUFBSTtBQUFBLFFBQ3hCLFNBQVMsR0FBRztBQUNWLGNBQUksbUJBQW1CO0FBQ3JCLGdCQUFJLEVBQUUsU0FBUyxlQUFlO0FBQzVCLG9CQUFNLG1CQUFXLEtBQUssR0FBRyxtQkFBVyxrQkFBa0IsTUFBTSxNQUFNLEtBQUssUUFBUTtBQUFBLFlBQ2pGO0FBQ0Esa0JBQU07QUFBQSxVQUNSO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxhQUFPO0FBQUEsSUFDVCxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1ELFNBQVM7QUFBQSxJQUVULGdCQUFnQjtBQUFBLElBQ2hCLGdCQUFnQjtBQUFBLElBRWhCLGtCQUFrQjtBQUFBLElBQ2xCLGVBQWU7QUFBQSxJQUVmLEtBQUs7QUFBQSxNQUNILFVBQVUsaUJBQVMsUUFBUTtBQUFBLE1BQzNCLE1BQU0saUJBQVMsUUFBUTtBQUFBLElBQ3pCO0FBQUEsSUFFQSxnQkFBZ0IsU0FBUyxlQUFlLFFBQVE7QUFDOUMsYUFBTyxVQUFVLE9BQU8sU0FBUztBQUFBLElBQ25DO0FBQUEsSUFFQSxTQUFTO0FBQUEsTUFDUCxRQUFRO0FBQUEsUUFDTixVQUFVO0FBQUEsUUFDVixnQkFBZ0I7QUFBQSxNQUNsQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsZ0JBQU0sUUFBUSxDQUFDLFVBQVUsT0FBTyxRQUFRLFFBQVEsT0FBTyxPQUFPLEdBQUcsQ0FBQyxXQUFXO0FBQzNFLGFBQVMsUUFBUSxNQUFNLElBQUksQ0FBQztBQUFBLEVBQzlCLENBQUM7QUFFRCxNQUFPLG1CQUFROzs7QUMxSmYsTUFBTSxvQkFBb0IsY0FBTSxZQUFZO0FBQUEsSUFDMUM7QUFBQSxJQUFPO0FBQUEsSUFBaUI7QUFBQSxJQUFrQjtBQUFBLElBQWdCO0FBQUEsSUFDMUQ7QUFBQSxJQUFXO0FBQUEsSUFBUTtBQUFBLElBQVE7QUFBQSxJQUFxQjtBQUFBLElBQ2hEO0FBQUEsSUFBaUI7QUFBQSxJQUFZO0FBQUEsSUFBZ0I7QUFBQSxJQUM3QztBQUFBLElBQVc7QUFBQSxJQUFlO0FBQUEsRUFDNUIsQ0FBQztBQWdCRCxNQUFPLHVCQUFRLGdCQUFjO0FBQzNCLFVBQU0sU0FBUyxDQUFDO0FBQ2hCLFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSTtBQUVKLGtCQUFjLFdBQVcsTUFBTSxJQUFJLEVBQUUsUUFBUSxTQUFTLE9BQU9DLE9BQU07QUFDakUsVUFBSUEsTUFBSyxRQUFRLEdBQUc7QUFDcEIsWUFBTUEsTUFBSyxVQUFVLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZO0FBQzlDLFlBQU1BLE1BQUssVUFBVSxJQUFJLENBQUMsRUFBRSxLQUFLO0FBRWpDLFVBQUksQ0FBQyxPQUFRLE9BQU8sR0FBRyxLQUFLLGtCQUFrQixHQUFHLEdBQUk7QUFDbkQ7QUFBQSxNQUNGO0FBRUEsVUFBSSxRQUFRLGNBQWM7QUFDeEIsWUFBSSxPQUFPLEdBQUcsR0FBRztBQUNmLGlCQUFPLEdBQUcsRUFBRSxLQUFLLEdBQUc7QUFBQSxRQUN0QixPQUFPO0FBQ0wsaUJBQU8sR0FBRyxJQUFJLENBQUMsR0FBRztBQUFBLFFBQ3BCO0FBQUEsTUFDRixPQUFPO0FBQ0wsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHLElBQUksT0FBTyxHQUFHLElBQUksT0FBTyxNQUFNO0FBQUEsTUFDekQ7QUFBQSxJQUNGLENBQUM7QUFFRCxXQUFPO0FBQUEsRUFDVDs7O0FDakRBLE1BQU0sYUFBYSxPQUFPLFdBQVc7QUFFckMsV0FBUyxnQkFBZ0IsUUFBUTtBQUMvQixXQUFPLFVBQVUsT0FBTyxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVk7QUFBQSxFQUNyRDtBQUVBLFdBQVMsZUFBZUMsUUFBTztBQUM3QixRQUFJQSxXQUFVLFNBQVNBLFVBQVMsTUFBTTtBQUNwQyxhQUFPQTtBQUFBLElBQ1Q7QUFFQSxXQUFPLGNBQU0sUUFBUUEsTUFBSyxJQUFJQSxPQUFNLElBQUksY0FBYyxJQUFJLE9BQU9BLE1BQUs7QUFBQSxFQUN4RTtBQUVBLFdBQVMsWUFBWSxLQUFLO0FBQ3hCLFVBQU0sU0FBUyx1QkFBTyxPQUFPLElBQUk7QUFDakMsVUFBTSxXQUFXO0FBQ2pCLFFBQUlDO0FBRUosV0FBUUEsU0FBUSxTQUFTLEtBQUssR0FBRyxHQUFJO0FBQ25DLGFBQU9BLE9BQU0sQ0FBQyxDQUFDLElBQUlBLE9BQU0sQ0FBQztBQUFBLElBQzVCO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFNLG9CQUFvQixDQUFDLFFBQVEsaUNBQWlDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFFbkYsV0FBUyxpQkFBaUIsU0FBU0QsUUFBTyxRQUFRRSxTQUFRLG9CQUFvQjtBQUM1RSxRQUFJLGNBQU0sV0FBV0EsT0FBTSxHQUFHO0FBQzVCLGFBQU9BLFFBQU8sS0FBSyxNQUFNRixRQUFPLE1BQU07QUFBQSxJQUN4QztBQUVBLFFBQUksb0JBQW9CO0FBQ3RCLE1BQUFBLFNBQVE7QUFBQSxJQUNWO0FBRUEsUUFBSSxDQUFDLGNBQU0sU0FBU0EsTUFBSztBQUFHO0FBRTVCLFFBQUksY0FBTSxTQUFTRSxPQUFNLEdBQUc7QUFDMUIsYUFBT0YsT0FBTSxRQUFRRSxPQUFNLE1BQU07QUFBQSxJQUNuQztBQUVBLFFBQUksY0FBTSxTQUFTQSxPQUFNLEdBQUc7QUFDMUIsYUFBT0EsUUFBTyxLQUFLRixNQUFLO0FBQUEsSUFDMUI7QUFBQSxFQUNGO0FBRUEsV0FBUyxhQUFhLFFBQVE7QUFDNUIsV0FBTyxPQUFPLEtBQUssRUFDaEIsWUFBWSxFQUFFLFFBQVEsbUJBQW1CLENBQUMsR0FBR0csT0FBTSxRQUFRO0FBQzFELGFBQU9BLE1BQUssWUFBWSxJQUFJO0FBQUEsSUFDOUIsQ0FBQztBQUFBLEVBQ0w7QUFFQSxXQUFTLGVBQWUsS0FBSyxRQUFRO0FBQ25DLFVBQU0sZUFBZSxjQUFNLFlBQVksTUFBTSxNQUFNO0FBRW5ELEtBQUMsT0FBTyxPQUFPLEtBQUssRUFBRSxRQUFRLGdCQUFjO0FBQzFDLGFBQU8sZUFBZSxLQUFLLGFBQWEsY0FBYztBQUFBLFFBQ3BELE9BQU8sU0FBUyxNQUFNLE1BQU0sTUFBTTtBQUNoQyxpQkFBTyxLQUFLLFVBQVUsRUFBRSxLQUFLLE1BQU0sUUFBUSxNQUFNLE1BQU0sSUFBSTtBQUFBLFFBQzdEO0FBQUEsUUFDQSxjQUFjO0FBQUEsTUFDaEIsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUFBLEVBQ0g7QUFFQSxNQUFNLGVBQU4sTUFBbUI7QUFBQSxJQUNqQixZQUFZLFNBQVM7QUFDbkIsaUJBQVcsS0FBSyxJQUFJLE9BQU87QUFBQSxJQUM3QjtBQUFBLElBRUEsSUFBSSxRQUFRLGdCQUFnQixTQUFTO0FBQ25DLFlBQU1DLFFBQU87QUFFYixlQUFTLFVBQVUsUUFBUSxTQUFTLFVBQVU7QUFDNUMsY0FBTSxVQUFVLGdCQUFnQixPQUFPO0FBRXZDLFlBQUksQ0FBQyxTQUFTO0FBQ1osZ0JBQU0sSUFBSSxNQUFNLHdDQUF3QztBQUFBLFFBQzFEO0FBRUEsY0FBTSxNQUFNLGNBQU0sUUFBUUEsT0FBTSxPQUFPO0FBRXZDLFlBQUcsQ0FBQyxPQUFPQSxNQUFLLEdBQUcsTUFBTSxVQUFhLGFBQWEsUUFBUyxhQUFhLFVBQWFBLE1BQUssR0FBRyxNQUFNLE9BQVE7QUFDMUcsVUFBQUEsTUFBSyxPQUFPLE9BQU8sSUFBSSxlQUFlLE1BQU07QUFBQSxRQUM5QztBQUFBLE1BQ0Y7QUFFQSxZQUFNLGFBQWEsQ0FBQyxTQUFTLGFBQzNCLGNBQU0sUUFBUSxTQUFTLENBQUMsUUFBUSxZQUFZLFVBQVUsUUFBUSxTQUFTLFFBQVEsQ0FBQztBQUVsRixVQUFJLGNBQU0sY0FBYyxNQUFNLEtBQUssa0JBQWtCLEtBQUssYUFBYTtBQUNyRSxtQkFBVyxRQUFRLGNBQWM7QUFBQSxNQUNuQyxXQUFVLGNBQU0sU0FBUyxNQUFNLE1BQU0sU0FBUyxPQUFPLEtBQUssTUFBTSxDQUFDLGtCQUFrQixNQUFNLEdBQUc7QUFDMUYsbUJBQVcscUJBQWEsTUFBTSxHQUFHLGNBQWM7QUFBQSxNQUNqRCxXQUFXLGNBQU0sVUFBVSxNQUFNLEdBQUc7QUFDbEMsbUJBQVcsQ0FBQyxLQUFLSixNQUFLLEtBQUssT0FBTyxRQUFRLEdBQUc7QUFDM0Msb0JBQVVBLFFBQU8sS0FBSyxPQUFPO0FBQUEsUUFDL0I7QUFBQSxNQUNGLE9BQU87QUFDTCxrQkFBVSxRQUFRLFVBQVUsZ0JBQWdCLFFBQVEsT0FBTztBQUFBLE1BQzdEO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUVBLElBQUksUUFBUSxRQUFRO0FBQ2xCLGVBQVMsZ0JBQWdCLE1BQU07QUFFL0IsVUFBSSxRQUFRO0FBQ1YsY0FBTSxNQUFNLGNBQU0sUUFBUSxNQUFNLE1BQU07QUFFdEMsWUFBSSxLQUFLO0FBQ1AsZ0JBQU1BLFNBQVEsS0FBSyxHQUFHO0FBRXRCLGNBQUksQ0FBQyxRQUFRO0FBQ1gsbUJBQU9BO0FBQUEsVUFDVDtBQUVBLGNBQUksV0FBVyxNQUFNO0FBQ25CLG1CQUFPLFlBQVlBLE1BQUs7QUFBQSxVQUMxQjtBQUVBLGNBQUksY0FBTSxXQUFXLE1BQU0sR0FBRztBQUM1QixtQkFBTyxPQUFPLEtBQUssTUFBTUEsUUFBTyxHQUFHO0FBQUEsVUFDckM7QUFFQSxjQUFJLGNBQU0sU0FBUyxNQUFNLEdBQUc7QUFDMUIsbUJBQU8sT0FBTyxLQUFLQSxNQUFLO0FBQUEsVUFDMUI7QUFFQSxnQkFBTSxJQUFJLFVBQVUsd0NBQXdDO0FBQUEsUUFDOUQ7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBRUEsSUFBSSxRQUFRLFNBQVM7QUFDbkIsZUFBUyxnQkFBZ0IsTUFBTTtBQUUvQixVQUFJLFFBQVE7QUFDVixjQUFNLE1BQU0sY0FBTSxRQUFRLE1BQU0sTUFBTTtBQUV0QyxlQUFPLENBQUMsRUFBRSxPQUFPLEtBQUssR0FBRyxNQUFNLFdBQWMsQ0FBQyxXQUFXLGlCQUFpQixNQUFNLEtBQUssR0FBRyxHQUFHLEtBQUssT0FBTztBQUFBLE1BQ3pHO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUVBLE9BQU8sUUFBUSxTQUFTO0FBQ3RCLFlBQU1JLFFBQU87QUFDYixVQUFJLFVBQVU7QUFFZCxlQUFTLGFBQWEsU0FBUztBQUM3QixrQkFBVSxnQkFBZ0IsT0FBTztBQUVqQyxZQUFJLFNBQVM7QUFDWCxnQkFBTSxNQUFNLGNBQU0sUUFBUUEsT0FBTSxPQUFPO0FBRXZDLGNBQUksUUFBUSxDQUFDLFdBQVcsaUJBQWlCQSxPQUFNQSxNQUFLLEdBQUcsR0FBRyxLQUFLLE9BQU8sSUFBSTtBQUN4RSxtQkFBT0EsTUFBSyxHQUFHO0FBRWYsc0JBQVU7QUFBQSxVQUNaO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLGNBQU0sUUFBUSxNQUFNLEdBQUc7QUFDekIsZUFBTyxRQUFRLFlBQVk7QUFBQSxNQUM3QixPQUFPO0FBQ0wscUJBQWEsTUFBTTtBQUFBLE1BQ3JCO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUVBLE1BQU0sU0FBUztBQUNiLFlBQU1DLFFBQU8sT0FBTyxLQUFLLElBQUk7QUFDN0IsVUFBSSxJQUFJQSxNQUFLO0FBQ2IsVUFBSSxVQUFVO0FBRWQsYUFBTyxLQUFLO0FBQ1YsY0FBTSxNQUFNQSxNQUFLLENBQUM7QUFDbEIsWUFBRyxDQUFDLFdBQVcsaUJBQWlCLE1BQU0sS0FBSyxHQUFHLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRztBQUNwRSxpQkFBTyxLQUFLLEdBQUc7QUFDZixvQkFBVTtBQUFBLFFBQ1o7QUFBQSxNQUNGO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUVBLFVBQVUsUUFBUTtBQUNoQixZQUFNRCxRQUFPO0FBQ2IsWUFBTSxVQUFVLENBQUM7QUFFakIsb0JBQU0sUUFBUSxNQUFNLENBQUNKLFFBQU8sV0FBVztBQUNyQyxjQUFNLE1BQU0sY0FBTSxRQUFRLFNBQVMsTUFBTTtBQUV6QyxZQUFJLEtBQUs7QUFDUCxVQUFBSSxNQUFLLEdBQUcsSUFBSSxlQUFlSixNQUFLO0FBQ2hDLGlCQUFPSSxNQUFLLE1BQU07QUFDbEI7QUFBQSxRQUNGO0FBRUEsY0FBTSxhQUFhLFNBQVMsYUFBYSxNQUFNLElBQUksT0FBTyxNQUFNLEVBQUUsS0FBSztBQUV2RSxZQUFJLGVBQWUsUUFBUTtBQUN6QixpQkFBT0EsTUFBSyxNQUFNO0FBQUEsUUFDcEI7QUFFQSxRQUFBQSxNQUFLLFVBQVUsSUFBSSxlQUFlSixNQUFLO0FBRXZDLGdCQUFRLFVBQVUsSUFBSTtBQUFBLE1BQ3hCLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsVUFBVSxTQUFTO0FBQ2pCLGFBQU8sS0FBSyxZQUFZLE9BQU8sTUFBTSxHQUFHLE9BQU87QUFBQSxJQUNqRDtBQUFBLElBRUEsT0FBTyxXQUFXO0FBQ2hCLFlBQU0sTUFBTSx1QkFBTyxPQUFPLElBQUk7QUFFOUIsb0JBQU0sUUFBUSxNQUFNLENBQUNBLFFBQU8sV0FBVztBQUNyQyxRQUFBQSxVQUFTLFFBQVFBLFdBQVUsVUFBVSxJQUFJLE1BQU0sSUFBSSxhQUFhLGNBQU0sUUFBUUEsTUFBSyxJQUFJQSxPQUFNLEtBQUssSUFBSSxJQUFJQTtBQUFBLE1BQzVHLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsQ0FBQyxPQUFPLFFBQVEsSUFBSTtBQUNsQixhQUFPLE9BQU8sUUFBUSxLQUFLLE9BQU8sQ0FBQyxFQUFFLE9BQU8sUUFBUSxFQUFFO0FBQUEsSUFDeEQ7QUFBQSxJQUVBLFdBQVc7QUFDVCxhQUFPLE9BQU8sUUFBUSxLQUFLLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVFBLE1BQUssTUFBTSxTQUFTLE9BQU9BLE1BQUssRUFBRSxLQUFLLElBQUk7QUFBQSxJQUNoRztBQUFBLElBRUEsS0FBSyxPQUFPLFdBQVcsSUFBSTtBQUN6QixhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsT0FBTyxLQUFLLE9BQU87QUFDakIsYUFBTyxpQkFBaUIsT0FBTyxRQUFRLElBQUksS0FBSyxLQUFLO0FBQUEsSUFDdkQ7QUFBQSxJQUVBLE9BQU8sT0FBTyxVQUFVLFNBQVM7QUFDL0IsWUFBTU0sWUFBVyxJQUFJLEtBQUssS0FBSztBQUUvQixjQUFRLFFBQVEsQ0FBQyxXQUFXQSxVQUFTLElBQUksTUFBTSxDQUFDO0FBRWhELGFBQU9BO0FBQUEsSUFDVDtBQUFBLElBRUEsT0FBTyxTQUFTLFFBQVE7QUFDdEIsWUFBTSxZQUFZLEtBQUssVUFBVSxJQUFLLEtBQUssVUFBVSxJQUFJO0FBQUEsUUFDdkQsV0FBVyxDQUFDO0FBQUEsTUFDZDtBQUVBLFlBQU0sWUFBWSxVQUFVO0FBQzVCLFlBQU1DLGFBQVksS0FBSztBQUV2QixlQUFTLGVBQWUsU0FBUztBQUMvQixjQUFNLFVBQVUsZ0JBQWdCLE9BQU87QUFFdkMsWUFBSSxDQUFDLFVBQVUsT0FBTyxHQUFHO0FBQ3ZCLHlCQUFlQSxZQUFXLE9BQU87QUFDakMsb0JBQVUsT0FBTyxJQUFJO0FBQUEsUUFDdkI7QUFBQSxNQUNGO0FBRUEsb0JBQU0sUUFBUSxNQUFNLElBQUksT0FBTyxRQUFRLGNBQWMsSUFBSSxlQUFlLE1BQU07QUFFOUUsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsZUFBYSxTQUFTLENBQUMsZ0JBQWdCLGtCQUFrQixVQUFVLG1CQUFtQixjQUFjLGVBQWUsQ0FBQztBQUdwSCxnQkFBTSxrQkFBa0IsYUFBYSxXQUFXLENBQUMsRUFBQyxPQUFBUCxPQUFLLEdBQUcsUUFBUTtBQUNoRSxRQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsWUFBWSxJQUFJLElBQUksTUFBTSxDQUFDO0FBQy9DLFdBQU87QUFBQSxNQUNMLEtBQUssTUFBTUE7QUFBQSxNQUNYLElBQUksYUFBYTtBQUNmLGFBQUssTUFBTSxJQUFJO0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBRUQsZ0JBQU0sY0FBYyxZQUFZO0FBRWhDLE1BQU8sdUJBQVE7OztBQy9SQSxXQUFSLGNBQStCLEtBQUssVUFBVTtBQUNuRCxVQUFNLFNBQVMsUUFBUTtBQUN2QixVQUFNLFVBQVUsWUFBWTtBQUM1QixVQUFNLFVBQVUscUJBQWEsS0FBSyxRQUFRLE9BQU87QUFDakQsUUFBSSxPQUFPLFFBQVE7QUFFbkIsa0JBQU0sUUFBUSxLQUFLLFNBQVMsVUFBVSxJQUFJO0FBQ3hDLGFBQU8sR0FBRyxLQUFLLFFBQVEsTUFBTSxRQUFRLFVBQVUsR0FBRyxXQUFXLFNBQVMsU0FBUyxNQUFTO0FBQUEsSUFDMUYsQ0FBQztBQUVELFlBQVEsVUFBVTtBQUVsQixXQUFPO0FBQUEsRUFDVDs7O0FDekJlLFdBQVIsU0FBMEJRLFFBQU87QUFDdEMsV0FBTyxDQUFDLEVBQUVBLFVBQVNBLE9BQU07QUFBQSxFQUMzQjs7O0FDVUEsV0FBUyxjQUFjLFNBQVMsUUFBUSxTQUFTO0FBRS9DLHVCQUFXLEtBQUssTUFBTSxXQUFXLE9BQU8sYUFBYSxTQUFTLG1CQUFXLGNBQWMsUUFBUSxPQUFPO0FBQ3RHLFNBQUssT0FBTztBQUFBLEVBQ2Q7QUFFQSxnQkFBTSxTQUFTLGVBQWUsb0JBQVk7QUFBQSxJQUN4QyxZQUFZO0FBQUEsRUFDZCxDQUFDO0FBRUQsTUFBTyx3QkFBUTs7O0FDWEEsV0FBUixPQUF3QixTQUFTLFFBQVEsVUFBVTtBQUN4RCxVQUFNQyxrQkFBaUIsU0FBUyxPQUFPO0FBQ3ZDLFFBQUksQ0FBQyxTQUFTLFVBQVUsQ0FBQ0EsbUJBQWtCQSxnQkFBZSxTQUFTLE1BQU0sR0FBRztBQUMxRSxjQUFRLFFBQVE7QUFBQSxJQUNsQixPQUFPO0FBQ0wsYUFBTyxJQUFJO0FBQUEsUUFDVCxxQ0FBcUMsU0FBUztBQUFBLFFBQzlDLENBQUMsbUJBQVcsaUJBQWlCLG1CQUFXLGdCQUFnQixFQUFFLEtBQUssTUFBTSxTQUFTLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFBQSxRQUMvRixTQUFTO0FBQUEsUUFDVCxTQUFTO0FBQUEsUUFDVDtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGOzs7QUN4QmUsV0FBUixjQUErQixLQUFLO0FBQ3pDLFVBQU1DLFNBQVEsNEJBQTRCLEtBQUssR0FBRztBQUNsRCxXQUFPQSxVQUFTQSxPQUFNLENBQUMsS0FBSztBQUFBLEVBQzlCOzs7QUNHQSxXQUFTLFlBQVksY0FBY0MsTUFBSztBQUN0QyxtQkFBZSxnQkFBZ0I7QUFDL0IsVUFBTSxRQUFRLElBQUksTUFBTSxZQUFZO0FBQ3BDLFVBQU0sYUFBYSxJQUFJLE1BQU0sWUFBWTtBQUN6QyxRQUFJLE9BQU87QUFDWCxRQUFJLE9BQU87QUFDWCxRQUFJO0FBRUosSUFBQUEsT0FBTUEsU0FBUSxTQUFZQSxPQUFNO0FBRWhDLFdBQU8sU0FBUyxLQUFLLGFBQWE7QUFDaEMsWUFBTUMsT0FBTSxLQUFLLElBQUk7QUFFckIsWUFBTSxZQUFZLFdBQVcsSUFBSTtBQUVqQyxVQUFJLENBQUMsZUFBZTtBQUNsQix3QkFBZ0JBO0FBQUEsTUFDbEI7QUFFQSxZQUFNLElBQUksSUFBSTtBQUNkLGlCQUFXLElBQUksSUFBSUE7QUFFbkIsVUFBSSxJQUFJO0FBQ1IsVUFBSSxhQUFhO0FBRWpCLGFBQU8sTUFBTSxNQUFNO0FBQ2pCLHNCQUFjLE1BQU0sR0FBRztBQUN2QixZQUFJLElBQUk7QUFBQSxNQUNWO0FBRUEsY0FBUSxPQUFPLEtBQUs7QUFFcEIsVUFBSSxTQUFTLE1BQU07QUFDakIsZ0JBQVEsT0FBTyxLQUFLO0FBQUEsTUFDdEI7QUFFQSxVQUFJQSxPQUFNLGdCQUFnQkQsTUFBSztBQUM3QjtBQUFBLE1BQ0Y7QUFFQSxZQUFNLFNBQVMsYUFBYUMsT0FBTTtBQUVsQyxhQUFPLFNBQVMsS0FBSyxNQUFNLGFBQWEsTUFBTyxNQUFNLElBQUk7QUFBQSxJQUMzRDtBQUFBLEVBQ0Y7QUFFQSxNQUFPLHNCQUFROzs7QUNoRGYsV0FBUyxTQUFTLElBQUksTUFBTTtBQUMxQixRQUFJLFlBQVk7QUFDaEIsUUFBSSxZQUFZLE1BQU87QUFDdkIsUUFBSTtBQUNKLFFBQUk7QUFFSixVQUFNLFNBQVMsQ0FBQyxNQUFNQyxPQUFNLEtBQUssSUFBSSxNQUFNO0FBQ3pDLGtCQUFZQTtBQUNaLGlCQUFXO0FBQ1gsVUFBSSxPQUFPO0FBQ1QscUJBQWEsS0FBSztBQUNsQixnQkFBUTtBQUFBLE1BQ1Y7QUFDQSxTQUFHLE1BQU0sTUFBTSxJQUFJO0FBQUEsSUFDckI7QUFFQSxVQUFNLFlBQVksSUFBSSxTQUFTO0FBQzdCLFlBQU1BLE9BQU0sS0FBSyxJQUFJO0FBQ3JCLFlBQU0sU0FBU0EsT0FBTTtBQUNyQixVQUFLLFVBQVUsV0FBVztBQUN4QixlQUFPLE1BQU1BLElBQUc7QUFBQSxNQUNsQixPQUFPO0FBQ0wsbUJBQVc7QUFDWCxZQUFJLENBQUMsT0FBTztBQUNWLGtCQUFRLFdBQVcsTUFBTTtBQUN2QixvQkFBUTtBQUNSLG1CQUFPLFFBQVE7QUFBQSxVQUNqQixHQUFHLFlBQVksTUFBTTtBQUFBLFFBQ3ZCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxVQUFNQyxTQUFRLE1BQU0sWUFBWSxPQUFPLFFBQVE7QUFFL0MsV0FBTyxDQUFDLFdBQVdBLE1BQUs7QUFBQSxFQUMxQjtBQUVBLE1BQU8sbUJBQVE7OztBQ3ZDUixNQUFNLHVCQUF1QixDQUFDLFVBQVUsa0JBQWtCLE9BQU8sTUFBTTtBQUM1RSxRQUFJLGdCQUFnQjtBQUNwQixVQUFNLGVBQWUsb0JBQVksSUFBSSxHQUFHO0FBRXhDLFdBQU8saUJBQVMsT0FBSztBQUNuQixZQUFNLFNBQVMsRUFBRTtBQUNqQixZQUFNLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdDLFlBQU0sZ0JBQWdCLFNBQVM7QUFDL0IsWUFBTSxPQUFPLGFBQWEsYUFBYTtBQUN2QyxZQUFNLFVBQVUsVUFBVTtBQUUxQixzQkFBZ0I7QUFFaEIsWUFBTSxPQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0E7QUFBQSxRQUNBLFVBQVUsUUFBUyxTQUFTLFFBQVM7QUFBQSxRQUNyQyxPQUFPO0FBQUEsUUFDUCxNQUFNLE9BQU8sT0FBTztBQUFBLFFBQ3BCLFdBQVcsUUFBUSxTQUFTLFdBQVcsUUFBUSxVQUFVLE9BQU87QUFBQSxRQUNoRSxPQUFPO0FBQUEsUUFDUCxrQkFBa0IsU0FBUztBQUFBLFFBQzNCLENBQUMsbUJBQW1CLGFBQWEsUUFBUSxHQUFHO0FBQUEsTUFDOUM7QUFFQSxlQUFTLElBQUk7QUFBQSxJQUNmLEdBQUcsSUFBSTtBQUFBLEVBQ1Q7QUFFTyxNQUFNLHlCQUF5QixDQUFDLE9BQU8sY0FBYztBQUMxRCxVQUFNLG1CQUFtQixTQUFTO0FBRWxDLFdBQU8sQ0FBQyxDQUFDLFdBQVcsVUFBVSxDQUFDLEVBQUU7QUFBQSxNQUMvQjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFBQSxFQUNsQjtBQUVPLE1BQU0saUJBQWlCLENBQUMsT0FBTyxJQUFJLFNBQVMsY0FBTSxLQUFLLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQzs7O0FDdEMvRSxNQUFPLDBCQUFRLGlCQUFTO0FBQUE7QUFBQTtBQUFBLElBSXJCLFNBQVMscUJBQXFCO0FBQzdCLFlBQU0sT0FBTyxpQkFBUyxhQUFhLGtCQUFrQixLQUFLLGlCQUFTLFVBQVUsU0FBUztBQUN0RixZQUFNLGlCQUFpQixTQUFTLGNBQWMsR0FBRztBQUNqRCxVQUFJO0FBUUosZUFBUyxXQUFXLEtBQUs7QUFDdkIsWUFBSSxPQUFPO0FBRVgsWUFBSSxNQUFNO0FBRVIseUJBQWUsYUFBYSxRQUFRLElBQUk7QUFDeEMsaUJBQU8sZUFBZTtBQUFBLFFBQ3hCO0FBRUEsdUJBQWUsYUFBYSxRQUFRLElBQUk7QUFHeEMsZUFBTztBQUFBLFVBQ0wsTUFBTSxlQUFlO0FBQUEsVUFDckIsVUFBVSxlQUFlLFdBQVcsZUFBZSxTQUFTLFFBQVEsTUFBTSxFQUFFLElBQUk7QUFBQSxVQUNoRixNQUFNLGVBQWU7QUFBQSxVQUNyQixRQUFRLGVBQWUsU0FBUyxlQUFlLE9BQU8sUUFBUSxPQUFPLEVBQUUsSUFBSTtBQUFBLFVBQzNFLE1BQU0sZUFBZSxPQUFPLGVBQWUsS0FBSyxRQUFRLE1BQU0sRUFBRSxJQUFJO0FBQUEsVUFDcEUsVUFBVSxlQUFlO0FBQUEsVUFDekIsTUFBTSxlQUFlO0FBQUEsVUFDckIsVUFBVyxlQUFlLFNBQVMsT0FBTyxDQUFDLE1BQU0sTUFDL0MsZUFBZSxXQUNmLE1BQU0sZUFBZTtBQUFBLFFBQ3pCO0FBQUEsTUFDRjtBQUVBLGtCQUFZLFdBQVcsT0FBTyxTQUFTLElBQUk7QUFRM0MsYUFBTyxTQUFTLGdCQUFnQixZQUFZO0FBQzFDLGNBQU0sU0FBVSxjQUFNLFNBQVMsVUFBVSxJQUFLLFdBQVcsVUFBVSxJQUFJO0FBQ3ZFLGVBQVEsT0FBTyxhQUFhLFVBQVUsWUFDbEMsT0FBTyxTQUFTLFVBQVU7QUFBQSxNQUNoQztBQUFBLElBQ0YsRUFBRztBQUFBO0FBQUE7QUFBQSxJQUdGLFNBQVMsd0JBQXdCO0FBQ2hDLGFBQU8sU0FBUyxrQkFBa0I7QUFDaEMsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLEVBQUc7QUFBQTs7O0FDL0RMLE1BQU8sa0JBQVEsaUJBQVM7QUFBQTtBQUFBLElBR3RCO0FBQUEsTUFDRSxNQUFNLE1BQU1DLFFBQU8sU0FBUyxNQUFNLFFBQVEsUUFBUTtBQUNoRCxjQUFNLFNBQVMsQ0FBQyxPQUFPLE1BQU0sbUJBQW1CQSxNQUFLLENBQUM7QUFFdEQsc0JBQU0sU0FBUyxPQUFPLEtBQUssT0FBTyxLQUFLLGFBQWEsSUFBSSxLQUFLLE9BQU8sRUFBRSxZQUFZLENBQUM7QUFFbkYsc0JBQU0sU0FBUyxJQUFJLEtBQUssT0FBTyxLQUFLLFVBQVUsSUFBSTtBQUVsRCxzQkFBTSxTQUFTLE1BQU0sS0FBSyxPQUFPLEtBQUssWUFBWSxNQUFNO0FBRXhELG1CQUFXLFFBQVEsT0FBTyxLQUFLLFFBQVE7QUFFdkMsaUJBQVMsU0FBUyxPQUFPLEtBQUssSUFBSTtBQUFBLE1BQ3BDO0FBQUEsTUFFQSxLQUFLLE1BQU07QUFDVCxjQUFNQyxTQUFRLFNBQVMsT0FBTyxNQUFNLElBQUksT0FBTyxlQUFlLE9BQU8sV0FBVyxDQUFDO0FBQ2pGLGVBQVFBLFNBQVEsbUJBQW1CQSxPQUFNLENBQUMsQ0FBQyxJQUFJO0FBQUEsTUFDakQ7QUFBQSxNQUVBLE9BQU8sTUFBTTtBQUNYLGFBQUssTUFBTSxNQUFNLElBQUksS0FBSyxJQUFJLElBQUksS0FBUTtBQUFBLE1BQzVDO0FBQUEsSUFDRjtBQUFBO0FBQUE7QUFBQSxJQUtBO0FBQUEsTUFDRSxRQUFRO0FBQUEsTUFBQztBQUFBLE1BQ1QsT0FBTztBQUNMLGVBQU87QUFBQSxNQUNUO0FBQUEsTUFDQSxTQUFTO0FBQUEsTUFBQztBQUFBLElBQ1o7QUFBQTs7O0FDL0JhLFdBQVIsY0FBK0IsS0FBSztBQUl6QyxXQUFPLDhCQUE4QixLQUFLLEdBQUc7QUFBQSxFQUMvQzs7O0FDSmUsV0FBUixZQUE2QixTQUFTLGFBQWE7QUFDeEQsV0FBTyxjQUNILFFBQVEsUUFBUSxVQUFVLEVBQUUsSUFBSSxNQUFNLFlBQVksUUFBUSxRQUFRLEVBQUUsSUFDcEU7QUFBQSxFQUNOOzs7QUNDZSxXQUFSLGNBQStCLFNBQVMsY0FBYztBQUMzRCxRQUFJLFdBQVcsQ0FBQyxjQUFjLFlBQVksR0FBRztBQUMzQyxhQUFPLFlBQVksU0FBUyxZQUFZO0FBQUEsSUFDMUM7QUFDQSxXQUFPO0FBQUEsRUFDVDs7O0FDZkEsTUFBTSxrQkFBa0IsQ0FBQyxVQUFVLGlCQUFpQix1QkFBZSxFQUFFLEdBQUcsTUFBTSxJQUFJO0FBV25FLFdBQVIsWUFBNkIsU0FBUyxTQUFTO0FBRXBELGNBQVUsV0FBVyxDQUFDO0FBQ3RCLFVBQU0sU0FBUyxDQUFDO0FBRWhCLGFBQVMsZUFBZSxRQUFRLFFBQVEsVUFBVTtBQUNoRCxVQUFJLGNBQU0sY0FBYyxNQUFNLEtBQUssY0FBTSxjQUFjLE1BQU0sR0FBRztBQUM5RCxlQUFPLGNBQU0sTUFBTSxLQUFLLEVBQUMsU0FBUSxHQUFHLFFBQVEsTUFBTTtBQUFBLE1BQ3BELFdBQVcsY0FBTSxjQUFjLE1BQU0sR0FBRztBQUN0QyxlQUFPLGNBQU0sTUFBTSxDQUFDLEdBQUcsTUFBTTtBQUFBLE1BQy9CLFdBQVcsY0FBTSxRQUFRLE1BQU0sR0FBRztBQUNoQyxlQUFPLE9BQU8sTUFBTTtBQUFBLE1BQ3RCO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFHQSxhQUFTLG9CQUFvQixHQUFHLEdBQUcsVUFBVTtBQUMzQyxVQUFJLENBQUMsY0FBTSxZQUFZLENBQUMsR0FBRztBQUN6QixlQUFPLGVBQWUsR0FBRyxHQUFHLFFBQVE7QUFBQSxNQUN0QyxXQUFXLENBQUMsY0FBTSxZQUFZLENBQUMsR0FBRztBQUNoQyxlQUFPLGVBQWUsUUFBVyxHQUFHLFFBQVE7QUFBQSxNQUM5QztBQUFBLElBQ0Y7QUFHQSxhQUFTLGlCQUFpQixHQUFHLEdBQUc7QUFDOUIsVUFBSSxDQUFDLGNBQU0sWUFBWSxDQUFDLEdBQUc7QUFDekIsZUFBTyxlQUFlLFFBQVcsQ0FBQztBQUFBLE1BQ3BDO0FBQUEsSUFDRjtBQUdBLGFBQVMsaUJBQWlCLEdBQUcsR0FBRztBQUM5QixVQUFJLENBQUMsY0FBTSxZQUFZLENBQUMsR0FBRztBQUN6QixlQUFPLGVBQWUsUUFBVyxDQUFDO0FBQUEsTUFDcEMsV0FBVyxDQUFDLGNBQU0sWUFBWSxDQUFDLEdBQUc7QUFDaEMsZUFBTyxlQUFlLFFBQVcsQ0FBQztBQUFBLE1BQ3BDO0FBQUEsSUFDRjtBQUdBLGFBQVMsZ0JBQWdCLEdBQUcsR0FBRyxNQUFNO0FBQ25DLFVBQUksUUFBUSxTQUFTO0FBQ25CLGVBQU8sZUFBZSxHQUFHLENBQUM7QUFBQSxNQUM1QixXQUFXLFFBQVEsU0FBUztBQUMxQixlQUFPLGVBQWUsUUFBVyxDQUFDO0FBQUEsTUFDcEM7QUFBQSxJQUNGO0FBRUEsVUFBTSxXQUFXO0FBQUEsTUFDZixLQUFLO0FBQUEsTUFDTCxRQUFRO0FBQUEsTUFDUixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxrQkFBa0I7QUFBQSxNQUNsQixtQkFBbUI7QUFBQSxNQUNuQixrQkFBa0I7QUFBQSxNQUNsQixTQUFTO0FBQUEsTUFDVCxnQkFBZ0I7QUFBQSxNQUNoQixpQkFBaUI7QUFBQSxNQUNqQixlQUFlO0FBQUEsTUFDZixTQUFTO0FBQUEsTUFDVCxjQUFjO0FBQUEsTUFDZCxnQkFBZ0I7QUFBQSxNQUNoQixnQkFBZ0I7QUFBQSxNQUNoQixrQkFBa0I7QUFBQSxNQUNsQixvQkFBb0I7QUFBQSxNQUNwQixZQUFZO0FBQUEsTUFDWixrQkFBa0I7QUFBQSxNQUNsQixlQUFlO0FBQUEsTUFDZixnQkFBZ0I7QUFBQSxNQUNoQixXQUFXO0FBQUEsTUFDWCxXQUFXO0FBQUEsTUFDWCxZQUFZO0FBQUEsTUFDWixhQUFhO0FBQUEsTUFDYixZQUFZO0FBQUEsTUFDWixrQkFBa0I7QUFBQSxNQUNsQixnQkFBZ0I7QUFBQSxNQUNoQixTQUFTLENBQUMsR0FBRyxNQUFNLG9CQUFvQixnQkFBZ0IsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsSUFBSTtBQUFBLElBQ3JGO0FBRUEsa0JBQU0sUUFBUSxPQUFPLEtBQUssT0FBTyxPQUFPLENBQUMsR0FBRyxTQUFTLE9BQU8sQ0FBQyxHQUFHLFNBQVMsbUJBQW1CLE1BQU07QUFDaEcsWUFBTUMsU0FBUSxTQUFTLElBQUksS0FBSztBQUNoQyxZQUFNLGNBQWNBLE9BQU0sUUFBUSxJQUFJLEdBQUcsUUFBUSxJQUFJLEdBQUcsSUFBSTtBQUM1RCxNQUFDLGNBQU0sWUFBWSxXQUFXLEtBQUtBLFdBQVUsb0JBQXFCLE9BQU8sSUFBSSxJQUFJO0FBQUEsSUFDbkYsQ0FBQztBQUVELFdBQU87QUFBQSxFQUNUOzs7QUNoR0EsTUFBTyx3QkFBUSxDQUFDLFdBQVc7QUFDekIsVUFBTSxZQUFZLFlBQVksQ0FBQyxHQUFHLE1BQU07QUFFeEMsUUFBSSxFQUFDLE1BQU0sZUFBZSxnQkFBZ0IsZ0JBQWdCLFNBQVMsS0FBSSxJQUFJO0FBRTNFLGNBQVUsVUFBVSxVQUFVLHFCQUFhLEtBQUssT0FBTztBQUV2RCxjQUFVLE1BQU0sU0FBUyxjQUFjLFVBQVUsU0FBUyxVQUFVLEdBQUcsR0FBRyxPQUFPLFFBQVEsT0FBTyxnQkFBZ0I7QUFHaEgsUUFBSSxNQUFNO0FBQ1IsY0FBUTtBQUFBLFFBQUk7QUFBQSxRQUFpQixXQUMzQixNQUFNLEtBQUssWUFBWSxNQUFNLE9BQU8sS0FBSyxXQUFXLFNBQVMsbUJBQW1CLEtBQUssUUFBUSxDQUFDLElBQUksR0FBRztBQUFBLE1BQ3ZHO0FBQUEsSUFDRjtBQUVBLFFBQUk7QUFFSixRQUFJLGNBQU0sV0FBVyxJQUFJLEdBQUc7QUFDMUIsVUFBSSxpQkFBUyx5QkFBeUIsaUJBQVMsZ0NBQWdDO0FBQzdFLGdCQUFRLGVBQWUsTUFBUztBQUFBLE1BQ2xDLFlBQVksY0FBYyxRQUFRLGVBQWUsT0FBTyxPQUFPO0FBRTdELGNBQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLGNBQWMsWUFBWSxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUFDLFdBQVNBLE9BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxPQUFPLElBQUksQ0FBQztBQUM3RyxnQkFBUSxlQUFlLENBQUMsUUFBUSx1QkFBdUIsR0FBRyxNQUFNLEVBQUUsS0FBSyxJQUFJLENBQUM7QUFBQSxNQUM5RTtBQUFBLElBQ0Y7QUFNQSxRQUFJLGlCQUFTLHVCQUF1QjtBQUNsQyx1QkFBaUIsY0FBTSxXQUFXLGFBQWEsTUFBTSxnQkFBZ0IsY0FBYyxTQUFTO0FBRTVGLFVBQUksaUJBQWtCLGtCQUFrQixTQUFTLHdCQUFnQixVQUFVLEdBQUcsR0FBSTtBQUVoRixjQUFNLFlBQVksa0JBQWtCLGtCQUFrQixnQkFBUSxLQUFLLGNBQWM7QUFFakYsWUFBSSxXQUFXO0FBQ2Isa0JBQVEsSUFBSSxnQkFBZ0IsU0FBUztBQUFBLFFBQ3ZDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsRUFDVDs7O0FDNUNBLE1BQU0sd0JBQXdCLE9BQU8sbUJBQW1CO0FBRXhELE1BQU8sY0FBUSx5QkFBeUIsU0FBVSxRQUFRO0FBQ3hELFdBQU8sSUFBSSxRQUFRLFNBQVMsbUJBQW1CLFNBQVMsUUFBUTtBQUM5RCxZQUFNLFVBQVUsc0JBQWMsTUFBTTtBQUNwQyxVQUFJLGNBQWMsUUFBUTtBQUMxQixZQUFNLGlCQUFpQixxQkFBYSxLQUFLLFFBQVEsT0FBTyxFQUFFLFVBQVU7QUFDcEUsVUFBSSxFQUFDLGNBQWMsa0JBQWtCLG1CQUFrQixJQUFJO0FBQzNELFVBQUk7QUFDSixVQUFJLGlCQUFpQjtBQUNyQixVQUFJLGFBQWE7QUFFakIsZUFBUyxPQUFPO0FBQ2QsdUJBQWUsWUFBWTtBQUMzQix5QkFBaUIsY0FBYztBQUUvQixnQkFBUSxlQUFlLFFBQVEsWUFBWSxZQUFZLFVBQVU7QUFFakUsZ0JBQVEsVUFBVSxRQUFRLE9BQU8sb0JBQW9CLFNBQVMsVUFBVTtBQUFBLE1BQzFFO0FBRUEsVUFBSSxVQUFVLElBQUksZUFBZTtBQUVqQyxjQUFRLEtBQUssUUFBUSxPQUFPLFlBQVksR0FBRyxRQUFRLEtBQUssSUFBSTtBQUc1RCxjQUFRLFVBQVUsUUFBUTtBQUUxQixlQUFTLFlBQVk7QUFDbkIsWUFBSSxDQUFDLFNBQVM7QUFDWjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLGtCQUFrQixxQkFBYTtBQUFBLFVBQ25DLDJCQUEyQixXQUFXLFFBQVEsc0JBQXNCO0FBQUEsUUFDdEU7QUFDQSxjQUFNLGVBQWUsQ0FBQyxnQkFBZ0IsaUJBQWlCLFVBQVUsaUJBQWlCLFNBQ2hGLFFBQVEsZUFBZSxRQUFRO0FBQ2pDLGNBQU0sV0FBVztBQUFBLFVBQ2YsTUFBTTtBQUFBLFVBQ04sUUFBUSxRQUFRO0FBQUEsVUFDaEIsWUFBWSxRQUFRO0FBQUEsVUFDcEIsU0FBUztBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUVBLGVBQU8sU0FBUyxTQUFTQyxRQUFPO0FBQzlCLGtCQUFRQSxNQUFLO0FBQ2IsZUFBSztBQUFBLFFBQ1AsR0FBRyxTQUFTLFFBQVEsS0FBSztBQUN2QixpQkFBTyxHQUFHO0FBQ1YsZUFBSztBQUFBLFFBQ1AsR0FBRyxRQUFRO0FBR1gsa0JBQVU7QUFBQSxNQUNaO0FBRUEsVUFBSSxlQUFlLFNBQVM7QUFFMUIsZ0JBQVEsWUFBWTtBQUFBLE1BQ3RCLE9BQU87QUFFTCxnQkFBUSxxQkFBcUIsU0FBUyxhQUFhO0FBQ2pELGNBQUksQ0FBQyxXQUFXLFFBQVEsZUFBZSxHQUFHO0FBQ3hDO0FBQUEsVUFDRjtBQU1BLGNBQUksUUFBUSxXQUFXLEtBQUssRUFBRSxRQUFRLGVBQWUsUUFBUSxZQUFZLFFBQVEsT0FBTyxNQUFNLElBQUk7QUFDaEc7QUFBQSxVQUNGO0FBR0EscUJBQVcsU0FBUztBQUFBLFFBQ3RCO0FBQUEsTUFDRjtBQUdBLGNBQVEsVUFBVSxTQUFTLGNBQWM7QUFDdkMsWUFBSSxDQUFDLFNBQVM7QUFDWjtBQUFBLFFBQ0Y7QUFFQSxlQUFPLElBQUksbUJBQVcsbUJBQW1CLG1CQUFXLGNBQWMsUUFBUSxPQUFPLENBQUM7QUFHbEYsa0JBQVU7QUFBQSxNQUNaO0FBR0EsY0FBUSxVQUFVLFNBQVMsY0FBYztBQUd2QyxlQUFPLElBQUksbUJBQVcsaUJBQWlCLG1CQUFXLGFBQWEsUUFBUSxPQUFPLENBQUM7QUFHL0Usa0JBQVU7QUFBQSxNQUNaO0FBR0EsY0FBUSxZQUFZLFNBQVMsZ0JBQWdCO0FBQzNDLFlBQUksc0JBQXNCLFFBQVEsVUFBVSxnQkFBZ0IsUUFBUSxVQUFVLGdCQUFnQjtBQUM5RixjQUFNQyxnQkFBZSxRQUFRLGdCQUFnQjtBQUM3QyxZQUFJLFFBQVEscUJBQXFCO0FBQy9CLGdDQUFzQixRQUFRO0FBQUEsUUFDaEM7QUFDQSxlQUFPLElBQUk7QUFBQSxVQUNUO0FBQUEsVUFDQUEsY0FBYSxzQkFBc0IsbUJBQVcsWUFBWSxtQkFBVztBQUFBLFVBQ3JFO0FBQUEsVUFDQTtBQUFBLFFBQU8sQ0FBQztBQUdWLGtCQUFVO0FBQUEsTUFDWjtBQUdBLHNCQUFnQixVQUFhLGVBQWUsZUFBZSxJQUFJO0FBRy9ELFVBQUksc0JBQXNCLFNBQVM7QUFDakMsc0JBQU0sUUFBUSxlQUFlLE9BQU8sR0FBRyxTQUFTLGlCQUFpQixLQUFLLEtBQUs7QUFDekUsa0JBQVEsaUJBQWlCLEtBQUssR0FBRztBQUFBLFFBQ25DLENBQUM7QUFBQSxNQUNIO0FBR0EsVUFBSSxDQUFDLGNBQU0sWUFBWSxRQUFRLGVBQWUsR0FBRztBQUMvQyxnQkFBUSxrQkFBa0IsQ0FBQyxDQUFDLFFBQVE7QUFBQSxNQUN0QztBQUdBLFVBQUksZ0JBQWdCLGlCQUFpQixRQUFRO0FBQzNDLGdCQUFRLGVBQWUsUUFBUTtBQUFBLE1BQ2pDO0FBR0EsVUFBSSxvQkFBb0I7QUFDdEIsUUFBQyxDQUFDLG1CQUFtQixhQUFhLElBQUkscUJBQXFCLG9CQUFvQixJQUFJO0FBQ25GLGdCQUFRLGlCQUFpQixZQUFZLGlCQUFpQjtBQUFBLE1BQ3hEO0FBR0EsVUFBSSxvQkFBb0IsUUFBUSxRQUFRO0FBQ3RDLFFBQUMsQ0FBQyxpQkFBaUIsV0FBVyxJQUFJLHFCQUFxQixnQkFBZ0I7QUFFdkUsZ0JBQVEsT0FBTyxpQkFBaUIsWUFBWSxlQUFlO0FBRTNELGdCQUFRLE9BQU8saUJBQWlCLFdBQVcsV0FBVztBQUFBLE1BQ3hEO0FBRUEsVUFBSSxRQUFRLGVBQWUsUUFBUSxRQUFRO0FBR3pDLHFCQUFhLFlBQVU7QUFDckIsY0FBSSxDQUFDLFNBQVM7QUFDWjtBQUFBLFVBQ0Y7QUFDQSxpQkFBTyxDQUFDLFVBQVUsT0FBTyxPQUFPLElBQUksc0JBQWMsTUFBTSxRQUFRLE9BQU8sSUFBSSxNQUFNO0FBQ2pGLGtCQUFRLE1BQU07QUFDZCxvQkFBVTtBQUFBLFFBQ1o7QUFFQSxnQkFBUSxlQUFlLFFBQVEsWUFBWSxVQUFVLFVBQVU7QUFDL0QsWUFBSSxRQUFRLFFBQVE7QUFDbEIsa0JBQVEsT0FBTyxVQUFVLFdBQVcsSUFBSSxRQUFRLE9BQU8saUJBQWlCLFNBQVMsVUFBVTtBQUFBLFFBQzdGO0FBQUEsTUFDRjtBQUVBLFlBQU0sV0FBVyxjQUFjLFFBQVEsR0FBRztBQUUxQyxVQUFJLFlBQVksaUJBQVMsVUFBVSxRQUFRLFFBQVEsTUFBTSxJQUFJO0FBQzNELGVBQU8sSUFBSSxtQkFBVywwQkFBMEIsV0FBVyxLQUFLLG1CQUFXLGlCQUFpQixNQUFNLENBQUM7QUFDbkc7QUFBQSxNQUNGO0FBSUEsY0FBUSxLQUFLLGVBQWUsSUFBSTtBQUFBLElBQ2xDLENBQUM7QUFBQSxFQUNIOzs7QUNoTUEsTUFBTSxpQkFBaUIsQ0FBQyxTQUFTLFlBQVk7QUFDM0MsVUFBTSxFQUFDLFFBQUFDLFFBQU0sSUFBSyxVQUFVLFVBQVUsUUFBUSxPQUFPLE9BQU8sSUFBSSxDQUFDO0FBRWpFLFFBQUksV0FBV0EsU0FBUTtBQUNyQixVQUFJLGFBQWEsSUFBSSxnQkFBZ0I7QUFFckMsVUFBSTtBQUVKLFlBQU0sVUFBVSxTQUFVLFFBQVE7QUFDaEMsWUFBSSxDQUFDLFNBQVM7QUFDWixvQkFBVTtBQUNWLHNCQUFZO0FBQ1osZ0JBQU0sTUFBTSxrQkFBa0IsUUFBUSxTQUFTLEtBQUs7QUFDcEQscUJBQVcsTUFBTSxlQUFlLHFCQUFhLE1BQU0sSUFBSSxzQkFBYyxlQUFlLFFBQVEsSUFBSSxVQUFVLEdBQUcsQ0FBQztBQUFBLFFBQ2hIO0FBQUEsTUFDRjtBQUVBLFVBQUksUUFBUSxXQUFXLFdBQVcsTUFBTTtBQUN0QyxnQkFBUTtBQUNSLGdCQUFRLElBQUksbUJBQVcsV0FBVyxPQUFPLG1CQUFtQixtQkFBVyxTQUFTLENBQUM7QUFBQSxNQUNuRixHQUFHLE9BQU87QUFFVixZQUFNLGNBQWMsTUFBTTtBQUN4QixZQUFJLFNBQVM7QUFDWCxtQkFBUyxhQUFhLEtBQUs7QUFDM0Isa0JBQVE7QUFDUixrQkFBUSxRQUFRLENBQUFDLFlBQVU7QUFDeEIsWUFBQUEsUUFBTyxjQUFjQSxRQUFPLFlBQVksT0FBTyxJQUFJQSxRQUFPLG9CQUFvQixTQUFTLE9BQU87QUFBQSxVQUNoRyxDQUFDO0FBQ0Qsb0JBQVU7QUFBQSxRQUNaO0FBQUEsTUFDRjtBQUVBLGNBQVEsUUFBUSxDQUFDQSxZQUFXQSxRQUFPLGlCQUFpQixTQUFTLE9BQU8sQ0FBQztBQUVyRSxZQUFNLEVBQUMsT0FBTSxJQUFJO0FBRWpCLGFBQU8sY0FBYyxNQUFNLGNBQU0sS0FBSyxXQUFXO0FBRWpELGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLE1BQU8seUJBQVE7OztBQzlDUixNQUFNLGNBQWMsV0FBVyxPQUFPLFdBQVc7QUFDdEQsUUFBSSxNQUFNLE1BQU07QUFFaEIsUUFBSSxDQUFDLGFBQWEsTUFBTSxXQUFXO0FBQ2pDLFlBQU07QUFDTjtBQUFBLElBQ0Y7QUFFQSxRQUFJLE1BQU07QUFDVixRQUFJO0FBRUosV0FBTyxNQUFNLEtBQUs7QUFDaEIsWUFBTSxNQUFNO0FBQ1osWUFBTSxNQUFNLE1BQU0sS0FBSyxHQUFHO0FBQzFCLFlBQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUVPLE1BQU0sWUFBWSxpQkFBaUIsVUFBVSxXQUFXO0FBQzdELHFCQUFpQixTQUFTLFdBQVcsUUFBUSxHQUFHO0FBQzlDLGFBQU8sWUFBWSxPQUFPLFNBQVM7QUFBQSxJQUNyQztBQUFBLEVBQ0Y7QUFFQSxNQUFNLGFBQWEsaUJBQWlCLFFBQVE7QUFDMUMsUUFBSSxPQUFPLE9BQU8sYUFBYSxHQUFHO0FBQ2hDLGFBQU87QUFDUDtBQUFBLElBQ0Y7QUFFQSxVQUFNLFNBQVMsT0FBTyxVQUFVO0FBQ2hDLFFBQUk7QUFDRixpQkFBUztBQUNQLGNBQU0sRUFBQyxNQUFNLE9BQUFDLE9BQUssSUFBSSxNQUFNLE9BQU8sS0FBSztBQUN4QyxZQUFJLE1BQU07QUFDUjtBQUFBLFFBQ0Y7QUFDQSxjQUFNQTtBQUFBLE1BQ1I7QUFBQSxJQUNGLFVBQUU7QUFDQSxZQUFNLE9BQU8sT0FBTztBQUFBLElBQ3RCO0FBQUEsRUFDRjtBQUVPLE1BQU0sY0FBYyxDQUFDLFFBQVEsV0FBVyxZQUFZLGFBQWE7QUFDdEUsVUFBTSxXQUFXLFVBQVUsUUFBUSxTQUFTO0FBRTVDLFFBQUksUUFBUTtBQUNaLFFBQUk7QUFDSixRQUFJLFlBQVksQ0FBQyxNQUFNO0FBQ3JCLFVBQUksQ0FBQyxNQUFNO0FBQ1QsZUFBTztBQUNQLG9CQUFZLFNBQVMsQ0FBQztBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUVBLFdBQU8sSUFBSSxlQUFlO0FBQUEsTUFDeEIsTUFBTSxLQUFLLFlBQVk7QUFDckIsWUFBSTtBQUNGLGdCQUFNLEVBQUMsTUFBQUMsT0FBTSxPQUFBRCxPQUFLLElBQUksTUFBTSxTQUFTLEtBQUs7QUFFMUMsY0FBSUMsT0FBTTtBQUNULHNCQUFVO0FBQ1QsdUJBQVcsTUFBTTtBQUNqQjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLE1BQU1ELE9BQU07QUFDaEIsY0FBSSxZQUFZO0FBQ2QsZ0JBQUksY0FBYyxTQUFTO0FBQzNCLHVCQUFXLFdBQVc7QUFBQSxVQUN4QjtBQUNBLHFCQUFXLFFBQVEsSUFBSSxXQUFXQSxNQUFLLENBQUM7QUFBQSxRQUMxQyxTQUFTLEtBQUs7QUFDWixvQkFBVSxHQUFHO0FBQ2IsZ0JBQU07QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUFBLE1BQ0EsT0FBTyxRQUFRO0FBQ2Isa0JBQVUsTUFBTTtBQUNoQixlQUFPLFNBQVMsT0FBTztBQUFBLE1BQ3pCO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxlQUFlO0FBQUEsSUFDakIsQ0FBQztBQUFBLEVBQ0g7OztBQzVFQSxNQUFNLG1CQUFtQixPQUFPLFVBQVUsY0FBYyxPQUFPLFlBQVksY0FBYyxPQUFPLGFBQWE7QUFDN0csTUFBTSw0QkFBNEIsb0JBQW9CLE9BQU8sbUJBQW1CO0FBR2hGLE1BQU0sYUFBYSxxQkFBcUIsT0FBTyxnQkFBZ0IsY0FDMUQsQ0FBQyxZQUFZLENBQUMsUUFBUSxRQUFRLE9BQU8sR0FBRyxHQUFHLElBQUksWUFBWSxDQUFDLElBQzdELE9BQU8sUUFBUSxJQUFJLFdBQVcsTUFBTSxJQUFJLFNBQVMsR0FBRyxFQUFFLFlBQVksQ0FBQztBQUd2RSxNQUFNLE9BQU8sQ0FBQyxPQUFPLFNBQVM7QUFDNUIsUUFBSTtBQUNGLGFBQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJO0FBQUEsSUFDckIsU0FBUyxHQUFHO0FBQ1YsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsTUFBTSx3QkFBd0IsNkJBQTZCLEtBQUssTUFBTTtBQUNwRSxRQUFJLGlCQUFpQjtBQUVyQixVQUFNLGlCQUFpQixJQUFJLFFBQVEsaUJBQVMsUUFBUTtBQUFBLE1BQ2xELE1BQU0sSUFBSSxlQUFlO0FBQUEsTUFDekIsUUFBUTtBQUFBLE1BQ1IsSUFBSSxTQUFTO0FBQ1gseUJBQWlCO0FBQ2pCLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRixDQUFDLEVBQUUsUUFBUSxJQUFJLGNBQWM7QUFFN0IsV0FBTyxrQkFBa0IsQ0FBQztBQUFBLEVBQzVCLENBQUM7QUFFRCxNQUFNLHFCQUFxQixLQUFLO0FBRWhDLE1BQU0seUJBQXlCLDZCQUM3QixLQUFLLE1BQU0sY0FBTSxpQkFBaUIsSUFBSSxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUM7QUFHMUQsTUFBTSxZQUFZO0FBQUEsSUFDaEIsUUFBUSwyQkFBMkIsQ0FBQyxRQUFRLElBQUk7QUFBQSxFQUNsRDtBQUVBLHVCQUFzQixDQUFDLFFBQVE7QUFDN0IsS0FBQyxRQUFRLGVBQWUsUUFBUSxZQUFZLFFBQVEsRUFBRSxRQUFRLFVBQVE7QUFDcEUsT0FBQyxVQUFVLElBQUksTUFBTSxVQUFVLElBQUksSUFBSSxjQUFNLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDRSxTQUFRQSxLQUFJLElBQUksRUFBRSxJQUN0RixDQUFDLEdBQUcsV0FBVztBQUNiLGNBQU0sSUFBSSxtQkFBVyxrQkFBa0IsSUFBSSxzQkFBc0IsbUJBQVcsaUJBQWlCLE1BQU07QUFBQSxNQUNyRztBQUFBLElBQ0osQ0FBQztBQUFBLEVBQ0gsR0FBRyxJQUFJLFVBQVE7QUFFZixNQUFNLGdCQUFnQixPQUFPLFNBQVM7QUFDcEMsUUFBSSxRQUFRLE1BQU07QUFDaEIsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFHLGNBQU0sT0FBTyxJQUFJLEdBQUc7QUFDckIsYUFBTyxLQUFLO0FBQUEsSUFDZDtBQUVBLFFBQUcsY0FBTSxvQkFBb0IsSUFBSSxHQUFHO0FBQ2xDLFlBQU0sV0FBVyxJQUFJLFFBQVEsaUJBQVMsUUFBUTtBQUFBLFFBQzVDLFFBQVE7QUFBQSxRQUNSO0FBQUEsTUFDRixDQUFDO0FBQ0QsY0FBUSxNQUFNLFNBQVMsWUFBWSxHQUFHO0FBQUEsSUFDeEM7QUFFQSxRQUFHLGNBQU0sa0JBQWtCLElBQUksS0FBSyxjQUFNLGNBQWMsSUFBSSxHQUFHO0FBQzdELGFBQU8sS0FBSztBQUFBLElBQ2Q7QUFFQSxRQUFHLGNBQU0sa0JBQWtCLElBQUksR0FBRztBQUNoQyxhQUFPLE9BQU87QUFBQSxJQUNoQjtBQUVBLFFBQUcsY0FBTSxTQUFTLElBQUksR0FBRztBQUN2QixjQUFRLE1BQU0sV0FBVyxJQUFJLEdBQUc7QUFBQSxJQUNsQztBQUFBLEVBQ0Y7QUFFQSxNQUFNLG9CQUFvQixPQUFPLFNBQVMsU0FBUztBQUNqRCxVQUFNQyxVQUFTLGNBQU0sZUFBZSxRQUFRLGlCQUFpQixDQUFDO0FBRTlELFdBQU9BLFdBQVUsT0FBTyxjQUFjLElBQUksSUFBSUE7QUFBQSxFQUNoRDtBQUVBLE1BQU8sZ0JBQVEscUJBQXFCLE9BQU8sV0FBVztBQUNwRCxRQUFJO0FBQUEsTUFDRjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0Esa0JBQWtCO0FBQUEsTUFDbEI7QUFBQSxJQUNGLElBQUksc0JBQWMsTUFBTTtBQUV4QixtQkFBZSxnQkFBZ0IsZUFBZSxJQUFJLFlBQVksSUFBSTtBQUVsRSxRQUFJLGlCQUFpQix1QkFBZSxDQUFDLFFBQVEsZUFBZSxZQUFZLGNBQWMsQ0FBQyxHQUFHLE9BQU87QUFFakcsUUFBSTtBQUVKLFVBQU0sY0FBYyxrQkFBa0IsZUFBZSxnQkFBZ0IsTUFBTTtBQUN2RSxxQkFBZSxZQUFZO0FBQUEsSUFDL0I7QUFFQSxRQUFJO0FBRUosUUFBSTtBQUNGLFVBQ0Usb0JBQW9CLHlCQUF5QixXQUFXLFNBQVMsV0FBVyxXQUMzRSx1QkFBdUIsTUFBTSxrQkFBa0IsU0FBUyxJQUFJLE9BQU8sR0FDcEU7QUFDQSxZQUFJLFdBQVcsSUFBSSxRQUFRLEtBQUs7QUFBQSxVQUM5QixRQUFRO0FBQUEsVUFDUixNQUFNO0FBQUEsVUFDTixRQUFRO0FBQUEsUUFDVixDQUFDO0FBRUQsWUFBSTtBQUVKLFlBQUksY0FBTSxXQUFXLElBQUksTUFBTSxvQkFBb0IsU0FBUyxRQUFRLElBQUksY0FBYyxJQUFJO0FBQ3hGLGtCQUFRLGVBQWUsaUJBQWlCO0FBQUEsUUFDMUM7QUFFQSxZQUFJLFNBQVMsTUFBTTtBQUNqQixnQkFBTSxDQUFDLFlBQVlDLE1BQUssSUFBSTtBQUFBLFlBQzFCO0FBQUEsWUFDQSxxQkFBcUIsZUFBZSxnQkFBZ0IsQ0FBQztBQUFBLFVBQ3ZEO0FBRUEsaUJBQU8sWUFBWSxTQUFTLE1BQU0sb0JBQW9CLFlBQVlBLE1BQUs7QUFBQSxRQUN6RTtBQUFBLE1BQ0Y7QUFFQSxVQUFJLENBQUMsY0FBTSxTQUFTLGVBQWUsR0FBRztBQUNwQywwQkFBa0Isa0JBQWtCLFlBQVk7QUFBQSxNQUNsRDtBQUlBLFlBQU0seUJBQXlCLGlCQUFpQixRQUFRO0FBQ3hELGdCQUFVLElBQUksUUFBUSxLQUFLO0FBQUEsUUFDekIsR0FBRztBQUFBLFFBQ0gsUUFBUTtBQUFBLFFBQ1IsUUFBUSxPQUFPLFlBQVk7QUFBQSxRQUMzQixTQUFTLFFBQVEsVUFBVSxFQUFFLE9BQU87QUFBQSxRQUNwQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixhQUFhLHlCQUF5QixrQkFBa0I7QUFBQSxNQUMxRCxDQUFDO0FBRUQsVUFBSSxXQUFXLE1BQU0sTUFBTSxPQUFPO0FBRWxDLFlBQU0sbUJBQW1CLDJCQUEyQixpQkFBaUIsWUFBWSxpQkFBaUI7QUFFbEcsVUFBSSwyQkFBMkIsc0JBQXVCLG9CQUFvQixjQUFlO0FBQ3ZGLGNBQU0sVUFBVSxDQUFDO0FBRWpCLFNBQUMsVUFBVSxjQUFjLFNBQVMsRUFBRSxRQUFRLFVBQVE7QUFDbEQsa0JBQVEsSUFBSSxJQUFJLFNBQVMsSUFBSTtBQUFBLFFBQy9CLENBQUM7QUFFRCxjQUFNLHdCQUF3QixjQUFNLGVBQWUsU0FBUyxRQUFRLElBQUksZ0JBQWdCLENBQUM7QUFFekYsY0FBTSxDQUFDLFlBQVlBLE1BQUssSUFBSSxzQkFBc0I7QUFBQSxVQUNoRDtBQUFBLFVBQ0EscUJBQXFCLGVBQWUsa0JBQWtCLEdBQUcsSUFBSTtBQUFBLFFBQy9ELEtBQUssQ0FBQztBQUVOLG1CQUFXLElBQUk7QUFBQSxVQUNiLFlBQVksU0FBUyxNQUFNLG9CQUFvQixZQUFZLE1BQU07QUFDL0QsWUFBQUEsVUFBU0EsT0FBTTtBQUNmLDJCQUFlLFlBQVk7QUFBQSxVQUM3QixDQUFDO0FBQUEsVUFDRDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEscUJBQWUsZ0JBQWdCO0FBRS9CLFVBQUksZUFBZSxNQUFNLFVBQVUsY0FBTSxRQUFRLFdBQVcsWUFBWSxLQUFLLE1BQU0sRUFBRSxVQUFVLE1BQU07QUFFckcsT0FBQyxvQkFBb0IsZUFBZSxZQUFZO0FBRWhELGFBQU8sTUFBTSxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDNUMsZUFBTyxTQUFTLFFBQVE7QUFBQSxVQUN0QixNQUFNO0FBQUEsVUFDTixTQUFTLHFCQUFhLEtBQUssU0FBUyxPQUFPO0FBQUEsVUFDM0MsUUFBUSxTQUFTO0FBQUEsVUFDakIsWUFBWSxTQUFTO0FBQUEsVUFDckI7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSCxTQUFTLEtBQUs7QUFDWixxQkFBZSxZQUFZO0FBRTNCLFVBQUksT0FBTyxJQUFJLFNBQVMsZUFBZSxTQUFTLEtBQUssSUFBSSxPQUFPLEdBQUc7QUFDakUsY0FBTSxPQUFPO0FBQUEsVUFDWCxJQUFJLG1CQUFXLGlCQUFpQixtQkFBVyxhQUFhLFFBQVEsT0FBTztBQUFBLFVBQ3ZFO0FBQUEsWUFDRSxPQUFPLElBQUksU0FBUztBQUFBLFVBQ3RCO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxZQUFNLG1CQUFXLEtBQUssS0FBSyxPQUFPLElBQUksTUFBTSxRQUFRLE9BQU87QUFBQSxJQUM3RDtBQUFBLEVBQ0Y7OztBQzVOQSxNQUFNLGdCQUFnQjtBQUFBLElBQ3BCLE1BQU07QUFBQSxJQUNOLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNUO0FBRUEsZ0JBQU0sUUFBUSxlQUFlLENBQUMsSUFBSUMsV0FBVTtBQUMxQyxRQUFJLElBQUk7QUFDTixVQUFJO0FBQ0YsZUFBTyxlQUFlLElBQUksUUFBUSxFQUFDLE9BQUFBLE9BQUssQ0FBQztBQUFBLE1BQzNDLFNBQVMsR0FBRztBQUFBLE1BRVo7QUFDQSxhQUFPLGVBQWUsSUFBSSxlQUFlLEVBQUMsT0FBQUEsT0FBSyxDQUFDO0FBQUEsSUFDbEQ7QUFBQSxFQUNGLENBQUM7QUFFRCxNQUFNLGVBQWUsQ0FBQyxXQUFXLEtBQUssTUFBTTtBQUU1QyxNQUFNLG1CQUFtQixDQUFDLFlBQVksY0FBTSxXQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVEsWUFBWTtBQUVuRyxNQUFPLG1CQUFRO0FBQUEsSUFDYixZQUFZLENBQUMsYUFBYTtBQUN4QixpQkFBVyxjQUFNLFFBQVEsUUFBUSxJQUFJLFdBQVcsQ0FBQyxRQUFRO0FBRXpELFlBQU0sRUFBQyxRQUFBQyxRQUFNLElBQUk7QUFDakIsVUFBSTtBQUNKLFVBQUk7QUFFSixZQUFNLGtCQUFrQixDQUFDO0FBRXpCLGVBQVMsSUFBSSxHQUFHLElBQUlBLFNBQVEsS0FBSztBQUMvQix3QkFBZ0IsU0FBUyxDQUFDO0FBQzFCLFlBQUk7QUFFSixrQkFBVTtBQUVWLFlBQUksQ0FBQyxpQkFBaUIsYUFBYSxHQUFHO0FBQ3BDLG9CQUFVLGVBQWUsS0FBSyxPQUFPLGFBQWEsR0FBRyxZQUFZLENBQUM7QUFFbEUsY0FBSSxZQUFZLFFBQVc7QUFDekIsa0JBQU0sSUFBSSxtQkFBVyxvQkFBb0IsRUFBRSxHQUFHO0FBQUEsVUFDaEQ7QUFBQSxRQUNGO0FBRUEsWUFBSSxTQUFTO0FBQ1g7QUFBQSxRQUNGO0FBRUEsd0JBQWdCLE1BQU0sTUFBTSxDQUFDLElBQUk7QUFBQSxNQUNuQztBQUVBLFVBQUksQ0FBQyxTQUFTO0FBRVosY0FBTSxVQUFVLE9BQU8sUUFBUSxlQUFlLEVBQzNDO0FBQUEsVUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sV0FBVyxFQUFFLE9BQ2hDLFVBQVUsUUFBUSx3Q0FBd0M7QUFBQSxRQUM3RDtBQUVGLFlBQUksSUFBSUEsVUFDTCxRQUFRLFNBQVMsSUFBSSxjQUFjLFFBQVEsSUFBSSxZQUFZLEVBQUUsS0FBSyxJQUFJLElBQUksTUFBTSxhQUFhLFFBQVEsQ0FBQyxDQUFDLElBQ3hHO0FBRUYsY0FBTSxJQUFJO0FBQUEsVUFDUiwwREFBMEQ7QUFBQSxVQUMxRDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLFVBQVU7QUFBQSxFQUNaOzs7QUM5REEsV0FBUyw2QkFBNkIsUUFBUTtBQUM1QyxRQUFJLE9BQU8sYUFBYTtBQUN0QixhQUFPLFlBQVksaUJBQWlCO0FBQUEsSUFDdEM7QUFFQSxRQUFJLE9BQU8sVUFBVSxPQUFPLE9BQU8sU0FBUztBQUMxQyxZQUFNLElBQUksc0JBQWMsTUFBTSxNQUFNO0FBQUEsSUFDdEM7QUFBQSxFQUNGO0FBU2UsV0FBUixnQkFBaUMsUUFBUTtBQUM5QyxpQ0FBNkIsTUFBTTtBQUVuQyxXQUFPLFVBQVUscUJBQWEsS0FBSyxPQUFPLE9BQU87QUFHakQsV0FBTyxPQUFPLGNBQWM7QUFBQSxNQUMxQjtBQUFBLE1BQ0EsT0FBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLENBQUMsUUFBUSxPQUFPLE9BQU8sRUFBRSxRQUFRLE9BQU8sTUFBTSxNQUFNLElBQUk7QUFDMUQsYUFBTyxRQUFRLGVBQWUscUNBQXFDLEtBQUs7QUFBQSxJQUMxRTtBQUVBLFVBQU0sVUFBVSxpQkFBUyxXQUFXLE9BQU8sV0FBVyxpQkFBUyxPQUFPO0FBRXRFLFdBQU8sUUFBUSxNQUFNLEVBQUUsS0FBSyxTQUFTLG9CQUFvQixVQUFVO0FBQ2pFLG1DQUE2QixNQUFNO0FBR25DLGVBQVMsT0FBTyxjQUFjO0FBQUEsUUFDNUI7QUFBQSxRQUNBLE9BQU87QUFBQSxRQUNQO0FBQUEsTUFDRjtBQUVBLGVBQVMsVUFBVSxxQkFBYSxLQUFLLFNBQVMsT0FBTztBQUVyRCxhQUFPO0FBQUEsSUFDVCxHQUFHLFNBQVMsbUJBQW1CLFFBQVE7QUFDckMsVUFBSSxDQUFDLFNBQVMsTUFBTSxHQUFHO0FBQ3JCLHFDQUE2QixNQUFNO0FBR25DLFlBQUksVUFBVSxPQUFPLFVBQVU7QUFDN0IsaUJBQU8sU0FBUyxPQUFPLGNBQWM7QUFBQSxZQUNuQztBQUFBLFlBQ0EsT0FBTztBQUFBLFlBQ1AsT0FBTztBQUFBLFVBQ1Q7QUFDQSxpQkFBTyxTQUFTLFVBQVUscUJBQWEsS0FBSyxPQUFPLFNBQVMsT0FBTztBQUFBLFFBQ3JFO0FBQUEsTUFDRjtBQUVBLGFBQU8sUUFBUSxPQUFPLE1BQU07QUFBQSxJQUM5QixDQUFDO0FBQUEsRUFDSDs7O0FDaEZPLE1BQU0sVUFBVTs7O0FDS3ZCLE1BQU0sYUFBYSxDQUFDO0FBR3BCLEdBQUMsVUFBVSxXQUFXLFVBQVUsWUFBWSxVQUFVLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxNQUFNO0FBQ25GLGVBQVcsSUFBSSxJQUFJLFNBQVMsVUFBVSxPQUFPO0FBQzNDLGFBQU8sT0FBTyxVQUFVLFFBQVEsT0FBTyxJQUFJLElBQUksT0FBTyxPQUFPO0FBQUEsSUFDL0Q7QUFBQSxFQUNGLENBQUM7QUFFRCxNQUFNLHFCQUFxQixDQUFDO0FBVzVCLGFBQVcsZUFBZSxTQUFTLGFBQWEsV0FBV0MsVUFBUyxTQUFTO0FBQzNFLGFBQVMsY0FBYyxLQUFLLE1BQU07QUFDaEMsYUFBTyxhQUFhLFVBQVUsNEJBQTZCLE1BQU0sTUFBTyxRQUFRLFVBQVUsT0FBTyxVQUFVO0FBQUEsSUFDN0c7QUFHQSxXQUFPLENBQUNDLFFBQU8sS0FBSyxTQUFTO0FBQzNCLFVBQUksY0FBYyxPQUFPO0FBQ3ZCLGNBQU0sSUFBSTtBQUFBLFVBQ1IsY0FBYyxLQUFLLHVCQUF1QkQsV0FBVSxTQUFTQSxXQUFVLEdBQUc7QUFBQSxVQUMxRSxtQkFBVztBQUFBLFFBQ2I7QUFBQSxNQUNGO0FBRUEsVUFBSUEsWUFBVyxDQUFDLG1CQUFtQixHQUFHLEdBQUc7QUFDdkMsMkJBQW1CLEdBQUcsSUFBSTtBQUUxQixnQkFBUTtBQUFBLFVBQ047QUFBQSxZQUNFO0FBQUEsWUFDQSxpQ0FBaUNBLFdBQVU7QUFBQSxVQUM3QztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsYUFBTyxZQUFZLFVBQVVDLFFBQU8sS0FBSyxJQUFJLElBQUk7QUFBQSxJQUNuRDtBQUFBLEVBQ0Y7QUFZQSxXQUFTLGNBQWMsU0FBUyxRQUFRLGNBQWM7QUFDcEQsUUFBSSxPQUFPLFlBQVksVUFBVTtBQUMvQixZQUFNLElBQUksbUJBQVcsNkJBQTZCLG1CQUFXLG9CQUFvQjtBQUFBLElBQ25GO0FBQ0EsVUFBTUMsUUFBTyxPQUFPLEtBQUssT0FBTztBQUNoQyxRQUFJLElBQUlBLE1BQUs7QUFDYixXQUFPLE1BQU0sR0FBRztBQUNkLFlBQU0sTUFBTUEsTUFBSyxDQUFDO0FBQ2xCLFlBQU0sWUFBWSxPQUFPLEdBQUc7QUFDNUIsVUFBSSxXQUFXO0FBQ2IsY0FBTUQsU0FBUSxRQUFRLEdBQUc7QUFDekIsY0FBTSxTQUFTQSxXQUFVLFVBQWEsVUFBVUEsUUFBTyxLQUFLLE9BQU87QUFDbkUsWUFBSSxXQUFXLE1BQU07QUFDbkIsZ0JBQU0sSUFBSSxtQkFBVyxZQUFZLE1BQU0sY0FBYyxRQUFRLG1CQUFXLG9CQUFvQjtBQUFBLFFBQzlGO0FBQ0E7QUFBQSxNQUNGO0FBQ0EsVUFBSSxpQkFBaUIsTUFBTTtBQUN6QixjQUFNLElBQUksbUJBQVcsb0JBQW9CLEtBQUssbUJBQVcsY0FBYztBQUFBLE1BQ3pFO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxNQUFPLG9CQUFRO0FBQUEsSUFDYjtBQUFBLElBQ0E7QUFBQSxFQUNGOzs7QUMvRUEsTUFBTUUsY0FBYSxrQkFBVTtBQVM3QixNQUFNLFFBQU4sTUFBWTtBQUFBLElBQ1YsWUFBWSxnQkFBZ0I7QUFDMUIsV0FBSyxXQUFXO0FBQ2hCLFdBQUssZUFBZTtBQUFBLFFBQ2xCLFNBQVMsSUFBSSwyQkFBbUI7QUFBQSxRQUNoQyxVQUFVLElBQUksMkJBQW1CO0FBQUEsTUFDbkM7QUFBQSxJQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBVUEsTUFBTSxRQUFRLGFBQWEsUUFBUTtBQUNqQyxVQUFJO0FBQ0YsZUFBTyxNQUFNLEtBQUssU0FBUyxhQUFhLE1BQU07QUFBQSxNQUNoRCxTQUFTLEtBQUs7QUFDWixZQUFJLGVBQWUsT0FBTztBQUN4QixjQUFJO0FBRUosZ0JBQU0sb0JBQW9CLE1BQU0sa0JBQWtCLFFBQVEsQ0FBQyxDQUFDLElBQUssUUFBUSxJQUFJLE1BQU07QUFHbkYsZ0JBQU0sUUFBUSxNQUFNLFFBQVEsTUFBTSxNQUFNLFFBQVEsU0FBUyxFQUFFLElBQUk7QUFDL0QsY0FBSTtBQUNGLGdCQUFJLENBQUMsSUFBSSxPQUFPO0FBQ2Qsa0JBQUksUUFBUTtBQUFBLFlBRWQsV0FBVyxTQUFTLENBQUMsT0FBTyxJQUFJLEtBQUssRUFBRSxTQUFTLE1BQU0sUUFBUSxhQUFhLEVBQUUsQ0FBQyxHQUFHO0FBQy9FLGtCQUFJLFNBQVMsT0FBTztBQUFBLFlBQ3RCO0FBQUEsVUFDRixTQUFTLEdBQUc7QUFBQSxVQUVaO0FBQUEsUUFDRjtBQUVBLGNBQU07QUFBQSxNQUNSO0FBQUEsSUFDRjtBQUFBLElBRUEsU0FBUyxhQUFhLFFBQVE7QUFHNUIsVUFBSSxPQUFPLGdCQUFnQixVQUFVO0FBQ25DLGlCQUFTLFVBQVUsQ0FBQztBQUNwQixlQUFPLE1BQU07QUFBQSxNQUNmLE9BQU87QUFDTCxpQkFBUyxlQUFlLENBQUM7QUFBQSxNQUMzQjtBQUVBLGVBQVMsWUFBWSxLQUFLLFVBQVUsTUFBTTtBQUUxQyxZQUFNLEVBQUMsY0FBQUMsZUFBYyxrQkFBa0IsUUFBTyxJQUFJO0FBRWxELFVBQUlBLGtCQUFpQixRQUFXO0FBQzlCLDBCQUFVLGNBQWNBLGVBQWM7QUFBQSxVQUNwQyxtQkFBbUJELFlBQVcsYUFBYUEsWUFBVyxPQUFPO0FBQUEsVUFDN0QsbUJBQW1CQSxZQUFXLGFBQWFBLFlBQVcsT0FBTztBQUFBLFVBQzdELHFCQUFxQkEsWUFBVyxhQUFhQSxZQUFXLE9BQU87QUFBQSxRQUNqRSxHQUFHLEtBQUs7QUFBQSxNQUNWO0FBRUEsVUFBSSxvQkFBb0IsTUFBTTtBQUM1QixZQUFJLGNBQU0sV0FBVyxnQkFBZ0IsR0FBRztBQUN0QyxpQkFBTyxtQkFBbUI7QUFBQSxZQUN4QixXQUFXO0FBQUEsVUFDYjtBQUFBLFFBQ0YsT0FBTztBQUNMLDRCQUFVLGNBQWMsa0JBQWtCO0FBQUEsWUFDeEMsUUFBUUEsWUFBVztBQUFBLFlBQ25CLFdBQVdBLFlBQVc7QUFBQSxVQUN4QixHQUFHLElBQUk7QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUdBLGFBQU8sVUFBVSxPQUFPLFVBQVUsS0FBSyxTQUFTLFVBQVUsT0FBTyxZQUFZO0FBRzdFLFVBQUksaUJBQWlCLFdBQVcsY0FBTTtBQUFBLFFBQ3BDLFFBQVE7QUFBQSxRQUNSLFFBQVEsT0FBTyxNQUFNO0FBQUEsTUFDdkI7QUFFQSxpQkFBVyxjQUFNO0FBQUEsUUFDZixDQUFDLFVBQVUsT0FBTyxRQUFRLFFBQVEsT0FBTyxTQUFTLFFBQVE7QUFBQSxRQUMxRCxDQUFDLFdBQVc7QUFDVixpQkFBTyxRQUFRLE1BQU07QUFBQSxRQUN2QjtBQUFBLE1BQ0Y7QUFFQSxhQUFPLFVBQVUscUJBQWEsT0FBTyxnQkFBZ0IsT0FBTztBQUc1RCxZQUFNLDBCQUEwQixDQUFDO0FBQ2pDLFVBQUksaUNBQWlDO0FBQ3JDLFdBQUssYUFBYSxRQUFRLFFBQVEsU0FBUywyQkFBMkIsYUFBYTtBQUNqRixZQUFJLE9BQU8sWUFBWSxZQUFZLGNBQWMsWUFBWSxRQUFRLE1BQU0sTUFBTSxPQUFPO0FBQ3RGO0FBQUEsUUFDRjtBQUVBLHlDQUFpQyxrQ0FBa0MsWUFBWTtBQUUvRSxnQ0FBd0IsUUFBUSxZQUFZLFdBQVcsWUFBWSxRQUFRO0FBQUEsTUFDN0UsQ0FBQztBQUVELFlBQU0sMkJBQTJCLENBQUM7QUFDbEMsV0FBSyxhQUFhLFNBQVMsUUFBUSxTQUFTLHlCQUF5QixhQUFhO0FBQ2hGLGlDQUF5QixLQUFLLFlBQVksV0FBVyxZQUFZLFFBQVE7QUFBQSxNQUMzRSxDQUFDO0FBRUQsVUFBSTtBQUNKLFVBQUksSUFBSTtBQUNSLFVBQUk7QUFFSixVQUFJLENBQUMsZ0NBQWdDO0FBQ25DLGNBQU0sUUFBUSxDQUFDLGdCQUFnQixLQUFLLElBQUksR0FBRyxNQUFTO0FBQ3BELGNBQU0sUUFBUSxNQUFNLE9BQU8sdUJBQXVCO0FBQ2xELGNBQU0sS0FBSyxNQUFNLE9BQU8sd0JBQXdCO0FBQ2hELGNBQU0sTUFBTTtBQUVaLGtCQUFVLFFBQVEsUUFBUSxNQUFNO0FBRWhDLGVBQU8sSUFBSSxLQUFLO0FBQ2Qsb0JBQVUsUUFBUSxLQUFLLE1BQU0sR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDO0FBQUEsUUFDL0M7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQUVBLFlBQU0sd0JBQXdCO0FBRTlCLFVBQUksWUFBWTtBQUVoQixVQUFJO0FBRUosYUFBTyxJQUFJLEtBQUs7QUFDZCxjQUFNLGNBQWMsd0JBQXdCLEdBQUc7QUFDL0MsY0FBTSxhQUFhLHdCQUF3QixHQUFHO0FBQzlDLFlBQUk7QUFDRixzQkFBWSxZQUFZLFNBQVM7QUFBQSxRQUNuQyxTQUFTLE9BQU87QUFDZCxxQkFBVyxLQUFLLE1BQU0sS0FBSztBQUMzQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsVUFBSTtBQUNGLGtCQUFVLGdCQUFnQixLQUFLLE1BQU0sU0FBUztBQUFBLE1BQ2hELFNBQVMsT0FBTztBQUNkLGVBQU8sUUFBUSxPQUFPLEtBQUs7QUFBQSxNQUM3QjtBQUVBLFVBQUk7QUFDSixZQUFNLHlCQUF5QjtBQUUvQixhQUFPLElBQUksS0FBSztBQUNkLGtCQUFVLFFBQVEsS0FBSyx5QkFBeUIsR0FBRyxHQUFHLHlCQUF5QixHQUFHLENBQUM7QUFBQSxNQUNyRjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxPQUFPLFFBQVE7QUFDYixlQUFTLFlBQVksS0FBSyxVQUFVLE1BQU07QUFDMUMsWUFBTSxXQUFXLGNBQWMsT0FBTyxTQUFTLE9BQU8sR0FBRztBQUN6RCxhQUFPLFNBQVMsVUFBVSxPQUFPLFFBQVEsT0FBTyxnQkFBZ0I7QUFBQSxJQUNsRTtBQUFBLEVBQ0Y7QUFHQSxnQkFBTSxRQUFRLENBQUMsVUFBVSxPQUFPLFFBQVEsU0FBUyxHQUFHLFNBQVMsb0JBQW9CLFFBQVE7QUFFdkYsVUFBTSxVQUFVLE1BQU0sSUFBSSxTQUFTLEtBQUssUUFBUTtBQUM5QyxhQUFPLEtBQUssUUFBUSxZQUFZLFVBQVUsQ0FBQyxHQUFHO0FBQUEsUUFDNUM7QUFBQSxRQUNBO0FBQUEsUUFDQSxPQUFPLFVBQVUsQ0FBQyxHQUFHO0FBQUEsTUFDdkIsQ0FBQyxDQUFDO0FBQUEsSUFDSjtBQUFBLEVBQ0YsQ0FBQztBQUVELGdCQUFNLFFBQVEsQ0FBQyxRQUFRLE9BQU8sT0FBTyxHQUFHLFNBQVMsc0JBQXNCLFFBQVE7QUFHN0UsYUFBUyxtQkFBbUIsUUFBUTtBQUNsQyxhQUFPLFNBQVMsV0FBVyxLQUFLLE1BQU0sUUFBUTtBQUM1QyxlQUFPLEtBQUssUUFBUSxZQUFZLFVBQVUsQ0FBQyxHQUFHO0FBQUEsVUFDNUM7QUFBQSxVQUNBLFNBQVMsU0FBUztBQUFBLFlBQ2hCLGdCQUFnQjtBQUFBLFVBQ2xCLElBQUksQ0FBQztBQUFBLFVBQ0w7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDLENBQUM7QUFBQSxNQUNKO0FBQUEsSUFDRjtBQUVBLFVBQU0sVUFBVSxNQUFNLElBQUksbUJBQW1CO0FBRTdDLFVBQU0sVUFBVSxTQUFTLE1BQU0sSUFBSSxtQkFBbUIsSUFBSTtBQUFBLEVBQzVELENBQUM7QUFFRCxNQUFPLGdCQUFROzs7QUN4TmYsTUFBTSxjQUFOLE1BQU0sYUFBWTtBQUFBLElBQ2hCLFlBQVksVUFBVTtBQUNwQixVQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ2xDLGNBQU0sSUFBSSxVQUFVLDhCQUE4QjtBQUFBLE1BQ3BEO0FBRUEsVUFBSTtBQUVKLFdBQUssVUFBVSxJQUFJLFFBQVEsU0FBUyxnQkFBZ0IsU0FBUztBQUMzRCx5QkFBaUI7QUFBQSxNQUNuQixDQUFDO0FBRUQsWUFBTUUsU0FBUTtBQUdkLFdBQUssUUFBUSxLQUFLLFlBQVU7QUFDMUIsWUFBSSxDQUFDQSxPQUFNO0FBQVk7QUFFdkIsWUFBSSxJQUFJQSxPQUFNLFdBQVc7QUFFekIsZUFBTyxNQUFNLEdBQUc7QUFDZCxVQUFBQSxPQUFNLFdBQVcsQ0FBQyxFQUFFLE1BQU07QUFBQSxRQUM1QjtBQUNBLFFBQUFBLE9BQU0sYUFBYTtBQUFBLE1BQ3JCLENBQUM7QUFHRCxXQUFLLFFBQVEsT0FBTyxpQkFBZTtBQUNqQyxZQUFJO0FBRUosY0FBTSxVQUFVLElBQUksUUFBUSxhQUFXO0FBQ3JDLFVBQUFBLE9BQU0sVUFBVSxPQUFPO0FBQ3ZCLHFCQUFXO0FBQUEsUUFDYixDQUFDLEVBQUUsS0FBSyxXQUFXO0FBRW5CLGdCQUFRLFNBQVMsU0FBUyxTQUFTO0FBQ2pDLFVBQUFBLE9BQU0sWUFBWSxRQUFRO0FBQUEsUUFDNUI7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMsU0FBUyxPQUFPLFNBQVMsUUFBUSxTQUFTO0FBQ2pELFlBQUlBLE9BQU0sUUFBUTtBQUVoQjtBQUFBLFFBQ0Y7QUFFQSxRQUFBQSxPQUFNLFNBQVMsSUFBSSxzQkFBYyxTQUFTLFFBQVEsT0FBTztBQUN6RCx1QkFBZUEsT0FBTSxNQUFNO0FBQUEsTUFDN0IsQ0FBQztBQUFBLElBQ0g7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtBLG1CQUFtQjtBQUNqQixVQUFJLEtBQUssUUFBUTtBQUNmLGNBQU0sS0FBSztBQUFBLE1BQ2I7QUFBQSxJQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNQSxVQUFVLFVBQVU7QUFDbEIsVUFBSSxLQUFLLFFBQVE7QUFDZixpQkFBUyxLQUFLLE1BQU07QUFDcEI7QUFBQSxNQUNGO0FBRUEsVUFBSSxLQUFLLFlBQVk7QUFDbkIsYUFBSyxXQUFXLEtBQUssUUFBUTtBQUFBLE1BQy9CLE9BQU87QUFDTCxhQUFLLGFBQWEsQ0FBQyxRQUFRO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNQSxZQUFZLFVBQVU7QUFDcEIsVUFBSSxDQUFDLEtBQUssWUFBWTtBQUNwQjtBQUFBLE1BQ0Y7QUFDQSxZQUFNLFFBQVEsS0FBSyxXQUFXLFFBQVEsUUFBUTtBQUM5QyxVQUFJLFVBQVUsSUFBSTtBQUNoQixhQUFLLFdBQVcsT0FBTyxPQUFPLENBQUM7QUFBQSxNQUNqQztBQUFBLElBQ0Y7QUFBQSxJQUVBLGdCQUFnQjtBQUNkLFlBQU0sYUFBYSxJQUFJLGdCQUFnQjtBQUV2QyxZQUFNLFFBQVEsQ0FBQyxRQUFRO0FBQ3JCLG1CQUFXLE1BQU0sR0FBRztBQUFBLE1BQ3RCO0FBRUEsV0FBSyxVQUFVLEtBQUs7QUFFcEIsaUJBQVcsT0FBTyxjQUFjLE1BQU0sS0FBSyxZQUFZLEtBQUs7QUFFNUQsYUFBTyxXQUFXO0FBQUEsSUFDcEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTUEsT0FBTyxTQUFTO0FBQ2QsVUFBSTtBQUNKLFlBQU1BLFNBQVEsSUFBSSxhQUFZLFNBQVMsU0FBUyxHQUFHO0FBQ2pELGlCQUFTO0FBQUEsTUFDWCxDQUFDO0FBQ0QsYUFBTztBQUFBLFFBQ0wsT0FBQUE7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsTUFBTyxzQkFBUTs7O0FDL0dBLFdBQVIsT0FBd0IsVUFBVTtBQUN2QyxXQUFPLFNBQVMsS0FBSyxLQUFLO0FBQ3hCLGFBQU8sU0FBUyxNQUFNLE1BQU0sR0FBRztBQUFBLElBQ2pDO0FBQUEsRUFDRjs7O0FDaEJlLFdBQVIsYUFBOEIsU0FBUztBQUM1QyxXQUFPLGNBQU0sU0FBUyxPQUFPLEtBQU0sUUFBUSxpQkFBaUI7QUFBQSxFQUM5RDs7O0FDYkEsTUFBTSxpQkFBaUI7QUFBQSxJQUNyQixVQUFVO0FBQUEsSUFDVixvQkFBb0I7QUFBQSxJQUNwQixZQUFZO0FBQUEsSUFDWixZQUFZO0FBQUEsSUFDWixJQUFJO0FBQUEsSUFDSixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDViw2QkFBNkI7QUFBQSxJQUM3QixXQUFXO0FBQUEsSUFDWCxjQUFjO0FBQUEsSUFDZCxnQkFBZ0I7QUFBQSxJQUNoQixhQUFhO0FBQUEsSUFDYixpQkFBaUI7QUFBQSxJQUNqQixRQUFRO0FBQUEsSUFDUixpQkFBaUI7QUFBQSxJQUNqQixrQkFBa0I7QUFBQSxJQUNsQixPQUFPO0FBQUEsSUFDUCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsSUFDYixVQUFVO0FBQUEsSUFDVixRQUFRO0FBQUEsSUFDUixtQkFBbUI7QUFBQSxJQUNuQixtQkFBbUI7QUFBQSxJQUNuQixZQUFZO0FBQUEsSUFDWixjQUFjO0FBQUEsSUFDZCxpQkFBaUI7QUFBQSxJQUNqQixXQUFXO0FBQUEsSUFDWCxVQUFVO0FBQUEsSUFDVixrQkFBa0I7QUFBQSxJQUNsQixlQUFlO0FBQUEsSUFDZiw2QkFBNkI7QUFBQSxJQUM3QixnQkFBZ0I7QUFBQSxJQUNoQixVQUFVO0FBQUEsSUFDVixNQUFNO0FBQUEsSUFDTixnQkFBZ0I7QUFBQSxJQUNoQixvQkFBb0I7QUFBQSxJQUNwQixpQkFBaUI7QUFBQSxJQUNqQixZQUFZO0FBQUEsSUFDWixzQkFBc0I7QUFBQSxJQUN0QixxQkFBcUI7QUFBQSxJQUNyQixtQkFBbUI7QUFBQSxJQUNuQixXQUFXO0FBQUEsSUFDWCxvQkFBb0I7QUFBQSxJQUNwQixxQkFBcUI7QUFBQSxJQUNyQixRQUFRO0FBQUEsSUFDUixrQkFBa0I7QUFBQSxJQUNsQixVQUFVO0FBQUEsSUFDVixpQkFBaUI7QUFBQSxJQUNqQixzQkFBc0I7QUFBQSxJQUN0QixpQkFBaUI7QUFBQSxJQUNqQiw2QkFBNkI7QUFBQSxJQUM3Qiw0QkFBNEI7QUFBQSxJQUM1QixxQkFBcUI7QUFBQSxJQUNyQixnQkFBZ0I7QUFBQSxJQUNoQixZQUFZO0FBQUEsSUFDWixvQkFBb0I7QUFBQSxJQUNwQixnQkFBZ0I7QUFBQSxJQUNoQix5QkFBeUI7QUFBQSxJQUN6Qix1QkFBdUI7QUFBQSxJQUN2QixxQkFBcUI7QUFBQSxJQUNyQixjQUFjO0FBQUEsSUFDZCxhQUFhO0FBQUEsSUFDYiwrQkFBK0I7QUFBQSxFQUNqQztBQUVBLFNBQU8sUUFBUSxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUMsS0FBS0MsTUFBSyxNQUFNO0FBQ3ZELG1CQUFlQSxNQUFLLElBQUk7QUFBQSxFQUMxQixDQUFDO0FBRUQsTUFBTyx5QkFBUTs7O0FDM0NmLFdBQVMsZUFBZSxlQUFlO0FBQ3JDLFVBQU0sVUFBVSxJQUFJLGNBQU0sYUFBYTtBQUN2QyxVQUFNLFdBQVcsS0FBSyxjQUFNLFVBQVUsU0FBUyxPQUFPO0FBR3RELGtCQUFNLE9BQU8sVUFBVSxjQUFNLFdBQVcsU0FBUyxFQUFDLFlBQVksS0FBSSxDQUFDO0FBR25FLGtCQUFNLE9BQU8sVUFBVSxTQUFTLE1BQU0sRUFBQyxZQUFZLEtBQUksQ0FBQztBQUd4RCxhQUFTLFNBQVMsU0FBUyxPQUFPLGdCQUFnQjtBQUNoRCxhQUFPLGVBQWUsWUFBWSxlQUFlLGNBQWMsQ0FBQztBQUFBLElBQ2xFO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFHQSxNQUFNLFFBQVEsZUFBZSxnQkFBUTtBQUdyQyxRQUFNLFFBQVE7QUFHZCxRQUFNLGdCQUFnQjtBQUN0QixRQUFNLGNBQWM7QUFDcEIsUUFBTSxXQUFXO0FBQ2pCLFFBQU0sVUFBVTtBQUNoQixRQUFNLGFBQWE7QUFHbkIsUUFBTSxhQUFhO0FBR25CLFFBQU0sU0FBUyxNQUFNO0FBR3JCLFFBQU0sTUFBTSxTQUFTLElBQUksVUFBVTtBQUNqQyxXQUFPLFFBQVEsSUFBSSxRQUFRO0FBQUEsRUFDN0I7QUFFQSxRQUFNLFNBQVM7QUFHZixRQUFNLGVBQWU7QUFHckIsUUFBTSxjQUFjO0FBRXBCLFFBQU0sZUFBZTtBQUVyQixRQUFNLGFBQWEsV0FBUyx1QkFBZSxjQUFNLFdBQVcsS0FBSyxJQUFJLElBQUksU0FBUyxLQUFLLElBQUksS0FBSztBQUVoRyxRQUFNLGFBQWEsaUJBQVM7QUFFNUIsUUFBTSxpQkFBaUI7QUFFdkIsUUFBTSxVQUFVO0FBR2hCLE1BQU8sZ0JBQVE7OztBQ25GZixNQUFNO0FBQUEsSUFDSixPQUFBQztBQUFBLElBQ0EsWUFBQUM7QUFBQSxJQUNBLGVBQUFDO0FBQUEsSUFDQSxVQUFBQztBQUFBLElBQ0EsYUFBQUM7QUFBQSxJQUNBLFNBQUFDO0FBQUEsSUFDQSxLQUFBQztBQUFBLElBQ0E7QUFBQSxJQUNBLGNBQUFDO0FBQUEsSUFDQSxRQUFBQztBQUFBLElBQ0EsWUFBQUM7QUFBQSxJQUNBLGNBQUFDO0FBQUEsSUFDQSxnQkFBQUM7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsYUFBQUM7QUFBQSxFQUNGLElBQUk7OztBQ25CRyxNQUFNLGlCQUFpQixDQUFDLFNBQVUsTUFBTTtBQUN4QyxNQUFNLG9CQUFvQixDQUFDLFlBQVksc0JBQXNCLGdCQUFnQixnQkFBZ0I7QUFDN0YsTUFBTSxzQkFBc0IsQ0FBQyxZQUFZO0FBQ3pDLE1BQU0sb0JBQW9CLENBQUMsVUFBVTtBQUNyQyxNQUFNLGtCQUFrQixDQUFDLEdBQUcsZ0JBQWdCLEdBQUcscUJBQXFCLEdBQUcsaUJBQWlCO0FBQ3hGLE1BQU0saUJBQWlCLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxpQkFBaUI7QUFXaEUsV0FBUyxnQkFBZ0IsTUFBc0M7QUFDbEUsV0FBTyxlQUFlLFNBQVMsSUFBcUI7QUFBQSxFQUN4RDtBQUNPLFdBQVMsbUJBQW1CLE1BQXlDO0FBQ3hFLFdBQU8sa0JBQWtCLFNBQVMsSUFBd0I7QUFBQSxFQUM5RDtBQUNPLFdBQVMscUJBQXFCLE1BQTJDO0FBQzVFLFdBQU8sb0JBQW9CLFNBQVMsSUFBMEI7QUFBQSxFQUNsRTtBQUNPLFdBQVMsbUJBQW1CLE1BQXlDO0FBQ3hFLFdBQU8sa0JBQWtCLFNBQVMsSUFBd0I7QUFBQSxFQUM5RDtBQUNPLFdBQVMsaUJBQWlCLE1BQXVDO0FBQ3BFLFdBQU8sZ0JBQWdCLFNBQVMsSUFBc0I7QUFBQSxFQUMxRDtBQUNPLFdBQVMsZ0JBQWdCLE1BQXNDO0FBQ2xFLFdBQU8sZUFBZSxTQUFTLElBQXFCO0FBQUEsRUFDeEQ7QUFHTyxXQUFTLFFBQVEsT0FBK0I7QUFDbkQsV0FBTyxnQkFBZ0IsTUFBTSxRQUFRLENBQUM7QUFBQSxFQUMxQztBQUNPLFdBQVMsV0FBVyxPQUFrQztBQUN6RCxXQUFPLG1CQUFtQixNQUFNLFFBQVEsQ0FBQztBQUFBLEVBQzdDO0FBQ08sV0FBUyxhQUFhLE9BQW9DO0FBQzdELFdBQU8scUJBQXFCLE1BQU0sUUFBUSxDQUFDO0FBQUEsRUFDL0M7QUFDTyxXQUFTLFNBQVMsT0FBZ0M7QUFDckQsV0FBTyxpQkFBaUIsTUFBTSxRQUFRLENBQUM7QUFBQSxFQUMzQztBQUNPLFdBQVMsV0FBVyxPQUFrQztBQUN6RCxXQUFPLG1CQUFtQixNQUFNLFFBQVEsQ0FBQztBQUFBLEVBQzdDOzs7QUMzQ08sV0FBUyxRQUFXLEtBQW1CO0FBQzFDLFFBQUksTUFBTSxRQUFRLEdBQUcsR0FBRztBQUNwQixhQUFPO0FBQUEsSUFDWCxXQUFXLEtBQUs7QUFDWixhQUFPLENBQUMsR0FBRztBQUFBLElBQ2Y7QUFDQSxXQUFPLENBQUM7QUFBQSxFQUNaO0FBRUEsTUFBTSxxQkFBcUI7QUFLcEIsV0FBUyxhQUFhLFdBQStCO0FBQ3hELFdBQVEsY0FBYyxTQUFhLFlBQVk7QUFBQSxFQUNuRDtBQUtPLFdBQVMsa0JBQWtCLE1BQXVCO0FBQ3JELFdBQU8sU0FBUyxTQUFTLFVBQVU7QUFBQSxFQUN2QztBQUVPLFdBQVMsV0FBVyxLQUFzQjtBQUM3QyxXQUFPLElBQUksT0FBTyxDQUFDLEVBQUUsWUFBWSxJQUFJLElBQUksTUFBTSxDQUFDO0FBQUEsRUFDcEQ7QUFFTyxXQUFTLFlBQVksS0FBc0I7QUFDOUMsV0FBTyxXQUFXLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixFQUFFLEtBQUssR0FBRztBQUFBLEVBQzNEO0FBRU8sV0FBUyxhQUFhLEtBQXNCO0FBQy9DLFdBQU8sV0FBVyxHQUFHLEVBQUUsUUFBUSxLQUFLLEdBQUc7QUFBQSxFQUMzQztBQWlCTyxXQUFTLDBCQUEwQixZQUFvQixpQkFBb0MsS0FBYyxXQUE4QjtBQUMxSSxXQUFPLGNBQWMsVUFBVSxJQUFJLGNBQWMsUUFBUSxlQUFlLEdBQUcsU0FBUyxDQUFDLE1BQU0sT0FBTyxTQUFZLElBQUksbUJBQW1CLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxLQUFLO0FBQUEsRUFDdEs7QUFFTyxXQUFTLGNBQWMsV0FBOEIsV0FBeUY7QUFDakosZUFBVSxRQUFRLFFBQVEsU0FBUyxHQUFHO0FBQ2xDLFVBQUcsZ0JBQWdCLElBQUksR0FBRztBQUN0QixZQUFHLGdCQUFnQixJQUFJO0FBQUcsaUJBQU8sYUFBYSxTQUFTLElBQUksVUFBVTtBQUNyRSxZQUFHLG1CQUFtQixJQUFJO0FBQUcsaUJBQU87QUFDcEMsWUFBRyxxQkFBcUIsSUFBSTtBQUFHLGlCQUFPO0FBQ3RDLFlBQUcsbUJBQW1CLElBQUk7QUFBRyxpQkFBTztBQUFBLE1BQ3hDO0FBQUEsSUFDSjtBQUNBLFVBQU0sSUFBSSxNQUFNLHdEQUF3RDtBQUFBLEVBQzVFO0FBRU8sV0FBUyxnQkFBZ0IsV0FBOEIsV0FBb0M7QUFDOUYsZUFBVSxRQUFRLFFBQVEsU0FBUyxHQUFHO0FBQ2xDLGNBQVEsTUFBTTtBQUFBLFFBQ1YsS0FBSztBQUFBLFFBQVMsS0FBSztBQUNmLGlCQUFPLGFBQWEsU0FBUyxJQUFJLFNBQVM7QUFBQSxRQUM5QyxLQUFLO0FBQUEsUUFBYyxLQUFLO0FBQUEsUUFBa0IsS0FBSztBQUFBLFFBQW9CLEtBQUs7QUFDcEUsaUJBQU87QUFBQSxRQUNYLEtBQUs7QUFDRCxpQkFBTztBQUFBLFFBQ1gsS0FBSztBQUNELGlCQUFPO0FBQUEsTUFDZjtBQUFBLElBQ0o7QUFDQSxVQUFNLElBQUksTUFBTSwwREFBMEQ7QUFBQSxFQUM5RTtBQUtPLFdBQVMsZUFBZTtBQUMzQixZQUFRLEtBQUssT0FBTyxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUU7QUFBQSxFQUN4RDtBQUVPLFdBQVMsV0FBVyxLQUF1QjtBQUM5QyxXQUFPLGtCQUFrQixLQUFLLEdBQUc7QUFBQSxFQUNyQztBQUVPLFdBQVMsV0FBVyxLQUF1QjtBQUM5QyxXQUFPLHdHQUF3RyxLQUFLLEdBQUc7QUFBQSxFQUMzSDtBQUVPLFdBQVMsZUFBZSxLQUFtQztBQUM5RCxXQUFPLENBQUMsV0FBVyxXQUFXLFdBQVcsVUFBVSxVQUFVLFdBQVcsUUFBUSxPQUFPLEVBQUUsU0FBUyxHQUFHO0FBQUEsRUFDekc7QUFFTyxXQUFTLHlCQUF5QixPQUFZLHFCQUFxQixlQUF1QjtBQUM3RixVQUFNLFlBQXFCLE1BQU07QUFDakMsUUFBRyxjQUFlLGdDQUFpQztBQUMvQyxhQUFPO0FBQUEsSUFDWDtBQUNLLGFBQU8sTUFBTSxrQkFBa0I7QUFBQSxFQUN4QztBQUVPLFdBQVMsdUJBQXVCLE9BQWlCO0FBQ3BELFFBQUksTUFBTSxNQUFNLE9BQU8sQ0FBQyxTQUFrQixnQkFBZ0IsSUFBSSxDQUFDO0FBQy9ELFVBQU0sSUFBSSxJQUFJLFVBQVEsU0FBUyx3QkFBd0IsU0FBUyxvQkFBb0IsU0FBUyxpQkFBaUIsYUFBYSxJQUFJO0FBQy9ILFVBQU0sQ0FBQyxHQUFHLElBQUksSUFBWSxHQUFHLENBQUM7QUFFOUIsUUFBRyxJQUFJLFdBQVc7QUFBRyxhQUFPLElBQUksQ0FBQztBQUFBLGFBQ3pCLElBQUksV0FBVztBQUFHLFlBQU0sTUFBTSwrRUFBK0U7QUFBQTtBQUNoSCxZQUFNLE1BQU0sNkdBQTZHLEtBQUssVUFBVSxHQUFHLENBQUMsRUFBRTtBQUFBLEVBQ3ZKOzs7QUNqSUEsTUFBcUIsVUFBckIsTUFBcUIsU0FBVztBQUFBLElBQzlCO0FBQUEsSUFDQTtBQUFBLElBRVEsWUFBWUMsUUFBVSxRQUFzQjtBQUNsRCxXQUFLLFFBQVFBO0FBQ2IsV0FBSyxTQUFTO0FBQUEsSUFDaEI7QUFBQSxJQUVBLE9BQWMsU0FBWSxVQUE2QjtBQUNyRCxVQUFJLENBQUMsVUFBVTtBQUNiLGVBQU8sQ0FBQztBQUFBLE1BQ1Y7QUFFQSxVQUFJLENBQUMsTUFBTSxRQUFRLFFBQVEsR0FBRztBQUM1QixtQkFBVyxDQUFDLFFBQVE7QUFBQSxNQUN0QjtBQUVBLGFBQU8sU0FBUyxJQUFJLENBQUNBLFdBQWU7QUFDbEMsWUFDRSxPQUFPQSxXQUFVLFlBQ2pCLE1BQU0sUUFBUUEsT0FBTSxJQUFJLEtBQ3hCQSxPQUFNLEtBQUssUUFBUSxhQUFhLE1BQU0sSUFDdEM7QUFDQSxpQkFBTyxJQUFJLFNBQVdBLE9BQU0sT0FBT0EsT0FBTSxNQUFNO0FBQUEsUUFDakQsT0FBTztBQUNMLGlCQUFPLElBQUksU0FBV0EsUUFBTyxJQUFJO0FBQUEsUUFDbkM7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUEsSUFFQSxjQUFjO0FBQ1osYUFBTyxLQUFLLFVBQVU7QUFBQSxJQUN4QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUUEsY0FBMEI7QUFDeEIsVUFBSSxDQUFDLEtBQUssUUFBUTtBQUNoQixlQUFPO0FBQUEsTUFDVDtBQUVBLFlBQU0sYUFBa0IsQ0FBQztBQUV6QixpQkFBVyxTQUFTLEtBQUssUUFBUTtBQUMvQixtQkFBVyxLQUFLLE9BQU8sS0FBSyxLQUFLLEdBQUc7QUFDbEMsZ0JBQU0sSUFBSSxNQUFNLENBQUM7QUFDakIsZ0JBQU0sV0FBOEIsV0FBVyxDQUFDO0FBQ2hELGNBQUksYUFBYSxRQUFXO0FBQzFCLHFCQUFTLEtBQUssQ0FBQztBQUFBLFVBQ2pCLE9BQU87QUFDTCx1QkFBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQUEsVUFDcEI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjs7O0FDbERBLE1BQXFCLGlCQUFyQixNQUFxQixnQkFBZTtBQUFBLElBRW5DO0FBQUEsSUFFQSxZQUFZLGdCQUFvQjtBQUMvQixVQUFHO0FBQ0YsYUFBSyxpQkFBaUIsRUFBQyxHQUFHLGVBQWM7QUFBQTtBQUV4QyxhQUFLLGlCQUFpQixDQUFDO0FBQUEsSUFDekI7QUFBQSxJQUVBLFVBQVUsZ0JBQW1DO0FBQzVDLFVBQUc7QUFDRixlQUFPLElBQUksZ0JBQWUsRUFBRSxHQUFHLEtBQUssZ0JBQWdCLGVBQWUsQ0FBQztBQUFBO0FBRXBFLGVBQU8sSUFBSSxnQkFBZSxFQUFFLEdBQUcsS0FBSyxlQUFlLENBQUM7QUFBQSxJQUN0RDtBQUFBLElBRUEsZUFBZSxLQUE2QjtBQUMzQyxZQUFNLGVBQWUsS0FBSyxlQUFlLEdBQUc7QUFFNUMsVUFBRyxjQUFjO0FBQ2hCLGNBQU0sUUFBUSxRQUFRLFNBQWtCLGFBQWEsS0FBTTtBQUMzRCxZQUFHLFNBQVMsTUFBTSxTQUFTLEdBQUc7QUFDN0IsaUJBQU8sTUFBTSxDQUFDLEVBQUU7QUFBQSxRQUNqQjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUEsSUFFQSxJQUFJLEtBQW1DO0FBQ3RDLGFBQU8sS0FBSyxlQUFlLEdBQUc7QUFBQSxJQUMvQjtBQUFBLEVBQ0Q7OztBQ3JDTyxNQUFlLFlBQWYsTUFBMEM7QUFBQSxJQUMvQztBQUFBLElBRUEsWUFBWSxZQUFpQjtBQUMzQixXQUFLLGFBQWE7QUFBQSxJQUNwQjtBQUFBLElBRUEsV0FBK0I7QUFDN0IsYUFBTyxLQUFLLFdBQVcsT0FBTztBQUFBLElBQ2hDO0FBQUE7QUFBQSxJQUdBLFFBQWdCO0FBQ2QsYUFBTyxLQUFLLFdBQVcsSUFBSTtBQUFBLElBQzdCO0FBQUEsSUFFQSxTQUFpQjtBQUNmLGFBQU8sS0FBSyxXQUFXLEtBQUs7QUFBQSxJQUM5QjtBQUFBLElBS0EsZ0JBQW1GO0FBQ2pGLGFBQU8sY0FBYyxLQUFLLFFBQVEsQ0FBQztBQUFBLElBQ3JDO0FBQUE7QUFBQSxJQUdBLGNBQXdCO0FBQ3RCLGFBQU8sQ0FBQztBQUFBLElBQ1Y7QUFBQSxJQUVBLFVBQWtCO0FBQ25CLGFBQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztBQUFBLElBQ3ZCO0FBQUE7QUFBQSxJQUdBLFdBQXFCO0FBQ25CLFlBQU0sU0FBUyxRQUFRO0FBQUEsUUFDckIsS0FBSyxXQUFXLE9BQU87QUFBQSxNQUN6QjtBQUNBLFVBQUksVUFBVSxPQUFPLFNBQVMsR0FBRztBQUMvQixlQUFPLE9BQU8sSUFBSSxXQUFTLE1BQU0sS0FBSztBQUFBLE1BQ3hDO0FBQ0EsYUFBTyxDQUFDLEtBQUssT0FBTyxDQUFDO0FBQUEsSUFDdkI7QUFBQSxJQUVBLGlCQUF5QjtBQUN2QixZQUFNLGFBQWEsUUFBUSxTQUFjLEtBQUssV0FBVyxhQUFhLENBQUM7QUFDdkUsVUFBSSxjQUFjLFdBQVcsU0FBUyxHQUFHO0FBQ3ZDLGVBQU8sV0FBVyxJQUFJLENBQUMsUUFBUSxJQUFJLFNBQVMsRUFBRSxFQUFFLEtBQUssR0FBRztBQUFBLE1BQzFEO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUVBLGdCQUF3QjtBQUN0QixhQUFPLEtBQUssV0FBVyxlQUFlO0FBQUEsSUFDeEM7QUFBQTtBQUFBLElBR0EsZUFBZSxJQUFZO0FBQ3pCLFlBQU0saUJBQWlCLEtBQUssV0FBVyxnQkFBZ0I7QUFDdkQsVUFBSSxnQkFBZ0I7QUFDbEIsY0FBTSxRQUEwQixRQUFRLFNBQWtCLGVBQWUsRUFBRSxHQUFHLEtBQU07QUFDcEYsZUFBTyxNQUFNLENBQUMsR0FBRyxTQUFTO0FBQUEsTUFDNUIsT0FBTztBQUNMLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUEsSUFPQSxvQkFBb0M7QUFDbEMsYUFBTyxJQUFJLGVBQWUsS0FBSyxXQUFXLGdCQUFnQixLQUFLLENBQUMsQ0FBQztBQUFBLElBQ25FO0FBQUEsSUFFQSxrQkFBMEI7QUFDeEIsVUFBSSxLQUFLLFdBQVcsWUFBWSxLQUFLLEtBQUssV0FBVyxZQUFZLEVBQUUsV0FBVyxHQUFHO0FBQy9FLGVBQU8sS0FBSyxXQUFXLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUFBLE1BQ3JEO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGOzs7QUNwRk8sTUFBZSxhQUFmLGNBQWtDLFVBQTJCO0FBQUEsSUFLbEUsY0FBdUI7QUFDckIsYUFBTyxLQUFLLFdBQVcsc0JBQXNCLE1BQU07QUFBQSxJQUNyRDtBQUFBO0FBQUE7QUFBQSxJQUlBLGVBQXdCO0FBQ3RCLGFBQ0UsS0FBSyxXQUFXLDBDQUEwQyxNQUFNO0FBQUEsSUFFcEU7QUFBQSxJQUVBLHdCQUFnQztBQUU5QixhQUFPLEtBQUssV0FBVywrQ0FBK0M7QUFBQSxJQUN4RTtBQUFBLElBRUEsdUJBQXVDO0FBQ3JDLGFBQU8sUUFBUTtBQUFBLFFBQ2IsS0FBSyxXQUFXLDRDQUE0QztBQUFBLE1BQzlELEVBQUU7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNOLEtBQUssV0FBVyxrREFBa0Q7QUFBQSxRQUNwRTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFFQSw0QkFBb0M7QUFDbEMsYUFBTyxLQUFLLFdBQVcsNENBQTRDO0FBQUEsSUFDckU7QUFBQTtBQUFBO0FBQUEsSUFJQSxpQkFBaUM7QUFDL0IsYUFBTyxRQUFRLFNBQWMsS0FBSyxXQUFXLGFBQWEsQ0FBQztBQUFBLElBQzdEO0FBQUEsSUFFQSx3QkFBd0M7QUFDdEMsYUFBTyxRQUFRLFNBQWMsS0FBSyxXQUFXLGFBQWEsQ0FBQztBQUFBLElBQzdEO0FBQUE7QUFBQSxJQUdBLG9CQUE2QjtBQUMzQixhQUFPLEtBQUssV0FBVyxtQkFBbUIsTUFBTTtBQUFBLElBQ2xEO0FBQUE7QUFBQSxJQUdBLDBCQUFtQztBQUNqQyxhQUFPLEtBQUssV0FBVyx5QkFBeUIsTUFBTTtBQUFBLElBQ3hEO0FBQUEsSUFFQSxjQUF1QjtBQUNyQixhQUFPLEtBQUssV0FBVyxjQUFjO0FBQUEsSUFDdkM7QUFBQTtBQUFBLElBR0Esa0JBQTRCO0FBQzFCLGFBQU8sUUFBUSxLQUFLLFdBQVcsVUFBVSxDQUFDO0FBQUEsSUFDNUM7QUFBQTtBQUFBLElBR0EsOEJBQXdDO0FBQ3RDLGFBQU8sUUFBUSxLQUFLLFdBQVcsc0JBQXNCLENBQUM7QUFBQSxJQUN4RDtBQUFBLElBRUEsY0FBYztBQUNaLGFBQU8sUUFBUSxTQUFjLEtBQUssV0FBVyxVQUFVLENBQUM7QUFBQSxJQUMxRDtBQUFBO0FBQUEsSUFHQSxlQUF5QjtBQUN2QixhQUFRLEtBQUssV0FBVyxXQUFXLEtBQUssQ0FBQztBQUFBLElBQzNDO0FBQUEsSUFFQSxxQkFBNEI7QUFDMUIsYUFBTyxLQUFLLFdBQVcsWUFBWSxFQUFFLFlBQVksS0FBSyxDQUFDO0FBQUEsSUFDekQ7QUFBQTtBQUFBO0FBQUEsSUFJQSxlQUF5QjtBQUN2QixhQUFRLEtBQUssV0FBVyxXQUFXLEtBQUssQ0FBQztBQUFBLElBQzNDO0FBQUEsSUFFQSx3QkFBaUM7QUFDL0IsYUFBUSxLQUFLLFdBQVcsc0JBQXNCLEtBQUs7QUFBQSxJQUNyRDtBQUFBLElBRUEsZUFBdUI7QUFDckIsYUFBTyxLQUFLLFdBQVcsUUFBUSxLQUFLLEtBQUssV0FBVyxZQUFZO0FBQUEsSUFDbEU7QUFBQTtBQUFBLElBR0EsZ0JBQW1DO0FBQ2pDLGFBQU8sUUFBUTtBQUFBLFFBQ2I7QUFBQSxVQUFFLEdBQUcsUUFBUSxLQUFLLFdBQVcsdUNBQXVDLEtBQUssQ0FBQyxDQUFDO0FBQUEsVUFDekUsR0FBRyxRQUFRLEtBQUssV0FBVyxxQ0FBcUMsS0FBSyxDQUFDLENBQUM7QUFBQSxRQUFFO0FBQUEsTUFDN0U7QUFBQSxJQUNGO0FBQUEsSUFFQSxrQ0FBa0MsV0FBNEI7QUFDNUQsYUFBTyxVQUFVLFdBQVcsc0NBQXNDLEtBQzlELFVBQVUsV0FBVywyQkFBMkIsS0FDaEQsVUFBVSxXQUFXLGtDQUFrQyxLQUN2RCxVQUFVLFdBQVcsb0JBQW9CO0FBQUEsSUFDL0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTUEsMEJBQW9DO0FBSWxDLGFBQU8sUUFBZ0IsT0FBTyxLQUFLLEtBQUssV0FBVyxZQUFZLENBQUMsQ0FBQztBQUFBLElBQ25FO0FBQUEsSUFFQSx1QkFBdUIsSUFBb0I7QUFDekMsYUFBTyxhQUFhLEVBQUU7QUFBQSxJQUN4QjtBQUFBLElBRUEsa0JBQWtCLElBQTJCO0FBQzNDLGFBQU8sUUFBUSxTQUFTLFFBQVEsS0FBSyxXQUFXLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUFBLElBQ3BFO0FBQUE7QUFBQSxJQUdBLGdDQUF3QztBQUN0QyxhQUFPLEtBQUssV0FBVyw0QkFBNEIsSUFDL0MsU0FBUyxLQUFLLFdBQVcsNEJBQTRCLENBQUMsSUFDdEQ7QUFBQSxJQUNOO0FBQUE7QUFBQSxJQUdBLG9CQUE0QjtBQUMxQixhQUFPLEtBQUssV0FBVyxnQkFBZ0IsSUFDbkMsU0FBUyxLQUFLLFdBQVcsZ0JBQWdCLENBQUMsSUFDMUM7QUFBQSxJQUNOO0FBQUE7QUFBQSxJQUdBLHVDQUF1QyxXQUF3QjtBQUM3RCxZQUFNLHNCQUFzQixRQUFRO0FBQUEsUUFDbEMsS0FBSyxXQUFXLG9CQUFvQjtBQUFBLE1BQ3RDO0FBRUEsaUJBQVcsS0FBSyxxQkFBcUI7QUFDbkMsWUFBSSxFQUFFLFVBQVUsV0FBVztBQUN6QixpQkFBTyxFQUFFLFlBQVk7QUFBQSxRQUN2QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFHRjs7O0FDL0pPLE1BQU0sWUFBTixjQUF3QixXQUE0QjtBQUFBLElBRXpELFVBQXlCO0FBQ3ZCLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxnQkFBMEQ7QUFDeEQsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBLElBR0EsYUFBNkI7QUFDM0IsYUFBTyxRQUFRO0FBQUEsUUFDYixLQUFLLFdBQVcsb0JBQW9CO0FBQUEsTUFDdEM7QUFBQSxJQUNGO0FBQUE7QUFBQSxJQUdBLG1CQUFtQztBQUNqQyxhQUFPLFFBQVE7QUFBQSxRQUNiLEtBQUssV0FBVyxpREFBaUQ7QUFBQSxNQUNuRTtBQUFBLElBQ0Y7QUFBQTtBQUFBLElBSUEsaUJBQWlDO0FBQy9CLGFBQU8sUUFBUTtBQUFBLFFBQ2IsS0FBSyxXQUFXLCtDQUErQztBQUFBLE1BQ2pFO0FBQUEsSUFDRjtBQUFBO0FBQUEsSUFJQSxrQkFBa0I7QUFDbkIsYUFBTyxRQUFRLEtBQUssV0FBVyw0Q0FBNEMsQ0FBQztBQUFBLElBQzNFO0FBQUE7QUFBQSxJQUdBLFlBQVk7QUFDVixhQUFPLFFBQVEsS0FBSyxXQUFXLHNDQUFzQyxDQUFDO0FBQUEsSUFDeEU7QUFBQSxJQUVBLGFBQW9CO0FBQ2xCLGFBQU8sUUFBUSxLQUFLLFdBQVcsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUFBLElBQ25EO0FBQUEsRUFDRjs7O0FDOUNPLE1BQU0sZUFBTixjQUEyQixXQUE4QjtBQUFBLElBRTlELFVBQTRCO0FBQzFCLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxhQUE2QjtBQUMzQixhQUFPLFFBQVE7QUFBQSxRQUNiLEtBQUssV0FBVyxvREFBb0Q7QUFBQSxNQUN0RTtBQUFBLElBQ0Y7QUFBQSxJQUNBLG1CQUFtQztBQUNqQyxhQUFPLFFBQVE7QUFBQSxRQUNiLEtBQUssV0FBVyxvREFBb0Q7QUFBQSxNQUN0RTtBQUFBLElBQ0Y7QUFBQSxJQUNBLGlCQUFpQztBQUMvQixhQUFPLFFBQVE7QUFBQSxRQUNiLEtBQUssV0FBVyxrREFBa0Q7QUFBQSxNQUNwRTtBQUFBLElBQ0Y7QUFBQSxJQUVBLGtCQUFrQjtBQUNuQixhQUFPLFFBQVEsS0FBSyxXQUFXLG9EQUFvRCxDQUFDO0FBQUEsSUFDbkY7QUFBQSxJQUVBLGVBQWU7QUFDYixhQUFPLFFBQVEsS0FBSyxXQUFXLHlDQUF5QyxDQUFDO0FBQUEsSUFDM0U7QUFBQSxJQUVBLFlBQVk7QUFDVixhQUFPLFFBQVEsS0FBSyxXQUFXLDZDQUE2QyxDQUFDO0FBQUEsSUFDL0U7QUFBQSxJQUVBLFdBQVc7QUFDVCxhQUFPLFFBQVEsS0FBSyxXQUFXLDRDQUE0QyxDQUFDO0FBQUEsSUFDOUU7QUFBQSxJQUVBLG9CQUFtQztBQUNwQyxhQUFPLFFBQVE7QUFBQSxRQUNkLEtBQUssV0FBVyxrREFBa0Q7QUFBQSxNQUNuRTtBQUFBLElBQ0M7QUFBQSxFQUNGOzs7QUMzQ08sTUFBTSxpQkFBTixjQUE2QixXQUFnQztBQUFBLElBRWxFLFVBQThCO0FBQzVCLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxhQUFhO0FBQ1gsYUFBTyxRQUFRO0FBQUEsUUFDYixLQUFLLFdBQVcsY0FBYztBQUFBLE1BQ2hDO0FBQUEsSUFDRjtBQUFBLElBQ0EsaUJBQWlCO0FBQ2YsYUFBTyxDQUFDO0FBQUEsSUFDVjtBQUFBLElBQ0EsbUJBQW1DO0FBQ2pDLGFBQU8sUUFBUSxTQUFjLENBQUMsQ0FBQztBQUFBLElBQ2pDO0FBQUEsSUFFQSxtQkFBbUI7QUFDakIsYUFBTztBQUFBLFFBQ0wsS0FBSyxXQUFXLDZDQUE2QztBQUFBLE1BQy9EO0FBQUEsSUFDRjtBQUFBLElBRUEsWUFBWTtBQUNWLGFBQU8sUUFBUSxLQUFLLFdBQVcsc0NBQXNDLENBQUM7QUFBQSxJQUN4RTtBQUFBLElBRUEscUJBQStCO0FBQzdCLFlBQU0sV0FBZ0IsS0FBSyxZQUFZO0FBRXZDLFVBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxRQUFRLFFBQVEsR0FBRztBQUN6QyxlQUFPLENBQUM7QUFBQSxNQUNWO0FBRUEsYUFBTyxTQUFTO0FBQUEsUUFDZCxDQUFDLE1BQ0MsTUFBTSxvREFDVCxFQUFHLE9BQU8sTUFBTSxhQUFhLENBQUMsRUFBRSxXQUFXLHVDQUF1QztBQUFBLE1BQ25GO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7OztBQzFDTyxNQUFNLGVBQU4sY0FBMkIsVUFBNkI7QUFBQSxJQUU3RCxVQUE0RDtBQUMxRCxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsZ0JBQXlFO0FBQ3ZFLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxnQkFBd0I7QUFDdEIsYUFBTyxLQUFLLFdBQVcsWUFBWTtBQUFBLElBQ3JDO0FBQUEsSUFDQSxVQUFrQjtBQUNoQixZQUFNLFFBQVEsUUFBUTtBQUFBLFFBQ2xCLEtBQUssV0FBVyxRQUFRLEVBQUUsT0FBTyxLQUFLO0FBQUEsTUFDMUM7QUFDQSxhQUFRLE1BQU0sQ0FBQyxLQUFLLE1BQU0sQ0FBQyxFQUFFLFNBQVUsS0FBSyxjQUFjO0FBQUEsSUFDNUQ7QUFBQSxJQUNBLGlCQUF5QjtBQUN2QixZQUFNLGVBQWUsUUFBUTtBQUFBLFFBQzNCLEtBQUssV0FBVyxRQUFRLEVBQUUsYUFBYSxLQUFLO0FBQUEsTUFDOUM7QUFDQSxhQUFRLGFBQWEsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxFQUFFLFNBQVU7QUFBQSxJQUN2RDtBQUFBLElBRUEsY0FBd0I7QUFDdEIsYUFBTyxRQUFRLEtBQUssV0FBVyxRQUFRLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQztBQUFBLElBQ3BFO0FBQUEsSUFFQSx5QkFBaUM7QUFDL0IsYUFBTyxLQUFLLFdBQVcsU0FBUztBQUFBLElBQ2xDO0FBQUEsSUFDQSxpQkFBeUI7QUFDdkIsYUFBTyxTQUFTLEtBQUssV0FBVyxrQkFBa0IsQ0FBQztBQUFBLElBQ3JEO0FBQUEsSUFDQSxnQkFBd0I7QUFDdEIsYUFBTyxTQUFTLEtBQUssV0FBVyxlQUFlLENBQUM7QUFBQSxJQUNsRDtBQUFBLElBQ0EsbUJBQTJCO0FBQ3pCLGFBQU8sU0FBUyxLQUFLLFdBQVcsb0JBQW9CLENBQUM7QUFBQSxJQUN2RDtBQUFBLElBQ0Esb0JBQTRCO0FBQzFCLGFBQU8sU0FBUyxLQUFLLFdBQVcscUJBQXFCLENBQUM7QUFBQSxJQUN4RDtBQUFBLElBQ0EsYUFBaUM7QUFDL0IsYUFBTyxLQUFLLFdBQVcsUUFBUSxFQUFFLE1BQU0sS0FBSztBQUFBLElBQzlDO0FBQUE7QUFBQSxJQUdBLGtCQUEwQjtBQUN4QixhQUFPLEtBQUssV0FBVyxRQUFRLEVBQUUsY0FBYztBQUFBLElBQ2pEO0FBQUEsSUFFQSxjQUFzQjtBQUNwQixhQUFPLEtBQUssV0FBVyxRQUFRLEVBQUUsVUFBVTtBQUFBLElBQzdDO0FBQUEsSUFDQSxpQkFBeUI7QUFDdkIsYUFBTyxLQUFLLFdBQVcsUUFBUSxFQUFFLGFBQWE7QUFBQSxJQUNoRDtBQUFBLElBQ0EsYUFBcUI7QUFDbkIsYUFBTyxLQUFLLFdBQVcsUUFBUSxFQUFFLFNBQVM7QUFBQSxJQUM1QztBQUFBLElBQ0EsZ0JBQXdCO0FBQ3RCLGFBQU8sS0FBSyxXQUFXLFFBQVEsRUFBRSxZQUFZO0FBQUEsSUFDL0M7QUFBQSxJQUNBLGFBQXFCO0FBQ25CLGFBQU8sS0FBSyxXQUFXLFFBQVEsRUFBRSxTQUFTO0FBQUEsSUFDNUM7QUFBQSxJQUNBLG9CQUE0QjtBQUMxQixZQUFNLGFBQWEsS0FBSyxjQUFjO0FBQ3RDLFVBQUksQ0FBQztBQUFZLGVBQU87QUFDeEIsWUFBTSxrQkFBa0IsV0FBVyxNQUFNLG1CQUFtQjtBQUU1RCxVQUFJLG1CQUFtQixnQkFBZ0IsU0FBUyxHQUFHO0FBQ2pELGVBQU8sZ0JBQWdCLENBQUM7QUFBQSxNQUMxQixPQUFPO0FBQ0wsY0FBTSxvQkFBb0IsV0FBVyxNQUFNLGFBQWE7QUFDeEQsZUFBTyxvQkFDSCxrQkFBa0IsQ0FBQyxFQUFFLFdBQVcsS0FBSyxFQUFFLEVBQUUsUUFBUSxLQUFLLEVBQUUsSUFDeEQ7QUFBQSxNQUNOO0FBQUEsSUFDRjtBQUFBLElBQ0EsWUFBb0I7QUFDbEIsYUFBTyxLQUFLLFdBQVcsUUFBUTtBQUFBLElBQ2pDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1BLDBCQUFvQztBQUNsQyxVQUFHLEtBQUssV0FBVyxRQUFRLEtBQUssS0FBSyxXQUFXLFFBQVEsRUFBRSxhQUFhLEdBQUc7QUFJeEUsZUFBTyxRQUFnQixPQUFPLEtBQUssS0FBSyxXQUFXLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUFBLE1BQzlFLE9BQ0s7QUFFSCxlQUFPLENBQUM7QUFBQSxNQUNWO0FBQUEsSUFDRjtBQUFBLElBRUEsdUJBQXVCLElBQW9CO0FBQ3pDLGFBQU8sWUFBWSxFQUFFO0FBQUEsSUFDdkI7QUFBQSxJQUVBLGtCQUFrQixJQUEyQjtBQUMzQyxhQUFPLFFBQVE7QUFBQSxRQUFTLFFBQVEsS0FBSyxXQUFXLFFBQVEsRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLEVBQ3ZFLE9BQU8sQ0FBQyxTQUFTO0FBQ2hCLGlCQUFPLE9BQU8sU0FBUyxZQUFZLFNBQVM7QUFBQSxRQUM5QyxDQUFDO0FBQUEsTUFDTDtBQUFBLElBQ0Y7QUFBQSxJQUVBLG9CQUE4QjtBQUM1QixhQUFPLFFBQVEsS0FBSyxXQUFXLGtCQUFrQixDQUFDO0FBQUEsSUFDcEQ7QUFBQSxJQUNBLGVBQXlCO0FBRXZCLGFBQU8sUUFBUSxLQUFLLFdBQVcsTUFBTSxDQUFDO0FBQUEsSUFDeEM7QUFBQTtBQUFBLElBR0EsaUJBQTJCO0FBQ3pCLGFBQU8sQ0FBQztBQUFBLElBQ1Y7QUFBQTtBQUFBLElBR0EsZUFBeUI7QUFDdkIsYUFBTyxRQUFRLEtBQUssV0FBVyxXQUFXLENBQUM7QUFBQSxJQUM3QztBQUFBLElBQ0EsbUJBQTJCO0FBQ3pCLGFBQU8sS0FBSyxXQUFXLFFBQVEsRUFBRSxlQUFlO0FBQUEsSUFDbEQ7QUFBQSxFQUNGOzs7QUM1SU8sTUFBTSxpQkFBTixNQUEyQztBQUFBLElBQ2hEO0FBQUEsSUFFQSxZQUFZLFlBQTRCO0FBQ3RDLFdBQUssYUFBYTtBQUFBLElBQ3BCO0FBQUEsSUFFQSxxQkFBNkI7QUFDM0IsYUFBTyxLQUFLLFdBQVc7QUFBQSxJQUN6QjtBQUFBLElBRUEsaUJBQXlCO0FBQ3ZCLGFBQU8sS0FBSyxXQUFXLE9BQU8sQ0FBQyxPQUFPLGFBQWEsUUFBUSxTQUFTLGVBQWUsR0FBRyxDQUFDO0FBQUEsSUFDekY7QUFBQSxJQUVBLGdCQUF3QjtBQUN0QixhQUFPLEtBQUssV0FBVyxPQUFPLENBQUMsT0FBTyxhQUFhLFFBQVEsU0FBUyxjQUFjLEdBQUcsQ0FBQztBQUFBLElBQ3hGO0FBQUEsSUFFQSxtQkFBMkI7QUFDekIsYUFBTyxLQUFLLFdBQVcsT0FBTyxDQUFDLE9BQU8sYUFBYSxRQUFRLFNBQVMsaUJBQWlCLEdBQUcsQ0FBQztBQUFBLElBQzNGO0FBQUEsSUFFQSxvQkFBNEI7QUFDMUIsYUFBTyxLQUFLLFdBQVcsT0FBTyxDQUFDLE9BQU8sYUFBYSxRQUFRLFNBQVMsa0JBQWtCLEdBQUcsQ0FBQztBQUFBLElBQzVGO0FBQUEsRUFDRjs7O0FDckJPLE1BQWUsWUFBZixNQUEwQztBQUFBLElBQy9DO0FBQUEsSUFFQSxZQUFZLFlBQWlCO0FBQzNCLFdBQUssYUFBYTtBQUFBLElBQ3BCO0FBQUEsSUFFQSxXQUErQjtBQUM3QixhQUFPLFFBQVEsU0FBaUIsS0FBSyxXQUFXLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUFBLElBQy9EO0FBQUE7QUFBQSxJQUdBLFFBQWdCO0FBQ2QsYUFBTyxLQUFLLFdBQVcsSUFBSTtBQUFBLElBQzdCO0FBQUEsSUFFQSxTQUFpQjtBQUNmLGFBQU8sS0FBSyxXQUFXLEtBQUs7QUFBQSxJQUM5QjtBQUFBLElBRUEsVUFBeUI7QUFDdkIsWUFBTSxRQUFRLEtBQUssV0FBVyxNQUFNO0FBRXBDLGlCQUFXLFFBQVEsT0FBTztBQUN4QixZQUNFLGdCQUFnQixJQUFJLEdBQ3BCO0FBQ0EsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUVBLFlBQU0sSUFBSSxNQUFNLGNBQWM7QUFBQSxJQUNoQztBQUFBLElBRUEsZ0JBQW1GO0FBQ2pGLFlBQU0sT0FBTyxLQUFLLFFBQVE7QUFFMUIsY0FBUSxNQUFNO0FBQUEsUUFDWixLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQVksS0FBSztBQUFBLFFBQXNCLEtBQUs7QUFBQSxRQUFnQixLQUFLO0FBQ3BFLGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNUO0FBQ0UsZ0JBQU0sSUFBSSxNQUFNLGNBQWM7QUFBQSxNQUNsQztBQUFBLElBQ0Y7QUFBQSxJQUVBLGNBQXdCO0FBQ3RCLGFBQU8sUUFBUSxLQUFLLFdBQ2xCLGlEQUNGLENBQUM7QUFBQSxJQUNIO0FBQUEsSUFFQSxVQUFrQjtBQUNuQixhQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7QUFBQSxJQUN2QjtBQUFBLElBRUEsV0FBcUI7QUFDbkIsWUFBTSxTQUFTLFFBQVE7QUFBQSxRQUNyQixLQUFLLFdBQVcsT0FBTztBQUFBLE1BQ3pCO0FBQ0EsVUFBSSxVQUFVLE9BQU8sU0FBUyxHQUFHO0FBQy9CLGVBQU8sT0FBTyxJQUFJLFdBQVMsTUFBTSxLQUFLO0FBQUEsTUFDeEM7QUFDQSxhQUFPLENBQUMsS0FBSyxPQUFPLENBQUM7QUFBQSxJQUN2QjtBQUFBLElBRUEsaUJBQXlCO0FBQ3ZCLFlBQU0sYUFBYSxRQUFRLFNBQWMsS0FBSyxXQUFXLFlBQVksQ0FBQztBQUN0RSxVQUFJLGNBQWMsV0FBVyxTQUFTLEdBQUc7QUFDdkMsZUFBTyxXQUFXLElBQUksQ0FBQyxRQUFRLElBQUksU0FBUyxFQUFFLEVBQUUsS0FBSyxHQUFHO0FBQUEsTUFDMUQ7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsZ0JBQXdCO0FBQ3RCLGFBQU8sS0FBSyxXQUFXLFlBQVk7QUFBQSxJQUNyQztBQUFBLElBRUEsZUFBZSxJQUFZO0FBQ3pCLFlBQU0saUJBQWlCLEtBQUssV0FBVyxnQkFBZ0I7QUFDdkQsVUFBSSxnQkFBZ0I7QUFDbEIsY0FBTSxRQUEwQixRQUFRLFNBQWtCLGVBQWUsRUFBRSxHQUFHLEtBQU07QUFDcEYsZUFBTyxNQUFNLENBQUMsR0FBRyxTQUFTO0FBQUEsTUFDNUIsT0FBTztBQUNMLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLElBSUEsa0JBQWtCLElBQTJCO0FBQzNDLGFBQU8sUUFBUSxTQUFTLFFBQVEsS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQUEsSUFDdEQ7QUFBQSxJQUVBLHVCQUF1QixJQUFvQjtBQUN6QyxhQUFPLEtBQUssZUFBZSxFQUFFO0FBQUEsSUFDL0I7QUFBQSxJQUVBLG9CQUFvQztBQUNsQyxhQUFPLElBQUksZUFBZSxLQUFLLFdBQVcsZ0JBQWdCLEtBQUssQ0FBQyxDQUFDO0FBQUEsSUFDbkU7QUFBQSxJQUVBLGtCQUEwQjtBQUN4QixVQUFJLEtBQUssV0FBVyxxQ0FBcUMsR0FBRztBQUMxRCxlQUFPLEtBQUssV0FBVyxxQ0FBcUM7QUFBQSxNQUM5RDtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjs7O0FDbEhPLE1BQWUsYUFBZixjQUFrQyxVQUEyQjtBQUFBLElBS2xFLGNBQXVCO0FBQ3JCLGFBQU8sS0FBSyxXQUFXLG9CQUFvQjtBQUFBLElBQzdDO0FBQUEsSUFFQSxlQUF3QjtBQUN0QixhQUNFLEtBQUssV0FBVywwQ0FBMEM7QUFBQSxJQUU5RDtBQUFBLElBRUEsd0JBQWdDO0FBRTlCLGFBQU8sS0FBSyxXQUFXLCtDQUErQztBQUFBLElBQ3hFO0FBQUEsSUFFQSx1QkFBdUM7QUFDckMsYUFBTyxRQUFRO0FBQUEsUUFDYixLQUFLLFdBQVcsNENBQTRDO0FBQUEsTUFDOUQsRUFBRTtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ04sS0FBSyxXQUFXLGtEQUFrRDtBQUFBLFFBQ3BFO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUVBLDRCQUFvQztBQUNsQyxhQUFPLEtBQUssV0FBVyw0Q0FBNEM7QUFBQSxJQUNyRTtBQUFBLElBRUEsaUJBQWlDO0FBQy9CLGFBQU8sUUFBUSxTQUFjLEtBQUssV0FBVyxhQUFhLENBQUM7QUFBQSxJQUM3RDtBQUFBLElBRUEsd0JBQXdDO0FBQ3RDLGFBQU8sUUFBUSxTQUFjLEtBQUssV0FBVyxZQUFZLENBQUM7QUFBQSxJQUM1RDtBQUFBLElBRUEsb0JBQTZCO0FBQzNCLGFBQU8sS0FBSyxXQUFXLG1CQUFtQjtBQUFBLElBQzVDO0FBQUEsSUFFQSwwQkFBbUM7QUFDakMsYUFBTyxLQUFLLFdBQVcseUJBQXlCO0FBQUEsSUFDbEQ7QUFBQSxJQUVBLGNBQXVCO0FBQ3JCLGFBQU8sS0FBSyxrQkFBa0IsS0FBSyxLQUFLLHdCQUF3QjtBQUFBLElBQ2xFO0FBQUEsSUFFQSxrQkFBNEI7QUFDMUIsYUFBTyxRQUFRLEtBQUssV0FBVyxVQUFVLENBQUM7QUFBQSxJQUM1QztBQUFBLElBRUEsOEJBQXdDO0FBQ3RDLGFBQU8sUUFBUSxLQUFLLFdBQVcsc0JBQXNCLENBQUM7QUFBQSxJQUN4RDtBQUFBLElBRUEsY0FBYztBQUNaLGFBQU8sUUFBUSxTQUFjLEtBQUssV0FBVyxTQUFTLENBQUM7QUFBQSxJQUN6RDtBQUFBLElBRUEsZUFBeUI7QUFDdkIsYUFBUSxLQUFLLFdBQVcsV0FBVyxLQUFLLENBQUM7QUFBQSxJQUMzQztBQUFBLElBRUEscUJBQTRCO0FBQzFCLGFBQVEsS0FBSyxXQUFXLHdEQUF3RCxLQUFLLENBQUM7QUFBQSxJQUN4RjtBQUFBLElBRUEsZUFBeUI7QUFDdkIsYUFBUSxLQUFLLFdBQVcsV0FBVyxLQUFLLENBQUM7QUFBQSxJQUMzQztBQUFBLElBRUEsd0JBQWlDO0FBQy9CLGFBQVEsS0FBSyxXQUFXLHNCQUFzQixLQUFLO0FBQUEsSUFDckQ7QUFBQSxJQUVBLGVBQXVCO0FBQ3JCLGFBQU8sS0FBSyxXQUFXLE9BQU8sS0FBSyxLQUFLLFdBQVcsV0FBVztBQUFBLElBQ2hFO0FBQUEsSUFFQSxnQkFBbUM7QUFDakMsYUFBTyxRQUFRO0FBQUEsUUFDYjtBQUFBLFVBQUUsR0FBRyxRQUFRLEtBQUssV0FBVyx1Q0FBdUMsS0FBSyxDQUFDLENBQUM7QUFBQSxVQUN6RSxHQUFHLFFBQVEsS0FBSyxXQUFXLHFDQUFxQyxLQUFLLENBQUMsQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUM3RTtBQUFBLElBQ0Y7QUFBQSxJQUVBLGtDQUFrQyxXQUE0QjtBQUM1RCxhQUFPLFVBQVUsV0FBVyxzQ0FBc0MsS0FDOUQsVUFBVSxXQUFXLDJCQUEyQixLQUNoRCxVQUFVLFdBQVcsa0NBQWtDLEtBQ3ZELFVBQVUsV0FBVyxvQkFBb0I7QUFBQSxJQUMvQztBQUFBLElBQ0EsMEJBQW9DO0FBQ2xDLFlBQU0sdUJBQXVCLFFBQVEsS0FBSyxXQUFXLG9CQUFvQixDQUFDO0FBQzFFLFlBQU0sb0JBQW9CLFFBQVEsS0FBSyxXQUFXLGlCQUFpQixDQUFDO0FBQ3BFLFlBQU0seUJBQXlCO0FBQUEsUUFDN0IsS0FBSyxXQUFXLHNCQUFzQjtBQUFBLE1BQ3hDO0FBQ0EsWUFBTSx1QkFBdUIsb0JBQUksSUFBSTtBQUVyQyxpQkFBVyxhQUFhLE9BQU8sS0FBSyxLQUFLLFVBQVUsR0FBRztBQUdwRCxZQUFJLFVBQVUsUUFBUSxLQUFLLE1BQU07QUFBSTtBQUdyQyxZQUFJLFVBQVUsV0FBVyw0QkFBNEI7QUFBRztBQUd4RCxZQUFJLGNBQWM7QUFBeUM7QUFDM0QsWUFBSSxjQUFjO0FBQXVDO0FBR3pELFlBQUksQ0FBQyxLQUFLLGtDQUFrQyxTQUFTLEdBQUc7QUFDdEQsZ0JBQU0sZUFBZSxLQUFLLGtCQUFrQixFQUFFLElBQUksU0FBUztBQUMzRCxjQUFJLGdCQUFnQixVQUFhLGFBQWEsS0FBSyxRQUFRLGdCQUFnQixNQUFNO0FBQUk7QUFDckYsY0FBSSxnQkFBZ0IsVUFBYSxhQUFhLEtBQUssUUFBUSxjQUFjLE1BQU07QUFBSTtBQUFBLFFBQ3JGO0FBSUEsWUFDRSxxQkFBcUIsUUFBUSxTQUFTLE1BQU0sTUFDNUMsa0JBQWtCLFFBQVEsU0FBUyxNQUFNLE1BQ3pDLHVCQUF1QixRQUFRLFNBQVMsTUFBTSxJQUM5QztBQUNBO0FBQUEsUUFDRjtBQUdBLFlBQ0UsVUFBVSxXQUFXLHVDQUF1QyxLQUM1RCxVQUFVLFdBQVcsNkNBQTZDLEtBQ2xFLFVBQVUsV0FBVyxnQ0FBZ0MsR0FDckQ7QUFFQSxjQUNFLGNBQWMsa0RBQ2QsY0FBYztBQUFBLFVBRWQsY0FBYyxpREFDZDtBQUNBO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFLQSxZQUNFLGNBQWMsMkRBQ2QsY0FBYyxtREFDZDtBQUNBO0FBQUEsUUFDRjtBQUVBLDZCQUFxQixJQUFJLFNBQVM7QUFBQSxNQUNwQztBQUtBLGFBQU8sTUFBTSxLQUFLLG9CQUFvQjtBQUFBLElBQ3hDO0FBQUEsSUFFQSxnQ0FBd0M7QUFDdEMsYUFBTyxLQUFLLFdBQVcsNEJBQTRCLElBQy9DLFNBQVMsS0FBSyxXQUFXLDRCQUE0QixDQUFDLElBQ3REO0FBQUEsSUFDTjtBQUFBLElBRUEsb0JBQTRCO0FBQzFCLGFBQU8sS0FBSyxXQUFXLHNCQUFzQixJQUN6QyxTQUFTLEtBQUssV0FBVyxzQkFBc0IsQ0FBQyxJQUNoRDtBQUFBLElBQ047QUFBQSxJQUVBLHVDQUF1QyxXQUF3QjtBQUM3RCxZQUFNLHNCQUFzQixRQUFRO0FBQUEsUUFDbEMsS0FBSyxXQUFXLG9CQUFvQjtBQUFBLE1BQ3RDO0FBRUEsaUJBQVcsS0FBSyxxQkFBcUI7QUFDbkMsWUFBSSxFQUFFLFVBQVUsV0FBVztBQUN6QixpQkFBTyxFQUFFLFlBQVk7QUFBQSxRQUN2QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjs7O0FDbk1PLE1BQU0sWUFBTixjQUF3QixXQUE0QjtBQUFBLElBQ3pELGFBQTZCO0FBQzNCLGFBQU8sUUFBUTtBQUFBLFFBQ2IsS0FBSyxXQUFXLG9CQUFvQjtBQUFBLE1BQ3RDO0FBQUEsSUFDRjtBQUFBLElBQ0EsbUJBQW1DO0FBQ2pDLGFBQU8sUUFBUTtBQUFBLFFBQ2IsS0FBSyxXQUFXLGlEQUFpRDtBQUFBLE1BQ25FO0FBQUEsSUFDRjtBQUFBLElBQ0EsaUJBQWlDO0FBQy9CLGFBQU8sUUFBUTtBQUFBLFFBQ2IsS0FBSyxXQUFXLCtDQUErQztBQUFBLE1BQ2pFO0FBQUEsSUFDRjtBQUFBLElBRUEsa0JBQWtCO0FBQ25CLGFBQU8sUUFBUSxLQUFLLFdBQVcsNENBQTRDLENBQUM7QUFBQSxJQUMzRTtBQUFBLElBRUEsWUFBWTtBQUNWLGFBQU8sUUFBUSxLQUFLLFdBQVcsc0NBQXNDLENBQUM7QUFBQSxJQUN4RTtBQUFBLElBRUEsYUFBb0I7QUFDbEIsYUFBTyxRQUFRLEtBQUssV0FBVyx1REFBdUQsQ0FBQyxLQUFLLENBQUM7QUFBQSxJQUMvRjtBQUFBLEVBQ0Y7OztBQzVCTyxNQUFNLGVBQU4sY0FBMkIsV0FBOEI7QUFBQSxJQUM5RCxhQUE2QjtBQUMzQixhQUFPLFFBQVE7QUFBQSxRQUNiLEtBQUssV0FBVyxvREFBb0Q7QUFBQSxNQUN0RTtBQUFBLElBQ0Y7QUFBQSxJQUNBLG1CQUFtQztBQUNqQyxhQUFPLFFBQVE7QUFBQSxRQUNiLEtBQUssV0FBVyxvREFBb0Q7QUFBQSxNQUN0RTtBQUFBLElBQ0Y7QUFBQSxJQUNBLGlCQUFpQztBQUMvQixhQUFPLFFBQVE7QUFBQSxRQUNiLEtBQUssV0FBVyxrREFBa0Q7QUFBQSxNQUNwRTtBQUFBLElBQ0Y7QUFBQSxJQUdBLGtCQUFrQjtBQUNuQixhQUFPLFFBQVEsS0FBSyxXQUFXLG9EQUFvRCxDQUFDO0FBQUEsSUFDbkY7QUFBQSxJQUVBLGVBQWU7QUFDYixhQUFPLFFBQVEsS0FBSyxXQUFXLHlDQUF5QyxDQUFDO0FBQUEsSUFDM0U7QUFBQSxJQUVBLFlBQVk7QUFDVixhQUFPLFFBQVEsS0FBSyxXQUFXLDZDQUE2QyxDQUFDO0FBQUEsSUFDL0U7QUFBQSxJQUVBLFdBQVc7QUFDVCxhQUFPLFFBQVEsS0FBSyxXQUFXLDRDQUE0QyxDQUFDO0FBQUEsSUFDOUU7QUFBQSxJQUVBLG9CQUFtQztBQUNwQyxhQUFPLFFBQVE7QUFBQSxRQUNkLEtBQUssV0FBVyxrREFBa0Q7QUFBQSxNQUNuRTtBQUFBLElBQ0M7QUFBQSxFQUVGOzs7QUN4Q08sTUFBTSxpQkFBTixjQUE2QixXQUFnQztBQUFBLElBQ2xFLGFBQWE7QUFDWCxhQUFPLFFBQVE7QUFBQSxRQUNiLEtBQUssV0FBVyxjQUFjO0FBQUEsTUFDaEM7QUFBQSxJQUNGO0FBQUEsSUFDQSxpQkFBaUI7QUFDZixhQUFPLENBQUM7QUFBQSxJQUNWO0FBQUEsSUFDQSxtQkFBbUM7QUFDakMsYUFBTyxRQUFRLFNBQWMsQ0FBQyxDQUFDO0FBQUEsSUFDakM7QUFBQSxJQUVBLG1CQUFtQjtBQUNqQixhQUFPO0FBQUEsUUFDTCxLQUFLLFdBQVcsNkNBQTZDO0FBQUEsTUFDL0Q7QUFBQSxJQUNGO0FBQUEsSUFFQSxZQUFZO0FBQ1YsYUFBTyxRQUFRLEtBQUssV0FBVyxzQ0FBc0MsQ0FBQztBQUFBLElBQ3hFO0FBQUEsSUFFQSxxQkFBK0I7QUFDN0IsWUFBTSxXQUFnQixLQUFLLFlBQVk7QUFFdkMsVUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLFFBQVEsUUFBUSxHQUFHO0FBQ3pDLGVBQU8sQ0FBQztBQUFBLE1BQ1Y7QUFFQSxhQUFPLFNBQVM7QUFBQSxRQUNkLENBQUMsTUFDQyxNQUFNLG9EQUNULEVBQUcsT0FBTyxNQUFNLGFBQWEsQ0FBQyxFQUFFLFdBQVcsdUNBQXVDO0FBQUEsTUFDbkY7QUFBQSxJQUNGO0FBQUEsRUFFRjs7O0FDckNPLE1BQU0sZUFBTixjQUEyQixVQUE2QjtBQUFBLElBQzdELGdCQUF3QjtBQUN0QixhQUFPLEtBQUssV0FBVyxZQUFZO0FBQUEsSUFDckM7QUFBQSxJQUNBLFVBQWtCO0FBQ2hCLFlBQU0sUUFBUSxRQUFRO0FBQUEsUUFDcEIsS0FBSyxXQUFXLE9BQU8sS0FBSyxLQUFLLFdBQVcsT0FBTyxLQUFLO0FBQUEsTUFDMUQ7QUFDQSxhQUFRLE1BQU0sQ0FBQyxLQUFLLE1BQU0sQ0FBQyxFQUFFLFNBQVUsS0FBSyxjQUFjO0FBQUEsSUFDNUQ7QUFBQSxJQUNBLGlCQUF5QjtBQUN2QixZQUFNLGVBQWUsUUFBUTtBQUFBLFFBQzNCLEtBQUssV0FBVyxZQUFZLEtBQUssS0FBSyxXQUFXLGFBQWEsS0FBSztBQUFBLE1BQ3JFO0FBQ0EsYUFBUSxhQUFhLENBQUMsS0FBSyxhQUFhLENBQUMsRUFBRSxTQUFVO0FBQUEsSUFDdkQ7QUFBQSxJQUVBLGNBQXdCO0FBQ3RCLGFBQU8sUUFBUSxLQUFLLFdBQVcseUNBQXlDLENBQUM7QUFBQSxJQUMzRTtBQUFBLElBRUEseUJBQWlDO0FBQy9CLGFBQU8sS0FBSyxXQUFXLHFCQUFxQjtBQUFBLElBQzlDO0FBQUEsSUFDQSxpQkFBeUI7QUFDdkIsYUFBTyxTQUFTLEtBQUssV0FBVyxrQkFBa0IsQ0FBQztBQUFBLElBQ3JEO0FBQUEsSUFDQSxnQkFBd0I7QUFDdEIsYUFBTyxTQUFTLEtBQUssV0FBVyxpQkFBaUIsQ0FBQztBQUFBLElBQ3BEO0FBQUEsSUFDQSxtQkFBMkI7QUFDekIsYUFBTyxTQUFTLEtBQUssV0FBVyxvQkFBb0IsQ0FBQztBQUFBLElBQ3ZEO0FBQUEsSUFDQSxvQkFBNEI7QUFDMUIsYUFBTyxTQUFTLEtBQUssV0FBVyxxQkFBcUIsQ0FBQztBQUFBLElBQ3hEO0FBQUEsSUFDQSxhQUFxQjtBQUNuQixhQUFPLEtBQUssV0FBVyxhQUFhLEtBQUs7QUFBQSxJQUMzQztBQUFBLElBQ0Esa0JBQTBCO0FBQ3hCLGFBQU8sS0FBSyxXQUFXLGVBQWU7QUFBQSxJQUN4QztBQUFBLElBQ0EsY0FBc0I7QUFDcEIsYUFBTyxLQUFLLFdBQVcsVUFBVTtBQUFBLElBQ25DO0FBQUEsSUFDQSxpQkFBeUI7QUFDdkIsYUFBTyxLQUFLLFdBQVcsY0FBYztBQUFBLElBQ3ZDO0FBQUEsSUFDQSxhQUFxQjtBQUNuQixhQUFPLEtBQUssV0FBVyxTQUFTO0FBQUEsSUFDbEM7QUFBQSxJQUNBLGdCQUF3QjtBQUN0QixhQUFPLEtBQUssV0FBVywwQ0FBMEM7QUFBQSxJQUNuRTtBQUFBLElBQ0EsYUFBcUI7QUFDbkIsYUFBTyxLQUFLLFdBQVcsMkNBQTJDO0FBQUEsSUFDcEU7QUFBQSxJQUNBLG9CQUE0QjtBQUMxQixZQUFNLGFBQWEsS0FBSyxjQUFjO0FBQ3RDLFVBQUksQ0FBQztBQUFZLGVBQU87QUFDeEIsWUFBTSxrQkFBa0IsV0FBVyxNQUFNLG1CQUFtQjtBQUU1RCxVQUFJLG1CQUFtQixnQkFBZ0IsU0FBUyxHQUFHO0FBQ2pELGVBQU8sZ0JBQWdCLENBQUM7QUFBQSxNQUMxQixPQUFPO0FBQ0wsY0FBTSxvQkFBb0IsV0FBVyxNQUFNLGFBQWE7QUFDeEQsZUFBTyxvQkFDSCxrQkFBa0IsQ0FBQyxFQUFFLFdBQVcsS0FBSyxFQUFFLEVBQUUsUUFBUSxLQUFLLEVBQUUsSUFDeEQ7QUFBQSxNQUNOO0FBQUEsSUFDRjtBQUFBLElBQ0EsWUFBb0I7QUFDbEIsYUFBTyxLQUFLLFdBQVcsUUFBUTtBQUFBLElBQ2pDO0FBQUEsSUFDQSwwQkFBb0M7QUFDbEMsWUFBTSx1QkFBdUIsb0JBQUksSUFBSTtBQUVyQyxpQkFBVyxhQUFhLE9BQU8sS0FBSyxLQUFLLFVBQVUsR0FBRztBQUdwRCxZQUFJLFVBQVUsUUFBUSxLQUFLLE1BQU07QUFBSTtBQUVyQyxZQUFJLGNBQWMsOENBQThDO0FBRTlEO0FBQUEsUUFDRjtBQUdBLFlBQ0UsRUFDRSxVQUFVLFdBQVcsdUNBQXVDLEtBQzVELFVBQVUsV0FBVyw2Q0FBNkMsS0FDbEUsVUFBVSxXQUFXLGdDQUFnQyxJQUV2RDtBQUNBLCtCQUFxQixJQUFJLFNBQVM7QUFBQSxRQUNwQztBQUFBLE1BQ0Y7QUFFQSxhQUFPLE1BQU0sS0FBSyxvQkFBb0I7QUFBQSxJQUN4QztBQUFBLElBQ0Esb0JBQThCO0FBQzVCLGFBQU8sUUFBUSxLQUFLLFdBQVcsa0JBQWtCLENBQUM7QUFBQSxJQUNwRDtBQUFBLElBQ0EsZUFBeUI7QUFDdkIsYUFBTyxRQUFRLEtBQUssV0FBVyxVQUFVLENBQUM7QUFBQSxJQUM1QztBQUFBLElBQ0EsaUJBQTJCO0FBQ3pCLGFBQU8sUUFBUSxLQUFLLFdBQVcsYUFBYSxDQUFDO0FBQUEsSUFDL0M7QUFBQSxJQUNBLGVBQXlCO0FBQ3ZCLGFBQU8sUUFBUSxLQUFLLFdBQVcsV0FBVyxDQUFDO0FBQUEsSUFDN0M7QUFBQTtBQUFBLElBR0EsbUJBQTJCO0FBQ3pCLGFBQU8sS0FBSyxXQUFXLGVBQWU7QUFBQSxJQUN4QztBQUFBLEVBQ0Y7OztBQ3ZITyxXQUFTLGtCQUFrQixVQUFlO0FBQy9DLFFBQUk7QUFDSixRQUFJLFNBQVMsV0FBVyxNQUFNLFVBQWEsU0FBUyxlQUFlLE1BQU07QUFBVyxrQkFBWTtBQUFBLGFBQ3ZGLFNBQVMsVUFBVSxNQUFNLFVBQWEsU0FBUyxpQkFBaUIsTUFBTTtBQUFXLGtCQUFZO0FBQUE7QUFDakcsWUFBTSxNQUFNO0FBQUEsR0FBd0YsS0FBSyxVQUFVLFFBQVEsQ0FBQyxFQUFFO0FBRW5JLFFBQUksYUFBd0M7QUFDNUMsUUFBSSxXQUFXO0FBQ2IsVUFBSSxTQUFTLFdBQVcsTUFBTSxRQUFXO0FBQ3ZDLHFCQUFhO0FBQUEsTUFDZixPQUNLO0FBQ0gsWUFBSSxTQUFTLFdBQVcsRUFBRSxPQUFPLE1BQU07QUFBVyx1QkFBYTtBQUFBLGlCQUN0RCxTQUFTLFdBQVcsRUFBRSxZQUFZLE1BQU07QUFBVyx1QkFBYTtBQUFBLGlCQUNoRSxTQUFTLFdBQVcsRUFBRSxhQUFhLE1BQU07QUFBVyx1QkFBYTtBQUFBLE1BQzVFO0FBQUEsSUFDRixPQUNLO0FBQ0gsVUFBSSxTQUFTLFVBQVUsTUFBTSxRQUFXO0FBQ3RDLHFCQUFhO0FBQUEsTUFDZixPQUNLO0FBQ0gsWUFBSSxTQUFTLFVBQVUsRUFBRSxDQUFDLE1BQU07QUFBVyxnQkFBTSxNQUFNLGlCQUFpQjtBQUV4RSxxQkFBYSx1QkFBdUIsU0FBUyxVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztBQUFBLE1BQ3JFO0FBQUEsSUFDRjtBQUVBLFFBQUksZUFBZTtBQUFXLFlBQU0sTUFBTSw4Q0FBOEM7QUFFeEYsV0FBTyw2Q0FBNkMsVUFBVSxZQUFZLFNBQVM7QUFBQSxFQUNyRjtBQUVBLFdBQVMsNkNBQTZDLFVBQWUsWUFBb0IsV0FBMkI7QUFDbEgsWUFBUSxZQUFZO0FBQUEsTUFDbEIsS0FBSztBQUNILGVBQU8sWUFBWSxJQUFJLGFBQWEsUUFBUSxJQUFJLElBQUksYUFBYSxRQUFRO0FBQUEsTUFFM0UsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNILGVBQU8sWUFBWSxJQUFJLFVBQVUseUJBQXlCLFFBQVEsU0FBUyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksSUFBSSxVQUFVLHlCQUF5QixRQUFRLFNBQVMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQUEsTUFFbk0sS0FBSztBQUNILGVBQU8sWUFBWSxJQUFJLGFBQWEseUJBQXlCLFFBQVEsU0FBUyxXQUFXLEVBQUUsWUFBWSxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksSUFBSSxhQUFhLHlCQUF5QixRQUFRLFNBQVMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQUEsTUFFOU0sS0FBSztBQUNILGVBQU8sWUFBWSxJQUFJLGVBQWUseUJBQXlCLFFBQVEsU0FBUyxXQUFXLEVBQUUsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksSUFBSSxlQUFlLHlCQUF5QixRQUFRLFNBQVMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQUEsTUFFbk47QUFDRSxjQUFNLE1BQU0sMEJBQTBCLGFBQWEsMkVBQTJFO0FBQUEsSUFDbEk7QUFBQSxFQUNGO0FBU08sV0FBUyx5QkFBeUIscUJBQTRCLFdBQW9CLFlBQXFCO0FBQzVHLFFBQUksWUFBWTtBQUNkLFlBQU0sbUJBQW1CLFFBQVEsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLFlBQVksWUFBWSxPQUFPLGVBQWUsSUFBSSxPQUFPLFlBQVksTUFBTSxVQUFVO0FBQ25KLFVBQUksaUJBQWlCLFNBQVM7QUFBRyxlQUFPLGlCQUFpQixDQUFDO0FBQUE7QUFDckQsZ0JBQVEsTUFBTSxzQkFBc0IsVUFBVSxpQ0FBaUM7QUFBQSxJQUN0RjtBQUVBLFVBQU0sc0JBQXNCLFFBQVEsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLFdBQVcsWUFBWSxPQUFPLHNCQUFzQixJQUFJLE9BQU8sb0JBQW9CLENBQUM7QUFDckosUUFBSSxvQkFBb0IsU0FBUztBQUFHLGFBQU8sb0JBQW9CLENBQUM7QUFBQSxhQUN2RCxvQkFBb0IsU0FBUztBQUFHLGFBQU8sb0JBQW9CLENBQUM7QUFBQTtBQUNoRSxZQUFNLE1BQU0saUJBQWlCO0FBQUEsRUFDcEM7OztBQ3BFTyxNQUFNLFdBQU4sTUFBZTtBQUFBLElBQ2xCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNQSxZQUFZLFlBQXdCLHVCQUFnQztBQUNoRSxXQUFLLGFBQWE7QUFDbEIsV0FBSyxpQkFBaUIsQ0FBQztBQUN2QixXQUFLLFdBQVc7QUFDaEIsV0FBSyxVQUFVO0FBQ2YsV0FBSyx3QkFBd0I7QUFBQSxJQUNqQztBQUFBLElBRUEsU0FBUyxPQUFpQjtBQUN0QixXQUFLLGVBQWUsS0FBSyxLQUFLO0FBQUEsSUFDbEM7QUFBQSxFQUNKO0FBRUEsTUFBTSxvQ0FBNkM7QUFDbkQsTUFBTSwrQkFBd0M7QUFFdkMsTUFBTSxZQUFOLE1BQWdCO0FBQUEsSUFDbkI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQTtBQUFBLElBQ1U7QUFBQSxJQUNWO0FBQUEsSUFFQSwwQkFBbUM7QUFBQSxJQUNuQztBQUFBLElBQ0Esc0JBQStCO0FBQUEsSUFDckI7QUFBQSxJQUVWO0FBQUE7QUFBQSxJQUVBLFlBQVksT0FZVDtBQUNDLFlBQU07QUFBQSxRQUNGO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0osSUFBSTtBQUVKLFdBQUssdUJBQXVCO0FBQzVCLFdBQUssZUFBZTtBQUNwQixXQUFLLHFCQUFxQjtBQUMxQixXQUFLLFFBQVE7QUFDYixVQUFHLDJCQUEyQjtBQUFXLGFBQUssMEJBQTBCO0FBQ3hFLFVBQUcsdUJBQXVCO0FBQVcsYUFBSyxzQkFBc0I7QUFDaEUsV0FBSyxNQUFNO0FBQ1gsV0FBSyxnQkFBZ0I7QUFDckIsV0FBSyxhQUFhO0FBQ2xCLFdBQUssYUFBYTtBQUNsQixVQUFHLGFBQWE7QUFBVyxhQUFLLFlBQVk7QUFBQSxJQUNoRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFZUSxnQ0FBZ0MsY0FBd0I7QUFDNUQsWUFBTSxXQUFXLEtBQUsscUJBQXFCLElBQUksYUFBYSxXQUFXLEdBQUc7QUFDMUUsVUFBRyxZQUFZO0FBQVcsY0FBTSxNQUFNLDhDQUE4QyxhQUFhLFdBQVcsR0FBRyxzQ0FBc0M7QUFFckosVUFBSSxrQkFBa0I7QUFDdEIsWUFBTSxvQkFBb0IsYUFBYSxlQUFlO0FBQ3RELFVBQUksWUFBWTtBQUVoQixhQUFNLFlBQVksU0FBUyxVQUFVLGtCQUFrQixtQkFBbUI7QUFDdEUsWUFBRyxhQUFhLGVBQWUsZUFBZSxFQUFFLFdBQVcsT0FBTyxTQUFTLFNBQVMsRUFBRSxVQUFVO0FBQzVGO0FBQUEsUUFDSixPQUNLO0FBRUQsdUJBQWEsU0FBUyxJQUFJLFNBQVMsS0FBSyxhQUFhLElBQUksU0FBUyxTQUFTLEVBQUUsUUFBUSxHQUFJLFNBQVMsU0FBUyxFQUFFLHFCQUFxQixDQUFDO0FBQUEsUUFDdkk7QUFDQTtBQUFBLE1BQ0o7QUFDQSxhQUFNLFlBQVksU0FBUyxRQUFRO0FBRS9CLHFCQUFhLFNBQVMsSUFBSSxTQUFTLEtBQUssYUFBYSxJQUFJLFNBQVMsU0FBUyxFQUFFLFFBQVEsR0FBSSxTQUFTLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQztBQUNuSTtBQUFBLE1BQ0o7QUFHQSxlQUFRQyxtQkFBa0Isb0JBQW9CLEdBQUdBLG9CQUFtQixHQUFHQSxvQkFBbUI7QUFDdEYsaUJBQVEsVUFBVUEsbUJBQWtCLEdBQUcsVUFBVSxhQUFhLGVBQWUsUUFBUSxXQUFXO0FBQzVGLGdCQUFNLFdBQVcsYUFBYSxlQUFlLE9BQU87QUFDcEQsZ0JBQU0sV0FBVyxhQUFhLGVBQWUsVUFBVSxDQUFDO0FBRXhELGVBQUksU0FBUyxXQUFXLFNBQVMsU0FBUyxXQUFXLEtBQUssY0FBYyxTQUFTLFdBQVcsU0FBUyxTQUFTLFdBQVcsR0FBRyxJQUFJLEdBQUc7QUFDL0gseUJBQWEsZUFBZSxPQUFPLElBQUk7QUFDdkMseUJBQWEsZUFBZSxVQUFVLENBQUMsSUFBSTtBQUFBLFVBQy9DLE9BQ0s7QUFDRDtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxJQUVBLFVBQVUsYUFBdUI7QUFDN0IsVUFBRyxDQUFDLEtBQUsscUJBQXFCO0FBQzFCLG9CQUFZLGlCQUFpQixDQUFDO0FBQUEsTUFDbEM7QUFBQSxJQUNKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1BLE1BQU0sNkJBQTZCLGNBQXdCO0FBQ3ZELFVBQUcsQ0FBQyxhQUFhLFdBQVc7QUFBYSxjQUFNLE1BQU0sd0JBQXdCLGFBQWEsV0FBVyxHQUFHLG9EQUFvRDtBQUU1SixZQUFNLHFCQUFxQixLQUFLLG1CQUFtQixJQUFJLGFBQWEsV0FBVyxHQUFHO0FBQ2xGLFlBQU0sMkJBQTJCLEtBQUsscUJBQXFCLElBQUksYUFBYSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ2hHLFVBQUcsQ0FBQyxzQkFBc0IsYUFBYSxlQUFlLFVBQVUseUJBQXlCLFFBQVE7QUFDN0YsWUFBRyxDQUFDLG9CQUFvQjtBQUVwQixnQkFBTSxZQUEwQixNQUFNLEtBQUssSUFBSSxzQkFBc0I7QUFBQSxZQUNqRTtBQUFBLFlBQ0EsWUFBWSxLQUFLO0FBQUEsWUFDakIsWUFBWSxLQUFLO0FBQUEsWUFDakIseUJBQXlCLEtBQUs7QUFBQSxZQUM5QixXQUFXLEtBQUs7QUFBQSxVQUNwQixDQUFDLEdBQUc7QUFBQSxZQUNBLENBQUMsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssY0FBYyxFQUFFLFNBQVMsRUFBRSxHQUFHO0FBQUEsVUFDL0Q7QUFHQSxnQkFBTSxjQUFxQyxDQUFDO0FBQzVDLHFCQUFVLFNBQVMsVUFBUztBQUN4QixpQkFBSyxhQUFhLElBQUksTUFBTSxLQUFLLEtBQUs7QUFDdEMsa0JBQU0sY0FBYyxNQUFNLFFBQVEsT0FBTyxDQUFDLFFBQVEsSUFBSSxTQUFTLGFBQWEsV0FBVyxHQUFHO0FBQzFGLHdCQUFZLEtBQUssRUFBQyxVQUFVLE1BQU0sS0FBSyx1QkFBdUIsWUFBWSxTQUFTLEtBQUssWUFBWSxDQUFDLEVBQUUsWUFBWSxJQUFJLFlBQVksQ0FBQyxFQUFFLFlBQVksRUFBRSx1QkFBdUIsSUFBSSxPQUFTLENBQUM7QUFBQSxVQUM3TDtBQUNBLGVBQUsscUJBQXFCLElBQUksYUFBYSxXQUFXLEtBQUssV0FBVztBQUFBLFFBQzFFO0FBRUEsYUFBSyxnQ0FBZ0MsWUFBWTtBQUVqRCxhQUFLLG1CQUFtQixJQUFJLGFBQWEsV0FBVyxHQUFHO0FBQ3ZELGVBQU87QUFBQSxNQUNYO0FBQ0ssZUFBTztBQUFBLElBQ2hCO0FBQUEsRUFDSjs7O0FDeExPLE1BQU0sWUFBTixNQUFrQztBQUFBLElBQ3ZDO0FBQUEsSUFFQSxZQUFZLFlBQTRCO0FBQ3BDLFdBQUssYUFBYTtBQUFBLElBQ3BCO0FBQUEsSUFFRix3QkFBZ0M7QUFDOUIsYUFBTyxLQUFLLFdBQVc7QUFBQSxJQUN6QjtBQUFBLEVBR0E7OztBQ1pLLE1BQU0sa0JBQU4sTUFBOEM7QUFBQSxJQUNuRDtBQUFBLElBRUEsWUFBWSxZQUFpQjtBQUMzQixXQUFLLGFBQWE7QUFBQSxJQUNwQjtBQUFBLElBRUEsaUJBQXlCO0FBQ3ZCLFlBQU0sY0FBYyxLQUFLLFdBQVcsYUFBYTtBQUVqRCxVQUFJLE1BQU0sUUFBUSxXQUFXLEdBQUc7QUFDOUIsZUFBTyxZQUFZLEtBQUssR0FBRztBQUFBLE1BQzdCLFdBQVcsT0FBTyxnQkFBZ0IsVUFBVTtBQUMxQyxlQUFPO0FBQUEsTUFDVCxPQUFPO0FBQ0wsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsSUFFQSxTQUFpQjtBQUNmLGFBQU8sS0FBSyxXQUFXLEtBQUs7QUFBQSxJQUM5QjtBQUFBLElBRUEsV0FBK0I7QUFDN0IsYUFBTyxLQUFLLFdBQVcsT0FBTztBQUFBLElBQ2hDO0FBQUEsSUFFQSxnQkFBd0I7QUFDdEIsYUFBTyxLQUFLLFdBQVcsZUFBZTtBQUFBLElBQ3hDO0FBQUEsSUFFQSxVQUF5QjtBQUN2QixhQUFPLEtBQUssV0FBVyxNQUFNO0FBQUEsSUFDL0I7QUFBQSxJQUVBLGdCQUFtRjtBQUNqRixZQUFNLE9BQU8sS0FBSyxRQUFRO0FBRTFCLGNBQVEsTUFBTTtBQUFBLFFBQ1osS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVDtBQUNFLGdCQUFNLElBQUksTUFBTSxjQUFjO0FBQUEsTUFDbEM7QUFBQSxJQUNGO0FBQUEsSUFFQSxlQUF1QjtBQUNyQixhQUFPLEtBQUssV0FBVyxZQUFZO0FBQUEsSUFDckM7QUFBQSxJQUVBLG1CQUEyQjtBQUN6QixhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsdUJBQStCO0FBQzdCLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjs7O0FDL0RPLE1BQU0sc0JBQU4sTUFBa0Q7QUFBQSxJQUN2RDtBQUFBLElBRUEsWUFBWSxZQUFpQjtBQUMzQixXQUFLLGFBQWE7QUFBQSxJQUNwQjtBQUFBLElBRUEsaUJBQXlCO0FBQ3ZCLFlBQU0sY0FBYyxLQUFLLFdBQVcsYUFBYTtBQUVqRCxVQUFJLE1BQU0sUUFBUSxXQUFXLEdBQUc7QUFDOUIsZUFBTyxZQUFZLEtBQUssR0FBRztBQUFBLE1BQzdCLFdBQVcsT0FBTyxnQkFBZ0IsVUFBVTtBQUMxQyxlQUFPO0FBQUEsTUFDVCxPQUFPO0FBQ0wsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsSUFFQSxTQUFpQjtBQUNmLGFBQU8sS0FBSyxXQUFXLEtBQUs7QUFBQSxJQUM5QjtBQUFBLElBRUEsV0FBK0I7QUFDN0IsYUFBTyxLQUFLLFdBQVcsT0FBTztBQUFBLElBQ2hDO0FBQUEsSUFFQSxnQkFBd0I7QUFDdEIsYUFBTyxLQUFLLFdBQVcsVUFBVTtBQUFBLElBQ25DO0FBQUEsSUFFQSxVQUF5QjtBQUN2QixhQUFPLEtBQUssV0FBVyxNQUFNO0FBQUEsSUFDL0I7QUFBQSxJQUVBLGdCQUFtRjtBQUNqRixZQUFNLE9BQU8sS0FBSyxRQUFRO0FBRTFCLGNBQVEsTUFBTTtBQUFBLFFBQ1osS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVDtBQUNFLGdCQUFNLElBQUksTUFBTSxjQUFjO0FBQUEsTUFDbEM7QUFBQSxJQUNGO0FBQUEsSUFFQSxlQUF1QjtBQUNyQixhQUFPLEtBQUssV0FBVyxZQUFZO0FBQUEsSUFDckM7QUFBQSxJQUVBLG1CQUEyQjtBQUN6QixhQUFPLEtBQUssV0FBVyxhQUFhO0FBQUEsSUFDdEM7QUFBQSxJQUVBLHVCQUErQjtBQUM3QixhQUFPLEtBQUssV0FBVyxRQUFRO0FBQUEsSUFDakM7QUFBQSxFQUNGOzs7QUM5Q0EsV0FBUyxNQUFNLEtBQXNCO0FBQ25DLFdBQU8sUUFBUSx5Q0FBeUMsUUFBUTtBQUFBLEVBQ2xFO0FBZ0VBLE1BQU0sa0NBQWtDO0FBRWpDLE1BQU0sU0FBTixNQUFNLFFBQW1DO0FBQUEsSUFDdEM7QUFBQSxJQUVSLFlBQVksS0FBYTtBQUN2QixXQUFLLGdCQUFnQixjQUFNLE9BQU87QUFBQSxRQUNoQyxTQUFTO0FBQUEsUUFDVCxTQUFTO0FBQUEsVUFDUCxRQUFRO0FBQUEsVUFDUixjQUFjO0FBQUEsUUFDaEI7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUEsSUFFUSxrQkFBa0Isa0JBQXFDLGVBQStCLGVBQStCLFdBQW9CO0FBQy9JLFVBQUksZUFBZTtBQUNqQixlQUFPLEVBQUUsR0FBRyxrQkFBa0IsTUFBTSxHQUFHLGNBQWMsU0FBUyxJQUFJLGNBQWMsT0FBTyxJQUFJLEdBQUcsZUFBZSxHQUFHLEtBQUssaUJBQWlCLFNBQVMsRUFBRTtBQUFBLE1BQ25KO0FBQ0EsYUFBTyxFQUFFLEdBQUcsa0JBQWtCLEdBQUcsZUFBZSxHQUFHLEtBQUssaUJBQWlCLFNBQVMsRUFBRTtBQUFBLElBQ3RGO0FBQUEsSUFFUSxzQkFBc0Isa0JBQXFDO0FBQ2pFLFlBQU0sU0FBYztBQUFBLFFBQ2xCLE1BQU0sa0JBQWtCO0FBQUEsTUFDMUI7QUFFQSxVQUFJLGtCQUFrQixNQUFNO0FBQzFCLFlBQUksaUJBQWlCLE1BQU07QUFDekIsaUJBQU8sU0FBUyxDQUFDLGlCQUFpQixPQUFPLENBQUMsaUJBQWlCLE1BQU0sU0FBUztBQUFBLFFBQzVFLE9BQU87QUFDTCxpQkFBTyxTQUFTLENBQUMsaUJBQWlCLE9BQU8saUNBQWlDLFNBQVM7QUFBQSxRQUNyRjtBQUFBLE1BQ0Y7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRVEscUJBQXFCLGFBQWdDLGtCQUFxQyxlQUErQixXQUFvQixnQkFBMEI7QUFFN0ssWUFBTSxTQUFjO0FBQUEsUUFDbEIsT0FBTyxZQUFZO0FBQUEsUUFDbkIsV0FBVyxZQUFZO0FBQUEsTUFDekI7QUFFQSxVQUFJLGdCQUFnQjtBQUNsQixlQUFPLFFBQVEsWUFBWTtBQUFBLE1BQzdCLE9BQU87QUFDTCxlQUFPLElBQUksWUFBWTtBQUFBLE1BQ3pCO0FBRUEsVUFBSSxZQUFZLFlBQVk7QUFDMUIsZUFBTyxhQUFhLFlBQVk7QUFBQSxNQUNsQztBQUVBLFVBQUksWUFBWSxPQUFPO0FBQ3JCLGVBQU8sT0FBTyxZQUFZO0FBQUEsTUFDNUI7QUFFQSxVQUFJLFlBQVksVUFBVTtBQUN4QixlQUFPLFdBQVcsWUFBWTtBQUFBLE1BQ2hDO0FBRUEsYUFBTyxFQUFFLEdBQUcsUUFBUSxHQUFHLEtBQUssc0JBQXNCLGdCQUFnQixHQUFHLEdBQUcsZUFBZSxHQUFHLEtBQUssaUJBQWlCLFNBQVMsRUFBRTtBQUFBLElBQzdIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT1EsaUJBQWlCLFdBQW9CO0FBQzNDLFlBQU0sU0FBYyxDQUFDO0FBQ3JCLFVBQUksV0FBVztBQUNiLGNBQU0saUJBQWlCLFVBQVUsTUFBTSxHQUFHO0FBRTFDLHVCQUFlLFFBQVEsQ0FBQyxVQUFrQjtBQUN4QyxnQkFBTSxNQUFjLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN0QyxnQkFBTUMsU0FBZ0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLGlCQUFPLEdBQUcsSUFBSUE7QUFBQSxRQUNoQixDQUFDO0FBQUEsTUFDSDtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFUSxxQkFBcUIsYUFBaUMsa0JBQXFDLGVBQStCLFlBQXFCO0FBQ3JKLFlBQU0sU0FBYztBQUFBLFFBQ2xCLEdBQUcsWUFBWTtBQUFBLE1BQ2pCO0FBRUEsYUFBTyxFQUFFLEdBQUcsUUFBUSxHQUFHLEtBQUssc0JBQXNCLGdCQUFnQixHQUFHLEdBQUcsZUFBZSxHQUFHLEtBQUssaUJBQWlCLFVBQVUsRUFBRTtBQUFBLElBQzlIO0FBQUEsSUFHUSxzQkFBc0IsYUFBaUMsa0JBQXFDLGVBQStCLFlBQXFCO0FBQ3RKLFlBQU0sU0FBYztBQUFBLFFBQ2xCLEdBQUcsWUFBWTtBQUFBLE1BQ2pCO0FBRUEsYUFBTyxFQUFFLEdBQUcsUUFBUSxHQUFHLEtBQUssc0JBQXNCLGdCQUFnQixHQUFHLEdBQUcsZUFBZSxHQUFHLEtBQUssaUJBQWlCLFVBQVUsRUFBRTtBQUFBLElBQzlIO0FBQUE7QUFBQSxJQUdRLGlCQUFpQixVQUFvQjtBQUUzQyxVQUFJLFNBQVMsT0FBTyxHQUFHO0FBQ3JCLGNBQU0sTUFBTSxTQUFTLFFBQVEsSUFBSSxNQUFNLFNBQVMsT0FBTyxJQUFJLFFBQVEsU0FBUyxTQUFTLElBQUksUUFBUSxTQUFTLFdBQVcsSUFBSSxTQUFTLFNBQVMsTUFBTSxDQUFDO0FBQUEsTUFDcEo7QUFFQSxVQUFJLFNBQVMsTUFBTSxNQUFNLFVBQWEsU0FBUyxNQUFNLEVBQUUsZUFBZSxNQUFNLEdBQUc7QUFDN0UsY0FBTSxNQUFNLDhCQUE4QjtBQUFBLE1BQzVDO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUVBLE1BQWMsU0FBUyxLQUFhLFFBQTZDLFdBQW9CO0FBQ25HLFlBQU0sbUJBQW1CLGFBQWEsU0FBUyxJQUFJLEtBQUs7QUFDeEQsWUFBTSxZQUFZLE1BQU0sS0FBSyxjQUFjLElBQUksbUJBQW1CLEtBQUssTUFBTSxHQUFHO0FBQ2hGLGFBQU8sS0FBSyxpQkFBaUIsUUFBUTtBQUFBLElBQ3ZDO0FBQUEsSUFFTyxnQkFBMkIsT0FBTyxrQkFBa0IsZUFBZSxlQUFlLGNBQWM7QUFDckcsYUFBTyxLQUFLLFNBQVMsY0FBYyxFQUFFLFFBQVEsS0FBSyxrQkFBa0Isa0JBQWtCLGVBQWUsZUFBZSxTQUFTLEVBQUUsR0FBRyxJQUFJO0FBQUEsSUFDeEk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTUEsTUFBYSxrQkFBa0IsV0FBeUM7QUFDdEUsVUFBSTtBQUNKLFVBQUksaUJBQWlDLENBQUM7QUFFdEMsVUFBSSxVQUFVO0FBQ2QsWUFBTSxXQUFXO0FBRWpCLFNBQUc7QUFDRCxtQkFBVyxNQUFNLEtBQUssY0FBYyxFQUFFLE1BQU0sU0FBUyxTQUFTLEdBQUcsTUFBTSxRQUFRLFNBQVMsRUFBRSxHQUFHLFFBQVcsUUFBVyxTQUFTO0FBQzVILFlBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxXQUFXLEtBQUssQ0FBQyxTQUFTLFdBQVcsRUFBRSxZQUFZLEdBQUc7QUFDL0UsZ0JBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLFFBQzdDLE9BQU87QUFFTCwyQkFBaUIsZUFBZSxPQUFPLFNBQVMsV0FBVyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsaUJBQXNCO0FBQ3BHLG1CQUFPLGtCQUFrQixZQUFZO0FBQUEsVUFDdkMsQ0FBQyxDQUFDO0FBQUEsUUFDSjtBQUVBLG1CQUFXO0FBQUEsTUFDYixTQUFTLFVBQVUsU0FBUyxNQUFNLEVBQUUsWUFBWTtBQUVoRCxhQUFPLElBQUksZUFBZSxjQUFjO0FBQUEsSUFDMUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFVTyxXQUFzQixPQUFPLGtCQUFrQixlQUFlLGVBQWUsV0FBVyxjQUF3QjtBQUNySCxZQUFNLGFBQWEsYUFBYSxTQUFTLElBQUksVUFBVTtBQUN2RCxhQUFPLEtBQUssU0FBUyxZQUFZLEVBQUUsUUFBUSxLQUFLLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLEVBQUUsR0FBRyxhQUFhLFNBQVMsQ0FBQztBQUFBLElBQzlJO0FBQUEsSUFFTyxnQkFBMkIsT0FBTyxrQkFBa0IsZUFBZSxlQUFlLFdBQVcsY0FBd0I7QUFDMUgsYUFBTyxLQUFLLFNBQVMsY0FBYyxFQUFFLFFBQVEsS0FBSyxrQkFBa0Isa0JBQWtCLGVBQWUsYUFBYSxFQUFFLEdBQUcsYUFBYSxTQUFTLENBQUM7QUFBQSxJQUNoSjtBQUFBLElBRU8saUJBQTRCLE9BQU8sa0JBQWtCLGVBQWUsZUFBZSxXQUFXLGNBQXdCO0FBQzNILGFBQU8sS0FBSyxTQUFTLGVBQWUsRUFBRSxRQUFRLEtBQUssa0JBQWtCLGtCQUFrQixlQUFlLGFBQWEsRUFBRSxHQUFHLGFBQWEsU0FBUyxDQUFDO0FBQUEsSUFDako7QUFBQSxJQUVPLGNBQXlCLE9BQU8sa0JBQWtCLGVBQWUsZUFBZSxXQUFXLGNBQXdCO0FBQ3hILFlBQU0sU0FBUztBQUFBLFFBQ2IsR0FBRyxLQUFLLGlCQUFpQixTQUFTO0FBQUEsTUFDcEM7QUFDQSxhQUFPLEtBQUssU0FBUyxnQkFBZ0IsZUFBZSxZQUFZLFFBQVEsYUFBYSxTQUFTLENBQUM7QUFBQSxJQUNqRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUU8sWUFBdUIsT0FBTyxrQkFBa0IsZUFBZSxlQUFlLFdBQVcsY0FBd0I7QUFDdEgsWUFBTSxjQUFjLGVBQWUsYUFBYSxnQkFBZ0IsZUFBZSxhQUFhLE1BQU07QUFDbEcsWUFBTSxTQUFTO0FBQUEsUUFDYixLQUFLLGVBQWU7QUFBQSxRQUNwQixHQUFHLEtBQUssaUJBQWlCLFNBQVM7QUFBQSxNQUNwQztBQUNBLGFBQU8sS0FBSyxTQUFTLGNBQWMsWUFBWSxFQUFFLE9BQWUsR0FBRyxhQUFhLFNBQVMsQ0FBQztBQUFBLElBQzVGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBYU8sVUFBcUIsT0FBTyxrQkFBa0IsZUFBZSxlQUFlLFdBQVcsV0FBcUIsZ0JBQThCO0FBQy9JLFlBQU0saUJBQWlCLGVBQWUsYUFBYSxnQkFBZ0IsZUFBZSxhQUFhLE1BQU07QUFDckcsWUFBTSxhQUFhLGFBQWEsU0FBUyxJQUFJLFVBQVU7QUFDdkQsWUFBTSxTQUFTO0FBQUEsUUFDYixLQUFLLGVBQWU7QUFBQSxRQUNwQixHQUFHLEtBQUssaUJBQWlCLFNBQVM7QUFBQSxNQUNwQztBQUNBLGFBQU8sS0FBSyxTQUFTLGlCQUFpQixZQUFZLEVBQUUsUUFBZ0IsUUFBUSxZQUFZLEdBQUcsYUFBYSxTQUFTLENBQUM7QUFBQSxJQUNwSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUU8sY0FBeUIsT0FBTyxrQkFBa0IsZUFBZSxlQUFlLFdBQVcsV0FBcUIsZ0JBQThCO0FBQ25KLFlBQU0sY0FBYyxlQUFlLGFBQWEsZ0JBQWdCLGVBQWUsYUFBYSxNQUFNO0FBQ2xHLFlBQU0sU0FBUztBQUFBLFFBQ2IsS0FBSyxlQUFlO0FBQUEsUUFDcEIsR0FBRyxLQUFLLGlCQUFpQixTQUFTO0FBQUEsTUFDcEM7QUFDQSxhQUFPLEtBQUssU0FBUyxjQUFjLGNBQWMsRUFBRSxRQUFnQixRQUFRLFlBQVksR0FBRyxhQUFhLFNBQVMsQ0FBQztBQUFBLElBQ25IO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFRTyxnQkFBMkIsT0FBTyxrQkFBa0IsZUFBZSxlQUFlLFdBQVcsV0FBcUIsZ0JBQThCO0FBQ3JKLFlBQU0sY0FBYyxlQUFlLGFBQWEsZ0JBQWdCLGVBQWUsYUFBYSxNQUFNO0FBQ2xHLFlBQU0sU0FBUztBQUFBLFFBQ2IsS0FBSyxlQUFlO0FBQUEsUUFDcEIsR0FBRyxLQUFLLGlCQUFpQixTQUFTO0FBQUEsTUFDcEM7QUFDQSxhQUFPLEtBQUssU0FBUyxjQUFjLGVBQWUsRUFBRSxRQUFnQixRQUFRLFlBQVksR0FBRyxhQUFhLFNBQVMsQ0FBQztBQUFBLElBQ3BIO0FBQUEsSUFFTyxTQUFTLE9BQU8sYUFBZ0Msa0JBQW9DLGVBQStCLFdBQW9CLGdCQUE0QztBQUN4TCxhQUFPLEtBQUssU0FBUyxVQUFVLEVBQUUsUUFBUSxLQUFLLHFCQUFxQixhQUFhLGtCQUFrQixlQUFlLFNBQVMsR0FBRyxRQUFRLFlBQVksR0FBRyxJQUFJO0FBQUEsSUFDMUo7QUFBQSxJQUVPLFNBQVMsT0FBTyxhQUFnQyxrQkFBcUMsZUFBK0IsY0FBcUM7QUFDOUosYUFBTyxLQUFLLFNBQVMsVUFBVSxFQUFFLFFBQVEsS0FBSyxxQkFBcUIsYUFBYSxrQkFBa0IsZUFBZSxTQUFTLEVBQUUsR0FBRyxJQUFJO0FBQUEsSUFDckk7QUFBQSxJQUVPLHVCQUF1QixPQUFPLGFBQWdDLGtCQUFxQyxlQUErQixXQUFvQixtQkFBMkM7QUFDdE0sYUFBTyxLQUFLLFNBQVMsVUFBVSxFQUFFLFFBQVEsS0FBSyxxQkFBcUIsYUFBYSxrQkFBa0IsZUFBZSxXQUFXLGNBQWMsRUFBRSxHQUFHLElBQUk7QUFBQSxJQUNySjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTQSxNQUFhLGNBQWMsYUFBZ0Msa0JBQXFDLGVBQStCLFdBQW9CLGdCQUEyQztBQUM1TCxVQUFJO0FBQ0osVUFBSSxhQUFnQyxDQUFDO0FBQ3JDLFVBQUksWUFBWTtBQUVoQixVQUFJLGdCQUFnQjtBQUNsQixtQkFBVyxNQUFNLEtBQUs7QUFBQSxVQUNwQjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQ0EsWUFBSSxDQUFDLFVBQVU7QUFDYixnQkFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsUUFDekMsT0FBTztBQUNMLHVCQUFhLFdBQVcsT0FBTyxTQUFTLElBQUksQ0FBQyxTQUFjO0FBQ3pELG1CQUFPLElBQUksb0JBQW9CLElBQUk7QUFBQSxVQUNyQyxDQUFDLENBQUM7QUFBQSxRQUNKO0FBQUEsTUFFRixPQUFPO0FBQ0wsbUJBQVcsTUFBTSxLQUFLO0FBQUEsVUFDcEI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQ0EsWUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLFVBQVUsRUFBRSxNQUFNLEdBQUc7QUFDOUMsZ0JBQU0sSUFBSSxNQUFNLHVCQUF1QjtBQUFBLFFBQ3pDLE9BQU87QUFDTCx1QkFBYSxXQUFXLE9BQU8sU0FBUyxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFjO0FBQzdFLG1CQUFPLElBQUksZ0JBQWdCLElBQUk7QUFBQSxVQUNqQyxDQUFDLENBQUM7QUFBQSxRQUNKO0FBQUEsTUFDRjtBQUVBLGFBQU8sSUFBSSxVQUFVLFVBQVU7QUFBQSxJQUNqQztBQUFBLElBSU8sVUFBVSxPQUFPLGFBQWlDLGtCQUFxQyxlQUErQixjQUFxQztBQUNoSyxhQUFPLEtBQUssU0FBUyxXQUFXLEVBQUUsUUFBUSxLQUFLLHNCQUFzQixhQUFhLGtCQUFrQixlQUFlLFNBQVMsRUFBRSxHQUFHLElBQUk7QUFBQSxJQUN2STtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTTyxjQUFjLE9BQU8sZUFBOEIsWUFBMEIsa0JBQXFDLGtCQUFrQztBQUN6SixVQUFJLGNBQWMsZ0JBQWdCLGVBQWUsYUFBYTtBQUM5RCxVQUFJLENBQUMsY0FBYztBQUFTLGdCQUFRLE1BQU0sS0FBSyxjQUFjLElBQUksY0FBYyxRQUFRLEdBQUc7QUFDMUYsb0JBQWMsY0FBYyxNQUFNLG1CQUFtQixtQkFBbUIsZUFBZSxPQUFPLENBQUMsSUFBSTtBQUNuRyxVQUFJLFdBQVc7QUFBTyxnQkFBUSxNQUFNLEtBQUssY0FBYyxJQUFJLGNBQWMsZUFBZSxXQUFXLEtBQUssR0FBRztBQUFBO0FBQ3RHLGdCQUFRLE1BQU0sS0FBSyxjQUFjLElBQUksYUFBYSxFQUFFLFFBQVEsV0FBVyxDQUFDLEdBQUc7QUFBQSxJQUNsRjtBQUFBLElBRU8sbUJBQW1CLE9BQU8sZUFBOEIsa0JBQXFDLGtCQUFrQztBQUNwSSxVQUFJLGNBQWMsZ0JBQWdCLGVBQWUsYUFBYTtBQUM5RCxVQUFJLENBQUMsY0FBYztBQUFTLGdCQUFRLE1BQU0sS0FBSyxjQUFjLElBQUksY0FBYyxRQUFRLEdBQUc7QUFDMUYsb0JBQWMsY0FBYyxNQUFNLG1CQUFtQixtQkFBbUIsZUFBZSxPQUFPLENBQUMsSUFBSTtBQUNuRyxjQUFRLE1BQU0sS0FBSyxjQUFjLElBQUksV0FBVyxHQUFHO0FBQUEsSUFDckQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFVQSxNQUFhLGtCQUFrQixLQUFhLFlBQTZCLFlBQXFCLFdBQW9CLFdBQW1DO0FBQ25KLFVBQUk7QUFDSixVQUFJLENBQUM7QUFBSyxjQUFNLE1BQU0saUJBQWlCO0FBRXZDLFVBQUksWUFBWTtBQUNkLG1CQUFXLE1BQU0sS0FBSyxnQ0FBZ0MsS0FBSyxZQUFZLFlBQVksV0FBVyxTQUFTO0FBQUEsTUFDekcsT0FDSztBQUNILFlBQUksYUFBYSxTQUFTLEdBQUc7QUFDM0IscUJBQVcsTUFBTSxLQUFLLGdDQUFnQyxLQUFLLFlBQVksU0FBUztBQUFBLFFBQ2xGLE9BQ0s7QUFDSCxxQkFBVyxNQUFNLEtBQUssVUFBVSxRQUFXLFFBQVcsRUFBRSxZQUF3QixTQUFTLElBQUksR0FBRyxXQUFXLFNBQVM7QUFBQSxRQUN0SDtBQUFBLE1BQ0Y7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFZQSxNQUFhLGdCQUFnQixLQUFhLFlBQTZCLFlBQXFCLFdBQW9CLFdBQXNDO0FBQ3BKLGFBQU8sa0JBQWtCLE1BQU0sS0FBSyxrQkFBa0IsS0FBSyxZQUFZLFlBQVksV0FBVyxTQUFTLENBQUM7QUFBQSxJQUMxRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVVBLE1BQWEsa0JBQWtCLFlBQW9CLFdBQW9CLFdBQXdDO0FBQzdHLFlBQU0sV0FBVyxNQUFNLEtBQUssWUFBWSxRQUFXLFFBQVcsRUFBRSxXQUF1QixHQUFHLFdBQVcsU0FBUztBQUU5RyxhQUFPLGtCQUFrQixRQUFRO0FBQUEsSUFDbkM7QUFBQSxJQUVBLE1BQWEsZUFBZSxLQUFjLFdBQTJCLFlBQXFCLFdBQW9CLFdBQXFDO0FBQ2pKLFVBQUksV0FBVztBQUNiLFlBQUksbUJBQW1CLFNBQVMsR0FBRztBQUNqQyxjQUFJLENBQUM7QUFBWSxrQkFBTSxJQUFJLE1BQU0sbURBQW1ELGtCQUFrQixLQUFLLE1BQU0sQ0FBQyxLQUFLO0FBQUE7QUFDbEgsbUJBQU8sTUFBTSxLQUFLLGtCQUFrQixZQUFZLFdBQVcsU0FBUztBQUFBLFFBQzNFLFdBQ1MsaUJBQWlCLFNBQVMsR0FBRztBQUNwQyxjQUFJLENBQUM7QUFBSyxrQkFBTSxJQUFJLE1BQU0sNENBQTRDLGdCQUFnQixLQUFLLE1BQU0sQ0FBQyxLQUFLO0FBQUE7QUFDbEcsbUJBQU8sTUFBTSxLQUFLLGdCQUFnQixLQUFLLFdBQVcsWUFBWSxXQUFXLFNBQVM7QUFBQSxRQUN6RjtBQUNLLGdCQUFNLElBQUksTUFBTSwwQkFBMEIsU0FBUyw0QkFBNEIsZUFBZSxLQUFLLE1BQU0sQ0FBQyxLQUFLO0FBQUEsTUFDdEgsT0FDSztBQUNILFlBQUksQ0FBQyxPQUFPLFlBQVk7QUFDdEIsaUJBQU8sTUFBTSxLQUFLLGtCQUFrQixZQUFZLFdBQVcsU0FBUztBQUFBLFFBQ3RFLFdBQ1MsS0FBSztBQUNaLGlCQUFPLE1BQU0sS0FBSyxnQkFBZ0IsS0FBSyxXQUFXLFlBQVksV0FBVyxTQUFTO0FBQUEsUUFDcEY7QUFDSyxnQkFBTSxJQUFJLE1BQU0sb0VBQW9FO0FBQUEsTUFDM0Y7QUFBQSxJQUNGO0FBQUEsSUFFQSxNQUFjLGdDQUFnQyxLQUFhLFlBQTRCLFlBQXFCLFdBQW9CLFdBQW1DO0FBQ2pLLGNBQVEsWUFBWTtBQUFBLFFBQ2xCLEtBQUs7QUFBQSxRQUFRLEtBQUs7QUFDaEIsaUJBQU8sTUFBTSxLQUFLLFFBQVEsUUFBVyxRQUFXLEVBQUUsWUFBd0IsU0FBUyxJQUFJLEdBQUcsV0FBVyxTQUFTO0FBQUEsUUFFaEgsS0FBSztBQUFBLFFBQVksS0FBSztBQUFBLFFBQXNCLEtBQUs7QUFBQSxRQUFnQixLQUFLO0FBQ3BFLGlCQUFPLE1BQU0sS0FBSyxZQUFZLFFBQVcsUUFBVyxFQUFFLFlBQXdCLGFBQWEsSUFBSSxHQUFHLFdBQVcsU0FBUztBQUFBLFFBRXhILEtBQUs7QUFDSCxpQkFBTyxNQUFNLEtBQUssY0FBYyxRQUFXLFFBQVcsRUFBRSxZQUF3QixlQUFlLElBQUksR0FBRyxXQUFXLFNBQVM7QUFBQSxRQUU1SDtBQUNFLGdCQUFNLE1BQU0sMEJBQTBCLGFBQWEsc0JBQXNCLGdCQUFnQixJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUk7QUFBQSxNQUN0STtBQUFBLElBQ0Y7QUFBQSxJQUVBLE1BQWMsZ0NBQWdDLEtBQWEsWUFBcUIsV0FBa0M7QUFNaEgsWUFBTSxhQUFhLElBQUksZ0JBQWdCO0FBQ3ZDLFlBQU0sU0FBUyxXQUFXO0FBRTFCLFVBQUk7QUFFSixlQUFTLFdBQVcsS0FBVTtBQUM1QixZQUFJLElBQUksV0FBVyxNQUFNLFFBQVc7QUFDbEMscUJBQVc7QUFDWCxxQkFBVyxNQUFNO0FBQUEsUUFDbkI7QUFBQSxNQUNGO0FBRUEsWUFBTSxRQUFRO0FBQUEsUUFDWjtBQUFBLFVBQ0UsS0FBSyxRQUFRLFFBQVcsUUFBVyxFQUFFLFlBQXdCLFNBQVMsSUFBSSxHQUFHLFdBQVcsTUFBTSxNQUFNLEVBQ2pHLEtBQUssQ0FBQyxRQUFhO0FBQUUsdUJBQVcsR0FBRztBQUFBLFVBQUUsQ0FBQztBQUFBLFVBQ3pDLEtBQUssWUFBWSxRQUFXLFFBQVcsRUFBRSxZQUF3QixhQUFhLElBQUksR0FBRyxXQUFXLE1BQU0sTUFBTSxFQUN6RyxLQUFLLENBQUMsUUFBYTtBQUFFLHVCQUFXLEdBQUc7QUFBQSxVQUFFLENBQUM7QUFBQSxVQUN6QyxLQUFLLGNBQWMsUUFBVyxRQUFXLEVBQUUsWUFBd0IsZUFBZSxJQUFJLEdBQUcsV0FBVyxNQUFNLE1BQU0sRUFDN0csS0FBSyxDQUFDLFFBQWE7QUFBRSx1QkFBVyxHQUFHO0FBQUEsVUFBRSxDQUFDO0FBQUEsUUFDM0M7QUFBQSxNQUNGO0FBRUEsVUFBSSxhQUFhO0FBQVcsZUFBTztBQUFBO0FBQzlCLGNBQU0sTUFBTSxTQUFTLE1BQU0seUJBQXlCO0FBQUEsSUFDM0Q7QUFBQSxJQUVBLE1BQWEsYUFBYSxLQUFhLFlBQTRCLFlBQW9CLFlBQVksT0FBTywwQkFBMEIsT0FBMEI7QUFDNUosVUFBSTtBQUNKLFVBQUksZ0JBQWdCLFVBQVUsR0FBRztBQUMvQixvQkFBWSxNQUFNLEtBQUssU0FBUyxHQUFHLDBCQUEwQixZQUFZLFlBQVksS0FBSyxTQUFTLENBQUMsMEJBQTBCLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSx3QkFBaUQsRUFBRSxHQUFHLFNBQVM7QUFBQSxNQUN6TixPQUNLO0FBQ0gsb0JBQVksTUFBTSxLQUFLLFNBQVMsR0FBRywwQkFBMEIsWUFBWSxZQUFZLEtBQUssU0FBUyxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLHdCQUFpRCxFQUFFLEdBQUcsU0FBUztBQUFBLE1BQzdNO0FBQ0EsVUFBSSxXQUFXO0FBQ2IsWUFBSSxvQkFBbUMsQ0FBQztBQUN4QyxZQUFJLGFBQWE7QUFDakIsZ0JBQVEsWUFBWTtBQUFBLFVBQ2xCLEtBQUs7QUFDSCx5QkFBYTtBQUNiO0FBQUEsVUFDRixLQUFLO0FBQ0gseUJBQWE7QUFDYjtBQUFBLFVBQ0YsS0FBSztBQUNILHlCQUFhO0FBQ2I7QUFBQSxVQUNGO0FBQ0Usa0JBQU0sTUFBTSw4Q0FBOEM7QUFBQSxRQUM5RDtBQUNBLGtCQUFVLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQWE7QUFDbkQsNEJBQWtCLEtBQUssa0JBQWtCLEVBQUUsV0FBVyxFQUFFLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFXO0FBQUEsUUFDNUYsQ0FBQztBQUNELGVBQU87QUFBQSxNQUNUO0FBQ0EsYUFBTyxVQUFVLFVBQVUsRUFBRTtBQUFBLFFBQUksQ0FBQyxRQUNoQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7QUFBQSxNQUN2QztBQUFBLElBQ0Y7QUFBQSxJQUVBLE1BQWEsVUFBVSxLQUFhLFlBQTRCLFlBQTJDO0FBQ3pHLGFBQU8sTUFBTSxLQUFLLFNBQVMsR0FBRywwQkFBMEIsWUFBWSxZQUFZLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLEVBQUUsR0FBRyxJQUFJO0FBQUEsSUFDekk7QUFBQTtBQUFBLElBR0EsTUFBYSxZQUFZLEtBQWEsWUFBNEIsWUFBb0IsMEJBQTBCLE9BQU8sWUFBWSxPQUEwQjtBQUMzSixVQUFJO0FBQ0osVUFBSSxnQkFBZ0IsVUFBVSxHQUFHO0FBQy9CLG1CQUFXLE1BQU0sS0FBSyxTQUFTLEdBQUcsMEJBQTBCLFlBQVksZUFBZSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMseUJBQXlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSx3QkFBaUQsRUFBRSxHQUFHLFNBQVM7QUFBQSxNQUM5TixXQUNTLHFCQUFxQixVQUFVLEdBQUc7QUFHekMsWUFBSSxXQUFXO0FBRWIscUJBQVcsTUFBTSxLQUFLLFNBQVMsR0FBRywwQkFBMEIsWUFBWSxlQUFlLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLEVBQUUsR0FBRyxTQUFTO0FBQUEsUUFDbkssT0FDSztBQUNILHFCQUFXLE1BQU0sS0FBSyxTQUFTLEdBQUcsMEJBQTBCLFlBQVksZUFBZSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsd0JBQWlELEVBQUUsR0FBRyxTQUFTO0FBQUEsUUFDbk47QUFBQSxNQUNGLE9BQ0s7QUFDSCxtQkFBVyxNQUFNLEtBQUssU0FBUyxHQUFHLDBCQUEwQixZQUFZLFlBQVksS0FBSyxTQUFTLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsd0JBQWlELEVBQUUsR0FBRyxTQUFTO0FBQUEsTUFDM007QUFFQSxVQUFJLFdBQVc7QUFDYixlQUFPLFNBQVMsV0FBVyxFQUFFLHFCQUFxQixVQUFVLElBQUksY0FBYyxlQUFlLENBQUMsR0FBRyxTQUFTLElBQUksY0FBYyxZQUFZLFNBQVMsQ0FBQyxFQUFFO0FBQUEsVUFBSSxDQUFDLFFBQ3ZKLGtCQUFrQixFQUFFLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsVUFBVSxJQUFJLGNBQWMsZUFBZSxDQUFDLEdBQUcsU0FBUyxJQUFJLGNBQWMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQUEsUUFDOUo7QUFBQSxNQUNGLE9BQ0s7QUFDSCxlQUFPLFNBQVMsVUFBVSxFQUFFO0FBQUEsVUFBSSxDQUFDLFFBQy9CLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUFBLFFBQ3ZDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUVBLE1BQWEsZ0JBQWdCLFlBQTRCLFlBQW9CLGlCQUFpQixPQUFPLDBCQUEwQixPQUFPLFlBQVksT0FBMEI7QUFDMUssVUFBSSxXQUFXO0FBQ2IsWUFBSSxxQkFBcUIsVUFBVSxHQUFHO0FBRXBDLGlCQUFPLENBQUM7QUFBQSxRQUNWLE9BQ0s7QUFFSCxnQkFBTSxRQUFRLE1BQU0sS0FBSyxTQUFTLEdBQUcsMEJBQTBCLFlBQVksWUFBWSxRQUFXLFNBQVMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSx3QkFBaUQsRUFBRSxHQUFHLFNBQVM7QUFFL00saUJBQU8sTUFBTSxXQUFXLEVBQUUsY0FBYyxZQUFZLFNBQVMsQ0FBQyxFQUFFO0FBQUEsWUFBSSxDQUFDLFFBQ25FLGtCQUFrQixFQUFFLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxjQUFjLFlBQVksU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQUEsVUFDeEY7QUFBQSxRQUNGO0FBQUEsTUFDRixPQUNLO0FBQ0gsWUFBSSxxQkFBcUIsVUFBVSxHQUFHO0FBRXBDLGlCQUFPLENBQUM7QUFBQSxRQUNWLE9BQ0s7QUFDSCxnQkFBTSxRQUFRLE1BQU0sS0FBSyxTQUFTLEdBQUcsMEJBQTBCLFlBQVksWUFBWSxRQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSx5QkFBa0Qsa0JBQWtCLGlCQUFpQixTQUFZLFNBQVMsaUJBQWlCLGlCQUFpQixTQUFTLE9BQVUsRUFBRSxHQUFHLFNBQVM7QUFFdlQsaUJBQU8sTUFBTSxVQUFVLEVBQUU7QUFBQSxZQUFJLENBQUMsUUFDNUIsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQUEsVUFDdkM7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUVBLE1BQWEsa0JBQWtCLEtBQWEsWUFBMkM7QUFDckYsWUFBTSxZQUFZLE1BQU0sS0FBSyxTQUFTLEdBQUcsMEJBQTBCLFlBQVksZUFBZSxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxFQUFFLEdBQUcsS0FBSztBQUVoSyxhQUFPLFVBQVUsVUFBVSxFQUFFO0FBQUEsUUFBSSxDQUFDLFFBQ2hDLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUFBLE1BQ3ZDO0FBQUEsSUFDRjtBQUFBLElBRUEsTUFBYSxzQkFBc0IsT0FBbUU7QUFDcEcsWUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsUUFDakIsMEJBQTBCO0FBQUEsUUFDMUIsc0JBQXNCO0FBQUEsUUFDdEIscUJBQXFCO0FBQUEsUUFDckIsWUFBWTtBQUFBLE1BQ2QsSUFBSTtBQUVKLFVBQUksS0FBSztBQUNQLGVBQU8sTUFBTSxLQUFLLGdCQUFnQixLQUFLLFlBQVksWUFBWSxJQUFJLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVyxLQUFLLHlCQUF5QjtBQUFBLFVBQzNILFlBQVksY0FBYyxPQUFPLFFBQVE7QUFBQSxVQUN6QyxZQUFZLGNBQWMsT0FBTyxjQUFjO0FBQUEsVUFDL0M7QUFBQSxVQUNBO0FBQUEsVUFDQSxZQUFZO0FBQUEsVUFDWjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDLENBQUM7QUFBQSxNQUNKLE9BQ0s7QUFDSCxZQUFJLGNBQWMsVUFBYSxjQUFjO0FBQVcsZ0JBQU0sTUFBTSw4REFBOEQ7QUFDbEksZUFBTyxNQUFNLEtBQUssbUJBQW1CO0FBQUEsVUFDbkM7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQUFBLElBRU8sdUJBQXVCLFlBQW9DO0FBQ2hFLGFBQU87QUFBQSxRQUNMLEtBQUssV0FBVztBQUFBLFFBQ2hCLE9BQU8sV0FBVztBQUFBLFFBQ2xCLGFBQWEsV0FBVyxZQUFZLFdBQVcsTUFBTTtBQUFBLFFBQ3JELFNBQVMsQ0FBQztBQUFBLE1BQ1o7QUFBQSxJQUNGO0FBQUEsSUFFTyxtQkFBbUIsUUFBNEI7QUFDcEQsYUFBTztBQUFBLFFBQ0wsS0FBSyxPQUFPLE9BQU87QUFBQSxRQUNuQixPQUFPLFFBQVEsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDO0FBQUEsUUFDbkMsV0FBVyxPQUFPLGFBQWE7QUFBQSxRQUMvQixhQUFhLE9BQU8sWUFBWTtBQUFBLFFBQ2hDLGdCQUFnQixPQUFPLDhCQUE4QixLQUFLLE9BQU8sa0JBQWtCO0FBQUEsUUFDbkYsU0FBUyxPQUFPLFdBQVc7QUFBQSxNQUM3QjtBQUFBLElBQ0Y7QUFBQSxJQUVBLE1BQWEsbUJBQ1gsT0FJb0I7QUFFcEIsWUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixJQUFJO0FBR0osWUFBTSxvQkFBb0IsTUFBTSxLQUFLLGdCQUFnQixZQUFZLFlBQVksZ0JBQWdCLHlCQUF5QixTQUFTLEdBQzVILElBQUksQ0FBQyxXQUFXLEtBQUssbUJBQW1CLE1BQU0sQ0FBQyxFQUMvQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUM7QUFJcEMsWUFBTSx1QkFBMkQsb0JBQUksSUFBbUM7QUFDeEcsWUFBTSxlQUF3QyxvQkFBSSxJQUF3QjtBQUMxRSxpQkFBVyxjQUFjLGtCQUFrQjtBQUN6Qyw2QkFBcUIsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDO0FBQzNDLHFCQUFhLElBQUksV0FBVyxLQUFLLFVBQVU7QUFBQSxNQUM3QztBQUdBLGFBQU8sSUFBSSxVQUFVO0FBQUEsUUFDbkI7QUFBQSxRQUNBO0FBQUEsUUFDQSxvQkFBb0Isb0JBQUksSUFBSTtBQUFBLFFBQzVCLE9BQU8saUJBQWlCLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsV0FBVyxTQUFTLEVBQUUsV0FBVyxLQUFLLGNBQWMsRUFBRSxXQUFXLFNBQVMsRUFBRSxXQUFXLEdBQUcsQ0FBQztBQUFBLFFBQ3ZLLEtBQUssSUFBSSxRQUFPLEtBQUssY0FBYyxPQUFPLENBQUM7QUFBQSxRQUMzQztBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxxQkFBcUIsTUFBTTtBQUFBLFFBQzNCO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLElBRUEsTUFBYSx5QkFDWCxPQUtvQjtBQUVwQixZQUFNO0FBQUEsUUFDSjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsSUFBSTtBQUdKLFVBQUksV0FBeUIsQ0FBQztBQUU5QixVQUFJLFdBQVc7QUFHYixjQUFNLFNBQVMsTUFBTSxLQUFLLFVBQVUsV0FBVyxPQUFPLEdBQUcsWUFBWSxVQUFVO0FBQy9FLGNBQU0sVUFBK0Isb0JBQUksSUFBb0I7QUFDN0QsY0FBTSxVQUFvQyxvQkFBSSxJQUF5QjtBQUV2RSxtQkFBVyxjQUFjLFFBQVE7QUFDL0Isa0JBQVEsSUFBSSxXQUFXLElBQUksV0FBVyxHQUFHO0FBQ3pDLGtCQUFRLElBQUksV0FBVyxLQUFLLG9CQUFJLElBQVksQ0FBQztBQUFBLFFBQy9DO0FBRUEsbUJBQVcsY0FBYyxRQUFRO0FBQy9CLGdCQUFNLFNBQVMsUUFBUSxJQUFJLFdBQVcsR0FBRztBQUN6QyxnQkFBTSxTQUFTLFFBQVEsSUFBSSxXQUFXLE1BQU07QUFDNUMsY0FBSSxVQUFVLFVBQWEsVUFBVSxRQUFXO0FBQzlDLG1CQUFPLElBQUksTUFBTTtBQUFBLFVBQ25CO0FBQUEsUUFDRjtBQUVBLG1CQUFXLENBQUM7QUFDWixjQUFNLFFBQVEsb0JBQUksSUFBWTtBQUU5QixtQkFBVyxjQUFjLFFBQVE7QUFDL0IsY0FBSSxDQUFDLE1BQU0sSUFBSSxXQUFXLEdBQUcsR0FBRztBQUM5QixrQkFBTSxJQUFJLFdBQVcsR0FBRztBQUV4QixxQkFBUyxLQUFLLEtBQUssdUJBQXVCLFVBQVUsQ0FBQztBQUNyRCxrQkFBTSxNQUFNLFFBQVEsSUFBSSxXQUFXLEdBQUc7QUFDdEMsZ0JBQUksT0FBTztBQUFXLHVCQUFTLFNBQVMsU0FBUyxDQUFDLEVBQUUsVUFBVSxRQUFRLFNBQVMsTUFBTSxLQUFLLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQUEsVUFDL0c7QUFBQSxRQUNGO0FBQUEsTUFDRixPQUNLO0FBQ0gsY0FBTSxZQUFZLE1BQU0sS0FBSyxhQUFhLFdBQVcsT0FBTyxHQUFHLFlBQVksY0FBYyxXQUFXLGNBQWMsR0FBRyx1QkFBdUI7QUFDNUksbUJBQVcsQ0FBQyxLQUFLLG1CQUFtQixVQUFVLEdBQUcsR0FBRyxVQUFVLElBQUksQ0FBQyxXQUFXLEtBQUssbUJBQW1CLE1BQU0sQ0FBQyxDQUFDO0FBQUEsTUFDaEg7QUFHQSxpQkFBVyxTQUFTLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztBQUkvQyxZQUFNLHVCQUEyRCxvQkFBSSxJQUFtQztBQUN4RyxZQUFNLHFCQUFrQyxvQkFBSSxJQUFZO0FBQ3hELFlBQU0sZUFBd0Msb0JBQUksSUFBd0I7QUFHMUUsaUJBQVcsY0FBYyxVQUFVO0FBQ2pDLDZCQUFxQixJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUM7QUFDM0MscUJBQWEsSUFBSSxXQUFXLEtBQUssVUFBVTtBQUFBLE1BQzdDO0FBRUEsVUFBSSxvQkFBb0I7QUFFdEIsY0FBTSxpQkFBa0IsY0FBYyxXQUFXLFFBQVE7QUFDekQsY0FBTSxxQkFBcUIsa0JBQWtCLGVBQWUsVUFBVTtBQUV0RSxjQUFNLFdBQTRCLENBQUM7QUFDbkMsbUJBQVcsY0FBYyxVQUFVO0FBQ2pDLGNBQUksV0FBVyxPQUFPLFdBQVcsT0FBTyxHQUFHO0FBQ3pDLHFCQUFTLEtBQUssSUFBSTtBQUFBLGNBQVEsQ0FBQyxZQUN6QixLQUFLLFlBQVksV0FBVyxLQUFLLG9CQUFvQixZQUFZLHlCQUF5QixTQUFTLEVBQUUsS0FBSyxDQUFDLGFBQWEsU0FBUyxJQUFJLENBQUMsVUFBVSxLQUFLLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxhQUFhO0FBQ2xNLHNCQUFNLGNBQXFDLENBQUM7QUFDNUMsMkJBQVcsU0FBUyxVQUFVO0FBQzVCLCtCQUFhLElBQUksTUFBTSxLQUFLLEtBQUs7QUFDakMsd0JBQU0sY0FBYyxNQUFNLFFBQVEsT0FBTyxDQUFDLFFBQVEsSUFBSSxTQUFTLFdBQVcsR0FBRztBQUM3RSw4QkFBWSxLQUFLLEVBQUUsVUFBVSxNQUFNLEtBQUssdUJBQXVCLFlBQVksU0FBUyxLQUFLLFlBQVksQ0FBQyxFQUFFLFlBQVksSUFBSSxZQUFZLENBQUMsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLElBQUksT0FBVSxDQUFDO0FBQUEsZ0JBQzdMO0FBRUEscUNBQXFCLElBQUksV0FBVyxLQUFLLFdBQVc7QUFDcEQsbUNBQW1CLElBQUksV0FBVyxHQUFHO0FBQUEsY0FDdkMsQ0FBQyxFQUFFLEtBQUssT0FBTztBQUFBLFlBQ2pCLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUVBLGNBQU0sUUFBUSxXQUFXLFFBQVE7QUFHakMsWUFBSSxrQkFBa0IsY0FBYztBQUNsQyxxQkFBVyxpQkFBaUIsV0FBVyxXQUFXLEdBQUc7QUFDbkQsa0JBQU0sWUFBWSxNQUFNLEtBQUssWUFBWSxjQUFjLE9BQU8sZ0JBQWdCLFlBQVksdUJBQXVCLEdBQzlHLElBQUksQ0FBQyxVQUFVLEtBQUssbUJBQW1CLEtBQUssQ0FBQztBQUVoRCxrQkFBTSxjQUFxQyxDQUFDO0FBQzVDLHVCQUFXLFNBQVMsVUFBVTtBQUM1QiwwQkFBWSxLQUFLLEVBQUUsVUFBVSxNQUFNLEtBQUssdUJBQXVCLGtEQUFrRCxDQUFDO0FBQUEsWUFDcEg7QUFDQSxpQ0FBcUIsSUFBSSxjQUFjLE9BQU8sV0FBVztBQUFBLFVBQzNEO0FBQUEsUUFDRjtBQUFBLE1BQ0YsT0FDSztBQUNILG1CQUFXLGNBQWMsVUFBVTtBQUNqQyxnQkFBTSxVQUFVLFdBQVcsUUFBUSxPQUFPLENBQUMsa0JBQW1DLENBQUMsTUFBTSxjQUFjLEtBQUssQ0FBQztBQUN6RyxjQUFJLFdBQVcsT0FBTyxZQUFZLE9BQU8sS0FBSyxxQkFBcUIsY0FBYyxXQUFXLFFBQVEsQ0FBQyxHQUFHO0FBQ3RHLHVCQUFXLGlCQUFpQixTQUFTO0FBQ25DLGtCQUFJLHFCQUFxQixJQUFJLGNBQWMsS0FBSyxHQUFHO0FBQ2pELHFDQUFxQixJQUFJLGNBQWMsS0FBSyxHQUFHLEtBQUssRUFBRSxVQUFVLFdBQVcsS0FBSyx1QkFBdUIsa0RBQWtELENBQUM7QUFBQSxjQUM1SjtBQUFBLFlBQ0Y7QUFBQSxVQUNGLE9BQ0s7QUFDSCx1QkFBVyxpQkFBaUIsU0FBUztBQUNuQyxrQkFBSSxxQkFBcUIsSUFBSSxjQUFjLEtBQUssR0FBRztBQUNqRCxxQ0FBcUIsSUFBSSxjQUFjLEtBQUssR0FBRyxLQUFLLEVBQUUsVUFBVSxXQUFXLEtBQUssdUJBQXVCLGNBQWMsWUFBWSxJQUFJLGNBQWMsWUFBWSxFQUFFLHVCQUF1QixJQUFJLE9BQVUsQ0FBQztBQUFBLGNBQ3pNO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUdBLGlCQUFXLE9BQU8scUJBQXFCLE9BQU87QUFBRyxZQUFJLEtBQUssQ0FBQyxHQUFHLE9BQU8sYUFBYSxJQUFJLEVBQUUsUUFBUSxHQUFHLFNBQVMsRUFBRSxVQUFVLGNBQWMsYUFBYSxJQUFJLEVBQUUsUUFBUSxHQUFHLFNBQVMsRUFBRSxRQUFRLENBQUM7QUFJeEwsWUFBTSxlQUF5QixDQUFDO0FBQ2hDLFVBQUksZ0JBQWdCO0FBQ2xCLGNBQU0seUJBQXlCLE1BQU0sS0FBSyxrQkFBa0IsWUFBWSxRQUFXLFNBQVMsR0FBRyxrQkFBa0I7QUFDakgsbUJBQVcsS0FBSyx1QkFBdUI7QUFDckMsY0FBSSxhQUFhLElBQUksQ0FBQztBQUFHLHlCQUFhLEtBQUssQ0FBQztBQUFBLFFBQzlDO0FBQUEsTUFDRixPQUNLO0FBQ0gsbUJBQVcsY0FBYyxVQUFVO0FBQ2pDLGdCQUFNLFVBQVUsV0FBVyxRQUFRLE9BQU8sQ0FBQyxrQkFBbUMsQ0FBQyxNQUFNLGNBQWMsS0FBSyxDQUFDO0FBQ3pHLGNBQUksUUFBUSxVQUFVO0FBQUcseUJBQWEsS0FBSyxXQUFXLEdBQUc7QUFBQSxRQUMzRDtBQUFBLE1BQ0Y7QUFHQSxlQUFTLGVBQWUsWUFBd0JDLGFBQXlCLHVCQUEwQztBQUNqSCxRQUFBQSxZQUFXLElBQUksV0FBVyxHQUFHO0FBRTdCLGNBQU1DLFFBQU8sSUFBSSxTQUFTLFVBQVU7QUFDcEMsUUFBQUEsTUFBSyx3QkFBd0I7QUFDN0IsY0FBTSxXQUFXLHFCQUFxQixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFFOUQsbUJBQVcsU0FBUyxVQUFVO0FBQzVCLGNBQUlELFlBQVcsSUFBSSxNQUFNLFFBQVEsR0FBRztBQUVsQyxvQkFBUSxNQUFNLDBCQUEwQixNQUFNLFFBQVEsSUFBSTtBQUMxRDtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxZQUFZLGFBQWEsSUFBSSxNQUFNLFFBQVE7QUFDakQsY0FBSSxhQUFhO0FBQVcsWUFBQUMsTUFBSyxTQUFTLGVBQWUsV0FBV0QsYUFBWSxNQUFNLHFCQUFxQixDQUFDO0FBQUEsUUFDOUc7QUFFQSxZQUFJQyxNQUFLLGVBQWUsU0FBUztBQUFHLFVBQUFBLE1BQUssV0FBVztBQUVwRCxRQUFBRCxZQUFXLE9BQU8sV0FBVyxHQUFHO0FBQ2hDLGVBQU9DO0FBQUEsTUFDVDtBQUVBLFlBQU0sYUFBMEIsb0JBQUksSUFBWTtBQUVoRCxhQUFPLElBQUksVUFBVTtBQUFBLFFBQ25CO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQTtBQUFBLFFBRUEsT0FBTyxhQUFhLElBQUksQ0FBQyxlQUFlLGVBQWUsYUFBYSxJQUFJLFVBQVUsR0FBSSxVQUFVLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxPQUFPLEVBQUUsV0FBVyxTQUFTLEVBQUUsV0FBVyxLQUFLLGNBQWMsRUFBRSxXQUFXLFNBQVMsRUFBRSxXQUFXLEdBQUcsQ0FBQztBQUFBLFFBQ2hOLEtBQUssSUFBSSxRQUFPLEtBQUssY0FBYyxPQUFPLENBQUM7QUFBQSxRQUMzQztBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxlQUFlLFlBQVksT0FBTztBQUFBLFFBQ2xDLHFCQUFxQixNQUFNO0FBQUEsUUFDM0I7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUEsSUFFQSxNQUFhLHNCQUFzQixPQUEwRDtBQUMzRixVQUFJLE1BQU0sY0FBYztBQUFXLGNBQU0sTUFBTSx3REFBd0Q7QUFFdkcsY0FBUSxNQUFNLEtBQUssWUFBWSxNQUFNLGFBQWEsV0FBVyxLQUFLLE1BQU0sWUFBWSxNQUFNLFlBQVksTUFBTSx5QkFBeUIsTUFBTSxTQUFTLEdBQ2pKLElBQUksQ0FBQyxXQUFXLEtBQUssbUJBQW1CLE1BQU0sQ0FBQztBQUFBLElBQ3BEO0FBQUEsRUFDRjs7O0FDbDdCQSxNQUFBQyxpQkFBbUQ7QUFDbkQsTUFBQUMscUJBQXNCOzs7QUNQdEIsTUFBQUMsaUJBQXdCO0FBQ3hCLE1BQUFDLHFCQUFzQjtBQUN0QiwwQkFBdUI7OztBQ1Z2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFPLE1BQUksUUFBUTtBQUNaLE1BQUksUUFBUTtBQUNaLE1BQUksU0FBUztBQUNiLE1BQUksTUFBTTtBQUNWLE1BQUksWUFBWTtBQUNoQixNQUFJLEtBQUs7QUFDVCxNQUFJLE1BQU07QUFDVixNQUFJLFFBQVE7QUFDWixNQUFJLE9BQU87QUFDWCxNQUFJLE9BQU87QUFFWCxNQUFJLGFBQWE7QUFDakIsTUFBSSxXQUFXO0FBQ2YsTUFBSSxhQUFhO0FBQ2pCLE1BQUksY0FBYztBQUNsQixNQUFJLFVBQVU7QUFDZCxNQUFJLFlBQVk7QUFDaEIsTUFBSSxNQUFNO0FBQ1YsTUFBSSxPQUFPO0FBQ1gsTUFBSSxPQUFvQix5QkFBVUMsT0FBTTtBQUM3QyxJQUFBQSxNQUFLLE9BQU8sSUFBSTtBQUNoQixJQUFBQSxNQUFLLE9BQU8sSUFBSTtBQUNoQixJQUFBQSxNQUFLLFFBQVEsSUFBSTtBQUNqQixJQUFBQSxNQUFLLEtBQUssSUFBSTtBQUNkLElBQUFBLE1BQUssV0FBVyxJQUFJO0FBQ3BCLElBQUFBLE1BQUssSUFBSSxJQUFJO0FBQ2IsSUFBQUEsTUFBSyxLQUFLLElBQUk7QUFDZCxJQUFBQSxNQUFLLE9BQU8sSUFBSTtBQUNoQixJQUFBQSxNQUFLLE1BQU0sSUFBSTtBQUNmLElBQUFBLE1BQUssTUFBTSxJQUFJO0FBQ2YsSUFBQUEsTUFBSyxZQUFZLElBQUk7QUFDckIsSUFBQUEsTUFBSyxVQUFVLElBQUk7QUFDbkIsSUFBQUEsTUFBSyxZQUFZLElBQUk7QUFDckIsSUFBQUEsTUFBSyxhQUFhLElBQUk7QUFDdEIsSUFBQUEsTUFBSyxTQUFTLElBQUk7QUFDbEIsSUFBQUEsTUFBSyxXQUFXLElBQUk7QUFDcEIsSUFBQUEsTUFBSyxLQUFLLElBQUk7QUFDZCxJQUFBQSxNQUFLLE1BQU0sSUFBSTtBQUNmLFdBQU9BO0FBQUEsRUFDVCxFQUFFLENBQUMsQ0FBQzs7O0FDdkNKLHFCQUErQjs7O0FDTC9CLE1BQUk7QUFDSixNQUFJLFFBQVEsSUFBSSxXQUFXLEVBQUU7QUFDZCxXQUFSLE1BQXVCO0FBRTVCLFFBQUksQ0FBQyxpQkFBaUI7QUFHcEIsd0JBQWtCLE9BQU8sV0FBVyxlQUFlLE9BQU8sbUJBQW1CLE9BQU8sZ0JBQWdCLEtBQUssTUFBTSxLQUFLLE9BQU8sYUFBYSxlQUFlLE9BQU8sU0FBUyxvQkFBb0IsY0FBYyxTQUFTLGdCQUFnQixLQUFLLFFBQVE7QUFFL08sVUFBSSxDQUFDLGlCQUFpQjtBQUNwQixjQUFNLElBQUksTUFBTSwwR0FBMEc7QUFBQSxNQUM1SDtBQUFBLElBQ0Y7QUFFQSxXQUFPLGdCQUFnQixLQUFLO0FBQUEsRUFDOUI7OztBQ2xCQSxNQUFPLGdCQUFROzs7QUNFZixXQUFTLFNBQVMsTUFBTTtBQUN0QixXQUFPLE9BQU8sU0FBUyxZQUFZLGNBQU0sS0FBSyxJQUFJO0FBQUEsRUFDcEQ7QUFFQSxNQUFPLG1CQUFROzs7QUNBZixNQUFJLFlBQVksQ0FBQztBQUVqQixPQUFTLElBQUksR0FBRyxJQUFJLEtBQUssRUFBRSxHQUFHO0FBQzVCLGNBQVUsTUFBTSxJQUFJLEtBQU8sU0FBUyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFBQSxFQUNuRDtBQUZTO0FBSVQsV0FBUyxVQUFVLEtBQUs7QUFDdEIsUUFBSSxTQUFTLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUk7QUFHakYsUUFBSSxRQUFRLFVBQVUsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLFVBQVUsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLFVBQVUsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLFVBQVUsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLE1BQU0sVUFBVSxJQUFJLFNBQVMsQ0FBQyxDQUFDLElBQUksVUFBVSxJQUFJLFNBQVMsQ0FBQyxDQUFDLElBQUksTUFBTSxVQUFVLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxVQUFVLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxNQUFNLFVBQVUsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLFVBQVUsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLE1BQU0sVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDLElBQUksVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDLElBQUksVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDLElBQUksVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDLElBQUksVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDLElBQUksVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDLEdBQUcsWUFBWTtBQU1yZ0IsUUFBSSxDQUFDLGlCQUFTLElBQUksR0FBRztBQUNuQixZQUFNLFVBQVUsNkJBQTZCO0FBQUEsSUFDL0M7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQU8sb0JBQVE7OztBQ3ZCZixNQUFJO0FBRUosTUFBSTtBQUdKLE1BQUksYUFBYTtBQUNqQixNQUFJLGFBQWE7QUFFakIsV0FBUyxHQUFHLFNBQVMsS0FBSyxRQUFRO0FBQ2hDLFFBQUksSUFBSSxPQUFPLFVBQVU7QUFDekIsUUFBSSxJQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUU7QUFDM0IsY0FBVSxXQUFXLENBQUM7QUFDdEIsUUFBSUMsUUFBTyxRQUFRLFFBQVE7QUFDM0IsUUFBSSxXQUFXLFFBQVEsYUFBYSxTQUFZLFFBQVEsV0FBVztBQUluRSxRQUFJQSxTQUFRLFFBQVEsWUFBWSxNQUFNO0FBQ3BDLFVBQUksWUFBWSxRQUFRLFdBQVcsUUFBUSxPQUFPLEtBQUs7QUFFdkQsVUFBSUEsU0FBUSxNQUFNO0FBRWhCLFFBQUFBLFFBQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQU0sVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFBQSxNQUM3RztBQUVBLFVBQUksWUFBWSxNQUFNO0FBRXBCLG1CQUFXLGFBQWEsVUFBVSxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsS0FBSztBQUFBLE1BQzlEO0FBQUEsSUFDRjtBQU1BLFFBQUksUUFBUSxRQUFRLFVBQVUsU0FBWSxRQUFRLFFBQVEsS0FBSyxJQUFJO0FBR25FLFFBQUksUUFBUSxRQUFRLFVBQVUsU0FBWSxRQUFRLFFBQVEsYUFBYTtBQUV2RSxRQUFJLEtBQUssUUFBUSxjQUFjLFFBQVEsY0FBYztBQUVyRCxRQUFJLEtBQUssS0FBSyxRQUFRLGFBQWEsUUFBVztBQUM1QyxpQkFBVyxXQUFXLElBQUk7QUFBQSxJQUM1QjtBQUlBLFNBQUssS0FBSyxLQUFLLFFBQVEsZUFBZSxRQUFRLFVBQVUsUUFBVztBQUNqRSxjQUFRO0FBQUEsSUFDVjtBQUdBLFFBQUksU0FBUyxLQUFPO0FBQ2xCLFlBQU0sSUFBSSxNQUFNLGlEQUFpRDtBQUFBLElBQ25FO0FBRUEsaUJBQWE7QUFDYixpQkFBYTtBQUNiLGdCQUFZO0FBRVosYUFBUztBQUVULFFBQUksT0FBTyxRQUFRLGFBQWEsTUFBUSxTQUFTO0FBQ2pELE1BQUUsR0FBRyxJQUFJLE9BQU8sS0FBSztBQUNyQixNQUFFLEdBQUcsSUFBSSxPQUFPLEtBQUs7QUFDckIsTUFBRSxHQUFHLElBQUksT0FBTyxJQUFJO0FBQ3BCLE1BQUUsR0FBRyxJQUFJLEtBQUs7QUFFZCxRQUFJLE1BQU0sUUFBUSxhQUFjLE1BQVE7QUFDeEMsTUFBRSxHQUFHLElBQUksUUFBUSxJQUFJO0FBQ3JCLE1BQUUsR0FBRyxJQUFJLE1BQU07QUFFZixNQUFFLEdBQUcsSUFBSSxRQUFRLEtBQUssS0FBTTtBQUU1QixNQUFFLEdBQUcsSUFBSSxRQUFRLEtBQUs7QUFFdEIsTUFBRSxHQUFHLElBQUksYUFBYSxJQUFJO0FBRTFCLE1BQUUsR0FBRyxJQUFJLFdBQVc7QUFFcEIsYUFBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUMxQixRQUFFLElBQUksQ0FBQyxJQUFJQSxNQUFLLENBQUM7QUFBQSxJQUNuQjtBQUVBLFdBQU8sT0FBTyxrQkFBVSxDQUFDO0FBQUEsRUFDM0I7QUFFQSxNQUFPLGFBQVE7OztBTDVFUixXQUFTLGtCQUFrQjtBQUNoQyxRQUFJLFdBQVcsVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSTtBQUNuRixRQUFJLGFBQWEsV0FBTztBQUN4QixXQUFPLFdBQVk7QUFDakIsVUFBSSxXQUFXLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUk7QUFDbkYsVUFBSUMsVUFBUyxHQUFHLE9BQU8sUUFBUSxFQUFFLE9BQU8sYUFBYSxLQUFLLE1BQU0sR0FBRztBQUNuRSxVQUFJLFNBQVMsV0FBVyxJQUFJLE9BQU8sUUFBUSxJQUFJO0FBQy9DLGFBQU8sR0FBRyxPQUFPQSxPQUFNLEVBQUUsT0FBTyxTQUFTLGFBQWEsV0FBTyxDQUFDLEVBQUUsT0FBTyxNQUFNO0FBQUEsSUFDL0U7QUFBQSxFQUNGO0FBUUEsTUFBSSwrQkFBK0IsU0FBU0MsZ0NBQStCO0FBQ3pFLFFBQUlDLFNBQU8sVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQzlFRixVQUFTRSxPQUFLLFFBQ2QsU0FBU0EsT0FBSyxRQUNkLGdCQUFnQkEsT0FBSztBQUN2QixlQUFPLHNCQUFRLFdBQVk7QUFDekIsYUFBTyxpQkFBaUIsZ0JBQWdCRixPQUFNLEVBQUUsTUFBTTtBQUFBLElBQ3hELEdBQUcsQ0FBQyxlQUFlQSxTQUFRLE1BQU0sQ0FBQztBQUFBLEVBQ3BDO0FBQ0EsTUFBSSx3QkFBd0IsU0FBU0cseUJBQXdCO0FBQzNELFFBQUlDLFVBQVEsVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQy9FLGVBQWVBLFFBQU0sUUFDckJKLFVBQVMsaUJBQWlCLFNBQVMsS0FBSyxjQUN4QyxlQUFlSSxRQUFNLFFBQ3JCLFNBQVMsaUJBQWlCLFNBQVMsS0FBSyxjQUN4QyxnQkFBZ0JBLFFBQU07QUFHeEIsUUFBSSxLQUFLLGFBQUFDLFFBQU0sTUFBTTtBQUNyQixlQUFPLHNCQUFRLFdBQVk7QUFDekIsYUFBTyxpQkFBaUIsR0FBRyxPQUFPTCxPQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxNQUFNO0FBQUEsSUFDcEUsR0FBRyxDQUFDLElBQUksZUFBZUEsU0FBUSxNQUFNLENBQUM7QUFBQSxFQUN4QztBQUNPLE1BQUkscUJBQXFCLFdBQVcsYUFBQUssVUFBUSx3QkFBd0I7OztBTWxEcEUsTUFBSSxpQkFBaUI7QUFDckIsTUFBSSxrQkFBa0I7OztBQ0s3QixNQUFBQyxnQkFBZ0Y7OztBQ1l6RSxXQUFTLE9BQU8sS0FBSztBQUMxQixXQUFPLE9BQU8sS0FBSyxHQUFHO0FBQUEsRUFDeEI7OztBQ25CQSxNQUFBQyxnQkFBdUQ7OztBQ0R2RCxNQUFBQyxnQkFBOEI7OztBQ0F2QixNQUFJLHVCQUF1QjtBQUFBLElBQ2hDLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxFQUNSO0FBQ08sTUFBSSxzQkFBc0I7OztBQ1pqQyxXQUFTLFFBQVEsR0FBRyxHQUFHO0FBQUUsUUFBSSxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksSUFBSSxPQUFPLHNCQUFzQixDQUFDO0FBQUcsWUFBTSxJQUFJLEVBQUUsT0FBTyxTQUFVQyxJQUFHO0FBQUUsZUFBTyxPQUFPLHlCQUF5QixHQUFHQSxFQUFDLEVBQUU7QUFBQSxNQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssTUFBTSxHQUFHLENBQUM7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQUc7QUFDOVAsV0FBUyxjQUFjLEdBQUc7QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsVUFBSSxJQUFJLFFBQVEsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQztBQUFHLFVBQUksSUFBSSxRQUFRLE9BQU8sQ0FBQyxHQUFHLElBQUUsRUFBRSxRQUFRLFNBQVVBLElBQUc7QUFBRSx3QkFBZ0IsR0FBR0EsSUFBRyxFQUFFQSxFQUFDLENBQUM7QUFBQSxNQUFHLENBQUMsSUFBSSxPQUFPLDRCQUE0QixPQUFPLGlCQUFpQixHQUFHLE9BQU8sMEJBQTBCLENBQUMsQ0FBQyxJQUFJLFFBQVEsT0FBTyxDQUFDLENBQUMsRUFBRSxRQUFRLFNBQVVBLElBQUc7QUFBRSxlQUFPLGVBQWUsR0FBR0EsSUFBRyxPQUFPLHlCQUF5QixHQUFHQSxFQUFDLENBQUM7QUFBQSxNQUFHLENBQUM7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQUc7QUFDdGIsV0FBUyxnQkFBZ0IsR0FBRyxHQUFHLEdBQUc7QUFBRSxZQUFRLElBQUksZUFBZSxDQUFDLE1BQU0sSUFBSSxPQUFPLGVBQWUsR0FBRyxHQUFHLEVBQUUsT0FBTyxHQUFHLFlBQVksTUFBSSxjQUFjLE1BQUksVUFBVSxLQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxHQUFHO0FBQUEsRUFBRztBQUNuTCxXQUFTLG1CQUFtQixHQUFHO0FBQUUsV0FBTyxtQkFBbUIsQ0FBQyxLQUFLLGlCQUFpQixDQUFDLEtBQUssNEJBQTRCLENBQUMsS0FBSyxtQkFBbUI7QUFBQSxFQUFHO0FBQ2hKLFdBQVMscUJBQXFCO0FBQUUsVUFBTSxJQUFJLFVBQVUsc0lBQXNJO0FBQUEsRUFBRztBQUM3TCxXQUFTLDRCQUE0QixHQUFHLEdBQUc7QUFBRSxRQUFJLEdBQUc7QUFBRSxVQUFJLFlBQVksT0FBTztBQUFHLGVBQU8sa0JBQWtCLEdBQUcsQ0FBQztBQUFHLFVBQUksSUFBSSxDQUFDLEVBQUUsU0FBUyxLQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRTtBQUFHLGFBQU8sYUFBYSxLQUFLLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxZQUFZLE9BQU8sVUFBVSxLQUFLLFVBQVUsSUFBSSxNQUFNLEtBQUssQ0FBQyxJQUFJLGdCQUFnQixLQUFLLDJDQUEyQyxLQUFLLENBQUMsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLElBQUk7QUFBQSxJQUFRO0FBQUEsRUFBRTtBQUN6WCxXQUFTLGlCQUFpQixHQUFHO0FBQUUsUUFBSSxlQUFlLE9BQU8sVUFBVSxRQUFRLEVBQUUsT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFLFlBQVk7QUFBRyxhQUFPLE1BQU0sS0FBSyxDQUFDO0FBQUEsRUFBRztBQUNoSixXQUFTLG1CQUFtQixHQUFHO0FBQUUsUUFBSSxNQUFNLFFBQVEsQ0FBQztBQUFHLGFBQU8sa0JBQWtCLENBQUM7QUFBQSxFQUFHO0FBQ3BGLFdBQVMsa0JBQWtCLEdBQUcsR0FBRztBQUFFLEtBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxZQUFZLElBQUksRUFBRTtBQUFTLGFBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxHQUFHO0FBQUssUUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQUcsV0FBTztBQUFBLEVBQUc7QUFDbkosV0FBUyxnQkFBZ0IsR0FBRyxHQUFHO0FBQUUsUUFBSSxFQUFFLGFBQWE7QUFBSSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxFQUFHO0FBQ2xILFdBQVMsa0JBQWtCLEdBQUcsR0FBRztBQUFFLGFBQVMsSUFBSSxHQUFHLElBQUksRUFBRSxRQUFRLEtBQUs7QUFBRSxVQUFJLElBQUksRUFBRSxDQUFDO0FBQUcsUUFBRSxhQUFhLEVBQUUsY0FBYyxPQUFJLEVBQUUsZUFBZSxNQUFJLFdBQVcsTUFBTSxFQUFFLFdBQVcsT0FBSyxPQUFPLGVBQWUsR0FBRyxlQUFlLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUN2TyxXQUFTLGFBQWEsR0FBRyxHQUFHLEdBQUc7QUFBRSxXQUFPLEtBQUssa0JBQWtCLEVBQUUsV0FBVyxDQUFDLEdBQUcsS0FBSyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsT0FBTyxlQUFlLEdBQUcsYUFBYSxFQUFFLFVBQVUsTUFBRyxDQUFDLEdBQUc7QUFBQSxFQUFHO0FBQzFLLFdBQVMsZUFBZSxHQUFHO0FBQUUsUUFBSSxJQUFJLGFBQWEsR0FBRyxRQUFRO0FBQUcsV0FBTyxZQUFZLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSTtBQUFBLEVBQUk7QUFDNUcsV0FBUyxhQUFhLEdBQUcsR0FBRztBQUFFLFFBQUksWUFBWSxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQUcsYUFBTztBQUFHLFFBQUksSUFBSSxFQUFFLE9BQU8sV0FBVztBQUFHLFFBQUksV0FBVyxHQUFHO0FBQUUsVUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssU0FBUztBQUFHLFVBQUksWUFBWSxRQUFRLENBQUM7QUFBRyxlQUFPO0FBQUcsWUFBTSxJQUFJLFVBQVUsOENBQThDO0FBQUEsSUFBRztBQUFFLFlBQVEsYUFBYSxJQUFJLFNBQVMsUUFBUSxDQUFDO0FBQUEsRUFBRztBQUMzVCxXQUFTLFFBQVEsR0FBRztBQUFFO0FBQTJCLFdBQU8sVUFBVSxjQUFjLE9BQU8sVUFBVSxZQUFZLE9BQU8sT0FBTyxXQUFXLFNBQVVDLElBQUc7QUFBRSxhQUFPLE9BQU9BO0FBQUEsSUFBRyxJQUFJLFNBQVVBLElBQUc7QUFBRSxhQUFPQSxNQUFLLGNBQWMsT0FBTyxVQUFVQSxHQUFFLGdCQUFnQixVQUFVQSxPQUFNLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsSUFBRyxHQUFHLFFBQVEsQ0FBQztBQUFBLEVBQUc7QUFVdFQsTUFBSSxxQkFBcUIscUJBQXFCO0FBTXJELE1BQUlDLFlBQVcsU0FBU0EsVUFBUyxLQUFLO0FBQ3BDLFdBQU8sT0FBTyxRQUFRLEdBQUcsTUFBTTtBQUFBLEVBQ2pDO0FBTU8sTUFBSSxxQkFBcUIsU0FBU0Msb0JBQW1CLFdBQVc7QUFDckUsV0FBTyxjQUFjO0FBQUEsRUFDdkI7QUFRTyxNQUFJLGVBQWUsU0FBU0MsY0FBYSxXQUFXLGlCQUFpQjtBQUMxRSxRQUFJLGFBQWEsTUFBTTtBQUNyQixhQUFPLG1CQUFtQjtBQUFBLElBQzVCO0FBQ0EsUUFBSSxPQUFPLFVBQVUsWUFBWTtBQUNqQyxRQUFJLG1CQUFtQixJQUFJLEdBQUc7QUFDNUIsYUFBTyxvQkFBb0IscUJBQXFCLFFBQVEsb0JBQW9CLFNBQVkscUJBQXFCLFFBQVEscUJBQXFCO0FBQUEsSUFDNUksT0FBTztBQUNMLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQVNPLE1BQUksUUFBUSxTQUFTQyxPQUFNLE9BQU8sT0FBTyxXQUFXO0FBQ3pELFFBQUksT0FBTyxNQUFNLE1BQU0sR0FBRztBQUMxQixRQUFJQyxRQUFPO0FBQ1gsV0FBTyxLQUFLLFFBQVE7QUFDbEIsVUFBSSxVQUFVLEtBQUssTUFBTTtBQUN6QixVQUFJQSxNQUFLLGVBQWUsT0FBTyxNQUFNLE9BQU87QUFDMUMsWUFBSSxhQUFhQSxNQUFLLGVBQWUsU0FBUyxNQUFNLFFBQVFBLE1BQUssU0FBUyxFQUFFLGVBQWUsT0FBTyxNQUFNLE1BQU07QUFDNUcsY0FBSUEsTUFBSyxTQUFTLEVBQUUsT0FBTyxhQUFhLFVBQVU7QUFDaEQsWUFBQUEsUUFBT0EsTUFBSyxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsTUFBTSxNQUFNQSxPQUFNLFNBQVM7QUFBQSxVQUN0RSxPQUFPO0FBQ0wsWUFBQUEsUUFBT0EsTUFBSyxTQUFTLEVBQUUsT0FBTztBQUFBLFVBQ2hDO0FBQUEsUUFDRixPQUFPO0FBQ0wsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRixPQUFPO0FBQ0wsWUFBSUEsTUFBSyxPQUFPLGFBQWEsVUFBVTtBQUNyQyxVQUFBQSxRQUFPQSxNQUFLLE9BQU8sRUFBRSxTQUFTLE1BQU0sTUFBTUEsT0FBTSxTQUFTO0FBQUEsUUFDM0QsT0FBTztBQUNMLFVBQUFBLFFBQU9BLE1BQUssT0FBTztBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxXQUFPQTtBQUFBLEVBQ1Q7QUFRTyxNQUFJLFFBQVEsU0FBU0MsT0FBTSxPQUFPLE9BQU9DLFFBQU87QUFDckQsUUFBSSxPQUFPLE1BQU0sTUFBTSxHQUFHO0FBQzFCLFFBQUksZUFBZSxLQUFLLElBQUk7QUFDNUIsUUFBSUYsUUFBTztBQUNYLFdBQU8sS0FBSyxRQUFRO0FBQ2xCLFVBQUksVUFBVSxLQUFLLE1BQU07QUFDekIsVUFBSUEsTUFBSyxlQUFlLE9BQU8sTUFBTSxPQUFPO0FBQzFDLFFBQUFBLE1BQUssT0FBTyxJQUFJLENBQUM7QUFBQSxNQUNuQjtBQUNBLE1BQUFBLFFBQU9BLE1BQUssT0FBTztBQUFBLElBQ3JCO0FBQ0EsSUFBQUEsTUFBSyxZQUFZLElBQUlFO0FBQ3JCLFdBQU87QUFBQSxFQUNUO0FBU08sTUFBSSxXQUF3QiwyQkFBWTtBQUM3QyxhQUFTQyxVQUFTLFVBQVU7QUFDMUIsVUFBSSxlQUFlLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUksQ0FBQztBQUN4RixzQkFBZ0IsTUFBTUEsU0FBUTtBQUM5QixXQUFLLFdBQVc7QUFDaEIsV0FBSyxlQUFlO0FBQUEsSUFDdEI7QUFVQSxXQUFPLGFBQWFBLFdBQVUsQ0FBQztBQUFBLE1BQzdCLEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxTQUFTQyxPQUFNO0FBQzdCLFlBQUksZ0JBQWdCLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUksQ0FBQztBQUN6RixZQUFJLFVBQVUsVUFBVSxTQUFTLElBQUksVUFBVSxDQUFDLElBQUk7QUFDcEQsWUFBSSxZQUFZLFVBQVUsU0FBUyxJQUFJLFVBQVUsQ0FBQyxJQUFJO0FBQ3RELFlBQUksQ0FBQyxLQUFLLGFBQWEsUUFBUTtBQUM3QixpQkFBTyxLQUFLLFNBQVMsT0FBTztBQUFBLFFBQzlCO0FBQ0EsWUFBSSxDQUFDLE1BQU0sUUFBUSxLQUFLLFlBQVksR0FBRztBQUNyQyxjQUFJQyxRQUFNO0FBQ1YsaUJBQU8sS0FBSyxVQUFVQSxVQUFRLFNBQVMsTUFBTSxTQUFTLEtBQUssWUFBWSxPQUFPLFFBQVEsV0FBVyxTQUFTLFNBQVMsTUFBTSxlQUFlLEtBQUssY0FBYyxTQUFTLE9BQU8sUUFBUUEsV0FBUyxTQUFTQSxTQUFPLE1BQU1ELE9BQU0sS0FBSyxjQUFjLFNBQVMsQ0FBQztBQUFBLFFBQ3ZQO0FBQ0EsZUFBTyxLQUFLLFNBQVMsS0FBSyxhQUFhLElBQUksU0FBVSxZQUFZO0FBQy9ELGNBQUlFLFNBQU87QUFDWCxrQkFBUUEsV0FBUyxVQUFVLE1BQU0sU0FBUyxVQUFVLE9BQU8sUUFBUSxZQUFZLFNBQVMsVUFBVSxNQUFNLGVBQWUsWUFBWSxTQUFTLE9BQU8sUUFBUUEsWUFBVSxTQUFTQSxVQUFRLE1BQU1GLE9BQU0sWUFBWSxTQUFTO0FBQUEsUUFDek4sQ0FBQyxDQUFDO0FBQUEsTUFDSjtBQUFBLElBQ0YsQ0FBQyxDQUFDO0FBQUEsRUFDSixFQUFFO0FBU0ssV0FBUyxTQUFTLE1BQU0sS0FBSztBQUNsQyxXQUFPLElBQUksU0FBUyxNQUFNLEdBQUc7QUFBQSxFQUMvQjtBQVdPLE1BQUksY0FBYyxTQUFTRyxhQUFZSCxPQUFNLE1BQU0sV0FBVztBQUNuRSxRQUFJLFNBQVM7QUFBQSxNQUNYLFdBQVdBLE1BQUs7QUFBQSxJQUNsQjtBQUNBLGFBQVMsS0FBS0EsT0FBTUksT0FBTTtBQUN4QixVQUFJLGdCQUFnQixVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJO0FBQ3hGLFVBQUksT0FBTyxVQUFVLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSTtBQUNqRCxhQUFPLEtBQUtKLEtBQUksRUFBRSxRQUFRLFNBQVUsS0FBSztBQUN2QyxZQUFJLFVBQVUsT0FBTyxHQUFHLE9BQU8sTUFBTSxHQUFHLEVBQUUsT0FBTyxHQUFHLElBQUksR0FBRyxPQUFPLEdBQUc7QUFFckUsWUFBSSxDQUFDLEVBQUUsT0FBTyxtQkFBbUIsT0FBTyxPQUFPLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNqRyxjQUFJLFFBQVEsV0FBVztBQUNyQjtBQUFBLFVBQ0YsT0FBTztBQUNMLGdCQUFJLG1CQUFtQixJQUFJLE9BQU8sT0FBTyxPQUFPLFdBQVcsV0FBVyxFQUFFLE9BQU8sV0FBVyxNQUFNLENBQUM7QUFDakcsc0JBQVUsUUFBUSxRQUFRLGtCQUFrQixFQUFFO0FBQUEsVUFDaEQ7QUFBQSxRQUNGO0FBQ0EsWUFBSSxXQUFXLGlCQUFpQixNQUFNLFFBQVEsT0FBTztBQUNyRCxZQUFJLENBQUMsWUFBWVIsVUFBUyxRQUFRLEdBQUc7QUFDbkMsY0FBSSxZQUFZUSxNQUFLLEdBQUcsYUFBYSxXQUFXQSxNQUFLLEdBQUcsRUFBRSxTQUFTQSxNQUFLLE1BQU1JLE1BQUssTUFBTSxRQUFRLFNBQVMsSUFBSUosTUFBSyxHQUFHO0FBQ3RILGNBQUksWUFBWUksTUFBSyxHQUFHLGFBQWEsV0FBV0EsTUFBSyxHQUFHLEVBQUUsU0FBU0osTUFBSyxNQUFNSSxNQUFLLE1BQU0sUUFBUSxTQUFTLElBQUlBLE1BQUssR0FBRztBQUN0SCxjQUFJWixVQUFTLFNBQVMsS0FBSyxDQUFDLE1BQU0sUUFBUSxTQUFTLEdBQUc7QUFDcEQsaUJBQUssV0FBVyxjQUFjLFFBQVEsY0FBYyxTQUFTLFlBQVksQ0FBQyxHQUFHLGVBQWUsT0FBTztBQUFBLFVBQ3JHLE9BQU87QUFDTCxrQkFBTSxRQUFRLFNBQVMsY0FBYyxRQUFRLGNBQWMsU0FBUyxZQUFZLFNBQVM7QUFBQSxVQUMzRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsU0FBS1EsT0FBTSxJQUFJO0FBRWYsU0FBSyxNQUFNLENBQUMsR0FBRyxJQUFJO0FBQ25CLFdBQU87QUFBQSxFQUNUO0FBUU8sTUFBSSxhQUFhLFNBQVNLLFlBQVcsT0FBTyxLQUFLO0FBQ3RELFFBQUksVUFBVTtBQUFBLE1BQ1osZ0JBQWdCLFNBQVNDLGdCQUFlLFFBQVE7QUFDOUMsZUFBTyxRQUFRLGVBQWUsT0FBTyxLQUFLO0FBQUEsTUFDNUM7QUFBQSxNQUNBLGdCQUFnQixTQUFTLGVBQWUsUUFBUUMsWUFBVztBQUN6RCxlQUFPLFFBQVEsZUFBZSxPQUFPLE9BQU9BLFVBQVM7QUFBQSxNQUN2RDtBQUFBLE1BQ0EsY0FBYyxTQUFTLGFBQWEsUUFBUTtBQUMxQyxlQUFPLFFBQVEsYUFBYSxNQUFNO0FBQUEsTUFDcEM7QUFBQSxNQUNBLG1CQUFtQixTQUFTLGtCQUFrQixRQUFRO0FBQ3BELGVBQU8sUUFBUSxrQkFBa0IsT0FBTyxLQUFLO0FBQUEsTUFDL0M7QUFBQSxNQUNBLDBCQUEwQixTQUFTLHlCQUF5QixRQUFRQyxNQUFLO0FBQ3ZFLGVBQU8sUUFBUSx5QkFBeUIsT0FBTyxPQUFPQSxJQUFHO0FBQUEsTUFDM0Q7QUFBQSxNQUNBLGdCQUFnQixTQUFTLGVBQWUsUUFBUUMsV0FBVSxZQUFZO0FBQ3BFLGVBQU8sUUFBUSxlQUFlLE9BQU8sT0FBT0EsV0FBVSxVQUFVO0FBQUEsTUFDbEU7QUFBQSxNQUNBLEtBQUssU0FBUyxJQUFJLFFBQVFBLFdBQVU7QUFDbEMsZUFBTyxRQUFRLElBQUksT0FBTyxPQUFPQSxTQUFRO0FBQUEsTUFDM0M7QUFBQSxNQUNBLEtBQUssU0FBU0MsS0FBSSxTQUFTRCxXQUFVO0FBQ25DLFlBQUlBLGNBQWEsT0FBTztBQUN0QixpQkFBTyxRQUFRQSxTQUFRO0FBQUEsUUFDekI7QUFJQSxZQUFJQSxjQUFhO0FBQWEsaUJBQU8sQ0FBQztBQUN0QyxZQUFJLFNBQVNBLGNBQWEsU0FBUyxVQUFVLFFBQVEsU0FBUztBQUU5RCxZQUFJWCxTQUFRLE9BQU9XLFNBQVE7QUFDM0IsWUFBSWpCLFVBQVNNLE1BQUssS0FBSyxDQUFDLE1BQU0sUUFBUUEsTUFBSyxHQUFHO0FBQzVDLGlCQUFPLElBQUksTUFBTTtBQUFBLFlBQ2YsT0FBT0E7QUFBQSxZQUNQLE1BQU0sUUFBUTtBQUFBLFlBQ2QsS0FBSyxJQUFJLE9BQU8sUUFBUSxHQUFHO0FBQUEsVUFDN0IsR0FBRyxPQUFPO0FBQUEsUUFDWixPQUFPO0FBQ0wsaUJBQU9BO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLEtBQUssU0FBUyxJQUFJLFFBQVE7QUFDeEIsZUFBTztBQUFBLE1BQ1Q7QUFBQSxNQUNBLGdCQUFnQixTQUFTLGVBQWUsUUFBUTtBQUM5QyxlQUFPO0FBQUEsTUFDVDtBQUFBLE1BQ0EsU0FBUyxTQUFTYSxVQUFRLFFBQVE7QUFDaEMsZUFBTyxRQUFRLFFBQVEsT0FBTyxLQUFLO0FBQUEsTUFDckM7QUFBQSxNQUNBLE9BQU8sU0FBUyxNQUFNLFFBQVE7QUFDNUIsZUFBTztBQUFBLE1BQ1Q7QUFBQSxNQUNBLFdBQVcsU0FBUyxVQUFVLFFBQVE7QUFDcEMsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQ0EsUUFBSSxhQUFhLElBQUksTUFBTTtBQUFBLE1BQ3pCO0FBQUEsTUFDQSxNQUFNO0FBQUEsTUFDTjtBQUFBLElBQ0YsR0FBRyxPQUFPO0FBQ1YsV0FBTztBQUFBLEVBQ1Q7QUFPTyxNQUFJLFlBQVksU0FBU0MsV0FBVSxTQUFTO0FBQ2pELFFBQUksU0FBUyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDbEYsUUFBSSxTQUFTLGNBQWMsQ0FBQyxHQUFHLE9BQU87QUFDdEMsUUFBSSxDQUFDcEIsVUFBUyxNQUFNLEtBQUssQ0FBQ0EsVUFBUyxNQUFNLEdBQUc7QUFDMUMsYUFBTztBQUFBLElBQ1Q7QUFDQSxXQUFPLEtBQUssTUFBTSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQ3pDLFVBQUksY0FBYyxPQUFPLEdBQUc7QUFDNUIsVUFBSSxjQUFjLE9BQU8sR0FBRztBQUM1QixVQUFJQSxVQUFTLFdBQVcsS0FBS0EsVUFBUyxXQUFXLEdBQUc7QUFDbEQsZUFBTyxHQUFHLElBQUlvQixXQUFVLGNBQWMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxjQUFjLENBQUMsR0FBRyxXQUFXLENBQUM7QUFBQSxNQUN4RixPQUFPO0FBQ0wsZUFBTyxHQUFHLElBQUk7QUFBQSxNQUNoQjtBQUFBLElBQ0YsQ0FBQztBQUNELFdBQU87QUFBQSxFQUNUOzs7QUN0VEEsV0FBUyxlQUFlLEdBQUcsR0FBRztBQUFFLFdBQU8sZ0JBQWdCLENBQUMsS0FBSyxzQkFBc0IsR0FBRyxDQUFDLEtBQUtDLDZCQUE0QixHQUFHLENBQUMsS0FBSyxpQkFBaUI7QUFBQSxFQUFHO0FBQ3JKLFdBQVMsbUJBQW1CO0FBQUUsVUFBTSxJQUFJLFVBQVUsMklBQTJJO0FBQUEsRUFBRztBQUNoTSxXQUFTQSw2QkFBNEIsR0FBRyxHQUFHO0FBQUUsUUFBSSxHQUFHO0FBQUUsVUFBSSxZQUFZLE9BQU87QUFBRyxlQUFPQyxtQkFBa0IsR0FBRyxDQUFDO0FBQUcsVUFBSSxJQUFJLENBQUMsRUFBRSxTQUFTLEtBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQUcsYUFBTyxhQUFhLEtBQUssRUFBRSxnQkFBZ0IsSUFBSSxFQUFFLFlBQVksT0FBTyxVQUFVLEtBQUssVUFBVSxJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksZ0JBQWdCLEtBQUssMkNBQTJDLEtBQUssQ0FBQyxJQUFJQSxtQkFBa0IsR0FBRyxDQUFDLElBQUk7QUFBQSxJQUFRO0FBQUEsRUFBRTtBQUN6WCxXQUFTQSxtQkFBa0IsR0FBRyxHQUFHO0FBQUUsS0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLFlBQVksSUFBSSxFQUFFO0FBQVMsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUc7QUFBSyxRQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFBRyxXQUFPO0FBQUEsRUFBRztBQUNuSixXQUFTLHNCQUFzQixHQUFHLEdBQUc7QUFBRSxRQUFJLElBQUksUUFBUSxJQUFJLE9BQU8sZUFBZSxPQUFPLFVBQVUsRUFBRSxPQUFPLFFBQVEsS0FBSyxFQUFFLFlBQVk7QUFBRyxRQUFJLFFBQVEsR0FBRztBQUFFLFVBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQUksSUFBSTtBQUFJLFVBQUk7QUFBRSxZQUFJLEtBQUssSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sTUFBTSxHQUFHO0FBQUUsY0FBSSxPQUFPLENBQUMsTUFBTTtBQUFHO0FBQVEsY0FBSTtBQUFBLFFBQUk7QUFBTyxpQkFBTyxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsV0FBVyxJQUFJLElBQUk7QUFBRztBQUFBLE1BQUUsU0FBU0MsSUFBRztBQUFFLFlBQUksTUFBSSxJQUFJQTtBQUFBLE1BQUcsVUFBRTtBQUFVLFlBQUk7QUFBRSxjQUFJLENBQUMsS0FBSyxRQUFRLEVBQUUsV0FBVyxJQUFJLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNO0FBQUk7QUFBQSxRQUFRLFVBQUU7QUFBVSxjQUFJO0FBQUcsa0JBQU07QUFBQSxRQUFHO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUNuaEIsV0FBUyxnQkFBZ0IsR0FBRztBQUFFLFFBQUksTUFBTSxRQUFRLENBQUM7QUFBRyxhQUFPO0FBQUEsRUFBRztBQXVCdkQsV0FBUyxZQUFZLEtBQUssT0FBTyxNQUFNO0FBQzVDLFFBQUksV0FBVyxDQUFDLEtBQUssT0FBTyxJQUFJLEVBQUUsSUFBSSxTQUFVLEdBQUc7QUFDL0MsYUFBTyxJQUFJO0FBQUEsSUFDYixDQUFDLEVBQUUsSUFBSSxTQUFVLEdBQUc7QUFDbEIsYUFBTyxLQUFLLFVBQVUsSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLFNBQVMsT0FBTyxHQUFHO0FBQUEsSUFDckUsQ0FBQyxHQUNELFlBQVksZUFBZSxVQUFVLENBQUMsR0FDdEMsSUFBSSxVQUFVLENBQUMsR0FDZixJQUFJLFVBQVUsQ0FBQyxHQUNmLElBQUksVUFBVSxDQUFDO0FBQ2pCLFFBQUksWUFBWSxTQUFTLElBQUksU0FBUyxJQUFJLFNBQVM7QUFDbkQsV0FBTyxhQUFhO0FBQUEsRUFDdEI7OztBQ2hDTyxXQUFTLFdBQVcsS0FBSztBQUM5QixXQUFPLHFDQUFxQyxLQUFLLEdBQUc7QUFBQSxFQUN0RDs7O0FDVkEsV0FBU0MsZ0JBQWUsR0FBRyxHQUFHO0FBQUUsV0FBT0MsaUJBQWdCLENBQUMsS0FBS0MsdUJBQXNCLEdBQUcsQ0FBQyxLQUFLQyw2QkFBNEIsR0FBRyxDQUFDLEtBQUtDLGtCQUFpQjtBQUFBLEVBQUc7QUFDckosV0FBU0Esb0JBQW1CO0FBQUUsVUFBTSxJQUFJLFVBQVUsMklBQTJJO0FBQUEsRUFBRztBQUNoTSxXQUFTRCw2QkFBNEIsR0FBRyxHQUFHO0FBQUUsUUFBSSxHQUFHO0FBQUUsVUFBSSxZQUFZLE9BQU87QUFBRyxlQUFPRSxtQkFBa0IsR0FBRyxDQUFDO0FBQUcsVUFBSSxJQUFJLENBQUMsRUFBRSxTQUFTLEtBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQUcsYUFBTyxhQUFhLEtBQUssRUFBRSxnQkFBZ0IsSUFBSSxFQUFFLFlBQVksT0FBTyxVQUFVLEtBQUssVUFBVSxJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksZ0JBQWdCLEtBQUssMkNBQTJDLEtBQUssQ0FBQyxJQUFJQSxtQkFBa0IsR0FBRyxDQUFDLElBQUk7QUFBQSxJQUFRO0FBQUEsRUFBRTtBQUN6WCxXQUFTQSxtQkFBa0IsR0FBRyxHQUFHO0FBQUUsS0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLFlBQVksSUFBSSxFQUFFO0FBQVMsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUc7QUFBSyxRQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFBRyxXQUFPO0FBQUEsRUFBRztBQUNuSixXQUFTSCx1QkFBc0IsR0FBRyxHQUFHO0FBQUUsUUFBSSxJQUFJLFFBQVEsSUFBSSxPQUFPLGVBQWUsT0FBTyxVQUFVLEVBQUUsT0FBTyxRQUFRLEtBQUssRUFBRSxZQUFZO0FBQUcsUUFBSSxRQUFRLEdBQUc7QUFBRSxVQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFJLElBQUk7QUFBSSxVQUFJO0FBQUUsWUFBSSxLQUFLLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLE1BQU0sR0FBRztBQUFFLGNBQUksT0FBTyxDQUFDLE1BQU07QUFBRztBQUFRLGNBQUk7QUFBQSxRQUFJO0FBQU8saUJBQU8sRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLFdBQVcsSUFBSSxJQUFJO0FBQUc7QUFBQSxNQUFFLFNBQVNJLElBQUc7QUFBRSxZQUFJLE1BQUksSUFBSUE7QUFBQSxNQUFHLFVBQUU7QUFBVSxZQUFJO0FBQUUsY0FBSSxDQUFDLEtBQUssUUFBUSxFQUFFLFdBQVcsSUFBSSxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTTtBQUFJO0FBQUEsUUFBUSxVQUFFO0FBQVUsY0FBSTtBQUFHLGtCQUFNO0FBQUEsUUFBRztBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBRztBQUFBLEVBQUU7QUFDbmhCLFdBQVNMLGlCQUFnQixHQUFHO0FBQUUsUUFBSSxNQUFNLFFBQVEsQ0FBQztBQUFHLGFBQU87QUFBQSxFQUFHO0FBWXZELFdBQVMsU0FBUyxLQUFLO0FBRTVCLFFBQUksaUJBQWlCO0FBQ3JCLFVBQU0sSUFBSSxRQUFRLGdCQUFnQixTQUFVLEdBQUcsSUFBSSxJQUFJLElBQUk7QUFDekQsYUFBTyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUs7QUFBQSxJQUNsQyxDQUFDO0FBQ0QsUUFBSSxTQUFTLDRDQUE0QyxLQUFLLEdBQUc7QUFDakUsUUFBSSxRQUFRO0FBQ1YsVUFBSSxVQUFVRCxnQkFBZSxRQUFRLENBQUMsR0FDcEMsSUFBSSxRQUFRLENBQUMsR0FDYixJQUFJLFFBQVEsQ0FBQyxHQUNiLElBQUksUUFBUSxDQUFDO0FBQ2YsYUFBTyxDQUFDLFNBQVMsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQUEsSUFDM0Q7QUFHQSxXQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxFQUNqQjs7O0FDaENBLE1BQU8sZ0JBQVEsQ0FBQyxHQUFHLE1BQU0sR0FBRyxPQUFPLE1BQU07QUFDckMsV0FBTyxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSTtBQUFBLEVBQ2hDOzs7QUNGQSxNQUFPLG1CQUFRLENBQUNPLFNBQVE7QUFDcEIsSUFBQUEsS0FBSSxXQUFXO0FBQ2YsSUFBQUEsS0FBSSxhQUFhQSxLQUFJLE1BQU0sQ0FBQztBQUM1QixhQUFTLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSztBQUN6QixVQUFJLElBQUksR0FBRztBQUNQLFlBQUlBLEtBQUksQ0FBQyxJQUFJLEtBQUtBLEtBQUksQ0FBQyxJQUFJO0FBQUssVUFBQUEsS0FBSSxXQUFXO0FBQy9DLFFBQUFBLEtBQUksQ0FBQyxJQUFJLGNBQU1BLEtBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRztBQUFBLE1BQ2pDLFdBQVcsTUFBTSxHQUFHO0FBQ2hCLFFBQUFBLEtBQUksQ0FBQyxJQUFJLGNBQU1BLEtBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUFBLE1BQy9CO0FBQUEsSUFDSjtBQUNBLFdBQU9BO0FBQUEsRUFDWDs7O0FDYkEsTUFBTSxjQUFjLENBQUM7QUFDckIsV0FBUyxRQUFRO0FBQUEsSUFDYjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDSixHQUFHO0FBQ0MsZ0JBQVksV0FBVyxJQUFJLEdBQUcsSUFBSSxLQUFLLFlBQVk7QUFBQSxFQUN2RDtBQUNlLFdBQVIsYUFBa0IsS0FBSztBQUMxQixXQUFPLFlBQVksT0FBTyxVQUFVLFNBQVMsS0FBSyxHQUFHLENBQUMsS0FBSztBQUFBLEVBQy9EOzs7QUNmQSxNQUFPLGlCQUFRLENBQUMsTUFBTSxXQUFXLFNBQVM7QUFFdEMsUUFBSSxLQUFLLFVBQVU7QUFBRyxhQUFPLE1BQU0sVUFBVSxNQUFNLEtBQUssSUFBSTtBQUc1RCxRQUFJLGFBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxZQUFZLFVBQVU7QUFDdkMsYUFBTyxTQUNGLE1BQU0sRUFBRSxFQUNSLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxNQUFTLEVBQ3RDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUFBLElBQzlCO0FBR0EsV0FBTyxLQUFLLENBQUM7QUFBQSxFQUNqQjs7O0FDZEEsTUFBTyxlQUFRLENBQUMsU0FBUztBQUNyQixRQUFJLEtBQUssU0FBUztBQUFHLGFBQU87QUFDNUIsVUFBTSxJQUFJLEtBQUssU0FBUztBQUN4QixRQUFJLGFBQUssS0FBSyxDQUFDLENBQUMsS0FBSztBQUFVLGFBQU8sS0FBSyxDQUFDLEVBQUUsWUFBWTtBQUMxRCxXQUFPO0FBQUEsRUFDWDs7O0FDUEEsTUFBTSxFQUFFLElBQUksS0FBSyxJQUFJLElBQUk7QUFRekIsTUFBTSxRQUFRLEtBQUs7QUFDbkIsTUFBTSxVQUFVLEtBQUs7QUFDckIsTUFBTSxVQUFVLEtBQUs7QUFDckIsTUFBTSxVQUFVLE1BQU07OztBQ1h0QixNQUFPLGdCQUFRO0FBQUEsSUFDWCxRQUFRLENBQUM7QUFBQSxJQUNULFlBQVksQ0FBQztBQUFBLEVBQ2pCOzs7QUNBQSxNQUFNLFFBQU4sTUFBWTtBQUFBLElBQ1IsZUFBZSxNQUFNO0FBQ2pCLFlBQU0sS0FBSztBQUNYLFVBQ0ksYUFBSyxLQUFLLENBQUMsQ0FBQyxNQUFNLFlBQ2xCLEtBQUssQ0FBQyxFQUFFLGVBQ1IsS0FBSyxDQUFDLEVBQUUsZ0JBQWdCLEtBQUssYUFDL0I7QUFFRSxlQUFPLEtBQUssQ0FBQztBQUFBLE1BQ2pCO0FBRUEsVUFBSSxPQUFPLGFBQUssSUFBSTtBQUNwQixVQUFJLGFBQWE7QUFDakIsVUFBSSxDQUFDLE1BQU07QUFDUCxxQkFBYTtBQUNiLFlBQUksQ0FBQyxjQUFPLFFBQVE7QUFDaEIsd0JBQU8sYUFBYSxjQUFPLFdBQVcsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzlELHdCQUFPLFNBQVM7QUFBQSxRQUNwQjtBQUVBLGlCQUFTLE9BQU8sY0FBTyxZQUFZO0FBQy9CLGlCQUFPLElBQUksS0FBSyxHQUFHLElBQUk7QUFDdkIsY0FBSTtBQUFNO0FBQUEsUUFDZDtBQUFBLE1BQ0o7QUFDQSxVQUFJLGNBQU8sT0FBTyxJQUFJLEdBQUc7QUFDckIsY0FBTUMsT0FBTSxjQUFPLE9BQU8sSUFBSSxFQUFFO0FBQUEsVUFDNUI7QUFBQSxVQUNBLGFBQWEsT0FBTyxLQUFLLE1BQU0sR0FBRyxFQUFFO0FBQUEsUUFDeEM7QUFDQSxXQUFHLE9BQU8saUJBQVNBLElBQUc7QUFBQSxNQUMxQixPQUFPO0FBQ0gsY0FBTSxJQUFJLE1BQU0scUJBQXFCLElBQUk7QUFBQSxNQUM3QztBQUVBLFVBQUksR0FBRyxLQUFLLFdBQVc7QUFBRyxXQUFHLEtBQUssS0FBSyxDQUFDO0FBQUEsSUFDNUM7QUFBQSxJQUNBLFdBQVc7QUFDUCxVQUFJLGFBQUssS0FBSyxHQUFHLEtBQUs7QUFBWSxlQUFPLEtBQUssSUFBSTtBQUNsRCxhQUFPLElBQUksS0FBSyxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQUEsSUFDbEM7QUFBQSxFQUNKO0FBQ0EsTUFBTyxnQkFBUTs7O0FDN0NSLE1BQU0sVUFBVTs7O0FDRXZCLE1BQU0sU0FBUyxJQUFJLFNBQVM7QUFDeEIsV0FBTyxJQUFJLE9BQU8sTUFBTSxHQUFHLElBQUk7QUFBQSxFQUNuQztBQUVBLFNBQU8sUUFBUTtBQUNmLFNBQU8sVUFBVTtBQUVqQixNQUFPLGlCQUFROzs7QUNSZixNQUFNLFdBQVcsSUFBSSxTQUFTO0FBQzFCLFdBQU8sZUFBTyxNQUFNLE1BQU07QUFDMUIsVUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSTtBQUNyQixVQUFNLFFBQVEsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUk7QUFDMUMsUUFBSSxNQUFNO0FBQUcsYUFBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUs7QUFDbkMsV0FBTztBQUFBLE1BQ0gsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLE1BQU0sSUFBSTtBQUFBO0FBQUEsTUFDbEMsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLE1BQU0sSUFBSTtBQUFBO0FBQUEsTUFDbEMsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLE1BQU0sSUFBSTtBQUFBO0FBQUEsTUFDbEM7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUVBLE1BQU8sbUJBQVE7OztBQ2RmLE1BQU0sRUFBRSxLQUFBQyxLQUFJLElBQUk7QUFFaEIsTUFBTSxXQUFXLElBQUksU0FBUztBQUMxQixRQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxlQUFPLE1BQU0sS0FBSztBQUNsQyxRQUFJLElBQUk7QUFDUixRQUFJLElBQUk7QUFDUixRQUFJLElBQUk7QUFDUixVQUFNLElBQUksSUFBSUEsS0FBSSxHQUFHQSxLQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLFVBQU0sSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLEtBQUs7QUFDaEMsVUFBTSxLQUFLLElBQUksSUFBSSxLQUFLO0FBQ3hCLFVBQU0sS0FBSyxJQUFJLElBQUksS0FBSztBQUN4QixVQUFNLEtBQUssSUFBSSxJQUFJLEtBQUs7QUFDeEIsV0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFBQSxFQUN0QjtBQUVBLE1BQU8sbUJBQVE7OztBQ1RmLGdCQUFNLFVBQVUsT0FBTyxXQUFZO0FBQy9CLFdBQU8saUJBQVMsS0FBSyxJQUFJO0FBQUEsRUFDN0I7QUFFQSxpQkFBTyxPQUFPLElBQUksU0FBUyxJQUFJLGNBQU0sR0FBRyxNQUFNLE1BQU07QUFFcEQsZ0JBQU0sT0FBTyxPQUFPO0FBRXBCLGdCQUFNLFdBQVcsS0FBSztBQUFBLElBQ2xCLEdBQUc7QUFBQSxJQUNILE1BQU0sSUFBSSxTQUFTO0FBQ2YsYUFBTyxlQUFPLE1BQU0sTUFBTTtBQUMxQixVQUFJLGFBQUssSUFBSSxNQUFNLFdBQVcsS0FBSyxXQUFXLEdBQUc7QUFDN0MsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQUEsRUFDSixDQUFDOzs7QUN0QkQsTUFBTSxNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxHQUFHLElBQUk7QUFVekMsTUFBTSxVQUFVLElBQUksU0FBUztBQUN6QixVQUFNLE9BQU8sZUFBTyxNQUFNLE1BQU07QUFDaEMsUUFBSSxPQUFPLGFBQUssSUFBSSxLQUFLO0FBQ3pCLFNBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztBQUMxQixTQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSTtBQUMvQixTQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSTtBQUMvQixRQUFJLFNBQVMsVUFBVyxLQUFLLFNBQVMsS0FBSyxLQUFLLENBQUMsSUFBSSxHQUFJO0FBQ3JELFdBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJO0FBQ3RDLGFBQU87QUFBQSxJQUNYLE9BQU87QUFDSCxXQUFLLFNBQVM7QUFBQSxJQUNsQjtBQUNBLFdBQU8sR0FBRyxJQUFJLElBQUksS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUFBLEVBQ3BDO0FBRUEsTUFBTyxrQkFBUTs7O0FDaEJmLE1BQU0sVUFBVSxJQUFJLFNBQVM7QUFDekIsV0FBTyxlQUFPLE1BQU0sTUFBTTtBQUMxQixRQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSTtBQUVoQixTQUFLO0FBQ0wsU0FBSztBQUNMLFNBQUs7QUFFTCxVQUFNLFNBQVMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUMxQixVQUFNLFNBQVMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUUxQixVQUFNLEtBQUssU0FBUyxVQUFVO0FBQzlCLFFBQUksR0FBRztBQUVQLFFBQUksV0FBVyxRQUFRO0FBQ25CLFVBQUk7QUFDSixVQUFJLE9BQU87QUFBQSxJQUNmLE9BQU87QUFDSCxVQUNJLElBQUksT0FDRyxTQUFTLFdBQVcsU0FBUyxXQUM3QixTQUFTLFdBQVcsSUFBSSxTQUFTO0FBQUEsSUFDaEQ7QUFFQSxRQUFJLEtBQUs7QUFBUSxXQUFLLElBQUksTUFBTSxTQUFTO0FBQUEsYUFDaEMsS0FBSztBQUFRLFVBQUksS0FBSyxJQUFJLE1BQU0sU0FBUztBQUFBLGFBQ3pDLEtBQUs7QUFBUSxVQUFJLEtBQUssSUFBSSxNQUFNLFNBQVM7QUFFbEQsU0FBSztBQUNMLFFBQUksSUFBSTtBQUFHLFdBQUs7QUFDaEIsUUFBSSxLQUFLLFNBQVMsS0FBSyxLQUFLLENBQUMsTUFBTTtBQUFXLGFBQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN0RSxXQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxFQUNuQjtBQUVBLE1BQU8sa0JBQVE7OztBQ3pDZixNQUFNLEVBQUUsTUFBTSxJQUFJO0FBVWxCLE1BQU0sVUFBVSxJQUFJLFNBQVM7QUFDekIsVUFBTSxPQUFPLGVBQU8sTUFBTSxNQUFNO0FBQ2hDLFFBQUksT0FBTyxhQUFLLElBQUksS0FBSztBQUN6QixRQUFJLEtBQUssT0FBTyxHQUFHLENBQUMsS0FBSyxPQUFPO0FBQzVCLGFBQU8sZ0JBQVEsZ0JBQVEsSUFBSSxHQUFHLElBQUk7QUFBQSxJQUN0QztBQUNBLFNBQUssQ0FBQyxJQUFJLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDdkIsU0FBSyxDQUFDLElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQztBQUN2QixTQUFLLENBQUMsSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQ3ZCLFFBQUksU0FBUyxVQUFXLEtBQUssU0FBUyxLQUFLLEtBQUssQ0FBQyxJQUFJLEdBQUk7QUFDckQsV0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUk7QUFDdEMsYUFBTztBQUFBLElBQ1g7QUFDQSxXQUFPLEdBQUcsSUFBSSxJQUFJLEtBQUssTUFBTSxHQUFHLFNBQVMsUUFBUSxJQUFJLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQztBQUFBLEVBQ3JFO0FBRUEsTUFBTyxrQkFBUTs7O0FDNUJmLE1BQU0sRUFBRSxPQUFBQyxPQUFNLElBQUk7QUFFbEIsTUFBTSxVQUFVLElBQUksU0FBUztBQUN6QixXQUFPLGVBQU8sTUFBTSxLQUFLO0FBQ3pCLFVBQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJO0FBQ2xCLFFBQUksR0FBRyxHQUFHO0FBQ1YsUUFBSSxNQUFNLEdBQUc7QUFDVCxVQUFJLElBQUksSUFBSSxJQUFJO0FBQUEsSUFDcEIsT0FBTztBQUNILFlBQU0sS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ25CLFlBQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFlBQU0sS0FBSyxJQUFJLE1BQU0sS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUk7QUFDL0MsWUFBTSxLQUFLLElBQUksSUFBSTtBQUNuQixZQUFNLEtBQUssSUFBSTtBQUNmLFNBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSTtBQUNqQixTQUFHLENBQUMsSUFBSTtBQUNSLFNBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSTtBQUNqQixlQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztBQUN4QixZQUFJLEdBQUcsQ0FBQyxJQUFJO0FBQUcsYUFBRyxDQUFDLEtBQUs7QUFDeEIsWUFBSSxHQUFHLENBQUMsSUFBSTtBQUFHLGFBQUcsQ0FBQyxLQUFLO0FBQ3hCLFlBQUksSUFBSSxHQUFHLENBQUMsSUFBSTtBQUFHLFlBQUUsQ0FBQyxJQUFJLE1BQU0sS0FBSyxNQUFNLElBQUksR0FBRyxDQUFDO0FBQUEsaUJBQzFDLElBQUksR0FBRyxDQUFDLElBQUk7QUFBRyxZQUFFLENBQUMsSUFBSTtBQUFBLGlCQUN0QixJQUFJLEdBQUcsQ0FBQyxJQUFJO0FBQUcsWUFBRSxDQUFDLElBQUksTUFBTSxLQUFLLE9BQU8sSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLO0FBQUE7QUFDN0QsWUFBRSxDQUFDLElBQUk7QUFBQSxNQUNoQjtBQUNBLE9BQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDQSxPQUFNLEVBQUUsQ0FBQyxJQUFJLEdBQUcsR0FBR0EsT0FBTSxFQUFFLENBQUMsSUFBSSxHQUFHLEdBQUdBLE9BQU0sRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQUEsSUFDeEU7QUFDQSxRQUFJLEtBQUssU0FBUyxHQUFHO0FBRWpCLGFBQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUFBLElBQzVCO0FBQ0EsV0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFBQSxFQUN0QjtBQUVBLE1BQU8sa0JBQVE7OztBQ2hDZixNQUFNLFNBQVM7QUFDZixNQUFNLFVBQ0Y7QUFDSixNQUFNLGFBQ0Y7QUFDSixNQUFNLGNBQ0Y7QUFDSixNQUFNLFNBQ0Y7QUFDSixNQUFNLFVBQ0Y7QUFFSixNQUFNLEVBQUUsT0FBQUMsT0FBTSxJQUFJO0FBRWxCLE1BQU0sVUFBVSxDQUFDQyxTQUFRO0FBQ3JCLElBQUFBLE9BQU1BLEtBQUksWUFBWSxFQUFFLEtBQUs7QUFDN0IsUUFBSTtBQUVKLFFBQUksY0FBTSxPQUFPLE9BQU87QUFDcEIsVUFBSTtBQUNBLGVBQU8sY0FBTSxPQUFPLE1BQU1BLElBQUc7QUFBQSxNQUVqQyxTQUFTLEdBQUc7QUFBQSxNQUFDO0FBQUEsSUFDakI7QUFHQSxRQUFLLElBQUlBLEtBQUksTUFBTSxNQUFNLEdBQUk7QUFDekIsWUFBTUMsT0FBTSxFQUFFLE1BQU0sR0FBRyxDQUFDO0FBQ3hCLGVBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLO0FBQ3hCLFFBQUFBLEtBQUksQ0FBQyxJQUFJLENBQUNBLEtBQUksQ0FBQztBQUFBLE1BQ25CO0FBQ0EsTUFBQUEsS0FBSSxDQUFDLElBQUk7QUFDVCxhQUFPQTtBQUFBLElBQ1g7QUFHQSxRQUFLLElBQUlELEtBQUksTUFBTSxPQUFPLEdBQUk7QUFDMUIsWUFBTUMsT0FBTSxFQUFFLE1BQU0sR0FBRyxDQUFDO0FBQ3hCLGVBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLO0FBQ3hCLFFBQUFBLEtBQUksQ0FBQyxJQUFJLENBQUNBLEtBQUksQ0FBQztBQUFBLE1BQ25CO0FBQ0EsYUFBT0E7QUFBQSxJQUNYO0FBR0EsUUFBSyxJQUFJRCxLQUFJLE1BQU0sVUFBVSxHQUFJO0FBQzdCLFlBQU1DLE9BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQztBQUN4QixlQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztBQUN4QixRQUFBQSxLQUFJLENBQUMsSUFBSUYsT0FBTUUsS0FBSSxDQUFDLElBQUksSUFBSTtBQUFBLE1BQ2hDO0FBQ0EsTUFBQUEsS0FBSSxDQUFDLElBQUk7QUFDVCxhQUFPQTtBQUFBLElBQ1g7QUFHQSxRQUFLLElBQUlELEtBQUksTUFBTSxXQUFXLEdBQUk7QUFDOUIsWUFBTUMsT0FBTSxFQUFFLE1BQU0sR0FBRyxDQUFDO0FBQ3hCLGVBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLO0FBQ3hCLFFBQUFBLEtBQUksQ0FBQyxJQUFJRixPQUFNRSxLQUFJLENBQUMsSUFBSSxJQUFJO0FBQUEsTUFDaEM7QUFDQSxNQUFBQSxLQUFJLENBQUMsSUFBSSxDQUFDQSxLQUFJLENBQUM7QUFDZixhQUFPQTtBQUFBLElBQ1g7QUFHQSxRQUFLLElBQUlELEtBQUksTUFBTSxNQUFNLEdBQUk7QUFDekIsWUFBTUUsT0FBTSxFQUFFLE1BQU0sR0FBRyxDQUFDO0FBQ3hCLE1BQUFBLEtBQUksQ0FBQyxLQUFLO0FBQ1YsTUFBQUEsS0FBSSxDQUFDLEtBQUs7QUFDVixZQUFNRCxPQUFNLGdCQUFRQyxJQUFHO0FBQ3ZCLE1BQUFELEtBQUksQ0FBQyxJQUFJO0FBQ1QsYUFBT0E7QUFBQSxJQUNYO0FBR0EsUUFBSyxJQUFJRCxLQUFJLE1BQU0sT0FBTyxHQUFJO0FBQzFCLFlBQU1FLE9BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQztBQUN4QixNQUFBQSxLQUFJLENBQUMsS0FBSztBQUNWLE1BQUFBLEtBQUksQ0FBQyxLQUFLO0FBQ1YsWUFBTUQsT0FBTSxnQkFBUUMsSUFBRztBQUN2QixNQUFBRCxLQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNiLGFBQU9BO0FBQUEsSUFDWDtBQUFBLEVBQ0o7QUFFQSxVQUFRLE9BQU8sQ0FBQyxNQUFNO0FBQ2xCLFdBQ0ksT0FBTyxLQUFLLENBQUMsS0FDYixRQUFRLEtBQUssQ0FBQyxLQUNkLFdBQVcsS0FBSyxDQUFDLEtBQ2pCLFlBQVksS0FBSyxDQUFDLEtBQ2xCLE9BQU8sS0FBSyxDQUFDLEtBQ2IsUUFBUSxLQUFLLENBQUM7QUFBQSxFQUV0QjtBQUVBLE1BQU8sa0JBQVE7OztBQzNGZixnQkFBTSxVQUFVLE1BQU0sU0FBVSxNQUFNO0FBQ2xDLFdBQU8sZ0JBQVEsS0FBSyxNQUFNLElBQUk7QUFBQSxFQUNsQztBQUVBLGlCQUFPLE1BQU0sSUFBSSxTQUFTLElBQUksY0FBTSxHQUFHLE1BQU0sS0FBSztBQUVsRCxnQkFBTSxPQUFPLE1BQU07QUFFbkIsZ0JBQU0sV0FBVyxLQUFLO0FBQUEsSUFDbEIsR0FBRztBQUFBLElBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUztBQUNsQixVQUFJLENBQUMsS0FBSyxVQUFVLGFBQUssQ0FBQyxNQUFNLFlBQVksZ0JBQVEsS0FBSyxDQUFDLEdBQUc7QUFDekQsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQUEsRUFDSixDQUFDOzs7QUNsQkQsZ0JBQU0sT0FBTyxLQUFLLElBQUksU0FBUztBQUMzQixVQUFNRSxPQUFNLGVBQU8sTUFBTSxNQUFNO0FBQy9CLElBQUFBLEtBQUksQ0FBQyxLQUFLO0FBQ1YsSUFBQUEsS0FBSSxDQUFDLEtBQUs7QUFDVixJQUFBQSxLQUFJLENBQUMsS0FBSztBQUNWLFdBQU9BO0FBQUEsRUFDWDtBQUVBLGlCQUFPLEtBQUssSUFBSSxTQUFTLElBQUksY0FBTSxHQUFHLE1BQU0sSUFBSTtBQUVoRCxnQkFBTSxVQUFVLEtBQUssV0FBWTtBQUM3QixVQUFNQSxPQUFNLEtBQUs7QUFDakIsV0FBTyxDQUFDQSxLQUFJLENBQUMsSUFBSSxLQUFLQSxLQUFJLENBQUMsSUFBSSxLQUFLQSxLQUFJLENBQUMsSUFBSSxLQUFLQSxLQUFJLENBQUMsQ0FBQztBQUFBLEVBQzVEOzs7QUNqQkEsTUFBTSxFQUFFLE1BQU0sSUFBSTtBQVVsQixNQUFNLFVBQVUsSUFBSSxTQUFTO0FBQ3pCLFdBQU8sZUFBTyxNQUFNLEtBQUs7QUFDekIsUUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUk7QUFDakIsUUFBSSxHQUFHLEdBQUc7QUFDVixTQUFLLEtBQUs7QUFDVixVQUFNLEtBQUssSUFBSTtBQUNmLFFBQUksTUFBTSxHQUFHO0FBQ1QsVUFBSSxJQUFJLElBQUk7QUFBQSxJQUNoQixPQUFPO0FBQ0gsVUFBSSxNQUFNO0FBQUssWUFBSTtBQUNuQixVQUFJLElBQUk7QUFBSyxhQUFLO0FBQ2xCLFVBQUksSUFBSTtBQUFHLGFBQUs7QUFDaEIsV0FBSztBQUNMLFlBQU0sSUFBSSxNQUFNLENBQUM7QUFDakIsWUFBTSxJQUFJLElBQUk7QUFDZCxZQUFNLElBQUksTUFBTSxJQUFJO0FBQ3BCLFlBQU0sSUFBSSxJQUFJLE1BQU0sSUFBSTtBQUN4QixZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJO0FBQ2QsY0FBUSxHQUFHO0FBQUEsUUFDUCxLQUFLO0FBQ0QsV0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEI7QUFBQSxRQUNKLEtBQUs7QUFDRCxXQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwQjtBQUFBLFFBQ0osS0FBSztBQUNELFdBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BCO0FBQUEsUUFDSixLQUFLO0FBQ0QsV0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEI7QUFBQSxRQUNKLEtBQUs7QUFDRCxXQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwQjtBQUFBLFFBQ0osS0FBSztBQUNELFdBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BCO0FBQUEsTUFDUjtBQUFBLElBQ0o7QUFDQSxXQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztBQUFBLEVBQ2xEO0FBRUEsTUFBTyxrQkFBUTs7O0FDcERmLE1BQU0sVUFBVSxJQUFJLFNBQVM7QUFDekIsVUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksZUFBTyxNQUFNLEtBQUs7QUFDcEMsVUFBTSxTQUFTLElBQUksR0FBRyxHQUFHLENBQUM7QUFDMUIsVUFBTSxTQUFTLElBQUksR0FBRyxHQUFHLENBQUM7QUFDMUIsVUFBTSxRQUFRLFNBQVM7QUFDdkIsVUFBTSxJQUFLLFFBQVEsTUFBTztBQUMxQixVQUFNLEtBQU0sVUFBVSxNQUFNLFNBQVU7QUFDdEMsUUFBSTtBQUNKLFFBQUksVUFBVSxHQUFHO0FBQ2IsVUFBSSxPQUFPO0FBQUEsSUFDZixPQUFPO0FBQ0gsVUFBSSxNQUFNO0FBQVEsYUFBSyxJQUFJLEtBQUs7QUFDaEMsVUFBSSxNQUFNO0FBQVEsWUFBSSxLQUFLLElBQUksS0FBSztBQUNwQyxVQUFJLE1BQU07QUFBUSxZQUFJLEtBQUssSUFBSSxLQUFLO0FBQ3BDLFdBQUs7QUFDTCxVQUFJLElBQUk7QUFBRyxhQUFLO0FBQUEsSUFDcEI7QUFDQSxXQUFPLENBQUMsR0FBRyxHQUFHLEVBQUU7QUFBQSxFQUNwQjtBQUVBLE1BQU8sa0JBQVE7OztBQ2ZmLGdCQUFNLFVBQVUsTUFBTSxXQUFZO0FBQzlCLFdBQU8sZ0JBQVEsS0FBSyxJQUFJO0FBQUEsRUFDNUI7QUFFQSxpQkFBTyxNQUFNLElBQUksU0FBUyxJQUFJLGNBQU0sR0FBRyxNQUFNLEtBQUs7QUFFbEQsZ0JBQU0sT0FBTyxNQUFNO0FBRW5CLGdCQUFNLFdBQVcsS0FBSztBQUFBLElBQ2xCLEdBQUc7QUFBQSxJQUNILE1BQU0sSUFBSSxTQUFTO0FBQ2YsYUFBTyxlQUFPLE1BQU0sS0FBSztBQUN6QixVQUFJLGFBQUssSUFBSSxNQUFNLFdBQVcsS0FBSyxXQUFXLEdBQUc7QUFDN0MsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQUEsRUFDSixDQUFDOzs7QUN2QkQsTUFBTSxTQUFTO0FBQ2YsTUFBTSxVQUFVO0FBRWhCLE1BQU0sVUFBVSxDQUFDLFFBQVE7QUFDckIsUUFBSSxJQUFJLE1BQU0sTUFBTSxHQUFHO0FBRW5CLFVBQUksSUFBSSxXQUFXLEtBQUssSUFBSSxXQUFXLEdBQUc7QUFDdEMsY0FBTSxJQUFJLE9BQU8sQ0FBQztBQUFBLE1BQ3RCO0FBRUEsVUFBSSxJQUFJLFdBQVcsR0FBRztBQUNsQixjQUFNLElBQUksTUFBTSxFQUFFO0FBQ2xCLGNBQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO0FBQUEsTUFDNUQ7QUFDQSxZQUFNLElBQUksU0FBUyxLQUFLLEVBQUU7QUFDMUIsWUFBTSxJQUFJLEtBQUs7QUFDZixZQUFNLElBQUssS0FBSyxJQUFLO0FBQ3JCLFlBQU0sSUFBSSxJQUFJO0FBQ2QsYUFBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFBQSxJQUN0QjtBQUdBLFFBQUksSUFBSSxNQUFNLE9BQU8sR0FBRztBQUNwQixVQUFJLElBQUksV0FBVyxLQUFLLElBQUksV0FBVyxHQUFHO0FBRXRDLGNBQU0sSUFBSSxPQUFPLENBQUM7QUFBQSxNQUN0QjtBQUVBLFVBQUksSUFBSSxXQUFXLEdBQUc7QUFDbEIsY0FBTSxJQUFJLE1BQU0sRUFBRTtBQUNsQixjQUNJLElBQUksQ0FBQyxJQUNMLElBQUksQ0FBQyxJQUNMLElBQUksQ0FBQyxJQUNMLElBQUksQ0FBQyxJQUNMLElBQUksQ0FBQyxJQUNMLElBQUksQ0FBQyxJQUNMLElBQUksQ0FBQyxJQUNMLElBQUksQ0FBQztBQUFBLE1BQ2I7QUFDQSxZQUFNLElBQUksU0FBUyxLQUFLLEVBQUU7QUFDMUIsWUFBTSxJQUFLLEtBQUssS0FBTTtBQUN0QixZQUFNLElBQUssS0FBSyxLQUFNO0FBQ3RCLFlBQU0sSUFBSyxLQUFLLElBQUs7QUFDckIsWUFBTSxJQUFJLEtBQUssT0FBUSxJQUFJLE9BQVEsTUFBUSxHQUFHLElBQUk7QUFDbEQsYUFBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFBQSxJQUN0QjtBQU1BLFVBQU0sSUFBSSxNQUFNLHNCQUFzQixHQUFHLEVBQUU7QUFBQSxFQUMvQztBQUVBLE1BQU8sa0JBQVE7OztBQ3REZixNQUFNLEVBQUUsT0FBQUMsT0FBTSxJQUFJO0FBRWxCLE1BQU0sVUFBVSxJQUFJLFNBQVM7QUFDekIsUUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxlQUFPLE1BQU0sTUFBTTtBQUN0QyxRQUFJLE9BQU8sYUFBSyxJQUFJLEtBQUs7QUFDekIsUUFBSSxNQUFNO0FBQVcsVUFBSTtBQUN6QixRQUFJLFNBQVMsUUFBUTtBQUNqQixhQUFPLElBQUksSUFBSSxTQUFTO0FBQUEsSUFDNUI7QUFDQSxRQUFJQSxPQUFNLENBQUM7QUFDWCxRQUFJQSxPQUFNLENBQUM7QUFDWCxRQUFJQSxPQUFNLENBQUM7QUFDWCxVQUFNLElBQUssS0FBSyxLQUFPLEtBQUssSUFBSztBQUNqQyxRQUFJLE1BQU0sV0FBVyxFQUFFLFNBQVMsRUFBRTtBQUNsQyxVQUFNLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQztBQUMvQixRQUFJLE1BQU0sTUFBTUEsT0FBTSxJQUFJLEdBQUcsRUFBRSxTQUFTLEVBQUU7QUFDMUMsVUFBTSxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUM7QUFDL0IsWUFBUSxLQUFLLFlBQVksR0FBRztBQUFBLE1BQ3hCLEtBQUs7QUFDRCxlQUFPLElBQUksR0FBRyxHQUFHLEdBQUc7QUFBQSxNQUN4QixLQUFLO0FBQ0QsZUFBTyxJQUFJLEdBQUcsR0FBRyxHQUFHO0FBQUEsTUFDeEI7QUFDSSxlQUFPLElBQUksR0FBRztBQUFBLElBQ3RCO0FBQUEsRUFDSjtBQUVBLE1BQU8sa0JBQVE7OztBQ3JCZixnQkFBTSxVQUFVLE1BQU0sU0FBVSxNQUFNO0FBQ2xDLFdBQU8sZ0JBQVEsS0FBSyxNQUFNLElBQUk7QUFBQSxFQUNsQztBQUVBLGlCQUFPLE1BQU0sSUFBSSxTQUFTLElBQUksY0FBTSxHQUFHLE1BQU0sS0FBSztBQUVsRCxnQkFBTSxPQUFPLE1BQU07QUFDbkIsZ0JBQU0sV0FBVyxLQUFLO0FBQUEsSUFDbEIsR0FBRztBQUFBLElBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUztBQUNsQixVQUNJLENBQUMsS0FBSyxVQUNOLGFBQUssQ0FBQyxNQUFNLFlBQ1osQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sS0FBSyxHQUM3QztBQUNFLGVBQU87QUFBQSxNQUNYO0FBQUEsSUFDSjtBQUFBLEVBQ0osQ0FBQzs7O0FDeEJELE1BQU0sRUFBRSxJQUFJLElBQUk7QUFPaEIsTUFBTSxVQUFVLElBQUksU0FBUztBQUt6QixXQUFPLGVBQU8sTUFBTSxLQUFLO0FBQ3pCLFFBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJO0FBQ2hCLFFBQUksR0FBRyxHQUFHO0FBRVYsUUFBSSxNQUFNLENBQUM7QUFBRyxVQUFJO0FBQ2xCLFFBQUksTUFBTSxDQUFDO0FBQUcsVUFBSTtBQUVsQixRQUFJLElBQUk7QUFBSyxXQUFLO0FBQ2xCLFFBQUksSUFBSTtBQUFHLFdBQUs7QUFDaEIsU0FBSztBQUNMLFFBQUksSUFBSSxJQUFJLEdBQUc7QUFDWCxXQUFLLElBQUksS0FBSztBQUNkLFdBQUssSUFBSyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUssSUFBSSxVQUFVLFFBQVEsQ0FBQyxLQUFLO0FBQzVELFVBQUksS0FBSyxJQUFJO0FBQUEsSUFDakIsV0FBVyxJQUFJLElBQUksR0FBRztBQUNsQixXQUFLLElBQUk7QUFDVCxXQUFLLElBQUksS0FBSztBQUNkLFdBQUssSUFBSyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUssSUFBSSxVQUFVLFFBQVEsQ0FBQyxLQUFLO0FBQzVELFVBQUksS0FBSyxJQUFJO0FBQUEsSUFDakIsT0FBTztBQUNILFdBQUssSUFBSTtBQUNULFdBQUssSUFBSSxLQUFLO0FBQ2QsV0FBSyxJQUFLLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSyxJQUFJLFVBQVUsUUFBUSxDQUFDLEtBQUs7QUFDNUQsVUFBSSxLQUFLLElBQUk7QUFBQSxJQUNqQjtBQUNBLFFBQUksY0FBTSxJQUFJLElBQUksQ0FBQztBQUNuQixRQUFJLGNBQU0sSUFBSSxJQUFJLENBQUM7QUFDbkIsUUFBSSxjQUFNLElBQUksSUFBSSxDQUFDO0FBQ25CLFdBQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQUEsRUFDcEU7QUFFQSxNQUFPLGtCQUFROzs7QUMzQ2YsTUFBTSxFQUFFLEtBQUFDLE1BQUssTUFBTSxLQUFLLElBQUk7QUFFNUIsTUFBTSxVQUFVLElBQUksU0FBUztBQUt6QixRQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxlQUFPLE1BQU0sS0FBSztBQUNsQyxTQUFLO0FBQ0wsU0FBSztBQUNMLFNBQUs7QUFDTCxRQUFJO0FBQ0osVUFBTSxPQUFPQSxLQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLFVBQU0sS0FBSyxJQUFJLElBQUksS0FBSztBQUN4QixVQUFNLElBQUksSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJO0FBQ2pDLFFBQUksTUFBTSxHQUFHO0FBQ1QsVUFBSTtBQUFBLElBQ1IsT0FBTztBQUNILFdBQUssSUFBSSxLQUFLLElBQUksTUFBTTtBQUN4QixXQUFLLE1BQU0sSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxFQUFFO0FBQy9DLFVBQUksS0FBSyxDQUFDO0FBQ1YsVUFBSSxJQUFJLEdBQUc7QUFDUCxZQUFJLFFBQVE7QUFBQSxNQUNoQjtBQUNBLFdBQUs7QUFBQSxJQUNUO0FBQ0EsV0FBTyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUM7QUFBQSxFQUN6QjtBQUVBLE1BQU8sa0JBQVE7OztBQ3ZCZixnQkFBTSxVQUFVLE1BQU0sV0FBWTtBQUM5QixXQUFPLGdCQUFRLEtBQUssSUFBSTtBQUFBLEVBQzVCO0FBRUEsaUJBQU8sTUFBTSxJQUFJLFNBQVMsSUFBSSxjQUFNLEdBQUcsTUFBTSxLQUFLO0FBRWxELGdCQUFNLE9BQU8sTUFBTTtBQUVuQixnQkFBTSxXQUFXLEtBQUs7QUFBQSxJQUNsQixHQUFHO0FBQUEsSUFDSCxNQUFNLElBQUksU0FBUztBQUNmLGFBQU8sZUFBTyxNQUFNLEtBQUs7QUFDekIsVUFBSSxhQUFLLElBQUksTUFBTSxXQUFXLEtBQUssV0FBVyxHQUFHO0FBQzdDLGVBQU87QUFBQSxNQUNYO0FBQUEsSUFDSjtBQUFBLEVBQ0osQ0FBQzs7O0FDaEJELGdCQUFNLFVBQVUsTUFBTSxXQUFZO0FBQzlCLFdBQU8sZ0JBQVEsS0FBSyxJQUFJO0FBQUEsRUFDNUI7QUFFQSxpQkFBTyxNQUFNLElBQUksU0FBUyxJQUFJLGNBQU0sR0FBRyxNQUFNLEtBQUs7QUFFbEQsZ0JBQU0sT0FBTyxNQUFNO0FBRW5CLGdCQUFNLFdBQVcsS0FBSztBQUFBLElBQ2xCLEdBQUc7QUFBQSxJQUNILE1BQU0sSUFBSSxTQUFTO0FBQ2YsYUFBTyxlQUFPLE1BQU0sS0FBSztBQUN6QixVQUFJLGFBQUssSUFBSSxNQUFNLFdBQVcsS0FBSyxXQUFXLEdBQUc7QUFDN0MsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQUEsRUFDSixDQUFDOzs7QUN0QkQsTUFBTSxFQUFFLE9BQUFDLE9BQU0sSUFBSTtBQUVsQixNQUFNLFVBQVUsSUFBSSxTQUFTO0FBQ3pCLFdBQU8sZUFBTyxNQUFNLEtBQUs7QUFDekIsUUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUk7QUFDaEIsUUFBSSxHQUFHLEdBQUc7QUFDVixTQUFLO0FBQ0wsUUFBSSxNQUFNLEdBQUc7QUFDVCxVQUFJLElBQUksSUFBSTtBQUFBLElBQ2hCLE9BQU87QUFDSCxVQUFJLE1BQU07QUFBSyxZQUFJO0FBQ25CLFVBQUksSUFBSTtBQUFLLGFBQUs7QUFDbEIsVUFBSSxJQUFJO0FBQUcsYUFBSztBQUNoQixXQUFLO0FBRUwsWUFBTSxJQUFJQSxPQUFNLENBQUM7QUFDakIsWUFBTSxJQUFJLElBQUk7QUFDZCxZQUFNLElBQUksS0FBSyxJQUFJO0FBQ25CLFlBQU0sSUFBSSxLQUFLLElBQUksSUFBSTtBQUN2QixZQUFNLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSTtBQUU1QixjQUFRLEdBQUc7QUFBQSxRQUNQLEtBQUs7QUFDRCxXQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwQjtBQUFBLFFBQ0osS0FBSztBQUNELFdBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BCO0FBQUEsUUFDSixLQUFLO0FBQ0QsV0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEI7QUFBQSxRQUNKLEtBQUs7QUFDRCxXQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwQjtBQUFBLFFBQ0osS0FBSztBQUNELFdBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BCO0FBQUEsUUFDSixLQUFLO0FBQ0QsV0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEI7QUFBQSxNQUNSO0FBQUEsSUFDSjtBQUNBLFdBQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQUEsRUFDbEQ7QUFFQSxNQUFPLGtCQUFROzs7QUM3Q2YsTUFBTSxFQUFFLEtBQUFDLE1BQUssS0FBQUMsS0FBSSxJQUFJO0FBUXJCLE1BQU1DLFdBQVUsSUFBSSxTQUFTO0FBQ3pCLFdBQU8sZUFBTyxNQUFNLEtBQUs7QUFDekIsUUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUk7QUFDaEIsVUFBTSxPQUFPRixLQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLFVBQU0sT0FBT0MsS0FBSSxHQUFHLEdBQUcsQ0FBQztBQUN4QixVQUFNLFFBQVEsT0FBTztBQUNyQixRQUFJLEdBQUcsR0FBRztBQUNWLFFBQUksT0FBTztBQUNYLFFBQUksU0FBUyxHQUFHO0FBQ1osVUFBSSxPQUFPO0FBQ1gsVUFBSTtBQUFBLElBQ1IsT0FBTztBQUNILFVBQUksUUFBUTtBQUNaLFVBQUksTUFBTTtBQUFNLGFBQUssSUFBSSxLQUFLO0FBQzlCLFVBQUksTUFBTTtBQUFNLFlBQUksS0FBSyxJQUFJLEtBQUs7QUFDbEMsVUFBSSxNQUFNO0FBQU0sWUFBSSxLQUFLLElBQUksS0FBSztBQUNsQyxXQUFLO0FBQ0wsVUFBSSxJQUFJO0FBQUcsYUFBSztBQUFBLElBQ3BCO0FBQ0EsV0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsRUFDbkI7QUFFQSxNQUFPLGtCQUFRQzs7O0FDeEJmLGdCQUFNLFVBQVUsTUFBTSxXQUFZO0FBQzlCLFdBQU8sZ0JBQVEsS0FBSyxJQUFJO0FBQUEsRUFDNUI7QUFFQSxpQkFBTyxNQUFNLElBQUksU0FBUyxJQUFJLGNBQU0sR0FBRyxNQUFNLEtBQUs7QUFFbEQsZ0JBQU0sT0FBTyxNQUFNO0FBRW5CLGdCQUFNLFdBQVcsS0FBSztBQUFBLElBQ2xCLEdBQUc7QUFBQSxJQUNILE1BQU0sSUFBSSxTQUFTO0FBQ2YsYUFBTyxlQUFPLE1BQU0sS0FBSztBQUN6QixVQUFJLGFBQUssSUFBSSxNQUFNLFdBQVcsS0FBSyxXQUFXLEdBQUc7QUFDN0MsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQUEsRUFDSixDQUFDOzs7QUN2QkQsTUFBTyx3QkFBUTtBQUFBO0FBQUEsSUFFWCxJQUFJO0FBQUE7QUFBQSxJQUdKLElBQUk7QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLElBQUk7QUFBQSxJQUVKLElBQUk7QUFBQTtBQUFBLElBQ0osSUFBSTtBQUFBO0FBQUEsSUFDSixJQUFJO0FBQUE7QUFBQSxJQUNKLElBQUk7QUFBQTtBQUFBLEVBQ1I7OztBQ1hBLE1BQU0sRUFBRSxJQUFJLElBQUk7QUFPaEIsTUFBTSxVQUFVLElBQUksU0FBUztBQUN6QixXQUFPLGVBQU8sTUFBTSxLQUFLO0FBQ3pCLFVBQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJO0FBQ2xCLFFBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO0FBRW5CLFNBQUssSUFBSSxNQUFNO0FBQ2YsUUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSTtBQUMzQixRQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJO0FBRTNCLFFBQUksc0JBQWMsS0FBSyxRQUFRLENBQUM7QUFDaEMsUUFBSSxzQkFBYyxLQUFLLFFBQVEsQ0FBQztBQUNoQyxRQUFJLHNCQUFjLEtBQUssUUFBUSxDQUFDO0FBRWhDLFFBQUksUUFBUSxZQUFZLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQztBQUN6RCxRQUFJLFFBQVEsWUFBWSxJQUFJLFlBQVksSUFBSSxXQUFXLENBQUM7QUFDeEQsU0FBSyxRQUFRLFlBQVksSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDO0FBRTFELFdBQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQUEsRUFDbkQ7QUFFQSxNQUFNLFVBQVUsQ0FBQyxNQUFNO0FBQ25CLFdBQU8sT0FBTyxLQUFLLFNBQVUsUUFBUSxJQUFJLFFBQVEsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJO0FBQUEsRUFDdkU7QUFFQSxNQUFNLFVBQVUsQ0FBQyxNQUFNO0FBQ25CLFdBQU8sSUFBSSxzQkFBYyxLQUNuQixJQUFJLElBQUksSUFDUixzQkFBYyxNQUFNLElBQUksc0JBQWM7QUFBQSxFQUNoRDtBQUVBLE1BQU8sa0JBQVE7OztBQ3JDZixNQUFNLEVBQUUsS0FBQUMsS0FBSSxJQUFJO0FBRWhCLE1BQU0sVUFBVSxJQUFJLFNBQVM7QUFDekIsVUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksZUFBTyxNQUFNLEtBQUs7QUFDcEMsVUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNqQyxVQUFNLElBQUksTUFBTSxJQUFJO0FBQ3BCLFdBQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxHQUFHLE9BQU8sSUFBSSxJQUFJLE9BQU8sSUFBSSxFQUFFO0FBQUEsRUFDdkQ7QUFFQSxNQUFNLFVBQVUsQ0FBQyxNQUFNO0FBQ25CLFNBQUssS0FBSyxRQUFRO0FBQVMsYUFBTyxJQUFJO0FBQ3RDLFdBQU9BLE1BQUssSUFBSSxTQUFTLE9BQU8sR0FBRztBQUFBLEVBQ3ZDO0FBRUEsTUFBTSxVQUFVLENBQUMsTUFBTTtBQUNuQixRQUFJLElBQUksc0JBQWM7QUFBSSxhQUFPQSxLQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzdDLFdBQU8sSUFBSSxzQkFBYyxLQUFLLHNCQUFjO0FBQUEsRUFDaEQ7QUFFQSxNQUFNLFVBQVUsQ0FBQyxHQUFHLEdBQUcsTUFBTTtBQUN6QixRQUFJLFFBQVEsQ0FBQztBQUNiLFFBQUksUUFBUSxDQUFDO0FBQ2IsUUFBSSxRQUFRLENBQUM7QUFDYixVQUFNLElBQUk7QUFBQSxPQUNMLFlBQVksSUFBSSxZQUFZLElBQUksWUFBWSxLQUFLLHNCQUFjO0FBQUEsSUFDcEU7QUFDQSxVQUFNLElBQUk7QUFBQSxPQUNMLFlBQVksSUFBSSxZQUFZLElBQUksV0FBVyxLQUFLLHNCQUFjO0FBQUEsSUFDbkU7QUFDQSxVQUFNLElBQUk7QUFBQSxPQUNMLFlBQVksSUFBSSxXQUFXLElBQUksWUFBWSxLQUFLLHNCQUFjO0FBQUEsSUFDbkU7QUFDQSxXQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxFQUNuQjtBQUVBLE1BQU8sa0JBQVE7OztBQzlCZixnQkFBTSxVQUFVLE1BQU0sV0FBWTtBQUM5QixXQUFPLGdCQUFRLEtBQUssSUFBSTtBQUFBLEVBQzVCO0FBRUEsaUJBQU8sTUFBTSxJQUFJLFNBQVMsSUFBSSxjQUFNLEdBQUcsTUFBTSxLQUFLO0FBRWxELGdCQUFNLE9BQU8sTUFBTTtBQUVuQixnQkFBTSxXQUFXLEtBQUs7QUFBQSxJQUNsQixHQUFHO0FBQUEsSUFDSCxNQUFNLElBQUksU0FBUztBQUNmLGFBQU8sZUFBTyxNQUFNLEtBQUs7QUFDekIsVUFBSSxhQUFLLElBQUksTUFBTSxXQUFXLEtBQUssV0FBVyxHQUFHO0FBQzdDLGVBQU87QUFBQSxNQUNYO0FBQUEsSUFDSjtBQUFBLEVBQ0osQ0FBQzs7O0FDdEJELE1BQU0sRUFBRSxLQUFLLEtBQUFDLEtBQUksSUFBSTtBQUVyQixNQUFNLFVBQVUsSUFBSSxTQUFTO0FBUXpCLFFBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLGVBQU8sTUFBTSxLQUFLO0FBQ2xDLFFBQUksTUFBTSxDQUFDO0FBQUcsVUFBSTtBQUNsQixRQUFJLElBQUk7QUFDUixXQUFPLENBQUMsR0FBR0EsS0FBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQUEsRUFDckM7QUFFQSxNQUFPLGtCQUFROzs7QUNiZixNQUFNLFVBQVUsSUFBSSxTQUFTO0FBQ3pCLFdBQU8sZUFBTyxNQUFNLEtBQUs7QUFDekIsVUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUk7QUFDbEIsVUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksZ0JBQVEsR0FBRyxHQUFHLENBQUM7QUFDbEMsVUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksZ0JBQVEsR0FBRyxHQUFHLEVBQUU7QUFDbEMsV0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFBQSxFQUNsRDtBQUVBLE1BQU8sa0JBQVE7OztBQ1RmLE1BQU0sVUFBVSxJQUFJLFNBQVM7QUFDekIsVUFBTSxNQUFNLGVBQU8sTUFBTSxLQUFLLEVBQUUsUUFBUTtBQUN4QyxXQUFPLGdCQUFRLEdBQUcsR0FBRztBQUFBLEVBQ3pCO0FBRUEsTUFBTyxrQkFBUTs7O0FDUGYsTUFBTSxFQUFFLE1BQUFDLE9BQU0sT0FBTyxPQUFBQyxPQUFNLElBQUk7QUFFL0IsTUFBTSxVQUFVLElBQUksU0FBUztBQUN6QixVQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxlQUFPLE1BQU0sS0FBSztBQUNwQyxVQUFNLElBQUlELE1BQUssSUFBSSxJQUFJLElBQUksQ0FBQztBQUM1QixRQUFJLEtBQUssTUFBTSxHQUFHLENBQUMsSUFBSSxVQUFVLE9BQU87QUFDeEMsUUFBSUMsT0FBTSxJQUFJLEdBQUssTUFBTTtBQUFHLFVBQUksT0FBTztBQUN2QyxXQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxFQUNuQjtBQUVBLE1BQU8sa0JBQVE7OztBQ1BmLE1BQU0sVUFBVSxJQUFJLFNBQVM7QUFDekIsVUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksZUFBTyxNQUFNLEtBQUs7QUFDcEMsVUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksZ0JBQVEsR0FBRyxHQUFHLENBQUM7QUFDbEMsV0FBTyxnQkFBUSxHQUFHLEdBQUcsRUFBRTtBQUFBLEVBQzNCO0FBRUEsTUFBTyxrQkFBUTs7O0FDRmYsZ0JBQU0sVUFBVSxNQUFNLFdBQVk7QUFDOUIsV0FBTyxnQkFBUSxLQUFLLElBQUk7QUFBQSxFQUM1QjtBQUNBLGdCQUFNLFVBQVUsTUFBTSxXQUFZO0FBQzlCLFdBQU8sZ0JBQVEsS0FBSyxJQUFJLEVBQUUsUUFBUTtBQUFBLEVBQ3RDO0FBRUEsaUJBQU8sTUFBTSxJQUFJLFNBQVMsSUFBSSxjQUFNLEdBQUcsTUFBTSxLQUFLO0FBQ2xELGlCQUFPLE1BQU0sSUFBSSxTQUFTLElBQUksY0FBTSxHQUFHLE1BQU0sS0FBSztBQUVsRCxnQkFBTSxPQUFPLE1BQU07QUFDbkIsZ0JBQU0sT0FBTyxNQUFNO0FBQ25CLEdBQUMsT0FBTyxLQUFLLEVBQUU7QUFBQSxJQUFRLENBQUMsTUFDcEIsY0FBTSxXQUFXLEtBQUs7QUFBQSxNQUNsQixHQUFHO0FBQUEsTUFDSCxNQUFNLElBQUksU0FBUztBQUNmLGVBQU8sZUFBTyxNQUFNLENBQUM7QUFDckIsWUFBSSxhQUFLLElBQUksTUFBTSxXQUFXLEtBQUssV0FBVyxHQUFHO0FBQzdDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFBQSxJQUNKLENBQUM7QUFBQSxFQUNMOzs7QUN4QkEsTUFBTSxTQUFTO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxjQUFjO0FBQUEsSUFDZCxNQUFNO0FBQUEsSUFDTixZQUFZO0FBQUEsSUFDWixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsSUFDTixZQUFZO0FBQUEsSUFDWixPQUFPO0FBQUEsSUFDUCxXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxZQUFZO0FBQUEsSUFDWixXQUFXO0FBQUEsSUFDWCxPQUFPO0FBQUEsSUFDUCxnQkFBZ0I7QUFBQSxJQUNoQixVQUFVO0FBQUEsSUFDVixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsSUFDTixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixlQUFlO0FBQUEsSUFDZixVQUFVO0FBQUEsSUFDVixXQUFXO0FBQUEsSUFDWCxVQUFVO0FBQUEsSUFDVixXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixnQkFBZ0I7QUFBQSxJQUNoQixZQUFZO0FBQUEsSUFDWixZQUFZO0FBQUEsSUFDWixTQUFTO0FBQUEsSUFDVCxZQUFZO0FBQUEsSUFDWixjQUFjO0FBQUEsSUFDZCxlQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZixZQUFZO0FBQUEsSUFDWixVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsSUFDYixTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxZQUFZO0FBQUEsSUFDWixXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixhQUFhO0FBQUEsSUFDYixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxZQUFZO0FBQUEsSUFDWixNQUFNO0FBQUEsSUFDTixXQUFXO0FBQUEsSUFDWCxNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsSUFDUCxhQUFhO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixVQUFVO0FBQUEsSUFDVixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsSUFDUCxZQUFZO0FBQUEsSUFDWixVQUFVO0FBQUEsSUFDVixlQUFlO0FBQUEsSUFD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SUFDM0csTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDM0csTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDekcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDekcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUE7QUFBQSxJQUczRyxVQUFVLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDbEksUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQ2hJLE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUM5SCxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDOUgsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQzlILFFBQVEsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUNoSSxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDOUgsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQzlILE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQTtBQUFBLElBRzlILE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUM3RixRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFT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QSxJQUFHO0FBQUcsUUFBSSxJQUFJLE9BQU8sV0FBVyxJQUFJLG9CQUFJLFFBQVE7QUFBRyxhQUFTLFlBQVlELElBQUcsR0FBRyxHQUFHO0FBQUUsVUFBSSxJQUFJLE9BQU9BLElBQUcsQ0FBQztBQUFHLGFBQU8sRUFBRSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUlBLEVBQUMsQ0FBQyxHQUFHLGdCQUFnQixHQUFHLFlBQVksU0FBUztBQUFBLElBQUc7QUFBRSxhQUFTLFlBQVlBLElBQUcsR0FBRztBQUFFLFVBQUksSUFBSSxFQUFFLElBQUksQ0FBQztBQUFHLGFBQU8sT0FBTyxLQUFLLENBQUMsRUFBRSxPQUFPLFNBQVVDLElBQUdDLElBQUc7QUFBRSxZQUFJLElBQUksRUFBRUEsRUFBQztBQUFHLFlBQUksWUFBWSxPQUFPO0FBQUcsVUFBQUQsR0FBRUMsRUFBQyxJQUFJRixHQUFFLENBQUM7QUFBQSxhQUFPO0FBQUUsbUJBQVMsSUFBSSxHQUFHLFdBQVdBLEdBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUFTO0FBQUssVUFBQUMsR0FBRUMsRUFBQyxJQUFJRixHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUEsUUFBRztBQUFFLGVBQU9DO0FBQUEsTUFBRyxHQUFHLHVCQUFPLE9BQU8sSUFBSSxDQUFDO0FBQUEsSUFBRztBQUFFLFdBQU8sVUFBVSxhQUFhLE1BQU0sR0FBRyxZQUFZLFVBQVUsT0FBTyxTQUFVQSxJQUFHO0FBQUUsVUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLE1BQU1BLEVBQUM7QUFBRyxVQUFJLEdBQUc7QUFBRSxVQUFFLFNBQVMsWUFBWSxHQUFHLElBQUk7QUFBRyxZQUFJLElBQUksRUFBRTtBQUFTLGNBQU0sRUFBRSxTQUFTLFlBQVksR0FBRyxJQUFJO0FBQUEsTUFBSTtBQUFFLGFBQU87QUFBQSxJQUFHLEdBQUcsWUFBWSxVQUFVLE9BQU8sT0FBTyxJQUFJLFNBQVUsR0FBRyxHQUFHO0FBQUUsVUFBSSxZQUFZLE9BQU8sR0FBRztBQUFFLFlBQUksSUFBSSxF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QUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxN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QUNaLGNBQWM7QUFBQSxJQUNkLGFBQWE7QUFBQSxJQUNiLGlCQUFpQjtBQUFBLElBQ2pCLFlBQVk7QUFBQSxJQUNaLHFCQUFxQjtBQUFBLElBQ3JCLE9BQU87QUFBQSxJQUNQLE9BQU87QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLFVBQVU7QUFBQSxJQUNWLEtBQUs7QUFBQSxJQUNMLFFBQVE7QUFBQSxJQUNSLE9BQU87QUFBQSxJQUNQLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLFlBQVk7QUFBQSxJQUNaLGNBQWM7QUFBQSxJQUNkLEtBQUs7QUFBQSxJQUNMLFdBQVc7QUFBQSxJQUNYLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULGlCQUFpQjtBQUFBLElBQ2pCLGFBQWE7QUFBQSxJQUNiLFFBQVE7QUFBQSxJQUNSLGVBQWU7QUFBQSxJQUNmLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxJQUNOLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLGFBQWE7QUFBQSxJQUNiLGNBQWM7QUFBQSxJQUNkLG1CQUFtQjtBQUFBLElBQ25CLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLGdCQUFnQjtBQUFBLElBQ2hCLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLGdCQUFnQjtBQUFBLElBQ2hCLHFCQUFxQjtBQUFBLElBQ3JCLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxJQUNQLGNBQWM7QUFBQSxJQUNkLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLFdB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LE1BQU07QUFBQSxJQUNOLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxJQUNYLFFBQVE7QUFBQSxJQUNSLE9BQU87QUFBQSxJQUNQLGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxJQUNQLGVBQWU7QUFBQSxJQUNmLHFCQUFxQjtBQUFBLElBQ3JCLGVBQWU7QUFBQSxJQUNmLFFBQVE7QUFBQSxJQUNSLGVBQWU7QUFBQSxJQUNmLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLFdBQVc7QUFBQSxJQUNYLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxJQUNOLGFBQWE7QUFBQSxJQUNiLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLHFCQUFxQjtBQUFBLElBQ3JCLFNBQVM7QUFBQSxJQUNULGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULFdBQVc7QUFBQSxJQUNYLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxJQUNQLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULEtBQUs7QUFBQSxJQUNMLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLGNBQWM7QUFBQSxJQUNkLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLFlBQVk7QUFBQSxJQUNaLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLG9CQUFvQjtBQUFBLElBQ3BCLGNBQWM7QUFBQSxJQUNkLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLGtCQUFrQjtBQUFBLElBQ2xCLE9BQU87QUFBQSxJQUNQLG1CQUFtQjtBQUFBLElBQ25CLFNBQVM7QUFBQSxJQUNULGVBQWU7QUFBQSxJQUNmLFVBQVU7QUFBQSxJQUNWLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNY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QUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLE1BQU0sUUFBd0M7QUFBQSxRQUM1QyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxJQUNGO0FBQUEsRUFDRjs7O0FEdEhBLE1BQUlDLGVBQVksQ0FBQyxZQUFZLGFBQWEsUUFBUSxXQUFXO0FBQzdELFdBQVNDLGNBQVc7QUFBRSxXQUFPQSxjQUFXLE9BQU8sU0FBUyxPQUFPLE9BQU8s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QkFBb0IsUUFBUSxlQUMzQixnQ0FBQUEsUUFBQTtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0MsS0FBSyxNQUFNO0FBQUEsUUFDWCxLQUFLLE1BQU07QUFBQSxRQUNYLFlBQVksTUFBTTtBQUFBLFFBQ2xCLFVBQVUsTUFBTTtBQUFBO0FBQUEsSUFDbEIsQ0FDRixDQUNGO0FBQUEsRUFFSjs7O0FDcFRBLEVBQUMsT0FBZSxpQkFBaUIsSUFBSTtBQUFBLElBQ2pDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDSjsiLAogICJuYW1lcyI6IFsiaGFzT3duUHJvcGVydHkiLCAiZnJvbSIsICJSZWFjdERlYnVnQ3VycmVudEZyYW1lIiwgIkNvbXBvbmVudCIsICJQdXJlQ29tcG9uZW50IiwgImNyZWF0ZVJlZiIsICJoYXNPd25Qcm9wZXJ0eSIsICJSZWFjdEVsZW1lbnQiLCAic2VsZiIsICJjcmVhdGVFbGVtZW50IiwgImNsb25lRWxlbWVudCIsICJpc1ZhbGlkRWxlbWVudCIsICJvYmplY3QiLCAibWF0Y2giLCAiZnVuYyIsICJ0b0FycmF5IiwgImNyZWF0ZUNvbnRleHQiLCAiZXJyb3IiLCAiZm9yd2FyZFJlZiIsICJyZW5kZXIiLCAibWVtbyIsICJ1c2VDb250ZXh0IiwgInVzZVN0YXRlIiwgInVzZVJlZHVjZXIiLCAicmVkdWNlciIsICJ1c2VSZWYiLCAidXNlRWZmZWN0IiwgInVzZUxheW91dEVmZmVjdCIsICJ1c2VDYWxsYmFjayIsICJ1c2VNZW1vIiwgInZhbHVlIiwgInByZWZpeCIsICJwcm90b3R5cGUiLCAibm9kZSIsICJrZXlzIiwgIkNoaWxkcmVuIiwgInJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJjYW5jZWxBbmltYXRpb25GcmFtZSIsICJub2RlIiwgInBlZWsiLCAibGVuZ3RoIiwgImluaXRpYWxUaW1lIiwgIlJlYWN0IiwgIlJlYWN0RGVidWdDdXJyZW50RnJhbWUiLCAiRnJhZ21lbnQiLCAiaGFzT3duUHJvcGVydHkiLCAidmFsdWUiLCAicHJlZml4IiwgInNhbml0aXplVVJMIiwgIl9yZWYiLCAiY2FwaXRhbGl6ZSIsICJ0b2tlbiIsICJub2RlIiwgIm1hdGNoIiwgIkNvbXBvbmVudCIsICJwcm90b3R5cGUiLCAid29ya0luUHJvZ3Jlc3MiLCAidG9TdHJpbmciLCAiZ2V0IiwgInNldCIsICJnZXRBY3RpdmVFbGVtZW50IiwgImlzSHlkcmF0aW5nIiwgInZhbGlkYXRlUHJvcHMiLCAiaXNBcnJheSIsICJvcHRpb25zIiwgImZ1bmMiLCAiaXNDdXN0b21Qcm9wZXJ0eSIsICJzdHJpbmciLCAiY2hhcmFjdGVyIiwgInN0eWxlcyIsICJkZWxpbWl0ZXIiLCAic3R5bGUiLCAicmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyIsICJwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzIiwgImVycm9yIiwgImNhbGxDYWxsYmFjayIsICJjdXJyZW50IiwgInJvb3QiLCAicXVldWVkRXZlbnQiLCAicHJlZml4ZXMiLCAiaW5kZXgiLCAibG9nIiwgImlzRXZlbnRTdXBwb3J0ZWQiLCAiZnJvbSIsICJsZW5ndGgiLCAibmV4dCIsICJub29wIiwgImNyZWF0ZUVsZW1lbnQiLCAiY3JlYXRlSW5zdGFuY2UiLCAiY2FuY2VsVGltZW91dCIsICJoYXMiLCAiY3Vyc29yIiwgIm5vdyIsICJfcXVldWUiLCAicmVuZGVyTGFuZXMiLCAidXBkYXRlRnJhZ21lbnQiLCAiY2hpbGQiLCAicmVjb25jaWxlQ2hpbGRGaWJlcnMiLCAiaXNPYmplY3QiLCAidmVyc2lvbiIsICJyZWR1Y2VyIiwgInJlbmRlciIsICJzdWJ0cmVlUmVuZGVyTGFuZXMiLCAiaXNIaWRkZW4iLCAiZXJyb3IkMSIsICJjb21taXRUaW1lIiwgImh5ZHJhdGUiLCAiY3JlYXRlUG9ydGFsIiwgImN1cnJlbnRIb29rIiwgIlJlYWN0Q3VycmVudERpc3BhdGNoZXIiLCAib2JqZWN0IiwgIkVsZW1lbnQiLCAiRnJhZ21lbnQiLCAiaXNFbGVtZW50IiwgImFzc2lnbiIsICJpc1ZhbGlkRWxlbWVudCIsICJ2YWxpZGF0ZSIsICJ2YWx1ZSIsICJpIiwgImNoZWNrZXIiLCAiaGFzT3duIiwgImNsYXNzTmFtZXMiLCAidmFsdWUiLCAicmVxdWlyZV9yZWFjdF9pc19kZXZlbG9wbWVudCIsICJvYmplY3QiLCAiRWxlbWVudCIsICJGcmFnbWVudCIsICJpc0VsZW1lbnQiLCAicmVxdWlyZV9yZWFjdF9pcyIsICJnZXRQcm90b3R5cGVPZiIsICJrZXlzIiwgInZhbHVlIiwgImxlbmd0aCIsICJ2YWx1ZSIsICJsZW5ndGgiLCAiU3ltYm9sIiwgIlN5bWJvbCIsICJoYXNPd25Qcm9wZXJ0eSIsICJ2YWx1ZSIsICJ2YWx1ZSIsICJTeW1ib2wiLCAidmFsdWUiLCAiaXNPYmplY3QiLCAidmFsdWUiLCAiaXNPYmplY3QiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJmdW5jIiwgImZ1bmMiLCAiaXNGdW5jdGlvbiIsICJpc09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJ2YWx1ZSIsICJvYmplY3QiLCAib2JqZWN0IiwgInZhbHVlIiwgIk1hcCIsICJoYXNPd25Qcm9wZXJ0eSIsICJoYXNPd25Qcm9wZXJ0eSIsICJ2YWx1ZSIsICJsZW5ndGgiLCAiTWFwIiwgInZhbHVlIiwgInZhbHVlIiwgInNpemUiLCAibGVuZ3RoIiwgIk1hcCIsICJ2YWx1ZSIsICJ2YWx1ZSIsICJ2YWx1ZSIsICJsZW5ndGgiLCAibGVuZ3RoIiwgImNhY2hlIiwgIm90aFZhbHVlIiwgIlVpbnQ4QXJyYXkiLCAidmFsdWUiLCAidmFsdWUiLCAiU3ltYm9sIiwgIlVpbnQ4QXJyYXkiLCAib2JqZWN0IiwgImxlbmd0aCIsICJpc0FycmF5IiwgImlzQXJyYXkiLCAib2JqZWN0IiwgImxlbmd0aCIsICJ2YWx1ZSIsICJvYmplY3QiLCAidmFsdWUiLCAidmFsdWUiLCAiaGFzT3duUHJvcGVydHkiLCAidmFsdWUiLCAiQnVmZmVyIiwgImlzQnVmZmVyIiwgInZhbHVlIiwgImxlbmd0aCIsICJ2YWx1ZSIsICJ2YWx1ZSIsICJmdW5jIiwgInZhbHVlIiwgImlzVHlwZWRBcnJheSIsICJpc0FycmF5IiwgImlzQnVmZmVyIiwgImlzVHlwZWRBcnJheSIsICJoYXNPd25Qcm9wZXJ0eSIsICJ2YWx1ZSIsICJsZW5ndGgiLCAidmFsdWUiLCAiZnVuYyIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJrZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIm9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAiUHJvbWlzZSIsICJTZXQiLCAiV2Vha01hcCIsICJNYXAiLCAiUHJvbWlzZSIsICJTZXQiLCAiV2Vha01hcCIsICJ2YWx1ZSIsICJpc0FycmF5IiwgImlzQnVmZmVyIiwgImlzVHlwZWRBcnJheSIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAidmFsdWUiLCAiaXNFcXVhbCIsICJ2YWx1ZSIsICJnbG9iYWwiLCAiaXNBcnJheSIsICJpc09iamVjdCIsICJpc1VuZGVmaW5lZCIsICJpc051bWJlciIsICJpc0RhdGUiLCAiZXh0ZW5kIiwgImZvcm1hdCIsICJsb2NhbGUiLCAidG8iLCAiZnJvbSIsICJpc0Z1bmN0aW9uIiwgImtleXMiLCAiY2FsZW5kYXIiLCAibm93IiwgInNpZ24iLCAidG9rZW4iLCAib3JkaW5hbCIsICJmdW5jIiwgImxlbmd0aCIsICJpIiwgInN0cmluZyIsICJkaWZmIiwgImxvY2FsZURhdGEiLCAidmFsdWUiLCAiZ2V0IiwgImhvdXJzIiwgIm1pbnV0ZXMiLCAibmV4dCIsICJtYXRjaCIsICJkZWZhdWx0cyIsICJ0b2tlbnMiLCAibWVyaWRpZW0iLCAibWluIiwgIm1heCIsICJ5ZWFycyIsICJtb250aHMiLCAid2Vla3MiLCAiZGF5cyIsICJzZWNvbmRzIiwgIm1pbGxpc2Vjb25kcyIsICJvZmZzZXQiLCAibWF0Y2hlcyIsICJiYXNlIiwgImlzU3RyaW5nIiwgInByb3BlcnR5IiwgInRvU3RyaW5nIiwgInByZWZpeCIsICJ0b0FycmF5IiwgInRvSlNPTiIsICJhYnMiLCAicm91bmQiLCAidGhyZXNob2xkcyIsICJpc0FycmF5IiwgImlzU3RyaW5nIiwgInZhbHVlIiwgImlzQm9vbGVhbiIsICJ2YWx1ZSIsICJpc051bWJlciIsICJ2YWx1ZSIsICJpc051bWJlciIsICJpc05hTiIsICJ2YWx1ZSIsICJnbG9iYWwiLCAibnVtZXJhbCIsICJWRVJTSU9OIiwgImRlZmF1bHRzIiwgInZhbHVlIiwgImFicyIsICJtaW4iLCAibWF4IiwgInN0cmluZyIsICJuZXh0IiwgInByb3BlcnR5IiwgIm51bSIsICJ2YWx1ZSIsICJpc0FycmF5IiwgInZhbHVlIiwgIm9iamVjdCIsICJtZW1vaXplIiwgImZ1bmMiLCAiY2FjaGUiLCAibWVtb2l6ZSIsICJmdW5jIiwgImNhY2hlIiwgInN0cmluZyIsICJtYXRjaCIsICJsZW5ndGgiLCAiU3ltYm9sIiwgImlzQXJyYXkiLCAidmFsdWUiLCAidG9TdHJpbmciLCAidmFsdWUiLCAiaXNBcnJheSIsICJ0b1N0cmluZyIsICJ2YWx1ZSIsICJvYmplY3QiLCAidmFsdWUiLCAib2JqZWN0IiwgImxlbmd0aCIsICJnZXQiLCAib2JqZWN0IiwgImxlbmd0aCIsICJmdW5jIiwgIm9iamVjdCIsICJ2YWx1ZSIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAidmFsdWUiLCAib2JqZWN0IiwgImxlbmd0aCIsICJrZXlzIiwgIm9iamVjdCIsICJvYmplY3QiLCAiaXNPYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgIm9iamVjdCIsICJvYmplY3QiLCAiQnVmZmVyIiwgImxlbmd0aCIsICJsZW5ndGgiLCAib2JqZWN0IiwgIm9iamVjdCIsICJvYmplY3QiLCAib2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgImxlbmd0aCIsICJVaW50OEFycmF5IiwgIlN5bWJvbCIsICJvYmplY3QiLCAiaXNPYmplY3QiLCAib2JqZWN0IiwgIm9iamVjdCIsICJ2YWx1ZSIsICJ2YWx1ZSIsICJpc0FycmF5IiwgImlzQnVmZmVyIiwgImlzT2JqZWN0IiwgImtleXMiLCAidmFsdWUiLCAib2JqZWN0IiwgImtleSIsICJsZW5ndGgiLCAibGVuZ3RoIiwgIm9iamVjdCIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAiaXNQbGFpbk9iamVjdCIsICJ2YWx1ZSIsICJpc1BsYWluT2JqZWN0IiwgInZhbHVlIiwgIlN5bWJvbCIsICJpc0FycmF5IiwgInZhbHVlIiwgImxlbmd0aCIsICJ2YWx1ZSIsICJmbGF0dGVuIiwgImxlbmd0aCIsICJmdW5jIiwgImZ1bmMiLCAibGVuZ3RoIiwgInZhbHVlIiwgInZhbHVlIiwgImZ1bmMiLCAic3RyaW5nIiwgImZ1bmMiLCAiZmxhdHRlbiIsICJmdW5jIiwgIm9iamVjdCIsICJsZW5ndGgiLCAicmVxdWlyZV9yZWFjdF9pc19kZXZlbG9wbWVudCIsICJvYmplY3QiLCAiRWxlbWVudCIsICJGcmFnbWVudCIsICJpc0VsZW1lbnQiLCAicmVxdWlyZV9yZWFjdF9pcyIsICJlbmNvZGUiLCAidmFsdWUiLCAicHJlZml4IiwgIm1hdGNoIiwgImJhc2UiLCAicGFyc2UiLCAidmFsdWUiLCAiY2hhciIsICJ0b1N0cmluZyIsICJzdHJpbmdpZnkiLCAidG9TdHJpbmciLCAiZXNjYXBlUmVnRXhwIiwgInN0cmluZyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiZ2xvYmFsIiwgInRoaXMiLCAiZmFpbHMiLCAiZXhlYyIsICJyZXF1aXJlJCQwIiwgInRlc3QiLCAiTkFUSVZFX0JJTkQiLCAiRnVuY3Rpb25Qcm90b3R5cGUiLCAiYXBwbHkiLCAiY2FsbCIsICJ1bmN1cnJ5VGhpcyIsICJ0b1N0cmluZyIsICJzdHJpbmdTbGljZSIsICJjbGFzc29mUmF3IiwgInJlcXVpcmUkJDEiLCAiZG9jdW1lbnRBbGwiLCAiJGRvY3VtZW50QWxsIiwgImlzQ2FsbGFibGUiLCAiZGVzY3JpcHRvcnMiLCAiJHByb3BlcnR5SXNFbnVtZXJhYmxlIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IiLCAidmFsdWUiLCAiY2xhc3NvZiIsICJyZXF1aXJlJCQyIiwgIiRPYmplY3QiLCAiaXNOdWxsT3JVbmRlZmluZWQiLCAiJFR5cGVFcnJvciIsICJyZXF1aXJlT2JqZWN0Q29lcmNpYmxlIiwgIkluZGV4ZWRPYmplY3QiLCAidG9JbmRleGVkT2JqZWN0IiwgImlzT2JqZWN0IiwgInBhdGgiLCAiZ2V0QnVpbHRJbiIsICJtZXRob2QiLCAidXNlckFnZW50IiwgInByb2Nlc3MiLCAiRGVubyIsICJtYXRjaCIsICJ2ZXJzaW9uIiwgIlY4X1ZFUlNJT04iLCAiJFN0cmluZyIsICJzeW1ib2wiLCAiTkFUSVZFX1NZTUJPTCIsICJpc1Byb3RvdHlwZU9mIiwgIlVTRV9TWU1CT0xfQVNfVUlEIiwgInJlcXVpcmUkJDMiLCAiaXNTeW1ib2wiLCAiJFN5bWJvbCIsICJ0cnlUb1N0cmluZyIsICJhQ2FsbGFibGUiLCAiZ2V0TWV0aG9kIiwgImZ1bmMiLCAib3JkaW5hcnlUb1ByaW1pdGl2ZSIsICJkZWZpbmVQcm9wZXJ0eSIsICJkZWZpbmVHbG9iYWxQcm9wZXJ0eSIsICJzdG9yZSIsICJzaGFyZWRNb2R1bGUiLCAidG9PYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAiaGFzT3duIiwgImlkIiwgInVpZCIsICJzaGFyZWQiLCAicmVxdWlyZSQkNCIsICJyZXF1aXJlJCQ1IiwgIlN5bWJvbCIsICJXZWxsS25vd25TeW1ib2xzU3RvcmUiLCAid2VsbEtub3duU3ltYm9sIiwgInRvUHJpbWl0aXZlIiwgInRvUHJvcGVydHlLZXkiLCAiZG9jdW1lbnQiLCAiRVhJU1RTIiwgImRvY3VtZW50Q3JlYXRlRWxlbWVudCIsICJERVNDUklQVE9SUyIsICJjcmVhdGVFbGVtZW50IiwgInByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlIiwgInJlcXVpcmUkJDYiLCAiSUU4X0RPTV9ERUZJTkUiLCAicmVxdWlyZSQkNyIsICIkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgImlzRm9yY2VkIiwgInN0cmluZyIsICJiaW5kIiwgImFuT2JqZWN0IiwgIlY4X1BST1RPVFlQRV9ERUZJTkVfQlVHIiwgIiRkZWZpbmVQcm9wZXJ0eSIsICJDT05GSUdVUkFCTEUiLCAiZGVmaW5lUHJvcGVydHlNb2R1bGUiLCAiY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5IiwgIm9iamVjdCIsICJyZXF1aXJlJCQ4IiwgInJlcXVpcmUkJDkiLCAiRk9SQ0VEIiwgIiQiLCAiT2JqZWN0IiwgInBhcmVudCIsICJpc0FycmF5IiwgImZsb29yIiwgInRydW5jIiwgInRvSW50ZWdlck9ySW5maW5pdHkiLCAibWluIiwgInRvTGVuZ3RoIiwgImxlbmd0aE9mQXJyYXlMaWtlIiwgImRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciIsICJjcmVhdGVQcm9wZXJ0eSIsICJUT19TVFJJTkdfVEFHIiwgIlRPX1NUUklOR19UQUdfU1VQUE9SVCIsICJpbnNwZWN0U291cmNlIiwgIm5vb3AiLCAiY29uc3RydWN0IiwgImlzQ29uc3RydWN0b3IiLCAiY2FsbGVkIiwgIlNQRUNJRVMiLCAiJEFycmF5IiwgImFycmF5U3BlY2llc0NvbnN0cnVjdG9yIiwgImFycmF5U3BlY2llc0NyZWF0ZSIsICJsZW5ndGgiLCAiYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCIsICJyZXF1aXJlJCQxMCIsICJyZXF1aXJlJCQxMSIsICJjb25jYXQiLCAiaSIsICJtYXgiLCAidG9BYnNvbHV0ZUluZGV4IiwgImNyZWF0ZU1ldGhvZCIsICJoaWRkZW5LZXlzIiwgInB1c2giLCAiZW51bUJ1Z0tleXMiLCAiaW50ZXJuYWxPYmplY3RLZXlzIiwgIm9iamVjdEtleXMiLCAia2V5cyIsICJkZWZpbmVQcm9wZXJ0aWVzIiwgImh0bWwiLCAic2hhcmVkS2V5IiwgImRlZmluZVByb3BlcnRpZXNNb2R1bGUiLCAiUFJPVE9UWVBFIiwgIklFX1BST1RPIiwgImFjdGl2ZVhEb2N1bWVudCIsICJjcmVhdGUiLCAiZ2V0T3duUHJvcGVydHlOYW1lcyIsICIkZ2V0T3duUHJvcGVydHlOYW1lcyIsICJhcnJheVNsaWNlIiwgImRlZmluZUJ1aWx0SW4iLCAiZGVmaW5lQnVpbHRJbkFjY2Vzc29yIiwgIndyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUiLCAiU3ltYm9sUHJvdG90eXBlIiwgIlRPX1BSSU1JVElWRSIsICJzZXRUb1N0cmluZ1RhZyIsICJXZWFrTWFwIiwgIlR5cGVFcnJvciIsICJzZXQiLCAiZ2V0IiwgInNlbGYiLCAicmVxdWlyZSQkMTIiLCAicmVxdWlyZSQkMTMiLCAicmVxdWlyZSQkMTQiLCAicmVxdWlyZSQkMTUiLCAicmVxdWlyZSQkMTYiLCAiZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSIsICJyZXF1aXJlJCQxNyIsICJyZXF1aXJlJCQxOCIsICJnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUiLCAicmVxdWlyZSQkMTkiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlIiwgInJlcXVpcmUkJDIwIiwgInJlcXVpcmUkJDIxIiwgInJlcXVpcmUkJDIyIiwgInJlcXVpcmUkJDIzIiwgInJlcXVpcmUkJDI0IiwgInJlcXVpcmUkJDI1IiwgInJlcXVpcmUkJDI2IiwgInJlcXVpcmUkJDI3IiwgInJlcXVpcmUkJDI4IiwgInJlcXVpcmUkJDI5IiwgInJlcXVpcmUkJDMwIiwgInJlcXVpcmUkJDMxIiwgImRlZmluZVdlbGxLbm93blN5bWJvbCIsICJyZXF1aXJlJCQzMiIsICJkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSIsICJyZXF1aXJlJCQzMyIsICJyZXF1aXJlJCQzNCIsICJJbnRlcm5hbFN0YXRlTW9kdWxlIiwgInJlcXVpcmUkJDM1IiwgIiRmb3JFYWNoIiwgInJlcXVpcmUkJDM2IiwgInNldEludGVybmFsU3RhdGUiLCAiZ2V0SW50ZXJuYWxTdGF0ZSIsICJPYmplY3RQcm90b3R5cGUiLCAiUmFuZ2VFcnJvciIsICJuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSIsICJTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5IiwgImtleUZvciIsICJjaGFyQXQiLCAiY2hhckNvZGVBdCIsICJyZXBsYWNlIiwgInByZXYiLCAibmV4dCIsICJzdHJpbmdpZnkiLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgIiRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIiwgImdldFByb3RvdHlwZU9mIiwgIklURVJBVE9SIiwgIkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMiLCAiSXRlcmF0b3JQcm90b3R5cGUiLCAiSXRlcmF0b3JzIiwgInJldHVyblRoaXMiLCAiYVBvc3NpYmxlUHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgInZhbHVlcyIsICJlbnRyaWVzIiwgImNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QiLCAiZGVmaW5lSXRlcmF0b3IiLCAiRE9NSXRlcmFibGVzIiwgIk1FVEFEQVRBIiwgInRoaXNTeW1ib2xWYWx1ZSIsICJpc1JlZ2lzdGVyZWRTeW1ib2wiLCAiaXNXZWxsS25vd25TeW1ib2wiLCAicG9zaXRpb24iLCAic2l6ZSIsICJXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlIiwgIml0ZXJhdG9yIiwgIl90eXBlb2YiLCAiX1N5bWJvbCIsICJfU3ltYm9sJGl0ZXJhdG9yIiwgIm8iLCAiX3RvUHJpbWl0aXZlIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9PYmplY3QkZGVmaW5lUHJvcGVydHkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kIiwgIm1lbW8iLCAiYXJyYXlNZXRob2RJc1N0cmljdCIsICJJU19OT0RFIiwgInJlZHVjZSIsICJBcnJheVByb3RvdHlwZSIsICJIQVNfU1BFQ0lFU19TVVBQT1JUIiwgImZpbHRlciIsICJtYXAiLCAiZmxhdHRlbkludG9BcnJheSIsICJmbGF0TWFwIiwgImNyZWF0ZU5ld0RhdGFQaXBlRnJvbSIsICJmcm9tIiwgIkRhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24iLCAiU2ltcGxlRGF0YVBpcGUiLCAiX3NvdXJjZSIsICJfdHJhbnNmb3JtZXJzIiwgIl90YXJnZXQiLCAiX2NvbnRleHQiLCAiX2NvbnRleHQyIiwgIl9jb250ZXh0MyIsICJhZGQiLCAiX2JpbmRJbnN0YW5jZVByb3BlcnR5IiwgIl9hZGQiLCAicmVtb3ZlIiwgIl9yZW1vdmUiLCAidXBkYXRlIiwgIl91cGRhdGUiLCAia2V5IiwgImFsbCIsICJfdHJhbnNmb3JtSXRlbXMiLCAic3RhcnQiLCAib24iLCAiX2xpc3RlbmVycyIsICJzdG9wIiwgIm9mZiIsICJpdGVtcyIsICJfY29udGV4dDQiLCAiX3JlZHVjZUluc3RhbmNlUHJvcGVydHkiLCAidHJhbnNmb3JtIiwgIl9uYW1lIiwgInBheWxvYWQiLCAib2xkRGF0YSIsICJjYWxsYmFjayIsICJpbnB1dCIsICJfZmlsdGVySW5zdGFuY2VQcm9wZXJ0eSIsICJfbWFwSW5zdGFuY2VQcm9wZXJ0eSIsICJfZmxhdE1hcEluc3RhbmNlUHJvcGVydHkiLCAidG8iLCAidGFyZ2V0IiwgIml0ZXJhdG9yQ2xvc2UiLCAiY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyIsICJFTlRSSUVTIiwgImlzQXJyYXlJdGVyYXRvck1ldGhvZCIsICJnZXRJdGVyYXRvck1ldGhvZCIsICJnZXRJdGVyYXRvciIsICJjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24iLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9BcnJheSRpc0FycmF5IiwgInNldEFycmF5TGVuZ3RoIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfZ2V0SXRlcmF0b3JNZXRob2QiLCAiciIsICJzbGljZSIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiYXJyYXlMaWtlVG9BcnJheSIsICJfc2xpY2VJbnN0YW5jZVByb3BlcnR5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX3NsaWNlZFRvQXJyYXkiLCAiYXJyYXlXaXRoSG9sZXMiLCAiaXRlcmFibGVUb0FycmF5TGltaXQiLCAidW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAibm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiYXJyYXlXaXRob3V0SG9sZXMiLCAiaXRlcmFibGVUb0FycmF5IiwgIm5vbkl0ZXJhYmxlU3ByZWFkIiwgIm93bktleXMiLCAiRkFJTFNfT05fUFJJTUlUSVZFUyIsICJTVFJJQ1RfTUVUSE9EIiwgImZvckVhY2giLCAicmV2ZXJzZSIsICJkZWxldGVQcm9wZXJ0eU9yVGhyb3ciLCAic3BsaWNlIiwgImFzc2lnbiIsICJ2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCIsICJGdW5jdGlvbiIsICJzY2hlZHVsZXJzRml4IiwgInNldEludGVydmFsIiwgInNldFRpbWVvdXQiLCAiRW1pdHRlciIsICJtb2R1bGUiLCAiX2V4dGVuZHMiLCAiX2luaGVyaXRzTG9vc2UiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJyb3VuZCIsICJhYnMiLCAibm93IiwgInByb3BlcnR5IiwgInByZWZpeCIsICJlYWNoIiwgIlRvdWNoQWN0aW9uIiwgIm5vZGUiLCAiSW5wdXQiLCAiUG9pbnRlckV2ZW50SW5wdXQiLCAidG9BcnJheSIsICJzb3J0IiwgIlRvdWNoSW5wdXQiLCAiTW91c2VJbnB1dCIsICJyZW1vdmVMYXN0VG91Y2giLCAiVG91Y2hNb3VzZUlucHV0IiwgIlJlY29nbml6ZXIiLCAiZW1pdCIsICJUYXBSZWNvZ25pemVyIiwgIkF0dHJSZWNvZ25pemVyIiwgIlBhblJlY29nbml6ZXIiLCAiU3dpcGVSZWNvZ25pemVyIiwgIlBpbmNoUmVjb2duaXplciIsICJSb3RhdGVSZWNvZ25pemVyIiwgIlByZXNzUmVjb2duaXplciIsICJkZWZhdWx0cyIsICJkYXRhIiwgIk1hbmFnZXIiLCAiU2luZ2xlVG91Y2hJbnB1dCIsICJsb2ciLCAiZXh0ZW5kIiwgIm1lcmdlIiwgImJhc2UiLCAiSGFtbWVyIiwgIkRFTEVURSIsICJwdXJlRGVlcE9iamVjdEFzc2lnbiIsICJfbGVuIiwgImFyZ3VtZW50cyIsICJ1cGRhdGVzIiwgIkFycmF5IiwgIl9rZXkiLCAiZGVlcE9iamVjdEFzc2lnbiIsICJfY29uY2F0SW5zdGFuY2VQcm9wZXJ0eSIsICJtZXJnZWQiLCAiZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5IiwgInN0cmlwRGVsZXRlIiwgIl9sZW4yIiwgIl9rZXkyIiwgImEiLCAiYiIsICJEYXRlIiwgInNldFRpbWUiLCAiZ2V0VGltZSIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX1JlZmxlY3Qkb3duS2V5cyIsICJfc3RlcCIsICJzIiwgIm4iLCAiZG9uZSIsICJwcm9wIiwgInByb3RvdHlwZSIsICJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJjbG9uZSIsICJlcnIiLCAiZSIsICJmIiwgIl9pIiwgIl9PYmplY3Qka2V5cyIsICJfT2JqZWN0JGtleXMyIiwgImFDb25zdHJ1Y3RvciIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJwIiwgIl9pbmhlcml0cyIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJhc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2dldFByb3RvdHlwZU9mIiwgImNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMiLCAiaW5zdGFsbEVycm9yQ2F1c2UiLCAiJEVycm9yIiwgIml0ZXJhdGUiLCAibm9ybWFsaXplU3RyaW5nQXJndW1lbnQiLCAic2V0U3BlY2llcyIsICJhbkluc3RhbmNlIiwgInNwZWNpZXNDb25zdHJ1Y3RvciIsICJJU19JT1MiLCAiTWVzc2FnZUNoYW5uZWwiLCAiU3RyaW5nIiwgInF1ZXVlIiwgInNldEltbWVkaWF0ZSIsICJ0YXNrIiwgIlF1ZXVlIiwgIk11dGF0aW9uT2JzZXJ2ZXIiLCAiUHJvbWlzZSIsICJtaWNyb3Rhc2siLCAibm90aWZ5IiwgInByb21pc2UiLCAiZmx1c2giLCAiaG9zdFJlcG9ydEVycm9ycyIsICJwZXJmb3JtIiwgIklTX0RFTk8iLCAiTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yIiwgIk5hdGl2ZVByb21pc2VQcm90b3R5cGUiLCAiTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UIiwgIkZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIiwgIm5ld1Byb21pc2VDYXBhYmlsaXR5IiwgIm5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlIiwgImlzVGhlbmFibGUiLCAidGhlbiIsICJQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiIsICJjb3VudGVyIiwgInByb21pc2VSZXNvbHZlIiwgImFueSIsICJpc0Z1bmN0aW9uIiwgIl9PYmplY3QkY3JlYXRlIiwgIl9PYmplY3QkZ2V0UHJvdG90eXBlT2YiLCAiX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5IiwgIl9wdXNoSW5zdGFuY2VQcm9wZXJ0eSIsICJfT2JqZWN0JHNldFByb3RvdHlwZU9mIiwgIl9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eSIsICJfcmVnZW5lcmF0b3JSdW50aW1lIiwgInQiLCAiZGVmaW5lIiwgIndyYXAiLCAiYyIsICJBc3luY0l0ZXJhdG9yIiwgInUiLCAiaCIsICJpc0V4dGVuc2libGUiLCAiZmFzdEtleSIsICJpbnRlcm5hbE1ldGFkYXRhTW9kdWxlIiwgImludGVybmFsU3RhdGVHZXR0ZXJGb3IiLCAiY29sbGVjdGlvbiIsICJkZWZpbmVCdWlsdElucyIsICJjb2xsZWN0aW9uU3Ryb25nIiwgImNsZWFyIiwgImhhcyIsICJNYXAiLCAic29tZSIsICJXRUJLSVQiLCAiZ2V0UmFuZG9tVmFsdWVzIiwgInJuZHM4IiwgInJuZyIsICJieXRlVG9IZXgiLCAiaXNJZCIsICJvcHRpb25zIiwgImRlbGF5IiwgIkluZmluaXR5IiwgInNldE9wdGlvbnMiLCAiX2ZsdXNoSWZOZWVkZWQiLCAiZGVzdHJveSIsICJfZXh0ZW5kZWQiLCAibWV0aG9kcyIsICJvcmlnaW5hbCIsICJuYW1lIiwgIm1lIiwgIkVycm9yIiwgImFyZ3MiLCAiZm4iLCAiY29udGV4dCIsICJlbnRyeSIsICJfcXVldWUiLCAiX3RoaXMiLCAiX3RpbWVvdXQiLCAiY2xlYXJUaW1lb3V0IiwgIl9zZXRUaW1lb3V0IiwgIl9zcGxpY2VJbnN0YW5jZVByb3BlcnR5IiwgInVuZGVmaW5lZCIsICJEYXRhU2V0UGFydCIsICJfdHJpZ2dlciIsICJldmVudCIsICJzZW5kZXJJZCIsICJfc3Vic2NyaWJlcnMiLCAic3Vic2NyaWJlciIsICJTZXQiLCAiRGF0YVN0cmVhbSIsICJwYWlycyIsICJfcGFpcnMiLCAibWFyayIsICJfc3RlcCR2YWx1ZSIsICJpdGVtIiwgInZhbHVlJCIsICJ0MCIsICJmaW5pc2giLCAiX2l0ZXJhdG9yMiIsICJfc3RlcDIiLCAiX3N0ZXAyJHZhbHVlIiwgImVudHJpZXMkIiwgIl9pdGVyYXRvcjMiLCAiX3N0ZXAzIiwgIl9zdGVwMyR2YWx1ZSIsICJrZXlzJCIsICJfaXRlcmF0b3I0IiwgIl9zdGVwNCIsICJfc3RlcDQkdmFsdWUiLCAidmFsdWVzJCIsICJ0b0lkQXJyYXkiLCAiX2NvbnRleHQ1IiwgInBhaXIiLCAidG9JdGVtQXJyYXkiLCAiX2NvbnRleHQ2IiwgInRvRW50cnlBcnJheSIsICJ0b09iamVjdE1hcCIsICJfaXRlcmF0b3I1IiwgIl9zdGVwNSIsICJfc3RlcDUkdmFsdWUiLCAidG9NYXAiLCAiX01hcCIsICJ0b0lkU2V0IiwgIl9TZXQiLCAidG9JdGVtU2V0IiwgImNhY2hlIiwgImRpc3RpbmN0IiwgIl9pdGVyYXRvcjYiLCAiX3N0ZXA2IiwgIl9zdGVwNiR2YWx1ZSIsICJfU3ltYm9sJGl0ZXJhdG9yMiIsICJfY2FsbGVlIiwgIl9pdGVyYXRvcjciLCAiX3N0ZXA3IiwgIl9zdGVwNyR2YWx1ZSIsICJfY2FsbGVlJCIsICJfY29udGV4dDciLCAiX2l0ZXJhdG9yOCIsICJfc3RlcDgiLCAiX3N0ZXA4JHZhbHVlIiwgIl9jYWxsZWUyIiwgIl9pdGVyYXRvcjkiLCAiX3N0ZXA5IiwgIl9zdGVwOSR2YWx1ZSIsICJfY2FsbGVlMiQiLCAiX2NvbnRleHQ4IiwgIml0ZXIiLCAiX2dldEl0ZXJhdG9yIiwgImN1cnIiLCAibWF4SXRlbSIsICJtYXhWYWx1ZSIsICJfY3VyciR2YWx1ZSIsICJtaW5JdGVtIiwgIm1pblZhbHVlIiwgIl9jdXJyJHZhbHVlMiIsICJhY2N1bXVsYXRvciIsICJfaXRlcmF0b3IxMCIsICJfc3RlcDEwIiwgIl9zdGVwMTAkdmFsdWUiLCAiX2NvbnRleHQ5IiwgIl9zb3J0SW5zdGFuY2VQcm9wZXJ0eSIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgImlkQSIsICJpdGVtQSIsICJfcmVmNCIsICJpZEIiLCAiaXRlbUIiLCAiZW5zdXJlRnVsbEl0ZW0iLCAiaWRQcm9wIiwgInV1aWQ0IiwgIkRhdGFTZXQiLCAiX0RhdGFTZXRQYXJ0IiwgIl9zdXBlciIsICJfY3JlYXRlU3VwZXIiLCAiX29wdGlvbnMiLCAiX2RhdGEiLCAiX2lkUHJvcCIsICJmaWVsZElkIiwgIl90aGlzMiIsICJhZGRlZElkcyIsICJpZHNUb0FkZCIsICJkIiwgIl9zb21lSW5zdGFuY2VQcm9wZXJ0eSIsICJsZW4iLCAiX2FkZEl0ZW0iLCAiX3RoaXMzIiwgInVwZGF0ZWRJZHMiLCAidXBkYXRlZERhdGEiLCAiYWRkT3JVcGRhdGUiLCAib3JpZ0lkIiwgImZ1bGxJdGVtIiwgIm9sZEl0ZW0iLCAiX09iamVjdCRhc3NpZ24iLCAiX3VwZGF0ZUl0ZW0iLCAiY29uc29sZSIsICJ3YXJuIiwgInByb3BzIiwgInVwZGF0ZU9ubHkiLCAiX3RoaXM0IiwgInVwZGF0ZUV2ZW50RGF0YSIsICJmaXJzdCIsICJzZWNvbmQiLCAiaWRzIiwgInJldHVyblR5cGUiLCAiaXRlbUlkcyIsICJpdGVtSWQiLCAiX2tleXNJbnN0YW5jZVByb3BlcnR5IiwgIm9yZGVyIiwgIl9zb3J0IiwgImZpZWxkcyIsICJfZmlsdGVyRmllbGRzIiwgInJlc3VsdCIsICJyZXN1bHRhbnQiLCAiX2l0ZW0iLCAiZ2V0SWRzIiwgImdldERhdGFTZXQiLCAibWFwcGVkSXRlbXMiLCAiZmlsdGVyZWRJdGVtIiwgImZpZWxkIiwgImF2IiwgImJ2IiwgInJlbW92ZWRJZHMiLCAicmVtb3ZlZEl0ZW1zIiwgImlkZW50IiwgImRlbGV0ZSIsICJtYXhGaWVsZCIsICJfdmFsdWVzSW5zdGFuY2VQcm9wZXJ0eSIsICJpdGVtRmllbGQiLCAibWluRmllbGQiLCAiY291bnQiLCAiZXhpc3RzIiwgImoiLCAiX0pTT04kc3RyaW5naWZ5IiwgIl9vYmplY3RTcHJlYWQiLCAic3RyZWFtIiwgIl9lbnRyaWVzSW5zdGFuY2VQcm9wZXJ0eSIsICJEYXRhVmlldyIsICJfbGlzdGVuZXIiLCAiX29uRXZlbnQiLCAic2V0RGF0YSIsICJfaWRzIiwgInJlZnJlc2giLCAib2xkSWRzIiwgIm5ld0lkcyIsICJlcnJvciIsICJ2aWV3T3B0aW9ucyIsICJ0aGlzRmlsdGVyIiwgIm9wdGlvbnNGaWx0ZXIiLCAiZGVmYXVsdEZpbHRlciIsICJkaXNwb3NlIiwgIl90aGlzJF9kYXRhIiwgIm1lc3NhZ2UiLCAicmVwbGFjZW1lbnQiLCAiY29uZmlndXJhYmxlIiwgInBhcmFtcyIsICJvbGRJdGVtcyIsICJ1cGRhdGVkSXRlbXMiLCAiaXNEYXRhU2V0TGlrZSIsICJ2IiwgImlzRGF0YVZpZXdMaWtlIiwgImNoZWNrIiwgIml0IiwgIk1hdGgiLCAiZ2xvYmFsIiwgImdsb2JhbFRoaXMiLCAid2luZG93IiwgInNlbGYiLCAidGhpcyIsICJGdW5jdGlvbiIsICJmYWlscyIsICJleGVjIiwgImVycm9yIiwgImZ1bmN0aW9uQmluZE5hdGl2ZSIsICJyZXF1aXJlJCQwIiwgInRlc3QiLCAiYmluZCIsICJoYXNPd25Qcm9wZXJ0eSIsICJOQVRJVkVfQklORCIsICJGdW5jdGlvblByb3RvdHlwZSIsICJwcm90b3R5cGUiLCAiYXBwbHkiLCAiY2FsbCIsICJmdW5jdGlvbkFwcGx5IiwgIlJlZmxlY3QiLCAiYXJndW1lbnRzIiwgInVuY3VycnlUaGlzV2l0aEJpbmQiLCAiZnVuY3Rpb25VbmN1cnJ5VGhpcyIsICJmbiIsICJ1bmN1cnJ5VGhpcyIsICJ0b1N0cmluZyIsICJzdHJpbmdTbGljZSIsICJzbGljZSIsICJjbGFzc29mUmF3IiwgInJlcXVpcmUkJDEiLCAiZnVuY3Rpb25VbmN1cnJ5VGhpc0NsYXVzZSIsICJkb2N1bWVudEFsbCIsICJkb2N1bWVudCIsICJhbGwiLCAiZG9jdW1lbnRBbGxfMSIsICJJU19IVE1MRERBIiwgImlzQ2FsbGFibGUiLCAiYXJndW1lbnQiLCAiZGVzY3JpcHRvcnMiLCAiT2JqZWN0IiwgImRlZmluZVByb3BlcnR5IiwgImdldCIsICJmdW5jdGlvbkNhbGwiLCAiJHByb3BlcnR5SXNFbnVtZXJhYmxlIiwgInByb3BlcnR5SXNFbnVtZXJhYmxlIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJOQVNIT1JOX0JVRyIsICJvYmplY3RQcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJmIiwgIlYiLCAiZGVzY3JpcHRvciIsICJlbnVtZXJhYmxlIiwgIm1hdGNoIiwgInZlcnNpb24iLCAiY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yIiwgImJpdG1hcCIsICJ2YWx1ZSIsICJjb25maWd1cmFibGUiLCAid3JpdGFibGUiLCAiY2xhc3NvZiIsICJyZXF1aXJlJCQyIiwgIiRPYmplY3QiLCAic3BsaXQiLCAiaW5kZXhlZE9iamVjdCIsICJpc051bGxPclVuZGVmaW5lZCIsICIkVHlwZUVycm9yIiwgIlR5cGVFcnJvciIsICJyZXF1aXJlT2JqZWN0Q29lcmNpYmxlIiwgIkluZGV4ZWRPYmplY3QiLCAidG9JbmRleGVkT2JqZWN0IiwgImlzT2JqZWN0IiwgInBhdGgiLCAiYUZ1bmN0aW9uIiwgInZhcmlhYmxlIiwgImdldEJ1aWx0SW4iLCAibmFtZXNwYWNlIiwgIm1ldGhvZCIsICJsZW5ndGgiLCAib2JqZWN0SXNQcm90b3R5cGVPZiIsICJpc1Byb3RvdHlwZU9mIiwgImVuZ2luZVVzZXJBZ2VudCIsICJuYXZpZ2F0b3IiLCAiU3RyaW5nIiwgInVzZXJBZ2VudCIsICJwcm9jZXNzIiwgIkRlbm8iLCAidmVyc2lvbnMiLCAidjgiLCAiZW5naW5lVjhWZXJzaW9uIiwgIlY4X1ZFUlNJT04iLCAiJFN0cmluZyIsICJzeW1ib2xDb25zdHJ1Y3RvckRldGVjdGlvbiIsICJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAic3ltYm9sIiwgIlN5bWJvbCIsICJzaGFtIiwgInVzZVN5bWJvbEFzVWlkIiwgIml0ZXJhdG9yIiwgImlzU3ltYm9sIiwgInJlcXVpcmUkJDMiLCAiJFN5bWJvbCIsICJ0cnlUb1N0cmluZyIsICJhQ2FsbGFibGUiLCAiZ2V0TWV0aG9kIiwgIlAiLCAiZnVuYyIsICJkZWZpbmVHbG9iYWxQcm9wZXJ0eSIsICJrZXkiLCAiU0hBUkVEIiwgInNoYXJlZFN0b3JlIiwgInN0b3JlIiwgInNoYXJlZE1vZHVsZSIsICJwdXNoIiwgIm1vZGUiLCAiY29weXJpZ2h0IiwgImxpY2Vuc2UiLCAic291cmNlIiwgInRvT2JqZWN0IiwgImhhc093blByb3BlcnR5XzEiLCAiaGFzT3duIiwgImlkIiwgInBvc3RmaXgiLCAicmFuZG9tIiwgInVpZCIsICJzaGFyZWQiLCAiTkFUSVZFX1NZTUJPTCIsICJyZXF1aXJlJCQ0IiwgIlVTRV9TWU1CT0xfQVNfVUlEIiwgInJlcXVpcmUkJDUiLCAiV2VsbEtub3duU3ltYm9sc1N0b3JlIiwgImNyZWF0ZVdlbGxLbm93blN5bWJvbCIsICJ3aXRob3V0U2V0dGVyIiwgIndlbGxLbm93blN5bWJvbCIsICJuYW1lIiwgIm9yZGluYXJ5VG9QcmltaXRpdmUiLCAiaW5wdXQiLCAicHJlZiIsICJ2YWwiLCAidmFsdWVPZiIsICJUT19QUklNSVRJVkUiLCAidG9QcmltaXRpdmUiLCAicmVzdWx0IiwgImV4b3RpY1RvUHJpbSIsICJ0b1Byb3BlcnR5S2V5IiwgIkVYSVNUUyIsICJjcmVhdGVFbGVtZW50IiwgImRvY3VtZW50Q3JlYXRlRWxlbWVudCIsICJpZThEb21EZWZpbmUiLCAiYSIsICJERVNDUklQVE9SUyIsICJwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSIsICJyZXF1aXJlJCQ2IiwgIklFOF9ET01fREVGSU5FIiwgInJlcXVpcmUkJDciLCAiJGdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiTyIsICJyZXBsYWNlbWVudCIsICJpc0ZvcmNlZCIsICJmZWF0dXJlIiwgImRldGVjdGlvbiIsICJkYXRhIiwgIm5vcm1hbGl6ZSIsICJQT0xZRklMTCIsICJOQVRJVkUiLCAic3RyaW5nIiwgInJlcGxhY2UiLCAidG9Mb3dlckNhc2UiLCAiaXNGb3JjZWRfMSIsICJmdW5jdGlvbkJpbmRDb250ZXh0IiwgInRoYXQiLCAidjhQcm90b3R5cGVEZWZpbmVCdWciLCAiYW5PYmplY3QiLCAiVjhfUFJPVE9UWVBFX0RFRklORV9CVUciLCAiJGRlZmluZVByb3BlcnR5IiwgIkVOVU1FUkFCTEUiLCAiQ09ORklHVVJBQkxFIiwgIldSSVRBQkxFIiwgIm9iamVjdERlZmluZVByb3BlcnR5IiwgIkF0dHJpYnV0ZXMiLCAiY3VycmVudCIsICJkZWZpbmVQcm9wZXJ0eU1vZHVsZSIsICJjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkiLCAib2JqZWN0IiwgInJlcXVpcmUkJDgiLCAicmVxdWlyZSQkOSIsICJ3cmFwQ29uc3RydWN0b3IiLCAiTmF0aXZlQ29uc3RydWN0b3IiLCAiV3JhcHBlciIsICJiIiwgImMiLCAiX2V4cG9ydCIsICJvcHRpb25zIiwgIkZPUkNFRCIsICJVU0VfTkFUSVZFIiwgIlZJUlRVQUxfUFJPVE9UWVBFIiwgInNvdXJjZVByb3BlcnR5IiwgInRhcmdldFByb3BlcnR5IiwgIm5hdGl2ZVByb3BlcnR5IiwgInJlc3VsdFByb3BlcnR5IiwgIlRBUkdFVCIsICJ0YXJnZXQiLCAiR0xPQkFMIiwgIlNUQVRJQyIsICJzdGF0IiwgIlBST1RPIiwgInByb3RvIiwgIm5hdGl2ZVNvdXJjZSIsICJ0YXJnZXRQcm90b3R5cGUiLCAiZm9yY2VkIiwgImRvbnRDYWxsR2V0U2V0IiwgIndyYXAiLCAicmVhbCIsICJjZWlsIiwgImZsb29yIiwgInRydW5jIiwgIngiLCAibiIsICJ0b0ludGVnZXJPckluZmluaXR5IiwgIm51bWJlciIsICJtYXgiLCAibWluIiwgInRvQWJzb2x1dGVJbmRleCIsICJpbmRleCIsICJpbnRlZ2VyIiwgInRvTGVuZ3RoIiwgImxlbmd0aE9mQXJyYXlMaWtlIiwgIm9iaiIsICJjcmVhdGVNZXRob2QiLCAiSVNfSU5DTFVERVMiLCAiJHRoaXMiLCAiZWwiLCAiZnJvbUluZGV4IiwgImFycmF5SW5jbHVkZXMiLCAiaW5jbHVkZXMiLCAiaW5kZXhPZiIsICJoaWRkZW5LZXlzIiwgIm9iamVjdEtleXNJbnRlcm5hbCIsICJuYW1lcyIsICJpIiwgImVudW1CdWdLZXlzIiwgImludGVybmFsT2JqZWN0S2V5cyIsICJvYmplY3RLZXlzIiwgImtleXMiLCAib2JqZWN0R2V0T3duUHJvcGVydHlTeW1ib2xzIiwgImdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSIsICIkYXNzaWduIiwgImFzc2lnbiIsICJjb25jYXQiLCAib2JqZWN0QXNzaWduIiwgIkEiLCAiQiIsICJhbHBoYWJldCIsICJmb3JFYWNoIiwgImNociIsICJqb2luIiwgIlQiLCAiYXJndW1lbnRzTGVuZ3RoIiwgIlMiLCAiaiIsICJhcml0eSIsICJhcnJheVNsaWNlIiwgIiRGdW5jdGlvbiIsICJmYWN0b3JpZXMiLCAiZnVuY3Rpb25CaW5kIiwgIkYiLCAiUHJvdG90eXBlIiwgInBhcnRBcmdzIiwgImJvdW5kRnVuY3Rpb24iLCAiYXJncyIsICJDIiwgImFyZ3NMZW5ndGgiLCAibGlzdCIsICJlbnRyeVZpcnR1YWwiLCAiQ09OU1RSVUNUT1IiLCAicGFyZW50IiwgIm93biIsICJkcmF3Q2lyY2xlIiwgImN0eCIsICJ5IiwgInIiLCAiYmVnaW5QYXRoIiwgImFyYyIsICJQSSIsICJjbG9zZVBhdGgiLCAiZHJhd1JvdW5kUmVjdCIsICJ3IiwgImgiLCAicjJkIiwgIm1vdmVUbyIsICJsaW5lVG8iLCAiZHJhd0VsbGlwc2UiLCAia2FwcGEiLCAib3giLCAib3kiLCAieGUiLCAieWUiLCAieG0iLCAieW0iLCAiYmV6aWVyQ3VydmVUbyIsICJkcmF3RGF0YWJhc2UiLCAiaEVsbGlwc2UiLCAieW1iIiwgInllYiIsICJkcmF3RGFzaGVkTGluZSIsICJ4MiIsICJ5MiIsICJwYXR0ZXJuIiwgInBhdHRlcm5MZW5ndGgiLCAiZHgiLCAiZHkiLCAic2xvcGUiLCAiZGlzdFJlbWFpbmluZyIsICJzcXJ0IiwgInBhdHRlcm5JbmRleCIsICJkcmF3IiwgInhTdGVwIiwgImRhc2hMZW5ndGgiLCAic2hhcGVNYXAiLCAiY2lyY2xlIiwgImRhc2hlZExpbmUiLCAiZGF0YWJhc2UiLCAiZGlhbW9uZCIsICJlbGxpcHNlIiwgImVsbGlwc2VfdmlzIiwgImhleGFnb24iLCAiY29zIiwgInNpbiIsICJyb3VuZFJlY3QiLCAic3F1YXJlIiwgInJlY3QiLCAic3RhciIsICJyYWRpdXMiLCAidHJpYW5nbGUiLCAicyIsICJzMiIsICJpciIsICJ0cmlhbmdsZURvd24iLCAidCIsICJFbWl0dGVyIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm9uIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAiZXZlbnQiLCAiX2NhbGxiYWNrcyIsICJvbmNlIiwgIm9mZiIsICJyZW1vdmVMaXN0ZW5lciIsICJyZW1vdmVBbGxMaXN0ZW5lcnMiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJjYiIsICJjYWxsYmFja3MiLCAic3BsaWNlIiwgImVtaXQiLCAiQXJyYXkiLCAibGVuIiwgImxpc3RlbmVycyIsICJoYXNMaXN0ZW5lcnMiLCAic2V0IiwgImhhcyIsICJ0b1N0cmluZ1RhZ1N1cHBvcnQiLCAiVE9fU1RSSU5HX1RBR19TVVBQT1JUIiwgIlRPX1NUUklOR19UQUciLCAiQ09SUkVDVF9BUkdVTUVOVFMiLCAidGFnIiwgImNhbGxlZSIsICJjaGFyQXQiLCAiY2hhckNvZGVBdCIsICJDT05WRVJUX1RPX1NUUklORyIsICJwb3MiLCAiZmlyc3QiLCAic2Vjb25kIiwgInBvc2l0aW9uIiwgInNpemUiLCAic3RyaW5nTXVsdGlieXRlIiwgImNvZGVBdCIsICJXZWFrTWFwIiwgIndlYWtNYXBCYXNpY0RldGVjdGlvbiIsICJzaGFyZWRLZXkiLCAiTkFUSVZFX1dFQUtfTUFQIiwgIk9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEIiwgInN0YXRlIiwgIm1ldGFkYXRhIiwgImZhY2FkZSIsICJTVEFURSIsICJpbnRlcm5hbFN0YXRlIiwgImVuZm9yY2UiLCAiZ2V0dGVyRm9yIiwgIlRZUEUiLCAidHlwZSIsICJnZXREZXNjcmlwdG9yIiwgImZ1bmN0aW9uTmFtZSIsICJQUk9QRVIiLCAib2JqZWN0RGVmaW5lUHJvcGVydGllcyIsICJkZWZpbmVQcm9wZXJ0aWVzIiwgIlByb3BlcnRpZXMiLCAicHJvcHMiLCAiYWN0aXZlWERvY3VtZW50IiwgImh0bWwiLCAiZGVmaW5lUHJvcGVydGllc01vZHVsZSIsICJQUk9UT1RZUEUiLCAiU0NSSVBUIiwgIklFX1BST1RPIiwgIkVtcHR5Q29uc3RydWN0b3IiLCAic2NyaXB0VGFnIiwgImNvbnRlbnQiLCAiTFQiLCAiTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCIsICJ3cml0ZSIsICJjbG9zZSIsICJ0ZW1wIiwgInBhcmVudFdpbmRvdyIsICJOdWxsUHJvdG9PYmplY3QiLCAiQWN0aXZlWE9iamVjdCIsICJpZnJhbWVEb2N1bWVudCIsICJpZnJhbWUiLCAiSlMiLCAiZG9tYWluIiwgInN0eWxlIiwgImRpc3BsYXkiLCAiYXBwZW5kQ2hpbGQiLCAic3JjIiwgImNvbnRlbnRXaW5kb3ciLCAib3BlbiIsICJJdGVyYXRvclByb3RvdHlwZSIsICJQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUiLCAiYXJyYXlJdGVyYXRvciIsICJvYmplY3RDcmVhdGUiLCAiY3JlYXRlIiwgImNvcnJlY3RQcm90b3R5cGVHZXR0ZXIiLCAiY29uc3RydWN0b3IiLCAiZ2V0UHJvdG90eXBlT2YiLCAiQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIiwgIk9iamVjdFByb3RvdHlwZSIsICJvYmplY3RHZXRQcm90b3R5cGVPZiIsICJkZWZpbmVCdWlsdEluIiwgIklURVJBVE9SIiwgIkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMiLCAiTkVXX0lURVJBVE9SX1BST1RPVFlQRSIsICJpdGVyYXRvcnNDb3JlIiwgIm9iamVjdFRvU3RyaW5nIiwgInNldFRvU3RyaW5nVGFnIiwgIlRBRyIsICJTRVRfTUVUSE9EIiwgIml0ZXJhdG9ycyIsICJJdGVyYXRvcnMiLCAicmV0dXJuVGhpcyIsICJ1bmN1cnJ5VGhpc0FjY2Vzc29yIiwgImFQb3NzaWJsZVByb3RvdHlwZSIsICJvYmplY3RTZXRQcm90b3R5cGVPZiIsICJzZXRQcm90b3R5cGVPZiIsICJzZXR0ZXIiLCAiQ09SUkVDVF9TRVRURVIiLCAiX19wcm90b19fIiwgIiQiLCAiRnVuY3Rpb25OYW1lIiwgImNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IiLCAiSXRlcmF0b3JDb25zdHJ1Y3RvciIsICJOQU1FIiwgIm5leHQiLCAiRU5VTUVSQUJMRV9ORVhUIiwgInJlcXVpcmUkJDEwIiwgInJlcXVpcmUkJDEyIiwgIkl0ZXJhdG9yc0NvcmUiLCAicmVxdWlyZSQkMTMiLCAiUFJPUEVSX0ZVTkNUSU9OX05BTUUiLCAicmVxdWlyZSQkMTEiLCAiS0VZUyIsICJWQUxVRVMiLCAiRU5UUklFUyIsICJpdGVyYXRvckRlZmluZSIsICJJdGVyYWJsZSIsICJERUZBVUxUIiwgIklTX1NFVCIsICJDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUiLCAibWV0aG9kcyIsICJLRVkiLCAiZ2V0SXRlcmF0aW9uTWV0aG9kIiwgIktJTkQiLCAiZGVmYXVsdEl0ZXJhdG9yIiwgIkl0ZXJhYmxlUHJvdG90eXBlIiwgIklOQ09SUkVDVF9WQUxVRVNfTkFNRSIsICJuYXRpdmVJdGVyYXRvciIsICJhbnlOYXRpdmVJdGVyYXRvciIsICJlbnRyaWVzIiwgInZhbHVlcyIsICJjcmVhdGVJdGVyUmVzdWx0T2JqZWN0IiwgImRvbmUiLCAiSW50ZXJuYWxTdGF0ZU1vZHVsZSIsICJkZWZpbmVJdGVyYXRvciIsICJTVFJJTkdfSVRFUkFUT1IiLCAic2V0SW50ZXJuYWxTdGF0ZSIsICJnZXRJbnRlcm5hbFN0YXRlIiwgIml0ZXJhdGVkIiwgInBvaW50IiwgInVuZGVmaW5lZCIsICJpdGVyYXRvckNsb3NlIiwgImtpbmQiLCAiaW5uZXJSZXN1bHQiLCAiaW5uZXJFcnJvciIsICJBcnJheVByb3RvdHlwZSIsICJpc0FycmF5SXRlcmF0b3JNZXRob2QiLCAiZnVuY3Rpb25Ub1N0cmluZyIsICJpbnNwZWN0U291cmNlIiwgIm5vb3AiLCAiZW1wdHkiLCAiY29uc3RydWN0IiwgImNvbnN0cnVjdG9yUmVnRXhwIiwgIklOQ09SUkVDVF9UT19TVFJJTkciLCAiaXNDb25zdHJ1Y3Rvck1vZGVybiIsICJpc0NvbnN0cnVjdG9yTGVnYWN5IiwgImlzQ29uc3RydWN0b3IiLCAiY2FsbGVkIiwgImNyZWF0ZVByb3BlcnR5IiwgInByb3BlcnR5S2V5IiwgImdldEl0ZXJhdG9yTWV0aG9kIiwgImdldEl0ZXJhdG9yIiwgInVzaW5nSXRlcmF0b3IiLCAiaXRlcmF0b3JNZXRob2QiLCAiY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyIsICIkQXJyYXkiLCAiU0FGRV9DTE9TSU5HIiwgIml0ZXJhdG9yV2l0aFJldHVybiIsICJyZXR1cm4iLCAiZnJvbSIsICJhcnJheUxpa2UiLCAiSVNfQ09OU1RSVUNUT1IiLCAibWFwZm4iLCAibWFwcGluZyIsICJzdGVwIiwgImNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiIsICJTS0lQX0NMT1NJTkciLCAiSVRFUkFUSU9OX1NVUFBPUlQiLCAiaXRlcmFibGUiLCAiQVJSQVlfSVRFUkFUT1IiLCAiZGVmaW5lSXRlcmF0b3IkMSIsICJBcmd1bWVudHMiLCAiZ2V0SXRlcmF0b3JNZXRob2RfMSIsICJET01JdGVyYWJsZXMiLCAiQ1NTUnVsZUxpc3QiLCAiQ1NTU3R5bGVEZWNsYXJhdGlvbiIsICJDU1NWYWx1ZUxpc3QiLCAiQ2xpZW50UmVjdExpc3QiLCAiRE9NUmVjdExpc3QiLCAiRE9NU3RyaW5nTGlzdCIsICJET01Ub2tlbkxpc3QiLCAiRGF0YVRyYW5zZmVySXRlbUxpc3QiLCAiRmlsZUxpc3QiLCAiSFRNTEFsbENvbGxlY3Rpb24iLCAiSFRNTENvbGxlY3Rpb24iLCAiSFRNTEZvcm1FbGVtZW50IiwgIkhUTUxTZWxlY3RFbGVtZW50IiwgIk1lZGlhTGlzdCIsICJNaW1lVHlwZUFycmF5IiwgIk5hbWVkTm9kZU1hcCIsICJOb2RlTGlzdCIsICJQYWludFJlcXVlc3RMaXN0IiwgIlBsdWdpbiIsICJQbHVnaW5BcnJheSIsICJTVkdMZW5ndGhMaXN0IiwgIlNWR051bWJlckxpc3QiLCAiU1ZHUGF0aFNlZ0xpc3QiLCAiU1ZHUG9pbnRMaXN0IiwgIlNWR1N0cmluZ0xpc3QiLCAiU1ZHVHJhbnNmb3JtTGlzdCIsICJTb3VyY2VCdWZmZXJMaXN0IiwgIlN0eWxlU2hlZXRMaXN0IiwgIlRleHRUcmFja0N1ZUxpc3QiLCAiVGV4dFRyYWNrTGlzdCIsICJUb3VjaExpc3QiLCAiQ09MTEVDVElPTl9OQU1FIiwgIkNvbGxlY3Rpb24iLCAiQ29sbGVjdGlvblByb3RvdHlwZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiaW5zdGFuY2UiLCAiQ29uc3RydWN0b3IiLCAiJCRLIiwgImRlc2MiLCAiaXNBcnJheSIsICJkb2VzTm90RXhjZWVkU2FmZUludGVnZXIiLCAiU1BFQ0lFUyIsICJhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciIsICJvcmlnaW5hbEFycmF5IiwgImFycmF5U3BlY2llc0NyZWF0ZSIsICJhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0IiwgIk1FVEhPRF9OQU1FIiwgImFycmF5IiwgImZvbyIsICJCb29sZWFuIiwgIklTX0NPTkNBVF9TUFJFQURBQkxFIiwgIklTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQiLCAiaXNDb25jYXRTcHJlYWRhYmxlIiwgInNwcmVhZGFibGUiLCAiYXJnIiwgImsiLCAiRSIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImdldE93blByb3BlcnR5TmFtZXMiLCAiYXJyYXlTbGljZVNpbXBsZSIsICJzdGFydCIsICJlbmQiLCAiZmluIiwgIiRnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgIndpbmRvd05hbWVzIiwgIm9iamVjdEdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCIsICJkZWZpbmVCdWlsdEluQWNjZXNzb3IiLCAid2VsbEtub3duU3ltYm9sV3JhcHBlZCIsICJ3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlIiwgIndlbGxLbm93blN5bWJvbERlZmluZSIsICJzeW1ib2xEZWZpbmVUb1ByaW1pdGl2ZSIsICJTeW1ib2xQcm90b3R5cGUiLCAiaGludCIsICJJU19NQVAiLCAiSVNfRklMVEVSIiwgIklTX1NPTUUiLCAiSVNfRVZFUlkiLCAiSVNfRklORF9JTkRFWCIsICJJU19GSUxURVJfUkVKRUNUIiwgIk5PX0hPTEVTIiwgImNhbGxiYWNrZm4iLCAic3BlY2lmaWNDcmVhdGUiLCAiYXJyYXlJdGVyYXRpb24iLCAibWFwIiwgImZpbHRlciIsICJzb21lIiwgImV2ZXJ5IiwgImZpbmQiLCAiZmluZEluZGV4IiwgImZpbHRlclJlamVjdCIsICIkdG9TdHJpbmciLCAicmVxdWlyZSQkMTQiLCAibmF0aXZlT2JqZWN0Q3JlYXRlIiwgInJlcXVpcmUkJDE1IiwgInJlcXVpcmUkJDE2IiwgImdldE93blByb3BlcnR5TmFtZXNNb2R1bGUiLCAicmVxdWlyZSQkMTciLCAiZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsIiwgInJlcXVpcmUkJDE4IiwgInJlcXVpcmUkJDE5IiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSIsICJyZXF1aXJlJCQyMCIsICJyZXF1aXJlJCQyMSIsICJyZXF1aXJlJCQyMiIsICJyZXF1aXJlJCQyMyIsICJyZXF1aXJlJCQyNCIsICJyZXF1aXJlJCQyNSIsICJyZXF1aXJlJCQyNiIsICJyZXF1aXJlJCQyOCIsICJyZXF1aXJlJCQyOSIsICJyZXF1aXJlJCQzMCIsICJyZXF1aXJlJCQzMSIsICJkZWZpbmVXZWxsS25vd25TeW1ib2wiLCAicmVxdWlyZSQkMzIiLCAiZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUiLCAicmVxdWlyZSQkMzMiLCAicmVxdWlyZSQkMzQiLCAicmVxdWlyZSQkMzUiLCAiJGZvckVhY2giLCAicmVxdWlyZSQkMzYiLCAiSElEREVOIiwgInJlcXVpcmUkJDI3IiwgIlNZTUJPTCIsICJSYW5nZUVycm9yIiwgIlFPYmplY3QiLCAibmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIm5hdGl2ZURlZmluZVByb3BlcnR5IiwgIm5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMiLCAibmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUiLCAiQWxsU3ltYm9scyIsICJPYmplY3RQcm90b3R5cGVTeW1ib2xzIiwgIlVTRV9TRVRURVIiLCAiZmluZENoaWxkIiwgImZhbGxiYWNrRGVmaW5lUHJvcGVydHkiLCAiT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciIsICJzZXRTeW1ib2xEZXNjcmlwdG9yIiwgImRlc2NyaXB0aW9uIiwgIiRkZWZpbmVQcm9wZXJ0aWVzIiwgInByb3BlcnRpZXMiLCAiJGdldE93blByb3BlcnR5U3ltYm9scyIsICJJU19PQkpFQ1RfUFJPVE9UWVBFIiwgIiQkSSIsICIkZm9yRWFjaCQxIiwgInVzZVNldHRlciIsICJ1c2VTaW1wbGUiLCAic3ltYm9sUmVnaXN0cnlEZXRlY3Rpb24iLCAia2V5Rm9yIiwgIk5BVElWRV9TWU1CT0xfUkVHSVNUUlkiLCAiU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSIsICJTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5IiwgImZvciIsICJzeW0iLCAiZ2V0UmVwbGFjZXJGdW5jdGlvbiIsICJyZXBsYWNlciIsICJyYXdMZW5ndGgiLCAiZWxlbWVudCIsICJrZXlzTGVuZ3RoIiwgInJvb3QiLCAiJHN0cmluZ2lmeSIsICJudW1iZXJUb1N0cmluZyIsICJ0ZXN0ZXIiLCAibG93IiwgImhpIiwgIldST05HX1NZTUJPTFNfQ09OVkVSU0lPTiIsICJJTExfRk9STUVEX1VOSUNPREUiLCAic3RyaW5naWZ5V2l0aFN5bWJvbHNGaXgiLCAiJHJlcGxhY2VyIiwgImZpeElsbEZvcm1lZCIsICJvZmZzZXQiLCAicHJldiIsICJzdHJpbmdpZnkiLCAic3BhY2UiLCAiSlNPTiIsICJNRVRBREFUQSIsICJ0aGlzU3ltYm9sVmFsdWUiLCAic3ltYm9sSXNSZWdpc3RlcmVkIiwgImlzUmVnaXN0ZXJlZFN5bWJvbCIsICIkaXNXZWxsS25vd25TeW1ib2wiLCAiaXNXZWxsS25vd25TeW1ib2wiLCAic3ltYm9sS2V5cyIsICJzeW1ib2xLZXlzTGVuZ3RoIiwgInN5bWJvbEtleSIsICJzeW1ib2xJc1dlbGxLbm93biIsICJpc1JlZ2lzdGVyZWQiLCAiaXNXZWxsS25vd24iLCAiX3R5cGVvZiIsICJvIiwgIl9TeW1ib2wiLCAiX1N5bWJvbCRpdGVyYXRvciIsICJfdG9Qcm9wZXJ0eUtleSIsICJwcmltIiwgIl9TeW1ib2wkdG9QcmltaXRpdmUiLCAicmVzIiwgIk51bWJlciIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfT2JqZWN0JGRlZmluZVByb3BlcnR5IiwgIl9jcmVhdGVDbGFzcyIsICJwcm90b1Byb3BzIiwgInN0YXRpY1Byb3BzIiwgImFycmF5U2V0TGVuZ3RoIiwgInNldEFycmF5TGVuZ3RoIiwgInByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCIsICJpdGVtIiwgImFyZ0NvdW50IiwgIm5hdGl2ZVNsaWNlIiwgIkhBU19TUEVDSUVTX1NVUFBPUlQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiYXJyIiwgImFycjIiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIm1pbkxlbiIsICJfY29udGV4dCIsICJhcnJheUxpa2VUb0FycmF5IiwgIl9zbGljZUluc3RhbmNlUHJvcGVydHkiLCAiX0FycmF5JGZyb20iLCAiX3NsaWNlZFRvQXJyYXkiLCAiX0FycmF5JGlzQXJyYXkiLCAibCIsICJfZ2V0SXRlcmF0b3JNZXRob2QiLCAiZSIsICJ1IiwgIl9wdXNoSW5zdGFuY2VQcm9wZXJ0eSIsICJ1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJub25JdGVyYWJsZVJlc3QiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIml0ZXIiLCAibm9uSXRlcmFibGVTcHJlYWQiLCAib3duS2V5cyIsICIkbWFwIiwgIm5hdGl2ZUtleXMiLCAiJERhdGUiLCAiRGF0ZSIsICJ0aGlzVGltZVZhbHVlIiwgImdldFRpbWUiLCAiJCR1IiwgIm5vdyIsICJhcnJheU1ldGhvZElzU3RyaWN0IiwgImFycmF5Rm9yRWFjaCIsICJuYXRpdmVSZXZlcnNlIiwgInJldmVyc2UiLCAiJCRzIiwgImRlbGV0ZVByb3BlcnR5T3JUaHJvdyIsICJkZWxldGVDb3VudCIsICJpbnNlcnRDb3VudCIsICJhY3R1YWxEZWxldGVDb3VudCIsICJ0byIsICJhY3R1YWxTdGFydCIsICIkaW5jbHVkZXMiLCAiTUFUQ0giLCAiaXNSZWdFeHAiLCAibm90QVJlZ0V4cCIsICJjb3JyZWN0SXNSZWdFeHBMb2dpYyIsICJyZWdleHAiLCAiZXJyb3IxIiwgImVycm9yMiIsICJzdHJpbmdJbmRleE9mIiwgInNlYXJjaFN0cmluZyIsICJhcnJheU1ldGhvZCIsICJzdHJpbmdNZXRob2QiLCAiU3RyaW5nUHJvdG90eXBlIiwgIm5hdGl2ZUdldFByb3RvdHlwZU9mIiwgIiRmaWx0ZXIiLCAid2hpdGVzcGFjZXMiLCAibHRyaW0iLCAiUmVnRXhwIiwgInJ0cmltIiwgInN0cmluZ1RyaW0iLCAidHJpbSIsICIkcGFyc2VJbnQiLCAicGFyc2VJbnQiLCAiaGV4IiwgIm51bWJlclBhcnNlSW50IiwgInJhZGl4IiwgIiRpbmRleE9mIiwgIm5hdGl2ZUluZGV4T2YiLCAiTkVHQVRJVkVfWkVSTyIsICJzZWFyY2hFbGVtZW50IiwgIkQiLCAiZW5naW5lSXNCdW4iLCAiQnVuIiwgIkVOR0lORV9JU19CVU4iLCAiVVNFUl9BR0VOVCIsICJ2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCIsICJwYXNzZWQiLCAicmVxdWlyZWQiLCAiV1JBUCIsICJzY2hlZHVsZXJzRml4IiwgInNjaGVkdWxlciIsICJoYXNUaW1lQXJnIiwgImZpcnN0UGFyYW1JbmRleCIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYm91bmRBcmdzIiwgInBhcmFtcyIsICJjYWxsYmFjayIsICJzZXRJbnRlcnZhbCIsICJzZXRUaW1lb3V0IiwgImZpbGwiLCAiZW5kUG9zIiwgIl9leHRlbmRzIiwgIl9pbmhlcml0c0xvb3NlIiwgInN1YkNsYXNzIiwgInN1cGVyQ2xhc3MiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJSZWZlcmVuY2VFcnJvciIsICJvdXRwdXQiLCAibmV4dEtleSIsICJ3aW4iLCAiYXNzaWduJDEiLCAiVkVORE9SX1BSRUZJWEVTIiwgIlRFU1RfRUxFTUVOVCIsICJyb3VuZCIsICJhYnMiLCAicHJlZml4ZWQiLCAicHJvcGVydHkiLCAicHJlZml4IiwgInByb3AiLCAiY2FtZWxQcm9wIiwgInRvVXBwZXJDYXNlIiwgIlBSRUZJWEVEX1RPVUNIX0FDVElPTiIsICJOQVRJVkVfVE9VQ0hfQUNUSU9OIiwgIlRPVUNIX0FDVElPTl9DT01QVVRFIiwgIlRPVUNIX0FDVElPTl9BVVRPIiwgIlRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04iLCAiVE9VQ0hfQUNUSU9OX05PTkUiLCAiVE9VQ0hfQUNUSU9OX1BBTl9YIiwgIlRPVUNIX0FDVElPTl9QQU5fWSIsICJUT1VDSF9BQ1RJT05fTUFQIiwgInRvdWNoTWFwIiwgImNzc1N1cHBvcnRzIiwgIkNTUyIsICJzdXBwb3J0cyIsICJnZXRUb3VjaEFjdGlvblByb3BzIiwgIlNVUFBPUlRfVE9VQ0giLCAiU1VQUE9SVF9QT0lOVEVSX0VWRU5UUyIsICJTVVBQT1JUX09OTFlfVE9VQ0giLCAiSU5QVVRfVFlQRV9UT1VDSCIsICJJTlBVVF9UWVBFX01PVVNFIiwgIkNPTVBVVEVfSU5URVJWQUwiLCAiSU5QVVRfU1RBUlQiLCAiSU5QVVRfRU5EIiwgIklOUFVUX0NBTkNFTCIsICJESVJFQ1RJT05fTk9ORSIsICJESVJFQ1RJT05fTEVGVCIsICJESVJFQ1RJT05fUklHSFQiLCAiRElSRUNUSU9OX1VQIiwgIkRJUkVDVElPTl9ET1dOIiwgIkRJUkVDVElPTl9IT1JJWk9OVEFMIiwgIkRJUkVDVElPTl9WRVJUSUNBTCIsICJESVJFQ1RJT05fQUxMIiwgIlBST1BTX1hZIiwgIlBST1BTX0NMSUVOVF9YWSIsICJlYWNoIiwgImNvbnRleHQiLCAiYm9vbE9yRm4iLCAiaW5TdHIiLCAic3RyIiwgIlRvdWNoQWN0aW9uIiwgIm1hbmFnZXIiLCAiX3Byb3RvIiwgImNvbXB1dGUiLCAiYWN0aW9ucyIsICJ1cGRhdGUiLCAidG91Y2hBY3Rpb24iLCAicmVjb2duaXplcnMiLCAicmVjb2duaXplciIsICJlbmFibGUiLCAiZ2V0VG91Y2hBY3Rpb24iLCAiaGFzUGFuWCIsICJoYXNQYW5ZIiwgInByZXZlbnREZWZhdWx0cyIsICJzcmNFdmVudCIsICJkaXJlY3Rpb24iLCAib2Zmc2V0RGlyZWN0aW9uIiwgInNlc3Npb24iLCAicHJldmVudGVkIiwgInByZXZlbnREZWZhdWx0IiwgImhhc05vbmUiLCAiaXNUYXBQb2ludGVyIiwgInBvaW50ZXJzIiwgImlzVGFwTW92ZW1lbnQiLCAiZGlzdGFuY2UiLCAiaXNUYXBUb3VjaFRpbWUiLCAiZGVsdGFUaW1lIiwgInByZXZlbnRTcmMiLCAiaGFzUGFyZW50IiwgIm5vZGUiLCAicGFyZW50Tm9kZSIsICJnZXRDZW50ZXIiLCAicG9pbnRlcnNMZW5ndGgiLCAiY2xpZW50WCIsICJjbGllbnRZIiwgInNpbXBsZUNsb25lSW5wdXREYXRhIiwgInRpbWVTdGFtcCIsICJjZW50ZXIiLCAiZGVsdGFYIiwgImRlbHRhWSIsICJnZXREaXN0YW5jZSIsICJwMSIsICJwMiIsICJnZXRBbmdsZSIsICJhdGFuMiIsICJnZXREaXJlY3Rpb24iLCAiZ2V0VmVsb2NpdHkiLCAiY29tcHV0ZUlucHV0RGF0YSIsICJmaXJzdElucHV0IiwgImZpcnN0TXVsdGlwbGUiLCAib2Zmc2V0Q2VudGVyIiwgImFuZ2xlIiwgIm9mZnNldERlbHRhIiwgInByZXZEZWx0YSIsICJwcmV2SW5wdXQiLCAiZXZlbnRUeXBlIiwgIm92ZXJhbGxWZWxvY2l0eSIsICJvdmVyYWxsVmVsb2NpdHlYIiwgIm92ZXJhbGxWZWxvY2l0eVkiLCAic2NhbGUiLCAicm90YXRpb24iLCAibWF4UG9pbnRlcnMiLCAidmVsb2NpdHkiLCAidmVsb2NpdHlYIiwgInZlbG9jaXR5WSIsICJsYXN0IiwgImxhc3RJbnRlcnZhbCIsICJ2IiwgInNyY0V2ZW50VGFyZ2V0IiwgImNvbXBvc2VkUGF0aCIsICJpbnB1dEhhbmRsZXIiLCAicG9pbnRlcnNMZW4iLCAiY2hhbmdlZFBvaW50ZXJzTGVuIiwgImNoYW5nZWRQb2ludGVycyIsICJpc0ZpcnN0IiwgImlzRmluYWwiLCAicmVjb2duaXplIiwgInNwbGl0U3RyIiwgImFkZEV2ZW50TGlzdGVuZXJzIiwgInR5cGVzIiwgInJlbW92ZUV2ZW50TGlzdGVuZXJzIiwgImdldFdpbmRvd0ZvckVsZW1lbnQiLCAiZG9jIiwgIm93bmVyRG9jdW1lbnQiLCAiZGVmYXVsdFZpZXciLCAiSW5wdXQiLCAiaW5wdXRUYXJnZXQiLCAiZG9tSGFuZGxlciIsICJldiIsICJpbml0IiwgImV2RWwiLCAiZXZUYXJnZXQiLCAiZXZXaW4iLCAiZGVzdHJveSIsICJpbkFycmF5IiwgImZpbmRCeUtleSIsICJQT0lOVEVSX0lOUFVUX01BUCIsICJwb2ludGVyZG93biIsICJwb2ludGVybW92ZSIsICJwb2ludGVydXAiLCAicG9pbnRlcmNhbmNlbCIsICJwb2ludGVyb3V0IiwgIklFMTBfUE9JTlRFUl9UWVBFX0VOVU0iLCAiUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyIsICJQT0lOVEVSX1dJTkRPV19FVkVOVFMiLCAiTVNQb2ludGVyRXZlbnQiLCAiUG9pbnRlckV2ZW50IiwgIlBvaW50ZXJFdmVudElucHV0IiwgIl9JbnB1dCIsICJfdGhpcyIsICJwb2ludGVyRXZlbnRzIiwgInJlbW92ZVBvaW50ZXIiLCAiZXZlbnRUeXBlTm9ybWFsaXplZCIsICJwb2ludGVyVHlwZSIsICJpc1RvdWNoIiwgInN0b3JlSW5kZXgiLCAicG9pbnRlcklkIiwgImJ1dHRvbiIsICJ0b0FycmF5IiwgInVuaXF1ZUFycmF5IiwgInNvcnQiLCAicmVzdWx0cyIsICJUT1VDSF9JTlBVVF9NQVAiLCAidG91Y2hzdGFydCIsICJ0b3VjaG1vdmUiLCAidG91Y2hlbmQiLCAidG91Y2hjYW5jZWwiLCAiVG91Y2hJbnB1dCIsICJ0YXJnZXRJZHMiLCAidG91Y2hlcyIsICJnZXRUb3VjaGVzIiwgInRhcmdldFRvdWNoZXMiLCAiYWxsVG91Y2hlcyIsICJpZGVudGlmaWVyIiwgImNoYW5nZWRUb3VjaGVzIiwgImNoYW5nZWRUYXJnZXRUb3VjaGVzIiwgInRvdWNoIiwgIk1PVVNFX0lOUFVUX01BUCIsICJtb3VzZWRvd24iLCAibW91c2Vtb3ZlIiwgIm1vdXNldXAiLCAiTW91c2VJbnB1dCIsICJwcmVzc2VkIiwgIndoaWNoIiwgIkRFRFVQX1RJTUVPVVQiLCAic2V0TGFzdFRvdWNoIiwgImV2ZW50RGF0YSIsICJwcmltYXJ5VG91Y2giLCAibGFzdFRvdWNoIiwgImx0cyIsICJsYXN0VG91Y2hlcyIsICJyZWNvcmRUb3VjaGVzIiwgImlzU3ludGhldGljRXZlbnQiLCAiVG91Y2hNb3VzZUlucHV0IiwgIl9tYW5hZ2VyIiwgImlucHV0RXZlbnQiLCAiaW5wdXREYXRhIiwgImlzTW91c2UiLCAic291cmNlQ2FwYWJpbGl0aWVzIiwgImZpcmVzVG91Y2hFdmVudHMiLCAibW91c2UiLCAiaW52b2tlQXJyYXlBcmciLCAiU1RBVEVfRkFJTEVEIiwgIl91bmlxdWVJZCIsICJnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyIiwgIm90aGVyUmVjb2duaXplciIsICJzdGF0ZVN0ciIsICJSZWNvZ25pemVyIiwgInNpbXVsdGFuZW91cyIsICJyZXF1aXJlRmFpbCIsICJyZWNvZ25pemVXaXRoIiwgImRyb3BSZWNvZ25pemVXaXRoIiwgInJlcXVpcmVGYWlsdXJlIiwgImRyb3BSZXF1aXJlRmFpbHVyZSIsICJoYXNSZXF1aXJlRmFpbHVyZXMiLCAiY2FuUmVjb2duaXplV2l0aCIsICJhZGRpdGlvbmFsRXZlbnQiLCAidHJ5RW1pdCIsICJjYW5FbWl0IiwgImlucHV0RGF0YUNsb25lIiwgInJlc2V0IiwgIlRhcFJlY29nbml6ZXIiLCAiX1JlY29nbml6ZXIiLCAidGFwcyIsICJpbnRlcnZhbCIsICJ0aW1lIiwgInRocmVzaG9sZCIsICJwb3NUaHJlc2hvbGQiLCAicFRpbWUiLCAicENlbnRlciIsICJfdGltZXIiLCAiX2lucHV0IiwgImNvdW50IiwgIl90aGlzMiIsICJ2YWxpZFBvaW50ZXJzIiwgInZhbGlkTW92ZW1lbnQiLCAidmFsaWRUb3VjaFRpbWUiLCAiZmFpbFRpbWVvdXQiLCAidmFsaWRJbnRlcnZhbCIsICJ2YWxpZE11bHRpVGFwIiwgIl90aGlzMyIsICJjbGVhclRpbWVvdXQiLCAidGFwQ291bnQiLCAiQXR0clJlY29nbml6ZXIiLCAiYXR0clRlc3QiLCAib3B0aW9uUG9pbnRlcnMiLCAiaXNSZWNvZ25pemVkIiwgImlzVmFsaWQiLCAiZGlyZWN0aW9uU3RyIiwgIlBhblJlY29nbml6ZXIiLCAiX0F0dHJSZWNvZ25pemVyIiwgInBYIiwgInBZIiwgImRpcmVjdGlvblRlc3QiLCAiaGFzTW92ZWQiLCAiU3dpcGVSZWNvZ25pemVyIiwgIlBpbmNoUmVjb2duaXplciIsICJpbk91dCIsICJSb3RhdGVSZWNvZ25pemVyIiwgIlByZXNzUmVjb2duaXplciIsICJ2YWxpZFRpbWUiLCAiZGVmYXVsdHMiLCAiZG9tRXZlbnRzIiwgImlucHV0Q2xhc3MiLCAiY3NzUHJvcHMiLCAidXNlclNlbGVjdCIsICJ0b3VjaFNlbGVjdCIsICJ0b3VjaENhbGxvdXQiLCAiY29udGVudFpvb21pbmciLCAidXNlckRyYWciLCAidGFwSGlnaGxpZ2h0Q29sb3IiLCAicHJlc2V0IiwgInRvZ2dsZUNzc1Byb3BzIiwgImFkZCIsICJvbGRDc3NQcm9wcyIsICJNYW5hZ2VyIiwgImhhbmRsZXJzIiwgInN0b3AiLCAiZm9yY2UiLCAic3RvcHBlZCIsICJjdXJSZWNvZ25pemVyIiwgImV4aXN0aW5nIiwgInJlbW92ZSIsICJ0YXJnZXRSZWNvZ25pemVyIiwgImV2ZW50cyIsICJnZXN0dXJlRXZlbnQiLCAiY3JlYXRlRXZlbnQiLCAiaW5pdEV2ZW50IiwgImdlc3R1cmUiLCAiZGlzcGF0Y2hFdmVudCIsICJTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQIiwgIlNpbmdsZVRvdWNoSW5wdXQiLCAic3RhcnRlZCIsICJub3JtYWxpemVTaW5nbGVUb3VjaGVzIiwgImNoYW5nZWQiLCAiZGVwcmVjYXRlIiwgIm1lc3NhZ2UiLCAiZGVwcmVjYXRpb25NZXNzYWdlIiwgIkVycm9yIiwgInN0YWNrIiwgImxvZyIsICJjb25zb2xlIiwgIndhcm4iLCAiZXh0ZW5kIiwgImRlc3QiLCAibWVyZ2UiLCAiaW5oZXJpdCIsICJjaGlsZCIsICJiYXNlIiwgImNoaWxkUCIsICJiYXNlUCIsICJfc3VwZXIiLCAiYmluZEZuIiwgIkhhbW1lciIsICJWRVJTSU9OIiwgIklOUFVUX01PVkUiLCAiU1RBVEVfUE9TU0lCTEUiLCAiU1RBVEVfQkVHQU4iLCAiU1RBVEVfQ0hBTkdFRCIsICJTVEFURV9FTkRFRCIsICJTVEFURV9SRUNPR05JWkVEIiwgIlNUQVRFX0NBTkNFTExFRCIsICJUYXAiLCAiUGFuIiwgIlN3aXBlIiwgIlBpbmNoIiwgIlJvdGF0ZSIsICJQcmVzcyIsICJSZWFsSGFtbWVyIiwgImQiLCAicCIsICJwYXJzZURPVCIsICJkb3QiLCAiZ3JhcGgiLCAiZ2V0VG9rZW4iLCAidG9rZW4iLCAic3RyaWN0IiwgInRva2VuVHlwZSIsICJUT0tFTlRZUEUiLCAiSURFTlRJRklFUiIsICJuZXdTeW50YXhFcnJvciIsICJwYXJzZVN0YXRlbWVudHMiLCAiZWRnZSIsICJwYXJzZUdyYXBoIiwgIk5PREVfQVRUUl9NQVBQSU5HIiwgImZvbnRzaXplIiwgImZvbnRjb2xvciIsICJsYWJlbGZvbnRjb2xvciIsICJmb250bmFtZSIsICJjb2xvciIsICJmaWxsY29sb3IiLCAidG9vbHRpcCIsICJsYWJlbHRvb2x0aXAiLCAiRURHRV9BVFRSX01BUFBJTkciLCAiX09iamVjdCRjcmVhdGUiLCAiTlVMTCIsICJERUxJTUlURVIiLCAiVU5LTk9XTiIsICJERUxJTUlURVJTIiwgIm5leHRQcmV2aWV3IiwgImlzQWxwaGFOdW1lcmljIiwgImNoYXJDb2RlIiwgInNldFZhbHVlIiwgInNoaWZ0IiwgImFkZE5vZGUiLCAiZ3JhcGhzIiwgIm5vZGVzIiwgImF0dHIiLCAiZyIsICJfaW5kZXhPZkluc3RhbmNlUHJvcGVydHkiLCAiYWRkRWRnZSIsICJlZGdlcyIsICJjcmVhdGVFZGdlIiwgImVuYWJsZWQiLCAiYXJyb3dzIiwgImlzQ29tbWVudCIsICJjMiIsICJpc05hTiIsICJTeW50YXhFcnJvciIsICJjaG9wIiwgInBhcnNlU3RhdGVtZW50IiwgInN1YmdyYXBoIiwgInBhcnNlU3ViZ3JhcGgiLCAicGFyc2VFZGdlIiwgInBhcnNlQXR0cmlidXRlTGlzdCIsICJzdWJncmFwaHMiLCAibm9mX2F0dHJfbGlzdCIsICJlZGdlU3R5bGVzIiwgImRhc2hlZCIsICJzb2xpZCIsICJkb3R0ZWQiLCAiYXJyb3dUeXBlcyIsICJib3giLCAiY3JvdyIsICJjdXJ2ZSIsICJpY3VydmUiLCAibm9ybWFsIiwgImludiIsICJ0ZWUiLCAidmVlIiwgImF0dHJfbGlzdCIsICJhdHRyX25hbWVzIiwgIl9pbmNsdWRlc0luc3RhbmNlUHJvcGVydHkiLCAiaWR4IiwgImRpciIsICJmcm9tX3R5cGUiLCAidG9fdHlwZSIsICJkaXJfdHlwZSIsICJfc3BsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJpZHhfYXJyb3ciLCAidG1wX2F0dHJfbGlzdCIsICJ0ZXh0IiwgIm1heExlbmd0aCIsICJzdWJzdHIiLCAic2V0UHJvcCIsICJwb3AiLCAiY29udmVydEF0dHIiLCAiY29udmVydGVkIiwgInZpc1Byb3AiLCAiX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5IiwgInZpc1Byb3BJIiwgIkRPVFRvR3JhcGgiLCAiX2NvbnRleHQyIiwgImRvdERhdGEiLCAiZ3JhcGhEYXRhIiwgImRvdE5vZGUiLCAiZ3JhcGhOb2RlIiwgImxhYmVsIiwgImltYWdlIiwgInNoYXBlIiwgIl9jb250ZXh0MyIsICJjb252ZXJ0RWRnZSIsICJkb3RFZGdlIiwgImdyYXBoRWRnZSIsICJfY29udGV4dDQiLCAiYXJyYXkxIiwgImFycmF5MiIsICJfY29udGV4dDUiLCAic3ViRWRnZSIsICJlbGVtMSIsICJlbGVtMiIsICJwYXJzZUdlcGhpIiwgImdlcGhpSlNPTiIsICJvcHRpb25zT2JqIiwgImluaGVyaXRDb2xvciIsICJmaXhlZCIsICJwYXJzZUNvbG9yIiwgImdFZGdlcyIsICJ2RWRnZXMiLCAiX21hcEluc3RhbmNlUHJvcGVydHkiLCAiZ0VkZ2UiLCAidkVkZ2UiLCAiYXR0cmlidXRlcyIsICJ0aXRsZSIsICJnTm9kZSIsICJ2Tm9kZSIsICJiYWNrZ3JvdW5kIiwgImJvcmRlciIsICJoaWdobGlnaHQiLCAiaG92ZXIiLCAiYWRkRGVzY3JpcHRpb24iLCAiYmFjayIsICJjcmVhdGVFZGdlRXJyb3IiLCAiZGVsIiwgImRlbGV0ZUNsdXN0ZXJFcnJvciIsICJlZGdlRGVzY3JpcHRpb24iLCAiZWRpdCIsICJlZGl0Q2x1c3RlckVycm9yIiwgImVkaXRFZGdlIiwgImVkaXRFZGdlRGVzY3JpcHRpb24iLCAiZWRpdE5vZGUiLCAiQ2FjaGVkSW1hZ2UiLCAiTlVNX0lURVJBVElPTlMiLCAiSW1hZ2UiLCAiY2FudmFzIiwgImluaXRpYWxpemVkIiwgIndpZHRoIiwgImhlaWdodCIsICJoMiIsICJoNCIsICJoOCIsICJoMTYiLCAidzIiLCAidzQiLCAidzgiLCAidzE2IiwgImNvb3JkaW5hdGVzIiwgIl9maWxsTWlwTWFwIiwgImdldENvbnRleHQiLCAiZHJhd0ltYWdlIiwgIml0ZXJhdGlvbnMiLCAiZmFjdG9yIiwgImxlZnQiLCAidG9wIiwgIkltYWdlcyIsICJpbWFnZXMiLCAiaW1hZ2VCcm9rZW4iLCAidXJsIiwgImJyb2tlblVybCIsICJpbWFnZVRvTG9hZEJyb2tlblVybE9uIiwgIm9uZXJyb3IiLCAiaW1hZ2VUb1JlZHJhd1dpdGgiLCAiY2FjaGVkSW1hZ2UiLCAiaW1nIiwgIm9ubG9hZCIsICJfZml4SW1hZ2VDb29yZGluYXRlcyIsICJfcmVkcmF3V2l0aEltYWdlIiwgIl90cnlsb2FkQnJva2VuVXJsIiwgImltYWdlVG9DYWNoZSIsICJib2R5IiwgIm9mZnNldFdpZHRoIiwgIm9mZnNldEhlaWdodCIsICJyZW1vdmVDaGlsZCIsICJhcnJheUJ1ZmZlck5vbkV4dGVuc2libGUiLCAiQXJyYXlCdWZmZXIiLCAiYnVmZmVyIiwgImlzRXh0ZW5zaWJsZSIsICJBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUiLCAiJGlzRXh0ZW5zaWJsZSIsICJvYmplY3RJc0V4dGVuc2libGUiLCAiZnJlZXppbmciLCAicHJldmVudEV4dGVuc2lvbnMiLCAiZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlIiwgIkZSRUVaSU5HIiwgIlJFUVVJUkVEIiwgInNldE1ldGFkYXRhIiwgIm9iamVjdElEIiwgIndlYWtEYXRhIiwgIm1ldGEiLCAiaW50ZXJuYWxNZXRhZGF0YU1vZHVsZSIsICJmYXN0S2V5IiwgImdldFdlYWtEYXRhIiwgIm9uRnJlZXplIiwgIlJlc3VsdCIsICJSZXN1bHRQcm90b3R5cGUiLCAiaXRlcmF0ZSIsICJ1bmJvdW5kRnVuY3Rpb24iLCAiaXRlckZuIiwgIkFTX0VOVFJJRVMiLCAiSVNfUkVDT1JEIiwgIklTX0lURVJBVE9SIiwgIklOVEVSUlVQVEVEIiwgImNvbmRpdGlvbiIsICJjYWxsRm4iLCAiYW5JbnN0YW5jZSIsICJJbnRlcm5hbE1ldGFkYXRhTW9kdWxlIiwgImludGVybmFsU3RhdGVHZXR0ZXJGb3IiLCAiY29sbGVjdGlvbiIsICJDT05TVFJVQ1RPUl9OQU1FIiwgIndyYXBwZXIiLCAiY29tbW9uIiwgIklTX1dFQUsiLCAiQURERVIiLCAiTmF0aXZlUHJvdG90eXBlIiwgImV4cG9ydGVkIiwgIklTX0FEREVSIiwgImdldENvbnN0cnVjdG9yIiwgInNldFN0cm9uZyIsICJkZWZpbmVCdWlsdElucyIsICJ1bnNhZmUiLCAic2V0U3BlY2llcyIsICJjb2xsZWN0aW9uU3Ryb25nIiwgImRlZmluZSIsICJwcmV2aW91cyIsICJlbnRyeSIsICJnZXRFbnRyeSIsICJyZW1vdmVkIiwgImNsZWFyIiwgImRlbGV0ZSIsICJJVEVSQVRPUl9OQU1FIiwgImdldEludGVybmFsQ29sbGVjdGlvblN0YXRlIiwgImdldEludGVybmFsSXRlcmF0b3JTdGF0ZSIsICJNYXAiLCAiR3JvdXBzIiwgIl9kZWZhdWx0SW5kZXgiLCAiX2dyb3VwSW5kZXgiLCAiX2RlZmF1bHRHcm91cHMiLCAiZGVmYXVsdE9wdGlvbnMiLCAidXNlRGVmYXVsdEdyb3VwcyIsICJfT2JqZWN0JGFzc2lnbiIsICJvcHRpb25GaWVsZHMiLCAiZ3JvdXBOYW1lIiwgImdyb3VwIiwgIl9ncm91cHMiLCAiX01hcCIsICJfZ3JvdXBOYW1lcyIsICJncm91cG5hbWUiLCAic2hvdWxkQ3JlYXRlIiwgImdsb2JhbElzRmluaXRlIiwgImlzRmluaXRlIiwgIm51bWJlcklzRmluaXRlIiwgIiRzb21lIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCAiJCQ5IiwgIl9kZWZpbmVQcm9wZXJ0eSIsICIkcGFyc2VGbG9hdCIsICJwYXJzZUZsb2F0IiwgIm51bWJlclBhcnNlRmxvYXQiLCAiSW5maW5pdHkiLCAidHJpbW1lZFN0cmluZyIsICJjaG9vc2lmeSIsICJzdWJPcHRpb24iLCAicGlsZSIsICJhbGxvd2VkIiwgImNob3NlbiIsICJ0b3BNb3N0IiwgImNob3NlbkVkZ2UiLCAicG9pbnRJblJlY3QiLCAicm90YXRpb25Qb2ludCIsICJ0bXAiLCAicmlnaHQiLCAiYm90dG9tIiwgImlzVmFsaWRMYWJlbCIsICJnZXRTZWxmUmVmQ29vcmRpbmF0ZXMiLCAiZGlzdGFuY2VUb0JvcmRlciIsICJ0b0JvcmRlckRpc3QiLCAieUZyb21Ob2RlQ2VudGVyIiwgInhGcm9tTm9kZUNlbnRlciIsICJMYWJlbEFjY3VtdWxhdG9yIiwgIm1lYXN1cmVUZXh0IiwgImxpbmVzIiwgIm1vZCIsICJibG9ja3MiLCAidG1wVGV4dCIsICJibG9jayIsICJfdmFsdWVzSW5zdGFuY2VQcm9wZXJ0eSIsICJsaW5lIiwgIl9hZGQiLCAidG1wTGluZXMiLCAidG1wTGluZSIsICJmaXJzdEVtcHR5QmxvY2siLCAidG1wQmxvY2tzIiwgImRldGVybWluZUxpbmVIZWlnaHRzIiwgImRldGVybWluZUxhYmVsU2l6ZSIsICJyZW1vdmVFbXB0eUJsb2NrcyIsICJ0YWdQYXR0ZXJuIiwgIl8iLCAiYWZ0ZXJCb2xkIiwgImFmdGVySXRhbCIsICJhZnRlck1vbm8iLCAiTWFya3VwQWNjdW11bGF0b3IiLCAiYm9sZCIsICJpdGFsIiwgIm1vbm8iLCAic3BhY2luZyIsICJtb2RTdGFjayIsICJtb2ROYW1lIiwgImNoIiwgInRhZ05hbWUiLCAiZW1pdEJsb2NrIiwgInVuc2hpZnQiLCAic2V0VGFnIiwgImFkdmFuY2UiLCAiX3RoaXMkcHJlcGFyZVJlZ0V4cDIiLCAicHJlcGFyZVJlZ0V4cCIsICJyZWdFeHAiLCAibWF0Y2hlZCIsICJuZXh0VGFnIiwgImNoZWNrVGFnIiwgInVuc2V0VGFnIiwgInByZXBhcmVkIiwgIkxhYmVsU3BsaXR0ZXIiLCAic2VsZWN0ZWQiLCAiZ2V0Rm9ybWF0dGluZ1ZhbHVlcyIsICJmaW5hbGl6ZSIsICJmb250IiwgImZvbnRPcHRpb25zIiwgIm5sTGluZXMiLCAibGluZUNvdW50IiwgIm11bHRpIiwgInNwbGl0QmxvY2tzIiwgIm1heFdkdCIsICJzcGxpdFN0cmluZ0ludG9MaW5lcyIsICJhcHBlbmQiLCAibmV3TGluZSIsICJtYXJrdXBTeXN0ZW0iLCAic3lzdGVtIiwgInBhcnNlRW50aXRpZXMiLCAicGFyc2VXUyIsICJwYXJzZVN0YXJ0VGFnIiwgInBhcnNlRW5kVGFnIiwgImJlZ2luYWJsZSIsICJwYXJzZU92ZXJyaWRlIiwgImRlY29kZU1hcmt1cFN5c3RlbSIsICJzcGxpdE1hcmtkb3duQmxvY2tzIiwgInNwbGl0SHRtbEJsb2NrcyIsICJjdXJXaWR0aCIsICJ3b3JkcyIsICJuZXdUZXh0IiwgIm92ZXJNYXhXaWR0aCIsICJhcHBlbmRMYXN0IiwgImdldExvbmdlc3RGaXQiLCAid29yZCIsICJnZXRMb25nZXN0Rml0V29yZCIsICJuZXdXIiwgIm11bHRpRm9udFN0eWxlIiwgIkxhYmVsIiwgImVkZ2VsYWJlbCIsICJwb2ludFRvU2VsZiIsICJiYXNlU2l6ZSIsICJzZXRPcHRpb25zIiwgInlMaW5lIiwgImlzRWRnZUxhYmVsIiwgImVsZW1lbnRPcHRpb25zIiwgImluaXRGb250T3B0aW9ucyIsICJsYWJlbERpcnR5IiwgIm5ld0ZvbnRPcHRpb25zIiwgInBhcnNlRm9udFN0cmluZyIsICJ2YWRqdXN0IiwgImNvbnN0cmFpbldpZHRoIiwgIm1pbldkdCIsICJjb25zdHJhaW5IZWlnaHQiLCAibWluSGd0IiwgInZhbGlnbiIsICJ3aWR0aENvbnN0cmFpbnQiLCAid2lkdGhDb25zdHJhaW50TWF4aW11bSIsICJ3aWR0aENvbnN0cmFpbnRNaW5pbXVtIiwgImhlaWdodENvbnN0cmFpbnQiLCAiaGVpZ2h0Q29uc3RyYWludE1pbmltdW0iLCAiaGVpZ2h0Q29uc3RyYWludFZhbGlnbiIsICJwcm9wYWdhdGVGb250cyIsICJkZWVwRXh0ZW5kIiwgImNvbnN0cmFpbiIsICJjaG9vc2VyIiwgIm1hcmdpbnMiLCAid2lkdGhCaWFzIiwgImhlaWdodEJpYXMiLCAiZHN0UGlsZSIsICJzcmNQaWxlIiwgImFkZEZvbnRUb1BpbGUiLCAicmV0IiwgInRtcFNob3J0aGFuZCIsICJvcHQiLCAibXVsdGlOYW1lIiwgIm9wdGlvbiIsICJtdWx0aUZvbnQiLCAib3B0aW9uTmFtZXMiLCAiZ2V0Rm9udE9wdGlvbiIsICJmb250UGlsZSIsICJhZGRGb250T3B0aW9uc1RvUGlsZSIsICJnZXRCYXNpY09wdGlvbnMiLCAiX2xvb3AiLCAibW9kT3B0aW9ucyIsICJnZXRGb250T3B0aW9ucyIsICJiYXNlbGluZSIsICJ2aWV3Rm9udFNpemUiLCAidmlldyIsICJzY2FsaW5nIiwgImRyYXdUaHJlc2hvbGQiLCAibWF4VmlzaWJsZSIsICJjYWxjdWxhdGVMYWJlbFNpemUiLCAiX2RyYXdCYWNrZ3JvdW5kIiwgIl9kcmF3VGV4dCIsICJmaWxsU3R5bGUiLCAiZ2V0U2l6ZSIsICJmaWxsUmVjdCIsICJfdGhpcyRfc2V0QWxpZ25tZW50MiIsICJfc2V0QWxpZ25tZW50IiwgInRleHRBbGlnbiIsICJsYWJlbEhlaWdodCIsICJhbGlnbiIsICJfdGhpcyRfZ2V0Q29sb3IyIiwgIl9nZXRDb2xvciIsICJzdHJva2VDb2xvciIsICJmb250Q29sb3IiLCAic3Ryb2tlV2lkdGgiLCAibGluZVdpZHRoIiwgInN0cm9rZVN0eWxlIiwgImxpbmVKb2luIiwgInN0cm9rZVRleHQiLCAiZmlsbFRleHQiLCAidGV4dEJhc2VsaW5lIiwgImluaXRpYWxTdHJva2VDb2xvciIsICJvcGFjaXR5IiwgIm92ZXJyaWRlT3BhY2l0eSIsICJfcHJvY2Vzc0xhYmVsIiwgImdldFZhbHVlIiwgImZhY2UiLCAibGFiZWxIaWdobGlnaHRCb2xkIiwgImZvbnRTdHJpbmciLCAic2VsZWN0ZWRTdGF0ZSIsICJob3ZlclN0YXRlIiwgImluVGV4dCIsICJkaWZmZXJlbnRTdGF0ZSIsICJfcHJvY2Vzc0xhYmVsVGV4dCIsICJvdXRPcHRpb25zIiwgImluT3B0aW9ucyIsICJuZXdPcHRpb25zQXJyYXkiLCAiYUNvbnN0cnVjdG9yIiwgIm5hdGl2ZUNvbnN0cnVjdCIsICJORVdfVEFSR0VUX0JVRyIsICJBUkdTX0JVRyIsICJUYXJnZXQiLCAibmV3VGFyZ2V0IiwgIiRhcmdzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJfT2JqZWN0JHNldFByb3RvdHlwZU9mIiwgIl9iaW5kSW5zdGFuY2VQcm9wZXJ0eSIsICJfaW5oZXJpdHMiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2dldFByb3RvdHlwZU9mIiwgIl9PYmplY3QkZ2V0UHJvdG90eXBlT2YiLCAiTm9kZUJhc2UiLCAibGFiZWxNb2R1bGUiLCAibWFyZ2luIiwgInJlZnJlc2hOZWVkZWQiLCAiYm91bmRpbmdCb3giLCAiYWRqdXN0U2l6ZXMiLCAiYm9yZGVyV2lkdGgiLCAicmVzaXplIiwgInNoYWRvdyIsICJzaGFkb3dDb2xvciIsICJzaGFkb3dCbHVyIiwgInNoYWRvd1NpemUiLCAic2hhZG93T2Zmc2V0WCIsICJzaGFkb3dYIiwgInNoYWRvd09mZnNldFkiLCAic2hhZG93WSIsICJib3JkZXJEYXNoZXMiLCAic2V0TGluZURhc2giLCAiZGFzaGVzIiwgInNoYXBlUHJvcGVydGllcyIsICJib3JkZXJDb2xvciIsICJzYXZlIiwgImVuYWJsZUJvcmRlckRhc2hlcyIsICJzdHJva2UiLCAiZGlzYWJsZUJvcmRlckRhc2hlcyIsICJyZXN0b3JlIiwgImVuYWJsZVNoYWRvdyIsICJfZmlsbEluc3RhbmNlUHJvcGVydHkiLCAiZGlzYWJsZVNoYWRvdyIsICJwZXJmb3JtU3Ryb2tlIiwgIl91cGRhdGVCb3VuZGluZ0JveCIsICJ0ZXh0U2l6ZSIsICJnZXRUZXh0U2l6ZSIsICJfY3JlYXRlU3VwZXIiLCAiRGVyaXZlZCIsICJoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9SZWZsZWN0JGNvbnN0cnVjdCIsICJQcm94eSIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIlN1cGVyIiwgIk5ld1RhcmdldCIsICJCb3giLCAiX05vZGVCYXNlIiwgIl9zZXRNYXJnaW5zIiwgIm5lZWRzUmVmcmVzaCIsICJkaW1lbnNpb25zIiwgImdldERpbWVuc2lvbnNGcm9tTGFiZWwiLCAiaW5pdENvbnRleHRGb3JEcmF3IiwgImJvcmRlclJhZGl1cyIsICJwZXJmb3JtRmlsbCIsICJ1cGRhdGVCb3VuZGluZ0JveCIsICJfYWRkQm91bmRpbmdCb3hNYXJnaW4iLCAiQ2lyY2xlSW1hZ2VCYXNlIiwgImxhYmVsT2Zmc2V0IiwgImltYWdlT2JqIiwgImltYWdlT2JqQWx0IiwgInNldEltYWdlcyIsICJzZWxlY3Rpb25fY2hhbmdlZCIsICJpbWFnZVRtcCIsICJpbWdQYWRkaW5nIiwgImltYWdlUGFkZGluZyIsICJvcHRJbWdQYWRkaW5nIiwgInVzZUltYWdlU2l6ZSIsICJyYXRpb193aWR0aCIsICJyYXRpb19oZWlnaHQiLCAiX2dldEltYWdlUGFkZGluZyIsICJnbG9iYWxBbHBoYSIsICJpbnRlcnBvbGF0aW9uIiwgImltZ1Bvc0xlZnQiLCAiaW1nUG9zVG9wIiwgImltZ1dpZHRoIiwgImltZ0hlaWdodCIsICJkcmF3SW1hZ2VBdFBvc2l0aW9uIiwgImxhYmVsRGltZW5zaW9ucyIsICJ5TGFiZWwiLCAiQ2lyY2xlIiwgIl9DaXJjbGVJbWFnZUJhc2UiLCAiZGlhbWV0ZXIiLCAiX2RyYXdSYXdDaXJjbGUiLCAiQ2lyY3VsYXJJbWFnZSIsICJfcmVzaXplSW1hZ2UiLCAic3dpdGNoSW1hZ2VzIiwgImxhYmVsWCIsICJsYWJlbFkiLCAiY29vcmRpbmF0ZU9yaWdpbiIsICJjbGlwIiwgIl9kcmF3SW1hZ2VBdFBvc2l0aW9uIiwgIl9kcmF3SW1hZ2VMYWJlbCIsICJTaGFwZUJhc2UiLCAiX3RoaXMkY3VzdG9tU2l6ZVdpZHRoIiwgIl90aGlzJGN1c3RvbVNpemVIZWlnaCIsICJjdXN0b21TaXplV2lkdGgiLCAiY3VzdG9tU2l6ZUhlaWdodCIsICJzaXplTXVsdGlwbGllciIsICJfbGVuIiwgIl9rZXkiLCAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIiwgImljb24iLCAiY29kZSIsICJkcmF3RXh0ZXJuYWxMYWJlbCIsICJfT2JqZWN0JGtleXMiLCAiX09iamVjdCRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiX2ZpbHRlckluc3RhbmNlUHJvcGVydHkiLCAiX09iamVjdCRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiX29iamVjdFNwcmVhZCIsICJfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCAiX09iamVjdCRkZWZpbmVQcm9wZXJ0aWVzIiwgIkN1c3RvbVNoYXBlIiwgIl9TaGFwZUJhc2UiLCAiY3R4UmVuZGVyZXIiLCAiZHJhd0xhdGVyIiwgImRyYXdOb2RlIiwgIm5vZGVEaW1lbnNpb25zIiwgIl9kaXN0YW5jZVRvQm9yZGVyIiwgIkRhdGFiYXNlIiwgIkRpYW1vbmQiLCAiX2RyYXdTaGFwZSIsICJEb3QiLCAiRWxsaXBzZSIsICJJY29uIiwgImljb25TaXplIiwgIl9pY29uIiwgIndlaWdodCIsICJzaWRlIiwgInVzZUJvcmRlcldpdGhJbWFnZSIsICJuZXV0cmFsYm9yZGVyV2lkdGgiLCAic2VsZWN0aW9uTGluZVdpZHRoIiwgImJvcmRlcldpZHRoU2VsZWN0ZWQiLCAiU3F1YXJlIiwgIkhleGFnb24iLCAiU3RhciIsICJUZXh0IiwgIlRyaWFuZ2xlIiwgIlRyaWFuZ2xlRG93biIsICJOb2RlIiwgImltYWdlbGlzdCIsICJncm91cGxpc3QiLCAiZ2xvYmFsT3B0aW9ucyIsICJicmlkZ2VPYmplY3QiLCAiYmFzZUZvbnRTaXplIiwgInByZWRlZmluZWRQb3NpdGlvbiIsICJjdXJyZW50U2hhcGUiLCAiX2xvY2FsQ29sb3IiLCAiY2hlY2tNYXNzIiwgIl9wYXJzZUludCIsICJfcGFyc2VGbG9hdCIsICJwYXJzZU9wdGlvbnMiLCAiX2xvYWRfaW1hZ2VzIiwgInVwZGF0ZUxhYmVsTW9kdWxlIiwgImNoZWNrT3BhY2l0eSIsICJ1cGRhdGVTaGFwZSIsICJoaWRkZW4iLCAicGh5c2ljcyIsICJsb2FkIiwgImJyb2tlbkltYWdlIiwgInVuc2VsZWN0ZWQiLCAidXBkYXRlR3JvdXBPcHRpb25zIiwgImN1cnJlbnRHcm91cCIsICJ0b3RhbCIsICJjdXN0b21TY2FsaW5nRnVuY3Rpb24iLCAic2l6ZURpZmYiLCAiZm9udERpZmYiLCAidmlzaWJsZSIsICJub2RlSWQiLCAibGFiZWxJZCIsICJvcmlnaW4iLCAicGFyZW50T3B0aW9ucyIsICJuZXdPcHRpb25zIiwgImdyb3VwTGlzdCIsICJncm91cE9iaiIsICJza2lwUHJvcGVydGllcyIsICJfT2JqZWN0JGdldE93blByb3BlcnR5TmFtZXMiLCAic2VsZWN0aXZlTm90RGVlcEV4dGVuZCIsICJhbGxvd0RlbGV0aW9uIiwgImNoZWNrQ29vcmRpbmF0ZU9yaWdpbiIsICJtZXJnZU9wdGlvbnMiLCAicGFyc2VkQ29sb3IiLCAiZmlsbElmRGVmaW5lZCIsICJtYXNzIiwgInN0cklkIiwgIlZBTElEQVRPUl9QUklOVF9TVFlMRSIsICJOb2Rlc0hhbmRsZXIiLCAiZ3JvdXBzIiwgImxheW91dEVuZ2luZSIsICJmdW5jdGlvbnMiLCAiY3JlYXRlTm9kZSIsICJub2Rlc0xpc3RlbmVycyIsICJpdGVtcyIsICJvbGREYXRhIiwgImJvbGRpdGFsIiwgImxldmVsIiwgImJpbmRFdmVudExpc3RlbmVycyIsICJlbWl0dGVyIiwgInJlZnJlc2giLCAiX051bWJlciRpc05hTiIsICJfTnVtYmVyJGlzRmluaXRlIiwgIl9pIiwgIl9PYmplY3Qka2V5czIiLCAiZG9Ob3RFbWl0IiwgIm9sZE5vZGVzRGF0YSIsICJpc0RhdGFWaWV3TGlrZSIsICJEYXRhU2V0IiwgIm1lIiwgImlkcyIsICJnZXRJZHMiLCAibmV3Tm9kZXMiLCAicG9zaXRpb25Jbml0aWFsbHkiLCAiY2hhbmdlZERhdGEiLCAiZGF0YUNoYW5nZWQiLCAiX3NvbWVJbnN0YW5jZVByb3BlcnR5IiwgIm5ld1ZhbHVlIiwgIm9sZFZhbHVlIiwgImNsZWFyUG9zaXRpb25zIiwgImRhdGFBcnJheSIsICJub2RlSW5kaWNlcyIsICJfc3RlcCIsICJkYXRhc2V0IiwgImdldERhdGFTZXQiLCAiX2l0ZXJhdG9yIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgImRzTm9kZSIsICJib2R5Tm9kZSIsICJlcnIiLCAibm9kZUxpc3QiLCAibm9kZU9iaiIsICJ0b0lkIiwgImZyb21JZCIsICJlZGdlTGlzdCIsICJfdGhpczQiLCAiX3NldFRpbWVvdXQiLCAiaXNEYXRhRGVzY3JpcHRvciIsICJyZWNlaXZlciIsICJfZ2V0IiwgIl9SZWZsZWN0JGdldCIsICIkaHlwb3QiLCAiaHlwb3QiLCAiTmFOIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiZGl2IiwgInN1bSIsICJhTGVuIiwgImxhcmciLCAiRW5kUG9pbnQiLCAicG9pbnRzIiwgImFycm93RGF0YSIsICJ4dCIsICJ5dCIsICJfRW5kUG9pbnQiLCAidHJhbnNsYXRlIiwgInJvdGF0ZSIsICJpbWFnZVdpZHRoIiwgImltYWdlSGVpZ2h0IiwgIkFycm93IiwgIl9FbmRQb2ludDIiLCAiX3N1cGVyMiIsICJ0cmFuc2Zvcm0iLCAiZHJhd1BhdGgiLCAiQ3JvdyIsICJDdXJ2ZSIsICJwaSIsICJzdGFydEFuZ2xlIiwgImVuZEFuZ2xlIiwgIkludmVydGVkQ3VydmUiLCAiSW52ZXJ0ZWRUcmlhbmdsZSIsICJCYXIiLCAiVmVlIiwgIkVuZFBvaW50cyIsICJFZGdlQmFzZSIsICJfYm9keSIsICJfbGFiZWxNb2R1bGUiLCAiY29sb3JEaXJ0eSIsICJob3ZlcldpZHRoIiwgInNlbGVjdGlvbldpZHRoIiwgImZyb21Qb2ludCIsICJ0b1BvaW50IiwgIl9zZWxlY3RlZCIsICJfaG92ZXIiLCAidmlhTm9kZSIsICJnZXRWaWFOb2RlIiwgImdldENvbG9yIiwgIl9kcmF3RGFzaGVkTGluZSIsICJfZHJhd0xpbmUiLCAiX2xpbmUiLCAiX3RoaXMkX2dldENpcmNsZURhdGEyIiwgIl9nZXRDaXJjbGVEYXRhIiwgIl9jaXJjbGUiLCAiX2Zyb21Qb2ludCIsICJfdG9Qb2ludCIsICJsaW5lQ2FwIiwgImxpbmVEYXNoT2Zmc2V0IiwgIl90aGlzJF9nZXRDaXJjbGVEYXRhNCIsICJfdGhpcyRfZ2V0Q2lyY2xlRGF0YTYiLCAiX2ZpbmRCb3JkZXJQb3NpdGlvbiIsICJfZmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlIiwgIl90aGlzJF9nZXRDaXJjbGVEYXRhJDIiLCAiaGlnaCIsICJzZWxmUmVmZXJlbmNlIiwgIm5lYXJOb2RlIiwgIm1pZGRsZSIsICJlbmRQb2ludE9mZnNldCIsICJhcnJvd1N0cmlrZXRocm91Z2giLCAiaXRlcmF0aW9uIiwgIl9wb2ludE9uQ2lyY2xlIiwgImRpZmZlcmVuY2UiLCAicG93IiwgImluaGVyaXRzQ29sb3IiLCAiZ3JkIiwgImNyZWF0ZUxpbmVhckdyYWRpZW50IiwgImZyb21Db2xvciIsICJ0b0NvbG9yIiwgImFkZENvbG9yU3RvcCIsICJhbmdsZUZyb20iLCAiYW5nbGVUbyIsICJyZW5kZXJCZWhpbmRUaGVOb2RlIiwgInBvaW50VEZyb20iLCAicG9pbnRUVG8iLCAieDEiLCAieTEiLCAieDMiLCAieTMiLCAiX2dldERpc3RhbmNlVG9FZGdlIiwgIl90aGlzJF9nZXRDaXJjbGVEYXRhOCIsICJweCIsICJweSIsICJhcnJvd1BvaW50IiwgIm5vZGUxIiwgIm5vZGUyIiwgInJldmVyc2VkIiwgInNjYWxlRmFjdG9yIiwgImZyb21BcnJvd1NjYWxlIiwgImZyb21BcnJvd1R5cGUiLCAidG9BcnJvd1NjYWxlIiwgInRvQXJyb3dUeXBlIiwgIm1pZGRsZUFycm93U2NhbGUiLCAibWlkZGxlQXJyb3dUeXBlIiwgInJlbGF0aXZlTGVuZ3RoIiwgIl9NYXRoJGh5cG90IiwgInNtb290aCIsICJwb2ludFQiLCAidmlhIiwgImd1aWRlUG9zIiwgImdldFBvaW50IiwgImhhbGZMZW5ndGgiLCAiZ3VpZGVQb3MxIiwgImd1aWRlUG9zMiIsICJfdGhpcyRfZ2V0Q2lyY2xlRGF0YTEwIiwgImNvcmUiLCAib3JpZ0N0eEF0dHIiLCAiYmFja2dyb3VuZENvbG9yIiwgImJhY2tncm91bmRTaXplIiwgInNldFN0cm9rZURhc2hlZCIsICJiYWNrZ3JvdW5kRGFzaGVzIiwgIkJlemllckVkZ2VCYXNlIiwgIl9FZGdlQmFzZSIsICJfZ2V0VmlhQ29vcmRpbmF0ZXMiLCAibWluRGlzdGFuY2UiLCAibGFzdFgiLCAibGFzdFkiLCAiX2dldERpc3RhbmNlVG9MaW5lIiwgInZpYU5vZGUxIiwgInZpYU5vZGUyIiwgInF1YWRyYXRpY0N1cnZlVG8iLCAiZHJhd0JhY2tncm91bmQiLCAiQmV6aWVyRWRnZUR5bmFtaWMiLCAiX0JlemllckVkZ2VCYXNlIiwgIl9ib3VuZEZ1bmN0aW9uIiwgInBvc2l0aW9uQmV6aWVyTm9kZSIsICJwaHlzaWNzQ2hhbmdlIiwgInNldHVwU3VwcG9ydE5vZGUiLCAiY29ubmVjdCIsICJwYXJlbnRFZGdlSWQiLCAiX2JlemllckN1cnZlIiwgImN4IiwgImN5IiwgImNyIiwgIl9maW5kQm9yZGVyUG9zaXRpb25CZXppZXIiLCAiX2dldERpc3RhbmNlVG9CZXppZXJFZGdlIiwgIkJlemllckVkZ2VTdGF0aWMiLCAic3RlcFgiLCAic3RlcFkiLCAicm91bmRuZXNzIiwgInhWaWEiLCAieVZpYSIsICJteUFuZ2xlIiwgIkN1YmljQmV6aWVyRWRnZUJhc2UiLCAidmlhMSIsICJ2aWEyIiwgInZlYyIsICJDdWJpY0JlemllckVkZ2UiLCAiX0N1YmljQmV6aWVyRWRnZUJhc2UiLCAidmlhTm9kZXMiLCAiZm9yY2VEaXJlY3Rpb24iLCAiX3JlZjIiLCAiX2dldERpc3RhbmNlVG9CZXppZXJFZGdlMiIsICJfcmVmNCIsICJTdHJhaWdodEVkZ2UiLCAiZWRnZVNlZ21lbnRMZW5ndGgiLCAidG9Cb3JkZXJQb2ludCIsICJFZGdlIiwgImJhc2VXaWR0aCIsICJlZGdlVHlwZSIsICJjb25uZWN0ZWQiLCAiYWZmZWN0c0xheW91dCIsICJ1cGRhdGVFZGdlVHlwZSIsICJfc2V0SW50ZXJhY3Rpb25XaWR0aHMiLCAidG9BcnJvdyIsICJmcm9tQXJyb3ciLCAibWlkZGxlQXJyb3ciLCAidG9BcnJvd1NyYyIsICJ0b0Fycm93SW1hZ2VXaWR0aCIsICJ0b0Fycm93SW1hZ2VIZWlnaHQiLCAibWlkZGxlQXJyb3dTcmMiLCAibWlkZGxlQXJyb3dJbWFnZVdpZHRoIiwgIm1pZGRsZUFycm93SW1hZ2VIZWlnaHQiLCAiZnJvbUFycm93U3JjIiwgImZyb21BcnJvd0ltYWdlV2lkdGgiLCAiZnJvbUFycm93SW1hZ2VIZWlnaHQiLCAic2VsZWN0ZWRXaWR0aCIsICJjaGFuZ2VJblR5cGUiLCAiY2xlYW51cCIsICJkaXNjb25uZWN0IiwgImF0dGFjaEVkZ2UiLCAiZGV0YWNoRWRnZSIsICJ3aWR0aERpZmYiLCAiZHJhd0xpbmUiLCAiZHJhd0xhYmVsIiwgImdldEFycm93RGF0YSIsICJkcmF3QXJyb3dIZWFkIiwgIl9nZXRSb3RhdGlvbiIsICJlZGdlSWQiLCAiaXNPdmVybGFwcGluZ1dpdGgiLCAieEZyb20iLCAieUZyb20iLCAieFRvIiwgInlUbyIsICJ4T2JqIiwgInlPYmoiLCAiZ2V0RGlzdGFuY2VUb0VkZ2UiLCAiY29weUZyb21HbG9iYWxzIiwgInNlbGVjdGl2ZURlZXBFeHRlbmQiLCAiX0pTT04kc3RyaW5naWZ5IiwgImlzU3RyaW5nIiwgImNvbG9yc0RlZmluZWQiLCAic2VsZlJlZmVyZW5jZVNpemUiLCAiRWRnZXNIYW5kbGVyIiwgImVkZ2VzTGlzdGVuZXJzIiwgImVkZ2VEYXRhIiwgInNtb290aE9wdGlvbnMiLCAicmVjb25uZWN0RWRnZXMiLCAib2xkRWRnZXNEYXRhIiwgImVkZ2VzRGF0YSIsICJvbGRFZGdlIiwgInNob3dJbnRlcm5hbElkcyIsICJfYWRkTWlzc2luZ0VkZ2VzIiwgIl9yZW1vdmVJbnZhbGlkRWRnZXMiLCAiX3RoaXM1IiwgImVkZ2VzVG9EZWxldGUiLCAidG9Ob2RlIiwgImZyb21Ob2RlIiwgImlzQ2x1c3RlciIsICJhZGRJZHMiLCAiQmFybmVzSHV0U29sdmVyIiwgInBoeXNpY3NCb2R5IiwgImJhcm5lc0h1dFRyZWUiLCAiX3JuZyIsICJBbGVhIiwgInRoZXRhSW52ZXJzZWQiLCAidGhldGEiLCAib3ZlcmxhcEF2b2lkYW5jZUZhY3RvciIsICJhdm9pZE92ZXJsYXAiLCAiZ3Jhdml0YXRpb25hbENvbnN0YW50IiwgInBoeXNpY3NOb2RlSW5kaWNlcyIsICJub2RlQ291bnQiLCAiX2Zvcm1CYXJuZXNIdXRUcmVlIiwgIl9nZXRGb3JjZUNvbnRyaWJ1dGlvbnMiLCAicGFyZW50QnJhbmNoIiwgIl9nZXRGb3JjZUNvbnRyaWJ1dGlvbiIsICJjaGlsZHJlbiIsICJOVyIsICJORSIsICJTVyIsICJTRSIsICJjaGlsZHJlbkNvdW50IiwgImNlbnRlck9mTWFzcyIsICJjYWxjU2l6ZSIsICJfY2FsY3VsYXRlRm9yY2VzIiwgImdyYXZpdHlGb3JjZSIsICJmeCIsICJmeSIsICJmb3JjZXMiLCAibWluWCIsICJtaW5ZIiwgIm1heFgiLCAibWF4WSIsICJyb290U2l6ZSIsICJoYWxmUm9vdFNpemUiLCAiY2VudGVyWCIsICJjZW50ZXJZIiwgInJhbmdlIiwgIm1heFdpZHRoIiwgIl9zcGxpdEJyYW5jaCIsICJfcGxhY2VJblRyZWUiLCAidG90YWxNYXNzIiwgInRvdGFsTWFzc0ludiIsICJiaWdnZXN0U2l6ZSIsICJza2lwTWFzc1VwZGF0ZSIsICJfdXBkYXRlQnJhbmNoTWFzcyIsICJyZWdpb24iLCAiX3BsYWNlSW5SZWdpb24iLCAiY29udGFpbmVkTm9kZSIsICJfaW5zZXJ0UmVnaW9uIiwgImNoaWxkU2l6ZSIsICJfZHJhd0JyYW5jaCIsICJicmFuY2giLCAiUmVwdWxzaW9uU29sdmVyIiwgInJlcHVsc2luZ0ZvcmNlIiwgIm5vZGVEaXN0YW5jZSIsICJIaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXIiLCAidGhlc2VOb2Rlc0Rpc3RhbmNlIiwgIlNwcmluZ1NvbHZlciIsICJlZGdlTGVuZ3RoIiwgIm5vZGUzIiwgImVkZ2VJbmRpY2VzIiwgInBoeXNpY3NFZGdlSW5kaWNlcyIsICJzcHJpbmdMZW5ndGgiLCAiX2NhbGN1bGF0ZVNwcmluZ0ZvcmNlIiwgInNwcmluZ0ZvcmNlIiwgInNwcmluZ0NvbnN0YW50IiwgIkhpZXJhcmNoaWNhbFNwcmluZ1NvbHZlciIsICJzcHJpbmdGeCIsICJzcHJpbmdGeSIsICJ0b3RhbEZ4IiwgInRvdGFsRnkiLCAiY29ycmVjdGlvbkZ4IiwgImNvcnJlY3Rpb25GeSIsICJDZW50cmFsR3Jhdml0eVNvbHZlciIsICJjZW50cmFsR3Jhdml0eSIsICJGb3JjZUF0bGFzMkJhc2VkUmVwdWxzaW9uU29sdmVyIiwgIl9CYXJuZXNIdXRTb2x2ZXIiLCAiZGVncmVlIiwgIkZvcmNlQXRsYXMyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlciIsICJfQ2VudHJhbEdyYXZpdHlTb2x2ZXIiLCAiUGh5c2ljc0VuZ2luZSIsICJ2ZWxvY2l0aWVzIiwgInBoeXNpY3NFbmFibGVkIiwgInNpbXVsYXRpb25JbnRlcnZhbCIsICJyZXF1aXJlc1RpbWVvdXQiLCAicHJldmlvdXNTdGF0ZXMiLCAicmVmZXJlbmNlU3RhdGUiLCAiZnJlZXplQ2FjaGUiLCAicmVuZGVyVGltZXIiLCAiYWRhcHRpdmVUaW1lc3RlcCIsICJhZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZCIsICJhZGFwdGl2ZUNvdW50ZXIiLCAiYWRhcHRpdmVJbnRlcnZhbCIsICJzdGFiaWxpemVkIiwgInN0YXJ0ZWRTdGFiaWxpemF0aW9uIiwgInN0YWJpbGl6YXRpb25JdGVyYXRpb25zIiwgInJlYWR5IiwgImJhcm5lc0h1dCIsICJkYW1waW5nIiwgImZvcmNlQXRsYXMyQmFzZWQiLCAicmVwdWxzaW9uIiwgImhpZXJhcmNoaWNhbFJlcHVsc2lvbiIsICJtYXhWZWxvY2l0eSIsICJtaW5WZWxvY2l0eSIsICJzb2x2ZXIiLCAic3RhYmlsaXphdGlvbiIsICJ1cGRhdGVJbnRlcnZhbCIsICJvbmx5RHluYW1pY0VkZ2VzIiwgImZpdCIsICJ0aW1lc3RlcCIsICJ3aW5kIiwgImxheW91dEZhaWxlZCIsICJpbml0UGh5c2ljcyIsICJzdG9wU2ltdWxhdGlvbiIsICJzdGFydFNpbXVsYXRpb24iLCAidXBkYXRlUGh5c2ljc0RhdGEiLCAibm9kZXNTb2x2ZXIiLCAiZWRnZXNTb2x2ZXIiLCAiZ3Jhdml0eVNvbHZlciIsICJSZXB1bHNpb24iLCAiSGllcmFyY2hpY2FsUmVwdWxzaW9uIiwgIm1vZGVsT3B0aW9ucyIsICJzdGFiaWxpemUiLCAidmlld0Z1bmN0aW9uIiwgInNpbXVsYXRpb25TdGVwIiwgIl9lbWl0U3RhYmlsaXplZCIsICJzdGFydFRpbWUiLCAiX0RhdGUkbm93IiwgInBoeXNpY3NUaWNrIiwgInJ1bkRvdWJsZVNwZWVkIiwgImFtb3VudE9mSXRlcmF0aW9ucyIsICJzb2x2ZSIsICJtb3ZlTm9kZXMiLCAiX2V2YWx1YXRlU3RlcFF1YWxpdHkiLCAiX3N0YXJ0U3RhYmlsaXppbmciLCAicGh5c2ljc1N0ZXAiLCAicmV2ZXJ0IiwgImFkanVzdFRpbWVTdGVwIiwgIm5vZGVJZHMiLCAicG9zaXRpb25zIiwgInZ4IiwgInZ5IiwgInJlZmVyZW5jZSIsICJtYXhOb2RlVmVsb2NpdHkiLCAiYXZlcmFnZU5vZGVWZWxvY2l0eSIsICJub2RlVmVsb2NpdHkiLCAiX3BlcmZvcm1TdGVwIiwgIm0iLCAibWF4ViIsICJjYWxjdWxhdGVDb21wb25lbnRWZWxvY2l0eSIsICJ0YXJnZXRJdGVyYXRpb25zIiwgIl9mcmVlemVOb2RlcyIsICJfc3RhYmlsaXphdGlvbkJhdGNoIiwgInJ1bm5pbmciLCAic2VuZFByb2dyZXNzIiwgIl9maW5hbGl6ZVN0YWJpbGl6YXRpb24iLCAiX3Jlc3RvcmVGcm96ZW5Ob2RlcyIsICJmb3JjZVNpemUiLCAiYXJyb3dTaXplIiwgIkhTVlRvSGV4IiwgImdldFJhbmRvbVZhbHVlcyIsICJybmRzOCIsICJVaW50OEFycmF5IiwgInJuZyIsICJjcnlwdG8iLCAiYnl0ZVRvSGV4IiwgIm5hdGl2ZSIsICJyYW5kb21VVUlEIiwgInY0IiwgImJ1ZiIsICJybmRzIiwgIk5ldHdvcmtVdGlsIiwgImFsbE5vZGVzIiwgInNwZWNpZmljTm9kZXMiLCAiY2xvbmVkT3B0aW9ucyIsICJhbW91bnRPZkNvbm5lY3Rpb25zIiwgIkNsdXN0ZXIiLCAiX05vZGUiLCAiY29udGFpbmVkTm9kZXMiLCAiY29udGFpbmVkRWRnZXMiLCAiY2hpbGRDbHVzdGVySWQiLCAiY2hpbGRDbHVzdGVyIiwgImNsdXN0ZXJFZGdlIiwgInBhcmVudENsdXN0ZXJFZGdlIiwgImNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzIiwgInNyY0lkIiwgImVkZ2VSZXBsYWNlZEJ5SWQiLCAiQ2x1c3RlckVuZ2luZSIsICJjbHVzdGVyZWROb2RlcyIsICJjbHVzdGVyZWRFZGdlcyIsICJodWJzaXplIiwgIl9nZXRIdWJTaXplIiwgIl9jaGVja09wdGlvbnMiLCAibm9kZXNUb0NsdXN0ZXIiLCAiY2x1c3RlckJ5Q29ubmVjdGlvbiIsICJyZWZyZXNoRGF0YSIsICJqb2luQ29uZGl0aW9uIiwgImNoaWxkTm9kZXNPYmoiLCAiY2hpbGRFZGdlc09iaiIsICJfY2x1c3RlciIsICJlZGdlQ291bnQiLCAicmVsZXZhbnRFZGdlQ291bnQiLCAiY2x1c3RlcnMiLCAidXNlZE5vZGVzIiwgImNoZWNrSm9pbkNvbmRpdGlvbiIsICJjbG9uZU9wdGlvbnMiLCAiZ2F0aGVyaW5nU3VjY2Vzc2Z1bCIsICJjaGlsZE5vZGVJZCIsICJfZ2V0Q29ubmVjdGVkSWQiLCAiZm91bmRDbHVzdGVyIiwgImZpbmRDbHVzdGVyRGF0YSIsICJjbHVzdGVyQnlFZGdlQ291bnQiLCAiY2x1c3Rlck5vZGVQcm9wZXJ0aWVzIiwgInBhcmVudE5vZGVJZCIsICJwYXJlbnRDbG9uZWRPcHRpb25zIiwgImNoaWxkQ2xvbmVkT3B0aW9ucyIsICJjaGlsZE5vZGVJRHMiLCAiY2hpbGROb2RlIiwgImNoaWxkTm9kZUtleSIsICJjaGlsZEVkZ2UiLCAiY2x1c3RlckVkZ2VQcm9wZXJ0aWVzIiwgIm90aGVyTm9kZUlkIiwgImNoaWxkS2V5cyIsICJjcmVhdGVFZGdlcyIsICJuZXdFZGdlcyIsICJnZXROZXdFZGdlIiwgImNyZWF0ZWRFZGdlIiwgIm5ld0VkZ2UiLCAibWF0Y2hUb0RpcmVjdGlvbiIsICJtYXRjaEZyb21EaXJlY3Rpb24iLCAiX2NyZWF0ZUNsdXN0ZXJlZEVkZ2UiLCAiX2JhY2t1cEVkZ2VPcHRpb25zIiwgInRtcE5vZGVzVG9SZW1vdmUiLCAiYWxsb3dTaW5nbGVOb2RlQ2x1c3RlciIsICJwcm9jZXNzUHJvcGVydGllcyIsICJjaGlsZE5vZGVzT3B0aW9ucyIsICJjaGlsZEVkZ2VzT3B0aW9ucyIsICJjbHVzdGVySWQiLCAiX2dldENsdXN0ZXJQb3NpdGlvbiIsICJjbHVzdGVyTm9kZSIsICJfY2x1c3RlckVkZ2VzIiwgIm9yaWdpbmFsT3B0aW9ucyIsICJjbHVzdGVyTm9kZUlkIiwgImZpbmROb2RlIiwgInBhcmVudEluZGV4IiwgInBhcmVudENsdXN0ZXJOb2RlSWQiLCAiX29wZW5DaGlsZENsdXN0ZXIiLCAicmVsZWFzZUZ1bmN0aW9uIiwgImNsdXN0ZXJQb3NpdGlvbiIsICJuZXdQb3NpdGlvbnMiLCAiZWRnZXNUb0JlRGVsZXRlZCIsICJvdGhlck5vZGUiLCAidHJhbnNmZXJJZCIsICJ0cmFuc2ZlckVkZ2UiLCAib3RoZXJDbHVzdGVyIiwgIl9yZXN0b3JlRWRnZSIsICJub2Rlc0FycmF5IiwgImNvdW50ZXIiLCAiX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5IiwgImNsdXN0ZXJlZE5vZGVJZCIsICJzdGFydEVkZ2VJZCIsICJhbGxFZGdlSWRzIiwgImdldENsdXN0ZXJlZEVkZ2VzIiwgImNsdXN0ZXJlZEVkZ2VJZCIsICJnZXRCYXNlRWRnZXMiLCAiSWRzVG9IYW5kbGUiLCAiZG9uZUlkcyIsICJmb3VuZElkcyIsICJuZXh0SWQiLCAibmV4dEVkZ2UiLCAicmVwbGFjaW5nSWRzIiwgInJlcGxhY2luZ0lkIiwgImF2ZXJhZ2UiLCAiYXZlcmFnZVNxdWFyZWQiLCAiaHViQ291bnRlciIsICJsYXJnZXN0SHViIiwgInZhcmlhbmNlIiwgInN0YW5kYXJkRGV2aWF0aW9uIiwgImh1YlRocmVzaG9sZCIsICJiYXNlRWRnZSIsICJleHRyYU9wdGlvbnMiLCAiY2hpbGROb2RlcyIsICJjaGlsZEVkZ2VzIiwgIl9jcmVhdGVDbHVzdGVyRWRnZXMiLCAiY2x1c3RlcmVkTm9kZSIsICJkZWxldGVkTm9kZUlkcyIsICJkZWxldGVkRWRnZUlkcyIsICJlYWNoQ2x1c3Rlck5vZGUiLCAiZW5kUG9pbnRzVmFsaWQiLCAicmVwbGFjZWRJZHMiLCAibnVtVmFsaWQiLCAiY29udGFpbmVkRWRnZUlkIiwgImNvbnRhaW5lZEVkZ2UiLCAiZGVsZXRlZEVkZ2VJZCIsICJfZmlsdGVyIiwgInNob3VsZEJlQ2x1c3RlcmVkIiwgIl9pc0NsdXN0ZXJlZE5vZGUiLCAiX2lzQ2x1c3RlcmVkRWRnZSIsICJjbHVzdGVyRnJvbSIsICJfZ2V0Q2x1c3Rlck5vZGVGb3JOb2RlIiwgImNsdXN0ZXJUbyIsICJjb250aW51ZUxvb3AiLCAiX2xvb3AyIiwgImNsdXN0ZXJzVG9PcGVuIiwgIm51bU5vZGVzIiwgImFsbG93U2luZ2xlIiwgIm9wZW5DbHVzdGVyIiwgIl91cGRhdGVTdGF0ZSIsICJDYW52YXNSZW5kZXJlciIsICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAibW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgIndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJtc1JlcXVlc3RBbmltYXRpb25GcmFtZSIsICJyZWRyYXdSZXF1ZXN0ZWQiLCAicmVuZGVyaW5nQWN0aXZlIiwgInJlbmRlclJlcXVlc3RzIiwgImFsbG93UmVkcmF3IiwgImRyYWdnaW5nIiwgInpvb21pbmciLCAiaGlkZUVkZ2VzT25EcmFnIiwgImhpZGVFZGdlc09uWm9vbSIsICJoaWRlTm9kZXNPbkRyYWciLCAiX2RldGVybWluZUJyb3dzZXJNZXRob2QiLCAiem9vbVRpbWVvdXRJZCIsICJfcmVxdWVzdFJlZHJhdyIsICJfcmVzaXplTm9kZXMiLCAiX3JlZHJhdyIsICJfc3RhcnRSZW5kZXJpbmciLCAiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCAiZGVsYXkiLCAidGltZXIiLCAibXlXaW5kb3ciLCAiX3JlcXVlc3ROZXh0RnJhbWUiLCAiX3JlbmRlclN0ZXAiLCAiZHJhd0V4dGVybmFsTGFiZWxzIiwgImZyYW1lIiwgInNldFNpemUiLCAic2V0VHJhbnNmb3JtIiwgImNsaWVudFdpZHRoIiwgImNsaWVudEhlaWdodCIsICJjbGVhclJlY3QiLCAidHJhbnNsYXRpb24iLCAiX2RyYXdFZGdlcyIsICJfZHJhd05vZGVzIiwgIl9kcmF3QXJyb3dzIiwgIl9kcmF3U2VsZWN0aW9uQm94IiwgImFsd2F5c1Nob3ciLCAiaG92ZXJlZCIsICJ0b3BMZWZ0IiwgIkRPTXRvQ2FudmFzIiwgImJvdHRvbVJpZ2h0IiwgInZpZXdhYmxlQXJlYSIsICJpc1NlbGVjdGVkIiwgImlzQm91bmRpbmdCb3hPdmVybGFwcGluZ1dpdGgiLCAic2VsZWN0ZWRMZW5ndGgiLCAiaG92ZXJlZExlbmd0aCIsICJfaTIiLCAiX2RyYXdFeHRlcm5hbExhYmVsczIiLCAiZHJhd0Fycm93cyIsICJicm93c2VyVHlwZSIsICJzZWxlY3Rpb25Cb3giLCAic2hvdyIsICJvblRvdWNoIiwgImhhbW1lciIsICJvblJlbGVhc2UiLCAiQ2FudmFzIiwgInBpeGVsUmF0aW8iLCAiY2FtZXJhU3RhdGUiLCAiY2FudmFzVmlld0NlbnRlciIsICJfY2xlYW51cENhbGxiYWNrcyIsICJhdXRvUmVzaXplIiwgImhhbW1lckZyYW1lIiwgIl9jbGVhblVwIiwgIlJlc2l6ZU9ic2VydmVyIiwgIm9ic2VydmVyIiwgIm9ic2VydmUiLCAidW5vYnNlcnZlIiwgInJlc2l6ZVRpbWVyIiwgIl9zZXRJbnRlcnZhbCIsICJjbGVhckludGVydmFsIiwgInJlc2l6ZUZ1bmN0aW9uIiwgIl9vblJlc2l6ZSIsICJwcmV2aW91c1dpZHRoIiwgInByZXZpb3VzSGVpZ2h0IiwgIndpZHRoUmF0aW8iLCAiaGVpZ2h0UmF0aW8iLCAibmV3U2NhbGUiLCAiY3VycmVudFZpZXdDZW50ZXIiLCAiZGlzdGFuY2VGcm9tQ2VudGVyIiwgImNvbnRhaW5lciIsICJoYXNDaGlsZE5vZGVzIiwgImZpcnN0Q2hpbGQiLCAiY2xhc3NOYW1lIiwgIm92ZXJmbG93IiwgInRhYkluZGV4IiwgIl9zZXRQaXhlbFJhdGlvIiwgIm5vQ2FudmFzIiwgImZvbnRXZWlnaHQiLCAicGFkZGluZyIsICJpbm5lclRleHQiLCAiX2JpbmRIYW1tZXIiLCAiZHJhZyIsICJwaW5jaCIsICJldmVudExpc3RlbmVycyIsICJvblRhcCIsICJvbkRvdWJsZVRhcCIsICJvbkhvbGQiLCAib25EcmFnU3RhcnQiLCAib25EcmFnIiwgIm9uRHJhZ0VuZCIsICJvblBpbmNoIiwgIm9uTW91c2VXaGVlbCIsICJvbk1vdXNlTW92ZSIsICJvbkNvbnRleHQiLCAiX3ByZXBhcmVWYWx1ZSIsICJlbWl0RXZlbnQiLCAib2xkV2lkdGgiLCAib2xkSGVpZ2h0IiwgInByZXZpb3VzUmF0aW8iLCAiX2dldENhbWVyYVN0YXRlIiwgIm5ld1dpZHRoIiwgIm5ld0hlaWdodCIsICJfc2V0Q2FtZXJhU3RhdGUiLCAibnVtZXJhdG9yIiwgImRldmljZVBpeGVsUmF0aW8iLCAid2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyIsICJtb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIiwgIm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyIsICJvQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyIsICJiYWNraW5nU3RvcmVQaXhlbFJhdGlvIiwgIl9kZXRlcm1pbmVQaXhlbFJhdGlvIiwgIl9YY29udmVydENhbnZhc1RvRE9NIiwgIl9ZY29udmVydENhbnZhc1RvRE9NIiwgIl9YY29udmVydERPTXRvQ2FudmFzIiwgIl9ZY29udmVydERPTXRvQ2FudmFzIiwgIlZpZXciLCAiYW5pbWF0aW9uU3BlZWQiLCAicmVuZGVyUmVmcmVzaFJhdGUiLCAiYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb24iLCAiZWFzaW5nVGltZSIsICJzb3VyY2VTY2FsZSIsICJ0YXJnZXRTY2FsZSIsICJzb3VyY2VUcmFuc2xhdGlvbiIsICJ0YXJnZXRUcmFuc2xhdGlvbiIsICJsb2NrZWRPbk5vZGVJZCIsICJsb2NrZWRPbk5vZGVPZmZzZXQiLCAidG91Y2hUaW1lIiwgInJlbGVhc2VOb2RlIiwgImluaXRpYWxab29tIiwgInJhd09wdGlvbnMiLCAiYWxsTm9kZUlkcyIsICJtaW5ab29tTGV2ZWwiLCAiTUlOX1ZBTFVFIiwgIm1heFpvb21MZXZlbCIsICJ6b29tTGV2ZWwiLCAiY2FudmFzV2lkdGgiLCAiY2FudmFzSGVpZ2h0IiwgImdldFJhbmdlIiwgInBvc2l0aW9uRGVmaW5lZCIsICJ4Wm9vbUxldmVsIiwgInlab29tTGV2ZWwiLCAiYW5pbWF0aW9uT3B0aW9ucyIsICJmaW5kQ2VudGVyIiwgImFuaW1hdGlvbiIsICJub2RlUG9zaXRpb24iLCAibG9ja2VkT25Ob2RlIiwgImdldFZpZXdQb3NpdGlvbiIsICJkdXJhdGlvbiIsICJlYXNpbmdGdW5jdGlvbiIsICJhbmltYXRlVmlldyIsICJsb2NrZWQiLCAiX3RyYW5zaXRpb25SZWRyYXciLCAidmlld0NlbnRlciIsICJfbG9ja2VkUmVkcmF3IiwgImZpbmlzaGVkIiwgInByb2dyZXNzIiwgImVhc2luZ0Z1bmN0aW9ucyIsICJrZXljaGFybSIsICJfZXhwb3J0RnVuY3Rpb25zIiwgIl9ib3VuZCIsICJrZXlkb3duIiwgImtleXVwIiwgIl9rZXlzIiwgImZyb21DaGFyQ29kZSIsICJkb3duIiwgImhhbmRsZUV2ZW50IiwgInVwIiwgImtleUNvZGUiLCAiYm91bmQiLCAic2hpZnRLZXkiLCAiYmluZEFsbCIsICJnZXRLZXkiLCAidW5iaW5kIiwgIm5ld0JpbmRpbmdzIiwgIk5hdmlnYXRpb25IYW5kbGVyIiwgImljb25zQ3JlYXRlZCIsICJuYXZpZ2F0aW9uSGFtbWVycyIsICJib3VuZEZ1bmN0aW9ucyIsICJhY3RpdmF0ZWQiLCAiY29uZmlndXJlS2V5Ym9hcmRCaW5kaW5ncyIsICJuYXZpZ2F0aW9uQnV0dG9ucyIsICJsb2FkTmF2aWdhdGlvbkVsZW1lbnRzIiwgImNsZWFuTmF2aWdhdGlvbiIsICJuYXZpZ2F0aW9uRE9NIiwgIm5hdmlnYXRpb25EaXZzIiwgIm5hdmlnYXRpb25EaXZBY3Rpb25zIiwgIl9maXQiLCAiYmluZFRvUmVkcmF3IiwgIl9zdG9wTW92ZW1lbnQiLCAiYWN0aW9uIiwgImJvdW5kQWN0aW9uIiwgImtleWJvYXJkIiwgInNwZWVkIiwgInNjYWxlT2xkIiwgInpvb20iLCAic2NhbGVGcmFjIiwgInR4IiwgInR5IiwgInBvaW50ZXIiLCAiX2NvbnRleHQ2IiwgIl9jb250ZXh0NyIsICJfY29udGV4dDgiLCAiX2NvbnRleHQ5IiwgIl9jb250ZXh0MTAiLCAiX2NvbnRleHQxMSIsICJfY29udGV4dDEyIiwgIl9jb250ZXh0MTMiLCAiX2NvbnRleHQxNCIsICJfY29udGV4dDE1IiwgIl9jb250ZXh0MTYiLCAiX2NvbnRleHQxNyIsICJfY29udGV4dDE4IiwgIl9jb250ZXh0MTkiLCAiX2NvbnRleHQyMCIsICJfY29udGV4dDIxIiwgIl9jb250ZXh0MjIiLCAiX2NvbnRleHQyMyIsICJfY29udGV4dDI0IiwgIl9jb250ZXh0MjUiLCAiX2NvbnRleHQyNiIsICJfY29udGV4dDI3IiwgImJpbmRUb1dpbmRvdyIsICJ1bmJpbmRGcm9tUmVkcmF3IiwgIkludGVyYWN0aW9uSGFuZGxlciIsICJzZWxlY3Rpb25IYW5kbGVyIiwgIm5hdmlnYXRpb25IYW5kbGVyIiwgInBvcHVwIiwgInBvcHVwT2JqIiwgInBvcHVwVGltZXIiLCAiZ2V0UG9pbnRlciIsICJkcmFnTm9kZXMiLCAiZHJhZ1ZpZXciLCAiYXV0b0ZvY3VzIiwgInRvb2x0aXBEZWxheSIsICJ6b29tVmlldyIsICJ6b29tU3BlZWQiLCAiZ2V0QWJzb2x1dGVUb3AiLCAicGluY2hlZCIsICJtdWx0aXNlbGVjdCIsICJjdHJsS2V5IiwgIm1ldGFLZXkiLCAiY2hlY2tTZWxlY3Rpb25DaGFuZ2VzIiwgImNvbW1pdEFuZEVtaXQiLCAiZ2VuZXJhdGVDbGlja0V2ZW50IiwgInNlbGVjdEFkZGl0aW9uYWxPblBvaW50IiwgInNlbGVjdE9uUG9pbnQiLCAiZmlyc3RTZXQiLCAic2Vjb25kU2V0IiwgImFycmF5RGlmZiIsICJmaXJzdEFyciIsICJzZWNvbmRBcnIiLCAiZ2V0Tm9kZUF0IiwgInNlbGVjdGlvbiIsICJzZXRTZWxlY3Rpb24iLCAiZ2V0U2VsZWN0ZWROb2RlcyIsICJ4Rml4ZWQiLCAieUZpeGVkIiwgImRpZmZYIiwgImRpZmZZIiwgInNlbGVjdGlvbkJveFBvc2l0aW9uIiwgInNlbGVjdGlvbkJveFBvc2l0aW9uTWluTWF4IiwgInRvQmVTZWxlY3RlZE5vZGVzIiwgInNlbGVjdE9iamVjdCIsICJwcmVTY2FsZURyYWdQb2ludGVyIiwgInBvc3RTY2FsZURyYWdQb2ludGVyIiwgImNhbnZhc1RvRE9NIiwgInBvcHVwVmlzaWJsZSIsICJfY2hlY2tIaWRlUG9wdXAiLCAic2V0UG9zaXRpb24iLCAiZm9jdXMiLCAiX2NoZWNrU2hvd1BvcHVwIiwgImhvdmVyT2JqZWN0IiwgInBvaW50ZXJPYmoiLCAicHJldmlvdXNQb3B1cE9iaklkIiwgIm5vZGVVbmRlckN1cnNvciIsICJwb3B1cFR5cGUiLCAib3ZlcmxhcHBpbmdOb2RlcyIsICJnZXRUaXRsZSIsICJvdmVybGFwcGluZ0VkZ2VzIiwgIlBvcHVwIiwgInBvcHVwVGFyZ2V0VHlwZSIsICJwb3B1cFRhcmdldElkIiwgInNldFRleHQiLCAiaGlkZSIsICJfcG9pbnRlclRvUG9zaXRpb25PYmplY3QiLCAic3RpbGxPbk9iaiIsICJvdmVyTm9kZSIsICJTZXQiLCAidW5jYXVnaHRGcm96ZW5TdG9yZSIsICJmcm96ZW4iLCAiVW5jYXVnaHRGcm96ZW5TdG9yZSIsICJmaW5kVW5jYXVnaHRGcm96ZW4iLCAiSW50ZXJuYWxXZWFrTWFwIiwgImNvbGxlY3Rpb25XZWFrIiwgImVuZm9yY2VJbnRlcm5hbFN0YXRlIiwgImlzRnJvemVuIiwgImlzU2VhbGVkIiwgImZyZWV6ZSIsICJzZWFsIiwgIkZST1pFTiIsICJTRUFMRUQiLCAiSVNfSUUxMSIsICIkV2Vha01hcCIsICJXZWFrTWFwUHJvdG90eXBlIiwgIm5hdGl2ZVNldCIsICJuYXRpdmVEZWxldGUiLCAibmF0aXZlSGFzIiwgIm5hdGl2ZUdldCIsICJmcm96ZW5BcnJheSIsICJhcnJheUludGVncml0eUxldmVsIiwgImRpZmZTZXRzIiwgImRpZmYiLCAiX1NldCIsICJTaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3IiLCAiX1NpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvcl9wcmV2aW91c1NlbGVjdGlvbiIsICJfU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yX3NlbGVjdGlvbiIsICJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwgIl9pdGVtcyIsICJfbGVuMiIsICJfa2V5MiIsICJfaXRlbXMyIiwgImFkZGVkIiwgImRlbGV0ZWQiLCAiY2hhbmdlcyIsICJnZXRDaGFuZ2VzIiwgIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiLCAiX3N0ZXAyIiwgIl9pdGVyYXRvcjIiLCAic2VsZWN0IiwgIl9zdGVwMyIsICJfaXRlcmF0b3IzIiwgInVuc2VsZWN0IiwgIlNlbGVjdGlvbkFjY3VtdWxhdG9yIiwgImNvbW1pdEhhbmRsZXIiLCAiX1NlbGVjdGlvbkFjY3VtdWxhdG9yX25vZGVzIiwgIl9TZWxlY3Rpb25BY2N1bXVsYXRvcl9lZGdlcyIsICJfU2VsZWN0aW9uQWNjdW11bGF0b3JfY29tbWl0SGFuZGxlciIsICJnZXRTZWxlY3Rpb24iLCAiX2NsYXNzUHJpdmF0ZUZpZWxkR2UiLCAiX2NsYXNzUHJpdmF0ZUZpZWxkR2UyIiwgIl9jbGFzc1ByaXZhdGVGaWVsZEdlMyIsICJzdW1tYXJ5IiwgImNvbW1pdCIsICJfbGVuMyIsICJyZXN0IiwgIl9rZXkzIiwgIl9jb25jYXRJbnN0YW5jZVByb3BlcnR5IiwgIlNlbGVjdGlvbkhhbmRsZXIiLCAiX3NlbGVjdGlvbkFjY3VtdWxhdG9yIiwgImhvdmVyT2JqIiwgInNlbGVjdGFibGUiLCAic2VsZWN0Q29ubmVjdGVkRWRnZXMiLCAiaG92ZXJDb25uZWN0ZWRFZGdlcyIsICJ1cGRhdGVTZWxlY3Rpb24iLCAiZ2V0RWRnZUF0IiwgInVuc2VsZWN0QWxsIiwgInNlbGVjdGlvbkNoYW5nZWQiLCAiZGVzZWxlY3RPYmplY3QiLCAiRE9NIiwgIm9sZFNlbGVjdGlvbiIsICJlbXB0eVNlbGVjdGlvbiIsICJfaW5pdEJhc2VFdmVudCIsICJnZXRDbGlja2VkSXRlbXMiLCAiY29udHJvbEVkZ2UiLCAiaGlnaGxpZ2h0RWRnZXMiLCAiX3RoaXMkX3NlbGVjdGlvbkFjY3VtIiwgImFkZEVkZ2VzIiwgImFkZE5vZGVzIiwgIl9yZW1vdmVGcm9tU2VsZWN0aW9uIiwgImNhbnZhc1BvcyIsICJyZXR1cm5Ob2RlIiwgInBvc2l0aW9uT2JqZWN0IiwgIl9nZXRBbGxOb2Rlc092ZXJsYXBwaW5nV2l0aCIsICJfZ2V0RWRnZXNPdmVybGFwcGluZ1dpdGgiLCAicmV0dXJuRWRnZSIsICJtaW5kaXN0IiwgIm92ZXJsYXBwaW5nRWRnZSIsICJkaXN0IiwgIl90aGlzJF9zZWxlY3Rpb25BY2N1bTIiLCAiZGVsZXRlTm9kZXMiLCAiZGVsZXRlRWRnZXMiLCAic2l6ZU5vZGVzIiwgInNpemVFZGdlcyIsICJfYWRkVG9Ib3ZlciIsICJob3ZlckNoYW5nZWQiLCAiZW1pdEJsdXJFdmVudCIsICJob3ZlcmVkRWRnZXNDb3VudCIsICJob3ZlcmVkTm9kZXNDb3VudCIsICJlbWl0SG92ZXJFdmVudCIsICJfaG92ZXJDb25uZWN0ZWRFZGdlcyIsICJzZWxlY3Rpb25DaGFuZ2VzIiwgInByZXZpb3VzU2VsZWN0aW9uIiwgImdldFNlbGVjdGVkTm9kZUlkcyIsICJnZXRTZWxlY3RlZEVkZ2VJZHMiLCAiZ2V0Tm9kZXMiLCAiZ2V0RWRnZXMiLCAiZ2V0SXRlbXNPblBvaW50IiwgIm1lcmdlU29ydCIsICJjb21wYXJlZm4iLCAiaW5zZXJ0aW9uU29ydCIsICJsbGVuZ3RoIiwgInJsZW5ndGgiLCAibGluZGV4IiwgInJpbmRleCIsICJhcnJheVNvcnQiLCAiZmlyZWZveCIsICJlbmdpbmVGZlZlcnNpb24iLCAiZW5naW5lSXNJZU9yRWRnZSIsICJ3ZWJraXQiLCAiZW5naW5lV2Via2l0VmVyc2lvbiIsICJpbnRlcm5hbFNvcnQiLCAiRkYiLCAiSUVfT1JfRURHRSIsICJWOCIsICJXRUJLSVQiLCAibmF0aXZlU29ydCIsICJGQUlMU19PTl9VTkRFRklORUQiLCAiRkFJTFNfT05fTlVMTCIsICJTVFJJQ1RfTUVUSE9EIiwgIlNUQUJMRV9TT1JUIiwgIml0ZW1zTGVuZ3RoIiwgImFycmF5TGVuZ3RoIiwgIklTX1JJR0hUIiwgIm1lbW8iLCAiYXJyYXlSZWR1Y2UiLCAiZW5naW5lSXNOb2RlIiwgIiRyZWR1Y2UiLCAicmVkdWNlIiwgIkRpcmVjdGlvbkludGVyZmFjZSIsICJhYnN0cmFjdCIsICJmYWtlX3VzZSIsICJub2RlQXJyYXkiLCAiVmVydGljYWxTdHJhdGVneSIsICJfRGlyZWN0aW9uSW50ZXJmYWNlIiwgImxheW91dCIsICJoaWVyYXJjaGljYWwiLCAiYWRkVG9PcmRlcmluZyIsICJnZXRUcmVlU2l6ZSIsICJtaW5feCIsICJtYXhfeCIsICJfc29ydEluc3RhbmNlUHJvcGVydHkiLCAibGV2ZWxTZXBhcmF0aW9uIiwgIkhvcml6b250YWxTdHJhdGVneSIsICJfRGlyZWN0aW9uSW50ZXJmYWNlMiIsICJtaW5feSIsICJtYXhfeSIsICIkZXZlcnkiLCAiZmlsbExldmVsc0J5RGlyZWN0aW9uQ3ljbGljIiwgImxldmVscyIsICJmaWxsTGV2ZWxzQnlEaXJlY3Rpb24iLCAiaXNFbnRyeU5vZGUiLCAic2hvdWxkTGV2ZWxCZVJlcGxhY2VkIiwgImxpbWl0IiwgIl9yZWR1Y2VJbnN0YW5jZVByb3BlcnR5IiwgImFjYyIsICJlZGdlSWRQcm9wIiwgIm5ld0xldmVsRGlmZiIsICJfcmV0IiwgIl9zdGVwJHZhbHVlIiwgImVudHJ5Tm9kZUlkIiwgImVudHJ5Tm9kZSIsICJfcmV0MiIsICJuZXdMZXZlbCIsICJ0YXJnZXROb2RlSWQiLCAib2xkTGV2ZWwiLCAiSGllcmFyY2hpY2FsU3RhdHVzIiwgImNoaWxkcmVuUmVmZXJlbmNlIiwgInBhcmVudFJlZmVyZW5jZSIsICJ0cmVlcyIsICJkaXN0cmlidXRpb25PcmRlcmluZyIsICJkaXN0cmlidXRpb25JbmRleCIsICJpc1RyZWUiLCAidHJlZUluZGV4IiwgInRyZWVJZCIsICJhY2N1bXVsYXRvciIsICJfZ2V0TWF4TGV2ZWwiLCAibm9kZUEiLCAibm9kZUIiLCAibWluTGV2ZWwiLCAicGFyZW50czEiLCAicGFyZW50czIiLCAiaXNQcmVzZW50IiwgImN1ckxldmVsIiwgIkxheW91dEVuZ2luZSIsICJfcmVzZXRSTkciLCAic2V0UGh5c2ljcyIsICJvcHRpb25zQmFja3VwIiwgInJhbmRvbVNlZWQiLCAiaW1wcm92ZWRMYXlvdXQiLCAiY2x1c3RlclRocmVzaG9sZCIsICJub2RlU3BhY2luZyIsICJ0cmVlU3BhY2luZyIsICJibG9ja1NoaWZ0aW5nIiwgImVkZ2VNaW5pbWl6YXRpb24iLCAicGFyZW50Q2VudHJhbGl6YXRpb24iLCAic29ydE1ldGhvZCIsICJzZXR1cEhpZXJhcmNoaWNhbExheW91dCIsICJsYXlvdXROZXR3b3JrIiwgImN1cnZlVHlwZSIsICJhbGxPcHRpb25zIiwgInByZXZIaWVyYXJjaGljYWxTdGF0ZSIsICJzZXREaXJlY3Rpb25TdHJhdGVneSIsICJhZGFwdEFsbE9wdGlvbnNGb3JIaWVyYXJjaGljYWxMYXlvdXQiLCAic2VlZCIsICJpbml0aWFsUmFuZG9tU2VlZCIsICJiYWNrdXBQaHlzaWNzIiwgImluZGljZXMiLCAiY2x1c3Rlck9wdGlvbnMiLCAic3RhcnRMZW5ndGgiLCAiYmVmb3JlIiwgIm1vZHVsZXMiLCAiY2x1c3RlcmluZyIsICJjbHVzdGVyQnJpZGdlcyIsICJjbHVzdGVyT3V0bGllcnMiLCAiX2RlY2x1c3RlckFsbCIsICJpbmZvIiwgImthbWFkYUthd2FpIiwgIl9zaGlmdFRvQ2VudGVyIiwgImdldFJhbmdlQ29yZSIsICJjbHVzdGVyc1ByZXNlbnQiLCAiZGVmaW5lZExldmVsIiwgInVuZGVmaW5lZExldmVsIiwgImxhc3ROb2RlT25MZXZlbCIsICJfZGV0ZXJtaW5lTGV2ZWxzQnlIdWJzaXplIiwgIl9kZXRlcm1pbmVMZXZlbHNEaXJlY3RlZCIsICJfZGV0ZXJtaW5lTGV2ZWxzQ3VzdG9tQ2FsbGJhY2siLCAiZW5zdXJlTGV2ZWwiLCAiZGlzdHJpYnV0aW9uIiwgIl9nZXREaXN0cmlidXRpb24iLCAiX2dlbmVyYXRlTWFwIiwgIl9wbGFjZU5vZGVzQnlIaWVyYXJjaHkiLCAiX2NvbmRlbnNlSGllcmFyY2h5IiwgInN0aWxsU2hpZnRpbmciLCAiYnJhbmNoZXMiLCAic2hpZnRUcmVlIiwgImdldFRyZWVTaXplcyIsICJ0cmVlV2lkdGhzIiwgIm51bVRyZWVzIiwgImdldEJyYW5jaE5vZGVzIiwgImdldEJyYW5jaEJvdW5kYXJ5IiwgImJyYW5jaE1hcCIsICJtYXhMZXZlbCIsICJtaW5TcGFjZSIsICJtYXhTcGFjZSIsICJicmFuY2hOb2RlIiwgImdldFBvc2l0aW9uIiwgIl90aGlzMyRfZ2V0U3BhY2VBcm91bjIiLCAiX2dldFNwYWNlQXJvdW5kTm9kZSIsICJtaW5TcGFjZU5vZGUiLCAibWF4U3BhY2VOb2RlIiwgInNoaWZ0RWxlbWVudHNDbG9zZXIiLCAiY2VudGVyUGFyZW50cyIsICJoaWVyIiwgImxldmVsTm9kZXMiLCAiaGFzU2FtZVBhcmVudCIsICJpblNhbWVTdWJOZXR3b3JrIiwgImJyYW5jaFNoaWZ0Q2FsbGJhY2siLCAiY2VudGVyUGFyZW50IiwgInBvczEiLCAicG9zMiIsICJkaWZmQWJzIiwgImJyYW5jaE5vZGVzMSIsICJicmFuY2hOb2RlczIiLCAibWF4TGV2ZWwxIiwgImdldE1heExldmVsIiwgIm1heExldmVsMiIsICJicmFuY2hOb2RlQm91bmRhcnkxIiwgImJyYW5jaE5vZGVCb3VuZGFyeTIiLCAibWF4MSIsICJtaW4yIiwgIm1pblNwYWNlMiIsICJfc2hpZnRCbG9jayIsICJfY2VudGVyUGFyZW50IiwgIm1pbmltaXplRWRnZUxlbmd0aCIsICJhbGxFZGdlcyIsICJub2RlTGV2ZWwiLCAiQzIiLCAicmVmZXJlbmNlTm9kZXMiLCAiYWJvdmVFZGdlcyIsICJnZXRGeCIsICJnZXRERngiLCAiZ2V0R3Vlc3MiLCAiZ3Vlc3MiLCAiZ3Vlc3NNYXAiLCAiZGZ4IiwgImJyYW5jaE5vZGVzIiwgImJyYW5jaEJvdW5kYXJ5IiwgIm1pblNwYWNlQnJhbmNoIiwgIm1heFNwYWNlQnJhbmNoIiwgImJyYW5jaE9mZnNldCIsICJfdGhpczMkX2dldFNwYWNlQXJvdW40IiwgIm5ld1Bvc2l0aW9uIiwgImdldExldmVscyIsICJjZW50ZXJBbGxQYXJlbnRzIiwgImNlbnRlckFsbFBhcmVudHNCb3R0b21VcCIsICJ0cmVlU2l6ZXMiLCAic2hpZnRCeSIsICJzaGlmdFRyZWVzIiwgInVzZU1hcCIsICJvcmRlcmluZyIsICJwcmV2Tm9kZSIsICJuZXh0Tm9kZSIsICJuZXh0UG9zIiwgInBhcmVudHMiLCAicGFyZW50SWQiLCAiX2dldENlbnRlclBvc2l0aW9uIiwgIl90aGlzJF9nZXRTcGFjZUFyb3VuZDIiLCAicG9zaXRpb25lZE5vZGVzIiwgIl9pbmRleEFycmF5VG9Ob2RlcyIsICJoYW5kbGVkTm9kZUNvdW50IiwgIl92YWxpZGF0ZVBvc2l0aW9uQW5kQ29udGludWUiLCAicGFyZW50TGV2ZWwiLCAiY2hpbGRSZWYiLCAiY2hpbGROb2RlTGV2ZWwiLCAicHJldmlvdXNQb3MiLCAic2hhcmVkUGFyZW50IiwgIl9maW5kQ29tbW9uUGFyZW50IiwgIndpdGhDaGlsZCIsICJfcGxhY2VCcmFuY2hOb2RlcyIsICJpZEFycmF5IiwgImZpeCIsICJodWJTaXplcyIsICJodWJTaXplIiwgIl9nZXRBY3RpdmVFZGdlcyIsICJfdGhpczYiLCAibGV2ZWxEb3duc3RyZWFtIiwgIl9nZXRIdWJTaXplcyIsICJfY3Jhd2xOZXR3b3JrIiwgIl90aGlzNyIsICJsZXZlbEEiLCAic2V0TWluTGV2ZWxUb1plcm8iLCAiX3RoaXM4IiwgInNoYWtlVG93YXJkcyIsICJfZXZlcnlJbnN0YW5jZVByb3BlcnR5IiwgIl90aGlzOSIsICJhZGRSZWxhdGlvbiIsICJjaGVja0lmVHJlZSIsICJfdGhpczEwIiwgInN0YXJ0aW5nTm9kZUlkIiwgImNyYXdsZXIiLCAidHJlZSIsICJzZXRUcmVlSW5kZXgiLCAiX3RoaXMxMSIsICJzaGlmdGVyIiwgImNoaWxkQSIsICJjaGlsZEIiLCAiX3RoaXMxMiIsICJpdGVyYXRlUGFyZW50cyIsICJwYXJlbnRSZWYiLCAiZmluZFBhcmVudCIsICJmb3VuZFBhcmVudCIsICJpc1ZlcnRpY2FsIiwgIm1pblBvcyIsICJtYXhQb3MiLCAiTWFuaXB1bGF0aW9uU3lzdGVtIiwgImludGVyYWN0aW9uSGFuZGxlciIsICJlZGl0TW9kZSIsICJtYW5pcHVsYXRpb25EaXYiLCAiZWRpdE1vZGVEaXYiLCAiY2xvc2VEaXYiLCAiX2RvbUV2ZW50TGlzdGVuZXJDbGVhbnVwUXVldWUiLCAidGVtcG9yYXJ5VUlGdW5jdGlvbnMiLCAidGVtcG9yYXJ5RXZlbnRGdW5jdGlvbnMiLCAidGVtcG9yYXJ5SWRzIiwgImd1aUVuYWJsZWQiLCAiaW5Nb2RlIiwgInNlbGVjdGVkQ29udHJvbE5vZGUiLCAiaW5pdGlhbGx5QWN0aXZlIiwgImRlbGV0ZU5vZGUiLCAiZGVsZXRlRWRnZSIsICJjb250cm9sTm9kZVN0eWxlIiwgIl9jbGVhbiIsICJfcmVzdG9yZSIsICJlbmFibGVFZGl0TW9kZSIsICJkaXNhYmxlRWRpdE1vZGUiLCAibG9jYWxlIiwgImxvY2FsZXMiLCAiX3NldHVwIiwgInNob3dNYW5pcHVsYXRvclRvb2xiYXIiLCAiX2NyZWF0ZUVkaXRCdXR0b24iLCAibWFuaXB1bGF0aW9uRE9NIiwgInNlbGVjdGVkTm9kZUNvdW50IiwgImdldFNlbGVjdGVkTm9kZUNvdW50IiwgInNlbGVjdGVkRWRnZUNvdW50IiwgImdldFNlbGVjdGVkRWRnZUNvdW50IiwgInNlbGVjdGVkVG90YWxDb3VudCIsICJuZWVkU2VwZXJhdG9yIiwgIl9jcmVhdGVBZGROb2RlQnV0dG9uIiwgIl9jcmVhdGVTZXBlcmF0b3IiLCAiX2NyZWF0ZUFkZEVkZ2VCdXR0b24iLCAiX2NyZWF0ZUVkaXROb2RlQnV0dG9uIiwgIl9jcmVhdGVFZGl0RWRnZUJ1dHRvbiIsICJfY3JlYXRlRGVsZXRlQnV0dG9uIiwgIl9iaW5kRWxlbWVudEV2ZW50cyIsICJ0b2dnbGVFZGl0TW9kZSIsICJfdGVtcG9yYXJ5QmluZEV2ZW50IiwgIl9jcmVhdGVCYWNrQnV0dG9uIiwgIl9jcmVhdGVEZXNjcmlwdGlvbiIsICJfcGVyZm9ybUFkZE5vZGUiLCAiZmluYWxpemVkRGF0YSIsICJhbGVydCIsICJfdGVtcG9yYXJ5QmluZFVJIiwgIl9oYW5kbGVDb25uZWN0IiwgIl9maW5pc2hDb25uZWN0IiwgIl9kcmFnQ29udHJvbE5vZGUiLCAiX2RyYWdTdGFydEVkZ2UiLCAiZWRpdFdpdGhvdXREcmFnIiwgImVkZ2VCZWluZ0VkaXRlZElkIiwgImNvbnRyb2xOb2RlRnJvbSIsICJfZ2V0TmV3VGFyZ2V0Tm9kZSIsICJjb250cm9sTm9kZVRvIiwgIl9jb250cm9sTm9kZVRvdWNoIiwgIl9jb250cm9sTm9kZURyYWdTdGFydCIsICJfY29udHJvbE5vZGVEcmFnIiwgIl9jb250cm9sTm9kZURyYWdFbmQiLCAiZmluZEJvcmRlclBvc2l0aW9ucyIsICJfcGVyZm9ybUVkaXRFZGdlIiwgInNlbGVjdGVkTm9kZXMiLCAic2VsZWN0ZWRFZGdlcyIsICJkZWxldGVGdW5jdGlvbiIsICJfY3JlYXRlV3JhcHBlcnMiLCAiX3JlbW92ZU1hbmlwdWxhdGlvbkRPTSIsICJfdGhpcyRvcHRpb25zJGxvY2FsZXMiLCAiX3RoaXMkb3B0aW9ucyRsb2NhbGVzMiIsICJzZXRBdHRyaWJ1dGUiLCAicmVjdXJzaXZlRE9NRGVsZXRlIiwgIl9jcmVhdGVCdXR0b24iLCAiX2NsZWFudXBET01FdmVudExpc3RlbmVycyIsICJfY2xlYW51cFRlbXBvcmFyeU5vZGVzQW5kRWRnZXMiLCAiX3VuYmluZFRlbXBvcmFyeVVJcyIsICJfdW5iaW5kVGVtcG9yYXJ5RXZlbnRzIiwgImFkZE5vZGVNb2RlIiwgImFkZEVkZ2VNb2RlIiwgImVkaXRFZGdlTW9kZSIsICJkZWxldGVCdG5DbGFzcyIsICJydGwiLCAiZGVsZXRlU2VsZWN0ZWQiLCAibGFiZWxDbGFzc05hbWUiLCAibmV3RnVuY3Rpb24iLCAiVUlmdW5jdGlvbk5hbWUiLCAiZXZlbnROYW1lIiwgImRvbUVsZW1lbnQiLCAia2V5dXBMaXN0ZW5lciIsICJfcmVmIiwgImluZGV4VGVtcEVkZ2UiLCAiX2NvbnRleHQyOCIsICJfY29udGV4dDI5IiwgImluZGV4VGVtcE5vZGUiLCAiZnJvbVNlbGVjdCIsICJ0b1NlbGVjdCIsICJvdmVybGFwcGluZ05vZGVJZHMiLCAidGFyZ2V0Tm9kZSIsICJjb25uZWN0aW9uRWRnZSIsICJjb25uZWN0RnJvbUlkIiwgIl9jb250ZXh0MzAiLCAiX2NvbnRleHQzMSIsICJfcGVyZm9ybUFkZEVkZ2UiLCAiY2xpY2tEYXRhIiwgImRlZmF1bHREYXRhIiwgInNvdXJjZU5vZGVJZCIsICJlZUZ1bmN0IiwgImJvb2wiLCAiZW5kUG9pbnRzIiwgIm5vZGVPcHRpb25zIiwgImJvb2xlYW4iLCAiZnVuY3Rpb24iLCAiX190eXBlX18iLCAibWluaW11bSIsICJkb20iLCAibWF4aW11bSIsICJjb25maWd1cmUiLCAic2hvd0J1dHRvbiIsICJfX2FueV9fIiwgImludGVyYWN0aW9uIiwgIm1hbmlwdWxhdGlvbiIsICJjbGlja1RvVXNlIiwgImFueSIsICJjb25maWd1cmVPcHRpb25zIiwgImNvbmZpZ3VyYXRvckhpZGVPcHRpb24iLCAicGFyZW50UGF0aCIsICJvcHRpb25OYW1lIiwgIkZsb3lkV2Fyc2hhbGwiLCAiZWRnZXNBcnJheSIsICJEX21hdHJpeCIsICJjZWxsIiwgImtub2RlIiwgImtjb2xtIiwgImlub2RlIiwgImljb2xtIiwgImpub2RlIiwgImpjb2xtIiwgIkthbWFkYUthd2FpIiwgImVkZ2VTdHJlbmd0aCIsICJkaXN0YW5jZVNvbHZlciIsICJpZ25vcmVDbHVzdGVycyIsICJnZXREaXN0YW5jZXMiLCAiX2NyZWF0ZUxfbWF0cml4IiwgIl9jcmVhdGVLX21hdHJpeCIsICJfY3JlYXRlRV9tYXRyaXgiLCAibWF4SXRlcmF0aW9ucyIsICJtYXhFbmVyZ3kiLCAiaGlnaEVfbm9kZUlkIiwgImRFX2R4IiwgImRFX2R5IiwgImRlbHRhX20iLCAic3ViSXRlcmF0aW9ucyIsICJfdGhpcyRfZ2V0SGlnaGVzdEVuZXIyIiwgIl9nZXRIaWdoZXN0RW5lcmd5Tm9kZSIsICJfbW92ZU5vZGUiLCAiX3RoaXMkX2dldEVuZXJneTIiLCAiX2dldEVuZXJneSIsICJtYXhFbmVyZ3lOb2RlSWQiLCAiZEVfZHhfbWF4IiwgImRFX2R5X21heCIsICJub2RlSWR4IiwgIl90aGlzJF9nZXRFbmVyZ3k0IiwgIl90aGlzJEVfc3VtcyRtIiwgIkVfc3VtcyIsICJkMkVfZHgyIiwgImQyRV9keGR5IiwgImQyRV9keTIiLCAieF9tIiwgInlfbSIsICJrbSIsICJLX21hdHJpeCIsICJsbSIsICJMX21hdHJpeCIsICJpSWR4IiwgInhfaSIsICJ5X2kiLCAia21hdCIsICJsbWF0IiwgImRlbm9taW5hdG9yIiwgIl91cGRhdGVFX21hdHJpeCIsICJFX21hdHJpeCIsICJtSWR4IiwgImNvbG0iLCAibGNvbG0iLCAib2xkRHgiLCAib2xkRHkiLCAiTmV0d29yayIsICJyZW5kZXJlciIsICJub2Rlc0hhbmRsZXIiLCAiZWRnZXNIYW5kbGVyIiwgIl9jcmVhdGUiLCAic2V0RGF0YSIsICJWYWxpZGF0b3IiLCAidmFsaWRhdGUiLCAicmF3Q29kZSIsICJfcmF3Q29kZSRzcGxpdDIiLCAicmF3TGFuZ3VhZ2UiLCAicmF3Q291bnRyeSIsICJsYW5ndWFnZSIsICJjb3VudHJ5IiwgImNvbmZpZ3VyYXRvciIsICJDb25maWd1cmF0b3IiLCAibmV0d29ya09wdGlvbnMiLCAic2V0TW9kdWxlT3B0aW9ucyIsICJhY3RpdmF0b3IiLCAiQWN0aXZhdG9yIiwgIl91cGRhdGVWaXNpYmxlSW5kaWNlcyIsICJlZGdlTm9kZXNQcmVzZW50IiwgIl91cGRhdGVWYWx1ZVJhbmdlIiwgImdlcGhpIiwgImdlcGhpRGF0YSIsICJ2YWx1ZU1pbiIsICJ2YWx1ZU1heCIsICJ2YWx1ZVRvdGFsIiwgInNldFZhbHVlUmFuZ2UiLCAiaXNBY3RpdmUiLCAiYWN0aXZlIiwgImNsdXN0ZXIiLCAiZ2V0Tm9kZXNJbkNsdXN0ZXIiLCAiY2x1c3RlckJ5SHVic2l6ZSIsICJ1cGRhdGVDbHVzdGVyZWROb2RlIiwgImdldEJhc2VFZGdlIiwgInVwZGF0ZUVkZ2UiLCAiZ2V0U2VlZCIsICJlZGl0Tm9kZU1vZGUiLCAiZ2V0UG9zaXRpb25zIiwgInN0b3JlUG9zaXRpb25zIiwgIm1vdmVOb2RlIiwgImdldEJvdW5kaW5nQm94IiwgImdldENvbm5lY3RlZE5vZGVzIiwgIm9iamVjdElkIiwgImdldENvbm5lY3RlZEVkZ2VzIiwgImdldFNlbGVjdGVkRWRnZXMiLCAic2VsZWN0Tm9kZXMiLCAic2VsZWN0RWRnZXMiLCAiY29tbWl0V2l0aG91dEVtaXR0aW5nIiwgInJlZHJhdyIsICJnZXRTY2FsZSIsICJnZXRPcHRpb25zRnJvbUNvbmZpZ3VyYXRvciIsICJnZXRPcHRpb25zIiwgInBhcnNlRE9UTmV0d29yayIsICJkb3RwYXJzZXIiLCAiX2NsYXNzQ2FsbENoZWNrIiwgImluc3RhbmNlIiwgIkNvbnN0cnVjdG9yIiwgIlR5cGVFcnJvciIsICJ0IiwgImNoZWNrIiwgIml0IiwgIk1hdGgiLCAiZ2xvYmFsIiwgImdsb2JhbFRoaXMiLCAid2luZG93IiwgInNlbGYiLCAidGhpcyIsICJGdW5jdGlvbiIsICJmYWlscyIsICJleGVjIiwgImVycm9yIiwgImZ1bmN0aW9uQmluZE5hdGl2ZSIsICJyZXF1aXJlJCQwIiwgInRlc3QiLCAiYmluZCIsICJoYXNPd25Qcm9wZXJ0eSIsICJOQVRJVkVfQklORCIsICJGdW5jdGlvblByb3RvdHlwZSIsICJwcm90b3R5cGUiLCAiYXBwbHkiLCAiY2FsbCIsICJmdW5jdGlvbkFwcGx5IiwgIlJlZmxlY3QiLCAiYXJndW1lbnRzIiwgInVuY3VycnlUaGlzV2l0aEJpbmQiLCAiZnVuY3Rpb25VbmN1cnJ5VGhpcyIsICJmbiIsICJ1bmN1cnJ5VGhpcyIsICJ0b1N0cmluZyIsICJzdHJpbmdTbGljZSIsICJzbGljZSIsICJjbGFzc29mUmF3IiwgInJlcXVpcmUkJDEiLCAiZnVuY3Rpb25VbmN1cnJ5VGhpc0NsYXVzZSIsICJkb2N1bWVudEFsbCIsICJkb2N1bWVudCIsICJhbGwiLCAiZG9jdW1lbnRBbGxfMSIsICJJU19IVE1MRERBIiwgImlzQ2FsbGFibGUiLCAiYXJndW1lbnQiLCAiZGVzY3JpcHRvcnMiLCAiT2JqZWN0IiwgImRlZmluZVByb3BlcnR5IiwgImdldCIsICJmdW5jdGlvbkNhbGwiLCAiJHByb3BlcnR5SXNFbnVtZXJhYmxlIiwgInByb3BlcnR5SXNFbnVtZXJhYmxlIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJOQVNIT1JOX0JVRyIsICJvYmplY3RQcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJmIiwgIlYiLCAiZGVzY3JpcHRvciIsICJlbnVtZXJhYmxlIiwgIm1hdGNoIiwgInZlcnNpb24iLCAiY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yIiwgImJpdG1hcCIsICJ2YWx1ZSIsICJjb25maWd1cmFibGUiLCAid3JpdGFibGUiLCAiY2xhc3NvZiIsICJyZXF1aXJlJCQyIiwgIiRPYmplY3QiLCAic3BsaXQiLCAiaW5kZXhlZE9iamVjdCIsICJpc051bGxPclVuZGVmaW5lZCIsICIkVHlwZUVycm9yIiwgInJlcXVpcmVPYmplY3RDb2VyY2libGUiLCAiSW5kZXhlZE9iamVjdCIsICJ0b0luZGV4ZWRPYmplY3QiLCAiaXNPYmplY3QiLCAicGF0aCIsICJhRnVuY3Rpb24iLCAidmFyaWFibGUiLCAiZ2V0QnVpbHRJbiIsICJuYW1lc3BhY2UiLCAibWV0aG9kIiwgImxlbmd0aCIsICJvYmplY3RJc1Byb3RvdHlwZU9mIiwgImlzUHJvdG90eXBlT2YiLCAiZW5naW5lVXNlckFnZW50IiwgIm5hdmlnYXRvciIsICJTdHJpbmciLCAidXNlckFnZW50IiwgInByb2Nlc3MiLCAiRGVubyIsICJ2ZXJzaW9ucyIsICJ2OCIsICJlbmdpbmVWOFZlcnNpb24iLCAiVjhfVkVSU0lPTiIsICIkU3RyaW5nIiwgInN5bWJvbENvbnN0cnVjdG9yRGV0ZWN0aW9uIiwgImdldE93blByb3BlcnR5U3ltYm9scyIsICJzeW1ib2wiLCAiU3ltYm9sIiwgInNoYW0iLCAidXNlU3ltYm9sQXNVaWQiLCAiaXRlcmF0b3IiLCAiaXNTeW1ib2wiLCAicmVxdWlyZSQkMyIsICIkU3ltYm9sIiwgInRyeVRvU3RyaW5nIiwgImFDYWxsYWJsZSIsICJnZXRNZXRob2QiLCAiUCIsICJmdW5jIiwgImRlZmluZUdsb2JhbFByb3BlcnR5IiwgImtleSIsICJTSEFSRUQiLCAic2hhcmVkU3RvcmUiLCAic3RvcmUiLCAic2hhcmVkTW9kdWxlIiwgInB1c2giLCAibW9kZSIsICJjb3B5cmlnaHQiLCAibGljZW5zZSIsICJzb3VyY2UiLCAidG9PYmplY3QiLCAiaGFzT3duUHJvcGVydHlfMSIsICJoYXNPd24iLCAiaWQiLCAicG9zdGZpeCIsICJyYW5kb20iLCAidWlkIiwgInNoYXJlZCIsICJOQVRJVkVfU1lNQk9MIiwgInJlcXVpcmUkJDQiLCAiVVNFX1NZTUJPTF9BU19VSUQiLCAicmVxdWlyZSQkNSIsICJXZWxsS25vd25TeW1ib2xzU3RvcmUiLCAiY3JlYXRlV2VsbEtub3duU3ltYm9sIiwgIndpdGhvdXRTZXR0ZXIiLCAid2VsbEtub3duU3ltYm9sIiwgIm5hbWUiLCAib3JkaW5hcnlUb1ByaW1pdGl2ZSIsICJpbnB1dCIsICJwcmVmIiwgInZhbCIsICJ2YWx1ZU9mIiwgIlRPX1BSSU1JVElWRSIsICJ0b1ByaW1pdGl2ZSIsICJyZXN1bHQiLCAiZXhvdGljVG9QcmltIiwgInRvUHJvcGVydHlLZXkiLCAiRVhJU1RTIiwgImNyZWF0ZUVsZW1lbnQiLCAiZG9jdW1lbnRDcmVhdGVFbGVtZW50IiwgImllOERvbURlZmluZSIsICJhIiwgIkRFU0NSSVBUT1JTIiwgInByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlIiwgInJlcXVpcmUkJDYiLCAiSUU4X0RPTV9ERUZJTkUiLCAicmVxdWlyZSQkNyIsICIkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIm9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJPIiwgInJlcGxhY2VtZW50IiwgImlzRm9yY2VkIiwgImZlYXR1cmUiLCAiZGV0ZWN0aW9uIiwgImRhdGEiLCAibm9ybWFsaXplIiwgIlBPTFlGSUxMIiwgIk5BVElWRSIsICJzdHJpbmciLCAicmVwbGFjZSIsICJ0b0xvd2VyQ2FzZSIsICJpc0ZvcmNlZF8xIiwgImZ1bmN0aW9uQmluZENvbnRleHQiLCAidGhhdCIsICJ2OFByb3RvdHlwZURlZmluZUJ1ZyIsICJhbk9iamVjdCIsICJWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyIsICIkZGVmaW5lUHJvcGVydHkiLCAiRU5VTUVSQUJMRSIsICJDT05GSUdVUkFCTEUiLCAiV1JJVEFCTEUiLCAib2JqZWN0RGVmaW5lUHJvcGVydHkiLCAiQXR0cmlidXRlcyIsICJjdXJyZW50IiwgImRlZmluZVByb3BlcnR5TW9kdWxlIiwgImNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSIsICJvYmplY3QiLCAicmVxdWlyZSQkOCIsICJyZXF1aXJlJCQ5IiwgIndyYXBDb25zdHJ1Y3RvciIsICJOYXRpdmVDb25zdHJ1Y3RvciIsICJXcmFwcGVyIiwgImIiLCAiYyIsICJfZXhwb3J0IiwgIm9wdGlvbnMiLCAiRk9SQ0VEIiwgIlVTRV9OQVRJVkUiLCAiVklSVFVBTF9QUk9UT1RZUEUiLCAic291cmNlUHJvcGVydHkiLCAidGFyZ2V0UHJvcGVydHkiLCAibmF0aXZlUHJvcGVydHkiLCAicmVzdWx0UHJvcGVydHkiLCAiVEFSR0VUIiwgInRhcmdldCIsICJHTE9CQUwiLCAiU1RBVElDIiwgInN0YXQiLCAiUFJPVE8iLCAicHJvdG8iLCAibmF0aXZlU291cmNlIiwgInRhcmdldFByb3RvdHlwZSIsICJmb3JjZWQiLCAiZG9udENhbGxHZXRTZXQiLCAid3JhcCIsICJyZWFsIiwgIiQiLCAiJCRQIiwgImV4cG9ydHMiLCAiZGVzYyIsICJpc0FycmF5IiwgIkFycmF5IiwgImNlaWwiLCAiZmxvb3IiLCAidHJ1bmMiLCAieCIsICJuIiwgInRvSW50ZWdlck9ySW5maW5pdHkiLCAibnVtYmVyIiwgIm1pbiIsICJ0b0xlbmd0aCIsICJsZW5ndGhPZkFycmF5TGlrZSIsICJvYmoiLCAiZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyIiwgImNyZWF0ZVByb3BlcnR5IiwgInByb3BlcnR5S2V5IiwgInRvU3RyaW5nVGFnU3VwcG9ydCIsICJUT19TVFJJTkdfVEFHX1NVUFBPUlQiLCAiVE9fU1RSSU5HX1RBRyIsICJDT1JSRUNUX0FSR1VNRU5UUyIsICJ0YWciLCAiY2FsbGVlIiwgImZ1bmN0aW9uVG9TdHJpbmciLCAiaW5zcGVjdFNvdXJjZSIsICJub29wIiwgImVtcHR5IiwgImNvbnN0cnVjdCIsICJjb25zdHJ1Y3RvclJlZ0V4cCIsICJJTkNPUlJFQ1RfVE9fU1RSSU5HIiwgImlzQ29uc3RydWN0b3JNb2Rlcm4iLCAiaXNDb25zdHJ1Y3RvckxlZ2FjeSIsICJpc0NvbnN0cnVjdG9yIiwgImNhbGxlZCIsICJTUEVDSUVTIiwgIiRBcnJheSIsICJhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciIsICJvcmlnaW5hbEFycmF5IiwgIkMiLCAiY29uc3RydWN0b3IiLCAidW5kZWZpbmVkIiwgImFycmF5U3BlY2llc0NyZWF0ZSIsICJhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0IiwgIk1FVEhPRF9OQU1FIiwgImFycmF5IiwgImZvbyIsICJCb29sZWFuIiwgInJlcXVpcmUkJDExIiwgIklTX0NPTkNBVF9TUFJFQURBQkxFIiwgInJlcXVpcmUkJDEwIiwgIklTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQiLCAiY29uY2F0IiwgImlzQ29uY2F0U3ByZWFkYWJsZSIsICJzcHJlYWRhYmxlIiwgImFyaXR5IiwgImFyZyIsICJpIiwgImsiLCAibGVuIiwgIkUiLCAiQSIsICJtYXgiLCAidG9BYnNvbHV0ZUluZGV4IiwgImluZGV4IiwgImludGVnZXIiLCAiY3JlYXRlTWV0aG9kIiwgIklTX0lOQ0xVREVTIiwgIiR0aGlzIiwgImVsIiwgImZyb21JbmRleCIsICJhcnJheUluY2x1ZGVzIiwgImluY2x1ZGVzIiwgImluZGV4T2YiLCAiaGlkZGVuS2V5cyIsICJvYmplY3RLZXlzSW50ZXJuYWwiLCAibmFtZXMiLCAiZW51bUJ1Z0tleXMiLCAiaW50ZXJuYWxPYmplY3RLZXlzIiwgIm9iamVjdEtleXMiLCAia2V5cyIsICJvYmplY3REZWZpbmVQcm9wZXJ0aWVzIiwgImRlZmluZVByb3BlcnRpZXMiLCAiUHJvcGVydGllcyIsICJwcm9wcyIsICJhY3RpdmVYRG9jdW1lbnQiLCAiaHRtbCIsICJzaGFyZWRLZXkiLCAiZGVmaW5lUHJvcGVydGllc01vZHVsZSIsICJQUk9UT1RZUEUiLCAiU0NSSVBUIiwgIklFX1BST1RPIiwgIkVtcHR5Q29uc3RydWN0b3IiLCAic2NyaXB0VGFnIiwgImNvbnRlbnQiLCAiTFQiLCAiTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCIsICJ3cml0ZSIsICJjbG9zZSIsICJ0ZW1wIiwgInBhcmVudFdpbmRvdyIsICJOdWxsUHJvdG9PYmplY3QiLCAiQWN0aXZlWE9iamVjdCIsICJpZnJhbWVEb2N1bWVudCIsICJpZnJhbWUiLCAiSlMiLCAiZG9tYWluIiwgInN0eWxlIiwgImRpc3BsYXkiLCAiYXBwZW5kQ2hpbGQiLCAic3JjIiwgImNvbnRlbnRXaW5kb3ciLCAib3BlbiIsICJGIiwgIm9iamVjdENyZWF0ZSIsICJjcmVhdGUiLCAib2JqZWN0R2V0T3duUHJvcGVydHlOYW1lcyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImFycmF5U2xpY2VTaW1wbGUiLCAic3RhcnQiLCAiZW5kIiwgImZpbiIsICIkZ2V0T3duUHJvcGVydHlOYW1lcyIsICJhcnJheVNsaWNlIiwgIndpbmRvd05hbWVzIiwgIm9iamVjdEdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiZGVmaW5lQnVpbHRJbiIsICJkZWZpbmVCdWlsdEluQWNjZXNzb3IiLCAid2VsbEtub3duU3ltYm9sV3JhcHBlZCIsICJzZXQiLCAiaGFzIiwgIndyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUiLCAid2VsbEtub3duU3ltYm9sRGVmaW5lIiwgIk5BTUUiLCAic3ltYm9sRGVmaW5lVG9QcmltaXRpdmUiLCAiU3ltYm9sUHJvdG90eXBlIiwgImhpbnQiLCAib2JqZWN0VG9TdHJpbmciLCAic2V0VG9TdHJpbmdUYWciLCAiVEFHIiwgIlNFVF9NRVRIT0QiLCAiV2Vha01hcCIsICJOQVRJVkVfV0VBS19NQVAiLCAiT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQiLCAic3RhdGUiLCAibWV0YWRhdGEiLCAiZmFjYWRlIiwgIlNUQVRFIiwgImludGVybmFsU3RhdGUiLCAiZW5mb3JjZSIsICJnZXR0ZXJGb3IiLCAiVFlQRSIsICJ0eXBlIiwgIklTX01BUCIsICJJU19GSUxURVIiLCAiSVNfU09NRSIsICJJU19FVkVSWSIsICJJU19GSU5EX0lOREVYIiwgIklTX0ZJTFRFUl9SRUpFQ1QiLCAiTk9fSE9MRVMiLCAiY2FsbGJhY2tmbiIsICJzcGVjaWZpY0NyZWF0ZSIsICJib3VuZEZ1bmN0aW9uIiwgImFycmF5SXRlcmF0aW9uIiwgImZvckVhY2giLCAibWFwIiwgImZpbHRlciIsICJzb21lIiwgImV2ZXJ5IiwgImZpbmQiLCAiZmluZEluZGV4IiwgImZpbHRlclJlamVjdCIsICJyZXF1aXJlJCQxMiIsICIkdG9TdHJpbmciLCAicmVxdWlyZSQkMTMiLCAicmVxdWlyZSQkMTQiLCAibmF0aXZlT2JqZWN0Q3JlYXRlIiwgInJlcXVpcmUkJDE1IiwgInJlcXVpcmUkJDE2IiwgImdldE93blByb3BlcnR5TmFtZXNNb2R1bGUiLCAicmVxdWlyZSQkMTciLCAiZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsIiwgInJlcXVpcmUkJDE4IiwgImdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSIsICJyZXF1aXJlJCQxOSIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUiLCAicmVxdWlyZSQkMjAiLCAicmVxdWlyZSQkMjEiLCAicmVxdWlyZSQkMjIiLCAicmVxdWlyZSQkMjMiLCAicmVxdWlyZSQkMjQiLCAicmVxdWlyZSQkMjUiLCAicmVxdWlyZSQkMjYiLCAicmVxdWlyZSQkMjgiLCAicmVxdWlyZSQkMjkiLCAicmVxdWlyZSQkMzAiLCAicmVxdWlyZSQkMzEiLCAiZGVmaW5lV2VsbEtub3duU3ltYm9sIiwgInJlcXVpcmUkJDMyIiwgImRlZmluZVN5bWJvbFRvUHJpbWl0aXZlIiwgInJlcXVpcmUkJDMzIiwgInJlcXVpcmUkJDM0IiwgIkludGVybmFsU3RhdGVNb2R1bGUiLCAicmVxdWlyZSQkMzUiLCAiJGZvckVhY2giLCAicmVxdWlyZSQkMzYiLCAiSElEREVOIiwgInJlcXVpcmUkJDI3IiwgIlNZTUJPTCIsICJzZXRJbnRlcm5hbFN0YXRlIiwgImdldEludGVybmFsU3RhdGUiLCAiT2JqZWN0UHJvdG90eXBlIiwgIlJhbmdlRXJyb3IiLCAiUU9iamVjdCIsICJuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAibmF0aXZlRGVmaW5lUHJvcGVydHkiLCAibmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyIsICJuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJBbGxTeW1ib2xzIiwgIk9iamVjdFByb3RvdHlwZVN5bWJvbHMiLCAiVVNFX1NFVFRFUiIsICJmaW5kQ2hpbGQiLCAiZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSIsICJPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yIiwgInNldFN5bWJvbERlc2NyaXB0b3IiLCAiZGVzY3JpcHRpb24iLCAiJGRlZmluZVByb3BlcnRpZXMiLCAicHJvcGVydGllcyIsICIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgIklTX09CSkVDVF9QUk9UT1RZUEUiLCAic2V0dGVyIiwgIiQkTiIsICIkZm9yRWFjaCQxIiwgInVzZVNldHRlciIsICJ1c2VTaW1wbGUiLCAic3ltYm9sUmVnaXN0cnlEZXRlY3Rpb24iLCAia2V5Rm9yIiwgIk5BVElWRV9TWU1CT0xfUkVHSVNUUlkiLCAiU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSIsICJTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5IiwgImZvciIsICJzeW0iLCAiZ2V0UmVwbGFjZXJGdW5jdGlvbiIsICJyZXBsYWNlciIsICJyYXdMZW5ndGgiLCAiZWxlbWVudCIsICJrZXlzTGVuZ3RoIiwgInJvb3QiLCAiaiIsICIkc3RyaW5naWZ5IiwgImNoYXJBdCIsICJjaGFyQ29kZUF0IiwgIm51bWJlclRvU3RyaW5nIiwgInRlc3RlciIsICJsb3ciLCAiaGkiLCAiV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIiwgIklMTF9GT1JNRURfVU5JQ09ERSIsICJzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCIsICJhcmdzIiwgIiRyZXBsYWNlciIsICJmaXhJbGxGb3JtZWQiLCAib2Zmc2V0IiwgInByZXYiLCAibmV4dCIsICJzdHJpbmdpZnkiLCAic3BhY2UiLCAiSlNPTiIsICJJdGVyYXRvclByb3RvdHlwZSIsICJQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUiLCAiYXJyYXlJdGVyYXRvciIsICJpdGVyYXRvcnMiLCAiZ2V0RGVzY3JpcHRvciIsICJmdW5jdGlvbk5hbWUiLCAiUFJPUEVSIiwgImNvcnJlY3RQcm90b3R5cGVHZXR0ZXIiLCAiZ2V0UHJvdG90eXBlT2YiLCAiQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIiwgIm9iamVjdEdldFByb3RvdHlwZU9mIiwgIklURVJBVE9SIiwgIkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMiLCAiTkVXX0lURVJBVE9SX1BST1RPVFlQRSIsICJpdGVyYXRvcnNDb3JlIiwgIkl0ZXJhdG9ycyIsICJyZXR1cm5UaGlzIiwgInVuY3VycnlUaGlzQWNjZXNzb3IiLCAiYVBvc3NpYmxlUHJvdG90eXBlIiwgIm9iamVjdFNldFByb3RvdHlwZU9mIiwgInNldFByb3RvdHlwZU9mIiwgIkNPUlJFQ1RfU0VUVEVSIiwgIl9fcHJvdG9fXyIsICJGdW5jdGlvbk5hbWUiLCAiY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciIsICJJdGVyYXRvckNvbnN0cnVjdG9yIiwgIkVOVU1FUkFCTEVfTkVYVCIsICJJdGVyYXRvcnNDb3JlIiwgIlBST1BFUl9GVU5DVElPTl9OQU1FIiwgIktFWVMiLCAiVkFMVUVTIiwgIkVOVFJJRVMiLCAiaXRlcmF0b3JEZWZpbmUiLCAiSXRlcmFibGUiLCAiREVGQVVMVCIsICJJU19TRVQiLCAiQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlIiwgIm1ldGhvZHMiLCAiS0VZIiwgImdldEl0ZXJhdGlvbk1ldGhvZCIsICJLSU5EIiwgImRlZmF1bHRJdGVyYXRvciIsICJJdGVyYWJsZVByb3RvdHlwZSIsICJJTkNPUlJFQ1RfVkFMVUVTX05BTUUiLCAibmF0aXZlSXRlcmF0b3IiLCAiYW55TmF0aXZlSXRlcmF0b3IiLCAiZW50cmllcyIsICJ2YWx1ZXMiLCAiY3JlYXRlSXRlclJlc3VsdE9iamVjdCIsICJkb25lIiwgImRlZmluZUl0ZXJhdG9yIiwgIkFSUkFZX0lURVJBVE9SIiwgImRlZmluZUl0ZXJhdG9yJDIiLCAiaXRlcmF0ZWQiLCAia2luZCIsICJBcmd1bWVudHMiLCAiRE9NSXRlcmFibGVzIiwgIkNTU1J1bGVMaXN0IiwgIkNTU1N0eWxlRGVjbGFyYXRpb24iLCAiQ1NTVmFsdWVMaXN0IiwgIkNsaWVudFJlY3RMaXN0IiwgIkRPTVJlY3RMaXN0IiwgIkRPTVN0cmluZ0xpc3QiLCAiRE9NVG9rZW5MaXN0IiwgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0IiwgIkZpbGVMaXN0IiwgIkhUTUxBbGxDb2xsZWN0aW9uIiwgIkhUTUxDb2xsZWN0aW9uIiwgIkhUTUxGb3JtRWxlbWVudCIsICJIVE1MU2VsZWN0RWxlbWVudCIsICJNZWRpYUxpc3QiLCAiTWltZVR5cGVBcnJheSIsICJOYW1lZE5vZGVNYXAiLCAiTm9kZUxpc3QiLCAiUGFpbnRSZXF1ZXN0TGlzdCIsICJQbHVnaW4iLCAiUGx1Z2luQXJyYXkiLCAiU1ZHTGVuZ3RoTGlzdCIsICJTVkdOdW1iZXJMaXN0IiwgIlNWR1BhdGhTZWdMaXN0IiwgIlNWR1BvaW50TGlzdCIsICJTVkdTdHJpbmdMaXN0IiwgIlNWR1RyYW5zZm9ybUxpc3QiLCAiU291cmNlQnVmZmVyTGlzdCIsICJTdHlsZVNoZWV0TGlzdCIsICJUZXh0VHJhY2tDdWVMaXN0IiwgIlRleHRUcmFja0xpc3QiLCAiVG91Y2hMaXN0IiwgIkNPTExFQ1RJT05fTkFNRSIsICJDb2xsZWN0aW9uIiwgIkNvbGxlY3Rpb25Qcm90b3R5cGUiLCAiTUVUQURBVEEiLCAidGhpc1N5bWJvbFZhbHVlIiwgInN5bWJvbElzUmVnaXN0ZXJlZCIsICJpc1JlZ2lzdGVyZWRTeW1ib2wiLCAiJGlzV2VsbEtub3duU3ltYm9sIiwgImlzV2VsbEtub3duU3ltYm9sIiwgInN5bWJvbEtleXMiLCAic3ltYm9sS2V5c0xlbmd0aCIsICJzeW1ib2xLZXkiLCAic3ltYm9sSXNXZWxsS25vd24iLCAiaXNSZWdpc3RlcmVkIiwgImlzV2VsbEtub3duIiwgIkNPTlZFUlRfVE9fU1RSSU5HIiwgInBvcyIsICJmaXJzdCIsICJzZWNvbmQiLCAiUyIsICJwb3NpdGlvbiIsICJzaXplIiwgImNvZGVBdCIsICJTVFJJTkdfSVRFUkFUT1IiLCAicG9pbnQiLCAiX3R5cGVvZiIsICJvIiwgIl9TeW1ib2wiLCAiX1N5bWJvbCRpdGVyYXRvciIsICJfdG9Qcm9wZXJ0eUtleSIsICJwcmltIiwgIl9TeW1ib2wkdG9QcmltaXRpdmUiLCAicmVzIiwgIk51bWJlciIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfT2JqZWN0JGRlZmluZVByb3BlcnR5IiwgIl9jcmVhdGVDbGFzcyIsICJwcm90b1Byb3BzIiwgInN0YXRpY1Byb3BzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICIkRnVuY3Rpb24iLCAiam9pbiIsICJmYWN0b3JpZXMiLCAiZnVuY3Rpb25CaW5kIiwgIlByb3RvdHlwZSIsICJwYXJ0QXJncyIsICJhcmdzTGVuZ3RoIiwgImxpc3QiLCAiZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCIsICJDT05TVFJVQ1RPUiIsICJNRVRIT0QiLCAiTmFtZXNwYWNlIiwgInB1cmVNZXRob2QiLCAiTmF0aXZlUHJvdG90eXBlIiwgIm93biIsICJJU19SSUdIVCIsICJhcmd1bWVudHNMZW5ndGgiLCAibWVtbyIsICJhcnJheVJlZHVjZSIsICJsZWZ0IiwgInJpZ2h0IiwgImFycmF5TWV0aG9kSXNTdHJpY3QiLCAiZW5naW5lSXNOb2RlIiwgIiRyZWR1Y2UiLCAicmVkdWNlIiwgIkFycmF5UHJvdG90eXBlIiwgIiRmaWx0ZXIiLCAiJG1hcCIsICJmbGF0dGVuSW50b0FycmF5IiwgIm9yaWdpbmFsIiwgInNvdXJjZUxlbiIsICJkZXB0aCIsICJtYXBwZXIiLCAidGhpc0FyZyIsICJlbGVtZW50TGVuIiwgInRhcmdldEluZGV4IiwgInNvdXJjZUluZGV4IiwgIm1hcEZuIiwgImZsYXRNYXAiLCAiU2ltcGxlRGF0YVBpcGUiLCAiX3NvdXJjZSIsICJfdHJhbnNmb3JtZXJzIiwgIl90YXJnZXQiLCAiX2NvbnRleHQiLCAiX2NvbnRleHQyIiwgIl9jb250ZXh0MyIsICJhZGQiLCAiX2JpbmRJbnN0YW5jZVByb3BlcnR5IiwgIl9hZGQiLCAicmVtb3ZlIiwgIl9yZW1vdmUiLCAidXBkYXRlIiwgIl91cGRhdGUiLCAiX3RyYW5zZm9ybUl0ZW1zIiwgIm9uIiwgIl9saXN0ZW5lcnMiLCAib2ZmIiwgIml0ZW1zIiwgIl9jb250ZXh0NCIsICJfcmVkdWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJ0cmFuc2Zvcm0iLCAiX25hbWUiLCAicGF5bG9hZCIsICJvbGREYXRhIiwgIkRhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24iLCAiY2FsbGJhY2siLCAiX2ZpbHRlckluc3RhbmNlUHJvcGVydHkiLCAiX21hcEluc3RhbmNlUHJvcGVydHkiLCAiX2ZsYXRNYXBJbnN0YW5jZVByb3BlcnR5IiwgIml0ZXJhdG9yQ2xvc2UiLCAiaW5uZXJSZXN1bHQiLCAiaW5uZXJFcnJvciIsICJpc0FycmF5SXRlcmF0b3JNZXRob2QiLCAiZ2V0SXRlcmF0b3JNZXRob2QiLCAiZ2V0SXRlcmF0b3IiLCAidXNpbmdJdGVyYXRvciIsICJpdGVyYXRvck1ldGhvZCIsICJjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nIiwgIlNBRkVfQ0xPU0lORyIsICJpdGVyYXRvcldpdGhSZXR1cm4iLCAicmV0dXJuIiwgImZyb20iLCAiY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uIiwgIlNLSVBfQ0xPU0lORyIsICJJVEVSQVRJT05fU1VQUE9SVCIsICJhcnJheUxpa2UiLCAiSVNfQ09OU1RSVUNUT1IiLCAibWFwZm4iLCAibWFwcGluZyIsICJzdGVwIiwgIml0ZXJhYmxlIiwgImFycmF5U2V0TGVuZ3RoIiwgInNldEFycmF5TGVuZ3RoIiwgInByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCIsICJpdGVtIiwgImFyZ0NvdW50IiwgIm5hdGl2ZVNsaWNlIiwgIkhBU19TUEVDSUVTX1NVUFBPUlQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiYXJyIiwgImFycjIiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIm1pbkxlbiIsICJhcnJheUxpa2VUb0FycmF5IiwgIl9zbGljZUluc3RhbmNlUHJvcGVydHkiLCAiX0FycmF5JGZyb20iLCAiX3NsaWNlZFRvQXJyYXkiLCAiX0FycmF5JGlzQXJyYXkiLCAiciIsICJsIiwgIl9nZXRJdGVyYXRvck1ldGhvZCIsICJlIiwgInUiLCAiX3B1c2hJbnN0YW5jZVByb3BlcnR5IiwgInVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIm5vbkl0ZXJhYmxlUmVzdCIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiaXRlciIsICJub25JdGVyYWJsZVNwcmVhZCIsICJvd25LZXlzIiwgIm5hdGl2ZUtleXMiLCAiYXJyYXlGb3JFYWNoIiwgIm5hdGl2ZVJldmVyc2UiLCAicmV2ZXJzZSIsICIkJHIiLCAiZGVsZXRlUHJvcGVydHlPclRocm93IiwgInNwbGljZSIsICJkZWxldGVDb3VudCIsICJpbnNlcnRDb3VudCIsICJhY3R1YWxEZWxldGVDb3VudCIsICJ0byIsICJhY3R1YWxTdGFydCIsICIkYXNzaWduIiwgImFzc2lnbiIsICJvYmplY3RBc3NpZ24iLCAiQiIsICJhbHBoYWJldCIsICJjaHIiLCAiVCIsICJuYXRpdmVHZXRQcm90b3R5cGVPZiIsICJEIiwgInBhcmVudCIsICJlbmdpbmVJc0J1biIsICJCdW4iLCAidmFsaWRhdGVBcmd1bWVudHNMZW5ndGgiLCAicGFzc2VkIiwgInJlcXVpcmVkIiwgIkVOR0lORV9JU19CVU4iLCAiVVNFUl9BR0VOVCIsICJXUkFQIiwgInNjaGVkdWxlcnNGaXgiLCAic2NoZWR1bGVyIiwgImhhc1RpbWVBcmciLCAiZmlyc3RQYXJhbUluZGV4IiwgImhhbmRsZXIiLCAidGltZW91dCIsICJib3VuZEFyZ3MiLCAicGFyYW1zIiwgInNldEludGVydmFsIiwgInNldFRpbWVvdXQiLCAiRW1pdHRlciIsICJfY2FsbGJhY2tzIiwgIk1hcCIsICJldmVudCIsICJsaXN0ZW5lciIsICJjYWxsYmFja3MiLCAib25jZSIsICJhcmd1bWVudHNfIiwgImNsZWFyIiwgImRlbGV0ZSIsICJlbWl0IiwgImNhbGxiYWNrc0NvcHkiLCAibGlzdGVuZXJzIiwgImxpc3RlbmVyQ291bnQiLCAidG90YWxDb3VudCIsICJoYXNMaXN0ZW5lcnMiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJyZW1vdmVMaXN0ZW5lciIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgInJlbW92ZUFsbExpc3RlbmVycyIsICJtb2R1bGUiLCAiX2V4dGVuZHMiLCAiX2luaGVyaXRzTG9vc2UiLCAic3ViQ2xhc3MiLCAic3VwZXJDbGFzcyIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIlJlZmVyZW5jZUVycm9yIiwgIm91dHB1dCIsICJuZXh0S2V5IiwgIndpbiIsICJhc3NpZ24kMSIsICJWRU5ET1JfUFJFRklYRVMiLCAiVEVTVF9FTEVNRU5UIiwgInJvdW5kIiwgImFicyIsICJub3ciLCAiRGF0ZSIsICJwcmVmaXhlZCIsICJwcm9wZXJ0eSIsICJwcmVmaXgiLCAicHJvcCIsICJjYW1lbFByb3AiLCAidG9VcHBlckNhc2UiLCAiUFJFRklYRURfVE9VQ0hfQUNUSU9OIiwgIk5BVElWRV9UT1VDSF9BQ1RJT04iLCAiVE9VQ0hfQUNUSU9OX0NPTVBVVEUiLCAiVE9VQ0hfQUNUSU9OX0FVVE8iLCAiVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTiIsICJUT1VDSF9BQ1RJT05fTk9ORSIsICJUT1VDSF9BQ1RJT05fUEFOX1giLCAiVE9VQ0hfQUNUSU9OX1BBTl9ZIiwgIlRPVUNIX0FDVElPTl9NQVAiLCAidG91Y2hNYXAiLCAiY3NzU3VwcG9ydHMiLCAiQ1NTIiwgInN1cHBvcnRzIiwgImdldFRvdWNoQWN0aW9uUHJvcHMiLCAiU1VQUE9SVF9UT1VDSCIsICJTVVBQT1JUX1BPSU5URVJfRVZFTlRTIiwgIlNVUFBPUlRfT05MWV9UT1VDSCIsICJJTlBVVF9UWVBFX1RPVUNIIiwgIklOUFVUX1RZUEVfTU9VU0UiLCAiQ09NUFVURV9JTlRFUlZBTCIsICJJTlBVVF9TVEFSVCIsICJJTlBVVF9FTkQiLCAiSU5QVVRfQ0FOQ0VMIiwgIkRJUkVDVElPTl9OT05FIiwgIkRJUkVDVElPTl9MRUZUIiwgIkRJUkVDVElPTl9SSUdIVCIsICJESVJFQ1RJT05fVVAiLCAiRElSRUNUSU9OX0RPV04iLCAiRElSRUNUSU9OX0hPUklaT05UQUwiLCAiRElSRUNUSU9OX1ZFUlRJQ0FMIiwgIkRJUkVDVElPTl9BTEwiLCAiUFJPUFNfWFkiLCAiUFJPUFNfQ0xJRU5UX1hZIiwgImVhY2giLCAiY29udGV4dCIsICJib29sT3JGbiIsICJpblN0ciIsICJzdHIiLCAiVG91Y2hBY3Rpb24iLCAibWFuYWdlciIsICJfcHJvdG8iLCAiY29tcHV0ZSIsICJhY3Rpb25zIiwgInRyaW0iLCAidG91Y2hBY3Rpb24iLCAicmVjb2duaXplcnMiLCAicmVjb2duaXplciIsICJlbmFibGUiLCAiZ2V0VG91Y2hBY3Rpb24iLCAiaGFzUGFuWCIsICJoYXNQYW5ZIiwgInByZXZlbnREZWZhdWx0cyIsICJzcmNFdmVudCIsICJkaXJlY3Rpb24iLCAib2Zmc2V0RGlyZWN0aW9uIiwgInNlc3Npb24iLCAicHJldmVudGVkIiwgInByZXZlbnREZWZhdWx0IiwgImhhc05vbmUiLCAiaXNUYXBQb2ludGVyIiwgInBvaW50ZXJzIiwgImlzVGFwTW92ZW1lbnQiLCAiZGlzdGFuY2UiLCAiaXNUYXBUb3VjaFRpbWUiLCAiZGVsdGFUaW1lIiwgInByZXZlbnRTcmMiLCAiaGFzUGFyZW50IiwgIm5vZGUiLCAicGFyZW50Tm9kZSIsICJnZXRDZW50ZXIiLCAicG9pbnRlcnNMZW5ndGgiLCAiY2xpZW50WCIsICJ5IiwgImNsaWVudFkiLCAic2ltcGxlQ2xvbmVJbnB1dERhdGEiLCAidGltZVN0YW1wIiwgImNlbnRlciIsICJkZWx0YVgiLCAiZGVsdGFZIiwgImdldERpc3RhbmNlIiwgInAxIiwgInAyIiwgInNxcnQiLCAiZ2V0QW5nbGUiLCAiYXRhbjIiLCAiUEkiLCAiZ2V0RGlyZWN0aW9uIiwgImdldFZlbG9jaXR5IiwgImNvbXB1dGVJbnB1dERhdGEiLCAiZmlyc3RJbnB1dCIsICJmaXJzdE11bHRpcGxlIiwgIm9mZnNldENlbnRlciIsICJhbmdsZSIsICJvZmZzZXREZWx0YSIsICJwcmV2RGVsdGEiLCAicHJldklucHV0IiwgImV2ZW50VHlwZSIsICJvdmVyYWxsVmVsb2NpdHkiLCAib3ZlcmFsbFZlbG9jaXR5WCIsICJvdmVyYWxsVmVsb2NpdHlZIiwgInNjYWxlIiwgInJvdGF0aW9uIiwgIm1heFBvaW50ZXJzIiwgInZlbG9jaXR5IiwgInZlbG9jaXR5WCIsICJ2ZWxvY2l0eVkiLCAibGFzdCIsICJsYXN0SW50ZXJ2YWwiLCAidiIsICJzcmNFdmVudFRhcmdldCIsICJjb21wb3NlZFBhdGgiLCAiaW5wdXRIYW5kbGVyIiwgInBvaW50ZXJzTGVuIiwgImNoYW5nZWRQb2ludGVyc0xlbiIsICJjaGFuZ2VkUG9pbnRlcnMiLCAiaXNGaXJzdCIsICJpc0ZpbmFsIiwgInJlY29nbml6ZSIsICJzcGxpdFN0ciIsICJhZGRFdmVudExpc3RlbmVycyIsICJ0eXBlcyIsICJyZW1vdmVFdmVudExpc3RlbmVycyIsICJnZXRXaW5kb3dGb3JFbGVtZW50IiwgImRvYyIsICJvd25lckRvY3VtZW50IiwgImRlZmF1bHRWaWV3IiwgIklucHV0IiwgImlucHV0VGFyZ2V0IiwgImRvbUhhbmRsZXIiLCAiZXYiLCAiaW5pdCIsICJldkVsIiwgImV2VGFyZ2V0IiwgImV2V2luIiwgImRlc3Ryb3kiLCAiaW5BcnJheSIsICJmaW5kQnlLZXkiLCAiUE9JTlRFUl9JTlBVVF9NQVAiLCAicG9pbnRlcmRvd24iLCAicG9pbnRlcm1vdmUiLCAicG9pbnRlcnVwIiwgInBvaW50ZXJjYW5jZWwiLCAicG9pbnRlcm91dCIsICJJRTEwX1BPSU5URVJfVFlQRV9FTlVNIiwgIlBPSU5URVJfRUxFTUVOVF9FVkVOVFMiLCAiUE9JTlRFUl9XSU5ET1dfRVZFTlRTIiwgIk1TUG9pbnRlckV2ZW50IiwgIlBvaW50ZXJFdmVudCIsICJQb2ludGVyRXZlbnRJbnB1dCIsICJfSW5wdXQiLCAiX3RoaXMiLCAicG9pbnRlckV2ZW50cyIsICJyZW1vdmVQb2ludGVyIiwgImV2ZW50VHlwZU5vcm1hbGl6ZWQiLCAicG9pbnRlclR5cGUiLCAiaXNUb3VjaCIsICJzdG9yZUluZGV4IiwgInBvaW50ZXJJZCIsICJidXR0b24iLCAidG9BcnJheSIsICJ1bmlxdWVBcnJheSIsICJzb3J0IiwgInJlc3VsdHMiLCAiVE9VQ0hfSU5QVVRfTUFQIiwgInRvdWNoc3RhcnQiLCAidG91Y2htb3ZlIiwgInRvdWNoZW5kIiwgInRvdWNoY2FuY2VsIiwgIlRvdWNoSW5wdXQiLCAidGFyZ2V0SWRzIiwgInRvdWNoZXMiLCAiZ2V0VG91Y2hlcyIsICJ0YXJnZXRUb3VjaGVzIiwgImFsbFRvdWNoZXMiLCAiaWRlbnRpZmllciIsICJjaGFuZ2VkVG91Y2hlcyIsICJjaGFuZ2VkVGFyZ2V0VG91Y2hlcyIsICJ0b3VjaCIsICJNT1VTRV9JTlBVVF9NQVAiLCAibW91c2Vkb3duIiwgIm1vdXNlbW92ZSIsICJtb3VzZXVwIiwgIk1vdXNlSW5wdXQiLCAicHJlc3NlZCIsICJ3aGljaCIsICJERURVUF9USU1FT1VUIiwgInNldExhc3RUb3VjaCIsICJldmVudERhdGEiLCAicHJpbWFyeVRvdWNoIiwgImxhc3RUb3VjaCIsICJsdHMiLCAibGFzdFRvdWNoZXMiLCAicmVjb3JkVG91Y2hlcyIsICJpc1N5bnRoZXRpY0V2ZW50IiwgImR4IiwgImR5IiwgIlRvdWNoTW91c2VJbnB1dCIsICJfbWFuYWdlciIsICJpbnB1dEV2ZW50IiwgImlucHV0RGF0YSIsICJpc01vdXNlIiwgInNvdXJjZUNhcGFiaWxpdGllcyIsICJmaXJlc1RvdWNoRXZlbnRzIiwgIm1vdXNlIiwgImludm9rZUFycmF5QXJnIiwgIlNUQVRFX0ZBSUxFRCIsICJfdW5pcXVlSWQiLCAiZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlciIsICJvdGhlclJlY29nbml6ZXIiLCAic3RhdGVTdHIiLCAiUmVjb2duaXplciIsICJzaW11bHRhbmVvdXMiLCAicmVxdWlyZUZhaWwiLCAicmVjb2duaXplV2l0aCIsICJkcm9wUmVjb2duaXplV2l0aCIsICJyZXF1aXJlRmFpbHVyZSIsICJkcm9wUmVxdWlyZUZhaWx1cmUiLCAiaGFzUmVxdWlyZUZhaWx1cmVzIiwgImNhblJlY29nbml6ZVdpdGgiLCAiYWRkaXRpb25hbEV2ZW50IiwgInRyeUVtaXQiLCAiY2FuRW1pdCIsICJpbnB1dERhdGFDbG9uZSIsICJyZXNldCIsICJUYXBSZWNvZ25pemVyIiwgIl9SZWNvZ25pemVyIiwgInRhcHMiLCAiaW50ZXJ2YWwiLCAidGltZSIsICJ0aHJlc2hvbGQiLCAicG9zVGhyZXNob2xkIiwgInBUaW1lIiwgInBDZW50ZXIiLCAiX3RpbWVyIiwgIl9pbnB1dCIsICJjb3VudCIsICJfdGhpczIiLCAidmFsaWRQb2ludGVycyIsICJ2YWxpZE1vdmVtZW50IiwgInZhbGlkVG91Y2hUaW1lIiwgImZhaWxUaW1lb3V0IiwgInZhbGlkSW50ZXJ2YWwiLCAidmFsaWRNdWx0aVRhcCIsICJfdGhpczMiLCAiY2xlYXJUaW1lb3V0IiwgInRhcENvdW50IiwgIkF0dHJSZWNvZ25pemVyIiwgImF0dHJUZXN0IiwgIm9wdGlvblBvaW50ZXJzIiwgImlzUmVjb2duaXplZCIsICJpc1ZhbGlkIiwgImRpcmVjdGlvblN0ciIsICJQYW5SZWNvZ25pemVyIiwgIl9BdHRyUmVjb2duaXplciIsICJwWCIsICJwWSIsICJkaXJlY3Rpb25UZXN0IiwgImhhc01vdmVkIiwgIlN3aXBlUmVjb2duaXplciIsICJQaW5jaFJlY29nbml6ZXIiLCAiaW5PdXQiLCAiUm90YXRlUmVjb2duaXplciIsICJQcmVzc1JlY29nbml6ZXIiLCAidmFsaWRUaW1lIiwgImRlZmF1bHRzIiwgImRvbUV2ZW50cyIsICJpbnB1dENsYXNzIiwgImNzc1Byb3BzIiwgInVzZXJTZWxlY3QiLCAidG91Y2hTZWxlY3QiLCAidG91Y2hDYWxsb3V0IiwgImNvbnRlbnRab29taW5nIiwgInVzZXJEcmFnIiwgInRhcEhpZ2hsaWdodENvbG9yIiwgInByZXNldCIsICJ0b2dnbGVDc3NQcm9wcyIsICJvbGRDc3NQcm9wcyIsICJNYW5hZ2VyIiwgImhhbmRsZXJzIiwgInN0b3AiLCAiZm9yY2UiLCAic3RvcHBlZCIsICJjdXJSZWNvZ25pemVyIiwgImV4aXN0aW5nIiwgInRhcmdldFJlY29nbml6ZXIiLCAiZXZlbnRzIiwgImdlc3R1cmVFdmVudCIsICJjcmVhdGVFdmVudCIsICJpbml0RXZlbnQiLCAiZ2VzdHVyZSIsICJkaXNwYXRjaEV2ZW50IiwgIlNJTkdMRV9UT1VDSF9JTlBVVF9NQVAiLCAiU2luZ2xlVG91Y2hJbnB1dCIsICJzdGFydGVkIiwgIm5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMiLCAiY2hhbmdlZCIsICJkZXByZWNhdGUiLCAibWVzc2FnZSIsICJkZXByZWNhdGlvbk1lc3NhZ2UiLCAiRXJyb3IiLCAic3RhY2siLCAibG9nIiwgImNvbnNvbGUiLCAid2FybiIsICJleHRlbmQiLCAiZGVzdCIsICJtZXJnZSIsICJpbmhlcml0IiwgImNoaWxkIiwgImJhc2UiLCAiY2hpbGRQIiwgImJhc2VQIiwgIl9zdXBlciIsICJiaW5kRm4iLCAiUmVhbEhhbW1lciIsICJIYW1tZXIiLCAiVkVSU0lPTiIsICJJTlBVVF9NT1ZFIiwgIlNUQVRFX1BPU1NJQkxFIiwgIlNUQVRFX0JFR0FOIiwgIlNUQVRFX0NIQU5HRUQiLCAiU1RBVEVfRU5ERUQiLCAiU1RBVEVfUkVDT0dOSVpFRCIsICJTVEFURV9DQU5DRUxMRUQiLCAiVGFwIiwgIlBhbiIsICJTd2lwZSIsICJQaW5jaCIsICJSb3RhdGUiLCAiUHJlc3MiLCAiREVMRVRFIiwgImRlZXBPYmplY3RBc3NpZ24iLCAibWVyZ2VkIiwgImRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSIsICJzdHJpcERlbGV0ZSIsICJfbGVuMiIsICJfa2V5MiIsICJfY29uY2F0SW5zdGFuY2VQcm9wZXJ0eSIsICJzZXRUaW1lIiwgImdldFRpbWUiLCAiX3N0ZXAiLCAiX2l0ZXJhdG9yIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9SZWZsZWN0JG93bktleXMiLCAicyIsICJjbG9uZSIsICJlcnIiLCAiX2kiLCAiX09iamVjdCRrZXlzIiwgIl9PYmplY3Qka2V5czIiLCAiYUNvbnN0cnVjdG9yIiwgIm5hdGl2ZUNvbnN0cnVjdCIsICJORVdfVEFSR0VUX0JVRyIsICJBUkdTX0JVRyIsICJUYXJnZXQiLCAibmV3VGFyZ2V0IiwgIiRhcmdzIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCAiJCRoIiwgIl9zZXRQcm90b3R5cGVPZiIsICJwIiwgIl9PYmplY3Qkc2V0UHJvdG90eXBlT2YiLCAiX2luaGVyaXRzIiwgIl9PYmplY3QkY3JlYXRlIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgImFzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX09iamVjdCRnZXRQcm90b3R5cGVPZiIsICJfX2VzTW9kdWxlIiwgIiRFcnJvciIsICJURVNUIiwgIlY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSIsICJJU19WOF9PUl9DSEFLUkFfU1RBQ0siLCAiZXJyb3JTdGFja0luc3RhbGxhYmxlIiwgImNsZWFyRXJyb3JTdGFjayIsICJkcm9wRW50cmllcyIsICJwcmVwYXJlU3RhY2tUcmFjZSIsICJFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJSZXN1bHQiLCAiUmVzdWx0UHJvdG90eXBlIiwgIml0ZXJhdGUiLCAidW5ib3VuZEZ1bmN0aW9uIiwgIml0ZXJGbiIsICJBU19FTlRSSUVTIiwgIklTX1JFQ09SRCIsICJJU19JVEVSQVRPUiIsICJJTlRFUlJVUFRFRCIsICJjb25kaXRpb24iLCAiY2FsbEZuIiwgImNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMiLCAiZXhjZXB0aW9ucyIsICJpbnN0YWxsRXJyb3JDYXVzZSIsICJjYXVzZSIsICJpbnN0YWxsRXJyb3JTdGFjayIsICJub3JtYWxpemVTdHJpbmdBcmd1bWVudCIsICIkZGVmYXVsdCIsICIkQWdncmVnYXRlRXJyb3IiLCAiZXJyb3JzIiwgImlzSW5zdGFuY2UiLCAiQWdncmVnYXRlRXJyb3JQcm90b3R5cGUiLCAiZXJyb3JzQXJyYXkiLCAiQWdncmVnYXRlRXJyb3IiLCAiJGxvY2F0aW9uIiwgImRlZmVyIiwgImNoYW5uZWwiLCAicG9ydCIsICJzZXRTcGVjaWVzIiwgIkNPTlNUUlVDVE9SX05BTUUiLCAiYW5JbnN0YW5jZSIsICJzcGVjaWVzQ29uc3RydWN0b3IiLCAiZGVmYXVsdENvbnN0cnVjdG9yIiwgImVuZ2luZUlzSW9zIiwgIklTX0lPUyIsICJJU19OT0RFIiwgInNldEltbWVkaWF0ZSIsICJjbGVhckltbWVkaWF0ZSIsICJEaXNwYXRjaCIsICJNZXNzYWdlQ2hhbm5lbCIsICJjb3VudGVyIiwgInF1ZXVlIiwgIk9OUkVBRFlTVEFURUNIQU5HRSIsICJsb2NhdGlvbiIsICJydW4iLCAicnVubmVyIiwgImV2ZW50TGlzdGVuZXIiLCAiZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlciIsICJwb3N0TWVzc2FnZSIsICJwcm90b2NvbCIsICJob3N0IiwgIm5leHRUaWNrIiwgInBvcnQyIiwgInBvcnQxIiwgIm9ubWVzc2FnZSIsICJpbXBvcnRTY3JpcHRzIiwgInJlbW92ZUNoaWxkIiwgInRhc2siLCAiUXVldWUiLCAiaGVhZCIsICJ0YWlsIiwgIlF1ZXVlJDMiLCAiZW50cnkiLCAibm90aWZ5IiwgInRvZ2dsZSIsICJwcm9taXNlIiwgInRoZW4iLCAiZW5naW5lSXNJb3NQZWJibGUiLCAiUGViYmxlIiwgImVuZ2luZUlzV2Vib3NXZWJraXQiLCAibWFjcm90YXNrIiwgIklTX0lPU19QRUJCTEUiLCAiSVNfV0VCT1NfV0VCS0lUIiwgIk11dGF0aW9uT2JzZXJ2ZXIiLCAiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIsICJQcm9taXNlIiwgInF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciIsICJtaWNyb3Rhc2siLCAiZmx1c2giLCAiZXhpdCIsICJlbnRlciIsICJyZXNvbHZlIiwgImNyZWF0ZVRleHROb2RlIiwgIm9ic2VydmUiLCAiY2hhcmFjdGVyRGF0YSIsICJtaWNyb3Rhc2tfMSIsICJwZXJmb3JtIiwgInByb21pc2VOYXRpdmVDb25zdHJ1Y3RvciIsICJlbmdpbmVJc0Rlbm8iLCAiZW5naW5lSXNCcm93c2VyIiwgIk5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciIsICJJU19CUk9XU0VSIiwgIklTX0RFTk8iLCAiTmF0aXZlUHJvbWlzZVByb3RvdHlwZSIsICJTVUJDTEFTU0lORyIsICJOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQiLCAiUHJvbWlzZVJlamVjdGlvbkV2ZW50IiwgIkZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIiwgIlBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFIiwgIkdMT0JBTF9DT1JFX0pTX1BST01JU0UiLCAiRmFrZVByb21pc2UiLCAicHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uIiwgIlJFSkVDVElPTl9FVkVOVCIsICJQcm9taXNlQ2FwYWJpbGl0eSIsICJyZWplY3QiLCAiJCRyZXNvbHZlIiwgIiQkcmVqZWN0IiwgIm5ld1Byb21pc2VDYXBhYmlsaXR5IiwgIkludGVybmFsIiwgIk93blByb21pc2VDYXBhYmlsaXR5IiwgImhvc3RSZXBvcnRFcnJvcnMiLCAiUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uIiwgIm5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlIiwgIlBST01JU0UiLCAiZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUiLCAiUHJvbWlzZUNvbnN0cnVjdG9yIiwgIlByb21pc2VQcm90b3R5cGUiLCAibmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5IiwgIkRJU1BBVENIX0VWRU5UIiwgIlVOSEFORExFRF9SRUpFQ1RJT04iLCAiaXNUaGVuYWJsZSIsICJjYWxsUmVhY3Rpb24iLCAicmVhY3Rpb24iLCAiZXhpdGVkIiwgIm9rIiwgImZhaWwiLCAicmVqZWN0aW9uIiwgIm9uSGFuZGxlVW5oYW5kbGVkIiwgImlzUmVqZWN0IiwgIm5vdGlmaWVkIiwgInJlYWN0aW9ucyIsICJvblVuaGFuZGxlZCIsICJyZWFzb24iLCAiaXNVbmhhbmRsZWQiLCAidW53cmFwIiwgImludGVybmFsUmVqZWN0IiwgImludGVybmFsUmVzb2x2ZSIsICJ3cmFwcGVyIiwgImV4ZWN1dG9yIiwgIm9uRnVsZmlsbGVkIiwgIm9uUmVqZWN0ZWQiLCAiUHJvbWlzZVdyYXBwZXIiLCAic2V0VG9TdHJpbmdUYWckMSIsICJzZXRTcGVjaWVzJDEiLCAicHJvbWlzZVN0YXRpY3NJbmNvcnJlY3RJdGVyYXRpb24iLCAiY2FwYWJpbGl0eSIsICIkcHJvbWlzZVJlc29sdmUiLCAicmVtYWluaW5nIiwgImFscmVhZHlDYWxsZWQiLCAiY2F0Y2giLCAicmFjZSIsICJwcm9taXNlUmVzb2x2ZSIsICJwcm9taXNlQ2FwYWJpbGl0eSIsICJQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyIiwgIkNIRUNLX1dSQVBQRVIiLCAiYWxsU2V0dGxlZCIsICJzdGF0dXMiLCAiUFJPTUlTRV9BTllfRVJST1IiLCAiYW55IiwgImFscmVhZHlSZXNvbHZlZCIsICJhbHJlYWR5UmVqZWN0ZWQiLCAiZmluYWxseSIsICJvbkZpbmFsbHkiLCAiaXNGdW5jdGlvbiIsICJ3aXRoUmVzb2x2ZXJzIiwgInRyeSIsICJfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkiLCAiX1Byb21pc2UiLCAiX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5IiwgIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCAiYXN5bmNJdGVyYXRvciIsICJ0b1N0cmluZ1RhZyIsICJkZWZpbmUiLCAiR2VuZXJhdG9yIiwgIkNvbnRleHQiLCAibWFrZUludm9rZU1ldGhvZCIsICJ0cnlDYXRjaCIsICJoIiwgIkdlbmVyYXRvckZ1bmN0aW9uIiwgIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwgImciLCAiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwgIl9pbnZva2UiLCAiQXN5bmNJdGVyYXRvciIsICJpbnZva2UiLCAiX19hd2FpdCIsICJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsICJkZWxlZ2F0ZSIsICJtYXliZUludm9rZURlbGVnYXRlIiwgInNlbnQiLCAiX3NlbnQiLCAiZGlzcGF0Y2hFeGNlcHRpb24iLCAiYWJydXB0IiwgInJlc3VsdE5hbWUiLCAibmV4dExvYyIsICJwdXNoVHJ5RW50cnkiLCAidHJ5TG9jIiwgImNhdGNoTG9jIiwgImZpbmFsbHlMb2MiLCAiYWZ0ZXJMb2MiLCAidHJ5RW50cmllcyIsICJyZXNldFRyeUVudHJ5IiwgImNvbXBsZXRpb24iLCAiaXNOYU4iLCAiZGlzcGxheU5hbWUiLCAiaXNHZW5lcmF0b3JGdW5jdGlvbiIsICJtYXJrIiwgImF3cmFwIiwgImFzeW5jIiwgInBvcCIsICJydmFsIiwgImhhbmRsZSIsICJjb21wbGV0ZSIsICJmaW5pc2giLCAiZGVsZWdhdGVZaWVsZCIsICJydW50aW1lIiwgInJlZ2VuZXJhdG9yIiwgInJlZ2VuZXJhdG9yUnVudGltZSIsICJhY2NpZGVudGFsU3RyaWN0TW9kZSIsICJhcnJheUJ1ZmZlck5vbkV4dGVuc2libGUiLCAiQXJyYXlCdWZmZXIiLCAiYnVmZmVyIiwgImlzRXh0ZW5zaWJsZSIsICJBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUiLCAiJGlzRXh0ZW5zaWJsZSIsICJvYmplY3RJc0V4dGVuc2libGUiLCAiZnJlZXppbmciLCAicHJldmVudEV4dGVuc2lvbnMiLCAiZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlIiwgIkZSRUVaSU5HIiwgIlJFUVVJUkVEIiwgInNldE1ldGFkYXRhIiwgIm9iamVjdElEIiwgIndlYWtEYXRhIiwgIm1ldGEiLCAiaW50ZXJuYWxNZXRhZGF0YU1vZHVsZSIsICJmYXN0S2V5IiwgImdldFdlYWtEYXRhIiwgIm9uRnJlZXplIiwgIkludGVybmFsTWV0YWRhdGFNb2R1bGUiLCAiaW50ZXJuYWxTdGF0ZUdldHRlckZvciIsICJjb2xsZWN0aW9uIiwgImNvbW1vbiIsICJJU19XRUFLIiwgIkFEREVSIiwgImV4cG9ydGVkIiwgIklTX0FEREVSIiwgImdldENvbnN0cnVjdG9yIiwgInNldFN0cm9uZyIsICJkZWZpbmVCdWlsdElucyIsICJ1bnNhZmUiLCAiY29sbGVjdGlvblN0cm9uZyIsICJwcmV2aW91cyIsICJnZXRFbnRyeSIsICJyZW1vdmVkIiwgIklURVJBVE9SX05BTUUiLCAiZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUiLCAiZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlIiwgIiRzb21lIiwgIm1lcmdlU29ydCIsICJjb21wYXJlZm4iLCAibWlkZGxlIiwgImluc2VydGlvblNvcnQiLCAibGxlbmd0aCIsICJybGVuZ3RoIiwgImxpbmRleCIsICJyaW5kZXgiLCAiYXJyYXlTb3J0IiwgImZpcmVmb3giLCAiZW5naW5lRmZWZXJzaW9uIiwgImVuZ2luZUlzSWVPckVkZ2UiLCAid2Via2l0IiwgImVuZ2luZVdlYmtpdFZlcnNpb24iLCAiaW50ZXJuYWxTb3J0IiwgIkZGIiwgIklFX09SX0VER0UiLCAiVjgiLCAiV0VCS0lUIiwgIm5hdGl2ZVNvcnQiLCAiRkFJTFNfT05fVU5ERUZJTkVEIiwgIkZBSUxTX09OX05VTEwiLCAiU1RSSUNUX01FVEhPRCIsICJTVEFCTEVfU09SVCIsICJjb2RlIiwgImZyb21DaGFyQ29kZSIsICJpdGVtc0xlbmd0aCIsICJhcnJheUxlbmd0aCIsICJnZXRSYW5kb21WYWx1ZXMiLCAicm5kczgiLCAiVWludDhBcnJheSIsICJybmciLCAiY3J5cHRvIiwgImJ5dGVUb0hleCIsICJuYXRpdmUiLCAicmFuZG9tVVVJRCIsICJ2NCIsICJidWYiLCAicm5kcyIsICJpc0lkIiwgImRlbGF5IiwgIkluZmluaXR5IiwgInNldE9wdGlvbnMiLCAiX2ZsdXNoSWZOZWVkZWQiLCAiX2V4dGVuZGVkIiwgIm1lIiwgIl9sZW4iLCAiX2tleSIsICJfcXVldWUiLCAiX3RpbWVvdXQiLCAiX3NldFRpbWVvdXQiLCAiX3NwbGljZUluc3RhbmNlUHJvcGVydHkiLCAiRGF0YVNldFBhcnQiLCAic2VuZGVySWQiLCAiX3N1YnNjcmliZXJzIiwgInN1YnNjcmliZXIiLCAiU2V0IiwgIkRhdGFTdHJlYW0iLCAicGFpcnMiLCAiX3BhaXJzIiwgIl9zdGVwJHZhbHVlIiwgInQwIiwgIl9pdGVyYXRvcjIiLCAiX3N0ZXAyIiwgIl9zdGVwMiR2YWx1ZSIsICJfaXRlcmF0b3IzIiwgIl9zdGVwMyIsICJfc3RlcDMkdmFsdWUiLCAiX2l0ZXJhdG9yNCIsICJfc3RlcDQiLCAiX3N0ZXA0JHZhbHVlIiwgIl9jb250ZXh0NSIsICJwYWlyIiwgIl9jb250ZXh0NiIsICJfc3RlcDUiLCAiX2l0ZXJhdG9yNSIsICJfc3RlcDUkdmFsdWUiLCAiX01hcCIsICJfU2V0IiwgInRvSWRBcnJheSIsICJ0b0l0ZW1BcnJheSIsICJfc3RlcDYiLCAiX2l0ZXJhdG9yNiIsICJfc3RlcDYkdmFsdWUiLCAiX1N5bWJvbCRpdGVyYXRvcjIiLCAiX2NhbGxlZSIsICJfaXRlcmF0b3I3IiwgIl9zdGVwNyIsICJfc3RlcDckdmFsdWUiLCAiX2NvbnRleHQ3IiwgIl9zdGVwOCIsICJfaXRlcmF0b3I4IiwgIl9zdGVwOCR2YWx1ZSIsICJfY2FsbGVlMiIsICJfaXRlcmF0b3I5IiwgIl9zdGVwOSIsICJfc3RlcDkkdmFsdWUiLCAiX2NvbnRleHQ4IiwgIl9nZXRJdGVyYXRvciIsICJjdXJyIiwgIm1heEl0ZW0iLCAibWF4VmFsdWUiLCAiX2N1cnIkdmFsdWUiLCAibWluSXRlbSIsICJtaW5WYWx1ZSIsICJfY3VyciR2YWx1ZTIiLCAiYWNjdW11bGF0b3IiLCAiX3N0ZXAxMCIsICJfaXRlcmF0b3IxMCIsICJfc3RlcDEwJHZhbHVlIiwgIl9jb250ZXh0OSIsICJfc29ydEluc3RhbmNlUHJvcGVydHkiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJpZEEiLCAiaXRlbUEiLCAiX3JlZjQiLCAiaWRCIiwgIml0ZW1CIiwgIkRhdGFTZXQiLCAiX0RhdGFTZXRQYXJ0IiwgIl9jcmVhdGVTdXBlciIsICJfb3B0aW9ucyIsICJfZGF0YSIsICJfaWRQcm9wIiwgImZpZWxkSWQiLCAiYWRkZWRJZHMiLCAiaWRzVG9BZGQiLCAiZCIsICJfc29tZUluc3RhbmNlUHJvcGVydHkiLCAiX2FkZEl0ZW0iLCAiX3RyaWdnZXIiLCAidXBkYXRlZElkcyIsICJ1cGRhdGVkRGF0YSIsICJpZFByb3AiLCAiYWRkT3JVcGRhdGUiLCAib3JpZ0lkIiwgImZ1bGxJdGVtIiwgIm9sZEl0ZW0iLCAiX09iamVjdCRhc3NpZ24iLCAiX3VwZGF0ZUl0ZW0iLCAiX3RoaXM0IiwgInVwZGF0ZUV2ZW50RGF0YSIsICJ1cGRhdGVzIiwgImlkcyIsICJfaXRlbSIsICJyZXR1cm5UeXBlIiwgIml0ZW1JZHMiLCAiaXRlbUlkIiwgIl9rZXlzSW5zdGFuY2VQcm9wZXJ0eSIsICJvcmRlciIsICJfc29ydCIsICJmaWVsZHMiLCAiX2ZpbHRlckZpZWxkcyIsICJyZXN1bHRhbnQiLCAibWFwcGVkSXRlbXMiLCAiZmlsdGVyZWRJdGVtIiwgImZpZWxkIiwgImF2IiwgImJ2IiwgInJlbW92ZWRJZHMiLCAicmVtb3ZlZEl0ZW1zIiwgImlkZW50IiwgIm1heEZpZWxkIiwgIl92YWx1ZXNJbnN0YW5jZVByb3BlcnR5IiwgIml0ZW1GaWVsZCIsICJtaW5GaWVsZCIsICJleGlzdHMiLCAidXVpZDQiLCAiX0pTT04kc3RyaW5naWZ5IiwgIl9vYmplY3RTcHJlYWQiLCAiX2VudHJpZXNJbnN0YW5jZVByb3BlcnR5IiwgIkRhdGFWaWV3IiwgIl9saXN0ZW5lciIsICJfb25FdmVudCIsICJzZXREYXRhIiwgImdldERhdGFTZXQiLCAiZ2V0SWRzIiwgIl9pZHMiLCAib2xkSWRzIiwgIm5ld0lkcyIsICJ2aWV3T3B0aW9ucyIsICJ0aGlzRmlsdGVyIiwgIm9wdGlvbnNGaWx0ZXIiLCAiZGVmYXVsdEZpbHRlciIsICJzdHJlYW0iLCAiX3RoaXMkX2RhdGEiLCAib2xkSXRlbXMiLCAidXBkYXRlZEl0ZW1zIiwgImlzRGF0YVNldExpa2UiLCAiZGlzdGluY3QiLCAidXBkYXRlT25seSIsICJjeCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJjYWNoZSIsICJwcm90b3R5cGUiLCAia2V5cyIsICJkZXNjcmlwdG9ycyIsICJmaWx0ZXIiLCAicG9zaXRpb24iLCAibWF0Y2hlcyIsICJoYXNPd25Qcm9wZXJ0eSIsICJyZWR1Y2VyIiwgInZhbHVlIiwgImRlbGltaXRlciIsICJkZWZpbmUiLCAic2l6ZSIsICJsZW5ndGgiLCAidG9rZW4iLCAiZmlsdGVyIiwgImVhY2giLCAidG9rZW4iLCAidmFsdWUiLCAibWF0Y2giLCAicHJvdG90eXBlIiwgInZhbHVlIiwgInRvU3RyaW5nIiwgImVhY2giLCAiZW5jb2RlIiwgInZhbHVlIiwgIm1hdGNoIiwgImtleXMiLCAidmFsdWUiLCAiaXNGb3JtRGF0YSIsICJpc0ZpbGVMaXN0IiwgInRyYW5zaXRpb25hbCIsICJsaW5lIiwgInZhbHVlIiwgIm1hdGNoIiwgImZpbHRlciIsICJjaGFyIiwgInNlbGYiLCAia2V5cyIsICJjb21wdXRlZCIsICJwcm90b3R5cGUiLCAidmFsdWUiLCAidmFsaWRhdGVTdGF0dXMiLCAibWF0Y2giLCAibWluIiwgIm5vdyIsICJub3ciLCAiZmx1c2giLCAidmFsdWUiLCAibWF0Y2giLCAibWVyZ2UiLCAidG9rZW4iLCAidmFsdWUiLCAidHJhbnNpdGlvbmFsIiwgImxlbmd0aCIsICJzaWduYWwiLCAidmFsdWUiLCAiZG9uZSIsICJyZXMiLCAibGVuZ3RoIiwgImZsdXNoIiwgInZhbHVlIiwgImxlbmd0aCIsICJ2ZXJzaW9uIiwgInZhbHVlIiwgImtleXMiLCAidmFsaWRhdG9ycyIsICJ0cmFuc2l0aW9uYWwiLCAidG9rZW4iLCAidmFsdWUiLCAiQXhpb3MiLCAiQXhpb3NFcnJvciIsICJDYW5jZWxlZEVycm9yIiwgImlzQ2FuY2VsIiwgIkNhbmNlbFRva2VuIiwgIlZFUlNJT04iLCAiYWxsIiwgImlzQXhpb3NFcnJvciIsICJzcHJlYWQiLCAidG9Gb3JtRGF0YSIsICJBeGlvc0hlYWRlcnMiLCAiSHR0cFN0YXR1c0NvZGUiLCAibWVyZ2VDb25maWciLCAidmFsdWUiLCAiaUxvYWRlZENoaWxkcmVuIiwgInZhbHVlIiwgImN5Y2xlQ2hlY2siLCAibm9kZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImtleXMiLCAibm9kZSIsICJwcmVmaXgiLCAidXNlRGVwcmVjYXRlZEdlbmVyYXRlZEh0bWxJZCIsICJfcmVmIiwgInVzZU5ld0dlbmVyYXRlZEh0bWxJZCIsICJfcmVmMiIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJyIiwgIm8iLCAiaXNPYmplY3QiLCAiaXNJbnZlcnNlQ29sb3JNb2RlIiwgImdldENvbG9yTW9kZSIsICJnZXRPbiIsICJub2RlIiwgInNldE9uIiwgInZhbHVlIiwgIkNvbXB1dGVkIiwgImJhc2UiLCAiX3JlZiIsICJfcmVmMiIsICJnZXRDb21wdXRlZCIsICJvdmVyIiwgImJ1aWxkVGhlbWUiLCAiZ2V0UHJvdG90eXBlT2YiLCAicHJvdG90eXBlIiwgImtleSIsICJwcm9wZXJ0eSIsICJnZXQiLCAib3duS2V5cyIsICJtZXJnZURlZXAiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgInJnYiIsICJyZ2IiLCAibWF4IiwgInJvdW5kIiwgInJvdW5kIiwgImNzcyIsICJyZ2IiLCAiaHNsIiwgInJnYiIsICJyb3VuZCIsICJtaW4iLCAiZmxvb3IiLCAibWluIiwgIm1heCIsICJyZ2IyaHNsIiwgInBvdyIsICJjb3MiLCAic3FydCIsICJyb3VuZCIsICJudW0iLCAicm91bmQiLCAicm5kIiwgInJvdW5kIiwgInJnYiIsICJwb3ciLCAiYWJzIiwgInBvdyIsICJzaWduIiwgImFicyIsICJsYWIiLCAicG93IiwgInRlc3QiLCAicmdiIiwgInJnYiIsICJsY2giLCAidmFsdWUiLCAic3FydCIsICJwb3ciLCAicG93IiwgInNxcnQiLCAiUEkiLCAiY29zIiwgInNpbiIsICJhdGFuMiIsICJjb2xvcnMiLCAicmdiIiwgInBvdyIsICJjb2xvcnMiLCAidmFsdWUiLCAiZiIsICJfcG9zIiwgImNvbG9ycyIsICJsYWIiLCAicG93IiwgInNpbiIsICJjb3MiLCAibGlnaHRuZXNzIiwgImZsb29yIiwgImxvZyIsICJwb3ciLCAiZmxvb3IiLCAibnVtIiwgIm1pbiIsICJtYXgiLCAibGltaXRzIiwgInZhbHVlIiwgInNxcnQiLCAicG93IiwgIm1pbiIsICJtYXgiLCAiYXRhbjIiLCAiYWJzIiwgImNvcyIsICJzaW4iLCAiUEkiLCAiY29sb3JzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgImZsYXR0ZW4iLCAiX3JlZiIsICJldWlQYWxldHRlQ29sb3JCbGluZCIsICJfcmVmMiIsICJjb2xvcnMiLCAiYmFzZSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2xvb3AiLCAiaSIsICJldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQiLCAiaW5PcmlnaW5hbEZvcm1hdCIsICJ0cmFuc3BhcmVudGl6ZSIsICJ0aW50IiwgInNoYWRlIiwgInRpbnRPclNoYWRlIiwgImxpZ2h0bmVzcyIsICJkYXJrZW4iLCAiX3R5cGVvZiIsICJvIiwgIm1ha2VIaWdoQ29udHJhc3RDb2xvciIsICJsaWdodG5lc3MiLCAibWFrZURpc2FibGVkQ29udHJhc3RDb2xvciIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiY29sb3JzIiwgIl9yZWY2IiwgIl9yZWY3IiwgIl9yZWY4IiwgIl9yZWY5IiwgIl9yZWYxMCIsICJfcmVmMTEiLCAiX3JlZjEyIiwgIl9yZWYxMyIsICJfcmVmMTQiLCAiX3JlZjE1IiwgIl9yZWYxNiIsICJfcmVmMTciLCAiX3JlZjE4IiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl90eXBlb2YiLCAibyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl90eXBlb2YiLCAibG9naWNhbENTUyIsICJwcm9wZXJ0eSIsICJ2YWx1ZSIsICJsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrIiwgImNhbWVsQ2FzZSIsICJsb2dpY2FsU3R5bGUiLCAicHJvcGVydHkiLCAidmFsdWUiLCAiX2RlZmluZVByb3BlcnR5IiwgImxvZ2ljYWxTaXplQ1NTIiwgImxvZ2ljYWxUZXh0QWxpZ25DU1MiLCAidmFsdWUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgImxvZ2ljYWxTaG9ydGhhbmRDU1MiLCAicHJvcGVydHkiLCAidmFsdWUiLCAibG9naWNhbEJvcmRlclJhZGl1c0NTUyIsICJfcmVmIiwgIl9yZWYyIiwgIl9zbGljZWRUb0FycmF5IiwgIl90eXBlb2YiLCAibyIsICJfd3JhcFJlZ0V4cCIsICJlIiwgInIiLCAidCIsICJtYXRoV2l0aFVuaXRzIiwgInZhbHVlIiwgIm1hdGNoZXMiLCAiX3R5cGVvZiIsICJvIiwgInNpemVUb1BpeGVsIiwgImJhc2UiLCAiX3JlZiIsICJiYXNlIiwgImZvbnQiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiX3JlZjYiLCAiX3JlZjciLCAiX3JlZjgiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfcmVmIiwgIl9yZWYyIiwgImJhc2UiLCAiX3JlZiIsICJjb2xvcnMiLCAiZm9jdXMiLCAiZW1pdEV1aVByb3ZpZGVyV2FybmluZyIsICJwcm92aWRlck1lc3NhZ2UiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlN0eWxlU2hlZXQiLCAiaHlkcmF0ZSIsICJzaGVldCIsICJmbHVzaCIsICJhYnMiLCAidmFsdWUiLCAibGVuZ3RoIiwgInRyaW0iLCAiYXBwZW5kIiwgImxlbmd0aCIsICJ2YWx1ZSIsICJ0cmltIiwgInZhbHVlIiwgImxlbmd0aCIsICJwcm9wZXJ0eSIsICJjaGFyYWN0ZXIiLCAiY2hhcmFjdGVycyIsICJhcHBlbmQiLCAic2l6ZSIsICJhYnMiLCAidHJpbSIsICJsZW5ndGgiLCAic3RyaW5naWZ5IiwgImxlbmd0aCIsICJ3ZWFrTWVtb2l6ZSIsICJmdW5jIiwgImNhY2hlIiwgImNhY2hlIiwgImlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyIsICJjaGFyYWN0ZXIiLCAidG9SdWxlcyIsICJnZXRSdWxlcyIsICJ2YWx1ZSIsICJjb21wYXQiLCAicmVtb3ZlTGFiZWwiLCAibGVuZ3RoIiwgInByZWZpeGVyIiwgImNyZWF0ZUNhY2hlIiwgIm5vZGUiLCAic3RyaW5naWZ5IiwgInN0eWxpcyIsICJzdHlsZXMiLCAic2hlZXQiLCAiY2FjaGUiLCAiY2xhc3NOYW1lcyIsICJyZWdpc3RlclN0eWxlcyIsICJjYWNoZSIsICJpbnNlcnRTdHlsZXMiLCAiaXNEZXZlbG9wbWVudCIsICJpc0N1c3RvbVByb3BlcnR5IiwgInByb3BlcnR5IiwgImlzUHJvY2Vzc2FibGVWYWx1ZSIsICJ2YWx1ZSIsICJwcm9jZXNzU3R5bGVWYWx1ZSIsICJtYXRjaCIsICJrZXlmcmFtZXMiLCAibmV4dCIsICJzdHlsZXMiLCAic3RyaW5nIiwgIlJlYWN0IiwgInN5bmNGYWxsYmFjayIsICJ1c2VJbnNlcnRpb25FZmZlY3QiLCAiaXNEZXZlbG9wbWVudCIsICJ3aXRoRW1vdGlvbkNhY2hlIiwgImZ1bmMiLCAiY2FjaGUiLCAiZ2V0VGhlbWUiLCAiVGhlbWVQcm92aWRlciIsICJjcmVhdGVFbW90aW9uUHJvcHMiLCAiSW5zZXJ0aW9uIiwgIl9yZWYiLCAiY2FjaGUiLCAiaXNEZXZlbG9wbWVudCIsICJSZWFjdCIsICJqc3giLCAiY2FjaGUiLCAic3R5bGVzIiwgInNoZWV0IiwgIm5vZGUiLCAia2V5ZnJhbWVzIiwgInRvU3RyaW5nIiwgIl9leHRlbmRzIiwgInVzZUV1aVRoZW1lIiwgIndpdGhFdWlUaGVtZSIsICJDb21wb25lbnQiLCAiUmVuZGVyIiwgIlJlbmRlcldpdGhFdWlUaGVtZSIsICJfcmVmIiwgInRocm90dGxlIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJzb3J0TWFwQnlMYXJnZVRvU21hbGxWYWx1ZXMiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJzb3J0TWFwQnlTbWFsbFRvTGFyZ2VWYWx1ZXMiLCAiX3JlZjUiLCAiX3JlZjYiLCAiX3JlZjciLCAiX3JlZjgiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIkN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIiLCAiX3JlZiIsICJ0aHJvdHRsZSIsICJpbXBvcnRfcmVhY3QiLCAidXNlQ3VycmVudEV1aUJyZWFrcG9pbnQiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgImNsb25lRWxlbWVudFdpdGhDc3MiLCAiZXVpU3R5bGlzUHJlZml4ZXIiLCAicHJlZml4IiwgInZhbHVlIiwgImxlbmd0aCIsICJjYWNoZSIsICJtZXJnZSIsICJjc3MiLCAiY3JlYXRlRW1vdGlvbiIsICJ2YWx1ZSIsICJrZXlmcmFtZXMiLCAiYW5pbWF0aW9uIiwgImluamVjdEdsb2JhbCIsICJjeCIsICJoeWRyYXRlIiwgImZsdXNoIiwgImNsYXNzbmFtZXMiLCAiY3NzIiwgImltcG9ydF9yZWFjdCIsICJFdWlFbW90aW9uVGhlbWVQcm92aWRlciIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAidXNlVXBkYXRlRWZmZWN0IiwgImltcG9ydF9yZWFjdCIsICJ1c2VDb21iaW5lZFJlZnMiLCAibm9kZSIsICJzZXRNdWx0aXBsZVJlZnMiLCAiX2V4dGVuZHMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIkV1aVRoZW1lTWVtb2l6ZWRTdHlsZXNQcm92aWRlciIsICJfcmVmIiwgImdldE1lbW9pemVkU3R5bGVzIiwgInVzZUV1aU1lbW9pemVkU3R5bGVzIiwgIndpdGhFdWlTdHlsZXNNZW1vaXplciIsICJDb21wb25lbnQiLCAiUmVuZGVyIiwgIlJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciIsICJfcmVmMiIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJFdWlUaGVtZVByb3ZpZGVyIiwgIl9yZWYiLCAic2V0R2xvYmFsQ1NTVmFyaWFibGVzIiwgImlzRXF1YWwiLCAiY3NzIiwgIl9yZWYyIiwgImNsb25lRWxlbWVudCIsICJSZWFjdCIsICJ1c2VJc1dpdGhpbkJyZWFrcG9pbnRzIiwgIm1pbiIsICJfdHlwZW9mIiwgIm8iLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJpbWl0aXZlIiwgIkNhbnZhc1RleHRVdGlscyIsICJfcmVmIiwgImZvbnQiLCAiZ2V0IiwgImltcG9ydF9yZWFjdCIsICJoYXNDaGFyc1RvUmVwbGFjZSIsICJjaGFyIiwgIm9uVGFidWxhckNvcHkiLCAiVmlzdWFsbHlIaWRlIiwgIl9yZWYiLCAiT3ZlcnJpZGVDb3BpZWRUYWJ1bGFyQ29udGVudCIsICJfcmVmMiIsICJSZWFjdCIsICJmaW5kRWxlbWVudEJ5U2VsZWN0b3JPclJlZiIsICJub2RlIiwgImlzVW5kZWZpbmVkIiwgInZhbHVlIiwgImlzTnVsbCIsICJpc05pbCIsICJpc0RhdGUiLCAidmFsdWUiLCAibW9tZW50IiwgImlzRnVuY3Rpb24iLCAidmFsdWUiLCAiX2lzRnVuY3Rpb24iLCAiaXNBcnJheSIsICJfaXNBcnJheSIsICJpc1N0cmluZyIsICJfaXNTdHJpbmciLCAiaXNCb29sZWFuIiwgIl9pc0Jvb2xlYW4iLCAiaXNOdW1iZXIiLCAiX2lzTnVtYmVyIiwgImlzTmFOIiwgIl9pc05hTiIsICJpc09iamVjdCIsICJfaXNPYmplY3QiLCAiZm9ybWF0Qm9vbGVhbiIsICJ2YWx1ZSIsICJfcmVmIiwgImltcG9ydF9tb21lbnQiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiY2FsZW5kYXIiLCAidmFsdWUiLCAibW9tZW50IiwgImZvcm1hdERhdGUiLCAiaXNTdHJpbmciLCAiaXNGdW5jdGlvbiIsICJmb3JtYXROdW1iZXIiLCAidmFsdWUiLCAicm91bmQiLCAiaXNTdHJpbmciLCAibnVtZXJhbCIsICJmb3JtYXRUZXh0IiwgInZhbHVlIiwgImZvcm1hdEF1dG8iLCAidmFsdWUiLCAiaXNOYU4iLCAiaXNTdHJpbmciLCAiaXNEYXRlIiwgImlzQm9vbGVhbiIsICJpc051bWJlciIsICJpc0FycmF5IiwgIl90eXBlb2YiLCAibyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJnZXRCdWZmZXJWYWx1ZXMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX3JlZiIsICJwb3NpdGlvbiIsICJfcmVmMiIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3JlZjQiLCAiX3JlZjUiLCAibm9kZSIsICJnZXRTZWN1cmVSZWxGb3JUYXJnZXQiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X2dldCIsICJnZXQiLCAib2JqZWN0IiwgIl9nZXQiLCAidjEiLCAicmV2ZXJzZSIsICJ2YWx1ZSIsICJ2YWx1ZSIsICJnZXRUcmFuc2l0aW9uVGltaW5ncyIsICJnZXRXYWl0RHVyYXRpb24iLCAicGVyZm9ybU9uRnJhbWUiLCAib25GcmFtZSIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiZXVpQmFja2dyb3VuZENvbG9yIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3RpbnRPclNoYWRlIiwgImNvbG9yIiwgIl9ldWlCYWNrZ3JvdW5kQ29sb3JzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgInVzZUV1aUJhY2tncm91bmRDb2xvckNTUyIsICJldWlTY3JvbGxCYXJTdHlsZXMiLCAiX3JlZiIsICJjb2xvcnMiLCAic2l6ZSIsICJfcmVmMiIsICJldWlPdmVyZmxvd1NoYWRvd1N0eWxlcyIsICJfcmVmMyIsICJzaXplIiwgIl9yZWY0IiwgImV1aVlTY3JvbGwiLCAiX3JlZjUiLCAiZXVpWVNjcm9sbFdpdGhTaGFkb3dzIiwgIl9yZWY3IiwgImV1aVhTY3JvbGwiLCAiZXVpWFNjcm9sbFdpdGhTaGFkb3dzIiwgImV1aUZ1bGxIZWlnaHQiLCAiX3R5cGVvZiIsICJvIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJvd25LZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJldWlQYWRkaW5nU2l6ZSIsICJfcmVmIiwgInNpemUiLCAiX2dldEV1aVBhZGRpbmdTaXplIiwgIl9ldWlQYWRkaW5nU2lkZXNBbmRTaXplcyIsICJfZ2VuZXJhdGVTaXplU3R5bGVzIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9zbGljZWRUb0FycmF5IiwgInVzZUV1aVBhZGRpbmdDU1MiLCAiZXVpT3V0bGluZSIsICJfcmVmIiwgImV1aUZvY3VzUmluZyIsICJldWlGb250U2l6ZSIsICJfcmVmIiwgImV1aVRleHRCcmVha1dvcmQiLCAiZXVpVGV4dFRydW5jYXRlIiwgImV1aU51bWJlckZvcm1hdCIsICJfcmVmMiIsICJldWlCcmVha3BvaW50IiwgIl9yZWYiLCAiZXVpTWluQnJlYWtwb2ludCIsICJfcmVmMiIsICJzaXplIiwgImV1aU1heEJyZWFrcG9pbnQiLCAiX3JlZjMiLCAic2l6ZSIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJFdWlHbG9iYWxTdHlsZXMiLCAiX3JlZiIsICJiYXNlIiwgImNvbG9ycyIsICJmb250IiwgInN0eWxlcyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RlbXBsYXRlT2JqZWN0MiIsICJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwgIl90ZW1wbGF0ZU9iamVjdCIsICJldWlBbmltU2xpZGVJblVwIiwgInNpemUiLCAiX3RlbXBsYXRlT2JqZWN0MiIsICJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwgImV1aVNjcmVlblJlYWRlck9ubHkiLCAiRXVpU2NyZWVuUmVhZGVyT25seSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJFdWlTY3JlZW5SZWFkZXJMaXZlIiwgIl9yZWYiLCAidG9nZ2xlIiwgIlByb3BUeXBlcyIsICJjYW5kaWRhdGVTZWxlY3RvcnMiLCAiY2FuZGlkYXRlU2VsZWN0b3IiLCAiam9pbiIsICJOb0VsZW1lbnQiLCAiRWxlbWVudCIsICJtYXRjaGVzIiwgInByb3RvdHlwZSIsICJtc01hdGNoZXNTZWxlY3RvciIsICJ3ZWJraXRNYXRjaGVzU2VsZWN0b3IiLCAiZ2V0Um9vdE5vZGUiLCAiZWxlbWVudCIsICJvd25lckRvY3VtZW50IiwgImdldENhbmRpZGF0ZXMiLCAiZWwiLCAiaW5jbHVkZUNvbnRhaW5lciIsICJmaWx0ZXIiLCAiY2FuZGlkYXRlcyIsICJBcnJheSIsICJzbGljZSIsICJhcHBseSIsICJxdWVyeVNlbGVjdG9yQWxsIiwgImNhbGwiLCAidW5zaGlmdCIsICJnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkiLCAiZWxlbWVudHMiLCAib3B0aW9ucyIsICJlbGVtZW50c1RvQ2hlY2siLCAiZnJvbSIsICJsZW5ndGgiLCAic2hpZnQiLCAidGFnTmFtZSIsICJhc3NpZ25lZCIsICJhc3NpZ25lZEVsZW1lbnRzIiwgImNvbnRlbnQiLCAiY2hpbGRyZW4iLCAibmVzdGVkQ2FuZGlkYXRlcyIsICJmbGF0dGVuIiwgInB1c2giLCAic2NvcGUiLCAidmFsaWRDYW5kaWRhdGUiLCAiaW5jbHVkZXMiLCAic2hhZG93Um9vdCIsICJnZXRTaGFkb3dSb290IiwgInZhbGlkU2hhZG93Um9vdCIsICJzaGFkb3dSb290RmlsdGVyIiwgImdldFRhYmluZGV4IiwgIm5vZGUiLCAiaXNTY29wZSIsICJ0YWJJbmRleCIsICJ0ZXN0IiwgImlzQ29udGVudEVkaXRhYmxlIiwgImlzTmFOIiwgInBhcnNlSW50IiwgImdldEF0dHJpYnV0ZSIsICJzb3J0T3JkZXJlZFRhYmJhYmxlcyIsICJhIiwgImIiLCAiZG9jdW1lbnRPcmRlciIsICJpc0lucHV0IiwgImlzSGlkZGVuSW5wdXQiLCAidHlwZSIsICJpc0RldGFpbHNXaXRoU3VtbWFyeSIsICJyIiwgInNvbWUiLCAiY2hpbGQiLCAiZ2V0Q2hlY2tlZFJhZGlvIiwgIm5vZGVzIiwgImZvcm0iLCAiaSIsICJjaGVja2VkIiwgImlzVGFiYmFibGVSYWRpbyIsICJuYW1lIiwgInJhZGlvU2NvcGUiLCAicXVlcnlSYWRpb3MiLCAicmFkaW9TZXQiLCAid2luZG93IiwgIkNTUyIsICJlc2NhcGUiLCAiZXJyIiwgImNvbnNvbGUiLCAiZXJyb3IiLCAibWVzc2FnZSIsICJpc1JhZGlvIiwgImlzTm9uVGFiYmFibGVSYWRpbyIsICJpc1plcm9BcmVhIiwgImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsICJ3aWR0aCIsICJoZWlnaHQiLCAiaXNIaWRkZW4iLCAiX3JlZiIsICJkaXNwbGF5Q2hlY2siLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJ2aXNpYmlsaXR5IiwgImlzRGlyZWN0U3VtbWFyeSIsICJub2RlVW5kZXJEZXRhaWxzIiwgInBhcmVudEVsZW1lbnQiLCAibm9kZVJvb3RIb3N0IiwgImhvc3QiLCAibm9kZUlzQXR0YWNoZWQiLCAiY29udGFpbnMiLCAib3JpZ2luYWxOb2RlIiwgInJvb3ROb2RlIiwgImFzc2lnbmVkU2xvdCIsICJnZXRDbGllbnRSZWN0cyIsICJpc0Rpc2FibGVkRnJvbUZpZWxkc2V0IiwgInBhcmVudE5vZGUiLCAiZGlzYWJsZWQiLCAiaXRlbSIsICJpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlIiwgImlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZSIsICJpc1ZhbGlkU2hhZG93Um9vdFRhYmJhYmxlIiwgInNoYWRvd0hvc3ROb2RlIiwgInNvcnRCeU9yZGVyIiwgInJlZ3VsYXJUYWJiYWJsZXMiLCAib3JkZXJlZFRhYmJhYmxlcyIsICJmb3JFYWNoIiwgImNhbmRpZGF0ZVRhYmluZGV4IiwgInNvcnQiLCAicmVkdWNlIiwgImFjYyIsICJzb3J0YWJsZSIsICJjb25jYXQiLCAidGFiYmFibGUiLCAiYmluZCIsICJmb2N1c2FibGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgImV1aUJ1dHRvbkNvbG9yIiwgInRpbnRPclNoYWRlIiwgImNvbG9yIiwgImV1aUJ1dHRvbkZpbGxDb2xvciIsICJnZXRGb3JlZ3JvdW5kQ29sb3IiLCAiYmFja2dyb3VuZCIsICJldWlCdXR0b25FbXB0eUNvbG9yIiwgInVzZUV1aUJ1dHRvbkNvbG9yQ1NTIiwgImV1aUJ1dHRvbkRpc3BsYXlzQ29sb3JzIiwgIkNPTE9SUyIsICJ1c2VFdWlCdXR0b25Gb2N1c0NTUyIsICJldWlCdXR0b25Gb2N1c0NTUyIsICJfcmVmIiwgImV1aUJ1dHRvblNpemVNYXAiLCAiX3JlZjIiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImdldFNoYWRvd0NvbG9yIiwgImV1aVNoYWRvd1hTbWFsbCIsICJfcmVmIiwgIl9yZWYyIiwgImV1aVNoYWRvd1NtYWxsIiwgIl9yZWYzIiwgIl9yZWY0IiwgImV1aVNoYWRvd01lZGl1bSIsICJfcmVmNSIsICJfcmVmNiIsICJwcm9wZXJ0eSIsICJldWlTaGFkb3dMYXJnZSIsICJfcmVmNyIsICJfcmVmOCIsICJldWlTaGFkb3dYTGFyZ2UiLCAiX3JlZjkiLCAiX3JlZjEwIiwgInJldmVyc2UiLCAiZXVpU2hhZG93RmxhdCIsICJfcmVmMTMiLCAiX3JlZjE0IiwgImV1aVNoYWRvdyIsICJzaXplIiwgIl9yZWYxNSIsICJldWlCdXR0b25CYXNlQ1NTIiwgImV1aUJ1dHRvbkRpc3BsYXlTdHlsZXMiLCAiX2J1dHRvblNpemUiLCAic2l6ZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQWNjZXNzaWJpbGl0eSIsICJfcmVmIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQWdncmVnYXRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFsZXJ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFuYWx5emVFdmVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BbmFseXplRXZlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQW5ub3RhdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Bbm9tYWx5Q2hhcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQW5vbWFseVN3aW1MYW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwbVRyYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFkZERhdGEiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQWR2YW5jZWRTZXR0aW5ncyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBZ2VudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBcG0iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQXBwU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEF1ZGl0YmVhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDYW52YXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQ2FzZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQ29kZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDb25zb2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcERhc2hib2FyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBEZXZ0b29scyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBEaXNjb3ZlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBFbXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRmlsZWJlYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRmxlZXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwR2lzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEdyYXBoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEdyb2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwSGVhcnRiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEluZGV4TWFuYWdlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBJbmRleFBhdHRlcm4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwSW5kZXhSb2xsdXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTGVucyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBMb2dzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE1hbmFnZW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWV0cmljYmVhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBNZXRyaWNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE1sIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE1vbml0b3JpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTm90ZWJvb2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwUGFja2V0YmVhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBQaXBlbGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBSZWNlbnRseVZpZXdlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBSZXBvcnRpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2F2ZWRPYmplY3RzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNlY3VyaXR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNlY3VyaXR5QW5hbHl0aWNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNwYWNlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTcWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwVGltZWxpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwVXBncmFkZUFzc2lzdGFudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBVcHRpbWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwVXNlcnNSb2xlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBWaXN1YWxpemUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwV2F0Y2hlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBXb3JrcGxhY2VTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd0VuZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd1N0YXJ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93RG93biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd0xlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd1VwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFydGljbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXN0ZXJpc2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmVha2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJlbGwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmVsbFNsYXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJldGEiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQm9sdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Cb3hlc0hvcml6b250YWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQm94ZXNWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CcmFuY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnJhbmNoVXNlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ccm9vbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CcnVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CdWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnVsbHNleWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2FsZW5kYXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2hhbmdlUG9pbnREZXRlY3Rpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2hlY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2hlY2tJbkNpcmNsZUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DaGVlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbGlja0xlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xpY2tSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbG9jayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbG9ja0NvdW50ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvdWREcml6emxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb3VkU3Rvcm15IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb3VkU3VubnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2x1c3RlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db2xvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db21wdXRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnNvbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGFpbmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlBYm92ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250aW51aXR5QmVsb3ciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGludWl0eVdpdGhpbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250cm9sc0hvcml6b250YWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udHJvbHNWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db3B5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvcHlDbGlwYm9hcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3NJbkNpcmNsZSIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNyb3NzSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3NoYWlycyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DdXJyZW5jeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DdXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRGF0YWJhc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRGVza3RvcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25EaWZmIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRpc2N1c3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG9jdW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG9jdW1lbnRFZGl0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvY3VtZW50YXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG9jdW1lbnRzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb3RJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb3VibGVBcnJvd0xlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG91YmxlQXJyb3dSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb3dubG9hZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JEaXN0cmlidXRlVmVydGljYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduQm90dG9tIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkNlbnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25MZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnbk1pZGRsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25Ub3AiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wUmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQWxpZ25DZW50ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQWxpZ25MZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckFsaWduUmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQm9sZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JDaGVja2xpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQ29kZUJsb2NrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckNvbW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySGVhZGluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGFsaWMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yTGluayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JPcmRlcmVkTGlzdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JSZWRvIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclN0cmlrZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JUYWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JVbmRlcmxpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yVW5kbyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JVbm9yZGVyZWRMaXN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVtYWlsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVtcHR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVuZHBvaW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVxbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FcmFzZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXJyb3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXJyb3JGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXNxbFZpcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeGl0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4cGFuZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeHBhbmRNaW5pIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4cG9ydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXllQ2xvc2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZhY2VIYXBweSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GYWNlTmV1dHJhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GYWNlU2FkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZpZWxkU3RhdGlzdGljcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GaWx0ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmlsdGVyRXhjbHVkZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GaWx0ZXJJZ25vcmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmlsdGVySW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmlsdGVySW5jbHVkZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GbGFnIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZvbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyQ2hlY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyQ2xvc2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZvbGRlckV4Y2xhbWF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZvbGRlck9wZW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnJhbWVOZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZyYW1lUHJldmlvdXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnVsbFNjcmVlbkV4aXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnVsbFNjcmVlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GdW5jdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HZWFyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdsYXNzZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR2xvYmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JhYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HcmFiT21uaWRpcmVjdGlvbmFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdyYWJIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdyYWRpZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdyaWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSGVhcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSGVhdG1hcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25IZWxwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkhvbWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSUluQ2lyY2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkltYWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkltcG9ydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleFRlbXBvcmFyeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleENsb3NlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4RWRpdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleEZsdXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4TWFwcGluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleE9wZW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhSdW50aW1lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4U2V0dGluZ3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5maW5pdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5wdXRPdXRwdXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5zcGVjdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbnZlcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSXNzdWUiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LZXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS2V5Ym9hcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsRmllbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsRnVuY3Rpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsT3BlcmFuZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxTZWxlY3RvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxWYWx1ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LdWJlcm5ldGVzTm9kZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LdWJlcm5ldGVzUG9kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxhdW5jaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MYXllcnMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGV0dGVyaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpbmVEYXNoZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGluZURvdHRlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5lU29saWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGluayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaXN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpc3RBZGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9jayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2NrT3BlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dQYXR0ZXJuQW5hbHlzaXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nUmF0ZUFuYWx5c2lzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BZXJvc3Bpa2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0FwYWNoZSIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BcHBTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0F3cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXdzTW9ubyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXp1cmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0F6dXJlTW9ubyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQmVhdHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0J1c2luZXNzQW5hbHl0aWNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29DZXBoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29DbG91ZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ2xvdWRFY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0NvZGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0NvZGVzYW5kYm94IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Db3VjaGJhc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0RvY2tlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRHJvcHdpemFyZCIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FbGFzdGljIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FbGFzdGljU3RhY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0VsYXN0aWNzZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0V0Y2QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0djcCIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29HY3BNb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29HaXRodWIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0dtYWlsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Hb2xhbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0dvb2dsZUciLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvSGFwcm94eSIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29JYm0iLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvSWJtTW9ubyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvS2Fma2EiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0tpYmFuYSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvS3ViZXJuZXRlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTG9nZ2luZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTG9nc3Rhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb01hcHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb01lbWNhY2hlZCIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29NZXRyaWNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Nb25nb2RiIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29NeXNxbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTmdpbngiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb09ic2VydmFiaWxpdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb09zcXVlcnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1BocCIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Qb3N0Z3JlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUHJvbWV0aGV1cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUmFiYml0bXEiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1JlZGlzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29TZWN1cml0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvU2l0ZVNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvU2tldGNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29TbGFjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvVXB0aW1lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvV2ViaG9vayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvV2luZG93cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoRmlsdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoSWYiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hJbnB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaE91dHB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaFF1ZXVlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hZ25ldCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hZ25pZnlXaXRoTWludXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmlmeVdpdGhQbHVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hcE1hcmtlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW1vcnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVudSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51RG93biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51UmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVudVVwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lcmdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbmltaXplIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbnVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbnVzSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NaW51c0luU3F1YXJlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ2xhc3NpZmljYXRpb25Kb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDcmVhdGVBZHZhbmNlZEpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENyZWF0ZU11bHRpTWV0cmljSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENyZWF0ZVNpbmdsZU1ldHJpY0pvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbERhdGFWaXN1YWxpemVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sT3V0bGllckRldGVjdGlvbkpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbFJlZ3Jlc3Npb25Kb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTW9iaWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1vb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTW92ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25OYW1lc3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTmVzdGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk5ld0NoYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTm9kZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25OdW1iZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uT2ZmbGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25PbmxpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFja2FnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYWdlU2VsZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhZ2VzU2VsZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhaW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhbGV0dGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFwZXJDbGlwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhcnRpYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGF1c2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGF5bWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QZW5jaWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGVyY2VudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QaW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGluRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBpcGVCcmVha3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGlwZU5vQnJlYWtzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBpdm90IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsYXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGxheUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbHVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsdXNJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGx1c0luU3F1YXJlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBvcG91dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QdXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUXVvdGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUmVmcmVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25SZXBvcnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25SZXR1cm5LZXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2F2ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TY2FsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2VjdXJpdHlTaWduYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2VjdXJpdHlTaWduYWxEZXRlY3RlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlc3Npb25WaWV3ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2hhcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2hhcmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2luZ2xlTWV0cmljVmlld2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNub3dmbGFrZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0QXNjZW5kaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnREZXNjZW5kaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0RG93biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydGFibGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3BhY2VzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNwYXJrbGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJQbHVzRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhclBsdXNGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckVtcHR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJFbXB0eVNwYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckZpbGxlZFNwYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJNaW51c0VtcHR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJNaW51c0ZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGF0cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdG9wIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0b3BGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcFNsYXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0b3JhZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RyaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN1Ym1vZHVsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3dhdGNoSW5wdXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3ltbGluayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWJsZU9mQ29udGVudHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGFibGVEZW5zaXR5Q29tcGFjdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWJsZURlbnNpdHlOb3JtYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGFnIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRlYXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGVtcGVyYXR1cmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGltZVJlZnJlc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGltZWxpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGltZWxpbmVXaXRoQXJyb3ciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGltZXNsaWRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkFsaWFzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQW5ub3RhdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkFycmF5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQmluYXJ5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQm9vbGVhbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkNsYXNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkNvbnN0YW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRGF0ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkRpbWVuc2lvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkVsZW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FbnVtIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRW51bU1lbWJlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkV2ZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRXhjZXB0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRmllbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GaWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRmxhdHRlbmVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRnVuY3Rpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5HZW8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5IaXN0b2dyYW0iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5JUCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkludGVyZmFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkpvaW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5LZXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5LZXl3b3JkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTWV0aG9kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTWV0cmljQ291bnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk1ldHJpY0dhdWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTW9kdWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTmFtZXNwYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTmVzdGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTnVsbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk51bWJlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk9iamVjdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk9wZXJhdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUGFja2FnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblBhcmFtZXRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblBlcmNvbGF0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Qcm9wZXJ0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblJhbmdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUmFua0ZlYXR1cmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5SYW5rRmVhdHVyZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5SZXBvIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU2VhcmNoVHlwZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblNlbWFudGljVGV4dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblNoYXBlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU3RyaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU3RydWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU3ltYm9sIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVGFnIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVGV4dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblRva2VuQ291bnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5WYXJpYWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblZlY3RvckRlbnNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVmVjdG9yU3BhcnNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRyYWluaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRyYW5zaXRpb25MZWZ0SW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhbnNpdGlvbkxlZnRPdXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhbnNpdGlvblRvcEluIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRyYW5zaXRpb25Ub3BPdXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVW5mb2xkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVubGluayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Vc2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVzZXJBdmF0YXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVXNlcnMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmVjdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpZGVvUGxheWVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0FyZWEiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQXJlYVN0YWNrZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQmFySG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJWZXJ0aWNhbFN0YWNrZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzR2F1Z2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzR29hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNMaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc01hcENvb3JkaW5hdGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTWFwUmVnaW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc01ldHJpYyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNQaWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVGFibGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVGFnQ2xvdWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVGV4dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUaW1lbGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNWZWdhIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1Zpc3VhbEJ1aWxkZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV2FybmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25XYXJuaW5nRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbldvcmRXcmFwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbldvcmRXcmFwRGlzYWJsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV3JlbmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlJY29uU3R5bGVzIiwgIl9yZWYzIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgInQiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX3RvUHJpbWl0aXZlIiwgImdldElzQXBwSWNvbiIsICJpY29uIiwgIkV1aUljb25DbGFzcyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnR5IiwgIl9yZWYiLCAiaWNvbiIsICJfaW5oZXJpdHMiLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX29iamVjdFNwcmVhZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJFdWlDb250ZXh0IiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm8iLCAidmFsdWUiLCAiaXNCb29sZWFuIiwgImlzU3RyaW5nIiwgImlzTnVtYmVyIiwgImlzVW5kZWZpbmVkIiwgImNoYXIiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgInRva2VuIiwgInJlbmRlciIsICJDb21wb25lbnQiLCAiUmVhY3QiLCAiRXVpSTE4biIsICJfcmVmIiwgIl9yZWYyIiwgInVzZUxvYWRpbmdBcmlhTGFiZWwiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwgImV1aVNwaW5uZXJCb3JkZXJDb2xvcnNDU1MiLCAiX3JlZiIsICJjb2xvcnMiLCAiYm9yZGVyIiwgImV1aUxvYWRpbmdTcGlubmVyU3R5bGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpTG9hZGluZ1NwaW5uZXIiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiX29iamVjdFNwcmVhZCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiZXVpQnV0dG9uRGlzcGxheUNvbnRlbnRTdHlsZXMiLCAiX3JlZiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUJ1dHRvbkRpc3BsYXlDb250ZW50IiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiaWNvbiIsICJfZXh0ZW5kcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJVUkwiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfcmVmIiwgIl9yZWYyIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiX2V4dGVuZHMiLCAiX29iamVjdFNwcmVhZCIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlCdXR0b24iLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiY2xhc3NOYW1lcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpQnV0dG9uRW1wdHlTdHlsZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlCdXR0b25FbXB0eSIsICJfcmVmIiwgInNpemUiLCAiZmx1c2giLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlCdXR0b25JY29uU3R5bGVzIiwgIl9lbXB0eUhvdmVyU3R5bGVzIiwgInN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUJ1dHRvbkljb24iLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAibm9kZSIsICJFdWlJbm5lclRleHQiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiZXVpRm9ybU1heFdpZHRoIiwgIl9yZWYiLCAiZXVpRm9ybVZhcmlhYmxlcyIsICJpc0NvbG9yRGFyayIsICJjb2xvcnMiLCAiZGFya2VuIiwgImV1aUZvcm1Db250cm9sU3R5bGVzIiwgImV1aUZvcm1Db250cm9sVGV4dCIsICJldWlGb3JtQ29udHJvbERlZmF1bHRTaGFkb3ciLCAiX3JlZjIiLCAiYm9yZGVyIiwgImV1aUZvcm1Db250cm9sRm9jdXNTdHlsZXMiLCAiX3JlZjMiLCAiZXVpRm9ybUNvbnRyb2xJbnZhbGlkU3R5bGVzIiwgIl9yZWY0IiwgImV1aUZvcm1Db250cm9sRGlzYWJsZWRTdHlsZXMiLCAiZXVpRm9ybUNvbnRyb2xSZWFkT25seVN0eWxlcyIsICJldWlGb3JtQ29udHJvbEF1dG9GaWxsU3R5bGVzIiwgImJvcmRlclNoYWRvdyIsICJldWlQbGFjZWhvbGRlclBlckJyb3dzZXIiLCAiZXVpRm9ybUN1c3RvbUNvbnRyb2xWYXJpYWJsZXMiLCAiYW5pbWF0aW9uIiwgImV1aUZvcm1DdXN0b21Db250cm9sU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAibyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aU9ic2VydmVyIiwgInJlbmRlciIsICJfdHlwZW9mIiwgIm8iLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpUmVzaXplT2JzZXJ2ZXIiLCAiX3JlZiIsICJfcmVmMiIsICJtYWtlUmVzaXplT2JzZXJ2ZXIiLCAibm9kZSIsICJ1c2VSZXNpemVPYnNlcnZlciIsICJzaXplIiwgIl9yZWYzIiwgIl9yZWY0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3RfZG9tIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJFdWlDb21wb25lbnREZWZhdWx0c1Byb3ZpZGVyIiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgInVzZUNvbXBvbmVudERlZmF1bHRzIiwgInVzZVByb3BzV2l0aENvbXBvbmVudERlZmF1bHRzIiwgIl90eXBlb2YiLCAibyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aVBvcnRhbCIsICJQcm9wVHlwZXMiLCAiRXVpUG9ydGFsQ2xhc3MiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9jYWxsU3VwZXIiLCAiX2luaGVyaXRzIiwgIl9jcmVhdGVDbGFzcyIsICJwb3NpdGlvbiIsICJyZW5kZXIiLCAiX2RlZmluZVByb3BlcnR5IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RlbXBsYXRlT2JqZWN0MiIsICJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgImV1aVRvb2xUaXBCYWNrZ3JvdW5kQ29sb3IiLCAiZXVpVG9vbFRpcEJvcmRlckNvbG9yIiwgImV1aVRvb2xUaXBBbmltYXRpb25WZXJ0aWNhbCIsICJzaXplIiwgImV1aVRvb2xUaXBBbmltYXRpb25Ib3Jpem9udGFsIiwgImV1aVRvb2xUaXBTdHlsZXMiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJldWlUb29sVGlwQW5jaG9yU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVG9vbFRpcFBvcG92ZXIiLCAiX3JlZiIsICJzdHlsZXMiLCAic2V0UG9wb3ZlclJlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAib25Gb2N1cyIsICJvbkJsdXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRvb2xUaXBBcnJvdyIsICJfcmVmIiwgInBvc2l0aW9uIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1ByaW1pdGl2ZSIsICJUb29sVGlwTWFuYWdlciIsICJfZXhjbHVkZWQiLCAiX3R5cGVvZiIsICJvIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aVRvb2xUaXAiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9jYWxsU3VwZXIiLCAiX2RlZmluZVByb3BlcnR5IiwgInBvc2l0aW9uIiwgIl9pbmhlcml0cyIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRpcCIsICJfcmVmIiwgInNpemUiLCAicG9zaXRpb24iLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlUZXh0Q29sb3JTdHlsZXMiLCAiX3JlZjIiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJDT0xPUlMiLCAiX2lzTmFtZWRDb2xvciIsICJFdWlUZXh0Q29sb3IiLCAiX3JlZiIsICJDb21wb25lbnQiLCAiY2xvbmVFbGVtZW50IiwgImlzTmFtZWRDb2xvciIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRleHRBbGlnbiIsICJfcmVmIiwgIkNvbXBvbmVudCIsICJjbG9uZUVsZW1lbnQiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlMaW5rQ1NTIiwgIl9yZWYiLCAiZXVpTGlua1N0eWxlcyIsICJfY29sb3JDU1MiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpVGl0bGUiLCAiX3JlZiIsICJldWlUaXRsZVN0eWxlcyIsICJldWlUZXh0IiwgImV1aVNjYWxlVGV4dCIsICJldWlUZXh0U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGV4dCIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJDb21wb25lbnQiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJjYW5jZWxGcmFtZSIsICJhbmltYXRpb24iLCAiY3NzIiwgIl90eXBlb2YiLCAibyIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX3RvUHJpbWl0aXZlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiRXVpQXV0b1NpemVyIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm8iLCAicGFyc2VDb2xvciIsICJyZ2IiLCAiY2hyb21hVmFsaWQiLCAiX3R5cGVvZiIsICJfdHlwZW9mIiwgIm8iLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJldWlCYWRnZUNvbG9ycyIsICJnZXRCYWRnZUNvbG9ycyIsICJnZXRUZXh0Q29sb3IiLCAiX3JlZiIsICJnZXRDb2xvckNvbnRyYXN0IiwgImdldElzVmFsaWRDb2xvciIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aUJhZGdlU3R5bGVzIiwgInNldEJhZGdlQ29sb3JWYXJzIiwgImNvbG9ycyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJFdWlCYWRnZSIsICJfcmVmIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiaXNOYW1lZENvbG9yIiwgIl9vYmplY3RTcHJlYWQiLCAic3R5bGVzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJjbGFzc05hbWVzIiwgIkVsZW1lbnQiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgImV1aUJldGFCYWRnZVN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX3R5cGVvZiIsICJvIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlCZXRhQmFkZ2UiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiaWNvbiIsICJFbGVtZW50IiwgIl9leHRlbmRzIiwgIl90eXBlb2YiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJpY29uU3R5bGUiLCAiX3JlZiIsICJFdWlFeHRlcm5hbExpbmtJY29uIiwgIl9yZWYyIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiX29iamVjdFNwcmVhZCIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9fYXNzaWduIiwgImZyb20iLCAiUmVhY3QiLCAiUmVhY3QiLCAiUmVhY3QiLCAidmFsdWUiLCAiaW1wb3J0X3JlYWN0IiwgInZhbHVlIiwgIlJlYWN0IiwgIl9fYXNzaWduIiwgIl9fcmVzdCIsICJkZWZhdWx0cyIsICJtaWRkbGV3YXJlIiwgImNicyIsICJmaWx0ZXIiLCAiX19hc3NpZ24iLCAiUmVhY3QiLCAiX19yZXN0IiwgIl9fYXNzaWduIiwgIlNpZGVDYXIiLCAiUmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiUmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiSW5Gb2N1c0d1YXJkIiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgIl9leHRlbmRzMiIsICJTaWRlQ2FyIiwgIl9yZWYiLCAiY2FwdHVyZUZvY3VzUmVzdG9yZSIsICJvbkZvY3VzIiwgIm9uQmx1ciIsICJleHRyYWN0UmVmIiwgImVmZmVjdENhciIsICJTaWRlQ2FyIiwgImVmZmVjdENhciIsICJSZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfc2V0UHJvdG90eXBlT2YiLCAidCIsICJlIiwgIl9zZXRQcm90b3R5cGVPZiIsICJfdHlwZW9mIiwgIm8iLCAiX3R5cGVvZiIsICJfdHlwZW9mIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJpbXBvcnRfcmVhY3QiLCAicmVkdWNlUHJvcHNUb1N0YXRlIiwgImhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQiLCAiU2lkZUVmZmVjdCIsICJwZWVrIiwgInJlbmRlciIsICJSZWFjdCIsICJfZGVmaW5lUHJvcGVydHkiLCAidG9BcnJheSIsICJhc0FycmF5IiwgIm5vZGUiLCAiY2FjaGUiLCAibm9kZSIsICJ0b0FycmF5IiwgInRvQXJyYXkiLCAibm9kZSIsICJ0b0FycmF5IiwgIm5vZGUiLCAiY2FjaGUiLCAicG9zaXRpb24iLCAibm9kZSIsICJhc0FycmF5IiwgInRvQXJyYXkiLCAidG9BcnJheSIsICJub2RlIiwgInRvQXJyYXkiLCAibm9kZSIsICJub2RlIiwgIm5vZGUiLCAibm9kZSIsICJub2RlIiwgImFzQXJyYXkiLCAibm9kZSIsICJhc0FycmF5IiwgIm5vZGUiLCAiZm9jdXNhYmxlIiwgInZhbHVlIiwgImxpbmUiLCAiZm9jdXNhYmxlIiwgImFzQXJyYXkiLCAibm9kZSIsICJuZXh0IiwgInByZXYiLCAiZm9jdXNPbkJvZHkiLCAiaXNGcmVlRm9jdXMiLCAidHJ5UmVzdG9yZUZvY3VzIiwgImRlZmF1bHRXaGl0ZWxpc3QiLCAiZm9jdXNXaGl0ZWxpc3RlZCIsICJyZWNvcmRQb3J0YWwiLCAiZm9jdXNJc1BvcnRhbGVkUGFpciIsICJmb2N1c1dhc091dHNpZGUiLCAiY2hlY2tJbkhvc3QiLCAid2l0aGluSG9zdCIsICJnZXROb2RlRm9jdXNhYmxlcyIsICJpc05vdEZvY3VzYWJsZSIsICJub2RlIiwgImFjdGl2YXRlVHJhcCIsICJzaG91bGRGb3JjZVJlc3RvcmVGb2N1cyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgIm9uVHJhcCIsICJvbkJsdXIiLCAib25Gb2N1cyIsICJGb2N1c1dhdGNoZXIiLCAiRm9jdXNUcmFwIiwgIl9yZWY1IiwgIlByb3BUeXBlcyIsICJvbldpbmRvd0ZvY3VzIiwgIm9uV2luZG93Qmx1ciIsICJhdHRhY2hIYW5kbGVyIiwgImRldGFjaEhhbmRsZXIiLCAiX3JlZjYiLCAiX3JlZjciLCAiUmVhY3QiLCAiUmVhY3QiLCAiUmVhY3QiLCAiY3NzIiwgInNoZWV0IiwgInN0eWxlcyIsICJzdHlsZXMiLCAicGFyc2UiLCAibm9kZSIsICJzdHlsZXMiLCAicG9zaXRpb24iLCAiZXh0cmFjdFJlZiIsICJTdHlsZSIsICJub2RlIiwgInNpZGVjYXJfZGVmYXVsdCIsICJSZWFjdCIsICJub2RlIiwgIlJlYWN0IiwgIlN0eWxlIiwgImltcG9ydF9yZWFjdCIsICJleHRyYWN0UmVmIiwgIm5vZGUiLCAic2lkZWNhcl9kZWZhdWx0IiwgImVmZmVjdENhciIsICJzaWRlY2FyX2RlZmF1bHQiLCAiRm9jdXNPbiIsICJfZXhjbHVkZWQiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aUZvY3VzVHJhcCIsICJQcm9wVHlwZXMiLCAiRXVpRm9jdXNUcmFwQ2xhc3MiLCAibm9kZSIsICJyZW5kZXIiLCAiRm9jdXNPbiIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aU11dGF0aW9uT2JzZXJ2ZXIiLCAibWFrZU11dGF0aW9uT2JzZXJ2ZXIiLCAibm9kZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IiLCAicmVuZGVyIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiZXVpUG9wb3ZlckFycm93U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpUG9wb3ZlckFycm93IiwgIl9yZWYiLCAicG9zaXRpb24iLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImV1aVBvcG92ZXJTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgImV1aVBhbmVsU3R5bGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpUGFuZWwiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlQb3BvdmVyUGFuZWxTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQb3BvdmVyUGFuZWwiLCAiX3JlZiIsICJwb3NpdGlvbiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX3JlZiIsICJfcmVmMiIsICJfc2xpY2VkVG9BcnJheSIsICJfcmVmMyIsICJfcmVmNCIsICJFdWlQb3BvdmVyIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfY2FsbFN1cGVyIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX3JlZjUiLCAiZHVyYXRpb25NYXRjaCIsICJkZWxheU1hdGNoIiwgIl9yZWY2IiwgInBvc2l0aW9uIiwgIl9vYmplY3RTcHJlYWQiLCAibm9kZSIsICJfaW5oZXJpdHMiLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgImluaXRpYWxGb2N1cyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUlucHV0UG9wb3ZlciIsICJfcmVmIiwgImNsYXNzbmFtZXMiLCAiY2xvc2VQb3BvdmVyT25TY3JvbGwiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aVNwYWNlclN0eWxlcyIsICJfcmVmMiIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVNwYWNlciIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGl0bGUiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX29iamVjdFNwcmVhZCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aUNhcmRTZWxlY3RTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlDYXJkU2VsZWN0IiwgIl9yZWYiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJfcmVmNSIsICJfcmVmNiIsICJldWlDYXJkU3R5bGVzIiwgIl9yZWYiLCAiZXVpQ2FyZFRleHRTdHlsZXMiLCAiZXVpQ2FyZEJldGFCYWRnZVN0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ2FyZCIsICJfcmVmIiwgImljb24iLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAib3V0ZXJPbkNsaWNrIiwgImNsYXNzTmFtZXMiLCAiaWNvblN0eWxlcyIsICJfZXhjbHVkZWQyIiwgIl9leHRlbmRzIiwgIl9vYmplY3RTcHJlYWQiLCAiUmVhY3QiLCAibm9kZSIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpQ2hlY2tib3hTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlDaGVja2JveCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgImxhYmVsU3R5bGVzIiwgImljb25TdHlsZXMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiZXVpRm9ybUxhYmVsIiwgImV1aUZvcm1MYWJlbFN0eWxlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJfcmVmNSIsICJfcmVmNiIsICJfcmVmNyIsICJfcmVmOCIsICJfcmVmOSIsICJfcmVmMTAiLCAiX3JlZjExIiwgIl9yZWYxMiIsICJfcmVmMTMiLCAiX3JlZjE0IiwgIl9yZWYxNSIsICJfcmVmMTYiLCAiX3JlZjE3IiwgImV1aUZsZXhHcm91cFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZsZXhHcm91cEludGVybmFsIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJDb21wb25lbnQiLCAiX2V4dGVuZHMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRmxleEl0ZW1JbnRlcm5hbCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiQ29tcG9uZW50IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIkV1aVZhbGlkYXRhYmxlQ29udHJvbCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJ1c2VTZXRDb250cm9sVmFsaWRpdHkiLCAiX3JlZjMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZvcm1MYWJlbCIsICJfcmVmIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIkV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b25TdHlsZXMiLCAiX3JlZiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24iLCAiX3JlZiIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgImljb25TdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIkV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiIsICJfcmVmIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29uc1N0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl90b1ByaW1pdGl2ZSIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiaXNJY29uU2hhcGUiLCAiaWNvbiIsICJFdWlGb3JtQ29udHJvbExheW91dEljb25zIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfY2FsbFN1cGVyIiwgIl9pbmhlcml0cyIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgInN0eWxlcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgImlzUmlnaHRTaWRlSWNvbiIsICJpY29uIiwgImdldEljb25BZmZvcmRhbmNlU3R5bGVzIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlGb3JtQ29udHJvbExheW91dFN0eWxlcyIsICJldWlGb3JtQ29udHJvbExheW91dFNpZGVOb2RlU3R5bGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXQiLCAiaWNvbiIsICJhcHBlbmQiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgIkV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVzIiwgIl9yZWYiLCAiUmVhY3QiLCAibm9kZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpRmllbGRTZWFyY2hTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1ByaW1pdGl2ZSIsICJFdWlGaWVsZFNlYXJjaENsYXNzIiwgIm9uU2VhcmNoIiwgIm9uQ2hhbmdlIiwgInJlbmRlciIsICJfcmVmIiwgImFwcGVuZCIsICJ2YWx1ZSIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aUZvcm1FcnJvclRleHRTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtRXJyb3JUZXh0IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlGb3JtSGVscFRleHRTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtSGVscFRleHQiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aUZvcm1Sb3dTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJyIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtUm93IiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJfc2xpY2VkVG9BcnJheSIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJoZWxwVGV4dCIsICJlcnJvciIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX3JlZjIiLCAiRWxlbWVudCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aUhvcml6b250YWxSdWxlU3R5bGVzIiwgIl9yZWYiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlIb3Jpem9udGFsUnVsZSIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgIl9yZWY1IiwgIl9yZWY2IiwgImV1aUNvbnRleHRNZW51SXRlbVN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUNvbnRleHRNZW51SXRlbSIsICJfcmVmIiwgImljb24iLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlJlYWN0IiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJldWlDb250ZXh0TWVudVZhcmlhYmxlcyIsICJfcmVmIiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGVtcGxhdGVPYmplY3QyIiwgIl90ZW1wbGF0ZU9iamVjdDMiLCAiX3RlbXBsYXRlT2JqZWN0NCIsICJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwgImV1aUNvbnRleHRNZW51UGFuZWxTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1ByaW1pdGl2ZSIsICJFdWlDb250ZXh0TWVudVBhbmVsQ2xhc3MiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9jYWxsU3VwZXIiLCAiX2RlZmluZVByb3BlcnR5IiwgIm5vZGUiLCAiX2luaGVyaXRzIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpU3dpdGNoVmFycyIsICJjb2xvcnMiLCAiYW5pbWF0aW9uIiwgIl9yZWYyIiwgIl9yZWYzIiwgImV1aVN3aXRjaFN0eWxlcyIsICJidXR0b25TdHlsZXMiLCAiX3JlZiIsICJib2R5U3R5bGVzIiwgIl9yZWY0IiwgIl9yZWY1IiwgIl9jYWxjdWxhdGVEaXNhYmxlZENvbG9yIiwgImljb25TdHlsZXMiLCAiX3JlZjYiLCAiX3JlZjciLCAidGh1bWJTdHlsZXMiLCAiX3JlZjgiLCAiX2NhbGN1bGF0ZVNjYWxlIiwgInNpemUiLCAiX2NhbGN1bGF0ZUxlZnQiLCAibGFiZWxTdHlsZXMiLCAiX3JlZjkiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlTd2l0Y2giLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInNpemUiLCAic3R5bGVzIiwgImJ1dHRvblN0eWxlcyIsICJib2R5U3R5bGVzIiwgInRodW1iU3R5bGVzIiwgImxhYmVsU3R5bGVzIiwgIlByb3BUeXBlcyIsICJfY3JlYXRlRW1vdGlvbiIsICJjeCIsICJtZXJnZSIsICJnZXRSZWdpc3RlcmVkU3R5bGVzIiwgImtleWZyYW1lcyIsICJjc3MiLCAiY2FjaGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImV1aU92ZXJsYXlNYXNrU3R5bGVzIiwgIl9yZWYiLCAiY3NzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9leGNsdWRlZCIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiciIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpT3ZlcmxheU1hc2siLCAiX3JlZiIsICJzdHlsZXMiLCAiY3giLCAiUHJvcFR5cGVzIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidmFsdWUiLCAiaXNFcXVhbCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyIsICJwZXJmb3JtYW5jZSIsICJub3ciLCAiRGF0ZSIsICJjYW5jZWxUaW1lb3V0IiwgInRpbWVvdXRJRCIsICJjYW5jZWxBbmltYXRpb25GcmFtZSIsICJpZCIsICJyZXF1ZXN0VGltZW91dCIsICJjYWxsYmFjayIsICJkZWxheSIsICJzdGFydCIsICJ0aWNrIiwgImNhbGwiLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgInNpemUiLCAiZ2V0U2Nyb2xsYmFyU2l6ZSIsICJyZWNhbGN1bGF0ZSIsICJkaXYiLCAiZG9jdW1lbnQiLCAiY3JlYXRlRWxlbWVudCIsICJzdHlsZSIsICJ3aWR0aCIsICJoZWlnaHQiLCAib3ZlcmZsb3ciLCAiYm9keSIsICJhcHBlbmRDaGlsZCIsICJvZmZzZXRXaWR0aCIsICJjbGllbnRXaWR0aCIsICJyZW1vdmVDaGlsZCIsICJjYWNoZWRSVExSZXN1bHQiLCAiZ2V0UlRMT2Zmc2V0VHlwZSIsICJvdXRlckRpdiIsICJvdXRlclN0eWxlIiwgImRpcmVjdGlvbiIsICJpbm5lckRpdiIsICJpbm5lclN0eWxlIiwgInNjcm9sbExlZnQiLCAiZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50IiwgImRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50IiwgImRldldhcm5pbmdzVGFnTmFtZSIsICJwcm9jZXNzIiwgIndpbmRvdyIsICJXZWFrU2V0IiwgIklTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCIsICJkZWZhdWx0SXRlbUtleSIsICJpbmRleCIsICJkYXRhIiwgImRldldhcm5pbmdzRGlyZWN0aW9uIiwgImRldldhcm5pbmdzVGFnTmFtZSIsICJwcm9jZXNzIiwgIndpbmRvdyIsICJXZWFrU2V0IiwgImNyZWF0ZUxpc3RDb21wb25lbnQiLCAiX3JlZiIsICJnZXRJdGVtT2Zmc2V0IiwgImdldEVzdGltYXRlZFRvdGFsU2l6ZSIsICJnZXRJdGVtU2l6ZSIsICJnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCIsICJnZXRTdGFydEluZGV4Rm9yT2Zmc2V0IiwgImdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCAiaW5pdEluc3RhbmNlUHJvcHMiLCAic2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSIsICJ2YWxpZGF0ZVByb3BzIiwgInByb3BzIiwgIl9pbnN0YW5jZVByb3BzIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX291dGVyUmVmIiwgIl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkIiwgInN0YXRlIiwgImluc3RhbmNlIiwgImlzU2Nyb2xsaW5nIiwgInNjcm9sbERpcmVjdGlvbiIsICJzY3JvbGxPZmZzZXQiLCAiaW5pdGlhbFNjcm9sbE9mZnNldCIsICJzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQiLCAiX2NhbGxPbkl0ZW1zUmVuZGVyZWQiLCAibWVtb2l6ZU9uZSIsICJvdmVyc2NhblN0YXJ0SW5kZXgiLCAib3ZlcnNjYW5TdG9wSW5kZXgiLCAidmlzaWJsZVN0YXJ0SW5kZXgiLCAidmlzaWJsZVN0b3BJbmRleCIsICJvbkl0ZW1zUmVuZGVyZWQiLCAiX2NhbGxPblNjcm9sbCIsICJvblNjcm9sbCIsICJfZ2V0SXRlbVN0eWxlIiwgImRpcmVjdGlvbiIsICJpdGVtU2l6ZSIsICJsYXlvdXQiLCAiaXRlbVN0eWxlQ2FjaGUiLCAiX2dldEl0ZW1TdHlsZUNhY2hlIiwgInN0eWxlIiwgImhhc093blByb3BlcnR5IiwgIm9mZnNldCIsICJzaXplIiwgImlzSG9yaXpvbnRhbCIsICJpc1J0bCIsICJvZmZzZXRIb3Jpem9udGFsIiwgInBvc2l0aW9uIiwgImxlZnQiLCAidW5kZWZpbmVkIiwgInJpZ2h0IiwgInRvcCIsICJoZWlnaHQiLCAid2lkdGgiLCAiXyIsICJfXyIsICJfX18iLCAiX29uU2Nyb2xsSG9yaXpvbnRhbCIsICJldmVudCIsICJjdXJyZW50VGFyZ2V0IiwgImNsaWVudFdpZHRoIiwgInNjcm9sbExlZnQiLCAic2Nyb2xsV2lkdGgiLCAic2V0U3RhdGUiLCAicHJldlN0YXRlIiwgImdldFJUTE9mZnNldFR5cGUiLCAiTWF0aCIsICJtYXgiLCAibWluIiwgIl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkIiwgIl9vblNjcm9sbFZlcnRpY2FsIiwgImNsaWVudEhlaWdodCIsICJzY3JvbGxIZWlnaHQiLCAic2Nyb2xsVG9wIiwgIl9vdXRlclJlZlNldHRlciIsICJyZWYiLCAib3V0ZXJSZWYiLCAiY3VycmVudCIsICJjYW5jZWxUaW1lb3V0IiwgInJlcXVlc3RUaW1lb3V0IiwgIl9yZXNldElzU2Nyb2xsaW5nIiwgImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsICJuZXh0UHJvcHMiLCAidmFsaWRhdGVTaGFyZWRQcm9wcyIsICJzY3JvbGxUbyIsICJzY3JvbGxUb0l0ZW0iLCAiYWxpZ24iLCAiaXRlbUNvdW50IiwgInNjcm9sbGJhclNpemUiLCAiZ2V0U2Nyb2xsYmFyU2l6ZSIsICJjb21wb25lbnREaWRNb3VudCIsICJfY2FsbFByb3BzQ2FsbGJhY2tzIiwgImNvbXBvbmVudERpZFVwZGF0ZSIsICJjb21wb25lbnRXaWxsVW5tb3VudCIsICJyZW5kZXIiLCAiY2hpbGRyZW4iLCAiY2xhc3NOYW1lIiwgImlubmVyUmVmIiwgImlubmVyRWxlbWVudFR5cGUiLCAiaW5uZXJUYWdOYW1lIiwgIml0ZW1EYXRhIiwgIml0ZW1LZXkiLCAib3V0ZXJFbGVtZW50VHlwZSIsICJvdXRlclRhZ05hbWUiLCAidXNlSXNTY3JvbGxpbmciLCAiX2dldFJhbmdlVG9SZW5kZXIiLCAic3RhcnRJbmRleCIsICJzdG9wSW5kZXgiLCAiaXRlbXMiLCAicHVzaCIsICJjcmVhdGVFbGVtZW50IiwgImtleSIsICJlc3RpbWF0ZWRUb3RhbFNpemUiLCAib3ZlcmZsb3ciLCAiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCAid2lsbENoYW5nZSIsICJwb2ludGVyRXZlbnRzIiwgIm92ZXJzY2FuQ291bnQiLCAib3ZlcnNjYW5CYWNrd2FyZCIsICJvdmVyc2NhbkZvcndhcmQiLCAiUHVyZUNvbXBvbmVudCIsICJkZWZhdWx0UHJvcHMiLCAiX3JlZjIiLCAiX3JlZjMiLCAiaGFzIiwgImFkZCIsICJjb25zb2xlIiwgIndhcm4iLCAiRXJyb3IiLCAiRml4ZWRTaXplTGlzdCIsICJjcmVhdGVMaXN0Q29tcG9uZW50IiwgImdldEl0ZW1PZmZzZXQiLCAiX3JlZiIsICJpbmRleCIsICJpdGVtU2l6ZSIsICJnZXRJdGVtU2l6ZSIsICJfcmVmMiIsICJnZXRFc3RpbWF0ZWRUb3RhbFNpemUiLCAiX3JlZjMiLCAiaXRlbUNvdW50IiwgImdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50IiwgIl9yZWY0IiwgImFsaWduIiwgInNjcm9sbE9mZnNldCIsICJpbnN0YW5jZVByb3BzIiwgInNjcm9sbGJhclNpemUiLCAiZGlyZWN0aW9uIiwgImhlaWdodCIsICJsYXlvdXQiLCAid2lkdGgiLCAiaXNIb3Jpem9udGFsIiwgInNpemUiLCAibGFzdEl0ZW1PZmZzZXQiLCAiTWF0aCIsICJtYXgiLCAibWF4T2Zmc2V0IiwgIm1pbiIsICJtaW5PZmZzZXQiLCAibWlkZGxlT2Zmc2V0IiwgInJvdW5kIiwgImNlaWwiLCAiZmxvb3IiLCAiZ2V0U3RhcnRJbmRleEZvck9mZnNldCIsICJfcmVmNSIsICJvZmZzZXQiLCAiZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsICJfcmVmNiIsICJzdGFydEluZGV4IiwgIm51bVZpc2libGVJdGVtcyIsICJpbml0SW5zdGFuY2VQcm9wcyIsICJwcm9wcyIsICJzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlIiwgInZhbGlkYXRlUHJvcHMiLCAiX3JlZjciLCAicHJvY2VzcyIsICJFcnJvciIsICJzaGFsbG93RGlmZmVycyIsICJwcmV2IiwgIm5leHQiLCAiYXR0cmlidXRlIiwgImFyZUVxdWFsIiwgInByZXZQcm9wcyIsICJuZXh0UHJvcHMiLCAicHJldlN0eWxlIiwgInN0eWxlIiwgInByZXZSZXN0IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9leGNsdWRlZCIsICJuZXh0U3R5bGUiLCAibmV4dFJlc3QiLCAiX2V4Y2x1ZGVkMiIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAidHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5IiwgInN0cmluZyIsICJmbGF0dGVuT3B0aW9uR3JvdXBzIiwgImdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUiLCAiX3JlZiIsICJjb2xsZWN0TWF0Y2hpbmdPcHRpb24iLCAiX3JlZjIiLCAiZ2V0TWF0Y2hpbmdPcHRpb25zIiwgIl9yZWYzIiwgIm9iamVjdCIsICJjcmVhdGVQYXJ0aWFsU3RyaW5nRXF1YWxpdHlPcHRpb25NYXRjaGVyIiwgIl9yZWY0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiRXVpQ29tYm9Cb3hPcHRpb25BcHBlbmRQcmVwZW5kIiwgIl9yZWYiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aUNvbWJvQm94UGlsbFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUNvbWJvQm94UGlsbCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpQ29tYm9Cb3hJbnB1dFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX3R5cGVvZiIsICJvIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aUNvbWJvQm94SW5wdXQiLCAiYXBwZW5kIiwgImdldCIsICJyZW5kZXIiLCAib25Gb2N1cyIsICJ2YWx1ZSIsICJpY29uIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlNYXJrU3R5bGVzIiwgIl9yZWYiLCAiZXVpTWFya1NjcmVlblJlYWRlclN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aU1hcmsiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIkhpZ2hsaWdodEFsbCIsICJfcmVmIiwgImVzY2FwZVJlZ0V4cCIsICJtYXRjaGVzIiwgIm1hdGNoIiwgIlJlYWN0IiwgInZhbHVlIiwgIlByb3BUeXBlcyIsICJmaWxsSW5DaHVua3MiLCAiYXBwZW5kIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJIaWdobGlnaHRGaXJzdCIsICJfcmVmIiwgIlJlYWN0IiwgIm1hdGNoIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUhpZ2hsaWdodCIsICJfcmVmIiwgIkNvbXBvbmVudCIsICJfcmVmMiIsICJjaGlsZHJlbiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aUZpbHRlclNlbGVjdEl0ZW1TdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJyZXNvbHZlSWNvbkFuZENvbG9yIiwgIkV1aUZpbHRlclNlbGVjdEl0ZW1DbGFzcyIsICJyZW5kZXIiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAiaWNvbiIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAibyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2dldCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1ByaW1pdGl2ZSIsICJUcnVuY2F0aW9uVXRpbHMiLCAiX3JlZiIsICJjb21iaW5lZFRleHQiLCAiZ2V0IiwgInJlbW92ZUxhc3RDaGFyYWN0ZXIiLCAicmVtb3ZlRmlyc3RDaGFyYWN0ZXIiLCAic3BsaXRUZXh0IiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leGNsdWRlZDMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUZXh0VHJ1bmNhdGUiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJFdWlUZXh0VHJ1bmNhdGVXaXRoV2lkdGgiLCAiX3JlZjIiLCAiX2V4Y2x1ZGVkMiIsICJfc2xpY2VkVG9BcnJheSIsICJ0cnVuY2F0aW9uIiwgInRydW5jYXRpb25PZmZzZXQiLCAidHJ1bmNhdGVkVGV4dCIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgIkV1aVRleHRUcnVuY2F0ZVdpdGhSZXNpemVPYnNlcnZlciIsICJfcmVmMyIsICJfZXhjbHVkZWQzIiwgIl9yZWY0IiwgIndpZHRoIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgInN0eWxlcyIsICJFdWlUZXh0QmxvY2tUcnVuY2F0ZSIsICJfcmVmIiwgImNsb25lRWxlbWVudCIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiRXVpQ29tYm9Cb3hUaXRsZSIsICJfcmVmIiwgImV1aUNvbWJvQm94T3B0aW9uTGlzdFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfZXhjbHVkZWQzIiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJFdWlDb21ib0JveE9wdGlvbnNMaXN0IiwgIl9yZWYiLCAiX3JlZjIiLCAidmFsdWUiLCAiYXBwZW5kIiwgInRleHQiLCAiUmVhY3QiLCAicmVuZGVyIiwgImdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUiLCAiZGVsaW1pdGVyIiwgImhpZ2hsaWdodFNlYXJjaFZhbHVlIiwgInNlYXJjaFZhbHVlIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX3R5cGVvZiIsICJvIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aUNvbWJvQm94IiwgIl9yZWYiLCAiX3JlZjIiLCAiZGVsaW1pdGVyIiwgInJlbmRlciIsICJvbkJsdXIiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAidmFsdWUiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aVBhZ2luYXRpb25CdXR0b25TdHlsZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQYWdpbmF0aW9uQnV0dG9uIiwgIl9yZWYiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXh0ZW5kcyIsICJUWVBFUyIsICJFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3ciLCAiX3JlZiIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlQYWdpbmF0aW9uU3R5bGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpUGFnaW5hdGlvbiIsICJfcmVmIiwgInN0eWxlcyIsICJzYWZlQ2xpY2siLCAiY2xhc3NOYW1lcyIsICJhY2Nlc3NpYmxlUGFnZVN0cmluZyIsICJQcm9wVHlwZXMiLCAiUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIiLCAiX3JlZjIiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgInVzZUV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlUGFnaW5hdGlvbiIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpVGFiU3R5bGVzIiwgIl9yZWYyIiwgImV1aVRhYkNvbnRlbnRTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFiIiwgIl9yZWYiLCAiYXBwZW5kIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aVRhYnNTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJFdWlUYWJiZWRDb250ZW50IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfY2FsbFN1cGVyIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfaW5oZXJpdHMiLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX2V4Y2x1ZGVkMiIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpRGVsYXlSZW5kZXIiLCAiX3JlZiIsICJyZW5kZXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgImV1aUhlYWx0aFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUhlYWx0aCIsICJfcmVmIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlJbWFnZVdyYXBwZXJTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgImV1aUltYWdlQnV0dG9uU3R5bGVzIiwgIl9yZWYiLCAiZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzIiwgIl9yZWYyIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSW1hZ2VCdXR0b24iLCAiX3JlZiIsICJidXR0b25TdHlsZXMiLCAiaWNvblN0eWxlcyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImV1aUltYWdlQ2FwdGlvblN0eWxlcyIsICJfcmVmIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiX2V4dGVuZHMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIkV1aUltYWdlV3JhcHBlciIsICJfcmVmIiwgIm9wZW5GdWxsU2NyZWVuIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJldWlJbWFnZVN0eWxlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlclN0eWxlcyIsICJfZXh0ZW5kcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciIsICJfcmVmIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIm9uS2V5RG93biIsICJjbG9zZUZ1bGxTY3JlZW4iLCAiaWNvblN0eWxlcyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiU0laRVMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUltYWdlIiwgIl9yZWYiLCAic2l6ZSIsICJTSVpFUyIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJnbG9iYWxTdHlsZXMiLCAic2l6ZSIsICJFdWlVdGlsaXR5Q2xhc3NlcyIsICJpbXBvcnRfcmVhY3QiLCAiRXVpQ2FjaGVQcm92aWRlciIsICJfcmVmIiwgImNhY2hlIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiRXVpU3lzdGVtQ29sb3JNb2RlUHJvdmlkZXIiLCAiX3JlZiIsICJldmVudExpc3RlbmVyIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiRXVpUHJvdmlkZXJOZXN0ZWRDaGVjayIsICJfcmVmIiwgInVzZUlzTmVzdGVkRXVpUHJvdmlkZXIiLCAiaXNFbW90aW9uQ2FjaGVPYmplY3QiLCAiRXVpUHJvdmlkZXIiLCAiX3JlZiIsICJjYWNoZSIsICJwcm92aWRlck1lc3NhZ2UiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJnZXRTZWFyY2hhYmxlTGFiZWwiLCAiZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSIsICJjb2xsZWN0TWF0Y2hpbmdPcHRpb24iLCAiX3JlZiIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAiX3JlZjIiLCAiY3JlYXRlUGFydGlhbFN0cmluZ0VxdWFsaXR5T3B0aW9uTWF0Y2hlciIsICJfcmVmMyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVNlbGVjdGFibGVTZWFyY2giLCAiX3JlZiIsICJ2YWx1ZSIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAiY2xhc3NOYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpU2VsZWN0YWJsZU1lc3NhZ2VTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlTZWxlY3RhYmxlTWVzc2FnZSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgImV1aVNlbGVjdGFibGVMaXN0SXRlbVZhcmlhYmxlcyIsICJfcmVmMiIsICJfcmVmIiwgImV1aVNlbGVjdGFibGVMaXN0SXRlbVN0eWxlcyIsICJib3JkZXIiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJyZXNvbHZlSWNvbkFuZENvbG9yIiwgIkV1aVNlbGVjdGFibGVMaXN0SXRlbSIsICJfcmVmIiwgImFwcGVuZCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgInJlc29sdmVJY29uQW5kQ29sb3IiLCAiaWNvbiIsICJfZXh0ZW5kcyIsICJfZXhjbHVkZWQyIiwgIlJlYWN0IiwgIl9zbGljZWRUb0FycmF5IiwgIlByb3BUeXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aVNlbGVjdGFibGVMaXN0U3R5bGVzIiwgImNzcyIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfZXhjbHVkZWQzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJFdWlTZWxlY3RhYmxlTGlzdCIsICJfcmVmIiwgImFwcGVuZCIsICJzdHlsZXMiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAidGV4dCIsICJSZWFjdCIsICJfcmVmNSIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4Y2x1ZGVkMyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIm93bktleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJFdWlTZWxlY3RhYmxlIiwgIl9yZWYiLCAiZ2V0TWF0Y2hpbmdPcHRpb25zIiwgImluaXRpYWxTZWFyY2hWYWx1ZSIsICJyZW5kZXIiLCAiX3JlZjIiLCAiX3JlZjMiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJnZXRBY2Nlc3NpYmxlTmFtZSIsICJfcmVmNCIsICJfcmVmNSIsICJpbnB1dFJlZiIsICJub2RlIiwgIl9kZWZhdWx0IiwgIl9yZWY2IiwgInJlc3VsdHNMZW5ndGgiLCAiY3JlYXRlUGFydGlhbFN0cmluZ0VxdWFsaXR5T3B0aW9uTWF0Y2hlciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJ1c2VJc0V1aVRhYmxlUmVzcG9uc2l2ZSIsICJfcmVmIiwgImJyZWFrcG9pbnQiLCAiaXNCb29sZWFuIiwgInVzZUV1aVRhYmxlSXNSZXNwb25zaXZlIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgImV1aVRhYmxlVmFyaWFibGVzIiwgIl9yZWY0IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiZXVpVGFibGVTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUJvZHkiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVGb290ZXIiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAicmVzb2x2ZVdpZHRoQXNTdHlsZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJldWlUYWJsZUNlbGxDb250ZW50U3R5bGVzIiwgIl9yZWY1IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVDZWxsQ29udGVudCIsICJfcmVmIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgImlzT2JqZWN0IiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJldWlUYWJsZUhlYWRlckZvb3RlckNlbGxTdHlsZXMiLCAiZXVpVGFibGVDZWxsQ2hlY2tib3hTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUZvb3RlckNlbGwiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVIZWFkZXIiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiQ2VsbENvbnRlbnRzIiwgIl9yZWYiLCAiRXVpVGFibGVIZWFkZXJDZWxsIiwgIl9yZWYyIiwgImFwcGVuZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3giLCAiX3JlZiIsICJhcHBlbmQiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlUYWJsZUhlYWRlck1vYmlsZVN0eWxlcyIsICJfcmVmIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVIZWFkZXJNb2JpbGUiLCAiX3JlZiIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlU29ydE1vYmlsZUl0ZW0iLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX3R5cGVvZiIsICJvIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aVRhYmxlU29ydE1vYmlsZSIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwgImV1aVRhYmxlUm93U3R5bGVzIiwgIl9leHBhbmRlZFJvd0FuaW1hdGlvbiIsICJfcmVmIiwgIl9yb3dDb2xvclZhcmlhYmxlcyIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlUm93IiwgIl9yZWYiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAib25LZXlEb3duIiwgIm9uS2V5VXAiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgImV1aVRhYmxlUm93Q2VsbFN0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlUm93Q2VsbCIsICJfcmVmIiwgImFwcGVuZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJFbGVtZW50IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVJvd0NlbGxDaGVja2JveCIsICJfcmVmIiwgImFwcGVuZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpc0N1c3RvbUl0ZW1BY3Rpb24iLCAiY2FsbFdpdGhJdGVtSWZGdW5jdGlvbiIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiQ29sbGFwc2VkSXRlbUFjdGlvbnMiLCAiX3JlZiIsICJjb250cm9scyIsICJpY29uIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiRGVmYXVsdEl0ZW1BY3Rpb24iLCAiX3JlZiIsICJpY29uIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJDdXN0b21JdGVtQWN0aW9uIiwgIl9yZWYiLCAiRXhwYW5kZWRJdGVtQWN0aW9ucyIsICJfcmVmIiwgIlJlYWN0IiwgImNsYXNzTmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgIlBhZ2luYXRpb25CYXIiLCAiX3JlZiIsICJkZWZhdWx0cyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlCYXNpY1RhYmxlQm9keUxvYWRpbmciLCAiX3JlZiIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfdHlwZW9mIiwgIm8iLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX3RvUHJpbWl0aXZlIiwgInZhbHVlIiwgInJlbmRlciIsICJpc0Z1bmN0aW9uIiwgImNvbHVtbiIsICJfcmVmIiwgIl9yZWYyIiwgIkV1aUJhc2ljVGFibGUiLCAib25DaGFuZ2UiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiX3JlZjYiLCAiZ2V0IiwgIl9yZWY3IiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJfcmVmOCIsICJfcmVmOSIsICJfcmVmMTAiLCAibnVtIiwgInNlbGVjdGlvbiIsICJpdGVtIiwgIl9yZWYxMSIsICJQcm9wVHlwZXMiLCAiU3Vic2NyaWJhYmxlIiwgIm5vb3AiLCAidmFsdWUiLCAiYXNBcnJheSIsICJ2YWx1ZSIsICJpc1BsYWluT2JqZWN0IiwgImNvcHkiLCAiRm9jdXNNYW5hZ2VyIiwgIm9uRm9jdXMiLCAibGlzdGVuZXIiLCAiT25saW5lTWFuYWdlciIsICJsaXN0ZW5lciIsICJ2YWx1ZSIsICJDYW5jZWxsZWRFcnJvciIsICJSZXRyeWVyIiwgInJlc29sdmUiLCAicmVqZWN0IiwgInBhdXNlIiwgInJ1biIsICJjYW5jZWxGbiIsICJOb3RpZnlNYW5hZ2VyIiwgImZsdXNoIiwgIlF1ZXJ5IiwgIm5vb3AiLCAiaXNTdGFsZSIsICJvbkZvY3VzIiwgImZldGNoIiwgImdldCIsICJmZXRjaEZuIiwgImdldERlZmF1bHRTdGF0ZSIsICJyZWR1Y2VyIiwgIlF1ZXJ5Q2FjaGUiLCAiZ2V0IiwgIm9uRm9jdXMiLCAiTXV0YXRpb24iLCAibm9vcCIsICJNdXRhdGlvbkNhY2hlIiwgIm9uRm9jdXMiLCAibm9vcCIsICJidWlsZE5ld1BhZ2VzIiwgInBhcmFtIiwgImZldGNoUGFnZSIsICJtYW51YWwiLCAicHJvbWlzZSIsICJfbG9vcCIsICJpIiwgIlF1ZXJ5Q2xpZW50IiwgIl9yZWYiLCAiX3JlZjIiLCAibm9vcCIsICJfcmVmMyIsICJRdWVyeU9ic2VydmVyIiwgInRyYWNrUHJvcCIsICJnZXQiLCAiZmV0Y2giLCAibm9vcCIsICJ2YWx1ZSIsICJpbXBvcnRfcmVhY3RfZG9tIiwgInVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIiwgIlJlYWN0RE9NIiwgInVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIiwgImxvZ2dlciIsICJsb2dnZXIiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgInVzZVF1ZXJ5Q2xpZW50IiwgIlF1ZXJ5Q2xpZW50UHJvdmlkZXIiLCAiX3JlZiIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAidXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgInNlYXJjaFZhbHVlIiwgInZhbHVlIiwgInByZWZpeCIsICJSZWFjdCIsICJvcHRpb25zIiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAibiIsICJtYXRjaCIsICJuMiIsICJ2YWx1ZSIsICJpbXBvcnRfcmVhY3RfZG9tIiwgImVudGl0eSIsICJSZWFjdCIsICJrZXlzIiwgInByb3BlcnR5IiwgImRvbWFpbnMiLCAicmFuZ2VzIiwgImlyaSIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAidmFsdWUiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIkRFRkFVTFRfSEFTX1RJVExFIiwgIm9udG9sb2d5IiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIm5vZGUiLCAiY3ljbGVDaGVjayIsICJjeWNsZUNoZWNrIiwgIm5vZGUiLCAiUmVhY3QiLCAibm9kZSIsICJoaWVyYXJjaHkiLCAiUmVhY3RET00iLCAicmVuZGVyIiwgIlJlYWN0IiwgInZhbHVlIiwgImltcG9ydF9yZWFjdF9kb20iLCAicmVuZGVyIiwgImRhdGEiLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAidmFsdWUiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSIsICJSZWFjdCIsICJyZW5kZXIiLCAiZGF0YSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJ2YWx1ZSIsICJSZWFjdCIsICJwYWdlSW5kZXgiLCAicGFnZVNpemUiLCAic29ydEZpZWxkIiwgInNvcnREaXJlY3Rpb24iLCAicGFnZU9mSXRlbXMiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAic2VhcmNoVmFsdWUiLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIkRFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMiLCAicmVuZGVyIiwgIm9wdGlvbiIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJERUZBVUxUX0hBU19USVRMRSIsICJSZWFjdCIsICJwcm9wZXJ0eSIsICJwcmVkaWNhdGVzIiwgImVudGl0eSIsICJpbnN0YW5jZXMiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAibm9kZSIsICJkYXRhIiwgImlzUG9wb3Zlck9wZW4iLCAiUmVhY3QiLCAiUmVhY3RET00iXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci90cmFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxCeVRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRBbGxLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQm9vbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL251bWVyYWwvbnVtZXJhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lRGF0YVZpZXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVSZWdFeHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUJ5VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0ZsYXR0ZW5hYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZsYXRSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVxdWlyZXMtcG9ydC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmdpZnkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VybC1wYXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VzY2FwZVJlZ0V4cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dsb2JhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmFpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3BhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2V4cG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9mdW5jdGlvbi92aXJ0dWFsL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZsYXQtbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1waXBlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3Qub3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2pzb24vc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvanNvbi9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1idW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC1pbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3NldC10aW1lb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29tcG9uZW50LWVtaXR0ZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AZWdqcy9oYW1tZXJqcy9kaXN0L2hhbW1lci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy92aXMtdXRpbC9lc25leHQvZXNtL3Zpcy11dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcmVmbGVjdC9jb25zdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3JlZmxlY3QvY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9yZWZsZWN0L2NvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvci5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90YXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9xdWV1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy13ZWJvcy13ZWJraXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21pY3JvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wZXJmb3JtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFueS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnByb21pc2Uud2l0aC1yZXNvbHZlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQucHJvbWlzZS50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9yZWdlbmVyYXRvci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnJlZXppbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm1hcC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9tYXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL21hcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2VudHJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9ybmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL25hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92NC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtaW50ZXJmYWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvcXVldWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC1wYXJ0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3NldC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zdHJlYW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtdmlldy50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtc2V0LWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS12aWV3LWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2Fzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnRyeS12aXJ0dWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2Z1bmN0aW9uL3ZpcnR1YWwvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9zaGFwZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb21wb25lbnQtZW1pdHRlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5oYXMtaW5zdGFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaXMtY29uY2F0LXNwcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnJlcGxhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwZWNpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc3BsaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudW5zY29wYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheVdpdGhvdXRIb2xlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5kYXRlLm5vdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9kYXRlL25vdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2luY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1yZWdleHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25vdC1hLXJlZ2V4cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3RyaW5nL3ZpcnR1YWwvaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy10cmltLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9udW1iZXItcGFyc2UtaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucGFyc2UtaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3BhcnNlLWludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmluZGV4LW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvaW5kZXgtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luZGV4LW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2pzb24vc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LWludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC10aW1lb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZmlsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGVnanMvaGFtbWVyanMvZGlzdC9oYW1tZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy92aXMtdXRpbC9lc25leHQvZXNtL3Zpcy11dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9kb3RwYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL2dlcGhpUGFyc2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9sb2NhbGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9DYWNoZWRJbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvSW1hZ2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mcmVlemluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXAuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbWFwL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL0dyb3Vwcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm51bWJlci5pcy1uYW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbnVtYmVyL2lzLW5hbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbnVtYmVyLWlzLWZpbml0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm51bWJlci5pcy1maW5pdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbnVtYmVyL2lzLWZpbml0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zb21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL251bWJlci1wYXJzZS1mbG9hdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnBhcnNlLWZsb2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3BhcnNlLWZsb2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvc2hhcmVkL0NvbXBvbmVudFV0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3NoYXJlZC9MYWJlbEFjY3VtdWxhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvc2hhcmVkL0xhYmVsU3BsaXR0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9zaGFyZWQvTGFiZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0LmNvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9yZWZsZWN0L2NvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvdXRpbC9Ob2RlQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9Cb3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy91dGlsL0NpcmNsZUltYWdlQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvQ2lyY3VsYXJJbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3V0aWwvU2hhcGVCYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0N1c3RvbVNoYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0RhdGFiYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0RpYW1vbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvRG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0VsbGlwc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvSWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9JbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9TcXVhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvSGV4YWdvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9TdGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL1RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvVHJpYW5nbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvVHJpYW5nbGVEb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvTm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9Ob2Rlc0hhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWRhdGEtZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3QuZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3JlZmxlY3QvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9nZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3N1cGVyUHJvcEJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXRoLmh5cG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL21hdGgvaHlwb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy91dGlsL2VuZC1wb2ludHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy91dGlsL2VkZ2UtYmFzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL2VkZ2VzL3V0aWwvYmV6aWVyLWVkZ2UtYmFzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL2VkZ2VzL2Jlemllci1lZGdlLWR5bmFtaWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy9iZXppZXItZWRnZS1zdGF0aWMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy91dGlsL2N1YmljLWJlemllci1lZGdlLWJhc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy9jdWJpYy1iZXppZXItZWRnZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL2VkZ2VzL3N0cmFpZ2h0LWVkZ2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9FZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL0VkZ2VzSGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvQmFybmVzSHV0U29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9SZXB1bHNpb25Tb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9waHlzaWNzL0hpZXJhcmNoaWNhbFJlcHVsc2lvblNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvU3ByaW5nU29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9IaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9waHlzaWNzL0NlbnRyYWxHcmF2aXR5U29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9GQTJCYXNlZFJlcHVsc2lvblNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvRkEyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9QaHlzaWNzRW5naW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JuZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvbmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3Y0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9OZXR3b3JrVXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL0NsdXN0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvQ2x1c3RlcmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9DYW52YXNSZW5kZXJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LWludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvaGFtbWVyVXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9DYW52YXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvVmlldy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy92aWV3LWhhbmRsZXIvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9rZXljaGFybS9zcmMva2V5Y2hhcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9OYXZpZ2F0aW9uSGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9JbnRlcmFjdGlvbkhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc2V0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLXdlYWsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy53ZWFrLW1hcC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy93ZWFrLW1hcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9zZWxlY3Rpb24vc2VsZWN0aW9uLWFjY3VtdWxhdG9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL1NlbGVjdGlvbkhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL0RpcmVjdGlvblN0cmF0ZWd5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZXZlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9ldmVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9ldmVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZXZlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvbGF5b3V0LWVuZ2luZS9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9MYXlvdXRFbmdpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvTWFuaXB1bGF0aW9uU3lzdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9vcHRpb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvYWxnb3JpdGhtcy9GbG95ZFdhcnNoYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL0thbWFkYUthd2FpLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9OZXR3b3JrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9sb2NhbGUtdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9lbnRyeS1lc25leHQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9mdW5jdGlvbi92aXJ0dWFsL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtcGlwZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3Qub3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcmVmbGVjdC9vd24ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2pzb24vc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LWludGVydmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC10aW1lb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvbXBvbmVudC1lbWl0dGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGVnanMvaGFtbWVyanMvZGlzdC9oYW1tZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdmlzLXV0aWwvZXNuZXh0L2VzbS92aXMtdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3JlZmxlY3QvY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3R5cGVvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3F1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9taWNyb3Rhc2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MtcGViYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wZXJmb3JtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY2F0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJlamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wdXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYW55LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQucHJvbWlzZS53aXRoLXJlc29sdmVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvcHJvbWlzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvcHJvbWlzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvcmVnZW5lcmF0b3IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZyZWV6aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXAuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbWFwL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9lbnRyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9lbnRyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2VudHJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcm5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9uYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLWludGVyZmFjZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL3F1ZXVlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zZXQtcGFydC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zZXQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zdHJlYW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtdmlldy50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtc2V0LWNoZWNrLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS12aWV3LWNoZWNrLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvQXV0b2NvbXBsZXRlV2lkZ2V0L0F1dG9jb21wbGV0ZVdpZGdldC50c3giLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vY29tbW9uL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NIZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Rocm90dGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90cmFja1N0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2ZldGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvYWRhcHRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCAiLi4vc3JjL21vZGVsL01vZGVsVHlwZUNoZWNrLnRzIiwgIi4uL3NyYy9hcHAvdXRpbC50cyIsICIuLi9zcmMvbW9kZWwvUmVpZmllZC50cyIsICIuLi9zcmMvbW9kZWwvTGlua2VkRW50aXRpZXMudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM1RoaW5nLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNFbnRpdHkudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM0NsYXNzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNQcm9wZXJ0eS50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzSW5kaXZpZHVhbC50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzT250b2xvZ3kudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM09udG9sb2dpZXMudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNFRoaW5nLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRFbnRpdHkudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNENsYXNzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRQcm9wZXJ0eS50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0SW5kaXZpZHVhbC50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0T250b2xvZ3kudHMiLCAiLi4vc3JjL21vZGVsL01vZGVsT2JqZWN0Q3JlYXRvci50cyIsICIuLi9zcmMvbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHkudHMiLCAiLi4vc3JjL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3QudHMiLCAiLi4vc3JjL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3RSZXN1bHQudHMiLCAiLi4vc3JjL21vZGVsL3RzNG5mZGktbW9kZWwvVHM0bmZkaVNlYXJjaFJlc3VsdC50cyIsICIuLi9zcmMvYXBpL09sc0FwaS50cyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYWNjZXNzaWJpbGl0eS9zY3JlZW5fcmVhZGVyX2xpdmUvc2NyZWVuX3JlYWRlcl9saXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfb25seS9zY3JlZW5fcmVhZGVyX29ubHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9odG1sX2lkX2dlbmVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcm5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9yZWdleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdmFsaWRhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9hbGlnbm1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icmVha3BvaW50L2N1cnJlbnRfYnJlYWtwb2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tbW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvaG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvdHlwZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2lzX2NvbG9yX2RhcmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9pc192YWxpZF9oZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9oZXhfdG9fcmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2xpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2NsaXBfcmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvdW5wYWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvQ29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9jaHJvbWEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY215ay9jbXlrMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9jbXlrL3JnYjJjbXlrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2NteWsvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL2hzbDJjc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNsL3JnYjJoc2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL3JnYjJjc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNsL2hzbDJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL2NzczJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2dsL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hjZy9oY2cycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hjZy9yZ2IyaGNnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hjZy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oZXgvaGV4MnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oZXgvcmdiMmhleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oZXgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNpL2hzaTJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNpL3JnYjJoc2kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc3YvaHN2MnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc3YvcmdiMmhzdi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc3YvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL2xhYi1jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL2xhYjJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL3JnYjJsYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9sY2gybGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9sY2gycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9oY2wycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9sYWIybGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9yZ2IybGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9jb2xvcnMvdzNjeDExLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL25hbWVkL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL251bS9udW0ycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL251bS9yZ2IybnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL251bS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9yZ2IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vdGVtcC90ZW1wZXJhdHVyZTJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vdGVtcC9yZ2IydGVtcGVyYXR1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vdGVtcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xhYi9va2xhYjJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vb2tsYWIvcmdiMm9rbGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGFiL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGNoL29rbGNoMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xjaC9yZ2Iyb2tsY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vb2tsY2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2FscGhhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9jbGlwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9kYXJrZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvbHVtaW5hbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvbWl4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9taXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL3ByZW11bHRpcGx5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9zYXR1cmF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvc2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9zaGFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvcmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9scmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9sYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL19oc3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2xjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvbnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9oY2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2hzaS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvaHNsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9oc3YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL29rbGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9va2xjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvYXZlcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3Ivc2NhbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL2Jlemllci5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvYmxlbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL2N1YmVoZWxpeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvcmFuZG9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2FuYWx5emUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvY29udHJhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvZGVsdGEtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9kaXN0YW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy92YWxpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9zY2FsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvY29sb3JzL2NvbG9yYnJld2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9jb2xvcl9wYWxldHRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvZXVpX3BhbGV0dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvbWFuaXB1bGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvY29udHJhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fY29sb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2FuaW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19icmVha3BvaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL2xvZ2ljYWxzLmpzb24iLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvbG9naWNhbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvbG9naWNhbF9zaG9ydGhhbmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL21hdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvc2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucy90eXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3NpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYm9yZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19sZXZlbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zdGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL3RoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvd2FybmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLWVsZW1lbnQtNTQ4NmM1MWMuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9VdGlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi93ZWFrLW1lbW9pemUvZGlzdC9lbW90aW9uLXdlYWstbWVtb2l6ZS5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9lbW90aW9uLW1lbW9pemUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jYWNoZS9kaXN0L2Vtb3Rpb24tY2FjaGUuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvZW1vdGlvbi11dGlscy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MvZGlzdC9lbW90aW9uLXVzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aHJvdHRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2JyZWFrcG9pbnQvX3NvcnRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icmVha3BvaW50L2N1cnJlbnRfYnJlYWtwb2ludF9ob29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvcHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9lbW90aW9uL2Nsb25lX2VsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9lbW90aW9uL3ByZWZpeGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jc3MvY3JlYXRlLWluc3RhbmNlL2Rpc3QvZW1vdGlvbi1jc3MtY3JlYXRlLWluc3RhbmNlLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2Vtb3Rpb24vY3NzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvZW1vdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RoZW1lL3N0eWxlX21lbW9pemF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvaG9va3MvdXNlVXBkYXRlRWZmZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvaG9va3MvdXNlQ29tYmluZWRSZWZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYnJlYWtwb2ludC9pc193aXRoaW5faG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jYW52YXMvY2FudmFzX3RleHRfdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb3B5L3RhYnVsYXJfY29weS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2ZpbmRFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2NvbW1vbl9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2xvZGFzaF9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9ib29sZWFuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9kYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9udW1iZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X2F1dG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9wb3BvdmVyL3BvcG92ZXJfcG9zaXRpb25pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zZWN1cml0eS9nZXRfc2VjdXJlX3JlbF9mb3JfdGFyZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvc29ydC9zb3J0X2RpcmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL29iamVjdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zb3J0L2NvbXBhcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvcmVzZXQvZ2xvYmFsX3N0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fY29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX2hlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX3BhZGRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX3N0YXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fcmVzcG9uc2l2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL3Jlc2V0L3Jlc2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL2FuaW1hdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy91dGlsaXR5L2FuaW1hdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2FjY2Vzc2liaWxpdHkvc2NyZWVuX3JlYWRlcl9vbmx5L3NjcmVlbl9yZWFkZXJfb25seS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3RhYmJhYmxlL3NyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL3NoYWRvd3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9zaGFkb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25fZGlzcGxheS9fYnV0dG9uX2Rpc3BsYXkuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5X2NvbnRlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FjY2Vzc2liaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FnZ3JlZ2F0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYWxlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FuYWx5emVFdmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5hbHl6ZV9ldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5ub3RhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5vbWFseV9jaGFydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5vbWFseV9zd2ltX2xhbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwbV90cmFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FkZF9kYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FwbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hdWRpdGJlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jYW52YXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jYXNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jb25zb2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2Rhc2hib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2RldnRvb2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9lbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9maWxlYmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2ZsZWV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZ2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZ3JhcGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9ncm9rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaGVhcnRiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9sZW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbG9ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21hbmFnZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9tZXRyaWNiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbW9uaXRvcmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX25vdGVib29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcGFja2V0YmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3BpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcmVwb3J0aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NlY3VyaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc3BhY2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc3FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdGltZWxpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VwdGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfd2F0Y2hlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93RW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd1N0YXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19kb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19sZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19yaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXJyb3dfdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FydGljbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FzdGVyaXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYmVha2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9iZWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9iZWxsU2xhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JldGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JvbHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JveGVzX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icmFuY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JyYW5jaFVzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Jyb29tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icnVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9idWxsc2V5ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2FsZW5kYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NoYW5nZV9wb2ludF9kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jaGVlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2xpY2tMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbGlja1JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2xvY2tDb3VudGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZERyaXp6bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nsb3VkU3Rvcm15LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZFN1bm55LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbHVzdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb2xvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29tcHV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29uc29sZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udGFpbmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QWJvdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZUJlbG93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QmVsb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRyb2xzX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb3B5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb3B5X2NsaXBib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3Jvc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nyb3NzSW5DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nyb3NzX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3Jvc3NoYWlycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3VycmVuY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2N1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZGF0YWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Rlc2t0b3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RpZmYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Rpc2N1c3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb2N1bWVudEVkaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3RJbkNpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3dubG9hZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9ib2xkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2NvbW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9oZWFkaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfaXRhbGljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3JlZG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9zdHJpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl90YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3VuZGVybGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3VuZG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZW1haWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lbmRwb2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lcmFzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lcnJvckZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXNxbFZpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhwYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leHBhbmRNaW5pLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V5ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXllX2Nsb3NlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmFjZV9oYXBweS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmFjZV9uZXV0cmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mYWNlX3NhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmllbGRfc3RhdGlzdGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9maWx0ZXJFeGNsdWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9maWx0ZXJJZ25vcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZpbHRlckluQ2lyY2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9maWx0ZXJJbmNsdWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mbGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkZXJfY2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9jbG9zZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZGVyX29wZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZyYW1lTmV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnJhbWVQcmV2aW91cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnVsbFNjcmVlbkV4aXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Z1bGxfc2NyZWVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2Vhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2xvYmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyYWJPbW5pZGlyZWN0aW9uYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ3JhZGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2hlYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWF0bWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWxwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ob21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pSW5DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ltYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbXBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleFRlbXBvcmFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfY2xvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X2VkaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X2ZsdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9tYXBwaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9vcGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9ydW50aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9zZXR0aW5ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5maW5pdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lucHV0T3V0cHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnNwZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnZlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pc3N1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rZXlib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3FsX2ZpZWxkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF9vcGVyYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF92YWx1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3ViZXJuZXRlc05vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xhdW5jaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGF5ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sZXR0ZXJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVEYXNoZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVEb3R0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVTb2xpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGlzdF9hZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvY2tPcGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dfcGF0dGVybl9hbmFseXNpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nX3JhdGVfYW5hbHlzaXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYWVyb3NwaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2FwYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F3cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hd3NfbW9uby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19henVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19henVyZV9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2JlYXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jZXBoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2Nsb3VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jb2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvZGVzYW5kYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19kb2NrZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZHJvcHdpemFyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbGFzdGljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZWxhc3RpY3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19ldGNkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2djcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19naXRodWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ21haWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ29sYW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2dvb2dsZV9nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2hhcHJveHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29faWJtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2libV9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2thZmthLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19rdWJlcm5ldGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2xvZ2dpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbWFwcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tZW1jYWNoZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tb25nb2RiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX215c3FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX25naW54LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fb3NxdWVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19waHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcG9zdGdyZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcHJvbWV0aGV1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19yZWRpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zZWN1cml0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19za2V0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fc2xhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fdXB0aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb193ZWJob29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3dpbmRvd3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dzdGFzaF9pZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX291dHB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hZ25ldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tYXBfbWFya2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW1vcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnVEb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51TGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudVJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51VXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lcmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9taW5pbWl6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21pbnVzX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXNfaW5fc3F1YXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9hZHZhbmNlZF9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9zaW5nbGVfbWV0cmljX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX3JlZ3Jlc3Npb25fam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tb2JpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21vb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21vdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL25hbWVzcGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbmVzdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9uZXdfY2hhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9vZmZsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9vbmxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhY2thZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhZ2VTZWxlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhZ2VzU2VsZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYWludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFsZXR0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFwZXJfY2xpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFydGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BheW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BlbmNpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGVyY2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waW5fZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waXBlQnJlYWtzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waXBlTm9CcmVha3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Bpdm90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbGF5RmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzX2luX3NxdWFyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcG9wb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3F1b3RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZWZyZXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZXBvcnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcmV0dXJuX2tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2F2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2NhbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NoYXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zaGFyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2luZ2xlX21ldHJpY192aWV3ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Nub3dmbGFrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydEFzY2VuZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydERlc2NlbmRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0UmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRfZG93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydF91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NwYWNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3BhcmtsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJQbHVzRW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJQbHVzRmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfbWludXNfZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RvcF9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3Bfc2xhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3JhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3VibW9kdWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N3YXRjaF9pbnB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3ltbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFibGVPZkNvbnRlbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RlbXBlcmF0dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90aW1lUmVmcmVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGltZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RpbWVsaW5lV2l0aEFycm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90aW1lc2xpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFsaWFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFubm90YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQmluYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkJvb2xlYW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Db25zdGFudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5EYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkRpbWVuc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkVudW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FdmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FeGNlcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRmllbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GbGF0dGVuZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuR2VvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkhpc3RvZ3JhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5JUC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5JbnRlcmZhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuSm9pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5LZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuS2V5d29yZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Nb2R1bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk5lc3RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5OdWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk51bWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5PYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuT3BlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5QYXJhbWV0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUGVyY29sYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUmVwby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TZWFyY2hUeXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblNlbWFudGljVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TaGFwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuU3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5UYWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblZhcmlhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblZlY3RvckRlbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblZlY3RvclNwYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdHJhaW5pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYW5zaXRpb25MZWZ0SW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYW5zaXRpb25MZWZ0T3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90cmFuc2l0aW9uVG9wSW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYW5zaXRpb25Ub3BPdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy91bmZvbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3VubGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlckF2YXRhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3ZlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlkZW9QbGF5ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19hcmVhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19nYXVnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2dvYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19saW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19tYXBfcmVnaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWV0cmljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfcGllLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190YWdfY2xvdWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGltZWxpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc192ZWdhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dhcm5pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dhcm5pbmdGaWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dvcmRXcmFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93cmVuY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vaWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9pY29uX21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3JlYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL25hbWVkX2NvbG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9pY29uLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaTE4bi9pMThuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0L2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2kxOG4vaTE4bl91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9sb2FkaW5nL19sb2FkaW5nX3N0cmluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZ19zcGlubmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmdfc3Bpbm5lci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25fZGlzcGxheS9fYnV0dG9uX2Rpc3BsYXlfY29udGVudC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9lbXB0eS9idXR0b25fZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25fZW1wdHkvYnV0dG9uX2VtcHR5LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9pY29uL2J1dHRvbl9pY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uX2ljb24vYnV0dG9uX2ljb24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbm5lcl90ZXh0L2lubmVyX3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Rvb2xfdGlwL3Rvb2xfdGlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9vYnNlcnZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9ydGFsL3BvcnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcHJvdmlkZXIvY29tcG9uZW50X2RlZmF1bHRzL2NvbXBvbmVudF9kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdG9vbF90aXAvdG9vbF90aXBfcG9wb3Zlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdG9vbF90aXAvdG9vbF90aXAuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC90b29sX3RpcF9hbmNob3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Rvb2xfdGlwL3Rvb2xfdGlwX2Fycm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC90b29sX3RpcF9tYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC9pY29uX3RpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHRfY29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9jb2xvci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9hbGlnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0X2FsaWduLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbGluay9saW5rLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHQuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyL2Rpc3QvcmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2F1dG9fc2l6ZXIvYXV0b19zaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvYmFkZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbG9yX3BpY2tlci91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvY29sb3JfdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2JhZGdlL2JhZGdlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvYmV0YV9iYWRnZS9iZXRhX2JhZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYWRnZS9iZXRhX2JhZGdlL2JldGFfYmFkZ2Uuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9saW5rL2xpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xpbmsvZXh0ZXJuYWxfbGlua19pY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL2lucHV0X3BvcG92ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZvY3VzX3RyYXAvZm9jdXNfdHJhcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L0NvbWJpbmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvVUkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLWNhbGxiYWNrLXJlZi9kaXN0L2VzMjAxNS9hc3NpZ25SZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1jYWxsYmFjay1yZWYvZGlzdC9lczIwMTUvdXNlUmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2UtY2FsbGJhY2stcmVmL2Rpc3QvZXMyMDE1L3VzZU1lcmdlUmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLXNpZGVjYXIvZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9kaXN0L2VzMjAxNS9leHBvcnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvTG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvRm9jdXNHdWFyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvc2NvcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L1RyYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtY2xpZW50c2lkZS1lZmZlY3QvbGliL2luZGV4LmVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYk9yZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYmJhYmxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy90YWJVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9ET011dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9hbGwtYWZmZWN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvc2FmZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9nZXRBY3RpdmVFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzSW5zaWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzSXNIaWRkZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvY29ycmVjdEZvY3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2ZpcnN0Rm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvc29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2F1dG8tZm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvcGFyZW50aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzU29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvY29tbWFuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvbW92ZUZvY3VzSW5zaWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3JldHVybi1mb2N1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9zaWJsaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3NpZGVjYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L1NpZGVFZmZlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2hvb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dldC1ub25jZS9kaXN0L2VzMjAxNS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L3NpbmdsZXRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L2FnZ3Jlc2l2ZUNhcHR1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L2hhbmRsZVNjcm9sbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvc2lkZWNhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvRWZmZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmlhLWhpZGRlbi9kaXN0L2VzMjAxNS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvSW50ZXJhY3Rpdml0eURpc2FibGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9zaWRlY2FyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL29ic2VydmVyL211dGF0aW9uX29ic2VydmVyL211dGF0aW9uX29ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdXRzaWRlX2NsaWNrX2RldGVjdG9yL291dHNpZGVfY2xpY2tfZGV0ZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlcl9hcnJvdy9fcG9wb3Zlcl9hcnJvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX2Fycm93L19wb3BvdmVyX2Fycm93LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX3BhbmVsL19wb3BvdmVyX3BhbmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wYW5lbC9wYW5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFuZWwvcGFuZWwuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXJfcGFuZWwvX3BvcG92ZXJfcGFuZWwuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zcGFjZXIvc3BhY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zcGFjZXIvc3BhY2VyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NhcmQvY2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY2FyZC9jYXJkX3NlbGVjdC9jYXJkX3NlbGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY2FyZC9jYXJkX3NlbGVjdC9jYXJkX3NlbGVjdC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NhcmQvY2FyZC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vY2hlY2tib3gvY2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vY2hlY2tib3gvY2hlY2tib3guc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fbGFiZWwvZm9ybV9sYWJlbC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZsZXgvZmxleF9ncm91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZmxleC9mbGV4X2dyb3VwLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZmxleC9mbGV4X2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZsZXgvZmxleF9pdGVtLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9ldWlfZm9ybV9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL3ZhbGlkYXRhYmxlX2NvbnRyb2wvdmFsaWRhdGFibGVfY29udHJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9sYWJlbC9mb3JtX2xhYmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9pY29ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXRfY2xlYXJfYnV0dG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9jbGVhcl9idXR0b24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9jdXN0b21faWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXRfaWNvbnMuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvX251bV9pY29ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXQuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2ZpZWxkX3NlYXJjaC9maWVsZF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icm93c2VyL2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZmllbGRfc2VhcmNoL2ZpZWxkX3NlYXJjaC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9lcnJvcl90ZXh0L2Zvcm1fZXJyb3JfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2Vycm9yX3RleHQvZm9ybV9lcnJvcl90ZXh0LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2hlbHBfdGV4dC9mb3JtX2hlbHBfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2hlbHBfdGV4dC9mb3JtX2hlbHBfdGV4dC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9yb3cvZm9ybV9yb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9yb3cvZm9ybV9yb3cuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9ob3Jpem9udGFsX3J1bGUvaG9yaXpvbnRhbF9ydWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9ob3Jpem9udGFsX3J1bGUvaG9yaXpvbnRhbF9ydWxlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9wYW5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0X21lbnUvY29udGV4dF9tZW51X2l0ZW0uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0X21lbnUvY29udGV4dF9tZW51LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9wYW5lbC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vc3dpdGNoL3N3aXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9zd2l0Y2gvc3dpdGNoLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY3NzL2Rpc3QvZW1vdGlvbi1jc3MuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdmVybGF5X21hc2svb3ZlcmxheV9tYXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdmVybGF5X21hc2svb3ZlcmxheV9tYXNrLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvb3ZlcmxheV9tYXNrL292ZXJsYXlfbWFza19ib2R5LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvbm9kZV9tb2R1bGVzL21lbW9pemUtb25lL2Rpc3QvbWVtb2l6ZS1vbmUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL3RpbWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2RvbUhlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvY3JlYXRlR3JpZENvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9WYXJpYWJsZVNpemVHcmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2NyZWF0ZUxpc3RDb21wb25lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvVmFyaWFibGVTaXplTGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9GaXhlZFNpemVHcmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL0ZpeGVkU2l6ZUxpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvc2hhbGxvd0RpZmZlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvYXJlRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvc2hvdWxkQ29tcG9uZW50VXBkYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvY29tYm9fYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvbWF0Y2hpbmdfb3B0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfcGlsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfcGlsbC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfaW5wdXQvY29tYm9fYm94X2lucHV0LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9vcHRpb25zX2xpc3QvY29tYm9fYm94X29wdGlvbnNfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaGlnaGxpZ2h0L2hpZ2hsaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbWFyay9tYXJrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9tYXJrL21hcmsuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9oaWdobGlnaHQvX2hpZ2hsaWdodF9hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hpZ2hsaWdodC9faGlnaGxpZ2h0X2ZpcnN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9maWx0ZXJfZ3JvdXAvZmlsdGVyX3NlbGVjdF9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9maWx0ZXJfZ3JvdXAvZmlsdGVyX3NlbGVjdF9pdGVtLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dF90cnVuY2F0ZS90ZXh0X3RydW5jYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0X3RydW5jYXRlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0X3RydW5jYXRlL3RleHRfdHJ1bmNhdGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0X3RydW5jYXRlL3RleHRfYmxvY2tfdHJ1bmNhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfb3B0aW9uc19saXN0L2NvbWJvX2JveF90aXRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9vcHRpb25zX2xpc3QvY29tYm9fYm94X29wdGlvbnNfbGlzdC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3guc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9wYWdpbmF0aW9uL3RhYmxlX3BhZ2luYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uX2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uX2J1dHRvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbl9idXR0b25fYXJyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3BhZ2luYXRpb24vdGFibGVfcGFnaW5hdGlvbl9kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFicy90YWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFiLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFicy90YWJzX2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFicy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFicy90YWJzLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFicy90YWJiZWRfY29udGVudC90YWJiZWRfY29udGVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZGVsYXlfcmVuZGVyL2RlbGF5X3JlbmRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaGVhbHRoL2hlYWx0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaGVhbHRoL2hlYWx0aC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV93cmFwcGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV93cmFwcGVyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfYnV0dG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV9idXR0b24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV9jYXB0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV9jYXB0aW9uLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2Uuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV9mdWxsc2NyZWVuX3dyYXBwZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX2Z1bGxzY3JlZW5fd3JhcHBlci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX3R5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wcm92aWRlci9wcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL3V0aWxpdHkvdXRpbGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcHJvdmlkZXIvY2FjaGUvY2FjaGVfcHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Byb3ZpZGVyL3N5c3RlbV9jb2xvcl9tb2RlL3N5c3RlbV9jb2xvcl9tb2RlX3Byb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wcm92aWRlci9uZXN0ZWQvbmVzdGVkX2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlX3NlYXJjaC9zZWxlY3RhYmxlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9tYXRjaGluZ19vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfbWVzc2FnZS9zZWxlY3RhYmxlX21lc3NhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9tZXNzYWdlL3NlbGVjdGFibGVfbWVzc2FnZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9saXN0L3NlbGVjdGFibGVfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlX2xpc3Qvc2VsZWN0YWJsZV9saXN0X2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9saXN0L3NlbGVjdGFibGVfbGlzdF9pdGVtLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlX2xpc3Qvc2VsZWN0YWJsZV9saXN0LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL21vYmlsZS9yZXNwb25zaXZlX2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfYm9keS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfZm9vdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9mb290ZXJfY2VsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL190YWJsZV9jZWxsX2NvbnRlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL190YWJsZV9jZWxsX2NvbnRlbnQuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9jZWxsc19zaGFyZWQuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9oZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2hlYWRlcl9jZWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9oZWFkZXJfY2VsbF9jaGVja2JveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX2hlYWRlcl9tb2JpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL21vYmlsZS90YWJsZV9oZWFkZXJfbW9iaWxlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX3NvcnRfbW9iaWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS9tb2JpbGUvdGFibGVfc29ydF9tb2JpbGVfaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9yb3cuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9yb3dfY2VsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93X2NlbGwuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9yb3dfY2VsbF9jaGVja2JveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvYmFzaWNfdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2NvbGxhcHNlZF9pdGVtX2FjdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2FjdGlvbl90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvZXhwYW5kZWRfaXRlbV9hY3Rpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9kZWZhdWx0X2l0ZW1fYWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9jdXN0b21faXRlbV9hY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL3BhZ2luYXRpb25fYmFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9iYXNpY190YWJsZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvc3Vic2NyaWJhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2ZvY3VzTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9vbmxpbmVNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3JldHJ5ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbm90aWZ5TWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9sb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnlDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9tdXRhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9tdXRhdGlvbkNhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2luZmluaXRlUXVlcnlCZWhhdmlvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeUNsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeU9ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9yZWFjdEJhdGNoZWRVcGRhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRCYXRjaFVwZGF0ZXNGbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvbG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRMb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L1F1ZXJ5Q2xpZW50UHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvdXNlQmFzZVF1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC91c2VRdWVyeS5qcyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9EYXRhQ29udGVudFdpZGdldC9EYXRhQ29udGVudFdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9FbnRpdHlJbmZvV2lkZ2V0L0VudGl0eUluZm9XaWRnZXQudHN4IiwgIi4uL3NyYy9tb2RlbC9TdHJ1Y3R1cmVSZW5kZXJpbmcudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvSnNvbkFwaVdpZGdldC9Kc29uQXBpV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9EZXNjcmlwdGlvbldpZGdldC9EZXNjcmlwdGlvbldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9EZXNjcmlwdGlvbldpZGdldC9EZXNjcmlwdGlvblByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9JcmlXaWRnZXQvSXJpV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9UYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L1RhYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvT250b2xvZ3lJbmZvV2lkZ2V0L09udG9sb2d5SW5mb1dpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0U2VtTG9va1AvSGllcmFyY2h5V2lkZ2V0LnRzeCIsICIuLi9zcmMvYXBpL1Nrb3NBcGkudHMiLCAiLi4vc3JjL2FwaS9PbnRvUG9ydGFsQXBpLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0Nyb3NzUmVmV2lkZ2V0L0Nyb3NzUmVmVGFiV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L01ldGFkYXRhV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0L0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvUmVzb3VyY2VzV2lkZ2V0L1Jlc291cmNlc1dpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9TZWFyY2hCYXJXaWRnZXQvU2VhcmNoQmFyV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0L1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0L01ldGFkYXRhQ29tcGFjdC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9FbnRpdHlPbnRvTGlzdFdpZGdldC9FbnRpdHlPbnRvTGlzdFdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9FbnRpdHlEZWZpbmVkQnlXaWRnZXQvRW50aXR5RGVmaW5lZEJ5V2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0VudGl0eVJlbGF0aW9uc1dpZGdldC9FbnRpdHlSZWxhdGlvbnNXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvVGVybURlcGljdGlvbldpZGdldC9UZXJtRGVwaWN0aW9uV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0dyYXBoVmlld1dpZGdldC9HcmFwaFZpZXdXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIFRPRE86IHRoaXMgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGdldHMgaW1wb3J0ZWQgZHVyaW5nIGJ1aWxkLlxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNy4wLjInO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xuZXhwb3J0cy5GcmFnbWVudCA9IDB4ZWFjYjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IDB4ZWFjYztcbmV4cG9ydHMuUHJvZmlsZXIgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbmV4cG9ydHMuU3VzcGVuc2UgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBleHBvcnRzLkZyYWdtZW50ID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBleHBvcnRzLlN0cmljdE1vZGUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIGV4cG9ydHMuUHJvZmlsZXIgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBleHBvcnRzLlN1c3BlbnNlID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZGlzcGF0Y2hlci5cbiAqL1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge1JlYWN0Q29tcG9uZW50fVxuICAgKi9cbiAgY3VycmVudDogbnVsbFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBiYXRjaCdzIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBob3cgbG9uZyBhbiB1cGRhdGVcbiAqIHNob3VsZCBzdXNwZW5kIGZvciBpZiBpdCBuZWVkcyB0by5cbiAqL1xudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0ge1xuICB0cmFuc2l0aW9uOiAwXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqL1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0ge307XG52YXIgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IG51bGw7XG5mdW5jdGlvbiBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spIHtcbiAge1xuICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgfVxufVxuXG57XG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lID0gZnVuY3Rpb24gKHN0YWNrKSB7XG4gICAge1xuICAgICAgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IHN0YWNrO1xuICAgIH1cbiAgfTsgLy8gU3RhY2sgaW1wbGVtZW50YXRpb24gaW5qZWN0ZWQgYnkgdGhlIGN1cnJlbnQgcmVuZGVyZXIuXG5cblxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnOyAvLyBBZGQgYW4gZXh0cmEgdG9wIGZyYW1lIHdoaWxlIGFuIGVsZW1lbnQgaXMgYmVpbmcgdmFsaWRhdGVkXG5cbiAgICBpZiAoY3VycmVudEV4dHJhU3RhY2tGcmFtZSkge1xuICAgICAgc3RhY2sgKz0gY3VycmVudEV4dHJhU3RhY2tGcmFtZTtcbiAgICB9IC8vIERlbGVnYXRlIHRvIHRoZSBpbmplY3RlZCByZW5kZXJlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICB2YXIgaW1wbCA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrO1xuXG4gICAgaWYgKGltcGwpIHtcbiAgICAgIHN0YWNrICs9IGltcGwoKSB8fCAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH07XG59XG5cbi8qKlxuICogVXNlZCBieSBhY3QoKSB0byB0cmFjayB3aGV0aGVyIHlvdSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGUuXG4gKi9cbnZhciBJc1NvbWVSZW5kZXJlckFjdGluZyA9IHtcbiAgY3VycmVudDogZmFsc2Vcbn07XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IHtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICBSZWFjdEN1cnJlbnRPd25lcjogUmVhY3RDdXJyZW50T3duZXIsXG4gIElzU29tZVJlbmRlcmVyQWN0aW5nOiBJc1NvbWVSZW5kZXJlckFjdGluZyxcbiAgLy8gVXNlZCBieSByZW5kZXJlcnMgdG8gYXZvaWQgYnVuZGxpbmcgb2JqZWN0LWFzc2lnbiB0d2ljZSBpbiBVTUQgYnVuZGxlczpcbiAgYXNzaWduOiBfYXNzaWduXG59O1xuXG57XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lO1xufVxuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9O1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgdmFyIF9jb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gX2NvbnN0cnVjdG9yICYmIChfY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgX2NvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJztcbiAgICB2YXIgd2FybmluZ0tleSA9IGNvbXBvbmVudE5hbWUgKyBcIi5cIiArIGNhbGxlck5hbWU7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3IoXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBcIiArICdUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiAnICsgJ0luc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCAnICsgJ2NsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9IHRydWU7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUuXG4gKi9cblxuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuXG4gICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQgc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gTmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTtcbiAgfVxufTtcblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7IC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlXG4gIC8vIHJlbmRlcmVyLlxuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBjb21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9cbiAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gIGlmICghKHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHwgcGFydGlhbFN0YXRlID09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwic2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCIgKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xufTtcbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cblxuQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbn07XG4vKipcbiAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNzaWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2VcbiAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzXG4gKiBtb2Rlcm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYgaXQncyBhY2Nlc3NlZC5cbiAqL1xuXG5cbntcbiAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXSxcbiAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXVxuICB9O1xuXG4gIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKTtcblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGZvciAodmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykge1xuICAgIGlmIChkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7XG4gICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuXG5Db21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuLyoqXG4gKiBDb252ZW5pZW5jZSBjb21wb25lbnQgd2l0aCBkZWZhdWx0IHNoYWxsb3cgZXF1YWxpdHkgY2hlY2sgZm9yIHNDVS5cbiAqL1xuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbnZhciBwdXJlQ29tcG9uZW50UHJvdG90eXBlID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuY29uc3RydWN0b3IgPSBQdXJlQ29tcG9uZW50OyAvLyBBdm9pZCBhbiBleHRyYSBwcm90b3R5cGUganVtcCBmb3IgdGhlc2UgbWV0aG9kcy5cblxuX2Fzc2lnbihwdXJlQ29tcG9uZW50UHJvdG90eXBlLCBDb21wb25lbnQucHJvdG90eXBlKTtcblxucHVyZUNvbXBvbmVudFByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5cbi8vIGFuIGltbXV0YWJsZSBvYmplY3Qgd2l0aCBhIHNpbmdsZSBtdXRhYmxlIHZhbHVlXG5mdW5jdGlvbiBjcmVhdGVSZWYoKSB7XG4gIHZhciByZWZPYmplY3QgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWZPYmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIHJlZk9iamVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5GcmFnbWVudDpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgZXhwb3J0cy5Qcm9maWxlcjpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBleHBvcnRzLlN0cmljdE1vZGU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBleHBvcnRzLlN1c3BlbnNlOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biwgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgY29uZmlnLl9fc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gY29uZmlnLl9fc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBjb21wb25lbnROYW1lLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxudmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNlbGZcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzb3VyY2VcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG4vKipcbiAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCBvZiB0aGUgZ2l2ZW4gdHlwZS5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjY3JlYXRlZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIGtleSA9IG51bGw7XG4gIHZhciByZWYgPSBudWxsO1xuICB2YXIgc2VsZiA9IG51bGw7XG4gIHZhciBzb3VyY2UgPSBudWxsO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICByZWYgPSBjb25maWcucmVmO1xuXG4gICAgICB7XG4gICAgICAgIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zZWxmO1xuICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NvdXJjZTsgLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdFxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChrZXkgfHwgcmVmKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xufVxuZnVuY3Rpb24gY2xvbmVBbmRSZXBsYWNlS2V5KG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudChvbGRFbGVtZW50LnR5cGUsIG5ld0tleSwgb2xkRWxlbWVudC5yZWYsIG9sZEVsZW1lbnQuX3NlbGYsIG9sZEVsZW1lbnQuX3NvdXJjZSwgb2xkRWxlbWVudC5fb3duZXIsIG9sZEVsZW1lbnQucHJvcHMpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2Nsb25lZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIGlmICghIShlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHVuZGVmaW5lZCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArIGVsZW1lbnQgKyBcIi5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm9wTmFtZTsgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuXG4gIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cblxuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjsgLy8gU2VsZiBpcyBwcmVzZXJ2ZWQgc2luY2UgdGhlIG93bmVyIGlzIHByZXNlcnZlZC5cblxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7IC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuXG4gIHZhciBzb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7IC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cblxuICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgLy8gU2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuXG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuXG5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuXG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIGlmIChjb25maWdbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQoZWxlbWVudC50eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxudmFyIFNFUEFSQVRPUiA9ICcuJztcbnZhciBTVUJTRVBBUkFUT1IgPSAnOic7XG4vKipcbiAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nO1xuICB2YXIgZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPSc6ICc9MCcsXG4gICAgJzonOiAnPTInXG4gIH07XG4gIHZhciBlc2NhcGVkU3RyaW5nID0ga2V5LnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG4gIHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nO1xufVxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4ID0gL1xcLysvZztcblxuZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgZWxlbWVudCB3aXRoaW4gYSBzZXQuXG4gKlxuICogQHBhcmFtIHsqfSBlbGVtZW50IEEgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEtleShlbGVtZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnb2JqZWN0JyAmJiBlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICByZXR1cm4gZXNjYXBlKCcnICsgZWxlbWVudC5rZXkpO1xuICB9IC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG5cblxuICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuYW1lU29GYXIsIGNhbGxiYWNrKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuXG4gIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQgYXMgbnVsbC5cbiAgICBjaGlsZHJlbiA9IG51bGw7XG4gIH1cblxuICB2YXIgaW52b2tlQ2FsbGJhY2sgPSBmYWxzZTtcblxuICBpZiAoY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgc3dpdGNoIChjaGlsZHJlbi4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGlmIChpbnZva2VDYWxsYmFjaykge1xuICAgIHZhciBfY2hpbGQgPSBjaGlsZHJlbjtcbiAgICB2YXIgbWFwcGVkQ2hpbGQgPSBjYWxsYmFjayhfY2hpbGQpOyAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3M6XG5cbiAgICB2YXIgY2hpbGRLZXkgPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0RWxlbWVudEtleShfY2hpbGQsIDApIDogbmFtZVNvRmFyO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgICB2YXIgZXNjYXBlZENoaWxkS2V5ID0gJyc7XG5cbiAgICAgIGlmIChjaGlsZEtleSAhPSBudWxsKSB7XG4gICAgICAgIGVzY2FwZWRDaGlsZEtleSA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShjaGlsZEtleSkgKyAnLyc7XG4gICAgICB9XG5cbiAgICAgIG1hcEludG9BcnJheShtYXBwZWRDaGlsZCwgYXJyYXksIGVzY2FwZWRDaGlsZEtleSwgJycsIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7XG4gICAgICAgIG1hcHBlZENoaWxkID0gY2xvbmVBbmRSZXBsYWNlS2V5KG1hcHBlZENoaWxkLCAvLyBLZWVwIGJvdGggdGhlIChtYXBwZWQpIGFuZCBvbGQga2V5cyBpZiB0aGV5IGRpZmZlciwganVzdCBhc1xuICAgICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgICAgZXNjYXBlZFByZWZpeCArICggLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBSZWFjdC5Qb3J0YWwgZG9lc24ndCBoYXZlIGEga2V5XG4gICAgICAgIG1hcHBlZENoaWxkLmtleSAmJiAoIV9jaGlsZCB8fCBfY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpID8gLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBleGlzdGluZyBlbGVtZW50J3Mga2V5IGNhbiBiZSBhIG51bWJlclxuICAgICAgICBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoJycgKyBtYXBwZWRDaGlsZC5rZXkpICsgJy8nIDogJycpICsgY2hpbGRLZXkpO1xuICAgICAgfVxuXG4gICAgICBhcnJheS5wdXNoKG1hcHBlZENoaWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cblxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGl0ZXJhYmxlQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gPT09IGl0ZXJhYmxlQ2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgICAgd2FybignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGl0ZXJhYmxlQ2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICB2YXIgaWkgPSAwO1xuXG4gICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSAnJyArIGNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZykgKyBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBNYXBzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5tYXBcbiAqXG4gKiBUaGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZnVuYyBUaGUgbWFwIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLlxuICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBjb3VudCA9IDA7XG4gIG1hcEludG9BcnJheShjaGlsZHJlbiwgcmVzdWx0LCAnJywgJycsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGNvdW50KyspO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzXG4gKiBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBuID0gMDtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBuKys7IC8vIERvbid0IHJldHVybiBhbnl0aGluZ1xuICB9KTtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmcuXG4gIH0sIGZvckVhY2hDb250ZXh0KTtcbn1cbi8qKlxuICogRmxhdHRlbiBhIGNoaWxkcmVuIG9iamVjdCAodHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gKSBhbmRcbiAqIHJldHVybiBhbiBhcnJheSB3aXRoIGFwcHJvcHJpYXRlbHkgcmUta2V5ZWQgY2hpbGRyZW4uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVudG9hcnJheVxuICovXG5cblxuZnVuY3Rpb24gdG9BcnJheShjaGlsZHJlbikge1xuICByZXR1cm4gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfSkgfHwgW107XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZVxuICogaXMgb25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVub25seVxuICpcbiAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGEgc2luZ2xlIGNoaWxkIGdldHNcbiAqIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBlciwgYnV0IHRoZSBwdXJwb3NlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHRvXG4gKiBhYnN0cmFjdCBhd2F5IHRoZSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBvZiBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGNoaWxkcmVuIENoaWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLlxuICogQHJldHVybiB7UmVhY3RFbGVtZW50fSBUaGUgZmlyc3QgYW5kIG9ubHkgYFJlYWN0RWxlbWVudGAgY29udGFpbmVkIGluIHRoZVxuICogc3RydWN0dXJlLlxuICovXG5cblxuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlLCBjYWxjdWxhdGVDaGFuZ2VkQml0cykge1xuICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGN1bGF0ZUNoYW5nZWRCaXRzID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgIT09IG51bGwgJiYgdHlwZW9mIGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdjcmVhdGVDb250ZXh0OiBFeHBlY3RlZCB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjYWxjdWxhdGVDaGFuZ2VkQml0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICBfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IGNhbGN1bGF0ZUNoYW5nZWRCaXRzLFxuICAgIC8vIEFzIGEgd29ya2Fyb3VuZCB0byBzdXBwb3J0IG11bHRpcGxlIGNvbmN1cnJlbnQgcmVuZGVyZXJzLCB3ZSBjYXRlZ29yaXplXG4gICAgLy8gc29tZSByZW5kZXJlcnMgYXMgcHJpbWFyeSBhbmQgb3RoZXJzIGFzIHNlY29uZGFyeS4gV2Ugb25seSBleHBlY3RcbiAgICAvLyB0aGVyZSB0byBiZSB0d28gY29uY3VycmVudCByZW5kZXJlcnMgYXQgbW9zdDogUmVhY3QgTmF0aXZlIChwcmltYXJ5KSBhbmRcbiAgICAvLyBGYWJyaWMgKHNlY29uZGFyeSk7IFJlYWN0IERPTSAocHJpbWFyeSkgYW5kIFJlYWN0IEFSVCAoc2Vjb25kYXJ5KS5cbiAgICAvLyBTZWNvbmRhcnkgcmVuZGVyZXJzIHN0b3JlIHRoZWlyIGNvbnRleHQgdmFsdWVzIG9uIHNlcGFyYXRlIGZpZWxkcy5cbiAgICBfY3VycmVudFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgX2N1cnJlbnRWYWx1ZTI6IGRlZmF1bHRWYWx1ZSxcbiAgICAvLyBVc2VkIHRvIHRyYWNrIGhvdyBtYW55IGNvbmN1cnJlbnQgcmVuZGVyZXJzIHRoaXMgY29udGV4dCBjdXJyZW50bHlcbiAgICAvLyBzdXBwb3J0cyB3aXRoaW4gaW4gYSBzaW5nbGUgcmVuZGVyZXIuIFN1Y2ggYXMgcGFyYWxsZWwgc2VydmVyIHJlbmRlcmluZy5cbiAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgLy8gVGhlc2UgYXJlIGNpcmN1bGFyXG4gICAgUHJvdmlkZXI6IG51bGwsXG4gICAgQ29uc3VtZXI6IG51bGxcbiAgfTtcbiAgY29udGV4dC5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfUFJPVklERVJfVFlQRSxcbiAgICBfY29udGV4dDogY29udGV4dFxuICB9O1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSBmYWxzZTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IGZhbHNlO1xuXG4gIHtcbiAgICAvLyBBIHNlcGFyYXRlIG9iamVjdCwgYnV0IHByb3hpZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dCBvYmplY3QgZm9yXG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEl0IGhhcyBhIGRpZmZlcmVudCAkJHR5cGVvZiwgc28gd2UgY2FuIHByb3Blcmx5XG4gICAgLy8gd2FybiBmb3IgdGhlIGluY29ycmVjdCB1c2FnZSBvZiBDb250ZXh0IGFzIGEgQ29uc3VtZXIuXG4gICAgdmFyIENvbnN1bWVyID0ge1xuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0LFxuICAgICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0c1xuICAgIH07IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG5vdCBzZXR0aW5nIGEgdmFsdWUsIHdoaWNoIGlzIGludGVudGlvbmFsIGhlcmVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnN1bWVyLCB7XG4gICAgICBQcm92aWRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuUHJvdmlkZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuUHJvdmlkZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuUHJvdmlkZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9Qcm92aWRlcikge1xuICAgICAgICAgIGNvbnRleHQuUHJvdmlkZXIgPSBfUHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBfY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZTI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUyKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlMiA9IF9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3RocmVhZENvdW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll90aHJlYWRDb3VudDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX3RocmVhZENvdW50KSB7XG4gICAgICAgICAgY29udGV4dC5fdGhyZWFkQ291bnQgPSBfdGhyZWFkQ291bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBDb25zdW1lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuQ29uc3VtZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuQ29uc3VtZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkaXNwbGF5TmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5kaXNwbGF5TmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyKSB7XG4gICAgICAgICAgICB3YXJuKCdTZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gQ29udGV4dC5Db25zdW1lciBoYXMgbm8gZWZmZWN0LiAnICsgXCJZb3Ugc2hvdWxkIHNldCBpdCBkaXJlY3RseSBvbiB0aGUgY29udGV4dCB3aXRoIENvbnRleHQuZGlzcGxheU5hbWUgPSAnJXMnLlwiLCBkaXNwbGF5TmFtZSk7XG5cbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBwcm9wZXJ0aWVzIGJlY2F1c2UgaXQgZG9lc24ndCB1bmRlcnN0YW5kIGRlZmluZVByb3BlcnR5XG5cbiAgICBjb250ZXh0LkNvbnN1bWVyID0gQ29uc3VtZXI7XG4gIH1cblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gbnVsbDtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG52YXIgVW5pbml0aWFsaXplZCA9IC0xO1xudmFyIFBlbmRpbmcgPSAwO1xudmFyIFJlc29sdmVkID0gMTtcbnZhciBSZWplY3RlZCA9IDI7XG5cbmZ1bmN0aW9uIGxhenlJbml0aWFsaXplcihwYXlsb2FkKSB7XG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICB2YXIgY3RvciA9IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB2YXIgdGhlbmFibGUgPSBjdG9yKCk7IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cbiAgICB2YXIgcGVuZGluZyA9IHBheWxvYWQ7XG4gICAgcGVuZGluZy5fc3RhdHVzID0gUGVuZGluZztcbiAgICBwZW5kaW5nLl9yZXN1bHQgPSB0aGVuYWJsZTtcbiAgICB0aGVuYWJsZS50aGVuKGZ1bmN0aW9uIChtb2R1bGVPYmplY3QpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRFeHBvcnQgPSBtb2R1bGVPYmplY3QuZGVmYXVsdDtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRFeHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXJyb3IoJ2xhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuICcgKyAnSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICAnICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICdjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wJyArIFwib3J0KCcuL015Q29tcG9uZW50JykpXCIsIG1vZHVsZU9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cblxuICAgICAgICB2YXIgcmVzb2x2ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZXNvbHZlZC5fc3RhdHVzID0gUmVzb2x2ZWQ7XG4gICAgICAgIHJlc29sdmVkLl9yZXN1bHQgPSBkZWZhdWx0RXhwb3J0O1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUGVuZGluZykge1xuICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZWplY3RlZC5fc3RhdHVzID0gUmVqZWN0ZWQ7XG4gICAgICAgIHJlamVjdGVkLl9yZXN1bHQgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFJlc29sdmVkKSB7XG4gICAgcmV0dXJuIHBheWxvYWQuX3Jlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBwYXlsb2FkLl9yZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF6eShjdG9yKSB7XG4gIHZhciBwYXlsb2FkID0ge1xuICAgIC8vIFdlIHVzZSB0aGVzZSBmaWVsZHMgdG8gc3RvcmUgdGhlIHJlc3VsdC5cbiAgICBfc3RhdHVzOiAtMSxcbiAgICBfcmVzdWx0OiBjdG9yXG4gIH07XG4gIHZhciBsYXp5VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgIF9wYXlsb2FkOiBwYXlsb2FkLFxuICAgIF9pbml0OiBsYXp5SW5pdGlhbGl6ZXJcbiAgfTtcblxuICB7XG4gICAgLy8gSW4gcHJvZHVjdGlvbiwgdGhpcyB3b3VsZCBqdXN0IHNldCBpdCBvbiB0aGUgb2JqZWN0LlxuICAgIHZhciBkZWZhdWx0UHJvcHM7XG4gICAgdmFyIHByb3BUeXBlczsgLy8gJEZsb3dGaXhNZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGF6eVR5cGUsIHtcbiAgICAgIGRlZmF1bHRQcm9wczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0UHJvcHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld0RlZmF1bHRQcm9wcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBkZWZhdWx0UHJvcHNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBkZWZhdWx0UHJvcHMgPSBuZXdEZWZhdWx0UHJvcHM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ2RlZmF1bHRQcm9wcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByb3BUeXBlczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBwcm9wVHlwZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1Byb3BUeXBlcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBwcm9wVHlwZXNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBwcm9wVHlwZXMgPSBuZXdQcm9wVHlwZXM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ3Byb3BUeXBlcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxhenlUeXBlO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkUmVmKHJlbmRlcikge1xuICB7XG4gICAgaWYgKHJlbmRlciAhPSBudWxsICYmIHJlbmRlci4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgcmVjZWl2ZWQgYSBgbWVtb2AgJyArICdjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgJyArICdtZW1vKGZvcndhcmRSZWYoLi4uKSkuJyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgd2FzIGdpdmVuICVzLicsIHJlbmRlciA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByZW5kZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVuZGVyLmxlbmd0aCAhPT0gMCAmJiByZW5kZXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzJywgcmVuZGVyLmxlbmd0aCA9PT0gMSA/ICdEaWQgeW91IGZvcmdldCB0byB1c2UgdGhlIHJlZiBwYXJhbWV0ZXI/JyA6ICdBbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgd2lsbCBiZSB1bmRlZmluZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbmRlciAhPSBudWxsKSB7XG4gICAgICBpZiAocmVuZGVyLmRlZmF1bHRQcm9wcyAhPSBudWxsIHx8IHJlbmRlci5wcm9wVHlwZXMgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IHByb3BUeXBlcyBvciBkZWZhdWx0UHJvcHMuICcgKyAnRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgcmVuZGVyOiByZW5kZXJcbiAgfTtcblxuICB7XG4gICAgdmFyIG93bk5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRUeXBlLCAnZGlzcGxheU5hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG93bk5hbWUgPSBuYW1lO1xuXG4gICAgICAgIGlmIChyZW5kZXIuZGlzcGxheU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJlbmRlci5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IGV4cG9ydHMuRnJhZ21lbnQgfHwgdHlwZSA9PT0gZXhwb3J0cy5Qcm9maWxlciB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBleHBvcnRzLlN0cmljdE1vZGUgfHwgdHlwZSA9PT0gZXhwb3J0cy5TdXNwZW5zZSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUgfHwgdHlwZVswXSA9PT0gUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWVtbyh0eXBlLCBjb21wYXJlKSB7XG4gIHtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSkge1xuICAgICAgZXJyb3IoJ21lbW86IFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgY29tcG9uZW50LiBJbnN0ZWFkICcgKyAncmVjZWl2ZWQ6ICVzJywgdHlwZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB0eXBlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX01FTU9fVFlQRSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbXBhcmU6IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb21wYXJlXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTtcblxuICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50O1xuXG4gIGlmICghKGRpc3BhdGNoZXIgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gdXNlQ29udGV4dChDb250ZXh0LCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuXG4gIHtcbiAgICBpZiAodW5zdGFibGVfb2JzZXJ2ZWRCaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yKCd1c2VDb250ZXh0KCkgc2Vjb25kIGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgJyArICd1c2UgaW4gUmVhY3QuIFBhc3NpbmcgaXQgaXMgbm90IHN1cHBvcnRlZC4gJyArICdZb3UgcGFzc2VkOiAlcy4lcycsIHVuc3RhYmxlX29ic2VydmVkQml0cywgdHlwZW9mIHVuc3RhYmxlX29ic2VydmVkQml0cyA9PT0gJ251bWJlcicgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMl0pID8gJ1xcblxcbkRpZCB5b3UgY2FsbCBhcnJheS5tYXAodXNlQ29udGV4dCk/ICcgKyAnQ2FsbGluZyBIb29rcyBpbnNpZGUgYSBsb29wIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnIDogJycpO1xuICAgIH0gLy8gVE9ETzogYWRkIGEgbW9yZSBnZW5lcmljIHdhcm5pbmcgZm9yIGludmFsaWQgdmFsdWVzLlxuXG5cbiAgICBpZiAoQ29udGV4dC5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVhbENvbnRleHQgPSBDb250ZXh0Ll9jb250ZXh0OyAvLyBEb24ndCBkZWR1cGxpY2F0ZSBiZWNhdXNlIHRoaXMgbGVnaXRpbWF0ZWx5IGNhdXNlcyBidWdzXG4gICAgICAvLyBhbmQgbm9ib2R5IHNob3VsZCBiZSB1c2luZyB0aGlzIGluIGV4aXN0aW5nIGNvZGUuXG5cbiAgICAgIGlmIChyZWFsQ29udGV4dC5Db25zdW1lciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQsIG1heSBjYXVzZSBidWdzLCBhbmQgd2lsbCBiZSAnICsgJ3JlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfSBlbHNlIGlmIChyZWFsQ29udGV4dC5Qcm92aWRlciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuUHJvdmlkZXIpIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbn1cbmZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZihpbml0aWFsVmFsdWUpO1xufVxuZnVuY3Rpb24gdXNlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VNZW1vKGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICB9XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5TdXNwZW5zZTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKGVsZW1lbnRQcm9wcykge1xuICBpZiAoZWxlbWVudFByb3BzICE9PSBudWxsICYmIGVsZW1lbnRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKGVsZW1lbnRQcm9wcy5fX3NvdXJjZSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG5cbiAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmZvO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICB9XG5cbiAge1xuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcbiAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gIGlmICghdmFsaWRUeXBlKSB7XG4gICAgdmFyIGluZm8gPSAnJztcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgIH1cblxuICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgaWYgKHZhbGlkVHlwZSkge1xuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50KSB7XG4gICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG52YXIgZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkgPSBmYWxzZTtcbmZ1bmN0aW9uIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbih0eXBlKSB7XG4gIHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uLmJpbmQobnVsbCwgdHlwZSk7XG4gIHZhbGlkYXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkpIHtcbiAgICAgIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gdHJ1ZTtcblxuICAgICAgd2FybignUmVhY3QuY3JlYXRlRmFjdG9yeSgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIENvbnNpZGVyIHVzaW5nIEpTWCAnICsgJ29yIHVzZSBSZWFjdC5jcmVhdGVFbGVtZW50KCkgZGlyZWN0bHkgaW5zdGVhZC4nKTtcbiAgICB9IC8vIExlZ2FjeSBob29rOiByZW1vdmUgaXRcblxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3RvcnksICd0eXBlJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignRmFjdG9yeS50eXBlIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB0aGUgY2xhc3MgZGlyZWN0bHkgJyArICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5LicpO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbn1cbmZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgbmV3RWxlbWVudCA9IGNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG57XG5cbiAgdHJ5IHtcbiAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXG5cbiAgICBuZXcgTWFwKFtbZnJvemVuT2JqZWN0LCBudWxsXV0pO1xuICAgIG5ldyBTZXQoW2Zyb3plbk9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxufVxuXG52YXIgY3JlYXRlRWxlbWVudCQxID0gIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbiA7XG52YXIgY2xvbmVFbGVtZW50JDEgPSAgY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNyZWF0ZUZhY3RvcnkgPSAgY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uIDtcbnZhciBDaGlsZHJlbiA9IHtcbiAgbWFwOiBtYXBDaGlsZHJlbixcbiAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBjb3VudDogY291bnRDaGlsZHJlbixcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgb25seTogb25seUNoaWxkXG59O1xuXG5leHBvcnRzLkNoaWxkcmVuID0gQ2hpbGRyZW47XG5leHBvcnRzLkNvbXBvbmVudCA9IENvbXBvbmVudDtcbmV4cG9ydHMuUHVyZUNvbXBvbmVudCA9IFB1cmVDb21wb25lbnQ7XG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gUmVhY3RTaGFyZWRJbnRlcm5hbHM7XG5leHBvcnRzLmNsb25lRWxlbWVudCA9IGNsb25lRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yeSA9IGNyZWF0ZUZhY3Rvcnk7XG5leHBvcnRzLmNyZWF0ZVJlZiA9IGNyZWF0ZVJlZjtcbmV4cG9ydHMuZm9yd2FyZFJlZiA9IGZvcndhcmRSZWY7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5leHBvcnRzLmxhenkgPSBsYXp5O1xuZXhwb3J0cy5tZW1vID0gbWVtbztcbmV4cG9ydHMudXNlQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaztcbmV4cG9ydHMudXNlQ29udGV4dCA9IHVzZUNvbnRleHQ7XG5leHBvcnRzLnVzZURlYnVnVmFsdWUgPSB1c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VFZmZlY3QgPSB1c2VFZmZlY3Q7XG5leHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSB1c2VJbXBlcmF0aXZlSGFuZGxlO1xuZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QgPSB1c2VMYXlvdXRFZmZlY3Q7XG5leHBvcnRzLnVzZU1lbW8gPSB1c2VNZW1vO1xuZXhwb3J0cy51c2VSZWR1Y2VyID0gdXNlUmVkdWNlcjtcbmV4cG9ydHMudXNlUmVmID0gdXNlUmVmO1xuZXhwb3J0cy51c2VTdGF0ZSA9IHVzZVN0YXRlO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nID0gZmFsc2U7XG52YXIgZW5hYmxlUHJvZmlsaW5nID0gZmFsc2U7XG5cbnZhciByZXF1ZXN0SG9zdENhbGxiYWNrO1xudmFyIHJlcXVlc3RIb3N0VGltZW91dDtcbnZhciBjYW5jZWxIb3N0VGltZW91dDtcbnZhciByZXF1ZXN0UGFpbnQ7XG52YXIgaGFzUGVyZm9ybWFuY2VOb3cgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmlmIChoYXNQZXJmb3JtYW5jZU5vdykge1xuICB2YXIgbG9jYWxQZXJmb3JtYW5jZSA9IHBlcmZvcm1hbmNlO1xuXG4gIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsb2NhbFBlcmZvcm1hbmNlLm5vdygpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIGxvY2FsRGF0ZSA9IERhdGU7XG4gIHZhciBpbml0aWFsVGltZSA9IGxvY2FsRGF0ZS5ub3coKTtcblxuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxEYXRlLm5vdygpIC0gaW5pdGlhbFRpbWU7XG4gIH07XG59XG5cbmlmICggLy8gSWYgU2NoZWR1bGVyIHJ1bnMgaW4gYSBub24tRE9NIGVudmlyb25tZW50LCBpdCBmYWxscyBiYWNrIHRvIGEgbmFpdmVcbi8vIGltcGxlbWVudGF0aW9uIHVzaW5nIHNldFRpbWVvdXQuXG50eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAvLyBDaGVjayBpZiBNZXNzYWdlQ2hhbm5lbCBpcyBzdXBwb3J0ZWQsIHRvby5cbnR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAvLyBJZiB0aGlzIGFjY2lkZW50YWxseSBnZXRzIGltcG9ydGVkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQsIGUuZy4gSmF2YVNjcmlwdENvcmUsXG4gIC8vIGZhbGxiYWNrIHRvIGEgbmFpdmUgaW1wbGVtZW50YXRpb24uXG4gIHZhciBfY2FsbGJhY2sgPSBudWxsO1xuICB2YXIgX3RpbWVvdXRJRCA9IG51bGw7XG5cbiAgdmFyIF9mbHVzaENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgIHZhciBoYXNSZW1haW5pbmdUaW1lID0gdHJ1ZTtcblxuICAgICAgICBfY2FsbGJhY2soaGFzUmVtYWluaW5nVGltZSwgY3VycmVudFRpbWUpO1xuXG4gICAgICAgIF9jYWxsYmFjayA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoX2ZsdXNoQ2FsbGJhY2ssIDApO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdENhbGxiYWNrID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgaWYgKF9jYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IHJlLWVudHJhbmN5LlxuICAgICAgc2V0VGltZW91dChyZXF1ZXN0SG9zdENhbGxiYWNrLCAwLCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9jYWxsYmFjayA9IGNiO1xuICAgICAgc2V0VGltZW91dChfZmx1c2hDYWxsYmFjaywgMCk7XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0VGltZW91dCA9IGZ1bmN0aW9uIChjYiwgbXMpIHtcbiAgICBfdGltZW91dElEID0gc2V0VGltZW91dChjYiwgbXMpO1xuICB9O1xuXG4gIGNhbmNlbEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIGNsZWFyVGltZW91dChfdGltZW91dElEKTtcbiAgfTtcblxuICBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICByZXF1ZXN0UGFpbnQgPSBleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZnVuY3Rpb24gKCkge307XG59IGVsc2Uge1xuICAvLyBDYXB0dXJlIGxvY2FsIHJlZmVyZW5jZXMgdG8gbmF0aXZlIEFQSXMsIGluIGNhc2UgYSBwb2x5ZmlsbCBvdmVycmlkZXMgdGhlbS5cbiAgdmFyIF9zZXRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQ7XG4gIHZhciBfY2xlYXJUaW1lb3V0ID0gd2luZG93LmNsZWFyVGltZW91dDtcblxuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gVE9ETzogU2NoZWR1bGVyIG5vIGxvbmdlciByZXF1aXJlcyB0aGVzZSBtZXRob2RzIHRvIGJlIHBvbHlmaWxsZWQuIEJ1dFxuICAgIC8vIG1heWJlIHdlIHdhbnQgdG8gY29udGludWUgd2FybmluZyBpZiB0aGV5IGRvbid0IGV4aXN0LCB0byBwcmVzZXJ2ZSB0aGVcbiAgICAvLyBvcHRpb24gdG8gcmVseSBvbiBpdCBpbiB0aGUgZnV0dXJlP1xuICAgIHZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgIHZhciBjYW5jZWxBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZTtcblxuICAgIGlmICh0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBVc2luZyBjb25zb2xlWydlcnJvciddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHJlcXVlc3RBbmltYXRpb25GcmFtZS4gXCIgKyAnTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBjYW5jZWxBbmltYXRpb25GcmFtZS4gXCIgKyAnTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gIHZhciBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICB2YXIgdGFza1RpbWVvdXRJRCA9IC0xOyAvLyBTY2hlZHVsZXIgcGVyaW9kaWNhbGx5IHlpZWxkcyBpbiBjYXNlIHRoZXJlIGlzIG90aGVyIHdvcmsgb24gdGhlIG1haW5cbiAgLy8gdGhyZWFkLCBsaWtlIHVzZXIgZXZlbnRzLiBCeSBkZWZhdWx0LCBpdCB5aWVsZHMgbXVsdGlwbGUgdGltZXMgcGVyIGZyYW1lLlxuICAvLyBJdCBkb2VzIG5vdCBhdHRlbXB0IHRvIGFsaWduIHdpdGggZnJhbWUgYm91bmRhcmllcywgc2luY2UgbW9zdCB0YXNrcyBkb24ndFxuICAvLyBuZWVkIHRvIGJlIGZyYW1lIGFsaWduZWQ7IGZvciB0aG9zZSB0aGF0IGRvLCB1c2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxuXG4gIHZhciB5aWVsZEludGVydmFsID0gNTtcbiAgdmFyIGRlYWRsaW5lID0gMDsgLy8gVE9ETzogTWFrZSB0aGlzIGNvbmZpZ3VyYWJsZVxuXG4gIHtcbiAgICAvLyBgaXNJbnB1dFBlbmRpbmdgIGlzIG5vdCBhdmFpbGFibGUuIFNpbmNlIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWZcbiAgICAvLyB0aGVyZSdzIHBlbmRpbmcgaW5wdXQsIGFsd2F5cyB5aWVsZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtZS5cbiAgICBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMudW5zdGFibGVfbm93KCkgPj0gZGVhZGxpbmU7XG4gICAgfTsgLy8gU2luY2Ugd2UgeWllbGQgZXZlcnkgZnJhbWUgcmVnYXJkbGVzcywgYHJlcXVlc3RQYWludGAgaGFzIG5vIGVmZmVjdC5cblxuXG4gICAgcmVxdWVzdFBhaW50ID0gZnVuY3Rpb24gKCkge307XG4gIH1cblxuICBleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZnVuY3Rpb24gKGZwcykge1xuICAgIGlmIChmcHMgPCAwIHx8IGZwcyA+IDEyNSkge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKCdmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgJyArICdmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmcHMgPiAwKSB7XG4gICAgICB5aWVsZEludGVydmFsID0gTWF0aC5mbG9vcigxMDAwIC8gZnBzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVzZXQgdGhlIGZyYW1lcmF0ZVxuICAgICAgeWllbGRJbnRlcnZhbCA9IDU7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjaGVkdWxlZEhvc3RDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTsgLy8gWWllbGQgYWZ0ZXIgYHlpZWxkSW50ZXJ2YWxgIG1zLCByZWdhcmRsZXNzIG9mIHdoZXJlIHdlIGFyZSBpbiB0aGUgdnN5bmNcbiAgICAgIC8vIGN5Y2xlLiBUaGlzIG1lYW5zIHRoZXJlJ3MgYWx3YXlzIHRpbWUgcmVtYWluaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2ZcbiAgICAgIC8vIHRoZSBtZXNzYWdlIGV2ZW50LlxuXG4gICAgICBkZWFkbGluZSA9IGN1cnJlbnRUaW1lICsgeWllbGRJbnRlcnZhbDtcbiAgICAgIHZhciBoYXNUaW1lUmVtYWluaW5nID0gdHJ1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGhhc01vcmVXb3JrID0gc2NoZWR1bGVkSG9zdENhbGxiYWNrKGhhc1RpbWVSZW1haW5pbmcsIGN1cnJlbnRUaW1lKTtcblxuICAgICAgICBpZiAoIWhhc01vcmVXb3JrKSB7XG4gICAgICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZXJlJ3MgbW9yZSB3b3JrLCBzY2hlZHVsZSB0aGUgbmV4dCBtZXNzYWdlIGV2ZW50IGF0IHRoZSBlbmRcbiAgICAgICAgICAvLyBvZiB0aGUgcHJlY2VkaW5nIG9uZS5cbiAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBhIHNjaGVkdWxlciB0YXNrIHRocm93cywgZXhpdCB0aGUgY3VycmVudCBicm93c2VyIHRhc2sgc28gdGhlXG4gICAgICAgIC8vIGVycm9yIGNhbiBiZSBvYnNlcnZlZC5cbiAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gICAgfSAvLyBZaWVsZGluZyB0byB0aGUgYnJvd3NlciB3aWxsIGdpdmUgaXQgYSBjaGFuY2UgdG8gcGFpbnQsIHNvIHdlIGNhblxuICB9O1xuXG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIHZhciBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmU7XG5cbiAgcmVxdWVzdEhvc3RDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgaWYgKCFpc01lc3NhZ2VMb29wUnVubmluZykge1xuICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSB0cnVlO1xuICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBtcykge1xuICAgIHRhc2tUaW1lb3V0SUQgPSBfc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayhleHBvcnRzLnVuc3RhYmxlX25vdygpKTtcbiAgICB9LCBtcyk7XG4gIH07XG5cbiAgY2FuY2VsSG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgX2NsZWFyVGltZW91dCh0YXNrVGltZW91dElEKTtcblxuICAgIHRhc2tUaW1lb3V0SUQgPSAtMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHVzaChoZWFwLCBub2RlKSB7XG4gIHZhciBpbmRleCA9IGhlYXAubGVuZ3RoO1xuICBoZWFwLnB1c2gobm9kZSk7XG4gIHNpZnRVcChoZWFwLCBub2RlLCBpbmRleCk7XG59XG5mdW5jdGlvbiBwZWVrKGhlYXApIHtcbiAgdmFyIGZpcnN0ID0gaGVhcFswXTtcbiAgcmV0dXJuIGZpcnN0ID09PSB1bmRlZmluZWQgPyBudWxsIDogZmlyc3Q7XG59XG5mdW5jdGlvbiBwb3AoaGVhcCkge1xuICB2YXIgZmlyc3QgPSBoZWFwWzBdO1xuXG4gIGlmIChmaXJzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGxhc3QgPSBoZWFwLnBvcCgpO1xuXG4gICAgaWYgKGxhc3QgIT09IGZpcnN0KSB7XG4gICAgICBoZWFwWzBdID0gbGFzdDtcbiAgICAgIHNpZnREb3duKGhlYXAsIGxhc3QsIDApO1xuICAgIH1cblxuICAgIHJldHVybiBmaXJzdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaWZ0VXAoaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHBhcmVudEluZGV4ID0gaW5kZXggLSAxID4+PiAxO1xuICAgIHZhciBwYXJlbnQgPSBoZWFwW3BhcmVudEluZGV4XTtcblxuICAgIGlmIChwYXJlbnQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHBhcmVudCwgbm9kZSkgPiAwKSB7XG4gICAgICAvLyBUaGUgcGFyZW50IGlzIGxhcmdlci4gU3dhcCBwb3NpdGlvbnMuXG4gICAgICBoZWFwW3BhcmVudEluZGV4XSA9IG5vZGU7XG4gICAgICBoZWFwW2luZGV4XSA9IHBhcmVudDtcbiAgICAgIGluZGV4ID0gcGFyZW50SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBwYXJlbnQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2lmdERvd24oaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuICB2YXIgbGVuZ3RoID0gaGVhcC5sZW5ndGg7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGxlZnRJbmRleCA9IChpbmRleCArIDEpICogMiAtIDE7XG4gICAgdmFyIGxlZnQgPSBoZWFwW2xlZnRJbmRleF07XG4gICAgdmFyIHJpZ2h0SW5kZXggPSBsZWZ0SW5kZXggKyAxO1xuICAgIHZhciByaWdodCA9IGhlYXBbcmlnaHRJbmRleF07IC8vIElmIHRoZSBsZWZ0IG9yIHJpZ2h0IG5vZGUgaXMgc21hbGxlciwgc3dhcCB3aXRoIHRoZSBzbWFsbGVyIG9mIHRob3NlLlxuXG4gICAgaWYgKGxlZnQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKGxlZnQsIG5vZGUpIDwgMCkge1xuICAgICAgaWYgKHJpZ2h0ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShyaWdodCwgbGVmdCkgPCAwKSB7XG4gICAgICAgIGhlYXBbaW5kZXhdID0gcmlnaHQ7XG4gICAgICAgIGhlYXBbcmlnaHRJbmRleF0gPSBub2RlO1xuICAgICAgICBpbmRleCA9IHJpZ2h0SW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWFwW2luZGV4XSA9IGxlZnQ7XG4gICAgICAgIGhlYXBbbGVmdEluZGV4XSA9IG5vZGU7XG4gICAgICAgIGluZGV4ID0gbGVmdEluZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmlnaHQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHJpZ2h0LCBub2RlKSA8IDApIHtcbiAgICAgIGhlYXBbaW5kZXhdID0gcmlnaHQ7XG4gICAgICBoZWFwW3JpZ2h0SW5kZXhdID0gbm9kZTtcbiAgICAgIGluZGV4ID0gcmlnaHRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTmVpdGhlciBjaGlsZCBpcyBzbWFsbGVyLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgLy8gQ29tcGFyZSBzb3J0IGluZGV4IGZpcnN0LCB0aGVuIHRhc2sgaWQuXG4gIHZhciBkaWZmID0gYS5zb3J0SW5kZXggLSBiLnNvcnRJbmRleDtcbiAgcmV0dXJuIGRpZmYgIT09IDAgPyBkaWZmIDogYS5pZCAtIGIuaWQ7XG59XG5cbi8vIFRPRE86IFVzZSBzeW1ib2xzP1xudmFyIEltbWVkaWF0ZVByaW9yaXR5ID0gMTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IDI7XG52YXIgTm9ybWFsUHJpb3JpdHkgPSAzO1xudmFyIExvd1ByaW9yaXR5ID0gNDtcbnZhciBJZGxlUHJpb3JpdHkgPSA1O1xuXG5mdW5jdGlvbiBtYXJrVGFza0Vycm9yZWQodGFzaywgbXMpIHtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG4vLyBNYXRoLnBvdygyLCAzMCkgLSAxXG4vLyAwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVxuXG52YXIgbWF4U2lnbmVkMzFCaXRJbnQgPSAxMDczNzQxODIzOyAvLyBUaW1lcyBvdXQgaW1tZWRpYXRlbHlcblxudmFyIElNTUVESUFURV9QUklPUklUWV9USU1FT1VUID0gLTE7IC8vIEV2ZW50dWFsbHkgdGltZXMgb3V0XG5cbnZhciBVU0VSX0JMT0NLSU5HX1BSSU9SSVRZX1RJTUVPVVQgPSAyNTA7XG52YXIgTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQgPSA1MDAwO1xudmFyIExPV19QUklPUklUWV9USU1FT1VUID0gMTAwMDA7IC8vIE5ldmVyIHRpbWVzIG91dFxuXG52YXIgSURMRV9QUklPUklUWV9USU1FT1VUID0gbWF4U2lnbmVkMzFCaXRJbnQ7IC8vIFRhc2tzIGFyZSBzdG9yZWQgb24gYSBtaW4gaGVhcFxuXG52YXIgdGFza1F1ZXVlID0gW107XG52YXIgdGltZXJRdWV1ZSA9IFtdOyAvLyBJbmNyZW1lbnRpbmcgaWQgY291bnRlci4gVXNlZCB0byBtYWludGFpbiBpbnNlcnRpb24gb3JkZXIuXG5cbnZhciB0YXNrSWRDb3VudGVyID0gMTsgLy8gUGF1c2luZyB0aGUgc2NoZWR1bGVyIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxudmFyIGN1cnJlbnRUYXNrID0gbnVsbDtcbnZhciBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5OyAvLyBUaGlzIGlzIHNldCB3aGlsZSBwZXJmb3JtaW5nIHdvcmssIHRvIHByZXZlbnQgcmUtZW50cmFuY3kuXG5cbnZhciBpc1BlcmZvcm1pbmdXb3JrID0gZmFsc2U7XG52YXIgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSBmYWxzZTtcbnZhciBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpIHtcbiAgLy8gQ2hlY2sgZm9yIHRhc2tzIHRoYXQgYXJlIG5vIGxvbmdlciBkZWxheWVkIGFuZCBhZGQgdGhlbSB0byB0aGUgcXVldWUuXG4gIHZhciB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgd2hpbGUgKHRpbWVyICE9PSBudWxsKSB7XG4gICAgaWYgKHRpbWVyLmNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAvLyBUaW1lciB3YXMgY2FuY2VsbGVkLlxuICAgICAgcG9wKHRpbWVyUXVldWUpO1xuICAgIH0gZWxzZSBpZiAodGltZXIuc3RhcnRUaW1lIDw9IGN1cnJlbnRUaW1lKSB7XG4gICAgICAvLyBUaW1lciBmaXJlZC4gVHJhbnNmZXIgdG8gdGhlIHRhc2sgcXVldWUuXG4gICAgICBwb3AodGltZXJRdWV1ZSk7XG4gICAgICB0aW1lci5zb3J0SW5kZXggPSB0aW1lci5leHBpcmF0aW9uVGltZTtcbiAgICAgIHB1c2godGFza1F1ZXVlLCB0aW1lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbWFpbmluZyB0aW1lcnMgYXJlIHBlbmRpbmcuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoY3VycmVudFRpbWUpIHtcbiAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkKSB7XG4gICAgaWYgKHBlZWsodGFza1F1ZXVlKSAhPT0gbnVsbCkge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICAgIGlmIChmaXJzdFRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hXb3JrKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKSB7XG5cblxuICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIGlmIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkKSB7XG4gICAgLy8gV2Ugc2NoZWR1bGVkIGEgdGltZW91dCBidXQgaXQncyBubyBsb25nZXIgbmVlZGVkLiBDYW5jZWwgaXQuXG4gICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICAgIGNhbmNlbEhvc3RUaW1lb3V0KCk7XG4gIH1cblxuICBpc1BlcmZvcm1pbmdXb3JrID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgaWYgKGVuYWJsZVByb2ZpbGluZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChjdXJyZW50VGFzayAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgICAgbWFya1Rhc2tFcnJvcmVkKGN1cnJlbnRUYXNrLCBjdXJyZW50VGltZSk7XG4gICAgICAgICAgY3VycmVudFRhc2suaXNRdWV1ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBjYXRjaCBpbiBwcm9kIGNvZGUgcGF0aC5cbiAgICAgIHJldHVybiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRUYXNrID0gbnVsbDtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICBpc1BlcmZvcm1pbmdXb3JrID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gaW5pdGlhbFRpbWU7XG4gIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcblxuICB3aGlsZSAoY3VycmVudFRhc2sgIT09IG51bGwgJiYgIShlbmFibGVTY2hlZHVsZXJEZWJ1Z2dpbmcgKSkge1xuICAgIGlmIChjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSA+IGN1cnJlbnRUaW1lICYmICghaGFzVGltZVJlbWFpbmluZyB8fCBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkKCkpKSB7XG4gICAgICAvLyBUaGlzIGN1cnJlbnRUYXNrIGhhc24ndCBleHBpcmVkLCBhbmQgd2UndmUgcmVhY2hlZCB0aGUgZGVhZGxpbmUuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBjdXJyZW50VGFzay5jYWxsYmFjaztcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFRhc2sucHJpb3JpdHlMZXZlbDtcbiAgICAgIHZhciBkaWRVc2VyQ2FsbGJhY2tUaW1lb3V0ID0gY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWU7XG5cbiAgICAgIHZhciBjb250aW51YXRpb25DYWxsYmFjayA9IGNhbGxiYWNrKGRpZFVzZXJDYWxsYmFja1RpbWVvdXQpO1xuICAgICAgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbnRpbnVhdGlvbkNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gY29udGludWF0aW9uQ2FsbGJhY2s7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChjdXJyZW50VGFzayA9PT0gcGVlayh0YXNrUXVldWUpKSB7XG4gICAgICAgICAgcG9wKHRhc2tRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcCh0YXNrUXVldWUpO1xuICAgIH1cblxuICAgIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuICB9IC8vIFJldHVybiB3aGV0aGVyIHRoZXJlJ3MgYWRkaXRpb25hbCB3b3JrXG5cblxuICBpZiAoY3VycmVudFRhc2sgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICBpZiAoZmlyc3RUaW1lciAhPT0gbnVsbCkge1xuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkocHJpb3JpdHlMZXZlbCwgZXZlbnRIYW5kbGVyKSB7XG4gIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBwcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gIH1cblxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9uZXh0KGV2ZW50SGFuZGxlcikge1xuICB2YXIgcHJpb3JpdHlMZXZlbDtcblxuICBzd2l0Y2ggKGN1cnJlbnRQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgICAvLyBTaGlmdCBkb3duIHRvIG5vcm1hbCBwcmlvcml0eVxuICAgICAgcHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gQW55dGhpbmcgbG93ZXIgdGhhbiBub3JtYWwgcHJpb3JpdHkgc2hvdWxkIHJlbWFpbiBhdCB0aGUgY3VycmVudCBsZXZlbC5cbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfd3JhcENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIHZhciBwYXJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgcnVuV2l0aFByaW9yaXR5LCBpbmxpbmVkIGZvciBwZXJmb3JtYW5jZS5cbiAgICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwYXJlbnRQcmlvcml0eUxldmVsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgdmFyIHN0YXJ0VGltZTtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMgIT09IG51bGwpIHtcbiAgICB2YXIgZGVsYXkgPSBvcHRpb25zLmRlbGF5O1xuXG4gICAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZSArIGRlbGF5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gIH1cblxuICB2YXIgdGltZW91dDtcblxuICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IElNTUVESUFURV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IFVTRVJfQkxPQ0tJTkdfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gSURMRV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IExPV19QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGRlZmF1bHQ6XG4gICAgICB0aW1lb3V0ID0gTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBleHBpcmF0aW9uVGltZSA9IHN0YXJ0VGltZSArIHRpbWVvdXQ7XG4gIHZhciBuZXdUYXNrID0ge1xuICAgIGlkOiB0YXNrSWRDb3VudGVyKyssXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgIHByaW9yaXR5TGV2ZWw6IHByaW9yaXR5TGV2ZWwsXG4gICAgc3RhcnRUaW1lOiBzdGFydFRpbWUsXG4gICAgZXhwaXJhdGlvblRpbWU6IGV4cGlyYXRpb25UaW1lLFxuICAgIHNvcnRJbmRleDogLTFcbiAgfTtcblxuICBpZiAoc3RhcnRUaW1lID4gY3VycmVudFRpbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZGVsYXllZCB0YXNrLlxuICAgIG5ld1Rhc2suc29ydEluZGV4ID0gc3RhcnRUaW1lO1xuICAgIHB1c2godGltZXJRdWV1ZSwgbmV3VGFzayk7XG5cbiAgICBpZiAocGVlayh0YXNrUXVldWUpID09PSBudWxsICYmIG5ld1Rhc2sgPT09IHBlZWsodGltZXJRdWV1ZSkpIHtcbiAgICAgIC8vIEFsbCB0YXNrcyBhcmUgZGVsYXllZCwgYW5kIHRoaXMgaXMgdGhlIHRhc2sgd2l0aCB0aGUgZWFybGllc3QgZGVsYXkuXG4gICAgICBpZiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCkge1xuICAgICAgICAvLyBDYW5jZWwgYW4gZXhpc3RpbmcgdGltZW91dC5cbiAgICAgICAgY2FuY2VsSG9zdFRpbWVvdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgfSAvLyBTY2hlZHVsZSBhIHRpbWVvdXQuXG5cblxuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIHN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmV3VGFzay5zb3J0SW5kZXggPSBleHBpcmF0aW9uVGltZTtcbiAgICBwdXNoKHRhc2tRdWV1ZSwgbmV3VGFzayk7XG4gICAgLy8gd2FpdCB1bnRpbCB0aGUgbmV4dCB0aW1lIHdlIHlpZWxkLlxuXG5cbiAgICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld1Rhc2s7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uKCkge1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbigpIHtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSgpIHtcbiAgcmV0dXJuIHBlZWsodGFza1F1ZXVlKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sodGFzaykge1xuICAvLyByZW1vdmUgZnJvbSB0aGUgcXVldWUgYmVjYXVzZSB5b3UgY2FuJ3QgcmVtb3ZlIGFyYml0cmFyeSBub2RlcyBmcm9tIGFuXG4gIC8vIGFycmF5IGJhc2VkIGhlYXAsIG9ubHkgdGhlIGZpcnN0IG9uZS4pXG5cblxuICB0YXNrLmNhbGxiYWNrID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSB7XG4gIHJldHVybiBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbn1cblxudmFyIHVuc3RhYmxlX3JlcXVlc3RQYWludCA9IHJlcXVlc3RQYWludDtcbnZhciB1bnN0YWJsZV9Qcm9maWxpbmcgPSAgbnVsbDtcblxuZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHkgPSBJZGxlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5ID0gSW1tZWRpYXRlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5ID0gTG93UHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZyA9IHVuc3RhYmxlX1Byb2ZpbGluZztcbmV4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHkgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sgPSB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfY29udGludWVFeGVjdXRpb24gPSB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbjtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbDtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUgPSB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZTtcbmV4cG9ydHMudW5zdGFibGVfbmV4dCA9IHVuc3RhYmxlX25leHQ7XG5leHBvcnRzLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uID0gdW5zdGFibGVfcGF1c2VFeGVjdXRpb247XG5leHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludCA9IHVuc3RhYmxlX3JlcXVlc3RQYWludDtcbmV4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5ID0gdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrID0gdW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrID0gdW5zdGFibGVfd3JhcENhbGxiYWNrO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjIwLjJcbiAqIHNjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIERFRkFVTFRfVEhSRUFEX0lEID0gMDsgLy8gQ291bnRlcnMgdXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLlxuXG52YXIgaW50ZXJhY3Rpb25JRENvdW50ZXIgPSAwO1xudmFyIHRocmVhZElEQ291bnRlciA9IDA7IC8vIFNldCBvZiBjdXJyZW50bHkgdHJhY2VkIGludGVyYWN0aW9ucy5cbi8vIEludGVyYWN0aW9ucyBcInN0YWNrXCJcdTIwMTNcbi8vIE1lYW5pbmcgdGhhdCBuZXdseSB0cmFjZWQgaW50ZXJhY3Rpb25zIGFyZSBhcHBlbmRlZCB0byB0aGUgcHJldmlvdXNseSBhY3RpdmUgc2V0LlxuLy8gV2hlbiBhbiBpbnRlcmFjdGlvbiBnb2VzIG91dCBvZiBzY29wZSwgdGhlIHByZXZpb3VzIHNldCAoaWYgYW55KSBpcyByZXN0b3JlZC5cblxuZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZiA9IG51bGw7IC8vIExpc3RlbmVyKHMpIHRvIG5vdGlmeSB3aGVuIGludGVyYWN0aW9ucyBiZWdpbiBhbmQgZW5kLlxuXG5leHBvcnRzLl9fc3Vic2NyaWJlclJlZiA9IG51bGw7XG5cbntcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZiA9IHtcbiAgICBjdXJyZW50OiBuZXcgU2V0KClcbiAgfTtcbiAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xufVxuZnVuY3Rpb24gdW5zdGFibGVfY2xlYXIoY2FsbGJhY2spIHtcblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gbmV3IFNldCgpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Q3VycmVudCgpIHtcbiAge1xuICAgIHJldHVybiBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldFRocmVhZElEKCkge1xuICByZXR1cm4gKyt0aHJlYWRJRENvdW50ZXI7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV90cmFjZShuYW1lLCB0aW1lc3RhbXAsIGNhbGxiYWNrKSB7XG4gIHZhciB0aHJlYWRJRCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogREVGQVVMVF9USFJFQURfSUQ7XG5cbiAgdmFyIGludGVyYWN0aW9uID0ge1xuICAgIF9fY291bnQ6IDEsXG4gICAgaWQ6IGludGVyYWN0aW9uSURDb3VudGVyKyssXG4gICAgbmFtZTogbmFtZSxcbiAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcFxuICB9O1xuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDsgLy8gVHJhY2VkIGludGVyYWN0aW9ucyBzaG91bGQgc3RhY2svYWNjdW11bGF0ZS5cbiAgLy8gVG8gZG8gdGhhdCwgY2xvbmUgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuICAvLyBUaGUgcHJldmlvdXMgc2V0IHdpbGwgYmUgcmVzdG9yZWQgdXBvbiBjb21wbGV0aW9uLlxuXG4gIHZhciBpbnRlcmFjdGlvbnMgPSBuZXcgU2V0KHByZXZJbnRlcmFjdGlvbnMpO1xuICBpbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gaW50ZXJhY3Rpb25zO1xuICB2YXIgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG4gIHZhciByZXR1cm5WYWx1ZTtcblxuICB0cnkge1xuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tOyAvLyBJZiBubyBhc3luYyB3b3JrIHdhcyBzY2hlZHVsZWQgZm9yIHRoaXMgaW50ZXJhY3Rpb24sXG4gICAgICAgICAgLy8gTm90aWZ5IHN1YnNjcmliZXJzIHRoYXQgaXQncyBjb21wbGV0ZWQuXG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV93cmFwKGNhbGxiYWNrKSB7XG4gIHZhciB0aHJlYWRJRCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogREVGQVVMVF9USFJFQURfSUQ7XG5cbiAgdmFyIHdyYXBwZWRJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIHZhciBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgfSAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuICAvLyBVcGRhdGUgYWZ0ZXIgY2FsbGluZyBzdWJzY3JpYmVycyBpbiBjYXNlIG9mIGVycm9yLlxuXG5cbiAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgfSk7XG4gIHZhciBoYXNSdW4gPSBmYWxzZTtcblxuICBmdW5jdGlvbiB3cmFwcGVkKCkge1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHdyYXBwZWRJbnRlcmFjdGlvbnM7XG4gICAgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIHJldHVyblZhbHVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICghaGFzUnVuKSB7XG4gICAgICAgIC8vIFdlIG9ubHkgZXhwZWN0IGEgd3JhcHBlZCBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBvbmNlLFxuICAgICAgICAvLyBCdXQgaW4gdGhlIGV2ZW50IHRoYXQgaXQncyBleGVjdXRlZCBtb3JlIHRoYW4gb25jZVx1MjAxM1xuICAgICAgICAvLyBPbmx5IGRlY3JlbWVudCB0aGUgb3V0c3RhbmRpbmcgaW50ZXJhY3Rpb24gY291bnRzIG9uY2UuXG4gICAgICAgIGhhc1J1biA9IHRydWU7IC8vIFVwZGF0ZSBwZW5kaW5nIGFzeW5jIGNvdW50cyBmb3IgYWxsIHdyYXBwZWQgaW50ZXJhY3Rpb25zLlxuICAgICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBzY2hlZHVsZWQgYXN5bmMgd29yayBmb3IgYW55IG9mIHRoZW0sXG4gICAgICAgIC8vIE1hcmsgdGhlbSBhcyBjb21wbGV0ZWQuXG5cbiAgICAgICAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd3JhcHBlZC5jYW5jZWwgPSBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtDYW5jZWxlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFVwZGF0ZSBwZW5kaW5nIGFzeW5jIGNvdW50cyBmb3IgYWxsIHdyYXBwZWQgaW50ZXJhY3Rpb25zLlxuICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3Qgc2NoZWR1bGVkIGFzeW5jIHdvcmsgZm9yIGFueSBvZiB0aGVtLFxuICAgICAgLy8gTWFyayB0aGVtIGFzIGNvbXBsZXRlZC5cbiAgICAgIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgIGlmIChzdWJzY3JpYmVyICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG52YXIgc3Vic2NyaWJlcnMgPSBudWxsO1xuXG57XG4gIHN1YnNjcmliZXJzID0gbmV3IFNldCgpO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zdWJzY3JpYmUoc3Vic2NyaWJlcikge1xuICB7XG4gICAgc3Vic2NyaWJlcnMuYWRkKHN1YnNjcmliZXIpO1xuXG4gICAgaWYgKHN1YnNjcmliZXJzLnNpemUgPT09IDEpIHtcbiAgICAgIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgIG9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkOiBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZCxcbiAgICAgICAgb25JbnRlcmFjdGlvblRyYWNlZDogb25JbnRlcmFjdGlvblRyYWNlZCxcbiAgICAgICAgb25Xb3JrQ2FuY2VsZWQ6IG9uV29ya0NhbmNlbGVkLFxuICAgICAgICBvbldvcmtTY2hlZHVsZWQ6IG9uV29ya1NjaGVkdWxlZCxcbiAgICAgICAgb25Xb3JrU3RhcnRlZDogb25Xb3JrU3RhcnRlZCxcbiAgICAgICAgb25Xb3JrU3RvcHBlZDogb25Xb3JrU3RvcHBlZFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3Vuc3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAge1xuICAgIHN1YnNjcmliZXJzLmRlbGV0ZShzdWJzY3JpYmVyKTtcblxuICAgIGlmIChzdWJzY3JpYmVycy5zaXplID09PSAwKSB7XG4gICAgICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbikge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrQ2FuY2VsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrQ2FuY2VsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0cy51bnN0YWJsZV9jbGVhciA9IHVuc3RhYmxlX2NsZWFyO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50ID0gdW5zdGFibGVfZ2V0Q3VycmVudDtcbmV4cG9ydHMudW5zdGFibGVfZ2V0VGhyZWFkSUQgPSB1bnN0YWJsZV9nZXRUaHJlYWRJRDtcbmV4cG9ydHMudW5zdGFibGVfc3Vic2NyaWJlID0gdW5zdGFibGVfc3Vic2NyaWJlO1xuZXhwb3J0cy51bnN0YWJsZV90cmFjZSA9IHVuc3RhYmxlX3RyYWNlO1xuZXhwb3J0cy51bnN0YWJsZV91bnN1YnNjcmliZSA9IHVuc3RhYmxlX3Vuc3Vic2NyaWJlO1xuZXhwb3J0cy51bnN0YWJsZV93cmFwID0gdW5zdGFibGVfd3JhcDtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xudmFyIFNjaGVkdWxlciA9IHJlcXVpcmUoJ3NjaGVkdWxlcicpO1xudmFyIHRyYWNpbmcgPSByZXF1aXJlKCdzY2hlZHVsZXIvdHJhY2luZycpO1xuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuICcnICsgaXRlbTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbmlmICghUmVhY3QpIHtcbiAge1xuICAgIHRocm93IEVycm9yKCBcIlJlYWN0RE9NIHdhcyBsb2FkZWQgYmVmb3JlIFJlYWN0LiBNYWtlIHN1cmUgeW91IGxvYWQgdGhlIFJlYWN0IHBhY2thZ2UgYmVmb3JlIGxvYWRpbmcgUmVhY3RET00uXCIgKTtcbiAgfVxufVxuXG52YXIgRnVuY3Rpb25Db21wb25lbnQgPSAwO1xudmFyIENsYXNzQ29tcG9uZW50ID0gMTtcbnZhciBJbmRldGVybWluYXRlQ29tcG9uZW50ID0gMjsgLy8gQmVmb3JlIHdlIGtub3cgd2hldGhlciBpdCBpcyBmdW5jdGlvbiBvciBjbGFzc1xuXG52YXIgSG9zdFJvb3QgPSAzOyAvLyBSb290IG9mIGEgaG9zdCB0cmVlLiBDb3VsZCBiZSBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgbm9kZS5cblxudmFyIEhvc3RQb3J0YWwgPSA0OyAvLyBBIHN1YnRyZWUuIENvdWxkIGJlIGFuIGVudHJ5IHBvaW50IHRvIGEgZGlmZmVyZW50IHJlbmRlcmVyLlxuXG52YXIgSG9zdENvbXBvbmVudCA9IDU7XG52YXIgSG9zdFRleHQgPSA2O1xudmFyIEZyYWdtZW50ID0gNztcbnZhciBNb2RlID0gODtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSA5O1xudmFyIENvbnRleHRQcm92aWRlciA9IDEwO1xudmFyIEZvcndhcmRSZWYgPSAxMTtcbnZhciBQcm9maWxlciA9IDEyO1xudmFyIFN1c3BlbnNlQ29tcG9uZW50ID0gMTM7XG52YXIgTWVtb0NvbXBvbmVudCA9IDE0O1xudmFyIFNpbXBsZU1lbW9Db21wb25lbnQgPSAxNTtcbnZhciBMYXp5Q29tcG9uZW50ID0gMTY7XG52YXIgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50ID0gMTc7XG52YXIgRGVoeWRyYXRlZEZyYWdtZW50ID0gMTg7XG52YXIgU3VzcGVuc2VMaXN0Q29tcG9uZW50ID0gMTk7XG52YXIgRnVuZGFtZW50YWxDb21wb25lbnQgPSAyMDtcbnZhciBTY29wZUNvbXBvbmVudCA9IDIxO1xudmFyIEJsb2NrID0gMjI7XG52YXIgT2Zmc2NyZWVuQ29tcG9uZW50ID0gMjM7XG52YXIgTGVnYWN5SGlkZGVuQ29tcG9uZW50ID0gMjQ7XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlUHJvZmlsZXJUaW1lciA9IHRydWU7IC8vIFJlY29yZCBkdXJhdGlvbnMgZm9yIGNvbW1pdCBhbmQgcGFzc2l2ZSBlZmZlY3RzIHBoYXNlcy5cblxudmFyIGVuYWJsZUZ1bmRhbWVudGFsQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBTY29wZSBzdXBwb3J0LlxudmFyIGVuYWJsZU5ld1JlY29uY2lsZXIgPSBmYWxzZTsgLy8gRXJyb3JzIHRoYXQgYXJlIHRocm93biB3aGlsZSB1bm1vdW50aW5nIChvciBhZnRlciBpbiB0aGUgY2FzZSBvZiBwYXNzaXZlIGVmZmVjdHMpXG52YXIgd2FybkFib3V0U3RyaW5nUmVmcyA9IGZhbHNlO1xuXG52YXIgYWxsTmF0aXZlRXZlbnRzID0gbmV3IFNldCgpO1xuLyoqXG4gKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5hbWUgdG8gZXZlbnQgbmFtZVxuICovXG5cblxudmFyIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMgPSB7fTtcbi8qKlxuICogTWFwcGluZyBmcm9tIGxvd2VyY2FzZSByZWdpc3RyYXRpb24gbmFtZXMgdG8gdGhlIHByb3Blcmx5IGNhc2VkIHZlcnNpb24sXG4gKiB1c2VkIHRvIHdhcm4gaW4gdGhlIGNhc2Ugb2YgbWlzc2luZyBldmVudCBoYW5kbGVycy4gQXZhaWxhYmxlXG4gKiBvbmx5IGluIHRydWUuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cbnZhciBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzID0gIHt9IDsgLy8gVHJ1c3QgdGhlIGRldmVsb3BlciB0byBvbmx5IHVzZSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzIGluIHRydWVcblxuZnVuY3Rpb24gcmVnaXN0ZXJUd29QaGFzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcyk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSArICdDYXB0dXJlJywgZGVwZW5kZW5jaWVzKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gIHtcbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSkge1xuICAgICAgZXJyb3IoJ0V2ZW50UmVnaXN0cnk6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lICcgKyAncmVnaXN0cmF0aW9uIG5hbWUsIGAlc2AuJywgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSA9IGRlcGVuZGVuY2llcztcblxuICB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcmVnaXN0cmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdID0gcmVnaXN0cmF0aW9uTmFtZTtcblxuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lID09PSAnb25Eb3VibGVDbGljaycpIHtcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMub25kYmxjbGljayA9IHJlZ2lzdHJhdGlvbk5hbWU7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBhbGxOYXRpdmVFdmVudHMuYWRkKGRlcGVuZGVuY2llc1tpXSk7XG4gIH1cbn1cblxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpO1xuXG4vLyBBIHJlc2VydmVkIGF0dHJpYnV0ZS5cbi8vIEl0IGlzIGhhbmRsZWQgYnkgUmVhY3Qgc2VwYXJhdGVseSBhbmQgc2hvdWxkbid0IGJlIHdyaXR0ZW4gdG8gdGhlIERPTS5cbnZhciBSRVNFUlZFRCA9IDA7IC8vIEEgc2ltcGxlIHN0cmluZyBhdHRyaWJ1dGUuXG4vLyBBdHRyaWJ1dGVzIHRoYXQgYXJlbid0IGluIHRoZSBmaWx0ZXIgYXJlIHByZXN1bWVkIHRvIGhhdmUgdGhpcyB0eXBlLlxuXG52YXIgU1RSSU5HID0gMTsgLy8gQSBzdHJpbmcgYXR0cmlidXRlIHRoYXQgYWNjZXB0cyBib29sZWFucyBpbiBSZWFjdC4gSW4gSFRNTCwgdGhlc2UgYXJlIGNhbGxlZFxuLy8gXCJlbnVtZXJhdGVkXCIgYXR0cmlidXRlcyB3aXRoIFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIgYXMgcG9zc2libGUgdmFsdWVzLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgc2V0IHRvIGEgXCJ0cnVlXCIgc3RyaW5nLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIHNldCB0byBhIFwiZmFsc2VcIiBzdHJpbmcuXG5cbnZhciBCT09MRUFOSVNIX1NUUklORyA9IDI7IC8vIEEgcmVhbCBib29sZWFuIGF0dHJpYnV0ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxuXG52YXIgQk9PTEVBTiA9IDM7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgZmxhZyBhcyB3ZWxsIGFzIHdpdGggYSB2YWx1ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxuLy8gRm9yIGFueSBvdGhlciB2YWx1ZSwgc2hvdWxkIGJlIHByZXNlbnQgd2l0aCB0aGF0IHZhbHVlLlxuXG52YXIgT1ZFUkxPQURFRF9CT09MRUFOID0gNDsgLy8gQW4gYXR0cmlidXRlIHRoYXQgbXVzdCBiZSBudW1lcmljIG9yIHBhcnNlIGFzIGEgbnVtZXJpYy5cbi8vIFdoZW4gZmFsc3ksIGl0IHNob3VsZCBiZSByZW1vdmVkLlxuXG52YXIgTlVNRVJJQyA9IDU7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIHBvc2l0aXZlIG51bWVyaWMuXG4vLyBXaGVuIGZhbHN5LCBpdCBzaG91bGQgYmUgcmVtb3ZlZC5cblxudmFyIFBPU0lUSVZFX05VTUVSSUMgPSA2O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG52YXIgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiA9IFwiOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFwiO1xuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXG5cbnZhciBBVFRSSUJVVEVfTkFNRV9DSEFSID0gQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArIFwiXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBcIjtcbnZhciBST09UX0FUVFJJQlVURV9OQU1FID0gJ2RhdGEtcmVhY3Ryb290JztcbnZhciBWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWCA9IG5ldyBSZWdFeHAoJ15bJyArIEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgKyAnXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xudmFyIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xuZnVuY3Rpb24gaXNBdHRyaWJ1dGVOYW1lU2FmZShhdHRyaWJ1dGVOYW1lKSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYLnRlc3QoYXR0cmlidXRlTmFtZSkpIHtcbiAgICB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG5cbiAge1xuICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lOiBgJXNgJywgYXR0cmlidXRlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBzaG91bGRJZ25vcmVBdHRyaWJ1dGUobmFtZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRDtcbiAgfVxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA+IDIgJiYgKG5hbWVbMF0gPT09ICdvJyB8fCBuYW1lWzBdID09PSAnTycpICYmIChuYW1lWzFdID09PSAnbicgfHwgbmFtZVsxXSA9PT0gJ04nKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzogLy8gJEZsb3dJc3N1ZSBzeW1ib2wgaXMgcGVyZmVjdGx5IHZhbGlkIGhlcmVcblxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuICFwcm9wZXJ0eUluZm8uYWNjZXB0c0Jvb2xlYW5zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmVmaXggPSBuYW1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwgNSk7XG4gICAgICAgICAgcmV0dXJuIHByZWZpeCAhPT0gJ2RhdGEtJyAmJiBwcmVmaXggIT09ICdhcmlhLSc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuXG4gICAgc3dpdGNoIChwcm9wZXJ0eUluZm8udHlwZSkge1xuICAgICAgY2FzZSBCT09MRUFOOlxuICAgICAgICByZXR1cm4gIXZhbHVlO1xuXG4gICAgICBjYXNlIE9WRVJMT0FERURfQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBmYWxzZTtcblxuICAgICAgY2FzZSBOVU1FUklDOlxuICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpO1xuXG4gICAgICBjYXNlIFBPU0lUSVZFX05VTUVSSUM6XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFByb3BlcnR5SW5mbyhuYW1lKSB7XG4gIHJldHVybiBwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG5hbWUpID8gcHJvcGVydGllc1tuYW1lXSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCB0eXBlLCBtdXN0VXNlUHJvcGVydHksIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZU5hbWVzcGFjZSwgc2FuaXRpemVVUkwsIHJlbW92ZUVtcHR5U3RyaW5nKSB7XG4gIHRoaXMuYWNjZXB0c0Jvb2xlYW5zID0gdHlwZSA9PT0gQk9PTEVBTklTSF9TVFJJTkcgfHwgdHlwZSA9PT0gQk9PTEVBTiB8fCB0eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU47XG4gIHRoaXMuYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWU7XG4gIHRoaXMuYXR0cmlidXRlTmFtZXNwYWNlID0gYXR0cmlidXRlTmFtZXNwYWNlO1xuICB0aGlzLm11c3RVc2VQcm9wZXJ0eSA9IG11c3RVc2VQcm9wZXJ0eTtcbiAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBuYW1lO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnNhbml0aXplVVJMID0gc2FuaXRpemVVUkw7XG4gIHRoaXMucmVtb3ZlRW1wdHlTdHJpbmcgPSByZW1vdmVFbXB0eVN0cmluZztcbn0gLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGlzIGxpc3QsIGJlIHN1cmUgdG8gYWxzbyBhZGQgdGhlbSB0b1xuLy8gdGhlIGBwb3NzaWJsZVN0YW5kYXJkTmFtZXNgIG1vZHVsZSB0byBlbnN1cmUgY2FzaW5nIGFuZCBpbmNvcnJlY3Rcbi8vIG5hbWUgd2FybmluZ3MuXG5cblxudmFyIHByb3BlcnRpZXMgPSB7fTsgLy8gVGhlc2UgcHJvcHMgYXJlIHJlc2VydmVkIGJ5IFJlYWN0LiBUaGV5IHNob3VsZG4ndCBiZSB3cml0dGVuIHRvIHRoZSBET00uXG5cbnZhciByZXNlcnZlZFByb3BzID0gWydjaGlsZHJlbicsICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsIC8vIFRPRE86IFRoaXMgcHJldmVudHMgdGhlIGFzc2lnbm1lbnQgb2YgZGVmYXVsdFZhbHVlIHRvIHJlZ3VsYXJcbi8vIGVsZW1lbnRzIChub3QganVzdCBpbnB1dHMpLiBOb3cgdGhhdCBSZWFjdERPTUlucHV0IGFzc2lnbnMgdG8gdGhlXG4vLyBkZWZhdWx0VmFsdWUgcHJvcGVydHkgLS0gZG8gd2UgbmVlZCB0aGlzP1xuJ2RlZmF1bHRWYWx1ZScsICdkZWZhdWx0Q2hlY2tlZCcsICdpbm5lckhUTUwnLCAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJywgJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsICdzdHlsZSddO1xucmVzZXJ2ZWRQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFJFU0VSVkVELCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gQSBmZXcgUmVhY3Qgc3RyaW5nIGF0dHJpYnV0ZXMgaGF2ZSBhIGRpZmZlcmVudCBuYW1lLlxuLy8gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBSZWFjdCBwcm9wIG5hbWVzIHRvIHRoZSBhdHRyaWJ1dGUgbmFtZXMuXG5cbltbJ2FjY2VwdENoYXJzZXQnLCAnYWNjZXB0LWNoYXJzZXQnXSwgWydjbGFzc05hbWUnLCAnY2xhc3MnXSwgWydodG1sRm9yJywgJ2ZvciddLCBbJ2h0dHBFcXVpdicsICdodHRwLWVxdWl2J11dLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG5hbWUgPSBfcmVmWzBdLFxuICAgICAgYXR0cmlidXRlTmFtZSA9IF9yZWZbMV07XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBcImVudW1lcmF0ZWRcIiBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG5cblsnY29udGVudEVkaXRhYmxlJywgJ2RyYWdnYWJsZScsICdzcGVsbENoZWNrJywgJ3ZhbHVlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOSVNIX1NUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIFwiZW51bWVyYXRlZFwiIFNWRyBhdHRyaWJ1dGVzIHRoYXQgYWNjZXB0IFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIuXG4vLyBJbiBSZWFjdCwgd2UgbGV0IHVzZXJzIHBhc3MgYHRydWVgIGFuZCBgZmFsc2VgIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5XG4vLyB0aGVzZSBhcmVuJ3QgYm9vbGVhbiBhdHRyaWJ1dGVzICh0aGV5IGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MpLlxuLy8gU2luY2UgdGhlc2UgYXJlIFNWRyBhdHRyaWJ1dGVzLCB0aGVpciBhdHRyaWJ1dGUgbmFtZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuXG5bJ2F1dG9SZXZlcnNlJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnZm9jdXNhYmxlJywgJ3ByZXNlcnZlQWxwaGEnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU5JU0hfU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYm9vbGVhbiBhdHRyaWJ1dGVzLlxuXG5bJ2FsbG93RnVsbFNjcmVlbicsICdhc3luYycsIC8vIE5vdGU6IHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgcHJldmVudHMgaXQgZnJvbSBiZWluZyB3cml0dGVuIHRvIHRoZSBET01cbi8vIG9uIHRoZSBjbGllbnQgc2lkZSBiZWNhdXNlIHRoZSBicm93c2VycyBhcmUgaW5jb25zaXN0ZW50LiBJbnN0ZWFkIHdlIGNhbGwgZm9jdXMoKS5cbidhdXRvRm9jdXMnLCAnYXV0b1BsYXknLCAnY29udHJvbHMnLCAnZGVmYXVsdCcsICdkZWZlcicsICdkaXNhYmxlZCcsICdkaXNhYmxlUGljdHVyZUluUGljdHVyZScsICdkaXNhYmxlUmVtb3RlUGxheWJhY2snLCAnZm9ybU5vVmFsaWRhdGUnLCAnaGlkZGVuJywgJ2xvb3AnLCAnbm9Nb2R1bGUnLCAnbm9WYWxpZGF0ZScsICdvcGVuJywgJ3BsYXlzSW5saW5lJywgJ3JlYWRPbmx5JywgJ3JlcXVpcmVkJywgJ3JldmVyc2VkJywgJ3Njb3BlZCcsICdzZWFtbGVzcycsIC8vIE1pY3JvZGF0YVxuJ2l0ZW1TY29wZSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTiwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIHRoZSBmZXcgUmVhY3QgcHJvcHMgdGhhdCB3ZSBzZXQgYXMgRE9NIHByb3BlcnRpZXNcbi8vIHJhdGhlciB0aGFuIGF0dHJpYnV0ZXMuIFRoZXNlIGFyZSBhbGwgYm9vbGVhbnMuXG5cblsnY2hlY2tlZCcsIC8vIE5vdGU6IGBvcHRpb24uc2VsZWN0ZWRgIGlzIG5vdCB1cGRhdGVkIGlmIGBzZWxlY3QubXVsdGlwbGVgIGlzXG4vLyBkaXNhYmxlZCB3aXRoIGByZW1vdmVBdHRyaWJ1dGVgLiBXZSBoYXZlIHNwZWNpYWwgbG9naWMgZm9yIGhhbmRsaW5nIHRoaXMuXG4nbXVsdGlwbGUnLCAnbXV0ZWQnLCAnc2VsZWN0ZWQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU4sIHRydWUsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBhcmUgXCJvdmVybG9hZGVkIGJvb2xlYW5zXCI6IHRoZXkgYmVoYXZlIGxpa2Vcbi8vIGJvb2xlYW5zLCBidXQgY2FuIGFsc28gYWNjZXB0IGEgc3RyaW5nIHZhbHVlLlxuXG5bJ2NhcHR1cmUnLCAnZG93bmxvYWQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIE9WRVJMT0FERURfQk9PTEVBTiwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIHBvc2l0aXZlIG51bWJlcnMuXG5cblsnY29scycsICdyb3dzJywgJ3NpemUnLCAnc3BhbicgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgUE9TSVRJVkVfTlVNRVJJQywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIG51bWJlcnMuXG5cblsncm93U3BhbicsICdzdGFydCddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgTlVNRVJJQywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTtcbnZhciBDQU1FTElaRSA9IC9bXFwtXFw6XShbYS16XSkvZztcblxudmFyIGNhcGl0YWxpemUgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgcmV0dXJuIHRva2VuWzFdLnRvVXBwZXJDYXNlKCk7XG59OyAvLyBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBuZWVkIHNwZWNpYWwgY2FzaW5nLCBuYW1lc3BhY2luZyxcbi8vIG9yIGJvb2xlYW4gdmFsdWUgYXNzaWdubWVudC4gUmVndWxhciBhdHRyaWJ1dGVzIHRoYXQganVzdCBhY2NlcHQgc3RyaW5nc1xuLy8gYW5kIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXJlIG9taXR0ZWQsIGp1c3QgbGlrZSBpbiB0aGUgSFRNTCBhdHRyaWJ1dGUgZmlsdGVyLlxuLy8gU29tZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIGNhbiBiZSBoYXJkIHRvIGZpbmQuIFRoaXMgbGlzdCB3YXMgY3JlYXRlZCBieVxuLy8gc2NyYXBpbmcgdGhlIE1ETiBkb2N1bWVudGF0aW9uLlxuXG5cblsnYWNjZW50LWhlaWdodCcsICdhbGlnbm1lbnQtYmFzZWxpbmUnLCAnYXJhYmljLWZvcm0nLCAnYmFzZWxpbmUtc2hpZnQnLCAnY2FwLWhlaWdodCcsICdjbGlwLXBhdGgnLCAnY2xpcC1ydWxlJywgJ2NvbG9yLWludGVycG9sYXRpb24nLCAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJywgJ2NvbG9yLXByb2ZpbGUnLCAnY29sb3ItcmVuZGVyaW5nJywgJ2RvbWluYW50LWJhc2VsaW5lJywgJ2VuYWJsZS1iYWNrZ3JvdW5kJywgJ2ZpbGwtb3BhY2l0eScsICdmaWxsLXJ1bGUnLCAnZmxvb2QtY29sb3InLCAnZmxvb2Qtb3BhY2l0eScsICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zaXplLWFkanVzdCcsICdmb250LXN0cmV0Y2gnLCAnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZ2x5cGgtbmFtZScsICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJywgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJywgJ2hvcml6LWFkdi14JywgJ2hvcml6LW9yaWdpbi14JywgJ2ltYWdlLXJlbmRlcmluZycsICdsZXR0ZXItc3BhY2luZycsICdsaWdodGluZy1jb2xvcicsICdtYXJrZXItZW5kJywgJ21hcmtlci1taWQnLCAnbWFya2VyLXN0YXJ0JywgJ292ZXJsaW5lLXBvc2l0aW9uJywgJ292ZXJsaW5lLXRoaWNrbmVzcycsICdwYWludC1vcmRlcicsICdwYW5vc2UtMScsICdwb2ludGVyLWV2ZW50cycsICdyZW5kZXJpbmctaW50ZW50JywgJ3NoYXBlLXJlbmRlcmluZycsICdzdG9wLWNvbG9yJywgJ3N0b3Atb3BhY2l0eScsICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJywgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJywgJ3N0cm9rZS1kYXNoYXJyYXknLCAnc3Ryb2tlLWRhc2hvZmZzZXQnLCAnc3Ryb2tlLWxpbmVjYXAnLCAnc3Ryb2tlLWxpbmVqb2luJywgJ3N0cm9rZS1taXRlcmxpbWl0JywgJ3N0cm9rZS1vcGFjaXR5JywgJ3N0cm9rZS13aWR0aCcsICd0ZXh0LWFuY2hvcicsICd0ZXh0LWRlY29yYXRpb24nLCAndGV4dC1yZW5kZXJpbmcnLCAndW5kZXJsaW5lLXBvc2l0aW9uJywgJ3VuZGVybGluZS10aGlja25lc3MnLCAndW5pY29kZS1iaWRpJywgJ3VuaWNvZGUtcmFuZ2UnLCAndW5pdHMtcGVyLWVtJywgJ3YtYWxwaGFiZXRpYycsICd2LWhhbmdpbmcnLCAndi1pZGVvZ3JhcGhpYycsICd2LW1hdGhlbWF0aWNhbCcsICd2ZWN0b3ItZWZmZWN0JywgJ3ZlcnQtYWR2LXknLCAndmVydC1vcmlnaW4teCcsICd2ZXJ0LW9yaWdpbi15JywgJ3dvcmQtc3BhY2luZycsICd3cml0aW5nLW1vZGUnLCAneG1sbnM6eGxpbmsnLCAneC1oZWlnaHQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFN0cmluZyBTVkcgYXR0cmlidXRlcyB3aXRoIHRoZSB4bGluayBuYW1lc3BhY2UuXG5cblsneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gU3RyaW5nIFNWRyBhdHRyaWJ1dGVzIHdpdGggdGhlIHhtbCBuYW1lc3BhY2UuXG5cblsneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJywgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGUgZXhpc3RzIGJvdGggaW4gSFRNTCBhbmQgU1ZHLlxuLy8gVGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGNhc2Utc2Vuc2l0aXZlIGluIFNWRyBzbyB3ZSBjYW4ndCBqdXN0IHVzZVxuLy8gdGhlIFJlYWN0IG5hbWUgbGlrZSB3ZSBkbyBmb3IgYXR0cmlidXRlcyB0aGF0IGV4aXN0IG9ubHkgaW4gSFRNTC5cblxuWyd0YWJJbmRleCcsICdjcm9zc09yaWdpbiddLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcHJvcGVydGllc1thdHRyaWJ1dGVOYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoYXR0cmlidXRlTmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGVzIGFjY2VwdCBVUkxzLiBUaGVzZSBtdXN0IG5vdCBhbGxvdyBqYXZhc2NyaXB0OiBVUkxTLlxuLy8gVGhlc2Ugd2lsbCBhbHNvIG5lZWQgdG8gYWNjZXB0IFRydXN0ZWQgVHlwZXMgb2JqZWN0IGluIHRoZSBmdXR1cmUuXG5cbnZhciB4bGlua0hyZWYgPSAneGxpbmtIcmVmJztcbnByb3BlcnRpZXNbeGxpbmtIcmVmXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoJ3hsaW5rSHJlZicsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuJ3hsaW5rOmhyZWYnLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIHRydWUsIC8vIHNhbml0aXplVVJMXG5mYWxzZSk7XG5bJ3NyYycsICdocmVmJywgJ2FjdGlvbicsICdmb3JtQWN0aW9uJ10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICBwcm9wZXJ0aWVzW2F0dHJpYnV0ZU5hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChhdHRyaWJ1dGVOYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICB0cnVlLCAvLyBzYW5pdGl6ZVVSTFxuICB0cnVlKTtcbn0pO1xuXG4vLyBhbmQgYW55IG5ld2xpbmUgb3IgdGFiIGFyZSBmaWx0ZXJlZCBvdXQgYXMgaWYgdGhleSdyZSBub3QgcGFydCBvZiB0aGUgVVJMLlxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtcGFyc2luZ1xuLy8gVGFiIG9yIG5ld2xpbmUgYXJlIGRlZmluZWQgYXMgXFxyXFxuXFx0OlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXRhYi1vci1uZXdsaW5lXG4vLyBBIEMwIGNvbnRyb2wgaXMgYSBjb2RlIHBvaW50IGluIHRoZSByYW5nZSBcXHUwMDAwIE5VTEwgdG8gXFx1MDAxRlxuLy8gSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORSwgaW5jbHVzaXZlOlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2MwLWNvbnRyb2wtb3Itc3BhY2VcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG52YXIgaXNKYXZhU2NyaXB0UHJvdG9jb2wgPSAvXltcXHUwMDAwLVxcdTAwMUYgXSpqW1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnZbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qc1tcXHJcXG5cXHRdKmNbXFxyXFxuXFx0XSpyW1xcclxcblxcdF0qaVtcXHJcXG5cXHRdKnBbXFxyXFxuXFx0XSp0W1xcclxcblxcdF0qXFw6L2k7XG52YXIgZGlkV2FybiA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzYW5pdGl6ZVVSTCh1cmwpIHtcbiAge1xuICAgIGlmICghZGlkV2FybiAmJiBpc0phdmFTY3JpcHRQcm90b2NvbC50ZXN0KHVybCkpIHtcbiAgICAgIGRpZFdhcm4gPSB0cnVlO1xuXG4gICAgICBlcnJvcignQSBmdXR1cmUgdmVyc2lvbiBvZiBSZWFjdCB3aWxsIGJsb2NrIGphdmFzY3JpcHQ6IFVSTHMgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLiAnICsgJ1VzZSBldmVudCBoYW5kbGVycyBpbnN0ZWFkIGlmIHlvdSBjYW4uIElmIHlvdSBuZWVkIHRvIGdlbmVyYXRlIHVuc2FmZSBIVE1MIHRyeSAnICsgJ3VzaW5nIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGluc3RlYWQuIFJlYWN0IHdhcyBwYXNzZWQgJXMuJywgSlNPTi5zdHJpbmdpZnkodXJsKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuIE9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICogVGhlIFwiZXhwZWN0ZWRcIiBhcmd1bWVudCBpcyB1c2VkIGFzIGEgaGludCBvZiB3aGF0IHRoZSBleHBlY3RlZCB2YWx1ZSBpcy5cbiAqIFNvbWUgcHJvcGVydGllcyBoYXZlIG11bHRpcGxlIGVxdWl2YWxlbnQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8pIHtcbiAge1xuICAgIGlmIChwcm9wZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5KSB7XG4gICAgICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJbmZvLnByb3BlcnR5TmFtZTtcbiAgICAgIHJldHVybiBub2RlW3Byb3BlcnR5TmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICggcHJvcGVydHlJbmZvLnNhbml0aXplVVJMKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgZnVsbHkgZGlzYWJsZWQgamF2YXNjcmlwdDogVVJMcywgYW5kIGlmXG4gICAgICAgIC8vIHRoZSBoeWRyYXRpb24gaXMgc3VjY2Vzc2Z1bCBvZiBhIGphdmFzY3JpcHQ6IFVSTCwgd2VcbiAgICAgICAgLy8gc3RpbGwgd2FudCB0byB3YXJuIG9uIHRoZSBjbGllbnQuXG4gICAgICAgIHNhbml0aXplVVJMKCcnICsgZXhwZWN0ZWQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lO1xuICAgICAgdmFyIHN0cmluZ1ZhbHVlID0gbnVsbDtcblxuICAgICAgaWYgKHByb3BlcnR5SW5mby50eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU4pIHtcbiAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICAgIC8vIFdlIGhhZCBhbiBhdHRyaWJ1dGUgYnV0IHNob3VsZG4ndCBoYXZlIGhhZCBvbmUsIHNvIHJlYWQgaXRcbiAgICAgICAgICAvLyBmb3IgdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mby50eXBlID09PSBCT09MRUFOKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBib29sZWFuLCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSB2YWx1ZSBpc1xuICAgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBpdCBpcyB0aGUgc2FtZSBhcyB0aGUgZXhwZWN0ZWQuXG4gICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICB9IC8vIEV2ZW4gaWYgdGhpcyBwcm9wZXJ0eSB1c2VzIGEgbmFtZXNwYWNlIHdlIHVzZSBnZXRBdHRyaWJ1dGVcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBhc3N1bWUgaXRzIG5hbWVzcGFjZWQgbmFtZSBpcyB0aGUgc2FtZSBhcyBvdXIgY29uZmlnLlxuICAgICAgICAvLyBUbyB1c2UgZ2V0QXR0cmlidXRlTlMgd2UgbmVlZCB0aGUgbG9jYWwgbmFtZSB3aGljaCB3ZSBkb24ndCBoYXZlXG4gICAgICAgIC8vIGluIG91ciBjb25maWcgYXRtLlxuXG5cbiAgICAgICAgc3RyaW5nVmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlID09PSBudWxsID8gZXhwZWN0ZWQgOiBzdHJpbmdWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyaW5nVmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhIGF0dHJpYnV0ZSBvbiBhIG5vZGUuIE9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICogVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHVzZWQgYXMgYSBoaW50IG9mIHdoYXQgdGhlIGV4cGVjdGVkIHZhbHVlIGlzLiBTb21lXG4gKiBhdHRyaWJ1dGVzIGhhdmUgbXVsdGlwbGUgZXF1aXZhbGVudCB2YWx1ZXMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUobm9kZSwgbmFtZSwgZXhwZWN0ZWQpIHtcbiAge1xuICAgIGlmICghaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgdGhlIG9iamVjdCBpcyBhbiBvcGFxdWUgcmVmZXJlbmNlIElELCBpdCdzIGV4cGVjdGVkIHRoYXRcbiAgICAvLyB0aGUgbmV4dCBwcm9wIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBzZXJ2ZXIgdmFsdWUsIHNvIGp1c3QgcmV0dXJuXG4gICAgLy8gZXhwZWN0ZWRcblxuXG4gICAgaWYgKGlzT3BhcXVlSHlkcmF0aW5nT2JqZWN0KGV4cGVjdGVkKSkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgIH1cblxuICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5cbmZ1bmN0aW9uIHNldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8obmFtZSk7XG5cbiAgaWYgKHNob3VsZElnbm9yZUF0dHJpYnV0ZShuYW1lLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgdmFsdWUgPSBudWxsO1xuICB9IC8vIElmIHRoZSBwcm9wIGlzbid0IGluIHRoZSBzcGVjaWFsIGxpc3QsIHRyZWF0IGl0IGFzIGEgc2ltcGxlIGF0dHJpYnV0ZS5cblxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZyB8fCBwcm9wZXJ0eUluZm8gPT09IG51bGwpIHtcbiAgICBpZiAoaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgdmFyIF9hdHRyaWJ1dGVOYW1lID0gbmFtZTtcblxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKF9hdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKF9hdHRyaWJ1dGVOYW1lLCAgJycgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG11c3RVc2VQcm9wZXJ0eSA9IHByb3BlcnR5SW5mby5tdXN0VXNlUHJvcGVydHk7XG5cbiAgaWYgKG11c3RVc2VQcm9wZXJ0eSkge1xuICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICB2YXIgdHlwZSA9IHByb3BlcnR5SW5mby50eXBlO1xuICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdHlwZSA9PT0gQk9PTEVBTiA/IGZhbHNlIDogJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnRyYXJ5IHRvIGBzZXRBdHRyaWJ1dGVgLCBvYmplY3QgcHJvcGVydGllcyBhcmUgcHJvcGVybHlcbiAgICAgIC8vIGB0b1N0cmluZ2BlZCBieSBJRTgvOS5cbiAgICAgIG5vZGVbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfSAvLyBUaGUgcmVzdCBhcmUgdHJlYXRlZCBhcyBhdHRyaWJ1dGVzIHdpdGggc3BlY2lhbCBjYXNlcy5cblxuXG4gIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUsXG4gICAgICBhdHRyaWJ1dGVOYW1lc3BhY2UgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZXNwYWNlO1xuXG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBfdHlwZSA9IHByb3BlcnR5SW5mby50eXBlO1xuICAgIHZhciBhdHRyaWJ1dGVWYWx1ZTtcblxuICAgIGlmIChfdHlwZSA9PT0gQk9PTEVBTiB8fCBfdHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOICYmIHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAvLyBJZiBhdHRyaWJ1dGUgdHlwZSBpcyBib29sZWFuLCB3ZSBrbm93IGZvciBzdXJlIGl0IHdvbid0IGJlIGFuIGV4ZWN1dGlvbiBzaW5rXG4gICAgICAvLyBhbmQgd2Ugd29uJ3QgcmVxdWlyZSBUcnVzdGVkIFR5cGUgaGVyZS5cbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGBzZXRBdHRyaWJ1dGVgIHdpdGggb2JqZWN0cyBiZWNvbWVzIG9ubHkgYFtvYmplY3RdYCBpbiBJRTgvOSxcbiAgICAgIC8vICgnJyArIHZhbHVlKSBtYWtlcyBpdCBvdXRwdXQgdGhlIGNvcnJlY3QgdG9TdHJpbmcoKS12YWx1ZS5cbiAgICAgIHtcbiAgICAgICAgYXR0cmlidXRlVmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHlJbmZvLnNhbml0aXplVVJMKSB7XG4gICAgICAgIHNhbml0aXplVVJMKGF0dHJpYnV0ZVZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhdHRyaWJ1dGVOYW1lc3BhY2UpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlTlMoYXR0cmlidXRlTmFtZXNwYWNlLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IDB4ZWFjZTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEV4dHJhY3QgdGhlIFZNIHNwZWNpZmljIHByZWZpeCB1c2VkIGJ5IGVhY2ggbGluZS5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xuICAgICAgfVxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXG5cblxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XG4gIH1cbn1cbnZhciByZWVudHJ5ID0gZmFsc2U7XG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcblxue1xuICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuICBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXG4gIGlmICghZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHtcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG5cbiAgICBpZiAoZnJhbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250cm9sO1xuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHZhciBwcmV2aW91c0Rpc3BhdGNoZXI7XG5cbiAge1xuICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoY3Rvciwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShjdG9yLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBzb3VyY2UsIG93bmVyRm4pO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRmliZXIoZmliZXIpIHtcbiAgdmFyIG93bmVyID0gIGZpYmVyLl9kZWJ1Z093bmVyID8gZmliZXIuX2RlYnVnT3duZXIudHlwZSA6IG51bGwgO1xuICB2YXIgc291cmNlID0gIGZpYmVyLl9kZWJ1Z1NvdXJjZSA7XG5cbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ0xhenknKTtcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG5cbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlLnJlbmRlcik7XG5cbiAgICBjYXNlIEJsb2NrOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlLl9yZW5kZXIpO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZCh3b3JrSW5Qcm9ncmVzcykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gJyc7XG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIGRvIHtcbiAgICAgIGluZm8gKz0gZGVzY3JpYmVGaWJlcihub2RlKTtcbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChub2RlKTtcblxuICAgIHJldHVybiBpbmZvO1xuICB9IGNhdGNoICh4KSB7XG4gICAgcmV0dXJuICdcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiAnICsgeC5tZXNzYWdlICsgJ1xcbicgKyB4LnN0YWNrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xudmFyIGN1cnJlbnQgPSBudWxsO1xudmFyIGlzUmVuZGVyaW5nID0gZmFsc2U7XG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHtcbiAge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgb3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIHR5cGVvZiBvd25lciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IC8vIFNhZmUgYmVjYXVzZSBpZiBjdXJyZW50IGZpYmVyIGV4aXN0cywgd2UgYXJlIHJlY29uY2lsaW5nLFxuICAgIC8vIGFuZCBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSB3b3JrLWluLXByb2dyZXNzIHZlcnNpb24uXG5cblxuICAgIHJldHVybiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoY3VycmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRDdXJyZW50RmliZXIoKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG4gICAgY3VycmVudCA9IG51bGw7XG4gICAgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0Q3VycmVudEZpYmVyKGZpYmVyKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXY7XG4gICAgY3VycmVudCA9IGZpYmVyO1xuICAgIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldElzUmVuZGVyaW5nKHJlbmRlcmluZykge1xuICB7XG4gICAgaXNSZW5kZXJpbmcgPSByZW5kZXJpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldElzUmVuZGVyaW5nKCkge1xuICB7XG4gICAgcmV0dXJuIGlzUmVuZGVyaW5nO1xuICB9XG59XG5cbi8vIEZsb3cgZG9lcyBub3QgYWxsb3cgc3RyaW5nIGNvbmNhdGVuYXRpb24gb2YgbW9zdCBub24tc3RyaW5nIHR5cGVzLiBUbyB3b3JrXG4vLyBhcm91bmQgdGhpcyBsaW1pdGF0aW9uLCB3ZSB1c2UgYW4gb3BhcXVlIHR5cGUgdGhhdCBjYW4gb25seSBiZSBvYnRhaW5lZCBieVxuLy8gcGFzc2luZyB0aGUgdmFsdWUgdGhyb3VnaCBnZXRUb1N0cmluZ1ZhbHVlIGZpcnN0LlxuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBmdW5jdGlvbiwgc3ltYm9sIGFyZSBhc3NpZ25lZCBhcyBlbXB0eSBzdHJpbmdzXG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxudmFyIGhhc1JlYWRPbmx5VmFsdWUgPSB7XG4gIGJ1dHRvbjogdHJ1ZSxcbiAgY2hlY2tib3g6IHRydWUsXG4gIGltYWdlOiB0cnVlLFxuICBoaWRkZW46IHRydWUsXG4gIHJhZGlvOiB0cnVlLFxuICByZXNldDogdHJ1ZSxcbiAgc3VibWl0OiB0cnVlXG59O1xuZnVuY3Rpb24gY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyh0YWdOYW1lLCBwcm9wcykge1xuICB7XG4gICAgaWYgKCEoaGFzUmVhZE9ubHlWYWx1ZVtwcm9wcy50eXBlXSB8fCBwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5vbklucHV0IHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkIHx8IHByb3BzLnZhbHVlID09IG51bGwpKSB7XG4gICAgICBlcnJvcignWW91IHByb3ZpZGVkIGEgYHZhbHVlYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgKyAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICsgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRWYWx1ZWAuIE90aGVyd2lzZSwgJyArICdzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIShwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCB8fCBwcm9wcy5jaGVja2VkID09IG51bGwpKSB7XG4gICAgICBlcnJvcignWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdENoZWNrZWRgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2hlY2thYmxlKGVsZW0pIHtcbiAgdmFyIHR5cGUgPSBlbGVtLnR5cGU7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmICh0eXBlID09PSAnY2hlY2tib3gnIHx8IHR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFja2VyKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuX3ZhbHVlVHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gZGV0YWNoVHJhY2tlcihub2RlKSB7XG4gIG5vZGUuX3ZhbHVlVHJhY2tlciA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRnJvbU5vZGUobm9kZSkge1xuICB2YXIgdmFsdWUgPSAnJztcblxuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAoaXNDaGVja2FibGUobm9kZSkpIHtcbiAgICB2YWx1ZSA9IG5vZGUuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBub2RlLnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlRmllbGQgPSBpc0NoZWNrYWJsZShub2RlKSA/ICdjaGVja2VkJyA6ICd2YWx1ZSc7XG4gIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihub2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgdmFsdWVGaWVsZCk7XG4gIHZhciBjdXJyZW50VmFsdWUgPSAnJyArIG5vZGVbdmFsdWVGaWVsZF07IC8vIGlmIHNvbWVvbmUgaGFzIGFscmVhZHkgZGVmaW5lZCBhIHZhbHVlIG9yIFNhZmFyaSwgdGhlbiBiYWlsXG4gIC8vIGFuZCBkb24ndCB0cmFjayB2YWx1ZSB3aWxsIGNhdXNlIG92ZXIgcmVwb3J0aW5nIG9mIGNoYW5nZXMsXG4gIC8vIGJ1dCBpdCdzIGJldHRlciB0aGVuIGEgaGFyZCBmYWlsdXJlXG4gIC8vIChuZWVkZWQgZm9yIGNlcnRhaW4gdGVzdHMgdGhhdCBzcHlPbiBpbnB1dCB2YWx1ZXMgYW5kIFNhZmFyaSlcblxuICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eSh2YWx1ZUZpZWxkKSB8fCB0eXBlb2YgZGVzY3JpcHRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnNldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBnZXQgPSBkZXNjcmlwdG9yLmdldCxcbiAgICAgIHNldCA9IGRlc2NyaXB0b3Iuc2V0O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXQuY2FsbCh0aGlzKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH1cbiAgfSk7IC8vIFdlIGNvdWxkJ3ZlIHBhc3NlZCB0aGlzIHRoZSBmaXJzdCB0aW1lXG4gIC8vIGJ1dCBpdCB0cmlnZ2VycyBhIGJ1ZyBpbiBJRTExIGFuZCBFZGdlIDE0LzE1LlxuICAvLyBDYWxsaW5nIGRlZmluZVByb3BlcnR5KCkgYWdhaW4gc2hvdWxkIGJlIGVxdWl2YWxlbnQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE3NjhcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZVxuICB9KTtcbiAgdmFyIHRyYWNrZXIgPSB7XG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgfSxcbiAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgIH0sXG4gICAgc3RvcFRyYWNraW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXRhY2hUcmFja2VyKG5vZGUpO1xuICAgICAgZGVsZXRlIG5vZGVbdmFsdWVGaWVsZF07XG4gICAgfVxuICB9O1xuICByZXR1cm4gdHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gdHJhY2sobm9kZSkge1xuICBpZiAoZ2V0VHJhY2tlcihub2RlKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBUT0RPOiBPbmNlIGl0J3MganVzdCBGaWJlciB3ZSBjYW4gbW92ZSB0aGlzIHRvIG5vZGUuX3dyYXBwZXJTdGF0ZVxuXG5cbiAgbm9kZS5fdmFsdWVUcmFja2VyID0gdHJhY2tWYWx1ZU9uTm9kZShub2RlKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKG5vZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRyYWNrZXIgPSBnZXRUcmFja2VyKG5vZGUpOyAvLyBpZiB0aGVyZSBpcyBubyB0cmFja2VyIGF0IHRoaXMgcG9pbnQgaXQncyB1bmxpa2VseVxuICAvLyB0aGF0IHRyeWluZyBhZ2FpbiB3aWxsIHN1Y2NlZWRcblxuICBpZiAoIXRyYWNrZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBsYXN0VmFsdWUgPSB0cmFja2VyLmdldFZhbHVlKCk7XG4gIHZhciBuZXh0VmFsdWUgPSBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpO1xuXG4gIGlmIChuZXh0VmFsdWUgIT09IGxhc3RWYWx1ZSkge1xuICAgIHRyYWNrZXIuc2V0VmFsdWUobmV4dFZhbHVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudChkb2MpIHtcbiAgZG9jID0gZG9jIHx8ICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQgOiB1bmRlZmluZWQpO1xuXG4gIGlmICh0eXBlb2YgZG9jID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZG9jLmFjdGl2ZUVsZW1lbnQgfHwgZG9jLmJvZHk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZG9jLmJvZHk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gZmFsc2U7XG52YXIgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBpc0NvbnRyb2xsZWQocHJvcHMpIHtcbiAgdmFyIHVzZXNDaGVja2VkID0gcHJvcHMudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09PSAncmFkaW8nO1xuICByZXR1cm4gdXNlc0NoZWNrZWQgPyBwcm9wcy5jaGVja2VkICE9IG51bGwgOiBwcm9wcy52YWx1ZSAhPSBudWxsO1xufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxpbnB1dD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyB0aGVzZSBvcHRpb25hbFxuICogcHJvcHM6IGBjaGVja2VkYCwgYHZhbHVlYCwgYGRlZmF1bHRDaGVja2VkYCwgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICpcbiAqIElmIGBjaGVja2VkYCBvciBgdmFsdWVgIGFyZSBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zXG4gKiB0aGF0IGFmZmVjdCB0aGUgY2hlY2tlZCBzdGF0ZSBvciB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiB0aGV5IGFyZSBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgbm90XG4gKiB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBwcm9wcyBtdXN0IGNoYW5nZSBpbiBvcmRlciBmb3JcbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCBhcyB1bmNoZWNrZWQgKG9yIGBkZWZhdWx0Q2hlY2tlZGApXG4gKiB3aXRoIGFuIGVtcHR5IHZhbHVlIChvciBgZGVmYXVsdFZhbHVlYCkuXG4gKlxuICogU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjEwMjUvdGhlLWlucHV0LWVsZW1lbnQuaHRtbFxuICovXG5cblxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIGRlZmF1bHRDaGVja2VkOiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICBjaGVja2VkOiBjaGVja2VkICE9IG51bGwgPyBjaGVja2VkIDogbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkXG4gIH0pO1xuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCdpbnB1dCcsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5jaGVja2VkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIGNoZWNrZWQgYW5kIGRlZmF1bHRDaGVja2VkIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSBjaGVja2VkIHByb3AsIG9yIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSk7XG5cbiAgICAgIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKTtcblxuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCA/ICcnIDogcHJvcHMuZGVmYXVsdFZhbHVlO1xuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbENoZWNrZWQ6IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA/IHByb3BzLmNoZWNrZWQgOiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICBpbml0aWFsVmFsdWU6IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUgIT0gbnVsbCA/IHByb3BzLnZhbHVlIDogZGVmYXVsdFZhbHVlKSxcbiAgICBjb250cm9sbGVkOiBpc0NvbnRyb2xsZWQocHJvcHMpXG4gIH07XG59XG5mdW5jdGlvbiB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIGlmIChjaGVja2VkICE9IG51bGwpIHtcbiAgICBzZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsICdjaGVja2VkJywgY2hlY2tlZCwgZmFsc2UpO1xuICB9XG59XG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgdmFyIGNvbnRyb2xsZWQgPSBpc0NvbnRyb2xsZWQocHJvcHMpO1xuXG4gICAgaWYgKCFub2RlLl93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiBjb250cm9sbGVkICYmICFkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYW4gdW5jb250cm9sbGVkIGlucHV0IHRvIGJlIGNvbnRyb2xsZWQuICcgKyAnVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIHVuZGVmaW5lZCB0byAnICsgJ2EgZGVmaW5lZCB2YWx1ZSwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uICcgKyAnRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmICFjb250cm9sbGVkICYmICFkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYSBjb250cm9sbGVkIGlucHV0IHRvIGJlIHVuY29udHJvbGxlZC4gJyArICdUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gYSBkZWZpbmVkIHRvICcgKyAndW5kZWZpbmVkLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKTtcbiAgdmFyIHZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSk7XG4gIHZhciB0eXBlID0gcHJvcHMudHlwZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKHZhbHVlID09PSAwICYmIG5vZGUudmFsdWUgPT09ICcnIHx8IC8vIFdlIGV4cGxpY2l0bHkgd2FudCB0byBjb2VyY2UgdG8gbnVtYmVyIGhlcmUgaWYgcG9zc2libGUuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIG5vZGUudmFsdWUgIT0gdmFsdWUpIHtcbiAgICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0Jykge1xuICAgIC8vIFN1Ym1pdC9yZXNldCBpbnB1dHMgbmVlZCB0aGUgYXR0cmlidXRlIHJlbW92ZWQgY29tcGxldGVseSB0byBhdm9pZFxuICAgIC8vIGJsYW5rLXRleHQgYnV0dG9ucy5cbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBjb21lcyBmcm9tIGEgY2FzY2FkZSBvZlxuICAgIC8vIHByb3BlcnRpZXM6XG4gICAgLy8gIDEuIFRoZSB2YWx1ZSBSZWFjdCBwcm9wZXJ0eVxuICAgIC8vICAyLiBUaGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5XG4gICAgLy8gIDMuIE90aGVyd2lzZSB0aGVyZSBzaG91bGQgYmUgbm8gY2hhbmdlXG4gICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCd2YWx1ZScpKSB7XG4gICAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgcHJvcHMudHlwZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWYWx1ZScpKSB7XG4gICAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgcHJvcHMudHlwZSwgZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy5kZWZhdWx0VmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgaXQgb25seSBjaGFuZ2VzIHdoZW4gaXQgbmVlZHNcbiAgICAvLyB0byBiZSByZW1vdmVkLCBzdWNoIGFzIHRyYW5zaXRpb25pbmcgZnJvbSBhIGNoZWNrYm94IGludG8gYSB0ZXh0IGlucHV0XG4gICAgaWYgKHByb3BzLmNoZWNrZWQgPT0gbnVsbCAmJiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCAhPSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFwcm9wcy5kZWZhdWx0Q2hlY2tlZDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIoZWxlbWVudCwgcHJvcHMsIGlzSHlkcmF0aW5nKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDsgLy8gRG8gbm90IGFzc2lnbiB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IHNldC4gVGhpcyBwcmV2ZW50cyB1c2VyIHRleHQgaW5wdXRcbiAgLy8gZnJvbSBiZWluZyBsb3N0IGR1cmluZyBTU1IgaHlkcmF0aW9uLlxuXG4gIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSB8fCBwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykpIHtcbiAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG4gICAgdmFyIGlzQnV0dG9uID0gdHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0JzsgLy8gQXZvaWQgc2V0dGluZyB2YWx1ZSBhdHRyaWJ1dGUgb24gc3VibWl0L3Jlc2V0IGlucHV0cyBhcyBpdCBvdmVycmlkZXMgdGhlXG4gICAgLy8gZGVmYXVsdCB2YWx1ZSBwcm92aWRlZCBieSB0aGUgYnJvd3Nlci4gU2VlOiAjMTI4NzJcblxuICAgIGlmIChpc0J1dHRvbiAmJiAocHJvcHMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy52YWx1ZSA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSk7IC8vIERvIG5vdCBhc3NpZ24gdmFsdWUgaWYgaXQgaXMgYWxyZWFkeSBzZXQuIFRoaXMgcHJldmVudHMgdXNlciB0ZXh0IGlucHV0XG4gICAgLy8gZnJvbSBiZWluZyBsb3N0IGR1cmluZyBTU1IgaHlkcmF0aW9uLlxuXG4gICAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgICAge1xuICAgICAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIHByb3BlcnR5IHNob3VsZCB1c2VcbiAgICAgICAgLy8gdGhlIHdyYXBwZXJTdGF0ZS5faW5pdGlhbFZhbHVlIHByb3BlcnR5LiBUaGlzIHVzZXM6XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgMS4gVGhlIHZhbHVlIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgICAgICAvLyAgIDIuIFRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgICAgIC8vICAgMy4gQW4gZW1wdHkgc3RyaW5nXG4gICAgICAgIGlmIChpbml0aWFsVmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgICAgICBub2RlLnZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgYXR0cmlidXRlIGlzIHN5bmNocm9uaXplZCB0byB0aGUgcHJvcGVydHksXG4gICAgICAvLyBzbyB3ZSBhc3NpZ24gZGVmYXVsdFZhbHVlIHRvIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgLy8gYXNzaWdubWVudCBzdGVwIGFib3ZlLlxuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgfVxuICB9IC8vIE5vcm1hbGx5LCB3ZSdkIGp1c3QgZG8gYG5vZGUuY2hlY2tlZCA9IG5vZGUuY2hlY2tlZGAgdXBvbiBpbml0aWFsIG1vdW50LCBsZXNzIHRoaXMgYnVnXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIHdvcmsgYXJvdW5kIGEgY2hyb21lIGJ1ZyB3aGVyZSBzZXR0aW5nIGRlZmF1bHRDaGVja2VkXG4gIC8vIHdpbGwgc29tZXRpbWVzIGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YgY2hlY2tlZCAoZXZlbiBhZnRlciBkZXRhY2htZW50KS5cbiAgLy8gUmVmZXJlbmNlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02MDg0MTZcbiAgLy8gV2UgbmVlZCB0byB0ZW1wb3JhcmlseSB1bnNldCBuYW1lIHRvIGF2b2lkIGRpc3J1cHRpbmcgcmFkaW8gYnV0dG9uIGdyb3Vwcy5cblxuXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lO1xuXG4gIGlmIChuYW1lICE9PSAnJykge1xuICAgIG5vZGUubmFtZSA9ICcnO1xuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIGJvdGggdGhlIGNoZWNrZWQgcHJvcGVydHkgYW5kXG4gICAgLy8gYXR0cmlidXRlIGFyZSBhc3NpZ25lZCBhdCB0aGUgc2FtZSB0aW1lIHVzaW5nIGRlZmF1bHRDaGVja2VkLiBUaGlzIHVzZXM6XG4gICAgLy9cbiAgICAvLyAgIDEuIFRoZSBjaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMi4gVGhlIGRlZmF1bHRDaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMy4gT3RoZXJ3aXNlLCBmYWxzZVxuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhbm9kZS5kZWZhdWx0Q2hlY2tlZDtcbiAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQ7XG4gIH1cblxuICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICBub2RlLm5hbWUgPSBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdXBkYXRlV3JhcHBlcihub2RlLCBwcm9wcyk7XG4gIHVwZGF0ZU5hbWVkQ291c2lucyhub2RlLCBwcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU5hbWVkQ291c2lucyhyb290Tm9kZSwgcHJvcHMpIHtcbiAgdmFyIG5hbWUgPSBwcm9wcy5uYW1lO1xuXG4gIGlmIChwcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5hbWUgIT0gbnVsbCkge1xuICAgIHZhciBxdWVyeVJvb3QgPSByb290Tm9kZTtcblxuICAgIHdoaWxlIChxdWVyeVJvb3QucGFyZW50Tm9kZSkge1xuICAgICAgcXVlcnlSb290ID0gcXVlcnlSb290LnBhcmVudE5vZGU7XG4gICAgfSAvLyBJZiBgcm9vdE5vZGUuZm9ybWAgd2FzIG5vbi1udWxsLCB0aGVuIHdlIGNvdWxkIHRyeSBgZm9ybS5lbGVtZW50c2AsXG4gICAgLy8gYnV0IHRoYXQgc29tZXRpbWVzIGJlaGF2ZXMgc3RyYW5nZWx5IGluIElFOC4gV2UgY291bGQgYWxzbyB0cnkgdXNpbmdcbiAgICAvLyBgZm9ybS5nZXRFbGVtZW50c0J5TmFtZWAsIGJ1dCB0aGF0IHdpbGwgb25seSByZXR1cm4gZGlyZWN0IGNoaWxkcmVuXG4gICAgLy8gYW5kIHdvbid0IGluY2x1ZGUgaW5wdXRzIHRoYXQgdXNlIHRoZSBIVE1MNSBgZm9ybT1gIGF0dHJpYnV0ZS4gU2luY2VcbiAgICAvLyB0aGUgaW5wdXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gYSBmb3JtLiBJdCBtaWdodCBub3QgZXZlbiBiZSBpbiB0aGVcbiAgICAvLyBkb2N1bWVudC4gTGV0J3MganVzdCB1c2UgdGhlIGxvY2FsIGBxdWVyeVNlbGVjdG9yQWxsYCB0byBlbnN1cmUgd2UgZG9uJ3RcbiAgICAvLyBtaXNzIGFueXRoaW5nLlxuXG5cbiAgICB2YXIgZ3JvdXAgPSBxdWVyeVJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbbmFtZT0nICsgSlNPTi5zdHJpbmdpZnkoJycgKyBuYW1lKSArICddW3R5cGU9XCJyYWRpb1wiXScpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG90aGVyTm9kZSA9IGdyb3VwW2ldO1xuXG4gICAgICBpZiAob3RoZXJOb2RlID09PSByb290Tm9kZSB8fCBvdGhlck5vZGUuZm9ybSAhPT0gcm9vdE5vZGUuZm9ybSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gVGhpcyB3aWxsIHRocm93IGlmIHJhZGlvIGJ1dHRvbnMgcmVuZGVyZWQgYnkgZGlmZmVyZW50IGNvcGllcyBvZiBSZWFjdFxuICAgICAgLy8gYW5kIHRoZSBzYW1lIG5hbWUgYXJlIHJlbmRlcmVkIGludG8gdGhlIHNhbWUgZm9ybSAoc2FtZSBhcyAjMTkzOSkuXG4gICAgICAvLyBUaGF0J3MgcHJvYmFibHkgb2theTsgd2UgZG9uJ3Qgc3VwcG9ydCBpdCBqdXN0IGFzIHdlIGRvbid0IHN1cHBvcnRcbiAgICAgIC8vIG1peGluZyBSZWFjdCByYWRpbyBidXR0b25zIHdpdGggbm9uLVJlYWN0IG9uZXMuXG5cblxuICAgICAgdmFyIG90aGVyUHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKG90aGVyTm9kZSk7XG5cbiAgICAgIGlmICghb3RoZXJQcm9wcykge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3RET01JbnB1dDogTWl4aW5nIFJlYWN0IGFuZCBub24tUmVhY3QgcmFkaW8gaW5wdXRzIHdpdGggdGhlIHNhbWUgYG5hbWVgIGlzIG5vdCBzdXBwb3J0ZWQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBXZSBuZWVkIHVwZGF0ZSB0aGUgdHJhY2tlZCB2YWx1ZSBvbiB0aGUgbmFtZWQgY291c2luIHNpbmNlIHRoZSB2YWx1ZVxuICAgICAgLy8gd2FzIGNoYW5nZWQgYnV0IHRoZSBpbnB1dCBzYXcgbm8gZXZlbnQgb3IgdmFsdWUgc2V0XG5cblxuICAgICAgdXBkYXRlVmFsdWVJZkNoYW5nZWQob3RoZXJOb2RlKTsgLy8gSWYgdGhpcyBpcyBhIGNvbnRyb2xsZWQgcmFkaW8gYnV0dG9uIGdyb3VwLCBmb3JjaW5nIHRoZSBpbnB1dCB0aGF0XG4gICAgICAvLyB3YXMgcHJldmlvdXNseSBjaGVja2VkIHRvIHVwZGF0ZSB3aWxsIGNhdXNlIGl0IHRvIGJlIGNvbWUgcmUtY2hlY2tlZFxuICAgICAgLy8gYXMgYXBwcm9wcmlhdGUuXG5cbiAgICAgIHVwZGF0ZVdyYXBwZXIob3RoZXJOb2RlLCBvdGhlclByb3BzKTtcbiAgICB9XG4gIH1cbn0gLy8gSW4gQ2hyb21lLCBhc3NpZ25pbmcgZGVmYXVsdFZhbHVlIHRvIGNlcnRhaW4gaW5wdXQgdHlwZXMgdHJpZ2dlcnMgaW5wdXQgdmFsaWRhdGlvbi5cbi8vIEZvciBudW1iZXIgaW5wdXRzLCB0aGUgZGlzcGxheSB2YWx1ZSBsb3NlcyB0cmFpbGluZyBkZWNpbWFsIHBvaW50cy4gRm9yIGVtYWlsIGlucHV0cyxcbi8vIENocm9tZSByYWlzZXMgXCJUaGUgc3BlY2lmaWVkIHZhbHVlIDx4PiBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIuXG4vL1xuLy8gSGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGRlZmF1bHRWYWx1ZSBoYXMgYWN0dWFsbHkgY2hhbmdlZCwgYXZvaWRpbmcgdGhlc2UgcHJvYmxlbXNcbi8vIHdoZW4gdGhlIHVzZXIgaXMgaW5wdXR0aW5nIHRleHRcbi8vXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNTNcblxuXG5mdW5jdGlvbiBzZXREZWZhdWx0VmFsdWUobm9kZSwgdHlwZSwgdmFsdWUpIHtcbiAgaWYgKCAvLyBGb2N1c2VkIG51bWJlciBpbnB1dHMgc3luY2hyb25pemUgb24gYmx1ci4gU2VlIENoYW5nZUV2ZW50UGx1Z2luLmpzXG4gIHR5cGUgIT09ICdudW1iZXInIHx8IGdldEFjdGl2ZUVsZW1lbnQobm9kZS5vd25lckRvY3VtZW50KSAhPT0gbm9kZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5kZWZhdWx0VmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9IGZhbHNlO1xudmFyIGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmxhdHRlbkNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBjb250ZW50ID0gJyc7IC8vIEZsYXR0ZW4gY2hpbGRyZW4uIFdlJ2xsIHdhcm4gaWYgdGhleSBhcmUgaW52YWxpZFxuICAvLyBkdXJpbmcgdmFsaWRhdGVQcm9wcygpIHdoaWNoIHJ1bnMgZm9yIGh5ZHJhdGlvbiB0b28uXG4gIC8vIE5vdGUgdGhhdCB0aGlzIHdvdWxkIHRocm93IG9uIG5vbi1lbGVtZW50IG9iamVjdHMuXG4gIC8vIEVsZW1lbnRzIGFyZSBzdHJpbmdpZmllZCAod2hpY2ggaXMgbm9ybWFsbHkgaXJyZWxldmFudFxuICAvLyBidXQgbWF0dGVycyBmb3IgPGZidD4pLlxuXG4gIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIGlmIChjaGlsZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGVudCArPSBjaGlsZDsgLy8gTm90ZTogd2UgZG9uJ3Qgd2FybiBhYm91dCBpbnZhbGlkIGNoaWxkcmVuIGhlcmUuXG4gICAgLy8gSW5zdGVhZCwgdGhpcyBpcyBkb25lIHNlcGFyYXRlbHkgYmVsb3cgc28gdGhhdFxuICAgIC8vIGl0IGhhcHBlbnMgZHVyaW5nIHRoZSBoeWRyYXRpb24gY29kZSBwYXRoIHRvby5cbiAgfSk7XG4gIHJldHVybiBjb250ZW50O1xufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxvcHRpb24+IGhvc3QgY29tcG9uZW50IHRoYXQgd2FybnMgd2hlbiBgc2VsZWN0ZWRgIGlzIHNldC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAge1xuICAgIC8vIFRoaXMgbWlycm9ycyB0aGUgY29kZSBwYXRoIGFib3ZlLCBidXQgcnVucyBmb3IgaHlkcmF0aW9uIHRvby5cbiAgICAvLyBXYXJuIGFib3V0IGludmFsaWQgY2hpbGRyZW4gaGVyZSBzbyB0aGF0IGNsaWVudCBhbmQgaHlkcmF0aW9uIGFyZSBjb25zaXN0ZW50LlxuICAgIC8vIFRPRE86IHRoaXMgc2VlbXMgbGlrZSBpdCBjb3VsZCBjYXVzZSBhIERFVi1vbmx5IHRocm93IGZvciBoeWRyYXRpb25cbiAgICAvLyBpZiBjaGlsZHJlbiBjb250YWlucyBhIG5vbi1lbGVtZW50IG9iamVjdC4gV2Ugc2hvdWxkIHRyeSB0byBhdm9pZCB0aGF0LlxuICAgIGlmICh0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdvYmplY3QnICYmIHByb3BzLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZC50eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkV2FybkludmFsaWRDaGlsZCkge1xuICAgICAgICAgIGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ09ubHkgc3RyaW5ncyBhbmQgbnVtYmVycyBhcmUgc3VwcG9ydGVkIGFzIDxvcHRpb24+IGNoaWxkcmVuLicpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IC8vIFRPRE86IFJlbW92ZSBzdXBwb3J0IGZvciBgc2VsZWN0ZWRgIGluIDxvcHRpb24+LlxuXG5cbiAgICBpZiAocHJvcHMuc2VsZWN0ZWQgIT0gbnVsbCAmJiAhZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24pIHtcbiAgICAgIGVycm9yKCdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgb24gPHNlbGVjdD4gaW5zdGVhZCBvZiAnICsgJ3NldHRpbmcgYHNlbGVjdGVkYCBvbiA8b3B0aW9uPi4nKTtcblxuICAgICAgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIHZhbHVlPVwiXCIgc2hvdWxkIG1ha2UgYSB2YWx1ZSBhdHRyaWJ1dGUgKCM2MjE5KVxuICBpZiAocHJvcHMudmFsdWUgIT0gbnVsbCkge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHRvU3RyaW5nKGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHtcbiAgICBjaGlsZHJlbjogdW5kZWZpbmVkXG4gIH0sIHByb3BzKTtcblxuICB2YXIgY29udGVudCA9IGZsYXR0ZW5DaGlsZHJlbihwcm9wcy5jaGlsZHJlbik7XG5cbiAgaWYgKGNvbnRlbnQpIHtcbiAgICBob3N0UHJvcHMuY2hpbGRyZW4gPSBjb250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cblxudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxO1xuXG57XG4gIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG5cbiAgaWYgKG93bmVyTmFtZSkge1xuICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgdmFsdWVQcm9wTmFtZXMgPSBbJ3ZhbHVlJywgJ2RlZmF1bHRWYWx1ZSddO1xuLyoqXG4gKiBWYWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqL1xuXG5mdW5jdGlvbiBjaGVja1NlbGVjdFByb3BUeXBlcyhwcm9wcykge1xuICB7XG4gICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygnc2VsZWN0JywgcHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZVByb3BOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3BOYW1lID0gdmFsdWVQcm9wTmFtZXNbaV07XG5cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHByb3BzW3Byb3BOYW1lXSk7XG5cbiAgICAgIGlmIChwcm9wcy5tdWx0aXBsZSAmJiAhaXNBcnJheSkge1xuICAgICAgICBlcnJvcignVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGFuIGFycmF5IGlmICcgKyAnYG11bHRpcGxlYCBpcyB0cnVlLiVzJywgcHJvcE5hbWUsIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb3BzLm11bHRpcGxlICYmIGlzQXJyYXkpIHtcbiAgICAgICAgZXJyb3IoJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhIHNjYWxhciAnICsgJ3ZhbHVlIGlmIGBtdWx0aXBsZWAgaXMgZmFsc2UuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zKG5vZGUsIG11bHRpcGxlLCBwcm9wVmFsdWUsIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICB2YXIgb3B0aW9ucyA9IG5vZGUub3B0aW9ucztcblxuICBpZiAobXVsdGlwbGUpIHtcbiAgICB2YXIgc2VsZWN0ZWRWYWx1ZXMgPSBwcm9wVmFsdWU7XG4gICAgdmFyIHNlbGVjdGVkVmFsdWUgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIFByZWZpeCB0byBhdm9pZCBjaGFvcyB3aXRoIHNwZWNpYWwga2V5cy5cbiAgICAgIHNlbGVjdGVkVmFsdWVbJyQnICsgc2VsZWN0ZWRWYWx1ZXNbaV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgb3B0aW9ucy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBzZWxlY3RlZCA9IHNlbGVjdGVkVmFsdWUuaGFzT3duUHJvcGVydHkoJyQnICsgb3B0aW9uc1tfaV0udmFsdWUpO1xuXG4gICAgICBpZiAob3B0aW9uc1tfaV0uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbX2ldLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxlY3RlZCAmJiBzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uc1tfaV0uZGVmYXVsdFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHNldCBgc2VsZWN0LnZhbHVlYCBhcyBleGFjdCBiZWhhdmlvciBpc24ndCBjb25zaXN0ZW50IGFjcm9zcyBhbGxcbiAgICAvLyBicm93c2VycyBmb3IgYWxsIGNhc2VzLlxuICAgIHZhciBfc2VsZWN0ZWRWYWx1ZSA9IHRvU3RyaW5nKGdldFRvU3RyaW5nVmFsdWUocHJvcFZhbHVlKSk7XG5cbiAgICB2YXIgZGVmYXVsdFNlbGVjdGVkID0gbnVsbDtcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG9wdGlvbnMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgaWYgKG9wdGlvbnNbX2kyXS52YWx1ZSA9PT0gX3NlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uc1tfaTJdLnNlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICAgICAgb3B0aW9uc1tfaTJdLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0U2VsZWN0ZWQgPT09IG51bGwgJiYgIW9wdGlvbnNbX2kyXS5kaXNhYmxlZCkge1xuICAgICAgICBkZWZhdWx0U2VsZWN0ZWQgPSBvcHRpb25zW19pMl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRTZWxlY3RlZCAhPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFNlbGVjdGVkLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogSW1wbGVtZW50cyBhIDxzZWxlY3Q+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIG9wdGlvbmFsbHkgc2V0dGluZyB0aGVcbiAqIHByb3BzIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLiBJZiBgbXVsdGlwbGVgIGlzIGZhbHNlLCB0aGUgcHJvcCBtdXN0IGJlIGFcbiAqIHN0cmluZ2FibGUuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgdGhlIHByb3AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdhYmxlcy5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlXG4gKiBzZWxlY3RlZCBvcHRpb24gd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gKlxuICogSWYgaXQgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgb3B0aW9ucyB3aWxsIG5vdFxuICogdXBkYXRlIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9ucy4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBvcHRpb25zIHRvIHVwZGF0ZS5cbiAqXG4gKiBJZiBgZGVmYXVsdFZhbHVlYCBpcyBwcm92aWRlZCwgYW55IG9wdGlvbnMgd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzIHdpbGwgYmVcbiAqIHNlbGVjdGVkLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgcmV0dXJuIF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgdmFsdWU6IHVuZGVmaW5lZFxuICB9KTtcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIGNoZWNrU2VsZWN0UHJvcFR5cGVzKHByb3BzKTtcbiAgfVxuXG4gIG5vZGUuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICB3YXNNdWx0aXBsZTogISFwcm9wcy5tdWx0aXBsZVxuICB9O1xuXG4gIHtcbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEpIHtcbiAgICAgIGVycm9yKCdTZWxlY3QgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHNlbGVjdCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJyk7XG5cbiAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIG5vZGUubXVsdGlwbGUgPSAhIXByb3BzLm11bHRpcGxlO1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMuZGVmYXVsdFZhbHVlLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gcG9zdFVwZGF0ZVdyYXBwZXIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgd2FzTXVsdGlwbGUgPSBub2RlLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7XG4gIG5vZGUuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZSA9ICEhcHJvcHMubXVsdGlwbGU7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKHdhc011bHRpcGxlICE9PSAhIXByb3BzLm11bHRpcGxlKSB7XG4gICAgLy8gRm9yIHNpbXBsaWNpdHksIHJlYXBwbHkgYGRlZmF1bHRWYWx1ZWAgaWYgYG11bHRpcGxlYCBpcyB0b2dnbGVkLlxuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5kZWZhdWx0VmFsdWUsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXZlcnQgdGhlIHNlbGVjdCBiYWNrIHRvIGl0cyBkZWZhdWx0IHVuc2VsZWN0ZWQgc3RhdGUuXG4gICAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLm11bHRpcGxlID8gW10gOiAnJywgZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gZmFsc2U7XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDx0ZXh0YXJlYT4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyBgdmFsdWVgLCBhbmRcbiAqIGBkZWZhdWx0VmFsdWVgLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgdHJhZGl0aW9uYWwgRE9NIEFQSSBiZWNhdXNlIHZhbHVlIGlzXG4gKiB1c3VhbGx5IHNldCBhcyBQQ0RBVEEgY2hpbGRyZW4uXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgYWZmZWN0IHRoZVxuICogdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGxcbiAqIG5vdCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBlbXB0eSB2YWx1ZSwgdGhlIHByb3BcbiAqIGBkZWZhdWx0VmFsdWVgIGlmIHNwZWNpZmllZCwgb3IgdGhlIGNoaWxkcmVuIGNvbnRlbnQgKGRlcHJlY2F0ZWQpLlxuICovXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAgaWYgKCEocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugb24gPHRleHRhcmVhPi5cIiApO1xuICAgIH1cbiAgfSAvLyBBbHdheXMgc2V0IGNoaWxkcmVuIHRvIHRoZSBzYW1lIHRoaW5nLiBJbiBJRTksIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugd2lsbFxuICAvLyBnZXQgcmVzZXQgaWYgYHRleHRDb250ZW50YCBpcyBtdXRhdGVkLiAgV2UgY291bGQgYWRkIGEgY2hlY2sgaW4gc2V0VGV4dENvbnRlbnRcbiAgLy8gdG8gb25seSBzZXQgdGhlIHZhbHVlIGlmL3doZW4gdGhlIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgbm9kZSB2YWx1ZSAod2hpY2ggd291bGRcbiAgLy8gY29tcGxldGVseSBzb2x2ZSB0aGlzIElFOSBidWcpLCBidXQgU2ViYXN0aWFuK1NvcGhpZSBzZWVtZWQgdG8gbGlrZSB0aGlzXG4gIC8vIHNvbHV0aW9uLiBUaGUgdmFsdWUgY2FuIGJlIGEgYm9vbGVhbiBvciBvYmplY3Qgc28gdGhhdCdzIHdoeSBpdCdzIGZvcmNlZFxuICAvLyB0byBiZSBhIHN0cmluZy5cblxuXG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgY2hpbGRyZW46IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpXG4gIH0pO1xuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCd0ZXh0YXJlYScsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsRGVmYXVsdFZhbCkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGEgdGV4dGFyZWEgd2l0aCBib3RoIHZhbHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuICcgKyAnVGV4dGFyZWEgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHRleHRhcmVhICcgKyAnYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnKTtcblxuICAgICAgZGlkV2FyblZhbERlZmF1bHRWYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbml0aWFsVmFsdWUgPSBwcm9wcy52YWx1ZTsgLy8gT25seSBib3RoZXIgZmV0Y2hpbmcgZGVmYXVsdCB2YWx1ZSBpZiB3ZSdyZSBnb2luZyB0byB1c2UgaXRcblxuICBpZiAoaW5pdGlhbFZhbHVlID09IG51bGwpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKGNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgZXJyb3IoJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBpbnN0ZWFkIG9mIHNldHRpbmcgJyArICdjaGlsZHJlbiBvbiA8dGV4dGFyZWE+LicpO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmICghKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIklmIHlvdSBzdXBwbHkgYGRlZmF1bHRWYWx1ZWAgb24gYSA8dGV4dGFyZWE+LCBkbyBub3QgcGFzcyBjaGlsZHJlbi5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgIGlmICghKGNoaWxkcmVuLmxlbmd0aCA8PSAxKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCI8dGV4dGFyZWE+IGNhbiBvbmx5IGhhdmUgYXQgbW9zdCBvbmUgY2hpbGQuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdFZhbHVlID0gY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBpbml0aWFsVmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbFZhbHVlOiBnZXRUb1N0cmluZ1ZhbHVlKGluaXRpYWxWYWx1ZSlcbiAgfTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBwZXIkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB2YWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpO1xuICB2YXIgZGVmYXVsdFZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy5kZWZhdWx0VmFsdWUpO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgLy8gQ2FzdCBgdmFsdWVgIHRvIGEgc3RyaW5nIHRvIGVuc3VyZSB0aGUgdmFsdWUgaXMgc2V0IGNvcnJlY3RseS4gV2hpbGVcbiAgICAvLyBicm93c2VycyB0eXBpY2FsbHkgZG8gdGhpcyBhcyBuZWNlc3NhcnksIGpzZG9tIGRvZXNuJ3QuXG4gICAgdmFyIG5ld1ZhbHVlID0gdG9TdHJpbmcodmFsdWUpOyAvLyBUbyBhdm9pZCBzaWRlIGVmZmVjdHMgKHN1Y2ggYXMgbG9zaW5nIHRleHQgc2VsZWN0aW9uKSwgb25seSBzZXQgdmFsdWUgaWYgY2hhbmdlZFxuXG4gICAgaWYgKG5ld1ZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICBub2RlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSA9PSBudWxsICYmIG5vZGUuZGVmYXVsdFZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKGRlZmF1bHRWYWx1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7IC8vIFRoaXMgaXMgaW4gcG9zdE1vdW50IGJlY2F1c2Ugd2UgbmVlZCBhY2Nlc3MgdG8gdGhlIERPTSBub2RlLCB3aGljaCBpcyBub3RcbiAgLy8gYXZhaWxhYmxlIHVudGlsIGFmdGVyIHRoZSBjb21wb25lbnQgaGFzIG1vdW50ZWQuXG5cbiAgdmFyIHRleHRDb250ZW50ID0gbm9kZS50ZXh0Q29udGVudDsgLy8gT25seSBzZXQgbm9kZS52YWx1ZSBpZiB0ZXh0Q29udGVudCBpcyBlcXVhbCB0byB0aGUgZXhwZWN0ZWRcbiAgLy8gaW5pdGlhbCB2YWx1ZS4gSW4gSUUxMC9JRTExIHRoZXJlIGlzIGEgYnVnIHdoZXJlIHRoZSBwbGFjZWhvbGRlciBhdHRyaWJ1dGVcbiAgLy8gd2lsbCBwb3B1bGF0ZSB0ZXh0Q29udGVudCBhcyB3ZWxsLlxuICAvLyBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL2lzc3Vlcy8xMDE1MjUvXG5cbiAgaWYgKHRleHRDb250ZW50ID09PSBub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKSB7XG4gICAgaWYgKHRleHRDb250ZW50ICE9PSAnJyAmJiB0ZXh0Q29udGVudCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRleHRDb250ZW50O1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIERPTSBjb21wb25lbnQgaXMgc3RpbGwgbW91bnRlZDsgdXBkYXRlXG4gIHVwZGF0ZVdyYXBwZXIkMShlbGVtZW50LCBwcm9wcyk7XG59XG5cbnZhciBIVE1MX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcbnZhciBNQVRIX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJztcbnZhciBTVkdfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbnZhciBOYW1lc3BhY2VzID0ge1xuICBodG1sOiBIVE1MX05BTUVTUEFDRSxcbiAgbWF0aG1sOiBNQVRIX05BTUVTUEFDRSxcbiAgc3ZnOiBTVkdfTkFNRVNQQUNFXG59OyAvLyBBc3N1bWVzIHRoZXJlIGlzIG5vIHBhcmVudCBuYW1lc3BhY2UuXG5cbmZ1bmN0aW9uIGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3N2Zyc6XG4gICAgICByZXR1cm4gU1ZHX05BTUVTUEFDRTtcblxuICAgIGNhc2UgJ21hdGgnOlxuICAgICAgcmV0dXJuIE1BVEhfTkFNRVNQQUNFO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBIVE1MX05BTUVTUEFDRTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0Q2hpbGROYW1lc3BhY2UocGFyZW50TmFtZXNwYWNlLCB0eXBlKSB7XG4gIGlmIChwYXJlbnROYW1lc3BhY2UgPT0gbnVsbCB8fCBwYXJlbnROYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgLy8gTm8gKG9yIGRlZmF1bHQpIHBhcmVudCBuYW1lc3BhY2U6IHBvdGVudGlhbCBlbnRyeSBwb2ludC5cbiAgICByZXR1cm4gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpO1xuICB9XG5cbiAgaWYgKHBhcmVudE5hbWVzcGFjZSA9PT0gU1ZHX05BTUVTUEFDRSAmJiB0eXBlID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyBXZSdyZSBsZWF2aW5nIFNWRy5cbiAgICByZXR1cm4gSFRNTF9OQU1FU1BBQ0U7XG4gIH0gLy8gQnkgZGVmYXVsdCwgcGFzcyBuYW1lc3BhY2UgYmVsb3cuXG5cblxuICByZXR1cm4gcGFyZW50TmFtZXNwYWNlO1xufVxuXG4vKiBnbG9iYWxzIE1TQXBwICovXG5cbi8qKlxuICogQ3JlYXRlIGEgZnVuY3Rpb24gd2hpY2ggaGFzICd1bnNhZmUnIHByaXZpbGVnZXMgKHJlcXVpcmVkIGJ5IHdpbmRvd3M4IGFwcHMpXG4gKi9cbnZhciBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgaWYgKHR5cGVvZiBNU0FwcCAhPT0gJ3VuZGVmaW5lZCcgJiYgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgIE1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jO1xuICB9XG59O1xuXG52YXIgcmV1c2FibGVTVkdDb250YWluZXI7XG4vKipcbiAqIFNldCB0aGUgaW5uZXJIVE1MIHByb3BlcnR5IG9mIGEgbm9kZVxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEBpbnRlcm5hbFxuICovXG5cbnZhciBzZXRJbm5lckhUTUwgPSBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uIChub2RlLCBodG1sKSB7XG4gIGlmIChub2RlLm5hbWVzcGFjZVVSSSA9PT0gTmFtZXNwYWNlcy5zdmcpIHtcblxuICAgIGlmICghKCdpbm5lckhUTUwnIGluIG5vZGUpKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGlubmVySFRNTCBmb3IgU1ZHIG5vZGVzLCBzbyBpbnN0ZWFkIHdlIGluamVjdCB0aGVcbiAgICAgIC8vIG5ldyBtYXJrdXAgaW4gYSB0ZW1wIG5vZGUgYW5kIHRoZW4gbW92ZSB0aGUgY2hpbGQgbm9kZXMgYWNyb3NzIGludG9cbiAgICAgIC8vIHRoZSB0YXJnZXQgbm9kZVxuICAgICAgcmV1c2FibGVTVkdDb250YWluZXIgPSByZXVzYWJsZVNWR0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHJldXNhYmxlU1ZHQ29udGFpbmVyLmlubmVySFRNTCA9ICc8c3ZnPicgKyBodG1sLnZhbHVlT2YoKS50b1N0cmluZygpICsgJzwvc3ZnPic7XG4gICAgICB2YXIgc3ZnTm9kZSA9IHJldXNhYmxlU1ZHQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG5cbiAgICAgIHdoaWxlIChub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChub2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoc3ZnTm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoc3ZnTm9kZS5maXJzdENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG5vZGUuaW5uZXJIVE1MID0gaHRtbDtcbn0pO1xuXG4vKipcbiAqIEhUTUwgbm9kZVR5cGUgdmFsdWVzIHRoYXQgcmVwcmVzZW50IHRoZSB0eXBlIG9mIHRoZSBub2RlXG4gKi9cbnZhciBFTEVNRU5UX05PREUgPSAxO1xudmFyIFRFWFRfTk9ERSA9IDM7XG52YXIgQ09NTUVOVF9OT0RFID0gODtcbnZhciBET0NVTUVOVF9OT0RFID0gOTtcbnZhciBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTE7XG5cbi8qKlxuICogU2V0IHRoZSB0ZXh0Q29udGVudCBwcm9wZXJ0eSBvZiBhIG5vZGUuIEZvciB0ZXh0IHVwZGF0ZXMsIGl0J3MgZmFzdGVyXG4gKiB0byBzZXQgdGhlIGBub2RlVmFsdWVgIG9mIHRoZSBUZXh0IG5vZGUgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZ1xuICogYC50ZXh0Q29udGVudGAgd2hpY2ggd2lsbCByZW1vdmUgdGhlIGV4aXN0aW5nIG5vZGUgYW5kIGNyZWF0ZSBhIG5ldyBvbmUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQGludGVybmFsXG4gKi9cblxudmFyIHNldFRleHRDb250ZW50ID0gZnVuY3Rpb24gKG5vZGUsIHRleHQpIHtcbiAgaWYgKHRleHQpIHtcbiAgICB2YXIgZmlyc3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblxuICAgIGlmIChmaXJzdENoaWxkICYmIGZpcnN0Q2hpbGQgPT09IG5vZGUubGFzdENoaWxkICYmIGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSB0ZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufTtcblxuLy8gTGlzdCBkZXJpdmVkIGZyb20gR2Vja28gc291cmNlIGNvZGU6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrby1kZXYvYmxvYi80ZTYzOGVmYzcxL2xheW91dC9zdHlsZS90ZXN0L3Byb3BlcnR5X2RhdGFiYXNlLmpzXG52YXIgc2hvcnRoYW5kVG9Mb25naGFuZCA9IHtcbiAgYW5pbWF0aW9uOiBbJ2FuaW1hdGlvbkRlbGF5JywgJ2FuaW1hdGlvbkRpcmVjdGlvbicsICdhbmltYXRpb25EdXJhdGlvbicsICdhbmltYXRpb25GaWxsTW9kZScsICdhbmltYXRpb25JdGVyYXRpb25Db3VudCcsICdhbmltYXRpb25OYW1lJywgJ2FuaW1hdGlvblBsYXlTdGF0ZScsICdhbmltYXRpb25UaW1pbmdGdW5jdGlvbiddLFxuICBiYWNrZ3JvdW5kOiBbJ2JhY2tncm91bmRBdHRhY2htZW50JywgJ2JhY2tncm91bmRDbGlwJywgJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kSW1hZ2UnLCAnYmFja2dyb3VuZE9yaWdpbicsICdiYWNrZ3JvdW5kUG9zaXRpb25YJywgJ2JhY2tncm91bmRQb3NpdGlvblknLCAnYmFja2dyb3VuZFJlcGVhdCcsICdiYWNrZ3JvdW5kU2l6ZSddLFxuICBiYWNrZ3JvdW5kUG9zaXRpb246IFsnYmFja2dyb3VuZFBvc2l0aW9uWCcsICdiYWNrZ3JvdW5kUG9zaXRpb25ZJ10sXG4gIGJvcmRlcjogWydib3JkZXJCb3R0b21Db2xvcicsICdib3JkZXJCb3R0b21TdHlsZScsICdib3JkZXJCb3R0b21XaWR0aCcsICdib3JkZXJJbWFnZU91dHNldCcsICdib3JkZXJJbWFnZVJlcGVhdCcsICdib3JkZXJJbWFnZVNsaWNlJywgJ2JvcmRlckltYWdlU291cmNlJywgJ2JvcmRlckltYWdlV2lkdGgnLCAnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclJpZ2h0V2lkdGgnLCAnYm9yZGVyVG9wQ29sb3InLCAnYm9yZGVyVG9wU3R5bGUnLCAnYm9yZGVyVG9wV2lkdGgnXSxcbiAgYm9yZGVyQmxvY2tFbmQ6IFsnYm9yZGVyQmxvY2tFbmRDb2xvcicsICdib3JkZXJCbG9ja0VuZFN0eWxlJywgJ2JvcmRlckJsb2NrRW5kV2lkdGgnXSxcbiAgYm9yZGVyQmxvY2tTdGFydDogWydib3JkZXJCbG9ja1N0YXJ0Q29sb3InLCAnYm9yZGVyQmxvY2tTdGFydFN0eWxlJywgJ2JvcmRlckJsb2NrU3RhcnRXaWR0aCddLFxuICBib3JkZXJCb3R0b206IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyQm90dG9tV2lkdGgnXSxcbiAgYm9yZGVyQ29sb3I6IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyVG9wQ29sb3InXSxcbiAgYm9yZGVySW1hZ2U6IFsnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VSZXBlYXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVNvdXJjZScsICdib3JkZXJJbWFnZVdpZHRoJ10sXG4gIGJvcmRlcklubGluZUVuZDogWydib3JkZXJJbmxpbmVFbmRDb2xvcicsICdib3JkZXJJbmxpbmVFbmRTdHlsZScsICdib3JkZXJJbmxpbmVFbmRXaWR0aCddLFxuICBib3JkZXJJbmxpbmVTdGFydDogWydib3JkZXJJbmxpbmVTdGFydENvbG9yJywgJ2JvcmRlcklubGluZVN0YXJ0U3R5bGUnLCAnYm9yZGVySW5saW5lU3RhcnRXaWR0aCddLFxuICBib3JkZXJMZWZ0OiBbJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyTGVmdFdpZHRoJ10sXG4gIGJvcmRlclJhZGl1czogWydib3JkZXJCb3R0b21MZWZ0UmFkaXVzJywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJywgJ2JvcmRlclRvcExlZnRSYWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnXSxcbiAgYm9yZGVyUmlnaHQ6IFsnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclJpZ2h0V2lkdGgnXSxcbiAgYm9yZGVyU3R5bGU6IFsnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlclJpZ2h0U3R5bGUnLCAnYm9yZGVyVG9wU3R5bGUnXSxcbiAgYm9yZGVyVG9wOiBbJ2JvcmRlclRvcENvbG9yJywgJ2JvcmRlclRvcFN0eWxlJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGJvcmRlcldpZHRoOiBbJ2JvcmRlckJvdHRvbVdpZHRoJywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdpZHRoJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGNvbHVtblJ1bGU6IFsnY29sdW1uUnVsZUNvbG9yJywgJ2NvbHVtblJ1bGVTdHlsZScsICdjb2x1bW5SdWxlV2lkdGgnXSxcbiAgY29sdW1uczogWydjb2x1bW5Db3VudCcsICdjb2x1bW5XaWR0aCddLFxuICBmbGV4OiBbJ2ZsZXhCYXNpcycsICdmbGV4R3JvdycsICdmbGV4U2hyaW5rJ10sXG4gIGZsZXhGbG93OiBbJ2ZsZXhEaXJlY3Rpb24nLCAnZmxleFdyYXAnXSxcbiAgZm9udDogWydmb250RmFtaWx5JywgJ2ZvbnRGZWF0dXJlU2V0dGluZ3MnLCAnZm9udEtlcm5pbmcnLCAnZm9udExhbmd1YWdlT3ZlcnJpZGUnLCAnZm9udFNpemUnLCAnZm9udFNpemVBZGp1c3QnLCAnZm9udFN0cmV0Y2gnLCAnZm9udFN0eWxlJywgJ2ZvbnRWYXJpYW50JywgJ2ZvbnRWYXJpYW50QWx0ZXJuYXRlcycsICdmb250VmFyaWFudENhcHMnLCAnZm9udFZhcmlhbnRFYXN0QXNpYW4nLCAnZm9udFZhcmlhbnRMaWdhdHVyZXMnLCAnZm9udFZhcmlhbnROdW1lcmljJywgJ2ZvbnRWYXJpYW50UG9zaXRpb24nLCAnZm9udFdlaWdodCcsICdsaW5lSGVpZ2h0J10sXG4gIGZvbnRWYXJpYW50OiBbJ2ZvbnRWYXJpYW50QWx0ZXJuYXRlcycsICdmb250VmFyaWFudENhcHMnLCAnZm9udFZhcmlhbnRFYXN0QXNpYW4nLCAnZm9udFZhcmlhbnRMaWdhdHVyZXMnLCAnZm9udFZhcmlhbnROdW1lcmljJywgJ2ZvbnRWYXJpYW50UG9zaXRpb24nXSxcbiAgZ2FwOiBbJ2NvbHVtbkdhcCcsICdyb3dHYXAnXSxcbiAgZ3JpZDogWydncmlkQXV0b0NvbHVtbnMnLCAnZ3JpZEF1dG9GbG93JywgJ2dyaWRBdXRvUm93cycsICdncmlkVGVtcGxhdGVBcmVhcycsICdncmlkVGVtcGxhdGVDb2x1bW5zJywgJ2dyaWRUZW1wbGF0ZVJvd3MnXSxcbiAgZ3JpZEFyZWE6IFsnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3RhcnQnLCAnZ3JpZFJvd0VuZCcsICdncmlkUm93U3RhcnQnXSxcbiAgZ3JpZENvbHVtbjogWydncmlkQ29sdW1uRW5kJywgJ2dyaWRDb2x1bW5TdGFydCddLFxuICBncmlkQ29sdW1uR2FwOiBbJ2NvbHVtbkdhcCddLFxuICBncmlkR2FwOiBbJ2NvbHVtbkdhcCcsICdyb3dHYXAnXSxcbiAgZ3JpZFJvdzogWydncmlkUm93RW5kJywgJ2dyaWRSb3dTdGFydCddLFxuICBncmlkUm93R2FwOiBbJ3Jvd0dhcCddLFxuICBncmlkVGVtcGxhdGU6IFsnZ3JpZFRlbXBsYXRlQXJlYXMnLCAnZ3JpZFRlbXBsYXRlQ29sdW1ucycsICdncmlkVGVtcGxhdGVSb3dzJ10sXG4gIGxpc3RTdHlsZTogWydsaXN0U3R5bGVJbWFnZScsICdsaXN0U3R5bGVQb3NpdGlvbicsICdsaXN0U3R5bGVUeXBlJ10sXG4gIG1hcmdpbjogWydtYXJnaW5Cb3R0b20nLCAnbWFyZ2luTGVmdCcsICdtYXJnaW5SaWdodCcsICdtYXJnaW5Ub3AnXSxcbiAgbWFya2VyOiBbJ21hcmtlckVuZCcsICdtYXJrZXJNaWQnLCAnbWFya2VyU3RhcnQnXSxcbiAgbWFzazogWydtYXNrQ2xpcCcsICdtYXNrQ29tcG9zaXRlJywgJ21hc2tJbWFnZScsICdtYXNrTW9kZScsICdtYXNrT3JpZ2luJywgJ21hc2tQb3NpdGlvblgnLCAnbWFza1Bvc2l0aW9uWScsICdtYXNrUmVwZWF0JywgJ21hc2tTaXplJ10sXG4gIG1hc2tQb3NpdGlvbjogWydtYXNrUG9zaXRpb25YJywgJ21hc2tQb3NpdGlvblknXSxcbiAgb3V0bGluZTogWydvdXRsaW5lQ29sb3InLCAnb3V0bGluZVN0eWxlJywgJ291dGxpbmVXaWR0aCddLFxuICBvdmVyZmxvdzogWydvdmVyZmxvd1gnLCAnb3ZlcmZsb3dZJ10sXG4gIHBhZGRpbmc6IFsncGFkZGluZ0JvdHRvbScsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nUmlnaHQnLCAncGFkZGluZ1RvcCddLFxuICBwbGFjZUNvbnRlbnQ6IFsnYWxpZ25Db250ZW50JywgJ2p1c3RpZnlDb250ZW50J10sXG4gIHBsYWNlSXRlbXM6IFsnYWxpZ25JdGVtcycsICdqdXN0aWZ5SXRlbXMnXSxcbiAgcGxhY2VTZWxmOiBbJ2FsaWduU2VsZicsICdqdXN0aWZ5U2VsZiddLFxuICB0ZXh0RGVjb3JhdGlvbjogWyd0ZXh0RGVjb3JhdGlvbkNvbG9yJywgJ3RleHREZWNvcmF0aW9uTGluZScsICd0ZXh0RGVjb3JhdGlvblN0eWxlJ10sXG4gIHRleHRFbXBoYXNpczogWyd0ZXh0RW1waGFzaXNDb2xvcicsICd0ZXh0RW1waGFzaXNTdHlsZSddLFxuICB0cmFuc2l0aW9uOiBbJ3RyYW5zaXRpb25EZWxheScsICd0cmFuc2l0aW9uRHVyYXRpb24nLCAndHJhbnNpdGlvblByb3BlcnR5JywgJ3RyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiddLFxuICB3b3JkV3JhcDogWydvdmVyZmxvd1dyYXAnXVxufTtcblxuLyoqXG4gKiBDU1MgcHJvcGVydGllcyB3aGljaCBhY2NlcHQgbnVtYmVycyBidXQgYXJlIG5vdCBpbiB1bml0cyBvZiBcInB4XCIuXG4gKi9cbnZhciBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IHRydWUsXG4gIGJvcmRlckltYWdlU2xpY2U6IHRydWUsXG4gIGJvcmRlckltYWdlV2lkdGg6IHRydWUsXG4gIGJveEZsZXg6IHRydWUsXG4gIGJveEZsZXhHcm91cDogdHJ1ZSxcbiAgYm94T3JkaW5hbEdyb3VwOiB0cnVlLFxuICBjb2x1bW5Db3VudDogdHJ1ZSxcbiAgY29sdW1uczogdHJ1ZSxcbiAgZmxleDogdHJ1ZSxcbiAgZmxleEdyb3c6IHRydWUsXG4gIGZsZXhQb3NpdGl2ZTogdHJ1ZSxcbiAgZmxleFNocmluazogdHJ1ZSxcbiAgZmxleE5lZ2F0aXZlOiB0cnVlLFxuICBmbGV4T3JkZXI6IHRydWUsXG4gIGdyaWRBcmVhOiB0cnVlLFxuICBncmlkUm93OiB0cnVlLFxuICBncmlkUm93RW5kOiB0cnVlLFxuICBncmlkUm93U3BhbjogdHJ1ZSxcbiAgZ3JpZFJvd1N0YXJ0OiB0cnVlLFxuICBncmlkQ29sdW1uOiB0cnVlLFxuICBncmlkQ29sdW1uRW5kOiB0cnVlLFxuICBncmlkQ29sdW1uU3BhbjogdHJ1ZSxcbiAgZ3JpZENvbHVtblN0YXJ0OiB0cnVlLFxuICBmb250V2VpZ2h0OiB0cnVlLFxuICBsaW5lQ2xhbXA6IHRydWUsXG4gIGxpbmVIZWlnaHQ6IHRydWUsXG4gIG9wYWNpdHk6IHRydWUsXG4gIG9yZGVyOiB0cnVlLFxuICBvcnBoYW5zOiB0cnVlLFxuICB0YWJTaXplOiB0cnVlLFxuICB3aWRvd3M6IHRydWUsXG4gIHpJbmRleDogdHJ1ZSxcbiAgem9vbTogdHJ1ZSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogdHJ1ZSxcbiAgZmxvb2RPcGFjaXR5OiB0cnVlLFxuICBzdG9wT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaGFycmF5OiB0cnVlLFxuICBzdHJva2VEYXNob2Zmc2V0OiB0cnVlLFxuICBzdHJva2VNaXRlcmxpbWl0OiB0cnVlLFxuICBzdHJva2VPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VXaWR0aDogdHJ1ZVxufTtcbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCB2ZW5kb3Itc3BlY2lmaWMgcHJlZml4LCBlZzogV2Via2l0XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHN0eWxlIG5hbWUsIGVnOiB0cmFuc2l0aW9uRHVyYXRpb25cbiAqIEByZXR1cm4ge3N0cmluZ30gc3R5bGUgbmFtZSBwcmVmaXhlZCB3aXRoIGBwcmVmaXhgLCBwcm9wZXJseSBjYW1lbENhc2VkLCBlZzpcbiAqIFdlYmtpdFRyYW5zaXRpb25EdXJhdGlvblxuICovXG5cbmZ1bmN0aW9uIHByZWZpeEtleShwcmVmaXgsIGtleSkge1xuICByZXR1cm4gcHJlZml4ICsga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnN1YnN0cmluZygxKTtcbn1cbi8qKlxuICogU3VwcG9ydCBzdHlsZSBuYW1lcyB0aGF0IG1heSBjb21lIHBhc3NlZCBpbiBwcmVmaXhlZCBieSBhZGRpbmcgcGVybXV0YXRpb25zXG4gKiBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cblxuXG52YXIgcHJlZml4ZXMgPSBbJ1dlYmtpdCcsICdtcycsICdNb3onLCAnTyddOyAvLyBVc2luZyBPYmplY3Qua2V5cyBoZXJlLCBvciBlbHNlIHRoZSB2YW5pbGxhIGZvci1pbiBsb29wIG1ha2VzIElFOCBnbyBpbnRvIGFuXG4vLyBpbmZpbml0ZSBsb29wLCBiZWNhdXNlIGl0IGl0ZXJhdGVzIG92ZXIgdGhlIG5ld2x5IGFkZGVkIHByb3BzIHRvby5cblxuT2JqZWN0LmtleXMoaXNVbml0bGVzc051bWJlcikuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBwcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uIChwcmVmaXgpIHtcbiAgICBpc1VuaXRsZXNzTnVtYmVyW3ByZWZpeEtleShwcmVmaXgsIHByb3ApXSA9IGlzVW5pdGxlc3NOdW1iZXJbcHJvcF07XG4gIH0pO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIGludG8gdGhlIHByb3BlciBjc3Mgd3JpdGFibGUgdmFsdWUuIFRoZSBzdHlsZSBuYW1lIGBuYW1lYFxuICogc2hvdWxkIGJlIGxvZ2ljYWwgKG5vIGh5cGhlbnMpLCBhcyBzcGVjaWZpZWRcbiAqIGluIGBDU1NQcm9wZXJ0eS5pc1VuaXRsZXNzTnVtYmVyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBDU1MgcHJvcGVydHkgbmFtZSBzdWNoIGFzIGB0b3BNYXJnaW5gLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBDU1MgcHJvcGVydHkgdmFsdWUgc3VjaCBhcyBgMTBweGAuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgc3R5bGUgdmFsdWUgd2l0aCBkaW1lbnNpb25zIGFwcGxpZWQuXG4gKi9cblxuZnVuY3Rpb24gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShuYW1lLCB2YWx1ZSwgaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAvLyBOb3RlIHRoYXQgd2UndmUgcmVtb3ZlZCBlc2NhcGVUZXh0Rm9yQnJvd3NlcigpIGNhbGxzIGhlcmUgc2luY2UgdGhlXG4gIC8vIHdob2xlIHN0cmluZyB3aWxsIGJlIGVzY2FwZWQgd2hlbiB0aGUgYXR0cmlidXRlIGlzIGluamVjdGVkIGludG9cbiAgLy8gdGhlIG1hcmt1cC4gSWYgeW91IHByb3ZpZGUgdW5zYWZlIHVzZXIgZGF0YSBoZXJlIHRoZXkgY2FuIGluamVjdFxuICAvLyBhcmJpdHJhcnkgQ1NTIHdoaWNoIG1heSBiZSBwcm9ibGVtYXRpYyAoSSBjb3VsZG4ndCByZXBybyB0aGlzKTpcbiAgLy8gaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9YU1NfRmlsdGVyX0V2YXNpb25fQ2hlYXRfU2hlZXRcbiAgLy8gaHR0cDovL3d3dy50aGVzcGFubmVyLmNvLnVrLzIwMDcvMTEvMjYvdWx0aW1hdGUteHNzLWNzcy1pbmplY3Rpb24vXG4gIC8vIFRoaXMgaXMgbm90IGFuIFhTUyBob2xlIGJ1dCBpbnN0ZWFkIGEgcG90ZW50aWFsIENTUyBpbmplY3Rpb24gaXNzdWVcbiAgLy8gd2hpY2ggaGFzIGxlYWQgdG8gYSBncmVhdGVyIGRpc2N1c3Npb24gYWJvdXQgaG93IHdlJ3JlIGdvaW5nIHRvXG4gIC8vIHRydXN0IFVSTHMgbW92aW5nIGZvcndhcmQuIFNlZSAjMjExNTkwMVxuICB2YXIgaXNFbXB0eSA9IHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09ICcnO1xuXG4gIGlmIChpc0VtcHR5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKCFpc0N1c3RvbVByb3BlcnR5ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDAgJiYgIShpc1VuaXRsZXNzTnVtYmVyLmhhc093blByb3BlcnR5KG5hbWUpICYmIGlzVW5pdGxlc3NOdW1iZXJbbmFtZV0pKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JzsgLy8gUHJlc3VtZXMgaW1wbGljaXQgJ3B4JyBzdWZmaXggZm9yIHVuaXRsZXNzIG51bWJlcnNcbiAgfVxuXG4gIHJldHVybiAoJycgKyB2YWx1ZSkudHJpbSgpO1xufVxuXG52YXIgdXBwZXJjYXNlUGF0dGVybiA9IC8oW0EtWl0pL2c7XG52YXIgbXNQYXR0ZXJuID0gL15tcy0vO1xuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBDU1MgcHJvcGVydHkgbmFtZSwgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnYmFja2dyb3VuZENvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmQtY29sb3JcIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnTW96VHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbW96LXRyYW5zaXRpb25cIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnbXNUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tcy10cmFuc2l0aW9uXCJcbiAqXG4gKiBBcyBNb2Rlcm5penIgc3VnZ2VzdHMgKGh0dHA6Ly9tb2Rlcm5penIuY29tL2RvY3MvI3ByZWZpeGVkKSwgYW4gYG1zYCBwcmVmaXhcbiAqIGlzIGNvbnZlcnRlZCB0byBgLW1zLWAuXG4gKi9cblxuZnVuY3Rpb24gaHlwaGVuYXRlU3R5bGVOYW1lKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSh1cHBlcmNhc2VQYXR0ZXJuLCAnLSQxJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKG1zUGF0dGVybiwgJy1tcy0nKTtcbn1cblxudmFyIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgLy8gJ21zVHJhbnNmb3JtJyBpcyBjb3JyZWN0LCBidXQgdGhlIG90aGVyIHByZWZpeGVzIHNob3VsZCBiZSBjYXBpdGFsaXplZFxuICB2YXIgYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuID0gL14oPzp3ZWJraXR8bW96fG8pW0EtWl0vO1xuICB2YXIgbXNQYXR0ZXJuJDEgPSAvXi1tcy0vO1xuICB2YXIgaHlwaGVuUGF0dGVybiA9IC8tKC4pL2c7IC8vIHN0eWxlIHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvblxuXG4gIHZhciBiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4gPSAvO1xccyokLztcbiAgdmFyIHdhcm5lZFN0eWxlTmFtZXMgPSB7fTtcbiAgdmFyIHdhcm5lZFN0eWxlVmFsdWVzID0ge307XG4gIHZhciB3YXJuZWRGb3JOYU5WYWx1ZSA9IGZhbHNlO1xuICB2YXIgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9IGZhbHNlO1xuXG4gIHZhciBjYW1lbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKF8sIGNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Vuc3VwcG9ydGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JywgbmFtZSwgLy8gQXMgQW5kaSBTbWl0aCBzdWdnZXN0c1xuICAgIC8vIChodHRwOi8vd3d3LmFuZGlzbWl0aC5jb20vYmxvZy8yMDEyLzAyL21vZGVybml6ci1wcmVmaXhlZC8pLCBhbiBgLW1zYCBwcmVmaXhcbiAgICAvLyBpcyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGBtc2AuXG4gICAgY2FtZWxpemUobmFtZS5yZXBsYWNlKG1zUGF0dGVybiQxLCAnbXMtJykpKTtcbiAgfTtcblxuICB2YXIgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignVW5zdXBwb3J0ZWQgdmVuZG9yLXByZWZpeGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JywgbmFtZSwgbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSkpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVWYWx1ZXMuaGFzT3duUHJvcGVydHkodmFsdWUpICYmIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSA9IHRydWU7XG5cbiAgICBlcnJvcihcIlN0eWxlIHByb3BlcnR5IHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvbi4gXCIgKyAnVHJ5IFwiJXM6ICVzXCIgaW5zdGVhZC4nLCBuYW1lLCB2YWx1ZS5yZXBsYWNlKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiwgJycpKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVJc05hTiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRGb3JOYU5WYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvck5hTlZhbHVlID0gdHJ1ZTtcblxuICAgIGVycm9yKCdgTmFOYCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuJywgbmFtZSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlSXNJbmZpbml0eSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRGb3JJbmZpbml0eVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9IHRydWU7XG5cbiAgICBlcnJvcignYEluZmluaXR5YCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuJywgbmFtZSk7XG4gIH07XG5cbiAgd2FyblZhbGlkU3R5bGUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAobmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUobmFtZSk7XG4gICAgfSBlbHNlIGlmIChiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgICAgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24obmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHdhcm5TdHlsZVZhbHVlSXNOYU4obmFtZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICghaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICAgIHdhcm5TdHlsZVZhbHVlSXNJbmZpbml0eShuYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG52YXIgd2FyblZhbGlkU3R5bGUkMSA9IHdhcm5WYWxpZFN0eWxlO1xuXG4vKipcbiAqIE9wZXJhdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBDU1MgcHJvcGVydGllcy5cbiAqL1xuXG4vKipcbiAqIFRoaXMgY3JlYXRlcyBhIHN0cmluZyB0aGF0IGlzIGV4cGVjdGVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gdGhlIHN0eWxlXG4gKiBhdHRyaWJ1dGUgZ2VuZXJhdGVkIGJ5IHNlcnZlci1zaWRlIHJlbmRlcmluZy4gSXQgYnktcGFzc2VzIHdhcm5pbmdzIGFuZFxuICogc2VjdXJpdHkgY2hlY2tzIHNvIGl0J3Mgbm90IHNhZmUgdG8gdXNlIHRoaXMgdmFsdWUgZm9yIGFueXRoaW5nIG90aGVyIHRoYW5cbiAqIGNvbXBhcmlzb24uIEl0IGlzIG9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZURhbmdlcm91c1N0cmluZ0ZvclN0eWxlcyhzdHlsZXMpIHtcbiAge1xuICAgIHZhciBzZXJpYWxpemVkID0gJyc7XG4gICAgdmFyIGRlbGltaXRlciA9ICcnO1xuXG4gICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0eWxlVmFsdWUgPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuICAgICAgaWYgKHN0eWxlVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuICAgICAgICBzZXJpYWxpemVkICs9IGRlbGltaXRlciArIChpc0N1c3RvbVByb3BlcnR5ID8gc3R5bGVOYW1lIDogaHlwaGVuYXRlU3R5bGVOYW1lKHN0eWxlTmFtZSkpICsgJzonO1xuICAgICAgICBzZXJpYWxpemVkICs9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZVZhbHVlLCBpc0N1c3RvbVByb3BlcnR5KTtcbiAgICAgICAgZGVsaW1pdGVyID0gJzsnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZXJpYWxpemVkIHx8IG51bGw7XG4gIH1cbn1cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgZm9yIG11bHRpcGxlIHN0eWxlcyBvbiBhIG5vZGUuICBJZiBhIHZhbHVlIGlzIHNwZWNpZmllZCBhc1xuICogJycgKGVtcHR5IHN0cmluZyksIHRoZSBjb3JyZXNwb25kaW5nIHN0eWxlIHByb3BlcnR5IHdpbGwgYmUgdW5zZXQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzXG4gKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVGb3JTdHlsZXMobm9kZSwgc3R5bGVzKSB7XG4gIHZhciBzdHlsZSA9IG5vZGUuc3R5bGU7XG5cbiAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBpc0N1c3RvbVByb3BlcnR5ID0gc3R5bGVOYW1lLmluZGV4T2YoJy0tJykgPT09IDA7XG5cbiAgICB7XG4gICAgICBpZiAoIWlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgICAgICAgd2FyblZhbGlkU3R5bGUkMShzdHlsZU5hbWUsIHN0eWxlc1tzdHlsZU5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3R5bGVWYWx1ZSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSwgaXNDdXN0b21Qcm9wZXJ0eSk7XG5cbiAgICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnKSB7XG4gICAgICBzdHlsZU5hbWUgPSAnY3NzRmxvYXQnO1xuICAgIH1cblxuICAgIGlmIChpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICBzdHlsZS5zZXRQcm9wZXJ0eShzdHlsZU5hbWUsIHN0eWxlVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZVtzdHlsZU5hbWVdID0gc3R5bGVWYWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWx1ZUVtcHR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSAnJztcbn1cbi8qKlxuICogR2l2ZW4ge2NvbG9yOiAncmVkJywgb3ZlcmZsb3c6ICdoaWRkZW4nfSByZXR1cm5zIHtcbiAqICAgY29sb3I6ICdjb2xvcicsXG4gKiAgIG92ZXJmbG93WDogJ292ZXJmbG93JyxcbiAqICAgb3ZlcmZsb3dZOiAnb3ZlcmZsb3cnLFxuICogfS4gVGhpcyBjYW4gYmUgcmVhZCBhcyBcInRoZSBvdmVyZmxvd1kgcHJvcGVydHkgd2FzIHNldCBieSB0aGUgb3ZlcmZsb3dcbiAqIHNob3J0aGFuZFwiLiBUaGF0IGlzLCB0aGUgdmFsdWVzIGFyZSB0aGUgcHJvcGVydHkgdGhhdCBlYWNoIHdhcyBkZXJpdmVkIGZyb20uXG4gKi9cblxuXG5mdW5jdGlvbiBleHBhbmRTaG9ydGhhbmRNYXAoc3R5bGVzKSB7XG4gIHZhciBleHBhbmRlZCA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBzdHlsZXMpIHtcbiAgICB2YXIgbG9uZ2hhbmRzID0gc2hvcnRoYW5kVG9Mb25naGFuZFtrZXldIHx8IFtrZXldO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV4cGFuZGVkW2xvbmdoYW5kc1tpXV0gPSBrZXk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cGFuZGVkO1xufVxuLyoqXG4gKiBXaGVuIG1peGluZyBzaG9ydGhhbmQgYW5kIGxvbmdoYW5kIHByb3BlcnR5IG5hbWVzLCB3ZSB3YXJuIGR1cmluZyB1cGRhdGVzIGlmXG4gKiB3ZSBleHBlY3QgYW4gaW5jb3JyZWN0IHJlc3VsdCB0byBvY2N1ci4gSW4gcGFydGljdWxhciwgd2Ugd2FybiBmb3I6XG4gKlxuICogVXBkYXRpbmcgYSBzaG9ydGhhbmQgcHJvcGVydHkgKGxvbmdoYW5kIGdldHMgb3ZlcndyaXR0ZW4pOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnQ6ICdiYXonLCBmb250VmFyaWFudDogJ2Jhcid9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnQgPSAnYmF6J1xuICogUmVtb3ZpbmcgYSBzaG9ydGhhbmQgcHJvcGVydHkgKGxvbmdoYW5kIGdldHMgbG9zdCB0b28pOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnRWYXJpYW50OiAnYmFyJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udCA9ICcnXG4gKiBSZW1vdmluZyBhIGxvbmdoYW5kIHByb3BlcnR5IChzaG91bGQgcmV2ZXJ0IHRvIHNob3J0aGFuZDsgZG9lc24ndCk6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udDogJ2Zvbyd9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnRWYXJpYW50ID0gJydcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb25JbkRldihzdHlsZVVwZGF0ZXMsIG5leHRTdHlsZXMpIHtcbiAge1xuICAgIGlmICghbmV4dFN0eWxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBleHBhbmRlZFVwZGF0ZXMgPSBleHBhbmRTaG9ydGhhbmRNYXAoc3R5bGVVcGRhdGVzKTtcbiAgICB2YXIgZXhwYW5kZWRTdHlsZXMgPSBleHBhbmRTaG9ydGhhbmRNYXAobmV4dFN0eWxlcyk7XG4gICAgdmFyIHdhcm5lZEFib3V0ID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZXhwYW5kZWRVcGRhdGVzKSB7XG4gICAgICB2YXIgb3JpZ2luYWxLZXkgPSBleHBhbmRlZFVwZGF0ZXNba2V5XTtcbiAgICAgIHZhciBjb3JyZWN0T3JpZ2luYWxLZXkgPSBleHBhbmRlZFN0eWxlc1trZXldO1xuXG4gICAgICBpZiAoY29ycmVjdE9yaWdpbmFsS2V5ICYmIG9yaWdpbmFsS2V5ICE9PSBjb3JyZWN0T3JpZ2luYWxLZXkpIHtcbiAgICAgICAgdmFyIHdhcm5pbmdLZXkgPSBvcmlnaW5hbEtleSArICcsJyArIGNvcnJlY3RPcmlnaW5hbEtleTtcblxuICAgICAgICBpZiAod2FybmVkQWJvdXRbd2FybmluZ0tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdhcm5lZEFib3V0W3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXMgYSBzdHlsZSBwcm9wZXJ0eSBkdXJpbmcgcmVyZW5kZXIgKCVzKSB3aGVuIGEgJyArICdjb25mbGljdGluZyBwcm9wZXJ0eSBpcyBzZXQgKCVzKSBjYW4gbGVhZCB0byBzdHlsaW5nIGJ1Z3MuIFRvICcgKyBcImF2b2lkIHRoaXMsIGRvbid0IG1peCBzaG9ydGhhbmQgYW5kIG5vbi1zaG9ydGhhbmQgcHJvcGVydGllcyBcIiArICdmb3IgdGhlIHNhbWUgdmFsdWU7IGluc3RlYWQsIHJlcGxhY2UgdGhlIHNob3J0aGFuZCB3aXRoICcgKyAnc2VwYXJhdGUgdmFsdWVzLicsIGlzVmFsdWVFbXB0eShzdHlsZVVwZGF0ZXNbb3JpZ2luYWxLZXldKSA/ICdSZW1vdmluZycgOiAnVXBkYXRpbmcnLCBvcmlnaW5hbEtleSwgY29ycmVjdE9yaWdpbmFsS2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gRm9yIEhUTUwsIGNlcnRhaW4gdGFncyBzaG91bGQgb21pdCB0aGVpciBjbG9zZSB0YWcuIFdlIGtlZXAgYSBsaXN0IGZvclxuLy8gdGhvc2Ugc3BlY2lhbC1jYXNlIHRhZ3MuXG52YXIgb21pdHRlZENsb3NlVGFncyA9IHtcbiAgYXJlYTogdHJ1ZSxcbiAgYmFzZTogdHJ1ZSxcbiAgYnI6IHRydWUsXG4gIGNvbDogdHJ1ZSxcbiAgZW1iZWQ6IHRydWUsXG4gIGhyOiB0cnVlLFxuICBpbWc6IHRydWUsXG4gIGlucHV0OiB0cnVlLFxuICBrZXlnZW46IHRydWUsXG4gIGxpbms6IHRydWUsXG4gIG1ldGE6IHRydWUsXG4gIHBhcmFtOiB0cnVlLFxuICBzb3VyY2U6IHRydWUsXG4gIHRyYWNrOiB0cnVlLFxuICB3YnI6IHRydWUgLy8gTk9URTogbWVudWl0ZW0ncyBjbG9zZSB0YWcgc2hvdWxkIGJlIG9taXR0ZWQsIGJ1dCB0aGF0IGNhdXNlcyBwcm9ibGVtcy5cblxufTtcblxuLy8gYG9taXR0ZWRDbG9zZVRhZ3NgIGV4Y2VwdCB0aGF0IGBtZW51aXRlbWAgc2hvdWxkIHN0aWxsIGhhdmUgaXRzIGNsb3NpbmcgdGFnLlxuXG52YXIgdm9pZEVsZW1lbnRUYWdzID0gX2Fzc2lnbih7XG4gIG1lbnVpdGVtOiB0cnVlXG59LCBvbWl0dGVkQ2xvc2VUYWdzKTtcblxudmFyIEhUTUwgPSAnX19odG1sJztcblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gTm90ZSB0aGUgdXNlIG9mIGA9PWAgd2hpY2ggY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZC5cblxuXG4gIGlmICh2b2lkRWxlbWVudFRhZ3NbdGFnXSkge1xuICAgIGlmICghKHByb3BzLmNoaWxkcmVuID09IG51bGwgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIHRhZyArIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkge1xuICAgIGlmICghKHByb3BzLmNoaWxkcmVuID09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbiBvbmx5IHNldCBvbmUgb2YgYGNoaWxkcmVuYCBvciBgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEodHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBIVE1MIGluIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgaW4gdGhlIGZvcm0gYHtfX2h0bWw6IC4uLn1gLiBQbGVhc2UgdmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rhbmdlcm91c2x5LXNldC1pbm5lci1odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmICghcHJvcHMuc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nICYmIHByb3BzLmNvbnRlbnRFZGl0YWJsZSAmJiBwcm9wcy5jaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgYGNvbnRlbnRFZGl0YWJsZWAgYW5kIGNvbnRhaW5zIGBjaGlsZHJlbmAgbWFuYWdlZCBieSAnICsgJ1JlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBub25lIG9mICcgKyAndGhvc2Ugbm9kZXMgYXJlIHVuZXhwZWN0ZWRseSBtb2RpZmllZCBvciBkdXBsaWNhdGVkLiBUaGlzIGlzICcgKyAncHJvYmFibHkgbm90IGludGVudGlvbmFsLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghKHByb3BzLnN0eWxlID09IG51bGwgfHwgdHlwZW9mIHByb3BzLnN0eWxlID09PSAnb2JqZWN0JykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsIG5vdCBhIHN0cmluZy4gRm9yIGV4YW1wbGUsIHN0eWxlPXt7bWFyZ2luUmlnaHQ6IHNwYWNpbmcgKyAnZW0nfX0gd2hlbiB1c2luZyBKU1guXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDdXN0b21Db21wb25lbnQodGFnTmFtZSwgcHJvcHMpIHtcbiAgaWYgKHRhZ05hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHJldHVybiB0eXBlb2YgcHJvcHMuaXMgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgc3dpdGNoICh0YWdOYW1lKSB7XG4gICAgLy8gVGhlc2UgYXJlIHJlc2VydmVkIFNWRyBhbmQgTWF0aE1MIGVsZW1lbnRzLlxuICAgIC8vIFdlIGRvbid0IG1pbmQgdGhpcyBsaXN0IHRvbyBtdWNoIGJlY2F1c2Ugd2UgZXhwZWN0IGl0IHRvIG5ldmVyIGdyb3cuXG4gICAgLy8gVGhlIGFsdGVybmF0aXZlIGlzIHRvIHRyYWNrIHRoZSBuYW1lc3BhY2UgaW4gYSBmZXcgcGxhY2VzIHdoaWNoIGlzIGNvbnZvbHV0ZWQuXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmNvbXBvbmVudHMvc3BlYy9jdXN0b20vI2N1c3RvbS1lbGVtZW50cy1jb3JlLWNvbmNlcHRzXG4gICAgY2FzZSAnYW5ub3RhdGlvbi14bWwnOlxuICAgIGNhc2UgJ2NvbG9yLXByb2ZpbGUnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZSc6XG4gICAgY2FzZSAnZm9udC1mYWNlLXNyYyc6XG4gICAgY2FzZSAnZm9udC1mYWNlLXVyaSc6XG4gICAgY2FzZSAnZm9udC1mYWNlLWZvcm1hdCc6XG4gICAgY2FzZSAnZm9udC1mYWNlLW5hbWUnOlxuICAgIGNhc2UgJ21pc3NpbmctZ2x5cGgnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8vIFdoZW4gYWRkaW5nIGF0dHJpYnV0ZXMgdG8gdGhlIEhUTUwgb3IgU1ZHIGFsbG93ZWQgYXR0cmlidXRlIGxpc3QsIGJlIHN1cmUgdG9cbi8vIGFsc28gYWRkIHRoZW0gdG8gdGhpcyBtb2R1bGUgdG8gZW5zdXJlIGNhc2luZyBhbmQgaW5jb3JyZWN0IG5hbWVcbi8vIHdhcm5pbmdzLlxudmFyIHBvc3NpYmxlU3RhbmRhcmROYW1lcyA9IHtcbiAgLy8gSFRNTFxuICBhY2NlcHQ6ICdhY2NlcHQnLFxuICBhY2NlcHRjaGFyc2V0OiAnYWNjZXB0Q2hhcnNldCcsXG4gICdhY2NlcHQtY2hhcnNldCc6ICdhY2NlcHRDaGFyc2V0JyxcbiAgYWNjZXNza2V5OiAnYWNjZXNzS2V5JyxcbiAgYWN0aW9uOiAnYWN0aW9uJyxcbiAgYWxsb3dmdWxsc2NyZWVuOiAnYWxsb3dGdWxsU2NyZWVuJyxcbiAgYWx0OiAnYWx0JyxcbiAgYXM6ICdhcycsXG4gIGFzeW5jOiAnYXN5bmMnLFxuICBhdXRvY2FwaXRhbGl6ZTogJ2F1dG9DYXBpdGFsaXplJyxcbiAgYXV0b2NvbXBsZXRlOiAnYXV0b0NvbXBsZXRlJyxcbiAgYXV0b2NvcnJlY3Q6ICdhdXRvQ29ycmVjdCcsXG4gIGF1dG9mb2N1czogJ2F1dG9Gb2N1cycsXG4gIGF1dG9wbGF5OiAnYXV0b1BsYXknLFxuICBhdXRvc2F2ZTogJ2F1dG9TYXZlJyxcbiAgY2FwdHVyZTogJ2NhcHR1cmUnLFxuICBjZWxscGFkZGluZzogJ2NlbGxQYWRkaW5nJyxcbiAgY2VsbHNwYWNpbmc6ICdjZWxsU3BhY2luZycsXG4gIGNoYWxsZW5nZTogJ2NoYWxsZW5nZScsXG4gIGNoYXJzZXQ6ICdjaGFyU2V0JyxcbiAgY2hlY2tlZDogJ2NoZWNrZWQnLFxuICBjaGlsZHJlbjogJ2NoaWxkcmVuJyxcbiAgY2l0ZTogJ2NpdGUnLFxuICBjbGFzczogJ2NsYXNzTmFtZScsXG4gIGNsYXNzaWQ6ICdjbGFzc0lEJyxcbiAgY2xhc3NuYW1lOiAnY2xhc3NOYW1lJyxcbiAgY29sczogJ2NvbHMnLFxuICBjb2xzcGFuOiAnY29sU3BhbicsXG4gIGNvbnRlbnQ6ICdjb250ZW50JyxcbiAgY29udGVudGVkaXRhYmxlOiAnY29udGVudEVkaXRhYmxlJyxcbiAgY29udGV4dG1lbnU6ICdjb250ZXh0TWVudScsXG4gIGNvbnRyb2xzOiAnY29udHJvbHMnLFxuICBjb250cm9sc2xpc3Q6ICdjb250cm9sc0xpc3QnLFxuICBjb29yZHM6ICdjb29yZHMnLFxuICBjcm9zc29yaWdpbjogJ2Nyb3NzT3JpZ2luJyxcbiAgZGFuZ2Vyb3VzbHlzZXRpbm5lcmh0bWw6ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsXG4gIGRhdGE6ICdkYXRhJyxcbiAgZGF0ZXRpbWU6ICdkYXRlVGltZScsXG4gIGRlZmF1bHQ6ICdkZWZhdWx0JyxcbiAgZGVmYXVsdGNoZWNrZWQ6ICdkZWZhdWx0Q2hlY2tlZCcsXG4gIGRlZmF1bHR2YWx1ZTogJ2RlZmF1bHRWYWx1ZScsXG4gIGRlZmVyOiAnZGVmZXInLFxuICBkaXI6ICdkaXInLFxuICBkaXNhYmxlZDogJ2Rpc2FibGVkJyxcbiAgZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmU6ICdkaXNhYmxlUGljdHVyZUluUGljdHVyZScsXG4gIGRpc2FibGVyZW1vdGVwbGF5YmFjazogJ2Rpc2FibGVSZW1vdGVQbGF5YmFjaycsXG4gIGRvd25sb2FkOiAnZG93bmxvYWQnLFxuICBkcmFnZ2FibGU6ICdkcmFnZ2FibGUnLFxuICBlbmN0eXBlOiAnZW5jVHlwZScsXG4gIGVudGVya2V5aGludDogJ2VudGVyS2V5SGludCcsXG4gIGZvcjogJ2h0bWxGb3InLFxuICBmb3JtOiAnZm9ybScsXG4gIGZvcm1tZXRob2Q6ICdmb3JtTWV0aG9kJyxcbiAgZm9ybWFjdGlvbjogJ2Zvcm1BY3Rpb24nLFxuICBmb3JtZW5jdHlwZTogJ2Zvcm1FbmNUeXBlJyxcbiAgZm9ybW5vdmFsaWRhdGU6ICdmb3JtTm9WYWxpZGF0ZScsXG4gIGZvcm10YXJnZXQ6ICdmb3JtVGFyZ2V0JyxcbiAgZnJhbWVib3JkZXI6ICdmcmFtZUJvcmRlcicsXG4gIGhlYWRlcnM6ICdoZWFkZXJzJyxcbiAgaGVpZ2h0OiAnaGVpZ2h0JyxcbiAgaGlkZGVuOiAnaGlkZGVuJyxcbiAgaGlnaDogJ2hpZ2gnLFxuICBocmVmOiAnaHJlZicsXG4gIGhyZWZsYW5nOiAnaHJlZkxhbmcnLFxuICBodG1sZm9yOiAnaHRtbEZvcicsXG4gIGh0dHBlcXVpdjogJ2h0dHBFcXVpdicsXG4gICdodHRwLWVxdWl2JzogJ2h0dHBFcXVpdicsXG4gIGljb246ICdpY29uJyxcbiAgaWQ6ICdpZCcsXG4gIGlubmVyaHRtbDogJ2lubmVySFRNTCcsXG4gIGlucHV0bW9kZTogJ2lucHV0TW9kZScsXG4gIGludGVncml0eTogJ2ludGVncml0eScsXG4gIGlzOiAnaXMnLFxuICBpdGVtaWQ6ICdpdGVtSUQnLFxuICBpdGVtcHJvcDogJ2l0ZW1Qcm9wJyxcbiAgaXRlbXJlZjogJ2l0ZW1SZWYnLFxuICBpdGVtc2NvcGU6ICdpdGVtU2NvcGUnLFxuICBpdGVtdHlwZTogJ2l0ZW1UeXBlJyxcbiAga2V5cGFyYW1zOiAna2V5UGFyYW1zJyxcbiAga2V5dHlwZTogJ2tleVR5cGUnLFxuICBraW5kOiAna2luZCcsXG4gIGxhYmVsOiAnbGFiZWwnLFxuICBsYW5nOiAnbGFuZycsXG4gIGxpc3Q6ICdsaXN0JyxcbiAgbG9vcDogJ2xvb3AnLFxuICBsb3c6ICdsb3cnLFxuICBtYW5pZmVzdDogJ21hbmlmZXN0JyxcbiAgbWFyZ2lud2lkdGg6ICdtYXJnaW5XaWR0aCcsXG4gIG1hcmdpbmhlaWdodDogJ21hcmdpbkhlaWdodCcsXG4gIG1heDogJ21heCcsXG4gIG1heGxlbmd0aDogJ21heExlbmd0aCcsXG4gIG1lZGlhOiAnbWVkaWEnLFxuICBtZWRpYWdyb3VwOiAnbWVkaWFHcm91cCcsXG4gIG1ldGhvZDogJ21ldGhvZCcsXG4gIG1pbjogJ21pbicsXG4gIG1pbmxlbmd0aDogJ21pbkxlbmd0aCcsXG4gIG11bHRpcGxlOiAnbXVsdGlwbGUnLFxuICBtdXRlZDogJ211dGVkJyxcbiAgbmFtZTogJ25hbWUnLFxuICBub21vZHVsZTogJ25vTW9kdWxlJyxcbiAgbm9uY2U6ICdub25jZScsXG4gIG5vdmFsaWRhdGU6ICdub1ZhbGlkYXRlJyxcbiAgb3BlbjogJ29wZW4nLFxuICBvcHRpbXVtOiAnb3B0aW11bScsXG4gIHBhdHRlcm46ICdwYXR0ZXJuJyxcbiAgcGxhY2Vob2xkZXI6ICdwbGFjZWhvbGRlcicsXG4gIHBsYXlzaW5saW5lOiAncGxheXNJbmxpbmUnLFxuICBwb3N0ZXI6ICdwb3N0ZXInLFxuICBwcmVsb2FkOiAncHJlbG9hZCcsXG4gIHByb2ZpbGU6ICdwcm9maWxlJyxcbiAgcmFkaW9ncm91cDogJ3JhZGlvR3JvdXAnLFxuICByZWFkb25seTogJ3JlYWRPbmx5JyxcbiAgcmVmZXJyZXJwb2xpY3k6ICdyZWZlcnJlclBvbGljeScsXG4gIHJlbDogJ3JlbCcsXG4gIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICByZXZlcnNlZDogJ3JldmVyc2VkJyxcbiAgcm9sZTogJ3JvbGUnLFxuICByb3dzOiAncm93cycsXG4gIHJvd3NwYW46ICdyb3dTcGFuJyxcbiAgc2FuZGJveDogJ3NhbmRib3gnLFxuICBzY29wZTogJ3Njb3BlJyxcbiAgc2NvcGVkOiAnc2NvcGVkJyxcbiAgc2Nyb2xsaW5nOiAnc2Nyb2xsaW5nJyxcbiAgc2VhbWxlc3M6ICdzZWFtbGVzcycsXG4gIHNlbGVjdGVkOiAnc2VsZWN0ZWQnLFxuICBzaGFwZTogJ3NoYXBlJyxcbiAgc2l6ZTogJ3NpemUnLFxuICBzaXplczogJ3NpemVzJyxcbiAgc3BhbjogJ3NwYW4nLFxuICBzcGVsbGNoZWNrOiAnc3BlbGxDaGVjaycsXG4gIHNyYzogJ3NyYycsXG4gIHNyY2RvYzogJ3NyY0RvYycsXG4gIHNyY2xhbmc6ICdzcmNMYW5nJyxcbiAgc3Jjc2V0OiAnc3JjU2V0JyxcbiAgc3RhcnQ6ICdzdGFydCcsXG4gIHN0ZXA6ICdzdGVwJyxcbiAgc3R5bGU6ICdzdHlsZScsXG4gIHN1bW1hcnk6ICdzdW1tYXJ5JyxcbiAgdGFiaW5kZXg6ICd0YWJJbmRleCcsXG4gIHRhcmdldDogJ3RhcmdldCcsXG4gIHRpdGxlOiAndGl0bGUnLFxuICB0eXBlOiAndHlwZScsXG4gIHVzZW1hcDogJ3VzZU1hcCcsXG4gIHZhbHVlOiAndmFsdWUnLFxuICB3aWR0aDogJ3dpZHRoJyxcbiAgd21vZGU6ICd3bW9kZScsXG4gIHdyYXA6ICd3cmFwJyxcbiAgLy8gU1ZHXG4gIGFib3V0OiAnYWJvdXQnLFxuICBhY2NlbnRoZWlnaHQ6ICdhY2NlbnRIZWlnaHQnLFxuICAnYWNjZW50LWhlaWdodCc6ICdhY2NlbnRIZWlnaHQnLFxuICBhY2N1bXVsYXRlOiAnYWNjdW11bGF0ZScsXG4gIGFkZGl0aXZlOiAnYWRkaXRpdmUnLFxuICBhbGlnbm1lbnRiYXNlbGluZTogJ2FsaWdubWVudEJhc2VsaW5lJyxcbiAgJ2FsaWdubWVudC1iYXNlbGluZSc6ICdhbGlnbm1lbnRCYXNlbGluZScsXG4gIGFsbG93cmVvcmRlcjogJ2FsbG93UmVvcmRlcicsXG4gIGFscGhhYmV0aWM6ICdhbHBoYWJldGljJyxcbiAgYW1wbGl0dWRlOiAnYW1wbGl0dWRlJyxcbiAgYXJhYmljZm9ybTogJ2FyYWJpY0Zvcm0nLFxuICAnYXJhYmljLWZvcm0nOiAnYXJhYmljRm9ybScsXG4gIGFzY2VudDogJ2FzY2VudCcsXG4gIGF0dHJpYnV0ZW5hbWU6ICdhdHRyaWJ1dGVOYW1lJyxcbiAgYXR0cmlidXRldHlwZTogJ2F0dHJpYnV0ZVR5cGUnLFxuICBhdXRvcmV2ZXJzZTogJ2F1dG9SZXZlcnNlJyxcbiAgYXppbXV0aDogJ2F6aW11dGgnLFxuICBiYXNlZnJlcXVlbmN5OiAnYmFzZUZyZXF1ZW5jeScsXG4gIGJhc2VsaW5lc2hpZnQ6ICdiYXNlbGluZVNoaWZ0JyxcbiAgJ2Jhc2VsaW5lLXNoaWZ0JzogJ2Jhc2VsaW5lU2hpZnQnLFxuICBiYXNlcHJvZmlsZTogJ2Jhc2VQcm9maWxlJyxcbiAgYmJveDogJ2Jib3gnLFxuICBiZWdpbjogJ2JlZ2luJyxcbiAgYmlhczogJ2JpYXMnLFxuICBieTogJ2J5JyxcbiAgY2FsY21vZGU6ICdjYWxjTW9kZScsXG4gIGNhcGhlaWdodDogJ2NhcEhlaWdodCcsXG4gICdjYXAtaGVpZ2h0JzogJ2NhcEhlaWdodCcsXG4gIGNsaXA6ICdjbGlwJyxcbiAgY2xpcHBhdGg6ICdjbGlwUGF0aCcsXG4gICdjbGlwLXBhdGgnOiAnY2xpcFBhdGgnLFxuICBjbGlwcGF0aHVuaXRzOiAnY2xpcFBhdGhVbml0cycsXG4gIGNsaXBydWxlOiAnY2xpcFJ1bGUnLFxuICAnY2xpcC1ydWxlJzogJ2NsaXBSdWxlJyxcbiAgY29sb3I6ICdjb2xvcicsXG4gIGNvbG9yaW50ZXJwb2xhdGlvbjogJ2NvbG9ySW50ZXJwb2xhdGlvbicsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uJzogJ2NvbG9ySW50ZXJwb2xhdGlvbicsXG4gIGNvbG9yaW50ZXJwb2xhdGlvbmZpbHRlcnM6ICdjb2xvckludGVycG9sYXRpb25GaWx0ZXJzJyxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyc6ICdjb2xvckludGVycG9sYXRpb25GaWx0ZXJzJyxcbiAgY29sb3Jwcm9maWxlOiAnY29sb3JQcm9maWxlJyxcbiAgJ2NvbG9yLXByb2ZpbGUnOiAnY29sb3JQcm9maWxlJyxcbiAgY29sb3JyZW5kZXJpbmc6ICdjb2xvclJlbmRlcmluZycsXG4gICdjb2xvci1yZW5kZXJpbmcnOiAnY29sb3JSZW5kZXJpbmcnLFxuICBjb250ZW50c2NyaXB0dHlwZTogJ2NvbnRlbnRTY3JpcHRUeXBlJyxcbiAgY29udGVudHN0eWxldHlwZTogJ2NvbnRlbnRTdHlsZVR5cGUnLFxuICBjdXJzb3I6ICdjdXJzb3InLFxuICBjeDogJ2N4JyxcbiAgY3k6ICdjeScsXG4gIGQ6ICdkJyxcbiAgZGF0YXR5cGU6ICdkYXRhdHlwZScsXG4gIGRlY2VsZXJhdGU6ICdkZWNlbGVyYXRlJyxcbiAgZGVzY2VudDogJ2Rlc2NlbnQnLFxuICBkaWZmdXNlY29uc3RhbnQ6ICdkaWZmdXNlQ29uc3RhbnQnLFxuICBkaXJlY3Rpb246ICdkaXJlY3Rpb24nLFxuICBkaXNwbGF5OiAnZGlzcGxheScsXG4gIGRpdmlzb3I6ICdkaXZpc29yJyxcbiAgZG9taW5hbnRiYXNlbGluZTogJ2RvbWluYW50QmFzZWxpbmUnLFxuICAnZG9taW5hbnQtYmFzZWxpbmUnOiAnZG9taW5hbnRCYXNlbGluZScsXG4gIGR1cjogJ2R1cicsXG4gIGR4OiAnZHgnLFxuICBkeTogJ2R5JyxcbiAgZWRnZW1vZGU6ICdlZGdlTW9kZScsXG4gIGVsZXZhdGlvbjogJ2VsZXZhdGlvbicsXG4gIGVuYWJsZWJhY2tncm91bmQ6ICdlbmFibGVCYWNrZ3JvdW5kJyxcbiAgJ2VuYWJsZS1iYWNrZ3JvdW5kJzogJ2VuYWJsZUJhY2tncm91bmQnLFxuICBlbmQ6ICdlbmQnLFxuICBleHBvbmVudDogJ2V4cG9uZW50JyxcbiAgZXh0ZXJuYWxyZXNvdXJjZXNyZXF1aXJlZDogJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLFxuICBmaWxsOiAnZmlsbCcsXG4gIGZpbGxvcGFjaXR5OiAnZmlsbE9wYWNpdHknLFxuICAnZmlsbC1vcGFjaXR5JzogJ2ZpbGxPcGFjaXR5JyxcbiAgZmlsbHJ1bGU6ICdmaWxsUnVsZScsXG4gICdmaWxsLXJ1bGUnOiAnZmlsbFJ1bGUnLFxuICBmaWx0ZXI6ICdmaWx0ZXInLFxuICBmaWx0ZXJyZXM6ICdmaWx0ZXJSZXMnLFxuICBmaWx0ZXJ1bml0czogJ2ZpbHRlclVuaXRzJyxcbiAgZmxvb2RvcGFjaXR5OiAnZmxvb2RPcGFjaXR5JyxcbiAgJ2Zsb29kLW9wYWNpdHknOiAnZmxvb2RPcGFjaXR5JyxcbiAgZmxvb2Rjb2xvcjogJ2Zsb29kQ29sb3InLFxuICAnZmxvb2QtY29sb3InOiAnZmxvb2RDb2xvcicsXG4gIGZvY3VzYWJsZTogJ2ZvY3VzYWJsZScsXG4gIGZvbnRmYW1pbHk6ICdmb250RmFtaWx5JyxcbiAgJ2ZvbnQtZmFtaWx5JzogJ2ZvbnRGYW1pbHknLFxuICBmb250c2l6ZTogJ2ZvbnRTaXplJyxcbiAgJ2ZvbnQtc2l6ZSc6ICdmb250U2l6ZScsXG4gIGZvbnRzaXplYWRqdXN0OiAnZm9udFNpemVBZGp1c3QnLFxuICAnZm9udC1zaXplLWFkanVzdCc6ICdmb250U2l6ZUFkanVzdCcsXG4gIGZvbnRzdHJldGNoOiAnZm9udFN0cmV0Y2gnLFxuICAnZm9udC1zdHJldGNoJzogJ2ZvbnRTdHJldGNoJyxcbiAgZm9udHN0eWxlOiAnZm9udFN0eWxlJyxcbiAgJ2ZvbnQtc3R5bGUnOiAnZm9udFN0eWxlJyxcbiAgZm9udHZhcmlhbnQ6ICdmb250VmFyaWFudCcsXG4gICdmb250LXZhcmlhbnQnOiAnZm9udFZhcmlhbnQnLFxuICBmb250d2VpZ2h0OiAnZm9udFdlaWdodCcsXG4gICdmb250LXdlaWdodCc6ICdmb250V2VpZ2h0JyxcbiAgZm9ybWF0OiAnZm9ybWF0JyxcbiAgZnJvbTogJ2Zyb20nLFxuICBmeDogJ2Z4JyxcbiAgZnk6ICdmeScsXG4gIGcxOiAnZzEnLFxuICBnMjogJ2cyJyxcbiAgZ2x5cGhuYW1lOiAnZ2x5cGhOYW1lJyxcbiAgJ2dseXBoLW5hbWUnOiAnZ2x5cGhOYW1lJyxcbiAgZ2x5cGhvcmllbnRhdGlvbmhvcml6b250YWw6ICdnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJzogJ2dseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsJyxcbiAgZ2x5cGhvcmllbnRhdGlvbnZlcnRpY2FsOiAnZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsJyxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJzogJ2dseXBoT3JpZW50YXRpb25WZXJ0aWNhbCcsXG4gIGdseXBocmVmOiAnZ2x5cGhSZWYnLFxuICBncmFkaWVudHRyYW5zZm9ybTogJ2dyYWRpZW50VHJhbnNmb3JtJyxcbiAgZ3JhZGllbnR1bml0czogJ2dyYWRpZW50VW5pdHMnLFxuICBoYW5naW5nOiAnaGFuZ2luZycsXG4gIGhvcml6YWR2eDogJ2hvcml6QWR2WCcsXG4gICdob3Jpei1hZHYteCc6ICdob3JpekFkdlgnLFxuICBob3Jpem9yaWdpbng6ICdob3Jpek9yaWdpblgnLFxuICAnaG9yaXotb3JpZ2luLXgnOiAnaG9yaXpPcmlnaW5YJyxcbiAgaWRlb2dyYXBoaWM6ICdpZGVvZ3JhcGhpYycsXG4gIGltYWdlcmVuZGVyaW5nOiAnaW1hZ2VSZW5kZXJpbmcnLFxuICAnaW1hZ2UtcmVuZGVyaW5nJzogJ2ltYWdlUmVuZGVyaW5nJyxcbiAgaW4yOiAnaW4yJyxcbiAgaW46ICdpbicsXG4gIGlubGlzdDogJ2lubGlzdCcsXG4gIGludGVyY2VwdDogJ2ludGVyY2VwdCcsXG4gIGsxOiAnazEnLFxuICBrMjogJ2syJyxcbiAgazM6ICdrMycsXG4gIGs0OiAnazQnLFxuICBrOiAnaycsXG4gIGtlcm5lbG1hdHJpeDogJ2tlcm5lbE1hdHJpeCcsXG4gIGtlcm5lbHVuaXRsZW5ndGg6ICdrZXJuZWxVbml0TGVuZ3RoJyxcbiAga2VybmluZzogJ2tlcm5pbmcnLFxuICBrZXlwb2ludHM6ICdrZXlQb2ludHMnLFxuICBrZXlzcGxpbmVzOiAna2V5U3BsaW5lcycsXG4gIGtleXRpbWVzOiAna2V5VGltZXMnLFxuICBsZW5ndGhhZGp1c3Q6ICdsZW5ndGhBZGp1c3QnLFxuICBsZXR0ZXJzcGFjaW5nOiAnbGV0dGVyU3BhY2luZycsXG4gICdsZXR0ZXItc3BhY2luZyc6ICdsZXR0ZXJTcGFjaW5nJyxcbiAgbGlnaHRpbmdjb2xvcjogJ2xpZ2h0aW5nQ29sb3InLFxuICAnbGlnaHRpbmctY29sb3InOiAnbGlnaHRpbmdDb2xvcicsXG4gIGxpbWl0aW5nY29uZWFuZ2xlOiAnbGltaXRpbmdDb25lQW5nbGUnLFxuICBsb2NhbDogJ2xvY2FsJyxcbiAgbWFya2VyZW5kOiAnbWFya2VyRW5kJyxcbiAgJ21hcmtlci1lbmQnOiAnbWFya2VyRW5kJyxcbiAgbWFya2VyaGVpZ2h0OiAnbWFya2VySGVpZ2h0JyxcbiAgbWFya2VybWlkOiAnbWFya2VyTWlkJyxcbiAgJ21hcmtlci1taWQnOiAnbWFya2VyTWlkJyxcbiAgbWFya2Vyc3RhcnQ6ICdtYXJrZXJTdGFydCcsXG4gICdtYXJrZXItc3RhcnQnOiAnbWFya2VyU3RhcnQnLFxuICBtYXJrZXJ1bml0czogJ21hcmtlclVuaXRzJyxcbiAgbWFya2Vyd2lkdGg6ICdtYXJrZXJXaWR0aCcsXG4gIG1hc2s6ICdtYXNrJyxcbiAgbWFza2NvbnRlbnR1bml0czogJ21hc2tDb250ZW50VW5pdHMnLFxuICBtYXNrdW5pdHM6ICdtYXNrVW5pdHMnLFxuICBtYXRoZW1hdGljYWw6ICdtYXRoZW1hdGljYWwnLFxuICBtb2RlOiAnbW9kZScsXG4gIG51bW9jdGF2ZXM6ICdudW1PY3RhdmVzJyxcbiAgb2Zmc2V0OiAnb2Zmc2V0JyxcbiAgb3BhY2l0eTogJ29wYWNpdHknLFxuICBvcGVyYXRvcjogJ29wZXJhdG9yJyxcbiAgb3JkZXI6ICdvcmRlcicsXG4gIG9yaWVudDogJ29yaWVudCcsXG4gIG9yaWVudGF0aW9uOiAnb3JpZW50YXRpb24nLFxuICBvcmlnaW46ICdvcmlnaW4nLFxuICBvdmVyZmxvdzogJ292ZXJmbG93JyxcbiAgb3ZlcmxpbmVwb3NpdGlvbjogJ292ZXJsaW5lUG9zaXRpb24nLFxuICAnb3ZlcmxpbmUtcG9zaXRpb24nOiAnb3ZlcmxpbmVQb3NpdGlvbicsXG4gIG92ZXJsaW5ldGhpY2tuZXNzOiAnb3ZlcmxpbmVUaGlja25lc3MnLFxuICAnb3ZlcmxpbmUtdGhpY2tuZXNzJzogJ292ZXJsaW5lVGhpY2tuZXNzJyxcbiAgcGFpbnRvcmRlcjogJ3BhaW50T3JkZXInLFxuICAncGFpbnQtb3JkZXInOiAncGFpbnRPcmRlcicsXG4gIHBhbm9zZTE6ICdwYW5vc2UxJyxcbiAgJ3Bhbm9zZS0xJzogJ3Bhbm9zZTEnLFxuICBwYXRobGVuZ3RoOiAncGF0aExlbmd0aCcsXG4gIHBhdHRlcm5jb250ZW50dW5pdHM6ICdwYXR0ZXJuQ29udGVudFVuaXRzJyxcbiAgcGF0dGVybnRyYW5zZm9ybTogJ3BhdHRlcm5UcmFuc2Zvcm0nLFxuICBwYXR0ZXJudW5pdHM6ICdwYXR0ZXJuVW5pdHMnLFxuICBwb2ludGVyZXZlbnRzOiAncG9pbnRlckV2ZW50cycsXG4gICdwb2ludGVyLWV2ZW50cyc6ICdwb2ludGVyRXZlbnRzJyxcbiAgcG9pbnRzOiAncG9pbnRzJyxcbiAgcG9pbnRzYXR4OiAncG9pbnRzQXRYJyxcbiAgcG9pbnRzYXR5OiAncG9pbnRzQXRZJyxcbiAgcG9pbnRzYXR6OiAncG9pbnRzQXRaJyxcbiAgcHJlZml4OiAncHJlZml4JyxcbiAgcHJlc2VydmVhbHBoYTogJ3ByZXNlcnZlQWxwaGEnLFxuICBwcmVzZXJ2ZWFzcGVjdHJhdGlvOiAncHJlc2VydmVBc3BlY3RSYXRpbycsXG4gIHByaW1pdGl2ZXVuaXRzOiAncHJpbWl0aXZlVW5pdHMnLFxuICBwcm9wZXJ0eTogJ3Byb3BlcnR5JyxcbiAgcjogJ3InLFxuICByYWRpdXM6ICdyYWRpdXMnLFxuICByZWZ4OiAncmVmWCcsXG4gIHJlZnk6ICdyZWZZJyxcbiAgcmVuZGVyaW5naW50ZW50OiAncmVuZGVyaW5nSW50ZW50JyxcbiAgJ3JlbmRlcmluZy1pbnRlbnQnOiAncmVuZGVyaW5nSW50ZW50JyxcbiAgcmVwZWF0Y291bnQ6ICdyZXBlYXRDb3VudCcsXG4gIHJlcGVhdGR1cjogJ3JlcGVhdER1cicsXG4gIHJlcXVpcmVkZXh0ZW5zaW9uczogJ3JlcXVpcmVkRXh0ZW5zaW9ucycsXG4gIHJlcXVpcmVkZmVhdHVyZXM6ICdyZXF1aXJlZEZlYXR1cmVzJyxcbiAgcmVzb3VyY2U6ICdyZXNvdXJjZScsXG4gIHJlc3RhcnQ6ICdyZXN0YXJ0JyxcbiAgcmVzdWx0OiAncmVzdWx0JyxcbiAgcmVzdWx0czogJ3Jlc3VsdHMnLFxuICByb3RhdGU6ICdyb3RhdGUnLFxuICByeDogJ3J4JyxcbiAgcnk6ICdyeScsXG4gIHNjYWxlOiAnc2NhbGUnLFxuICBzZWN1cml0eTogJ3NlY3VyaXR5JyxcbiAgc2VlZDogJ3NlZWQnLFxuICBzaGFwZXJlbmRlcmluZzogJ3NoYXBlUmVuZGVyaW5nJyxcbiAgJ3NoYXBlLXJlbmRlcmluZyc6ICdzaGFwZVJlbmRlcmluZycsXG4gIHNsb3BlOiAnc2xvcGUnLFxuICBzcGFjaW5nOiAnc3BhY2luZycsXG4gIHNwZWN1bGFyY29uc3RhbnQ6ICdzcGVjdWxhckNvbnN0YW50JyxcbiAgc3BlY3VsYXJleHBvbmVudDogJ3NwZWN1bGFyRXhwb25lbnQnLFxuICBzcGVlZDogJ3NwZWVkJyxcbiAgc3ByZWFkbWV0aG9kOiAnc3ByZWFkTWV0aG9kJyxcbiAgc3RhcnRvZmZzZXQ6ICdzdGFydE9mZnNldCcsXG4gIHN0ZGRldmlhdGlvbjogJ3N0ZERldmlhdGlvbicsXG4gIHN0ZW1oOiAnc3RlbWgnLFxuICBzdGVtdjogJ3N0ZW12JyxcbiAgc3RpdGNodGlsZXM6ICdzdGl0Y2hUaWxlcycsXG4gIHN0b3Bjb2xvcjogJ3N0b3BDb2xvcicsXG4gICdzdG9wLWNvbG9yJzogJ3N0b3BDb2xvcicsXG4gIHN0b3BvcGFjaXR5OiAnc3RvcE9wYWNpdHknLFxuICAnc3RvcC1vcGFjaXR5JzogJ3N0b3BPcGFjaXR5JyxcbiAgc3RyaWtldGhyb3VnaHBvc2l0aW9uOiAnc3RyaWtldGhyb3VnaFBvc2l0aW9uJyxcbiAgJ3N0cmlrZXRocm91Z2gtcG9zaXRpb24nOiAnc3RyaWtldGhyb3VnaFBvc2l0aW9uJyxcbiAgc3RyaWtldGhyb3VnaHRoaWNrbmVzczogJ3N0cmlrZXRocm91Z2hUaGlja25lc3MnLFxuICAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnOiAnc3RyaWtldGhyb3VnaFRoaWNrbmVzcycsXG4gIHN0cmluZzogJ3N0cmluZycsXG4gIHN0cm9rZTogJ3N0cm9rZScsXG4gIHN0cm9rZWRhc2hhcnJheTogJ3N0cm9rZURhc2hhcnJheScsXG4gICdzdHJva2UtZGFzaGFycmF5JzogJ3N0cm9rZURhc2hhcnJheScsXG4gIHN0cm9rZWRhc2hvZmZzZXQ6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgJ3N0cm9rZS1kYXNob2Zmc2V0JzogJ3N0cm9rZURhc2hvZmZzZXQnLFxuICBzdHJva2VsaW5lY2FwOiAnc3Ryb2tlTGluZWNhcCcsXG4gICdzdHJva2UtbGluZWNhcCc6ICdzdHJva2VMaW5lY2FwJyxcbiAgc3Ryb2tlbGluZWpvaW46ICdzdHJva2VMaW5lam9pbicsXG4gICdzdHJva2UtbGluZWpvaW4nOiAnc3Ryb2tlTGluZWpvaW4nLFxuICBzdHJva2VtaXRlcmxpbWl0OiAnc3Ryb2tlTWl0ZXJsaW1pdCcsXG4gICdzdHJva2UtbWl0ZXJsaW1pdCc6ICdzdHJva2VNaXRlcmxpbWl0JyxcbiAgc3Ryb2tld2lkdGg6ICdzdHJva2VXaWR0aCcsXG4gICdzdHJva2Utd2lkdGgnOiAnc3Ryb2tlV2lkdGgnLFxuICBzdHJva2VvcGFjaXR5OiAnc3Ryb2tlT3BhY2l0eScsXG4gICdzdHJva2Utb3BhY2l0eSc6ICdzdHJva2VPcGFjaXR5JyxcbiAgc3VwcHJlc3Njb250ZW50ZWRpdGFibGV3YXJuaW5nOiAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJyxcbiAgc3VwcHJlc3NoeWRyYXRpb253YXJuaW5nOiAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJyxcbiAgc3VyZmFjZXNjYWxlOiAnc3VyZmFjZVNjYWxlJyxcbiAgc3lzdGVtbGFuZ3VhZ2U6ICdzeXN0ZW1MYW5ndWFnZScsXG4gIHRhYmxldmFsdWVzOiAndGFibGVWYWx1ZXMnLFxuICB0YXJnZXR4OiAndGFyZ2V0WCcsXG4gIHRhcmdldHk6ICd0YXJnZXRZJyxcbiAgdGV4dGFuY2hvcjogJ3RleHRBbmNob3InLFxuICAndGV4dC1hbmNob3InOiAndGV4dEFuY2hvcicsXG4gIHRleHRkZWNvcmF0aW9uOiAndGV4dERlY29yYXRpb24nLFxuICAndGV4dC1kZWNvcmF0aW9uJzogJ3RleHREZWNvcmF0aW9uJyxcbiAgdGV4dGxlbmd0aDogJ3RleHRMZW5ndGgnLFxuICB0ZXh0cmVuZGVyaW5nOiAndGV4dFJlbmRlcmluZycsXG4gICd0ZXh0LXJlbmRlcmluZyc6ICd0ZXh0UmVuZGVyaW5nJyxcbiAgdG86ICd0bycsXG4gIHRyYW5zZm9ybTogJ3RyYW5zZm9ybScsXG4gIHR5cGVvZjogJ3R5cGVvZicsXG4gIHUxOiAndTEnLFxuICB1MjogJ3UyJyxcbiAgdW5kZXJsaW5lcG9zaXRpb246ICd1bmRlcmxpbmVQb3NpdGlvbicsXG4gICd1bmRlcmxpbmUtcG9zaXRpb24nOiAndW5kZXJsaW5lUG9zaXRpb24nLFxuICB1bmRlcmxpbmV0aGlja25lc3M6ICd1bmRlcmxpbmVUaGlja25lc3MnLFxuICAndW5kZXJsaW5lLXRoaWNrbmVzcyc6ICd1bmRlcmxpbmVUaGlja25lc3MnLFxuICB1bmljb2RlOiAndW5pY29kZScsXG4gIHVuaWNvZGViaWRpOiAndW5pY29kZUJpZGknLFxuICAndW5pY29kZS1iaWRpJzogJ3VuaWNvZGVCaWRpJyxcbiAgdW5pY29kZXJhbmdlOiAndW5pY29kZVJhbmdlJyxcbiAgJ3VuaWNvZGUtcmFuZ2UnOiAndW5pY29kZVJhbmdlJyxcbiAgdW5pdHNwZXJlbTogJ3VuaXRzUGVyRW0nLFxuICAndW5pdHMtcGVyLWVtJzogJ3VuaXRzUGVyRW0nLFxuICB1bnNlbGVjdGFibGU6ICd1bnNlbGVjdGFibGUnLFxuICB2YWxwaGFiZXRpYzogJ3ZBbHBoYWJldGljJyxcbiAgJ3YtYWxwaGFiZXRpYyc6ICd2QWxwaGFiZXRpYycsXG4gIHZhbHVlczogJ3ZhbHVlcycsXG4gIHZlY3RvcmVmZmVjdDogJ3ZlY3RvckVmZmVjdCcsXG4gICd2ZWN0b3ItZWZmZWN0JzogJ3ZlY3RvckVmZmVjdCcsXG4gIHZlcnNpb246ICd2ZXJzaW9uJyxcbiAgdmVydGFkdnk6ICd2ZXJ0QWR2WScsXG4gICd2ZXJ0LWFkdi15JzogJ3ZlcnRBZHZZJyxcbiAgdmVydG9yaWdpbng6ICd2ZXJ0T3JpZ2luWCcsXG4gICd2ZXJ0LW9yaWdpbi14JzogJ3ZlcnRPcmlnaW5YJyxcbiAgdmVydG9yaWdpbnk6ICd2ZXJ0T3JpZ2luWScsXG4gICd2ZXJ0LW9yaWdpbi15JzogJ3ZlcnRPcmlnaW5ZJyxcbiAgdmhhbmdpbmc6ICd2SGFuZ2luZycsXG4gICd2LWhhbmdpbmcnOiAndkhhbmdpbmcnLFxuICB2aWRlb2dyYXBoaWM6ICd2SWRlb2dyYXBoaWMnLFxuICAndi1pZGVvZ3JhcGhpYyc6ICd2SWRlb2dyYXBoaWMnLFxuICB2aWV3Ym94OiAndmlld0JveCcsXG4gIHZpZXd0YXJnZXQ6ICd2aWV3VGFyZ2V0JyxcbiAgdmlzaWJpbGl0eTogJ3Zpc2liaWxpdHknLFxuICB2bWF0aGVtYXRpY2FsOiAndk1hdGhlbWF0aWNhbCcsXG4gICd2LW1hdGhlbWF0aWNhbCc6ICd2TWF0aGVtYXRpY2FsJyxcbiAgdm9jYWI6ICd2b2NhYicsXG4gIHdpZHRoczogJ3dpZHRocycsXG4gIHdvcmRzcGFjaW5nOiAnd29yZFNwYWNpbmcnLFxuICAnd29yZC1zcGFjaW5nJzogJ3dvcmRTcGFjaW5nJyxcbiAgd3JpdGluZ21vZGU6ICd3cml0aW5nTW9kZScsXG4gICd3cml0aW5nLW1vZGUnOiAnd3JpdGluZ01vZGUnLFxuICB4MTogJ3gxJyxcbiAgeDI6ICd4MicsXG4gIHg6ICd4JyxcbiAgeGNoYW5uZWxzZWxlY3RvcjogJ3hDaGFubmVsU2VsZWN0b3InLFxuICB4aGVpZ2h0OiAneEhlaWdodCcsXG4gICd4LWhlaWdodCc6ICd4SGVpZ2h0JyxcbiAgeGxpbmthY3R1YXRlOiAneGxpbmtBY3R1YXRlJyxcbiAgJ3hsaW5rOmFjdHVhdGUnOiAneGxpbmtBY3R1YXRlJyxcbiAgeGxpbmthcmNyb2xlOiAneGxpbmtBcmNyb2xlJyxcbiAgJ3hsaW5rOmFyY3JvbGUnOiAneGxpbmtBcmNyb2xlJyxcbiAgeGxpbmtocmVmOiAneGxpbmtIcmVmJyxcbiAgJ3hsaW5rOmhyZWYnOiAneGxpbmtIcmVmJyxcbiAgeGxpbmtyb2xlOiAneGxpbmtSb2xlJyxcbiAgJ3hsaW5rOnJvbGUnOiAneGxpbmtSb2xlJyxcbiAgeGxpbmtzaG93OiAneGxpbmtTaG93JyxcbiAgJ3hsaW5rOnNob3cnOiAneGxpbmtTaG93JyxcbiAgeGxpbmt0aXRsZTogJ3hsaW5rVGl0bGUnLFxuICAneGxpbms6dGl0bGUnOiAneGxpbmtUaXRsZScsXG4gIHhsaW5rdHlwZTogJ3hsaW5rVHlwZScsXG4gICd4bGluazp0eXBlJzogJ3hsaW5rVHlwZScsXG4gIHhtbGJhc2U6ICd4bWxCYXNlJyxcbiAgJ3htbDpiYXNlJzogJ3htbEJhc2UnLFxuICB4bWxsYW5nOiAneG1sTGFuZycsXG4gICd4bWw6bGFuZyc6ICd4bWxMYW5nJyxcbiAgeG1sbnM6ICd4bWxucycsXG4gICd4bWw6c3BhY2UnOiAneG1sU3BhY2UnLFxuICB4bWxuc3hsaW5rOiAneG1sbnNYbGluaycsXG4gICd4bWxuczp4bGluayc6ICd4bWxuc1hsaW5rJyxcbiAgeG1sc3BhY2U6ICd4bWxTcGFjZScsXG4gIHkxOiAneTEnLFxuICB5MjogJ3kyJyxcbiAgeTogJ3knLFxuICB5Y2hhbm5lbHNlbGVjdG9yOiAneUNoYW5uZWxTZWxlY3RvcicsXG4gIHo6ICd6JyxcbiAgem9vbWFuZHBhbjogJ3pvb21BbmRQYW4nXG59O1xuXG52YXIgYXJpYVByb3BlcnRpZXMgPSB7XG4gICdhcmlhLWN1cnJlbnQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1kZXRhaWxzJzogMCxcbiAgJ2FyaWEtZGlzYWJsZWQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1oaWRkZW4nOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1pbnZhbGlkJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEta2V5c2hvcnRjdXRzJzogMCxcbiAgJ2FyaWEtbGFiZWwnOiAwLFxuICAnYXJpYS1yb2xlZGVzY3JpcHRpb24nOiAwLFxuICAvLyBXaWRnZXQgQXR0cmlidXRlc1xuICAnYXJpYS1hdXRvY29tcGxldGUnOiAwLFxuICAnYXJpYS1jaGVja2VkJzogMCxcbiAgJ2FyaWEtZXhwYW5kZWQnOiAwLFxuICAnYXJpYS1oYXNwb3B1cCc6IDAsXG4gICdhcmlhLWxldmVsJzogMCxcbiAgJ2FyaWEtbW9kYWwnOiAwLFxuICAnYXJpYS1tdWx0aWxpbmUnOiAwLFxuICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiAwLFxuICAnYXJpYS1vcmllbnRhdGlvbic6IDAsXG4gICdhcmlhLXBsYWNlaG9sZGVyJzogMCxcbiAgJ2FyaWEtcHJlc3NlZCc6IDAsXG4gICdhcmlhLXJlYWRvbmx5JzogMCxcbiAgJ2FyaWEtcmVxdWlyZWQnOiAwLFxuICAnYXJpYS1zZWxlY3RlZCc6IDAsXG4gICdhcmlhLXNvcnQnOiAwLFxuICAnYXJpYS12YWx1ZW1heCc6IDAsXG4gICdhcmlhLXZhbHVlbWluJzogMCxcbiAgJ2FyaWEtdmFsdWVub3cnOiAwLFxuICAnYXJpYS12YWx1ZXRleHQnOiAwLFxuICAvLyBMaXZlIFJlZ2lvbiBBdHRyaWJ1dGVzXG4gICdhcmlhLWF0b21pYyc6IDAsXG4gICdhcmlhLWJ1c3knOiAwLFxuICAnYXJpYS1saXZlJzogMCxcbiAgJ2FyaWEtcmVsZXZhbnQnOiAwLFxuICAvLyBEcmFnLWFuZC1Ecm9wIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtZHJvcGVmZmVjdCc6IDAsXG4gICdhcmlhLWdyYWJiZWQnOiAwLFxuICAvLyBSZWxhdGlvbnNoaXAgQXR0cmlidXRlc1xuICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JzogMCxcbiAgJ2FyaWEtY29sY291bnQnOiAwLFxuICAnYXJpYS1jb2xpbmRleCc6IDAsXG4gICdhcmlhLWNvbHNwYW4nOiAwLFxuICAnYXJpYS1jb250cm9scyc6IDAsXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogMCxcbiAgJ2FyaWEtZXJyb3JtZXNzYWdlJzogMCxcbiAgJ2FyaWEtZmxvd3RvJzogMCxcbiAgJ2FyaWEtbGFiZWxsZWRieSc6IDAsXG4gICdhcmlhLW93bnMnOiAwLFxuICAnYXJpYS1wb3NpbnNldCc6IDAsXG4gICdhcmlhLXJvd2NvdW50JzogMCxcbiAgJ2FyaWEtcm93aW5kZXgnOiAwLFxuICAnYXJpYS1yb3dzcGFuJzogMCxcbiAgJ2FyaWEtc2V0c2l6ZSc6IDBcbn07XG5cbnZhciB3YXJuZWRQcm9wZXJ0aWVzID0ge307XG52YXIgckFSSUEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciByQVJJQUNhbWVsID0gbmV3IFJlZ0V4cCgnXihhcmlhKVtBLVpdWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIGhhc093blByb3BlcnR5JDEgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5KHRhZ05hbWUsIG5hbWUpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSQxLmNhbGwod2FybmVkUHJvcGVydGllcywgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllc1tuYW1lXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJBUklBQ2FtZWwudGVzdChuYW1lKSkge1xuICAgICAgdmFyIGFyaWFOYW1lID0gJ2FyaWEtJyArIG5hbWUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBjb3JyZWN0TmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGFyaWFOYW1lKSA/IGFyaWFOYW1lIDogbnVsbDsgLy8gSWYgdGhpcyBpcyBhbiBhcmlhLSogYXR0cmlidXRlLCBidXQgaXMgbm90IGxpc3RlZCBpbiB0aGUga25vd24gRE9NXG4gICAgICAvLyBET00gcHJvcGVydGllcywgdGhlbiBpdCBpcyBhbiBpbnZhbGlkIGFyaWEtKiBhdHRyaWJ1dGUuXG5cbiAgICAgIGlmIChjb3JyZWN0TmFtZSA9PSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIEFSSUEgYXR0cmlidXRlcyBmb2xsb3cgdGhlIHBhdHRlcm4gYXJpYS0qIGFuZCBtdXN0IGJlIGxvd2VyY2FzZS4nLCBuYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IC8vIGFyaWEtKiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBsb3dlcmNhc2U7IHN1Z2dlc3QgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uLlxuXG5cbiAgICAgIGlmIChuYW1lICE9PSBjb3JyZWN0TmFtZSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBjb3JyZWN0TmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyQVJJQS50ZXN0KG5hbWUpKSB7XG4gICAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgc3RhbmRhcmROYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gbG93ZXJDYXNlZE5hbWUgOiBudWxsOyAvLyBJZiB0aGlzIGlzIGFuIGFyaWEtKiBhdHRyaWJ1dGUsIGJ1dCBpcyBub3QgbGlzdGVkIGluIHRoZSBrbm93biBET01cbiAgICAgIC8vIERPTSBwcm9wZXJ0aWVzLCB0aGVuIGl0IGlzIGFuIGludmFsaWQgYXJpYS0qIGF0dHJpYnV0ZS5cblxuICAgICAgaWYgKHN0YW5kYXJkTmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIGFyaWEtKiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBsb3dlcmNhc2U7IHN1Z2dlc3QgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uLlxuXG5cbiAgICAgIGlmIChuYW1lICE9PSBzdGFuZGFyZE5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ1Vua25vd24gQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgc3RhbmRhcmROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHdhcm5JbnZhbGlkQVJJQVByb3BzKHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB2YXIgaW52YWxpZFByb3BzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eSh0eXBlLCBrZXkpO1xuXG4gICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgaW52YWxpZFByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSBpbnZhbGlkUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgICB9KS5qb2luKCcsICcpO1xuXG4gICAgaWYgKGludmFsaWRQcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGFyaWEgcHJvcCAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWFyaWEtcHJvcHMnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfSBlbHNlIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID4gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgYXJpYSBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWFyaWEtcHJvcHMnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcykge1xuICBpZiAoaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2FybkludmFsaWRBUklBUHJvcHModHlwZSwgcHJvcHMpO1xufVxuXG52YXIgZGlkV2FyblZhbHVlTnVsbCA9IGZhbHNlO1xuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpIHtcbiAge1xuICAgIGlmICh0eXBlICE9PSAnaW5wdXQnICYmIHR5cGUgIT09ICd0ZXh0YXJlYScgJiYgdHlwZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMgIT0gbnVsbCAmJiBwcm9wcy52YWx1ZSA9PT0gbnVsbCAmJiAhZGlkV2FyblZhbHVlTnVsbCkge1xuICAgICAgZGlkV2FyblZhbHVlTnVsbCA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlID09PSAnc2VsZWN0JyAmJiBwcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICBlcnJvcignYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IGFycmF5IHdoZW4gYG11bHRpcGxlYCBpcyBzZXQgdG8gYHRydWVgICcgKyAndG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCBmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuJywgdHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IHN0cmluZyB0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgICcgKyAnZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsaWRhdGVQcm9wZXJ0eSQxID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgdmFyIHdhcm5lZFByb3BlcnRpZXMkMSA9IHt9O1xuICB2YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIEVWRU5UX05BTUVfUkVHRVggPSAvXm9uLi87XG4gIHZhciBJTlZBTElEX0VWRU5UX05BTUVfUkVHRVggPSAvXm9uW15BLVpdLztcbiAgdmFyIHJBUklBJDEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbiAgdmFyIHJBUklBQ2FtZWwkMSA9IG5ldyBSZWdFeHAoJ14oYXJpYSlbQS1aXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcblxuICB2YWxpZGF0ZVByb3BlcnR5JDEgPSBmdW5jdGlvbiAodGFnTmFtZSwgbmFtZSwgdmFsdWUsIGV2ZW50UmVnaXN0cnkpIHtcbiAgICBpZiAoX2hhc093blByb3BlcnR5LmNhbGwod2FybmVkUHJvcGVydGllcyQxLCBuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ29uZm9jdXNpbicgfHwgbG93ZXJDYXNlZE5hbWUgPT09ICdvbmZvY3Vzb3V0Jykge1xuICAgICAgZXJyb3IoJ1JlYWN0IHVzZXMgb25Gb2N1cyBhbmQgb25CbHVyIGluc3RlYWQgb2Ygb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0LiAnICsgJ0FsbCBSZWFjdCBldmVudHMgYXJlIG5vcm1hbGl6ZWQgdG8gYnViYmxlLCBzbyBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQgJyArICdhcmUgbm90IG5lZWRlZC9zdXBwb3J0ZWQgYnkgUmVhY3QuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIFdlIGNhbid0IHJlbHkgb24gdGhlIGV2ZW50IHN5c3RlbSBiZWluZyBpbmplY3RlZCBvbiB0aGUgc2VydmVyLlxuXG5cbiAgICBpZiAoZXZlbnRSZWdpc3RyeSAhPSBudWxsKSB7XG4gICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyA9IGV2ZW50UmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyxcbiAgICAgICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzID0gZXZlbnRSZWdpc3RyeS5wb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzO1xuXG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdIDogbnVsbDtcblxuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9yKCdVbmtub3duIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gSXQgd2lsbCBiZSBpZ25vcmVkLicsIG5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAvLyBJZiBubyBldmVudCBwbHVnaW5zIGhhdmUgYmVlbiBpbmplY3RlZCwgd2UgYXJlIGluIGEgc2VydmVyIGVudmlyb25tZW50LlxuICAgICAgLy8gU28gd2UgY2FuJ3QgdGVsbCBpZiB0aGUgZXZlbnQgbmFtZSBpcyBjb3JyZWN0IGZvciBzdXJlLCBidXQgd2UgY2FuIGZpbHRlclxuICAgICAgLy8gb3V0IGtub3duIGJhZCBvbmVzIGxpa2UgYG9uY2xpY2tgLiBXZSBjYW4ndCBzdWdnZXN0IGEgc3BlY2lmaWMgcmVwbGFjZW1lbnQgdGhvdWdoLlxuICAgICAgaWYgKElOVkFMSURfRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gJyArICdSZWFjdCBldmVudHMgdXNlIHRoZSBjYW1lbENhc2UgbmFtaW5nIGNvbnZlbnRpb24sIGZvciBleGFtcGxlIGBvbkNsaWNrYC4nLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gTGV0IHRoZSBBUklBIGF0dHJpYnV0ZSBob29rIHZhbGlkYXRlIEFSSUEgYXR0cmlidXRlc1xuXG5cbiAgICBpZiAockFSSUEkMS50ZXN0KG5hbWUpIHx8IHJBUklBQ2FtZWwkMS50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdpbm5lcmh0bWwnKSB7XG4gICAgICBlcnJvcignRGlyZWN0bHkgc2V0dGluZyBwcm9wZXJ0eSBgaW5uZXJIVE1MYCBpcyBub3QgcGVybWl0dGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBsb29rdXAgZG9jdW1lbnRhdGlvbiBvbiBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLicpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnYXJpYScpIHtcbiAgICAgIGVycm9yKCdUaGUgYGFyaWFgIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBpbiBSZWFjdC4gJyArICdQYXNzIGluZGl2aWR1YWwgYGFyaWEtYCBhdHRyaWJ1dGVzIGluc3RlYWQuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdpcycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYSBgJXNgIGZvciBhIHN0cmluZyBhdHRyaWJ1dGUgYGlzYC4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCAnICsgJ3RoZSB2YWx1ZSB0byBhIHN0cmluZy4nLCB0eXBlb2YgdmFsdWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNOYU4odmFsdWUpKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgTmFOIGZvciB0aGUgYCVzYCBhdHRyaWJ1dGUuIElmIHRoaXMgaXMgZXhwZWN0ZWQsIGNhc3QgJyArICd0aGUgdmFsdWUgdG8gYSBzdHJpbmcuJywgbmFtZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKG5hbWUpO1xuICAgIHZhciBpc1Jlc2VydmVkID0gcHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRDsgLy8gS25vd24gYXR0cmlidXRlcyBzaG91bGQgbWF0Y2ggdGhlIGNhc2luZyBzcGVjaWZpZWQgaW4gdGhlIHByb3BlcnR5IGNvbmZpZy5cblxuICAgIGlmIChwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpKSB7XG4gICAgICB2YXIgc3RhbmRhcmROYW1lID0gcG9zc2libGVTdGFuZGFyZE5hbWVzW2xvd2VyQ2FzZWROYW1lXTtcblxuICAgICAgaWYgKHN0YW5kYXJkTmFtZSAhPT0gbmFtZSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBET00gcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgc3RhbmRhcmROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1Jlc2VydmVkICYmIG5hbWUgIT09IGxvd2VyQ2FzZWROYW1lKSB7XG4gICAgICAvLyBVbmtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIGhhdmUgbG93ZXJjYXNlIGNhc2luZyBzaW5jZSB0aGF0J3MgaG93IHRoZXlcbiAgICAgIC8vIHdpbGwgYmUgY2FzZWQgYW55d2F5IHdpdGggc2VydmVyIHJlbmRlcmluZy5cbiAgICAgIGVycm9yKCdSZWFjdCBkb2VzIG5vdCByZWNvZ25pemUgdGhlIGAlc2AgcHJvcCBvbiBhIERPTSBlbGVtZW50LiBJZiB5b3UgJyArICdpbnRlbnRpb25hbGx5IHdhbnQgaXQgdG8gYXBwZWFyIGluIHRoZSBET00gYXMgYSBjdXN0b20gJyArICdhdHRyaWJ1dGUsIHNwZWxsIGl0IGFzIGxvd2VyY2FzZSBgJXNgIGluc3RlYWQuICcgKyAnSWYgeW91IGFjY2lkZW50YWxseSBwYXNzZWQgaXQgZnJvbSBhIHBhcmVudCBjb21wb25lbnQsIHJlbW92ZSAnICsgJ2l0IGZyb20gdGhlIERPTSBlbGVtZW50LicsIG5hbWUsIGxvd2VyQ2FzZWROYW1lKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyAmJiBzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJyArICclcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LicsIHZhbHVlLCBuYW1lLCBuYW1lLCB2YWx1ZSwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJyArICclcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LlxcblxcbicgKyAnSWYgeW91IHVzZWQgdG8gY29uZGl0aW9uYWxseSBvbWl0IGl0IHdpdGggJXM9e2NvbmRpdGlvbiAmJiB2YWx1ZX0sICcgKyAncGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuJywgdmFsdWUsIG5hbWUsIG5hbWUsIHZhbHVlLCBuYW1lLCBuYW1lLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gTm93IHRoYXQgd2UndmUgdmFsaWRhdGVkIGNhc2luZywgZG8gbm90IHZhbGlkYXRlXG4gICAgLy8gZGF0YSB0eXBlcyBmb3IgcmVzZXJ2ZWQgcHJvcHNcblxuXG4gICAgaWYgKGlzUmVzZXJ2ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gV2FybiB3aGVuIGEga25vd24gYXR0cmlidXRlIGlzIGEgYmFkIHR5cGVcblxuXG4gICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIFdhcm4gd2hlbiBwYXNzaW5nIHRoZSBzdHJpbmdzICdmYWxzZScgb3IgJ3RydWUnIGludG8gYSBib29sZWFuIHByb3BcblxuXG4gICAgaWYgKCh2YWx1ZSA9PT0gJ2ZhbHNlJyB8fCB2YWx1ZSA9PT0gJ3RydWUnKSAmJiBwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IEJPT0xFQU4pIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCB0aGUgc3RyaW5nIGAlc2AgZm9yIHRoZSBib29sZWFuIGF0dHJpYnV0ZSBgJXNgLiAnICsgJyVzICcgKyAnRGlkIHlvdSBtZWFuICVzPXslc30/JywgdmFsdWUsIG5hbWUsIHZhbHVlID09PSAnZmFsc2UnID8gJ1RoZSBicm93c2VyIHdpbGwgaW50ZXJwcmV0IGl0IGFzIGEgdHJ1dGh5IHZhbHVlLicgOiAnQWx0aG91Z2ggdGhpcyB3b3JrcywgaXQgd2lsbCBub3Qgd29yayBhcyBleHBlY3RlZCBpZiB5b3UgcGFzcyB0aGUgc3RyaW5nIFwiZmFsc2VcIi4nLCBuYW1lLCB2YWx1ZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxudmFyIHdhcm5Vbmtub3duUHJvcGVydGllcyA9IGZ1bmN0aW9uICh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSkge1xuICB7XG4gICAgdmFyIHVua25vd25Qcm9wcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkkMSh0eXBlLCBrZXksIHByb3BzW2tleV0sIGV2ZW50UmVnaXN0cnkpO1xuXG4gICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgdW5rbm93blByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSB1bmtub3duUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgICB9KS5qb2luKCcsICcpO1xuXG4gICAgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIHZhbHVlIGZvciBwcm9wICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIGl0IGZyb20gdGhlIGVsZW1lbnQsICcgKyAnb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCBpdCBpbiB0aGUgRE9NLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciAnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfSBlbHNlIGlmICh1bmtub3duUHJvcHMubGVuZ3RoID4gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgdmFsdWVzIGZvciBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSB0aGVtIGZyb20gdGhlIGVsZW1lbnQsICcgKyAnb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCB0aGVtIGluIHRoZSBET00uICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yICcsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KSB7XG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3YXJuVW5rbm93blByb3BlcnRpZXModHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpO1xufVxuXG52YXIgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUgPSAxO1xudmFyIElTX05PTl9ERUxFR0FURUQgPSAxIDw8IDE7XG52YXIgSVNfQ0FQVFVSRV9QSEFTRSA9IDEgPDwgMjtcbnZhciBJU19SRVBMQVlFRCA9IDEgPDwgNDtcbi8vIHNldCB0byBMRUdBQ1lfRkJfU1VQUE9SVC4gTEVHQUNZX0ZCX1NVUFBPUlQgb25seSBnZXRzIHNldCB3aGVuXG4vLyB3ZSBjYWxsIHdpbGxEZWZlckxhdGVyRm9yTGVnYWN5RkJTdXBwb3J0LCB0aHVzIG5vdCBiYWlsaW5nIG91dFxuLy8gd2lsbCByZXN1bHQgaW4gZW5kbGVzcyBjeWNsZXMgbGlrZSBhbiBpbmZpbml0ZSBsb29wLlxuLy8gV2UgYWxzbyBkb24ndCB3YW50IHRvIGRlZmVyIGR1cmluZyBldmVudCByZXBsYXlpbmcuXG5cbnZhciBTSE9VTERfTk9UX1BST0NFU1NfUE9MWUZJTExfRVZFTlRfUExVR0lOUyA9IElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFIHwgSVNfTk9OX0RFTEVHQVRFRCB8IElTX0NBUFRVUkVfUEhBU0U7XG5cbi8qKlxuICogR2V0cyB0aGUgdGFyZ2V0IG5vZGUgZnJvbSBhIG5hdGl2ZSBicm93c2VyIGV2ZW50IGJ5IGFjY291bnRpbmcgZm9yXG4gKiBpbmNvbnNpc3RlbmNpZXMgaW4gYnJvd3NlciBET00gQVBJcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtET01FdmVudFRhcmdldH0gVGFyZ2V0IG5vZGUuXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpIHtcbiAgLy8gRmFsbGJhY2sgdG8gbmF0aXZlRXZlbnQuc3JjRWxlbWVudCBmb3IgSUU5XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI1MDZcbiAgdmFyIHRhcmdldCA9IG5hdGl2ZUV2ZW50LnRhcmdldCB8fCBuYXRpdmVFdmVudC5zcmNFbGVtZW50IHx8IHdpbmRvdzsgLy8gTm9ybWFsaXplIFNWRyA8dXNlPiBlbGVtZW50IGV2ZW50cyAjNDk2M1xuXG4gIGlmICh0YXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpIHtcbiAgICB0YXJnZXQgPSB0YXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQ7XG4gIH0gLy8gU2FmYXJpIG1heSBmaXJlIGV2ZW50cyBvbiB0ZXh0IG5vZGVzIChOb2RlLlRFWFRfTk9ERSBpcyAzKS5cbiAgLy8gQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcblxuXG4gIHJldHVybiB0YXJnZXQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSA/IHRhcmdldC5wYXJlbnROb2RlIDogdGFyZ2V0O1xufVxuXG52YXIgcmVzdG9yZUltcGwgPSBudWxsO1xudmFyIHJlc3RvcmVUYXJnZXQgPSBudWxsO1xudmFyIHJlc3RvcmVRdWV1ZSA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCkge1xuICAvLyBXZSBwZXJmb3JtIHRoaXMgdHJhbnNsYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgZXZlbnQgbG9vcCBzbyB0aGF0IHdlXG4gIC8vIGFsd2F5cyByZWNlaXZlIHRoZSBjb3JyZWN0IGZpYmVyIGhlcmVcbiAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKHRhcmdldCk7XG5cbiAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgLy8gVW5tb3VudGVkXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCEodHlwZW9mIHJlc3RvcmVJbXBsID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbigpIG5lZWRzIHRvIGJlIGNhbGxlZCB0byBoYW5kbGUgYSB0YXJnZXQgZm9yIGNvbnRyb2xsZWQgZXZlbnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0YXRlTm9kZSA9IGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlOyAvLyBHdWFyZCBhZ2FpbnN0IEZpYmVyIGJlaW5nIHVubW91bnRlZC5cblxuICBpZiAoc3RhdGVOb2RlKSB7XG4gICAgdmFyIF9wcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoc3RhdGVOb2RlKTtcblxuICAgIHJlc3RvcmVJbXBsKGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlLCBpbnRlcm5hbEluc3RhbmNlLnR5cGUsIF9wcm9wcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKGltcGwpIHtcbiAgcmVzdG9yZUltcGwgPSBpbXBsO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVN0YXRlUmVzdG9yZSh0YXJnZXQpIHtcbiAgaWYgKHJlc3RvcmVUYXJnZXQpIHtcbiAgICBpZiAocmVzdG9yZVF1ZXVlKSB7XG4gICAgICByZXN0b3JlUXVldWUucHVzaCh0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0b3JlUXVldWUgPSBbdGFyZ2V0XTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdG9yZVRhcmdldCA9IHRhcmdldDtcbiAgfVxufVxuZnVuY3Rpb24gbmVlZHNTdGF0ZVJlc3RvcmUoKSB7XG4gIHJldHVybiByZXN0b3JlVGFyZ2V0ICE9PSBudWxsIHx8IHJlc3RvcmVRdWV1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTdGF0ZUlmTmVlZGVkKCkge1xuICBpZiAoIXJlc3RvcmVUYXJnZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdGFyZ2V0ID0gcmVzdG9yZVRhcmdldDtcbiAgdmFyIHF1ZXVlZFRhcmdldHMgPSByZXN0b3JlUXVldWU7XG4gIHJlc3RvcmVUYXJnZXQgPSBudWxsO1xuICByZXN0b3JlUXVldWUgPSBudWxsO1xuICByZXN0b3JlU3RhdGVPZlRhcmdldCh0YXJnZXQpO1xuXG4gIGlmIChxdWV1ZWRUYXJnZXRzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZWRUYXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN0b3JlU3RhdGVPZlRhcmdldChxdWV1ZWRUYXJnZXRzW2ldKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gdGhlIHJlbmRlcmVyLiBTdWNoIGFzIHdoZW4gd2UncmUgZGlzcGF0Y2hpbmcgZXZlbnRzIG9yIGlmIHRoaXJkIHBhcnR5XG4vLyBsaWJyYXJpZXMgbmVlZCB0byBjYWxsIGJhdGNoZWRVcGRhdGVzLiBFdmVudHVhbGx5LCB0aGlzIEFQSSB3aWxsIGdvIGF3YXkgd2hlblxuLy8gZXZlcnl0aGluZyBpcyBiYXRjaGVkIGJ5IGRlZmF1bHQuIFdlJ2xsIHRoZW4gaGF2ZSBhIHNpbWlsYXIgQVBJIHRvIG9wdC1vdXQgb2Zcbi8vIHNjaGVkdWxlZCB3b3JrIGFuZCBpbnN0ZWFkIGRvIHN5bmNocm9ub3VzIHdvcmsuXG4vLyBEZWZhdWx0c1xuXG52YXIgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKGZuLCBib29ra2VlcGluZykge1xuICByZXR1cm4gZm4oYm9va2tlZXBpbmcpO1xufTtcblxudmFyIGRpc2NyZXRlVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoZm4sIGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIGZuKGEsIGIsIGMsIGQpO1xufTtcblxudmFyIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwgPSBiYXRjaGVkVXBkYXRlc0ltcGw7XG52YXIgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBmYWxzZTtcbnZhciBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZpbmlzaEV2ZW50SGFuZGxlcigpIHtcbiAgLy8gSGVyZSB3ZSB3YWl0IHVudGlsIGFsbCB1cGRhdGVzIGhhdmUgcHJvcGFnYXRlZCwgd2hpY2ggaXMgaW1wb3J0YW50XG4gIC8vIHdoZW4gdXNpbmcgY29udHJvbGxlZCBjb21wb25lbnRzIHdpdGhpbiBsYXllcnM6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY5OFxuICAvLyBUaGVuIHdlIHJlc3RvcmUgc3RhdGUgb2YgYW55IGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICB2YXIgY29udHJvbGxlZENvbXBvbmVudHNIYXZlUGVuZGluZ1VwZGF0ZXMgPSBuZWVkc1N0YXRlUmVzdG9yZSgpO1xuXG4gIGlmIChjb250cm9sbGVkQ29tcG9uZW50c0hhdmVQZW5kaW5nVXBkYXRlcykge1xuICAgIC8vIElmIGEgY29udHJvbGxlZCBldmVudCB3YXMgZmlyZWQsIHdlIG1heSBuZWVkIHRvIHJlc3RvcmUgdGhlIHN0YXRlIG9mXG4gICAgLy8gdGhlIERPTSBub2RlIGJhY2sgdG8gdGhlIGNvbnRyb2xsZWQgdmFsdWUuIFRoaXMgaXMgbmVjZXNzYXJ5IHdoZW4gUmVhY3RcbiAgICAvLyBiYWlscyBvdXQgb2YgdGhlIHVwZGF0ZSB3aXRob3V0IHRvdWNoaW5nIHRoZSBET00uXG4gICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsKCk7XG4gICAgcmVzdG9yZVN0YXRlSWZOZWVkZWQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyhmbiwgYm9va2tlZXBpbmcpIHtcbiAgaWYgKGlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYW5vdGhlciBiYXRjaCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0XG4gICAgLy8gZnVsbHkgY29tcGxldGVzIGJlZm9yZSByZXN0b3Jpbmcgc3RhdGUuXG4gICAgcmV0dXJuIGZuKGJvb2trZWVwaW5nKTtcbiAgfVxuXG4gIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBiYXRjaGVkVXBkYXRlc0ltcGwoZm4sIGJvb2trZWVwaW5nKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IGZhbHNlO1xuICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICB9XG59XG5mdW5jdGlvbiBiYXRjaGVkRXZlbnRVcGRhdGVzKGZuLCBhLCBiKSB7XG4gIGlmIChpc0JhdGNoaW5nRXZlbnRVcGRhdGVzKSB7XG4gICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYW5vdGhlciBiYXRjaCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0XG4gICAgLy8gZnVsbHkgY29tcGxldGVzIGJlZm9yZSByZXN0b3Jpbmcgc3RhdGUuXG4gICAgcmV0dXJuIGZuKGEsIGIpO1xuICB9XG5cbiAgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwoZm4sIGEsIGIpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSBmYWxzZTtcbiAgICBmaW5pc2hFdmVudEhhbmRsZXIoKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlzY3JldGVVcGRhdGVzKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHZhciBwcmV2SXNJbnNpZGVFdmVudEhhbmRsZXIgPSBpc0luc2lkZUV2ZW50SGFuZGxlcjtcbiAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGRpc2NyZXRlVXBkYXRlc0ltcGwoZm4sIGEsIGIsIGMsIGQpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gcHJldklzSW5zaWRlRXZlbnRIYW5kbGVyO1xuXG4gICAgaWYgKCFpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmbHVzaERpc2NyZXRlVXBkYXRlc0lmTmVlZGVkKHRpbWVTdGFtcCkge1xuICB7XG4gICAgaWYgKCFpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXRCYXRjaGluZ0ltcGxlbWVudGF0aW9uKF9iYXRjaGVkVXBkYXRlc0ltcGwsIF9kaXNjcmV0ZVVwZGF0ZXNJbXBsLCBfZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsLCBfYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwpIHtcbiAgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gX2JhdGNoZWRVcGRhdGVzSW1wbDtcbiAgZGlzY3JldGVVcGRhdGVzSW1wbCA9IF9kaXNjcmV0ZVVwZGF0ZXNJbXBsO1xuICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwgPSBfZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsO1xuICBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCA9IF9iYXRjaGVkRXZlbnRVcGRhdGVzSW1wbDtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcmFjdGl2ZSh0YWcpIHtcbiAgcmV0dXJuIHRhZyA9PT0gJ2J1dHRvbicgfHwgdGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3NlbGVjdCcgfHwgdGFnID09PSAndGV4dGFyZWEnO1xufVxuXG5mdW5jdGlvbiBzaG91bGRQcmV2ZW50TW91c2VFdmVudChuYW1lLCB0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdvbkNsaWNrJzpcbiAgICBjYXNlICdvbkNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGljayc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGlja0NhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VEb3duJzpcbiAgICBjYXNlICdvbk1vdXNlRG93bkNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlJzpcbiAgICBjYXNlICdvbk1vdXNlTW92ZUNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VVcCc6XG4gICAgY2FzZSAnb25Nb3VzZVVwQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZUVudGVyJzpcbiAgICAgIHJldHVybiAhIShwcm9wcy5kaXNhYmxlZCAmJiBpc0ludGVyYWN0aXZlKHR5cGUpKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGluc3QgVGhlIGluc3RhbmNlLCB3aGljaCBpcyB0aGUgc291cmNlIG9mIGV2ZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAqIEByZXR1cm4gez9mdW5jdGlvbn0gVGhlIHN0b3JlZCBjYWxsYmFjay5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgdmFyIHN0YXRlTm9kZSA9IGluc3Quc3RhdGVOb2RlO1xuXG4gIGlmIChzdGF0ZU5vZGUgPT09IG51bGwpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzIChleDogb25sb2FkIGV2ZW50cyBpbiBpbmNyZW1lbnRhbCBtb2RlKS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoc3RhdGVOb2RlKTtcblxuICBpZiAocHJvcHMgPT09IG51bGwpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0gcHJvcHNbcmVnaXN0cmF0aW9uTmFtZV07XG5cbiAgaWYgKHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGluc3QudHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoISghbGlzdGVuZXIgfHwgdHlwZW9mIGxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIGBcIiArIHJlZ2lzdHJhdGlvbk5hbWUgKyBcImAgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgXCIgKyB0eXBlb2YgbGlzdGVuZXIgKyBcImAgdHlwZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cblxudmFyIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gZmFsc2U7IC8vIENoZWNrIGlmIGJyb3dzZXIgc3VwcG9ydCBldmVudHMgd2l0aCBwYXNzaXZlIGxpc3RlbmVyc1xuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXIjU2FmZWx5X2RldGVjdGluZ19vcHRpb25fc3VwcG9ydFxuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIHRyeSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7fTsgLy8gJEZsb3dGaXhNZTogSWdub3JlIEZsb3cgY29tcGxhaW5pbmcgYWJvdXQgbmVlZGluZyBhIHZhbHVlXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0aW9ucywgJ3Bhc3NpdmUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZChuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgdHJ5IHtcbiAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGZ1bmNBcmdzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICB9XG59XG5cbnZhciBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsID0gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZDtcblxue1xuICAvLyBJbiBERVYgbW9kZSwgd2Ugc3dhcCBvdXQgaW52b2tlR3VhcmRlZENhbGxiYWNrIGZvciBhIHNwZWNpYWwgdmVyc2lvblxuICAvLyB0aGF0IHBsYXlzIG1vcmUgbmljZWx5IHdpdGggdGhlIGJyb3dzZXIncyBEZXZUb29scy4gVGhlIGlkZWEgaXMgdG8gcHJlc2VydmVcbiAgLy8gXCJQYXVzZSBvbiBleGNlcHRpb25zXCIgYmVoYXZpb3IuIEJlY2F1c2UgUmVhY3Qgd3JhcHMgYWxsIHVzZXItcHJvdmlkZWRcbiAgLy8gZnVuY3Rpb25zIGluIGludm9rZUd1YXJkZWRDYWxsYmFjaywgYW5kIHRoZSBwcm9kdWN0aW9uIHZlcnNpb24gb2ZcbiAgLy8gaW52b2tlR3VhcmRlZENhbGxiYWNrIHVzZXMgYSB0cnktY2F0Y2gsIGFsbCB1c2VyIGV4Y2VwdGlvbnMgYXJlIHRyZWF0ZWRcbiAgLy8gbGlrZSBjYXVnaHQgZXhjZXB0aW9ucywgYW5kIHRoZSBEZXZUb29scyB3b24ndCBwYXVzZSB1bmxlc3MgdGhlIGRldmVsb3BlclxuICAvLyB0YWtlcyB0aGUgZXh0cmEgc3RlcCBvZiBlbmFibGluZyBwYXVzZSBvbiBjYXVnaHQgZXhjZXB0aW9ucy4gVGhpcyBpc1xuICAvLyB1bmludHVpdGl2ZSwgdGhvdWdoLCBiZWNhdXNlIGV2ZW4gdGhvdWdoIFJlYWN0IGhhcyBjYXVnaHQgdGhlIGVycm9yLCBmcm9tXG4gIC8vIHRoZSBkZXZlbG9wZXIncyBwZXJzcGVjdGl2ZSwgdGhlIGVycm9yIGlzIHVuY2F1Z2h0LlxuICAvL1xuICAvLyBUbyBwcmVzZXJ2ZSB0aGUgZXhwZWN0ZWQgXCJQYXVzZSBvbiBleGNlcHRpb25zXCIgYmVoYXZpb3IsIHdlIGRvbid0IHVzZSBhXG4gIC8vIHRyeS1jYXRjaCBpbiBERVYuIEluc3RlYWQsIHdlIHN5bmNocm9ub3VzbHkgZGlzcGF0Y2ggYSBmYWtlIGV2ZW50IHRvIGEgZmFrZVxuICAvLyBET00gbm9kZSwgYW5kIGNhbGwgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2sgZnJvbSBpbnNpZGUgYW4gZXZlbnQgaGFuZGxlclxuICAvLyBmb3IgdGhhdCBmYWtlIGV2ZW50LiBJZiB0aGUgY2FsbGJhY2sgdGhyb3dzLCB0aGUgZXJyb3IgaXMgXCJjYXB0dXJlZFwiIHVzaW5nXG4gIC8vIGEgZ2xvYmFsIGV2ZW50IGhhbmRsZXIuIEJ1dCBiZWNhdXNlIHRoZSBlcnJvciBoYXBwZW5zIGluIGEgZGlmZmVyZW50XG4gIC8vIGV2ZW50IGxvb3AgY29udGV4dCwgaXQgZG9lcyBub3QgaW50ZXJydXB0IHRoZSBub3JtYWwgcHJvZ3JhbSBmbG93LlxuICAvLyBFZmZlY3RpdmVseSwgdGhpcyBnaXZlcyB1cyB0cnktY2F0Y2ggYmVoYXZpb3Igd2l0aG91dCBhY3R1YWxseSB1c2luZ1xuICAvLyB0cnktY2F0Y2guIE5lYXQhXG4gIC8vIENoZWNrIHRoYXQgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhlIEFQSXMgd2UgbmVlZCB0byBpbXBsZW1lbnQgb3VyIHNwZWNpYWxcbiAgLy8gREVWIHZlcnNpb24gb2YgaW52b2tlR3VhcmRlZENhbGxiYWNrXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZmFrZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdyZWFjdCcpO1xuXG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCA9IGZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0RldihuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAvLyBJZiBkb2N1bWVudCBkb2Vzbid0IGV4aXN0IHdlIGtub3cgZm9yIHN1cmUgd2Ugd2lsbCBjcmFzaCBpbiB0aGlzIG1ldGhvZFxuICAgICAgLy8gd2hlbiB3ZSBjYWxsIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCkuIEhvd2V2ZXIgdGhpcyBjYW4gY2F1c2UgY29uZnVzaW5nXG4gICAgICAvLyBlcnJvcnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9va2luY3ViYXRvci9jcmVhdGUtcmVhY3QtYXBwL2lzc3Vlcy8zNDgyXG4gICAgICAvLyBTbyB3ZSBwcmVlbXB0aXZlbHkgdGhyb3cgd2l0aCBhIGJldHRlciBtZXNzYWdlIGluc3RlYWQuXG4gICAgICBpZiAoISh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIGBkb2N1bWVudGAgZ2xvYmFsIHdhcyBkZWZpbmVkIHdoZW4gUmVhY3Qgd2FzIGluaXRpYWxpemVkLCBidXQgaXMgbm90IGRlZmluZWQgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIGluIGEgdGVzdCBlbnZpcm9ubWVudCBpZiBhIGNvbXBvbmVudCBzY2hlZHVsZXMgYW4gdXBkYXRlIGZyb20gYW4gYXN5bmNocm9ub3VzIGNhbGxiYWNrLCBidXQgdGhlIHRlc3QgaGFzIGFscmVhZHkgZmluaXNoZWQgcnVubmluZy4gVG8gc29sdmUgdGhpcywgeW91IGNhbiBlaXRoZXIgdW5tb3VudCB0aGUgY29tcG9uZW50IGF0IHRoZSBlbmQgb2YgeW91ciB0ZXN0IChhbmQgZW5zdXJlIHRoYXQgYW55IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGdldCBjYW5jZWxlZCBpbiBgY29tcG9uZW50V2lsbFVubW91bnRgKSwgb3IgeW91IGNhbiBjaGFuZ2UgdGhlIHRlc3QgaXRzZWxmIHRvIGJlIGFzeW5jaHJvbm91cy5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgIHZhciBkaWRDYWxsID0gZmFsc2U7IC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2sgdGhyZXcgYW4gZXJyb3IuIFdlXG4gICAgICAvLyBzZXQgdGhpcyB0byB0cnVlIGF0IHRoZSBiZWdpbm5pbmcsIHRoZW4gc2V0IGl0IHRvIGZhbHNlIHJpZ2h0IGFmdGVyXG4gICAgICAvLyBjYWxsaW5nIHRoZSBmdW5jdGlvbi4gSWYgdGhlIGZ1bmN0aW9uIGVycm9ycywgYGRpZEVycm9yYCB3aWxsIG5ldmVyIGJlXG4gICAgICAvLyBzZXQgdG8gZmFsc2UuIFRoaXMgc3RyYXRlZ3kgd29ya3MgZXZlbiBpZiB0aGUgYnJvd3NlciBpcyBmbGFreSBhbmRcbiAgICAgIC8vIGZhaWxzIHRvIGNhbGwgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLCBiZWNhdXNlIGl0IGRvZXNuJ3QgcmVseSBvblxuICAgICAgLy8gdGhlIGVycm9yIGV2ZW50IGF0IGFsbC5cblxuICAgICAgdmFyIGRpZEVycm9yID0gdHJ1ZTsgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIHZhbHVlIG9mIHdpbmRvdy5ldmVudCBzbyB0aGF0IHdlIGNhbiByZXNldCBpdFxuICAgICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjayB0byBsZXQgdXNlciBjb2RlIGFjY2VzcyB3aW5kb3cuZXZlbnQgaW4gdGhlXG4gICAgICAvLyBicm93c2VycyB0aGF0IHN1cHBvcnQgaXQuXG5cbiAgICAgIHZhciB3aW5kb3dFdmVudCA9IHdpbmRvdy5ldmVudDsgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIGRlc2NyaXB0b3Igb2Ygd2luZG93LmV2ZW50IHRvIHJlc3RvcmUgaXQgYWZ0ZXIgZXZlbnRcbiAgICAgIC8vIGRpc3BhdGNoaW5nOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjg4XG5cbiAgICAgIHZhciB3aW5kb3dFdmVudERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ2V2ZW50Jyk7XG5cbiAgICAgIGZ1bmN0aW9uIHJlc3RvcmVBZnRlckRpc3BhdGNoKCkge1xuICAgICAgICAvLyBXZSBpbW1lZGlhdGVseSByZW1vdmUgdGhlIGNhbGxiYWNrIGZyb20gZXZlbnQgbGlzdGVuZXJzIHNvIHRoYXRcbiAgICAgICAgLy8gbmVzdGVkIGBpbnZva2VHdWFyZGVkQ2FsbGJhY2tgIGNhbGxzIGRvIG5vdCBjbGFzaC4gT3RoZXJ3aXNlLCBhXG4gICAgICAgIC8vIG5lc3RlZCBjYWxsIHdvdWxkIHRyaWdnZXIgdGhlIGZha2UgZXZlbnQgaGFuZGxlcnMgb2YgYW55IGNhbGwgaGlnaGVyXG4gICAgICAgIC8vIGluIHRoZSBzdGFjay5cbiAgICAgICAgZmFrZU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBjYWxsQ2FsbGJhY2ssIGZhbHNlKTsgLy8gV2UgY2hlY2sgZm9yIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZXZlbnQnKSB0byBwcmV2ZW50IHRoZVxuICAgICAgICAvLyB3aW5kb3cuZXZlbnQgYXNzaWdubWVudCBpbiBib3RoIElFIDw9IDEwIGFzIHRoZXkgdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgLy8gXCJNZW1iZXIgbm90IGZvdW5kXCIgaW4gc3RyaWN0IG1vZGUsIGFuZCBpbiBGaXJlZm94IHdoaWNoIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgd2luZG93LmV2ZW50LlxuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LmV2ZW50ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2V2ZW50JykpIHtcbiAgICAgICAgICB3aW5kb3cuZXZlbnQgPSB3aW5kb3dFdmVudDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBDcmVhdGUgYW4gZXZlbnQgaGFuZGxlciBmb3Igb3VyIGZha2UgZXZlbnQuIFdlIHdpbGwgc3luY2hyb25vdXNseVxuICAgICAgLy8gZGlzcGF0Y2ggb3VyIGZha2UgZXZlbnQgdXNpbmcgYGRpc3BhdGNoRXZlbnRgLiBJbnNpZGUgdGhlIGhhbmRsZXIsIHdlXG4gICAgICAvLyBjYWxsIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrLlxuXG5cbiAgICAgIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgICAgIGZ1bmN0aW9uIGNhbGxDYWxsYmFjaygpIHtcbiAgICAgICAgZGlkQ2FsbCA9IHRydWU7XG4gICAgICAgIHJlc3RvcmVBZnRlckRpc3BhdGNoKCk7XG4gICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICAgICAgICBkaWRFcnJvciA9IGZhbHNlO1xuICAgICAgfSAvLyBDcmVhdGUgYSBnbG9iYWwgZXJyb3IgZXZlbnQgaGFuZGxlci4gV2UgdXNlIHRoaXMgdG8gY2FwdHVyZSB0aGUgdmFsdWVcbiAgICAgIC8vIHRoYXQgd2FzIHRocm93bi4gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgZXJyb3IgaGFuZGxlciB3aWxsIGZpcmUgbW9yZVxuICAgICAgLy8gdGhhbiBvbmNlOyBmb3IgZXhhbXBsZSwgaWYgbm9uLVJlYWN0IGNvZGUgYWxzbyBjYWxscyBgZGlzcGF0Y2hFdmVudGBcbiAgICAgIC8vIGFuZCBhIGhhbmRsZXIgZm9yIHRoYXQgZXZlbnQgdGhyb3dzLiBXZSBzaG91bGQgYmUgcmVzaWxpZW50IHRvIG1vc3Qgb2ZcbiAgICAgIC8vIHRob3NlIGNhc2VzLiBFdmVuIGlmIG91ciBlcnJvciBldmVudCBoYW5kbGVyIGZpcmVzIG1vcmUgdGhhbiBvbmNlLCB0aGVcbiAgICAgIC8vIGxhc3QgZXJyb3IgZXZlbnQgaXMgYWx3YXlzIHVzZWQuIElmIHRoZSBjYWxsYmFjayBhY3R1YWxseSBkb2VzIGVycm9yLFxuICAgICAgLy8gd2Uga25vdyB0aGF0IHRoZSBsYXN0IGVycm9yIGV2ZW50IGlzIHRoZSBjb3JyZWN0IG9uZSwgYmVjYXVzZSBpdCdzIG5vdFxuICAgICAgLy8gcG9zc2libGUgZm9yIGFueXRoaW5nIGVsc2UgdG8gaGF2ZSBoYXBwZW5lZCBpbiBiZXR3ZWVuIG91ciBjYWxsYmFja1xuICAgICAgLy8gZXJyb3JpbmcgYW5kIHRoZSBjb2RlIHRoYXQgZm9sbG93cyB0aGUgYGRpc3BhdGNoRXZlbnRgIGNhbGwgYmVsb3cuIElmXG4gICAgICAvLyB0aGUgY2FsbGJhY2sgZG9lc24ndCBlcnJvciwgYnV0IHRoZSBlcnJvciBldmVudCB3YXMgZmlyZWQsIHdlIGtub3cgdG9cbiAgICAgIC8vIGlnbm9yZSBpdCBiZWNhdXNlIGBkaWRFcnJvcmAgd2lsbCBiZSBmYWxzZSwgYXMgZGVzY3JpYmVkIGFib3ZlLlxuXG5cbiAgICAgIHZhciBlcnJvcjsgLy8gVXNlIHRoaXMgdG8gdHJhY2sgd2hldGhlciB0aGUgZXJyb3IgZXZlbnQgaXMgZXZlciBjYWxsZWQuXG5cbiAgICAgIHZhciBkaWRTZXRFcnJvciA9IGZhbHNlO1xuICAgICAgdmFyIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IGZhbHNlO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVXaW5kb3dFcnJvcihldmVudCkge1xuICAgICAgICBlcnJvciA9IGV2ZW50LmVycm9yO1xuICAgICAgICBkaWRTZXRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVycm9yID09PSBudWxsICYmIGV2ZW50LmNvbG5vID09PSAwICYmIGV2ZW50LmxpbmVubyA9PT0gMCkge1xuICAgICAgICAgIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgIC8vIFNvbWUgb3RoZXIgZXJyb3IgaGFuZGxlciBoYXMgcHJldmVudGVkIGRlZmF1bHQuXG4gICAgICAgICAgLy8gQnJvd3NlcnMgc2lsZW5jZSB0aGUgZXJyb3IgcmVwb3J0IGlmIHRoaXMgaGFwcGVucy5cbiAgICAgICAgICAvLyBXZSdsbCByZW1lbWJlciB0aGlzIHRvIGxhdGVyIGRlY2lkZSB3aGV0aGVyIHRvIGxvZyBpdCBvciBub3QuXG4gICAgICAgICAgaWYgKGVycm9yICE9IG51bGwgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZXJyb3IuX3N1cHByZXNzTG9nZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoIChpbm5lcikgey8vIElnbm9yZS5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ3JlYXRlIGEgZmFrZSBldmVudCB0eXBlLlxuXG5cbiAgICAgIHZhciBldnRUeXBlID0gXCJyZWFjdC1cIiArIChuYW1lID8gbmFtZSA6ICdpbnZva2VndWFyZGVkY2FsbGJhY2snKTsgLy8gQXR0YWNoIG91ciBldmVudCBoYW5kbGVyc1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG4gICAgICBmYWtlTm9kZS5hZGRFdmVudExpc3RlbmVyKGV2dFR5cGUsIGNhbGxDYWxsYmFjaywgZmFsc2UpOyAvLyBTeW5jaHJvbm91c2x5IGRpc3BhdGNoIG91ciBmYWtlIGV2ZW50LiBJZiB0aGUgdXNlci1wcm92aWRlZCBmdW5jdGlvblxuICAgICAgLy8gZXJyb3JzLCBpdCB3aWxsIHRyaWdnZXIgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLlxuXG4gICAgICBldnQuaW5pdEV2ZW50KGV2dFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgICBmYWtlTm9kZS5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cbiAgICAgIGlmICh3aW5kb3dFdmVudERlc2NyaXB0b3IpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ2V2ZW50Jywgd2luZG93RXZlbnREZXNjcmlwdG9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpZENhbGwgJiYgZGlkRXJyb3IpIHtcbiAgICAgICAgaWYgKCFkaWRTZXRFcnJvcikge1xuICAgICAgICAgIC8vIFRoZSBjYWxsYmFjayBlcnJvcmVkLCBidXQgdGhlIGVycm9yIGV2ZW50IG5ldmVyIGZpcmVkLlxuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdBbiBlcnJvciB3YXMgdGhyb3duIGluc2lkZSBvbmUgb2YgeW91ciBjb21wb25lbnRzLCBidXQgUmVhY3QgJyArIFwiZG9lc24ndCBrbm93IHdoYXQgaXQgd2FzLiBUaGlzIGlzIGxpa2VseSBkdWUgdG8gYnJvd3NlciBcIiArICdmbGFraW5lc3MuIFJlYWN0IGRvZXMgaXRzIGJlc3QgdG8gcHJlc2VydmUgdGhlIFwiUGF1c2Ugb24gJyArICdleGNlcHRpb25zXCIgYmVoYXZpb3Igb2YgdGhlIERldlRvb2xzLCB3aGljaCByZXF1aXJlcyBzb21lICcgKyBcIkRFVi1tb2RlIG9ubHkgdHJpY2tzLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlc2UgZG9uJ3Qgd29yayBpbiBcIiArICd5b3VyIGJyb3dzZXIuIFRyeSB0cmlnZ2VyaW5nIHRoZSBlcnJvciBpbiBwcm9kdWN0aW9uIG1vZGUsICcgKyAnb3Igc3dpdGNoaW5nIHRvIGEgbW9kZXJuIGJyb3dzZXIuIElmIHlvdSBzdXNwZWN0IHRoYXQgdGhpcyBpcyAnICsgJ2FjdHVhbGx5IGFuIGlzc3VlIHdpdGggUmVhY3QsIHBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQ3Jvc3NPcmlnaW5FcnJvcikge1xuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiQSBjcm9zcy1vcmlnaW4gZXJyb3Igd2FzIHRocm93bi4gUmVhY3QgZG9lc24ndCBoYXZlIGFjY2VzcyB0byBcIiArICd0aGUgYWN0dWFsIGVycm9yIG9iamVjdCBpbiBkZXZlbG9wbWVudC4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Nyb3Nzb3JpZ2luLWVycm9yIGZvciBtb3JlIGluZm9ybWF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKTtcbiAgICAgIH0gLy8gUmVtb3ZlIG91ciBldmVudCBsaXN0ZW5lcnNcblxuXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG5cbiAgICAgIGlmICghZGlkQ2FsbCkge1xuICAgICAgICAvLyBTb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcsIGFuZCBvdXIgZXZlbnQgd2FzIG5vdCBkaXNwYXRjaGVkLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2NzM0XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY1ODVcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBwcm9kdWN0aW9uIGltcGxlbWVudGF0aW9uLlxuICAgICAgICByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpO1xuICAgICAgICByZXR1cm4gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxudmFyIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwkMSA9IGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGw7XG5cbnZhciBoYXNFcnJvciA9IGZhbHNlO1xudmFyIGNhdWdodEVycm9yID0gbnVsbDsgLy8gVXNlZCBieSBldmVudCBzeXN0ZW0gdG8gY2FwdHVyZS9yZXRocm93IHRoZSBmaXJzdCBlcnJvci5cblxudmFyIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xudmFyIHJldGhyb3dFcnJvciA9IG51bGw7XG52YXIgcmVwb3J0ZXIgPSB7XG4gIG9uRXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59O1xuLyoqXG4gKiBDYWxsIGEgZnVuY3Rpb24gd2hpbGUgZ3VhcmRpbmcgYWdhaW5zdCBlcnJvcnMgdGhhdCBoYXBwZW5zIHdpdGhpbiBpdC5cbiAqIFJldHVybnMgYW4gZXJyb3IgaWYgaXQgdGhyb3dzLCBvdGhlcndpc2UgbnVsbC5cbiAqXG4gKiBJbiBwcm9kdWN0aW9uLCB0aGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgdHJ5LWNhdGNoLiBUaGUgcmVhc29uIHdlIGRvbid0XG4gKiB1c2UgYSB0cnktY2F0Y2ggZGlyZWN0bHkgaXMgc28gdGhhdCB3ZSBjYW4gc3dhcCBvdXQgYSBkaWZmZXJlbnRcbiAqIGltcGxlbWVudGF0aW9uIGluIERFViBtb2RlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHRoZSBndWFyZCB0byB1c2UgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2VcbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50cyBmb3IgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBoYXNFcnJvciA9IGZhbHNlO1xuICBjYXVnaHRFcnJvciA9IG51bGw7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwkMS5hcHBseShyZXBvcnRlciwgYXJndW1lbnRzKTtcbn1cbi8qKlxuICogU2FtZSBhcyBpbnZva2VHdWFyZGVkQ2FsbGJhY2ssIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvciwgaXQgc3RvcmVzXG4gKiBpdCBpbiBhIGdsb2JhbCBzbyBpdCBjYW4gYmUgcmV0aHJvd24gYnkgYHJldGhyb3dDYXVnaHRFcnJvcmAgbGF0ZXIuXG4gKiBUT0RPOiBTZWUgaWYgY2F1Z2h0RXJyb3IgYW5kIHJldGhyb3dFcnJvciBjYW4gYmUgdW5pZmllZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgaWYgKGhhc0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgaWYgKCFoYXNSZXRocm93RXJyb3IpIHtcbiAgICAgIGhhc1JldGhyb3dFcnJvciA9IHRydWU7XG4gICAgICByZXRocm93RXJyb3IgPSBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRHVyaW5nIGV4ZWN1dGlvbiBvZiBndWFyZGVkIGZ1bmN0aW9ucyB3ZSB3aWxsIGNhcHR1cmUgdGhlIGZpcnN0IGVycm9yIHdoaWNoXG4gKiB3ZSB3aWxsIHJldGhyb3cgdG8gYmUgaGFuZGxlZCBieSB0aGUgdG9wIGxldmVsIGVycm9yIGhhbmRsZXIuXG4gKi9cblxuZnVuY3Rpb24gcmV0aHJvd0NhdWdodEVycm9yKCkge1xuICBpZiAoaGFzUmV0aHJvd0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gcmV0aHJvd0Vycm9yO1xuICAgIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xuICAgIHJldGhyb3dFcnJvciA9IG51bGw7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbmZ1bmN0aW9uIGhhc0NhdWdodEVycm9yKCkge1xuICByZXR1cm4gaGFzRXJyb3I7XG59XG5mdW5jdGlvbiBjbGVhckNhdWdodEVycm9yKCkge1xuICBpZiAoaGFzRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBjYXVnaHRFcnJvcjtcbiAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJjbGVhckNhdWdodEVycm9yIHdhcyBjYWxsZWQgYnV0IG5vIGVycm9yIHdhcyBjYXB0dXJlZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGBSZWFjdEluc3RhbmNlTWFwYCBtYWludGFpbnMgYSBtYXBwaW5nIGZyb20gYSBwdWJsaWMgZmFjaW5nIHN0YXRlZnVsXG4gKiBpbnN0YW5jZSAoa2V5KSBhbmQgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uICh2YWx1ZSkuIFRoaXMgYWxsb3dzIHB1YmxpY1xuICogbWV0aG9kcyB0byBhY2NlcHQgdGhlIHVzZXIgZmFjaW5nIGluc3RhbmNlIGFzIGFuIGFyZ3VtZW50IGFuZCBtYXAgdGhlbSBiYWNrXG4gKiB0byBpbnRlcm5hbCBtZXRob2RzLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIG1vZHVsZSBpcyBjdXJyZW50bHkgc2hhcmVkIGFuZCBhc3N1bWVkIHRvIGJlIHN0YXRlbGVzcy5cbiAqIElmIHRoaXMgYmVjb21lcyBhbiBhY3R1YWwgTWFwLCB0aGF0IHdpbGwgYnJlYWsuXG4gKi9cbmZ1bmN0aW9uIGdldChrZXkpIHtcbiAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbHM7XG59XG5mdW5jdGlvbiBoYXMoa2V5KSB7XG4gIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxzICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICBrZXkuX3JlYWN0SW50ZXJuYWxzID0gdmFsdWU7XG59XG5cbi8vIERvbid0IGNoYW5nZSB0aGVzZSB0d28gdmFsdWVzLiBUaGV5J3JlIHVzZWQgYnkgUmVhY3QgRGV2IFRvb2xzLlxudmFyIE5vRmxhZ3MgPVxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgUGVyZm9ybWVkV29yayA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMTsgLy8gWW91IGNhbiBjaGFuZ2UgdGhlIHJlc3QgKGFuZCBhZGQgbW9yZSkuXG5cbnZhciBQbGFjZW1lbnQgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4yO1xudmFyIFVwZGF0ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjQ7XG52YXIgUGxhY2VtZW50QW5kVXBkYXRlID1cbi8qICAgICAgICAgICAqL1xuNjtcbnZhciBEZWxldGlvbiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG44O1xudmFyIENvbnRlbnRSZXNldCA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjE2O1xudmFyIENhbGxiYWNrID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIERpZENhcHR1cmUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjY0O1xudmFyIFJlZiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjEyODtcbnZhciBTbmFwc2hvdCA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4yNTY7XG52YXIgUGFzc2l2ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuNTEyOyAvLyBUT0RPIChlZmZlY3RzKSBSZW1vdmUgdGhpcyBiaXQgb25jZSB0aGUgbmV3IHJlY29uY2lsZXIgaXMgc3luY2VkIHRvIHRoZSBvbGQuXG5cbnZhciBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXYgPVxuLyogICAgICovXG44MTkyO1xudmFyIEh5ZHJhdGluZyA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjEwMjQ7XG52YXIgSHlkcmF0aW5nQW5kVXBkYXRlID1cbi8qICAgICAgICAgICAqL1xuMTAyODsgLy8gUGFzc2l2ZSAmIFVwZGF0ZSAmIENhbGxiYWNrICYgUmVmICYgU25hcHNob3RcblxudmFyIExpZmVjeWNsZUVmZmVjdE1hc2sgPVxuLyogICAgICAgICAgKi9cbjkzMjsgLy8gVW5pb24gb2YgYWxsIGhvc3QgZWZmZWN0c1xuXG52YXIgSG9zdEVmZmVjdE1hc2sgPVxuLyogICAgICAgICAgICAgICAqL1xuMjA0NzsgLy8gVGhlc2UgYXJlIG5vdCByZWFsbHkgc2lkZSBlZmZlY3RzLCBidXQgd2Ugc3RpbGwgcmV1c2UgdGhpcyBmaWVsZC5cblxudmFyIEluY29tcGxldGUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjIwNDg7XG52YXIgU2hvdWxkQ2FwdHVyZSA9XG4vKiAgICAgICAgICAgICAgICAqL1xuNDA5NjtcbnZhciBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlID1cbi8qICovXG4xNjM4NDsgLy8gU3RhdGljIHRhZ3MgZGVzY3JpYmUgYXNwZWN0cyBvZiBhIGZpYmVyIHRoYXQgYXJlIG5vdCBzcGVjaWZpYyB0byBhIHJlbmRlcixcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG5mdW5jdGlvbiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSB7XG4gIHZhciBub2RlID0gZmliZXI7XG4gIHZhciBuZWFyZXN0TW91bnRlZCA9IGZpYmVyO1xuXG4gIGlmICghZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGlzIG1pZ2h0IGJlIGEgbmV3IHRyZWUgdGhhdCBpc24ndCBpbnNlcnRlZFxuICAgIC8vIHlldC4gSWYgaXQgaXMsIHRoZW4gaXQgd2lsbCBoYXZlIGEgcGVuZGluZyBpbnNlcnRpb24gZWZmZWN0IG9uIGl0LlxuICAgIHZhciBuZXh0Tm9kZSA9IG5vZGU7XG5cbiAgICBkbyB7XG4gICAgICBub2RlID0gbmV4dE5vZGU7XG5cbiAgICAgIGlmICgobm9kZS5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIGluc2VydGlvbiBvciBpbi1wcm9ncmVzcyBoeWRyYXRpb24uIFRoZSBuZWFyZXN0IHBvc3NpYmxlXG4gICAgICAgIC8vIG1vdW50ZWQgZmliZXIgaXMgdGhlIHBhcmVudCBidXQgd2UgbmVlZCB0byBjb250aW51ZSB0byBmaWd1cmUgb3V0XG4gICAgICAgIC8vIGlmIHRoYXQgb25lIGlzIHN0aWxsIG1vdW50ZWQuXG4gICAgICAgIG5lYXJlc3RNb3VudGVkID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5leHROb2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobmV4dE5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChub2RlLnJldHVybikge1xuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChub2RlLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGlzIHdhcyBhIG5lc3RlZCBIb3N0Um9vdCB3aGVuIHVzZWQgd2l0aFxuICAgIC8vIHJlbmRlckNvbnRhaW5lckludG9TdWJ0cmVlLlxuICAgIHJldHVybiBuZWFyZXN0TW91bnRlZDtcbiAgfSAvLyBJZiB3ZSBkaWRuJ3QgaGl0IHRoZSByb290LCB0aGF0IG1lYW5zIHRoYXQgd2UncmUgaW4gYW4gZGlzY29ubmVjdGVkIHRyZWVcbiAgLy8gdGhhdCBoYXMgYmVlbiB1bm1vdW50ZWQuXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHN1c3BlbnNlU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRDb250YWluZXJGcm9tRmliZXIoZmliZXIpIHtcbiAgcmV0dXJuIGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QgPyBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA6IG51bGw7XG59XG5mdW5jdGlvbiBpc0ZpYmVyTW91bnRlZChmaWJlcikge1xuICByZXR1cm4gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyO1xufVxuZnVuY3Rpb24gaXNNb3VudGVkKGNvbXBvbmVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuICAgICAgdmFyIGluc3RhbmNlID0gb3duZXJGaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmICghaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyKSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBhY2Nlc3NpbmcgaXNNb3VudGVkIGluc2lkZSBpdHMgcmVuZGVyKCkgZnVuY3Rpb24uICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKG93bmVyRmliZXIudHlwZSkgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gZ2V0KGNvbXBvbmVudCk7XG5cbiAgaWYgKCFmaWJlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGFzc2VydElzTW91bnRlZChmaWJlcikge1xuICBpZiAoIShnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKGZpYmVyKSB7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKCFhbHRlcm5hdGUpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUsIHRoZW4gd2Ugb25seSBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIG1vdW50ZWQuXG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcik7XG5cbiAgICBpZiAoIShuZWFyZXN0TW91bnRlZCAhPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBmaWJlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIElmIHdlIGhhdmUgdHdvIHBvc3NpYmxlIGJyYW5jaGVzLCB3ZSdsbCB3YWxrIGJhY2t3YXJkcyB1cCB0byB0aGUgcm9vdFxuICAvLyB0byBzZWUgd2hhdCBwYXRoIHRoZSByb290IHBvaW50cyB0by4gT24gdGhlIHdheSB3ZSBtYXkgaGl0IG9uZSBvZiB0aGVcbiAgLy8gc3BlY2lhbCBjYXNlcyBhbmQgd2UnbGwgZGVhbCB3aXRoIHRoZW0uXG5cblxuICB2YXIgYSA9IGZpYmVyO1xuICB2YXIgYiA9IGFsdGVybmF0ZTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBwYXJlbnRBID0gYS5yZXR1cm47XG5cbiAgICBpZiAocGFyZW50QSA9PT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgYXQgdGhlIHJvb3QuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgcGFyZW50QiA9IHBhcmVudEEuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKHBhcmVudEIgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZXJlIGlzIG5vIGFsdGVybmF0ZS4gVGhpcyBpcyBhbiB1bnVzdWFsIGNhc2UuIEN1cnJlbnRseSwgaXQgb25seVxuICAgICAgLy8gaGFwcGVucyB3aGVuIGEgU3VzcGVuc2UgY29tcG9uZW50IGlzIGhpZGRlbi4gQW4gZXh0cmEgZnJhZ21lbnQgZmliZXJcbiAgICAgIC8vIGlzIGluc2VydGVkIGluIGJldHdlZW4gdGhlIFN1c3BlbnNlIGZpYmVyIGFuZCBpdHMgY2hpbGRyZW4uIFNraXBcbiAgICAgIC8vIG92ZXIgdGhpcyBleHRyYSBmcmFnbWVudCBmaWJlciBhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBwYXJlbnQuXG4gICAgICB2YXIgbmV4dFBhcmVudCA9IHBhcmVudEEucmV0dXJuO1xuXG4gICAgICBpZiAobmV4dFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICBhID0gYiA9IG5leHRQYXJlbnQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBJZiB0aGVyZSdzIG5vIHBhcmVudCwgd2UncmUgYXQgdGhlIHJvb3QuXG5cblxuICAgICAgYnJlYWs7XG4gICAgfSAvLyBJZiBib3RoIGNvcGllcyBvZiB0aGUgcGFyZW50IGZpYmVyIHBvaW50IHRvIHRoZSBzYW1lIGNoaWxkLCB3ZSBjYW5cbiAgICAvLyBhc3N1bWUgdGhhdCB0aGUgY2hpbGQgaXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW4gd2UgYmFpbG91dCBvbiBsb3dcbiAgICAvLyBwcmlvcml0eTogdGhlIGJhaWxlZCBvdXQgZmliZXIncyBjaGlsZCByZXVzZXMgdGhlIGN1cnJlbnQgY2hpbGQuXG5cblxuICAgIGlmIChwYXJlbnRBLmNoaWxkID09PSBwYXJlbnRCLmNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09PSBhKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQiBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgIHJldHVybiBhbHRlcm5hdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9IC8vIFdlIHNob3VsZCBuZXZlciBoYXZlIGFuIGFsdGVybmF0ZSBmb3IgYW55IG1vdW50aW5nIG5vZGUuIFNvIHRoZSBvbmx5XG4gICAgICAvLyB3YXkgdGhpcyBjb3VsZCBwb3NzaWJseSBoYXBwZW4gaXMgaWYgdGhpcyB3YXMgdW5tb3VudGVkLCBpZiBhdCBhbGwuXG5cblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYS5yZXR1cm4gIT09IGIucmV0dXJuKSB7XG4gICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXIgb2YgQSBhbmQgdGhlIHJldHVybiBwb2ludGVyIG9mIEIgcG9pbnQgdG8gZGlmZmVyZW50XG4gICAgICAvLyBmaWJlcnMuIFdlIGFzc3VtZSB0aGF0IHJldHVybiBwb2ludGVycyBuZXZlciBjcmlzcy1jcm9zcywgc28gQSBtdXN0XG4gICAgICAvLyBiZWxvbmcgdG8gdGhlIGNoaWxkIHNldCBvZiBBLnJldHVybiwgYW5kIEIgbXVzdCBiZWxvbmcgdG8gdGhlIGNoaWxkXG4gICAgICAvLyBzZXQgb2YgQi5yZXR1cm4uXG4gICAgICBhID0gcGFyZW50QTtcbiAgICAgIGIgPSBwYXJlbnRCO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXJzIHBvaW50IHRvIHRoZSBzYW1lIGZpYmVyLiBXZSdsbCBoYXZlIHRvIHVzZSB0aGVcbiAgICAgIC8vIGRlZmF1bHQsIHNsb3cgcGF0aDogc2NhbiB0aGUgY2hpbGQgc2V0cyBvZiBlYWNoIHBhcmVudCBhbHRlcm5hdGUgdG8gc2VlXG4gICAgICAvLyB3aGljaCBjaGlsZCBiZWxvbmdzIHRvIHdoaWNoIHNldC5cbiAgICAgIC8vXG4gICAgICAvLyBTZWFyY2ggcGFyZW50IEEncyBjaGlsZCBzZXRcbiAgICAgIHZhciBkaWRGaW5kQ2hpbGQgPSBmYWxzZTtcbiAgICAgIHZhciBfY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoX2NoaWxkKSB7XG4gICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgIH1cblxuICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgLy8gU2VhcmNoIHBhcmVudCBCJ3MgY2hpbGQgc2V0XG4gICAgICAgIF9jaGlsZCA9IHBhcmVudEIuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2hpbGQgd2FzIG5vdCBmb3VuZCBpbiBlaXRoZXIgcGFyZW50IHNldC4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHBvaW50ZXIuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEoYS5hbHRlcm5hdGUgPT09IGIpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJldHVybiBmaWJlcnMgc2hvdWxkIGFsd2F5cyBiZSBlYWNoIG90aGVycycgYWx0ZXJuYXRlcy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBJZiB0aGUgcm9vdCBpcyBub3QgYSBob3N0IGNvbnRhaW5lciwgd2UncmUgaW4gYSBkaXNjb25uZWN0ZWQgdHJlZS4gSS5lLlxuICAvLyB1bm1vdW50ZWQuXG5cblxuICBpZiAoIShhLnRhZyA9PT0gSG9zdFJvb3QpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGEuc3RhdGVOb2RlLmN1cnJlbnQgPT09IGEpIHtcbiAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIE90aGVyd2lzZSBCIGhhcyB0byBiZSBjdXJyZW50IGJyYW5jaC5cblxuXG4gIHJldHVybiBhbHRlcm5hdGU7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcihwYXJlbnQpIHtcbiAgdmFyIGN1cnJlbnRQYXJlbnQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChwYXJlbnQpO1xuXG4gIGlmICghY3VycmVudFBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE5leHQgd2UnbGwgZHJpbGwgZG93biB0aGlzIGNvbXBvbmVudCB0byBmaW5kIHRoZSBmaXJzdCBIb3N0Q29tcG9uZW50L1RleHQuXG5cblxuICB2YXIgbm9kZSA9IGN1cnJlbnRQYXJlbnQ7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlICghbm9kZS5zaWJsaW5nKSB7XG4gICAgICBpZiAoIW5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH0gLy8gRmxvdyBuZWVkcyB0aGUgcmV0dXJuIG51bGwgaGVyZSwgYnV0IEVTTGludCBjb21wbGFpbnMgYWJvdXQgaXQuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnJlYWNoYWJsZVxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcldpdGhOb1BvcnRhbHMocGFyZW50KSB7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcblxuICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuXG5cbiAgdmFyIG5vZGUgPSBjdXJyZW50UGFyZW50O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCB8fCBlbmFibGVGdW5kYW1lbnRhbEFQSSApIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAmJiBub2RlLnRhZyAhPT0gSG9zdFBvcnRhbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKCFub2RlLnNpYmxpbmcpIHtcbiAgICAgIGlmICghbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfSAvLyBGbG93IG5lZWRzIHRoZSByZXR1cm4gbnVsbCBoZXJlLCBidXQgRVNMaW50IGNvbXBsYWlucyBhYm91dCBpdC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVucmVhY2hhYmxlXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGRvZXNGaWJlckNvbnRhaW4ocGFyZW50RmliZXIsIGNoaWxkRmliZXIpIHtcbiAgdmFyIG5vZGUgPSBjaGlsZEZpYmVyO1xuICB2YXIgcGFyZW50RmliZXJBbHRlcm5hdGUgPSBwYXJlbnRGaWJlci5hbHRlcm5hdGU7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZSA9PT0gcGFyZW50RmliZXIgfHwgbm9kZSA9PT0gcGFyZW50RmliZXJBbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb247XG5mdW5jdGlvbiBzZXRBdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKGZuKSB7XG4gIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24gPSBmbjtcbn1cbnZhciBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbjtcbmZ1bmN0aW9uIHNldEF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKGZuKSB7XG4gIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uID0gZm47XG59XG52YXIgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5O1xuZnVuY3Rpb24gc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KGZuKSB7XG4gIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSA9IGZuO1xufVxudmFyIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5O1xuZnVuY3Rpb24gc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkoZm4pIHtcbiAgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkgPSBmbjtcbn0gLy8gVE9ETzogVXBncmFkZSB0aGlzIGRlZmluaXRpb24gb25jZSB3ZSdyZSBvbiBhIG5ld2VyIHZlcnNpb24gb2YgRmxvdyB0aGF0XG52YXIgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IGZhbHNlOyAvLyBUaGUgcXVldWUgb2YgZGlzY3JldGUgZXZlbnRzIHRvIGJlIHJlcGxheWVkLlxuXG52YXIgcXVldWVkRGlzY3JldGVFdmVudHMgPSBbXTsgLy8gSW5kaWNhdGVzIGlmIGFueSBjb250aW51b3VzIGV2ZW50IHRhcmdldHMgYXJlIG5vbi1udWxsIGZvciBlYXJseSBiYWlsb3V0LlxuLy8gaWYgdGhlIGxhc3QgdGFyZ2V0IHdhcyBkZWh5ZHJhdGVkLlxuXG52YXIgcXVldWVkRm9jdXMgPSBudWxsO1xudmFyIHF1ZXVlZERyYWcgPSBudWxsO1xudmFyIHF1ZXVlZE1vdXNlID0gbnVsbDsgLy8gRm9yIHBvaW50ZXIgZXZlbnRzIHRoZXJlIGNhbiBiZSBvbmUgbGF0ZXN0IGV2ZW50IHBlciBwb2ludGVySWQuXG5cbnZhciBxdWV1ZWRQb2ludGVycyA9IG5ldyBNYXAoKTtcbnZhciBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMgPSBuZXcgTWFwKCk7IC8vIFdlIGNvdWxkIGNvbnNpZGVyIHJlcGxheWluZyBzZWxlY3Rpb25jaGFuZ2UgYW5kIHRvdWNobW92ZXMgdG9vLlxuXG52YXIgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzID0gW107XG5mdW5jdGlvbiBoYXNRdWV1ZWREaXNjcmV0ZUV2ZW50cygpIHtcbiAgcmV0dXJuIHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDA7XG59XG52YXIgZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzID0gWydtb3VzZWRvd24nLCAnbW91c2V1cCcsICd0b3VjaGNhbmNlbCcsICd0b3VjaGVuZCcsICd0b3VjaHN0YXJ0JywgJ2F1eGNsaWNrJywgJ2RibGNsaWNrJywgJ3BvaW50ZXJjYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlcnVwJywgJ2RyYWdlbmQnLCAnZHJhZ3N0YXJ0JywgJ2Ryb3AnLCAnY29tcG9zaXRpb25lbmQnLCAnY29tcG9zaXRpb25zdGFydCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ2lucHV0JywgJ3RleHRJbnB1dCcsIC8vIEludGVudGlvbmFsbHkgY2FtZWxDYXNlXG4nY29weScsICdjdXQnLCAncGFzdGUnLCAnY2xpY2snLCAnY2hhbmdlJywgJ2NvbnRleHRtZW51JywgJ3Jlc2V0JywgJ3N1Ym1pdCddO1xuZnVuY3Rpb24gaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChldmVudFR5cGUpIHtcbiAgcmV0dXJuIGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cy5pbmRleE9mKGV2ZW50VHlwZSkgPiAtMTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgYmxvY2tlZE9uOiBibG9ja2VkT24sXG4gICAgZG9tRXZlbnROYW1lOiBkb21FdmVudE5hbWUsXG4gICAgZXZlbnRTeXN0ZW1GbGFnczogZXZlbnRTeXN0ZW1GbGFncyB8IElTX1JFUExBWUVELFxuICAgIG5hdGl2ZUV2ZW50OiBuYXRpdmVFdmVudCxcbiAgICB0YXJnZXRDb250YWluZXJzOiBbdGFyZ2V0Q29udGFpbmVyXVxuICB9O1xufVxuXG5mdW5jdGlvbiBxdWV1ZURpc2NyZXRlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgdmFyIHF1ZXVlZEV2ZW50ID0gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgcXVldWVkRGlzY3JldGVFdmVudHMucHVzaChxdWV1ZWRFdmVudCk7XG59IC8vIFJlc2V0cyB0aGUgcmVwbGF5aW5nIGZvciB0aGlzIHR5cGUgb2YgY29udGludW91cyBldmVudCB0byBubyBldmVudC5cblxuZnVuY3Rpb24gY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgcXVldWVkRm9jdXMgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgIGNhc2UgJ2RyYWdsZWF2ZSc6XG4gICAgICBxdWV1ZWREcmFnID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICBjYXNlICdwb2ludGVyb3V0JzpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlcnMuZGVsZXRlKHBvaW50ZXJJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ2xvc3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgICB7XG4gICAgICAgIHZhciBfcG9pbnRlcklkID0gbmF0aXZlRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZGVsZXRlKF9wb2ludGVySWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KGV4aXN0aW5nUXVldWVkRXZlbnQsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChleGlzdGluZ1F1ZXVlZEV2ZW50ID09PSBudWxsIHx8IGV4aXN0aW5nUXVldWVkRXZlbnQubmF0aXZlRXZlbnQgIT09IG5hdGl2ZUV2ZW50KSB7XG4gICAgdmFyIHF1ZXVlZEV2ZW50ID0gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcblxuICAgIGlmIChibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIHZhciBfZmliZXIyID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShibG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICAvLyBBdHRlbXB0IHRvIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZiB0aGlzIHRhcmdldC5cbiAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oX2ZpYmVyMik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXVlZEV2ZW50O1xuICB9IC8vIElmIHdlIGhhdmUgYWxyZWFkeSBxdWV1ZWQgdGhpcyBleGFjdCBldmVudCwgdGhlbiBpdCdzIGJlY2F1c2VcbiAgLy8gdGhlIGRpZmZlcmVudCBldmVudCBzeXN0ZW1zIGhhdmUgZGlmZmVyZW50IERPTSBldmVudCBsaXN0ZW5lcnMuXG4gIC8vIFdlIGNhbiBhY2N1bXVsYXRlIHRoZSBmbGFncywgYW5kIHRoZSB0YXJnZXRDb250YWluZXJzLCBhbmRcbiAgLy8gc3RvcmUgYSBzaW5nbGUgZXZlbnQgdG8gYmUgcmVwbGF5ZWQuXG5cblxuICBleGlzdGluZ1F1ZXVlZEV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MgfD0gZXZlbnRTeXN0ZW1GbGFncztcbiAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBleGlzdGluZ1F1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgaWYgKHRhcmdldENvbnRhaW5lciAhPT0gbnVsbCAmJiB0YXJnZXRDb250YWluZXJzLmluZGV4T2YodGFyZ2V0Q29udGFpbmVyKSA9PT0gLTEpIHtcbiAgICB0YXJnZXRDb250YWluZXJzLnB1c2godGFyZ2V0Q29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBleGlzdGluZ1F1ZXVlZEV2ZW50O1xufVxuXG5mdW5jdGlvbiBxdWV1ZUlmQ29udGludW91c0V2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIFRoZXNlIHNldCByZWxhdGVkVGFyZ2V0IHRvIG51bGwgYmVjYXVzZSB0aGUgcmVwbGF5ZWQgZXZlbnQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIHdlXG4gIC8vIG1vdmVkIGZyb20gb3V0c2lkZSB0aGUgd2luZG93IChubyB0YXJnZXQpIG9udG8gdGhlIHRhcmdldCBvbmNlIGl0IGh5ZHJhdGVzLlxuICAvLyBJbnN0ZWFkIG9mIG11dGF0aW5nIHdlIGNvdWxkIGNsb25lIHRoZSBldmVudC5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGZvY3VzRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkRm9jdXMgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZEZvY3VzLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBmb2N1c0V2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgZHJhZ0V2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHF1ZXVlZERyYWcgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZERyYWcsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIGRyYWdFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIG1vdXNlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkTW91c2UgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZE1vdXNlLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBtb3VzZUV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBwb2ludGVyRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgdmFyIHBvaW50ZXJJZCA9IHBvaW50ZXJFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJzLnNldChwb2ludGVySWQsIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkUG9pbnRlcnMuZ2V0KHBvaW50ZXJJZCkgfHwgbnVsbCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgcG9pbnRlckV2ZW50KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgICAge1xuICAgICAgICB2YXIgX3BvaW50ZXJFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICB2YXIgX3BvaW50ZXJJZDIgPSBfcG9pbnRlckV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLnNldChfcG9pbnRlcklkMiwgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZ2V0KF9wb2ludGVySWQyKSB8fCBudWxsLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBfcG9pbnRlckV2ZW50KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBDaGVjayBpZiB0aGlzIHRhcmdldCBpcyB1bmJsb2NrZWQuIFJldHVybnMgdHJ1ZSBpZiBpdCdzIHVuYmxvY2tlZC5cblxuZnVuY3Rpb24gYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHF1ZXVlZFRhcmdldCkge1xuICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNoYXJlcyBhIGxvdCBvZiBsb2dpYyB3aXRoIGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQuXG4gIC8vIFRyeSB0byB1bmlmeSB0aGVtLiBJdCdzIGEgYml0IHRyaWNreSBzaW5jZSBpdCB3b3VsZCByZXF1aXJlIHR3byByZXR1cm5cbiAgLy8gdmFsdWVzLlxuICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHF1ZXVlZFRhcmdldC50YXJnZXQpO1xuXG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcblxuICAgICAgaWYgKHRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UncmUgYmxvY2tlZCBvbiBoeWRyYXRpbmcgdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICAvLyBJbmNyZWFzZSBpdHMgcHJpb3JpdHkuXG4gICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IGluc3RhbmNlO1xuICAgICAgICAgIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5KHF1ZXVlZFRhcmdldC5sYW5lUHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkocXVldWVkVGFyZ2V0LnByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IGdldENvbnRhaW5lckZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7IC8vIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgd2F5IHRvIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZlxuICAgICAgICAgIC8vIGEgcm9vdCBvdGhlciB0aGFuIHN5bmMuXG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkge1xuICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBxdWV1ZWRFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gIHdoaWxlICh0YXJnZXRDb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGFyZ2V0Q29udGFpbmVyc1swXTtcbiAgICB2YXIgbmV4dEJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQocXVldWVkRXZlbnQuZG9tRXZlbnROYW1lLCBxdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIHF1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50KTtcblxuICAgIGlmIChuZXh0QmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLiBUcnkgYWdhaW4gbGF0ZXIuXG4gICAgICB2YXIgX2ZpYmVyMyA9IGdldEluc3RhbmNlRnJvbU5vZGUobmV4dEJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXIzICE9PSBudWxsKSB7XG4gICAgICAgIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKF9maWJlcjMpO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gVGhpcyB0YXJnZXQgY29udGFpbmVyIHdhcyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4gVHJ5IHRoZSBuZXh0LlxuXG5cbiAgICB0YXJnZXRDb250YWluZXJzLnNoaWZ0KCk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKHF1ZXVlZEV2ZW50LCBrZXksIG1hcCkge1xuICBpZiAoYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkpIHtcbiAgICBtYXAuZGVsZXRlKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGF5VW5ibG9ja2VkRXZlbnRzKCkge1xuICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gZmFsc2U7IC8vIEZpcnN0IHJlcGxheSBkaXNjcmV0ZSBldmVudHMuXG5cbiAgd2hpbGUgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dERpc2NyZXRlRXZlbnQgPSBxdWV1ZWREaXNjcmV0ZUV2ZW50c1swXTtcblxuICAgIGlmIChuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICAvLyBJbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhpcyBib3VuZGFyeSB0byB1bmJsb2NrXG4gICAgICAvLyB0aGUgbmV4dCBkaXNjcmV0ZSBldmVudC5cbiAgICAgIHZhciBfZmliZXI0ID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyNCAhPT0gbnVsbCkge1xuICAgICAgICBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKF9maWJlcjQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IG5leHREaXNjcmV0ZUV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgICB3aGlsZSAodGFyZ2V0Q29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGFyZ2V0Q29udGFpbmVyc1swXTtcbiAgICAgIHZhciBuZXh0QmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChuZXh0RGlzY3JldGVFdmVudC5kb21FdmVudE5hbWUsIG5leHREaXNjcmV0ZUV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmV4dERpc2NyZXRlRXZlbnQubmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAobmV4dEJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLiBUcnkgYWdhaW4gbGF0ZXIuXG4gICAgICAgIG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiA9IG5leHRCbG9ja2VkT247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBUaGlzIHRhcmdldCBjb250YWluZXIgd2FzIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkLiBUcnkgdGhlIG5leHQuXG5cblxuICAgICAgdGFyZ2V0Q29udGFpbmVycy5zaGlmdCgpO1xuICAgIH1cblxuICAgIGlmIChuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3ZlIHN1Y2Nlc3NmdWxseSByZXBsYXllZCB0aGUgZmlyc3QgZXZlbnQuIExldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgICBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5zaGlmdCgpO1xuICAgIH1cbiAgfSAvLyBOZXh0IHJlcGxheSBhbnkgY29udGludW91cyBldmVudHMuXG5cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRGb2N1cykpIHtcbiAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZERyYWcpKSB7XG4gICAgcXVldWVkRHJhZyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkTW91c2UgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRNb3VzZSkpIHtcbiAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gIH1cblxuICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKSB7XG4gIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG51bGw7XG5cbiAgICBpZiAoIWhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQpIHtcbiAgICAgIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSB0cnVlOyAvLyBTY2hlZHVsZSBhIGNhbGxiYWNrIHRvIGF0dGVtcHQgcmVwbGF5aW5nIGFzIG1hbnkgZXZlbnRzIGFzIGFyZVxuICAgICAgLy8gbm93IHVuYmxvY2tlZC4gVGhpcyBmaXJzdCBtaWdodCBub3QgYWN0dWFsbHkgYmUgdW5ibG9ja2VkIHlldC5cbiAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGl0IGVhcmx5IHRvIGF2b2lkIHNjaGVkdWxpbmcgYW4gdW5uZWNlc3NhcnkgY2FsbGJhY2suXG5cbiAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSwgcmVwbGF5VW5ibG9ja2VkRXZlbnRzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV0cnlJZkJsb2NrZWRPbih1bmJsb2NrZWQpIHtcbiAgLy8gTWFyayBhbnl0aGluZyB0aGF0IHdhcyBibG9ja2VkIG9uIHRoaXMgYXMgbm8gbG9uZ2VyIGJsb2NrZWRcbiAgLy8gYW5kIGVsaWdpYmxlIGZvciBhIHJlcGxheS5cbiAgaWYgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRGlzY3JldGVFdmVudHNbMF0sIHVuYmxvY2tlZCk7IC8vIFRoaXMgaXMgYSBleHBvbmVudGlhbCBzZWFyY2ggZm9yIGVhY2ggYm91bmRhcnkgdGhhdCBjb21taXRzLiBJIHRoaW5rIGl0J3NcbiAgICAvLyB3b3J0aCBpdCBiZWNhdXNlIHdlIGV4cGVjdCB2ZXJ5IGZldyBkaXNjcmV0ZSBldmVudHMgdG8gcXVldWUgdXAgYW5kIG9uY2VcbiAgICAvLyB3ZSBhcmUgYWN0dWFsbHkgZnVsbHkgdW5ibG9ja2VkIGl0IHdpbGwgYmUgZmFzdCB0byByZXBsYXkgdGhlbS5cblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWV1ZWRFdmVudCA9IHF1ZXVlZERpc2NyZXRlRXZlbnRzW2ldO1xuXG4gICAgICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRm9jdXMsIHVuYmxvY2tlZCk7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWREcmFnLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgaWYgKHF1ZXVlZE1vdXNlICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZE1vdXNlLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgdmFyIHVuYmxvY2sgPSBmdW5jdGlvbiAocXVldWVkRXZlbnQpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpO1xuICB9O1xuXG4gIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2godW5ibG9jayk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKHVuYmxvY2spO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIHF1ZXVlZFRhcmdldCA9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1tfaV07XG5cbiAgICBpZiAocXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB3aGlsZSAocXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dEV4cGxpY2l0VGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzWzBdO1xuXG4gICAgaWYgKG5leHRFeHBsaWNpdFRhcmdldC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KG5leHRFeHBsaWNpdFRhcmdldCk7XG5cbiAgICAgIGlmIChuZXh0RXhwbGljaXRUYXJnZXQuYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3JlIHVuYmxvY2tlZC5cbiAgICAgICAgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBEaXNjcmV0ZUV2ZW50ID0gMDtcbnZhciBVc2VyQmxvY2tpbmdFdmVudCA9IDE7XG52YXIgQ29udGludW91c0V2ZW50ID0gMjtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG1hcHBpbmcgb2Ygc3RhbmRhcmQgdmVuZG9yIHByZWZpeGVzIHVzaW5nIHRoZSBkZWZpbmVkIHN0eWxlIHByb3BlcnR5IGFuZCBldmVudCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHlsZVByb3BcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gbWFrZVByZWZpeE1hcChzdHlsZVByb3AsIGV2ZW50TmFtZSkge1xuICB2YXIgcHJlZml4ZXMgPSB7fTtcbiAgcHJlZml4ZXNbc3R5bGVQcm9wLnRvTG93ZXJDYXNlKCldID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHByZWZpeGVzWydXZWJraXQnICsgc3R5bGVQcm9wXSA9ICd3ZWJraXQnICsgZXZlbnROYW1lO1xuICBwcmVmaXhlc1snTW96JyArIHN0eWxlUHJvcF0gPSAnbW96JyArIGV2ZW50TmFtZTtcbiAgcmV0dXJuIHByZWZpeGVzO1xufVxuLyoqXG4gKiBBIGxpc3Qgb2YgZXZlbnQgbmFtZXMgdG8gYSBjb25maWd1cmFibGUgbGlzdCBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cblxuXG52YXIgdmVuZG9yUHJlZml4ZXMgPSB7XG4gIGFuaW1hdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkVuZCcpLFxuICBhbmltYXRpb25pdGVyYXRpb246IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25JdGVyYXRpb24nKSxcbiAgYW5pbWF0aW9uc3RhcnQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25TdGFydCcpLFxuICB0cmFuc2l0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdUcmFuc2l0aW9uJywgJ1RyYW5zaXRpb25FbmQnKVxufTtcbi8qKlxuICogRXZlbnQgbmFtZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBkZXRlY3RlZCBhbmQgcHJlZml4ZWQgKGlmIGFwcGxpY2FibGUpLlxuICovXG5cbnZhciBwcmVmaXhlZEV2ZW50TmFtZXMgPSB7fTtcbi8qKlxuICogRWxlbWVudCB0byBjaGVjayBmb3IgcHJlZml4ZXMgb24uXG4gKi9cblxudmFyIHN0eWxlID0ge307XG4vKipcbiAqIEJvb3RzdHJhcCBpZiBhIERPTSBleGlzdHMuXG4gKi9cblxuaWYgKGNhblVzZURPTSkge1xuICBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlOyAvLyBPbiBzb21lIHBsYXRmb3JtcywgaW4gcGFydGljdWxhciBzb21lIHJlbGVhc2VzIG9mIEFuZHJvaWQgNC54LFxuICAvLyB0aGUgdW4tcHJlZml4ZWQgXCJhbmltYXRpb25cIiBhbmQgXCJ0cmFuc2l0aW9uXCIgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGVcbiAgLy8gc3R5bGUgb2JqZWN0IGJ1dCB0aGUgZXZlbnRzIHRoYXQgZmlyZSB3aWxsIHN0aWxsIGJlIHByZWZpeGVkLCBzbyB3ZSBuZWVkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZSB1bi1wcmVmaXhlZCBldmVudHMgYXJlIHVzYWJsZSwgYW5kIGlmIG5vdCByZW1vdmUgdGhlbSBmcm9tIHRoZSBtYXAuXG5cbiAgaWYgKCEoJ0FuaW1hdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbmVuZC5hbmltYXRpb247XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb247XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbjtcbiAgfSAvLyBTYW1lIGFzIGFib3ZlXG5cblxuICBpZiAoISgnVHJhbnNpdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbjtcbiAgfVxufVxuLyoqXG4gKiBBdHRlbXB0cyB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgdmVuZG9yIHByZWZpeGVkIGV2ZW50IG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKGV2ZW50TmFtZSkge1xuICBpZiAocHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV07XG4gIH0gZWxzZSBpZiAoIXZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gZXZlbnROYW1lO1xuICB9XG5cbiAgdmFyIHByZWZpeE1hcCA9IHZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV07XG5cbiAgZm9yICh2YXIgc3R5bGVQcm9wIGluIHByZWZpeE1hcCkge1xuICAgIGlmIChwcmVmaXhNYXAuaGFzT3duUHJvcGVydHkoc3R5bGVQcm9wKSAmJiBzdHlsZVByb3AgaW4gc3R5bGUpIHtcbiAgICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSA9IHByZWZpeE1hcFtzdHlsZVByb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBldmVudE5hbWU7XG59XG5cbnZhciBBTklNQVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbmVuZCcpO1xudmFyIEFOSU1BVElPTl9JVEVSQVRJT04gPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uaXRlcmF0aW9uJyk7XG52YXIgQU5JTUFUSU9OX1NUQVJUID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbnN0YXJ0Jyk7XG52YXIgVFJBTlNJVElPTl9FTkQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgndHJhbnNpdGlvbmVuZCcpO1xuXG52YXIgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKCk7XG52YXIgZXZlbnRQcmlvcml0aWVzID0gbmV3IE1hcCgpOyAvLyBXZSBzdG9yZSBtb3N0IG9mIHRoZSBldmVudHMgaW4gdGhpcyBtb2R1bGUgaW4gcGFpcnMgb2YgdHdvIHN0cmluZ3Mgc28gd2UgY2FuIHJlLXVzZVxuLy8gdGhlIGNvZGUgcmVxdWlyZWQgdG8gYXBwbHkgdGhlIHNhbWUgbG9naWMgZm9yIGV2ZW50IHByaW9yaXRpemF0aW9uIGFuZCB0aGF0IG9mIHRoZVxuLy8gU2ltcGxlRXZlbnRQbHVnaW4uIFRoaXMgY29tcGxpY2F0ZXMgdGhpbmdzIHNsaWdodGx5LCBidXQgdGhlIGFpbSBpcyB0byByZWR1Y2UgY29kZVxuLy8gZHVwbGljYXRpb24gKGZvciB3aGljaCB0aGVyZSB3b3VsZCBiZSBxdWl0ZSBhIGJpdCkuIEZvciB0aGUgZXZlbnRzIHRoYXQgYXJlIG5vdCBuZWVkZWRcbi8vIGZvciB0aGUgU2ltcGxlRXZlbnRQbHVnaW4gKG90aGVyRGlzY3JldGVFdmVudHMpIHdlIHByb2Nlc3MgdGhlbSBzZXBhcmF0ZWx5IGFzIGFuXG4vLyBhcnJheSBvZiB0b3AgbGV2ZWwgZXZlbnRzLlxuLy8gTGFzdGx5LCB3ZSBpZ25vcmUgcHJldHRpZXIgc28gd2UgY2FuIGtlZXAgdGhlIGZvcm1hdHRpbmcgc2FuZS5cbi8vIHByZXR0aWVyLWlnbm9yZVxuXG52YXIgZGlzY3JldGVFdmVudFBhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4gPSBbJ2NhbmNlbCcsICdjYW5jZWwnLCAnY2xpY2snLCAnY2xpY2snLCAnY2xvc2UnLCAnY2xvc2UnLCAnY29udGV4dG1lbnUnLCAnY29udGV4dE1lbnUnLCAnY29weScsICdjb3B5JywgJ2N1dCcsICdjdXQnLCAnYXV4Y2xpY2snLCAnYXV4Q2xpY2snLCAnZGJsY2xpY2snLCAnZG91YmxlQ2xpY2snLCAvLyBDYXJlZnVsIVxuJ2RyYWdlbmQnLCAnZHJhZ0VuZCcsICdkcmFnc3RhcnQnLCAnZHJhZ1N0YXJ0JywgJ2Ryb3AnLCAnZHJvcCcsICdmb2N1c2luJywgJ2ZvY3VzJywgLy8gQ2FyZWZ1bCFcbidmb2N1c291dCcsICdibHVyJywgLy8gQ2FyZWZ1bCFcbidpbnB1dCcsICdpbnB1dCcsICdpbnZhbGlkJywgJ2ludmFsaWQnLCAna2V5ZG93bicsICdrZXlEb3duJywgJ2tleXByZXNzJywgJ2tleVByZXNzJywgJ2tleXVwJywgJ2tleVVwJywgJ21vdXNlZG93bicsICdtb3VzZURvd24nLCAnbW91c2V1cCcsICdtb3VzZVVwJywgJ3Bhc3RlJywgJ3Bhc3RlJywgJ3BhdXNlJywgJ3BhdXNlJywgJ3BsYXknLCAncGxheScsICdwb2ludGVyY2FuY2VsJywgJ3BvaW50ZXJDYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlckRvd24nLCAncG9pbnRlcnVwJywgJ3BvaW50ZXJVcCcsICdyYXRlY2hhbmdlJywgJ3JhdGVDaGFuZ2UnLCAncmVzZXQnLCAncmVzZXQnLCAnc2Vla2VkJywgJ3NlZWtlZCcsICdzdWJtaXQnLCAnc3VibWl0JywgJ3RvdWNoY2FuY2VsJywgJ3RvdWNoQ2FuY2VsJywgJ3RvdWNoZW5kJywgJ3RvdWNoRW5kJywgJ3RvdWNoc3RhcnQnLCAndG91Y2hTdGFydCcsICd2b2x1bWVjaGFuZ2UnLCAndm9sdW1lQ2hhbmdlJ107XG52YXIgb3RoZXJEaXNjcmV0ZUV2ZW50cyA9IFsnY2hhbmdlJywgJ3NlbGVjdGlvbmNoYW5nZScsICd0ZXh0SW5wdXQnLCAnY29tcG9zaXRpb25zdGFydCcsICdjb21wb3NpdGlvbmVuZCcsICdjb21wb3NpdGlvbnVwZGF0ZSddO1xuXG5cbnZhciB1c2VyQmxvY2tpbmdQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luID0gWydkcmFnJywgJ2RyYWcnLCAnZHJhZ2VudGVyJywgJ2RyYWdFbnRlcicsICdkcmFnZXhpdCcsICdkcmFnRXhpdCcsICdkcmFnbGVhdmUnLCAnZHJhZ0xlYXZlJywgJ2RyYWdvdmVyJywgJ2RyYWdPdmVyJywgJ21vdXNlbW92ZScsICdtb3VzZU1vdmUnLCAnbW91c2VvdXQnLCAnbW91c2VPdXQnLCAnbW91c2VvdmVyJywgJ21vdXNlT3ZlcicsICdwb2ludGVybW92ZScsICdwb2ludGVyTW92ZScsICdwb2ludGVyb3V0JywgJ3BvaW50ZXJPdXQnLCAncG9pbnRlcm92ZXInLCAncG9pbnRlck92ZXInLCAnc2Nyb2xsJywgJ3Njcm9sbCcsICd0b2dnbGUnLCAndG9nZ2xlJywgJ3RvdWNobW92ZScsICd0b3VjaE1vdmUnLCAnd2hlZWwnLCAnd2hlZWwnXTsgLy8gcHJldHRpZXItaWdub3JlXG5cbnZhciBjb250aW51b3VzUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiA9IFsnYWJvcnQnLCAnYWJvcnQnLCBBTklNQVRJT05fRU5ELCAnYW5pbWF0aW9uRW5kJywgQU5JTUFUSU9OX0lURVJBVElPTiwgJ2FuaW1hdGlvbkl0ZXJhdGlvbicsIEFOSU1BVElPTl9TVEFSVCwgJ2FuaW1hdGlvblN0YXJ0JywgJ2NhbnBsYXknLCAnY2FuUGxheScsICdjYW5wbGF5dGhyb3VnaCcsICdjYW5QbGF5VGhyb3VnaCcsICdkdXJhdGlvbmNoYW5nZScsICdkdXJhdGlvbkNoYW5nZScsICdlbXB0aWVkJywgJ2VtcHRpZWQnLCAnZW5jcnlwdGVkJywgJ2VuY3J5cHRlZCcsICdlbmRlZCcsICdlbmRlZCcsICdlcnJvcicsICdlcnJvcicsICdnb3Rwb2ludGVyY2FwdHVyZScsICdnb3RQb2ludGVyQ2FwdHVyZScsICdsb2FkJywgJ2xvYWQnLCAnbG9hZGVkZGF0YScsICdsb2FkZWREYXRhJywgJ2xvYWRlZG1ldGFkYXRhJywgJ2xvYWRlZE1ldGFkYXRhJywgJ2xvYWRzdGFydCcsICdsb2FkU3RhcnQnLCAnbG9zdHBvaW50ZXJjYXB0dXJlJywgJ2xvc3RQb2ludGVyQ2FwdHVyZScsICdwbGF5aW5nJywgJ3BsYXlpbmcnLCAncHJvZ3Jlc3MnLCAncHJvZ3Jlc3MnLCAnc2Vla2luZycsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3RhbGxlZCcsICdzdXNwZW5kJywgJ3N1c3BlbmQnLCAndGltZXVwZGF0ZScsICd0aW1lVXBkYXRlJywgVFJBTlNJVElPTl9FTkQsICd0cmFuc2l0aW9uRW5kJywgJ3dhaXRpbmcnLCAnd2FpdGluZyddO1xuLyoqXG4gKiBUdXJuc1xuICogWydhYm9ydCcsIC4uLl1cbiAqXG4gKiBpbnRvXG4gKlxuICogdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKFtcbiAqICAgWydhYm9ydCcsICdvbkFib3J0J10sXG4gKiBdKTtcbiAqXG4gKiBhbmQgcmVnaXN0ZXJzIHRoZW0uXG4gKi9cblxuZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoZXZlbnRUeXBlcywgcHJpb3JpdHkpIHtcbiAgLy8gQXMgdGhlIGV2ZW50IHR5cGVzIGFyZSBpbiBwYWlycyBvZiB0d28sIHdlIG5lZWQgdG8gaXRlcmF0ZVxuICAvLyB0aHJvdWdoIGluIHR3b3MuIFRoZSBldmVudHMgYXJlIGluIHBhaXJzIG9mIHR3byB0byBzYXZlIGNvZGVcbiAgLy8gYW5kIGltcHJvdmUgaW5pdCBwZXJmIG9mIHByb2Nlc3NpbmcgdGhpcyBhcnJheSwgYXMgaXQgd2lsbFxuICAvLyByZXN1bHQgaW4gZmFyIGZld2VyIG9iamVjdCBhbGxvY2F0aW9ucyBhbmQgcHJvcGVydHkgYWNjZXNzZXNcbiAgLy8gaWYgd2Ugb25seSB1c2UgdGhyZWUgYXJyYXlzIHRvIHByb2Nlc3MgYWxsIHRoZSBjYXRlZ29yaWVzIG9mXG4gIC8vIGluc3RlYWQgb2YgdHVwbGVzLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50VHlwZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgdG9wRXZlbnQgPSBldmVudFR5cGVzW2ldO1xuICAgIHZhciBldmVudCA9IGV2ZW50VHlwZXNbaSArIDFdO1xuICAgIHZhciBjYXBpdGFsaXplZEV2ZW50ID0gZXZlbnRbMF0udG9VcHBlckNhc2UoKSArIGV2ZW50LnNsaWNlKDEpO1xuICAgIHZhciByZWFjdE5hbWUgPSAnb24nICsgY2FwaXRhbGl6ZWRFdmVudDtcbiAgICBldmVudFByaW9yaXRpZXMuc2V0KHRvcEV2ZW50LCBwcmlvcml0eSk7XG4gICAgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuc2V0KHRvcEV2ZW50LCByZWFjdE5hbWUpO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWFjdE5hbWUsIFt0b3BFdmVudF0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEV2ZW50UHJpb3JpdGllcyhldmVudFR5cGVzLCBwcmlvcml0eSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICBldmVudFByaW9yaXRpZXMuc2V0KGV2ZW50VHlwZXNbaV0sIHByaW9yaXR5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFdmVudFByaW9yaXR5Rm9yUGx1Z2luU3lzdGVtKGRvbUV2ZW50TmFtZSkge1xuICB2YXIgcHJpb3JpdHkgPSBldmVudFByaW9yaXRpZXMuZ2V0KGRvbUV2ZW50TmFtZSk7IC8vIERlZmF1bHQgdG8gYSBDb250aW51b3VzRXZlbnQuIE5vdGU6IHdlIG1pZ2h0XG4gIC8vIHdhbnQgdG8gd2FybiBpZiB3ZSBjYW4ndCBkZXRlY3QgdGhlIHByaW9yaXR5XG4gIC8vIGZvciB0aGUgZXZlbnQuXG5cbiAgcmV0dXJuIHByaW9yaXR5ID09PSB1bmRlZmluZWQgPyBDb250aW51b3VzRXZlbnQgOiBwcmlvcml0eTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlRXZlbnRzKCkge1xuICByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyhkaXNjcmV0ZUV2ZW50UGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiwgRGlzY3JldGVFdmVudCk7XG4gIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKHVzZXJCbG9ja2luZ1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIFVzZXJCbG9ja2luZ0V2ZW50KTtcbiAgcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoY29udGludW91c1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIENvbnRpbnVvdXNFdmVudCk7XG4gIHNldEV2ZW50UHJpb3JpdGllcyhvdGhlckRpc2NyZXRlRXZlbnRzLCBEaXNjcmV0ZUV2ZW50KTtcbn1cblxudmFyIFNjaGVkdWxlcl9ub3cgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93O1xuXG57XG4gIC8vIFByb3ZpZGUgZXhwbGljaXQgZXJyb3IgbWVzc2FnZSB3aGVuIHByb2R1Y3Rpb24rcHJvZmlsaW5nIGJ1bmRsZSBvZiBlLmcuXG4gIC8vIHJlYWN0LWRvbSBpcyB1c2VkIHdpdGggcHJvZHVjdGlvbiAobm9uLXByb2ZpbGluZykgYnVuZGxlIG9mXG4gIC8vIHNjaGVkdWxlci90cmFjaW5nXG4gIGlmICghKHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYgIT0gbnVsbCAmJiB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIHJ1biB0aGUgcHJvZmlsaW5nIHZlcnNpb24gb2YgYSByZW5kZXJlciAoZm9yIGV4YW1wbGUsIGByZWFjdC1kb20vcHJvZmlsaW5nYCkgd2l0aG91dCBhbHNvIHJlcGxhY2luZyB0aGUgYHNjaGVkdWxlci90cmFjaW5nYCBtb2R1bGUgd2l0aCBgc2NoZWR1bGVyL3RyYWNpbmctcHJvZmlsaW5nYC4gWW91ciBidW5kbGVyIG1pZ2h0IGhhdmUgYSBzZXR0aW5nIGZvciBhbGlhc2luZyBib3RoIG1vZHVsZXMuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Byb2ZpbGluZ1wiICk7XG4gICAgfVxuICB9XG59XG4vLyBhc2NlbmRpbmcgbnVtYmVycyBzbyB3ZSBjYW4gY29tcGFyZSB0aGVtIGxpa2UgbnVtYmVycy4gVGhleSBzdGFydCBhdCA5MCB0b1xuLy8gYXZvaWQgY2xhc2hpbmcgd2l0aCBTY2hlZHVsZXIncyBwcmlvcml0aWVzLlxuXG52YXIgSW1tZWRpYXRlUHJpb3JpdHkgPSA5OTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IDk4O1xudmFyIE5vcm1hbFByaW9yaXR5ID0gOTc7XG52YXIgTG93UHJpb3JpdHkgPSA5NjtcbnZhciBJZGxlUHJpb3JpdHkgPSA5NTsgLy8gTm9Qcmlvcml0eSBpcyB0aGUgYWJzZW5jZSBvZiBwcmlvcml0eS4gQWxzbyBSZWFjdC1vbmx5LlxuXG52YXIgTm9Qcmlvcml0eSA9IDkwO1xudmFyIGluaXRpYWxUaW1lTXMgPSBTY2hlZHVsZXJfbm93KCk7IC8vIElmIHRoZSBpbml0aWFsIHRpbWVzdGFtcCBpcyByZWFzb25hYmx5IHNtYWxsLCB1c2UgU2NoZWR1bGVyJ3MgYG5vd2AgZGlyZWN0bHkuXG5cbnZhciBTeW5jTGFuZVByaW9yaXR5ID0gMTU7XG52YXIgU3luY0JhdGNoZWRMYW5lUHJpb3JpdHkgPSAxNDtcbnZhciBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMTM7XG52YXIgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eSA9IDEyO1xudmFyIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDExO1xudmFyIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSA9IDEwO1xudmFyIERlZmF1bHRIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSA5O1xudmFyIERlZmF1bHRMYW5lUHJpb3JpdHkgPSA4O1xudmFyIFRyYW5zaXRpb25IeWRyYXRpb25Qcmlvcml0eSA9IDc7XG52YXIgVHJhbnNpdGlvblByaW9yaXR5ID0gNjtcbnZhciBSZXRyeUxhbmVQcmlvcml0eSA9IDU7XG52YXIgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gNDtcbnZhciBJZGxlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMztcbnZhciBJZGxlTGFuZVByaW9yaXR5ID0gMjtcbnZhciBPZmZzY3JlZW5MYW5lUHJpb3JpdHkgPSAxO1xudmFyIE5vTGFuZVByaW9yaXR5ID0gMDtcbnZhciBUb3RhbExhbmVzID0gMzE7XG52YXIgTm9MYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIE5vTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgU3luY0xhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTtcbnZhciBTeW5jQmF0Y2hlZExhbmUgPVxuLyogICAgICAgICAgICAgICAgICovXG4yO1xudmFyIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgKi9cbjQ7XG52YXIgSW5wdXREaXNjcmV0ZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMjQ7XG52YXIgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgKi9cbjMyO1xudmFyIElucHV0Q29udGludW91c0xhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgKi9cbjE5MjtcbnZhciBEZWZhdWx0SHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgICovXG4yNTY7XG52YXIgRGVmYXVsdExhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4zNTg0O1xudmFyIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgICovXG40MDk2O1xudmFyIFRyYW5zaXRpb25MYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjQxODYxMTI7XG52YXIgUmV0cnlMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuNjI5MTQ1NjA7XG52YXIgU29tZVJldHJ5TGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICovXG4zMzU1NDQzMjtcbnZhciBTZWxlY3RpdmVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICovXG42NzEwODg2NDtcbnZhciBOb25JZGxlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTM0MjE3NzI3O1xudmFyIElkbGVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgKi9cbjEzNDIxNzcyODtcbnZhciBJZGxlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG44MDUzMDYzNjg7XG52YXIgT2Zmc2NyZWVuTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMTA3Mzc0MTgyNDtcbnZhciBOb1RpbWVzdGFtcCA9IC0xO1xuZnVuY3Rpb24gc2V0Q3VycmVudFVwZGF0ZUxhbmVQcmlvcml0eShuZXdMYW5lUHJpb3JpdHkpIHtcbn0gLy8gXCJSZWdpc3RlcnNcIiB1c2VkIHRvIFwicmV0dXJuXCIgbXVsdGlwbGUgdmFsdWVzXG4vLyBVc2VkIGJ5IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzIGFuZCBnZXROZXh0TGFuZXM6XG5cbnZhciByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRMYW5lUHJpb3JpdHk7XG5cbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gIGlmICgoU3luY0xhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9XG5cbiAgaWYgKChTeW5jQmF0Y2hlZExhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBTeW5jQmF0Y2hlZExhbmU7XG4gIH1cblxuICBpZiAoKElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpbnB1dERpc2NyZXRlTGFuZXMgPSBJbnB1dERpc2NyZXRlTGFuZXMgJiBsYW5lcztcblxuICBpZiAoaW5wdXREaXNjcmV0ZUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBpbnB1dERpc2NyZXRlTGFuZXM7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpbnB1dENvbnRpbnVvdXNMYW5lcyA9IElucHV0Q29udGludW91c0xhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGlucHV0Q29udGludW91c0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlucHV0Q29udGludW91c0xhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIERlZmF1bHRIeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gRGVmYXVsdEh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgZGVmYXVsdExhbmVzID0gRGVmYXVsdExhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGRlZmF1bHRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdExhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gZGVmYXVsdExhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gVHJhbnNpdGlvbkh5ZHJhdGlvblByaW9yaXR5O1xuICAgIHJldHVybiBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uTGFuZXMgPSBUcmFuc2l0aW9uTGFuZXMgJiBsYW5lcztcblxuICBpZiAodHJhbnNpdGlvbkxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBUcmFuc2l0aW9uUHJpb3JpdHk7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25MYW5lcztcbiAgfVxuXG4gIHZhciByZXRyeUxhbmVzID0gUmV0cnlMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChyZXRyeUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBSZXRyeUxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gcmV0cnlMYW5lcztcbiAgfVxuXG4gIGlmIChsYW5lcyAmIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmUpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBJZGxlSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElkbGVIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIElkbGVIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGlkbGVMYW5lcyA9IElkbGVMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChpZGxlTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElkbGVMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlkbGVMYW5lcztcbiAgfVxuXG4gIGlmICgoT2Zmc2NyZWVuTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gT2Zmc2NyZWVuTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBPZmZzY3JlZW5MYW5lO1xuICB9XG5cbiAge1xuICAgIGVycm9yKCdTaG91bGQgaGF2ZSBmb3VuZCBtYXRjaGluZyBsYW5lcy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgfSAvLyBUaGlzIHNob3VsZG4ndCBiZSByZWFjaGFibGUsIGJ1dCBhcyBhIGZhbGxiYWNrLCByZXR1cm4gdGhlIGVudGlyZSBiaXRtYXNrLlxuXG5cbiAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0TGFuZVByaW9yaXR5O1xuICByZXR1cm4gbGFuZXM7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlclByaW9yaXR5VG9MYW5lUHJpb3JpdHkoc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCkge1xuICBzd2l0Y2ggKHNjaGVkdWxlclByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNMYW5lUHJpb3JpdHk7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgIC8vIFRPRE86IEhhbmRsZSBMb3dTY2hlZHVsZXJQcmlvcml0eSwgc29tZWhvdy4gTWF5YmUgdGhlIHNhbWUgbGFuZSBhcyBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gRGVmYXVsdExhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVMYW5lUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIE5vTGFuZVByaW9yaXR5O1xuICB9XG59XG5mdW5jdGlvbiBsYW5lUHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KGxhbmVQcmlvcml0eSkge1xuICBzd2l0Y2ggKGxhbmVQcmlvcml0eSkge1xuICAgIGNhc2UgU3luY0xhbmVQcmlvcml0eTpcbiAgICBjYXNlIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIEltbWVkaWF0ZVByaW9yaXR5O1xuXG4gICAgY2FzZSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBVc2VyQmxvY2tpbmdQcmlvcml0eTtcblxuICAgIGNhc2UgRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIERlZmF1bHRMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBUcmFuc2l0aW9uSHlkcmF0aW9uUHJpb3JpdHk6XG4gICAgY2FzZSBUcmFuc2l0aW9uUHJpb3JpdHk6XG4gICAgY2FzZSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBSZXRyeUxhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb3JtYWxQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElkbGVMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBPZmZzY3JlZW5MYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSWRsZVByaW9yaXR5O1xuXG4gICAgY2FzZSBOb0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb1ByaW9yaXR5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgdXBkYXRlIHByaW9yaXR5OiBcIiArIGxhbmVQcmlvcml0eSArIFwiLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5mdW5jdGlvbiBnZXROZXh0TGFuZXMocm9vdCwgd2lwTGFuZXMpIHtcbiAgLy8gRWFybHkgYmFpbG91dCBpZiB0aGVyZSdzIG5vIHBlbmRpbmcgd29yayBsZWZ0LlxuICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG5cbiAgaWYgKHBlbmRpbmdMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIE5vTGFuZXM7XG4gIH1cblxuICB2YXIgbmV4dExhbmVzID0gTm9MYW5lcztcbiAgdmFyIG5leHRMYW5lUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgdmFyIGV4cGlyZWRMYW5lcyA9IHJvb3QuZXhwaXJlZExhbmVzO1xuICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICB2YXIgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzOyAvLyBDaGVjayBpZiBhbnkgd29yayBoYXMgZXhwaXJlZC5cblxuICBpZiAoZXhwaXJlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgbmV4dExhbmVzID0gZXhwaXJlZExhbmVzO1xuICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNMYW5lUHJpb3JpdHk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHdvcmsgb24gYW55IGlkbGUgd29yayB1bnRpbCBhbGwgdGhlIG5vbi1pZGxlIHdvcmsgaGFzIGZpbmlzaGVkLFxuICAgIC8vIGV2ZW4gaWYgdGhlIHdvcmsgaXMgc3VzcGVuZGVkLlxuICAgIHZhciBub25JZGxlUGVuZGluZ0xhbmVzID0gcGVuZGluZ0xhbmVzICYgTm9uSWRsZUxhbmVzO1xuXG4gICAgaWYgKG5vbklkbGVQZW5kaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIHZhciBub25JZGxlVW5ibG9ja2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICBpZiAobm9uSWRsZVVuYmxvY2tlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVVbmJsb2NrZWRMYW5lcyk7XG4gICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBub25JZGxlUGluZ2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgcGluZ2VkTGFuZXM7XG5cbiAgICAgICAgaWYgKG5vbklkbGVQaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVQaW5nZWRMYW5lcyk7XG4gICAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBvbmx5IHJlbWFpbmluZyB3b3JrIGlzIElkbGUuXG4gICAgICB2YXIgdW5ibG9ja2VkTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgIGlmICh1bmJsb2NrZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyh1bmJsb2NrZWRMYW5lcyk7XG4gICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHBpbmdlZExhbmVzKTtcbiAgICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAobmV4dExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSByZWFjaGFibGUgaWYgd2UncmUgc3VzcGVuZGVkXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgd2FybmluZyBpbiB0aGlzIHBhdGggaWYgYSBmYWxsYmFjayB0aW1lciBpcyBub3Qgc2NoZWR1bGVkLlxuICAgIHJldHVybiBOb0xhbmVzO1xuICB9IC8vIElmIHRoZXJlIGFyZSBoaWdoZXIgcHJpb3JpdHkgbGFuZXMsIHdlJ2xsIGluY2x1ZGUgdGhlbSBldmVuIGlmIHRoZXlcbiAgLy8gYXJlIHN1c3BlbmRlZC5cblxuXG4gIG5leHRMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIGdldEVxdWFsT3JIaWdoZXJQcmlvcml0eUxhbmVzKG5leHRMYW5lcyk7IC8vIElmIHdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiBhIHJlbmRlciwgc3dpdGNoaW5nIGxhbmVzIHdpbGwgaW50ZXJydXB0XG4gIC8vIGl0IGFuZCB3ZSdsbCBsb3NlIG91ciBwcm9ncmVzcy4gV2Ugc2hvdWxkIG9ubHkgZG8gdGhpcyBpZiB0aGUgbmV3IGxhbmVzIGFyZVxuICAvLyBoaWdoZXIgcHJpb3JpdHkuXG5cbiAgaWYgKHdpcExhbmVzICE9PSBOb0xhbmVzICYmIHdpcExhbmVzICE9PSBuZXh0TGFuZXMgJiYgLy8gSWYgd2UgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB0aGVuIGludGVycnVwdGluZyBpcyBmaW5lLiBEb24ndFxuICAvLyBib3RoZXIgd2FpdGluZyB1bnRpbCB0aGUgcm9vdCBpcyBjb21wbGV0ZS5cbiAgKHdpcExhbmVzICYgc3VzcGVuZGVkTGFuZXMpID09PSBOb0xhbmVzKSB7XG4gICAgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMod2lwTGFuZXMpO1xuICAgIHZhciB3aXBMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcblxuICAgIGlmIChuZXh0TGFuZVByaW9yaXR5IDw9IHdpcExhbmVQcmlvcml0eSkge1xuICAgICAgcmV0dXJuIHdpcExhbmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IG5leHRMYW5lUHJpb3JpdHk7XG4gICAgfVxuICB9IC8vIENoZWNrIGZvciBlbnRhbmdsZWQgbGFuZXMgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYXRjaC5cbiAgLy9cbiAgLy8gQSBsYW5lIGlzIHNhaWQgdG8gYmUgZW50YW5nbGVkIHdpdGggYW5vdGhlciB3aGVuIGl0J3Mgbm90IGFsbG93ZWQgdG8gcmVuZGVyXG4gIC8vIGluIGEgYmF0Y2ggdGhhdCBkb2VzIG5vdCBhbHNvIGluY2x1ZGUgdGhlIG90aGVyIGxhbmUuIFR5cGljYWxseSB3ZSBkbyB0aGlzXG4gIC8vIHdoZW4gbXVsdGlwbGUgdXBkYXRlcyBoYXZlIHRoZSBzYW1lIHNvdXJjZSwgYW5kIHdlIG9ubHkgd2FudCB0byByZXNwb25kIHRvXG4gIC8vIHRoZSBtb3N0IHJlY2VudCBldmVudCBmcm9tIHRoYXQgc291cmNlLlxuICAvL1xuICAvLyBOb3RlIHRoYXQgd2UgYXBwbHkgZW50YW5nbGVtZW50cyAqYWZ0ZXIqIGNoZWNraW5nIGZvciBwYXJ0aWFsIHdvcmsgYWJvdmUuXG4gIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGxhbmUgaXMgZW50YW5nbGVkIGR1cmluZyBhbiBpbnRlcmxlYXZlZCBldmVudCB3aGlsZVxuICAvLyBpdCdzIGFscmVhZHkgcmVuZGVyaW5nLCB3ZSB3b24ndCBpbnRlcnJ1cHQgaXQuIFRoaXMgaXMgaW50ZW50aW9uYWwsIHNpbmNlXG4gIC8vIGVudGFuZ2xlbWVudCBpcyB1c3VhbGx5IFwiYmVzdCBlZmZvcnRcIjogd2UnbGwgdHJ5IG91ciBiZXN0IHRvIHJlbmRlciB0aGVcbiAgLy8gbGFuZXMgaW4gdGhlIHNhbWUgYmF0Y2gsIGJ1dCBpdCdzIG5vdCB3b3J0aCB0aHJvd2luZyBvdXQgcGFydGlhbGx5XG4gIC8vIGNvbXBsZXRlZCB3b3JrIGluIG9yZGVyIHRvIGRvIGl0LlxuICAvL1xuICAvLyBGb3IgdGhvc2UgZXhjZXB0aW9ucyB3aGVyZSBlbnRhbmdsZW1lbnQgaXMgc2VtYW50aWNhbGx5IGltcG9ydGFudCwgbGlrZVxuICAvLyB1c2VNdXRhYmxlU291cmNlLCB3ZSBzaG91bGQgZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gcGFydGlhbCB3b3JrIGF0IHRoZVxuICAvLyB0aW1lIHdlIGFwcGx5IHRoZSBlbnRhbmdsZW1lbnQuXG5cblxuICB2YXIgZW50YW5nbGVkTGFuZXMgPSByb290LmVudGFuZ2xlZExhbmVzO1xuXG4gIGlmIChlbnRhbmdsZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICAgIHZhciBsYW5lcyA9IG5leHRMYW5lcyAmIGVudGFuZ2xlZExhbmVzO1xuXG4gICAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgICBuZXh0TGFuZXMgfD0gZW50YW5nbGVtZW50c1tpbmRleF07XG4gICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dExhbmVzO1xufVxuZnVuY3Rpb24gZ2V0TW9zdFJlY2VudEV2ZW50VGltZShyb290LCBsYW5lcykge1xuICB2YXIgZXZlbnRUaW1lcyA9IHJvb3QuZXZlbnRUaW1lcztcbiAgdmFyIG1vc3RSZWNlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIHZhciBldmVudFRpbWUgPSBldmVudFRpbWVzW2luZGV4XTtcblxuICAgIGlmIChldmVudFRpbWUgPiBtb3N0UmVjZW50RXZlbnRUaW1lKSB7XG4gICAgICBtb3N0UmVjZW50RXZlbnRUaW1lID0gZXZlbnRUaW1lO1xuICAgIH1cblxuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG5cbiAgcmV0dXJuIG1vc3RSZWNlbnRFdmVudFRpbWU7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSkge1xuICAvLyBUT0RPOiBFeHBpcmF0aW9uIGhldXJpc3RpYyBpcyBjb25zdGFudCBwZXIgbGFuZSwgc28gY291bGQgdXNlIGEgbWFwLlxuICBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhsYW5lKTtcbiAgdmFyIHByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG5cbiAgaWYgKHByaW9yaXR5ID49IElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSkge1xuICAgIC8vIFVzZXIgaW50ZXJhY3Rpb25zIHNob3VsZCBleHBpcmUgc2xpZ2h0bHkgbW9yZSBxdWlja2x5LlxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBpcyBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnQgYXMgaW4gU2NoZWR1bGVyLmpzLiBXaGVuXG4gICAgLy8gd2UgbWFkZSBpdCBsYXJnZXIsIGEgcHJvZHVjdCBtZXRyaWMgaW4gd3d3IHJlZ3Jlc3NlZCwgc3VnZ2VzdGluZyB0aGVyZSdzXG4gICAgLy8gYSB1c2VyIGludGVyYWN0aW9uIHRoYXQncyBiZWluZyBzdGFydmVkIGJ5IGEgc2VyaWVzIG9mIHN5bmNocm9ub3VzXG4gICAgLy8gdXBkYXRlcy4gSWYgdGhhdCB0aGVvcnkgaXMgY29ycmVjdCwgdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlXG4gICAgLy8gc3RhcnZhdGlvbi4gSG93ZXZlciwgdGhpcyBzY2VuYXJpbyBzdXBwb3J0cyB0aGUgaWRlYSB0aGF0IGV4cGlyYXRpb25cbiAgICAvLyB0aW1lcyBhcmUgYW4gaW1wb3J0YW50IHNhZmVndWFyZCB3aGVuIHN0YXJ2YXRpb24gZG9lcyBoYXBwZW4uXG4gICAgLy9cbiAgICAvLyBBbHNvIG5vdGUgdGhhdCwgaW4gdGhlIGNhc2Ugb2YgdXNlciBpbnB1dCBzcGVjaWZpY2FsbHksIHRoaXMgd2lsbCBzb29uIG5vXG4gICAgLy8gbG9uZ2VyIGJlIGFuIGlzc3VlIGJlY2F1c2Ugd2UgcGxhbiB0byBtYWtlIHVzZXIgaW5wdXQgc3luY2hyb25vdXMgYnlcbiAgICAvLyBkZWZhdWx0ICh1bnRpbCB5b3UgZW50ZXIgYHN0YXJ0VHJhbnNpdGlvbmAsIG9mIGNvdXJzZS4pXG4gICAgLy9cbiAgICAvLyBJZiB3ZXJlbid0IHBsYW5uaW5nIHRvIG1ha2UgdGhlc2UgdXBkYXRlcyBzeW5jaHJvbm91cyBzb29uIGFueXdheSwgSVxuICAgIC8vIHdvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBudW1iZXIgYSBjb25maWd1cmFibGUgcGFyYW1ldGVyLlxuICAgIHJldHVybiBjdXJyZW50VGltZSArIDI1MDtcbiAgfSBlbHNlIGlmIChwcmlvcml0eSA+PSBUcmFuc2l0aW9uUHJpb3JpdHkpIHtcbiAgICByZXR1cm4gY3VycmVudFRpbWUgKyA1MDAwO1xuICB9IGVsc2Uge1xuICAgIC8vIEFueXRoaW5nIGlkbGUgcHJpb3JpdHkgb3IgbG93ZXIgc2hvdWxkIG5ldmVyIGV4cGlyZS5cbiAgICByZXR1cm4gTm9UaW1lc3RhbXA7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1N0YXJ2ZWRMYW5lc0FzRXhwaXJlZChyb290LCBjdXJyZW50VGltZSkge1xuICAvLyBUT0RPOiBUaGlzIGdldHMgY2FsbGVkIGV2ZXJ5IHRpbWUgd2UgeWllbGQuIFdlIGNhbiBvcHRpbWl6ZSBieSBzdG9yaW5nXG4gIC8vIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUgb24gdGhlIHJvb3QuIFRoZW4gdXNlIHRoYXQgdG8gcXVpY2tseSBiYWlsIG91dFxuICAvLyBvZiB0aGlzIGZ1bmN0aW9uLlxuICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG4gIHZhciBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7XG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lczsgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBwZW5kaW5nIGxhbmVzIGFuZCBjaGVjayBpZiB3ZSd2ZSByZWFjaGVkIHRoZWlyXG4gIC8vIGV4cGlyYXRpb24gdGltZS4gSWYgc28sIHdlJ2xsIGFzc3VtZSB0aGUgdXBkYXRlIGlzIGJlaW5nIHN0YXJ2ZWQgYW5kIG1hcmtcbiAgLy8gaXQgYXMgZXhwaXJlZCB0byBmb3JjZSBpdCB0byBmaW5pc2guXG5cbiAgdmFyIGxhbmVzID0gcGVuZGluZ0xhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWVzW2luZGV4XTtcblxuICAgIGlmIChleHBpcmF0aW9uVGltZSA9PT0gTm9UaW1lc3RhbXApIHtcbiAgICAgIC8vIEZvdW5kIGEgcGVuZGluZyBsYW5lIHdpdGggbm8gZXhwaXJhdGlvbiB0aW1lLiBJZiBpdCdzIG5vdCBzdXNwZW5kZWQsIG9yXG4gICAgICAvLyBpZiBpdCdzIHBpbmdlZCwgYXNzdW1lIGl0J3MgQ1BVLWJvdW5kLiBDb21wdXRlIGEgbmV3IGV4cGlyYXRpb24gdGltZVxuICAgICAgLy8gdXNpbmcgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgIGlmICgobGFuZSAmIHN1c3BlbmRlZExhbmVzKSA9PT0gTm9MYW5lcyB8fCAobGFuZSAmIHBpbmdlZExhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgICAgICAvLyBBc3N1bWVzIHRpbWVzdGFtcHMgYXJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy5cbiAgICAgICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZSkge1xuICAgICAgLy8gVGhpcyBsYW5lIGV4cGlyZWRcbiAgICAgIHJvb3QuZXhwaXJlZExhbmVzIHw9IGxhbmU7XG4gICAgfVxuXG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn0gLy8gVGhpcyByZXR1cm5zIHRoZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcgbGFuZXMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXlcbmZ1bmN0aW9uIGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpIHtcbiAgdmFyIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gPSByb290LnBlbmRpbmdMYW5lcyAmIH5PZmZzY3JlZW5MYW5lO1xuXG4gIGlmIChldmVyeXRoaW5nQnV0T2Zmc2NyZWVuICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW47XG4gIH1cblxuICBpZiAoZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiAmIE9mZnNjcmVlbkxhbmUpIHtcbiAgICByZXR1cm4gT2Zmc2NyZWVuTGFuZTtcbiAgfVxuXG4gIHJldHVybiBOb0xhbmVzO1xufVxuZnVuY3Rpb24gcmV0dXJuTmV4dExhbmVzUHJpb3JpdHkoKSB7XG4gIHJldHVybiByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzTm9uSWRsZVdvcmsobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIE5vbklkbGVMYW5lcykgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlSZXRyaWVzKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBSZXRyeUxhbmVzKSA9PT0gbGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgVHJhbnNpdGlvbkxhbmVzKSA9PT0gbGFuZXM7XG59IC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgdXBkYXRlcyBpbiB0aGUgc2FtZSBldmVudCwgdGhpcyBzaG91bGRcbi8vIGJlIGEgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRVcGRhdGVMYW5lKGxhbmVQcmlvcml0eSwgd2lwTGFuZXMpIHtcbiAgc3dpdGNoIChsYW5lUHJpb3JpdHkpIHtcbiAgICBjYXNlIE5vTGFuZVByaW9yaXR5OlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN5bmNMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU3luY0xhbmU7XG5cbiAgICBjYXNlIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNCYXRjaGVkTGFuZTtcblxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSW5wdXREaXNjcmV0ZUxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICBpZiAoX2xhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIFNoaWZ0IHRvIHRoZSBuZXh0IHByaW9yaXR5IGxldmVsXG4gICAgICAgICAgcmV0dXJuIGZpbmRVcGRhdGVMYW5lKElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSwgd2lwTGFuZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lO1xuICAgICAgfVxuXG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk6XG4gICAgICB7XG4gICAgICAgIHZhciBfbGFuZTIgPSBwaWNrQXJiaXRyYXJ5TGFuZShJbnB1dENvbnRpbnVvdXNMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lMiA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gU2hpZnQgdG8gdGhlIG5leHQgcHJpb3JpdHkgbGV2ZWxcbiAgICAgICAgICByZXR1cm4gZmluZFVwZGF0ZUxhbmUoRGVmYXVsdExhbmVQcmlvcml0eSwgd2lwTGFuZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lMjtcbiAgICAgIH1cblxuICAgIGNhc2UgRGVmYXVsdExhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lMyA9IHBpY2tBcmJpdHJhcnlMYW5lKERlZmF1bHRMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lMyA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gSWYgYWxsIHRoZSBkZWZhdWx0IGxhbmVzIGFyZSBhbHJlYWR5IGJlaW5nIHdvcmtlZCBvbiwgbG9vayBmb3IgYVxuICAgICAgICAgIC8vIGxhbmUgaW4gdGhlIHRyYW5zaXRpb24gcmFuZ2UuXG4gICAgICAgICAgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICAgIGlmIChfbGFuZTMgPT09IE5vTGFuZSkge1xuICAgICAgICAgICAgLy8gQWxsIHRoZSB0cmFuc2l0aW9uIGxhbmVzIGFyZSB0YWtlbiwgdG9vLiBUaGlzIHNob3VsZCBiZSB2ZXJ5XG4gICAgICAgICAgICAvLyByYXJlLCBidXQgYXMgYSBsYXN0IHJlc29ydCwgcGljayBhIGRlZmF1bHQgbGFuZS4gVGhpcyB3aWxsIGhhdmVcbiAgICAgICAgICAgIC8vIHRoZSBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHdvcmstaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuICAgICAgICAgICAgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoRGVmYXVsdExhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2xhbmUzO1xuICAgICAgfVxuXG4gICAgY2FzZSBUcmFuc2l0aW9uUHJpb3JpdHk6IC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IGZpbmRUcmFuc2l0aW9uTGFuZSBpbnN0ZWFkXG5cbiAgICBjYXNlIFJldHJ5TGFuZVByaW9yaXR5OlxuICAgICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgZmluZFJldHJ5TGFuZSBpbnN0ZWFkXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSWRsZUxhbmVQcmlvcml0eTpcbiAgICAgIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSWRsZUxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSWRsZUxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxhbmU7XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCB1cGRhdGUgcHJpb3JpdHk6IFwiICsgbGFuZVByaW9yaXR5ICsgXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIgKTtcbiAgICB9XG4gIH1cbn0gLy8gVG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyBtdWx0aXBsZSB1cGRhdGVzIGluIHRoZSBzYW1lIGV2ZW50LCB0aGlzIHNob3VsZFxuLy8gYmUgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRUcmFuc2l0aW9uTGFuZSh3aXBMYW5lcywgcGVuZGluZ0xhbmVzKSB7XG4gIC8vIEZpcnN0IGxvb2sgZm9yIGxhbmVzIHRoYXQgYXJlIGNvbXBsZXRlbHkgdW5jbGFpbWVkLCBpLmUuIGhhdmUgbm9cbiAgLy8gcGVuZGluZyB3b3JrLlxuICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyAmIH5wZW5kaW5nTGFuZXMpO1xuXG4gIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAvLyBJZiBhbGwgbGFuZXMgaGF2ZSBwZW5kaW5nIHdvcmssIGxvb2sgZm9yIGEgbGFuZSB0aGF0IGlzbid0IGN1cnJlbnRseVxuICAgIC8vIGJlaW5nIHdvcmtlZCBvbi5cbiAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfndpcExhbmVzKTtcblxuICAgIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAgIC8vIElmIGV2ZXJ5dGhpbmcgaXMgYmVpbmcgd29ya2VkIG9uLCBwaWNrIGFueSBsYW5lLiBUaGlzIGhhcyB0aGVcbiAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgd29yay1pbi1wcm9ncmVzcy5cbiAgICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufSAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzIG11bHRpcGxlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgZXZlbnQsIHRoaXMgc2hvdWxkXG4vLyBiZSBwdXJlIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIGxhbmUgZm9yIGdpdmVuIGlucHV0cy5cblxuZnVuY3Rpb24gZmluZFJldHJ5TGFuZSh3aXBMYW5lcykge1xuICAvLyBUaGlzIGlzIGEgZm9yayBvZiBgZmluZFVwZGF0ZUxhbmVgIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgU3VzcGVuc2VcbiAgLy8gXCJyZXRyaWVzXCIgXHUyMDE0IGEgc3BlY2lhbCB1cGRhdGUgdGhhdCBhdHRlbXB0cyB0byBmbGlwIGEgU3VzcGVuc2UgYm91bmRhcnlcbiAgLy8gZnJvbSBpdHMgcGxhY2Vob2xkZXIgc3RhdGUgdG8gaXRzIHByaW1hcnkvcmVzb2x2ZWQgc3RhdGUuXG4gIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoUmV0cnlMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShSZXRyeUxhbmVzKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufVxuXG5mdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSB7XG4gIHJldHVybiBsYW5lcyAmIC1sYW5lcztcbn1cblxuZnVuY3Rpb24gZ2V0TG93ZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSB7XG4gIC8vIFRoaXMgZmluZHMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgbm9uLXplcm8gYml0LlxuICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IE5vTGFuZXMgOiAxIDw8IGluZGV4O1xufVxuXG5mdW5jdGlvbiBnZXRFcXVhbE9ySGlnaGVyUHJpb3JpdHlMYW5lcyhsYW5lcykge1xuICByZXR1cm4gKGdldExvd2VzdFByaW9yaXR5TGFuZShsYW5lcykgPDwgMSkgLSAxO1xufVxuXG5mdW5jdGlvbiBwaWNrQXJiaXRyYXJ5TGFuZShsYW5lcykge1xuICAvLyBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gZ2V0cyBpbmxpbmVkLiBPbmx5IGV4aXN0cyBzbyB0byBjb21tdW5pY2F0ZSB0aGF0IGl0XG4gIC8vIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGJpdCBpcyBzZWxlY3RlZDsgeW91IGNhbiBwaWNrIGFueSBiaXQgd2l0aG91dFxuICAvLyBhZmZlY3RpbmcgdGhlIGFsZ29yaXRobXMgd2hlcmUgaXRzIHVzZWQuIEhlcmUgSSdtIHVzaW5nXG4gIC8vIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGUgZmV3ZXN0IG9wZXJhdGlvbnMuXG4gIHJldHVybiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKTtcbn1cblxuZnVuY3Rpb24gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcykge1xuICByZXR1cm4gMzEgLSBjbHozMihsYW5lcyk7XG59XG5cbmZ1bmN0aW9uIGxhbmVUb0luZGV4KGxhbmUpIHtcbiAgcmV0dXJuIHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZSk7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzU29tZUxhbmUoYSwgYikge1xuICByZXR1cm4gKGEgJiBiKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIGlzU3Vic2V0T2ZMYW5lcyhzZXQsIHN1YnNldCkge1xuICByZXR1cm4gKHNldCAmIHN1YnNldCkgPT09IHN1YnNldDtcbn1cbmZ1bmN0aW9uIG1lcmdlTGFuZXMoYSwgYikge1xuICByZXR1cm4gYSB8IGI7XG59XG5mdW5jdGlvbiByZW1vdmVMYW5lcyhzZXQsIHN1YnNldCkge1xuICByZXR1cm4gc2V0ICYgfnN1YnNldDtcbn0gLy8gU2VlbXMgcmVkdW5kYW50LCBidXQgaXQgY2hhbmdlcyB0aGUgdHlwZSBmcm9tIGEgc2luZ2xlIGxhbmUgKHVzZWQgZm9yXG4vLyB1cGRhdGVzKSB0byBhIGdyb3VwIG9mIGxhbmVzICh1c2VkIGZvciBmbHVzaGluZyB3b3JrKS5cblxuZnVuY3Rpb24gbGFuZVRvTGFuZXMobGFuZSkge1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGhpZ2hlclByaW9yaXR5TGFuZShhLCBiKSB7XG4gIC8vIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYml0IHJhbmdlcyBkZWNyZWFzZSBpbiBwcmlvcml0eSBhcyB5b3UgZ28gbGVmdC5cbiAgcmV0dXJuIGEgIT09IE5vTGFuZSAmJiBhIDwgYiA/IGEgOiBiO1xufVxuZnVuY3Rpb24gY3JlYXRlTGFuZU1hcChpbml0aWFsKSB7XG4gIC8vIEludGVudGlvbmFsbHkgcHVzaGluZyBvbmUgYnkgb25lLlxuICAvLyBodHRwczovL3Y4LmRldi9ibG9nL2VsZW1lbnRzLWtpbmRzI2F2b2lkLWNyZWF0aW5nLWhvbGVzXG4gIHZhciBsYW5lTWFwID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBUb3RhbExhbmVzOyBpKyspIHtcbiAgICBsYW5lTWFwLnB1c2goaW5pdGlhbCk7XG4gIH1cblxuICByZXR1cm4gbGFuZU1hcDtcbn1cbmZ1bmN0aW9uIG1hcmtSb290VXBkYXRlZChyb290LCB1cGRhdGVMYW5lLCBldmVudFRpbWUpIHtcbiAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gdXBkYXRlTGFuZTsgLy8gVE9ETzogVGhlb3JldGljYWxseSwgYW55IHVwZGF0ZSB0byBhbnkgbGFuZSBjYW4gdW5ibG9jayBhbnkgb3RoZXIgbGFuZS4gQnV0XG4gIC8vIGl0J3Mgbm90IHByYWN0aWNhbCB0byB0cnkgZXZlcnkgc2luZ2xlIHBvc3NpYmxlIGNvbWJpbmF0aW9uLiBXZSBuZWVkIGFcbiAgLy8gaGV1cmlzdGljIHRvIGRlY2lkZSB3aGljaCBsYW5lcyB0byBhdHRlbXB0IHRvIHJlbmRlciwgYW5kIGluIHdoaWNoIGJhdGNoZXMuXG4gIC8vIEZvciBub3csIHdlIHVzZSB0aGUgc2FtZSBoZXVyaXN0aWMgYXMgaW4gdGhlIG9sZCBFeHBpcmF0aW9uVGltZXMgbW9kZWw6XG4gIC8vIHJldHJ5IGFueSBsYW5lIGF0IGVxdWFsIG9yIGxvd2VyIHByaW9yaXR5LCBidXQgZG9uJ3QgdHJ5IHVwZGF0ZXMgYXQgaGlnaGVyXG4gIC8vIHByaW9yaXR5IHdpdGhvdXQgYWxzbyBpbmNsdWRpbmcgdGhlIGxvd2VyIHByaW9yaXR5IHVwZGF0ZXMuIFRoaXMgd29ya3Mgd2VsbFxuICAvLyB3aGVuIGNvbnNpZGVyaW5nIHVwZGF0ZXMgYWNyb3NzIGRpZmZlcmVudCBwcmlvcml0eSBsZXZlbHMsIGJ1dCBpc24ndFxuICAvLyBzdWZmaWNpZW50IGZvciB1cGRhdGVzIHdpdGhpbiB0aGUgc2FtZSBwcmlvcml0eSwgc2luY2Ugd2Ugd2FudCB0byB0cmVhdFxuICAvLyB0aG9zZSB1cGRhdGVzIGFzIHBhcmFsbGVsLlxuICAvLyBVbnN1c3BlbmQgYW55IHVwZGF0ZSBhdCBlcXVhbCBvciBsb3dlciBwcmlvcml0eS5cblxuICB2YXIgaGlnaGVyUHJpb3JpdHlMYW5lcyA9IHVwZGF0ZUxhbmUgLSAxOyAvLyBUdXJucyAwYjEwMDAgaW50byAwYjAxMTFcblxuICByb290LnN1c3BlbmRlZExhbmVzICY9IGhpZ2hlclByaW9yaXR5TGFuZXM7XG4gIHJvb3QucGluZ2VkTGFuZXMgJj0gaGlnaGVyUHJpb3JpdHlMYW5lcztcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBpbmRleCA9IGxhbmVUb0luZGV4KHVwZGF0ZUxhbmUpOyAvLyBXZSBjYW4gYWx3YXlzIG92ZXJ3cml0ZSBhbiBleGlzdGluZyB0aW1lc3RhbXAgYmVjYXVzZSB3ZSBwcmVmZXIgdGhlIG1vc3RcbiAgLy8gcmVjZW50IGV2ZW50LCBhbmQgd2UgYXNzdW1lIHRpbWUgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLlxuXG4gIGV2ZW50VGltZXNbaW5kZXhdID0gZXZlbnRUaW1lO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMpIHtcbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyB8PSBzdXNwZW5kZWRMYW5lcztcbiAgcm9vdC5waW5nZWRMYW5lcyAmPSB+c3VzcGVuZGVkTGFuZXM7IC8vIFRoZSBzdXNwZW5kZWQgbGFuZXMgYXJlIG5vIGxvbmdlciBDUFUtYm91bmQuIENsZWFyIHRoZWlyIGV4cGlyYXRpb24gdGltZXMuXG5cbiAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzO1xuICB2YXIgbGFuZXMgPSBzdXNwZW5kZWRMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya1Jvb3RQaW5nZWQocm9vdCwgcGluZ2VkTGFuZXMsIGV2ZW50VGltZSkge1xuICByb290LnBpbmdlZExhbmVzIHw9IHJvb3Quc3VzcGVuZGVkTGFuZXMgJiBwaW5nZWRMYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtEaXNjcmV0ZVVwZGF0ZXNFeHBpcmVkKHJvb3QpIHtcbiAgcm9vdC5leHBpcmVkTGFuZXMgfD0gSW5wdXREaXNjcmV0ZUxhbmVzICYgcm9vdC5wZW5kaW5nTGFuZXM7XG59XG5mdW5jdGlvbiBoYXNEaXNjcmV0ZUxhbmVzKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBJbnB1dERpc2NyZXRlTGFuZXMpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RNdXRhYmxlUmVhZChyb290LCB1cGRhdGVMYW5lKSB7XG4gIHJvb3QubXV0YWJsZVJlYWRMYW5lcyB8PSB1cGRhdGVMYW5lICYgcm9vdC5wZW5kaW5nTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzKSB7XG4gIHZhciBub0xvbmdlclBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzICYgfnJlbWFpbmluZ0xhbmVzO1xuICByb290LnBlbmRpbmdMYW5lcyA9IHJlbWFpbmluZ0xhbmVzOyAvLyBMZXQncyB0cnkgZXZlcnl0aGluZyBhZ2FpblxuXG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgPSAwO1xuICByb290LnBpbmdlZExhbmVzID0gMDtcbiAgcm9vdC5leHBpcmVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3QubXV0YWJsZVJlYWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7IC8vIENsZWFyIHRoZSBsYW5lcyB0aGF0IG5vIGxvbmdlciBoYXZlIHBlbmRpbmcgd29ya1xuXG4gIHZhciBsYW5lcyA9IG5vTG9uZ2VyUGVuZGluZ0xhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZW50YW5nbGVtZW50c1tpbmRleF0gPSBOb0xhbmVzO1xuICAgIGV2ZW50VGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBlbnRhbmdsZWRMYW5lcykge1xuICByb290LmVudGFuZ2xlZExhbmVzIHw9IGVudGFuZ2xlZExhbmVzO1xuICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgdmFyIGxhbmVzID0gZW50YW5nbGVkTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSB8PSBlbnRhbmdsZWRMYW5lcztcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxudmFyIGNsejMyID0gTWF0aC5jbHozMiA/IE1hdGguY2x6MzIgOiBjbHozMkZhbGxiYWNrOyAvLyBDb3VudCBsZWFkaW5nIHplcm9zLiBPbmx5IHVzZWQgb24gbGFuZXMsIHNvIGFzc3VtZSBpbnB1dCBpcyBhbiBpbnRlZ2VyLlxuLy8gQmFzZWQgb246XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2NsejMyXG5cbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcblxuZnVuY3Rpb24gY2x6MzJGYWxsYmFjayhsYW5lcykge1xuICBpZiAobGFuZXMgPT09IDApIHtcbiAgICByZXR1cm4gMzI7XG4gIH1cblxuICByZXR1cm4gMzEgLSAobG9nKGxhbmVzKSAvIExOMiB8IDApIHwgMDtcbn1cblxuLy8gSW50ZW50aW9uYWxseSBub3QgbmFtZWQgaW1wb3J0cyBiZWNhdXNlIFJvbGx1cCB3b3VsZCB1c2UgZHluYW1pYyBkaXNwYXRjaCBmb3JcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFxuICAgIHJ1bldpdGhQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk7IC8vIFRPRE86IGNhbiB3ZSBzdG9wIGV4cG9ydGluZyB0aGVzZT9cblxudmFyIF9lbmFibGVkID0gdHJ1ZTsgLy8gVGhpcyBpcyBleHBvcnRlZCBpbiBGQiBidWlsZHMgZm9yIHVzZSBieSBsZWdhY3kgRkIgbGF5ZXIgaW5mcmEuXG4vLyBXZSdkIGxpa2UgdG8gcmVtb3ZlIHRoaXMgYnV0IGl0J3Mgbm90IGNsZWFyIGlmIHRoaXMgaXMgc2FmZS5cblxuZnVuY3Rpb24gc2V0RW5hYmxlZChlbmFibGVkKSB7XG4gIF9lbmFibGVkID0gISFlbmFibGVkO1xufVxuZnVuY3Rpb24gaXNFbmFibGVkKCkge1xuICByZXR1cm4gX2VuYWJsZWQ7XG59XG5mdW5jdGlvbiBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcldpdGhQcmlvcml0eSh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncykge1xuICB2YXIgZXZlbnRQcmlvcml0eSA9IGdldEV2ZW50UHJpb3JpdHlGb3JQbHVnaW5TeXN0ZW0oZG9tRXZlbnROYW1lKTtcbiAgdmFyIGxpc3RlbmVyV3JhcHBlcjtcblxuICBzd2l0Y2ggKGV2ZW50UHJpb3JpdHkpIHtcbiAgICBjYXNlIERpc2NyZXRlRXZlbnQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaERpc2NyZXRlRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVXNlckJsb2NraW5nRXZlbnQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaFVzZXJCbG9ja2luZ1VwZGF0ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250aW51b3VzRXZlbnQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoRXZlbnQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcldyYXBwZXIuYmluZChudWxsLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcik7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAge1xuICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSWZOZWVkZWQobmF0aXZlRXZlbnQudGltZVN0YW1wKTtcbiAgfVxuXG4gIGRpc2NyZXRlVXBkYXRlcyhkaXNwYXRjaEV2ZW50LCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaFVzZXJCbG9ja2luZ1VwZGF0ZShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAge1xuICAgIHJ1bldpdGhQcmlvcml0eShVc2VyQmxvY2tpbmdQcmlvcml0eSQxLCBkaXNwYXRjaEV2ZW50LmJpbmQobnVsbCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKCFfZW5hYmxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBhbGxvd1JlcGxheSA9IHRydWU7XG5cbiAge1xuICAgIC8vIFRPRE86IHJlcGxheWluZyBjYXB0dXJlIHBoYXNlIGV2ZW50cyBpcyBjdXJyZW50bHkgYnJva2VuXG4gICAgLy8gYmVjYXVzZSB3ZSB1c2VkIHRvIGRvIGl0IGR1cmluZyB0b3AtbGV2ZWwgbmF0aXZlIGJ1YmJsZSBoYW5kbGVyc1xuICAgIC8vIGJ1dCBub3cgd2UgdXNlIGRpZmZlcmVudCBidWJibGUgYW5kIGNhcHR1cmUgaGFuZGxlcnMuXG4gICAgLy8gSW4gZWFnZXIgbW9kZSwgd2UgYXR0YWNoIGNhcHR1cmUgbGlzdGVuZXJzIGVhcmx5LCBzbyB3ZSBuZWVkXG4gICAgLy8gdG8gZmlsdGVyIHRoZW0gb3V0IHVudGlsIHdlIGZpeCB0aGUgbG9naWMgdG8gaGFuZGxlIHRoZW0gY29ycmVjdGx5LlxuICAgIC8vIFRoaXMgY291bGQndmUgYmVlbiBvdXRzaWRlIHRoZSBmbGFnIGJ1dCBJIHB1dCBpdCBpbnNpZGUgdG8gcmVkdWNlIHJpc2suXG4gICAgYWxsb3dSZXBsYXkgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpID09PSAwO1xuICB9XG5cbiAgaWYgKGFsbG93UmVwbGF5ICYmIGhhc1F1ZXVlZERpc2NyZXRlRXZlbnRzKCkgJiYgaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUpKSB7XG4gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGEgcXVldWUgb2YgZGlzY3JldGUgZXZlbnRzLCBhbmQgdGhpcyBpcyBhbm90aGVyIGRpc2NyZXRlXG4gICAgLy8gZXZlbnQsIHRoZW4gd2UgY2FuJ3QgZGlzcGF0Y2ggaXQgcmVnYXJkbGVzcyBvZiBpdHMgdGFyZ2V0LCBzaW5jZSB0aGV5XG4gICAgLy8gbmVlZCB0byBkaXNwYXRjaCBpbiBvcmRlci5cbiAgICBxdWV1ZURpc2NyZXRlRXZlbnQobnVsbCwgLy8gRmxhZ3MgdGhhdCB3ZSdyZSBub3QgYWN0dWFsbHkgYmxvY2tlZCBvbiBhbnl0aGluZyBhcyBmYXIgYXMgd2Uga25vdy5cbiAgICBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBibG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG5cbiAgaWYgKGJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgIC8vIFdlIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkIHRoaXMgZXZlbnQuXG4gICAgaWYgKGFsbG93UmVwbGF5KSB7XG4gICAgICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhbGxvd1JlcGxheSkge1xuICAgIGlmIChpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSkpIHtcbiAgICAgIC8vIFRoaXMgdGhpcyB0byBiZSByZXBsYXllZCBsYXRlciBvbmNlIHRoZSB0YXJnZXQgaXMgYXZhaWxhYmxlLlxuICAgICAgcXVldWVEaXNjcmV0ZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocXVldWVJZkNvbnRpbnVvdXNFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIG5lZWQgdG8gY2xlYXIgb25seSBpZiB3ZSBkaWRuJ3QgcXVldWUgYmVjYXVzZVxuICAgIC8vIHF1ZXVlaW5nIGlzIGFjY3VtbXVsYXRpdmUuXG5cblxuICAgIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gLy8gVGhpcyBpcyBub3QgcmVwbGF5YWJsZSBzbyB3ZSdsbCBpbnZva2UgaXQgYnV0IHdpdGhvdXQgYSB0YXJnZXQsXG4gIC8vIGluIGNhc2UgdGhlIGV2ZW50IHN5c3RlbSBuZWVkcyB0byB0cmFjZSBpdC5cblxuXG4gIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCBudWxsLCB0YXJnZXRDb250YWluZXIpO1xufSAvLyBBdHRlbXB0IGRpc3BhdGNoaW5nIGFuIGV2ZW50LiBSZXR1cm5zIGEgU3VzcGVuc2VJbnN0YW5jZSBvciBDb250YWluZXIgaWYgaXQncyBibG9ja2VkLlxuXG5mdW5jdGlvbiBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICAvLyBUT0RPOiBXYXJuIGlmIF9lbmFibGVkIGlzIGZhbHNlLlxuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCk7XG4gIHZhciB0YXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyB0cmVlIGhhcyBiZWVuIHVubW91bnRlZCBhbHJlYWR5LiBEaXNwYXRjaCB3aXRob3V0IGEgdGFyZ2V0LlxuICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0YWcgPSBuZWFyZXN0TW91bnRlZC50YWc7XG5cbiAgICAgIGlmICh0YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFF1ZXVlIHRoZSBldmVudCB0byBiZSByZXBsYXllZCBsYXRlci4gQWJvcnQgZGlzcGF0Y2hpbmcgc2luY2Ugd2VcbiAgICAgICAgICAvLyBkb24ndCB3YW50IHRoaXMgZXZlbnQgZGlzcGF0Y2hlZCB0d2ljZSB0aHJvdWdoIHRoZSBldmVudCBzeXN0ZW0uXG4gICAgICAgICAgLy8gVE9ETzogSWYgdGhpcyBpcyB0aGUgZmlyc3QgZGlzY3JldGUgZXZlbnQgaW4gdGhlIHF1ZXVlLiBTY2hlZHVsZSBhbiBpbmNyZWFzZWRcbiAgICAgICAgICAvLyBwcmlvcml0eSBmb3IgdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBzb21ldGhpbmcgd2VudCB3cm9uZyBidXQgdG8gYXZvaWQgYmxvY2tpbmdcbiAgICAgICAgLy8gdGhlIHdob2xlIHN5c3RlbSwgZGlzcGF0Y2ggdGhlIGV2ZW50IHdpdGhvdXQgYSB0YXJnZXQuXG4gICAgICAgIC8vIFRPRE86IFdhcm4uXG5cblxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBoYXBwZW5zIGR1cmluZyBhIHJlcGxheSBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgaXQgbWlnaHQgYmxvY2tcbiAgICAgICAgICAvLyB0aGUgd2hvbGUgc3lzdGVtLlxuICAgICAgICAgIHJldHVybiBnZXRDb250YWluZXJGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKG5lYXJlc3RNb3VudGVkICE9PSB0YXJnZXRJbnN0KSB7XG4gICAgICAgIC8vIElmIHdlIGdldCBhbiBldmVudCAoZXg6IGltZyBvbmxvYWQpIGJlZm9yZSBjb21taXR0aW5nIHRoYXRcbiAgICAgICAgLy8gY29tcG9uZW50J3MgbW91bnQsIGlnbm9yZSBpdCBmb3Igbm93ICh0aGF0IGlzLCB0cmVhdCBpdCBhcyBpZiBpdCB3YXMgYW5cbiAgICAgICAgLy8gZXZlbnQgb24gYSBub24tUmVhY3QgdHJlZSkuIFdlIG1pZ2h0IGFsc28gY29uc2lkZXIgcXVldWVpbmcgZXZlbnRzIGFuZFxuICAgICAgICAvLyBkaXNwYXRjaGluZyB0aGVtIGFmdGVyIHRoZSBtb3VudC5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcik7IC8vIFdlJ3JlIG5vdCBibG9ja2VkIG9uIGFueXRoaW5nLlxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyLCBwYXNzaXZlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50QnViYmxlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyLCBwYXNzaXZlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHtcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH0pO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5cbi8qKlxuICogVGhlc2UgdmFyaWFibGVzIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRleHQgY29udGVudCBvZiBhIHRhcmdldCBub2RlLFxuICogYWxsb3dpbmcgY29tcGFyaXNvbiBvZiBjb250ZW50IGJlZm9yZSBhbmQgYWZ0ZXIgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBJZGVudGlmeSB0aGUgbm9kZSB3aGVyZSBzZWxlY3Rpb24gY3VycmVudGx5IGJlZ2lucywgdGhlbiBvYnNlcnZlXG4gKiBib3RoIGl0cyB0ZXh0IGNvbnRlbnQgYW5kIGl0cyBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBET00uIFNpbmNlIHRoZVxuICogYnJvd3NlciBtYXkgbmF0aXZlbHkgcmVwbGFjZSB0aGUgdGFyZ2V0IG5vZGUgZHVyaW5nIGNvbXBvc2l0aW9uLCB3ZSBjYW5cbiAqIHVzZSBpdHMgcG9zaXRpb24gdG8gZmluZCBpdHMgcmVwbGFjZW1lbnQuXG4gKlxuICpcbiAqL1xudmFyIHJvb3QgPSBudWxsO1xudmFyIHN0YXJ0VGV4dCA9IG51bGw7XG52YXIgZmFsbGJhY2tUZXh0ID0gbnVsbDtcbmZ1bmN0aW9uIGluaXRpYWxpemUobmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcm9vdCA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICBzdGFydFRleHQgPSBnZXRUZXh0KCk7XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gcmVzZXQoKSB7XG4gIHJvb3QgPSBudWxsO1xuICBzdGFydFRleHQgPSBudWxsO1xuICBmYWxsYmFja1RleHQgPSBudWxsO1xufVxuZnVuY3Rpb24gZ2V0RGF0YSgpIHtcbiAgaWYgKGZhbGxiYWNrVGV4dCkge1xuICAgIHJldHVybiBmYWxsYmFja1RleHQ7XG4gIH1cblxuICB2YXIgc3RhcnQ7XG4gIHZhciBzdGFydFZhbHVlID0gc3RhcnRUZXh0O1xuICB2YXIgc3RhcnRMZW5ndGggPSBzdGFydFZhbHVlLmxlbmd0aDtcbiAgdmFyIGVuZDtcbiAgdmFyIGVuZFZhbHVlID0gZ2V0VGV4dCgpO1xuICB2YXIgZW5kTGVuZ3RoID0gZW5kVmFsdWUubGVuZ3RoO1xuXG4gIGZvciAoc3RhcnQgPSAwOyBzdGFydCA8IHN0YXJ0TGVuZ3RoOyBzdGFydCsrKSB7XG4gICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRdICE9PSBlbmRWYWx1ZVtzdGFydF0pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtaW5FbmQgPSBzdGFydExlbmd0aCAtIHN0YXJ0O1xuXG4gIGZvciAoZW5kID0gMTsgZW5kIDw9IG1pbkVuZDsgZW5kKyspIHtcbiAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydExlbmd0aCAtIGVuZF0gIT09IGVuZFZhbHVlW2VuZExlbmd0aCAtIGVuZF0pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzbGljZVRhaWwgPSBlbmQgPiAxID8gMSAtIGVuZCA6IHVuZGVmaW5lZDtcbiAgZmFsbGJhY2tUZXh0ID0gZW5kVmFsdWUuc2xpY2Uoc3RhcnQsIHNsaWNlVGFpbCk7XG4gIHJldHVybiBmYWxsYmFja1RleHQ7XG59XG5mdW5jdGlvbiBnZXRUZXh0KCkge1xuICBpZiAoJ3ZhbHVlJyBpbiByb290KSB7XG4gICAgcmV0dXJuIHJvb3QudmFsdWU7XG4gIH1cblxuICByZXR1cm4gcm9vdC50ZXh0Q29udGVudDtcbn1cblxuLyoqXG4gKiBgY2hhckNvZGVgIHJlcHJlc2VudHMgdGhlIGFjdHVhbCBcImNoYXJhY3RlciBjb2RlXCIgYW5kIGlzIHNhZmUgdG8gdXNlIHdpdGhcbiAqIGBTdHJpbmcuZnJvbUNoYXJDb2RlYC4gQXMgc3VjaCwgb25seSBrZXlzIHRoYXQgY29ycmVzcG9uZCB0byBwcmludGFibGVcbiAqIGNoYXJhY3RlcnMgcHJvZHVjZSBhIHZhbGlkIGBjaGFyQ29kZWAsIHRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGlzIEVudGVyLlxuICogVGhlIFRhYi1rZXkgaXMgY29uc2lkZXJlZCBub24tcHJpbnRhYmxlIGFuZCBkb2VzIG5vdCBoYXZlIGEgYGNoYXJDb2RlYCxcbiAqIHByZXN1bWFibHkgYmVjYXVzZSBpdCBkb2VzIG5vdCBwcm9kdWNlIGEgdGFiLWNoYXJhY3RlciBpbiBicm93c2Vycy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IE5vcm1hbGl6ZWQgYGNoYXJDb2RlYCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICB2YXIgY2hhckNvZGU7XG4gIHZhciBrZXlDb2RlID0gbmF0aXZlRXZlbnQua2V5Q29kZTtcblxuICBpZiAoJ2NoYXJDb2RlJyBpbiBuYXRpdmVFdmVudCkge1xuICAgIGNoYXJDb2RlID0gbmF0aXZlRXZlbnQuY2hhckNvZGU7IC8vIEZGIGRvZXMgbm90IHNldCBgY2hhckNvZGVgIGZvciB0aGUgRW50ZXIta2V5LCBjaGVjayBhZ2FpbnN0IGBrZXlDb2RlYC5cblxuICAgIGlmIChjaGFyQ29kZSA9PT0gMCAmJiBrZXlDb2RlID09PSAxMykge1xuICAgICAgY2hhckNvZGUgPSAxMztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSUU4IGRvZXMgbm90IGltcGxlbWVudCBgY2hhckNvZGVgLCBidXQgYGtleUNvZGVgIGhhcyB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICBjaGFyQ29kZSA9IGtleUNvZGU7XG4gIH0gLy8gSUUgYW5kIEVkZ2UgKG9uIFdpbmRvd3MpIGFuZCBDaHJvbWUgLyBTYWZhcmkgKG9uIFdpbmRvd3MgYW5kIExpbnV4KVxuICAvLyByZXBvcnQgRW50ZXIgYXMgY2hhckNvZGUgMTAgd2hlbiBjdHJsIGlzIHByZXNzZWQuXG5cblxuICBpZiAoY2hhckNvZGUgPT09IDEwKSB7XG4gICAgY2hhckNvZGUgPSAxMztcbiAgfSAvLyBTb21lIG5vbi1wcmludGFibGUga2V5cyBhcmUgcmVwb3J0ZWQgaW4gYGNoYXJDb2RlYC9ga2V5Q29kZWAsIGRpc2NhcmQgdGhlbS5cbiAgLy8gTXVzdCBub3QgZGlzY2FyZCB0aGUgKG5vbi0pcHJpbnRhYmxlIEVudGVyLWtleS5cblxuXG4gIGlmIChjaGFyQ29kZSA+PSAzMiB8fCBjaGFyQ29kZSA9PT0gMTMpIHtcbiAgICByZXR1cm4gY2hhckNvZGU7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn0gLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGEgZmFjdG9yeSBzbyB0aGF0IHdlIGhhdmUgZGlmZmVyZW50IHJldHVybmVkIGNvbnN0cnVjdG9ycy5cbi8vIElmIHdlIGhhZCBhIHNpbmdsZSBjb25zdHJ1Y3RvciwgaXQgd291bGQgYmUgbWVnYW1vcnBoaWMgYW5kIGVuZ2luZXMgd291bGQgZGVvcHQuXG5cblxuZnVuY3Rpb24gY3JlYXRlU3ludGhldGljRXZlbnQoSW50ZXJmYWNlKSB7XG4gIC8qKlxuICAgKiBTeW50aGV0aWMgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGJ5IGV2ZW50IHBsdWdpbnMsIHR5cGljYWxseSBpbiByZXNwb25zZSB0byBhXG4gICAqIHRvcC1sZXZlbCBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXIuXG4gICAqXG4gICAqIFRoZXNlIHN5c3RlbXMgc2hvdWxkIGdlbmVyYWxseSB1c2UgcG9vbGluZyB0byByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBnYXJiYWdlXG4gICAqIGNvbGxlY3Rpb24uIFRoZSBzeXN0ZW0gc2hvdWxkIGNoZWNrIGBpc1BlcnNpc3RlbnRgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxuICAgKiBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgaW50byB0aGUgcG9vbCBhZnRlciBiZWluZyBkaXNwYXRjaGVkLiBVc2VycyB0aGF0XG4gICAqIG5lZWQgYSBwZXJzaXN0ZWQgZXZlbnQgc2hvdWxkIGludm9rZSBgcGVyc2lzdGAuXG4gICAqXG4gICAqIFN5bnRoZXRpYyBldmVudHMgKGFuZCBzdWJjbGFzc2VzKSBpbXBsZW1lbnQgdGhlIERPTSBMZXZlbCAzIEV2ZW50cyBBUEkgYnlcbiAgICogbm9ybWFsaXppbmcgYnJvd3NlciBxdWlya3MuIFN1YmNsYXNzZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gaW1wbGVtZW50IGFcbiAgICogRE9NIGludGVyZmFjZTsgY3VzdG9tIGFwcGxpY2F0aW9uLXNwZWNpZmljIGV2ZW50cyBjYW4gYWxzbyBzdWJjbGFzcyB0aGlzLlxuICAgKi9cbiAgZnVuY3Rpb24gU3ludGhldGljQmFzZUV2ZW50KHJlYWN0TmFtZSwgcmVhY3RFdmVudFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHRoaXMuX3JlYWN0TmFtZSA9IHJlYWN0TmFtZTtcbiAgICB0aGlzLl90YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgICB0aGlzLnR5cGUgPSByZWFjdEV2ZW50VHlwZTtcbiAgICB0aGlzLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgdGhpcy50YXJnZXQgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgICB0aGlzLmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgX3Byb3BOYW1lIGluIEludGVyZmFjZSkge1xuICAgICAgaWYgKCFJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkoX3Byb3BOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5vcm1hbGl6ZSA9IEludGVyZmFjZVtfcHJvcE5hbWVdO1xuXG4gICAgICBpZiAobm9ybWFsaXplKSB7XG4gICAgICAgIHRoaXNbX3Byb3BOYW1lXSA9IG5vcm1hbGl6ZShuYXRpdmVFdmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW19wcm9wTmFtZV0gPSBuYXRpdmVFdmVudFtfcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UHJldmVudGVkID0gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCAhPSBudWxsID8gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCA6IG5hdGl2ZUV2ZW50LnJldHVyblZhbHVlID09PSBmYWxzZTtcblxuICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX2Fzc2lnbihTeW50aGV0aWNCYXNlRXZlbnQucHJvdG90eXBlLCB7XG4gICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vICRGbG93Rml4TWUgLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LnJldHVyblZhbHVlICE9PSAndW5rbm93bicpIHtcbiAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9LFxuICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcblxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vICRGbG93Rml4TWUgLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAgIC8vIFRoZSBDaGFuZ2VFdmVudFBsdWdpbiByZWdpc3RlcnMgYSBcInByb3BlcnR5Y2hhbmdlXCIgZXZlbnQgZm9yXG4gICAgICAgIC8vIElFLiBUaGlzIGV2ZW50IGRvZXMgbm90IHN1cHBvcnQgYnViYmxpbmcgb3IgY2FuY2VsbGluZywgYW5kXG4gICAgICAgIC8vIGFueSByZWZlcmVuY2VzIHRvIGNhbmNlbEJ1YmJsZSB0aHJvdyBcIk1lbWJlciBub3QgZm91bmRcIi4gIEFcbiAgICAgICAgLy8gdHlwZW9mIGNoZWNrIG9mIFwidW5rbm93blwiIGNpcmN1bXZlbnRzIHRoaXMgaXNzdWUgKGFuZCBpcyBhbHNvXG4gICAgICAgIC8vIElFIHNwZWNpZmljKS5cbiAgICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXZSByZWxlYXNlIGFsbCBkaXNwYXRjaGVkIGBTeW50aGV0aWNFdmVudGBzIGFmdGVyIGVhY2ggZXZlbnQgbG9vcCwgYWRkaW5nXG4gICAgICogdGhlbSBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgYWxsb3dzIGEgd2F5IHRvIGhvbGQgb250byBhIHJlZmVyZW5jZSB0aGF0XG4gICAgICogd29uJ3QgYmUgYWRkZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgICAqL1xuICAgIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHsvLyBNb2Rlcm4gZXZlbnQgc3lzdGVtIGRvZXNuJ3QgdXNlIHBvb2xpbmcuXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGlzIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGlzUGVyc2lzdGVudDogZnVuY3Rpb25UaGF0UmV0dXJuc1RydWVcbiAgfSk7XG5cbiAgcmV0dXJuIFN5bnRoZXRpY0Jhc2VFdmVudDtcbn1cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGV2ZW50UGhhc2U6IDAsXG4gIGJ1YmJsZXM6IDAsXG4gIGNhbmNlbGFibGU6IDAsXG4gIHRpbWVTdGFtcDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuICB9LFxuICBkZWZhdWx0UHJldmVudGVkOiAwLFxuICBpc1RydXN0ZWQ6IDBcbn07XG52YXIgU3ludGhldGljRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChFdmVudEludGVyZmFjZSk7XG5cbnZhciBVSUV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgdmlldzogMCxcbiAgZGV0YWlsOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChVSUV2ZW50SW50ZXJmYWNlKTtcbnZhciBsYXN0TW92ZW1lbnRYO1xudmFyIGxhc3RNb3ZlbWVudFk7XG52YXIgbGFzdE1vdXNlRXZlbnQ7XG5cbmZ1bmN0aW9uIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KSB7XG4gIGlmIChldmVudCAhPT0gbGFzdE1vdXNlRXZlbnQpIHtcbiAgICBpZiAobGFzdE1vdXNlRXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcbiAgICAgIGxhc3RNb3ZlbWVudFggPSBldmVudC5zY3JlZW5YIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWDtcbiAgICAgIGxhc3RNb3ZlbWVudFkgPSBldmVudC5zY3JlZW5ZIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdE1vdmVtZW50WCA9IDA7XG4gICAgICBsYXN0TW92ZW1lbnRZID0gMDtcbiAgICB9XG5cbiAgICBsYXN0TW91c2VFdmVudCA9IGV2ZW50O1xuICB9XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgTW91c2VFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgTW91c2VFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgc2NyZWVuWDogMCxcbiAgc2NyZWVuWTogMCxcbiAgY2xpZW50WDogMCxcbiAgY2xpZW50WTogMCxcbiAgcGFnZVg6IDAsXG4gIHBhZ2VZOiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIGJ1dHRvbjogMCxcbiAgYnV0dG9uczogMCxcbiAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGV2ZW50LmZyb21FbGVtZW50ID09PSBldmVudC5zcmNFbGVtZW50ID8gZXZlbnQudG9FbGVtZW50IDogZXZlbnQuZnJvbUVsZW1lbnQ7XG4gICAgcmV0dXJuIGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gIH0sXG4gIG1vdmVtZW50WDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCdtb3ZlbWVudFgnIGluIGV2ZW50KSB7XG4gICAgICByZXR1cm4gZXZlbnQubW92ZW1lbnRYO1xuICAgIH1cblxuICAgIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KTtcbiAgICByZXR1cm4gbGFzdE1vdmVtZW50WDtcbiAgfSxcbiAgbW92ZW1lbnRZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoJ21vdmVtZW50WScgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBldmVudC5tb3ZlbWVudFk7XG4gICAgfSAvLyBEb24ndCBuZWVkIHRvIGNhbGwgdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoKSBoZXJlXG4gICAgLy8gYmVjYXVzZSBpdCdzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhbHJlYWR5IHJ1biB3aGVuIG1vdmVtZW50WFxuICAgIC8vIHdhcyBjb3BpZWQuXG5cblxuICAgIHJldHVybiBsYXN0TW92ZW1lbnRZO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChNb3VzZUV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBEcmFnRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBEcmFnRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIGRhdGFUcmFuc2ZlcjogMFxufSk7XG5cbnZhciBTeW50aGV0aWNEcmFnRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChEcmFnRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEZvY3VzRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBGb2N1c0V2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICByZWxhdGVkVGFyZ2V0OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0ZvY3VzRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChGb2N1c0V2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWFuaW1hdGlvbnMvI0FuaW1hdGlvbkV2ZW50LWludGVyZmFjZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQW5pbWF0aW9uRXZlbnRcbiAqL1xuXG52YXIgQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBhbmltYXRpb25OYW1lOiAwLFxuICBlbGFwc2VkVGltZTogMCxcbiAgcHNldWRvRWxlbWVudDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNBbmltYXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jbGlwYm9hcmQtYXBpcy9cbiAqL1xuXG52YXIgQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBjbGlwYm9hcmREYXRhOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2NsaXBib2FyZERhdGEnIGluIGV2ZW50ID8gZXZlbnQuY2xpcGJvYXJkRGF0YSA6IHdpbmRvdy5jbGlwYm9hcmREYXRhO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWNvbXBvc2l0aW9uZXZlbnRzXG4gKi9cblxudmFyIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBkYXRhOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNVxuICogICAgICAvI2V2ZW50cy1pbnB1dGV2ZW50c1xuICovXG4vLyBIYXBwZW5zIHRvIHNoYXJlIHRoZSBzYW1lIGxpc3QgZm9yIG5vdy5cblxudmFyIFN5bnRoZXRpY0lucHV0RXZlbnQgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50O1xuLyoqXG4gKiBOb3JtYWxpemF0aW9uIG9mIGRlcHJlY2F0ZWQgSFRNTDUgYGtleWAgdmFsdWVzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciBub3JtYWxpemVLZXkgPSB7XG4gIEVzYzogJ0VzY2FwZScsXG4gIFNwYWNlYmFyOiAnICcsXG4gIExlZnQ6ICdBcnJvd0xlZnQnLFxuICBVcDogJ0Fycm93VXAnLFxuICBSaWdodDogJ0Fycm93UmlnaHQnLFxuICBEb3duOiAnQXJyb3dEb3duJyxcbiAgRGVsOiAnRGVsZXRlJyxcbiAgV2luOiAnT1MnLFxuICBNZW51OiAnQ29udGV4dE1lbnUnLFxuICBBcHBzOiAnQ29udGV4dE1lbnUnLFxuICBTY3JvbGw6ICdTY3JvbGxMb2NrJyxcbiAgTW96UHJpbnRhYmxlS2V5OiAnVW5pZGVudGlmaWVkJ1xufTtcbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBsZWdhY3kgYGtleUNvZGVgIHRvIEhUTUw1IGBrZXlgXG4gKiBPbmx5IHNwZWNpYWwga2V5cyBzdXBwb3J0ZWQsIGFsbCBvdGhlcnMgZGVwZW5kIG9uIGtleWJvYXJkIGxheW91dCBvciBicm93c2VyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciB0cmFuc2xhdGVUb0tleSA9IHtcbiAgJzgnOiAnQmFja3NwYWNlJyxcbiAgJzknOiAnVGFiJyxcbiAgJzEyJzogJ0NsZWFyJyxcbiAgJzEzJzogJ0VudGVyJyxcbiAgJzE2JzogJ1NoaWZ0JyxcbiAgJzE3JzogJ0NvbnRyb2wnLFxuICAnMTgnOiAnQWx0JyxcbiAgJzE5JzogJ1BhdXNlJyxcbiAgJzIwJzogJ0NhcHNMb2NrJyxcbiAgJzI3JzogJ0VzY2FwZScsXG4gICczMic6ICcgJyxcbiAgJzMzJzogJ1BhZ2VVcCcsXG4gICczNCc6ICdQYWdlRG93bicsXG4gICczNSc6ICdFbmQnLFxuICAnMzYnOiAnSG9tZScsXG4gICczNyc6ICdBcnJvd0xlZnQnLFxuICAnMzgnOiAnQXJyb3dVcCcsXG4gICczOSc6ICdBcnJvd1JpZ2h0JyxcbiAgJzQwJzogJ0Fycm93RG93bicsXG4gICc0NSc6ICdJbnNlcnQnLFxuICAnNDYnOiAnRGVsZXRlJyxcbiAgJzExMic6ICdGMScsXG4gICcxMTMnOiAnRjInLFxuICAnMTE0JzogJ0YzJyxcbiAgJzExNSc6ICdGNCcsXG4gICcxMTYnOiAnRjUnLFxuICAnMTE3JzogJ0Y2JyxcbiAgJzExOCc6ICdGNycsXG4gICcxMTknOiAnRjgnLFxuICAnMTIwJzogJ0Y5JyxcbiAgJzEyMSc6ICdGMTAnLFxuICAnMTIyJzogJ0YxMScsXG4gICcxMjMnOiAnRjEyJyxcbiAgJzE0NCc6ICdOdW1Mb2NrJyxcbiAgJzE0NSc6ICdTY3JvbGxMb2NrJyxcbiAgJzIyNCc6ICdNZXRhJ1xufTtcbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIGBrZXlgIHByb3BlcnR5LlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50S2V5KG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5rZXkpIHtcbiAgICAvLyBOb3JtYWxpemUgaW5jb25zaXN0ZW50IHZhbHVlcyByZXBvcnRlZCBieSBicm93c2VycyBkdWUgdG9cbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgb2YgYSB3b3JraW5nIGRyYWZ0IHNwZWNpZmljYXRpb24uXG4gICAgLy8gRmlyZUZveCBpbXBsZW1lbnRzIGBrZXlgIGJ1dCByZXR1cm5zIGBNb3pQcmludGFibGVLZXlgIGZvciBhbGxcbiAgICAvLyBwcmludGFibGUgY2hhcmFjdGVycyAobm9ybWFsaXplZCB0byBgVW5pZGVudGlmaWVkYCksIGlnbm9yZSBpdC5cbiAgICB2YXIga2V5ID0gbm9ybWFsaXplS2V5W25hdGl2ZUV2ZW50LmtleV0gfHwgbmF0aXZlRXZlbnQua2V5O1xuXG4gICAgaWYgKGtleSAhPT0gJ1VuaWRlbnRpZmllZCcpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9IC8vIEJyb3dzZXIgZG9lcyBub3QgaW1wbGVtZW50IGBrZXlgLCBwb2x5ZmlsbCBhcyBtdWNoIG9mIGl0IGFzIHdlIGNhbi5cblxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgdmFyIGNoYXJDb2RlID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCk7IC8vIFRoZSBlbnRlci1rZXkgaXMgdGVjaG5pY2FsbHkgYm90aCBwcmludGFibGUgYW5kIG5vbi1wcmludGFibGUgYW5kIGNhblxuICAgIC8vIHRodXMgYmUgY2FwdHVyZWQgYnkgYGtleXByZXNzYCwgbm8gb3RoZXIgbm9uLXByaW50YWJsZSBrZXkgc2hvdWxkLlxuXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSAxMyA/ICdFbnRlcicgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgfVxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5ZG93bicgfHwgbmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgIC8vIFdoaWxlIHVzZXIga2V5Ym9hcmQgbGF5b3V0IGRldGVybWluZXMgdGhlIGFjdHVhbCBtZWFuaW5nIG9mIGVhY2hcbiAgICAvLyBga2V5Q29kZWAgdmFsdWUsIGFsbW9zdCBhbGwgZnVuY3Rpb24ga2V5cyBoYXZlIGEgdW5pdmVyc2FsIHZhbHVlLlxuICAgIHJldHVybiB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVudGlmaWVkJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBtb2RpZmllciBrZXkgdG8gdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIGV2ZW50LlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2tleXMtTW9kaWZpZXJzXG4gKi9cblxuXG52YXIgbW9kaWZpZXJLZXlUb1Byb3AgPSB7XG4gIEFsdDogJ2FsdEtleScsXG4gIENvbnRyb2w6ICdjdHJsS2V5JyxcbiAgTWV0YTogJ21ldGFLZXknLFxuICBTaGlmdDogJ3NoaWZ0S2V5J1xufTsgLy8gT2xkZXIgYnJvd3NlcnMgKFNhZmFyaSA8PSAxMCwgaU9TIFNhZmFyaSA8PSAxMC4yKSBkbyBub3Qgc3VwcG9ydFxuLy8gZ2V0TW9kaWZpZXJTdGF0ZS4gSWYgZ2V0TW9kaWZpZXJTdGF0ZSBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBtYXAgaXQgdG8gYSBzZXQgb2Zcbi8vIG1vZGlmaWVyIGtleXMgZXhwb3NlZCBieSB0aGUgZXZlbnQuIEluIHRoaXMgY2FzZSwgTG9jay1rZXlzIGFyZSBub3Qgc3VwcG9ydGVkLlxuXG5mdW5jdGlvbiBtb2RpZmllclN0YXRlR2V0dGVyKGtleUFyZykge1xuICB2YXIgc3ludGhldGljRXZlbnQgPSB0aGlzO1xuICB2YXIgbmF0aXZlRXZlbnQgPSBzeW50aGV0aWNFdmVudC5uYXRpdmVFdmVudDtcblxuICBpZiAobmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSkge1xuICAgIHJldHVybiBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKGtleUFyZyk7XG4gIH1cblxuICB2YXIga2V5UHJvcCA9IG1vZGlmaWVyS2V5VG9Qcm9wW2tleUFyZ107XG4gIHJldHVybiBrZXlQcm9wID8gISFuYXRpdmVFdmVudFtrZXlQcm9wXSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG1vZGlmaWVyU3RhdGVHZXR0ZXI7XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgS2V5Ym9hcmRFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgS2V5Ym9hcmRFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAga2V5OiBnZXRFdmVudEtleSxcbiAgY29kZTogMCxcbiAgbG9jYXRpb246IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIHJlcGVhdDogMCxcbiAgbG9jYWxlOiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIC8vIExlZ2FjeSBJbnRlcmZhY2VcbiAgY2hhckNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGBjaGFyQ29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleVByZXNzIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHRoZSBhY3R1YWwgcHJpbnRhYmxlIGNoYXJhY3Rlci5cbiAgICAvLyBLZXlQcmVzcyBpcyBkZXByZWNhdGVkLCBidXQgaXRzIHJlcGxhY2VtZW50IGlzIG5vdCB5ZXQgZmluYWwgYW5kIG5vdFxuICAgIC8vIGltcGxlbWVudGVkIGluIGFueSBtYWpvciBicm93c2VyLiBPbmx5IEtleVByZXNzIGhhcyBjaGFyQ29kZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9LFxuICBrZXlDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBga2V5Q29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleURvd24vVXAgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gcGh5c2ljYWwga2V5Ym9hcmQga2V5LlxuICAgIC8vIFRoZSBhY3R1YWwgbWVhbmluZyBvZiB0aGUgdmFsdWUgZGVwZW5kcyBvbiB0aGUgdXNlcnMnIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHdoaWNoIGNhbm5vdCBiZSBkZXRlY3RlZC4gQXNzdW1pbmcgdGhhdCBpdCBpcyBhIFVTIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHByb3ZpZGVzIGEgc3VycHJpc2luZ2x5IGFjY3VyYXRlIG1hcHBpbmcgZm9yIFVTIGFuZCBFdXJvcGVhbiB1c2Vycy5cbiAgICAvLyBEdWUgdG8gdGhpcywgaXQgaXMgbGVmdCB0byB0aGUgdXNlciB0byBpbXBsZW1lbnQgYXQgdGhpcyB0aW1lLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIHdoaWNoOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgd2hpY2hgIGlzIGFuIGFsaWFzIGZvciBlaXRoZXIgYGtleUNvZGVgIG9yIGBjaGFyQ29kZWAgZGVwZW5kaW5nIG9uIHRoZVxuICAgIC8vIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNLZXlib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoS2V5Ym9hcmRFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgUG9pbnRlckV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvXG4gKi9cblxudmFyIFBvaW50ZXJFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgcG9pbnRlcklkOiAwLFxuICB3aWR0aDogMCxcbiAgaGVpZ2h0OiAwLFxuICBwcmVzc3VyZTogMCxcbiAgdGFuZ2VudGlhbFByZXNzdXJlOiAwLFxuICB0aWx0WDogMCxcbiAgdGlsdFk6IDAsXG4gIHR3aXN0OiAwLFxuICBwb2ludGVyVHlwZTogMCxcbiAgaXNQcmltYXJ5OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1BvaW50ZXJFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFBvaW50ZXJFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgVG91Y2hFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi90b3VjaC1ldmVudHMvXG4gKi9cblxudmFyIFRvdWNoRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHRvdWNoZXM6IDAsXG4gIHRhcmdldFRvdWNoZXM6IDAsXG4gIGNoYW5nZWRUb3VjaGVzOiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbn0pO1xuXG52YXIgU3ludGhldGljVG91Y2hFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRvdWNoRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDkvV0QtY3NzMy10cmFuc2l0aW9ucy0yMDA5MDMyMC8jdHJhbnNpdGlvbi1ldmVudHMtXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UcmFuc2l0aW9uRXZlbnRcbiAqL1xuXG52YXIgVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgcHJvcGVydHlOYW1lOiAwLFxuICBlbGFwc2VkVGltZTogMCxcbiAgcHNldWRvRWxlbWVudDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFdoZWVsRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBXaGVlbEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBkZWx0YVg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWGAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChyaWdodCBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGFYJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWCA6IDA7XG4gIH0sXG4gIGRlbHRhWTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFZYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVkgOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YWAgZm9yIElFPDkgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGEnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGEgOiAwO1xuICB9LFxuICBkZWx0YVo6IDAsXG4gIC8vIEJyb3dzZXJzIHdpdGhvdXQgXCJkZWx0YU1vZGVcIiBpcyByZXBvcnRpbmcgaW4gcmF3IHdoZWVsIGRlbHRhIHdoZXJlIG9uZVxuICAvLyBub3RjaCBvbiB0aGUgc2Nyb2xsIGlzIGFsd2F5cyArLy0gMTIwLCByb3VnaGx5IGVxdWl2YWxlbnQgdG8gcGl4ZWxzLlxuICAvLyBBIGdvb2QgYXBwcm94aW1hdGlvbiBvZiBET01fREVMVEFfTElORSAoMSkgaXMgNSUgb2Ygdmlld3BvcnQgc2l6ZSBvclxuICAvLyB+NDAgcGl4ZWxzLCBmb3IgRE9NX0RFTFRBX1NDUkVFTiAoMikgaXQgaXMgODcuNSUgb2Ygdmlld3BvcnQgc2l6ZS5cbiAgZGVsdGFNb2RlOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1doZWVsRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChXaGVlbEV2ZW50SW50ZXJmYWNlKTtcblxudmFyIEVORF9LRVlDT0RFUyA9IFs5LCAxMywgMjcsIDMyXTsgLy8gVGFiLCBSZXR1cm4sIEVzYywgU3BhY2VcblxudmFyIFNUQVJUX0tFWUNPREUgPSAyMjk7XG52YXIgY2FuVXNlQ29tcG9zaXRpb25FdmVudCA9IGNhblVzZURPTSAmJiAnQ29tcG9zaXRpb25FdmVudCcgaW4gd2luZG93O1xudmFyIGRvY3VtZW50TW9kZSA9IG51bGw7XG5cbmlmIChjYW5Vc2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQpIHtcbiAgZG9jdW1lbnRNb2RlID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xufSAvLyBXZWJraXQgb2ZmZXJzIGEgdmVyeSB1c2VmdWwgYHRleHRJbnB1dGAgZXZlbnQgdGhhdCBjYW4gYmUgdXNlZCB0b1xuLy8gZGlyZWN0bHkgcmVwcmVzZW50IGBiZWZvcmVJbnB1dGAuIFRoZSBJRSBgdGV4dGlucHV0YCBldmVudCBpcyBub3QgYXNcbi8vIHVzZWZ1bCwgc28gd2UgZG9uJ3QgdXNlIGl0LlxuXG5cbnZhciBjYW5Vc2VUZXh0SW5wdXRFdmVudCA9IGNhblVzZURPTSAmJiAnVGV4dEV2ZW50JyBpbiB3aW5kb3cgJiYgIWRvY3VtZW50TW9kZTsgLy8gSW4gSUU5Kywgd2UgaGF2ZSBhY2Nlc3MgdG8gY29tcG9zaXRpb24gZXZlbnRzLCBidXQgdGhlIGRhdGEgc3VwcGxpZWRcbi8vIGJ5IHRoZSBuYXRpdmUgY29tcG9zaXRpb25lbmQgZXZlbnQgbWF5IGJlIGluY29ycmVjdC4gSmFwYW5lc2UgaWRlb2dyYXBoaWNcbi8vIHNwYWNlcywgZm9yIGluc3RhbmNlIChcXHUzMDAwKSBhcmUgbm90IHJlY29yZGVkIGNvcnJlY3RseS5cblxudmFyIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhID0gY2FuVXNlRE9NICYmICghY2FuVXNlQ29tcG9zaXRpb25FdmVudCB8fCBkb2N1bWVudE1vZGUgJiYgZG9jdW1lbnRNb2RlID4gOCAmJiBkb2N1bWVudE1vZGUgPD0gMTEpO1xudmFyIFNQQUNFQkFSX0NPREUgPSAzMjtcbnZhciBTUEFDRUJBUl9DSEFSID0gU3RyaW5nLmZyb21DaGFyQ29kZShTUEFDRUJBUl9DT0RFKTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25CZWZvcmVJbnB1dCcsIFsnY29tcG9zaXRpb25lbmQnLCAna2V5cHJlc3MnLCAndGV4dElucHV0JywgJ3Bhc3RlJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25FbmQnLCBbJ2NvbXBvc2l0aW9uZW5kJywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25TdGFydCcsIFsnY29tcG9zaXRpb25zdGFydCcsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uVXBkYXRlJywgWydjb21wb3NpdGlvbnVwZGF0ZScsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbn0gLy8gVHJhY2sgd2hldGhlciB3ZSd2ZSBldmVyIGhhbmRsZWQgYSBrZXlwcmVzcyBvbiB0aGUgc3BhY2Uga2V5LlxuXG5cbnZhciBoYXNTcGFjZUtleXByZXNzID0gZmFsc2U7XG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGEgbmF0aXZlIGtleXByZXNzIGV2ZW50IGlzIGFzc3VtZWQgdG8gYmUgYSBjb21tYW5kLlxuICogVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIEZpcmVmb3ggZmlyZXMgYGtleXByZXNzYCBldmVudHMgZm9yIGtleSBjb21tYW5kc1xuICogKGN1dCwgY29weSwgc2VsZWN0LWFsbCwgZXRjLikgZXZlbiB0aG91Z2ggbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLlxuICovXG5cbmZ1bmN0aW9uIGlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiAobmF0aXZlRXZlbnQuY3RybEtleSB8fCBuYXRpdmVFdmVudC5hbHRLZXkgfHwgbmF0aXZlRXZlbnQubWV0YUtleSkgJiYgLy8gY3RybEtleSAmJiBhbHRLZXkgaXMgZXF1aXZhbGVudCB0byBBbHRHciwgYW5kIGlzIG5vdCBhIGNvbW1hbmQuXG4gICEobmF0aXZlRXZlbnQuY3RybEtleSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpO1xufVxuLyoqXG4gKiBUcmFuc2xhdGUgbmF0aXZlIHRvcCBsZXZlbCBldmVudHMgaW50byBldmVudCB0eXBlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKGRvbUV2ZW50TmFtZSkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2NvbXBvc2l0aW9uc3RhcnQnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uU3RhcnQnO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uRW5kJztcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9udXBkYXRlJzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvblVwZGF0ZSc7XG4gIH1cbn1cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgYmVzdC1ndWVzcyBtb2RlbCB0aGluayB0aGlzIGV2ZW50IHNpZ25pZmllcyB0aGF0XG4gKiBjb21wb3NpdGlvbiBoYXMgYmVndW4/XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBkb21FdmVudE5hbWUgPT09ICdrZXlkb3duJyAmJiBuYXRpdmVFdmVudC5rZXlDb2RlID09PSBTVEFSVF9LRVlDT0RFO1xufVxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBtb2RlIHRoaW5rIHRoYXQgdGhpcyBldmVudCBpcyB0aGUgZW5kIG9mIGNvbXBvc2l0aW9uP1xuICovXG5cblxuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICAvLyBDb21tYW5kIGtleXMgaW5zZXJ0IG9yIGNsZWFyIElNRSBpbnB1dC5cbiAgICAgIHJldHVybiBFTkRfS0VZQ09ERVMuaW5kZXhPZihuYXRpdmVFdmVudC5rZXlDb2RlKSAhPT0gLTE7XG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICAgIC8vIEV4cGVjdCBJTUUga2V5Q29kZSBvbiBlYWNoIGtleWRvd24uIElmIHdlIGdldCBhbnkgb3RoZXJcbiAgICAgIC8vIGNvZGUgd2UgbXVzdCBoYXZlIGV4aXRlZCBlYXJsaWVyLlxuICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmtleUNvZGUgIT09IFNUQVJUX0tFWUNPREU7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICAvLyBFdmVudHMgYXJlIG5vdCBwb3NzaWJsZSB3aXRob3V0IGNhbmNlbGxpbmcgSU1FLlxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdvb2dsZSBJbnB1dCBUb29scyBwcm92aWRlcyBjb21wb3NpdGlvbiBkYXRhIHZpYSBhIEN1c3RvbUV2ZW50LFxuICogd2l0aCB0aGUgYGRhdGFgIHByb3BlcnR5IHBvcHVsYXRlZCBpbiB0aGUgYGRldGFpbGAgb2JqZWN0LiBJZiB0aGlzXG4gKiBpcyBhdmFpbGFibGUgb24gdGhlIGV2ZW50IG9iamVjdCwgdXNlIGl0LiBJZiBub3QsIHRoaXMgaXMgYSBwbGFpblxuICogY29tcG9zaXRpb24gZXZlbnQgYW5kIHdlIGhhdmUgbm90aGluZyBzcGVjaWFsIHRvIGV4dHJhY3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgZGV0YWlsID0gbmF0aXZlRXZlbnQuZGV0YWlsO1xuXG4gIGlmICh0eXBlb2YgZGV0YWlsID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gZGV0YWlsKSB7XG4gICAgcmV0dXJuIGRldGFpbC5kYXRhO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIENoZWNrIGlmIGEgY29tcG9zaXRpb24gZXZlbnQgd2FzIHRyaWdnZXJlZCBieSBLb3JlYW4gSU1FLlxuICogT3VyIGZhbGxiYWNrIG1vZGUgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggSUUncyBLb3JlYW4gSU1FLFxuICogc28ganVzdCB1c2UgbmF0aXZlIGNvbXBvc2l0aW9uIGV2ZW50cyB3aGVuIEtvcmVhbiBJTUUgaXMgdXNlZC5cbiAqIEFsdGhvdWdoIENvbXBvc2l0aW9uRXZlbnQubG9jYWxlIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQsXG4gKiBpdCBpcyBhdmFpbGFibGUgaW4gSUUsIHdoZXJlIG91ciBmYWxsYmFjayBtb2RlIGlzIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbmF0aXZlRXZlbnQubG9jYWxlID09PSAna28nO1xufSAvLyBUcmFjayB0aGUgY3VycmVudCBJTUUgY29tcG9zaXRpb24gc3RhdHVzLCBpZiBhbnkuXG5cblxudmFyIGlzQ29tcG9zaW5nID0gZmFsc2U7XG4vKipcbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5cbiAqL1xuXG5mdW5jdGlvbiBleHRyYWN0Q29tcG9zaXRpb25FdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgZXZlbnRUeXBlO1xuICB2YXIgZmFsbGJhY2tEYXRhO1xuXG4gIGlmIChjYW5Vc2VDb21wb3NpdGlvbkV2ZW50KSB7XG4gICAgZXZlbnRUeXBlID0gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUoZG9tRXZlbnROYW1lKTtcbiAgfSBlbHNlIGlmICghaXNDb21wb3NpbmcpIHtcbiAgICBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIGV2ZW50VHlwZSA9ICdvbkNvbXBvc2l0aW9uU3RhcnQnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICBldmVudFR5cGUgPSAnb25Db21wb3NpdGlvbkVuZCc7XG4gIH1cblxuICBpZiAoIWV2ZW50VHlwZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSkge1xuICAgIC8vIFRoZSBjdXJyZW50IGNvbXBvc2l0aW9uIGlzIHN0b3JlZCBzdGF0aWNhbGx5IGFuZCBtdXN0IG5vdCBiZVxuICAgIC8vIG92ZXJ3cml0dGVuIHdoaWxlIGNvbXBvc2l0aW9uIGNvbnRpbnVlcy5cbiAgICBpZiAoIWlzQ29tcG9zaW5nICYmIGV2ZW50VHlwZSA9PT0gJ29uQ29tcG9zaXRpb25TdGFydCcpIHtcbiAgICAgIGlzQ29tcG9zaW5nID0gaW5pdGlhbGl6ZShuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdvbkNvbXBvc2l0aW9uRW5kJykge1xuICAgICAgaWYgKGlzQ29tcG9zaW5nKSB7XG4gICAgICAgIGZhbGxiYWNrRGF0YSA9IGdldERhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsIGV2ZW50VHlwZSk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQoZXZlbnRUeXBlLCBkb21FdmVudE5hbWUsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG5cbiAgICBpZiAoZmFsbGJhY2tEYXRhKSB7XG4gICAgICAvLyBJbmplY3QgZGF0YSBnZW5lcmF0ZWQgZnJvbSBmYWxsYmFjayBwYXRoIGludG8gdGhlIHN5bnRoZXRpYyBldmVudC5cbiAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgcHJvcGVydHkgb2YgbmF0aXZlIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UuXG4gICAgICBldmVudC5kYXRhID0gZmFsbGJhY2tEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY3VzdG9tRGF0YSA9IGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAoY3VzdG9tRGF0YSAhPT0gbnVsbCkge1xuICAgICAgICBldmVudC5kYXRhID0gY3VzdG9tRGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLyoqXG4gICAgICAgKiBJZiBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRzIGFyZSBhdmFpbGFibGUsIG91ciBnb2FsIGlzIHRvIG1ha2VcbiAgICAgICAqIHVzZSBvZiB0aGVtLiBIb3dldmVyLCB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZTogdGhlIHNwYWNlYmFyIGtleS5cbiAgICAgICAqIEluIFdlYmtpdCwgcHJldmVudGluZyBkZWZhdWx0IG9uIGEgc3BhY2ViYXIgYHRleHRJbnB1dGAgZXZlbnRcbiAgICAgICAqIGNhbmNlbHMgY2hhcmFjdGVyIGluc2VydGlvbiwgYnV0IGl0ICphbHNvKiBjYXVzZXMgdGhlIGJyb3dzZXJcbiAgICAgICAqIHRvIGZhbGwgYmFjayB0byBpdHMgZGVmYXVsdCBzcGFjZWJhciBiZWhhdmlvciBvZiBzY3JvbGxpbmcgdGhlXG4gICAgICAgKiBwYWdlLlxuICAgICAgICpcbiAgICAgICAqIFRyYWNraW5nIGF0OlxuICAgICAgICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM1NTEwM1xuICAgICAgICpcbiAgICAgICAqIFRvIGF2b2lkIHRoaXMgaXNzdWUsIHVzZSB0aGUga2V5cHJlc3MgZXZlbnQgYXMgaWYgbm8gYHRleHRJbnB1dGBcbiAgICAgICAqIGV2ZW50IGlzIGF2YWlsYWJsZS5cbiAgICAgICAqL1xuICAgICAgdmFyIHdoaWNoID0gbmF0aXZlRXZlbnQud2hpY2g7XG5cbiAgICAgIGlmICh3aGljaCAhPT0gU1BBQ0VCQVJfQ09ERSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaGFzU3BhY2VLZXlwcmVzcyA9IHRydWU7XG4gICAgICByZXR1cm4gU1BBQ0VCQVJfQ0hBUjtcblxuICAgIGNhc2UgJ3RleHRJbnB1dCc6XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYXJhY3RlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIERPTS5cbiAgICAgIHZhciBjaGFycyA9IG5hdGl2ZUV2ZW50LmRhdGE7IC8vIElmIGl0J3MgYSBzcGFjZWJhciBjaGFyYWN0ZXIsIGFzc3VtZSB0aGF0IHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkXG4gICAgICAvLyBpdCBhdCB0aGUga2V5cHJlc3MgbGV2ZWwgYW5kIGJhaWwgaW1tZWRpYXRlbHkuIEFuZHJvaWQgQ2hyb21lXG4gICAgICAvLyBkb2Vzbid0IGdpdmUgdXMga2V5Y29kZXMsIHNvIHdlIG5lZWQgdG8gaWdub3JlIGl0LlxuXG4gICAgICBpZiAoY2hhcnMgPT09IFNQQUNFQkFSX0NIQVIgJiYgaGFzU3BhY2VLZXlwcmVzcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoYXJzO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEZvciBvdGhlciBuYXRpdmUgZXZlbnQgdHlwZXMsIGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBGb3IgYnJvd3NlcnMgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGUgYHRleHRJbnB1dGAgZXZlbnQsIGV4dHJhY3QgdGhlXG4gKiBhcHByb3ByaWF0ZSBzdHJpbmcgdG8gdXNlIGZvciBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBjb21wb3NpbmcgKElNRSkgYW5kIHVzaW5nIGEgZmFsbGJhY2sgdG8gZG8gc28sXG4gIC8vIHRyeSB0byBleHRyYWN0IHRoZSBjb21wb3NlZCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZhbGxiYWNrIG9iamVjdC5cbiAgLy8gSWYgY29tcG9zaXRpb24gZXZlbnQgaXMgYXZhaWxhYmxlLCB3ZSBleHRyYWN0IGEgc3RyaW5nIG9ubHkgYXRcbiAgLy8gY29tcG9zaXRpb25ldmVudCwgb3RoZXJ3aXNlIGV4dHJhY3QgaXQgYXQgZmFsbGJhY2sgZXZlbnRzLlxuICBpZiAoaXNDb21wb3NpbmcpIHtcbiAgICBpZiAoZG9tRXZlbnROYW1lID09PSAnY29tcG9zaXRpb25lbmQnIHx8ICFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ICYmIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgdmFyIGNoYXJzID0gZ2V0RGF0YSgpO1xuICAgICAgcmVzZXQoKTtcbiAgICAgIGlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm4gY2hhcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ3Bhc3RlJzpcbiAgICAgIC8vIElmIGEgcGFzdGUgZXZlbnQgb2NjdXJzIGFmdGVyIGEga2V5cHJlc3MsIHRocm93IG91dCB0aGUgaW5wdXRcbiAgICAgIC8vIGNoYXJzLiBQYXN0ZSBldmVudHMgc2hvdWxkIG5vdCBsZWFkIHRvIEJlZm9yZUlucHV0IGV2ZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLyoqXG4gICAgICAgKiBBcyBvZiB2MjcsIEZpcmVmb3ggbWF5IGZpcmUga2V5cHJlc3MgZXZlbnRzIGV2ZW4gd2hlbiBubyBjaGFyYWN0ZXJcbiAgICAgICAqIHdpbGwgYmUgaW5zZXJ0ZWQuIEEgZmV3IHBvc3NpYmlsaXRpZXM6XG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIGAwYC4gQXJyb3cga2V5cywgRXNjIGtleSwgZXRjLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IG5vIGNoYXIgaXMgYXZhaWxhYmxlLlxuICAgICAgICogICBFeDogJ0FsdEdyICsgZGAgaW4gUG9saXNoLiBUaGVyZSBpcyBubyBtb2RpZmllZCBjaGFyYWN0ZXIgZm9yXG4gICAgICAgKiAgIHRoaXMga2V5IGNvbWJpbmF0aW9uIGFuZCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQgaW50byB0aGVcbiAgICAgICAqICAgZG9jdW1lbnQsIGJ1dCBGRiBmaXJlcyB0aGUga2V5cHJlc3MgZm9yIGNoYXIgY29kZSBgMTAwYCBhbnl3YXkuXG4gICAgICAgKiAgIE5vIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBhIGNvbW1hbmQgY29tYmluYXRpb24gaXNcbiAgICAgICAqICAgYmVpbmcgdXNlZC4gRXg6IGBDbWQrQ2AuIE5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCwgYW5kIG5vXG4gICAgICAgKiAgIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqL1xuICAgICAgaWYgKCFpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgLy8gSUUgZmlyZXMgdGhlIGBrZXlwcmVzc2AgZXZlbnQgd2hlbiBhIHVzZXIgdHlwZXMgYW4gZW1vamkgdmlhXG4gICAgICAgIC8vIFRvdWNoIGtleWJvYXJkIG9mIFdpbmRvd3MuICBJbiBzdWNoIGEgY2FzZSwgdGhlIGBjaGFyYCBwcm9wZXJ0eVxuICAgICAgICAvLyBob2xkcyBhbiBlbW9qaSBjaGFyYWN0ZXIgbGlrZSBgXFx1RDgzRFxcdURFMEFgLiAgQmVjYXVzZSBpdHMgbGVuZ3RoXG4gICAgICAgIC8vIGlzIDIsIHRoZSBwcm9wZXJ0eSBgd2hpY2hgIGRvZXMgbm90IHJlcHJlc2VudCBhbiBlbW9qaSBjb3JyZWN0bHkuXG4gICAgICAgIC8vIEluIHN1Y2ggYSBjYXNlLCB3ZSBkaXJlY3RseSByZXR1cm4gdGhlIGBjaGFyYCBwcm9wZXJ0eSBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHVzaW5nIGB3aGljaGAuXG4gICAgICAgIGlmIChuYXRpdmVFdmVudC5jaGFyICYmIG5hdGl2ZUV2ZW50LmNoYXIubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHJldHVybiBuYXRpdmVFdmVudC5jaGFyO1xuICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUV2ZW50LndoaWNoKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobmF0aXZlRXZlbnQud2hpY2gpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSA/IG51bGwgOiBuYXRpdmVFdmVudC5kYXRhO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG4vKipcbiAqIEV4dHJhY3QgYSBTeW50aGV0aWNJbnB1dEV2ZW50IGZvciBgYmVmb3JlSW5wdXRgLCBiYXNlZCBvbiBlaXRoZXIgbmF0aXZlXG4gKiBgdGV4dElucHV0YCBvciBmYWxsYmFjayBiZWhhdmlvci5cbiAqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgY2hhcnM7XG5cbiAgaWYgKGNhblVzZVRleHRJbnB1dEV2ZW50KSB7XG4gICAgY2hhcnMgPSBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IGVsc2Uge1xuICAgIGNoYXJzID0gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IC8vIElmIG5vIGNoYXJhY3RlcnMgYXJlIGJlaW5nIGluc2VydGVkLCBubyBCZWZvcmVJbnB1dCBldmVudCBzaG91bGRcbiAgLy8gYmUgZmlyZWQuXG5cblxuICBpZiAoIWNoYXJzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsICdvbkJlZm9yZUlucHV0Jyk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0lucHV0RXZlbnQoJ29uQmVmb3JlSW5wdXQnLCAnYmVmb3JlaW5wdXQnLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICAgIGV2ZW50LmRhdGEgPSBjaGFycztcbiAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYW4gYG9uQmVmb3JlSW5wdXRgIGV2ZW50IHRvIG1hdGNoXG4gKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNS8jZXZlbnRzLWlucHV0ZXZlbnRzLlxuICpcbiAqIFRoaXMgZXZlbnQgcGx1Z2luIGlzIGJhc2VkIG9uIHRoZSBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRcbiAqIGF2YWlsYWJsZSBpbiBDaHJvbWUsIFNhZmFyaSwgT3BlcmEsIGFuZCBJRS4gVGhpcyBldmVudCBmaXJlcyBhZnRlclxuICogYG9uS2V5UHJlc3NgIGFuZCBgb25Db21wb3NpdGlvbkVuZGAsIGJ1dCBiZWZvcmUgYG9uSW5wdXRgLlxuICpcbiAqIGBiZWZvcmVJbnB1dGAgaXMgc3BlYydkIGJ1dCBub3QgaW1wbGVtZW50ZWQgaW4gYW55IGJyb3dzZXJzLCBhbmRcbiAqIHRoZSBgaW5wdXRgIGV2ZW50IGRvZXMgbm90IHByb3ZpZGUgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGhhc1xuICogYWN0dWFsbHkgYmVlbiBhZGRlZCwgY29udHJhcnkgdG8gdGhlIHNwZWMuIFRodXMsIGB0ZXh0SW5wdXRgIGlzIHRoZSBiZXN0XG4gKiBhdmFpbGFibGUgZXZlbnQgdG8gaWRlbnRpZnkgdGhlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGFjdHVhbGx5IGJlZW4gaW5zZXJ0ZWRcbiAqIGludG8gdGhlIHRhcmdldCBub2RlLlxuICpcbiAqIFRoaXMgcGx1Z2luIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIGBjb21wb3NpdGlvbmAgZXZlbnRzLCB0aHVzXG4gKiBhbGxvd2luZyB1cyB0byBzaGFyZSBjb21wb3NpdGlvbiBmYWxsYmFjayBjb2RlIGZvciBib3RoIGBiZWZvcmVJbnB1dGAgYW5kXG4gKiBgY29tcG9zaXRpb25gIGV2ZW50IHR5cGVzLlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLWlucHV0LWVsZW1lbnQuaHRtbCNpbnB1dC10eXBlLWF0dHItc3VtbWFyeVxuICovXG52YXIgc3VwcG9ydGVkSW5wdXRUeXBlcyA9IHtcbiAgY29sb3I6IHRydWUsXG4gIGRhdGU6IHRydWUsXG4gIGRhdGV0aW1lOiB0cnVlLFxuICAnZGF0ZXRpbWUtbG9jYWwnOiB0cnVlLFxuICBlbWFpbDogdHJ1ZSxcbiAgbW9udGg6IHRydWUsXG4gIG51bWJlcjogdHJ1ZSxcbiAgcGFzc3dvcmQ6IHRydWUsXG4gIHJhbmdlOiB0cnVlLFxuICBzZWFyY2g6IHRydWUsXG4gIHRlbDogdHJ1ZSxcbiAgdGV4dDogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB3ZWVrOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBpc1RleHRJbnB1dEVsZW1lbnQoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ2lucHV0Jykge1xuICAgIHJldHVybiAhIXN1cHBvcnRlZElucHV0VHlwZXNbZWxlbS50eXBlXTtcbiAgfVxuXG4gIGlmIChub2RlTmFtZSA9PT0gJ3RleHRhcmVhJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGVudmlyb25tZW50LlxuICpcbiAqIE5PVEU6IFRoaXMgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkgZm9yIG5vbi1nZW5lcmljIGV2ZW50cyBzdWNoIGFzIGBjaGFuZ2VgLFxuICogYHJlc2V0YCwgYGxvYWRgLCBgZXJyb3JgLCBhbmQgYHNlbGVjdGAuXG4gKlxuICogQm9ycm93cyBmcm9tIE1vZGVybml6ci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lU3VmZml4IEV2ZW50IG5hbWUsIGUuZy4gXCJjbGlja1wiLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgc3VwcG9ydGVkLlxuICogQGludGVybmFsXG4gKiBAbGljZW5zZSBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiAqL1xuXG5mdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKGV2ZW50TmFtZVN1ZmZpeCkge1xuICBpZiAoIWNhblVzZURPTSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBldmVudE5hbWUgPSAnb24nICsgZXZlbnROYW1lU3VmZml4O1xuICB2YXIgaXNTdXBwb3J0ZWQgPSAoZXZlbnROYW1lIGluIGRvY3VtZW50KTtcblxuICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShldmVudE5hbWUsICdyZXR1cm47Jyk7XG4gICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxlbWVudFtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgcmV0dXJuIGlzU3VwcG9ydGVkO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cyQxKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ2hhbmdlJywgWydjaGFuZ2UnLCAnY2xpY2snLCAnZm9jdXNpbicsICdmb2N1c291dCcsICdpbnB1dCcsICdrZXlkb3duJywgJ2tleXVwJywgJ3NlbGVjdGlvbmNoYW5nZSddKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGluc3QsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpIHtcbiAgLy8gRmxhZyB0aGlzIGV2ZW50IGxvb3AgYXMgbmVlZGluZyBzdGF0ZSByZXN0b3JlLlxuICBlbnF1ZXVlU3RhdGVSZXN0b3JlKHRhcmdldCk7XG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoaW5zdCwgJ29uQ2hhbmdlJyk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KCdvbkNoYW5nZScsICdjaGFuZ2UnLCBudWxsLCBuYXRpdmVFdmVudCwgdGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBGb3IgSUUgc2hpbXNcbiAqL1xuXG5cbnZhciBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2hhbmdlYCBldmVudFxuICovXG5cbmZ1bmN0aW9uIHNob3VsZFVzZUNoYW5nZUV2ZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ3NlbGVjdCcgfHwgbm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgZWxlbS50eXBlID09PSAnZmlsZSc7XG59XG5cbmZ1bmN0aW9uIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGFjdGl2ZUVsZW1lbnRJbnN0LCBuYXRpdmVFdmVudCwgZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpKTsgLy8gSWYgY2hhbmdlIGFuZCBwcm9wZXJ0eWNoYW5nZSBidWJibGVkLCB3ZSdkIGp1c3QgYmluZCB0byBpdCBsaWtlIGFsbCB0aGVcbiAgLy8gb3RoZXIgZXZlbnRzIGFuZCBoYXZlIGl0IGdvIHRocm91Z2ggUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLiBTaW5jZSBpdFxuICAvLyBkb2Vzbid0LCB3ZSBtYW51YWxseSBsaXN0ZW4gZm9yIHRoZSBldmVudHMgYW5kIHNvIHdlIGhhdmUgdG8gZW5xdWV1ZSBhbmRcbiAgLy8gcHJvY2VzcyB0aGUgYWJzdHJhY3QgZXZlbnQgbWFudWFsbHkuXG4gIC8vXG4gIC8vIEJhdGNoaW5nIGlzIG5lY2Vzc2FyeSBoZXJlIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGFsbCBldmVudCBoYW5kbGVycyBydW5cbiAgLy8gYmVmb3JlIHRoZSBuZXh0IHJlcmVuZGVyIChpbmNsdWRpbmcgZXZlbnQgaGFuZGxlcnMgYXR0YWNoZWQgdG8gYW5jZXN0b3JcbiAgLy8gZWxlbWVudHMgaW5zdGVhZCBvZiBkaXJlY3RseSBvbiB0aGUgaW5wdXQpLiBXaXRob3V0IHRoaXMsIGNvbnRyb2xsZWRcbiAgLy8gY29tcG9uZW50cyBkb24ndCB3b3JrIHByb3Blcmx5IGluIGNvbmp1bmN0aW9uIHdpdGggZXZlbnQgYnViYmxpbmcgYmVjYXVzZVxuICAvLyB0aGUgY29tcG9uZW50IGlzIHJlcmVuZGVyZWQgYW5kIHRoZSB2YWx1ZSByZXZlcnRlZCBiZWZvcmUgYWxsIHRoZSBldmVudFxuICAvLyBoYW5kbGVycyBjYW4gcnVuLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MDguXG5cbiAgYmF0Y2hlZFVwZGF0ZXMocnVuRXZlbnRJbkJhdGNoLCBkaXNwYXRjaFF1ZXVlKTtcbn1cblxuZnVuY3Rpb24gcnVuRXZlbnRJbkJhdGNoKGRpc3BhdGNoUXVldWUpIHtcbiAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgMCk7XG59XG5cbmZ1bmN0aW9uIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KSB7XG4gIHZhciB0YXJnZXROb2RlID0gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KTtcblxuICBpZiAodXBkYXRlVmFsdWVJZkNoYW5nZWQodGFyZ2V0Tm9kZSkpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH1cbn1cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBpbnB1dGAgZXZlbnRcbiAqL1xuXG5cbnZhciBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBmYWxzZTtcblxuaWYgKGNhblVzZURPTSkge1xuICAvLyBJRTkgY2xhaW1zIHRvIHN1cHBvcnQgdGhlIGlucHV0IGV2ZW50IGJ1dCBmYWlscyB0byB0cmlnZ2VyIGl0IHdoZW5cbiAgLy8gZGVsZXRpbmcgdGV4dCwgc28gd2UgaWdub3JlIGl0cyBpbnB1dCBldmVudHMuXG4gIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGlzRXZlbnRTdXBwb3J0ZWQoJ2lucHV0JykgJiYgKCFkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gOSk7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBTdGFydHMgdHJhY2tpbmcgcHJvcGVydHljaGFuZ2UgZXZlbnRzIG9uIHRoZSBwYXNzZWQtaW4gZWxlbWVudFxuICogYW5kIG92ZXJyaWRlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB1c2VyIGV2ZW50cyBmcm9tXG4gKiB2YWx1ZSBjaGFuZ2VzIGluIEpTLlxuICovXG5cblxuZnVuY3Rpb24gc3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBhY3RpdmVFbGVtZW50ID0gdGFyZ2V0O1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IHRhcmdldEluc3Q7XG4gIGFjdGl2ZUVsZW1lbnQuYXR0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBSZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lcnMgZnJvbSB0aGUgY3VycmVudGx5LXRyYWNrZWQgZWxlbWVudCxcbiAqIGlmIGFueSBleGlzdHMuXG4gKi9cblxuXG5mdW5jdGlvbiBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpIHtcbiAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYWN0aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbiAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIEhhbmRsZXMgYSBwcm9wZXJ0eWNoYW5nZSBldmVudCwgc2VuZGluZyBhIGBjaGFuZ2VgIGV2ZW50IGlmXG4gKiB0aGUgdmFsdWUgb2YgdGhlIGFjdGl2ZSBlbGVtZW50IGhhcyBjaGFuZ2VkLlxuICovXG5cblxuZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlDaGFuZ2UobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LnByb3BlcnR5TmFtZSAhPT0gJ3ZhbHVlJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QpKSB7XG4gICAgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsKGRvbUV2ZW50TmFtZSwgdGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c2luJykge1xuICAgIC8vIEluIElFOSwgcHJvcGVydHljaGFuZ2UgZmlyZXMgZm9yIG1vc3QgaW5wdXQgZXZlbnRzIGJ1dCBpcyBidWdneSBhbmRcbiAgICAvLyBkb2Vzbid0IGZpcmUgd2hlbiB0ZXh0IGlzIGRlbGV0ZWQsIGJ1dCBjb252ZW5pZW50bHksIHNlbGVjdGlvbmNoYW5nZVxuICAgIC8vIGFwcGVhcnMgdG8gZmlyZSBpbiBhbGwgb2YgdGhlIHJlbWFpbmluZyBjYXNlcyBzbyB3ZSBjYXRjaCB0aG9zZSBhbmRcbiAgICAvLyBmb3J3YXJkIHRoZSBldmVudCBpZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAvLyBJbiBlaXRoZXIgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byBjYWxsIHRoZSBldmVudCBoYW5kbGVyIGlmIHRoZSB2YWx1ZVxuICAgIC8vIGlzIGNoYW5nZWQgZnJvbSBKUyBzbyB3ZSByZWRlZmluZSBhIHNldHRlciBmb3IgYC52YWx1ZWAgdGhhdCB1cGRhdGVzXG4gICAgLy8gb3VyIGFjdGl2ZUVsZW1lbnRWYWx1ZSB2YXJpYWJsZSwgYWxsb3dpbmcgdXMgdG8gaWdub3JlIHRob3NlIGNoYW5nZXNcbiAgICAvL1xuICAgIC8vIHN0b3BXYXRjaGluZygpIHNob3VsZCBiZSBhIG5vb3AgaGVyZSBidXQgd2UgY2FsbCBpdCBqdXN0IGluIGNhc2Ugd2VcbiAgICAvLyBtaXNzZWQgYSBibHVyIGV2ZW50IHNvbWVob3cuXG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgICBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KTtcbiAgfSBlbHNlIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c291dCcpIHtcbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICB9XG59IC8vIEZvciBJRTggYW5kIElFOS5cblxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsKGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnc2VsZWN0aW9uY2hhbmdlJyB8fCBkb21FdmVudE5hbWUgPT09ICdrZXl1cCcgfHwgZG9tRXZlbnROYW1lID09PSAna2V5ZG93bicpIHtcbiAgICAvLyBPbiB0aGUgc2VsZWN0aW9uY2hhbmdlIGV2ZW50LCB0aGUgdGFyZ2V0IGlzIGp1c3QgZG9jdW1lbnQgd2hpY2ggaXNuJ3RcbiAgICAvLyBoZWxwZnVsIGZvciB1cyBzbyBqdXN0IGNoZWNrIGFjdGl2ZUVsZW1lbnQgaW5zdGVhZC5cbiAgICAvL1xuICAgIC8vIDk5JSBvZiB0aGUgdGltZSwga2V5ZG93biBhbmQga2V5dXAgYXJlbid0IG5lY2Vzc2FyeS4gSUU4IGZhaWxzIHRvIGZpcmVcbiAgICAvLyBwcm9wZXJ0eWNoYW5nZSBvbiB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYWZ0ZXIgc2V0dGluZyBgdmFsdWVgIGZyb20gYVxuICAgIC8vIHNjcmlwdCBhbmQgZmlyZXMgb25seSBrZXlkb3duLCBrZXlwcmVzcywga2V5dXAuIENhdGNoaW5nIGtleXVwIHVzdWFsbHlcbiAgICAvLyBnZXRzIGl0IGFuZCBjYXRjaGluZyBrZXlkb3duIGxldHMgdXMgZmlyZSBhbiBldmVudCBmb3IgdGhlIGZpcnN0XG4gICAgLy8ga2V5c3Ryb2tlIGlmIHVzZXIgZG9lcyBhIGtleSByZXBlYXQgKGl0J2xsIGJlIGEgbGl0dGxlIGRlbGF5ZWQ6IHJpZ2h0XG4gICAgLy8gYmVmb3JlIHRoZSBzZWNvbmQga2V5c3Ryb2tlKS4gT3RoZXIgaW5wdXQgbWV0aG9kcyAoZS5nLiwgcGFzdGUpIHNlZW0gdG9cbiAgICAvLyBmaXJlIHNlbGVjdGlvbmNoYW5nZSBub3JtYWxseS5cbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0KTtcbiAgfVxufVxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNsaWNrYCBldmVudFxuICovXG5cblxuZnVuY3Rpb24gc2hvdWxkVXNlQ2xpY2tFdmVudChlbGVtKSB7XG4gIC8vIFVzZSB0aGUgYGNsaWNrYCBldmVudCB0byBkZXRlY3QgY2hhbmdlcyB0byBjaGVja2JveCBhbmQgcmFkaW8gaW5wdXRzLlxuICAvLyBUaGlzIGFwcHJvYWNoIHdvcmtzIGFjcm9zcyBhbGwgYnJvd3NlcnMsIHdoZXJlYXMgYGNoYW5nZWAgZG9lcyBub3QgZmlyZVxuICAvLyB1bnRpbCBgYmx1cmAgaW4gSUU4LlxuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAnY2hlY2tib3gnIHx8IGVsZW0udHlwZSA9PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnY2xpY2snKSB7XG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnaW5wdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIobm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl93cmFwcGVyU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZSB8fCAhc3RhdGUuY29udHJvbGxlZCB8fCBub2RlLnR5cGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIC8vIElmIGNvbnRyb2xsZWQsIGFzc2lnbiB0aGUgdmFsdWUgYXR0cmlidXRlIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9uIGJsdXJcbiAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgJ251bWJlcicsIG5vZGUudmFsdWUpO1xuICB9XG59XG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uQ2hhbmdlYCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgY2hhbmdlIGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuIFRoaXMgZXZlbnQgZmlyZXMgYXQgYSB0aW1lIHdoZW4gaXQncyBwb3NzaWJsZSB0b1xuICogY2hhbmdlIHRoZSBlbGVtZW50J3MgdmFsdWUgd2l0aG91dCBzZWVpbmcgYSBmbGlja2VyLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIHNlbGVjdFxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQxKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcbiAgdmFyIGdldFRhcmdldEluc3RGdW5jLCBoYW5kbGVFdmVudEZ1bmM7XG5cbiAgaWYgKHNob3VsZFVzZUNoYW5nZUV2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQ7XG4gIH0gZWxzZSBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpKSB7XG4gICAgaWYgKGlzSW5wdXRFdmVudFN1cHBvcnRlZCkge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgfVxuICB9IGVsc2UgaWYgKHNob3VsZFVzZUNsaWNrRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50O1xuICB9XG5cbiAgaWYgKGdldFRhcmdldEluc3RGdW5jKSB7XG4gICAgdmFyIGluc3QgPSBnZXRUYXJnZXRJbnN0RnVuYyhkb21FdmVudE5hbWUsIHRhcmdldEluc3QpO1xuXG4gICAgaWYgKGluc3QpIHtcbiAgICAgIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBpbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChoYW5kbGVFdmVudEZ1bmMpIHtcbiAgICBoYW5kbGVFdmVudEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXROb2RlLCB0YXJnZXRJbnN0KTtcbiAgfSAvLyBXaGVuIGJsdXJyaW5nLCBzZXQgdGhlIHZhbHVlIGF0dHJpYnV0ZSBmb3IgbnVtYmVyIGlucHV0c1xuXG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2ZvY3Vzb3V0Jykge1xuICAgIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIodGFyZ2V0Tm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMigpIHtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Nb3VzZUVudGVyJywgWydtb3VzZW91dCcsICdtb3VzZW92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uTW91c2VMZWF2ZScsIFsnbW91c2VvdXQnLCAnbW91c2VvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvblBvaW50ZXJFbnRlcicsIFsncG9pbnRlcm91dCcsICdwb2ludGVyb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Qb2ludGVyTGVhdmUnLCBbJ3BvaW50ZXJvdXQnLCAncG9pbnRlcm92ZXInXSk7XG59XG4vKipcbiAqIEZvciBhbG1vc3QgZXZlcnkgaW50ZXJhY3Rpb24gd2UgY2FyZSBhYm91dCwgdGhlcmUgd2lsbCBiZSBib3RoIGEgdG9wLWxldmVsXG4gKiBgbW91c2VvdmVyYCBhbmQgYG1vdXNlb3V0YCBldmVudCB0aGF0IG9jY3Vycy4gT25seSB1c2UgYG1vdXNlb3V0YCBzbyB0aGF0XG4gKiB3ZSBkbyBub3QgZXh0cmFjdCBkdXBsaWNhdGUgZXZlbnRzLiBIb3dldmVyLCBtb3ZpbmcgdGhlIG1vdXNlIGludG8gdGhlXG4gKiBicm93c2VyIGZyb20gb3V0c2lkZSB3aWxsIG5vdCBmaXJlIGEgYG1vdXNlb3V0YCBldmVudC4gSW4gdGhpcyBjYXNlLCB3ZSB1c2VcbiAqIHRoZSBgbW91c2VvdmVyYCB0b3AtbGV2ZWwgZXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgaXNPdmVyRXZlbnQgPSBkb21FdmVudE5hbWUgPT09ICdtb3VzZW92ZXInIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdmVyJztcbiAgdmFyIGlzT3V0RXZlbnQgPSBkb21FdmVudE5hbWUgPT09ICdtb3VzZW91dCcgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm91dCc7XG5cbiAgaWYgKGlzT3ZlckV2ZW50ICYmIChldmVudFN5c3RlbUZsYWdzICYgSVNfUkVQTEFZRUQpID09PSAwKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhbiBvdmVyIGV2ZW50IHdpdGggYSB0YXJnZXQsIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBkaXNwYXRjaGVkXG4gICAgLy8gdGhlIGV2ZW50IGluIHRoZSBvdXQgZXZlbnQgb2YgdGhlIG90aGVyIHRhcmdldC4gSWYgdGhpcyBpcyByZXBsYXllZCxcbiAgICAvLyB0aGVuIGl0J3MgYmVjYXVzZSB3ZSBjb3VsZG4ndCBkaXNwYXRjaCBhZ2FpbnN0IHRoaXMgdGFyZ2V0IHByZXZpb3VzbHlcbiAgICAvLyBzbyB3ZSBoYXZlIHRvIGRvIGl0IG5vdyBpbnN0ZWFkLlxuICAgIHZhciByZWxhdGVkID0gbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC5mcm9tRWxlbWVudDtcblxuICAgIGlmIChyZWxhdGVkKSB7XG4gICAgICAvLyBJZiB0aGUgcmVsYXRlZCBub2RlIGlzIG1hbmFnZWQgYnkgUmVhY3QsIHdlIGNhbiBhc3N1bWUgdGhhdCB3ZSBoYXZlXG4gICAgICAvLyBhbHJlYWR5IGRpc3BhdGNoZWQgdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnRzIGR1cmluZyBpdHMgbW91c2VvdXQuXG4gICAgICBpZiAoZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocmVsYXRlZCkgfHwgaXNDb250YWluZXJNYXJrZWRBc1Jvb3QocmVsYXRlZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghaXNPdXRFdmVudCAmJiAhaXNPdmVyRXZlbnQpIHtcbiAgICAvLyBNdXN0IG5vdCBiZSBhIG1vdXNlIG9yIHBvaW50ZXIgaW4gb3Igb3V0IC0gaWdub3JpbmcuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHdpbjsgLy8gVE9ETzogd2h5IGlzIHRoaXMgbnVsbGFibGUgaW4gdGhlIHR5cGVzIGJ1dCB3ZSByZWFkIGZyb20gaXQ/XG5cbiAgaWYgKG5hdGl2ZUV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICAvLyBgbmF0aXZlRXZlbnRUYXJnZXRgIGlzIHByb2JhYmx5IGEgd2luZG93IG9iamVjdC5cbiAgICB3aW4gPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBgb3duZXJEb2N1bWVudGAgaXMgc29tZXRpbWVzIHVuZGVmaW5lZCBpbiBJRTguXG4gICAgdmFyIGRvYyA9IG5hdGl2ZUV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG5cbiAgICBpZiAoZG9jKSB7XG4gICAgICB3aW4gPSBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgd2luID0gd2luZG93O1xuICAgIH1cbiAgfVxuXG4gIHZhciBmcm9tO1xuICB2YXIgdG87XG5cbiAgaWYgKGlzT3V0RXZlbnQpIHtcbiAgICB2YXIgX3JlbGF0ZWQgPSBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnRvRWxlbWVudDtcblxuICAgIGZyb20gPSB0YXJnZXRJbnN0O1xuICAgIHRvID0gX3JlbGF0ZWQgPyBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShfcmVsYXRlZCkgOiBudWxsO1xuXG4gICAgaWYgKHRvICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRvKTtcblxuICAgICAgaWYgKHRvICE9PSBuZWFyZXN0TW91bnRlZCB8fCB0by50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgdG8udGFnICE9PSBIb3N0VGV4dCkge1xuICAgICAgICB0byA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE1vdmluZyB0byBhIG5vZGUgZnJvbSBvdXRzaWRlIHRoZSB3aW5kb3cuXG4gICAgZnJvbSA9IG51bGw7XG4gICAgdG8gPSB0YXJnZXRJbnN0O1xuICB9XG5cbiAgaWYgKGZyb20gPT09IHRvKSB7XG4gICAgLy8gTm90aGluZyBwZXJ0YWlucyB0byBvdXIgbWFuYWdlZCBjb21wb25lbnRzLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICB2YXIgbGVhdmVFdmVudFR5cGUgPSAnb25Nb3VzZUxlYXZlJztcbiAgdmFyIGVudGVyRXZlbnRUeXBlID0gJ29uTW91c2VFbnRlcic7XG4gIHZhciBldmVudFR5cGVQcmVmaXggPSAnbW91c2UnO1xuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3V0JyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3ZlcicpIHtcbiAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgbGVhdmVFdmVudFR5cGUgPSAnb25Qb2ludGVyTGVhdmUnO1xuICAgIGVudGVyRXZlbnRUeXBlID0gJ29uUG9pbnRlckVudGVyJztcbiAgICBldmVudFR5cGVQcmVmaXggPSAncG9pbnRlcic7XG4gIH1cblxuICB2YXIgZnJvbU5vZGUgPSBmcm9tID09IG51bGwgPyB3aW4gOiBnZXROb2RlRnJvbUluc3RhbmNlKGZyb20pO1xuICB2YXIgdG9Ob2RlID0gdG8gPT0gbnVsbCA/IHdpbiA6IGdldE5vZGVGcm9tSW5zdGFuY2UodG8pO1xuICB2YXIgbGVhdmUgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKGxlYXZlRXZlbnRUeXBlLCBldmVudFR5cGVQcmVmaXggKyAnbGVhdmUnLCBmcm9tLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICBsZWF2ZS50YXJnZXQgPSBmcm9tTm9kZTtcbiAgbGVhdmUucmVsYXRlZFRhcmdldCA9IHRvTm9kZTtcbiAgdmFyIGVudGVyID0gbnVsbDsgLy8gV2Ugc2hvdWxkIG9ubHkgcHJvY2VzcyB0aGlzIG5hdGl2ZUV2ZW50IGlmIHdlIGFyZSBwcm9jZXNzaW5nXG4gIC8vIHRoZSBmaXJzdCBhbmNlc3Rvci4gTmV4dCB0aW1lLCB3ZSB3aWxsIGlnbm9yZSB0aGUgZXZlbnQuXG5cbiAgdmFyIG5hdGl2ZVRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKG5hdGl2ZVRhcmdldEluc3QgPT09IHRhcmdldEluc3QpIHtcbiAgICB2YXIgZW50ZXJFdmVudCA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IoZW50ZXJFdmVudFR5cGUsIGV2ZW50VHlwZVByZWZpeCArICdlbnRlcicsIHRvLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGVudGVyRXZlbnQudGFyZ2V0ID0gdG9Ob2RlO1xuICAgIGVudGVyRXZlbnQucmVsYXRlZFRhcmdldCA9IGZyb21Ob2RlO1xuICAgIGVudGVyID0gZW50ZXJFdmVudDtcbiAgfVxuXG4gIGFjY3VtdWxhdGVFbnRlckxlYXZlVHdvUGhhc2VMaXN0ZW5lcnMoZGlzcGF0Y2hRdWV1ZSwgbGVhdmUsIGVudGVyLCBmcm9tLCB0byk7XG59XG5cbi8qKlxuICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gKi9cbmZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgcmV0dXJuIHggPT09IHkgJiYgKHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5KSB8fCB4ICE9PSB4ICYmIHkgIT09IHkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgO1xufVxuXG52YXIgb2JqZWN0SXMgPSB0eXBlb2YgT2JqZWN0LmlzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmlzIDogaXM7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSQyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbi8qKlxuICogUGVyZm9ybXMgZXF1YWxpdHkgYnkgaXRlcmF0aW5nIHRocm91Z2gga2V5cyBvbiBhbiBvYmplY3QgYW5kIHJldHVybmluZyBmYWxzZVxuICogd2hlbiBhbnkga2V5IGhhcyB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBzdHJpY3RseSBlcXVhbCBiZXR3ZWVuIHRoZSBhcmd1bWVudHMuXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWVzIG9mIGFsbCBrZXlzIGFyZSBzdHJpY3RseSBlcXVhbC5cbiAqL1xuXG5mdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikge1xuICBpZiAob2JqZWN0SXMob2JqQSwgb2JqQikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgb2JqQSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHwgb2JqQiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xuICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWhhc093blByb3BlcnR5JDIuY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIW9iamVjdElzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbnkgbm9kZSByZXR1cm4gdGhlIGZpcnN0IGxlYWYgbm9kZSB3aXRob3V0IGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuXG5mdW5jdGlvbiBnZXRMZWFmTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlICYmIG5vZGUuZmlyc3RDaGlsZCkge1xuICAgIG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cbi8qKlxuICogR2V0IHRoZSBuZXh0IHNpYmxpbmcgd2l0aGluIGEgY29udGFpbmVyLiBUaGlzIHdpbGwgd2FsayB1cCB0aGVcbiAqIERPTSBpZiBhIG5vZGUncyBzaWJsaW5ncyBoYXZlIGJlZW4gZXhoYXVzdGVkLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7P0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRTaWJsaW5nTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cbn1cbi8qKlxuICogR2V0IG9iamVjdCBkZXNjcmliaW5nIHRoZSBub2RlcyB3aGljaCBjb250YWluIGNoYXJhY3RlcnMgYXQgb2Zmc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gcm9vdFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQocm9vdCwgb2Zmc2V0KSB7XG4gIHZhciBub2RlID0gZ2V0TGVhZk5vZGUocm9vdCk7XG4gIHZhciBub2RlU3RhcnQgPSAwO1xuICB2YXIgbm9kZUVuZCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBub2RlRW5kID0gbm9kZVN0YXJ0ICsgbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG5cbiAgICAgIGlmIChub2RlU3RhcnQgPD0gb2Zmc2V0ICYmIG5vZGVFbmQgPj0gb2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldCAtIG5vZGVTdGFydFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBub2RlU3RhcnQgPSBub2RlRW5kO1xuICAgIH1cblxuICAgIG5vZGUgPSBnZXRMZWFmTm9kZShnZXRTaWJsaW5nTm9kZShub2RlKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG91dGVyTm9kZVxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRPZmZzZXRzKG91dGVyTm9kZSkge1xuICB2YXIgb3duZXJEb2N1bWVudCA9IG91dGVyTm9kZS5vd25lckRvY3VtZW50O1xuICB2YXIgd2luID0gb3duZXJEb2N1bWVudCAmJiBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24gJiYgd2luLmdldFNlbGVjdGlvbigpO1xuXG4gIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgYW5jaG9yTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0ID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCA9IHNlbGVjdGlvbi5mb2N1c09mZnNldDsgLy8gSW4gRmlyZWZveCwgYW5jaG9yTm9kZSBhbmQgZm9jdXNOb2RlIGNhbiBiZSBcImFub255bW91cyBkaXZzXCIsIGUuZy4gdGhlXG4gIC8vIHVwL2Rvd24gYnV0dG9ucyBvbiBhbiA8aW5wdXQgdHlwZT1cIm51bWJlclwiPi4gQW5vbnltb3VzIGRpdnMgZG8gbm90IHNlZW0gdG9cbiAgLy8gZXhwb3NlIHByb3BlcnRpZXMsIHRyaWdnZXJpbmcgYSBcIlBlcm1pc3Npb24gZGVuaWVkIGVycm9yXCIgaWYgYW55IG9mIGl0c1xuICAvLyBwcm9wZXJ0aWVzIGFyZSBhY2Nlc3NlZC4gVGhlIG9ubHkgc2VlbWluZ2x5IHBvc3NpYmxlIHdheSB0byBhdm9pZCBlcnJvcmluZ1xuICAvLyBpcyB0byBhY2Nlc3MgYSBwcm9wZXJ0eSB0aGF0IHR5cGljYWxseSB3b3JrcyBmb3Igbm9uLWFub255bW91cyBkaXZzIGFuZFxuICAvLyBjYXRjaCBhbnkgZXJyb3IgdGhhdCBtYXkgb3RoZXJ3aXNlIGFyaXNlLiBTZWVcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDI3XG5cbiAgdHJ5IHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAgICBhbmNob3JOb2RlLm5vZGVUeXBlO1xuICAgIGZvY3VzTm9kZS5ub2RlVHlwZTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZ2V0TW9kZXJuT2Zmc2V0c0Zyb21Qb2ludHMob3V0ZXJOb2RlLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHtzdGFydCwgZW5kfSB3aGVyZSBgc3RhcnRgIGlzIHRoZSBjaGFyYWN0ZXIvY29kZXBvaW50IGluZGV4IG9mXG4gKiAoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KSB3aXRoaW4gdGhlIHRleHRDb250ZW50IG9mIGBvdXRlck5vZGVgLCBhbmRcbiAqIGBlbmRgIGlzIHRoZSBpbmRleCBvZiAoZm9jdXNOb2RlLCBmb2N1c09mZnNldCkuXG4gKlxuICogUmV0dXJucyBudWxsIGlmIHlvdSBwYXNzIGluIGdhcmJhZ2UgaW5wdXQgYnV0IHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGNyYXNoLlxuICpcbiAqIEV4cG9ydGVkIG9ubHkgZm9yIHRlc3RpbmcuXG4gKi9cblxuZnVuY3Rpb24gZ2V0TW9kZXJuT2Zmc2V0c0Zyb21Qb2ludHMob3V0ZXJOb2RlLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpIHtcbiAgdmFyIGxlbmd0aCA9IDA7XG4gIHZhciBzdGFydCA9IC0xO1xuICB2YXIgZW5kID0gLTE7XG4gIHZhciBpbmRleFdpdGhpbkFuY2hvciA9IDA7XG4gIHZhciBpbmRleFdpdGhpbkZvY3VzID0gMDtcbiAgdmFyIG5vZGUgPSBvdXRlck5vZGU7XG4gIHZhciBwYXJlbnROb2RlID0gbnVsbDtcblxuICBvdXRlcjogd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgbmV4dCA9IG51bGw7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUgPT09IGFuY2hvck5vZGUgJiYgKGFuY2hvck9mZnNldCA9PT0gMCB8fCBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpKSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoICsgYW5jaG9yT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZm9jdXNOb2RlICYmIChmb2N1c09mZnNldCA9PT0gMCB8fCBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpKSB7XG4gICAgICAgIGVuZCA9IGxlbmd0aCArIGZvY3VzT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICAgIGxlbmd0aCArPSBub2RlLm5vZGVWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmICgobmV4dCA9IG5vZGUuZmlyc3RDaGlsZCkgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIE1vdmluZyBmcm9tIGBub2RlYCB0byBpdHMgZmlyc3QgY2hpbGQgYG5leHRgLlxuXG5cbiAgICAgIHBhcmVudE5vZGUgPSBub2RlO1xuICAgICAgbm9kZSA9IG5leHQ7XG4gICAgfVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlID09PSBvdXRlck5vZGUpIHtcbiAgICAgICAgLy8gSWYgYG91dGVyTm9kZWAgaGFzIGNoaWxkcmVuLCB0aGlzIGlzIGFsd2F5cyB0aGUgc2Vjb25kIHRpbWUgdmlzaXRpbmdcbiAgICAgICAgLy8gaXQuIElmIGl0IGhhcyBubyBjaGlsZHJlbiwgdGhpcyBpcyBzdGlsbCB0aGUgZmlyc3QgbG9vcCwgYW5kIHRoZSBvbmx5XG4gICAgICAgIC8vIHZhbGlkIHNlbGVjdGlvbiBpcyBhbmNob3JOb2RlIGFuZCBmb2N1c05vZGUgYm90aCBlcXVhbCB0byB0aGlzIG5vZGVcbiAgICAgICAgLy8gYW5kIGJvdGggb2Zmc2V0cyAwLCBpbiB3aGljaCBjYXNlIHdlIHdpbGwgaGF2ZSBoYW5kbGVkIGFib3ZlLlxuICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGFuY2hvck5vZGUgJiYgKytpbmRleFdpdGhpbkFuY2hvciA9PT0gYW5jaG9yT2Zmc2V0KSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50Tm9kZSA9PT0gZm9jdXNOb2RlICYmICsraW5kZXhXaXRoaW5Gb2N1cyA9PT0gZm9jdXNPZmZzZXQpIHtcbiAgICAgICAgZW5kID0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAoKG5leHQgPSBub2RlLm5leHRTaWJsaW5nKSAhPT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH0gLy8gTW92aW5nIGZyb20gYG5vZGVgIHRvIGl0cyBuZXh0IHNpYmxpbmcgYG5leHRgLlxuXG5cbiAgICBub2RlID0gbmV4dDtcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSkge1xuICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKFdvdWxkIGhhcHBlbiBpZiB0aGUgYW5jaG9yL2ZvY3VzIG5vZGVzIGFyZW4ndFxuICAgIC8vIGFjdHVhbGx5IGluc2lkZSB0aGUgcGFzc2VkLWluIG5vZGUuKVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBlbmRcbiAgfTtcbn1cbi8qKlxuICogSW4gbW9kZXJuIG5vbi1JRSBicm93c2Vycywgd2UgY2FuIHN1cHBvcnQgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZFxuICogc2VsZWN0aW9ucy5cbiAqXG4gKiBOb3RlOiBJRTEwKyBzdXBwb3J0cyB0aGUgU2VsZWN0aW9uIG9iamVjdCwgYnV0IGl0IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoZSBgZXh0ZW5kYCBtZXRob2QsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiBpbiBtb2Rlcm4gSUUsIGl0J3Mgbm90IHBvc3NpYmxlXG4gKiB0byBwcm9ncmFtbWF0aWNhbGx5IGNyZWF0ZSBhIGJhY2t3YXJkIHNlbGVjdGlvbi4gVGh1cywgZm9yIGFsbCBJRVxuICogdmVyc2lvbnMsIHdlIHVzZSB0aGUgb2xkIElFIEFQSSB0byBjcmVhdGUgb3VyIHNlbGVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gb2Zmc2V0c1xuICovXG5cbmZ1bmN0aW9uIHNldE9mZnNldHMobm9kZSwgb2Zmc2V0cykge1xuICB2YXIgZG9jID0gbm9kZS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xuICB2YXIgd2luID0gZG9jICYmIGRvYy5kZWZhdWx0VmlldyB8fCB3aW5kb3c7IC8vIEVkZ2UgZmFpbHMgd2l0aCBcIk9iamVjdCBleHBlY3RlZFwiIGluIHNvbWUgc2NlbmFyaW9zLlxuICAvLyAoRm9yIGluc3RhbmNlOiBUaW55TUNFIGVkaXRvciB1c2VkIGluIGEgbGlzdCBjb21wb25lbnQgdGhhdCBzdXBwb3J0cyBwYXN0aW5nIHRvIGFkZCBtb3JlLFxuICAvLyBmYWlscyB3aGVuIHBhc3RpbmcgMTAwKyBpdGVtcylcblxuICBpZiAoIXdpbi5nZXRTZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpO1xuICB2YXIgbGVuZ3RoID0gbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gIHZhciBzdGFydCA9IE1hdGgubWluKG9mZnNldHMuc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZCA9PT0gdW5kZWZpbmVkID8gc3RhcnQgOiBNYXRoLm1pbihvZmZzZXRzLmVuZCwgbGVuZ3RoKTsgLy8gSUUgMTEgdXNlcyBtb2Rlcm4gc2VsZWN0aW9uLCBidXQgZG9lc24ndCBzdXBwb3J0IHRoZSBleHRlbmQgbWV0aG9kLlxuICAvLyBGbGlwIGJhY2t3YXJkIHNlbGVjdGlvbnMsIHNvIHdlIGNhbiBzZXQgd2l0aCBhIHNpbmdsZSByYW5nZS5cblxuICBpZiAoIXNlbGVjdGlvbi5leHRlbmQgJiYgc3RhcnQgPiBlbmQpIHtcbiAgICB2YXIgdGVtcCA9IGVuZDtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IHRlbXA7XG4gIH1cblxuICB2YXIgc3RhcnRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIHN0YXJ0KTtcbiAgdmFyIGVuZE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgZW5kKTtcblxuICBpZiAoc3RhcnRNYXJrZXIgJiYgZW5kTWFya2VyKSB7XG4gICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxICYmIHNlbGVjdGlvbi5hbmNob3JOb2RlID09PSBzdGFydE1hcmtlci5ub2RlICYmIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQgPT09IHN0YXJ0TWFya2VyLm9mZnNldCAmJiBzZWxlY3Rpb24uZm9jdXNOb2RlID09PSBlbmRNYXJrZXIubm9kZSAmJiBzZWxlY3Rpb24uZm9jdXNPZmZzZXQgPT09IGVuZE1hcmtlci5vZmZzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmFuZ2UgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydE1hcmtlci5ub2RlLCBzdGFydE1hcmtlci5vZmZzZXQpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcblxuICAgIGlmIChzdGFydCA+IGVuZCkge1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIHNlbGVjdGlvbi5leHRlbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZS5zZXRFbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlKSB7XG4gIGlmICghb3V0ZXJOb2RlIHx8ICFpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlID09PSBpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKG91dGVyTm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShpbm5lck5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZS5wYXJlbnROb2RlKTtcbiAgfSBlbHNlIGlmICgnY29udGFpbnMnIGluIG91dGVyTm9kZSkge1xuICAgIHJldHVybiBvdXRlck5vZGUuY29udGFpbnMoaW5uZXJOb2RlKTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHtcbiAgICByZXR1cm4gISEob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGlubmVyTm9kZSkgJiAxNik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSW5Eb2N1bWVudChub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUub3duZXJEb2N1bWVudCAmJiBjb250YWluc05vZGUobm9kZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgbm9kZSk7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZU9yaWdpbkZyYW1lKGlmcmFtZSkge1xuICB0cnkge1xuICAgIC8vIEFjY2Vzc2luZyB0aGUgY29udGVudERvY3VtZW50IG9mIGEgSFRNTElmcmFtZUVsZW1lbnQgY2FuIGNhdXNlIHRoZSBicm93c2VyXG4gICAgLy8gdG8gdGhyb3csIGUuZy4gaWYgaXQgaGFzIGEgY3Jvc3Mtb3JpZ2luIHNyYyBhdHRyaWJ1dGUuXG4gICAgLy8gU2FmYXJpIHdpbGwgc2hvdyBhbiBlcnJvciBpbiB0aGUgY29uc29sZSB3aGVuIHRoZSBhY2Nlc3MgcmVzdWx0cyBpbiBcIkJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdpblwiLiBlLmc6XG4gICAgLy8gaWZyYW1lLmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAvLyBBIHNhZmV0eSB3YXkgaXMgdG8gYWNjZXNzIG9uZSBvZiB0aGUgY3Jvc3Mgb3JpZ2luIHByb3BlcnRpZXM6IFdpbmRvdyBvciBMb2NhdGlvblxuICAgIC8vIFdoaWNoIG1pZ2h0IHJlc3VsdCBpbiBcIlNlY3VyaXR5RXJyb3JcIiBET00gRXhjZXB0aW9uIGFuZCBpdCBpcyBjb21wYXRpYmxlIHRvIFNhZmFyaS5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2Vycy5odG1sI2ludGVncmF0aW9uLXdpdGgtaWRsXG4gICAgcmV0dXJuIHR5cGVvZiBpZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID09PSAnc3RyaW5nJztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnREZWVwKCkge1xuICB2YXIgd2luID0gd2luZG93O1xuICB2YXIgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoKTtcblxuICB3aGlsZSAoZWxlbWVudCBpbnN0YW5jZW9mIHdpbi5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgIGlmIChpc1NhbWVPcmlnaW5GcmFtZShlbGVtZW50KSkge1xuICAgICAgd2luID0gZWxlbWVudC5jb250ZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudCh3aW4uZG9jdW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG4vKipcbiAqIEBSZWFjdElucHV0U2VsZWN0aW9uOiBSZWFjdCBpbnB1dCBzZWxlY3Rpb24gbW9kdWxlLiBCYXNlZCBvbiBTZWxlY3Rpb24uanMsXG4gKiBidXQgbW9kaWZpZWQgdG8gYmUgc3VpdGFibGUgZm9yIHJlYWN0IGFuZCBoYXMgYSBjb3VwbGUgb2YgYnVnIGZpeGVzIChkb2Vzbid0XG4gKiBhc3N1bWUgYnV0dG9ucyBoYXZlIHJhbmdlIHNlbGVjdGlvbnMgYWxsb3dlZCkuXG4gKiBJbnB1dCBzZWxlY3Rpb24gbW9kdWxlIGZvciBSZWFjdC5cbiAqL1xuXG4vKipcbiAqIEBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXM6IHdlIGdldCB0aGUgZWxlbWVudCB0eXBlcyB0aGF0IHN1cHBvcnQgc2VsZWN0aW9uXG4gKiBmcm9tIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2RvLW5vdC1hcHBseSwgbG9va2luZyBhdCBgc2VsZWN0aW9uU3RhcnRgXG4gKiBhbmQgYHNlbGVjdGlvbkVuZGAgcm93cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSAmJiAobm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgKGVsZW0udHlwZSA9PT0gJ3RleHQnIHx8IGVsZW0udHlwZSA9PT0gJ3NlYXJjaCcgfHwgZWxlbS50eXBlID09PSAndGVsJyB8fCBlbGVtLnR5cGUgPT09ICd1cmwnIHx8IGVsZW0udHlwZSA9PT0gJ3Bhc3N3b3JkJykgfHwgbm9kZU5hbWUgPT09ICd0ZXh0YXJlYScgfHwgZWxlbS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJyk7XG59XG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbigpIHtcbiAgdmFyIGZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgcmV0dXJuIHtcbiAgICBmb2N1c2VkRWxlbTogZm9jdXNlZEVsZW0sXG4gICAgc2VsZWN0aW9uUmFuZ2U6IGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhmb2N1c2VkRWxlbSkgPyBnZXRTZWxlY3Rpb24oZm9jdXNlZEVsZW0pIDogbnVsbFxuICB9O1xufVxuLyoqXG4gKiBAcmVzdG9yZVNlbGVjdGlvbjogSWYgYW55IHNlbGVjdGlvbiBpbmZvcm1hdGlvbiB3YXMgcG90ZW50aWFsbHkgbG9zdCxcbiAqIHJlc3RvcmUgaXQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcGVyZm9ybWluZyBvcGVyYXRpb25zIHRoYXQgY291bGQgcmVtb3ZlIGRvbVxuICogbm9kZXMgYW5kIHBsYWNlIHRoZW0gYmFjayBpbiwgcmVzdWx0aW5nIGluIGZvY3VzIGJlaW5nIGxvc3QuXG4gKi9cblxuZnVuY3Rpb24gcmVzdG9yZVNlbGVjdGlvbihwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uKSB7XG4gIHZhciBjdXJGb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKCk7XG4gIHZhciBwcmlvckZvY3VzZWRFbGVtID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5mb2N1c2VkRWxlbTtcbiAgdmFyIHByaW9yU2VsZWN0aW9uUmFuZ2UgPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLnNlbGVjdGlvblJhbmdlO1xuXG4gIGlmIChjdXJGb2N1c2VkRWxlbSAhPT0gcHJpb3JGb2N1c2VkRWxlbSAmJiBpc0luRG9jdW1lbnQocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICBpZiAocHJpb3JTZWxlY3Rpb25SYW5nZSAhPT0gbnVsbCAmJiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICAgIHNldFNlbGVjdGlvbihwcmlvckZvY3VzZWRFbGVtLCBwcmlvclNlbGVjdGlvblJhbmdlKTtcbiAgICB9IC8vIEZvY3VzaW5nIGEgbm9kZSBjYW4gY2hhbmdlIHRoZSBzY3JvbGwgcG9zaXRpb24sIHdoaWNoIGlzIHVuZGVzaXJhYmxlXG5cblxuICAgIHZhciBhbmNlc3RvcnMgPSBbXTtcbiAgICB2YXIgYW5jZXN0b3IgPSBwcmlvckZvY3VzZWRFbGVtO1xuXG4gICAgd2hpbGUgKGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZSkge1xuICAgICAgaWYgKGFuY2VzdG9yLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgICAgYW5jZXN0b3JzLnB1c2goe1xuICAgICAgICAgIGVsZW1lbnQ6IGFuY2VzdG9yLFxuICAgICAgICAgIGxlZnQ6IGFuY2VzdG9yLnNjcm9sbExlZnQsXG4gICAgICAgICAgdG9wOiBhbmNlc3Rvci5zY3JvbGxUb3BcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcmlvckZvY3VzZWRFbGVtLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcmlvckZvY3VzZWRFbGVtLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbmNlc3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gYW5jZXN0b3JzW2ldO1xuICAgICAgaW5mby5lbGVtZW50LnNjcm9sbExlZnQgPSBpbmZvLmxlZnQ7XG4gICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsVG9wID0gaW5mby50b3A7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEBnZXRTZWxlY3Rpb246IEdldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSBmb2N1c2VkIHRleHRhcmVhLCBpbnB1dCBvclxuICogY29udGVudEVkaXRhYmxlIG5vZGUuXG4gKiAtQGlucHV0OiBMb29rIHVwIHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dFxuICogLUByZXR1cm4ge3N0YXJ0OiBzZWxlY3Rpb25TdGFydCwgZW5kOiBzZWxlY3Rpb25FbmR9XG4gKi9cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKGlucHV0KSB7XG4gIHZhciBzZWxlY3Rpb247XG5cbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICAvLyBNb2Rlcm4gYnJvd3NlciB3aXRoIGlucHV0IG9yIHRleHRhcmVhLlxuICAgIHNlbGVjdGlvbiA9IHtcbiAgICAgIHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDb250ZW50IGVkaXRhYmxlIG9yIG9sZCBJRSB0ZXh0YXJlYS5cbiAgICBzZWxlY3Rpb24gPSBnZXRPZmZzZXRzKGlucHV0KTtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Rpb24gfHwge1xuICAgIHN0YXJ0OiAwLFxuICAgIGVuZDogMFxuICB9O1xufVxuLyoqXG4gKiBAc2V0U2VsZWN0aW9uOiBTZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgdGV4dGFyZWEgb3IgaW5wdXQgYW5kIGZvY3VzZXNcbiAqIHRoZSBpbnB1dC5cbiAqIC1AaW5wdXQgICAgIFNldCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXQgb3IgdGV4dGFyZWFcbiAqIC1Ab2Zmc2V0cyAgIE9iamVjdCBvZiBzYW1lIGZvcm0gdGhhdCBpcyByZXR1cm5lZCBmcm9tIGdldCpcbiAqL1xuXG5mdW5jdGlvbiBzZXRTZWxlY3Rpb24oaW5wdXQsIG9mZnNldHMpIHtcbiAgdmFyIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgdmFyIGVuZCA9IG9mZnNldHMuZW5kO1xuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHN0YXJ0O1xuICB9XG5cbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICBpbnB1dC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0O1xuICAgIGlucHV0LnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKGVuZCwgaW5wdXQudmFsdWUubGVuZ3RoKTtcbiAgfSBlbHNlIHtcbiAgICBzZXRPZmZzZXRzKGlucHV0LCBvZmZzZXRzKTtcbiAgfVxufVxuXG52YXIgc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50ID0gY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSA8PSAxMTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMygpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvblNlbGVjdCcsIFsnZm9jdXNvdXQnLCAnY29udGV4dG1lbnUnLCAnZHJhZ2VuZCcsICdmb2N1c2luJywgJ2tleWRvd24nLCAna2V5dXAnLCAnbW91c2Vkb3duJywgJ21vdXNldXAnLCAnc2VsZWN0aW9uY2hhbmdlJ10pO1xufVxuXG52YXIgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbnZhciBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbnZhciBtb3VzZURvd24gPSBmYWxzZTtcbi8qKlxuICogR2V0IGFuIG9iamVjdCB3aGljaCBpcyBhIHVuaXF1ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIG5vdCBiZSBjb25zaXN0ZW50IGFjcm9zcyBub2RlcyBvciBicm93c2VycywgYnV0XG4gKiB0d28gaWRlbnRpY2FsIHNlbGVjdGlvbnMgb24gdGhlIHNhbWUgbm9kZSB3aWxsIHJldHVybiBpZGVudGljYWwgb2JqZWN0cy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24kMShub2RlKSB7XG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIG5vZGUgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKG5vZGUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBub2RlLnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBub2RlLnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdmFyIHdpbiA9IG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICAgIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFuY2hvck5vZGU6IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0OiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlOiBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQ6IHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgIH07XG4gIH1cbn1cbi8qKlxuICogR2V0IGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgdGFyZ2V0LlxuICovXG5cblxuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXREb2N1bWVudChldmVudFRhcmdldCkge1xuICByZXR1cm4gZXZlbnRUYXJnZXQud2luZG93ID09PSBldmVudFRhcmdldCA/IGV2ZW50VGFyZ2V0LmRvY3VtZW50IDogZXZlbnRUYXJnZXQubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyBldmVudFRhcmdldCA6IGV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG59XG4vKipcbiAqIFBvbGwgc2VsZWN0aW9uIHRvIHNlZSB3aGV0aGVyIGl0J3MgY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFRhcmdldFxuICogQHJldHVybiB7P1N5bnRoZXRpY0V2ZW50fVxuICovXG5cblxuZnVuY3Rpb24gY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBlbGVtZW50LCBhbmQgdGhhdCB0aGUgdXNlciBpcyBub3QgZHJhZ2dpbmcgYVxuICAvLyBzZWxlY3Rpb24gKHRoaXMgbWF0Y2hlcyBuYXRpdmUgYHNlbGVjdGAgZXZlbnQgYmVoYXZpb3IpLiBJbiBIVE1MNSwgc2VsZWN0XG4gIC8vIGZpcmVzIG9ubHkgb24gaW5wdXQgYW5kIHRleHRhcmVhIHRodXMgaWYgdGhlcmUncyBubyBmb2N1c2VkIGVsZW1lbnQgd2VcbiAgLy8gd29uJ3QgZGlzcGF0Y2guXG4gIHZhciBkb2MgPSBnZXRFdmVudFRhcmdldERvY3VtZW50KG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAobW91c2VEb3duIHx8IGFjdGl2ZUVsZW1lbnQkMSA9PSBudWxsIHx8IGFjdGl2ZUVsZW1lbnQkMSAhPT0gZ2V0QWN0aXZlRWxlbWVudChkb2MpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIE9ubHkgZmlyZSB3aGVuIHNlbGVjdGlvbiBoYXMgYWN0dWFsbHkgY2hhbmdlZC5cblxuXG4gIHZhciBjdXJyZW50U2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uJDEoYWN0aXZlRWxlbWVudCQxKTtcblxuICBpZiAoIWxhc3RTZWxlY3Rpb24gfHwgIXNoYWxsb3dFcXVhbChsYXN0U2VsZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSkge1xuICAgIGxhc3RTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoYWN0aXZlRWxlbWVudEluc3QkMSwgJ29uU2VsZWN0Jyk7XG5cbiAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudCgnb25TZWxlY3QnLCAnc2VsZWN0JywgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICAgIH0pO1xuICAgICAgZXZlbnQudGFyZ2V0ID0gYWN0aXZlRWxlbWVudCQxO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvblNlbGVjdGAgZXZlbnQgdGhhdCBub3JtYWxpemVzIHNlbGVjdCBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIGNvbnRlbnRFZGl0YWJsZVxuICpcbiAqIFRoaXMgZGlmZmVycyBmcm9tIG5hdGl2ZSBicm93c2VyIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAtIEZpcmVzIG9uIGNvbnRlbnRFZGl0YWJsZSBmaWVsZHMgYXMgd2VsbCBhcyBpbnB1dHMuXG4gKiAtIEZpcmVzIGZvciBjb2xsYXBzZWQgc2VsZWN0aW9uLlxuICogLSBGaXJlcyBhZnRlciB1c2VyIGlucHV0LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcblxuICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpIDogd2luZG93O1xuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgLy8gVHJhY2sgdGhlIGlucHV0IG5vZGUgdGhhdCBoYXMgZm9jdXMuXG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpIHx8IHRhcmdldE5vZGUuY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpIHtcbiAgICAgICAgYWN0aXZlRWxlbWVudCQxID0gdGFyZ2V0Tm9kZTtcbiAgICAgICAgYWN0aXZlRWxlbWVudEluc3QkMSA9IHRhcmdldEluc3Q7XG4gICAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIGFjdGl2ZUVsZW1lbnQkMSA9IG51bGw7XG4gICAgICBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbiAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgYnJlYWs7XG4gICAgLy8gRG9uJ3QgZmlyZSB0aGUgZXZlbnQgd2hpbGUgdGhlIHVzZXIgaXMgZHJhZ2dpbmcuIFRoaXMgbWF0Y2hlcyB0aGVcbiAgICAvLyBzZW1hbnRpY3Mgb2YgdGhlIG5hdGl2ZSBzZWxlY3QgZXZlbnQuXG5cbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgICAgbW91c2VEb3duID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY29udGV4dG1lbnUnOlxuICAgIGNhc2UgJ21vdXNldXAnOlxuICAgIGNhc2UgJ2RyYWdlbmQnOlxuICAgICAgbW91c2VEb3duID0gZmFsc2U7XG4gICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgYnJlYWs7XG4gICAgLy8gQ2hyb21lIGFuZCBJRSBmaXJlIG5vbi1zdGFuZGFyZCBldmVudCB3aGVuIHNlbGVjdGlvbiBpcyBjaGFuZ2VkIChhbmRcbiAgICAvLyBzb21ldGltZXMgd2hlbiBpdCBoYXNuJ3QpLiBJRSdzIGV2ZW50IGZpcmVzIG91dCBvZiBvcmRlciB3aXRoIHJlc3BlY3RcbiAgICAvLyB0byBrZXkgYW5kIGlucHV0IGV2ZW50cyBvbiBkZWxldGlvbiwgc28gd2UgZGlzY2FyZCBpdC5cbiAgICAvL1xuICAgIC8vIEZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IHNlbGVjdGlvbmNoYW5nZSwgc28gY2hlY2sgc2VsZWN0aW9uIHN0YXR1c1xuICAgIC8vIGFmdGVyIGVhY2gga2V5IGVudHJ5LiBUaGUgc2VsZWN0aW9uIGNoYW5nZXMgYWZ0ZXIga2V5ZG93biBhbmQgYmVmb3JlXG4gICAgLy8ga2V5dXAsIGJ1dCB3ZSBjaGVjayBvbiBrZXlkb3duIGFzIHdlbGwgaW4gdGhlIGNhc2Ugb2YgaG9sZGluZyBkb3duIGFcbiAgICAvLyBrZXksIHdoZW4gbXVsdGlwbGUga2V5ZG93biBldmVudHMgYXJlIGZpcmVkIGJ1dCBvbmx5IG9uZSBrZXl1cCBpcy5cbiAgICAvLyBUaGlzIGlzIGFsc28gb3VyIGFwcHJvYWNoIGZvciBJRSBoYW5kbGluZywgZm9yIHRoZSByZWFzb24gYWJvdmUuXG5cbiAgICBjYXNlICdzZWxlY3Rpb25jaGFuZ2UnOlxuICAgICAgaWYgKHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIC8vIGZhbGxzIHRocm91Z2hcblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQ0KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIHJlYWN0TmFtZSA9IHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzLmdldChkb21FdmVudE5hbWUpO1xuXG4gIGlmIChyZWFjdE5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNFdmVudDtcbiAgdmFyIHJlYWN0RXZlbnRUeXBlID0gZG9tRXZlbnROYW1lO1xuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEga2V5cHJlc3MgZXZlbnQgZm9yIGZ1bmN0aW9uIGtleXMgdG9vLiBUaGlzIHJlbW92ZXNcbiAgICAgIC8vIHRoZSB1bndhbnRlZCBrZXlwcmVzcyBldmVudHMuIEVudGVyIGlzIGhvd2V2ZXIgYm90aCBwcmludGFibGUgYW5kXG4gICAgICAvLyBub24tcHJpbnRhYmxlLiBPbmUgd291bGQgZXhwZWN0IFRhYiB0byBiZSBhcyB3ZWxsIChidXQgaXQgaXNuJ3QpLlxuICAgICAgaWYgKGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgcmVhY3RFdmVudFR5cGUgPSAnZm9jdXMnO1xuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgcmVhY3RFdmVudFR5cGUgPSAnYmx1cic7XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdiZWZvcmVibHVyJzpcbiAgICBjYXNlICdhZnRlcmJsdXInOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY2xpY2snOlxuICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEgY2xpY2sgZXZlbnQgb24gcmlnaHQgbW91c2UgY2xpY2tzLiBUaGlzIHJlbW92ZXMgdGhlXG4gICAgICAvLyB1bndhbnRlZCBjbGljayBldmVudHMuXG4gICAgICBpZiAobmF0aXZlRXZlbnQuYnV0dG9uID09PSAyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ2F1eGNsaWNrJzpcbiAgICBjYXNlICdkYmxjbGljayc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdtb3VzZW1vdmUnOlxuICAgIGNhc2UgJ21vdXNldXAnOiAvLyBUT0RPOiBEaXNhYmxlZCBlbGVtZW50cyBzaG91bGQgbm90IHJlc3BvbmQgdG8gbW91c2UgZXZlbnRzXG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICBjYXNlICdjb250ZXh0bWVudSc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkcmFnJzpcbiAgICBjYXNlICdkcmFnZW5kJzpcbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgIGNhc2UgJ2RyYWdleGl0JzpcbiAgICBjYXNlICdkcmFnbGVhdmUnOlxuICAgIGNhc2UgJ2RyYWdvdmVyJzpcbiAgICBjYXNlICdkcmFnc3RhcnQnOlxuICAgIGNhc2UgJ2Ryb3AnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRHJhZ0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0b3VjaGNhbmNlbCc6XG4gICAgY2FzZSAndG91Y2hlbmQnOlxuICAgIGNhc2UgJ3RvdWNobW92ZSc6XG4gICAgY2FzZSAndG91Y2hzdGFydCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUb3VjaEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEFOSU1BVElPTl9FTkQ6XG4gICAgY2FzZSBBTklNQVRJT05fSVRFUkFUSU9OOlxuICAgIGNhc2UgQU5JTUFUSU9OX1NUQVJUOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQW5pbWF0aW9uRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVFJBTlNJVElPTl9FTkQ6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Njcm9sbCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNVSUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd3aGVlbCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjb3B5JzpcbiAgICBjYXNlICdjdXQnOlxuICAgIGNhc2UgJ3Bhc3RlJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAnbG9zdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdwb2ludGVyY2FuY2VsJzpcbiAgICBjYXNlICdwb2ludGVyZG93bic6XG4gICAgY2FzZSAncG9pbnRlcm1vdmUnOlxuICAgIGNhc2UgJ3BvaW50ZXJvdXQnOlxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICBjYXNlICdwb2ludGVydXAnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljUG9pbnRlckV2ZW50O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgaW5DYXB0dXJlUGhhc2UgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpICE9PSAwO1xuXG4gIHtcbiAgICAvLyBTb21lIGV2ZW50cyBkb24ndCBidWJibGUgaW4gdGhlIGJyb3dzZXIuXG4gICAgLy8gSW4gdGhlIHBhc3QsIFJlYWN0IGhhcyBhbHdheXMgYnViYmxlZCB0aGVtLCBidXQgdGhpcyBjYW4gYmUgc3VycHJpc2luZy5cbiAgICAvLyBXZSdyZSBnb2luZyB0byB0cnkgYWxpZ25pbmcgY2xvc2VyIHRvIHRoZSBicm93c2VyIGJlaGF2aW9yIGJ5IG5vdCBidWJibGluZ1xuICAgIC8vIHRoZW0gaW4gUmVhY3QgZWl0aGVyLiBXZSdsbCBzdGFydCBieSBub3QgYnViYmxpbmcgb25TY3JvbGwsIGFuZCB0aGVuIGV4cGFuZC5cbiAgICB2YXIgYWNjdW11bGF0ZVRhcmdldE9ubHkgPSAhaW5DYXB0dXJlUGhhc2UgJiYgLy8gVE9ETzogaWRlYWxseSwgd2UnZCBldmVudHVhbGx5IGFkZCBhbGwgZXZlbnRzIGZyb21cbiAgICAvLyBub25EZWxlZ2F0ZWRFdmVudHMgbGlzdCBpbiBET01QbHVnaW5FdmVudFN5c3RlbS5cbiAgICAvLyBUaGVuIHdlIGNhbiByZW1vdmUgdGhpcyBzcGVjaWFsIGxpc3QuXG4gICAgLy8gVGhpcyBpcyBhIGJyZWFraW5nIGNoYW5nZSB0aGF0IGNhbiB3YWl0IHVudGlsIFJlYWN0IDE4LlxuICAgIGRvbUV2ZW50TmFtZSA9PT0gJ3Njcm9sbCc7XG5cbiAgICB2YXIgX2xpc3RlbmVycyA9IGFjY3VtdWxhdGVTaW5nbGVQaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCByZWFjdE5hbWUsIG5hdGl2ZUV2ZW50LnR5cGUsIGluQ2FwdHVyZVBoYXNlLCBhY2N1bXVsYXRlVGFyZ2V0T25seSk7XG5cbiAgICBpZiAoX2xpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGNyZWF0ZSBldmVudCBsYXppbHkuXG4gICAgICB2YXIgX2V2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihyZWFjdE5hbWUsIHJlYWN0RXZlbnRUeXBlLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICBldmVudDogX2V2ZW50LFxuICAgICAgICBsaXN0ZW5lcnM6IF9saXN0ZW5lcnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUT0RPOiByZW1vdmUgdG9wLWxldmVsIHNpZGUgZWZmZWN0LlxucmVnaXN0ZXJTaW1wbGVFdmVudHMoKTtcbnJlZ2lzdGVyRXZlbnRzJDIoKTtcbnJlZ2lzdGVyRXZlbnRzJDEoKTtcbnJlZ2lzdGVyRXZlbnRzJDMoKTtcbnJlZ2lzdGVyRXZlbnRzKCk7XG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkNShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIC8vIFRPRE86IHdlIHNob3VsZCByZW1vdmUgdGhlIGNvbmNlcHQgb2YgYSBcIlNpbXBsZUV2ZW50UGx1Z2luXCIuXG4gIC8vIFRoaXMgaXMgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGV2ZW50IHN5c3RlbS4gQWxsXG4gIC8vIHRoZSBvdGhlciBwbHVnaW5zIGFyZSBlc3NlbnRpYWxseSBwb2x5ZmlsbHMuIFNvIHRoZSBwbHVnaW5cbiAgLy8gc2hvdWxkIHByb2JhYmx5IGJlIGlubGluZWQgc29tZXdoZXJlIGFuZCBoYXZlIGl0cyBsb2dpY1xuICAvLyBiZSBjb3JlIHRoZSB0byBldmVudCBzeXN0ZW0uIFRoaXMgd291bGQgcG90ZW50aWFsbHkgYWxsb3dcbiAgLy8gdXMgdG8gc2hpcCBidWlsZHMgb2YgUmVhY3Qgd2l0aG91dCB0aGUgcG9seWZpbGxlZCBwbHVnaW5zIGJlbG93LlxuICBleHRyYWN0RXZlbnRzJDQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICB2YXIgc2hvdWxkUHJvY2Vzc1BvbHlmaWxsUGx1Z2lucyA9IChldmVudFN5c3RlbUZsYWdzICYgU0hPVUxEX05PVF9QUk9DRVNTX1BPTFlGSUxMX0VWRU5UX1BMVUdJTlMpID09PSAwOyAvLyBXZSBkb24ndCBwcm9jZXNzIHRoZXNlIGV2ZW50cyB1bmxlc3Mgd2UgYXJlIGluIHRoZVxuICAvLyBldmVudCdzIG5hdGl2ZSBcImJ1YmJsZVwiIHBoYXNlLCB3aGljaCBtZWFucyB0aGF0IHdlJ3JlXG4gIC8vIG5vdCBpbiB0aGUgY2FwdHVyZSBwaGFzZS4gVGhhdCdzIGJlY2F1c2Ugd2UgZW11bGF0ZVxuICAvLyB0aGUgY2FwdHVyZSBwaGFzZSBoZXJlIHN0aWxsLiBUaGlzIGlzIGEgdHJhZGUtb2ZmLFxuICAvLyBiZWNhdXNlIGluIGFuIGlkZWFsIHdvcmxkIHdlIHdvdWxkIG5vdCBlbXVsYXRlIGFuZCB1c2VcbiAgLy8gdGhlIHBoYXNlcyBwcm9wZXJseSwgbGlrZSB3ZSBkbyB3aXRoIHRoZSBTaW1wbGVFdmVudFxuICAvLyBwbHVnaW4uIEhvd2V2ZXIsIHRoZSBwbHVnaW5zIGJlbG93IGVpdGhlciBleHBlY3RcbiAgLy8gZW11bGF0aW9uIChFbnRlckxlYXZlKSBvciB1c2Ugc3RhdGUgbG9jYWxpemVkIHRvIHRoYXRcbiAgLy8gcGx1Z2luIChCZWZvcmVJbnB1dCwgQ2hhbmdlLCBTZWxlY3QpLiBUaGUgc3RhdGUgaW5cbiAgLy8gdGhlc2UgbW9kdWxlcyBjb21wbGljYXRlcyB0aGluZ3MsIGFzIHlvdSdsbCBlc3NlbnRpYWxseVxuICAvLyBnZXQgdGhlIGNhc2Ugd2hlcmUgdGhlIGNhcHR1cmUgcGhhc2UgZXZlbnQgbWlnaHQgY2hhbmdlXG4gIC8vIHN0YXRlLCBvbmx5IGZvciB0aGUgZm9sbG93aW5nIGJ1YmJsZSBldmVudCB0byBjb21lIGluXG4gIC8vIGxhdGVyIGFuZCBub3QgdHJpZ2dlciBhbnl0aGluZyBhcyB0aGUgc3RhdGUgbm93XG4gIC8vIGludmFsaWRhdGVzIHRoZSBoZXVyaXN0aWNzIG9mIHRoZSBldmVudCBwbHVnaW4uIFdlXG4gIC8vIGNvdWxkIGFsdGVyIGFsbCB0aGVzZSBwbHVnaW5zIHRvIHdvcmsgaW4gc3VjaCB3YXlzLCBidXRcbiAgLy8gdGhhdCBtaWdodCBjYXVzZSBvdGhlciB1bmtub3duIHNpZGUtZWZmZWN0cyB0aGF0IHdlXG4gIC8vIGNhbid0IGZvcnNlZSByaWdodCBub3cuXG5cbiAgaWYgKHNob3VsZFByb2Nlc3NQb2x5ZmlsbFBsdWdpbnMpIHtcbiAgICBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICAgIGV4dHJhY3RFdmVudHMkMShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZXh0cmFjdEV2ZW50cyQzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBleHRyYWN0RXZlbnRzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgfVxufSAvLyBMaXN0IG9mIGV2ZW50cyB0aGF0IG5lZWQgdG8gYmUgaW5kaXZpZHVhbGx5IGF0dGFjaGVkIHRvIG1lZGlhIGVsZW1lbnRzLlxuXG5cbnZhciBtZWRpYUV2ZW50VHlwZXMgPSBbJ2Fib3J0JywgJ2NhbnBsYXknLCAnY2FucGxheXRocm91Z2gnLCAnZHVyYXRpb25jaGFuZ2UnLCAnZW1wdGllZCcsICdlbmNyeXB0ZWQnLCAnZW5kZWQnLCAnZXJyb3InLCAnbG9hZGVkZGF0YScsICdsb2FkZWRtZXRhZGF0YScsICdsb2Fkc3RhcnQnLCAncGF1c2UnLCAncGxheScsICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3JhdGVjaGFuZ2UnLCAnc2Vla2VkJywgJ3NlZWtpbmcnLCAnc3RhbGxlZCcsICdzdXNwZW5kJywgJ3RpbWV1cGRhdGUnLCAndm9sdW1lY2hhbmdlJywgJ3dhaXRpbmcnXTsgLy8gV2Ugc2hvdWxkIG5vdCBkZWxlZ2F0ZSB0aGVzZSBldmVudHMgdG8gdGhlIGNvbnRhaW5lciwgYnV0IHJhdGhlclxuLy8gc2V0IHRoZW0gb24gdGhlIGFjdHVhbCB0YXJnZXQgZWxlbWVudCBpdHNlbGYuIFRoaXMgaXMgcHJpbWFyaWx5XG4vLyBiZWNhdXNlIHRoZXNlIGV2ZW50cyBkbyBub3QgY29uc2lzdGVudGx5IGJ1YmJsZSBpbiB0aGUgRE9NLlxuXG52YXIgbm9uRGVsZWdhdGVkRXZlbnRzID0gbmV3IFNldChbJ2NhbmNlbCcsICdjbG9zZScsICdpbnZhbGlkJywgJ2xvYWQnLCAnc2Nyb2xsJywgJ3RvZ2dsZSddLmNvbmNhdChtZWRpYUV2ZW50VHlwZXMpKTtcblxuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCkge1xuICB2YXIgdHlwZSA9IGV2ZW50LnR5cGUgfHwgJ3Vua25vd24tZXZlbnQnO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKHR5cGUsIGxpc3RlbmVyLCB1bmRlZmluZWQsIGV2ZW50KTtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NEaXNwYXRjaFF1ZXVlSXRlbXNJbk9yZGVyKGV2ZW50LCBkaXNwYXRjaExpc3RlbmVycywgaW5DYXB0dXJlUGhhc2UpIHtcbiAgdmFyIHByZXZpb3VzSW5zdGFuY2U7XG5cbiAgaWYgKGluQ2FwdHVyZVBoYXNlKSB7XG4gICAgZm9yICh2YXIgaSA9IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBkaXNwYXRjaExpc3RlbmVyc1tpXSxcbiAgICAgICAgICBpbnN0YW5jZSA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmluc3RhbmNlLFxuICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgIGxpc3RlbmVyID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkubGlzdGVuZXI7XG5cbiAgICAgIGlmIChpbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCk7XG4gICAgICBwcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kgPSBkaXNwYXRjaExpc3RlbmVyc1tfaV0sXG4gICAgICAgICAgX2luc3RhbmNlID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmluc3RhbmNlLFxuICAgICAgICAgIF9jdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgX2xpc3RlbmVyID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmxpc3RlbmVyO1xuXG4gICAgICBpZiAoX2luc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIF9saXN0ZW5lciwgX2N1cnJlbnRUYXJnZXQpO1xuICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IF9pbnN0YW5jZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncykge1xuICB2YXIgaW5DYXB0dXJlUGhhc2UgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpICE9PSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGF0Y2hRdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBfZGlzcGF0Y2hRdWV1ZSRpID0gZGlzcGF0Y2hRdWV1ZVtpXSxcbiAgICAgICAgZXZlbnQgPSBfZGlzcGF0Y2hRdWV1ZSRpLmV2ZW50LFxuICAgICAgICBsaXN0ZW5lcnMgPSBfZGlzcGF0Y2hRdWV1ZSRpLmxpc3RlbmVycztcbiAgICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZUl0ZW1zSW5PcmRlcihldmVudCwgbGlzdGVuZXJzLCBpbkNhcHR1cmVQaGFzZSk7IC8vICBldmVudCBzeXN0ZW0gZG9lc24ndCB1c2UgcG9vbGluZy5cbiAgfSAvLyBUaGlzIHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJldGhyb3cgaWYgYW55IG9mIHRoZSBldmVudCBoYW5kbGVycyB0aHJldy5cblxuXG4gIHJldGhyb3dDYXVnaHRFcnJvcigpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50c0ZvclBsdWdpbnMoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgdmFyIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgZXh0cmFjdEV2ZW50cyQ1KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncyk7XG59XG5cbmZ1bmN0aW9uIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRFbGVtZW50KSB7XG4gIHZhciBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyID0gZmFsc2U7XG4gIHZhciBsaXN0ZW5lclNldCA9IGdldEV2ZW50TGlzdGVuZXJTZXQodGFyZ2V0RWxlbWVudCk7XG4gIHZhciBsaXN0ZW5lclNldEtleSA9IGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG5cbiAgaWYgKCFsaXN0ZW5lclNldC5oYXMobGlzdGVuZXJTZXRLZXkpKSB7XG4gICAgYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0RWxlbWVudCwgZG9tRXZlbnROYW1lLCBJU19OT05fREVMRUdBVEVELCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcbiAgICBsaXN0ZW5lclNldC5hZGQobGlzdGVuZXJTZXRLZXkpO1xuICB9XG59XG52YXIgbGlzdGVuaW5nTWFya2VyID0gJ19yZWFjdExpc3RlbmluZycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcbmZ1bmN0aW9uIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSkge1xuICAgICAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBkb24ndCBpdGVyYXRlIHRocm91Z2ggZXZlbnRzXG4gICAgICAvLyBmb3IgdGhlIHNhbWUgcG9ydGFsIGNvbnRhaW5lciBvciByb290IG5vZGUgbW9yZSB0aGFuIG9uY2UuXG4gICAgICAvLyBUT0RPOiBvbmNlIHdlIHJlbW92ZSB0aGUgZmxhZywgd2UgbWF5IGJlIGFibGUgdG8gYWxzb1xuICAgICAgLy8gcmVtb3ZlIHNvbWUgb2YgdGhlIGJvb2trZWVwaW5nIG1hcHMgdXNlZCBmb3IgbGF6aW5lc3MuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSA9IHRydWU7XG4gICAgYWxsTmF0aXZlRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGRvbUV2ZW50TmFtZSkge1xuICAgICAgaWYgKCFub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkpIHtcbiAgICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIGZhbHNlLCByb290Q29udGFpbmVyRWxlbWVudCwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCB0cnVlLCByb290Q29udGFpbmVyRWxlbWVudCwgbnVsbCk7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCByb290Q29udGFpbmVyRWxlbWVudCwgdGFyZ2V0RWxlbWVudCkge1xuICB2YXIgZXZlbnRTeXN0ZW1GbGFncyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogMDtcbiAgdmFyIHRhcmdldCA9IHJvb3RDb250YWluZXJFbGVtZW50OyAvLyBzZWxlY3Rpb25jaGFuZ2UgbmVlZHMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50XG4gIC8vIG90aGVyd2lzZSBpdCB3b24ndCBjYXB0dXJlIGluY29taW5nIGV2ZW50cyB0aGF0IGFyZSBvbmx5XG4gIC8vIHRyaWdnZXJlZCBvbiB0aGUgZG9jdW1lbnQgZGlyZWN0bHkuXG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3NlbGVjdGlvbmNoYW5nZScgJiYgcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGUgIT09IERPQ1VNRU5UX05PREUpIHtcbiAgICB0YXJnZXQgPSByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xuICB9IC8vIElmIHRoZSBldmVudCBjYW4gYmUgZGVsZWdhdGVkIChvciBpcyBjYXB0dXJlIHBoYXNlKSwgd2UgY2FuXG4gIC8vIHJlZ2lzdGVyIGl0IHRvIHRoZSByb290IGNvbnRhaW5lci4gT3RoZXJ3aXNlLCB3ZSBzaG91bGRcbiAgLy8gcmVnaXN0ZXIgdGhlIGV2ZW50IHRvIHRoZSB0YXJnZXQgZWxlbWVudCBhbmQgbWFyayBpdCBhc1xuICAvLyBhIG5vbi1kZWxlZ2F0ZWQgZXZlbnQuXG5cblxuICBpZiAodGFyZ2V0RWxlbWVudCAhPT0gbnVsbCAmJiAhaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciAmJiBub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkpIHtcbiAgICAvLyBGb3IgYWxsIG5vbi1kZWxlZ2F0ZWQgZXZlbnRzLCBhcGFydCBmcm9tIHNjcm9sbCwgd2UgYXR0YWNoXG4gICAgLy8gdGhlaXIgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSByZXNwZWN0aXZlIGVsZW1lbnRzIHRoYXQgdGhlaXJcbiAgICAvLyBldmVudHMgZmlyZSBvbi4gVGhhdCBtZWFucyB3ZSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGFzIGV2ZW50XG4gICAgLy8gbGlzdGVuZXIgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCBwcmV2aW91c2x5LiBIb3dldmVyLCB3ZVxuICAgIC8vIHNwZWNpYWwgY2FzZSB0aGUgc2Nyb2xsIGV2ZW50IGJlY2F1c2UgdGhlIHJlYWxpdHkgaXMgdGhhdCBhbnlcbiAgICAvLyBlbGVtZW50IGNhbiBzY3JvbGwuXG4gICAgLy8gVE9ETzogaWRlYWxseSwgd2UnZCBldmVudHVhbGx5IGFwcGx5IHRoZSBzYW1lIGxvZ2ljIHRvIGFsbFxuICAgIC8vIGV2ZW50cyBmcm9tIHRoZSBub25EZWxlZ2F0ZWRFdmVudHMgbGlzdC4gVGhlbiB3ZSBjYW4gcmVtb3ZlXG4gICAgLy8gdGhpcyBzcGVjaWFsIGNhc2UgYW5kIHVzZSB0aGUgc2FtZSBsb2dpYyBmb3IgYWxsIGV2ZW50cy5cbiAgICBpZiAoZG9tRXZlbnROYW1lICE9PSAnc2Nyb2xsJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50U3lzdGVtRmxhZ3MgfD0gSVNfTk9OX0RFTEVHQVRFRDtcbiAgICB0YXJnZXQgPSB0YXJnZXRFbGVtZW50O1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyU2V0ID0gZ2V0RXZlbnRMaXN0ZW5lclNldCh0YXJnZXQpO1xuICB2YXIgbGlzdGVuZXJTZXRLZXkgPSBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpOyAvLyBJZiB0aGUgbGlzdGVuZXIgZW50cnkgaXMgZW1wdHkgb3Igd2Ugc2hvdWxkIHVwZ3JhZGUsIHRoZW5cbiAgLy8gd2UgbmVlZCB0byB0cmFwIGFuIGV2ZW50IGxpc3RlbmVyIG9udG8gdGhlIHRhcmdldC5cblxuICBpZiAoIWxpc3RlbmVyU2V0LmhhcyhsaXN0ZW5lclNldEtleSkpIHtcbiAgICBpZiAoaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcikge1xuICAgICAgZXZlbnRTeXN0ZW1GbGFncyB8PSBJU19DQVBUVVJFX1BIQVNFO1xuICAgIH1cblxuICAgIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcbiAgICBsaXN0ZW5lclNldC5hZGQobGlzdGVuZXJTZXRLZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCBpc0RlZmVycmVkTGlzdGVuZXJGb3JMZWdhY3lGQlN1cHBvcnQpIHtcbiAgdmFyIGxpc3RlbmVyID0gY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXJXaXRoUHJpb3JpdHkodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MpOyAvLyBJZiBwYXNzaXZlIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGVuIHRoZSBldmVudCB3aWxsIGJlXG4gIC8vIGFjdGl2ZSBhbmQgbm90IHBhc3NpdmUuXG5cbiAgdmFyIGlzUGFzc2l2ZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xuXG4gIGlmIChwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCkge1xuICAgIC8vIEJyb3dzZXJzIGludHJvZHVjZWQgYW4gaW50ZXJ2ZW50aW9uLCBtYWtpbmcgdGhlc2UgZXZlbnRzXG4gICAgLy8gcGFzc2l2ZSBieSBkZWZhdWx0IG9uIGRvY3VtZW50LiBSZWFjdCBkb2Vzbid0IGJpbmQgdGhlbVxuICAgIC8vIHRvIGRvY3VtZW50IGFueW1vcmUsIGJ1dCBjaGFuZ2luZyB0aGlzIG5vdyB3b3VsZCB1bmRvXG4gICAgLy8gdGhlIHBlcmZvcm1hbmNlIHdpbnMgZnJvbSB0aGUgY2hhbmdlLiBTbyB3ZSBlbXVsYXRlXG4gICAgLy8gdGhlIGV4aXN0aW5nIGJlaGF2aW9yIG1hbnVhbGx5IG9uIHRoZSByb290cyBub3cuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTY1MVxuICAgIGlmIChkb21FdmVudE5hbWUgPT09ICd0b3VjaHN0YXJ0JyB8fCBkb21FdmVudE5hbWUgPT09ICd0b3VjaG1vdmUnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3doZWVsJykge1xuICAgICAgaXNQYXNzaXZlTGlzdGVuZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRhcmdldENvbnRhaW5lciA9ICB0YXJnZXRDb250YWluZXI7XG4gIHZhciB1bnN1YnNjcmliZUxpc3RlbmVyOyAvLyBXaGVuIGxlZ2FjeUZCU3VwcG9ydCBpcyBlbmFibGVkLCBpdCdzIGZvciB3aGVuIHdlXG5cblxuICBpZiAoaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcikge1xuICAgIGlmIChpc1Bhc3NpdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNQYXNzaXZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50QnViYmxlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGdyYW5kQ29udGFpbmVyLCB0YXJnZXRDb250YWluZXIpIHtcbiAgcmV0dXJuIGdyYW5kQ29udGFpbmVyID09PSB0YXJnZXRDb250YWluZXIgfHwgZ3JhbmRDb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBncmFuZENvbnRhaW5lci5wYXJlbnROb2RlID09PSB0YXJnZXRDb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIGFuY2VzdG9ySW5zdCA9IHRhcmdldEluc3Q7XG5cbiAgaWYgKChldmVudFN5c3RlbUZsYWdzICYgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUpID09PSAwICYmIChldmVudFN5c3RlbUZsYWdzICYgSVNfTk9OX0RFTEVHQVRFRCkgPT09IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyTm9kZSA9IHRhcmdldENvbnRhaW5lcjsgLy8gSWYgd2UgYXJlIHVzaW5nIHRoZSBsZWdhY3kgRkIgc3VwcG9ydCBmbGFnLCB3ZVxuXG4gICAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoZSBiZWxvdyBsb2dpYyBhdHRlbXB0cyB0byB3b3JrIG91dCBpZiB3ZSBuZWVkIHRvIGNoYW5nZVxuICAgICAgLy8gdGhlIHRhcmdldCBmaWJlciB0byBhIGRpZmZlcmVudCBhbmNlc3Rvci4gV2UgaGFkIHNpbWlsYXIgbG9naWNcbiAgICAgIC8vIGluIHRoZSBsZWdhY3kgZXZlbnQgc3lzdGVtLCBleGNlcHQgdGhlIGJpZyBkaWZmZXJlbmNlIGJldHdlZW5cbiAgICAgIC8vIHN5c3RlbXMgaXMgdGhhdCB0aGUgbW9kZXJuIGV2ZW50IHN5c3RlbSBub3cgaGFzIGFuIGV2ZW50IGxpc3RlbmVyXG4gICAgICAvLyBhdHRhY2hlZCB0byBlYWNoIFJlYWN0IFJvb3QgYW5kIFJlYWN0IFBvcnRhbCBSb290LiBUb2dldGhlcixcbiAgICAgIC8vIHRoZSBET00gbm9kZXMgcmVwcmVzZW50aW5nIHRoZXNlIHJvb3RzIGFyZSB0aGUgXCJyb290Q29udGFpbmVyXCIuXG4gICAgICAvLyBUbyBmaWd1cmUgb3V0IHdoaWNoIGFuY2VzdG9yIGluc3RhbmNlIHdlIHNob3VsZCB1c2UsIHdlIHRyYXZlcnNlXG4gICAgICAvLyB1cCB0aGUgZmliZXIgdHJlZSBmcm9tIHRoZSB0YXJnZXQgaW5zdGFuY2UgYW5kIGF0dGVtcHQgdG8gZmluZFxuICAgICAgLy8gcm9vdCBib3VuZGFyaWVzIHRoYXQgbWF0Y2ggdGhhdCBvZiBvdXIgY3VycmVudCBcInJvb3RDb250YWluZXJcIi5cbiAgICAgIC8vIElmIHdlIGZpbmQgdGhhdCBcInJvb3RDb250YWluZXJcIiwgd2UgZmluZCB0aGUgcGFyZW50IGZpYmVyXG4gICAgICAvLyBzdWItdHJlZSBmb3IgdGhhdCByb290IGFuZCBtYWtlIHRoYXQgb3VyIGFuY2VzdG9yIGluc3RhbmNlLlxuICAgICAgdmFyIG5vZGUgPSB0YXJnZXRJbnN0O1xuXG4gICAgICBtYWluTG9vcDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9kZVRhZyA9IG5vZGUudGFnO1xuXG4gICAgICAgIGlmIChub2RlVGFnID09PSBIb3N0Um9vdCB8fCBub2RlVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICBpZiAoaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoY29udGFpbmVyLCB0YXJnZXRDb250YWluZXJOb2RlKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5vZGVUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICAgIC8vIFRoZSB0YXJnZXQgaXMgYSBwb3J0YWwsIGJ1dCBpdCdzIG5vdCB0aGUgcm9vdENvbnRhaW5lciB3ZSdyZSBsb29raW5nIGZvci5cbiAgICAgICAgICAgIC8vIE5vcm1hbGx5IHBvcnRhbHMgaGFuZGxlIHRoZWlyIG93biBldmVudHMgYWxsIHRoZSB3YXkgZG93biB0byB0aGUgcm9vdC5cbiAgICAgICAgICAgIC8vIFNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIHN0b3Agbm93LiBIb3dldmVyLCB3ZSBkb24ndCBrbm93IGlmIHRoaXMgcG9ydGFsXG4gICAgICAgICAgICAvLyB3YXMgcGFydCBvZiAqb3VyKiByb290LlxuICAgICAgICAgICAgdmFyIGdyYW5kTm9kZSA9IG5vZGUucmV0dXJuO1xuXG4gICAgICAgICAgICB3aGlsZSAoZ3JhbmROb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBncmFuZFRhZyA9IGdyYW5kTm9kZS50YWc7XG5cbiAgICAgICAgICAgICAgaWYgKGdyYW5kVGFnID09PSBIb3N0Um9vdCB8fCBncmFuZFRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgICAgICAgIHZhciBncmFuZENvbnRhaW5lciA9IGdyYW5kTm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgICAgICAgIGlmIChpc01hdGNoaW5nUm9vdENvbnRhaW5lcihncmFuZENvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJvb3RDb250YWluZXIgd2UncmUgbG9va2luZyBmb3IgYW5kIHdlIGZvdW5kIGl0IGFzXG4gICAgICAgICAgICAgICAgICAvLyBhIHBhcmVudCBvZiB0aGUgUG9ydGFsLiBUaGF0IG1lYW5zIHdlIGNhbiBpZ25vcmUgaXQgYmVjYXVzZSB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIFBvcnRhbCB3aWxsIGJ1YmJsZSB0aHJvdWdoIHRvIHVzLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGdyYW5kTm9kZSA9IGdyYW5kTm9kZS5yZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBOb3cgd2UgbmVlZCB0byBmaW5kIGl0J3MgY29ycmVzcG9uZGluZyBob3N0IGZpYmVyIGluIHRoZSBvdGhlclxuICAgICAgICAgIC8vIHRyZWUuIFRvIGRvIHRoaXMgd2UgY2FuIHVzZSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSwgYnV0IHdlXG4gICAgICAgICAgLy8gbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmaWJlciBpcyBhIGhvc3QgaW5zdGFuY2UsIG90aGVyd2lzZVxuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdHJhdmVyc2UgdXAgdGhyb3VnaCB0aGUgRE9NIHRpbGwgd2UgZmluZCB0aGUgY29ycmVjdFxuICAgICAgICAgIC8vIG5vZGUgdGhhdCBpcyBmcm9tIHRoZSBvdGhlciB0cmVlLlxuXG5cbiAgICAgICAgICB3aGlsZSAoY29udGFpbmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKGNvbnRhaW5lcik7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudE5vZGUudGFnO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50VGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHBhcmVudFRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgICAgICAgbm9kZSA9IGFuY2VzdG9ySW5zdCA9IHBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG1haW5Mb29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYmF0Y2hlZEV2ZW50VXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnRzRm9yUGx1Z2lucyhkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCBhbmNlc3Rvckluc3QpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVNpbmdsZVBoYXNlTGlzdGVuZXJzKHRhcmdldEZpYmVyLCByZWFjdE5hbWUsIG5hdGl2ZUV2ZW50VHlwZSwgaW5DYXB0dXJlUGhhc2UsIGFjY3VtdWxhdGVUYXJnZXRPbmx5KSB7XG4gIHZhciBjYXB0dXJlTmFtZSA9IHJlYWN0TmFtZSAhPT0gbnVsbCA/IHJlYWN0TmFtZSArICdDYXB0dXJlJyA6IG51bGw7XG4gIHZhciByZWFjdEV2ZW50TmFtZSA9IGluQ2FwdHVyZVBoYXNlID8gY2FwdHVyZU5hbWUgOiByZWFjdE5hbWU7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0RmliZXI7XG4gIHZhciBsYXN0SG9zdENvbXBvbmVudCA9IG51bGw7IC8vIEFjY3VtdWxhdGUgYWxsIGluc3RhbmNlcyBhbmQgbGlzdGVuZXJzIHZpYSB0aGUgdGFyZ2V0IC0+IHJvb3QgcGF0aC5cblxuICB3aGlsZSAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICB2YXIgX2luc3RhbmNlMiA9IGluc3RhbmNlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2UyLnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlMi50YWc7IC8vIEhhbmRsZSBsaXN0ZW5lcnMgdGhhdCBhcmUgb24gSG9zdENvbXBvbmVudHMgKGkuZS4gPGRpdj4pXG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgbGFzdEhvc3RDb21wb25lbnQgPSBzdGF0ZU5vZGU7IC8vIGNyZWF0ZUV2ZW50SGFuZGxlIGxpc3RlbmVyc1xuXG5cbiAgICAgIGlmIChyZWFjdEV2ZW50TmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVhY3RFdmVudE5hbWUpO1xuXG4gICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGxhc3RIb3N0Q29tcG9uZW50KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIElmIHdlIGFyZSBvbmx5IGFjY3VtdWxhdGluZyBldmVudHMgZm9yIHRoZSB0YXJnZXQsIHRoZW4gd2UgZG9uJ3RcbiAgICAvLyBjb250aW51ZSB0byBwcm9wYWdhdGUgdGhyb3VnaCB0aGUgUmVhY3QgZmliZXIgdHJlZSB0byBmaW5kIG90aGVyXG4gICAgLy8gbGlzdGVuZXJzLlxuXG5cbiAgICBpZiAoYWNjdW11bGF0ZVRhcmdldE9ubHkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVycztcbn0gLy8gV2Ugc2hvdWxkIG9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gZm9yOlxuLy8gLSBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luXG4vLyAtIENoYW5nZUV2ZW50UGx1Z2luXG4vLyAtIFNlbGVjdEV2ZW50UGx1Z2luXG4vLyBUaGlzIGlzIGJlY2F1c2Ugd2Ugb25seSBwcm9jZXNzIHRoZXNlIHBsdWdpbnNcbi8vIGluIHRoZSBidWJibGUgcGhhc2UsIHNvIHdlIG5lZWQgdG8gYWNjdW11bGF0ZSB0d29cbi8vIHBoYXNlIGV2ZW50IGxpc3RlbmVycyAodmlhIGVtdWxhdGlvbikuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRGaWJlciwgcmVhY3ROYW1lKSB7XG4gIHZhciBjYXB0dXJlTmFtZSA9IHJlYWN0TmFtZSArICdDYXB0dXJlJztcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXRGaWJlcjsgLy8gQWNjdW11bGF0ZSBhbGwgaW5zdGFuY2VzIGFuZCBsaXN0ZW5lcnMgdmlhIHRoZSB0YXJnZXQgLT4gcm9vdCBwYXRoLlxuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIHZhciBfaW5zdGFuY2UzID0gaW5zdGFuY2UsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTMuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2UzLnRhZzsgLy8gSGFuZGxlIGxpc3RlbmVycyB0aGF0IGFyZSBvbiBIb3N0Q29tcG9uZW50cyAoaS5lLiA8ZGl2PilcblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRhcmdldCA9IHN0YXRlTm9kZTtcbiAgICAgIHZhciBjYXB0dXJlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZU5hbWUpO1xuXG4gICAgICBpZiAoY2FwdHVyZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBidWJibGVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWFjdE5hbWUpO1xuXG4gICAgICBpZiAoYnViYmxlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBidWJibGVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50KGluc3QpIHtcbiAgaWYgKGluc3QgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRvIHtcbiAgICBpbnN0ID0gaW5zdC5yZXR1cm47IC8vIFRPRE86IElmIHRoaXMgaXMgYSBIb3N0Um9vdCB3ZSBtaWdodCB3YW50IHRvIGJhaWwgb3V0LlxuICAgIC8vIFRoYXQgaXMgZGVwZW5kaW5nIG9uIGlmIHdlIHdhbnQgbmVzdGVkIHN1YnRyZWVzIChsYXllcnMpIHRvIGJ1YmJsZVxuICAgIC8vIGV2ZW50cyB0byB0aGVpciBwYXJlbnQuIFdlIGNvdWxkIGFsc28gZ28gdGhyb3VnaCBwYXJlbnROb2RlIG9uIHRoZVxuICAgIC8vIGhvc3Qgbm9kZSBidXQgdGhhdCB3b3VsZG4ndCB3b3JrIGZvciBSZWFjdCBOYXRpdmUgYW5kIGRvZXNuJ3QgbGV0IHVzXG4gICAgLy8gZG8gdGhlIHBvcnRhbCBmZWF0dXJlLlxuICB9IHdoaWxlIChpbnN0ICYmIGluc3QudGFnICE9PSBIb3N0Q29tcG9uZW50KTtcblxuICBpZiAoaW5zdCkge1xuICAgIHJldHVybiBpbnN0O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIFJldHVybiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBBIGFuZCBCLCBvciBudWxsIGlmIHRoZXkgYXJlIGluXG4gKiBkaWZmZXJlbnQgdHJlZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRMb3dlc3RDb21tb25BbmNlc3RvcihpbnN0QSwgaW5zdEIpIHtcbiAgdmFyIG5vZGVBID0gaW5zdEE7XG4gIHZhciBub2RlQiA9IGluc3RCO1xuICB2YXIgZGVwdGhBID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQSA9IG5vZGVBOyB0ZW1wQTsgdGVtcEEgPSBnZXRQYXJlbnQodGVtcEEpKSB7XG4gICAgZGVwdGhBKys7XG4gIH1cblxuICB2YXIgZGVwdGhCID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQiA9IG5vZGVCOyB0ZW1wQjsgdGVtcEIgPSBnZXRQYXJlbnQodGVtcEIpKSB7XG4gICAgZGVwdGhCKys7XG4gIH0gLy8gSWYgQSBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQSAtIGRlcHRoQiA+IDApIHtcbiAgICBub2RlQSA9IGdldFBhcmVudChub2RlQSk7XG4gICAgZGVwdGhBLS07XG4gIH0gLy8gSWYgQiBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQiAtIGRlcHRoQSA+IDApIHtcbiAgICBub2RlQiA9IGdldFBhcmVudChub2RlQik7XG4gICAgZGVwdGhCLS07XG4gIH0gLy8gV2FsayBpbiBsb2Nrc3RlcCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG5cblxuICB2YXIgZGVwdGggPSBkZXB0aEE7XG5cbiAgd2hpbGUgKGRlcHRoLS0pIHtcbiAgICBpZiAobm9kZUEgPT09IG5vZGVCIHx8IG5vZGVCICE9PSBudWxsICYmIG5vZGVBID09PSBub2RlQi5hbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiBub2RlQTtcbiAgICB9XG5cbiAgICBub2RlQSA9IGdldFBhcmVudChub2RlQSk7XG4gICAgbm9kZUIgPSBnZXRQYXJlbnQobm9kZUIpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZXZlbnQsIHRhcmdldCwgY29tbW9uLCBpbkNhcHR1cmVQaGFzZSkge1xuICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50Ll9yZWFjdE5hbWU7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0O1xuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIGlmIChpbnN0YW5jZSA9PT0gY29tbW9uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgX2luc3RhbmNlNCA9IGluc3RhbmNlLFxuICAgICAgICBhbHRlcm5hdGUgPSBfaW5zdGFuY2U0LmFsdGVybmF0ZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlNC5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTQudGFnO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUgPT09IGNvbW1vbikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoaW5DYXB0dXJlUGhhc2UpIHtcbiAgICAgICAgdmFyIGNhcHR1cmVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICBpZiAoY2FwdHVyZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghaW5DYXB0dXJlUGhhc2UpIHtcbiAgICAgICAgdmFyIGJ1YmJsZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIGlmIChidWJibGVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgYnViYmxlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggIT09IDApIHtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgfVxufSAvLyBXZSBzaG91bGQgb25seSB1c2UgdGhpcyBmdW5jdGlvbiBmb3I6XG4vLyAtIEVudGVyTGVhdmVFdmVudFBsdWdpblxuLy8gVGhpcyBpcyBiZWNhdXNlIHdlIG9ubHkgcHJvY2VzcyB0aGlzIHBsdWdpblxuLy8gaW4gdGhlIGJ1YmJsZSBwaGFzZSwgc28gd2UgbmVlZCB0byBhY2N1bXVsYXRlIHR3b1xuLy8gcGhhc2UgZXZlbnQgbGlzdGVuZXJzLlxuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlVHdvUGhhc2VMaXN0ZW5lcnMoZGlzcGF0Y2hRdWV1ZSwgbGVhdmVFdmVudCwgZW50ZXJFdmVudCwgZnJvbSwgdG8pIHtcbiAgdmFyIGNvbW1vbiA9IGZyb20gJiYgdG8gPyBnZXRMb3dlc3RDb21tb25BbmNlc3Rvcihmcm9tLCB0bykgOiBudWxsO1xuXG4gIGlmIChmcm9tICE9PSBudWxsKSB7XG4gICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBsZWF2ZUV2ZW50LCBmcm9tLCBjb21tb24sIGZhbHNlKTtcbiAgfVxuXG4gIGlmICh0byAhPT0gbnVsbCAmJiBlbnRlckV2ZW50ICE9PSBudWxsKSB7XG4gICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBlbnRlckV2ZW50LCB0bywgY29tbW9uLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0TGlzdGVuZXJTZXRLZXkoZG9tRXZlbnROYW1lLCBjYXB0dXJlKSB7XG4gIHJldHVybiBkb21FdmVudE5hbWUgKyBcIl9fXCIgKyAoY2FwdHVyZSA/ICdjYXB0dXJlJyA6ICdidWJibGUnKTtcbn1cblxudmFyIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gZmFsc2U7XG52YXIgREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwgPSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnO1xudmFyIFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyA9ICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnO1xudmFyIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG52YXIgQVVUT0ZPQ1VTID0gJ2F1dG9Gb2N1cyc7XG52YXIgQ0hJTERSRU4gPSAnY2hpbGRyZW4nO1xudmFyIFNUWUxFID0gJ3N0eWxlJztcbnZhciBIVE1MJDEgPSAnX19odG1sJztcbnZhciBIVE1MX05BTUVTUEFDRSQxID0gTmFtZXNwYWNlcy5odG1sO1xudmFyIHdhcm5lZFVua25vd25UYWdzO1xudmFyIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZztcbnZhciB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50O1xudmFyIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZTtcbnZhciB3YXJuRm9yUHJvcERpZmZlcmVuY2U7XG52YXIgd2FybkZvckV4dHJhQXR0cmlidXRlcztcbnZhciB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXI7XG52YXIgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZztcbnZhciBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGU7XG52YXIgbm9ybWFsaXplSFRNTDtcblxue1xuICB3YXJuZWRVbmtub3duVGFncyA9IHtcbiAgICAvLyBUaGVyZSBhcmUgd29ya2luZyBwb2x5ZmlsbHMgZm9yIDxkaWFsb2c+LiBMZXQgcGVvcGxlIHVzZSBpdC5cbiAgICBkaWFsb2c6IHRydWUsXG4gICAgLy8gRWxlY3Ryb24gc2hpcHMgYSBjdXN0b20gPHdlYnZpZXc+IHRhZyB0byBkaXNwbGF5IGV4dGVybmFsIHdlYiBjb250ZW50IGluXG4gICAgLy8gYW4gaXNvbGF0ZWQgZnJhbWUgYW5kIHByb2Nlc3MuXG4gICAgLy8gVGhpcyB0YWcgaXMgbm90IHByZXNlbnQgaW4gbm9uIEVsZWN0cm9uIGVudmlyb25tZW50cyBzdWNoIGFzIEpTRG9tIHdoaWNoXG4gICAgLy8gaXMgb2Z0ZW4gdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAgICAvLyBAc2VlIGh0dHBzOi8vZWxlY3Ryb25qcy5vcmcvZG9jcy9hcGkvd2Vidmlldy10YWdcbiAgICB3ZWJ2aWV3OiB0cnVlXG4gIH07XG5cbiAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBwcm9wcykge1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCB7XG4gICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzOiByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lczogcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1xuICAgIH0pO1xuICB9OyAvLyBJRSAxMSBwYXJzZXMgJiBub3JtYWxpemVzIHRoZSBzdHlsZSBhdHRyaWJ1dGUgYXMgb3Bwb3NlZCB0byBvdGhlclxuICAvLyBicm93c2Vycy4gSXQgYWRkcyBzcGFjZXMgYW5kIHNvcnRzIHRoZSBwcm9wZXJ0aWVzIGluIHNvbWVcbiAgLy8gbm9uLWFscGhhYmV0aWNhbCBvcmRlci4gSGFuZGxpbmcgdGhhdCB3b3VsZCByZXF1aXJlIHNvcnRpbmcgQ1NTXG4gIC8vIHByb3BlcnRpZXMgaW4gdGhlIGNsaWVudCAmIHNlcnZlciB2ZXJzaW9ucyBvciBhcHBseWluZ1xuICAvLyBgZXhwZWN0ZWRTdHlsZWAgdG8gYSB0ZW1wb3JhcnkgRE9NIG5vZGUgdG8gcmVhZCBpdHMgYHN0eWxlYCBhdHRyaWJ1dGVcbiAgLy8gbm9ybWFsaXplZC4gU2luY2UgaXQgb25seSBhZmZlY3RzIElFLCB3ZSdyZSBza2lwcGluZyBzdHlsZSB3YXJuaW5nc1xuICAvLyBpbiB0aGF0IGJyb3dzZXIgY29tcGxldGVseSBpbiBmYXZvciBvZiBkb2luZyBhbGwgdGhhdCB3b3JrLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTgwN1xuXG5cbiAgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZyA9IGNhblVzZURPTSAmJiAhZG9jdW1lbnQuZG9jdW1lbnRNb2RlOyAvLyBIVE1MIHBhcnNpbmcgbm9ybWFsaXplcyBDUiBhbmQgQ1JMRiB0byBMRi5cbiAgLy8gSXQgYWxzbyBjYW4gdHVybiBcXHUwMDAwIGludG8gXFx1RkZGRCBpbnNpZGUgYXR0cmlidXRlcy5cbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3NpbmdsZS1wYWdlLmh0bWwjcHJlcHJvY2Vzc2luZy10aGUtaW5wdXQtc3RyZWFtXG4gIC8vIElmIHdlIGhhdmUgYSBtaXNtYXRjaCwgaXQgbWlnaHQgYmUgY2F1c2VkIGJ5IHRoYXQuXG4gIC8vIFdlIHdpbGwgc3RpbGwgcGF0Y2ggdXAgaW4gdGhpcyBjYXNlIGJ1dCBub3QgZmlyZSB0aGUgd2FybmluZy5cblxuICB2YXIgTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYID0gL1xcclxcbj8vZztcbiAgdmFyIE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCA9IC9cXHUwMDAwfFxcdUZGRkQvZztcblxuICBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUgPSBmdW5jdGlvbiAobWFya3VwKSB7XG4gICAgdmFyIG1hcmt1cFN0cmluZyA9IHR5cGVvZiBtYXJrdXAgPT09ICdzdHJpbmcnID8gbWFya3VwIDogJycgKyBtYXJrdXA7XG4gICAgcmV0dXJuIG1hcmt1cFN0cmluZy5yZXBsYWNlKE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCwgJ1xcbicpLnJlcGxhY2UoTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYLCAnJyk7XG4gIH07XG5cbiAgd2FybkZvclRleHREaWZmZXJlbmNlID0gZnVuY3Rpb24gKHNlcnZlclRleHQsIGNsaWVudFRleHQpIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm9ybWFsaXplZENsaWVudFRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VGV4dCk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclRleHQpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID09PSBub3JtYWxpemVkQ2xpZW50VGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdUZXh0IGNvbnRlbnQgZGlkIG5vdCBtYXRjaC4gU2VydmVyOiBcIiVzXCIgQ2xpZW50OiBcIiVzXCInLCBub3JtYWxpemVkU2VydmVyVGV4dCwgbm9ybWFsaXplZENsaWVudFRleHQpO1xuICB9O1xuXG4gIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChwcm9wTmFtZSwgc2VydmVyVmFsdWUsIGNsaWVudFZhbHVlKSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRWYWx1ZSk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJWYWx1ZSk7XG5cbiAgICBpZiAobm9ybWFsaXplZFNlcnZlclZhbHVlID09PSBub3JtYWxpemVkQ2xpZW50VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignUHJvcCBgJXNgIGRpZCBub3QgbWF0Y2guIFNlcnZlcjogJXMgQ2xpZW50OiAlcycsIHByb3BOYW1lLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkU2VydmVyVmFsdWUpLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkQ2xpZW50VmFsdWUpKTtcbiAgfTtcblxuICB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGF0dHJpYnV0ZU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgfSk7XG5cbiAgICBlcnJvcignRXh0cmEgYXR0cmlidXRlcyBmcm9tIHRoZSBzZXJ2ZXI6ICVzJywgbmFtZXMpO1xuICB9O1xuXG4gIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChyZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAgIGlmIChsaXN0ZW5lciA9PT0gZmFsc2UpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGBmYWxzZWAuXFxuXFxuJyArICdJZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgJyArICdwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgJXNgIHR5cGUuJywgcmVnaXN0cmF0aW9uTmFtZSwgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICB9XG4gIH07IC8vIFBhcnNlIHRoZSBIVE1MIGFuZCByZWFkIGl0IGJhY2sgdG8gbm9ybWFsaXplIHRoZSBIVE1MIHN0cmluZyBzbyB0aGF0IGl0XG4gIC8vIGNhbiBiZSB1c2VkIGZvciBjb21wYXJpc29uLlxuXG5cbiAgbm9ybWFsaXplSFRNTCA9IGZ1bmN0aW9uIChwYXJlbnQsIGh0bWwpIHtcbiAgICAvLyBXZSBjb3VsZCBoYXZlIGNyZWF0ZWQgYSBzZXBhcmF0ZSBkb2N1bWVudCBoZXJlIHRvIGF2b2lkXG4gICAgLy8gcmUtaW5pdGlhbGl6aW5nIGN1c3RvbSBlbGVtZW50cyBpZiB0aGV5IGV4aXN0LiBCdXQgdGhpcyBicmVha3NcbiAgICAvLyBob3cgPG5vc2NyaXB0PiBpcyBiZWluZyBoYW5kbGVkLiBTbyB3ZSB1c2UgdGhlIHNhbWUgZG9jdW1lbnQuXG4gICAgLy8gU2VlIHRoZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzExMTU3LlxuICAgIHZhciB0ZXN0RWxlbWVudCA9IHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEgPyBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHBhcmVudC50YWdOYW1lKSA6IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhwYXJlbnQubmFtZXNwYWNlVVJJLCBwYXJlbnQudGFnTmFtZSk7XG4gICAgdGVzdEVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gdGVzdEVsZW1lbnQuaW5uZXJIVE1MO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgcmV0dXJuIHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gcm9vdENvbnRhaW5lckVsZW1lbnQgOiByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xufVxuXG5mdW5jdGlvbiBub29wKCkge31cblxuZnVuY3Rpb24gdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQobm9kZSkge1xuICAvLyBNb2JpbGUgU2FmYXJpIGRvZXMgbm90IGZpcmUgcHJvcGVybHkgYnViYmxlIGNsaWNrIGV2ZW50cyBvblxuICAvLyBub24taW50ZXJhY3RpdmUgZWxlbWVudHMsIHdoaWNoIG1lYW5zIGRlbGVnYXRlZCBjbGljayBsaXN0ZW5lcnMgZG8gbm90XG4gIC8vIGZpcmUuIFRoZSB3b3JrYXJvdW5kIGZvciB0aGlzIGJ1ZyBpbnZvbHZlcyBhdHRhY2hpbmcgYW4gZW1wdHkgY2xpY2tcbiAgLy8gbGlzdGVuZXIgb24gdGhlIHRhcmdldCBub2RlLlxuICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTAvMDkvY2xpY2tfZXZlbnRfZGVsLmh0bWxcbiAgLy8gSnVzdCBzZXQgaXQgdXNpbmcgdGhlIG9uY2xpY2sgcHJvcGVydHkgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIG1hbmFnZSBhbnlcbiAgLy8gYm9va2tlZXBpbmcgZm9yIGl0LiBOb3Qgc3VyZSBpZiB3ZSBuZWVkIHRvIGNsZWFyIGl0IHdoZW4gdGhlIGxpc3RlbmVyIGlzXG4gIC8vIHJlbW92ZWQuXG4gIC8vIFRPRE86IE9ubHkgZG8gdGhpcyBmb3IgdGhlIHJlbGV2YW50IFNhZmFyaXMgbWF5YmU/XG4gIG5vZGUub25jbGljayA9IG5vb3A7XG59XG5cbmZ1bmN0aW9uIHNldEluaXRpYWxET01Qcm9wZXJ0aWVzKHRhZywgZG9tRWxlbWVudCwgcm9vdENvbnRhaW5lckVsZW1lbnQsIG5leHRQcm9wcywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgZm9yICh2YXIgcHJvcEtleSBpbiBuZXh0UHJvcHMpIHtcbiAgICBpZiAoIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIC8vIEZyZWV6ZSB0aGUgbmV4dCBzdHlsZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGJlXG4gICAgICAgICAgLy8gbXV0YXRlZC4gV2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhpcyBpbiB0aGUgcGFzdC5cbiAgICAgICAgICBPYmplY3QuZnJlZXplKG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cblxuXG4gICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCBuZXh0UHJvcCk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICBzZXRJbm5lckhUTUwoZG9tRWxlbWVudCwgbmV4dEh0bWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEF2b2lkIHNldHRpbmcgaW5pdGlhbCB0ZXh0Q29udGVudCB3aGVuIHRoZSB0ZXh0IGlzIGVtcHR5LiBJbiBJRTExIHNldHRpbmdcbiAgICAgICAgLy8gdGV4dENvbnRlbnQgb24gYSA8dGV4dGFyZWE+IHdpbGwgY2F1c2UgdGhlIHBsYWNlaG9sZGVyIHRvIG5vdFxuICAgICAgICAvLyBzaG93IHdpdGhpbiB0aGUgPHRleHRhcmVhPiB1bnRpbCBpdCBoYXMgYmVlbiBmb2N1c2VkIGFuZCBibHVycmVkIGFnYWluLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY3MzEjaXNzdWVjb21tZW50LTI1NDg3NDU1M1xuICAgICAgICB2YXIgY2FuU2V0VGV4dENvbnRlbnQgPSB0YWcgIT09ICd0ZXh0YXJlYScgfHwgbmV4dFByb3AgIT09ICcnO1xuXG4gICAgICAgIGlmIChjYW5TZXRUZXh0Q29udGVudCkge1xuICAgICAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsICcnICsgbmV4dFByb3ApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IEFVVE9GT0NVUykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICBpZiAoIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcEtleSA9PT0gJ29uU2Nyb2xsJykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICBzZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgd2FzQ3VzdG9tQ29tcG9uZW50VGFnLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAvLyBUT0RPOiBIYW5kbGUgd2FzQ3VzdG9tQ29tcG9uZW50VGFnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdXBkYXRlUGF5bG9hZC5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBwcm9wS2V5ID0gdXBkYXRlUGF5bG9hZFtpXTtcbiAgICB2YXIgcHJvcFZhbHVlID0gdXBkYXRlUGF5bG9hZFtpICsgMV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgc2V0SW5uZXJIVE1MKGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBwcm9wVmFsdWUsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQsIHBhcmVudE5hbWVzcGFjZSkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWc7IC8vIFdlIGNyZWF0ZSB0YWdzIGluIHRoZSBuYW1lc3BhY2Ugb2YgdGhlaXIgcGFyZW50IGNvbnRhaW5lciwgZXhjZXB0IEhUTUxcbiAgLy8gdGFncyBnZXQgbm8gbmFtZXNwYWNlLlxuXG4gIHZhciBvd25lckRvY3VtZW50ID0gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KTtcbiAgdmFyIGRvbUVsZW1lbnQ7XG4gIHZhciBuYW1lc3BhY2VVUkkgPSBwYXJlbnROYW1lc3BhY2U7XG5cbiAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgIG5hbWVzcGFjZVVSSSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKTtcbiAgfVxuXG4gIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICB7XG4gICAgICBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKTsgLy8gU2hvdWxkIHRoaXMgY2hlY2sgYmUgZ2F0ZWQgYnkgcGFyZW50IG5hbWVzcGFjZT8gTm90IHN1cmUgd2Ugd2FudCB0b1xuICAgICAgLy8gYWxsb3cgPFNWRz4gb3IgPG1BVEg+LlxuXG4gICAgICBpZiAoIWlzQ3VzdG9tQ29tcG9uZW50VGFnICYmIHR5cGUgIT09IHR5cGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBlcnJvcignPCVzIC8+IGlzIHVzaW5nIGluY29ycmVjdCBjYXNpbmcuICcgKyAnVXNlIFBhc2NhbENhc2UgZm9yIFJlYWN0IGNvbXBvbmVudHMsICcgKyAnb3IgbG93ZXJjYXNlIGZvciBIVE1MIGVsZW1lbnRzLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnc2NyaXB0Jykge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBzY3JpcHQgdmlhIC5pbm5lckhUTUwgc28gaXRzIFwicGFyc2VyLWluc2VydGVkXCIgZmxhZyBpc1xuICAgICAgLy8gc2V0IHRvIHRydWUgYW5kIGl0IGRvZXMgbm90IGV4ZWN1dGVcbiAgICAgIHZhciBkaXYgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICBkaXYuaW5uZXJIVE1MID0gJzxzY3JpcHQ+PCcgKyAnL3NjcmlwdD4nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8geWllbGQgYSBzY3JpcHQgZWxlbWVudC5cblxuICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBkaXYuZmlyc3RDaGlsZDtcbiAgICAgIGRvbUVsZW1lbnQgPSBkaXYucmVtb3ZlQ2hpbGQoZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcHMuaXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAkRmxvd0lzc3VlIGBjcmVhdGVFbGVtZW50YCBzaG91bGQgYmUgdXBkYXRlZCBmb3IgV2ViIENvbXBvbmVudHNcbiAgICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSwge1xuICAgICAgICBpczogcHJvcHMuaXNcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZXBhcmF0ZSBlbHNlIGJyYW5jaCBpbnN0ZWFkIG9mIHVzaW5nIGBwcm9wcy5pcyB8fCB1bmRlZmluZWRgIGFib3ZlIGJlY2F1c2Ugb2YgYSBGaXJlZm94IGJ1Zy5cbiAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzY4OTZcbiAgICAgIC8vIGFuZCBkaXNjdXNzaW9uIGluIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzYyNDBcbiAgICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7IC8vIE5vcm1hbGx5IGF0dHJpYnV0ZXMgYXJlIGFzc2lnbmVkIGluIGBzZXRJbml0aWFsRE9NUHJvcGVydGllc2AsIGhvd2V2ZXIgdGhlIGBtdWx0aXBsZWAgYW5kIGBzaXplYFxuICAgICAgLy8gYXR0cmlidXRlcyBvbiBgc2VsZWN0YHMgbmVlZHMgdG8gYmUgYWRkZWQgYmVmb3JlIGBvcHRpb25gcyBhcmUgaW5zZXJ0ZWQuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzOlxuICAgICAgLy8gLSBhIGJ1ZyB3aGVyZSB0aGUgYHNlbGVjdGAgZG9lcyBub3Qgc2Nyb2xsIHRvIHRoZSBjb3JyZWN0IG9wdGlvbiBiZWNhdXNlIHNpbmd1bGFyXG4gICAgICAvLyAgYHNlbGVjdGAgZWxlbWVudHMgYXV0b21hdGljYWxseSBwaWNrIHRoZSBmaXJzdCBpdGVtICMxMzIyMlxuICAgICAgLy8gLSBhIGJ1ZyB3aGVyZSB0aGUgYHNlbGVjdGAgc2V0IHRoZSBmaXJzdCBpdGVtIGFzIHNlbGVjdGVkIGRlc3BpdGUgdGhlIGBzaXplYCBhdHRyaWJ1dGUgIzE0MjM5XG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzIyMlxuICAgICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTQyMzlcblxuICAgICAgaWYgKHR5cGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIHZhciBub2RlID0gZG9tRWxlbWVudDtcblxuICAgICAgICBpZiAocHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgICBub2RlLm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wcy5zaXplKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBhIHNpemUgZ3JlYXRlciB0aGFuIDEgY2F1c2VzIGEgc2VsZWN0IHRvIGJlaGF2ZSBsaWtlIGBtdWx0aXBsZT10cnVlYCwgd2hlcmVcbiAgICAgICAgICAvLyBpdCBpcyBwb3NzaWJsZSB0aGF0IG5vIG9wdGlvbiBpcyBzZWxlY3RlZC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFRoaXMgaXMgb25seSBuZWNlc3Nhcnkgd2hlbiBhIHNlbGVjdCBpbiBcInNpbmdsZSBzZWxlY3Rpb24gbW9kZVwiLlxuICAgICAgICAgIG5vZGUuc2l6ZSA9IHByb3BzLnNpemU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgdHlwZSk7XG4gIH1cblxuICB7XG4gICAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgICAgaWYgKCFpc0N1c3RvbUNvbXBvbmVudFRhZyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9tRWxlbWVudCkgPT09ICdbb2JqZWN0IEhUTUxVbmtub3duRWxlbWVudF0nICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwod2FybmVkVW5rbm93blRhZ3MsIHR5cGUpKSB7XG4gICAgICAgIHdhcm5lZFVua25vd25UYWdzW3R5cGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignVGhlIHRhZyA8JXM+IGlzIHVucmVjb2duaXplZCBpbiB0aGlzIGJyb3dzZXIuICcgKyAnSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIFJlYWN0IGNvbXBvbmVudCwgc3RhcnQgaXRzIG5hbWUgd2l0aCAnICsgJ2FuIHVwcGVyY2FzZSBsZXR0ZXIuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvbUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZSh0ZXh0LCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KS5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbn1cbmZ1bmN0aW9uIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuXG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcmF3UHJvcHMpO1xuICB9IC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHdlIGNoZWNrIGlzTW91bnRlZCBiZWZvcmUgZmlyaW5nIGFueSBvZiB0aGVzZSBldmVudHMuXG5cblxuICB2YXIgcHJvcHM7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2FuY2VsJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjbG9zZScsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgYWxsIHRoZSBtZWRpYSBldmVudHMuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1tpXSwgZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgZXJyb3IgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgY2FzZSAnbGluayc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGVycm9yIGFuZCBsb2FkIGV2ZW50cy5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSB0b2dnbGUgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCd0b2dnbGUnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICB2YWxpZGF0ZVByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMihkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCBwcm9wcyk7XG4gIHNldEluaXRpYWxET01Qcm9wZXJ0aWVzKHRhZywgZG9tRWxlbWVudCwgcm9vdENvbnRhaW5lckVsZW1lbnQsIHByb3BzLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyKGRvbUVsZW1lbnQsIHJhd1Byb3BzLCBmYWxzZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMyhkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxufSAvLyBDYWxjdWxhdGUgdGhlIGRpZmYgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG5cbmZ1bmN0aW9uIGRpZmZQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgbGFzdFJhd1Byb3BzLCBuZXh0UmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgbmV4dFJhd1Byb3BzKTtcbiAgfVxuXG4gIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcbiAgdmFyIGxhc3RQcm9wcztcbiAgdmFyIG5leHRQcm9wcztcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGxhc3RQcm9wcyA9IGxhc3RSYXdQcm9wcztcbiAgICAgIG5leHRQcm9wcyA9IG5leHRSYXdQcm9wcztcblxuICAgICAgaWYgKHR5cGVvZiBsYXN0UHJvcHMub25DbGljayAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbmV4dFByb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIG5leHRQcm9wcyk7XG4gIHZhciBwcm9wS2V5O1xuICB2YXIgc3R5bGVOYW1lO1xuICB2YXIgc3R5bGVVcGRhdGVzID0gbnVsbDtcblxuICBmb3IgKHByb3BLZXkgaW4gbGFzdFByb3BzKSB7XG4gICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCAhbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IGxhc3RQcm9wc1twcm9wS2V5XSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHZhciBsYXN0U3R5bGUgPSBsYXN0UHJvcHNbcHJvcEtleV07XG5cbiAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RTdHlsZSkge1xuICAgICAgICBpZiAobGFzdFN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwgfHwgcHJvcEtleSA9PT0gQ0hJTERSRU4pIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IEFVVE9GT0NVUykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLiBJZiBhbnkgbGlzdGVuZXIgdXBkYXRlcyB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgZmliZXIgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbGwgb3RoZXIgZGVsZXRlZCBwcm9wZXJ0aWVzIHdlIGFkZCBpdCB0byB0aGUgcXVldWUuIFdlIHVzZVxuICAgICAgLy8gdGhlIGFsbG93ZWQgcHJvcGVydHkgbGlzdCBpbiB0aGUgY29tbWl0IHBoYXNlIGluc3RlYWQuXG4gICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTtcbiAgICB2YXIgbGFzdFByb3AgPSBsYXN0UHJvcHMgIT0gbnVsbCA/IGxhc3RQcm9wc1twcm9wS2V5XSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IG5leHRQcm9wID09PSBsYXN0UHJvcCB8fCBuZXh0UHJvcCA9PSBudWxsICYmIGxhc3RQcm9wID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICAvLyBGcmVlemUgdGhlIG5leHQgc3R5bGUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBiZVxuICAgICAgICAgIC8vIG11dGF0ZWQuIFdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgZm9yIHRoaXMgaW4gdGhlIHBhc3QuXG4gICAgICAgICAgT2JqZWN0LmZyZWV6ZShuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgIC8vIFVuc2V0IHN0eWxlcyBvbiBgbGFzdFByb3BgIGJ1dCBub3Qgb24gYG5leHRQcm9wYC5cbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFByb3ApIHtcbiAgICAgICAgICBpZiAobGFzdFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiAoIW5leHRQcm9wIHx8ICFuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSkge1xuICAgICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFVwZGF0ZSBzdHlsZXMgdGhhdCBjaGFuZ2VkIHNpbmNlIGBsYXN0UHJvcGAuXG5cblxuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmIChuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmIGxhc3RQcm9wW3N0eWxlTmFtZV0gIT09IG5leHRQcm9wW3N0eWxlTmFtZV0pIHtcbiAgICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9IG5leHRQcm9wW3N0eWxlTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cbiAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICBpZiAoIXVwZGF0ZVBheWxvYWQpIHtcbiAgICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkLnB1c2gocHJvcEtleSwgc3R5bGVVcGRhdGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlVXBkYXRlcyA9IG5leHRQcm9wO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBsYXN0SHRtbCA9IGxhc3RQcm9wID8gbGFzdFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGxhc3RIdG1sICE9PSBuZXh0SHRtbCkge1xuICAgICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0SHRtbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCAnJyArIG5leHRQcm9wKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICAvLyBXZSBlYWdlcmx5IGxpc3RlbiB0byB0aGlzIGV2ZW4gdGhvdWdoIHdlIGhhdmVuJ3QgY29tbWl0dGVkIHlldC5cbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXVwZGF0ZVBheWxvYWQgJiYgbGFzdFByb3AgIT09IG5leHRQcm9wKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UuIElmIGFueSBsaXN0ZW5lciB1cGRhdGVzIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgdGhlIFwiY3VycmVudFwiIHByb3BzIHBvaW50ZXIgZ2V0cyB1cGRhdGVkIHNvIHdlIG5lZWQgYSBjb21taXRcbiAgICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnb2JqZWN0JyAmJiBuZXh0UHJvcCAhPT0gbnVsbCAmJiBuZXh0UHJvcC4kJHR5cGVvZiA9PT0gUkVBQ1RfT1BBUVVFX0lEX1RZUEUpIHtcbiAgICAgIC8vIElmIHdlIGVuY291bnRlciB1c2VPcGFxdWVSZWZlcmVuY2UncyBvcGFxdWUgb2JqZWN0LCB0aGlzIG1lYW5zIHdlIGFyZSBoeWRyYXRpbmcuXG4gICAgICAvLyBJbiB0aGlzIGNhc2UsIGNhbGwgdGhlIG9wYXF1ZSBvYmplY3QncyB0b1N0cmluZyBmdW5jdGlvbiB3aGljaCBnZW5lcmF0ZXMgYSBuZXcgY2xpZW50XG4gICAgICAvLyBJRCBzbyBjbGllbnQgYW5kIHNlcnZlciBJRHMgbWF0Y2ggYW5kIHRocm93cyB0byByZXJlbmRlci5cbiAgICAgIG5leHRQcm9wLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbnkgb3RoZXIgcHJvcGVydHkgd2UgYWx3YXlzIGFkZCBpdCB0byB0aGUgcXVldWUgYW5kIHRoZW4gd2VcbiAgICAgIC8vIGZpbHRlciBpdCBvdXQgdXNpbmcgdGhlIGFsbG93ZWQgcHJvcGVydHkgbGlzdCBkdXJpbmcgdGhlIGNvbW1pdC5cbiAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlVXBkYXRlcykge1xuICAgIHtcbiAgICAgIHZhbGlkYXRlU2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb25JbkRldihzdHlsZVVwZGF0ZXMsIG5leHRQcm9wc1tTVFlMRV0pO1xuICAgIH1cblxuICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChTVFlMRSwgc3R5bGVVcGRhdGVzKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufSAvLyBBcHBseSB0aGUgZGlmZi5cblxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0YWcsIGxhc3RSYXdQcm9wcywgbmV4dFJhd1Byb3BzKSB7XG4gIC8vIFVwZGF0ZSBjaGVja2VkICpiZWZvcmUqIG5hbWUuXG4gIC8vIEluIHRoZSBtaWRkbGUgb2YgYW4gdXBkYXRlLCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGNoZWNrZWQuXG4gIC8vIFdoZW4gYSBjaGVja2VkIHJhZGlvIHRyaWVzIHRvIGNoYW5nZSBuYW1lLCBicm93c2VyIG1ha2VzIGFub3RoZXIgcmFkaW8ncyBjaGVja2VkIGZhbHNlLlxuICBpZiAodGFnID09PSAnaW5wdXQnICYmIG5leHRSYXdQcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5leHRSYXdQcm9wcy5uYW1lICE9IG51bGwpIHtcbiAgICB1cGRhdGVDaGVja2VkKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gIH1cblxuICB2YXIgd2FzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCBsYXN0UmF3UHJvcHMpO1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIG5leHRSYXdQcm9wcyk7IC8vIEFwcGx5IHRoZSBkaWZmLlxuXG4gIHVwZGF0ZURPTVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgd2FzQ3VzdG9tQ29tcG9uZW50VGFnLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7IC8vIFRPRE86IEVuc3VyZSB0aGF0IGFuIHVwZGF0ZSBnZXRzIHNjaGVkdWxlZCBpZiBhbnkgb2YgdGhlIHNwZWNpYWwgcHJvcHNcbiAgLy8gY2hhbmdlZC5cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFVwZGF0ZSB0aGUgd3JhcHBlciBhcm91bmQgaW5wdXRzICphZnRlciogdXBkYXRpbmcgcHJvcHMuIFRoaXMgaGFzIHRvXG4gICAgICAvLyBoYXBwZW4gYWZ0ZXIgYHVwZGF0ZURPTVByb3BlcnRpZXNgLiBPdGhlcndpc2UgSFRNTDUgaW5wdXQgdmFsaWRhdGlvbnNcbiAgICAgIC8vIHJhaXNlIHdhcm5pbmdzIGFuZCBwcmV2ZW50IHRoZSBuZXcgdmFsdWUgZnJvbSBiZWluZyBhc3NpZ25lZC5cbiAgICAgIHVwZGF0ZVdyYXBwZXIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgdXBkYXRlV3JhcHBlciQxKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAvLyA8c2VsZWN0PiB2YWx1ZSB1cGRhdGUgbmVlZHMgdG8gb2NjdXIgYWZ0ZXIgPG9wdGlvbj4gY2hpbGRyZW5cbiAgICAgIC8vIHJlY29uY2lsaWF0aW9uXG4gICAgICBwb3N0VXBkYXRlV3JhcHBlcihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUocHJvcE5hbWUpIHtcbiAge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHByb3BOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoIXBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdIHx8IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHJhd1Byb3BzLCBwYXJlbnROYW1lc3BhY2UsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZztcbiAgdmFyIGV4dHJhQXR0cmlidXRlTmFtZXM7XG5cbiAge1xuICAgIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHJhd1Byb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXSA9PT0gdHJ1ZTtcbiAgICBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCByYXdQcm9wcyk7XG4gIH0gLy8gVE9ETzogTWFrZSBzdXJlIHRoYXQgd2UgY2hlY2sgaXNNb3VudGVkIGJlZm9yZSBmaXJpbmcgYW55IG9mIHRoZXNlIGV2ZW50cy5cblxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2NhbmNlbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2xvc2UnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd2aWRlbyc6XG4gICAgY2FzZSAnYXVkaW8nOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBhbGwgdGhlIG1lZGlhIGV2ZW50cy5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzb3VyY2UnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGVycm9yIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgY2FzZSAnbGluayc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGVycm9yIGFuZCBsb2FkIGV2ZW50cy5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIHRvZ2dsZSBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3RvZ2dsZScsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgdmFsaWRhdGVQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMihkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHJhd1Byb3BzKTtcblxuICB7XG4gICAgZXh0cmFBdHRyaWJ1dGVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuYXR0cmlidXRlcztcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVzW19pXS5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAvLyBCdWlsdC1pbiBTU1IgYXR0cmlidXRlIGlzIGFsbG93ZWRcbiAgICAgICAgY2FzZSAnZGF0YS1yZWFjdHJvb3QnOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBDb250cm9sbGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgLy8gVE9ETzogT25seSBpZ25vcmUgdGhlbSBvbiBjb250cm9sbGVkIHRhZ3MuXG5cbiAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2NoZWNrZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlbGVjdGVkJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEludGVudGlvbmFsbHkgdXNlIHRoZSBvcmlnaW5hbCBuYW1lLlxuICAgICAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEwNjc2LlxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuYWRkKGF0dHJpYnV0ZXNbX2ldLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcblxuICBmb3IgKHZhciBwcm9wS2V5IGluIHJhd1Byb3BzKSB7XG4gICAgaWYgKCFyYXdQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5leHRQcm9wID0gcmF3UHJvcHNbcHJvcEtleV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIC8vIEZvciB0ZXh0IGNvbnRlbnQgY2hpbGRyZW4gd2UgY29tcGFyZSBhZ2FpbnN0IHRleHRDb250ZW50LiBUaGlzXG4gICAgICAvLyBtaWdodCBtYXRjaCBhZGRpdGlvbmFsIEhUTUwgdGhhdCBpcyBoaWRkZW4gd2hlbiB3ZSByZWFkIGl0IHVzaW5nXG4gICAgICAvLyB0ZXh0Q29udGVudC4gRS5nLiBcImZvb1wiIHdpbGwgbWF0Y2ggXCJmPHNwYW4+b288L3NwYW4+XCIgYnV0IHRoYXQgc3RpbGxcbiAgICAgIC8vIHNhdGlzZmllcyBvdXIgcmVxdWlyZW1lbnQuIE91ciByZXF1aXJlbWVudCBpcyBub3QgdG8gcHJvZHVjZSBwZXJmZWN0XG4gICAgICAvLyBIVE1MIGFuZCBhdHRyaWJ1dGVzLiBJZGVhbGx5IHdlIHNob3VsZCBwcmVzZXJ2ZSBzdHJ1Y3R1cmUgYnV0IGl0J3NcbiAgICAgIC8vIG9rIG5vdCB0byBpZiB0aGUgdmlzaWJsZSBjb250ZW50IGlzIHN0aWxsIGVub3VnaCB0byBpbmRpY2F0ZSB3aGF0XG4gICAgICAvLyBldmVuIGxpc3RlbmVycyB0aGVzZSBub2RlcyBtaWdodCBiZSB3aXJlZCB1cCB0by5cbiAgICAgIC8vIFRPRE86IFdhcm4gaWYgdGhlcmUgaXMgbW9yZSB0aGFuIGEgc2luZ2xlIHRleHROb2RlIGFzIGEgY2hpbGQuXG4gICAgICAvLyBUT0RPOiBTaG91bGQgd2UgdXNlIGRvbUVsZW1lbnQuZmlyc3RDaGlsZC5ub2RlVmFsdWUgdG8gY29tcGFyZT9cbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50LnRleHRDb250ZW50ICE9PSBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmICggIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgICAgd2FybkZvclRleHREaWZmZXJlbmNlKGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCBuZXh0UHJvcF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudC50ZXh0Q29udGVudCAhPT0gJycgKyBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmICggIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgICAgd2FybkZvclRleHREaWZmZXJlbmNlKGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCAnJyArIG5leHRQcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIC8vIENvbnZpbmNlIEZsb3cgd2UndmUgY2FsY3VsYXRlZCBpdCAoaXQncyBERVYtb25seSBpbiB0aGlzIG1ldGhvZC4pXG4gICAgdHlwZW9mIGlzQ3VzdG9tQ29tcG9uZW50VGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIHByb3BlcnRpZXMgY29ycmVzcG9uZCB0byB0aGVpciBleHBlY3RlZCB2YWx1ZXMuXG4gICAgICB2YXIgc2VydmVyVmFsdWUgPSB2b2lkIDA7XG4gICAgICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKHByb3BLZXkpO1xuXG4gICAgICBpZiAoc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyB8fCAvLyBDb250cm9sbGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgIC8vIFRPRE86IE9ubHkgaWdub3JlIHRoZW0gb24gY29udHJvbGxlZCB0YWdzLlxuICAgICAgcHJvcEtleSA9PT0gJ3ZhbHVlJyB8fCBwcm9wS2V5ID09PSAnY2hlY2tlZCcgfHwgcHJvcEtleSA9PT0gJ3NlbGVjdGVkJykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgICB2YXIgc2VydmVySFRNTCA9IGRvbUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRIVE1MID0gbm9ybWFsaXplSFRNTChkb21FbGVtZW50LCBuZXh0SHRtbCk7XG5cbiAgICAgICAgICBpZiAoZXhwZWN0ZWRIVE1MICE9PSBzZXJ2ZXJIVE1MKSB7XG4gICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVySFRNTCwgZXhwZWN0ZWRIVE1MKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5KTtcblxuICAgICAgICBpZiAoY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgIHZhciBleHBlY3RlZFN0eWxlID0gY3JlYXRlRGFuZ2Vyb3VzU3RyaW5nRm9yU3R5bGVzKG5leHRQcm9wKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXG4gICAgICAgICAgaWYgKGV4cGVjdGVkU3R5bGUgIT09IHNlcnZlclZhbHVlKSB7XG4gICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIGV4cGVjdGVkU3R5bGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3ApO1xuXG4gICAgICAgIGlmIChuZXh0UHJvcCAhPT0gc2VydmVyVmFsdWUpIHtcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc2hvdWxkSWdub3JlQXR0cmlidXRlKHByb3BLZXksIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpICYmICFzaG91bGRSZW1vdmVBdHRyaWJ1dGUocHJvcEtleSwgbmV4dFByb3AsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgICAgIHZhciBpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3AsIHByb3BlcnR5SW5mbyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG93bk5hbWVzcGFjZSA9IHBhcmVudE5hbWVzcGFjZTtcblxuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgICAgICAgIG93bk5hbWVzcGFjZSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0YWcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZShwcm9wS2V5KTtcblxuICAgICAgICAgICAgaWYgKHN0YW5kYXJkTmFtZSAhPT0gbnVsbCAmJiBzdGFuZGFyZE5hbWUgIT09IHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgYW4gU1ZHIHByb3AgaXMgc3VwcGxpZWQgd2l0aCBiYWQgY2FzaW5nLCBpdCB3aWxsXG4gICAgICAgICAgICAgIC8vIGJlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgZnJvbSBIVE1MLCBidXQgd2lsbCBwcm9kdWNlIGEgbWlzbWF0Y2hcbiAgICAgICAgICAgICAgLy8gKGFuZCB3b3VsZCBiZSBpbmNvcnJlY3RseSByZW5kZXJlZCBvbiB0aGUgY2xpZW50KS5cbiAgICAgICAgICAgICAgLy8gSG93ZXZlciwgd2UgYWxyZWFkeSB3YXJuIGFib3V0IGJhZCBjYXNpbmcgZWxzZXdoZXJlLlxuICAgICAgICAgICAgICAvLyBTbyB3ZSdsbCBza2lwIHRoZSBtaXNsZWFkaW5nIGV4dHJhIG1pc21hdGNoIHdhcm5pbmcgaW4gdGhpcyBjYXNlLlxuICAgICAgICAgICAgICBpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcgPSB0cnVlOyAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG5cbiAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUoc3RhbmRhcmROYW1lKTtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuXG5cbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRQcm9wICE9PSBzZXJ2ZXJWYWx1ZSAmJiAhaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nKSB7XG4gICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgIGlmIChleHRyYUF0dHJpYnV0ZU5hbWVzLnNpemUgPiAwICYmICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMoZXh0cmFBdHRyaWJ1dGVOYW1lcyk7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyKGRvbUVsZW1lbnQsIHJhd1Byb3BzLCB0cnVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlciQzKGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAvLyBGb3IgaW5wdXQgYW5kIHRleHRhcmVhIHdlIGN1cnJlbnQgYWx3YXlzIHNldCB0aGUgdmFsdWUgcHJvcGVydHkgYXRcbiAgICAgIC8vIHBvc3QgbW91bnQgdG8gZm9yY2UgaXQgdG8gZGl2ZXJnZSBmcm9tIGF0dHJpYnV0ZXMuIEhvd2V2ZXIsIGZvclxuICAgICAgLy8gb3B0aW9uIGFuZCBzZWxlY3Qgd2UgZG9uJ3QgcXVpdGUgZG8gdGhlIHNhbWUgdGhpbmcgYW5kIHNlbGVjdFxuICAgICAgLy8gaXMgbm90IHJlc2lsaWVudCB0byB0aGUgRE9NIHN0YXRlIGNoYW5naW5nIHNvIHdlIGRvbid0IGRvIHRoYXQgaGVyZS5cbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIG5vdCBkb2luZyB0aGlzIGZvciBpbnB1dCBhbmQgdGV4dGFyZWEuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIHJhd1Byb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG59XG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRUZXh0KHRleHROb2RlLCB0ZXh0KSB7XG4gIHZhciBpc0RpZmZlcmVudCA9IHRleHROb2RlLm5vZGVWYWx1ZSAhPT0gdGV4dDtcbiAgcmV0dXJuIGlzRGlmZmVyZW50O1xufVxuZnVuY3Rpb24gd2FybkZvclVubWF0Y2hlZFRleHQodGV4dE5vZGUsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSh0ZXh0Tm9kZS5ub2RlVmFsdWUsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudE5vZGUsIGNoaWxkKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIDwlcz4gaW4gPCVzPi4nLCBjaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudE5vZGUsIGNoaWxkKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiB0aGUgdGV4dCBub2RlIFwiJXNcIiBpbiA8JXM+LicsIGNoaWxkLm5vZGVWYWx1ZSwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudE5vZGUsIHRhZywgcHJvcHMpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgPCVzPiBpbiA8JXM+LicsIHRhZywgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudE5vZGUsIHRleHQpIHtcbiAge1xuICAgIGlmICh0ZXh0ID09PSAnJykge1xuICAgICAgLy8gV2UgZXhwZWN0IHRvIGluc2VydCBlbXB0eSB0ZXh0IG5vZGVzIHNpbmNlIHRoZXkncmUgbm90IHJlcHJlc2VudGVkIGluXG4gICAgICAvLyB0aGUgSFRNTC5cbiAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIHNwZWNpYWwgY2FzZSBpZiB3ZSBjYW4ganVzdCBhdm9pZCBpbnNlcnRpbmcgZW1wdHlcbiAgICAgIC8vIHRleHQgbm9kZXMuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0V4cGVjdGVkIHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSBtYXRjaGluZyB0ZXh0IG5vZGUgZm9yIFwiJXNcIiBpbiA8JXM+LicsIHRleHQsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMyhkb21FbGVtZW50LCB0YWcsIHByb3BzKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZShkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDIoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMShkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG4gIH1cbn1cblxudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgdXBkYXRlZEFuY2VzdG9ySW5mbyA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIC8vIFRoaXMgdmFsaWRhdGlvbiBjb2RlIHdhcyB3cml0dGVuIGJhc2VkIG9uIHRoZSBIVE1MNSBwYXJzaW5nIHNwZWM6XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLXNjb3BlXG4gIC8vXG4gIC8vIE5vdGU6IHRoaXMgZG9lcyBub3QgY2F0Y2ggYWxsIGludmFsaWQgbmVzdGluZywgbm9yIGRvZXMgaXQgdHJ5IHRvIChhcyBpdCdzXG4gIC8vIG5vdCBjbGVhciB3aGF0IHByYWN0aWNhbCBiZW5lZml0IGRvaW5nIHNvIHByb3ZpZGVzKTsgaW5zdGVhZCwgd2Ugd2FybiBvbmx5XG4gIC8vIGZvciBjYXNlcyB3aGVyZSB0aGUgcGFyc2VyIHdpbGwgZ2l2ZSBhIHBhcnNlIHRyZWUgZGlmZmVyaW5nIGZyb20gd2hhdCBSZWFjdFxuICAvLyBpbnRlbmRlZC4gRm9yIGV4YW1wbGUsIDxiPjxkaXY+PC9kaXY+PC9iPiBpcyBpbnZhbGlkIGJ1dCB3ZSBkb24ndCB3YXJuXG4gIC8vIGJlY2F1c2UgaXQgc3RpbGwgcGFyc2VzIGNvcnJlY3RseTsgd2UgZG8gd2FybiBmb3Igb3RoZXIgY2FzZXMgbGlrZSBuZXN0ZWRcbiAgLy8gPHA+IHRhZ3Mgd2hlcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgaW1wbGljaXRseSBjbG9zZXMgdGhlXG4gIC8vIGZpcnN0LCBjYXVzaW5nIGEgY29uZnVzaW5nIG1lc3MuXG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3NwZWNpYWxcbiAgdmFyIHNwZWNpYWxUYWdzID0gWydhZGRyZXNzJywgJ2FwcGxldCcsICdhcmVhJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnYmFzZScsICdiYXNlZm9udCcsICdiZ3NvdW5kJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdidXR0b24nLCAnY2FwdGlvbicsICdjZW50ZXInLCAnY29sJywgJ2NvbGdyb3VwJywgJ2RkJywgJ2RldGFpbHMnLCAnZGlyJywgJ2RpdicsICdkbCcsICdkdCcsICdlbWJlZCcsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsICdmcmFtZScsICdmcmFtZXNldCcsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsICdpZnJhbWUnLCAnaW1nJywgJ2lucHV0JywgJ2lzaW5kZXgnLCAnbGknLCAnbGluaycsICdsaXN0aW5nJywgJ21haW4nLCAnbWFycXVlZScsICdtZW51JywgJ21lbnVpdGVtJywgJ21ldGEnLCAnbmF2JywgJ25vZW1iZWQnLCAnbm9mcmFtZXMnLCAnbm9zY3JpcHQnLCAnb2JqZWN0JywgJ29sJywgJ3AnLCAncGFyYW0nLCAncGxhaW50ZXh0JywgJ3ByZScsICdzY3JpcHQnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc291cmNlJywgJ3N0eWxlJywgJ3N1bW1hcnknLCAndGFibGUnLCAndGJvZHknLCAndGQnLCAndGVtcGxhdGUnLCAndGV4dGFyZWEnLCAndGZvb3QnLCAndGgnLCAndGhlYWQnLCAndGl0bGUnLCAndHInLCAndHJhY2snLCAndWwnLCAnd2JyJywgJ3htcCddOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1zY29wZVxuXG4gIHZhciBpblNjb3BlVGFncyA9IFsnYXBwbGV0JywgJ2NhcHRpb24nLCAnaHRtbCcsICd0YWJsZScsICd0ZCcsICd0aCcsICdtYXJxdWVlJywgJ29iamVjdCcsICd0ZW1wbGF0ZScsIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2h0bWwtaW50ZWdyYXRpb24tcG9pbnRcbiAgLy8gVE9ETzogRGlzdGluZ3Vpc2ggYnkgbmFtZXNwYWNlIGhlcmUgLS0gZm9yIDx0aXRsZT4sIGluY2x1ZGluZyBpdCBoZXJlXG4gIC8vIGVycnMgb24gdGhlIHNpZGUgb2YgZmV3ZXIgd2FybmluZ3NcbiAgJ2ZvcmVpZ25PYmplY3QnLCAnZGVzYycsICd0aXRsZSddOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1idXR0b24tc2NvcGVcblxuICB2YXIgYnV0dG9uU2NvcGVUYWdzID0gaW5TY29wZVRhZ3MuY29uY2F0KFsnYnV0dG9uJ10pOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNnZW5lcmF0ZS1pbXBsaWVkLWVuZC10YWdzXG5cbiAgdmFyIGltcGxpZWRFbmRUYWdzID0gWydkZCcsICdkdCcsICdsaScsICdvcHRpb24nLCAnb3B0Z3JvdXAnLCAncCcsICdycCcsICdydCddO1xuICB2YXIgZW1wdHlBbmNlc3RvckluZm8gPSB7XG4gICAgY3VycmVudDogbnVsbCxcbiAgICBmb3JtVGFnOiBudWxsLFxuICAgIGFUYWdJblNjb3BlOiBudWxsLFxuICAgIGJ1dHRvblRhZ0luU2NvcGU6IG51bGwsXG4gICAgbm9iclRhZ0luU2NvcGU6IG51bGwsXG4gICAgcFRhZ0luQnV0dG9uU2NvcGU6IG51bGwsXG4gICAgbGlzdEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbCxcbiAgICBkbEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbFxuICB9O1xuXG4gIHVwZGF0ZWRBbmNlc3RvckluZm8gPSBmdW5jdGlvbiAob2xkSW5mbywgdGFnKSB7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IF9hc3NpZ24oe30sIG9sZEluZm8gfHwgZW1wdHlBbmNlc3RvckluZm8pO1xuXG4gICAgdmFyIGluZm8gPSB7XG4gICAgICB0YWc6IHRhZ1xuICAgIH07XG5cbiAgICBpZiAoaW5TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGJ1dHRvblNjb3BlVGFncy5pbmRleE9mKHRhZykgIT09IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBudWxsO1xuICAgIH0gLy8gU2VlIHJ1bGVzIGZvciAnbGknLCAnZGQnLCAnZHQnIHN0YXJ0IHRhZ3MgaW5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5XG5cblxuICAgIGlmIChzcGVjaWFsVGFncy5pbmRleE9mKHRhZykgIT09IC0xICYmIHRhZyAhPT0gJ2FkZHJlc3MnICYmIHRhZyAhPT0gJ2RpdicgJiYgdGFnICE9PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgfVxuXG4gICAgYW5jZXN0b3JJbmZvLmN1cnJlbnQgPSBpbmZvO1xuXG4gICAgaWYgKHRhZyA9PT0gJ2Zvcm0nKSB7XG4gICAgICBhbmNlc3RvckluZm8uZm9ybVRhZyA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2EnKSB7XG4gICAgICBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdidXR0b24nKSB7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ25vYnInKSB7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdwJykge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnbGknKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2RkJyB8fCB0YWcgPT09ICdkdCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9ySW5mbztcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxuICAgKi9cblxuXG4gIHZhciBpc1RhZ1ZhbGlkV2l0aFBhcmVudCA9IGZ1bmN0aW9uICh0YWcsIHBhcmVudFRhZykge1xuICAgIC8vIEZpcnN0LCBsZXQncyBjaGVjayBpZiB3ZSdyZSBpbiBhbiB1bnVzdWFsIHBhcnNpbmcgbW9kZS4uLlxuICAgIHN3aXRjaCAocGFyZW50VGFnKSB7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5zZWxlY3RcbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdvcHRpb24nIHx8IHRhZyA9PT0gJ29wdGdyb3VwJyB8fCB0YWcgPT09ICcjdGV4dCc7XG5cbiAgICAgIGNhc2UgJ29wdGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gU3RyaWN0bHkgc3BlYWtpbmcsIHNlZWluZyBhbiA8b3B0aW9uPiBkb2Vzbid0IG1lYW4gd2UncmUgaW4gYSA8c2VsZWN0PlxuICAgICAgLy8gYnV0XG5cbiAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICcjdGV4dCc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50ZFxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY2FwdGlvblxuICAgICAgLy8gTm8gc3BlY2lhbCBiZWhhdmlvciBzaW5jZSB0aGVzZSBydWxlcyBmYWxsIGJhY2sgdG8gXCJpbiBib2R5XCIgbW9kZSBmb3JcbiAgICAgIC8vIGFsbCBleGNlcHQgc3BlY2lhbCB0YWJsZSBub2RlcyB3aGljaCBjYXVzZSBiYWQgcGFyc2luZyBiZWhhdmlvciBhbnl3YXkuXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50clxuXG4gICAgICBjYXNlICd0cic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0aCcgfHwgdGFnID09PSAndGQnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRib2R5XG5cbiAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ3RyJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5jb2xncm91cFxuXG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjb2wnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRhYmxlXG5cbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2NhcHRpb24nIHx8IHRhZyA9PT0gJ2NvbGdyb3VwJyB8fCB0YWcgPT09ICd0Ym9keScgfHwgdGFnID09PSAndGZvb3QnIHx8IHRhZyA9PT0gJ3RoZWFkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5oZWFkXG5cbiAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnYmFzZScgfHwgdGFnID09PSAnYmFzZWZvbnQnIHx8IHRhZyA9PT0gJ2Jnc291bmQnIHx8IHRhZyA9PT0gJ2xpbmsnIHx8IHRhZyA9PT0gJ21ldGEnIHx8IHRhZyA9PT0gJ3RpdGxlJyB8fCB0YWcgPT09ICdub3NjcmlwdCcgfHwgdGFnID09PSAnbm9mcmFtZXMnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlbWFudGljcy5odG1sI3RoZS1odG1sLWVsZW1lbnRcblxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdoZWFkJyB8fCB0YWcgPT09ICdib2R5JyB8fCB0YWcgPT09ICdmcmFtZXNldCc7XG5cbiAgICAgIGNhc2UgJ2ZyYW1lc2V0JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2ZyYW1lJztcblxuICAgICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2h0bWwnO1xuICAgIH0gLy8gUHJvYmFibHkgaW4gdGhlIFwiaW4gYm9keVwiIHBhcnNpbmcgbW9kZSwgc28gd2Ugb3V0bGF3IG9ubHkgdGFnIGNvbWJvc1xuICAgIC8vIHdoZXJlIHRoZSBwYXJzaW5nIHJ1bGVzIGNhdXNlIGltcGxpY2l0IG9wZW5zIG9yIGNsb3NlcyB0byBiZSBhZGRlZC5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5XG5cblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgIT09ICdoMScgJiYgcGFyZW50VGFnICE9PSAnaDInICYmIHBhcmVudFRhZyAhPT0gJ2gzJyAmJiBwYXJlbnRUYWcgIT09ICdoNCcgJiYgcGFyZW50VGFnICE9PSAnaDUnICYmIHBhcmVudFRhZyAhPT0gJ2g2JztcblxuICAgICAgY2FzZSAncnAnOlxuICAgICAgY2FzZSAncnQnOlxuICAgICAgICByZXR1cm4gaW1wbGllZEVuZFRhZ3MuaW5kZXhPZihwYXJlbnRUYWcpID09PSAtMTtcblxuICAgICAgY2FzZSAnYm9keSc6XG4gICAgICBjYXNlICdjYXB0aW9uJzpcbiAgICAgIGNhc2UgJ2NvbCc6XG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICBjYXNlICdmcmFtZXNldCc6XG4gICAgICBjYXNlICdmcmFtZSc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgY2FzZSAndGQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgY2FzZSAndGgnOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndHInOlxuICAgICAgICAvLyBUaGVzZSB0YWdzIGFyZSBvbmx5IHZhbGlkIHdpdGggYSBmZXcgcGFyZW50cyB0aGF0IGhhdmUgc3BlY2lhbCBjaGlsZFxuICAgICAgICAvLyBwYXJzaW5nIHJ1bGVzIC0tIGlmIHdlJ3JlIGRvd24gaGVyZSwgdGhlbiBub25lIG9mIHRob3NlIG1hdGNoZWQgYW5kXG4gICAgICAgIC8vIHNvIHdlIGFsbG93IGl0IG9ubHkgaWYgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBwYXJlbnQgaXMsIGFzIGFsbCBvdGhlclxuICAgICAgICAvLyBjYXNlcyBhcmUgaW52YWxpZC5cbiAgICAgICAgcmV0dXJuIHBhcmVudFRhZyA9PSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuXG5cbiAgdmFyIGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcgPSBmdW5jdGlvbiAodGFnLCBhbmNlc3RvckluZm8pIHtcbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdhcnRpY2xlJzpcbiAgICAgIGNhc2UgJ2FzaWRlJzpcbiAgICAgIGNhc2UgJ2Jsb2NrcXVvdGUnOlxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGNhc2UgJ2Rpcic6XG4gICAgICBjYXNlICdkaXYnOlxuICAgICAgY2FzZSAnZGwnOlxuICAgICAgY2FzZSAnZmllbGRzZXQnOlxuICAgICAgY2FzZSAnZmlnY2FwdGlvbic6XG4gICAgICBjYXNlICdmaWd1cmUnOlxuICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgIGNhc2UgJ2hlYWRlcic6XG4gICAgICBjYXNlICdoZ3JvdXAnOlxuICAgICAgY2FzZSAnbWFpbic6XG4gICAgICBjYXNlICdtZW51JzpcbiAgICAgIGNhc2UgJ25hdic6XG4gICAgICBjYXNlICdvbCc6XG4gICAgICBjYXNlICdwJzpcbiAgICAgIGNhc2UgJ3NlY3Rpb24nOlxuICAgICAgY2FzZSAnc3VtbWFyeSc6XG4gICAgICBjYXNlICd1bCc6XG4gICAgICBjYXNlICdwcmUnOlxuICAgICAgY2FzZSAnbGlzdGluZyc6XG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICBjYXNlICdocic6XG4gICAgICBjYXNlICd4bXAnOlxuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAgY2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuXG4gICAgICBjYXNlICdmb3JtJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5mb3JtVGFnIHx8IGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcblxuICAgICAgY2FzZSAnbGknOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc7XG5cbiAgICAgIGNhc2UgJ2RkJzpcbiAgICAgIGNhc2UgJ2R0JzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgICAgY2FzZSAnYnV0dG9uJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlO1xuXG4gICAgICBjYXNlICdhJzpcbiAgICAgICAgLy8gU3BlYyBzYXlzIHNvbWV0aGluZyBhYm91dCBzdG9yaW5nIGEgbGlzdCBvZiBtYXJrZXJzLCBidXQgaXQgc291bmRzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhpcyBjaGVjay5cbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZTtcblxuICAgICAgY2FzZSAnbm9icic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgdmFyIGRpZFdhcm4kMSA9IHt9O1xuXG4gIHZhbGlkYXRlRE9NTmVzdGluZyA9IGZ1bmN0aW9uIChjaGlsZFRhZywgY2hpbGRUZXh0LCBhbmNlc3RvckluZm8pIHtcbiAgICBhbmNlc3RvckluZm8gPSBhbmNlc3RvckluZm8gfHwgZW1wdHlBbmNlc3RvckluZm87XG4gICAgdmFyIHBhcmVudEluZm8gPSBhbmNlc3RvckluZm8uY3VycmVudDtcbiAgICB2YXIgcGFyZW50VGFnID0gcGFyZW50SW5mbyAmJiBwYXJlbnRJbmZvLnRhZztcblxuICAgIGlmIChjaGlsZFRleHQgIT0gbnVsbCkge1xuICAgICAgaWYgKGNoaWxkVGFnICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZzogd2hlbiBjaGlsZFRleHQgaXMgcGFzc2VkLCBjaGlsZFRhZyBzaG91bGQgYmUgbnVsbCcpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZFRhZyA9ICcjdGV4dCc7XG4gICAgfVxuXG4gICAgdmFyIGludmFsaWRQYXJlbnQgPSBpc1RhZ1ZhbGlkV2l0aFBhcmVudChjaGlsZFRhZywgcGFyZW50VGFnKSA/IG51bGwgOiBwYXJlbnRJbmZvO1xuICAgIHZhciBpbnZhbGlkQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50ID8gbnVsbCA6IGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbyk7XG4gICAgdmFyIGludmFsaWRQYXJlbnRPckFuY2VzdG9yID0gaW52YWxpZFBhcmVudCB8fCBpbnZhbGlkQW5jZXN0b3I7XG5cbiAgICBpZiAoIWludmFsaWRQYXJlbnRPckFuY2VzdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFuY2VzdG9yVGFnID0gaW52YWxpZFBhcmVudE9yQW5jZXN0b3IudGFnO1xuICAgIHZhciB3YXJuS2V5ID0gISFpbnZhbGlkUGFyZW50ICsgJ3wnICsgY2hpbGRUYWcgKyAnfCcgKyBhbmNlc3RvclRhZztcblxuICAgIGlmIChkaWRXYXJuJDFbd2FybktleV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuJDFbd2FybktleV0gPSB0cnVlO1xuICAgIHZhciB0YWdEaXNwbGF5TmFtZSA9IGNoaWxkVGFnO1xuICAgIHZhciB3aGl0ZXNwYWNlSW5mbyA9ICcnO1xuXG4gICAgaWYgKGNoaWxkVGFnID09PSAnI3RleHQnKSB7XG4gICAgICBpZiAoL1xcUy8udGVzdChjaGlsZFRleHQpKSB7XG4gICAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJ1RleHQgbm9kZXMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnV2hpdGVzcGFjZSB0ZXh0IG5vZGVzJztcbiAgICAgICAgd2hpdGVzcGFjZUluZm8gPSBcIiBNYWtlIHN1cmUgeW91IGRvbid0IGhhdmUgYW55IGV4dHJhIHdoaXRlc3BhY2UgYmV0d2VlbiB0YWdzIG9uIFwiICsgJ2VhY2ggbGluZSBvZiB5b3VyIHNvdXJjZSBjb2RlLic7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJzwnICsgY2hpbGRUYWcgKyAnPic7XG4gICAgfVxuXG4gICAgaWYgKGludmFsaWRQYXJlbnQpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgIGlmIChhbmNlc3RvclRhZyA9PT0gJ3RhYmxlJyAmJiBjaGlsZFRhZyA9PT0gJ3RyJykge1xuICAgICAgICBpbmZvICs9ICcgQWRkIGEgPHRib2R5PiwgPHRoZWFkPiBvciA8dGZvb3Q+IHRvIHlvdXIgY29kZSB0byBtYXRjaCB0aGUgRE9NIHRyZWUgZ2VuZXJhdGVkIGJ5ICcgKyAndGhlIGJyb3dzZXIuJztcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZyguLi4pOiAlcyBjYW5ub3QgYXBwZWFyIGFzIGEgY2hpbGQgb2YgPCVzPi4lcyVzJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnLCB3aGl0ZXNwYWNlSW5mbywgaW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90IGFwcGVhciBhcyBhIGRlc2NlbmRhbnQgb2YgJyArICc8JXM+LicsIHRhZ0Rpc3BsYXlOYW1lLCBhbmNlc3RvclRhZyk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMTtcblxue1xuICBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG59XG5cbnZhciBTVVNQRU5TRV9TVEFSVF9EQVRBID0gJyQnO1xudmFyIFNVU1BFTlNFX0VORF9EQVRBID0gJy8kJztcbnZhciBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgPSAnJD8nO1xudmFyIFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgPSAnJCEnO1xudmFyIFNUWUxFJDEgPSAnc3R5bGUnO1xudmFyIGV2ZW50c0VuYWJsZWQgPSBudWxsO1xudmFyIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbDtcblxuZnVuY3Rpb24gc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdidXR0b24nOlxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHJldHVybiAhIXByb3BzLmF1dG9Gb2N1cztcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFJvb3RIb3N0Q29udGV4dChyb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAgdmFyIHR5cGU7XG4gIHZhciBuYW1lc3BhY2U7XG4gIHZhciBub2RlVHlwZSA9IHJvb3RDb250YWluZXJJbnN0YW5jZS5ub2RlVHlwZTtcblxuICBzd2l0Y2ggKG5vZGVUeXBlKSB7XG4gICAgY2FzZSBET0NVTUVOVF9OT0RFOlxuICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpcbiAgICAgIHtcbiAgICAgICAgdHlwZSA9IG5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gJyNkb2N1bWVudCcgOiAnI2ZyYWdtZW50JztcbiAgICAgICAgdmFyIHJvb3QgPSByb290Q29udGFpbmVySW5zdGFuY2UuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBuYW1lc3BhY2UgPSByb290ID8gcm9vdC5uYW1lc3BhY2VVUkkgOiBnZXRDaGlsZE5hbWVzcGFjZShudWxsLCAnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGVUeXBlID09PSBDT01NRU5UX05PREUgPyByb290Q29udGFpbmVySW5zdGFuY2UucGFyZW50Tm9kZSA6IHJvb3RDb250YWluZXJJbnN0YW5jZTtcbiAgICAgICAgdmFyIG93bk5hbWVzcGFjZSA9IGNvbnRhaW5lci5uYW1lc3BhY2VVUkkgfHwgbnVsbDtcbiAgICAgICAgdHlwZSA9IGNvbnRhaW5lci50YWdOYW1lO1xuICAgICAgICBuYW1lc3BhY2UgPSBnZXRDaGlsZE5hbWVzcGFjZShvd25OYW1lc3BhY2UsIHR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgdmFsaWRhdGVkVGFnID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBhbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKG51bGwsIHZhbGlkYXRlZFRhZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgYW5jZXN0b3JJbmZvOiBhbmNlc3RvckluZm9cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXRDaGlsZEhvc3RDb250ZXh0KHBhcmVudEhvc3RDb250ZXh0LCB0eXBlLCByb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAge1xuICAgIHZhciBwYXJlbnRIb3N0Q29udGV4dERldiA9IHBhcmVudEhvc3RDb250ZXh0O1xuICAgIHZhciBuYW1lc3BhY2UgPSBnZXRDaGlsZE5hbWVzcGFjZShwYXJlbnRIb3N0Q29udGV4dERldi5uYW1lc3BhY2UsIHR5cGUpO1xuICAgIHZhciBhbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKHBhcmVudEhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgYW5jZXN0b3JJbmZvOiBhbmNlc3RvckluZm9cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBwcmVwYXJlRm9yQ29tbWl0KGNvbnRhaW5lckluZm8pIHtcbiAgZXZlbnRzRW5hYmxlZCA9IGlzRW5hYmxlZCgpO1xuICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IGdldFNlbGVjdGlvbkluZm9ybWF0aW9uKCk7XG4gIHZhciBhY3RpdmVJbnN0YW5jZSA9IG51bGw7XG5cbiAgc2V0RW5hYmxlZChmYWxzZSk7XG4gIHJldHVybiBhY3RpdmVJbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIHJlc2V0QWZ0ZXJDb21taXQoY29udGFpbmVySW5mbykge1xuICByZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbkluZm9ybWF0aW9uKTtcbiAgc2V0RW5hYmxlZChldmVudHNFbmFibGVkKTtcbiAgZXZlbnRzRW5hYmxlZCA9IG51bGw7XG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHZhciBwYXJlbnROYW1lc3BhY2U7XG5cbiAge1xuICAgIC8vIFRPRE86IHRha2UgbmFtZXNwYWNlIGludG8gYWNjb3VudCB3aGVuIHZhbGlkYXRpbmcuXG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgdmFsaWRhdGVET01OZXN0aW5nKHR5cGUsIG51bGwsIGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbyk7XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBwcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cblxuICAgIHBhcmVudE5hbWVzcGFjZSA9IGhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZTtcbiAgfVxuXG4gIHZhciBkb21FbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBwYXJlbnROYW1lc3BhY2UpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBkb21FbGVtZW50KTtcbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBwcm9wcyk7XG4gIHJldHVybiBkb21FbGVtZW50O1xufVxuZnVuY3Rpb24gYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiBmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbihkb21FbGVtZW50LCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuICBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgcmV0dXJuIHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgcHJvcHMpO1xufVxuZnVuY3Rpb24gcHJlcGFyZVVwZGF0ZShkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuXG4gICAgaWYgKHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiAhPT0gdHlwZW9mIG9sZFByb3BzLmNoaWxkcmVuICYmICh0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaWZmUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xufVxuZnVuY3Rpb24gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJvcHMpIHtcbiAgcmV0dXJuIHR5cGUgPT09ICd0ZXh0YXJlYScgfHwgdHlwZSA9PT0gJ29wdGlvbicgfHwgdHlwZSA9PT0gJ25vc2NyaXB0JyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHRJbnN0YW5jZSh0ZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgdGV4dCwgaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvKTtcbiAgfVxuXG4gIHZhciB0ZXh0Tm9kZSA9IGNyZWF0ZVRleHROb2RlKHRleHQsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHRleHROb2RlKTtcbiAgcmV0dXJuIHRleHROb2RlO1xufVxuLy8gaWYgYSBjb21wb25lbnQganVzdCBpbXBvcnRzIFJlYWN0RE9NIChlLmcuIGZvciBmaW5kRE9NTm9kZSkuXG4vLyBTb21lIGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBzZXRUaW1lb3V0IG9yIGNsZWFyVGltZW91dC5cblxudmFyIHNjaGVkdWxlVGltZW91dCA9IHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gc2V0VGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBjYW5jZWxUaW1lb3V0ID0gdHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IGNsZWFyVGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBub1RpbWVvdXQgPSAtMTsgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY29tbWl0TW91bnQoZG9tRWxlbWVudCwgdHlwZSwgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gRGVzcGl0ZSB0aGUgbmFtaW5nIHRoYXQgbWlnaHQgaW1wbHkgb3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCBvbmx5XG4gIC8vIGZpcmVzIGlmIHRoZXJlIGlzIGFuIGBVcGRhdGVgIGVmZmVjdCBzY2hlZHVsZWQgZHVyaW5nIG1vdW50aW5nLlxuICAvLyBUaGlzIGhhcHBlbnMgaWYgYGZpbmFsaXplSW5pdGlhbENoaWxkcmVuYCByZXR1cm5zIGB0cnVlYCAod2hpY2ggaXRcbiAgLy8gZG9lcyB0byBpbXBsZW1lbnQgdGhlIGBhdXRvRm9jdXNgIGF0dHJpYnV0ZSBvbiB0aGUgY2xpZW50KS4gQnV0XG4gIC8vIHRoZXJlIGFyZSBhbHNvIG90aGVyIGNhc2VzIHdoZW4gdGhpcyBtaWdodCBoYXBwZW4gKHN1Y2ggYXMgcGF0Y2hpbmdcbiAgLy8gdXAgdGV4dCBjb250ZW50IGR1cmluZyBoeWRyYXRpb24gbWlzbWF0Y2gpLiBTbyB3ZSdsbCBjaGVjayB0aGlzIGFnYWluLlxuICBpZiAoc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBuZXdQcm9wcykpIHtcbiAgICBkb21FbGVtZW50LmZvY3VzKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZShkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gVXBkYXRlIHRoZSBwcm9wcyBoYW5kbGUgc28gdGhhdCB3ZSBrbm93IHdoaWNoIHByb3BzIGFyZSB0aGUgb25lcyB3aXRoXG4gIC8vIHdpdGggY3VycmVudCBldmVudCBoYW5kbGVycy5cbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBuZXdQcm9wcyk7IC8vIEFwcGx5IHRoZSBkaWZmIHRvIHRoZSBET00gbm9kZS5cblxuICB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG59XG5mdW5jdGlvbiByZXNldFRleHRDb250ZW50KGRvbUVsZW1lbnQpIHtcbiAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycpO1xufVxuZnVuY3Rpb24gY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IG5ld1RleHQ7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIHZhciBwYXJlbnROb2RlO1xuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIHBhcmVudE5vZGUgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgY29udGFpbmVyKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJlbnROb2RlID0gY29udGFpbmVyO1xuICAgIHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICB9IC8vIFRoaXMgY29udGFpbmVyIG1pZ2h0IGJlIHVzZWQgZm9yIGEgcG9ydGFsLlxuICAvLyBJZiBzb21ldGhpbmcgaW5zaWRlIGEgcG9ydGFsIGlzIGNsaWNrZWQsIHRoYXQgY2xpY2sgc2hvdWxkIGJ1YmJsZVxuICAvLyB0aHJvdWdoIHRoZSBSZWFjdCB0cmVlLiBIb3dldmVyLCBvbiBNb2JpbGUgU2FmYXJpIHRoZSBjbGljayB3b3VsZFxuICAvLyBuZXZlciBidWJibGUgdGhyb3VnaCB0aGUgKkRPTSogdHJlZSB1bmxlc3MgYW4gYW5jZXN0b3Igd2l0aCBvbmNsaWNrXG4gIC8vIGV2ZW50IGV4aXN0cy4gU28gd2Ugd291bGRuJ3Qgc2VlIGl0IGFuZCBkaXNwYXRjaCBpdC5cbiAgLy8gVGhpcyBpcyB3aHkgd2UgZW5zdXJlIHRoYXQgbm9uIFJlYWN0IHJvb3QgY29udGFpbmVycyBoYXZlIGlubGluZSBvbmNsaWNrXG4gIC8vIGRlZmluZWQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE5MThcblxuXG4gIHZhciByZWFjdFJvb3RDb250YWluZXIgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcblxuICBpZiAoKHJlYWN0Um9vdENvbnRhaW5lciA9PT0gbnVsbCB8fCByZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZCkgJiYgcGFyZW50Tm9kZS5vbmNsaWNrID09PSBudWxsKSB7XG4gICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChwYXJlbnROb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHBhcmVudEluc3RhbmNlLCBjaGlsZCwgYmVmb3JlQ2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG59XG5mdW5jdGlvbiBpbnNlcnRJbkNvbnRhaW5lckJlZm9yZShjb250YWluZXIsIGNoaWxkLCBiZWZvcmVDaGlsZCkge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBjb250YWluZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9XG59XG5mdW5jdGlvbiBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgLy8gVE9ETzogRG9lcyB0aGlzIHdvcmsgZm9yIGFsbCBlbGVtZW50IHR5cGVzPyBXaGF0IGFib3V0IE1hdGhNTD8gU2hvdWxkIHdlXG4gIC8vIHBhc3MgaG9zdCBjb250ZXh0IHRvIHRoaXMgbWV0aG9kP1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGUgPSBpbnN0YW5jZS5zdHlsZTtcblxuICBpZiAodHlwZW9mIHN0eWxlLnNldFByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCAnbm9uZScsICdpbXBvcnRhbnQnKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG59XG5mdW5jdGlvbiBoaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gJyc7XG59XG5mdW5jdGlvbiB1bmhpZGVJbnN0YW5jZShpbnN0YW5jZSwgcHJvcHMpIHtcbiAgaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgdmFyIHN0eWxlUHJvcCA9IHByb3BzW1NUWUxFJDFdO1xuICB2YXIgZGlzcGxheSA9IHN0eWxlUHJvcCAhPT0gdW5kZWZpbmVkICYmIHN0eWxlUHJvcCAhPT0gbnVsbCAmJiBzdHlsZVByb3AuaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSA/IHN0eWxlUHJvcC5kaXNwbGF5IDogbnVsbDtcbiAgaW5zdGFuY2Uuc3R5bGUuZGlzcGxheSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoJ2Rpc3BsYXknLCBkaXNwbGF5KTtcbn1cbmZ1bmN0aW9uIHVuaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IHRleHQ7XG59XG5mdW5jdGlvbiBjbGVhckNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnRleHRDb250ZW50ID0gJyc7XG4gIH0gZWxzZSBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgdmFyIGJvZHkgPSBjb250YWluZXIuYm9keTtcblxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGJvZHkudGV4dENvbnRlbnQgPSAnJztcbiAgICB9XG4gIH1cbn0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY2FuSHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcykge1xuICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgIT09IEVMRU1FTlRfTk9ERSB8fCB0eXBlLnRvTG93ZXJDYXNlKCkgIT09IGluc3RhbmNlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBUaGlzIGhhcyBub3cgYmVlbiByZWZpbmVkIHRvIGFuIGVsZW1lbnQgbm9kZS5cblxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UoaW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKHRleHQgPT09ICcnIHx8IGluc3RhbmNlLm5vZGVUeXBlICE9PSBURVhUX05PREUpIHtcbiAgICAvLyBFbXB0eSBzdHJpbmdzIGFyZSBub3QgcGFyc2VkIGJ5IEhUTUwgc28gdGhlcmUgd29uJ3QgYmUgYSBjb3JyZWN0IG1hdGNoIGhlcmUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gVGhpcyBoYXMgbm93IGJlZW4gcmVmaW5lZCB0byBhIHRleHQgbm9kZS5cblxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZShub2RlKSB7XG4gIC8vIFNraXAgbm9uLWh5ZHJhdGFibGUgbm9kZXMuXG4gIGZvciAoOyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgdmFyIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZTtcblxuICAgIGlmIChub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKGluc3RhbmNlLm5leHRTaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKHBhcmVudEluc3RhbmNlKSB7XG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShwYXJlbnRJbnN0YW5jZS5maXJzdENoaWxkKTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgaW5zdGFuY2UpOyAvLyBUT0RPOiBQb3NzaWJseSBkZWZlciB0aGlzIHVudGlsIHRoZSBjb21taXQgcGhhc2Ugd2hlcmUgYWxsIHRoZSBldmVudHNcbiAgLy8gZ2V0IGF0dGFjaGVkLlxuXG4gIHVwZGF0ZUZpYmVyUHJvcHMoaW5zdGFuY2UsIHByb3BzKTtcbiAgdmFyIHBhcmVudE5hbWVzcGFjZTtcblxuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgcGFyZW50TmFtZXNwYWNlID0gaG9zdENvbnRleHREZXYubmFtZXNwYWNlO1xuICB9XG5cbiAgcmV0dXJuIGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCBwYXJlbnROYW1lc3BhY2UpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgdGV4dEluc3RhbmNlKTtcbiAgcmV0dXJuIGRpZmZIeWRyYXRlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbn1cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSkge1xuICB2YXIgbm9kZSA9IHN1c3BlbnNlSW5zdGFuY2UubmV4dFNpYmxpbmc7IC8vIFNraXAgcGFzdCBhbGwgbm9kZXMgd2l0aGluIHRoaXMgc3VzcGVuc2UgYm91bmRhcnkuXG4gIC8vIFRoZXJlIG1pZ2h0IGJlIG5lc3RlZCBub2RlcyBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaG93XG4gIC8vIGRlZXAgd2UgYXJlIGFuZCBvbmx5IGJyZWFrIG91dCB3aGVuIHdlJ3JlIGJhY2sgb24gdG9wLlxuXG4gIHZhciBkZXB0aCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gIH0gLy8gVE9ETzogV2Fybiwgd2UgZGlkbid0IGZpbmQgdGhlIGVuZCBjb21tZW50IGJvdW5kYXJ5LlxuXG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIFJldHVybnMgdGhlIFN1c3BlbnNlSW5zdGFuY2UgaWYgdGhpcyBub2RlIGlzIGEgZGlyZWN0IGNoaWxkIG9mIGFcbi8vIFN1c3BlbnNlSW5zdGFuY2UuIEkuZS4gaWYgaXRzIHByZXZpb3VzIHNpYmxpbmcgaXMgYSBDb21tZW50IHdpdGhcbi8vIFNVU1BFTlNFX3hfU1RBUlRfREFUQS4gT3RoZXJ3aXNlLCBudWxsLlxuXG5mdW5jdGlvbiBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHRhcmdldEluc3RhbmNlKSB7XG4gIHZhciBub2RlID0gdGFyZ2V0SW5zdGFuY2UucHJldmlvdXNTaWJsaW5nOyAvLyBTa2lwIHBhc3QgYWxsIG5vZGVzIHdpdGhpbiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAvLyBUaGVyZSBtaWdodCBiZSBuZXN0ZWQgbm9kZXMgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvd1xuICAvLyBkZWVwIHdlIGFyZSBhbmQgb25seSBicmVhayBvdXQgd2hlbiB3ZSdyZSBiYWNrIG9uIHRvcC5cblxuICB2YXIgZGVwdGggPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGRhdGEgPSBub2RlLmRhdGE7XG5cbiAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICAvLyBSZXRyeSBpZiBhbnkgZXZlbnQgcmVwbGF5aW5nIHdhcyBibG9ja2VkIG9uIHRoaXMuXG4gIHJldHJ5SWZCbG9ja2VkT24oY29udGFpbmVyKTtcbn1cbmZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gIC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cbiAgcmV0cnlJZkJsb2NrZWRPbihzdXNwZW5zZUluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEh5ZHJhdGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKTtcbiAgICB9IGVsc2UgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIDsgZWxzZSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90SHlkcmF0ZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSA7IGVsc2Uge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50Q29udGFpbmVyLCB0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50Q29udGFpbmVyLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50SW5zdGFuY2UsIHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkgO1xufVxudmFyIGNsaWVudElkID0gMDtcbmZ1bmN0aW9uIG1ha2VDbGllbnRJZEluREVWKHdhcm5PbkFjY2Vzc0luREVWKSB7XG4gIHZhciBpZCA9ICdyOicgKyAoY2xpZW50SWQrKykudG9TdHJpbmcoMzYpO1xuICByZXR1cm4ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuT25BY2Nlc3NJbkRFVigpO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH0sXG4gICAgdmFsdWVPZjogZnVuY3Rpb24gKCkge1xuICAgICAgd2Fybk9uQWNjZXNzSW5ERVYoKTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBpc09wYXF1ZUh5ZHJhdGluZ09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfT1BBUVVFX0lEX1RZUEU7XG59XG5mdW5jdGlvbiBtYWtlT3BhcXVlSHlkcmF0aW5nT2JqZWN0KGF0dGVtcHRUb1JlYWRWYWx1ZSkge1xuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9PUEFRVUVfSURfVFlQRSxcbiAgICB0b1N0cmluZzogYXR0ZW1wdFRvUmVhZFZhbHVlLFxuICAgIHZhbHVlT2Y6IGF0dGVtcHRUb1JlYWRWYWx1ZVxuICB9O1xufVxuZnVuY3Rpb24gcHJlcGFyZVBvcnRhbE1vdW50KHBvcnRhbEluc3RhbmNlKSB7XG4gIHtcbiAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhwb3J0YWxJbnN0YW5jZSk7XG4gIH1cbn1cblxudmFyIHJhbmRvbUtleSA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xudmFyIGludGVybmFsSW5zdGFuY2VLZXkgPSAnX19yZWFjdEZpYmVyJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxQcm9wc0tleSA9ICdfX3JlYWN0UHJvcHMkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5ID0gJ19fcmVhY3RDb250YWluZXIkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXkgPSAnX19yZWFjdEV2ZW50cyQnICsgcmFuZG9tS2V5O1xuZnVuY3Rpb24gcHJlY2FjaGVGaWJlck5vZGUoaG9zdEluc3QsIG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGhvc3RJbnN0O1xufVxuZnVuY3Rpb24gbWFya0NvbnRhaW5lckFzUm9vdChob3N0Um9vdCwgbm9kZSkge1xuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gaG9zdFJvb3Q7XG59XG5mdW5jdGlvbiB1bm1hcmtDb250YWluZXJBc1Jvb3Qobm9kZSkge1xuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzQ29udGFpbmVyTWFya2VkQXNSb290KG5vZGUpIHtcbiAgcmV0dXJuICEhbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XTtcbn0gLy8gR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBjbG9zZXN0IEhvc3RDb21wb25lbnQgb3IgSG9zdFRleHQgZmliZXIgYW5jZXN0b3IuXG4vLyBJZiB0aGUgdGFyZ2V0IG5vZGUgaXMgcGFydCBvZiBhIGh5ZHJhdGVkIG9yIG5vdCB5ZXQgcmVuZGVyZWQgc3VidHJlZSwgdGhlblxuLy8gdGhpcyBtYXkgYWxzbyByZXR1cm4gYSBTdXNwZW5zZUNvbXBvbmVudCBvciBIb3N0Um9vdCB0byBpbmRpY2F0ZSB0aGF0LlxuLy8gQ29uY2VwdHVhbGx5IHRoZSBIb3N0Um9vdCBmaWJlciBpcyBhIGNoaWxkIG9mIHRoZSBDb250YWluZXIgbm9kZS4gU28gaWYgeW91XG4vLyBwYXNzIHRoZSBDb250YWluZXIgbm9kZSBhcyB0aGUgdGFyZ2V0Tm9kZSwgeW91IHdpbGwgbm90IGFjdHVhbGx5IGdldCB0aGVcbi8vIEhvc3RSb290IGJhY2suIFRvIGdldCB0byB0aGUgSG9zdFJvb3QsIHlvdSBuZWVkIHRvIHBhc3MgYSBjaGlsZCBvZiBpdC5cbi8vIFRoZSBzYW1lIHRoaW5nIGFwcGxpZXMgdG8gU3VzcGVuc2UgYm91bmRhcmllcy5cblxuZnVuY3Rpb24gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0Tm9kZSkge1xuICB2YXIgdGFyZ2V0SW5zdCA9IHRhcmdldE5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgaWYgKHRhcmdldEluc3QpIHtcbiAgICAvLyBEb24ndCByZXR1cm4gSG9zdFJvb3Qgb3IgU3VzcGVuc2VDb21wb25lbnQgaGVyZS5cbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfSAvLyBJZiB0aGUgZGlyZWN0IGV2ZW50IHRhcmdldCBpc24ndCBhIFJlYWN0IG93bmVkIERPTSBub2RlLCB3ZSBuZWVkIHRvIGxvb2tcbiAgLy8gdG8gc2VlIGlmIG9uZSBvZiBpdHMgcGFyZW50cyBpcyBhIFJlYWN0IG93bmVkIERPTSBub2RlLlxuXG5cbiAgdmFyIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG5cbiAgd2hpbGUgKHBhcmVudE5vZGUpIHtcbiAgICAvLyBXZSdsbCBjaGVjayBpZiB0aGlzIGlzIGEgY29udGFpbmVyIHJvb3QgdGhhdCBjb3VsZCBpbmNsdWRlXG4gICAgLy8gUmVhY3Qgbm9kZXMgaW4gdGhlIGZ1dHVyZS4gV2UgbmVlZCB0byBjaGVjayB0aGlzIGZpcnN0IGJlY2F1c2VcbiAgICAvLyBpZiB3ZSdyZSBhIGNoaWxkIG9mIGEgZGVoeWRyYXRlZCBjb250YWluZXIsIHdlIG5lZWQgdG8gZmlyc3RcbiAgICAvLyBmaW5kIHRoYXQgaW5uZXIgY29udGFpbmVyIGJlZm9yZSBtb3Zpbmcgb24gdG8gZmluZGluZyB0aGUgcGFyZW50XG4gICAgLy8gaW5zdGFuY2UuIE5vdGUgdGhhdCB3ZSBkb24ndCBjaGVjayB0aGlzIGZpZWxkIG9uICB0aGUgdGFyZ2V0Tm9kZVxuICAgIC8vIGl0c2VsZiBiZWNhdXNlIHRoZSBmaWJlcnMgYXJlIGNvbmNlcHR1YWxseSBiZXR3ZWVuIHRoZSBjb250YWluZXJcbiAgICAvLyBub2RlIGFuZCB0aGUgZmlyc3QgY2hpbGQuIEl0IGlzbid0IHN1cnJvdW5kaW5nIHRoZSBjb250YWluZXIgbm9kZS5cbiAgICAvLyBJZiBpdCdzIG5vdCBhIGNvbnRhaW5lciwgd2UgY2hlY2sgaWYgaXQncyBhbiBpbnN0YW5jZS5cbiAgICB0YXJnZXRJbnN0ID0gcGFyZW50Tm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSB8fCBwYXJlbnROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gICAgaWYgKHRhcmdldEluc3QpIHtcbiAgICAgIC8vIFNpbmNlIHRoaXMgd2Fzbid0IHRoZSBkaXJlY3QgdGFyZ2V0IG9mIHRoZSBldmVudCwgd2UgbWlnaHQgaGF2ZVxuICAgICAgLy8gc3RlcHBlZCBwYXN0IGRlaHlkcmF0ZWQgRE9NIG5vZGVzIHRvIGdldCBoZXJlLiBIb3dldmVyIHRoZXkgY291bGRcbiAgICAgIC8vIGFsc28gaGF2ZSBiZWVuIG5vbi1SZWFjdCBub2Rlcy4gV2UgbmVlZCB0byBhbnN3ZXIgd2hpY2ggb25lLlxuICAgICAgLy8gSWYgd2UgdGhlIGluc3RhbmNlIGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGRyZW4sIHRoZW4gdGhlcmUgY2FuJ3QgYmVcbiAgICAgIC8vIGEgbmVzdGVkIHN1c3BlbnNlIGJvdW5kYXJ5IHdpdGhpbiBpdC4gU28gd2UgY2FuIHVzZSB0aGlzIGFzIGEgZmFzdFxuICAgICAgLy8gYmFpbG91dC4gTW9zdCBvZiB0aGUgdGltZSwgd2hlbiBwZW9wbGUgYWRkIG5vbi1SZWFjdCBjaGlsZHJlbiB0b1xuICAgICAgLy8gdGhlIHRyZWUsIGl0IGlzIHVzaW5nIGEgcmVmIHRvIGEgY2hpbGQtbGVzcyBET00gbm9kZS5cbiAgICAgIC8vIE5vcm1hbGx5IHdlJ2Qgb25seSBuZWVkIHRvIGNoZWNrIG9uZSBvZiB0aGUgZmliZXJzIGJlY2F1c2UgaWYgaXRcbiAgICAgIC8vIGhhcyBldmVyIGdvbmUgZnJvbSBoYXZpbmcgY2hpbGRyZW4gdG8gZGVsZXRpbmcgdGhlbSBvciB2aWNlIHZlcnNhXG4gICAgICAvLyBpdCB3b3VsZCBoYXZlIGRlbGV0ZWQgdGhlIGRlaHlkcmF0ZWQgYm91bmRhcnkgbmVzdGVkIGluc2lkZSBhbHJlYWR5LlxuICAgICAgLy8gSG93ZXZlciwgc2luY2UgdGhlIEhvc3RSb290IHN0YXJ0cyBvdXQgd2l0aCBhbiBhbHRlcm5hdGUgaXQgbWlnaHRcbiAgICAgIC8vIGhhdmUgb25lIG9uIHRoZSBhbHRlcm5hdGUgc28gd2UgbmVlZCB0byBjaGVjayBpbiBjYXNlIHRoaXMgd2FzIGFcbiAgICAgIC8vIHJvb3QuXG4gICAgICB2YXIgYWx0ZXJuYXRlID0gdGFyZ2V0SW5zdC5hbHRlcm5hdGU7XG5cbiAgICAgIGlmICh0YXJnZXRJbnN0LmNoaWxkICE9PSBudWxsIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIG5vZGUgdGhhdCBza2lwcGVkIHBhc3QgaXNcbiAgICAgICAgLy8gbmVzdGVkIHdpdGhpbiBhIGRlaHlkcmF0ZWQgYm91bmRhcnkgYW5kIGlmIHNvLCB3aGljaCBvbmUuXG4gICAgICAgIHZhciBzdXNwZW5zZUluc3RhbmNlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXROb2RlKTtcblxuICAgICAgICB3aGlsZSAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIGZvdW5kIGEgc3VzcGVuc2UgaW5zdGFuY2UuIFRoYXQgbWVhbnMgdGhhdCB3ZSBoYXZlbid0XG4gICAgICAgICAgLy8gaHlkcmF0ZWQgaXQgeWV0LiBFdmVuIHRob3VnaCB3ZSBsZWF2ZSB0aGUgY29tbWVudHMgaW4gdGhlXG4gICAgICAgICAgLy8gRE9NIGFmdGVyIGh5ZHJhdGluZywgYW5kIHRoZXJlIGFyZSBib3VuZGFyaWVzIGluIHRoZSBET01cbiAgICAgICAgICAvLyB0aGF0IGNvdWxkIGFscmVhZHkgYmUgaHlkcmF0ZWQsIHdlIHdvdWxkbid0IGhhdmUgZm91bmQgdGhlbVxuICAgICAgICAgIC8vIHRocm91Z2ggdGhpcyBwYXNzIHNpbmNlIGlmIHRoZSB0YXJnZXQgaXMgaHlkcmF0ZWQgaXQgd291bGRcbiAgICAgICAgICAvLyBoYXZlIGhhZCBhbiBpbnRlcm5hbEluc3RhbmNlS2V5IG9uIGl0LlxuICAgICAgICAgIC8vIExldCdzIGdldCB0aGUgZmliZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBTdXNwZW5zZUNvbXBvbmVudFxuICAgICAgICAgIC8vIGFzIHRoZSBkZWVwZXN0IGluc3RhbmNlLlxuICAgICAgICAgIHZhciB0YXJnZXRTdXNwZW5zZUluc3QgPSBzdXNwZW5zZUluc3RhbmNlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gICAgICAgICAgaWYgKHRhcmdldFN1c3BlbnNlSW5zdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFN1c3BlbnNlSW5zdDtcbiAgICAgICAgICB9IC8vIElmIHdlIGRvbid0IGZpbmQgYSBGaWJlciBvbiB0aGUgY29tbWVudCwgaXQgbWlnaHQgYmUgYmVjYXVzZVxuICAgICAgICAgIC8vIHdlIGhhdmVuJ3QgZ290dGVuIHRvIGh5ZHJhdGUgaXQgeWV0LiBUaGVyZSBtaWdodCBzdGlsbCBiZSBhXG4gICAgICAgICAgLy8gcGFyZW50IGJvdW5kYXJ5IHRoYXQgaGFzbid0IGFib3ZlIHRoaXMgb25lIHNvIHdlIG5lZWQgdG8gZmluZFxuICAgICAgICAgIC8vIHRoZSBvdXRlciBtb3N0IHRoYXQgaXMga25vd24uXG5cblxuICAgICAgICAgIHN1c3BlbnNlSW5zdGFuY2UgPSBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpOyAvLyBJZiB3ZSBkb24ndCBmaW5kIG9uZSwgdGhlbiB0aGF0IHNob3VsZCBtZWFuIHRoYXQgdGhlIHBhcmVudFxuICAgICAgICAgIC8vIGhvc3QgY29tcG9uZW50IGFsc28gaGFzbid0IGh5ZHJhdGVkIHlldC4gV2UgY2FuIHJldHVybiBpdFxuICAgICAgICAgIC8vIGJlbG93IHNpbmNlIGl0IHdpbGwgYmFpbCBvdXQgb24gdGhlIGlzTW91bnRlZCBjaGVjayBsYXRlci5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgICB9XG5cbiAgICB0YXJnZXROb2RlID0gcGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgRE9NIG5vZGUsIHJldHVybiB0aGUgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gKiBpbnN0YW5jZSwgb3IgbnVsbCBpZiB0aGUgbm9kZSB3YXMgbm90IHJlbmRlcmVkIGJ5IHRoaXMgUmVhY3QuXG4gKi9cblxuZnVuY3Rpb24gZ2V0SW5zdGFuY2VGcm9tTm9kZShub2RlKSB7XG4gIHZhciBpbnN0ID0gbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSB8fCBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldO1xuXG4gIGlmIChpbnN0KSB7XG4gICAgaWYgKGluc3QudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0VGV4dCB8fCBpbnN0LnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICByZXR1cm4gaW5zdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50LCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmdcbiAqIERPTSBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCkge1xuICBpZiAoaW5zdC50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgLy8gSW4gRmliZXIgdGhpcywgaXMganVzdCB0aGUgc3RhdGUgbm9kZSByaWdodCBub3cuIFdlIGFzc3VtZSBpdCB3aWxsIGJlXG4gICAgLy8gYSBob3N0IGNvbXBvbmVudCBvciBob3N0IHRleHQuXG4gICAgcmV0dXJuIGluc3Quc3RhdGVOb2RlO1xuICB9IC8vIFdpdGhvdXQgdGhpcyBmaXJzdCBpbnZhcmlhbnQsIHBhc3NpbmcgYSBub24tRE9NLWNvbXBvbmVudCB0cmlnZ2VycyB0aGUgbmV4dFxuICAvLyBpbnZhcmlhbnQgZm9yIGEgbWlzc2luZyBwYXJlbnQsIHdoaWNoIGlzIHN1cGVyIGNvbmZ1c2luZy5cblxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJnZXROb2RlRnJvbUluc3RhbmNlOiBJbnZhbGlkIGFyZ3VtZW50LlwiICk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGVbaW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUZpYmVyUHJvcHMobm9kZSwgcHJvcHMpIHtcbiAgbm9kZVtpbnRlcm5hbFByb3BzS2V5XSA9IHByb3BzO1xufVxuZnVuY3Rpb24gZ2V0RXZlbnRMaXN0ZW5lclNldChub2RlKSB7XG4gIHZhciBlbGVtZW50TGlzdGVuZXJTZXQgPSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV07XG5cbiAgaWYgKGVsZW1lbnRMaXN0ZW5lclNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZWxlbWVudExpc3RlbmVyU2V0ID0gbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldID0gbmV3IFNldCgpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRMaXN0ZW5lclNldDtcbn1cblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbHVlU3RhY2sgPSBbXTtcbnZhciBmaWJlclN0YWNrO1xuXG57XG4gIGZpYmVyU3RhY2sgPSBbXTtcbn1cblxudmFyIGluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNyZWF0ZUN1cnNvcihkZWZhdWx0VmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50OiBkZWZhdWx0VmFsdWVcbiAgfTtcbn1cblxuZnVuY3Rpb24gcG9wKGN1cnNvciwgZmliZXIpIHtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHtcbiAgICAgIGVycm9yKCdVbmV4cGVjdGVkIHBvcC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgaWYgKGZpYmVyICE9PSBmaWJlclN0YWNrW2luZGV4XSkge1xuICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgRmliZXIgcG9wcGVkLicpO1xuICAgIH1cbiAgfVxuXG4gIGN1cnNvci5jdXJyZW50ID0gdmFsdWVTdGFja1tpbmRleF07XG4gIHZhbHVlU3RhY2tbaW5kZXhdID0gbnVsbDtcblxuICB7XG4gICAgZmliZXJTdGFja1tpbmRleF0gPSBudWxsO1xuICB9XG5cbiAgaW5kZXgtLTtcbn1cblxuZnVuY3Rpb24gcHVzaChjdXJzb3IsIHZhbHVlLCBmaWJlcikge1xuICBpbmRleCsrO1xuICB2YWx1ZVN0YWNrW2luZGV4XSA9IGN1cnNvci5jdXJyZW50O1xuXG4gIHtcbiAgICBmaWJlclN0YWNrW2luZGV4XSA9IGZpYmVyO1xuICB9XG5cbiAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZTtcbn1cblxudmFyIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dDtcblxue1xuICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQgPSB7fTtcbn1cblxudmFyIGVtcHR5Q29udGV4dE9iamVjdCA9IHt9O1xuXG57XG4gIE9iamVjdC5mcmVlemUoZW1wdHlDb250ZXh0T2JqZWN0KTtcbn0gLy8gQSBjdXJzb3IgdG8gdGhlIGN1cnJlbnQgbWVyZ2VkIGNvbnRleHQgb2JqZWN0IG9uIHRoZSBzdGFjay5cblxuXG52YXIgY29udGV4dFN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGVtcHR5Q29udGV4dE9iamVjdCk7IC8vIEEgY3Vyc29yIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRleHQgaGFzIGNoYW5nZWQuXG5cbnZhciBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGZhbHNlKTsgLy8gS2VlcCB0cmFjayBvZiB0aGUgcHJldmlvdXMgY29udGV4dCBvYmplY3QgdGhhdCB3YXMgb24gdGhlIHN0YWNrLlxuLy8gV2UgdXNlIHRoaXMgdG8gZ2V0IGFjY2VzcyB0byB0aGUgcGFyZW50IGNvbnRleHQgYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5XG4vLyBwdXNoZWQgdGhlIG5leHQgY29udGV4dCBwcm92aWRlciwgYW5kIG5vdyBuZWVkIHRvIG1lcmdlIHRoZWlyIGNvbnRleHRzLlxuXG52YXIgcHJldmlvdXNDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG5mdW5jdGlvbiBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyKSB7XG4gIHtcbiAgICBpZiAoZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyICYmIGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIC8vIElmIHRoZSBmaWJlciBpcyBhIGNvbnRleHQgcHJvdmlkZXIgaXRzZWxmLCB3aGVuIHdlIHJlYWQgaXRzIGNvbnRleHRcbiAgICAgIC8vIHdlIG1heSBoYXZlIGFscmVhZHkgcHVzaGVkIGl0cyBvd24gY2hpbGQgY29udGV4dCBvbiB0aGUgc3RhY2suIEEgY29udGV4dFxuICAgICAgLy8gcHJvdmlkZXIgc2hvdWxkIG5vdCBcInNlZVwiIGl0cyBvd24gY2hpbGQgY29udGV4dC4gVGhlcmVmb3JlIHdlIHJlYWQgdGhlXG4gICAgICAvLyBwcmV2aW91cyAocGFyZW50KSBjb250ZXh0IGluc3RlYWQgZm9yIGEgY29udGV4dCBwcm92aWRlci5cbiAgICAgIHJldHVybiBwcmV2aW91c0NvbnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBtYXNrZWRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9IHVubWFza2VkQ29udGV4dDtcbiAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dCA9IG1hc2tlZENvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IHR5cGUuY29udGV4dFR5cGVzO1xuXG4gICAgaWYgKCFjb250ZXh0VHlwZXMpIHtcbiAgICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgfSAvLyBBdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyB1bm1hc2tlZCBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuICAgIC8vIEZhaWxpbmcgdG8gZG8gdGhpcyB3aWxsIHJlc3VsdCBpbiB1bm5lY2Vzc2FyeSBjYWxscyB0byBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLlxuICAgIC8vIFRoaXMgbWF5IHRyaWdnZXIgaW5maW5pdGUgbG9vcHMgaWYgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBjYWxscyBzZXRTdGF0ZS5cblxuXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPT09IHVubWFza2VkQ29udGV4dCkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gY29udGV4dFR5cGVzKSB7XG4gICAgICBjb250ZXh0W2tleV0gPSB1bm1hc2tlZENvbnRleHRba2V5XTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY29udGV4dFR5cGVzLCBjb250ZXh0LCAnY29udGV4dCcsIG5hbWUpO1xuICAgIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAgIC8vIENvbnRleHQgaXMgY3JlYXRlZCBiZWZvcmUgdGhlIGNsYXNzIGNvbXBvbmVudCBpcyBpbnN0YW50aWF0ZWQgc28gY2hlY2sgZm9yIGluc3RhbmNlLlxuXG5cbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNDb250ZXh0Q2hhbmdlZCgpIHtcbiAge1xuICAgIHJldHVybiBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIodHlwZSkge1xuICB7XG4gICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlcztcbiAgICByZXR1cm4gY2hpbGRDb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY2hpbGRDb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BDb250ZXh0KGZpYmVyKSB7XG4gIHtcbiAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZmliZXIpO1xuICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIpIHtcbiAge1xuICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIsIGNvbnRleHQsIGRpZENoYW5nZSkge1xuICB7XG4gICAgaWYgKCEoY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQgPT09IGVtcHR5Q29udGV4dE9iamVjdCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5leHBlY3RlZCBjb250ZXh0IGZvdW5kIG9uIHN0YWNrLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIGNvbnRleHQsIGZpYmVyKTtcbiAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIHR5cGUsIHBhcmVudENvbnRleHQpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSB0eXBlLmNoaWxkQ29udGV4dFR5cGVzOyAvLyBUT0RPIChidmF1Z2huKSBSZXBsYWNlIHRoaXMgYmVoYXZpb3Igd2l0aCBhbiBpbnZhcmlhbnQoKSBpbiB0aGUgZnV0dXJlLlxuICAgIC8vIEl0IGhhcyBvbmx5IGJlZW4gYWRkZWQgaW4gRmliZXIgdG8gbWF0Y2ggdGhlICh1bmludGVudGlvbmFsKSBiZWhhdmlvciBpbiBTdGFjay5cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICAgICAgaWYgKCF3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJyVzLmNoaWxkQ29udGV4dFR5cGVzIGlzIHNwZWNpZmllZCBidXQgdGhlcmUgaXMgbm8gZ2V0Q2hpbGRDb250ZXh0KCkgbWV0aG9kICcgKyAnb24gdGhlIGluc3RhbmNlLiBZb3UgY2FuIGVpdGhlciBkZWZpbmUgZ2V0Q2hpbGRDb250ZXh0KCkgb24gJXMgb3IgcmVtb3ZlICcgKyAnY2hpbGRDb250ZXh0VHlwZXMgZnJvbSBpdC4nLCBjb21wb25lbnROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyZW50Q29udGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRDb250ZXh0ID0gaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0KCk7XG5cbiAgICBmb3IgKHZhciBjb250ZXh0S2V5IGluIGNoaWxkQ29udGV4dCkge1xuICAgICAgaWYgKCEoY29udGV4dEtleSBpbiBjaGlsZENvbnRleHRUeXBlcykpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCAoZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bicpICsgXCIuZ2V0Q2hpbGRDb250ZXh0KCk6IGtleSBcXFwiXCIgKyBjb250ZXh0S2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIGluIGNoaWxkQ29udGV4dFR5cGVzLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY2hpbGRDb250ZXh0VHlwZXMsIGNoaWxkQ29udGV4dCwgJ2NoaWxkIGNvbnRleHQnLCBuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2Fzc2lnbih7fSwgcGFyZW50Q29udGV4dCwgY2hpbGRDb250ZXh0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7IC8vIFdlIHB1c2ggdGhlIGNvbnRleHQgYXMgZWFybHkgYXMgcG9zc2libGUgdG8gZW5zdXJlIHN0YWNrIGludGVncml0eS5cbiAgICAvLyBJZiB0aGUgaW5zdGFuY2UgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSB3aWxsIHB1c2ggbnVsbCBhdCBmaXJzdCxcbiAgICAvLyBhbmQgcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgbGF0ZXIgd2hlbiBpbnZhbGlkYXRpbmcgdGhlIGNvbnRleHQuXG5cbiAgICB2YXIgbWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgPSBpbnN0YW5jZSAmJiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCB8fCBlbXB0eUNvbnRleHRPYmplY3Q7IC8vIFJlbWVtYmVyIHRoZSBwYXJlbnQgY29udGV4dCBzbyB3ZSBjYW4gbWVyZ2Ugd2l0aCBpdCBsYXRlci5cbiAgICAvLyBJbmhlcml0IHRoZSBwYXJlbnQncyBkaWQtcGVyZm9ybS13b3JrIHZhbHVlIHRvIGF2b2lkIGluYWR2ZXJ0ZW50bHkgYmxvY2tpbmcgdXBkYXRlcy5cblxuICAgIHByZXZpb3VzQ29udGV4dCA9IGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBtZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgdHlwZSwgZGlkQ2hhbmdlKSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGhhdmUgYW4gaW5zdGFuY2UgYnkgdGhpcyBwb2ludC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaWRDaGFuZ2UpIHtcbiAgICAgIC8vIE1lcmdlIHBhcmVudCBhbmQgb3duIGNvbnRleHQuXG4gICAgICAvLyBTa2lwIHRoaXMgaWYgd2UncmUgbm90IHVwZGF0aW5nIGR1ZSB0byBzQ1UuXG4gICAgICAvLyBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyaWx5IHJlY29tcHV0aW5nIG1lbW9pemVkIHZhbHVlcy5cbiAgICAgIHZhciBtZXJnZWRDb250ZXh0ID0gcHJvY2Vzc0NoaWxkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdHlwZSwgcHJldmlvdXNDb250ZXh0KTtcbiAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gbWVyZ2VkQ29udGV4dDsgLy8gUmVwbGFjZSB0aGUgb2xkIChvciBlbXB0eSkgY29udGV4dCB3aXRoIHRoZSBuZXcgb25lLlxuICAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIHVud2luZCB0aGUgY29udGV4dCBpbiB0aGUgcmV2ZXJzZSBvcmRlci5cblxuICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTsgLy8gTm93IHB1c2ggdGhlIG5ldyBjb250ZXh0IGFuZCBtYXJrIHRoYXQgaXQgaGFzIGNoYW5nZWQuXG5cbiAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBtZXJnZWRDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQoZmliZXIpIHtcbiAge1xuICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgdXNlZCB3aXRoIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOyBub3Qgc3VyZSBpZiBpdFxuICAgIC8vIG1ha2VzIHNlbnNlIGVsc2V3aGVyZVxuICAgIGlmICghKGlzRmliZXJNb3VudGVkKGZpYmVyKSAmJiBmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBzdWJ0cmVlIHBhcmVudCB0byBiZSBhIG1vdW50ZWQgY2xhc3MgY29tcG9uZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIGRvIHtcbiAgICAgIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGUuY29udGV4dDtcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBDb21wb25lbnQgPSBub2RlLnR5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobm9kZSAhPT0gbnVsbCk7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkZvdW5kIHVuZXhwZWN0ZWQgZGV0YWNoZWQgc3VidHJlZSBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIExlZ2FjeVJvb3QgPSAwO1xudmFyIEJsb2NraW5nUm9vdCA9IDE7XG52YXIgQ29uY3VycmVudFJvb3QgPSAyO1xuXG52YXIgcmVuZGVyZXJJRCA9IG51bGw7XG52YXIgaW5qZWN0ZWRIb29rID0gbnVsbDtcbnZhciBoYXNMb2dnZWRFcnJvciA9IGZhbHNlO1xudmFyIGlzRGV2VG9vbHNQcmVzZW50ID0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gJ3VuZGVmaW5lZCc7XG5mdW5jdGlvbiBpbmplY3RJbnRlcm5hbHMoaW50ZXJuYWxzKSB7XG4gIGlmICh0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIE5vIERldlRvb2xzXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGhvb2sgPSBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbiAgaWYgKGhvb2suaXNEaXNhYmxlZCkge1xuICAgIC8vIFRoaXMgaXNuJ3QgYSByZWFsIHByb3BlcnR5IG9uIHRoZSBob29rLCBidXQgaXQgY2FuIGJlIHNldCB0byBvcHQgb3V0XG4gICAgLy8gb2YgRGV2VG9vbHMgaW50ZWdyYXRpb24gYW5kIGFzc29jaWF0ZWQgd2FybmluZ3MgYW5kIGxvZ3MuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zODc3XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWhvb2suc3VwcG9ydHNGaWJlcikge1xuICAgIHtcbiAgICAgIGVycm9yKCdUaGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUmVhY3QgRGV2VG9vbHMgaXMgdG9vIG9sZCBhbmQgd2lsbCBub3Qgd29yayAnICsgJ3dpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBSZWFjdC4gUGxlYXNlIHVwZGF0ZSBSZWFjdCBEZXZUb29scy4gJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMnKTtcbiAgICB9IC8vIERldlRvb2xzIGV4aXN0cywgZXZlbiB0aG91Z2ggaXQgZG9lc24ndCBzdXBwb3J0IEZpYmVyLlxuXG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmVuZGVyZXJJRCA9IGhvb2suaW5qZWN0KGludGVybmFscyk7IC8vIFdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGluamVjdGVkLCBzbyBub3cgaXQgaXMgc2FmZSB0byBzZXQgdXAgaG9va3MuXG5cbiAgICBpbmplY3RlZEhvb2sgPSBob29rO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBDYXRjaCBhbGwgZXJyb3JzIGJlY2F1c2UgaXQgaXMgdW5zYWZlIHRvIHRocm93IGR1cmluZyBpbml0aWFsaXphdGlvbi5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcy4nLCBlcnIpO1xuICAgIH1cbiAgfSAvLyBEZXZUb29scyBleGlzdHNcblxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gb25TY2hlZHVsZVJvb3Qocm9vdCwgY2hpbGRyZW4pIHtcbiAge1xuICAgIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vblNjaGVkdWxlRmliZXJSb290ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBjaGlsZHJlbik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCAhaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdChyb290LCBwcmlvcml0eUxldmVsKSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZGlkRXJyb3IgPSAocm9vdC5jdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IERpZENhcHR1cmU7XG5cbiAgICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBwcmlvcml0eUxldmVsLCBkaWRFcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgdW5kZWZpbmVkLCBkaWRFcnJvcik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG9uQ29tbWl0VW5tb3VudChmaWJlcikge1xuICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJVbm1vdW50KHJlbmRlcmVySUQsIGZpYmVyKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgU2NoZWR1bGVyX3J1bldpdGhQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2ssXG4gICAgU2NoZWR1bGVyX3Nob3VsZFlpZWxkID0gU2NoZWR1bGVyLnVuc3RhYmxlX3Nob3VsZFlpZWxkLFxuICAgIFNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgPSBTY2hlZHVsZXIudW5zdGFibGVfcmVxdWVzdFBhaW50LFxuICAgIFNjaGVkdWxlcl9ub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3csXG4gICAgU2NoZWR1bGVyX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gU2NoZWR1bGVyLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLFxuICAgIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX05vcm1hbFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9Mb3dQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Mb3dQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfSWRsZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0lkbGVQcmlvcml0eTtcblxue1xuICAvLyBQcm92aWRlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2Ugd2hlbiBwcm9kdWN0aW9uK3Byb2ZpbGluZyBidW5kbGUgb2YgZS5nLlxuICAvLyByZWFjdC1kb20gaXMgdXNlZCB3aXRoIHByb2R1Y3Rpb24gKG5vbi1wcm9maWxpbmcpIGJ1bmRsZSBvZlxuICAvLyBzY2hlZHVsZXIvdHJhY2luZ1xuICBpZiAoISh0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmICE9IG51bGwgJiYgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ICE9IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSXQgaXMgbm90IHN1cHBvcnRlZCB0byBydW4gdGhlIHByb2ZpbGluZyB2ZXJzaW9uIG9mIGEgcmVuZGVyZXIgKGZvciBleGFtcGxlLCBgcmVhY3QtZG9tL3Byb2ZpbGluZ2ApIHdpdGhvdXQgYWxzbyByZXBsYWNpbmcgdGhlIGBzY2hlZHVsZXIvdHJhY2luZ2AgbW9kdWxlIHdpdGggYHNjaGVkdWxlci90cmFjaW5nLXByb2ZpbGluZ2AuIFlvdXIgYnVuZGxlciBtaWdodCBoYXZlIGEgc2V0dGluZyBmb3IgYWxpYXNpbmcgYm90aCBtb2R1bGVzLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9wcm9maWxpbmdcIiApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZmFrZUNhbGxiYWNrTm9kZSA9IHt9OyAvLyBFeGNlcHQgZm9yIE5vUHJpb3JpdHksIHRoZXNlIGNvcnJlc3BvbmQgdG8gU2NoZWR1bGVyIHByaW9yaXRpZXMuIFdlIHVzZVxuLy8gYXNjZW5kaW5nIG51bWJlcnMgc28gd2UgY2FuIGNvbXBhcmUgdGhlbSBsaWtlIG51bWJlcnMuIFRoZXkgc3RhcnQgYXQgOTAgdG9cbi8vIGF2b2lkIGNsYXNoaW5nIHdpdGggU2NoZWR1bGVyJ3MgcHJpb3JpdGllcy5cblxudmFyIEltbWVkaWF0ZVByaW9yaXR5JDEgPSA5OTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSQyID0gOTg7XG52YXIgTm9ybWFsUHJpb3JpdHkkMSA9IDk3O1xudmFyIExvd1ByaW9yaXR5JDEgPSA5NjtcbnZhciBJZGxlUHJpb3JpdHkkMSA9IDk1OyAvLyBOb1ByaW9yaXR5IGlzIHRoZSBhYnNlbmNlIG9mIHByaW9yaXR5LiBBbHNvIFJlYWN0LW9ubHkuXG5cbnZhciBOb1ByaW9yaXR5JDEgPSA5MDtcbnZhciBzaG91bGRZaWVsZCA9IFNjaGVkdWxlcl9zaG91bGRZaWVsZDtcbnZhciByZXF1ZXN0UGFpbnQgPSAvLyBGYWxsIGJhY2sgZ3JhY2VmdWxseSBpZiB3ZSdyZSBydW5uaW5nIGFuIG9sZGVyIHZlcnNpb24gb2YgU2NoZWR1bGVyLlxuU2NoZWR1bGVyX3JlcXVlc3RQYWludCAhPT0gdW5kZWZpbmVkID8gU2NoZWR1bGVyX3JlcXVlc3RQYWludCA6IGZ1bmN0aW9uICgpIHt9O1xudmFyIHN5bmNRdWV1ZSA9IG51bGw7XG52YXIgaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgPSBudWxsO1xudmFyIGlzRmx1c2hpbmdTeW5jUXVldWUgPSBmYWxzZTtcbnZhciBpbml0aWFsVGltZU1zJDEgPSBTY2hlZHVsZXJfbm93JDEoKTsgLy8gSWYgdGhlIGluaXRpYWwgdGltZXN0YW1wIGlzIHJlYXNvbmFibHkgc21hbGwsIHVzZSBTY2hlZHVsZXIncyBgbm93YCBkaXJlY3RseS5cbi8vIFRoaXMgd2lsbCBiZSB0aGUgY2FzZSBmb3IgbW9kZXJuIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBgcGVyZm9ybWFuY2Uubm93YC4gSW5cbi8vIG9sZGVyIGJyb3dzZXJzLCBTY2hlZHVsZXIgZmFsbHMgYmFjayB0byBgRGF0ZS5ub3dgLCB3aGljaCByZXR1cm5zIGEgVW5peFxuLy8gdGltZXN0YW1wLiBJbiB0aGF0IGNhc2UsIHN1YnRyYWN0IHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdGltZSB0byBzaW11bGF0ZVxuLy8gdGhlIGJlaGF2aW9yIG9mIHBlcmZvcm1hbmNlLm5vdyBhbmQga2VlcCBvdXIgdGltZXMgc21hbGwgZW5vdWdoIHRvIGZpdFxuLy8gd2l0aGluIDMyIGJpdHMuXG4vLyBUT0RPOiBDb25zaWRlciBsaWZ0aW5nIHRoaXMgaW50byBTY2hlZHVsZXIuXG5cbnZhciBub3cgPSBpbml0aWFsVGltZU1zJDEgPCAxMDAwMCA/IFNjaGVkdWxlcl9ub3ckMSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFNjaGVkdWxlcl9ub3ckMSgpIC0gaW5pdGlhbFRpbWVNcyQxO1xufTtcbmZ1bmN0aW9uIGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkge1xuICBzd2l0Y2ggKFNjaGVkdWxlcl9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpKSB7XG4gICAgY2FzZSBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSW1tZWRpYXRlUHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDI7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb3JtYWxQcmlvcml0eSQxO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfTG93UHJpb3JpdHk6XG4gICAgICByZXR1cm4gTG93UHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX0lkbGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJZGxlUHJpb3JpdHkkMTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHByaW9yaXR5IGxldmVsLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWN0UHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KHJlYWN0UHJpb3JpdHlMZXZlbCkge1xuICBzd2l0Y2ggKHJlYWN0UHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHk7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDI6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5O1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eTtcblxuICAgIGNhc2UgTG93UHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfTG93UHJpb3JpdHk7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9JZGxlUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biBwcmlvcml0eSBsZXZlbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuXG5mdW5jdGlvbiBydW5XaXRoUHJpb3JpdHkkMShyZWFjdFByaW9yaXR5TGV2ZWwsIGZuKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKTtcbiAgcmV0dXJuIFNjaGVkdWxlcl9ydW5XaXRoUHJpb3JpdHkocHJpb3JpdHlMZXZlbCwgZm4pO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFjayhyZWFjdFByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKTtcbiAgcmV0dXJuIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlU3luY0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIC8vIFB1c2ggdGhpcyBjYWxsYmFjayBpbnRvIGFuIGludGVybmFsIHF1ZXVlLiBXZSdsbCBmbHVzaCB0aGVzZSBlaXRoZXIgaW5cbiAgLy8gdGhlIG5leHQgdGljaywgb3IgZWFybGllciBpZiBzb21ldGhpbmcgY2FsbHMgYGZsdXNoU3luY0NhbGxiYWNrUXVldWVgLlxuICBpZiAoc3luY1F1ZXVlID09PSBudWxsKSB7XG4gICAgc3luY1F1ZXVlID0gW2NhbGxiYWNrXTsgLy8gRmx1c2ggdGhlIHF1ZXVlIGluIHRoZSBuZXh0IHRpY2ssIGF0IHRoZSBlYXJsaWVzdC5cblxuICAgIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5LCBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUHVzaCBvbnRvIGV4aXN0aW5nIHF1ZXVlLiBEb24ndCBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2sgYmVjYXVzZVxuICAgIC8vIHdlIGFscmVhZHkgc2NoZWR1bGVkIG9uZSB3aGVuIHdlIGNyZWF0ZWQgdGhlIHF1ZXVlLlxuICAgIHN5bmNRdWV1ZS5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBmYWtlQ2FsbGJhY2tOb2RlO1xufVxuZnVuY3Rpb24gY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKSB7XG4gIGlmIChjYWxsYmFja05vZGUgIT09IGZha2VDYWxsYmFja05vZGUpIHtcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpIHtcbiAgaWYgKGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyIG5vZGUgPSBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZTtcbiAgICBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrKG5vZGUpO1xuICB9XG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwoKSB7XG4gIGlmICghaXNGbHVzaGluZ1N5bmNRdWV1ZSAmJiBzeW5jUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBQcmV2ZW50IHJlLWVudHJhbmN5LlxuICAgIGlzRmx1c2hpbmdTeW5jUXVldWUgPSB0cnVlO1xuICAgIHZhciBpID0gMDtcblxuICAgIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBfaXNTeW5jMiA9IHRydWU7XG4gICAgICAgIHZhciBfcXVldWUgPSBzeW5jUXVldWU7XG4gICAgICAgIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmb3IgKDsgaSA8IF9xdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gX3F1ZXVlW2ldO1xuXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2soX2lzU3luYzIpO1xuICAgICAgICAgICAgfSB3aGlsZSAoY2FsbGJhY2sgIT09IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN5bmNRdWV1ZSA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBzb21ldGhpbmcgdGhyb3dzLCBsZWF2ZSB0aGUgcmVtYWluaW5nIGNhbGxiYWNrcyBvbiB0aGUgcXVldWUuXG4gICAgICAgIGlmIChzeW5jUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICBzeW5jUXVldWUgPSBzeW5jUXVldWUuc2xpY2UoaSArIDEpO1xuICAgICAgICB9IC8vIFJlc3VtZSBmbHVzaGluZyBpbiB0aGUgbmV4dCB0aWNrXG5cblxuICAgICAgICBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHksIGZsdXNoU3luY0NhbGxiYWNrUXVldWUpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRmx1c2hpbmdTeW5jUXVldWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVE9ETzogdGhpcyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgZ2V0cyBpbXBvcnRlZCBkdXJpbmcgYnVpbGQuXG52YXIgUmVhY3RWZXJzaW9uID0gJzE3LjAuMic7XG5cbnZhciBOb01vZGUgPSAwO1xudmFyIFN0cmljdE1vZGUgPSAxOyAvLyBUT0RPOiBSZW1vdmUgQmxvY2tpbmdNb2RlIGFuZCBDb25jdXJyZW50TW9kZSBieSByZWFkaW5nIGZyb20gdGhlIHJvb3Rcbi8vIHRhZyBpbnN0ZWFkXG5cbnZhciBCbG9ja2luZ01vZGUgPSAyO1xudmFyIENvbmN1cnJlbnRNb2RlID0gNDtcbnZhciBQcm9maWxlTW9kZSA9IDg7XG52YXIgRGVidWdUcmFjaW5nTW9kZSA9IDE2O1xuXG52YXIgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztcbnZhciBOb1RyYW5zaXRpb24gPSAwO1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCkge1xuICByZXR1cm4gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcbn1cblxudmFyIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzID0ge1xuICByZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge30sXG4gIGZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fSxcbiAgcmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHt9LFxuICBmbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoKSB7fSxcbiAgZGlzY2FyZFBlbmRpbmdXYXJuaW5nczogZnVuY3Rpb24gKCkge31cbn07XG5cbntcbiAgdmFyIGZpbmRTdHJpY3RSb290ID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgdmFyIG1heWJlU3RyaWN0Um9vdCA9IG51bGw7XG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBtYXliZVN0cmljdFJvb3QgPSBub2RlO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heWJlU3RyaWN0Um9vdDtcbiAgfTtcblxuICB2YXIgc2V0VG9Tb3J0ZWRTdHJpbmcgPSBmdW5jdGlvbiAoc2V0KSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBhcnJheS5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyYXkuc29ydCgpLmpvaW4oJywgJyk7XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgdmFyIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMgPSBuZXcgU2V0KCk7XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7XG4gICAgLy8gRGVkdXAgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuICAgIGlmIChkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nICYmIC8vIERvbid0IHdhcm4gYWJvdXQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLlxuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2UgZG8gYW4gaW5pdGlhbCBwYXNzIHRvIGdhdGhlciBjb21wb25lbnQgbmFtZXNcbiAgICB2YXIgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIH0gLy8gRmluYWxseSwgd2UgZmx1c2ggYWxsIHRoZSB3YXJuaW5nc1xuICAgIC8vIFVOU0FGRV8gb25lcyBiZWZvcmUgdGhlIGRlcHJlY2F0ZWQgb25lcywgc2luY2UgdGhleSdsbCBiZSAnbG91ZGVyJ1xuXG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgc29ydGVkTmFtZXMpO1xuICAgIH1cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgJyArICdhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyBcIiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgXCIgKyAncmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gJyArICdzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGVyaXZlZC1zdGF0ZVxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzKTtcbiAgICB9XG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczIgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCAnICsgJ2FuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMyKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsTW91bnQgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsTW91bnQgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzMyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczQgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIHJlZmFjdG9yIHlvdXIgXCIgKyAnY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvICcgKyAnc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rlcml2ZWQtc3RhdGVcXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczQpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXM1ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbFVwZGF0ZSBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsVXBkYXRlIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXM1KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTsgLy8gVHJhY2tzIGNvbXBvbmVudHMgd2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC5cblxuICB2YXIgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dCA9IG5ldyBTZXQoKTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHtcbiAgICB2YXIgc3RyaWN0Um9vdCA9IGZpbmRTdHJpY3RSb290KGZpYmVyKTtcblxuICAgIGlmIChzdHJpY3RSb290ID09PSBudWxsKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdG8gZmluZCBhIFN0cmljdE1vZGUgY29tcG9uZW50IGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gJyArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZWR1cCBzdHJhdGVneTogV2FybiBvbmNlIHBlciBjb21wb25lbnQuXG5cblxuICAgIGlmIChkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB3YXJuaW5nc0ZvclJvb3QgPSBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZ2V0KHN0cmljdFJvb3QpO1xuXG4gICAgaWYgKGZpYmVyLnR5cGUuY29udGV4dFR5cGVzICE9IG51bGwgfHwgZmliZXIudHlwZS5jaGlsZENvbnRleHRUeXBlcyAhPSBudWxsIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh3YXJuaW5nc0ZvclJvb3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB3YXJuaW5nc0ZvclJvb3QgPSBbXTtcbiAgICAgICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLnNldChzdHJpY3RSb290LCB3YXJuaW5nc0ZvclJvb3QpO1xuICAgICAgfVxuXG4gICAgICB3YXJuaW5nc0ZvclJvb3QucHVzaChmaWJlcik7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyQXJyYXksIHN0cmljdFJvb3QpIHtcbiAgICAgIGlmIChmaWJlckFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBmaXJzdEZpYmVyID0gZmliZXJBcnJheVswXTtcbiAgICAgIHZhciB1bmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIGZpYmVyQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgdW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcodW5pcXVlTmFtZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmlyc3RGaWJlcik7XG5cbiAgICAgICAgZXJyb3IoJ0xlZ2FjeSBjb250ZXh0IEFQSSBoYXMgYmVlbiBkZXRlY3RlZCB3aXRoaW4gYSBzdHJpY3QtbW9kZSB0cmVlLicgKyAnXFxuXFxuVGhlIG9sZCBBUEkgd2lsbCBiZSBzdXBwb3J0ZWQgaW4gYWxsIDE2LnggcmVsZWFzZXMsIGJ1dCBhcHBsaWNhdGlvbnMgJyArICd1c2luZyBpdCBzaG91bGQgbWlncmF0ZSB0byB0aGUgbmV3IHZlcnNpb24uJyArICdcXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnICsgJ1xcblxcbkxlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9sZWdhY3ktY29udGV4dCcsIHNvcnRlZE5hbWVzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpO1xuICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgYmFzZVByb3BzKSB7XG4gIGlmIChDb21wb25lbnQgJiYgQ29tcG9uZW50LmRlZmF1bHRQcm9wcykge1xuICAgIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wcy4gVGFrZW4gZnJvbSBSZWFjdEVsZW1lbnRcbiAgICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBiYXNlUHJvcHMpO1xuXG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IENvbXBvbmVudC5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9wcztcbiAgfVxuXG4gIHJldHVybiBiYXNlUHJvcHM7XG59XG5cbi8vIE1heCAzMSBiaXQgaW50ZWdlci4gVGhlIG1heCBpbnRlZ2VyIHNpemUgaW4gVjggZm9yIDMyLWJpdCBzeXN0ZW1zLlxuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcbnZhciBNQVhfU0lHTkVEXzMxX0JJVF9JTlQgPSAxMDczNzQxODIzO1xuXG52YXIgdmFsdWVDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG52YXIgcmVuZGVyZXJTaWdpbDtcblxue1xuICAvLyBVc2UgdGhpcyB0byBkZXRlY3QgbXVsdGlwbGUgcmVuZGVyZXJzIHVzaW5nIHRoZSBzYW1lIGNvbnRleHRcbiAgcmVuZGVyZXJTaWdpbCA9IHt9O1xufVxuXG52YXIgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xudmFyIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG52YXIgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcbnZhciBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG5mdW5jdGlvbiByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSB7XG4gIC8vIFRoaXMgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSBSZWFjdCB5aWVsZHMgZXhlY3V0aW9uLCB0byBlbnN1cmUgYHJlYWRDb250ZXh0YFxuICAvLyBjYW5ub3QgYmUgY2FsbGVkIG91dHNpZGUgdGhlIHJlbmRlciBwaGFzZS5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xuXG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gdHJ1ZTtcbiAgfVxufVxuZnVuY3Rpb24gZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCkge1xuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBwdXNoUHJvdmlkZXIocHJvdmlkZXJGaWJlciwgbmV4dFZhbHVlKSB7XG4gIHZhciBjb250ZXh0ID0gcHJvdmlkZXJGaWJlci50eXBlLl9jb250ZXh0O1xuXG4gIHtcbiAgICBwdXNoKHZhbHVlQ3Vyc29yLCBjb250ZXh0Ll9jdXJyZW50VmFsdWUsIHByb3ZpZGVyRmliZXIpO1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IG5leHRWYWx1ZTtcblxuICAgIHtcbiAgICAgIGlmIChjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHVuZGVmaW5lZCAmJiBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IG51bGwgJiYgY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSByZW5kZXJlclNpZ2lsKSB7XG4gICAgICAgIGVycm9yKCdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIGNvbnRleHQgcHJvdmlkZXIuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLicpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSByZW5kZXJlclNpZ2lsO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9wUHJvdmlkZXIocHJvdmlkZXJGaWJlcikge1xuICB2YXIgY3VycmVudFZhbHVlID0gdmFsdWVDdXJzb3IuY3VycmVudDtcbiAgcG9wKHZhbHVlQ3Vyc29yLCBwcm92aWRlckZpYmVyKTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlckZpYmVyLnR5cGUuX2NvbnRleHQ7XG5cbiAge1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gY2FsY3VsYXRlQ2hhbmdlZEJpdHMoY29udGV4dCwgbmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gIGlmIChvYmplY3RJcyhvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgLy8gTm8gY2hhbmdlXG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNoYW5nZWRCaXRzID0gdHlwZW9mIGNvbnRleHQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSAnZnVuY3Rpb24nID8gY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHMob2xkVmFsdWUsIG5ld1ZhbHVlKSA6IE1BWF9TSUdORURfMzFfQklUX0lOVDtcblxuICAgIHtcbiAgICAgIGlmICgoY2hhbmdlZEJpdHMgJiBNQVhfU0lHTkVEXzMxX0JJVF9JTlQpICE9PSBjaGFuZ2VkQml0cykge1xuICAgICAgICBlcnJvcignY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IEV4cGVjdGVkIHRoZSByZXR1cm4gdmFsdWUgdG8gYmUgYSAnICsgJzMxLWJpdCBpbnRlZ2VyLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcycsIGNoYW5nZWRCaXRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlZEJpdHMgfCAwO1xuICB9XG59XG5mdW5jdGlvbiBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgocGFyZW50LCByZW5kZXJMYW5lcykge1xuICAvLyBVcGRhdGUgdGhlIGNoaWxkIGxhbmVzIG9mIGFsbCB0aGUgYW5jZXN0b3JzLCBpbmNsdWRpbmcgdGhlIGFsdGVybmF0ZXMuXG4gIHZhciBub2RlID0gcGFyZW50O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IG5vZGUuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKCFpc1N1YnNldE9mTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgIG5vZGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgIWlzU3Vic2V0T2ZMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTmVpdGhlciBhbHRlcm5hdGUgd2FzIHVwZGF0ZWQsIHdoaWNoIG1lYW5zIHRoZSByZXN0IG9mIHRoZVxuICAgICAgLy8gYW5jZXN0b3IgcGF0aCBhbHJlYWR5IGhhcyBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICB9XG59XG5mdW5jdGlvbiBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCBjaGFuZ2VkQml0cywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGZpYmVyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgaWYgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgZmliZXIucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIH1cblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICB2YXIgbmV4dEZpYmVyID0gdm9pZCAwOyAvLyBWaXNpdCB0aGlzIGZpYmVyLlxuXG4gICAgdmFyIGxpc3QgPSBmaWJlci5kZXBlbmRlbmNpZXM7XG5cbiAgICBpZiAobGlzdCAhPT0gbnVsbCkge1xuICAgICAgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgICB2YXIgZGVwZW5kZW5jeSA9IGxpc3QuZmlyc3RDb250ZXh0O1xuXG4gICAgICB3aGlsZSAoZGVwZW5kZW5jeSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgY29udGV4dCBtYXRjaGVzLlxuICAgICAgICBpZiAoZGVwZW5kZW5jeS5jb250ZXh0ID09PSBjb250ZXh0ICYmIChkZXBlbmRlbmN5Lm9ic2VydmVkQml0cyAmIGNoYW5nZWRCaXRzKSAhPT0gMCkge1xuICAgICAgICAgIC8vIE1hdGNoISBTY2hlZHVsZSBhbiB1cGRhdGUgb24gdGhpcyBmaWJlci5cbiAgICAgICAgICBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgLy8gU2NoZWR1bGUgYSBmb3JjZSB1cGRhdGUgb24gdGhlIHdvcmstaW4tcHJvZ3Jlc3MuXG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBwaWNrQXJiaXRyYXJ5TGFuZShyZW5kZXJMYW5lcykpO1xuICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlOyAvLyBUT0RPOiBCZWNhdXNlIHdlIGRvbid0IGhhdmUgYSB3b3JrLWluLXByb2dyZXNzLCB0aGlzIHdpbGwgYWRkIHRoZVxuICAgICAgICAgICAgLy8gdXBkYXRlIHRvIHRoZSBjdXJyZW50IGZpYmVyLCB0b28sIHdoaWNoIG1lYW5zIGl0IHdpbGwgcGVyc2lzdCBldmVuIGlmXG4gICAgICAgICAgICAvLyB0aGlzIHJlbmRlciBpcyB0aHJvd24gYXdheS4gU2luY2UgaXQncyBhIHJhY2UgY29uZGl0aW9uLCBub3Qgc3VyZSBpdCdzXG4gICAgICAgICAgICAvLyB3b3J0aCBmaXhpbmcuXG5cbiAgICAgICAgICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKGZpYmVyLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyTGFuZXMpOyAvLyBNYXJrIHRoZSB1cGRhdGVkIGxhbmVzIG9uIHRoZSBsaXN0LCB0b28uXG5cbiAgICAgICAgICBsaXN0LmxhbmVzID0gbWVyZ2VMYW5lcyhsaXN0LmxhbmVzLCByZW5kZXJMYW5lcyk7IC8vIFNpbmNlIHdlIGFscmVhZHkgZm91bmQgYSBtYXRjaCwgd2UgY2FuIHN0b3AgdHJhdmVyc2luZyB0aGVcbiAgICAgICAgICAvLyBkZXBlbmRlbmN5IGxpc3QuXG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmN5Lm5leHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENvbnRleHRQcm92aWRlcikge1xuICAgICAgLy8gRG9uJ3Qgc2NhbiBkZWVwZXIgaWYgdGhpcyBpcyBhIG1hdGNoaW5nIHByb3ZpZGVyXG4gICAgICBuZXh0RmliZXIgPSBmaWJlci50eXBlID09PSB3b3JrSW5Qcm9ncmVzcy50eXBlID8gbnVsbCA6IGZpYmVyLmNoaWxkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUcmF2ZXJzZSBkb3duLlxuICAgICAgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICBuZXh0RmliZXIucmV0dXJuID0gZmliZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGNoaWxkLiBUcmF2ZXJzZSB0byBuZXh0IHNpYmxpbmcuXG4gICAgICBuZXh0RmliZXIgPSBmaWJlcjtcblxuICAgICAgd2hpbGUgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dEZpYmVyID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIC8vIFdlJ3JlIGJhY2sgdG8gdGhlIHJvb3Qgb2YgdGhpcyBzdWJ0cmVlLiBFeGl0LlxuICAgICAgICAgIG5leHRGaWJlciA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2libGluZyA9IG5leHRGaWJlci5zaWJsaW5nO1xuXG4gICAgICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgc2libGluZyB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICAgICAgICBzaWJsaW5nLnJldHVybiA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgbmV4dEZpYmVyID0gc2libGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBObyBtb3JlIHNpYmxpbmdzLiBUcmF2ZXJzZSB1cC5cblxuXG4gICAgICAgIG5leHRGaWJlciA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmliZXIgPSBuZXh0RmliZXI7XG4gIH1cbn1cbmZ1bmN0aW9uIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xuICB2YXIgZGVwZW5kZW5jaWVzID0gd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzO1xuXG4gIGlmIChkZXBlbmRlbmNpZXMgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RDb250ZXh0ID0gZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dDtcblxuICAgIGlmIChmaXJzdENvbnRleHQgIT09IG51bGwpIHtcbiAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKGRlcGVuZGVuY2llcy5sYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgIC8vIENvbnRleHQgbGlzdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS4gTWFyayB0aGF0IHRoaXMgZmliZXIgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgICB9IC8vIFJlc2V0IHRoZSB3b3JrLWluLXByb2dyZXNzIGxpc3RcblxuXG4gICAgICBkZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICB7XG4gICAgLy8gVGhpcyB3YXJuaW5nIHdvdWxkIGZpcmUgaWYgeW91IHJlYWQgY29udGV4dCBpbnNpZGUgYSBIb29rIGxpa2UgdXNlTWVtby5cbiAgICAvLyBVbmxpa2UgdGhlIGNsYXNzIGNoZWNrIGJlbG93LCBpdCdzIG5vdCBlbmZvcmNlZCBpbiBwcm9kdWN0aW9uIGZvciBwZXJmLlxuICAgIGlmIChpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKSB7XG4gICAgICBlcnJvcignQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gJyArICdJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiAnICsgJ0luIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCAnICsgJ2luc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9PT0gY29udGV4dCkgOyBlbHNlIGlmIChvYnNlcnZlZEJpdHMgPT09IGZhbHNlIHx8IG9ic2VydmVkQml0cyA9PT0gMCkgOyBlbHNlIHtcbiAgICB2YXIgcmVzb2x2ZWRPYnNlcnZlZEJpdHM7IC8vIEF2b2lkIGRlb3B0aW5nIG9uIG9ic2VydmFibGUgYXJndW1lbnRzIG9yIGhldGVyb2dlbmVvdXMgdHlwZXMuXG5cbiAgICBpZiAodHlwZW9mIG9ic2VydmVkQml0cyAhPT0gJ251bWJlcicgfHwgb2JzZXJ2ZWRCaXRzID09PSBNQVhfU0lHTkVEXzMxX0JJVF9JTlQpIHtcbiAgICAgIC8vIE9ic2VydmUgYWxsIHVwZGF0ZXMuXG4gICAgICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBjb250ZXh0O1xuICAgICAgcmVzb2x2ZWRPYnNlcnZlZEJpdHMgPSBNQVhfU0lHTkVEXzMxX0JJVF9JTlQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmVkT2JzZXJ2ZWRCaXRzID0gb2JzZXJ2ZWRCaXRzO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0SXRlbSA9IHtcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICBvYnNlcnZlZEJpdHM6IHJlc29sdmVkT2JzZXJ2ZWRCaXRzLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG5cbiAgICBpZiAobGFzdENvbnRleHREZXBlbmRlbmN5ID09PSBudWxsKSB7XG4gICAgICBpZiAoIShjdXJyZW50bHlSZW5kZXJpbmdGaWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkNvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuIEluIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIEluIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCBpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgZGVwZW5kZW5jeSBmb3IgdGhpcyBjb21wb25lbnQuIENyZWF0ZSBhIG5ldyBsaXN0LlxuXG5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGNvbnRleHRJdGVtO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICBsYW5lczogTm9MYW5lcyxcbiAgICAgICAgZmlyc3RDb250ZXh0OiBjb250ZXh0SXRlbSxcbiAgICAgICAgcmVzcG9uZGVyczogbnVsbFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIGEgbmV3IGNvbnRleHQgaXRlbS5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGxhc3RDb250ZXh0RGVwZW5kZW5jeS5uZXh0ID0gY29udGV4dEl0ZW07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgO1xufVxuXG52YXIgVXBkYXRlU3RhdGUgPSAwO1xudmFyIFJlcGxhY2VTdGF0ZSA9IDE7XG52YXIgRm9yY2VVcGRhdGUgPSAyO1xudmFyIENhcHR1cmVVcGRhdGUgPSAzOyAvLyBHbG9iYWwgc3RhdGUgdGhhdCBpcyByZXNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGNhbGxpbmcgYHByb2Nlc3NVcGRhdGVRdWV1ZWAuXG4vLyBJdCBzaG91bGQgb25seSBiZSByZWFkIHJpZ2h0IGFmdGVyIGNhbGxpbmcgYHByb2Nlc3NVcGRhdGVRdWV1ZWAsIHZpYVxuLy8gYGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmdgLlxuXG52YXIgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcbnZhciBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlO1xudmFyIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZTtcblxue1xuICBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gZmFsc2U7XG4gIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVVcGRhdGVRdWV1ZShmaWJlcikge1xuICB2YXIgcXVldWUgPSB7XG4gICAgYmFzZVN0YXRlOiBmaWJlci5tZW1vaXplZFN0YXRlLFxuICAgIGZpcnN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICBsYXN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICBzaGFyZWQ6IHtcbiAgICAgIHBlbmRpbmc6IG51bGxcbiAgICB9LFxuICAgIGVmZmVjdHM6IG51bGxcbiAgfTtcbiAgZmliZXIudXBkYXRlUXVldWUgPSBxdWV1ZTtcbn1cbmZ1bmN0aW9uIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgLy8gQ2xvbmUgdGhlIHVwZGF0ZSBxdWV1ZSBmcm9tIGN1cnJlbnQuIFVubGVzcyBpdCdzIGFscmVhZHkgYSBjbG9uZS5cbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gIGlmIChxdWV1ZSA9PT0gY3VycmVudFF1ZXVlKSB7XG4gICAgdmFyIGNsb25lID0ge1xuICAgICAgYmFzZVN0YXRlOiBjdXJyZW50UXVldWUuYmFzZVN0YXRlLFxuICAgICAgZmlyc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlLFxuICAgICAgbGFzdEJhc2VVcGRhdGU6IGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZSxcbiAgICAgIHNoYXJlZDogY3VycmVudFF1ZXVlLnNoYXJlZCxcbiAgICAgIGVmZmVjdHM6IGN1cnJlbnRRdWV1ZS5lZmZlY3RzXG4gICAgfTtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGNsb25lO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSB7XG4gICAgZXZlbnRUaW1lOiBldmVudFRpbWUsXG4gICAgbGFuZTogbGFuZSxcbiAgICB0YWc6IFVwZGF0ZVN0YXRlLFxuICAgIHBheWxvYWQ6IG51bGwsXG4gICAgY2FsbGJhY2s6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9O1xuICByZXR1cm4gdXBkYXRlO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICh1cGRhdGVRdWV1ZSA9PT0gbnVsbCkge1xuICAgIC8vIE9ubHkgb2NjdXJzIGlmIHRoZSBmaWJlciBoYXMgYmVlbiB1bm1vdW50ZWQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNoYXJlZFF1ZXVlID0gdXBkYXRlUXVldWUuc2hhcmVkO1xuICB2YXIgcGVuZGluZyA9IHNoYXJlZFF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgdXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgcGVuZGluZy5uZXh0ID0gdXBkYXRlO1xuICB9XG5cbiAgc2hhcmVkUXVldWUucGVuZGluZyA9IHVwZGF0ZTtcblxuICB7XG4gICAgaWYgKGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9PT0gc2hhcmVkUXVldWUgJiYgIWRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUpIHtcbiAgICAgIGVycm9yKCdBbiB1cGRhdGUgKHNldFN0YXRlLCByZXBsYWNlU3RhdGUsIG9yIGZvcmNlVXBkYXRlKSB3YXMgc2NoZWR1bGVkICcgKyAnZnJvbSBpbnNpZGUgYW4gdXBkYXRlIGZ1bmN0aW9uLiBVcGRhdGUgZnVuY3Rpb25zIHNob3VsZCBiZSBwdXJlLCAnICsgJ3dpdGggemVybyBzaWRlLWVmZmVjdHMuIENvbnNpZGVyIHVzaW5nIGNvbXBvbmVudERpZFVwZGF0ZSBvciBhICcgKyAnY2FsbGJhY2suJyk7XG5cbiAgICAgIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBjYXB0dXJlZFVwZGF0ZSkge1xuICAvLyBDYXB0dXJlZCB1cGRhdGVzIGFyZSB1cGRhdGVzIHRoYXQgYXJlIHRocm93biBieSBhIGNoaWxkIGR1cmluZyB0aGUgcmVuZGVyXG4gIC8vIHBoYXNlLiBUaGV5IHNob3VsZCBiZSBkaXNjYXJkZWQgaWYgdGhlIHJlbmRlciBpcyBhYm9ydGVkLiBUaGVyZWZvcmUsXG4gIC8vIHdlIHNob3VsZCBvbmx5IHB1dCB0aGVtIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlLCBub3QgdGhlIGN1cnJlbnQgb25lLlxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTsgLy8gQ2hlY2sgaWYgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgaXMgYSBjbG9uZS5cblxuICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gICAgaWYgKHF1ZXVlID09PSBjdXJyZW50UXVldWUpIHtcbiAgICAgIC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIGlzIHRoZSBzYW1lIGFzIGN1cnJlbnQuIFRoaXMgaGFwcGVucyB3aGVuXG4gICAgICAvLyB3ZSBiYWlsIG91dCBvbiBhIHBhcmVudCBmaWJlciB0aGF0IHRoZW4gY2FwdHVyZXMgYW4gZXJyb3IgdGhyb3duIGJ5XG4gICAgICAvLyBhIGNoaWxkLiBTaW5jZSB3ZSB3YW50IHRvIGFwcGVuZCB0aGUgdXBkYXRlIG9ubHkgdG8gdGhlIHdvcmstaW5cbiAgICAgIC8vIC1wcm9ncmVzcyBxdWV1ZSwgd2UgbmVlZCB0byBjbG9uZSB0aGUgdXBkYXRlcy4gV2UgdXN1YWxseSBjbG9uZSBkdXJpbmdcbiAgICAgIC8vIHByb2Nlc3NVcGRhdGVRdWV1ZSwgYnV0IHRoYXQgZGlkbid0IGhhcHBlbiBpbiB0aGlzIGNhc2UgYmVjYXVzZSB3ZVxuICAgICAgLy8gc2tpcHBlZCBvdmVyIHRoZSBwYXJlbnQgd2hlbiB3ZSBiYWlsZWQgb3V0LlxuICAgICAgdmFyIG5ld0ZpcnN0ID0gbnVsbDtcbiAgICAgIHZhciBuZXdMYXN0ID0gbnVsbDtcbiAgICAgIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG5cbiAgICAgIGlmIChmaXJzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSB1cGRhdGVzIGFuZCBjbG9uZSB0aGVtLlxuICAgICAgICB2YXIgdXBkYXRlID0gZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZS5ldmVudFRpbWUsXG4gICAgICAgICAgICBsYW5lOiB1cGRhdGUubGFuZSxcbiAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKG5ld0xhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNsb25lO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMYXN0Lm5leHQgPSBjbG9uZTtcbiAgICAgICAgICAgIG5ld0xhc3QgPSBjbG9uZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsKTsgLy8gQXBwZW5kIHRoZSBjYXB0dXJlZCB1cGRhdGUgdGhlIGVuZCBvZiB0aGUgY2xvbmVkIGxpc3QuXG5cblxuICAgICAgICBpZiAobmV3TGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xhc3QubmV4dCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICAgIG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGJhc2UgdXBkYXRlcy5cbiAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlID0ge1xuICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnRRdWV1ZS5iYXNlU3RhdGUsXG4gICAgICAgIGZpcnN0QmFzZVVwZGF0ZTogbmV3Rmlyc3QsXG4gICAgICAgIGxhc3RCYXNlVXBkYXRlOiBuZXdMYXN0LFxuICAgICAgICBzaGFyZWQ6IGN1cnJlbnRRdWV1ZS5zaGFyZWQsXG4gICAgICAgIGVmZmVjdHM6IGN1cnJlbnRRdWV1ZS5lZmZlY3RzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBxdWV1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gLy8gQXBwZW5kIHRoZSB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cblxuXG4gIHZhciBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuXG4gIGlmIChsYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIGxhc3RCYXNlVXBkYXRlLm5leHQgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgfVxuXG4gIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIGdldFN0YXRlRnJvbVVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUsIHVwZGF0ZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMsIGluc3RhbmNlKSB7XG4gIHN3aXRjaCAodXBkYXRlLnRhZykge1xuICAgIGNhc2UgUmVwbGFjZVN0YXRlOlxuICAgICAge1xuICAgICAgICB2YXIgcGF5bG9hZCA9IHVwZGF0ZS5wYXlsb2FkO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIFVwZGF0ZXIgZnVuY3Rpb25cbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICAgICAgfSAvLyBTdGF0ZSBvYmplY3RcblxuXG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgfVxuXG4gICAgY2FzZSBDYXB0dXJlVXBkYXRlOlxuICAgICAge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuICAgICAgfVxuICAgIC8vIEludGVudGlvbmFsIGZhbGx0aHJvdWdoXG5cbiAgICBjYXNlIFVwZGF0ZVN0YXRlOlxuICAgICAge1xuICAgICAgICB2YXIgX3BheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcbiAgICAgICAgdmFyIHBhcnRpYWxTdGF0ZTtcblxuICAgICAgICBpZiAodHlwZW9mIF9wYXlsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gVXBkYXRlciBmdW5jdGlvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFBhcnRpYWwgc3RhdGUgb2JqZWN0XG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gTnVsbCBhbmQgdW5kZWZpbmVkIGFyZSB0cmVhdGVkIGFzIG5vLW9wcy5cbiAgICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgICB9IC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG5cblxuICAgICAgICByZXR1cm4gX2Fzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGb3JjZVVwZGF0ZTpcbiAgICAgIHtcbiAgICAgICAgaGFzRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZXZTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBwcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgaXMgYWx3YXlzIG5vbi1udWxsIG9uIGEgQ2xhc3NDb21wb25lbnQgb3IgSG9zdFJvb3RcbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG5cbiAge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZDtcbiAgfVxuXG4gIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG4gIHZhciBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlOyAvLyBDaGVjayBpZiB0aGVyZSBhcmUgcGVuZGluZyB1cGRhdGVzLiBJZiBzbywgdHJhbnNmZXIgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cblxuICB2YXIgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmdRdWV1ZSAhPT0gbnVsbCkge1xuICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDsgLy8gVGhlIHBlbmRpbmcgcXVldWUgaXMgY2lyY3VsYXIuIERpc2Nvbm5lY3QgdGhlIHBvaW50ZXIgYmV0d2VlbiBmaXJzdFxuICAgIC8vIGFuZCBsYXN0IHNvIHRoYXQgaXQncyBub24tY2lyY3VsYXIuXG5cbiAgICB2YXIgbGFzdFBlbmRpbmdVcGRhdGUgPSBwZW5kaW5nUXVldWU7XG4gICAgdmFyIGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7IC8vIEFwcGVuZCBwZW5kaW5nIHVwZGF0ZXMgdG8gYmFzZSBxdWV1ZVxuXG4gICAgaWYgKGxhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICBmaXJzdEJhc2VVcGRhdGUgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RCYXNlVXBkYXRlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgfVxuXG4gICAgbGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTsgLy8gSWYgdGhlcmUncyBhIGN1cnJlbnQgcXVldWUsIGFuZCBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBiYXNlIHF1ZXVlLCB0aGVuXG4gICAgLy8gd2UgbmVlZCB0byB0cmFuc2ZlciB0aGUgdXBkYXRlcyB0byB0aGF0IHF1ZXVlLCB0b28uIEJlY2F1c2UgdGhlIGJhc2VcbiAgICAvLyBxdWV1ZSBpcyBhIHNpbmdseS1saW5rZWQgbGlzdCB3aXRoIG5vIGN5Y2xlcywgd2UgY2FuIGFwcGVuZCB0byBib3RoXG4gICAgLy8gbGlzdHMgYW5kIHRha2UgYWR2YW50YWdlIG9mIHN0cnVjdHVyYWwgc2hhcmluZy5cbiAgICAvLyBUT0RPOiBQYXNzIGBjdXJyZW50YCBhcyBhcmd1bWVudFxuXG4gICAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBhbHdheXMgbm9uLW51bGwgb24gYSBDbGFzc0NvbXBvbmVudCBvciBIb3N0Um9vdFxuICAgICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gICAgICB2YXIgY3VycmVudExhc3RCYXNlVXBkYXRlID0gY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuXG4gICAgICBpZiAoY3VycmVudExhc3RCYXNlVXBkYXRlICE9PSBsYXN0QmFzZVVwZGF0ZSkge1xuICAgICAgICBpZiAoY3VycmVudExhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgY3VycmVudFF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50TGFzdEJhc2VVcGRhdGUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBUaGVzZSB2YWx1ZXMgbWF5IGNoYW5nZSBhcyB3ZSBwcm9jZXNzIHRoZSBxdWV1ZS5cblxuXG4gIGlmIChmaXJzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGxpc3Qgb2YgdXBkYXRlcyB0byBjb21wdXRlIHRoZSByZXN1bHQuXG4gICAgdmFyIG5ld1N0YXRlID0gcXVldWUuYmFzZVN0YXRlOyAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIGFjY3VtdWxhdGUgdGhpcy4gSW5zdGVhZCwgd2UgY2FuIHJlbW92ZSByZW5kZXJMYW5lc1xuICAgIC8vIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG4gICAgdmFyIG5ld0xhbmVzID0gTm9MYW5lcztcbiAgICB2YXIgbmV3QmFzZVN0YXRlID0gbnVsbDtcbiAgICB2YXIgbmV3Rmlyc3RCYXNlVXBkYXRlID0gbnVsbDtcbiAgICB2YXIgbmV3TGFzdEJhc2VVcGRhdGUgPSBudWxsO1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdEJhc2VVcGRhdGU7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHVwZGF0ZS5sYW5lO1xuICAgICAgdmFyIHVwZGF0ZUV2ZW50VGltZSA9IHVwZGF0ZS5ldmVudFRpbWU7XG5cbiAgICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lKSkge1xuICAgICAgICAvLyBQcmlvcml0eSBpcyBpbnN1ZmZpY2llbnQuIFNraXAgdGhpcyB1cGRhdGUuIElmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgICAgIC8vIHNraXBwZWQgdXBkYXRlLCB0aGUgcHJldmlvdXMgdXBkYXRlL3N0YXRlIGlzIHRoZSBuZXcgYmFzZVxuICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZUV2ZW50VGltZSxcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdGaXJzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZSA9IGNsb25lO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IGNsb25lO1xuICAgICAgICB9IC8vIFVwZGF0ZSB0aGUgcmVtYWluaW5nIHByaW9yaXR5IGluIHRoZSBxdWV1ZS5cblxuXG4gICAgICAgIG5ld0xhbmVzID0gbWVyZ2VMYW5lcyhuZXdMYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlRXZlbnRUaW1lLFxuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGUgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIHNvIHdlIG5ldmVyIHdhbnQgdW5jb21taXRcbiAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBuZXZlciBiZSBza2lwcGVkIGJ5IHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgIGxhbmU6IE5vTGFuZSxcbiAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgfSAvLyBQcm9jZXNzIHRoaXMgdXBkYXRlLlxuXG5cbiAgICAgICAgbmV3U3RhdGUgPSBnZXRTdGF0ZUZyb21VcGRhdGUod29ya0luUHJvZ3Jlc3MsIHF1ZXVlLCB1cGRhdGUsIG5ld1N0YXRlLCBwcm9wcywgaW5zdGFuY2UpO1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB1cGRhdGUuY2FsbGJhY2s7XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ2FsbGJhY2s7XG4gICAgICAgICAgdmFyIGVmZmVjdHMgPSBxdWV1ZS5lZmZlY3RzO1xuXG4gICAgICAgICAgaWYgKGVmZmVjdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXVlLmVmZmVjdHMgPSBbdXBkYXRlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWZmZWN0cy5wdXNoKHVwZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuXG4gICAgICBpZiAodXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nO1xuXG4gICAgICAgIGlmIChwZW5kaW5nUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBmcm9tIGluc2lkZSBhIHJlZHVjZXIuIEFkZCB0aGUgbmV3XG4gICAgICAgICAgLy8gcGVuZGluZyB1cGRhdGVzIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kIGtlZXAgcHJvY2Vzc2luZy5cbiAgICAgICAgICB2YXIgX2xhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlOyAvLyBJbnRlbnRpb25hbGx5IHVuc291bmQuIFBlbmRpbmcgdXBkYXRlcyBmb3JtIGEgY2lyY3VsYXIgbGlzdCwgYnV0IHdlXG4gICAgICAgICAgLy8gdW5yYXZlbCB0aGVtIHdoZW4gdHJhbnNmZXJyaW5nIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG5cbiAgICAgICAgICB2YXIgX2ZpcnN0UGVuZGluZ1VwZGF0ZSA9IF9sYXN0UGVuZGluZ1VwZGF0ZS5uZXh0O1xuICAgICAgICAgIF9sYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDtcbiAgICAgICAgICB1cGRhdGUgPSBfZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gX2xhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBxdWV1ZS5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gbmV3Rmlyc3RCYXNlVXBkYXRlO1xuICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGU7IC8vIFNldCB0aGUgcmVtYWluaW5nIGV4cGlyYXRpb24gdGltZSB0byBiZSB3aGF0ZXZlciBpcyByZW1haW5pbmcgaW4gdGhlIHF1ZXVlLlxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGZpbmUgYmVjYXVzZSB0aGUgb25seSB0d28gb3RoZXIgdGhpbmdzIHRoYXQgY29udHJpYnV0ZSB0b1xuICAgIC8vIGV4cGlyYXRpb24gdGltZSBhcmUgcHJvcHMgYW5kIGNvbnRleHQuIFdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiB0aGVcbiAgICAvLyBiZWdpbiBwaGFzZSBieSB0aGUgdGltZSB3ZSBzdGFydCBwcm9jZXNzaW5nIHRoZSBxdWV1ZSwgc28gd2UndmUgYWxyZWFkeVxuICAgIC8vIGRlYWx0IHdpdGggdGhlIHByb3BzLiBDb250ZXh0IGluIGNvbXBvbmVudHMgdGhhdCBzcGVjaWZ5XG4gICAgLy8gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHRyaWNreTsgYnV0IHdlJ2xsIGhhdmUgdG8gYWNjb3VudCBmb3JcbiAgICAvLyB0aGF0IHJlZ2FyZGxlc3MuXG5cbiAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKG5ld0xhbmVzKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG5ld0xhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHtcbiAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgY29udGV4dCkge1xuICBpZiAoISh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgYXMgY2FsbGJhY2suIEV4cGVjdGVkIGEgZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6IFwiICsgY2FsbGJhY2sgKTtcbiAgICB9XG4gIH1cblxuICBjYWxsYmFjay5jYWxsKGNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpIHtcbiAgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB7XG4gIHJldHVybiBoYXNGb3JjZVVwZGF0ZTtcbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgZmluaXNoZWRRdWV1ZSwgaW5zdGFuY2UpIHtcbiAgLy8gQ29tbWl0IHRoZSBlZmZlY3RzXG4gIHZhciBlZmZlY3RzID0gZmluaXNoZWRRdWV1ZS5lZmZlY3RzO1xuICBmaW5pc2hlZFF1ZXVlLmVmZmVjdHMgPSBudWxsO1xuXG4gIGlmIChlZmZlY3RzICE9PSBudWxsKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZmZlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWZmZWN0ID0gZWZmZWN0c1tpXTtcbiAgICAgIHZhciBjYWxsYmFjayA9IGVmZmVjdC5jYWxsYmFjaztcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIGVmZmVjdC5jYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZmFrZUludGVybmFsSW5zdGFuY2UgPSB7fTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsgLy8gUmVhY3QuQ29tcG9uZW50IHVzZXMgYSBzaGFyZWQgZnJvemVuIG9iamVjdCBieSBkZWZhdWx0LlxuLy8gV2UnbGwgdXNlIGl0IHRvIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBsZWdhY3kgcmVmcy5cblxudmFyIGVtcHR5UmVmc09iamVjdCA9IG5ldyBSZWFjdC5Db21wb25lbnQoKS5yZWZzO1xudmFyIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGU7XG52YXIgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlO1xudmFyIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGU7XG52YXIgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlO1xudmFyIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZTtcbnZhciB3YXJuT25JbnZhbGlkQ2FsbGJhY2s7XG52YXIgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGU7XG52YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXM7XG52YXIgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUgPSBuZXcgU2V0KCk7XG4gIHZhciBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBuZXcgU2V0KCk7XG5cbiAgd2Fybk9uSW52YWxpZENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgaWYgKGNhbGxiYWNrID09PSBudWxsIHx8IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBjYWxsZXJOYW1lICsgJ18nICsgY2FsbGJhY2s7XG5cbiAgICBpZiAoIWRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5oYXMoa2V5KSkge1xuICAgICAgZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmFkZChrZXkpO1xuXG4gICAgICBlcnJvcignJXMoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH07XG5cbiAgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gZnVuY3Rpb24gKHR5cGUsIHBhcnRpYWxTdGF0ZSkge1xuICAgIGlmIChwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCk6IEEgdmFsaWQgc3RhdGUgb2JqZWN0IChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkLiAnICsgJ1lvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07IC8vIFRoaXMgaXMgc28gZ3Jvc3MgYnV0IGl0J3MgYXQgbGVhc3Qgbm9uLWNyaXRpY2FsIGFuZCBjYW4gYmUgcmVtb3ZlZCBpZlxuICAvLyBpdCBjYXVzZXMgcHJvYmxlbXMuIFRoaXMgaXMgbWVhbnQgdG8gZ2l2ZSBhIG5pY2VyIGVycm9yIG1lc3NhZ2UgZm9yXG4gIC8vIFJlYWN0RE9NMTUudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocmVhY3RET00xNkNvbXBvbmVudCxcbiAgLy8gLi4uKSkgd2hpY2ggb3RoZXJ3aXNlIHRocm93cyBhIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGEgZnVuY3Rpb25cIlxuICAvLyBleGNlcHRpb24uXG5cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmFrZUludGVybmFsSW5zdGFuY2UsICdfcHJvY2Vzc0NoaWxkQ29udGV4dCcsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGF2YWlsYWJsZSBpbiBSZWFjdCAxNisuIFRoaXMgbGlrZWx5IG1lYW5zIHlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBhbmQgYXJlIGF0dGVtcHRpbmcgdG8gbmVzdCBhIFJlYWN0IDE1IHRyZWUgaW5zaWRlIGEgUmVhY3QgMTYgdHJlZSB1c2luZyB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciwgd2hpY2ggaXNuJ3Qgc3VwcG9ydGVkLiBUcnkgdG8gbWFrZSBzdXJlIHlvdSBoYXZlIG9ubHkgb25lIGNvcHkgb2YgUmVhY3QgKGFuZCBpZGVhbGx5LCBzd2l0Y2ggdG8gUmVhY3RET00uY3JlYXRlUG9ydGFsKS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmZyZWV6ZShmYWtlSW50ZXJuYWxJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5leHRQcm9wcykge1xuICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICB7XG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBwYXJ0aWFsU3RhdGUgPSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuXG4gIHtcbiAgICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUoY3RvciwgcGFydGlhbFN0YXRlKTtcbiAgfSAvLyBNZXJnZSB0aGUgcGFydGlhbCBzdGF0ZSBhbmQgdGhlIHByZXZpb3VzIHN0YXRlLlxuXG5cbiAgdmFyIG1lbW9pemVkU3RhdGUgPSBwYXJ0aWFsU3RhdGUgPT09IG51bGwgfHwgcGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQgPyBwcmV2U3RhdGUgOiBfYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBtZW1vaXplZFN0YXRlOyAvLyBPbmNlIHRoZSB1cGRhdGUgcXVldWUgaXMgZW1wdHksIHBlcnNpc3QgdGhlIGRlcml2ZWQgc3RhdGUgb250byB0aGVcbiAgLy8gYmFzZSBzdGF0ZS5cblxuICBpZiAod29ya0luUHJvZ3Jlc3MubGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBRdWV1ZSBpcyBhbHdheXMgbm9uLW51bGwgZm9yIGNsYXNzZXNcbiAgICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICB1cGRhdGVRdWV1ZS5iYXNlU3RhdGUgPSBtZW1vaXplZFN0YXRlO1xuICB9XG59XG52YXIgY2xhc3NDb21wb25lbnRVcGRhdGVyID0ge1xuICBpc01vdW50ZWQ6IGlzTW91bnRlZCxcbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH0sXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUudGFnID0gUmVwbGFjZVN0YXRlO1xuICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ3JlcGxhY2VTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfSxcbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAoaW5zdCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgICBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkVXBkYXRlID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gICAge1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9yKCclcy5zaG91bGRDb21wb25lbnRVcGRhdGUoKTogUmV0dXJuZWQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSAnICsgJ2Jvb2xlYW4gdmFsdWUuIE1ha2Ugc3VyZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZS4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2hvdWxkVXBkYXRlO1xuICB9XG5cbiAgaWYgKGN0b3IucHJvdG90eXBlICYmIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50KSB7XG4gICAgcmV0dXJuICFzaGFsbG93RXF1YWwob2xkUHJvcHMsIG5ld1Byb3BzKSB8fCAhc2hhbGxvd0VxdWFsKG9sZFN0YXRlLCBuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcbiAgICB2YXIgcmVuZGVyUHJlc2VudCA9IGluc3RhbmNlLnJlbmRlcjtcblxuICAgIGlmICghcmVuZGVyUHJlc2VudCkge1xuICAgICAgaWYgKGN0b3IucHJvdG90eXBlICYmIHR5cGVvZiBjdG9yLnByb3RvdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50ICcgKyAnaW5zdGFuY2U6IGRpZCB5b3UgYWNjaWRlbnRhbGx5IHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgY29uc3RydWN0b3I/JywgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArICdpbnN0YW5jZTogeW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBkZWZpbmUgYHJlbmRlcmAuJywgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmdldEluaXRpYWxTdGF0ZSAmJiAhaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkICYmICFpbnN0YW5jZS5zdGF0ZSkge1xuICAgICAgZXJyb3IoJ2dldEluaXRpYWxTdGF0ZSB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICsgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArICdEaWQgeW91IG1lYW4gdG8gZGVmaW5lIGEgc3RhdGUgcHJvcGVydHkgaW5zdGVhZD8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzICYmICFpbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgKyAnVXNlIGEgc3RhdGljIHByb3BlcnR5IHRvIGRlZmluZSBkZWZhdWx0UHJvcHMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcFR5cGVzKSB7XG4gICAgICBlcnJvcigncHJvcFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgcHJvcFR5cGVzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlKSB7XG4gICAgICBlcnJvcignY29udGV4dFR5cGUgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZSBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChpbnN0YW5jZS5jb250ZXh0VHlwZXMpIHtcbiAgICAgICAgZXJyb3IoJ2NvbnRleHRUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3Rvci5jb250ZXh0VHlwZSAmJiBjdG9yLmNvbnRleHRUeXBlcyAmJiAhZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMuaGFzKGN0b3IpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzLmFkZChjdG9yKTtcblxuICAgICAgICBlcnJvcignJXMgZGVjbGFyZXMgYm90aCBjb250ZXh0VHlwZXMgYW5kIGNvbnRleHRUeXBlIHN0YXRpYyBwcm9wZXJ0aWVzLiAnICsgJ1RoZSBsZWdhY3kgY29udGV4dFR5cGVzIHByb3BlcnR5IHdpbGwgYmUgaWdub3JlZC4nLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnRTaG91bGRVcGRhdGUoKS4gRGlkIHlvdSBtZWFuIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpPyAnICsgJ1RoZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyAnICsgJ2V4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCAmJiB0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkuICcgKyAnc2hvdWxkQ29tcG9uZW50VXBkYXRlIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIGV4dGVuZGluZyBSZWFjdC5QdXJlQ29tcG9uZW50LiAnICsgJ1BsZWFzZSBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB1c2VkLicsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0EgcHVyZSBjb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50RGlkVW5tb3VudCgpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0RpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsVW5tb3VudCgpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudERpZFJlY2VpdmVQcm9wcygpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0lmIHlvdSBtZWFudCB0byB1cGRhdGUgdGhlIHN0YXRlIGluIHJlc3BvbnNlIHRvIGNoYW5naW5nIHByb3BzLCAnICsgJ3VzZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCkuIElmIHlvdSBtZWFudCB0byBmZXRjaCBkYXRhIG9yICcgKyAncnVuIHNpZGUtZWZmZWN0cyBvciBtdXRhdGlvbnMgYWZ0ZXIgUmVhY3QgaGFzIHVwZGF0ZWQgdGhlIFVJLCB1c2UgY29tcG9uZW50RGlkVXBkYXRlKCkuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ1VOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBoYXNNdXRhdGVkUHJvcHMgPSBpbnN0YW5jZS5wcm9wcyAhPT0gbmV3UHJvcHM7XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IHVuZGVmaW5lZCAmJiBoYXNNdXRhdGVkUHJvcHMpIHtcbiAgICAgIGVycm9yKCclcyguLi4pOiBXaGVuIGNhbGxpbmcgc3VwZXIoKSBpbiBgJXNgLCBtYWtlIHN1cmUgdG8gcGFzcyAnICsgXCJ1cCB0aGUgc2FtZSBwcm9wcyB0aGF0IHlvdXIgY29tcG9uZW50J3MgY29uc3RydWN0b3Igd2FzIHBhc3NlZC5cIiwgbmFtZSwgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmRlZmF1bHRQcm9wcykge1xuICAgICAgZXJyb3IoJ1NldHRpbmcgZGVmYXVsdFByb3BzIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgaWdub3JlZC4nICsgJyBJbnN0ZWFkLCBkZWZpbmUgZGVmYXVsdFByb3BzIGFzIGEgc3RhdGljIHByb3BlcnR5IG9uICVzLicsIG5hbWUsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAhZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmhhcyhjdG9yKSkge1xuICAgICAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmFkZChjdG9yKTtcblxuICAgICAgZXJyb3IoJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIHNob3VsZCBiZSB1c2VkIHdpdGggY29tcG9uZW50RGlkVXBkYXRlKCkuICcgKyAnVGhpcyBjb21wb25lbnQgZGVmaW5lcyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIG9ubHkuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3Rvci5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhbiBpbnN0YW5jZSBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIF9zdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gICAgaWYgKF9zdGF0ZSAmJiAodHlwZW9mIF9zdGF0ZSAhPT0gJ29iamVjdCcgfHwgaXNBcnJheShfc3RhdGUpKSkge1xuICAgICAgZXJyb3IoJyVzLnN0YXRlOiBtdXN0IGJlIHNldCB0byBhbiBvYmplY3Qgb3IgbnVsbCcsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdG9yLmNoaWxkQ29udGV4dFR5cGVzICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3IoJyVzLmdldENoaWxkQ29udGV4dCgpOiBjaGlsZENvbnRleHRUeXBlcyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gJyArICd1c2UgZ2V0Q2hpbGRDb250ZXh0KCkuJywgbmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UudXBkYXRlciA9IGNsYXNzQ29tcG9uZW50VXBkYXRlcjtcbiAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIFRoZSBpbnN0YW5jZSBuZWVkcyBhY2Nlc3MgdG8gdGhlIGZpYmVyIHNvIHRoYXQgaXQgY2FuIHNjaGVkdWxlIHVwZGF0ZXNcblxuICBzZXQoaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzKTtcblxuICB7XG4gICAgaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IGZha2VJbnRlcm5hbEluc3RhbmNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHByb3BzKSB7XG4gIHZhciBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA9IGZhbHNlO1xuICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB2YXIgY29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcblxuICB7XG4gICAgaWYgKCdjb250ZXh0VHlwZScgaW4gY3Rvcikge1xuICAgICAgdmFyIGlzVmFsaWQgPSAvLyBBbGxvdyBudWxsIGZvciBjb25kaXRpb25hbCBkZWNsYXJhdGlvblxuICAgICAgY29udGV4dFR5cGUgPT09IG51bGwgfHwgY29udGV4dFR5cGUgIT09IHVuZGVmaW5lZCAmJiBjb250ZXh0VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFICYmIGNvbnRleHRUeXBlLl9jb250ZXh0ID09PSB1bmRlZmluZWQ7IC8vIE5vdCBhIDxDb250ZXh0LkNvbnN1bWVyPlxuXG4gICAgICBpZiAoIWlzVmFsaWQgJiYgIWRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5oYXMoY3RvcikpIHtcbiAgICAgICAgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmFkZChjdG9yKTtcbiAgICAgICAgdmFyIGFkZGVuZHVtID0gJyc7XG5cbiAgICAgICAgaWYgKGNvbnRleHRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIHVuZGVmaW5lZC4gJyArICdUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSB0eXBvIG9yIGJ5IG1peGluZyB1cCBuYW1lZCBhbmQgZGVmYXVsdCBpbXBvcnRzLiAnICsgJ1RoaXMgY2FuIGFsc28gaGFwcGVuIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3ksIHNvICcgKyAndHJ5IG1vdmluZyB0aGUgY3JlYXRlQ29udGV4dCgpIGNhbGwgdG8gYSBzZXBhcmF0ZSBmaWxlLic7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHRUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYSAnICsgdHlwZW9mIGNvbnRleHRUeXBlICsgJy4nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuUHJvdmlkZXIgaW5zdGVhZD8nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlLl9jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICBhZGRlbmR1bSA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyB0aGUgQ29udGV4dC5Db25zdW1lciBpbnN0ZWFkPyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY29udGV4dFR5cGUpLmpvaW4oJywgJykgKyAnfS4nO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3IoJyVzIGRlZmluZXMgYW4gaW52YWxpZCBjb250ZXh0VHlwZS4gJyArICdjb250ZXh0VHlwZSBzaG91bGQgcG9pbnQgdG8gdGhlIENvbnRleHQgb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZUNvbnRleHQoKS4lcycsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCcsIGFkZGVuZHVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICB2YXIgY29udGV4dFR5cGVzID0gY3Rvci5jb250ZXh0VHlwZXM7XG4gICAgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBjb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG4gICAgY29udGV4dCA9IGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID8gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSA6IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfSAvLyBJbnN0YW50aWF0ZSB0d2ljZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG5cblxuICB7XG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpO1xuICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGUgIT09IG51bGwgJiYgaW5zdGFuY2Uuc3RhdGUgIT09IHVuZGVmaW5lZCA/IGluc3RhbmNlLnN0YXRlIDogbnVsbDtcbiAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgc3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJ2Alc2AgdXNlcyBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBidXQgaXRzIGluaXRpYWwgc3RhdGUgaXMgJyArICclcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuIEluc3RlYWQsIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZSBieSAnICsgJ2Fzc2lnbmluZyBhbiBvYmplY3QgdG8gYHRoaXMuc3RhdGVgIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBgJXNgLiAnICsgJ1RoaXMgZW5zdXJlcyB0aGF0IGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGFyZ3VtZW50cyBoYXZlIGEgY29uc2lzdGVudCBzaGFwZS4nLCBjb21wb25lbnROYW1lLCBpbnN0YW5jZS5zdGF0ZSA9PT0gbnVsbCA/ICdudWxsJyA6ICd1bmRlZmluZWQnLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9IC8vIElmIG5ldyBjb21wb25lbnQgQVBJcyBhcmUgZGVmaW5lZCwgXCJ1bnNhZmVcIiBsaWZlY3ljbGVzIHdvbid0IGJlIGNhbGxlZC5cbiAgICAvLyBXYXJuIGFib3V0IHRoZXNlIGxpZmVjeWNsZXMgaWYgdGhleSBhcmUgcHJlc2VudC5cbiAgICAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgbWV0aG9kcyB0aG91Z2guXG5cblxuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgZm91bmRXaWxsTW91bnROYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxVcGRhdGVOYW1lID0gbnVsbDtcblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gJ2NvbXBvbmVudFdpbGxNb3VudCc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbE1vdW50TmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdjb21wb25lbnRXaWxsVXBkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsIHx8IGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgfHwgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICAgIHZhciBuZXdBcGlOYW1lID0gdHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nID8gJ2dldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpJyA6ICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpJztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuaGFzKF9jb21wb25lbnROYW1lKSkge1xuICAgICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuYWRkKF9jb21wb25lbnROYW1lKTtcblxuICAgICAgICAgIGVycm9yKCdVbnNhZmUgbGVnYWN5IGxpZmVjeWNsZXMgd2lsbCBub3QgYmUgY2FsbGVkIGZvciBjb21wb25lbnRzIHVzaW5nIG5ldyBjb21wb25lbnQgQVBJcy5cXG5cXG4nICsgJyVzIHVzZXMgJXMgYnV0IGFsc28gY29udGFpbnMgdGhlIGZvbGxvd2luZyBsZWdhY3kgbGlmZWN5Y2xlczolcyVzJXNcXG5cXG4nICsgJ1RoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcbicgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcycsIF9jb21wb25lbnROYW1lLCBuZXdBcGlOYW1lLCBmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxNb3VudE5hbWUgOiAnJywgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgOiAnJywgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFVwZGF0ZU5hbWUgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAvLyBSZWFjdEZpYmVyQ29udGV4dCB1c3VhbGx5IHVwZGF0ZXMgdGhpcyBjYWNoZSBidXQgY2FuJ3QgZm9yIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2VzLlxuXG5cbiAgaWYgKGlzTGVnYWN5Q29udGV4dENvbnN1bWVyKSB7XG4gICAgY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbE1vdW50KHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpO1xuICB9XG5cbiAgaWYgKG9sZFN0YXRlICE9PSBpbnN0YW5jZS5zdGF0ZSkge1xuICAgIHtcbiAgICAgIGVycm9yKCclcy5jb21wb25lbnRXaWxsTW91bnQoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvIHRoaXMuc3RhdGUgaXMgJyArIFwiZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIFwiICsgJ2NvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgfVxuXG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgfVxuXG4gIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gb2xkU3RhdGUpIHtcbiAgICB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byAnICsgXCJ0aGlzLnN0YXRlIGlzIGRlcHJlY2F0ZWQgKGV4Y2VwdCBpbnNpZGUgYSBjb21wb25lbnQncyBcIiArICdjb25zdHJ1Y3RvcikuIFVzZSBzZXRTdGF0ZSBpbnN0ZWFkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKGluc3RhbmNlLCBpbnN0YW5jZS5zdGF0ZSwgbnVsbCk7XG4gIH1cbn0gLy8gSW52b2tlcyB0aGUgbW91bnQgbGlmZS1jeWNsZXMgb24gYSBwcmV2aW91c2x5IG5ldmVyIHJlbmRlcmVkIGluc3RhbmNlLlxuXG5cbmZ1bmN0aW9uIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKTtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICBpbnN0YW5jZS5yZWZzID0gZW1wdHlSZWZzT2JqZWN0O1xuICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgaW5zdGFuY2UuY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBpbnN0YW5jZS5jb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHtcbiAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgPT09IG5ld1Byb3BzKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXM6IEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBhc3NpZ24gcHJvcHMgZGlyZWN0bHkgdG8gc3RhdGUgJyArIFwiYmVjYXVzZSB1cGRhdGVzIHRvIHByb3BzIHdvbid0IGJlIHJlZmxlY3RlZCBpbiBzdGF0ZS4gXCIgKyAnSW4gbW9zdCBjYXNlcywgaXQgaXMgYmV0dGVyIHRvIHVzZSBwcm9wcyBkaXJlY3RseS4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3Mod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH0gLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cblxuICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBjYWxsQ29tcG9uZW50V2lsbE1vdW50KHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7IC8vIElmIHdlIGhhZCBhZGRpdGlvbmFsIHN0YXRlIHVwZGF0ZXMgZHVyaW5nIHRoaXMgbGlmZS1jeWNsZSwgbGV0J3NcbiAgICAvLyBwcm9jZXNzIHRoZW0gbm93LlxuXG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgaW5zdGFuY2UucHJvcHMgPSBvbGRQcm9wcztcbiAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuICB2YXIgbmV4dENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgbmV4dENvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBuZXh0TGVnYWN5VW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgdmFyIGhhc05ld0xpZmVjeWNsZXMgPSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJzsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAvLyBldmVyIHRoZSBwcmV2aW91c2x5IGF0dGVtcHRlZCB0byByZW5kZXIgLSBub3QgdGhlIFwiY3VycmVudFwiLiBIb3dldmVyLFxuICAvLyBkdXJpbmcgY29tcG9uZW50RGlkVXBkYXRlIHdlIHBhc3MgdGhlIFwiY3VycmVudFwiIHByb3BzLlxuICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIG5ld1N0YXRlID0gaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMgJiYgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkpIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuICAgIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfSAvLyBJZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuZWQgZmFsc2UsIHdlIHNob3VsZCBzdGlsbCB1cGRhdGUgdGhlXG4gICAgLy8gbWVtb2l6ZWQgc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHdvcmsgY2FuIGJlIHJldXNlZC5cblxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5ld1Byb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfSAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGluc3RhbmNlJ3Mgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCBwb2ludGVycyBldmVuXG4gIC8vIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlLlxuXG5cbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgaW5zdGFuY2UuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufSAvLyBJbnZva2VzIHRoZSB1cGRhdGUgbGlmZS1jeWNsZXMgYW5kIHJldHVybnMgZmFsc2UgaWYgaXQgc2hvdWxkbid0IHJlcmVuZGVyLlxuXG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzSW5zdGFuY2UoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgdW5yZXNvbHZlZE9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MudHlwZSA9PT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPyB1bnJlc29sdmVkT2xkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIHVucmVzb2x2ZWRPbGRQcm9wcyk7XG4gIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gIHZhciB1bnJlc29sdmVkTmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBvbGRDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgbmV4dENvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5leHRVbm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIG5leHRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgbmV4dFVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIHZhciBoYXNOZXdMaWZlY3ljbGVzID0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbic7IC8vIE5vdGU6IER1cmluZyB0aGVzZSBsaWZlLWN5Y2xlcywgaW5zdGFuY2UucHJvcHMvaW5zdGFuY2Uuc3RhdGUgYXJlIHdoYXRcbiAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgLy8gZHVyaW5nIGNvbXBvbmVudERpZFVwZGF0ZSB3ZSBwYXNzIHRoZSBcImN1cnJlbnRcIiBwcm9wcy5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gdW5yZXNvbHZlZE5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIG5ld1N0YXRlID0gaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgPT09IHVucmVzb2x2ZWROZXdQcm9wcyAmJiBvbGRTdGF0ZSA9PT0gbmV3U3RhdGUgJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkgJiYgIWNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSkge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuICAgIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgfVxuICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHByb3BzL3N0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn1cblxudmFyIGRpZFdhcm5BYm91dE1hcHM7XG52YXIgZGlkV2FybkFib3V0R2VuZXJhdG9ycztcbnZhciBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xudmFyIG93bmVySGFzS2V5VXNlV2FybmluZztcbnZhciBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmc7XG5cbnZhciB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChjaGlsZCwgcmV0dXJuRmliZXIpIHt9O1xuXG57XG4gIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG4gIC8qKlxuICAgKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gICAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICAgKiB1cGRhdGVzLlxuICAgKi9cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nID0ge307XG5cbiAgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAoY2hpbGQsIHJldHVybkZpYmVyKSB7XG4gICAgaWYgKGNoaWxkID09PSBudWxsIHx8IHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNoaWxkLl9zdG9yZSB8fCBjaGlsZC5fc3RvcmUudmFsaWRhdGVkIHx8IGNoaWxkLmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEodHlwZW9mIGNoaWxkLl9zdG9yZSA9PT0gJ29iamVjdCcpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0IENvbXBvbmVudCBpbiB3YXJuRm9yTWlzc2luZ0tleSBzaG91bGQgaGF2ZSBhIF9zdG9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlICcgKyAnXCJrZXlcIiBwcm9wLiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgJyArICdtb3JlIGluZm9ybWF0aW9uLicpO1xuICB9O1xufVxuXG52YXIgaXNBcnJheSQxID0gQXJyYXkuaXNBcnJheTtcblxuZnVuY3Rpb24gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KSB7XG4gIHZhciBtaXhlZFJlZiA9IGVsZW1lbnQucmVmO1xuXG4gIGlmIChtaXhlZFJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgbWl4ZWRSZWYgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG1peGVkUmVmICE9PSAnb2JqZWN0Jykge1xuICAgIHtcbiAgICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgb25jZSB3ZSB0dXJuIG9uIHRoZSBzdHJpbmcgcmVmIHdhcm5pbmcgZm9yXG4gICAgICAvLyBldmVyeW9uZSwgYmVjYXVzZSB0aGUgc3RyaWN0IG1vZGUgY2FzZSB3aWxsIG5vIGxvbmdlciBiZSByZWxldmFudFxuICAgICAgaWYgKChyZXR1cm5GaWJlci5tb2RlICYgU3RyaWN0TW9kZSB8fCB3YXJuQWJvdXRTdHJpbmdSZWZzKSAmJiAvLyBXZSB3YXJuIGluIFJlYWN0RWxlbWVudC5qcyBpZiBvd25lciBhbmQgc2VsZiBhcmUgZXF1YWwgZm9yIHN0cmluZyByZWZzXG4gICAgICAvLyBiZWNhdXNlIHRoZXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvblxuICAgICAgLy8gdXNpbmcgYSBjb2RlbW9kLiBUaGVyZWZvcmUsIHdlIGRvbid0IGhhdmUgdG8gd2FybiBhYm91dCBzdHJpbmcgcmVmcyBhZ2Fpbi5cbiAgICAgICEoZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fc2VsZiAmJiBlbGVtZW50Ll9vd25lci5zdGF0ZU5vZGUgIT09IGVsZW1lbnQuX3NlbGYpKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlcnJvcignQSBzdHJpbmcgcmVmLCBcIiVzXCIsIGhhcyBiZWVuIGZvdW5kIHdpdGhpbiBhIHN0cmljdCBtb2RlIHRyZWUuICcgKyAnU3RyaW5nIHJlZnMgYXJlIGEgc291cmNlIG9mIHBvdGVudGlhbCBidWdzIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4gJyArICdXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBtaXhlZFJlZik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC5fb3duZXIpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIGluc3Q7XG5cbiAgICAgIGlmIChvd25lcikge1xuICAgICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuXG4gICAgICAgIGlmICghKG93bmVyRmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBoYXZlIHN0cmluZyByZWZzLiBXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgaW5zdGVhZC4gTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5zdCA9IG93bmVyRmliZXIuc3RhdGVOb2RlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWluc3QpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIk1pc3Npbmcgb3duZXIgZm9yIHN0cmluZyByZWYgXCIgKyBtaXhlZFJlZiArIFwiLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHN0cmluZ1JlZiA9ICcnICsgbWl4ZWRSZWY7IC8vIENoZWNrIGlmIHByZXZpb3VzIHN0cmluZyByZWYgbWF0Y2hlcyBuZXcgc3RyaW5nIHJlZlxuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgY3VycmVudC5yZWYgPT09ICdmdW5jdGlvbicgJiYgY3VycmVudC5yZWYuX3N0cmluZ1JlZiA9PT0gc3RyaW5nUmVmKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50LnJlZjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmVmcyA9IGluc3QucmVmcztcblxuICAgICAgICBpZiAocmVmcyA9PT0gZW1wdHlSZWZzT2JqZWN0KSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGxhenkgcG9vbGVkIGZyb3plbiBvYmplY3QsIHNvIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZS5cbiAgICAgICAgICByZWZzID0gaW5zdC5yZWZzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBkZWxldGUgcmVmc1tzdHJpbmdSZWZdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZnNbc3RyaW5nUmVmXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZWYuX3N0cmluZ1JlZiA9IHN0cmluZ1JlZjtcbiAgICAgIHJldHVybiByZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghKHR5cGVvZiBtaXhlZFJlZiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCByZWYgdG8gYmUgYSBmdW5jdGlvbiwgYSBzdHJpbmcsIGFuIG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVSZWYoKSwgb3IgbnVsbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZWxlbWVudC5fb3duZXIpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgcmVmIHdhcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcgKFwiICsgbWl4ZWRSZWYgKyBcIikgYnV0IG5vIG93bmVyIHdhcyBzZXQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgZnVuY3Rpb24gY29tcG9uZW50XFxuMi4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50J3MgcmVuZGVyIG1ldGhvZFxcbjMuIFlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWRcXG5TZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlZnMtbXVzdC1oYXZlLW93bmVyIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWl4ZWRSZWY7XG59XG5cbmZ1bmN0aW9uIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpIHtcbiAgaWYgKHJldHVybkZpYmVyLnR5cGUgIT09ICd0ZXh0YXJlYScpIHtcbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgKyAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0NoaWxkKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKG5ld0NoaWxkKS5qb2luKCcsICcpICsgJ30nIDogbmV3Q2hpbGQpICsgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKSB7XG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICBpZiAob3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdGdW5jdGlvbnMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLiBUaGlzIG1heSBoYXBwZW4gaWYgJyArICd5b3UgcmV0dXJuIGEgQ29tcG9uZW50IGluc3RlYWQgb2YgPENvbXBvbmVudCAvPiBmcm9tIHJlbmRlci4gJyArICdPciBtYXliZSB5b3UgbWVhbnQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHJldHVybiBpdC4nKTtcbiAgfVxufSAvLyBXZSBhdm9pZCBpbmxpbmluZyB0aGlzIHRvIGF2b2lkIHBvdGVudGlhbCBkZW9wdHMgZnJvbSB1c2luZyB0cnkvY2F0Y2guXG4vLyB0byBiZSBhYmxlIHRvIG9wdGltaXplIGVhY2ggcGF0aCBpbmRpdmlkdWFsbHkgYnkgYnJhbmNoaW5nIGVhcmx5LiBUaGlzIG5lZWRzXG4vLyBhIGNvbXBpbGVyIG9yIHdlIGNhbiBkbyBpdCBtYW51YWxseS4gSGVscGVycyB0aGF0IGRvbid0IG5lZWQgdGhpcyBicmFuY2hpbmdcbi8vIGxpdmUgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5cbmZ1bmN0aW9uIENoaWxkUmVjb25jaWxlcihzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gIGZ1bmN0aW9uIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKSB7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGVsZXRpb25zIGFyZSBhZGRlZCBpbiByZXZlcnNlZCBvcmRlciBzbyB3ZSBhZGQgaXQgdG8gdGhlIGZyb250LlxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSByZXR1cm4gZmliZXIncyBlZmZlY3QgbGlzdCBpcyBlbXB0eSBleGNlcHQgZm9yXG4gICAgLy8gZGVsZXRpb25zLCBzbyB3ZSBjYW4ganVzdCBhcHBlbmQgdGhlIGRlbGV0aW9uIHRvIHRoZSBsaXN0LiBUaGUgcmVtYWluaW5nXG4gICAgLy8gZWZmZWN0cyBhcmVuJ3QgYWRkZWQgdW50aWwgdGhlIGNvbXBsZXRlIHBoYXNlLiBPbmNlIHdlIGltcGxlbWVudFxuICAgIC8vIHJlc3VtaW5nLCB0aGlzIG1heSBub3QgYmUgdHJ1ZS5cblxuXG4gICAgdmFyIGxhc3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3QgIT09IG51bGwpIHtcbiAgICAgIGxhc3QubmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICB9XG5cbiAgICBjaGlsZFRvRGVsZXRlLm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGNoaWxkVG9EZWxldGUuZmxhZ3MgPSBEZWxldGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gVE9ETzogRm9yIHRoZSBzaG91bGRDbG9uZSBjYXNlLCB0aGlzIGNvdWxkIGJlIG1pY3JvLW9wdGltaXplZCBhIGJpdCBieVxuICAgIC8vIGFzc3VtaW5nIHRoYXQgYWZ0ZXIgdGhlIGZpcnN0IGNoaWxkIHdlJ3ZlIGFscmVhZHkgYWRkZWQgZXZlcnl0aGluZy5cblxuXG4gICAgdmFyIGNoaWxkVG9EZWxldGUgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZFRvRGVsZXRlICE9PSBudWxsKSB7XG4gICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGRUb0RlbGV0ZSk7XG4gICAgICBjaGlsZFRvRGVsZXRlID0gY2hpbGRUb0RlbGV0ZS5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgLy8gQWRkIHRoZSByZW1haW5pbmcgY2hpbGRyZW4gdG8gYSB0ZW1wb3JhcnkgbWFwIHNvIHRoYXQgd2UgY2FuIGZpbmQgdGhlbSBieVxuICAgIC8vIGtleXMgcXVpY2tseS4gSW1wbGljaXQgKG51bGwpIGtleXMgZ2V0IGFkZGVkIHRvIHRoaXMgc2V0IHdpdGggdGhlaXIgaW5kZXhcbiAgICAvLyBpbnN0ZWFkLlxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbmV3IE1hcCgpO1xuICAgIHZhciBleGlzdGluZ0NoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoZXhpc3RpbmdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGV4aXN0aW5nQ2hpbGQua2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQua2V5LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQuaW5kZXgsIGV4aXN0aW5nQ2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBleGlzdGluZ0NoaWxkID0gZXhpc3RpbmdDaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBleGlzdGluZ0NoaWxkcmVuO1xuICB9XG5cbiAgZnVuY3Rpb24gdXNlRmliZXIoZmliZXIsIHBlbmRpbmdQcm9wcykge1xuICAgIC8vIFdlIGN1cnJlbnRseSBzZXQgc2libGluZyB0byBudWxsIGFuZCBpbmRleCB0byAwIGhlcmUgYmVjYXVzZSBpdCBpcyBlYXN5XG4gICAgLy8gdG8gZm9yZ2V0IHRvIGRvIGJlZm9yZSByZXR1cm5pbmcgaXQuIEUuZy4gZm9yIHRoZSBzaW5nbGUgY2hpbGQgY2FzZS5cbiAgICB2YXIgY2xvbmUgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhmaWJlciwgcGVuZGluZ1Byb3BzKTtcbiAgICBjbG9uZS5pbmRleCA9IDA7XG4gICAgY2xvbmUuc2libGluZyA9IG51bGw7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJbmRleCkge1xuICAgIG5ld0ZpYmVyLmluZGV4ID0gbmV3SW5kZXg7XG5cbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50ID0gbmV3RmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciBvbGRJbmRleCA9IGN1cnJlbnQuaW5kZXg7XG5cbiAgICAgIGlmIChvbGRJbmRleCA8IGxhc3RQbGFjZWRJbmRleCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgbW92ZS5cbiAgICAgICAgbmV3RmliZXIuZmxhZ3MgPSBQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGl0ZW0gY2FuIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgIHJldHVybiBvbGRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyBhbiBpbnNlcnRpb24uXG4gICAgICBuZXdGaWJlci5mbGFncyA9IFBsYWNlbWVudDtcbiAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2VTaW5nbGVDaGlsZChuZXdGaWJlcikge1xuICAgIC8vIFRoaXMgaXMgc2ltcGxlciBmb3IgdGhlIHNpbmdsZSBjaGlsZCBjYXNlLiBXZSBvbmx5IG5lZWQgdG8gZG8gYVxuICAgIC8vIHBsYWNlbWVudCBmb3IgaW5zZXJ0aW5nIG5ldyBjaGlsZHJlbi5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgIG5ld0ZpYmVyLmZsYWdzID0gUGxhY2VtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBuZXdGaWJlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50LCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KHRleHRDb250ZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgdGV4dENvbnRlbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGN1cnJlbnQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnQudHlwZSB8fCAoIC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhjdXJyZW50LCBlbGVtZW50KSApKSB7XG4gICAgICAgIC8vIE1vdmUgYmFzZWQgb24gaW5kZXhcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgZWxlbWVudC5wcm9wcyk7XG4gICAgICAgIGV4aXN0aW5nLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBleGlzdGluZy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH1cbiAgICB9IC8vIEluc2VydFxuXG5cbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50LCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEhvc3RQb3J0YWwgfHwgY3VycmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyAhPT0gcG9ydGFsLmNvbnRhaW5lckluZm8gfHwgY3VycmVudC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gIT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGZyYWdtZW50LCBsYW5lcywga2V5KSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEZyYWdtZW50KSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBrZXkpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIGZyYWdtZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cy4gSWYgdGhlIHByZXZpb3VzIG5vZGUgaXMgaW1wbGljaXRseSBrZXllZFxuICAgICAgLy8gd2UgY2FuIGNvbnRpbnVlIHRvIHJlcGxhY2UgaXQgd2l0aG91dCBhYm9ydGluZyBldmVuIGlmIGl0IGlzIG5vdCBhIHRleHRcbiAgICAgIC8vIG5vZGUuXG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQoJycgKyBuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgICAgICAgX2NyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBudWxsLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICBfY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX2NyZWF0ZWQyID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgICAgICAgIF9jcmVhdGVkMi5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDI7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICB2YXIgX2NyZWF0ZWQzID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBudWxsKTtcblxuICAgICAgICBfY3JlYXRlZDMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIHJldHVybiBfY3JlYXRlZDM7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAvLyBVcGRhdGUgdGhlIGZpYmVyIGlmIHRoZSBrZXlzIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIG51bGwuXG4gICAgdmFyIGtleSA9IG9sZEZpYmVyICE9PSBudWxsID8gb2xkRmliZXIua2V5IDogbnVsbDtcblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAvLyB3ZSBjYW4gY29udGludWUgdG8gcmVwbGFjZSBpdCB3aXRob3V0IGFib3J0aW5nIGV2ZW4gaWYgaXQgaXMgbm90IGEgdGV4dFxuICAgICAgLy8gbm9kZS5cbiAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgb2xkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbiwgbGFuZXMsIGtleSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcywgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMsIHNvIHdlIG5laXRoZXIgaGF2ZSB0byBjaGVjayB0aGUgb2xkIG5vclxuICAgICAgLy8gbmV3IG5vZGUgZm9yIHRoZSBrZXkuIElmIGJvdGggYXJlIHRleHQgbm9kZXMsIHRoZXkgbWF0Y2guXG4gICAgICB2YXIgbWF0Y2hlZEZpYmVyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBtYXRjaGVkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyLCBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbiwgbGFuZXMsIG5ld0NoaWxkLmtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMiA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlcjIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMyA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIzLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFdhcm5zIGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlIG9yIG1pc3Npbmcga2V5XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcikge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnIHx8IGNoaWxkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBrbm93bktleXM7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgd2FybkZvck1pc3NpbmdLZXkoY2hpbGQsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoa25vd25LZXlzID09PSBudWxsKSB7XG4gICAgICAgICAgICBrbm93bktleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWtub3duS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IoJ0VuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtleSwgYCVzYC4gJyArICdLZXlzIHNob3VsZCBiZSB1bmlxdWUgc28gdGhhdCBjb21wb25lbnRzIG1haW50YWluIHRoZWlyIGlkZW50aXR5ICcgKyAnYWNyb3NzIHVwZGF0ZXMuIE5vbi11bmlxdWUga2V5cyBtYXkgY2F1c2UgY2hpbGRyZW4gdG8gYmUgJyArICdkdXBsaWNhdGVkIGFuZC9vciBvbWl0dGVkIFx1MjAxNCB0aGUgYmVoYXZpb3IgaXMgdW5zdXBwb3J0ZWQgYW5kICcgKyAnY291bGQgY2hhbmdlIGluIGEgZnV0dXJlIHZlcnNpb24uJywga2V5KTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBrbm93bktleXM7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW4sIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBhbGdvcml0aG0gY2FuJ3Qgb3B0aW1pemUgYnkgc2VhcmNoaW5nIGZyb20gYm90aCBlbmRzIHNpbmNlIHdlXG4gICAgLy8gZG9uJ3QgaGF2ZSBiYWNrcG9pbnRlcnMgb24gZmliZXJzLiBJJ20gdHJ5aW5nIHRvIHNlZSBob3cgZmFyIHdlIGNhbiBnZXRcbiAgICAvLyB3aXRoIHRoYXQgbW9kZWwuIElmIGl0IGVuZHMgdXAgbm90IGJlaW5nIHdvcnRoIHRoZSB0cmFkZW9mZnMsIHdlIGNhblxuICAgIC8vIGFkZCBpdCBsYXRlci5cbiAgICAvLyBFdmVuIHdpdGggYSB0d28gZW5kZWQgb3B0aW1pemF0aW9uLCB3ZSdkIHdhbnQgdG8gb3B0aW1pemUgZm9yIHRoZSBjYXNlXG4gICAgLy8gd2hlcmUgdGhlcmUgYXJlIGZldyBjaGFuZ2VzIGFuZCBicnV0ZSBmb3JjZSB0aGUgY29tcGFyaXNvbiBpbnN0ZWFkIG9mXG4gICAgLy8gZ29pbmcgZm9yIHRoZSBNYXAuIEl0J2QgbGlrZSB0byBleHBsb3JlIGhpdHRpbmcgdGhhdCBwYXRoIGZpcnN0IGluXG4gICAgLy8gZm9yd2FyZC1vbmx5IG1vZGUgYW5kIG9ubHkgZ28gZm9yIHRoZSBNYXAgb25jZSB3ZSBub3RpY2UgdGhhdCB3ZSBuZWVkXG4gICAgLy8gbG90cyBvZiBsb29rIGFoZWFkLiBUaGlzIGRvZXNuJ3QgaGFuZGxlIHJldmVyc2FsIGFzIHdlbGwgYXMgdHdvIGVuZGVkXG4gICAgLy8gc2VhcmNoIGJ1dCB0aGF0J3MgdW51c3VhbC4gQmVzaWRlcywgZm9yIHRoZSB0d28gZW5kZWQgb3B0aW1pemF0aW9uIHRvXG4gICAgLy8gd29yayBvbiBJdGVyYWJsZXMsIHdlJ2QgbmVlZCB0byBjb3B5IHRoZSB3aG9sZSBzZXQuXG4gICAgLy8gSW4gdGhpcyBmaXJzdCBpdGVyYXRpb24sIHdlJ2xsIGp1c3QgbGl2ZSB3aXRoIGhpdHRpbmcgdGhlIGJhZCBjYXNlXG4gICAgLy8gKGFkZGluZyBldmVyeXRoaW5nIHRvIGEgTWFwKSBpbiBmb3IgZXZlcnkgaW5zZXJ0L21vdmUuXG4gICAgLy8gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGFsc28gdXBkYXRlIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoKSB3aGljaFxuICAgIC8vIHVzZXMgdGhlIHNhbWUgYWxnb3JpdGhtLlxuICAgIHtcbiAgICAgIC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgdmFyIGtub3duS2V5cyA9IG51bGw7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbmV3Q2hpbGRyZW5baV07XG4gICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICBvbGRGaWJlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAobmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAvLyBhIGJldHRlciB3YXkgdG8gY29tbXVuaWNhdGUgd2hldGhlciB0aGlzIHdhcyBhIG1pc3Mgb3IgbnVsbCxcbiAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBzbG90LCBidXQgd2UgZGlkbid0IHJldXNlIHRoZSBleGlzdGluZyBmaWJlciwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgIC8vIGZvciBlYWNoIG51bGwgdmFsdWUuIEhvd2V2ZXIsIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBjYWxsIHVwZGF0ZVNsb3RcbiAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuXG4gICAgaWYgKG5ld0lkeCA9PT0gbmV3Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChfbmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyMiA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAoX25ld0ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXIyLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjIua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyMi5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMiwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW5JdGVyYWJsZSwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkoKSxcbiAgICAvLyBidXQgdXNpbmcgdGhlIGl0ZXJhdG9yIGluc3RlYWQuXG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKCEodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkFuIG9iamVjdCBpcyBub3QgYW4gaXRlcmFibGUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHJlbmRlcmluZyBHZW5lcmF0b3JzIGJlY2F1c2UgaXQncyBhIG11dGF0aW9uLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI5OTVcbiAgICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IGtub3cgYWJvdXQgdG9TdHJpbmdUYWdcbiAgICAgIG5ld0NoaWxkcmVuSXRlcmFibGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0dlbmVyYXRvcicpIHtcbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZW5lcmF0b3JzKSB7XG4gICAgICAgICAgZXJyb3IoJ1VzaW5nIEdlbmVyYXRvcnMgYXMgY2hpbGRyZW4gaXMgdW5zdXBwb3J0ZWQgYW5kIHdpbGwgbGlrZWx5IHlpZWxkICcgKyAndW5leHBlY3RlZCByZXN1bHRzIGJlY2F1c2UgZW51bWVyYXRpbmcgYSBnZW5lcmF0b3IgbXV0YXRlcyBpdC4gJyArICdZb3UgbWF5IGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgd2l0aCBgQXJyYXkuZnJvbSgpYCBvciB0aGUgJyArICdgWy4uLnNwcmVhZF1gIG9wZXJhdG9yIGJlZm9yZSByZW5kZXJpbmcuIEtlZXAgaW4gbWluZCAnICsgJ3lvdSBtaWdodCBuZWVkIHRvIHBvbHlmaWxsIHRoZXNlIGZlYXR1cmVzIGZvciBvbGRlciBicm93c2Vycy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSB0cnVlO1xuICAgICAgfSAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cblxuXG4gICAgICBpZiAobmV3Q2hpbGRyZW5JdGVyYWJsZS5lbnRyaWVzID09PSBpdGVyYXRvckZuKSB7XG4gICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgIGVycm9yKCdVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnVXNlIGFuIGFycmF5IG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgfSAvLyBGaXJzdCwgdmFsaWRhdGUga2V5cy5cbiAgICAgIC8vIFdlJ2xsIGdldCBhIGRpZmZlcmVudCBpdGVyYXRvciBsYXRlciBmb3IgdGhlIG1haW4gcGFzcy5cblxuXG4gICAgICB2YXIgX25ld0NoaWxkcmVuID0gaXRlcmF0b3JGbi5jYWxsKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgICBpZiAoX25ld0NoaWxkcmVuKSB7XG4gICAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICAgIHZhciBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICAgICAgZm9yICg7ICFfc3RlcC5kb25lOyBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgY2hpbGQgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBuZXdDaGlsZHJlbiA9IGl0ZXJhdG9yRm4uY2FsbChuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgIGlmICghKG5ld0NoaWxkcmVuICE9IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkFuIGl0ZXJhYmxlIG9iamVjdCBwcm92aWRlZCBubyBpdGVyYXRvci5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG4gICAgdmFyIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgIGlmIChvbGRGaWJlci5pbmRleCA+IG5ld0lkeCkge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlcjtcbiAgICAgICAgb2xkRmliZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZztcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgYnJlYWtzIG9uIGVtcHR5IHNsb3RzIGxpa2UgbnVsbCBjaGlsZHJlbi4gVGhhdCdzXG4gICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgIC8vIGJvb2xlYW4sIHVuZGVmaW5lZCwgZXRjLlxuICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICBpZiAob2xkRmliZXIgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgc2xvdCwgYnV0IHdlIGRpZG4ndCByZXVzZSB0aGUgZXhpc3RpbmcgZmliZXIsIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGNoaWxkLlxuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IERlZmVyIHNpYmxpbmdzIGlmIHdlJ3JlIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXggZm9yIHRoaXMgc2xvdC5cbiAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgIC8vIHdpdGggdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cblxuICAgIGlmIChzdGVwLmRvbmUpIHtcbiAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbmV3IGNoaWxkcmVuLiBXZSBjYW4gZGVsZXRlIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH1cblxuICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAvLyBzaW5jZSB0aGUgcmVzdCB3aWxsIGFsbCBiZSBpbnNlcnRpb25zLlxuICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIzID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgICBpZiAoX25ld0ZpYmVyMyA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIzLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMztcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgdmFyIF9uZXdGaWJlcjQgPSB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgaWYgKF9uZXdGaWJlcjQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICBpZiAoX25ld0ZpYmVyNC5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuZXcgZmliZXIgaXMgYSB3b3JrIGluIHByb2dyZXNzLCBidXQgaWYgdGhlcmUgZXhpc3RzIGFcbiAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgIC8vIGxpc3QuXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShfbmV3RmliZXI0LmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IF9uZXdGaWJlcjQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjQsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjQ7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyNDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgZXhpc3RpbmdDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGtleXMgb24gdGV4dCBub2RlcyBzaW5jZSB3ZSBkb24ndCBoYXZlIGFcbiAgICAvLyB3YXkgdG8gZGVmaW5lIHRoZW0uXG4gICAgaWYgKGN1cnJlbnRGaXJzdENoaWxkICE9PSBudWxsICYmIGN1cnJlbnRGaXJzdENoaWxkLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBub2RlIHNvIGxldCdzIGp1c3QgdXBkYXRlIGl0IGFuZCBkZWxldGVcbiAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudEZpcnN0Q2hpbGQsIHRleHRDb250ZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH0gLy8gVGhlIGV4aXN0aW5nIGZpcnN0IGNoaWxkIGlzIG5vdCBhIHRleHQgbm9kZSBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmVcbiAgICAvLyBhbmQgZGVsZXRlIHRoZSBleGlzdGluZyBvbmVzLlxuXG5cbiAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBzd2l0Y2ggKGNoaWxkLnRhZykge1xuICAgICAgICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG4gICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgQmxvY2s6XG5cbiAgICAgICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IGZhbGx0aHJvdWdoIGhlcmUgaWYgZW5hYmxlQmxvY2tzQVBJIGlzIG5vdCBvbi5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVkIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoY2hpbGQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnQudHlwZSB8fCAoIC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgICAgICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGNoaWxkLCBlbGVtZW50KSApKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9leGlzdGluZzMgPSB1c2VGaWJlcihjaGlsZCwgZWxlbWVudC5wcm9wcyk7XG5cbiAgICAgICAgICAgICAgICBfZXhpc3RpbmczLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY2hpbGQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIF9leGlzdGluZzMucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBfZXhpc3RpbmczLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICAgICAgICAgIF9leGlzdGluZzMuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2V4aXN0aW5nMztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IC8vIERpZG4ndCBtYXRjaC5cblxuXG4gICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIGVsZW1lbnQua2V5KTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9jcmVhdGVkNCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICBfY3JlYXRlZDQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgZWxlbWVudCk7XG4gICAgICBfY3JlYXRlZDQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gX2NyZWF0ZWQ0O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIHBvcnRhbCwgbGFuZXMpIHtcbiAgICB2YXIga2V5ID0gcG9ydGFsLmtleTtcbiAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgLy8gVE9ETzogSWYga2V5ID09PSBudWxsIGFuZCBjaGlsZC5rZXkgPT09IG51bGwsIHRoZW4gdGhpcyBvbmx5IGFwcGxpZXMgdG9cbiAgICAgIC8vIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LlxuICAgICAgaWYgKGNoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGlmIChjaGlsZC50YWcgPT09IEhvc3RQb3J0YWwgJiYgY2hpbGQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gPT09IHBvcnRhbC5jb250YWluZXJJbmZvICYmIGNoaWxkLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiA9PT0gcG9ydGFsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGNoaWxkLCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfSAvLyBUaGlzIEFQSSB3aWxsIHRhZyB0aGUgY2hpbGRyZW4gd2l0aCB0aGUgc2lkZS1lZmZlY3Qgb2YgdGhlIHJlY29uY2lsaWF0aW9uXG4gIC8vIGl0c2VsZi4gVGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzaWRlLWVmZmVjdCBsaXN0IGFzIHdlIHBhc3MgdGhyb3VnaCB0aGVcbiAgLy8gY2hpbGRyZW4gYW5kIHRoZSBwYXJlbnQuXG5cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZEZpYmVycyhyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlY3Vyc2l2ZS5cbiAgICAvLyBJZiB0aGUgdG9wIGxldmVsIGl0ZW0gaXMgYW4gYXJyYXksIHdlIHRyZWF0IGl0IGFzIGEgc2V0IG9mIGNoaWxkcmVuLFxuICAgIC8vIG5vdCBhcyBhIGZyYWdtZW50LiBOZXN0ZWQgYXJyYXlzIG9uIHRoZSBvdGhlciBoYW5kIHdpbGwgYmUgdHJlYXRlZCBhc1xuICAgIC8vIGZyYWdtZW50IG5vZGVzLiBSZWN1cnNpb24gaGFwcGVucyBhdCB0aGUgbm9ybWFsIGZsb3cuXG4gICAgLy8gSGFuZGxlIHRvcCBsZXZlbCB1bmtleWVkIGZyYWdtZW50cyBhcyBpZiB0aGV5IHdlcmUgYXJyYXlzLlxuICAgIC8vIFRoaXMgbGVhZHMgdG8gYW4gYW1iaWd1aXR5IGJldHdlZW4gPD57Wy4uLl19PC8+IGFuZCA8Pi4uLjwvPi5cbiAgICAvLyBXZSB0cmVhdCB0aGUgYW1iaWd1b3VzIGNhc2VzIGFib3ZlIHRoZSBzYW1lLlxuICAgIHZhciBpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50ID0gdHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCAmJiBuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFICYmIG5ld0NoaWxkLmtleSA9PT0gbnVsbDtcblxuICAgIGlmIChpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50KSB7XG4gICAgICBuZXdDaGlsZCA9IG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuO1xuICAgIH0gLy8gSGFuZGxlIG9iamVjdCB0eXBlc1xuXG5cbiAgICB2YXIgaXNPYmplY3QgPSB0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsO1xuXG4gICAgaWYgKGlzT2JqZWN0KSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpKTtcblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykpO1xuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCAnJyArIG5ld0NoaWxkLCBsYW5lcykpO1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KSB7XG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3VuZGVmaW5lZCcgJiYgIWlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQpIHtcbiAgICAgIC8vIElmIHRoZSBuZXcgY2hpbGQgaXMgdW5kZWZpbmVkLCBhbmQgdGhlIHJldHVybiBmaWJlciBpcyBhIGNvbXBvc2l0ZVxuICAgICAgLy8gY29tcG9uZW50LCB0aHJvdyBhbiBlcnJvci4gSWYgRmliZXIgcmV0dXJuIHR5cGVzIGFyZSBkaXNhYmxlZCxcbiAgICAgIC8vIHdlIGFscmVhZHkgdGhyZXcgYWJvdmUuXG4gICAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5yZW5kZXIuX2lzTW9ja0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIC8vIEludGVudGlvbmFsbHkgZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGNhc2UsIHdoaWNoIGhhbmRsZXMgYm90aFxuICAgICAgICAvLyBmdW5jdGlvbnMgYW5kIGNsYXNzZXNcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lZCBuby1mYWxsdGhyb3VnaFxuXG4gICAgICAgIGNhc2UgQmxvY2s6XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCAoZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JykgKyBcIiguLi4pOiBOb3RoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHJlbmRlci4gVGhpcyB1c3VhbGx5IG1lYW5zIGEgcmV0dXJuIHN0YXRlbWVudCBpcyBtaXNzaW5nLiBPciwgdG8gcmVuZGVyIG5vdGhpbmcsIHJldHVybiBudWxsLlwiICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBSZW1haW5pbmcgY2FzZXMgYXJlIGFsbCB0cmVhdGVkIGFzIGVtcHR5LlxuXG5cbiAgICByZXR1cm4gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgfVxuXG4gIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVycztcbn1cblxudmFyIHJlY29uY2lsZUNoaWxkRmliZXJzID0gQ2hpbGRSZWNvbmNpbGVyKHRydWUpO1xudmFyIG1vdW50Q2hpbGRGaWJlcnMgPSBDaGlsZFJlY29uY2lsZXIoZmFsc2UpO1xuZnVuY3Rpb24gY2xvbmVDaGlsZEZpYmVycyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoIShjdXJyZW50ID09PSBudWxsIHx8IHdvcmtJblByb2dyZXNzLmNoaWxkID09PSBjdXJyZW50LmNoaWxkKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlc3VtaW5nIHdvcmsgbm90IHlldCBpbXBsZW1lbnRlZC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjdXJyZW50Q2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIG5ld0NoaWxkID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzKTtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXdDaGlsZDtcbiAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgd2hpbGUgKGN1cnJlbnRDaGlsZC5zaWJsaW5nICE9PSBudWxsKSB7XG4gICAgY3VycmVudENoaWxkID0gY3VycmVudENoaWxkLnNpYmxpbmc7XG4gICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5zaWJsaW5nID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzKTtcbiAgICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuXG4gIG5ld0NoaWxkLnNpYmxpbmcgPSBudWxsO1xufSAvLyBSZXNldCBhIHdvcmtJblByb2dyZXNzIGNoaWxkIHNldCB0byBwcmVwYXJlIGl0IGZvciBhIHNlY29uZCBwYXNzLlxuXG5mdW5jdGlvbiByZXNldENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICB2YXIgY2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICByZXNldFdvcmtJblByb2dyZXNzKGNoaWxkLCBsYW5lcyk7XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG59XG5cbnZhciBOT19DT05URVhUID0ge307XG52YXIgY29udGV4dFN0YWNrQ3Vyc29yJDEgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG52YXIgY29udGV4dEZpYmVyU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG52YXIgcm9vdEluc3RhbmNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG5cbmZ1bmN0aW9uIHJlcXVpcmVkQ29udGV4dChjKSB7XG4gIGlmICghKGMgIT09IE5PX0NPTlRFWFQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgaG9zdCBjb250ZXh0IHRvIGV4aXN0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGM7XG59XG5cbmZ1bmN0aW9uIGdldFJvb3RIb3N0Q29udGFpbmVyKCkge1xuICB2YXIgcm9vdEluc3RhbmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICByZXR1cm4gcm9vdEluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdENvbnRhaW5lcihmaWJlciwgbmV4dFJvb3RJbnN0YW5jZSkge1xuICAvLyBQdXNoIGN1cnJlbnQgcm9vdCBpbnN0YW5jZSBvbnRvIHRoZSBzdGFjaztcbiAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcmVzZXQgcm9vdCB3aGVuIHBvcnRhbHMgYXJlIHBvcHBlZC5cbiAgcHVzaChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgbmV4dFJvb3RJbnN0YW5jZSwgZmliZXIpOyAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBwb3Agb25seSBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cblxuICBwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpOyAvLyBGaW5hbGx5LCB3ZSBuZWVkIHRvIHB1c2ggdGhlIGhvc3QgY29udGV4dCB0byB0aGUgc3RhY2suXG4gIC8vIEhvd2V2ZXIsIHdlIGNhbid0IGp1c3QgY2FsbCBnZXRSb290SG9zdENvbnRleHQoKSBhbmQgcHVzaCBpdCBiZWNhdXNlXG4gIC8vIHdlJ2QgaGF2ZSBhIGRpZmZlcmVudCBudW1iZXIgb2YgZW50cmllcyBvbiB0aGUgc3RhY2sgZGVwZW5kaW5nIG9uXG4gIC8vIHdoZXRoZXIgZ2V0Um9vdEhvc3RDb250ZXh0KCkgdGhyb3dzIHNvbWV3aGVyZSBpbiByZW5kZXJlciBjb2RlIG9yIG5vdC5cbiAgLy8gU28gd2UgcHVzaCBhbiBlbXB0eSB2YWx1ZSBmaXJzdC4gVGhpcyBsZXRzIHVzIHNhZmVseSB1bndpbmQgb24gZXJyb3JzLlxuXG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIE5PX0NPTlRFWFQsIGZpYmVyKTtcbiAgdmFyIG5leHRSb290Q29udGV4dCA9IGdldFJvb3RIb3N0Q29udGV4dChuZXh0Um9vdEluc3RhbmNlKTsgLy8gTm93IHRoYXQgd2Uga25vdyB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgdGhyb3csIHJlcGxhY2UgaXQuXG5cbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG5leHRSb290Q29udGV4dCwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwb3BIb3N0Q29udGFpbmVyKGZpYmVyKSB7XG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgcG9wKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RDb250ZXh0KCkge1xuICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KTtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Q29udGV4dChmaWJlcikge1xuICB2YXIgcm9vdEluc3RhbmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZ2V0Q2hpbGRIb3N0Q29udGV4dChjb250ZXh0LCBmaWJlci50eXBlKTsgLy8gRG9uJ3QgcHVzaCB0aGlzIEZpYmVyJ3MgY29udGV4dCB1bmxlc3MgaXQncyB1bmlxdWUuXG5cbiAgaWYgKGNvbnRleHQgPT09IG5leHRDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIFRyYWNrIHRoZSBjb250ZXh0IGFuZCB0aGUgRmliZXIgdGhhdCBwcm92aWRlZCBpdC5cbiAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHBvcCBvbmx5IEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuXG5cbiAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgbmV4dENvbnRleHQsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcG9wSG9zdENvbnRleHQoZmliZXIpIHtcbiAgLy8gRG8gbm90IHBvcCB1bmxlc3MgdGhpcyBGaWJlciBwcm92aWRlZCB0aGUgY3VycmVudCBjb250ZXh0LlxuICAvLyBwdXNoSG9zdENvbnRleHQoKSBvbmx5IHB1c2hlcyBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cbiAgaWYgKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLmN1cnJlbnQgIT09IGZpYmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG52YXIgRGVmYXVsdFN1c3BlbnNlQ29udGV4dCA9IDA7IC8vIFRoZSBTdXNwZW5zZSBDb250ZXh0IGlzIHNwbGl0IGludG8gdHdvIHBhcnRzLiBUaGUgbG93ZXIgYml0cyBpc1xuLy8gaW5oZXJpdGVkIGRlZXBseSBkb3duIHRoZSBzdWJ0cmVlLiBUaGUgdXBwZXIgYml0cyBvbmx5IGFmZmVjdFxuLy8gdGhpcyBpbW1lZGlhdGUgc3VzcGVuc2UgYm91bmRhcnkgYW5kIGdldHMgcmVzZXQgZWFjaCBuZXdcbi8vIGJvdW5kYXJ5IG9yIHN1c3BlbnNlIGxpc3QuXG5cbnZhciBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayA9IDE7IC8vIFN1YnRyZWUgRmxhZ3M6XG4vLyBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQgaW5kaWNhdGVzIHRoYXQgb25lIG9mIG91ciBwYXJlbnQgU3VzcGVuc2Vcbi8vIGJvdW5kYXJpZXMgaXMgbm90IGN1cnJlbnRseSBzaG93aW5nIHZpc2libGUgbWFpbiBjb250ZW50LlxuLy8gRWl0aGVyIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgb3IgaXMgbm90IG1vdW50ZWQgYXQgYWxsLlxuLy8gV2UgY2FuIHVzZSB0aGlzIHRvIGRldGVybWluZSBpZiBpdCBpcyBkZXNpcmFibGUgdG8gdHJpZ2dlciBhIGZhbGxiYWNrIGF0XG4vLyB0aGUgcGFyZW50LiBJZiBub3QsIHRoZW4gd2UgbWlnaHQgbmVlZCB0byB0cmlnZ2VyIHVuZGVzaXJhYmxlIGJvdW5kYXJpZXNcbi8vIGFuZC9vciBzdXNwZW5kIHRoZSBjb21taXQgdG8gYXZvaWQgaGlkaW5nIHRoZSBwYXJlbnQgY29udGVudC5cblxudmFyIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCA9IDE7IC8vIFNoYWxsb3cgRmxhZ3M6XG4vLyBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgY2FuIGJlIHVzZWQgYnkgU3VzcGVuc2VMaXN0IHRvIGZvcmNlIG5ld2x5IGFkZGVkXG4vLyBpdGVtcyBpbnRvIHRoZWlyIGZhbGxiYWNrIHN0YXRlIGR1cmluZyBvbmUgb2YgdGhlIHJlbmRlciBwYXNzZXMuXG5cbnZhciBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgPSAyO1xudmFyIHN1c3BlbnNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoRGVmYXVsdFN1c3BlbnNlQ29udGV4dCk7XG5mdW5jdGlvbiBoYXNTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgZmxhZykge1xuICByZXR1cm4gKHBhcmVudENvbnRleHQgJiBmbGFnKSAhPT0gMDtcbn1cbmZ1bmN0aW9uIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaztcbn1cbmZ1bmN0aW9uIHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgc2hhbGxvd0NvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayB8IHNoYWxsb3dDb250ZXh0O1xufVxuZnVuY3Rpb24gYWRkU3VidHJlZVN1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0LCBzdWJ0cmVlQ29udGV4dCkge1xuICByZXR1cm4gcGFyZW50Q29udGV4dCB8IHN1YnRyZWVDb250ZXh0O1xufVxuZnVuY3Rpb24gcHVzaFN1c3BlbnNlQ29udGV4dChmaWJlciwgbmV3Q29udGV4dCkge1xuICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIG5ld0NvbnRleHQsIGZpYmVyKTtcbn1cbmZ1bmN0aW9uIHBvcFN1c3BlbnNlQ29udGV4dChmaWJlcikge1xuICBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRDYXB0dXJlU3VzcGVuc2Uod29ya0luUHJvZ3Jlc3MsIGhhc0ludmlzaWJsZVBhcmVudCkge1xuICAvLyBJZiBpdCB3YXMgdGhlIHByaW1hcnkgY2hpbGRyZW4gdGhhdCBqdXN0IHN1c3BlbmRlZCwgY2FwdHVyZSBhbmQgcmVuZGVyIHRoZVxuICAvLyBmYWxsYmFjay4gT3RoZXJ3aXNlLCBkb24ndCBjYXB0dXJlIGFuZCBidWJibGUgdG8gdGhlIG5leHQgYm91bmRhcnkuXG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXh0U3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmV4dFN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgIC8vIEEgZGVoeWRyYXRlZCBib3VuZGFyeSBhbHdheXMgY2FwdHVyZXMuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzOyAvLyBJbiBvcmRlciB0byBjYXB0dXJlLCB0aGUgU3VzcGVuc2UgY29tcG9uZW50IG11c3QgaGF2ZSBhIGZhbGxiYWNrIHByb3AuXG5cbiAgaWYgKHByb3BzLmZhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gUmVndWxhciBib3VuZGFyaWVzIGFsd2F5cyBjYXB0dXJlLlxuXG5cbiAgaWYgKHByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgaXQncyBhIGJvdW5kYXJ5IHdlIHNob3VsZCBhdm9pZCwgdGhlbiB3ZSBwcmVmZXIgdG8gYnViYmxlIHVwIHRvIHRoZVxuICAvLyBwYXJlbnQgYm91bmRhcnkgaWYgaXQgaXMgY3VycmVudGx5IGludmlzaWJsZS5cblxuXG4gIGlmIChoYXNJbnZpc2libGVQYXJlbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSWYgdGhlIHBhcmVudCBpcyBub3QgYWJsZSB0byBoYW5kbGUgaXQsIHdlIG11c3QgaGFuZGxlIGl0LlxuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBmaW5kRmlyc3RTdXNwZW5kZWQocm93KSB7XG4gIHZhciBub2RlID0gcm93O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGRlaHlkcmF0ZWQgPSBzdGF0ZS5kZWh5ZHJhdGVkO1xuXG4gICAgICAgIGlmIChkZWh5ZHJhdGVkID09PSBudWxsIHx8IGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoZGVoeWRyYXRlZCkgfHwgaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soZGVoeWRyYXRlZCkpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlTGlzdENvbXBvbmVudCAmJiAvLyByZXZlYWxPcmRlciB1bmRlZmluZWQgY2FuJ3QgYmUgdHJ1c3RlZCBiZWNhdXNlIGl0IGRvbid0XG4gICAgLy8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIGl0IHN1c3BlbmRlZCBvciBub3QuXG4gICAgbm9kZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBkaWRTdXNwZW5kID0gKG5vZGUuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgICAgaWYgKGRpZFN1c3BlbmQpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSByb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm93KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIE5vRmxhZ3MkMSA9XG4vKiAgKi9cbjA7IC8vIFJlcHJlc2VudHMgd2hldGhlciBlZmZlY3Qgc2hvdWxkIGZpcmUuXG5cbnZhciBIYXNFZmZlY3QgPVxuLyogKi9cbjE7IC8vIFJlcHJlc2VudHMgdGhlIHBoYXNlIGluIHdoaWNoIHRoZSBlZmZlY3QgKG5vdCB0aGUgY2xlYW4tdXApIGZpcmVzLlxuXG52YXIgTGF5b3V0ID1cbi8qICAgICovXG4yO1xudmFyIFBhc3NpdmUkMSA9XG4vKiAgICovXG40O1xuXG4vLyBUaGlzIG1heSBoYXZlIGJlZW4gYW4gaW5zZXJ0aW9uIG9yIGEgaHlkcmF0aW9uLlxuXG52YXIgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xudmFyIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzSHlkcmF0aW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGVudGVySHlkcmF0aW9uU3RhdGUoZmliZXIpIHtcblxuICB2YXIgcGFyZW50SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKHBhcmVudEluc3RhbmNlKTtcbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKHJldHVybkZpYmVyLCBpbnN0YW5jZSkge1xuICB7XG4gICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIGRpZE5vdEh5ZHJhdGVDb250YWluZXJJbnN0YW5jZShyZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbywgaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBkaWROb3RIeWRyYXRlSW5zdGFuY2UocmV0dXJuRmliZXIudHlwZSwgcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcywgcmV0dXJuRmliZXIuc3RhdGVOb2RlLCBpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZFRvRGVsZXRlID0gY3JlYXRlRmliZXJGcm9tSG9zdEluc3RhbmNlRm9yRGVsZXRpb24oKTtcbiAgY2hpbGRUb0RlbGV0ZS5zdGF0ZU5vZGUgPSBpbnN0YW5jZTtcbiAgY2hpbGRUb0RlbGV0ZS5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgY2hpbGRUb0RlbGV0ZS5mbGFncyA9IERlbGV0aW9uOyAvLyBUaGlzIG1pZ2h0IHNlZW0gbGlrZSBpdCBiZWxvbmdzIG9uIHByb2dyZXNzZWRGaXJzdERlbGV0aW9uLiBIb3dldmVyLFxuICAvLyB0aGVzZSBjaGlsZHJlbiBhcmUgbm90IHBhcnQgb2YgdGhlIHJlY29uY2lsaWF0aW9uIGxpc3Qgb2YgY2hpbGRyZW4uXG4gIC8vIEV2ZW4gaWYgd2UgYWJvcnQgYW5kIHJlcmVjb25jaWxlIHRoZSBjaGlsZHJlbiwgdGhhdCB3aWxsIHRyeSB0byBoeWRyYXRlXG4gIC8vIGFnYWluIGFuZCB0aGUgbm9kZXMgYXJlIHN0aWxsIGluIHRoZSBob3N0IHRyZWUgc28gdGhlc2Ugd2lsbCBiZVxuICAvLyByZWNyZWF0ZWQuXG5cbiAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShyZXR1cm5GaWJlciwgZmliZXIpIHtcbiAgZmliZXIuZmxhZ3MgPSBmaWJlci5mbGFncyAmIH5IeWRyYXRpbmcgfCBQbGFjZW1lbnQ7XG5cbiAge1xuICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHBhcmVudENvbnRhaW5lciA9IHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0eXBlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgICAgICAgIHZhciB0ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgdmFyIHBhcmVudFByb3BzID0gcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB2YXIgX3R5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgX3Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgX3R5cGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgICAgICAgICAgdmFyIF90ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIF90ZXh0KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSB7XG4gIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgIHZhciBwcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY2FuSHlkcmF0ZUluc3RhbmNlKG5leHRJbnN0YW5jZSwgdHlwZSk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgZmliZXIuc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICB2YXIgdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIHRleHRJbnN0YW5jZSA9IGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UobmV4dEluc3RhbmNlLCB0ZXh0KTtcblxuICAgICAgICBpZiAodGV4dEluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgZmliZXIuc3RhdGVOb2RlID0gdGV4dEluc3RhbmNlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKGZpYmVyKSB7XG4gIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmV4dEluc3RhbmNlID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcblxuICBpZiAoIW5leHRJbnN0YW5jZSkge1xuICAgIC8vIE5vdGhpbmcgdG8gaHlkcmF0ZS4gTWFrZSBpdCBhbiBpbnNlcnRpb24uXG4gICAgaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgIGlzSHlkcmF0aW5nID0gZmFsc2U7XG4gICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSA9IG5leHRJbnN0YW5jZTtcblxuICBpZiAoIXRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkpIHtcbiAgICAvLyBJZiB3ZSBjYW4ndCBoeWRyYXRlIHRoaXMgaW5zdGFuY2UgbGV0J3MgdHJ5IHRoZSBuZXh0IG9uZS5cbiAgICAvLyBXZSB1c2UgdGhpcyBhcyBhIGhldXJpc3RpYy4gSXQncyBiYXNlZCBvbiBpbnR1aXRpb24gYW5kIG5vdCBkYXRhIHNvIGl0XG4gICAgLy8gbWlnaHQgYmUgZmxhd2VkIG9yIHVubmVjZXNzYXJ5LlxuICAgIG5leHRJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhmaXJzdEF0dGVtcHRlZEluc3RhbmNlKTtcblxuICAgIGlmICghbmV4dEluc3RhbmNlIHx8ICF0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuICAgICAgaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBtYXRjaGVkIHRoZSBuZXh0IG9uZSwgd2UnbGwgbm93IGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBvbmUgd2FzXG4gICAgLy8gc3VwZXJmbHVvdXMgYW5kIHdlJ2xsIGRlbGV0ZSBpdC4gU2luY2Ugd2UgY2FuJ3QgZWFnZXJseSBkZWxldGUgaXRcbiAgICAvLyB3ZSdsbCBoYXZlIHRvIHNjaGVkdWxlIGEgZGVsZXRpb24uIFRvIGRvIHRoYXQsIHRoaXMgbm9kZSBuZWVkcyBhIGR1bW15XG4gICAgLy8gZmliZXIgYXNzb2NpYXRlZCB3aXRoIGl0LlxuXG5cbiAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UpO1xuICB9XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKG5leHRJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2UoZmliZXIsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcblxuICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIHZhciB1cGRhdGVQYXlsb2FkID0gaHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCBmaWJlci50eXBlLCBmaWJlci5tZW1vaXplZFByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBmaWJlcik7IC8vIFRPRE86IFR5cGUgdGhpcyBzcGVjaWZpYyB0byB0aGlzIHR5cGUgb2YgY29tcG9uZW50LlxuXG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUGF5bG9hZDsgLy8gSWYgdGhlIHVwZGF0ZSBwYXlsb2FkIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgY2hhbmdlIG9yIGlmIHRoZXJlXG4gIC8vIGlzIGEgbmV3IHJlZiB3ZSBtYXJrIHRoaXMgYXMgYW4gdXBkYXRlLlxuXG4gIGlmICh1cGRhdGVQYXlsb2FkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKGZpYmVyKSB7XG5cbiAgdmFyIHRleHRJbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgdmFyIHRleHRDb250ZW50ID0gZmliZXIubWVtb2l6ZWRQcm9wcztcbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGh5ZHJhdGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCwgZmliZXIpO1xuXG4gIHtcbiAgICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgICAvLyBXZSBhc3N1bWUgdGhhdCBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZSBpcyBjYWxsZWQgaW4gYSBjb250ZXh0IHdoZXJlIHRoZVxuICAgICAgLy8gaHlkcmF0aW9uIHBhcmVudCBpcyB0aGUgcGFyZW50IGhvc3QgY29tcG9uZW50IG9mIHRoaXMgaG9zdCB0ZXh0LlxuICAgICAgdmFyIHJldHVybkZpYmVyID0gaHlkcmF0aW9uUGFyZW50RmliZXI7XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRDb250YWluZXIgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgICAgZGlkTm90TWF0Y2hIeWRyYXRlZENvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudFR5cGUgPSByZXR1cm5GaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgcGFyZW50UHJvcHMgPSByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKGZpYmVyKSB7XG5cbiAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IHN1c3BlbnNlU3RhdGUgIT09IG51bGwgPyBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQgOiBudWxsO1xuXG4gIGlmICghc3VzcGVuc2VJbnN0YW5jZSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGhhdmUgYSBoeWRyYXRlZCBzdXNwZW5zZSBpbnN0YW5jZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCAmJiBwYXJlbnQudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIHBhcmVudC50YWcgIT09IEhvc3RSb290ICYmIHBhcmVudC50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBwb3BIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuXG4gIGlmIChmaWJlciAhPT0gaHlkcmF0aW9uUGFyZW50RmliZXIpIHtcbiAgICAvLyBXZSdyZSBkZWVwZXIgdGhhbiB0aGUgY3VycmVudCBoeWRyYXRpb24gY29udGV4dCwgaW5zaWRlIGFuIGluc2VydGVkXG4gICAgLy8gdHJlZS5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgLy8gSWYgd2UncmUgbm90IGN1cnJlbnRseSBoeWRyYXRpbmcgYnV0IHdlJ3JlIGluIGEgaHlkcmF0aW9uIGNvbnRleHQsIHRoZW5cbiAgICAvLyB3ZSB3ZXJlIGFuIGluc2VydGlvbiBhbmQgbm93IG5lZWQgdG8gcG9wIHVwIHJlZW50ZXIgaHlkcmF0aW9uIG9mIG91clxuICAgIC8vIHNpYmxpbmdzLlxuICAgIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuICAgIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7IC8vIElmIHdlIGhhdmUgYW55IHJlbWFpbmluZyBoeWRyYXRhYmxlIG5vZGVzLCB3ZSBuZWVkIHRvIGRlbGV0ZSB0aGVtIG5vdy5cbiAgLy8gV2Ugb25seSBkbyB0aGlzIGRlZXBlciB0aGFuIGhlYWQgYW5kIGJvZHkgc2luY2UgdGhleSB0ZW5kIHRvIGhhdmUgcmFuZG9tXG4gIC8vIG90aGVyIG5vZGVzIGluIHRoZW0uIFdlIGFsc28gaWdub3JlIGNvbXBvbmVudHMgd2l0aCBwdXJlIHRleHQgY29udGVudCBpblxuICAvLyBzaWRlIG9mIHRoZW0uXG4gIC8vIFRPRE86IEJldHRlciBoZXVyaXN0aWMuXG5cbiAgaWYgKGZpYmVyLnRhZyAhPT0gSG9zdENvbXBvbmVudCB8fCB0eXBlICE9PSAnaGVhZCcgJiYgdHlwZSAhPT0gJ2JvZHknICYmICFzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBmaWJlci5tZW1vaXplZFByb3BzKSkge1xuICAgIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuXG4gICAgd2hpbGUgKG5leHRJbnN0YW5jZSkge1xuICAgICAgZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKGZpYmVyLCBuZXh0SW5zdGFuY2UpO1xuICAgICAgbmV4dEluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKG5leHRJbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcik7XG5cbiAgaWYgKGZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gc2tpcFBhc3REZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShmaWJlcik7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGh5ZHJhdGlvblBhcmVudEZpYmVyID8gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGZpYmVyLnN0YXRlTm9kZSkgOiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlc2V0SHlkcmF0aW9uU3RhdGUoKSB7XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbDtcbiAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0SXNIeWRyYXRpbmcoKSB7XG4gIHJldHVybiBpc0h5ZHJhdGluZztcbn1cblxuLy8gYW5kIHNob3VsZCBiZSByZXNldCBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgcmVuZGVyLlxuLy8gVGhpcyB0cmFja3Mgd2hpY2ggbXV0YWJsZSBzb3VyY2VzIG5lZWQgdG8gYmUgcmVzZXQgYWZ0ZXIgYSByZW5kZXIuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMgPSBbXTtcbnZhciByZW5kZXJlclNpZ2lsJDE7XG5cbntcbiAgLy8gVXNlZCB0byBkZXRlY3QgbXVsdGlwbGUgcmVuZGVyZXJzIHVzaW5nIHRoZSBzYW1lIG11dGFibGUgc291cmNlLlxuICByZW5kZXJlclNpZ2lsJDEgPSB7fTtcbn1cblxuZnVuY3Rpb24gbWFya1NvdXJjZUFzRGlydHkobXV0YWJsZVNvdXJjZSkge1xuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMucHVzaChtdXRhYmxlU291cmNlKTtcbn1cbmZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IHdvcmtJblByb2dyZXNzU291cmNlc1tpXTtcblxuICAgIHtcbiAgICAgIG11dGFibGVTb3VyY2UuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnkgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzU291cmNlcy5sZW5ndGggPSAwO1xufVxuZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKG11dGFibGVTb3VyY2UpIHtcbiAge1xuICAgIHJldHVybiBtdXRhYmxlU291cmNlLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5O1xuICB9XG59XG5mdW5jdGlvbiBzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24obXV0YWJsZVNvdXJjZSwgdmVyc2lvbikge1xuICB7XG4gICAgbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeSA9IHZlcnNpb247XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMucHVzaChtdXRhYmxlU291cmNlKTtcbn1cbmZ1bmN0aW9uIHdhcm5BYm91dE11bHRpcGxlUmVuZGVyZXJzREVWKG11dGFibGVTb3VyY2UpIHtcbiAge1xuICAgIHtcbiAgICAgIGlmIChtdXRhYmxlU291cmNlLl9jdXJyZW50UHJpbWFyeVJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgbXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciA9IHJlbmRlcmVyU2lnaWwkMTtcbiAgICAgIH0gZWxzZSBpZiAobXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciAhPT0gcmVuZGVyZXJTaWdpbCQxKSB7XG4gICAgICAgIGVycm9yKCdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIG11dGFibGUgc291cmNlLiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gRWFnZXIgcmVhZHMgdGhlIHZlcnNpb24gb2YgYSBtdXRhYmxlIHNvdXJjZSBhbmQgc3RvcmVzIGl0IG9uIHRoZSByb290LlxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7XG52YXIgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXI7XG5cbntcbiAgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllciA9IHt9O1xuICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG59XG5cbi8vIFRoZXNlIGFyZSBzZXQgcmlnaHQgYmVmb3JlIGNhbGxpbmcgdGhlIGNvbXBvbmVudC5cbnZhciByZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLiBJJ3ZlIG5hbWVkIGl0IGRpZmZlcmVudGx5IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb21cbi8vIHRoZSB3b3JrLWluLXByb2dyZXNzIGhvb2suXG5cbnZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDsgLy8gSG9va3MgYXJlIHN0b3JlZCBhcyBhIGxpbmtlZCBsaXN0IG9uIHRoZSBmaWJlcidzIG1lbW9pemVkU3RhdGUgZmllbGQuIFRoZVxuLy8gY3VycmVudCBob29rIGxpc3QgaXMgdGhlIGxpc3QgdGhhdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IGZpYmVyLiBUaGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MgaG9vayBsaXN0IGlzIGEgbmV3IGxpc3QgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuLy8gd29yay1pbi1wcm9ncmVzcyBmaWJlci5cblxudmFyIGN1cnJlbnRIb29rID0gbnVsbDtcbnZhciB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsOyAvLyBXaGV0aGVyIGFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIGF0IGFueSBwb2ludCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gVGhpc1xuLy8gZG9lcyBub3QgZ2V0IHJlc2V0IGlmIHdlIGRvIGFub3RoZXIgcmVuZGVyIHBhc3M7IG9ubHkgd2hlbiB3ZSdyZSBjb21wbGV0ZWx5XG4vLyBmaW5pc2hlZCBldmFsdWF0aW5nIHRoaXMgY29tcG9uZW50LiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBzbyB3ZSBrbm93XG4vLyB3aGV0aGVyIHdlIG5lZWQgdG8gY2xlYXIgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgYWZ0ZXIgYSB0aHJvdy5cblxudmFyIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTsgLy8gV2hlcmUgYW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgb25seSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHBhc3MuIFRoaXNcbi8vIGdldHMgcmVzZXQgYWZ0ZXIgZWFjaCBhdHRlbXB0LlxuLy8gVE9ETzogTWF5YmUgdGhlcmUncyBzb21lIHdheSB0byBjb25zb2xpZGF0ZSB0aGlzIHdpdGhcbi8vIGBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlYC4gT3Igd2l0aCBgbnVtYmVyT2ZSZVJlbmRlcnNgLlxuXG52YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG52YXIgUkVfUkVOREVSX0xJTUlUID0gMjU7IC8vIEluIERFViwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBwcmltaXRpdmUgaG9va1xuXG52YXIgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsOyAvLyBJbiBERVYsIHRoaXMgbGlzdCBlbnN1cmVzIHRoYXQgaG9va3MgYXJlIGNhbGxlZCBpbiB0aGUgc2FtZSBvcmRlciBiZXR3ZWVuIHJlbmRlcnMuXG4vLyBUaGUgbGlzdCBzdG9yZXMgdGhlIG9yZGVyIG9mIGhvb2tzIHVzZWQgZHVyaW5nIHRoZSBpbml0aWFsIHJlbmRlciAobW91bnQpLlxuLy8gU3Vic2VxdWVudCByZW5kZXJzICh1cGRhdGVzKSByZWZlcmVuY2UgdGhpcyBsaXN0LlxuXG52YXIgaG9va1R5cGVzRGV2ID0gbnVsbDtcbnZhciBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBJbiBERVYsIHRoaXMgdHJhY2tzIHdoZXRoZXIgY3VycmVudGx5IHJlbmRlcmluZyBjb21wb25lbnQgbmVlZHMgdG8gaWdub3JlXG4vLyB0aGUgZGVwZW5kZW5jaWVzIGZvciBIb29rcyB0aGF0IG5lZWQgdGhlbSAoZS5nLiB1c2VFZmZlY3Qgb3IgdXNlTWVtbykuXG4vLyBXaGVuIHRydWUsIHN1Y2ggSG9va3Mgd2lsbCBhbHdheXMgYmUgXCJyZW1vdW50ZWRcIi4gT25seSB1c2VkIGR1cmluZyBob3QgcmVsb2FkLlxuXG52YXIgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBmYWxzZTtcblxuZnVuY3Rpb24gbW91bnRIb29rVHlwZXNEZXYoKSB7XG4gIHtcbiAgICB2YXIgaG9va05hbWUgPSBjdXJyZW50SG9va05hbWVJbkRldjtcblxuICAgIGlmIChob29rVHlwZXNEZXYgPT09IG51bGwpIHtcbiAgICAgIGhvb2tUeXBlc0RldiA9IFtob29rTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGhvb2tUeXBlc0Rldi5wdXNoKGhvb2tOYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9va1R5cGVzRGV2KCkge1xuICB7XG4gICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldisrO1xuXG4gICAgICBpZiAoaG9va1R5cGVzRGV2W2hvb2tUeXBlc1VwZGF0ZUluZGV4RGV2XSAhPT0gaG9va05hbWUpIHtcbiAgICAgICAgd2Fybk9uSG9va01pc21hdGNoSW5EZXYoaG9va05hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKSB7XG4gIHtcbiAgICBpZiAoZGVwcyAhPT0gdW5kZWZpbmVkICYmIGRlcHMgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoZGVwcykpIHtcbiAgICAgIC8vIFZlcmlmeSBkZXBzLCBidXQgb25seSBvbiBtb3VudCB0byBhdm9pZCBleHRyYSBjaGVja3MuXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoZWlyIHR5cGUgd291bGQgY2hhbmdlIGFzIHVzdWFsbHkgeW91IGRlZmluZSB0aGVtIGlubGluZS5cbiAgICAgIGVycm9yKCclcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IHRoYXQgaXMgbm90IGFuIGFycmF5IChpbnN0ZWFkLCByZWNlaXZlZCBgJXNgKS4gV2hlbiAnICsgJ3NwZWNpZmllZCwgdGhlIGZpbmFsIGFyZ3VtZW50IG11c3QgYmUgYW4gYXJyYXkuJywgY3VycmVudEhvb2tOYW1lSW5EZXYsIHR5cGVvZiBkZXBzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uSG9va01pc21hdGNoSW5EZXYoY3VycmVudEhvb2tOYW1lKSB7XG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS50eXBlKTtcblxuICAgIGlmICghZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgdGFibGUgPSAnJztcbiAgICAgICAgdmFyIHNlY29uZENvbHVtblN0YXJ0ID0gMzA7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gaG9va1R5cGVzVXBkYXRlSW5kZXhEZXY7IGkrKykge1xuICAgICAgICAgIHZhciBvbGRIb29rTmFtZSA9IGhvb2tUeXBlc0RldltpXTtcbiAgICAgICAgICB2YXIgbmV3SG9va05hbWUgPSBpID09PSBob29rVHlwZXNVcGRhdGVJbmRleERldiA/IGN1cnJlbnRIb29rTmFtZSA6IG9sZEhvb2tOYW1lO1xuICAgICAgICAgIHZhciByb3cgPSBpICsgMSArIFwiLiBcIiArIG9sZEhvb2tOYW1lOyAvLyBFeHRyYSBzcGFjZSBzbyBzZWNvbmQgY29sdW1uIGxpbmVzIHVwXG4gICAgICAgICAgLy8gbG9sIEAgSUUgbm90IHN1cHBvcnRpbmcgU3RyaW5nI3JlcGVhdFxuXG4gICAgICAgICAgd2hpbGUgKHJvdy5sZW5ndGggPCBzZWNvbmRDb2x1bW5TdGFydCkge1xuICAgICAgICAgICAgcm93ICs9ICcgJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb3cgKz0gbmV3SG9va05hbWUgKyAnXFxuJztcbiAgICAgICAgICB0YWJsZSArPSByb3c7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcignUmVhY3QgaGFzIGRldGVjdGVkIGEgY2hhbmdlIGluIHRoZSBvcmRlciBvZiBIb29rcyBjYWxsZWQgYnkgJXMuICcgKyAnVGhpcyB3aWxsIGxlYWQgdG8gYnVncyBhbmQgZXJyb3JzIGlmIG5vdCBmaXhlZC4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgUnVsZXMgb2YgSG9va3M6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ydWxlcy1vZi1ob29rc1xcblxcbicgKyAnICAgUHJldmlvdXMgcmVuZGVyICAgICAgICAgICAgTmV4dCByZW5kZXJcXG4nICsgJyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbicgKyAnJXMnICsgJyAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXlxcbicsIGNvbXBvbmVudE5hbWUsIHRhYmxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dJbnZhbGlkSG9va0Vycm9yKCkge1xuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykge1xuICB7XG4gICAgaWYgKGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzKSB7XG4gICAgICAvLyBPbmx5IHRydWUgd2hlbiB0aGlzIGNvbXBvbmVudCBpcyBiZWluZyBob3QgcmVsb2FkZWQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHByZXZEZXBzID09PSBudWxsKSB7XG4gICAge1xuICAgICAgZXJyb3IoJyVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgZHVyaW5nIHRoaXMgcmVuZGVyLCBidXQgbm90IGR1cmluZyAnICsgJ3RoZSBwcmV2aW91cyByZW5kZXIuIEV2ZW4gdGhvdWdoIHRoZSBmaW5hbCBhcmd1bWVudCBpcyBvcHRpb25hbCwgJyArICdpdHMgdHlwZSBjYW5ub3QgY2hhbmdlIGJldHdlZW4gcmVuZGVycy4nLCBjdXJyZW50SG9va05hbWVJbkRldik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IGJvdGhlciBjb21wYXJpbmcgbGVuZ3RocyBpbiBwcm9kIGJlY2F1c2UgdGhlc2UgYXJyYXlzIHNob3VsZCBiZVxuICAgIC8vIHBhc3NlZCBpbmxpbmUuXG4gICAgaWYgKG5leHREZXBzLmxlbmd0aCAhPT0gcHJldkRlcHMubGVuZ3RoKSB7XG4gICAgICBlcnJvcignVGhlIGZpbmFsIGFyZ3VtZW50IHBhc3NlZCB0byAlcyBjaGFuZ2VkIHNpemUgYmV0d2VlbiByZW5kZXJzLiBUaGUgJyArICdvcmRlciBhbmQgc2l6ZSBvZiB0aGlzIGFycmF5IG11c3QgcmVtYWluIGNvbnN0YW50LlxcblxcbicgKyAnUHJldmlvdXM6ICVzXFxuJyArICdJbmNvbWluZzogJXMnLCBjdXJyZW50SG9va05hbWVJbkRldiwgXCJbXCIgKyBwcmV2RGVwcy5qb2luKCcsICcpICsgXCJdXCIsIFwiW1wiICsgbmV4dERlcHMuam9pbignLCAnKSArIFwiXVwiKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZEZXBzLmxlbmd0aCAmJiBpIDwgbmV4dERlcHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob2JqZWN0SXMobmV4dERlcHNbaV0sIHByZXZEZXBzW2ldKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnLCBuZXh0UmVuZGVyTGFuZXMpIHtcbiAgcmVuZGVyTGFuZXMgPSBuZXh0UmVuZGVyTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcblxuICB7XG4gICAgaG9va1R5cGVzRGV2ID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzIDogbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBVc2VkIGZvciBob3QgcmVsb2FkaW5nOlxuXG4gICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lczsgLy8gVGhlIGZvbGxvd2luZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVzZXRcbiAgLy8gY3VycmVudEhvb2sgPSBudWxsO1xuICAvLyB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAvLyBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gIC8vIFRPRE8gV2FybiBpZiBubyBob29rcyBhcmUgdXNlZCBhdCBhbGwgZHVyaW5nIG1vdW50LCB0aGVuIHNvbWUgYXJlIHVzZWQgZHVyaW5nIHVwZGF0ZS5cbiAgLy8gQ3VycmVudGx5IHdlIHdpbGwgaWRlbnRpZnkgdGhlIHVwZGF0ZSByZW5kZXIgYXMgYSBtb3VudCBiZWNhdXNlIG1lbW9pemVkU3RhdGUgPT09IG51bGwuXG4gIC8vIFRoaXMgaXMgdHJpY2t5IGJlY2F1c2UgaXQncyB2YWxpZCBmb3IgY2VydGFpbiB0eXBlcyBvZiBjb21wb25lbnRzIChlLmcuIFJlYWN0LmxhenkpXG4gIC8vIFVzaW5nIG1lbW9pemVkU3RhdGUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG1vdW50L3VwZGF0ZSBvbmx5IHdvcmtzIGlmIGF0IGxlYXN0IG9uZSBzdGF0ZWZ1bCBob29rIGlzIHVzZWQuXG4gIC8vIE5vbi1zdGF0ZWZ1bCBob29rcyAoZS5nLiBjb250ZXh0KSBkb24ndCBnZXQgYWRkZWQgdG8gbWVtb2l6ZWRTdGF0ZSxcbiAgLy8gc28gbWVtb2l6ZWRTdGF0ZSB3b3VsZCBiZSBudWxsIGR1cmluZyB1cGRhdGVzIGFuZCBtb3VudHMuXG5cbiAge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgIH0gZWxzZSBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGRpc3BhdGNoZXIgaGFuZGxlcyBhbiBlZGdlIGNhc2Ugd2hlcmUgYSBjb21wb25lbnQgaXMgdXBkYXRpbmcsXG4gICAgICAvLyBidXQgbm8gc3RhdGVmdWwgaG9va3MgaGF2ZSBiZWVuIHVzZWQuXG4gICAgICAvLyBXZSB3YW50IHRvIG1hdGNoIHRoZSBwcm9kdWN0aW9uIGNvZGUgYmVoYXZpb3IgKHdoaWNoIHdpbGwgdXNlIEhvb2tzRGlzcGF0Y2hlck9uTW91bnQpLFxuICAgICAgLy8gYnV0IHdpdGggdGhlIGV4dHJhIERFViB2YWxpZGF0aW9uIHRvIGVuc3VyZSBob29rcyBvcmRlcmluZyBoYXNuJ3QgY2hhbmdlZC5cbiAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBkb2VzIHRoYXQuXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVY7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTsgLy8gQ2hlY2sgaWYgdGhlcmUgd2FzIGEgcmVuZGVyIHBoYXNlIHVwZGF0ZVxuXG4gIGlmIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpIHtcbiAgICAvLyBLZWVwIHJlbmRlcmluZyBpbiBhIGxvb3AgZm9yIGFzIGxvbmcgYXMgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgY29udGludWUgdG9cbiAgICAvLyBiZSBzY2hlZHVsZWQuIFVzZSBhIGNvdW50ZXIgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cbiAgICB2YXIgbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xuXG4gICAgZG8ge1xuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG5cbiAgICAgIGlmICghKG51bWJlck9mUmVSZW5kZXJzIDwgUkVfUkVOREVSX0xJTUlUKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVG9vIG1hbnkgcmUtcmVuZGVycy4gUmVhY3QgbGltaXRzIHRoZSBudW1iZXIgb2YgcmVuZGVycyB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBudW1iZXJPZlJlUmVuZGVycyArPSAxO1xuXG4gICAgICB7XG4gICAgICAgIC8vIEV2ZW4gd2hlbiBob3QgcmVsb2FkaW5nLCBhbGxvdyBkZXBlbmRlbmNpZXMgdG8gc3RhYmlsaXplXG4gICAgICAgIC8vIGFmdGVyIGZpcnN0IHJlbmRlciB0byBwcmV2ZW50IGluZmluaXRlIHJlbmRlciBwaGFzZSB1cGRhdGVzLlxuICAgICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuICAgICAgfSAvLyBTdGFydCBvdmVyIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdFxuXG5cbiAgICAgIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gQWxzbyB2YWxpZGF0ZSBob29rIG9yZGVyIGZvciBjYXNjYWRpbmcgdXBkYXRlcy5cbiAgICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgIH1cblxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWIDtcbiAgICAgIGNoaWxkcmVuID0gQ29tcG9uZW50KHByb3BzLCBzZWNvbmRBcmcpO1xuICAgIH0gd2hpbGUgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyk7XG4gIH0gLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW5kZXIgcGhhc2UgYW5kIHRoZXJlJ3Mgbm8gcmUtZW50cmFuY3kuXG5cblxuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gaG9va1R5cGVzRGV2O1xuICB9IC8vIFRoaXMgY2hlY2sgdXNlcyBjdXJyZW50SG9vayBzbyB0aGF0IGl0IHdvcmtzIHRoZSBzYW1lIGluIERFViBhbmQgcHJvZCBidW5kbGVzLlxuICAvLyBob29rVHlwZXNEZXYgY291bGQgY2F0Y2ggbW9yZSBjYXNlcyAoZS5nLiBjb250ZXh0KSBidXQgb25seSBpbiBERVYgYnVuZGxlcy5cblxuXG4gIHZhciBkaWRSZW5kZXJUb29GZXdIb29rcyA9IGN1cnJlbnRIb29rICE9PSBudWxsICYmIGN1cnJlbnRIb29rLm5leHQgIT09IG51bGw7XG4gIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICB7XG4gICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgfVxuXG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcblxuICBpZiAoISFkaWRSZW5kZXJUb29GZXdIb29rcykge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlbmRlcmVkIGZld2VyIGhvb2tzIHRoYW4gZXhwZWN0ZWQuIFRoaXMgbWF5IGJlIGNhdXNlZCBieSBhbiBhY2NpZGVudGFsIGVhcmx5IHJldHVybiBzdGF0ZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5mdW5jdGlvbiBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfihQYXNzaXZlIHwgVXBkYXRlKTtcbiAgY3VycmVudC5sYW5lcyA9IHJlbW92ZUxhbmVzKGN1cnJlbnQubGFuZXMsIGxhbmVzKTtcbn1cbmZ1bmN0aW9uIHJlc2V0SG9va3NBZnRlclRocm93KCkge1xuICAvLyBXZSBjYW4gYXNzdW1lIHRoZSBwcmV2aW91cyBkaXNwYXRjaGVyIGlzIGFsd2F5cyB0aGlzIG9uZSwgc2luY2Ugd2Ugc2V0IGl0XG4gIC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbmRlciBwaGFzZSBhbmQgdGhlcmUncyBubyByZS1lbnRyYW5jeS5cbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICAvLyBUaGVyZSB3ZXJlIHJlbmRlciBwaGFzZSB1cGRhdGVzLiBUaGVzZSBhcmUgb25seSB2YWxpZCBmb3IgdGhpcyByZW5kZXJcbiAgICAvLyBwaGFzZSwgd2hpY2ggd2UgYXJlIG5vdyBhYm9ydGluZy4gUmVtb3ZlIHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlcyBzb1xuICAgIC8vIHRoZXkgZG8gbm90IHBlcnNpc3QgdG8gdGhlIG5leHQgcmVuZGVyLiBEbyBub3QgcmVtb3ZlIHVwZGF0ZXMgZnJvbSBob29rc1xuICAgIC8vIHRoYXQgd2VyZW4ndCBwcm9jZXNzZWQuXG4gICAgLy9cbiAgICAvLyBPbmx5IHJlc2V0IHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlIGlmIGl0IGhhcyBhIGNsb25lLiBJZiBpdCBkb2VzXG4gICAgLy8gbm90IGhhdmUgYSBjbG9uZSwgdGhhdCBtZWFucyBpdCB3YXNuJ3QgcHJvY2Vzc2VkLCBhbmQgdGhlIHVwZGF0ZXMgd2VyZVxuICAgIC8vIHNjaGVkdWxlZCBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIHZhciBob29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlO1xuXG4gICAgd2hpbGUgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgICAgIGlmIChxdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaG9vayA9IGhvb2submV4dDtcbiAgICB9XG5cbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gIH1cblxuICByZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBjdXJyZW50SG9vayA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG5cbiAge1xuICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuICB9XG5cbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCkge1xuICB2YXIgaG9vayA9IHtcbiAgICBtZW1vaXplZFN0YXRlOiBudWxsLFxuICAgIGJhc2VTdGF0ZTogbnVsbCxcbiAgICBiYXNlUXVldWU6IG51bGwsXG4gICAgcXVldWU6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9O1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBob29rIGluIHRoZSBsaXN0XG4gICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID0gaG9vaztcbiAgfSBlbHNlIHtcbiAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gaG9vaztcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJvdGggZm9yIHVwZGF0ZXMgYW5kIGZvciByZS1yZW5kZXJzIHRyaWdnZXJlZCBieSBhXG4gIC8vIHJlbmRlciBwaGFzZSB1cGRhdGUuIEl0IGFzc3VtZXMgdGhlcmUgaXMgZWl0aGVyIGEgY3VycmVudCBob29rIHdlIGNhblxuICAvLyBjbG9uZSwgb3IgYSB3b3JrLWluLXByb2dyZXNzIGhvb2sgZnJvbSBhIHByZXZpb3VzIHJlbmRlciBwYXNzIHRoYXQgd2UgY2FuXG4gIC8vIHVzZSBhcyBhIGJhc2UuIFdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgYmFzZSBsaXN0LCB3ZSBtdXN0IHN3aXRjaCB0b1xuICAvLyB0aGUgZGlzcGF0Y2hlciB1c2VkIGZvciBtb3VudHMuXG4gIHZhciBuZXh0Q3VycmVudEhvb2s7XG5cbiAgaWYgKGN1cnJlbnRIb29rID09PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRDdXJyZW50SG9vayA9IG51bGw7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gIH1cblxuICB2YXIgbmV4dFdvcmtJblByb2dyZXNzSG9vaztcblxuICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gIH1cblxuICBpZiAobmV4dFdvcmtJblByb2dyZXNzSG9vayAhPT0gbnVsbCkge1xuICAgIC8vIFRoZXJlJ3MgYWxyZWFkeSBhIHdvcmstaW4tcHJvZ3Jlc3MuIFJldXNlIGl0LlxuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG5leHRXb3JrSW5Qcm9ncmVzc0hvb2s7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0O1xuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICB9IGVsc2Uge1xuICAgIC8vIENsb25lIGZyb20gdGhlIGN1cnJlbnQgaG9vay5cbiAgICBpZiAoIShuZXh0Q3VycmVudEhvb2sgIT09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJlbmRlcmVkIG1vcmUgaG9va3MgdGhhbiBkdXJpbmcgdGhlIHByZXZpb3VzIHJlbmRlci5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgIHZhciBuZXdIb29rID0ge1xuICAgICAgbWVtb2l6ZWRTdGF0ZTogY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudEhvb2suYmFzZVN0YXRlLFxuICAgICAgYmFzZVF1ZXVlOiBjdXJyZW50SG9vay5iYXNlUXVldWUsXG4gICAgICBxdWV1ZTogY3VycmVudEhvb2sucXVldWUsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3QuXG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXdIb29rO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gbmV3SG9vaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkge1xuICByZXR1cm4ge1xuICAgIGxhc3RFZmZlY3Q6IG51bGxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYmFzaWNTdGF0ZVJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAvLyAkRmxvd0ZpeE1lOiBGbG93IGRvZXNuJ3QgbGlrZSBtaXhlZCB0eXBlc1xuICByZXR1cm4gdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGFjdGlvbihzdGF0ZSkgOiBhY3Rpb247XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIGluaXRpYWxTdGF0ZTtcblxuICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdChpbml0aWFsQXJnKTtcbiAgfSBlbHNlIHtcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsQXJnO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWUgPSB7XG4gICAgcGVuZGluZzogbnVsbCxcbiAgICBkaXNwYXRjaDogbnVsbCxcbiAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiByZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIHF1ZXVlKTtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgaWYgKCEocXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7XG4gIHZhciBjdXJyZW50ID0gY3VycmVudEhvb2s7IC8vIFRoZSBsYXN0IHJlYmFzZSB1cGRhdGUgdGhhdCBpcyBOT1QgcGFydCBvZiB0aGUgYmFzZSBzdGF0ZS5cblxuICB2YXIgYmFzZVF1ZXVlID0gY3VycmVudC5iYXNlUXVldWU7IC8vIFRoZSBsYXN0IHBlbmRpbmcgdXBkYXRlIHRoYXQgaGFzbid0IGJlZW4gcHJvY2Vzc2VkIHlldC5cblxuICB2YXIgcGVuZGluZ1F1ZXVlID0gcXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZ1F1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gV2UgaGF2ZSBuZXcgdXBkYXRlcyB0aGF0IGhhdmVuJ3QgYmVlbiBwcm9jZXNzZWQgeWV0LlxuICAgIC8vIFdlJ2xsIGFkZCB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuICAgIGlmIChiYXNlUXVldWUgIT09IG51bGwpIHtcbiAgICAgIC8vIE1lcmdlIHRoZSBwZW5kaW5nIHF1ZXVlIGFuZCB0aGUgYmFzZSBxdWV1ZS5cbiAgICAgIHZhciBiYXNlRmlyc3QgPSBiYXNlUXVldWUubmV4dDtcbiAgICAgIHZhciBwZW5kaW5nRmlyc3QgPSBwZW5kaW5nUXVldWUubmV4dDtcbiAgICAgIGJhc2VRdWV1ZS5uZXh0ID0gcGVuZGluZ0ZpcnN0O1xuICAgICAgcGVuZGluZ1F1ZXVlLm5leHQgPSBiYXNlRmlyc3Q7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGN1cnJlbnQuYmFzZVF1ZXVlICE9PSBiYXNlUXVldWUpIHtcbiAgICAgICAgLy8gSW50ZXJuYWwgaW52YXJpYW50IHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGZlYXNpYmx5IGNvdWxkIGluXG4gICAgICAgIC8vIHRoZSBmdXR1cmUgaWYgd2UgaW1wbGVtZW50IHJlc3VtaW5nLCBvciBzb21lIGZvcm0gb2YgdGhhdC5cbiAgICAgICAgZXJyb3IoJ0ludGVybmFsIGVycm9yOiBFeHBlY3RlZCB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIHRvIGJlIGEgY2xvbmUuICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50LmJhc2VRdWV1ZSA9IGJhc2VRdWV1ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChiYXNlUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBXZSBoYXZlIGEgcXVldWUgdG8gcHJvY2Vzcy5cbiAgICB2YXIgZmlyc3QgPSBiYXNlUXVldWUubmV4dDtcbiAgICB2YXIgbmV3U3RhdGUgPSBjdXJyZW50LmJhc2VTdGF0ZTtcbiAgICB2YXIgbmV3QmFzZVN0YXRlID0gbnVsbDtcbiAgICB2YXIgbmV3QmFzZVF1ZXVlRmlyc3QgPSBudWxsO1xuICAgIHZhciBuZXdCYXNlUXVldWVMYXN0ID0gbnVsbDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3Q7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHVwZGF0ZS5sYW5lO1xuXG4gICAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgdXBkYXRlTGFuZSkpIHtcbiAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAvLyBza2lwcGVkIHVwZGF0ZSwgdGhlIHByZXZpb3VzIHVwZGF0ZS9zdGF0ZSBpcyB0aGUgbmV3IGJhc2VcbiAgICAgICAgLy8gdXBkYXRlL3N0YXRlLlxuICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgbGFuZTogdXBkYXRlTGFuZSxcbiAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgZWFnZXJSZWR1Y2VyOiB1cGRhdGUuZWFnZXJSZWR1Y2VyLFxuICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbmV3QmFzZVF1ZXVlTGFzdCA9IGNsb25lO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBjbG9uZTtcbiAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG4gICAgICAgIC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlXG4gICAgICAgIC8vIHJlbmRlckxhbmVzIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG5cbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyA9IG1lcmdlTGFuZXMoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICAgIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXModXBkYXRlTGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2Nsb25lID0ge1xuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGUgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIHNvIHdlIG5ldmVyIHdhbnQgdW5jb21taXRcbiAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBuZXZlciBiZSBza2lwcGVkIGJ5IHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgIGxhbmU6IE5vTGFuZSxcbiAgICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICAgIGVhZ2VyUmVkdWNlcjogdXBkYXRlLmVhZ2VyUmVkdWNlcixcbiAgICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgfSAvLyBQcm9jZXNzIHRoaXMgdXBkYXRlLlxuXG5cbiAgICAgICAgaWYgKHVwZGF0ZS5lYWdlclJlZHVjZXIgPT09IHJlZHVjZXIpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHVwZGF0ZSB3YXMgcHJvY2Vzc2VkIGVhZ2VybHksIGFuZCBpdHMgcmVkdWNlciBtYXRjaGVzIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgcmVkdWNlciwgd2UgY2FuIHVzZSB0aGUgZWFnZXJseSBjb21wdXRlZCBzdGF0ZS5cbiAgICAgICAgICBuZXdTdGF0ZSA9IHVwZGF0ZS5lYWdlclN0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlICh1cGRhdGUgIT09IG51bGwgJiYgdXBkYXRlICE9PSBmaXJzdCk7XG5cbiAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IG5ld0Jhc2VRdWV1ZUZpcnN0O1xuICAgIH0gLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgIC8vIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLlxuXG5cbiAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIGhvb2suYmFzZVN0YXRlID0gbmV3QmFzZVN0YXRlO1xuICAgIGhvb2suYmFzZVF1ZXVlID0gbmV3QmFzZVF1ZXVlTGFzdDtcbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2g7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgaWYgKCEocXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7IC8vIFRoaXMgaXMgYSByZS1yZW5kZXIuIEFwcGx5IHRoZSBuZXcgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG8gdGhlIHByZXZpb3VzXG4gIC8vIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cblxuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaDtcbiAgdmFyIGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IHF1ZXVlLnBlbmRpbmc7XG4gIHZhciBuZXdTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobGFzdFJlbmRlclBoYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHF1ZXVlIGRvZXNuJ3QgcGVyc2lzdCBwYXN0IHRoaXMgcmVuZGVyIHBhc3MuXG4gICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgdmFyIGZpcnN0UmVuZGVyUGhhc2VVcGRhdGUgPSBsYXN0UmVuZGVyUGhhc2VVcGRhdGUubmV4dDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZTtcblxuICAgIGRvIHtcbiAgICAgIC8vIFByb2Nlc3MgdGhpcyByZW5kZXIgcGhhc2UgdXBkYXRlLiBXZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoZVxuICAgICAgLy8gcHJpb3JpdHkgYmVjYXVzZSBpdCB3aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBhcyB0aGUgY3VycmVudFxuICAgICAgLy8gcmVuZGVyJ3MuXG4gICAgICB2YXIgYWN0aW9uID0gdXBkYXRlLmFjdGlvbjtcbiAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSk7IC8vIE1hcmsgdGhhdCB0aGUgZmliZXIgcGVyZm9ybWVkIHdvcmssIGJ1dCBvbmx5IGlmIHRoZSBuZXcgc3RhdGUgaXNcbiAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuXG4gICAgaWYgKCFvYmplY3RJcyhuZXdTdGF0ZSwgaG9vay5tZW1vaXplZFN0YXRlKSkge1xuICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICB9XG5cbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTsgLy8gRG9uJ3QgcGVyc2lzdCB0aGUgc3RhdGUgYWNjdW11bGF0ZWQgZnJvbSB0aGUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG9cbiAgICAvLyB0aGUgYmFzZSBzdGF0ZSB1bmxlc3MgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgIC8vIFRPRE86IE5vdCBzdXJlIGlmIHRoaXMgaXMgdGhlIGRlc2lyZWQgc2VtYW50aWNzLCBidXQgaXQncyB3aGF0IHdlXG4gICAgLy8gZG8gZm9yIGdEU0ZQLiBJIGNhbid0IHJlbWVtYmVyIHdoeS5cblxuICAgIGlmIChob29rLmJhc2VRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAgcmV0dXJuIFtuZXdTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KSB7XG4gIHtcbiAgICB3YXJuQWJvdXRNdWx0aXBsZVJlbmRlcmVyc0RFVihzb3VyY2UpO1xuICB9XG5cbiAgdmFyIGdldFZlcnNpb24gPSBzb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihzb3VyY2UuX3NvdXJjZSk7IC8vIElzIGl0IHNhZmUgZm9yIHRoaXMgY29tcG9uZW50IHRvIHJlYWQgZnJvbSB0aGlzIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyP1xuXG4gIHZhciBpc1NhZmVUb1JlYWRGcm9tU291cmNlID0gZmFsc2U7IC8vIENoZWNrIHRoZSB2ZXJzaW9uIGZpcnN0LlxuICAvLyBJZiB0aGlzIHJlbmRlciBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQgd2l0aCBhIHNwZWNpZmljIHZlcnNpb24sXG4gIC8vIHdlIGNhbiB1c2UgaXQgYWxvbmUgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBzYWZlbHkgcmVhZCBmcm9tIHRoZSBzb3VyY2UuXG5cbiAgdmFyIGN1cnJlbnRSZW5kZXJWZXJzaW9uID0gZ2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKHNvdXJjZSk7XG5cbiAgaWYgKGN1cnJlbnRSZW5kZXJWZXJzaW9uICE9PSBudWxsKSB7XG4gICAgLy8gSXQncyBzYWZlIHRvIHJlYWQgaWYgdGhlIHN0b3JlIGhhc24ndCBiZWVuIG11dGF0ZWQgc2luY2UgdGhlIGxhc3QgdGltZVxuICAgIC8vIHdlIHJlYWQgc29tZXRoaW5nLlxuICAgIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBjdXJyZW50UmVuZGVyVmVyc2lvbiA9PT0gdmVyc2lvbjtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIHZlcnNpb24sIHRoZW4gdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSByZWFkIGZyb20gdGhlXG4gICAgLy8gc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgcGFzcywgc28gd2UgbmVlZCB0byBkbyBhIGJpdCBtb3JlIHdvcmsuXG4gICAgLy8gV2hhdCB3ZSBuZWVkIHRvIGRldGVybWluZSBpcyBpZiB0aGVyZSBhcmUgYW55IGhvb2tzIHRoYXQgYWxyZWFkeVxuICAgIC8vIHN1YnNjcmliZWQgdG8gdGhlIHNvdXJjZSwgYW5kIGlmIHNvLCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcGVuZGluZ1xuICAgIC8vIG11dGF0aW9ucyB0aGF0IGhhdmVuJ3QgYmVlbiBzeW5jaHJvbml6ZWQgeWV0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgbXV0YXRpb25zLCB0aGVuIGByb290Lm11dGFibGVSZWFkTGFuZXNgIHdpbGwgYmVcbiAgICAvLyBlbXB0eSwgYW5kIHdlIGtub3cgd2UgY2FuIHNhZmVseSByZWFkLlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgKmFyZSogcGVuZGluZyBtdXRhdGlvbnMsIHdlIG1heSBzdGlsbCBiZSBhYmxlIHRvIHNhZmVseSByZWFkXG4gICAgLy8gaWYgdGhlIGN1cnJlbnRseSByZW5kZXJpbmcgbGFuZXMgYXJlIGluY2x1c2l2ZSBvZiB0aGUgcGVuZGluZyBtdXRhdGlvblxuICAgIC8vIGxhbmVzLCBzaW5jZSB0aGF0IGd1YXJhbnRlZXMgdGhhdCB0aGUgdmFsdWUgd2UncmUgYWJvdXQgdG8gcmVhZCBmcm9tXG4gICAgLy8gdGhlIHNvdXJjZSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZHVyaW5nIHRoZSBtb3N0XG4gICAgLy8gcmVjZW50IG11dGF0aW9uLlxuICAgIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHJvb3QubXV0YWJsZVJlYWRMYW5lcyk7XG5cbiAgICBpZiAoaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSkge1xuICAgICAgLy8gSWYgaXQncyBzYWZlIHRvIHJlYWQgZnJvbSB0aGlzIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgLy8gc3RvcmUgdGhlIHZlcnNpb24gaW4gY2FzZSBvdGhlciBjb21wb25lbnRzIHJlYWQgZnJvbSBpdC5cbiAgICAgIC8vIEEgY2hhbmdlZCB2ZXJzaW9uIG51bWJlciB3aWxsIGxldCB0aG9zZSBjb21wb25lbnRzIGtub3cgdG8gdGhyb3cgYW5kIHJlc3RhcnQgdGhlIHJlbmRlci5cbiAgICAgIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihzb3VyY2UsIHZlcnNpb24pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc1NhZmVUb1JlYWRGcm9tU291cmNlKSB7XG4gICAgdmFyIHNuYXBzaG90ID0gZ2V0U25hcHNob3Qoc291cmNlLl9zb3VyY2UpO1xuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBzbmFwc2hvdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignTXV0YWJsZSBzb3VyY2Ugc2hvdWxkIG5vdCByZXR1cm4gYSBmdW5jdGlvbiBhcyB0aGUgc25hcHNob3QgdmFsdWUuICcgKyAnRnVuY3Rpb25zIG1heSBjbG9zZSBvdmVyIG11dGFibGUgdmFsdWVzIGFuZCBjYXVzZSB0ZWFyaW5nLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzbmFwc2hvdDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIHNwZWNpYWwgY2FzZSBvZiBhIG11dGFibGUgc291cmNlIGJlaW5nIHNoYXJlZCBiZXR3ZWVuIHJlbmRlcmVycy5cbiAgICAvLyBJbiB0aGF0IGNhc2UsIGlmIHRoZSBzb3VyY2UgaXMgbXV0YXRlZCBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kIHJlbmRlcmVyLFxuICAgIC8vIFRoZSBzZWNvbmQgcmVuZGVyZXIgZG9uJ3Qga25vdyB0aGF0IGl0IG5lZWRzIHRvIHJlc2V0IHRoZSBXSVAgdmVyc2lvbiBkdXJpbmcgdW53aW5kLFxuICAgIC8vIChiZWNhdXNlIHRoZSBob29rIG9ubHkgbWFya3Mgc291cmNlcyBhcyBkaXJ0eSBpZiBpdCdzIHdyaXR0ZW4gdG8gdGhlaXIgV0lQIHZlcnNpb24pLlxuICAgIC8vIFRoYXQgd291bGQgY2F1c2UgdGhpcyB0ZWFyIGNoZWNrIHRvIHRocm93IGFnYWluIGFuZCBldmVudHVhbGx5IGJlIHZpc2libGUgdG8gdGhlIHVzZXIuXG4gICAgLy8gV2UgY2FuIGF2b2lkIHRoaXMgaW5maW5pdGUgbG9vcCBieSBleHBsaWNpdGx5IG1hcmtpbmcgdGhlIHNvdXJjZSBhcyBkaXJ0eS5cbiAgICAvL1xuICAgIC8vIFRoaXMgY2FuIGxlYWQgdG8gdGVhcmluZyBpbiB0aGUgZmlyc3QgcmVuZGVyZXIgd2hlbiBpdCByZXN1bWVzLFxuICAgIC8vIGJ1dCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IHRoYXQgKHNob3J0IG9mIHRocm93aW5nIGhlcmUgYW5kIHJlZnVzaW5nIHRvIGNvbnRpbnVlIHRoZSByZW5kZXIpLlxuICAgIG1hcmtTb3VyY2VBc0RpcnR5KHNvdXJjZSk7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCByZWFkIGZyb20gbXV0YWJsZSBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciB3aXRob3V0IHRlYXJpbmcuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVzZU11dGFibGVTb3VyY2UoaG9vaywgc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgaWYgKCEocm9vdCAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZ2V0VmVyc2lvbiA9IHNvdXJjZS5fZ2V0VmVyc2lvbjtcbiAgdmFyIHZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTtcbiAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuXG4gIHZhciBfZGlzcGF0Y2hlciR1c2VTdGF0ZSA9IGRpc3BhdGNoZXIudXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KTtcbiAgfSksXG4gICAgICBjdXJyZW50U25hcHNob3QgPSBfZGlzcGF0Y2hlciR1c2VTdGF0ZVswXSxcbiAgICAgIHNldFNuYXBzaG90ID0gX2Rpc3BhdGNoZXIkdXNlU3RhdGVbMV07XG5cbiAgdmFyIHNuYXBzaG90ID0gY3VycmVudFNuYXBzaG90OyAvLyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBzdGF0ZSBob29rIGFzIHdlbGwuXG4gIC8vIFdlIHVzZSBpdCB0byBjbGVhciB0aGUgcGVuZGluZyB1cGRhdGUgcXVldWUgaWYgd2UgaGF2ZSBhIG5ldyBzb3VyY2UuXG5cbiAgdmFyIHN0YXRlSG9vayA9IHdvcmtJblByb2dyZXNzSG9vaztcbiAgdmFyIG1lbW9pemVkU3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gIHZhciByZWZzID0gbWVtb2l6ZWRTdGF0ZS5yZWZzO1xuICB2YXIgcHJldkdldFNuYXBzaG90ID0gcmVmcy5nZXRTbmFwc2hvdDtcbiAgdmFyIHByZXZTb3VyY2UgPSBtZW1vaXplZFN0YXRlLnNvdXJjZTtcbiAgdmFyIHByZXZTdWJzY3JpYmUgPSBtZW1vaXplZFN0YXRlLnN1YnNjcmliZTtcbiAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0ge1xuICAgIHJlZnM6IHJlZnMsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmVcbiAgfTsgLy8gU3luYyB0aGUgdmFsdWVzIG5lZWRlZCBieSBvdXIgc3Vic2NyaXB0aW9uIGhhbmRsZXIgYWZ0ZXIgZWFjaCBjb21taXQuXG5cbiAgZGlzcGF0Y2hlci51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJlZnMuZ2V0U25hcHNob3QgPSBnZXRTbmFwc2hvdDsgLy8gTm9ybWFsbHkgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uIGZvciBhIHN0YXRlIGhvb2sgbmV2ZXIgY2hhbmdlcyxcbiAgICAvLyBidXQgdGhpcyBob29rIHJlY3JlYXRlcyB0aGUgcXVldWUgaW4gY2VydGFpbiBjYXNlcyAgdG8gYXZvaWQgdXBkYXRlcyBmcm9tIHN0YWxlIHNvdXJjZXMuXG4gICAgLy8gaGFuZGxlQ2hhbmdlKCkgYmVsb3cgbmVlZHMgdG8gcmVmZXJlbmNlIHRoZSBkaXNwYXRjaCBmdW5jdGlvbiB3aXRob3V0IHJlLXN1YnNjcmliaW5nLFxuICAgIC8vIHNvIHdlIHVzZSBhIHJlZiB0byBlbnN1cmUgdGhhdCBpdCBhbHdheXMgaGFzIHRoZSBsYXRlc3QgdmVyc2lvbi5cblxuICAgIHJlZnMuc2V0U25hcHNob3QgPSBzZXRTbmFwc2hvdDsgLy8gQ2hlY2sgZm9yIGEgcG9zc2libGUgY2hhbmdlIGJldHdlZW4gd2hlbiB3ZSBsYXN0IHJlbmRlcmVkIG5vdy5cblxuICAgIHZhciBtYXliZU5ld1ZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTtcblxuICAgIGlmICghb2JqZWN0SXModmVyc2lvbiwgbWF5YmVOZXdWZXJzaW9uKSkge1xuICAgICAgdmFyIG1heWJlTmV3U25hcHNob3QgPSBnZXRTbmFwc2hvdChzb3VyY2UuX3NvdXJjZSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXliZU5ld1NuYXBzaG90ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZXJyb3IoJ011dGFibGUgc291cmNlIHNob3VsZCBub3QgcmV0dXJuIGEgZnVuY3Rpb24gYXMgdGhlIHNuYXBzaG90IHZhbHVlLiAnICsgJ0Z1bmN0aW9ucyBtYXkgY2xvc2Ugb3ZlciBtdXRhYmxlIHZhbHVlcyBhbmQgY2F1c2UgdGVhcmluZy4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIW9iamVjdElzKHNuYXBzaG90LCBtYXliZU5ld1NuYXBzaG90KSkge1xuICAgICAgICBzZXRTbmFwc2hvdChtYXliZU5ld1NuYXBzaG90KTtcbiAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICAgIG1hcmtSb290TXV0YWJsZVJlYWQocm9vdCwgbGFuZSk7XG4gICAgICB9IC8vIElmIHRoZSBzb3VyY2UgbXV0YXRlZCBiZXR3ZWVuIHJlbmRlciBhbmQgbm93LFxuICAgICAgLy8gdGhlcmUgbWF5IGJlIHN0YXRlIHVwZGF0ZXMgYWxyZWFkeSBzY2hlZHVsZWQgZnJvbSB0aGUgb2xkIHNvdXJjZS5cbiAgICAgIC8vIEVudGFuZ2xlIHRoZSB1cGRhdGVzIHNvIHRoYXQgdGhleSByZW5kZXIgaW4gdGhlIHNhbWUgYmF0Y2guXG5cblxuICAgICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgcm9vdC5tdXRhYmxlUmVhZExhbmVzKTtcbiAgICB9XG4gIH0sIFtnZXRTbmFwc2hvdCwgc291cmNlLCBzdWJzY3JpYmVdKTsgLy8gSWYgd2UgZ290IGEgbmV3IHNvdXJjZSBvciBzdWJzY3JpYmUgZnVuY3Rpb24sIHJlLXN1YnNjcmliZSBpbiBhIHBhc3NpdmUgZWZmZWN0LlxuXG4gIGRpc3BhdGNoZXIudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGxhdGVzdEdldFNuYXBzaG90ID0gcmVmcy5nZXRTbmFwc2hvdDtcbiAgICAgIHZhciBsYXRlc3RTZXRTbmFwc2hvdCA9IHJlZnMuc2V0U25hcHNob3Q7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxhdGVzdFNldFNuYXBzaG90KGxhdGVzdEdldFNuYXBzaG90KHNvdXJjZS5fc291cmNlKSk7IC8vIFJlY29yZCBhIHBlbmRpbmcgbXV0YWJsZSBzb3VyY2UgdXBkYXRlIHdpdGggdGhlIHNhbWUgZXhwaXJhdGlvbiB0aW1lLlxuXG4gICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgICBtYXJrUm9vdE11dGFibGVSZWFkKHJvb3QsIGxhbmUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQSBzZWxlY3RvciBtaWdodCB0aHJvdyBhZnRlciBhIHNvdXJjZSBtdXRhdGlvbi5cbiAgICAgICAgLy8gZS5nLiBpdCBtaWdodCB0cnkgdG8gcmVhZCBmcm9tIGEgcGFydCBvZiB0aGUgc3RvcmUgdGhhdCBubyBsb25nZXIgZXhpc3RzLlxuICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIHN0aWxsIHNjaGVkdWxlIGFuIHVwZGF0ZSB3aXRoIFJlYWN0LlxuICAgICAgICAvLyBXb3JzdCBjYXNlIHRoZSBzZWxlY3RvciB3aWxsIHRocm93IGFnYWluIGFuZCB0aGVuIGFuIGVycm9yIGJvdW5kYXJ5IHdpbGwgaGFuZGxlIGl0LlxuICAgICAgICBsYXRlc3RTZXRTbmFwc2hvdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgdW5zdWJzY3JpYmUgPSBzdWJzY3JpYmUoc291cmNlLl9zb3VyY2UsIGhhbmRsZUNoYW5nZSk7XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHVuc3Vic2NyaWJlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdNdXRhYmxlIHNvdXJjZSBzdWJzY3JpYmUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYW4gdW5zdWJzY3JpYmUgZnVuY3Rpb24uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9LCBbc291cmNlLCBzdWJzY3JpYmVdKTsgLy8gSWYgYW55IG9mIHRoZSBpbnB1dHMgdG8gdXNlTXV0YWJsZVNvdXJjZSBjaGFuZ2UsIHJlYWRpbmcgaXMgcG90ZW50aWFsbHkgdW5zYWZlLlxuICAvL1xuICAvLyBJZiBlaXRoZXIgdGhlIHNvdXJjZSBvciB0aGUgc3Vic2NyaXB0aW9uIGhhdmUgY2hhbmdlZCB3ZSBjYW4ndCBjYW4ndCB0cnVzdCB0aGUgdXBkYXRlIHF1ZXVlLlxuICAvLyBNYXliZSB0aGUgc291cmNlIGNoYW5nZWQgaW4gYSB3YXkgdGhhdCB0aGUgb2xkIHN1YnNjcmlwdGlvbiBpZ25vcmVkIGJ1dCB0aGUgbmV3IG9uZSBkZXBlbmRzIG9uLlxuICAvL1xuICAvLyBJZiB0aGUgZ2V0U25hcHNob3QgZnVuY3Rpb24gY2hhbmdlZCwgd2UgYWxzbyBzaG91bGRuJ3QgcmVseSBvbiB0aGUgdXBkYXRlIHF1ZXVlLlxuICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHVuZGVybHlpbmcgc291cmNlIHdhcyBtdXRhdGVkIGJldHdlZW4gdGhlIHdoZW4gdGhlIGxhc3QgXCJjaGFuZ2VcIiBldmVudCBmaXJlZCxcbiAgLy8gYW5kIHdoZW4gdGhlIGN1cnJlbnQgcmVuZGVyICh3aXRoIHRoZSBuZXcgZ2V0U25hcHNob3QgZnVuY3Rpb24pIGlzIHByb2Nlc3NlZC5cbiAgLy9cbiAgLy8gSW4gYm90aCBjYXNlcywgd2UgbmVlZCB0byB0aHJvdyBhd2F5IHBlbmRpbmcgdXBkYXRlcyAoc2luY2UgdGhleSBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50KVxuICAvLyBhbmQgdHJlYXQgcmVhZGluZyBmcm9tIHRoZSBzb3VyY2UgYXMgd2UgZG8gaW4gdGhlIG1vdW50IGNhc2UuXG5cbiAgaWYgKCFvYmplY3RJcyhwcmV2R2V0U25hcHNob3QsIGdldFNuYXBzaG90KSB8fCAhb2JqZWN0SXMocHJldlNvdXJjZSwgc291cmNlKSB8fCAhb2JqZWN0SXMocHJldlN1YnNjcmliZSwgc3Vic2NyaWJlKSkge1xuICAgIC8vIENyZWF0ZSBhIG5ldyBxdWV1ZSBhbmQgc2V0U3RhdGUgbWV0aG9kLFxuICAgIC8vIFNvIGlmIHRoZXJlIGFyZSBpbnRlcmxlYXZlZCB1cGRhdGVzLCB0aGV5IGdldCBwdXNoZWQgdG8gdGhlIG9sZGVyIHF1ZXVlLlxuICAgIC8vIFdoZW4gdGhpcyBiZWNvbWVzIGN1cnJlbnQsIHRoZSBwcmV2aW91cyBxdWV1ZSBhbmQgZGlzcGF0Y2ggbWV0aG9kIHdpbGwgYmUgZGlzY2FyZGVkLFxuICAgIC8vIGluY2x1ZGluZyBhbnkgaW50ZXJsZWF2aW5nIHVwZGF0ZXMgdGhhdCBvY2N1ci5cbiAgICB2YXIgbmV3UXVldWUgPSB7XG4gICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBzbmFwc2hvdFxuICAgIH07XG4gICAgbmV3UXVldWUuZGlzcGF0Y2ggPSBzZXRTbmFwc2hvdCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgbmV3UXVldWUpO1xuICAgIHN0YXRlSG9vay5xdWV1ZSA9IG5ld1F1ZXVlO1xuICAgIHN0YXRlSG9vay5iYXNlUXVldWUgPSBudWxsO1xuICAgIHNuYXBzaG90ID0gcmVhZEZyb21VbnN1YmNyaWJlZE11dGFibGVTb3VyY2Uocm9vdCwgc291cmNlLCBnZXRTbmFwc2hvdCk7XG4gICAgc3RhdGVIb29rLm1lbW9pemVkU3RhdGUgPSBzdGF0ZUhvb2suYmFzZVN0YXRlID0gc25hcHNob3Q7XG4gIH1cblxuICByZXR1cm4gc25hcHNob3Q7XG59XG5cbmZ1bmN0aW9uIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgcmVmczoge1xuICAgICAgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90LFxuICAgICAgc2V0U25hcHNob3Q6IG51bGxcbiAgICB9LFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlXG4gIH07XG4gIHJldHVybiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHJldHVybiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG59XG5cbmZ1bmN0aW9uIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcblxuICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWU6IEZsb3cgZG9lc24ndCBsaWtlIG1peGVkIHR5cGVzXG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlKCk7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZSA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIHF1ZXVlKTtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHJldHVybiB1cGRhdGVSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG59XG5cbmZ1bmN0aW9uIHB1c2hFZmZlY3QodGFnLCBjcmVhdGUsIGRlc3Ryb3ksIGRlcHMpIHtcbiAgdmFyIGVmZmVjdCA9IHtcbiAgICB0YWc6IHRhZyxcbiAgICBjcmVhdGU6IGNyZWF0ZSxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIGRlcHM6IGRlcHMsXG4gICAgLy8gQ2lyY3VsYXJcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIHZhciBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWU7XG5cbiAgaWYgKGNvbXBvbmVudFVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCk7XG4gICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZSA9IGNvbXBvbmVudFVwZGF0ZVF1ZXVlO1xuICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGFzdEVmZmVjdCA9IGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICBsYXN0RWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gICAgICBlZmZlY3QubmV4dCA9IGZpcnN0RWZmZWN0O1xuICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWZmZWN0O1xufVxuXG5mdW5jdGlvbiBtb3VudFJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcmVmID0ge1xuICAgIGN1cnJlbnQ6IGluaXRpYWxWYWx1ZVxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWYpO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcmVmO1xuICByZXR1cm4gcmVmO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHJldHVybiBob29rLm1lbW9pemVkU3RhdGU7XG59XG5cbmZ1bmN0aW9uIG1vdW50RWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgaG9va0ZsYWdzLCBjcmVhdGUsIHVuZGVmaW5lZCwgbmV4dERlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICBpZiAoY3VycmVudEhvb2sgIT09IG51bGwpIHtcbiAgICB2YXIgcHJldkVmZmVjdCA9IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGU7XG4gICAgZGVzdHJveSA9IHByZXZFZmZlY3QuZGVzdHJveTtcblxuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldkVmZmVjdC5kZXBzO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcHVzaEVmZmVjdChob29rRmxhZ3MsIGNyZWF0ZSwgZGVzdHJveSwgbmV4dERlcHMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IGhvb2tGbGFncywgY3JlYXRlLCBkZXN0cm95LCBuZXh0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSB8IFBhc3NpdmUsIFBhc3NpdmUkMSwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUgfCBQYXNzaXZlLCBQYXNzaXZlJDEsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0KGNyZWF0ZSwgcmVmKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlZkNhbGxiYWNrID0gcmVmO1xuXG4gICAgdmFyIF9pbnN0ID0gY3JlYXRlKCk7XG5cbiAgICByZWZDYWxsYmFjayhfaW5zdCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZkNhbGxiYWNrKG51bGwpO1xuICAgIH07XG4gIH0gZWxzZSBpZiAocmVmICE9PSBudWxsICYmIHJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlZk9iamVjdCA9IHJlZjtcblxuICAgIHtcbiAgICAgIGlmICghcmVmT2JqZWN0Lmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBmaXJzdCBhcmd1bWVudCB0byBlaXRoZXIgYmUgYSAnICsgJ3JlZiBjYWxsYmFjayBvciBSZWFjdC5jcmVhdGVSZWYoKSBvYmplY3QuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsICdhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMocmVmT2JqZWN0KS5qb2luKCcsICcpICsgJ30nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgX2luc3QyID0gY3JlYXRlKCk7XG5cbiAgICByZWZPYmplY3QuY3VycmVudCA9IF9pbnN0MjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmVmT2JqZWN0LmN1cnJlbnQgPSBudWxsO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbiAnICsgJ3RoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY3JlYXRlICE9PSBudWxsID8gdHlwZW9mIGNyZWF0ZSA6ICdudWxsJyk7XG4gICAgfVxuICB9IC8vIFRPRE86IElmIGRlcHMgYXJlIHByb3ZpZGVkLCBzaG91bGQgd2Ugc2tpcCBjb21wYXJpbmcgdGhlIHJlZiBpdHNlbGY/XG5cblxuICB2YXIgZWZmZWN0RGVwcyA9IGRlcHMgIT09IG51bGwgJiYgZGVwcyAhPT0gdW5kZWZpbmVkID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSwgZWZmZWN0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uICcgKyAndGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjcmVhdGUgIT09IG51bGwgPyB0eXBlb2YgY3JlYXRlIDogJ251bGwnKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogSWYgZGVwcyBhcmUgcHJvdmlkZWQsIHNob3VsZCB3ZSBza2lwIGNvbXBhcmluZyB0aGUgcmVmIGl0c2VsZj9cblxuXG4gIHZhciBlZmZlY3REZXBzID0gZGVwcyAhPT0gbnVsbCAmJiBkZXBzICE9PSB1bmRlZmluZWQgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSwgZWZmZWN0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50RGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pIHsvLyBUaGlzIGhvb2sgaXMgbm9ybWFsbHkgYSBuby1vcC5cbiAgLy8gVGhlIHJlYWN0LWRlYnVnLWhvb2tzIHBhY2thZ2UgaW5qZWN0cyBpdHMgb3duIGltcGxlbWVudGF0aW9uXG4gIC8vIHNvIHRoYXQgZS5nLiBEZXZUb29scyBjYW4gZGlzcGxheSBjdXN0b20gaG9vayB2YWx1ZXMuXG59XG5cbnZhciB1cGRhdGVEZWJ1Z1ZhbHVlID0gbW91bnREZWJ1Z1ZhbHVlO1xuXG5mdW5jdGlvbiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICByZXR1cm4gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZTdGF0ZVsxXTtcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gIHJldHVybiBjYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gbW91bnRNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICByZXR1cm4gbmV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIEFzc3VtZSB0aGVzZSBhcmUgZGVmaW5lZC4gSWYgdGhleSdyZSBub3QsIGFyZUhvb2tJbnB1dHNFcXVhbCB3aWxsIHdhcm4uXG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2U3RhdGVbMV07XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtuZXh0VmFsdWUsIG5leHREZXBzXTtcbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfbW91bnRTdGF0ZSA9IG1vdW50U3RhdGUodmFsdWUpLFxuICAgICAgcHJldlZhbHVlID0gX21vdW50U3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF9tb3VudFN0YXRlWzFdO1xuXG4gIG1vdW50RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgIHRyeSB7XG4gICAgICBzZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIF91cGRhdGVTdGF0ZSA9IHVwZGF0ZVN0YXRlKCksXG4gICAgICBwcmV2VmFsdWUgPSBfdXBkYXRlU3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF91cGRhdGVTdGF0ZVsxXTtcblxuICB1cGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfcmVyZW5kZXJTdGF0ZSA9IHJlcmVuZGVyU3RhdGUoKSxcbiAgICAgIHByZXZWYWx1ZSA9IF9yZXJlbmRlclN0YXRlWzBdLFxuICAgICAgc2V0VmFsdWUgPSBfcmVyZW5kZXJTdGF0ZVsxXTtcblxuICB1cGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gc3RhcnRUcmFuc2l0aW9uKHNldFBlbmRpbmcsIGNhbGxiYWNrKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcblxuICB7XG4gICAgcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCA8IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgPyBVc2VyQmxvY2tpbmdQcmlvcml0eSQyIDogcHJpb3JpdHlMZXZlbCwgZnVuY3Rpb24gKCkge1xuICAgICAgc2V0UGVuZGluZyh0cnVlKTtcbiAgICB9KTtcbiAgICBydW5XaXRoUHJpb3JpdHkkMShwcmlvcml0eUxldmVsID4gTm9ybWFsUHJpb3JpdHkkMSA/IE5vcm1hbFByaW9yaXR5JDEgOiBwcmlvcml0eUxldmVsLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRQZW5kaW5nKGZhbHNlKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50VHJhbnNpdGlvbigpIHtcbiAgdmFyIF9tb3VudFN0YXRlMiA9IG1vdW50U3RhdGUoZmFsc2UpLFxuICAgICAgaXNQZW5kaW5nID0gX21vdW50U3RhdGUyWzBdLFxuICAgICAgc2V0UGVuZGluZyA9IF9tb3VudFN0YXRlMlsxXTsgLy8gVGhlIGBzdGFydGAgbWV0aG9kIGNhbiBiZSBzdG9yZWQgb24gYSByZWYsIHNpbmNlIGBzZXRQZW5kaW5nYFxuICAvLyBuZXZlciBjaGFuZ2VzLlxuXG5cbiAgdmFyIHN0YXJ0ID0gc3RhcnRUcmFuc2l0aW9uLmJpbmQobnVsbCwgc2V0UGVuZGluZyk7XG4gIG1vdW50UmVmKHN0YXJ0KTtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVHJhbnNpdGlvbigpIHtcbiAgdmFyIF91cGRhdGVTdGF0ZTIgPSB1cGRhdGVTdGF0ZSgpLFxuICAgICAgaXNQZW5kaW5nID0gX3VwZGF0ZVN0YXRlMlswXTtcblxuICB2YXIgc3RhcnRSZWYgPSB1cGRhdGVSZWYoKTtcbiAgdmFyIHN0YXJ0ID0gc3RhcnRSZWYuY3VycmVudDtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJUcmFuc2l0aW9uKCkge1xuICB2YXIgX3JlcmVuZGVyU3RhdGUyID0gcmVyZW5kZXJTdGF0ZSgpLFxuICAgICAgaXNQZW5kaW5nID0gX3JlcmVuZGVyU3RhdGUyWzBdO1xuXG4gIHZhciBzdGFydFJlZiA9IHVwZGF0ZVJlZigpO1xuICB2YXIgc3RhcnQgPSBzdGFydFJlZi5jdXJyZW50O1xuICByZXR1cm4gW3N0YXJ0LCBpc1BlbmRpbmddO1xufVxuXG52YXIgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0SXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZUluREVWKCkge1xuICB7XG4gICAgcmV0dXJuIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uT3BhcXVlSWRlbnRpZmllckFjY2Vzc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICAvLyBUT0RPOiBTaG91bGQgd2FybiBpbiBlZmZlY3RzIGFuZCBjYWxsYmFja3MsIHRvb1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICBpZiAoZ2V0SXNSZW5kZXJpbmcoKSAmJiAhZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcltuYW1lXSkge1xuICAgICAgZXJyb3IoJ1RoZSBvYmplY3QgcGFzc2VkIGJhY2sgZnJvbSB1c2VPcGFxdWVJZGVudGlmaWVyIGlzIG1lYW50IHRvIGJlICcgKyAncGFzc2VkIHRocm91Z2ggdG8gYXR0cmlidXRlcyBvbmx5LiBEbyBub3QgcmVhZCB0aGUgJyArICd2YWx1ZSBkaXJlY3RseS4nKTtcblxuICAgICAgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcltuYW1lXSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50T3BhcXVlSWRlbnRpZmllcigpIHtcbiAgdmFyIG1ha2VJZCA9ICBtYWtlQ2xpZW50SWRJbkRFVi5iaW5kKG51bGwsIHdhcm5Pbk9wYXF1ZUlkZW50aWZpZXJBY2Nlc3NJbkRFVi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpKSA7XG5cbiAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICB2YXIgZGlkVXBncmFkZSA9IGZhbHNlO1xuICAgIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG5cbiAgICB2YXIgcmVhZFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFkaWRVcGdyYWRlKSB7XG4gICAgICAgIC8vIE9ubHkgdXBncmFkZSBvbmNlLiBUaGlzIHdvcmtzIGV2ZW4gaW5zaWRlIHRoZSByZW5kZXIgcGhhc2UgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgdXBkYXRlIGlzIGFkZGVkIHRvIGEgc2hhcmVkIHF1ZXVlLCB3aGljaCBvdXRsYXN0cyB0aGVcbiAgICAgICAgLy8gaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuICAgICAgICBkaWRVcGdyYWRlID0gdHJ1ZTtcblxuICAgICAgICB7XG4gICAgICAgICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IHRydWU7XG4gICAgICAgICAgc2V0SWQobWFrZUlkKCkpO1xuICAgICAgICAgIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbiAgICAgICAgICB3YXJuT25PcGFxdWVJZGVudGlmaWVyQWNjZXNzSW5ERVYoZmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoZSBvYmplY3QgcGFzc2VkIGJhY2sgZnJvbSB1c2VPcGFxdWVJZGVudGlmaWVyIGlzIG1lYW50IHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRvIGF0dHJpYnV0ZXMgb25seS4gRG8gbm90IHJlYWQgdGhlIHZhbHVlIGRpcmVjdGx5LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGlkID0gbWFrZU9wYXF1ZUh5ZHJhdGluZ09iamVjdChyZWFkVmFsdWUpO1xuICAgIHZhciBzZXRJZCA9IG1vdW50U3RhdGUoaWQpWzFdO1xuXG4gICAgaWYgKChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gVXBkYXRlIHwgUGFzc2l2ZTtcbiAgICAgIHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgUGFzc2l2ZSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldElkKG1ha2VJZCgpKTtcbiAgICAgIH0sIHVuZGVmaW5lZCwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkO1xuICB9IGVsc2Uge1xuICAgIHZhciBfaWQgPSBtYWtlSWQoKTtcblxuICAgIG1vdW50U3RhdGUoX2lkKTtcbiAgICByZXR1cm4gX2lkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKSB7XG4gIHZhciBpZCA9IHVwZGF0ZVN0YXRlKClbMF07XG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJPcGFxdWVJZGVudGlmaWVyKCkge1xuICB2YXIgaWQgPSByZXJlbmRlclN0YXRlKClbMF07XG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb24oZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcihcIlN0YXRlIHVwZGF0ZXMgZnJvbSB0aGUgdXNlU3RhdGUoKSBhbmQgdXNlUmVkdWNlcigpIEhvb2tzIGRvbid0IHN1cHBvcnQgdGhlIFwiICsgJ3NlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyICcgKyAncmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIHRoZSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICB2YXIgdXBkYXRlID0ge1xuICAgIGxhbmU6IGxhbmUsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgZWFnZXJSZWR1Y2VyOiBudWxsLFxuICAgIGVhZ2VyU3RhdGU6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9OyAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuXG4gIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZyA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZS4gQ3JlYXRlIGEgY2lyY3VsYXIgbGlzdC5cbiAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dDtcbiAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gIH1cblxuICBxdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChmaWJlciA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlbmRlciBwaGFzZSB1cGRhdGUuIFN0YXNoIGl0IGluIGEgbGF6aWx5LWNyZWF0ZWQgbWFwIG9mXG4gICAgLy8gcXVldWUgLT4gbGlua2VkIGxpc3Qgb2YgdXBkYXRlcy4gQWZ0ZXIgdGhpcyByZW5kZXIgcGFzcywgd2UnbGwgcmVzdGFydFxuICAgIC8vIGFuZCBhcHBseSB0aGUgc3Rhc2hlZCB1cGRhdGVzIG9uIHRvcCBvZiB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGlmIChmaWJlci5sYW5lcyA9PT0gTm9MYW5lcyAmJiAoYWx0ZXJuYXRlID09PSBudWxsIHx8IGFsdGVybmF0ZS5sYW5lcyA9PT0gTm9MYW5lcykpIHtcbiAgICAgIC8vIFRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgZW1wdHksIHdoaWNoIG1lYW5zIHdlIGNhbiBlYWdlcmx5IGNvbXB1dGUgdGhlXG4gICAgICAvLyBuZXh0IHN0YXRlIGJlZm9yZSBlbnRlcmluZyB0aGUgcmVuZGVyIHBoYXNlLiBJZiB0aGUgbmV3IHN0YXRlIGlzIHRoZVxuICAgICAgLy8gc2FtZSBhcyB0aGUgY3VycmVudCBzdGF0ZSwgd2UgbWF5IGJlIGFibGUgdG8gYmFpbCBvdXQgZW50aXJlbHkuXG4gICAgICB2YXIgbGFzdFJlbmRlcmVkUmVkdWNlciA9IHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXI7XG5cbiAgICAgIGlmIChsYXN0UmVuZGVyZWRSZWR1Y2VyICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlcjtcblxuICAgICAgICB7XG4gICAgICAgICAgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gcXVldWUubGFzdFJlbmRlcmVkU3RhdGU7XG4gICAgICAgICAgdmFyIGVhZ2VyU3RhdGUgPSBsYXN0UmVuZGVyZWRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTsgLy8gU3Rhc2ggdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGUsIGFuZCB0aGUgcmVkdWNlciB1c2VkIHRvIGNvbXB1dGVcbiAgICAgICAgICAvLyBpdCwgb24gdGhlIHVwZGF0ZSBvYmplY3QuIElmIHRoZSByZWR1Y2VyIGhhc24ndCBjaGFuZ2VkIGJ5IHRoZVxuICAgICAgICAgIC8vIHRpbWUgd2UgZW50ZXIgdGhlIHJlbmRlciBwaGFzZSwgdGhlbiB0aGUgZWFnZXIgc3RhdGUgY2FuIGJlIHVzZWRcbiAgICAgICAgICAvLyB3aXRob3V0IGNhbGxpbmcgdGhlIHJlZHVjZXIgYWdhaW4uXG5cbiAgICAgICAgICB1cGRhdGUuZWFnZXJSZWR1Y2VyID0gbGFzdFJlbmRlcmVkUmVkdWNlcjtcbiAgICAgICAgICB1cGRhdGUuZWFnZXJTdGF0ZSA9IGVhZ2VyU3RhdGU7XG5cbiAgICAgICAgICBpZiAob2JqZWN0SXMoZWFnZXJTdGF0ZSwgY3VycmVudFN0YXRlKSkge1xuICAgICAgICAgICAgLy8gRmFzdCBwYXRoLiBXZSBjYW4gYmFpbCBvdXQgd2l0aG91dCBzY2hlZHVsaW5nIFJlYWN0IHRvIHJlLXJlbmRlci5cbiAgICAgICAgICAgIC8vIEl0J3Mgc3RpbGwgcG9zc2libGUgdGhhdCB3ZSdsbCBuZWVkIHRvIHJlYmFzZSB0aGlzIHVwZGF0ZSBsYXRlcixcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjb21wb25lbnQgcmUtcmVuZGVycyBmb3IgYSBkaWZmZXJlbnQgcmVhc29uIGFuZCBieSB0aGF0XG4gICAgICAgICAgICAvLyB0aW1lIHRoZSByZWR1Y2VyIGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsvLyBTdXBwcmVzcyB0aGUgZXJyb3IuIEl0IHdpbGwgdGhyb3cgYWdhaW4gaW4gdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgICAgd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGZpYmVyKTtcbiAgICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luRGV2KGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH1cbn1cblxudmFyIENvbnRleHRPbmx5RGlzcGF0Y2hlciA9IHtcbiAgcmVhZENvbnRleHQ6IHJlYWRDb250ZXh0LFxuICB1c2VDYWxsYmFjazogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VDb250ZXh0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUxheW91dEVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VNZW1vOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVJlZHVjZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlUmVmOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVN0YXRlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZURlYnVnVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRGVmZXJyZWRWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VUcmFuc2l0aW9uOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU11dGFibGVTb3VyY2U6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlT3BhcXVlSWRlbnRpZmllcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbn07XG52YXIgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcblxue1xuICB2YXIgd2FybkludmFsaWRDb250ZXh0QWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGVycm9yKCdDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiAnICsgJ0luIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuICcgKyAnSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90ICcgKyAnaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS4nKTtcbiAgfTtcblxuICB2YXIgd2FybkludmFsaWRIb29rQWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGVycm9yKCdEbyBub3QgY2FsbCBIb29rcyBpbnNpZGUgdXNlRWZmZWN0KC4uLiksIHVzZU1lbW8oLi4uKSwgb3Igb3RoZXIgYnVpbHQtaW4gSG9va3MuICcgKyAnWW91IGNhbiBvbmx5IGNhbGwgSG9va3MgYXQgdGhlIHRvcCBsZXZlbCBvZiB5b3VyIFJlYWN0IGZ1bmN0aW9uLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnKTtcbiAgfTtcblxuICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlclRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlck9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG59XG5cbnZhciBub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3c7XG52YXIgY29tbWl0VGltZSA9IDA7XG52YXIgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcblxuZnVuY3Rpb24gZ2V0Q29tbWl0VGltZSgpIHtcbiAgcmV0dXJuIGNvbW1pdFRpbWU7XG59XG5cbmZ1bmN0aW9uIHJlY29yZENvbW1pdFRpbWUoKSB7XG5cbiAgY29tbWl0VGltZSA9IG5vdyQxKCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0UHJvZmlsZXJUaW1lcihmaWJlcikge1xuXG4gIHByb2ZpbGVyU3RhcnRUaW1lID0gbm93JDEoKTtcblxuICBpZiAoZmliZXIuYWN0dWFsU3RhcnRUaW1lIDwgMCkge1xuICAgIGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA9IG5vdyQxKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoZmliZXIpIHtcblxuICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xufVxuXG5mdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGZpYmVyLCBvdmVycmlkZUJhc2VUaW1lKSB7XG5cbiAgaWYgKHByb2ZpbGVyU3RhcnRUaW1lID49IDApIHtcbiAgICB2YXIgZWxhcHNlZFRpbWUgPSBub3ckMSgpIC0gcHJvZmlsZXJTdGFydFRpbWU7XG4gICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG5cbiAgICBpZiAob3ZlcnJpZGVCYXNlVGltZSkge1xuICAgICAgZmliZXIuc2VsZkJhc2VEdXJhdGlvbiA9IGVsYXBzZWRUaW1lO1xuICAgIH1cblxuICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJhbnNmZXJBY3R1YWxEdXJhdGlvbihmaWJlcikge1xuICAvLyBUcmFuc2ZlciB0aW1lIHNwZW50IHJlbmRlcmluZyB0aGVzZSBjaGlsZHJlbiBzbyB3ZSBkb24ndCBsb3NlIGl0XG4gIC8vIGFmdGVyIHdlIHJlcmVuZGVyLiBUaGlzIGlzIHVzZWQgYXMgYSBoZWxwZXIgaW4gc3BlY2lhbCBjYXNlc1xuICAvLyB3aGVyZSB3ZSBzaG91bGQgY291bnQgdGhlIHdvcmsgb2YgbXVsdGlwbGUgcGFzc2VzLlxuICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQpIHtcbiAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG52YXIgZGlkV2FybkFib3V0QmFkQ2xhc3M7XG52YXIgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnM7XG52YXIgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcztcbnZhciBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcjtcbnZhciBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucztcblxue1xuICBkaWRXYXJuQWJvdXRCYWRDbGFzcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyID0ge307XG4gIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zID0ge307XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhIGZyZXNoIG5ldyBjb21wb25lbnQgdGhhdCBoYXNuJ3QgYmVlbiByZW5kZXJlZCB5ZXQsIHdlXG4gICAgLy8gd29uJ3QgdXBkYXRlIGl0cyBjaGlsZCBzZXQgYnkgYXBwbHlpbmcgbWluaW1hbCBzaWRlLWVmZmVjdHMuIEluc3RlYWQsXG4gICAgLy8gd2Ugd2lsbCBhZGQgdGhlbSBhbGwgdG8gdGhlIGNoaWxkIGJlZm9yZSBpdCBnZXRzIHJlbmRlcmVkLiBUaGF0IG1lYW5zXG4gICAgLy8gd2UgY2FuIG9wdGltaXplIHRoaXMgcmVjb25jaWxpYXRpb24gcGFzcyBieSBub3QgdHJhY2tpbmcgc2lkZS1lZmZlY3RzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgY2hpbGQgaXMgdGhlIHNhbWUgYXMgdGhlIHdvcmsgaW4gcHJvZ3Jlc3MsIGl0IG1lYW5zIHRoYXRcbiAgICAvLyB3ZSBoYXZlbid0IHlldCBzdGFydGVkIGFueSB3b3JrIG9uIHRoZXNlIGNoaWxkcmVuLiBUaGVyZWZvcmUsIHdlIHVzZVxuICAgIC8vIHRoZSBjbG9uZSBhbGdvcml0aG0gdG8gY3JlYXRlIGEgY29weSBvZiBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4uXG4gICAgLy8gSWYgd2UgaGFkIGFueSBwcm9ncmVzc2VkIHdvcmsgYWxyZWFkeSwgdGhhdCBpcyBpbnZhbGlkIGF0IHRoaXMgcG9pbnQgc29cbiAgICAvLyBsZXQncyB0aHJvdyBpdCBvdXQuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yY2VVbm1vdW50Q3VycmVudEFuZFJlY29uY2lsZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGZvcmsgb2YgcmVjb25jaWxlQ2hpbGRyZW4uIEl0J3MgdXNlZCBpbiBjYXNlcyB3aGVyZSB3ZVxuICAvLyB3YW50IHRvIHJlY29uY2lsZSB3aXRob3V0IG1hdGNoaW5nIGFnYWluc3QgdGhlIGV4aXN0aW5nIHNldC4gVGhpcyBoYXMgdGhlXG4gIC8vIGVmZmVjdCBvZiBhbGwgY3VycmVudCBjaGlsZHJlbiBiZWluZyB1bm1vdW50ZWQ7IGV2ZW4gaWYgdGhlIHR5cGUgYW5kIGtleVxuICAvLyBhcmUgdGhlIHNhbWUsIHRoZSBvbGQgY2hpbGQgaXMgdW5tb3VudGVkIGFuZCBhIG5ldyBjaGlsZCBpcyBjcmVhdGVkLlxuICAvL1xuICAvLyBUbyBkbyB0aGlzLCB3ZSdyZSBnb2luZyB0byBnbyB0aHJvdWdoIHRoZSByZWNvbmNpbGUgYWxnb3JpdGhtIHR3aWNlLiBJblxuICAvLyB0aGUgZmlyc3QgcGFzcywgd2Ugc2NoZWR1bGUgYSBkZWxldGlvbiBmb3IgYWxsIHRoZSBjdXJyZW50IGNoaWxkcmVuIGJ5XG4gIC8vIHBhc3NpbmcgbnVsbC5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbnVsbCwgcmVuZGVyTGFuZXMpOyAvLyBJbiB0aGUgc2Vjb25kIHBhc3MsIHdlIG1vdW50IHRoZSBuZXcgY2hpbGRyZW4uIFRoZSB0cmljayBoZXJlIGlzIHRoYXQgd2VcbiAgLy8gcGFzcyBudWxsIGluIHBsYWNlIG9mIHdoZXJlIHdlIHVzdWFsbHkgcGFzcyB0aGUgY3VycmVudCBjaGlsZCBzZXQuIFRoaXMgaGFzXG4gIC8vIHRoZSBlZmZlY3Qgb2YgcmVtb3VudGluZyBhbGwgY2hpbGRyZW4gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZWlyXG4gIC8vIGlkZW50aXRpZXMgbWF0Y2guXG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZvcndhcmRSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICAvLyBUT0RPOiBjdXJyZW50IGNhbiBiZSBub24tbnVsbCBoZXJlIGV2ZW4gaWYgdGhlIGNvbXBvbmVudFxuICAvLyBoYXNuJ3QgeWV0IG1vdW50ZWQuIFRoaXMgaGFwcGVucyBhZnRlciB0aGUgZmlyc3QgcmVuZGVyIHN1c3BlbmRzLlxuICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciByZW5kZXIgPSBDb21wb25lbnQucmVuZGVyO1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmOyAvLyBUaGUgcmVzdCBpcyBhIGZvcmsgb2YgdXBkYXRlRnVuY3Rpb25Db21wb25lbnRcblxuICB2YXIgbmV4dENoaWxkcmVuO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlciwgbmV4dFByb3BzLCByZWYsIHJlbmRlckxhbmVzKTtcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyLCBuZXh0UHJvcHMsIHJlZiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdmFyIHR5cGUgPSBDb21wb25lbnQudHlwZTtcblxuICAgIGlmIChpc1NpbXBsZUZ1bmN0aW9uQ29tcG9uZW50KHR5cGUpICYmIENvbXBvbmVudC5jb21wYXJlID09PSBudWxsICYmIC8vIFNpbXBsZU1lbW9Db21wb25lbnQgY29kZXBhdGggZG9lc24ndCByZXNvbHZlIG91dGVyIHByb3BzIGVpdGhlci5cbiAgICBDb21wb25lbnQuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciByZXNvbHZlZFR5cGUgPSB0eXBlO1xuXG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKTtcbiAgICAgIH0gLy8gSWYgdGhpcyBpcyBhIHBsYWluIGZ1bmN0aW9uIGNvbXBvbmVudCB3aXRob3V0IGRlZmF1bHQgcHJvcHMsXG4gICAgICAvLyBhbmQgd2l0aCBvbmx5IHRoZSBkZWZhdWx0IHNoYWxsb3cgY29tcGFyaXNvbiwgd2UgdXBncmFkZSBpdFxuICAgICAgLy8gdG8gYSBTaW1wbGVNZW1vQ29tcG9uZW50IHRvIGFsbG93IGZhc3QgcGF0aCB1cGRhdGVzLlxuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IFNpbXBsZU1lbW9Db21wb25lbnQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZWRUeXBlO1xuXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgdHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZXNvbHZlZFR5cGUsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIC8vIElubmVyIG1lbW8gY29tcG9uZW50IHByb3BzIGFyZW4ndCBjdXJyZW50bHkgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnQuXG4gICAgICAgIC8vIFdlIGNvdWxkIG1vdmUgaXQgdGhlcmUsIGJ1dCB3ZSdkIHN0aWxsIG5lZWQgdGhpcyBmb3IgbGF6eSBjb2RlIHBhdGguXG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKENvbXBvbmVudC50eXBlLCBudWxsLCBuZXh0UHJvcHMsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCByZW5kZXJMYW5lcyk7XG4gICAgY2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgIGNoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAge1xuICAgIHZhciBfdHlwZSA9IENvbXBvbmVudC50eXBlO1xuICAgIHZhciBfaW5uZXJQcm9wVHlwZXMgPSBfdHlwZS5wcm9wVHlwZXM7XG5cbiAgICBpZiAoX2lubmVyUHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgLy8gV2UgY291bGQgbW92ZSBpdCB0aGVyZSwgYnV0IHdlJ2Qgc3RpbGwgbmVlZCB0aGlzIGZvciBsYXp5IGNvZGUgcGF0aC5cbiAgICAgIGNoZWNrUHJvcFR5cGVzKF9pbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKF90eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnRDaGlsZCA9IGN1cnJlbnQuY2hpbGQ7IC8vIFRoaXMgaXMgYWx3YXlzIGV4YWN0bHkgb25lIGNoaWxkXG5cbiAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAvLyBUaGlzIHdpbGwgYmUgdGhlIHByb3BzIHdpdGggcmVzb2x2ZWQgZGVmYXVsdFByb3BzLFxuICAgIC8vIHVubGlrZSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgd2hpY2ggd2lsbCBiZSB0aGUgdW5yZXNvbHZlZCBvbmVzLlxuICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Q2hpbGQubWVtb2l6ZWRQcm9wczsgLy8gRGVmYXVsdCB0byBzaGFsbG93IGNvbXBhcmlzb25cblxuICAgIHZhciBjb21wYXJlID0gQ29tcG9uZW50LmNvbXBhcmU7XG4gICAgY29tcGFyZSA9IGNvbXBhcmUgIT09IG51bGwgPyBjb21wYXJlIDogc2hhbGxvd0VxdWFsO1xuXG4gICAgaWYgKGNvbXBhcmUocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgbmV4dFByb3BzKTtcbiAgbmV3Q2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXdDaGlsZDtcbiAgcmV0dXJuIG5ld0NoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IGN1cnJlbnQgY2FuIGJlIG5vbi1udWxsIGhlcmUgZXZlbiBpZiB0aGUgY29tcG9uZW50XG4gIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGlubmVyIHJlbmRlciBzdXNwZW5kcy5cbiAgLy8gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmluZSBvciBjYW4gY2F1c2UgaXNzdWVzLlxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIG91dGVyTWVtb1R5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcblxuICAgICAgaWYgKG91dGVyTWVtb1R5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAvLyBXZSB3YXJuIHdoZW4geW91IGRlZmluZSBwcm9wVHlwZXMgb24gbGF6eSgpXG4gICAgICAgIC8vIHNvIGxldCdzIGp1c3Qgc2tpcCBvdmVyIGl0IHRvIGZpbmQgbWVtbygpIG91dGVyIHdyYXBwZXIuXG4gICAgICAgIC8vIElubmVyIHByb3BzIGZvciBtZW1vIGFyZSB2YWxpZGF0ZWQgbGF0ZXIuXG4gICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gb3V0ZXJNZW1vVHlwZTtcbiAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvdXRlck1lbW9UeXBlID0gaW5pdChwYXlsb2FkKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIG91dGVyTWVtb1R5cGUgPSBudWxsO1xuICAgICAgICB9IC8vIElubmVyIHByb3BUeXBlcyB3aWxsIGJlIHZhbGlkYXRlZCBpbiB0aGUgZnVuY3Rpb24gY29tcG9uZW50IHBhdGguXG5cblxuICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBvdXRlck1lbW9UeXBlICYmIG91dGVyTWVtb1R5cGUucHJvcFR5cGVzO1xuXG4gICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIChTaW1wbGVNZW1vQ29tcG9uZW50IGhhcyBubyBkZWZhdWx0UHJvcHMpXG4gICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKG91dGVyTWVtb1R5cGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcblxuICAgIGlmIChzaGFsbG93RXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYgJiYgKCAvLyBQcmV2ZW50IGJhaWxvdXQgaWYgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZWQgZHVlIHRvIGhvdCByZWxvYWQuXG4gICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IGN1cnJlbnQudHlwZSApKSB7XG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG5cbiAgICAgIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgdXBkYXRlTGFuZXMpKSB7XG4gICAgICAgIC8vIFRoZSBwZW5kaW5nIGxhbmVzIHdlcmUgY2xlYXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGJlZ2luV29yay4gV2UncmVcbiAgICAgICAgLy8gYWJvdXQgdG8gYmFpbCBvdXQsIGJ1dCB0aGVyZSBtaWdodCBiZSBvdGhlciBsYW5lcyB0aGF0IHdlcmVuJ3RcbiAgICAgICAgLy8gaW5jbHVkZWQgaW4gdGhlIGN1cnJlbnQgcmVuZGVyLiBVc3VhbGx5LCB0aGUgcHJpb3JpdHkgbGV2ZWwgb2YgdGhlXG4gICAgICAgIC8vIHJlbWFpbmluZyB1cGRhdGVzIGlzIGFjY3VtbGF0ZWQgZHVyaW5nIHRoZSBldmFsdWF0aW9uIG9mIHRoZVxuICAgICAgICAvLyBjb21wb25lbnQgKGkuZS4gd2hlbiBwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUpLiBCdXQgc2luY2Ugc2luY2VcbiAgICAgICAgLy8gd2UncmUgYmFpbGluZyBvdXQgZWFybHkgKndpdGhvdXQqIGV2YWx1YXRpbmcgdGhlIGNvbXBvbmVudCwgd2UgbmVlZFxuICAgICAgICAvLyB0byBhY2NvdW50IGZvciBpdCBoZXJlLCB0b28uIFJlc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBmaWJlci5cbiAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IGFwcGxpZXMgdG8gU2ltcGxlTWVtb0NvbXBvbmVudCwgbm90IE1lbW9Db21wb25lbnQsXG4gICAgICAgIC8vIGJlY2F1c2UgYSBNZW1vQ29tcG9uZW50IGZpYmVyIGRvZXMgbm90IGhhdmUgaG9va3Mgb3IgYW4gdXBkYXRlIHF1ZXVlO1xuICAgICAgICAvLyByYXRoZXIsIGl0IHdyYXBzIGFyb3VuZCBhbiBpbm5lciBjb21wb25lbnQsIHdoaWNoIG1heSBvciBtYXkgbm90XG4gICAgICAgIC8vIGNvbnRhaW5zIGhvb2tzLlxuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoZSByZXNldCBhdCBpbiBiZWdpbldvcmsgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBzbyB0aGF0XG4gICAgICAgIC8vIHRoaXMgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBlbHNlIGlmICgoY3VycmVudC5mbGFncyAmIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGV4aXN0cyBmb3IgbGVnYWN5IG1vZGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xOTIxNi5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcblxuICBpZiAobmV4dFByb3BzLm1vZGUgPT09ICdoaWRkZW4nIHx8IG5leHRQcm9wcy5tb2RlID09PSAndW5zdGFibGUtZGVmZXItd2l0aG91dC1oaWRpbmcnKSB7XG4gICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIC8vIEluIGxlZ2FjeSBzeW5jIG1vZGUsIGRvbid0IGRlZmVyIHRoZSBzdWJ0cmVlLiBSZW5kZXIgaXQgbm93LlxuICAgICAgLy8gVE9ETzogRmlndXJlIG91dCB3aGF0IHdlIHNob3VsZCBkbyBpbiBCbG9ja2luZyBtb2RlLlxuICAgICAgdmFyIG5leHRTdGF0ZSA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpKSB7XG4gICAgICB2YXIgbmV4dEJhc2VMYW5lcztcblxuICAgICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldkJhc2VMYW5lcyA9IHByZXZTdGF0ZS5iYXNlTGFuZXM7XG4gICAgICAgIG5leHRCYXNlTGFuZXMgPSBtZXJnZUxhbmVzKHByZXZCYXNlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRCYXNlTGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICAgIH0gLy8gU2NoZWR1bGUgdGhpcyBmaWJlciB0byByZS1yZW5kZXIgYXQgb2Zmc2NyZWVuIHByaW9yaXR5LiBUaGVuIGJhaWxvdXQuXG5cblxuICAgICAge1xuICAgICAgICBtYXJrU3Bhd25lZFdvcmsoT2Zmc2NyZWVuTGFuZSk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGxhbmVUb0xhbmVzKE9mZnNjcmVlbkxhbmUpO1xuICAgICAgdmFyIF9uZXh0U3RhdGUgPSB7XG4gICAgICAgIGJhc2VMYW5lczogbmV4dEJhc2VMYW5lc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBfbmV4dFN0YXRlOyAvLyBXZSdyZSBhYm91dCB0byBiYWlsIG91dCwgYnV0IHdlIG5lZWQgdG8gcHVzaCB0aGlzIHRvIHRoZSBzdGFjayBhbnl3YXlcbiAgICAgIC8vIHRvIGF2b2lkIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuXG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIG5leHRCYXNlTGFuZXMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbmRlcmluZyBhdCBvZmZzY3JlZW4sIHNvIHdlIGNhbiBjbGVhciB0aGUgYmFzZSBsYW5lcy5cbiAgICAgIHZhciBfbmV4dFN0YXRlMiA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IF9uZXh0U3RhdGUyOyAvLyBQdXNoIHRoZSBsYW5lcyB0aGF0IHdlcmUgc2tpcHBlZCB3aGVuIHdlIGJhaWxlZCBvdXQuXG5cbiAgICAgIHZhciBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBwcmV2U3RhdGUgIT09IG51bGwgPyBwcmV2U3RhdGUuYmFzZUxhbmVzIDogcmVuZGVyTGFuZXM7XG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBfc3VidHJlZVJlbmRlckxhbmVzO1xuXG4gICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgX3N1YnRyZWVSZW5kZXJMYW5lcyA9IG1lcmdlTGFuZXMocHJldlN0YXRlLmJhc2VMYW5lcywgcmVuZGVyTGFuZXMpOyAvLyBTaW5jZSB3ZSdyZSBub3QgaGlkZGVuIGFueW1vcmUsIHJlc2V0IHRoZSBzdGF0ZVxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugd2VyZW4ndCBwcmV2aW91c2x5IGhpZGRlbiwgYW5kIHdlIHN0aWxsIGFyZW4ndCwgc28gdGhlcmUncyBub3RoaW5nXG4gICAgICAvLyBzcGVjaWFsIHRvIGRvLiBOZWVkIHRvIHB1c2ggdG8gdGhlIHN0YWNrIHJlZ2FyZGxlc3MsIHRob3VnaCwgdG8gYXZvaWRcbiAgICAgIC8vIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuICAgICAgX3N1YnRyZWVSZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgIH1cblxuICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgX3N1YnRyZWVSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn0gLy8gTm90ZTogVGhlc2UgaGFwcGVuIHRvIGhhdmUgaWRlbnRpY2FsIGJlZ2luIHBoYXNlcywgZm9yIG5vdy4gV2Ugc2hvdWxkbid0IGhvbGRcbi8vIG91cnNlbHZlcyB0byB0aGlzIGNvbnN0cmFpbnQsIHRob3VnaC4gSWYgdGhlIGJlaGF2aW9yIGRpdmVyZ2VzLCB3ZSBzaG91bGRcbi8vIGZvcmsgdGhlIGZ1bmN0aW9uLlxuXG5cbnZhciB1cGRhdGVMZWdhY3lIaWRkZW5Db21wb25lbnQgPSB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQ7XG5cbmZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlOyAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgLy8gVGhlc2UgYXJlIHJlc2V0IGR1cmluZyByZW5kZXIgdG8gYWxsb3cgdGhlIERldlRvb2xzIGNvbW1pdCBob29rIGEgY2hhbmNlIHRvIHJlYWQgdGhlbSxcblxuICAgIHZhciBzdGF0ZU5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gMDtcbiAgfVxuXG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwgJiYgcmVmICE9PSBudWxsIHx8IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5yZWYgIT09IHJlZikge1xuICAgIC8vIFNjaGVkdWxlIGEgUmVmIGVmZmVjdFxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFJlZjtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0O1xuXG4gIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUpO1xuICAgIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIG5leHRDaGlsZHJlbjtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuXG4gIHZhciBoYXNDb250ZXh0O1xuXG4gIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gZWxzZSB7XG4gICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICB2YXIgc2hvdWxkVXBkYXRlO1xuXG4gIGlmIChpbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBBIGNsYXNzIGNvbXBvbmVudCB3aXRob3V0IGFuIGluc3RhbmNlIG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZFxuICAgICAgLy8gaW5zaWRlIGEgbm9uLWNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvXG4gICAgICAvLyB0cmVhdCBpdCBsaWtlIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHlcbiAgICAgIC8vIGNvbW1pdHRlZC4gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gICAgfSAvLyBJbiB0aGUgaW5pdGlhbCBwYXNzIHdlIG1pZ2h0IG5lZWQgdG8gY29uc3RydWN0IHRoZSBpbnN0YW5jZS5cblxuXG4gICAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMpO1xuICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICBzaG91bGRVcGRhdGUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJbiBhIHJlc3VtZSwgd2UnbGwgYWxyZWFkeSBoYXZlIGFuIGluc3RhbmNlIHdlIGNhbiByZXVzZS5cbiAgICBzaG91bGRVcGRhdGUgPSByZXN1bWVNb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVXBkYXRlID0gdXBkYXRlQ2xhc3NJbnN0YW5jZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciBuZXh0VW5pdE9mV29yayA9IGZpbmlzaENsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHNob3VsZFVwZGF0ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICB2YXIgaW5zdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmIChzaG91bGRVcGRhdGUgJiYgaW5zdC5wcm9wcyAhPT0gbmV4dFByb3BzKSB7XG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgZXJyb3IoJ0l0IGxvb2tzIGxpa2UgJXMgaXMgcmVhc3NpZ25pbmcgaXRzIG93biBgdGhpcy5wcm9wc2Agd2hpbGUgcmVuZGVyaW5nLiAnICsgJ1RoaXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgY2FuIGxlYWQgdG8gY29uZnVzaW5nIGJ1Z3MuJywgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnYSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRVbml0T2ZXb3JrO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBzaG91bGRVcGRhdGUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFJlZnMgc2hvdWxkIHVwZGF0ZSBldmVuIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlXG4gIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgZGlkQ2FwdHVyZUVycm9yID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgaWYgKCFzaG91bGRVcGRhdGUgJiYgIWRpZENhcHR1cmVFcnJvcikge1xuICAgIC8vIENvbnRleHQgcHJvdmlkZXJzIHNob3VsZCBkZWZlciB0byBzQ1UgZm9yIHJlbmRlcmluZ1xuICAgIGlmIChoYXNDb250ZXh0KSB7XG4gICAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBSZXJlbmRlclxuXG4gIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICB2YXIgbmV4dENoaWxkcmVuO1xuXG4gIGlmIChkaWRDYXB0dXJlRXJyb3IgJiYgdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbiBlcnJvciwgYnV0IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciBpcyBub3QgZGVmaW5lZCxcbiAgICAvLyB1bm1vdW50IGFsbCB0aGUgY2hpbGRyZW4uIGNvbXBvbmVudERpZENhdGNoIHdpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIHRvXG4gICAgLy8gcmUtcmVuZGVyIGEgZmFsbGJhY2suIFRoaXMgaXMgdGVtcG9yYXJ5IHVudGlsIHdlIG1pZ3JhdGUgZXZlcnlvbmUgdG9cbiAgICAvLyB0aGUgbmV3IEFQSS5cbiAgICAvLyBUT0RPOiBXYXJuIGluIGEgZnV0dXJlIHJlbGVhc2UuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcblxuICAgIHtcbiAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgICAgbmV4dENoaWxkcmVuID0gaW5zdGFuY2UucmVuZGVyKCk7XG5cbiAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGluc3RhbmNlLnJlbmRlcigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBkaWRDYXB0dXJlRXJyb3IpIHtcbiAgICAvLyBJZiB3ZSdyZSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlY29uY2lsZSB3aXRob3V0IHJldXNpbmcgYW55IG9mXG4gICAgLy8gdGhlIGV4aXN0aW5nIGNoaWxkcmVuLiBDb25jZXB0dWFsbHksIHRoZSBub3JtYWwgY2hpbGRyZW4gYW5kIHRoZSBjaGlsZHJlblxuICAgIC8vIHRoYXQgYXJlIHNob3duIG9uIGVycm9yIGFyZSB0d28gZGlmZmVyZW50IHNldHMsIHNvIHdlIHNob3VsZG4ndCByZXVzZVxuICAgIC8vIG5vcm1hbCBjaGlsZHJlbiBldmVuIGlmIHRoZWlyIGlkZW50aXRpZXMgbWF0Y2guXG4gICAgZm9yY2VVbm1vdW50Q3VycmVudEFuZFJlY29uY2lsZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IC8vIE1lbW9pemUgc3RhdGUgdXNpbmcgdGhlIHZhbHVlcyB3ZSBqdXN0IHVzZWQgdG8gcmVuZGVyLlxuICAvLyBUT0RPOiBSZXN0cnVjdHVyZSBzbyB3ZSBuZXZlciByZWFkIHZhbHVlcyBmcm9tIHRoZSBpbnN0YW5jZS5cblxuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTsgLy8gVGhlIGNvbnRleHQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNvIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgaXQuXG5cbiAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmIChyb290LnBlbmRpbmdDb250ZXh0KSB7XG4gICAgcHVzaFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcywgcm9vdC5wZW5kaW5nQ29udGV4dCwgcm9vdC5wZW5kaW5nQ29udGV4dCAhPT0gcm9vdC5jb250ZXh0KTtcbiAgfSBlbHNlIGlmIChyb290LmNvbnRleHQpIHtcbiAgICAvLyBTaG91bGQgYWx3YXlzIGJlIHNldFxuICAgIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGV4dCwgZmFsc2UpO1xuICB9XG5cbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGFpbmVySW5mbyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG5cbiAgaWYgKCEoY3VycmVudCAhPT0gbnVsbCAmJiB1cGRhdGVRdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJZiB0aGUgcm9vdCBkb2VzIG5vdCBoYXZlIGFuIHVwZGF0ZVF1ZXVlLCB3ZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGJhaWxlZCBvdXQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHByZXZDaGlsZHJlbiA9IHByZXZTdGF0ZSAhPT0gbnVsbCA/IHByZXZTdGF0ZS5lbGVtZW50IDogbnVsbDtcbiAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFN0YXRlLmVsZW1lbnQ7XG5cbiAgaWYgKG5leHRDaGlsZHJlbiA9PT0gcHJldkNoaWxkcmVuKSB7XG4gICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAocm9vdC5oeWRyYXRlICYmIGVudGVySHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgY3VycmVudCBjaGlsZHJlbiB0aGlzIG1pZ2h0IGJlIHRoZSBmaXJzdCBwYXNzLlxuICAgIC8vIFdlIGFsd2F5cyB0cnkgdG8gaHlkcmF0ZS4gSWYgdGhpcyBpc24ndCBhIGh5ZHJhdGlvbiBwYXNzIHRoZXJlIHdvbid0XG4gICAgLy8gYmUgYW55IGNoaWxkcmVuIHRvIGh5ZHJhdGUgd2hpY2ggaXMgZWZmZWN0aXZlbHkgdGhlIHNhbWUgdGhpbmcgYXNcbiAgICAvLyBub3QgaHlkcmF0aW5nLlxuICAgIHtcbiAgICAgIHZhciBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhO1xuXG4gICAgICBpZiAobXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSAhPSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgIHZhciBtdXRhYmxlU291cmNlID0gbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YVtpXTtcbiAgICAgICAgICB2YXIgdmVyc2lvbiA9IG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGFbaSArIDFdO1xuICAgICAgICAgIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihtdXRhYmxlU291cmNlLCB2ZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgdmFyIG5vZGUgPSBjaGlsZDtcblxuICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAvLyBNYXJrIGVhY2ggY2hpbGQgYXMgaHlkcmF0aW5nLiBUaGlzIGlzIGEgZmFzdCBwYXRoIHRvIGtub3cgd2hldGhlciB0aGlzXG4gICAgICAvLyB0cmVlIGlzIHBhcnQgb2YgYSBoeWRyYXRpbmcgdHJlZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIGNoaWxkXG4gICAgICAvLyBub2RlIGhhcyBmdWxseSBtb3VudGVkIHlldCwgYW5kIGZvciBzY2hlZHVsaW5nIGV2ZW50IHJlcGxheWluZy5cbiAgICAgIC8vIENvbmNlcHR1YWxseSB0aGlzIGlzIHNpbWlsYXIgdG8gUGxhY2VtZW50IGluIHRoYXQgYSBuZXcgc3VidHJlZSBpc1xuICAgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgUmVhY3QgdHJlZSBoZXJlLiBJdCBqdXN0IGhhcHBlbnMgdG8gbm90IG5lZWQgRE9NXG4gICAgICAvLyBtdXRhdGlvbnMgYmVjYXVzZSBpdCBhbHJlYWR5IGV4aXN0cy5cbiAgICAgIG5vZGUuZmxhZ3MgPSBub2RlLmZsYWdzICYgflBsYWNlbWVudCB8IEh5ZHJhdGluZztcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSByZXNldCBoeWRyYXRpb24gc3RhdGUgaW4gY2FzZSB3ZSBhYm9ydGVkIGFuZCByZXN1bWVkIGFub3RoZXJcbiAgICAvLyByb290LlxuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cblxuICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbnVsbDtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFyIGlzRGlyZWN0VGV4dENoaWxkID0gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgbmV4dFByb3BzKTtcblxuICBpZiAoaXNEaXJlY3RUZXh0Q2hpbGQpIHtcbiAgICAvLyBXZSBzcGVjaWFsIGNhc2UgYSBkaXJlY3QgdGV4dCBjaGlsZCBvZiBhIGhvc3Qgbm9kZS4gVGhpcyBpcyBhIGNvbW1vblxuICAgIC8vIGNhc2UuIFdlIHdvbid0IGhhbmRsZSBpdCBhcyBhIHJlaWZpZWQgY2hpbGQuIFdlIHdpbGwgaW5zdGVhZCBoYW5kbGVcbiAgICAvLyB0aGlzIGluIHRoZSBob3N0IGVudmlyb25tZW50IHRoYXQgYWxzbyBoYXMgYWNjZXNzIHRvIHRoaXMgcHJvcC4gVGhhdFxuICAgIC8vIGF2b2lkcyBhbGxvY2F0aW5nIGFub3RoZXIgSG9zdFRleHQgZmliZXIgYW5kIHRyYXZlcnNpbmcgaXQuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcbiAgfSBlbHNlIGlmIChwcmV2UHJvcHMgIT09IG51bGwgJiYgc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJldlByb3BzKSkge1xuICAgIC8vIElmIHdlJ3JlIHN3aXRjaGluZyBmcm9tIGEgZGlyZWN0IHRleHQgY2hpbGQgdG8gYSBub3JtYWwgY2hpbGQsIG9yIHRvXG4gICAgLy8gZW1wdHksIHdlIG5lZWQgdG8gc2NoZWR1bGUgdGhlIHRleHQgY29udGVudCB0byBiZSByZXNldC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBDb250ZW50UmVzZXQ7XG4gIH1cblxuICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpO1xuICB9IC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4gVGhpcyBpcyB0ZXJtaW5hbC4gV2UnbGwgZG8gdGhlIGNvbXBsZXRpb24gc3RlcFxuICAvLyBpbW1lZGlhdGVseSBhZnRlci5cblxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBtb3VudExhenlDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBlbGVtZW50VHlwZSwgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEEgbGF6eSBjb21wb25lbnQgb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkIGluc2lkZSBhIG5vbi1cbiAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgLy8gYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeSBjb21taXR0ZWQuXG4gICAgLy8gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgIF9jdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbGF6eUNvbXBvbmVudCA9IGVsZW1lbnRUeXBlO1xuICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcbiAgdmFyIENvbXBvbmVudCA9IGluaXQocGF5bG9hZCk7IC8vIFN0b3JlIHRoZSB1bndyYXBwZWQgY29tcG9uZW50IGluIHRoZSB0eXBlLlxuXG4gIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQ7XG4gIHZhciByZXNvbHZlZFRhZyA9IHdvcmtJblByb2dyZXNzLnRhZyA9IHJlc29sdmVMYXp5Q29tcG9uZW50VGFnKENvbXBvbmVudCk7XG4gIHZhciByZXNvbHZlZFByb3BzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIHByb3BzKTtcbiAgdmFyIGNoaWxkO1xuXG4gIHN3aXRjaCAocmVzb2x2ZWRUYWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVGb3J3YXJkUmVmKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIHJlc29sdmVkUHJvcHMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZU1lbW9Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQudHlwZSwgcmVzb2x2ZWRQcm9wcyksIC8vIFRoZSBpbm5lciB0eXBlIGNhbiBoYXZlIGRlZmF1bHRzIHRvb1xuICAgICAgICB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gIH1cblxuICB2YXIgaGludCA9ICcnO1xuXG4gIHtcbiAgICBpZiAoQ29tcG9uZW50ICE9PSBudWxsICYmIHR5cGVvZiBDb21wb25lbnQgPT09ICdvYmplY3QnICYmIENvbXBvbmVudC4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICBoaW50ID0gJyBEaWQgeW91IHdyYXAgYSBjb21wb25lbnQgaW4gUmVhY3QubGF6eSgpIG1vcmUgdGhhbiBvbmNlPyc7XG4gICAgfVxuICB9IC8vIFRoaXMgbWVzc2FnZSBpbnRlbnRpb25hbGx5IGRvZXNuJ3QgbWVudGlvbiBGb3J3YXJkUmVmIG9yIE1lbW9Db21wb25lbnRcbiAgLy8gYmVjYXVzZSB0aGUgZmFjdCB0aGF0IGl0J3MgYSBzZXBhcmF0ZSB0eXBlIG9mIHdvcmsgaXMgYW5cbiAgLy8gaW1wbGVtZW50YXRpb24gZGV0YWlsLlxuXG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkLiBSZWNlaXZlZCBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0bzogXCIgKyBDb21wb25lbnQgKyBcIi4gTGF6eSBlbGVtZW50IHR5cGUgbXVzdCByZXNvbHZlIHRvIGEgY2xhc3Mgb3IgZnVuY3Rpb24uXCIgKyBoaW50ICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEFuIGluY29tcGxldGUgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfSAvLyBQcm9tb3RlIHRoZSBmaWJlciB0byBhIGNsYXNzIGFuZCB0cnkgcmVuZGVyaW5nIGFnYWluLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MudGFnID0gQ2xhc3NDb21wb25lbnQ7IC8vIFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gaXMgYSBmb3JrIG9mIGB1cGRhdGVDbGFzc0NvbXBvbmVudGBcbiAgLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cbiAgdmFyIGhhc0NvbnRleHQ7XG5cbiAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgfSBlbHNlIHtcbiAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcyk7XG4gIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRJbmRldGVybWluYXRlQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZW5kZXJMYW5lcykge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBbiBpbmRldGVybWluYXRlIGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBjb250ZXh0O1xuXG4gIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIHZhciB2YWx1ZTtcblxuICB7XG4gICAgaWYgKENvbXBvbmVudC5wcm90b3R5cGUgJiYgdHlwZW9mIENvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoXCJUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGhhdmUgYSByZW5kZXIgbWV0aG9kLCBidXQgZG9lc24ndCBleHRlbmQgUmVhY3QuQ29tcG9uZW50LiBcIiArICdUaGlzIGlzIGxpa2VseSB0byBjYXVzZSBlcnJvcnMuIENoYW5nZSAlcyB0byBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuJywgY29tcG9uZW50TmFtZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcod29ya0luUHJvZ3Jlc3MsIG51bGwpO1xuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAge1xuICAgIC8vIFN1cHBvcnQgZm9yIG1vZHVsZSBjb21wb25lbnRzIGlzIGRlcHJlY2F0ZWQgYW5kIGlzIHJlbW92ZWQgYmVoaW5kIGEgZmxhZy5cbiAgICAvLyBXaGV0aGVyIG9yIG5vdCBpdCB3b3VsZCBjcmFzaCBsYXRlciwgd2Ugd2FudCB0byBzaG93IGEgZ29vZCBtZXNzYWdlIGluIERFViBmaXJzdC5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLiQkdHlwZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ1RoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuICcgKyAnQ2hhbmdlICVzIHRvIGEgY2xhc3MgdGhhdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLiAnICsgXCJJZiB5b3UgY2FuJ3QgdXNlIGEgY2xhc3MgdHJ5IGFzc2lnbmluZyB0aGUgcHJvdG90eXBlIG9uIHRoZSBmdW5jdGlvbiBhcyBhIHdvcmthcm91bmQuIFwiICsgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArICdjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuJywgX2NvbXBvbmVudE5hbWUsIF9jb21wb25lbnROYW1lLCBfY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICggLy8gUnVuIHRoZXNlIGNoZWNrcyBpbiBwcm9kdWN0aW9uIG9ubHkgaWYgdGhlIGZsYWcgaXMgb2ZmLlxuICAvLyBFdmVudHVhbGx5IHdlJ2xsIGRlbGV0ZSB0aGlzIGJyYW5jaCBhbHRvZ2V0aGVyLlxuICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLiQkdHlwZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUyID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lMl0pIHtcbiAgICAgICAgZXJyb3IoJ1RoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuICcgKyAnQ2hhbmdlICVzIHRvIGEgY2xhc3MgdGhhdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLiAnICsgXCJJZiB5b3UgY2FuJ3QgdXNlIGEgY2xhc3MgdHJ5IGFzc2lnbmluZyB0aGUgcHJvdG90eXBlIG9uIHRoZSBmdW5jdGlvbiBhcyBhIHdvcmthcm91bmQuIFwiICsgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArICdjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuJywgX2NvbXBvbmVudE5hbWUyLCBfY29tcG9uZW50TmFtZTIsIF9jb21wb25lbnROYW1lMik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgY2xhc3MgaW5zdGFuY2VcblxuXG4gICAgd29ya0luUHJvZ3Jlc3MudGFnID0gQ2xhc3NDb21wb25lbnQ7IC8vIFRocm93IG91dCBhbnkgaG9va3MgdGhhdCB3ZXJlIHVzZWQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7IC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gICAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAgIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICAgIHZhciBoYXNDb250ZXh0ID0gZmFsc2U7XG5cbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB2YWx1ZS5zdGF0ZSAhPT0gbnVsbCAmJiB2YWx1ZS5zdGF0ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUuc3RhdGUgOiBudWxsO1xuICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG5cbiAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBwcm9wcyk7XG4gICAgfVxuXG4gICAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCB2YWx1ZSk7XG4gICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IEZ1bmN0aW9uQ29tcG9uZW50O1xuXG4gICAge1xuXG4gICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IHJlbmRlcldpdGhIb29rcyhudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVjb25jaWxlQ2hpbGRyZW4obnVsbCwgd29ya0luUHJvZ3Jlc3MsIHZhbHVlLCByZW5kZXJMYW5lcyk7XG5cbiAgICB7XG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KSB7XG4gIHtcbiAgICBpZiAoQ29tcG9uZW50KSB7XG4gICAgICBpZiAoQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzKSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBjaGlsZENvbnRleHRUeXBlcyBjYW5ub3QgYmUgZGVmaW5lZCBvbiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4nLCBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5yZWYgIT09IG51bGwpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG4gICAgICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcblxuICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICBpbmZvICs9ICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gICAgICB9XG5cbiAgICAgIHZhciB3YXJuaW5nS2V5ID0gb3duZXJOYW1lIHx8IHdvcmtJblByb2dyZXNzLl9kZWJ1Z0lEIHx8ICcnO1xuICAgICAgdmFyIGRlYnVnU291cmNlID0gd29ya0luUHJvZ3Jlc3MuX2RlYnVnU291cmNlO1xuXG4gICAgICBpZiAoZGVidWdTb3VyY2UpIHtcbiAgICAgICAgd2FybmluZ0tleSA9IGRlYnVnU291cmNlLmZpbGVOYW1lICsgJzonICsgZGVidWdTb3VyY2UubGluZU51bWJlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnNbd2FybmluZ0tleV0pIHtcbiAgICAgICAgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgYmUgZ2l2ZW4gcmVmcy4gJyArICdBdHRlbXB0cyB0byBhY2Nlc3MgdGhpcyByZWYgd2lsbCBmYWlsLiAnICsgJ0RpZCB5b3UgbWVhbiB0byB1c2UgUmVhY3QuZm9yd2FyZFJlZigpPyVzJywgaW5mbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUzID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4nLCBfY29tcG9uZW50TmFtZTMpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWUzXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBDb21wb25lbnQuY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIENvbXBvbmVudC5jb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lNCA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGNvbnRleHRUeXBlLicsIF9jb21wb25lbnROYW1lNCk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgU1VTUEVOREVEX01BUktFUiA9IHtcbiAgZGVoeWRyYXRlZDogbnVsbCxcbiAgcmV0cnlMYW5lOiBOb0xhbmVcbn07XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykge1xuICByZXR1cm4ge1xuICAgIGJhc2VMYW5lczogcmVuZGVyTGFuZXNcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShwcmV2T2Zmc2NyZWVuU3RhdGUsIHJlbmRlckxhbmVzKSB7XG4gIHJldHVybiB7XG4gICAgYmFzZUxhbmVzOiBtZXJnZUxhbmVzKHByZXZPZmZzY3JlZW5TdGF0ZS5iYXNlTGFuZXMsIHJlbmRlckxhbmVzKVxuICB9O1xufSAvLyBUT0RPOiBQcm9iYWJseSBzaG91bGQgaW5saW5lIHRoaXMgYmFja1xuXG5cbmZ1bmN0aW9uIHNob3VsZFJlbWFpbk9uRmFsbGJhY2soc3VzcGVuc2VDb250ZXh0LCBjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gSWYgd2UncmUgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2ssIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvXG4gIC8vIHJlbWFpbiBvbiB0aGF0IGZhbGxiYWNrIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgY29udGVudCBoYXMgcmVzb2x2ZWQuXG4gIC8vIEZvciBleGFtcGxlLCBTdXNwZW5zZUxpc3QgY29vcmRpbmF0ZXMgd2hlbiBuZXN0ZWQgY29udGVudCBhcHBlYXJzLlxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgPT09IG51bGwpIHtcbiAgICAgIC8vIEN1cnJlbnRseSBzaG93aW5nIGNvbnRlbnQuIERvbid0IGhpZGUgaXQsIGV2ZW4gaWYgRm9yY2VTdXNwZW5zZUZhbGxhY2tcbiAgICAgIC8vIGlzIHRydWUuIE1vcmUgcHJlY2lzZSBuYW1lIG1pZ2h0IGJlIFwiRm9yY2VSZW1haW5TdXNwZW5zZUZhbGxiYWNrXCIuXG4gICAgICAvLyBOb3RlOiBUaGlzIGlzIGEgZmFjdG9yaW5nIHNtZWxsLiBDYW4ndCByZW1haW4gb24gYSBmYWxsYmFjayBpZiB0aGVyZSdzXG4gICAgICAvLyBubyBmYWxsYmFjayB0byByZW1haW4gb24uXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IC8vIE5vdCBjdXJyZW50bHkgc2hvd2luZyBjb250ZW50LiBDb25zdWx0IHRoZSBTdXNwZW5zZSBjb250ZXh0LlxuXG5cbiAgcmV0dXJuIGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IFNob3VsZCBub3QgcmVtb3ZlIHJlbmRlciBsYW5lcyB0aGF0IHdlcmUgcGluZ2VkIGR1cmluZyB0aGlzIHJlbmRlclxuICByZXR1cm4gcmVtb3ZlTGFuZXMoY3VycmVudC5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBUaGlzIGlzIHVzZWQgYnkgRGV2VG9vbHMgdG8gZm9yY2UgYSBib3VuZGFyeSB0byBzdXNwZW5kLlxuXG4gIHtcbiAgICBpZiAoc2hvdWxkU3VzcGVuZCh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgdmFyIHNob3dGYWxsYmFjayA9IGZhbHNlO1xuICB2YXIgZGlkU3VzcGVuZCA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gIGlmIChkaWRTdXNwZW5kIHx8IHNob3VsZFJlbWFpbk9uRmFsbGJhY2soc3VzcGVuc2VDb250ZXh0LCBjdXJyZW50KSkge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGlzIGJvdW5kYXJ5J3Mgc3VidHJlZSBhbHJlYWR5IHN1c3BlbmRlZC4gU3dpdGNoIHRvXG4gICAgLy8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICBzaG93RmFsbGJhY2sgPSB0cnVlO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH5EaWRDYXB0dXJlO1xuICB9IGVsc2Uge1xuICAgIC8vIEF0dGVtcHRpbmcgdGhlIG1haW4gY29udGVudFxuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBhIG5ldyBtb3VudCBvciB0aGlzIGJvdW5kYXJ5IGlzIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIHN0YXRlLlxuICAgICAgLy8gTWFyayB0aGlzIHN1YnRyZWUgY29udGV4dCBhcyBoYXZpbmcgYXQgbGVhc3Qgb25lIGludmlzaWJsZSBwYXJlbnQgdGhhdCBjb3VsZFxuICAgICAgLy8gaGFuZGxlIHRoZSBmYWxsYmFjayBzdGF0ZS5cbiAgICAgIC8vIEJvdW5kYXJpZXMgd2l0aG91dCBmYWxsYmFja3Mgb3Igc2hvdWxkIGJlIGF2b2lkZWQgYXJlIG5vdCBjb25zaWRlcmVkIHNpbmNlXG4gICAgICAvLyB0aGV5IGNhbm5vdCBoYW5kbGUgcHJlZmVycmVkIGZhbGxiYWNrIHN0YXRlcy5cbiAgICAgIGlmIChuZXh0UHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBuZXh0UHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWUpIHtcbiAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gYWRkU3VidHJlZVN1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gT0ssIHRoZSBuZXh0IHBhcnQgaXMgY29uZnVzaW5nLiBXZSdyZSBhYm91dCB0byByZWNvbmNpbGUgdGhlIFN1c3BlbnNlXG4gIC8vIGJvdW5kYXJ5J3MgY2hpbGRyZW4uIFRoaXMgaW52b2x2ZXMgc29tZSBjdXN0b20gcmVjb25jaWxhdGlvbiBsb2dpYy4gVHdvXG4gIC8vIG1haW4gcmVhc29ucyB0aGlzIGlzIHNvIGNvbXBsaWNhdGVkLlxuICAvL1xuICAvLyBGaXJzdCwgTGVnYWN5IE1vZGUgaGFzIGRpZmZlcmVudCBzZW1hbnRpY3MgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBUaGVcbiAgLy8gcHJpbWFyeSB0cmVlIHdpbGwgY29tbWl0IGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgc28gd2hlbiB3ZSBkbyB0aGVcbiAgLy8gc2Vjb25kIHBhc3MgdG8gcmVuZGVyIHRoZSBmYWxsYmFjaywgd2UgZG8gc29tZSBleGNlZWRpbmdseSwgdWgsIGNsZXZlclxuICAvLyBoYWNrcyB0byBtYWtlIHRoYXQgbm90IHRvdGFsbHkgYnJlYWsuIExpa2UgdHJhbnNmZXJyaW5nIGVmZmVjdHMgYW5kXG4gIC8vIGRlbGV0aW9ucyBmcm9tIGhpZGRlbiB0cmVlLiBJbiBDb25jdXJyZW50IE1vZGUsIGl0J3MgbXVjaCBzaW1wbGVyLFxuICAvLyBiZWNhdXNlIHdlIGJhaWxvdXQgb24gdGhlIHByaW1hcnkgdHJlZSBjb21wbGV0ZWx5IGFuZCBsZWF2ZSBpdCBpbiBpdHMgb2xkXG4gIC8vIHN0YXRlLCBubyBlZmZlY3RzLiBTYW1lIGFzIHdoYXQgd2UgZG8gZm9yIE9mZnNjcmVlbiAoZXhjZXB0IHRoYXRcbiAgLy8gT2Zmc2NyZWVuIGRvZXNuJ3QgaGF2ZSB0aGUgZmlyc3QgcmVuZGVyIHBhc3MpLlxuICAvL1xuICAvLyBTZWNvbmQgaXMgaHlkcmF0aW9uLiBEdXJpbmcgaHlkcmF0aW9uLCB0aGUgU3VzcGVuc2UgZmliZXIgaGFzIGEgc2xpZ2h0bHlcbiAgLy8gZGlmZmVyZW50IGxheW91dCwgd2hlcmUgdGhlIGNoaWxkIHBvaW50cyB0byBhIGRlaHlkcmF0ZWQgZnJhZ21lbnQsIHdoaWNoXG4gIC8vIGNvbnRhaW5zIHRoZSBET00gcmVuZGVyZWQgYnkgdGhlIHNlcnZlci5cbiAgLy9cbiAgLy8gVGhpcmQsIGV2ZW4gaWYgeW91IHNldCBhbGwgdGhhdCBhc2lkZSwgU3VzcGVuc2UgaXMgbGlrZSBlcnJvciBib3VuZGFyaWVzIGluXG4gIC8vIHRoYXQgd2UgZmlyc3Qgd2UgdHJ5IHRvIHJlbmRlciBvbmUgdHJlZSwgYW5kIGlmIHRoYXQgZmFpbHMsIHdlIHJlbmRlciBhZ2FpblxuICAvLyBhbmQgc3dpdGNoIHRvIGEgZGlmZmVyZW50IHRyZWUuIExpa2UgYSB0cnkvY2F0Y2ggYmxvY2suIFNvIHdlIGhhdmUgdG8gdHJhY2tcbiAgLy8gd2hpY2ggYnJhbmNoIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcuIElkZWFsbHkgd2Ugd291bGQgbW9kZWwgdGhpcyB1c2luZ1xuICAvLyBhIHN0YWNrLlxuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSW5pdGlhbCBtb3VudFxuICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBoeWRyYXRpbmcsIHRyeSB0byBoeWRyYXRlIHRoaXMgYm91bmRhcnkuXG4gICAgLy8gQnV0IG9ubHkgaWYgdGhpcyBoYXMgYSBmYWxsYmFjay5cbiAgICBpZiAobmV4dFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTsgLy8gVGhpcyBjb3VsZCd2ZSBiZWVuIGEgZGVoeWRyYXRlZCBzdXNwZW5zZSBjb21wb25lbnQuXG4gICAgfVxuXG4gICAgdmFyIG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIG5leHRGYWxsYmFja0NoaWxkcmVuID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuXG4gICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgdmFyIGZhbGxiYWNrRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQubWVtb2l6ZWRTdGF0ZSA9IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgIHJldHVybiBmYWxsYmFja0ZyYWdtZW50O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wcy51bnN0YWJsZV9leHBlY3RlZExvYWRUaW1lID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGhpcyBpcyBhIENQVS1ib3VuZCB0cmVlLiBTa2lwIHRoaXMgdHJlZSBhbmQgc2hvdyBhIHBsYWNlaG9sZGVyIHRvXG4gICAgICAvLyB1bmJsb2NrIHRoZSBzdXJyb3VuZGluZyBjb250ZW50LiBUaGVuIGltbWVkaWF0ZWx5IHJldHJ5IGFmdGVyIHRoZVxuICAgICAgLy8gaW5pdGlhbCBjb21taXQuXG4gICAgICB2YXIgX2ZhbGxiYWNrRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcblxuICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50Lm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzIHRvXG4gICAgICAvLyBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXMgb2ZcbiAgICAgIC8vIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlciwgaXQnc1xuICAgICAgLy8gbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhcyBjb21taXR0ZWQuIElmXG4gICAgICAvLyBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmUgcGFpbnRlZC5cbiAgICAgIC8vIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy4gV2UgY2FuIHVzZSBhbnlcbiAgICAgIC8vIFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nIHNpbmNlIHdlJ3JlIGxlYXZpbmdcbiAgICAgIC8vIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcblxuICAgICAge1xuICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfZmFsbGJhY2tGcmFnbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBhbiB1cGRhdGUuXG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgZmliZXIgaGFzIGEgU3VzcGVuc2VTdGF0ZSwgdGhhdCBtZWFucyBpdCdzIGFscmVhZHkgc2hvd2luZ1xuICAgIC8vIGEgZmFsbGJhY2suXG4gICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcblxuICAgICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgICB2YXIgX25leHRGYWxsYmFja0NoaWxkcmVuMiA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW4yLCBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4yLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdGF0ZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50My5tZW1vaXplZFN0YXRlID0gcHJldk9mZnNjcmVlblN0YXRlID09PSBudWxsID8gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSA6IHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICAgIHJldHVybiBfZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMyA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NCA9IHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjMsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBjdXJyZW50IHRyZWUgaXMgbm90IGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrLlxuICAgICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgICAvLyBUaW1lZCBvdXQuXG4gICAgICAgIHZhciBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4zID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW40ID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfZmFsbGJhY2tDaGlsZEZyYWdtZW50MiA9IHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW40LCBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4zLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgdmFyIF9wcmV2T2Zmc2NyZWVuU3RhdGUgPSBjdXJyZW50LmNoaWxkLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUubWVtb2l6ZWRTdGF0ZSA9IF9wcmV2T2Zmc2NyZWVuU3RhdGUgPT09IG51bGwgPyBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIDogdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShfcHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKTsgLy8gU2tpcCB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgYW5kIGNvbnRpbnVlIHdvcmtpbmcgb24gdGhlXG4gICAgICAgIC8vIGZhbGxiYWNrIGNoaWxkcmVuLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgICByZXR1cm4gX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTdGlsbCBoYXZlbid0IHRpbWVkIG91dC4gQ29udGludWUgcmVuZGVyaW5nIHRoZSBjaGlsZHJlbiwgbGlrZSB3ZVxuICAgICAgICAvLyBub3JtYWxseSBkby5cbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuNSA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NiA9IHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjUsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDY7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ3Zpc2libGUnLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHByaW1hcnlDaGlsZFByb3BzLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIGZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICdoaWRkZW4nLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuXG4gIGlmICgobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSAmJiBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAgIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50O1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnBlbmRpbmdQcm9wcyA9IHByaW1hcnlDaGlsZFByb3BzO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBkdXJhdGlvbnMgZnJvbSB0aGUgZmlyc3QgcGFzcyBzbyB0aGV5IGFyZW4ndCBpbmNsdWRlZCBpbiB0aGVcbiAgICAgIC8vIGZpbmFsIGFtb3VudHMuIFRoaXMgc2VlbXMgY291bnRlcmludHVpdGl2ZSwgc2luY2Ugd2UncmUgaW50ZW50aW9uYWxseVxuICAgICAgLy8gbm90IG1lYXN1cmluZyBwYXJ0IG9mIHRoZSByZW5kZXIgcGhhc2UsIGJ1dCB0aGlzIG1ha2VzIGl0IG1hdGNoIHdoYXQgd2VcbiAgICAgIC8vIGRvIGluIENvbmN1cnJlbnQgTW9kZS5cbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgICB9XG5cbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIH0gZWxzZSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocHJpbWFyeUNoaWxkUHJvcHMsIG1vZGUsIE5vTGFuZXMsIG51bGwpO1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgfVxuXG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudCwgb2Zmc2NyZWVuUHJvcHMpIHtcbiAgLy8gVGhlIHByb3BzIGFyZ3VtZW50IHRvIGBjcmVhdGVXb3JrSW5Qcm9ncmVzc2AgaXMgYGFueWAgdHlwZWQsIHNvIHdlIHVzZSB0aGlzXG4gIC8vIHdyYXBwZXIgZnVuY3Rpb24gdG8gY29uc3RyYWluIGl0LlxuICByZXR1cm4gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgb2Zmc2NyZWVuUHJvcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgdmFyIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZztcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQsIHtcbiAgICBtb2RlOiAndmlzaWJsZScsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9KTtcblxuICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5sYW5lcyA9IHJlbmRlckxhbmVzO1xuICB9XG5cbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBudWxsO1xuXG4gIGlmIChjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgLy8gRGVsZXRlIHRoZSBmYWxsYmFjayBjaGlsZCBmcmFnbWVudFxuICAgIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudC5mbGFncyA9IERlbGV0aW9uO1xuICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCBmYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjdXJyZW50LmNoaWxkO1xuICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ2hpZGRlbicsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKCAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgY29tbWl0IHRoZSBwcmltYXJ5IHRyZWUgYXMgaWYgaXQgc3VjY2Vzc2Z1bGx5XG4gIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gIChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlICYmIC8vIE1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgc2Vjb25kIHBhc3MsIGkuZS4gdGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgd2FzXG4gIC8vIGFscmVhZHkgY2xvbmVkLiBJbiBsZWdhY3kgbW9kZSwgdGhlIG9ubHkgY2FzZSB3aGVyZSB0aGlzIGlzbid0IHRydWUgaXNcbiAgLy8gd2hlbiBEZXZUb29scyBmb3JjZXMgdXMgdG8gZGlzcGxheSBhIGZhbGxiYWNrOyB3ZSBza2lwIHRoZSBmaXJzdCByZW5kZXJcbiAgLy8gcGFzcyBlbnRpcmVseSBhbmQgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjay4gKEluIENvbmN1cnJlbnRcbiAgLy8gTW9kZSwgU3VzcGVuc2VMaXN0IGNhbiBhbHNvIHRyaWdnZXIgdGhpcyBzY2VuYXJpbywgYnV0IHRoaXMgaXMgYSBsZWdhY3ktXG4gIC8vIG9ubHkgY29kZXBhdGguKVxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50KSB7XG4gICAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIGR1cmF0aW9ucyBmcm9tIHRoZSBmaXJzdCBwYXNzIHNvIHRoZXkgYXJlbid0IGluY2x1ZGVkIGluIHRoZVxuICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgLy8gZG8gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgfSAvLyBUaGUgZmFsbGJhY2sgZmliZXIgd2FzIGFkZGVkIGFzIGEgZGVsZXRpb24gZWZmZWN0IGR1cmluZyB0aGUgZmlyc3QgcGFzcy5cbiAgICAvLyBIb3dldmVyLCBzaW5jZSB3ZSdyZSBnb2luZyB0byByZW1haW4gb24gdGhlIGZhbGxiYWNrLCB3ZSBubyBsb25nZXIgd2FudFxuICAgIC8vIHRvIGRlbGV0ZSBpdC4gU28gd2UgbmVlZCB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdC4gRGVsZXRpb25zIGFyZSBzdG9yZWRcbiAgICAvLyBvbiB0aGUgc2FtZSBsaXN0IGFzIGVmZmVjdHMuIFdlIHdhbnQgdG8ga2VlcCB0aGUgZWZmZWN0cyBmcm9tIHRoZSBwcmltYXJ5XG4gICAgLy8gdHJlZS4gU28gd2UgY29weSB0aGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCdzIGVmZmVjdCBsaXN0LCB3aGljaCBkb2VzIG5vdFxuICAgIC8vIGluY2x1ZGUgdGhlIGZhbGxiYWNrIGRlbGV0aW9uIGVmZmVjdC5cblxuXG4gICAgdmFyIHByb2dyZXNzZWRMYXN0RWZmZWN0ID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQubGFzdEVmZmVjdDtcblxuICAgIGlmIChwcm9ncmVzc2VkTGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5maXJzdEVmZmVjdDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBwcm9ncmVzc2VkTGFzdEVmZmVjdDtcbiAgICAgIHByb2dyZXNzZWRMYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBSZXNldCB0aGlzIHNvbWV3aGVyZSBlbHNlPyBMb2wgbGVnYWN5IG1vZGUgaXMgc28gd2VpcmQuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LCBwcmltYXJ5Q2hpbGRQcm9wcyk7XG4gIH1cblxuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuXG4gIGlmIChjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCwgZmFsbGJhY2tDaGlsZHJlbik7XG4gIH0gZWxzZSB7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpOyAvLyBOZWVkcyBhIHBsYWNlbWVudCBlZmZlY3QgYmVjYXVzZSB0aGUgcGFyZW50ICh0aGUgU3VzcGVuc2UgYm91bmRhcnkpIGFscmVhZHlcbiAgICAvLyBtb3VudGVkIGJ1dCB0aGlzIGlzIGEgbmV3IGZpYmVyLlxuXG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlV29ya09uRmliZXIoZmliZXIsIHJlbmRlckxhbmVzKSB7XG4gIGZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhmaWJlci5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGZpcnN0Q2hpbGQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIE1hcmsgYW55IFN1c3BlbnNlIGJvdW5kYXJpZXMgd2l0aCBmYWxsYmFja3MgYXMgaGF2aW5nIHdvcmsgdG8gZG8uXG4gIC8vIElmIHRoZXkgd2VyZSBwcmV2aW91c2x5IGZvcmNlZCBpbnRvIGZhbGxiYWNrcywgdGhleSBtYXkgbm93IGJlIGFibGVcbiAgLy8gdG8gdW5ibG9jay5cbiAgdmFyIG5vZGUgPSBmaXJzdENoaWxkO1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgc2NoZWR1bGVXb3JrT25GaWJlcihub2RlLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VMaXN0Q29tcG9uZW50KSB7XG4gICAgICAvLyBJZiB0aGUgdGFpbCBpcyBoaWRkZW4gdGhlcmUgbWlnaHQgbm90IGJlIGFuIFN1c3BlbnNlIGJvdW5kYXJpZXNcbiAgICAgIC8vIHRvIHNjaGVkdWxlIHdvcmsgb24uIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG9uIHRoZVxuICAgICAgLy8gbGlzdCBpdHNlbGYuXG4gICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHRyYXZlcnNlIHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgbGlzdCBzaW5jZVxuICAgICAgLy8gdGhlIGxpc3Qgd2lsbCBwcm9wYWdhdGUgdGhlIGNoYW5nZSB3aGVuIGl0IHJlcmVuZGVycy5cbiAgICAgIHNjaGVkdWxlV29ya09uRmliZXIobm9kZSwgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRMYXN0Q29udGVudFJvdyhmaXJzdENoaWxkKSB7XG4gIC8vIFRoaXMgaXMgZ29pbmcgdG8gZmluZCB0aGUgbGFzdCByb3cgYW1vbmcgdGhlc2UgY2hpbGRyZW4gdGhhdCBpcyBhbHJlYWR5XG4gIC8vIHNob3dpbmcgY29udGVudCBvbiB0aGUgc2NyZWVuLCBhcyBvcHBvc2VkIHRvIGJlaW5nIGluIGZhbGxiYWNrIHN0YXRlIG9yXG4gIC8vIG5ldy4gSWYgYSByb3cgaGFzIG11bHRpcGxlIFN1c3BlbnNlIGJvdW5kYXJpZXMsIGFueSBvZiB0aGVtIGJlaW5nIGluIHRoZVxuICAvLyBmYWxsYmFjayBzdGF0ZSwgY291bnRzIGFzIHRoZSB3aG9sZSByb3cgYmVpbmcgaW4gYSBmYWxsYmFjayBzdGF0ZS5cbiAgLy8gTm90ZSB0aGF0IHRoZSBcInJvd3NcIiB3aWxsIGJlIHdvcmtJblByb2dyZXNzLCBidXQgYW55IG5lc3RlZCBjaGlsZHJlblxuICAvLyB3aWxsIHN0aWxsIGJlIGN1cnJlbnQgc2luY2Ugd2UgaGF2ZW4ndCByZW5kZXJlZCB0aGVtIHlldC4gVGhlIG1vdW50ZWRcbiAgLy8gb3JkZXIgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgbmV3IG9yZGVyLiBXZSB1c2UgdGhlIG5ldyBvcmRlci5cbiAgdmFyIHJvdyA9IGZpcnN0Q2hpbGQ7XG4gIHZhciBsYXN0Q29udGVudFJvdyA9IG51bGw7XG5cbiAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50Um93ID0gcm93LmFsdGVybmF0ZTsgLy8gTmV3IHJvd3MgY2FuJ3QgYmUgY29udGVudCByb3dzLlxuXG4gICAgaWYgKGN1cnJlbnRSb3cgIT09IG51bGwgJiYgZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnRSb3cpID09PSBudWxsKSB7XG4gICAgICBsYXN0Q29udGVudFJvdyA9IHJvdztcbiAgICB9XG5cbiAgICByb3cgPSByb3cuc2libGluZztcbiAgfVxuXG4gIHJldHVybiBsYXN0Q29udGVudFJvdztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKHJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQgJiYgcmV2ZWFsT3JkZXIgIT09ICdmb3J3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICdiYWNrd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAndG9nZXRoZXInICYmICFkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcltyZXZlYWxPcmRlcl0pIHtcbiAgICAgIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgcmV2ZWFsT3JkZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN3aXRjaCAocmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgJ3RvZ2V0aGVyJzpcbiAgICAgICAgICBjYXNlICdmb3J3YXJkcyc6XG4gICAgICAgICAgY2FzZSAnYmFja3dhcmRzJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdVc2UgbG93ZXJjYXNlIFwiJXNcIiBpbnN0ZWFkLicsIHJldmVhbE9yZGVyLCByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ2ZvcndhcmQnOlxuICAgICAgICAgIGNhc2UgJ2JhY2t3YXJkJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdSZWFjdCB1c2VzIHRoZSAtcyBzdWZmaXggaW4gdGhlIHNwZWxsaW5nLiBVc2UgXCIlc3NcIiBpbnN0ZWFkLicsIHJldmVhbE9yZGVyLCByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiPycsIHJldmVhbE9yZGVyKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JywgcmV2ZWFsT3JkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKHRhaWxNb2RlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSkge1xuICAgICAgaWYgKHRhaWxNb2RlICE9PSAnY29sbGFwc2VkJyAmJiB0YWlsTW9kZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgdGFpbCBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcImNvbGxhcHNlZFwiIG9yIFwiaGlkZGVuXCI/JywgdGFpbE1vZGUpO1xuICAgICAgfSBlbHNlIGlmIChyZXZlYWxPcmRlciAhPT0gJ2ZvcndhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ2JhY2t3YXJkcycpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignPFN1c3BlbnNlTGlzdCB0YWlsPVwiJXNcIiAvPiBpcyBvbmx5IHZhbGlkIGlmIHJldmVhbE9yZGVyIGlzICcgKyAnXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCIuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHNwZWNpZnkgcmV2ZWFsT3JkZXI9XCJmb3J3YXJkc1wiPycsIHRhaWxNb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChjaGlsZFNsb3QsIGluZGV4KSB7XG4gIHtcbiAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoY2hpbGRTbG90KTtcbiAgICB2YXIgaXNJdGVyYWJsZSA9ICFpc0FycmF5ICYmIHR5cGVvZiBnZXRJdGVyYXRvckZuKGNoaWxkU2xvdCkgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaXNBcnJheSB8fCBpc0l0ZXJhYmxlKSB7XG4gICAgICB2YXIgdHlwZSA9IGlzQXJyYXkgPyAnYXJyYXknIDogJ2l0ZXJhYmxlJztcblxuICAgICAgZXJyb3IoJ0EgbmVzdGVkICVzIHdhcyBwYXNzZWQgdG8gcm93ICMlcyBpbiA8U3VzcGVuc2VMaXN0IC8+LiBXcmFwIGl0IGluICcgKyAnYW4gYWRkaXRpb25hbCBTdXNwZW5zZUxpc3QgdG8gY29uZmlndXJlIGl0cyByZXZlYWxPcmRlcjogJyArICc8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj4gLi4uICcgKyAnPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+eyVzfTwvU3VzcGVuc2VMaXN0PiAuLi4gJyArICc8L1N1c3BlbnNlTGlzdD4nLCB0eXBlLCBpbmRleCwgdHlwZSk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdXNwZW5zZUxpc3RDaGlsZHJlbihjaGlsZHJlbiwgcmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmICgocmV2ZWFsT3JkZXIgPT09ICdmb3J3YXJkcycgfHwgcmV2ZWFsT3JkZXIgPT09ICdiYWNrd2FyZHMnKSAmJiBjaGlsZHJlbiAhPT0gdW5kZWZpbmVkICYmIGNoaWxkcmVuICE9PSBudWxsICYmIGNoaWxkcmVuICE9PSBmYWxzZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRyZW5baV0sIGkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjaGlsZHJlbkl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcblxuICAgICAgICAgIGlmIChjaGlsZHJlbkl0ZXJhdG9yKSB7XG4gICAgICAgICAgICB2YXIgc3RlcCA9IGNoaWxkcmVuSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgdmFyIF9pID0gMDtcblxuICAgICAgICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IHN0ZXAgPSBjaGlsZHJlbkl0ZXJhdG9yLm5leHQoKSkge1xuICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoc3RlcC52YWx1ZSwgX2kpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgX2krKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IoJ0Egc2luZ2xlIHJvdyB3YXMgcGFzc2VkIHRvIGEgPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj1cIiVzXCIgLz4uICcgKyAnVGhpcyBpcyBub3QgdXNlZnVsIHNpbmNlIGl0IG5lZWRzIG11bHRpcGxlIHJvd3MuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHBhc3MgbXVsdGlwbGUgY2hpbGRyZW4gb3IgYW4gYXJyYXk/JywgcmV2ZWFsT3JkZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgaXNCYWNrd2FyZHMsIHRhaWwsIGxhc3RDb250ZW50Um93LCB0YWlsTW9kZSwgbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZykge1xuICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChyZW5kZXJTdGF0ZSA9PT0gbnVsbCkge1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICBpc0JhY2t3YXJkczogaXNCYWNrd2FyZHMsXG4gICAgICByZW5kZXJpbmc6IG51bGwsXG4gICAgICByZW5kZXJpbmdTdGFydFRpbWU6IDAsXG4gICAgICBsYXN0OiBsYXN0Q29udGVudFJvdyxcbiAgICAgIHRhaWw6IHRhaWwsXG4gICAgICB0YWlsTW9kZTogdGFpbE1vZGUsXG4gICAgICBsYXN0RWZmZWN0OiBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIG9iamVjdCBmcm9tIHByZXZpb3VzIHJlbmRlcnMuXG4gICAgcmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMgPSBpc0JhY2t3YXJkcztcbiAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IDA7XG4gICAgcmVuZGVyU3RhdGUubGFzdCA9IGxhc3RDb250ZW50Um93O1xuICAgIHJlbmRlclN0YXRlLnRhaWwgPSB0YWlsO1xuICAgIHJlbmRlclN0YXRlLnRhaWxNb2RlID0gdGFpbE1vZGU7XG4gICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmc7XG4gIH1cbn0gLy8gVGhpcyBjYW4gZW5kIHVwIHJlbmRlcmluZyB0aGlzIGNvbXBvbmVudCBtdWx0aXBsZSBwYXNzZXMuXG4vLyBUaGUgZmlyc3QgcGFzcyBzcGxpdHMgdGhlIGNoaWxkcmVuIGZpYmVycyBpbnRvIHR3byBzZXRzLiBBIGhlYWQgYW5kIHRhaWwuXG4vLyBXZSBmaXJzdCByZW5kZXIgdGhlIGhlYWQuIElmIGFueXRoaW5nIGlzIGluIGZhbGxiYWNrIHN0YXRlLCB3ZSBkbyBhbm90aGVyXG4vLyBwYXNzIHRocm91Z2ggYmVnaW5Xb3JrIHRvIHJlcmVuZGVyIGFsbCBjaGlsZHJlbiAoaW5jbHVkaW5nIHRoZSB0YWlsKSB3aXRoXG4vLyB0aGUgZm9yY2Ugc3VzcGVuZCBjb250ZXh0LiBJZiB0aGUgZmlyc3QgcmVuZGVyIGRpZG4ndCBoYXZlIGFueXRoaW5nIGluXG4vLyBpbiBmYWxsYmFjayBzdGF0ZS4gVGhlbiB3ZSByZW5kZXIgZWFjaCByb3cgaW4gdGhlIHRhaWwgb25lLWJ5LW9uZS5cbi8vIFRoYXQgaGFwcGVucyBpbiB0aGUgY29tcGxldGVXb3JrIHBoYXNlIHdpdGhvdXQgZ29pbmcgYmFjayB0byBiZWdpbldvcmsuXG5cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmV2ZWFsT3JkZXIgPSBuZXh0UHJvcHMucmV2ZWFsT3JkZXI7XG4gIHZhciB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhbGlkYXRlUmV2ZWFsT3JkZXIocmV2ZWFsT3JkZXIpO1xuICB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcik7XG4gIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4obmV3Q2hpbGRyZW4sIHJldmVhbE9yZGVyKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIHZhciBzaG91bGRGb3JjZUZhbGxiYWNrID0gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcblxuICBpZiAoc2hvdWxkRm9yY2VGYWxsYmFjaykge1xuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSBjdXJyZW50ICE9PSBudWxsICYmIChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgLy8gSWYgd2UgcHJldmlvdXNseSBmb3JjZWQgYSBmYWxsYmFjaywgd2UgbmVlZCB0byBzY2hlZHVsZSB3b3JrXG4gICAgICAvLyBvbiBhbnkgbmVzdGVkIGJvdW5kYXJpZXMgdG8gbGV0IHRoZW0ga25vdyB0byB0cnkgdG8gcmVuZGVyXG4gICAgICAvLyBhZ2Fpbi4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjb250ZXh0IHVwZGF0aW5nLlxuICAgICAgcHJvcGFnYXRlU3VzcGVuc2VDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZCwgcmVuZGVyTGFuZXMpO1xuICAgIH1cblxuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gIH1cblxuICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIC8vIEluIGxlZ2FjeSBtb2RlLCBTdXNwZW5zZUxpc3QgZG9lc24ndCB3b3JrIHNvIHdlIGp1c3RcbiAgICAvLyB1c2UgbWFrZSBpdCBhIG5vb3AgYnkgdHJlYXRpbmcgaXQgYXMgdGhlIGRlZmF1bHQgcmV2ZWFsT3JkZXIuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoIChyZXZlYWxPcmRlcikge1xuICAgICAgY2FzZSAnZm9yd2FyZHMnOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhc3RDb250ZW50Um93ID0gZmluZExhc3RDb250ZW50Um93KHdvcmtJblByb2dyZXNzLmNoaWxkKTtcbiAgICAgICAgICB2YXIgdGFpbDtcblxuICAgICAgICAgIGlmIChsYXN0Q29udGVudFJvdyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIHdob2xlIGxpc3QgaXMgcGFydCBvZiB0aGUgdGFpbC5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIGNvdWxkIGZhc3QgcGF0aCBieSBqdXN0IHJlbmRlcmluZyB0aGUgdGFpbCBub3cuXG4gICAgICAgICAgICB0YWlsID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERpc2Nvbm5lY3QgdGhlIHRhaWwgcm93cyBhZnRlciB0aGUgY29udGVudCByb3cuXG4gICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byByZW5kZXIgdGhlbSBzZXBhcmF0ZWx5IGxhdGVyLlxuICAgICAgICAgICAgdGFpbCA9IGxhc3RDb250ZW50Um93LnNpYmxpbmc7XG4gICAgICAgICAgICBsYXN0Q29udGVudFJvdy5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGZhbHNlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIHRhaWwsIGxhc3RDb250ZW50Um93LCB0YWlsTW9kZSwgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYmFja3dhcmRzJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGZpbmQgdGhlIGZpcnN0IHJvdyB0aGF0IGhhcyBleGlzdGluZyBjb250ZW50LlxuICAgICAgICAgIC8vIEF0IHRoZSBzYW1lIHRpbWUgd2UncmUgZ29pbmcgdG8gcmV2ZXJzZSB0aGUgbGlzdCBvZiBldmVyeXRoaW5nXG4gICAgICAgICAgLy8gd2UgcGFzcyBpbiB0aGUgbWVhbnRpbWUuIFRoYXQncyBnb2luZyB0byBiZSBvdXIgdGFpbCBpbiByZXZlcnNlXG4gICAgICAgICAgLy8gb3JkZXIuXG4gICAgICAgICAgdmFyIF90YWlsID0gbnVsbDtcbiAgICAgICAgICB2YXIgcm93ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuXG4gICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRSb3cgPSByb3cuYWx0ZXJuYXRlOyAvLyBOZXcgcm93cyBjYW4ndCBiZSBjb250ZW50IHJvd3MuXG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Um93ICE9PSBudWxsICYmIGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50Um93KSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1haW4gY29udGVudC5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByb3c7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbmV4dFJvdyA9IHJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgcm93LnNpYmxpbmcgPSBfdGFpbDtcbiAgICAgICAgICAgIF90YWlsID0gcm93O1xuICAgICAgICAgICAgcm93ID0gbmV4dFJvdztcbiAgICAgICAgICB9IC8vIFRPRE86IElmIHdvcmtJblByb2dyZXNzLmNoaWxkIGlzIG51bGwsIHdlIGNhbiBjb250aW51ZSBvbiB0aGUgdGFpbCBpbW1lZGlhdGVseS5cblxuXG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCB0cnVlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIF90YWlsLCBudWxsLCAvLyBsYXN0XG4gICAgICAgICAgdGFpbE1vZGUsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ3RvZ2V0aGVyJzpcbiAgICAgICAge1xuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgbnVsbCwgLy8gdGFpbFxuICAgICAgICAgIG51bGwsIC8vIGxhc3RcbiAgICAgICAgICB1bmRlZmluZWQsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUaGUgZGVmYXVsdCByZXZlYWwgb3JkZXIgaXMgdGhlIHNhbWUgYXMgbm90IGhhdmluZ1xuICAgICAgICAgIC8vIGEgYm91bmRhcnkuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVBvcnRhbENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIFBvcnRhbHMgYXJlIHNwZWNpYWwgYmVjYXVzZSB3ZSBkb24ndCBhcHBlbmQgdGhlIGNoaWxkcmVuIGR1cmluZyBtb3VudFxuICAgIC8vIGJ1dCBhdCBjb21taXQuIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIHRyYWNrIGluc2VydGlvbnMgd2hpY2ggdGhlIG5vcm1hbFxuICAgIC8vIGZsb3cgZG9lc24ndCBkbyBkdXJpbmcgbW91bnQuIFRoaXMgZG9lc24ndCBoYXBwZW4gYXQgdGhlIHJvb3QgYmVjYXVzZVxuICAgIC8vIHRoZSByb290IGFsd2F5cyBzdGFydHMgd2l0aCBhIFwiY3VycmVudFwiIHdpdGggYSBudWxsIGNoaWxkLlxuICAgIC8vIFRPRE86IENvbnNpZGVyIHVuaWZ5aW5nIHRoaXMgd2l0aCBob3cgdGhlIHJvb3Qgd29ya3MuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG52YXIgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dFByb3ZpZGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgcHJvdmlkZXJUeXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlclR5cGUuX2NvbnRleHQ7XG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgdmFyIG5ld1ZhbHVlID0gbmV3UHJvcHMudmFsdWU7XG5cbiAge1xuICAgIGlmICghKCd2YWx1ZScgaW4gbmV3UHJvcHMpKSB7XG4gICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignVGhlIGB2YWx1ZWAgcHJvcCBpcyByZXF1aXJlZCBmb3IgdGhlIGA8Q29udGV4dC5Qcm92aWRlcj5gLiBEaWQgeW91IG1pc3NwZWxsIGl0IG9yIGZvcmdldCB0byBwYXNzIGl0PycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcm92aWRlclByb3BUeXBlcyA9IHdvcmtJblByb2dyZXNzLnR5cGUucHJvcFR5cGVzO1xuXG4gICAgaWYgKHByb3ZpZGVyUHJvcFR5cGVzKSB7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm92aWRlclByb3BUeXBlcywgbmV3UHJvcHMsICdwcm9wJywgJ0NvbnRleHQuUHJvdmlkZXInKTtcbiAgICB9XG4gIH1cblxuICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIG5ld1ZhbHVlKTtcblxuICBpZiAob2xkUHJvcHMgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkVmFsdWUgPSBvbGRQcm9wcy52YWx1ZTtcbiAgICB2YXIgY2hhbmdlZEJpdHMgPSBjYWxjdWxhdGVDaGFuZ2VkQml0cyhjb250ZXh0LCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuXG4gICAgaWYgKGNoYW5nZWRCaXRzID09PSAwKSB7XG4gICAgICAvLyBObyBjaGFuZ2UuIEJhaWxvdXQgZWFybHkgaWYgY2hpbGRyZW4gYXJlIHRoZSBzYW1lLlxuICAgICAgaWYgKG9sZFByb3BzLmNoaWxkcmVuID09PSBuZXdQcm9wcy5jaGlsZHJlbiAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSkge1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgY29udGV4dCB2YWx1ZSBjaGFuZ2VkLiBTZWFyY2ggZm9yIG1hdGNoaW5nIGNvbnN1bWVycyBhbmQgc2NoZWR1bGVcbiAgICAgIC8vIHRoZW0gdG8gdXBkYXRlLlxuICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgY2hhbmdlZEJpdHMsIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxudmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0Q29uc3VtZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MudHlwZTsgLy8gVGhlIGxvZ2ljIGJlbG93IGZvciBDb250ZXh0IGRpZmZlcnMgZGVwZW5kaW5nIG9uIFBST0Qgb3IgREVWIG1vZGUuIEluXG4gIC8vIERFViBtb2RlLCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSBvYmplY3QgZm9yIENvbnRleHQuQ29uc3VtZXIgdGhhdCBhY3RzXG4gIC8vIGxpa2UgYSBwcm94eSB0byBDb250ZXh0LiBUaGlzIHByb3h5IG9iamVjdCBhZGRzIHVubmVjZXNzYXJ5IGNvZGUgaW4gUFJPRFxuICAvLyBzbyB3ZSB1c2UgdGhlIG9sZCBiZWhhdmlvdXIgKENvbnRleHQuQ29uc3VtZXIgcmVmZXJlbmNlcyBDb250ZXh0KSB0b1xuICAvLyByZWR1Y2Ugc2l6ZSBhbmQgb3ZlcmhlYWQuIFRoZSBzZXBhcmF0ZSBvYmplY3QgcmVmZXJlbmNlcyBjb250ZXh0IHZpYVxuICAvLyBhIHByb3BlcnR5IGNhbGxlZCBcIl9jb250ZXh0XCIsIHdoaWNoIGFsc28gZ2l2ZXMgdXMgdGhlIGFiaWxpdHkgdG8gY2hlY2tcbiAgLy8gaW4gREVWIG1vZGUgaWYgdGhpcyBwcm9wZXJ0eSBleGlzdHMgb3Igbm90IGFuZCB3YXJuIGlmIGl0IGRvZXMgbm90LlxuXG4gIHtcbiAgICBpZiAoY29udGV4dC5fY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUaGlzIG1heSBiZSBiZWNhdXNlIGl0J3MgYSBDb250ZXh0IChyYXRoZXIgdGhhbiBhIENvbnN1bWVyKS5cbiAgICAgIC8vIE9yIGl0IG1heSBiZSBiZWNhdXNlIGl0J3Mgb2xkZXIgUmVhY3Qgd2hlcmUgdGhleSdyZSB0aGUgc2FtZSB0aGluZy5cbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byB3YXJuIGlmIHdlJ3JlIHN1cmUgaXQncyBhIG5ldyBSZWFjdC5cbiAgICAgIGlmIChjb250ZXh0ICE9PSBjb250ZXh0LkNvbnN1bWVyKSB7XG4gICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyKSB7XG4gICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQ+IGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dCA9IGNvbnRleHQuX2NvbnRleHQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmVuZGVyID0gbmV3UHJvcHMuY2hpbGRyZW47XG5cbiAge1xuICAgIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignQSBjb250ZXh0IGNvbnN1bWVyIHdhcyByZW5kZXJlZCB3aXRoIG11bHRpcGxlIGNoaWxkcmVuLCBvciBhIGNoaWxkICcgKyBcInRoYXQgaXNuJ3QgYSBmdW5jdGlvbi4gQSBjb250ZXh0IGNvbnN1bWVyIGV4cGVjdHMgYSBzaW5nbGUgY2hpbGQgXCIgKyAndGhhdCBpcyBhIGZ1bmN0aW9uLiBJZiB5b3UgZGlkIHBhc3MgYSBmdW5jdGlvbiwgbWFrZSBzdXJlIHRoZXJlICcgKyAnaXMgbm8gdHJhaWxpbmcgb3IgbGVhZGluZyB3aGl0ZXNwYWNlIGFyb3VuZCBpdC4nKTtcbiAgICB9XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgbmV3VmFsdWUgPSByZWFkQ29udGV4dChjb250ZXh0LCBuZXdQcm9wcy51bnN0YWJsZV9vYnNlcnZlZEJpdHMpO1xuICB2YXIgbmV3Q2hpbGRyZW47XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5ld0NoaWxkcmVuID0gcmVuZGVyKG5ld1ZhbHVlKTtcbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKSB7XG4gIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIFJldXNlIHByZXZpb3VzIGRlcGVuZGVuY2llc1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IHVwZGF0ZSBcImJhc2VcIiByZW5kZXIgdGltZXMgZm9yIGJhaWxvdXRzLlxuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gIH1cblxuICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzKTsgLy8gQ2hlY2sgaWYgdGhlIGNoaWxkcmVuIGhhdmUgYW55IHBlbmRpbmcgd29yay5cblxuICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKSB7XG4gICAgLy8gVGhlIGNoaWxkcmVuIGRvbid0IGhhdmUgYW55IHdvcmsgZWl0aGVyLiBXZSBjYW4gc2tpcCB0aGVtLlxuICAgIC8vIFRPRE86IE9uY2Ugd2UgYWRkIGJhY2sgcmVzdW1pbmcsIHdlIHNob3VsZCBjaGVjayBpZiB0aGUgY2hpbGRyZW4gYXJlXG4gICAgLy8gYSB3b3JrLWluLXByb2dyZXNzIHNldC4gSWYgc28sIHdlIG5lZWQgdG8gdHJhbnNmZXIgdGhlaXIgZWZmZWN0cy5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGZpYmVyIGRvZXNuJ3QgaGF2ZSB3b3JrLCBidXQgaXRzIHN1YnRyZWUgZG9lcy4gQ2xvbmUgdGhlIGNoaWxkXG4gICAgLy8gZmliZXJzIGFuZCBjb250aW51ZS5cbiAgICBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3VudEZpYmVyKGN1cnJlbnQsIG9sZFdvcmtJblByb2dyZXNzLCBuZXdXb3JrSW5Qcm9ncmVzcykge1xuICB7XG4gICAgdmFyIHJldHVybkZpYmVyID0gb2xkV29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuXG4gICAgaWYgKHJldHVybkZpYmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzd2FwIHRoZSByb290IGZpYmVyLicpO1xuICAgIH0gLy8gRGlzY29ubmVjdCBmcm9tIHRoZSBvbGQgY3VycmVudC5cbiAgICAvLyBJdCB3aWxsIGdldCBkZWxldGVkLlxuXG5cbiAgICBjdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgb2xkV29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gQ29ubmVjdCB0byB0aGUgbmV3IHRyZWUuXG5cbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5pbmRleCA9IG9sZFdvcmtJblByb2dyZXNzLmluZGV4O1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBvbGRXb3JrSW5Qcm9ncmVzcy5zaWJsaW5nO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnJldHVybiA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5yZWYgPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZWY7IC8vIFJlcGxhY2UgdGhlIGNoaWxkL3NpYmxpbmcgcG9pbnRlcnMgYWJvdmUgaXQuXG5cbiAgICBpZiAob2xkV29ya0luUHJvZ3Jlc3MgPT09IHJldHVybkZpYmVyLmNoaWxkKSB7XG4gICAgICByZXR1cm5GaWJlci5jaGlsZCA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJldlNpYmxpbmcgPSByZXR1cm5GaWJlci5jaGlsZDtcblxuICAgICAgaWYgKHByZXZTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcGFyZW50IHRvIGhhdmUgYSBjaGlsZC4nKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHByZXZTaWJsaW5nLnNpYmxpbmcgIT09IG9sZFdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHByZXZTaWJsaW5nID0gcHJldlNpYmxpbmcuc2libGluZztcblxuICAgICAgICBpZiAocHJldlNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgdGhlIHByZXZpb3VzIHNpYmxpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJldlNpYmxpbmcuc2libGluZyA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgIH0gLy8gRGVsZXRlIHRoZSBvbGQgZmliZXIgYW5kIHBsYWNlIHRoZSBuZXcgb25lLlxuICAgIC8vIFNpbmNlIHRoZSBvbGQgZmliZXIgaXMgZGlzY29ubmVjdGVkLCB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG1hbnVhbGx5LlxuXG5cbiAgICB2YXIgbGFzdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdCAhPT0gbnVsbCkge1xuICAgICAgbGFzdC5uZXh0RWZmZWN0ID0gY3VycmVudDtcbiAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjdXJyZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIGN1cnJlbnQubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY3VycmVudC5mbGFncyA9IERlbGV0aW9uO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDsgLy8gUmVzdGFydCB3b3JrIGZyb20gdGhlIG5ldyBmaWJlci5cblxuICAgIHJldHVybiBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgfVxufVxuXG5mdW5jdGlvbiBiZWdpbldvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciB1cGRhdGVMYW5lcyA9IHdvcmtJblByb2dyZXNzLmxhbmVzO1xuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ICYmIGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgd2lsbCByZXN0YXJ0IHRoZSBiZWdpbiBwaGFzZSB3aXRoIGEgbmV3IGZpYmVyLlxuICAgICAgcmV0dXJuIHJlbW91bnRGaWJlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzLmtleSwgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLCB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciB8fCBudWxsLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYW5lcykpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMgfHwgaGFzQ29udGV4dENoYW5nZWQoKSB8fCAoIC8vIEZvcmNlIGEgcmUtcmVuZGVyIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkOlxuICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSBjdXJyZW50LnR5cGUgKSkge1xuICAgICAgLy8gSWYgcHJvcHMgb3IgY29udGV4dCBjaGFuZ2VkLCBtYXJrIHRoZSBmaWJlciBhcyBoYXZpbmcgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAvLyBUaGlzIG1heSBiZSB1bnNldCBpZiB0aGUgcHJvcHMgYXJlIGRldGVybWluZWQgdG8gYmUgZXF1YWwgbGF0ZXIgKG1lbW8pLlxuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgdXBkYXRlTGFuZXMpKSB7XG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7IC8vIFRoaXMgZmliZXIgZG9lcyBub3QgaGF2ZSBhbnkgcGVuZGluZyB3b3JrLiBCYWlsb3V0IHdpdGhvdXQgZW50ZXJpbmdcbiAgICAgIC8vIHRoZSBiZWdpbiBwaGFzZS4gVGhlcmUncyBzdGlsbCBzb21lIGJvb2trZWVwaW5nIHdlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZVxuICAgICAgLy8gaW4gdGhpcyBvcHRpbWl6ZWQgcGF0aCwgbW9zdGx5IHB1c2hpbmcgc3R1ZmYgb250byB0aGUgc3RhY2suXG5cbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy52YWx1ZTtcbiAgICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgbmV3VmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gUHJvZmlsZXIgc2hvdWxkIG9ubHkgY2FsbCBvblJlbmRlciB3aGVuIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gICAgICAgICAgICB2YXIgaGFzQ2hpbGRXb3JrID0gaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChoYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgfSAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgICAgICAgICAvLyBUaGVzZSBhcmUgcmVzZXQgZHVyaW5nIHJlbmRlciB0byBhbGxvdyB0aGUgRGV2VG9vbHMgY29tbWl0IGhvb2sgYSBjaGFuY2UgdG8gcmVhZCB0aGVtLFxuXG5cbiAgICAgICAgICAgIHZhciBzdGF0ZU5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gd2hldGhlciB0byByZXRyeSB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgb3IgdG8gc2tpcCBvdmVyIGl0IGFuZFxuICAgICAgICAgICAgICAvLyBnbyBzdHJhaWdodCB0byB0aGUgZmFsbGJhY2suIENoZWNrIHRoZSBwcmlvcml0eSBvZiB0aGUgcHJpbWFyeVxuICAgICAgICAgICAgICAvLyBjaGlsZCBmcmFnbWVudC5cblxuXG4gICAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkTGFuZXMgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzO1xuXG4gICAgICAgICAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBwcmltYXJ5Q2hpbGRMYW5lcykpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gVXNlIHRoZSBub3JtYWwgcGF0aFxuICAgICAgICAgICAgICAgIC8vIHRvIGF0dGVtcHQgdG8gcmVuZGVyIHRoZSBwcmltYXJ5IGNoaWxkcmVuIGFnYWluLlxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcmltYXJ5IGNoaWxkIGZyYWdtZW50IGRvZXMgbm90IGhhdmUgcGVuZGluZyB3b3JrIG1hcmtlZFxuICAgICAgICAgICAgICAgIC8vIG9uIGl0XG4gICAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KSk7IC8vIFRoZSBwcmltYXJ5IGNoaWxkcmVuIGRvIG5vdCBoYXZlIHBlbmRpbmcgd29yayB3aXRoIHN1ZmZpY2llbnRcbiAgICAgICAgICAgICAgICAvLyBwcmlvcml0eS4gQmFpbG91dC5cblxuICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIGZhbGxiYWNrIGNoaWxkcmVuIGhhdmUgcGVuZGluZyB3b3JrLiBTa2lwIG92ZXIgdGhlXG4gICAgICAgICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuIGFuZCB3b3JrIG9uIHRoZSBmYWxsYmFjay5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gICAgICAgICAgICB2YXIgX2hhc0NoaWxkV29yayA9IGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpO1xuXG4gICAgICAgICAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgICAgICAgICBpZiAoX2hhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICAgIC8vIElmIHNvbWV0aGluZyB3YXMgaW4gZmFsbGJhY2sgc3RhdGUgbGFzdCB0aW1lLCBhbmQgd2UgaGF2ZSBhbGwgdGhlXG4gICAgICAgICAgICAgICAgLy8gc2FtZSBjaGlsZHJlbiB0aGVuIHdlJ3JlIHN0aWxsIGluIHByb2dyZXNzaXZlIGxvYWRpbmcgc3RhdGUuXG4gICAgICAgICAgICAgICAgLy8gU29tZXRoaW5nIG1pZ2h0IGdldCB1bmJsb2NrZWQgYnkgc3RhdGUgdXBkYXRlcyBvciByZXRyaWVzIGluIHRoZVxuICAgICAgICAgICAgICAgIC8vIHRyZWUgd2hpY2ggd2lsbCBhZmZlY3QgdGhlIHRhaWwuIFNvIHdlIG5lZWQgdG8gdXNlIHRoZSBub3JtYWxcbiAgICAgICAgICAgICAgICAvLyBwYXRoIHRvIGNvbXB1dGUgdGhlIGNvcnJlY3QgdGFpbC5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgIH0gLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgICAgICAvLyB0aGVtIGdvdCByZXRyaWVkIHNvIHRoZXknbGwgc3RpbGwgYmUgYmxvY2tlZCBpbiB0aGUgc2FtZSB3YXlcbiAgICAgICAgICAgICAgLy8gYXMgYmVmb3JlLiBXZSBjYW4gZmFzdCBiYWlsIG91dC5cblxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICB9IC8vIElmIG5vdGhpbmcgc3VzcGVuZGVkIGJlZm9yZSBhbmQgd2UncmUgcmVuZGVyaW5nIHRoZSBzYW1lIGNoaWxkcmVuLFxuICAgICAgICAgICAgLy8gdGhlbiB0aGUgdGFpbCBkb2Vzbid0IG1hdHRlci4gQW55dGhpbmcgbmV3IHRoYXQgc3VzcGVuZHMgd2lsbCB3b3JrXG4gICAgICAgICAgICAvLyBpbiB0aGUgXCJ0b2dldGhlclwiIG1vZGUsIHNvIHdlIGNhbiBjb250aW51ZSBmcm9tIHRoZSBzdGF0ZSB3ZSBoYWQuXG5cblxuICAgICAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFJlc2V0IHRvIHRoZSBcInRvZ2V0aGVyXCIgbW9kZSBpbiBjYXNlIHdlJ3ZlIHN0YXJ0ZWQgYSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIGluIHRoZSBwYXN0IGJ1dCBkaWRuJ3QgY29tcGxldGUgaXQuXG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGw7XG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KTtcblxuICAgICAgICAgICAgaWYgKF9oYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZiBub25lIG9mIHRoZSBjaGlsZHJlbiBoYWQgYW55IHdvcmssIHRoYXQgbWVhbnMgdGhhdCBub25lIG9mXG4gICAgICAgICAgICAgIC8vIHRoZW0gZ290IHJldHJpZWQgc28gdGhleSdsbCBzdGlsbCBiZSBibG9ja2VkIGluIHRoZSBzYW1lIHdheVxuICAgICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gY2hlY2sgaWYgdGhlIHRyZWUgc3RpbGwgbmVlZHMgdG8gYmUgZGVmZXJyZWQuIFRoaXMgaXNcbiAgICAgICAgICAgIC8vIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIGxvZ2ljIHVzZWQgaW4gdGhlIG5vcm1hbCB1cGRhdGUgcGF0aCxcbiAgICAgICAgICAgIC8vIHNvIHdlJ2xsIGp1c3QgZW50ZXIgdGhhdC4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB3ZSdsbCBiYWlsIG91dFxuICAgICAgICAgICAgLy8gYXQgdGhlIG5leHQgbGV2ZWwgaW5zdGVhZCBvZiB0aGlzIG9uZSwgYmVjYXVzZSB0aGUgY2hpbGQgcHJvcHNcbiAgICAgICAgICAgIC8vIGhhdmUgbm90IGNoYW5nZWQuIFdoaWNoIGlzIGZpbmUuXG4gICAgICAgICAgICAvLyBUT0RPOiBQcm9iYWJseSBzaG91bGQgcmVmYWN0b3IgYGJlZ2luV29ya2AgdG8gc3BsaXQgdGhlIGJhaWxvdXRcbiAgICAgICAgICAgIC8vIHBhdGggZnJvbSB0aGUgbm9ybWFsIHBhdGguIEknbSB0ZW1wdGVkIHRvIGRvIGEgbGFiZWxlZCBicmVhayBoZXJlXG4gICAgICAgICAgICAvLyBidXQgSSB3b24ndCA6KVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzO1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKChjdXJyZW50LmZsYWdzICYgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IG9ubHkgZXhpc3RzIGZvciBsZWdhY3kgbW9kZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MjE2LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIG9uIHRoaXMgZmliZXIsIGJ1dCB0aGVyZSBhcmUgbm8gbmV3IHByb3BzXG4gICAgICAgIC8vIG5vciBsZWdhY3kgY29udGV4dC4gU2V0IHRoaXMgdG8gZmFsc2UuIElmIGFuIHVwZGF0ZSBxdWV1ZSBvciBjb250ZXh0XG4gICAgICAgIC8vIGNvbnN1bWVyIHByb2R1Y2VzIGEgY2hhbmdlZCB2YWx1ZSwgaXQgd2lsbCBzZXQgdGhpcyB0byB0cnVlLiBPdGhlcndpc2UsXG4gICAgICAgIC8vIHRoZSBjb21wb25lbnQgd2lsbCBhc3N1bWUgdGhlIGNoaWxkcmVuIGhhdmUgbm90IGNoYW5nZWQgYW5kIGJhaWwgb3V0LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgfSAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjbGVhciBwZW5kaW5nIHVwZGF0ZSBwcmlvcml0eS5cbiAgLy8gVE9ETzogVGhpcyBhc3N1bWVzIHRoYXQgd2UncmUgYWJvdXQgdG8gZXZhbHVhdGUgdGhlIGNvbXBvbmVudCBhbmQgcHJvY2Vzc1xuICAvLyB0aGUgdXBkYXRlIHF1ZXVlLiBIb3dldmVyLCB0aGVyZSdzIGFuIGV4Y2VwdGlvbjogU2ltcGxlTWVtb0NvbXBvbmVudFxuICAvLyBzb21ldGltZXMgYmFpbHMgb3V0IGxhdGVyIGluIHRoZSBiZWdpbiBwaGFzZS4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGRcbiAgLy8gbW92ZSB0aGlzIGFzc2lnbm1lbnQgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBhbmQgaW50byBlYWNoIGJyYW5jaC5cblxuXG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lcztcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIG1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgZWxlbWVudFR5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIG1vdW50TGF6eUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZWxlbWVudFR5cGUsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciB1bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciByZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQgPyB1bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQsIHVucmVzb2x2ZWRQcm9wcyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQyID8gX3VucmVzb2x2ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudDIsIF91bnJlc29sdmVkUHJvcHMpO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudDIsIF9yZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0VGV4dChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICByZXR1cm4gdXBkYXRlUG9ydGFsQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczIgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gdHlwZSA/IF91bnJlc29sdmVkUHJvcHMyIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh0eXBlLCBfdW5yZXNvbHZlZFByb3BzMik7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZvcndhcmRSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIF9yZXNvbHZlZFByb3BzMiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGcmFnbWVudDpcbiAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBNb2RlOlxuICAgICAgcmV0dXJuIHVwZGF0ZU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICByZXR1cm4gdXBkYXRlUHJvZmlsZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRQcm92aWRlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgICByZXR1cm4gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfdHlwZTIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFJlc29sdmUgb3V0ZXIgcHJvcHMgZmlyc3QsIHRoZW4gcmVzb2x2ZSBpbm5lciBwcm9wcy5cblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIsIF91bnJlc29sdmVkUHJvcHMzKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBfdHlwZTIucHJvcFR5cGVzO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIF9yZXNvbHZlZFByb3BzMywgLy8gUmVzb2x2ZWQgZm9yIG91dGVyIG9ubHlcbiAgICAgICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKF90eXBlMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9yZXNvbHZlZFByb3BzMyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoX3R5cGUyLnR5cGUsIF9yZXNvbHZlZFByb3BzMyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfdHlwZTIsIF9yZXNvbHZlZFByb3BzMywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudDMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzNCA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MyA/IF91bnJlc29sdmVkUHJvcHM0IDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MywgX3VucmVzb2x2ZWRQcm9wczQpO1xuXG4gICAgICAgIHJldHVybiBtb3VudEluY29tcGxldGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudDMsIF9yZXNvbHZlZFByb3BzNCwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUxlZ2FjeUhpZGRlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gdW5pdCBvZiB3b3JrIHRhZyAoXCIgKyB3b3JrSW5Qcm9ncmVzcy50YWcgKyBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBUYWcgdGhlIGZpYmVyIHdpdGggYW4gdXBkYXRlIGVmZmVjdC4gVGhpcyB0dXJucyBhIFBsYWNlbWVudCBpbnRvXG4gIC8vIGEgUGxhY2VtZW50QW5kVXBkYXRlLlxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcykge1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWY7XG59XG5cbnZhciBhcHBlbmRBbGxDaGlsZHJlbjtcbnZhciB1cGRhdGVIb3N0Q29udGFpbmVyO1xudmFyIHVwZGF0ZUhvc3RDb21wb25lbnQkMTtcbnZhciB1cGRhdGVIb3N0VGV4dCQxO1xuXG57XG4gIC8vIE11dGF0aW9uIG1vZGVcbiAgYXBwZW5kQWxsQ2hpbGRyZW4gPSBmdW5jdGlvbiAocGFyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmVlZHNWaXNpYmlsaXR5VG9nZ2xlLCBpc0hpZGRlbikge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGNyZWF0ZWQgYnV0IHdlIG5lZWQgcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZUhvc3RDb250YWluZXIgPSBmdW5jdGlvbiAod29ya0luUHJvZ3Jlc3MpIHsvLyBOb29wXG4gIH07XG5cbiAgdXBkYXRlSG9zdENvbXBvbmVudCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhbiBhbHRlcm5hdGUsIHRoYXQgbWVhbnMgdGhpcyBpcyBhbiB1cGRhdGUgYW5kIHdlIG5lZWQgdG9cbiAgICAvLyBzY2hlZHVsZSBhIHNpZGUtZWZmZWN0IHRvIGRvIHRoZSB1cGRhdGVzLlxuICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcblxuICAgIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIC8vIEluIG11dGF0aW9uIG1vZGUsIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgYSBiYWlsb3V0IGJlY2F1c2VcbiAgICAgIC8vIHdlIHdvbid0IHRvdWNoIHRoaXMgbm9kZSBldmVuIGlmIGNoaWxkcmVuIGNoYW5nZWQuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBnZXQgdXBkYXRlZCBiZWNhdXNlIG9uZSBvZiBvdXIgY2hpbGRyZW4gdXBkYXRlZCwgd2UgZG9uJ3RcbiAgICAvLyBoYXZlIG5ld1Byb3BzIHNvIHdlJ2xsIGhhdmUgdG8gcmV1c2UgdGhlbS5cbiAgICAvLyBUT0RPOiBTcGxpdCB0aGUgdXBkYXRlIEFQSSBhcyBzZXBhcmF0ZSBmb3IgdGhlIHByb3BzIHZzLiBjaGlsZHJlbi5cbiAgICAvLyBFdmVuIGJldHRlciB3b3VsZCBiZSBpZiBjaGlsZHJlbiB3ZXJlbid0IHNwZWNpYWwgY2FzZWQgYXQgYWxsIHRoby5cblxuXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBFeHBlcmllbmNpbmcgYW4gZXJyb3Igd2hlcmUgb2xkUHJvcHMgaXMgbnVsbC4gU3VnZ2VzdHMgYSBob3N0XG4gICAgLy8gY29tcG9uZW50IGlzIGhpdHRpbmcgdGhlIHJlc3VtZSBwYXRoLiBGaWd1cmUgb3V0IHdoeS4gUG9zc2libHlcbiAgICAvLyByZWxhdGVkIHRvIGBoaWRkZW5gLlxuXG4gICAgdmFyIHVwZGF0ZVBheWxvYWQgPSBwcmVwYXJlVXBkYXRlKGluc3RhbmNlLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0KTsgLy8gVE9ETzogVHlwZSB0aGlzIHNwZWNpZmljIHRvIHRoaXMgdHlwZSBvZiBjb21wb25lbnQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHVwZGF0ZVBheWxvYWQ7IC8vIElmIHRoZSB1cGRhdGUgcGF5bG9hZCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIGNoYW5nZSBvciBpZiB0aGVyZVxuICAgIC8vIGlzIGEgbmV3IHJlZiB3ZSBtYXJrIHRoaXMgYXMgYW4gdXBkYXRlLiBBbGwgdGhlIHdvcmsgaXMgZG9uZSBpbiBjb21taXRXb3JrLlxuXG4gICAgaWYgKHVwZGF0ZVBheWxvYWQpIHtcbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVIb3N0VGV4dCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gICAgLy8gSWYgdGhlIHRleHQgZGlmZmVycywgbWFyayBpdCBhcyBhbiB1cGRhdGUuIEFsbCB0aGUgd29yayBpbiBkb25lIGluIGNvbW1pdFdvcmsuXG4gICAgaWYgKG9sZFRleHQgIT09IG5ld1RleHQpIHtcbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2spIHtcbiAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAvLyBJZiB3ZSdyZSBoeWRyYXRpbmcsIHdlIHNob3VsZCBjb25zdW1lIGFzIG1hbnkgaXRlbXMgYXMgd2UgY2FuXG4gICAgLy8gc28gd2UgZG9uJ3QgbGVhdmUgYW55IGJlaGluZC5cbiAgICByZXR1cm47XG4gIH1cblxuICBzd2l0Y2ggKHJlbmRlclN0YXRlLnRhaWxNb2RlKSB7XG4gICAgY2FzZSAnaGlkZGVuJzpcbiAgICAgIHtcbiAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgLy8gc2hvdWxkIGJlIGludmlzaWJsZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgbW91bnRlZCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGVtIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgY29sbGFwc2luZy5cbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgIC8vIHRoZXJlIGFyZSBhbnkuXG4gICAgICAgIHZhciB0YWlsTm9kZSA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgIHZhciBsYXN0VGFpbE5vZGUgPSBudWxsO1xuXG4gICAgICAgIHdoaWxlICh0YWlsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0YWlsTm9kZS5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxhc3RUYWlsTm9kZSA9IHRhaWxOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhaWxOb2RlID0gdGFpbE5vZGUuc2libGluZztcbiAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIHNpbXBseSBnb2luZyB0byBkZWxldGUgYWxsIGluc2VydGlvbnMgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIGxhc3QgcmVuZGVyZWQgaXRlbS5cblxuXG4gICAgICAgIGlmIChsYXN0VGFpbE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBBbGwgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSB0YWlsIGFyZSBpbnNlcnRpb25zLlxuICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERldGFjaCB0aGUgaW5zZXJ0aW9uIGFmdGVyIHRoZSBsYXN0IG5vZGUgdGhhdCB3YXMgYWxyZWFkeVxuICAgICAgICAgIC8vIGluc2VydGVkLlxuICAgICAgICAgIGxhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnY29sbGFwc2VkJzpcbiAgICAgIHtcbiAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgLy8gc2hvdWxkIGJlIGludmlzaWJsZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgbW91bnRlZCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGVtIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgY29sbGFwc2luZy5cbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgIC8vIHRoZXJlIGFyZSBhbnkuXG4gICAgICAgIHZhciBfdGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICB2YXIgX2xhc3RUYWlsTm9kZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKF90YWlsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChfdGFpbE5vZGUuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBfbGFzdFRhaWxOb2RlID0gX3RhaWxOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90YWlsTm9kZSA9IF90YWlsTm9kZS5zaWJsaW5nO1xuICAgICAgICB9IC8vIE5leHQgd2UncmUgc2ltcGx5IGdvaW5nIHRvIGRlbGV0ZSBhbGwgaW5zZXJ0aW9ucyBhZnRlciB0aGVcbiAgICAgICAgLy8gbGFzdCByZW5kZXJlZCBpdGVtLlxuXG5cbiAgICAgICAgaWYgKF9sYXN0VGFpbE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBBbGwgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSB0YWlsIGFyZSBpbnNlcnRpb25zLlxuICAgICAgICAgIGlmICghaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrICYmIHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdlIHN1c3BlbmRlZCBkdXJpbmcgdGhlIGhlYWQuIFdlIHdhbnQgdG8gc2hvdyBhdCBsZWFzdCBvbmVcbiAgICAgICAgICAgIC8vIHJvdyBhdCB0aGUgdGFpbC4gU28gd2UnbGwga2VlcCBvbiBhbmQgY3V0IG9mZiB0aGUgcmVzdC5cbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEZXRhY2ggdGhlIGluc2VydGlvbiBhZnRlciB0aGUgbGFzdCBub2RlIHRoYXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBpbnNlcnRlZC5cbiAgICAgICAgICBfbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIEZyYWdtZW50OlxuICAgIGNhc2UgTW9kZTpcbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuICAgICAgICB2YXIgZmliZXJSb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChmaWJlclJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICAgICAgICBmaWJlclJvb3QuY29udGV4dCA9IGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dDtcbiAgICAgICAgICBmaWJlclJvb3QucGVuZGluZ0NvbnRleHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC5jaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIElmIHdlIGh5ZHJhdGVkLCBwb3Agc28gdGhhdCB3ZSBjYW4gZGVsZXRlIGFueSByZW1haW5pbmcgY2hpbGRyZW5cbiAgICAgICAgICAvLyB0aGF0IHdlcmVuJ3QgaHlkcmF0ZWQuXG4gICAgICAgICAgdmFyIHdhc0h5ZHJhdGVkID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKHdhc0h5ZHJhdGVkKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoeWRyYXRlZCwgdGhlbiB3ZSdsbCBuZWVkIHRvIHNjaGVkdWxlIGFuIHVwZGF0ZSBmb3JcbiAgICAgICAgICAgIC8vIHRoZSBjb21taXQgc2lkZS1lZmZlY3RzIG9uIHRoZSByb290LlxuICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfSBlbHNlIGlmICghZmliZXJSb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIGFuIGVmZmVjdCB0byBjbGVhciB0aGlzIGNvbnRhaW5lciBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY29tbWl0LlxuICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIG9mIFJlYWN0IHJlbmRlcmluZyBpbnRvIGEgY29udGFpbmVyIHdpdGggcHJldmlvdXMgY2hpbGRyZW4uXG4gICAgICAgICAgICAvLyBJdCdzIGFsc28gc2FmZSB0byBkbyBmb3IgdXBkYXRlcyB0b28sIGJlY2F1c2UgY3VycmVudC5jaGlsZCB3b3VsZCBvbmx5IGJlIG51bGxcbiAgICAgICAgICAgIC8vIGlmIHRoZSBwcmV2aW91cyByZW5kZXIgd2FzIG51bGwgKHNvIHRoZSB0aGUgY29udGFpbmVyIHdvdWxkIGFscmVhZHkgYmUgZW1wdHkpLlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciByb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgICAgICB1cGRhdGVIb3N0Q29tcG9uZW50JDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnQucmVmICE9PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgICAgICAgIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghbmV3UHJvcHMpIHtcbiAgICAgICAgICAgIGlmICghKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBNb3ZlIGNyZWF0ZUluc3RhbmNlIHRvIGJlZ2luV29yayBhbmQga2VlcCBpdCBvbiBhIGNvbnRleHRcbiAgICAgICAgICAvLyBcInN0YWNrXCIgYXMgdGhlIHBhcmVudC4gVGhlbiBhcHBlbmQgY2hpbGRyZW4gYXMgd2UgZ28gaW4gYmVnaW5Xb3JrXG4gICAgICAgICAgLy8gb3IgY29tcGxldGVXb3JrIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIHdhbnQgdG8gYWRkIHRoZW0gdG9wLT5kb3duIG9yXG4gICAgICAgICAgLy8gYm90dG9tLT51cC4gVG9wLT5kb3duIGlzIGZhc3RlciBpbiBJRTExLlxuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZCA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBhbmQgY3JlYXRlSW5zdGFuY2Ugc3RlcCBpbnRvIHRoZSBiZWdpblBoYXNlXG4gICAgICAgICAgICAvLyB0byBjb25zb2xpZGF0ZS5cbiAgICAgICAgICAgIGlmIChwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgY2hhbmdlcyB0byB0aGUgaHlkcmF0ZWQgbm9kZSBuZWVkIHRvIGJlIGFwcGxpZWQgYXQgdGhlXG4gICAgICAgICAgICAgIC8vIGNvbW1pdC1waGFzZSB3ZSBtYXJrIHRoaXMgYXMgc3VjaC5cbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZUluc3RhbmNlKHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW4oaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIENlcnRhaW4gcmVuZGVyZXJzIHJlcXVpcmUgY29tbWl0LXRpbWUgZWZmZWN0cyBmb3IgaW5pdGlhbCBtb3VudC5cbiAgICAgICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgc3VwcG9ydHMgYXV0by1mb2N1cyBmb3IgY2VydGFpbiBlbGVtZW50cykuXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgc3VjaCByZW5kZXJlcnMgZ2V0IHNjaGVkdWxlZCBmb3IgbGF0ZXIgd29yay5cblxuICAgICAgICAgICAgaWYgKGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKGluc3RhbmNlLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJlZiBvbiBhIGhvc3Qgbm9kZSB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2tcbiAgICAgICAgICAgIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICB2YXIgbmV3VGV4dCA9IG5ld1Byb3BzO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7IC8vIElmIHdlIGhhdmUgYW4gYWx0ZXJuYXRlLCB0aGF0IG1lYW5zIHRoaXMgaXMgYW4gdXBkYXRlIGFuZCB3ZSBuZWVkXG4gICAgICAgICAgLy8gdG8gc2NoZWR1bGUgYSBzaWRlLWVmZmVjdCB0byBkbyB0aGUgdXBkYXRlcy5cblxuICAgICAgICAgIHVwZGF0ZUhvc3RUZXh0JDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV3VGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICghKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9yb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuXG4gICAgICAgICAgdmFyIF9jdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZDIgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAoX3dhc0h5ZHJhdGVkMikge1xuICAgICAgICAgICAgaWYgKHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3JlYXRlVGV4dEluc3RhbmNlKG5ld1RleHQsIF9yb290Q29udGFpbmVySW5zdGFuY2UsIF9jdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgIC8vIFNvbWV0aGluZyBzdXNwZW5kZWQuIFJlLXJlbmRlciB3aXRoIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzOyAvLyBEbyBub3QgcmVzZXQgdGhlIGVmZmVjdCBsaXN0LlxuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV4dERpZFRpbWVvdXQgPSBuZXh0U3RhdGUgIT09IG51bGw7XG4gICAgICAgIHZhciBwcmV2RGlkVGltZW91dCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHByZXZEaWRUaW1lb3V0ID0gcHJldlN0YXRlICE9PSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0ICYmICFwcmV2RGlkVGltZW91dCkge1xuICAgICAgICAgIC8vIElmIHRoaXMgc3VidHJlZWUgaXMgcnVubmluZyBpbiBibG9ja2luZyBtb2RlIHdlIGNhbiBzdXNwZW5kLFxuICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSB3b24ndCBzdXNwZW5kLlxuICAgICAgICAgIC8vIFRPRE86IFRoaXMgd2lsbCBzdGlsbCBzdXNwZW5kIGEgc3luY2hyb25vdXMgdHJlZSBpZiBhbnl0aGluZ1xuICAgICAgICAgIC8vIGluIHRoZSBjb25jdXJyZW50IHRyZWUgYWxyZWFkeSBzdXNwZW5kZWQgZHVyaW5nIHRoaXMgcmVuZGVyLlxuICAgICAgICAgIC8vIFRoaXMgaXMgYSBrbm93biBidWcuXG4gICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgYmFjayB0byB0aHJvd0V4Y2VwdGlvbiBiZWNhdXNlIHRoaXMgaXMgdG9vIGxhdGVcbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBsYXJnZSB0cmVlIHdoaWNoIGlzIGNvbW1vbiBmb3IgaW5pdGlhbCBsb2Fkcy4gV2VcbiAgICAgICAgICAgIC8vIGRvbid0IGtub3cgaWYgd2Ugc2hvdWxkIHJlc3RhcnQgYSByZW5kZXIgb3Igbm90IHVudGlsIHdlIGdldFxuICAgICAgICAgICAgLy8gdGhpcyBtYXJrZXIsIGFuZCB0aGlzIGlzIHRvbyBsYXRlLlxuICAgICAgICAgICAgLy8gSWYgdGhpcyByZW5kZXIgYWxyZWFkeSBoYWQgYSBwaW5nIG9yIGxvd2VyIHByaSB1cGRhdGVzLFxuICAgICAgICAgICAgLy8gYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2Uga25vdyB3ZSdyZSBnb2luZyB0byBzdXNwZW5kIHdlXG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgYWJsZSB0byBpbW1lZGlhdGVseSByZXN0YXJ0IGZyb20gd2l0aGluIHRocm93RXhjZXB0aW9uLlxuICAgICAgICAgICAgdmFyIGhhc0ludmlzaWJsZUNoaWxkQ29udGV4dCA9IGN1cnJlbnQgPT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGhhc0ludmlzaWJsZUNoaWxkQ29udGV4dCB8fCBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGluIGFuIGludmlzaWJsZSB0cmVlIG9yIGEgbmV3IHJlbmRlciwgdGhlbiBzaG93aW5nXG4gICAgICAgICAgICAgIC8vIHRoaXMgYm91bmRhcnkgaXMgb2suXG4gICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UncmUgZ29pbmcgdG8gaGF2ZSB0byBoaWRlIGNvbnRlbnQgc28gd2Ugc2hvdWxkXG4gICAgICAgICAgICAgIC8vIHN1c3BlbmQgZm9yIGxvbmdlciBpZiBwb3NzaWJsZS5cbiAgICAgICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUT0RPOiBPbmx5IHNjaGVkdWxlIHVwZGF0ZXMgaWYgdGhlc2UgdmFsdWVzIGFyZSBub24gZXF1YWwsIGkuZS4gaXQgY2hhbmdlZC5cbiAgICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQgfHwgcHJldkRpZFRpbWVvdXQpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgYm91bmRhcnkganVzdCB0aW1lZCBvdXQsIHNjaGVkdWxlIGFuIGVmZmVjdCB0byBhdHRhY2ggYVxuICAgICAgICAgICAgLy8gcmV0cnkgbGlzdGVuZXIgdG8gdGhlIHByb21pc2UuIFRoaXMgZmxhZyBpcyBhbHNvIHVzZWQgdG8gaGlkZSB0aGVcbiAgICAgICAgICAgIC8vIHByaW1hcnkgY2hpbGRyZW4uIEluIG11dGF0aW9uIG1vZGUsIHdlIGFsc28gbmVlZCB0aGUgZmxhZyB0b1xuICAgICAgICAgICAgLy8gKnVuaGlkZSogY2hpbGRyZW4gdGhhdCB3ZXJlIHByZXZpb3VzbHkgaGlkZGVuLCBzbyBjaGVjayBpZiB0aGlzXG4gICAgICAgICAgICAvLyBpcyBjdXJyZW50bHkgdGltZWQgb3V0LCB0b28uXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHVwZGF0ZUhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICBwcmVwYXJlUG9ydGFsTW91bnQod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgLy8gUG9wIHByb3ZpZGVyIGZpYmVyXG4gICAgICBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBTYW1lIGFzIGNsYXNzIGNvbXBvbmVudCBjYXNlLiBJIHB1dCBpdCBkb3duIGhlcmUgc28gdGhhdCB0aGUgdGFncyBhcmVcbiAgICAgICAgLy8gc2VxdWVudGlhbCB0byBlbnN1cmUgdGhpcyBzd2l0Y2ggaXMgY29tcGlsZWQgdG8gYSBqdW1wIHRhYmxlLlxuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKF9Db21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgaW4gdGhlIGRlZmF1bHQsIFwiaW5kZXBlbmRlbnRcIiBtb2RlLlxuICAgICAgICAgIC8vIFdlIGRvbid0IGRvIGFueXRoaW5nIGluIHRoaXMgbW9kZS5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaWRTdXNwZW5kQWxyZWFkeSA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuICAgICAgICB2YXIgcmVuZGVyZWRUYWlsID0gcmVuZGVyU3RhdGUucmVuZGVyaW5nO1xuXG4gICAgICAgIGlmIChyZW5kZXJlZFRhaWwgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBqdXN0IHJlbmRlcmVkIHRoZSBoZWFkLlxuICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnl0aGluZyBpcyBzdGlsbFxuICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGluIHRoZSByZW5kZXJlZCBzZXQuXG4gICAgICAgICAgICAvLyBJZiBuZXcgY29udGVudCB1bnN1c3BlbmRlZCwgYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSBjb250ZW50IHRoYXRcbiAgICAgICAgICAgIC8vIGRpZG4ndC4gVGhlbiB3ZSBuZWVkIHRvIGRvIGEgc2Vjb25kIHBhc3MgdGhhdCBmb3JjZXMgZXZlcnl0aGluZ1xuICAgICAgICAgICAgLy8gdG8ga2VlcCBzaG93aW5nIHRoZWlyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGJlIHN1c3BlbmRlZCBpZiBzb21ldGhpbmcgaW4gdGhpcyByZW5kZXIgcGFzcyBzdXNwZW5kZWQsIG9yXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgaW4gdGhlIHByZXZpb3VzIGNvbW1pdHRlZCBwYXNzIHN1c3BlbmRlZC4gT3RoZXJ3aXNlLFxuICAgICAgICAgICAgLy8gdGhlcmUncyBubyBjaGFuY2Ugc28gd2UgY2FuIHNraXAgdGhlIGV4cGVuc2l2ZSBjYWxsIHRvXG4gICAgICAgICAgICAvLyBmaW5kRmlyc3RTdXNwZW5kZWQuXG4gICAgICAgICAgICB2YXIgY2Fubm90QmVTdXNwZW5kZWQgPSByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSAmJiAoY3VycmVudCA9PT0gbnVsbCB8fCAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzKTtcblxuICAgICAgICAgICAgaWYgKCFjYW5ub3RCZVN1c3BlbmRlZCkge1xuICAgICAgICAgICAgICB2YXIgcm93ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBzdXNwZW5kZWQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocm93KTtcblxuICAgICAgICAgICAgICAgIGlmIChzdXNwZW5kZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gSWYgdGhpcyBpcyBhIG5ld2x5IHN1c3BlbmRlZCB0cmVlLCBpdCBtaWdodCBub3QgZ2V0IGNvbW1pdHRlZCBhc1xuICAgICAgICAgICAgICAgICAgLy8gcGFydCBvZiB0aGUgc2Vjb25kIHBhc3MuIEluIHRoYXQgY2FzZSBub3RoaW5nIHdpbGwgc3Vic2NyaWJlIHRvXG4gICAgICAgICAgICAgICAgICAvLyBpdHMgdGhlbm5hYmxlcy4gSW5zdGVhZCwgd2UnbGwgdHJhbnNmZXIgaXRzIHRoZW5uYWJsZXMgdG8gdGhlXG4gICAgICAgICAgICAgICAgICAvLyBTdXNwZW5zZUxpc3Qgc28gdGhhdCBpdCBjYW4gcmV0cnkgaWYgdGhleSByZXNvbHZlLlxuICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUgb2YgdGhlc2UgaW4gdGhlIGxpc3QgYnV0IHNpbmNlIHdlJ3JlXG4gICAgICAgICAgICAgICAgICAvLyBnb2luZyB0byB3YWl0IGZvciBhbGwgb2YgdGhlbSBhbnl3YXksIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlclxuICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggb25lcyBnZXRzIHRvIHBpbmcuIEluIHRoZW9yeSB3ZSBjb3VsZCBnZXQgY2xldmVyIGFuZCBrZWVwXG4gICAgICAgICAgICAgICAgICAvLyB0cmFjayBvZiBob3cgbWFueSBkZXBlbmRlbmNpZXMgcmVtYWluIGJ1dCBpdCBnZXRzIHRyaWNreSBiZWNhdXNlXG4gICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgbWVhbnRpbWUsIHdlIGNhbiBhZGQvcmVtb3ZlL2NoYW5nZSBpdGVtcyBhbmQgZGVwZW5kZW5jaWVzLlxuICAgICAgICAgICAgICAgICAgLy8gV2UgbWlnaHQgYmFpbCBvdXQgb2YgdGhlIGxvb3AgYmVmb3JlIGZpbmRpbmcgYW55IGJ1dCB0aGF0XG4gICAgICAgICAgICAgICAgICAvLyBkb2Vzbid0IG1hdHRlciBzaW5jZSB0aGF0IG1lYW5zIHRoYXQgdGhlIG90aGVyIGJvdW5kYXJpZXMgdGhhdFxuICAgICAgICAgICAgICAgICAgLy8gd2UgZGlkIGZpbmQgYWxyZWFkeSBoYXMgdGhlaXIgbGlzdGVuZXJzIGF0dGFjaGVkLlxuXG4gICAgICAgICAgICAgICAgICB2YXIgbmV3VGhlbm5hYmxlcyA9IHN1c3BlbmRlZC51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgaWYgKG5ld1RoZW5uYWJsZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBuZXdUaGVubmFibGVzO1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICAgICAgICB9IC8vIFJlcmVuZGVyIHRoZSB3aG9sZSBsaXN0LCBidXQgdGhpcyB0aW1lLCB3ZSdsbCBmb3JjZSBmYWxsYmFja3NcbiAgICAgICAgICAgICAgICAgIC8vIHRvIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGxpc3QgYmVmb3JlIGRvaW5nIHRoZSBzZWNvbmQgcGFzcyBzaW5jZSB0aGF0J3Mgbm93IGludmFsaWQuXG5cblxuICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcmVuZGVyU3RhdGUubGFzdEVmZmVjdDsgLy8gUmVzZXQgdGhlIGNoaWxkIGZpYmVycyB0byB0aGVpciBvcmlnaW5hbCBzdGF0ZS5cblxuICAgICAgICAgICAgICAgICAgcmVzZXRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpOyAvLyBTZXQgdXAgdGhlIFN1c3BlbnNlIENvbnRleHQgdG8gZm9yY2Ugc3VzcGVuc2UgYW5kIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICAgICAgICAvLyByZXJlbmRlciB0aGUgY2hpbGRyZW4uXG5cbiAgICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByb3cgPSByb3cuc2libGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCAmJiBub3coKSA+IGdldFJlbmRlclRhcmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAvLyBXZSBoYXZlIGFscmVhZHkgcGFzc2VkIG91ciBDUFUgZGVhZGxpbmUgYnV0IHdlIHN0aWxsIGhhdmUgcm93c1xuICAgICAgICAgICAgICAvLyBsZWZ0IGluIHRoZSB0YWlsLiBXZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlciBhdHRlbXB0cyB0byByZW5kZXJcbiAgICAgICAgICAgICAgLy8gdGhlIG1haW4gY29udGVudCBhbmQgb25seSByZW5kZXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpc1xuICAgICAgICAgICAgICAvLyB0byBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXNcbiAgICAgICAgICAgICAgLy8gb2YgcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXNcbiAgICAgICAgICAgICAgLy8gY29tbWl0dGVkLiBJZiBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmVcbiAgICAgICAgICAgICAgLy8gcGFpbnRlZC4gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLlxuICAgICAgICAgICAgICAvLyBXZSBjYW4gdXNlIGFueSBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZ1xuICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSdyZSBsZWF2aW5nIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7XG4gICAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIGdvaW5nIHRvIHJlbmRlciB0aGUgdGFpbC5cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFwcGVuZCB0aGUgcmVuZGVyZWQgcm93IHRvIHRoZSBjaGlsZCBsaXN0LlxuICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIHZhciBfc3VzcGVuZGVkID0gZmluZEZpcnN0U3VzcGVuZGVkKHJlbmRlcmVkVGFpbCk7XG5cbiAgICAgICAgICAgIGlmIChfc3VzcGVuZGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTsgLy8gRW5zdXJlIHdlIHRyYW5zZmVyIHRoZSB1cGRhdGUgcXVldWUgdG8gdGhlIHBhcmVudCBzbyB0aGF0IGl0IGRvZXNuJ3RcbiAgICAgICAgICAgICAgLy8gZ2V0IGxvc3QgaWYgdGhpcyByb3cgZW5kcyB1cCBkcm9wcGVkIGR1cmluZyBhIHNlY29uZCBwYXNzLlxuXG4gICAgICAgICAgICAgIHZhciBfbmV3VGhlbm5hYmxlcyA9IF9zdXNwZW5kZWQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgaWYgKF9uZXdUaGVubmFibGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBfbmV3VGhlbm5hYmxlcztcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIHRydWUpOyAvLyBUaGlzIG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZC5cblxuICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCA9PT0gbnVsbCAmJiByZW5kZXJTdGF0ZS50YWlsTW9kZSA9PT0gJ2hpZGRlbicgJiYgIXJlbmRlcmVkVGFpbC5hbHRlcm5hdGUgJiYgIWdldElzSHlkcmF0aW5nKCkgLy8gV2UgZG9uJ3QgY3V0IGl0IGlmIHdlJ3JlIGh5ZHJhdGluZy5cbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRlbGV0ZSB0aGUgcm93IHdlIGp1c3QgcmVuZGVyZWQuXG4gICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGxpc3QgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHdlIHJlbmRlcmVkIHRoaXNcbiAgICAgICAgICAgICAgICAgIC8vIGNoaWxkLiBUaGUgbmVzdGVkIGNoaWxkcmVuIGhhdmUgYWxyZWFkeSBhcHBlbmRlZCB0aGVtc2VsdmVzLlxuICAgICAgICAgICAgICAgICAgdmFyIGxhc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcmVuZGVyU3RhdGUubGFzdEVmZmVjdDsgLy8gUmVtb3ZlIGFueSBlZmZlY3RzIHRoYXQgd2VyZSBhcHBlbmRlZCBhZnRlciB0aGlzIHBvaW50LlxuXG4gICAgICAgICAgICAgICAgICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfSAvLyBXZSdyZSBkb25lLlxuXG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIC8vIFRoZSB0aW1lIGl0IHRvb2sgdG8gcmVuZGVyIGxhc3Qgcm93IGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVtYWluaW5nXG4gICAgICAgICAgICAvLyB0aW1lIHdlIGhhdmUgdG8gcmVuZGVyLiBTbyByZW5kZXJpbmcgb25lIG1vcmUgcm93IHdvdWxkIGxpa2VseVxuICAgICAgICAgICAgLy8gZXhjZWVkIGl0LlxuICAgICAgICAgICAgbm93KCkgKiAyIC0gcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID4gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpICYmIHJlbmRlckxhbmVzICE9PSBPZmZzY3JlZW5MYW5lKSB7XG4gICAgICAgICAgICAgIC8vIFdlIGhhdmUgbm93IHBhc3NlZCBvdXIgQ1BVIGRlYWRsaW5lIGFuZCB3ZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlclxuICAgICAgICAgICAgICAvLyBhdHRlbXB0cyB0byByZW5kZXIgdGhlIG1haW4gY29udGVudCBhbmQgb25seSByZW5kZXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgICAvLyBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgaXMgdXN1YWxseSBmYXN0ZXIuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzXG4gICAgICAgICAgICAgIC8vIHRvIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtc1xuICAgICAgICAgICAgICAvLyBvZiBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsXG4gICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhc1xuICAgICAgICAgICAgICAvLyBjb21taXR0ZWQuIElmIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZVxuICAgICAgICAgICAgICAvLyBwYWludGVkLiBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuXG4gICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW55IFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nXG4gICAgICAgICAgICAgIC8vIHNpbmNlIHdlJ3JlIGxlYXZpbmcgaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcmtTcGF3bmVkV29yayhTb21lUmV0cnlMYW5lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS5pc0JhY2t3YXJkcykge1xuICAgICAgICAgICAgLy8gVGhlIGVmZmVjdCBsaXN0IG9mIHRoZSBiYWNrd2FyZHMgdGFpbCB3aWxsIGhhdmUgYmVlbiBhZGRlZFxuICAgICAgICAgICAgLy8gdG8gdGhlIGVuZC4gVGhpcyBicmVha3MgdGhlIGd1YXJhbnRlZSB0aGF0IGxpZmUtY3ljbGVzIGZpcmUgaW5cbiAgICAgICAgICAgIC8vIHNpYmxpbmcgb3JkZXIgYnV0IHRoYXQgaXNuJ3QgYSBzdHJvbmcgZ3VhcmFudGVlIHByb21pc2VkIGJ5IFJlYWN0LlxuICAgICAgICAgICAgLy8gRXNwZWNpYWxseSBzaW5jZSB0aGVzZSBtaWdodCBhbHNvIGp1c3QgcG9wIGluIGR1cmluZyBmdXR1cmUgY29tbWl0cy5cbiAgICAgICAgICAgIC8vIEFwcGVuZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0LlxuICAgICAgICAgICAgcmVuZGVyZWRUYWlsLnNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJldmlvdXNTaWJsaW5nID0gcmVuZGVyU3RhdGUubGFzdDtcblxuICAgICAgICAgICAgaWYgKHByZXZpb3VzU2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBwcmV2aW91c1NpYmxpbmcuc2libGluZyA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0ID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSB0YWlsIHJvd3MgdG8gcmVuZGVyLlxuICAgICAgICAgIC8vIFBvcCBhIHJvdy5cbiAgICAgICAgICB2YXIgbmV4dCA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbmV4dDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbmV4dC5zaWJsaW5nO1xuICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0O1xuICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IG5vdygpO1xuICAgICAgICAgIG5leHQuc2libGluZyA9IG51bGw7IC8vIFJlc3RvcmUgdGhlIGNvbnRleHQuXG4gICAgICAgICAgLy8gVE9ETzogV2UgY2FuIHByb2JhYmx5IGp1c3QgYXZvaWQgcG9wcGluZyBpdCBpbnN0ZWFkIGFuZCBvbmx5XG4gICAgICAgICAgLy8gc2V0dGluZyBpdCB0aGUgZmlyc3QgdGltZSB3ZSBnbyBmcm9tIG5vdCBzdXNwZW5kZWQgdG8gc3VzcGVuZGVkLlxuXG4gICAgICAgICAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcblxuICAgICAgICAgIGlmIChkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gRG8gYSBwYXNzIG92ZXIgdGhlIG5leHQgcm93LlxuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBCbG9jazpcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9uZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBfcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBwcmV2SXNIaWRkZW4gPSBfcHJldlN0YXRlICE9PSBudWxsO1xuICAgICAgICAgIHZhciBuZXh0SXNIaWRkZW4gPSBfbmV4dFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgaWYgKHByZXZJc0hpZGRlbiAhPT0gbmV4dElzSGlkZGVuICYmIG5ld1Byb3BzLm1vZGUgIT09ICd1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZycpIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICsgd29ya0luUHJvZ3Jlc3MudGFnICsgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVud2luZFdvcmsod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IGZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgdmFyIF9mbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmICghKChfZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncykpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGUgcm9vdCBmYWlsZWQgdG8gdW5tb3VudCBhZnRlciBhbiBlcnJvci4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBfZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG4gICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogcG9wSHlkcmF0aW9uU3RhdGVcbiAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgdmFyIF9mbGFnczIgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoX2ZsYWdzMiAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IF9mbGFnczIgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7IC8vIENhcHR1cmVkIGEgc3VzcGVuc2UgZWZmZWN0LiBSZS1yZW5kZXIgdGhlIGJvdW5kYXJ5LlxuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpOyAvLyBTdXNwZW5zZUxpc3QgZG9lc24ndCBhY3R1YWxseSBjYXRjaCBhbnl0aGluZy4gSXQgc2hvdWxkJ3ZlIGJlZW5cbiAgICAgICAgLy8gY2F1Z2h0IGJ5IGEgbmVzdGVkIGJvdW5kYXJ5LiBJZiBub3QsIGl0IHNob3VsZCBidWJibGUgdGhyb3VnaC5cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICBwb3BSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrKSB7XG4gIHN3aXRjaCAoaW50ZXJydXB0ZWRXb3JrLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IGludGVycnVwdGVkV29yay50eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuXG4gICAgICAgIGlmIChjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcG9wQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcG9wUHJvdmlkZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICBwb3BSZW5kZXJMYW5lcyhpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgc291cmNlKSB7XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBhbiBlcnJvciwgY2FsbCB0aGlzIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGlzIHRocm93blxuICAvLyBzbyB0aGUgc3RhY2sgaXMgYWNjdXJhdGUuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN0YWNrOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKVxuICB9O1xufVxuXG4vLyBUaGlzIG1vZHVsZSBpcyBmb3JrZWQgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy5cbi8vIEJ5IGRlZmF1bHQsIHJldHVybiBgdHJ1ZWAgdG8gbG9nIGVycm9ycyB0byB0aGUgY29uc29sZS5cbi8vIEZvcmtzIGNhbiByZXR1cm4gYGZhbHNlYCBpZiB0aGlzIGlzbid0IGRlc2lyYWJsZS5cbmZ1bmN0aW9uIHNob3dFcnJvckRpYWxvZyhib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBsb2dDYXB0dXJlZEVycm9yKGJvdW5kYXJ5LCBlcnJvckluZm8pIHtcbiAgdHJ5IHtcbiAgICB2YXIgbG9nRXJyb3IgPSBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbyk7IC8vIEFsbG93IGluamVjdGVkIHNob3dFcnJvckRpYWxvZygpIHRvIHByZXZlbnQgZGVmYXVsdCBjb25zb2xlLmVycm9yIGxvZ2dpbmcuXG4gICAgLy8gVGhpcyBlbmFibGVzIHJlbmRlcmVycyBsaWtlIFJlYWN0TmF0aXZlIHRvIGJldHRlciBtYW5hZ2UgcmVkYm94IGJlaGF2aW9yLlxuXG4gICAgaWYgKGxvZ0Vycm9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcblxuICAgIGlmICh0cnVlKSB7XG4gICAgICB2YXIgc291cmNlID0gZXJyb3JJbmZvLnNvdXJjZTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHZhciBjb21wb25lbnRTdGFjayA9IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiAnJzsgLy8gQnJvd3NlcnMgc3VwcG9ydCBzaWxlbmNpbmcgdW5jYXVnaHQgZXJyb3JzIGJ5IGNhbGxpbmdcbiAgICAgIC8vIGBwcmV2ZW50RGVmYXVsdCgpYCBpbiB3aW5kb3cgYGVycm9yYCBoYW5kbGVyLlxuICAgICAgLy8gV2UgcmVjb3JkIHRoaXMgaW5mb3JtYXRpb24gYXMgYW4gZXhwYW5kbyBvbiB0aGUgZXJyb3IuXG5cbiAgICAgIGlmIChlcnJvciAhPSBudWxsICYmIGVycm9yLl9zdXBwcmVzc0xvZ2dpbmcpIHtcbiAgICAgICAgaWYgKGJvdW5kYXJ5LnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAvLyBUaGUgZXJyb3IgaXMgcmVjb3ZlcmFibGUgYW5kIHdhcyBzaWxlbmNlZC5cbiAgICAgICAgICAvLyBJZ25vcmUgaXQgYW5kIGRvbid0IHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cbiAgICAgICAgICAvLyBUaGlzIGlzIGhhbmR5IGZvciB0ZXN0aW5nIGVycm9yIGJvdW5kYXJpZXMgd2l0aG91dCBub2lzZS5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gVGhlIGVycm9yIGlzIGZhdGFsLiBTaW5jZSB0aGUgc2lsZW5jaW5nIG1pZ2h0IGhhdmVcbiAgICAgICAgLy8gYmVlbiBhY2NpZGVudGFsLCB3ZSdsbCBzdXJmYWNlIGl0IGFueXdheS5cbiAgICAgICAgLy8gSG93ZXZlciwgdGhlIGJyb3dzZXIgd291bGQgaGF2ZSBzaWxlbmNlZCB0aGUgb3JpZ2luYWwgZXJyb3JcbiAgICAgICAgLy8gc28gd2UnbGwgcHJpbnQgaXQgZmlyc3QsIGFuZCB0aGVuIHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cblxuXG4gICAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oZXJyb3IpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICAgICAgLy8gRm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGlzIGJsb2NrLCBzZWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEzMzg0XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gc291cmNlID8gZ2V0Q29tcG9uZW50TmFtZShzb3VyY2UudHlwZSkgOiBudWxsO1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWVNZXNzYWdlID0gY29tcG9uZW50TmFtZSA/IFwiVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIHRoZSA8XCIgKyBjb21wb25lbnROYW1lICsgXCI+IGNvbXBvbmVudDpcIiA6ICdUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50czonO1xuICAgICAgdmFyIGVycm9yQm91bmRhcnlNZXNzYWdlO1xuICAgICAgdmFyIGVycm9yQm91bmRhcnlOYW1lID0gZ2V0Q29tcG9uZW50TmFtZShib3VuZGFyeS50eXBlKTtcblxuICAgICAgaWYgKGVycm9yQm91bmRhcnlOYW1lKSB7XG4gICAgICAgIGVycm9yQm91bmRhcnlNZXNzYWdlID0gXCJSZWFjdCB3aWxsIHRyeSB0byByZWNyZWF0ZSB0aGlzIGNvbXBvbmVudCB0cmVlIGZyb20gc2NyYXRjaCBcIiArIChcInVzaW5nIHRoZSBlcnJvciBib3VuZGFyeSB5b3UgcHJvdmlkZWQsIFwiICsgZXJyb3JCb3VuZGFyeU5hbWUgKyBcIi5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9ICdDb25zaWRlciBhZGRpbmcgYW4gZXJyb3IgYm91bmRhcnkgdG8geW91ciB0cmVlIHRvIGN1c3RvbWl6ZSBlcnJvciBoYW5kbGluZyBiZWhhdmlvci5cXG4nICsgJ1Zpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9lcnJvci1ib3VuZGFyaWVzIHRvIGxlYXJuIG1vcmUgYWJvdXQgZXJyb3IgYm91bmRhcmllcy4nO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29tYmluZWRNZXNzYWdlID0gY29tcG9uZW50TmFtZU1lc3NhZ2UgKyBcIlxcblwiICsgY29tcG9uZW50U3RhY2sgKyBcIlxcblxcblwiICsgKFwiXCIgKyBlcnJvckJvdW5kYXJ5TWVzc2FnZSk7IC8vIEluIGRldmVsb3BtZW50LCB3ZSBwcm92aWRlIG91ciBvd24gbWVzc2FnZSB3aXRoIGp1c3QgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAgICAgIC8vIFdlIGRvbid0IGluY2x1ZGUgdGhlIG9yaWdpbmFsIGVycm9yIG1lc3NhZ2UgYW5kIEpTIHN0YWNrIGJlY2F1c2UgdGhlIGJyb3dzZXJcbiAgICAgIC8vIGhhcyBhbHJlYWR5IHByaW50ZWQgaXQuIEV2ZW4gaWYgdGhlIGFwcGxpY2F0aW9uIHN3YWxsb3dzIHRoZSBlcnJvciwgaXQgaXMgc3RpbGxcbiAgICAgIC8vIGRpc3BsYXllZCBieSB0aGUgYnJvd3NlciB0aGFua3MgdG8gdGhlIERFVi1vbmx5IGZha2UgZXZlbnQgdHJpY2sgaW4gUmVhY3RFcnJvclV0aWxzLlxuXG4gICAgICBjb25zb2xlWydlcnJvciddKGNvbWJpbmVkTWVzc2FnZSk7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBwcm9kdWN0aW9uLCB3ZSBwcmludCB0aGUgZXJyb3IgZGlyZWN0bHkuXG4gICAgICAvLyBUaGlzIHdpbGwgaW5jbHVkZSB0aGUgbWVzc2FnZSwgdGhlIEpTIHN0YWNrLCBhbmQgYW55dGhpbmcgdGhlIGJyb3dzZXIgd2FudHMgdG8gc2hvdy5cbiAgICAgIC8vIFdlIHBhc3MgdGhlIGVycm9yIG9iamVjdCBpbnN0ZWFkIG9mIGN1c3RvbSBtZXNzYWdlIHNvIHRoYXQgdGhlIGJyb3dzZXIgZGlzcGxheXMgdGhlIGVycm9yIG5hdGl2ZWx5LlxuICAgICAgY29uc29sZVsnZXJyb3InXShlcnJvcik7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRoaXMgbWV0aG9kIG11c3Qgbm90IHRocm93LCBvciBSZWFjdCBpbnRlcm5hbCBzdGF0ZSB3aWxsIGdldCBtZXNzZWQgdXAuXG4gICAgLy8gSWYgY29uc29sZS5lcnJvciBpcyBvdmVycmlkZGVuLCBvciBsb2dDYXB0dXJlZEVycm9yKCkgc2hvd3MgYSBkaWFsb2cgdGhhdCB0aHJvd3MsXG4gICAgLy8gd2Ugd2FudCB0byByZXBvcnQgdGhpcyBlcnJvciBvdXRzaWRlIG9mIHRoZSBub3JtYWwgc3RhY2sgYXMgYSBsYXN0IHJlc29ydC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzMTg4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xuICB9XG59XG5cbnZhciBQb3NzaWJseVdlYWtNYXAkMSA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcblxuZnVuY3Rpb24gY3JlYXRlUm9vdEVycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgbGFuZSk7IC8vIFVubW91bnQgdGhlIHJvb3QgYnkgcmVuZGVyaW5nIG51bGwuXG5cbiAgdXBkYXRlLnRhZyA9IENhcHR1cmVVcGRhdGU7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgIGVsZW1lbnQ6IG51bGxcbiAgfTtcbiAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICBvblVuY2F1Z2h0RXJyb3IoZXJyb3IpO1xuICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIGxhbmUpO1xuICB1cGRhdGUudGFnID0gQ2FwdHVyZVVwZGF0ZTtcbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9IGZpYmVyLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO1xuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGVycm9yJDEgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgICB1cGRhdGUucGF5bG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gICAgICByZXR1cm4gZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yJDEpO1xuICAgIH07XG4gIH1cblxuICB2YXIgaW5zdCA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICBpZiAoaW5zdCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdC5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAge1xuICAgICAgICBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRvIHByZXNlcnZlIHRoZSBwcmVleGlzdGluZyByZXRyeSBiZWhhdmlvciBvZiBlcnJvciBib3VuZGFyaWVzLFxuICAgICAgICAvLyB3ZSBrZWVwIHRyYWNrIG9mIHdoaWNoIG9uZXMgYWxyZWFkeSBmYWlsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAgIC8vIFRoaXMgZ2V0cyByZXNldCBiZWZvcmUgd2UgeWllbGQgYmFjayB0byB0aGUgYnJvd3Nlci5cbiAgICAgICAgLy8gVE9ETzogV2FybiBpbiBzdHJpY3QgbW9kZSBpZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgaXNcbiAgICAgICAgLy8gbm90IGRlZmluZWQuXG4gICAgICAgIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQodGhpcyk7IC8vIE9ubHkgbG9nIGhlcmUgaWYgY29tcG9uZW50RGlkQ2F0Y2ggaXMgdGhlIG9ubHkgZXJyb3IgYm91bmRhcnkgbWV0aG9kIGRlZmluZWRcblxuICAgICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXJyb3IkMSA9IGVycm9ySW5mby52YWx1ZTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHRoaXMuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IkMSwge1xuICAgICAgICBjb21wb25lbnRTdGFjazogc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnXG4gICAgICB9KTtcblxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIElmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkLFxuICAgICAgICAgIC8vIHRoZW4gaXQgbmVlZHMgdG8gY2FsbCBzZXRTdGF0ZSB0byByZWNvdmVyIGZyb20gZXJyb3JzLlxuICAgICAgICAgIC8vIElmIG5vIHN0YXRlIHVwZGF0ZSBpcyBzY2hlZHVsZWQgdGhlbiB0aGUgYm91bmRhcnkgd2lsbCBzd2FsbG93IHRoZSBlcnJvci5cbiAgICAgICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUoZmliZXIubGFuZXMsIFN5bmNMYW5lKSkge1xuICAgICAgICAgICAgZXJyb3IoJyVzOiBFcnJvciBib3VuZGFyaWVzIHNob3VsZCBpbXBsZW1lbnQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkuICcgKyAnSW4gdGhhdCBtZXRob2QsIHJldHVybiBhIHN0YXRlIHVwZGF0ZSB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugb3IgZmFsbGJhY2sgVUkuJywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG5mdW5jdGlvbiBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIGxhbmVzKSB7XG4gIC8vIEF0dGFjaCBhIGxpc3RlbmVyIHRvIHRoZSBwcm9taXNlIHRvIFwicGluZ1wiIHRoZSByb290IGFuZCByZXRyeS4gQnV0IG9ubHkgaWZcbiAgLy8gb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgZm9yIHRoZSBsYW5lcyB3ZSdyZSBjdXJyZW50bHkgcmVuZGVyaW5nICh3aGljaFxuICAvLyBhY3RzIGxpa2UgYSBcInRocmVhZCBJRFwiIGhlcmUpLlxuICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG4gIHZhciB0aHJlYWRJRHM7XG5cbiAgaWYgKHBpbmdDYWNoZSA9PT0gbnVsbCkge1xuICAgIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCQxKCk7XG4gICAgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyZWFkSURzID0gcGluZ0NhY2hlLmdldCh3YWtlYWJsZSk7XG5cbiAgICBpZiAodGhyZWFkSURzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0aHJlYWRJRHMuaGFzKGxhbmVzKSkge1xuICAgIC8vIE1lbW9pemUgdXNpbmcgdGhlIHRocmVhZCBJRCB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG4gICAgdGhyZWFkSURzLmFkZChsYW5lcyk7XG4gICAgdmFyIHBpbmcgPSBwaW5nU3VzcGVuZGVkUm9vdC5iaW5kKG51bGwsIHJvb3QsIHdha2VhYmxlLCBsYW5lcyk7XG4gICAgd2FrZWFibGUudGhlbihwaW5nLCBwaW5nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0V4Y2VwdGlvbihyb290LCByZXR1cm5GaWJlciwgc291cmNlRmliZXIsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLlxuICBzb3VyY2VGaWJlci5mbGFncyB8PSBJbmNvbXBsZXRlOyAvLyBJdHMgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gIHNvdXJjZUZpYmVyLmZpcnN0RWZmZWN0ID0gc291cmNlRmliZXIubGFzdEVmZmVjdCA9IG51bGw7XG5cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIGlzIGEgd2FrZWFibGUuXG4gICAgdmFyIHdha2VhYmxlID0gdmFsdWU7XG5cbiAgICBpZiAoKHNvdXJjZUZpYmVyLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBtZW1vaXplZFN0YXRlIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB3ZSBhdHRlbXB0ZWRcbiAgICAgIC8vIHRvIHJlbmRlciBpdC5cbiAgICAgIHZhciBjdXJyZW50U291cmNlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudFNvdXJjZSkge1xuICAgICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IGN1cnJlbnRTb3VyY2UudXBkYXRlUXVldWU7XG4gICAgICAgIHNvdXJjZUZpYmVyLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50U291cmNlLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gY3VycmVudFNvdXJjZS5sYW5lcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgICAgc291cmNlRmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhhc0ludmlzaWJsZVBhcmVudEJvdW5kYXJ5ID0gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0KTsgLy8gU2NoZWR1bGUgdGhlIG5lYXJlc3QgU3VzcGVuc2UgdG8gcmUtcmVuZGVyIHRoZSB0aW1lZCBvdXQgdmlldy5cblxuICAgIHZhciBfd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICAgIGRvIHtcbiAgICAgIGlmIChfd29ya0luUHJvZ3Jlc3MudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBzaG91bGRDYXB0dXJlU3VzcGVuc2UoX3dvcmtJblByb2dyZXNzLCBoYXNJbnZpc2libGVQYXJlbnRCb3VuZGFyeSkpIHtcbiAgICAgICAgLy8gRm91bmQgdGhlIG5lYXJlc3QgYm91bmRhcnkuXG4gICAgICAgIC8vIFN0YXNoIHRoZSBwcm9taXNlIG9uIHRoZSBib3VuZGFyeSBmaWJlci4gSWYgdGhlIGJvdW5kYXJ5IHRpbWVzIG91dCwgd2UnbGxcbiAgICAgICAgLy8gYXR0YWNoIGFub3RoZXIgbGlzdGVuZXIgdG8gZmxpcCB0aGUgYm91bmRhcnkgYmFjayB0byBpdHMgbm9ybWFsIHN0YXRlLlxuICAgICAgICB2YXIgd2FrZWFibGVzID0gX3dvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh3YWtlYWJsZXMgPT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgdXBkYXRlUXVldWUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgICBfd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YWtlYWJsZXMuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgfSAvLyBJZiB0aGUgYm91bmRhcnkgaXMgb3V0c2lkZSBvZiBibG9ja2luZyBtb2RlLCB3ZSBzaG91bGQgKm5vdCpcbiAgICAgICAgLy8gc3VzcGVuZCB0aGUgY29tbWl0LiBQcmV0ZW5kIGFzIGlmIHRoZSBzdXNwZW5kZWQgY29tcG9uZW50IHJlbmRlcmVkXG4gICAgICAgIC8vIG51bGwgYW5kIGtlZXAgcmVuZGVyaW5nLiBJbiB0aGUgY29tbWl0IHBoYXNlLCB3ZSdsbCBzY2hlZHVsZSBhXG4gICAgICAgIC8vIHN1YnNlcXVlbnQgc3luY2hyb25vdXMgdXBkYXRlIHRvIHJlLXJlbmRlciB0aGUgU3VzcGVuc2UuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIE5vdGU6IEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgdGhlIGNvbXBvbmVudCB0aGF0IHN1c3BlbmRlZCB3YXNcbiAgICAgICAgLy8gaW5zaWRlIGEgYmxvY2tpbmcgbW9kZSB0cmVlLiBJZiB0aGUgU3VzcGVuc2UgaXMgb3V0c2lkZSBvZiBpdCwgd2VcbiAgICAgICAgLy8gc2hvdWxkICpub3QqIHN1c3BlbmQgdGhlIGNvbW1pdC5cblxuXG4gICAgICAgIGlmICgoX3dvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgICBfd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICBzb3VyY2VGaWJlci5mbGFncyB8PSBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlOyAvLyBXZSdyZSBnb2luZyB0byBjb21taXQgdGhpcyBmaWJlciBldmVuIHRob3VnaCBpdCBkaWRuJ3QgY29tcGxldGUuXG4gICAgICAgICAgLy8gQnV0IHdlIHNob3VsZG4ndCBjYWxsIGFueSBsaWZlY3ljbGUgbWV0aG9kcyBvciBjYWxsYmFja3MuIFJlbW92ZVxuICAgICAgICAgIC8vIGFsbCBsaWZlY3ljbGUgZWZmZWN0IHRhZ3MuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5mbGFncyAmPSB+KExpZmVjeWNsZUVmZmVjdE1hc2sgfCBJbmNvbXBsZXRlKTtcblxuICAgICAgICAgIGlmIChzb3VyY2VGaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFNvdXJjZUZpYmVyID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudFNvdXJjZUZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgbW91bnQuIENoYW5nZSB0aGUgdGFnIHNvIGl0J3Mgbm90IG1pc3Rha2VuIGZvciBhXG4gICAgICAgICAgICAgIC8vIGNvbXBsZXRlZCBjbGFzcyBjb21wb25lbnQuIEZvciBleGFtcGxlLCB3ZSBzaG91bGQgbm90IGNhbGxcbiAgICAgICAgICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgaWYgaXQgaXMgZGVsZXRlZC5cbiAgICAgICAgICAgICAgc291cmNlRmliZXIudGFnID0gSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gV2hlbiB3ZSB0cnkgcmVuZGVyaW5nIGFnYWluLCB3ZSBzaG91bGQgbm90IHJldXNlIHRoZSBjdXJyZW50IGZpYmVyLFxuICAgICAgICAgICAgICAvLyBzaW5jZSBpdCdzIGtub3duIHRvIGJlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gVXNlIGEgZm9yY2UgdXBkYXRlIHRvXG4gICAgICAgICAgICAgIC8vIHByZXZlbnQgYSBiYWlsIG91dC5cbiAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgU3luY0xhbmUpO1xuICAgICAgICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG4gICAgICAgICAgICAgIGVucXVldWVVcGRhdGUoc291cmNlRmliZXIsIHVwZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBUaGUgc291cmNlIGZpYmVyIGRpZCBub3QgY29tcGxldGUuIE1hcmsgaXQgd2l0aCBTeW5jIHByaW9yaXR5IHRvXG4gICAgICAgICAgLy8gaW5kaWNhdGUgdGhhdCBpdCBzdGlsbCBoYXMgcGVuZGluZyB3b3JrLlxuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoc291cmNlRmliZXIubGFuZXMsIFN5bmNMYW5lKTsgLy8gRXhpdCB3aXRob3V0IHN1c3BlbmRpbmcuXG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gQ29uZmlybWVkIHRoYXQgdGhlIGJvdW5kYXJ5IGlzIGluIGEgY29uY3VycmVudCBtb2RlIHRyZWUuIENvbnRpbnVlXG4gICAgICAgIC8vIHdpdGggdGhlIG5vcm1hbCBzdXNwZW5kIHBhdGguXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEFmdGVyIHRoaXMgd2UnbGwgdXNlIGEgc2V0IG9mIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpc1xuICAgICAgICAvLyByZW5kZXIgcGFzcyB3aWxsIHJ1biB0byBjb21wbGV0aW9uIG9yIHJlc3RhcnQgb3IgXCJzdXNwZW5kXCIgdGhlIGNvbW1pdC5cbiAgICAgICAgLy8gVGhlIGFjdHVhbCBsb2dpYyBmb3IgdGhpcyBpcyBzcHJlYWQgb3V0IGluIGRpZmZlcmVudCBwbGFjZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoaXMgZmlyc3QgcHJpbmNpcGxlIGlzIHRoYXQgaWYgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCB3aGVuIHdlIGNvbXBsZXRlXG4gICAgICAgIC8vIGEgcm9vdCwgdGhlbiB3ZSBzaG91bGQgYWxzbyByZXN0YXJ0IGlmIHdlIGdldCBhbiB1cGRhdGUgb3IgcGluZyB0aGF0XG4gICAgICAgIC8vIG1pZ2h0IHVuc3VzcGVuZCBpdCwgYW5kIHZpY2UgdmVyc2EuIFRoZSBvbmx5IHJlYXNvbiB0byBzdXNwZW5kIGlzXG4gICAgICAgIC8vIGJlY2F1c2UgeW91IHRoaW5rIHlvdSBtaWdodCB3YW50IHRvIHJlc3RhcnQgYmVmb3JlIGNvbW1pdHRpbmcuIEhvd2V2ZXIsXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byByZXN0YXJ0IG9ubHkgd2hpbGUgaW4gdGhlIHBlcmlvZCB3ZSdyZSBzdXNwZW5kZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFJlc3RhcnRpbmcgdG9vIGFnZ3Jlc3NpdmVseSBpcyBhbHNvIG5vdCBnb29kIGJlY2F1c2UgaXQgc3RhcnZlcyBvdXQgYW55XG4gICAgICAgIC8vIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBTbyB3ZSB1c2UgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hlbi5cbiAgICAgICAgLy8gU3VzcGVuc2UgSGV1cmlzdGljc1xuICAgICAgICAvL1xuICAgICAgICAvLyBJZiBub3RoaW5nIHRocmV3IGEgUHJvbWlzZSBvciBhbGwgdGhlIHNhbWUgZmFsbGJhY2tzIGFyZSBhbHJlYWR5IHNob3dpbmcsXG4gICAgICAgIC8vIHRoZW4gZG9uJ3Qgc3VzcGVuZC9yZXN0YXJ0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIGluaXRpYWwgcmVuZGVyIG9mIGEgbmV3IHRyZWUgb2YgU3VzcGVuc2UgYm91bmRhcmllcyBhbmRcbiAgICAgICAgLy8gdGhvc2UgdHJpZ2dlciBhIGZhbGxiYWNrLCB0aGVuIGRvbid0IHN1c3BlbmQvcmVzdGFydC4gV2Ugd2FudCB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCB3ZSBjYW4gc2hvdyB0aGUgaW5pdGlhbCBsb2FkaW5nIHN0YXRlIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHdlIGhpdCBhIFwiRGVsYXllZFwiIGNhc2UsIHN1Y2ggYXMgd2hlbiB3ZSdkIHN3aXRjaCBmcm9tIGNvbnRlbnQgYmFjayBpbnRvXG4gICAgICAgIC8vIGEgZmFsbGJhY2ssIHRoZW4gd2Ugc2hvdWxkIGFsd2F5cyBzdXNwZW5kL3Jlc3RhcnQuIFRyYW5zaXRpb25zIGFwcGx5XG4gICAgICAgIC8vIHRvIHRoaXMgY2FzZS4gSWYgbm9uZSBpcyBkZWZpbmVkLCBKTkQgaXMgdXNlZCBpbnN0ZWFkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBhbmQgaXQgZ2V0cyBcInJldHJpZWRcIiwgYWxsb3dpbmcgdXMgdG8gc2hvd1xuICAgICAgICAvLyBhbm90aGVyIGxldmVsLCBidXQgdGhlcmUncyBzdGlsbCBhbiBpbm5lciBib3VuZGFyeSB0aGF0IHdvdWxkIHNob3cgYSBmYWxsYmFjayxcbiAgICAgICAgLy8gdGhlbiB3ZSBzdXNwZW5kL3Jlc3RhcnQgZm9yIDUwMG1zIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2Ugc2hvd2VkIGEgZmFsbGJhY2tcbiAgICAgICAgLy8gYW55d2hlcmUgaW4gdGhlIHRyZWUuIFRoaXMgZWZmZWN0aXZlbHkgdGhyb3R0bGVzIHByb2dyZXNzaXZlIGxvYWRpbmcgaW50byBhXG4gICAgICAgIC8vIGNvbnNpc3RlbnQgdHJhaW4gb2YgY29tbWl0cy4gVGhpcyBhbHNvIGdpdmVzIHVzIGFuIG9wcG9ydHVuaXR5IHRvIHJlc3RhcnQgdG9cbiAgICAgICAgLy8gZ2V0IHRvIHRoZSBjb21wbGV0ZWQgc3RhdGUgc2xpZ2h0bHkgZWFybGllci5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgdGhlcmUncyBhbWJpZ3VpdHkgZHVlIHRvIGJhdGNoaW5nIGl0J3MgcmVzb2x2ZWQgaW4gcHJlZmVyZW5jZSBvZjpcbiAgICAgICAgLy8gMSkgXCJkZWxheWVkXCIsIDIpIFwiaW5pdGlhbCByZW5kZXJcIiwgMykgXCJyZXRyeVwiLlxuICAgICAgICAvL1xuICAgICAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IGEgXCJidXN5XCIgc3RhdGUgZG9lc24ndCBnZXQgZm9yY2UgY29tbWl0dGVkLiBXZSB3YW50IHRvXG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IG5ldyBpbml0aWFsIGxvYWRpbmcgc3RhdGVzIGNhbiBjb21taXQgYXMgc29vbiBhcyBwb3NzaWJsZS5cblxuXG4gICAgICAgIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB3YWtlYWJsZSwgcm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgX3dvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgIF93b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJvb3RSZW5kZXJMYW5lcztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBUaGlzIGJvdW5kYXJ5IGFscmVhZHkgY2FwdHVyZWQgZHVyaW5nIHRoaXMgcmVuZGVyLiBDb250aW51ZSB0byB0aGUgbmV4dFxuICAgICAgLy8gYm91bmRhcnkuXG5cblxuICAgICAgX3dvcmtJblByb2dyZXNzID0gX3dvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICB9IHdoaWxlIChfd29ya0luUHJvZ3Jlc3MgIT09IG51bGwpOyAvLyBObyBib3VuZGFyeSB3YXMgZm91bmQuIEZhbGx0aHJvdWdoIHRvIGVycm9yIG1vZGUuXG4gICAgLy8gVE9ETzogVXNlIGludmFyaWFudCBzbyB0aGUgbWVzc2FnZSBpcyBzdHJpcHBlZCBpbiBwcm9kP1xuXG5cbiAgICB2YWx1ZSA9IG5ldyBFcnJvcigoZ2V0Q29tcG9uZW50TmFtZShzb3VyY2VGaWJlci50eXBlKSB8fCAnQSBSZWFjdCBjb21wb25lbnQnKSArICcgc3VzcGVuZGVkIHdoaWxlIHJlbmRlcmluZywgYnV0IG5vIGZhbGxiYWNrIFVJIHdhcyBzcGVjaWZpZWQuXFxuJyArICdcXG4nICsgJ0FkZCBhIDxTdXNwZW5zZSBmYWxsYmFjaz0uLi4+IGNvbXBvbmVudCBoaWdoZXIgaW4gdGhlIHRyZWUgdG8gJyArICdwcm92aWRlIGEgbG9hZGluZyBpbmRpY2F0b3Igb3IgcGxhY2Vob2xkZXIgdG8gZGlzcGxheS4nKTtcbiAgfSAvLyBXZSBkaWRuJ3QgZmluZCBhIGJvdW5kYXJ5IHRoYXQgY291bGQgaGFuZGxlIHRoaXMgdHlwZSBvZiBleGNlcHRpb24uIFN0YXJ0XG4gIC8vIG92ZXIgYW5kIHRyYXZlcnNlIHBhcmVudCBwYXRoIGFnYWluLCB0aGlzIHRpbWUgdHJlYXRpbmcgdGhlIGV4Y2VwdGlvblxuICAvLyBhcyBhbiBlcnJvci5cblxuXG4gIHJlbmRlckRpZEVycm9yKCk7XG4gIHZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgc291cmNlRmliZXIpO1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICBkbyB7XG4gICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2Vycm9ySW5mbyA9IHZhbHVlO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyb290UmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgbGFuZSk7XG5cbiAgICAgICAgICB2YXIgX3VwZGF0ZSA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX2Vycm9ySW5mbywgbGFuZSk7XG5cbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF91cGRhdGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAvLyBDYXB0dXJlIGFuZCByZXRyeVxuICAgICAgICB2YXIgZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgIHZhciBjdG9yID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyAmJiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcblxuICAgICAgICAgIHZhciBfbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKHJvb3RSZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMsIF9sYW5lKTsgLy8gU2NoZWR1bGUgdGhlIGVycm9yIGJvdW5kYXJ5IHRvIHJlLXJlbmRlciB1c2luZyB1cGRhdGVkIHN0YXRlXG5cbiAgICAgICAgICB2YXIgX3VwZGF0ZTIgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKHdvcmtJblByb2dyZXNzLCBlcnJvckluZm8sIF9sYW5lKTtcblxuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX3VwZGF0ZTIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICB9IHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCk7XG59XG5cbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG51bGw7XG5cbntcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBuZXcgU2V0KCk7XG59XG5cbnZhciBQb3NzaWJseVdlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtTZXQgOiBTZXQ7XG5cbnZhciBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIgPSBmdW5jdGlvbiAoY3VycmVudCwgaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG59OyAvLyBDYXB0dXJlIGVycm9ycyBzbyB0aGV5IGRvbid0IGludGVycnVwdCB1bm1vdW50aW5nLlxuXG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChjdXJyZW50LCBpbnN0YW5jZSkge1xuICB7XG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFdpdGhUaW1lciwgbnVsbCwgY3VycmVudCwgaW5zdGFuY2UpO1xuXG4gICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgIHZhciB1bm1vdW50RXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCB1bm1vdW50RXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCkge1xuICB2YXIgcmVmID0gY3VycmVudC5yZWY7XG5cbiAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCByZWYsIG51bGwsIG51bGwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgdmFyIHJlZkVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIHJlZkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxEZXN0cm95KGN1cnJlbnQsIGRlc3Ryb3kpIHtcbiAge1xuICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBkZXN0cm95LCBudWxsKTtcblxuICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uTGlmZUN5Y2xlcyhjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBTbmFwc2hvdCkge1xuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzbmFwc2hvdCA9IGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGUgPyBwcmV2UHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBwcmV2UHJvcHMpLCBwcmV2U3RhdGUpO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBkaWRXYXJuU2V0ID0gZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGU7XG5cbiAgICAgICAgICAgICAgaWYgKHNuYXBzaG90ID09PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5TZXQuaGFzKGZpbmlzaGVkV29yay50eXBlKSkge1xuICAgICAgICAgICAgICAgIGRpZFdhcm5TZXQuYWRkKGZpbmlzaGVkV29yay50eXBlKTtcblxuICAgICAgICAgICAgICAgIGVycm9yKCclcy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpOiBBIHNuYXBzaG90IHZhbHVlIChvciBudWxsKSAnICsgJ211c3QgYmUgcmV0dXJuZWQuIFlvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUgPSBzbmFwc2hvdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFNuYXBzaG90KSB7XG4gICAgICAgICAgICB2YXIgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBjbGVhckNvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIC8vIE5vdGhpbmcgdG8gZG8gZm9yIHRoZXNlIGNvbXBvbmVudCB0eXBlc1xuICAgICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudCh0YWcsIGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoKGVmZmVjdC50YWcgJiB0YWcpID09PSB0YWcpIHtcbiAgICAgICAgLy8gVW5tb3VudFxuICAgICAgICB2YXIgZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuICAgICAgICBlZmZlY3QuZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQodGFnLCBmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlZmZlY3QudGFnICYgdGFnKSA9PT0gdGFnKSB7XG4gICAgICAgIC8vIE1vdW50XG4gICAgICAgIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICAgICAgICBlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSgpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuXG4gICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZGVzdHJveSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGFkZGVuZHVtID0gdm9pZCAwO1xuXG4gICAgICAgICAgICBpZiAoZGVzdHJveSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkIG51bGwuIElmIHlvdXIgZWZmZWN0IGRvZXMgbm90IHJlcXVpcmUgY2xlYW4gJyArICd1cCwgcmV0dXJuIHVuZGVmaW5lZCAob3Igbm90aGluZykuJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc3Ryb3kudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICdcXG5cXG5JdCBsb29rcyBsaWtlIHlvdSB3cm90ZSB1c2VFZmZlY3QoYXN5bmMgKCkgPT4gLi4uKSBvciByZXR1cm5lZCBhIFByb21pc2UuICcgKyAnSW5zdGVhZCwgd3JpdGUgdGhlIGFzeW5jIGZ1bmN0aW9uIGluc2lkZSB5b3VyIGVmZmVjdCAnICsgJ2FuZCBjYWxsIGl0IGltbWVkaWF0ZWx5OlxcblxcbicgKyAndXNlRWZmZWN0KCgpID0+IHtcXG4nICsgJyAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKCkge1xcbicgKyAnICAgIC8vIFlvdSBjYW4gYXdhaXQgaGVyZVxcbicgKyAnICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgTXlBUEkuZ2V0RGF0YShzb21lSWQpO1xcbicgKyAnICAgIC8vIC4uLlxcbicgKyAnICB9XFxuJyArICcgIGZldGNoRGF0YSgpO1xcbicgKyBcIn0sIFtzb21lSWRdKTsgLy8gT3IgW10gaWYgZWZmZWN0IGRvZXNuJ3QgbmVlZCBwcm9wcyBvciBzdGF0ZVxcblxcblwiICsgJ0xlYXJuIG1vcmUgYWJvdXQgZGF0YSBmZXRjaGluZyB3aXRoIEhvb2tzOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaG9va3MtZGF0YS1mZXRjaGluZyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkOiAnICsgZGVzdHJveTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IoJ0FuIGVmZmVjdCBmdW5jdGlvbiBtdXN0IG5vdCByZXR1cm4gYW55dGhpbmcgYmVzaWRlcyBhIGZ1bmN0aW9uLCAnICsgJ3doaWNoIGlzIHVzZWQgZm9yIGNsZWFuLXVwLiVzJywgYWRkZW5kdW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgX2VmZmVjdCA9IGVmZmVjdCxcbiAgICAgICAgICBuZXh0ID0gX2VmZmVjdC5uZXh0LFxuICAgICAgICAgIHRhZyA9IF9lZmZlY3QudGFnO1xuXG4gICAgICBpZiAoKHRhZyAmIFBhc3NpdmUkMSkgIT09IE5vRmxhZ3MkMSAmJiAodGFnICYgSGFzRWZmZWN0KSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RVbm1vdW50KGZpbmlzaGVkV29yaywgZWZmZWN0KTtcbiAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdE1vdW50KGZpbmlzaGVkV29yaywgZWZmZWN0KTtcbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gbmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMaWZlQ3ljbGVzKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgZmluaXNoZWRXb3JrLCBjb21taXR0ZWRMYW5lcykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBsYXlvdXQgZWZmZWN0cyBoYXZlIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQgKGR1cmluZyBtdXRhdGlvbiBwaGFzZSkuXG4gICAgICAgIC8vIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgICAvLyBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudCBkdXJpbmcgdGhlIHNhbWUgY29tbWl0LlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChMYXlvdXQgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBzY2hlZHVsZVBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJldlByb3BzID0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZSA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlOyAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdjb21wb25lbnREaWRVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgIC8vIGNvbW1pdCBwaGFzZS4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIHR5cGUgY2hlY2suXG5cblxuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAncHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cblxuICAgICAgICAgIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgdXBkYXRlUXVldWUsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgIC8vIGNvbW1pdCBwaGFzZS4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIHR5cGUgY2hlY2suXG4gICAgICAgIHZhciBfdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKF91cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfaW5zdGFuY2UgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsuY2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UgPSBnZXRQdWJsaWNJbnN0YW5jZShmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZSA9IGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCBfdXBkYXRlUXVldWUsIF9pbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfaW5zdGFuY2UyID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTsgLy8gUmVuZGVyZXJzIG1heSBzY2hlZHVsZSB3b3JrIHRvIGJlIGRvbmUgYWZ0ZXIgaG9zdCBjb21wb25lbnRzIGFyZSBtb3VudGVkXG4gICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgbWF5IHNjaGVkdWxlIGF1dG8tZm9jdXMgZm9yIGlucHV0cyBhbmQgZm9ybSBjb250cm9scykuXG4gICAgICAgIC8vIFRoZXNlIGVmZmVjdHMgc2hvdWxkIG9ubHkgYmUgY29tbWl0dGVkIHdoZW4gY29tcG9uZW50cyBhcmUgZmlyc3QgbW91bnRlZCxcbiAgICAgICAgLy8gYWthIHdoZW4gdGhlcmUgaXMgbm8gY3VycmVudC9hbHRlcm5hdGUuXG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgJiYgZmluaXNoZWRXb3JrLmZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZTtcbiAgICAgICAgICB2YXIgcHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICBjb21taXRNb3VudChfaW5zdGFuY2UyLCB0eXBlLCBwcm9wcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICAvLyBXZSBoYXZlIG5vIGxpZmUtY3ljbGVzIGFzc29jaWF0ZWQgd2l0aCB0ZXh0LlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGhhdmUgbm8gbGlmZS1jeWNsZXMgYXNzb2NpYXRlZCB3aXRoIHBvcnRhbHMuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2ZpbmlzaGVkV29yayRtZW1vaXplMiA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICBvbkNvbW1pdCA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIub25Db21taXQsXG4gICAgICAgICAgICAgIG9uUmVuZGVyID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vblJlbmRlcjtcbiAgICAgICAgICB2YXIgZWZmZWN0RHVyYXRpb24gPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uO1xuICAgICAgICAgIHZhciBjb21taXRUaW1lID0gZ2V0Q29tbWl0VGltZSgpO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBvblJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvblJlbmRlcihmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5pZCwgY3VycmVudCA9PT0gbnVsbCA/ICdtb3VudCcgOiAndXBkYXRlJywgZmluaXNoZWRXb3JrLmFjdHVhbER1cmF0aW9uLCBmaW5pc2hlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiwgZmluaXNoZWRXb3JrLmFjdHVhbFN0YXJ0VGltZSwgY29tbWl0VGltZSwgZmluaXNoZWRSb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihmaW5pc2hlZFdvcmssIGlzSGlkZGVuKSB7XG4gIHtcbiAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBpbnNlcnRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgIHZhciBub2RlID0gZmluaXNoZWRXb3JrO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaGlkZUluc3RhbmNlKG5vZGUuc3RhdGVOb2RlLCBub2RlLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICB2YXIgX2luc3RhbmNlMyA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgIGhpZGVUZXh0SW5zdGFuY2UoX2luc3RhbmNlMyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5oaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZTMsIG5vZGUubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKG5vZGUudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQgfHwgbm9kZS50YWcgPT09IExlZ2FjeUhpZGRlbkNvbXBvbmVudCkgJiYgbm9kZS5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmIG5vZGUgIT09IGZpbmlzaGVkV29yaykgOyBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QXR0YWNoUmVmKGZpbmlzaGVkV29yaykge1xuICB2YXIgcmVmID0gZmluaXNoZWRXb3JrLnJlZjtcblxuICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICB2YXIgaW5zdGFuY2VUb1VzZTtcblxuICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBpbnN0YW5jZVRvVXNlID0gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGluc3RhbmNlO1xuICAgIH0gLy8gTW92ZWQgb3V0c2lkZSB0byBlbnN1cmUgRENFIHdvcmtzIHdpdGggdGhpcyBmbGFnXG5cbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVmKGluc3RhbmNlVG9Vc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIGlmICghcmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgICBlcnJvcignVW5leHBlY3RlZCByZWYgb2JqZWN0IHByb3ZpZGVkIGZvciAlcy4gJyArICdVc2UgZWl0aGVyIGEgcmVmLXNldHRlciBmdW5jdGlvbiBvciBSZWFjdC5jcmVhdGVSZWYoKS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVmLmN1cnJlbnQgPSBpbnN0YW5jZVRvVXNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXREZXRhY2hSZWYoY3VycmVudCkge1xuICB2YXIgY3VycmVudFJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIGlmIChjdXJyZW50UmVmICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBjdXJyZW50UmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjdXJyZW50UmVmKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufSAvLyBVc2VyLW9yaWdpbmF0aW5nIGVycm9ycyAobGlmZWN5Y2xlcyBhbmQgcmVmcykgc2hvdWxkIG5vdCBpbnRlcnJ1cHRcbi8vIGRlbGV0aW9uLCBzbyBkb24ndCBsZXQgdGhlbSB0aHJvdy4gSG9zdC1vcmlnaW5hdGluZyBlcnJvcnMgc2hvdWxkXG4vLyBpbnRlcnJ1cHQgZGVsZXRpb24sIHNvIGl0J3Mgb2theVxuXG5cbmZ1bmN0aW9uIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIG9uQ29tbWl0VW5tb3VudChjdXJyZW50KTtcblxuICBzd2l0Y2ggKGN1cnJlbnQudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgICAgICAgIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgdmFyIF9lZmZlY3QyID0gZWZmZWN0LFxuICAgICAgICAgICAgICAgICAgZGVzdHJveSA9IF9lZmZlY3QyLmRlc3Ryb3ksXG4gICAgICAgICAgICAgICAgICB0YWcgPSBfZWZmZWN0Mi50YWc7XG5cbiAgICAgICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgodGFnICYgUGFzc2l2ZSQxKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0VW5tb3VudChjdXJyZW50LCBlZmZlY3QpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVseUNhbGxEZXN0cm95KGN1cnJlbnQsIGRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgICAgICAgICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBjdXJyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KGN1cnJlbnQsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IHRoaXMgaXMgcmVjdXJzaXZlLlxuICAgICAgICAvLyBXZSBhcmUgYWxzbyBub3QgdXNpbmcgdGhpcyBwYXJlbnQgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgcG9ydGFsIHdpbGwgZ2V0IHB1c2hlZCBpbW1lZGlhdGVseS5cbiAgICAgICAge1xuICAgICAgICAgIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIERlaHlkcmF0ZWRGcmFnbWVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXROZXN0ZWRVbm1vdW50cyhmaW5pc2hlZFJvb3QsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gV2hpbGUgd2UncmUgaW5zaWRlIGEgcmVtb3ZlZCBob3N0IG5vZGUgd2UgZG9uJ3Qgd2FudCB0byBjYWxsXG4gIC8vIHJlbW92ZUNoaWxkIG9uIHRoZSBpbm5lciBub2RlcyBiZWNhdXNlIHRoZXkncmUgcmVtb3ZlZCBieSB0aGUgdG9wXG4gIC8vIGNhbGwgYW55d2F5LiBXZSBhbHNvIHdhbnQgdG8gY2FsbCBjb21wb25lbnRXaWxsVW5tb3VudCBvbiBhbGxcbiAgLy8gY29tcG9zaXRlcyBiZWZvcmUgdGhpcyBob3N0IG5vZGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLiBUaGVyZWZvcmVcbiAgLy8gd2UgZG8gYW4gaW5uZXIgbG9vcCB3aGlsZSB3ZSdyZSBzdGlsbCBpbnNpZGUgdGhlIGhvc3Qgbm9kZS5cbiAgdmFyIG5vZGUgPSByb290O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHRoZXkgbWF5IGNvbnRhaW4gbW9yZSBjb21wb3NpdGUgb3IgaG9zdCBub2Rlcy5cbiAgICAvLyBTa2lwIHBvcnRhbHMgYmVjYXVzZSBjb21taXRVbm1vdW50KCkgY3VycmVudGx5IHZpc2l0cyB0aGVtIHJlY3Vyc2l2ZWx5LlxuXG4gICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwgJiYgKCAvLyBJZiB3ZSB1c2UgbXV0YXRpb24gd2UgZHJpbGwgZG93biBpbnRvIHBvcnRhbHMgdXNpbmcgY29tbWl0VW5tb3VudCBhYm92ZS5cbiAgICAvLyBJZiB3ZSBkb24ndCB1c2UgbXV0YXRpb24gd2UgZHJpbGwgZG93biBpbnRvIHBvcnRhbHMgaGVyZSBpbnN0ZWFkLlxuICAgICBub2RlLnRhZyAhPT0gSG9zdFBvcnRhbCkpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHJvb3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0YWNoRmliZXJNdXRhdGlvbihmaWJlcikge1xuICAvLyBDdXQgb2ZmIHRoZSByZXR1cm4gcG9pbnRlcnMgdG8gZGlzY29ubmVjdCBpdCBmcm9tIHRoZSB0cmVlLiBJZGVhbGx5LCB3ZVxuICAvLyBzaG91bGQgY2xlYXIgdGhlIGNoaWxkIHBvaW50ZXIgb2YgdGhlIHBhcmVudCBhbHRlcm5hdGUgdG8gbGV0IHRoaXNcbiAgLy8gZ2V0IEdDOmVkIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIGZvciBzdXJlIHdoaWNoIHBhcmVudCBpcyB0aGUgY3VycmVudFxuICAvLyBvbmUgc28gd2UnbGwgc2V0dGxlIGZvciBHQzppbmcgdGhlIHN1YnRyZWUgb2YgdGhpcyBjaGlsZC4gVGhpcyBjaGlsZFxuICAvLyBpdHNlbGYgd2lsbCBiZSBHQzplZCB3aGVuIHRoZSBwYXJlbnQgdXBkYXRlcyB0aGUgbmV4dCB0aW1lLlxuICAvLyBOb3RlOiB3ZSBjYW5ub3QgbnVsbCBvdXQgc2libGluZyBoZXJlLCBvdGhlcndpc2UgaXQgY2FuIGNhdXNlIGlzc3Vlc1xuICAvLyB3aXRoIGZpbmRET01Ob2RlIGFuZCBob3cgaXQgcmVxdWlyZXMgdGhlIHNpYmxpbmcgZmllbGQgdG8gY2Fycnkgb3V0XG4gIC8vIHRyYXZlcnNhbCBpbiBhIGxhdGVyIGVmZmVjdC4gU2VlIFBSICMxNjgyMC4gV2Ugbm93IGNsZWFyIHRoZSBzaWJsaW5nXG4gIC8vIGZpZWxkIGFmdGVyIGVmZmVjdHMsIHNlZTogZGV0YWNoRmliZXJBZnRlckVmZmVjdHMuXG4gIC8vXG4gIC8vIERvbid0IGRpc2Nvbm5lY3Qgc3RhdGVOb2RlIG5vdzsgaXQgd2lsbCBiZSBkZXRhY2hlZCBpbiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cy5cbiAgLy8gSXQgbWF5IGJlIHJlcXVpcmVkIGlmIHRoZSBjdXJyZW50IGNvbXBvbmVudCBpcyBhbiBlcnJvciBib3VuZGFyeSxcbiAgLy8gYW5kIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgdGhyb3dzIHdoaWxlIHVubW91bnRpbmcgYSBwYXNzaXZlIGVmZmVjdC5cbiAgZmliZXIuYWx0ZXJuYXRlID0gbnVsbDtcbiAgZmliZXIuY2hpbGQgPSBudWxsO1xuICBmaWJlci5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICBmaWJlci5maXJzdEVmZmVjdCA9IG51bGw7XG4gIGZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuICBmaWJlci5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgZmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIGZpYmVyLnBlbmRpbmdQcm9wcyA9IG51bGw7XG4gIGZpYmVyLnJldHVybiA9IG51bGw7XG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICB7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RQYXJlbnRGaWJlcihmaWJlcikge1xuICB2YXIgcGFyZW50ID0gZmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICBpZiAoaXNIb3N0UGFyZW50KHBhcmVudCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHJldHVybiBmaWJlci50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgZmliZXIudGFnID09PSBIb3N0Um9vdCB8fCBmaWJlci50YWcgPT09IEhvc3RQb3J0YWw7XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RTaWJsaW5nKGZpYmVyKSB7XG4gIC8vIFdlJ3JlIGdvaW5nIHRvIHNlYXJjaCBmb3J3YXJkIGludG8gdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhIHNpYmxpbmcgaG9zdFxuICAvLyBub2RlLiBVbmZvcnR1bmF0ZWx5LCBpZiBtdWx0aXBsZSBpbnNlcnRpb25zIGFyZSBkb25lIGluIGEgcm93IHdlIGhhdmUgdG9cbiAgLy8gc2VhcmNoIHBhc3QgdGhlbS4gVGhpcyBsZWFkcyB0byBleHBvbmVudGlhbCBzZWFyY2ggZm9yIHRoZSBuZXh0IHNpYmxpbmcuXG4gIC8vIFRPRE86IEZpbmQgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZG8gdGhpcy5cbiAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICBzaWJsaW5nczogd2hpbGUgKHRydWUpIHtcbiAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZywgbGV0J3MgdHJ5IHRoZSBuZXh0IHNpYmxpbmcuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IGlzSG9zdFBhcmVudChub2RlLnJldHVybikpIHtcbiAgICAgICAgLy8gSWYgd2UgcG9wIG91dCBvZiB0aGUgcm9vdCBvciBoaXQgdGhlIHBhcmVudCB0aGUgZmliZXIgd2UgYXJlIHRoZVxuICAgICAgICAvLyBsYXN0IHNpYmxpbmcuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG5cbiAgICB3aGlsZSAobm9kZS50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgbm9kZS50YWcgIT09IEhvc3RUZXh0ICYmIG5vZGUudGFnICE9PSBEZWh5ZHJhdGVkRnJhZ21lbnQpIHtcbiAgICAgIC8vIElmIGl0IGlzIG5vdCBob3N0IG5vZGUgYW5kLCB3ZSBtaWdodCBoYXZlIGEgaG9zdCBub2RlIGluc2lkZSBpdC5cbiAgICAgIC8vIFRyeSB0byBzZWFyY2ggZG93biB1bnRpbCB3ZSBmaW5kIG9uZS5cbiAgICAgIGlmIChub2RlLmZsYWdzICYgUGxhY2VtZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBjaGlsZCwgdHJ5IHRoZSBzaWJsaW5ncyBpbnN0ZWFkLlxuICAgICAgICBjb250aW51ZSBzaWJsaW5ncztcbiAgICAgIH0gLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAvLyBXZSBhbHNvIHNraXAgcG9ydGFscyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoaXMgaG9zdCB0cmVlLlxuXG5cbiAgICAgIGlmIChub2RlLmNoaWxkID09PSBudWxsIHx8IG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgIGNvbnRpbnVlIHNpYmxpbmdzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIH1cbiAgICB9IC8vIENoZWNrIGlmIHRoaXMgaG9zdCBub2RlIGlzIHN0YWJsZSBvciBhYm91dCB0byBiZSBwbGFjZWQuXG5cblxuICAgIGlmICghKG5vZGUuZmxhZ3MgJiBQbGFjZW1lbnQpKSB7XG4gICAgICAvLyBGb3VuZCBpdCFcbiAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UGxhY2VtZW50KGZpbmlzaGVkV29yaykge1xuXG5cbiAgdmFyIHBhcmVudEZpYmVyID0gZ2V0SG9zdFBhcmVudEZpYmVyKGZpbmlzaGVkV29yayk7IC8vIE5vdGU6IHRoZXNlIHR3byB2YXJpYWJsZXMgKm11c3QqIGFsd2F5cyBiZSB1cGRhdGVkIHRvZ2V0aGVyLlxuXG4gIHZhciBwYXJlbnQ7XG4gIHZhciBpc0NvbnRhaW5lcjtcbiAgdmFyIHBhcmVudFN0YXRlTm9kZSA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcblxuICBzd2l0Y2ggKHBhcmVudEZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZTtcbiAgICAgIGlzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgIGlzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICBpc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUtbm8tZmFsbHRocm91Z2hcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGhvc3QgcGFyZW50IGZpYmVyLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG5cbiAgaWYgKHBhcmVudEZpYmVyLmZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgLy8gUmVzZXQgdGhlIHRleHQgY29udGVudCBvZiB0aGUgcGFyZW50IGJlZm9yZSBkb2luZyBhbnkgaW5zZXJ0aW9uc1xuICAgIHJlc2V0VGV4dENvbnRlbnQocGFyZW50KTsgLy8gQ2xlYXIgQ29udGVudFJlc2V0IGZyb20gdGhlIGVmZmVjdCB0YWdcblxuICAgIHBhcmVudEZpYmVyLmZsYWdzICY9IH5Db250ZW50UmVzZXQ7XG4gIH1cblxuICB2YXIgYmVmb3JlID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTsgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG5cbiAgaWYgKGlzQ29udGFpbmVyKSB7XG4gICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihmaW5pc2hlZFdvcmssIGJlZm9yZSwgcGFyZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoZmluaXNoZWRXb3JrLCBiZWZvcmUsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIHZhciBpc0hvc3QgPSB0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBIb3N0VGV4dDtcblxuICBpZiAoaXNIb3N0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICkge1xuICAgIHZhciBzdGF0ZU5vZGUgPSBpc0hvc3QgPyBub2RlLnN0YXRlTm9kZSA6IG5vZGUuc3RhdGVOb2RlLmluc3RhbmNlO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgaW5zZXJ0SW5Db250YWluZXJCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXIocGFyZW50LCBzdGF0ZU5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSB7XG4gICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihjaGlsZCwgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgdmFyIHNpYmxpbmcgPSBjaGlsZC5zaWJsaW5nO1xuXG4gICAgICB3aGlsZSAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKHNpYmxpbmcsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgICAgc2libGluZyA9IHNpYmxpbmcuc2libGluZztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZztcbiAgdmFyIGlzSG9zdCA9IHRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCB0YWcgPT09IEhvc3RUZXh0O1xuXG4gIGlmIChpc0hvc3QgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgKSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IGlzSG9zdCA/IG5vZGUuc3RhdGVOb2RlIDogbm9kZS5zdGF0ZU5vZGUuaW5zdGFuY2U7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICBpbnNlcnRCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoaWxkKHBhcmVudCwgc3RhdGVOb2RlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2Uge1xuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShjaGlsZCwgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgdmFyIHNpYmxpbmcgPSBjaGlsZC5zaWJsaW5nO1xuXG4gICAgICB3aGlsZSAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoc2libGluZywgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgICBzaWJsaW5nID0gc2libGluZy5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGRlbGV0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gIHZhciBub2RlID0gY3VycmVudDsgLy8gRWFjaCBpdGVyYXRpb24sIGN1cnJlbnRQYXJlbnQgaXMgcG9wdWxhdGVkIHdpdGggbm9kZSdzIGhvc3QgcGFyZW50IGlmIG5vdFxuICAvLyBjdXJyZW50UGFyZW50SXNWYWxpZC5cblxuICB2YXIgY3VycmVudFBhcmVudElzVmFsaWQgPSBmYWxzZTsgLy8gTm90ZTogdGhlc2UgdHdvIHZhcmlhYmxlcyAqbXVzdCogYWx3YXlzIGJlIHVwZGF0ZWQgdG9nZXRoZXIuXG5cbiAgdmFyIGN1cnJlbnRQYXJlbnQ7XG4gIHZhciBjdXJyZW50UGFyZW50SXNDb250YWluZXI7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoIWN1cnJlbnRQYXJlbnRJc1ZhbGlkKSB7XG4gICAgICB2YXIgcGFyZW50ID0gbm9kZS5yZXR1cm47XG5cbiAgICAgIGZpbmRQYXJlbnQ6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmICghKHBhcmVudCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICBzd2l0Y2ggKHBhcmVudC50YWcpIHtcbiAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICBjb21taXROZXN0ZWRVbm1vdW50cyhmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBBZnRlciBhbGwgdGhlIGNoaWxkcmVuIGhhdmUgdW5tb3VudGVkLCBpdCBpcyBub3cgc2FmZSB0byByZW1vdmUgdGhlXG4gICAgICAvLyBub2RlIGZyb20gdGhlIHRyZWUuXG5cbiAgICAgIGlmIChjdXJyZW50UGFyZW50SXNDb250YWluZXIpIHtcbiAgICAgICAgcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyKGN1cnJlbnRQYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZUNoaWxkKGN1cnJlbnRQYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gLy8gRG9uJ3QgdmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB3ZSBhbHJlYWR5IHZpc2l0ZWQgdGhlbS5cblxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdoZW4gd2UgZ28gaW50byBhIHBvcnRhbCwgaXQgYmVjb21lcyB0aGUgcGFyZW50IHRvIHJlbW92ZSBmcm9tLlxuICAgICAgICAvLyBXZSB3aWxsIHJlYXNzaWduIGl0IGJhY2sgd2hlbiB3ZSBwb3AgdGhlIHBvcnRhbCBvbiB0aGUgd2F5IHVwLlxuICAgICAgICBjdXJyZW50UGFyZW50ID0gbm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSBwb3J0YWxzIG1pZ2h0IGNvbnRhaW4gaG9zdCBjb21wb25lbnRzLlxuXG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21taXRVbm1vdW50KGZpbmlzaGVkUm9vdCwgbm9kZSk7IC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2Ugd2UgbWF5IGZpbmQgbW9yZSBob3N0IGNvbXBvbmVudHMgYmVsb3cuXG5cbiAgICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuXG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgLy8gV2hlbiB3ZSBnbyBvdXQgb2YgdGhlIHBvcnRhbCwgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBwYXJlbnQuXG4gICAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGtlZXAgYSBzdGFjayBvZiB0aGVtLCB3ZSB3aWxsIHNlYXJjaCBmb3IgaXQuXG4gICAgICAgIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RGVsZXRpb24oZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIHtcbiAgICAvLyBSZWN1cnNpdmVseSBkZWxldGUgYWxsIGhvc3Qgbm9kZXMgZnJvbSB0aGUgcGFyZW50LlxuICAgIC8vIERldGFjaCByZWZzIGFuZCBjYWxsIGNvbXBvbmVudFdpbGxVbm1vdW50KCkgb24gdGhlIHdob2xlIHN1YnRyZWUuXG4gICAgdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCk7XG4gIH1cblxuICB2YXIgYWx0ZXJuYXRlID0gY3VycmVudC5hbHRlcm5hdGU7XG4gIGRldGFjaEZpYmVyTXV0YXRpb24oY3VycmVudCk7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGRldGFjaEZpYmVyTXV0YXRpb24oYWx0ZXJuYXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRXb3JrKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuXG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgLy8gTGF5b3V0IGVmZmVjdHMgYXJlIGRlc3Ryb3llZCBkdXJpbmcgdGhlIG11dGF0aW9uIHBoYXNlIHNvIHRoYXQgYWxsXG4gICAgICAgIC8vIGRlc3Ryb3kgZnVuY3Rpb25zIGZvciBhbGwgZmliZXJzIGFyZSBjYWxsZWQgYmVmb3JlIGFueSBjcmVhdGUgZnVuY3Rpb25zLlxuICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgICAvLyBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudCBkdXJpbmcgdGhlIHNhbWUgY29tbWl0LlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KExheW91dCB8IEhhc0VmZmVjdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIENvbW1pdCB0aGUgd29yayBwcmVwYXJlZCBlYXJsaWVyLlxuICAgICAgICAgIHZhciBuZXdQcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzOyAvLyBGb3IgaHlkcmF0aW9uIHdlIHJldXNlIHRoZSB1cGRhdGUgcGF0aCBidXQgd2UgdHJlYXQgdGhlIG9sZFByb3BzXG4gICAgICAgICAgLy8gYXMgdGhlIG5ld1Byb3BzLiBUaGUgdXBkYXRlUGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIHJlYWwgY2hhbmdlIGluXG4gICAgICAgICAgLy8gdGhpcyBjYXNlLlxuXG4gICAgICAgICAgdmFyIG9sZFByb3BzID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG5ld1Byb3BzO1xuICAgICAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGU7IC8vIFRPRE86IFR5cGUgdGhlIHVwZGF0ZVF1ZXVlIHRvIGJlIHNwZWNpZmljIHRvIGhvc3QgY29tcG9uZW50cy5cblxuICAgICAgICAgIHZhciB1cGRhdGVQYXlsb2FkID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgIGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAodXBkYXRlUGF5bG9hZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29tbWl0VXBkYXRlKGluc3RhbmNlLCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIGlmICghKGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyBzaG91bGQgaGF2ZSBhIHRleHQgbm9kZSBpbml0aWFsaXplZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ZXh0SW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICB2YXIgbmV3VGV4dCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzOyAvLyBGb3IgaHlkcmF0aW9uIHdlIHJldXNlIHRoZSB1cGRhdGUgcGF0aCBidXQgd2UgdHJlYXQgdGhlIG9sZFByb3BzXG4gICAgICAgIC8vIGFzIHRoZSBuZXdQcm9wcy4gVGhlIHVwZGF0ZVBheWxvYWQgd2lsbCBjb250YWluIHRoZSByZWFsIGNoYW5nZSBpblxuICAgICAgICAvLyB0aGlzIGNhc2UuXG5cbiAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbmV3VGV4dDtcbiAgICAgICAgY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9yb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChfcm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgICAvLyBXZSd2ZSBqdXN0IGh5ZHJhdGVkLiBObyBuZWVkIHRvIGh5ZHJhdGUgYWdhaW4uXG4gICAgICAgICAgICBfcm9vdC5oeWRyYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBjb21taXRIeWRyYXRlZENvbnRhaW5lcihfcm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBjb21taXRTdXNwZW5zZUNvbXBvbmVudChmaW5pc2hlZFdvcmspO1xuICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgdmFyIGlzSGlkZGVuID0gbmV3U3RhdGUgIT09IG51bGw7XG4gICAgICAgIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKGZpbmlzaGVkV29yaywgaXNIaWRkZW4pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0U3VzcGVuc2VDb21wb25lbnQoZmluaXNoZWRXb3JrKSB7XG4gIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXdTdGF0ZSAhPT0gbnVsbCkge1xuICAgIG1hcmtDb21taXRUaW1lT2ZGYWxsYmFjaygpO1xuXG4gICAge1xuICAgICAgLy8gSGlkZSB0aGUgT2Zmc2NyZWVuIGNvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBwcmltYXJ5IGNoaWxkcmVuLiBUT0RPOlxuICAgICAgLy8gSWRlYWxseSwgdGhpcyBlZmZlY3Qgd291bGQgaGF2ZSBiZWVuIHNjaGVkdWxlZCBvbiB0aGUgT2Zmc2NyZWVuIGZpYmVyXG4gICAgICAvLyBpdHNlbGYuIFRoYXQncyBob3cgdW5oaWRpbmcgd29ya3M6IHRoZSBPZmZzY3JlZW4gY29tcG9uZW50IHNjaGVkdWxlcyBhblxuICAgICAgLy8gZWZmZWN0IG9uIGl0c2VsZi4gSG93ZXZlciwgaW4gdGhpcyBjYXNlLCB0aGUgY29tcG9uZW50IGRpZG4ndCBjb21wbGV0ZSxcbiAgICAgIC8vIHNvIHRoZSBmaWJlciB3YXMgbmV2ZXIgYWRkZWQgdG8gdGhlIGVmZmVjdCBsaXN0IGluIHRoZSBub3JtYWwgcGF0aC4gV2VcbiAgICAgIC8vIGNvdWxkIGhhdmUgYXBwZW5kZWQgaXQgdG8gdGhlIGVmZmVjdCBsaXN0IGluIHRoZSBTdXNwZW5zZSBjb21wb25lbnQnc1xuICAgICAgLy8gc2Vjb25kIHBhc3MsIGJ1dCBkb2luZyBpdCB0aGlzIHdheSBpcyBsZXNzIGNvbXBsaWNhdGVkLiBUaGlzIHdvdWxkIGJlXG4gICAgICAvLyBzaW1wbGVyIGlmIHdlIGdvdCByaWQgb2YgdGhlIGVmZmVjdCBsaXN0IGFuZCB0cmF2ZXJzZWQgdGhlIHRyZWUsIGxpa2VcbiAgICAgIC8vIHdlJ3JlIHBsYW5uaW5nIHRvIGRvLlxuICAgICAgdmFyIHByaW1hcnlDaGlsZFBhcmVudCA9IGZpbmlzaGVkV29yay5jaGlsZDtcbiAgICAgIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKHByaW1hcnlDaGlsZFBhcmVudCwgdHJ1ZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSB7XG5cbiAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5ld1N0YXRlID09PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBwcmV2U3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICBpZiAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaykge1xuICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGp1c3QgdGltZWQgb3V0LCB0aGVuIGl0IHdpbGwgaGF2ZSBhIHNldCBvZiB3YWtlYWJsZXMuXG4gIC8vIEZvciBlYWNoIHdha2VhYmxlLCBhdHRhY2ggYSBsaXN0ZW5lciBzbyB0aGF0IHdoZW4gaXQgcmVzb2x2ZXMsIFJlYWN0XG4gIC8vIGF0dGVtcHRzIHRvIHJlLXJlbmRlciB0aGUgYm91bmRhcnkgaW4gdGhlIHByaW1hcnkgKHByZS10aW1lb3V0KSBzdGF0ZS5cbiAgdmFyIHdha2VhYmxlcyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICBpZiAod2FrZWFibGVzICE9PSBudWxsKSB7XG4gICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB2YXIgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICBpZiAocmV0cnlDYWNoZSA9PT0gbnVsbCkge1xuICAgICAgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgPSBuZXcgUG9zc2libHlXZWFrU2V0KCk7XG4gICAgfVxuXG4gICAgd2FrZWFibGVzLmZvckVhY2goZnVuY3Rpb24gKHdha2VhYmxlKSB7XG4gICAgICAvLyBNZW1vaXplIHVzaW5nIHRoZSBib3VuZGFyeSBmaWJlciB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG4gICAgICB2YXIgcmV0cnkgPSByZXNvbHZlUmV0cnlXYWtlYWJsZS5iaW5kKG51bGwsIGZpbmlzaGVkV29yaywgd2FrZWFibGUpO1xuXG4gICAgICBpZiAoIXJldHJ5Q2FjaGUuaGFzKHdha2VhYmxlKSkge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdha2VhYmxlLl9fcmVhY3REb05vdFRyYWNlSW50ZXJhY3Rpb25zICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXRyeSA9IHRyYWNpbmcudW5zdGFibGVfd3JhcChyZXRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0cnlDYWNoZS5hZGQod2FrZWFibGUpO1xuICAgICAgICB3YWtlYWJsZS50aGVuKHJldHJ5LCByZXRyeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0gLy8gVGhpcyBmdW5jdGlvbiBkZXRlY3RzIHdoZW4gYSBTdXNwZW5zZSBib3VuZGFyeSBnb2VzIGZyb20gdmlzaWJsZSB0byBoaWRkZW4uXG4vLyBJdCByZXR1cm5zIGZhbHNlIGlmIHRoZSBib3VuZGFyeSBpcyBhbHJlYWR5IGhpZGRlbi5cbi8vIFRPRE86IFVzZSBhbiBlZmZlY3QgdGFnLlxuXG5cbmZ1bmN0aW9uIGlzU3VzcGVuc2VCb3VuZGFyeUJlaW5nSGlkZGVuKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBvbGRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChvbGRTdGF0ZSA9PT0gbnVsbCB8fCBvbGRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiBuZXdTdGF0ZSAhPT0gbnVsbCAmJiBuZXdTdGF0ZS5kZWh5ZHJhdGVkID09PSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY29tbWl0UmVzZXRUZXh0Q29udGVudChjdXJyZW50KSB7XG5cbiAgcmVzZXRUZXh0Q29udGVudChjdXJyZW50LnN0YXRlTm9kZSk7XG59XG5cbnZhciBDT01QT05FTlRfVFlQRSA9IDA7XG52YXIgSEFTX1BTRVVET19DTEFTU19UWVBFID0gMTtcbnZhciBST0xFX1RZUEUgPSAyO1xudmFyIFRFU1RfTkFNRV9UWVBFID0gMztcbnZhciBURVhUX1RZUEUgPSA0O1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IkMSA9IFN5bWJvbC5mb3I7XG4gIENPTVBPTkVOVF9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLmNvbXBvbmVudCcpO1xuICBIQVNfUFNFVURPX0NMQVNTX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IuaGFzX3BzZXVkb19jbGFzcycpO1xuICBST0xFX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3Iucm9sZScpO1xuICBURVNUX05BTUVfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci50ZXN0X2lkJyk7XG4gIFRFWFRfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci50ZXh0Jyk7XG59XG52YXIgY29tbWl0SG9va3MgPSBbXTtcbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdCQxKCkge1xuICB7XG4gICAgY29tbWl0SG9va3MuZm9yRWFjaChmdW5jdGlvbiAoY29tbWl0SG9vaykge1xuICAgICAgcmV0dXJuIGNvbW1pdEhvb2soKTtcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIFJlYWN0Q3VycmVudE93bmVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcixcbiAgICBJc1NvbWVSZW5kZXJlckFjdGluZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLklzU29tZVJlbmRlcmVyQWN0aW5nO1xudmFyIE5vQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAqL1xuMDtcbnZhciBCYXRjaGVkQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICovXG4xO1xudmFyIEV2ZW50Q29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgRGlzY3JldGVFdmVudENvbnRleHQgPVxuLyogICAgICAgICAqL1xuNDtcbnZhciBMZWdhY3lVbmJhdGNoZWRDb250ZXh0ID1cbi8qICAgICAgICovXG44O1xudmFyIFJlbmRlckNvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgKi9cbjE2O1xudmFyIENvbW1pdENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIFJldHJ5QWZ0ZXJFcnJvciA9XG4vKiAgICAgICAqL1xuNjQ7XG52YXIgUm9vdEluY29tcGxldGUgPSAwO1xudmFyIFJvb3RGYXRhbEVycm9yZWQgPSAxO1xudmFyIFJvb3RFcnJvcmVkID0gMjtcbnZhciBSb290U3VzcGVuZGVkID0gMztcbnZhciBSb290U3VzcGVuZGVkV2l0aERlbGF5ID0gNDtcbnZhciBSb290Q29tcGxldGVkID0gNTsgLy8gRGVzY3JpYmVzIHdoZXJlIHdlIGFyZSBpbiB0aGUgUmVhY3QgZXhlY3V0aW9uIHN0YWNrXG5cbnZhciBleGVjdXRpb25Db250ZXh0ID0gTm9Db250ZXh0OyAvLyBUaGUgcm9vdCB3ZSdyZSB3b3JraW5nIG9uXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsOyAvLyBUaGUgZmliZXIgd2UncmUgd29ya2luZyBvblxuXG52YXIgd29ya0luUHJvZ3Jlc3MgPSBudWxsOyAvLyBUaGUgbGFuZXMgd2UncmUgcmVuZGVyaW5nXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFN0YWNrIHRoYXQgYWxsb3dzIGNvbXBvbmVudHMgdG8gY2hhbmdlIHRoZSByZW5kZXIgbGFuZXMgZm9yIGl0cyBzdWJ0cmVlXG4vLyBUaGlzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgd29ya2luZyBvbiBhdCB0aGUgcm9vdC4gVGhlIG9ubHlcbi8vIGNhc2Ugd2hlcmUgaXQncyBkaWZmZXJlbnQgZnJvbSBgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNgIGlzIHdoZW4gd2Vcbi8vIGVudGVyIGEgc3VidHJlZSB0aGF0IGlzIGhpZGRlbiBhbmQgbmVlZHMgdG8gYmUgdW5oaWRkZW46IFN1c3BlbnNlIGFuZFxuLy8gT2Zmc2NyZWVuIGNvbXBvbmVudC5cbi8vXG4vLyBNb3N0IHRoaW5ncyBpbiB0aGUgd29yayBsb29wIHNob3VsZCBkZWFsIHdpdGggd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMuXG4vLyBNb3N0IHRoaW5ncyBpbiBiZWdpbi9jb21wbGV0ZSBwaGFzZXMgc2hvdWxkIGRlYWwgd2l0aCBzdWJ0cmVlUmVuZGVyTGFuZXMuXG5cbnZhciBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xudmFyIHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOb0xhbmVzKTsgLy8gV2hldGhlciB0byByb290IGNvbXBsZXRlZCwgZXJyb3JlZCwgc3VzcGVuZGVkLCBldGMuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluY29tcGxldGU7IC8vIEEgZmF0YWwgZXJyb3IsIGlmIG9uZSBpcyB0aHJvd25cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsOyAvLyBcIkluY2x1ZGVkXCIgbGFuZXMgcmVmZXIgdG8gbGFuZXMgdGhhdCB3ZXJlIHdvcmtlZCBvbiBkdXJpbmcgdGhpcyByZW5kZXIuIEl0J3Ncbi8vIHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIGByZW5kZXJMYW5lc2AgYmVjYXVzZSBgcmVuZGVyTGFuZXNgIGNhbiBjaGFuZ2UgYXMgeW91XG4vLyBlbnRlciBhbmQgZXhpdCBhbiBPZmZzY3JlZW4gdHJlZS4gVGhpcyB2YWx1ZSBpcyB0aGUgY29tYmluYXRpb24gb2YgYWxsIHJlbmRlclxuLy8gbGFuZXMgZm9yIHRoZSBlbnRpcmUgcmVuZGVyIHBoYXNlLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrIGxlZnQgb3ZlciBieSBjb21wb25lbnRzIHRoYXQgd2VyZSB2aXNpdGVkIGR1cmluZyB0aGlzIHJlbmRlci4gT25seVxuLy8gaW5jbHVkZXMgdW5wcm9jZXNzZWQgdXBkYXRlcywgbm90IHdvcmsgaW4gYmFpbGVkIG91dCBjaGlsZHJlbi5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IE5vTGFuZXM7IC8vIExhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIChpbiBhbiBpbnRlcmxlYXZlZCBldmVudCkgZHVyaW5nIHRoaXMgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gTm9MYW5lczsgLy8gTGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCAoaW4gYW4gaW50ZXJsZWF2ZWQgZXZlbnQpIGR1cmluZyB0aGlzIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gTm9MYW5lcztcbnZhciBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCA9IG51bGw7IC8vIFRoZSBtb3N0IHJlY2VudCB0aW1lIHdlIGNvbW1pdHRlZCBhIGZhbGxiYWNrLiBUaGlzIGxldHMgdXMgZW5zdXJlIGEgdHJhaW5cbi8vIG1vZGVsIHdoZXJlIHdlIGRvbid0IGNvbW1pdCBuZXcgbG9hZGluZyBzdGF0ZXMgaW4gdG9vIHF1aWNrIHN1Y2Nlc3Npb24uXG5cbnZhciBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gMDtcbnZhciBGQUxMQkFDS19USFJPVFRMRV9NUyA9IDUwMDsgLy8gVGhlIGFic29sdXRlIHRpbWUgZm9yIHdoZW4gd2Ugc2hvdWxkIHN0YXJ0IGdpdmluZyB1cCBvbiByZW5kZXJpbmdcbi8vIG1vcmUgYW5kIHByZWZlciBDUFUgc3VzcGVuc2UgaGV1cmlzdGljcyBpbnN0ZWFkLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IEluZmluaXR5OyAvLyBIb3cgbG9uZyBhIHJlbmRlciBpcyBzdXBwb3NlZCB0byB0YWtlIGJlZm9yZSB3ZSBzdGFydCBmb2xsb3dpbmcgQ1BVXG4vLyBzdXNwZW5zZSBoZXVyaXN0aWNzIGFuZCBvcHQgb3V0IG9mIHJlbmRlcmluZyBtb3JlIGNvbnRlbnQuXG5cbnZhciBSRU5ERVJfVElNRU9VVF9NUyA9IDUwMDtcblxuZnVuY3Rpb24gcmVzZXRSZW5kZXJUaW1lcigpIHtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IG5vdygpICsgUkVOREVSX1RJTUVPVVRfTVM7XG59XG5cbmZ1bmN0aW9uIGdldFJlbmRlclRhcmdldFRpbWUoKSB7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lO1xufVxudmFyIG5leHRFZmZlY3QgPSBudWxsO1xudmFyIGhhc1VuY2F1Z2h0RXJyb3IgPSBmYWxzZTtcbnZhciBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBudWxsO1xudmFyIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbnZhciByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xudmFyIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbnZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IE5vUHJpb3JpdHkkMTtcbnZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IE5vTGFuZXM7XG52YXIgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50ID0gW107XG52YXIgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQgPSBbXTtcbnZhciByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID0gbnVsbDsgLy8gVXNlIHRoZXNlIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiBuZXN0ZWQgdXBkYXRlc1xuXG52YXIgTkVTVEVEX1VQREFURV9MSU1JVCA9IDUwO1xudmFyIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbnZhciByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsO1xudmFyIE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCA9IDUwO1xudmFyIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7IC8vIE1hcmtzIHRoZSBuZWVkIHRvIHJlc2NoZWR1bGUgcGVuZGluZyBpbnRlcmFjdGlvbnMgYXQgdGhlc2UgbGFuZXNcbi8vIGR1cmluZyB0aGUgY29tbWl0IHBoYXNlLiBUaGlzIGVuYWJsZXMgdGhlbSB0byBiZSB0cmFjZWQgYWNyb3NzIGNvbXBvbmVudHNcbi8vIHRoYXQgc3Bhd24gbmV3IHdvcmsgZHVyaW5nIHJlbmRlci4gRS5nLiBoaWRkZW4gYm91bmRhcmllcywgc3VzcGVuZGVkIFNTUlxuLy8gaHlkcmF0aW9uIG9yIFN1c3BlbnNlTGlzdC5cbi8vIFRPRE86IENhbiB1c2UgYSBiaXRtYXNrIGluc3RlYWQgb2YgYW4gYXJyYXlcblxudmFyIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDsgLy8gSWYgdHdvIHVwZGF0ZXMgYXJlIHNjaGVkdWxlZCB3aXRoaW4gdGhlIHNhbWUgZXZlbnQsIHdlIHNob3VsZCB0cmVhdCB0aGVpclxuLy8gZXZlbnQgdGltZXMgYXMgc2ltdWx0YW5lb3VzLCBldmVuIGlmIHRoZSBhY3R1YWwgY2xvY2sgdGltZSBoYXMgYWR2YW5jZWRcbi8vIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbC5cblxudmFyIGN1cnJlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcbnZhciBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IE5vTGFuZXM7XG52YXIgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzID0gTm9MYW5lczsgLy8gRGV2IG9ubHkgZmxhZyB0aGF0IHRyYWNrcyBpZiBwYXNzaXZlIGVmZmVjdHMgYXJlIGN1cnJlbnRseSBiZWluZyBmbHVzaGVkLlxuLy8gV2Ugd2FybiBhYm91dCBzdGF0ZSB1cGRhdGVzIGZvciB1bm1vdW50ZWQgY29tcG9uZW50cyBkaWZmZXJlbnRseSBpbiB0aGlzIGNhc2UuXG5cbnZhciBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbnZhciBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBudWxsO1xudmFyIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCkge1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290O1xufVxuZnVuY3Rpb24gcmVxdWVzdEV2ZW50VGltZSgpIHtcbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIC8vIFdlJ3JlIGluc2lkZSBSZWFjdCwgc28gaXQncyBmaW5lIHRvIHJlYWQgdGhlIGFjdHVhbCB0aW1lLlxuICAgIHJldHVybiBub3coKTtcbiAgfSAvLyBXZSdyZSBub3QgaW5zaWRlIFJlYWN0LCBzbyB3ZSBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIGJyb3dzZXIgZXZlbnQuXG5cblxuICBpZiAoY3VycmVudEV2ZW50VGltZSAhPT0gTm9UaW1lc3RhbXApIHtcbiAgICAvLyBVc2UgdGhlIHNhbWUgc3RhcnQgdGltZSBmb3IgYWxsIHVwZGF0ZXMgdW50aWwgd2UgZW50ZXIgUmVhY3QgYWdhaW4uXG4gICAgcmV0dXJuIGN1cnJlbnRFdmVudFRpbWU7XG4gIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlIHNpbmNlIFJlYWN0IHlpZWxkZWQuIENvbXB1dGUgYSBuZXcgc3RhcnQgdGltZS5cblxuXG4gIGN1cnJlbnRFdmVudFRpbWUgPSBub3coKTtcbiAgcmV0dXJuIGN1cnJlbnRFdmVudFRpbWU7XG59XG5mdW5jdGlvbiByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcikge1xuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH0gZWxzZSBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpID09PSBJbW1lZGlhdGVQcmlvcml0eSQxID8gU3luY0xhbmUgOiBTeW5jQmF0Y2hlZExhbmU7XG4gIH0gLy8gVGhlIGFsZ29yaXRobSBmb3IgYXNzaWduaW5nIGFuIHVwZGF0ZSB0byBhIGxhbmUgc2hvdWxkIGJlIHN0YWJsZSBmb3IgYWxsXG4gIC8vIHVwZGF0ZXMgYXQgdGhlIHNhbWUgcHJpb3JpdHkgd2l0aGluIHRoZSBzYW1lIGV2ZW50LiBUbyBkbyB0aGlzLCB0aGUgaW5wdXRzXG4gIC8vIHRvIHRoZSBhbGdvcml0aG0gbXVzdCBiZSB0aGUgc2FtZS4gRm9yIGV4YW1wbGUsIHdlIHVzZSB0aGUgYHJlbmRlckxhbmVzYFxuICAvLyB0byBhdm9pZCBjaG9vc2luZyBhIGxhbmUgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgcmVuZGVyaW5nLlxuICAvL1xuICAvLyBIb3dldmVyLCB0aGUgXCJpbmNsdWRlZFwiIGxhbmVzIGNvdWxkIGJlIG11dGF0ZWQgaW4gYmV0d2VlbiB1cGRhdGVzIGluIHRoZVxuICAvLyBzYW1lIGV2ZW50LCBsaWtlIGlmIHlvdSBwZXJmb3JtIGFuIHVwZGF0ZSBpbnNpZGUgYGZsdXNoU3luY2AuIE9yIGFueSBvdGhlclxuICAvLyBjb2RlIHBhdGggdGhhdCBtaWdodCBjYWxsIGBwcmVwYXJlRnJlc2hTdGFja2AuXG4gIC8vXG4gIC8vIFRoZSB0cmljayB3ZSB1c2UgaXMgdG8gY2FjaGUgdGhlIGZpcnN0IG9mIGVhY2ggb2YgdGhlc2UgaW5wdXRzIHdpdGhpbiBhblxuICAvLyBldmVudC4gVGhlbiByZXNldCB0aGUgY2FjaGVkIHZhbHVlcyBvbmNlIHdlIGNhbiBiZSBzdXJlIHRoZSBldmVudCBpcyBvdmVyLlxuICAvLyBPdXIgaGV1cmlzdGljIGZvciB0aGF0IGlzIHdoZW5ldmVyIHdlIGVudGVyIGEgY29uY3VycmVudCB3b3JrIGxvb3AuXG4gIC8vXG4gIC8vIFdlJ2xsIGRvIHRoZSBzYW1lIGZvciBgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzYCBiZWxvdy5cblxuXG4gIGlmIChjdXJyZW50RXZlbnRXaXBMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIGN1cnJlbnRFdmVudFdpcExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcztcbiAgfVxuXG4gIHZhciBpc1RyYW5zaXRpb24gPSByZXF1ZXN0Q3VycmVudFRyYW5zaXRpb24oKSAhPT0gTm9UcmFuc2l0aW9uO1xuXG4gIGlmIChpc1RyYW5zaXRpb24pIHtcbiAgICBpZiAoY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgPSBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCAhPT0gbnVsbCA/IG1vc3RSZWNlbnRseVVwZGF0ZWRSb290LnBlbmRpbmdMYW5lcyA6IE5vTGFuZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmRUcmFuc2l0aW9uTGFuZShjdXJyZW50RXZlbnRXaXBMYW5lcywgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzKTtcbiAgfSAvLyBUT0RPOiBSZW1vdmUgdGhpcyBkZXBlbmRlbmN5IG9uIHRoZSBTY2hlZHVsZXIgcHJpb3JpdHkuXG4gIC8vIFRvIGRvIHRoYXQsIHdlJ3JlIHJlcGxhY2luZyBpdCB3aXRoIGFuIHVwZGF0ZSBsYW5lIHByaW9yaXR5LlxuXG5cbiAgdmFyIHNjaGVkdWxlclByaW9yaXR5ID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTsgLy8gVGhlIG9sZCBiZWhhdmlvciB3YXMgdXNpbmcgdGhlIHByaW9yaXR5IGxldmVsIG9mIHRoZSBTY2hlZHVsZXIuXG4gIC8vIFRoaXMgY291cGxlcyBSZWFjdCB0byB0aGUgU2NoZWR1bGVyIGludGVybmFscywgc28gd2UncmUgcmVwbGFjaW5nIGl0XG4gIC8vIHdpdGggdGhlIGN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkgYWJvdmUuIEFzIGFuIGV4YW1wbGUgb2YgaG93IHRoaXNcbiAgLy8gY291bGQgYmUgcHJvYmxlbWF0aWMsIGlmIHdlJ3JlIG5vdCBpbnNpZGUgYFNjaGVkdWxlci5ydW5XaXRoUHJpb3JpdHlgLFxuICAvLyB0aGVuIHdlJ2xsIGdldCB0aGUgcHJpb3JpdHkgb2YgdGhlIGN1cnJlbnQgcnVubmluZyBTY2hlZHVsZXIgdGFzayxcbiAgLy8gd2hpY2ggaXMgcHJvYmFibHkgbm90IHdoYXQgd2Ugd2FudC5cblxuICB2YXIgbGFuZTtcblxuICBpZiAoIC8vIFRPRE86IFRlbXBvcmFyeS4gV2UncmUgcmVtb3ZpbmcgdGhlIGNvbmNlcHQgb2YgZGlzY3JldGUgdXBkYXRlcy5cbiAgKGV4ZWN1dGlvbkNvbnRleHQgJiBEaXNjcmV0ZUV2ZW50Q29udGV4dCkgIT09IE5vQ29udGV4dCAmJiBzY2hlZHVsZXJQcmlvcml0eSA9PT0gVXNlckJsb2NraW5nUHJpb3JpdHkkMikge1xuICAgIGxhbmUgPSBmaW5kVXBkYXRlTGFuZShJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5LCBjdXJyZW50RXZlbnRXaXBMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVkdWxlckxhbmVQcmlvcml0eSA9IHNjaGVkdWxlclByaW9yaXR5VG9MYW5lUHJpb3JpdHkoc2NoZWR1bGVyUHJpb3JpdHkpO1xuXG4gICAgbGFuZSA9IGZpbmRVcGRhdGVMYW5lKHNjaGVkdWxlckxhbmVQcmlvcml0eSwgY3VycmVudEV2ZW50V2lwTGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RSZXRyeUxhbmUoZmliZXIpIHtcbiAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgYHJlcXVlc3RVcGRhdGVMYW5lYCBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIFN1c3BlbnNlXG4gIC8vIFwicmV0cmllc1wiIFx1MjAxNCBhIHNwZWNpYWwgdXBkYXRlIHRoYXQgYXR0ZW1wdHMgdG8gZmxpcCBhIFN1c3BlbnNlIGJvdW5kYXJ5XG4gIC8vIGZyb20gaXRzIHBsYWNlaG9sZGVyIHN0YXRlIHRvIGl0cyBwcmltYXJ5L3Jlc29sdmVkIHN0YXRlLlxuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH0gZWxzZSBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpID09PSBJbW1lZGlhdGVQcmlvcml0eSQxID8gU3luY0xhbmUgOiBTeW5jQmF0Y2hlZExhbmU7XG4gIH0gLy8gU2VlIGByZXF1ZXN0VXBkYXRlTGFuZWAgZm9yIGV4cGxhbmF0aW9uIG9mIGBjdXJyZW50RXZlbnRXaXBMYW5lc2BcblxuXG4gIGlmIChjdXJyZW50RXZlbnRXaXBMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIGN1cnJlbnRFdmVudFdpcExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcztcbiAgfVxuXG4gIHJldHVybiBmaW5kUmV0cnlMYW5lKGN1cnJlbnRFdmVudFdpcExhbmVzKTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpIHtcbiAgY2hlY2tGb3JOZXN0ZWRVcGRhdGVzKCk7XG4gIHdhcm5BYm91dFJlbmRlclBoYXNlVXBkYXRlc0luREVWKGZpYmVyKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgbGFuZSk7XG5cbiAgaWYgKHJvb3QgPT09IG51bGwpIHtcbiAgICB3YXJuQWJvdXRVcGRhdGVPblVubW91bnRlZEZpYmVySW5ERVYoZmliZXIpO1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE1hcmsgdGhhdCB0aGUgcm9vdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS5cblxuXG4gIG1hcmtSb290VXBkYXRlZChyb290LCBsYW5lLCBldmVudFRpbWUpO1xuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpIHtcbiAgICAvLyBSZWNlaXZlZCBhbiB1cGRhdGUgdG8gYSB0cmVlIHRoYXQncyBpbiB0aGUgbWlkZGxlIG9mIHJlbmRlcmluZy4gTWFya1xuICAgIC8vIHRoYXQgdGhlcmUgd2FzIGFuIGludGVybGVhdmVkIHVwZGF0ZSB3b3JrIG9uIHRoaXMgcm9vdC4gVW5sZXNzIHRoZVxuICAgIC8vIGBkZWZlclJlbmRlclBoYXNlVXBkYXRlVG9OZXh0QmF0Y2hgIGZsYWcgaXMgb2ZmIGFuZCB0aGlzIGlzIGEgcmVuZGVyXG4gICAgLy8gcGhhc2UgdXBkYXRlLiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHRyZWF0IHJlbmRlciBwaGFzZSB1cGRhdGVzIGFzIGlmXG4gICAgLy8gdGhleSB3ZXJlIGludGVybGVhdmVkLCBmb3IgYmFja3dhcmRzIGNvbXBhdCByZWFzb25zLlxuICAgIHtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzLCBsYW5lKTtcbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSkge1xuICAgICAgLy8gVGhlIHJvb3QgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB3aGljaCBtZWFucyB0aGlzIHJlbmRlclxuICAgICAgLy8gZGVmaW5pdGVseSB3b24ndCBmaW5pc2guIFNpbmNlIHdlIGhhdmUgYSBuZXcgdXBkYXRlLCBsZXQncyBtYXJrIGl0IGFzXG4gICAgICAvLyBzdXNwZW5kZWQgbm93LCByaWdodCBiZWZvcmUgbWFya2luZyB0aGUgaW5jb21pbmcgdXBkYXRlLiBUaGlzIGhhcyB0aGVcbiAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIGFuZCBzd2l0Y2hpbmcgdG8gdGhlIHVwZGF0ZS5cbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3Qgb3ZlcnJpZGUgcGluZ3MgdGhhdCBoYXBwZW4gd2hpbGUgd2UndmVcbiAgICAgIC8vIGFscmVhZHkgc3RhcnRlZCByZW5kZXJpbmcuXG4gICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogcmVxdWVzdFVwZGF0ZUxhbmVQcmlvcml0eSBhbHNvIHJlYWRzIHRoZSBwcmlvcml0eS4gUGFzcyB0aGVcbiAgLy8gcHJpb3JpdHkgYXMgYW4gYXJndW1lbnQgdG8gdGhhdCBmdW5jdGlvbiBhbmQgdGhpcyBvbmUuXG5cblxuICB2YXIgcHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG5cbiAgaWYgKGxhbmUgPT09IFN5bmNMYW5lKSB7XG4gICAgaWYgKCAvLyBDaGVjayBpZiB3ZSdyZSBpbnNpZGUgdW5iYXRjaGVkVXBkYXRlc1xuICAgIChleGVjdXRpb25Db250ZXh0ICYgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAvLyBDaGVjayBpZiB3ZSdyZSBub3QgYWxyZWFkeSByZW5kZXJpbmdcbiAgICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHBlbmRpbmcgaW50ZXJhY3Rpb25zIG9uIHRoZSByb290IHRvIGF2b2lkIGxvc2luZyB0cmFjZWQgaW50ZXJhY3Rpb24gZGF0YS5cbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKTsgLy8gVGhpcyBpcyBhIGxlZ2FjeSBlZGdlIGNhc2UuIFRoZSBpbml0aWFsIG1vdW50IG9mIGEgUmVhY3RET00ucmVuZGVyLWVkXG4gICAgICAvLyByb290IGluc2lkZSBvZiBiYXRjaGVkVXBkYXRlcyBzaG91bGQgYmUgc3luY2hyb25vdXMsIGJ1dCBsYXlvdXQgdXBkYXRlc1xuICAgICAgLy8gc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIGJhdGNoLlxuXG4gICAgICBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpO1xuXG4gICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAgIC8vIEZsdXNoIHRoZSBzeW5jaHJvbm91cyB3b3JrIG5vdywgdW5sZXNzIHdlJ3JlIGFscmVhZHkgd29ya2luZyBvciBpbnNpZGVcbiAgICAgICAgLy8gYSBiYXRjaC4gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGluc2lkZSBzY2hlZHVsZVVwZGF0ZU9uRmliZXIgaW5zdGVhZCBvZlxuICAgICAgICAvLyBzY2hlZHVsZUNhbGxiYWNrRm9yRmliZXIgdG8gcHJlc2VydmUgdGhlIGFiaWxpdHkgdG8gc2NoZWR1bGUgYSBjYWxsYmFja1xuICAgICAgICAvLyB3aXRob3V0IGltbWVkaWF0ZWx5IGZsdXNoaW5nIGl0LiBXZSBvbmx5IGRvIHRoaXMgZm9yIHVzZXItaW5pdGlhdGVkXG4gICAgICAgIC8vIHVwZGF0ZXMsIHRvIHByZXNlcnZlIGhpc3RvcmljYWwgYmVoYXZpb3Igb2YgbGVnYWN5IG1vZGUuXG4gICAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBTY2hlZHVsZSBhIGRpc2NyZXRlIHVwZGF0ZSBidXQgb25seSBpZiBpdCdzIG5vdCBTeW5jLlxuICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIERpc2NyZXRlRXZlbnRDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmICggLy8gT25seSB1cGRhdGVzIGF0IHVzZXItYmxvY2tpbmcgcHJpb3JpdHkgb3IgZ3JlYXRlciBhcmUgY29uc2lkZXJlZFxuICAgIC8vIGRpc2NyZXRlLCBldmVuIGluc2lkZSBhIGRpc2NyZXRlIGV2ZW50LlxuICAgIHByaW9yaXR5TGV2ZWwgPT09IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgfHwgcHJpb3JpdHlMZXZlbCA9PT0gSW1tZWRpYXRlUHJpb3JpdHkkMSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIHJlc3VsdCBvZiBhIGRpc2NyZXRlIGV2ZW50LiBUcmFjayB0aGUgbG93ZXN0IHByaW9yaXR5XG4gICAgICAvLyBkaXNjcmV0ZSB1cGRhdGUgcGVyIHJvb3Qgc28gd2UgY2FuIGZsdXNoIHRoZW0gZWFybHksIGlmIG5lZWRlZC5cbiAgICAgIGlmIChyb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID09PSBudWxsKSB7XG4gICAgICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBuZXcgU2V0KFtyb290XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmFkZChyb290KTtcbiAgICAgIH1cbiAgICB9IC8vIFNjaGVkdWxlIG90aGVyIHVwZGF0ZXMgYWZ0ZXIgaW4gY2FzZSB0aGUgY2FsbGJhY2sgaXMgc3luYy5cblxuXG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpO1xuICB9IC8vIFdlIHVzZSB0aGlzIHdoZW4gYXNzaWduaW5nIGEgbGFuZSBmb3IgYSB0cmFuc2l0aW9uIGluc2lkZVxuICAvLyBgcmVxdWVzdFVwZGF0ZUxhbmVgLiBXZSBhc3N1bWUgaXQncyB0aGUgc2FtZSBhcyB0aGUgcm9vdCBiZWluZyB1cGRhdGVkLFxuICAvLyBzaW5jZSBpbiB0aGUgY29tbW9uIGNhc2Ugb2YgYSBzaW5nbGUgcm9vdCBhcHAgaXQgcHJvYmFibHkgaXMuIElmIGl0J3Mgbm90XG4gIC8vIHRoZSBzYW1lIHJvb3QsIHRoZW4gaXQncyBub3QgYSBodWdlIGRlYWwsIHdlIGp1c3QgbWlnaHQgYmF0Y2ggbW9yZSBzdHVmZlxuICAvLyB0b2dldGhlciBtb3JlIHRoYW4gbmVjZXNzYXJ5LlxuXG5cbiAgbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QgPSByb290O1xufSAvLyBUaGlzIGlzIHNwbGl0IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB3ZSBjYW4gbWFyayBhIGZpYmVyIHdpdGggcGVuZGluZ1xuLy8gd29yayB3aXRob3V0IHRyZWF0aW5nIGl0IGFzIGEgdHlwaWNhbCB1cGRhdGUgdGhhdCBvcmlnaW5hdGVzIGZyb20gYW4gZXZlbnQ7XG4vLyBlLmcuIHJldHJ5aW5nIGEgU3VzcGVuc2UgYm91bmRhcnkgaXNuJ3QgYW4gdXBkYXRlLCBidXQgaXQgZG9lcyBzY2hlZHVsZSB3b3JrXG4vLyBvbiBhIGZpYmVyLlxuXG5mdW5jdGlvbiBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChzb3VyY2VGaWJlciwgbGFuZSkge1xuICAvLyBVcGRhdGUgdGhlIHNvdXJjZSBmaWJlcidzIGxhbmVzXG4gIHNvdXJjZUZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhzb3VyY2VGaWJlci5sYW5lcywgbGFuZSk7XG4gIHZhciBhbHRlcm5hdGUgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCBsYW5lKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAoYWx0ZXJuYXRlID09PSBudWxsICYmIChzb3VyY2VGaWJlci5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgfVxuICB9IC8vIFdhbGsgdGhlIHBhcmVudCBwYXRoIHRvIHRoZSByb290IGFuZCB1cGRhdGUgdGhlIGNoaWxkIGV4cGlyYXRpb24gdGltZS5cblxuXG4gIHZhciBub2RlID0gc291cmNlRmliZXI7XG4gIHZhciBwYXJlbnQgPSBzb3VyY2VGaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgIHBhcmVudC5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhwYXJlbnQuY2hpbGRMYW5lcywgbGFuZSk7XG4gICAgYWx0ZXJuYXRlID0gcGFyZW50LmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgbGFuZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKChwYXJlbnQuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKHNvdXJjZUZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIGlmIChub2RlLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICB2YXIgcm9vdCA9IG5vZGUuc3RhdGVOb2RlO1xuICAgIHJldHVybiByb290O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59IC8vIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNjaGVkdWxlIGEgdGFzayBmb3IgYSByb290LiBUaGVyZSdzIG9ubHkgb25lIHRhc2sgcGVyXG4vLyByb290OyBpZiBhIHRhc2sgd2FzIGFscmVhZHkgc2NoZWR1bGVkLCB3ZSdsbCBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHByaW9yaXR5XG4vLyBvZiB0aGUgZXhpc3RpbmcgdGFzayBpcyB0aGUgc2FtZSBhcyB0aGUgcHJpb3JpdHkgb2YgdGhlIG5leHQgbGV2ZWwgdGhhdCB0aGVcbi8vIHJvb3QgaGFzIHdvcmsgb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGV2ZXJ5IHVwZGF0ZSwgYW5kIHJpZ2h0IGJlZm9yZVxuLy8gZXhpdGluZyBhIHRhc2suXG5cblxuZnVuY3Rpb24gZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gIHZhciBleGlzdGluZ0NhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlOyAvLyBDaGVjayBpZiBhbnkgbGFuZXMgYXJlIGJlaW5nIHN0YXJ2ZWQgYnkgb3RoZXIgd29yay4gSWYgc28sIG1hcmsgdGhlbSBhc1xuICAvLyBleHBpcmVkIHNvIHdlIGtub3cgdG8gd29yayBvbiB0aG9zZSBuZXh0LlxuXG4gIG1hcmtTdGFydmVkTGFuZXNBc0V4cGlyZWQocm9vdCwgY3VycmVudFRpbWUpOyAvLyBEZXRlcm1pbmUgdGhlIG5leHQgbGFuZXMgdG8gd29yayBvbiwgYW5kIHRoZWlyIHByaW9yaXR5LlxuXG4gIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiBOb0xhbmVzKTsgLy8gVGhpcyByZXR1cm5zIHRoZSBwcmlvcml0eSBsZXZlbCBjb21wdXRlZCBkdXJpbmcgdGhlIGBnZXROZXh0TGFuZXNgIGNhbGwuXG5cbiAgdmFyIG5ld0NhbGxiYWNrUHJpb3JpdHkgPSByZXR1cm5OZXh0TGFuZXNQcmlvcml0eSgpO1xuXG4gIGlmIChuZXh0TGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IFRoZXJlJ3Mgbm90aGluZyB0byB3b3JrIG9uLlxuICAgIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQ2FsbGJhY2soZXhpc3RpbmdDYWxsYmFja05vZGUpO1xuICAgICAgcm9vdC5jYWxsYmFja05vZGUgPSBudWxsO1xuICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgdGFzay4gV2UgbWF5IGJlIGFibGUgdG8gcmV1c2UgaXQuXG5cblxuICBpZiAoZXhpc3RpbmdDYWxsYmFja05vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgZXhpc3RpbmdDYWxsYmFja1ByaW9yaXR5ID0gcm9vdC5jYWxsYmFja1ByaW9yaXR5O1xuXG4gICAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSA9PT0gbmV3Q2FsbGJhY2tQcmlvcml0eSkge1xuICAgICAgLy8gVGhlIHByaW9yaXR5IGhhc24ndCBjaGFuZ2VkLiBXZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIHRhc2suIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGUgcHJpb3JpdHkgY2hhbmdlZC4gQ2FuY2VsIHRoZSBleGlzdGluZyBjYWxsYmFjay4gV2UnbGwgc2NoZWR1bGUgYSBuZXdcbiAgICAvLyBvbmUgYmVsb3cuXG5cblxuICAgIGNhbmNlbENhbGxiYWNrKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgfSAvLyBTY2hlZHVsZSBhIG5ldyBjYWxsYmFjay5cblxuXG4gIHZhciBuZXdDYWxsYmFja05vZGU7XG5cbiAgaWYgKG5ld0NhbGxiYWNrUHJpb3JpdHkgPT09IFN5bmNMYW5lUHJpb3JpdHkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IFN5bmMgUmVhY3QgY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgb24gYSBzcGVjaWFsXG4gICAgLy8gaW50ZXJuYWwgcXVldWVcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZVN5bmNDYWxsYmFjayhwZXJmb3JtU3luY1dvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH0gZWxzZSBpZiAobmV3Q2FsbGJhY2tQcmlvcml0eSA9PT0gU3luY0JhdGNoZWRMYW5lUHJpb3JpdHkpIHtcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIHBlcmZvcm1TeW5jV29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCA9IGxhbmVQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkobmV3Q2FsbGJhY2tQcmlvcml0eSk7XG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVDYWxsYmFjayhzY2hlZHVsZXJQcmlvcml0eUxldmVsLCBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH1cblxuICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSBuZXdDYWxsYmFja1ByaW9yaXR5O1xuICByb290LmNhbGxiYWNrTm9kZSA9IG5ld0NhbGxiYWNrTm9kZTtcbn0gLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGV2ZXJ5IGNvbmN1cnJlbnQgdGFzaywgaS5lLiBhbnl0aGluZyB0aGF0XG4vLyBnb2VzIHRocm91Z2ggU2NoZWR1bGVyLlxuXG5cbmZ1bmN0aW9uIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdChyb290KSB7XG4gIC8vIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gYSBSZWFjdCBldmVudCwgd2UgY2FuIGNsZWFyIHRoZSBjdXJyZW50XG4gIC8vIGV2ZW50IHRpbWUuIFRoZSBuZXh0IHVwZGF0ZSB3aWxsIGNvbXB1dGUgYSBuZXcgZXZlbnQgdGltZS5cbiAgY3VycmVudEV2ZW50VGltZSA9IE5vVGltZXN0YW1wO1xuICBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9IC8vIEZsdXNoIGFueSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyBiZWZvcmUgZGVjaWRpbmcgd2hpY2ggbGFuZXMgdG8gd29yayBvbixcbiAgLy8gaW4gY2FzZSB0aGV5IHNjaGVkdWxlIGFkZGl0aW9uYWwgd29yay5cblxuXG4gIHZhciBvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICB2YXIgZGlkRmx1c2hQYXNzaXZlRWZmZWN0cyA9IGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcblxuICBpZiAoZGlkRmx1c2hQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgcGFzc2l2ZSBlZmZlY3QgcGhhc2UgbWF5IGhhdmUgY2FuY2VsZWQgdGhlIGN1cnJlbnQgdGFzay5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFzayBub2RlIGZvciB0aGlzIHJvb3Qgd2FzIGNoYW5nZWQuXG4gICAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlICE9PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdGFzayB3YXMgY2FuY2VsZWQuIEV4aXQuIFdlIGRvbid0IG5lZWQgdG8gY2FsbFxuICAgICAgLy8gYGVuc3VyZVJvb3RJc1NjaGVkdWxlZGAgYmVjYXVzZSB0aGUgY2hlY2sgYWJvdmUgaW1wbGllcyBlaXRoZXIgdGhhdFxuICAgICAgLy8gdGhlcmUncyBhIG5ldyB0YXNrLCBvciB0aGF0IHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IC8vIERldGVybWluZSB0aGUgbmV4dCBleHBpcmF0aW9uIHRpbWUgdG8gd29yayBvbiwgdXNpbmcgdGhlIGZpZWxkcyBzdG9yZWRcbiAgLy8gb24gdGhlIHJvb3QuXG5cblxuICB2YXIgbGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiBOb0xhbmVzKTtcblxuICBpZiAobGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBEZWZlbnNpdmUgY29kaW5nLiBUaGlzIGlzIG5ldmVyIGV4cGVjdGVkIHRvIGhhcHBlbi5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBleGl0U3RhdHVzID0gcmVuZGVyUm9vdENvbmN1cnJlbnQocm9vdCwgbGFuZXMpO1xuXG4gIGlmIChpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpIHtcbiAgICAvLyBUaGUgcmVuZGVyIGluY2x1ZGVkIGxhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIC8vIEZvciBleGFtcGxlLCB3aGVuIHVuaGlkaW5nIGEgaGlkZGVuIHRyZWUsIHdlIGluY2x1ZGUgYWxsIHRoZSBsYW5lc1xuICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IHNraXBwZWQgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLiBUaGF0IHNldCBvZlxuICAgIC8vIGxhbmVzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgcmVuZGVyaW5nIHdpdGguXG4gICAgLy9cbiAgICAvLyBTbyB3ZSdsbCB0aHJvdyBvdXQgdGhlIGN1cnJlbnQgd29yayBhbmQgcmVzdGFydC5cbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgfSBlbHNlIGlmIChleGl0U3RhdHVzICE9PSBSb290SW5jb21wbGV0ZSkge1xuICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZXRyeUFmdGVyRXJyb3I7IC8vIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBoeWRyYXRpb24sXG4gICAgICAvLyBkaXNjYXJkIHNlcnZlciByZXNwb25zZSBhbmQgZmFsbCBiYWNrIHRvIGNsaWVudCBzaWRlIHJlbmRlci5cblxuICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICByb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgIH0gLy8gSWYgc29tZXRoaW5nIHRocmV3IGFuIGVycm9yLCB0cnkgcmVuZGVyaW5nIG9uZSBtb3JlIHRpbWUuIFdlJ2xsIHJlbmRlclxuICAgICAgLy8gc3luY2hyb25vdXNseSB0byBibG9jayBjb25jdXJyZW50IGRhdGEgbXV0YXRpb25zLCBhbmQgd2UnbGwgaW5jbHVkZXNcbiAgICAgIC8vIGFsbCBwZW5kaW5nIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLiBJZiBpdCBzdGlsbCBmYWlscyBhZnRlciB0aGUgc2Vjb25kXG4gICAgICAvLyBhdHRlbXB0LCB3ZSdsbCBnaXZlIHVwIGFuZCBjb21taXQgdGhlIHJlc3VsdGluZyB0cmVlLlxuXG5cbiAgICAgIGxhbmVzID0gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCk7XG5cbiAgICAgIGlmIChsYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RmF0YWxFcnJvcmVkKSB7XG4gICAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICAgIHRocm93IGZhdGFsRXJyb3I7XG4gICAgfSAvLyBXZSBub3cgaGF2ZSBhIGNvbnNpc3RlbnQgdHJlZS4gVGhlIG5leHQgc3RlcCBpcyBlaXRoZXIgdG8gY29tbWl0IGl0LFxuICAgIC8vIG9yLCBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLCB3YWl0IHRvIGNvbW1pdCBpdCBhZnRlciBhIHRpbWVvdXQuXG5cblxuICAgIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuICAgIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICAgIHJvb3QuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICAgIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZXhpdFN0YXR1cywgbGFuZXMpO1xuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcblxuICBpZiAocm9vdC5jYWxsYmFja05vZGUgPT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlKSB7XG4gICAgLy8gVGhlIHRhc2sgbm9kZSBzY2hlZHVsZWQgZm9yIHRoaXMgcm9vdCBpcyB0aGUgc2FtZSBvbmUgdGhhdCdzXG4gICAgLy8gY3VycmVudGx5IGV4ZWN1dGVkLiBOZWVkIHRvIHJldHVybiBhIGNvbnRpbnVhdGlvbi5cbiAgICByZXR1cm4gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluaXNoQ29uY3VycmVudFJlbmRlcihyb290LCBleGl0U3RhdHVzLCBsYW5lcykge1xuICBzd2l0Y2ggKGV4aXRTdGF0dXMpIHtcbiAgICBjYXNlIFJvb3RJbmNvbXBsZXRlOlxuICAgIGNhc2UgUm9vdEZhdGFsRXJyb3JlZDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlJvb3QgZGlkIG5vdCBjb21wbGV0ZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIC8vIEZsb3cga25vd3MgYWJvdXQgaW52YXJpYW50LCBzbyBpdCBjb21wbGFpbnMgaWYgSSBhZGQgYSBicmVha1xuICAgIC8vIHN0YXRlbWVudCwgYnV0IGVzbGludCBkb2Vzbid0IGtub3cgYWJvdXQgaW52YXJpYW50LCBzbyBpdCBjb21wbGFpbnNcbiAgICAvLyBpZiBJIGRvLiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgIGNhc2UgUm9vdEVycm9yZWQ6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIHNob3VsZCBoYXZlIGFscmVhZHkgYXR0ZW1wdGVkIHRvIHJldHJ5IHRoaXMgdHJlZS4gSWYgd2UgcmVhY2hlZFxuICAgICAgICAvLyB0aGlzIHBvaW50LCBpdCBlcnJvcmVkIGFnYWluLiBDb21taXQgaXQuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290U3VzcGVuZGVkOlxuICAgICAge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTsgLy8gV2UgaGF2ZSBhbiBhY2NlcHRhYmxlIGxvYWRpbmcgc3RhdGUuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZVxuICAgICAgICAvLyBzaG91bGQgaW1tZWRpYXRlbHkgY29tbWl0IGl0IG9yIHdhaXQgYSBiaXQuXG5cbiAgICAgICAgaWYgKGluY2x1ZGVzT25seVJldHJpZXMobGFuZXMpICYmIC8vIGRvIG5vdCBkZWxheSBpZiB3ZSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGVcbiAgICAgICAgIXNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpKSB7XG4gICAgICAgICAgLy8gVGhpcyByZW5kZXIgb25seSBpbmNsdWRlZCByZXRyaWVzLCBubyB1cGRhdGVzLiBUaHJvdHRsZSBjb21taXR0aW5nXG4gICAgICAgICAgLy8gcmV0cmllcyBzbyB0aGF0IHdlIGRvbid0IHNob3cgdG9vIG1hbnkgbG9hZGluZyBzdGF0ZXMgdG9vIHF1aWNrbHkuXG4gICAgICAgICAgdmFyIG1zVW50aWxUaW1lb3V0ID0gZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSArIEZBTExCQUNLX1RIUk9UVExFX01TIC0gbm93KCk7IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG4gICAgICAgICAgaWYgKG1zVW50aWxUaW1lb3V0ID4gMTApIHtcbiAgICAgICAgICAgIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgTm9MYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICAgICAgLy8gVGhlcmUncyBhZGRpdGlvbmFsIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMoc3VzcGVuZGVkTGFuZXMsIGxhbmVzKSkge1xuICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgcHJlZmVyIHRvIHJlbmRlciB0aGUgZmFsbGJhY2sgb2YgYXQgdGhlIGxhc3RcbiAgICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGxldmVsLiBQaW5nIHRoZSBsYXN0IHN1c3BlbmRlZCBsZXZlbCB0byB0cnlcbiAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nIGl0IGFnYWluLlxuICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgc3VzcGVuZGVkIGxhbmVzIGFyZSBJZGxlPyBTaG91bGQgbm90IHJlc3RhcnQuXG4gICAgICAgICAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICAgICAgICAgIG1hcmtSb290UGluZ2VkKHJvb3QsIHN1c3BlbmRlZExhbmVzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIFRoZSByZW5kZXIgaXMgc3VzcGVuZGVkLCBpdCBoYXNuJ3QgdGltZWQgb3V0LCBhbmQgdGhlcmUncyBub1xuICAgICAgICAgICAgLy8gbG93ZXIgcHJpb3JpdHkgd29yayB0byBkby4gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFja1xuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YSB0byBhcnJpdmUuXG5cblxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3QuYmluZChudWxsLCByb290KSwgbXNVbnRpbFRpbWVvdXQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRoZSB3b3JrIGV4cGlyZWQuIENvbW1pdCBpbW1lZGlhdGVseS5cblxuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290U3VzcGVuZGVkV2l0aERlbGF5OlxuICAgICAge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcblxuICAgICAgICBpZiAoaW5jbHVkZXNPbmx5VHJhbnNpdGlvbnMobGFuZXMpKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIHRyYW5zaXRpb24sIHNvIHdlIHNob3VsZCBleGl0IHdpdGhvdXQgY29tbWl0dGluZyBhXG4gICAgICAgICAgLy8gcGxhY2Vob2xkZXIgYW5kIHdpdGhvdXQgc2NoZWR1bGluZyBhIHRpbWVvdXQuIERlbGF5IGluZGVmaW5pdGVseVxuICAgICAgICAgIC8vIHVudGlsIHdlIHJlY2VpdmUgbW9yZSBkYXRhLlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdHJhbnNpdGlvbiwgYnV0IHdlIGRpZCB0cmlnZ2VyIGFuIGF2b2lkZWQgc3RhdGUuXG4gICAgICAgICAgLy8gU2NoZWR1bGUgYSBwbGFjZWhvbGRlciB0byBkaXNwbGF5IGFmdGVyIGEgc2hvcnQgZGVsYXksIHVzaW5nIHRoZSBKdXN0XG4gICAgICAgICAgLy8gTm90aWNlYWJsZSBEaWZmZXJlbmNlLlxuICAgICAgICAgIC8vIFRPRE86IElzIHRoZSBKTkQgb3B0aW1pemF0aW9uIHdvcnRoIHRoZSBhZGRlZCBjb21wbGV4aXR5PyBJZiB0aGlzIGlzXG4gICAgICAgICAgLy8gdGhlIG9ubHkgcmVhc29uIHdlIHRyYWNrIHRoZSBldmVudCB0aW1lLCB0aGVuIHByb2JhYmx5IG5vdC5cbiAgICAgICAgICAvLyBDb25zaWRlciByZW1vdmluZy5cbiAgICAgICAgICB2YXIgbW9zdFJlY2VudEV2ZW50VGltZSA9IGdldE1vc3RSZWNlbnRFdmVudFRpbWUocm9vdCwgbGFuZXMpO1xuICAgICAgICAgIHZhciBldmVudFRpbWVNcyA9IG1vc3RSZWNlbnRFdmVudFRpbWU7XG4gICAgICAgICAgdmFyIHRpbWVFbGFwc2VkTXMgPSBub3coKSAtIGV2ZW50VGltZU1zO1xuXG4gICAgICAgICAgdmFyIF9tc1VudGlsVGltZW91dCA9IGpuZCh0aW1lRWxhcHNlZE1zKSAtIHRpbWVFbGFwc2VkTXM7IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG5cbiAgICAgICAgICBpZiAoX21zVW50aWxUaW1lb3V0ID4gMTApIHtcbiAgICAgICAgICAgIC8vIEluc3RlYWQgb2YgY29tbWl0dGluZyB0aGUgZmFsbGJhY2sgaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YVxuICAgICAgICAgICAgLy8gdG8gYXJyaXZlLlxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3QuYmluZChudWxsLCByb290KSwgX21zVW50aWxUaW1lb3V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBDb21taXQgdGhlIHBsYWNlaG9sZGVyLlxuXG5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RDb21wbGV0ZWQ6XG4gICAgICB7XG4gICAgICAgIC8vIFRoZSB3b3JrIGNvbXBsZXRlZC4gUmVhZHkgdG8gY29tbWl0LlxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHJvb3QgZXhpdCBzdGF0dXMuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHN1c3BlbmRlZExhbmVzKSB7XG4gIC8vIFdoZW4gc3VzcGVuZGluZywgd2Ugc2hvdWxkIGFsd2F5cyBleGNsdWRlIGxhbmVzIHRoYXQgd2VyZSBwaW5nZWQgb3IgKG1vcmVcbiAgLy8gcmFyZWx5LCBzaW5jZSB3ZSB0cnkgdG8gYXZvaWQgaXQpIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gIC8vIFRPRE86IExvbCBtYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byBmYWN0b3IgdGhpcyBiZXNpZGVzIHRoaXNcbiAgLy8gb2Jub3hpb3VzbHkgbmFtZWQgZnVuY3Rpb24gOilcbiAgc3VzcGVuZGVkTGFuZXMgPSByZW1vdmVMYW5lcyhzdXNwZW5kZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMpO1xuICBzdXNwZW5kZWRMYW5lcyA9IHJlbW92ZUxhbmVzKHN1c3BlbmRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpO1xuICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcyk7XG59IC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBzeW5jaHJvbm91cyB0YXNrcyB0aGF0IGRvbid0IGdvXG4vLyB0aHJvdWdoIFNjaGVkdWxlclxuXG5cbmZ1bmN0aW9uIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290KSB7XG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgdmFyIGxhbmVzO1xuICB2YXIgZXhpdFN0YXR1cztcblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmIGluY2x1ZGVzU29tZUxhbmUocm9vdC5leHBpcmVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSkge1xuICAgIC8vIFRoZXJlJ3MgYSBwYXJ0aWFsIHRyZWUsIGFuZCBhdCBsZWFzdCBvbmUgb2YgaXRzIGxhbmVzIGhhcyBleHBpcmVkLiBGaW5pc2hcbiAgICAvLyByZW5kZXJpbmcgaXQgYmVmb3JlIHJlbmRlcmluZyB0aGUgcmVzdCBvZiB0aGUgZXhwaXJlZCB3b3JrLlxuICAgIGxhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcblxuICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpIHtcbiAgICAgIC8vIFRoZSByZW5kZXIgaW5jbHVkZWQgbGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAvLyBGb3IgZXhhbXBsZSwgd2hlbiB1bmhpZGluZyBhIGhpZGRlbiB0cmVlLCB3ZSBpbmNsdWRlIGFsbCB0aGUgbGFuZXNcbiAgICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IHNraXBwZWQgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLiBUaGF0IHNldCBvZlxuICAgICAgLy8gbGFuZXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbGFuZXMgd2Ugc3RhcnRlZCByZW5kZXJpbmcgd2l0aC5cbiAgICAgIC8vXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbmx5IGhhcHBlbnMgd2hlbiBwYXJ0IG9mIHRoZSB0cmVlIGlzIHJlbmRlcmVkXG4gICAgICAvLyBjb25jdXJyZW50bHkuIElmIHRoZSB3aG9sZSB0cmVlIGlzIHJlbmRlcmVkIHN5bmNocm9ub3VzbHksIHRoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBubyBpbnRlcmxlYXZlZCBldmVudHMuXG4gICAgICBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBsYW5lcyk7XG4gICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBOb0xhbmVzKTtcbiAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgaWYgKHJvb3QudGFnICE9PSBMZWdhY3lSb290ICYmIGV4aXRTdGF0dXMgPT09IFJvb3RFcnJvcmVkKSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZXRyeUFmdGVyRXJyb3I7IC8vIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBoeWRyYXRpb24sXG4gICAgLy8gZGlzY2FyZCBzZXJ2ZXIgcmVzcG9uc2UgYW5kIGZhbGwgYmFjayB0byBjbGllbnQgc2lkZSByZW5kZXIuXG5cbiAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICByb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgfSAvLyBJZiBzb21ldGhpbmcgdGhyZXcgYW4gZXJyb3IsIHRyeSByZW5kZXJpbmcgb25lIG1vcmUgdGltZS4gV2UnbGwgcmVuZGVyXG4gICAgLy8gc3luY2hyb25vdXNseSB0byBibG9jayBjb25jdXJyZW50IGRhdGEgbXV0YXRpb25zLCBhbmQgd2UnbGwgaW5jbHVkZXNcbiAgICAvLyBhbGwgcGVuZGluZyB1cGRhdGVzIGFyZSBpbmNsdWRlZC4gSWYgaXQgc3RpbGwgZmFpbHMgYWZ0ZXIgdGhlIHNlY29uZFxuICAgIC8vIGF0dGVtcHQsIHdlJ2xsIGdpdmUgdXAgYW5kIGNvbW1pdCB0aGUgcmVzdWx0aW5nIHRyZWUuXG5cblxuICAgIGxhbmVzID0gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCk7XG5cbiAgICBpZiAobGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICB0aHJvdyBmYXRhbEVycm9yO1xuICB9IC8vIFdlIG5vdyBoYXZlIGEgY29uc2lzdGVudCB0cmVlLiBCZWNhdXNlIHRoaXMgaXMgYSBzeW5jIHJlbmRlciwgd2VcbiAgLy8gd2lsbCBjb21taXQgaXQgZXZlbiBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLlxuXG5cbiAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGU7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBsYW5lcztcbiAgY29tbWl0Um9vdChyb290KTsgLy8gQmVmb3JlIGV4aXRpbmcsIG1ha2Ugc3VyZSB0aGVyZSdzIGEgY2FsbGJhY2sgc2NoZWR1bGVkIGZvciB0aGUgbmV4dFxuICAvLyBwZW5kaW5nIGxldmVsLlxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZmx1c2hEaXNjcmV0ZVVwZGF0ZXMoKSB7XG4gIC8vIFRPRE86IFNob3VsZCBiZSBhYmxlIHRvIGZsdXNoIGluc2lkZSBiYXRjaGVkVXBkYXRlcywgYnV0IG5vdCBpbnNpZGUgYGFjdGAuXG4gIC8vIEhvd2V2ZXIsIGBhY3RgIHVzZXMgYGJhdGNoZWRVcGRhdGVzYCwgc28gdGhlcmUncyBubyB3YXkgdG8gZGlzdGluZ3Vpc2hcbiAgLy8gdGhvc2UgdHdvIGNhc2VzLiBOZWVkIHRvIGZpeCB0aGlzIGJlZm9yZSBleHBvc2luZyBmbHVzaERpc2NyZXRlVXBkYXRlc1xuICAvLyBhcyBhIHB1YmxpYyBBUEkuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChCYXRjaGVkQ29udGV4dCB8IFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHtcbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ3Vuc3RhYmxlX2ZsdXNoRGlzY3JldGVVcGRhdGVzOiBDYW5ub3QgZmx1c2ggdXBkYXRlcyB3aGVuIFJlYWN0IGlzICcgKyAnYWxyZWFkeSByZW5kZXJpbmcuJyk7XG4gICAgICB9XG4gICAgfSAvLyBXZSdyZSBhbHJlYWR5IHJlbmRlcmluZywgc28gd2UgY2FuJ3Qgc3luY2hyb25vdXNseSBmbHVzaCBwZW5kaW5nIHdvcmsuXG4gICAgLy8gVGhpcyBpcyBwcm9iYWJseSBhIG5lc3RlZCBldmVudCBkaXNwYXRjaCB0cmlnZ2VyZWQgYnkgYSBsaWZlY3ljbGUvZWZmZWN0LFxuICAgIC8vIGxpa2UgYGVsLmZvY3VzKClgLiBFeGl0LlxuXG5cbiAgICByZXR1cm47XG4gIH1cblxuICBmbHVzaFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMoKTsgLy8gSWYgdGhlIGRpc2NyZXRlIHVwZGF0ZXMgc2NoZWR1bGVkIHBhc3NpdmUgZWZmZWN0cywgZmx1c2ggdGhlbSBub3cgc28gdGhhdFxuICAvLyB0aGV5IGZpcmUgYmVmb3JlIHRoZSBuZXh0IHNlcmlhbCBldmVudC5cblxuICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcygpIHtcbiAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgIT09IG51bGwpIHtcbiAgICAvLyBGb3IgZWFjaCByb290IHdpdGggcGVuZGluZyBkaXNjcmV0ZSB1cGRhdGVzLCBzY2hlZHVsZSBhIGNhbGxiYWNrIHRvXG4gICAgLy8gaW1tZWRpYXRlbHkgZmx1c2ggdGhlbS5cbiAgICB2YXIgcm9vdHMgPSByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzO1xuICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBudWxsO1xuICAgIHJvb3RzLmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIG1hcmtEaXNjcmV0ZVVwZGF0ZXNFeHBpcmVkKHJvb3QpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICB9KTtcbiAgfSAvLyBOb3cgZmx1c2ggdGhlIGltbWVkaWF0ZSBxdWV1ZS5cblxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbn1cblxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMkMShmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IEJhdGNoZWRDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGJhdGNoZWRFdmVudFVwZGF0ZXMkMShmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IEV2ZW50Q29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaXNjcmV0ZVVwZGF0ZXMkMShmbiwgYSwgYiwgYywgZCkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IERpc2NyZXRlRXZlbnRDb250ZXh0O1xuXG4gIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQxKFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIsIGZuLmJpbmQobnVsbCwgYSwgYiwgYywgZCkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVuYmF0Y2hlZFVwZGF0ZXMoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCAmPSB+QmF0Y2hlZENvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gTGVnYWN5VW5iYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmbHVzaFN5bmMoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcblxuICBpZiAoKHByZXZFeGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHtcbiAgICAgIGVycm9yKCdmbHVzaFN5bmMgd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhIGxpZmVjeWNsZSBtZXRob2QuIFJlYWN0IGNhbm5vdCAnICsgJ2ZsdXNoIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuIENvbnNpZGVyIG1vdmluZyB0aGlzIGNhbGwgdG8gJyArICdhIHNjaGVkdWxlciB0YXNrIG9yIG1pY3JvIHRhc2suJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZuKGEpO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBCYXRjaGVkQ29udGV4dDtcblxuICB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEoSW1tZWRpYXRlUHJpb3JpdHkkMSwgZm4uYmluZChudWxsLCBhKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7IC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIGhhcHBlbiBldmVuIGlmIGJhdGNoZWRVcGRhdGVzIGlzIGhpZ2hlciB1cFxuICAgICAgLy8gdGhlIHN0YWNrLlxuXG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwdXNoUmVuZGVyTGFuZXMoZmliZXIsIGxhbmVzKSB7XG4gIHB1c2goc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLCBzdWJ0cmVlUmVuZGVyTGFuZXMsIGZpYmVyKTtcbiAgc3VidHJlZVJlbmRlckxhbmVzID0gbWVyZ2VMYW5lcyhzdWJ0cmVlUmVuZGVyTGFuZXMsIGxhbmVzKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgbGFuZXMpO1xufVxuZnVuY3Rpb24gcG9wUmVuZGVyTGFuZXMoZmliZXIpIHtcbiAgc3VidHJlZVJlbmRlckxhbmVzID0gc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLmN1cnJlbnQ7XG4gIHBvcChzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpIHtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuICB2YXIgdGltZW91dEhhbmRsZSA9IHJvb3QudGltZW91dEhhbmRsZTtcblxuICBpZiAodGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0KSB7XG4gICAgLy8gVGhlIHJvb3QgcHJldmlvdXMgc3VzcGVuZGVkIGFuZCBzY2hlZHVsZWQgYSB0aW1lb3V0IHRvIGNvbW1pdCBhIGZhbGxiYWNrXG4gICAgLy8gc3RhdGUuIE5vdyB0aGF0IHdlIGhhdmUgYWRkaXRpb25hbCB3b3JrLCBjYW5jZWwgdGhlIHRpbWVvdXQuXG4gICAgcm9vdC50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0OyAvLyAkRmxvd0ZpeE1lIENvbXBsYWlucyBub1RpbWVvdXQgaXMgbm90IGEgVGltZW91dElELCBkZXNwaXRlIHRoZSBjaGVjayBhYm92ZVxuXG4gICAgY2FuY2VsVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIHZhciBpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG5cbiAgICB3aGlsZSAoaW50ZXJydXB0ZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGludGVycnVwdGVkV29yayA9IGludGVycnVwdGVkV29yay5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgd29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhyb290LmN1cnJlbnQsIG51bGwpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IHN1YnRyZWVSZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBsYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJbmNvbXBsZXRlO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gTm9MYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gTm9MYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuXG4gIHtcbiAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKSB7XG4gIGRvIHtcbiAgICB2YXIgZXJyb3JlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIHRyeSB7XG4gICAgICAvLyBSZXNldCBtb2R1bGUtbGV2ZWwgc3RhdGUgdGhhdCB3YXMgc2V0IGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICByZXNldEhvb2tzQWZ0ZXJUaHJvdygpO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTsgLy8gVE9ETzogSSBmb3VuZCBhbmQgYWRkZWQgdGhpcyBtaXNzaW5nIGxpbmUgd2hpbGUgaW52ZXN0aWdhdGluZyBhXG4gICAgICAvLyBzZXBhcmF0ZSBpc3N1ZS4gV3JpdGUgYSByZWdyZXNzaW9uIHRlc3QgdXNpbmcgc3RyaW5nIHJlZnMuXG5cbiAgICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7XG5cbiAgICAgIGlmIChlcnJvcmVkV29yayA9PT0gbnVsbCB8fCBlcnJvcmVkV29yay5yZXR1cm4gPT09IG51bGwpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgdG8gYmUgd29ya2luZyBvbiBhIG5vbi1yb290IGZpYmVyLiBUaGlzIGlzIGEgZmF0YWwgZXJyb3JcbiAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSdzIG5vIGFuY2VzdG9yIHRoYXQgY2FuIGhhbmRsZSBpdDsgdGhlIHJvb3QgaXNcbiAgICAgICAgLy8gc3VwcG9zZWQgdG8gY2FwdHVyZSBhbGwgZXJyb3JzIHRoYXQgd2VyZW4ndCBjYXVnaHQgYnkgYW4gZXJyb3JcbiAgICAgICAgLy8gYm91bmRhcnkuXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RmF0YWxFcnJvcmVkO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gdGhyb3duVmFsdWU7IC8vIFNldCBgd29ya0luUHJvZ3Jlc3NgIHRvIG51bGwuIFRoaXMgcmVwcmVzZW50cyBhZHZhbmNpbmcgdG8gdGhlIG5leHRcbiAgICAgICAgLy8gc2libGluZywgb3IgdGhlIHBhcmVudCBpZiB0aGVyZSBhcmUgbm8gc2libGluZ3MuIEJ1dCBzaW5jZSB0aGUgcm9vdFxuICAgICAgICAvLyBoYXMgbm8gc2libGluZ3Mgbm9yIGEgcGFyZW50LCB3ZSBzZXQgaXQgdG8gbnVsbC4gVXN1YWxseSB0aGlzIGlzXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgYGNvbXBsZXRlVW5pdE9mV29ya2Agb3IgYHVud2luZFdvcmtgLCBidXQgc2luY2Ugd2UncmVcbiAgICAgICAgLy8gaW50ZW50aW9uYWxseSBub3QgY2FsbGluZyB0aG9zZSwgd2UgbmVlZCBzZXQgaXQgaGVyZS5cbiAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgY2FsbGluZyBgdW53aW5kV29ya2AgdG8gcG9wIHRoZSBjb250ZXh0cy5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIgJiYgZXJyb3JlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgIC8vIFJlY29yZCB0aGUgdGltZSBzcGVudCByZW5kZXJpbmcgYmVmb3JlIGFuIGVycm9yIHdhcyB0aHJvd24uIFRoaXNcbiAgICAgICAgLy8gYXZvaWRzIGluYWNjdXJhdGUgUHJvZmlsZXIgZHVyYXRpb25zIGluIHRoZSBjYXNlIG9mIGFcbiAgICAgICAgLy8gc3VzcGVuZGVkIHJlbmRlci5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShlcnJvcmVkV29yaywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93RXhjZXB0aW9uKHJvb3QsIGVycm9yZWRXb3JrLnJldHVybiwgZXJyb3JlZFdvcmssIHRocm93blZhbHVlLCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgICBjb21wbGV0ZVVuaXRPZldvcmsoZXJyb3JlZFdvcmspO1xuICAgIH0gY2F0Y2ggKHlldEFub3RoZXJUaHJvd25WYWx1ZSkge1xuICAgICAgLy8gU29tZXRoaW5nIGluIHRoZSByZXR1cm4gcGF0aCBhbHNvIHRocmV3LlxuICAgICAgdGhyb3duVmFsdWUgPSB5ZXRBbm90aGVyVGhyb3duVmFsdWU7XG5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gZXJyb3JlZFdvcmsgJiYgZXJyb3JlZFdvcmsgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBib3VuZGFyeSBoYXMgYWxyZWFkeSBlcnJvcmVkLCB0aGVuIHdlIGhhZCB0cm91YmxlIHByb2Nlc3NpbmdcbiAgICAgICAgLy8gdGhlIGVycm9yLiBCdWJibGUgaXQgdG8gdGhlIG5leHQgYm91bmRhcnkuXG4gICAgICAgIGVycm9yZWRXb3JrID0gZXJyb3JlZFdvcmsucmV0dXJuO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGVycm9yZWRXb3JrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cblxuICAgICAgY29udGludWU7XG4gICAgfSAvLyBSZXR1cm4gdG8gdGhlIG5vcm1hbCB3b3JrIGxvb3AuXG5cblxuICAgIHJldHVybjtcbiAgfSB3aGlsZSAodHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHB1c2hEaXNwYXRjaGVyKCkge1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudDtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAgaWYgKHByZXZEaXNwYXRjaGVyID09PSBudWxsKSB7XG4gICAgLy8gVGhlIFJlYWN0IGlzb21vcnBoaWMgcGFja2FnZSBkb2VzIG5vdCBpbmNsdWRlIGEgZGVmYXVsdCBkaXNwYXRjaGVyLlxuICAgIC8vIEluc3RlYWQgdGhlIGZpcnN0IHJlbmRlcmVyIHdpbGwgbGF6aWx5IGF0dGFjaCBvbmUsIGluIG9yZGVyIHRvIGdpdmVcbiAgICAvLyBuaWNlciBlcnJvciBtZXNzYWdlcy5cbiAgICByZXR1cm4gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcmV2RGlzcGF0Y2hlcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG59XG5cbmZ1bmN0aW9uIHB1c2hJbnRlcmFjdGlvbnMocm9vdCkge1xuICB7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucztcbiAgICByZXR1cm4gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucykge1xuICB7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrQ29tbWl0VGltZU9mRmFsbGJhY2soKSB7XG4gIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPSBub3coKTtcbn1cbmZ1bmN0aW9uIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMobGFuZSkge1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBtZXJnZUxhbmVzKGxhbmUsIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyk7XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZDtcbiAgfVxufVxuZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlIHx8IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheTtcbiAgfSAvLyBDaGVjayBpZiB0aGVyZSBhcmUgdXBkYXRlcyB0aGF0IHdlIHNraXBwZWQgdHJlZSB0aGF0IG1pZ2h0IGhhdmUgdW5ibG9ja2VkXG4gIC8vIHRoaXMgcmVuZGVyLlxuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gbnVsbCAmJiAoaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMpIHx8IGluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKSkpIHtcbiAgICAvLyBNYXJrIHRoZSBjdXJyZW50IHJlbmRlciBhcyBzdXNwZW5kZWQgc28gdGhhdCB3ZSBzd2l0Y2ggdG8gd29ya2luZyBvblxuICAgIC8vIHRoZSB1cGRhdGVzIHRoYXQgd2VyZSBza2lwcGVkLiBVc3VhbGx5IHdlIG9ubHkgc3VzcGVuZCBhdCB0aGUgZW5kIG9mXG4gICAgLy8gdGhlIHJlbmRlciBwaGFzZS5cbiAgICAvLyBUT0RPOiBXZSBzaG91bGQgcHJvYmFibHkgYWx3YXlzIG1hcmsgdGhlIHJvb3QgYXMgc3VzcGVuZGVkIGltbWVkaWF0ZWx5XG4gICAgLy8gKGluc2lkZSB0aGlzIGZ1bmN0aW9uKSwgc2luY2UgYnkgc3VzcGVuZGluZyBhdCB0aGUgZW5kIG9mIHRoZSByZW5kZXJcbiAgICAvLyBwaGFzZSBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIG1pc3Rha2Ugd2hlcmUgd2Ugc3VzcGVuZCBsYW5lcyB0aGF0IHdlcmVcbiAgICAvLyBwaW5nZWQgb3IgdXBkYXRlZCB3aGlsZSB3ZSB3ZXJlIHJlbmRlcmluZy5cbiAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHdvcmtJblByb2dyZXNzUm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICB9XG59XG5mdW5jdGlvbiByZW5kZXJEaWRFcnJvcigpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RDb21wbGV0ZWQpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEVycm9yZWQ7XG4gIH1cbn0gLy8gQ2FsbGVkIGR1cmluZyByZW5kZXIgdG8gZGV0ZXJtaW5lIGlmIGFueXRoaW5nIGhhcyBzdXNwZW5kZWQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHdlJ3JlIG5vdCBzdXJlLlxuXG5mdW5jdGlvbiByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSB7XG4gIC8vIElmIHNvbWV0aGluZyBlcnJvcmVkIG9yIGNvbXBsZXRlZCwgd2UgY2FuJ3QgcmVhbGx5IGJlIHN1cmUsXG4gIC8vIHNvIHRob3NlIGFyZSBmYWxzZS5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlO1xufVxuXG5mdW5jdGlvbiByZW5kZXJSb290U3luYyhyb290LCBsYW5lcykge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCk7IC8vIElmIHRoZSByb290IG9yIGxhbmVzIGhhdmUgY2hhbmdlZCwgdGhyb3cgb3V0IHRoZSBleGlzdGluZyBzdGFja1xuICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzKSB7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gIH1cblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7XG5cbiAgZG8ge1xuICAgIHRyeSB7XG4gICAgICB3b3JrTG9vcFN5bmMoKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlKSB7XG4gICAgICBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIGEgc3luYyByZW5kZXIsIHNvIHdlIHNob3VsZCBoYXZlIGZpbmlzaGVkIHRoZSB3aG9sZSB0cmVlLlxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGNvbW1pdCBhbiBpbmNvbXBsZXRlIHJvb3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG59IC8vIFRoZSB3b3JrIGxvb3AgaXMgYW4gZXh0cmVtZWx5IGhvdCBwYXRoLiBUZWxsIENsb3N1cmUgbm90IHRvIGlubGluZSBpdC5cblxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wU3luYygpIHtcbiAgLy8gQWxyZWFkeSB0aW1lZCBvdXQsIHNvIHBlcmZvcm0gd29yayB3aXRob3V0IGNoZWNraW5nIGlmIHdlIG5lZWQgdG8geWllbGQuXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcykge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCk7IC8vIElmIHRoZSByb290IG9yIGxhbmVzIGhhdmUgY2hhbmdlZCwgdGhyb3cgb3V0IHRoZSBleGlzdGluZyBzdGFja1xuICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzKSB7XG4gICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICBzdGFydFdvcmtPblBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpO1xuXG4gIGRvIHtcbiAgICB0cnkge1xuICAgICAgd29ya0xvb3BDb25jdXJyZW50KCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSkge1xuICAgICAgaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG5cbiAge1xuICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgfVxuXG4gIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpO1xuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcblxuICAgIHJldHVybiBSb290SW5jb21wbGV0ZTtcbiAgfSBlbHNlIHtcblxuXG4gICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFJldHVybiB0aGUgZmluYWwgZXhpdCBzdGF0dXMuXG5cbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgfVxufVxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wQ29uY3VycmVudCgpIHtcbiAgLy8gUGVyZm9ybSB3b3JrIHVudGlsIFNjaGVkdWxlciBhc2tzIHVzIHRvIHlpZWxkXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCAmJiAhc2hvdWxkWWllbGQoKSkge1xuICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJmb3JtVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgLy8gbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGlzLCBidXQgcmVseWluZyBvbiBpdCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3RcbiAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICB2YXIgY3VycmVudCA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlO1xuICBzZXRDdXJyZW50RmliZXIodW5pdE9mV29yayk7XG4gIHZhciBuZXh0O1xuXG4gIGlmICggKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgIG5leHQgPSBiZWdpbldvcmskMShjdXJyZW50LCB1bml0T2ZXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEodW5pdE9mV29yaywgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dCA9IGJlZ2luV29yayQxKGN1cnJlbnQsIHVuaXRPZldvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXNldEN1cnJlbnRGaWJlcigpO1xuICB1bml0T2ZXb3JrLm1lbW9pemVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcblxuICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgIC8vIElmIHRoaXMgZG9lc24ndCBzcGF3biBuZXcgd29yaywgY29tcGxldGUgdGhlIGN1cnJlbnQgd29yay5cbiAgICBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICB9XG5cbiAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgLy8gQXR0ZW1wdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCB1bml0IG9mIHdvcmssIHRoZW4gbW92ZSB0byB0aGUgbmV4dFxuICAvLyBzaWJsaW5nLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBzaWJsaW5ncywgcmV0dXJuIHRvIHRoZSBwYXJlbnQgZmliZXIuXG4gIHZhciBjb21wbGV0ZWRXb3JrID0gdW5pdE9mV29yaztcblxuICBkbyB7XG4gICAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAgIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gICAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICAgIHZhciBjdXJyZW50ID0gY29tcGxldGVkV29yay5hbHRlcm5hdGU7XG4gICAgdmFyIHJldHVybkZpYmVyID0gY29tcGxldGVkV29yay5yZXR1cm47IC8vIENoZWNrIGlmIHRoZSB3b3JrIGNvbXBsZXRlZCBvciBpZiBzb21ldGhpbmcgdGhyZXcuXG5cbiAgICBpZiAoKGNvbXBsZXRlZFdvcmsuZmxhZ3MgJiBJbmNvbXBsZXRlKSA9PT0gTm9GbGFncykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGNvbXBsZXRlZFdvcmspO1xuICAgICAgdmFyIG5leHQgPSB2b2lkIDA7XG5cbiAgICAgIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgIG5leHQgPSBjb21wbGV0ZVdvcmsoY3VycmVudCwgY29tcGxldGVkV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgbmV4dCA9IGNvbXBsZXRlV29yayhjdXJyZW50LCBjb21wbGV0ZWRXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpOyAvLyBVcGRhdGUgcmVuZGVyIGR1cmF0aW9uIGFzc3VtaW5nIHdlIGRpZG4ndCBlcnJvci5cblxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGNvbXBsZXRlZFdvcmssIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcblxuICAgICAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQ29tcGxldGluZyB0aGlzIGZpYmVyIHNwYXduZWQgbmV3IHdvcmsuIFdvcmsgb24gdGhhdCBuZXh0LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDaGlsZExhbmVzKGNvbXBsZXRlZFdvcmspO1xuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwgJiYgLy8gRG8gbm90IGFwcGVuZCBlZmZlY3RzIHRvIHBhcmVudHMgaWYgYSBzaWJsaW5nIGZhaWxlZCB0byBjb21wbGV0ZVxuICAgICAgKHJldHVybkZpYmVyLmZsYWdzICYgSW5jb21wbGV0ZSkgPT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gQXBwZW5kIGFsbCB0aGUgZWZmZWN0cyBvZiB0aGUgc3VidHJlZSBhbmQgdGhpcyBmaWJlciBvbnRvIHRoZSBlZmZlY3RcbiAgICAgICAgLy8gbGlzdCBvZiB0aGUgcGFyZW50LiBUaGUgY29tcGxldGlvbiBvcmRlciBvZiB0aGUgY2hpbGRyZW4gYWZmZWN0cyB0aGVcbiAgICAgICAgLy8gc2lkZS1lZmZlY3Qgb3JkZXIuXG4gICAgICAgIGlmIChyZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gY29tcGxldGVkV29yay5maXJzdEVmZmVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21wbGV0ZWRXb3JrLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY29tcGxldGVkV29yay5maXJzdEVmZmVjdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY29tcGxldGVkV29yay5sYXN0RWZmZWN0O1xuICAgICAgICB9IC8vIElmIHRoaXMgZmliZXIgaGFkIHNpZGUtZWZmZWN0cywgd2UgYXBwZW5kIGl0IEFGVEVSIHRoZSBjaGlsZHJlbidzXG4gICAgICAgIC8vIHNpZGUtZWZmZWN0cy4gV2UgY2FuIHBlcmZvcm0gY2VydGFpbiBzaWRlLWVmZmVjdHMgZWFybGllciBpZiBuZWVkZWQsXG4gICAgICAgIC8vIGJ5IGRvaW5nIG11bHRpcGxlIHBhc3NlcyBvdmVyIHRoZSBlZmZlY3QgbGlzdC4gV2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBzY2hlZHVsZSBvdXIgb3duIHNpZGUtZWZmZWN0IG9uIG91ciBvd24gbGlzdCBiZWNhdXNlIGlmIGVuZCB1cFxuICAgICAgICAvLyByZXVzaW5nIGNoaWxkcmVuIHdlJ2xsIHNjaGVkdWxlIHRoaXMgZWZmZWN0IG9udG8gaXRzZWxmIHNpbmNlIHdlJ3JlXG4gICAgICAgIC8vIGF0IHRoZSBlbmQuXG5cblxuICAgICAgICB2YXIgZmxhZ3MgPSBjb21wbGV0ZWRXb3JrLmZsYWdzOyAvLyBTa2lwIGJvdGggTm9Xb3JrIGFuZCBQZXJmb3JtZWRXb3JrIHRhZ3Mgd2hlbiBjcmVhdGluZyB0aGUgZWZmZWN0XG4gICAgICAgIC8vIGxpc3QuIFBlcmZvcm1lZFdvcmsgZWZmZWN0IGlzIHJlYWQgYnkgUmVhY3QgRGV2VG9vbHMgYnV0IHNob3VsZG4ndCBiZVxuICAgICAgICAvLyBjb21taXR0ZWQuXG5cbiAgICAgICAgaWYgKGZsYWdzID4gUGVyZm9ybWVkV29yaykge1xuICAgICAgICAgIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlIGJlY2F1c2Ugc29tZXRoaW5nIHRocmV3LiBQb3AgdmFsdWVzIG9mZlxuICAgICAgLy8gdGhlIHN0YWNrIHdpdGhvdXQgZW50ZXJpbmcgdGhlIGNvbXBsZXRlIHBoYXNlLiBJZiB0aGlzIGlzIGEgYm91bmRhcnksXG4gICAgICAvLyBjYXB0dXJlIHZhbHVlcyBpZiBwb3NzaWJsZS5cbiAgICAgIHZhciBfbmV4dCA9IHVud2luZFdvcmsoY29tcGxldGVkV29yayk7IC8vIEJlY2F1c2UgdGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlLCBkb24ndCByZXNldCBpdHMgZXhwaXJhdGlvbiB0aW1lLlxuXG5cbiAgICAgIGlmIChfbmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBJZiBjb21wbGV0aW5nIHRoaXMgd29yayBzcGF3bmVkIG5ldyB3b3JrLCBkbyB0aGF0IG5leHQuIFdlJ2xsIGNvbWVcbiAgICAgICAgLy8gYmFjayBoZXJlIGFnYWluLlxuICAgICAgICAvLyBTaW5jZSB3ZSdyZSByZXN0YXJ0aW5nLCByZW1vdmUgYW55dGhpbmcgdGhhdCBpcyBub3QgYSBob3N0IGVmZmVjdFxuICAgICAgICAvLyBmcm9tIHRoZSBlZmZlY3QgdGFnLlxuICAgICAgICBfbmV4dC5mbGFncyAmPSBIb3N0RWZmZWN0TWFzaztcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBfbmV4dDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAvLyBSZWNvcmQgdGhlIHJlbmRlciBkdXJhdGlvbiBmb3IgdGhlIGZpYmVyIHRoYXQgZXJyb3JlZC5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShjb21wbGV0ZWRXb3JrLCBmYWxzZSk7IC8vIEluY2x1ZGUgdGhlIHRpbWUgc3BlbnQgd29ya2luZyBvbiBmYWlsZWQgY2hpbGRyZW4gYmVmb3JlIGNvbnRpbnVpbmcuXG5cbiAgICAgICAgdmFyIGFjdHVhbER1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgdmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBhY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAvLyBNYXJrIHRoZSBwYXJlbnQgZmliZXIgYXMgaW5jb21wbGV0ZSBhbmQgY2xlYXIgaXRzIGVmZmVjdCBsaXN0LlxuICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICByZXR1cm5GaWJlci5mbGFncyB8PSBJbmNvbXBsZXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaWJsaW5nRmliZXIgPSBjb21wbGV0ZWRXb3JrLnNpYmxpbmc7XG5cbiAgICBpZiAoc2libGluZ0ZpYmVyICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gZG8gaW4gdGhpcyByZXR1cm5GaWJlciwgZG8gdGhhdCBuZXh0LlxuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBzaWJsaW5nRmliZXI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBPdGhlcndpc2UsIHJldHVybiB0byB0aGUgcGFyZW50XG5cblxuICAgIGNvbXBsZXRlZFdvcmsgPSByZXR1cm5GaWJlcjsgLy8gVXBkYXRlIHRoZSBuZXh0IHRoaW5nIHdlJ3JlIHdvcmtpbmcgb24gaW4gY2FzZSBzb21ldGhpbmcgdGhyb3dzLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrO1xuICB9IHdoaWxlIChjb21wbGV0ZWRXb3JrICE9PSBudWxsKTsgLy8gV2UndmUgcmVhY2hlZCB0aGUgcm9vdC5cblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290Q29tcGxldGVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q2hpbGRMYW5lcyhjb21wbGV0ZWRXb3JrKSB7XG4gIGlmICggLy8gVE9ETzogTW92ZSB0aGlzIGNoZWNrIG91dCBvZiB0aGUgaG90IHBhdGggYnkgbW92aW5nIGByZXNldENoaWxkTGFuZXNgXG4gIC8vIHRvIHN3aXRjaCBzdGF0ZW1lbnQgaW4gYGNvbXBsZXRlV29ya2AuXG4gIChjb21wbGV0ZWRXb3JrLnRhZyA9PT0gTGVnYWN5SGlkZGVuQ29tcG9uZW50IHx8IGNvbXBsZXRlZFdvcmsudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQpICYmIGNvbXBsZXRlZFdvcmsubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCAmJiAhaW5jbHVkZXNTb21lTGFuZShzdWJ0cmVlUmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpICYmIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTGFuZXMpIHtcbiAgICAvLyBUaGUgY2hpbGRyZW4gb2YgdGhpcyBjb21wb25lbnQgYXJlIGhpZGRlbi4gRG9uJ3QgYnViYmxlIHRoZWlyXG4gICAgLy8gZXhwaXJhdGlvbiB0aW1lcy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmV3Q2hpbGRMYW5lcyA9IE5vTGFuZXM7IC8vIEJ1YmJsZSB1cCB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lLlxuXG4gIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgLy8gSW4gcHJvZmlsaW5nIG1vZGUsIHJlc2V0Q2hpbGRFeHBpcmF0aW9uVGltZSBpcyBhbHNvIHVzZWQgdG8gcmVzZXRcbiAgICAvLyBwcm9maWxlciBkdXJhdGlvbnMuXG4gICAgdmFyIGFjdHVhbER1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICB2YXIgdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuc2VsZkJhc2VEdXJhdGlvbjsgLy8gV2hlbiBhIGZpYmVyIGlzIGNsb25lZCwgaXRzIGFjdHVhbER1cmF0aW9uIGlzIHJlc2V0IHRvIDAuIFRoaXMgdmFsdWUgd2lsbFxuICAgIC8vIG9ubHkgYmUgdXBkYXRlZCBpZiB3b3JrIGlzIGRvbmUgb24gdGhlIGZpYmVyIChpLmUuIGl0IGRvZXNuJ3QgYmFpbG91dCkuXG4gICAgLy8gV2hlbiB3b3JrIGlzIGRvbmUsIGl0IHNob3VsZCBidWJibGUgdG8gdGhlIHBhcmVudCdzIGFjdHVhbER1cmF0aW9uLiBJZlxuICAgIC8vIHRoZSBmaWJlciBoYXMgbm90IGJlZW4gY2xvbmVkIHRob3VnaCwgKG1lYW5pbmcgbm8gd29yayB3YXMgZG9uZSksIHRoZW5cbiAgICAvLyB0aGlzIHZhbHVlIHdpbGwgcmVmbGVjdCB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgd29ya2luZyBvbiBhIHByZXZpb3VzXG4gICAgLy8gcmVuZGVyLiBJbiB0aGF0IGNhc2UgaXQgc2hvdWxkIG5vdCBidWJibGUuIFdlIGRldGVybWluZSB3aGV0aGVyIGl0IHdhc1xuICAgIC8vIGNsb25lZCBieSBjb21wYXJpbmcgdGhlIGNoaWxkIHBvaW50ZXIuXG5cbiAgICB2YXIgc2hvdWxkQnViYmxlQWN0dWFsRHVyYXRpb25zID0gY29tcGxldGVkV29yay5hbHRlcm5hdGUgPT09IG51bGwgfHwgY29tcGxldGVkV29yay5jaGlsZCAhPT0gY29tcGxldGVkV29yay5hbHRlcm5hdGUuY2hpbGQ7XG4gICAgdmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbmV3Q2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobmV3Q2hpbGRMYW5lcywgbWVyZ2VMYW5lcyhjaGlsZC5sYW5lcywgY2hpbGQuY2hpbGRMYW5lcykpO1xuXG4gICAgICBpZiAoc2hvdWxkQnViYmxlQWN0dWFsRHVyYXRpb25zKSB7XG4gICAgICAgIGFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICB0cmVlQmFzZUR1cmF0aW9uICs9IGNoaWxkLnRyZWVCYXNlRHVyYXRpb247XG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgdmFyIGlzVGltZWRPdXRTdXNwZW5zZSA9IGNvbXBsZXRlZFdvcmsudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBjb21wbGV0ZWRXb3JrLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG5cbiAgICBpZiAoaXNUaW1lZE91dFN1c3BlbnNlKSB7XG4gICAgICAvLyBEb24ndCBjb3VudCB0aW1lIHNwZW50IGluIGEgdGltZWQgb3V0IFN1c3BlbnNlIHN1YnRyZWUgYXMgcGFydCBvZiB0aGUgYmFzZSBkdXJhdGlvbi5cbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgIGlmIChwcmltYXJ5Q2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgICAgICB0cmVlQmFzZUR1cmF0aW9uIC09IHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbiA9IGFjdHVhbER1cmF0aW9uO1xuICAgIGNvbXBsZXRlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiA9IHRyZWVCYXNlRHVyYXRpb247XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9jaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICB3aGlsZSAoX2NoaWxkICE9PSBudWxsKSB7XG4gICAgICBuZXdDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhuZXdDaGlsZExhbmVzLCBtZXJnZUxhbmVzKF9jaGlsZC5sYW5lcywgX2NoaWxkLmNoaWxkTGFuZXMpKTtcbiAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBsZXRlZFdvcmsuY2hpbGRMYW5lcyA9IG5ld0NoaWxkTGFuZXM7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJvb3Qocm9vdCkge1xuICB2YXIgcmVuZGVyUHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG4gIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGNvbW1pdFJvb3RJbXBsLmJpbmQobnVsbCwgcm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkpO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tbWl0Um9vdEltcGwocm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICBkbyB7XG4gICAgLy8gYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgY2FsbCBgZmx1c2hTeW5jVXBkYXRlUXVldWVgIGF0IHRoZSBlbmQsIHdoaWNoXG4gICAgLy8gbWVhbnMgYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgc29tZXRpbWVzIHJlc3VsdCBpbiBhZGRpdGlvbmFsXG4gICAgLy8gcGFzc2l2ZSBlZmZlY3RzLiBTbyB3ZSBuZWVkIHRvIGtlZXAgZmx1c2hpbmcgaW4gYSBsb29wIHVudGlsIHRoZXJlIGFyZVxuICAgIC8vIG5vIG1vcmUgcGVuZGluZyBlZmZlY3RzLlxuICAgIC8vIFRPRE86IE1pZ2h0IGJlIGJldHRlciBpZiBgZmx1c2hQYXNzaXZlRWZmZWN0c2AgZGlkIG5vdCBhdXRvbWF0aWNhbGx5XG4gICAgLy8gZmx1c2ggc3luY2hyb25vdXMgd29yayBhdCB0aGUgZW5kLCB0byBhdm9pZCBmYWN0b3JpbmcgaGF6YXJkcyBsaWtlIHRoaXMuXG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICB9IHdoaWxlIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyAhPT0gbnVsbCk7XG5cbiAgZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCk7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuZmluaXNoZWRXb3JrO1xuICB2YXIgbGFuZXMgPSByb290LmZpbmlzaGVkTGFuZXM7XG5cbiAgaWYgKGZpbmlzaGVkV29yayA9PT0gbnVsbCkge1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoZmluaXNoZWRXb3JrICE9PSByb290LmN1cnJlbnQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGNvbW1pdCB0aGUgc2FtZSB0cmVlIGFzIGJlZm9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfSAvLyBjb21taXRSb290IG5ldmVyIHJldHVybnMgYSBjb250aW51YXRpb247IGl0IGFsd2F5cyBmaW5pc2hlcyBzeW5jaHJvbm91c2x5LlxuICAvLyBTbyB3ZSBjYW4gY2xlYXIgdGhlc2Ugbm93IHRvIGFsbG93IGEgbmV3IGNhbGxiYWNrIHRvIGJlIHNjaGVkdWxlZC5cblxuXG4gIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDsgLy8gVXBkYXRlIHRoZSBmaXJzdCBhbmQgbGFzdCBwZW5kaW5nIHRpbWVzIG9uIHRoaXMgcm9vdC4gVGhlIG5ldyBmaXJzdFxuICAvLyBwZW5kaW5nIHRpbWUgaXMgd2hhdGV2ZXIgaXMgbGVmdCBvbiB0aGUgcm9vdCBmaWJlci5cblxuICB2YXIgcmVtYWluaW5nTGFuZXMgPSBtZXJnZUxhbmVzKGZpbmlzaGVkV29yay5sYW5lcywgZmluaXNoZWRXb3JrLmNoaWxkTGFuZXMpO1xuICBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzKTsgLy8gQ2xlYXIgYWxyZWFkeSBmaW5pc2hlZCBkaXNjcmV0ZSB1cGRhdGVzIGluIGNhc2UgdGhhdCBhIGxhdGVyIGNhbGwgb2ZcbiAgLy8gYGZsdXNoRGlzY3JldGVVcGRhdGVzYCBzdGFydHMgYSB1c2VsZXNzIHJlbmRlciBwYXNzIHdoaWNoIG1heSBjYW5jZWxzXG4gIC8vIGEgc2NoZWR1bGVkIHRpbWVvdXQuXG5cbiAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgIT09IG51bGwpIHtcbiAgICBpZiAoIWhhc0Rpc2NyZXRlTGFuZXMocmVtYWluaW5nTGFuZXMpICYmIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMuaGFzKHJvb3QpKSB7XG4gICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmRlbGV0ZShyb290KTtcbiAgICB9XG4gIH1cblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KSB7XG4gICAgLy8gV2UgY2FuIHJlc2V0IHRoZXNlIG5vdyB0aGF0IHRoZXkgYXJlIGZpbmlzaGVkLlxuICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgfSAvLyBHZXQgdGhlIGxpc3Qgb2YgZWZmZWN0cy5cblxuXG4gIHZhciBmaXJzdEVmZmVjdDtcblxuICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzID4gUGVyZm9ybWVkV29yaykge1xuICAgIC8vIEEgZmliZXIncyBlZmZlY3QgbGlzdCBjb25zaXN0cyBvbmx5IG9mIGl0cyBjaGlsZHJlbiwgbm90IGl0c2VsZi4gU28gaWZcbiAgICAvLyB0aGUgcm9vdCBoYXMgYW4gZWZmZWN0LCB3ZSBuZWVkIHRvIGFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LiBUaGVcbiAgICAvLyByZXN1bHRpbmcgbGlzdCBpcyB0aGUgc2V0IHRoYXQgd291bGQgYmVsb25nIHRvIHRoZSByb290J3MgcGFyZW50LCBpZiBpdFxuICAgIC8vIGhhZCBvbmU7IHRoYXQgaXMsIGFsbCB0aGUgZWZmZWN0cyBpbiB0aGUgdHJlZSBpbmNsdWRpbmcgdGhlIHJvb3QuXG4gICAgaWYgKGZpbmlzaGVkV29yay5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICBmaW5pc2hlZFdvcmsubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gZmluaXNoZWRXb3JrO1xuICAgICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGVyZSBpcyBubyBlZmZlY3Qgb24gdGhlIHJvb3QuXG4gICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gIH1cblxuICBpZiAoZmlyc3RFZmZlY3QgIT09IG51bGwpIHtcblxuICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTsgLy8gUmVzZXQgdGhpcyB0byBudWxsIGJlZm9yZSBjYWxsaW5nIGxpZmVjeWNsZXNcblxuICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7IC8vIFRoZSBjb21taXQgcGhhc2UgaXMgYnJva2VuIGludG8gc2V2ZXJhbCBzdWItcGhhc2VzLiBXZSBkbyBhIHNlcGFyYXRlIHBhc3NcbiAgICAvLyBvZiB0aGUgZWZmZWN0IGxpc3QgZm9yIGVhY2ggcGhhc2U6IGFsbCBtdXRhdGlvbiBlZmZlY3RzIGNvbWUgYmVmb3JlIGFsbFxuICAgIC8vIGxheW91dCBlZmZlY3RzLCBhbmQgc28gb24uXG4gICAgLy8gVGhlIGZpcnN0IHBoYXNlIGEgXCJiZWZvcmUgbXV0YXRpb25cIiBwaGFzZS4gV2UgdXNlIHRoaXMgcGhhc2UgdG8gcmVhZCB0aGVcbiAgICAvLyBzdGF0ZSBvZiB0aGUgaG9zdCB0cmVlIHJpZ2h0IGJlZm9yZSB3ZSBtdXRhdGUgaXQuIFRoaXMgaXMgd2hlcmVcbiAgICAvLyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSBpcyBjYWxsZWQuXG5cbiAgICBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBwcmVwYXJlRm9yQ29tbWl0KHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gZmFsc2U7XG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzLCBudWxsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBlcnJvcik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpOyAvLyBXZSBubyBsb25nZXIgbmVlZCB0byB0cmFjayB0aGUgYWN0aXZlIGluc3RhbmNlIGZpYmVyXG5cblxuICAgIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBNYXJrIHRoZSBjdXJyZW50IGNvbW1pdCB0aW1lIHRvIGJlIHNoYXJlZCBieSBhbGwgUHJvZmlsZXJzIGluIHRoaXNcbiAgICAgIC8vIGJhdGNoLiBUaGlzIGVuYWJsZXMgdGhlbSB0byBiZSBncm91cGVkIGxhdGVyLlxuICAgICAgcmVjb3JkQ29tbWl0VGltZSgpO1xuICAgIH0gLy8gVGhlIG5leHQgcGhhc2UgaXMgdGhlIG11dGF0aW9uIHBoYXNlLCB3aGVyZSB3ZSBtdXRhdGUgdGhlIGhvc3QgdHJlZS5cblxuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0TXV0YXRpb25FZmZlY3RzLCBudWxsLCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBfZXJyb3IpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTtcblxuICAgIHJlc2V0QWZ0ZXJDb21taXQocm9vdC5jb250YWluZXJJbmZvKTsgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgdHJlZSBpcyBub3cgdGhlIGN1cnJlbnQgdHJlZS4gVGhpcyBtdXN0IGNvbWUgYWZ0ZXJcbiAgICAvLyB0aGUgbXV0YXRpb24gcGhhc2UsIHNvIHRoYXQgdGhlIHByZXZpb3VzIHRyZWUgaXMgc3RpbGwgY3VycmVudCBkdXJpbmdcbiAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCwgYnV0IGJlZm9yZSB0aGUgbGF5b3V0IHBoYXNlLCBzbyB0aGF0IHRoZSBmaW5pc2hlZFxuICAgIC8vIHdvcmsgaXMgY3VycmVudCBkdXJpbmcgY29tcG9uZW50RGlkTW91bnQvVXBkYXRlLlxuXG4gICAgcm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrOyAvLyBUaGUgbmV4dCBwaGFzZSBpcyB0aGUgbGF5b3V0IHBoYXNlLCB3aGVyZSB3ZSBjYWxsIGVmZmVjdHMgdGhhdCByZWFkXG4gICAgLy8gdGhlIGhvc3QgdHJlZSBhZnRlciBpdCdzIGJlZW4gbXV0YXRlZC4gVGhlIGlkaW9tYXRpYyB1c2UgY2FzZSBmb3IgdGhpcyBpc1xuICAgIC8vIGxheW91dCwgYnV0IGNsYXNzIGNvbXBvbmVudCBsaWZlY3ljbGVzIGFsc28gZmlyZSBoZXJlIGZvciBsZWdhY3kgcmVhc29ucy5cblxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdExheW91dEVmZmVjdHMsIG51bGwsIHJvb3QsIGxhbmVzKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZXJyb3IyID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgX2Vycm9yMik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpO1xuXG4gICAgbmV4dEVmZmVjdCA9IG51bGw7IC8vIFRlbGwgU2NoZWR1bGVyIHRvIHlpZWxkIGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1lLCBzbyB0aGUgYnJvd3NlciBoYXMgYW5cbiAgICAvLyBvcHBvcnR1bml0eSB0byBwYWludC5cblxuICAgIHJlcXVlc3RQYWludCgpO1xuXG4gICAge1xuICAgICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICAgIH1cblxuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgfSBlbHNlIHtcbiAgICAvLyBObyBlZmZlY3RzLlxuICAgIHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yazsgLy8gTWVhc3VyZSB0aGVzZSBhbnl3YXkgc28gdGhlIGZsYW1lZ3JhcGggZXhwbGljaXRseSBzaG93cyB0aGF0IHRoZXJlIHdlcmVcbiAgICAvLyBubyBlZmZlY3RzLlxuICAgIC8vIFRPRE86IE1heWJlIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIHJlcG9ydCB0aGlzLlxuXG4gICAge1xuICAgICAgcmVjb3JkQ29tbWl0VGltZSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhciByb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzID0gcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHM7XG5cbiAgaWYgKHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgLy8gVGhpcyBjb21taXQgaGFzIHBhc3NpdmUgZWZmZWN0cy4gU3Rhc2ggYSByZWZlcmVuY2UgdG8gdGhlbS4gQnV0IGRvbid0XG4gICAgLy8gc2NoZWR1bGUgYSBjYWxsYmFjayB1bnRpbCBhZnRlciBmbHVzaGluZyBsYXlvdXQgd29yay5cbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICAgIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gcm9vdDtcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IGxhbmVzO1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID0gcmVuZGVyUHJpb3JpdHlMZXZlbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBhcmUgZG9uZSB3aXRoIHRoZSBlZmZlY3QgY2hhaW4gYXQgdGhpcyBwb2ludCBzbyBsZXQncyBjbGVhciB0aGVcbiAgICAvLyBuZXh0RWZmZWN0IHBvaW50ZXJzIHRvIGFzc2lzdCB3aXRoIEdDLiBJZiB3ZSBoYXZlIHBhc3NpdmUgZWZmZWN0cywgd2UnbGxcbiAgICAvLyBjbGVhciB0aGlzIGluIGZsdXNoUGFzc2l2ZUVmZmVjdHMuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXh0TmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgIG5leHRFZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG5cbiAgICAgIGlmIChuZXh0RWZmZWN0LmZsYWdzICYgRGVsZXRpb24pIHtcbiAgICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMobmV4dEVmZmVjdCk7XG4gICAgICB9XG5cbiAgICAgIG5leHRFZmZlY3QgPSBuZXh0TmV4dEVmZmVjdDtcbiAgICB9XG4gIH0gLy8gUmVhZCB0aGlzIGFnYWluLCBzaW5jZSBhbiBlZmZlY3QgbWlnaHQgaGF2ZSB1cGRhdGVkIGl0XG5cblxuICByZW1haW5pbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzOyAvLyBDaGVjayBpZiB0aGVyZSdzIHJlbWFpbmluZyB3b3JrIG9uIHRoaXMgcm9vdFxuXG4gIGlmIChyZW1haW5pbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHtcbiAgICAgIGlmIChzcGF3bmVkV29ya0R1cmluZ1JlbmRlciAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZXhwaXJhdGlvblRpbWVzID0gc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXI7XG4gICAgICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGlyYXRpb25UaW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGV4cGlyYXRpb25UaW1lc1tpXSwgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHJlbWFpbmluZ0xhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlcmUncyBubyByZW1haW5pbmcgd29yaywgd2UgY2FuIGNsZWFyIHRoZSBzZXQgb2YgYWxyZWFkeSBmYWlsZWRcbiAgICAvLyBlcnJvciBib3VuZGFyaWVzLlxuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAoIXJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBwYXNzaXZlIGVmZmVjdHMsIHRoZW4gd2UgY2FuIGNvbXBsZXRlIHRoZSBwZW5kaW5nIGludGVyYWN0aW9ucy5cbiAgICAgIC8vIE90aGVyd2lzZSwgd2UnbGwgd2FpdCB1bnRpbCBhZnRlciB0aGUgcGFzc2l2ZSBlZmZlY3RzIGFyZSBmbHVzaGVkLlxuICAgICAgLy8gV2FpdCB0byBkbyB0aGlzIHVudGlsIGFmdGVyIHJlbWFpbmluZyB3b3JrIGhhcyBiZWVuIHNjaGVkdWxlZCxcbiAgICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgcHJlbWF0dXJlbHkgc2lnbmFsIGNvbXBsZXRlIGZvciBpbnRlcmFjdGlvbnMgd2hlbiB0aGVyZSdzIGUuZy4gaGlkZGVuIHdvcmsuXG4gICAgICBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocmVtYWluaW5nTGFuZXMgPT09IFN5bmNMYW5lKSB7XG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcm9vdCBzeW5jaHJvbm91c2x5IHJlLXJlbmRlcnMgd2l0aG91dFxuICAgIC8vIGZpbmlzaGluZy4gSWYgdGhlcmUgYXJlIHRvbyBtYW55LCBpdCBpbmRpY2F0ZXMgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AuXG4gICAgaWYgKHJvb3QgPT09IHJvb3RXaXRoTmVzdGVkVXBkYXRlcykge1xuICAgICAgbmVzdGVkVXBkYXRlQ291bnQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICAgICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gcm9vdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICB9XG5cbiAgb25Db21taXRSb290KGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuXG4gIHtcbiAgICBvbkNvbW1pdFJvb3QkMSgpO1xuICB9IC8vIEFsd2F5cyBjYWxsIHRoaXMgYmVmb3JlIGV4aXRpbmcgYGNvbW1pdFJvb3RgLCB0byBlbnN1cmUgdGhhdCBhbnlcbiAgLy8gYWRkaXRpb25hbCB3b3JrIG9uIHRoaXMgcm9vdCBpcyBzY2hlZHVsZWQuXG5cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuXG4gIGlmIChoYXNVbmNhdWdodEVycm9yKSB7XG4gICAgaGFzVW5jYXVnaHRFcnJvciA9IGZhbHNlO1xuICAgIHZhciBfZXJyb3IzID0gZmlyc3RVbmNhdWdodEVycm9yO1xuICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IG51bGw7XG4gICAgdGhyb3cgX2Vycm9yMztcbiAgfVxuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIExlZ2FjeVVuYmF0Y2hlZENvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAvLyBhIFJlYWN0RE9NLnJlbmRlci1lZCByb290IGluc2lkZSBvZiBiYXRjaGVkVXBkYXRlcy4gVGhlIGNvbW1pdCBmaXJlZFxuICAgIC8vIHN5bmNocm9ub3VzbHksIGJ1dCBsYXlvdXQgdXBkYXRlcyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgdGhlIGVuZFxuICAgIC8vIG9mIHRoZSBiYXRjaC5cblxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gSWYgbGF5b3V0IHdvcmsgd2FzIHNjaGVkdWxlZCwgZmx1c2ggaXQgbm93LlxuXG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMoKSB7XG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcblxuICAgIGlmICghc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyICYmIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKChuZXh0RWZmZWN0LmZsYWdzICYgRGVsZXRpb24pICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIGlmIChkb2VzRmliZXJDb250YWluKG5leHRFZmZlY3QsIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSkpIHtcbiAgICAgICAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgb3V0IG9mIHRoZSBob3QgcGF0aCB1c2luZyBhIGRlZGljYXRlZCBlZmZlY3QgdGFnLlxuICAgICAgICBpZiAobmV4dEVmZmVjdC50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIGlzU3VzcGVuc2VCb3VuZGFyeUJlaW5nSGlkZGVuKGN1cnJlbnQsIG5leHRFZmZlY3QpICYmIGRvZXNGaWJlckNvbnRhaW4obmV4dEVmZmVjdCwgZm9jdXNlZEluc3RhbmNlSGFuZGxlKSkge1xuICAgICAgICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKChmbGFncyAmIFNuYXBzaG90KSAhPT0gTm9GbGFncykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25MaWZlQ3ljbGVzKGN1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBwYXNzaXZlIGVmZmVjdHMsIHNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gZmx1c2ggYXRcbiAgICAgIC8vIHRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eS5cbiAgICAgIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TXV0YXRpb25FZmZlY3RzKHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gVE9ETzogU2hvdWxkIHByb2JhYmx5IG1vdmUgdGhlIGJ1bGsgb2YgdGhpcyBmdW5jdGlvbiB0byBjb21taXRXb3JrLlxuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKGZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgICBjb21taXRSZXNldFRleHRDb250ZW50KG5leHRFZmZlY3QpO1xuICAgIH1cblxuICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY29tbWl0RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgfVxuICAgIH0gLy8gVGhlIGZvbGxvd2luZyBzd2l0Y2ggc3RhdGVtZW50IGlzIG9ubHkgY29uY2VybmVkIGFib3V0IHBsYWNlbWVudCxcbiAgICAvLyB1cGRhdGVzLCBhbmQgZGVsZXRpb25zLiBUbyBhdm9pZCBuZWVkaW5nIHRvIGFkZCBhIGNhc2UgZm9yIGV2ZXJ5IHBvc3NpYmxlXG4gICAgLy8gYml0bWFwIHZhbHVlLCB3ZSByZW1vdmUgdGhlIHNlY29uZGFyeSBlZmZlY3RzIGZyb20gdGhlIGVmZmVjdCB0YWcgYW5kXG4gICAgLy8gc3dpdGNoIG9uIHRoYXQgdmFsdWUuXG5cblxuICAgIHZhciBwcmltYXJ5RmxhZ3MgPSBmbGFncyAmIChQbGFjZW1lbnQgfCBVcGRhdGUgfCBEZWxldGlvbiB8IEh5ZHJhdGluZyk7XG5cbiAgICBzd2l0Y2ggKHByaW1hcnlGbGFncykge1xuICAgICAgY2FzZSBQbGFjZW1lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXRQbGFjZW1lbnQobmV4dEVmZmVjdCk7IC8vIENsZWFyIHRoZSBcInBsYWNlbWVudFwiIGZyb20gZWZmZWN0IHRhZyBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGlzIGlzXG4gICAgICAgICAgLy8gaW5zZXJ0ZWQsIGJlZm9yZSBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cbiAgICAgICAgICAvLyBUT0RPOiBmaW5kRE9NTm9kZSBkb2Vzbid0IHJlbHkgb24gdGhpcyBhbnkgbW9yZSBidXQgaXNNb3VudGVkIGRvZXNcbiAgICAgICAgICAvLyBhbmQgaXNNb3VudGVkIGlzIGRlcHJlY2F0ZWQgYW55d2F5IHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIGtpbGwgdGhpcy5cblxuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gflBsYWNlbWVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFBsYWNlbWVudEFuZFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFBsYWNlbWVudFxuICAgICAgICAgIGNvbW1pdFBsYWNlbWVudChuZXh0RWZmZWN0KTsgLy8gQ2xlYXIgdGhlIFwicGxhY2VtZW50XCIgZnJvbSBlZmZlY3QgdGFnIHNvIHRoYXQgd2Uga25vdyB0aGF0IHRoaXMgaXNcbiAgICAgICAgICAvLyBpbnNlcnRlZCwgYmVmb3JlIGFueSBsaWZlLWN5Y2xlcyBsaWtlIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkLlxuXG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+UGxhY2VtZW50OyAvLyBVcGRhdGVcblxuICAgICAgICAgIHZhciBfY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSHlkcmF0aW5nOlxuICAgICAgICB7XG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+SHlkcmF0aW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSHlkcmF0aW5nQW5kVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+SHlkcmF0aW5nOyAvLyBVcGRhdGVcblxuICAgICAgICAgIHZhciBfY3VycmVudDIgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50MiwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2N1cnJlbnQzID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudDMsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRGVsZXRpb246XG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXREZWxldGlvbihyb290LCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMYXlvdXRFZmZlY3RzKHJvb3QsIGNvbW1pdHRlZExhbmVzKSB7XG5cblxuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKGZsYWdzICYgKFVwZGF0ZSB8IENhbGxiYWNrKSkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgIGNvbW1pdExpZmVDeWNsZXMocm9vdCwgY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgIGNvbW1pdEF0dGFjaFJlZihuZXh0RWZmZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0cygpIHtcbiAgLy8gUmV0dXJucyB3aGV0aGVyIHBhc3NpdmUgZWZmZWN0cyB3ZXJlIGZsdXNoZWQuXG4gIGlmIChwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSAhPT0gTm9Qcmlvcml0eSQxKSB7XG4gICAgdmFyIHByaW9yaXR5TGV2ZWwgPSBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA+IE5vcm1hbFByaW9yaXR5JDEgPyBOb3JtYWxQcmlvcml0eSQxIDogcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHk7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSBOb1ByaW9yaXR5JDE7XG5cbiAgICB7XG4gICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCwgZmx1c2hQYXNzaXZlRWZmZWN0c0ltcGwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RNb3VudChmaWJlciwgZWZmZWN0KSB7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudC5wdXNoKGVmZmVjdCwgZmliZXIpO1xuXG4gIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdFVubW91bnQoZmliZXIsIGVmZmVjdCkge1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudC5wdXNoKGVmZmVjdCwgZmliZXIpO1xuXG4gIHtcbiAgICBmaWJlci5mbGFncyB8PSBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZS5mbGFncyB8PSBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZVBhc3NpdmVFZmZlY3RDcmVhdGUoZWZmZWN0KSB7XG4gIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICBlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSgpO1xufVxuXG5mdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCgpIHtcbiAgaWYgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHJvb3QgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cztcbiAgdmFyIGxhbmVzID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXM7XG4gIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbiAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBOb0xhbmVzO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgZmx1c2ggcGFzc2l2ZSBlZmZlY3RzIHdoaWxlIGFscmVhZHkgcmVuZGVyaW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gIH1cblxuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTsgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCBBTEwgcGVuZGluZyBwYXNzaXZlIGVmZmVjdCBkZXN0cm95IGZ1bmN0aW9ucyBhcmUgY2FsbGVkXG4gIC8vIGJlZm9yZSBBTlkgcGFzc2l2ZSBlZmZlY3QgY3JlYXRlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLlxuICAvLyBPdGhlcndpc2UgZWZmZWN0cyBpbiBzaWJsaW5nIGNvbXBvbmVudHMgbWlnaHQgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlci5cbiAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBtYXkgdW5pbnRlbnRpb25hbGx5IG92ZXJyaWRlIGEgcmVmXG4gIC8vIHZhbHVlIHNldCBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudC5cbiAgLy8gTGF5b3V0IGVmZmVjdHMgaGF2ZSB0aGUgc2FtZSBjb25zdHJhaW50LlxuICAvLyBGaXJzdCBwYXNzOiBEZXN0cm95IHN0YWxlIHBhc3NpdmUgZWZmZWN0cy5cblxuICB2YXIgdW5tb3VudEVmZmVjdHMgPSBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudDtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHVubW91bnRFZmZlY3RzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIF9lZmZlY3QgPSB1bm1vdW50RWZmZWN0c1tpXTtcbiAgICB2YXIgZmliZXIgPSB1bm1vdW50RWZmZWN0c1tpICsgMV07XG4gICAgdmFyIGRlc3Ryb3kgPSBfZWZmZWN0LmRlc3Ryb3k7XG4gICAgX2VmZmVjdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gICAge1xuICAgICAgZmliZXIuZmxhZ3MgJj0gflBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmZsYWdzICY9IH5QYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAge1xuICAgICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBkZXN0cm95LCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEoZmliZXIgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gU2Vjb25kIHBhc3M6IENyZWF0ZSBuZXcgcGFzc2l2ZSBlZmZlY3RzLlxuXG5cbiAgdmFyIG1vdW50RWZmZWN0cyA9IHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudDtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50ID0gW107XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG1vdW50RWZmZWN0cy5sZW5ndGg7IF9pICs9IDIpIHtcbiAgICB2YXIgX2VmZmVjdDIgPSBtb3VudEVmZmVjdHNbX2ldO1xuICAgIHZhciBfZmliZXIgPSBtb3VudEVmZmVjdHNbX2kgKyAxXTtcblxuICAgIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihfZmliZXIpO1xuXG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBpbnZva2VQYXNzaXZlRWZmZWN0Q3JlYXRlLCBudWxsLCBfZWZmZWN0Mik7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIGlmICghKF9maWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2Vycm9yNCA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihfZmliZXIsIF9lcnJvcjQpO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIH1cbiAgfSAvLyBOb3RlOiBUaGlzIGN1cnJlbnRseSBhc3N1bWVzIHRoZXJlIGFyZSBubyBwYXNzaXZlIGVmZmVjdHMgb24gdGhlIHJvb3QgZmliZXJcbiAgLy8gYmVjYXVzZSB0aGUgcm9vdCBpcyBub3QgcGFydCBvZiBpdHMgb3duIGVmZmVjdCBsaXN0LlxuICAvLyBUaGlzIGNvdWxkIGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuXG5cbiAgdmFyIGVmZmVjdCA9IHJvb3QuY3VycmVudC5maXJzdEVmZmVjdDtcblxuICB3aGlsZSAoZWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5leHROZXh0RWZmZWN0ID0gZWZmZWN0Lm5leHRFZmZlY3Q7IC8vIFJlbW92ZSBuZXh0RWZmZWN0IHBvaW50ZXIgdG8gYXNzaXN0IEdDXG5cbiAgICBlZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG5cbiAgICBpZiAoZWZmZWN0LmZsYWdzICYgRGVsZXRpb24pIHtcbiAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGVmZmVjdCk7XG4gICAgfVxuXG4gICAgZWZmZWN0ID0gbmV4dE5leHRFZmZlY3Q7XG4gIH1cblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICAgIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAge1xuICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7IC8vIElmIGFkZGl0aW9uYWwgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgc2NoZWR1bGVkLCBpbmNyZW1lbnQgYSBjb3VudGVyLiBJZiB0aGlzXG4gIC8vIGV4Y2VlZHMgdGhlIGxpbWl0LCB3ZSdsbCBmaXJlIGEgd2FybmluZy5cblxuICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9PT0gbnVsbCA/IDAgOiBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgKyAxO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkge1xuICByZXR1cm4gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgIT09IG51bGwgJiYgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuaGFzKGluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQoaW5zdGFuY2UpIHtcbiAgaWYgKGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID09PSBudWxsKSB7XG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBuZXcgU2V0KFtpbnN0YW5jZV0pO1xuICB9IGVsc2Uge1xuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmFkZChpbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvVGhyb3dVbmNhdWdodEVycm9yKGVycm9yKSB7XG4gIGlmICghaGFzVW5jYXVnaHRFcnJvcikge1xuICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSB0cnVlO1xuICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59XG5cbnZhciBvblVuY2F1Z2h0RXJyb3IgPSBwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3I7XG5cbmZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHJvb3RGaWJlciwgc291cmNlRmliZXIsIGVycm9yKSB7XG4gIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUocm9vdEZpYmVyLCBlcnJvckluZm8sIFN5bmNMYW5lKTtcbiAgZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIHVwZGF0ZSk7XG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qocm9vdEZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgU3luY0xhbmUsIGV2ZW50VGltZSk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIFN5bmNMYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAvLyBFcnJvciB3YXMgdGhyb3duIGF0IHRoZSByb290LiBUaGVyZSBpcyBubyBwYXJlbnQsIHNvIHRoZSByb290XG4gICAgLy8gaXRzZWxmIHNob3VsZCBjYXB0dXJlIGl0LlxuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHNvdXJjZUZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmaWJlciA9IHNvdXJjZUZpYmVyLnJldHVybjtcblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICBpZiAoZmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3QoZmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICB2YXIgY3RvciA9IGZpYmVyLnR5cGU7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkge1xuICAgICAgICB2YXIgZXJyb3JJbmZvID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZShlcnJvciwgc291cmNlRmliZXIpO1xuICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBTeW5jTGFuZSk7XG4gICAgICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICAgIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSwgZXZlbnRUaW1lKTtcbiAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICAgICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgU3luY0xhbmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoaXMgY29tcG9uZW50IGhhcyBhbHJlYWR5IGJlZW4gdW5tb3VudGVkLlxuICAgICAgICAgIC8vIFdlIGNhbid0IHNjaGVkdWxlIGFueSBmb2xsb3cgdXAgd29yayBmb3IgdGhlIHJvb3QgYmVjYXVzZSB0aGUgZmliZXIgaXMgYWxyZWFkeSB1bm1vdW50ZWQsXG4gICAgICAgICAgLy8gYnV0IHdlIGNhbiBzdGlsbCBjYWxsIHRoZSBsb2ctb25seSBib3VuZGFyeSBzbyB0aGUgZXJyb3IgaXNuJ3Qgc3dhbGxvd2VkLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVE9ETyBUaGlzIGlzIG9ubHkgYSB0ZW1wb3JhcnkgYmFuZGFpZCBmb3IgdGhlIG9sZCByZWNvbmNpbGVyIGZvcmsuXG4gICAgICAgICAgLy8gV2UgY2FuIGRlbGV0ZSB0aGlzIHNwZWNpYWwgY2FzZSBvbmNlIHRoZSBuZXcgZm9yayBpcyBtZXJnZWQuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoKGVycm9yLCBlcnJvckluZm8pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3JUb0lnbm9yZSkgey8vIFRPRE8gSWdub3JlIHRoaXMgZXJyb3I/IFJldGhyb3cgaXQ/XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMga2luZCBvZiBhbiBlZGdlIGNhc2UuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpYmVyID0gZmliZXIucmV0dXJuO1xuICB9XG59XG5mdW5jdGlvbiBwaW5nU3VzcGVuZGVkUm9vdChyb290LCB3YWtlYWJsZSwgcGluZ2VkTGFuZXMpIHtcbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuXG4gIGlmIChwaW5nQ2FjaGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgd2FrZWFibGUgcmVzb2x2ZWQsIHNvIHdlIG5vIGxvbmdlciBuZWVkIHRvIG1lbW9pemUsIGJlY2F1c2UgaXQgd2lsbFxuICAgIC8vIG5ldmVyIGJlIHRocm93biBhZ2Fpbi5cbiAgICBwaW5nQ2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIG1hcmtSb290UGluZ2VkKHJvb3QsIHBpbmdlZExhbmVzKTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ID09PSByb290ICYmIGlzU3Vic2V0T2ZMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcywgcGluZ2VkTGFuZXMpKSB7XG4gICAgLy8gUmVjZWl2ZWQgYSBwaW5nIGF0IHRoZSBzYW1lIHByaW9yaXR5IGxldmVsIGF0IHdoaWNoIHdlJ3JlIGN1cnJlbnRseVxuICAgIC8vIHJlbmRlcmluZy4gV2UgbWlnaHQgd2FudCB0byByZXN0YXJ0IHRoaXMgcmVuZGVyLiBUaGlzIHNob3VsZCBtaXJyb3JcbiAgICAvLyB0aGUgbG9naWMgb2Ygd2hldGhlciBvciBub3QgYSByb290IHN1c3BlbmRzIG9uY2UgaXQgY29tcGxldGVzLlxuICAgIC8vIFRPRE86IElmIHdlJ3JlIHJlbmRlcmluZyBzeW5jIGVpdGhlciBkdWUgdG8gU3luYywgQmF0Y2hlZCBvciBleHBpcmVkLFxuICAgIC8vIHdlIHNob3VsZCBwcm9iYWJseSBuZXZlciByZXN0YXJ0LlxuICAgIC8vIElmIHdlJ3JlIHN1c3BlbmRlZCB3aXRoIGRlbGF5LCBvciBpZiBpdCdzIGEgcmV0cnksIHdlJ2xsIGFsd2F5cyBzdXNwZW5kXG4gICAgLy8gc28gd2UgY2FuIGFsd2F5cyByZXN0YXJ0LlxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5IHx8IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQgJiYgaW5jbHVkZXNPbmx5UmV0cmllcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykgJiYgbm93KCkgLSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lIDwgRkFMTEJBQ0tfVEhST1RUTEVfTVMpIHtcbiAgICAgIC8vIFJlc3RhcnQgZnJvbSB0aGUgcm9vdC5cbiAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmVuIHRob3VnaCB3ZSBjYW4ndCByZXN0YXJ0IHJpZ2h0IG5vdywgd2UgbWlnaHQgZ2V0IGFuXG4gICAgICAvLyBvcHBvcnR1bml0eSBsYXRlci4gU28gd2UgbWFyayB0aGlzIHJlbmRlciBhcyBoYXZpbmcgYSBwaW5nLlxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzLCBwaW5nZWRMYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBwaW5nZWRMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpIHtcbiAgLy8gVGhlIGJvdW5kYXJ5IGZpYmVyIChhIFN1c3BlbnNlIGNvbXBvbmVudCBvciBTdXNwZW5zZUxpc3QgY29tcG9uZW50KVxuICAvLyBwcmV2aW91c2x5IHdhcyByZW5kZXJlZCBpbiBpdHMgZmFsbGJhY2sgc3RhdGUuIE9uZSBvZiB0aGUgcHJvbWlzZXMgdGhhdFxuICAvLyBzdXNwZW5kZWQgaXQgaGFzIHJlc29sdmVkLCB3aGljaCBtZWFucyBhdCBsZWFzdCBwYXJ0IG9mIHRoZSB0cmVlIHdhc1xuICAvLyBsaWtlbHkgdW5ibG9ja2VkLiBUcnkgcmVuZGVyaW5nIGFnYWluLCBhdCBhIG5ldyBleHBpcmF0aW9uIHRpbWUuXG4gIGlmIChyZXRyeUxhbmUgPT09IE5vTGFuZSkge1xuICAgIHJldHJ5TGFuZSA9IHJlcXVlc3RSZXRyeUxhbmUoYm91bmRhcnlGaWJlcik7XG4gIH0gLy8gVE9ETzogU3BlY2lhbCBjYXNlIGlkbGUgcHJpb3JpdHk/XG5cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgcmV0cnlMYW5lLCBldmVudFRpbWUpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCByZXRyeUxhbmUpO1xuICB9XG59XG5mdW5jdGlvbiByZXNvbHZlUmV0cnlXYWtlYWJsZShib3VuZGFyeUZpYmVyLCB3YWtlYWJsZSkge1xuICB2YXIgcmV0cnlMYW5lID0gTm9MYW5lOyAvLyBEZWZhdWx0XG5cbiAgdmFyIHJldHJ5Q2FjaGU7XG5cbiAge1xuICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgfVxuXG4gIGlmIChyZXRyeUNhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHdha2VhYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcmV0cnlDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICB9XG5cbiAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG59IC8vIENvbXB1dGVzIHRoZSBuZXh0IEp1c3QgTm90aWNlYWJsZSBEaWZmZXJlbmNlIChKTkQpIGJvdW5kYXJ5LlxuLy8gVGhlIHRoZW9yeSBpcyB0aGF0IGEgcGVyc29uIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzbWFsbCBkaWZmZXJlbmNlcyBpbiB0aW1lLlxuLy8gVGhlcmVmb3JlLCBpZiB3ZSB3YWl0IGEgYml0IGxvbmdlciB0aGFuIG5lY2Vzc2FyeSB0aGF0IHdvbid0IHRyYW5zbGF0ZSB0byBhIG5vdGljZWFibGVcbi8vIGRpZmZlcmVuY2UgaW4gdGhlIGV4cGVyaWVuY2UuIEhvd2V2ZXIsIHdhaXRpbmcgZm9yIGxvbmdlciBtaWdodCBtZWFuIHRoYXQgd2UgY2FuIGF2b2lkXG4vLyBzaG93aW5nIGFuIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBUaGUgbG9uZ2VyIHdlIGhhdmUgYWxyZWFkeSB3YWl0ZWQsIHRoZSBoYXJkZXIgaXRcbi8vIGlzIHRvIHRlbGwgc21hbGwgZGlmZmVyZW5jZXMgaW4gdGltZS4gVGhlcmVmb3JlLCB0aGUgbG9uZ2VyIHdlJ3ZlIGFscmVhZHkgd2FpdGVkLFxuLy8gdGhlIGxvbmdlciB3ZSBjYW4gd2FpdCBhZGRpdGlvbmFsbHkuIEF0IHNvbWUgcG9pbnQgd2UgaGF2ZSB0byBnaXZlIHVwIHRob3VnaC5cbi8vIFdlIHBpY2sgYSB0cmFpbiBtb2RlbCB3aGVyZSB0aGUgbmV4dCBib3VuZGFyeSBjb21taXRzIGF0IGEgY29uc2lzdGVudCBzY2hlZHVsZS5cbi8vIFRoZXNlIHBhcnRpY3VsYXIgbnVtYmVycyBhcmUgdmFndWUgZXN0aW1hdGVzLiBXZSBleHBlY3QgdG8gYWRqdXN0IHRoZW0gYmFzZWQgb24gcmVzZWFyY2guXG5cbmZ1bmN0aW9uIGpuZCh0aW1lRWxhcHNlZCkge1xuICByZXR1cm4gdGltZUVsYXBzZWQgPCAxMjAgPyAxMjAgOiB0aW1lRWxhcHNlZCA8IDQ4MCA/IDQ4MCA6IHRpbWVFbGFwc2VkIDwgMTA4MCA/IDEwODAgOiB0aW1lRWxhcHNlZCA8IDE5MjAgPyAxOTIwIDogdGltZUVsYXBzZWQgPCAzMDAwID8gMzAwMCA6IHRpbWVFbGFwc2VkIDwgNDMyMCA/IDQzMjAgOiBjZWlsKHRpbWVFbGFwc2VkIC8gMTk2MCkgKiAxOTYwO1xufVxuXG5mdW5jdGlvbiBjaGVja0Zvck5lc3RlZFVwZGF0ZXMoKSB7XG4gIGlmIChuZXN0ZWRVcGRhdGVDb3VudCA+IE5FU1RFRF9VUERBVEVfTElNSVQpIHtcbiAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IHJlcGVhdGVkbHkgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIGNvbXBvbmVudFdpbGxVcGRhdGUgb3IgY29tcG9uZW50RGlkVXBkYXRlLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiBuZXN0ZWQgdXBkYXRlcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPiBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQpIHtcbiAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7XG5cbiAgICAgIGVycm9yKCdNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgJyArIFwiY2FsbHMgc2V0U3RhdGUgaW5zaWRlIHVzZUVmZmVjdCwgYnV0IHVzZUVmZmVjdCBlaXRoZXIgZG9lc24ndCBcIiArICdoYXZlIGEgZGVwZW5kZW5jeSBhcnJheSwgb3Igb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlcyBvbiAnICsgJ2V2ZXJ5IHJlbmRlci4nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCkge1xuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZygpO1xuXG4gICAge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MoKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBudWxsO1xuXG5mdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBXZSBsZXQgdGhlIG90aGVyIHdhcm5pbmcgYWJvdXQgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgZGVhbCB3aXRoIHRoaXMgb25lLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKGZpYmVyLm1vZGUgJiAoQmxvY2tpbmdNb2RlIHwgQ29uY3VycmVudE1vZGUpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG5cbiAgICBpZiAodGFnICE9PSBJbmRldGVybWluYXRlQ29tcG9uZW50ICYmIHRhZyAhPT0gSG9zdFJvb3QgJiYgdGFnICE9PSBDbGFzc0NvbXBvbmVudCAmJiB0YWcgIT09IEZ1bmN0aW9uQ29tcG9uZW50ICYmIHRhZyAhPT0gRm9yd2FyZFJlZiAmJiB0YWcgIT09IE1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBTaW1wbGVNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gQmxvY2spIHtcbiAgICAgIC8vIE9ubHkgd2FybiBmb3IgdXNlci1kZWZpbmVkIGNvbXBvbmVudHMsIG5vdCBpbnRlcm5hbCBvbmVzIGxpa2UgU3VzcGVuc2UuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBzaG93IHRoZSB3aG9sZSBzdGFjayBidXQgZGVkdXBlIG9uIHRoZSB0b3AgY29tcG9uZW50J3MgbmFtZSBiZWNhdXNlXG4gICAgLy8gdGhlIHByb2JsZW1hdGljIGNvZGUgYWxtb3N0IGFsd2F5cyBsaWVzIGluc2lkZSB0aGF0IGNvbXBvbmVudC5cblxuXG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdSZWFjdENvbXBvbmVudCc7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBuZXcgU2V0KFtjb21wb25lbnROYW1lXSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgIGVycm9yKFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhIGNvbXBvbmVudCB0aGF0IGhhc24ndCBtb3VudGVkIHlldC4gXCIgKyAnVGhpcyBpbmRpY2F0ZXMgdGhhdCB5b3UgaGF2ZSBhIHNpZGUtZWZmZWN0IGluIHlvdXIgcmVuZGVyIGZ1bmN0aW9uIHRoYXQgJyArICdhc3luY2hyb25vdXNseSBsYXRlciBjYWxscyB0cmllcyB0byB1cGRhdGUgdGhlIGNvbXBvbmVudC4gTW92ZSB0aGlzIHdvcmsgdG8gJyArICd1c2VFZmZlY3QgaW5zdGVhZC4nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSBudWxsO1xuXG5mdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPblVubW91bnRlZEZpYmVySW5ERVYoZmliZXIpIHtcbiAge1xuICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG5cbiAgICBpZiAodGFnICE9PSBIb3N0Um9vdCAmJiB0YWcgIT09IENsYXNzQ29tcG9uZW50ICYmIHRhZyAhPT0gRnVuY3Rpb25Db21wb25lbnQgJiYgdGFnICE9PSBGb3J3YXJkUmVmICYmIHRhZyAhPT0gTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IFNpbXBsZU1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBCbG9jaykge1xuICAgICAgLy8gT25seSB3YXJuIGZvciB1c2VyLWRlZmluZWQgY29tcG9uZW50cywgbm90IGludGVybmFsIG9uZXMgbGlrZSBTdXNwZW5zZS5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHRoZXJlIGFyZSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyB1bm1vdW50cyBmb3IgdGhpcyBGaWJlcixcbiAgICAvLyB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhleSB3b3VsZCBoYXZlIHByZXZlbnRlZCB0aGlzIHVwZGF0ZS5cblxuXG4gICAgaWYgKChmaWJlci5mbGFncyAmIFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldikgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIHNob3cgdGhlIHdob2xlIHN0YWNrIGJ1dCBkZWR1cGUgb24gdGhlIHRvcCBjb21wb25lbnQncyBuYW1lIGJlY2F1c2VcbiAgICAvLyB0aGUgcHJvYmxlbWF0aWMgY29kZSBhbG1vc3QgYWx3YXlzIGxpZXMgaW5zaWRlIHRoYXQgY29tcG9uZW50LlxuXG5cbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1JlYWN0Q29tcG9uZW50JztcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0gbmV3IFNldChbY29tcG9uZW50TmFtZV0pO1xuICAgIH1cblxuICAgIGlmIChpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMpIDsgZWxzZSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgZXJyb3IoXCJDYW4ndCBwZXJmb3JtIGEgUmVhY3Qgc3RhdGUgdXBkYXRlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuIFRoaXMgXCIgKyAnaXMgYSBuby1vcCwgYnV0IGl0IGluZGljYXRlcyBhIG1lbW9yeSBsZWFrIGluIHlvdXIgYXBwbGljYXRpb24uIFRvICcgKyAnZml4LCBjYW5jZWwgYWxsIHN1YnNjcmlwdGlvbnMgYW5kIGFzeW5jaHJvbm91cyB0YXNrcyBpbiAlcy4nLCB0YWcgPT09IENsYXNzQ29tcG9uZW50ID8gJ3RoZSBjb21wb25lbnRXaWxsVW5tb3VudCBtZXRob2QnIDogJ2EgdXNlRWZmZWN0IGNsZWFudXAgZnVuY3Rpb24nKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBiZWdpbldvcmskMTtcblxue1xuICB2YXIgZHVtbXlGaWJlciA9IG51bGw7XG5cbiAgYmVnaW5Xb3JrJDEgPSBmdW5jdGlvbiAoY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpIHtcbiAgICAvLyBJZiBhIGNvbXBvbmVudCB0aHJvd3MgYW4gZXJyb3IsIHdlIHJlcGxheSBpdCBhZ2FpbiBpbiBhIHN5bmNocm9ub3VzbHlcbiAgICAvLyBkaXNwYXRjaGVkIGV2ZW50LCBzbyB0aGF0IHRoZSBkZWJ1Z2dlciB3aWxsIHRyZWF0IGl0IGFzIGFuIHVuY2F1Z2h0XG4gICAgLy8gZXJyb3IgU2VlIFJlYWN0RXJyb3JVdGlscyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjb3B5IHRoZSB3b3JrLWluLXByb2dyZXNzIG9udG8gYSBkdW1teVxuICAgIC8vIGZpYmVyLiBJZiBiZWdpbldvcmsgdGhyb3dzLCB3ZSdsbCB1c2UgdGhpcyB0byByZXNldCB0aGUgc3RhdGUuXG4gICAgdmFyIG9yaWdpbmFsV29ya0luUHJvZ3Jlc3NDb3B5ID0gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYoZHVtbXlGaWJlciwgdW5pdE9mV29yayk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGJlZ2luV29yayhjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcyk7XG4gICAgfSBjYXRjaCAob3JpZ2luYWxFcnJvcikge1xuICAgICAgaWYgKG9yaWdpbmFsRXJyb3IgIT09IG51bGwgJiYgdHlwZW9mIG9yaWdpbmFsRXJyb3IgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcmlnaW5hbEVycm9yLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRG9uJ3QgcmVwbGF5IHByb21pc2VzLiBUcmVhdCBldmVyeXRoaW5nIGVsc2UgbGlrZSBhbiBlcnJvci5cbiAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgIH0gLy8gS2VlcCB0aGlzIGNvZGUgaW4gc3luYyB3aXRoIGhhbmRsZUVycm9yOyBhbnkgY2hhbmdlcyBoZXJlIG11c3QgaGF2ZVxuICAgICAgLy8gY29ycmVzcG9uZGluZyBjaGFuZ2VzIHRoZXJlLlxuXG5cbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgcmVzZXRIb29rc0FmdGVyVGhyb3coKTsgLy8gRG9uJ3QgcmVzZXQgY3VycmVudCBkZWJ1ZyBmaWJlciwgc2luY2Ugd2UncmUgYWJvdXQgdG8gd29yayBvbiB0aGVcbiAgICAgIC8vIHNhbWUgZmliZXIgYWdhaW4uXG4gICAgICAvLyBVbndpbmQgdGhlIGZhaWxlZCBzdGFjayBmcmFtZVxuXG4gICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsodW5pdE9mV29yayk7IC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb3BlcnRpZXMgb2YgdGhlIGZpYmVyLlxuXG4gICAgICBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVih1bml0T2ZXb3JrLCBvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSk7XG5cbiAgICAgIGlmICggdW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgLy8gUmVzZXQgdGhlIHByb2ZpbGVyIHRpbWVyLlxuICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgICB9IC8vIFJ1biBiZWdpbldvcmsgYWdhaW4uXG5cblxuICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGJlZ2luV29yaywgbnVsbCwgY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpO1xuXG4gICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICB2YXIgcmVwbGF5RXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7IC8vIGBpbnZva2VHdWFyZGVkQ2FsbGJhY2tgIHNvbWV0aW1lcyBzZXRzIGFuIGV4cGFuZG8gYF9zdXBwcmVzc0xvZ2dpbmdgLlxuICAgICAgICAvLyBSZXRocm93IHRoaXMgZXJyb3IgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgb25lLlxuXG4gICAgICAgIHRocm93IHJlcGxheUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBicmFuY2ggaXMgcmVhY2hhYmxlIGlmIHRoZSByZW5kZXIgcGhhc2UgaXMgaW1wdXJlLlxuICAgICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gZmFsc2U7XG52YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50O1xuXG57XG4gIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbn1cblxuZnVuY3Rpb24gd2FybkFib3V0UmVuZGVyUGhhc2VVcGRhdGVzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmIChpc1JlbmRlcmluZyAmJiAoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgIWdldElzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2VJbkRFVigpKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSA9IHdvcmtJblByb2dyZXNzICYmIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ1Vua25vd24nOyAvLyBEZWR1cGUgYnkgdGhlIHJlbmRlcmluZyBjb21wb25lbnQgYmVjYXVzZSBpdCdzIHRoZSBvbmUgdGhhdCBuZWVkcyB0byBiZSBmaXhlZC5cblxuICAgICAgICAgICAgdmFyIGRlZHVwZUtleSA9IHJlbmRlcmluZ0NvbXBvbmVudE5hbWU7XG5cbiAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50LmhhcyhkZWR1cGVLZXkpKSB7XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5hZGQoZGVkdXBlS2V5KTtcbiAgICAgICAgICAgICAgdmFyIHNldFN0YXRlQ29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nO1xuXG4gICAgICAgICAgICAgIGVycm9yKCdDYW5ub3QgdXBkYXRlIGEgY29tcG9uZW50IChgJXNgKSB3aGlsZSByZW5kZXJpbmcgYSAnICsgJ2RpZmZlcmVudCBjb21wb25lbnQgKGAlc2ApLiBUbyBsb2NhdGUgdGhlIGJhZCBzZXRTdGF0ZSgpIGNhbGwgaW5zaWRlIGAlc2AsICcgKyAnZm9sbG93IHRoZSBzdGFjayB0cmFjZSBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NldHN0YXRlLWluLXJlbmRlcicsIHNldFN0YXRlQ29tcG9uZW50TmFtZSwgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSwgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIpIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCB1cGRhdGUgZHVyaW5nIGFuIGV4aXN0aW5nIHN0YXRlIHRyYW5zaXRpb24gKHN1Y2ggYXMgJyArICd3aXRoaW4gYHJlbmRlcmApLiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlICcgKyAnZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLicpO1xuXG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyBhICdzaGFyZWQnIHZhcmlhYmxlIHRoYXQgY2hhbmdlcyB3aGVuIGFjdCgpIG9wZW5zL2Nsb3NlcyBpbiB0ZXN0cy5cblxuXG52YXIgSXNUaGlzUmVuZGVyZXJBY3RpbmcgPSB7XG4gIGN1cnJlbnQ6IGZhbHNlXG59O1xuZnVuY3Rpb24gd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIElzU29tZVJlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IHRydWUgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCAhPT0gdHJ1ZSkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIHdyb25nIGFjdCgpIGFyb3VuZCB5b3VyIHRlc3QgaW50ZXJhY3Rpb25zLlxcblwiICsgJ0JlIHN1cmUgdG8gdXNlIHRoZSBtYXRjaGluZyB2ZXJzaW9uIG9mIGFjdCgpIGNvcnJlc3BvbmRpbmcgdG8geW91ciByZW5kZXJlcjpcXG5cXG4nICsgJy8vIGZvciByZWFjdC1kb206XFxuJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICdpbXBvcnQge2FjdH0gZnInICsgXCJvbSAncmVhY3QtZG9tL3Rlc3QtdXRpbHMnO1xcblwiICsgJy8vIC4uLlxcbicgKyAnYWN0KCgpID0+IC4uLik7XFxuXFxuJyArICcvLyBmb3IgcmVhY3QtdGVzdC1yZW5kZXJlcjpcXG4nICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgJ2ltcG9ydCBUZXN0UmVuZGVyZXIgZnInICsgXCJvbSByZWFjdC10ZXN0LXJlbmRlcmVyJztcXG5cIiArICdjb25zdCB7YWN0fSA9IFRlc3RSZW5kZXJlcjtcXG4nICsgJy8vIC4uLlxcbicgKyAnYWN0KCgpID0+IC4uLik7Jyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSkgIT09IE5vTW9kZSAmJiBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgZXJyb3IoJ0FuIHVwZGF0ZSB0byAlcyByYW4gYW4gZWZmZWN0LCBidXQgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbicgKyAnV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlICcgKyAnd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbicgKyAnYWN0KCgpID0+IHtcXG4nICsgJyAgLyogZmlyZSBldmVudHMgdGhhdCB1cGRhdGUgc3RhdGUgKi9cXG4nICsgJ30pO1xcbicgKyAnLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG4nICsgXCJUaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIFwiICsgJ2luIHRoZSBicm93c2VyLicgKyAnIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3QnLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCAmJiBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKCdBbiB1cGRhdGUgdG8gJXMgaW5zaWRlIGEgdGVzdCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuJyArICdXaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCBjYXVzZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBzaG91bGQgYmUgJyArICd3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuJyArICdhY3QoKCkgPT4ge1xcbicgKyAnICAvKiBmaXJlIGV2ZW50cyB0aGF0IHVwZGF0ZSBzdGF0ZSAqL1xcbicgKyAnfSk7XFxuJyArICcvKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcbicgKyBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgKyAnaW4gdGhlIGJyb3dzZXIuJyArICcgTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdCcsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRldiA9IHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRFVjsgLy8gSW4gdGVzdHMsIHdlIHdhbnQgdG8gZW5mb3JjZSBhIG1vY2tlZCBzY2hlZHVsZXIuXG5cbnZhciBkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9IGZhbHNlOyAvLyBUT0RPIEJlZm9yZSB3ZSByZWxlYXNlIGNvbmN1cnJlbnQgbW9kZSwgcmV2aXNpdCB0aGlzIGFuZCBkZWNpZGUgd2hldGhlciBhIG1vY2tlZFxuLy8gc2NoZWR1bGVyIGlzIHRoZSBhY3R1YWwgcmVjb21tZW5kYXRpb24uIFRoZSBhbHRlcm5hdGl2ZSBjb3VsZCBiZSBhIHRlc3RpbmcgYnVpbGQsXG4vLyBhIG5ldyBsaWIsIG9yIHdoYXRldmVyOyB3ZSBkdW5ubyBqdXN0IHlldC4gVGhpcyBtZXNzYWdlIGlzIGZvciBlYXJseSBhZG9wdGVyc1xuLy8gdG8gZ2V0IHRoZWlyIHRlc3RzIHJpZ2h0LlxuXG5mdW5jdGlvbiB3YXJuSWZVbm1vY2tlZFNjaGVkdWxlcihmaWJlcikge1xuICB7XG4gICAgaWYgKGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID09PSBmYWxzZSAmJiBTY2hlZHVsZXIudW5zdGFibGVfZmx1c2hBbGxXaXRob3V0QXNzZXJ0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChmaWJlci5tb2RlICYgQmxvY2tpbmdNb2RlIHx8IGZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ0luIENvbmN1cnJlbnQgb3IgU3luYyBtb2RlcywgdGhlIFwic2NoZWR1bGVyXCIgbW9kdWxlIG5lZWRzIHRvIGJlIG1vY2tlZCAnICsgJ3RvIGd1YXJhbnRlZSBjb25zaXN0ZW50IGJlaGF2aW91ciBhY3Jvc3MgdGVzdHMgYW5kIGJyb3dzZXJzLiAnICsgJ0ZvciBleGFtcGxlLCB3aXRoIGplc3Q6IFxcbicgKyAvLyBCcmVhayB1cCByZXF1aXJlcyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgXCJqZXN0Lm1vY2soJ3NjaGVkdWxlcicsICgpID0+IHJlcXVpcmVcIiArIFwiKCdzY2hlZHVsZXIvdW5zdGFibGVfbW9jaycpKTtcXG5cXG5cIiArICdGb3IgbW9yZSBpbmZvLCB2aXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvbW9jay1zY2hlZHVsZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZVRocmVhZElEKHJvb3QsIGxhbmUpIHtcbiAgLy8gSW50ZXJhY3Rpb24gdGhyZWFkcyBhcmUgdW5pcXVlIHBlciByb290IGFuZCBleHBpcmF0aW9uIHRpbWUuXG4gIC8vIE5PVEU6IEludGVudGlvbmFsbHkgdW5zb3VuZCBjYXN0LiBBbGwgdGhhdCBtYXR0ZXJzIGlzIHRoYXQgaXQncyBhIG51bWJlclxuICAvLyBhbmQgaXQgcmVwcmVzZW50cyBhIGJhdGNoIG9mIHdvcmsuIENvdWxkIG1ha2UgYSBoZWxwZXIgZnVuY3Rpb24gaW5zdGVhZCxcbiAgLy8gYnV0IG1laCB0aGlzIGlzIGZpbmUgZm9yIG5vdy5cbiAgcmV0dXJuIGxhbmUgKiAxMDAwICsgcm9vdC5pbnRlcmFjdGlvblRocmVhZElEO1xufVxuXG5mdW5jdGlvbiBtYXJrU3Bhd25lZFdvcmsobGFuZSkge1xuXG4gIGlmIChzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9PT0gbnVsbCkge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gW2xhbmVdO1xuICB9IGVsc2Uge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyLnB1c2gobGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSwgaW50ZXJhY3Rpb25zKSB7XG5cbiAgaWYgKGludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcDtcbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9ucyA9IHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5nZXQobGFuZSk7XG5cbiAgICBpZiAocGVuZGluZ0ludGVyYWN0aW9ucyAhPSBudWxsKSB7XG4gICAgICBpbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaWYgKCFwZW5kaW5nSW50ZXJhY3Rpb25zLmhhcyhpbnRlcmFjdGlvbikpIHtcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgcHJldmlvdXNseSB1bnNjaGVkdWxlZCBpbnRlcmFjdGlvbi5cbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICBwZW5kaW5nSW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLnNldChsYW5lLCBuZXcgU2V0KGludGVyYWN0aW9ucykpOyAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuXG4gICAgICBpbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lKTtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSkge1xuXG4gIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUsIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcykge1xuICAvLyB3ZSBjYW4gYWNjdXJhdGVseSBhdHRyaWJ1dGUgdGltZSBzcGVudCB3b3JraW5nIG9uIGl0LCBBbmQgc28gdGhhdCBjYXNjYWRpbmdcbiAgLy8gd29yayB0cmlnZ2VyZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2Ugd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggaXQuXG5cblxuICB2YXIgaW50ZXJhY3Rpb25zID0gbmV3IFNldCgpO1xuICByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsZWRJbnRlcmFjdGlvbnMsIHNjaGVkdWxlZExhbmUpIHtcbiAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShsYW5lcywgc2NoZWR1bGVkTGFuZSkpIHtcbiAgICAgIHNjaGVkdWxlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICByZXR1cm4gaW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pOyAvLyBTdG9yZSB0aGUgY3VycmVudCBzZXQgb2YgaW50ZXJhY3Rpb25zIG9uIHRoZSBGaWJlclJvb3QgZm9yIGEgZmV3IHJlYXNvbnM6XG4gIC8vIFdlIGNhbiByZS11c2UgaXQgaW4gaG90IGZ1bmN0aW9ucyBsaWtlIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdCgpXG4gIC8vIHdpdGhvdXQgaGF2aW5nIHRvIHJlY2FsY3VsYXRlIGl0LiBXZSB3aWxsIGFsc28gdXNlIGl0IGluIGNvbW1pdFdvcmsoKSB0b1xuICAvLyBwYXNzIHRvIGFueSBQcm9maWxlciBvblJlbmRlcigpIGhvb2tzLiBUaGlzIGFsc28gcHJvdmlkZXMgRGV2VG9vbHMgd2l0aCBhXG4gIC8vIHdheSB0byBhY2Nlc3MgaXQgd2hlbiB0aGUgb25Db21taXRSb290KCkgaG9vayBpcyBjYWxsZWQuXG5cbiAgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyA9IGludGVyYWN0aW9ucztcblxuICBpZiAoaW50ZXJhY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgdmFyIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGNvbW1pdHRlZExhbmVzKSB7XG5cbiAgdmFyIHJlbWFpbmluZ0xhbmVzQWZ0ZXJDb21taXQgPSByb290LnBlbmRpbmdMYW5lcztcbiAgdmFyIHN1YnNjcmliZXI7XG5cbiAgdHJ5IHtcbiAgICBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICAgIC8vIEZJWE1FOiBNb3JlIHRoYW4gb25lIGxhbmUgY2FuIGZpbmlzaCBpbiBhIHNpbmdsZSBjb21taXQuXG4gICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQocm9vdCwgY29tbWl0dGVkTGFuZXMpO1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgIHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gQ2xlYXIgY29tcGxldGVkIGludGVyYWN0aW9ucyBmcm9tIHRoZSBwZW5kaW5nIE1hcC5cbiAgICAvLyBVbmxlc3MgdGhlIHJlbmRlciB3YXMgc3VzcGVuZGVkIG9yIGNhc2NhZGluZyB3b3JrIHdhcyBzY2hlZHVsZWQsXG4gICAgLy8gSW4gd2hpY2ggY2FzZVx1MjAxMyBsZWF2ZSBwZW5kaW5nIGludGVyYWN0aW9ucyB1bnRpbCB0aGUgc3Vic2VxdWVudCByZW5kZXIuXG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwO1xuICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsZWRJbnRlcmFjdGlvbnMsIGxhbmUpIHtcbiAgICAgIC8vIE9ubHkgZGVjcmVtZW50IHRoZSBwZW5kaW5nIGludGVyYWN0aW9uIGNvdW50IGlmIHdlJ3JlIGRvbmUuXG4gICAgICAvLyBJZiB0aGVyZSdzIHN0aWxsIHdvcmsgYXQgdGhlIGN1cnJlbnQgcHJpb3JpdHksXG4gICAgICAvLyBUaGF0IGluZGljYXRlcyB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBzdXNwZW5zZSBkYXRhLlxuICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbWFpbmluZ0xhbmVzQWZ0ZXJDb21taXQsIGxhbmUpKSB7XG4gICAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5kZWxldGUobGFuZSk7XG4gICAgICAgIHNjaGVkdWxlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgICAgICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSAvLyBgYWN0YCB0ZXN0aW5nIEFQSVxuXG5mdW5jdGlvbiBzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSB7XG4gIC8vIE5ldmVyIGZvcmNlIGZsdXNoIGluIHByb2R1Y3Rpb24uIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGdldCBzdHJpcHBlZCBvdXQuXG4gIHJldHVybiAgYWN0aW5nVXBkYXRlc1Njb3BlRGVwdGggPiAwO1xufVxuLy8gc28gd2UgY2FuIHRlbGwgaWYgYW55IGFzeW5jIGFjdCgpIGNhbGxzIHRyeSB0byBydW4gaW4gcGFyYWxsZWwuXG5cblxudmFyIGFjdGluZ1VwZGF0ZXNTY29wZURlcHRoID0gMDtcblxuZnVuY3Rpb24gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpIHtcbiAgZmliZXIuc2libGluZyA9IG51bGw7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IG51bGw7XG59XG5cbnZhciByZXNvbHZlRmFtaWx5ID0gbnVsbDsgLy8gJEZsb3dGaXhNZSBGbG93IGdldHMgY29uZnVzZWQgYnkgYSBXZWFrU2V0IGZlYXR1cmUgY2hlY2sgYmVsb3cuXG5cbnZhciBmYWlsZWRCb3VuZGFyaWVzID0gbnVsbDtcbnZhciBzZXRSZWZyZXNoSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gIHtcbiAgICByZXNvbHZlRmFtaWx5ID0gaGFuZGxlcjtcbiAgfVxufTtcbmZ1bmN0aW9uIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuXG4gICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9IC8vIFVzZSB0aGUgbGF0ZXN0IGtub3duIGltcGxlbWVudGF0aW9uLlxuXG5cbiAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIC8vIE5vIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzLlxuICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgcmVhbCBmb3J3YXJkUmVmLiBEb24ndCB3YW50IHRvIGNyYXNoIGVhcmx5LlxuICAgICAgaWYgKHR5cGUgIT09IG51bGwgJiYgdHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBGb3J3YXJkUmVmIGlzIHNwZWNpYWwgYmVjYXVzZSBpdHMgcmVzb2x2ZWQgLnR5cGUgaXMgYW4gb2JqZWN0LFxuICAgICAgICAvLyBidXQgaXQncyBwb3NzaWJsZSB0aGF0IHdlIG9ubHkgaGF2ZSBpdHMgaW5uZXIgcmVuZGVyIGZ1bmN0aW9uIGluIHRoZSBtYXAuXG4gICAgICAgIC8vIElmIHRoYXQgaW5uZXIgcmVuZGVyIGZ1bmN0aW9uIGlzIGRpZmZlcmVudCwgd2UnbGwgYnVpbGQgYSBuZXcgZm9yd2FyZFJlZiB0eXBlLlxuICAgICAgICB2YXIgY3VycmVudFJlbmRlciA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlLnJlbmRlcik7XG5cbiAgICAgICAgaWYgKHR5cGUucmVuZGVyICE9PSBjdXJyZW50UmVuZGVyKSB7XG4gICAgICAgICAgdmFyIHN5bnRoZXRpY1R5cGUgPSB7XG4gICAgICAgICAgICAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSxcbiAgICAgICAgICAgIHJlbmRlcjogY3VycmVudFJlbmRlclxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzeW50aGV0aWNUeXBlLmRpc3BsYXlOYW1lID0gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3ludGhldGljVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9IC8vIFVzZSB0aGUgbGF0ZXN0IGtub3duIGltcGxlbWVudGF0aW9uLlxuXG5cbiAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhmaWJlciwgZWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHByZXZUeXBlID0gZmliZXIuZWxlbWVudFR5cGU7XG4gICAgdmFyIG5leHRUeXBlID0gZWxlbWVudC50eXBlOyAvLyBJZiB3ZSBnb3QgaGVyZSwgd2Uga25vdyB0eXBlcyBhcmVuJ3QgPT09IGVxdWFsLlxuXG4gICAgdmFyIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gZmFsc2U7XG4gICAgdmFyICQkdHlwZW9mTmV4dFR5cGUgPSB0eXBlb2YgbmV4dFR5cGUgPT09ICdvYmplY3QnICYmIG5leHRUeXBlICE9PSBudWxsID8gbmV4dFR5cGUuJCR0eXBlb2YgOiBudWxsO1xuXG4gICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5leHRUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV4dFR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB0aGUgaW5uZXIgdHlwZSB5ZXQuXG4gICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBhc3N1bWUgdGhhdCB0aGUgbGF6eSBpbm5lciB0eXBlIGlzIHN0YWJsZSxcbiAgICAgICAgICAgIC8vIGFuZCBzbyBpdCBpcyBzdWZmaWNpZW50IHRvIGF2b2lkIHJlY29uY2lsaW5nIGl0IGF3YXkuXG4gICAgICAgICAgICAvLyBXZSdyZSBub3QgZ29pbmcgdG8gdW53cmFwIG9yIGFjdHVhbGx5IHVzZSB0aGUgbmV3IGxhenkgdHlwZS5cbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgICAgICAgLy8gVE9ETzogaWYgaXQgd2FzIGJ1dCBjYW4gbm8gbG9uZ2VyIGJlIHNpbXBsZSxcbiAgICAgICAgICAgIC8vIHdlIHNob3VsZG4ndCBzZXQgdGhpcy5cbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIENoZWNrIGlmIGJvdGggdHlwZXMgaGF2ZSBhIGZhbWlseSBhbmQgaXQncyB0aGUgc2FtZSBvbmUuXG5cblxuICAgIGlmIChuZWVkc0NvbXBhcmVGYW1pbGllcykge1xuICAgICAgLy8gTm90ZTogbWVtbygpIGFuZCBmb3J3YXJkUmVmKCkgd2UnbGwgY29tcGFyZSBvdXRlciByYXRoZXIgdGhhbiBpbm5lciB0eXBlLlxuICAgICAgLy8gVGhpcyBtZWFucyBib3RoIG9mIHRoZW0gbmVlZCB0byBiZSByZWdpc3RlcmVkIHRvIHByZXNlcnZlIHN0YXRlLlxuICAgICAgLy8gSWYgd2UgdW53cmFwcGVkIGFuZCBjb21wYXJlZCB0aGUgaW5uZXIgdHlwZXMgZm9yIHdyYXBwZXJzIGluc3RlYWQsXG4gICAgICAvLyB0aGVuIHdlIHdvdWxkIHJpc2sgZmFsc2VseSBzYXlpbmcgdHdvIHNlcGFyYXRlIG1lbW8oRm9vKVxuICAgICAgLy8gY2FsbHMgYXJlIGVxdWl2YWxlbnQgYmVjYXVzZSB0aGV5IHdyYXAgdGhlIHNhbWUgRm9vIGZ1bmN0aW9uLlxuICAgICAgdmFyIHByZXZGYW1pbHkgPSByZXNvbHZlRmFtaWx5KHByZXZUeXBlKTtcblxuICAgICAgaWYgKHByZXZGYW1pbHkgIT09IHVuZGVmaW5lZCAmJiBwcmV2RmFtaWx5ID09PSByZXNvbHZlRmFtaWx5KG5leHRUeXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIFdlYWtTZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZmFpbGVkQm91bmRhcmllcyA9PT0gbnVsbCkge1xuICAgICAgZmFpbGVkQm91bmRhcmllcyA9IG5ldyBXZWFrU2V0KCk7XG4gICAgfVxuXG4gICAgZmFpbGVkQm91bmRhcmllcy5hZGQoZmliZXIpO1xuICB9XG59XG52YXIgc2NoZWR1bGVSZWZyZXNoID0gZnVuY3Rpb24gKHJvb3QsIHVwZGF0ZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHN0YWxlRmFtaWxpZXMgPSB1cGRhdGUuc3RhbGVGYW1pbGllcyxcbiAgICAgICAgdXBkYXRlZEZhbWlsaWVzID0gdXBkYXRlLnVwZGF0ZWRGYW1pbGllcztcbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgZmx1c2hTeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkocm9vdC5jdXJyZW50LCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH0pO1xuICB9XG59O1xudmFyIHNjaGVkdWxlUm9vdCA9IGZ1bmN0aW9uIChyb290LCBlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocm9vdC5jb250ZXh0ICE9PSBlbXB0eUNvbnRleHRPYmplY3QpIHtcbiAgICAgIC8vIFN1cGVyIGVkZ2UgY2FzZTogcm9vdCBoYXMgYSBsZWdhY3kgX3JlbmRlclN1YnRyZWUgY29udGV4dFxuICAgICAgLy8gYnV0IHdlIGRvbid0IGtub3cgdGhlIHBhcmVudENvbXBvbmVudCBzbyB3ZSBjYW4ndCBwYXNzIGl0LlxuICAgICAgLy8gSnVzdCBpZ25vcmUuIFdlJ2xsIGRlbGV0ZSB0aGlzIHdpdGggX3JlbmRlclN1YnRyZWUgY29kZSBwYXRoIGxhdGVyLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICBmbHVzaFN5bmMoZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIHJvb3QsIG51bGwsIG51bGwpO1xuICAgIH0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KGZpYmVyLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpIHtcbiAge1xuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGUsXG4gICAgICAgIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBjYW5kaWRhdGVUeXBlID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcmVzb2x2ZUZhbWlseSB0byBiZSBzZXQgZHVyaW5nIGhvdCByZWxvYWQuJyk7XG4gICAgfVxuXG4gICAgdmFyIG5lZWRzUmVuZGVyID0gZmFsc2U7XG4gICAgdmFyIG5lZWRzUmVtb3VudCA9IGZhbHNlO1xuXG4gICAgaWYgKGNhbmRpZGF0ZVR5cGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KGNhbmRpZGF0ZVR5cGUpO1xuXG4gICAgICBpZiAoZmFtaWx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHN0YWxlRmFtaWxpZXMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHVwZGF0ZWRGYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgIGlmICh0YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZWVkc1JlbmRlciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgIT09IG51bGwpIHtcbiAgICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzLmhhcyhmaWJlcikgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGZhaWxlZEJvdW5kYXJpZXMuaGFzKGFsdGVybmF0ZSkpIHtcbiAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmVlZHNSZW1vdW50KSB7XG4gICAgICBmaWJlci5fZGVidWdOZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChuZWVkc1JlbW91bnQgfHwgbmVlZHNSZW5kZXIpIHtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwgJiYgIW5lZWRzUmVtb3VudCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShjaGlsZCwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShzaWJsaW5nLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoID0gZnVuY3Rpb24gKHJvb3QsIGZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgaG9zdEluc3RhbmNlcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdHlwZXMgPSBuZXcgU2V0KGZhbWlsaWVzLm1hcChmdW5jdGlvbiAoZmFtaWx5KSB7XG4gICAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gICAgfSkpO1xuICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShyb290LmN1cnJlbnQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICByZXR1cm4gaG9zdEluc3RhbmNlcztcbiAgfVxufTtcblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KGZpYmVyLCB0eXBlcywgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBjYW5kaWRhdGVUeXBlID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGRpZE1hdGNoID0gZmFsc2U7XG5cbiAgICBpZiAoY2FuZGlkYXRlVHlwZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVzLmhhcyhjYW5kaWRhdGVUeXBlKSkge1xuICAgICAgICBkaWRNYXRjaCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpZE1hdGNoKSB7XG4gICAgICAvLyBXZSBoYXZlIGEgbWF0Y2guIFRoaXMgb25seSBkcmlsbHMgZG93biB0byB0aGUgY2xvc2VzdCBob3N0IGNvbXBvbmVudHMuXG4gICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gc2VhcmNoIGRlZXBlciBiZWNhdXNlIGZvciB0aGUgcHVycG9zZSBvZiBnaXZpbmdcbiAgICAgIC8vIHZpc3VhbCBmZWVkYmFjaywgXCJmbGFzaGluZ1wiIG91dGVybW9zdCBwYXJlbnQgcmVjdGFuZ2xlcyBpcyBzdWZmaWNpZW50LlxuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gbWF0Y2gsIG1heWJlIHRoZXJlIHdpbGwgYmUgb25lIGZ1cnRoZXIgZG93biBpbiB0aGUgY2hpbGQgdHJlZS5cbiAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoY2hpbGQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KHNpYmxpbmcsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGZvdW5kSG9zdEluc3RhbmNlcyA9IGZpbmRDaGlsZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG5cbiAgICBpZiAoZm91bmRIb3N0SW5zdGFuY2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnkgaG9zdCBjaGlsZHJlbiwgZmFsbGJhY2sgdG8gY2xvc2VzdCBob3N0IHBhcmVudC5cblxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIHJlYWNoIHJvb3QgZmlyc3QuJyk7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZENoaWxkSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuICAgIHZhciBmb3VuZEhvc3RJbnN0YW5jZXMgPSBmYWxzZTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgbWF0Y2guXG4gICAgICAgIGZvdW5kSG9zdEluc3RhbmNlcyA9IHRydWU7XG4gICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlKTsgLy8gVGhlcmUgbWF5IHN0aWxsIGJlIG1vcmUsIHNvIGtlZXAgc2VhcmNoaW5nLlxuICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmliZXIpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpYmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNCYWRNYXBQb2x5ZmlsbDtcblxue1xuICBoYXNCYWRNYXBQb2x5ZmlsbCA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgdmFyIG5vbkV4dGVuc2libGVPYmplY3QgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuXG4gICAgbmV3IE1hcChbW25vbkV4dGVuc2libGVPYmplY3QsIG51bGxdXSk7XG4gICAgbmV3IFNldChbbm9uRXh0ZW5zaWJsZU9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUT0RPOiBDb25zaWRlciB3YXJuaW5nIGFib3V0IGJhZCBwb2x5ZmlsbHNcbiAgICBoYXNCYWRNYXBQb2x5ZmlsbCA9IHRydWU7XG4gIH1cbn1cblxudmFyIGRlYnVnQ291bnRlciA9IDE7XG5cbmZ1bmN0aW9uIEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vIEluc3RhbmNlXG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmtleSA9IGtleTtcbiAgdGhpcy5lbGVtZW50VHlwZSA9IG51bGw7XG4gIHRoaXMudHlwZSA9IG51bGw7XG4gIHRoaXMuc3RhdGVOb2RlID0gbnVsbDsgLy8gRmliZXJcblxuICB0aGlzLnJldHVybiA9IG51bGw7XG4gIHRoaXMuY2hpbGQgPSBudWxsO1xuICB0aGlzLnNpYmxpbmcgPSBudWxsO1xuICB0aGlzLmluZGV4ID0gMDtcbiAgdGhpcy5yZWYgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcztcbiAgdGhpcy5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgdGhpcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHRoaXMubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHRoaXMuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgdGhpcy5tb2RlID0gbW9kZTsgLy8gRWZmZWN0c1xuXG4gIHRoaXMuZmxhZ3MgPSBOb0ZsYWdzO1xuICB0aGlzLm5leHRFZmZlY3QgPSBudWxsO1xuICB0aGlzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5sYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuYWx0ZXJuYXRlID0gbnVsbDtcblxuICB7XG4gICAgLy8gTm90ZTogVGhlIGZvbGxvd2luZyBpcyBkb25lIHRvIGF2b2lkIGEgdjggcGVyZm9ybWFuY2UgY2xpZmYuXG4gICAgLy9cbiAgICAvLyBJbml0aWFsaXppbmcgdGhlIGZpZWxkcyBiZWxvdyB0byBzbWlzIGFuZCBsYXRlciB1cGRhdGluZyB0aGVtIHdpdGhcbiAgICAvLyBkb3VibGUgdmFsdWVzIHdpbGwgY2F1c2UgRmliZXJzIHRvIGVuZCB1cCBoYXZpbmcgc2VwYXJhdGUgc2hhcGVzLlxuICAgIC8vIFRoaXMgYmVoYXZpb3IvYnVnIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBPYmplY3QucHJldmVudEV4dGVuc2lvbigpLlxuICAgIC8vIEZvcnR1bmF0ZWx5IHRoaXMgb25seSBpbXBhY3RzIERFViBidWlsZHMuXG4gICAgLy8gVW5mb3J0dW5hdGVseSBpdCBtYWtlcyBSZWFjdCB1bnVzYWJseSBzbG93IGZvciBzb21lIGFwcGxpY2F0aW9ucy5cbiAgICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzLCBpbml0aWFsaXplIHRoZSBmaWVsZHMgYmVsb3cgd2l0aCBkb3VibGVzLlxuICAgIC8vXG4gICAgLy8gTGVhcm4gbW9yZSBhYm91dCB0aGlzIGhlcmU6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDM2NVxuICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTg1MzhcbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IE51bWJlci5OYU47XG4gICAgdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOOyAvLyBJdCdzIG9rYXkgdG8gcmVwbGFjZSB0aGUgaW5pdGlhbCBkb3VibGVzIHdpdGggc21pcyBhZnRlciBpbml0aWFsaXphdGlvbi5cbiAgICAvLyBUaGlzIHdvbid0IHRyaWdnZXIgdGhlIHBlcmZvcm1hbmNlIGNsaWZmIG1lbnRpb25lZCBhYm92ZSxcbiAgICAvLyBhbmQgaXQgc2ltcGxpZmllcyBvdGhlciBwcm9maWxlciBjb2RlIChpbmNsdWRpbmcgRGV2VG9vbHMpLlxuXG4gICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gIH1cblxuICB7XG4gICAgLy8gVGhpcyBpc24ndCBkaXJlY3RseSB1c2VkIGJ1dCBpcyBoYW5keSBmb3IgZGVidWdnaW5nIGludGVybmFsczpcbiAgICB0aGlzLl9kZWJ1Z0lEID0gZGVidWdDb3VudGVyKys7XG4gICAgdGhpcy5fZGVidWdTb3VyY2UgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnT3duZXIgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnTmVlZHNSZW1vdW50ID0gZmFsc2U7XG4gICAgdGhpcy5fZGVidWdIb29rVHlwZXMgPSBudWxsO1xuXG4gICAgaWYgKCFoYXNCYWRNYXBQb2x5ZmlsbCAmJiB0eXBlb2YgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnModGhpcyk7XG4gICAgfVxuICB9XG59IC8vIFRoaXMgaXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgcmF0aGVyIHRoYW4gYSBQT0pPIGNvbnN0cnVjdG9yLCBzdGlsbFxuLy8gcGxlYXNlIGVuc3VyZSB3ZSBkbyB0aGUgZm9sbG93aW5nOlxuLy8gMSkgTm9ib2R5IHNob3VsZCBhZGQgYW55IGluc3RhbmNlIG1ldGhvZHMgb24gdGhpcy4gSW5zdGFuY2UgbWV0aG9kcyBjYW4gYmVcbi8vICAgIG1vcmUgZGlmZmljdWx0IHRvIHByZWRpY3Qgd2hlbiB0aGV5IGdldCBvcHRpbWl6ZWQgYW5kIHRoZXkgYXJlIGFsbW9zdFxuLy8gICAgbmV2ZXIgaW5saW5lZCBwcm9wZXJseSBpbiBzdGF0aWMgY29tcGlsZXJzLlxuLy8gMikgTm9ib2R5IHNob3VsZCByZWx5IG9uIGBpbnN0YW5jZW9mIEZpYmVyYCBmb3IgdHlwZSB0ZXN0aW5nLiBXZSBzaG91bGRcbi8vICAgIGFsd2F5cyBrbm93IHdoZW4gaXQgaXMgYSBmaWJlci5cbi8vIDMpIFdlIG1pZ2h0IHdhbnQgdG8gZXhwZXJpbWVudCB3aXRoIHVzaW5nIG51bWVyaWMga2V5cyBzaW5jZSB0aGV5IGFyZSBlYXNpZXJcbi8vICAgIHRvIG9wdGltaXplIGluIGEgbm9uLUpJVCBlbnZpcm9ubWVudC5cbi8vIDQpIFdlIGNhbiBlYXNpbHkgZ28gZnJvbSBhIGNvbnN0cnVjdG9yIHRvIGEgY3JlYXRlRmliZXIgb2JqZWN0IGxpdGVyYWwgaWYgdGhhdFxuLy8gICAgaXMgZmFzdGVyLlxuLy8gNSkgSXQgc2hvdWxkIGJlIGVhc3kgdG8gcG9ydCB0aGlzIHRvIGEgQyBzdHJ1Y3QgYW5kIGtlZXAgYSBDIGltcGxlbWVudGF0aW9uXG4vLyAgICBjb21wYXRpYmxlLlxuXG5cbnZhciBjcmVhdGVGaWJlciA9IGZ1bmN0aW9uICh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vICRGbG93Rml4TWU6IHRoZSBzaGFwZXMgYXJlIGV4YWN0IGhlcmUgYnV0IEZsb3cgZG9lc24ndCBsaWtlIGNvbnN0cnVjdG9yc1xuICByZXR1cm4gbmV3IEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdCQxKENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiYgIXNob3VsZENvbnN0cnVjdCQxKHR5cGUpICYmIHR5cGUuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2hvdWxkQ29uc3RydWN0JDEoQ29tcG9uZW50KSA/IENsYXNzQ29tcG9uZW50IDogRnVuY3Rpb25Db21wb25lbnQ7XG4gIH0gZWxzZSBpZiAoQ29tcG9uZW50ICE9PSB1bmRlZmluZWQgJiYgQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gQ29tcG9uZW50LiQkdHlwZW9mO1xuXG4gICAgaWYgKCQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKSB7XG4gICAgICByZXR1cm4gRm9yd2FyZFJlZjtcbiAgICB9XG5cbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgcmV0dXJuIE1lbW9Db21wb25lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7XG59IC8vIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgYW4gYWx0ZXJuYXRlIGZpYmVyIHRvIGRvIHdvcmsgb24uXG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIHBlbmRpbmdQcm9wcykge1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50LmFsdGVybmF0ZTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3MgPT09IG51bGwpIHtcbiAgICAvLyBXZSB1c2UgYSBkb3VibGUgYnVmZmVyaW5nIHBvb2xpbmcgdGVjaG5pcXVlIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHdlJ2xsXG4gICAgLy8gb25seSBldmVyIG5lZWQgYXQgbW9zdCB0d28gdmVyc2lvbnMgb2YgYSB0cmVlLiBXZSBwb29sIHRoZSBcIm90aGVyXCIgdW51c2VkXG4gICAgLy8gbm9kZSB0aGF0IHdlJ3JlIGZyZWUgdG8gcmV1c2UuIFRoaXMgaXMgbGF6aWx5IGNyZWF0ZWQgdG8gYXZvaWQgYWxsb2NhdGluZ1xuICAgIC8vIGV4dHJhIG9iamVjdHMgZm9yIHRoaW5ncyB0aGF0IGFyZSBuZXZlciB1cGRhdGVkLiBJdCBhbHNvIGFsbG93IHVzIHRvXG4gICAgLy8gcmVjbGFpbSB0aGUgZXh0cmEgbWVtb3J5IGlmIG5lZWRlZC5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IGNyZWF0ZUZpYmVyKGN1cnJlbnQudGFnLCBwZW5kaW5nUHJvcHMsIGN1cnJlbnQua2V5LCBjdXJyZW50Lm1vZGUpO1xuICAgIHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID0gY3VycmVudC5lbGVtZW50VHlwZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlO1xuICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuXG4gICAge1xuICAgICAgLy8gREVWLW9ubHkgZmllbGRzXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJRCA9IGN1cnJlbnQuX2RlYnVnSUQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdTb3VyY2UgPSBjdXJyZW50Ll9kZWJ1Z1NvdXJjZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyID0gY3VycmVudC5fZGVidWdPd25lcjtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IGN1cnJlbnQ7XG4gICAgY3VycmVudC5hbHRlcm5hdGUgPSB3b3JrSW5Qcm9ncmVzcztcbiAgfSBlbHNlIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7IC8vIE5lZWRlZCBiZWNhdXNlIEJsb2NrcyBzdG9yZSBkYXRhIG9uIHR5cGUuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlOyAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gYWx0ZXJuYXRlLlxuICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBOb0ZsYWdzOyAvLyBUaGUgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSByZXNldCwgcmF0aGVyIHRoYW4gY29weSwgYWN0dWFsRHVyYXRpb24gJiBhY3R1YWxTdGFydFRpbWUuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRpbWUgZnJvbSBlbmRsZXNzbHkgYWNjdW11bGF0aW5nIGluIG5ldyBjb21taXRzLlxuICAgICAgLy8gVGhpcyBoYXMgdGhlIGRvd25zaWRlIG9mIHJlc2V0dGluZyB2YWx1ZXMgZm9yIGRpZmZlcmVudCBwcmlvcml0eSByZW5kZXJzLFxuICAgICAgLy8gQnV0IHdvcmtzIGZvciB5aWVsZGluZyAodGhlIGNvbW1vbiBjYXNlKSBhbmQgc2hvdWxkIHN1cHBvcnQgcmVzdW1pbmcuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgbGFuZXM6IGN1cnJlbnREZXBlbmRlbmNpZXMubGFuZXMsXG4gICAgZmlyc3RDb250ZXh0OiBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dFxuICB9OyAvLyBUaGVzZSB3aWxsIGJlIG92ZXJyaWRkZW4gZHVyaW5nIHRoZSBwYXJlbnQncyByZWNvbmNpbGlhdGlvblxuXG4gIHdvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBjdXJyZW50LnNpYmxpbmc7XG4gIHdvcmtJblByb2dyZXNzLmluZGV4ID0gY3VycmVudC5pbmRleDtcbiAgd29ya0luUHJvZ3Jlc3MucmVmID0gY3VycmVudC5yZWY7XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgPSBjdXJyZW50Ll9kZWJ1Z05lZWRzUmVtb3VudDtcblxuICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59IC8vIFVzZWQgdG8gcmV1c2UgYSBGaWJlciBmb3IgYSBzZWNvbmQgcGFzcy5cblxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyByZXNldHMgdGhlIEZpYmVyIHRvIHdoYXQgY3JlYXRlRmliZXIgb3IgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGRcbiAgLy8gaGF2ZSBzZXQgdGhlIHZhbHVlcyB0byBiZWZvcmUgZHVyaW5nIHRoZSBmaXJzdCBwYXNzLiBJZGVhbGx5IHRoaXMgd291bGRuJ3RcbiAgLy8gYmUgbmVjZXNzYXJ5IGJ1dCB1bmZvcnR1bmF0ZWx5IG1hbnkgY29kZSBwYXRocyByZWFkcyBmcm9tIHRoZSB3b3JrSW5Qcm9ncmVzc1xuICAvLyB3aGVuIHRoZXkgc2hvdWxkIGJlIHJlYWRpbmcgZnJvbSBjdXJyZW50IGFuZCB3cml0aW5nIHRvIHdvcmtJblByb2dyZXNzLlxuICAvLyBXZSBhc3N1bWUgcGVuZGluZ1Byb3BzLCBpbmRleCwga2V5LCByZWYsIHJldHVybiBhcmUgc3RpbGwgdW50b3VjaGVkIHRvXG4gIC8vIGF2b2lkIGRvaW5nIGFub3RoZXIgcmVjb25jaWxpYXRpb24uXG4gIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnIGJ1dCBrZWVwIGFueSBQbGFjZW1lbnQgdGFncywgc2luY2UgdGhhdCdzIHNvbWV0aGluZ1xuICAvLyB0aGF0IGNoaWxkIGZpYmVyIGlzIHNldHRpbmcsIG5vdCB0aGUgcmVjb25jaWxpYXRpb24uXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IFBsYWNlbWVudDsgLy8gVGhlIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICB3b3JrSW5Qcm9ncmVzcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBSZXNldCB0byBjcmVhdGVGaWJlcidzIGluaXRpYWwgdmFsdWVzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBOb3RlOiBXZSBkb24ndCByZXNldCB0aGUgYWN0dWFsVGltZSBjb3VudHMuIEl0J3MgdXNlZnVsIHRvIGFjY3VtdWxhdGVcbiAgICAgIC8vIGFjdHVhbCB0aW1lIGFjcm9zcyBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLlxuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gUmVzZXQgdG8gdGhlIGNsb25lZCB2YWx1ZXMgdGhhdCBjcmVhdGVXb3JrSW5Qcm9ncmVzcyB3b3VsZCd2ZS5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gTmVlZGVkIGJlY2F1c2UgQmxvY2tzIHN0b3JlIGRhdGEgb24gdHlwZS5cblxuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7IC8vIENsb25lIHRoZSBkZXBlbmRlbmNpZXMgb2JqZWN0LiBUaGlzIGlzIG11dGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UsIHNvXG4gICAgLy8gaXQgY2Fubm90IGJlIHNoYXJlZCB3aXRoIHRoZSBjdXJyZW50IGZpYmVyLlxuXG4gICAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50RGVwZW5kZW5jaWVzID09PSBudWxsID8gbnVsbCA6IHtcbiAgICAgIGxhbmVzOiBjdXJyZW50RGVwZW5kZW5jaWVzLmxhbmVzLFxuICAgICAgZmlyc3RDb250ZXh0OiBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dFxuICAgIH07XG5cbiAgICB7XG4gICAgICAvLyBOb3RlOiBXZSBkb24ndCByZXNldCB0aGUgYWN0dWFsVGltZSBjb3VudHMuIEl0J3MgdXNlZnVsIHRvIGFjY3VtdWxhdGVcbiAgICAgIC8vIGFjdHVhbCB0aW1lIGFjcm9zcyBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLlxuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xufVxuZnVuY3Rpb24gY3JlYXRlSG9zdFJvb3RGaWJlcih0YWcpIHtcbiAgdmFyIG1vZGU7XG5cbiAgaWYgKHRhZyA9PT0gQ29uY3VycmVudFJvb3QpIHtcbiAgICBtb2RlID0gQ29uY3VycmVudE1vZGUgfCBCbG9ja2luZ01vZGUgfCBTdHJpY3RNb2RlO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gQmxvY2tpbmdSb290KSB7XG4gICAgbW9kZSA9IEJsb2NraW5nTW9kZSB8IFN0cmljdE1vZGU7XG4gIH0gZWxzZSB7XG4gICAgbW9kZSA9IE5vTW9kZTtcbiAgfVxuXG4gIGlmICggaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAvLyBBbHdheXMgY29sbGVjdCBwcm9maWxlIHRpbWluZ3Mgd2hlbiBEZXZUb29scyBhcmUgcHJlc2VudC5cbiAgICAvLyBUaGlzIGVuYWJsZXMgRGV2VG9vbHMgdG8gc3RhcnQgY2FwdHVyaW5nIHRpbWluZyBhdCBhbnkgcG9pbnRcdTIwMTNcbiAgICAvLyBXaXRob3V0IHNvbWUgbm9kZXMgaW4gdGhlIHRyZWUgaGF2aW5nIGVtcHR5IGJhc2UgdGltZXMuXG4gICAgbW9kZSB8PSBQcm9maWxlTW9kZTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVGaWJlcihIb3N0Um9vdCwgbnVsbCwgbnVsbCwgbW9kZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHModHlwZSwgLy8gUmVhY3QkRWxlbWVudFR5cGVcbmtleSwgcGVuZGluZ1Byb3BzLCBvd25lciwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIGZpYmVyVGFnID0gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDsgLy8gVGhlIHJlc29sdmVkIHR5cGUgaXMgc2V0IGlmIHdlIGtub3cgd2hhdCB0aGUgZmluYWwgdHlwZSB3aWxsIGJlLiBJLmUuIGl0J3Mgbm90IGxhenkuXG5cbiAgdmFyIHJlc29sdmVkVHlwZSA9IHR5cGU7XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHNob3VsZENvbnN0cnVjdCQxKHR5cGUpKSB7XG4gICAgICBmaWJlclRhZyA9IENsYXNzQ29tcG9uZW50O1xuXG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBmaWJlclRhZyA9IEhvc3RDb21wb25lbnQ7XG4gIH0gZWxzZSB7XG4gICAgZ2V0VGFnOiBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KHBlbmRpbmdQcm9wcy5jaGlsZHJlbiwgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEU6XG4gICAgICAgIGZpYmVyVGFnID0gTW9kZTtcbiAgICAgICAgbW9kZSB8PSBEZWJ1Z1RyYWNpbmdNb2RlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICBmaWJlclRhZyA9IE1vZGU7XG4gICAgICAgIG1vZGUgfD0gU3RyaWN0TW9kZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVByb2ZpbGVyKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfT0ZGU0NSRUVOX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21MZWdhY3lIaWRkZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TQ09QRV9UWVBFOlxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IENvbnRleHRQcm92aWRlcjtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnN1bWVyXG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBDb250ZXh0Q29uc3VtZXI7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IEZvcndhcmRSZWY7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IE1lbW9Db21wb25lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gTGF6eUNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBCbG9jaztcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIFwiICsgJ25hbWVkIGltcG9ydHMuJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG93bmVyTmFtZSA9IG93bmVyID8gZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSA6IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChvd25lck5hbWUpIHtcbiAgICAgICAgICAgICAgaW5mbyArPSAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQ6IGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBidXQgZ290OiBcIiArICh0eXBlID09IG51bGwgPyB0eXBlIDogdHlwZW9mIHR5cGUpICsgXCIuXCIgKyBpbmZvICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoZmliZXJUYWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSB0eXBlO1xuICBmaWJlci50eXBlID0gcmVzb2x2ZWRUeXBlO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IG93bmVyO1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCBtb2RlLCBsYW5lcykge1xuICB2YXIgb3duZXIgPSBudWxsO1xuXG4gIHtcbiAgICBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHBlbmRpbmdQcm9wcyA9IGVsZW1lbnQucHJvcHM7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh0eXBlLCBrZXksIHBlbmRpbmdQcm9wcywgb3duZXIsIG1vZGUsIGxhbmVzKTtcblxuICB7XG4gICAgZmliZXIuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50cywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihGcmFnbWVudCwgZWxlbWVudHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIHBlbmRpbmdQcm9wcy5pZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yKCdQcm9maWxlciBtdXN0IHNwZWNpZnkgYW4gXCJpZFwiIGFzIGEgcHJvcCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFByb2ZpbGVyLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSB8IFByb2ZpbGVNb2RlKTsgLy8gVE9ETzogVGhlIFByb2ZpbGVyIGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgZmliZXIudHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG5cbiAge1xuICAgIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICAgIGVmZmVjdER1cmF0aW9uOiAwLFxuICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBTdXNwZW5zZUNvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICBmaWJlci50eXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZUxpc3QocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlTGlzdENvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuXG4gIHtcbiAgICAvLyBUT0RPOiBUaGUgU3VzcGVuc2VMaXN0Q29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gICAgLy8gaW5zdGVhZC5cbiAgICBmaWJlci50eXBlID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoT2Zmc2NyZWVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBPZmZzY3JlZW5Db21wb25lbnQgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAge1xuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTtcbiAgfVxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUxlZ2FjeUhpZGRlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoTGVnYWN5SGlkZGVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBMZWdhY3lIaWRkZW4gZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAge1xuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU7XG4gIH1cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVGV4dChjb250ZW50LCBtb2RlLCBsYW5lcykge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0VGV4dCwgY29udGVudCwgbnVsbCwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUhvc3RJbnN0YW5jZUZvckRlbGV0aW9uKCkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0Q29tcG9uZW50LCBudWxsLCBudWxsLCBOb01vZGUpOyAvLyBUT0RPOiBUaGVzZSBzaG91bGQgbm90IG5lZWQgYSB0eXBlLlxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gJ0RFTEVURUQnO1xuICBmaWJlci50eXBlID0gJ0RFTEVURUQnO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCBtb2RlLCBsYW5lcykge1xuICB2YXIgcGVuZGluZ1Byb3BzID0gcG9ydGFsLmNoaWxkcmVuICE9PSBudWxsID8gcG9ydGFsLmNoaWxkcmVuIDogW107XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RQb3J0YWwsIHBlbmRpbmdQcm9wcywgcG9ydGFsLmtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICBjb250YWluZXJJbmZvOiBwb3J0YWwuY29udGFpbmVySW5mbyxcbiAgICBwZW5kaW5nQ2hpbGRyZW46IG51bGwsXG4gICAgLy8gVXNlZCBieSBwZXJzaXN0ZW50IHVwZGF0ZXNcbiAgICBpbXBsZW1lbnRhdGlvbjogcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gIH07XG4gIHJldHVybiBmaWJlcjtcbn0gLy8gVXNlZCBmb3Igc3Rhc2hpbmcgV0lQIHByb3BlcnRpZXMgdG8gcmVwbGF5IGZhaWxlZCB3b3JrIGluIERFVi5cblxuZnVuY3Rpb24gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodGFyZ2V0LCBzb3VyY2UpIHtcbiAgaWYgKHRhcmdldCA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgRmliZXIncyBpbml0aWFsIHByb3BlcnRpZXMgd2lsbCBhbHdheXMgYmUgb3ZlcndyaXR0ZW4uXG4gICAgLy8gV2Ugb25seSB1c2UgYSBGaWJlciB0byBlbnN1cmUgdGhlIHNhbWUgaGlkZGVuIGNsYXNzIHNvIERFViBpc24ndCBzbG93LlxuICAgIHRhcmdldCA9IGNyZWF0ZUZpYmVyKEluZGV0ZXJtaW5hdGVDb21wb25lbnQsIG51bGwsIG51bGwsIE5vTW9kZSk7XG4gIH0gLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IHdyaXR0ZW4gYXMgYSBsaXN0IG9mIGFsbCBwcm9wZXJ0aWVzLlxuICAvLyBXZSB0cmllZCB0byB1c2UgT2JqZWN0LmFzc2lnbigpIGluc3RlYWQgYnV0IHRoaXMgaXMgY2FsbGVkIGluXG4gIC8vIHRoZSBob3R0ZXN0IHBhdGgsIGFuZCBPYmplY3QuYXNzaWduKCkgd2FzIHRvbyBzbG93OlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyNTAyXG4gIC8vIFRoaXMgY29kZSBpcyBERVYtb25seSBzbyBzaXplIGlzIG5vdCBhIGNvbmNlcm4uXG5cblxuICB0YXJnZXQudGFnID0gc291cmNlLnRhZztcbiAgdGFyZ2V0LmtleSA9IHNvdXJjZS5rZXk7XG4gIHRhcmdldC5lbGVtZW50VHlwZSA9IHNvdXJjZS5lbGVtZW50VHlwZTtcbiAgdGFyZ2V0LnR5cGUgPSBzb3VyY2UudHlwZTtcbiAgdGFyZ2V0LnN0YXRlTm9kZSA9IHNvdXJjZS5zdGF0ZU5vZGU7XG4gIHRhcmdldC5yZXR1cm4gPSBzb3VyY2UucmV0dXJuO1xuICB0YXJnZXQuY2hpbGQgPSBzb3VyY2UuY2hpbGQ7XG4gIHRhcmdldC5zaWJsaW5nID0gc291cmNlLnNpYmxpbmc7XG4gIHRhcmdldC5pbmRleCA9IHNvdXJjZS5pbmRleDtcbiAgdGFyZ2V0LnJlZiA9IHNvdXJjZS5yZWY7XG4gIHRhcmdldC5wZW5kaW5nUHJvcHMgPSBzb3VyY2UucGVuZGluZ1Byb3BzO1xuICB0YXJnZXQubWVtb2l6ZWRQcm9wcyA9IHNvdXJjZS5tZW1vaXplZFByb3BzO1xuICB0YXJnZXQudXBkYXRlUXVldWUgPSBzb3VyY2UudXBkYXRlUXVldWU7XG4gIHRhcmdldC5tZW1vaXplZFN0YXRlID0gc291cmNlLm1lbW9pemVkU3RhdGU7XG4gIHRhcmdldC5kZXBlbmRlbmNpZXMgPSBzb3VyY2UuZGVwZW5kZW5jaWVzO1xuICB0YXJnZXQubW9kZSA9IHNvdXJjZS5tb2RlO1xuICB0YXJnZXQuZmxhZ3MgPSBzb3VyY2UuZmxhZ3M7XG4gIHRhcmdldC5uZXh0RWZmZWN0ID0gc291cmNlLm5leHRFZmZlY3Q7XG4gIHRhcmdldC5maXJzdEVmZmVjdCA9IHNvdXJjZS5maXJzdEVmZmVjdDtcbiAgdGFyZ2V0Lmxhc3RFZmZlY3QgPSBzb3VyY2UubGFzdEVmZmVjdDtcbiAgdGFyZ2V0LmxhbmVzID0gc291cmNlLmxhbmVzO1xuICB0YXJnZXQuY2hpbGRMYW5lcyA9IHNvdXJjZS5jaGlsZExhbmVzO1xuICB0YXJnZXQuYWx0ZXJuYXRlID0gc291cmNlLmFsdGVybmF0ZTtcblxuICB7XG4gICAgdGFyZ2V0LmFjdHVhbER1cmF0aW9uID0gc291cmNlLmFjdHVhbER1cmF0aW9uO1xuICAgIHRhcmdldC5hY3R1YWxTdGFydFRpbWUgPSBzb3VyY2UuYWN0dWFsU3RhcnRUaW1lO1xuICAgIHRhcmdldC5zZWxmQmFzZUR1cmF0aW9uID0gc291cmNlLnNlbGZCYXNlRHVyYXRpb247XG4gICAgdGFyZ2V0LnRyZWVCYXNlRHVyYXRpb24gPSBzb3VyY2UudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuXG4gIHRhcmdldC5fZGVidWdJRCA9IHNvdXJjZS5fZGVidWdJRDtcbiAgdGFyZ2V0Ll9kZWJ1Z1NvdXJjZSA9IHNvdXJjZS5fZGVidWdTb3VyY2U7XG4gIHRhcmdldC5fZGVidWdPd25lciA9IHNvdXJjZS5fZGVidWdPd25lcjtcbiAgdGFyZ2V0Ll9kZWJ1Z05lZWRzUmVtb3VudCA9IHNvdXJjZS5fZGVidWdOZWVkc1JlbW91bnQ7XG4gIHRhcmdldC5fZGVidWdIb29rVHlwZXMgPSBzb3VyY2UuX2RlYnVnSG9va1R5cGVzO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBGaWJlclJvb3ROb2RlKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSkge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5jb250YWluZXJJbmZvID0gY29udGFpbmVySW5mbztcbiAgdGhpcy5wZW5kaW5nQ2hpbGRyZW4gPSBudWxsO1xuICB0aGlzLmN1cnJlbnQgPSBudWxsO1xuICB0aGlzLnBpbmdDYWNoZSA9IG51bGw7XG4gIHRoaXMuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgdGhpcy50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0O1xuICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5oeWRyYXRlID0gaHlkcmF0ZTtcbiAgdGhpcy5jYWxsYmFja05vZGUgPSBudWxsO1xuICB0aGlzLmNhbGxiYWNrUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgdGhpcy5ldmVudFRpbWVzID0gY3JlYXRlTGFuZU1hcChOb0xhbmVzKTtcbiAgdGhpcy5leHBpcmF0aW9uVGltZXMgPSBjcmVhdGVMYW5lTWFwKE5vVGltZXN0YW1wKTtcbiAgdGhpcy5wZW5kaW5nTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLnN1c3BlbmRlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5waW5nZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZXhwaXJlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5tdXRhYmxlUmVhZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5lbnRhbmdsZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZW50YW5nbGVtZW50cyA9IGNyZWF0ZUxhbmVNYXAoTm9MYW5lcyk7XG5cbiAge1xuICAgIHRoaXMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgdGhpcy5pbnRlcmFjdGlvblRocmVhZElEID0gdHJhY2luZy51bnN0YWJsZV9nZXRUaHJlYWRJRCgpO1xuICAgIHRoaXMubWVtb2l6ZWRJbnRlcmFjdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgdGhpcy5wZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSBuZXcgTWFwKCk7XG4gIH1cblxuICB7XG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgQmxvY2tpbmdSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gJ2NyZWF0ZUJsb2NraW5nUm9vdCgpJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ29uY3VycmVudFJvb3Q6XG4gICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSAnY3JlYXRlUm9vdCgpJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTGVnYWN5Um9vdDpcbiAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9ICdjcmVhdGVMZWdhY3lSb290KCknO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJSb290KGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSwgaHlkcmF0aW9uQ2FsbGJhY2tzKSB7XG4gIHZhciByb290ID0gbmV3IEZpYmVyUm9vdE5vZGUoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlKTtcbiAgLy8gc3RhdGVOb2RlIGlzIGFueS5cblxuXG4gIHZhciB1bmluaXRpYWxpemVkRmliZXIgPSBjcmVhdGVIb3N0Um9vdEZpYmVyKHRhZyk7XG4gIHJvb3QuY3VycmVudCA9IHVuaW5pdGlhbGl6ZWRGaWJlcjtcbiAgdW5pbml0aWFsaXplZEZpYmVyLnN0YXRlTm9kZSA9IHJvb3Q7XG4gIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh1bmluaXRpYWxpemVkRmliZXIpO1xuICByZXR1cm4gcm9vdDtcbn1cblxuLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZlcnNpb24gdXNlZCBmb3Igc2VydmVyIHJlbmRlcmluZyBtYXRjaGVzIHRoZSBvbmVcbi8vIHRoYXQgaXMgZXZlbnR1YWxseSByZWFkIGR1cmluZyBoeWRyYXRpb24uXG4vLyBJZiB0aGV5IGRvbid0IG1hdGNoIHRoZXJlJ3MgYSBwb3RlbnRpYWwgdGVhciBhbmQgYSBmdWxsIGRlb3B0IHJlbmRlciBpcyByZXF1aXJlZC5cblxuZnVuY3Rpb24gcmVnaXN0ZXJNdXRhYmxlU291cmNlRm9ySHlkcmF0aW9uKHJvb3QsIG11dGFibGVTb3VyY2UpIHtcbiAgdmFyIGdldFZlcnNpb24gPSBtdXRhYmxlU291cmNlLl9nZXRWZXJzaW9uO1xuICB2YXIgdmVyc2lvbiA9IGdldFZlcnNpb24obXV0YWJsZVNvdXJjZS5fc291cmNlKTsgLy8gVE9ETyBDbGVhciB0aGlzIGRhdGEgb25jZSBhbGwgcGVuZGluZyBoeWRyYXRpb24gd29yayBpcyBmaW5pc2hlZC5cbiAgLy8gUmV0YWluaW5nIGl0IGZvcmV2ZXIgbWF5IGludGVyZmVyZSB3aXRoIEdDLlxuXG4gIGlmIChyb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPT0gbnVsbCkge1xuICAgIHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IFttdXRhYmxlU291cmNlLCB2ZXJzaW9uXTtcbiAgfSBlbHNlIHtcbiAgICByb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEucHVzaChtdXRhYmxlU291cmNlLCB2ZXJzaW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lckluZm8sIC8vIFRPRE86IGZpZ3VyZSBvdXQgdGhlIEFQSSBmb3IgY3Jvc3MtcmVuZGVyZXIgaW1wbGVtZW50YXRpb24uXG5pbXBsZW1lbnRhdGlvbikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBudWxsO1xuICByZXR1cm4ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93IHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBQb3J0YWxcbiAgICAkJHR5cGVvZjogUkVBQ1RfUE9SVEFMX1RZUEUsXG4gICAga2V5OiBrZXkgPT0gbnVsbCA/IG51bGwgOiAnJyArIGtleSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgY29udGFpbmVySW5mbzogY29udGFpbmVySW5mbyxcbiAgICBpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb25cbiAgfTtcbn1cblxudmFyIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXM7XG52YXIgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGU7XG5cbntcbiAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZSA9IHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpIHtcbiAgaWYgKCFwYXJlbnRDb21wb25lbnQpIHtcbiAgICByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB9XG5cbiAgdmFyIGZpYmVyID0gZ2V0KHBhcmVudENvbXBvbmVudCk7XG4gIHZhciBwYXJlbnRDb250ZXh0ID0gZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQoZmliZXIpO1xuXG4gIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgdmFyIENvbXBvbmVudCA9IGZpYmVyLnR5cGU7XG5cbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIENvbXBvbmVudCwgcGFyZW50Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnQsIG1ldGhvZE5hbWUpIHtcbiAge1xuICAgIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuXG4gICAgaWYgKGZpYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50LnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQXJndW1lbnQgYXBwZWFycyB0byBub3QgYmUgYSBSZWFjdENvbXBvbmVudC4gS2V5czogXCIgKyBPYmplY3Qua2V5cyhjb21wb25lbnQpICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcblxuICAgIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChob3N0RmliZXIubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihob3N0RmliZXIpO1xuXG4gICAgICAgICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICBlcnJvcignJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggaXMgaW5zaWRlIFN0cmljdE1vZGUuICcgKyAnSW5zdGVhZCwgYWRkIGEgcmVmIGRpcmVjdGx5IHRvIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIHJlZmVyZW5jZS4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLWZpbmQtbm9kZScsIG1ldGhvZE5hbWUsIG1ldGhvZE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcignJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggcmVuZGVycyBTdHJpY3RNb2RlIGNoaWxkcmVuLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1maW5kLW5vZGUnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgLy8gSWRlYWxseSB0aGlzIHNob3VsZCByZXNldCB0byBwcmV2aW91cyBidXQgdGhpcyBzaG91bGRuJ3QgYmUgY2FsbGVkIGluXG4gICAgICAgICAgLy8gcmVuZGVyIGFuZCB0aGVyZSdzIGFub3RoZXIgd2FybmluZyBmb3IgdGhhdCBhbnl3YXkuXG4gICAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2aW91c0ZpYmVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250YWluZXIoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlLCBoeWRyYXRpb25DYWxsYmFja3MpIHtcbiAgcmV0dXJuIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpO1xufVxuZnVuY3Rpb24gdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIGNvbnRhaW5lciwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjaykge1xuICB7XG4gICAgb25TY2hlZHVsZVJvb3QoY29udGFpbmVyLCBlbGVtZW50KTtcbiAgfVxuXG4gIHZhciBjdXJyZW50JDEgPSBjb250YWluZXIuY3VycmVudDtcbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcblxuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZlVubW9ja2VkU2NoZWR1bGVyKGN1cnJlbnQkMSk7XG4gICAgICB3YXJuSWZOb3RTY29wZWRXaXRoTWF0Y2hpbmdBY3QoY3VycmVudCQxKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGN1cnJlbnQkMSk7XG5cbiAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpO1xuXG4gIGlmIChjb250YWluZXIuY29udGV4dCA9PT0gbnVsbCkge1xuICAgIGNvbnRhaW5lci5jb250ZXh0ID0gY29udGV4dDtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIucGVuZGluZ0NvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAge1xuICAgIGlmIChpc1JlbmRlcmluZyAmJiBjdXJyZW50ICE9PSBudWxsICYmICFkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzKSB7XG4gICAgICBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gdHJ1ZTtcblxuICAgICAgZXJyb3IoJ1JlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlOyAnICsgJ3RyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVudCB1cGRhdGVzIGZyb20gcmVuZGVyIGlzIG5vdCBhbGxvd2VkLiAnICsgJ0lmIG5lY2Vzc2FyeSwgdHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiBjb21wb25lbnREaWRVcGRhdGUuXFxuXFxuJyArICdDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAlcy4nLCBnZXRDb21wb25lbnROYW1lKGN1cnJlbnQudHlwZSkgfHwgJ1Vua25vd24nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgfTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNhbGxiYWNrO1xuXG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgZW5xdWV1ZVVwZGF0ZShjdXJyZW50JDEsIHVwZGF0ZSk7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihjdXJyZW50JDEsIGxhbmUsIGV2ZW50VGltZSk7XG4gIHJldHVybiBsYW5lO1xufVxuZnVuY3Rpb24gZ2V0UHVibGljUm9vdEluc3RhbmNlKGNvbnRhaW5lcikge1xuICB2YXIgY29udGFpbmVyRmliZXIgPSBjb250YWluZXIuY3VycmVudDtcblxuICBpZiAoIWNvbnRhaW5lckZpYmVyLmNoaWxkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKGNvbnRhaW5lckZpYmVyLmNoaWxkLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBnZXRQdWJsaWNJbnN0YW5jZShjb250YWluZXJGaWJlci5jaGlsZC5zdGF0ZU5vZGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb250YWluZXJGaWJlci5jaGlsZC5zdGF0ZU5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSkge1xuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwgJiYgc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUgPSBoaWdoZXJQcmlvcml0eUxhbmUoc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUsIHJldHJ5TGFuZSk7XG4gIH1cbn0gLy8gSW5jcmVhc2VzIHRoZSBwcmlvcml0eSBvZiB0aGVubmFibGVzIHdoZW4gdGhleSByZXNvbHZlIHdpdGhpbiB0aGlzIGJvdW5kYXJ5LlxuXG5cbmZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSk7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSkge1xuICAgIG1hcmtSZXRyeUxhbmVJbXBsKGFsdGVybmF0ZSwgcmV0cnlMYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uJDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IGFuZCB0aGV5IHNob3VsZCBub3Qgc3VzcGVuZCBvbiBJL08sXG4gICAgLy8gc2luY2UgeW91IGhhdmUgdG8gd3JhcCBhbnl0aGluZyB0aGF0IG1pZ2h0IHN1c3BlbmQgaW5cbiAgICAvLyBTdXNwZW5zZS5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uJDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IGFuZCB0aGV5IHNob3VsZCBub3Qgc3VzcGVuZCBvbiBJL08sXG4gICAgLy8gc2luY2UgeW91IGhhdmUgdG8gd3JhcCBhbnl0aGluZyB0aGF0IG1pZ2h0IHN1c3BlbmQgaW5cbiAgICAvLyBTdXNwZW5zZS5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5JDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IG90aGVyIHRoYW4gc3luY2hyb25vdXNseSBmbHVzaCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBydW5XaXRoUHJpb3JpdHkkMihwcmlvcml0eSwgZm4pIHtcblxuICB0cnkge1xuICAgIHNldEN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkocHJpb3JpdHkpO1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICB9XG59XG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhmaWJlcikge1xuICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzKGZpYmVyKTtcblxuICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaG9zdEZpYmVyLnRhZyA9PT0gRnVuZGFtZW50YWxDb21wb25lbnQpIHtcbiAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZS5pbnN0YW5jZTtcbiAgfVxuXG4gIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xufVxuXG52YXIgc2hvdWxkU3VzcGVuZEltcGwgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkU3VzcGVuZChmaWJlcikge1xuICByZXR1cm4gc2hvdWxkU3VzcGVuZEltcGwoZmliZXIpO1xufVxudmFyIG92ZXJyaWRlSG9va1N0YXRlID0gbnVsbDtcbnZhciBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wcyA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gbnVsbDtcbnZhciBzY2hlZHVsZVVwZGF0ZSA9IG51bGw7XG52YXIgc2V0U3VzcGVuc2VIYW5kbGVyID0gbnVsbDtcblxue1xuICB2YXIgY29weVdpdGhEZWxldGVJbXBsID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgaW5kZXgpIHtcbiAgICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoaW5kZXggKyAxID09PSBwYXRoLmxlbmd0aCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgICAgdXBkYXRlZC5zcGxpY2Uoa2V5LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH0gLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG5cbiAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aERlbGV0ZUltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSk7XG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoRGVsZXRlID0gZnVuY3Rpb24gKG9iaiwgcGF0aCkge1xuICAgIHJldHVybiBjb3B5V2l0aERlbGV0ZUltcGwob2JqLCBwYXRoLCAwKTtcbiAgfTtcblxuICB2YXIgY29weVdpdGhSZW5hbWVJbXBsID0gZnVuY3Rpb24gKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXgpIHtcbiAgICB2YXIgb2xkS2V5ID0gb2xkUGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoaW5kZXggKyAxID09PSBvbGRQYXRoLmxlbmd0aCkge1xuICAgICAgdmFyIG5ld0tleSA9IG5ld1BhdGhbaW5kZXhdOyAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICAgIHVwZGF0ZWRbbmV3S2V5XSA9IHVwZGF0ZWRbb2xkS2V5XTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgICAgdXBkYXRlZC5zcGxpY2Uob2xkS2V5LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW29sZEtleV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICAgIHVwZGF0ZWRbb2xkS2V5XSA9IGNvcHlXaXRoUmVuYW1lSW1wbCggLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuICAgICAgb2JqW29sZEtleV0sIG9sZFBhdGgsIG5ld1BhdGgsIGluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoUmVuYW1lID0gZnVuY3Rpb24gKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIGlmIChvbGRQYXRoLmxlbmd0aCAhPT0gbmV3UGF0aC5sZW5ndGgpIHtcbiAgICAgIHdhcm4oJ2NvcHlXaXRoUmVuYW1lKCkgZXhwZWN0cyBwYXRocyBvZiB0aGUgc2FtZSBsZW5ndGgnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1BhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGlmIChvbGRQYXRoW2ldICE9PSBuZXdQYXRoW2ldKSB7XG4gICAgICAgICAgd2FybignY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIHRvIGJlIHRoZSBzYW1lIGV4Y2VwdCBmb3IgdGhlIGRlZXBlc3Qga2V5Jyk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29weVdpdGhSZW5hbWVJbXBsKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgMCk7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoU2V0SW1wbCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIGluZGV4LCB2YWx1ZSkge1xuICAgIGlmIChpbmRleCA+PSBwYXRoLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTsgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhTZXRJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEsIHZhbHVlKTtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhTZXQgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCB2YWx1ZSkge1xuICAgIHJldHVybiBjb3B5V2l0aFNldEltcGwob2JqLCBwYXRoLCAwLCB2YWx1ZSk7XG4gIH07XG5cbiAgdmFyIGZpbmRIb29rID0gZnVuY3Rpb24gKGZpYmVyLCBpZCkge1xuICAgIC8vIEZvciBub3csIHRoZSBcImlkXCIgb2Ygc3RhdGVmdWwgaG9va3MgaXMganVzdCB0aGUgc3RhdGVmdWwgaG9vayBpbmRleC5cbiAgICAvLyBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSB3aXRoIGUuZy4gbmVzdGVkIGhvb2tzLlxuICAgIHZhciBjdXJyZW50SG9vayA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgICB3aGlsZSAoY3VycmVudEhvb2sgIT09IG51bGwgJiYgaWQgPiAwKSB7XG4gICAgICBjdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gICAgICBpZC0tO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50SG9vaztcbiAgfTsgLy8gU3VwcG9ydCBEZXZUb29scyBlZGl0YWJsZSB2YWx1ZXMgZm9yIHVzZVN0YXRlIGFuZCB1c2VSZWR1Y2VyLlxuXG5cbiAgb3ZlcnJpZGVIb29rU3RhdGUgPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoLCB2YWx1ZSkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFNldChob29rLm1lbW9pemVkU3RhdGUsIHBhdGgsIHZhbHVlKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoRGVsZXRlKGhvb2subWVtb2l6ZWRTdGF0ZSwgcGF0aCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBfYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07XG5cbiAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFJlbmFtZShob29rLm1lbW9pemVkU3RhdGUsIG9sZFBhdGgsIG5ld1BhdGgpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gX2Fzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIHByb3BzIGZvciBmdW5jdGlvbiBjb21wb25lbnRzLCBmb3J3YXJkUmVmLCBtZW1vLCBob3N0IGNvbXBvbmVudHMsIGV0Yy5cblxuXG4gIG92ZXJyaWRlUHJvcHMgPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgsIHZhbHVlKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhTZXQoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCwgdmFsdWUpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aERlbGV0ZShmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhSZW5hbWUoZmliZXIubWVtb2l6ZWRQcm9wcywgb2xkUGF0aCwgbmV3UGF0aCk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBzY2hlZHVsZVVwZGF0ZSA9IGZ1bmN0aW9uIChmaWJlcikge1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBzZXRTdXNwZW5zZUhhbmRsZXIgPSBmdW5jdGlvbiAobmV3U2hvdWxkU3VzcGVuZEltcGwpIHtcbiAgICBzaG91bGRTdXNwZW5kSW1wbCA9IG5ld1Nob3VsZFN1c3BlbmRJbXBsO1xuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcihmaWJlcikge1xuICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xufVxuXG5mdW5jdGlvbiBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlKGluc3RhbmNlKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scygpIHtcbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbmZ1bmN0aW9uIGluamVjdEludG9EZXZUb29scyhkZXZUb29sc0NvbmZpZykge1xuICB2YXIgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgPSBkZXZUb29sc0NvbmZpZy5maW5kRmliZXJCeUhvc3RJbnN0YW5jZTtcbiAgdmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xuICByZXR1cm4gaW5qZWN0SW50ZXJuYWxzKHtcbiAgICBidW5kbGVUeXBlOiBkZXZUb29sc0NvbmZpZy5idW5kbGVUeXBlLFxuICAgIHZlcnNpb246IGRldlRvb2xzQ29uZmlnLnZlcnNpb24sXG4gICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogZGV2VG9vbHNDb25maWcucmVuZGVyZXJQYWNrYWdlTmFtZSxcbiAgICByZW5kZXJlckNvbmZpZzogZGV2VG9vbHNDb25maWcucmVuZGVyZXJDb25maWcsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGU6IG92ZXJyaWRlSG9va1N0YXRlLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoLFxuICAgIG92ZXJyaWRlUHJvcHM6IG92ZXJyaWRlUHJvcHMsXG4gICAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6IG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoLFxuICAgIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoOiBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCxcbiAgICBzZXRTdXNwZW5zZUhhbmRsZXI6IHNldFN1c3BlbnNlSGFuZGxlcixcbiAgICBzY2hlZHVsZVVwZGF0ZTogc2NoZWR1bGVVcGRhdGUsXG4gICAgY3VycmVudERpc3BhdGNoZXJSZWY6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6IGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyLFxuICAgIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSB8fCBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlLFxuICAgIC8vIFJlYWN0IFJlZnJlc2hcbiAgICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6ICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2ggLFxuICAgIHNjaGVkdWxlUmVmcmVzaDogIHNjaGVkdWxlUmVmcmVzaCAsXG4gICAgc2NoZWR1bGVSb290OiAgc2NoZWR1bGVSb290ICxcbiAgICBzZXRSZWZyZXNoSGFuZGxlcjogIHNldFJlZnJlc2hIYW5kbGVyICxcbiAgICAvLyBFbmFibGVzIERldlRvb2xzIHRvIGFwcGVuZCBvd25lciBzdGFja3MgdG8gZXJyb3IgbWVzc2FnZXMgaW4gREVWIG1vZGUuXG4gICAgZ2V0Q3VycmVudEZpYmVyOiAgZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMgXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBSZWFjdERPTVJvb3QoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIHRoaXMuX2ludGVybmFsUm9vdCA9IGNyZWF0ZVJvb3RJbXBsKGNvbnRhaW5lciwgQ29uY3VycmVudFJvb3QsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBSZWFjdERPTUJsb2NraW5nUm9vdChjb250YWluZXIsIHRhZywgb3B0aW9ucykge1xuICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBjcmVhdGVSb290SW1wbChjb250YWluZXIsIHRhZywgb3B0aW9ucyk7XG59XG5cblJlYWN0RE9NUm9vdC5wcm90b3R5cGUucmVuZGVyID0gUmVhY3RET01CbG9ja2luZ1Jvb3QucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcblxuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiAnICsgJ1RvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cblxuICAgIHZhciBjb250YWluZXIgPSByb290LmNvbnRhaW5lckluZm87XG5cbiAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBob3N0SW5zdGFuY2UgPSBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhyb290LmN1cnJlbnQpO1xuXG4gICAgICBpZiAoaG9zdEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChob3N0SW5zdGFuY2UucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoZSAnICsgJ3Jvb3QgY29udGFpbmVyIHdhcyByZW1vdmVkIHdpdGhvdXQgdXNpbmcgUmVhY3QuIFRoaXMgaXMgbm90ICcgKyAnc3VwcG9ydGVkIGFuZCB3aWxsIGNhdXNlIGVycm9ycy4gSW5zdGVhZCwgY2FsbCAnICsgXCJyb290LnVubW91bnQoKSB0byBlbXB0eSBhIHJvb3QncyBjb250YWluZXIuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCByb290LCBudWxsLCBudWxsKTtcbn07XG5cblJlYWN0RE9NUm9vdC5wcm90b3R5cGUudW5tb3VudCA9IFJlYWN0RE9NQmxvY2tpbmdSb290LnByb3RvdHlwZS51bm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCd1bm1vdW50KC4uLik6IGRvZXMgbm90IHN1cHBvcnQgYSBjYWxsYmFjayBhcmd1bWVudC4gJyArICdUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIGEgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcbiAgdmFyIGNvbnRhaW5lciA9IHJvb3QuY29udGFpbmVySW5mbztcbiAgdXBkYXRlQ29udGFpbmVyKG51bGwsIHJvb3QsIG51bGwsIGZ1bmN0aW9uICgpIHtcbiAgICB1bm1hcmtDb250YWluZXJBc1Jvb3QoY29udGFpbmVyKTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVSb290SW1wbChjb250YWluZXIsIHRhZywgb3B0aW9ucykge1xuICAvLyBUYWcgaXMgZWl0aGVyIExlZ2FjeVJvb3Qgb3IgQ29uY3VycmVudCBSb290XG4gIHZhciBoeWRyYXRlID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0ZSA9PT0gdHJ1ZTtcbiAgdmFyIGh5ZHJhdGlvbkNhbGxiYWNrcyA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGlvbk9wdGlvbnMgfHwgbnVsbDtcbiAgdmFyIG11dGFibGVTb3VyY2VzID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucy5tdXRhYmxlU291cmNlcyB8fCBudWxsO1xuICB2YXIgcm9vdCA9IGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXIsIHRhZywgaHlkcmF0ZSk7XG4gIG1hcmtDb250YWluZXJBc1Jvb3Qocm9vdC5jdXJyZW50LCBjb250YWluZXIpO1xuICB2YXIgY29udGFpbmVyTm9kZVR5cGUgPSBjb250YWluZXIubm9kZVR5cGU7XG5cbiAge1xuICAgIHZhciByb290Q29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXI7XG4gICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKG11dGFibGVTb3VyY2VzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtdXRhYmxlU291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG11dGFibGVTb3VyY2UgPSBtdXRhYmxlU291cmNlc1tpXTtcbiAgICAgIHJlZ2lzdGVyTXV0YWJsZVNvdXJjZUZvckh5ZHJhdGlvbihyb290LCBtdXRhYmxlU291cmNlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm9vdDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVJvb3QoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUmVhY3RET01CbG9ja2luZ1Jvb3QoY29udGFpbmVyLCBMZWdhY3lSb290LCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRDb250YWluZXIobm9kZSkge1xuICByZXR1cm4gISEobm9kZSAmJiAobm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgJiYgbm9kZS5ub2RlVmFsdWUgPT09ICcgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgJykpO1xufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIHRvcExldmVsVXBkYXRlV2FybmluZ3M7XG52YXIgd2FybmVkQWJvdXRIeWRyYXRlQVBJID0gZmFsc2U7XG5cbntcbiAgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncyA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgICBpZiAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgJiYgY29udGFpbmVyLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBob3N0SW5zdGFuY2UgPSBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lci5faW50ZXJuYWxSb290LmN1cnJlbnQpO1xuXG4gICAgICBpZiAoaG9zdEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChob3N0SW5zdGFuY2UucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoaXMgJyArICdjb250YWluZXIgd2FzIHJlbW92ZWQgd2l0aG91dCB1c2luZyBSZWFjdC4gVGhpcyBpcyBub3QgJyArICdzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgZXJyb3JzLiBJbnN0ZWFkLCBjYWxsICcgKyAnUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSB0byBlbXB0eSBhIGNvbnRhaW5lci4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0ID0gISFjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgdmFyIGhhc05vblJvb3RSZWFjdENoaWxkID0gISEocm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKSk7XG5cbiAgICBpZiAoaGFzTm9uUm9vdFJlYWN0Q2hpbGQgJiYgIWlzUm9vdFJlbmRlcmVkQnlTb21lUmVhY3QpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogUmVwbGFjaW5nIFJlYWN0LXJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSBuZXcgcm9vdCAnICsgJ2NvbXBvbmVudC4gSWYgeW91IGludGVuZGVkIHRvIHVwZGF0ZSB0aGUgY2hpbGRyZW4gb2YgdGhpcyBub2RlLCAnICsgJ3lvdSBzaG91bGQgaW5zdGVhZCBoYXZlIHRoZSBleGlzdGluZyBjaGlsZHJlbiB1cGRhdGUgdGhlaXIgc3RhdGUgJyArICdhbmQgcmVuZGVyIHRoZSBuZXcgY29tcG9uZW50cyBpbnN0ZWFkIG9mIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyLicpO1xuICAgIH1cblxuICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiBjb250YWluZXIudGFnTmFtZSAmJiBjb250YWluZXIudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnQk9EWScpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoKTogUmVuZGVyaW5nIGNvbXBvbmVudHMgZGlyZWN0bHkgaW50byBkb2N1bWVudC5ib2R5IGlzICcgKyAnZGlzY291cmFnZWQsIHNpbmNlIGl0cyBjaGlsZHJlbiBhcmUgb2Z0ZW4gbWFuaXB1bGF0ZWQgYnkgdGhpcmQtcGFydHkgJyArICdzY3JpcHRzIGFuZCBicm93c2VyIGV4dGVuc2lvbnMuIFRoaXMgbWF5IGxlYWQgdG8gc3VidGxlICcgKyAncmVjb25jaWxpYXRpb24gaXNzdWVzLiBUcnkgcmVuZGVyaW5nIGludG8gYSBjb250YWluZXIgZWxlbWVudCBjcmVhdGVkICcgKyAnZm9yIHlvdXIgYXBwLicpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb250YWluZXIuZG9jdW1lbnRFbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRIeWRyYXRlRHVlVG9MZWdhY3lIZXVyaXN0aWMoY29udGFpbmVyKSB7XG4gIHZhciByb290RWxlbWVudCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICByZXR1cm4gISEocm9vdEVsZW1lbnQgJiYgcm9vdEVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiByb290RWxlbWVudC5oYXNBdHRyaWJ1dGUoUk9PVF9BVFRSSUJVVEVfTkFNRSkpO1xufVxuXG5mdW5jdGlvbiBsZWdhY3lDcmVhdGVSb290RnJvbURPTUNvbnRhaW5lcihjb250YWluZXIsIGZvcmNlSHlkcmF0ZSkge1xuICB2YXIgc2hvdWxkSHlkcmF0ZSA9IGZvcmNlSHlkcmF0ZSB8fCBzaG91bGRIeWRyYXRlRHVlVG9MZWdhY3lIZXVyaXN0aWMoY29udGFpbmVyKTsgLy8gRmlyc3QgY2xlYXIgYW55IGV4aXN0aW5nIGNvbnRlbnQuXG5cbiAgaWYgKCFzaG91bGRIeWRyYXRlKSB7XG4gICAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICAgIHZhciByb290U2libGluZztcblxuICAgIHdoaWxlIChyb290U2libGluZyA9IGNvbnRhaW5lci5sYXN0Q2hpbGQpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCF3YXJuZWQgJiYgcm9vdFNpYmxpbmcubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiByb290U2libGluZy5oYXNBdHRyaWJ1dGUoUk9PVF9BVFRSSUJVVEVfTkFNRSkpIHtcbiAgICAgICAgICB3YXJuZWQgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ3JlbmRlcigpOiBUYXJnZXQgbm9kZSBoYXMgbWFya3VwIHJlbmRlcmVkIGJ5IFJlYWN0LCBidXQgdGhlcmUgJyArICdhcmUgdW5yZWxhdGVkIG5vZGVzIGFzIHdlbGwuIFRoaXMgaXMgbW9zdCBjb21tb25seSBjYXVzZWQgYnkgJyArICd3aGl0ZS1zcGFjZSBpbnNlcnRlZCBhcm91bmQgc2VydmVyLXJlbmRlcmVkIG1hcmt1cC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQocm9vdFNpYmxpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoc2hvdWxkSHlkcmF0ZSAmJiAhZm9yY2VIeWRyYXRlICYmICF3YXJuZWRBYm91dEh5ZHJhdGVBUEkpIHtcbiAgICAgIHdhcm5lZEFib3V0SHlkcmF0ZUFQSSA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ3JlbmRlcigpOiBDYWxsaW5nIFJlYWN0RE9NLnJlbmRlcigpIHRvIGh5ZHJhdGUgc2VydmVyLXJlbmRlcmVkIG1hcmt1cCAnICsgJ3dpbGwgc3RvcCB3b3JraW5nIGluIFJlYWN0IHYxOC4gUmVwbGFjZSB0aGUgUmVhY3RET00ucmVuZGVyKCkgY2FsbCAnICsgJ3dpdGggUmVhY3RET00uaHlkcmF0ZSgpIGlmIHlvdSB3YW50IFJlYWN0IHRvIGF0dGFjaCB0byB0aGUgc2VydmVyIEhUTUwuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUxlZ2FjeVJvb3QoY29udGFpbmVyLCBzaG91bGRIeWRyYXRlID8ge1xuICAgIGh5ZHJhdGU6IHRydWVcbiAgfSA6IHVuZGVmaW5lZCk7XG59XG5cbmZ1bmN0aW9uIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gIHtcbiAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBjaGlsZHJlbiwgY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUsIGNhbGxiYWNrKSB7XG4gIHtcbiAgICB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzKGNvbnRhaW5lcik7XG4gICAgd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaywgJ3JlbmRlcicpO1xuICB9IC8vIFRPRE86IFdpdGhvdXQgYGFueWAgdHlwZSwgRmxvdyBzYXlzIFwiUHJvcGVydHkgY2Fubm90IGJlIGFjY2Vzc2VkIG9uIGFueVxuICAvLyBtZW1iZXIgb2YgaW50ZXJzZWN0aW9uIHR5cGUuXCIgV2h5eXl5eXkuXG5cblxuICB2YXIgcm9vdCA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuICB2YXIgZmliZXJSb290O1xuXG4gIGlmICghcm9vdCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICByb290ID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPSBsZWdhY3lDcmVhdGVSb290RnJvbURPTUNvbnRhaW5lcihjb250YWluZXIsIGZvcmNlSHlkcmF0ZSk7XG4gICAgZmliZXJSb290ID0gcm9vdC5faW50ZXJuYWxSb290O1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xuICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9IC8vIEluaXRpYWwgbW91bnQgc2hvdWxkIG5vdCBiZSBiYXRjaGVkLlxuXG5cbiAgICB1bmJhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgZmliZXJSb290LCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBmaWJlclJvb3QgPSByb290Ll9pbnRlcm5hbFJvb3Q7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX29yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xuXG4gICAgICAgIF9vcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9IC8vIFVwZGF0ZVxuXG5cbiAgICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIGZpYmVyUm9vdCwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudE9yRWxlbWVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIkMy5jdXJyZW50O1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIG93bmVyLnN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIHdhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gb3duZXIuc3RhdGVOb2RlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcjtcblxuICAgICAgaWYgKCF3YXJuZWRBYm91dFJlZnNJblJlbmRlcikge1xuICAgICAgICBlcnJvcignJXMgaXMgYWNjZXNzaW5nIGZpbmRET01Ob2RlIGluc2lkZSBpdHMgcmVuZGVyKCkuICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpIHx8ICdBIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb21wb25lbnRPckVsZW1lbnQ7XG4gIH1cblxuICB7XG4gICAgcmV0dXJuIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnRPckVsZW1lbnQsICdmaW5kRE9NTm9kZScpO1xuICB9XG59XG5mdW5jdGlvbiBoeWRyYXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLmh5ZHJhdGUoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIGNyZWF0ZVJvb3QoY29udGFpbmVyLCB7aHlkcmF0ZTogdHJ1ZX0pLnJlbmRlcihlbGVtZW50KT8nKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogdGhyb3cgb3Igd2FybiBpZiB3ZSBjb3VsZG4ndCBoeWRyYXRlP1xuXG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIGVsZW1lbnQsIGNvbnRhaW5lciwgdHJ1ZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gcmVuZGVyKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLnJlbmRlcigpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgcm9vdC5yZW5kZXIoZWxlbWVudCk/Jyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIGVsZW1lbnQsIGNvbnRhaW5lciwgZmFsc2UsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lck5vZGUpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghKHBhcmVudENvbXBvbmVudCAhPSBudWxsICYmIGhhcyhwYXJlbnRDb21wb25lbnQpKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInBhcmVudENvbXBvbmVudCBtdXN0IGJlIGEgdmFsaWQgUmVhY3QgQ29tcG9uZW50XCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBmYWxzZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gdW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSgpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QudW5tb3VudCgpPycpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcikge1xuICAgIHtcbiAgICAgIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIHZhciByZW5kZXJlZEJ5RGlmZmVyZW50UmVhY3QgPSByb290RWwgJiYgIWdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKTtcblxuICAgICAgaWYgKHJlbmRlcmVkQnlEaWZmZXJlbnRSZWFjdCkge1xuICAgICAgICBlcnJvcihcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3JlIGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgYW5vdGhlciBjb3B5IG9mIFJlYWN0LicpO1xuICAgICAgfVxuICAgIH0gLy8gVW5tb3VudCBzaG91bGQgbm90IGJlIGJhdGNoZWQuXG5cblxuICAgIHVuYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgICAgbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgbnVsbCwgY29udGFpbmVyLCBmYWxzZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBgZGVsZXRlIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyYFxuICAgICAgICBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9IG51bGw7XG4gICAgICAgIHVubWFya0NvbnRhaW5lckFzUm9vdChjb250YWluZXIpO1xuICAgICAgfSk7XG4gICAgfSk7IC8vIElmIHlvdSBjYWxsIHVubW91bnRDb21wb25lbnRBdE5vZGUgdHdpY2UgaW4gcXVpY2sgc3VjY2Vzc2lvbiwgeW91J2xsXG4gICAgLy8gZ2V0IGB0cnVlYCB0d2ljZS4gVGhhdCdzIHByb2JhYmx5IGZpbmU/XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICB2YXIgX3Jvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuXG4gICAgICB2YXIgaGFzTm9uUm9vdFJlYWN0Q2hpbGQgPSAhIShfcm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUoX3Jvb3RFbCkpOyAvLyBDaGVjayBpZiB0aGUgY29udGFpbmVyIGl0c2VsZiBpcyBhIFJlYWN0IHJvb3Qgbm9kZS5cblxuICAgICAgdmFyIGlzQ29udGFpbmVyUmVhY3RSb290ID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIucGFyZW50Tm9kZSkgJiYgISFjb250YWluZXIucGFyZW50Tm9kZS5fcmVhY3RSb290Q29udGFpbmVyO1xuXG4gICAgICBpZiAoaGFzTm9uUm9vdFJlYWN0Q2hpbGQpIHtcbiAgICAgICAgZXJyb3IoXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IFJlYWN0IGFuZCBpcyBub3QgYSB0b3AtbGV2ZWwgY29udGFpbmVyLiAlcycsIGlzQ29udGFpbmVyUmVhY3RSb290ID8gJ1lvdSBtYXkgaGF2ZSBhY2NpZGVudGFsbHkgcGFzc2VkIGluIGEgUmVhY3Qgcm9vdCBub2RlIGluc3RlYWQgJyArICdvZiBpdHMgY29udGFpbmVyLicgOiAnSW5zdGVhZCwgaGF2ZSB0aGUgcGFyZW50IGNvbXBvbmVudCB1cGRhdGUgaXRzIHN0YXRlIGFuZCAnICsgJ3JlcmVuZGVyIGluIG9yZGVyIHRvIHJlbW92ZSB0aGlzIGNvbXBvbmVudC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuc2V0QXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uJDEpO1xuc2V0QXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24kMSk7XG5zZXRBdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkoYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5JDEpO1xuc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkocnVuV2l0aFByaW9yaXR5JDIpO1xudmFyIGRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsID0gZmFsc2U7XG5cbntcbiAgaWYgKHR5cGVvZiBNYXAgIT09ICdmdW5jdGlvbicgfHwgLy8gJEZsb3dJc3N1ZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBNYXAgaGFzIG5vIHByb3RvdHlwZVxuICBNYXAucHJvdG90eXBlID09IG51bGwgfHwgdHlwZW9mIE1hcC5wcm90b3R5cGUuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgU2V0ICE9PSAnZnVuY3Rpb24nIHx8IC8vICRGbG93SXNzdWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgU2V0IGhhcyBubyBwcm90b3R5cGVcbiAgU2V0LnByb3RvdHlwZSA9PSBudWxsIHx8IHR5cGVvZiBTZXQucHJvdG90eXBlLmNsZWFyICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBTZXQucHJvdG90eXBlLmZvckVhY2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICBlcnJvcignUmVhY3QgZGVwZW5kcyBvbiBNYXAgYW5kIFNldCBidWlsdC1pbiB0eXBlcy4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gIH1cbn1cblxuc2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMyk7XG5zZXRCYXRjaGluZ0ltcGxlbWVudGF0aW9uKGJhdGNoZWRVcGRhdGVzJDEsIGRpc2NyZXRlVXBkYXRlcyQxLCBmbHVzaERpc2NyZXRlVXBkYXRlcywgYmF0Y2hlZEV2ZW50VXBkYXRlcyQxKTtcblxuZnVuY3Rpb24gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lcikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBwYXNzIFJlYWN0RE9NIHBvcnRhbCBpbXBsZW1lbnRhdGlvbiBhcyB0aGlyZCBhcmd1bWVudFxuICAvLyAkRmxvd0ZpeE1lIFRoZSBGbG93IHR5cGUgaXMgb3BhcXVlIGJ1dCB0aGVyZSdzIG5vIHdheSB0byBhY3R1YWxseSBjcmVhdGUgaXQuXG5cblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXIsIG51bGwsIGtleSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcblxuICByZXR1cm4gdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVyKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwpIHtcbiAgICAgIGRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsID0gdHJ1ZTtcblxuICAgICAgd2FybignVGhlIFJlYWN0RE9NLnVuc3RhYmxlX2NyZWF0ZVBvcnRhbCgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RET00uY3JlYXRlUG9ydGFsKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSSwgJyArICdidXQgd2l0aG91dCB0aGUgXCJ1bnN0YWJsZV9cIiBwcmVmaXguJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXIsIGtleSk7XG59XG5cbnZhciBJbnRlcm5hbHMgPSB7XG4gIC8vIEtlZXAgaW4gc3luYyB3aXRoIFJlYWN0VGVzdFV0aWxzLmpzLCBhbmQgUmVhY3RUZXN0VXRpbHNBY3QuanMuXG4gIC8vIFRoaXMgaXMgYW4gYXJyYXkgZm9yIGJldHRlciBtaW5pZmljYXRpb24uXG4gIEV2ZW50czogW2dldEluc3RhbmNlRnJvbU5vZGUsIGdldE5vZGVGcm9tSW5zdGFuY2UsIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUsIGVucXVldWVTdGF0ZVJlc3RvcmUsIHJlc3RvcmVTdGF0ZUlmTmVlZGVkLCBmbHVzaFBhc3NpdmVFZmZlY3RzLCAvLyBUT0RPOiBUaGlzIGlzIHJlbGF0ZWQgdG8gYGFjdGAsIG5vdCBldmVudHMuIE1vdmUgdG8gc2VwYXJhdGUga2V5P1xuICBJc1RoaXNSZW5kZXJlckFjdGluZ11cbn07XG52YXIgZm91bmREZXZUb29scyA9IGluamVjdEludG9EZXZUb29scyh7XG4gIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxcbiAgYnVuZGxlVHlwZTogIDEgLFxuICB2ZXJzaW9uOiBSZWFjdFZlcnNpb24sXG4gIHJlbmRlcmVyUGFja2FnZU5hbWU6ICdyZWFjdC1kb20nXG59KTtcblxue1xuICBpZiAoIWZvdW5kRGV2VG9vbHMgJiYgY2FuVXNlRE9NICYmIHdpbmRvdy50b3AgPT09IHdpbmRvdy5zZWxmKSB7XG4gICAgLy8gSWYgd2UncmUgaW4gQ2hyb21lIG9yIEZpcmVmb3gsIHByb3ZpZGUgYSBkb3dubG9hZCBsaW5rIGlmIG5vdCBpbnN0YWxsZWQuXG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lJykgPiAtMSAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0VkZ2UnKSA9PT0gLTEgfHwgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdGaXJlZm94JykgPiAtMSkge1xuICAgICAgdmFyIHByb3RvY29sID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sOyAvLyBEb24ndCB3YXJuIGluIGV4b3RpYyBjYXNlcyBsaWtlIGNocm9tZS1leHRlbnNpb246Ly8uXG5cbiAgICAgIGlmICgvXihodHRwcz98ZmlsZSk6JC8udGVzdChwcm90b2NvbCkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuICAgICAgICBjb25zb2xlLmluZm8oJyVjRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xzICcgKyAnZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzJyArIChwcm90b2NvbCA9PT0gJ2ZpbGU6JyA/ICdcXG5Zb3UgbWlnaHQgbmVlZCB0byB1c2UgYSBsb2NhbCBIVFRQIHNlcnZlciAoaW5zdGVhZCBvZiBmaWxlOi8vKTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMtZmFxJyA6ICcnKSwgJ2ZvbnQtd2VpZ2h0OmJvbGQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IEludGVybmFscztcbmV4cG9ydHMuY3JlYXRlUG9ydGFsID0gY3JlYXRlUG9ydGFsJDE7XG5leHBvcnRzLmZpbmRET01Ob2RlID0gZmluZERPTU5vZGU7XG5leHBvcnRzLmZsdXNoU3luYyA9IGZsdXNoU3luYztcbmV4cG9ydHMuaHlkcmF0ZSA9IGh5ZHJhdGU7XG5leHBvcnRzLnJlbmRlciA9IHJlbmRlcjtcbmV4cG9ydHMudW5tb3VudENvbXBvbmVudEF0Tm9kZSA9IHVubW91bnRDb21wb25lbnRBdE5vZGU7XG5leHBvcnRzLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gYmF0Y2hlZFVwZGF0ZXMkMTtcbmV4cG9ydHMudW5zdGFibGVfY3JlYXRlUG9ydGFsID0gdW5zdGFibGVfY3JlYXRlUG9ydGFsO1xuZXhwb3J0cy51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciA9IHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vbGliL2hhcycpO1xuXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7IC8qKi8gfVxuICB9O1xufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cbiAqIEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5kIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBlLWNoZWNrZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gZ2V0U3RhY2sgUmV0dXJucyB0aGUgY29tcG9uZW50IHN0YWNrLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBnZXRTdGFjaykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcbiAgICAgICAgICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArXG4gICAgICAgICAgICAgICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICcgK1xuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdGYWlsZWQgJyArIGxvY2F0aW9uICsgJyB0eXBlOiAnICsgZXJyb3IubWVzc2FnZSArIChzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzZXRzIHdhcm5pbmcgY2FjaGUgd2hlbiB0ZXN0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlcztcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJy4vY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJpZ2ludDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2JpZ2ludCcpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlLCBkYXRhKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGE6IHt9O1xuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9uICcgK1xuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpLFxuICAgICAgICAgIHtleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZX1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheSwgZ290ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMuICcgK1xuICAgICAgICAgICAgJ0EgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLidcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzKHByb3BWYWx1ZSwga2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgdmFyIGNoZWNrZXJSZXN1bHQgPSBjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoY2hlY2tlclJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQuZGF0YSAmJiBoYXMoY2hlY2tlclJlc3VsdC5kYXRhLCAnZXhwZWN0ZWRUeXBlJykpIHtcbiAgICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goY2hlY2tlclJlc3VsdC5kYXRhLmV4cGVjdGVkVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBleHBlY3RlZFR5cGVzTWVzc2FnZSA9IChleHBlY3RlZFR5cGVzLmxlbmd0aCA+IDApID8gJywgZXhwZWN0ZWQgb25lIG9mIHR5cGUgWycgKyBleHBlY3RlZFR5cGVzLmpvaW4oJywgJykgKyAnXSc6ICcnO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCcgKyBleHBlY3RlZFR5cGVzTWVzc2FnZSArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgdHlwZSkge1xuICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5ICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlICsgJ2AuJ1xuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIGdldFByZWNpc2VUeXBlKGNoZWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbSBwcm9wcy5cbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmIChoYXMoc2hhcGVUeXBlcywga2V5KSAmJiB0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwgIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoYXJnKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBwYXJzZVZhbHVlKGFyZykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VWYWx1ZSAoYXJnKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gYXJnO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQ2xhc3MgKHZhbHVlLCBuZXdDbGFzcykge1xuXHRcdGlmICghbmV3Q2xhc3MpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgJyAnICsgbmV3Q2xhc3M7XG5cdFx0fVxuXHRcblx0XHRyZXR1cm4gdmFsdWUgKyBuZXdDbGFzcztcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciByZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5mdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgYmxhY2tsaXN0KSB7XG4gIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXG4gICAgaWYgKG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgIGlmIChpbmhlcml0ZWRDb21wb25lbnQgJiYgaW5oZXJpdGVkQ29tcG9uZW50ICE9PSBvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgICAgaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBpbmhlcml0ZWRDb21wb25lbnQsIGJsYWNrbGlzdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRTdGF0aWNzID0gZ2V0U3RhdGljcyh0YXJnZXRDb21wb25lbnQpO1xuICAgIHZhciBzb3VyY2VTdGF0aWNzID0gZ2V0U3RhdGljcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFLTk9XTl9TVEFUSUNTW2tleV0gJiYgIShibGFja2xpc3QgJiYgYmxhY2tsaXN0W2tleV0pICYmICEoc291cmNlU3RhdGljcyAmJiBzb3VyY2VTdGF0aWNzW2tleV0pICYmICEodGFyZ2V0U3RhdGljcyAmJiB0YXJnZXRTdGF0aWNzW2tleV0pKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb21wb25lbnQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcbiIsICIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCAiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLCAidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUdldDtcbiIsICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCAidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsICJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsICIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCAiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrR2V0O1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCAiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwgInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsICJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCAidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsICIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsICJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCAiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCAidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCAidmFyIEhhc2ggPSByZXF1aXJlKCcuL19IYXNoJyksXG4gICAgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUNsZWFyO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCAidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwgInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCAidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCAidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCAiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVBZGQ7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlSGFzO1xuIiwgInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyksXG4gICAgc2V0Q2FjaGVBZGQgPSByZXF1aXJlKCcuL19zZXRDYWNoZUFkZCcpLFxuICAgIHNldENhY2hlSGFzID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVIYXMnKTtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldENhY2hlO1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhY2hlSGFzO1xuIiwgInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlTb21lID0gcmVxdWlyZSgnLi9fYXJyYXlTb21lJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBhcnJTdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAoYXJyU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIGFyclN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBhcnJheTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxBcnJheXM7XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsICIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFRvQXJyYXk7XG4iLCAiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBtYXBUb0FycmF5ID0gcmVxdWlyZSgnLi9fbWFwVG9BcnJheScpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXG4gKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCB0YWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XG5cbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAvLyBDb2VyY2UgYm9vbGVhbnMgdG8gYDFgIG9yIGAwYCBhbmQgZGF0ZXMgdG8gbWlsbGlzZWNvbmRzLlxuICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgIHJldHVybiBlcSgrb2JqZWN0LCArb3RoZXIpO1xuXG4gICAgY2FzZSBlcnJvclRhZzpcbiAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHZhciBjb252ZXJ0ID0gbWFwVG9BcnJheTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRztcbiAgICAgIGNvbnZlcnQgfHwgKGNvbnZlcnQgPSBzZXRUb0FycmF5KTtcblxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICBiaXRtYXNrIHw9IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc7XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgdmFyIHJlc3VsdCA9IGVxdWFsQXJyYXlzKGNvbnZlcnQob2JqZWN0KSwgY29udmVydChvdGhlciksIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCkgPT0gc3ltYm9sVmFsdWVPZi5jYWxsKG90aGVyKTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxCeVRhZztcbiIsICIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlQdXNoO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCAidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRBbGxLZXlzO1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcbiIsICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5cyk7XG4gKiAvLyA9PiBbW10sIFtdXVxuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5c1swXSA9PT0gYXJyYXlzWzFdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIHN0dWJBcnJheSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJBcnJheTtcbiIsICJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsICJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLCAiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCAidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCAidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCAidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsICIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwgInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsICJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsICJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsICJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXM7XG4iLCAidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzO1xuIiwgInZhciBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChvYmpTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbE9iamVjdHM7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhVmlldztcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFByb21pc2UgPSBnZXROYXRpdmUocm9vdCwgJ1Byb21pc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsICJ2YXIgRGF0YVZpZXcgPSByZXF1aXJlKCcuL19EYXRhVmlldycpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIFByb21pc2UgPSByZXF1aXJlKCcuL19Qcm9taXNlJyksXG4gICAgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgV2Vha01hcCA9IHJlcXVpcmUoJy4vX1dlYWtNYXAnKSxcbiAgICBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKipcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG52YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUYWc7XG4iLCAidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgZXF1YWxCeVRhZyA9IHJlcXVpcmUoJy4vX2VxdWFsQnlUYWcnKSxcbiAgICBlcXVhbE9iamVjdHMgPSByZXF1aXJlKCcuL19lcXVhbE9iamVjdHMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWxEZWVwO1xuIiwgInZhciBiYXNlSXNFcXVhbERlZXAgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbERlZXAnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvblxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgfVxuICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbDtcbiIsICJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpO1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmVcbiAqIGVxdWl2YWxlbnQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLFxuICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICogc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBhcmUgY29tcGFyZWRcbiAqIGJ5IHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTVxuICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5pc0VxdWFsKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIG9iamVjdCA9PT0gb3RoZXI7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VxdWFsKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VxdWFsO1xuIiwgIi8vISBtb21lbnQuanNcbi8vISB2ZXJzaW9uIDogMi4zMC4xXG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBtb21lbnRqcy5jb21cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgYXJyTGVuID0gYXJyLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyckxlbjsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHk6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0OiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZEVyYTogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgICAgICAgICAgZXJhOiBudWxsLFxuICAgICAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgICAgICByZmMyODIyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICB2YXIgZmxhZ3MgPSBudWxsLFxuICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBmYWxzZSxcbiAgICAgICAgICAgIGlzTm93VmFsaWQgPSBtLl9kICYmICFpc05hTihtLl9kLmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChpc05vd1ZhbGlkKSB7XG4gICAgICAgICAgICBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgbW9tZW50UHJvcGVydGllc0xlbiA9IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllc0xlbiA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGFyZ0xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPVxuICAgICAgICAgICAgLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIEQ6ICdkYXRlJyxcbiAgICAgICAgZGF0ZXM6ICdkYXRlJyxcbiAgICAgICAgZGF0ZTogJ2RhdGUnLFxuICAgICAgICBkOiAnZGF5JyxcbiAgICAgICAgZGF5czogJ2RheScsXG4gICAgICAgIGRheTogJ2RheScsXG4gICAgICAgIGU6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheXM6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheTogJ3dlZWtkYXknLFxuICAgICAgICBFOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXlzOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXk6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgREREOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgZGF5b2Z5ZWFyczogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcjogJ2RheU9mWWVhcicsXG4gICAgICAgIGg6ICdob3VyJyxcbiAgICAgICAgaG91cnM6ICdob3VyJyxcbiAgICAgICAgaG91cjogJ2hvdXInLFxuICAgICAgICBtczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtaWxsaXNlY29uZDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbTogJ21pbnV0ZScsXG4gICAgICAgIG1pbnV0ZXM6ICdtaW51dGUnLFxuICAgICAgICBtaW51dGU6ICdtaW51dGUnLFxuICAgICAgICBNOiAnbW9udGgnLFxuICAgICAgICBtb250aHM6ICdtb250aCcsXG4gICAgICAgIG1vbnRoOiAnbW9udGgnLFxuICAgICAgICBROiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXJzOiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXI6ICdxdWFydGVyJyxcbiAgICAgICAgczogJ3NlY29uZCcsXG4gICAgICAgIHNlY29uZHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmQ6ICdzZWNvbmQnLFxuICAgICAgICBnZzogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXJzOiAnd2Vla1llYXInLFxuICAgICAgICB3ZWVreWVhcjogJ3dlZWtZZWFyJyxcbiAgICAgICAgR0c6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyczogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgaXNvd2Vla3llYXI6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIHc6ICd3ZWVrJyxcbiAgICAgICAgd2Vla3M6ICd3ZWVrJyxcbiAgICAgICAgd2VlazogJ3dlZWsnLFxuICAgICAgICBXOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWtzOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWs6ICdpc29XZWVrJyxcbiAgICAgICAgeTogJ3llYXInLFxuICAgICAgICB5ZWFyczogJ3llYXInLFxuICAgICAgICB5ZWFyOiAneWVhcicsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge1xuICAgICAgICBkYXRlOiA5LFxuICAgICAgICBkYXk6IDExLFxuICAgICAgICB3ZWVrZGF5OiAxMSxcbiAgICAgICAgaXNvV2Vla2RheTogMTEsXG4gICAgICAgIGRheU9mWWVhcjogNCxcbiAgICAgICAgaG91cjogMTMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAxNixcbiAgICAgICAgbWludXRlOiAxNCxcbiAgICAgICAgbW9udGg6IDgsXG4gICAgICAgIHF1YXJ0ZXI6IDcsXG4gICAgICAgIHNlY29uZDogMTUsXG4gICAgICAgIHdlZWtZZWFyOiAxLFxuICAgICAgICBpc29XZWVrWWVhcjogMSxcbiAgICAgICAgd2VlazogNSxcbiAgICAgICAgaXNvV2VlazogNSxcbiAgICAgICAgeWVhcjogMSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxID0gL1xcZC8sIC8vICAgICAgIDAgLSA5XG4gICAgICAgIG1hdGNoMiA9IC9cXGRcXGQvLCAvLyAgICAgIDAwIC0gOTlcbiAgICAgICAgbWF0Y2gzID0gL1xcZHszfS8sIC8vICAgICAwMDAgLSA5OTlcbiAgICAgICAgbWF0Y2g0ID0gL1xcZHs0fS8sIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgICAgIG1hdGNoNiA9IC9bKy1dP1xcZHs2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8yID0gL1xcZFxcZD8vLCAvLyAgICAgICAwIC0gOTlcbiAgICAgICAgbWF0Y2gzdG80ID0gL1xcZFxcZFxcZFxcZD8vLCAvLyAgICAgOTk5IC0gOTk5OVxuICAgICAgICBtYXRjaDV0bzYgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy8sIC8vICAgOTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8zID0gL1xcZHsxLDN9LywgLy8gICAgICAgMCAtIDk5OVxuICAgICAgICBtYXRjaDF0bzQgPSAvXFxkezEsNH0vLCAvLyAgICAgICAwIC0gOTk5OVxuICAgICAgICBtYXRjaDF0bzYgPSAvWystXT9cXGR7MSw2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2hVbnNpZ25lZCA9IC9cXGQrLywgLy8gICAgICAgMCAtIGluZlxuICAgICAgICBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvLCAvLyAgICAtaW5mIC0gaW5mXG4gICAgICAgIG1hdGNoT2Zmc2V0ID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpLCAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hTaG9ydE9mZnNldCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpLCAvLyArMDAgLTAwICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG4gICAgICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuICAgICAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgICAgIG1hdGNoV29yZCA9XG4gICAgICAgICAgICAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxcbiAgICAgICAgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyA9IC9eWzEtOV1cXGQ/LywgLy8gICAgICAgICAxLTk5XG4gICAgICAgIG1hdGNoMXRvMkhhc1plcm8gPSAvXihbMS05XVxcZHxcXGQpLywgLy8gICAgICAgICAgIDAtOTlcbiAgICAgICAgcmVnZXhlcztcblxuICAgIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4odG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpXG4gICAgICAgICAgICA/IHJlZ2V4XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4ID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKFxuICAgICAgICAgICAgc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIHRva2VucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBmdW5jID0gY2FsbGJhY2ssXG4gICAgICAgICAgICB0b2tlbkxlbjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbi5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGQgPSBtb20uX2QsXG4gICAgICAgICAgICBpc1VUQyA9IG1vbS5faXNVVEM7XG5cbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdNaWxsaXNlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgOiBkLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENTZWNvbmRzKCkgOiBkLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWludXRlcygpIDogZC5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICBjYXNlICdIb3Vycyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENIb3VycygpIDogZC5nZXRIb3VycygpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXRlKCkgOiBkLmdldERhdGUoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RheSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXkoKSA6IGQuZ2V0RGF5KCk7XG4gICAgICAgICAgICBjYXNlICdNb250aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNb250aCgpIDogZC5nZXRNb250aCgpO1xuICAgICAgICAgICAgY2FzZSAnRnVsbFllYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRnVsbFllYXIoKSA6IGQuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsgLy8gSnVzdCBpbiBjYXNlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIHZhciBkLCBpc1VUQywgeWVhciwgbW9udGgsIGRhdGU7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZCA9IG1vbS5fZDtcbiAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVENcbiAgICAgICAgICAgICAgICAgICAgPyBkLnNldFVUQ01pbGxpc2Vjb25kcyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBkLnNldE1pbGxpc2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENTZWNvbmRzKHZhbHVlKSA6IGQuc2V0U2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnTWludXRlcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNaW51dGVzKHZhbHVlKSA6IGQuc2V0TWludXRlcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDSG91cnModmFsdWUpIDogZC5zZXRIb3Vycyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENEYXRlKHZhbHVlKSA6IGQuc2V0RGF0ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnRGF5JzogLy8gTm90IHJlYWxcbiAgICAgICAgICAgIC8vICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF5KHZhbHVlKSA6IGQuc2V0RGF5KHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBjYXNlICdNb250aCc6IC8vIE5vdCB1c2VkIGJlY2F1c2Ugd2UgbmVlZCB0byBwYXNzIHR3byB2YXJpYWJsZXNcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ01vbnRoKHZhbHVlKSA6IGQuc2V0TW9udGgodmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gU2VlIGJlbG93IC4uLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG5cbiAgICAgICAgeWVhciA9IHZhbHVlO1xuICAgICAgICBtb250aCA9IG1vbS5tb250aCgpO1xuICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcbiAgICAgICAgZGF0ZSA9IGRhdGUgPT09IDI5ICYmIG1vbnRoID09PSAxICYmICFpc0xlYXBZZWFyKHllYXIpID8gMjggOiBkYXRlO1xuICAgICAgICB2b2lkIChpc1VUQ1xuICAgICAgICAgICAgPyBkLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBkLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKSk7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBwcmlvcml0aXplZExlbiA9IHByaW9yaXRpemVkLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZExlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID1cbiAgICAgICAgICAgICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9XG4gICAgICAgICAgICAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy8sXG4gICAgICAgIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1tcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFsnc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0W1xuICAgICAgICAgICAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykgKyAnfF4nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHNldE1vbnRoKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1vbnRoID0gdmFsdWUsXG4gICAgICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcblxuICAgICAgICBkYXRlID0gZGF0ZSA8IDI5ID8gZGF0ZSA6IE1hdGgubWluKGRhdGUsIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIG1vbnRoKSk7XG4gICAgICAgIHZvaWQgKG1vbS5faXNVVENcbiAgICAgICAgICAgID8gbW9tLl9kLnNldFVUQ01vbnRoKG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBtb20uX2Quc2V0TW9udGgobW9udGgsIGRhdGUpKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgc2hvcnRQLFxuICAgICAgICAgICAgbG9uZ1A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQID0gcmVnZXhFc2NhcGUodGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdQKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vIGNhbid0IGp1c3QgYXBwbHkoKSB0byBjcmVhdGUgYSBkYXRlOlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTgxMzQ4XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlKHkpIHtcbiAgICAgICAgdmFyIGRhdGUsIGFyZ3M7XG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsXG4gICAgICAgICAgICByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLFxuICAgICAgICAgICAgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsndycsICd3dycsICdXJywgJ1dXJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPVxuICAgICAgICAgICAgJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IGlzQXJyYXkodGhpcy5fd2Vla2RheXMpXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzW1xuICAgICAgICAgICAgICAgICAgbSAmJiBtICE9PSB0cnVlICYmIHRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHdlZWtkYXlzLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZSQxKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c01pbihcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF5ID0gZ2V0KHRoaXMsICdEYXknKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWxlTmFtZVNhbmUobmFtZSkge1xuICAgICAgICAvLyBQcmV2ZW50IG5hbWVzIHRoYXQgbG9vayBsaWtlIGZpbGVzeXN0ZW0gcGF0aHMsIGkuZSBjb250YWluICcvJyBvciAnXFwnXG4gICAgICAgIC8vIEVuc3VyZSBuYW1lIGlzIGF2YWlsYWJsZSBhbmQgZnVuY3Rpb24gcmV0dXJucyBib29sZWFuXG4gICAgICAgIHJldHVybiAhIShuYW1lICYmIG5hbWUubWF0Y2goJ15bXi9cXFxcXFxcXF0qJCcpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGwsXG4gICAgICAgICAgICBhbGlhc2VkUmVxdWlyZTtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgbW9kdWxlICYmXG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyAmJlxuICAgICAgICAgICAgaXNMb2NhbGVOYW1lU2FuZShuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2xkTG9jYWxlID0gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgbm90IGZvdW5kIHRvIGF2b2lkIHJlcGVhdGluZyBleHBlbnNpdmUgZmlsZSByZXF1aXJlIGNhbGwgY2F1c2luZyBoaWdoIENQVVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGZpbmQgZW4tVVMsIGVuX1VTLCBlbi11cyBmb3IgZXZlcnkgZm9ybWF0IGNhbGxcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbnVsbDsgLy8gbnVsbCBtZWFucyBub3QgZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gbW9tZW50LmR1cmF0aW9uLl9sb2NhbGUgPSBtb21lbnQuX2xvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnTG9jYWxlICcgKyBrZXkgKyAnIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbmVMb2NhbGVPdmVycmlkZScsXG4gICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVGYW1pbGllc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGxvY2FsZSBBRlRFUiBhbGwgY2hpbGQgbG9jYWxlcyBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGNyZWF0ZWQsIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHRoZSBjaGlsZCBsb2NhbGUgc2V0LlxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsICYmIGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGQgbG9jYWxlIGluLXBsYWNlIHRvIGF2b2lkIG1lbW9yeS1sZWFrc1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVMb2NhbGUgaXMgY2FsbGVkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGFiYnIgc28gaXQgd2lsbCBoYXZlIGEgbmFtZSAoZ2V0dGVycyByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIG90aGVyd2lzZSkuXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjb25maWcpO1xuICAgICAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBnZXRTZXRHbG9iYWxMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93KG0pIHtcbiAgICAgICAgdmFyIG92ZXJmbG93LFxuICAgICAgICAgICAgYSA9IG0uX2E7XG5cbiAgICAgICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPVxuICAgICAgICAgICAgICAgIGFbTU9OVEhdIDwgMCB8fCBhW01PTlRIXSA+IDExXG4gICAgICAgICAgICAgICAgICAgID8gTU9OVEhcbiAgICAgICAgICAgICAgICAgICAgOiBhW0RBVEVdIDwgMSB8fCBhW0RBVEVdID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pXG4gICAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gIT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID1cbiAgICAgICAgICAgIC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQsXG4gICAgICAgICAgICBpc29EYXRlc0xlbiA9IGlzb0RhdGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGlzb1RpbWVzTGVuID0gaXNvVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b2tlbkxlbjtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuICAgICAgICB0b2tlbkxlbiA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2UsXG4gICAgICAgICAgICBjb25maWdmTGVuID0gY29uZmlnLl9mLmxlbmd0aDtcblxuICAgICAgICBpZiAoY29uZmlnZkxlbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ2ZMZW47IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvcmRlckxlbiA9IG9yZGVyaW5nLmxlbmd0aDtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlckxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPVxuICAgICAgICAgICAgL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0eUxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0eUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgICA6IGRpZmYgPCAwXG4gICAgICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgICAgICAgICA6IGRpZmYgPCA3XG4gICAgICAgICAgICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihcbiAgICAgICAgWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXNOYW1lLFxuICAgICAgICAgICAgZXJhc0FiYnIsXG4gICAgICAgICAgICBlcmFzTmFycm93LFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZXJhc05hbWUgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpO1xuICAgICAgICAgICAgZXJhc0FiYnIgPSByZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpO1xuICAgICAgICAgICAgZXJhc05hcnJvdyA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KTtcblxuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc05hbWUpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYXJyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpICsgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mWWVhcihpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID1cbiAgICAgICAgICAgIE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTVcbiAgICAgICAgICAgICkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKGlucHV0IC0gZGF5T2ZZZWFyLCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdtJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpLFxuICAgICAgICBhc1NlY29uZHMgPSBtYWtlQXMoJ3MnKSxcbiAgICAgICAgYXNNaW51dGVzID0gbWFrZUFzKCdtJyksXG4gICAgICAgIGFzSG91cnMgPSBtYWtlQXMoJ2gnKSxcbiAgICAgICAgYXNEYXlzID0gbWFrZUFzKCdkJyksXG4gICAgICAgIGFzV2Vla3MgPSBtYWtlQXMoJ3cnKSxcbiAgICAgICAgYXNNb250aHMgPSBtYWtlQXMoJ00nKSxcbiAgICAgICAgYXNRdWFydGVycyA9IG1ha2VBcygnUScpLFxuICAgICAgICBhc1llYXJzID0gbWFrZUFzKCd5JyksXG4gICAgICAgIHZhbHVlT2YkMSA9IGFzTWlsbGlzZWNvbmRzO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjMwLjEnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN0cmluZywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3RyaW5nKDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaW5nO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBib29sZWFuIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBib29sZWFuLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCb29sZWFuKGZhbHNlKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQm9vbGVhbihudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYm9vbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCb29sZWFuO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE51bWJlcmAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiAqKk5vdGU6KiogVG8gZXhjbHVkZSBgSW5maW5pdHlgLCBgLUluZmluaXR5YCwgYW5kIGBOYU5gLCB3aGljaCBhcmVcbiAqIGNsYXNzaWZpZWQgYXMgbnVtYmVycywgdXNlIHRoZSBgXy5pc0Zpbml0ZWAgbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbnVtYmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNOdW1iZXIoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTnVtYmVyKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gbnVtYmVyVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc051bWJlcjtcbiIsICJ2YXIgaXNOdW1iZXIgPSByZXF1aXJlKCcuL2lzTnVtYmVyJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYE5hTmAuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gKiBbYE51bWJlci5pc05hTmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc05hTikgYW5kIGlzIG5vdCB0aGUgc2FtZSBhc1xuICogZ2xvYmFsIFtgaXNOYU5gXShodHRwczovL21kbi5pby9pc05hTikgd2hpY2ggcmV0dXJucyBgdHJ1ZWAgZm9yXG4gKiBgdW5kZWZpbmVkYCBhbmQgb3RoZXIgbm9uLW51bWJlciB2YWx1ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc05hTihOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOYU4obmV3IE51bWJlcihOYU4pKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc05hTih1bmRlZmluZWQpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOYU4odW5kZWZpbmVkKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gIC8vIEFuIGBOYU5gIHByaW1pdGl2ZSBpcyB0aGUgb25seSB2YWx1ZSB0aGF0IGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuXG4gIC8vIFBlcmZvcm0gdGhlIGB0b1N0cmluZ1RhZ2AgY2hlY2sgZmlyc3QgdG8gYXZvaWQgZXJyb3JzIHdpdGggc29tZVxuICAvLyBBY3RpdmVYIG9iamVjdHMgaW4gSUUuXG4gIHJldHVybiBpc051bWJlcih2YWx1ZSkgJiYgdmFsdWUgIT0gK3ZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTmFOO1xuIiwgIi8qISBAcHJlc2VydmVcbiAqIG51bWVyYWwuanNcbiAqIHZlcnNpb24gOiAyLjAuNlxuICogYXV0aG9yIDogQWRhbSBEcmFwZXJcbiAqIGxpY2Vuc2UgOiBNSVRcbiAqIGh0dHA6Ly9hZGFtd2RyYXBlci5naXRodWIuY29tL051bWVyYWwtanMvXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGdsb2JhbC5udW1lcmFsID0gZmFjdG9yeSgpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgVmFyaWFibGVzXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgdmFyIG51bWVyYWwsXG4gICAgICAgIF8sXG4gICAgICAgIFZFUlNJT04gPSAnMi4wLjYnLFxuICAgICAgICBmb3JtYXRzID0ge30sXG4gICAgICAgIGxvY2FsZXMgPSB7fSxcbiAgICAgICAgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICBjdXJyZW50TG9jYWxlOiAnZW4nLFxuICAgICAgICAgICAgemVyb0Zvcm1hdDogbnVsbCxcbiAgICAgICAgICAgIG51bGxGb3JtYXQ6IG51bGwsXG4gICAgICAgICAgICBkZWZhdWx0Rm9ybWF0OiAnMCwwJyxcbiAgICAgICAgICAgIHNjYWxlUGVyY2VudEJ5MTAwOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjdXJyZW50TG9jYWxlOiBkZWZhdWx0cy5jdXJyZW50TG9jYWxlLFxuICAgICAgICAgICAgemVyb0Zvcm1hdDogZGVmYXVsdHMuemVyb0Zvcm1hdCxcbiAgICAgICAgICAgIG51bGxGb3JtYXQ6IGRlZmF1bHRzLm51bGxGb3JtYXQsXG4gICAgICAgICAgICBkZWZhdWx0Rm9ybWF0OiBkZWZhdWx0cy5kZWZhdWx0Rm9ybWF0LFxuICAgICAgICAgICAgc2NhbGVQZXJjZW50QnkxMDA6IGRlZmF1bHRzLnNjYWxlUGVyY2VudEJ5MTAwXG4gICAgICAgIH07XG5cblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgQ29uc3RydWN0b3JzXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgLy8gTnVtZXJhbCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTnVtZXJhbChpbnB1dCwgbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cbiAgICAgICAgdGhpcy5fdmFsdWUgPSBudW1iZXI7XG4gICAgfVxuXG4gICAgbnVtZXJhbCA9IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHZhciB2YWx1ZSxcbiAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICB1bmZvcm1hdEZ1bmN0aW9uLFxuICAgICAgICAgICAgcmVnZXhwO1xuXG4gICAgICAgIGlmIChudW1lcmFsLmlzTnVtZXJhbChpbnB1dCkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gaW5wdXQudmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gMCB8fCB0eXBlb2YgaW5wdXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IG51bGwgfHwgXy5pc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy56ZXJvRm9ybWF0ICYmIGlucHV0ID09PSBvcHRpb25zLnplcm9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubnVsbEZvcm1hdCAmJiBpbnB1dCA9PT0gb3B0aW9ucy5udWxsRm9ybWF0IHx8ICFpbnB1dC5yZXBsYWNlKC9bXjAtOV0rL2csICcnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoa2luZCBpbiBmb3JtYXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2V4cCA9IHR5cGVvZiBmb3JtYXRzW2tpbmRdLnJlZ2V4cHMudW5mb3JtYXQgPT09ICdmdW5jdGlvbicgPyBmb3JtYXRzW2tpbmRdLnJlZ2V4cHMudW5mb3JtYXQoKSA6IGZvcm1hdHNba2luZF0ucmVnZXhwcy51bmZvcm1hdDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocmVnZXhwICYmIGlucHV0Lm1hdGNoKHJlZ2V4cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZm9ybWF0RnVuY3Rpb24gPSBmb3JtYXRzW2tpbmRdLnVuZm9ybWF0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVuZm9ybWF0RnVuY3Rpb24gPSB1bmZvcm1hdEZ1bmN0aW9uIHx8IG51bWVyYWwuXy5zdHJpbmdUb051bWJlcjtcblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdW5mb3JtYXRGdW5jdGlvbihpbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihpbnB1dCl8fCBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOdW1lcmFsKGlucHV0LCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIC8vIHZlcnNpb24gbnVtYmVyXG4gICAgbnVtZXJhbC52ZXJzaW9uID0gVkVSU0lPTjtcblxuICAgIC8vIGNvbXBhcmUgbnVtZXJhbCBvYmplY3RcbiAgICBudW1lcmFsLmlzTnVtZXJhbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgTnVtZXJhbDtcbiAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uc1xuICAgIG51bWVyYWwuXyA9IF8gPSB7XG4gICAgICAgIC8vIGZvcm1hdHMgbnVtYmVycyBzZXBhcmF0b3JzLCBkZWNpbWFscyBwbGFjZXMsIHNpZ25zLCBhYmJyZXZpYXRpb25zXG4gICAgICAgIG51bWJlclRvRm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbG9jYWxlc1tudW1lcmFsLm9wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgbmVnUCA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9wdERlYyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxlYWRpbmdDb3VudCA9IDAsXG4gICAgICAgICAgICAgICAgYWJiciA9ICcnLFxuICAgICAgICAgICAgICAgIHRyaWxsaW9uID0gMTAwMDAwMDAwMDAwMCxcbiAgICAgICAgICAgICAgICBiaWxsaW9uID0gMTAwMDAwMDAwMCxcbiAgICAgICAgICAgICAgICBtaWxsaW9uID0gMTAwMDAwMCxcbiAgICAgICAgICAgICAgICB0aG91c2FuZCA9IDEwMDAsXG4gICAgICAgICAgICAgICAgZGVjaW1hbCA9ICcnLFxuICAgICAgICAgICAgICAgIG5lZyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIGFiYnJGb3JjZSwgLy8gZm9yY2UgYWJicmV2aWF0aW9uXG4gICAgICAgICAgICAgICAgYWJzLFxuICAgICAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICAgICAgcG93ZXIsXG4gICAgICAgICAgICAgICAgaW50LFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbixcbiAgICAgICAgICAgICAgICBzaWduZWQsXG4gICAgICAgICAgICAgICAgdGhvdXNhbmRzLFxuICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIG5ldmVyIGZvcm1hdCBhIG51bGwgdmFsdWVcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgfHwgMDtcblxuICAgICAgICAgICAgYWJzID0gTWF0aC5hYnModmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBzZWUgaWYgd2Ugc2hvdWxkIHVzZSBwYXJlbnRoZXNlcyBmb3IgbmVnYXRpdmUgbnVtYmVyIG9yIGlmIHdlIHNob3VsZCBwcmVmaXggd2l0aCBhIHNpZ25cbiAgICAgICAgICAgIC8vIGlmIGJvdGggYXJlIHByZXNlbnQgd2UgZGVmYXVsdCB0byBwYXJlbnRoZXNlc1xuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcoJykpIHtcbiAgICAgICAgICAgICAgICBuZWdQID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvW1xcKHxcXCldL2csICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJysnKSB8fCBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnLScpKSB7XG4gICAgICAgICAgICAgICAgc2lnbmVkID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJysnKSA/IGZvcm1hdC5pbmRleE9mKCcrJykgOiB2YWx1ZSA8IDAgPyBmb3JtYXQuaW5kZXhPZignLScpIDogLTE7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1tcXCt8XFwtXS9nLCAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNlZSBpZiBhYmJyZXZpYXRpb24gaXMgd2FudGVkXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJ2EnKSkge1xuICAgICAgICAgICAgICAgIGFiYnJGb3JjZSA9IGZvcm1hdC5tYXRjaCgvYShrfG18Ynx0KT8vKTtcblxuICAgICAgICAgICAgICAgIGFiYnJGb3JjZSA9IGFiYnJGb3JjZSA/IGFiYnJGb3JjZVsxXSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNwYWNlIGJlZm9yZSBhYmJyZXZpYXRpb25cbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBhJykpIHtcbiAgICAgICAgICAgICAgICAgICAgYWJiciA9ICcgJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShuZXcgUmVnRXhwKGFiYnIgKyAnYVtrbWJ0XT8nKSwgJycpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFicyA+PSB0cmlsbGlvbiAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRyaWxsaW9uXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMudHJpbGxpb247XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyB0cmlsbGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFicyA8IHRyaWxsaW9uICYmIGFicyA+PSBiaWxsaW9uICYmICFhYmJyRm9yY2UgfHwgYWJickZvcmNlID09PSAnYicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYmlsbGlvblxuICAgICAgICAgICAgICAgICAgICBhYmJyICs9IGxvY2FsZS5hYmJyZXZpYXRpb25zLmJpbGxpb247XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyBiaWxsaW9uO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWJzIDwgYmlsbGlvbiAmJiBhYnMgPj0gbWlsbGlvbiAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ20nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG1pbGxpb25cbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5taWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gbWlsbGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFicyA8IG1pbGxpb24gJiYgYWJzID49IHRob3VzYW5kICYmICFhYmJyRm9yY2UgfHwgYWJickZvcmNlID09PSAnaycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhvdXNhbmRcbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy50aG91c2FuZDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIHRob3VzYW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9wdGlvbmFsIGRlY2ltYWxzXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJ1suXScpKSB7XG4gICAgICAgICAgICAgICAgb3B0RGVjID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgnWy5dJywgJy4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYnJlYWsgbnVtYmVyIGFuZCBmb3JtYXRcbiAgICAgICAgICAgIGludCA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVswXTtcbiAgICAgICAgICAgIHByZWNpc2lvbiA9IGZvcm1hdC5zcGxpdCgnLicpWzFdO1xuICAgICAgICAgICAgdGhvdXNhbmRzID0gZm9ybWF0LmluZGV4T2YoJywnKTtcbiAgICAgICAgICAgIGxlYWRpbmdDb3VudCA9IChmb3JtYXQuc3BsaXQoJy4nKVswXS5zcGxpdCgnLCcpWzBdLm1hdGNoKC8wL2cpIHx8IFtdKS5sZW5ndGg7XG5cbiAgICAgICAgICAgIGlmIChwcmVjaXNpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKHByZWNpc2lvbiwgJ1snKSkge1xuICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24ucmVwbGFjZSgnXScsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uLnNwbGl0KCdbJyk7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBudW1lcmFsLl8udG9GaXhlZCh2YWx1ZSwgKHByZWNpc2lvblswXS5sZW5ndGggKyBwcmVjaXNpb25bMV0ubGVuZ3RoKSwgcm91bmRpbmdGdW5jdGlvbiwgcHJlY2lzaW9uWzFdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9IG51bWVyYWwuXy50b0ZpeGVkKHZhbHVlLCBwcmVjaXNpb24ubGVuZ3RoLCByb3VuZGluZ0Z1bmN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpbnQgPSBkZWNpbWFsLnNwbGl0KCcuJylbMF07XG5cbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGRlY2ltYWwsICcuJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9IGxvY2FsZS5kZWxpbWl0ZXJzLmRlY2ltYWwgKyBkZWNpbWFsLnNwbGl0KCcuJylbMV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9ICcnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChvcHREZWMgJiYgTnVtYmVyKGRlY2ltYWwuc2xpY2UoMSkpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGludCA9IG51bWVyYWwuXy50b0ZpeGVkKHZhbHVlLCAwLCByb3VuZGluZ0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgYWJicmV2aWF0aW9uIGFnYWluIGFmdGVyIHJvdW5kaW5nXG4gICAgICAgICAgICBpZiAoYWJiciAmJiAhYWJickZvcmNlICYmIE51bWJlcihpbnQpID49IDEwMDAgJiYgYWJiciAhPT0gbG9jYWxlLmFiYnJldmlhdGlvbnMudHJpbGxpb24pIHtcbiAgICAgICAgICAgICAgICBpbnQgPSBTdHJpbmcoTnVtYmVyKGludCkgLyAxMDAwKTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoYWJicikge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIGxvY2FsZS5hYmJyZXZpYXRpb25zLnRob3VzYW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWJiciA9IGxvY2FsZS5hYmJyZXZpYXRpb25zLm1pbGxpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBsb2NhbGUuYWJicmV2aWF0aW9ucy5taWxsaW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWJiciA9IGxvY2FsZS5hYmJyZXZpYXRpb25zLmJpbGxpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBsb2NhbGUuYWJicmV2aWF0aW9ucy5iaWxsaW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWJiciA9IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRyaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIC8vIGZvcm1hdCBudW1iZXJcbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoaW50LCAnLScpKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gaW50LnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIG5lZyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbnQubGVuZ3RoIDwgbGVhZGluZ0NvdW50KSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGxlYWRpbmdDb3VudCAtIGludC5sZW5ndGg7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ID0gJzAnICsgaW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRob3VzYW5kcyA+IC0xKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gaW50LnRvU3RyaW5nKCkucmVwbGFjZSgvKFxcZCkoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnJDEnICsgbG9jYWxlLmRlbGltaXRlcnMudGhvdXNhbmRzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZvcm1hdC5pbmRleE9mKCcuJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpbnQgPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3V0cHV0ID0gaW50ICsgZGVjaW1hbCArIChhYmJyID8gYWJiciA6ICcnKTtcblxuICAgICAgICAgICAgaWYgKG5lZ1ApIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAobmVnUCAmJiBuZWcgPyAnKCcgOiAnJykgKyBvdXRwdXQgKyAobmVnUCAmJiBuZWcgPyAnKScgOiAnJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzaWduZWQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzaWduZWQgPT09IDAgPyAobmVnID8gJy0nIDogJysnKSArIG91dHB1dCA6IG91dHB1dCArIChuZWcgPyAnLScgOiAnKycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmVnKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICctJyArIG91dHB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHVuZm9ybWF0cyBudW1iZXJzIHNlcGFyYXRvcnMsIGRlY2ltYWxzIHBsYWNlcywgc2lnbnMsIGFiYnJldmlhdGlvbnNcbiAgICAgICAgc3RyaW5nVG9OdW1iZXI6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IGxvY2FsZXNbb3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBzdHJpbmdPcmlnaW5hbCA9IHN0cmluZyxcbiAgICAgICAgICAgICAgICBhYmJyZXZpYXRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICB0aG91c2FuZDogMyxcbiAgICAgICAgICAgICAgICAgICAgbWlsbGlvbjogNixcbiAgICAgICAgICAgICAgICAgICAgYmlsbGlvbjogOSxcbiAgICAgICAgICAgICAgICAgICAgdHJpbGxpb246IDEyXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhYmJyZXZpYXRpb24sXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICByZWdleHA7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnplcm9Gb3JtYXQgJiYgc3RyaW5nID09PSBvcHRpb25zLnplcm9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubnVsbEZvcm1hdCAmJiBzdHJpbmcgPT09IG9wdGlvbnMubnVsbEZvcm1hdCB8fCAhc3RyaW5nLnJlcGxhY2UoL1teMC05XSsvZywgJycpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZS5kZWxpbWl0ZXJzLmRlY2ltYWwgIT09ICcuJykge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFwuL2csICcnKS5yZXBsYWNlKGxvY2FsZS5kZWxpbWl0ZXJzLmRlY2ltYWwsICcuJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yIChhYmJyZXZpYXRpb24gaW4gYWJicmV2aWF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICByZWdleHAgPSBuZXcgUmVnRXhwKCdbXmEtekEtWl0nICsgbG9jYWxlLmFiYnJldmlhdGlvbnNbYWJicmV2aWF0aW9uXSArICcoPzpcXFxcKXwoXFxcXCcgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sICsgJyk/KD86XFxcXCkpPyk/JCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdPcmlnaW5hbC5tYXRjaChyZWdleHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAqPSBNYXRoLnBvdygxMCwgYWJicmV2aWF0aW9uc1thYmJyZXZpYXRpb25dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG5lZ2F0aXZlIG51bWJlclxuICAgICAgICAgICAgICAgIHZhbHVlICo9IChzdHJpbmcuc3BsaXQoJy0nKS5sZW5ndGggKyBNYXRoLm1pbihzdHJpbmcuc3BsaXQoJygnKS5sZW5ndGggLSAxLCBzdHJpbmcuc3BsaXQoJyknKS5sZW5ndGggLSAxKSkgJSAyID8gMSA6IC0xO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG5vbiBudW1iZXJzXG4gICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1teMC05XFwuXSsvZywgJycpO1xuXG4gICAgICAgICAgICAgICAgdmFsdWUgKj0gTnVtYmVyKHN0cmluZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNOYU46IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGVzOiBmdW5jdGlvbihzdHJpbmcsIHNlYXJjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5pbmRleE9mKHNlYXJjaCkgIT09IC0xO1xuICAgICAgICB9LFxuICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uKHN0cmluZywgc3ViU3RyaW5nLCBzdGFydCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5zbGljZSgwLCBzdGFydCkgKyBzdWJTdHJpbmcgKyBzdHJpbmcuc2xpY2Uoc3RhcnQpO1xuICAgICAgICB9LFxuICAgICAgICByZWR1Y2U6IGZ1bmN0aW9uKGFycmF5LCBjYWxsYmFjayAvKiwgaW5pdGlhbFZhbHVlKi8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkucHJvdG90eXBlLnJlZHVjZSBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciB0ID0gT2JqZWN0KGFycmF5KSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBrID0gMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGFyZ3VtZW50c1syXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGsgPCBsZW4gJiYgIShrIGluIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoayA+PSBsZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdFtrKytdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICAgICAgICAgIGlmIChrIGluIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgdFtrXSwgaywgdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29tcHV0ZXMgdGhlIG11bHRpcGxpZXIgbmVjZXNzYXJ5IHRvIG1ha2UgeCA+PSAxLFxuICAgICAgICAgKiBlZmZlY3RpdmVseSBlbGltaW5hdGluZyBtaXNjYWxjdWxhdGlvbnMgY2F1c2VkIGJ5XG4gICAgICAgICAqIGZpbml0ZSBwcmVjaXNpb24uXG4gICAgICAgICAqL1xuICAgICAgICBtdWx0aXBsaWVyOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0geC50b1N0cmluZygpLnNwbGl0KCcuJyk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPCAyID8gMSA6IE1hdGgucG93KDEwLCBwYXJ0c1sxXS5sZW5ndGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLCByZXR1cm5zIHRoZSBtYXhpbXVtXG4gICAgICAgICAqIG11bHRpcGxpZXIgdGhhdCBtdXN0IGJlIHVzZWQgdG8gbm9ybWFsaXplIGFuIG9wZXJhdGlvbiBpbnZvbHZpbmdcbiAgICAgICAgICogYWxsIG9mIHRoZW0uXG4gICAgICAgICAqL1xuICAgICAgICBjb3JyZWN0aW9uRmFjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgIHJldHVybiBhcmdzLnJlZHVjZShmdW5jdGlvbihhY2N1bSwgbmV4dCkge1xuICAgICAgICAgICAgICAgIHZhciBtbiA9IF8ubXVsdGlwbGllcihuZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW0gPiBtbiA/IGFjY3VtIDogbW47XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRvRml4ZWQoKSB0aGF0IHRyZWF0cyBmbG9hdHMgbW9yZSBsaWtlIGRlY2ltYWxzXG4gICAgICAgICAqXG4gICAgICAgICAqIEZpeGVzIGJpbmFyeSByb3VuZGluZyBpc3N1ZXMgKGVnLiAoMC42MTUpLnRvRml4ZWQoMikgPT09ICcwLjYxJykgdGhhdCBwcmVzZW50XG4gICAgICAgICAqIHByb2JsZW1zIGZvciBhY2NvdW50aW5nLSBhbmQgZmluYW5jZS1yZWxhdGVkIHNvZnR3YXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgdG9GaXhlZDogZnVuY3Rpb24odmFsdWUsIG1heERlY2ltYWxzLCByb3VuZGluZ0Z1bmN0aW9uLCBvcHRpb25hbHMpIHtcbiAgICAgICAgICAgIHZhciBzcGxpdFZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpLFxuICAgICAgICAgICAgICAgIG1pbkRlY2ltYWxzID0gbWF4RGVjaW1hbHMgLSAob3B0aW9uYWxzIHx8IDApLFxuICAgICAgICAgICAgICAgIGJvdW5kZWRQcmVjaXNpb24sXG4gICAgICAgICAgICAgICAgb3B0aW9uYWxzUmVnRXhwLFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgLy8gVXNlIHRoZSBzbWFsbGVzdCBwcmVjaXNpb24gdmFsdWUgcG9zc2libGUgdG8gYXZvaWQgZXJyb3JzIGZyb20gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb25cbiAgICAgICAgICAgIGlmIChzcGxpdFZhbHVlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICBib3VuZGVkUHJlY2lzaW9uID0gTWF0aC5taW4oTWF0aC5tYXgoc3BsaXRWYWx1ZVsxXS5sZW5ndGgsIG1pbkRlY2ltYWxzKSwgbWF4RGVjaW1hbHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYm91bmRlZFByZWNpc2lvbiA9IG1pbkRlY2ltYWxzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3dlciA9IE1hdGgucG93KDEwLCBib3VuZGVkUHJlY2lzaW9uKTtcblxuICAgICAgICAgICAgLy8gTXVsdGlwbHkgdXAgYnkgcHJlY2lzaW9uLCByb3VuZCBhY2N1cmF0ZWx5LCB0aGVuIGRpdmlkZSBhbmQgdXNlIG5hdGl2ZSB0b0ZpeGVkKCk6XG4gICAgICAgICAgICBvdXRwdXQgPSAocm91bmRpbmdGdW5jdGlvbih2YWx1ZSArICdlKycgKyBib3VuZGVkUHJlY2lzaW9uKSAvIHBvd2VyKS50b0ZpeGVkKGJvdW5kZWRQcmVjaXNpb24pO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9uYWxzID4gbWF4RGVjaW1hbHMgLSBib3VuZGVkUHJlY2lzaW9uKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uYWxzUmVnRXhwID0gbmV3IFJlZ0V4cCgnXFxcXC4/MHsxLCcgKyAob3B0aW9uYWxzIC0gKG1heERlY2ltYWxzIC0gYm91bmRlZFByZWNpc2lvbikpICsgJ30kJyk7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2Uob3B0aW9uYWxzUmVnRXhwLCAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYXZhbGlhYmxlIG9wdGlvbnNcbiAgICBudW1lcmFsLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgLy8gYXZhbGlhYmxlIGZvcm1hdHNcbiAgICBudW1lcmFsLmZvcm1hdHMgPSBmb3JtYXRzO1xuXG4gICAgLy8gYXZhbGlhYmxlIGZvcm1hdHNcbiAgICBudW1lcmFsLmxvY2FsZXMgPSBsb2NhbGVzO1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjdXJyZW50IGxvY2FsZS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWxcbiAgICAvLyBsb2NhbGUga2V5LlxuICAgIG51bWVyYWwubG9jYWxlID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY3VycmVudExvY2FsZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY3VycmVudExvY2FsZTtcbiAgICB9O1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGxvYWRlZCBsb2NhbGUgZGF0YS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudFxuICAgIC8vIGdsb2JhbCBsb2NhbGUgb2JqZWN0LlxuICAgIG51bWVyYWwubG9jYWxlRGF0YSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbb3B0aW9ucy5jdXJyZW50TG9jYWxlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmICghbG9jYWxlc1trZXldKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbG9jYWxlIDogJyArIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbG9jYWxlc1trZXldO1xuICAgIH07XG5cbiAgICBudW1lcmFsLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICBvcHRpb25zW3Byb3BlcnR5XSA9IGRlZmF1bHRzW3Byb3BlcnR5XTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBudW1lcmFsLnplcm9Gb3JtYXQgPSBmdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgb3B0aW9ucy56ZXJvRm9ybWF0ID0gdHlwZW9mKGZvcm1hdCkgPT09ICdzdHJpbmcnID8gZm9ybWF0IDogbnVsbDtcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5udWxsRm9ybWF0ID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICBvcHRpb25zLm51bGxGb3JtYXQgPSB0eXBlb2YoZm9ybWF0KSA9PT0gJ3N0cmluZycgPyBmb3JtYXQgOiBudWxsO1xuICAgIH07XG5cbiAgICBudW1lcmFsLmRlZmF1bHRGb3JtYXQgPSBmdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgb3B0aW9ucy5kZWZhdWx0Rm9ybWF0ID0gdHlwZW9mKGZvcm1hdCkgPT09ICdzdHJpbmcnID8gZm9ybWF0IDogJzAuMCc7XG4gICAgfTtcblxuICAgIG51bWVyYWwucmVnaXN0ZXIgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCBmb3JtYXQpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAodGhpc1t0eXBlICsgJ3MnXVtuYW1lXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihuYW1lICsgJyAnICsgdHlwZSArICcgYWxyZWFkeSByZWdpc3RlcmVkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpc1t0eXBlICsgJ3MnXVtuYW1lXSA9IGZvcm1hdDtcblxuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH07XG5cblxuICAgIG51bWVyYWwudmFsaWRhdGUgPSBmdW5jdGlvbih2YWwsIGN1bHR1cmUpIHtcbiAgICAgICAgdmFyIF9kZWNpbWFsU2VwLFxuICAgICAgICAgICAgX3Rob3VzYW5kU2VwLFxuICAgICAgICAgICAgX2N1cnJTeW1ib2wsXG4gICAgICAgICAgICBfdmFsQXJyYXksXG4gICAgICAgICAgICBfYWJick9iaixcbiAgICAgICAgICAgIF90aG91c2FuZFJlZ0V4LFxuICAgICAgICAgICAgbG9jYWxlRGF0YSxcbiAgICAgICAgICAgIHRlbXA7XG5cbiAgICAgICAgLy9jb2VyY2UgdmFsIHRvIHN0cmluZ1xuICAgICAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbCArPSAnJztcblxuICAgICAgICAgICAgaWYgKGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTnVtZXJhbC5qczogVmFsdWUgaXMgbm90IHN0cmluZy4gSXQgaGFzIGJlZW4gY28tZXJjZWQgdG86ICcsIHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL3RyaW0gd2hpdGVzcGFjZXMgZnJvbSBlaXRoZXIgc2lkZXNcbiAgICAgICAgdmFsID0gdmFsLnRyaW0oKTtcblxuICAgICAgICAvL2lmIHZhbCBpcyBqdXN0IGRpZ2l0cyByZXR1cm4gdHJ1ZVxuICAgICAgICBpZiAoISF2YWwubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdmFsIGlzIGVtcHR5IHJldHVybiBmYWxzZVxuICAgICAgICBpZiAodmFsID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9nZXQgdGhlIGRlY2ltYWwgYW5kIHRob3VzYW5kcyBzZXBhcmF0b3IgZnJvbSBudW1lcmFsLmxvY2FsZURhdGFcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vY2hlY2sgaWYgdGhlIGN1bHR1cmUgaXMgdW5kZXJzdG9vZCBieSBudW1lcmFsLiBpZiBub3QsIGRlZmF1bHQgaXQgdG8gY3VycmVudCBsb2NhbGVcbiAgICAgICAgICAgIGxvY2FsZURhdGEgPSBudW1lcmFsLmxvY2FsZURhdGEoY3VsdHVyZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvY2FsZURhdGEgPSBudW1lcmFsLmxvY2FsZURhdGEobnVtZXJhbC5sb2NhbGUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvL3NldHVwIHRoZSBkZWxpbWl0ZXJzIGFuZCBjdXJyZW5jeSBzeW1ib2wgYmFzZWQgb24gY3VsdHVyZS9sb2NhbGVcbiAgICAgICAgX2N1cnJTeW1ib2wgPSBsb2NhbGVEYXRhLmN1cnJlbmN5LnN5bWJvbDtcbiAgICAgICAgX2FiYnJPYmogPSBsb2NhbGVEYXRhLmFiYnJldmlhdGlvbnM7XG4gICAgICAgIF9kZWNpbWFsU2VwID0gbG9jYWxlRGF0YS5kZWxpbWl0ZXJzLmRlY2ltYWw7XG4gICAgICAgIGlmIChsb2NhbGVEYXRhLmRlbGltaXRlcnMudGhvdXNhbmRzID09PSAnLicpIHtcbiAgICAgICAgICAgIF90aG91c2FuZFNlcCA9ICdcXFxcLic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhvdXNhbmRTZXAgPSBsb2NhbGVEYXRhLmRlbGltaXRlcnMudGhvdXNhbmRzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWRhdGluZyBjdXJyZW5jeSBzeW1ib2xcbiAgICAgICAgdGVtcCA9IHZhbC5tYXRjaCgvXlteXFxkXSsvKTtcbiAgICAgICAgaWYgKHRlbXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zdWJzdHIoMSk7XG4gICAgICAgICAgICBpZiAodGVtcFswXSAhPT0gX2N1cnJTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL3ZhbGlkYXRpbmcgYWJicmV2aWF0aW9uIHN5bWJvbFxuICAgICAgICB0ZW1wID0gdmFsLm1hdGNoKC9bXlxcZF0rJC8pO1xuICAgICAgICBpZiAodGVtcCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsID0gdmFsLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIGlmICh0ZW1wWzBdICE9PSBfYWJick9iai50aG91c2FuZCAmJiB0ZW1wWzBdICE9PSBfYWJick9iai5taWxsaW9uICYmIHRlbXBbMF0gIT09IF9hYmJyT2JqLmJpbGxpb24gJiYgdGVtcFswXSAhPT0gX2FiYnJPYmoudHJpbGxpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfdGhvdXNhbmRSZWdFeCA9IG5ldyBSZWdFeHAoX3Rob3VzYW5kU2VwICsgJ3syfScpO1xuXG4gICAgICAgIGlmICghdmFsLm1hdGNoKC9bXlxcZC4sXS9nKSkge1xuICAgICAgICAgICAgX3ZhbEFycmF5ID0gdmFsLnNwbGl0KF9kZWNpbWFsU2VwKTtcbiAgICAgICAgICAgIGlmIChfdmFsQXJyYXkubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKF92YWxBcnJheS5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoICEhIF92YWxBcnJheVswXS5tYXRjaCgvXlxcZCsuKlxcZCQvKSAmJiAhX3ZhbEFycmF5WzBdLm1hdGNoKF90aG91c2FuZFJlZ0V4KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF92YWxBcnJheVswXS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoICEhIF92YWxBcnJheVswXS5tYXRjaCgvXlxcZCskLykgJiYgIV92YWxBcnJheVswXS5tYXRjaChfdGhvdXNhbmRSZWdFeCkgJiYgISEgX3ZhbEFycmF5WzFdLm1hdGNoKC9eXFxkKyQvKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAhISBfdmFsQXJyYXlbMF0ubWF0Y2goL15cXGQrLipcXGQkLykgJiYgIV92YWxBcnJheVswXS5tYXRjaChfdGhvdXNhbmRSZWdFeCkgJiYgISEgX3ZhbEFycmF5WzFdLm1hdGNoKC9eXFxkKyQvKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICBOdW1lcmFsIFByb3RvdHlwZVxuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIG51bWVyYWwuZm4gPSBOdW1lcmFsLnByb3RvdHlwZSA9IHtcbiAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWVyYWwodGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24oaW5wdXRTdHJpbmcsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX3ZhbHVlLFxuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGlucHV0U3RyaW5nIHx8IG9wdGlvbnMuZGVmYXVsdEZvcm1hdCxcbiAgICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBmb3JtYXRGdW5jdGlvbjtcblxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgYSByb3VuZGluZ0Z1bmN0aW9uXG4gICAgICAgICAgICByb3VuZGluZ0Z1bmN0aW9uID0gcm91bmRpbmdGdW5jdGlvbiB8fCBNYXRoLnJvdW5kO1xuXG4gICAgICAgICAgICAvLyBmb3JtYXQgYmFzZWQgb24gdmFsdWVcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiBvcHRpb25zLnplcm9Gb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvcHRpb25zLnplcm9Gb3JtYXQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsICYmIG9wdGlvbnMubnVsbEZvcm1hdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG9wdGlvbnMubnVsbEZvcm1hdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChraW5kIGluIGZvcm1hdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdC5tYXRjaChmb3JtYXRzW2tpbmRdLnJlZ2V4cHMuZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb24gPSBmb3JtYXRzW2tpbmRdLmZvcm1hdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3JtYXRGdW5jdGlvbiA9IGZvcm1hdEZ1bmN0aW9uIHx8IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdDtcblxuICAgICAgICAgICAgICAgIG91dHB1dCA9IGZvcm1hdEZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgYWRkOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBfLmNvcnJlY3Rpb25GYWN0b3IuY2FsbChudWxsLCB0aGlzLl92YWx1ZSwgdmFsdWUpO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW0gKyBNYXRoLnJvdW5kKGNvcnJGYWN0b3IgKiBjdXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdGhpcy5fdmFsdWUsIHZhbHVlXSwgY2JhY2ssIDApIC8gY29yckZhY3RvcjtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIHN1YnRyYWN0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBfLmNvcnJlY3Rpb25GYWN0b3IuY2FsbChudWxsLCB0aGlzLl92YWx1ZSwgdmFsdWUpO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW0gLSBNYXRoLnJvdW5kKGNvcnJGYWN0b3IgKiBjdXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdmFsdWVdLCBjYmFjaywgTWF0aC5yb3VuZCh0aGlzLl92YWx1ZSAqIGNvcnJGYWN0b3IpKSAvIGNvcnJGYWN0b3I7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBtdWx0aXBseTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yKGFjY3VtLCBjdXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChhY2N1bSAqIGNvcnJGYWN0b3IpICogTWF0aC5yb3VuZChjdXJyICogY29yckZhY3RvcikgLyBNYXRoLnJvdW5kKGNvcnJGYWN0b3IgKiBjb3JyRmFjdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdGhpcy5fdmFsdWUsIHZhbHVlXSwgY2JhY2ssIDEpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgZGl2aWRlOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBfLmNvcnJlY3Rpb25GYWN0b3IoYWNjdW0sIGN1cnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGFjY3VtICogY29yckZhY3RvcikgLyBNYXRoLnJvdW5kKGN1cnIgKiBjb3JyRmFjdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdGhpcy5fdmFsdWUsIHZhbHVlXSwgY2JhY2spO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgZGlmZmVyZW5jZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyhudW1lcmFsKHRoaXMuX3ZhbHVlKS5zdWJ0cmFjdCh2YWx1ZSkudmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICBEZWZhdWx0IExvY2FsZSAmJiBGb3JtYXRcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBudW1lcmFsLnJlZ2lzdGVyKCdsb2NhbGUnLCAnZW4nLCB7XG4gICAgICAgIGRlbGltaXRlcnM6IHtcbiAgICAgICAgICAgIHRob3VzYW5kczogJywnLFxuICAgICAgICAgICAgZGVjaW1hbDogJy4nXG4gICAgICAgIH0sXG4gICAgICAgIGFiYnJldmlhdGlvbnM6IHtcbiAgICAgICAgICAgIHRob3VzYW5kOiAnaycsXG4gICAgICAgICAgICBtaWxsaW9uOiAnbScsXG4gICAgICAgICAgICBiaWxsaW9uOiAnYicsXG4gICAgICAgICAgICB0cmlsbGlvbjogJ3QnXG4gICAgICAgIH0sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMDtcbiAgICAgICAgICAgIHJldHVybiAofn4obnVtYmVyICUgMTAwIC8gMTApID09PSAxKSA/ICd0aCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAxKSA/ICdzdCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAyKSA/ICduZCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAzKSA/ICdyZCcgOiAndGgnO1xuICAgICAgICB9LFxuICAgICAgICBjdXJyZW5jeToge1xuICAgICAgICAgICAgc3ltYm9sOiAnJCdcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ2JwcycsIHtcbiAgICAgICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IC8oQlBTKS8sXG4gICAgICAgICAgICAgICAgdW5mb3JtYXQ6IC8oQlBTKS9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB2YXIgc3BhY2UgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIEJQUycpID8gJyAnIDogJycsXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAxMDAwMDtcblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgQlBTXG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9CUFMvLCAnJyk7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKG91dHB1dCwgJyknKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXQoJycpO1xuXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5zcGxpY2UoLTEsIDAsIHNwYWNlICsgJ0JQUycpO1xuXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQgKyBzcGFjZSArICdCUFMnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgICAgIHJldHVybiArKG51bWVyYWwuXy5zdHJpbmdUb051bWJlcihzdHJpbmcpICogMC4wMDAxKS50b0ZpeGVkKDE1KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGRlY2ltYWwgPSB7XG4gICAgICAgICAgICBiYXNlOiAxMDAwLFxuICAgICAgICAgICAgc3VmZml4ZXM6IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddXG4gICAgICAgIH0sXG4gICAgICAgIGJpbmFyeSA9IHtcbiAgICAgICAgICAgIGJhc2U6IDEwMjQsXG4gICAgICAgICAgICBzdWZmaXhlczogWydCJywgJ0tpQicsICdNaUInLCAnR2lCJywgJ1RpQicsICdQaUInLCAnRWlCJywgJ1ppQicsICdZaUInXVxuICAgICAgICB9O1xuXG4gICAgdmFyIGFsbFN1ZmZpeGVzID0gIGRlY2ltYWwuc3VmZml4ZXMuY29uY2F0KGJpbmFyeS5zdWZmaXhlcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBkZWNpbWFsLnN1ZmZpeGVzLmluZGV4T2YoaXRlbSkgPCAwO1xuICAgICAgICB9KSk7XG4gICAgICAgIHZhciB1bmZvcm1hdFJlZ2V4ID0gYWxsU3VmZml4ZXMuam9pbignfCcpO1xuICAgICAgICAvLyBBbGxvdyBzdXBwb3J0IGZvciBCUFMgKGh0dHA6Ly93d3cuaW52ZXN0b3BlZGlhLmNvbS90ZXJtcy9iL2Jhc2lzcG9pbnQuYXNwKVxuICAgICAgICB1bmZvcm1hdFJlZ2V4ID0gJygnICsgdW5mb3JtYXRSZWdleC5yZXBsYWNlKCdCJywgJ0IoPyFQUyknKSArICcpJztcblxuICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdieXRlcycsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKFswXFxzXWk/YikvLFxuICAgICAgICAgICAgdW5mb3JtYXQ6IG5ldyBSZWdFeHAodW5mb3JtYXRSZWdleClcbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0LFxuICAgICAgICAgICAgICAgIGJ5dGVzID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJ2liJykgPyBiaW5hcnkgOiBkZWNpbWFsLFxuICAgICAgICAgICAgICAgIHN1ZmZpeCA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgYicpIHx8IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgaWInKSA/ICcgJyA6ICcnLFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgICAgICBtYXg7XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmVcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/aT9iLywgJycpO1xuXG4gICAgICAgICAgICBmb3IgKHBvd2VyID0gMDsgcG93ZXIgPD0gYnl0ZXMuc3VmZml4ZXMubGVuZ3RoOyBwb3dlcisrKSB7XG4gICAgICAgICAgICAgICAgbWluID0gTWF0aC5wb3coYnl0ZXMuYmFzZSwgcG93ZXIpO1xuICAgICAgICAgICAgICAgIG1heCA9IE1hdGgucG93KGJ5dGVzLmJhc2UsIHBvd2VyICsgMSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IDAgfHwgdmFsdWUgPj0gbWluICYmIHZhbHVlIDwgbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1ZmZpeCArPSBieXRlcy5zdWZmaXhlc1twb3dlcl07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyBtaW47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArIHN1ZmZpeDtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gbnVtZXJhbC5fLnN0cmluZ1RvTnVtYmVyKHN0cmluZyksXG4gICAgICAgICAgICAgICAgcG93ZXIsXG4gICAgICAgICAgICAgICAgYnl0ZXNNdWx0aXBsaWVyO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHBvd2VyID0gZGVjaW1hbC5zdWZmaXhlcy5sZW5ndGggLSAxOyBwb3dlciA+PSAwOyBwb3dlci0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCBkZWNpbWFsLnN1ZmZpeGVzW3Bvd2VyXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzTXVsdGlwbGllciA9IE1hdGgucG93KGRlY2ltYWwuYmFzZSwgcG93ZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCBiaW5hcnkuc3VmZml4ZXNbcG93ZXJdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNNdWx0aXBsaWVyID0gTWF0aC5wb3coYmluYXJ5LmJhc2UsIHBvd2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSAqPSAoYnl0ZXNNdWx0aXBsaWVyIHx8IDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnY3VycmVuY3knLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhcXCQpL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBudW1lcmFsLmxvY2FsZXNbbnVtZXJhbC5vcHRpb25zLmN1cnJlbnRMb2NhbGVdLFxuICAgICAgICAgICAgICAgIHN5bWJvbHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZTogZm9ybWF0Lm1hdGNoKC9eKFtcXCt8XFwtfFxcKHxcXHN8XFwkXSopLylbMF0sXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyOiBmb3JtYXQubWF0Y2goLyhbXFwrfFxcLXxcXCl8XFxzfFxcJF0qKSQvKVswXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHN5bWJvbCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICAvLyBzdHJpcCBmb3JtYXQgb2Ygc3BhY2VzIGFuZCAkXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP1xcJFxccz8vLCAnJyk7XG5cbiAgICAgICAgICAgIC8vIGZvcm1hdCB0aGUgbnVtYmVyXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgYmVmb3JlIGFuZCBhZnRlciBiYXNlZCBvbiB2YWx1ZVxuICAgICAgICAgICAgaWYgKHZhbHVlID49IDApIHtcbiAgICAgICAgICAgICAgICBzeW1ib2xzLmJlZm9yZSA9IHN5bWJvbHMuYmVmb3JlLnJlcGxhY2UoL1tcXC1cXChdLywgJycpO1xuICAgICAgICAgICAgICAgIHN5bWJvbHMuYWZ0ZXIgPSBzeW1ib2xzLmFmdGVyLnJlcGxhY2UoL1tcXC1cXCldLywgJycpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDAgJiYgKCFudW1lcmFsLl8uaW5jbHVkZXMoc3ltYm9scy5iZWZvcmUsICctJykgJiYgIW51bWVyYWwuXy5pbmNsdWRlcyhzeW1ib2xzLmJlZm9yZSwgJygnKSkpIHtcbiAgICAgICAgICAgICAgICBzeW1ib2xzLmJlZm9yZSA9ICctJyArIHN5bWJvbHMuYmVmb3JlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggZWFjaCBiZWZvcmUgc3ltYm9sXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3ltYm9scy5iZWZvcmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBzeW1ib2xzLmJlZm9yZVtpXTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoc3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLmluc2VydChvdXRwdXQsIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLmluc2VydChvdXRwdXQsICcgJywgaSArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCBlYWNoIGFmdGVyIHN5bWJvbFxuICAgICAgICAgICAgZm9yIChpID0gc3ltYm9scy5hZnRlci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IHN5bWJvbHMuYWZ0ZXJbaV07XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IGkgPT09IHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gMSA/IG91dHB1dCArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wgOiBudW1lcmFsLl8uaW5zZXJ0KG91dHB1dCwgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbCwgLShzeW1ib2xzLmFmdGVyLmxlbmd0aCAtICgxICsgaSkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IGkgPT09IHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gMSA/IG91dHB1dCArICcgJyA6IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCAnICcsIC0oc3ltYm9scy5hZnRlci5sZW5ndGggLSAoMSArIGkpICsgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbC5sZW5ndGggLSAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdleHBvbmVudGlhbCcsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKGVcXCt8ZS0pLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiAvKGVcXCt8ZS0pL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQsXG4gICAgICAgICAgICAgICAgZXhwb25lbnRpYWwgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmICFudW1lcmFsLl8uaXNOYU4odmFsdWUpID8gdmFsdWUudG9FeHBvbmVudGlhbCgpIDogJzBlKzAnLFxuICAgICAgICAgICAgICAgIHBhcnRzID0gZXhwb25lbnRpYWwuc3BsaXQoJ2UnKTtcblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL2VbXFwrfFxcLV17MX0wLywgJycpO1xuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQoTnVtYmVyKHBhcnRzWzBdKSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArICdlJyArIHBhcnRzWzFdO1xuICAgICAgICB9LFxuICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgcGFydHMgPSBudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCAnZSsnKSA/IHN0cmluZy5zcGxpdCgnZSsnKSA6IHN0cmluZy5zcGxpdCgnZS0nKSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihwYXJ0c1swXSksXG4gICAgICAgICAgICAgICAgcG93ZXIgPSBOdW1iZXIocGFydHNbMV0pO1xuXG4gICAgICAgICAgICBwb3dlciA9IG51bWVyYWwuXy5pbmNsdWRlcyhzdHJpbmcsICdlLScpID8gcG93ZXIgKj0gLTEgOiBwb3dlcjtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBudW1lcmFsLl8uY29ycmVjdGlvbkZhY3RvcihhY2N1bSwgY3VyciksXG4gICAgICAgICAgICAgICAgICAgIG51bSA9IChhY2N1bSAqIGNvcnJGYWN0b3IpICogKGN1cnIgKiBjb3JyRmFjdG9yKSAvIChjb3JyRmFjdG9yICogY29yckZhY3Rvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bWVyYWwuXy5yZWR1Y2UoW3ZhbHVlLCBNYXRoLnBvdygxMCwgcG93ZXIpXSwgY2JhY2ssIDEpO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ29yZGluYWwnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhvKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbnVtZXJhbC5sb2NhbGVzW251bWVyYWwub3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgb3JkaW5hbCA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgbycpID8gJyAnIDogJyc7XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmVcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/by8sICcnKTtcblxuICAgICAgICAgICAgb3JkaW5hbCArPSBsb2NhbGUub3JkaW5hbCh2YWx1ZSk7XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArIG9yZGluYWw7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAncGVyY2VudGFnZScsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKCUpLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiAvKCUpL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBzcGFjZSA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgJScpID8gJyAnIDogJycsXG4gICAgICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5vcHRpb25zLnNjYWxlUGVyY2VudEJ5MTAwKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDEwMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNwYWNlIGJlZm9yZSAlXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP1xcJS8sICcnKTtcblxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKG91dHB1dCwgJyknKSkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5zcGxpdCgnJyk7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQuc3BsaWNlKC0xLCAwLCBzcGFjZSArICclJyk7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuam9pbignJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dCArIHNwYWNlICsgJyUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgbnVtYmVyID0gbnVtZXJhbC5fLnN0cmluZ1RvTnVtYmVyKHN0cmluZyk7XG4gICAgICAgICAgICBpZiAobnVtZXJhbC5vcHRpb25zLnNjYWxlUGVyY2VudEJ5MTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciAqIDAuMDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ3RpbWUnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyg6KS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogLyg6KS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgaG91cnMgPSBNYXRoLmZsb29yKHZhbHVlIC8gNjAgLyA2MCksXG4gICAgICAgICAgICAgICAgbWludXRlcyA9IE1hdGguZmxvb3IoKHZhbHVlIC0gKGhvdXJzICogNjAgKiA2MCkpIC8gNjApLFxuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBNYXRoLnJvdW5kKHZhbHVlIC0gKGhvdXJzICogNjAgKiA2MCkgLSAobWludXRlcyAqIDYwKSk7XG5cbiAgICAgICAgICAgIHJldHVybiBob3VycyArICc6JyArIChtaW51dGVzIDwgMTAgPyAnMCcgKyBtaW51dGVzIDogbWludXRlcykgKyAnOicgKyAoc2Vjb25kcyA8IDEwID8gJzAnICsgc2Vjb25kcyA6IHNlY29uZHMpO1xuICAgICAgICB9LFxuICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgdGltZUFycmF5ID0gc3RyaW5nLnNwbGl0KCc6JyksXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IDA7XG5cbiAgICAgICAgICAgIC8vIHR1cm4gaG91cnMgYW5kIG1pbnV0ZXMgaW50byBzZWNvbmRzIGFuZCBhZGQgdGhlbSBhbGwgdXBcbiAgICAgICAgICAgIGlmICh0aW1lQXJyYXkubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgLy8gaG91cnNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIChOdW1iZXIodGltZUFycmF5WzBdKSAqIDYwICogNjApO1xuICAgICAgICAgICAgICAgIC8vIG1pbnV0ZXNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIChOdW1iZXIodGltZUFycmF5WzFdKSAqIDYwKTtcbiAgICAgICAgICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyBOdW1iZXIodGltZUFycmF5WzJdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGltZUFycmF5Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIC8vIG1pbnV0ZXNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIChOdW1iZXIodGltZUFycmF5WzBdKSAqIDYwKTtcbiAgICAgICAgICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyBOdW1iZXIodGltZUFycmF5WzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoc2Vjb25kcyk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cbnJldHVybiBudW1lcmFsO1xufSkpO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsICJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCAidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemU7XG4iLCAidmFyIG1lbW9pemUgPSByZXF1aXJlKCcuL21lbW9pemUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xudmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemVDYXBwZWQ7XG4iLCAidmFyIG1lbW9pemVDYXBwZWQgPSByZXF1aXJlKCcuL19tZW1vaXplQ2FwcGVkJyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZVByb3BOYW1lID0gL1teLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCQpKS9nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG52YXIgc3RyaW5nVG9QYXRoID0gbWVtb2l6ZUNhcHBlZChmdW5jdGlvbihzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ2IC8qIC4gKi8pIHtcbiAgICByZXN1bHQucHVzaCgnJyk7XG4gIH1cbiAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdUb1BhdGg7XG4iLCAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVG9TdHJpbmc7XG4iLCAidmFyIGJhc2VUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VUb1N0cmluZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9TdHJpbmc7XG4iLCAidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9QYXRoJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFBhdGg7XG4iLCAidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcbiIsICJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICB9XG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0O1xuIiwgInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpO1xuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gKiBgdW5kZWZpbmVkYCwgdGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGluIGl0cyBwbGFjZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAqXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0O1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUVhY2g7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsICJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsICJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduVmFsdWU7XG4iLCAidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduO1xuIiwgIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcbiIsICJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCAidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwgInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduSW47XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVCdWZmZXI7XG4iLCAiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwgInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyk7XG5cbi8qKlxuICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3ltYm9scztcbiIsICJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwgInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHNJbiA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgd2hpbGUgKG9iamVjdCkge1xuICAgIGFycmF5UHVzaChyZXN1bHQsIGdldFN5bWJvbHMob2JqZWN0KSk7XG4gICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlKG9iamVjdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9sc0luO1xuIiwgInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpO1xuXG4vKipcbiAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9sc0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHNJbjtcbiIsICJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzSW4sIGdldFN5bWJvbHNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5c0luO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAvLyBBZGQgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAnc3RyaW5nJyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCAnaW5kZXgnKSkge1xuICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4O1xuICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQXJyYXk7XG4iLCAidmFyIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUFycmF5QnVmZmVyO1xuIiwgInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lRGF0YVZpZXc7XG4iLCAiLyoqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGAgZmxhZ3MgZnJvbSB0aGVpciBjb2VyY2VkIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVGbGFncyA9IC9cXHcqJC87XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGByZWdleHBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcmVnZXhwIFRoZSByZWdleHAgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgcmVnZXhwLlxuICovXG5mdW5jdGlvbiBjbG9uZVJlZ0V4cChyZWdleHApIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyByZWdleHAuY29uc3RydWN0b3IocmVnZXhwLnNvdXJjZSwgcmVGbGFncy5leGVjKHJlZ2V4cCkpO1xuICByZXN1bHQubGFzdEluZGV4ID0gcmVnZXhwLmxhc3RJbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVJlZ0V4cDtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgYHN5bWJvbGAgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc3ltYm9sIFRoZSBzeW1ib2wgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHN5bWJvbCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNsb25lU3ltYm9sKHN5bWJvbCkge1xuICByZXR1cm4gc3ltYm9sVmFsdWVPZiA/IE9iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSkgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVN5bWJvbDtcbiIsICJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xuICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVR5cGVkQXJyYXk7XG4iLCAidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyksXG4gICAgY2xvbmVEYXRhVmlldyA9IHJlcXVpcmUoJy4vX2Nsb25lRGF0YVZpZXcnKSxcbiAgICBjbG9uZVJlZ0V4cCA9IHJlcXVpcmUoJy4vX2Nsb25lUmVnRXhwJyksXG4gICAgY2xvbmVTeW1ib2wgPSByZXF1aXJlKCcuL19jbG9uZVN5bWJvbCcpLFxuICAgIGNsb25lVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Nsb25lVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUgYmFzZWQgb24gaXRzIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjbG9uaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTWFwYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBgU2V0YCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LCB0YWcsIGlzRGVlcCkge1xuICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XG5cbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgcmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBmbG9hdDMyVGFnOiBjYXNlIGZsb2F0NjRUYWc6XG4gICAgY2FzZSBpbnQ4VGFnOiBjYXNlIGludDE2VGFnOiBjYXNlIGludDMyVGFnOlxuICAgIGNhc2UgdWludDhUYWc6IGNhc2UgdWludDhDbGFtcGVkVGFnOiBjYXNlIHVpbnQxNlRhZzogY2FzZSB1aW50MzJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVUeXBlZEFycmF5KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgICAgcmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgcmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVCeVRhZztcbiIsICJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY3JlYXRlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFzc2lnbmluZ1xuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbnZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxuICByZXR1cm4gZnVuY3Rpb24ocHJvdG8pIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTtcbiAgICB9XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0O1xuICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNyZWF0ZTtcbiIsICJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCAidmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWFwKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gbWFwVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hcDtcbiIsICJ2YXIgYmFzZUlzTWFwID0gcmVxdWlyZSgnLi9fYmFzZUlzTWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc01hcCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzTWFwO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTWFwYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc01hcChuZXcgTWFwKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTWFwKG5ldyBXZWFrTWFwKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc01hcCA9IG5vZGVJc01hcCA/IGJhc2VVbmFyeShub2RlSXNNYXApIDogYmFzZUlzTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFwO1xuIiwgInZhciBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHNldFRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNTZXQ7XG4iLCAidmFyIGJhc2VJc1NldCA9IHJlcXVpcmUoJy4vX2Jhc2VJc1NldCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTZXQobmV3IFNldCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1NldDtcbiIsICJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbicpLFxuICAgIGJhc2VBc3NpZ25JbiA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25JbicpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBjb3B5U3ltYm9scyA9IHJlcXVpcmUoJy4vX2NvcHlTeW1ib2xzJyksXG4gICAgY29weVN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2NvcHlTeW1ib2xzSW4nKSxcbiAgICBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpLFxuICAgIGdldEFsbEtleXNJbiA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXNJbicpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGluaXRDbG9uZUFycmF5ID0gcmVxdWlyZSgnLi9faW5pdENsb25lQXJyYXknKSxcbiAgICBpbml0Q2xvbmVCeVRhZyA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZUJ5VGFnJyksXG4gICAgaW5pdENsb25lT2JqZWN0ID0gcmVxdWlyZSgnLi9faW5pdENsb25lT2JqZWN0JyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzTWFwID0gcmVxdWlyZSgnLi9pc01hcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzU2V0ID0gcmVxdWlyZSgnLi9pc1NldCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovXG52YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxuY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbmNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAqIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gRGVlcCBjbG9uZVxuICogIDIgLSBGbGF0dGVuIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gKiAgNCAtIENsb25lIHN5bWJvbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gVGhlIGtleSBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgIGlzRnVsbCA9IGJpdG1hc2sgJiBDTE9ORV9TWU1CT0xTX0ZMQUc7XG5cbiAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgaWYgKGlzQXJyKSB7XG4gICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpO1xuICAgIGlmICghaXNEZWVwKSB7XG4gICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcblxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgIDogY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGlzRGVlcCk7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgaWYgKHN0YWNrZWQpIHtcbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgIHJlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdWJWYWx1ZSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNNYXAodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHQuc2V0KGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGtleXNGdW5jID0gaXNGdWxsXG4gICAgPyAoaXNGbGF0ID8gZ2V0QWxsS2V5c0luIDogZ2V0QWxsS2V5cylcbiAgICA6IChpc0ZsYXQgPyBrZXlzSW4gOiBrZXlzKTtcblxuICB2YXIgcHJvcHMgPSBpc0FyciA/IHVuZGVmaW5lZCA6IGtleXNGdW5jKHZhbHVlKTtcbiAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBrZXkgPSBzdWJWYWx1ZTtcbiAgICAgIHN1YlZhbHVlID0gdmFsdWVba2V5XTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ2xvbmU7XG4iLCAiLyoqXG4gKiBHZXRzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGFzdDtcbiIsICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNsaWNlO1xuIiwgInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpLFxuICAgIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgbGFzdCA9IHJlcXVpcmUoJy4vbGFzdCcpLFxuICAgIHBhcmVudCA9IHJlcXVpcmUoJy4vX3BhcmVudCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bnNldGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCB0byB1bnNldC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgaXMgZGVsZXRlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICBvYmplY3QgPSBwYXJlbnQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsIHx8IGRlbGV0ZSBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbnNldDtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsICJ2YXIgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vaXNQbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8ub21pdGAgdG8gY3VzdG9taXplIGl0cyBgXy5jbG9uZURlZXBgIHVzZSB0byBvbmx5IGNsb25lIHBsYWluXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVuY2xvbmVkIHZhbHVlIG9yIGB1bmRlZmluZWRgIHRvIGRlZmVyIGNsb25pbmcgdG8gYF8uY2xvbmVEZWVwYC5cbiAqL1xuZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKSB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHVuZGVmaW5lZCA6IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGN1c3RvbU9taXRDbG9uZTtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcHJlYWRhYmxlU3ltYm9sID0gU3ltYm9sID8gU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmbGF0dGVuYWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHxcbiAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZsYXR0ZW5hYmxlO1xuIiwgInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0ZsYXR0ZW5hYmxlID0gcmVxdWlyZSgnLi9faXNGbGF0dGVuYWJsZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZsYXR0ZW5gIHdpdGggc3VwcG9ydCBmb3IgcmVzdHJpY3RpbmcgZmxhdHRlbmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcGFyYW0ge251bWJlcn0gZGVwdGggVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJlZGljYXRlPWlzRmxhdHRlbmFibGVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1N0cmljdF0gUmVzdHJpY3QgdG8gdmFsdWVzIHRoYXQgcGFzcyBgcHJlZGljYXRlYCBjaGVja3MuXG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0PVtdXSBUaGUgaW5pdGlhbCByZXN1bHQgdmFsdWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LCBkZXB0aCwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHByZWRpY2F0ZSB8fCAocHJlZGljYXRlID0gaXNGbGF0dGVuYWJsZSk7XG4gIHJlc3VsdCB8fCAocmVzdWx0ID0gW10pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChkZXB0aCA+IDAgJiYgcHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgaWYgKGRlcHRoID4gMSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBmbGF0dGVuIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBiYXNlRmxhdHRlbih2YWx1ZSwgZGVwdGggLSAxLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXlQdXNoKHJlc3VsdCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzU3RyaWN0KSB7XG4gICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmxhdHRlbjtcbiIsICJ2YXIgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpO1xuXG4vKipcbiAqIEZsYXR0ZW5zIGBhcnJheWAgYSBzaW5nbGUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgMSkgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuO1xuIiwgIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcbiIsICJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwgIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCAidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwgIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsICJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwgInZhciBmbGF0dGVuID0gcmVxdWlyZSgnLi9mbGF0dGVuJyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCBmbGF0dGVucyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBmbGF0UmVzdChmdW5jKSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCB1bmRlZmluZWQsIGZsYXR0ZW4pLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXRSZXN0O1xuIiwgInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZUNsb25lID0gcmVxdWlyZSgnLi9fYmFzZUNsb25lJyksXG4gICAgYmFzZVVuc2V0ID0gcmVxdWlyZSgnLi9fYmFzZVVuc2V0JyksXG4gICAgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgY3VzdG9tT21pdENsb25lID0gcmVxdWlyZSgnLi9fY3VzdG9tT21pdENsb25lJyksXG4gICAgZmxhdFJlc3QgPSByZXF1aXJlKCcuL19mbGF0UmVzdCcpLFxuICAgIGdldEFsbEtleXNJbiA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXNJbicpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5waWNrYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlXG4gKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IHBhdGhzIG9mIGBvYmplY3RgIHRoYXQgYXJlIG5vdCBvbWl0dGVkLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBjb25zaWRlcmFibHkgc2xvd2VyIHRoYW4gYF8ucGlja2AuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIG9taXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLm9taXQob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAqIC8vID0+IHsgJ2InOiAnMicgfVxuICovXG52YXIgb21pdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHZhciBpc0RlZXAgPSBmYWxzZTtcbiAgcGF0aHMgPSBhcnJheU1hcChwYXRocywgZnVuY3Rpb24ocGF0aCkge1xuICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgIGlzRGVlcCB8fCAoaXNEZWVwID0gcGF0aC5sZW5ndGggPiAxKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSk7XG4gIGNvcHlPYmplY3Qob2JqZWN0LCBnZXRBbGxLZXlzSW4ob2JqZWN0KSwgcmVzdWx0KTtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJlc3VsdCA9IGJhc2VDbG9uZShyZXN1bHQsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX0ZMQVRfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9tT21pdENsb25lKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gcGF0aHMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBiYXNlVW5zZXQocmVzdWx0LCBwYXRoc1tsZW5ndGhdKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gb21pdDtcbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFIHx8IHR5cGVbMF0gPT09IFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDaGVjayBpZiB3ZSdyZSByZXF1aXJlZCB0byBhZGQgYSBwb3J0IG51bWJlci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZGVmYXVsdC1wb3J0XG4gKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IHBvcnQgUG9ydCBudW1iZXIgd2UgbmVlZCB0byBjaGVja1xuICogQHBhcmFtIHtTdHJpbmd9IHByb3RvY29sIFByb3RvY29sIHdlIG5lZWQgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJcyBpdCBhIGRlZmF1bHQgcG9ydCBmb3IgdGhlIGdpdmVuIHByb3RvY29sXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXF1aXJlZChwb3J0LCBwcm90b2NvbCkge1xuICBwcm90b2NvbCA9IHByb3RvY29sLnNwbGl0KCc6JylbMF07XG4gIHBvcnQgPSArcG9ydDtcblxuICBpZiAoIXBvcnQpIHJldHVybiBmYWxzZTtcblxuICBzd2l0Y2ggKHByb3RvY29sKSB7XG4gICAgY2FzZSAnaHR0cCc6XG4gICAgY2FzZSAnd3MnOlxuICAgIHJldHVybiBwb3J0ICE9PSA4MDtcblxuICAgIGNhc2UgJ2h0dHBzJzpcbiAgICBjYXNlICd3c3MnOlxuICAgIHJldHVybiBwb3J0ICE9PSA0NDM7XG5cbiAgICBjYXNlICdmdHAnOlxuICAgIHJldHVybiBwb3J0ICE9PSAyMTtcblxuICAgIGNhc2UgJ2dvcGhlcic6XG4gICAgcmV0dXJuIHBvcnQgIT09IDcwO1xuXG4gICAgY2FzZSAnZmlsZSc6XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQgIT09IDA7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCB1bmRlZjtcblxuLyoqXG4gKiBEZWNvZGUgYSBVUkkgZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBVUkkgZW5jb2RlZCBzdHJpbmcuXG4gKiBAcmV0dXJucyB7U3RyaW5nfE51bGx9IFRoZSBkZWNvZGVkIHN0cmluZy5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGlucHV0LnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gZW5jb2RlIGEgZ2l2ZW4gaW5wdXQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBlbmNvZGVkLlxuICogQHJldHVybnMge1N0cmluZ3xOdWxsfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFNpbXBsZSBxdWVyeSBzdHJpbmcgcGFyc2VyLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSBUaGUgcXVlcnkgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkLlxuICogQHJldHVybnMge09iamVjdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5c3RyaW5nKHF1ZXJ5KSB7XG4gIHZhciBwYXJzZXIgPSAvKFtePT8jJl0rKT0/KFteJl0qKS9nXG4gICAgLCByZXN1bHQgPSB7fVxuICAgICwgcGFydDtcblxuICB3aGlsZSAocGFydCA9IHBhcnNlci5leGVjKHF1ZXJ5KSkge1xuICAgIHZhciBrZXkgPSBkZWNvZGUocGFydFsxXSlcbiAgICAgICwgdmFsdWUgPSBkZWNvZGUocGFydFsyXSk7XG5cbiAgICAvL1xuICAgIC8vIFByZXZlbnQgb3ZlcnJpZGluZyBvZiBleGlzdGluZyBwcm9wZXJ0aWVzLiBUaGlzIGVuc3VyZXMgdGhhdCBidWlsZC1pblxuICAgIC8vIG1ldGhvZHMgbGlrZSBgdG9TdHJpbmdgIG9yIF9fcHJvdG9fXyBhcmUgbm90IG92ZXJyaWRlbiBieSBtYWxpY2lvdXNcbiAgICAvLyBxdWVyeXN0cmluZ3MuXG4gICAgLy9cbiAgICAvLyBJbiB0aGUgY2FzZSBpZiBmYWlsZWQgZGVjb2RpbmcsIHdlIHdhbnQgdG8gb21pdCB0aGUga2V5L3ZhbHVlIHBhaXJzXG4gICAgLy8gZnJvbSB0aGUgcmVzdWx0LlxuICAgIC8vXG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBrZXkgaW4gcmVzdWx0KSBjb250aW51ZTtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBxdWVyeSBzdHJpbmcgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRoYXQgc2hvdWxkIGJlIHRyYW5zZm9ybWVkLlxuICogQHBhcmFtIHtTdHJpbmd9IHByZWZpeCBPcHRpb25hbCBwcmVmaXguXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gcXVlcnlzdHJpbmdpZnkob2JqLCBwcmVmaXgpIHtcbiAgcHJlZml4ID0gcHJlZml4IHx8ICcnO1xuXG4gIHZhciBwYWlycyA9IFtdXG4gICAgLCB2YWx1ZVxuICAgICwga2V5O1xuXG4gIC8vXG4gIC8vIE9wdGlvbmFsbHkgcHJlZml4IHdpdGggYSAnPycgaWYgbmVlZGVkXG4gIC8vXG4gIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIHByZWZpeCkgcHJlZml4ID0gJz8nO1xuXG4gIGZvciAoa2V5IGluIG9iaikge1xuICAgIGlmIChoYXMuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHZhbHVlID0gb2JqW2tleV07XG5cbiAgICAgIC8vXG4gICAgICAvLyBFZGdlIGNhc2VzIHdoZXJlIHdlIGFjdHVhbGx5IHdhbnQgdG8gZW5jb2RlIHRoZSB2YWx1ZSB0byBhbiBlbXB0eVxuICAgICAgLy8gc3RyaW5nIGluc3RlYWQgb2YgdGhlIHN0cmluZ2lmaWVkIHZhbHVlLlxuICAgICAgLy9cbiAgICAgIGlmICghdmFsdWUgJiYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZiB8fCBpc05hTih2YWx1ZSkpKSB7XG4gICAgICAgIHZhbHVlID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGtleSA9IGVuY29kZShrZXkpO1xuICAgICAgdmFsdWUgPSBlbmNvZGUodmFsdWUpO1xuXG4gICAgICAvL1xuICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIGVuY29kZSB0aGUgc3RyaW5ncywgd2Ugc2hvdWxkIGJhaWwgb3V0IGFzIHdlIGRvbid0XG4gICAgICAvLyB3YW50IHRvIGFkZCBpbnZhbGlkIHN0cmluZ3MgdG8gdGhlIHF1ZXJ5LlxuICAgICAgLy9cbiAgICAgIGlmIChrZXkgPT09IG51bGwgfHwgdmFsdWUgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgcGFpcnMucHVzaChrZXkgKyc9JysgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYWlycy5sZW5ndGggPyBwcmVmaXggKyBwYWlycy5qb2luKCcmJykgOiAnJztcbn1cblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmV4cG9ydHMuc3RyaW5naWZ5ID0gcXVlcnlzdHJpbmdpZnk7XG5leHBvcnRzLnBhcnNlID0gcXVlcnlzdHJpbmc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVxdWlyZWQgPSByZXF1aXJlKCdyZXF1aXJlcy1wb3J0JylcbiAgLCBxcyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5naWZ5JylcbiAgLCBjb250cm9sT3JXaGl0ZXNwYWNlID0gL15bXFx4MDAtXFx4MjBcXHUwMGEwXFx1MTY4MFxcdTIwMDAtXFx1MjAwYVxcdTIwMjhcXHUyMDI5XFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1ZmVmZl0rL1xuICAsIENSSFRMRiA9IC9bXFxuXFxyXFx0XS9nXG4gICwgc2xhc2hlcyA9IC9eW0EtWmEtel1bQS1aYS16MC05Ky0uXSo6XFwvXFwvL1xuICAsIHBvcnQgPSAvOlxcZCskL1xuICAsIHByb3RvY29scmUgPSAvXihbYS16XVthLXowLTkuKy1dKjopPyhcXC9cXC8pPyhbXFxcXC9dKyk/KFtcXFNcXHNdKikvaVxuICAsIHdpbmRvd3NEcml2ZUxldHRlciA9IC9eW2EtekEtWl06LztcblxuLyoqXG4gKiBSZW1vdmUgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB3aGl0ZXNwYWNlIGZyb20gdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHN0ciBTdHJpbmcgdG8gdHJpbS5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IEEgbmV3IHN0cmluZyByZXByZXNlbnRpbmcgYHN0cmAgc3RyaXBwZWQgb2YgY29udHJvbFxuICogICAgIGNoYXJhY3RlcnMgYW5kIHdoaXRlc3BhY2UgZnJvbSBpdHMgYmVnaW5uaW5nLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB0cmltTGVmdChzdHIpIHtcbiAgcmV0dXJuIChzdHIgPyBzdHIgOiAnJykudG9TdHJpbmcoKS5yZXBsYWNlKGNvbnRyb2xPcldoaXRlc3BhY2UsICcnKTtcbn1cblxuLyoqXG4gKiBUaGVzZSBhcmUgdGhlIHBhcnNlIHJ1bGVzIGZvciB0aGUgVVJMIHBhcnNlciwgaXQgaW5mb3JtcyB0aGUgcGFyc2VyXG4gKiBhYm91dDpcbiAqXG4gKiAwLiBUaGUgY2hhciBpdCBOZWVkcyB0byBwYXJzZSwgaWYgaXQncyBhIHN0cmluZyBpdCBzaG91bGQgYmUgZG9uZSB1c2luZ1xuICogICAgaW5kZXhPZiwgUmVnRXhwIHVzaW5nIGV4ZWMgYW5kIE5hTiBtZWFucyBzZXQgYXMgY3VycmVudCB2YWx1ZS5cbiAqIDEuIFRoZSBwcm9wZXJ0eSB3ZSBzaG91bGQgc2V0IHdoZW4gcGFyc2luZyB0aGlzIHZhbHVlLlxuICogMi4gSW5kaWNhdGlvbiBpZiBpdCdzIGJhY2t3YXJkcyBvciBmb3J3YXJkIHBhcnNpbmcsIHdoZW4gc2V0IGFzIG51bWJlciBpdCdzXG4gKiAgICB0aGUgdmFsdWUgb2YgZXh0cmEgY2hhcnMgdGhhdCBzaG91bGQgYmUgc3BsaXQgb2ZmLlxuICogMy4gSW5oZXJpdCBmcm9tIGxvY2F0aW9uIGlmIG5vbiBleGlzdGluZyBpbiB0aGUgcGFyc2VyLlxuICogNC4gYHRvTG93ZXJDYXNlYCB0aGUgcmVzdWx0aW5nIHZhbHVlLlxuICovXG52YXIgcnVsZXMgPSBbXG4gIFsnIycsICdoYXNoJ10sICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBbJz8nLCAncXVlcnknXSwgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgZnVuY3Rpb24gc2FuaXRpemUoYWRkcmVzcywgdXJsKSB7ICAgICAvLyBTYW5pdGl6ZSB3aGF0IGlzIGxlZnQgb2YgdGhlIGFkZHJlc3NcbiAgICByZXR1cm4gaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgPyBhZGRyZXNzLnJlcGxhY2UoL1xcXFwvZywgJy8nKSA6IGFkZHJlc3M7XG4gIH0sXG4gIFsnLycsICdwYXRobmFtZSddLCAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBbJ0AnLCAnYXV0aCcsIDFdLCAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgZnJvbnQuXG4gIFtOYU4sICdob3N0JywgdW5kZWZpbmVkLCAxLCAxXSwgICAgICAgLy8gU2V0IGxlZnQgb3ZlciB2YWx1ZS5cbiAgWy86KFxcZCopJC8sICdwb3J0JywgdW5kZWZpbmVkLCAxXSwgICAgLy8gUmVnRXhwIHRoZSBiYWNrLlxuICBbTmFOLCAnaG9zdG5hbWUnLCB1bmRlZmluZWQsIDEsIDFdICAgIC8vIFNldCBsZWZ0IG92ZXIuXG5dO1xuXG4vKipcbiAqIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBiZSBjb3BpZWQgb3IgaW5oZXJpdGVkIGZyb20uIFRoaXMgaXMgb25seSBuZWVkZWRcbiAqIGZvciBhbGwgbm9uIGJsb2IgVVJMJ3MgYXMgYSBibG9iIFVSTCBkb2VzIG5vdCBpbmNsdWRlIGEgaGFzaCwgb25seSB0aGVcbiAqIG9yaWdpbi5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xudmFyIGlnbm9yZSA9IHsgaGFzaDogMSwgcXVlcnk6IDEgfTtcblxuLyoqXG4gKiBUaGUgbG9jYXRpb24gb2JqZWN0IGRpZmZlcnMgd2hlbiB5b3VyIGNvZGUgaXMgbG9hZGVkIHRocm91Z2ggYSBub3JtYWwgcGFnZSxcbiAqIFdvcmtlciBvciB0aHJvdWdoIGEgd29ya2VyIHVzaW5nIGEgYmxvYi4gQW5kIHdpdGggdGhlIGJsb2JibGUgYmVnaW5zIHRoZVxuICogdHJvdWJsZSBhcyB0aGUgbG9jYXRpb24gb2JqZWN0IHdpbGwgY29udGFpbiB0aGUgVVJMIG9mIHRoZSBibG9iLCBub3QgdGhlXG4gKiBsb2NhdGlvbiBvZiB0aGUgcGFnZSB3aGVyZSBvdXIgY29kZSBpcyBsb2FkZWQgaW4uIFRoZSBhY3R1YWwgb3JpZ2luIGlzXG4gKiBlbmNvZGVkIGluIHRoZSBgcGF0aG5hbWVgIHNvIHdlIGNhbiB0aGFua2Z1bGx5IGdlbmVyYXRlIGEgZ29vZCBcImRlZmF1bHRcIlxuICogbG9jYXRpb24gZnJvbSBpdCBzbyB3ZSBjYW4gZ2VuZXJhdGUgcHJvcGVyIHJlbGF0aXZlIFVSTCdzIGFnYWluLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gbG9jIE9wdGlvbmFsIGRlZmF1bHQgbG9jYXRpb24gb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gbG9sY2F0aW9uIG9iamVjdC5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gbG9sY2F0aW9uKGxvYykge1xuICB2YXIgZ2xvYmFsVmFyO1xuXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgZ2xvYmFsVmFyID0gd2luZG93O1xuICBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgZ2xvYmFsVmFyID0gZ2xvYmFsO1xuICBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIGdsb2JhbFZhciA9IHNlbGY7XG4gIGVsc2UgZ2xvYmFsVmFyID0ge307XG5cbiAgdmFyIGxvY2F0aW9uID0gZ2xvYmFsVmFyLmxvY2F0aW9uIHx8IHt9O1xuICBsb2MgPSBsb2MgfHwgbG9jYXRpb247XG5cbiAgdmFyIGZpbmFsZGVzdGluYXRpb24gPSB7fVxuICAgICwgdHlwZSA9IHR5cGVvZiBsb2NcbiAgICAsIGtleTtcblxuICBpZiAoJ2Jsb2I6JyA9PT0gbG9jLnByb3RvY29sKSB7XG4gICAgZmluYWxkZXN0aW5hdGlvbiA9IG5ldyBVcmwodW5lc2NhcGUobG9jLnBhdGhuYW1lKSwge30pO1xuICB9IGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlKSB7XG4gICAgZmluYWxkZXN0aW5hdGlvbiA9IG5ldyBVcmwobG9jLCB7fSk7XG4gICAgZm9yIChrZXkgaW4gaWdub3JlKSBkZWxldGUgZmluYWxkZXN0aW5hdGlvbltrZXldO1xuICB9IGVsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlKSB7XG4gICAgZm9yIChrZXkgaW4gbG9jKSB7XG4gICAgICBpZiAoa2V5IGluIGlnbm9yZSkgY29udGludWU7XG4gICAgICBmaW5hbGRlc3RpbmF0aW9uW2tleV0gPSBsb2Nba2V5XTtcbiAgICB9XG5cbiAgICBpZiAoZmluYWxkZXN0aW5hdGlvbi5zbGFzaGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbmFsZGVzdGluYXRpb24uc2xhc2hlcyA9IHNsYXNoZXMudGVzdChsb2MuaHJlZik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbmFsZGVzdGluYXRpb247XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIHByb3RvY29sIHNjaGVtZSBpcyBzcGVjaWFsLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBUaGUgcHJvdG9jb2wgc2NoZW1lIG9mIHRoZSBVUkxcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcHJvdG9jb2wgc2NoZW1lIGlzIHNwZWNpYWwsIGVsc2UgYGZhbHNlYFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNTcGVjaWFsKHNjaGVtZSkge1xuICByZXR1cm4gKFxuICAgIHNjaGVtZSA9PT0gJ2ZpbGU6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ2Z0cDonIHx8XG4gICAgc2NoZW1lID09PSAnaHR0cDonIHx8XG4gICAgc2NoZW1lID09PSAnaHR0cHM6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ3dzOicgfHxcbiAgICBzY2hlbWUgPT09ICd3c3M6J1xuICApO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIFByb3RvY29sRXh0cmFjdFxuICogQHR5cGUgT2JqZWN0XG4gKiBAcHJvcGVydHkge1N0cmluZ30gcHJvdG9jb2wgUHJvdG9jb2wgbWF0Y2hlZCBpbiB0aGUgVVJMLCBpbiBsb3dlcmNhc2UuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IHNsYXNoZXMgYHRydWVgIGlmIHByb3RvY29sIGlzIGZvbGxvd2VkIGJ5IFwiLy9cIiwgZWxzZSBgZmFsc2VgLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHJlc3QgUmVzdCBvZiB0aGUgVVJMIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIHByb3RvY29sLlxuICovXG5cbi8qKlxuICogRXh0cmFjdCBwcm90b2NvbCBpbmZvcm1hdGlvbiBmcm9tIGEgVVJMIHdpdGgvd2l0aG91dCBkb3VibGUgc2xhc2ggKFwiLy9cIikuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgVVJMIHdlIHdhbnQgdG8gZXh0cmFjdCBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IGxvY2F0aW9uXG4gKiBAcmV0dXJuIHtQcm90b2NvbEV4dHJhY3R9IEV4dHJhY3RlZCBpbmZvcm1hdGlvbi5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RQcm90b2NvbChhZGRyZXNzLCBsb2NhdGlvbikge1xuICBhZGRyZXNzID0gdHJpbUxlZnQoYWRkcmVzcyk7XG4gIGFkZHJlc3MgPSBhZGRyZXNzLnJlcGxhY2UoQ1JIVExGLCAnJyk7XG4gIGxvY2F0aW9uID0gbG9jYXRpb24gfHwge307XG5cbiAgdmFyIG1hdGNoID0gcHJvdG9jb2xyZS5leGVjKGFkZHJlc3MpO1xuICB2YXIgcHJvdG9jb2wgPSBtYXRjaFsxXSA/IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkgOiAnJztcbiAgdmFyIGZvcndhcmRTbGFzaGVzID0gISFtYXRjaFsyXTtcbiAgdmFyIG90aGVyU2xhc2hlcyA9ICEhbWF0Y2hbM107XG4gIHZhciBzbGFzaGVzQ291bnQgPSAwO1xuICB2YXIgcmVzdDtcblxuICBpZiAoZm9yd2FyZFNsYXNoZXMpIHtcbiAgICBpZiAob3RoZXJTbGFzaGVzKSB7XG4gICAgICByZXN0ID0gbWF0Y2hbMl0gKyBtYXRjaFszXSArIG1hdGNoWzRdO1xuICAgICAgc2xhc2hlc0NvdW50ID0gbWF0Y2hbMl0ubGVuZ3RoICsgbWF0Y2hbM10ubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0ID0gbWF0Y2hbMl0gKyBtYXRjaFs0XTtcbiAgICAgIHNsYXNoZXNDb3VudCA9IG1hdGNoWzJdLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG90aGVyU2xhc2hlcykge1xuICAgICAgcmVzdCA9IG1hdGNoWzNdICsgbWF0Y2hbNF07XG4gICAgICBzbGFzaGVzQ291bnQgPSBtYXRjaFszXS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3QgPSBtYXRjaFs0XVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm90b2NvbCA9PT0gJ2ZpbGU6Jykge1xuICAgIGlmIChzbGFzaGVzQ291bnQgPj0gMikge1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoMik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3BlY2lhbChwcm90b2NvbCkpIHtcbiAgICByZXN0ID0gbWF0Y2hbNF07XG4gIH0gZWxzZSBpZiAocHJvdG9jb2wpIHtcbiAgICBpZiAoZm9yd2FyZFNsYXNoZXMpIHtcbiAgICAgIHJlc3QgPSByZXN0LnNsaWNlKDIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzbGFzaGVzQ291bnQgPj0gMiAmJiBpc1NwZWNpYWwobG9jYXRpb24ucHJvdG9jb2wpKSB7XG4gICAgcmVzdCA9IG1hdGNoWzRdO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwcm90b2NvbDogcHJvdG9jb2wsXG4gICAgc2xhc2hlczogZm9yd2FyZFNsYXNoZXMgfHwgaXNTcGVjaWFsKHByb3RvY29sKSxcbiAgICBzbGFzaGVzQ291bnQ6IHNsYXNoZXNDb3VudCxcbiAgICByZXN0OiByZXN0XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHJlbGF0aXZlIFVSTCBwYXRobmFtZSBhZ2FpbnN0IGEgYmFzZSBVUkwgcGF0aG5hbWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJlbGF0aXZlIFBhdGhuYW1lIG9mIHRoZSByZWxhdGl2ZSBVUkwuXG4gKiBAcGFyYW0ge1N0cmluZ30gYmFzZSBQYXRobmFtZSBvZiB0aGUgYmFzZSBVUkwuXG4gKiBAcmV0dXJuIHtTdHJpbmd9IFJlc29sdmVkIHBhdGhuYW1lLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZShyZWxhdGl2ZSwgYmFzZSkge1xuICBpZiAocmVsYXRpdmUgPT09ICcnKSByZXR1cm4gYmFzZTtcblxuICB2YXIgcGF0aCA9IChiYXNlIHx8ICcvJykuc3BsaXQoJy8nKS5zbGljZSgwLCAtMSkuY29uY2F0KHJlbGF0aXZlLnNwbGl0KCcvJykpXG4gICAgLCBpID0gcGF0aC5sZW5ndGhcbiAgICAsIGxhc3QgPSBwYXRoW2kgLSAxXVxuICAgICwgdW5zaGlmdCA9IGZhbHNlXG4gICAgLCB1cCA9IDA7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIGlmIChwYXRoW2ldID09PSAnLicpIHtcbiAgICAgIHBhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGF0aFtpXSA9PT0gJy4uJykge1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIGlmIChpID09PSAwKSB1bnNoaWZ0ID0gdHJ1ZTtcbiAgICAgIHBhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICBpZiAodW5zaGlmdCkgcGF0aC51bnNoaWZ0KCcnKTtcbiAgaWYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSBwYXRoLnB1c2goJycpO1xuXG4gIHJldHVybiBwYXRoLmpvaW4oJy8nKTtcbn1cblxuLyoqXG4gKiBUaGUgYWN0dWFsIFVSTCBpbnN0YW5jZS4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gb2JqZWN0IHdlJ3ZlIG9wdGVkLWluIHRvXG4gKiBjcmVhdGUgYW4gYWN0dWFsIGNvbnN0cnVjdG9yIGFzIGl0J3MgbXVjaCBtb3JlIG1lbW9yeSBlZmZpY2llbnQgYW5kXG4gKiBmYXN0ZXIgYW5kIGl0IHBsZWFzZXMgbXkgT0NELlxuICpcbiAqIEl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IHdlIHNob3VsZCBub3QgdXNlIGBVUkxgIGFzIGNsYXNzIG5hbWUgdG8gcHJldmVudFxuICogY2xhc2hlcyB3aXRoIHRoZSBnbG9iYWwgVVJMIGluc3RhbmNlIHRoYXQgZ290IGludHJvZHVjZWQgaW4gYnJvd3NlcnMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyBVUkwgd2Ugd2FudCB0byBwYXJzZS5cbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gW2xvY2F0aW9uXSBMb2NhdGlvbiBkZWZhdWx0cyBmb3IgcmVsYXRpdmUgcGF0aHMuXG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IFtwYXJzZXJdIFBhcnNlciBmb3IgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFVybChhZGRyZXNzLCBsb2NhdGlvbiwgcGFyc2VyKSB7XG4gIGFkZHJlc3MgPSB0cmltTGVmdChhZGRyZXNzKTtcbiAgYWRkcmVzcyA9IGFkZHJlc3MucmVwbGFjZShDUkhUTEYsICcnKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVXJsKSkge1xuICAgIHJldHVybiBuZXcgVXJsKGFkZHJlc3MsIGxvY2F0aW9uLCBwYXJzZXIpO1xuICB9XG5cbiAgdmFyIHJlbGF0aXZlLCBleHRyYWN0ZWQsIHBhcnNlLCBpbnN0cnVjdGlvbiwgaW5kZXgsIGtleVxuICAgICwgaW5zdHJ1Y3Rpb25zID0gcnVsZXMuc2xpY2UoKVxuICAgICwgdHlwZSA9IHR5cGVvZiBsb2NhdGlvblxuICAgICwgdXJsID0gdGhpc1xuICAgICwgaSA9IDA7XG5cbiAgLy9cbiAgLy8gVGhlIGZvbGxvd2luZyBpZiBzdGF0ZW1lbnRzIGFsbG93cyB0aGlzIG1vZHVsZSB0d28gaGF2ZSBjb21wYXRpYmlsaXR5IHdpdGhcbiAgLy8gMiBkaWZmZXJlbnQgQVBJOlxuICAvL1xuICAvLyAxLiBOb2RlLmpzJ3MgYHVybC5wYXJzZWAgYXBpIHdoaWNoIGFjY2VwdHMgYSBVUkwsIGJvb2xlYW4gYXMgYXJndW1lbnRzXG4gIC8vICAgIHdoZXJlIHRoZSBib29sZWFuIGluZGljYXRlcyB0aGF0IHRoZSBxdWVyeSBzdHJpbmcgc2hvdWxkIGFsc28gYmUgcGFyc2VkLlxuICAvL1xuICAvLyAyLiBUaGUgYFVSTGAgaW50ZXJmYWNlIG9mIHRoZSBicm93c2VyIHdoaWNoIGFjY2VwdHMgYSBVUkwsIG9iamVjdCBhc1xuICAvLyAgICBhcmd1bWVudHMuIFRoZSBzdXBwbGllZCBvYmplY3Qgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHQgdmFsdWVzIC8gZmFsbC1iYWNrXG4gIC8vICAgIGZvciByZWxhdGl2ZSBwYXRocy5cbiAgLy9cbiAgaWYgKCdvYmplY3QnICE9PSB0eXBlICYmICdzdHJpbmcnICE9PSB0eXBlKSB7XG4gICAgcGFyc2VyID0gbG9jYXRpb247XG4gICAgbG9jYXRpb24gPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlciAmJiAnZnVuY3Rpb24nICE9PSB0eXBlb2YgcGFyc2VyKSBwYXJzZXIgPSBxcy5wYXJzZTtcblxuICBsb2NhdGlvbiA9IGxvbGNhdGlvbihsb2NhdGlvbik7XG5cbiAgLy9cbiAgLy8gRXh0cmFjdCBwcm90b2NvbCBpbmZvcm1hdGlvbiBiZWZvcmUgcnVubmluZyB0aGUgaW5zdHJ1Y3Rpb25zLlxuICAvL1xuICBleHRyYWN0ZWQgPSBleHRyYWN0UHJvdG9jb2woYWRkcmVzcyB8fCAnJywgbG9jYXRpb24pO1xuICByZWxhdGl2ZSA9ICFleHRyYWN0ZWQucHJvdG9jb2wgJiYgIWV4dHJhY3RlZC5zbGFzaGVzO1xuICB1cmwuc2xhc2hlcyA9IGV4dHJhY3RlZC5zbGFzaGVzIHx8IHJlbGF0aXZlICYmIGxvY2F0aW9uLnNsYXNoZXM7XG4gIHVybC5wcm90b2NvbCA9IGV4dHJhY3RlZC5wcm90b2NvbCB8fCBsb2NhdGlvbi5wcm90b2NvbCB8fCAnJztcbiAgYWRkcmVzcyA9IGV4dHJhY3RlZC5yZXN0O1xuXG4gIC8vXG4gIC8vIFdoZW4gdGhlIGF1dGhvcml0eSBjb21wb25lbnQgaXMgYWJzZW50IHRoZSBVUkwgc3RhcnRzIHdpdGggYSBwYXRoXG4gIC8vIGNvbXBvbmVudC5cbiAgLy9cbiAgaWYgKFxuICAgIGV4dHJhY3RlZC5wcm90b2NvbCA9PT0gJ2ZpbGU6JyAmJiAoXG4gICAgICBleHRyYWN0ZWQuc2xhc2hlc0NvdW50ICE9PSAyIHx8IHdpbmRvd3NEcml2ZUxldHRlci50ZXN0KGFkZHJlc3MpKSB8fFxuICAgICghZXh0cmFjdGVkLnNsYXNoZXMgJiZcbiAgICAgIChleHRyYWN0ZWQucHJvdG9jb2wgfHxcbiAgICAgICAgZXh0cmFjdGVkLnNsYXNoZXNDb3VudCA8IDIgfHxcbiAgICAgICAgIWlzU3BlY2lhbCh1cmwucHJvdG9jb2wpKSlcbiAgKSB7XG4gICAgaW5zdHJ1Y3Rpb25zWzNdID0gWy8oLiopLywgJ3BhdGhuYW1lJ107XG4gIH1cblxuICBmb3IgKDsgaSA8IGluc3RydWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zW2ldO1xuXG4gICAgaWYgKHR5cGVvZiBpbnN0cnVjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYWRkcmVzcyA9IGluc3RydWN0aW9uKGFkZHJlc3MsIHVybCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBwYXJzZSA9IGluc3RydWN0aW9uWzBdO1xuICAgIGtleSA9IGluc3RydWN0aW9uWzFdO1xuXG4gICAgaWYgKHBhcnNlICE9PSBwYXJzZSkge1xuICAgICAgdXJsW2tleV0gPSBhZGRyZXNzO1xuICAgIH0gZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBwYXJzZSkge1xuICAgICAgaW5kZXggPSBwYXJzZSA9PT0gJ0AnXG4gICAgICAgID8gYWRkcmVzcy5sYXN0SW5kZXhPZihwYXJzZSlcbiAgICAgICAgOiBhZGRyZXNzLmluZGV4T2YocGFyc2UpO1xuXG4gICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIGluc3RydWN0aW9uWzJdKSB7XG4gICAgICAgICAgdXJsW2tleV0gPSBhZGRyZXNzLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZShpbmRleCArIGluc3RydWN0aW9uWzJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cmxba2V5XSA9IGFkZHJlc3Muc2xpY2UoaW5kZXgpO1xuICAgICAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKGluZGV4ID0gcGFyc2UuZXhlYyhhZGRyZXNzKSkpIHtcbiAgICAgIHVybFtrZXldID0gaW5kZXhbMV07XG4gICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleC5pbmRleCk7XG4gICAgfVxuXG4gICAgdXJsW2tleV0gPSB1cmxba2V5XSB8fCAoXG4gICAgICByZWxhdGl2ZSAmJiBpbnN0cnVjdGlvblszXSA/IGxvY2F0aW9uW2tleV0gfHwgJycgOiAnJ1xuICAgICk7XG5cbiAgICAvL1xuICAgIC8vIEhvc3RuYW1lLCBob3N0IGFuZCBwcm90b2NvbCBzaG91bGQgYmUgbG93ZXJjYXNlZCBzbyB0aGV5IGNhbiBiZSB1c2VkIHRvXG4gICAgLy8gY3JlYXRlIGEgcHJvcGVyIGBvcmlnaW5gLlxuICAgIC8vXG4gICAgaWYgKGluc3RydWN0aW9uWzRdKSB1cmxba2V5XSA9IHVybFtrZXldLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICAvL1xuICAvLyBBbHNvIHBhcnNlIHRoZSBzdXBwbGllZCBxdWVyeSBzdHJpbmcgaW4gdG8gYW4gb2JqZWN0LiBJZiB3ZSdyZSBzdXBwbGllZFxuICAvLyB3aXRoIGEgY3VzdG9tIHBhcnNlciBhcyBmdW5jdGlvbiB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGJ1aWxkLWluXG4gIC8vIHBhcnNlci5cbiAgLy9cbiAgaWYgKHBhcnNlcikgdXJsLnF1ZXJ5ID0gcGFyc2VyKHVybC5xdWVyeSk7XG5cbiAgLy9cbiAgLy8gSWYgdGhlIFVSTCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSB0aGUgcGF0aG5hbWUgYWdhaW5zdCB0aGUgYmFzZSBVUkwuXG4gIC8vXG4gIGlmIChcbiAgICAgIHJlbGF0aXZlXG4gICAgJiYgbG9jYXRpb24uc2xhc2hlc1xuICAgICYmIHVybC5wYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJ1xuICAgICYmICh1cmwucGF0aG5hbWUgIT09ICcnIHx8IGxvY2F0aW9uLnBhdGhuYW1lICE9PSAnJylcbiAgKSB7XG4gICAgdXJsLnBhdGhuYW1lID0gcmVzb2x2ZSh1cmwucGF0aG5hbWUsIGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgfVxuXG4gIC8vXG4gIC8vIERlZmF1bHQgdG8gYSAvIGZvciBwYXRobmFtZSBpZiBub25lIGV4aXN0cy4gVGhpcyBub3JtYWxpemVzIHRoZSBVUkxcbiAgLy8gdG8gYWx3YXlzIGhhdmUgYSAvXG4gIC8vXG4gIGlmICh1cmwucGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycgJiYgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkpIHtcbiAgICB1cmwucGF0aG5hbWUgPSAnLycgKyB1cmwucGF0aG5hbWU7XG4gIH1cblxuICAvL1xuICAvLyBXZSBzaG91bGQgbm90IGFkZCBwb3J0IG51bWJlcnMgaWYgdGhleSBhcmUgYWxyZWFkeSB0aGUgZGVmYXVsdCBwb3J0IG51bWJlclxuICAvLyBmb3IgYSBnaXZlbiBwcm90b2NvbC4gQXMgdGhlIGhvc3QgYWxzbyBjb250YWlucyB0aGUgcG9ydCBudW1iZXIgd2UncmUgZ29pbmdcbiAgLy8gb3ZlcnJpZGUgaXQgd2l0aCB0aGUgaG9zdG5hbWUgd2hpY2ggY29udGFpbnMgbm8gcG9ydCBudW1iZXIuXG4gIC8vXG4gIGlmICghcmVxdWlyZWQodXJsLnBvcnQsIHVybC5wcm90b2NvbCkpIHtcbiAgICB1cmwuaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgICB1cmwucG9ydCA9ICcnO1xuICB9XG5cbiAgLy9cbiAgLy8gUGFyc2UgZG93biB0aGUgYGF1dGhgIGZvciB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLlxuICAvL1xuICB1cmwudXNlcm5hbWUgPSB1cmwucGFzc3dvcmQgPSAnJztcblxuICBpZiAodXJsLmF1dGgpIHtcbiAgICBpbmRleCA9IHVybC5hdXRoLmluZGV4T2YoJzonKTtcblxuICAgIGlmICh+aW5kZXgpIHtcbiAgICAgIHVybC51c2VybmFtZSA9IHVybC5hdXRoLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgIHVybC51c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLnVzZXJuYW1lKSk7XG5cbiAgICAgIHVybC5wYXNzd29yZCA9IHVybC5hdXRoLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgICB1cmwucGFzc3dvcmQgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC5wYXNzd29yZCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHVybC51c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLmF1dGgpKTtcbiAgICB9XG5cbiAgICB1cmwuYXV0aCA9IHVybC5wYXNzd29yZCA/IHVybC51c2VybmFtZSArJzonKyB1cmwucGFzc3dvcmQgOiB1cmwudXNlcm5hbWU7XG4gIH1cblxuICB1cmwub3JpZ2luID0gdXJsLnByb3RvY29sICE9PSAnZmlsZTonICYmIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpICYmIHVybC5ob3N0XG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgLy9cbiAgLy8gVGhlIGhyZWYgaXMganVzdCB0aGUgY29tcGlsZWQgcmVzdWx0LlxuICAvL1xuICB1cmwuaHJlZiA9IHVybC50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgY29udmVuaWVuY2UgbWV0aG9kIGZvciBjaGFuZ2luZyBwcm9wZXJ0aWVzIGluIHRoZSBVUkwgaW5zdGFuY2UgdG9cbiAqIGluc3VyZSB0aGF0IHRoZXkgYWxsIHByb3BhZ2F0ZSBjb3JyZWN0bHkuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhcnQgICAgICAgICAgUHJvcGVydHkgd2UgbmVlZCB0byBhZGp1c3QuXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAgICAgICAgICBUaGUgbmV3bHkgYXNzaWduZWQgdmFsdWUuXG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IGZuICBXaGVuIHNldHRpbmcgdGhlIHF1ZXJ5LCBpdCB3aWxsIGJlIHRoZSBmdW5jdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBwYXJzZSB0aGUgcXVlcnkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHNldHRpbmcgdGhlIHByb3RvY29sLCBkb3VibGUgc2xhc2ggd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBmcm9tIHRoZSBmaW5hbCB1cmwgaWYgaXQgaXMgdHJ1ZS5cbiAqIEByZXR1cm5zIHtVUkx9IFVSTCBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHNldChwYXJ0LCB2YWx1ZSwgZm4pIHtcbiAgdmFyIHVybCA9IHRoaXM7XG5cbiAgc3dpdGNoIChwYXJ0KSB7XG4gICAgY2FzZSAncXVlcnknOlxuICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gKGZuIHx8IHFzLnBhcnNlKSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb3J0JzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAoIXJlcXVpcmVkKHZhbHVlLCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lO1xuICAgICAgICB1cmxbcGFydF0gPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWUgKyc6JysgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaG9zdG5hbWUnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICh1cmwucG9ydCkgdmFsdWUgKz0gJzonKyB1cmwucG9ydDtcbiAgICAgIHVybC5ob3N0ID0gdmFsdWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmIChwb3J0LnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgICAgICAgdXJsLnBvcnQgPSB2YWx1ZS5wb3AoKTtcbiAgICAgICAgdXJsLmhvc3RuYW1lID0gdmFsdWUuam9pbignOicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsLmhvc3RuYW1lID0gdmFsdWU7XG4gICAgICAgIHVybC5wb3J0ID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncHJvdG9jb2wnOlxuICAgICAgdXJsLnByb3RvY29sID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHVybC5zbGFzaGVzID0gIWZuO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwYXRobmFtZSc6XG4gICAgY2FzZSAnaGFzaCc6XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGNoYXIgPSBwYXJ0ID09PSAncGF0aG5hbWUnID8gJy8nIDogJyMnO1xuICAgICAgICB1cmxbcGFydF0gPSB2YWx1ZS5jaGFyQXQoMCkgIT09IGNoYXIgPyBjaGFyICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd1c2VybmFtZSc6XG4gICAgY2FzZSAncGFzc3dvcmQnOlxuICAgICAgdXJsW3BhcnRdID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYXV0aCc6XG4gICAgICB2YXIgaW5kZXggPSB2YWx1ZS5pbmRleE9mKCc6Jyk7XG5cbiAgICAgIGlmICh+aW5kZXgpIHtcbiAgICAgICAgdXJsLnVzZXJuYW1lID0gdmFsdWUuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC51c2VybmFtZSkpO1xuXG4gICAgICAgIHVybC5wYXNzd29yZCA9IHZhbHVlLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgICAgIHVybC5wYXNzd29yZCA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLnBhc3N3b3JkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gICAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGlucyA9IHJ1bGVzW2ldO1xuXG4gICAgaWYgKGluc1s0XSkgdXJsW2luc1sxXV0gPSB1cmxbaW5zWzFdXS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgdXJsLmF1dGggPSB1cmwucGFzc3dvcmQgPyB1cmwudXNlcm5hbWUgKyc6JysgdXJsLnBhc3N3b3JkIDogdXJsLnVzZXJuYW1lO1xuXG4gIHVybC5vcmlnaW4gPSB1cmwucHJvdG9jb2wgIT09ICdmaWxlOicgJiYgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgJiYgdXJsLmhvc3RcbiAgICA/IHVybC5wcm90b2NvbCArJy8vJysgdXJsLmhvc3RcbiAgICA6ICdudWxsJztcblxuICB1cmwuaHJlZiA9IHVybC50b1N0cmluZygpO1xuXG4gIHJldHVybiB1cmw7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBwcm9wZXJ0aWVzIGJhY2sgaW4gdG8gYSB2YWxpZCBhbmQgZnVsbCBVUkwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZ2lmeSBPcHRpb25hbCBxdWVyeSBzdHJpbmdpZnkgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBDb21waWxlZCB2ZXJzaW9uIG9mIHRoZSBVUkwuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHN0cmluZ2lmeSkge1xuICBpZiAoIXN0cmluZ2lmeSB8fCAnZnVuY3Rpb24nICE9PSB0eXBlb2Ygc3RyaW5naWZ5KSBzdHJpbmdpZnkgPSBxcy5zdHJpbmdpZnk7XG5cbiAgdmFyIHF1ZXJ5XG4gICAgLCB1cmwgPSB0aGlzXG4gICAgLCBob3N0ID0gdXJsLmhvc3RcbiAgICAsIHByb3RvY29sID0gdXJsLnByb3RvY29sO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5jaGFyQXQocHJvdG9jb2wubGVuZ3RoIC0gMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIHZhciByZXN1bHQgPVxuICAgIHByb3RvY29sICtcbiAgICAoKHVybC5wcm90b2NvbCAmJiB1cmwuc2xhc2hlcykgfHwgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgPyAnLy8nIDogJycpO1xuXG4gIGlmICh1cmwudXNlcm5hbWUpIHtcbiAgICByZXN1bHQgKz0gdXJsLnVzZXJuYW1lO1xuICAgIGlmICh1cmwucGFzc3dvcmQpIHJlc3VsdCArPSAnOicrIHVybC5wYXNzd29yZDtcbiAgICByZXN1bHQgKz0gJ0AnO1xuICB9IGVsc2UgaWYgKHVybC5wYXNzd29yZCkge1xuICAgIHJlc3VsdCArPSAnOicrIHVybC5wYXNzd29yZDtcbiAgICByZXN1bHQgKz0gJ0AnO1xuICB9IGVsc2UgaWYgKFxuICAgIHVybC5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpICYmXG4gICAgIWhvc3QgJiZcbiAgICB1cmwucGF0aG5hbWUgIT09ICcvJ1xuICApIHtcbiAgICAvL1xuICAgIC8vIEFkZCBiYWNrIHRoZSBlbXB0eSB1c2VyaW5mbywgb3RoZXJ3aXNlIHRoZSBvcmlnaW5hbCBpbnZhbGlkIFVSTFxuICAgIC8vIG1pZ2h0IGJlIHRyYW5zZm9ybWVkIGludG8gYSB2YWxpZCBvbmUgd2l0aCBgdXJsLnBhdGhuYW1lYCBhcyBob3N0LlxuICAgIC8vXG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfVxuXG4gIC8vXG4gIC8vIFRyYWlsaW5nIGNvbG9uIGlzIHJlbW92ZWQgZnJvbSBgdXJsLmhvc3RgIHdoZW4gaXQgaXMgcGFyc2VkLiBJZiBpdCBzdGlsbFxuICAvLyBlbmRzIHdpdGggYSBjb2xvbiwgdGhlbiBhZGQgYmFjayB0aGUgdHJhaWxpbmcgY29sb24gdGhhdCB3YXMgcmVtb3ZlZC4gVGhpc1xuICAvLyBwcmV2ZW50cyBhbiBpbnZhbGlkIFVSTCBmcm9tIGJlaW5nIHRyYW5zZm9ybWVkIGludG8gYSB2YWxpZCBvbmUuXG4gIC8vXG4gIGlmIChob3N0W2hvc3QubGVuZ3RoIC0gMV0gPT09ICc6JyB8fCAocG9ydC50ZXN0KHVybC5ob3N0bmFtZSkgJiYgIXVybC5wb3J0KSkge1xuICAgIGhvc3QgKz0gJzonO1xuICB9XG5cbiAgcmVzdWx0ICs9IGhvc3QgKyB1cmwucGF0aG5hbWU7XG5cbiAgcXVlcnkgPSAnb2JqZWN0JyA9PT0gdHlwZW9mIHVybC5xdWVyeSA/IHN0cmluZ2lmeSh1cmwucXVlcnkpIDogdXJsLnF1ZXJ5O1xuICBpZiAocXVlcnkpIHJlc3VsdCArPSAnPycgIT09IHF1ZXJ5LmNoYXJBdCgwKSA/ICc/JysgcXVlcnkgOiBxdWVyeTtcblxuICBpZiAodXJsLmhhc2gpIHJlc3VsdCArPSB1cmwuaGFzaDtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5VcmwucHJvdG90eXBlID0geyBzZXQ6IHNldCwgdG9TdHJpbmc6IHRvU3RyaW5nIH07XG5cbi8vXG4vLyBFeHBvc2UgdGhlIFVSTCBwYXJzZXIgYW5kIHNvbWUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgYmUgdXNlZnVsIGZvclxuLy8gb3RoZXJzIG9yIHRlc3RpbmcuXG4vL1xuVXJsLmV4dHJhY3RQcm90b2NvbCA9IGV4dHJhY3RQcm90b2NvbDtcblVybC5sb2NhdGlvbiA9IGxvbGNhdGlvbjtcblVybC50cmltTGVmdCA9IHRyaW1MZWZ0O1xuVXJsLnFzID0gcXM7XG5cbm1vZHVsZS5leHBvcnRzID0gVXJsO1xuIiwgInZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZyxcbiAgICByZUhhc1JlZ0V4cENoYXIgPSBSZWdFeHAocmVSZWdFeHBDaGFyLnNvdXJjZSk7XG5cbi8qKlxuICogRXNjYXBlcyB0aGUgYFJlZ0V4cGAgc3BlY2lhbCBjaGFyYWN0ZXJzIFwiXlwiLCBcIiRcIiwgXCJcXFwiLCBcIi5cIiwgXCIqXCIsIFwiK1wiLFxuICogXCI/XCIsIFwiKFwiLCBcIilcIiwgXCJbXCIsIFwiXVwiLCBcIntcIiwgXCJ9XCIsIGFuZCBcInxcIiBpbiBgc3RyaW5nYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5lc2NhcGVSZWdFeHAoJ1tsb2Rhc2hdKGh0dHBzOi8vbG9kYXNoLmNvbS8pJyk7XG4gKiAvLyA9PiAnXFxbbG9kYXNoXFxdXFwoaHR0cHM6Ly9sb2Rhc2hcXC5jb20vXFwpJ1xuICovXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiAoc3RyaW5nICYmIHJlSGFzUmVnRXhwQ2hhci50ZXN0KHN0cmluZykpXG4gICAgPyBzdHJpbmcucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAgIDogc3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVzY2FwZVJlZ0V4cDtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSIsICIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgdGhpcyB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXJlZmxlY3QgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCA9PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmFwcGx5IHx8IChOQVRJVkVfQklORCA/IGNhbGwuYmluZChhcHBseSkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbikge1xuICAvLyBOYXNob3JuIGJ1ZzpcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEyOFxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTMwXG4gIGlmIChjbGFzc29mUmF3KGZuKSA9PT0gJ0Z1bmN0aW9uJykgcmV0dXJuIHVuY3VycnlUaGlzKGZuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIElTX0hUTUxEREEgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZDtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFsbDogZG9jdW1lbnRBbGwsXG4gIElTX0hUTUxEREE6IElTX0hUTUxEREFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRkb2N1bWVudEFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1hbGwnKTtcblxudmFyIGRvY3VtZW50QWxsID0gJGRvY3VtZW50QWxsLmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG5tb2R1bGUuZXhwb3J0cyA9ICRkb2N1bWVudEFsbC5JU19IVE1MRERBID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyICRkb2N1bWVudEFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1hbGwnKTtcblxudmFyIGRvY3VtZW50QWxsID0gJGRvY3VtZW50QWxsLmFsbDtcblxubW9kdWxlLmV4cG9ydHMgPSAkZG9jdW1lbnRBbGwuSVNfSFRNTEREQSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KSB8fCBpdCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHZhcmlhYmxlKSA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBuYXZpZ2F0b3IgIT0gJ3VuZGVmaW5lZCcgJiYgU3RyaW5nKG5hdmlnYXRvci51c2VyQWdlbnQpIHx8ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbC5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWwsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zMy4yJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjMgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zMy4yL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBiaW5kID0gdW5jdXJyeVRoaXModW5jdXJyeVRoaXMuYmluZCk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQpIHtcbiAgYUNhbGxhYmxlKGZuKTtcbiAgcmV0dXJuIHRoYXQgPT09IHVuZGVmaW5lZCA/IGZuIDogTkFUSVZFX0JJTkQgPyBiaW5kKGZuLCB0aGF0KSA6IGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIHdyYXBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChOYXRpdmVDb25zdHJ1Y3Rvcikge1xuICB2YXIgV3JhcHBlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcmFwcGVyKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIGFwcGx5KE5hdGl2ZUNvbnN0cnVjdG9yLCB0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICBXcmFwcGVyLnByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIFdyYXBwZXI7XG59O1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWwgOiBTVEFUSUMgPyBnbG9iYWxbVEFSR0VUXSA6IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBUQVJHRVQsIHt9KVtUQVJHRVRdO1xuICB2YXIgdGFyZ2V0UHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcblxuICB2YXIgRk9SQ0VELCBVU0VfTkFUSVZFLCBWSVJUVUFMX1BST1RPVFlQRTtcbiAgdmFyIGtleSwgc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5LCBuYXRpdmVQcm9wZXJ0eSwgcmVzdWx0UHJvcGVydHksIGRlc2NyaXB0b3I7XG5cbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBVU0VfTkFUSVZFID0gIUZPUkNFRCAmJiBuYXRpdmVTb3VyY2UgJiYgaGFzT3duKG5hdGl2ZVNvdXJjZSwga2V5KTtcblxuICAgIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSkgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmF0aXZlU291cmNlLCBrZXkpO1xuICAgICAgbmF0aXZlUHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIG5hdGl2ZVByb3BlcnR5ID0gbmF0aXZlU291cmNlW2tleV07XG5cbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIGltcGxlbWVudGF0aW9uXG4gICAgc291cmNlUHJvcGVydHkgPSAoVVNFX05BVElWRSAmJiBuYXRpdmVQcm9wZXJ0eSkgPyBuYXRpdmVQcm9wZXJ0eSA6IHNvdXJjZVtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUgJiYgdHlwZW9mIHRhcmdldFByb3BlcnR5ID09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIG1ldGhvZHMgdG8gZ2xvYmFsIGZvciBjYWxsaW5nIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBpZiAob3B0aW9ucy5iaW5kICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gYmluZChzb3VyY2VQcm9wZXJ0eSwgZ2xvYmFsKTtcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlcyBpbiB0aGlzIHZlcnNpb25cbiAgICBlbHNlIGlmIChvcHRpb25zLndyYXAgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSB3cmFwQ29uc3RydWN0b3Ioc291cmNlUHJvcGVydHkpO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIGVsc2UgaWYgKFBST1RPICYmIGlzQ2FsbGFibGUoc291cmNlUHJvcGVydHkpKSByZXN1bHRQcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCByZXN1bHRQcm9wZXJ0eSk7XG5cbiAgICBpZiAoUFJPVE8pIHtcbiAgICAgIFZJUlRVQUxfUFJPVE9UWVBFID0gVEFSR0VUICsgJ1Byb3RvdHlwZSc7XG4gICAgICBpZiAoIWhhc093bihwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFLCB7fSk7XG4gICAgICB9XG4gICAgICAvLyBleHBvcnQgdmlydHVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGhbVklSVFVBTF9QUk9UT1RZUEVdLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIC8vIGV4cG9ydCByZWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBpZiAob3B0aW9ucy5yZWFsICYmIHRhcmdldFByb3RvdHlwZSAmJiAoRk9SQ0VEIHx8ICF0YXJnZXRQcm90b3R5cGVba2V5XSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldFByb3RvdHlwZSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSBkZWZpbmVQcm9wZXJ0eSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGRlZmluZVByb3BlcnR5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkuc2hhbSkgZGVmaW5lUHJvcGVydHkuc2hhbSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgcHJvcGVydHlLZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChwcm9wZXJ0eUtleSBpbiBvYmplY3QpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBwcm9wZXJ0eUtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W3Byb3BlcnR5S2V5XSA9IHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIGVtcHR5ID0gW107XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAudGVzdChub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgZW1wdHksIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBhIHBhcnQgb2YgYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmIChpc0NvbnN0cnVjdG9yKEMpICYmIChDID09PSAkQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKGFycmF5U3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsQXJyYXkpKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbi8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUID0gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBbXTtcbiAgYXJyYXlbSVNfQ09OQ0FUX1NQUkVBREFCTEVdID0gZmFsc2U7XG4gIHJldHVybiBhcnJheS5jb25jYXQoKVswXSAhPT0gYXJyYXk7XG59KTtcblxudmFyIGlzQ29uY2F0U3ByZWFkYWJsZSA9IGZ1bmN0aW9uIChPKSB7XG4gIGlmICghaXNPYmplY3QoTykpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNwcmVhZGFibGUgPSBPW0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgcmV0dXJuIHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoTyk7XG59O1xuXG52YXIgRk9SQ0VEID0gIUlTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgfHwgIWFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2NvbmNhdCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvbmNhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5jb25jYXRcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBpc0NvbmNhdFNwcmVhZGFibGUgYW5kIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGNvbmNhdDogZnVuY3Rpb24gY29uY2F0KGFyZykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgdmFyIG4gPSAwO1xuICAgIHZhciBpLCBrLCBsZW5ndGgsIGxlbiwgRTtcbiAgICBmb3IgKGkgPSAtMSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBFID0gaSA9PT0gLTEgPyBPIDogYXJndW1lbnRzW2ldO1xuICAgICAgaWYgKGlzQ29uY2F0U3ByZWFkYWJsZShFKSkge1xuICAgICAgICBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShFKTtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKG4gKyBsZW4pO1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbGVuOyBrKyssIG4rKykgaWYgKGsgaW4gRSkgY3JlYXRlUHJvcGVydHkoQSwgbiwgRVtrXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIDEpO1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShBLCBuKyssIEUpO1xuICAgICAgfVxuICAgIH1cbiAgICBBLmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1rZXlzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgJiYgIVY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBwcm9wc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICB2YXIgcmVzdWx0ID0gJEFycmF5KG1heChmaW4gLSBrLCAwKSk7XG4gIHZhciBuID0gMDtcbiAgZm9yICg7IGsgPCBmaW47IGsrKywgbisrKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICByZXN1bHQubGVuZ3RoID0gbjtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZSAqL1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUnKTtcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGFycmF5U2xpY2Uod2luZG93TmFtZXMpO1xuICB9XG59O1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgY2xhc3NvZihpdCkgPT09ICdXaW5kb3cnXG4gICAgPyBnZXRXaW5kb3dOYW1lcyhpdClcbiAgICA6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVudW1lcmFibGUpIHRhcmdldFtrZXldID0gdmFsdWU7XG4gIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCB2YWx1ZSk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcikge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbmV4cG9ydHMuZiA9IHdlbGxLbm93blN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVEFHLCBTVEFUSUMsIFNFVF9NRVRIT0QpIHtcbiAgaWYgKGl0KSB7XG4gICAgdmFyIHRhcmdldCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gICAgfVxuICAgIGlmIChTRVRfTUVUSE9EICYmICFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsICd0b1N0cmluZycsIHRvU3RyaW5nKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShzZWxmKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sICYmICRTeW1ib2xbUFJPVE9UWVBFXTtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufTtcblxudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT09IDc7XG59KSA/IGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKFN5bWJvbFByb3RvdHlwZSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB7fSkpO1xuICAgICAgT1tISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzT3duKE8sIEhJRERFTikgJiYgT1tISURERU5dW2tleV0pIE9bSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBBdHRyaWJ1dGVzID0gbmF0aXZlT2JqZWN0Q3JlYXRlKEF0dHJpYnV0ZXMsIHsgZW51bWVyYWJsZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjcmlwdG9yKE8sIGtleSwgQXR0cmlidXRlcyk7XG4gIH0gcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIGtleSwgQXR0cmlidXRlcyk7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wZXJ0aWVzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMocHJvcGVydGllcykuY29uY2F0KCRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJvcGVydGllcykpO1xuICAkZm9yRWFjaChrZXlzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKCRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgcHJvcGVydGllcywga2V5KSkgJGRlZmluZVByb3BlcnR5KE8sIGtleSwgcHJvcGVydGllc1trZXldKTtcbiAgfSk7XG4gIHJldHVybiBPO1xufTtcblxudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gbmF0aXZlT2JqZWN0Q3JlYXRlKE8pIDogJGRlZmluZVByb3BlcnRpZXMobmF0aXZlT2JqZWN0Q3JlYXRlKE8pLCBQcm9wZXJ0aWVzKTtcbn07XG5cbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBQID0gdG9Qcm9wZXJ0eUtleShWKTtcbiAgdmFyIGVudW1lcmFibGUgPSBjYWxsKG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlLCB0aGlzLCBQKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywgUCkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZW51bWVyYWJsZSB8fCAhaGFzT3duKHRoaXMsIFApIHx8ICFoYXNPd24oQWxsU3ltYm9scywgUCkgfHwgaGFzT3duKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW1BdXG4gICAgPyBlbnVtZXJhYmxlIDogdHJ1ZTtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgdmFyIGl0ID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBkZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xuICBpZiAoZGVzY3JpcHRvciAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhKGhhc093bihpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSB7XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIWhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSkgcHVzaChyZXN1bHQsIGtleSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiAoTykge1xuICB2YXIgSVNfT0JKRUNUX1BST1RPVFlQRSA9IE8gPT09IE9iamVjdFByb3RvdHlwZTtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyhJU19PQkpFQ1RfUFJPVE9UWVBFID8gT2JqZWN0UHJvdG90eXBlU3ltYm9scyA6IHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgKCFJU19PQkpFQ1RfUFJPVE9UWVBFIHx8IGhhc093bihPYmplY3RQcm90b3R5cGUsIGtleSkpKSB7XG4gICAgICBwdXNoKHJlc3VsdCwgQWxsU3ltYm9sc1trZXldKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gYFN5bWJvbGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLWNvbnN0cnVjdG9yXG5pZiAoIU5BVElWRV9TWU1CT0wpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAoaXNQcm90b3R5cGVPZihTeW1ib2xQcm90b3R5cGUsIHRoaXMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSAhYXJndW1lbnRzLmxlbmd0aCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICR0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciB0YWcgPSB1aWQoZGVzY3JpcHRpb24pO1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHZhciAkdGhpcyA9IHRoaXMgPT09IHVuZGVmaW5lZCA/IGdsb2JhbCA6IHRoaXM7XG4gICAgICBpZiAoJHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSkgY2FsbChzZXR0ZXIsIE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXNPd24oJHRoaXMsIEhJRERFTikgJiYgaGFzT3duKCR0aGlzW0hJRERFTl0sIHRhZykpICR0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0U3ltYm9sRGVzY3JpcHRvcigkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgICBmYWxsYmFja0RlZmluZVByb3BlcnR5KCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIFVTRV9TRVRURVIpIHNldFN5bWJvbERlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6IHNldHRlciB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcsIGRlc2NyaXB0aW9uKTtcbiAgfTtcblxuICBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sW1BST1RPVFlQRV07XG5cbiAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnRhZztcbiAgfSk7XG5cbiAgZGVmaW5lQnVpbHRJbigkU3ltYm9sLCAnd2l0aG91dFNldHRlcicsIGZ1bmN0aW9uIChkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiB3cmFwKHVpZChkZXNjcmlwdGlvbiksIGRlc2NyaXB0aW9uKTtcbiAgfSk7XG5cbiAgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgZGVmaW5lUHJvcGVydGllc01vZHVsZS5mID0gJGRlZmluZVByb3BlcnRpZXM7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2VsbEtub3duU3ltYm9sKG5hbWUpLCBuYW1lKTtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1TeW1ib2wtZGVzY3JpcHRpb25cbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoU3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIUlTX1BVUkUpIHtcbiAgICAgIGRlZmluZUJ1aWx0SW4oT2JqZWN0UHJvdG90eXBlLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIU5BVElWRV9TWU1CT0wgfSwge1xuICBTeW1ib2w6ICRTeW1ib2xcbn0pO1xuXG4kZm9yRWFjaChvYmplY3RLZXlzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlZmluZVdlbGxLbm93blN5bWJvbChuYW1lKTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiBTWU1CT0wsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gZmFsc2U7IH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvclxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCBTWU1CT0wpO1xuXG5oaWRkZW5LZXlzW0hJRERFTl0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHNhZmUgKi9cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTCAmJiAhIVN5bWJvbFsnZm9yJ10gJiYgISFTeW1ib2wua2V5Rm9yO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5mb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcoa2V5KTtcbiAgICBpZiAoaGFzT3duKFN0cmluZ1RvU3ltYm9sUmVnaXN0cnksIHN0cmluZykpIHJldHVybiBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ107XG4gICAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKHN0cmluZyk7XG4gICAgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddID0gc3ltYm9sO1xuICAgIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltYm9sXSA9IHN0cmluZztcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wua2V5Rm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmtleWZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IG5ldyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoc3ltKSArICcgaXMgbm90IGEgc3ltYm9sJyk7XG4gICAgaWYgKGhhc093bihTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5LCBzeW0pKSByZXR1cm4gU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1dO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVwbGFjZXIpIHtcbiAgaWYgKGlzQ2FsbGFibGUocmVwbGFjZXIpKSByZXR1cm4gcmVwbGFjZXI7XG4gIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJldHVybjtcbiAgdmFyIHJhd0xlbmd0aCA9IHJlcGxhY2VyLmxlbmd0aDtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdMZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGVtZW50ID0gcmVwbGFjZXJbaV07XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKSBwdXNoKGtleXMsIGVsZW1lbnQpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdudW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdOdW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdTdHJpbmcnKSBwdXNoKGtleXMsIHRvU3RyaW5nKGVsZW1lbnQpKTtcbiAgfVxuICB2YXIga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgcm9vdCA9IHRydWU7XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChyb290KSB7XG4gICAgICByb290ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHRoaXMpKSByZXR1cm4gdmFsdWU7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzTGVuZ3RoOyBqKyspIGlmIChrZXlzW2pdID09PSBrZXkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBnZXRSZXBsYWNlckZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCdzdHJpbmdpZnkgZGV0ZWN0aW9uJyk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPT0gJ1tudWxsXSdcbiAgICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9PSAne30nXG4gICAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gZ2V0UmVwbGFjZXJGdW5jdGlvbihyZXBsYWNlcik7XG4gIGlmICghaXNDYWxsYWJsZSgkcmVwbGFjZXIpICYmIChpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICBhcmdzWzFdID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgV2ViS2l0KSBjb3VsZCBwYXNzIG51bWJlcnMgYXMga2V5c1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsICRTdHJpbmcoa2V5KSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHJldHVybiBhcHBseSgkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbn07XG5cbnZhciBmaXhJbGxGb3JtZWQgPSBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gIHZhciBwcmV2ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0ICsgMSk7XG4gIGlmICgoZXhlYyhsb3csIG1hdGNoKSAmJiAhZXhlYyhoaSwgbmV4dCkpIHx8IChleGVjKGhpLCBtYXRjaCkgJiYgIWV4ZWMobG93LCBwcmV2KSkpIHtcbiAgICByZXR1cm4gJ1xcXFx1JyArIG51bWJlclRvU3RyaW5nKGNoYXJDb2RlQXQobWF0Y2gsIDApLCAxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGFyaXR5OiAzLCBmb3JjZWQ6IFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiB8fCBJTExfRk9STUVEX1VOSUNPREUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYXBwbHkoV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID8gc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggOiAkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbiAgICAgIHJldHVybiBJTExfRk9STUVEX1VOSUNPREUgJiYgdHlwZW9mIHJlc3VsdCA9PSAnc3RyaW5nJyA/IHJlcGxhY2UocmVzdWx0LCB0ZXN0ZXIsIGZpeElsbEZvcm1lZCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZPUkNFRCA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eXN5bWJvbHNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgdmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5U3ltYm9scyA/ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHModG9PYmplY3QoaXQpKSA6IFtdO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jSXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5hc3luY2l0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jSXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmhhc0luc3RhbmNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaGFzaW5zdGFuY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaGFzSW5zdGFuY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmlzY29uY2F0c3ByZWFkYWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoQWxsYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hhbGxcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2hBbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnJlcGxhY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5yZXBsYWNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNlYXJjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNlYXJjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzZWFyY2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwZWNpZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGVjaWVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwbGl0YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BsaXRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BsaXQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wudG9QcmltaXRpdmVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3ByaW1pdGl2ZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gYFN5bWJvbC50b1N0cmluZ1RhZ2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvc3RyaW5ndGFnXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdldEJ1aWx0SW4oJ1N5bWJvbCcpLCAnU3ltYm9sJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC51bnNjb3BhYmxlc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnVuc2NvcGFibGVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBKU09OW0BAdG9TdHJpbmdUYWddIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24tQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc3BlY2llcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc3BsaXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudW5zY29wYWJsZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hdGgudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LnRvLXN0cmluZy10YWcnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAodHlwZW9mIGFyZ3VtZW50ID09ICdvYmplY3QnIHx8IGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgJFN0cmluZyhhcmd1bWVudCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgQ3JlYXRlSXRlclJlc3VsdE9iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWl0ZXJyZXN1bHRvYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBkb25lKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogZG9uZSB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICB9XG4gIHN3aXRjaCAoc3RhdGUua2luZCkge1xuICAgIGNhc2UgJ2tleXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChpbmRleCwgZmFsc2UpO1xuICAgIGNhc2UgJ3ZhbHVlcyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHRhcmdldFtpbmRleF0sIGZhbHNlKTtcbiAgfSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbaW5kZXgsIHRhcmdldFtpbmRleF1dLCBmYWxzZSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1bWVudHNvYmplY3RcbnZhciB2YWx1ZXMgPSBJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcblxuLy8gVjggfiBDaHJvbWUgNDUtIGJ1Z1xuaWYgKCFJU19QVVJFICYmIERFU0NSSVBUT1JTICYmIHZhbHVlcy5uYW1lICE9PSAndmFsdWVzJykgdHJ5IHtcbiAgZGVmaW5lUHJvcGVydHkodmFsdWVzLCAnbmFtZScsIHsgdmFsdWU6ICd2YWx1ZXMnIH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGl0ZXJhYmxlIERPTSBjb2xsZWN0aW9uc1xuLy8gZmxhZyAtIGBpdGVyYWJsZWAgaW50ZXJmYWNlIC0gJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZm9yRWFjaCcgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENTU1J1bGVMaXN0OiAwLFxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiAwLFxuICBDU1NWYWx1ZUxpc3Q6IDAsXG4gIENsaWVudFJlY3RMaXN0OiAwLFxuICBET01SZWN0TGlzdDogMCxcbiAgRE9NU3RyaW5nTGlzdDogMCxcbiAgRE9NVG9rZW5MaXN0OiAxLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogMCxcbiAgRmlsZUxpc3Q6IDAsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiAwLFxuICBIVE1MQ29sbGVjdGlvbjogMCxcbiAgSFRNTEZvcm1FbGVtZW50OiAwLFxuICBIVE1MU2VsZWN0RWxlbWVudDogMCxcbiAgTWVkaWFMaXN0OiAwLFxuICBNaW1lVHlwZUFycmF5OiAwLFxuICBOYW1lZE5vZGVNYXA6IDAsXG4gIE5vZGVMaXN0OiAxLFxuICBQYWludFJlcXVlc3RMaXN0OiAwLFxuICBQbHVnaW46IDAsXG4gIFBsdWdpbkFycmF5OiAwLFxuICBTVkdMZW5ndGhMaXN0OiAwLFxuICBTVkdOdW1iZXJMaXN0OiAwLFxuICBTVkdQYXRoU2VnTGlzdDogMCxcbiAgU1ZHUG9pbnRMaXN0OiAwLFxuICBTVkdTdHJpbmdMaXN0OiAwLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiAwLFxuICBTb3VyY2VCdWZmZXJMaXN0OiAwLFxuICBTdHlsZVNoZWV0TGlzdDogMCxcbiAgVGV4dFRyYWNrQ3VlTGlzdDogMCxcbiAgVGV4dFRyYWNrTGlzdDogMCxcbiAgVG91Y2hMaXN0OiAwXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdO1xuICB2YXIgQ29sbGVjdGlvblByb3RvdHlwZSA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlICYmIGNsYXNzb2YoQ29sbGVjdGlvblByb3RvdHlwZSkgIT09IFRPX1NUUklOR19UQUcpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgfVxuICBJdGVyYXRvcnNbQ09MTEVDVElPTl9OQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgTUVUQURBVEEgPSB3ZWxsS25vd25TeW1ib2woJ21ldGFkYXRhJyk7XG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8vIEZ1bmN0aW9uLnByb3RvdHlwZVtAQG1ldGFkYXRhXVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5pZiAoRnVuY3Rpb25Qcm90b3R5cGVbTUVUQURBVEFdID09PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE1FVEFEQVRBLCB7XG4gICAgdmFsdWU6IG51bGxcbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hc3luYy1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jRGlzcG9zZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuZGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnZGlzcG9zZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWV0YWRhdGFgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3JzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21ldGFkYXRhJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wnKTtcblxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5hc3luYy1kaXNwb3NlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuZGlzcG9zZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG52YXIga2V5Rm9yID0gU3ltYm9sLmtleUZvcjtcbnZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2wgfHwgZnVuY3Rpb24gaXNSZWdpc3RlcmVkU3ltYm9sKHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGtleUZvcih0aGlzU3ltYm9sVmFsdWUodmFsdWUpKSAhPT0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1JlZ2lzdGVyZWRTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXJlZ2lzdGVyZWQnKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUgfSwge1xuICBpc1JlZ2lzdGVyZWRTeW1ib2w6IGlzUmVnaXN0ZXJlZFN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG52YXIgJGlzV2VsbEtub3duU3ltYm9sID0gU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRCdWlsdEluKCdPYmplY3QnLCAnZ2V0T3duUHJvcGVydHlOYW1lcycpO1xudmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuZm9yICh2YXIgaSA9IDAsIHN5bWJvbEtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKFN5bWJvbCksIHN5bWJvbEtleXNMZW5ndGggPSBzeW1ib2xLZXlzLmxlbmd0aDsgaSA8IHN5bWJvbEtleXNMZW5ndGg7IGkrKykge1xuICAvLyBzb21lIG9sZCBlbmdpbmVzIHRocm93cyBvbiBhY2Nlc3MgdG8gc29tZSBrZXlzIGxpa2UgYGFyZ3VtZW50c2Agb3IgYGNhbGxlcmBcbiAgdHJ5IHtcbiAgICB2YXIgc3ltYm9sS2V5ID0gc3ltYm9sS2V5c1tpXTtcbiAgICBpZiAoaXNTeW1ib2woU3ltYm9sW3N5bWJvbEtleV0pKSB3ZWxsS25vd25TeW1ib2woc3ltYm9sS2V5KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufVxuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzV2VsbEtub3duU3ltYm9sKHZhbHVlKSB7XG4gIGlmICgkaXNXZWxsS25vd25TeW1ib2wgJiYgJGlzV2VsbEtub3duU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgdmFyIHN5bWJvbCA9IHRoaXNTeW1ib2xWYWx1ZSh2YWx1ZSk7XG4gICAgZm9yICh2YXIgaiA9IDAsIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDsgaiA8IGtleXNMZW5ndGg7IGorKykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcSAtLSBwb2x5ZmlsbGVkIHN5bWJvbHMgY2FzZVxuICAgICAgaWYgKFdlbGxLbm93blN5bWJvbHNTdG9yZVtrZXlzW2pdXSA9PSBzeW1ib2wpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duJyk7XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBpc1dlbGxLbm93blN5bWJvbDogaXNXZWxsS25vd25TeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hlcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2hlcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wub2JzZXJ2YWJsZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9ic2VydmFibGVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnb2JzZXJ2YWJsZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUmVnaXN0ZXJlZFN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZCcpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZGAgbWV0aG9kXG4vLyBvYnNvbGV0ZSB2ZXJzaW9uIG9mIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBuYW1lOiAnaXNSZWdpc3RlcmVkU3ltYm9sJyB9LCB7XG4gIGlzUmVnaXN0ZXJlZDogaXNSZWdpc3RlcmVkU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1dlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtd2VsbC1rbm93bicpO1xuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duYCBtZXRob2Rcbi8vIG9ic29sZXRlIHZlcnNpb24gb2YgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBuYW1lOiAnaXNXZWxsS25vd25TeW1ib2wnLCBmb3JjZWQ6IHRydWUgfSwge1xuICBpc1dlbGxLbm93bjogaXNXZWxsS25vd25TeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhS2V5YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21ldGFkYXRhS2V5Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucGF0dGVybk1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdwYXR0ZXJuTWF0Y2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlQWxsJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm9ic2VydmFibGUnKTtcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucmVwbGFjZS1hbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBjaGFyQXQoUywgcG9zaXRpb24pXG4gICAgICAgICAgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBzdHJpbmdTbGljZShTLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAyKVxuICAgICAgICAgIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChwb2ludCwgZmFsc2UpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbC9pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sL2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sL2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9zeW1ib2wvaXRlcmF0b3InKTtcbiIsICJpbXBvcnQgX1N5bWJvbCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiO1xuaW1wb3J0IF9TeW1ib2wkaXRlcmF0b3IgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgX1N5bWJvbCRpdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gX1N5bWJvbCAmJiBvICE9PSBfU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlJyk7XG52YXIgV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKCd0b1ByaW1pdGl2ZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wvdG8tcHJpbWl0aXZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL3N5bWJvbC90by1wcmltaXRpdmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbC90by1wcmltaXRpdmUnKTtcbiIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBfU3ltYm9sJHRvUHJpbWl0aXZlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL3RvLXByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W19TeW1ib2wkdG9QcmltaXRpdmVdO1xuICBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKF90eXBlb2YocmVzKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlcztcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7XG4gIHJldHVybiBfdHlwZW9mKGtleSkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBTdHJpbmcoa2V5KTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIF9PYmplY3QkZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChDLCBhcmdzTGVuZ3RoLCBhcmdzKSB7XG4gIGlmICghaGFzT3duKGZhY3RvcmllcywgYXJnc0xlbmd0aCkpIHtcbiAgICB2YXIgbGlzdCA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IGFyZ3NMZW5ndGg7IGkrKykgbGlzdFtpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIGZhY3Rvcmllc1thcmdzTGVuZ3RoXSA9ICRGdW5jdGlvbignQyxhJywgJ3JldHVybiBuZXcgQygnICsgam9pbihsaXN0LCAnLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2FyZ3NMZW5ndGhdKEMsIGFyZ3MpO1xufTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBkZXRlY3Rpb25cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyAkRnVuY3Rpb24uYmluZCA6IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIEYgPSBhQ2FsbGFibGUodGhpcyk7XG4gIHZhciBQcm90b3R5cGUgPSBGLnByb3RvdHlwZTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJvdW5kKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IGNvbmNhdChwYXJ0QXJncywgYXJyYXlTbGljZShhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kRnVuY3Rpb24gPyBjb25zdHJ1Y3QoRiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogRi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KFByb3RvdHlwZSkpIGJvdW5kRnVuY3Rpb24ucHJvdG90eXBlID0gUHJvdG90eXBlO1xuICByZXR1cm4gYm91bmRGdW5jdGlvbjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxuJCh7IHRhcmdldDogJ0Z1bmN0aW9uJywgcHJvdG86IHRydWUsIGZvcmNlZDogRnVuY3Rpb24uYmluZCAhPT0gYmluZCB9LCB7XG4gIGJpbmQ6IGJpbmRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SLCBNRVRIT0QpIHtcbiAgdmFyIE5hbWVzcGFjZSA9IHBhdGhbQ09OU1RSVUNUT1IgKyAnUHJvdG90eXBlJ107XG4gIHZhciBwdXJlTWV0aG9kID0gTmFtZXNwYWNlICYmIE5hbWVzcGFjZVtNRVRIT0RdO1xuICBpZiAocHVyZU1ldGhvZCkgcmV0dXJuIHB1cmVNZXRob2Q7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBOYXRpdmVQcm90b3R5cGUgJiYgTmF0aXZlUHJvdG90eXBlW01FVEhPRF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdGdW5jdGlvbicsICdiaW5kJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9uL3ZpcnR1YWwvYmluZCcpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5iaW5kO1xuICByZXR1cm4gaXQgPT09IEZ1bmN0aW9uUHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEZ1bmN0aW9uUHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBGdW5jdGlvblByb3RvdHlwZS5iaW5kKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9iaW5kXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyByZWR1Y2UsIHJlZHVjZVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfUklHSFQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhcmd1bWVudHNMZW5ndGgsIG1lbW8pIHtcbiAgICBhQ2FsbGFibGUoY2FsbGJhY2tmbik7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IElTX1JJR0hUID8gbGVuZ3RoIC0gMSA6IDA7XG4gICAgdmFyIGkgPSBJU19SSUdIVCA/IC0xIDogMTtcbiAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDwgMikgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgICAgaW5kZXggKz0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgaWYgKElTX1JJR0hUID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoO0lTX1JJR0hUID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiAgbGVmdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZXJpZ2h0XG4gIHJpZ2h0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5sZWZ0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIENIUk9NRV9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG4vLyBDaHJvbWUgODAtODIgaGFzIGEgY3JpdGljYWwgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDQ5OTgyXG52YXIgQ0hST01FX0JVRyA9ICFJU19OT0RFICYmIENIUk9NRV9WRVJTSU9OID4gNzkgJiYgQ0hST01FX1ZFUlNJT04gPCA4MztcbnZhciBGT1JDRUQgPSBDSFJPTUVfQlVHIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdyZWR1Y2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgbGVuZ3RoLCBsZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAncmVkdWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmVkdWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJlZHVjZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmVkdWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JlZHVjZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JlZHVjZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbHRlcicpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmaWx0ZXInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maWx0ZXInKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmlsdGVyO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvZmlsdGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLm1hcDtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnbWFwJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkubWFwJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ21hcCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL21hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5tYXA7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLm1hcCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9tYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9tYXBcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG5cbi8vIGBGbGF0dGVuSW50b0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gZnVuY3Rpb24gKHRhcmdldCwgb3JpZ2luYWwsIHNvdXJjZSwgc291cmNlTGVuLCBzdGFydCwgZGVwdGgsIG1hcHBlciwgdGhpc0FyZykge1xuICB2YXIgdGFyZ2V0SW5kZXggPSBzdGFydDtcbiAgdmFyIHNvdXJjZUluZGV4ID0gMDtcbiAgdmFyIG1hcEZuID0gbWFwcGVyID8gYmluZChtYXBwZXIsIHRoaXNBcmcpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBlbGVtZW50TGVuO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBpZiAoZGVwdGggPiAwICYmIGlzQXJyYXkoZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudExlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKGVsZW1lbnQpO1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgZWxlbWVudExlbiwgdGFyZ2V0SW5kZXgsIGRlcHRoIC0gMSkgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKHRhcmdldEluZGV4ICsgMSk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbkludG9BcnJheTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mbGF0TWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZsYXRtYXBcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBBO1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIEEubGVuZ3RoID0gZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mbGF0LW1hcCcpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS51bnNjb3BhYmxlcy5mbGF0LW1hcCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmbGF0TWFwJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmxhdC1tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmxhdE1hcDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmxhdE1hcCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9mbGF0LW1hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZsYXQtbWFwXCIpOyIsICJpbXBvcnQgeyBEYXRhSW50ZXJmYWNlLCBFdmVudENhbGxiYWNrcywgUGFydEl0ZW0gfSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuaW1wb3J0IHsgRGF0YVNldCB9IGZyb20gXCIuL2RhdGEtc2V0XCI7XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjb250cm9sIHRoZSBwaXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFQaXBlIHtcbiAgLyoqXG4gICAqIFRha2UgYWxsIGl0ZW1zIGZyb20gdGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcsIHRyYW5zZm9ybSB0aGVtIGFzXG4gICAqIGNvbmZpZ3VyZWQgYW5kIHVwZGF0ZSB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKi9cbiAgYWxsKCk6IHRoaXM7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9ic2VydmluZyB0aGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldywgdHJhbnNmb3JtaW5nIHRoZSBpdGVtc1xuICAgKiBhbmQgdXBkYXRpbmcgdGhlIHRhcmdldCBkYXRhIHNldC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUgc291cmNlIGRhdGEgc2V0IHdpbGwgYmUgaWdub3JlZC4gSWYgeW91IGZvclxuICAgKiBleGFtcGxlIHdhbnQgdG8gcHJvY2VzcyBhbGwgdGhlIGl0ZW1zIHRoYXQgYXJlIGFscmVhZHkgdGhlcmUgdXNlOlxuICAgKiBgcGlwZS5hbGwoKS5zdGFydCgpYC5cbiAgICovXG4gIHN0YXJ0KCk6IHRoaXM7XG5cbiAgLyoqXG4gICAqIFN0b3Agb2JzZXJ2aW5nIHRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LCB0cmFuc2Zvcm1pbmcgdGhlIGl0ZW1zXG4gICAqIGFuZCB1cGRhdGluZyB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKi9cbiAgc3RvcCgpOiB0aGlzO1xufVxuXG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwaXBlLlxuICovXG5leHBvcnQgdHlwZSBEYXRhUGlwZUZhY3RvcnkgPSBJbnN0YW5jZVR5cGU8dHlwZW9mIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24+O1xuXG4vKipcbiAqIENyZWF0ZSBuZXcgZGF0YSBwaXBlLlxuICpcbiAqIEBwYXJhbSBmcm9tIC0gVGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcuXG4gKiBAcmVtYXJrc1xuICogRXhhbXBsZSB1c2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGludGVyZmFjZSBBcHBJdGVtIHtcbiAqICAgd2hvYW1pOiBzdHJpbmc7XG4gKiAgIGFwcERhdGE6IHVua25vd247XG4gKiAgIHZpc0RhdGE6IFZpc0l0ZW07XG4gKiB9XG4gKiBpbnRlcmZhY2UgVmlzSXRlbSB7XG4gKiAgIGlkOiBudW1iZXI7XG4gKiAgIGxhYmVsOiBzdHJpbmc7XG4gKiAgIGNvbG9yOiBzdHJpbmc7XG4gKiAgIHg6IG51bWJlcjtcbiAqICAgeTogbnVtYmVyO1xuICogfVxuICpcbiAqIGNvbnN0IGRzMSA9IG5ldyBEYXRhU2V0PEFwcEl0ZW0sIFwid2hvYW1pXCI+KFtdLCB7IGZpZWxkSWQ6IFwid2hvYW1pXCIgfSk7XG4gKiBjb25zdCBkczIgPSBuZXcgRGF0YVNldDxWaXNJdGVtLCBcImlkXCI+KCk7XG4gKlxuICogY29uc3QgcGlwZSA9IGNyZWF0ZU5ld0RhdGFQaXBlRnJvbShkczEpXG4gKiAgIC5maWx0ZXIoKGl0ZW0pOiBib29sZWFuID0+IGl0ZW0uZW5hYmxlZCA9PT0gdHJ1ZSlcbiAqICAgLm1hcDxWaXNJdGVtLCBcImlkXCI+KChpdGVtKTogVmlzSXRlbSA9PiBpdGVtLnZpc0RhdGEpXG4gKiAgIC50byhkczIpO1xuICpcbiAqIHBpcGUuc3RhcnQoKTtcbiAqIGBgYFxuICogQHJldHVybnMgQSBmYWN0b3J5IHdob3NlIG1ldGhvZHMgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBwaXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTmV3RGF0YVBpcGVGcm9tPFxuICBTSSBleHRlbmRzIFBhcnRJdGVtPFNQPixcbiAgU1AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4oZnJvbTogRGF0YUludGVyZmFjZTxTSSwgU1A+KTogRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxTSSwgU1A+IHtcbiAgcmV0dXJuIG5ldyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uKGZyb20pO1xufVxuXG50eXBlIFRyYW5zZm9ybWVyPFQ+ID0gKGlucHV0OiBUW10pID0+IFRbXTtcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGlwZS4gVGhpcyBzaG91bGQgYmUgYWNjZXNzaWJsZSBvbmx5IHRocm91Z2hcbiAqIGBjcmVhdGVOZXdEYXRhUGlwZUZyb21gIGZyb20gdGhlIG91dHNpZGUuXG4gKlxuICogQHR5cGVQYXJhbSBTSSAtIFNvdXJjZSBpdGVtIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFNQIC0gU291cmNlIGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqL1xuY2xhc3MgU2ltcGxlRGF0YVBpcGU8XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyxcbiAgVEkgZXh0ZW5kcyBQYXJ0SXRlbTxUUD4sXG4gIFRQIGV4dGVuZHMgc3RyaW5nXG4+IGltcGxlbWVudHMgRGF0YVBpcGVcbntcbiAgLyoqXG4gICAqIEJvdW5kIGxpc3RlbmVycyBmb3IgdXNlIHdpdGggYERhdGFJbnRlcmZhY2VbJ29uJyB8ICdvZmYnXWAuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD4gPSB7XG4gICAgYWRkOiB0aGlzLl9hZGQuYmluZCh0aGlzKSxcbiAgICByZW1vdmU6IHRoaXMuX3JlbW92ZS5iaW5kKHRoaXMpLFxuICAgIHVwZGF0ZTogdGhpcy5fdXBkYXRlLmJpbmQodGhpcyksXG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBkYXRhIHBpcGUuXG4gICAqXG4gICAqIEBwYXJhbSBfc291cmNlIC0gVGhlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyB0aGF0IHdpbGwgYmUgb2JzZXJ2ZWQuXG4gICAqIEBwYXJhbSBfdHJhbnNmb3JtZXJzIC0gQW4gYXJyYXkgb2YgdHJhbnNmb3JtaW5nIGZ1bmN0aW9ucyB0byBiZSB1c2VkIHRvXG4gICAqIGZpbHRlciBvciB0cmFuc2Zvcm0gdGhlIGl0ZW1zIGluIHRoZSBwaXBlLlxuICAgKiBAcGFyYW0gX3RhcmdldCAtIFRoZSBkYXRhIHNldCBvciBkYXRhIHZpZXcgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NvdXJjZTogRGF0YUludGVyZmFjZTxTSSwgU1A+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zZm9ybWVyczogcmVhZG9ubHkgVHJhbnNmb3JtZXI8dW5rbm93bj5bXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YXJnZXQ6IERhdGFTZXQ8VEksIFRQPlxuICApIHt9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBhbGwoKTogdGhpcyB7XG4gICAgdGhpcy5fdGFyZ2V0LnVwZGF0ZSh0aGlzLl90cmFuc2Zvcm1JdGVtcyh0aGlzLl9zb3VyY2UuZ2V0KCkpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RhcnQoKTogdGhpcyB7XG4gICAgdGhpcy5fc291cmNlLm9uKFwiYWRkXCIsIHRoaXMuX2xpc3RlbmVycy5hZGQpO1xuICAgIHRoaXMuX3NvdXJjZS5vbihcInJlbW92ZVwiLCB0aGlzLl9saXN0ZW5lcnMucmVtb3ZlKTtcbiAgICB0aGlzLl9zb3VyY2Uub24oXCJ1cGRhdGVcIiwgdGhpcy5fbGlzdGVuZXJzLnVwZGF0ZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RvcCgpOiB0aGlzIHtcbiAgICB0aGlzLl9zb3VyY2Uub2ZmKFwiYWRkXCIsIHRoaXMuX2xpc3RlbmVycy5hZGQpO1xuICAgIHRoaXMuX3NvdXJjZS5vZmYoXCJyZW1vdmVcIiwgdGhpcy5fbGlzdGVuZXJzLnJlbW92ZSk7XG4gICAgdGhpcy5fc291cmNlLm9mZihcInVwZGF0ZVwiLCB0aGlzLl9saXN0ZW5lcnMudXBkYXRlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRoZSB0cmFuc2Zvcm1lcnMgdG8gdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbXMgLSBUaGUgaXRlbXMgdG8gYmUgdHJhbnNmb3JtZWQuXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2Zvcm1lZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX3RyYW5zZm9ybUl0ZW1zKGl0ZW1zOiB1bmtub3duW10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybWVycy5yZWR1Y2UoKGl0ZW1zLCB0cmFuc2Zvcm0pOiB1bmtub3duW10gPT4ge1xuICAgICAgcmV0dXJuIHRyYW5zZm9ybShpdGVtcyk7XG4gICAgfSwgaXRlbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiBhZGQgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgaWRzIG9mIHRoZSBhZGRlZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX2FkZChcbiAgICBfbmFtZTogUGFyYW1ldGVyczxFdmVudENhbGxiYWNrczxTSSwgU1A+W1wiYWRkXCJdPlswXSxcbiAgICBwYXlsb2FkOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJhZGRcIl0+WzFdXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXlsb2FkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90YXJnZXQuYWRkKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQocGF5bG9hZC5pdGVtcykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYW4gdXBkYXRlIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gX25hbWUgLSBJZ25vcmVkLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIGlkcyBvZiB0aGUgdXBkYXRlZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZShcbiAgICBfbmFtZTogUGFyYW1ldGVyczxFdmVudENhbGxiYWNrczxTSSwgU1A+W1widXBkYXRlXCJdPlswXSxcbiAgICBwYXlsb2FkOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJ1cGRhdGVcIl0+WzFdXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXlsb2FkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90YXJnZXQudXBkYXRlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQocGF5bG9hZC5pdGVtcykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSByZW1vdmUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgZGF0YSBvZiB0aGUgcmVtb3ZlZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX3JlbW92ZShcbiAgICBfbmFtZTogUGFyYW1ldGVyczxFdmVudENhbGxiYWNrczxTSSwgU1A+W1wicmVtb3ZlXCJdPlswXSxcbiAgICBwYXlsb2FkOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJyZW1vdmVcIl0+WzFdXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXlsb2FkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90YXJnZXQucmVtb3ZlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHBheWxvYWQub2xkRGF0YSkpO1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBpcGUgZmFjdG9yeS4gVGhpcyBzaG91bGQgYmUgYWNjZXNzaWJsZVxuICogb25seSB0aHJvdWdoIGBjcmVhdGVOZXdEYXRhUGlwZUZyb21gIGZyb20gdGhlIG91dHNpZGUuXG4gKlxuICogQHR5cGVQYXJhbSBUSSAtIFRhcmdldCBpdGVtIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gKi9cbmNsYXNzIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPiB7XG4gIC8qKlxuICAgKiBBcnJheSB0cmFuc2Zvcm1lcnMgdXNlZCB0byB0cmFuc2Zvcm0gaXRlbXMgd2l0aGluIHRoZSBwaXBlLiBUaGlzIGlzIHR5cGVkXG4gICAqIGFzIGFueSBmb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zZm9ybWVyczogVHJhbnNmb3JtZXI8YW55PltdID0gW107XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBkYXRhIHBpcGUgZmFjdG9yeS4gVGhpcyBpcyBhbiBpbnRlcm5hbCBjb25zdHJ1Y3RvciB0aGF0XG4gICAqIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIHRoaXMgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyBmb3IgdGhpcyBwaXBlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3NvdXJjZTogRGF0YUludGVyZmFjZTxTSSwgU1A+KSB7fVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIGZpbHRlcmluZyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiBnaXZlbiBpdGVtXG4gICAqIHNob3VsZCBiZSBwaXBlZCBhbmQgZmFsc2UgaWYgbm90LlxuICAgKiBAcmV0dXJucyBUaGlzIGZhY3RvcnkgZm9yIGZ1cnRoZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBmaWx0ZXIoXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gYm9vbGVhblxuICApOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFNJLCBTUD4ge1xuICAgIHRoaXMuX3RyYW5zZm9ybWVycy5wdXNoKChpbnB1dCk6IHVua25vd25bXSA9PiBpbnB1dC5maWx0ZXIoY2FsbGJhY2spKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgZWFjaCBzb3VyY2UgaXRlbSB0byBhIG5ldyB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIG1hcHBpbmcgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHNvdXJjZSBpdGVtIGFuZCByZXR1cm5zXG4gICAqIGNvcnJlc3BvbmRpbmcgbWFwcGVkIGl0ZW0uXG4gICAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICAgKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIG1hcDxUSSBleHRlbmRzIFBhcnRJdGVtPFRQPiwgVFAgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCI+KFxuICAgIGNhbGxiYWNrOiAoaXRlbTogU0kpID0+IFRJXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0Lm1hcChjYWxsYmFjaykpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxUSSwgVFA+O1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBlYWNoIHNvdXJjZSBpdGVtIHRvIHplcm8gb3IgbW9yZSBpdGVtcyBvZiBhIG5ldyB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIG1hcHBpbmcgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHNvdXJjZSBpdGVtIGFuZCByZXR1cm5zXG4gICAqIGFuIGFycmF5IG9mIGNvcnJlc3BvbmRpbmcgbWFwcGVkIGl0ZW1zLlxuICAgKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAgICogQHR5cGVQYXJhbSBUUCAtIFRhcmdldCBpdGVtIHR5cGUncyBpZCBwcm9wZXJ0eSBuYW1lLlxuICAgKiBAcmV0dXJucyBUaGlzIGZhY3RvcnkgZm9yIGZ1cnRoZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBmbGF0TWFwPFRJIGV4dGVuZHMgUGFydEl0ZW08VFA+LCBUUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIj4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gVElbXVxuICApOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD4ge1xuICAgIHRoaXMuX3RyYW5zZm9ybWVycy5wdXNoKChpbnB1dCk6IHVua25vd25bXSA9PiBpbnB1dC5mbGF0TWFwKGNhbGxiYWNrKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD47XG4gIH1cblxuICAvKipcbiAgICogQ29ubmVjdCB0aGlzIHBpcGUgdG8gZ2l2ZW4gZGF0YSBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgZGF0YSBzZXQgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGl0ZW1zIGZyb20gdGhpcyBwaXBlLlxuICAgKiBAcmV0dXJucyBUaGUgcGlwZSBjb25uZWN0ZWQgYmV0d2VlbiBnaXZlbiBkYXRhIHNldHMgYW5kIHBlcmZvcm1pbmdcbiAgICogY29uZmlndXJlZCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgcHJvY2Vzc2VkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIHRvKHRhcmdldDogRGF0YVNldDxTSSwgU1A+KTogRGF0YVBpcGUge1xuICAgIHJldHVybiBuZXcgU2ltcGxlRGF0YVBpcGUodGhpcy5fc291cmNlLCB0aGlzLl90cmFuc2Zvcm1lcnMsIHRhcmdldCk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGNhbGwoaW5uZXJSZXN1bHQsIGl0ZXJhdG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbm5lckVycm9yID0gdHJ1ZTtcbiAgICBpbm5lclJlc3VsdCA9IGVycm9yO1xuICB9XG4gIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgaWYgKGlubmVyRXJyb3IpIHRocm93IGlubmVyUmVzdWx0O1xuICBhbk9iamVjdChpbm5lclJlc3VsdCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgRU5UUklFUykge1xuICB0cnkge1xuICAgIHJldHVybiBFTlRSSUVTID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXQpKSByZXR1cm4gZ2V0TWV0aG9kKGl0LCBJVEVSQVRPUilcbiAgICB8fCBnZXRNZXRob2QoaXQsICdAQGl0ZXJhdG9yJylcbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGNhbGwoaXRlcmF0b3JNZXRob2QsIGFyZ3VtZW50KSk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgdmFyIElTX0NPTlNUUlVDVE9SID0gaXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0LCB2YWx1ZTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICEodGhpcyA9PT0gJEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6ICRBcnJheShsZW5ndGgpO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICB0cnkge1xuICAgIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIHdvcmthcm91bmQgb2Ygb2xkIFdlYktpdCArIGBldmFsYCBidWdcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG5cbnZhciBJTkNPUlJFQ1RfSVRFUkFUSU9OID0gIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYWJsZSk7XG59KTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBmcm9tOiBmcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mcm9tJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5mcm9tO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9mcm9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvZnJvbVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SXRlcmF0b3JNZXRob2Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL2VzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vc3RhYmxlL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL2FjdHVhbC9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vZnVsbC9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2RcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxuLy8gYEFycmF5LmlzQXJyYXlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5pc2FycmF5XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNBcnJheTogaXNBcnJheVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pcy1hcnJheScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguQXJyYXkuaXNBcnJheTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvYXJyYXkvaXMtYXJyYXknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9hcnJheS9pcy1hcnJheScpO1xuIiwgImltcG9ydCBfQXJyYXkkaXNBcnJheSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2lzLWFycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChfQXJyYXkkaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IGFuZCBTYWZhcmkgPD0gMTUuNCwgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTI2ODFcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkucHVzaCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9UT19MRU5HVEggfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnB1c2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucHVzaFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHB1c2g6IGZ1bmN0aW9uIHB1c2goaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGFyZ0NvdW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHtcbiAgICAgIE9bbGVuXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGxlbisrO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4pO1xuICAgIHJldHVybiBsZW47XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucHVzaCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdwdXNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcHVzaCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5wdXNoO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5wdXNoKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3B1c2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9wdXNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvaW5zdGFuY2UvcHVzaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvaW5zdGFuY2UvcHVzaCcpO1xuIiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiO1xuaW1wb3J0IF9wdXNoSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIF9TeW1ib2wgJiYgX2dldEl0ZXJhdG9yTWV0aG9kKHIpIHx8IHJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSB0KSB7XG4gICAgdmFyIGUsXG4gICAgICBuLFxuICAgICAgaSxcbiAgICAgIHUsXG4gICAgICBhID0gW10sXG4gICAgICBmID0gITAsXG4gICAgICBvID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHtcbiAgICAgICAgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuO1xuICAgICAgICBmID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoX3B1c2hJbnN0YW5jZVByb3BlcnR5KGEpLmNhbGwoYSwgZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBuYXRpdmVTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc2xpY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc2xpY2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9zbGljZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvYXJyYXkvZnJvbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2FycmF5L2Zyb20nKTtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuICByZXR1cm4gYXJyMjtcbn0iLCAiaW1wb3J0IF9zbGljZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZS5qc1wiO1xuaW1wb3J0IF9BcnJheSRmcm9tIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qc1wiO1xuaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICB2YXIgX2NvbnRleHQ7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSkuY2FsbChfY29udGV4dCwgOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gX0FycmF5JGZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsICJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59IiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiO1xuaW1wb3J0IF9BcnJheSRmcm9tIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgX1N5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBfZ2V0SXRlcmF0b3JNZXRob2QoaXRlcikgIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gX0FycmF5JGZyb20oaXRlcik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgImltcG9ydCBhcnJheVdpdGhvdXRIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlU3ByZWFkIGZyb20gXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn0iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2xcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2NvbmNhdCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2NvbmNhdCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5jb25jYXQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmNvbmNhdCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9jb25jYXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9jb25jYXRcIik7IiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc2xpY2VcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcblxuLy8gYFJlZmxlY3Qub3duS2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3Qub3dua2V5c1xuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgb3duS2V5czogb3duS2V5c1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0Lm93bi1rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5SZWZsZWN0Lm93bktleXM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3JlZmxlY3Qvb3duLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9yZWZsZWN0L293bi1rZXlzXCIpOyIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5XCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3Qva2V5c1wiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAhU1RSSUNUX01FVEhPRCA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG59IDogW10uZm9yRWFjaDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogW10uZm9yRWFjaCAhPT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2gnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnZm9yRWFjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5mb3JFYWNoO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5mb3JFYWNoKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IHVuY3VycnlUaGlzKFtdLnJldmVyc2UpO1xudmFyIHRlc3QgPSBbMSwgMl07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmV2ZXJzZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ24gLS0gZGlydHkgaGFja1xuICAgIGlmIChpc0FycmF5KHRoaXMpKSB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHJldHVybiBuYXRpdmVSZXZlcnNlKHRoaXMpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAncmV2ZXJzZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JldmVyc2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmV2ZXJzZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmV2ZXJzZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmV2ZXJzZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgaWYgKCFkZWxldGUgT1tQXSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBkZWxldGUgcHJvcGVydHkgJyArIHRyeVRvU3RyaW5nKFApICsgJyBvZiAnICsgdHJ5VG9TdHJpbmcoTykpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc3BsaWNlJyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zcGxpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc3BsaWNlXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzcGxpY2U6IGZ1bmN0aW9uIHNwbGljZShzdGFydCwgZGVsZXRlQ291bnQgLyogLCAuLi5pdGVtcyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhY3R1YWxTdGFydCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5zZXJ0Q291bnQsIGFjdHVhbERlbGV0ZUNvdW50LCBBLCBrLCBmcm9tLCB0bztcbiAgICBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAwKSB7XG4gICAgICBpbnNlcnRDb3VudCA9IGFjdHVhbERlbGV0ZUNvdW50ID0gMDtcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMSkge1xuICAgICAgaW5zZXJ0Q291bnQgPSAwO1xuICAgICAgYWN0dWFsRGVsZXRlQ291bnQgPSBsZW4gLSBhY3R1YWxTdGFydDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zZXJ0Q291bnQgPSBhcmd1bWVudHNMZW5ndGggLSAyO1xuICAgICAgYWN0dWFsRGVsZXRlQ291bnQgPSBtaW4obWF4KHRvSW50ZWdlck9ySW5maW5pdHkoZGVsZXRlQ291bnQpLCAwKSwgbGVuIC0gYWN0dWFsU3RhcnQpO1xuICAgIH1cbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgaW5zZXJ0Q291bnQgLSBhY3R1YWxEZWxldGVDb3VudCk7XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCBhY3R1YWxEZWxldGVDb3VudCk7XG4gICAgZm9yIChrID0gMDsgayA8IGFjdHVhbERlbGV0ZUNvdW50OyBrKyspIHtcbiAgICAgIGZyb20gPSBhY3R1YWxTdGFydCArIGs7XG4gICAgICBpZiAoZnJvbSBpbiBPKSBjcmVhdGVQcm9wZXJ0eShBLCBrLCBPW2Zyb21dKTtcbiAgICB9XG4gICAgQS5sZW5ndGggPSBhY3R1YWxEZWxldGVDb3VudDtcbiAgICBpZiAoaW5zZXJ0Q291bnQgPCBhY3R1YWxEZWxldGVDb3VudCkge1xuICAgICAgZm9yIChrID0gYWN0dWFsU3RhcnQ7IGsgPCBsZW4gLSBhY3R1YWxEZWxldGVDb3VudDsgaysrKSB7XG4gICAgICAgIGZyb20gPSBrICsgYWN0dWFsRGVsZXRlQ291bnQ7XG4gICAgICAgIHRvID0gayArIGluc2VydENvdW50O1xuICAgICAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgICAgIGVsc2UgZGVsZXRlUHJvcGVydHlPclRocm93KE8sIHRvKTtcbiAgICAgIH1cbiAgICAgIGZvciAoayA9IGxlbjsgayA+IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50ICsgaW5zZXJ0Q291bnQ7IGstLSkgZGVsZXRlUHJvcGVydHlPclRocm93KE8sIGsgLSAxKTtcbiAgICB9IGVsc2UgaWYgKGluc2VydENvdW50ID4gYWN0dWFsRGVsZXRlQ291bnQpIHtcbiAgICAgIGZvciAoayA9IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50OyBrID4gYWN0dWFsU3RhcnQ7IGstLSkge1xuICAgICAgICBmcm9tID0gayArIGFjdHVhbERlbGV0ZUNvdW50IC0gMTtcbiAgICAgICAgdG8gPSBrICsgaW5zZXJ0Q291bnQgLSAxO1xuICAgICAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgICAgIGVsc2UgZGVsZXRlUHJvcGVydHlPclRocm93KE8sIHRvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChrID0gMDsgayA8IGluc2VydENvdW50OyBrKyspIHtcbiAgICAgIE9bayArIGFjdHVhbFN0YXJ0XSA9IGFyZ3VtZW50c1trICsgMl07XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50ICsgaW5zZXJ0Q291bnQpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNwbGljZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzcGxpY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zcGxpY2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc3BsaWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zcGxpY2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc3BsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc3BsaWNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSBzYWZlXG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gc2hvdWxkIGhhdmUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIChFZGdlIGJ1ZylcbiAgaWYgKERFU0NSSVBUT1JTICYmICRhc3NpZ24oeyBiOiAxIH0sICRhc3NpZ24oZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYicsIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pLCB7IGI6IDIgfSkpLmIgIT09IDEpIHJldHVybiB0cnVlO1xuICAvLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1ZylcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN5bWJvbCAtLSBzYWZlXG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ2Fzc2lnbiBkZXRlY3Rpb24nKTtcbiAgdmFyIGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtzeW1ib2xdID0gNztcbiAgYWxwaGFiZXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNocikgeyBCW2Nocl0gPSBjaHI7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPT0gNyB8fCBvYmplY3RLZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPT0gYWxwaGFiZXQ7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICB2YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xuICB3aGlsZSAoYXJndW1lbnRzTGVuZ3RoID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IEluZGV4ZWRPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChvYmplY3RLZXlzKFMpLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZSwgUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtYXNzaWduJyk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBhcml0eTogMiwgZm9yY2VkOiBPYmplY3QuYXNzaWduICE9PSBhc3NpZ24gfSwge1xuICBhc3NpZ246IGFzc2lnblxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuYXNzaWduO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvYXNzaWduJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2Fzc2lnblwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldFByb3RvdHlwZU9mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUywgc2hhbTogIUNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiB9LCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiBuYXRpdmVHZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgY3JlYXRlOiBjcmVhdGVcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlKFAsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoUCwgRCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2NyZWF0ZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1qc29uIC0tIHNhZmVcbmlmICghcGF0aC5KU09OKSBwYXRoLkpTT04gPSB7IHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnkgfTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgcmV0dXJuIGFwcGx5KHBhdGguSlNPTi5zdHJpbmdpZnksIG51bGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9qc29uL3N0cmluZ2lmeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2pzb24vc3RyaW5naWZ5XCIpOyIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQnVuIC0tIERlbm8gY2FzZSAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgQnVuID09ICdmdW5jdGlvbicgJiYgQnVuICYmIHR5cGVvZiBCdW4udmVyc2lvbiA9PSAnc3RyaW5nJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFzc2VkLCByZXF1aXJlZCkge1xuICBpZiAocGFzc2VkIDwgcmVxdWlyZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuICByZXR1cm4gcGFzc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIEVOR0lORV9JU19CVU4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bicpO1xudmFyIFVTRVJfQUdFTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xuXG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG4vLyBkaXJ0eSBJRTktIGFuZCBCdW4gMC4zLjAtIGNoZWNrc1xudmFyIFdSQVAgPSAvTVNJRSAuXFwuLy50ZXN0KFVTRVJfQUdFTlQpIHx8IEVOR0lORV9JU19CVU4gJiYgKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlcnNpb24gPSBnbG9iYWwuQnVuLnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoIDwgMyB8fCB2ZXJzaW9uWzBdID09PSAnMCcgJiYgKHZlcnNpb25bMV0gPCAzIHx8IHZlcnNpb25bMV0gPT09ICczJyAmJiB2ZXJzaW9uWzJdID09PSAnMCcpO1xufSkoKTtcblxuLy8gSUU5LSAvIEJ1biAwLjMuMC0gc2V0VGltZW91dCAvIHNldEludGVydmFsIC8gc2V0SW1tZWRpYXRlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjdGltZXJzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzE2MzNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaGFzVGltZUFyZykge1xuICB2YXIgZmlyc3RQYXJhbUluZGV4ID0gaGFzVGltZUFyZyA/IDIgOiAxO1xuICByZXR1cm4gV1JBUCA/IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpID4gZmlyc3RQYXJhbUluZGV4O1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIHBhcmFtcyA9IGJvdW5kQXJncyA/IGFycmF5U2xpY2UoYXJndW1lbnRzLCBmaXJzdFBhcmFtSW5kZXgpIDogW107XG4gICAgdmFyIGNhbGxiYWNrID0gYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHRoaXMsIHBhcmFtcyk7XG4gICAgfSA6IGZuO1xuICAgIHJldHVybiBoYXNUaW1lQXJnID8gc2NoZWR1bGVyKGNhbGxiYWNrLCB0aW1lb3V0KSA6IHNjaGVkdWxlcihjYWxsYmFjayk7XG4gIH0gOiBzY2hlZHVsZXI7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRJbnRlcnZhbCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldEludGVydmFsLCB0cnVlKTtcblxuLy8gQnVuIC8gSUU5LSBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0SW50ZXJ2YWwgIT09IHNldEludGVydmFsIH0sIHtcbiAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG52YXIgc2V0VGltZW91dCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldFRpbWVvdXQsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldFRpbWVvdXQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0dGltZW91dFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0VGltZW91dCAhPT0gc2V0VGltZW91dCB9LCB7XG4gIHNldFRpbWVvdXQ6IHNldFRpbWVvdXRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnRpbWVycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0VGltZW91dDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3NldC10aW1lb3V0XCIpOyIsICJmdW5jdGlvbiBFbWl0dGVyKG9iamVjdCkge1xuXHRpZiAob2JqZWN0KSB7XG5cdFx0cmV0dXJuIG1peGluKG9iamVjdCk7XG5cdH1cblxuXHR0aGlzLl9jYWxsYmFja3MgPSBuZXcgTWFwKCk7XG59XG5cbmZ1bmN0aW9uIG1peGluKG9iamVjdCkge1xuXHRPYmplY3QuYXNzaWduKG9iamVjdCwgRW1pdHRlci5wcm90b3R5cGUpO1xuXHRvYmplY3QuX2NhbGxiYWNrcyA9IG5ldyBNYXAoKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuRW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXZlbnQsIGxpc3RlbmVyKSB7XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpID8/IFtdO1xuXHRjYWxsYmFja3MucHVzaChsaXN0ZW5lcik7XG5cdHRoaXMuX2NhbGxiYWNrcy5zZXQoZXZlbnQsIGNhbGxiYWNrcyk7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0Y29uc3Qgb24gPSAoLi4uYXJndW1lbnRzXykgPT4ge1xuXHRcdHRoaXMub2ZmKGV2ZW50LCBvbik7XG5cdFx0bGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzXyk7XG5cdH07XG5cblx0b24uZm4gPSBsaXN0ZW5lcjtcblx0dGhpcy5vbihldmVudCwgb24pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0aWYgKGV2ZW50ID09PSB1bmRlZmluZWQgJiYgbGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2NhbGxiYWNrcy5jbGVhcigpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aWYgKGxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcblx0XHR0aGlzLl9jYWxsYmFja3MuZGVsZXRlKGV2ZW50KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpO1xuXHRpZiAoY2FsbGJhY2tzKSB7XG5cdFx0Zm9yIChjb25zdCBbaW5kZXgsIGNhbGxiYWNrXSBvZiBjYWxsYmFja3MuZW50cmllcygpKSB7XG5cdFx0XHRpZiAoY2FsbGJhY2sgPT09IGxpc3RlbmVyIHx8IGNhbGxiYWNrLmZuID09PSBsaXN0ZW5lcikge1xuXHRcdFx0XHRjYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGNhbGxiYWNrcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuX2NhbGxiYWNrcy5kZWxldGUoZXZlbnQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9jYWxsYmFja3Muc2V0KGV2ZW50LCBjYWxsYmFja3MpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldmVudCwgLi4uYXJndW1lbnRzXykge1xuXHRjb25zdCBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MuZ2V0KGV2ZW50KTtcblx0aWYgKGNhbGxiYWNrcykge1xuXHRcdC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGNhbGxiYWNrcyBhcnJheSB0byBhdm9pZCBpc3N1ZXMgaWYgaXQncyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uXG5cdFx0Y29uc3QgY2FsbGJhY2tzQ29weSA9IFsuLi5jYWxsYmFja3NdO1xuXG5cdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBjYWxsYmFja3NDb3B5KSB7XG5cdFx0XHRjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCkgPz8gW107XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdGlmIChldmVudCkge1xuXHRcdHJldHVybiB0aGlzLmxpc3RlbmVycyhldmVudCkubGVuZ3RoO1xuXHR9XG5cblx0bGV0IHRvdGFsQ291bnQgPSAwO1xuXHRmb3IgKGNvbnN0IGNhbGxiYWNrcyBvZiB0aGlzLl9jYWxsYmFja3MudmFsdWVzKCkpIHtcblx0XHR0b3RhbENvdW50ICs9IGNhbGxiYWNrcy5sZW5ndGg7XG5cdH1cblxuXHRyZXR1cm4gdG90YWxDb3VudDtcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRyZXR1cm4gdGhpcy5saXN0ZW5lckNvdW50KGV2ZW50KSA+IDA7XG59O1xuXG4vLyBBbGlhc2VzXG5FbWl0dGVyLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub247XG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vZmY7XG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBFbWl0dGVyLnByb3RvdHlwZS5vZmY7XG5cbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IEVtaXR0ZXI7XG59XG4iLCAiLyohIEhhbW1lci5KUyAtIHYyLjAuMTctcmMgLSAyMDE5LTEyLTE2XG4gKiBodHRwOi8vbmF2ZXIuZ2l0aHViLmlvL2VnanNcbiAqXG4gKiBGb3JrZWQgQnkgTmF2ZXIgZWdqc1xuICogQ29weXJpZ2h0IChjKSBoYW1tZXJqc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlICovXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGV4dGVuZCBvYmplY3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgaW4gZGVzdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBvbmVzIGluIHNyYy5cbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBvYmplY3RzX3RvX2Fzc2lnblxuICogQHJldHVybnMge09iamVjdH0gdGFyZ2V0XG4gKi9cbnZhciBhc3NpZ247XG5cbmlmICh0eXBlb2YgT2JqZWN0LmFzc2lnbiAhPT0gJ2Z1bmN0aW9uJykge1xuICBhc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0KSB7XG4gICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IHRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IE9iamVjdCh0YXJnZXQpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdO1xuXG4gICAgICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQgJiYgc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIG5leHRLZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuZXh0S2V5KSkge1xuICAgICAgICAgICAgb3V0cHV0W25leHRLZXldID0gc291cmNlW25leHRLZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG59IGVsc2Uge1xuICBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xufVxuXG52YXIgYXNzaWduJDEgPSBhc3NpZ247XG5cbnZhciBWRU5ET1JfUFJFRklYRVMgPSBbJycsICd3ZWJraXQnLCAnTW96JywgJ01TJywgJ21zJywgJ28nXTtcbnZhciBURVNUX0VMRU1FTlQgPSB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyB7XG4gIHN0eWxlOiB7fVxufSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xudmFyIFRZUEVfRlVOQ1RJT04gPSAnZnVuY3Rpb24nO1xudmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICBhYnMgPSBNYXRoLmFicztcbnZhciBub3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBwcmVmaXhlZCBwcm9wZXJ0eVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7U3RyaW5nfFVuZGVmaW5lZH0gcHJlZml4ZWRcbiAqL1xuXG5mdW5jdGlvbiBwcmVmaXhlZChvYmosIHByb3BlcnR5KSB7XG4gIHZhciBwcmVmaXg7XG4gIHZhciBwcm9wO1xuICB2YXIgY2FtZWxQcm9wID0gcHJvcGVydHlbMF0udG9VcHBlckNhc2UoKSArIHByb3BlcnR5LnNsaWNlKDEpO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBWRU5ET1JfUFJFRklYRVMubGVuZ3RoKSB7XG4gICAgcHJlZml4ID0gVkVORE9SX1BSRUZJWEVTW2ldO1xuICAgIHByb3AgPSBwcmVmaXggPyBwcmVmaXggKyBjYW1lbFByb3AgOiBwcm9wZXJ0eTtcblxuICAgIGlmIChwcm9wIGluIG9iaikge1xuICAgICAgcmV0dXJuIHByb3A7XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tbmV3LWZ1bmMsIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG52YXIgd2luO1xuXG5pZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAvLyB3aW5kb3cgaXMgdW5kZWZpbmVkIGluIG5vZGUuanNcbiAgd2luID0ge307XG59IGVsc2Uge1xuICB3aW4gPSB3aW5kb3c7XG59XG5cbnZhciBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gPSBwcmVmaXhlZChURVNUX0VMRU1FTlQuc3R5bGUsICd0b3VjaEFjdGlvbicpO1xudmFyIE5BVElWRV9UT1VDSF9BQ1RJT04gPSBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gIT09IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uUHJvcHMoKSB7XG4gIGlmICghTkFUSVZFX1RPVUNIX0FDVElPTikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0b3VjaE1hcCA9IHt9O1xuICB2YXIgY3NzU3VwcG9ydHMgPSB3aW4uQ1NTICYmIHdpbi5DU1Muc3VwcG9ydHM7XG4gIFsnYXV0bycsICdtYW5pcHVsYXRpb24nLCAncGFuLXknLCAncGFuLXgnLCAncGFuLXggcGFuLXknLCAnbm9uZSddLmZvckVhY2goZnVuY3Rpb24gKHZhbCkge1xuICAgIC8vIElmIGNzcy5zdXBwb3J0cyBpcyBub3Qgc3VwcG9ydGVkIGJ1dCB0aGVyZSBpcyBuYXRpdmUgdG91Y2gtYWN0aW9uIGFzc3VtZSBpdCBzdXBwb3J0c1xuICAgIC8vIGFsbCB2YWx1ZXMuIFRoaXMgaXMgdGhlIGNhc2UgZm9yIElFIDEwIGFuZCAxMS5cbiAgICByZXR1cm4gdG91Y2hNYXBbdmFsXSA9IGNzc1N1cHBvcnRzID8gd2luLkNTUy5zdXBwb3J0cygndG91Y2gtYWN0aW9uJywgdmFsKSA6IHRydWU7XG4gIH0pO1xuICByZXR1cm4gdG91Y2hNYXA7XG59XG5cbnZhciBUT1VDSF9BQ1RJT05fQ09NUFVURSA9ICdjb21wdXRlJztcbnZhciBUT1VDSF9BQ1RJT05fQVVUTyA9ICdhdXRvJztcbnZhciBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OID0gJ21hbmlwdWxhdGlvbic7IC8vIG5vdCBpbXBsZW1lbnRlZFxuXG52YXIgVE9VQ0hfQUNUSU9OX05PTkUgPSAnbm9uZSc7XG52YXIgVE9VQ0hfQUNUSU9OX1BBTl9YID0gJ3Bhbi14JztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1kgPSAncGFuLXknO1xudmFyIFRPVUNIX0FDVElPTl9NQVAgPSBnZXRUb3VjaEFjdGlvblByb3BzKCk7XG5cbnZhciBNT0JJTEVfUkVHRVggPSAvbW9iaWxlfHRhYmxldHxpcChhZHxob25lfG9kKXxhbmRyb2lkL2k7XG52YXIgU1VQUE9SVF9UT1VDSCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbjtcbnZhciBTVVBQT1JUX1BPSU5URVJfRVZFTlRTID0gcHJlZml4ZWQod2luLCAnUG9pbnRlckV2ZW50JykgIT09IHVuZGVmaW5lZDtcbnZhciBTVVBQT1JUX09OTFlfVE9VQ0ggPSBTVVBQT1JUX1RPVUNIICYmIE1PQklMRV9SRUdFWC50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElOUFVUX1RZUEVfVE9VQ0ggPSAndG91Y2gnO1xudmFyIElOUFVUX1RZUEVfUEVOID0gJ3Blbic7XG52YXIgSU5QVVRfVFlQRV9NT1VTRSA9ICdtb3VzZSc7XG52YXIgSU5QVVRfVFlQRV9LSU5FQ1QgPSAna2luZWN0JztcbnZhciBDT01QVVRFX0lOVEVSVkFMID0gMjU7XG52YXIgSU5QVVRfU1RBUlQgPSAxO1xudmFyIElOUFVUX01PVkUgPSAyO1xudmFyIElOUFVUX0VORCA9IDQ7XG52YXIgSU5QVVRfQ0FOQ0VMID0gODtcbnZhciBESVJFQ1RJT05fTk9ORSA9IDE7XG52YXIgRElSRUNUSU9OX0xFRlQgPSAyO1xudmFyIERJUkVDVElPTl9SSUdIVCA9IDQ7XG52YXIgRElSRUNUSU9OX1VQID0gODtcbnZhciBESVJFQ1RJT05fRE9XTiA9IDE2O1xudmFyIERJUkVDVElPTl9IT1JJWk9OVEFMID0gRElSRUNUSU9OX0xFRlQgfCBESVJFQ1RJT05fUklHSFQ7XG52YXIgRElSRUNUSU9OX1ZFUlRJQ0FMID0gRElSRUNUSU9OX1VQIHwgRElSRUNUSU9OX0RPV047XG52YXIgRElSRUNUSU9OX0FMTCA9IERJUkVDVElPTl9IT1JJWk9OVEFMIHwgRElSRUNUSU9OX1ZFUlRJQ0FMO1xudmFyIFBST1BTX1hZID0gWyd4JywgJ3knXTtcbnZhciBQUk9QU19DTElFTlRfWFkgPSBbJ2NsaWVudFgnLCAnY2xpZW50WSddO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3YWxrIG9iamVjdHMgYW5kIGFycmF5c1xuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICB2YXIgaTtcblxuICBpZiAoIW9iaikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChvYmouZm9yRWFjaCkge1xuICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgfSBlbHNlIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgb2JqLmxlbmd0aCkge1xuICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgICBpKys7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgIG9iai5oYXNPd25Qcm9wZXJ0eShpKSAmJiBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogbGV0IGEgYm9vbGVhbiB2YWx1ZSBhbHNvIGJlIGEgZnVuY3Rpb24gdGhhdCBtdXN0IHJldHVybiBhIGJvb2xlYW5cbiAqIHRoaXMgZmlyc3QgaXRlbSBpbiBhcmdzIHdpbGwgYmUgdXNlZCBhcyB0aGUgY29udGV4dFxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSB2YWxcbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdzXVxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cblxuZnVuY3Rpb24gYm9vbE9yRm4odmFsLCBhcmdzKSB7XG4gIGlmICh0eXBlb2YgdmFsID09PSBUWVBFX0ZVTkNUSU9OKSB7XG4gICAgcmV0dXJuIHZhbC5hcHBseShhcmdzID8gYXJnc1swXSB8fCB1bmRlZmluZWQgOiB1bmRlZmluZWQsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc21hbGwgaW5kZXhPZiB3cmFwcGVyXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gZmluZFxuICogQHJldHVybnMge0Jvb2xlYW59IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGluU3RyKHN0ciwgZmluZCkge1xuICByZXR1cm4gc3RyLmluZGV4T2YoZmluZCkgPiAtMTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogd2hlbiB0aGUgdG91Y2hBY3Rpb25zIGFyZSBjb2xsZWN0ZWQgdGhleSBhcmUgbm90IGEgdmFsaWQgdmFsdWUsIHNvIHdlIG5lZWQgdG8gY2xlYW4gdGhpbmdzIHVwLiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWN0aW9uc1xuICogQHJldHVybnMgeyp9XG4gKi9cblxuZnVuY3Rpb24gY2xlYW5Ub3VjaEFjdGlvbnMoYWN0aW9ucykge1xuICAvLyBub25lXG4gIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTk9ORSkpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gIH1cblxuICB2YXIgaGFzUGFuWCA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWCk7XG4gIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKTsgLy8gaWYgYm90aCBwYW4teCBhbmQgcGFuLXkgYXJlIHNldCAoZGlmZmVyZW50IHJlY29nbml6ZXJzXG4gIC8vIGZvciBkaWZmZXJlbnQgZGlyZWN0aW9ucywgZS5nLiBob3Jpem9udGFsIHBhbiBidXQgdmVydGljYWwgc3dpcGU/KVxuICAvLyB3ZSBuZWVkIG5vbmUgKGFzIG90aGVyd2lzZSB3aXRoIHBhbi14IHBhbi15IGNvbWJpbmVkIG5vbmUgb2YgdGhlc2VcbiAgLy8gcmVjb2duaXplcnMgd2lsbCB3b3JrLCBzaW5jZSB0aGUgYnJvd3NlciB3b3VsZCBoYW5kbGUgYWxsIHBhbm5pbmdcblxuICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgcmV0dXJuIFRPVUNIX0FDVElPTl9OT05FO1xuICB9IC8vIHBhbi14IE9SIHBhbi15XG5cblxuICBpZiAoaGFzUGFuWCB8fCBoYXNQYW5ZKSB7XG4gICAgcmV0dXJuIGhhc1BhblggPyBUT1VDSF9BQ1RJT05fUEFOX1ggOiBUT1VDSF9BQ1RJT05fUEFOX1k7XG4gIH0gLy8gbWFuaXB1bGF0aW9uXG5cblxuICBpZiAoaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTikpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTjtcbiAgfVxuXG4gIHJldHVybiBUT1VDSF9BQ1RJT05fQVVUTztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogVG91Y2ggQWN0aW9uXG4gKiBzZXRzIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eSBvciB1c2VzIHRoZSBqcyBhbHRlcm5hdGl2ZVxuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBUb3VjaEFjdGlvbiA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRvdWNoQWN0aW9uKG1hbmFnZXIsIHZhbHVlKSB7XG4gICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICB0aGlzLnNldCh2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWUgb24gdGhlIGVsZW1lbnQgb3IgZW5hYmxlIHRoZSBwb2x5ZmlsbFxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gVG91Y2hBY3Rpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAvLyBmaW5kIG91dCB0aGUgdG91Y2gtYWN0aW9uIGJ5IHRoZSBldmVudCBoYW5kbGVyc1xuICAgIGlmICh2YWx1ZSA9PT0gVE9VQ0hfQUNUSU9OX0NPTVBVVEUpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5jb21wdXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKE5BVElWRV9UT1VDSF9BQ1RJT04gJiYgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGUgJiYgVE9VQ0hfQUNUSU9OX01BUFt2YWx1ZV0pIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbGVtZW50LnN0eWxlW1BSRUZJWEVEX1RPVUNIX0FDVElPTl0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGlvbnMgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGp1c3QgcmUtc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZVxuICAgKi9cblxuXG4gIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgdGhpcy5zZXQodGhpcy5tYW5hZ2VyLm9wdGlvbnMudG91Y2hBY3Rpb24pO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY29tcHV0ZSB0aGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgcmVjb2duaXplcidzIHNldHRpbmdzXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHZhbHVlXG4gICAqL1xuXG5cbiAgX3Byb3RvLmNvbXB1dGUgPSBmdW5jdGlvbiBjb21wdXRlKCkge1xuICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgZWFjaCh0aGlzLm1hbmFnZXIucmVjb2duaXplcnMsIGZ1bmN0aW9uIChyZWNvZ25pemVyKSB7XG4gICAgICBpZiAoYm9vbE9yRm4ocmVjb2duaXplci5vcHRpb25zLmVuYWJsZSwgW3JlY29nbml6ZXJdKSkge1xuICAgICAgICBhY3Rpb25zID0gYWN0aW9ucy5jb25jYXQocmVjb2duaXplci5nZXRUb3VjaEFjdGlvbigpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xlYW5Ub3VjaEFjdGlvbnMoYWN0aW9ucy5qb2luKCcgJykpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGVhY2ggaW5wdXQgY3ljbGUgYW5kIHByb3ZpZGVzIHRoZSBwcmV2ZW50aW5nIG9mIHRoZSBicm93c2VyIGJlaGF2aW9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by5wcmV2ZW50RGVmYXVsdHMgPSBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdHMoaW5wdXQpIHtcbiAgICB2YXIgc3JjRXZlbnQgPSBpbnB1dC5zcmNFdmVudDtcbiAgICB2YXIgZGlyZWN0aW9uID0gaW5wdXQub2Zmc2V0RGlyZWN0aW9uOyAvLyBpZiB0aGUgdG91Y2ggYWN0aW9uIGRpZCBwcmV2ZW50ZWQgb25jZSB0aGlzIHNlc3Npb25cblxuICAgIGlmICh0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQpIHtcbiAgICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgdmFyIGhhc05vbmUgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTk9ORSkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fUEFOX1ldO1xuICAgIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fUEFOX1hdO1xuXG4gICAgaWYgKGhhc05vbmUpIHtcbiAgICAgIC8vIGRvIG5vdCBwcmV2ZW50IGRlZmF1bHRzIGlmIHRoaXMgaXMgYSB0YXAgZ2VzdHVyZVxuICAgICAgdmFyIGlzVGFwUG9pbnRlciA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gMTtcbiAgICAgIHZhciBpc1RhcE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCAyO1xuICAgICAgdmFyIGlzVGFwVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgMjUwO1xuXG4gICAgICBpZiAoaXNUYXBQb2ludGVyICYmIGlzVGFwTW92ZW1lbnQgJiYgaXNUYXBUb3VjaFRpbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICAgIC8vIGBwYW4teCBwYW4teWAgbWVhbnMgYnJvd3NlciBoYW5kbGVzIGFsbCBzY3JvbGxpbmcvcGFubmluZywgZG8gbm90IHByZXZlbnRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaGFzTm9uZSB8fCBoYXNQYW5ZICYmIGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMIHx8IGhhc1BhblggJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmV2ZW50U3JjKHNyY0V2ZW50KTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYWxsIHByZXZlbnREZWZhdWx0IHRvIHByZXZlbnQgdGhlIGJyb3dzZXIncyBkZWZhdWx0IGJlaGF2aW9yIChzY3JvbGxpbmcgaW4gbW9zdCBjYXNlcylcbiAgICogQHBhcmFtIHtPYmplY3R9IHNyY0V2ZW50XG4gICAqL1xuXG5cbiAgX3Byb3RvLnByZXZlbnRTcmMgPSBmdW5jdGlvbiBwcmV2ZW50U3JjKHNyY0V2ZW50KSB7XG4gICAgdGhpcy5tYW5hZ2VyLnNlc3Npb24ucHJldmVudGVkID0gdHJ1ZTtcbiAgICBzcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuXG4gIHJldHVybiBUb3VjaEFjdGlvbjtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZmluZCBpZiBhIG5vZGUgaXMgaW4gdGhlIGdpdmVuIHBhcmVudFxuICogQG1ldGhvZCBoYXNQYXJlbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybiB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaGFzUGFyZW50KG5vZGUsIHBhcmVudCkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlID09PSBwYXJlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgY2VudGVyIG9mIGFsbCB0aGUgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtPYmplY3R9IGNlbnRlciBjb250YWlucyBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzXG4gKi9cblxuZnVuY3Rpb24gZ2V0Q2VudGVyKHBvaW50ZXJzKSB7XG4gIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDsgLy8gbm8gbmVlZCB0byBsb29wIHdoZW4gb25seSBvbmUgdG91Y2hcblxuICBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcm91bmQocG9pbnRlcnNbMF0uY2xpZW50WCksXG4gICAgICB5OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRZKVxuICAgIH07XG4gIH1cblxuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgcG9pbnRlcnNMZW5ndGgpIHtcbiAgICB4ICs9IHBvaW50ZXJzW2ldLmNsaWVudFg7XG4gICAgeSArPSBwb2ludGVyc1tpXS5jbGllbnRZO1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAvIHBvaW50ZXJzTGVuZ3RoKSxcbiAgICB5OiByb3VuZCh5IC8gcG9pbnRlcnNMZW5ndGgpXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBhIHNpbXBsZSBjbG9uZSBmcm9tIHRoZSBpbnB1dCB1c2VkIGZvciBzdG9yYWdlIG9mIGZpcnN0SW5wdXQgYW5kIGZpcnN0TXVsdGlwbGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICogQHJldHVybnMge09iamVjdH0gY2xvbmVkSW5wdXREYXRhXG4gKi9cblxuZnVuY3Rpb24gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpIHtcbiAgLy8gbWFrZSBhIHNpbXBsZSBjb3B5IG9mIHRoZSBwb2ludGVycyBiZWNhdXNlIHdlIHdpbGwgZ2V0IGEgcmVmZXJlbmNlIGlmIHdlIGRvbid0XG4gIC8vIHdlIG9ubHkgbmVlZCBjbGllbnRYWSBmb3IgdGhlIGNhbGN1bGF0aW9uc1xuICB2YXIgcG9pbnRlcnMgPSBbXTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgaW5wdXQucG9pbnRlcnMubGVuZ3RoKSB7XG4gICAgcG9pbnRlcnNbaV0gPSB7XG4gICAgICBjbGllbnRYOiByb3VuZChpbnB1dC5wb2ludGVyc1tpXS5jbGllbnRYKSxcbiAgICAgIGNsaWVudFk6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFkpXG4gICAgfTtcbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRpbWVTdGFtcDogbm93KCksXG4gICAgcG9pbnRlcnM6IHBvaW50ZXJzLFxuICAgIGNlbnRlcjogZ2V0Q2VudGVyKHBvaW50ZXJzKSxcbiAgICBkZWx0YVg6IGlucHV0LmRlbHRhWCxcbiAgICBkZWx0YVk6IGlucHV0LmRlbHRhWVxuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIGFic29sdXRlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtPYmplY3R9IHAxIHt4LCB5fVxuICogQHBhcmFtIHtPYmplY3R9IHAyIHt4LCB5fVxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICovXG5cbmZ1bmN0aW9uIGdldERpc3RhbmNlKHAxLCBwMiwgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHByb3BzID0gUFJPUFNfWFk7XG4gIH1cblxuICB2YXIgeCA9IHAyW3Byb3BzWzBdXSAtIHAxW3Byb3BzWzBdXTtcbiAgdmFyIHkgPSBwMltwcm9wc1sxXV0gLSBwMVtwcm9wc1sxXV07XG4gIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgYW5nbGUgYmV0d2VlbiB0d28gY29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMVxuICogQHBhcmFtIHtPYmplY3R9IHAyXG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGFuZ2xlXG4gKi9cblxuZnVuY3Rpb24gZ2V0QW5nbGUocDEsIHAyLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgfVxuXG4gIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dO1xuICB2YXIgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgcmV0dXJuIE1hdGguYXRhbjIoeSwgeCkgKiAxODAgLyBNYXRoLlBJO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIGRpcmVjdGlvbiBiZXR3ZWVuIHR3byBwb2ludHNcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7TnVtYmVyfSBkaXJlY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBnZXREaXJlY3Rpb24oeCwgeSkge1xuICBpZiAoeCA9PT0geSkge1xuICAgIHJldHVybiBESVJFQ1RJT05fTk9ORTtcbiAgfVxuXG4gIGlmIChhYnMoeCkgPj0gYWJzKHkpKSB7XG4gICAgcmV0dXJuIHggPCAwID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFQ7XG4gIH1cblxuICByZXR1cm4geSA8IDAgPyBESVJFQ1RJT05fVVAgOiBESVJFQ1RJT05fRE9XTjtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZURlbHRhWFkoc2Vzc2lvbiwgaW5wdXQpIHtcbiAgdmFyIGNlbnRlciA9IGlucHV0LmNlbnRlcjsgLy8gbGV0IHsgb2Zmc2V0RGVsdGE6b2Zmc2V0ID0ge30sIHByZXZEZWx0YSA9IHt9LCBwcmV2SW5wdXQgPSB7fSB9ID0gc2Vzc2lvbjtcbiAgLy8ganNjcyB0aHJvd2luZyBlcnJvciBvbiBkZWZhbHV0IGRlc3RydWN0dXJlZCB2YWx1ZXMgYW5kIHdpdGhvdXQgZGVmYXVsdHMgdGVzdHMgZmFpbFxuXG4gIHZhciBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhIHx8IHt9O1xuICB2YXIgcHJldkRlbHRhID0gc2Vzc2lvbi5wcmV2RGVsdGEgfHwge307XG4gIHZhciBwcmV2SW5wdXQgPSBzZXNzaW9uLnByZXZJbnB1dCB8fCB7fTtcblxuICBpZiAoaW5wdXQuZXZlbnRUeXBlID09PSBJTlBVVF9TVEFSVCB8fCBwcmV2SW5wdXQuZXZlbnRUeXBlID09PSBJTlBVVF9FTkQpIHtcbiAgICBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSA9IHtcbiAgICAgIHg6IHByZXZJbnB1dC5kZWx0YVggfHwgMCxcbiAgICAgIHk6IHByZXZJbnB1dC5kZWx0YVkgfHwgMFxuICAgIH07XG4gICAgb2Zmc2V0ID0gc2Vzc2lvbi5vZmZzZXREZWx0YSA9IHtcbiAgICAgIHg6IGNlbnRlci54LFxuICAgICAgeTogY2VudGVyLnlcbiAgICB9O1xuICB9XG5cbiAgaW5wdXQuZGVsdGFYID0gcHJldkRlbHRhLnggKyAoY2VudGVyLnggLSBvZmZzZXQueCk7XG4gIGlucHV0LmRlbHRhWSA9IHByZXZEZWx0YS55ICsgKGNlbnRlci55IC0gb2Zmc2V0LnkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIHZlbG9jaXR5IGJldHdlZW4gdHdvIHBvaW50cy4gdW5pdCBpcyBpbiBweCBwZXIgbXMuXG4gKiBAcGFyYW0ge051bWJlcn0gZGVsdGFUaW1lXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge09iamVjdH0gdmVsb2NpdHkgYHhgIGFuZCBgeWBcbiAqL1xuZnVuY3Rpb24gZ2V0VmVsb2NpdHkoZGVsdGFUaW1lLCB4LCB5KSB7XG4gIHJldHVybiB7XG4gICAgeDogeCAvIGRlbHRhVGltZSB8fCAwLFxuICAgIHk6IHkgLyBkZWx0YVRpbWUgfHwgMFxuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIHNjYWxlIGZhY3RvciBiZXR3ZWVuIHR3byBwb2ludGVyc2V0c1xuICogbm8gc2NhbGUgaXMgMSwgYW5kIGdvZXMgZG93biB0byAwIHdoZW4gcGluY2hlZCB0b2dldGhlciwgYW5kIGJpZ2dlciB3aGVuIHBpbmNoZWQgb3V0XG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHNjYWxlXG4gKi9cblxuZnVuY3Rpb24gZ2V0U2NhbGUoc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZ2V0RGlzdGFuY2UoZW5kWzBdLCBlbmRbMV0sIFBST1BTX0NMSUVOVF9YWSkgLyBnZXREaXN0YW5jZShzdGFydFswXSwgc3RhcnRbMV0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgcm90YXRpb24gZGVncmVlcyBiZXR3ZWVuIHR3byBwb2ludGVyc2V0c1xuICogQHBhcmFtIHtBcnJheX0gc3RhcnQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IGVuZCBhcnJheSBvZiBwb2ludGVyc1xuICogQHJldHVybiB7TnVtYmVyfSByb3RhdGlvblxuICovXG5cbmZ1bmN0aW9uIGdldFJvdGF0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGdldEFuZ2xlKGVuZFsxXSwgZW5kWzBdLCBQUk9QU19DTElFTlRfWFkpICsgZ2V0QW5nbGUoc3RhcnRbMV0sIHN0YXJ0WzBdLCBQUk9QU19DTElFTlRfWFkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB2ZWxvY2l0eSBpcyBjYWxjdWxhdGVkIGV2ZXJ5IHggbXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXNzaW9uXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuXG5mdW5jdGlvbiBjb21wdXRlSW50ZXJ2YWxJbnB1dERhdGEoc2Vzc2lvbiwgaW5wdXQpIHtcbiAgdmFyIGxhc3QgPSBzZXNzaW9uLmxhc3RJbnRlcnZhbCB8fCBpbnB1dDtcbiAgdmFyIGRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGxhc3QudGltZVN0YW1wO1xuICB2YXIgdmVsb2NpdHk7XG4gIHZhciB2ZWxvY2l0eVg7XG4gIHZhciB2ZWxvY2l0eVk7XG4gIHZhciBkaXJlY3Rpb247XG5cbiAgaWYgKGlucHV0LmV2ZW50VHlwZSAhPT0gSU5QVVRfQ0FOQ0VMICYmIChkZWx0YVRpbWUgPiBDT01QVVRFX0lOVEVSVkFMIHx8IGxhc3QudmVsb2NpdHkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICB2YXIgZGVsdGFYID0gaW5wdXQuZGVsdGFYIC0gbGFzdC5kZWx0YVg7XG4gICAgdmFyIGRlbHRhWSA9IGlucHV0LmRlbHRhWSAtIGxhc3QuZGVsdGFZO1xuICAgIHZhciB2ID0gZ2V0VmVsb2NpdHkoZGVsdGFUaW1lLCBkZWx0YVgsIGRlbHRhWSk7XG4gICAgdmVsb2NpdHlYID0gdi54O1xuICAgIHZlbG9jaXR5WSA9IHYueTtcbiAgICB2ZWxvY2l0eSA9IGFicyh2LngpID4gYWJzKHYueSkgPyB2LnggOiB2Lnk7XG4gICAgZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGRlbHRhWCwgZGVsdGFZKTtcbiAgICBzZXNzaW9uLmxhc3RJbnRlcnZhbCA9IGlucHV0O1xuICB9IGVsc2Uge1xuICAgIC8vIHVzZSBsYXRlc3QgdmVsb2NpdHkgaW5mbyBpZiBpdCBkb2Vzbid0IG92ZXJ0YWtlIGEgbWluaW11bSBwZXJpb2RcbiAgICB2ZWxvY2l0eSA9IGxhc3QudmVsb2NpdHk7XG4gICAgdmVsb2NpdHlYID0gbGFzdC52ZWxvY2l0eVg7XG4gICAgdmVsb2NpdHlZID0gbGFzdC52ZWxvY2l0eVk7XG4gICAgZGlyZWN0aW9uID0gbGFzdC5kaXJlY3Rpb247XG4gIH1cblxuICBpbnB1dC52ZWxvY2l0eSA9IHZlbG9jaXR5O1xuICBpbnB1dC52ZWxvY2l0eVggPSB2ZWxvY2l0eVg7XG4gIGlucHV0LnZlbG9jaXR5WSA9IHZlbG9jaXR5WTtcbiAgaW5wdXQuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xufVxuXG4vKipcbiogQHByaXZhdGVcbiAqIGV4dGVuZCB0aGUgZGF0YSB3aXRoIHNvbWUgdXNhYmxlIHByb3BlcnRpZXMgbGlrZSBzY2FsZSwgcm90YXRlLCB2ZWxvY2l0eSBldGNcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYW5hZ2VyXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuXG5mdW5jdGlvbiBjb21wdXRlSW5wdXREYXRhKG1hbmFnZXIsIGlucHV0KSB7XG4gIHZhciBzZXNzaW9uID0gbWFuYWdlci5zZXNzaW9uO1xuICB2YXIgcG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycztcbiAgdmFyIHBvaW50ZXJzTGVuZ3RoID0gcG9pbnRlcnMubGVuZ3RoOyAvLyBzdG9yZSB0aGUgZmlyc3QgaW5wdXQgdG8gY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBhbmQgZGlyZWN0aW9uXG5cbiAgaWYgKCFzZXNzaW9uLmZpcnN0SW5wdXQpIHtcbiAgICBzZXNzaW9uLmZpcnN0SW5wdXQgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gIH0gLy8gdG8gY29tcHV0ZSBzY2FsZSBhbmQgcm90YXRpb24gd2UgbmVlZCB0byBzdG9yZSB0aGUgbXVsdGlwbGUgdG91Y2hlc1xuXG5cbiAgaWYgKHBvaW50ZXJzTGVuZ3RoID4gMSAmJiAhc2Vzc2lvbi5maXJzdE11bHRpcGxlKSB7XG4gICAgc2Vzc2lvbi5maXJzdE11bHRpcGxlID0gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpO1xuICB9IGVsc2UgaWYgKHBvaW50ZXJzTGVuZ3RoID09PSAxKSB7XG4gICAgc2Vzc2lvbi5maXJzdE11bHRpcGxlID0gZmFsc2U7XG4gIH1cblxuICB2YXIgZmlyc3RJbnB1dCA9IHNlc3Npb24uZmlyc3RJbnB1dCxcbiAgICAgIGZpcnN0TXVsdGlwbGUgPSBzZXNzaW9uLmZpcnN0TXVsdGlwbGU7XG4gIHZhciBvZmZzZXRDZW50ZXIgPSBmaXJzdE11bHRpcGxlID8gZmlyc3RNdWx0aXBsZS5jZW50ZXIgOiBmaXJzdElucHV0LmNlbnRlcjtcbiAgdmFyIGNlbnRlciA9IGlucHV0LmNlbnRlciA9IGdldENlbnRlcihwb2ludGVycyk7XG4gIGlucHV0LnRpbWVTdGFtcCA9IG5vdygpO1xuICBpbnB1dC5kZWx0YVRpbWUgPSBpbnB1dC50aW1lU3RhbXAgLSBmaXJzdElucHV0LnRpbWVTdGFtcDtcbiAgaW5wdXQuYW5nbGUgPSBnZXRBbmdsZShvZmZzZXRDZW50ZXIsIGNlbnRlcik7XG4gIGlucHV0LmRpc3RhbmNlID0gZ2V0RGlzdGFuY2Uob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCk7XG4gIGlucHV0Lm9mZnNldERpcmVjdGlvbiA9IGdldERpcmVjdGlvbihpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG4gIHZhciBvdmVyYWxsVmVsb2NpdHkgPSBnZXRWZWxvY2l0eShpbnB1dC5kZWx0YVRpbWUsIGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5WCA9IG92ZXJhbGxWZWxvY2l0eS54O1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlZID0gb3ZlcmFsbFZlbG9jaXR5Lnk7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eSA9IGFicyhvdmVyYWxsVmVsb2NpdHkueCkgPiBhYnMob3ZlcmFsbFZlbG9jaXR5LnkpID8gb3ZlcmFsbFZlbG9jaXR5LnggOiBvdmVyYWxsVmVsb2NpdHkueTtcbiAgaW5wdXQuc2NhbGUgPSBmaXJzdE11bHRpcGxlID8gZ2V0U2NhbGUoZmlyc3RNdWx0aXBsZS5wb2ludGVycywgcG9pbnRlcnMpIDogMTtcbiAgaW5wdXQucm90YXRpb24gPSBmaXJzdE11bHRpcGxlID8gZ2V0Um90YXRpb24oZmlyc3RNdWx0aXBsZS5wb2ludGVycywgcG9pbnRlcnMpIDogMDtcbiAgaW5wdXQubWF4UG9pbnRlcnMgPSAhc2Vzc2lvbi5wcmV2SW5wdXQgPyBpbnB1dC5wb2ludGVycy5sZW5ndGggOiBpbnB1dC5wb2ludGVycy5sZW5ndGggPiBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycyA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzO1xuICBjb21wdXRlSW50ZXJ2YWxJbnB1dERhdGEoc2Vzc2lvbiwgaW5wdXQpOyAvLyBmaW5kIHRoZSBjb3JyZWN0IHRhcmdldFxuXG4gIHZhciB0YXJnZXQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG4gIHZhciBzcmNFdmVudCA9IGlucHV0LnNyY0V2ZW50O1xuICB2YXIgc3JjRXZlbnRUYXJnZXQ7XG5cbiAgaWYgKHNyY0V2ZW50LmNvbXBvc2VkUGF0aCkge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQuY29tcG9zZWRQYXRoKClbMF07XG4gIH0gZWxzZSBpZiAoc3JjRXZlbnQucGF0aCkge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQucGF0aFswXTtcbiAgfSBlbHNlIHtcbiAgICBzcmNFdmVudFRhcmdldCA9IHNyY0V2ZW50LnRhcmdldDtcbiAgfVxuXG4gIGlmIChoYXNQYXJlbnQoc3JjRXZlbnRUYXJnZXQsIHRhcmdldCkpIHtcbiAgICB0YXJnZXQgPSBzcmNFdmVudFRhcmdldDtcbiAgfVxuXG4gIGlucHV0LnRhcmdldCA9IHRhcmdldDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogaGFuZGxlIGlucHV0IGV2ZW50c1xuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRUeXBlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuXG5mdW5jdGlvbiBpbnB1dEhhbmRsZXIobWFuYWdlciwgZXZlbnRUeXBlLCBpbnB1dCkge1xuICB2YXIgcG9pbnRlcnNMZW4gPSBpbnB1dC5wb2ludGVycy5sZW5ndGg7XG4gIHZhciBjaGFuZ2VkUG9pbnRlcnNMZW4gPSBpbnB1dC5jaGFuZ2VkUG9pbnRlcnMubGVuZ3RoO1xuICB2YXIgaXNGaXJzdCA9IGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIHBvaW50ZXJzTGVuIC0gY2hhbmdlZFBvaW50ZXJzTGVuID09PSAwO1xuICB2YXIgaXNGaW5hbCA9IGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIHBvaW50ZXJzTGVuIC0gY2hhbmdlZFBvaW50ZXJzTGVuID09PSAwO1xuICBpbnB1dC5pc0ZpcnN0ID0gISFpc0ZpcnN0O1xuICBpbnB1dC5pc0ZpbmFsID0gISFpc0ZpbmFsO1xuXG4gIGlmIChpc0ZpcnN0KSB7XG4gICAgbWFuYWdlci5zZXNzaW9uID0ge307XG4gIH0gLy8gc291cmNlIGV2ZW50IGlzIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIHRoZSBkb21FdmVudHNcbiAgLy8gbGlrZSAndG91Y2hzdGFydCwgbW91c2V1cCwgcG9pbnRlcmRvd24nXG5cblxuICBpbnB1dC5ldmVudFR5cGUgPSBldmVudFR5cGU7IC8vIGNvbXB1dGUgc2NhbGUsIHJvdGF0aW9uIGV0Y1xuXG4gIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpOyAvLyBlbWl0IHNlY3JldCBldmVudFxuXG4gIG1hbmFnZXIuZW1pdCgnaGFtbWVyLmlucHV0JywgaW5wdXQpO1xuICBtYW5hZ2VyLnJlY29nbml6ZShpbnB1dCk7XG4gIG1hbmFnZXIuc2Vzc2lvbi5wcmV2SW5wdXQgPSBpbnB1dDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc3BsaXQgc3RyaW5nIG9uIHdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtBcnJheX0gd29yZHNcbiAqL1xuZnVuY3Rpb24gc3BsaXRTdHIoc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSgpLnNwbGl0KC9cXHMrL2cpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBhZGRFdmVudExpc3RlbmVyIHdpdGggbXVsdGlwbGUgZXZlbnRzIGF0IG9uY2VcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gKi9cblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcnModGFyZ2V0LCB0eXBlcywgaGFuZGxlcikge1xuICBlYWNoKHNwbGl0U3RyKHR5cGVzKSwgZnVuY3Rpb24gKHR5cGUpIHtcbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiByZW1vdmVFdmVudExpc3RlbmVyIHdpdGggbXVsdGlwbGUgZXZlbnRzIGF0IG9uY2VcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gKi9cblxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGFyZ2V0LCB0eXBlcywgaGFuZGxlcikge1xuICBlYWNoKHNwbGl0U3RyKHR5cGVzKSwgZnVuY3Rpb24gKHR5cGUpIHtcbiAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIHdpbmRvdyBvYmplY3Qgb2YgYW4gZWxlbWVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0RvY3VtZW50Vmlld3xXaW5kb3d9XG4gKi9cbmZ1bmN0aW9uIGdldFdpbmRvd0ZvckVsZW1lbnQoZWxlbWVudCkge1xuICB2YXIgZG9jID0gZWxlbWVudC5vd25lckRvY3VtZW50IHx8IGVsZW1lbnQ7XG4gIHJldHVybiBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdyB8fCB3aW5kb3c7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG52YXIgSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBJbnB1dChtYW5hZ2VyLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLmVsZW1lbnQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG4gICAgdGhpcy50YXJnZXQgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRUYXJnZXQ7IC8vIHNtYWxsZXIgd3JhcHBlciBhcm91bmQgdGhlIGhhbmRsZXIsIGZvciB0aGUgc2NvcGUgYW5kIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLFxuICAgIC8vIHNvIHdoZW4gZGlzYWJsZWQgdGhlIGlucHV0IGV2ZW50cyBhcmUgY29tcGxldGVseSBieXBhc3NlZC5cblxuICAgIHRoaXMuZG9tSGFuZGxlciA9IGZ1bmN0aW9uIChldikge1xuICAgICAgaWYgKGJvb2xPckZuKG1hbmFnZXIub3B0aW9ucy5lbmFibGUsIFttYW5hZ2VyXSkpIHtcbiAgICAgICAgc2VsZi5oYW5kbGVyKGV2KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5pbml0KCk7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNob3VsZCBoYW5kbGUgdGhlIGlucHV0RXZlbnQgZGF0YSBhbmQgdHJpZ2dlciB0aGUgY2FsbGJhY2tcbiAgICogQHZpcnR1YWxcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcigpIHt9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogYmluZCB0aGUgZXZlbnRzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmluaXQgPSBmdW5jdGlvbiBpbml0KCkge1xuICAgIHRoaXMuZXZFbCAmJiBhZGRFdmVudExpc3RlbmVycyh0aGlzLmVsZW1lbnQsIHRoaXMuZXZFbCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2VGFyZ2V0ICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMudGFyZ2V0LCB0aGlzLmV2VGFyZ2V0LCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZXaW4gJiYgYWRkRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogdW5iaW5kIHRoZSBldmVudHNcbiAgICovXG5cblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ldkVsICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZUYXJnZXQgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldldpbiAmJiByZW1vdmVFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gIH07XG5cbiAgcmV0dXJuIElucHV0O1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBmaW5kIGlmIGEgYXJyYXkgY29udGFpbnMgdGhlIG9iamVjdCB1c2luZyBpbmRleE9mIG9yIGEgc2ltcGxlIHBvbHlGaWxsXG4gKiBAcGFyYW0ge0FycmF5fSBzcmNcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcGFyYW0ge1N0cmluZ30gW2ZpbmRCeUtleV1cbiAqIEByZXR1cm4ge0Jvb2xlYW58TnVtYmVyfSBmYWxzZSB3aGVuIG5vdCBmb3VuZCwgb3IgdGhlIGluZGV4XG4gKi9cbmZ1bmN0aW9uIGluQXJyYXkoc3JjLCBmaW5kLCBmaW5kQnlLZXkpIHtcbiAgaWYgKHNyYy5pbmRleE9mICYmICFmaW5kQnlLZXkpIHtcbiAgICByZXR1cm4gc3JjLmluZGV4T2YoZmluZCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgICBpZiAoZmluZEJ5S2V5ICYmIHNyY1tpXVtmaW5kQnlLZXldID09IGZpbmQgfHwgIWZpbmRCeUtleSAmJiBzcmNbaV0gPT09IGZpbmQpIHtcbiAgICAgICAgLy8gZG8gbm90IHVzZSA9PT0gaGVyZSwgdGVzdCBmYWlsc1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiAtMTtcbiAgfVxufVxuXG52YXIgUE9JTlRFUl9JTlBVVF9NQVAgPSB7XG4gIHBvaW50ZXJkb3duOiBJTlBVVF9TVEFSVCxcbiAgcG9pbnRlcm1vdmU6IElOUFVUX01PVkUsXG4gIHBvaW50ZXJ1cDogSU5QVVRfRU5ELFxuICBwb2ludGVyY2FuY2VsOiBJTlBVVF9DQU5DRUwsXG4gIHBvaW50ZXJvdXQ6IElOUFVUX0NBTkNFTFxufTsgLy8gaW4gSUUxMCB0aGUgcG9pbnRlciB0eXBlcyBpcyBkZWZpbmVkIGFzIGFuIGVudW1cblxudmFyIElFMTBfUE9JTlRFUl9UWVBFX0VOVU0gPSB7XG4gIDI6IElOUFVUX1RZUEVfVE9VQ0gsXG4gIDM6IElOUFVUX1RZUEVfUEVOLFxuICA0OiBJTlBVVF9UWVBFX01PVVNFLFxuICA1OiBJTlBVVF9UWVBFX0tJTkVDVCAvLyBzZWUgaHR0cHM6Ly90d2l0dGVyLmNvbS9qYWNvYnJvc3NpL3N0YXR1cy80ODA1OTY0Mzg0ODk4OTA4MTZcblxufTtcbnZhciBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ3BvaW50ZXJkb3duJztcbnZhciBQT0lOVEVSX1dJTkRPV19FVkVOVFMgPSAncG9pbnRlcm1vdmUgcG9pbnRlcnVwIHBvaW50ZXJjYW5jZWwnOyAvLyBJRTEwIGhhcyBwcmVmaXhlZCBzdXBwb3J0LCBhbmQgY2FzZS1zZW5zaXRpdmVcblxuaWYgKHdpbi5NU1BvaW50ZXJFdmVudCAmJiAhd2luLlBvaW50ZXJFdmVudCkge1xuICBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ01TUG9pbnRlckRvd24nO1xuICBQT0lOVEVSX1dJTkRPV19FVkVOVFMgPSAnTVNQb2ludGVyTW92ZSBNU1BvaW50ZXJVcCBNU1BvaW50ZXJDYW5jZWwnO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUG9pbnRlciBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG5cbnZhciBQb2ludGVyRXZlbnRJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKFBvaW50ZXJFdmVudElucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIFBvaW50ZXJFdmVudElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IFBvaW50ZXJFdmVudElucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldkVsID0gUE9JTlRFUl9FTEVNRU5UX0VWRU5UUztcbiAgICBwcm90by5ldldpbiA9IFBPSU5URVJfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RvcmUgPSBfdGhpcy5tYW5hZ2VyLnNlc3Npb24ucG9pbnRlckV2ZW50cyA9IFtdO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaGFuZGxlIG1vdXNlIGV2ZW50c1xuICAgKiBAcGFyYW0ge09iamVjdH0gZXZcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciBzdG9yZSA9IHRoaXMuc3RvcmU7XG4gICAgdmFyIHJlbW92ZVBvaW50ZXIgPSBmYWxzZTtcbiAgICB2YXIgZXZlbnRUeXBlTm9ybWFsaXplZCA9IGV2LnR5cGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdtcycsICcnKTtcbiAgICB2YXIgZXZlbnRUeXBlID0gUE9JTlRFUl9JTlBVVF9NQVBbZXZlbnRUeXBlTm9ybWFsaXplZF07XG4gICAgdmFyIHBvaW50ZXJUeXBlID0gSUUxMF9QT0lOVEVSX1RZUEVfRU5VTVtldi5wb2ludGVyVHlwZV0gfHwgZXYucG9pbnRlclR5cGU7XG4gICAgdmFyIGlzVG91Y2ggPSBwb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9UT1VDSDsgLy8gZ2V0IGluZGV4IG9mIHRoZSBldmVudCBpbiB0aGUgc3RvcmVcblxuICAgIHZhciBzdG9yZUluZGV4ID0gaW5BcnJheShzdG9yZSwgZXYucG9pbnRlcklkLCAncG9pbnRlcklkJyk7IC8vIHN0YXJ0IGFuZCBtb3VzZSBtdXN0IGJlIGRvd25cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiAoZXYuYnV0dG9uID09PSAwIHx8IGlzVG91Y2gpKSB7XG4gICAgICBpZiAoc3RvcmVJbmRleCA8IDApIHtcbiAgICAgICAgc3RvcmUucHVzaChldik7XG4gICAgICAgIHN0b3JlSW5kZXggPSBzdG9yZS5sZW5ndGggLSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICAgIHJlbW92ZVBvaW50ZXIgPSB0cnVlO1xuICAgIH0gLy8gaXQgbm90IGZvdW5kLCBzbyB0aGUgcG9pbnRlciBoYXNuJ3QgYmVlbiBkb3duIChzbyBpdCdzIHByb2JhYmx5IGEgaG92ZXIpXG5cblxuICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gdXBkYXRlIHRoZSBldmVudCBpbiB0aGUgc3RvcmVcblxuXG4gICAgc3RvcmVbc3RvcmVJbmRleF0gPSBldjtcbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgZXZlbnRUeXBlLCB7XG4gICAgICBwb2ludGVyczogc3RvcmUsXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IFtldl0sXG4gICAgICBwb2ludGVyVHlwZTogcG9pbnRlclR5cGUsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcblxuICAgIGlmIChyZW1vdmVQb2ludGVyKSB7XG4gICAgICAvLyByZW1vdmUgZnJvbSB0aGUgc3RvcmVcbiAgICAgIHN0b3JlLnNwbGljZShzdG9yZUluZGV4LCAxKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBvaW50ZXJFdmVudElucHV0O1xufShJbnB1dCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNvbnZlcnQgYXJyYXktbGlrZSBvYmplY3RzIHRvIHJlYWwgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmosIDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB1bmlxdWUgYXJyYXkgd2l0aCBvYmplY3RzIGJhc2VkIG9uIGEga2V5IChsaWtlICdpZCcpIG9yIGp1c3QgYnkgdGhlIGFycmF5J3MgdmFsdWVcbiAqIEBwYXJhbSB7QXJyYXl9IHNyYyBbe2lkOjF9LHtpZDoyfSx7aWQ6MX1dXG4gKiBAcGFyYW0ge1N0cmluZ30gW2tleV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3NvcnQ9RmFsc2VdXG4gKiBAcmV0dXJucyB7QXJyYXl9IFt7aWQ6MX0se2lkOjJ9XVxuICovXG5cbmZ1bmN0aW9uIHVuaXF1ZUFycmF5KHNyYywga2V5LCBzb3J0KSB7XG4gIHZhciByZXN1bHRzID0gW107XG4gIHZhciB2YWx1ZXMgPSBbXTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgIHZhciB2YWwgPSBrZXkgPyBzcmNbaV1ba2V5XSA6IHNyY1tpXTtcblxuICAgIGlmIChpbkFycmF5KHZhbHVlcywgdmFsKSA8IDApIHtcbiAgICAgIHJlc3VsdHMucHVzaChzcmNbaV0pO1xuICAgIH1cblxuICAgIHZhbHVlc1tpXSA9IHZhbDtcbiAgICBpKys7XG4gIH1cblxuICBpZiAoc29ydCkge1xuICAgIGlmICgha2V5KSB7XG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGFba2V5XSA+IGJba2V5XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG52YXIgVE9VQ0hfSU5QVVRfTUFQID0ge1xuICB0b3VjaHN0YXJ0OiBJTlBVVF9TVEFSVCxcbiAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICB0b3VjaGNhbmNlbDogSU5QVVRfQ0FOQ0VMXG59O1xudmFyIFRPVUNIX1RBUkdFVF9FVkVOVFMgPSAndG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogTXVsdGktdXNlciB0b3VjaCBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgVG91Y2hJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRvdWNoSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gVG91Y2hJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBUb3VjaElucHV0LnByb3RvdHlwZS5ldlRhcmdldCA9IFRPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnRhcmdldElkcyA9IHt9OyAvLyB0aGlzLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUb3VjaElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgdHlwZSA9IFRPVUNIX0lOUFVUX01BUFtldi50eXBlXTtcbiAgICB2YXIgdG91Y2hlcyA9IGdldFRvdWNoZXMuY2FsbCh0aGlzLCBldiwgdHlwZSk7XG5cbiAgICBpZiAoIXRvdWNoZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBUb3VjaElucHV0O1xufShJbnB1dCk7XG5cbmZ1bmN0aW9uIGdldFRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgdmFyIGFsbFRvdWNoZXMgPSB0b0FycmF5KGV2LnRvdWNoZXMpO1xuICB2YXIgdGFyZ2V0SWRzID0gdGhpcy50YXJnZXRJZHM7IC8vIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgdG91Y2gsIHRoZSBwcm9jZXNzIGNhbiBiZSBzaW1wbGlmaWVkXG5cbiAgaWYgKHR5cGUgJiAoSU5QVVRfU1RBUlQgfCBJTlBVVF9NT1ZFKSAmJiBhbGxUb3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgIHRhcmdldElkc1thbGxUb3VjaGVzWzBdLmlkZW50aWZpZXJdID0gdHJ1ZTtcbiAgICByZXR1cm4gW2FsbFRvdWNoZXMsIGFsbFRvdWNoZXNdO1xuICB9XG5cbiAgdmFyIGk7XG4gIHZhciB0YXJnZXRUb3VjaGVzO1xuICB2YXIgY2hhbmdlZFRvdWNoZXMgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKTtcbiAgdmFyIGNoYW5nZWRUYXJnZXRUb3VjaGVzID0gW107XG4gIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDsgLy8gZ2V0IHRhcmdldCB0b3VjaGVzIGZyb20gdG91Y2hlc1xuXG4gIHRhcmdldFRvdWNoZXMgPSBhbGxUb3VjaGVzLmZpbHRlcihmdW5jdGlvbiAodG91Y2gpIHtcbiAgICByZXR1cm4gaGFzUGFyZW50KHRvdWNoLnRhcmdldCwgdGFyZ2V0KTtcbiAgfSk7IC8vIGNvbGxlY3QgdG91Y2hlc1xuXG4gIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCB0YXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgdGFyZ2V0SWRzW3RhcmdldFRvdWNoZXNbaV0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgICAgaSsrO1xuICAgIH1cbiAgfSAvLyBmaWx0ZXIgY2hhbmdlZCB0b3VjaGVzIHRvIG9ubHkgY29udGFpbiB0b3VjaGVzIHRoYXQgZXhpc3QgaW4gdGhlIGNvbGxlY3RlZCB0YXJnZXQgaWRzXG5cblxuICBpID0gMDtcblxuICB3aGlsZSAoaSA8IGNoYW5nZWRUb3VjaGVzLmxlbmd0aCkge1xuICAgIGlmICh0YXJnZXRJZHNbY2hhbmdlZFRvdWNoZXNbaV0uaWRlbnRpZmllcl0pIHtcbiAgICAgIGNoYW5nZWRUYXJnZXRUb3VjaGVzLnB1c2goY2hhbmdlZFRvdWNoZXNbaV0pO1xuICAgIH0gLy8gY2xlYW51cCByZW1vdmVkIHRvdWNoZXNcblxuXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgZGVsZXRlIHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXTtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICBpZiAoIWNoYW5nZWRUYXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBbLy8gbWVyZ2UgdGFyZ2V0VG91Y2hlcyB3aXRoIGNoYW5nZWRUYXJnZXRUb3VjaGVzIHNvIGl0IGNvbnRhaW5zIEFMTCB0b3VjaGVzLCBpbmNsdWRpbmcgJ2VuZCcgYW5kICdjYW5jZWwnXG4gIHVuaXF1ZUFycmF5KHRhcmdldFRvdWNoZXMuY29uY2F0KGNoYW5nZWRUYXJnZXRUb3VjaGVzKSwgJ2lkZW50aWZpZXInLCB0cnVlKSwgY2hhbmdlZFRhcmdldFRvdWNoZXNdO1xufVxuXG52YXIgTU9VU0VfSU5QVVRfTUFQID0ge1xuICBtb3VzZWRvd246IElOUFVUX1NUQVJULFxuICBtb3VzZW1vdmU6IElOUFVUX01PVkUsXG4gIG1vdXNldXA6IElOUFVUX0VORFxufTtcbnZhciBNT1VTRV9FTEVNRU5UX0VWRU5UUyA9ICdtb3VzZWRvd24nO1xudmFyIE1PVVNFX1dJTkRPV19FVkVOVFMgPSAnbW91c2Vtb3ZlIG1vdXNldXAnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogTW91c2UgZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIE1vdXNlSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShNb3VzZUlucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIE1vdXNlSW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gTW91c2VJbnB1dC5wcm90b3R5cGU7XG4gICAgcHJvdG8uZXZFbCA9IE1PVVNFX0VMRU1FTlRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gTU9VU0VfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMucHJlc3NlZCA9IGZhbHNlOyAvLyBtb3VzZWRvd24gc3RhdGVcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaGFuZGxlIG1vdXNlIGV2ZW50c1xuICAgKiBAcGFyYW0ge09iamVjdH0gZXZcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTW91c2VJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIGV2ZW50VHlwZSA9IE1PVVNFX0lOUFVUX01BUFtldi50eXBlXTsgLy8gb24gc3RhcnQgd2Ugd2FudCB0byBoYXZlIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBkb3duXG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgZXYuYnV0dG9uID09PSAwKSB7XG4gICAgICB0aGlzLnByZXNzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9NT1ZFICYmIGV2LndoaWNoICE9PSAxKSB7XG4gICAgICBldmVudFR5cGUgPSBJTlBVVF9FTkQ7XG4gICAgfSAvLyBtb3VzZSBtdXN0IGJlIGRvd25cblxuXG4gICAgaWYgKCF0aGlzLnByZXNzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgZXZlbnRUeXBlLCB7XG4gICAgICBwb2ludGVyczogW2V2XSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX01PVVNFLFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE1vdXNlSW5wdXQ7XG59KElucHV0KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ29tYmluZWQgdG91Y2ggYW5kIG1vdXNlIGlucHV0XG4gKlxuICogVG91Y2ggaGFzIGEgaGlnaGVyIHByaW9yaXR5IHRoZW4gbW91c2UsIGFuZCB3aGlsZSB0b3VjaGluZyBubyBtb3VzZSBldmVudHMgYXJlIGFsbG93ZWQuXG4gKiBUaGlzIGJlY2F1c2UgdG91Y2ggZGV2aWNlcyBhbHNvIGVtaXQgbW91c2UgZXZlbnRzIHdoaWxlIGRvaW5nIGEgdG91Y2guXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBERURVUF9USU1FT1VUID0gMjUwMDtcbnZhciBERURVUF9ESVNUQU5DRSA9IDI1O1xuXG5mdW5jdGlvbiBzZXRMYXN0VG91Y2goZXZlbnREYXRhKSB7XG4gIHZhciBfZXZlbnREYXRhJGNoYW5nZWRQb2kgPSBldmVudERhdGEuY2hhbmdlZFBvaW50ZXJzLFxuICAgICAgdG91Y2ggPSBfZXZlbnREYXRhJGNoYW5nZWRQb2lbMF07XG5cbiAgaWYgKHRvdWNoLmlkZW50aWZpZXIgPT09IHRoaXMucHJpbWFyeVRvdWNoKSB7XG4gICAgdmFyIGxhc3RUb3VjaCA9IHtcbiAgICAgIHg6IHRvdWNoLmNsaWVudFgsXG4gICAgICB5OiB0b3VjaC5jbGllbnRZXG4gICAgfTtcbiAgICB2YXIgbHRzID0gdGhpcy5sYXN0VG91Y2hlcztcbiAgICB0aGlzLmxhc3RUb3VjaGVzLnB1c2gobGFzdFRvdWNoKTtcblxuICAgIHZhciByZW1vdmVMYXN0VG91Y2ggPSBmdW5jdGlvbiByZW1vdmVMYXN0VG91Y2goKSB7XG4gICAgICB2YXIgaSA9IGx0cy5pbmRleE9mKGxhc3RUb3VjaCk7XG5cbiAgICAgIGlmIChpID4gLTEpIHtcbiAgICAgICAgbHRzLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2V0VGltZW91dChyZW1vdmVMYXN0VG91Y2gsIERFRFVQX1RJTUVPVVQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlY29yZFRvdWNoZXMoZXZlbnRUeXBlLCBldmVudERhdGEpIHtcbiAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUKSB7XG4gICAgdGhpcy5wcmltYXJ5VG91Y2ggPSBldmVudERhdGEuY2hhbmdlZFBvaW50ZXJzWzBdLmlkZW50aWZpZXI7XG4gICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgIHNldExhc3RUb3VjaC5jYWxsKHRoaXMsIGV2ZW50RGF0YSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTeW50aGV0aWNFdmVudChldmVudERhdGEpIHtcbiAgdmFyIHggPSBldmVudERhdGEuc3JjRXZlbnQuY2xpZW50WDtcbiAgdmFyIHkgPSBldmVudERhdGEuc3JjRXZlbnQuY2xpZW50WTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGFzdFRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdCA9IHRoaXMubGFzdFRvdWNoZXNbaV07XG4gICAgdmFyIGR4ID0gTWF0aC5hYnMoeCAtIHQueCk7XG4gICAgdmFyIGR5ID0gTWF0aC5hYnMoeSAtIHQueSk7XG5cbiAgICBpZiAoZHggPD0gREVEVVBfRElTVEFOQ0UgJiYgZHkgPD0gREVEVVBfRElTVEFOQ0UpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIFRvdWNoTW91c2VJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIHZhciBUb3VjaE1vdXNlSW5wdXQgPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShUb3VjaE1vdXNlSW5wdXQsIF9JbnB1dCk7XG5cbiAgICBmdW5jdGlvbiBUb3VjaE1vdXNlSW5wdXQoX21hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX0lucHV0LmNhbGwodGhpcywgX21hbmFnZXIsIGNhbGxiYWNrKSB8fCB0aGlzO1xuXG4gICAgICBfdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24gKG1hbmFnZXIsIGlucHV0RXZlbnQsIGlucHV0RGF0YSkge1xuICAgICAgICB2YXIgaXNUb3VjaCA9IGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9UT1VDSDtcbiAgICAgICAgdmFyIGlzTW91c2UgPSBpbnB1dERhdGEucG9pbnRlclR5cGUgPT09IElOUFVUX1RZUEVfTU9VU0U7XG5cbiAgICAgICAgaWYgKGlzTW91c2UgJiYgaW5wdXREYXRhLnNvdXJjZUNhcGFiaWxpdGllcyAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzLmZpcmVzVG91Y2hFdmVudHMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gd2hlbiB3ZSdyZSBpbiBhIHRvdWNoIGV2ZW50LCByZWNvcmQgdG91Y2hlcyB0byAgZGUtZHVwZSBzeW50aGV0aWMgbW91c2UgZXZlbnRcblxuXG4gICAgICAgIGlmIChpc1RvdWNoKSB7XG4gICAgICAgICAgcmVjb3JkVG91Y2hlcy5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTW91c2UgJiYgaXNTeW50aGV0aWNFdmVudC5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBpbnB1dERhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuY2FsbGJhY2sobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLnRvdWNoID0gbmV3IFRvdWNoSW5wdXQoX3RoaXMubWFuYWdlciwgX3RoaXMuaGFuZGxlcik7XG4gICAgICBfdGhpcy5tb3VzZSA9IG5ldyBNb3VzZUlucHV0KF90aGlzLm1hbmFnZXIsIF90aGlzLmhhbmRsZXIpO1xuICAgICAgX3RoaXMucHJpbWFyeVRvdWNoID0gbnVsbDtcbiAgICAgIF90aGlzLmxhc3RUb3VjaGVzID0gW107XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogaGFuZGxlIG1vdXNlIGFuZCB0b3VjaCBldmVudHNcbiAgICAgKiBAcGFyYW0ge0hhbW1lcn0gbWFuYWdlclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dEV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgICAqL1xuXG5cbiAgICB2YXIgX3Byb3RvID0gVG91Y2hNb3VzZUlucHV0LnByb3RvdHlwZTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogcmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lcnNcbiAgICAgKi9cbiAgICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLnRvdWNoLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMubW91c2UuZGVzdHJveSgpO1xuICAgIH07XG5cbiAgICByZXR1cm4gVG91Y2hNb3VzZUlucHV0O1xuICB9KElucHV0KTtcblxuICByZXR1cm4gVG91Y2hNb3VzZUlucHV0O1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjcmVhdGUgbmV3IGlucHV0IHR5cGUgbWFuYWdlclxuICogY2FsbGVkIGJ5IHRoZSBNYW5hZ2VyIGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0hhbW1lcn0gbWFuYWdlclxuICogQHJldHVybnMge0lucHV0fVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0SW5zdGFuY2UobWFuYWdlcikge1xuICB2YXIgVHlwZTsgLy8gbGV0IGlucHV0Q2xhc3MgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRDbGFzcztcblxuICB2YXIgaW5wdXRDbGFzcyA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dENsYXNzO1xuXG4gIGlmIChpbnB1dENsYXNzKSB7XG4gICAgVHlwZSA9IGlucHV0Q2xhc3M7XG4gIH0gZWxzZSBpZiAoU1VQUE9SVF9QT0lOVEVSX0VWRU5UUykge1xuICAgIFR5cGUgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgfSBlbHNlIGlmIChTVVBQT1JUX09OTFlfVE9VQ0gpIHtcbiAgICBUeXBlID0gVG91Y2hJbnB1dDtcbiAgfSBlbHNlIGlmICghU1VQUE9SVF9UT1VDSCkge1xuICAgIFR5cGUgPSBNb3VzZUlucHV0O1xuICB9IGVsc2Uge1xuICAgIFR5cGUgPSBUb3VjaE1vdXNlSW5wdXQ7XG4gIH1cblxuICByZXR1cm4gbmV3IFR5cGUobWFuYWdlciwgaW5wdXRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogaWYgdGhlIGFyZ3VtZW50IGlzIGFuIGFycmF5LCB3ZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZuIG9uIGVhY2ggZW50cnlcbiAqIGlmIGl0IGFpbnQgYW4gYXJyYXkgd2UgZG9uJ3Qgd2FudCB0byBkbyBhIHRoaW5nLlxuICogdGhpcyBpcyB1c2VkIGJ5IGFsbCB0aGUgbWV0aG9kcyB0aGF0IGFjY2VwdCBhIHNpbmdsZSBhbmQgYXJyYXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp8QXJyYXl9IGFyZ1xuICogQHBhcmFtIHtTdHJpbmd9IGZuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VBcnJheUFyZyhhcmcsIGZuLCBjb250ZXh0KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICBlYWNoKGFyZywgY29udGV4dFtmbl0sIGNvbnRleHQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgU1RBVEVfUE9TU0lCTEUgPSAxO1xudmFyIFNUQVRFX0JFR0FOID0gMjtcbnZhciBTVEFURV9DSEFOR0VEID0gNDtcbnZhciBTVEFURV9FTkRFRCA9IDg7XG52YXIgU1RBVEVfUkVDT0dOSVpFRCA9IFNUQVRFX0VOREVEO1xudmFyIFNUQVRFX0NBTkNFTExFRCA9IDE2O1xudmFyIFNUQVRFX0ZBSUxFRCA9IDMyO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSB1bmlxdWUgaWRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHVuaXF1ZUlkXG4gKi9cbnZhciBfdW5pcXVlSWQgPSAxO1xuZnVuY3Rpb24gdW5pcXVlSWQoKSB7XG4gIHJldHVybiBfdW5pcXVlSWQrKztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IGEgcmVjb2duaXplciBieSBuYW1lIGlmIGl0IGlzIGJvdW5kIHRvIGEgbWFuYWdlclxuICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gb3RoZXJSZWNvZ25pemVyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAqIEByZXR1cm5zIHtSZWNvZ25pemVyfVxuICovXG5mdW5jdGlvbiBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgcmVjb2duaXplcikge1xuICB2YXIgbWFuYWdlciA9IHJlY29nbml6ZXIubWFuYWdlcjtcblxuICBpZiAobWFuYWdlcikge1xuICAgIHJldHVybiBtYW5hZ2VyLmdldChvdGhlclJlY29nbml6ZXIpO1xuICB9XG5cbiAgcmV0dXJuIG90aGVyUmVjb2duaXplcjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IGEgdXNhYmxlIHN0cmluZywgdXNlZCBhcyBldmVudCBwb3N0Zml4XG4gKiBAcGFyYW0ge2NvbnN0YW50fSBzdGF0ZVxuICogQHJldHVybnMge1N0cmluZ30gc3RhdGVcbiAqL1xuXG5mdW5jdGlvbiBzdGF0ZVN0cihzdGF0ZSkge1xuICBpZiAoc3RhdGUgJiBTVEFURV9DQU5DRUxMRUQpIHtcbiAgICByZXR1cm4gJ2NhbmNlbCc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9FTkRFRCkge1xuICAgIHJldHVybiAnZW5kJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0NIQU5HRUQpIHtcbiAgICByZXR1cm4gJ21vdmUnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQkVHQU4pIHtcbiAgICByZXR1cm4gJ3N0YXJ0JztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUmVjb2duaXplciBmbG93IGV4cGxhaW5lZDsgKlxuICogQWxsIHJlY29nbml6ZXJzIGhhdmUgdGhlIGluaXRpYWwgc3RhdGUgb2YgUE9TU0lCTEUgd2hlbiBhIGlucHV0IHNlc3Npb24gc3RhcnRzLlxuICogVGhlIGRlZmluaXRpb24gb2YgYSBpbnB1dCBzZXNzaW9uIGlzIGZyb20gdGhlIGZpcnN0IGlucHV0IHVudGlsIHRoZSBsYXN0IGlucHV0LCB3aXRoIGFsbCBpdCdzIG1vdmVtZW50IGluIGl0LiAqXG4gKiBFeGFtcGxlIHNlc3Npb24gZm9yIG1vdXNlLWlucHV0OiBtb3VzZWRvd24gLT4gbW91c2Vtb3ZlIC0+IG1vdXNldXBcbiAqXG4gKiBPbiBlYWNoIHJlY29nbml6aW5nIGN5Y2xlIChzZWUgTWFuYWdlci5yZWNvZ25pemUpIHRoZSAucmVjb2duaXplKCkgbWV0aG9kIGlzIGV4ZWN1dGVkXG4gKiB3aGljaCBkZXRlcm1pbmVzIHdpdGggc3RhdGUgaXQgc2hvdWxkIGJlLlxuICpcbiAqIElmIHRoZSByZWNvZ25pemVyIGhhcyB0aGUgc3RhdGUgRkFJTEVELCBDQU5DRUxMRUQgb3IgUkVDT0dOSVpFRCAoZXF1YWxzIEVOREVEKSwgaXQgaXMgcmVzZXQgdG9cbiAqIFBPU1NJQkxFIHRvIGdpdmUgaXQgYW5vdGhlciBjaGFuZ2Ugb24gdGhlIG5leHQgY3ljbGUuXG4gKlxuICogICAgICAgICAgICAgICBQb3NzaWJsZVxuICogICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICstLS0tLSstLS0tLS0tLS0tLS0tLS0rXG4gKiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICstLS0tLSstLS0tLSsgICAgICAgICAgICAgICB8XG4gKiAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICB8XG4gKiAgIEZhaWxlZCAgICAgIENhbmNlbGxlZCAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rLS0tLS0tK1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgIFJlY29nbml6ZWQgICAgICAgQmVnYW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZGVkL1JlY29nbml6ZWRcbiAqL1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSZWNvZ25pemVyXG4gKiBFdmVyeSByZWNvZ25pemVyIG5lZWRzIHRvIGV4dGVuZCBmcm9tIHRoaXMgY2xhc3MuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKi9cblxudmFyIFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe1xuICAgICAgZW5hYmxlOiB0cnVlXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgdGhpcy5pZCA9IHVuaXF1ZUlkKCk7XG4gICAgdGhpcy5tYW5hZ2VyID0gbnVsbDsgLy8gZGVmYXVsdCBpcyBlbmFibGUgdHJ1ZVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIHRoaXMuc2ltdWx0YW5lb3VzID0ge307XG4gICAgdGhpcy5yZXF1aXJlRmFpbCA9IFtdO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtSZWNvZ25pemVyfVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICBhc3NpZ24kMSh0aGlzLm9wdGlvbnMsIG9wdGlvbnMpOyAvLyBhbHNvIHVwZGF0ZSB0aGUgdG91Y2hBY3Rpb24sIGluIGNhc2Ugc29tZXRoaW5nIGNoYW5nZWQgYWJvdXQgdGhlIGRpcmVjdGlvbnMvZW5hYmxlZCBzdGF0ZVxuXG4gICAgdGhpcy5tYW5hZ2VyICYmIHRoaXMubWFuYWdlci50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gcmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAncmVjb2duaXplV2l0aCcsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgc2ltdWx0YW5lb3VzID0gdGhpcy5zaW11bHRhbmVvdXM7XG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuXG4gICAgaWYgKCFzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSkge1xuICAgICAgc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF0gPSBvdGhlclJlY29nbml6ZXI7XG4gICAgICBvdGhlclJlY29nbml6ZXIucmVjb2duaXplV2l0aCh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGRyb3AgdGhlIHNpbXVsdGFuZW91cyBsaW5rLiBpdCBkb2VzbnQgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5kcm9wUmVjb2duaXplV2l0aCA9IGZ1bmN0aW9uIGRyb3BSZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVjb2duaXplV2l0aCcsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgZGVsZXRlIHRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZWNvZ25pemVyIGNhbiBvbmx5IHJ1biB3aGVuIGFuIG90aGVyIGlzIGZhaWxpbmdcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ucmVxdWlyZUZhaWx1cmUgPSBmdW5jdGlvbiByZXF1aXJlRmFpbHVyZShvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAncmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHJlcXVpcmVGYWlsID0gdGhpcy5yZXF1aXJlRmFpbDtcbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG5cbiAgICBpZiAoaW5BcnJheShyZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKSA9PT0gLTEpIHtcbiAgICAgIHJlcXVpcmVGYWlsLnB1c2gob3RoZXJSZWNvZ25pemVyKTtcbiAgICAgIG90aGVyUmVjb2duaXplci5yZXF1aXJlRmFpbHVyZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGRyb3AgdGhlIHJlcXVpcmVGYWlsdXJlIGxpbmsuIGl0IGRvZXMgbm90IHJlbW92ZSB0aGUgbGluayBvbiB0aGUgb3RoZXIgcmVjb2duaXplci5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8uZHJvcFJlcXVpcmVGYWlsdXJlID0gZnVuY3Rpb24gZHJvcFJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuICAgIHZhciBpbmRleCA9IGluQXJyYXkodGhpcy5yZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLnJlcXVpcmVGYWlsLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYXMgcmVxdWlyZSBmYWlsdXJlcyBib29sZWFuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5oYXNSZXF1aXJlRmFpbHVyZXMgPSBmdW5jdGlvbiBoYXNSZXF1aXJlRmFpbHVyZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoID4gMDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGlmIHRoZSByZWNvZ25pemVyIGNhbiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplclxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICovXG5cblxuICBfcHJvdG8uY2FuUmVjb2duaXplV2l0aCA9IGZ1bmN0aW9uIGNhblJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFlvdSBzaG91bGQgdXNlIGB0cnlFbWl0YCBpbnN0ZWFkIG9mIGBlbWl0YCBkaXJlY3RseSB0byBjaGVja1xuICAgKiB0aGF0IGFsbCB0aGUgbmVlZGVkIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQgYmVmb3JlIGVtaXR0aW5nLlxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTtcblxuICAgIGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICAgIHNlbGYubWFuYWdlci5lbWl0KGV2ZW50LCBpbnB1dCk7XG4gICAgfSAvLyAncGFuc3RhcnQnIGFuZCAncGFubW92ZSdcblxuXG4gICAgaWYgKHN0YXRlIDwgU1RBVEVfRU5ERUQpIHtcbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICB9XG5cbiAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCk7IC8vIHNpbXBsZSAnZXZlbnROYW1lJyBldmVudHNcblxuICAgIGlmIChpbnB1dC5hZGRpdGlvbmFsRXZlbnQpIHtcbiAgICAgIC8vIGFkZGl0aW9uYWwgZXZlbnQocGFubGVmdCwgcGFucmlnaHQsIHBpbmNoaW4sIHBpbmNob3V0Li4uKVxuICAgICAgZW1pdChpbnB1dC5hZGRpdGlvbmFsRXZlbnQpO1xuICAgIH0gLy8gcGFuZW5kIGFuZCBwYW5jYW5jZWxcblxuXG4gICAgaWYgKHN0YXRlID49IFNUQVRFX0VOREVEKSB7XG4gICAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCArIHN0YXRlU3RyKHN0YXRlKSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQ2hlY2sgdGhhdCBhbGwgdGhlIHJlcXVpcmUgZmFpbHVyZSByZWNvZ25pemVycyBoYXMgZmFpbGVkLFxuICAgKiBpZiB0cnVlLCBpdCBlbWl0cyBhIGdlc3R1cmUgZXZlbnQsXG4gICAqIG90aGVyd2lzZSwgc2V0dXAgdGhlIHN0YXRlIHRvIEZBSUxFRC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLnRyeUVtaXQgPSBmdW5jdGlvbiB0cnlFbWl0KGlucHV0KSB7XG4gICAgaWYgKHRoaXMuY2FuRW1pdCgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbWl0KGlucHV0KTtcbiAgICB9IC8vIGl0J3MgZmFpbGluZyBhbnl3YXlcblxuXG4gICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbiB3ZSBlbWl0P1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBfcHJvdG8uY2FuRW1pdCA9IGZ1bmN0aW9uIGNhbkVtaXQoKSB7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCkge1xuICAgICAgaWYgKCEodGhpcy5yZXF1aXJlRmFpbFtpXS5zdGF0ZSAmIChTVEFURV9GQUlMRUQgfCBTVEFURV9QT1NTSUJMRSkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogdXBkYXRlIHRoZSByZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgIC8vIG1ha2UgYSBuZXcgY29weSBvZiB0aGUgaW5wdXREYXRhXG4gICAgLy8gc28gd2UgY2FuIGNoYW5nZSB0aGUgaW5wdXREYXRhIHdpdGhvdXQgbWVzc2luZyB1cCB0aGUgb3RoZXIgcmVjb2duaXplcnNcbiAgICB2YXIgaW5wdXREYXRhQ2xvbmUgPSBhc3NpZ24kMSh7fSwgaW5wdXREYXRhKTsgLy8gaXMgaXMgZW5hYmxlZCBhbmQgYWxsb3cgcmVjb2duaXppbmc/XG5cbiAgICBpZiAoIWJvb2xPckZuKHRoaXMub3B0aW9ucy5lbmFibGUsIFt0aGlzLCBpbnB1dERhdGFDbG9uZV0pKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcmVzZXQgd2hlbiB3ZSd2ZSByZWFjaGVkIHRoZSBlbmRcblxuXG4gICAgaWYgKHRoaXMuc3RhdGUgJiAoU1RBVEVfUkVDT0dOSVpFRCB8IFNUQVRFX0NBTkNFTExFRCB8IFNUQVRFX0ZBSUxFRCkpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gdGhpcy5wcm9jZXNzKGlucHV0RGF0YUNsb25lKTsgLy8gdGhlIHJlY29nbml6ZXIgaGFzIHJlY29nbml6ZWQgYSBnZXN0dXJlXG4gICAgLy8gc28gdHJpZ2dlciBhbiBldmVudFxuXG4gICAgaWYgKHRoaXMuc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEIHwgU1RBVEVfRU5ERUQgfCBTVEFURV9DQU5DRUxMRUQpKSB7XG4gICAgICB0aGlzLnRyeUVtaXQoaW5wdXREYXRhQ2xvbmUpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJldHVybiB0aGUgc3RhdGUgb2YgdGhlIHJlY29nbml6ZXJcbiAgICogdGhlIGFjdHVhbCByZWNvZ25pemluZyBoYXBwZW5zIGluIHRoaXMgbWV0aG9kXG4gICAqIEB2aXJ0dWFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICogQHJldHVybnMge2NvbnN0YW50fSBTVEFURVxuICAgKi9cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5cblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXREYXRhKSB7fTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmV0dXJuIHRoZSBwcmVmZXJyZWQgdG91Y2gtYWN0aW9uXG4gICAqIEB2aXJ0dWFsXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG5cblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHt9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FsbGVkIHdoZW4gdGhlIGdlc3R1cmUgaXNuJ3QgYWxsb3dlZCB0byByZWNvZ25pemVcbiAgICogbGlrZSB3aGVuIGFub3RoZXIgaXMgYmVpbmcgcmVjb2duaXplZCBvciBpdCBpcyBkaXNhYmxlZFxuICAgKiBAdmlydHVhbFxuICAgKi9cblxuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge307XG5cbiAgcmV0dXJuIFJlY29nbml6ZXI7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEEgdGFwIGlzIHJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb2luZyBhIHNtYWxsIHRhcC9jbGljay4gTXVsdGlwbGUgdGFwcyBhcmUgcmVjb2duaXplZCBpZiB0aGV5IG9jY3VyXG4gKiBiZXR3ZWVuIHRoZSBnaXZlbiBpbnRlcnZhbCBhbmQgcG9zaXRpb24uIFRoZSBkZWxheSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcmVjb2duaXplIG11bHRpLXRhcHMgd2l0aG91dCBmaXJpbmdcbiAqIGEgc2luZ2xlIHRhcC5cbiAqXG4gKiBUaGUgZXZlbnREYXRhIGZyb20gdGhlIGVtaXR0ZWQgZXZlbnQgY29udGFpbnMgdGhlIHByb3BlcnR5IGB0YXBDb3VudGAsIHdoaWNoIGNvbnRhaW5zIHRoZSBhbW91bnQgb2ZcbiAqIG11bHRpLXRhcHMgYmVpbmcgcmVjb2duaXplZC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBUYXBSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShUYXBSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gVGFwUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3RhcCcsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIHRhcHM6IDEsXG4gICAgICBpbnRlcnZhbDogMzAwLFxuICAgICAgLy8gbWF4IHRpbWUgYmV0d2VlbiB0aGUgbXVsdGktdGFwIHRhcHNcbiAgICAgIHRpbWU6IDI1MCxcbiAgICAgIC8vIG1heCB0aW1lIG9mIHRoZSBwb2ludGVyIHRvIGJlIGRvd24gKGxpa2UgZmluZ2VyIG9uIHRoZSBzY3JlZW4pXG4gICAgICB0aHJlc2hvbGQ6IDksXG4gICAgICAvLyBhIG1pbmltYWwgbW92ZW1lbnQgaXMgb2ssIGJ1dCBrZWVwIGl0IGxvd1xuICAgICAgcG9zVGhyZXNob2xkOiAxMFxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzOyAvLyBwcmV2aW91cyB0aW1lIGFuZCBjZW50ZXIsXG4gICAgLy8gdXNlZCBmb3IgdGFwIGNvdW50aW5nXG5cbiAgICBfdGhpcy5wVGltZSA9IGZhbHNlO1xuICAgIF90aGlzLnBDZW50ZXIgPSBmYWxzZTtcbiAgICBfdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIF90aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgX3RoaXMuY291bnQgPSAwO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUYXBSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9NQU5JUFVMQVRJT05dO1xuICB9O1xuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgIHZhciB2YWxpZFRvdWNoVGltZSA9IGlucHV0LmRlbHRhVGltZSA8IG9wdGlvbnMudGltZTtcbiAgICB0aGlzLnJlc2V0KCk7XG5cbiAgICBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgdGhpcy5jb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICB9IC8vIHdlIG9ubHkgYWxsb3cgbGl0dGxlIG1vdmVtZW50XG4gICAgLy8gYW5kIHdlJ3ZlIHJlYWNoZWQgYW4gZW5kIGV2ZW50LCBzbyBhIHRhcCBpcyBwb3NzaWJsZVxuXG5cbiAgICBpZiAodmFsaWRNb3ZlbWVudCAmJiB2YWxpZFRvdWNoVGltZSAmJiB2YWxpZFBvaW50ZXJzKSB7XG4gICAgICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9PSBJTlBVVF9FTkQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbGlkSW50ZXJ2YWwgPSB0aGlzLnBUaW1lID8gaW5wdXQudGltZVN0YW1wIC0gdGhpcy5wVGltZSA8IG9wdGlvbnMuaW50ZXJ2YWwgOiB0cnVlO1xuICAgICAgdmFyIHZhbGlkTXVsdGlUYXAgPSAhdGhpcy5wQ2VudGVyIHx8IGdldERpc3RhbmNlKHRoaXMucENlbnRlciwgaW5wdXQuY2VudGVyKSA8IG9wdGlvbnMucG9zVGhyZXNob2xkO1xuICAgICAgdGhpcy5wVGltZSA9IGlucHV0LnRpbWVTdGFtcDtcbiAgICAgIHRoaXMucENlbnRlciA9IGlucHV0LmNlbnRlcjtcblxuICAgICAgaWYgKCF2YWxpZE11bHRpVGFwIHx8ICF2YWxpZEludGVydmFsKSB7XG4gICAgICAgIHRoaXMuY291bnQgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb3VudCArPSAxO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbnB1dCA9IGlucHV0OyAvLyBpZiB0YXAgY291bnQgbWF0Y2hlcyB3ZSBoYXZlIHJlY29nbml6ZWQgaXQsXG4gICAgICAvLyBlbHNlIGl0IGhhcyBiZWdhbiByZWNvZ25pemluZy4uLlxuXG4gICAgICB2YXIgdGFwQ291bnQgPSB0aGlzLmNvdW50ICUgb3B0aW9ucy50YXBzO1xuXG4gICAgICBpZiAodGFwQ291bnQgPT09IDApIHtcbiAgICAgICAgLy8gbm8gZmFpbGluZyByZXF1aXJlbWVudHMsIGltbWVkaWF0ZWx5IHRyaWdnZXIgdGhlIHRhcCBldmVudFxuICAgICAgICAvLyBvciB3YWl0IGFzIGxvbmcgYXMgdGhlIG11bHRpdGFwIGludGVydmFsIHRvIHRyaWdnZXJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1JlcXVpcmVGYWlsdXJlcygpKSB7XG4gICAgICAgICAgcmV0dXJuIFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzMi5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG5cbiAgICAgICAgICAgIF90aGlzMi50cnlFbWl0KCk7XG4gICAgICAgICAgfSwgb3B0aW9ucy5pbnRlcnZhbCk7XG4gICAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICBfcHJvdG8uZmFpbFRpbWVvdXQgPSBmdW5jdGlvbiBmYWlsVGltZW91dCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgfSwgdGhpcy5vcHRpb25zLmludGVydmFsKTtcbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICB0aGlzLl9pbnB1dC50YXBDb3VudCA9IHRoaXMuY291bnQ7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsIHRoaXMuX2lucHV0KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFRhcFJlY29nbml6ZXI7XG59KFJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUaGlzIHJlY29nbml6ZXIgaXMganVzdCB1c2VkIGFzIGEgYmFzZSBmb3IgdGhlIHNpbXBsZSBhdHRyaWJ1dGUgcmVjb2duaXplcnMuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuXG52YXIgQXR0clJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKEF0dHJSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gQXR0clJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX1JlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBwb2ludGVyczogMVxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBVc2VkIHRvIGNoZWNrIGlmIGl0IHRoZSByZWNvZ25pemVyIHJlY2VpdmVzIHZhbGlkIGlucHV0LCBsaWtlIGlucHV0LmRpc3RhbmNlID4gMTAuXG4gICAqIEBtZW1iZXJvZiBBdHRyUmVjb2duaXplclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IHJlY29nbml6ZWRcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gQXR0clJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgdmFyIG9wdGlvblBvaW50ZXJzID0gdGhpcy5vcHRpb25zLnBvaW50ZXJzO1xuICAgIHJldHVybiBvcHRpb25Qb2ludGVycyA9PT0gMCB8fCBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvblBvaW50ZXJzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogUHJvY2VzcyB0aGUgaW5wdXQgYW5kIHJldHVybiB0aGUgc3RhdGUgZm9yIHRoZSByZWNvZ25pemVyXG4gICAqIEBtZW1iZXJvZiBBdHRyUmVjb2duaXplclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICogQHJldHVybnMgeyp9IFN0YXRlXG4gICAqL1xuXG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICB2YXIgZXZlbnRUeXBlID0gaW5wdXQuZXZlbnRUeXBlO1xuICAgIHZhciBpc1JlY29nbml6ZWQgPSBzdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQpO1xuICAgIHZhciBpc1ZhbGlkID0gdGhpcy5hdHRyVGVzdChpbnB1dCk7IC8vIG9uIGNhbmNlbCBpbnB1dCBhbmQgd2UndmUgcmVjb2duaXplZCBiZWZvcmUsIHJldHVybiBTVEFURV9DQU5DRUxMRURcblxuICAgIGlmIChpc1JlY29nbml6ZWQgJiYgKGV2ZW50VHlwZSAmIElOUFVUX0NBTkNFTCB8fCAhaXNWYWxpZCkpIHtcbiAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0NBTkNFTExFRDtcbiAgICB9IGVsc2UgaWYgKGlzUmVjb2duaXplZCB8fCBpc1ZhbGlkKSB7XG4gICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0VOREVEO1xuICAgICAgfSBlbHNlIGlmICghKHN0YXRlICYgU1RBVEVfQkVHQU4pKSB7XG4gICAgICAgIHJldHVybiBTVEFURV9CRUdBTjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0hBTkdFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIHJldHVybiBBdHRyUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGRpcmVjdGlvbiBjb25zIHRvIHN0cmluZ1xuICogQHBhcmFtIHtjb25zdGFudH0gZGlyZWN0aW9uXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGRpcmVjdGlvblN0cihkaXJlY3Rpb24pIHtcbiAgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0RPV04pIHtcbiAgICByZXR1cm4gJ2Rvd24nO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX1VQKSB7XG4gICAgcmV0dXJuICd1cCc7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fTEVGVCkge1xuICAgIHJldHVybiAnbGVmdCc7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fUklHSFQpIHtcbiAgICByZXR1cm4gJ3JpZ2h0JztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUGFuXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBhbmQgbW92ZWQgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBQYW5SZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUGFuUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBQYW5SZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3BhbicsXG4gICAgICB0aHJlc2hvbGQ6IDEwLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICBkaXJlY3Rpb246IERJUkVDVElPTl9BTExcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgICBfdGhpcy5wWCA9IG51bGw7XG4gICAgX3RoaXMucFkgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQYW5SZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcbiAgICB2YXIgYWN0aW9ucyA9IFtdO1xuXG4gICAgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICBhY3Rpb25zLnB1c2goVE9VQ0hfQUNUSU9OX1BBTl9ZKTtcbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICBhY3Rpb25zLnB1c2goVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZGlyZWN0aW9uVGVzdCA9IGZ1bmN0aW9uIGRpcmVjdGlvblRlc3QoaW5wdXQpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgaGFzTW92ZWQgPSB0cnVlO1xuICAgIHZhciBkaXN0YW5jZSA9IGlucHV0LmRpc3RhbmNlO1xuICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5kaXJlY3Rpb247XG4gICAgdmFyIHggPSBpbnB1dC5kZWx0YVg7XG4gICAgdmFyIHkgPSBpbnB1dC5kZWx0YVk7IC8vIGxvY2sgdG8gYXhpcz9cblxuICAgIGlmICghKGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uKSkge1xuICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgICAgZGlyZWN0aW9uID0geCA9PT0gMCA/IERJUkVDVElPTl9OT05FIDogeCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgICAgICAgaGFzTW92ZWQgPSB4ICE9PSB0aGlzLnBYO1xuICAgICAgICBkaXN0YW5jZSA9IE1hdGguYWJzKGlucHV0LmRlbHRhWCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXJlY3Rpb24gPSB5ID09PSAwID8gRElSRUNUSU9OX05PTkUgOiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xuICAgICAgICBoYXNNb3ZlZCA9IHkgIT09IHRoaXMucFk7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFZKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgcmV0dXJuIGhhc01vdmVkICYmIGRpc3RhbmNlID4gb3B0aW9ucy50aHJlc2hvbGQgJiYgZGlyZWN0aW9uICYgb3B0aW9ucy5kaXJlY3Rpb247XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICByZXR1cm4gQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmICggLy8gcmVwbGFjZSB3aXRoIGEgc3VwZXIgY2FsbFxuICAgIHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTiB8fCAhKHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTikgJiYgdGhpcy5kaXJlY3Rpb25UZXN0KGlucHV0KSk7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdGhpcy5wWCA9IGlucHV0LmRlbHRhWDtcbiAgICB0aGlzLnBZID0gaW5wdXQuZGVsdGFZO1xuICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25TdHIoaW5wdXQuZGlyZWN0aW9uKTtcblxuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIGlucHV0LmFkZGl0aW9uYWxFdmVudCA9IHRoaXMub3B0aW9ucy5ldmVudCArIGRpcmVjdGlvbjtcbiAgICB9XG5cbiAgICBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFBhblJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogU3dpcGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBtb3ZpbmcgZmFzdCAodmVsb2NpdHkpLCB3aXRoIGVub3VnaCBkaXN0YW5jZSBpbiB0aGUgYWxsb3dlZCBkaXJlY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFN3aXBlUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFN3aXBlUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBTd2lwZVJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdzd2lwZScsXG4gICAgICB0aHJlc2hvbGQ6IDEwLFxuICAgICAgdmVsb2NpdHk6IDAuMyxcbiAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwsXG4gICAgICBwb2ludGVyczogMVxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN3aXBlUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFBhblJlY29nbml6ZXIucHJvdG90eXBlLmdldFRvdWNoQWN0aW9uLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcbiAgICB2YXIgdmVsb2NpdHk7XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgKERJUkVDVElPTl9IT1JJWk9OVEFMIHwgRElSRUNUSU9OX1ZFUlRJQ0FMKSkge1xuICAgICAgdmVsb2NpdHkgPSBpbnB1dC5vdmVyYWxsVmVsb2NpdHk7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgdmVsb2NpdHkgPSBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgZGlyZWN0aW9uICYgaW5wdXQub2Zmc2V0RGlyZWN0aW9uICYmIGlucHV0LmRpc3RhbmNlID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCAmJiBpbnB1dC5tYXhQb2ludGVycyA9PT0gdGhpcy5vcHRpb25zLnBvaW50ZXJzICYmIGFicyh2ZWxvY2l0eSkgPiB0aGlzLm9wdGlvbnMudmVsb2NpdHkgJiYgaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25TdHIoaW5wdXQub2Zmc2V0RGlyZWN0aW9uKTtcblxuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIGRpcmVjdGlvbiwgaW5wdXQpO1xuICAgIH1cblxuICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiBTd2lwZVJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUGluY2hcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVycyBhcmUgbW92aW5nIHRvd2FyZCAoem9vbS1pbikgb3IgYXdheSBmcm9tIGVhY2ggb3RoZXIgKHpvb20tb3V0KS5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgUGluY2hSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUGluY2hSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFBpbmNoUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3BpbmNoJyxcbiAgICAgIHRocmVzaG9sZDogMCxcbiAgICAgIHBvaW50ZXJzOiAyXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUGluY2hSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIChNYXRoLmFicyhpbnB1dC5zY2FsZSAtIDEpID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCB8fCB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIGlmIChpbnB1dC5zY2FsZSAhPT0gMSkge1xuICAgICAgdmFyIGluT3V0ID0gaW5wdXQuc2NhbGUgPCAxID8gJ2luJyA6ICdvdXQnO1xuICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgaW5PdXQ7XG4gICAgfVxuXG4gICAgX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5lbWl0LmNhbGwodGhpcywgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiBQaW5jaFJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUm90YXRlXG4gKiBSZWNvZ25pemVkIHdoZW4gdHdvIG9yIG1vcmUgcG9pbnRlciBhcmUgbW92aW5nIGluIGEgY2lyY3VsYXIgbW90aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBSb3RhdGVSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUm90YXRlUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBSb3RhdGVSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncm90YXRlJyxcbiAgICAgIHRocmVzaG9sZDogMCxcbiAgICAgIHBvaW50ZXJzOiAyXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUm90YXRlUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiAoTWF0aC5hYnMoaW5wdXQucm90YXRpb24pID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCB8fCB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pO1xuICB9O1xuXG4gIHJldHVybiBSb3RhdGVSZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFByZXNzXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBmb3IgeCBtcyB3aXRob3V0IGFueSBtb3ZlbWVudC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBQcmVzc1JlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFByZXNzUmVjb2duaXplciwgX1JlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFByZXNzUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3ByZXNzJyxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgdGltZTogMjUxLFxuICAgICAgLy8gbWluaW1hbCB0aW1lIG9mIHRoZSBwb2ludGVyIHRvIGJlIHByZXNzZWRcbiAgICAgIHRocmVzaG9sZDogOVxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICAgIF90aGlzLl90aW1lciA9IG51bGw7XG4gICAgX3RoaXMuX2lucHV0ID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUHJlc3NSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9BVVRPXTtcbiAgfTtcblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgIHZhciB2YWxpZE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCBvcHRpb25zLnRocmVzaG9sZDtcbiAgICB2YXIgdmFsaWRUaW1lID0gaW5wdXQuZGVsdGFUaW1lID4gb3B0aW9ucy50aW1lO1xuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIHdlIG9ubHkgYWxsb3cgbGl0dGxlIG1vdmVtZW50XG4gICAgLy8gYW5kIHdlJ3ZlIHJlYWNoZWQgYW4gZW5kIGV2ZW50LCBzbyBhIHRhcCBpcyBwb3NzaWJsZVxuXG4gICAgaWYgKCF2YWxpZE1vdmVtZW50IHx8ICF2YWxpZFBvaW50ZXJzIHx8IGlucHV0LmV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmICF2YWxpZFRpbWUpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9IGVsc2UgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX1NUQVJUKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuc3RhdGUgPSBTVEFURV9SRUNPR05JWkVEO1xuXG4gICAgICAgIF90aGlzMi50cnlFbWl0KCk7XG4gICAgICB9LCBvcHRpb25zLnRpbWUpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQgJiYgaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQgKyBcInVwXCIsIGlucHV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsIHRoaXMuX2lucHV0KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFByZXNzUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBpZiBET00gZXZlbnRzIGFyZSBiZWluZyB0cmlnZ2VyZWQuXG4gICAqIEJ1dCB0aGlzIGlzIHNsb3dlciBhbmQgdW51c2VkIGJ5IHNpbXBsZSBpbXBsZW1lbnRhdGlvbnMsIHNvIGRpc2FibGVkIGJ5IGRlZmF1bHQuXG4gICAqIEB0eXBlIHtCb29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZG9tRXZlbnRzOiBmYWxzZSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogVGhlIHZhbHVlIGZvciB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkvZmFsbGJhY2suXG4gICAqIFdoZW4gc2V0IHRvIGBjb21wdXRlYCBpdCB3aWxsIG1hZ2ljYWxseSBzZXQgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIGFkZGVkIHJlY29nbml6ZXJzLlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKiBAZGVmYXVsdCBjb21wdXRlXG4gICAqL1xuICB0b3VjaEFjdGlvbjogVE9VQ0hfQUNUSU9OX0NPTVBVVEUsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtCb29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBlbmFibGU6IHRydWUsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEVYUEVSSU1FTlRBTCBGRUFUVVJFIC0tIGNhbiBiZSByZW1vdmVkL2NoYW5nZWRcbiAgICogQ2hhbmdlIHRoZSBwYXJlbnQgaW5wdXQgdGFyZ2V0IGVsZW1lbnQuXG4gICAqIElmIE51bGwsIHRoZW4gaXQgaXMgYmVpbmcgc2V0IHRoZSB0byBtYWluIGVsZW1lbnQuXG4gICAqIEB0eXBlIHtOdWxsfEV2ZW50VGFyZ2V0fVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBpbnB1dFRhcmdldDogbnVsbCxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZm9yY2UgYW4gaW5wdXQgY2xhc3NcbiAgICogQHR5cGUge051bGx8RnVuY3Rpb259XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGlucHV0Q2xhc3M6IG51bGwsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFNvbWUgQ1NTIHByb3BlcnRpZXMgY2FuIGJlIHVzZWQgdG8gaW1wcm92ZSB0aGUgd29ya2luZyBvZiBIYW1tZXIuXG4gICAqIEFkZCB0aGVtIHRvIHRoaXMgbWV0aG9kIGFuZCB0aGV5IHdpbGwgYmUgc2V0IHdoZW4gY3JlYXRpbmcgYSBuZXcgTWFuYWdlci5cbiAgICogQG5hbWVzcGFjZVxuICAgKi9cbiAgY3NzUHJvcHM6IHtcbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGVzIHRleHQgc2VsZWN0aW9uIHRvIGltcHJvdmUgdGhlIGRyYWdnaW5nIGdlc3R1cmUuIE1haW5seSBmb3IgZGVza3RvcCBicm93c2Vycy5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlIHRoZSBXaW5kb3dzIFBob25lIGdyaXBwZXJzIHdoZW4gcHJlc3NpbmcgYW4gZWxlbWVudC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHRvdWNoU2VsZWN0OiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZXMgdGhlIGRlZmF1bHQgY2FsbG91dCBzaG93biB3aGVuIHlvdSB0b3VjaCBhbmQgaG9sZCBhIHRvdWNoIHRhcmdldC5cbiAgICAgKiBPbiBpT1MsIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0IHN1Y2ggYXMgYSBsaW5rLCBTYWZhcmkgZGlzcGxheXNcbiAgICAgKiBhIGNhbGxvdXQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGluay4gVGhpcyBwcm9wZXJ0eSBhbGxvd3MgeW91IHRvIGRpc2FibGUgdGhhdCBjYWxsb3V0LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdG91Y2hDYWxsb3V0OiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgem9vbWluZyBpcyBlbmFibGVkLiBVc2VkIGJ5IElFMTA+XG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICBjb250ZW50Wm9vbWluZzogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIFNwZWNpZmllcyB0aGF0IGFuIGVudGlyZSBlbGVtZW50IHNob3VsZCBiZSBkcmFnZ2FibGUgaW5zdGVhZCBvZiBpdHMgY29udGVudHMuIE1haW5seSBmb3IgZGVza3RvcCBicm93c2Vycy5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHVzZXJEcmFnOiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogT3ZlcnJpZGVzIHRoZSBoaWdobGlnaHQgY29sb3Igc2hvd24gd2hlbiB0aGUgdXNlciB0YXBzIGEgbGluayBvciBhIEphdmFTY3JpcHRcbiAgICAgKiBjbGlja2FibGUgZWxlbWVudCBpbiBpT1MuIFRoaXMgcHJvcGVydHkgb2JleXMgdGhlIGFscGhhIHZhbHVlLCBpZiBzcGVjaWZpZWQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAncmdiYSgwLDAsMCwwKSdcbiAgICAgKi9cbiAgICB0YXBIaWdobGlnaHRDb2xvcjogXCJyZ2JhKDAsMCwwLDApXCJcbiAgfVxufTtcbi8qKlxuICogQHByaXZhdGVcbiAqIERlZmF1bHQgcmVjb2duaXplciBzZXR1cCB3aGVuIGNhbGxpbmcgYEhhbW1lcigpYFxuICogV2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyIHRoZXNlIHdpbGwgYmUgc2tpcHBlZC5cbiAqIFRoaXMgaXMgc2VwYXJhdGVkIHdpdGggb3RoZXIgZGVmYXVsdHMgYmVjYXVzZSBvZiB0cmVlLXNoYWtpbmcuXG4gKiBAdHlwZSB7QXJyYXl9XG4gKi9cblxudmFyIHByZXNldCA9IFtbUm90YXRlUmVjb2duaXplciwge1xuICBlbmFibGU6IGZhbHNlXG59XSwgW1BpbmNoUmVjb2duaXplciwge1xuICBlbmFibGU6IGZhbHNlXG59LCBbJ3JvdGF0ZSddXSwgW1N3aXBlUmVjb2duaXplciwge1xuICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG59XSwgW1BhblJlY29nbml6ZXIsIHtcbiAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTFxufSwgWydzd2lwZSddXSwgW1RhcFJlY29nbml6ZXJdLCBbVGFwUmVjb2duaXplciwge1xuICBldmVudDogJ2RvdWJsZXRhcCcsXG4gIHRhcHM6IDJcbn0sIFsndGFwJ11dLCBbUHJlc3NSZWNvZ25pemVyXV07XG5cbnZhciBTVE9QID0gMTtcbnZhciBGT1JDRURfU1RPUCA9IDI7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBhZGQvcmVtb3ZlIHRoZSBjc3MgcHJvcGVydGllcyBhcyBkZWZpbmVkIGluIG1hbmFnZXIub3B0aW9ucy5jc3NQcm9wc1xuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGFkZFxuICovXG5cbmZ1bmN0aW9uIHRvZ2dsZUNzc1Byb3BzKG1hbmFnZXIsIGFkZCkge1xuICB2YXIgZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcblxuICBpZiAoIWVsZW1lbnQuc3R5bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcHJvcDtcbiAgZWFjaChtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgIHByb3AgPSBwcmVmaXhlZChlbGVtZW50LnN0eWxlLCBuYW1lKTtcblxuICAgIGlmIChhZGQpIHtcbiAgICAgIG1hbmFnZXIub2xkQ3NzUHJvcHNbcHJvcF0gPSBlbGVtZW50LnN0eWxlW3Byb3BdO1xuICAgICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSB8fCBcIlwiO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKCFhZGQpIHtcbiAgICBtYW5hZ2VyLm9sZENzc1Byb3BzID0ge307XG4gIH1cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqIHRyaWdnZXIgZG9tIGV2ZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gKi9cblxuXG5mdW5jdGlvbiB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpIHtcbiAgdmFyIGdlc3R1cmVFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gIGdlc3R1cmVFdmVudC5pbml0RXZlbnQoZXZlbnQsIHRydWUsIHRydWUpO1xuICBnZXN0dXJlRXZlbnQuZ2VzdHVyZSA9IGRhdGE7XG4gIGRhdGEudGFyZ2V0LmRpc3BhdGNoRXZlbnQoZ2VzdHVyZUV2ZW50KTtcbn1cbi8qKlxuKiBAcHJpdmF0ZVxuICogTWFuYWdlclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxuXG52YXIgTWFuYWdlciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE1hbmFnZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBhc3NpZ24kMSh7fSwgZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuICAgIHRoaXMub3B0aW9ucy5pbnB1dFRhcmdldCA9IHRoaXMub3B0aW9ucy5pbnB1dFRhcmdldCB8fCBlbGVtZW50O1xuICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICB0aGlzLnNlc3Npb24gPSB7fTtcbiAgICB0aGlzLnJlY29nbml6ZXJzID0gW107XG4gICAgdGhpcy5vbGRDc3NQcm9wcyA9IHt9O1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5pbnB1dCA9IGNyZWF0ZUlucHV0SW5zdGFuY2UodGhpcyk7XG4gICAgdGhpcy50b3VjaEFjdGlvbiA9IG5ldyBUb3VjaEFjdGlvbih0aGlzLCB0aGlzLm9wdGlvbnMudG91Y2hBY3Rpb24pO1xuICAgIHRvZ2dsZUNzc1Byb3BzKHRoaXMsIHRydWUpO1xuICAgIGVhY2godGhpcy5vcHRpb25zLnJlY29nbml6ZXJzLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIHJlY29nbml6ZXIgPSBfdGhpcy5hZGQobmV3IGl0ZW1bMF0oaXRlbVsxXSkpO1xuXG4gICAgICBpdGVtWzJdICYmIHJlY29nbml6ZXIucmVjb2duaXplV2l0aChpdGVtWzJdKTtcbiAgICAgIGl0ZW1bM10gJiYgcmVjb2duaXplci5yZXF1aXJlRmFpbHVyZShpdGVtWzNdKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge01hbmFnZXJ9XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IE1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQob3B0aW9ucykge1xuICAgIGFzc2lnbiQxKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7IC8vIE9wdGlvbnMgdGhhdCBuZWVkIGEgbGl0dGxlIG1vcmUgc2V0dXBcblxuICAgIGlmIChvcHRpb25zLnRvdWNoQWN0aW9uKSB7XG4gICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmlucHV0VGFyZ2V0KSB7XG4gICAgICAvLyBDbGVhbiB1cCBleGlzdGluZyBldmVudCBsaXN0ZW5lcnMgYW5kIHJlaW5pdGlhbGl6ZVxuICAgICAgdGhpcy5pbnB1dC5kZXN0cm95KCk7XG4gICAgICB0aGlzLmlucHV0LnRhcmdldCA9IG9wdGlvbnMuaW5wdXRUYXJnZXQ7XG4gICAgICB0aGlzLmlucHV0LmluaXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHN0b3AgcmVjb2duaXppbmcgZm9yIHRoaXMgc2Vzc2lvbi5cbiAgICogVGhpcyBzZXNzaW9uIHdpbGwgYmUgZGlzY2FyZGVkLCB3aGVuIGEgbmV3IFtpbnB1dF1zdGFydCBldmVudCBpcyBmaXJlZC5cbiAgICogV2hlbiBmb3JjZWQsIHRoZSByZWNvZ25pemVyIGN5Y2xlIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHkuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2ZvcmNlXVxuICAgKi9cblxuXG4gIF9wcm90by5zdG9wID0gZnVuY3Rpb24gc3RvcChmb3JjZSkge1xuICAgIHRoaXMuc2Vzc2lvbi5zdG9wcGVkID0gZm9yY2UgPyBGT1JDRURfU1RPUCA6IFNUT1A7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBydW4gdGhlIHJlY29nbml6ZXJzIVxuICAgKiBjYWxsZWQgYnkgdGhlIGlucHV0SGFuZGxlciBmdW5jdGlvbiBvbiBldmVyeSBtb3ZlbWVudCBvZiB0aGUgcG9pbnRlcnMgKHRvdWNoZXMpXG4gICAqIGl0IHdhbGtzIHRocm91Z2ggYWxsIHRoZSByZWNvZ25pemVycyBhbmQgdHJpZXMgdG8gZGV0ZWN0IHRoZSBnZXN0dXJlIHRoYXQgaXMgYmVpbmcgbWFkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZSA9IGZ1bmN0aW9uIHJlY29nbml6ZShpbnB1dERhdGEpIHtcbiAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcblxuICAgIGlmIChzZXNzaW9uLnN0b3BwZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHJ1biB0aGUgdG91Y2gtYWN0aW9uIHBvbHlmaWxsXG5cblxuICAgIHRoaXMudG91Y2hBY3Rpb24ucHJldmVudERlZmF1bHRzKGlucHV0RGF0YSk7XG4gICAgdmFyIHJlY29nbml6ZXI7XG4gICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVyczsgLy8gdGhpcyBob2xkcyB0aGUgcmVjb2duaXplciB0aGF0IGlzIGJlaW5nIHJlY29nbml6ZWQuXG4gICAgLy8gc28gdGhlIHJlY29nbml6ZXIncyBzdGF0ZSBuZWVkcyB0byBiZSBCRUdBTiwgQ0hBTkdFRCwgRU5ERUQgb3IgUkVDT0dOSVpFRFxuICAgIC8vIGlmIG5vIHJlY29nbml6ZXIgaXMgZGV0ZWN0aW5nIGEgdGhpbmcsIGl0IGlzIHNldCB0byBgbnVsbGBcblxuICAgIHZhciBjdXJSZWNvZ25pemVyID0gc2Vzc2lvbi5jdXJSZWNvZ25pemVyOyAvLyByZXNldCB3aGVuIHRoZSBsYXN0IHJlY29nbml6ZXIgaXMgcmVjb2duaXplZFxuICAgIC8vIG9yIHdoZW4gd2UncmUgaW4gYSBuZXcgc2Vzc2lvblxuXG4gICAgaWYgKCFjdXJSZWNvZ25pemVyIHx8IGN1clJlY29nbml6ZXIgJiYgY3VyUmVjb2duaXplci5zdGF0ZSAmIFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHNlc3Npb24uY3VyUmVjb2duaXplciA9IG51bGw7XG4gICAgICBjdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHJlY29nbml6ZXJzLmxlbmd0aCkge1xuICAgICAgcmVjb2duaXplciA9IHJlY29nbml6ZXJzW2ldOyAvLyBmaW5kIG91dCBpZiB3ZSBhcmUgYWxsb3dlZCB0cnkgdG8gcmVjb2duaXplIHRoZSBpbnB1dCBmb3IgdGhpcyBvbmUuXG4gICAgICAvLyAxLiAgIGFsbG93IGlmIHRoZSBzZXNzaW9uIGlzIE5PVCBmb3JjZWQgc3RvcHBlZCAoc2VlIHRoZSAuc3RvcCgpIG1ldGhvZClcbiAgICAgIC8vIDIuICAgYWxsb3cgaWYgd2Ugc3RpbGwgaGF2ZW4ndCByZWNvZ25pemVkIGEgZ2VzdHVyZSBpbiB0aGlzIHNlc3Npb24sIG9yIHRoZSB0aGlzIHJlY29nbml6ZXIgaXMgdGhlIG9uZVxuICAgICAgLy8gICAgICB0aGF0IGlzIGJlaW5nIHJlY29nbml6ZWQuXG4gICAgICAvLyAzLiAgIGFsbG93IGlmIHRoZSByZWNvZ25pemVyIGlzIGFsbG93ZWQgdG8gcnVuIHNpbXVsdGFuZW91cyB3aXRoIHRoZSBjdXJyZW50IHJlY29nbml6ZWQgcmVjb2duaXplci5cbiAgICAgIC8vICAgICAgdGhpcyBjYW4gYmUgc2V0dXAgd2l0aCB0aGUgYHJlY29nbml6ZVdpdGgoKWAgbWV0aG9kIG9uIHRoZSByZWNvZ25pemVyLlxuXG4gICAgICBpZiAoc2Vzc2lvbi5zdG9wcGVkICE9PSBGT1JDRURfU1RPUCAmJiAoIC8vIDFcbiAgICAgICFjdXJSZWNvZ25pemVyIHx8IHJlY29nbml6ZXIgPT09IGN1clJlY29nbml6ZXIgfHwgLy8gMlxuICAgICAgcmVjb2duaXplci5jYW5SZWNvZ25pemVXaXRoKGN1clJlY29nbml6ZXIpKSkge1xuICAgICAgICAvLyAzXG4gICAgICAgIHJlY29nbml6ZXIucmVjb2duaXplKGlucHV0RGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNvZ25pemVyLnJlc2V0KCk7XG4gICAgICB9IC8vIGlmIHRoZSByZWNvZ25pemVyIGhhcyBiZWVuIHJlY29nbml6aW5nIHRoZSBpbnB1dCBhcyBhIHZhbGlkIGdlc3R1cmUsIHdlIHdhbnQgdG8gc3RvcmUgdGhpcyBvbmUgYXMgdGhlXG4gICAgICAvLyBjdXJyZW50IGFjdGl2ZSByZWNvZ25pemVyLiBidXQgb25seSBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4gYWN0aXZlIHJlY29nbml6ZXJcblxuXG4gICAgICBpZiAoIWN1clJlY29nbml6ZXIgJiYgcmVjb2duaXplci5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCkpIHtcbiAgICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgICAgY3VyUmVjb2duaXplciA9IHJlY29nbml6ZXI7XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBnZXQgYSByZWNvZ25pemVyIGJ5IGl0cyBldmVudCBuYW1lLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE51bGx9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmdldCA9IGZ1bmN0aW9uIGdldChyZWNvZ25pemVyKSB7XG4gICAgaWYgKHJlY29nbml6ZXIgaW5zdGFuY2VvZiBSZWNvZ25pemVyKSB7XG4gICAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgICB9XG5cbiAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWNvZ25pemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlY29nbml6ZXJzW2ldLm9wdGlvbnMuZXZlbnQgPT09IHJlY29nbml6ZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlY29nbml6ZXJzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgYWRkIGEgcmVjb2duaXplciB0byB0aGUgbWFuYWdlclxuICAgKiBleGlzdGluZyByZWNvZ25pemVycyB3aXRoIHRoZSBzYW1lIGV2ZW50IG5hbWUgd2lsbCBiZSByZW1vdmVkXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gcmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxNYW5hZ2VyfVxuICAgKi9cblxuXG4gIF9wcm90by5hZGQgPSBmdW5jdGlvbiBhZGQocmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhyZWNvZ25pemVyLCBcImFkZFwiLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSAvLyByZW1vdmUgZXhpc3RpbmdcblxuXG4gICAgdmFyIGV4aXN0aW5nID0gdGhpcy5nZXQocmVjb2duaXplci5vcHRpb25zLmV2ZW50KTtcblxuICAgIGlmIChleGlzdGluZykge1xuICAgICAgdGhpcy5yZW1vdmUoZXhpc3RpbmcpO1xuICAgIH1cblxuICAgIHRoaXMucmVjb2duaXplcnMucHVzaChyZWNvZ25pemVyKTtcbiAgICByZWNvZ25pemVyLm1hbmFnZXIgPSB0aGlzO1xuICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgcmV0dXJuIHJlY29nbml6ZXI7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZW1vdmUgYSByZWNvZ25pemVyIGJ5IG5hbWUgb3IgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gcmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICovXG5cblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKHJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgXCJyZW1vdmVcIiwgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRSZWNvZ25pemVyID0gdGhpcy5nZXQocmVjb2duaXplcik7IC8vIGxldCdzIG1ha2Ugc3VyZSB0aGlzIHJlY29nbml6ZXIgZXhpc3RzXG5cbiAgICBpZiAocmVjb2duaXplcikge1xuICAgICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcbiAgICAgIHZhciBpbmRleCA9IGluQXJyYXkocmVjb2duaXplcnMsIHRhcmdldFJlY29nbml6ZXIpO1xuXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHJlY29nbml6ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBiaW5kIGV2ZW50XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICAgKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLm9uID0gZnVuY3Rpb24gb24oZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkIHx8IGhhbmRsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaGFuZGxlcnNbZXZlbnRdID0gaGFuZGxlcnNbZXZlbnRdIHx8IFtdO1xuICAgICAgaGFuZGxlcnNbZXZlbnRdLnB1c2goaGFuZGxlcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSB1bmJpbmQgZXZlbnQsIGxlYXZlIGVtaXQgYmxhbmsgdG8gcmVtb3ZlIGFsbCBoYW5kbGVyc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtoYW5kbGVyXVxuICAgKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLm9mZiA9IGZ1bmN0aW9uIG9mZihldmVudHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgZWFjaChzcGxpdFN0cihldmVudHMpLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICBkZWxldGUgaGFuZGxlcnNbZXZlbnRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlcnNbZXZlbnRdICYmIGhhbmRsZXJzW2V2ZW50XS5zcGxpY2UoaW5BcnJheShoYW5kbGVyc1tldmVudF0sIGhhbmRsZXIpLCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIGVtaXQgZXZlbnQgdG8gdGhlIGxpc3RlbmVyc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICovXG5cblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGRhdGEpIHtcbiAgICAvLyB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dlciBkb20gZXZlbnRzXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kb21FdmVudHMpIHtcbiAgICAgIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSk7XG4gICAgfSAvLyBubyBoYW5kbGVycywgc28gc2tpcCBpdCBhbGxcblxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc1tldmVudF0gJiYgdGhpcy5oYW5kbGVyc1tldmVudF0uc2xpY2UoKTtcblxuICAgIGlmICghaGFuZGxlcnMgfHwgIWhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGEudHlwZSA9IGV2ZW50O1xuXG4gICAgZGF0YS5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRhdGEuc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgIGhhbmRsZXJzW2ldKGRhdGEpO1xuICAgICAgaSsrO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGRlc3Ryb3kgdGhlIG1hbmFnZXIgYW5kIHVuYmluZHMgYWxsIGV2ZW50c1xuICAgKiBpdCBkb2Vzbid0IHVuYmluZCBkb20gZXZlbnRzLCB0aGF0IGlzIHRoZSB1c2VyIG93biByZXNwb25zaWJpbGl0eVxuICAgKi9cblxuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmVsZW1lbnQgJiYgdG9nZ2xlQ3NzUHJvcHModGhpcywgZmFsc2UpO1xuICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICB0aGlzLnNlc3Npb24gPSB7fTtcbiAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICB0aGlzLmVsZW1lbnQgPSBudWxsO1xuICB9O1xuXG4gIHJldHVybiBNYW5hZ2VyO1xufSgpO1xuXG52YXIgU0lOR0xFX1RPVUNIX0lOUFVUX01BUCA9IHtcbiAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gIHRvdWNobW92ZTogSU5QVVRfTU9WRSxcbiAgdG91Y2hlbmQ6IElOUFVUX0VORCxcbiAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcbnZhciBTSU5HTEVfVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0JztcbnZhciBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBUb3VjaCBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgU2luZ2xlVG91Y2hJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKFNpbmdsZVRvdWNoSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gU2luZ2xlVG91Y2hJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBTaW5nbGVUb3VjaElucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldlRhcmdldCA9IFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gU0lOR0xFX1RPVUNIX1dJTkRPV19FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU2luZ2xlVG91Y2hJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHR5cGUgPSBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBzaG91bGQgd2UgaGFuZGxlIHRoZSB0b3VjaCBldmVudHM/XG5cbiAgICBpZiAodHlwZSA9PT0gSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdG91Y2hlcyA9IG5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMuY2FsbCh0aGlzLCBldiwgdHlwZSk7IC8vIHdoZW4gZG9uZSwgcmVzZXQgdGhlIHN0YXJ0ZWQgc3RhdGVcblxuICAgIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgdG91Y2hlc1swXS5sZW5ndGggLSB0b3VjaGVzWzFdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIHR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiB0b3VjaGVzWzFdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gU2luZ2xlVG91Y2hJbnB1dDtcbn0oSW5wdXQpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVTaW5nbGVUb3VjaGVzKGV2LCB0eXBlKSB7XG4gIHZhciBhbGwgPSB0b0FycmF5KGV2LnRvdWNoZXMpO1xuICB2YXIgY2hhbmdlZCA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpO1xuXG4gIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICBhbGwgPSB1bmlxdWVBcnJheShhbGwuY29uY2F0KGNoYW5nZWQpLCAnaWRlbnRpZmllcicsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIFthbGwsIGNoYW5nZWRdO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3cmFwIGEgbWV0aG9kIHdpdGggYSBkZXByZWNhdGlvbiB3YXJuaW5nIGFuZCBzdGFjayB0cmFjZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBuZXcgZnVuY3Rpb24gd3JhcHBpbmcgdGhlIHN1cHBsaWVkIG1ldGhvZC5cbiAqL1xuZnVuY3Rpb24gZGVwcmVjYXRlKG1ldGhvZCwgbmFtZSwgbWVzc2FnZSkge1xuICB2YXIgZGVwcmVjYXRpb25NZXNzYWdlID0gXCJERVBSRUNBVEVEIE1FVEhPRDogXCIgKyBuYW1lICsgXCJcXG5cIiArIG1lc3NhZ2UgKyBcIiBBVCBcXG5cIjtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZSA9IG5ldyBFcnJvcignZ2V0LXN0YWNrLXRyYWNlJyk7XG4gICAgdmFyIHN0YWNrID0gZSAmJiBlLnN0YWNrID8gZS5zdGFjay5yZXBsYWNlKC9eW15cXChdKz9bXFxuJF0vZ20sICcnKS5yZXBsYWNlKC9eXFxzK2F0XFxzKy9nbSwgJycpLnJlcGxhY2UoL15PYmplY3QuPGFub255bW91cz5cXHMqXFwoL2dtLCAne2Fub255bW91c30oKUAnKSA6ICdVbmtub3duIFN0YWNrIFRyYWNlJztcbiAgICB2YXIgbG9nID0gd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLndhcm4gfHwgd2luZG93LmNvbnNvbGUubG9nKTtcblxuICAgIGlmIChsb2cpIHtcbiAgICAgIGxvZy5jYWxsKHdpbmRvdy5jb25zb2xlLCBkZXByZWNhdGlvbk1lc3NhZ2UsIHN0YWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGV4dGVuZCBvYmplY3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgaW4gZGVzdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBvbmVzIGluIHNyYy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXN0XG4gKiBAcGFyYW0ge09iamVjdH0gc3JjXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFttZXJnZT1mYWxzZV1cbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xuXG52YXIgZXh0ZW5kID0gZGVwcmVjYXRlKGZ1bmN0aW9uIChkZXN0LCBzcmMsIG1lcmdlKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwga2V5cy5sZW5ndGgpIHtcbiAgICBpZiAoIW1lcmdlIHx8IG1lcmdlICYmIGRlc3Rba2V5c1tpXV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVzdFtrZXlzW2ldXSA9IHNyY1trZXlzW2ldXTtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn0sICdleHRlbmQnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBtZXJnZSB0aGUgdmFsdWVzIGZyb20gc3JjIGluIHRoZSBkZXN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIHRoYXQgZXhpc3QgaW4gZGVzdCB3aWxsIG5vdCBiZSBvdmVyd3JpdHRlbiBieSBzcmNcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXN0XG4gKiBAcGFyYW0ge09iamVjdH0gc3JjXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBkZXN0XG4gKi9cblxudmFyIG1lcmdlID0gZGVwcmVjYXRlKGZ1bmN0aW9uIChkZXN0LCBzcmMpIHtcbiAgcmV0dXJuIGV4dGVuZChkZXN0LCBzcmMsIHRydWUpO1xufSwgJ21lcmdlJywgJ1VzZSBgYXNzaWduYC4nKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc2ltcGxlIGNsYXNzIGluaGVyaXRhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGlsZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYmFzZVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXVxuICovXG5cbmZ1bmN0aW9uIGluaGVyaXQoY2hpbGQsIGJhc2UsIHByb3BlcnRpZXMpIHtcbiAgdmFyIGJhc2VQID0gYmFzZS5wcm90b3R5cGU7XG4gIHZhciBjaGlsZFA7XG4gIGNoaWxkUCA9IGNoaWxkLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYmFzZVApO1xuICBjaGlsZFAuY29uc3RydWN0b3IgPSBjaGlsZDtcbiAgY2hpbGRQLl9zdXBlciA9IGJhc2VQO1xuXG4gIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgYXNzaWduJDEoY2hpbGRQLCBwcm9wZXJ0aWVzKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzaW1wbGUgZnVuY3Rpb24gYmluZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGJpbmRGbihmbiwgY29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm91bmRGbigpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogU2ltcGxlIHdheSB0byBjcmVhdGUgYSBtYW5hZ2VyIHdpdGggYSBkZWZhdWx0IHNldCBvZiByZWNvZ25pemVycy5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBIYW1tZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICB2YXIgSGFtbWVyID1cbiAgLyoqXG4gICAgKiBAcHJpdmF0ZVxuICAgICogQGNvbnN0IHtzdHJpbmd9XG4gICAgKi9cbiAgZnVuY3Rpb24gSGFtbWVyKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNYW5hZ2VyKGVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgIHJlY29nbml6ZXJzOiBwcmVzZXQuY29uY2F0KClcbiAgICB9LCBvcHRpb25zKSk7XG4gIH07XG5cbiAgSGFtbWVyLlZFUlNJT04gPSBcIjIuMC4xNy1yY1wiO1xuICBIYW1tZXIuRElSRUNUSU9OX0FMTCA9IERJUkVDVElPTl9BTEw7XG4gIEhhbW1lci5ESVJFQ1RJT05fRE9XTiA9IERJUkVDVElPTl9ET1dOO1xuICBIYW1tZXIuRElSRUNUSU9OX0xFRlQgPSBESVJFQ1RJT05fTEVGVDtcbiAgSGFtbWVyLkRJUkVDVElPTl9SSUdIVCA9IERJUkVDVElPTl9SSUdIVDtcbiAgSGFtbWVyLkRJUkVDVElPTl9VUCA9IERJUkVDVElPTl9VUDtcbiAgSGFtbWVyLkRJUkVDVElPTl9IT1JJWk9OVEFMID0gRElSRUNUSU9OX0hPUklaT05UQUw7XG4gIEhhbW1lci5ESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVkVSVElDQUw7XG4gIEhhbW1lci5ESVJFQ1RJT05fTk9ORSA9IERJUkVDVElPTl9OT05FO1xuICBIYW1tZXIuRElSRUNUSU9OX0RPV04gPSBESVJFQ1RJT05fRE9XTjtcbiAgSGFtbWVyLklOUFVUX1NUQVJUID0gSU5QVVRfU1RBUlQ7XG4gIEhhbW1lci5JTlBVVF9NT1ZFID0gSU5QVVRfTU9WRTtcbiAgSGFtbWVyLklOUFVUX0VORCA9IElOUFVUX0VORDtcbiAgSGFtbWVyLklOUFVUX0NBTkNFTCA9IElOUFVUX0NBTkNFTDtcbiAgSGFtbWVyLlNUQVRFX1BPU1NJQkxFID0gU1RBVEVfUE9TU0lCTEU7XG4gIEhhbW1lci5TVEFURV9CRUdBTiA9IFNUQVRFX0JFR0FOO1xuICBIYW1tZXIuU1RBVEVfQ0hBTkdFRCA9IFNUQVRFX0NIQU5HRUQ7XG4gIEhhbW1lci5TVEFURV9FTkRFRCA9IFNUQVRFX0VOREVEO1xuICBIYW1tZXIuU1RBVEVfUkVDT0dOSVpFRCA9IFNUQVRFX1JFQ09HTklaRUQ7XG4gIEhhbW1lci5TVEFURV9DQU5DRUxMRUQgPSBTVEFURV9DQU5DRUxMRUQ7XG4gIEhhbW1lci5TVEFURV9GQUlMRUQgPSBTVEFURV9GQUlMRUQ7XG4gIEhhbW1lci5NYW5hZ2VyID0gTWFuYWdlcjtcbiAgSGFtbWVyLklucHV0ID0gSW5wdXQ7XG4gIEhhbW1lci5Ub3VjaEFjdGlvbiA9IFRvdWNoQWN0aW9uO1xuICBIYW1tZXIuVG91Y2hJbnB1dCA9IFRvdWNoSW5wdXQ7XG4gIEhhbW1lci5Nb3VzZUlucHV0ID0gTW91c2VJbnB1dDtcbiAgSGFtbWVyLlBvaW50ZXJFdmVudElucHV0ID0gUG9pbnRlckV2ZW50SW5wdXQ7XG4gIEhhbW1lci5Ub3VjaE1vdXNlSW5wdXQgPSBUb3VjaE1vdXNlSW5wdXQ7XG4gIEhhbW1lci5TaW5nbGVUb3VjaElucHV0ID0gU2luZ2xlVG91Y2hJbnB1dDtcbiAgSGFtbWVyLlJlY29nbml6ZXIgPSBSZWNvZ25pemVyO1xuICBIYW1tZXIuQXR0clJlY29nbml6ZXIgPSBBdHRyUmVjb2duaXplcjtcbiAgSGFtbWVyLlRhcCA9IFRhcFJlY29nbml6ZXI7XG4gIEhhbW1lci5QYW4gPSBQYW5SZWNvZ25pemVyO1xuICBIYW1tZXIuU3dpcGUgPSBTd2lwZVJlY29nbml6ZXI7XG4gIEhhbW1lci5QaW5jaCA9IFBpbmNoUmVjb2duaXplcjtcbiAgSGFtbWVyLlJvdGF0ZSA9IFJvdGF0ZVJlY29nbml6ZXI7XG4gIEhhbW1lci5QcmVzcyA9IFByZXNzUmVjb2duaXplcjtcbiAgSGFtbWVyLm9uID0gYWRkRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5vZmYgPSByZW1vdmVFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLmVhY2ggPSBlYWNoO1xuICBIYW1tZXIubWVyZ2UgPSBtZXJnZTtcbiAgSGFtbWVyLmV4dGVuZCA9IGV4dGVuZDtcbiAgSGFtbWVyLmJpbmRGbiA9IGJpbmRGbjtcbiAgSGFtbWVyLmFzc2lnbiA9IGFzc2lnbiQxO1xuICBIYW1tZXIuaW5oZXJpdCA9IGluaGVyaXQ7XG4gIEhhbW1lci5iaW5kRm4gPSBiaW5kRm47XG4gIEhhbW1lci5wcmVmaXhlZCA9IHByZWZpeGVkO1xuICBIYW1tZXIudG9BcnJheSA9IHRvQXJyYXk7XG4gIEhhbW1lci5pbkFycmF5ID0gaW5BcnJheTtcbiAgSGFtbWVyLnVuaXF1ZUFycmF5ID0gdW5pcXVlQXJyYXk7XG4gIEhhbW1lci5zcGxpdFN0ciA9IHNwbGl0U3RyO1xuICBIYW1tZXIuYm9vbE9yRm4gPSBib29sT3JGbjtcbiAgSGFtbWVyLmhhc1BhcmVudCA9IGhhc1BhcmVudDtcbiAgSGFtbWVyLmFkZEV2ZW50TGlzdGVuZXJzID0gYWRkRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5yZW1vdmVFdmVudExpc3RlbmVycyA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIuZGVmYXVsdHMgPSBhc3NpZ24kMSh7fSwgZGVmYXVsdHMsIHtcbiAgICBwcmVzZXQ6IHByZXNldFxuICB9KTtcbiAgcmV0dXJuIEhhbW1lcjtcbn0oKTtcblxuLy8gIHN0eWxlIGxvYWRlciBidXQgYnkgc2NyaXB0IHRhZywgbm90IGJ5IHRoZSBsb2FkZXIuXG5cbnZhciBkZWZhdWx0cyQxID0gSGFtbWVyLmRlZmF1bHRzO1xuXG5leHBvcnQgZGVmYXVsdCBIYW1tZXI7XG5leHBvcnQgeyBJTlBVVF9TVEFSVCwgSU5QVVRfTU9WRSwgSU5QVVRfRU5ELCBJTlBVVF9DQU5DRUwsIFNUQVRFX1BPU1NJQkxFLCBTVEFURV9CRUdBTiwgU1RBVEVfQ0hBTkdFRCwgU1RBVEVfRU5ERUQsIFNUQVRFX1JFQ09HTklaRUQsIFNUQVRFX0NBTkNFTExFRCwgU1RBVEVfRkFJTEVELCBESVJFQ1RJT05fTk9ORSwgRElSRUNUSU9OX0xFRlQsIERJUkVDVElPTl9SSUdIVCwgRElSRUNUSU9OX1VQLCBESVJFQ1RJT05fRE9XTiwgRElSRUNUSU9OX0hPUklaT05UQUwsIERJUkVDVElPTl9WRVJUSUNBTCwgRElSRUNUSU9OX0FMTCwgTWFuYWdlciwgSW5wdXQsIFRvdWNoQWN0aW9uLCBUb3VjaElucHV0LCBNb3VzZUlucHV0LCBQb2ludGVyRXZlbnRJbnB1dCwgVG91Y2hNb3VzZUlucHV0LCBTaW5nbGVUb3VjaElucHV0LCBSZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwgVGFwUmVjb2duaXplciBhcyBUYXAsIFBhblJlY29nbml6ZXIgYXMgUGFuLCBTd2lwZVJlY29nbml6ZXIgYXMgU3dpcGUsIFBpbmNoUmVjb2duaXplciBhcyBQaW5jaCwgUm90YXRlUmVjb2duaXplciBhcyBSb3RhdGUsIFByZXNzUmVjb2duaXplciBhcyBQcmVzcywgYWRkRXZlbnRMaXN0ZW5lcnMgYXMgb24sIHJlbW92ZUV2ZW50TGlzdGVuZXJzIGFzIG9mZiwgZWFjaCwgbWVyZ2UsIGV4dGVuZCwgYXNzaWduJDEgYXMgYXNzaWduLCBpbmhlcml0LCBiaW5kRm4sIHByZWZpeGVkLCB0b0FycmF5LCBpbkFycmF5LCB1bmlxdWVBcnJheSwgc3BsaXRTdHIsIGJvb2xPckZuLCBoYXNQYXJlbnQsIGFkZEV2ZW50TGlzdGVuZXJzLCByZW1vdmVFdmVudExpc3RlbmVycywgZGVmYXVsdHMkMSBhcyBkZWZhdWx0cyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFtbWVyLmVzbS5qcy5tYXBcbiIsICIvKipcbiAqIHZpcy11dGlsXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdmlzanMvdmlzLXV0aWxcbiAqXG4gKiB1dGlsaXRpZSBjb2xsZWN0aW9uIGZvciB2aXNqc1xuICpcbiAqIEB2ZXJzaW9uIDUuMC43XG4gKiBAZGF0ZSAgICAyMDIzLTExLTIwVDA5OjA2OjUxLjA2N1pcbiAqXG4gKiBAY29weXJpZ2h0IChjKSAyMDExLTIwMTcgQWxtZW5kZSBCLlYsIGh0dHA6Ly9hbG1lbmRlLmNvbVxuICogQGNvcHlyaWdodCAoYykgMjAxNy0yMDE5IHZpc2pzIGNvbnRyaWJ1dG9ycywgaHR0cHM6Ly9naXRodWIuY29tL3Zpc2pzXG4gKlxuICogQGxpY2Vuc2VcbiAqIHZpcy5qcyBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIGJvdGhcbiAqXG4gKiAgIDEuIFRoZSBBcGFjaGUgMi4wIExpY2Vuc2VcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogICBhbmRcbiAqXG4gKiAgIDIuIFRoZSBNSVQgTGljZW5zZVxuICogICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4gKlxuICogdmlzLmpzIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBlaXRoZXIgbGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgRW1pdHRlciBmcm9tICdjb21wb25lbnQtZW1pdHRlcic7XG5pbXBvcnQgUmVhbEhhbW1lciBmcm9tICdAZWdqcy9oYW1tZXJqcyc7XG5cbi8qKlxyXG4gKiBVc2UgdGhpcyBzeW1ib2wgdG8gZGVsZXRlIHByb3BlcmllcyBpbiBkZWVwT2JqZWN0QXNzaWduLlxyXG4gKi9cclxuY29uc3QgREVMRVRFID0gU3ltYm9sKFwiREVMRVRFXCIpO1xyXG4vKipcclxuICogUHVyZSB2ZXJzaW9uIG9mIGRlZXBPYmplY3RBc3NpZ24sIGl0IGRvZXNuJ3QgbW9kaWZ5IGFueSBvZiBpdCdzIGFyZ3VtZW50cy5cclxuICpcclxuICogQHBhcmFtIGJhc2UgLSBUaGUgYmFzZSBvYmplY3QgdGhhdCBmdWxsZmlscyB0aGUgd2hvbGUgaW50ZXJmYWNlIFQuXHJcbiAqIEBwYXJhbSB1cGRhdGVzIC0gVXBkYXRlcyB0aGF0IG1heSBjaGFuZ2Ugb3IgZGVsZXRlIHByb3BzLlxyXG4gKiBAcmV0dXJucyBBIGJyYW5kIG5ldyBpbnN0YW5jZSB3aXRoIGFsbCB0aGUgc3VwcGxpZWQgb2JqZWN0cyBkZWVwbHkgbWVyZ2VkLlxyXG4gKi9cclxuZnVuY3Rpb24gcHVyZURlZXBPYmplY3RBc3NpZ24oYmFzZSwgLi4udXBkYXRlcykge1xyXG4gICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ24oe30sIGJhc2UsIC4uLnVwZGF0ZXMpO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIHZlcnNpb24gb2Ygb2JqZWN0IGFzc2lnbiB3aXRoIGFkZGl0aW9uYWwgZGVsZXRpbmcgYnkgdGhlIERFTEVURSBzeW1ib2wuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3RzIHRvIGJlIGRlZXBseSBtZXJnZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBvYmplY3QgZnJvbSB2YWx1ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwT2JqZWN0QXNzaWduKC4uLnZhbHVlcykge1xyXG4gICAgY29uc3QgbWVyZ2VkID0gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KC4uLnZhbHVlcyk7XHJcbiAgICBzdHJpcERlbGV0ZShtZXJnZWQpO1xyXG4gICAgcmV0dXJuIG1lcmdlZDtcclxufVxyXG4vKipcclxuICogRGVlcCB2ZXJzaW9uIG9mIG9iamVjdCBhc3NpZ24gd2l0aCBhZGRpdGlvbmFsIGRlbGV0aW5nIGJ5IHRoZSBERUxFVEUgc3ltYm9sLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBUaGlzIGRvZXNuJ3Qgc3RyaXAgdGhlIERFTEVURSBzeW1ib2xzIHNvIHRoZXkgbWF5IGVuZCB1cCBpbiB0aGUgZmluYWwgb2JqZWN0LlxyXG4gKiBAcGFyYW0gdmFsdWVzIC0gT2JqZWN0cyB0byBiZSBkZWVwbHkgbWVyZ2VkLlxyXG4gKiBAcmV0dXJucyBUaGUgZmlyc3Qgb2JqZWN0IGZyb20gdmFsdWVzLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KC4uLnZhbHVlcykge1xyXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeShkZWVwT2JqZWN0QXNzaWduKHZhbHVlc1swXSwgdmFsdWVzWzFdKSwgLi4udmFsdWVzLnNsaWNlKDIpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGEgPSB2YWx1ZXNbMF07XHJcbiAgICBjb25zdCBiID0gdmFsdWVzWzFdO1xyXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgYS5zZXRUaW1lKGIuZ2V0VGltZSgpKTtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBSZWZsZWN0Lm93bktleXMoYikpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChiLCBwcm9wKSkgO1xyXG4gICAgICAgIGVsc2UgaWYgKGJbcHJvcF0gPT09IERFTEVURSkge1xyXG4gICAgICAgICAgICBkZWxldGUgYVtwcm9wXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYVtwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICBiW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBhW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBiW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGFbcHJvcF0pICYmXHJcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoYVtwcm9wXSwgYltwcm9wXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gY2xvbmUoYltwcm9wXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgY2xvbmUgZ2l2ZW4gb2JqZWN0IG9yIGFycmF5LiBJbiBjYXNlIG9mIHByaW1pdGl2ZSBzaW1wbHkgcmV0dXJuLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIEFueXRoaW5nLlxyXG4gKiBAcmV0dXJucyBEZWVwIGNsb25lZCBvYmplY3QvYXJyYXkgb3IgdW5jaGFuZ2VkIGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBjbG9uZShhKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xyXG4gICAgICAgIHJldHVybiBhLm1hcCgodmFsdWUpID0+IGNsb25lKHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJvYmplY3RcIiAmJiBhICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShhLmdldFRpbWUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoe30sIGEpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFN0cmlwIERFTEVURSBmcm9tIGdpdmVuIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIGEgLSBPYmplY3Qgd2hpY2ggbWF5IGNvbnRhaW4gREVMRVRFIGJ1dCB3b24ndCBhZnRlciB0aGlzIGlzIGV4ZWN1dGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gc3RyaXBEZWxldGUoYSkge1xyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5rZXlzKGEpKSB7XHJcbiAgICAgICAgaWYgKGFbcHJvcF0gPT09IERFTEVURSkge1xyXG4gICAgICAgICAgICBkZWxldGUgYVtwcm9wXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiYgYVtwcm9wXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzdHJpcERlbGV0ZShhW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuLyoqXHJcbiAqIFNlZWRhYmxlLCBmYXN0IGFuZCByZWFzb25hYmx5IGdvb2QgKG5vdCBjcnlwdG8gYnV0IG1vcmUgdGhhbiBva2F5IGZvciBvdXJcclxuICogbmVlZHMpIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBBZGFwdGVkIGZyb20ge0BsaW5rIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDExMDQyOTEwMDczNi9odHRwOi8vYmFhZ29lLmNvbTo4MC9lbi9SYW5kb21NdXNpbmdzL2phdmFzY3JpcHR9LlxyXG4gKiBPcmlnaW5hbCBhbGdvcml0aG0gY3JlYXRlZCBieSBKb2hhbm5lcyBCYWFnw7hlIFxcPGJhYWdvZVxcQGJhYWdvZS5jb21cXD4gaW4gMjAxMC5cclxuICovXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBzZWVkZWQgcHNldWRvIHJhbmRvbSBnZW5lcmF0b3IgYmFzZWQgb24gQWxlYSBieSBKb2hhbm5lcyBCYWFnw7hlLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIEFsbCBzdXBwbGllZCBhcmd1bWVudHMgd2lsbCBiZSB1c2VkIGFzIGEgc2VlZC4gSW4gY2FzZSBub3RoaW5nXHJcbiAqIGlzIHN1cHBsaWVkIHRoZSBjdXJyZW50IHRpbWUgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIGdlbmVyYXRvci5cclxuICogQHJldHVybnMgQSByZWFkeSB0byB1c2Ugc2VlZGVkIGdlbmVyYXRvci5cclxuICovXHJcbmZ1bmN0aW9uIEFsZWEoLi4uc2VlZCkge1xyXG4gICAgcmV0dXJuIEFsZWFJbXBsZW1lbnRhdGlvbihzZWVkLmxlbmd0aCA/IHNlZWQgOiBbRGF0ZS5ub3coKV0pO1xyXG59XHJcbi8qKlxyXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBbW0FsZWFdXSB3aXRob3V0IHVzZXIgaW5wdXQgdmFsaWRhdGlvbi5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBUaGUgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCB0byBzZWVkIHRoZSBnZW5lcmF0b3IuXHJcbiAqIEByZXR1cm5zIEEgcmVhZHkgdG8gdXNlIHNlZWRlZCBnZW5lcmF0b3IuXHJcbiAqL1xyXG5mdW5jdGlvbiBBbGVhSW1wbGVtZW50YXRpb24oc2VlZCkge1xyXG4gICAgbGV0IFtzMCwgczEsIHMyXSA9IG1hc2hTZWVkKHNlZWQpO1xyXG4gICAgbGV0IGMgPSAxO1xyXG4gICAgY29uc3QgcmFuZG9tID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHQgPSAyMDkxNjM5ICogczAgKyBjICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcclxuICAgICAgICBzMCA9IHMxO1xyXG4gICAgICAgIHMxID0gczI7XHJcbiAgICAgICAgcmV0dXJuIChzMiA9IHQgLSAoYyA9IHQgfCAwKSk7XHJcbiAgICB9O1xyXG4gICAgcmFuZG9tLnVpbnQzMiA9ICgpID0+IHJhbmRvbSgpICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcclxuICAgIHJhbmRvbS5mcmFjdDUzID0gKCkgPT4gcmFuZG9tKCkgKyAoKHJhbmRvbSgpICogMHgyMDAwMDApIHwgMCkgKiAxLjExMDIyMzAyNDYyNTE1NjVlLTE2OyAvLyAyXi01M1xyXG4gICAgcmFuZG9tLmFsZ29yaXRobSA9IFwiQWxlYVwiO1xyXG4gICAgcmFuZG9tLnNlZWQgPSBzZWVkO1xyXG4gICAgcmFuZG9tLnZlcnNpb24gPSBcIjAuOVwiO1xyXG4gICAgcmV0dXJuIHJhbmRvbTtcclxufVxyXG4vKipcclxuICogVHVybiBhcmJpdHJhcnkgZGF0YSBpbnRvIHZhbHVlcyBbW0FsZWFJbXBsZW1lbnRhdGlvbl1dIGNhbiB1c2UgdG8gZ2VuZXJhdGVcclxuICogcmFuZG9tIG51bWJlcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gQXJiaXRyYXJ5IGRhdGEgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlZWQuXHJcbiAqIEByZXR1cm5zIFRocmVlIG51bWJlcnMgdG8gdXNlIGFzIGluaXRpYWwgdmFsdWVzIGZvciBbW0FsZWFJbXBsZW1lbnRhdGlvbl1dLlxyXG4gKi9cclxuZnVuY3Rpb24gbWFzaFNlZWQoLi4uc2VlZCkge1xyXG4gICAgY29uc3QgbWFzaCA9IE1hc2goKTtcclxuICAgIGxldCBzMCA9IG1hc2goXCIgXCIpO1xyXG4gICAgbGV0IHMxID0gbWFzaChcIiBcIik7XHJcbiAgICBsZXQgczIgPSBtYXNoKFwiIFwiKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VlZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHMwIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMwIDwgMCkge1xyXG4gICAgICAgICAgICBzMCArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzMSAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMSA8IDApIHtcclxuICAgICAgICAgICAgczEgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgczIgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczIgPCAwKSB7XHJcbiAgICAgICAgICAgIHMyICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtzMCwgczEsIHMyXTtcclxufVxyXG4vKipcclxuICogQ3JlYXRlIGEgbmV3IG1hc2ggZnVuY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm5zIEEgbm9ucHVyZSBmdW5jdGlvbiB0aGF0IHRha2VzIGFyYml0cmFyeSBbW01hc2hhYmxlXV0gZGF0YSBhbmQgdHVybnNcclxuICogdGhlbSBpbnRvIG51bWJlcnMuXHJcbiAqL1xyXG5mdW5jdGlvbiBNYXNoKCkge1xyXG4gICAgbGV0IG4gPSAweGVmYzgyNDlkO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyaW5nID0gZGF0YS50b1N0cmluZygpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG4gKz0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgICAgIGxldCBoID0gMC4wMjUxOTYwMzI4MjQxNjkzOCAqIG47XHJcbiAgICAgICAgICAgIG4gPSBoID4+PiAwO1xyXG4gICAgICAgICAgICBoIC09IG47XHJcbiAgICAgICAgICAgIGggKj0gbjtcclxuICAgICAgICAgICAgbiA9IGggPj4+IDA7XHJcbiAgICAgICAgICAgIGggLT0gbjtcclxuICAgICAgICAgICAgbiArPSBoICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChuID4+PiAwKSAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXHJcbiAgICB9O1xyXG59XG5cbi8qKlxuICogU2V0dXAgYSBtb2NrIGhhbW1lci5qcyBvYmplY3QsIGZvciB1bml0IHRlc3RpbmcuXG4gKlxuICogSW5zcGlyYXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS91YmVyL2RlY2suZ2wvcHVsbC82NThcbiAqXG4gKiBAcmV0dXJucyB7e29uOiBub29wLCBvZmY6IG5vb3AsIGRlc3Ryb3k6IG5vb3AsIGVtaXQ6IG5vb3AsIGdldDogZ2V0fX1cbiAqL1xuZnVuY3Rpb24gaGFtbWVyTW9jaygpIHtcbiAgY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4gIHJldHVybiB7XG4gICAgb246IG5vb3AsXG4gICAgb2ZmOiBub29wLFxuICAgIGRlc3Ryb3k6IG5vb3AsXG4gICAgZW1pdDogbm9vcCxcblxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldDogbm9vcCxcbiAgICAgIH07XG4gICAgfSxcbiAgfTtcbn1cblxuY29uc3QgSGFtbWVyJDEgPVxuICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgPyB3aW5kb3cuSGFtbWVyIHx8IFJlYWxIYW1tZXJcbiAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gaGFtbWVyLmpzIGlzIG9ubHkgYXZhaWxhYmxlIGluIGEgYnJvd3Nlciwgbm90IGluIG5vZGUuanMuIFJlcGxhY2luZyBpdCB3aXRoIGEgbW9jayBvYmplY3QuXG4gICAgICAgIHJldHVybiBoYW1tZXJNb2NrKCk7XG4gICAgICB9O1xuXG4vKipcbiAqIFR1cm4gYW4gZWxlbWVudCBpbnRvIGFuIGNsaWNrVG9Vc2UgZWxlbWVudC5cbiAqIFdoZW4gbm90IGFjdGl2ZSwgdGhlIGVsZW1lbnQgaGFzIGEgdHJhbnNwYXJlbnQgb3ZlcmxheS4gV2hlbiB0aGUgb3ZlcmxheSBpc1xuICogY2xpY2tlZCwgdGhlIG1vZGUgaXMgY2hhbmdlZCB0byBhY3RpdmUuXG4gKiBXaGVuIGFjdGl2ZSwgdGhlIGVsZW1lbnQgaXMgZGlzcGxheWVkIHdpdGggYSBibHVlIGJvcmRlciBhcm91bmQgaXQsIGFuZFxuICogdGhlIGludGVyYWN0aXZlIGNvbnRlbnRzIG9mIHRoZSBlbGVtZW50IGNhbiBiZSB1c2VkLiBXaGVuIGNsaWNrZWQgb3V0c2lkZVxuICogdGhlIGVsZW1lbnQsIHRoZSBlbGVtZW50cyBtb2RlIGlzIGNoYW5nZWQgdG8gaW5hY3RpdmUuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAqIEBjbGFzcyBBY3RpdmF0b3JcbiAqL1xuZnVuY3Rpb24gQWN0aXZhdG9yJDEoY29udGFpbmVyKSB7XG4gIHRoaXMuX2NsZWFudXBRdWV1ZSA9IFtdO1xuXG4gIHRoaXMuYWN0aXZlID0gZmFsc2U7XG5cbiAgdGhpcy5fZG9tID0ge1xuICAgIGNvbnRhaW5lcixcbiAgICBvdmVybGF5OiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICB9O1xuXG4gIHRoaXMuX2RvbS5vdmVybGF5LmNsYXNzTGlzdC5hZGQoXCJ2aXMtb3ZlcmxheVwiKTtcblxuICB0aGlzLl9kb20uY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgIHRoaXMuX2RvbS5vdmVybGF5LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZG9tLm92ZXJsYXkpO1xuICB9KTtcblxuICBjb25zdCBoYW1tZXIgPSBIYW1tZXIkMSh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIGhhbW1lci5vbihcInRhcFwiLCB0aGlzLl9vblRhcE92ZXJsYXkuYmluZCh0aGlzKSk7XG4gIHRoaXMuX2NsZWFudXBRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICBoYW1tZXIuZGVzdHJveSgpO1xuICAgIC8vIEZJWE1FOiBjbGVhbmluZyB1cCBoYW1tZXIgaW5zdGFuY2VzIGRvZXNuJ3Qgd29yayAoVGltZWxpbmUgbm90IHJlbW92ZWRcbiAgICAvLyBmcm9tIG1lbW9yeSlcbiAgfSk7XG5cbiAgLy8gYmxvY2sgYWxsIHRvdWNoIGV2ZW50cyAoZXhjZXB0IHRhcClcbiAgY29uc3QgZXZlbnRzID0gW1xuICAgIFwidGFwXCIsXG4gICAgXCJkb3VibGV0YXBcIixcbiAgICBcInByZXNzXCIsXG4gICAgXCJwaW5jaFwiLFxuICAgIFwicGFuXCIsXG4gICAgXCJwYW5zdGFydFwiLFxuICAgIFwicGFubW92ZVwiLFxuICAgIFwicGFuZW5kXCIsXG4gIF07XG4gIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgIGhhbW1lci5vbihldmVudCwgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5zcmNFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gYXR0YWNoIGEgY2xpY2sgZXZlbnQgdG8gdGhlIHdpbmRvdywgaW4gb3JkZXIgdG8gZGVhY3RpdmF0ZSB3aGVuIGNsaWNraW5nIG91dHNpZGUgdGhlIHRpbWVsaW5lXG4gIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5ib2R5KSB7XG4gICAgdGhpcy5fb25DbGljayA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKCFfaGFzUGFyZW50KGV2ZW50LnRhcmdldCwgY29udGFpbmVyKSkge1xuICAgICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX29uQ2xpY2spO1xuICAgIHRoaXMuX2NsZWFudXBRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX29uQ2xpY2spO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gcHJlcGFyZSBlc2NhcGUga2V5IGxpc3RlbmVyIGZvciBkZWFjdGl2YXRpbmcgd2hlbiBhY3RpdmVcbiAgdGhpcy5fZXNjTGlzdGVuZXIgPSAoZXZlbnQpID0+IHtcbiAgICBpZiAoXG4gICAgICBcImtleVwiIGluIGV2ZW50XG4gICAgICAgID8gZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiXG4gICAgICAgIDogZXZlbnQua2V5Q29kZSA9PT0gMjcgLyogdGhlIGtleUNvZGUgaXMgZm9yIElFMTEgKi9cbiAgICApIHtcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgIH1cbiAgfTtcbn1cblxuLy8gdHVybiBpbnRvIGFuIGV2ZW50IGVtaXR0ZXJcbkVtaXR0ZXIoQWN0aXZhdG9yJDEucHJvdG90eXBlKTtcblxuLy8gVGhlIGN1cnJlbnRseSBhY3RpdmUgYWN0aXZhdG9yXG5BY3RpdmF0b3IkMS5jdXJyZW50ID0gbnVsbDtcblxuLyoqXG4gKiBEZXN0cm95IHRoZSBhY3RpdmF0b3IuIENsZWFucyB1cCBhbGwgY3JlYXRlZCBET00gYW5kIGV2ZW50IGxpc3RlbmVyc1xuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5kZWFjdGl2YXRlKCk7XG5cbiAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLl9jbGVhbnVwUXVldWUuc3BsaWNlKDApLnJldmVyc2UoKSkge1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cbn07XG5cbi8qKlxuICogQWN0aXZhdGUgdGhlIGVsZW1lbnRcbiAqIE92ZXJsYXkgaXMgaGlkZGVuLCBlbGVtZW50IGlzIGRlY29yYXRlZCB3aXRoIGEgYmx1ZSBzaGFkb3cgYm9yZGVyXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gd2UgYWxsb3cgb25seSBvbmUgYWN0aXZlIGFjdGl2YXRvciBhdCBhIHRpbWVcbiAgaWYgKEFjdGl2YXRvciQxLmN1cnJlbnQpIHtcbiAgICBBY3RpdmF0b3IkMS5jdXJyZW50LmRlYWN0aXZhdGUoKTtcbiAgfVxuICBBY3RpdmF0b3IkMS5jdXJyZW50ID0gdGhpcztcblxuICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gIHRoaXMuX2RvbS5vdmVybGF5LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgdGhpcy5fZG9tLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwidmlzLWFjdGl2ZVwiKTtcblxuICB0aGlzLmVtaXQoXCJjaGFuZ2VcIik7XG4gIHRoaXMuZW1pdChcImFjdGl2YXRlXCIpO1xuXG4gIC8vIHVnbHkgaGFjazogYmluZCBFU0MgYWZ0ZXIgZW1pdHRpbmcgdGhlIGV2ZW50cywgYXMgdGhlIE5ldHdvcmsgcmViaW5kcyBhbGxcbiAgLy8ga2V5Ym9hcmQgZXZlbnRzIG9uIGEgJ2NoYW5nZScgZXZlbnRcbiAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLl9lc2NMaXN0ZW5lcik7XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGUgdGhlIGVsZW1lbnRcbiAqIE92ZXJsYXkgaXMgZGlzcGxheWVkIG9uIHRvcCBvZiB0aGUgZWxlbWVudFxuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgdGhpcy5fZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgdGhpcy5fZG9tLmNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwidmlzLWFjdGl2ZVwiKTtcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLl9lc2NMaXN0ZW5lcik7XG5cbiAgdGhpcy5lbWl0KFwiY2hhbmdlXCIpO1xuICB0aGlzLmVtaXQoXCJkZWFjdGl2YXRlXCIpO1xufTtcblxuLyoqXG4gKiBIYW5kbGUgYSB0YXAgZXZlbnQ6IGFjdGl2YXRlIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5fb25UYXBPdmVybGF5ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIC8vIGFjdGl2YXRlIHRoZSBjb250YWluZXJcbiAgdGhpcy5hY3RpdmF0ZSgpO1xuICBldmVudC5zcmNFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn07XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyB0aGUgcmVxdWVzdGVkIHBhcmVudCBlbGVtZW50IHNvbWV3aGVyZSBpblxuICogaXRzIGNoYWluIG9mIHBhcmVudCBub2Rlcy5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYXJlbnRcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgcGFyZW50IGlzIGZvdW5kIHNvbWV3aGVyZSBpbiB0aGVcbiAqICAgICAgICAgICAgICAgICAgICBjaGFpbiBvZiBwYXJlbnQgbm9kZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xuICB3aGlsZSAoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50ID09PSBwYXJlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gdXRpbGl0eSBmdW5jdGlvbnNcclxuLy8gcGFyc2UgQVNQLk5ldCBEYXRlIHBhdHRlcm4sXHJcbi8vIGZvciBleGFtcGxlICcvRGF0ZSgxMTk4OTA4NzE3MDU2KS8nIG9yICcvRGF0ZSgxMTk4OTA4NzE3MDU2LTA3MDApLydcclxuLy8gY29kZSBmcm9tIGh0dHA6Ly9tb21lbnRqcy5jb20vXHJcbmNvbnN0IEFTUERhdGVSZWdleCA9IC9eXFwvP0RhdGVcXCgoLT9cXGQrKS9pO1xyXG4vLyBDb2xvciBSRXNcclxuY29uc3QgZnVsbEhleFJFID0gL14jPyhbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KSQvaTtcclxuY29uc3Qgc2hvcnRIZXhSRSA9IC9eIz8oW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkkL2k7XHJcbmNvbnN0IHJnYlJFID0gL15yZ2JcXCggKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKlxcKSQvaTtcclxuY29uc3QgcmdiYVJFID0gL15yZ2JhXFwoICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooWzAxXXwwP1xcLlxcZCspICpcXCkkL2k7XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgbnVtYmVyLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgbnVtYmVyLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIjtcclxufVxyXG4vKipcclxuICogUmVtb3ZlIGV2ZXJ5dGhpbmcgaW4gdGhlIERPTSBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBET01vYmplY3QgLSBOb2RlIHdob3NlIGNoaWxkIG5vZGVzIHdpbGwgYmUgcmVjdXJzaXZlbHkgZGVsZXRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHJlY3Vyc2l2ZURPTURlbGV0ZShET01vYmplY3QpIHtcclxuICAgIGlmIChET01vYmplY3QpIHtcclxuICAgICAgICB3aGlsZSAoRE9Nb2JqZWN0Lmhhc0NoaWxkTm9kZXMoKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IERPTW9iamVjdC5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZURPTURlbGV0ZShjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICBET01vYmplY3QucmVtb3ZlQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgc3RyaW5nLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIjtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIG9iamVjdCAobm90IHByaW1pdGl2ZSBvciBudWxsKS5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIG5vdCBudWxsIG9iamVjdCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGw7XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBEYXRlLCBvciBhIFN0cmluZyBjb250YWluaW5nIGEgRGF0ZS5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIERhdGUgaW5zdGFuY2Ugb3Igc3RyaW5nIGRhdGUgcmVwcmVzZW50YXRpb24sIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xyXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XHJcbiAgICAgICAgLy8gdGVzdCB3aGV0aGVyIHRoaXMgc3RyaW5nIGNvbnRhaW5zIGEgZGF0ZVxyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gQVNQRGF0ZVJlZ2V4LmV4ZWModmFsdWUpO1xyXG4gICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIWlzTmFOKERhdGUucGFyc2UodmFsdWUpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuLyoqXHJcbiAqIENvcHkgcHJvcGVydHkgZnJvbSBiIHRvIGEgaWYgcHJvcGVydHkgcHJlc2VudCBpbiBhLlxyXG4gKiBJZiBwcm9wZXJ0eSBpbiBiIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwsIGRlbGV0ZSBpdCBpZiBgYWxsb3dEZWxldGlvbmAgc2V0LlxyXG4gKlxyXG4gKiBJbnRlcm5hbCBoZWxwZXIgcm91dGluZSwgc2hvdWxkIG5vdCBiZSBleHBvcnRlZC4gTm90IGFkZGVkIHRvIGBleHBvcnRzYCBmb3IgdGhhdCByZWFzb24uXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gcHJvcCAtIE5hbWUgb2YgcHJvcGVydHkgdG8gY29weSBmcm9tIGIgdG8gYS5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydHkgaW4gYSBpZiBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbikge1xyXG4gICAgbGV0IGRvRGVsZXRpb24gPSBmYWxzZTtcclxuICAgIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlKSB7XHJcbiAgICAgICAgZG9EZWxldGlvbiA9IGJbcHJvcF0gPT09IG51bGwgJiYgYVtwcm9wXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgaWYgKGRvRGVsZXRpb24pIHtcclxuICAgICAgICBkZWxldGUgYVtwcm9wXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdOyAvLyBSZW1lbWJlciwgdGhpcyBpcyBhIHJlZmVyZW5jZSBjb3B5IVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBGaWxsIGFuIG9iamVjdCB3aXRoIGEgcG9zc2libHkgcGFydGlhbGx5IGRlZmluZWQgb3RoZXIgb2JqZWN0LlxyXG4gKlxyXG4gKiBPbmx5IGNvcGllcyB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0aWVzIGFscmVhZHkgcHJlc2VudCBpbiBhLlxyXG4gKiBUaGF0IG1lYW5zIGFuIG9iamVjdCBpcyBub3QgY3JlYXRlZCBvbiBhIHByb3BlcnR5IGlmIG9ubHkgdGhlIGIgb2JqZWN0IGhhcyBpdC5cclxuICpcclxuICogQHBhcmFtIGEgLSBUaGUgb2JqZWN0IHRoYXQgd2lsbCBoYXZlIGl0J3MgcHJvcGVydGllcyB1cGRhdGVkLlxyXG4gKiBAcGFyYW0gYiAtIFRoZSBvYmplY3Qgd2l0aCBwcm9wZXJ0eSB1cGRhdGVzLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0aWVzIGluIGEgdGhhdCBhcmUgZXhwbGljaXRseSBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKi9cclxuZnVuY3Rpb24gZmlsbElmRGVmaW5lZChhLCBiLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIC8vIE5PVEU6IGl0ZXJhdGlvbiBvZiBwcm9wZXJ0aWVzIG9mIGFcclxuICAgIC8vIE5PVEU6IHByb3RvdHlwZSBwcm9wZXJ0aWVzIGl0ZXJhdGVkIG92ZXIgYXMgd2VsbFxyXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGEpIHtcclxuICAgICAgICBpZiAoYltwcm9wXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChiW3Byb3BdID09PSBudWxsIHx8IHR5cGVvZiBiW3Byb3BdICE9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBOb3RlOiB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFQcm9wID0gYVtwcm9wXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJQcm9wID0gYltwcm9wXTtcclxuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChhUHJvcCkgJiYgaXNPYmplY3QoYlByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbElmRGVmaW5lZChhUHJvcCwgYlByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgb2YgYWxsIG9mIHRoZSBlbnVtZXJhYmxlIG93biBwcm9wZXJ0aWVzIGZyb20gb25lIG9yIG1vcmUgc291cmNlIG9iamVjdHMgdG8gYVxyXG4gKiB0YXJnZXQgb2JqZWN0LiBSZXR1cm5zIHRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIHRhcmdldCBvYmplY3QgdG8gY29weSB0by5cclxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSBzb3VyY2Ugb2JqZWN0IGZyb20gd2hpY2ggdG8gY29weSBwcm9wZXJ0aWVzLlxyXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdC5cclxuICovXHJcbmNvbnN0IGV4dGVuZCA9IE9iamVjdC5hc3NpZ247XHJcbi8qKlxyXG4gKiBFeHRlbmQgb2JqZWN0IGEgd2l0aCBzZWxlY3RlZCBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiIG9yIGEgc2VyaWVzIG9mIG9iamVjdHMuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWQgdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBwcm9wcyAtIFByb3BlcnRpZXMgdG8gYmUgY29waWVkIHRvIGEuXHJcbiAqIEBwYXJhbSBhIC0gVGhlIHRhcmdldC5cclxuICogQHBhcmFtIG90aGVycyAtIFRoZSBzb3VyY2VzLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlRXh0ZW5kKHByb3BzLCBhLCAuLi5vdGhlcnMpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wcykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBcnJheSB3aXRoIHByb3BlcnR5IG5hbWVzIGV4cGVjdGVkIGFzIGZpcnN0IGFyZ3VtZW50XCIpO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBvdGhlciBvZiBvdGhlcnMpIHtcclxuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IHByb3BzLmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1twXTtcclxuICAgICAgICAgICAgaWYgKG90aGVyICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0gPSBvdGhlcltwcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBFeHRlbmQgb2JqZWN0IGEgd2l0aCBzZWxlY3RlZCBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxyXG4gKiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBQcmV2aW91cyB2ZXJzaW9uIG9mIHRoaXMgcm91dGluZSBpbXBsaWVkIHRoYXQgbXVsdGlwbGUgc291cmNlIG9iamVjdHMgY291bGRcclxuICogYmUgdXNlZDsgaG93ZXZlciwgdGhlIGltcGxlbWVudGF0aW9uIHdhcyAqKndyb25nKiouIFNpbmNlIG11bHRpcGxlIChcXD4xKVxyXG4gKiBzb3VyY2VzIHdlcmVuJ3QgdXNlZCBhbnl3aGVyZSBpbiB0aGUgYHZpcy5qc2AgY29kZSwgdGhpcyBoYXMgYmVlbiByZW1vdmVkXHJcbiAqIEBwYXJhbSBwcm9wcyAtIE5hbWVzIG9mIGZpcnN0LWxldmVsIHByb3BlcnRpZXMgdG8gY29weSBvdmVyLlxyXG4gKiBAcGFyYW0gYSAtIFRhcmdldCBvYmplY3QuXHJcbiAqIEBwYXJhbSBiIC0gU291cmNlIG9iamVjdC5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydHkgaW4gYSBpZiBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVEZWVwRXh0ZW5kKHByb3BzLCBhLCBiLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBBcnJheXMgdG8gZGVlcEV4dGVuZFxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBwID0gMDsgcCA8IHByb3BzLmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW3BdO1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkpIHtcclxuICAgICAgICAgICAgaWYgKGJbcHJvcF0gJiYgYltwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYVtwcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSwgZmFsc2UsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBFeHRlbmQgb2JqZWN0IGBhYCB3aXRoIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGBiYCwgaWdub3JpbmcgcHJvcGVydGllcyB3aGljaFxyXG4gKiBhcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgdG8gYmUgZXhjbHVkZWQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoZSBwcm9wZXJ0aWVzIG9mIGBiYCBhcmUgY29uc2lkZXJlZCBmb3IgY29weWluZy4gUHJvcGVydGllcyB3aGljaCBhcmVcclxuICogdGhlbXNlbHZlcyBvYmplY3RzIGFyZSBhcmUgYWxzbyBleHRlbmRlZC4gT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZFxyXG4gKiB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICogQHBhcmFtIHByb3BzVG9FeGNsdWRlIC0gTmFtZXMgb2YgcHJvcGVydGllcyB3aGljaCBzaG91bGQgKm5vdCogYmUgY29waWVkLlxyXG4gKiBAcGFyYW0gYSAtIE9iamVjdCB0byBleHRlbmQuXHJcbiAqIEBwYXJhbSBiIC0gT2JqZWN0IHRvIHRha2UgcHJvcGVydGllcyBmcm9tIGZvciBleHRlbnNpb24uXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnRpZXMgaW4gYSB0aGF0IGFyZSBleHBsaWNpdGx5XHJcbiAqIHNldCB0byBudWxsIGluIGIuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kKHByb3BzVG9FeGNsdWRlLCBhLCBiLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBBcnJheXMgdG8gZGVlcEV4dGVuZFxyXG4gICAgLy8gTk9URTogYXJyYXkgcHJvcGVydGllcyBoYXZlIGFuIGVsc2UtYmVsb3c7IGFwcGFyZW50bHksIHRoZXJlIGlzIGEgcHJvYmxlbSBoZXJlLlxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYikge1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHByb3ApKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gLy8gSGFuZGxlIGxvY2FsIHByb3BlcnRpZXMgb25seVxyXG4gICAgICAgIGlmIChwcm9wc1RvRXhjbHVkZS5pbmNsdWRlcyhwcm9wKSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9IC8vIEluIGV4Y2x1c2lvbiBsaXN0LCBza2lwXHJcbiAgICAgICAgaWYgKGJbcHJvcF0gJiYgYltwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0pOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJbcHJvcF0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0ucHVzaChiW3Byb3BdW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIGV4dGVuZCBhbiBvYmplY3QgYSB3aXRoIHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRhcmdldCBvYmplY3QuXHJcbiAqIEBwYXJhbSBiIC0gU291cmNlIG9iamVjdC5cclxuICogQHBhcmFtIHByb3RvRXh0ZW5kIC0gSWYgdHJ1ZSwgdGhlIHByb3RvdHlwZSB2YWx1ZXMgd2lsbCBhbHNvIGJlIGV4dGVuZGVkLlxyXG4gKiAoVGhhdCBpcyB0aGUgb3B0aW9ucyBvYmplY3RzIHRoYXQgaW5oZXJpdCBmcm9tIG90aGVycyB3aWxsIGFsc28gZ2V0IHRoZVxyXG4gKiBpbmhlcml0ZWQgb3B0aW9ucykuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgdGhlIHZhbHVlcyBvZiBmaWVsZHMgdGhhdCBhcmUgbnVsbCB3aWxsIGJlIGRlbGV0ZWQuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwRXh0ZW5kKGEsIGIsIHByb3RvRXh0ZW5kID0gZmFsc2UsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGIpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHByb3ApIHx8IHByb3RvRXh0ZW5kID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYltwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICAgICAgYltwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGJbcHJvcF0pID09PSBPYmplY3QucHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYVtwcm9wXSA9IGRlZXBFeHRlbmQoe30sIGJbcHJvcF0sIHByb3RvRXh0ZW5kKTsgLy8gTk9URTogYWxsb3dEZWxldGlvbiBub3QgcHJvcGFnYXRlZCFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBhW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYVtwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihhW3Byb3BdKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSwgcHJvdG9FeHRlbmQpOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdLnNsaWNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGFsbCBlbGVtZW50cyBpbiB0d28gYXJyYXlzIGFyZSBlcXVhbC5cclxuICpcclxuICogQHBhcmFtIGEgLSBGaXJzdCBhcnJheS5cclxuICogQHBhcmFtIGIgLSBTZWNvbmQgYXJyYXkuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgYm90aCBhcnJheXMgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYW5kIHNhbWUgZWxlbWVudHMgKDEgPSAnMScpLlxyXG4gKi9cclxuZnVuY3Rpb24gZXF1YWxBcnJheShhLCBiKSB7XHJcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG4vKipcclxuICogR2V0IHRoZSB0eXBlIG9mIGFuIG9iamVjdCwgZm9yIGV4YW1wbGUgZXhwb3J0cy5nZXRUeXBlKFtdKSByZXR1cm5zICdBcnJheScuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIERldGVjdGVkIHR5cGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUeXBlKG9iamVjdCkge1xyXG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBvYmplY3Q7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQm9vbGVhbikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJCb29sZWFuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiTnVtYmVyXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiQXJyYXlcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiRGF0ZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJPYmplY3RcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiTnVtYmVyXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJCb29sZWFuXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiBcIlN0cmluZ1wiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHR5cGU7XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gZXh0ZW5kIGFuIGFycmF5IGFuZCBjb3B5IGl0LiBUaGlzIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHBhdGhzIHJlY3Vyc2l2ZWx5LlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJyIC0gRmlyc3QgcGFydC5cclxuICogQHBhcmFtIG5ld1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIGFhZGRlZCBpbnRvIHRoZSBhcnJheS5cclxuICogQHJldHVybnMgQSBuZXcgYXJyYXkgd2l0aCBhbGwgaXRlbXMgZnJvbSBhcnIgYW5kIG5ld1ZhbHVlICh3aGljaCBpcyBsYXN0KS5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlBbmRFeHRlbmRBcnJheShhcnIsIG5ld1ZhbHVlKSB7XHJcbiAgICByZXR1cm4gWy4uLmFyciwgbmV3VmFsdWVdO1xyXG59XHJcbi8qKlxyXG4gKiBVc2VkIHRvIGV4dGVuZCBhbiBhcnJheSBhbmQgY29weSBpdC4gVGhpcyBpcyB1c2VkIHRvIHByb3BhZ2F0ZSBwYXRocyByZWN1cnNpdmVseS5cclxuICpcclxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBiZSBjb3BpZWQuXHJcbiAqIEByZXR1cm5zIFNoYWxsb3cgY29weSBvZiBhcnIuXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3B5QXJyYXkoYXJyKSB7XHJcbiAgICByZXR1cm4gYXJyLnNsaWNlKCk7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSBsZWZ0IHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBsZWZ0IHBvc2l0aW9uIG9mIHRoaXMgZWxlbWVudCBpbiB0aGUgYnJvd3NlciBwYWdlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWJzb2x1dGVMZWZ0KGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSByaWdodCB2YWx1ZSBvZiBhIERPTSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIEEgZG9tIGVsZW1lbnQsIGZvciBleGFtcGxlIGEgZGl2LlxyXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcmlnaHQgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZVJpZ2h0KGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0O1xyXG59XHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgYWJzb2x1dGUgdG9wIHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSB0b3AgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZVRvcChlbGVtKSB7XHJcbiAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcbn1cclxuLyoqXHJcbiAqIEFkZCBhIGNsYXNzTmFtZSB0byB0aGUgZ2l2ZW4gZWxlbWVudHMgc3R5bGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIGNsYXNzZXMgd2lsbCBiZSBhZGRlZC5cclxuICogQHBhcmFtIGNsYXNzTmFtZXMgLSBTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkQ2xhc3NOYW1lKGVsZW0sIGNsYXNzTmFtZXMpIHtcclxuICAgIGxldCBjbGFzc2VzID0gZWxlbS5jbGFzc05hbWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgY29uc3QgbmV3Q2xhc3NlcyA9IGNsYXNzTmFtZXMuc3BsaXQoXCIgXCIpO1xyXG4gICAgY2xhc3NlcyA9IGNsYXNzZXMuY29uY2F0KG5ld0NsYXNzZXMuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcclxuICAgICAgICByZXR1cm4gIWNsYXNzZXMuaW5jbHVkZXMoY2xhc3NOYW1lKTtcclxuICAgIH0pKTtcclxuICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgY2xhc3NOYW1lIGZyb20gdGhlIGdpdmVuIGVsZW1lbnRzIHN0eWxlLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIFRoZSBlbGVtZW50IGZyb20gd2hpY2ggdGhlIGNsYXNzZXMgd2lsbCBiZSByZW1vdmVkLlxyXG4gKiBAcGFyYW0gY2xhc3NOYW1lcyAtIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiByZW1vdmVDbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lcykge1xyXG4gICAgbGV0IGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBvbGRDbGFzc2VzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIik7XHJcbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhb2xkQ2xhc3Nlcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xyXG4gICAgfSk7XHJcbiAgICBlbGVtLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbihcIiBcIik7XHJcbn1cclxuLyoqXHJcbiAqIEZvciBlYWNoIG1ldGhvZCBmb3IgYm90aCBhcnJheXMgYW5kIG9iamVjdHMuXHJcbiAqIEluIGNhc2Ugb2YgYW4gYXJyYXksIHRoZSBidWlsdC1pbiBBcnJheS5mb3JFYWNoKCkgaXMgYXBwbGllZCAoKipObywgaXQncyBub3QhKiopLlxyXG4gKiBJbiBjYXNlIG9mIGFuIE9iamVjdCwgdGhlIG1ldGhvZCBsb29wcyBvdmVyIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBBbiBPYmplY3Qgb3IgQXJyYXkgdG8gYmUgaXRlcmF0ZWQgb3Zlci5cclxuICogQHBhcmFtIGNhbGxiYWNrIC0gQXJyYXkuZm9yRWFjaC1saWtlIGNhbGxiYWNrLlxyXG4gKi9cclxuZnVuY3Rpb24gZm9yRWFjaChvYmplY3QsIGNhbGxiYWNrKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XHJcbiAgICAgICAgLy8gYXJyYXlcclxuICAgICAgICBjb25zdCBsZW4gPSBvYmplY3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY2FsbGJhY2sob2JqZWN0W2ldLCBpLCBvYmplY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIG9iamVjdFxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sob2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBhbiBvYmplY3QgaW50byBhbiBhcnJheTogYWxsIG9iamVjdHMgcHJvcGVydGllcyBhcmUgcHV0IGludG8gdGhlIGFycmF5LiBUaGUgcmVzdWx0aW5nIGFycmF5IGlzIHVub3JkZXJlZC5cclxuICpcclxuICogQHBhcmFtIG8gLSBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy5cclxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgdW5vcmRlcmVkIHZhbHVlcy5cclxuICovXHJcbmNvbnN0IHRvQXJyYXkgPSBPYmplY3QudmFsdWVzO1xyXG4vKipcclxuICogVXBkYXRlIGEgcHJvcGVydHkgaW4gYW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gb2JqZWN0IC0gVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSB3aWxsIGJlIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSBrZXkgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBiZSB1cGRhdGVkLlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgbmV3IHZhbHVlIHRvIGJlIGFzc2lnbmVkLlxyXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB2YWx1ZSB3YXMgdXBkYXRlZCAodHJ1ZSkgb3IgYWxyZWFkeSBzdHJpY3RseSB0aGUgc2FtZSBpbiB0aGUgb3JpZ2luYWwgb2JqZWN0IChmYWxzZSkuXHJcbiAqL1xyXG5mdW5jdGlvbiB1cGRhdGVQcm9wZXJ0eShvYmplY3QsIGtleSwgdmFsdWUpIHtcclxuICAgIGlmIChvYmplY3Rba2V5XSAhPT0gdmFsdWUpIHtcclxuICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUaHJvdHRsZSB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gYmUgb25seSBleGVjdXRlZCBvbmNlIHBlciBhbmltYXRpb24gZnJhbWUuXHJcbiAqXHJcbiAqIEBwYXJhbSBmbiAtIFRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cclxuICogQHJldHVybnMgVGhlIHRocm90dGxlZCBmdW5jdGlvbi5cclxuICovXHJcbmZ1bmN0aW9uIHRocm90dGxlKGZuKSB7XHJcbiAgICBsZXQgc2NoZWR1bGVkID0gZmFsc2U7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgIGlmICghc2NoZWR1bGVkKSB7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZuKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIENhbmNlbHMgdGhlIGV2ZW50J3MgZGVmYXVsdCBhY3Rpb24gaWYgaXQgaXMgY2FuY2VsYWJsZSwgd2l0aG91dCBzdG9wcGluZyBmdXJ0aGVyIHByb3BhZ2F0aW9uIG9mIHRoZSBldmVudC5cclxuICpcclxuICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IHdob3NlIGRlZmF1bHQgYWN0aW9uIHNob3VsZCBiZSBwcmV2ZW50ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudCkge1xyXG4gICAgaWYgKCFldmVudCkge1xyXG4gICAgICAgIGV2ZW50ID0gd2luZG93LmV2ZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCFldmVudCkgO1xyXG4gICAgZWxzZSBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBub24tSUUgYnJvd3NlcnNcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIEBUT0RPOiBJRSB0eXBlcz8gRG9lcyBhbnlvbmUgY2FyZT9cclxuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlOyAvLyBJRSBicm93c2Vyc1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBHZXQgSFRNTCBlbGVtZW50IHdoaWNoIGlzIHRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQuXHJcbiAqIEByZXR1cm5zIFRoZSBlbGVtZW50IG9yIG51bGwgaWYgbm90IG9idGFpbmFibGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUYXJnZXQoZXZlbnQgPSB3aW5kb3cuZXZlbnQpIHtcclxuICAgIC8vIGNvZGUgZnJvbSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcclxuICAgIC8vIEBUT0RPOiBFdmVudFRhcmdldCBjYW4gYmUgYWxtb3N0IGFueXRoaW5nLCBpcyBpdCBva2F5IHRvIHJldHVybiBvbmx5IEVsZW1lbnRzP1xyXG4gICAgbGV0IHRhcmdldCA9IG51bGw7XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC50YXJnZXQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC50YXJnZXQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChldmVudC5zcmNFbGVtZW50KSB7XHJcbiAgICAgICAgdGFyZ2V0ID0gZXZlbnQuc3JjRWxlbWVudDtcclxuICAgIH1cclxuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGFyZ2V0Lm5vZGVUeXBlICE9IG51bGwgJiYgdGFyZ2V0Lm5vZGVUeXBlID09IDMpIHtcclxuICAgICAgICAvLyBkZWZlYXQgU2FmYXJpIGJ1Z1xyXG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn1cclxuLyoqXHJcbiAqIENoZWNrIGlmIGdpdmVuIGVsZW1lbnQgY29udGFpbnMgZ2l2ZW4gcGFyZW50IHNvbWV3aGVyZSBpbiB0aGUgRE9NIHRyZWUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gYmUgdGVzdGVkLlxyXG4gKiBAcGFyYW0gcGFyZW50IC0gVGhlIGFuY2VzdG9yIChub3QgbmVjZXNzYXJpbHkgcGFyZW50KSBvZiB0aGUgZWxlbWVudC5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBwYXJlbnQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGVsZW1lbnQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGhhc1BhcmVudChlbGVtZW50LCBwYXJlbnQpIHtcclxuICAgIGxldCBlbGVtID0gZWxlbWVudDtcclxuICAgIHdoaWxlIChlbGVtKSB7XHJcbiAgICAgICAgaWYgKGVsZW0gPT09IHBhcmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIGVsZW0gPSBlbGVtLnBhcmVudE5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmNvbnN0IG9wdGlvbiA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBib29sZWFuLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvYm9vbGVhbiwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBib29sZWFuIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0Jvb2xlYW4odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIG51bWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b251bWJlciwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogbnVtYmVyIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc051bWJlcih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKSB8fCBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzdHJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9zdHJpbmcsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIENvcnJlc3BvbmRpbmcgKipib3hlZCoqIHN0cmluZyB2YWx1ZSwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNTdHJpbmcodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgc2l6ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3NpemUsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIENvcnJlc3BvbmRpbmcgc3RyaW5nIHZhbHVlIChudW1iZXIgKyAncHgnKSwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNTaXplKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc051bWJlcih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgXCJweFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgRE9NIEVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG8gRE9NIEVsZW1lbnQsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIFRoZSBET00gRWxlbWVudCwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNFbGVtZW50KHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZSB8fCBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGhleCBjb2xvciBzdHJpbmcgaW50byBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiB7QGxpbmsgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NjIzODM4L3JnYi10by1oZXgtYW5kLWhleC10by1yZ2J9XHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nICgzIG9yIDYgZGlnaXRzLCB3aXRoIG9yIHdpdGhvdXQgIykuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBoZXhUb1JHQihoZXgpIHtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBzd2l0Y2ggKGhleC5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBzaG9ydEhleFJFLmV4ZWMoaGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdICsgcmVzdWx0WzFdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdICsgcmVzdWx0WzJdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdICsgcmVzdWx0WzNdLCAxNiksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgICAgcmVzdWx0ID0gZnVsbEhleFJFLmV4ZWMoaGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdLCAxNiksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgc3RyaW5nIGNvbG9yIGluIGhleCBvciBSR0IgZm9ybWF0IGFuZCBhZGRzIHRoZSBvcGFjaXR5LCBSR0JBIGlzIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZC5cclxuICpcclxuICogQHBhcmFtIGNvbG9yIC0gVGhlIGNvbG9yIHN0cmluZyAoaGV4LCBSR0IsIFJHQkEpLlxyXG4gKiBAcGFyYW0gb3BhY2l0eSAtIFRoZSBuZXcgb3BhY2l0eS5cclxuICogQHJldHVybnMgUkdCQSBzdHJpbmcsIGZvciBleGFtcGxlICdyZ2JhKDI1NSwgMCwgMTI3LCAwLjMpJy5cclxuICovXHJcbmZ1bmN0aW9uIG92ZXJyaWRlT3BhY2l0eShjb2xvciwgb3BhY2l0eSkge1xyXG4gICAgaWYgKGNvbG9yLmluY2x1ZGVzKFwicmdiYVwiKSkge1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbG9yLmluY2x1ZGVzKFwicmdiXCIpKSB7XHJcbiAgICAgICAgY29uc3QgcmdiID0gY29sb3JcclxuICAgICAgICAgICAgLnN1YnN0cihjb2xvci5pbmRleE9mKFwiKFwiKSArIDEpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiKVwiLCBcIlwiKVxyXG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIHJldHVybiBcInJnYmEoXCIgKyByZ2JbMF0gKyBcIixcIiArIHJnYlsxXSArIFwiLFwiICsgcmdiWzJdICsgXCIsXCIgKyBvcGFjaXR5ICsgXCIpXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihjb2xvcik7XHJcbiAgICAgICAgaWYgKHJnYiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcInJnYmEoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIsXCIgKyBvcGFjaXR5ICsgXCIpXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IFJHQiBcXDwwLCAyNTVcXD4gaW50byBoZXggY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVkIC0gUmVkIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBncmVlbiAtIEdyZWVuIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBibHVlIC0gQmx1ZSBjaGFubmVsLlxyXG4gKiBAcmV0dXJucyBIZXggY29sb3Igc3RyaW5nIChmb3IgZXhhbXBsZTogJyMwYWNkYzAnKS5cclxuICovXHJcbmZ1bmN0aW9uIFJHQlRvSGV4KHJlZCwgZ3JlZW4sIGJsdWUpIHtcclxuICAgIHJldHVybiAoXCIjXCIgKyAoKDEgPDwgMjQpICsgKHJlZCA8PCAxNikgKyAoZ3JlZW4gPDwgOCkgKyBibHVlKS50b1N0cmluZygxNikuc2xpY2UoMSkpO1xyXG59XHJcbi8qKlxyXG4gKiBQYXJzZSBhIGNvbG9yIHByb3BlcnR5IGludG8gYW4gb2JqZWN0IHdpdGggYm9yZGVyLCBiYWNrZ3JvdW5kLCBhbmQgaGlnaGxpZ2h0IGNvbG9ycy5cclxuICpcclxuICogQHBhcmFtIGlucHV0Q29sb3IgLSBTaG9ydGhhbmQgY29sb3Igc3RyaW5nIG9yIGlucHV0IGNvbG9yIG9iamVjdC5cclxuICogQHBhcmFtIGRlZmF1bHRDb2xvciAtIEZ1bGwgY29sb3Igb2JqZWN0IHRvIGZpbGwgaW4gbWlzc2luZyB2YWx1ZXMgaW4gaW5wdXRDb2xvci5cclxuICogQHJldHVybnMgQ29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gcGFyc2VDb2xvcihpbnB1dENvbG9yLCBkZWZhdWx0Q29sb3IpIHtcclxuICAgIGlmIChpc1N0cmluZyhpbnB1dENvbG9yKSkge1xyXG4gICAgICAgIGxldCBjb2xvclN0ciA9IGlucHV0Q29sb3I7XHJcbiAgICAgICAgaWYgKGlzVmFsaWRSR0IoY29sb3JTdHIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJnYiA9IGNvbG9yU3RyXHJcbiAgICAgICAgICAgICAgICAuc3Vic3RyKDQpXHJcbiAgICAgICAgICAgICAgICAuc3Vic3RyKDAsIGNvbG9yU3RyLmxlbmd0aCAtIDUpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCIsXCIpXHJcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbG9yU3RyID0gUkdCVG9IZXgocmdiWzBdLCByZ2JbMV0sIHJnYlsyXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1ZhbGlkSGV4KGNvbG9yU3RyKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBoc3YgPSBoZXhUb0hTVihjb2xvclN0cik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhTViA9IHtcclxuICAgICAgICAgICAgICAgIGg6IGhzdi5oLFxyXG4gICAgICAgICAgICAgICAgczogaHN2LnMgKiAwLjgsXHJcbiAgICAgICAgICAgICAgICB2OiBNYXRoLm1pbigxLCBoc3YudiAqIDEuMDIpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBkYXJrZXJDb2xvckhTViA9IHtcclxuICAgICAgICAgICAgICAgIGg6IGhzdi5oLFxyXG4gICAgICAgICAgICAgICAgczogTWF0aC5taW4oMSwgaHN2LnMgKiAxLjI1KSxcclxuICAgICAgICAgICAgICAgIHY6IGhzdi52ICogMC44LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBkYXJrZXJDb2xvckhleCA9IEhTVlRvSGV4KGRhcmtlckNvbG9ySFNWLmgsIGRhcmtlckNvbG9ySFNWLnMsIGRhcmtlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICBjb25zdCBsaWdodGVyQ29sb3JIZXggPSBIU1ZUb0hleChsaWdodGVyQ29sb3JIU1YuaCwgbGlnaHRlckNvbG9ySFNWLnMsIGxpZ2h0ZXJDb2xvckhTVi52KTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZGVmYXVsdENvbG9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5iYWNrZ3JvdW5kIHx8IGRlZmF1bHRDb2xvci5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmJvcmRlciB8fCBkZWZhdWx0Q29sb3IuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiBpc1N0cmluZyhpbnB1dENvbG9yLmhpZ2hsaWdodClcclxuICAgICAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5oaWdobGlnaHQgJiYgaW5wdXRDb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZCkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAoaW5wdXRDb2xvci5oaWdobGlnaHQgJiYgaW5wdXRDb2xvci5oaWdobGlnaHQuYm9yZGVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiBpc1N0cmluZyhpbnB1dENvbG9yLmhvdmVyKVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYm9yZGVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhvdmVyLmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhvdmVyLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmJvcmRlciB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiBpc1N0cmluZyhpbnB1dENvbG9yLmhvdmVyKVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYm9yZGVyKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCkgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIEhTViBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vd3d3LmphdmFzY3JpcHRlci5uZXQvZmFxL3JnYjJoc3YuaHRtfVxyXG4gKiBAcGFyYW0gcmVkIC0gUmVkIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBncmVlbiAtIEdyZWVuIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBibHVlIC0gQmx1ZSBjaGFubmVsLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IU1YocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmVkID0gcmVkIC8gMjU1O1xyXG4gICAgZ3JlZW4gPSBncmVlbiAvIDI1NTtcclxuICAgIGJsdWUgPSBibHVlIC8gMjU1O1xyXG4gICAgY29uc3QgbWluUkdCID0gTWF0aC5taW4ocmVkLCBNYXRoLm1pbihncmVlbiwgYmx1ZSkpO1xyXG4gICAgY29uc3QgbWF4UkdCID0gTWF0aC5tYXgocmVkLCBNYXRoLm1heChncmVlbiwgYmx1ZSkpO1xyXG4gICAgLy8gQmxhY2stZ3JheS13aGl0ZVxyXG4gICAgaWYgKG1pblJHQiA9PT0gbWF4UkdCKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgaDogMCwgczogMCwgdjogbWluUkdCIH07XHJcbiAgICB9XHJcbiAgICAvLyBDb2xvcnMgb3RoZXIgdGhhbiBibGFjay1ncmF5LXdoaXRlOlxyXG4gICAgY29uc3QgZCA9IHJlZCA9PT0gbWluUkdCID8gZ3JlZW4gLSBibHVlIDogYmx1ZSA9PT0gbWluUkdCID8gcmVkIC0gZ3JlZW4gOiBibHVlIC0gcmVkO1xyXG4gICAgY29uc3QgaCA9IHJlZCA9PT0gbWluUkdCID8gMyA6IGJsdWUgPT09IG1pblJHQiA/IDEgOiA1O1xyXG4gICAgY29uc3QgaHVlID0gKDYwICogKGggLSBkIC8gKG1heFJHQiAtIG1pblJHQikpKSAvIDM2MDtcclxuICAgIGNvbnN0IHNhdHVyYXRpb24gPSAobWF4UkdCIC0gbWluUkdCKSAvIG1heFJHQjtcclxuICAgIGNvbnN0IHZhbHVlID0gbWF4UkdCO1xyXG4gICAgcmV0dXJuIHsgaDogaHVlLCBzOiBzYXR1cmF0aW9uLCB2OiB2YWx1ZSB9O1xyXG59XHJcbi8qKlxyXG4gKiBTcGxpdCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgaW50byBhbiBvYmplY3Qgd2l0aCBrZXkvdmFsdWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIENTUyBzb3VyY2UgY29kZSB0byBzcGxpdCBpbnRvIGtleS92YWx1ZSBvYmplY3QuXHJcbiAqIEByZXR1cm5zIEtleS92YWx1ZSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB7QGxpbmsgY3NzVGV4dH0uXHJcbiAqL1xyXG5mdW5jdGlvbiBzcGxpdENTU1RleHQoY3NzVGV4dCkge1xyXG4gICAgY29uc3QgdG1wRWxsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgY29uc3Qgc3R5bGVzID0ge307XHJcbiAgICB0bXBFbGxlbWVudC5zdHlsZS5jc3NUZXh0ID0gY3NzVGV4dDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG1wRWxsZW1lbnQuc3R5bGUubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBzdHlsZXNbdG1wRWxsZW1lbnQuc3R5bGVbaV1dID0gdG1wRWxsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0bXBFbGxlbWVudC5zdHlsZVtpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGVzO1xyXG59XHJcbi8qKlxyXG4gKiBBcHBlbmQgYSBzdHJpbmcgd2l0aCBjc3Mgc3R5bGVzIHRvIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdGhhdCB3aWxsIHJlY2VpdmUgbmV3IHN0eWxlcy5cclxuICogQHBhcmFtIGNzc1RleHQgLSBUaGUgc3R5bGVzIHRvIGJlIGFwcGVuZGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgZnJvbSBhbiBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IGZyb20gd2hpY2ggc3R5bGVzIHNob3VsZCBiZSByZW1vdmVkLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgcmVtb3ZlZC5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNzc1RleHQoZWxlbWVudCwgY3NzVGV4dCkge1xyXG4gICAgY29uc3QgY3NzU3R5bGUgPSBzcGxpdENTU1RleHQoY3NzVGV4dCk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjc3NTdHlsZSkpIHtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgSFNWIFxcPDAsIDFcXD4gaW50byBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbWppamFja3Nvbi81MzExMjU2fVxyXG4gKiBAcGFyYW0gaCAtIEh1ZS5cclxuICogQHBhcmFtIHMgLSBTYXR1cmF0aW9uLlxyXG4gKiBAcGFyYW0gdiAtIFZhbHVlLlxyXG4gKiBAcmV0dXJucyBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gSFNWVG9SR0IoaCwgcywgdikge1xyXG4gICAgbGV0IHI7XHJcbiAgICBsZXQgZztcclxuICAgIGxldCBiO1xyXG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoaCAqIDYpO1xyXG4gICAgY29uc3QgZiA9IGggKiA2IC0gaTtcclxuICAgIGNvbnN0IHAgPSB2ICogKDEgLSBzKTtcclxuICAgIGNvbnN0IHEgPSB2ICogKDEgLSBmICogcyk7XHJcbiAgICBjb25zdCB0ID0gdiAqICgxIC0gKDEgLSBmKSAqIHMpO1xyXG4gICAgc3dpdGNoIChpICUgNikge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSB0KSwgKGIgPSBwKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAociA9IHEpLCAoZyA9IHYpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIChyID0gcCksIChnID0gdiksIChiID0gdCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSBxKSwgKGIgPSB2KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAociA9IHQpLCAoZyA9IHApLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIChyID0gdiksIChnID0gcCksIChiID0gcSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByOiBNYXRoLmZsb29yKHIgKiAyNTUpLFxyXG4gICAgICAgIGc6IE1hdGguZmxvb3IoZyAqIDI1NSksXHJcbiAgICAgICAgYjogTWF0aC5mbG9vcihiICogMjU1KSxcclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgSFNWIFxcPDAsIDFcXD4gaW50byBoZXggY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gaCAtIEh1ZS5cclxuICogQHBhcmFtIHMgLSBTYXR1cmF0aW9uLlxyXG4gKiBAcGFyYW0gdiAtIFZhbHVlLlxyXG4gKiBAcmV0dXJucyBIZXggY29sb3Igc3RyaW5nLlxyXG4gKi9cclxuZnVuY3Rpb24gSFNWVG9IZXgoaCwgcywgdikge1xyXG4gICAgY29uc3QgcmdiID0gSFNWVG9SR0IoaCwgcywgdik7XHJcbiAgICByZXR1cm4gUkdCVG9IZXgocmdiLnIsIHJnYi5nLCByZ2IuYik7XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIEhTViBcXDwwLCAxXFw+LlxyXG4gKlxyXG4gKiBAcGFyYW0gaGV4IC0gSGV4IGNvbG9yIHN0cmluZy5cclxuICogQHJldHVybnMgSFNWIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvSFNWKGhleCkge1xyXG4gICAgY29uc3QgcmdiID0gaGV4VG9SR0IoaGV4KTtcclxuICAgIGlmICghcmdiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7aGV4fScgaXMgbm90IGEgdmFsaWQgY29sb3IuYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUkdCVG9IU1YocmdiLnIsIHJnYi5nLCByZ2IuYik7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBVbmtub3duIHN0cmluZyB0aGF0IG1heSBjb250YWluIGEgY29sb3IuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNWYWxpZEhleChoZXgpIHtcclxuICAgIGNvbnN0IGlzT2sgPSAvKF4jWzAtOUEtRl17Nn0kKXwoXiNbMC05QS1GXXszfSQpL2kudGVzdChoZXgpO1xyXG4gICAgcmV0dXJuIGlzT2s7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIFJHQiBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2IgLSBVbmtub3duIHN0cmluZyB0aGF0IG1heSBjb250YWluIGEgY29sb3IuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNWYWxpZFJHQihyZ2IpIHtcclxuICAgIHJldHVybiByZ2JSRS50ZXN0KHJnYik7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIFJHQkEgY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmdiYSAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCQShyZ2JhKSB7XHJcbiAgICByZXR1cm4gcmdiYVJFLnRlc3QocmdiYSk7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gZmllbGRzIC0gTmFtZXMgb2YgcHJvcGVydGllcyB0byBiZSBicmlkZ2VkLlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgQSBuZXcgb2JqZWN0IGluaGVyaXRpbmcgZnJvbSB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlQnJpZGdlT2JqZWN0KGZpZWxkcywgcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiByZWZlcmVuY2VPYmplY3QgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAvLyAhISEgdHlwZW9mIG51bGwgPT09ICdvYmplY3QnXHJcbiAgICAgICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGZpZWxkc1tpXSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ZpZWxkc1tpXV0gPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFRvW2ZpZWxkc1tpXV0gPSBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0W2ZpZWxkc1tpXV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3RUbztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUaGlzIHJlY3Vyc2l2ZWx5IHJlZGlyZWN0cyB0aGUgcHJvdG90eXBlIG9mIEpTT04gb2JqZWN0cyB0byB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGRlZmF1bHQgb3B0aW9ucy5cclxuICpcclxuICogQHBhcmFtIHJlZmVyZW5jZU9iamVjdCAtIFRoZSBvcmlnaW5hbCBvYmplY3QuXHJcbiAqIEByZXR1cm5zIFRoZSBFbGVtZW50IGlmIHRoZSByZWZlcmVuY2VPYmplY3QgaXMgYW4gRWxlbWVudCwgb3IgYSBuZXcgb2JqZWN0IGluaGVyaXRpbmcgZnJvbSB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdCkge1xyXG4gICAgaWYgKHJlZmVyZW5jZU9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVmZXJlbmNlT2JqZWN0ICE9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0IGluc3RhbmNlb2YgRWxlbWVudCkge1xyXG4gICAgICAgIC8vIEF2b2lkIGJyaWRnaW5nIERPTSBvYmplY3RzXHJcbiAgICAgICAgcmV0dXJuIHJlZmVyZW5jZU9iamVjdDtcclxuICAgIH1cclxuICAgIGNvbnN0IG9iamVjdFRvID0gT2JqZWN0LmNyZWF0ZShyZWZlcmVuY2VPYmplY3QpO1xyXG4gICAgZm9yIChjb25zdCBpIGluIHJlZmVyZW5jZU9iamVjdCkge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVmZXJlbmNlT2JqZWN0LCBpKSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlZmVyZW5jZU9iamVjdFtpXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICBvYmplY3RUb1tpXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iamVjdFRvO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHN0YWJsZSBzb3J0IGltcGxlbWVudGF0aW9uLCB2ZXJ5IGZhc3QgZm9yIHByZXNvcnRlZCBkYXRhLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBhcnJheSB0byBiZSBzb3J0ZWQgKGluLXBsYWNlKS5cclxuICogQHBhcmFtIGNvbXBhcmUgLSBBbiBvcmRlciBjb21wYXJhdG9yLlxyXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGluc2VydFNvcnQoYSwgY29tcGFyZSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGFbaV07XHJcbiAgICAgICAgbGV0IGo7XHJcbiAgICAgICAgZm9yIChqID0gaTsgaiA+IDAgJiYgY29tcGFyZShrLCBhW2ogLSAxXSkgPCAwOyBqLS0pIHtcclxuICAgICAgICAgICAgYVtqXSA9IGFbaiAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhW2pdID0gaztcclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZSBvcHRpb25zIG9mIHN1Ym9iamVjdHMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxyXG4gKlxyXG4gKiBBIHJlcXVpcmVtZW50IG9mIHRoZXNlIHN1Ym9iamVjdHMgaXMgdGhhdCB0aGV5IGhhdmUgYW4gJ2VuYWJsZWQnIGVsZW1lbnRcclxuICogd2hpY2ggaXMgb3B0aW9uYWwgZm9yIHRoZSB1c2VyIGJ1dCBtYW5kYXRvcnkgZm9yIHRoZSBwcm9ncmFtLlxyXG4gKlxyXG4gKiBUaGUgYWRkZWQgdmFsdWUgaGVyZSBvZiB0aGUgbWVyZ2UgaXMgdGhhdCBvcHRpb24gJ2VuYWJsZWQnIGlzIHNldCBhcyByZXF1aXJlZC5cclxuICpcclxuICogQHBhcmFtIG1lcmdlVGFyZ2V0IC0gRWl0aGVyIHRoaXMub3B0aW9ucyBvciB0aGUgb3B0aW9ucyB1c2VkIGZvciB0aGUgZ3JvdXBzLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXHJcbiAqIEBwYXJhbSBvcHRpb24gLSBPcHRpb24ga2V5IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50LlxyXG4gKiBAcGFyYW0gZ2xvYmFsT3B0aW9ucyAtIEdsb2JhbCBvcHRpb25zLCBwYXNzZWQgaW4gdG8gZGV0ZXJtaW5lIHZhbHVlIG9mIG9wdGlvbiAnZW5hYmxlZCcuXHJcbiAqL1xyXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbiwgZ2xvYmFsT3B0aW9ucyA9IHt9KSB7XHJcbiAgICAvLyBMb2NhbCBoZWxwZXJzXHJcbiAgICBjb25zdCBpc1ByZXNlbnQgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiBvYmogIT09IHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBjb25zdCBpc09iamVjdCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCI7XHJcbiAgICB9O1xyXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM0NDkxMjg3LzEyMjM1MzFcclxuICAgIGNvbnN0IGlzRW1wdHkgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB4IGluIG9iaikge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgeCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICAvLyBHdWFyZHNcclxuICAgIGlmICghaXNPYmplY3QobWVyZ2VUYXJnZXQpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG1lcmdlVGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciBvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc1ByZXNlbnQob3B0aW9uKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciBvcHRpb24gbXVzdCBoYXZlIGEgdmFsdWVcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KGdsb2JhbE9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIGdsb2JhbE9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gQWN0dWFsIG1lcmdlIHJvdXRpbmUsIHNlcGFyYXRlZCBmcm9tIG1haW4gbG9naWNcclxuICAgIC8vIE9ubHkgYSBzaW5nbGUgbGV2ZWwgb2Ygb3B0aW9ucyBpcyBtZXJnZWQuIERlZXBlciBsZXZlbHMgYXJlIHJlZidkLiBUaGlzIG1heSBhY3R1YWxseSBiZSBhbiBpc3N1ZS5cclxuICAgIC8vXHJcbiAgICBjb25zdCBkb01lcmdlID0gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucywgb3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFpc09iamVjdCh0YXJnZXRbb3B0aW9uXSkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3JjID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgICAgIGNvbnN0IGRzdCA9IHRhcmdldFtvcHRpb25dO1xyXG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBzcmMpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzcmMsIHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBkc3RbcHJvcF0gPSBzcmNbcHJvcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLy8gTG9jYWwgaW5pdGlhbGl6YXRpb25cclxuICAgIGNvbnN0IHNyY09wdGlvbiA9IG9wdGlvbnNbb3B0aW9uXTtcclxuICAgIGNvbnN0IGdsb2JhbFBhc3NlZCA9IGlzT2JqZWN0KGdsb2JhbE9wdGlvbnMpICYmICFpc0VtcHR5KGdsb2JhbE9wdGlvbnMpO1xyXG4gICAgY29uc3QgZ2xvYmFsT3B0aW9uID0gZ2xvYmFsUGFzc2VkID8gZ2xvYmFsT3B0aW9uc1tvcHRpb25dIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgZ2xvYmFsRW5hYmxlZCA9IGdsb2JhbE9wdGlvbiA/IGdsb2JhbE9wdGlvbi5lbmFibGVkIDogdW5kZWZpbmVkO1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIE1haW4gcm91dGluZVxyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIGlmIChzcmNPcHRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkb1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzcmNPcHRpb24gPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICBtZXJnZVRhcmdldFtvcHRpb25dID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0uZW5hYmxlZCA9IHNyY09wdGlvbjtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoc3JjT3B0aW9uID09PSBudWxsICYmICFpc09iamVjdChtZXJnZVRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgIC8vIElmIHBvc3NpYmxlLCBleHBsaWNpdCBjb3B5IGZyb20gZ2xvYmFsc1xyXG4gICAgICAgIGlmIChpc1ByZXNlbnQoZ2xvYmFsT3B0aW9uKSkge1xyXG4gICAgICAgICAgICBtZXJnZVRhcmdldFtvcHRpb25dID0gT2JqZWN0LmNyZWF0ZShnbG9iYWxPcHRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFpc09iamVjdChzcmNPcHRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy9cclxuICAgIC8vIEVuc3VyZSB0aGF0ICdlbmFibGVkJyBpcyBwcm9wZXJseSBzZXQuIEl0IGlzIHJlcXVpcmVkIGludGVybmFsbHlcclxuICAgIC8vIE5vdGUgdGhhdCB0aGUgdmFsdWUgZnJvbSBvcHRpb25zIHdpbGwgYWx3YXlzIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgdmFsdWVcclxuICAgIC8vXHJcbiAgICBsZXQgZW5hYmxlZCA9IHRydWU7IC8vIGRlZmF1bHQgdmFsdWVcclxuICAgIGlmIChzcmNPcHRpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZW5hYmxlZCA9IHNyY09wdGlvbi5lbmFibGVkO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gVGFrZSBmcm9tIGdsb2JhbHMsIGlmIHByZXNlbnRcclxuICAgICAgICBpZiAoZ2xvYmFsRW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWQgPSBnbG9iYWxPcHRpb24uZW5hYmxlZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkb01lcmdlKG1lcmdlVGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pO1xyXG4gICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gZW5hYmxlZDtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSB2aXNpYmxlIGl0ZW0gaW4gYSBzb3J0ZWQgbGlzdC4gSWYgd2UgZmluZCBhIHZpc2libGUgaXRlbSwgdGhlIGNvZGUgdGhhdCB1c2VzXHJcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCB0aGVuIGl0ZXJhdGUgaW4gYm90aCBkaXJlY3Rpb25zIG92ZXIgdGhpcyBzb3J0ZWQgbGlzdCB0byBmaW5kIGFsbCB2aXNpYmxlIGl0ZW1zLlxyXG4gKlxyXG4gKiBAcGFyYW0gb3JkZXJlZEl0ZW1zIC0gSXRlbXMgb3JkZXJlZCBieSBzdGFydC5cclxuICogQHBhcmFtIGNvbXBhcmF0b3IgLSAtMSBpcyBsb3dlciwgMCBpcyBlcXVhbCwgMSBpcyBoaWdoZXIuXHJcbiAqIEBwYXJhbSBmaWVsZCAtIFByb3BlcnR5IG5hbWUgb24gYW4gaXRlbSAoVGhhdCBpcyBpdGVtW2ZpZWxkXSkuXHJcbiAqIEBwYXJhbSBmaWVsZDIgLSBTZWNvbmQgcHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdW2ZpZWxkMl0pLlxyXG4gKiBAcmV0dXJucyBJbmRleCBvZiB0aGUgZm91bmQgaXRlbSBvciAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC5cclxuICovXHJcbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaEN1c3RvbShvcmRlcmVkSXRlbXMsIGNvbXBhcmF0b3IsIGZpZWxkLCBmaWVsZDIpIHtcclxuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDAwMDtcclxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xyXG4gICAgbGV0IGxvdyA9IDA7XHJcbiAgICBsZXQgaGlnaCA9IG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgd2hpbGUgKGxvdyA8PSBoaWdoICYmIGl0ZXJhdGlvbiA8IG1heEl0ZXJhdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBvcmRlcmVkSXRlbXNbbWlkZGxlXTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkMiA9PT0gdW5kZWZpbmVkID8gaXRlbVtmaWVsZF0gOiBpdGVtW2ZpZWxkXVtmaWVsZDJdO1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdCA9IGNvbXBhcmF0b3IodmFsdWUpO1xyXG4gICAgICAgIGlmIChzZWFyY2hSZXN1bHQgPT0gMCkge1xyXG4gICAgICAgICAgICAvLyBqaWhhYSwgZm91bmQgYSB2aXNpYmxlIGl0ZW0hXHJcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNlYXJjaFJlc3VsdCA9PSAtMSkge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICBsb3cgPSBtaWRkbGUgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXQgaXMgdG9vIGJpZyAtLT4gZGVjcmVhc2UgaGlnaFxyXG4gICAgICAgICAgICBoaWdoID0gbWlkZGxlIC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaXRlcmF0aW9uKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGJpbmFyeSBzZWFyY2ggZm9yIGEgc3BlY2lmaWMgdmFsdWUgaW4gYSBzb3J0ZWQgYXJyYXkuXHJcbiAqIElmIGl0IGRvZXMgbm90IGV4aXN0IGJ1dCBpcyBpbiBiZXR3ZWVuIG9mIHR3byB2YWx1ZXMsIHdlIHJldHVybiBlaXRoZXIgdGhlXHJcbiAqIG9uZSBiZWZvcmUgb3IgdGhlIG9uZSBhZnRlciwgZGVwZW5kaW5nIG9uIHVzZXIgaW5wdXQgSWYgaXQgaXMgZm91bmQsIHdlXHJcbiAqIHJldHVybiB0aGUgaW5kZXgsIGVsc2UgLTEuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBTb3J0ZWQgYXJyYXkuXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgc2VhcmNoZWQgdmFsdWUuXHJcbiAqIEBwYXJhbSBmaWVsZCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IGluIGl0ZW1zIHRvIGJlIHNlYXJjaGVkLlxyXG4gKiBAcGFyYW0gc2lkZVByZWZlcmVuY2UgLSBJZiB0aGUgdGFyZ2V0IGlzIGJldHdlZW4gdHdvIHZhbHVlcywgc2hvdWxkIHRoZSBpbmRleCBvZiB0aGUgYmVmb3JlIG9yIHRoZSBhZnRlciBiZSByZXR1cm5lZD9cclxuICogQHBhcmFtIGNvbXBhcmF0b3IgLSBBbiBvcHRpb25hbCBjb21wYXJhdG9yLCByZXR1cm5pbmcgLTEsIDAsIDEgZm9yIFxcPCwgPT09LCBcXD4uXHJcbiAqIEByZXR1cm5zIFRoZSBpbmRleCBvZiBmb3VuZCB2YWx1ZSBvciAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC5cclxuICovXHJcbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaFZhbHVlKG9yZGVyZWRJdGVtcywgdGFyZ2V0LCBmaWVsZCwgc2lkZVByZWZlcmVuY2UsIGNvbXBhcmF0b3IpIHtcclxuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDAwMDtcclxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xyXG4gICAgbGV0IGxvdyA9IDA7XHJcbiAgICBsZXQgaGlnaCA9IG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgbGV0IHByZXZWYWx1ZTtcclxuICAgIGxldCB2YWx1ZTtcclxuICAgIGxldCBuZXh0VmFsdWU7XHJcbiAgICBsZXQgbWlkZGxlO1xyXG4gICAgY29tcGFyYXRvciA9XHJcbiAgICAgICAgY29tcGFyYXRvciAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBjb21wYXJhdG9yXHJcbiAgICAgICAgICAgIDogZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhID09IGIgPyAwIDogYSA8IGIgPyAtMSA6IDE7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIC8vIGdldCBhIG5ldyBndWVzc1xyXG4gICAgICAgIG1pZGRsZSA9IE1hdGguZmxvb3IoMC41ICogKGhpZ2ggKyBsb3cpKTtcclxuICAgICAgICBwcmV2VmFsdWUgPSBvcmRlcmVkSXRlbXNbTWF0aC5tYXgoMCwgbWlkZGxlIC0gMSldW2ZpZWxkXTtcclxuICAgICAgICB2YWx1ZSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdW2ZpZWxkXTtcclxuICAgICAgICBuZXh0VmFsdWUgPVxyXG4gICAgICAgICAgICBvcmRlcmVkSXRlbXNbTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpXVtmaWVsZF07XHJcbiAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPT0gMCkge1xyXG4gICAgICAgICAgICAvLyB3ZSBmb3VuZCB0aGUgdGFyZ2V0XHJcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmF0b3IocHJldlZhbHVlLCB0YXJnZXQpIDwgMCAmJlxyXG4gICAgICAgICAgICBjb21wYXJhdG9yKHZhbHVlLCB0YXJnZXQpID4gMCkge1xyXG4gICAgICAgICAgICAvLyB0YXJnZXQgaXMgaW4gYmV0d2VlbiBvZiB0aGUgcHJldmlvdXMgYW5kIHRoZSBjdXJyZW50XHJcbiAgICAgICAgICAgIHJldHVybiBzaWRlUHJlZmVyZW5jZSA9PSBcImJlZm9yZVwiID8gTWF0aC5tYXgoMCwgbWlkZGxlIC0gMSkgOiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IobmV4dFZhbHVlLCB0YXJnZXQpID4gMCkge1xyXG4gICAgICAgICAgICAvLyB0YXJnZXQgaXMgaW4gYmV0d2VlbiBvZiB0aGUgY3VycmVudCBhbmQgdGhlIG5leHRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCJcclxuICAgICAgICAgICAgICAgID8gbWlkZGxlXHJcbiAgICAgICAgICAgICAgICA6IE1hdGgubWluKG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxLCBtaWRkbGUgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGRpZG50IGZpbmQgdGhlIHRhcmdldCwgd2UgbmVlZCB0byBjaGFuZ2Ugb3VyIGJvdW5kYXJpZXMuXHJcbiAgICAgICAgICAgIGlmIChjb21wYXJhdG9yKHZhbHVlLCB0YXJnZXQpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaXQgaXMgdG9vIHNtYWxsIC0tPiBpbmNyZWFzZSBsb3dcclxuICAgICAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgICAgICBoaWdoID0gbWlkZGxlIC0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIC8vIGRpZG50IGZpbmQgYW55dGhpbmcuIFJldHVybiAtMS5cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKlxyXG4gKiBFYXNpbmcgRnVuY3Rpb25zLlxyXG4gKiBPbmx5IGNvbnNpZGVyaW5nIHRoZSB0IHZhbHVlIGZvciB0aGUgcmFuZ2UgWzAsIDFdID0+IFswLCAxXS5cclxuICpcclxuICogSW5zcGlyYXRpb246IGZyb20gaHR0cDovL2dpem1hLmNvbS9lYXNpbmcvXHJcbiAqIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2dyZS8xNjUwMjk0XHJcbiAqL1xyXG5jb25zdCBlYXNpbmdGdW5jdGlvbnMgPSB7XHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIG5vIGVhc2luZyBhbmQgbm8gYWNjZWxlcmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgbGluZWFyKHQpIHtcclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YWQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogKDIgLSB0KTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAyICogdCAqIHQgOiAtMSArICg0IC0gMiAqIHQpICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluQ3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiAtLXQgKiB0ICogdCArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJbk91dEN1YmljKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDQgKiB0ICogdCAqIHQgOiAodCAtIDEpICogKDIgKiB0IC0gMikgKiAoMiAqIHQgLSAyKSArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIGZyb20gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJblF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWFydCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAtLXQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJbk91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDggKiB0ICogdCAqIHQgKiB0IDogMSAtIDggKiAtLXQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIGZyb20gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJblF1aW50KHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiAxICsgLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gMTYgKiB0ICogdCAqIHQgKiB0ICogdCA6IDEgKyAxNiAqIC0tdCAqIHQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG59O1xyXG4vKipcclxuICogRXhwZXJpbWVudGFseSBjb21wdXRlIHRoZSB3aWR0aCBvZiB0aGUgc2Nyb2xsYmFyIGZvciB0aGlzIGJyb3dzZXIuXHJcbiAqXHJcbiAqIEByZXR1cm5zIFRoZSB3aWR0aCBpbiBwaXhlbHMuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTY3JvbGxCYXJXaWR0aCgpIHtcclxuICAgIGNvbnN0IGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICBpbm5lci5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xyXG4gICAgaW5uZXIuc3R5bGUuaGVpZ2h0ID0gXCIyMDBweFwiO1xyXG4gICAgY29uc3Qgb3V0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgb3V0ZXIuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICBvdXRlci5zdHlsZS50b3AgPSBcIjBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgIG91dGVyLnN0eWxlLndpZHRoID0gXCIyMDBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUuaGVpZ2h0ID0gXCIxNTBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlcik7XHJcbiAgICBjb25zdCB3MSA9IGlubmVyLm9mZnNldFdpZHRoO1xyXG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSBcInNjcm9sbFwiO1xyXG4gICAgbGV0IHcyID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBpZiAodzEgPT0gdzIpIHtcclxuICAgICAgICB3MiA9IG91dGVyLmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdXRlcik7XHJcbiAgICByZXR1cm4gdzEgLSB3MjtcclxufVxyXG4vLyBAVE9ETzogVGhpcyBkb2Vzbid0IHdvcmsgcHJvcGVybHkuXHJcbi8vIEl0IHdvcmtzIG9ubHkgZm9yIHNpbmdsZSBwcm9wZXJ0eSBvYmplY3RzLFxyXG4vLyBvdGhlcndpc2UgaXQgY29tYmluZXMgYWxsIG9mIHRoZSB0eXBlcyBpbiBhIHVuaW9uLlxyXG4vLyBleHBvcnQgZnVuY3Rpb24gdG9wTW9zdDxLMSBleHRlbmRzIHN0cmluZywgVjE+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxPltdLFxyXG4vLyAgIGFjY2Vzc29yczogSzEgfCBbSzFdXHJcbi8vICk6IHVuZGVmaW5lZCB8IFYxXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgVjEsIFYyPiAoXHJcbi8vICAgcGlsZTogUmVjb3JkPEsxLCB1bmRlZmluZWQgfCBWMSB8IFJlY29yZDxLMiwgdW5kZWZpbmVkIHwgVjI+PltdLFxyXG4vLyAgIGFjY2Vzc29yczogW0sxLCBLMl1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjEgfCBWMlxyXG4vLyBleHBvcnQgZnVuY3Rpb24gdG9wTW9zdDxLMSBleHRlbmRzIHN0cmluZywgSzIgZXh0ZW5kcyBzdHJpbmcsIEszIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjIsIFYzPiAoXHJcbi8vICAgcGlsZTogUmVjb3JkPEsxLCB1bmRlZmluZWQgfCBWMSB8IFJlY29yZDxLMiwgdW5kZWZpbmVkIHwgVjIgfCBSZWNvcmQ8SzMsIHVuZGVmaW5lZCB8IFYzPj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyLCBLM11cclxuLy8gKTogdW5kZWZpbmVkIHwgVjEgfCBWMiB8IFYzXHJcbi8qKlxyXG4gKiBHZXQgdGhlIHRvcCBtb3N0IHByb3BlcnR5IHZhbHVlIGZyb20gYSBwaWxlIG9mIG9iamVjdHMuXHJcbiAqXHJcbiAqIEBwYXJhbSBwaWxlIC0gQXJyYXkgb2Ygb2JqZWN0cywgbm8gcmVxdWlyZWQgZm9ybWF0LlxyXG4gKiBAcGFyYW0gYWNjZXNzb3JzIC0gQXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXHJcbiAqIEZvciBleGFtcGxlIGBvYmplY3RbJ2ZvbyddWydiYXInXWAg4oaSIGBbJ2ZvbycsICdiYXInXWAuXHJcbiAqIEByZXR1cm5zIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB3aXRoIGdpdmVuIGFjY2Vzc29ycyBwYXRoIGZyb20gdGhlIGZpcnN0IHBpbGUgaXRlbSB3aGVyZSBpdCdzIG5vdCB1bmRlZmluZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiB0b3BNb3N0KHBpbGUsIGFjY2Vzc29ycykge1xyXG4gICAgbGV0IGNhbmRpZGF0ZTtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShhY2Nlc3NvcnMpKSB7XHJcbiAgICAgICAgYWNjZXNzb3JzID0gW2FjY2Vzc29yc107XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBwaWxlKSB7XHJcbiAgICAgICAgaWYgKG1lbWJlcikge1xyXG4gICAgICAgICAgICBjYW5kaWRhdGUgPSBtZW1iZXJbYWNjZXNzb3JzWzBdXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhY2Nlc3NvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGVbYWNjZXNzb3JzW2ldXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbmRpZGF0ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FuZGlkYXRlO1xyXG59XG5cbmNvbnN0IGh0bWxDb2xvcnMgPSB7XG4gIGJsYWNrOiBcIiMwMDAwMDBcIixcbiAgbmF2eTogXCIjMDAwMDgwXCIsXG4gIGRhcmtibHVlOiBcIiMwMDAwOEJcIixcbiAgbWVkaXVtYmx1ZTogXCIjMDAwMENEXCIsXG4gIGJsdWU6IFwiIzAwMDBGRlwiLFxuICBkYXJrZ3JlZW46IFwiIzAwNjQwMFwiLFxuICBncmVlbjogXCIjMDA4MDAwXCIsXG4gIHRlYWw6IFwiIzAwODA4MFwiLFxuICBkYXJrY3lhbjogXCIjMDA4QjhCXCIsXG4gIGRlZXBza3libHVlOiBcIiMwMEJGRkZcIixcbiAgZGFya3R1cnF1b2lzZTogXCIjMDBDRUQxXCIsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiBcIiMwMEZBOUFcIixcbiAgbGltZTogXCIjMDBGRjAwXCIsXG4gIHNwcmluZ2dyZWVuOiBcIiMwMEZGN0ZcIixcbiAgYXF1YTogXCIjMDBGRkZGXCIsXG4gIGN5YW46IFwiIzAwRkZGRlwiLFxuICBtaWRuaWdodGJsdWU6IFwiIzE5MTk3MFwiLFxuICBkb2RnZXJibHVlOiBcIiMxRTkwRkZcIixcbiAgbGlnaHRzZWFncmVlbjogXCIjMjBCMkFBXCIsXG4gIGZvcmVzdGdyZWVuOiBcIiMyMjhCMjJcIixcbiAgc2VhZ3JlZW46IFwiIzJFOEI1N1wiLFxuICBkYXJrc2xhdGVncmF5OiBcIiMyRjRGNEZcIixcbiAgbGltZWdyZWVuOiBcIiMzMkNEMzJcIixcbiAgbWVkaXVtc2VhZ3JlZW46IFwiIzNDQjM3MVwiLFxuICB0dXJxdW9pc2U6IFwiIzQwRTBEMFwiLFxuICByb3lhbGJsdWU6IFwiIzQxNjlFMVwiLFxuICBzdGVlbGJsdWU6IFwiIzQ2ODJCNFwiLFxuICBkYXJrc2xhdGVibHVlOiBcIiM0ODNEOEJcIixcbiAgbWVkaXVtdHVycXVvaXNlOiBcIiM0OEQxQ0NcIixcbiAgaW5kaWdvOiBcIiM0QjAwODJcIixcbiAgZGFya29saXZlZ3JlZW46IFwiIzU1NkIyRlwiLFxuICBjYWRldGJsdWU6IFwiIzVGOUVBMFwiLFxuICBjb3JuZmxvd2VyYmx1ZTogXCIjNjQ5NUVEXCIsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IFwiIzY2Q0RBQVwiLFxuICBkaW1ncmF5OiBcIiM2OTY5NjlcIixcbiAgc2xhdGVibHVlOiBcIiM2QTVBQ0RcIixcbiAgb2xpdmVkcmFiOiBcIiM2QjhFMjNcIixcbiAgc2xhdGVncmF5OiBcIiM3MDgwOTBcIixcbiAgbGlnaHRzbGF0ZWdyYXk6IFwiIzc3ODg5OVwiLFxuICBtZWRpdW1zbGF0ZWJsdWU6IFwiIzdCNjhFRVwiLFxuICBsYXduZ3JlZW46IFwiIzdDRkMwMFwiLFxuICBjaGFydHJldXNlOiBcIiM3RkZGMDBcIixcbiAgYXF1YW1hcmluZTogXCIjN0ZGRkQ0XCIsXG4gIG1hcm9vbjogXCIjODAwMDAwXCIsXG4gIHB1cnBsZTogXCIjODAwMDgwXCIsXG4gIG9saXZlOiBcIiM4MDgwMDBcIixcbiAgZ3JheTogXCIjODA4MDgwXCIsXG4gIHNreWJsdWU6IFwiIzg3Q0VFQlwiLFxuICBsaWdodHNreWJsdWU6IFwiIzg3Q0VGQVwiLFxuICBibHVldmlvbGV0OiBcIiM4QTJCRTJcIixcbiAgZGFya3JlZDogXCIjOEIwMDAwXCIsXG4gIGRhcmttYWdlbnRhOiBcIiM4QjAwOEJcIixcbiAgc2FkZGxlYnJvd246IFwiIzhCNDUxM1wiLFxuICBkYXJrc2VhZ3JlZW46IFwiIzhGQkM4RlwiLFxuICBsaWdodGdyZWVuOiBcIiM5MEVFOTBcIixcbiAgbWVkaXVtcHVycGxlOiBcIiM5MzcwRDhcIixcbiAgZGFya3Zpb2xldDogXCIjOTQwMEQzXCIsXG4gIHBhbGVncmVlbjogXCIjOThGQjk4XCIsXG4gIGRhcmtvcmNoaWQ6IFwiIzk5MzJDQ1wiLFxuICB5ZWxsb3dncmVlbjogXCIjOUFDRDMyXCIsXG4gIHNpZW5uYTogXCIjQTA1MjJEXCIsXG4gIGJyb3duOiBcIiNBNTJBMkFcIixcbiAgZGFya2dyYXk6IFwiI0E5QTlBOVwiLFxuICBsaWdodGJsdWU6IFwiI0FERDhFNlwiLFxuICBncmVlbnllbGxvdzogXCIjQURGRjJGXCIsXG4gIHBhbGV0dXJxdW9pc2U6IFwiI0FGRUVFRVwiLFxuICBsaWdodHN0ZWVsYmx1ZTogXCIjQjBDNERFXCIsXG4gIHBvd2RlcmJsdWU6IFwiI0IwRTBFNlwiLFxuICBmaXJlYnJpY2s6IFwiI0IyMjIyMlwiLFxuICBkYXJrZ29sZGVucm9kOiBcIiNCODg2MEJcIixcbiAgbWVkaXVtb3JjaGlkOiBcIiNCQTU1RDNcIixcbiAgcm9zeWJyb3duOiBcIiNCQzhGOEZcIixcbiAgZGFya2toYWtpOiBcIiNCREI3NkJcIixcbiAgc2lsdmVyOiBcIiNDMEMwQzBcIixcbiAgbWVkaXVtdmlvbGV0cmVkOiBcIiNDNzE1ODVcIixcbiAgaW5kaWFucmVkOiBcIiNDRDVDNUNcIixcbiAgcGVydTogXCIjQ0Q4NTNGXCIsXG4gIGNob2NvbGF0ZTogXCIjRDI2OTFFXCIsXG4gIHRhbjogXCIjRDJCNDhDXCIsXG4gIGxpZ2h0Z3JleTogXCIjRDNEM0QzXCIsXG4gIHBhbGV2aW9sZXRyZWQ6IFwiI0Q4NzA5M1wiLFxuICB0aGlzdGxlOiBcIiNEOEJGRDhcIixcbiAgb3JjaGlkOiBcIiNEQTcwRDZcIixcbiAgZ29sZGVucm9kOiBcIiNEQUE1MjBcIixcbiAgY3JpbXNvbjogXCIjREMxNDNDXCIsXG4gIGdhaW5zYm9ybzogXCIjRENEQ0RDXCIsXG4gIHBsdW06IFwiI0REQTBERFwiLFxuICBidXJseXdvb2Q6IFwiI0RFQjg4N1wiLFxuICBsaWdodGN5YW46IFwiI0UwRkZGRlwiLFxuICBsYXZlbmRlcjogXCIjRTZFNkZBXCIsXG4gIGRhcmtzYWxtb246IFwiI0U5OTY3QVwiLFxuICB2aW9sZXQ6IFwiI0VFODJFRVwiLFxuICBwYWxlZ29sZGVucm9kOiBcIiNFRUU4QUFcIixcbiAgbGlnaHRjb3JhbDogXCIjRjA4MDgwXCIsXG4gIGtoYWtpOiBcIiNGMEU2OENcIixcbiAgYWxpY2VibHVlOiBcIiNGMEY4RkZcIixcbiAgaG9uZXlkZXc6IFwiI0YwRkZGMFwiLFxuICBhenVyZTogXCIjRjBGRkZGXCIsXG4gIHNhbmR5YnJvd246IFwiI0Y0QTQ2MFwiLFxuICB3aGVhdDogXCIjRjVERUIzXCIsXG4gIGJlaWdlOiBcIiNGNUY1RENcIixcbiAgd2hpdGVzbW9rZTogXCIjRjVGNUY1XCIsXG4gIG1pbnRjcmVhbTogXCIjRjVGRkZBXCIsXG4gIGdob3N0d2hpdGU6IFwiI0Y4RjhGRlwiLFxuICBzYWxtb246IFwiI0ZBODA3MlwiLFxuICBhbnRpcXVld2hpdGU6IFwiI0ZBRUJEN1wiLFxuICBsaW5lbjogXCIjRkFGMEU2XCIsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiBcIiNGQUZBRDJcIixcbiAgb2xkbGFjZTogXCIjRkRGNUU2XCIsXG4gIHJlZDogXCIjRkYwMDAwXCIsXG4gIGZ1Y2hzaWE6IFwiI0ZGMDBGRlwiLFxuICBtYWdlbnRhOiBcIiNGRjAwRkZcIixcbiAgZGVlcHBpbms6IFwiI0ZGMTQ5M1wiLFxuICBvcmFuZ2VyZWQ6IFwiI0ZGNDUwMFwiLFxuICB0b21hdG86IFwiI0ZGNjM0N1wiLFxuICBob3RwaW5rOiBcIiNGRjY5QjRcIixcbiAgY29yYWw6IFwiI0ZGN0Y1MFwiLFxuICBkYXJrb3JhbmdlOiBcIiNGRjhDMDBcIixcbiAgbGlnaHRzYWxtb246IFwiI0ZGQTA3QVwiLFxuICBvcmFuZ2U6IFwiI0ZGQTUwMFwiLFxuICBsaWdodHBpbms6IFwiI0ZGQjZDMVwiLFxuICBwaW5rOiBcIiNGRkMwQ0JcIixcbiAgZ29sZDogXCIjRkZENzAwXCIsXG4gIHBlYWNocHVmZjogXCIjRkZEQUI5XCIsXG4gIG5hdmFqb3doaXRlOiBcIiNGRkRFQURcIixcbiAgbW9jY2FzaW46IFwiI0ZGRTRCNVwiLFxuICBiaXNxdWU6IFwiI0ZGRTRDNFwiLFxuICBtaXN0eXJvc2U6IFwiI0ZGRTRFMVwiLFxuICBibGFuY2hlZGFsbW9uZDogXCIjRkZFQkNEXCIsXG4gIHBhcGF5YXdoaXA6IFwiI0ZGRUZENVwiLFxuICBsYXZlbmRlcmJsdXNoOiBcIiNGRkYwRjVcIixcbiAgc2Vhc2hlbGw6IFwiI0ZGRjVFRVwiLFxuICBjb3Juc2lsazogXCIjRkZGOERDXCIsXG4gIGxlbW9uY2hpZmZvbjogXCIjRkZGQUNEXCIsXG4gIGZsb3JhbHdoaXRlOiBcIiNGRkZBRjBcIixcbiAgc25vdzogXCIjRkZGQUZBXCIsXG4gIHllbGxvdzogXCIjRkZGRjAwXCIsXG4gIGxpZ2h0eWVsbG93OiBcIiNGRkZGRTBcIixcbiAgaXZvcnk6IFwiI0ZGRkZGMFwiLFxuICB3aGl0ZTogXCIjRkZGRkZGXCIsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGl4ZWxSYXRpbz0xXVxuICovXG5sZXQgQ29sb3JQaWNrZXIkMSA9IGNsYXNzIENvbG9yUGlja2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGl4ZWxSYXRpbz0xXVxuICAgKi9cbiAgY29uc3RydWN0b3IocGl4ZWxSYXRpbyA9IDEpIHtcbiAgICB0aGlzLnBpeGVsUmF0aW8gPSBwaXhlbFJhdGlvO1xuICAgIHRoaXMuZ2VuZXJhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5jZW50ZXJDb29yZGluYXRlcyA9IHsgeDogMjg5IC8gMiwgeTogMjg5IC8gMiB9O1xuICAgIHRoaXMuciA9IDI4OSAqIDAuNDk7XG4gICAgdGhpcy5jb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5odWVDaXJjbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pbml0aWFsQ29sb3IgPSB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGE6IDEuMCB9O1xuICAgIHRoaXMucHJldmlvdXNDb2xvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFwcGxpZWQgPSBmYWxzZTtcblxuICAgIC8vIGJvdW5kIGJ5XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayA9ICgpID0+IHt9O1xuICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9ICgpID0+IHt9O1xuXG4gICAgLy8gY3JlYXRlIGFsbCBET00gZWxlbWVudHNcbiAgICB0aGlzLl9jcmVhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGluc2VydHMgdGhlIGNvbG9yUGlja2VyIGludG8gYSBkaXYgZnJvbSB0aGUgRE9NXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyXG4gICAqL1xuICBpbnNlcnRUbyhjb250YWluZXIpIHtcbiAgICBpZiAodGhpcy5oYW1tZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5oYW1tZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy5oYW1tZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICAgIHRoaXMuX2JpbmRIYW1tZXIoKTtcblxuICAgIHRoaXMuX3NldFNpemUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgb24gYXBwbHkgYW5kIHNhdmUuIEJpbmQgaXQgdG8gdGhlIGFwcGxpY2F0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBzZXRVcGRhdGVDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRnVuY3Rpb24gYXR0ZW1wdGVkIHRvIHNldCBhcyBjb2xvclBpY2tlciB1cGRhdGUgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldENsb3NlQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRnVuY3Rpb24gYXR0ZW1wdGVkIHRvIHNldCBhcyBjb2xvclBpY2tlciBjbG9zaW5nIGNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pc0NvbG9yU3RyaW5nKGNvbG9yKSB7XG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGh0bWxDb2xvcnNbY29sb3JdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbG9yIG9mIHRoZSBjb2xvclBpY2tlclxuICAgKiBTdXBwb3J0ZWQgZm9ybWF0czpcbiAgICogJ3JlZCcgICAgICAgICAgICAgICAgICAgLS0+IEhUTUwgY29sb3Igc3RyaW5nXG4gICAqICcjZmZmZmZmJyAgICAgICAgICAgICAgIC0tPiBoZXggc3RyaW5nXG4gICAqICdyZ2IoMjU1LDI1NSwyNTUpJyAgICAgIC0tPiByZ2Igc3RyaW5nXG4gICAqICdyZ2JhKDI1NSwyNTUsMjU1LDEuMCknIC0tPiByZ2JhIHN0cmluZ1xuICAgKiB7cjoyNTUsZzoyNTUsYjoyNTV9ICAgICAtLT4gcmdiIG9iamVjdFxuICAgKiB7cjoyNTUsZzoyNTUsYjoyNTUsYToxLjB9IC0tPiByZ2JhIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG9iamVjdH0gY29sb3JcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2V0SW5pdGlhbD10cnVlXVxuICAgKi9cbiAgc2V0Q29sb3IoY29sb3IsIHNldEluaXRpYWwgPSB0cnVlKSB7XG4gICAgaWYgKGNvbG9yID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZ2JhO1xuXG4gICAgLy8gaWYgYSBodG1sIGNvbG9yIHNob3J0aGFuZCBpcyB1c2VkLCBjb252ZXJ0IHRvIGhleFxuICAgIGNvbnN0IGh0bWxDb2xvciA9IHRoaXMuX2lzQ29sb3JTdHJpbmcoY29sb3IpO1xuICAgIGlmIChodG1sQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29sb3IgPSBodG1sQ29sb3I7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9ybWF0XG4gICAgaWYgKGlzU3RyaW5nKGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKGlzVmFsaWRSR0IoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHJnYmFBcnJheSA9IGNvbG9yXG4gICAgICAgICAgLnN1YnN0cig0KVxuICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3IubGVuZ3RoIC0gNSlcbiAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xuICAgICAgICByZ2JhID0geyByOiByZ2JhQXJyYXlbMF0sIGc6IHJnYmFBcnJheVsxXSwgYjogcmdiYUFycmF5WzJdLCBhOiAxLjAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZFJHQkEoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHJnYmFBcnJheSA9IGNvbG9yXG4gICAgICAgICAgLnN1YnN0cig1KVxuICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3IubGVuZ3RoIC0gNilcbiAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xuICAgICAgICByZ2JhID0ge1xuICAgICAgICAgIHI6IHJnYmFBcnJheVswXSxcbiAgICAgICAgICBnOiByZ2JhQXJyYXlbMV0sXG4gICAgICAgICAgYjogcmdiYUFycmF5WzJdLFxuICAgICAgICAgIGE6IHJnYmFBcnJheVszXSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZEhleChjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiT2JqID0gaGV4VG9SR0IoY29sb3IpO1xuICAgICAgICByZ2JhID0geyByOiByZ2JPYmouciwgZzogcmdiT2JqLmcsIGI6IHJnYk9iai5iLCBhOiAxLjAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbG9yIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2xvci5yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb2xvci5nICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb2xvci5iICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgYWxwaGEgPSBjb2xvci5hICE9PSB1bmRlZmluZWQgPyBjb2xvci5hIDogXCIxLjBcIjtcbiAgICAgICAgICByZ2JhID0geyByOiBjb2xvci5yLCBnOiBjb2xvci5nLCBiOiBjb2xvci5iLCBhOiBhbHBoYSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbG9yXG4gICAgaWYgKHJnYmEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlVua25vd24gY29sb3IgcGFzc2VkIHRvIHRoZSBjb2xvclBpY2tlci4gU3VwcG9ydGVkIGFyZSBzdHJpbmdzOiByZ2IsIGhleCwgcmdiYS4gT2JqZWN0OiByZ2IgKHtyOnIsZzpnLGI6YixbYTphXX0pLiBTdXBwbGllZDogXCIgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNvbG9yKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0Q29sb3IocmdiYSwgc2V0SW5pdGlhbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgc2hvd3MgdGhlIGNvbG9yIHBpY2tlci5cbiAgICogVGhlIGh1ZSBjaXJjbGUgaXMgY29uc3RydWN0ZWQgb25jZSBhbmQgc3RvcmVkLlxuICAgKi9cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICB0aGlzLl9nZW5lcmF0ZUh1ZUNpcmNsZSgpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBSSVZBVEUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuICAvKipcbiAgICogSGlkZSB0aGUgcGlja2VyLiBJcyBjYWxsZWQgYnkgdGhlIGNhbmNlbCBidXR0b24uXG4gICAqIE9wdGlvbmFsIGJvb2xlYW4gdG8gc3RvcmUgdGhlIHByZXZpb3VzIGNvbG9yIGZvciBlYXN5IGFjY2VzcyBsYXRlciBvbi5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbc3RvcmVQcmV2aW91cz10cnVlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hpZGUoc3RvcmVQcmV2aW91cyA9IHRydWUpIHtcbiAgICAvLyBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIG5leHQgdGltZTtcbiAgICBpZiAoc3RvcmVQcmV2aW91cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5wcmV2aW91c0NvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXBwbGllZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmluaXRpYWxDb2xvcik7XG4gICAgfVxuXG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cbiAgICAvLyBjYWxsIHRoZSBjbG9zaW5nIGNhbGxiYWNrLCByZXN0b3JpbmcgdGhlIG9uY2xpY2sgbWV0aG9kLlxuICAgIC8vIHRoaXMgaXMgaW4gYSBzZXRUaW1lb3V0IGJlY2F1c2UgaXQgd2lsbCB0cmlnZ2VyIHRoZSBzaG93IGFnYWluIGJlZm9yZSB0aGUgY2xpY2sgaXMgZG9uZS5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcbiAgICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIGJvdW5kIHRvIHRoZSBzYXZlIGJ1dHRvbi4gU2F2ZXMgYW5kIGhpZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NhdmUoKSB7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLmFwcGxpZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9oaWRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQm91bmQgdG8gYXBwbHkgYnV0dG9uLiBTYXZlcyBidXQgZG9lcyBub3QgY2xvc2UuIElzIHVuZG9uZSBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hcHBseSgpIHtcbiAgICB0aGlzLmFwcGxpZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2sodGhpcy5jb2xvcik7XG4gICAgdGhpcy5fdXBkYXRlUGlja2VyKHRoaXMuY29sb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIGxvYWQgdGhlIGNvbG9yIGZyb20gdGhlIHByZXZpb3VzIHNlc3Npb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbG9hZExhc3QoKSB7XG4gICAgaWYgKHRoaXMucHJldmlvdXNDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldENvbG9yKHRoaXMucHJldmlvdXNDb2xvciwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGVydChcIlRoZXJlIGlzIG5vIGxhc3QgY29sb3IgdG8gbG9hZC4uLlwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBjb2xvciwgcGxhY2UgdGhlIHBpY2tlclxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0Q29sb3IocmdiYSwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICAvLyBzdG9yZSB0aGUgaW5pdGlhbCBjb2xvclxuICAgIGlmIChzZXRJbml0aWFsID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmluaXRpYWxDb2xvciA9IE9iamVjdC5hc3NpZ24oe30sIHJnYmEpO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuXG4gICAgY29uc3QgYW5nbGVDb252ZXJ0ID0gMiAqIE1hdGguUEk7XG4gICAgY29uc3QgcmFkaXVzID0gdGhpcy5yICogaHN2LnM7XG4gICAgY29uc3QgeCA9XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnggKyByYWRpdXMgKiBNYXRoLnNpbihhbmdsZUNvbnZlcnQgKiBoc3YuaCk7XG4gICAgY29uc3QgeSA9XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnkgKyByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZUNvbnZlcnQgKiBoc3YuaCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUubGVmdCA9XG4gICAgICB4IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudFdpZHRoICsgXCJweFwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS50b3AgPVxuICAgICAgeSAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG5cbiAgICB0aGlzLl91cGRhdGVQaWNrZXIocmdiYSk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gb3BhY2l0eSBjb250cm9sXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldE9wYWNpdHkodmFsdWUpIHtcbiAgICB0aGlzLmNvbG9yLmEgPSB2YWx1ZSAvIDEwMDtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gYnJpZ2h0bmVzcyBjb250cm9sXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldEJyaWdodG5lc3ModmFsdWUpIHtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVih0aGlzLmNvbG9yLnIsIHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iKTtcbiAgICBoc3YudiA9IHZhbHVlIC8gMTAwO1xuICAgIGNvbnN0IHJnYmEgPSBIU1ZUb1JHQihoc3YuaCwgaHN2LnMsIGhzdi52KTtcbiAgICByZ2JhW1wiYVwiXSA9IHRoaXMuY29sb3IuYTtcbiAgICB0aGlzLmNvbG9yID0gcmdiYTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGUgdGhlIGNvbG9yIHBpY2tlci4gQSBibGFjayBjaXJjbGUgb3ZlcmxheXMgdGhlIGh1ZSBjaXJjbGUgdG8gbWltaWMgdGhlIGJyaWdodG5lc3MgZGVjcmVhc2luZy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHJnYmFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVQaWNrZXIocmdiYSA9IHRoaXMuY29sb3IpIHtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVihyZ2JhLnIsIHJnYmEuZywgcmdiYS5iKTtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICBpZiAodGhpcy5waXhlbFJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBpeGVsUmF0aW8gPVxuICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAoY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHguYmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIDEpO1xuICAgIH1cbiAgICBjdHguc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcblxuICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICBjb25zdCB3ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBoID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRIZWlnaHQ7XG4gICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgIGN0eC5wdXRJbWFnZURhdGEodGhpcy5odWVDaXJjbGUsIDAsIDApO1xuICAgIGN0eC5maWxsU3R5bGUgPSBcInJnYmEoMCwwLDAsXCIgKyAoMSAtIGhzdi52KSArIFwiKVwiO1xuICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgY3R4LmZpbGwoKTtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gMTAwICogaHN2LnY7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UudmFsdWUgPSAxMDAgKiByZ2JhLmE7XG5cbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgXCJyZ2JhKFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5iICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gICAgdGhpcy5uZXdDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgXCJyZ2JhKFwiICtcbiAgICAgIHRoaXMuY29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5iICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB1c2VkIGJ5IGNyZWF0ZSB0byBzZXQgdGhlIHNpemUgb2YgdGhlIGNhbnZhcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRTaXplKCkge1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLnN0eWxlLmhlaWdodCA9IFwiMTAwJVwiO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy53aWR0aCA9IDI4OSAqIHRoaXMucGl4ZWxSYXRpbztcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmhlaWdodCA9IDI4OSAqIHRoaXMucGl4ZWxSYXRpbztcbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGUgYWxsIGRvbSBlbGVtZW50c1xuICAgKiBUT0RPOiBjbGVhbnVwLCBsb3RzIG9mIHNpbWlsYXIgZG9tIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlKCkge1xuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtY29sb3ItcGlja2VyXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGFzc05hbWUgPSBcInZpcy1zZWxlY3RvclwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlclNlbGVjdG9yKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckNhbnZhcyk7XG5cbiAgICBpZiAoIXRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dCkge1xuICAgICAgY29uc3Qgbm9DYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpO1xuICAgICAgbm9DYW52YXMuc3R5bGUuY29sb3IgPSBcInJlZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUucGFkZGluZyA9IFwiMTBweFwiO1xuICAgICAgbm9DYW52YXMuaW5uZXJUZXh0ID0gXCJFcnJvcjogeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTCBjYW52YXNcIjtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuYXBwZW5kQ2hpbGQobm9DYW52YXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzXG4gICAgICAgIC5nZXRDb250ZXh0KFwiMmRcIilcbiAgICAgICAgLnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5jbGFzc05hbWUgPSBcInZpcy1jb2xvclwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm9wYWNpdHlEaXYuY2xhc3NOYW1lID0gXCJ2aXMtb3BhY2l0eVwiO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuY2xhc3NOYW1lID0gXCJ2aXMtYnJpZ2h0bmVzc1wiO1xuXG4gICAgdGhpcy5hcnJvd0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcnJvd0Rpdi5jbGFzc05hbWUgPSBcInZpcy1hcnJvd1wiO1xuXG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLnR5cGUgPSBcInJhbmdlXCI7IC8vIE5vdCBzdXBwb3J0ZWQgb24gSUU5XG4gICAgICB0aGlzLm9wYWNpdHlSYW5nZS5taW4gPSBcIjBcIjtcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1heCA9IFwiMTAwXCI7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPOiBBZGQgc29tZSBlcnJvciBoYW5kbGluZy5cbiAgICB9XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UudmFsdWUgPSBcIjEwMFwiO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLmNsYXNzTmFtZSA9IFwidmlzLXJhbmdlXCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMub3BhY2l0eURpdi5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlSYW5nZSk7XG4gICAgdGhpcy5icmlnaHRuZXNzRGl2LmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc1JhbmdlKTtcblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRPcGFjaXR5KHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRPcGFjaXR5KHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fc2V0QnJpZ2h0bmVzcyh0aGlzLnZhbHVlKTtcbiAgICB9O1xuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fc2V0QnJpZ2h0bmVzcyh0aGlzLnZhbHVlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0xhYmVsLmNsYXNzTmFtZSA9IFwidmlzLWxhYmVsIHZpcy1icmlnaHRuZXNzXCI7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuaW5uZXJUZXh0ID0gXCJicmlnaHRuZXNzOlwiO1xuXG4gICAgdGhpcy5vcGFjaXR5TGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eUxhYmVsLmNsYXNzTmFtZSA9IFwidmlzLWxhYmVsIHZpcy1vcGFjaXR5XCI7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuaW5uZXJUZXh0ID0gXCJvcGFjaXR5OlwiO1xuXG4gICAgdGhpcy5uZXdDb2xvckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5uZXdDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1uZXctY29sb3JcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmlubmVyVGV4dCA9IFwibmV3XCI7XG5cbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuY2xhc3NOYW1lID0gXCJ2aXMtaW5pdGlhbC1jb2xvclwiO1xuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LmlubmVyVGV4dCA9IFwiaW5pdGlhbFwiO1xuXG4gICAgdGhpcy5jYW5jZWxCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtY2FuY2VsXCI7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uaW5uZXJUZXh0ID0gXCJjYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5faGlkZS5iaW5kKHRoaXMsIGZhbHNlKTtcblxuICAgIHRoaXMuYXBwbHlCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYXBwbHlCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1hcHBseVwiO1xuICAgIHRoaXMuYXBwbHlCdXR0b24uaW5uZXJUZXh0ID0gXCJhcHBseVwiO1xuICAgIHRoaXMuYXBwbHlCdXR0b24ub25jbGljayA9IHRoaXMuX2FwcGx5LmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnNhdmVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLXNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24uaW5uZXJUZXh0ID0gXCJzYXZlXCI7XG4gICAgdGhpcy5zYXZlQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9zYXZlLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmxvYWRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWxvYWRcIjtcbiAgICB0aGlzLmxvYWRCdXR0b24uaW5uZXJUZXh0ID0gXCJsb2FkIGxhc3RcIjtcbiAgICB0aGlzLmxvYWRCdXR0b24ub25jbGljayA9IHRoaXMuX2xvYWRMYXN0LmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY29sb3JQaWNrZXJEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5hcnJvd0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmJyaWdodG5lc3NMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmJyaWdodG5lc3NEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5vcGFjaXR5TGFiZWwpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5vcGFjaXR5RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubmV3Q29sb3JEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5pbml0aWFsQ29sb3JEaXYpO1xuXG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmNhbmNlbEJ1dHRvbik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFwcGx5QnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuc2F2ZUJ1dHRvbik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmxvYWRCdXR0b24pO1xuICB9XG5cbiAgLyoqXG4gICAqIGJpbmQgaGFtbWVyIHRvIHRoZSBjb2xvciBwaWNrZXJcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9iaW5kSGFtbWVyKCkge1xuICAgIHRoaXMuZHJhZyA9IHt9O1xuICAgIHRoaXMucGluY2ggPSB7fTtcbiAgICB0aGlzLmhhbW1lciA9IG5ldyBIYW1tZXIkMSh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcbiAgICB0aGlzLmhhbW1lci5nZXQoXCJwaW5jaFwiKS5zZXQoeyBlbmFibGU6IHRydWUgfSk7XG5cbiAgICB0aGlzLmhhbW1lci5vbihcImhhbW1lci5pbnB1dFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5pc0ZpcnN0KSB7XG4gICAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJ0YXBcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFuc3RhcnRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFubW92ZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5lbmRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlIHRoZSBodWUgY2lyY2xlLiBUaGlzIGlzIHJlbGF0aXZlbHkgaGVhdnkgKDIwMG1zKSBhbmQgaXMgZG9uZSBvbmx5IG9uY2Ugb24gdGhlIGZpcnN0IHRpbWUgaXQgaXMgc2hvd24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2VuZXJhdGVIdWVDaXJjbGUoKSB7XG4gICAgaWYgKHRoaXMuZ2VuZXJhdGVkID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgY3R4ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICBpZiAodGhpcy5waXhlbFJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgICAoY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICBjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICAxKTtcbiAgICAgIH1cbiAgICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgICAvLyBjbGVhciB0aGUgY2FudmFzXG4gICAgICBjb25zdCB3ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG5cbiAgICAgIC8vIGRyYXcgaHVlIGNpcmNsZVxuICAgICAgbGV0IHgsIHksIGh1ZSwgc2F0O1xuICAgICAgdGhpcy5jZW50ZXJDb29yZGluYXRlcyA9IHsgeDogdyAqIDAuNSwgeTogaCAqIDAuNSB9O1xuICAgICAgdGhpcy5yID0gMC40OSAqIHc7XG4gICAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAoMiAqIE1hdGguUEkpIC8gMzYwO1xuICAgICAgY29uc3QgaGZhYyA9IDEgLyAzNjA7XG4gICAgICBjb25zdCBzZmFjID0gMSAvIHRoaXMucjtcbiAgICAgIGxldCByZ2I7XG4gICAgICBmb3IgKGh1ZSA9IDA7IGh1ZSA8IDM2MDsgaHVlKyspIHtcbiAgICAgICAgZm9yIChzYXQgPSAwOyBzYXQgPCB0aGlzLnI7IHNhdCsrKSB7XG4gICAgICAgICAgeCA9IHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHNhdCAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGh1ZSk7XG4gICAgICAgICAgeSA9IHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHNhdCAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGh1ZSk7XG4gICAgICAgICAgcmdiID0gSFNWVG9SR0IoaHVlICogaGZhYywgc2F0ICogc2ZhYywgMSk7XG4gICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiKFwiICsgcmdiLnIgKyBcIixcIiArIHJnYi5nICsgXCIsXCIgKyByZ2IuYiArIFwiKVwiO1xuICAgICAgICAgIGN0eC5maWxsUmVjdCh4IC0gMC41LCB5IC0gMC41LCAyLCAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCJyZ2JhKDAsMCwwLDEpXCI7XG4gICAgICBjdHguY2lyY2xlKHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCwgdGhpcy5jZW50ZXJDb29yZGluYXRlcy55LCB0aGlzLnIpO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICB0aGlzLmh1ZUNpcmNsZSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgdywgaCk7XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtb3ZlIHRoZSBzZWxlY3Rvci4gVGhpcyBpcyBjYWxsZWQgYnkgaGFtbWVyIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbW92ZVNlbGVjdG9yKGV2ZW50KSB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuY29sb3JQaWNrZXJEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbGVmdCA9IGV2ZW50LmNlbnRlci54IC0gcmVjdC5sZWZ0O1xuICAgIGNvbnN0IHRvcCA9IGV2ZW50LmNlbnRlci55IC0gcmVjdC50b3A7XG5cbiAgICBjb25zdCBjZW50ZXJZID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgY2VudGVyWCA9IDAuNSAqIHRoaXMuY29sb3JQaWNrZXJEaXYuY2xpZW50V2lkdGg7XG5cbiAgICBjb25zdCB4ID0gbGVmdCAtIGNlbnRlclg7XG4gICAgY29uc3QgeSA9IHRvcCAtIGNlbnRlclk7XG5cbiAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIoeCwgeSk7XG4gICAgY29uc3QgcmFkaXVzID0gMC45OCAqIE1hdGgubWluKE1hdGguc3FydCh4ICogeCArIHkgKiB5KSwgY2VudGVyWCk7XG5cbiAgICBjb25zdCBuZXdUb3AgPSBNYXRoLmNvcyhhbmdsZSkgKiByYWRpdXMgKyBjZW50ZXJZO1xuICAgIGNvbnN0IG5ld0xlZnQgPSBNYXRoLnNpbihhbmdsZSkgKiByYWRpdXMgKyBjZW50ZXJYO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICBuZXdUb3AgLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50SGVpZ2h0ICsgXCJweFwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIG5ld0xlZnQgLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBsZXQgaCA9IGFuZ2xlIC8gKDIgKiBNYXRoLlBJKTtcbiAgICBoID0gaCA8IDAgPyBoICsgMSA6IGg7XG4gICAgY29uc3QgcyA9IHJhZGl1cyAvIHRoaXMucjtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVih0aGlzLmNvbG9yLnIsIHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iKTtcbiAgICBoc3YuaCA9IGg7XG4gICAgaHN2LnMgPSBzO1xuICAgIGNvbnN0IHJnYmEgPSBIU1ZUb1JHQihoc3YuaCwgaHN2LnMsIGhzdi52KTtcbiAgICByZ2JhW1wiYVwiXSA9IHRoaXMuY29sb3IuYTtcbiAgICB0aGlzLmNvbG9yID0gcmdiYTtcblxuICAgIC8vIHVwZGF0ZSBwcmV2aWV3c1xuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG59O1xuXG4vKipcbiAqIFdyYXAgZ2l2ZW4gdGV4dCAobGFzdCBhcmd1bWVudCkgaW4gSFRNTCBlbGVtZW50cyAoYWxsIHByZWNlZGluZyBhcmd1bWVudHMpLlxuICpcbiAqIEBwYXJhbSB7Li4uYW55fSByZXN0IC0gTGlzdCBvZiB0YWcgbmFtZXMgZm9sbG93ZWQgYnkgaW5uZXIgdGV4dC5cbiAqIEByZXR1cm5zIEFuIGVsZW1lbnQgb3IgYSB0ZXh0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHdyYXBJblRhZyguLi5yZXN0KSB7XG4gIGlmIChyZXN0Lmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMuXCIpO1xuICB9IGVsc2UgaWYgKHJlc3QubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlc3RbMF0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJlc3RbMF0pO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQod3JhcEluVGFnKC4uLnJlc3Quc2xpY2UoMSkpKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB3YXkgdGhpcyB3b3JrcyBpcyBmb3IgYWxsIHByb3BlcnRpZXMgb2YgdGhpcy5wb3NzaWJsZSBvcHRpb25zLCB5b3UgY2FuIHN1cHBseSB0aGUgcHJvcGVydHkgbmFtZSBpbiBhbnkgZm9ybSB0byBsaXN0IHRoZSBvcHRpb25zLlxuICogQm9vbGVhbiBvcHRpb25zIGFyZSByZWNvZ25pc2VkIGFzIEJvb2xlYW5cbiAqIE51bWJlciBvcHRpb25zIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbZGVmYXVsdCB2YWx1ZSwgbWluIHZhbHVlLCBtYXggdmFsdWUsIHN0ZXBzaXplXVxuICogQ29sb3JzIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbJ2NvbG9yJywgJyNmZmZmZmYnXVxuICogU3RyaW5ncyB3aXRoIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbb3B0aW9uMSwgb3B0aW9uMiwgb3B0aW9uMywgLi5dXG4gKlxuICogVGhlIG9wdGlvbnMgYXJlIG1hdGNoZWQgd2l0aCB0aGVpciBjb3VudGVycGFydHMgaW4gZWFjaCBvZiB0aGUgbW9kdWxlcyBhbmQgdGhlIHZhbHVlcyB1c2VkIGluIHRoZSBjb25maWd1cmF0aW9uIGFyZVxuICovXG5sZXQgQ29uZmlndXJhdG9yJDEgPSBjbGFzcyBDb25maWd1cmF0b3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudE1vZHVsZSAgICAgICAgfCB0aGUgbG9jYXRpb24gd2hlcmUgcGFyZW50TW9kdWxlLnNldE9wdGlvbnMoKSBjYW4gYmUgY2FsbGVkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0Q29udGFpbmVyICAgIHwgdGhlIGRlZmF1bHQgY29udGFpbmVyIG9mIHRoZSBtb2R1bGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ3VyZU9wdGlvbnMgICAgfCB0aGUgZnVsbHkgY29uZmlndXJlZCBhbmQgcHJlZGVmaW5lZCBvcHRpb25zIHNldCBmb3VuZCBpbiBhbGxPcHRpb25zLmpzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaXhlbFJhdGlvICAgICAgICAgIHwgY2FudmFzIHBpeGVsIHJhdGlvXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhpZGVPcHRpb24gICAgICAgIHwgY3VzdG9tIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGhpZGUgb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50TW9kdWxlLFxuICAgIGRlZmF1bHRDb250YWluZXIsXG4gICAgY29uZmlndXJlT3B0aW9ucyxcbiAgICBwaXhlbFJhdGlvID0gMSxcbiAgICBoaWRlT3B0aW9uID0gKCkgPT4gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnRNb2R1bGU7XG4gICAgdGhpcy5jaGFuZ2VkT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuY29udGFpbmVyID0gZGVmYXVsdENvbnRhaW5lcjtcbiAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmhpZGVPcHRpb24gPSBoaWRlT3B0aW9uO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMucG9wdXBDb3VudGVyID0gMDtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBmaWx0ZXI6IHRydWUsXG4gICAgICBjb250YWluZXI6IHVuZGVmaW5lZCxcbiAgICAgIHNob3dCdXR0b246IHRydWUsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmNvbmZpZ3VyZU9wdGlvbnMgPSBjb25maWd1cmVPcHRpb25zO1xuICAgIHRoaXMubW9kdWxlT3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcbiAgICB0aGlzLnBvcHVwRGl2ID0ge307XG4gICAgdGhpcy5wb3B1cExpbWl0ID0gNTtcbiAgICB0aGlzLnBvcHVwSGlzdG9yeSA9IHt9O1xuICAgIHRoaXMuY29sb3JQaWNrZXIgPSBuZXcgQ29sb3JQaWNrZXIkMShwaXhlbFJhdGlvKTtcbiAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogcmVmcmVzaCBhbGwgb3B0aW9ucy5cbiAgICogQmVjYXVzZSBhbGwgbW9kdWxlcyBwYXJzZSB0aGVpciBvcHRpb25zIGJ5IHRoZW1zZWx2ZXMsIHdlIGp1c3QgdXNlIHRoZWlyIG9wdGlvbnMuIFdlIGNvcHkgdGhlbSBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmVzZXQgdGhlIHBvcHVwIGhpc3RvcnkgYmVjYXVzZSB0aGUgaW5kaWNlcyBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQuXG4gICAgICB0aGlzLnBvcHVwSGlzdG9yeSA9IHt9O1xuICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcblxuICAgICAgbGV0IGVuYWJsZWQgPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zLmpvaW4oKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb25zIGNhbm5vdCBiZSBudWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnNob3dCdXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93QnV0dG9uID0gb3B0aW9ucy5zaG93QnV0dG9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSB0cnVlO1xuICAgICAgICBlbmFibGVkID0gb3B0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucztcbiAgICAgICAgZW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgfVxuICAgIHRoaXMuX2NsZWFuKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG1vZHVsZU9wdGlvbnNcbiAgICovXG4gIHNldE1vZHVsZU9wdGlvbnMobW9kdWxlT3B0aW9ucykge1xuICAgIHRoaXMubW9kdWxlT3B0aW9ucyA9IG1vZHVsZU9wdGlvbnM7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLl9jbGVhbigpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMub3B0aW9ucy5jb250YWluZXI7XG4gICAgICB9XG4gICAgICB0aGlzLl9jcmVhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG5cbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCBjb3VudGVyID0gMDtcbiAgICBsZXQgc2hvdyA9IGZhbHNlO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIGluIHRoaXMuY29uZmlndXJlT3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnMsIG9wdGlvbikpIHtcbiAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgIHNob3cgPSBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIob3B0aW9uLCBbXSk7XG4gICAgICAgICAgc2hvdyA9XG4gICAgICAgICAgICBzaG93IHx8XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIgPT09IHRydWUgfHwgZmlsdGVyLmluZGV4T2Yob3B0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICBzaG93ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IHRydWU7XG5cbiAgICAgICAgICAvLyBsaW5lYnJlYWsgYmV0d2VlbiBjYXRlZ29yaWVzXG4gICAgICAgICAgaWYgKGNvdW50ZXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShbXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGEgaGVhZGVyIGZvciB0aGUgY2F0ZWdvcnlcbiAgICAgICAgICB0aGlzLl9tYWtlSGVhZGVyKG9wdGlvbik7XG5cbiAgICAgICAgICAvLyBnZXQgdGhlIHN1YiBvcHRpb25zXG4gICAgICAgICAgdGhpcy5faGFuZGxlT2JqZWN0KHRoaXMuY29uZmlndXJlT3B0aW9uc1tvcHRpb25dLCBbb3B0aW9uXSk7XG4gICAgICAgIH1cbiAgICAgICAgY291bnRlcisrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9tYWtlQnV0dG9uKCk7XG4gICAgdGhpcy5fcHVzaCgpO1xuICAgIC8vfiB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKHRoaXMuY29udGFpbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBkcmF3IGFsbCBET00gZWxlbWVudHMgb24gdGhlIHNjcmVlblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3B1c2goKSB7XG4gICAgdGhpcy53cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLndyYXBwZXIuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi13cmFwcGVyXCI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy53cmFwcGVyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zaG93UG9wdXBJZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBhbGwgRE9NIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndyYXBwZXIucmVtb3ZlQ2hpbGQodGhpcy5kb21FbGVtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud3JhcHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgICAgdGhpcy53cmFwcGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmRvbUVsZW1lbnRzID0gW107XG5cbiAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgYWN0dWFsT3B0aW9ucyBpZiBpdCBleGlzdHNcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFZhbHVlKHBhdGgpIHtcbiAgICBsZXQgYmFzZSA9IHRoaXMubW9kdWxlT3B0aW9ucztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChiYXNlW3BhdGhbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYmFzZSA9IGJhc2VbcGF0aFtpXV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cblxuICAvKipcbiAgICogYWxsIG9wdGlvbiBlbGVtZW50cyBhcmUgd3JhcHBlZCBpbiBhbiBpdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge0FycmF5LjxFbGVtZW50Pn0gZG9tRWxlbWVudHNcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlSXRlbShwYXRoLCAuLi5kb21FbGVtZW50cykge1xuICAgIGlmICh0aGlzLmFsbG93Q3JlYXRpb24gPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgaXRlbS5jbGFzc05hbWUgPVxuICAgICAgICBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctaXRlbSB2aXMtY29uZmlnLXNcIiArIHBhdGgubGVuZ3RoO1xuICAgICAgZG9tRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIGhlYWRlciBmb3IgbWFqb3Igc3ViamVjdHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlSGVhZGVyKG5hbWUpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctaGVhZGVyXCI7XG4gICAgZGl2LmlubmVyVGV4dCA9IG5hbWU7XG4gICAgdGhpcy5fbWFrZUl0ZW0oW10sIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGxhYmVsLCBpZiBpdCBpcyBhbiBvYmplY3QgbGFiZWwsIGl0IGdldHMgZGlmZmVyZW50IHN0eWxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2JqZWN0TGFiZWxcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VMYWJlbChuYW1lLCBwYXRoLCBvYmplY3RMYWJlbCA9IGZhbHNlKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkaXYuY2xhc3NOYW1lID1cbiAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1sYWJlbCB2aXMtY29uZmlnLXNcIiArIHBhdGgubGVuZ3RoO1xuICAgIGlmIChvYmplY3RMYWJlbCA9PT0gdHJ1ZSkge1xuICAgICAgd2hpbGUgKGRpdi5maXJzdENoaWxkKSB7XG4gICAgICAgIGRpdi5yZW1vdmVDaGlsZChkaXYuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICBkaXYuYXBwZW5kQ2hpbGQod3JhcEluVGFnKFwiaVwiLCBcImJcIiwgbmFtZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZSArIFwiOlwiO1xuICAgIH1cbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBkcm9wZG93biBsaXN0IGZvciBtdWx0aXBsZSBwb3NzaWJsZSBzdHJpbmcgb3B0b2luc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VEcm9wZG93bihhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKTtcbiAgICBzZWxlY3QuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXNlbGVjdFwiO1xuICAgIGxldCBzZWxlY3RlZFZhbHVlID0gMDtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGFyci5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGFyci5pbmRleE9mKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcbiAgICAgIG9wdGlvbi52YWx1ZSA9IGFycltpXTtcbiAgICAgIGlmIChpID09PSBzZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IFwic2VsZWN0ZWRcIjtcbiAgICAgIH1cbiAgICAgIG9wdGlvbi5pbm5lclRleHQgPSBhcnJbaV07XG4gICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgc2VsZWN0Lm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3VwZGF0ZSh0aGlzLnZhbHVlLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgc2VsZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgcmFuZ2Ugb2JqZWN0IGZvciBudW1lcmljIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYXJyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGFyclswXTtcbiAgICBjb25zdCBtaW4gPSBhcnJbMV07XG4gICAgY29uc3QgbWF4ID0gYXJyWzJdO1xuICAgIGNvbnN0IHN0ZXAgPSBhcnJbM107XG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgcmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlXCI7XG4gICAgdHJ5IHtcbiAgICAgIHJhbmdlLnR5cGUgPSBcInJhbmdlXCI7IC8vIG5vdCBzdXBwb3J0ZWQgb24gSUU5XG4gICAgICByYW5nZS5taW4gPSBtaW47XG4gICAgICByYW5nZS5tYXggPSBtYXg7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPOiBBZGQgc29tZSBlcnJvciBoYW5kbGluZy5cbiAgICB9XG4gICAgcmFuZ2Uuc3RlcCA9IHN0ZXA7XG5cbiAgICAvLyBzZXQgdXAgdGhlIHBvcHVwIHNldHRpbmdzIGluIGNhc2UgdGhleSBhcmUgbmVlZGVkLlxuICAgIGxldCBwb3B1cFN0cmluZyA9IFwiXCI7XG4gICAgbGV0IHBvcHVwVmFsdWUgPSAwO1xuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZhY3RvciA9IDEuMjtcbiAgICAgIGlmICh2YWx1ZSA8IDAgJiYgdmFsdWUgKiBmYWN0b3IgPCBtaW4pIHtcbiAgICAgICAgcmFuZ2UubWluID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1pbjtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAvIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgLyBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgKiBmYWN0b3IgPiBtYXggJiYgbWF4ICE9PSAxKSB7XG4gICAgICAgIHJhbmdlLm1heCA9IE1hdGguY2VpbCh2YWx1ZSAqIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5tYXg7XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIHJhbmdlLnZhbHVlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGlucHV0LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1yYW5nZWlucHV0XCI7XG4gICAgaW5wdXQudmFsdWUgPSByYW5nZS52YWx1ZTtcblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICByYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIG1lLl91cGRhdGUoTnVtYmVyKHRoaXMudmFsdWUpLCBwYXRoKTtcbiAgICB9O1xuICAgIHJhbmdlLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIHJhbmdlLCBpbnB1dCk7XG5cbiAgICAvLyBpZiBhIHBvcHVwIGlzIG5lZWRlZCBBTkQgaXQgaGFzIG5vdCBiZWVuIHNob3duIGZvciB0aGlzIHZhbHVlLCBzaG93IGl0LlxuICAgIGlmIChwb3B1cFN0cmluZyAhPT0gXCJcIiAmJiB0aGlzLnBvcHVwSGlzdG9yeVtpdGVtSW5kZXhdICE9PSBwb3B1cFZhbHVlKSB7XG4gICAgICB0aGlzLnBvcHVwSGlzdG9yeVtpdGVtSW5kZXhdID0gcG9wdXBWYWx1ZTtcbiAgICAgIHRoaXMuX3NldHVwUG9wdXAocG9wdXBTdHJpbmcsIGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBidXR0b24gb2JqZWN0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUJ1dHRvbigpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNob3dCdXR0b24gPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGdlbmVyYXRlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLmlubmVyVGV4dCA9IFwiZ2VuZXJhdGUgb3B0aW9uc1wiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24ub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcHJpbnRPcHRpb25zKCk7XG4gICAgICB9O1xuICAgICAgZ2VuZXJhdGVCdXR0b24ub25tb3VzZW92ZXIgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b24gaG92ZXJcIjtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3V0ID0gKCkgPT4ge1xuICAgICAgICBnZW5lcmF0ZUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctYnV0dG9uXCI7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5vcHRpb25zQ29udGFpbmVyLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1vcHRpb24tY29udGFpbmVyXCI7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaCh0aGlzLm9wdGlvbnNDb250YWluZXIpO1xuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKGdlbmVyYXRlQnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcHJlcGFyZSB0aGUgcG9wdXBcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXR1cFBvcHVwKHN0cmluZywgaW5kZXgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmluaXRpYWxpemVkID09PSB0cnVlICYmXG4gICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPT09IHRydWUgJiZcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyIDwgdGhpcy5wb3B1cExpbWl0XG4gICAgKSB7XG4gICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZGl2LmlkID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24tcG9wdXBcIjtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBzdHJpbmc7XG4gICAgICBkaXYub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnBvcHVwQ291bnRlciArPSAxO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHsgaHRtbDogZGl2LCBpbmRleDogaW5kZXggfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcmVtb3ZlIHRoZSBwb3B1cCBmcm9tIHRoZSBkb21cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVQb3B1cCgpIHtcbiAgICBpZiAodGhpcy5wb3B1cERpdi5odG1sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9wdXBEaXYuaHRtbCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cERpdi5kZWxldGVUaW1lb3V0KTtcbiAgICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgaWYgaXQgaXMgbmVlZGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Nob3dQb3B1cElmTmVlZGVkKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29ycmVzcG9uZGluZ0VsZW1lbnQgPSB0aGlzLmRvbUVsZW1lbnRzW3RoaXMucG9wdXBEaXYuaW5kZXhdO1xuICAgICAgY29uc3QgcmVjdCA9IGNvcnJlc3BvbmRpbmdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyBcInB4XCI7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUudG9wID0gcmVjdC50b3AgLSAzMCArIFwicHhcIjsgLy8gMzAgaXMgdGhlIGhlaWdodDtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuaGlkZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgICAgfSwgMTUwMCk7XG4gICAgICB0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcbiAgICAgIH0sIDE4MDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY2hlY2tib3ggZm9yIGJvb2xlYW4gb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNoZWNrYm94KGRlZmF1bHRWYWx1ZSwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBjaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBjaGVja2JveC50eXBlID0gXCJjaGVja2JveFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jaGVja2JveFwiO1xuICAgIGNoZWNrYm94LmNoZWNrZWQgPSBkZWZhdWx0VmFsdWU7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY2hlY2tib3gub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMuY2hlY2tlZCwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgdGV4dCBpbnB1dCBmaWVsZCBmb3Igc3RyaW5nIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWZhdWx0VmFsdWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VUZXh0SW5wdXQoZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcInRleHRcIjtcbiAgICBjaGVja2JveC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctdGV4dFwiO1xuICAgIGNoZWNrYm94LnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY2hlY2tib3gub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBjaGVja2JveCk7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGNvbG9yIGZpZWxkIHdpdGggYSBjb2xvciBwaWNrZXIgZm9yIGNvbG9yIGZpZWxkc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VDb2xvckZpZWxkKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29sb3IgPSBhcnJbMV07XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBkZWZhdWx0Q29sb3IgOiB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAhPT0gXCJub25lXCIpIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9ja1wiO1xuICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNvbG9yQmxvY2sgbm9uZVwiO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBkaXYpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgdGhlIGNvbG9yIGJ1dHRvbnMgdG8gY2FsbCB0aGUgY29sb3IgcGlja2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZGl2XG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKSB7XG4gICAgLy8gY2xlYXIgdGhlIGNhbGxiYWNrIGZyb20gdGhpcyBkaXZcbiAgICBkaXYub25jbGljayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgdGhpcy5jb2xvclBpY2tlci5pbnNlcnRUbyhkaXYpO1xuICAgIHRoaXMuY29sb3JQaWNrZXIuc2hvdygpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRDb2xvcih2YWx1ZSk7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRVcGRhdGVDYWxsYmFjaygoY29sb3IpID0+IHtcbiAgICAgIGNvbnN0IGNvbG9yU3RyaW5nID1cbiAgICAgICAgXCJyZ2JhKFwiICsgY29sb3IuciArIFwiLFwiICsgY29sb3IuZyArIFwiLFwiICsgY29sb3IuYiArIFwiLFwiICsgY29sb3IuYSArIFwiKVwiO1xuICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yU3RyaW5nO1xuICAgICAgdGhpcy5fdXBkYXRlKGNvbG9yU3RyaW5nLCBwYXRoKTtcbiAgICB9KTtcblxuICAgIC8vIG9uIGNsb3NlIG9mIHRoZSBjb2xvcnBpY2tlciwgcmVzdG9yZSB0aGUgY2FsbGJhY2suXG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRDbG9zZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHBhcnNlIGFuIG9iamVjdCBhbmQgZHJhdyB0aGUgY29ycmVjdCBpdGVtc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtwYXRoPVtdXSAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrT25seT1mYWxzZV1cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGFuZGxlT2JqZWN0KG9iaiwgcGF0aCA9IFtdLCBjaGVja09ubHkgPSBmYWxzZSkge1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5vcHRpb25zLmZpbHRlcjtcbiAgICBsZXQgdmlzaWJsZUluU2V0ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBzdWJPYmogaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgc3ViT2JqKSkge1xuICAgICAgICBzaG93ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaXRlbSA9IG9ialtzdWJPYmpdO1xuICAgICAgICBjb25zdCBuZXdQYXRoID0gY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIHN1Yk9iaik7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBzaG93ID0gZmlsdGVyKHN1Yk9iaiwgcGF0aCk7XG5cbiAgICAgICAgICAvLyBpZiBuZWVkZWQgd2UgbXVzdCBnbyBkZWVwZXIgaW50byB0aGUgb2JqZWN0LlxuICAgICAgICAgIGlmIChzaG93ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShpdGVtKSAmJlxuICAgICAgICAgICAgICB0eXBlb2YgaXRlbSAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICB0eXBlb2YgaXRlbSAhPT0gXCJib29sZWFuXCIgJiZcbiAgICAgICAgICAgICAgaXRlbSBpbnN0YW5jZW9mIE9iamVjdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICBzaG93ID0gdGhpcy5faGFuZGxlT2JqZWN0KGl0ZW0sIG5ld1BhdGgsIHRydWUpO1xuICAgICAgICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBjaGVja09ubHkgPT09IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHZpc2libGVJblNldCA9IHRydWU7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZShuZXdQYXRoKTtcblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBcnJheShpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZVRleHRJbnB1dChpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VDaGVja2JveChpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBza2lwIHRoZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBlbmFibGVkXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGlkZU9wdGlvbihwYXRoLCBzdWJPYmosIHRoaXMubW9kdWxlT3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgLy8gaW5pdGlhbGx5IGNvbGxhcHNlIG9wdGlvbnMgd2l0aCBhbiBkaXNhYmxlZCBlbmFibGVkIG9wdGlvbi5cbiAgICAgICAgICAgICAgaWYgKGl0ZW0uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFBhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkobmV3UGF0aCwgXCJlbmFibGVkXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuYWJsZWRWYWx1ZSA9IHRoaXMuX2dldFZhbHVlKGVuYWJsZWRQYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZFZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChzdWJPYmosIG5ld1BhdGgsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUl0ZW0obmV3UGF0aCwgbGFiZWwpO1xuICAgICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlT2JqZWN0KGl0ZW0sIG5ld1BhdGgpIHx8IHZpc2libGVJblNldDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIGVuYWJsZWRWYWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFrZUl0ZW0obmV3UGF0aCwgbGFiZWwpO1xuICAgICAgICAgICAgICAgIHZpc2libGVJblNldCA9XG4gICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJkb250IGtub3cgaG93IHRvIGhhbmRsZVwiLCBpdGVtLCBzdWJPYmosIG5ld1BhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZUluU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSB0aGUgYXJyYXkgdHlwZSBvZiBvcHRpb25cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYXJyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVBcnJheShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHR5cGVvZiBhcnJbMF0gPT09IFwic3RyaW5nXCIgJiYgYXJyWzBdID09PSBcImNvbG9yXCIpIHtcbiAgICAgIHRoaXMuX21ha2VDb2xvckZpZWxkKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclsxXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5fbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclswXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdGhpcy5fbWFrZVJhbmdlKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclswXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IE51bWJlcih2YWx1ZSkgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxlZCB0byB1cGRhdGUgdGhlIG5ldHdvcmsgd2l0aCB0aGUgbmV3IHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlKHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2NvbnN0cnVjdE9wdGlvbnModmFsdWUsIHBhdGgpO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5wYXJlbnQuYm9keSAmJlxuICAgICAgdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdFxuICAgICkge1xuICAgICAgdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyLmVtaXQoXCJjb25maWdDaGFuZ2VcIiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMucGFyZW50LnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBib29sZWFufSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBwYXJhbSB7e319IG9wdGlvbnNPYmpcbiAgICogQHJldHVybnMge3t9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbnN0cnVjdE9wdGlvbnModmFsdWUsIHBhdGgsIG9wdGlvbnNPYmogPSB7fSkge1xuICAgIGxldCBwb2ludGVyID0gb3B0aW9uc09iajtcblxuICAgIC8vIHdoZW4gZHJvcGRvd24gYm94ZXMgY2FuIGJlIHN0cmluZyBvciBib29sZWFuLCB3ZSB0eXBlY2FzdCBpdCBpbnRvIGNvcnJlY3QgdHlwZXNcbiAgICB2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiA/IHRydWUgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHZhbHVlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGF0aFtpXSAhPT0gXCJnbG9iYWxcIikge1xuICAgICAgICBpZiAocG9pbnRlcltwYXRoW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcG9pbnRlcltwYXRoW2ldXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpICE9PSBwYXRoLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBwb2ludGVyID0gcG9pbnRlcltwYXRoW2ldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnNPYmo7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcmludE9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuXG4gICAgd2hpbGUgKHRoaXMub3B0aW9uc0NvbnRhaW5lci5maXJzdENoaWxkKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuYXBwZW5kQ2hpbGQoXG4gICAgICB3cmFwSW5UYWcoXCJwcmVcIiwgXCJjb25zdCBvcHRpb25zID0gXCIgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zLCBudWxsLCAyKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHt7fX0gb3B0aW9uc1xuICAgKi9cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoYW5nZWRPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLl9jb25zdHJ1Y3RPcHRpb25zKFxuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zW2ldLnZhbHVlLFxuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zW2ldLnBhdGgsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG59O1xuXG4vKipcbiAqIFBvcHVwIGlzIGEgY2xhc3MgdG8gY3JlYXRlIGEgcG9wdXAgd2luZG93IHdpdGggc29tZSB0ZXh0XG4gKi9cbmxldCBQb3B1cCQxID0gY2xhc3MgUG9wdXAge1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXIgICAgICAgVGhlIGNvbnRhaW5lciBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgb3ZlcmZsb3dNZXRob2QgIEhvdyB0aGUgcG9wdXAgc2hvdWxkIGFjdCB0byBvdmVyZmxvd2luZyAoJ2ZsaXAnIG9yICdjYXAnKVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCBvdmVyZmxvd01ldGhvZCkge1xuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMub3ZlcmZsb3dNZXRob2QgPSBvdmVyZmxvd01ldGhvZCB8fCBcImNhcFwiO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xuICAgIHRoaXMucGFkZGluZyA9IDU7XG4gICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgZnJhbWVcbiAgICB0aGlzLmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmZyYW1lLmNsYXNzTmFtZSA9IFwidmlzLXRvb2x0aXBcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCAgIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKiBAcGFyYW0ge251bWJlcn0geSAgIFZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIHNldFBvc2l0aW9uKHgsIHkpIHtcbiAgICB0aGlzLnggPSBwYXJzZUludCh4KTtcbiAgICB0aGlzLnkgPSBwYXJzZUludCh5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbnRlbnQgZm9yIHRoZSBwb3B1cCB3aW5kb3cuIFRoaXMgY2FuIGJlIEhUTUwgY29kZSBvciB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEVsZW1lbnR9IGNvbnRlbnRcbiAgICovXG4gIHNldFRleHQoY29udGVudCkge1xuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgd2hpbGUgKHRoaXMuZnJhbWUuZmlyc3RDaGlsZCkge1xuICAgICAgICB0aGlzLmZyYW1lLnJlbW92ZUNoaWxkKHRoaXMuZnJhbWUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdHJpbmcgY29udGFpbmluZyBsaXRlcmFsIHRleHQsIGVsZW1lbnQgaGFzIHRvIGJlIHVzZWQgZm9yIEhUTUwgZHVlIHRvXG4gICAgICAvLyBYU1Mgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGlubmVySFRNTCAoaS5lLiBwcmV2ZW50IFhTUyBieSBhY2NpZGVudCkuXG4gICAgICB0aGlzLmZyYW1lLmlubmVyVGV4dCA9IGNvbnRlbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIHBvcHVwIHdpbmRvd1xuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkb1Nob3ddICAgIFNob3cgb3IgaGlkZSB0aGUgd2luZG93XG4gICAqL1xuICBzaG93KGRvU2hvdykge1xuICAgIGlmIChkb1Nob3cgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZG9TaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZG9TaG93ID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmZyYW1lLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5mcmFtZS5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZnJhbWUucGFyZW50Tm9kZS5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuZnJhbWUucGFyZW50Tm9kZS5jbGllbnRXaWR0aDtcblxuICAgICAgbGV0IGxlZnQgPSAwLFxuICAgICAgICB0b3AgPSAwO1xuXG4gICAgICBpZiAodGhpcy5vdmVyZmxvd01ldGhvZCA9PSBcImZsaXBcIikge1xuICAgICAgICBsZXQgaXNMZWZ0ID0gZmFsc2UsXG4gICAgICAgICAgaXNUb3AgPSB0cnVlOyAvLyBXaGVyZSBhcm91bmQgdGhlIHBvc2l0aW9uIGl0J3MgbG9jYXRlZFxuXG4gICAgICAgIGlmICh0aGlzLnkgLSBoZWlnaHQgPCB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICBpc1RvcCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMueCArIHdpZHRoID4gbWF4V2lkdGggLSB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICBpc0xlZnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTGVmdCkge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLnggLSB3aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZWZ0ID0gdGhpcy54O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVG9wKSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55IC0gaGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvcCA9IHRoaXMueTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gdGhpcy55IC0gaGVpZ2h0O1xuICAgICAgICBpZiAodG9wICsgaGVpZ2h0ICsgdGhpcy5wYWRkaW5nID4gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgdG9wID0gbWF4SGVpZ2h0IC0gaGVpZ2h0IC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3AgPCB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBsZWZ0ID0gdGhpcy54O1xuICAgICAgICBpZiAobGVmdCArIHdpZHRoICsgdGhpcy5wYWRkaW5nID4gbWF4V2lkdGgpIHtcbiAgICAgICAgICBsZWZ0ID0gbWF4V2lkdGggLSB3aWR0aCAtIHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVmdCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS5sZWZ0ID0gbGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gdG9wICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG4gICAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGlkZSB0aGUgcG9wdXAgd2luZG93XG4gICAqL1xuICBoaWRlKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICB0aGlzLmZyYW1lLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5mcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZnJhbWUpOyAvLyBSZW1vdmUgZWxlbWVudCBmcm9tIERPTVxuICB9XG59O1xuXG5sZXQgZXJyb3JGb3VuZCA9IGZhbHNlO1xubGV0IGFsbE9wdGlvbnM7XG5cbmNvbnN0IFZBTElEQVRPUl9QUklOVF9TVFlMRSQxID0gXCJiYWNrZ3JvdW5kOiAjRkZlZWVlOyBjb2xvcjogI2RkMDAwMFwiO1xuXG4vKipcbiAqICBVc2VkIHRvIHZhbGlkYXRlIG9wdGlvbnMuXG4gKi9cbmxldCBWYWxpZGF0b3IkMSA9IGNsYXNzIFZhbGlkYXRvciB7XG4gIC8qKlxuICAgKiBNYWluIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gcmVmZXJlbmNlT3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gc3ViT2JqZWN0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGUob3B0aW9ucywgcmVmZXJlbmNlT3B0aW9ucywgc3ViT2JqZWN0KSB7XG4gICAgZXJyb3JGb3VuZCA9IGZhbHNlO1xuICAgIGFsbE9wdGlvbnMgPSByZWZlcmVuY2VPcHRpb25zO1xuICAgIGxldCB1c2VkT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgaWYgKHN1Yk9iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1c2VkT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnNbc3ViT2JqZWN0XTtcbiAgICB9XG4gICAgVmFsaWRhdG9yLnBhcnNlKG9wdGlvbnMsIHVzZWRPcHRpb25zLCBbXSk7XG4gICAgcmV0dXJuIGVycm9yRm91bmQ7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCB0cmF2ZXJzZSBhbiBvYmplY3QgcmVjdXJzaXZlbHkgYW5kIGNoZWNrIGV2ZXJ5IHZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcGFyc2Uob3B0aW9ucywgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCkge1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICBWYWxpZGF0b3IuY2hlY2sob3B0aW9uLCBvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZXZlcnkgdmFsdWUuIElmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QsIGNhbGwgdGhlIHBhcnNlIGZ1bmN0aW9uIG9uIHRoYXQgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgY2hlY2sob3B0aW9uLCBvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgaWYgKFxuICAgICAgcmVmZXJlbmNlT3B0aW9uc1tvcHRpb25dID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMuX19hbnlfXyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBWYWxpZGF0b3IuZ2V0U3VnZ2VzdGlvbihvcHRpb24sIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZWZlcmVuY2VPcHRpb24gPSBvcHRpb247XG4gICAgbGV0IGlzX29iamVjdCA9IHRydWU7XG5cbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgb25seSB0cmlnZ2VycyBpZiB0aGUgX19hbnlfXyBpcyBpbiB0aGUgdG9wIGxldmVsIG9mIHRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgIC8vICAgICAgIFRIQVQnUyBBIFJFQUxMWSBCQUQgUExBQ0UgVE8gQUxMT1cgSVQhISEhXG4gICAgICAvLyBUT0RPOiBFeGFtaW5lIGlmIG5lZWRlZCwgcmVtb3ZlIGlmIHBvc3NpYmxlXG5cbiAgICAgIC8vIF9fYW55X18gaXMgYSB3aWxkY2FyZC4gQW55IHZhbHVlIGlzIGFjY2VwdGVkIGFuZCB3aWxsIGJlIGZ1cnRoZXIgYW5hbHlzZWQgYnkgcmVmZXJlbmNlLlxuICAgICAgcmVmZXJlbmNlT3B0aW9uID0gXCJfX2FueV9fXCI7XG5cbiAgICAgIC8vIGlmIHRoZSBhbnktc3ViZ3JvdXAgaXMgbm90IGEgcHJlZGVmaW5lZCBvYmplY3QgaW4gdGhlIGNvbmZpZ3VyYXRvcixcbiAgICAgIC8vIHdlIGRvIG5vdCBsb29rIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICBpc19vYmplY3QgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pID09PSBcIm9iamVjdFwiO1xuICAgIH1cblxuICAgIGxldCByZWZPcHRpb25PYmogPSByZWZlcmVuY2VPcHRpb25zW3JlZmVyZW5jZU9wdGlvbl07XG4gICAgaWYgKGlzX29iamVjdCAmJiByZWZPcHRpb25PYmouX190eXBlX18gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVmT3B0aW9uT2JqID0gcmVmT3B0aW9uT2JqLl9fdHlwZV9fO1xuICAgIH1cblxuICAgIFZhbGlkYXRvci5jaGVja0ZpZWxkcyhcbiAgICAgIG9wdGlvbixcbiAgICAgIG9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb25zLFxuICAgICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgICAgcmVmT3B0aW9uT2JqLFxuICAgICAgcGF0aFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvcHRpb24gICAgICAgICAgIHwgdGhlIG9wdGlvbiBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge29iamVjdH0gIG9wdGlvbnMgICAgICAgICAgfCBUaGUgc3VwcGxpZWQgb3B0aW9ucyBvYmplY3RcbiAgICogQHBhcmFtIHtvYmplY3R9ICByZWZlcmVuY2VPcHRpb25zIHwgVGhlIHJlZmVyZW5jZSBvcHRpb25zIGNvbnRhaW5pbmcgYWxsIG9wdGlvbnMgYW5kIHRoZWlyIGFsbG93ZWQgZm9ybWF0c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZmVyZW5jZU9wdGlvbiAgfCBVc3VhbGx5IHRoaXMgaXMgdGhlIHNhbWUgYXMgb3B0aW9uLCBleGNlcHQgd2hlbiBoYW5kbGluZyBhbiBfX2FueV9fIHRhZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICByZWZPcHRpb25PYmogICAgIHwgVGhpcyBpcyB0aGUgdHlwZSBvYmplY3QgZnJvbSB0aGUgcmVmZXJlbmNlIG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gICBwYXRoICAgICAgICAgICAgIHwgd2hlcmUgaW4gdGhlIG9iamVjdCBpcyB0aGUgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVja0ZpZWxkcyhcbiAgICBvcHRpb24sXG4gICAgb3B0aW9ucyxcbiAgICByZWZlcmVuY2VPcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbixcbiAgICByZWZPcHRpb25PYmosXG4gICAgcGF0aFxuICApIHtcbiAgICBjb25zdCBsb2cgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCIlY1wiICsgbWVzc2FnZSArIFZhbGlkYXRvci5wcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiksXG4gICAgICAgIFZBTElEQVRPUl9QUklOVF9TVFlMRSQxXG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25UeXBlID0gVmFsaWRhdG9yLmdldFR5cGUob3B0aW9uc1tvcHRpb25dKTtcbiAgICBjb25zdCByZWZPcHRpb25UeXBlID0gcmVmT3B0aW9uT2JqW29wdGlvblR5cGVdO1xuXG4gICAgaWYgKHJlZk9wdGlvblR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaWYgdGhlIHR5cGUgaXMgY29ycmVjdCwgd2UgY2hlY2sgaWYgaXQgaXMgc3VwcG9zZWQgdG8gYmUgb25lIG9mIGEgZmV3IHNlbGVjdCB2YWx1ZXNcbiAgICAgIGlmIChcbiAgICAgICAgVmFsaWRhdG9yLmdldFR5cGUocmVmT3B0aW9uVHlwZSkgPT09IFwiYXJyYXlcIiAmJlxuICAgICAgICByZWZPcHRpb25UeXBlLmluZGV4T2Yob3B0aW9uc1tvcHRpb25dKSA9PT0gLTFcbiAgICAgICkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgJ0ludmFsaWQgb3B0aW9uIGRldGVjdGVkIGluIFwiJyArXG4gICAgICAgICAgICBvcHRpb24gK1xuICAgICAgICAgICAgJ1wiLicgK1xuICAgICAgICAgICAgXCIgQWxsb3dlZCB2YWx1ZXMgYXJlOlwiICtcbiAgICAgICAgICAgIFZhbGlkYXRvci5wcmludChyZWZPcHRpb25UeXBlKSArXG4gICAgICAgICAgICAnIG5vdCBcIicgK1xuICAgICAgICAgICAgb3B0aW9uc1tvcHRpb25dICtcbiAgICAgICAgICAgICdcIi4gJ1xuICAgICAgICApO1xuICAgICAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9uVHlwZSA9PT0gXCJvYmplY3RcIiAmJiByZWZlcmVuY2VPcHRpb24gIT09IFwiX19hbnlfX1wiKSB7XG4gICAgICAgIHBhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgb3B0aW9uKTtcbiAgICAgICAgVmFsaWRhdG9yLnBhcnNlKFxuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSxcbiAgICAgICAgICByZWZlcmVuY2VPcHRpb25zW3JlZmVyZW5jZU9wdGlvbl0sXG4gICAgICAgICAgcGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVmT3B0aW9uT2JqW1wiYW55XCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHR5cGUgb2YgdGhlIGZpZWxkIGlzIGluY29ycmVjdCBhbmQgdGhlIGZpZWxkIGNhbm5vdCBiZSBhbnlcbiAgICAgIGxvZyhcbiAgICAgICAgJ0ludmFsaWQgdHlwZSByZWNlaXZlZCBmb3IgXCInICtcbiAgICAgICAgICBvcHRpb24gK1xuICAgICAgICAgICdcIi4gRXhwZWN0ZWQ6ICcgK1xuICAgICAgICAgIFZhbGlkYXRvci5wcmludChPYmplY3Qua2V5cyhyZWZPcHRpb25PYmopKSArXG4gICAgICAgICAgXCIuIFJlY2VpdmVkIFtcIiArXG4gICAgICAgICAgb3B0aW9uVHlwZSArXG4gICAgICAgICAgJ10gXCInICtcbiAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICdcIidcbiAgICAgICk7XG4gICAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3QgfCBib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgQXJyYXkuPG51bWJlcj4gfCBEYXRlIHwgTm9kZSB8IE1vbWVudCB8IHVuZGVmaW5lZCB8IG51bGx9IG9iamVjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgZ2V0VHlwZShvYmplY3QpIHtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcblxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZiAob2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIFwiZGF0ZVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdC5ub2RlVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBcImRvbVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdC5faXNBTW9tZW50T2JqZWN0ID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBcIm1vbWVudFwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwib2JqZWN0XCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcGF0aFxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgZ2V0U3VnZ2VzdGlvbihvcHRpb24sIG9wdGlvbnMsIHBhdGgpIHtcbiAgICBjb25zdCBsb2NhbFNlYXJjaCA9IFZhbGlkYXRvci5maW5kSW5PcHRpb25zKG9wdGlvbiwgb3B0aW9ucywgcGF0aCwgZmFsc2UpO1xuICAgIGNvbnN0IGdsb2JhbFNlYXJjaCA9IFZhbGlkYXRvci5maW5kSW5PcHRpb25zKG9wdGlvbiwgYWxsT3B0aW9ucywgW10sIHRydWUpO1xuXG4gICAgY29uc3QgbG9jYWxTZWFyY2hUaHJlc2hvbGQgPSA4O1xuICAgIGNvbnN0IGdsb2JhbFNlYXJjaFRocmVzaG9sZCA9IDQ7XG5cbiAgICBsZXQgbXNnO1xuICAgIGlmIChsb2NhbFNlYXJjaC5pbmRleE1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1zZyA9XG4gICAgICAgIFwiIGluIFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uLCBcIlwiKSArXG4gICAgICAgICdQZXJoYXBzIGl0IHdhcyBpbmNvbXBsZXRlPyBEaWQgeW91IG1lYW46IFwiJyArXG4gICAgICAgIGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggK1xuICAgICAgICAnXCI/XFxuXFxuJztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZ2xvYmFsU2VhcmNoLmRpc3RhbmNlIDw9IGdsb2JhbFNlYXJjaFRocmVzaG9sZCAmJlxuICAgICAgbG9jYWxTZWFyY2guZGlzdGFuY2UgPiBnbG9iYWxTZWFyY2guZGlzdGFuY2VcbiAgICApIHtcbiAgICAgIG1zZyA9XG4gICAgICAgIFwiIGluIFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uLCBcIlwiKSArXG4gICAgICAgIFwiUGVyaGFwcyBpdCB3YXMgbWlzcGxhY2VkPyBNYXRjaGluZyBvcHRpb24gZm91bmQgYXQ6IFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24oXG4gICAgICAgICAgZ2xvYmFsU2VhcmNoLnBhdGgsXG4gICAgICAgICAgZ2xvYmFsU2VhcmNoLmNsb3Nlc3RNYXRjaCxcbiAgICAgICAgICBcIlwiXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChsb2NhbFNlYXJjaC5kaXN0YW5jZSA8PSBsb2NhbFNlYXJjaFRocmVzaG9sZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgJy4gRGlkIHlvdSBtZWFuIFwiJyArXG4gICAgICAgIGxvY2FsU2VhcmNoLmNsb3Nlc3RNYXRjaCArXG4gICAgICAgICdcIj8nICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIuIERpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U6IFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKG9wdGlvbnMpKSArXG4gICAgICAgIFZhbGlkYXRvci5wcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbik7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICclY1Vua25vd24gb3B0aW9uIGRldGVjdGVkOiBcIicgKyBvcHRpb24gKyAnXCInICsgbXNnLFxuICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICApO1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHRyYXZlcnNlIHRoZSBvcHRpb25zIGluIHNlYXJjaCBmb3IgYSBtYXRjaC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVjdXJzaXZlPWZhbHNlXVxuICAgKiBAcmV0dXJucyB7e2Nsb3Nlc3RNYXRjaDogc3RyaW5nLCBwYXRoOiBBcnJheSwgZGlzdGFuY2U6IG51bWJlcn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBmaW5kSW5PcHRpb25zKG9wdGlvbiwgb3B0aW9ucywgcGF0aCwgcmVjdXJzaXZlID0gZmFsc2UpIHtcbiAgICBsZXQgbWluID0gMWU5O1xuICAgIGxldCBjbG9zZXN0TWF0Y2ggPSBcIlwiO1xuICAgIGxldCBjbG9zZXN0TWF0Y2hQYXRoID0gW107XG4gICAgY29uc3QgbG93ZXJDYXNlT3B0aW9uID0gb3B0aW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgbGV0IGluZGV4TWF0Y2ggPSB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBvcCBpbiBvcHRpb25zKSB7XG4gICAgICBsZXQgZGlzdGFuY2U7XG4gICAgICBpZiAob3B0aW9uc1tvcF0uX190eXBlX18gIT09IHVuZGVmaW5lZCAmJiByZWN1cnNpdmUgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMoXG4gICAgICAgICAgb3B0aW9uLFxuICAgICAgICAgIG9wdGlvbnNbb3BdLFxuICAgICAgICAgIGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pbiA+IHJlc3VsdC5kaXN0YW5jZSkge1xuICAgICAgICAgIGNsb3Nlc3RNYXRjaCA9IHJlc3VsdC5jbG9zZXN0TWF0Y2g7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoUGF0aCA9IHJlc3VsdC5wYXRoO1xuICAgICAgICAgIG1pbiA9IHJlc3VsdC5kaXN0YW5jZTtcbiAgICAgICAgICBpbmRleE1hdGNoID0gcmVzdWx0LmluZGV4TWF0Y2g7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcC50b0xvd2VyQ2FzZSgpLmluZGV4T2YobG93ZXJDYXNlT3B0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICBpbmRleE1hdGNoID0gb3A7XG4gICAgICAgIH1cbiAgICAgICAgZGlzdGFuY2UgPSBWYWxpZGF0b3IubGV2ZW5zaHRlaW5EaXN0YW5jZShvcHRpb24sIG9wKTtcbiAgICAgICAgaWYgKG1pbiA+IGRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gb3A7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoUGF0aCA9IGNvcHlBcnJheShwYXRoKTtcbiAgICAgICAgICBtaW4gPSBkaXN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY2xvc2VzdE1hdGNoOiBjbG9zZXN0TWF0Y2gsXG4gICAgICBwYXRoOiBjbG9zZXN0TWF0Y2hQYXRoLFxuICAgICAgZGlzdGFuY2U6IG1pbixcbiAgICAgIGluZGV4TWF0Y2g6IGluZGV4TWF0Y2gsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcHJpbnRMb2NhdGlvbihwYXRoLCBvcHRpb24sIHByZWZpeCA9IFwiUHJvYmxlbSB2YWx1ZSBmb3VuZCBhdDogXFxuXCIpIHtcbiAgICBsZXQgc3RyID0gXCJcXG5cXG5cIiArIHByZWZpeCArIFwib3B0aW9ucyA9IHtcXG5cIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaSArIDE7IGorKykge1xuICAgICAgICBzdHIgKz0gXCIgIFwiO1xuICAgICAgfVxuICAgICAgc3RyICs9IHBhdGhbaV0gKyBcIjoge1xcblwiO1xuICAgIH1cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhdGgubGVuZ3RoICsgMTsgaisrKSB7XG4gICAgICBzdHIgKz0gXCIgIFwiO1xuICAgIH1cbiAgICBzdHIgKz0gb3B0aW9uICsgXCJcXG5cIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoICsgMTsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhdGgubGVuZ3RoIC0gaTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gXCJ9XFxuXCI7XG4gICAgfVxuICAgIHJldHVybiBzdHIgKyBcIlxcblxcblwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludChvcHRpb25zKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXG4gICAgICAucmVwbGFjZSgvKFwiKXwoXFxbKXwoXFxdKXwoLFwiX190eXBlX19cIikvZywgXCJcIilcbiAgICAgIC5yZXBsYWNlKC8oLCkvZywgXCIsIFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQ29tcHV0ZSB0aGUgZWRpdCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gc3RyaW5nc1xuICAgKiBodHRwOi8vZW4ud2lraWJvb2tzLm9yZy93aWtpL0FsZ29yaXRobV9JbXBsZW1lbnRhdGlvbi9TdHJpbmdzL0xldmVuc2h0ZWluX2Rpc3RhbmNlI0phdmFTY3JpcHRcbiAgICpcbiAgICogQ29weXJpZ2h0IChjKSAyMDExIEFuZHJlaSBNYWNrZW56aWVcbiAgICpcbiAgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAgICpcbiAgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gICAqXG4gICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBsZXZlbnNodGVpbkRpc3RhbmNlKGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggPT09IDApIHJldHVybiBiLmxlbmd0aDtcbiAgICBpZiAoYi5sZW5ndGggPT09IDApIHJldHVybiBhLmxlbmd0aDtcblxuICAgIGNvbnN0IG1hdHJpeCA9IFtdO1xuXG4gICAgLy8gaW5jcmVtZW50IGFsb25nIHRoZSBmaXJzdCBjb2x1bW4gb2YgZWFjaCByb3dcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hdHJpeFtpXSA9IFtpXTtcbiAgICB9XG5cbiAgICAvLyBpbmNyZW1lbnQgZWFjaCBjb2x1bW4gaW4gdGhlIGZpcnN0IHJvd1xuICAgIGxldCBqO1xuICAgIGZvciAoaiA9IDA7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgbWF0cml4WzBdW2pdID0gajtcbiAgICB9XG5cbiAgICAvLyBGaWxsIGluIHRoZSByZXN0IG9mIHRoZSBtYXRyaXhcbiAgICBmb3IgKGkgPSAxOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAoaiA9IDE7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoYi5jaGFyQXQoaSAtIDEpID09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtpIC0gMV1baiAtIDFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqIC0gMV0gKyAxLCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgICBtYXRyaXhbaV1baiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgIG1hdHJpeFtpIC0gMV1bal0gKyAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTsgLy8gZGVsZXRpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRyaXhbYi5sZW5ndGhdW2EubGVuZ3RoXTtcbiAgfVxufTtcblxuY29uc3QgQWN0aXZhdG9yID0gQWN0aXZhdG9yJDE7XHJcbmNvbnN0IENvbG9yUGlja2VyID0gQ29sb3JQaWNrZXIkMTtcclxuY29uc3QgQ29uZmlndXJhdG9yID0gQ29uZmlndXJhdG9yJDE7XHJcbmNvbnN0IEhhbW1lciA9IEhhbW1lciQxO1xyXG5jb25zdCBQb3B1cCA9IFBvcHVwJDE7XHJcbmNvbnN0IFZBTElEQVRPUl9QUklOVF9TVFlMRSA9IFZBTElEQVRPUl9QUklOVF9TVFlMRSQxO1xyXG5jb25zdCBWYWxpZGF0b3IgPSBWYWxpZGF0b3IkMTtcblxuZXhwb3J0IHsgQWN0aXZhdG9yLCBBbGVhLCBDb2xvclBpY2tlciwgQ29uZmlndXJhdG9yLCBERUxFVEUsIEhTVlRvSGV4LCBIU1ZUb1JHQiwgSGFtbWVyLCBQb3B1cCwgUkdCVG9IU1YsIFJHQlRvSGV4LCBWQUxJREFUT1JfUFJJTlRfU1RZTEUsIFZhbGlkYXRvciwgYWRkQ2xhc3NOYW1lLCBhZGRDc3NUZXh0LCBiaW5hcnlTZWFyY2hDdXN0b20sIGJpbmFyeVNlYXJjaFZhbHVlLCBicmlkZ2VPYmplY3QsIGNvcHlBbmRFeHRlbmRBcnJheSwgY29weUFycmF5LCBkZWVwRXh0ZW5kLCBkZWVwT2JqZWN0QXNzaWduLCBlYXNpbmdGdW5jdGlvbnMsIGVxdWFsQXJyYXksIGV4dGVuZCwgZmlsbElmRGVmaW5lZCwgZm9yRWFjaCwgZ2V0QWJzb2x1dGVMZWZ0LCBnZXRBYnNvbHV0ZVJpZ2h0LCBnZXRBYnNvbHV0ZVRvcCwgZ2V0U2Nyb2xsQmFyV2lkdGgsIGdldFRhcmdldCwgZ2V0VHlwZSwgaGFzUGFyZW50LCBoZXhUb0hTViwgaGV4VG9SR0IsIGluc2VydFNvcnQsIGlzRGF0ZSwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1N0cmluZywgaXNWYWxpZEhleCwgaXNWYWxpZFJHQiwgaXNWYWxpZFJHQkEsIG1lcmdlT3B0aW9ucywgb3B0aW9uLCBvdmVycmlkZU9wYWNpdHksIHBhcnNlQ29sb3IsIHByZXZlbnREZWZhdWx0LCBwdXJlRGVlcE9iamVjdEFzc2lnbiwgcmVjdXJzaXZlRE9NRGVsZXRlLCByZW1vdmVDbGFzc05hbWUsIHJlbW92ZUNzc1RleHQsIHNlbGVjdGl2ZUJyaWRnZU9iamVjdCwgc2VsZWN0aXZlRGVlcEV4dGVuZCwgc2VsZWN0aXZlRXh0ZW5kLCBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kLCB0aHJvdHRsZSwgdG9BcnJheSwgdG9wTW9zdCwgdXBkYXRlUHJvcGVydHkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZpcy11dGlsLmpzLm1hcFxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIG5hdGl2ZUNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYFJlZmxlY3QuY29uc3RydWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5jb25zdHJ1Y3Rcbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKG5hdGl2ZUNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG5cbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIG5hdGl2ZUNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbnZhciBGT1JDRUQgPSBORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRztcblxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogRk9SQ0VEIH0sIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUNvbnN0cnVjdG9yKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUNvbnN0cnVjdG9yKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIG5hdGl2ZUNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgYXBwbHkocHVzaCwgJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYXBwbHkoYmluZCwgVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0UHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gYXBwbHkoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LmNvbnN0cnVjdCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUmVmbGVjdC5jb25zdHJ1Y3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3JlZmxlY3QvY29uc3RydWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvcmVmbGVjdC9jb25zdHJ1Y3RcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9sc1wiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEZPUkNFRCA9ICFERVNDUklQVE9SUyB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0luZGV4ZWRPYmplY3QoaXQpLCBrZXkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbn07XG5cbmlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0pIGdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnNcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKS5mO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzICE9PSBkZWZpbmVQcm9wZXJ0aWVzLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0aWVzOiBkZWZpbmVQcm9wZXJ0aWVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKFQsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQsIEQpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLnNoYW0pIGRlZmluZVByb3BlcnRpZXMuc2hhbSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydGllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydGllc1wiKTsiLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvb2JqZWN0L2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L2NyZWF0ZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2ZcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgc2V0UHJvdG90eXBlT2Y6IHNldFByb3RvdHlwZU9mXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9pbnN0YW5jZS9iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9iaW5kJyk7XG4iLCAiaW1wb3J0IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIHZhciBfY29udGV4dDtcbiAgX3NldFByb3RvdHlwZU9mID0gX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YpLmNhbGwoX2NvbnRleHQpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwgImltcG9ydCBfT2JqZWN0JGNyZWF0ZSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanNcIjtcbmltcG9ydCBfT2JqZWN0JGRlZmluZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBfT2JqZWN0JGNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG4iLCAiaW1wb3J0IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmltcG9ydCBfT2JqZWN0JGdldFByb3RvdHlwZU9mIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIHZhciBfY29udGV4dDtcbiAgX2dldFByb3RvdHlwZU9mID0gX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3QkZ2V0UHJvdG90eXBlT2YpLmNhbGwoX2NvbnRleHQpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgX09iamVjdCRnZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCAidmFyIF9TeW1ib2wgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiKTtcbnZhciBfU3ltYm9sJGl0ZXJhdG9yID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanNcIik7XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL2luc3RhbmNlL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9mb3ItZWFjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxuLy8gYEluc3RhbGxFcnJvckNhdXNlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1lcnJvci1jYXVzZS8jc2VjLWVycm9yb2JqZWN0cy1pbnN0YWxsLWVycm9yLWNhdXNlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBvcHRpb25zKSB7XG4gIGlmIChpc09iamVjdChvcHRpb25zKSAmJiAnY2F1c2UnIGluIG9wdGlvbnMpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywgJ2NhdXNlJywgb3B0aW9ucy5jYXVzZSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgJEVycm9yID0gRXJyb3I7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xuXG52YXIgVEVTVCA9IChmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBTdHJpbmcobmV3ICRFcnJvcihhcmcpLnN0YWNrKTsgfSkoJ3p4Y2FzZCcpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZG9zL25vLXZ1bG5lcmFibGUgLS0gc2FmZVxudmFyIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSA9IC9cXG5cXHMqYXQgW146XSo6W15cXG5dKi87XG52YXIgSVNfVjhfT1JfQ0hBS1JBX1NUQUNLID0gVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZLnRlc3QoVEVTVCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoSVNfVjhfT1JfQ0hBS1JBX1NUQUNLICYmIHR5cGVvZiBzdGFjayA9PSAnc3RyaW5nJyAmJiAhJEVycm9yLnByZXBhcmVTdGFja1RyYWNlKSB7XG4gICAgd2hpbGUgKGRyb3BFbnRyaWVzLS0pIHN0YWNrID0gcmVwbGFjZShzdGFjaywgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZLCAnJyk7XG4gIH0gcmV0dXJuIHN0YWNrO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ2EnKTtcbiAgaWYgKCEoJ3N0YWNrJyBpbiBlcnJvcikpIHJldHVybiB0cnVlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgNykpO1xuICByZXR1cm4gZXJyb3Iuc3RhY2sgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGNsZWFyRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhcicpO1xudmFyIEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlJyk7XG5cbi8vIG5vbi1zdGFuZGFyZCBWOFxudmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGVycm9yLCBDLCBzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFKSB7XG4gICAgaWYgKGNhcHR1cmVTdGFja1RyYWNlKSBjYXB0dXJlU3RhY2tUcmFjZShlcnJvciwgQyk7XG4gICAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNsZWFyRXJyb3JTdGFjayhzdGFjaywgZHJvcEVudHJpZXMpKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIFJlc3VsdFByb3RvdHlwZSA9IFJlc3VsdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19SRUNPUkQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfUkVDT1JEKTtcbiAgdmFyIElTX0lURVJBVE9SID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX0lURVJBVE9SKTtcbiAgdmFyIElOVEVSUlVQVEVEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklOVEVSUlVQVEVEKTtcbiAgdmFyIGZuID0gYmluZCh1bmJvdW5kRnVuY3Rpb24sIHRoYXQpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIHZhciBzdG9wID0gZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgIGlmIChpdGVyYXRvcikgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgY29uZGl0aW9uKTtcbiAgfTtcblxuICB2YXIgY2FsbEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKEFTX0VOVFJJRVMpIHtcbiAgICAgIGFuT2JqZWN0KHZhbHVlKTtcbiAgICAgIHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSwgc3RvcCkgOiBmbih2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgIH0gcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWUsIHN0b3ApIDogZm4odmFsdWUpO1xuICB9O1xuXG4gIGlmIChJU19SRUNPUkQpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlLml0ZXJhdG9yO1xuICB9IGVsc2UgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKCFpdGVyRm4pIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gSVNfUkVDT1JEID8gaXRlcmFibGUubmV4dCA6IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsRm4oc3RlcC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgJGRlZmF1bHQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID09PSB1bmRlZmluZWQgPyBhcmd1bWVudHMubGVuZ3RoIDwgMiA/ICcnIDogJGRlZmF1bHQgOiB0b1N0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGluc3RhbGxFcnJvckNhdXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UnKTtcbnZhciBpbnN0YWxsRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciBwdXNoID0gW10ucHVzaDtcblxudmFyICRBZ2dyZWdhdGVFcnJvciA9IGZ1bmN0aW9uIEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgbWVzc2FnZSAvKiAsIG9wdGlvbnMgKi8pIHtcbiAgdmFyIGlzSW5zdGFuY2UgPSBpc1Byb3RvdHlwZU9mKEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlLCB0aGlzKTtcbiAgdmFyIHRoYXQ7XG4gIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgIHRoYXQgPSBzZXRQcm90b3R5cGVPZihuZXcgJEVycm9yKCksIGlzSW5zdGFuY2UgPyBnZXRQcm90b3R5cGVPZih0aGlzKSA6IEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGF0ID0gaXNJbnN0YW5jZSA/IHRoaXMgOiBjcmVhdGUoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUpO1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCBUT19TVFJJTkdfVEFHLCAnRXJyb3InKTtcbiAgfVxuICBpZiAobWVzc2FnZSAhPT0gdW5kZWZpbmVkKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgJ21lc3NhZ2UnLCBub3JtYWxpemVTdHJpbmdBcmd1bWVudChtZXNzYWdlKSk7XG4gIGluc3RhbGxFcnJvclN0YWNrKHRoYXQsICRBZ2dyZWdhdGVFcnJvciwgdGhhdC5zdGFjaywgMSk7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikgaW5zdGFsbEVycm9yQ2F1c2UodGhhdCwgYXJndW1lbnRzWzJdKTtcbiAgdmFyIGVycm9yc0FycmF5ID0gW107XG4gIGl0ZXJhdGUoZXJyb3JzLCBwdXNoLCB7IHRoYXQ6IGVycm9yc0FycmF5IH0pO1xuICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgJ2Vycm9ycycsIGVycm9yc0FycmF5KTtcbiAgcmV0dXJuIHRoYXQ7XG59O1xuXG5pZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKCRBZ2dyZWdhdGVFcnJvciwgJEVycm9yKTtcbmVsc2UgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcygkQWdncmVnYXRlRXJyb3IsICRFcnJvciwgeyBuYW1lOiB0cnVlIH0pO1xuXG52YXIgQWdncmVnYXRlRXJyb3JQcm90b3R5cGUgPSAkQWdncmVnYXRlRXJyb3IucHJvdG90eXBlID0gY3JlYXRlKCRFcnJvci5wcm90b3R5cGUsIHtcbiAgY29uc3RydWN0b3I6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAkQWdncmVnYXRlRXJyb3IpLFxuICBtZXNzYWdlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJycpLFxuICBuYW1lOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJ0FnZ3JlZ2F0ZUVycm9yJylcbn0pO1xuXG4vLyBgQWdncmVnYXRlRXJyb3JgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFnZ3JlZ2F0ZS1lcnJvci1jb25zdHJ1Y3RvclxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAyIH0sIHtcbiAgQWdncmVnYXRlRXJyb3I6ICRBZ2dyZWdhdGVFcnJvclxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUHJvdG90eXBlKSB7XG4gIGlmIChpc1Byb3RvdHlwZU9mKFByb3RvdHlwZSwgaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgaXNOdWxsT3JVbmRlZmluZWQoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFDb25zdHJ1Y3RvcihTKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IC8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIHNldCA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIEZ1bmN0aW9uID0gZ2xvYmFsLkZ1bmN0aW9uO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciAkbG9jYXRpb24sIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG5mYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIERlbm8gdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3Igb24gYGxvY2F0aW9uYCBhY2Nlc3Mgd2l0aG91dCBgLS1sb2NhdGlvbmAgZmxhZ1xuICAkbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG59KTtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaGFzT3duKHF1ZXVlLCBpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBldmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBnbG9iYWxQb3N0TWVzc2FnZURlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWwucG9zdE1lc3NhZ2UoU3RyaW5nKGlkKSwgJGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArICRsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoaGFuZGxlcikge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwcGx5KGZuLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKElTX05PREUpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZXZlbnRMaXN0ZW5lcjtcbiAgICBkZWZlciA9IGJpbmQocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKFxuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmXG4gICAgaXNDYWxsYWJsZShnbG9iYWwucG9zdE1lc3NhZ2UpICYmXG4gICAgIWdsb2JhbC5pbXBvcnRTY3JpcHRzICYmXG4gICAgJGxvY2F0aW9uICYmICRsb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgICFmYWlscyhnbG9iYWxQb3N0TWVzc2FnZURlZmVyKVxuICApIHtcbiAgICBkZWZlciA9IGdsb2JhbFBvc3RNZXNzYWdlRGVmZXI7XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oZWFkID0gbnVsbDtcbiAgdGhpcy50YWlsID0gbnVsbDtcbn07XG5cblF1ZXVlLnByb3RvdHlwZSA9IHtcbiAgYWRkOiBmdW5jdGlvbiAoaXRlbSkge1xuICAgIHZhciBlbnRyeSA9IHsgaXRlbTogaXRlbSwgbmV4dDogbnVsbCB9O1xuICAgIHZhciB0YWlsID0gdGhpcy50YWlsO1xuICAgIGlmICh0YWlsKSB0YWlsLm5leHQgPSBlbnRyeTtcbiAgICBlbHNlIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgIHRoaXMudGFpbCA9IGVudHJ5O1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZW50cnkgPSB0aGlzLmhlYWQ7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICB2YXIgbmV4dCA9IHRoaXMuaGVhZCA9IGVudHJ5Lm5leHQ7XG4gICAgICBpZiAobmV4dCA9PT0gbnVsbCkgdGhpcy50YWlsID0gbnVsbDtcbiAgICAgIHJldHVybiBlbnRyeS5pdGVtO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWV1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KHVzZXJBZ2VudCkgJiYgdHlwZW9mIFBlYmJsZSAhPSAndW5kZWZpbmVkJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdCh1c2VyQWdlbnQpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcXVldWUnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX0lPU19QRUJCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUnKTtcbnZhciBJU19XRUJPU19XRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLXdlYm9zLXdlYmtpdCcpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuLy8gTm9kZS5qcyAxMSBzaG93cyBFeHBlcmltZW50YWxXYXJuaW5nIG9uIGdldHRpbmcgYHF1ZXVlTWljcm90YXNrYFxudmFyIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdxdWV1ZU1pY3JvdGFzaycpO1xudmFyIG1pY3JvdGFzayA9IHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciAmJiBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWU7XG52YXIgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIW1pY3JvdGFzaykge1xuICB2YXIgcXVldWUgPSBuZXcgUXVldWUoKTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKElTX05PREUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoZm4gPSBxdWV1ZS5nZXQoKSkgdHJ5IHtcbiAgICAgIGZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIC8vIGFsc28gZXhjZXB0IFdlYk9TIFdlYmtpdCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODk4XG4gIGlmICghSVNfSU9TICYmICFJU19OT0RFICYmICFJU19XRUJPU19XRUJLSVQgJiYgTXV0YXRpb25PYnNlcnZlciAmJiBkb2N1bWVudCkge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKCFJU19JT1NfUEVCQkxFICYmIFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgLy8gd29ya2Fyb3VuZCBvZiBXZWJLaXQgfiBpT1MgU2FmYXJpIDEwLjEgYnVnXG4gICAgcHJvbWlzZS5jb25zdHJ1Y3RvciA9IFByb21pc2U7XG4gICAgdGhlbiA9IGJpbmQocHJvbWlzZS50aGVuLCBwcm9taXNlKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBOb2RlLmpzIHdpdGhvdXQgcHJvbWlzZXNcbiAgfSBlbHNlIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnZVxuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICAvLyBgd2VicGFja2AgZGV2IHNlcnZlciBidWcgb24gSUUgZ2xvYmFsIG1ldGhvZHMgLSB1c2UgYmluZChmbiwgZ2xvYmFsKVxuICAgIG1hY3JvdGFzayA9IGJpbmQobWFjcm90YXNrLCBnbG9iYWwpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hY3JvdGFzayhmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIG1pY3JvdGFzayA9IGZ1bmN0aW9uIChmbikge1xuICAgIGlmICghcXVldWUuaGVhZCkgbm90aWZ5KCk7XG4gICAgcXVldWUuYWRkKGZuKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtaWNyb3Rhc2s7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYSwgYikge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlIC0tIHNhZmVcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY29uc29sZS5lcnJvcihhKSA6IGNvbnNvbGUuZXJyb3IoYSwgYik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSwgdmFsdWU6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCB2YWx1ZTogZXJyb3IgfTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5Qcm9taXNlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBEZW5vIC0tIERlbm8gY2FzZSAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgRGVubyA9PSAnb2JqZWN0JyAmJiBEZW5vICYmIHR5cGVvZiBEZW5vLnZlcnNpb24gPT0gJ29iamVjdCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX0RFTk8gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8nKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIUlTX0RFTk8gJiYgIUlTX05PREVcbiAgJiYgdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0J1xuICAmJiB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX0JST1dTRVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXInKTtcbnZhciBJU19ERU5PID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBTVUJDTEFTU0lORyA9IGZhbHNlO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IGlzQ2FsbGFibGUoZ2xvYmFsLlByb21pc2VSZWplY3Rpb25FdmVudCk7XG5cbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IGlzRm9yY2VkKCdQcm9taXNlJywgZnVuY3Rpb24gKCkge1xuICB2YXIgUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UgPSBpbnNwZWN0U291cmNlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIHZhciBHTE9CQUxfQ09SRV9KU19QUk9NSVNFID0gUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UgIT09IFN0cmluZyhOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpO1xuICAvLyBWOCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAvLyBXZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICBpZiAoIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgVjhfVkVSU0lPTiA9PT0gNjYpIHJldHVybiB0cnVlO1xuICAvLyBXZSBuZWVkIFByb21pc2UjeyBjYXRjaCwgZmluYWxseSB9IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gJiYgTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddKSkgcmV0dXJuIHRydWU7XG4gIC8vIFdlIGNhbid0IHVzZSBAQHNwZWNpZXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG4gIGlmICghVjhfVkVSU0lPTiB8fCBWOF9WRVJTSU9OIDwgNTEgfHwgIS9uYXRpdmUgY29kZS8udGVzdChQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSkpIHtcbiAgICAvLyBEZXRlY3QgY29ycmVjdG5lc3Mgb2Ygc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gbmV3IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKDEpOyB9KTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gICAgfTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBwcm9taXNlLmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBGYWtlUHJvbWlzZTtcbiAgICBTVUJDTEFTU0lORyA9IHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pIGluc3RhbmNlb2YgRmFrZVByb21pc2U7XG4gICAgaWYgKCFTVUJDTEFTU0lORykgcmV0dXJuIHRydWU7XG4gIC8vIFVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgfSByZXR1cm4gIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgKElTX0JST1dTRVIgfHwgSVNfREVOTykgJiYgIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ09OU1RSVUNUT1I6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SLFxuICBSRUpFQ1RJT05fRVZFTlQ6IE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCxcbiAgU1VCQ0xBU1NJTkc6IFNVQkNMQVNTSU5HXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUNhbGxhYmxlKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFDYWxsYWJsZShyZWplY3QpO1xufTtcblxuLy8gYE5ld1Byb21pc2VDYXBhYmlsaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbmV3cHJvbWlzZWNhcGFiaWxpdHlcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21pY3JvdGFzaycpO1xudmFyIGhvc3RSZXBvcnRFcnJvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzJyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcXVldWUnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5DT05TVFJVQ1RPUjtcbnZhciBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uUkVKRUNUSU9OX0VWRU5UO1xudmFyIE5BVElWRV9QUk9NSVNFX1NVQkNMQVNTSU5HID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLlNVQkNMQVNTSU5HO1xudmFyIGdldEludGVybmFsUHJvbWlzZVN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUFJPTUlTRSk7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3IgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3I7XG52YXIgUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGU7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xuXG52YXIgRElTUEFUQ0hfRVZFTlQgPSAhIShkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiBnbG9iYWwuZGlzcGF0Y2hFdmVudCk7XG52YXIgVU5IQU5ETEVEX1JFSkVDVElPTiA9ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudmFyIFJFSkVDVElPTl9IQU5ETEVEID0gJ3JlamVjdGlvbmhhbmRsZWQnO1xudmFyIFBFTkRJTkcgPSAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xudmFyIEhBTkRMRUQgPSAxO1xudmFyIFVOSEFORExFRCA9IDI7XG5cbnZhciBJbnRlcm5hbCwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFByb21pc2VXcmFwcGVyLCBuYXRpdmVUaGVuO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiBpc0NhbGxhYmxlKHRoZW4gPSBpdC50aGVuKSA/IHRoZW4gOiBmYWxzZTtcbn07XG5cbnZhciBjYWxsUmVhY3Rpb24gPSBmdW5jdGlvbiAocmVhY3Rpb24sIHN0YXRlKSB7XG4gIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICB2YXIgb2sgPSBzdGF0ZS5zdGF0ZSA9PT0gRlVMRklMTEVEO1xuICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgdHJ5IHtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgaWYgKCFvaykge1xuICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHN0YXRlKTtcbiAgICAgICAgc3RhdGUucmVqZWN0aW9uID0gSEFORExFRDtcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgIGNhbGwodGhlbiwgcmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgfVxufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVhY3Rpb25zID0gc3RhdGUucmVhY3Rpb25zO1xuICAgIHZhciByZWFjdGlvbjtcbiAgICB3aGlsZSAocmVhY3Rpb24gPSByZWFjdGlvbnMuZ2V0KCkpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5ub3RpZmllZCA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhc3RhdGUucmVqZWN0aW9uKSBvblVuaGFuZGxlZChzdGF0ZSk7XG4gIH0pO1xufTtcblxudmFyIGRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAobmFtZSwgcHJvbWlzZSwgcmVhc29uKSB7XG4gIHZhciBldmVudCwgaGFuZGxlcjtcbiAgaWYgKERJU1BBVENIX0VWRU5UKSB7XG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICBldmVudC5wcm9taXNlID0gcHJvbWlzZTtcbiAgICBldmVudC5yZWFzb24gPSByZWFzb247XG4gICAgZXZlbnQuaW5pdEV2ZW50KG5hbWUsIGZhbHNlLCB0cnVlKTtcbiAgICBnbG9iYWwuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH0gZWxzZSBldmVudCA9IHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiByZWFzb24gfTtcbiAgaWYgKCFOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgJiYgKGhhbmRsZXIgPSBnbG9iYWxbJ29uJyArIG5hbWVdKSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgICB2YXIgSVNfVU5IQU5ETEVEID0gaXNVbmhhbmRsZWQoc3RhdGUpO1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKElTX1VOSEFORExFRCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChJU19OT0RFKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFVOSEFORExFRF9SRUpFQ1RJT04sIHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHN0YXRlLnJlamVjdGlvbiA9IElTX05PREUgfHwgaXNVbmhhbmRsZWQoc3RhdGUpID8gVU5IQU5ETEVEIDogSEFORExFRDtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5yZWplY3Rpb24gIT09IEhBTkRMRUQgJiYgIXN0YXRlLnBhcmVudDtcbn07XG5cbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIGlmIChJU19OT0RFKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChSRUpFQ1RJT05fSEFORExFRCwgcHJvbWlzZSwgc3RhdGUudmFsdWUpO1xuICB9KTtcbn07XG5cbnZhciBiaW5kID0gZnVuY3Rpb24gKGZuLCBzdGF0ZSwgdW53cmFwKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBmbihzdGF0ZSwgdmFsdWUsIHVud3JhcCk7XG4gIH07XG59O1xuXG52YXIgaW50ZXJuYWxSZWplY3QgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICBzdGF0ZS5zdGF0ZSA9IFJFSkVDVEVEO1xuICBub3RpZnkoc3RhdGUsIHRydWUpO1xufTtcblxudmFyIGludGVybmFsUmVzb2x2ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHRyeSB7XG4gICAgaWYgKHN0YXRlLmZhY2FkZSA9PT0gdmFsdWUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICB2YXIgdGhlbiA9IGlzVGhlbmFibGUodmFsdWUpO1xuICAgIGlmICh0aGVuKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsKHRoZW4sIHZhbHVlLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlc29sdmUsIHdyYXBwZXIsIHN0YXRlKSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZWplY3QsIHdyYXBwZXIsIHN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaW50ZXJuYWxSZWplY3Qod3JhcHBlciwgZXJyb3IsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gICAgICBzdGF0ZS5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICAgIG5vdGlmeShzdGF0ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnRlcm5hbFJlamVjdCh7IGRvbmU6IGZhbHNlIH0sIGVycm9yLCBzdGF0ZSk7XG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgUHJvbWlzZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgYUNhbGxhYmxlKGV4ZWN1dG9yKTtcbiAgICBjYWxsKEludGVybmFsLCB0aGlzKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKSwgYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaW50ZXJuYWxSZWplY3Qoc3RhdGUsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgUHJvbWlzZVByb3RvdHlwZSA9IFByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICB0eXBlOiBQUk9NSVNFLFxuICAgICAgZG9uZTogZmFsc2UsXG4gICAgICBub3RpZmllZDogZmFsc2UsXG4gICAgICBwYXJlbnQ6IGZhbHNlLFxuICAgICAgcmVhY3Rpb25zOiBuZXcgUXVldWUoKSxcbiAgICAgIHJlamVjdGlvbjogZmFsc2UsXG4gICAgICBzdGF0ZTogUEVORElORyxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgfTtcblxuICAvLyBgUHJvbWlzZS5wcm90b3R5cGUudGhlbmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICBJbnRlcm5hbC5wcm90b3R5cGUgPSBkZWZpbmVCdWlsdEluKFByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IpKTtcbiAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgIHJlYWN0aW9uLm9rID0gaXNDYWxsYWJsZShvbkZ1bGZpbGxlZCkgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgcmVhY3Rpb24uZmFpbCA9IGlzQ2FsbGFibGUob25SZWplY3RlZCkgJiYgb25SZWplY3RlZDtcbiAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHN0YXRlLnN0YXRlID09PSBQRU5ESU5HKSBzdGF0ZS5yZWFjdGlvbnMuYWRkKHJlYWN0aW9uKTtcbiAgICBlbHNlIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgfSk7XG5cbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSk7XG4gIH07XG5cbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yIHx8IEMgPT09IFByb21pc2VXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG5cbiAgaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGUudGhlbjtcblxuICAgIGlmICghTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcpIHtcbiAgICAgIC8vIG1ha2UgYFByb21pc2UjdGhlbmAgcmV0dXJuIGEgcG9seWZpbGxlZCBgUHJvbWlzZWAgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGNhbGwobmF0aXZlVGhlbiwgdGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjQwXG4gICAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIGAuY29uc3RydWN0b3IgPT09IFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICB0cnkge1xuICAgICAgZGVsZXRlIE5hdGl2ZVByb21pc2VQcm90b3R5cGUuY29uc3RydWN0b3I7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gICAgLy8gbWFrZSBgaW5zdGFuY2VvZiBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICBzZXRQcm90b3R5cGVPZihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICBQcm9taXNlOiBQcm9taXNlQ29uc3RydWN0b3Jcbn0pO1xuXG5zZXRUb1N0cmluZ1RhZyhQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UsIGZhbHNlLCB0cnVlKTtcbnNldFNwZWNpZXMoUFJPTUlTRSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIHx8ICFjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5hbGwoaXRlcmFibGUpLnRoZW4odW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxuLy8gYFByb21pc2UuYWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5jYXRjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmNhdGNoXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SLCByZWFsOiB0cnVlIH0sIHtcbiAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNjYXRjaGAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG5pZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpKSB7XG4gIHZhciBtZXRob2QgPSBnZXRCdWlsdEluKCdQcm9taXNlJykucHJvdG90eXBlWydjYXRjaCddO1xuICBpZiAoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSAhPT0gbWV0aG9kKSB7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnY2F0Y2gnLCBtZXRob2QsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxuLy8gYFByb21pc2UucmFjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmFjZVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIGNhbGwoJHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xuXG4vLyBgUHJvbWlzZS5yZWplY3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlamVjdFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICBjYWxsKGNhcGFiaWxpdHkucmVqZWN0LCB1bmRlZmluZWQsIHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xuXG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKTtcbnZhciBDSEVDS19XUkFQUEVSID0gSVNfUFVSRSAmJiAhRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlc29sdmVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIHx8IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKENIRUNLX1dSQVBQRVIgJiYgdGhpcyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA/IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxTZXR0bGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxzZXR0bGVkXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGxTZXR0bGVkOiBmdW5jdGlvbiBhbGxTZXR0bGVkKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdmdWxmaWxsZWQnLCB2YWx1ZTogdmFsdWUgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAncmVqZWN0ZWQnLCByZWFzb246IGVycm9yIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxudmFyIFBST01JU0VfQU5ZX0VSUk9SID0gJ05vIG9uZSBwcm9taXNlIHJlc29sdmVkJztcblxuLy8gYFByb21pc2UuYW55YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFueTogZnVuY3Rpb24gYW55KGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBBZ2dyZWdhdGVFcnJvciA9IGdldEJ1aWx0SW4oJ0FnZ3JlZ2F0ZUVycm9yJyk7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciBlcnJvcnMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgdmFyIGFscmVhZHlSZXNvbHZlZCA9IGZhbHNlO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeVJlamVjdGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5UmVqZWN0ZWQgfHwgYWxyZWFkeVJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeVJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGVycm9yc1tpbmRleF0gPSBlcnJvcjtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZWplY3QobmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgUFJPTUlTRV9BTllfRVJST1IpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBTYWZhcmkgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4MjlcbnZhciBOT05fR0VORVJJQyA9ICEhTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdGhlbmFibGUgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddLmNhbGwoeyB0aGVuOiBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmZpbmFsbHlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogTk9OX0dFTkVSSUMgfSwge1xuICAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBnZXRCdWlsdEluKCdQcm9taXNlJykpO1xuICAgIHZhciBpc0Z1bmN0aW9uID0gaXNDYWxsYWJsZShvbkZpbmFsbHkpO1xuICAgIHJldHVybiB0aGlzLnRoZW4oXG4gICAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseSxcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICAgIH0gOiBvbkZpbmFsbHlcbiAgICApO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjZmluYWxseWAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG5pZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpKSB7XG4gIHZhciBtZXRob2QgPSBnZXRCdWlsdEluKCdQcm9taXNlJykucHJvdG90eXBlWydmaW5hbGx5J107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2ZpbmFsbHknLCBtZXRob2QsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbnknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUHJvbWlzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxuLy8gYFByb21pc2Uud2l0aFJlc29sdmVyc2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXdpdGgtcmVzb2x2ZXJzXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUgfSwge1xuICB3aXRoUmVzb2x2ZXJzOiBmdW5jdGlvbiB3aXRoUmVzb2x2ZXJzKCkge1xuICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb21pc2U6IHByb21pc2VDYXBhYmlsaXR5LnByb21pc2UsXG4gICAgICByZXNvbHZlOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlLFxuICAgICAgcmVqZWN0OiBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3RcbiAgICB9O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3Byb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnByb21pc2Uud2l0aC1yZXNvbHZlcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcblxuLy8gYFByb21pc2UudHJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gICAgKHJlc3VsdC5lcnJvciA/IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvcHJvbWlzZScpO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LmFnZ3JlZ2F0ZS1lcnJvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnByb21pc2UuYW55Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9wcm9taXNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvaW5zdGFuY2UvcmV2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvaW5zdGFuY2UvcmV2ZXJzZScpO1xuIiwgInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciBfT2JqZWN0JGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCIpO1xudmFyIF9TeW1ib2wgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiKTtcbnZhciBfT2JqZWN0JGNyZWF0ZSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qc1wiKTtcbnZhciBfT2JqZWN0JGdldFByb3RvdHlwZU9mID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qc1wiKTtcbnZhciBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2Zvci1lYWNoLmpzXCIpO1xudmFyIF9wdXNoSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcHVzaC5qc1wiKTtcbnZhciBfT2JqZWN0JHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qc1wiKTtcbnZhciBfUHJvbWlzZSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvcHJvbWlzZS9pbmRleC5qc1wiKTtcbnZhciBfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JldmVyc2UuanNcIik7XG52YXIgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanNcIik7XG5mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICBcInVzZSBzdHJpY3RcIjsgLyohIHJlZ2VuZXJhdG9yLXJ1bnRpbWUgLS0gQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuIC0tIGxpY2Vuc2UgKE1JVCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vTElDRU5TRSAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUgPSBmdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICAgIHJldHVybiBlO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHZhciB0LFxuICAgIGUgPSB7fSxcbiAgICByID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICBuID0gci5oYXNPd25Qcm9wZXJ0eSxcbiAgICBvID0gX09iamVjdCRkZWZpbmVQcm9wZXJ0eSB8fCBmdW5jdGlvbiAodCwgZSwgcikge1xuICAgICAgdFtlXSA9IHIudmFsdWU7XG4gICAgfSxcbiAgICBpID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sID8gX1N5bWJvbCA6IHt9LFxuICAgIGEgPSBpLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiLFxuICAgIGMgPSBpLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIixcbiAgICB1ID0gaS50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICByZXR1cm4gX09iamVjdCRkZWZpbmVQcm9wZXJ0eSh0LCBlLCB7XG4gICAgICB2YWx1ZTogcixcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgIHdyaXRhYmxlOiAhMFxuICAgIH0pLCB0W2VdO1xuICB9XG4gIHRyeSB7XG4gICAgZGVmaW5lKHt9LCBcIlwiKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZSh0LCBlLCByKSB7XG4gICAgICByZXR1cm4gdFtlXSA9IHI7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB3cmFwKHQsIGUsIHIsIG4pIHtcbiAgICB2YXIgaSA9IGUgJiYgZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBlIDogR2VuZXJhdG9yLFxuICAgICAgYSA9IF9PYmplY3QkY3JlYXRlKGkucHJvdG90eXBlKSxcbiAgICAgIGMgPSBuZXcgQ29udGV4dChuIHx8IFtdKTtcbiAgICByZXR1cm4gbyhhLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QodCwgciwgYylcbiAgICB9KSwgYTtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaCh0LCBlLCByKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogdC5jYWxsKGUsIHIpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiB0XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBlLndyYXAgPSB3cmFwO1xuICB2YXIgaCA9IFwic3VzcGVuZGVkU3RhcnRcIixcbiAgICBsID0gXCJzdXNwZW5kZWRZaWVsZFwiLFxuICAgIGYgPSBcImV4ZWN1dGluZ1wiLFxuICAgIHMgPSBcImNvbXBsZXRlZFwiLFxuICAgIHkgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBwID0ge307XG4gIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZCA9IF9PYmplY3QkZ2V0UHJvdG90eXBlT2YsXG4gICAgdiA9IGQgJiYgZChkKHZhbHVlcyhbXSkpKTtcbiAgdiAmJiB2ICE9PSByICYmIG4uY2FsbCh2LCBhKSAmJiAocCA9IHYpO1xuICB2YXIgZyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9IEdlbmVyYXRvci5wcm90b3R5cGUgPSBfT2JqZWN0JGNyZWF0ZShwKTtcbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHQpIHtcbiAgICB2YXIgX2NvbnRleHQ7XG4gICAgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdKS5jYWxsKF9jb250ZXh0LCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGVmaW5lKHQsIGUsIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UoZSwgdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKHQsIGUpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UociwgbywgaSwgYSkge1xuICAgICAgdmFyIGMgPSB0cnlDYXRjaCh0W3JdLCB0LCBvKTtcbiAgICAgIGlmIChcInRocm93XCIgIT09IGMudHlwZSkge1xuICAgICAgICB2YXIgdSA9IGMuYXJnLFxuICAgICAgICAgIGggPSB1LnZhbHVlO1xuICAgICAgICByZXR1cm4gaCAmJiBcIm9iamVjdFwiID09IF90eXBlb2YoaCkgJiYgbi5jYWxsKGgsIFwiX19hd2FpdFwiKSA/IGUucmVzb2x2ZShoLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHQsIGksIGEpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGludm9rZShcInRocm93XCIsIHQsIGksIGEpO1xuICAgICAgICB9KSA6IGUucmVzb2x2ZShoKS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgdS52YWx1ZSA9IHQsIGkodSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIHQsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGEoYy5hcmcpO1xuICAgIH1cbiAgICB2YXIgcjtcbiAgICBvKHRoaXMsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodCwgbikge1xuICAgICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IGUoZnVuY3Rpb24gKGUsIHIpIHtcbiAgICAgICAgICAgIGludm9rZSh0LCBuLCBlLCByKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gciA9IHIgPyByLnRoZW4oY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChlLCByLCBuKSB7XG4gICAgdmFyIG8gPSBoO1xuICAgIHJldHVybiBmdW5jdGlvbiAoaSwgYSkge1xuICAgICAgaWYgKG8gPT09IGYpIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAobyA9PT0gcykge1xuICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBpKSB0aHJvdyBhO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB0LFxuICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmb3IgKG4ubWV0aG9kID0gaSwgbi5hcmcgPSBhOzspIHtcbiAgICAgICAgdmFyIGMgPSBuLmRlbGVnYXRlO1xuICAgICAgICBpZiAoYykge1xuICAgICAgICAgIHZhciB1ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShjLCBuKTtcbiAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgaWYgKHUgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gbi5tZXRob2QpIG4uc2VudCA9IG4uX3NlbnQgPSBuLmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IG4ubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKG8gPT09IGgpIHRocm93IG8gPSBzLCBuLmFyZztcbiAgICAgICAgICBuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IG4ubWV0aG9kICYmIG4uYWJydXB0KFwicmV0dXJuXCIsIG4uYXJnKTtcbiAgICAgICAgbyA9IGY7XG4gICAgICAgIHZhciBwID0gdHJ5Q2F0Y2goZSwgciwgbik7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSBwLnR5cGUpIHtcbiAgICAgICAgICBpZiAobyA9IG4uZG9uZSA/IHMgOiBsLCBwLmFyZyA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBwLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IG4uZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSBwLnR5cGUgJiYgKG8gPSBzLCBuLm1ldGhvZCA9IFwidGhyb3dcIiwgbi5hcmcgPSBwLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpIHtcbiAgICB2YXIgbiA9IHIubWV0aG9kLFxuICAgICAgbyA9IGUuaXRlcmF0b3Jbbl07XG4gICAgaWYgKG8gPT09IHQpIHJldHVybiByLmRlbGVnYXRlID0gbnVsbCwgXCJ0aHJvd1wiID09PSBuICYmIGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKHIubWV0aG9kID0gXCJyZXR1cm5cIiwgci5hcmcgPSB0LCBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpLCBcInRocm93XCIgPT09IHIubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBuICYmIChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBuICsgXCInIG1ldGhvZFwiKSksIHk7XG4gICAgdmFyIGkgPSB0cnlDYXRjaChvLCBlLml0ZXJhdG9yLCByLmFyZyk7XG4gICAgaWYgKFwidGhyb3dcIiA9PT0gaS50eXBlKSByZXR1cm4gci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gaS5hcmcsIHIuZGVsZWdhdGUgPSBudWxsLCB5O1xuICAgIHZhciBhID0gaS5hcmc7XG4gICAgcmV0dXJuIGEgPyBhLmRvbmUgPyAocltlLnJlc3VsdE5hbWVdID0gYS52YWx1ZSwgci5uZXh0ID0gZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSByLm1ldGhvZCAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpIDogYSA6IChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIHIuZGVsZWdhdGUgPSBudWxsLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkodCkge1xuICAgIHZhciBfY29udGV4dDI7XG4gICAgdmFyIGUgPSB7XG4gICAgICB0cnlMb2M6IHRbMF1cbiAgICB9O1xuICAgIDEgaW4gdCAmJiAoZS5jYXRjaExvYyA9IHRbMV0pLCAyIGluIHQgJiYgKGUuZmluYWxseUxvYyA9IHRbMl0sIGUuYWZ0ZXJMb2MgPSB0WzNdKSwgX3B1c2hJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0MiA9IHRoaXMudHJ5RW50cmllcykuY2FsbChfY29udGV4dDIsIGUpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkodCkge1xuICAgIHZhciBlID0gdC5jb21wbGV0aW9uIHx8IHt9O1xuICAgIGUudHlwZSA9IFwibm9ybWFsXCIsIGRlbGV0ZSBlLmFyZywgdC5jb21wbGV0aW9uID0gZTtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHQpIHtcbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgdHJ5TG9jOiBcInJvb3RcIlxuICAgIH1dLCBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkodCkuY2FsbCh0LCBwdXNoVHJ5RW50cnksIHRoaXMpLCB0aGlzLnJlc2V0KCEwKTtcbiAgfVxuICBmdW5jdGlvbiB2YWx1ZXMoZSkge1xuICAgIGlmIChlIHx8IFwiXCIgPT09IGUpIHtcbiAgICAgIHZhciByID0gZVthXTtcbiAgICAgIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZS5uZXh0KSByZXR1cm4gZTtcbiAgICAgIGlmICghaXNOYU4oZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBvID0gLTEsXG4gICAgICAgICAgaSA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICBmb3IgKDsgKytvIDwgZS5sZW5ndGg7KSBpZiAobi5jYWxsKGUsIG8pKSByZXR1cm4gbmV4dC52YWx1ZSA9IGVbb10sIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaS5uZXh0ID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfdHlwZW9mKGUpICsgXCIgaXMgbm90IGl0ZXJhYmxlXCIpO1xuICB9XG4gIHJldHVybiBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgbyhnLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgbyhHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGVmaW5lKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCB1LCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpLCBlLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiB0ICYmIHQuY29uc3RydWN0b3I7XG4gICAgcmV0dXJuICEhZSAmJiAoZSA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHwgXCJHZW5lcmF0b3JGdW5jdGlvblwiID09PSAoZS5kaXNwbGF5TmFtZSB8fCBlLm5hbWUpKTtcbiAgfSwgZS5tYXJrID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YodCwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpIDogKHQuX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZSh0LCB1LCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgdC5wcm90b3R5cGUgPSBfT2JqZWN0JGNyZWF0ZShnKSwgdDtcbiAgfSwgZS5hd3JhcCA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXdhaXQ6IHRcbiAgICB9O1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpLCBkZWZpbmUoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUsIGMsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3IsIGUuYXN5bmMgPSBmdW5jdGlvbiAodCwgciwgbiwgbywgaSkge1xuICAgIHZvaWQgMCA9PT0gaSAmJiAoaSA9IF9Qcm9taXNlKTtcbiAgICB2YXIgYSA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAodCwgciwgbiwgbyksIGkpO1xuICAgIHJldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocikgPyBhIDogYS5uZXh0KCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQuZG9uZSA/IHQudmFsdWUgOiBhLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKGcpLCBkZWZpbmUoZywgdSwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShnLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoZywgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBlLmtleXMgPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gT2JqZWN0KHQpLFxuICAgICAgciA9IFtdO1xuICAgIGZvciAodmFyIG4gaW4gZSkgX3B1c2hJbnN0YW5jZVByb3BlcnR5KHIpLmNhbGwociwgbik7XG4gICAgcmV0dXJuIF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eShyKS5jYWxsKHIpLCBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgZm9yICg7IHIubGVuZ3RoOykge1xuICAgICAgICB2YXIgdCA9IHIucG9wKCk7XG4gICAgICAgIGlmICh0IGluIGUpIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgfTtcbiAgfSwgZS52YWx1ZXMgPSB2YWx1ZXMsIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChlKSB7XG4gICAgICB2YXIgX2NvbnRleHQzO1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB0LCB0aGlzLmRvbmUgPSAhMSwgdGhpcy5kZWxlZ2F0ZSA9IG51bGwsIHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMuYXJnID0gdCwgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0MyA9IHRoaXMudHJ5RW50cmllcykuY2FsbChfY29udGV4dDMsIHJlc2V0VHJ5RW50cnkpLCAhZSkgZm9yICh2YXIgciBpbiB0aGlzKSBcInRcIiA9PT0gci5jaGFyQXQoMCkgJiYgbi5jYWxsKHRoaXMsIHIpICYmICFpc05hTigrX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eShyKS5jYWxsKHIsIDEpKSAmJiAodGhpc1tyXSA9IHQpO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHRoaXMuZG9uZSA9ICEwO1xuICAgICAgdmFyIHQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGUpIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGU7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobiwgbykge1xuICAgICAgICByZXR1cm4gYS50eXBlID0gXCJ0aHJvd1wiLCBhLmFyZyA9IGUsIHIubmV4dCA9IG4sIG8gJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksICEhbztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIG8gPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgbyA+PSAwOyAtLW8pIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLnRyeUVudHJpZXNbb10sXG4gICAgICAgICAgYSA9IGkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBpLnRyeUxvYykgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgaWYgKGkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBjID0gbi5jYWxsKGksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICB1ID0gbi5jYWxsKGksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoYyAmJiB1KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdSkgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uIGFicnVwdCh0LCBlKSB7XG4gICAgICBmb3IgKHZhciByID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IHIgPj0gMDsgLS1yKSB7XG4gICAgICAgIHZhciBvID0gdGhpcy50cnlFbnRyaWVzW3JdO1xuICAgICAgICBpZiAoby50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIG4uY2FsbChvLCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgby5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGkgPSBvO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpICYmIChcImJyZWFrXCIgPT09IHQgfHwgXCJjb250aW51ZVwiID09PSB0KSAmJiBpLnRyeUxvYyA8PSBlICYmIGUgPD0gaS5maW5hbGx5TG9jICYmIChpID0gbnVsbCk7XG4gICAgICB2YXIgYSA9IGkgPyBpLmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJldHVybiBhLnR5cGUgPSB0LCBhLmFyZyA9IGUsIGkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gaS5maW5hbGx5TG9jLCB5KSA6IHRoaXMuY29tcGxldGUoYSk7XG4gICAgfSxcbiAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodCwgZSkge1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZztcbiAgICAgIHJldHVybiBcImJyZWFrXCIgPT09IHQudHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHQudHlwZSA/IHRoaXMubmV4dCA9IHQuYXJnIDogXCJyZXR1cm5cIiA9PT0gdC50eXBlID8gKHRoaXMucnZhbCA9IHRoaXMuYXJnID0gdC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSB0LnR5cGUgJiYgZSAmJiAodGhpcy5uZXh0ID0gZSksIHk7XG4gICAgfSxcbiAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci5maW5hbGx5TG9jID09PSB0KSByZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sIHIuYWZ0ZXJMb2MpLCByZXNldFRyeUVudHJ5KHIpLCB5O1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godCkge1xuICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMudHJ5RW50cmllc1tlXTtcbiAgICAgICAgaWYgKHIudHJ5TG9jID09PSB0KSB7XG4gICAgICAgICAgdmFyIG4gPSByLmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gbi50eXBlKSB7XG4gICAgICAgICAgICB2YXIgbyA9IG4uYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoZSwgciwgbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHIsXG4gICAgICAgIG5leHRMb2M6IG5cbiAgICAgIH0sIFwibmV4dFwiID09PSB0aGlzLm1ldGhvZCAmJiAodGhpcy5hcmcgPSB0KSwgeTtcbiAgICB9XG4gIH0sIGU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiLy8gVE9ETyhCYWJlbCA4KTogUmVtb3ZlIHRoaXMgZmlsZS5cblxudmFyIHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWVcIikoKTtcbm1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcblxuLy8gQ29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9wYWNrYWdlcy9ydW50aW1lL3J1bnRpbWUuanMjTDczNj1cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBnbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG4gIH0gZWxzZSB7XG4gICAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIEZGMjYtIGJ1ZzogQXJyYXlCdWZmZXJzIGFyZSBub24tZXh0ZW5zaWJsZSwgYnV0IE9iamVjdC5pc0V4dGVuc2libGUgZG9lcyBub3QgcmVwb3J0IGl0XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoYnVmZmVyKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1ZmZlciwgJ2EnLCB7IHZhbHVlOiA4IH0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSAtLSBzYWZlXG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgJGlzRXh0ZW5zaWJsZSgxKTsgfSk7XG5cbi8vIGBPYmplY3QuaXNFeHRlbnNpYmxlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmlzZXh0ZW5zaWJsZVxubW9kdWxlLmV4cG9ydHMgPSAoRkFJTFNfT05fUFJJTUlUSVZFUyB8fCBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUpID8gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgJiYgY2xhc3NvZihpdCkgPT09ICdBcnJheUJ1ZmZlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWU7XG59IDogJGlzRXh0ZW5zaWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGlzRXh0ZW5zaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xuXG52YXIgUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBNRVRBREFUQSA9IHVpZCgnbWV0YScpO1xudmFyIGlkID0gMDtcblxudmFyIHNldE1ldGFkYXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIGRlZmluZVByb3BlcnR5KGl0LCBNRVRBREFUQSwgeyB2YWx1ZToge1xuICAgIG9iamVjdElEOiAnTycgKyBpZCsrLCAvLyBvYmplY3QgSURcbiAgICB3ZWFrRGF0YToge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG5cbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIGEgcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBREFUQV0ub2JqZWN0SUQ7XG59O1xuXG52YXIgZ2V0V2Vha0RhdGEgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIHRoZSBzdG9yZSBvZiB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBREFUQV0ud2Vha0RhdGE7XG59O1xuXG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpJTkcgJiYgUkVRVUlSRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzT3duKGl0LCBNRVRBREFUQSkpIHNldE1ldGFkYXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxudmFyIGVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgbWV0YS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4gIFJFUVVJUkVEID0gdHJ1ZTtcbiAgdmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmY7XG4gIHZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xuICB2YXIgdGVzdCA9IHt9O1xuICB0ZXN0W01FVEFEQVRBXSA9IDE7XG5cbiAgLy8gcHJldmVudCBleHBvc2luZyBvZiBtZXRhZGF0YSBrZXlcbiAgaWYgKGdldE93blByb3BlcnR5TmFtZXModGVzdCkubGVuZ3RoKSB7XG4gICAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHRbaV0gPT09IE1FVEFEQVRBKSB7XG4gICAgICAgICAgc3BsaWNlKHJlc3VsdCwgaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUuZlxuICAgIH0pO1xuICB9XG59O1xuXG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBlbmFibGU6IGVuYWJsZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2Vha0RhdGE6IGdldFdlYWtEYXRhLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cbmhpZGRlbktleXNbTUVUQURBVEFdID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUsIHdyYXBwZXIsIGNvbW1vbikge1xuICB2YXIgSVNfTUFQID0gQ09OU1RSVUNUT1JfTkFNRS5pbmRleE9mKCdNYXAnKSAhPT0gLTE7XG4gIHZhciBJU19XRUFLID0gQ09OU1RSVUNUT1JfTkFNRS5pbmRleE9mKCdXZWFrJykgIT09IC0xO1xuICB2YXIgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnO1xuICB2YXIgTmF0aXZlQ29uc3RydWN0b3IgPSBnbG9iYWxbQ09OU1RSVUNUT1JfTkFNRV07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHZhciBleHBvcnRlZCA9IHt9O1xuICB2YXIgQ29uc3RydWN0b3I7XG5cbiAgaWYgKCFERVNDUklQVE9SUyB8fCAhaXNDYWxsYWJsZShOYXRpdmVDb25zdHJ1Y3RvcilcbiAgICB8fCAhKElTX1dFQUsgfHwgTmF0aXZlUHJvdG90eXBlLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHsgbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCkuZW50cmllcygpLm5leHQoKTsgfSkpXG4gICkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQ29uc3RydWN0b3IgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZS5lbmFibGUoKTtcbiAgfSBlbHNlIHtcbiAgICBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgIHNldEludGVybmFsU3RhdGUoYW5JbnN0YW5jZSh0YXJnZXQsIFByb3RvdHlwZSksIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgY29sbGVjdGlvbjogbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKClcbiAgICAgIH0pO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRhcmdldFtBRERFUl0sIHsgdGhhdDogdGFyZ2V0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgUHJvdG90eXBlID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgdmFyIGdldEludGVybmFsU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gICAgZm9yRWFjaChbJ2FkZCcsICdjbGVhcicsICdkZWxldGUnLCAnZm9yRWFjaCcsICdnZXQnLCAnaGFzJywgJ3NldCcsICdrZXlzJywgJ3ZhbHVlcycsICdlbnRyaWVzJ10sIGZ1bmN0aW9uIChLRVkpIHtcbiAgICAgIHZhciBJU19BRERFUiA9IEtFWSA9PT0gJ2FkZCcgfHwgS0VZID09PSAnc2V0JztcbiAgICAgIGlmIChLRVkgaW4gTmF0aXZlUHJvdG90eXBlICYmICEoSVNfV0VBSyAmJiBLRVkgPT09ICdjbGVhcicpKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShQcm90b3R5cGUsIEtFWSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICB2YXIgY29sbGVjdGlvbiA9IGdldEludGVybmFsU3RhdGUodGhpcykuY29sbGVjdGlvbjtcbiAgICAgICAgICBpZiAoIUlTX0FEREVSICYmIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpKSByZXR1cm4gS0VZID09PSAnZ2V0JyA/IHVuZGVmaW5lZCA6IGZhbHNlO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBjb2xsZWN0aW9uW0tFWV0oYSA9PT0gMCA/IDAgOiBhLCBiKTtcbiAgICAgICAgICByZXR1cm4gSVNfQURERVIgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIElTX1dFQUsgfHwgZGVmaW5lUHJvcGVydHkoUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5jb2xsZWN0aW9uLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgZmFsc2UsIHRydWUpO1xuXG4gIGV4cG9ydGVkW0NPTlNUUlVDVE9SX05BTUVdID0gQ29uc3RydWN0b3I7XG4gICQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCBleHBvcnRlZCk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBvcHRpb25zKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnVuc2FmZSAmJiB0YXJnZXRba2V5XSkgdGFyZ2V0W2tleV0gPSBzcmNba2V5XTtcbiAgICBlbHNlIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgfSByZXR1cm4gdGFyZ2V0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLmZhc3RLZXk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIFByb3RvdHlwZSk7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgaW5kZXg6IGNyZWF0ZShudWxsKSxcbiAgICAgICAgZmlyc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlbW92ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RhdGUuZmlyc3QpIHN0YXRlLmZpcnN0ID0gZW50cnk7XG4gICAgICAgIGlmIChwcmV2aW91cykgcHJldmlvdXMubmV4dCA9IGVudHJ5O1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUrKztcbiAgICAgICAgZWxzZSB0aGF0LnNpemUrKztcbiAgICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSBzdGF0ZS5pbmRleFtpbmRleF0gPSBlbnRyeTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIHZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAvLyBmYXN0IGNhc2VcbiAgICAgIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgICAgIHZhciBlbnRyeTtcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gc3RhdGUuaW5kZXhbaW5kZXhdO1xuICAgICAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gICAgICBmb3IgKGVudHJ5ID0gc3RhdGUuZmlyc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm5leHQpIHtcbiAgICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSByZXR1cm4gZW50cnk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuY2xlYXIoKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmNsZWFyXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZGF0YSA9IHN0YXRlLmluZGV4O1xuICAgICAgICB2YXIgZW50cnkgPSBzdGF0ZS5maXJzdDtcbiAgICAgICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnByZXZpb3VzKSBlbnRyeS5wcmV2aW91cyA9IGVudHJ5LnByZXZpb3VzLm5leHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5maXJzdCA9IHN0YXRlLmxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSA9IDA7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgICBkZWxldGUgc3RhdGUuaW5kZXhbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnByZXZpb3VzID0gcHJldjtcbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3QgPT09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICAgICAgdmFyIGVudHJ5ID0gc3RhdGUubGFzdDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCFzdGF0ZS50YXJnZXQgfHwgIShzdGF0ZS5sYXN0ID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5zdGF0ZS5maXJzdCkpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT09ICdrZXlzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkua2V5LCBmYWxzZSk7XG4gICAgICBpZiAoa2luZCA9PT0gJ3ZhbHVlcycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LnZhbHVlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbZW50cnkua2V5LCBlbnRyeS52YWx1ZV0sIGZhbHNlKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZVtAQHNwZWNpZXNdYCBhY2Nlc3NvcnNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1tYXAtQEBzcGVjaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtc2V0LUBAc3BlY2llc1xuICAgIHNldFNwZWNpZXMoQ09OU1RSVUNUT1JfTkFNRSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYE1hcGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLW9iamVjdHNcbmNvbGxlY3Rpb24oJ01hcCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXAnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk1hcDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvbWFwJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9tYXBcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLnNvbWU7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29tZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfSwge1xuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb21lJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NvbWUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb21lJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvbWU7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNvbWUpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc29tZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvbWVcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdrZXlzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwva2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwva2V5cycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5rZXlzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5rZXlzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9rZXlzXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxudmFyIG1lcmdlU29ydCA9IGZ1bmN0aW9uIChhcnJheSwgY29tcGFyZWZuKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHZhciBtaWRkbGUgPSBmbG9vcihsZW5ndGggLyAyKTtcbiAgcmV0dXJuIGxlbmd0aCA8IDggPyBpbnNlcnRpb25Tb3J0KGFycmF5LCBjb21wYXJlZm4pIDogbWVyZ2UoXG4gICAgYXJyYXksXG4gICAgbWVyZ2VTb3J0KGFycmF5U2xpY2UoYXJyYXksIDAsIG1pZGRsZSksIGNvbXBhcmVmbiksXG4gICAgbWVyZ2VTb3J0KGFycmF5U2xpY2UoYXJyYXksIG1pZGRsZSksIGNvbXBhcmVmbiksXG4gICAgY29tcGFyZWZuXG4gICk7XG59O1xuXG52YXIgaW5zZXJ0aW9uU29ydCA9IGZ1bmN0aW9uIChhcnJheSwgY29tcGFyZWZuKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHZhciBpID0gMTtcbiAgdmFyIGVsZW1lbnQsIGo7XG5cbiAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICBqID0gaTtcbiAgICBlbGVtZW50ID0gYXJyYXlbaV07XG4gICAgd2hpbGUgKGogJiYgY29tcGFyZWZuKGFycmF5W2ogLSAxXSwgZWxlbWVudCkgPiAwKSB7XG4gICAgICBhcnJheVtqXSA9IGFycmF5Wy0tal07XG4gICAgfVxuICAgIGlmIChqICE9PSBpKyspIGFycmF5W2pdID0gZWxlbWVudDtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG52YXIgbWVyZ2UgPSBmdW5jdGlvbiAoYXJyYXksIGxlZnQsIHJpZ2h0LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxsZW5ndGggPSBsZWZ0Lmxlbmd0aDtcbiAgdmFyIHJsZW5ndGggPSByaWdodC5sZW5ndGg7XG4gIHZhciBsaW5kZXggPSAwO1xuICB2YXIgcmluZGV4ID0gMDtcblxuICB3aGlsZSAobGluZGV4IDwgbGxlbmd0aCB8fCByaW5kZXggPCBybGVuZ3RoKSB7XG4gICAgYXJyYXlbbGluZGV4ICsgcmluZGV4XSA9IChsaW5kZXggPCBsbGVuZ3RoICYmIHJpbmRleCA8IHJsZW5ndGgpXG4gICAgICA/IGNvbXBhcmVmbihsZWZ0W2xpbmRleF0sIHJpZ2h0W3JpbmRleF0pIDw9IDAgPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXVxuICAgICAgOiBsaW5kZXggPCBsbGVuZ3RoID8gbGVmdFtsaW5kZXgrK10gOiByaWdodFtyaW5kZXgrK107XG4gIH0gcmV0dXJuIGFycmF5O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXJnZVNvcnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgZmlyZWZveCA9IHVzZXJBZ2VudC5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS9pKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIWZpcmVmb3ggJiYgK2ZpcmVmb3hbMV07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFVBID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL01TSUV8VHJpZGVudC8udGVzdChVQSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgd2Via2l0ID0gdXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdFxcLyhcXGQrKVxcLi8pO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhd2Via2l0ICYmICt3ZWJraXRbMV07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVybmFsU29ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zb3J0Jyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgRkYgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24nKTtcbnZhciBJRV9PUl9FREdFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlJyk7XG52YXIgVjggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBXRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uJyk7XG5cbnZhciB0ZXN0ID0gW107XG52YXIgbmF0aXZlU29ydCA9IHVuY3VycnlUaGlzKHRlc3Quc29ydCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKHRlc3QucHVzaCk7XG5cbi8vIElFOC1cbnZhciBGQUlMU19PTl9VTkRFRklORUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSk7XG4vLyBWOCBidWdcbnZhciBGQUlMU19PTl9OVUxMID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQobnVsbCk7XG59KTtcbi8vIE9sZCBXZWJLaXRcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29ydCcpO1xuXG52YXIgU1RBQkxFX1NPUlQgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBmZWF0dXJlIGRldGVjdGlvbiBjYW4gYmUgdG9vIHNsb3csIHNvIGNoZWNrIGVuZ2luZXMgdmVyc2lvbnNcbiAgaWYgKFY4KSByZXR1cm4gVjggPCA3MDtcbiAgaWYgKEZGICYmIEZGID4gMykgcmV0dXJuO1xuICBpZiAoSUVfT1JfRURHRSkgcmV0dXJuIHRydWU7XG4gIGlmIChXRUJLSVQpIHJldHVybiBXRUJLSVQgPCA2MDM7XG5cbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgY29kZSwgY2hyLCB2YWx1ZSwgaW5kZXg7XG5cbiAgLy8gZ2VuZXJhdGUgYW4gYXJyYXkgd2l0aCBtb3JlIDUxMiBlbGVtZW50cyAoQ2hha3JhIGFuZCBvbGQgVjggZmFpbHMgb25seSBpbiB0aGlzIGNhc2UpXG4gIGZvciAoY29kZSA9IDY1OyBjb2RlIDwgNzY7IGNvZGUrKykge1xuICAgIGNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgIGNhc2UgNjY6IGNhc2UgNjk6IGNhc2UgNzA6IGNhc2UgNzI6IHZhbHVlID0gMzsgYnJlYWs7XG4gICAgICBjYXNlIDY4OiBjYXNlIDcxOiB2YWx1ZSA9IDQ7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogdmFsdWUgPSAyO1xuICAgIH1cblxuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDQ3OyBpbmRleCsrKSB7XG4gICAgICB0ZXN0LnB1c2goeyBrOiBjaHIgKyBpbmRleCwgdjogdmFsdWUgfSk7XG4gICAgfVxuICB9XG5cbiAgdGVzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLnYgLSBhLnY7IH0pO1xuXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRlc3QubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY2hyID0gdGVzdFtpbmRleF0uay5jaGFyQXQoMCk7XG4gICAgaWYgKHJlc3VsdC5jaGFyQXQocmVzdWx0Lmxlbmd0aCAtIDEpICE9PSBjaHIpIHJlc3VsdCArPSBjaHI7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0ICE9PSAnREdCRUZIQUNJSksnO1xufSk7XG5cbnZhciBGT1JDRUQgPSBGQUlMU19PTl9VTkRFRklORUQgfHwgIUZBSUxTX09OX05VTEwgfHwgIVNUUklDVF9NRVRIT0QgfHwgIVNUQUJMRV9TT1JUO1xuXG52YXIgZ2V0U29ydENvbXBhcmUgPSBmdW5jdGlvbiAoY29tcGFyZWZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoeCwgeSkge1xuICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHJldHVybiAtMTtcbiAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIHJldHVybiArY29tcGFyZWZuKHgsIHkpIHx8IDA7XG4gICAgcmV0dXJuIHRvU3RyaW5nKHgpID4gdG9TdHJpbmcoeSkgPyAxIDogLTE7XG4gIH07XG59O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29ydFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIGFDYWxsYWJsZShjb21wYXJlZm4pO1xuXG4gICAgdmFyIGFycmF5ID0gdG9PYmplY3QodGhpcyk7XG5cbiAgICBpZiAoU1RBQkxFX1NPUlQpIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZCA/IG5hdGl2ZVNvcnQoYXJyYXkpIDogbmF0aXZlU29ydChhcnJheSwgY29tcGFyZWZuKTtcblxuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciBhcnJheUxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGFycmF5KTtcbiAgICB2YXIgaXRlbXNMZW5ndGgsIGluZGV4O1xuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChpbmRleCBpbiBhcnJheSkgcHVzaChpdGVtcywgYXJyYXlbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBpbnRlcm5hbFNvcnQoaXRlbXMsIGdldFNvcnRDb21wYXJlKGNvbXBhcmVmbikpO1xuXG4gICAgaXRlbXNMZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVtcyk7XG4gICAgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgaXRlbXNMZW5ndGgpIGFycmF5W2luZGV4XSA9IGl0ZW1zW2luZGV4KytdO1xuICAgIHdoaWxlIChpbmRleCA8IGFycmF5TGVuZ3RoKSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coYXJyYXksIGluZGV4KyspO1xuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvcnQnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc29ydCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvcnQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29ydDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29ydCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb3J0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29ydFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3ZhbHVlcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnZhbHVlcztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUudmFsdWVzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXNcIik7IiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sL2l0ZXJhdG9yXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnZW50cmllcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2VudHJpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2VudHJpZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZW50cmllcztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZW50cmllcylcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZW50cmllc1wiKTsiLCAiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG5sZXQgZ2V0UmFuZG9tVmFsdWVzO1xuY29uc3Qgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cbiAgICBnZXRSYW5kb21WYWx1ZXMgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pO1xuXG4gICAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbn0iLCAiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5cbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICByZXR1cm4gYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV07XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7IiwgImNvbnN0IHJhbmRvbVVVSUQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCAmJiBjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byk7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHJhbmRvbVVVSURcbn07IiwgImltcG9ydCBuYXRpdmUgZnJvbSAnLi9uYXRpdmUuanMnO1xuaW1wb3J0IHJuZyBmcm9tICcuL3JuZy5qcyc7XG5pbXBvcnQgeyB1bnNhZmVTdHJpbmdpZnkgfSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChuYXRpdmUucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5hdGl2ZS5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3Qgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7IC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIHJldHVybiB1bnNhZmVTdHJpbmdpZnkocm5kcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHY0OyIsICJpbXBvcnQgeyBBc3NpZ25hYmxlIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgRGF0YVNldCB9IGZyb20gXCIuL2RhdGEtc2V0XCI7XG5pbXBvcnQgeyBEYXRhU3RyZWFtIH0gZnJvbSBcIi4vZGF0YS1zdHJlYW1cIjtcblxudHlwZSBWYWx1ZU9mPFQ+ID0gVFtrZXlvZiBUXTtcblxuLyoqIFZhbGlkIGlkIHR5cGUuICovXG5leHBvcnQgdHlwZSBJZCA9IG51bWJlciB8IHN0cmluZztcbi8qKiBOdWxsYWJsZSBpZCB0eXBlLiAqL1xuZXhwb3J0IHR5cGUgT3B0SWQgPSB1bmRlZmluZWQgfCBudWxsIHwgSWQ7XG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIGEgdmFsdWUgY2FuIGJlIHVzZWQgYXMgYW4gaWQuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdmFsaWQgaWQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBJZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xufVxuXG4vKipcbiAqIE1ha2UgYW4gb2JqZWN0IGRlZXBseSBwYXJ0aWFsLlxuICovXG5leHBvcnQgdHlwZSBEZWVwUGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBhbnlbXSB8IEZ1bmN0aW9uIHwgTm9kZVxuICA/IFRcbiAgOiBUIGV4dGVuZHMgb2JqZWN0XG4gID8geyBba2V5IGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtrZXldPiB9XG4gIDogVDtcblxuLyoqXG4gKiBBbiBpdGVtIHRoYXQgbWF5ICh7QGxpbmsgSWR9KSBvciBtYXkgbm90IChhYnNlbnQsIHVuZGVmaW5lZCBvciBudWxsKSBoYXZlIGFuIGlkIHByb3BlcnR5LlxuICpcbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCB0eXBlIFBhcnRJdGVtPElkUHJvcCBleHRlbmRzIHN0cmluZz4gPSBQYXJ0aWFsPFJlY29yZDxJZFByb3AsIE9wdElkPj47XG4vKipcbiAqIEFuIGl0ZW0gdGhhdCBoYXMgYSBwcm9wZXJ0eSBjb250YWluaW5nIGFuIGlkIGFuZCBhbGwgb3RoZXIgcmVxdWlyZWQgcHJvcGVydGllcyBvZiBnaXZlbiBpdGVtIHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCB0eXBlIEZ1bGxJdGVtPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+ID0gSXRlbSAmIFJlY29yZDxJZFByb3AsIElkPjtcbi8qKlxuICogQW4gaXRlbSB0aGF0IGhhcyBhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gaWQgYW5kIG9wdGlvbmFsbHkgb3RoZXIgcHJvcGVydGllcyBvZiBnaXZlbiBpdGVtIHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCB0eXBlIFVwZGF0ZUl0ZW08XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gPSBBc3NpZ25hYmxlPEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+ICYgUmVjb3JkPElkUHJvcCwgSWQ+O1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciBhbiBpdGVtIGhhcyBhbiBpZCAoaXMgYSB7QGxpbmsgRnVsbEl0ZW19KS5cbiAqXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBpdGVtIHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSBpZFByb3AgLSBOYW1lIG9mIHRoZSBpZCBwcm9wZXJ0eS5cbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGlzIHZhbHVlIGlzIGEge0BsaW5rIEZ1bGxJdGVtfSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGdWxsSXRlbTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPihpdGVtOiBJdGVtLCBpZFByb3A6IElkUHJvcCk6IGl0ZW0gaXMgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB7XG4gIHJldHVybiBpdGVtW2lkUHJvcF0gIT0gbnVsbDtcbn1cblxuLyoqIEFkZCBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRFdmVudFBheWxvYWQge1xuICAvKiogSWRzIG9mIGFkZGVkIGl0ZW1zLiAqL1xuICBpdGVtczogSWRbXTtcbn1cbi8qKiBVcGRhdGUgZXZlbnQgcGF5bG9hZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlRXZlbnRQYXlsb2FkPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IHtcbiAgLyoqIElkcyBvZiB1cGRhdGVkIGl0ZW1zLiAqL1xuICBpdGVtczogSWRbXTtcbiAgLyoqIEl0ZW1zIGFzIHRoZXkgd2VyZSBiZWZvcmUgdGhpcyB1cGRhdGUuICovXG4gIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEl0ZW1zIGFzIHRoZXkgYXJlIG5vdy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgSnVzdCBnZXQgdGhlIGRhdGEgZnJvbSB0aGUgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LlxuICAgKi9cbiAgZGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xufVxuLyoqIFJlbW92ZSBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW1vdmVFdmVudFBheWxvYWQ8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKiogSWRzIG9mIHJlbW92ZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xuICAvKiogSXRlbXMgYXMgdGhleSB3ZXJlIGJlZm9yZSB0aGVpciByZW1vdmFsLiAqL1xuICBvbGREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG59XG5cbi8qKlxuICogTWFwIG9mIGV2ZW50IHBheWxvYWQgdHlwZXMgKGV2ZW50IG5hbWUg4oaSIHBheWxvYWQpLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50UGF5bG9hZHM8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICBhZGQ6IEFkZEV2ZW50UGF5bG9hZDtcbiAgdXBkYXRlOiBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPjtcbiAgcmVtb3ZlOiBSZW1vdmVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPjtcbn1cbi8qKlxuICogTWFwIG9mIGV2ZW50IHBheWxvYWQgdHlwZXMgaW5jbHVkaW5nIGFueSBldmVudCAoZXZlbnQgbmFtZSDihpIgcGF5bG9hZCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQYXlsb2Fkc1dpdGhBbnk8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gZXh0ZW5kcyBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD4ge1xuICBcIipcIjogVmFsdWVPZjxFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD4+O1xufVxuXG4vKipcbiAqIE1hcCBvZiBldmVudCBjYWxsYmFjayB0eXBlcyAoZXZlbnQgbmFtZSDihpIgY2FsbGJhY2spLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Q2FsbGJhY2tzPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IHtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIGFkZChuYW1lOiBcImFkZFwiLCBwYXlsb2FkOiBBZGRFdmVudFBheWxvYWQgfCBudWxsLCBzZW5kZXJJZD86IElkIHwgbnVsbCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCAoe0BsaW5rIEV2ZW50TmFtZX0pLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIERhdGEgYWJvdXQgdGhlIGl0ZW1zIGFmZmVjdGVkIGJ5IHRoaXMgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIEEgc2VuZGVySWQsIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2hpY2ggdHJpZ2dlcmVkIHRoZSBldmVudC4gSWYgc2VuZGVySWQgaXMgbm90IHByb3ZpZGVkLCB0aGUgYXJndW1lbnQgd2lsbCBiZSBgbnVsbGAuXG4gICAqL1xuICB1cGRhdGUoXG4gICAgbmFtZTogXCJ1cGRhdGVcIixcbiAgICBwYXlsb2FkOiBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPiB8IG51bGwsXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHJlbW92ZShcbiAgICBuYW1lOiBcInJlbW92ZVwiLFxuICAgIHBheWxvYWQ6IFJlbW92ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+IHwgbnVsbCxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xufVxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgY2FsbGJhY2sgdHlwZXMgaW5jbHVkaW5nIGFueSBldmVudCAoZXZlbnQgbmFtZSDihpIgY2FsbGJhY2spLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBleHRlbmRzIEV2ZW50Q2FsbGJhY2tzPEl0ZW0sIElkUHJvcD4ge1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgXCIqXCI8TiBleHRlbmRzIGtleW9mIEV2ZW50Q2FsbGJhY2tzPEl0ZW0sIElkUHJvcD4+KFxuICAgIG5hbWU6IE4sXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W05dLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG59XG5cbi8qKiBBdmFpbGFibGUgZXZlbnQgbmFtZXMuICovXG5leHBvcnQgdHlwZSBFdmVudE5hbWUgPSBrZXlvZiBFdmVudFBheWxvYWRzPG5ldmVyLCBcIlwiPjtcbi8qKiBBdmFpbGFibGUgZXZlbnQgbmFtZXMgYW5kICcqJyB0byBsaXN0ZW4gZm9yIGFsbC4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50TmFtZVdpdGhBbnkgPSBrZXlvZiBFdmVudFBheWxvYWRzV2l0aEFueTxuZXZlciwgXCJcIj47XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2Ugb3JkZXIgcGFyYW1ldGVyLlxuICogLSBBIHN0cmluZyB2YWx1ZSBkZXRlcm1pbmVzIHdoaWNoIHByb3BlcnR5IHdpbGwgYmUgdXNlZCBmb3Igc29ydGluZyAodXNpbmcgPCBhbmQgPiBvcGVyYXRvcnMgZm9yIG51bWVyaWMgY29tcGFyaXNvbikuXG4gKiAtIEEgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRoZSBzYW1lIHdheSBhcyBpbiBBcnJheS5zb3J0LlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPiA9XG4gIHwga2V5b2YgSXRlbVxuICB8ICgoYTogSXRlbSwgYjogSXRlbSkgPT4gbnVtYmVyKTtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJuIHR5cGUgaW5kZXBlbmRlbnQpLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqXG4gICAqIEFuIGFycmF5IHdpdGggZmllbGQgbmFtZXMsIG9yIGFuIG9iamVjdCB3aXRoIGN1cnJlbnQgZmllbGQgbmFtZSBhbmQgbmV3IGZpZWxkIG5hbWUgdGhhdCB0aGUgZmllbGQgaXMgcmV0dXJuZWQgYXMuIEJ5IGRlZmF1bHQsIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtcyBhcmUgZW1pdHRlZC4gV2hlbiBmaWVsZHMgaXMgZGVmaW5lZCwgb25seSB0aGUgcHJvcGVydGllcyB3aG9zZSBuYW1lIGlzIHNwZWNpZmllZCBpbiBmaWVsZHMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgaXRlbXMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFdhcm5pbmcqKjogVGhlcmUgaXMgbm8gVHlwZVNjcmlwdCBzdXBwb3J0IGZvciB0aGlzLlxuICAgKi9cbiAgZmllbGRzPzogc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogSXRlbXMgY2FuIGJlIGZpbHRlcmVkIG9uIHNwZWNpZmljIHByb3BlcnRpZXMgYnkgcHJvdmlkaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLiBBIGZpbHRlciBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgaXRlbXMgaW4gdGhlIERhdGFTZXQsIGFuZCBpcyBjYWxsZWQgd2l0aCB0aGUgaXRlbSBhcyBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIGJvb2xlYW4uIEFsbCBpdGVtcyBmb3Igd2hpY2ggdGhlIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2lsbCBiZSBlbWl0dGVkLiAqL1xuICBmaWx0ZXI/OiAoaXRlbTogSXRlbSkgPT4gYm9vbGVhbjtcbiAgLyoqIE9yZGVyIHRoZSBpdGVtcyBieSBhIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uICovXG4gIG9yZGVyPzogRGF0YUludGVyZmFjZU9yZGVyPEl0ZW0+O1xufVxuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm5zIGEgc2luZ2xlIGl0ZW0gb3IgYW4gYXJyYXkpLlxuICpcbiAqIEByZW1hcmtzXG4gKiBXaGV0aGVyIGFuIGl0ZW0gb3IgYW5kIGFycmF5IG9mIGl0ZW1zIGlzIHJldHVybmVkIGlzIGRldGVybWluZWQgYnkgdGhlIHR5cGUgb2YgdGhlIGlkKHMpIGFyZ3VtZW50LlxuICogSWYgYW4gYXJyYXkgb2YgaWRzIGlzIHJlcXVlc3RlZCBhbiBhcnJheSBvZiBpdGVtcyB3aWxsIGJlIHJldHVybmVkLlxuICogSWYgYSBzaW5nbGUgaWQgaXMgcmVxdWVzdGVkIGEgc2luZ2xlIGl0ZW0gKG9yIG51bGwgaWYgdGhlIGlkIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSkgd2lsbCBiZSByZXR1cm5lZC5cbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICBleHRlbmRzIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQmFzZTxJdGVtPiB7XG4gIC8qKiBJdGVtcyB3aWxsIGJlIHJldHVybmVkIGFzIGEgc2luZ2xlIGl0ZW0gKGlmIGludm9rZWQgd2l0aCBhbiBpZCkgb3IgYW4gYXJyYXkgb2YgaXRlbXMgKGlmIGludm9rZWQgd2l0aCBhbiBhcnJheSBvZiBpZHMpLiAqL1xuICByZXR1cm5UeXBlPzogdW5kZWZpbmVkIHwgXCJBcnJheVwiO1xufVxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJucyBhbiBvYmplY3QpLlxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgcmV0dXJuZWQgb2JqZWN0IGhhcyBpZHMgYXMga2V5cyBhbmQgaXRlbXMgYXMgdmFsdWVzIG9mIGNvcnJlc3BvbmRpbmcgaWRzLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICBleHRlbmRzIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQmFzZTxJdGVtPiB7XG4gIC8qKiBJdGVtcyB3aWxsIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBtYXAgKGlkIOKGkiBpdGVtKS4gKi9cbiAgcmV0dXJuVHlwZTogXCJPYmplY3RcIjtcbn1cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZ2V0IG9wdGlvbnMgKHJldHVybnMgc2luZ2xlIGl0ZW0sIGFuIGFycmF5IG9yIG9iamVjdCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gPVxuICB8IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgfCBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPjtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgaWRzIG9wdGlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9uczxJdGVtPiB7XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZm9yIGVhY2ggb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPiB7XG4gIC8qKiBBbiBhcnJheSB3aXRoIGZpZWxkIG5hbWVzLCBvciBhbiBvYmplY3Qgd2l0aCBjdXJyZW50IGZpZWxkIG5hbWUgYW5kIG5ldyBmaWVsZCBuYW1lIHRoYXQgdGhlIGZpZWxkIGlzIHJldHVybmVkIGFzLiBCeSBkZWZhdWx0LCBhbGwgcHJvcGVydGllcyBvZiB0aGUgaXRlbXMgYXJlIGVtaXR0ZWQuIFdoZW4gZmllbGRzIGlzIGRlZmluZWQsIG9ubHkgdGhlIHByb3BlcnRpZXMgd2hvc2UgbmFtZSBpcyBzcGVjaWZpZWQgaW4gZmllbGRzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIGl0ZW1zLiAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgbWFwIG9wcmlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBPcmlnaW5hbCAtIFRoZSBvcmlnaW5hbCBpdGVtIHR5cGUgaW4gdGhlIGRhdGEuXG4gKiBAdHlwZVBhcmFtIE1hcHBlZCAtIFRoZSB0eXBlIGFmdGVyIG1hcHBpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8T3JpZ2luYWwsIE1hcHBlZD4ge1xuICAvKiogQW4gYXJyYXkgd2l0aCBmaWVsZCBuYW1lcywgb3IgYW4gb2JqZWN0IHdpdGggY3VycmVudCBmaWVsZCBuYW1lIGFuZCBuZXcgZmllbGQgbmFtZSB0aGF0IHRoZSBmaWVsZCBpcyByZXR1cm5lZCBhcy4gQnkgZGVmYXVsdCwgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW1zIGFyZSBlbWl0dGVkLiBXaGVuIGZpZWxkcyBpcyBkZWZpbmVkLCBvbmx5IHRoZSBwcm9wZXJ0aWVzIHdob3NlIG5hbWUgaXMgc3BlY2lmaWVkIGluIGZpZWxkcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBpdGVtcy4gKi9cbiAgZmllbGRzPzogc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogSXRlbXMgY2FuIGJlIGZpbHRlcmVkIG9uIHNwZWNpZmljIHByb3BlcnRpZXMgYnkgcHJvdmlkaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLiBBIGZpbHRlciBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgaXRlbXMgaW4gdGhlIERhdGFTZXQsIGFuZCBpcyBjYWxsZWQgd2l0aCB0aGUgaXRlbSBhcyBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIGJvb2xlYW4uIEFsbCBpdGVtcyBmb3Igd2hpY2ggdGhlIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2lsbCBiZSBlbWl0dGVkLiAqL1xuICBmaWx0ZXI/OiAoaXRlbTogT3JpZ2luYWwpID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxNYXBwZWQ+O1xufVxuXG4vKipcbiAqIENvbW1vbiBpbnRlcmZhY2UgZm9yIGRhdGEgc2V0cyBhbmQgZGF0YSB2aWV3LlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQgKG1pc3NpbmcgaWRzIHdpbGwgYmUgZ2VuZXJhdGVkIHVwb24gaW5zZXJ0aW9uKS5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgb24gdGhlIEl0ZW0gdHlwZSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+IHtcbiAgLyoqIFRoZSBudW1iZXIgb2YgaXRlbXMuICovXG4gIGxlbmd0aDogbnVtYmVyO1xuXG4gIC8qKiBUaGUga2V5IG9mIGlkIHByb3BlcnR5LiAqL1xuICBpZFByb3A6IElkUHJvcDtcblxuICAvKipcbiAgICogQWRkIGEgdW5pdmVyc2FsIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYCpgIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIGFueSBvZiB0aGUgZXZlbnRzIGBhZGRgLCBgdXBkYXRlYCwgYW5kIGByZW1vdmVgIG9jY3Vycy5cbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvbihldmVudDogXCIqXCIsIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl0pOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGFuIGBhZGRgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYGFkZGAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gaXRlbSBvciBhIHNldCBvZiBpdGVtcyBpcyBhZGRlZCwgb3Igd2hlbiBhbiBpdGVtIGlzIHVwZGF0ZWQgd2hpbGUgbm90IHlldCBleGlzdGluZy5cbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvbihldmVudDogXCJhZGRcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiYWRkXCJdKTogdm9pZDtcbiAgLyoqXG4gICAqIEFkZCBhIGByZW1vdmVgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYHJlbW92ZWAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gaXRlbSBvciBhIHNldCBvZiBpdGVtcyBpcyByZW1vdmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXVxuICApOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGFuIGB1cGRhdGVgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYHVwZGF0ZWAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gZXhpc3RpbmcgaXRlbSBvciBhIHNldCBvZiBleGlzdGluZyBpdGVtcyBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSB1bml2ZXJzYWwgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKGV2ZW50OiBcIipcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYGFkZGAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKGV2ZW50OiBcImFkZFwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl0pOiB2b2lkO1xuICAvKipcbiAgICogUmVtb3ZlIGEgYHJlbW92ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXVxuICApOiB2b2lkO1xuICAvKipcbiAgICogUmVtb3ZlIGFuIGB1cGRhdGVgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9mZihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl1cbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogR2V0IGFsbCB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcy5cbiAgICovXG4gIGdldCgpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgcmVxdWVzdGVkIGl0ZW1zLlxuICAgKi9cbiAgZ2V0KG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT4pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgdGhlcmUgYXJlIG5vIGl0ZW1zKS5cbiAgICovXG4gIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IGFsbCB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIHJlcXVlc3RlZCBpdGVtcyBvciBpZiByZXF1ZXN0ZWQgYW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBhcmUgbm8gaXRlbXMpLlxuICAgKi9cbiAgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0gb3IgbnVsbCBpZiB0aGUgaWQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBpdGVtLlxuICAgKi9cbiAgZ2V0KGlkOiBJZCk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKipcbiAgICogR2V0IG9uZSBpdGVtLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIGl0ZW0uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBvciBudWxsIGlmIHRoZSBpZCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGl0ZW0uXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG9uZSBpdGVtLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIGl0ZW0uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBpZiBmb3VuZCBvciBudWxsIG90aGVyd2lzZS4gSWYgcmVxdWVzdGVkIGFuIG9iamVjdCBtYXAgd2l0aCAwIHRvIDEgaXRlbXMuXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBtdWx0aXBsZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGlkcyAtIEFuIGFycmF5IG9mIHJlcXVlc3RlZCBpZHMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZvdW5kIGl0ZW1zIChpZHMgdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSBhcmUgb21pdHRlZCkuXG4gICAqL1xuICBnZXQoaWRzOiBJZFtdKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZvdW5kIGl0ZW1zIChpZHMgdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSBhcmUgb21pdHRlZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZvdW5kIGl0ZW1zIChpZHMgdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSBhcmUgb21pdHRlZCkuXG4gICAqIElmIHJlcXVlc3RlZCBhbiBvYmplY3QgbWFwIG9mIGl0ZW1zIChtYXkgYmUgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIGl0ZW0gd2FzIGZvdW5kKS5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGlkcyAtIElkIG9yIGlkcyB0byBiZSByZXR1cm5lZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHNwZWNpZnkgaXRlcmF0aW9uIGRldGFpbHMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtcyAoZm9ybWF0IGlzIGRldGVybWluZWQgYnkgaWRzIChzaW5nbGUgb3IgYXJyYXkpIGFuZCB0aGUgb3B0aW9ucy5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkIHwgSWRbXSxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcblxuICAvKipcbiAgICogR2V0IHRoZSBEYXRhU2V0IHRvIHdoaWNoIHRoZSBpbnN0YW5jZSBpbXBsZW1lbnRpbmcgdGhpcyBpbnRlcmZhY2UgaXMgY29ubmVjdGVkLlxuICAgKiBJbiBjYXNlIHRoZXJlIGlzIGEgY2hhaW4gb2YgbXVsdGlwbGUgRGF0YVZpZXdzLCB0aGUgcm9vdCBEYXRhU2V0IG9mIHRoaXMgY2hhaW4gaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBkYXRhIHNldCB0aGF0IGFjdHVhbGx5IGNvbnRhaW5zIHRoZSBkYXRhLlxuICAgKi9cbiAgZ2V0RGF0YVNldCgpOiBEYXRhU2V0PEl0ZW0sIElkUHJvcD47XG5cbiAgLyoqXG4gICAqIEdldCBpZHMgb2YgaXRlbXMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIE5vIGd1YXJhbnRlZSBpcyBnaXZlbiBhYm91dCB0aGUgb3JkZXIgb2YgcmV0dXJuZWQgaWRzIHVubGVzcyBhbiBvcmRlcmluZyBmdW5jdGlvbiBpcyBzdXBwbGllZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHJlcXVlc3RlZCBpZHMuXG4gICAqL1xuICBnZXRJZHMob3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+KTogSWRbXTtcblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIE5vIGd1YXJhbnRlZSBpcyBnaXZlbiBhYm91dCB0aGUgb3JkZXIgb2YgaXRlcmF0aW9uIHVubGVzcyBhbiBvcmRlcmluZyBmdW5jdGlvbiBpcyBzdXBwbGllZC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gRXhlY3V0ZWQgaW4gc2ltaWxhciBmYXNoaW9uIHRvIEFycmF5LmZvckVhY2ggY2FsbGJhY2ssIGJ1dCBpbnN0ZWFkIG9mIGl0ZW0sIGluZGV4LCBhcnJheSByZWNlaXZlcyBpdGVtLCBpZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHNwZWNpZnkgaXRlcmF0aW9uIGRldGFpbHMuXG4gICAqL1xuICBmb3JFYWNoKFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiB2b2lkLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnM8SXRlbT5cbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogTWFwIGVhY2ggaXRlbSBpbnRvIGRpZmZlcmVudCBpdGVtIGFuZCByZXR1cm4gdGhlbSBhcyBhbiBhcnJheS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiBpdGVyYXRpb24gZXZlbiBpZiBvcmRlcmluZyBmdW5jdGlvbiBpcyBzdXBwbGllZCAodGhlIGl0ZW1zIGFyZSBzb3J0ZWQgYWZ0ZXIgdGhlIG1hcHBpbmcpLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBcnJheS5tYXAtbGlrZSBjYWxsYmFjaywgYnV0IG9ubHkgd2l0aCB0aGUgZmlyc3QgdHdvIHBhcmFtcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHNwZWNpZnkgaXRlcmF0aW9uIGRldGFpbHMuXG4gICAqIEByZXR1cm5zIFRoZSBtYXBwZWQgaXRlbXMuXG4gICAqL1xuICBtYXA8VD4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IFQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VNYXBPcHRpb25zPEl0ZW0sIFQ+XG4gICk6IFRbXTtcblxuICAvKipcbiAgICogU3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gSWRzIG9mIHRoZSBpdGVtcyB0byBiZSBpbmNsdWRlZCBpbiB0aGlzIHN0cmVhbSAobWlzc2luZyBhcmUgaWdub3JlZCksIGFsbCBpZiBvbWl0dGVkLlxuICAgKiBAcmV0dXJucyBUaGUgZGF0YSBzdHJlYW0gZm9yIHRoaXMgZGF0YSBzZXQuXG4gICAqL1xuICBzdHJlYW0oaWRzPzogSXRlcmFibGU8SWQ+KTogRGF0YVN0cmVhbTxJdGVtPjtcbn1cbiIsICIvKiogUXVldWUgY29uZmlndXJhdGlvbiBvYmplY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlT3B0aW9ucyB7XG4gIC8qKiBUaGUgcXVldWUgd2lsbCBiZSBmbHVzaGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgYW4gaW5hY3Rpdml0eSBvZiB0aGlzIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4gQnkgZGVmYXVsdCB0aGVyZSBpcyBubyBhdXRvbWF0aWMgZmx1c2hpbmcgKGBudWxsYCkuICovXG4gIGRlbGF5PzogbnVsbCB8IG51bWJlcjtcbiAgLyoqIFdoZW4gdGhlIHF1ZXVlIGV4Y2VlZHMgdGhlIGdpdmVuIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMsIHRoZSBxdWV1ZSBpcyBmbHVzaGVkIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQgdmFsdWUgaXMgYEluZmluaXR5YC4gKi9cbiAgbWF4PzogbnVtYmVyO1xufVxuLyoqXG4gKiBRdWV1ZSBleHRlbmRpbmcgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBtZXRob2QgbmFtZXMgdG8gYmUgcmVwbGFjZWQgYnkgcXVldWVkIHZlcnNpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlRXh0ZW5kT3B0aW9uczxUPiB7XG4gIC8qKiBBIGxpc3Qgd2l0aCBtZXRob2QgbmFtZXMgb2YgdGhlIG1ldGhvZHMgb24gdGhlIG9iamVjdCB0byBiZSByZXBsYWNlZCB3aXRoIHF1ZXVlZCBvbmVzLiAqL1xuICByZXBsYWNlOiBUW107XG4gIC8qKiBXaGVuIHByb3ZpZGVkLCB0aGUgcXVldWUgd2lsbCBiZSBmbHVzaGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgYW4gaW5hY3Rpdml0eSBvZiB0aGlzIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdCB2YWx1ZSBpcyBudWxsLiAqL1xuICBkZWxheT86IG51bWJlcjtcbiAgLyoqIFdoZW4gdGhlIHF1ZXVlIGV4Y2VlZHMgdGhlIGdpdmVuIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMsIHRoZSBxdWV1ZSBpcyBmbHVzaGVkIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQgdmFsdWUgb2YgbWF4IGlzIEluZmluaXR5LiAqL1xuICBtYXg/OiBudW1iZXI7XG59XG4vKipcbiAqIFF1ZXVlIGNhbGwgZW50cnkuXG4gKiAtIEEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQuXG4gKiAtIEFuIG9iamVjdCB3aXRoIGZ1bmN0aW9uLCBhcmdzLCBjb250ZXh0IChsaWtlIGZ1bmN0aW9uLmJpbmQoY29udGV4dCwgLi4uYXJncykpLlxuICovXG50eXBlIFF1ZXVlQ2FsbEVudHJ5ID1cbiAgfCBGdW5jdGlvblxuICB8IHtcbiAgICAgIGZuOiBGdW5jdGlvbjtcbiAgICAgIGFyZ3M6IHVua25vd25bXTtcbiAgICB9XG4gIHwge1xuICAgICAgZm46IEZ1bmN0aW9uO1xuICAgICAgYXJnczogdW5rbm93bltdO1xuICAgICAgY29udGV4dDogdW5rbm93bjtcbiAgICB9O1xuXG5pbnRlcmZhY2UgUXVldWVFeHRlbmRlZDxPPiB7XG4gIG9iamVjdDogTztcbiAgbWV0aG9kczoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBvcmlnaW5hbDogdW5rbm93bjtcbiAgfVtdO1xufVxuXG4vKipcbiAqIEEgcXVldWUuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgbWV0aG9kIG5hbWVzIHRvIGJlIHJlcGxhY2VkIGJ5IHF1ZXVlZCB2ZXJzaW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXVlPFQgPSBuZXZlcj4ge1xuICAvKiogRGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBJZiBkZWZpbmVkIHRoZSBxdWV1ZSB3aWxsIGJlIHBlcmlvZGljYWxseSBmbHVzaGVkLiAqL1xuICBwdWJsaWMgZGVsYXk6IG51bGwgfCBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBxdWV1ZSBiZWZvcmUgaXQgd2lsbCBiZSBmbHVzaGVkLiAqL1xuICBwdWJsaWMgbWF4OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcXVldWU6IHtcbiAgICBmbjogRnVuY3Rpb247XG4gICAgYXJncz86IHVua25vd25bXTtcbiAgICBjb250ZXh0PzogdW5rbm93bjtcbiAgfVtdID0gW107XG5cbiAgcHJpdmF0ZSBfdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZXh0ZW5kZWQ6IG51bGwgfCBRdWV1ZUV4dGVuZGVkPFQ+ID0gbnVsbDtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IFF1ZXVlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFF1ZXVlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9ucz86IFF1ZXVlT3B0aW9ucykge1xuICAgIC8vIG9wdGlvbnNcbiAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICB0aGlzLm1heCA9IEluZmluaXR5O1xuXG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcXVldWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUXVldWUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM/OiBRdWV1ZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5kZWxheSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5kZWxheSA9IG9wdGlvbnMuZGVsYXk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5tYXggPSBvcHRpb25zLm1heDtcbiAgICB9XG5cbiAgICB0aGlzLl9mbHVzaElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogRXh0ZW5kIGFuIG9iamVjdCB3aXRoIHF1ZXVpbmcgZnVuY3Rpb25hbGl0eS5cbiAgICogVGhlIG9iamVjdCB3aWxsIGJlIGV4dGVuZGVkIHdpdGggYSBmdW5jdGlvbiBmbHVzaCwgYW5kIHRoZSBtZXRob2RzIHByb3ZpZGVkIGluIG9wdGlvbnMucmVwbGFjZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggcXVldWVkIG9uZXMuXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgcXVldWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGV4dGVuZDxPIGV4dGVuZHMgeyBmbHVzaD86ICgpID0+IHZvaWQgfSwgSyBleHRlbmRzIHN0cmluZz4oXG4gICAgb2JqZWN0OiBPLFxuICAgIG9wdGlvbnM6IFF1ZXVlRXh0ZW5kT3B0aW9uczxLPlxuICApOiBRdWV1ZTxPPiB7XG4gICAgY29uc3QgcXVldWUgPSBuZXcgUXVldWU8Tz4ob3B0aW9ucyk7XG5cbiAgICBpZiAob2JqZWN0LmZsdXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhcmdldCBvYmplY3QgYWxyZWFkeSBoYXMgYSBwcm9wZXJ0eSBmbHVzaFwiKTtcbiAgICB9XG4gICAgb2JqZWN0LmZsdXNoID0gKCk6IHZvaWQgPT4ge1xuICAgICAgcXVldWUuZmx1c2goKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWV0aG9kczogUXVldWVFeHRlbmRlZDxPPltcIm1ldGhvZHNcIl0gPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiZmx1c2hcIixcbiAgICAgICAgb3JpZ2luYWw6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmVwbGFjZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLnJlcGxhY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IG9wdGlvbnMucmVwbGFjZVtpXTtcbiAgICAgICAgbWV0aG9kcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIC8vIEBUT0RPOiBiZXR0ZXIgc29sdXRpb24/XG4gICAgICAgICAgb3JpZ2luYWw6IChvYmplY3QgYXMgdW5rbm93biBhcyBSZWNvcmQ8SywgKCkgPT4gdm9pZD4pW25hbWVdLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgcXVldWUucmVwbGFjZShvYmplY3QgYXMgdW5rbm93biBhcyBSZWNvcmQ8SywgKCkgPT4gdm9pZD4sIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHF1ZXVlLl9leHRlbmRlZCA9IHtcbiAgICAgIG9iamVjdDogb2JqZWN0LFxuICAgICAgbWV0aG9kczogbWV0aG9kcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHF1ZXVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgdGhlIHF1ZXVlLiBUaGUgcXVldWUgd2lsbCBmaXJzdCBmbHVzaCBhbGwgcXVldWVkIGFjdGlvbnMsIGFuZCBpbiBjYXNlIGl0IGhhcyBleHRlbmRlZCBhbiBvYmplY3QsIHdpbGwgcmVzdG9yZSB0aGUgb3JpZ2luYWwgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5mbHVzaCgpO1xuXG4gICAgaWYgKHRoaXMuX2V4dGVuZGVkKSB7XG4gICAgICBjb25zdCBvYmplY3QgPSB0aGlzLl9leHRlbmRlZC5vYmplY3Q7XG4gICAgICBjb25zdCBtZXRob2RzID0gdGhpcy5fZXh0ZW5kZWQubWV0aG9kcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBtZXRob2QgPSBtZXRob2RzW2ldO1xuICAgICAgICBpZiAobWV0aG9kLm9yaWdpbmFsKSB7XG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICAob2JqZWN0IGFzIGFueSlbbWV0aG9kLm5hbWVdID0gbWV0aG9kLm9yaWdpbmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEBUT0RPOiBiZXR0ZXIgc29sdXRpb24/XG4gICAgICAgICAgZGVsZXRlIChvYmplY3QgYXMgYW55KVttZXRob2QubmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX2V4dGVuZGVkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhIG1ldGhvZCBvbiBhbiBvYmplY3Qgd2l0aCBhIHF1ZXVlZCB2ZXJzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IGhhdmluZyB0aGUgbWV0aG9kLlxuICAgKiBAcGFyYW0gbWV0aG9kIC0gVGhlIG1ldGhvZCBuYW1lLlxuICAgKi9cbiAgcHVibGljIHJlcGxhY2U8TSBleHRlbmRzIHN0cmluZz4oXG4gICAgb2JqZWN0OiBSZWNvcmQ8TSwgKCkgPT4gdm9pZD4sXG4gICAgbWV0aG9kOiBNXG4gICk6IHZvaWQge1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcyAtLSBGdW5jdGlvbiB0aGlzIGlzIG5lY2Vzc2FyeSBpbiB0aGUgZnVuY3Rpb24gYmVsbG93LCBzbyBjbGFzcyB0aGlzIGhhcyB0byBiZSBzYXZlZCBpbnRvIGEgdmFyaWFibGUgaGVyZS4gKi9cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kXTtcbiAgICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2QgXCIgKyBtZXRob2QgKyBcIiB1bmRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgb2JqZWN0W21ldGhvZF0gPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAvLyBhZGQgdGhpcyBjYWxsIHRvIHRoZSBxdWV1ZVxuICAgICAgbWUucXVldWUoe1xuICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICBmbjogb3JpZ2luYWwsXG4gICAgICAgIGNvbnRleHQ6IHRoaXMsXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFF1ZXVlIGEgY2FsbC5cbiAgICpcbiAgICogQHBhcmFtIGVudHJ5IC0gVGhlIGZ1bmN0aW9uIG9yIGVudHJ5IHRvIGJlIHF1ZXVlZC5cbiAgICovXG4gIHB1YmxpYyBxdWV1ZShlbnRyeTogUXVldWVDYWxsRW50cnkpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goeyBmbjogZW50cnkgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goZW50cnkpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZsdXNoSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBxdWV1ZSBuZWVkcyB0byBiZSBmbHVzaGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmx1c2hJZk5lZWRlZCgpOiB2b2lkIHtcbiAgICAvLyBmbHVzaCB3aGVuIHRoZSBtYXhpbXVtIGlzIGV4Y2VlZGVkLlxuICAgIGlmICh0aGlzLl9xdWV1ZS5sZW5ndGggPiB0aGlzLm1heCkge1xuICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICAgIC8vIGZsdXNoIGFmdGVyIGEgcGVyaW9kIG9mIGluYWN0aXZpdHkgd2hlbiBhIGRlbGF5IGlzIGNvbmZpZ3VyZWRcbiAgICBpZiAodGhpcy5fdGltZW91dCAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiB0eXBlb2YgdGhpcy5kZWxheSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9LCB0aGlzLmRlbGF5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggYWxsIHF1ZXVlZCBjYWxsc1xuICAgKi9cbiAgcHVibGljIGZsdXNoKCk6IHZvaWQge1xuICAgIHRoaXMuX3F1ZXVlLnNwbGljZSgwKS5mb3JFYWNoKChlbnRyeSk6IHZvaWQgPT4ge1xuICAgICAgZW50cnkuZm4uYXBwbHkoZW50cnkuY29udGV4dCB8fCBlbnRyeS5mbiwgZW50cnkuYXJncyB8fCBbXSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBEYXRhSW50ZXJmYWNlLFxuICBFdmVudENhbGxiYWNrc1dpdGhBbnksXG4gIEV2ZW50TmFtZSxcbiAgRXZlbnROYW1lV2l0aEFueSxcbiAgRXZlbnRQYXlsb2FkcyxcbiAgSWQsXG4gIFBhcnRJdGVtLFxufSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG50eXBlIEV2ZW50U3Vic2NyaWJlcnM8SXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sIElkUHJvcCBleHRlbmRzIHN0cmluZz4gPSB7XG4gIFtOYW1lIGluIGtleW9mIEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+XTogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xufTtcblxuLyoqXG4gKiB7QGxpbmsgRGF0YVNldH0gY29kZSB0aGF0IGNhbiBiZSByZXVzZWQgaW4ge0BsaW5rIERhdGFWaWV3fSBvciBvdGhlciBzaW1pbGFyIGltcGxlbWVudGF0aW9ucyBvZiB7QGxpbmsgRGF0YUludGVyZmFjZX0uXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhU2V0UGFydDxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBpbXBsZW1lbnRzIFBpY2s8RGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+LCBcIm9uXCIgfCBcIm9mZlwiPlxue1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpYmVyczoge1xuICAgIFtOYW1lIGluIEV2ZW50TmFtZVdpdGhBbnldOiBFdmVudFN1YnNjcmliZXJzPEl0ZW0sIElkUHJvcD5bTmFtZV1bXTtcbiAgfSA9IHtcbiAgICBcIipcIjogW10sXG4gICAgYWRkOiBbXSxcbiAgICByZW1vdmU6IFtdLFxuICAgIHVwZGF0ZTogW10sXG4gIH07XG5cbiAgcHJvdGVjdGVkIF90cmlnZ2VyKFxuICAgIGV2ZW50OiBcImFkZFwiLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltcImFkZFwiXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICBwcm90ZWN0ZWQgX3RyaWdnZXIoXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG4gIHByb3RlY3RlZCBfdHJpZ2dlcihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIFRyaWdnZXIgYW4gZXZlbnRcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBFdmVudCBwYXlsb2FkLlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBJZCBvZiB0aGUgc2VuZGVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIF90cmlnZ2VyPE5hbWUgZXh0ZW5kcyBFdmVudE5hbWU+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltOYW1lXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkIHtcbiAgICBpZiAoKGV2ZW50IGFzIHN0cmluZykgPT09IFwiKlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdHJpZ2dlciBldmVudCAqXCIpO1xuICAgIH1cblxuICAgIFsuLi50aGlzLl9zdWJzY3JpYmVyc1tldmVudF0sIC4uLnRoaXMuX3N1YnNjcmliZXJzW1wiKlwiXV0uZm9yRWFjaChcbiAgICAgIChzdWJzY3JpYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIHN1YnNjcmliZXIoZXZlbnQsIHBheWxvYWQsIHNlbmRlcklkICE9IG51bGwgPyBzZW5kZXJJZCA6IG51bGwpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9uKFxuICAgIGV2ZW50OiBcIipcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwiYWRkXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiYWRkXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gYW4gZXZlbnQsIGFkZCBhbiBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHJlbWFya3MgTm9uLWZ1bmN0aW9uIGNhbGxiYWNrcyBhcmUgaWdub3JlZC5cbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgbWV0aG9kLlxuICAgKi9cbiAgcHVibGljIG9uPE5hbWUgZXh0ZW5kcyBFdmVudE5hbWVXaXRoQW55PihcbiAgICBldmVudDogTmFtZSxcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bTmFtZV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0ucHVzaChjYWxsYmFjayk7XG4gICAgfVxuICAgIC8vIEBUT0RPOiBNYXliZSB0aHJvdyBmb3IgaW52YWxpZCBjYWxsYmFja3M/XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCIqXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXVxuICApOiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCJhZGRcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvZmYoXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSBhbiBldmVudCwgcmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBJZiB0aGUgc2FtZSBjYWxsYmFjayB3YXMgc3Vic2NyaWJlZCBtb3JlIHRoYW4gb25jZSAqKmFsbCoqIG9jY3VyZW5jZXMgd2lsbCBiZSByZW1vdmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgb2ZmPE5hbWUgZXh0ZW5kcyBFdmVudE5hbWVXaXRoQW55PihcbiAgICBldmVudDogTmFtZSxcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bTmFtZV1cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaWJlcnNbZXZlbnRdID0gdGhpcy5fc3Vic2NyaWJlcnNbZXZlbnRdLmZpbHRlcihcbiAgICAgIChzdWJzY3JpYmVyKTogYm9vbGVhbiA9PiBzdWJzY3JpYmVyICE9PSBjYWxsYmFja1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9uIGluc3RlYWQgKFBTOiBEYXRhVmlldy5zdWJzY3JpYmUgPT09IERhdGFWaWV3Lm9uKS5cbiAgICovXG4gIHB1YmxpYyBzdWJzY3JpYmU6IERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5bXCJvblwiXSA9IERhdGFTZXRQYXJ0LnByb3RvdHlwZS5vbjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvZmYgaW5zdGVhZCAoUFM6IERhdGFWaWV3LnVuc3Vic2NyaWJlID09PSBEYXRhVmlldy5vZmYpLlxuICAgKi9cbiAgcHVibGljIHVuc3Vic2NyaWJlOiBEYXRhU2V0UGFydDxJdGVtLCBJZFByb3A+W1wib2ZmXCJdID1cbiAgICBEYXRhU2V0UGFydC5wcm90b3R5cGUub2ZmO1xuXG4gIC8qIGRldmVsYmxvY2s6c3RhcnQgKi9cbiAgcHVibGljIGdldCB0ZXN0TGVha1N1YnNjcmliZXJzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZXJzO1xuICB9XG4gIC8qIGRldmVsYmxvY2s6ZW5kICovXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYFNldGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LW9iamVjdHNcbmNvbGxlY3Rpb24oJ1NldCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlNldDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc2V0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zZXRcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SXRlcmF0b3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL2VzL2dldC1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi9zdGFibGUvZ2V0LWl0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi9hY3R1YWwvZ2V0LWl0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vZnVsbC9nZXQtaXRlcmF0b3InKTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yXCIpOyIsICJpbXBvcnQgeyBJZCB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbi8qKlxuICogRGF0YSBzdHJlYW1cbiAqXG4gKiBAcmVtYXJrc1xuICoge0BsaW5rIERhdGFTdHJlYW19IG9mZmVycyBhbiBhbHdheXMgdXAgdG8gZGF0ZSBzdHJlYW0gb2YgaXRlbXMgZnJvbSBhIHtAbGluayBEYXRhU2V0fSBvciB7QGxpbmsgRGF0YVZpZXd9LlxuICogVGhhdCBtZWFucyB0aGF0IHRoZSBzdHJlYW0gaXMgZXZhbHVhdGVkIGF0IHRoZSB0aW1lIG9mIGl0ZXJhdGlvbiwgY29udmVyc2lvbiB0byBhbm90aGVyIGRhdGEgdHlwZSBvciB3aGVuIHtAbGluayBjYWNoZX0gaXMgY2FsbGVkLCBub3Qgd2hlbiB0aGUge0BsaW5rIERhdGFTdHJlYW19IHdhcyBjcmVhdGVkLlxuICogTXVsdGlwbGUgaW52b2NhdGlvbnMgb2YgZm9yIGV4YW1wbGUge0BsaW5rIHRvSXRlbUFycmF5fSBtYXkgeWllbGQgZGlmZmVyZW50IHJlc3VsdHMgKGlmIHRoZSBkYXRhIHNvdXJjZSBsaWtlIGZvciBleGFtcGxlIHtAbGluayBEYXRhU2V0fSBnZXRzIG1vZGlmaWVkKS5cbiAqIEB0eXBlUGFyYW0gSXRlbSAtIFRoZSBpdGVtIHR5cGUgdGhpcyBzdHJlYW0gaXMgZ29pbmcgdG8gd29yayB3aXRoLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVN0cmVhbTxJdGVtPiBpbXBsZW1lbnRzIEl0ZXJhYmxlPFtJZCwgSXRlbV0+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFpcnM6IEl0ZXJhYmxlPFtJZCwgSXRlbV0+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgZGF0YSBzdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBwYWlycyAtIFRoZSBpZCwgaXRlbSBwYWlycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYWlyczogSXRlcmFibGU8W0lkLCBJdGVtXT4pIHtcbiAgICB0aGlzLl9wYWlycyA9IHBhaXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVyYWJsZSBvZiBrZXksIHZhbHVlIHBhaXJzIGZvciBldmVyeSBlbnRyeSBpbiB0aGUgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+IHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHlpZWxkIFtpZCwgaXRlbV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVyYWJsZSBvZiBrZXksIHZhbHVlIHBhaXJzIGZvciBldmVyeSBlbnRyeSBpbiB0aGUgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljICplbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBJdGVtXT4ge1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgeWllbGQgW2lkLCBpdGVtXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGl0ZXJhYmxlIG9mIGtleXMgaW4gdGhlIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyAqa2V5cygpOiBJdGVyYWJsZUl0ZXJhdG9yPElkPiB7XG4gICAgZm9yIChjb25zdCBbaWRdIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICB5aWVsZCBpZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGl0ZXJhYmxlIG9mIHZhbHVlcyBpbiB0aGUgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljICp2YWx1ZXMoKTogSXRlcmFibGVJdGVyYXRvcjxJdGVtPiB7XG4gICAgZm9yIChjb25zdCBbLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgeWllbGQgaXRlbTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBpZHMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBhcnJheSBtYXkgY29udGFpbiBkdXBsaWNpdGllcy5cbiAgICogQHJldHVybnMgVGhlIGFycmF5IHdpdGggYWxsIGlkcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvSWRBcnJheSgpOiBJZFtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3BhaXJzXS5tYXAoKHBhaXIpOiBJZCA9PiBwYWlyWzBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYXJyYXkgbWF5IGNvbnRhaW4gZHVwbGljaXRpZXMuXG4gICAqIEByZXR1cm5zIFRoZSBhcnJheSB3aXRoIGFsbCBpdGVtcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvSXRlbUFycmF5KCk6IEl0ZW1bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9wYWlyc10ubWFwKChwYWlyKTogSXRlbSA9PiBwYWlyWzFdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGVudHJpZXMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBhcnJheSBtYXkgY29udGFpbiBkdXBsaWNpdGllcy5cbiAgICogQHJldHVybnMgVGhlIGFycmF5IHdpdGggYWxsIGVudHJpZXMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0VudHJ5QXJyYXkoKTogW0lkLCBJdGVtXVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3BhaXJzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IG1hcCBjb250YWluaW5nIGFsbCB0aGUgaXRlbXMgaW4gdGhpcyBzdHJlYW0gYWNjZXNzaWJsZSBieSBpZHMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEluIGNhc2Ugb2YgZHVwbGljYXRlIGlkcyAoY29lcmNlZCB0byBzdHJpbmcgc28gYDcgPT0gJzcnYCkgdGhlIGxhc3QgZW5jb3V0ZXJlZCBhcHBlYXJzIGluIHRoZSByZXR1cm5lZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIFRoZSBvYmplY3QgbWFwIG9mIGFsbCBpZCDihpIgaXRlbSBwYWlycyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvT2JqZWN0TWFwKCk6IFJlY29yZDxJZCwgSXRlbT4ge1xuICAgIGNvbnN0IG1hcDogUmVjb3JkPElkLCBJdGVtPiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICBtYXBbaWRdID0gaXRlbTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtYXAgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIGluIHRoaXMgc3RyZWFtIGFjY2Vzc2libGUgYnkgaWRzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbWFwIG9mIGFsbCBpZCDihpIgaXRlbSBwYWlycyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvTWFwKCk6IE1hcDxJZCwgSXRlbT4ge1xuICAgIHJldHVybiBuZXcgTWFwKHRoaXMuX3BhaXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBzZXQgY29udGFpbmluZyBhbGwgdGhlICh1bmlxdWUpIGlkcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNldCBvZiBhbGwgaWRzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9JZFNldCgpOiBTZXQ8SWQ+IHtcbiAgICByZXR1cm4gbmV3IFNldCh0aGlzLnRvSWRBcnJheSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBzZXQgY29udGFpbmluZyBhbGwgdGhlICh1bmlxdWUpIGl0ZW1zIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2V0IG9mIGFsbCBpdGVtcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvSXRlbVNldCgpOiBTZXQ8SXRlbT4ge1xuICAgIHJldHVybiBuZXcgU2V0KHRoaXMudG9JdGVtQXJyYXkoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FjaGUgdGhlIGl0ZW1zIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgbWV0aG9kIGFsbG93cyBmb3IgaXRlbXMgdG8gYmUgZmV0Y2hlZCBpbW1lZGlhdGVsbHkgYW5kIHVzZWQgKHBvc3NpYmx5IG11bHRpcGxlIHRpbWVzKSBsYXRlci5cbiAgICogSXQgY2FuIGFsc28gYmUgdXNlZCB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBhcyB7QGxpbmsgRGF0YVN0cmVhbX0gd291bGQgb3RoZXJ3aXNlIHJlZXZhbHVhdGUgZXZlcnl0aGluZyB1cG9uIGVhY2ggaXRlcmF0aW9uLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogY29uc3QgZHMgPSBuZXcgRGF0YVNldChb4oCmXSlcbiAgICpcbiAgICogY29uc3QgY2FjaGVkU3RyZWFtID0gZHMuc3RyZWFtKClcbiAgICogICAuZmlsdGVyKOKApilcbiAgICogICAuc29ydCjigKYpXG4gICAqICAgLm1hcCjigKYpXG4gICAqICAgLmNhY2hlZCjigKYpIC8vIERhdGEgYXJlIGZldGNoZWQsIHByb2Nlc3NlZCBhbmQgY2FjaGVkIGhlcmUuXG4gICAqXG4gICAqIGRzLmNsZWFyKClcbiAgICogY2hhY2hlZFN0cmVhbSAvLyBTdGlsbCBoYXMgYWxsIHRoZSBpdGVtcy5cbiAgICogYGBgXG4gICAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBEYXRhU3RyZWFtfSB3aXRoIGNhY2hlZCBpdGVtcyAoZGV0YWNoZWQgZnJvbSB0aGUgb3JpZ2luYWwge0BsaW5rIERhdGFTZXR9KS5cbiAgICovXG4gIHB1YmxpYyBjYWNoZSgpOiBEYXRhU3RyZWFtPEl0ZW0+IHtcbiAgICByZXR1cm4gbmV3IERhdGFTdHJlYW0oWy4uLnRoaXMuX3BhaXJzXSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkaXN0aW5jdCB2YWx1ZXMgb2YgZ2l2ZW4gcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IHBpY2tzIGFuZCBwb3NzaWJseSBjb252ZXJ0cyB0aGUgcHJvcGVydHkuXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBkaXN0aW5jdCB2YWx1ZS5cbiAgICogQHJldHVybnMgQSBzZXQgb2YgYWxsIGRpc3RpbmN0IHByb3BlcnRpZXMuXG4gICAqL1xuICBwdWJsaWMgZGlzdGluY3Q8VD4oY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IFQpOiBTZXQ8VD4ge1xuICAgIGNvbnN0IHNldCA9IG5ldyBTZXQ8VD4oKTtcblxuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgc2V0LmFkZChjYWxsYmFjayhpdGVtLCBpZCkpO1xuICAgIH1cblxuICAgIHJldHVybiBzZXQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIHRoZSBpdGVtcyBvZiB0aGUgc3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBkZWNpZGVzIHdoZXRoZXIgYW4gaXRlbSB3aWxsIGJlIGluY2x1ZGVkLlxuICAgKiBAcmV0dXJucyBBIG5ldyBkYXRhIHN0cmVhbSB3aXRoIHRoZSBmaWx0ZXJlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBmaWx0ZXIoY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IGJvb2xlYW4pOiBEYXRhU3RyZWFtPEl0ZW0+IHtcbiAgICBjb25zdCBwYWlycyA9IHRoaXMuX3BhaXJzO1xuICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbTxJdGVtPih7XG4gICAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiB7XG4gICAgICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiBwYWlycykge1xuICAgICAgICAgIGlmIChjYWxsYmFjayhpdGVtLCBpZCkpIHtcbiAgICAgICAgICAgIHlpZWxkIFtpZCwgaXRlbV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBpdGVtIG9mIHRoZSBzdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCBmb3IgZWFjaCBpdGVtLlxuICAgKi9cbiAgcHVibGljIGZvckVhY2goY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFwIHRoZSBpdGVtcyBpbnRvIGEgZGlmZmVyZW50IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGNvbnZlcnNpb24uXG4gICAqIEB0eXBlUGFyYW0gTWFwcGVkIC0gVGhlIHR5cGUgb2YgdGhlIGl0ZW0gYWZ0ZXIgbWFwcGluZy5cbiAgICogQHJldHVybnMgQSBuZXcgZGF0YSBzdHJlYW0gd2l0aCB0aGUgbWFwcGVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIG1hcDxNYXBwZWQ+KFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBNYXBwZWRcbiAgKTogRGF0YVN0cmVhbTxNYXBwZWQ+IHtcbiAgICBjb25zdCBwYWlycyA9IHRoaXMuX3BhaXJzO1xuICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbTxNYXBwZWQ+KHtcbiAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgTWFwcGVkXT4ge1xuICAgICAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgcGFpcnMpIHtcbiAgICAgICAgICB5aWVsZCBbaWQsIGNhbGxiYWNrKGl0ZW0sIGlkKV07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpdGVtIHdpdGggdGhlIG1heGltdW0gdmFsdWUgb2YgZ2l2ZW4gcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IHBpY2tzIGFuZCBwb3NzaWJseSBjb252ZXJ0cyB0aGUgcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIHdpdGggdGhlIG1heGltdW0gaWYgZm91bmQgb3RoZXJ3aXNlIG51bGwuXG4gICAqL1xuICBwdWJsaWMgbWF4KGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBudW1iZXIpOiBJdGVtIHwgbnVsbCB7XG4gICAgY29uc3QgaXRlciA9IHRoaXMuX3BhaXJzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBsZXQgY3VyciA9IGl0ZXIubmV4dCgpO1xuICAgIGlmIChjdXJyLmRvbmUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBtYXhJdGVtOiBJdGVtID0gY3Vyci52YWx1ZVsxXTtcbiAgICBsZXQgbWF4VmFsdWU6IG51bWJlciA9IGNhbGxiYWNrKGN1cnIudmFsdWVbMV0sIGN1cnIudmFsdWVbMF0pO1xuICAgIHdoaWxlICghKGN1cnIgPSBpdGVyLm5leHQoKSkuZG9uZSkge1xuICAgICAgY29uc3QgW2lkLCBpdGVtXSA9IGN1cnIudmFsdWU7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICAgIGlmICh2YWx1ZSA+IG1heFZhbHVlKSB7XG4gICAgICAgIG1heFZhbHVlID0gdmFsdWU7XG4gICAgICAgIG1heEl0ZW0gPSBpdGVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXhJdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaXRlbSB3aXRoIHRoZSBtaW5pbXVtIHZhbHVlIG9mIGdpdmVuIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBwaWNrcyBhbmQgcG9zc2libHkgY29udmVydHMgdGhlIHByb3BlcnR5LlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSB3aXRoIHRoZSBtaW5pbXVtIGlmIGZvdW5kIG90aGVyd2lzZSBudWxsLlxuICAgKi9cbiAgcHVibGljIG1pbihjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gbnVtYmVyKTogSXRlbSB8IG51bGwge1xuICAgIGNvbnN0IGl0ZXIgPSB0aGlzLl9wYWlyc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgbGV0IGN1cnIgPSBpdGVyLm5leHQoKTtcbiAgICBpZiAoY3Vyci5kb25lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgbWluSXRlbTogSXRlbSA9IGN1cnIudmFsdWVbMV07XG4gICAgbGV0IG1pblZhbHVlOiBudW1iZXIgPSBjYWxsYmFjayhjdXJyLnZhbHVlWzFdLCBjdXJyLnZhbHVlWzBdKTtcbiAgICB3aGlsZSAoIShjdXJyID0gaXRlci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGNvbnN0IFtpZCwgaXRlbV0gPSBjdXJyLnZhbHVlO1xuICAgICAgY29uc3QgdmFsdWUgPSBjYWxsYmFjayhpdGVtLCBpZCk7XG4gICAgICBpZiAodmFsdWUgPCBtaW5WYWx1ZSkge1xuICAgICAgICBtaW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICBtaW5JdGVtID0gaXRlbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWluSXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWR1Y2UgdGhlIGl0ZW1zIGludG8gYSBzaW5nbGUgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIHJlZHVjdGlvbi5cbiAgICogQHBhcmFtIGFjY3VtdWxhdG9yIC0gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGFjY3VtdWxhdG9yLlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoZSByZWR1Y2VkIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIHJlZHVjZTxUPihcbiAgICBjYWxsYmFjazogKGFjY3VtdWxhdG9yOiBULCBpdGVtOiBJdGVtLCBpZDogSWQpID0+IFQsXG4gICAgYWNjdW11bGF0b3I6IFRcbiAgKTogVCB7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICBhY2N1bXVsYXRvciA9IGNhbGxiYWNrKGFjY3VtdWxhdG9yLCBpdGVtLCBpZCk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0IHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gSXRlbSBjb21wYXJhdG9yLlxuICAgKiBAcmV0dXJucyBBIG5ldyBzdHJlYW0gd2l0aCBzb3J0ZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgc29ydChcbiAgICBjYWxsYmFjazogKGl0ZW1BOiBJdGVtLCBpdGVtQjogSXRlbSwgaWRBOiBJZCwgaWRCOiBJZCkgPT4gbnVtYmVyXG4gICk6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbSh7XG4gICAgICBbU3ltYm9sLml0ZXJhdG9yXTogKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBJdGVtXT4gPT5cbiAgICAgICAgWy4uLnRoaXMuX3BhaXJzXVxuICAgICAgICAgIC5zb3J0KChbaWRBLCBpdGVtQV0sIFtpZEIsIGl0ZW1CXSk6IG51bWJlciA9PlxuICAgICAgICAgICAgY2FsbGJhY2soaXRlbUEsIGl0ZW1CLCBpZEEsIGlkQilcbiAgICAgICAgICApXG4gICAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl0oKSxcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IHY0IGFzIHV1aWQ0IH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IHB1cmVEZWVwT2JqZWN0QXNzaWduIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG5pbXBvcnQge1xuICBEYXRhSW50ZXJmYWNlLFxuICBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheSxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3QsXG4gIERhdGFJbnRlcmZhY2VNYXBPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlT3JkZXIsXG4gIERlZXBQYXJ0aWFsLFxuICBFdmVudFBheWxvYWRzLFxuICBGdWxsSXRlbSxcbiAgSWQsXG4gIE9wdElkLFxuICBQYXJ0SXRlbSxcbiAgVXBkYXRlSXRlbSxcbiAgaXNJZCxcbn0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcblxuaW1wb3J0IHsgUXVldWUsIFF1ZXVlT3B0aW9ucyB9IGZyb20gXCIuL3F1ZXVlXCI7XG5pbXBvcnQgeyBEYXRhU2V0UGFydCB9IGZyb20gXCIuL2RhdGEtc2V0LXBhcnRcIjtcbmltcG9ydCB7IERhdGFTdHJlYW0gfSBmcm9tIFwiLi9kYXRhLXN0cmVhbVwiO1xuXG4vKipcbiAqIEluaXRpYWwgRGF0YVNldCBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAqXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3AgZXh0ZW5kcyBzdHJpbmc+IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCBjb250YWluaW5nIHRoZSBpZCBvZiB0aGUgaXRlbXMuIFdoZW4gZGF0YSBpcyBmZXRjaGVkIGZyb20gYSBzZXJ2ZXIgd2hpY2ggdXNlcyBzb21lIHNwZWNpZmljIGZpZWxkIHRvIGlkZW50aWZ5IGl0ZW1zLCB0aGlzIGZpZWxkIG5hbWUgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgRGF0YVNldCB1c2luZyB0aGUgb3B0aW9uIGBmaWVsZElkYC4gRm9yIGV4YW1wbGUgW0NvdWNoREJdKGh0dHA6Ly9jb3VjaGRiLmFwYWNoZS5vcmcvKSB1c2VzIHRoZSBmaWVsZCBgJ19pZCdgIHRvIGlkZW50aWZ5IGRvY3VtZW50cy5cbiAgICovXG4gIGZpZWxkSWQ/OiBJZFByb3A7XG4gIC8qKlxuICAgKiBRdWV1ZSBkYXRhIGNoYW5nZXMgKCdhZGQnLCAndXBkYXRlJywgJ3JlbW92ZScpIGFuZCBmbHVzaCB0aGVtIGF0IG9uY2UuIFRoZSBxdWV1ZSBjYW4gYmUgZmx1c2hlZCBtYW51YWxseSBieSBjYWxsaW5nIGBEYXRhU2V0LmZsdXNoKClgLCBvciBjYW4gYmUgZmx1c2hlZCBhZnRlciBhIGNvbmZpZ3VyZWQgZGVsYXkgb3IgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcy5cbiAgICpcbiAgICogV2hlbiBxdWV1ZSBpcyB0cnVlLCBhIHF1ZXVlIGlzIGNyZWF0ZWQgd2l0aCBkZWZhdWx0IG9wdGlvbnMuIE9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBieSBwcm92aWRpbmcgYW4gb2JqZWN0LlxuICAgKi9cbiAgcXVldWU/OiBRdWV1ZU9wdGlvbnMgfCBmYWxzZTtcbn1cbi8qKiBEYXRhU2V0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBRdWV1ZSBjb25maWd1cmF0aW9uIG9iamVjdCBvciBmYWxzZSBpZiBubyBxdWV1ZSBzaG91bGQgYmUgdXNlZC5cbiAgICpcbiAgICogLSBJZiBmYWxzZSBhbmQgdGhlcmUgd2FzIGEgcXVldWUgYmVmb3JlIGl0IHdpbGwgYmUgZmx1c2hlZCBhbmQgdGhlbiByZW1vdmVkLlxuICAgKiAtIElmIHtAbGluayBRdWV1ZU9wdGlvbnN9IHRoZSBleGlzdGluZyBxdWV1ZSB3aWxsIGJlIHJlY29uZmlndXJlZCBvciBhIG5ldyBxdWV1ZSB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBxdWV1ZT86IFF1ZXVlIHwgUXVldWVPcHRpb25zIHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGFuIGlkIHRvIGdpdmVuIGl0ZW0gaWYgaXQgZG9lc24ndCBoYXZlIG9uZSBhbHJlYWR5LlxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgaXRlbSB3aWxsIGJlIG1vZGlmaWVkLlxuICogQHBhcmFtIGl0ZW0gLSBUaGUgaXRlbSB0aGF0IHdpbGwgaGF2ZSBhbiBpZCBhZnRlciBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSBpZFByb3AgLSBUaGUga2V5IG9mIHRoZSBpZCBwcm9wZXJ0eS5cbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICogQHJldHVybnMgdHJ1ZVxuICovXG5mdW5jdGlvbiBlbnN1cmVGdWxsSXRlbTxJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPiwgSWRQcm9wIGV4dGVuZHMgc3RyaW5nPihcbiAgaXRlbTogSXRlbSxcbiAgaWRQcm9wOiBJZFByb3Bcbik6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4ge1xuICBpZiAoaXRlbVtpZFByb3BdID09IG51bGwpIHtcbiAgICAvLyBnZW5lcmF0ZSBhbiBpZFxuICAgIGl0ZW1baWRQcm9wXSA9IHV1aWQ0KCkgYXMgYW55O1xuICB9XG5cbiAgcmV0dXJuIGl0ZW0gYXMgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbn1cblxuLyoqXG4gKiAjIERhdGFTZXRcbiAqXG4gKiBWaXMuanMgY29tZXMgd2l0aCBhIGZsZXhpYmxlIERhdGFTZXQsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGhvbGQgYW5kXG4gKiBtYW5pcHVsYXRlIHVuc3RydWN0dXJlZCBkYXRhIGFuZCBsaXN0ZW4gZm9yIGNoYW5nZXMgaW4gdGhlIGRhdGEuIFRoZSBEYXRhU2V0XG4gKiBpcyBrZXkvdmFsdWUgYmFzZWQuIERhdGEgaXRlbXMgY2FuIGJlIGFkZGVkLCB1cGRhdGVkIGFuZCByZW1vdmVkIGZyb20gdGhlXG4gKiBEYXRhU2V0LCBhbmQgb25lIGNhbiBzdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiB0aGUgRGF0YVNldC4gVGhlIGRhdGEgaW4gdGhlXG4gKiBEYXRhU2V0IGNhbiBiZSBmaWx0ZXJlZCBhbmQgb3JkZXJlZC4gRGF0YSBjYW4gYmUgbm9ybWFsaXplZCB3aGVuIGFwcGVuZGluZyBpdFxuICogdG8gdGhlIERhdGFTZXQgYXMgd2VsbC5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byB1c2UgYSBEYXRhU2V0LlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAqIHZhciBvcHRpb25zID0ge307XG4gKiB2YXIgZGF0YSA9IG5ldyB2aXMuRGF0YVNldChvcHRpb25zKTtcbiAqXG4gKiAvLyBhZGQgaXRlbXNcbiAqIC8vIG5vdGUgdGhhdCB0aGUgZGF0YSBpdGVtcyBjYW4gY29udGFpbiBkaWZmZXJlbnQgcHJvcGVydGllcyBhbmQgZGF0YSBmb3JtYXRzXG4gKiBkYXRhLmFkZChbXG4gKiAgIHtpZDogMSwgdGV4dDogJ2l0ZW0gMScsIGRhdGU6IG5ldyBEYXRlKDIwMTMsIDYsIDIwKSwgZ3JvdXA6IDEsIGZpcnN0OiB0cnVlfSxcbiAqICAge2lkOiAyLCB0ZXh0OiAnaXRlbSAyJywgZGF0ZTogJzIwMTMtMDYtMjMnLCBncm91cDogMn0sXG4gKiAgIHtpZDogMywgdGV4dDogJ2l0ZW0gMycsIGRhdGU6ICcyMDEzLTA2LTI1JywgZ3JvdXA6IDJ9LFxuICogICB7aWQ6IDQsIHRleHQ6ICdpdGVtIDQnfVxuICogXSk7XG4gKlxuICogLy8gc3Vic2NyaWJlIHRvIGFueSBjaGFuZ2UgaW4gdGhlIERhdGFTZXRcbiAqIGRhdGEub24oJyonLCBmdW5jdGlvbiAoZXZlbnQsIHByb3BlcnRpZXMsIHNlbmRlcklkKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdldmVudCcsIGV2ZW50LCBwcm9wZXJ0aWVzKTtcbiAqIH0pO1xuICpcbiAqIC8vIHVwZGF0ZSBhbiBleGlzdGluZyBpdGVtXG4gKiBkYXRhLnVwZGF0ZSh7aWQ6IDIsIGdyb3VwOiAxfSk7XG4gKlxuICogLy8gcmVtb3ZlIGFuIGl0ZW1cbiAqIGRhdGEucmVtb3ZlKDQpO1xuICpcbiAqIC8vIGdldCBhbGwgaWRzXG4gKiB2YXIgaWRzID0gZGF0YS5nZXRJZHMoKTtcbiAqIGNvbnNvbGUubG9nKCdpZHMnLCBpZHMpO1xuICpcbiAqIC8vIGdldCBhIHNwZWNpZmljIGl0ZW1cbiAqIHZhciBpdGVtMSA9IGRhdGEuZ2V0KDEpO1xuICogY29uc29sZS5sb2coJ2l0ZW0xJywgaXRlbTEpO1xuICpcbiAqIC8vIHJldHJpZXZlIGEgZmlsdGVyZWQgc3Vic2V0IG9mIHRoZSBkYXRhXG4gKiB2YXIgaXRlbXMgPSBkYXRhLmdldCh7XG4gKiAgIGZpbHRlcjogZnVuY3Rpb24gKGl0ZW0pIHtcbiAqICAgICByZXR1cm4gaXRlbS5ncm91cCA9PSAxO1xuICogICB9XG4gKiB9KTtcbiAqIGNvbnNvbGUubG9nKCdmaWx0ZXJlZCBpdGVtcycsIGl0ZW1zKTtcbiAqIGBgYFxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVNldDxcbiAgICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbiAgPlxuICBleHRlbmRzIERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5cbiAgaW1wbGVtZW50cyBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD5cbntcbiAgLyoqIEZsdXNoIGFsbCBxdWV1ZWQgY2FsbHMuICovXG4gIHB1YmxpYyBmbHVzaD86ICgpID0+IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgbGVuZ3RoOiBudW1iZXI7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0IGlkUHJvcCgpOiBJZFByb3Age1xuICAgIHJldHVybiB0aGlzLl9pZFByb3A7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YTogTWFwPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaWRQcm9wOiBJZFByb3A7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZTx0aGlzPiB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIERhdGFTZXQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD4pO1xuICAvKipcbiAgICogQHBhcmFtIGRhdGEgLSBBbiBpbml0aWFsIHNldCBvZiBpdGVtcyBmb3IgdGhlIG5ldyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBEYXRhU2V0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoZGF0YTogSXRlbVtdLCBvcHRpb25zPzogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD4pO1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IERhdGFTZXQuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gSW5pdGlhbCBkYXRhIG9yIG9wdGlvbnMuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyAodHlwZSBlcnJvciBpZiBkYXRhIGlzIGFsc28gb3B0aW9ucykuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgZGF0YT86IEl0ZW1bXSB8IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+LFxuICAgIG9wdGlvbnM/OiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPlxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgLy8gY29ycmVjdGx5IHJlYWQgb3B0aW9uYWwgYXJndW1lbnRzXG4gICAgaWYgKGRhdGEgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIG9wdGlvbnMgPSBkYXRhO1xuICAgICAgZGF0YSA9IFtdO1xuICAgIH1cblxuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRoaXMuX2RhdGEgPSBuZXcgTWFwKCk7IC8vIG1hcCB3aXRoIGRhdGEgaW5kZXhlZCBieSBpZFxuICAgIHRoaXMubGVuZ3RoID0gMDsgLy8gbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBEYXRhU2V0XG4gICAgdGhpcy5faWRQcm9wID0gdGhpcy5fb3B0aW9ucy5maWVsZElkIHx8IChcImlkXCIgYXMgSWRQcm9wKTsgLy8gbmFtZSBvZiB0aGUgZmllbGQgY29udGFpbmluZyBpZFxuXG4gICAgLy8gYWRkIGluaXRpYWwgZGF0YSB3aGVuIHByb3ZpZGVkXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYWRkKGRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbmV3IG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG5ldyBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIHNldE9wdGlvbnMob3B0aW9ucz86IERhdGFTZXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5xdWV1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy5xdWV1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gZGVsZXRlIHF1ZXVlIGlmIGxvYWRlZFxuICAgICAgICBpZiAodGhpcy5fcXVldWUpIHtcbiAgICAgICAgICB0aGlzLl9xdWV1ZS5kZXN0cm95KCk7XG4gICAgICAgICAgdGhpcy5fcXVldWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgcXVldWUgYW5kIHVwZGF0ZSBpdHMgb3B0aW9uc1xuICAgICAgICBpZiAoIXRoaXMuX3F1ZXVlKSB7XG4gICAgICAgICAgdGhpcy5fcXVldWUgPSBRdWV1ZS5leHRlbmQodGhpcywge1xuICAgICAgICAgICAgcmVwbGFjZTogW1wiYWRkXCIsIFwidXBkYXRlXCIsIFwicmVtb3ZlXCJdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucXVldWUgJiYgdHlwZW9mIG9wdGlvbnMucXVldWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICB0aGlzLl9xdWV1ZS5zZXRPcHRpb25zKG9wdGlvbnMucXVldWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGRhdGEgaXRlbSBvciBhbiBhcnJheSB3aXRoIGl0ZW1zLlxuICAgKlxuICAgKiBBZnRlciB0aGUgaXRlbXMgYXJlIGFkZGVkIHRvIHRoZSBEYXRhU2V0LCB0aGUgRGF0YVNldCB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYGFkZGAuIFdoZW4gYSBgc2VuZGVySWRgIGlzIHByb3ZpZGVkLCB0aGlzIGlkIHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIHRyaWdnZXJlZCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gICAqIGNvbnN0IGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQoKVxuICAgKlxuICAgKiAvLyBhZGQgaXRlbXNcbiAgICogY29uc3QgaWRzID0gZGF0YS5hZGQoW1xuICAgKiAgIHsgaWQ6IDEsIHRleHQ6ICdpdGVtIDEnIH0sXG4gICAqICAgeyBpZDogMiwgdGV4dDogJ2l0ZW0gMicgfSxcbiAgICogICB7IHRleHQ6ICdpdGVtIHdpdGhvdXQgYW4gaWQnIH1cbiAgICogXSlcbiAgICpcbiAgICogY29uc29sZS5sb2coaWRzKSAvLyBbMSwgMiwgJzxVVUlEdjQ+J11cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gSXRlbXMgdG8gYmUgYWRkZWQgKGlkcyB3aWxsIGJlIGdlbmVyYXRlZCBpZiBtaXNzaW5nKS5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gU2VuZGVyIGlkLlxuICAgKiBAcmV0dXJucyBhZGRlZElkcyAtIEFycmF5IHdpdGggdGhlIGlkcyAoZ2VuZXJhdGVkIGlmIG5vdCBwcmVzZW50KSBvZiB0aGUgYWRkZWQgaXRlbXMuXG4gICAqIEB0aHJvd3MgV2hlbiBhbiBpdGVtIHdpdGggdGhlIHNhbWUgaWQgYXMgYW55IG9mIHRoZSBhZGRlZCBpdGVtcyBhbHJlYWR5IGV4aXN0cy5cbiAgICovXG4gIHB1YmxpYyBhZGQoZGF0YTogSXRlbSB8IEl0ZW1bXSwgc2VuZGVySWQ/OiBJZCB8IG51bGwpOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHtcbiAgICBjb25zdCBhZGRlZElkczogSWRbXSA9IFtdO1xuICAgIGxldCBpZDogSWQ7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgLy8gQXJyYXlcbiAgICAgIGNvbnN0IGlkc1RvQWRkOiBJZFtdID0gZGF0YS5tYXAoKGQpID0+IGRbdGhpcy5faWRQcm9wXSBhcyBJZCk7XG4gICAgICBpZiAoaWRzVG9BZGQuc29tZSgoaWQpID0+IHRoaXMuX2RhdGEuaGFzKGlkKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBkdXBsaWNhdGUgaWQgd2FzIGZvdW5kIGluIHRoZSBwYXJhbWV0ZXIgYXJyYXkuXCIpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWQgPSB0aGlzLl9hZGRJdGVtKGRhdGFbaV0pO1xuICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIC8vIFNpbmdsZSBpdGVtXG4gICAgICBpZCA9IHRoaXMuX2FkZEl0ZW0oZGF0YSk7XG4gICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBkYXRhVHlwZVwiKTtcbiAgICB9XG5cbiAgICBpZiAoYWRkZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGFkZGVkSWRzIH0sIHNlbmRlcklkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkZWRJZHM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGV4aXN0aW5nIGl0ZW1zLiBXaGVuIGFuIGl0ZW0gZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIHByb3ZpZGVkIHByb3BlcnRpZXMgd2lsbCBiZSBtZXJnZWQgaW4gdGhlIGV4aXN0aW5nIGl0ZW0uIFdoZW4gYW4gaXRlbSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBBZnRlciB0aGUgaXRlbXMgYXJlIHVwZGF0ZWQsIHRoZSBEYXRhU2V0IHdpbGwgdHJpZ2dlciBhbiBldmVudCBgYWRkYCBmb3IgdGhlIGFkZGVkIGl0ZW1zLCBhbmQgYW4gZXZlbnQgYHVwZGF0ZWAuIFdoZW4gYSBgc2VuZGVySWRgIGlzIHByb3ZpZGVkLCB0aGlzIGlkIHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIHRyaWdnZXJlZCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gICAqIGNvbnN0IGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQoW1xuICAgKiAgIHsgaWQ6IDEsIHRleHQ6ICdpdGVtIDEnIH0sXG4gICAqICAgeyBpZDogMiwgdGV4dDogJ2l0ZW0gMicgfSxcbiAgICogICB7IGlkOiAzLCB0ZXh0OiAnaXRlbSAzJyB9XG4gICAqIF0pXG4gICAqXG4gICAqIC8vIHVwZGF0ZSBpdGVtc1xuICAgKiBjb25zdCBpZHMgPSBkYXRhLnVwZGF0ZShbXG4gICAqICAgeyBpZDogMiwgdGV4dDogJ2l0ZW0gMiAodXBkYXRlZCknIH0sXG4gICAqICAgeyBpZDogNCwgdGV4dDogJ2l0ZW0gNCAobmV3KScgfVxuICAgKiBdKVxuICAgKlxuICAgKiBjb25zb2xlLmxvZyhpZHMpIC8vIFsyLCA0XVxuICAgKiBgYGBcbiAgICpcbiAgICogIyMgV2FybmluZyBmb3IgVHlwZVNjcmlwdCB1c2Vyc1xuICAgKiBUaGlzIG1ldGhvZCBtYXkgaW50cm9kdWNlIHBhcnRpYWwgaXRlbXMgaW50byB0aGUgZGF0YSBzZXQuIFVzZSBhZGQgb3IgdXBkYXRlT25seSBpbnN0ZWFkIGZvciBiZXR0ZXIgdHlwZSBzYWZldHkuXG4gICAqIEBwYXJhbSBkYXRhIC0gSXRlbXMgdG8gYmUgdXBkYXRlZCAoaWYgdGhlIGlkIGlzIGFscmVhZHkgcHJlc2VudCkgb3IgYWRkZWQgKGlmIHRoZSBpZCBpcyBtaXNzaW5nKS5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gU2VuZGVyIGlkLlxuICAgKiBAcmV0dXJucyB1cGRhdGVkSWRzIC0gVGhlIGlkcyBvZiB0aGUgYWRkZWQgKHRoZXNlIG1heSBiZSBuZXdseSBnZW5lcmF0ZWQgaWYgdGhlcmUgd2FzIG5vIGlkIGluIHRoZSBpdGVtIGZyb20gdGhlIGRhdGEpIG9yIHVwZGF0ZWQgaXRlbXMuXG4gICAqIEB0aHJvd3MgV2hlbiB0aGUgc3VwcGxpZWQgZGF0YSBpcyBuZWl0aGVyIGFuIGl0ZW0gbm9yIGFuIGFycmF5IG9mIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZShcbiAgICBkYXRhOiBEZWVwUGFydGlhbDxJdGVtPiB8IERlZXBQYXJ0aWFsPEl0ZW0+W10sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogSWRbXSB7XG4gICAgY29uc3QgYWRkZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCB1cGRhdGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3Qgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG4gICAgY29uc3QgdXBkYXRlZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGNvbnN0IGlkUHJvcCA9IHRoaXMuX2lkUHJvcDtcblxuICAgIGNvbnN0IGFkZE9yVXBkYXRlID0gKGl0ZW06IERlZXBQYXJ0aWFsPEl0ZW0+KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBvcmlnSWQ6IE9wdElkID0gaXRlbVtpZFByb3BdO1xuICAgICAgaWYgKG9yaWdJZCAhPSBudWxsICYmIHRoaXMuX2RhdGEuaGFzKG9yaWdJZCkpIHtcbiAgICAgICAgY29uc3QgZnVsbEl0ZW0gPSBpdGVtIGFzIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47IC8vIGl0IGhhcyBhbiBpZCwgdGhlcmVmb3JlIGl0IGlzIGEgZnVsbGl0ZW1cbiAgICAgICAgY29uc3Qgb2xkSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RhdGEuZ2V0KG9yaWdJZCkpO1xuICAgICAgICAvLyB1cGRhdGUgaXRlbVxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3VwZGF0ZUl0ZW0oZnVsbEl0ZW0pO1xuICAgICAgICB1cGRhdGVkSWRzLnB1c2goaWQpO1xuICAgICAgICB1cGRhdGVkRGF0YS5wdXNoKGZ1bGxJdGVtKTtcbiAgICAgICAgb2xkRGF0YS5wdXNoKG9sZEl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYWRkIG5ldyBpdGVtXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5fYWRkSXRlbShpdGVtIGFzIGFueSk7XG4gICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgLy8gQXJyYXlcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBkYXRhLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmIChkYXRhW2ldICYmIHR5cGVvZiBkYXRhW2ldID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgYWRkT3JVcGRhdGUoZGF0YVtpXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJJZ25vcmluZyBpbnB1dCBpdGVtLCB3aGljaCBpcyBub3QgYW4gb2JqZWN0IGF0IGluZGV4IFwiICsgaVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIC8vIFNpbmdsZSBpdGVtXG4gICAgICBhZGRPclVwZGF0ZShkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBkYXRhVHlwZVwiKTtcbiAgICB9XG5cbiAgICBpZiAoYWRkZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGFkZGVkSWRzIH0sIHNlbmRlcklkKTtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZWRJZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcm9wcyA9IHsgaXRlbXM6IHVwZGF0ZWRJZHMsIG9sZERhdGE6IG9sZERhdGEsIGRhdGE6IHVwZGF0ZWREYXRhIH07XG4gICAgICAvLyBUT0RPOiByZW1vdmUgZGVwcmVjYXRlZCBwcm9wZXJ0eSAnZGF0YScgc29tZSBkYXlcbiAgICAgIC8vT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAnZGF0YScsIHtcbiAgICAgIC8vICAnZ2V0JzogKGZ1bmN0aW9uKCkge1xuICAgICAgLy8gICAgY29uc29sZS53YXJuKCdQcm9wZXJ0eSBkYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBEYXRhU2V0LmdldChpZHMpIHRvIHJldHJpZXZlIHRoZSBuZXcgZGF0YSwgdXNlIHRoZSBvbGREYXRhIHByb3BlcnR5IG9uIHRoaXMgb2JqZWN0IHRvIGdldCB0aGUgb2xkIGRhdGEnKTtcbiAgICAgIC8vICAgIHJldHVybiB1cGRhdGVkRGF0YTtcbiAgICAgIC8vICB9KS5iaW5kKHRoaXMpXG4gICAgICAvL30pO1xuICAgICAgdGhpcy5fdHJpZ2dlcihcInVwZGF0ZVwiLCBwcm9wcywgc2VuZGVySWQpO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRlZElkcy5jb25jYXQodXBkYXRlZElkcyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGV4aXN0aW5nIGl0ZW1zLiBXaGVuIGFuIGl0ZW0gZG9lcyBub3QgZXhpc3QsIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgcHJvdmlkZWQgcHJvcGVydGllcyB3aWxsIGJlIGRlZXBseSBtZXJnZWQgaW50byB0aGUgZXhpc3RpbmcgaXRlbS5cbiAgICogV2hlbiBhbiBpdGVtIGRvZXMgbm90IGV4aXN0IChpZCBub3QgcHJlc2VudCBpbiB0aGUgZGF0YSBzZXQgb3IgYWJzZW50KSwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24gYW5kIG5vdGhpbmcgd2lsbCBiZSBjaGFuZ2VkLlxuICAgKlxuICAgKiBBZnRlciB0aGUgaXRlbXMgYXJlIHVwZGF0ZWQsIHRoZSBEYXRhU2V0IHdpbGwgdHJpZ2dlciBhbiBldmVudCBgdXBkYXRlYC5cbiAgICogV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAgICogY29uc3QgZGF0YSA9IG5ldyB2aXMuRGF0YVNldChbXG4gICAqICAgeyBpZDogMSwgdGV4dDogJ2l0ZW0gMScgfSxcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyJyB9LFxuICAgKiAgIHsgaWQ6IDMsIHRleHQ6ICdpdGVtIDMnIH0sXG4gICAqIF0pXG4gICAqXG4gICAqIC8vIHVwZGF0ZSBpdGVtc1xuICAgKiBjb25zdCBpZHMgPSBkYXRhLnVwZGF0ZShbXG4gICAqICAgeyBpZDogMiwgdGV4dDogJ2l0ZW0gMiAodXBkYXRlZCknIH0sIC8vIHdvcmtzXG4gICAqICAgLy8geyBpZDogNCwgdGV4dDogJ2l0ZW0gNCAobmV3KScgfSwgLy8gd291bGQgdGhyb3dcbiAgICogICAvLyB7IHRleHQ6ICdpdGVtIDQgKG5ldyknIH0sIC8vIHdvdWxkIGFsc28gdGhyb3dcbiAgICogXSlcbiAgICpcbiAgICogY29uc29sZS5sb2coaWRzKSAvLyBbMl1cbiAgICogYGBgXG4gICAqIEBwYXJhbSBkYXRhIC0gVXBkYXRlcyAodGhlIGlkIGFuZCBvcHRpb25hbGx5IG90aGVyIHByb3BzKSB0byB0aGUgaXRlbXMgaW4gdGhpcyBkYXRhIHNldC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gU2VuZGVyIGlkLlxuICAgKiBAcmV0dXJucyB1cGRhdGVkSWRzIC0gVGhlIGlkcyBvZiB0aGUgdXBkYXRlZCBpdGVtcy5cbiAgICogQHRocm93cyBXaGVuIHRoZSBzdXBwbGllZCBkYXRhIGlzIG5laXRoZXIgYW4gaXRlbSBub3IgYW4gYXJyYXkgb2YgaXRlbXMsIHdoZW4gdGhlIGlkcyBhcmUgbWlzc2luZy5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVPbmx5KFxuICAgIGRhdGE6IFVwZGF0ZUl0ZW08SXRlbSwgSWRQcm9wPiB8IFVwZGF0ZUl0ZW08SXRlbSwgSWRQcm9wPltdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IElkW10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVFdmVudERhdGEgPSBkYXRhXG4gICAgICAubWFwKFxuICAgICAgICAoXG4gICAgICAgICAgdXBkYXRlXG4gICAgICAgICk6IHtcbiAgICAgICAgICBvbGREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAgICAgICAgIHVwZGF0ZTogVXBkYXRlSXRlbTxJdGVtLCBJZFByb3A+O1xuICAgICAgICB9ID0+IHtcbiAgICAgICAgICBjb25zdCBvbGREYXRhID0gdGhpcy5fZGF0YS5nZXQodXBkYXRlW3RoaXMuX2lkUHJvcF0pO1xuICAgICAgICAgIGlmIChvbGREYXRhID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVwZGF0aW5nIG5vbi1leGlzdGVudCBpdGVtcyBpcyBub3QgYWxsb3dlZC5cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IG9sZERhdGEsIHVwZGF0ZSB9O1xuICAgICAgICB9XG4gICAgICApXG4gICAgICAubWFwKFxuICAgICAgICAoe1xuICAgICAgICAgIG9sZERhdGEsXG4gICAgICAgICAgdXBkYXRlLFxuICAgICAgICB9KToge1xuICAgICAgICAgIGlkOiBJZDtcbiAgICAgICAgICBvbGREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAgICAgICAgIHVwZGF0ZWREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAgICAgICB9ID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IG9sZERhdGFbdGhpcy5faWRQcm9wXTtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkRGF0YSA9IHB1cmVEZWVwT2JqZWN0QXNzaWduKG9sZERhdGEsIHVwZGF0ZSk7XG5cbiAgICAgICAgICB0aGlzLl9kYXRhLnNldChpZCwgdXBkYXRlZERhdGEpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgb2xkRGF0YTogb2xkRGF0YSxcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICBpZiAodXBkYXRlRXZlbnREYXRhLmxlbmd0aCkge1xuICAgICAgY29uc3QgcHJvcHM6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXSA9IHtcbiAgICAgICAgaXRlbXM6IHVwZGF0ZUV2ZW50RGF0YS5tYXAoKHZhbHVlKTogSWQgPT4gdmFsdWUuaWQpLFxuICAgICAgICBvbGREYXRhOiB1cGRhdGVFdmVudERhdGEubWFwKFxuICAgICAgICAgICh2YWx1ZSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gPT4gdmFsdWUub2xkRGF0YVxuICAgICAgICApLFxuICAgICAgICBkYXRhOiB1cGRhdGVFdmVudERhdGEubWFwKFxuICAgICAgICAgICh2YWx1ZSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gPT4gdmFsdWUudXBkYXRlZERhdGFcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgICAvLyBUT0RPOiByZW1vdmUgZGVwcmVjYXRlZCBwcm9wZXJ0eSAnZGF0YScgc29tZSBkYXlcbiAgICAgIC8vT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAnZGF0YScsIHtcbiAgICAgIC8vICAnZ2V0JzogKGZ1bmN0aW9uKCkge1xuICAgICAgLy8gICAgY29uc29sZS53YXJuKCdQcm9wZXJ0eSBkYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBEYXRhU2V0LmdldChpZHMpIHRvIHJldHJpZXZlIHRoZSBuZXcgZGF0YSwgdXNlIHRoZSBvbGREYXRhIHByb3BlcnR5IG9uIHRoaXMgb2JqZWN0IHRvIGdldCB0aGUgb2xkIGRhdGEnKTtcbiAgICAgIC8vICAgIHJldHVybiB1cGRhdGVkRGF0YTtcbiAgICAgIC8vICB9KS5iaW5kKHRoaXMpXG4gICAgICAvL30pO1xuICAgICAgdGhpcy5fdHJpZ2dlcihcInVwZGF0ZVwiLCBwcm9wcywgc2VuZGVySWQpO1xuXG4gICAgICByZXR1cm4gcHJvcHMuaXRlbXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCgpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChpZDogSWQpOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChpZHM6IElkW10pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkIHwgSWRbXSxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBmaXJzdD86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+IHwgSWQgfCBJZFtdLFxuICAgIHNlY29uZD86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6XG4gICAgfCBudWxsXG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+XG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W11cbiAgICB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4ge1xuICAgIC8vIEBUT0RPOiBXb3Vkbid0IGl0IGJlIGJldHRlciB0byBzcGxpdCB0aGlzIGludG8gbXVsdGlwbGUgbWV0aG9kcz9cblxuICAgIC8vIHBhcnNlIHRoZSBhcmd1bWVudHNcbiAgICBsZXQgaWQ6IElkIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBpZHM6IElkW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc0lkKGZpcnN0KSkge1xuICAgICAgLy8gZ2V0KGlkIFssIG9wdGlvbnNdKVxuICAgICAgaWQgPSBmaXJzdDtcbiAgICAgIG9wdGlvbnMgPSBzZWNvbmQ7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGZpcnN0KSkge1xuICAgICAgLy8gZ2V0KGlkcyBbLCBvcHRpb25zXSlcbiAgICAgIGlkcyA9IGZpcnN0O1xuICAgICAgb3B0aW9ucyA9IHNlY29uZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZ2V0KFssIG9wdGlvbnNdKVxuICAgICAgb3B0aW9ucyA9IGZpcnN0O1xuICAgIH1cblxuICAgIC8vIGRldGVybWluZSB0aGUgcmV0dXJuIHR5cGVcbiAgICBjb25zdCByZXR1cm5UeXBlID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5yZXR1cm5UeXBlID09PSBcIk9iamVjdFwiID8gXCJPYmplY3RcIiA6IFwiQXJyYXlcIjtcbiAgICAvLyBAVE9ETzogV1RGIGlzIHRoaXM/IE9yIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/XG4gICAgLy8gdmFyIHJldHVyblR5cGVcbiAgICAvLyBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJldHVyblR5cGUpIHtcbiAgICAvLyAgIHZhciBhbGxvd2VkVmFsdWVzID0gWydBcnJheScsICdPYmplY3QnXVxuICAgIC8vICAgcmV0dXJuVHlwZSA9XG4gICAgLy8gICAgIGFsbG93ZWRWYWx1ZXMuaW5kZXhPZihvcHRpb25zLnJldHVyblR5cGUpID09IC0xXG4gICAgLy8gICAgICAgPyAnQXJyYXknXG4gICAgLy8gICAgICAgOiBvcHRpb25zLnJldHVyblR5cGVcbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgcmV0dXJuVHlwZSA9ICdBcnJheSdcbiAgICAvLyB9XG5cbiAgICAvLyBidWlsZCBvcHRpb25zXG4gICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICBjb25zdCBpdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG4gICAgbGV0IGl0ZW06IHVuZGVmaW5lZCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gPSB1bmRlZmluZWQ7XG4gICAgbGV0IGl0ZW1JZHM6IHVuZGVmaW5lZCB8IElkW10gPSB1bmRlZmluZWQ7XG4gICAgbGV0IGl0ZW1JZDogdW5kZWZpbmVkIHwgSWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBjb252ZXJ0IGl0ZW1zXG4gICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgIC8vIHJldHVybiBhIHNpbmdsZSBpdGVtXG4gICAgICBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgICAgaWYgKGl0ZW0gJiYgZmlsdGVyICYmICFmaWx0ZXIoaXRlbSkpIHtcbiAgICAgICAgaXRlbSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlkcyAhPSBudWxsKSB7XG4gICAgICAvLyByZXR1cm4gYSBzdWJzZXQgb2YgaXRlbXNcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkc1tpXSk7XG4gICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGl0ZW0pKSkge1xuICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGFsbCBpdGVtc1xuICAgICAgaXRlbUlkcyA9IFsuLi50aGlzLl9kYXRhLmtleXMoKV07XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpdGVtSWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaXRlbUlkKTtcbiAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoaXRlbSkpKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9yZGVyIHRoZSByZXN1bHRzXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlciAmJiBpZCA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3NvcnQoaXRlbXMsIG9wdGlvbnMub3JkZXIpO1xuICAgIH1cblxuICAgIC8vIGZpbHRlciBmaWVsZHMgb2YgdGhlIGl0ZW1zXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5maWVsZHMpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IG9wdGlvbnMuZmllbGRzO1xuICAgICAgaWYgKGlkICE9IHVuZGVmaW5lZCAmJiBpdGVtICE9IG51bGwpIHtcbiAgICAgICAgaXRlbSA9IHRoaXMuX2ZpbHRlckZpZWxkcyhpdGVtLCBmaWVsZHMpIGFzIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpdGVtc1tpXSA9IHRoaXMuX2ZpbHRlckZpZWxkcyhpdGVtc1tpXSwgZmllbGRzKSBhcyBGdWxsSXRlbTxcbiAgICAgICAgICAgIEl0ZW0sXG4gICAgICAgICAgICBJZFByb3BcbiAgICAgICAgICA+O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIHRoZSByZXN1bHRzXG4gICAgaWYgKHJldHVyblR5cGUgPT0gXCJPYmplY3RcIikge1xuICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PiA9IHt9O1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdGFudCA9IGl0ZW1zW2ldO1xuICAgICAgICAvLyBAVE9ETzogU2hvdWRuJ3QgdGhpcyBiZSB0aGlzLl9maWVsZElkP1xuICAgICAgICAvLyByZXN1bHRbcmVzdWx0YW50LmlkXSA9IHJlc3VsdGFudFxuICAgICAgICBjb25zdCBpZDogSWQgPSByZXN1bHRhbnRbdGhpcy5faWRQcm9wXTtcbiAgICAgICAgcmVzdWx0W2lkXSA9IHJlc3VsdGFudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgIC8vIGEgc2luZ2xlIGl0ZW1cbiAgICAgICAgcmV0dXJuIGl0ZW0gPz8gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGp1c3QgcmV0dXJuIG91ciBhcnJheVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRJZHMob3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+KTogSWRbXSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICBjb25zdCBvcmRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcjtcbiAgICBjb25zdCBpdGVtSWRzID0gWy4uLmRhdGEua2V5cygpXTtcbiAgICBjb25zdCBpZHM6IElkW10gPSBbXTtcblxuICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgIC8vIGdldCBmaWx0ZXJlZCBpdGVtc1xuICAgICAgaWYgKG9yZGVyKSB7XG4gICAgICAgIC8vIGNyZWF0ZSBvcmRlcmVkIGxpc3RcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmIGZpbHRlcihpdGVtKSkge1xuICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zb3J0KGl0ZW1zLCBvcmRlcik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaWRzLnB1c2goaXRlbXNbaV1bdGhpcy5faWRQcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNyZWF0ZSB1bm9yZGVyZWQgbGlzdFxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgZmlsdGVyKGl0ZW0pKSB7XG4gICAgICAgICAgICBpZHMucHVzaChpdGVtW3RoaXMuX2lkUHJvcF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBnZXQgYWxsIGl0ZW1zXG4gICAgICBpZiAob3JkZXIpIHtcbiAgICAgICAgLy8gY3JlYXRlIGFuIG9yZGVyZWQgbGlzdFxuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgICBpdGVtcy5wdXNoKGRhdGEuZ2V0KGlkKSEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc29ydChpdGVtcywgb3JkZXIpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlkcy5wdXNoKGl0ZW1zW2ldW3RoaXMuX2lkUHJvcF0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgdW5vcmRlcmVkIGxpc3RcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IGRhdGEuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZHMucHVzaChpdGVtW3RoaXMuX2lkUHJvcF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldERhdGFTZXQoKTogRGF0YVNldDxJdGVtLCBJZFByb3A+IHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZm9yRWFjaChcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gdm9pZCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zPEl0ZW0+XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgY29uc3QgaXRlbUlkcyA9IFsuLi5kYXRhLmtleXMoKV07XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyKSB7XG4gICAgICAvLyBleGVjdXRlIGZvckVhY2ggb24gb3JkZXJlZCBsaXN0XG4gICAgICBjb25zdCBpdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gdGhpcy5nZXQob3B0aW9ucyk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgIGNvbnN0IGlkID0gaXRlbVt0aGlzLl9pZFByb3BdO1xuICAgICAgICBjYWxsYmFjayhpdGVtLCBpZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVub3JkZXJlZFxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmICghZmlsdGVyIHx8IGZpbHRlcihpdGVtKSkpIHtcbiAgICAgICAgICBjYWxsYmFjayhpdGVtLCBpZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG1hcDxUPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5cbiAgKTogVFtdIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IG1hcHBlZEl0ZW1zOiBUW10gPSBbXTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICBjb25zdCBpdGVtSWRzID0gWy4uLmRhdGEua2V5cygpXTtcblxuICAgIC8vIGNvbnZlcnQgYW5kIGZpbHRlciBpdGVtc1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoaXRlbSkpKSB7XG4gICAgICAgIG1hcHBlZEl0ZW1zLnB1c2goY2FsbGJhY2soaXRlbSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvcmRlciBpdGVtc1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMub3JkZXIpIHtcbiAgICAgIHRoaXMuX3NvcnQobWFwcGVkSXRlbXMsIG9wdGlvbnMub3JkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXBwZWRJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkczxLIGV4dGVuZHMgc3RyaW5nPihpdGVtOiBudWxsLCBmaWVsZHM6IEtbXSk6IG51bGw7XG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkczxLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpdGVtOiBSZWNvcmQ8SywgdW5rbm93bj4sXG4gICAgZmllbGRzOiBLW11cbiAgKTogUmVjb3JkPEssIHVua25vd24+O1xuICBwcml2YXRlIF9maWx0ZXJGaWVsZHM8SyBleHRlbmRzIHN0cmluZz4oXG4gICAgaXRlbTogUmVjb3JkPEssIHVua25vd24+LFxuICAgIGZpZWxkczogS1tdIHwgUmVjb3JkPEssIHN0cmluZz5cbiAgKTogYW55O1xuICAvKipcbiAgICogRmlsdGVyIHRoZSBmaWVsZHMgb2YgYW4gaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW0gLSBUaGUgaXRlbSB3aG9zZSBmaWVsZHMgc2hvdWxkIGJlIGZpbHRlcmVkLlxuICAgKiBAcGFyYW0gZmllbGRzIC0gVGhlIG5hbWVzIG9mIHRoZSBmaWVsZHMgdGhhdCB3aWxsIGJlIGtlcHQuXG4gICAqIEB0eXBlUGFyYW0gSyAtIEZpZWxkIG5hbWUgdHlwZS5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0gd2l0aG91dCBhbnkgYWRkaXRpb25hbCBmaWVsZHMuXG4gICAqL1xuICBwcml2YXRlIF9maWx0ZXJGaWVsZHM8SyBleHRlbmRzIHN0cmluZz4oXG4gICAgaXRlbTogUmVjb3JkPEssIHVua25vd24+IHwgbnVsbCxcbiAgICBmaWVsZHM6IEtbXSB8IFJlY29yZDxLLCB1bmtub3duPlxuICApOiBSZWNvcmQ8SywgdW5rbm93bj4gfCBudWxsIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIC8vIGl0ZW0gaXMgbnVsbFxuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIEFycmF5LmlzQXJyYXkoZmllbGRzKVxuICAgICAgICA/IC8vIFVzZSB0aGUgc3VwcGxpZWQgYXJyYXlcbiAgICAgICAgICBmaWVsZHNcbiAgICAgICAgOiAvLyBVc2UgdGhlIGtleXMgb2YgdGhlIHN1cHBsaWVkIG9iamVjdFxuICAgICAgICAgIChPYmplY3Qua2V5cyhmaWVsZHMpIGFzIEtbXSlcbiAgICApLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgICAoZmlsdGVyZWRJdGVtLCBmaWVsZCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgICAgICAgZmlsdGVyZWRJdGVtW2ZpZWxkXSA9IGl0ZW1bZmllbGRdO1xuICAgICAgICByZXR1cm4gZmlsdGVyZWRJdGVtO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0IHRoZSBwcm92aWRlZCBhcnJheSB3aXRoIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbXMgLSBJdGVtcyB0byBiZSBzb3J0ZWQgaW4gcGxhY2UuXG4gICAqIEBwYXJhbSBvcmRlciAtIEEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi5cbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGl0ZW1zIGluIHRoZSBpdGVtcyBhcnJheS5cbiAgICovXG4gIHByaXZhdGUgX3NvcnQ8VD4oaXRlbXM6IFRbXSwgb3JkZXI6IERhdGFJbnRlcmZhY2VPcmRlcjxUPik6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygb3JkZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIG9yZGVyIGJ5IHByb3ZpZGVkIGZpZWxkIG5hbWVcbiAgICAgIGNvbnN0IG5hbWUgPSBvcmRlcjsgLy8gZmllbGQgbmFtZVxuICAgICAgaXRlbXMuc29ydCgoYSwgYik6IC0xIHwgMCB8IDEgPT4ge1xuICAgICAgICAvLyBAVE9ETzogSG93IHRvIHRyZWF0IG1pc3NpbmcgcHJvcGVydGllcz9cbiAgICAgICAgY29uc3QgYXYgPSAoYSBhcyBhbnkpW25hbWVdO1xuICAgICAgICBjb25zdCBidiA9IChiIGFzIGFueSlbbmFtZV07XG4gICAgICAgIHJldHVybiBhdiA+IGJ2ID8gMSA6IGF2IDwgYnYgPyAtMSA6IDA7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcmRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAvLyBvcmRlciBieSBzb3J0IGZ1bmN0aW9uXG4gICAgICBpdGVtcy5zb3J0KG9yZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETzogZXh0ZW5kIG9yZGVyIGJ5IGFuIE9iamVjdCB7ZmllbGQ6c3RyaW5nLCBkaXJlY3Rpb246c3RyaW5nfVxuICAgICAgLy8gICAgICAgd2hlcmUgZGlyZWN0aW9uIGNhbiBiZSAnYXNjJyBvciAnZGVzYydcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPcmRlciBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmdcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpdGVtIG9yIG11bHRpcGxlIGl0ZW1zIGJ5IOKAnHJlZmVyZW5jZeKAnSAob25seSB0aGUgaWQgaXMgdXNlZCkgb3IgYnkgaWQuXG4gICAqXG4gICAqIFRoZSBtZXRob2QgaWdub3JlcyByZW1vdmFsIG9mIG5vbi1leGlzdGluZyBpdGVtcywgYW5kIHJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgaWRzIG9mIHRoZSBpdGVtcyB3aGljaCBhcmUgYWN0dWFsbHkgcmVtb3ZlZCBmcm9tIHRoZSBEYXRhU2V0LlxuICAgKlxuICAgKiBBZnRlciB0aGUgaXRlbXMgYXJlIHJlbW92ZWQsIHRoZSBEYXRhU2V0IHdpbGwgdHJpZ2dlciBhbiBldmVudCBgcmVtb3ZlYCBmb3IgdGhlIHJlbW92ZWQgaXRlbXMuIFdoZW4gYSBgc2VuZGVySWRgIGlzIHByb3ZpZGVkLCB0aGlzIGlkIHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIHRyaWdnZXJlZCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gICAqIGNvbnN0IGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQoW1xuICAgKiAgIHsgaWQ6IDEsIHRleHQ6ICdpdGVtIDEnIH0sXG4gICAqICAgeyBpZDogMiwgdGV4dDogJ2l0ZW0gMicgfSxcbiAgICogICB7IGlkOiAzLCB0ZXh0OiAnaXRlbSAzJyB9XG4gICAqIF0pXG4gICAqXG4gICAqIC8vIHJlbW92ZSBpdGVtc1xuICAgKiBjb25zdCBpZHMgPSBkYXRhLnJlbW92ZShbMiwgeyBpZDogMyB9LCA0XSlcbiAgICpcbiAgICogY29uc29sZS5sb2coaWRzKSAvLyBbMiwgM11cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIE9uZSBvciBtb3JlIGl0ZW1zIG9yIGlkcyBvZiBpdGVtcyB0byBiZSByZW1vdmVkLlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIFRoZSBpZHMgb2YgdGhlIHJlbW92ZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlKGlkOiBJZCB8IEl0ZW0gfCAoSWQgfCBJdGVtKVtdLCBzZW5kZXJJZD86IElkIHwgbnVsbCk6IElkW10ge1xuICAgIGNvbnN0IHJlbW92ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCByZW1vdmVkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuXG4gICAgLy8gZm9yY2UgZXZlcnl0aGluZyB0byBiZSBhbiBhcnJheSBmb3Igc2ltcGxpY2l0eVxuICAgIGNvbnN0IGlkcyA9IEFycmF5LmlzQXJyYXkoaWQpID8gaWQgOiBbaWRdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3JlbW92ZShpZHNbaV0pO1xuICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgY29uc3QgaXRlbUlkOiBPcHRJZCA9IGl0ZW1bdGhpcy5faWRQcm9wXTtcbiAgICAgICAgaWYgKGl0ZW1JZCAhPSBudWxsKSB7XG4gICAgICAgICAgcmVtb3ZlZElkcy5wdXNoKGl0ZW1JZCk7XG4gICAgICAgICAgcmVtb3ZlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVtb3ZlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgIFwicmVtb3ZlXCIsXG4gICAgICAgIHsgaXRlbXM6IHJlbW92ZWRJZHMsIG9sZERhdGE6IHJlbW92ZWRJdGVtcyB9LFxuICAgICAgICBzZW5kZXJJZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVtb3ZlZElkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaXRlbSBieSBpdHMgaWQgb3IgcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBJZCBvZiBhbiBpdGVtIG9yIHRoZSBpdGVtIGl0c2VsZi5cbiAgICogQHJldHVybnMgVGhlIHJlbW92ZWQgaXRlbSBpZiByZW1vdmVkLCBudWxsIG90aGVyd2lzZS5cbiAgICovXG4gIHByaXZhdGUgX3JlbW92ZShpZDogSWQgfCBJdGVtKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB8IG51bGwge1xuICAgIC8vIEBUT0RPOiBJdCBvcmlnaWFubGx5IHJldHVybmVkIHRoZSBpdGVtIGFsdGhvdWdoIHRoZSBkb2NzIHNheSBpZC5cbiAgICAvLyBUaGUgY29kZSBleHBlY3RzIHRoZSBpdGVtLCBzbyBwcm9iYWJseSBhbiBlcnJvciBpbiB0aGUgZG9jcy5cbiAgICBsZXQgaWRlbnQ6IE9wdElkO1xuXG4gICAgLy8gY29uZmlybSB0aGUgaWQgdG8gdXNlIGJhc2VkIG9uIHRoZSBhcmdzIHR5cGVcbiAgICBpZiAoaXNJZChpZCkpIHtcbiAgICAgIGlkZW50ID0gaWQ7XG4gICAgfSBlbHNlIGlmIChpZCAmJiB0eXBlb2YgaWQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlkZW50ID0gaWRbdGhpcy5faWRQcm9wXTsgLy8gbG9vayBmb3IgdGhlIGlkZW50aWZpZXIgZmllbGQgdXNpbmcgLl9pZFByb3BcbiAgICB9XG5cbiAgICAvLyBkbyB0aGUgcmVtb3ZpbmcgaWYgdGhlIGl0ZW0gaXMgZm91bmRcbiAgICBpZiAoaWRlbnQgIT0gbnVsbCAmJiB0aGlzLl9kYXRhLmhhcyhpZGVudCkpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZGVudCkgfHwgbnVsbDtcbiAgICAgIHRoaXMuX2RhdGEuZGVsZXRlKGlkZW50KTtcbiAgICAgIC0tdGhpcy5sZW5ndGg7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgZW50aXJlIGRhdGEgc2V0LlxuICAgKlxuICAgKiBBZnRlciB0aGUgaXRlbXMgYXJlIHJlbW92ZWQsIHRoZSB7QGxpbmsgRGF0YVNldH0gd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGByZW1vdmVgIGZvciBhbGwgcmVtb3ZlZCBpdGVtcy4gV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogQHBhcmFtIHNlbmRlcklkIC0gU2VuZGVyIGlkLlxuICAgKiBAcmV0dXJucyByZW1vdmVkSWRzIC0gVGhlIGlkcyBvZiBhbGwgcmVtb3ZlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBjbGVhcihzZW5kZXJJZD86IElkIHwgbnVsbCk6IElkW10ge1xuICAgIGNvbnN0IGlkcyA9IFsuLi50aGlzLl9kYXRhLmtleXMoKV07XG4gICAgY29uc3QgaXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaXRlbXMucHVzaCh0aGlzLl9kYXRhLmdldChpZHNbaV0pISk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YS5jbGVhcigpO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX3RyaWdnZXIoXCJyZW1vdmVcIiwgeyBpdGVtczogaWRzLCBvbGREYXRhOiBpdGVtcyB9LCBzZW5kZXJJZCk7XG5cbiAgICByZXR1cm4gaWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGl0ZW0gd2l0aCBtYXhpbXVtIHZhbHVlIG9mIGEgc3BlY2lmaWVkIGZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZmllbGQgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHNob3VsZCBiZSBzZWFyY2hlZCBmb3IgbWF4IHZhbHVlLlxuICAgKiBAcmV0dXJucyBJdGVtIGNvbnRhaW5pbmcgbWF4IHZhbHVlLCBvciBudWxsIGlmIG5vIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIG1heChmaWVsZDoga2V5b2YgSXRlbSk6IEl0ZW0gfCBudWxsIHtcbiAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICBsZXQgbWF4RmllbGQgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuX2RhdGEudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGl0ZW1GaWVsZCA9IGl0ZW1bZmllbGRdO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgaXRlbUZpZWxkID09PSBcIm51bWJlclwiICYmXG4gICAgICAgIChtYXhGaWVsZCA9PSBudWxsIHx8IGl0ZW1GaWVsZCA+IG1heEZpZWxkKVxuICAgICAgKSB7XG4gICAgICAgIG1heCA9IGl0ZW07XG4gICAgICAgIG1heEZpZWxkID0gaXRlbUZpZWxkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXggfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBpdGVtIHdpdGggbWluaW11bSB2YWx1ZSBvZiBhIHNwZWNpZmllZCBmaWVsZC5cbiAgICpcbiAgICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBzaG91bGQgYmUgc2VhcmNoZWQgZm9yIG1pbiB2YWx1ZS5cbiAgICogQHJldHVybnMgSXRlbSBjb250YWluaW5nIG1pbiB2YWx1ZSwgb3IgbnVsbCBpZiBubyBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBtaW4oZmllbGQ6IGtleW9mIEl0ZW0pOiBJdGVtIHwgbnVsbCB7XG4gICAgbGV0IG1pbiA9IG51bGw7XG4gICAgbGV0IG1pbkZpZWxkID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLl9kYXRhLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBpdGVtRmllbGQgPSBpdGVtW2ZpZWxkXTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGl0ZW1GaWVsZCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAobWluRmllbGQgPT0gbnVsbCB8fCBpdGVtRmllbGQgPCBtaW5GaWVsZClcbiAgICAgICkge1xuICAgICAgICBtaW4gPSBpdGVtO1xuICAgICAgICBtaW5GaWVsZCA9IGl0ZW1GaWVsZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWluIHx8IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZGlzdGluY3Q8VCBleHRlbmRzIGtleW9mIEl0ZW0+KHByb3A6IFQpOiBJdGVtW1RdW107XG4gIHB1YmxpYyBkaXN0aW5jdChwcm9wOiBzdHJpbmcpOiB1bmtub3duW107XG4gIC8qKlxuICAgKiBGaW5kIGFsbCBkaXN0aW5jdCB2YWx1ZXMgb2YgYSBzcGVjaWZpZWQgZmllbGRcbiAgICpcbiAgICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB3aG9zZSBkaXN0aW5jdCB2YWx1ZXMgc2hvdWxkIGJlIHJldHVybmVkLlxuICAgKiBAcmV0dXJucyBVbm9yZGVyZWQgYXJyYXkgY29udGFpbmluZyBhbGwgZGlzdGluY3QgdmFsdWVzLiBJdGVtcyB3aXRob3V0IHNwZWNpZmllZCBwcm9wZXJ0eSBhcmUgaWdub3JlZC5cbiAgICovXG4gIHB1YmxpYyBkaXN0aW5jdDxUIGV4dGVuZHMgc3RyaW5nPihwcm9wOiBUKTogdW5rbm93bltdIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICBjb25zdCBpdGVtSWRzID0gWy4uLmRhdGEua2V5cygpXTtcbiAgICBjb25zdCB2YWx1ZXM6IHVua25vd25bXSA9IFtdO1xuICAgIGxldCBjb3VudCA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgY29uc3QgaXRlbSA9IGRhdGEuZ2V0KGlkKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gKGl0ZW0gYXMgYW55KVtwcm9wXTtcbiAgICAgIGxldCBleGlzdHMgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICBpZiAodmFsdWVzW2pdID09IHZhbHVlKSB7XG4gICAgICAgICAgZXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFleGlzdHMgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZXNbY291bnRdID0gdmFsdWU7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzaW5nbGUgaXRlbS4gV2lsbCBmYWlsIHdoZW4gYW4gaXRlbSB3aXRoIHRoZSBzYW1lIGlkIGFscmVhZHkgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSAtIEEgbmV3IGl0ZW0gdG8gYmUgYWRkZWQuXG4gICAqIEByZXR1cm5zIEFkZGVkIGl0ZW0ncyBpZC4gQW4gaWQgaXMgZ2VuZXJhdGVkIHdoZW4gaXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGl0ZW0uXG4gICAqL1xuICBwcml2YXRlIF9hZGRJdGVtKGl0ZW06IEl0ZW0pOiBJZCB7XG4gICAgY29uc3QgZnVsbEl0ZW0gPSBlbnN1cmVGdWxsSXRlbShpdGVtLCB0aGlzLl9pZFByb3ApO1xuICAgIGNvbnN0IGlkID0gZnVsbEl0ZW1bdGhpcy5faWRQcm9wXTtcblxuICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhpcyBpZCBpcyBhbHJlYWR5IHRha2VuXG4gICAgaWYgKHRoaXMuX2RhdGEuaGFzKGlkKSkge1xuICAgICAgLy8gaXRlbSBhbHJlYWR5IGV4aXN0c1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBhZGQgaXRlbTogaXRlbSB3aXRoIGlkIFwiICsgaWQgKyBcIiBhbHJlYWR5IGV4aXN0c1wiXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGEuc2V0KGlkLCBmdWxsSXRlbSk7XG4gICAgKyt0aGlzLmxlbmd0aDtcblxuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYSBzaW5nbGUgaXRlbTogbWVyZ2Ugd2l0aCBleGlzdGluZyBpdGVtLlxuICAgKiBXaWxsIGZhaWwgd2hlbiB0aGUgaXRlbSBoYXMgbm8gaWQsIG9yIHdoZW4gdGhlcmUgZG9lcyBub3QgZXhpc3QgYW4gaXRlbSB3aXRoIHRoZSBzYW1lIGlkLlxuICAgKlxuICAgKiBAcGFyYW0gdXBkYXRlIC0gVGhlIG5ldyBpdGVtXG4gICAqIEByZXR1cm5zIFRoZSBpZCBvZiB0aGUgdXBkYXRlZCBpdGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlSXRlbSh1cGRhdGU6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4pOiBJZCB7XG4gICAgY29uc3QgaWQ6IE9wdElkID0gdXBkYXRlW3RoaXMuX2lkUHJvcF07XG4gICAgaWYgKGlkID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgdXBkYXRlIGl0ZW06IGl0ZW0gaGFzIG5vIGlkIChpdGVtOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodXBkYXRlKSArXG4gICAgICAgICAgXCIpXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICAvLyBpdGVtIGRvZXNuJ3QgZXhpc3RcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1cGRhdGUgaXRlbTogbm8gaXRlbSB3aXRoIGlkIFwiICsgaWQgKyBcIiBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhLnNldChpZCwgeyAuLi5pdGVtLCAuLi51cGRhdGUgfSk7XG5cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHN0cmVhbShpZHM/OiBJdGVyYWJsZTxJZD4pOiBEYXRhU3RyZWFtPEl0ZW0+IHtcbiAgICBpZiAoaWRzKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcblxuICAgICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtPEl0ZW0+KHtcbiAgICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBJdGVtXT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YS5nZXQoaWQpO1xuICAgICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICB5aWVsZCBbaWQsIGl0ZW1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IERhdGFTdHJlYW0oe1xuICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXTogdGhpcy5fZGF0YS5lbnRyaWVzLmJpbmQodGhpcy5fZGF0YSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiBkZXZlbGJsb2NrOnN0YXJ0ICovXG4gIHB1YmxpYyBnZXQgdGVzdExlYWtEYXRhKCk6IE1hcDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG4gIHB1YmxpYyBnZXQgdGVzdExlYWtJZFByb3AoKTogSWRQcm9wIHtcbiAgICByZXR1cm4gdGhpcy5faWRQcm9wO1xuICB9XG4gIHB1YmxpYyBnZXQgdGVzdExlYWtPcHRpb25zKCk6IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+IHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuICBwdWJsaWMgZ2V0IHRlc3RMZWFrUXVldWUoKTogUXVldWU8dGhpcz4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWU7XG4gIH1cbiAgcHVibGljIHNldCB0ZXN0TGVha1F1ZXVlKHY6IFF1ZXVlPHRoaXM+IHwgbnVsbCkge1xuICAgIHRoaXMuX3F1ZXVlID0gdjtcbiAgfVxuICAvKiBkZXZlbGJsb2NrOmVuZCAqL1xufVxuIiwgImltcG9ydCB7XG4gIERhdGFJbnRlcmZhY2UsXG4gIERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldElkc09wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5LFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdCxcbiAgRGF0YUludGVyZmFjZU1hcE9wdGlvbnMsXG4gIEV2ZW50Q2FsbGJhY2tzV2l0aEFueSxcbiAgRXZlbnROYW1lLFxuICBFdmVudFBheWxvYWRzLFxuICBGdWxsSXRlbSxcbiAgSWQsXG4gIFBhcnRJdGVtLFxuICBSZW1vdmVFdmVudFBheWxvYWQsXG4gIFVwZGF0ZUV2ZW50UGF5bG9hZCxcbiAgaXNJZCxcbn0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcblxuaW1wb3J0IHsgRGF0YVNldCB9IGZyb20gXCIuL2RhdGEtc2V0XCI7XG5pbXBvcnQgeyBEYXRhU2V0UGFydCB9IGZyb20gXCIuL2RhdGEtc2V0LXBhcnRcIjtcbmltcG9ydCB7IERhdGFTdHJlYW0gfSBmcm9tIFwiLi9kYXRhLXN0cmVhbVwiO1xuXG4vKipcbiAqIERhdGEgdmlldyBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFWaWV3T3B0aW9uczxJdGVtLCBJZFByb3AgZXh0ZW5kcyBzdHJpbmc+IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCBjb250YWluaW5nIHRoZSBpZCBvZiB0aGUgaXRlbXMuIFdoZW4gZGF0YSBpcyBmZXRjaGVkIGZyb20gYSBzZXJ2ZXIgd2hpY2ggdXNlcyBzb21lIHNwZWNpZmljIGZpZWxkIHRvIGlkZW50aWZ5IGl0ZW1zLCB0aGlzIGZpZWxkIG5hbWUgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgRGF0YVNldCB1c2luZyB0aGUgb3B0aW9uIGBmaWVsZElkYC4gRm9yIGV4YW1wbGUgW0NvdWNoREJdKGh0dHA6Ly9jb3VjaGRiLmFwYWNoZS5vcmcvKSB1c2VzIHRoZSBmaWVsZCBgJ19pZCdgIHRvIGlkZW50aWZ5IGRvY3VtZW50cy5cbiAgICovXG4gIGZpZWxkSWQ/OiBJZFByb3A7XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xufVxuXG4vKipcbiAqIERhdGFWaWV3XG4gKlxuICogQSBEYXRhVmlldyBvZmZlcnMgYSBmaWx0ZXJlZCBhbmQvb3IgZm9ybWF0dGVkIHZpZXcgb24gYSBEYXRhU2V0LiBPbmUgY2FuIHN1YnNjcmliZSB0byBjaGFuZ2VzIGluIGEgRGF0YVZpZXcsIGFuZCBlYXNpbHkgZ2V0IGZpbHRlcmVkIG9yIGZvcm1hdHRlZCBkYXRhIHdpdGhvdXQgaGF2aW5nIHRvIHNwZWNpZnkgZmlsdGVycyBhbmQgZmllbGQgdHlwZXMgYWxsIHRoZSB0aW1lLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqIGBgYGphdmFzY3JpcHRcbiAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAqIHZhciBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KCk7XG4gKiBkYXRhLmFkZChbXG4gKiAgIHtpZDogMSwgdGV4dDogJ2l0ZW0gMScsIGRhdGU6IG5ldyBEYXRlKDIwMTMsIDYsIDIwKSwgZ3JvdXA6IDEsIGZpcnN0OiB0cnVlfSxcbiAqICAge2lkOiAyLCB0ZXh0OiAnaXRlbSAyJywgZGF0ZTogJzIwMTMtMDYtMjMnLCBncm91cDogMn0sXG4gKiAgIHtpZDogMywgdGV4dDogJ2l0ZW0gMycsIGRhdGU6ICcyMDEzLTA2LTI1JywgZ3JvdXA6IDJ9LFxuICogICB7aWQ6IDQsIHRleHQ6ICdpdGVtIDQnfVxuICogXSk7XG4gKlxuICogLy8gY3JlYXRlIGEgRGF0YVZpZXdcbiAqIC8vIHRoZSB2aWV3IHdpbGwgb25seSBjb250YWluIGl0ZW1zIGhhdmluZyBhIHByb3BlcnR5IGdyb3VwIHdpdGggdmFsdWUgMSxcbiAqIC8vIGFuZCB3aWxsIG9ubHkgb3V0cHV0IGZpZWxkcyBpZCwgdGV4dCwgYW5kIGRhdGUuXG4gKiB2YXIgdmlldyA9IG5ldyB2aXMuRGF0YVZpZXcoZGF0YSwge1xuICogICBmaWx0ZXI6IGZ1bmN0aW9uIChpdGVtKSB7XG4gKiAgICAgcmV0dXJuIChpdGVtLmdyb3VwID09IDEpO1xuICogICB9LFxuICogICBmaWVsZHM6IFsnaWQnLCAndGV4dCcsICdkYXRlJ11cbiAqIH0pO1xuICpcbiAqIC8vIHN1YnNjcmliZSB0byBhbnkgY2hhbmdlIGluIHRoZSBEYXRhVmlld1xuICogdmlldy5vbignKicsIGZ1bmN0aW9uIChldmVudCwgcHJvcGVydGllcywgc2VuZGVySWQpIHtcbiAqICAgY29uc29sZS5sb2coJ2V2ZW50JywgZXZlbnQsIHByb3BlcnRpZXMpO1xuICogfSk7XG4gKlxuICogLy8gdXBkYXRlIGFuIGl0ZW0gaW4gdGhlIGRhdGEgc2V0XG4gKiBkYXRhLnVwZGF0ZSh7aWQ6IDIsIGdyb3VwOiAxfSk7XG4gKlxuICogLy8gZ2V0IGFsbCBpZHMgaW4gdGhlIHZpZXdcbiAqIHZhciBpZHMgPSB2aWV3LmdldElkcygpO1xuICogY29uc29sZS5sb2coJ2lkcycsIGlkcyk7IC8vIHdpbGwgb3V0cHV0IFsxLCAyXVxuICpcbiAqIC8vIGdldCBhbGwgaXRlbXMgaW4gdGhlIHZpZXdcbiAqIHZhciBpdGVtcyA9IHZpZXcuZ2V0KCk7XG4gKiBgYGBcbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFWaWV3PFxuICAgIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICAgIElkUHJvcCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuICA+XG4gIGV4dGVuZHMgRGF0YVNldFBhcnQ8SXRlbSwgSWRQcm9wPlxuICBpbXBsZW1lbnRzIERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPlxue1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGxlbmd0aCA9IDA7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0IGlkUHJvcCgpOiBJZFByb3Age1xuICAgIHJldHVybiB0aGlzLmdldERhdGFTZXQoKS5pZFByb3A7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcjogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdO1xuICBwcml2YXRlIF9kYXRhITogRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+OyAvLyBjb25zdHJ1Y3RvciDihpIgc2V0RGF0YVxuICBwcml2YXRlIHJlYWRvbmx5IF9pZHM6IFNldDxJZD4gPSBuZXcgU2V0KCk7IC8vIGlkcyBvZiB0aGUgaXRlbXMgY3VycmVudGx5IGluIG1lbW9yeSAoanVzdCBjb250YWlucyBhIGJvb2xlYW4gdHJ1ZSlcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogRGF0YVZpZXdPcHRpb25zPEl0ZW0sIElkUHJvcD47XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGFWaWV3LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBpbnN0YW5jZSBjb250YWluaW5nIGRhdGEgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIHRoaXMgZGF0YSB2aWV3LlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIGRhdGE6IERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPixcbiAgICBvcHRpb25zPzogRGF0YVZpZXdPcHRpb25zPEl0ZW0sIElkUHJvcD5cbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgdGhpcy5fbGlzdGVuZXIgPSB0aGlzLl9vbkV2ZW50LmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnNldERhdGEoZGF0YSk7XG4gIH1cblxuICAvLyBUT0RPOiBpbXBsZW1lbnQgYSBmdW5jdGlvbiAuY29uZmlnKCkgdG8gZHluYW1pY2FsbHkgdXBkYXRlIHRoaW5ncyBsaWtlIGNvbmZpZ3VyZWQgZmlsdGVyXG4gIC8vIGFuZCB0cmlnZ2VyIGNoYW5nZXMgYWNjb3JkaW5nbHlcblxuICAvKipcbiAgICogU2V0IGEgZGF0YSBzb3VyY2UgZm9yIHRoZSB2aWV3LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBpbnN0YW5jZSBjb250YWluaW5nIGRhdGEgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpLlxuICAgKiBAcmVtYXJrc1xuICAgKiBOb3RlIHRoYXQgd2hlbiB0aGUgZGF0YSB2aWV3IGlzIGJvdW5kIHRvIGEgZGF0YSBzZXQgaXQgd29uJ3QgYmUgZ2FyYmFnZVxuICAgKiBjb2xsZWN0ZWQgdW5sZXNzIHRoZSBkYXRhIHNldCBpcyB0b28uIFVzZSBgZGF0YVZpZXcuc2V0RGF0YShudWxsKWAgb3JcbiAgICogYGRhdGFWaWV3LmRpc3Bvc2UoKWAgdG8gZW5hYmxlIGdhcmJhZ2UgY29sbGVjdGlvbiBiZWZvcmUgeW91IGxvc2UgdGhlIGxhc3RcbiAgICogcmVmZXJlbmNlLlxuICAgKi9cbiAgcHVibGljIHNldERhdGEoZGF0YTogRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICAgIC8vIHVuc3Vic2NyaWJlIGZyb20gY3VycmVudCBkYXRhc2V0XG4gICAgICBpZiAodGhpcy5fZGF0YS5vZmYpIHtcbiAgICAgICAgdGhpcy5fZGF0YS5vZmYoXCIqXCIsIHRoaXMuX2xpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gdHJpZ2dlciBhIHJlbW92ZSBvZiBhbGwgaXRlbXMgaW4gbWVtb3J5XG4gICAgICBjb25zdCBpZHMgPSB0aGlzLl9kYXRhLmdldElkcyh7IGZpbHRlcjogdGhpcy5fb3B0aW9ucy5maWx0ZXIgfSk7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2RhdGEuZ2V0KGlkcyk7XG5cbiAgICAgIHRoaXMuX2lkcy5jbGVhcigpO1xuICAgICAgdGhpcy5sZW5ndGggPSAwO1xuICAgICAgdGhpcy5fdHJpZ2dlcihcInJlbW92ZVwiLCB7IGl0ZW1zOiBpZHMsIG9sZERhdGE6IGl0ZW1zIH0pO1xuICAgIH1cblxuICAgIGlmIChkYXRhICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuXG4gICAgICAvLyB0cmlnZ2VyIGFuIGFkZCBvZiBhbGwgYWRkZWQgaXRlbXNcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuX2RhdGEuZ2V0SWRzKHsgZmlsdGVyOiB0aGlzLl9vcHRpb25zLmZpbHRlciB9KTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgIHRoaXMuX2lkcy5hZGQoaWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5sZW5ndGggPSBpZHMubGVuZ3RoO1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBpZHMgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEgPSBuZXcgRGF0YVNldDxJdGVtLCBJZFByb3A+KCk7XG4gICAgfVxuXG4gICAgLy8gc3Vic2NyaWJlIHRvIG5ldyBkYXRhc2V0XG4gICAgaWYgKHRoaXMuX2RhdGEub24pIHtcbiAgICAgIHRoaXMuX2RhdGEub24oXCIqXCIsIHRoaXMuX2xpc3RlbmVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgRGF0YVZpZXcuXG4gICAqIFVzZWZ1bCB3aGVuIHRoZSBEYXRhVmlldyBoYXMgYSBmaWx0ZXIgZnVuY3Rpb24gY29udGFpbmluZyBhIHZhcmlhYmxlIHBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyByZWZyZXNoKCk6IHZvaWQge1xuICAgIGNvbnN0IGlkcyA9IHRoaXMuX2RhdGEuZ2V0SWRzKHtcbiAgICAgIGZpbHRlcjogdGhpcy5fb3B0aW9ucy5maWx0ZXIsXG4gICAgfSk7XG4gICAgY29uc3Qgb2xkSWRzID0gWy4uLnRoaXMuX2lkc107XG4gICAgY29uc3QgbmV3SWRzOiBSZWNvcmQ8SWQsIGJvb2xlYW4+ID0ge307XG4gICAgY29uc3QgYWRkZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCByZW1vdmVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcblxuICAgIC8vIGNoZWNrIGZvciBhZGRpdGlvbnNcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgIG5ld0lkc1tpZF0gPSB0cnVlO1xuICAgICAgaWYgKCF0aGlzLl9pZHMuaGFzKGlkKSkge1xuICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgdGhpcy5faWRzLmFkZChpZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9yIHJlbW92YWxzXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG9sZElkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBvbGRJZHNbaV07XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkge1xuICAgICAgICAvLyBAVE9ETzogSW52ZXN0aWdhdGUuXG4gICAgICAgIC8vIERvZXNuJ3QgaGFwcGVuIGR1cmluZyB0ZXN0cyBvciBleGFtcGxlcy5cbiAgICAgICAgLy8gSXMgaXQgcmVhbGx5IGltcG9zc2libGUgb3IgY291bGQgaXQgZXZlbnR1YWxseSBoYXBwZW4/XG4gICAgICAgIC8vIEhvdyB0byBoYW5kbGUgaXQgaWYgaXQgZG9lcz8gVGhlIHR5cGVzIGd1YXJhbnRlZSBub24tbnVsbGFibGUgaXRlbXMuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJZiB5b3Ugc2VlIHRoaXMsIHJlcG9ydCBpdCBwbGVhc2UuXCIpO1xuICAgICAgfSBlbHNlIGlmICghbmV3SWRzW2lkXSkge1xuICAgICAgICByZW1vdmVkSWRzLnB1c2goaWQpO1xuICAgICAgICByZW1vdmVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgdGhpcy5faWRzLmRlbGV0ZShpZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggKz0gYWRkZWRJZHMubGVuZ3RoIC0gcmVtb3ZlZElkcy5sZW5ndGg7XG5cbiAgICAvLyB0cmlnZ2VyIGV2ZW50c1xuICAgIGlmIChhZGRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogYWRkZWRJZHMgfSk7XG4gICAgfVxuICAgIGlmIChyZW1vdmVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcInJlbW92ZVwiLCB7IGl0ZW1zOiByZW1vdmVkSWRzLCBvbGREYXRhOiByZW1vdmVkSXRlbXMgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoaWQ6IElkKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoaWRzOiBJZFtdKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZCB8IElkW10sXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6XG4gICAgfCBudWxsXG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+XG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W11cbiAgICB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgZmlyc3Q/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiB8IElkIHwgSWRbXSxcbiAgICBzZWNvbmQ/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8c3RyaW5nLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PiB7XG4gICAgaWYgKHRoaXMuX2RhdGEgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gcGFyc2UgdGhlIGFyZ3VtZW50c1xuICAgIGxldCBpZHM6IElkIHwgSWRbXSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBvcHRpb25zOiBhbnk7XG4gICAgaWYgKGlzSWQoZmlyc3QpIHx8IEFycmF5LmlzQXJyYXkoZmlyc3QpKSB7XG4gICAgICBpZHMgPSBmaXJzdDtcbiAgICAgIG9wdGlvbnMgPSBzZWNvbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMgPSBmaXJzdDtcbiAgICB9XG5cbiAgICAvLyBleHRlbmQgdGhlIG9wdGlvbnMgd2l0aCB0aGUgZGVmYXVsdCBvcHRpb25zIGFuZCBwcm92aWRlZCBvcHRpb25zXG4gICAgY29uc3Qgdmlld09wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgdGhpcy5fb3B0aW9ucyxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuXG4gICAgLy8gY3JlYXRlIGEgY29tYmluZWQgZmlsdGVyIG1ldGhvZCB3aGVuIG5lZWRlZFxuICAgIGNvbnN0IHRoaXNGaWx0ZXIgPSB0aGlzLl9vcHRpb25zLmZpbHRlcjtcbiAgICBjb25zdCBvcHRpb25zRmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICBpZiAodGhpc0ZpbHRlciAmJiBvcHRpb25zRmlsdGVyKSB7XG4gICAgICB2aWV3T3B0aW9ucy5maWx0ZXIgPSAoaXRlbSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICByZXR1cm4gdGhpc0ZpbHRlcihpdGVtKSAmJiBvcHRpb25zRmlsdGVyKGl0ZW0pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaWRzID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kYXRhLmdldCh2aWV3T3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9kYXRhLmdldChpZHMsIHZpZXdPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldElkcyhvcHRpb25zPzogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT4pOiBJZFtdIHtcbiAgICBpZiAodGhpcy5fZGF0YS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSB0aGlzLl9vcHRpb25zLmZpbHRlcjtcbiAgICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXIgPSBvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmZpbHRlciA6IG51bGw7XG4gICAgICBsZXQgZmlsdGVyOiBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9uczxJdGVtPltcImZpbHRlclwiXTtcblxuICAgICAgaWYgKG9wdGlvbnNGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXIpIHtcbiAgICAgICAgICBmaWx0ZXIgPSAoaXRlbSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGaWx0ZXIoaXRlbSkgJiYgb3B0aW9uc0ZpbHRlcihpdGVtKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbHRlciA9IG9wdGlvbnNGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9kYXRhLmdldElkcyh7XG4gICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICBvcmRlcjogb3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGZvckVhY2goXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPlxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IHRoaXMuX29wdGlvbnMuZmlsdGVyO1xuICAgICAgY29uc3Qgb3B0aW9uc0ZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgICBsZXQgZmlsdGVyOiB1bmRlZmluZWQgfCAoKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW4pO1xuXG4gICAgICBpZiAob3B0aW9uc0ZpbHRlcikge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgIGZpbHRlciA9IGZ1bmN0aW9uIChpdGVtOiBJdGVtKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZpbHRlcihpdGVtKSAmJiBvcHRpb25zRmlsdGVyKGl0ZW0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVyID0gb3B0aW9uc0ZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZGF0YS5mb3JFYWNoKGNhbGxiYWNrLCB7XG4gICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICBvcmRlcjogb3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBtYXA8VD4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IFQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VNYXBPcHRpb25zPEl0ZW0sIFQ+XG4gICk6IFRbXSB7XG4gICAgdHlwZSBGaWx0ZXIgPSBOb25OdWxsYWJsZTxEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxJdGVtLCBUPltcImZpbHRlclwiXT47XG5cbiAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IHRoaXMuX29wdGlvbnMuZmlsdGVyO1xuICAgICAgY29uc3Qgb3B0aW9uc0ZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgICBsZXQgZmlsdGVyOiB1bmRlZmluZWQgfCBGaWx0ZXI7XG5cbiAgICAgIGlmIChvcHRpb25zRmlsdGVyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgZmlsdGVyID0gKGl0ZW0pOiBSZXR1cm5UeXBlPEZpbHRlcj4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGaWx0ZXIoaXRlbSkgJiYgb3B0aW9uc0ZpbHRlcihpdGVtKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbHRlciA9IG9wdGlvbnNGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9kYXRhLm1hcChjYWxsYmFjaywge1xuICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgb3JkZXI6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXREYXRhU2V0KCk6IERhdGFTZXQ8SXRlbSwgSWRQcm9wPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0RGF0YVNldCgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdHJlYW0oaWRzPzogSXRlcmFibGU8SWQ+KTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuc3RyZWFtKFxuICAgICAgaWRzIHx8IHtcbiAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06IHRoaXMuX2lkcy5rZXlzLmJpbmQodGhpcy5faWRzKSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgaW5zdGFuY2UgdW51c2FibGUgcHJpb3IgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgaW50ZW50aW9uIG9mIHRoaXMgbWV0aG9kIGlzIHRvIGhlbHAgZGlzY292ZXIgc2NlbmFyaW9zIHdoZXJlIHRoZSBkYXRhXG4gICAqIHZpZXcgaXMgYmVpbmcgdXNlZCB3aGVuIHRoZSBwcm9ncmFtbWVyIHRoaW5rcyBpdCBoYXMgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZFxuICAgKiBhbHJlYWR5LiBJdCdzIHN0cmljdGVyIHZlcnNpb24gb2YgYGRhdGFWaWV3LnNldERhdGEobnVsbClgLlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RhdGE/Lm9mZikge1xuICAgICAgdGhpcy5fZGF0YS5vZmYoXCIqXCIsIHRoaXMuX2xpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gXCJUaGlzIGRhdGEgdmlldyBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9mLlwiO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50ID0ge1xuICAgICAgZ2V0OiAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0sXG4gICAgICBzZXQ6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfSxcblxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICB9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhEYXRhVmlldy5wcm90b3R5cGUpKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCByZXBsYWNlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGxpc3RlbmVyLiBXaWxsIHByb3BhZ2F0ZSBhbGwgZXZlbnRzIGZyb20gdGhlIGNvbm5lY3RlZCBkYXRhIHNldCB0byB0aGUgc3Vic2NyaWJlcnMgb2YgdGhlIERhdGFWaWV3LCBidXQgd2lsbCBmaWx0ZXIgdGhlIGl0ZW1zIGFuZCBvbmx5IHRyaWdnZXIgd2hlbiB0aGVyZSBhcmUgY2hhbmdlcyBpbiB0aGUgZmlsdGVyZWQgZGF0YSBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBJZCBzdXBwbGllZCBieSB0aGUgc2VuZGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBfb25FdmVudDxFTiBleHRlbmRzIEV2ZW50TmFtZT4oXG4gICAgZXZlbnQ6IEVOLFxuICAgIHBhcmFtczogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W0VOXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLml0ZW1zIHx8ICF0aGlzLl9kYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaWRzID0gcGFyYW1zLml0ZW1zO1xuICAgIGNvbnN0IGFkZGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgdXBkYXRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCBvbGRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG4gICAgY29uc3QgdXBkYXRlZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBjb25zdCByZW1vdmVkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuXG4gICAgc3dpdGNoIChldmVudCkge1xuICAgICAgY2FzZSBcImFkZFwiOlxuICAgICAgICAvLyBmaWx0ZXIgdGhlIGlkcyBvZiB0aGUgYWRkZWQgaXRlbXNcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldChpZCk7XG4gICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuX2lkcy5hZGQoaWQpO1xuICAgICAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcbiAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBldmVudCBmcm9tIHRoZSB2aWV3cyB2aWV3cG9pbnQ6IGFuIHVwZGF0ZWRcbiAgICAgICAgLy8gaXRlbSBjYW4gYmUgYWRkZWQsIHVwZGF0ZWQsIG9yIHJlbW92ZWQgZnJvbSB0aGlzIHZpZXcuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXQoaWQpO1xuXG4gICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgICB1cGRhdGVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgICAgICB1cGRhdGVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAocGFyYW1zIGFzIFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+KS5kYXRhW2ldXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIG9sZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgKHBhcmFtcyBhcyBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPikub2xkRGF0YVtpXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5faWRzLmFkZChpZCk7XG4gICAgICAgICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5faWRzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgIHJlbW92ZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgICAgIHJlbW92ZWRJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgIChwYXJhbXMgYXMgVXBkYXRlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4pLm9sZERhdGFbaV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIG5vdGhpbmcgaW50ZXJlc3RpbmcgZm9yIG1lIDotKFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwicmVtb3ZlXCI6XG4gICAgICAgIC8vIGZpbHRlciB0aGUgaWRzIG9mIHRoZSByZW1vdmVkIGl0ZW1zXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICBpZiAodGhpcy5faWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2lkcy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgcmVtb3ZlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgIHJlbW92ZWRJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAocGFyYW1zIGFzIFJlbW92ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+KS5vbGREYXRhW2ldXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoICs9IGFkZGVkSWRzLmxlbmd0aCAtIHJlbW92ZWRJZHMubGVuZ3RoO1xuXG4gICAgaWYgKGFkZGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBhZGRlZElkcyB9LCBzZW5kZXJJZCk7XG4gICAgfVxuICAgIGlmICh1cGRhdGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgXCJ1cGRhdGVcIixcbiAgICAgICAgeyBpdGVtczogdXBkYXRlZElkcywgb2xkRGF0YTogb2xkSXRlbXMsIGRhdGE6IHVwZGF0ZWRJdGVtcyB9LFxuICAgICAgICBzZW5kZXJJZFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJlbW92ZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICBcInJlbW92ZVwiLFxuICAgICAgICB7IGl0ZW1zOiByZW1vdmVkSWRzLCBvbGREYXRhOiByZW1vdmVkSXRlbXMgfSxcbiAgICAgICAgc2VuZGVySWRcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgUGFydEl0ZW0gfSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuaW1wb3J0IHsgRGF0YVNldCB9IGZyb20gXCIuL2RhdGEtc2V0XCI7XG5cbi8qKlxuICogQ2hlY2sgdGhhdCBnaXZlbiB2YWx1ZSBpcyBjb21wYXRpYmxlIHdpdGggVmlzIERhdGEgU2V0IGludGVyZmFjZS5cbiAqXG4gKiBAcGFyYW0gaWRQcm9wIC0gVGhlIGV4cGVjdGVkIHByb3BlcnR5IHRvIGNvbnRhaW4gaXRlbSBpZC5cbiAqIEBwYXJhbSB2IC0gVGhlIHZhbHVlIHRvIGJlIHRlc3RlZC5cbiAqIEByZXR1cm5zIFRydWUgaWYgYWxsIGV4cGVjdGVkIHZhbHVlcyBhbmQgbWV0aG9kcyBtYXRjaCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhU2V0TGlrZTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPihpZFByb3A6IElkUHJvcCwgdjogYW55KTogdiBpcyBEYXRhU2V0PEl0ZW0sIElkUHJvcD4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgdiAhPT0gbnVsbCAmJlxuICAgIGlkUHJvcCA9PT0gdi5pZFByb3AgJiZcbiAgICB0eXBlb2Ygdi5hZGQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmNsZWFyID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5kaXN0aW5jdCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZm9yRWFjaCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXREYXRhU2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXRJZHMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiB2Lm1hcCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYubWF4ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5taW4gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm9mZiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYub24gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnJlbW92ZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuc2V0T3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuc3RyZWFtID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi51cGRhdGUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnVwZGF0ZU9ubHkgPT09IFwiZnVuY3Rpb25cIlxuICApO1xufVxuIiwgImltcG9ydCB7IERhdGFWaWV3IH0gZnJvbSBcIi4vZGF0YS12aWV3XCI7XG5pbXBvcnQgeyBQYXJ0SXRlbSB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBpc0RhdGFTZXRMaWtlIH0gZnJvbSBcIi4vZGF0YS1zZXQtY2hlY2tcIjtcblxuLyoqXG4gKiBDaGVjayB0aGF0IGdpdmVuIHZhbHVlIGlzIGNvbXBhdGlibGUgd2l0aCBWaXMgRGF0YSBWaWV3IGludGVyZmFjZS5cbiAqXG4gKiBAcGFyYW0gaWRQcm9wIC0gVGhlIGV4cGVjdGVkIHByb3BlcnR5IHRvIGNvbnRhaW4gaXRlbSBpZC5cbiAqIEBwYXJhbSB2IC0gVGhlIHZhbHVlIHRvIGJlIHRlc3RlZC5cbiAqIEByZXR1cm5zIFRydWUgaWYgYWxsIGV4cGVjdGVkIHZhbHVlcyBhbmQgbWV0aG9kcyBtYXRjaCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhVmlld0xpa2U8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4oaWRQcm9wOiBJZFByb3AsIHY6IGFueSk6IHYgaXMgRGF0YVZpZXc8SXRlbSwgSWRQcm9wPiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiZcbiAgICB2ICE9PSBudWxsICYmXG4gICAgaWRQcm9wID09PSB2LmlkUHJvcCAmJlxuICAgIHR5cGVvZiB2LmZvckVhY2ggPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0RGF0YVNldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0SWRzID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICB0eXBlb2Ygdi5tYXAgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm9mZiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYub24gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnN0cmVhbSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgaXNEYXRhU2V0TGlrZShpZFByb3AsIHYuZ2V0RGF0YVNldCgpKVxuICApO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCB0aGlzIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG4gIC8vIE5hc2hvcm4gYnVnOlxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTI4XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMzBcbiAgaWYgKGNsYXNzb2ZSYXcoZm4pID09PSAnRnVuY3Rpb24nKSByZXR1cm4gdW5jdXJyeVRoaXMoZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgSVNfSFRNTEREQSA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWxsOiBkb2N1bWVudEFsbCxcbiAgSVNfSFRNTEREQTogSVNfSFRNTEREQVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJGRvY3VtZW50QWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCcpO1xuXG52YXIgZG9jdW1lbnRBbGwgPSAkZG9jdW1lbnRBbGwuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbm1vZHVsZS5leHBvcnRzID0gJGRvY3VtZW50QWxsLklTX0hUTUxEREEgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbC5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgJGRvY3VtZW50QWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCcpO1xuXG52YXIgZG9jdW1lbnRBbGwgPSAkZG9jdW1lbnRBbGwuYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRkb2N1bWVudEFsbC5JU19IVE1MRERBID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpIHx8IGl0ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodmFyaWFibGUpID8gdmFyaWFibGUgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24ocGF0aFtuYW1lc3BhY2VdKSB8fCBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pXG4gICAgOiBwYXRoW25hbWVzcGFjZV0gJiYgcGF0aFtuYW1lc3BhY2VdW21ldGhvZF0gfHwgZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIG5hdmlnYXRvciAhPSAndW5kZWZpbmVkJyAmJiBTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzMuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDIzIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzMuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgYmluZCA9IHVuY3VycnlUaGlzKHVuY3VycnlUaGlzLmJpbmQpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0KSB7XG4gIGFDYWxsYWJsZShmbik7XG4gIHJldHVybiB0aGF0ID09PSB1bmRlZmluZWQgPyBmbiA6IE5BVElWRV9CSU5EID8gYmluZChmbiwgdGhhdCkgOiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciB3cmFwQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoTmF0aXZlQ29uc3RydWN0b3IpIHtcbiAgdmFyIFdyYXBwZXIgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgV3JhcHBlcikge1xuICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhLCBiKTtcbiAgICAgIH0gcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhLCBiLCBjKTtcbiAgICB9IHJldHVybiBhcHBseShOYXRpdmVDb25zdHJ1Y3RvciwgdGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgV3JhcHBlci5wcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBXcmFwcGVyO1xufTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIFBST1RPID0gb3B0aW9ucy5wcm90bztcblxuICB2YXIgbmF0aXZlU291cmNlID0gR0xPQkFMID8gZ2xvYmFsIDogU1RBVElDID8gZ2xvYmFsW1RBUkdFVF0gOiAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcblxuICB2YXIgdGFyZ2V0ID0gR0xPQkFMID8gcGF0aCA6IHBhdGhbVEFSR0VUXSB8fCBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVEFSR0VULCB7fSlbVEFSR0VUXTtcbiAgdmFyIHRhcmdldFByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG5cbiAgdmFyIEZPUkNFRCwgVVNFX05BVElWRSwgVklSVFVBTF9QUk9UT1RZUEU7XG4gIHZhciBrZXksIHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSwgbmF0aXZlUHJvcGVydHksIHJlc3VsdFByb3BlcnR5LCBkZXNjcmlwdG9yO1xuXG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgVVNFX05BVElWRSA9ICFGT1JDRUQgJiYgbmF0aXZlU291cmNlICYmIGhhc093bihuYXRpdmVTb3VyY2UsIGtleSk7XG5cbiAgICB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUpIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hdGl2ZVNvdXJjZSwga2V5KTtcbiAgICAgIG5hdGl2ZVByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSBuYXRpdmVQcm9wZXJ0eSA9IG5hdGl2ZVNvdXJjZVtrZXldO1xuXG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBpbXBsZW1lbnRhdGlvblxuICAgIHNvdXJjZVByb3BlcnR5ID0gKFVTRV9OQVRJVkUgJiYgbmF0aXZlUHJvcGVydHkpID8gbmF0aXZlUHJvcGVydHkgOiBzb3VyY2Vba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFICYmIHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSA9PSB0eXBlb2Ygc291cmNlUHJvcGVydHkpIGNvbnRpbnVlO1xuXG4gICAgLy8gYmluZCBtZXRob2RzIHRvIGdsb2JhbCBmb3IgY2FsbGluZyBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgaWYgKG9wdGlvbnMuYmluZCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IGJpbmQoc291cmNlUHJvcGVydHksIGdsb2JhbCk7XG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uXG4gICAgZWxzZSBpZiAob3B0aW9ucy53cmFwICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gd3JhcENvbnN0cnVjdG9yKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICBlbHNlIGlmIChQUk9UTyAmJiBpc0NhbGxhYmxlKHNvdXJjZVByb3BlcnR5KSkgcmVzdWx0UHJvcGVydHkgPSB1bmN1cnJ5VGhpcyhzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gZGVmYXVsdCBjYXNlXG4gICAgZWxzZSByZXN1bHRQcm9wZXJ0eSA9IHNvdXJjZVByb3BlcnR5O1xuXG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHNvdXJjZVByb3BlcnR5ICYmIHNvdXJjZVByb3BlcnR5LnNoYW0pIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdFByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cblxuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgcmVzdWx0UHJvcGVydHkpO1xuXG4gICAgaWYgKFBST1RPKSB7XG4gICAgICBWSVJUVUFMX1BST1RPVFlQRSA9IFRBUkdFVCArICdQcm90b3R5cGUnO1xuICAgICAgaWYgKCFoYXNPd24ocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUpKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSwge30pO1xuICAgICAgfVxuICAgICAgLy8gZXhwb3J0IHZpcnR1YWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoW1ZJUlRVQUxfUFJPVE9UWVBFXSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICAvLyBleHBvcnQgcmVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgaWYgKG9wdGlvbnMucmVhbCAmJiB0YXJnZXRQcm90b3R5cGUgJiYgKEZPUkNFRCB8fCAhdGFyZ2V0UHJvdG90eXBlW2tleV0pKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXRQcm90b3R5cGUsIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gc2FmZVxudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHNob3VsZCBoYXZlIGNvcnJlY3Qgb3JkZXIgb2Ygb3BlcmF0aW9ucyAoRWRnZSBidWcpXG4gIGlmIChERVNDUklQVE9SUyAmJiAkYXNzaWduKHsgYjogMSB9LCAkYXNzaWduKGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgJ2InLCB7XG4gICAgICAgIHZhbHVlOiAzLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9KSwgeyBiOiAyIH0pKS5iICE9PSAxKSByZXR1cm4gdHJ1ZTtcbiAgLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zeW1ib2wgLS0gc2FmZVxuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdhc3NpZ24gZGV0ZWN0aW9uJyk7XG4gIHZhciBhbHBoYWJldCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbc3ltYm9sXSA9IDc7XG4gIGFscGhhYmV0LnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChjaHIpIHsgQltjaHJdID0gY2hyOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW3N5bWJvbF0gIT09IDcgfHwgb2JqZWN0S2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT09IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQob2JqZWN0S2V5cyhTKSwgZ2V0T3duUHJvcGVydHlTeW1ib2xzKFMpKSA6IG9iamVjdEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwocHJvcGVydHlJc0VudW1lcmFibGUsIFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgYXJpdHk6IDIsIGZvcmNlZDogT2JqZWN0LmFzc2lnbiAhPT0gYXNzaWduIH0sIHtcbiAgYXNzaWduOiBhc3NpZ25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmFzc2lnbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChDLCBhcmdzTGVuZ3RoLCBhcmdzKSB7XG4gIGlmICghaGFzT3duKGZhY3RvcmllcywgYXJnc0xlbmd0aCkpIHtcbiAgICB2YXIgbGlzdCA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IGFyZ3NMZW5ndGg7IGkrKykgbGlzdFtpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIGZhY3Rvcmllc1thcmdzTGVuZ3RoXSA9ICRGdW5jdGlvbignQyxhJywgJ3JldHVybiBuZXcgQygnICsgam9pbihsaXN0LCAnLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2FyZ3NMZW5ndGhdKEMsIGFyZ3MpO1xufTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBkZXRlY3Rpb25cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyAkRnVuY3Rpb24uYmluZCA6IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIEYgPSBhQ2FsbGFibGUodGhpcyk7XG4gIHZhciBQcm90b3R5cGUgPSBGLnByb3RvdHlwZTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJvdW5kKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IGNvbmNhdChwYXJ0QXJncywgYXJyYXlTbGljZShhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kRnVuY3Rpb24gPyBjb25zdHJ1Y3QoRiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogRi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KFByb3RvdHlwZSkpIGJvdW5kRnVuY3Rpb24ucHJvdG90eXBlID0gUHJvdG90eXBlO1xuICByZXR1cm4gYm91bmRGdW5jdGlvbjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxuJCh7IHRhcmdldDogJ0Z1bmN0aW9uJywgcHJvdG86IHRydWUsIGZvcmNlZDogRnVuY3Rpb24uYmluZCAhPT0gYmluZCB9LCB7XG4gIGJpbmQ6IGJpbmRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1IpIHtcbiAgcmV0dXJuIHBhdGhbQ09OU1RSVUNUT1IgKyAnUHJvdG90eXBlJ107XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdGdW5jdGlvbicpLmJpbmQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9uL3ZpcnR1YWwvYmluZCcpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5iaW5kO1xuICByZXR1cm4gaXQgPT09IEZ1bmN0aW9uUHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEZ1bmN0aW9uUHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBGdW5jdGlvblByb3RvdHlwZS5iaW5kKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9iaW5kXCIpOyIsICIvKipcbiAqIERyYXcgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0NpcmNsZShcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICByOiBudW1iZXJcbik6IHZvaWQge1xuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5hcmMoeCwgeSwgciwgMCwgMiAqIE1hdGguUEksIGZhbHNlKTtcbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG4vKipcbiAqIERyYXcgYSBzcXVhcmUuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gSGFsZiBvZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgc3F1YXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd1NxdWFyZShcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICByOiBudW1iZXJcbik6IHZvaWQge1xuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5yZWN0KHggLSByLCB5IC0gciwgciAqIDIsIHIgKiAyKTtcbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG4vKipcbiAqIERyYXcgYW4gZXF1aWxhdGVyYWwgdHJpYW5nbGUgc3RhbmRpbmcgb24gYSBzaWRlLlxuICpcbiAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGlzIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgdG8uXG4gKiBAcGFyYW0geCAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0geSAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB5IGF4aXMuXG4gKiBAcGFyYW0gciAtIEhhbGYgb2YgdGhlIGxlbmd0aCBvZiB0aGUgc2lkZXMuXG4gKiBAcmVtYXJrc1xuICogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FcXVpbGF0ZXJhbF90cmlhbmdsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd1RyaWFuZ2xlKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcblxuICAvLyB0aGUgY2hhbmdlIGluIHJhZGl1cyBhbmQgdGhlIG9mZnNldCBpcyBoZXJlIHRvIGNlbnRlciB0aGUgc2hhcGVcbiAgciAqPSAxLjE1O1xuICB5ICs9IDAuMjc1ICogcjtcblxuICBjb25zdCBzID0gciAqIDI7XG4gIGNvbnN0IHMyID0gcyAvIDI7XG4gIGNvbnN0IGlyID0gKE1hdGguc3FydCgzKSAvIDYpICogczsgLy8gcmFkaXVzIG9mIGlubmVyIGNpcmNsZVxuICBjb25zdCBoID0gTWF0aC5zcXJ0KHMgKiBzIC0gczIgKiBzMik7IC8vIGhlaWdodFxuXG4gIGN0eC5tb3ZlVG8oeCwgeSAtIChoIC0gaXIpKTtcbiAgY3R4LmxpbmVUbyh4ICsgczIsIHkgKyBpcik7XG4gIGN0eC5saW5lVG8oeCAtIHMyLCB5ICsgaXIpO1xuICBjdHgubGluZVRvKHgsIHkgLSAoaCAtIGlyKSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGFuIGVxdWlsYXRlcmFsIHRyaWFuZ2xlIHN0YW5kaW5nIG9uIGEgdmVydGV4LlxuICpcbiAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGlzIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgdG8uXG4gKiBAcGFyYW0geCAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0geSAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB5IGF4aXMuXG4gKiBAcGFyYW0gciAtIEhhbGYgb2YgdGhlIGxlbmd0aCBvZiB0aGUgc2lkZXMuXG4gKiBAcmVtYXJrc1xuICogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FcXVpbGF0ZXJhbF90cmlhbmdsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd1RyaWFuZ2xlRG93bihcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICByOiBudW1iZXJcbik6IHZvaWQge1xuICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgLy8gdGhlIGNoYW5nZSBpbiByYWRpdXMgYW5kIHRoZSBvZmZzZXQgaXMgaGVyZSB0byBjZW50ZXIgdGhlIHNoYXBlXG4gIHIgKj0gMS4xNTtcbiAgeSAtPSAwLjI3NSAqIHI7XG5cbiAgY29uc3QgcyA9IHIgKiAyO1xuICBjb25zdCBzMiA9IHMgLyAyO1xuICBjb25zdCBpciA9IChNYXRoLnNxcnQoMykgLyA2KSAqIHM7IC8vIHJhZGl1cyBvZiBpbm5lciBjaXJjbGVcbiAgY29uc3QgaCA9IE1hdGguc3FydChzICogcyAtIHMyICogczIpOyAvLyBoZWlnaHRcblxuICBjdHgubW92ZVRvKHgsIHkgKyAoaCAtIGlyKSk7XG4gIGN0eC5saW5lVG8oeCArIHMyLCB5IC0gaXIpO1xuICBjdHgubGluZVRvKHggLSBzMiwgeSAtIGlyKTtcbiAgY3R4LmxpbmVUbyh4LCB5ICsgKGggLSBpcikpO1xuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhIHN0YXIuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gVGhlIG91dGVyIHJhZGl1cyBvZiB0aGUgc3Rhci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYXdTdGFyKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIC8vIGh0dHA6Ly93d3cuaHRtbDVjYW52YXN0dXRvcmlhbHMuY29tL2xhYnMvaHRtbDUtY2FudmFzLXN0YXItc3Bpbm5lci9cbiAgY3R4LmJlZ2luUGF0aCgpO1xuXG4gIC8vIHRoZSBjaGFuZ2UgaW4gcmFkaXVzIGFuZCB0aGUgb2Zmc2V0IGlzIGhlcmUgdG8gY2VudGVyIHRoZSBzaGFwZVxuICByICo9IDAuODI7XG4gIHkgKz0gMC4xICogcjtcblxuICBmb3IgKGxldCBuID0gMDsgbiA8IDEwOyBuKyspIHtcbiAgICBjb25zdCByYWRpdXMgPSBuICUgMiA9PT0gMCA/IHIgKiAxLjMgOiByICogMC41O1xuICAgIGN0eC5saW5lVG8oXG4gICAgICB4ICsgcmFkaXVzICogTWF0aC5zaW4oKG4gKiAyICogTWF0aC5QSSkgLyAxMCksXG4gICAgICB5IC0gcmFkaXVzICogTWF0aC5jb3MoKG4gKiAyICogTWF0aC5QSSkgLyAxMClcbiAgICApO1xuICB9XG5cbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG4vKipcbiAqIERyYXcgYSBkaWFtb25kLlxuICpcbiAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGlzIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgdG8uXG4gKiBAcGFyYW0geCAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0geSAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB5IGF4aXMuXG4gKiBAcGFyYW0gciAtIEhhbGYgb2YgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGRpYW1vbmQuXG4gKiBAcmVtYXJrc1xuICogaHR0cDovL3d3dy5odG1sNWNhbnZhc3R1dG9yaWFscy5jb20vbGFicy9odG1sNS1jYW52YXMtc3Rhci1zcGlubmVyL1xuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0RpYW1vbmQoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY3R4LmJlZ2luUGF0aCgpO1xuXG4gIGN0eC5saW5lVG8oeCwgeSArIHIpO1xuICBjdHgubGluZVRvKHggKyByLCB5KTtcbiAgY3R4LmxpbmVUbyh4LCB5IC0gcik7XG4gIGN0eC5saW5lVG8oeCAtIHIsIHkpO1xuXG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGEgcmVjdGFuZ2xlIHdpdGggcm91bmRlZCBjb3JuZXJzLlxuICpcbiAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGlzIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgdG8uXG4gKiBAcGFyYW0geCAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0geSAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB5IGF4aXMuXG4gKiBAcGFyYW0gdyAtIFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLlxuICogQHBhcmFtIGggLSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUuXG4gKiBAcGFyYW0gciAtIFRoZSByYWRpdXMgb2YgdGhlIGNvcm5lcnMuXG4gKiBAcmVtYXJrc1xuICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMjU1NTEyL2hvdy10by1kcmF3LWEtcm91bmRlZC1yZWN0YW5nbGUtb24taHRtbC1jYW52YXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYXdSb3VuZFJlY3QoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgdzogbnVtYmVyLFxuICBoOiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGNvbnN0IHIyZCA9IE1hdGguUEkgLyAxODA7XG4gIGlmICh3IC0gMiAqIHIgPCAwKSB7XG4gICAgciA9IHcgLyAyO1xuICB9IC8vZW5zdXJlIHRoYXQgdGhlIHJhZGl1cyBpc24ndCB0b28gbGFyZ2UgZm9yIHhcbiAgaWYgKGggLSAyICogciA8IDApIHtcbiAgICByID0gaCAvIDI7XG4gIH0gLy9lbnN1cmUgdGhhdCB0aGUgcmFkaXVzIGlzbid0IHRvbyBsYXJnZSBmb3IgeVxuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5tb3ZlVG8oeCArIHIsIHkpO1xuICBjdHgubGluZVRvKHggKyB3IC0gciwgeSk7XG4gIGN0eC5hcmMoeCArIHcgLSByLCB5ICsgciwgciwgcjJkICogMjcwLCByMmQgKiAzNjAsIGZhbHNlKTtcbiAgY3R4LmxpbmVUbyh4ICsgdywgeSArIGggLSByKTtcbiAgY3R4LmFyYyh4ICsgdyAtIHIsIHkgKyBoIC0gciwgciwgMCwgcjJkICogOTAsIGZhbHNlKTtcbiAgY3R4LmxpbmVUbyh4ICsgciwgeSArIGgpO1xuICBjdHguYXJjKHggKyByLCB5ICsgaCAtIHIsIHIsIHIyZCAqIDkwLCByMmQgKiAxODAsIGZhbHNlKTtcbiAgY3R4LmxpbmVUbyh4LCB5ICsgcik7XG4gIGN0eC5hcmMoeCArIHIsIHkgKyByLCByLCByMmQgKiAxODAsIHIyZCAqIDI3MCwgZmFsc2UpO1xuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhbiBlbGxpcHNlLlxuICpcbiAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGlzIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgdG8uXG4gKiBAcGFyYW0geCAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0geSAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2VudGVyIG9uIHRoZSB5IGF4aXMuXG4gKiBAcGFyYW0gdyAtIFRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzZS5cbiAqIEBwYXJhbSBoIC0gVGhlIGhlaWdodCBvZiB0aGUgZWxsaXBzZS5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcbiAqXG4gKiBQb3N0Zml4ICdfdmlzJyBhZGRlZCB0byBkaXNjZXJuIGl0IGZyb20gc3RhbmRhcmQgbWV0aG9kIGVsbGlwc2UoKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYXdFbGxpcHNlKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHc6IG51bWJlcixcbiAgaDogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY29uc3Qga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICB4ZSA9IHggKyB3LCAvLyB4LWVuZFxuICAgIHllID0geSArIGgsIC8vIHktZW5kXG4gICAgeG0gPSB4ICsgdyAvIDIsIC8vIHgtbWlkZGxlXG4gICAgeW0gPSB5ICsgaCAvIDI7IC8vIHktbWlkZGxlXG5cbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBjdHgubW92ZVRvKHgsIHltKTtcbiAgY3R4LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgY3R4LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhbiBpc29tZXRyaWMgY3lsaW5kZXIuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSB3IC0gVGhlIHdpZHRoIG9mIHRoZSBkYXRhYmFzZS5cbiAqIEBwYXJhbSBoIC0gVGhlIGhlaWdodCBvZiB0aGUgZGF0YWJhc2UuXG4gKiBAcmVtYXJrc1xuICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RGF0YWJhc2UoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgdzogbnVtYmVyLFxuICBoOiBudW1iZXJcbik6IHZvaWQge1xuICBjb25zdCBmID0gMSAvIDM7XG4gIGNvbnN0IHdFbGxpcHNlID0gdztcbiAgY29uc3QgaEVsbGlwc2UgPSBoICogZjtcblxuICBjb25zdCBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICBveCA9ICh3RWxsaXBzZSAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICBveSA9IChoRWxsaXBzZSAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgeGUgPSB4ICsgd0VsbGlwc2UsIC8vIHgtZW5kXG4gICAgeWUgPSB5ICsgaEVsbGlwc2UsIC8vIHktZW5kXG4gICAgeG0gPSB4ICsgd0VsbGlwc2UgLyAyLCAvLyB4LW1pZGRsZVxuICAgIHltID0geSArIGhFbGxpcHNlIC8gMiwgLy8geS1taWRkbGVcbiAgICB5bWIgPSB5ICsgKGggLSBoRWxsaXBzZSAvIDIpLCAvLyB5LW1pZGxsZSwgYm90dG9tIGVsbGlwc2VcbiAgICB5ZWIgPSB5ICsgaDsgLy8geS1lbmQsIGJvdHRvbSBlbGxpcHNlXG5cbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBjdHgubW92ZVRvKHhlLCB5bSk7XG5cbiAgY3R4LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuXG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgY3R4LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG5cbiAgY3R4LmxpbmVUbyh4ZSwgeW1iKTtcblxuICBjdHguYmV6aWVyQ3VydmVUbyh4ZSwgeW1iICsgb3ksIHhtICsgb3gsIHllYiwgeG0sIHllYik7XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllYiwgeCwgeW1iICsgb3ksIHgsIHltYik7XG5cbiAgY3R4LmxpbmVUbyh4LCB5bSk7XG59XG5cbi8qKlxuICogRHJhdyBhIGRhc2hlZCBsaW5lLlxuICpcbiAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGlzIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgdG8uXG4gKiBAcGFyYW0geCAtIFRoZSBzdGFydCBwb3NpdGlvbiBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgc3RhcnQgcG9zaXRpb24gb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSB4MiAtIFRoZSBlbmQgcG9zaXRpb24gb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5MiAtIFRoZSBlbmQgcG9zaXRpb24gb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSBwYXR0ZXJuIC0gTGlzdCBvZiBsZW5ndGhzIHN0YXJ0aW5nIHdpdGggbGluZSBhbmQgdGhlbiBhbHRlcm5hdGluZyBiZXR3ZWVuIHNwYWNlIGFuZCBsaW5lLlxuICogQGF1dGhvciBEYXZpZCBKb3JkYW5cbiAqIEByZW1hcmtzXG4gKiBkYXRlIDIwMTItMDgtMDhcbiAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDU3NjcyNC9kb3R0ZWQtc3Ryb2tlLWluLWNhbnZhc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0Rhc2hlZExpbmUoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgeDI6IG51bWJlcixcbiAgeTI6IG51bWJlcixcbiAgcGF0dGVybjogbnVtYmVyW11cbik6IHZvaWQge1xuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5tb3ZlVG8oeCwgeSk7XG5cbiAgY29uc3QgcGF0dGVybkxlbmd0aCA9IHBhdHRlcm4ubGVuZ3RoO1xuICBjb25zdCBkeCA9IHgyIC0geDtcbiAgY29uc3QgZHkgPSB5MiAtIHk7XG4gIGNvbnN0IHNsb3BlID0gZHkgLyBkeDtcbiAgbGV0IGRpc3RSZW1haW5pbmcgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICBsZXQgcGF0dGVybkluZGV4ID0gMDtcbiAgbGV0IGRyYXcgPSB0cnVlO1xuICBsZXQgeFN0ZXAgPSAwO1xuICBsZXQgZGFzaExlbmd0aCA9ICtwYXR0ZXJuWzBdO1xuXG4gIHdoaWxlIChkaXN0UmVtYWluaW5nID49IDAuMSkge1xuICAgIGRhc2hMZW5ndGggPSArcGF0dGVybltwYXR0ZXJuSW5kZXgrKyAlIHBhdHRlcm5MZW5ndGhdO1xuICAgIGlmIChkYXNoTGVuZ3RoID4gZGlzdFJlbWFpbmluZykge1xuICAgICAgZGFzaExlbmd0aCA9IGRpc3RSZW1haW5pbmc7XG4gICAgfVxuXG4gICAgeFN0ZXAgPSBNYXRoLnNxcnQoKGRhc2hMZW5ndGggKiBkYXNoTGVuZ3RoKSAvICgxICsgc2xvcGUgKiBzbG9wZSkpO1xuICAgIHhTdGVwID0gZHggPCAwID8gLXhTdGVwIDogeFN0ZXA7XG4gICAgeCArPSB4U3RlcDtcbiAgICB5ICs9IHNsb3BlICogeFN0ZXA7XG5cbiAgICBpZiAoZHJhdyA9PT0gdHJ1ZSkge1xuICAgICAgY3R4LmxpbmVUbyh4LCB5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICB9XG5cbiAgICBkaXN0UmVtYWluaW5nIC09IGRhc2hMZW5ndGg7XG4gICAgZHJhdyA9ICFkcmF3O1xuICB9XG59XG5cbi8qKlxuICogRHJhdyBhIGhleGFnb24uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gVGhlIHJhZGl1cyBvZiB0aGUgaGV4YWdvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYXdIZXhhZ29uKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY29uc3Qgc2lkZXMgPSA2O1xuICBjb25zdCBhID0gKE1hdGguUEkgKiAyKSAvIHNpZGVzO1xuICBjdHgubW92ZVRvKHggKyByLCB5KTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBzaWRlczsgaSsrKSB7XG4gICAgY3R4LmxpbmVUbyh4ICsgciAqIE1hdGguY29zKGEgKiBpKSwgeSArIHIgKiBNYXRoLnNpbihhICogaSkpO1xuICB9XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuY29uc3Qgc2hhcGVNYXAgPSB7XG4gIGNpcmNsZTogZHJhd0NpcmNsZSxcbiAgZGFzaGVkTGluZTogZHJhd0Rhc2hlZExpbmUsXG4gIGRhdGFiYXNlOiBkcmF3RGF0YWJhc2UsXG4gIGRpYW1vbmQ6IGRyYXdEaWFtb25kLFxuICBlbGxpcHNlOiBkcmF3RWxsaXBzZSxcbiAgZWxsaXBzZV92aXM6IGRyYXdFbGxpcHNlLFxuICBoZXhhZ29uOiBkcmF3SGV4YWdvbixcbiAgcm91bmRSZWN0OiBkcmF3Um91bmRSZWN0LFxuICBzcXVhcmU6IGRyYXdTcXVhcmUsXG4gIHN0YXI6IGRyYXdTdGFyLFxuICB0cmlhbmdsZTogZHJhd1RyaWFuZ2xlLFxuICB0cmlhbmdsZURvd246IGRyYXdUcmlhbmdsZURvd24sXG59O1xuXG4vKipcbiAqIFJldHVybnMgZWl0aGVyIGN1c3RvbSBvciBuYXRpdmUgZHJhd2luZyBmdW5jdGlvbiBiYXNlIG9uIHN1cHBsaWVkIG5hbWUuXG4gKlxuICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24uIEVpdGhlciB0aGUgbmFtZSBvZiBhXG4gKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgcHJvcGVydHkgb3IgYW4gZXhwb3J0IGZyb20gc2hhcGVzLnRzIHdpdGhvdXQgdGhlXG4gKiBkcmF3IHByZWZpeC5cbiAqIEByZXR1cm5zIFRoZSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGZvciByZW5kZXJpbmcuIEluIGNhc2Ugb2YgbmF0aXZlXG4gKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgZnVuY3Rpb24gdGhlIEFQSSBpcyBub3JtYWxpemVkIHRvXG4gKiBgKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCAuLi5vcmlnaW5hbEFyZ3MpID0+IHZvaWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hhcGUoXG4gIG5hbWU6IGtleW9mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IGtleW9mIHR5cGVvZiBzaGFwZU1hcFxuKTogYW55IHtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzaGFwZU1hcCwgbmFtZSkpIHtcbiAgICByZXR1cm4gKHNoYXBlTWFwIGFzIGFueSlbbmFtZV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgIChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlIGFzIGFueSlbbmFtZV0uY2FsbChjdHgsIGFyZ3MpO1xuICAgIH07XG4gIH1cbn1cbiIsICJcclxuLyoqXHJcbiAqIEV4cG9zZSBgRW1pdHRlcmAuXHJcbiAqL1xyXG5cclxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgbW9kdWxlLmV4cG9ydHMgPSBFbWl0dGVyO1xyXG59XHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZSBhIG5ldyBgRW1pdHRlcmAuXHJcbiAqXHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gRW1pdHRlcihvYmopIHtcclxuICBpZiAob2JqKSByZXR1cm4gbWl4aW4ob2JqKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNaXhpbiB0aGUgZW1pdHRlciBwcm9wZXJ0aWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXHJcbiAqIEByZXR1cm4ge09iamVjdH1cclxuICogQGFwaSBwcml2YXRlXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gbWl4aW4ob2JqKSB7XHJcbiAgZm9yICh2YXIga2V5IGluIEVtaXR0ZXIucHJvdG90eXBlKSB7XHJcbiAgICBvYmpba2V5XSA9IEVtaXR0ZXIucHJvdG90eXBlW2tleV07XHJcbiAgfVxyXG4gIHJldHVybiBvYmo7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMaXN0ZW4gb24gdGhlIGdpdmVuIGBldmVudGAgd2l0aCBgZm5gLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cclxuICogQHJldHVybiB7RW1pdHRlcn1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5FbWl0dGVyLnByb3RvdHlwZS5vbiA9XHJcbkVtaXR0ZXIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgZm4pe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuICAodGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSA9IHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF0gfHwgW10pXHJcbiAgICAucHVzaChmbik7XHJcbiAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBgZXZlbnRgIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBpbnZva2VkIGEgc2luZ2xlXHJcbiAqIHRpbWUgdGhlbiBhdXRvbWF0aWNhbGx5IHJlbW92ZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxyXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbihldmVudCwgZm4pe1xyXG4gIGZ1bmN0aW9uIG9uKCkge1xyXG4gICAgdGhpcy5vZmYoZXZlbnQsIG9uKTtcclxuICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgfVxyXG5cclxuICBvbi5mbiA9IGZuO1xyXG4gIHRoaXMub24oZXZlbnQsIG9uKTtcclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgdGhlIGdpdmVuIGNhbGxiYWNrIGZvciBgZXZlbnRgIG9yIGFsbFxyXG4gKiByZWdpc3RlcmVkIGNhbGxiYWNrcy5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXHJcbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuRW1pdHRlci5wcm90b3R5cGUub2ZmID1cclxuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxyXG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxyXG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQsIGZuKXtcclxuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XHJcblxyXG4gIC8vIGFsbFxyXG4gIGlmICgwID09IGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9O1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyBzcGVjaWZpYyBldmVudFxyXG4gIHZhciBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdO1xyXG4gIGlmICghY2FsbGJhY2tzKSByZXR1cm4gdGhpcztcclxuXHJcbiAgLy8gcmVtb3ZlIGFsbCBoYW5kbGVyc1xyXG4gIGlmICgxID09IGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyByZW1vdmUgc3BlY2lmaWMgaGFuZGxlclxyXG4gIHZhciBjYjtcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgY2IgPSBjYWxsYmFja3NbaV07XHJcbiAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xyXG4gICAgICBjYWxsYmFja3Muc3BsaWNlKGksIDEpO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFJlbW92ZSBldmVudCBzcGVjaWZpYyBhcnJheXMgZm9yIGV2ZW50IHR5cGVzIHRoYXQgbm9cclxuICAvLyBvbmUgaXMgc3Vic2NyaWJlZCBmb3IgdG8gYXZvaWQgbWVtb3J5IGxlYWsuXHJcbiAgaWYgKGNhbGxiYWNrcy5sZW5ndGggPT09IDApIHtcclxuICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogRW1pdCBgZXZlbnRgIHdpdGggdGhlIGdpdmVuIGFyZ3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcGFyYW0ge01peGVkfSAuLi5cclxuICogQHJldHVybiB7RW1pdHRlcn1cclxuICovXHJcblxyXG5FbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24oZXZlbnQpe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuXHJcbiAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpXHJcbiAgICAsIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcblxyXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcclxuICB9XHJcblxyXG4gIGlmIChjYWxsYmFja3MpIHtcclxuICAgIGNhbGxiYWNrcyA9IGNhbGxiYWNrcy5zbGljZSgwKTtcclxuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBjYWxsYmFja3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcclxuICAgICAgY2FsbGJhY2tzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJuIGFycmF5IG9mIGNhbGxiYWNrcyBmb3IgYGV2ZW50YC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEByZXR1cm4ge0FycmF5fVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uKGV2ZW50KXtcclxuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XHJcbiAgcmV0dXJuIHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF0gfHwgW107XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdGhpcyBlbWl0dGVyIGhhcyBgZXZlbnRgIGhhbmRsZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHJldHVybiB7Qm9vbGVhbn1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5FbWl0dGVyLnByb3RvdHlwZS5oYXNMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudCl7XHJcbiAgcmV0dXJuICEhIHRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGg7XHJcbn07XHJcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9ICRPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9ICFpc09iamVjdChJdGVyYXRvclByb3RvdHlwZSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdGVzdCA9IHt9O1xuICAvLyBGRjQ0LSBsZWdhY3kgaXRlcmF0b3JzIGNhc2VcbiAgcmV0dXJuIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXS5jYWxsKHRlc3QpICE9PSB0ZXN0O1xufSk7XG5cbmlmIChORVdfSVRFUkFUT1JfUFJPVE9UWVBFKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1AQGl0ZXJhdG9yXG5pZiAoIWlzQ2FsbGFibGUoSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICBkZWZpbmVCdWlsdEluKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gJE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyAkT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzT3duKG9iamVjdCwgSUVfUFJPVE8pKSByZXR1cm4gb2JqZWN0W0lFX1BST1RPXTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBpZiAoaXNDYWxsYWJsZShjb25zdHJ1Y3RvcikgJiYgb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiAkT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW51bWVyYWJsZSkgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVEFHLCBTVEFUSUMsIFNFVF9NRVRIT0QpIHtcbiAgaWYgKGl0KSB7XG4gICAgdmFyIHRhcmdldCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gICAgfVxuICAgIGlmIChTRVRfTUVUSE9EICYmICFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsICd0b1N0cmluZycsIHRvU3RyaW5nKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQsIEVOVU1FUkFCTEVfTkVYVCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCshRU5VTUVSQUJMRV9ORVhULCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKHR5cGVvZiBhcmd1bWVudCA9PSAnb2JqZWN0JyB8fCBpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LXNldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgc2V0dGVyID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJywgJ3NldCcpO1xuICAgIHNldHRlcih0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuXG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvciwgeyBuYW1lOiBERUZBVUxUIH0pO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYENyZWF0ZUl0ZXJSZXN1bHRPYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVpdGVycmVzdWx0b2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IGRvbmUgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcblxudmFyIFNUUklOR19JVEVSQVRPUiA9ICdTdHJpbmcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1RSSU5HX0lURVJBVE9SKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLUBAaXRlcmF0b3JcbmRlZmluZUl0ZXJhdG9yKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTVFJJTkdfSVRFUkFUT1IsXG4gICAgc3RyaW5nOiB0b1N0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXN0cmluZ2l0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc3RyaW5nID0gc3RhdGUuc3RyaW5nO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleDtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocG9pbnQsIGZhbHNlKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBlbXB0eSA9IFtdO1xudmFyIGNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgY29uc3RydWN0b3JSZWdFeHAgPSAvXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKTtcbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gIWNvbnN0cnVjdG9yUmVnRXhwLnRlc3Qobm9vcCk7XG5cbnZhciBpc0NvbnN0cnVjdG9yTW9kZXJuID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3RydWN0KG5vb3AsIGVtcHR5LCBhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgaXNDb25zdHJ1Y3RvckxlZ2FjeSA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGNsYXNzb2YoYXJndW1lbnQpKSB7XG4gICAgY2FzZSAnQXN5bmNGdW5jdGlvbic6XG4gICAgY2FzZSAnR2VuZXJhdG9yRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nOiByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyB3ZSBjYW4ndCBjaGVjayAucHJvdG90eXBlIHNpbmNlIGNvbnN0cnVjdG9ycyBwcm9kdWNlZCBieSAuYmluZCBoYXZlbid0IGl0XG4gICAgLy8gYEZ1bmN0aW9uI3RvU3RyaW5nYCB0aHJvd3Mgb24gc29tZSBidWlsdC1pdCBmdW5jdGlvbiBpbiBzb21lIGxlZ2FjeSBlbmdpbmVzXG4gICAgLy8gKGZvciBleGFtcGxlLCBgRE9NUXVhZGAgYW5kIHNpbWlsYXIgaW4gRkY0MS0pXG4gICAgcmV0dXJuIElOQ09SUkVDVF9UT19TVFJJTkcgfHwgISFleGVjKGNvbnN0cnVjdG9yUmVnRXhwLCBpbnNwZWN0U291cmNlKGFyZ3VtZW50KSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmlzQ29uc3RydWN0b3JMZWdhY3kuc2hhbSA9IHRydWU7XG5cbi8vIGBJc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSAhY29uc3RydWN0IHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNhbGxlZDtcbiAgcmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKE9iamVjdClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRydWU7IH0pXG4gICAgfHwgY2FsbGVkO1xufSkgPyBpc0NvbnN0cnVjdG9yTGVnYWN5IDogaXNDb25zdHJ1Y3Rvck1vZGVybjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgcHJvcGVydHlLZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChwcm9wZXJ0eUtleSBpbiBvYmplY3QpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBwcm9wZXJ0eUtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W3Byb3BlcnR5S2V5XSA9IHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgcmV0dXJuIGdldE1ldGhvZChpdCwgSVRFUkFUT1IpXG4gICAgfHwgZ2V0TWV0aG9kKGl0LCAnQEBpdGVyYXRvcicpXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCB1c2luZ0l0ZXJhdG9yKSB7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gZ2V0SXRlcmF0b3JNZXRob2QoYXJndW1lbnQpIDogdXNpbmdJdGVyYXRvcjtcbiAgaWYgKGFDYWxsYWJsZShpdGVyYXRvck1ldGhvZCkpIHJldHVybiBhbk9iamVjdChjYWxsKGl0ZXJhdG9yTWV0aG9kLCBhcmd1bWVudCkpO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gIHZhciBJU19DT05TVFJVQ1RPUiA9IGlzQ29uc3RydWN0b3IodGhpcyk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWFwZm4gPSBhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gIGlmIChtYXBwaW5nKSBtYXBmbiA9IGJpbmQobWFwZm4sIGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBnZXRJdGVyYXRvck1ldGhvZChPKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvciwgbmV4dCwgdmFsdWU7XG4gIC8vIGlmIHRoZSB0YXJnZXQgaXMgbm90IGl0ZXJhYmxlIG9yIGl0J3MgYW4gYXJyYXkgd2l0aCB0aGUgZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBhIHNpbXBsZSBjYXNlXG4gIGlmIChpdGVyYXRvck1ldGhvZCAmJiAhKHRoaXMgPT09ICRBcnJheSAmJiBpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlcmF0b3JNZXRob2QpKSkge1xuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoTywgaXRlcmF0b3JNZXRob2QpO1xuICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMoKSA6IFtdO1xuICAgIGZvciAoOyEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKGxlbmd0aCkgOiAkQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgY2FsbGVkID0gMDtcbiAgdmFyIGl0ZXJhdG9yV2l0aFJldHVybiA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBkb25lOiAhIWNhbGxlZCsrIH07XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKCkge1xuICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIGl0ZXJhdG9yV2l0aFJldHVybltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBuby10aHJvdy1saXRlcmFsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmF0b3JXaXRoUmV0dXJuLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBTS0lQX0NMT1NJTkcpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IHJldHVybiBmYWxzZTsgfSAvLyB3b3JrYXJvdW5kIG9mIG9sZCBXZWJLaXQgKyBgZXZhbGAgYnVnXG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mcm9tJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xuXG52YXIgSU5DT1JSRUNUX0lURVJBVElPTiA9ICFjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmFibGUpO1xufSk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxuJCh7IHRhcmdldDogJ0FycmF5Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgZnJvbTogZnJvbVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZnJvbScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguQXJyYXkuZnJvbTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvYXJyYXkvZnJvbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2Zyb21cIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoaW5kZXgsIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh0YXJnZXRbaW5kZXhdLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZmFsc2UpO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG52YXIgdmFsdWVzID0gSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDQ1LSBidWdcbmlmICghSVNfUFVSRSAmJiBERVNDUklQVE9SUyAmJiB2YWx1ZXMubmFtZSAhPT0gJ3ZhbHVlcycpIHRyeSB7XG4gIGRlZmluZVByb3BlcnR5KHZhbHVlcywgJ25hbWUnLCB7IHZhbHVlOiAndmFsdWVzJyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvck1ldGhvZDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSAmJiBjbGFzc29mKENvbGxlY3Rpb25Qcm90b3R5cGUpICE9PSBUT19TVFJJTkdfVEFHKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIENPTExFQ1RJT05fTkFNRSk7XG4gIH1cbiAgSXRlcmF0b3JzW0NPTExFQ1RJT05fTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL2VzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Z1bGwvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kXCIpOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAhPT0gZGVmaW5lUHJvcGVydHksIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnR5OiBkZWZpbmVQcm9wZXJ0eVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5LnNoYW0pIGRlZmluZVByb3BlcnR5LnNoYW0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIGxlbik7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgMSk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICB2YXIgcmVzdWx0ID0gJEFycmF5KG1heChmaW4gLSBrLCAwKSk7XG4gIHZhciBuID0gMDtcbiAgZm9yICg7IGsgPCBmaW47IGsrKywgbisrKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICByZXN1bHQubGVuZ3RoID0gbjtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZSAqL1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUnKTtcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGFycmF5U2xpY2Uod2luZG93TmFtZXMpO1xuICB9XG59O1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgY2xhc3NvZihpdCkgPT09ICdXaW5kb3cnXG4gICAgPyBnZXRXaW5kb3dOYW1lcyhpdClcbiAgICA6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG5leHBvcnRzLmYgPSB3ZWxsS25vd25TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgdmFyIFN5bWJvbCA9IHBhdGguU3ltYm9sIHx8IChwYXRoLlN5bWJvbCA9IHt9KTtcbiAgaWYgKCFoYXNPd24oU3ltYm9sLCBOQU1FKSkgZGVmaW5lUHJvcGVydHkoU3ltYm9sLCBOQU1FLCB7XG4gICAgdmFsdWU6IHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZihOQU1FKVxuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgdmFyIFN5bWJvbFByb3RvdHlwZSA9IFN5bWJvbCAmJiBTeW1ib2wucHJvdG90eXBlO1xuICB2YXIgdmFsdWVPZiA9IFN5bWJvbFByb3RvdHlwZSAmJiBTeW1ib2xQcm90b3R5cGUudmFsdWVPZjtcbiAgdmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuICBpZiAoU3ltYm9sUHJvdG90eXBlICYmICFTeW1ib2xQcm90b3R5cGVbVE9fUFJJTUlUSVZFXSkge1xuICAgIC8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgLmxlbmd0aFxuICAgIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCBUT19QUklNSVRJVkUsIGZ1bmN0aW9uIChoaW50KSB7XG4gICAgICByZXR1cm4gY2FsbCh2YWx1ZU9mLCB0aGlzKTtcbiAgICB9LCB7IGFyaXR5OiAxIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlclJlamVjdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9SRUpFQ1QgPSBUWVBFID09PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgfHwgSVNfRklMVEVSX1JFSkVDVCA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gZXZlcnlcbiAgICAgICAgICBjYXNlIDc6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyUmVqZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJSZWplY3RgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbiAgZmlsdGVyUmVqZWN0OiBjcmVhdGVNZXRob2QoNylcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIG5hdGl2ZU9iamVjdENyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG5cbnZhciBISURERU4gPSBzaGFyZWRLZXkoJ2hpZGRlbicpO1xudmFyIFNZTUJPTCA9ICdTeW1ib2wnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTWU1CT0wpO1xuXG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbCAmJiAkU3ltYm9sW1BST1RPVFlQRV07XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmY7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90b3R5cGVTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoTywgUCwgQXR0cmlidXRlcykge1xuICB2YXIgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIFApO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcikgZGVsZXRlIE9iamVjdFByb3RvdHlwZVtQXTtcbiAgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yICYmIE8gIT09IE9iamVjdFByb3RvdHlwZSkge1xuICAgIG5hdGl2ZURlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZSwgUCwgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcik7XG4gIH1cbn07XG5cbnZhciBzZXRTeW1ib2xEZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0Q3JlYXRlKG5hdGl2ZURlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9PSA3O1xufSkgPyBmYWxsYmFja0RlZmluZVByb3BlcnR5IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZShTeW1ib2xQcm90b3R5cGUpO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgaWYgKE8gPT09IE9iamVjdFByb3RvdHlwZSkgJGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFAsIEF0dHJpYnV0ZXMpO1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUF0dHJpYnV0ZXMuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXNPd24oTywgSElEREVOKSkgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgSElEREVOLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwge30pKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBjYWxsKHNldHRlciwgT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhc093bih0aGlzLCBISURERU4pICYmIGhhc093bih0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSh0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIFVTRV9TRVRURVIpIHNldFN5bWJvbERlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6IHNldHRlciB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcsIGRlc2NyaXB0aW9uKTtcbiAgfTtcblxuICBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sW1BST1RPVFlQRV07XG5cbiAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnRhZztcbiAgfSk7XG5cbiAgZGVmaW5lQnVpbHRJbigkU3ltYm9sLCAnd2l0aG91dFNldHRlcicsIGZ1bmN0aW9uIChkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiB3cmFwKHVpZChkZXNjcmlwdGlvbiksIGRlc2NyaXB0aW9uKTtcbiAgfSk7XG5cbiAgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgZGVmaW5lUHJvcGVydGllc01vZHVsZS5mID0gJGRlZmluZVByb3BlcnRpZXM7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2VsbEtub3duU3ltYm9sKG5hbWUpLCBuYW1lKTtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1TeW1ib2wtZGVzY3JpcHRpb25cbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoU3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIUlTX1BVUkUpIHtcbiAgICAgIGRlZmluZUJ1aWx0SW4oT2JqZWN0UHJvdG90eXBlLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIU5BVElWRV9TWU1CT0wgfSwge1xuICBTeW1ib2w6ICRTeW1ib2xcbn0pO1xuXG4kZm9yRWFjaChvYmplY3RLZXlzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlZmluZVdlbGxLbm93blN5bWJvbChuYW1lKTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiBTWU1CT0wsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gZmFsc2U7IH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvclxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCBTWU1CT0wpO1xuXG5oaWRkZW5LZXlzW0hJRERFTl0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHNhZmUgKi9cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTCAmJiAhIVN5bWJvbFsnZm9yJ10gJiYgISFTeW1ib2wua2V5Rm9yO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5mb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcoa2V5KTtcbiAgICBpZiAoaGFzT3duKFN0cmluZ1RvU3ltYm9sUmVnaXN0cnksIHN0cmluZykpIHJldHVybiBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ107XG4gICAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKHN0cmluZyk7XG4gICAgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddID0gc3ltYm9sO1xuICAgIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltYm9sXSA9IHN0cmluZztcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wua2V5Rm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmtleWZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IG5ldyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoc3ltKSArICcgaXMgbm90IGEgc3ltYm9sJyk7XG4gICAgaWYgKGhhc093bihTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5LCBzeW0pKSByZXR1cm4gU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1dO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcGxhY2VyKSB7XG4gIGlmIChpc0NhbGxhYmxlKHJlcGxhY2VyKSkgcmV0dXJuIHJlcGxhY2VyO1xuICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXR1cm47XG4gIHZhciByYXdMZW5ndGggPSByZXBsYWNlci5sZW5ndGg7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlbWVudCA9IHJlcGxhY2VyW2ldO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykgcHVzaChrZXlzLCBlbGVtZW50KTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnbnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnTnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbicpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbnZhciB0ZXN0ZXIgPSAvW1xcdUQ4MDAtXFx1REZGRl0vZztcbnZhciBsb3cgPSAvXltcXHVEODAwLVxcdURCRkZdJC87XG52YXIgaGkgPSAvXltcXHVEQzAwLVxcdURGRkZdJC87XG5cbnZhciBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKSgnc3RyaW5naWZ5IGRldGVjdGlvbicpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT09ICdbbnVsbF0nXG4gICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT09ICd7fSc7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG52YXIgSUxMX0ZPUk1FRF9VTklDT0RFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxudmFyIHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4ID0gZnVuY3Rpb24gKGl0LCByZXBsYWNlcikge1xuICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgdmFyICRyZXBsYWNlciA9IGdldFJlcGxhY2VyRnVuY3Rpb24ocmVwbGFjZXIpO1xuICBpZiAoIWlzQ2FsbGFibGUoJHJlcGxhY2VyKSAmJiAoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgYXJnc1sxXSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gc29tZSBvbGQgaW1wbGVtZW50YXRpb25zIChsaWtlIFdlYktpdCkgY291bGQgcGFzcyBudW1iZXJzIGFzIGtleXNcbiAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCAkU3RyaW5nKGtleSksIHZhbHVlKTtcbiAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9O1xuICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG59O1xuXG52YXIgZml4SWxsRm9ybWVkID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCArIDEpO1xuICBpZiAoKGV4ZWMobG93LCBtYXRjaCkgJiYgIWV4ZWMoaGksIG5leHQpKSB8fCAoZXhlYyhoaSwgbWF0Y2gpICYmICFleGVjKGxvdywgcHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBudW1iZXJUb1N0cmluZyhjaGFyQ29kZUF0KG1hdGNoLCAwKSwgMTYpO1xuICB9IHJldHVybiBtYXRjaDtcbn07XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBhcml0eTogMywgZm9yY2VkOiBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gfHwgSUxMX0ZPUk1FRF9VTklDT0RFIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFwcGx5KFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA/IHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IDogJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgICByZXR1cm4gSUxMX0ZPUk1FRF9VTklDT0RFICYmIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXBsYWNlKHJlc3VsdCwgdGVzdGVyLCBmaXhJbGxGb3JtZWQpIDogcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0l0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuYXN5bmNpdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5oYXNJbnN0YW5jZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmhhc2luc3RhbmNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2hhc0luc3RhbmNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pc2NvbmNhdHNwcmVhZGFibGVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLml0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaEFsbGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoYWxsXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoQWxsJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5yZXBsYWNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucmVwbGFjZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zZWFyY2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zZWFyY2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc2VhcmNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGVjaWVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BlY2llc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGxpdGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwbGl0XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwbGl0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnRvUHJpbWl0aXZlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9wcmltaXRpdmVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIGBTeW1ib2wudG9TdHJpbmdUYWdgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3N0cmluZ3RhZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnZXRCdWlsdEluKCdTeW1ib2wnKSwgJ1N5bWJvbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wudW5zY29wYWJsZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC51bnNjb3BhYmxlc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gSlNPTltAQHRvU3RyaW5nVGFnXSBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXMtY29uY2F0LXNwcmVhZGFibGUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXRoLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC50by1zdHJpbmctdGFnJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIE1FVEFEQVRBID0gd2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vLyBGdW5jdGlvbi5wcm90b3R5cGVbQEBtZXRhZGF0YV1cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuaWYgKEZ1bmN0aW9uUHJvdG90eXBlW01FVEFEQVRBXSA9PT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEZ1bmN0aW9uUHJvdG90eXBlLCBNRVRBREFUQSwge1xuICAgIHZhbHVlOiBudWxsXG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXN5bmMtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0Rpc3Bvc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmRpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2Rpc3Bvc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvcnNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3N5bWJvbCcpO1xuXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5mdW5jdGlvbi5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciBrZXlGb3IgPSBTeW1ib2wua2V5Rm9yO1xudmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbCB8fCBmdW5jdGlvbiBpc1JlZ2lzdGVyZWRTeW1ib2wodmFsdWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4ga2V5Rm9yKHRoaXNTeW1ib2xWYWx1ZSh2YWx1ZSkpICE9PSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUmVnaXN0ZXJlZFN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZCcpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzUmVnaXN0ZXJlZFN5bWJvbDogaXNSZWdpc3RlcmVkU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciAkaXNXZWxsS25vd25TeW1ib2wgPSBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2w7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldEJ1aWx0SW4oJ09iamVjdCcsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyk7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG5mb3IgKHZhciBpID0gMCwgc3ltYm9sS2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKSwgc3ltYm9sS2V5c0xlbmd0aCA9IHN5bWJvbEtleXMubGVuZ3RoOyBpIDwgc3ltYm9sS2V5c0xlbmd0aDsgaSsrKSB7XG4gIC8vIHNvbWUgb2xkIGVuZ2luZXMgdGhyb3dzIG9uIGFjY2VzcyB0byBzb21lIGtleXMgbGlrZSBgYXJndW1lbnRzYCBvciBgY2FsbGVyYFxuICB0cnkge1xuICAgIHZhciBzeW1ib2xLZXkgPSBzeW1ib2xLZXlzW2ldO1xuICAgIGlmIChpc1N5bWJvbChTeW1ib2xbc3ltYm9sS2V5XSkpIHdlbGxLbm93blN5bWJvbChzeW1ib2xLZXkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNXZWxsS25vd25TeW1ib2wodmFsdWUpIHtcbiAgaWYgKCRpc1dlbGxLbm93blN5bWJvbCAmJiAkaXNXZWxsS25vd25TeW1ib2wodmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICB2YXIgc3ltYm9sID0gdGhpc1N5bWJvbFZhbHVlKHZhbHVlKTtcbiAgICBmb3IgKHZhciBqID0gMCwga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoOyBqIDwga2V5c0xlbmd0aDsgaisrKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxIC0tIHBvbHlmaWxsZWQgc3ltYm9scyBjYXNlXG4gICAgICBpZiAoV2VsbEtub3duU3ltYm9sc1N0b3JlW2tleXNbal1dID09IHN5bWJvbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duU3ltYm9sOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGVyYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaGVyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5vYnNlcnZhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdvYnNlcnZhYmxlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkYCBtZXRob2Rcbi8vIG9ic29sZXRlIHZlcnNpb24gb2YgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1JlZ2lzdGVyZWRTeW1ib2wnIH0sIHtcbiAgaXNSZWdpc3RlcmVkOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duJyk7XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25gIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1dlbGxLbm93blN5bWJvbCcsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YUtleWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YUtleScpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnBhdHRlcm5NYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncGF0dGVybk1hdGNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZUFsbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1hdGNoZXInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEta2V5Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucGF0dGVybi1tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG52YXIgV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKCdpdGVyYXRvcicpO1xuIiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX1N5bWJvbCRpdGVyYXRvciBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBfU3ltYm9sJGl0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBfU3ltYm9sICYmIG8gIT09IF9TeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufSIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ3RvUHJpbWl0aXZlJyk7XG4iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBfU3ltYm9sJHRvUHJpbWl0aXZlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL3RvLXByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W19TeW1ib2wkdG9QcmltaXRpdmVdO1xuICBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKF90eXBlb2YocmVzKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlcztcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7XG59IiwgImltcG9ydCBfT2JqZWN0JGRlZmluZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxuLy8gYEFycmF5LmlzQXJyYXlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5pc2FycmF5XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNBcnJheTogaXNBcnJheVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pcy1hcnJheScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguQXJyYXkuaXNBcnJheTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvYXJyYXkvaXMtYXJyYXknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IGFuZCBTYWZhcmkgPD0gMTUuNCwgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTI2ODFcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkucHVzaCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9UT19MRU5HVEggfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnB1c2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucHVzaFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHB1c2g6IGZ1bmN0aW9uIHB1c2goaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGFyZ0NvdW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHtcbiAgICAgIE9bbGVuXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGxlbisrO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4pO1xuICAgIHJldHVybiBsZW47XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucHVzaCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnB1c2g7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcHVzaCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5wdXNoO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5wdXNoKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3B1c2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBuYXRpdmVTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zbGljZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc2xpY2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59IiwgImltcG9ydCBfc2xpY2VJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanNcIjtcbmltcG9ydCBfQXJyYXkkZnJvbSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2Zyb20uanNcIjtcbmltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgdmFyIF9jb250ZXh0O1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IF9zbGljZUluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykpLmNhbGwoX2NvbnRleHQsIDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIF9BcnJheSRmcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCAiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwgImltcG9ydCBfQXJyYXkkaXNBcnJheSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2lzLWFycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChfQXJyYXkkaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsICJpbXBvcnQgX1N5bWJvbCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiO1xuaW1wb3J0IF9nZXRJdGVyYXRvck1ldGhvZCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanNcIjtcbmltcG9ydCBfcHVzaEluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9wdXNoLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkge1xuICB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBfU3ltYm9sICYmIF9nZXRJdGVyYXRvck1ldGhvZChyKSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKF9wdXNoSW5zdGFuY2VQcm9wZXJ0eShhKS5jYWxsKGEsIGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgbyA9ICEwLCBuID0gcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmICYmIG51bGwgIT0gdFtcInJldHVyblwiXSAmJiAodSA9IHRbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG8pIHRocm93IG47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgImltcG9ydCBhcnJheVdpdGhvdXRIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlU3ByZWFkIGZyb20gXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn0iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59IiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiO1xuaW1wb3J0IF9BcnJheSRmcm9tIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgX1N5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBfZ2V0SXRlcmF0b3JNZXRob2QoaXRlcikgIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gX0FycmF5JGZyb20oaXRlcik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmNvbmNhdDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9jb25jYXQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuY29uY2F0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5jb25jYXQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvY29uY2F0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc2xpY2VcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvaXMtYXJyYXlcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5tYXAnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5tYXA7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvbWFwJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0Lm1hcDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUubWFwKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL21hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRGF0ZSA9IERhdGU7XG52YXIgdGhpc1RpbWVWYWx1ZSA9IHVuY3VycnlUaGlzKCREYXRlLnByb3RvdHlwZS5nZXRUaW1lKTtcblxuLy8gYERhdGUubm93YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5ub3dcbiQoeyB0YXJnZXQ6ICdEYXRlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIG5vdzogZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiB0aGlzVGltZVZhbHVlKG5ldyAkRGF0ZSgpKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5kYXRlLm5vdycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguRGF0ZS5ub3c7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2ZvckVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbm1vZHVsZS5leHBvcnRzID0gIVNUUklDVF9NRVRIT0QgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxufSA6IFtdLmZvckVhY2g7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT09IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZm9yRWFjaDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZm9yRWFjaClcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2hcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyIG5hdGl2ZVJldmVyc2UgPSB1bmN1cnJ5VGhpcyhbXS5yZXZlcnNlKTtcbnZhciB0ZXN0ID0gWzEsIDJdO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJldmVyc2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmV2ZXJzZVxuLy8gZml4IGZvciBTYWZhcmkgMTIuMCBidWdcbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg3OTRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFN0cmluZyh0ZXN0KSA9PT0gU3RyaW5nKHRlc3QucmV2ZXJzZSgpKSB9LCB7XG4gIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduIC0tIGRpcnR5IGhhY2tcbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbmF0aXZlUmV2ZXJzZSh0aGlzKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykucmV2ZXJzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9yZXZlcnNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJldmVyc2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJldmVyc2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmV2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgUCkge1xuICBpZiAoIWRlbGV0ZSBPW1BdKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAnICsgdHJ5VG9TdHJpbmcoUCkgKyAnIG9mICcgKyB0cnlUb1N0cmluZyhPKSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzcGxpY2UnKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNwbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zcGxpY2Vcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNwbGljZTogZnVuY3Rpb24gc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCAvKiAsIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFjdHVhbFN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpbnNlcnRDb3VudCwgYWN0dWFsRGVsZXRlQ291bnQsIEEsIGssIGZyb20sIHRvO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgIGluc2VydENvdW50ID0gYWN0dWFsRGVsZXRlQ291bnQgPSAwO1xuICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgICBpbnNlcnRDb3VudCA9IDA7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IGxlbiAtIGFjdHVhbFN0YXJ0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnNlcnRDb3VudCA9IGFyZ3VtZW50c0xlbmd0aCAtIDI7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IG1pbihtYXgodG9JbnRlZ2VyT3JJbmZpbml0eShkZWxldGVDb3VudCksIDApLCBsZW4gLSBhY3R1YWxTdGFydCk7XG4gICAgfVxuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBpbnNlcnRDb3VudCAtIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBmb3IgKGsgPSAwOyBrIDwgYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgZnJvbSA9IGFjdHVhbFN0YXJ0ICsgaztcbiAgICAgIGlmIChmcm9tIGluIE8pIGNyZWF0ZVByb3BlcnR5KEEsIGssIE9bZnJvbV0pO1xuICAgIH1cbiAgICBBLmxlbmd0aCA9IGFjdHVhbERlbGV0ZUNvdW50O1xuICAgIGlmIChpbnNlcnRDb3VudCA8IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBhY3R1YWxTdGFydDsgayA8IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50OyBrKyspIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudDtcbiAgICAgICAgdG8gPSBrICsgaW5zZXJ0Q291bnQ7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgICAgZm9yIChrID0gbGVuOyBrID4gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudDsgay0tKSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgayAtIDEpO1xuICAgIH0gZWxzZSBpZiAoaW5zZXJ0Q291bnQgPiBhY3R1YWxEZWxldGVDb3VudCkge1xuICAgICAgZm9yIChrID0gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsgPiBhY3R1YWxTdGFydDsgay0tKSB7XG4gICAgICAgIGZyb20gPSBrICsgYWN0dWFsRGVsZXRlQ291bnQgLSAxO1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudCAtIDE7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGsgPSAwOyBrIDwgaW5zZXJ0Q291bnQ7IGsrKykge1xuICAgICAgT1trICsgYWN0dWFsU3RhcnRdID0gYXJndW1lbnRzW2sgKyAyXTtcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudCk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5Jykuc3BsaWNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NwbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zcGxpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNwbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zcGxpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5jbHVkZXM7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG4vLyBGRjk5KyBidWdcbnZhciBCUk9LRU5fT05fU1BBUlNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWluY2x1ZGVzIC0tIGRldGVjdGlvblxuICByZXR1cm4gIUFycmF5KDEpLmluY2x1ZGVzKCk7XG59KTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogQlJPS0VOX09OX1NQQVJTRSB9LCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdpbmNsdWRlcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5pbmNsdWRlcztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbi8vIGBJc1JlZ0V4cGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzcmVnZXhwXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjbGFzc29mKGl0KSA9PT0gJ1JlZ0V4cCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcmVnZXhwJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNSZWdFeHAoaXQpKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJUaGUgbWV0aG9kIGRvZXNuJ3QgYWNjZXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnNcIik7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgdmFyIHJlZ2V4cCA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tNRVRIT0RfTkFNRV0ocmVnZXhwKTtcbiAgfSBjYXRjaCAoZXJyb3IxKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlZ2V4cFtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAnLy4vJ1tNRVRIT0RfTkFNRV0ocmVnZXhwKTtcbiAgICB9IGNhdGNoIChlcnJvcjIpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgbm90QVJlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3QtYS1yZWdleHAnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNvcnJlY3RJc1JlZ0V4cExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljJyk7XG5cbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFjb3JyZWN0SXNSZWdFeHBMb2dpYygnaW5jbHVkZXMnKSB9LCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+c3RyaW5nSW5kZXhPZihcbiAgICAgIHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpLFxuICAgICAgdG9TdHJpbmcobm90QVJlZ0V4cChzZWFyY2hTdHJpbmcpKSxcbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnU3RyaW5nJykuaW5jbHVkZXM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9pbmNsdWRlcycpO1xudmFyIHN0cmluZ01ldGhvZCA9IHJlcXVpcmUoJy4uL3N0cmluZy92aXJ0dWFsL2luY2x1ZGVzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcbnZhciBTdHJpbmdQcm90b3R5cGUgPSBTdHJpbmcucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuaW5jbHVkZXM7XG4gIGlmIChpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmluY2x1ZGVzKSkgcmV0dXJuIGFycmF5TWV0aG9kO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnIHx8IGl0ID09PSBTdHJpbmdQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoU3RyaW5nUHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBTdHJpbmdQcm90b3R5cGUuaW5jbHVkZXMpKSB7XG4gICAgcmV0dXJuIHN0cmluZ01ldGhvZDtcbiAgfSByZXR1cm4gb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvaW5jbHVkZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldFByb3RvdHlwZU9mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUywgc2hhbTogIUNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiB9LCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiBuYXRpdmVHZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZlwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbHRlcicpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmZpbHRlcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maWx0ZXInKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmlsdGVyO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvZmlsdGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ15bJyArIHdoaXRlc3BhY2VzICsgJ10rJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoJyhefFteJyArIHdoaXRlc3BhY2VzICsgJ10pWycgKyB3aGl0ZXNwYWNlcyArICddKyQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgcnRyaW0sICckMScpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgJHBhcnNlSW50ID0gZ2xvYmFsLnBhcnNlSW50O1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgSVRFUkFUT1IgPSBTeW1ib2wgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIGhleCA9IC9eWystXT8weC9pO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhoZXguZXhlYyk7XG52YXIgRk9SQ0VEID0gJHBhcnNlSW50KHdoaXRlc3BhY2VzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdoaXRlc3BhY2VzICsgJzB4MTYnKSAhPT0gMjJcbiAgLy8gTVMgRWRnZSAxOC0gYnJva2VuIHdpdGggYm94ZWQgc3ltYm9sc1xuICB8fCAoSVRFUkFUT1IgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHsgJHBhcnNlSW50KE9iamVjdChJVEVSQVRPUikpOyB9KSk7XG5cbi8vIGBwYXJzZUludGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlaW50LXN0cmluZy1yYWRpeFxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRUQgPyBmdW5jdGlvbiBwYXJzZUludChzdHJpbmcsIHJhZGl4KSB7XG4gIHZhciBTID0gdHJpbSh0b1N0cmluZyhzdHJpbmcpKTtcbiAgcmV0dXJuICRwYXJzZUludChTLCAocmFkaXggPj4+IDApIHx8IChleGVjKGhleCwgUykgPyAxNiA6IDEwKSk7XG59IDogJHBhcnNlSW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9udW1iZXItcGFyc2UtaW50Jyk7XG5cbi8vIGBwYXJzZUludGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlaW50LXN0cmluZy1yYWRpeFxuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiBwYXJzZUludCAhPT0gJHBhcnNlSW50IH0sIHtcbiAgcGFyc2VJbnQ6ICRwYXJzZUludFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wYXJzZS1pbnQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLnBhcnNlSW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1pbmRleG9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgbmF0aXZlSW5kZXhPZiA9IHVuY3VycnlUaGlzKFtdLmluZGV4T2YpO1xuXG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhbmF0aXZlSW5kZXhPZiAmJiAxIC8gbmF0aXZlSW5kZXhPZihbMV0sIDEsIC0wKSA8IDA7XG52YXIgRk9SQ0VEID0gTkVHQVRJVkVfWkVSTyB8fCAhYXJyYXlNZXRob2RJc1N0cmljdCgnaW5kZXhPZicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHZhciBmcm9tSW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyBuYXRpdmVJbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCkgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBmcm9tSW5kZXgpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmluZGV4LW9mJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuaW5kZXhPZjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9pbmRleC1vZicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5pbmRleE9mO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5pbmRleE9mKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2luZGV4LW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGNyZWF0ZTogY3JlYXRlXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZShQLCBEKSB7XG4gIHJldHVybiBPYmplY3QuY3JlYXRlKFAsIEQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9jcmVhdGVcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tanNvbiAtLSBzYWZlXG5pZiAoIXBhdGguSlNPTikgcGF0aC5KU09OID0geyBzdHJpbmdpZnk6IEpTT04uc3RyaW5naWZ5IH07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gIHJldHVybiBhcHBseShwYXRoLkpTT04uc3RyaW5naWZ5LCBudWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvanNvbi9zdHJpbmdpZnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEJ1biAtLSBEZW5vIGNhc2UgKi9cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIEJ1biA9PSAnZnVuY3Rpb24nICYmIEJ1biAmJiB0eXBlb2YgQnVuLnZlcnNpb24gPT0gJ3N0cmluZyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhc3NlZCwgcmVxdWlyZWQpIHtcbiAgaWYgKHBhc3NlZCA8IHJlcXVpcmVkKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignTm90IGVub3VnaCBhcmd1bWVudHMnKTtcbiAgcmV0dXJuIHBhc3NlZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBFTkdJTkVfSVNfQlVOID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1idW4nKTtcbnZhciBVU0VSX0FHRU5UID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcblxudmFyIEZ1bmN0aW9uID0gZ2xvYmFsLkZ1bmN0aW9uO1xuLy8gZGlydHkgSUU5LSBhbmQgQnVuIDAuMy4wLSBjaGVja3NcbnZhciBXUkFQID0gL01TSUUgLlxcLi8udGVzdChVU0VSX0FHRU5UKSB8fCBFTkdJTkVfSVNfQlVOICYmIChmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZXJzaW9uID0gZ2xvYmFsLkJ1bi52ZXJzaW9uLnNwbGl0KCcuJyk7XG4gIHJldHVybiB2ZXJzaW9uLmxlbmd0aCA8IDMgfHwgdmVyc2lvblswXSA9PT0gJzAnICYmICh2ZXJzaW9uWzFdIDwgMyB8fCB2ZXJzaW9uWzFdID09PSAnMycgJiYgdmVyc2lvblsyXSA9PT0gJzAnKTtcbn0pKCk7XG5cbi8vIElFOS0gLyBCdW4gMC4zLjAtIHNldFRpbWVvdXQgLyBzZXRJbnRlcnZhbCAvIHNldEltbWVkaWF0ZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI3RpbWVyc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL292ZW4tc2gvYnVuL2lzc3Vlcy8xNjMzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGhhc1RpbWVBcmcpIHtcbiAgdmFyIGZpcnN0UGFyYW1JbmRleCA9IGhhc1RpbWVBcmcgPyAyIDogMTtcbiAgcmV0dXJuIFdSQVAgPyBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCAvKiAsIC4uLmFyZ3VtZW50cyAqLykge1xuICAgIHZhciBib3VuZEFyZ3MgPSB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKSA+IGZpcnN0UGFyYW1JbmRleDtcbiAgICB2YXIgZm4gPSBpc0NhbGxhYmxlKGhhbmRsZXIpID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpO1xuICAgIHZhciBwYXJhbXMgPSBib3VuZEFyZ3MgPyBhcnJheVNsaWNlKGFyZ3VtZW50cywgZmlyc3RQYXJhbUluZGV4KSA6IFtdO1xuICAgIHZhciBjYWxsYmFjayA9IGJvdW5kQXJncyA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwcGx5KGZuLCB0aGlzLCBwYXJhbXMpO1xuICAgIH0gOiBmbjtcbiAgICByZXR1cm4gaGFzVGltZUFyZyA/IHNjaGVkdWxlcihjYWxsYmFjaywgdGltZW91dCkgOiBzY2hlZHVsZXIoY2FsbGJhY2spO1xuICB9IDogc2NoZWR1bGVyO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG52YXIgc2V0SW50ZXJ2YWwgPSBzY2hlZHVsZXJzRml4KGdsb2JhbC5zZXRJbnRlcnZhbCwgdHJ1ZSk7XG5cbi8vIEJ1biAvIElFOS0gc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0aW50ZXJ2YWxcbiQoeyBnbG9iYWw6IHRydWUsIGJpbmQ6IHRydWUsIGZvcmNlZDogZ2xvYmFsLnNldEludGVydmFsICE9PSBzZXRJbnRlcnZhbCB9LCB7XG4gIHNldEludGVydmFsOiBzZXRJbnRlcnZhbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxudmFyIHNldFRpbWVvdXQgPSBzY2hlZHVsZXJzRml4KGdsb2JhbC5zZXRUaW1lb3V0LCB0cnVlKTtcblxuLy8gQnVuIC8gSUU5LSBzZXRUaW1lb3V0IGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldHRpbWVvdXRcbiQoeyBnbG9iYWw6IHRydWUsIGJpbmQ6IHRydWUsIGZvcmNlZDogZ2xvYmFsLnNldFRpbWVvdXQgIT09IHNldFRpbWVvdXQgfSwge1xuICBzZXRUaW1lb3V0OiBzZXRUaW1lb3V0XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi50aW1lcnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLnNldFRpbWVvdXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsbGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWxsXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZpbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZmlsbCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWxsXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGZpbGw6IGZpbGxcbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdmaWxsJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maWxsJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmlsbDtcbiIsICIvKiEgSGFtbWVyLkpTIC0gdjIuMC4xNy1yYyAtIDIwMTktMTItMTZcbiAqIGh0dHA6Ly9uYXZlci5naXRodWIuaW8vZWdqc1xuICpcbiAqIEZvcmtlZCBCeSBOYXZlciBlZ2pzXG4gKiBDb3B5cmlnaHQgKGMpIGhhbW1lcmpzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKi9cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IG9iamVjdHNfdG9fYXNzaWduXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB0YXJnZXRcbiAqL1xudmFyIGFzc2lnbjtcblxuaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF07XG5cbiAgICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSB7XG4gICAgICAgICAgICBvdXRwdXRbbmV4dEtleV0gPSBzb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcbn0gZWxzZSB7XG4gIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG59XG5cbnZhciBhc3NpZ24kMSA9IGFzc2lnbjtcblxudmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xudmFyIFRFU1RfRUxFTUVOVCA9IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IHtcbiAgc3R5bGU6IHt9XG59IDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgVFlQRV9GVU5DVElPTiA9ICdmdW5jdGlvbic7XG52YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgIGFicyA9IE1hdGguYWJzO1xudmFyIG5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIHByZWZpeGVkIHByb3BlcnR5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAqIEByZXR1cm5zIHtTdHJpbmd8VW5kZWZpbmVkfSBwcmVmaXhlZFxuICovXG5cbmZ1bmN0aW9uIHByZWZpeGVkKG9iaiwgcHJvcGVydHkpIHtcbiAgdmFyIHByZWZpeDtcbiAgdmFyIHByb3A7XG4gIHZhciBjYW1lbFByb3AgPSBwcm9wZXJ0eVswXS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICBwcmVmaXggPSBWRU5ET1JfUFJFRklYRVNbaV07XG4gICAgcHJvcCA9IHByZWZpeCA/IHByZWZpeCArIGNhbWVsUHJvcCA6IHByb3BlcnR5O1xuXG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYywgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbnZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gIC8vIHdpbmRvdyBpcyB1bmRlZmluZWQgaW4gbm9kZS5qc1xuICB3aW4gPSB7fTtcbn0gZWxzZSB7XG4gIHdpbiA9IHdpbmRvdztcbn1cblxudmFyIFBSRUZJWEVEX1RPVUNIX0FDVElPTiA9IHByZWZpeGVkKFRFU1RfRUxFTUVOVC5zdHlsZSwgJ3RvdWNoQWN0aW9uJyk7XG52YXIgTkFUSVZFX1RPVUNIX0FDVElPTiA9IFBSRUZJWEVEX1RPVUNIX0FDVElPTiAhPT0gdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpIHtcbiAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRvdWNoTWFwID0ge307XG4gIHZhciBjc3NTdXBwb3J0cyA9IHdpbi5DU1MgJiYgd2luLkNTUy5zdXBwb3J0cztcbiAgWydhdXRvJywgJ21hbmlwdWxhdGlvbicsICdwYW4teScsICdwYW4teCcsICdwYW4teCBwYW4teScsICdub25lJ10uZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgLy8gYWxsIHZhbHVlcy4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgSUUgMTAgYW5kIDExLlxuICAgIHJldHVybiB0b3VjaE1hcFt2YWxdID0gY3NzU3VwcG9ydHMgPyB3aW4uQ1NTLnN1cHBvcnRzKCd0b3VjaC1hY3Rpb24nLCB2YWwpIDogdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiB0b3VjaE1hcDtcbn1cblxudmFyIFRPVUNIX0FDVElPTl9DT01QVVRFID0gJ2NvbXB1dGUnO1xudmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xudmFyIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04gPSAnbWFuaXB1bGF0aW9uJzsgLy8gbm90IGltcGxlbWVudGVkXG5cbnZhciBUT1VDSF9BQ1RJT05fTk9ORSA9ICdub25lJztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1ggPSAncGFuLXgnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWSA9ICdwYW4teSc7XG52YXIgVE9VQ0hfQUNUSU9OX01BUCA9IGdldFRvdWNoQWN0aW9uUHJvcHMoKTtcblxudmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcbnZhciBTVVBQT1JUX1RPVUNIID0gJ29udG91Y2hzdGFydCcgaW4gd2luO1xudmFyIFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMgPSBwcmVmaXhlZCh3aW4sICdQb2ludGVyRXZlbnQnKSAhPT0gdW5kZWZpbmVkO1xudmFyIFNVUFBPUlRfT05MWV9UT1VDSCA9IFNVUFBPUlRfVE9VQ0ggJiYgTU9CSUxFX1JFR0VYLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSU5QVVRfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG52YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbnZhciBJTlBVVF9UWVBFX01PVVNFID0gJ21vdXNlJztcbnZhciBJTlBVVF9UWVBFX0tJTkVDVCA9ICdraW5lY3QnO1xudmFyIENPTVBVVEVfSU5URVJWQUwgPSAyNTtcbnZhciBJTlBVVF9TVEFSVCA9IDE7XG52YXIgSU5QVVRfTU9WRSA9IDI7XG52YXIgSU5QVVRfRU5EID0gNDtcbnZhciBJTlBVVF9DQU5DRUwgPSA4O1xudmFyIERJUkVDVElPTl9OT05FID0gMTtcbnZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG52YXIgRElSRUNUSU9OX1JJR0hUID0gNDtcbnZhciBESVJFQ1RJT05fVVAgPSA4O1xudmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG52YXIgRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fTEVGVCB8IERJUkVDVElPTl9SSUdIVDtcbnZhciBESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVVAgfCBESVJFQ1RJT05fRE9XTjtcbnZhciBESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUw7XG52YXIgUFJPUFNfWFkgPSBbJ3gnLCAneSddO1xudmFyIFBST1BTX0NMSUVOVF9YWSA9IFsnY2xpZW50WCcsICdjbGllbnRZJ107XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdhbGsgb2JqZWN0cyBhbmQgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gIHZhciBpO1xuXG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9iai5mb3JFYWNoKSB7XG4gICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICB9IGVsc2UgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBvYmoubGVuZ3RoKSB7XG4gICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpIGluIG9iaikge1xuICAgICAgb2JqLmhhc093blByb3BlcnR5KGkpICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBsZXQgYSBib29sZWFuIHZhbHVlIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IG11c3QgcmV0dXJuIGEgYm9vbGVhblxuICogdGhpcyBmaXJzdCBpdGVtIGluIGFyZ3Mgd2lsbCBiZSB1c2VkIGFzIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IHZhbFxuICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBib29sT3JGbih2YWwsIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFRZUEVfRlVOQ1RJT04pIHtcbiAgICByZXR1cm4gdmFsLmFwcGx5KGFyZ3MgPyBhcmdzWzBdIHx8IHVuZGVmaW5lZCA6IHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzbWFsbCBpbmRleE9mIHdyYXBwZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaW5TdHIoc3RyLCBmaW5kKSB7XG4gIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3aGVuIHRoZSB0b3VjaEFjdGlvbnMgYXJlIGNvbGxlY3RlZCB0aGV5IGFyZSBub3QgYSB2YWxpZCB2YWx1ZSwgc28gd2UgbmVlZCB0byBjbGVhbiB0aGluZ3MgdXAuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuXG5mdW5jdGlvbiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zKSB7XG4gIC8vIG5vbmVcbiAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTk9ORTtcbiAgfVxuXG4gIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpOyAvLyBpZiBib3RoIHBhbi14IGFuZCBwYW4teSBhcmUgc2V0IChkaWZmZXJlbnQgcmVjb2duaXplcnNcbiAgLy8gZm9yIGRpZmZlcmVudCBkaXJlY3Rpb25zLCBlLmcuIGhvcml6b250YWwgcGFuIGJ1dCB2ZXJ0aWNhbCBzd2lwZT8pXG4gIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAvLyByZWNvZ25pemVycyB3aWxsIHdvcmssIHNpbmNlIHRoZSBicm93c2VyIHdvdWxkIGhhbmRsZSBhbGwgcGFubmluZ1xuXG4gIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gIH0gLy8gcGFuLXggT1IgcGFuLXlcblxuXG4gIGlmIChoYXNQYW5YIHx8IGhhc1BhblkpIHtcbiAgICByZXR1cm4gaGFzUGFuWCA/IFRPVUNIX0FDVElPTl9QQU5fWCA6IFRPVUNIX0FDVElPTl9QQU5fWTtcbiAgfSAvLyBtYW5pcHVsYXRpb25cblxuXG4gIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OO1xuICB9XG5cbiAgcmV0dXJuIFRPVUNIX0FDVElPTl9BVVRPO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUb3VjaCBBY3Rpb25cbiAqIHNldHMgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IG9yIHVzZXMgdGhlIGpzIGFsdGVybmF0aXZlXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIFRvdWNoQWN0aW9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG91Y2hBY3Rpb24obWFuYWdlciwgdmFsdWUpIHtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuc2V0KHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZSBvbiB0aGUgZWxlbWVudCBvciBlbmFibGUgdGhlIHBvbHlmaWxsXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBUb3VjaEFjdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIGZpbmQgb3V0IHRoZSB0b3VjaC1hY3Rpb24gYnkgdGhlIGV2ZW50IGhhbmRsZXJzXG4gICAgaWYgKHZhbHVlID09PSBUT1VDSF9BQ1RJT05fQ09NUFVURSkge1xuICAgICAgdmFsdWUgPSB0aGlzLmNvbXB1dGUoKTtcbiAgICB9XG5cbiAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbUFJFRklYRURfVE9VQ0hfQUNUSU9OXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICoganVzdCByZS1zZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlXG4gICAqL1xuXG5cbiAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjb21wdXRlIHRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IGJhc2VkIG9uIHRoZSByZWNvZ25pemVyJ3Mgc2V0dGluZ3NcbiAgICogQHJldHVybnMge1N0cmluZ30gdmFsdWVcbiAgICovXG5cblxuICBfcHJvdG8uY29tcHV0ZSA9IGZ1bmN0aW9uIGNvbXB1dGUoKSB7XG4gICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICBlYWNoKHRoaXMubWFuYWdlci5yZWNvZ25pemVycywgZnVuY3Rpb24gKHJlY29nbml6ZXIpIHtcbiAgICAgIGlmIChib29sT3JGbihyZWNvZ25pemVyLm9wdGlvbnMuZW5hYmxlLCBbcmVjb2duaXplcl0pKSB7XG4gICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zLmpvaW4oJyAnKSk7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gZWFjaCBpbnB1dCBjeWNsZSBhbmQgcHJvdmlkZXMgdGhlIHByZXZlbnRpbmcgb2YgdGhlIGJyb3dzZXIgYmVoYXZpb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLnByZXZlbnREZWZhdWx0cyA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhpbnB1dCkge1xuICAgIHZhciBzcmNFdmVudCA9IGlucHV0LnNyY0V2ZW50O1xuICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5vZmZzZXREaXJlY3Rpb247IC8vIGlmIHRoZSB0b3VjaCBhY3Rpb24gZGlkIHByZXZlbnRlZCBvbmNlIHRoaXMgc2Vzc2lvblxuXG4gICAgaWYgKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCkge1xuICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWV07XG4gICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWF07XG5cbiAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgLy8gZG8gbm90IHByZXZlbnQgZGVmYXVsdHMgaWYgdGhpcyBpcyBhIHRhcCBnZXN0dXJlXG4gICAgICB2YXIgaXNUYXBQb2ludGVyID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSAxO1xuICAgICAgdmFyIGlzVGFwTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IDI7XG4gICAgICB2YXIgaXNUYXBUb3VjaFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPCAyNTA7XG5cbiAgICAgIGlmIChpc1RhcFBvaW50ZXIgJiYgaXNUYXBNb3ZlbWVudCAmJiBpc1RhcFRvdWNoVGltZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgLy8gYHBhbi14IHBhbi15YCBtZWFucyBicm93c2VyIGhhbmRsZXMgYWxsIHNjcm9sbGluZy9wYW5uaW5nLCBkbyBub3QgcHJldmVudFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChoYXNOb25lIHx8IGhhc1BhblkgJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwgfHwgaGFzUGFuWCAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZlbnRTcmMoc3JjRXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbGwgcHJldmVudERlZmF1bHQgdG8gcHJldmVudCB0aGUgYnJvd3NlcidzIGRlZmF1bHQgYmVoYXZpb3IgKHNjcm9sbGluZyBpbiBtb3N0IGNhc2VzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICovXG5cblxuICBfcHJvdG8ucHJldmVudFNyYyA9IGZ1bmN0aW9uIHByZXZlbnRTcmMoc3JjRXZlbnQpIHtcbiAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoQWN0aW9uO1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBmaW5kIGlmIGEgbm9kZSBpcyBpbiB0aGUgZ2l2ZW4gcGFyZW50XG4gKiBAbWV0aG9kIGhhc1BhcmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBjZW50ZXIgb2YgYWxsIHRoZSBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gcG9pbnRlcnNcbiAqIEByZXR1cm4ge09iamVjdH0gY2VudGVyIGNvbnRhaW5zIGB4YCBhbmQgYHlgIHByb3BlcnRpZXNcbiAqL1xuXG5mdW5jdGlvbiBnZXRDZW50ZXIocG9pbnRlcnMpIHtcbiAgdmFyIHBvaW50ZXJzTGVuZ3RoID0gcG9pbnRlcnMubGVuZ3RoOyAvLyBubyBuZWVkIHRvIGxvb3Agd2hlbiBvbmx5IG9uZSB0b3VjaFxuXG4gIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRYKSxcbiAgICAgIHk6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFkpXG4gICAgfTtcbiAgfVxuXG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBwb2ludGVyc0xlbmd0aCkge1xuICAgIHggKz0gcG9pbnRlcnNbaV0uY2xpZW50WDtcbiAgICB5ICs9IHBvaW50ZXJzW2ldLmNsaWVudFk7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4IC8gcG9pbnRlcnNMZW5ndGgpLFxuICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIGEgc2ltcGxlIGNsb25lIGZyb20gdGhlIGlucHV0IHVzZWQgZm9yIHN0b3JhZ2Ugb2YgZmlyc3RJbnB1dCBhbmQgZmlyc3RNdWx0aXBsZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBjbG9uZWRJbnB1dERhdGFcbiAqL1xuXG5mdW5jdGlvbiBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCkge1xuICAvLyBtYWtlIGEgc2ltcGxlIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgYSByZWZlcmVuY2UgaWYgd2UgZG9uJ3RcbiAgLy8gd2Ugb25seSBuZWVkIGNsaWVudFhZIGZvciB0aGUgY2FsY3VsYXRpb25zXG4gIHZhciBwb2ludGVycyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBpbnB1dC5wb2ludGVycy5sZW5ndGgpIHtcbiAgICBwb2ludGVyc1tpXSA9IHtcbiAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgY2xpZW50WTogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WSlcbiAgICB9O1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGltZVN0YW1wOiBub3coKSxcbiAgICBwb2ludGVyczogcG9pbnRlcnMsXG4gICAgY2VudGVyOiBnZXRDZW50ZXIocG9pbnRlcnMpLFxuICAgIGRlbHRhWDogaW5wdXQuZGVsdGFYLFxuICAgIGRlbHRhWTogaW5wdXQuZGVsdGFZXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gcDEge3gsIHl9XG4gKiBAcGFyYW0ge09iamVjdH0gcDIge3gsIHl9XG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgfVxuXG4gIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dO1xuICB2YXIgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBhbmdsZSBiZXR3ZWVuIHR3byBjb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IHAxXG4gKiBAcGFyYW0ge09iamVjdH0gcDJcbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gYW5nbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRBbmdsZShwMSwgcDIsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IFBST1BTX1hZO1xuICB9XG5cbiAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV07XG4gIHZhciB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KSAqIDE4MCAvIE1hdGguUEk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgZGlyZWN0aW9uIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpcmVjdGlvblxuICovXG5cbmZ1bmN0aW9uIGdldERpcmVjdGlvbih4LCB5KSB7XG4gIGlmICh4ID09PSB5KSB7XG4gICAgcmV0dXJuIERJUkVDVElPTl9OT05FO1xuICB9XG5cbiAgaWYgKGFicyh4KSA+PSBhYnMoeSkpIHtcbiAgICByZXR1cm4geCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgfVxuXG4gIHJldHVybiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyOyAvLyBsZXQgeyBvZmZzZXREZWx0YTpvZmZzZXQgPSB7fSwgcHJldkRlbHRhID0ge30sIHByZXZJbnB1dCA9IHt9IH0gPSBzZXNzaW9uO1xuICAvLyBqc2NzIHRocm93aW5nIGVycm9yIG9uIGRlZmFsdXQgZGVzdHJ1Y3R1cmVkIHZhbHVlcyBhbmQgd2l0aG91dCBkZWZhdWx0cyB0ZXN0cyBmYWlsXG5cbiAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gIHZhciBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSB8fCB7fTtcbiAgdmFyIHByZXZJbnB1dCA9IHNlc3Npb24ucHJldklucHV0IHx8IHt9O1xuXG4gIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhID0ge1xuICAgICAgeDogcHJldklucHV0LmRlbHRhWCB8fCAwLFxuICAgICAgeTogcHJldklucHV0LmRlbHRhWSB8fCAwXG4gICAgfTtcbiAgICBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhID0ge1xuICAgICAgeDogY2VudGVyLngsXG4gICAgICB5OiBjZW50ZXIueVxuICAgIH07XG4gIH1cblxuICBpbnB1dC5kZWx0YVggPSBwcmV2RGVsdGEueCArIChjZW50ZXIueCAtIG9mZnNldC54KTtcbiAgaW5wdXQuZGVsdGFZID0gcHJldkRlbHRhLnkgKyAoY2VudGVyLnkgLSBvZmZzZXQueSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYmV0d2VlbiB0d28gcG9pbnRzLiB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIHgsIHkpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgeTogeSAvIGRlbHRhVGltZSB8fCAwXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgc2NhbGUgZmFjdG9yIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBubyBzY2FsZSBpcyAxLCBhbmQgZ29lcyBkb3duIHRvIDAgd2hlbiBwaW5jaGVkIHRvZ2V0aGVyLCBhbmQgYmlnZ2VyIHdoZW4gcGluY2hlZCBvdXRcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gc2NhbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRTY2FsZShzdGFydCwgZW5kKSB7XG4gIHJldHVybiBnZXREaXN0YW5jZShlbmRbMF0sIGVuZFsxXSwgUFJPUFNfQ0xJRU5UX1hZKSAvIGdldERpc3RhbmNlKHN0YXJ0WzBdLCBzdGFydFsxXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSByb3RhdGlvbiBkZWdyZWVzIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHJvdGF0aW9uXG4gKi9cblxuZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZ2V0QW5nbGUoZW5kWzFdLCBlbmRbMF0sIFBST1BTX0NMSUVOVF9YWSkgKyBnZXRBbmdsZShzdGFydFsxXSwgc3RhcnRbMF0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHZlbG9jaXR5IGlzIGNhbGN1bGF0ZWQgZXZlcnkgeCBtc1xuICogQHBhcmFtIHtPYmplY3R9IHNlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgbGFzdCA9IHNlc3Npb24ubGFzdEludGVydmFsIHx8IGlucHV0O1xuICB2YXIgZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gbGFzdC50aW1lU3RhbXA7XG4gIHZhciB2ZWxvY2l0eTtcbiAgdmFyIHZlbG9jaXR5WDtcbiAgdmFyIHZlbG9jaXR5WTtcbiAgdmFyIGRpcmVjdGlvbjtcblxuICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9PSBJTlBVVF9DQU5DRUwgJiYgKGRlbHRhVGltZSA+IENPTVBVVEVfSU5URVJWQUwgfHwgbGFzdC52ZWxvY2l0eSA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHZhciBkZWx0YVggPSBpbnB1dC5kZWx0YVggLSBsYXN0LmRlbHRhWDtcbiAgICB2YXIgZGVsdGFZID0gaW5wdXQuZGVsdGFZIC0gbGFzdC5kZWx0YVk7XG4gICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICB2ZWxvY2l0eVggPSB2Lng7XG4gICAgdmVsb2NpdHlZID0gdi55O1xuICAgIHZlbG9jaXR5ID0gYWJzKHYueCkgPiBhYnModi55KSA/IHYueCA6IHYueTtcbiAgICBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpO1xuICAgIHNlc3Npb24ubGFzdEludGVydmFsID0gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIGxhdGVzdCB2ZWxvY2l0eSBpbmZvIGlmIGl0IGRvZXNuJ3Qgb3ZlcnRha2UgYSBtaW5pbXVtIHBlcmlvZFxuICAgIHZlbG9jaXR5ID0gbGFzdC52ZWxvY2l0eTtcbiAgICB2ZWxvY2l0eVggPSBsYXN0LnZlbG9jaXR5WDtcbiAgICB2ZWxvY2l0eVkgPSBsYXN0LnZlbG9jaXR5WTtcbiAgICBkaXJlY3Rpb24gPSBsYXN0LmRpcmVjdGlvbjtcbiAgfVxuXG4gIGlucHV0LnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gIGlucHV0LnZlbG9jaXR5WCA9IHZlbG9jaXR5WDtcbiAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG59XG5cbi8qKlxuKiBAcHJpdmF0ZVxuICogZXh0ZW5kIHRoZSBkYXRhIHdpdGggc29tZSB1c2FibGUgcHJvcGVydGllcyBsaWtlIHNjYWxlLCByb3RhdGUsIHZlbG9jaXR5IGV0Y1xuICogQHBhcmFtIHtPYmplY3R9IG1hbmFnZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpIHtcbiAgdmFyIHNlc3Npb24gPSBtYW5hZ2VyLnNlc3Npb247XG4gIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIHN0b3JlIHRoZSBmaXJzdCBpbnB1dCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGFuZCBkaXJlY3Rpb25cblxuICBpZiAoIXNlc3Npb24uZmlyc3RJbnB1dCkge1xuICAgIHNlc3Npb24uZmlyc3RJbnB1dCA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgfSAvLyB0byBjb21wdXRlIHNjYWxlIGFuZCByb3RhdGlvbiB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBtdWx0aXBsZSB0b3VjaGVzXG5cblxuICBpZiAocG9pbnRlcnNMZW5ndGggPiAxICYmICFzZXNzaW9uLmZpcnN0TXVsdGlwbGUpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gIH0gZWxzZSBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBmaXJzdElucHV0ID0gc2Vzc2lvbi5maXJzdElucHV0LFxuICAgICAgZmlyc3RNdWx0aXBsZSA9IHNlc3Npb24uZmlyc3RNdWx0aXBsZTtcbiAgdmFyIG9mZnNldENlbnRlciA9IGZpcnN0TXVsdGlwbGUgPyBmaXJzdE11bHRpcGxlLmNlbnRlciA6IGZpcnN0SW5wdXQuY2VudGVyO1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyID0gZ2V0Q2VudGVyKHBvaW50ZXJzKTtcbiAgaW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gIGlucHV0LmRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGZpcnN0SW5wdXQudGltZVN0YW1wO1xuICBpbnB1dC5hbmdsZSA9IGdldEFuZ2xlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgaW5wdXQuZGlzdGFuY2UgPSBnZXREaXN0YW5jZShvZmZzZXRDZW50ZXIsIGNlbnRlcik7XG4gIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KTtcbiAgaW5wdXQub2Zmc2V0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgdmFyIG92ZXJhbGxWZWxvY2l0eSA9IGdldFZlbG9jaXR5KGlucHV0LmRlbHRhVGltZSwgaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYID0gb3ZlcmFsbFZlbG9jaXR5Lng7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVkgPSBvdmVyYWxsVmVsb2NpdHkueTtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5ID0gYWJzKG92ZXJhbGxWZWxvY2l0eS54KSA+IGFicyhvdmVyYWxsVmVsb2NpdHkueSkgPyBvdmVyYWxsVmVsb2NpdHkueCA6IG92ZXJhbGxWZWxvY2l0eS55O1xuICBpbnB1dC5zY2FsZSA9IGZpcnN0TXVsdGlwbGUgPyBnZXRTY2FsZShmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAxO1xuICBpbnB1dC5yb3RhdGlvbiA9IGZpcnN0TXVsdGlwbGUgPyBnZXRSb3RhdGlvbihmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAwO1xuICBpbnB1dC5tYXhQb2ludGVycyA9ICFzZXNzaW9uLnByZXZJbnB1dCA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA+IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnM7XG4gIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCk7IC8vIGZpbmQgdGhlIGNvcnJlY3QgdGFyZ2V0XG5cbiAgdmFyIHRhcmdldCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gIHZhciBzcmNFdmVudFRhcmdldDtcblxuICBpZiAoc3JjRXZlbnQuY29tcG9zZWRQYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5jb21wb3NlZFBhdGgoKVswXTtcbiAgfSBlbHNlIGlmIChzcmNFdmVudC5wYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5wYXRoWzBdO1xuICB9IGVsc2Uge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQudGFyZ2V0O1xuICB9XG5cbiAgaWYgKGhhc1BhcmVudChzcmNFdmVudFRhcmdldCwgdGFyZ2V0KSkge1xuICAgIHRhcmdldCA9IHNyY0V2ZW50VGFyZ2V0O1xuICB9XG5cbiAgaW5wdXQudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBoYW5kbGUgaW5wdXQgZXZlbnRzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGlucHV0SGFuZGxlcihtYW5hZ2VyLCBldmVudFR5cGUsIGlucHV0KSB7XG4gIHZhciBwb2ludGVyc0xlbiA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aDtcbiAgdmFyIGNoYW5nZWRQb2ludGVyc0xlbiA9IGlucHV0LmNoYW5nZWRQb2ludGVycy5sZW5ndGg7XG4gIHZhciBpc0ZpcnN0ID0gZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIHZhciBpc0ZpbmFsID0gZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIGlucHV0LmlzRmlyc3QgPSAhIWlzRmlyc3Q7XG4gIGlucHV0LmlzRmluYWwgPSAhIWlzRmluYWw7XG5cbiAgaWYgKGlzRmlyc3QpIHtcbiAgICBtYW5hZ2VyLnNlc3Npb24gPSB7fTtcbiAgfSAvLyBzb3VyY2UgZXZlbnQgaXMgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgb2YgdGhlIGRvbUV2ZW50c1xuICAvLyBsaWtlICd0b3VjaHN0YXJ0LCBtb3VzZXVwLCBwb2ludGVyZG93bidcblxuXG4gIGlucHV0LmV2ZW50VHlwZSA9IGV2ZW50VHlwZTsgLy8gY29tcHV0ZSBzY2FsZSwgcm90YXRpb24gZXRjXG5cbiAgY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCk7IC8vIGVtaXQgc2VjcmV0IGV2ZW50XG5cbiAgbWFuYWdlci5lbWl0KCdoYW1tZXIuaW5wdXQnLCBpbnB1dCk7XG4gIG1hbmFnZXIucmVjb2duaXplKGlucHV0KTtcbiAgbWFuYWdlci5zZXNzaW9uLnByZXZJbnB1dCA9IGlucHV0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzcGxpdCBzdHJpbmcgb24gd2hpdGVzcGFjZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge0FycmF5fSB3b3Jkc1xuICovXG5mdW5jdGlvbiBzcGxpdFN0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltKCkuc3BsaXQoL1xccysvZyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZEV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgd2luZG93IG9iamVjdCBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RG9jdW1lbnRWaWV3fFdpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93Rm9yRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZWxlbWVudDtcbiAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93IHx8IHdpbmRvdztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIElucHV0KG1hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgICB0aGlzLnRhcmdldCA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dFRhcmdldDsgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuXG4gICAgdGhpcy5kb21IYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICBpZiAoYm9vbE9yRm4obWFuYWdlci5vcHRpb25zLmVuYWJsZSwgW21hbmFnZXJdKSkge1xuICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2hvdWxkIGhhbmRsZSB0aGUgaW5wdXRFdmVudCBkYXRhIGFuZCB0cmlnZ2VyIHRoZSBjYWxsYmFja1xuICAgKiBAdmlydHVhbFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBiaW5kIHRoZSBldmVudHNcbiAgICovXG5cblxuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdGhpcy5ldkVsICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZUYXJnZXQgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldldpbiAmJiBhZGRFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgKi9cblxuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldlRhcmdldCAmJiByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2V2luICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4gSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGZpbmQgaWYgYSBhcnJheSBjb250YWlucyB0aGUgb2JqZWN0IHVzaW5nIGluZGV4T2Ygb3IgYSBzaW1wbGUgcG9seUZpbGxcbiAqIEBwYXJhbSB7QXJyYXl9IHNyY1xuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmluZEJ5S2V5XVxuICogQHJldHVybiB7Qm9vbGVhbnxOdW1iZXJ9IGZhbHNlIHdoZW4gbm90IGZvdW5kLCBvciB0aGUgaW5kZXhcbiAqL1xuZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICBpZiAoc3JjLmluZGV4T2YgJiYgIWZpbmRCeUtleSkge1xuICAgIHJldHVybiBzcmMuaW5kZXhPZihmaW5kKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICAgIGlmIChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCB8fCAhZmluZEJ5S2V5ICYmIHNyY1tpXSA9PT0gZmluZCkge1xuICAgICAgICAvLyBkbyBub3QgdXNlID09PSBoZXJlLCB0ZXN0IGZhaWxzXG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG5cbnZhciBQT0lOVEVSX0lOUFVUX01BUCA9IHtcbiAgcG9pbnRlcmRvd246IElOUFVUX1NUQVJULFxuICBwb2ludGVybW92ZTogSU5QVVRfTU9WRSxcbiAgcG9pbnRlcnVwOiBJTlBVVF9FTkQsXG4gIHBvaW50ZXJjYW5jZWw6IElOUFVUX0NBTkNFTCxcbiAgcG9pbnRlcm91dDogSU5QVVRfQ0FOQ0VMXG59OyAvLyBpbiBJRTEwIHRoZSBwb2ludGVyIHR5cGVzIGlzIGRlZmluZWQgYXMgYW4gZW51bVxuXG52YXIgSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSA9IHtcbiAgMjogSU5QVVRfVFlQRV9UT1VDSCxcbiAgMzogSU5QVVRfVFlQRV9QRU4sXG4gIDQ6IElOUFVUX1RZUEVfTU9VU0UsXG4gIDU6IElOUFVUX1RZUEVfS0lORUNUIC8vIHNlZSBodHRwczovL3R3aXR0ZXIuY29tL2phY29icm9zc2kvc3RhdHVzLzQ4MDU5NjQzODQ4OTg5MDgxNlxuXG59O1xudmFyIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAncG9pbnRlcmRvd24nO1xudmFyIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdwb2ludGVybW92ZSBwb2ludGVydXAgcG9pbnRlcmNhbmNlbCc7IC8vIElFMTAgaGFzIHByZWZpeGVkIHN1cHBvcnQsIGFuZCBjYXNlLXNlbnNpdGl2ZVxuXG5pZiAod2luLk1TUG9pbnRlckV2ZW50ICYmICF3aW4uUG9pbnRlckV2ZW50KSB7XG4gIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAnTVNQb2ludGVyRG93bic7XG4gIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCc7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBQb2ludGVyIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cblxudmFyIFBvaW50ZXJFdmVudElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUG9pbnRlckV2ZW50SW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2RWwgPSBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5zdG9yZSA9IF90aGlzLm1hbmFnZXIuc2Vzc2lvbi5wb2ludGVyRXZlbnRzID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICB2YXIgcmVtb3ZlUG9pbnRlciA9IGZhbHNlO1xuICAgIHZhciBldmVudFR5cGVOb3JtYWxpemVkID0gZXYudHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ21zJywgJycpO1xuICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICB2YXIgcG9pbnRlclR5cGUgPSBJRTEwX1BPSU5URVJfVFlQRV9FTlVNW2V2LnBvaW50ZXJUeXBlXSB8fCBldi5wb2ludGVyVHlwZTtcbiAgICB2YXIgaXNUb3VjaCA9IHBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIOyAvLyBnZXQgaW5kZXggb2YgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG4gICAgdmFyIHN0b3JlSW5kZXggPSBpbkFycmF5KHN0b3JlLCBldi5wb2ludGVySWQsICdwb2ludGVySWQnKTsgLy8gc3RhcnQgYW5kIG1vdXNlIG11c3QgYmUgZG93blxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIChldi5idXR0b24gPT09IDAgfHwgaXNUb3VjaCkpIHtcbiAgICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgICAgc3RvcmVJbmRleCA9IHN0b3JlLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgcmVtb3ZlUG9pbnRlciA9IHRydWU7XG4gICAgfSAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcblxuXG4gICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG5cbiAgICBzdG9yZVtzdG9yZUluZGV4XSA9IGV2O1xuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiBwb2ludGVyVHlwZSxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuXG4gICAgaWYgKHJlbW92ZVBvaW50ZXIpIHtcbiAgICAgIC8vIHJlbW92ZSBmcm9tIHRoZSBzdG9yZVxuICAgICAgc3RvcmUuc3BsaWNlKHN0b3JlSW5kZXgsIDEpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUG9pbnRlckV2ZW50SW5wdXQ7XG59KElucHV0KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gcmVhbCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaiwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHVuaXF1ZSBhcnJheSB3aXRoIG9iamVjdHMgYmFzZWQgb24gYSBrZXkgKGxpa2UgJ2lkJykgb3IganVzdCBieSB0aGUgYXJyYXkncyB2YWx1ZVxuICogQHBhcmFtIHtBcnJheX0gc3JjIFt7aWQ6MX0se2lkOjJ9LHtpZDoxfV1cbiAqIEBwYXJhbSB7U3RyaW5nfSBba2V5XVxuICogQHBhcmFtIHtCb29sZWFufSBbc29ydD1GYWxzZV1cbiAqIEByZXR1cm5zIHtBcnJheX0gW3tpZDoxfSx7aWQ6Mn1dXG4gKi9cblxuZnVuY3Rpb24gdW5pcXVlQXJyYXkoc3JjLCBrZXksIHNvcnQpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgdmFyIHZhbCA9IGtleSA/IHNyY1tpXVtrZXldIDogc3JjW2ldO1xuXG4gICAgaWYgKGluQXJyYXkodmFsdWVzLCB2YWwpIDwgMCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHNyY1tpXSk7XG4gICAgfVxuXG4gICAgdmFsdWVzW2ldID0gdmFsO1xuICAgIGkrKztcbiAgfVxuXG4gIGlmIChzb3J0KSB7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYVtrZXldID4gYltrZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbnZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICB0b3VjaG1vdmU6IElOUFVUX01PVkUsXG4gIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG52YXIgVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNdWx0aS11c2VyIHRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIFRvdWNoSW5wdXQucHJvdG90eXBlLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMudGFyZ2V0SWRzID0ge307IC8vIHRoaXMuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRvdWNoSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciB0eXBlID0gVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuICAgIHZhciB0b3VjaGVzID0gZ2V0VG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTtcblxuICAgIGlmICghdG91Y2hlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoSW5wdXQ7XG59KElucHV0KTtcblxuZnVuY3Rpb24gZ2V0VG91Y2hlcyhldiwgdHlwZSkge1xuICB2YXIgYWxsVG91Y2hlcyA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciB0YXJnZXRJZHMgPSB0aGlzLnRhcmdldElkczsgLy8gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSB0b3VjaCwgdGhlIHByb2Nlc3MgY2FuIGJlIHNpbXBsaWZpZWRcblxuICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgdGFyZ2V0SWRzW2FsbFRvdWNoZXNbMF0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgIHJldHVybiBbYWxsVG91Y2hlcywgYWxsVG91Y2hlc107XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIHRhcmdldFRvdWNoZXM7XG4gIHZhciBjaGFuZ2VkVG91Y2hlcyA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpO1xuICB2YXIgY2hhbmdlZFRhcmdldFRvdWNoZXMgPSBbXTtcbiAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0OyAvLyBnZXQgdGFyZ2V0IHRvdWNoZXMgZnJvbSB0b3VjaGVzXG5cbiAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uICh0b3VjaCkge1xuICAgIHJldHVybiBoYXNQYXJlbnQodG91Y2gudGFyZ2V0LCB0YXJnZXQpO1xuICB9KTsgLy8gY29sbGVjdCB0b3VjaGVzXG5cbiAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICBpKys7XG4gICAgfVxuICB9IC8vIGZpbHRlciBjaGFuZ2VkIHRvdWNoZXMgdG8gb25seSBjb250YWluIHRvdWNoZXMgdGhhdCBleGlzdCBpbiB0aGUgY29sbGVjdGVkIHRhcmdldCBpZHNcblxuXG4gIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgY2hhbmdlZFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMucHVzaChjaGFuZ2VkVG91Y2hlc1tpXSk7XG4gICAgfSAvLyBjbGVhbnVwIHJlbW92ZWQgdG91Y2hlc1xuXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIGlmICghY2hhbmdlZFRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIFsvLyBtZXJnZSB0YXJnZXRUb3VjaGVzIHdpdGggY2hhbmdlZFRhcmdldFRvdWNoZXMgc28gaXQgY29udGFpbnMgQUxMIHRvdWNoZXMsIGluY2x1ZGluZyAnZW5kJyBhbmQgJ2NhbmNlbCdcbiAgdW5pcXVlQXJyYXkodGFyZ2V0VG91Y2hlcy5jb25jYXQoY2hhbmdlZFRhcmdldFRvdWNoZXMpLCAnaWRlbnRpZmllcicsIHRydWUpLCBjaGFuZ2VkVGFyZ2V0VG91Y2hlc107XG59XG5cbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gIG1vdXNlZG93bjogSU5QVVRfU1RBUlQsXG4gIG1vdXNlbW92ZTogSU5QVVRfTU9WRSxcbiAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xudmFyIE1PVVNFX0VMRU1FTlRfRVZFTlRTID0gJ21vdXNlZG93bic7XG52YXIgTU9VU0VfV0lORE9XX0VWRU5UUyA9ICdtb3VzZW1vdmUgbW91c2V1cCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNb3VzZSBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgTW91c2VJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKE1vdXNlSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gTW91c2VJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldkVsID0gTU9VU0VfRUxFTUVOVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBNT1VTRV9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5wcmVzc2VkID0gZmFsc2U7IC8vIG1vdXNlZG93biBzdGF0ZVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBvbiBzdGFydCB3ZSB3YW50IHRvIGhhdmUgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGRvd25cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPT09IDApIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX01PVkUgJiYgZXYud2hpY2ggIT09IDEpIHtcbiAgICAgIGV2ZW50VHlwZSA9IElOUFVUX0VORDtcbiAgICB9IC8vIG1vdXNlIG11c3QgYmUgZG93blxuXG5cbiAgICBpZiAoIXRoaXMucHJlc3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBbZXZdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTW91c2VJbnB1dDtcbn0oSW5wdXQpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDb21iaW5lZCB0b3VjaCBhbmQgbW91c2UgaW5wdXRcbiAqXG4gKiBUb3VjaCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhlbiBtb3VzZSwgYW5kIHdoaWxlIHRvdWNoaW5nIG5vIG1vdXNlIGV2ZW50cyBhcmUgYWxsb3dlZC5cbiAqIFRoaXMgYmVjYXVzZSB0b3VjaCBkZXZpY2VzIGFsc28gZW1pdCBtb3VzZSBldmVudHMgd2hpbGUgZG9pbmcgYSB0b3VjaC5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIERFRFVQX1RJTUVPVVQgPSAyNTAwO1xudmFyIERFRFVQX0RJU1RBTkNFID0gMjU7XG5cbmZ1bmN0aW9uIHNldExhc3RUb3VjaChldmVudERhdGEpIHtcbiAgdmFyIF9ldmVudERhdGEkY2hhbmdlZFBvaSA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnMsXG4gICAgICB0b3VjaCA9IF9ldmVudERhdGEkY2hhbmdlZFBvaVswXTtcblxuICBpZiAodG91Y2guaWRlbnRpZmllciA9PT0gdGhpcy5wcmltYXJ5VG91Y2gpIHtcbiAgICB2YXIgbGFzdFRvdWNoID0ge1xuICAgICAgeDogdG91Y2guY2xpZW50WCxcbiAgICAgIHk6IHRvdWNoLmNsaWVudFlcbiAgICB9O1xuICAgIHZhciBsdHMgPSB0aGlzLmxhc3RUb3VjaGVzO1xuICAgIHRoaXMubGFzdFRvdWNoZXMucHVzaChsYXN0VG91Y2gpO1xuXG4gICAgdmFyIHJlbW92ZUxhc3RUb3VjaCA9IGZ1bmN0aW9uIHJlbW92ZUxhc3RUb3VjaCgpIHtcbiAgICAgIHZhciBpID0gbHRzLmluZGV4T2YobGFzdFRvdWNoKTtcblxuICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkVG91Y2hlcyhldmVudFR5cGUsIGV2ZW50RGF0YSkge1xuICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICB0aGlzLnByaW1hcnlUb3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcjtcbiAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KGV2ZW50RGF0YSkge1xuICB2YXIgeCA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRYO1xuICB2YXIgeSA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRZO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sYXN0VG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0ID0gdGhpcy5sYXN0VG91Y2hlc1tpXTtcbiAgICB2YXIgZHggPSBNYXRoLmFicyh4IC0gdC54KTtcbiAgICB2YXIgZHkgPSBNYXRoLmFicyh5IC0gdC55KTtcblxuICAgIGlmIChkeCA8PSBERURVUF9ESVNUQU5DRSAmJiBkeSA8PSBERURVUF9ESVNUQU5DRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgVG91Y2hNb3VzZUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIFRvdWNoTW91c2VJbnB1dCA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9JbnB1dCkge1xuICAgIF9pbmhlcml0c0xvb3NlKFRvdWNoTW91c2VJbnB1dCwgX0lucHV0KTtcblxuICAgIGZ1bmN0aW9uIFRvdWNoTW91c2VJbnB1dChfbWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfSW5wdXQuY2FsbCh0aGlzLCBfbWFuYWdlciwgY2FsbGJhY2spIHx8IHRoaXM7XG5cbiAgICAgIF90aGlzLmhhbmRsZXIgPSBmdW5jdGlvbiAobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBpc1RvdWNoID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIO1xuICAgICAgICB2YXIgaXNNb3VzZSA9IGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9NT1VTRTtcblxuICAgICAgICBpZiAoaXNNb3VzZSAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyB3aGVuIHdlJ3JlIGluIGEgdG91Y2ggZXZlbnQsIHJlY29yZCB0b3VjaGVzIHRvICBkZS1kdXBlIHN5bnRoZXRpYyBtb3VzZSBldmVudFxuXG5cbiAgICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgICByZWNvcmRUb3VjaGVzLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RGF0YSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5jYWxsYmFjayhtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMudG91Y2ggPSBuZXcgVG91Y2hJbnB1dChfdGhpcy5tYW5hZ2VyLCBfdGhpcy5oYW5kbGVyKTtcbiAgICAgIF90aGlzLm1vdXNlID0gbmV3IE1vdXNlSW5wdXQoX3RoaXMubWFuYWdlciwgX3RoaXMuaGFuZGxlcik7XG4gICAgICBfdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgICAgX3RoaXMubGFzdFRvdWNoZXMgPSBbXTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBoYW5kbGUgbW91c2UgYW5kIHRvdWNoIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0RXZlbnRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG5cblxuICAgIHZhciBfcHJvdG8gPSBUb3VjaE1vdXNlSW5wdXQucHJvdG90eXBlO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAqL1xuICAgIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHRoaXMudG91Y2guZGVzdHJveSgpO1xuICAgICAgdGhpcy5tb3VzZS5kZXN0cm95KCk7XG4gICAgfTtcblxuICAgIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG4gIH0oSW5wdXQpO1xuXG4gIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBjYWxsZWQgYnkgdGhlIE1hbmFnZXIgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gIHZhciBUeXBlOyAvLyBsZXQgaW5wdXRDbGFzcyA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dENsYXNzO1xuXG4gIHZhciBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgaWYgKGlucHV0Q2xhc3MpIHtcbiAgICBUeXBlID0gaW5wdXRDbGFzcztcbiAgfSBlbHNlIGlmIChTVVBQT1JUX1BPSU5URVJfRVZFTlRTKSB7XG4gICAgVHlwZSA9IFBvaW50ZXJFdmVudElucHV0O1xuICB9IGVsc2UgaWYgKFNVUFBPUlRfT05MWV9UT1VDSCkge1xuICAgIFR5cGUgPSBUb3VjaElucHV0O1xuICB9IGVsc2UgaWYgKCFTVVBQT1JUX1RPVUNIKSB7XG4gICAgVHlwZSA9IE1vdXNlSW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgVHlwZSA9IFRvdWNoTW91c2VJbnB1dDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZShtYW5hZ2VyLCBpbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZm4gb24gZWFjaCBlbnRyeVxuICogaWYgaXQgYWludCBhbiBhcnJheSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGhpbmcuXG4gKiB0aGlzIGlzIHVzZWQgYnkgYWxsIHRoZSBtZXRob2RzIHRoYXQgYWNjZXB0IGEgc2luZ2xlIGFuZCBhcnJheSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7KnxBcnJheX0gYXJnXG4gKiBAcGFyYW0ge1N0cmluZ30gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF1cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGludm9rZUFycmF5QXJnKGFyZywgZm4sIGNvbnRleHQpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIGVhY2goYXJnLCBjb250ZXh0W2ZuXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBTVEFURV9QT1NTSUJMRSA9IDE7XG52YXIgU1RBVEVfQkVHQU4gPSAyO1xudmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xudmFyIFNUQVRFX0VOREVEID0gODtcbnZhciBTVEFURV9SRUNPR05JWkVEID0gU1RBVEVfRU5ERUQ7XG52YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG52YXIgU1RBVEVfRkFJTEVEID0gMzI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHVuaXF1ZSBpZFxuICogQHJldHVybnMge251bWJlcn0gdW5pcXVlSWRcbiAqL1xudmFyIF91bmlxdWVJZCA9IDE7XG5mdW5jdGlvbiB1bmlxdWVJZCgpIHtcbiAgcmV0dXJuIF91bmlxdWVJZCsrO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSByZWNvZ25pemVyIGJ5IG5hbWUgaWYgaXQgaXMgYm91bmQgdG8gYSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSBvdGhlclJlY29nbml6ZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcn0gcmVjb2duaXplclxuICogQHJldHVybnMge1JlY29nbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCByZWNvZ25pemVyKSB7XG4gIHZhciBtYW5hZ2VyID0gcmVjb2duaXplci5tYW5hZ2VyO1xuXG4gIGlmIChtYW5hZ2VyKSB7XG4gICAgcmV0dXJuIG1hbmFnZXIuZ2V0KG90aGVyUmVjb2duaXplcik7XG4gIH1cblxuICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSB1c2FibGUgc3RyaW5nLCB1c2VkIGFzIGV2ZW50IHBvc3RmaXhcbiAqIEBwYXJhbSB7Y29uc3RhbnR9IHN0YXRlXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdGF0ZVxuICovXG5cbmZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gIGlmIChzdGF0ZSAmIFNUQVRFX0NBTkNFTExFRCkge1xuICAgIHJldHVybiAnY2FuY2VsJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0VOREVEKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQ0hBTkdFRCkge1xuICAgIHJldHVybiAnbW92ZSc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9CRUdBTikge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSZWNvZ25pemVyIGZsb3cgZXhwbGFpbmVkOyAqXG4gKiBBbGwgcmVjb2duaXplcnMgaGF2ZSB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBQT1NTSUJMRSB3aGVuIGEgaW5wdXQgc2Vzc2lvbiBzdGFydHMuXG4gKiBUaGUgZGVmaW5pdGlvbiBvZiBhIGlucHV0IHNlc3Npb24gaXMgZnJvbSB0aGUgZmlyc3QgaW5wdXQgdW50aWwgdGhlIGxhc3QgaW5wdXQsIHdpdGggYWxsIGl0J3MgbW92ZW1lbnQgaW4gaXQuICpcbiAqIEV4YW1wbGUgc2Vzc2lvbiBmb3IgbW91c2UtaW5wdXQ6IG1vdXNlZG93biAtPiBtb3VzZW1vdmUgLT4gbW91c2V1cFxuICpcbiAqIE9uIGVhY2ggcmVjb2duaXppbmcgY3ljbGUgKHNlZSBNYW5hZ2VyLnJlY29nbml6ZSkgdGhlIC5yZWNvZ25pemUoKSBtZXRob2QgaXMgZXhlY3V0ZWRcbiAqIHdoaWNoIGRldGVybWluZXMgd2l0aCBzdGF0ZSBpdCBzaG91bGQgYmUuXG4gKlxuICogSWYgdGhlIHJlY29nbml6ZXIgaGFzIHRoZSBzdGF0ZSBGQUlMRUQsIENBTkNFTExFRCBvciBSRUNPR05JWkVEIChlcXVhbHMgRU5ERUQpLCBpdCBpcyByZXNldCB0b1xuICogUE9TU0lCTEUgdG8gZ2l2ZSBpdCBhbm90aGVyIGNoYW5nZSBvbiB0aGUgbmV4dCBjeWNsZS5cbiAqXG4gKiAgICAgICAgICAgICAgIFBvc3NpYmxlXG4gKiAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgKy0tLS0tKy0tLS0tLS0tLS0tLS0tLStcbiAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgKy0tLS0tKy0tLS0tKyAgICAgICAgICAgICAgIHxcbiAqICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgIHxcbiAqICAgRmFpbGVkICAgICAgQ2FuY2VsbGVkICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0rXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgUmVjb2duaXplZCAgICAgICBCZWdhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kZWQvUmVjb2duaXplZFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJlY29nbml6ZXJcbiAqIEV2ZXJ5IHJlY29nbml6ZXIgbmVlZHMgdG8gZXh0ZW5kIGZyb20gdGhpcyBjbGFzcy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuXG52YXIgUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7XG4gICAgICBlbmFibGU6IHRydWVcbiAgICB9LCBvcHRpb25zKTtcbiAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsOyAvLyBkZWZhdWx0IGlzIGVuYWJsZSB0cnVlXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgdGhpcy5zaW11bHRhbmVvdXMgPSB7fTtcbiAgICB0aGlzLnJlcXVpcmVGYWlsID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1JlY29nbml6ZXJ9XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQob3B0aW9ucykge1xuICAgIGFzc2lnbiQxKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7IC8vIGFsc28gdXBkYXRlIHRoZSB0b3VjaEFjdGlvbiwgaW4gY2FzZSBzb21ldGhpbmcgY2hhbmdlZCBhYm91dCB0aGUgZGlyZWN0aW9ucy9lbmFibGVkIHN0YXRlXG5cbiAgICB0aGlzLm1hbmFnZXIgJiYgdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiByZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzaW11bHRhbmVvdXMgPSB0aGlzLnNpbXVsdGFuZW91cztcbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG5cbiAgICBpZiAoIXNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdKSB7XG4gICAgICBzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSA9IG90aGVyUmVjb2duaXplcjtcbiAgICAgIG90aGVyUmVjb2duaXplci5yZWNvZ25pemVXaXRoKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgc2ltdWx0YW5lb3VzIGxpbmsuIGl0IGRvZXNudCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRyb3BSZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gZHJvcFJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICBkZWxldGUgdGhpcy5zaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlY29nbml6ZXIgY2FuIG9ubHkgcnVuIHdoZW4gYW4gb3RoZXIgaXMgZmFpbGluZ1xuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5yZXF1aXJlRmFpbHVyZSA9IGZ1bmN0aW9uIHJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcblxuICAgIGlmIChpbkFycmF5KHJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpID09PSAtMSkge1xuICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgcmVxdWlyZUZhaWx1cmUgbGluay4gaXQgZG9lcyBub3QgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5kcm9wUmVxdWlyZUZhaWx1cmUgPSBmdW5jdGlvbiBkcm9wUmVxdWlyZUZhaWx1cmUob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgdmFyIGluZGV4ID0gaW5BcnJheSh0aGlzLnJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhcyByZXF1aXJlIGZhaWx1cmVzIGJvb2xlYW5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmhhc1JlcXVpcmVGYWlsdXJlcyA9IGZ1bmN0aW9uIGhhc1JlcXVpcmVGYWlsdXJlcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaWYgdGhlIHJlY29nbml6ZXIgY2FuIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5SZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gY2FuUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gISF0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogWW91IHNob3VsZCB1c2UgYHRyeUVtaXRgIGluc3RlYWQgb2YgYGVtaXRgIGRpcmVjdGx5IHRvIGNoZWNrXG4gICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgc2VsZi5tYW5hZ2VyLmVtaXQoZXZlbnQsIGlucHV0KTtcbiAgICB9IC8vICdwYW5zdGFydCcgYW5kICdwYW5tb3ZlJ1xuXG5cbiAgICBpZiAoc3RhdGUgPCBTVEFURV9FTkRFRCkge1xuICAgICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQgKyBzdGF0ZVN0cihzdGF0ZSkpO1xuICAgIH1cblxuICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgaWYgKGlucHV0LmFkZGl0aW9uYWxFdmVudCkge1xuICAgICAgLy8gYWRkaXRpb25hbCBldmVudChwYW5sZWZ0LCBwYW5yaWdodCwgcGluY2hpbiwgcGluY2hvdXQuLi4pXG4gICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgfSAvLyBwYW5lbmQgYW5kIHBhbmNhbmNlbFxuXG5cbiAgICBpZiAoc3RhdGUgPj0gU1RBVEVfRU5ERUQpIHtcbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgcmVxdWlyZSBmYWlsdXJlIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQsXG4gICAqIGlmIHRydWUsIGl0IGVtaXRzIGEgZ2VzdHVyZSBldmVudCxcbiAgICogb3RoZXJ3aXNlLCBzZXR1cCB0aGUgc3RhdGUgdG8gRkFJTEVELlxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8udHJ5RW1pdCA9IGZ1bmN0aW9uIHRyeUVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5jYW5FbWl0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgIH0gLy8gaXQncyBmYWlsaW5nIGFueXdheVxuXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FuIHdlIGVtaXQ/XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5FbWl0ID0gZnVuY3Rpb24gY2FuRW1pdCgpIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoKSB7XG4gICAgICBpZiAoISh0aGlzLnJlcXVpcmVGYWlsW2ldLnN0YXRlICYgKFNUQVRFX0ZBSUxFRCB8IFNUQVRFX1BPU1NJQkxFKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemUgPSBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgLy8gbWFrZSBhIG5ldyBjb3B5IG9mIHRoZSBpbnB1dERhdGFcbiAgICAvLyBzbyB3ZSBjYW4gY2hhbmdlIHRoZSBpbnB1dERhdGEgd2l0aG91dCBtZXNzaW5nIHVwIHRoZSBvdGhlciByZWNvZ25pemVyc1xuICAgIHZhciBpbnB1dERhdGFDbG9uZSA9IGFzc2lnbiQxKHt9LCBpbnB1dERhdGEpOyAvLyBpcyBpcyBlbmFibGVkIGFuZCBhbGxvdyByZWNvZ25pemluZz9cblxuICAgIGlmICghYm9vbE9yRm4odGhpcy5vcHRpb25zLmVuYWJsZSwgW3RoaXMsIGlucHV0RGF0YUNsb25lXSkpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyByZXNldCB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZFxuXG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9SRUNPR05JWkVEIHwgU1RBVEVfQ0FOQ0VMTEVEIHwgU1RBVEVfRkFJTEVEKSkge1xuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnByb2Nlc3MoaW5wdXREYXRhQ2xvbmUpOyAvLyB0aGUgcmVjb2duaXplciBoYXMgcmVjb2duaXplZCBhIGdlc3R1cmVcbiAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCB8IFNUQVRFX0NBTkNFTExFRCkpIHtcbiAgICAgIHRoaXMudHJ5RW1pdChpbnB1dERhdGFDbG9uZSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgcmVjb2duaXplclxuICAgKiB0aGUgYWN0dWFsIHJlY29nbml6aW5nIGhhcHBlbnMgaW4gdGhpcyBtZXRob2RcbiAgICogQHZpcnR1YWxcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKiBAcmV0dXJucyB7Y29uc3RhbnR9IFNUQVRFXG4gICAqL1xuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cblxuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dERhdGEpIHt9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZXR1cm4gdGhlIHByZWZlcnJlZCB0b3VjaC1hY3Rpb25cbiAgICogQHZpcnR1YWxcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cblxuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYWxsZWQgd2hlbiB0aGUgZ2VzdHVyZSBpc24ndCBhbGxvd2VkIHRvIHJlY29nbml6ZVxuICAgKiBsaWtlIHdoZW4gYW5vdGhlciBpcyBiZWluZyByZWNvZ25pemVkIG9yIGl0IGlzIGRpc2FibGVkXG4gICAqIEB2aXJ0dWFsXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7fTtcblxuICByZXR1cm4gUmVjb2duaXplcjtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQSB0YXAgaXMgcmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvaW5nIGEgc21hbGwgdGFwL2NsaWNrLiBNdWx0aXBsZSB0YXBzIGFyZSByZWNvZ25pemVkIGlmIHRoZXkgb2NjdXJcbiAqIGJldHdlZW4gdGhlIGdpdmVuIGludGVydmFsIGFuZCBwb3NpdGlvbi4gVGhlIGRlbGF5IG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvZ25pemUgbXVsdGktdGFwcyB3aXRob3V0IGZpcmluZ1xuICogYSBzaW5nbGUgdGFwLlxuICpcbiAqIFRoZSBldmVudERhdGEgZnJvbSB0aGUgZW1pdHRlZCBldmVudCBjb250YWlucyB0aGUgcHJvcGVydHkgYHRhcENvdW50YCwgd2hpY2ggY29udGFpbnMgdGhlIGFtb3VudCBvZlxuICogbXVsdGktdGFwcyBiZWluZyByZWNvZ25pemVkLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFRhcFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFRhcFJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBUYXBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAndGFwJyxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgdGFwczogMSxcbiAgICAgIGludGVydmFsOiAzMDAsXG4gICAgICAvLyBtYXggdGltZSBiZXR3ZWVuIHRoZSBtdWx0aS10YXAgdGFwc1xuICAgICAgdGltZTogMjUwLFxuICAgICAgLy8gbWF4IHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgZG93biAobGlrZSBmaW5nZXIgb24gdGhlIHNjcmVlbilcbiAgICAgIHRocmVzaG9sZDogOSxcbiAgICAgIC8vIGEgbWluaW1hbCBtb3ZlbWVudCBpcyBvaywgYnV0IGtlZXAgaXQgbG93XG4gICAgICBwb3NUaHJlc2hvbGQ6IDEwXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7IC8vIHByZXZpb3VzIHRpbWUgYW5kIGNlbnRlcixcbiAgICAvLyB1c2VkIGZvciB0YXAgY291bnRpbmdcblxuICAgIF90aGlzLnBUaW1lID0gZmFsc2U7XG4gICAgX3RoaXMucENlbnRlciA9IGZhbHNlO1xuICAgIF90aGlzLl90aW1lciA9IG51bGw7XG4gICAgX3RoaXMuX2lucHV0ID0gbnVsbDtcbiAgICBfdGhpcy5jb3VudCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRhcFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTl07XG4gIH07XG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgdmFyIHZhbGlkVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgb3B0aW9ucy50aW1lO1xuICAgIHRoaXMucmVzZXQoKTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiB0aGlzLmNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgIH0gLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cblxuICAgIGlmICh2YWxpZE1vdmVtZW50ICYmIHZhbGlkVG91Y2hUaW1lICYmIHZhbGlkUG9pbnRlcnMpIHtcbiAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT09IElOUFVUX0VORCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFsaWRJbnRlcnZhbCA9IHRoaXMucFRpbWUgPyBpbnB1dC50aW1lU3RhbXAgLSB0aGlzLnBUaW1lIDwgb3B0aW9ucy5pbnRlcnZhbCA6IHRydWU7XG4gICAgICB2YXIgdmFsaWRNdWx0aVRhcCA9ICF0aGlzLnBDZW50ZXIgfHwgZ2V0RGlzdGFuY2UodGhpcy5wQ2VudGVyLCBpbnB1dC5jZW50ZXIpIDwgb3B0aW9ucy5wb3NUaHJlc2hvbGQ7XG4gICAgICB0aGlzLnBUaW1lID0gaW5wdXQudGltZVN0YW1wO1xuICAgICAgdGhpcy5wQ2VudGVyID0gaW5wdXQuY2VudGVyO1xuXG4gICAgICBpZiAoIXZhbGlkTXVsdGlUYXAgfHwgIXZhbGlkSW50ZXJ2YWwpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIGlmIHRhcCBjb3VudCBtYXRjaGVzIHdlIGhhdmUgcmVjb2duaXplZCBpdCxcbiAgICAgIC8vIGVsc2UgaXQgaGFzIGJlZ2FuIHJlY29nbml6aW5nLi4uXG5cbiAgICAgIHZhciB0YXBDb3VudCA9IHRoaXMuY291bnQgJSBvcHRpb25zLnRhcHM7XG5cbiAgICAgIGlmICh0YXBDb3VudCA9PT0gMCkge1xuICAgICAgICAvLyBubyBmYWlsaW5nIHJlcXVpcmVtZW50cywgaW1tZWRpYXRlbHkgdHJpZ2dlciB0aGUgdGFwIGV2ZW50XG4gICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZUZhaWx1cmVzKCkpIHtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcblxuICAgICAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgICAgICB9LCBvcHRpb25zLmludGVydmFsKTtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5mYWlsVGltZW91dCA9IGZ1bmN0aW9uIGZhaWxUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LCB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHRoaXMuX2lucHV0LnRhcENvdW50ID0gdGhpcy5jb3VudDtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVGFwUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFRoaXMgcmVjb2duaXplciBpcyBqdXN0IHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgc2ltcGxlIGF0dHJpYnV0ZSByZWNvZ25pemVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBBdHRyUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoQXR0clJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBBdHRyUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFVzZWQgdG8gY2hlY2sgaWYgaXQgdGhlIHJlY29nbml6ZXIgcmVjZWl2ZXMgdmFsaWQgaW5wdXQsIGxpa2UgaW5wdXQuZGlzdGFuY2UgPiAxMC5cbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gcmVjb2duaXplZFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBBdHRyUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICB2YXIgb3B0aW9uUG9pbnRlcnMgPSB0aGlzLm9wdGlvbnMucG9pbnRlcnM7XG4gICAgcmV0dXJuIG9wdGlvblBvaW50ZXJzID09PSAwIHx8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9uUG9pbnRlcnM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICovXG5cblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIHZhciBldmVudFR5cGUgPSBpbnB1dC5ldmVudFR5cGU7XG4gICAgdmFyIGlzUmVjb2duaXplZCA9IHN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCk7XG4gICAgdmFyIGlzVmFsaWQgPSB0aGlzLmF0dHJUZXN0KGlucHV0KTsgLy8gb24gY2FuY2VsIGlucHV0IGFuZCB3ZSd2ZSByZWNvZ25pemVkIGJlZm9yZSwgcmV0dXJuIFNUQVRFX0NBTkNFTExFRFxuXG4gICAgaWYgKGlzUmVjb2duaXplZCAmJiAoZXZlbnRUeXBlICYgSU5QVVRfQ0FOQ0VMIHx8ICFpc1ZhbGlkKSkge1xuICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0FOQ0VMTEVEO1xuICAgIH0gZWxzZSBpZiAoaXNSZWNvZ25pemVkIHx8IGlzVmFsaWQpIHtcbiAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfRU5ERUQ7XG4gICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgcmV0dXJuIEF0dHJSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZGlyZWN0aW9uIGNvbnMgdG8gc3RyaW5nXG4gKiBAcGFyYW0ge2NvbnN0YW50fSBkaXJlY3Rpb25cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZGlyZWN0aW9uU3RyKGRpcmVjdGlvbikge1xuICBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fRE9XTikge1xuICAgIHJldHVybiAnZG93bic7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fVVApIHtcbiAgICByZXR1cm4gJ3VwJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgcmV0dXJuICdsZWZ0JztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9SSUdIVCkge1xuICAgIHJldHVybiAncmlnaHQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQYW5cbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGFuZCBtb3ZlZCBpbiB0aGUgYWxsb3dlZCBkaXJlY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFBhblJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQYW5SZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFBhblJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGFuJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0FMTFxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICAgIF90aGlzLnBYID0gbnVsbDtcbiAgICBfdGhpcy5wWSA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFBhblJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciBhY3Rpb25zID0gW107XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1kpO1xuICAgIH1cblxuICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9O1xuXG4gIF9wcm90by5kaXJlY3Rpb25UZXN0ID0gZnVuY3Rpb24gZGlyZWN0aW9uVGVzdChpbnB1dCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBoYXNNb3ZlZCA9IHRydWU7XG4gICAgdmFyIGRpc3RhbmNlID0gaW5wdXQuZGlzdGFuY2U7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0LmRpcmVjdGlvbjtcbiAgICB2YXIgeCA9IGlucHV0LmRlbHRhWDtcbiAgICB2YXIgeSA9IGlucHV0LmRlbHRhWTsgLy8gbG9jayB0byBheGlzP1xuXG4gICAgaWYgKCEoZGlyZWN0aW9uICYgb3B0aW9ucy5kaXJlY3Rpb24pKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICBkaXJlY3Rpb24gPSB4ID09PSAwID8gRElSRUNUSU9OX05PTkUgOiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgICAgICBoYXNNb3ZlZCA9IHggIT09IHRoaXMucFg7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFYKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IHkgPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG4gICAgICAgIGhhc01vdmVkID0geSAhPT0gdGhpcy5wWTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gaGFzTW92ZWQgJiYgZGlzdGFuY2UgPiBvcHRpb25zLnRocmVzaG9sZCAmJiBkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBBdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKCAvLyByZXBsYWNlIHdpdGggYSBzdXBlciBjYWxsXG4gICAgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOIHx8ICEodGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKSAmJiB0aGlzLmRpcmVjdGlvblRlc3QoaW5wdXQpKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB0aGlzLnBYID0gaW5wdXQuZGVsdGFYO1xuICAgIHRoaXMucFkgPSBpbnB1dC5kZWx0YVk7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5kaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gUGFuUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTd2lwZVxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIG1vdmluZyBmYXN0ICh2ZWxvY2l0eSksIHdpdGggZW5vdWdoIGRpc3RhbmNlIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgU3dpcGVSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoU3dpcGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFN3aXBlUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICB2ZWxvY2l0eTogMC4zLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpcGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciB2ZWxvY2l0eTtcblxuICAgIGlmIChkaXJlY3Rpb24gJiAoRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5WTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiBkaXJlY3Rpb24gJiBpbnB1dC5vZmZzZXREaXJlY3Rpb24gJiYgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmIGlucHV0Lm1heFBvaW50ZXJzID09PSB0aGlzLm9wdGlvbnMucG9pbnRlcnMgJiYgYWJzKHZlbG9jaXR5KSA+IHRoaXMub3B0aW9ucy52ZWxvY2l0eSAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQ7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5vZmZzZXREaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uLCBpbnB1dCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFN3aXBlUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQaW5jaFxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXJzIGFyZSBtb3ZpbmcgdG93YXJkICh6b29tLWluKSBvciBhd2F5IGZyb20gZWFjaCBvdGhlciAoem9vbS1vdXQpLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBQaW5jaFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQaW5jaFJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUGluY2hSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGluY2gnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQaW5jaFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnNjYWxlIC0gMSkgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnNjYWxlICE9PSAxKSB7XG4gICAgICB2YXIgaW5PdXQgPSBpbnB1dC5zY2FsZSA8IDEgPyAnaW4nIDogJ291dCc7XG4gICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICB9XG5cbiAgICBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFBpbmNoUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSb3RhdGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVyIGFyZSBtb3ZpbmcgaW4gYSBjaXJjdWxhciBtb3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFJvdGF0ZVJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShSb3RhdGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFJvdGF0ZVJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdyb3RhdGUnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSb3RhdGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIChNYXRoLmFicyhpbnB1dC5yb3RhdGlvbikgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgcmV0dXJuIFJvdGF0ZVJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUHJlc3NcbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGZvciB4IG1zIHdpdGhvdXQgYW55IG1vdmVtZW50LlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFByZXNzUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUHJlc3NSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUHJlc3NSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncHJlc3MnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0aW1lOiAyNTEsXG4gICAgICAvLyBtaW5pbWFsIHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgcHJlc3NlZFxuICAgICAgdGhyZXNob2xkOiA5XG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gICAgX3RoaXMuX3RpbWVyID0gbnVsbDtcbiAgICBfdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQcmVzc1JlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX0FVVE9dO1xuICB9O1xuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgIHZhciB2YWxpZFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPiBvcHRpb25zLnRpbWU7XG4gICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cbiAgICBpZiAoIXZhbGlkTW92ZW1lbnQgfHwgIXZhbGlkUG9pbnRlcnMgfHwgaW5wdXQuZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgIXZhbGlkVGltZSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG5cbiAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgIH0sIG9wdGlvbnMudGltZSk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpbnB1dCAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIFwidXBcIiwgaW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUHJlc3NSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IGlmIERPTSBldmVudHMgYXJlIGJlaW5nIHRyaWdnZXJlZC5cbiAgICogQnV0IHRoaXMgaXMgc2xvd2VyIGFuZCB1bnVzZWQgYnkgc2ltcGxlIGltcGxlbWVudGF0aW9ucywgc28gZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkb21FdmVudHM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eS9mYWxsYmFjay5cbiAgICogV2hlbiBzZXQgdG8gYGNvbXB1dGVgIGl0IHdpbGwgbWFnaWNhbGx5IHNldCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgYWRkZWQgcmVjb2duaXplcnMuXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqIEBkZWZhdWx0IGNvbXB1dGVcbiAgICovXG4gIHRvdWNoQWN0aW9uOiBUT1VDSF9BQ1RJT05fQ09NUFVURSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGVuYWJsZTogdHJ1ZSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogRVhQRVJJTUVOVEFMIEZFQVRVUkUgLS0gY2FuIGJlIHJlbW92ZWQvY2hhbmdlZFxuICAgKiBDaGFuZ2UgdGhlIHBhcmVudCBpbnB1dCB0YXJnZXQgZWxlbWVudC5cbiAgICogSWYgTnVsbCwgdGhlbiBpdCBpcyBiZWluZyBzZXQgdGhlIHRvIG1haW4gZWxlbWVudC5cbiAgICogQHR5cGUge051bGx8RXZlbnRUYXJnZXR9XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGlucHV0VGFyZ2V0OiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBmb3JjZSBhbiBpbnB1dCBjbGFzc1xuICAgKiBAdHlwZSB7TnVsbHxGdW5jdGlvbn1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5wdXRDbGFzczogbnVsbCxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogU29tZSBDU1MgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB3b3JraW5nIG9mIEhhbW1lci5cbiAgICogQWRkIHRoZW0gdG8gdGhpcyBtZXRob2QgYW5kIHRoZXkgd2lsbCBiZSBzZXQgd2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyLlxuICAgKiBAbmFtZXNwYWNlXG4gICAqL1xuICBjc3NQcm9wczoge1xuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZXMgdGV4dCBzZWxlY3Rpb24gdG8gaW1wcm92ZSB0aGUgZHJhZ2dpbmcgZ2VzdHVyZS4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlclNlbGVjdDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGUgdGhlIFdpbmRvd3MgUGhvbmUgZ3JpcHBlcnMgd2hlbiBwcmVzc2luZyBhbiBlbGVtZW50LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdG91Y2hTZWxlY3Q6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlcyB0aGUgZGVmYXVsdCBjYWxsb3V0IHNob3duIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0LlxuICAgICAqIE9uIGlPUywgd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQgc3VjaCBhcyBhIGxpbmssIFNhZmFyaSBkaXNwbGF5c1xuICAgICAqIGEgY2FsbG91dCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rLiBUaGlzIHByb3BlcnR5IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGF0IGNhbGxvdXQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB0b3VjaENhbGxvdXQ6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB6b29taW5nIGlzIGVuYWJsZWQuIFVzZWQgYnkgSUUxMD5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIGNvbnRlbnRab29taW5nOiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlckRyYWc6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBPdmVycmlkZXMgdGhlIGhpZ2hsaWdodCBjb2xvciBzaG93biB3aGVuIHRoZSB1c2VyIHRhcHMgYSBsaW5rIG9yIGEgSmF2YVNjcmlwdFxuICAgICAqIGNsaWNrYWJsZSBlbGVtZW50IGluIGlPUy4gVGhpcyBwcm9wZXJ0eSBvYmV5cyB0aGUgYWxwaGEgdmFsdWUsIGlmIHNwZWNpZmllZC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdyZ2JhKDAsMCwwLDApJ1xuICAgICAqL1xuICAgIHRhcEhpZ2hsaWdodENvbG9yOiBcInJnYmEoMCwwLDAsMClcIlxuICB9XG59O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogRGVmYXVsdCByZWNvZ25pemVyIHNldHVwIHdoZW4gY2FsbGluZyBgSGFtbWVyKClgXG4gKiBXaGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIgdGhlc2Ugd2lsbCBiZSBza2lwcGVkLlxuICogVGhpcyBpcyBzZXBhcmF0ZWQgd2l0aCBvdGhlciBkZWZhdWx0cyBiZWNhdXNlIG9mIHRyZWUtc2hha2luZy5cbiAqIEB0eXBlIHtBcnJheX1cbiAqL1xuXG52YXIgcHJlc2V0ID0gW1tSb3RhdGVSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn1dLCBbUGluY2hSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn0sIFsncm90YXRlJ11dLCBbU3dpcGVSZWNvZ25pemVyLCB7XG4gIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUxcbn1dLCBbUGFuUmVjb2duaXplciwge1xuICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG59LCBbJ3N3aXBlJ11dLCBbVGFwUmVjb2duaXplcl0sIFtUYXBSZWNvZ25pemVyLCB7XG4gIGV2ZW50OiAnZG91YmxldGFwJyxcbiAgdGFwczogMlxufSwgWyd0YXAnXV0sIFtQcmVzc1JlY29nbml6ZXJdXTtcblxudmFyIFNUT1AgPSAxO1xudmFyIEZPUkNFRF9TVE9QID0gMjtcbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZC9yZW1vdmUgdGhlIGNzcyBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gbWFuYWdlci5vcHRpb25zLmNzc1Byb3BzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYWRkXG4gKi9cblxuZnVuY3Rpb24gdG9nZ2xlQ3NzUHJvcHMobWFuYWdlciwgYWRkKSB7XG4gIHZhciBlbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuXG4gIGlmICghZWxlbWVudC5zdHlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwcm9wO1xuICBlYWNoKG1hbmFnZXIub3B0aW9ucy5jc3NQcm9wcywgZnVuY3Rpb24gKHZhbHVlLCBuYW1lKSB7XG4gICAgcHJvcCA9IHByZWZpeGVkKGVsZW1lbnQuc3R5bGUsIG5hbWUpO1xuXG4gICAgaWYgKGFkZCkge1xuICAgICAgbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSA9IGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSBtYW5hZ2VyLm9sZENzc1Byb3BzW3Byb3BdIHx8IFwiXCI7XG4gICAgfVxuICB9KTtcblxuICBpZiAoIWFkZCkge1xuICAgIG1hbmFnZXIub2xkQ3NzUHJvcHMgPSB7fTtcbiAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdHJpZ2dlciBkb20gZXZlbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqL1xuXG5cbmZ1bmN0aW9uIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSkge1xuICB2YXIgZ2VzdHVyZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgZ2VzdHVyZUV2ZW50LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gIGdlc3R1cmVFdmVudC5nZXN0dXJlID0gZGF0YTtcbiAgZGF0YS50YXJnZXQuZGlzcGF0Y2hFdmVudChnZXN0dXJlRXZlbnQpO1xufVxuLyoqXG4qIEBwcml2YXRlXG4gKiBNYW5hZ2VyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG5cbnZhciBNYW5hZ2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMub3B0aW9ucyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMucmVjb2duaXplcnMgPSBbXTtcbiAgICB0aGlzLm9sZENzc1Byb3BzID0ge307XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmlucHV0ID0gY3JlYXRlSW5wdXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnRvdWNoQWN0aW9uID0gbmV3IFRvdWNoQWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG4gICAgZWFjaCh0aGlzLm9wdGlvbnMucmVjb2duaXplcnMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgcmVjb2duaXplciA9IF90aGlzLmFkZChuZXcgaXRlbVswXShpdGVtWzFdKSk7XG5cbiAgICAgIGl0ZW1bMl0gJiYgcmVjb2duaXplci5yZWNvZ25pemVXaXRoKGl0ZW1bMl0pO1xuICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgYXNzaWduJDEodGhpcy5vcHRpb25zLCBvcHRpb25zKTsgLy8gT3B0aW9ucyB0aGF0IG5lZWQgYSBsaXR0bGUgbW9yZSBzZXR1cFxuXG4gICAgaWYgKG9wdGlvbnMudG91Y2hBY3Rpb24pIHtcbiAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaW5wdXRUYXJnZXQpIHtcbiAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaW5wdXQudGFyZ2V0ID0gb3B0aW9ucy5pbnB1dFRhcmdldDtcbiAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc3RvcCByZWNvZ25pemluZyBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBUaGlzIHNlc3Npb24gd2lsbCBiZSBkaXNjYXJkZWQsIHdoZW4gYSBuZXcgW2lucHV0XXN0YXJ0IGV2ZW50IGlzIGZpcmVkLlxuICAgKiBXaGVuIGZvcmNlZCwgdGhlIHJlY29nbml6ZXIgY3ljbGUgaXMgc3RvcHBlZCBpbW1lZGlhdGVseS5cbiAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VdXG4gICAqL1xuXG5cbiAgX3Byb3RvLnN0b3AgPSBmdW5jdGlvbiBzdG9wKGZvcmNlKSB7XG4gICAgdGhpcy5zZXNzaW9uLnN0b3BwZWQgPSBmb3JjZSA/IEZPUkNFRF9TVE9QIDogU1RPUDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJ1biB0aGUgcmVjb2duaXplcnMhXG4gICAqIGNhbGxlZCBieSB0aGUgaW5wdXRIYW5kbGVyIGZ1bmN0aW9uIG9uIGV2ZXJ5IG1vdmVtZW50IG9mIHRoZSBwb2ludGVycyAodG91Y2hlcylcbiAgICogaXQgd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIHJlY29nbml6ZXJzIGFuZCB0cmllcyB0byBkZXRlY3QgdGhlIGdlc3R1cmUgdGhhdCBpcyBiZWluZyBtYWRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuXG4gICAgaWYgKHNlc3Npb24uc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcnVuIHRoZSB0b3VjaC1hY3Rpb24gcG9seWZpbGxcblxuXG4gICAgdGhpcy50b3VjaEFjdGlvbi5wcmV2ZW50RGVmYXVsdHMoaW5wdXREYXRhKTtcbiAgICB2YXIgcmVjb2duaXplcjtcbiAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzOyAvLyB0aGlzIGhvbGRzIHRoZSByZWNvZ25pemVyIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAvLyBzbyB0aGUgcmVjb2duaXplcidzIHN0YXRlIG5lZWRzIHRvIGJlIEJFR0FOLCBDSEFOR0VELCBFTkRFRCBvciBSRUNPR05JWkVEXG4gICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuXG4gICAgdmFyIGN1clJlY29nbml6ZXIgPSBzZXNzaW9uLmN1clJlY29nbml6ZXI7IC8vIHJlc2V0IHdoZW4gdGhlIGxhc3QgcmVjb2duaXplciBpcyByZWNvZ25pemVkXG4gICAgLy8gb3Igd2hlbiB3ZSdyZSBpbiBhIG5ldyBzZXNzaW9uXG5cbiAgICBpZiAoIWN1clJlY29nbml6ZXIgfHwgY3VyUmVjb2duaXplciAmJiBjdXJSZWNvZ25pemVyLnN0YXRlICYgU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICAgIGN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgcmVjb2duaXplcnMubGVuZ3RoKSB7XG4gICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07IC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgIC8vIDEuICAgYWxsb3cgaWYgdGhlIHNlc3Npb24gaXMgTk9UIGZvcmNlZCBzdG9wcGVkIChzZWUgdGhlIC5zdG9wKCkgbWV0aG9kKVxuICAgICAgLy8gMi4gICBhbGxvdyBpZiB3ZSBzdGlsbCBoYXZlbid0IHJlY29nbml6ZWQgYSBnZXN0dXJlIGluIHRoaXMgc2Vzc2lvbiwgb3IgdGhlIHRoaXMgcmVjb2duaXplciBpcyB0aGUgb25lXG4gICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgIC8vIDMuICAgYWxsb3cgaWYgdGhlIHJlY29nbml6ZXIgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzIHdpdGggdGhlIGN1cnJlbnQgcmVjb2duaXplZCByZWNvZ25pemVyLlxuICAgICAgLy8gICAgICB0aGlzIGNhbiBiZSBzZXR1cCB3aXRoIHRoZSBgcmVjb2duaXplV2l0aCgpYCBtZXRob2Qgb24gdGhlIHJlY29nbml6ZXIuXG5cbiAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQgIT09IEZPUkNFRF9TVE9QICYmICggLy8gMVxuICAgICAgIWN1clJlY29nbml6ZXIgfHwgcmVjb2duaXplciA9PT0gY3VyUmVjb2duaXplciB8fCAvLyAyXG4gICAgICByZWNvZ25pemVyLmNhblJlY29nbml6ZVdpdGgoY3VyUmVjb2duaXplcikpKSB7XG4gICAgICAgIC8vIDNcbiAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemUoaW5wdXREYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29nbml6ZXIucmVzZXQoKTtcbiAgICAgIH0gLy8gaWYgdGhlIHJlY29nbml6ZXIgaGFzIGJlZW4gcmVjb2duaXppbmcgdGhlIGlucHV0IGFzIGEgdmFsaWQgZ2VzdHVyZSwgd2Ugd2FudCB0byBzdG9yZSB0aGlzIG9uZSBhcyB0aGVcbiAgICAgIC8vIGN1cnJlbnQgYWN0aXZlIHJlY29nbml6ZXIuIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBhY3RpdmUgcmVjb2duaXplclxuXG5cbiAgICAgIGlmICghY3VyUmVjb2duaXplciAmJiByZWNvZ25pemVyLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEKSkge1xuICAgICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSByZWNvZ25pemVyO1xuICAgICAgICBjdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGdldCBhIHJlY29nbml6ZXIgYnkgaXRzIGV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TnVsbH1cbiAgICovXG5cblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHJlY29nbml6ZXIpIHtcbiAgICBpZiAocmVjb2duaXplciBpbnN0YW5jZW9mIFJlY29nbml6ZXIpIHtcbiAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgIH1cblxuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVjb2duaXplcnNbaV0ub3B0aW9ucy5ldmVudCA9PT0gcmVjb2duaXplcikge1xuICAgICAgICByZXR1cm4gcmVjb2duaXplcnNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSBhZGQgYSByZWNvZ25pemVyIHRvIHRoZSBtYW5hZ2VyXG4gICAqIGV4aXN0aW5nIHJlY29nbml6ZXJzIHdpdGggdGhlIHNhbWUgZXZlbnQgbmFtZSB3aWxsIGJlIHJlbW92ZWRcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE1hbmFnZXJ9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChyZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsIFwiYWRkXCIsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IC8vIHJlbW92ZSBleGlzdGluZ1xuXG5cbiAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLnJlbW92ZShleGlzdGluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWNvZ25pemVycy5wdXNoKHJlY29nbml6ZXIpO1xuICAgIHJlY29nbml6ZXIubWFuYWdlciA9IHRoaXM7XG4gICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlbW92ZSBhIHJlY29nbml6ZXIgYnkgbmFtZSBvciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgKi9cblxuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhyZWNvZ25pemVyLCBcInJlbW92ZVwiLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFJlY29nbml6ZXIgPSB0aGlzLmdldChyZWNvZ25pemVyKTsgLy8gbGV0J3MgbWFrZSBzdXJlIHRoaXMgcmVjb2duaXplciBleGlzdHNcblxuICAgIGlmIChyZWNvZ25pemVyKSB7XG4gICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuICAgICAgdmFyIGluZGV4ID0gaW5BcnJheShyZWNvZ25pemVycywgdGFyZ2V0UmVjb2duaXplcik7XG5cbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGJpbmQgZXZlbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub24gPSBmdW5jdGlvbiBvbihldmVudHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQgfHwgaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBoYW5kbGVyc1tldmVudF0gPSBoYW5kbGVyc1tldmVudF0gfHwgW107XG4gICAgICBoYW5kbGVyc1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIHVuYmluZCBldmVudCwgbGVhdmUgZW1pdCBibGFuayB0byByZW1vdmUgYWxsIGhhbmRsZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2hhbmRsZXJdXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub2ZmID0gZnVuY3Rpb24gb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVyc1tldmVudF0gJiYgaGFuZGxlcnNbZXZlbnRdLnNwbGljZShpbkFycmF5KGhhbmRsZXJzW2V2ZW50XSwgaGFuZGxlciksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgZGF0YSkge1xuICAgIC8vIHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGRvbSBldmVudHNcbiAgICBpZiAodGhpcy5vcHRpb25zLmRvbUV2ZW50cykge1xuICAgICAgdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKTtcbiAgICB9IC8vIG5vIGhhbmRsZXJzLCBzbyBza2lwIGl0IGFsbFxuXG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzW2V2ZW50XSAmJiB0aGlzLmhhbmRsZXJzW2V2ZW50XS5zbGljZSgpO1xuXG4gICAgaWYgKCFoYW5kbGVycyB8fCAhaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGF0YS50eXBlID0gZXZlbnQ7XG5cbiAgICBkYXRhLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGF0YS5zcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgaGFuZGxlcnNbaV0oZGF0YSk7XG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZGVzdHJveSB0aGUgbWFuYWdlciBhbmQgdW5iaW5kcyBhbGwgZXZlbnRzXG4gICAqIGl0IGRvZXNuJ3QgdW5iaW5kIGRvbSBldmVudHMsIHRoYXQgaXMgdGhlIHVzZXIgb3duIHJlc3BvbnNpYmlsaXR5XG4gICAqL1xuXG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuZWxlbWVudCAmJiB0b2dnbGVDc3NQcm9wcyh0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIE1hbmFnZXI7XG59KCk7XG5cbnZhciBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQID0ge1xuICB0b3VjaHN0YXJ0OiBJTlBVVF9TVEFSVCxcbiAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICB0b3VjaGNhbmNlbDogSU5QVVRfQ0FOQ0VMXG59O1xudmFyIFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQnO1xudmFyIFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcbi8qKlxuICogQHByaXZhdGVcbiAqIFRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBTaW5nbGVUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU2luZ2xlVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBTaW5nbGVUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IFNpbmdsZVRvdWNoSW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2VGFyZ2V0ID0gU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTaW5nbGVUb3VjaElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgdHlwZSA9IFNJTkdMRV9UT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07IC8vIHNob3VsZCB3ZSBoYW5kbGUgdGhlIHRvdWNoIGV2ZW50cz9cblxuICAgIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3VjaGVzID0gbm9ybWFsaXplU2luZ2xlVG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTsgLy8gd2hlbiBkb25lLCByZXNldCB0aGUgc3RhcnRlZCBzdGF0ZVxuXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiB0b3VjaGVzWzBdLmxlbmd0aCAtIHRvdWNoZXNbMV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBTaW5nbGVUb3VjaElucHV0O1xufShJbnB1dCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgdmFyIGFsbCA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciBjaGFuZ2VkID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG5cbiAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgIGFsbCA9IHVuaXF1ZUFycmF5KGFsbC5jb25jYXQoY2hhbmdlZCksICdpZGVudGlmaWVyJywgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gW2FsbCwgY2hhbmdlZF07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdyYXAgYSBtZXRob2Qgd2l0aCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgYW5kIHN0YWNrIHRyYWNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB3cmFwcGluZyB0aGUgc3VwcGxpZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBkZXByZWNhdGUobWV0aG9kLCBuYW1lLCBtZXNzYWdlKSB7XG4gIHZhciBkZXByZWNhdGlvbk1lc3NhZ2UgPSBcIkRFUFJFQ0FURUQgTUVUSE9EOiBcIiArIG5hbWUgKyBcIlxcblwiICsgbWVzc2FnZSArIFwiIEFUIFxcblwiO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICB2YXIgc3RhY2sgPSBlICYmIGUuc3RhY2sgPyBlLnN0YWNrLnJlcGxhY2UoL15bXlxcKF0rP1tcXG4kXS9nbSwgJycpLnJlcGxhY2UoL15cXHMrYXRcXHMrL2dtLCAnJykucmVwbGFjZSgvXk9iamVjdC48YW5vbnltb3VzPlxccypcXCgvZ20sICd7YW5vbnltb3VzfSgpQCcpIDogJ1Vua25vd24gU3RhY2sgVHJhY2UnO1xuICAgIHZhciBsb2cgPSB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUud2FybiB8fCB3aW5kb3cuY29uc29sZS5sb2cpO1xuXG4gICAgaWYgKGxvZykge1xuICAgICAgbG9nLmNhbGwod2luZG93LmNvbnNvbGUsIGRlcHJlY2F0aW9uTWVzc2FnZSwgc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW21lcmdlPWZhbHNlXVxuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG5cbnZhciBleHRlbmQgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYywgbWVyZ2UpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBrZXlzLmxlbmd0aCkge1xuICAgIGlmICghbWVyZ2UgfHwgbWVyZ2UgJiYgZGVzdFtrZXlzW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXN0W2tleXNbaV1dID0gc3JjW2tleXNbaV1dO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufSwgJ2V4dGVuZCcsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgdGhhdCBleGlzdCBpbiBkZXN0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIGJ5IHNyY1xuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xuXG52YXIgbWVyZ2UgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYykge1xuICByZXR1cm4gZXh0ZW5kKGRlc3QsIHNyYywgdHJ1ZSk7XG59LCAnbWVyZ2UnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzaW1wbGUgY2xhc3MgaW5oZXJpdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBiYXNlXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdXG4gKi9cblxuZnVuY3Rpb24gaW5oZXJpdChjaGlsZCwgYmFzZSwgcHJvcGVydGllcykge1xuICB2YXIgYmFzZVAgPSBiYXNlLnByb3RvdHlwZTtcbiAgdmFyIGNoaWxkUDtcbiAgY2hpbGRQID0gY2hpbGQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShiYXNlUCk7XG4gIGNoaWxkUC5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuICBjaGlsZFAuX3N1cGVyID0gYmFzZVA7XG5cbiAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICBhc3NpZ24kMShjaGlsZFAsIHByb3BlcnRpZXMpO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNpbXBsZSBmdW5jdGlvbiBiaW5kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gYmluZEZuKGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBib3VuZEZuKCkge1xuICAgIHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIG1hbmFnZXIgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHJlY29nbml6ZXJzLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIEhhbW1lciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIHZhciBIYW1tZXIgPVxuICAvKipcbiAgICAqIEBwcml2YXRlXG4gICAgKiBAY29uc3Qge3N0cmluZ31cbiAgICAqL1xuICBmdW5jdGlvbiBIYW1tZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hbmFnZXIoZWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgcmVjb2duaXplcnM6IHByZXNldC5jb25jYXQoKVxuICAgIH0sIG9wdGlvbnMpKTtcbiAgfTtcblxuICBIYW1tZXIuVkVSU0lPTiA9IFwiMi4wLjE3LXJjXCI7XG4gIEhhbW1lci5ESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0FMTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9ET1dOID0gRElSRUNUSU9OX0RPV047XG4gIEhhbW1lci5ESVJFQ1RJT05fTEVGVCA9IERJUkVDVElPTl9MRUZUO1xuICBIYW1tZXIuRElSRUNUSU9OX1JJR0hUID0gRElSRUNUSU9OX1JJR0hUO1xuICBIYW1tZXIuRElSRUNUSU9OX1VQID0gRElSRUNUSU9OX1VQO1xuICBIYW1tZXIuRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9WRVJUSUNBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9OT05FID0gRElSRUNUSU9OX05PTkU7XG4gIEhhbW1lci5ESVJFQ1RJT05fRE9XTiA9IERJUkVDVElPTl9ET1dOO1xuICBIYW1tZXIuSU5QVVRfU1RBUlQgPSBJTlBVVF9TVEFSVDtcbiAgSGFtbWVyLklOUFVUX01PVkUgPSBJTlBVVF9NT1ZFO1xuICBIYW1tZXIuSU5QVVRfRU5EID0gSU5QVVRfRU5EO1xuICBIYW1tZXIuSU5QVVRfQ0FOQ0VMID0gSU5QVVRfQ0FOQ0VMO1xuICBIYW1tZXIuU1RBVEVfUE9TU0lCTEUgPSBTVEFURV9QT1NTSUJMRTtcbiAgSGFtbWVyLlNUQVRFX0JFR0FOID0gU1RBVEVfQkVHQU47XG4gIEhhbW1lci5TVEFURV9DSEFOR0VEID0gU1RBVEVfQ0hBTkdFRDtcbiAgSGFtbWVyLlNUQVRFX0VOREVEID0gU1RBVEVfRU5ERUQ7XG4gIEhhbW1lci5TVEFURV9SRUNPR05JWkVEID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgSGFtbWVyLlNUQVRFX0NBTkNFTExFRCA9IFNUQVRFX0NBTkNFTExFRDtcbiAgSGFtbWVyLlNUQVRFX0ZBSUxFRCA9IFNUQVRFX0ZBSUxFRDtcbiAgSGFtbWVyLk1hbmFnZXIgPSBNYW5hZ2VyO1xuICBIYW1tZXIuSW5wdXQgPSBJbnB1dDtcbiAgSGFtbWVyLlRvdWNoQWN0aW9uID0gVG91Y2hBY3Rpb247XG4gIEhhbW1lci5Ub3VjaElucHV0ID0gVG91Y2hJbnB1dDtcbiAgSGFtbWVyLk1vdXNlSW5wdXQgPSBNb3VzZUlucHV0O1xuICBIYW1tZXIuUG9pbnRlckV2ZW50SW5wdXQgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgSGFtbWVyLlRvdWNoTW91c2VJbnB1dCA9IFRvdWNoTW91c2VJbnB1dDtcbiAgSGFtbWVyLlNpbmdsZVRvdWNoSW5wdXQgPSBTaW5nbGVUb3VjaElucHV0O1xuICBIYW1tZXIuUmVjb2duaXplciA9IFJlY29nbml6ZXI7XG4gIEhhbW1lci5BdHRyUmVjb2duaXplciA9IEF0dHJSZWNvZ25pemVyO1xuICBIYW1tZXIuVGFwID0gVGFwUmVjb2duaXplcjtcbiAgSGFtbWVyLlBhbiA9IFBhblJlY29nbml6ZXI7XG4gIEhhbW1lci5Td2lwZSA9IFN3aXBlUmVjb2duaXplcjtcbiAgSGFtbWVyLlBpbmNoID0gUGluY2hSZWNvZ25pemVyO1xuICBIYW1tZXIuUm90YXRlID0gUm90YXRlUmVjb2duaXplcjtcbiAgSGFtbWVyLlByZXNzID0gUHJlc3NSZWNvZ25pemVyO1xuICBIYW1tZXIub24gPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLm9mZiA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIuZWFjaCA9IGVhY2g7XG4gIEhhbW1lci5tZXJnZSA9IG1lcmdlO1xuICBIYW1tZXIuZXh0ZW5kID0gZXh0ZW5kO1xuICBIYW1tZXIuYmluZEZuID0gYmluZEZuO1xuICBIYW1tZXIuYXNzaWduID0gYXNzaWduJDE7XG4gIEhhbW1lci5pbmhlcml0ID0gaW5oZXJpdDtcbiAgSGFtbWVyLmJpbmRGbiA9IGJpbmRGbjtcbiAgSGFtbWVyLnByZWZpeGVkID0gcHJlZml4ZWQ7XG4gIEhhbW1lci50b0FycmF5ID0gdG9BcnJheTtcbiAgSGFtbWVyLmluQXJyYXkgPSBpbkFycmF5O1xuICBIYW1tZXIudW5pcXVlQXJyYXkgPSB1bmlxdWVBcnJheTtcbiAgSGFtbWVyLnNwbGl0U3RyID0gc3BsaXRTdHI7XG4gIEhhbW1lci5ib29sT3JGbiA9IGJvb2xPckZuO1xuICBIYW1tZXIuaGFzUGFyZW50ID0gaGFzUGFyZW50O1xuICBIYW1tZXIuYWRkRXZlbnRMaXN0ZW5lcnMgPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLnJlbW92ZUV2ZW50TGlzdGVuZXJzID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5kZWZhdWx0cyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywge1xuICAgIHByZXNldDogcHJlc2V0XG4gIH0pO1xuICByZXR1cm4gSGFtbWVyO1xufSgpO1xuXG4vLyAgc3R5bGUgbG9hZGVyIGJ1dCBieSBzY3JpcHQgdGFnLCBub3QgYnkgdGhlIGxvYWRlci5cblxudmFyIGRlZmF1bHRzJDEgPSBIYW1tZXIuZGVmYXVsdHM7XG5cbmV4cG9ydCBkZWZhdWx0IEhhbW1lcjtcbmV4cG9ydCB7IElOUFVUX1NUQVJULCBJTlBVVF9NT1ZFLCBJTlBVVF9FTkQsIElOUFVUX0NBTkNFTCwgU1RBVEVfUE9TU0lCTEUsIFNUQVRFX0JFR0FOLCBTVEFURV9DSEFOR0VELCBTVEFURV9FTkRFRCwgU1RBVEVfUkVDT0dOSVpFRCwgU1RBVEVfQ0FOQ0VMTEVELCBTVEFURV9GQUlMRUQsIERJUkVDVElPTl9OT05FLCBESVJFQ1RJT05fTEVGVCwgRElSRUNUSU9OX1JJR0hULCBESVJFQ1RJT05fVVAsIERJUkVDVElPTl9ET1dOLCBESVJFQ1RJT05fSE9SSVpPTlRBTCwgRElSRUNUSU9OX1ZFUlRJQ0FMLCBESVJFQ1RJT05fQUxMLCBNYW5hZ2VyLCBJbnB1dCwgVG91Y2hBY3Rpb24sIFRvdWNoSW5wdXQsIE1vdXNlSW5wdXQsIFBvaW50ZXJFdmVudElucHV0LCBUb3VjaE1vdXNlSW5wdXQsIFNpbmdsZVRvdWNoSW5wdXQsIFJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCBUYXBSZWNvZ25pemVyIGFzIFRhcCwgUGFuUmVjb2duaXplciBhcyBQYW4sIFN3aXBlUmVjb2duaXplciBhcyBTd2lwZSwgUGluY2hSZWNvZ25pemVyIGFzIFBpbmNoLCBSb3RhdGVSZWNvZ25pemVyIGFzIFJvdGF0ZSwgUHJlc3NSZWNvZ25pemVyIGFzIFByZXNzLCBhZGRFdmVudExpc3RlbmVycyBhcyBvbiwgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMgYXMgb2ZmLCBlYWNoLCBtZXJnZSwgZXh0ZW5kLCBhc3NpZ24kMSBhcyBhc3NpZ24sIGluaGVyaXQsIGJpbmRGbiwgcHJlZml4ZWQsIHRvQXJyYXksIGluQXJyYXksIHVuaXF1ZUFycmF5LCBzcGxpdFN0ciwgYm9vbE9yRm4sIGhhc1BhcmVudCwgYWRkRXZlbnRMaXN0ZW5lcnMsIHJlbW92ZUV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0cyQxIGFzIGRlZmF1bHRzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW1tZXIuZXNtLmpzLm1hcFxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbGwnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmlsbDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmlsbCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIi8qKlxuICogdmlzLXV0aWxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqcy92aXMtdXRpbFxuICpcbiAqIHV0aWxpdGllIGNvbGxlY3Rpb24gZm9yIHZpc2pzXG4gKlxuICogQHZlcnNpb24gNS4wLjVcbiAqIEBkYXRlICAgIDIwMjMtMTAtMDNUMTg6NDc6NTguMDYxWlxuICpcbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTEtMjAxNyBBbG1lbmRlIEIuViwgaHR0cDovL2FsbWVuZGUuY29tXG4gKiBAY29weXJpZ2h0IChjKSAyMDE3LTIwMTkgdmlzanMgY29udHJpYnV0b3JzLCBodHRwczovL2dpdGh1Yi5jb20vdmlzanNcbiAqXG4gKiBAbGljZW5zZVxuICogdmlzLmpzIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aFxuICpcbiAqICAgMS4gVGhlIEFwYWNoZSAyLjAgTGljZW5zZVxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgIGFuZFxuICpcbiAqICAgMi4gVGhlIE1JVCBMaWNlbnNlXG4gKiAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiB2aXMuanMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGVpdGhlciBsaWNlbnNlLlxuICovXG5cbmltcG9ydCBFbWl0dGVyIGZyb20gJ2NvbXBvbmVudC1lbWl0dGVyJztcbmltcG9ydCBSZWFsSGFtbWVyIGZyb20gJ0BlZ2pzL2hhbW1lcmpzJztcblxuLyoqXHJcbiAqIFVzZSB0aGlzIHN5bWJvbCB0byBkZWxldGUgcHJvcGVyaWVzIGluIGRlZXBPYmplY3RBc3NpZ24uXHJcbiAqL1xyXG5jb25zdCBERUxFVEUgPSBTeW1ib2woXCJERUxFVEVcIik7XHJcbi8qKlxyXG4gKiBQdXJlIHZlcnNpb24gb2YgZGVlcE9iamVjdEFzc2lnbiwgaXQgZG9lc24ndCBtb2RpZnkgYW55IG9mIGl0J3MgYXJndW1lbnRzLlxyXG4gKlxyXG4gKiBAcGFyYW0gYmFzZSAtIFRoZSBiYXNlIG9iamVjdCB0aGF0IGZ1bGxmaWxzIHRoZSB3aG9sZSBpbnRlcmZhY2UgVC5cclxuICogQHBhcmFtIHVwZGF0ZXMgLSBVcGRhdGVzIHRoYXQgbWF5IGNoYW5nZSBvciBkZWxldGUgcHJvcHMuXHJcbiAqIEByZXR1cm5zIEEgYnJhbmQgbmV3IGluc3RhbmNlIHdpdGggYWxsIHRoZSBzdXBwbGllZCBvYmplY3RzIGRlZXBseSBtZXJnZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwdXJlRGVlcE9iamVjdEFzc2lnbihiYXNlLCAuLi51cGRhdGVzKSB7XHJcbiAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbih7fSwgYmFzZSwgLi4udXBkYXRlcyk7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgdmVyc2lvbiBvZiBvYmplY3QgYXNzaWduIHdpdGggYWRkaXRpb25hbCBkZWxldGluZyBieSB0aGUgREVMRVRFIHN5bWJvbC5cclxuICpcclxuICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdHMgdG8gYmUgZGVlcGx5IG1lcmdlZC5cclxuICogQHJldHVybnMgVGhlIGZpcnN0IG9iamVjdCBmcm9tIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBPYmplY3RBc3NpZ24oLi4udmFsdWVzKSB7XHJcbiAgICBjb25zdCBtZXJnZWQgPSBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKTtcclxuICAgIHN0cmlwRGVsZXRlKG1lcmdlZCk7XHJcbiAgICByZXR1cm4gbWVyZ2VkO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIHZlcnNpb24gb2Ygb2JqZWN0IGFzc2lnbiB3aXRoIGFkZGl0aW9uYWwgZGVsZXRpbmcgYnkgdGhlIERFTEVURSBzeW1ib2wuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoaXMgZG9lc24ndCBzdHJpcCB0aGUgREVMRVRFIHN5bWJvbHMgc28gdGhleSBtYXkgZW5kIHVwIGluIHRoZSBmaW5hbCBvYmplY3QuXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3RzIHRvIGJlIGRlZXBseSBtZXJnZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBvYmplY3QgZnJvbSB2YWx1ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKSB7XHJcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KGRlZXBPYmplY3RBc3NpZ24odmFsdWVzWzBdLCB2YWx1ZXNbMV0pLCAuLi52YWx1ZXMuc2xpY2UoMikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYSA9IHZhbHVlc1swXTtcclxuICAgIGNvbnN0IGIgPSB2YWx1ZXNbMV07XHJcbiAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICBhLnNldFRpbWUoYi5nZXRUaW1lKCkpO1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIFJlZmxlY3Qub3duS2V5cyhiKSkge1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGIsIHByb3ApKSA7XHJcbiAgICAgICAgZWxzZSBpZiAoYltwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIGJbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGJbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYVtwcm9wXSkgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeShhW3Byb3BdLCBiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBjbG9uZShiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRGVlcCBjbG9uZSBnaXZlbiBvYmplY3Qgb3IgYXJyYXkuIEluIGNhc2Ugb2YgcHJpbWl0aXZlIHNpbXBseSByZXR1cm4uXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gQW55dGhpbmcuXHJcbiAqIEByZXR1cm5zIERlZXAgY2xvbmVkIG9iamVjdC9hcnJheSBvciB1bmNoYW5nZWQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGNsb25lKGEpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIGEubWFwKCh2YWx1ZSkgPT4gY2xvbmUodmFsdWUpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBhID09PSBcIm9iamVjdFwiICYmIGEgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGEuZ2V0VGltZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSh7fSwgYSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogU3RyaXAgREVMRVRFIGZyb20gZ2l2ZW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIE9iamVjdCB3aGljaCBtYXkgY29udGFpbiBERUxFVEUgYnV0IHdvbid0IGFmdGVyIHRoaXMgaXMgZXhlY3V0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBzdHJpcERlbGV0ZShhKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoYSkpIHtcclxuICAgICAgICBpZiAoYVtwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJiBhW3Byb3BdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHN0cmlwRGVsZXRlKGFbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG4vKipcclxuICogU2VlZGFibGUsIGZhc3QgYW5kIHJlYXNvbmFibHkgZ29vZCAobm90IGNyeXB0byBidXQgbW9yZSB0aGFuIG9rYXkgZm9yIG91clxyXG4gKiBuZWVkcykgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIEFkYXB0ZWQgZnJvbSB7QGxpbmsgaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTEwNDI5MTAwNzM2L2h0dHA6Ly9iYWFnb2UuY29tOjgwL2VuL1JhbmRvbU11c2luZ3MvamF2YXNjcmlwdH0uXHJcbiAqIE9yaWdpbmFsIGFsZ29yaXRobSBjcmVhdGVkIGJ5IEpvaGFubmVzIEJhYWfDuGUgXFw8YmFhZ29lXFxAYmFhZ29lLmNvbVxcPiBpbiAyMDEwLlxyXG4gKi9cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIGdlbmVyYXRvciBiYXNlZCBvbiBBbGVhIGJ5IEpvaGFubmVzIEJhYWfDuGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gQWxsIHN1cHBsaWVkIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWQgYXMgYSBzZWVkLiBJbiBjYXNlIG5vdGhpbmdcclxuICogaXMgc3VwcGxpZWQgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJucyBBIHJlYWR5IHRvIHVzZSBzZWVkZWQgZ2VuZXJhdG9yLlxyXG4gKi9cclxuZnVuY3Rpb24gQWxlYSguLi5zZWVkKSB7XHJcbiAgICByZXR1cm4gQWxlYUltcGxlbWVudGF0aW9uKHNlZWQubGVuZ3RoID8gc2VlZCA6IFtEYXRlLm5vdygpXSk7XHJcbn1cclxuLyoqXHJcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIFtbQWxlYV1dIHdpdGhvdXQgdXNlciBpbnB1dCB2YWxpZGF0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIFRoZSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIGdlbmVyYXRvci5cclxuICogQHJldHVybnMgQSByZWFkeSB0byB1c2Ugc2VlZGVkIGdlbmVyYXRvci5cclxuICovXHJcbmZ1bmN0aW9uIEFsZWFJbXBsZW1lbnRhdGlvbihzZWVkKSB7XHJcbiAgICBsZXQgW3MwLCBzMSwgczJdID0gbWFzaFNlZWQoc2VlZCk7XHJcbiAgICBsZXQgYyA9IDE7XHJcbiAgICBjb25zdCByYW5kb20gPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxyXG4gICAgICAgIHMwID0gczE7XHJcbiAgICAgICAgczEgPSBzMjtcclxuICAgICAgICByZXR1cm4gKHMyID0gdCAtIChjID0gdCB8IDApKTtcclxuICAgIH07XHJcbiAgICByYW5kb20udWludDMyID0gKCkgPT4gcmFuZG9tKCkgKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgcmFuZG9tLmZyYWN0NTMgPSAoKSA9PiByYW5kb20oKSArICgocmFuZG9tKCkgKiAweDIwMDAwMCkgfCAwKSAqIDEuMTEwMjIzMDI0NjI1MTU2NWUtMTY7IC8vIDJeLTUzXHJcbiAgICByYW5kb20uYWxnb3JpdGhtID0gXCJBbGVhXCI7XHJcbiAgICByYW5kb20uc2VlZCA9IHNlZWQ7XHJcbiAgICByYW5kb20udmVyc2lvbiA9IFwiMC45XCI7XHJcbiAgICByZXR1cm4gcmFuZG9tO1xyXG59XHJcbi8qKlxyXG4gKiBUdXJuIGFyYml0cmFyeSBkYXRhIGludG8gdmFsdWVzIFtbQWxlYUltcGxlbWVudGF0aW9uXV0gY2FuIHVzZSB0byBnZW5lcmF0ZVxyXG4gKiByYW5kb20gbnVtYmVycy5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBBcmJpdHJhcnkgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgc2VlZC5cclxuICogQHJldHVybnMgVGhyZWUgbnVtYmVycyB0byB1c2UgYXMgaW5pdGlhbCB2YWx1ZXMgZm9yIFtbQWxlYUltcGxlbWVudGF0aW9uXV0uXHJcbiAqL1xyXG5mdW5jdGlvbiBtYXNoU2VlZCguLi5zZWVkKSB7XHJcbiAgICBjb25zdCBtYXNoID0gTWFzaCgpO1xyXG4gICAgbGV0IHMwID0gbWFzaChcIiBcIik7XHJcbiAgICBsZXQgczEgPSBtYXNoKFwiIFwiKTtcclxuICAgIGxldCBzMiA9IG1hc2goXCIgXCIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgczAgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczAgPCAwKSB7XHJcbiAgICAgICAgICAgIHMwICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMxIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMxIDwgMCkge1xyXG4gICAgICAgICAgICBzMSArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzMiAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMiA8IDApIHtcclxuICAgICAgICAgICAgczIgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW3MwLCBzMSwgczJdO1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWFzaCBmdW5jdGlvbi5cclxuICpcclxuICogQHJldHVybnMgQSBub25wdXJlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYXJiaXRyYXJ5IFtbTWFzaGFibGVdXSBkYXRhIGFuZCB0dXJuc1xyXG4gKiB0aGVtIGludG8gbnVtYmVycy5cclxuICovXHJcbmZ1bmN0aW9uIE1hc2goKSB7XHJcbiAgICBsZXQgbiA9IDB4ZWZjODI0OWQ7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICBjb25zdCBzdHJpbmcgPSBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbiArPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgbGV0IGggPSAwLjAyNTE5NjAzMjgyNDE2OTM4ICogbjtcclxuICAgICAgICAgICAgbiA9IGggPj4+IDA7XHJcbiAgICAgICAgICAgIGggLT0gbjtcclxuICAgICAgICAgICAgaCAqPSBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBuICs9IGggKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcclxuICAgIH07XHJcbn1cblxuLyoqXG4gKiBTZXR1cCBhIG1vY2sgaGFtbWVyLmpzIG9iamVjdCwgZm9yIHVuaXQgdGVzdGluZy5cbiAqXG4gKiBJbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3ViZXIvZGVjay5nbC9wdWxsLzY1OFxuICpcbiAqIEByZXR1cm5zIHt7b246IG5vb3AsIG9mZjogbm9vcCwgZGVzdHJveTogbm9vcCwgZW1pdDogbm9vcCwgZ2V0OiBnZXR9fVxuICovXG5mdW5jdGlvbiBoYW1tZXJNb2NrKCkge1xuICBjb25zdCBub29wID0gKCkgPT4ge307XG5cbiAgcmV0dXJuIHtcbiAgICBvbjogbm9vcCxcbiAgICBvZmY6IG5vb3AsXG4gICAgZGVzdHJveTogbm9vcCxcbiAgICBlbWl0OiBub29wLFxuXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0OiBub29wLFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBIYW1tZXIkMSA9XG4gIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IHdpbmRvdy5IYW1tZXIgfHwgUmVhbEhhbW1lclxuICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBoYW1tZXIuanMgaXMgb25seSBhdmFpbGFibGUgaW4gYSBicm93c2VyLCBub3QgaW4gbm9kZS5qcy4gUmVwbGFjaW5nIGl0IHdpdGggYSBtb2NrIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIGhhbW1lck1vY2soKTtcbiAgICAgIH07XG5cbi8qKlxuICogVHVybiBhbiBlbGVtZW50IGludG8gYW4gY2xpY2tUb1VzZSBlbGVtZW50LlxuICogV2hlbiBub3QgYWN0aXZlLCB0aGUgZWxlbWVudCBoYXMgYSB0cmFuc3BhcmVudCBvdmVybGF5LiBXaGVuIHRoZSBvdmVybGF5IGlzXG4gKiBjbGlja2VkLCB0aGUgbW9kZSBpcyBjaGFuZ2VkIHRvIGFjdGl2ZS5cbiAqIFdoZW4gYWN0aXZlLCB0aGUgZWxlbWVudCBpcyBkaXNwbGF5ZWQgd2l0aCBhIGJsdWUgYm9yZGVyIGFyb3VuZCBpdCwgYW5kXG4gKiB0aGUgaW50ZXJhY3RpdmUgY29udGVudHMgb2YgdGhlIGVsZW1lbnQgY2FuIGJlIHVzZWQuIFdoZW4gY2xpY2tlZCBvdXRzaWRlXG4gKiB0aGUgZWxlbWVudCwgdGhlIGVsZW1lbnRzIG1vZGUgaXMgY2hhbmdlZCB0byBpbmFjdGl2ZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lclxuICogQGNsYXNzIEFjdGl2YXRvclxuICovXG5mdW5jdGlvbiBBY3RpdmF0b3IkMShjb250YWluZXIpIHtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlID0gW107XG5cbiAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuICB0aGlzLl9kb20gPSB7XG4gICAgY29udGFpbmVyLFxuICAgIG92ZXJsYXk6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gIH07XG5cbiAgdGhpcy5fZG9tLm92ZXJsYXkuY2xhc3NMaXN0LmFkZChcInZpcy1vdmVybGF5XCIpO1xuXG4gIHRoaXMuX2RvbS5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZG9tLm92ZXJsYXkpO1xuICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgdGhpcy5fZG9tLm92ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIH0pO1xuXG4gIGNvbnN0IGhhbW1lciA9IEhhbW1lciQxKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgaGFtbWVyLm9uKFwidGFwXCIsIHRoaXMuX29uVGFwT3ZlcmxheS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgIGhhbW1lci5kZXN0cm95KCk7XG4gICAgLy8gRklYTUU6IGNsZWFuaW5nIHVwIGhhbW1lciBpbnN0YW5jZXMgZG9lc24ndCB3b3JrIChUaW1lbGluZSBub3QgcmVtb3ZlZFxuICAgIC8vIGZyb20gbWVtb3J5KVxuICB9KTtcblxuICAvLyBibG9jayBhbGwgdG91Y2ggZXZlbnRzIChleGNlcHQgdGFwKVxuICBjb25zdCBldmVudHMgPSBbXG4gICAgXCJ0YXBcIixcbiAgICBcImRvdWJsZXRhcFwiLFxuICAgIFwicHJlc3NcIixcbiAgICBcInBpbmNoXCIsXG4gICAgXCJwYW5cIixcbiAgICBcInBhbnN0YXJ0XCIsXG4gICAgXCJwYW5tb3ZlXCIsXG4gICAgXCJwYW5lbmRcIixcbiAgXTtcbiAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgaGFtbWVyLm9uKGV2ZW50LCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBhdHRhY2ggYSBjbGljayBldmVudCB0byB0aGUgd2luZG93LCBpbiBvcmRlciB0byBkZWFjdGl2YXRlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSB0aGUgdGltZWxpbmVcbiAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmJvZHkpIHtcbiAgICB0aGlzLl9vbkNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIV9oYXNQYXJlbnQoZXZlbnQudGFyZ2V0LCBjb250YWluZXIpKSB7XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBwcmVwYXJlIGVzY2FwZSBrZXkgbGlzdGVuZXIgZm9yIGRlYWN0aXZhdGluZyB3aGVuIGFjdGl2ZVxuICB0aGlzLl9lc2NMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIFwia2V5XCIgaW4gZXZlbnRcbiAgICAgICAgPyBldmVudC5rZXkgPT09IFwiRXNjYXBlXCJcbiAgICAgICAgOiBldmVudC5rZXlDb2RlID09PSAyNyAvKiB0aGUga2V5Q29kZSBpcyBmb3IgSUUxMSAqL1xuICAgICkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgfVxuICB9O1xufVxuXG4vLyB0dXJuIGludG8gYW4gZXZlbnQgZW1pdHRlclxuRW1pdHRlcihBY3RpdmF0b3IkMS5wcm90b3R5cGUpO1xuXG4vLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBhY3RpdmF0b3JcbkFjdGl2YXRvciQxLmN1cnJlbnQgPSBudWxsO1xuXG4vKipcbiAqIERlc3Ryb3kgdGhlIGFjdGl2YXRvci4gQ2xlYW5zIHVwIGFsbCBjcmVhdGVkIERPTSBhbmQgZXZlbnQgbGlzdGVuZXJzXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmRlYWN0aXZhdGUoKTtcblxuICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2NsZWFudXBRdWV1ZS5zcGxpY2UoMCkucmV2ZXJzZSgpKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBoaWRkZW4sIGVsZW1lbnQgaXMgZGVjb3JhdGVkIHdpdGggYSBibHVlIHNoYWRvdyBib3JkZXJcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICAvLyB3ZSBhbGxvdyBvbmx5IG9uZSBhY3RpdmUgYWN0aXZhdG9yIGF0IGEgdGltZVxuICBpZiAoQWN0aXZhdG9yJDEuY3VycmVudCkge1xuICAgIEFjdGl2YXRvciQxLmN1cnJlbnQuZGVhY3RpdmF0ZSgpO1xuICB9XG4gIEFjdGl2YXRvciQxLmN1cnJlbnQgPSB0aGlzO1xuXG4gIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgdGhpcy5fZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ2aXMtYWN0aXZlXCIpO1xuXG4gIHRoaXMuZW1pdChcImNoYW5nZVwiKTtcbiAgdGhpcy5lbWl0KFwiYWN0aXZhdGVcIik7XG5cbiAgLy8gdWdseSBoYWNrOiBiaW5kIEVTQyBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnRzLCBhcyB0aGUgTmV0d29yayByZWJpbmRzIGFsbFxuICAvLyBrZXlib2FyZCBldmVudHMgb24gYSAnY2hhbmdlJyBldmVudFxuICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24gdG9wIG9mIHRoZSBlbGVtZW50XG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB0aGlzLl9kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJ2aXMtYWN0aXZlXCIpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcblxuICB0aGlzLmVtaXQoXCJjaGFuZ2VcIik7XG4gIHRoaXMuZW1pdChcImRlYWN0aXZhdGVcIik7XG59O1xuXG4vKipcbiAqIEhhbmRsZSBhIHRhcCBldmVudDogYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLl9vblRhcE92ZXJsYXkgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICB0aGlzLmFjdGl2YXRlKCk7XG4gIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIHRoZSByZXF1ZXN0ZWQgcGFyZW50IGVsZW1lbnQgc29tZXdoZXJlIGluXG4gKiBpdHMgY2hhaW4gb2YgcGFyZW50IG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwYXJlbnQgaXMgZm91bmQgc29tZXdoZXJlIGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgIGNoYWluIG9mIHBhcmVudCBub2Rlcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9oYXNQYXJlbnQoZWxlbWVudCwgcGFyZW50KSB7XG4gIHdoaWxlIChlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyB1dGlsaXR5IGZ1bmN0aW9uc1xyXG4vLyBwYXJzZSBBU1AuTmV0IERhdGUgcGF0dGVybixcclxuLy8gZm9yIGV4YW1wbGUgJy9EYXRlKDExOTg5MDg3MTcwNTYpLycgb3IgJy9EYXRlKDExOTg5MDg3MTcwNTYtMDcwMCkvJ1xyXG4vLyBjb2RlIGZyb20gaHR0cDovL21vbWVudGpzLmNvbS9cclxuY29uc3QgQVNQRGF0ZVJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2k7XHJcbi8vIENvbG9yIFJFc1xyXG5jb25zdCBmdWxsSGV4UkUgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pO1xyXG5jb25zdCBzaG9ydEhleFJFID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcclxuY29uc3QgcmdiUkUgPSAvXnJnYlxcKCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqXFwpJC9pO1xyXG5jb25zdCByZ2JhUkUgPSAvXnJnYmFcXCggKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKihbMDFdfDA/XFwuXFxkKykgKlxcKSQvaTtcclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBudW1iZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBudW1iZXIsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgZXZlcnl0aGluZyBpbiB0aGUgRE9NIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIERPTW9iamVjdCAtIE5vZGUgd2hvc2UgY2hpbGQgbm9kZXMgd2lsbCBiZSByZWN1cnNpdmVseSBkZWxldGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVjdXJzaXZlRE9NRGVsZXRlKERPTW9iamVjdCkge1xyXG4gICAgaWYgKERPTW9iamVjdCkge1xyXG4gICAgICAgIHdoaWxlIChET01vYmplY3QuaGFzQ2hpbGROb2RlcygpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gRE9Nb2JqZWN0LmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlRE9NRGVsZXRlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIERPTW9iamVjdC5yZW1vdmVDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgb2JqZWN0IChub3QgcHJpbWl0aXZlIG9yIG51bGwpLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgbm90IG51bGwgb2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIERhdGUsIG9yIGEgU3RyaW5nIGNvbnRhaW5pbmcgYSBEYXRlLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgRGF0ZSBpbnN0YW5jZSBvciBzdHJpbmcgZGF0ZSByZXByZXNlbnRhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAvLyB0ZXN0IHdoZXRoZXIgdGhpcyBzdHJpbmcgY29udGFpbnMgYSBkYXRlXHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBBU1BEYXRlUmVnZXguZXhlYyh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG4vKipcclxuICogQ29weSBwcm9wZXJ0eSBmcm9tIGIgdG8gYSBpZiBwcm9wZXJ0eSBwcmVzZW50IGluIGEuXHJcbiAqIElmIHByb3BlcnR5IGluIGIgZXhwbGljaXRseSBzZXQgdG8gbnVsbCwgZGVsZXRlIGl0IGlmIGBhbGxvd0RlbGV0aW9uYCBzZXQuXHJcbiAqXHJcbiAqIEludGVybmFsIGhlbHBlciByb3V0aW5lLCBzaG91bGQgbm90IGJlIGV4cG9ydGVkLiBOb3QgYWRkZWQgdG8gYGV4cG9ydHNgIGZvciB0aGF0IHJlYXNvbi5cclxuICpcclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBwcm9wIC0gTmFtZSBvZiBwcm9wZXJ0eSB0byBjb3B5IGZyb20gYiB0byBhLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKSB7XHJcbiAgICBsZXQgZG9EZWxldGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUpIHtcclxuICAgICAgICBkb0RlbGV0aW9uID0gYltwcm9wXSA9PT0gbnVsbCAmJiBhW3Byb3BdICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoZG9EZWxldGlvbikge1xyXG4gICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF07IC8vIFJlbWVtYmVyLCB0aGlzIGlzIGEgcmVmZXJlbmNlIGNvcHkhXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEZpbGwgYW4gb2JqZWN0IHdpdGggYSBwb3NzaWJseSBwYXJ0aWFsbHkgZGVmaW5lZCBvdGhlciBvYmplY3QuXHJcbiAqXHJcbiAqIE9ubHkgY29waWVzIHZhbHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgYWxyZWFkeSBwcmVzZW50IGluIGEuXHJcbiAqIFRoYXQgbWVhbnMgYW4gb2JqZWN0IGlzIG5vdCBjcmVhdGVkIG9uIGEgcHJvcGVydHkgaWYgb25seSB0aGUgYiBvYmplY3QgaGFzIGl0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBvYmplY3QgdGhhdCB3aWxsIGhhdmUgaXQncyBwcm9wZXJ0aWVzIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSBiIC0gVGhlIG9iamVjdCB3aXRoIHByb3BlcnR5IHVwZGF0ZXMuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnRpZXMgaW4gYSB0aGF0IGFyZSBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqL1xyXG5mdW5jdGlvbiBmaWxsSWZEZWZpbmVkKGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gTk9URTogaXRlcmF0aW9uIG9mIHByb3BlcnRpZXMgb2YgYVxyXG4gICAgLy8gTk9URTogcHJvdG90eXBlIHByb3BlcnRpZXMgaXRlcmF0ZWQgb3ZlciBhcyB3ZWxsXHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYSkge1xyXG4gICAgICAgIGlmIChiW3Byb3BdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGJbcHJvcF0gPT09IG51bGwgfHwgdHlwZW9mIGJbcHJvcF0gIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIE5vdGU6IHR5cGVvZiBudWxsID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYVByb3AgPSBhW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYlByb3AgPSBiW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGFQcm9wKSAmJiBpc09iamVjdChiUHJvcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsSWZEZWZpbmVkKGFQcm9wLCBiUHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhXHJcbiAqIHRhcmdldCBvYmplY3QuIFJldHVybnMgdGhlIHRhcmdldCBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxyXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXHJcbiAqIEByZXR1cm5zIFRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gKi9cclxuY29uc3QgZXh0ZW5kID0gT2JqZWN0LmFzc2lnbjtcclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIgb3IgYSBzZXJpZXMgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHJlbWFya3NcclxuICogT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICogQHBhcmFtIHByb3BzIC0gUHJvcGVydGllcyB0byBiZSBjb3BpZWQgdG8gYS5cclxuICogQHBhcmFtIGEgLSBUaGUgdGFyZ2V0LlxyXG4gKiBAcGFyYW0gb3RoZXJzIC0gVGhlIHNvdXJjZXMuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVFeHRlbmQocHJvcHMsIGEsIC4uLm90aGVycykge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFycmF5IHdpdGggcHJvcGVydHkgbmFtZXMgZXhwZWN0ZWQgYXMgZmlyc3QgYXJndW1lbnRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG90aGVyIG9mIG90aGVycykge1xyXG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW3BdO1xyXG4gICAgICAgICAgICBpZiAob3RoZXIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBwcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IG90aGVyW3Byb3BdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWQgdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyByb3V0aW5lIGltcGxpZWQgdGhhdCBtdWx0aXBsZSBzb3VyY2Ugb2JqZWN0cyBjb3VsZFxyXG4gKiBiZSB1c2VkOyBob3dldmVyLCB0aGUgaW1wbGVtZW50YXRpb24gd2FzICoqd3JvbmcqKi4gU2luY2UgbXVsdGlwbGUgKFxcPjEpXHJcbiAqIHNvdXJjZXMgd2VyZW4ndCB1c2VkIGFueXdoZXJlIGluIHRoZSBgdmlzLmpzYCBjb2RlLCB0aGlzIGhhcyBiZWVuIHJlbW92ZWRcclxuICogQHBhcmFtIHByb3BzIC0gTmFtZXMgb2YgZmlyc3QtbGV2ZWwgcHJvcGVydGllcyB0byBjb3B5IG92ZXIuXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZURlZXBFeHRlbmQocHJvcHMsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbcF07XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSkge1xyXG4gICAgICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBmYWxzZSwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYGFgIHdpdGggcHJvcGVydGllcyBvZiBvYmplY3QgYGJgLCBpZ25vcmluZyBwcm9wZXJ0aWVzIHdoaWNoXHJcbiAqIGFyZSBleHBsaWNpdGx5IHNwZWNpZmllZCB0byBiZSBleGNsdWRlZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhlIHByb3BlcnRpZXMgb2YgYGJgIGFyZSBjb25zaWRlcmVkIGZvciBjb3B5aW5nLiBQcm9wZXJ0aWVzIHdoaWNoIGFyZVxyXG4gKiB0aGVtc2VsdmVzIG9iamVjdHMgYXJlIGFyZSBhbHNvIGV4dGVuZGVkLiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkXHJcbiAqIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKiBAcGFyYW0gcHJvcHNUb0V4Y2x1ZGUgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHdoaWNoIHNob3VsZCAqbm90KiBiZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBhIC0gT2JqZWN0IHRvIGV4dGVuZC5cclxuICogQHBhcmFtIGIgLSBPYmplY3QgdG8gdGFrZSBwcm9wZXJ0aWVzIGZyb20gZm9yIGV4dGVuc2lvbi5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydGllcyBpbiBhIHRoYXQgYXJlIGV4cGxpY2l0bHlcclxuICogc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQocHJvcHNUb0V4Y2x1ZGUsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICAvLyBOT1RFOiBhcnJheSBwcm9wZXJ0aWVzIGhhdmUgYW4gZWxzZS1iZWxvdzsgYXBwYXJlbnRseSwgdGhlcmUgaXMgYSBwcm9ibGVtIGhlcmUuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBiKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSAvLyBIYW5kbGUgbG9jYWwgcHJvcGVydGllcyBvbmx5XHJcbiAgICAgICAgaWYgKHByb3BzVG9FeGNsdWRlLmluY2x1ZGVzKHByb3ApKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gLy8gSW4gZXhjbHVzaW9uIGxpc3QsIHNraXBcclxuICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYltwcm9wXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXS5wdXNoKGJbcHJvcF1baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgZXh0ZW5kIGFuIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gcHJvdG9FeHRlbmQgLSBJZiB0cnVlLCB0aGUgcHJvdG90eXBlIHZhbHVlcyB3aWxsIGFsc28gYmUgZXh0ZW5kZWQuXHJcbiAqIChUaGF0IGlzIHRoZSBvcHRpb25zIG9iamVjdHMgdGhhdCBpbmhlcml0IGZyb20gb3RoZXJzIHdpbGwgYWxzbyBnZXQgdGhlXHJcbiAqIGluaGVyaXRlZCBvcHRpb25zKS5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCB0aGUgdmFsdWVzIG9mIGZpZWxkcyB0aGF0IGFyZSBudWxsIHdpbGwgYmUgZGVsZXRlZC5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBFeHRlbmQoYSwgYiwgcHJvdG9FeHRlbmQgPSBmYWxzZSwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYikge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkgfHwgcHJvdG9FeHRlbmQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICBiW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYltwcm9wXSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0gZGVlcEV4dGVuZCh7fSwgYltwcm9wXSwgcHJvdG9FeHRlbmQpOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFbcHJvcF0pID09PSBPYmplY3QucHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBwcm90b0V4dGVuZCk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF0uc2xpY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgYWxsIGVsZW1lbnRzIGluIHR3byBhcnJheXMgYXJlIGVxdWFsLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIEZpcnN0IGFycmF5LlxyXG4gKiBAcGFyYW0gYiAtIFNlY29uZCBhcnJheS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBib3RoIGFycmF5cyBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2FtZSBlbGVtZW50cyAoMSA9ICcxJykuXHJcbiAqL1xyXG5mdW5jdGlvbiBlcXVhbEFycmF5KGEsIGIpIHtcclxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBHZXQgdGhlIHR5cGUgb2YgYW4gb2JqZWN0LCBmb3IgZXhhbXBsZSBleHBvcnRzLmdldFR5cGUoW10pIHJldHVybnMgJ0FycmF5Jy5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgRGV0ZWN0ZWQgdHlwZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFR5cGUob2JqZWN0KSB7XHJcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcclxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJTdHJpbmdcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJBcnJheVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJEYXRlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIk9iamVjdFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZTtcclxufVxyXG4vKipcclxuICogVXNlZCB0byBleHRlbmQgYW4gYXJyYXkgYW5kIGNvcHkgaXQuIFRoaXMgaXMgdXNlZCB0byBwcm9wYWdhdGUgcGF0aHMgcmVjdXJzaXZlbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcnIgLSBGaXJzdCBwYXJ0LlxyXG4gKiBAcGFyYW0gbmV3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgYWFkZGVkIGludG8gdGhlIGFycmF5LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aXRoIGFsbCBpdGVtcyBmcm9tIGFyciBhbmQgbmV3VmFsdWUgKHdoaWNoIGlzIGxhc3QpLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weUFuZEV4dGVuZEFycmF5KGFyciwgbmV3VmFsdWUpIHtcclxuICAgIHJldHVybiBbLi4uYXJyLCBuZXdWYWx1ZV07XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gZXh0ZW5kIGFuIGFycmF5IGFuZCBjb3B5IGl0LiBUaGlzIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHBhdGhzIHJlY3Vyc2l2ZWx5LlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIGJlIGNvcGllZC5cclxuICogQHJldHVybnMgU2hhbGxvdyBjb3B5IG9mIGFyci5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlBcnJheShhcnIpIHtcclxuICAgIHJldHVybiBhcnIuc2xpY2UoKTtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIGxlZnQgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIGxlZnQgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZUxlZnQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIHJpZ2h0IHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSByaWdodCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlUmlnaHQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSB0b3AgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHRvcCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlVG9wKGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxufVxyXG4vKipcclxuICogQWRkIGEgY2xhc3NOYW1lIHRvIHRoZSBnaXZlbiBlbGVtZW50cyBzdHlsZS5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIGFkZGVkLlxyXG4gKiBAcGFyYW0gY2xhc3NOYW1lcyAtIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lcykge1xyXG4gICAgbGV0IGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBuZXdDbGFzc2VzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIik7XHJcbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5jb25jYXQobmV3Q2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhY2xhc3Nlcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xyXG4gICAgfSkpO1xyXG4gICAgZWxlbS5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgYSBjbGFzc05hbWUgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudHMgc3R5bGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjbGFzc05hbWVzIC0gU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNsYXNzTmFtZShlbGVtLCBjbGFzc05hbWVzKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IGVsZW0uY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IG9sZENsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KFwiIFwiKTtcclxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICFvbGRDbGFzc2VzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XHJcbiAgICB9KTtcclxuICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcclxufVxyXG4vKipcclxuICogRm9yIGVhY2ggbWV0aG9kIGZvciBib3RoIGFycmF5cyBhbmQgb2JqZWN0cy5cclxuICogSW4gY2FzZSBvZiBhbiBhcnJheSwgdGhlIGJ1aWx0LWluIEFycmF5LmZvckVhY2goKSBpcyBhcHBsaWVkICgqKk5vLCBpdCdzIG5vdCEqKikuXHJcbiAqIEluIGNhc2Ugb2YgYW4gT2JqZWN0LCB0aGUgbWV0aG9kIGxvb3BzIG92ZXIgYWxsIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIEFuIE9iamVjdCBvciBBcnJheSB0byBiZSBpdGVyYXRlZCBvdmVyLlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBBcnJheS5mb3JFYWNoLWxpa2UgY2FsbGJhY2suXHJcbiAqL1xyXG5mdW5jdGlvbiBmb3JFYWNoKG9iamVjdCwgY2FsbGJhY2spIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcclxuICAgICAgICAvLyBhcnJheVxyXG4gICAgICAgIGNvbnN0IGxlbiA9IG9iamVjdC5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhvYmplY3RbaV0sIGksIG9iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gb2JqZWN0XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGFuIGFycmF5OiBhbGwgb2JqZWN0cyBwcm9wZXJ0aWVzIGFyZSBwdXQgaW50byB0aGUgYXJyYXkuIFRoZSByZXN1bHRpbmcgYXJyYXkgaXMgdW5vcmRlcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbyAtIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bm9yZGVyZWQgdmFsdWVzLlxyXG4gKi9cclxuY29uc3QgdG9BcnJheSA9IE9iamVjdC52YWx1ZXM7XHJcbi8qKlxyXG4gKiBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IHdpbGwgYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIGtleSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgYXNzaWduZWQuXHJcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIHdhcyB1cGRhdGVkICh0cnVlKSBvciBhbHJlYWR5IHN0cmljdGx5IHRoZSBzYW1lIGluIHRoZSBvcmlnaW5hbCBvYmplY3QgKGZhbHNlKS5cclxuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KG9iamVjdCwga2V5LCB2YWx1ZSkge1xyXG4gICAgaWYgKG9iamVjdFtrZXldICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRocm90dGxlIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBiZSBvbmx5IGV4ZWN1dGVkIG9uY2UgcGVyIGFuaW1hdGlvbiBmcmFtZS5cclxuICpcclxuICogQHBhcmFtIGZuIC0gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxyXG4gKiBAcmV0dXJucyBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uLlxyXG4gKi9cclxuZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcclxuICAgIGxldCBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzY2hlZHVsZWQpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm4oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQWRkIGFuZCBldmVudCBsaXN0ZW5lci4gV29ya3MgZm9yIGFsbCBicm93c2Vycy5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiaW5kIHRoZSBldmVudCBsaXN0ZW5lciB0by5cclxuICogQHBhcmFtIGFjdGlvbiAtIFNhbWUgYXMgRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGFjdGlvbiwg4oCULCDigJQpLlxyXG4gKiBAcGFyYW0gbGlzdGVuZXIgLSBTYW1lIGFzIEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcijigJQsIGxpc3RlbmVyLCDigJQpLlxyXG4gKiBAcGFyYW0gdXNlQ2FwdHVyZSAtIFNhbWUgYXMgRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKOKAlCwg4oCULCB1c2VDYXB0dXJlKS5cclxuICovXHJcbmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgYWN0aW9uLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkge1xyXG4gICAgaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikge1xyXG4gICAgICAgIGlmICh1c2VDYXB0dXJlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdXNlQ2FwdHVyZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWN0aW9uID09PSBcIm1vdXNld2hlZWxcIiAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluY2x1ZGVzKFwiRmlyZWZveFwiKSkge1xyXG4gICAgICAgICAgICBhY3Rpb24gPSBcIkRPTU1vdXNlU2Nyb2xsXCI7IC8vIEZvciBGaXJlZm94XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihhY3Rpb24sIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIEBUT0RPOiBJRSB0eXBlcz8gRG9lcyBhbnlvbmUgY2FyZT9cclxuICAgICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KFwib25cIiArIGFjdGlvbiwgbGlzdGVuZXIpOyAvLyBJRSBicm93c2Vyc1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIgZnJvbSBhbiBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGJpbmQgdGhlIGV2ZW50IGxpc3RlbmVyIHRvLlxyXG4gKiBAcGFyYW0gYWN0aW9uIC0gU2FtZSBhcyBFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYWN0aW9uLCDigJQsIOKAlCkuXHJcbiAqIEBwYXJhbSBsaXN0ZW5lciAtIFNhbWUgYXMgRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKOKAlCwgbGlzdGVuZXIsIOKAlCkuXHJcbiAqIEBwYXJhbSB1c2VDYXB0dXJlIC0gU2FtZSBhcyBFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIo4oCULCDigJQsIHVzZUNhcHR1cmUpLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihlbGVtZW50LCBhY3Rpb24sIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSB7XHJcbiAgICBpZiAoZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKSB7XHJcbiAgICAgICAgLy8gbm9uLUlFIGJyb3dzZXJzXHJcbiAgICAgICAgaWYgKHVzZUNhcHR1cmUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB1c2VDYXB0dXJlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhY3Rpb24gPT09IFwibW91c2V3aGVlbFwiICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJGaXJlZm94XCIpKSB7XHJcbiAgICAgICAgICAgIGFjdGlvbiA9IFwiRE9NTW91c2VTY3JvbGxcIjsgLy8gRm9yIEZpcmVmb3hcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGFjdGlvbiwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGVsZW1lbnQuZGV0YWNoRXZlbnQoXCJvblwiICsgYWN0aW9uLCBsaXN0ZW5lcik7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENhbmNlbHMgdGhlIGV2ZW50J3MgZGVmYXVsdCBhY3Rpb24gaWYgaXQgaXMgY2FuY2VsYWJsZSwgd2l0aG91dCBzdG9wcGluZyBmdXJ0aGVyIHByb3BhZ2F0aW9uIG9mIHRoZSBldmVudC5cclxuICpcclxuICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IHdob3NlIGRlZmF1bHQgYWN0aW9uIHNob3VsZCBiZSBwcmV2ZW50ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudCkge1xyXG4gICAgaWYgKCFldmVudCkge1xyXG4gICAgICAgIGV2ZW50ID0gd2luZG93LmV2ZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCFldmVudCkgO1xyXG4gICAgZWxzZSBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBub24tSUUgYnJvd3NlcnNcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIEBUT0RPOiBJRSB0eXBlcz8gRG9lcyBhbnlvbmUgY2FyZT9cclxuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlOyAvLyBJRSBicm93c2Vyc1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBHZXQgSFRNTCBlbGVtZW50IHdoaWNoIGlzIHRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQuXHJcbiAqIEByZXR1cm5zIFRoZSBlbGVtZW50IG9yIG51bGwgaWYgbm90IG9idGFpbmFibGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUYXJnZXQoZXZlbnQgPSB3aW5kb3cuZXZlbnQpIHtcclxuICAgIC8vIGNvZGUgZnJvbSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcclxuICAgIC8vIEBUT0RPOiBFdmVudFRhcmdldCBjYW4gYmUgYWxtb3N0IGFueXRoaW5nLCBpcyBpdCBva2F5IHRvIHJldHVybiBvbmx5IEVsZW1lbnRzP1xyXG4gICAgbGV0IHRhcmdldCA9IG51bGw7XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC50YXJnZXQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC50YXJnZXQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChldmVudC5zcmNFbGVtZW50KSB7XHJcbiAgICAgICAgdGFyZ2V0ID0gZXZlbnQuc3JjRWxlbWVudDtcclxuICAgIH1cclxuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGFyZ2V0Lm5vZGVUeXBlICE9IG51bGwgJiYgdGFyZ2V0Lm5vZGVUeXBlID09IDMpIHtcclxuICAgICAgICAvLyBkZWZlYXQgU2FmYXJpIGJ1Z1xyXG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn1cclxuLyoqXHJcbiAqIENoZWNrIGlmIGdpdmVuIGVsZW1lbnQgY29udGFpbnMgZ2l2ZW4gcGFyZW50IHNvbWV3aGVyZSBpbiB0aGUgRE9NIHRyZWUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gYmUgdGVzdGVkLlxyXG4gKiBAcGFyYW0gcGFyZW50IC0gVGhlIGFuY2VzdG9yIChub3QgbmVjZXNzYXJpbHkgcGFyZW50KSBvZiB0aGUgZWxlbWVudC5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBwYXJlbnQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGVsZW1lbnQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGhhc1BhcmVudChlbGVtZW50LCBwYXJlbnQpIHtcclxuICAgIGxldCBlbGVtID0gZWxlbWVudDtcclxuICAgIHdoaWxlIChlbGVtKSB7XHJcbiAgICAgICAgaWYgKGVsZW0gPT09IHBhcmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIGVsZW0gPSBlbGVtLnBhcmVudE5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmNvbnN0IG9wdGlvbiA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBib29sZWFuLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvYm9vbGVhbiwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBib29sZWFuIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0Jvb2xlYW4odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIG51bWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b251bWJlciwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogbnVtYmVyIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc051bWJlcih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKSB8fCBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzdHJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9zdHJpbmcsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIENvcnJlc3BvbmRpbmcgKipib3hlZCoqIHN0cmluZyB2YWx1ZSwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNTdHJpbmcodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgc2l6ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3NpemUsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIENvcnJlc3BvbmRpbmcgc3RyaW5nIHZhbHVlIChudW1iZXIgKyAncHgnKSwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNTaXplKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc051bWJlcih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgXCJweFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgRE9NIEVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG8gRE9NIEVsZW1lbnQsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIFRoZSBET00gRWxlbWVudCwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNFbGVtZW50KHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZSB8fCBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGhleCBjb2xvciBzdHJpbmcgaW50byBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiB7QGxpbmsgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NjIzODM4L3JnYi10by1oZXgtYW5kLWhleC10by1yZ2J9XHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nICgzIG9yIDYgZGlnaXRzLCB3aXRoIG9yIHdpdGhvdXQgIykuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBoZXhUb1JHQihoZXgpIHtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBzd2l0Y2ggKGhleC5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBzaG9ydEhleFJFLmV4ZWMoaGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdICsgcmVzdWx0WzFdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdICsgcmVzdWx0WzJdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdICsgcmVzdWx0WzNdLCAxNiksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgICAgcmVzdWx0ID0gZnVsbEhleFJFLmV4ZWMoaGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdLCAxNiksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgc3RyaW5nIGNvbG9yIGluIGhleCBvciBSR0IgZm9ybWF0IGFuZCBhZGRzIHRoZSBvcGFjaXR5LCBSR0JBIGlzIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZC5cclxuICpcclxuICogQHBhcmFtIGNvbG9yIC0gVGhlIGNvbG9yIHN0cmluZyAoaGV4LCBSR0IsIFJHQkEpLlxyXG4gKiBAcGFyYW0gb3BhY2l0eSAtIFRoZSBuZXcgb3BhY2l0eS5cclxuICogQHJldHVybnMgUkdCQSBzdHJpbmcsIGZvciBleGFtcGxlICdyZ2JhKDI1NSwgMCwgMTI3LCAwLjMpJy5cclxuICovXHJcbmZ1bmN0aW9uIG92ZXJyaWRlT3BhY2l0eShjb2xvciwgb3BhY2l0eSkge1xyXG4gICAgaWYgKGNvbG9yLmluY2x1ZGVzKFwicmdiYVwiKSkge1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbG9yLmluY2x1ZGVzKFwicmdiXCIpKSB7XHJcbiAgICAgICAgY29uc3QgcmdiID0gY29sb3JcclxuICAgICAgICAgICAgLnN1YnN0cihjb2xvci5pbmRleE9mKFwiKFwiKSArIDEpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiKVwiLCBcIlwiKVxyXG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIHJldHVybiBcInJnYmEoXCIgKyByZ2JbMF0gKyBcIixcIiArIHJnYlsxXSArIFwiLFwiICsgcmdiWzJdICsgXCIsXCIgKyBvcGFjaXR5ICsgXCIpXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihjb2xvcik7XHJcbiAgICAgICAgaWYgKHJnYiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcInJnYmEoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIsXCIgKyBvcGFjaXR5ICsgXCIpXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IFJHQiBcXDwwLCAyNTVcXD4gaW50byBoZXggY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVkIC0gUmVkIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBncmVlbiAtIEdyZWVuIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBibHVlIC0gQmx1ZSBjaGFubmVsLlxyXG4gKiBAcmV0dXJucyBIZXggY29sb3Igc3RyaW5nIChmb3IgZXhhbXBsZTogJyMwYWNkYzAnKS5cclxuICovXHJcbmZ1bmN0aW9uIFJHQlRvSGV4KHJlZCwgZ3JlZW4sIGJsdWUpIHtcclxuICAgIHJldHVybiAoXCIjXCIgKyAoKDEgPDwgMjQpICsgKHJlZCA8PCAxNikgKyAoZ3JlZW4gPDwgOCkgKyBibHVlKS50b1N0cmluZygxNikuc2xpY2UoMSkpO1xyXG59XHJcbi8qKlxyXG4gKiBQYXJzZSBhIGNvbG9yIHByb3BlcnR5IGludG8gYW4gb2JqZWN0IHdpdGggYm9yZGVyLCBiYWNrZ3JvdW5kLCBhbmQgaGlnaGxpZ2h0IGNvbG9ycy5cclxuICpcclxuICogQHBhcmFtIGlucHV0Q29sb3IgLSBTaG9ydGhhbmQgY29sb3Igc3RyaW5nIG9yIGlucHV0IGNvbG9yIG9iamVjdC5cclxuICogQHBhcmFtIGRlZmF1bHRDb2xvciAtIEZ1bGwgY29sb3Igb2JqZWN0IHRvIGZpbGwgaW4gbWlzc2luZyB2YWx1ZXMgaW4gaW5wdXRDb2xvci5cclxuICogQHJldHVybnMgQ29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gcGFyc2VDb2xvcihpbnB1dENvbG9yLCBkZWZhdWx0Q29sb3IpIHtcclxuICAgIGlmIChpc1N0cmluZyhpbnB1dENvbG9yKSkge1xyXG4gICAgICAgIGxldCBjb2xvclN0ciA9IGlucHV0Q29sb3I7XHJcbiAgICAgICAgaWYgKGlzVmFsaWRSR0IoY29sb3JTdHIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJnYiA9IGNvbG9yU3RyXHJcbiAgICAgICAgICAgICAgICAuc3Vic3RyKDQpXHJcbiAgICAgICAgICAgICAgICAuc3Vic3RyKDAsIGNvbG9yU3RyLmxlbmd0aCAtIDUpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCIsXCIpXHJcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbG9yU3RyID0gUkdCVG9IZXgocmdiWzBdLCByZ2JbMV0sIHJnYlsyXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1ZhbGlkSGV4KGNvbG9yU3RyKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBoc3YgPSBoZXhUb0hTVihjb2xvclN0cik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhTViA9IHtcclxuICAgICAgICAgICAgICAgIGg6IGhzdi5oLFxyXG4gICAgICAgICAgICAgICAgczogaHN2LnMgKiAwLjgsXHJcbiAgICAgICAgICAgICAgICB2OiBNYXRoLm1pbigxLCBoc3YudiAqIDEuMDIpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBkYXJrZXJDb2xvckhTViA9IHtcclxuICAgICAgICAgICAgICAgIGg6IGhzdi5oLFxyXG4gICAgICAgICAgICAgICAgczogTWF0aC5taW4oMSwgaHN2LnMgKiAxLjI1KSxcclxuICAgICAgICAgICAgICAgIHY6IGhzdi52ICogMC44LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBkYXJrZXJDb2xvckhleCA9IEhTVlRvSGV4KGRhcmtlckNvbG9ySFNWLmgsIGRhcmtlckNvbG9ySFNWLnMsIGRhcmtlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICBjb25zdCBsaWdodGVyQ29sb3JIZXggPSBIU1ZUb0hleChsaWdodGVyQ29sb3JIU1YuaCwgbGlnaHRlckNvbG9ySFNWLnMsIGxpZ2h0ZXJDb2xvckhTVi52KTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZGVmYXVsdENvbG9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5iYWNrZ3JvdW5kIHx8IGRlZmF1bHRDb2xvci5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmJvcmRlciB8fCBkZWZhdWx0Q29sb3IuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiBpc1N0cmluZyhpbnB1dENvbG9yLmhpZ2hsaWdodClcclxuICAgICAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5oaWdobGlnaHQgJiYgaW5wdXRDb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZCkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAoaW5wdXRDb2xvci5oaWdobGlnaHQgJiYgaW5wdXRDb2xvci5oaWdobGlnaHQuYm9yZGVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiBpc1N0cmluZyhpbnB1dENvbG9yLmhvdmVyKVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYm9yZGVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhvdmVyLmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhvdmVyLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmJvcmRlciB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiBpc1N0cmluZyhpbnB1dENvbG9yLmhvdmVyKVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYm9yZGVyKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCkgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIEhTViBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vd3d3LmphdmFzY3JpcHRlci5uZXQvZmFxL3JnYjJoc3YuaHRtfVxyXG4gKiBAcGFyYW0gcmVkIC0gUmVkIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBncmVlbiAtIEdyZWVuIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBibHVlIC0gQmx1ZSBjaGFubmVsLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IU1YocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmVkID0gcmVkIC8gMjU1O1xyXG4gICAgZ3JlZW4gPSBncmVlbiAvIDI1NTtcclxuICAgIGJsdWUgPSBibHVlIC8gMjU1O1xyXG4gICAgY29uc3QgbWluUkdCID0gTWF0aC5taW4ocmVkLCBNYXRoLm1pbihncmVlbiwgYmx1ZSkpO1xyXG4gICAgY29uc3QgbWF4UkdCID0gTWF0aC5tYXgocmVkLCBNYXRoLm1heChncmVlbiwgYmx1ZSkpO1xyXG4gICAgLy8gQmxhY2stZ3JheS13aGl0ZVxyXG4gICAgaWYgKG1pblJHQiA9PT0gbWF4UkdCKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgaDogMCwgczogMCwgdjogbWluUkdCIH07XHJcbiAgICB9XHJcbiAgICAvLyBDb2xvcnMgb3RoZXIgdGhhbiBibGFjay1ncmF5LXdoaXRlOlxyXG4gICAgY29uc3QgZCA9IHJlZCA9PT0gbWluUkdCID8gZ3JlZW4gLSBibHVlIDogYmx1ZSA9PT0gbWluUkdCID8gcmVkIC0gZ3JlZW4gOiBibHVlIC0gcmVkO1xyXG4gICAgY29uc3QgaCA9IHJlZCA9PT0gbWluUkdCID8gMyA6IGJsdWUgPT09IG1pblJHQiA/IDEgOiA1O1xyXG4gICAgY29uc3QgaHVlID0gKDYwICogKGggLSBkIC8gKG1heFJHQiAtIG1pblJHQikpKSAvIDM2MDtcclxuICAgIGNvbnN0IHNhdHVyYXRpb24gPSAobWF4UkdCIC0gbWluUkdCKSAvIG1heFJHQjtcclxuICAgIGNvbnN0IHZhbHVlID0gbWF4UkdCO1xyXG4gICAgcmV0dXJuIHsgaDogaHVlLCBzOiBzYXR1cmF0aW9uLCB2OiB2YWx1ZSB9O1xyXG59XHJcbi8qKlxyXG4gKiBTcGxpdCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgaW50byBhbiBvYmplY3Qgd2l0aCBrZXkvdmFsdWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIENTUyBzb3VyY2UgY29kZSB0byBzcGxpdCBpbnRvIGtleS92YWx1ZSBvYmplY3QuXHJcbiAqIEByZXR1cm5zIEtleS92YWx1ZSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB7QGxpbmsgY3NzVGV4dH0uXHJcbiAqL1xyXG5mdW5jdGlvbiBzcGxpdENTU1RleHQoY3NzVGV4dCkge1xyXG4gICAgY29uc3QgdG1wRWxsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgY29uc3Qgc3R5bGVzID0ge307XHJcbiAgICB0bXBFbGxlbWVudC5zdHlsZS5jc3NUZXh0ID0gY3NzVGV4dDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG1wRWxsZW1lbnQuc3R5bGUubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBzdHlsZXNbdG1wRWxsZW1lbnQuc3R5bGVbaV1dID0gdG1wRWxsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0bXBFbGxlbWVudC5zdHlsZVtpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGVzO1xyXG59XHJcbi8qKlxyXG4gKiBBcHBlbmQgYSBzdHJpbmcgd2l0aCBjc3Mgc3R5bGVzIHRvIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdGhhdCB3aWxsIHJlY2VpdmUgbmV3IHN0eWxlcy5cclxuICogQHBhcmFtIGNzc1RleHQgLSBUaGUgc3R5bGVzIHRvIGJlIGFwcGVuZGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgZnJvbSBhbiBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IGZyb20gd2hpY2ggc3R5bGVzIHNob3VsZCBiZSByZW1vdmVkLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgcmVtb3ZlZC5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNzc1RleHQoZWxlbWVudCwgY3NzVGV4dCkge1xyXG4gICAgY29uc3QgY3NzU3R5bGUgPSBzcGxpdENTU1RleHQoY3NzVGV4dCk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjc3NTdHlsZSkpIHtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgSFNWIFxcPDAsIDFcXD4gaW50byBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbWppamFja3Nvbi81MzExMjU2fVxyXG4gKiBAcGFyYW0gaCAtIEh1ZS5cclxuICogQHBhcmFtIHMgLSBTYXR1cmF0aW9uLlxyXG4gKiBAcGFyYW0gdiAtIFZhbHVlLlxyXG4gKiBAcmV0dXJucyBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gSFNWVG9SR0IoaCwgcywgdikge1xyXG4gICAgbGV0IHI7XHJcbiAgICBsZXQgZztcclxuICAgIGxldCBiO1xyXG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoaCAqIDYpO1xyXG4gICAgY29uc3QgZiA9IGggKiA2IC0gaTtcclxuICAgIGNvbnN0IHAgPSB2ICogKDEgLSBzKTtcclxuICAgIGNvbnN0IHEgPSB2ICogKDEgLSBmICogcyk7XHJcbiAgICBjb25zdCB0ID0gdiAqICgxIC0gKDEgLSBmKSAqIHMpO1xyXG4gICAgc3dpdGNoIChpICUgNikge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSB0KSwgKGIgPSBwKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAociA9IHEpLCAoZyA9IHYpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIChyID0gcCksIChnID0gdiksIChiID0gdCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSBxKSwgKGIgPSB2KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAociA9IHQpLCAoZyA9IHApLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIChyID0gdiksIChnID0gcCksIChiID0gcSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByOiBNYXRoLmZsb29yKHIgKiAyNTUpLFxyXG4gICAgICAgIGc6IE1hdGguZmxvb3IoZyAqIDI1NSksXHJcbiAgICAgICAgYjogTWF0aC5mbG9vcihiICogMjU1KSxcclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgSFNWIFxcPDAsIDFcXD4gaW50byBoZXggY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gaCAtIEh1ZS5cclxuICogQHBhcmFtIHMgLSBTYXR1cmF0aW9uLlxyXG4gKiBAcGFyYW0gdiAtIFZhbHVlLlxyXG4gKiBAcmV0dXJucyBIZXggY29sb3Igc3RyaW5nLlxyXG4gKi9cclxuZnVuY3Rpb24gSFNWVG9IZXgoaCwgcywgdikge1xyXG4gICAgY29uc3QgcmdiID0gSFNWVG9SR0IoaCwgcywgdik7XHJcbiAgICByZXR1cm4gUkdCVG9IZXgocmdiLnIsIHJnYi5nLCByZ2IuYik7XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIEhTViBcXDwwLCAxXFw+LlxyXG4gKlxyXG4gKiBAcGFyYW0gaGV4IC0gSGV4IGNvbG9yIHN0cmluZy5cclxuICogQHJldHVybnMgSFNWIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvSFNWKGhleCkge1xyXG4gICAgY29uc3QgcmdiID0gaGV4VG9SR0IoaGV4KTtcclxuICAgIGlmICghcmdiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7aGV4fScgaXMgbm90IGEgdmFsaWQgY29sb3IuYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUkdCVG9IU1YocmdiLnIsIHJnYi5nLCByZ2IuYik7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBVbmtub3duIHN0cmluZyB0aGF0IG1heSBjb250YWluIGEgY29sb3IuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNWYWxpZEhleChoZXgpIHtcclxuICAgIGNvbnN0IGlzT2sgPSAvKF4jWzAtOUEtRl17Nn0kKXwoXiNbMC05QS1GXXszfSQpL2kudGVzdChoZXgpO1xyXG4gICAgcmV0dXJuIGlzT2s7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIFJHQiBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2IgLSBVbmtub3duIHN0cmluZyB0aGF0IG1heSBjb250YWluIGEgY29sb3IuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNWYWxpZFJHQihyZ2IpIHtcclxuICAgIHJldHVybiByZ2JSRS50ZXN0KHJnYik7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIFJHQkEgY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmdiYSAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCQShyZ2JhKSB7XHJcbiAgICByZXR1cm4gcmdiYVJFLnRlc3QocmdiYSk7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gZmllbGRzIC0gTmFtZXMgb2YgcHJvcGVydGllcyB0byBiZSBicmlkZ2VkLlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgQSBuZXcgb2JqZWN0IGluaGVyaXRpbmcgZnJvbSB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlQnJpZGdlT2JqZWN0KGZpZWxkcywgcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiByZWZlcmVuY2VPYmplY3QgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAvLyAhISEgdHlwZW9mIG51bGwgPT09ICdvYmplY3QnXHJcbiAgICAgICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGZpZWxkc1tpXSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ZpZWxkc1tpXV0gPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFRvW2ZpZWxkc1tpXV0gPSBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0W2ZpZWxkc1tpXV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3RUbztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUaGlzIHJlY3Vyc2l2ZWx5IHJlZGlyZWN0cyB0aGUgcHJvdG90eXBlIG9mIEpTT04gb2JqZWN0cyB0byB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGRlZmF1bHQgb3B0aW9ucy5cclxuICpcclxuICogQHBhcmFtIHJlZmVyZW5jZU9iamVjdCAtIFRoZSBvcmlnaW5hbCBvYmplY3QuXHJcbiAqIEByZXR1cm5zIFRoZSBFbGVtZW50IGlmIHRoZSByZWZlcmVuY2VPYmplY3QgaXMgYW4gRWxlbWVudCwgb3IgYSBuZXcgb2JqZWN0IGluaGVyaXRpbmcgZnJvbSB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdCkge1xyXG4gICAgaWYgKHJlZmVyZW5jZU9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVmZXJlbmNlT2JqZWN0ICE9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0IGluc3RhbmNlb2YgRWxlbWVudCkge1xyXG4gICAgICAgIC8vIEF2b2lkIGJyaWRnaW5nIERPTSBvYmplY3RzXHJcbiAgICAgICAgcmV0dXJuIHJlZmVyZW5jZU9iamVjdDtcclxuICAgIH1cclxuICAgIGNvbnN0IG9iamVjdFRvID0gT2JqZWN0LmNyZWF0ZShyZWZlcmVuY2VPYmplY3QpO1xyXG4gICAgZm9yIChjb25zdCBpIGluIHJlZmVyZW5jZU9iamVjdCkge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVmZXJlbmNlT2JqZWN0LCBpKSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlZmVyZW5jZU9iamVjdFtpXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICBvYmplY3RUb1tpXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iamVjdFRvO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHN0YWJsZSBzb3J0IGltcGxlbWVudGF0aW9uLCB2ZXJ5IGZhc3QgZm9yIHByZXNvcnRlZCBkYXRhLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBhcnJheSB0byBiZSBzb3J0ZWQgKGluLXBsYWNlKS5cclxuICogQHBhcmFtIGNvbXBhcmUgLSBBbiBvcmRlciBjb21wYXJhdG9yLlxyXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGluc2VydFNvcnQoYSwgY29tcGFyZSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGFbaV07XHJcbiAgICAgICAgbGV0IGo7XHJcbiAgICAgICAgZm9yIChqID0gaTsgaiA+IDAgJiYgY29tcGFyZShrLCBhW2ogLSAxXSkgPCAwOyBqLS0pIHtcclxuICAgICAgICAgICAgYVtqXSA9IGFbaiAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhW2pdID0gaztcclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZSBvcHRpb25zIG9mIHN1Ym9iamVjdHMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxyXG4gKlxyXG4gKiBBIHJlcXVpcmVtZW50IG9mIHRoZXNlIHN1Ym9iamVjdHMgaXMgdGhhdCB0aGV5IGhhdmUgYW4gJ2VuYWJsZWQnIGVsZW1lbnRcclxuICogd2hpY2ggaXMgb3B0aW9uYWwgZm9yIHRoZSB1c2VyIGJ1dCBtYW5kYXRvcnkgZm9yIHRoZSBwcm9ncmFtLlxyXG4gKlxyXG4gKiBUaGUgYWRkZWQgdmFsdWUgaGVyZSBvZiB0aGUgbWVyZ2UgaXMgdGhhdCBvcHRpb24gJ2VuYWJsZWQnIGlzIHNldCBhcyByZXF1aXJlZC5cclxuICpcclxuICogQHBhcmFtIG1lcmdlVGFyZ2V0IC0gRWl0aGVyIHRoaXMub3B0aW9ucyBvciB0aGUgb3B0aW9ucyB1c2VkIGZvciB0aGUgZ3JvdXBzLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXHJcbiAqIEBwYXJhbSBvcHRpb24gLSBPcHRpb24ga2V5IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50LlxyXG4gKiBAcGFyYW0gZ2xvYmFsT3B0aW9ucyAtIEdsb2JhbCBvcHRpb25zLCBwYXNzZWQgaW4gdG8gZGV0ZXJtaW5lIHZhbHVlIG9mIG9wdGlvbiAnZW5hYmxlZCcuXHJcbiAqL1xyXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbiwgZ2xvYmFsT3B0aW9ucyA9IHt9KSB7XHJcbiAgICAvLyBMb2NhbCBoZWxwZXJzXHJcbiAgICBjb25zdCBpc1ByZXNlbnQgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiBvYmogIT09IHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBjb25zdCBpc09iamVjdCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCI7XHJcbiAgICB9O1xyXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM0NDkxMjg3LzEyMjM1MzFcclxuICAgIGNvbnN0IGlzRW1wdHkgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB4IGluIG9iaikge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgeCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICAvLyBHdWFyZHNcclxuICAgIGlmICghaXNPYmplY3QobWVyZ2VUYXJnZXQpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG1lcmdlVGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciBvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc1ByZXNlbnQob3B0aW9uKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciBvcHRpb24gbXVzdCBoYXZlIGEgdmFsdWVcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KGdsb2JhbE9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIGdsb2JhbE9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gQWN0dWFsIG1lcmdlIHJvdXRpbmUsIHNlcGFyYXRlZCBmcm9tIG1haW4gbG9naWNcclxuICAgIC8vIE9ubHkgYSBzaW5nbGUgbGV2ZWwgb2Ygb3B0aW9ucyBpcyBtZXJnZWQuIERlZXBlciBsZXZlbHMgYXJlIHJlZidkLiBUaGlzIG1heSBhY3R1YWxseSBiZSBhbiBpc3N1ZS5cclxuICAgIC8vXHJcbiAgICBjb25zdCBkb01lcmdlID0gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucywgb3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFpc09iamVjdCh0YXJnZXRbb3B0aW9uXSkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3JjID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgICAgIGNvbnN0IGRzdCA9IHRhcmdldFtvcHRpb25dO1xyXG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBzcmMpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzcmMsIHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBkc3RbcHJvcF0gPSBzcmNbcHJvcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLy8gTG9jYWwgaW5pdGlhbGl6YXRpb25cclxuICAgIGNvbnN0IHNyY09wdGlvbiA9IG9wdGlvbnNbb3B0aW9uXTtcclxuICAgIGNvbnN0IGdsb2JhbFBhc3NlZCA9IGlzT2JqZWN0KGdsb2JhbE9wdGlvbnMpICYmICFpc0VtcHR5KGdsb2JhbE9wdGlvbnMpO1xyXG4gICAgY29uc3QgZ2xvYmFsT3B0aW9uID0gZ2xvYmFsUGFzc2VkID8gZ2xvYmFsT3B0aW9uc1tvcHRpb25dIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgZ2xvYmFsRW5hYmxlZCA9IGdsb2JhbE9wdGlvbiA/IGdsb2JhbE9wdGlvbi5lbmFibGVkIDogdW5kZWZpbmVkO1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIE1haW4gcm91dGluZVxyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIGlmIChzcmNPcHRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkb1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzcmNPcHRpb24gPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICBtZXJnZVRhcmdldFtvcHRpb25dID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0uZW5hYmxlZCA9IHNyY09wdGlvbjtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoc3JjT3B0aW9uID09PSBudWxsICYmICFpc09iamVjdChtZXJnZVRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgIC8vIElmIHBvc3NpYmxlLCBleHBsaWNpdCBjb3B5IGZyb20gZ2xvYmFsc1xyXG4gICAgICAgIGlmIChpc1ByZXNlbnQoZ2xvYmFsT3B0aW9uKSkge1xyXG4gICAgICAgICAgICBtZXJnZVRhcmdldFtvcHRpb25dID0gT2JqZWN0LmNyZWF0ZShnbG9iYWxPcHRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFpc09iamVjdChzcmNPcHRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy9cclxuICAgIC8vIEVuc3VyZSB0aGF0ICdlbmFibGVkJyBpcyBwcm9wZXJseSBzZXQuIEl0IGlzIHJlcXVpcmVkIGludGVybmFsbHlcclxuICAgIC8vIE5vdGUgdGhhdCB0aGUgdmFsdWUgZnJvbSBvcHRpb25zIHdpbGwgYWx3YXlzIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgdmFsdWVcclxuICAgIC8vXHJcbiAgICBsZXQgZW5hYmxlZCA9IHRydWU7IC8vIGRlZmF1bHQgdmFsdWVcclxuICAgIGlmIChzcmNPcHRpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZW5hYmxlZCA9IHNyY09wdGlvbi5lbmFibGVkO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gVGFrZSBmcm9tIGdsb2JhbHMsIGlmIHByZXNlbnRcclxuICAgICAgICBpZiAoZ2xvYmFsRW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWQgPSBnbG9iYWxPcHRpb24uZW5hYmxlZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkb01lcmdlKG1lcmdlVGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pO1xyXG4gICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gZW5hYmxlZDtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSB2aXNpYmxlIGl0ZW0gaW4gYSBzb3J0ZWQgbGlzdC4gSWYgd2UgZmluZCBhIHZpc2libGUgaXRlbSwgdGhlIGNvZGUgdGhhdCB1c2VzXHJcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCB0aGVuIGl0ZXJhdGUgaW4gYm90aCBkaXJlY3Rpb25zIG92ZXIgdGhpcyBzb3J0ZWQgbGlzdCB0byBmaW5kIGFsbCB2aXNpYmxlIGl0ZW1zLlxyXG4gKlxyXG4gKiBAcGFyYW0gb3JkZXJlZEl0ZW1zIC0gSXRlbXMgb3JkZXJlZCBieSBzdGFydC5cclxuICogQHBhcmFtIGNvbXBhcmF0b3IgLSAtMSBpcyBsb3dlciwgMCBpcyBlcXVhbCwgMSBpcyBoaWdoZXIuXHJcbiAqIEBwYXJhbSBmaWVsZCAtIFByb3BlcnR5IG5hbWUgb24gYW4gaXRlbSAoVGhhdCBpcyBpdGVtW2ZpZWxkXSkuXHJcbiAqIEBwYXJhbSBmaWVsZDIgLSBTZWNvbmQgcHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdW2ZpZWxkMl0pLlxyXG4gKiBAcmV0dXJucyBJbmRleCBvZiB0aGUgZm91bmQgaXRlbSBvciAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC5cclxuICovXHJcbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaEN1c3RvbShvcmRlcmVkSXRlbXMsIGNvbXBhcmF0b3IsIGZpZWxkLCBmaWVsZDIpIHtcclxuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDAwMDtcclxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xyXG4gICAgbGV0IGxvdyA9IDA7XHJcbiAgICBsZXQgaGlnaCA9IG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgd2hpbGUgKGxvdyA8PSBoaWdoICYmIGl0ZXJhdGlvbiA8IG1heEl0ZXJhdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBvcmRlcmVkSXRlbXNbbWlkZGxlXTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkMiA9PT0gdW5kZWZpbmVkID8gaXRlbVtmaWVsZF0gOiBpdGVtW2ZpZWxkXVtmaWVsZDJdO1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdCA9IGNvbXBhcmF0b3IodmFsdWUpO1xyXG4gICAgICAgIGlmIChzZWFyY2hSZXN1bHQgPT0gMCkge1xyXG4gICAgICAgICAgICAvLyBqaWhhYSwgZm91bmQgYSB2aXNpYmxlIGl0ZW0hXHJcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNlYXJjaFJlc3VsdCA9PSAtMSkge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICBsb3cgPSBtaWRkbGUgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXQgaXMgdG9vIGJpZyAtLT4gZGVjcmVhc2UgaGlnaFxyXG4gICAgICAgICAgICBoaWdoID0gbWlkZGxlIC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaXRlcmF0aW9uKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGJpbmFyeSBzZWFyY2ggZm9yIGEgc3BlY2lmaWMgdmFsdWUgaW4gYSBzb3J0ZWQgYXJyYXkuXHJcbiAqIElmIGl0IGRvZXMgbm90IGV4aXN0IGJ1dCBpcyBpbiBiZXR3ZWVuIG9mIHR3byB2YWx1ZXMsIHdlIHJldHVybiBlaXRoZXIgdGhlXHJcbiAqIG9uZSBiZWZvcmUgb3IgdGhlIG9uZSBhZnRlciwgZGVwZW5kaW5nIG9uIHVzZXIgaW5wdXQgSWYgaXQgaXMgZm91bmQsIHdlXHJcbiAqIHJldHVybiB0aGUgaW5kZXgsIGVsc2UgLTEuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBTb3J0ZWQgYXJyYXkuXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgc2VhcmNoZWQgdmFsdWUuXHJcbiAqIEBwYXJhbSBmaWVsZCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IGluIGl0ZW1zIHRvIGJlIHNlYXJjaGVkLlxyXG4gKiBAcGFyYW0gc2lkZVByZWZlcmVuY2UgLSBJZiB0aGUgdGFyZ2V0IGlzIGJldHdlZW4gdHdvIHZhbHVlcywgc2hvdWxkIHRoZSBpbmRleCBvZiB0aGUgYmVmb3JlIG9yIHRoZSBhZnRlciBiZSByZXR1cm5lZD9cclxuICogQHBhcmFtIGNvbXBhcmF0b3IgLSBBbiBvcHRpb25hbCBjb21wYXJhdG9yLCByZXR1cm5pbmcgLTEsIDAsIDEgZm9yIFxcPCwgPT09LCBcXD4uXHJcbiAqIEByZXR1cm5zIFRoZSBpbmRleCBvZiBmb3VuZCB2YWx1ZSBvciAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC5cclxuICovXHJcbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaFZhbHVlKG9yZGVyZWRJdGVtcywgdGFyZ2V0LCBmaWVsZCwgc2lkZVByZWZlcmVuY2UsIGNvbXBhcmF0b3IpIHtcclxuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDAwMDtcclxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xyXG4gICAgbGV0IGxvdyA9IDA7XHJcbiAgICBsZXQgaGlnaCA9IG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgbGV0IHByZXZWYWx1ZTtcclxuICAgIGxldCB2YWx1ZTtcclxuICAgIGxldCBuZXh0VmFsdWU7XHJcbiAgICBsZXQgbWlkZGxlO1xyXG4gICAgY29tcGFyYXRvciA9XHJcbiAgICAgICAgY29tcGFyYXRvciAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBjb21wYXJhdG9yXHJcbiAgICAgICAgICAgIDogZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhID09IGIgPyAwIDogYSA8IGIgPyAtMSA6IDE7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIC8vIGdldCBhIG5ldyBndWVzc1xyXG4gICAgICAgIG1pZGRsZSA9IE1hdGguZmxvb3IoMC41ICogKGhpZ2ggKyBsb3cpKTtcclxuICAgICAgICBwcmV2VmFsdWUgPSBvcmRlcmVkSXRlbXNbTWF0aC5tYXgoMCwgbWlkZGxlIC0gMSldW2ZpZWxkXTtcclxuICAgICAgICB2YWx1ZSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdW2ZpZWxkXTtcclxuICAgICAgICBuZXh0VmFsdWUgPVxyXG4gICAgICAgICAgICBvcmRlcmVkSXRlbXNbTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpXVtmaWVsZF07XHJcbiAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPT0gMCkge1xyXG4gICAgICAgICAgICAvLyB3ZSBmb3VuZCB0aGUgdGFyZ2V0XHJcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmF0b3IocHJldlZhbHVlLCB0YXJnZXQpIDwgMCAmJlxyXG4gICAgICAgICAgICBjb21wYXJhdG9yKHZhbHVlLCB0YXJnZXQpID4gMCkge1xyXG4gICAgICAgICAgICAvLyB0YXJnZXQgaXMgaW4gYmV0d2VlbiBvZiB0aGUgcHJldmlvdXMgYW5kIHRoZSBjdXJyZW50XHJcbiAgICAgICAgICAgIHJldHVybiBzaWRlUHJlZmVyZW5jZSA9PSBcImJlZm9yZVwiID8gTWF0aC5tYXgoMCwgbWlkZGxlIC0gMSkgOiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IobmV4dFZhbHVlLCB0YXJnZXQpID4gMCkge1xyXG4gICAgICAgICAgICAvLyB0YXJnZXQgaXMgaW4gYmV0d2VlbiBvZiB0aGUgY3VycmVudCBhbmQgdGhlIG5leHRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCJcclxuICAgICAgICAgICAgICAgID8gbWlkZGxlXHJcbiAgICAgICAgICAgICAgICA6IE1hdGgubWluKG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxLCBtaWRkbGUgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGRpZG50IGZpbmQgdGhlIHRhcmdldCwgd2UgbmVlZCB0byBjaGFuZ2Ugb3VyIGJvdW5kYXJpZXMuXHJcbiAgICAgICAgICAgIGlmIChjb21wYXJhdG9yKHZhbHVlLCB0YXJnZXQpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaXQgaXMgdG9vIHNtYWxsIC0tPiBpbmNyZWFzZSBsb3dcclxuICAgICAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgICAgICBoaWdoID0gbWlkZGxlIC0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIC8vIGRpZG50IGZpbmQgYW55dGhpbmcuIFJldHVybiAtMS5cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKlxyXG4gKiBFYXNpbmcgRnVuY3Rpb25zLlxyXG4gKiBPbmx5IGNvbnNpZGVyaW5nIHRoZSB0IHZhbHVlIGZvciB0aGUgcmFuZ2UgWzAsIDFdID0+IFswLCAxXS5cclxuICpcclxuICogSW5zcGlyYXRpb246IGZyb20gaHR0cDovL2dpem1hLmNvbS9lYXNpbmcvXHJcbiAqIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2dyZS8xNjUwMjk0XHJcbiAqL1xyXG5jb25zdCBlYXNpbmdGdW5jdGlvbnMgPSB7XHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIG5vIGVhc2luZyBhbmQgbm8gYWNjZWxlcmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgbGluZWFyKHQpIHtcclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YWQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogKDIgLSB0KTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAyICogdCAqIHQgOiAtMSArICg0IC0gMiAqIHQpICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluQ3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiAtLXQgKiB0ICogdCArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJbk91dEN1YmljKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDQgKiB0ICogdCAqIHQgOiAodCAtIDEpICogKDIgKiB0IC0gMikgKiAoMiAqIHQgLSAyKSArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIGZyb20gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJblF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWFydCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAtLXQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJbk91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDggKiB0ICogdCAqIHQgKiB0IDogMSAtIDggKiAtLXQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIGZyb20gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJblF1aW50KHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiAxICsgLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gMTYgKiB0ICogdCAqIHQgKiB0ICogdCA6IDEgKyAxNiAqIC0tdCAqIHQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG59O1xyXG4vKipcclxuICogRXhwZXJpbWVudGFseSBjb21wdXRlIHRoZSB3aWR0aCBvZiB0aGUgc2Nyb2xsYmFyIGZvciB0aGlzIGJyb3dzZXIuXHJcbiAqXHJcbiAqIEByZXR1cm5zIFRoZSB3aWR0aCBpbiBwaXhlbHMuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTY3JvbGxCYXJXaWR0aCgpIHtcclxuICAgIGNvbnN0IGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICBpbm5lci5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xyXG4gICAgaW5uZXIuc3R5bGUuaGVpZ2h0ID0gXCIyMDBweFwiO1xyXG4gICAgY29uc3Qgb3V0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgb3V0ZXIuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICBvdXRlci5zdHlsZS50b3AgPSBcIjBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgIG91dGVyLnN0eWxlLndpZHRoID0gXCIyMDBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUuaGVpZ2h0ID0gXCIxNTBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlcik7XHJcbiAgICBjb25zdCB3MSA9IGlubmVyLm9mZnNldFdpZHRoO1xyXG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSBcInNjcm9sbFwiO1xyXG4gICAgbGV0IHcyID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBpZiAodzEgPT0gdzIpIHtcclxuICAgICAgICB3MiA9IG91dGVyLmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdXRlcik7XHJcbiAgICByZXR1cm4gdzEgLSB3MjtcclxufVxyXG4vLyBAVE9ETzogVGhpcyBkb2Vzbid0IHdvcmsgcHJvcGVybHkuXHJcbi8vIEl0IHdvcmtzIG9ubHkgZm9yIHNpbmdsZSBwcm9wZXJ0eSBvYmplY3RzLFxyXG4vLyBvdGhlcndpc2UgaXQgY29tYmluZXMgYWxsIG9mIHRoZSB0eXBlcyBpbiBhIHVuaW9uLlxyXG4vLyBleHBvcnQgZnVuY3Rpb24gdG9wTW9zdDxLMSBleHRlbmRzIHN0cmluZywgVjE+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxPltdLFxyXG4vLyAgIGFjY2Vzc29yczogSzEgfCBbSzFdXHJcbi8vICk6IHVuZGVmaW5lZCB8IFYxXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgVjEsIFYyPiAoXHJcbi8vICAgcGlsZTogUmVjb3JkPEsxLCB1bmRlZmluZWQgfCBWMSB8IFJlY29yZDxLMiwgdW5kZWZpbmVkIHwgVjI+PltdLFxyXG4vLyAgIGFjY2Vzc29yczogW0sxLCBLMl1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjEgfCBWMlxyXG4vLyBleHBvcnQgZnVuY3Rpb24gdG9wTW9zdDxLMSBleHRlbmRzIHN0cmluZywgSzIgZXh0ZW5kcyBzdHJpbmcsIEszIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjIsIFYzPiAoXHJcbi8vICAgcGlsZTogUmVjb3JkPEsxLCB1bmRlZmluZWQgfCBWMSB8IFJlY29yZDxLMiwgdW5kZWZpbmVkIHwgVjIgfCBSZWNvcmQ8SzMsIHVuZGVmaW5lZCB8IFYzPj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyLCBLM11cclxuLy8gKTogdW5kZWZpbmVkIHwgVjEgfCBWMiB8IFYzXHJcbi8qKlxyXG4gKiBHZXQgdGhlIHRvcCBtb3N0IHByb3BlcnR5IHZhbHVlIGZyb20gYSBwaWxlIG9mIG9iamVjdHMuXHJcbiAqXHJcbiAqIEBwYXJhbSBwaWxlIC0gQXJyYXkgb2Ygb2JqZWN0cywgbm8gcmVxdWlyZWQgZm9ybWF0LlxyXG4gKiBAcGFyYW0gYWNjZXNzb3JzIC0gQXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXHJcbiAqIEZvciBleGFtcGxlIGBvYmplY3RbJ2ZvbyddWydiYXInXWAg4oaSIGBbJ2ZvbycsICdiYXInXWAuXHJcbiAqIEByZXR1cm5zIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB3aXRoIGdpdmVuIGFjY2Vzc29ycyBwYXRoIGZyb20gdGhlIGZpcnN0IHBpbGUgaXRlbSB3aGVyZSBpdCdzIG5vdCB1bmRlZmluZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiB0b3BNb3N0KHBpbGUsIGFjY2Vzc29ycykge1xyXG4gICAgbGV0IGNhbmRpZGF0ZTtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShhY2Nlc3NvcnMpKSB7XHJcbiAgICAgICAgYWNjZXNzb3JzID0gW2FjY2Vzc29yc107XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBwaWxlKSB7XHJcbiAgICAgICAgaWYgKG1lbWJlcikge1xyXG4gICAgICAgICAgICBjYW5kaWRhdGUgPSBtZW1iZXJbYWNjZXNzb3JzWzBdXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhY2Nlc3NvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGVbYWNjZXNzb3JzW2ldXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbmRpZGF0ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FuZGlkYXRlO1xyXG59XG5cbmNvbnN0IGh0bWxDb2xvcnMgPSB7XG4gIGJsYWNrOiBcIiMwMDAwMDBcIixcbiAgbmF2eTogXCIjMDAwMDgwXCIsXG4gIGRhcmtibHVlOiBcIiMwMDAwOEJcIixcbiAgbWVkaXVtYmx1ZTogXCIjMDAwMENEXCIsXG4gIGJsdWU6IFwiIzAwMDBGRlwiLFxuICBkYXJrZ3JlZW46IFwiIzAwNjQwMFwiLFxuICBncmVlbjogXCIjMDA4MDAwXCIsXG4gIHRlYWw6IFwiIzAwODA4MFwiLFxuICBkYXJrY3lhbjogXCIjMDA4QjhCXCIsXG4gIGRlZXBza3libHVlOiBcIiMwMEJGRkZcIixcbiAgZGFya3R1cnF1b2lzZTogXCIjMDBDRUQxXCIsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiBcIiMwMEZBOUFcIixcbiAgbGltZTogXCIjMDBGRjAwXCIsXG4gIHNwcmluZ2dyZWVuOiBcIiMwMEZGN0ZcIixcbiAgYXF1YTogXCIjMDBGRkZGXCIsXG4gIGN5YW46IFwiIzAwRkZGRlwiLFxuICBtaWRuaWdodGJsdWU6IFwiIzE5MTk3MFwiLFxuICBkb2RnZXJibHVlOiBcIiMxRTkwRkZcIixcbiAgbGlnaHRzZWFncmVlbjogXCIjMjBCMkFBXCIsXG4gIGZvcmVzdGdyZWVuOiBcIiMyMjhCMjJcIixcbiAgc2VhZ3JlZW46IFwiIzJFOEI1N1wiLFxuICBkYXJrc2xhdGVncmF5OiBcIiMyRjRGNEZcIixcbiAgbGltZWdyZWVuOiBcIiMzMkNEMzJcIixcbiAgbWVkaXVtc2VhZ3JlZW46IFwiIzNDQjM3MVwiLFxuICB0dXJxdW9pc2U6IFwiIzQwRTBEMFwiLFxuICByb3lhbGJsdWU6IFwiIzQxNjlFMVwiLFxuICBzdGVlbGJsdWU6IFwiIzQ2ODJCNFwiLFxuICBkYXJrc2xhdGVibHVlOiBcIiM0ODNEOEJcIixcbiAgbWVkaXVtdHVycXVvaXNlOiBcIiM0OEQxQ0NcIixcbiAgaW5kaWdvOiBcIiM0QjAwODJcIixcbiAgZGFya29saXZlZ3JlZW46IFwiIzU1NkIyRlwiLFxuICBjYWRldGJsdWU6IFwiIzVGOUVBMFwiLFxuICBjb3JuZmxvd2VyYmx1ZTogXCIjNjQ5NUVEXCIsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IFwiIzY2Q0RBQVwiLFxuICBkaW1ncmF5OiBcIiM2OTY5NjlcIixcbiAgc2xhdGVibHVlOiBcIiM2QTVBQ0RcIixcbiAgb2xpdmVkcmFiOiBcIiM2QjhFMjNcIixcbiAgc2xhdGVncmF5OiBcIiM3MDgwOTBcIixcbiAgbGlnaHRzbGF0ZWdyYXk6IFwiIzc3ODg5OVwiLFxuICBtZWRpdW1zbGF0ZWJsdWU6IFwiIzdCNjhFRVwiLFxuICBsYXduZ3JlZW46IFwiIzdDRkMwMFwiLFxuICBjaGFydHJldXNlOiBcIiM3RkZGMDBcIixcbiAgYXF1YW1hcmluZTogXCIjN0ZGRkQ0XCIsXG4gIG1hcm9vbjogXCIjODAwMDAwXCIsXG4gIHB1cnBsZTogXCIjODAwMDgwXCIsXG4gIG9saXZlOiBcIiM4MDgwMDBcIixcbiAgZ3JheTogXCIjODA4MDgwXCIsXG4gIHNreWJsdWU6IFwiIzg3Q0VFQlwiLFxuICBsaWdodHNreWJsdWU6IFwiIzg3Q0VGQVwiLFxuICBibHVldmlvbGV0OiBcIiM4QTJCRTJcIixcbiAgZGFya3JlZDogXCIjOEIwMDAwXCIsXG4gIGRhcmttYWdlbnRhOiBcIiM4QjAwOEJcIixcbiAgc2FkZGxlYnJvd246IFwiIzhCNDUxM1wiLFxuICBkYXJrc2VhZ3JlZW46IFwiIzhGQkM4RlwiLFxuICBsaWdodGdyZWVuOiBcIiM5MEVFOTBcIixcbiAgbWVkaXVtcHVycGxlOiBcIiM5MzcwRDhcIixcbiAgZGFya3Zpb2xldDogXCIjOTQwMEQzXCIsXG4gIHBhbGVncmVlbjogXCIjOThGQjk4XCIsXG4gIGRhcmtvcmNoaWQ6IFwiIzk5MzJDQ1wiLFxuICB5ZWxsb3dncmVlbjogXCIjOUFDRDMyXCIsXG4gIHNpZW5uYTogXCIjQTA1MjJEXCIsXG4gIGJyb3duOiBcIiNBNTJBMkFcIixcbiAgZGFya2dyYXk6IFwiI0E5QTlBOVwiLFxuICBsaWdodGJsdWU6IFwiI0FERDhFNlwiLFxuICBncmVlbnllbGxvdzogXCIjQURGRjJGXCIsXG4gIHBhbGV0dXJxdW9pc2U6IFwiI0FGRUVFRVwiLFxuICBsaWdodHN0ZWVsYmx1ZTogXCIjQjBDNERFXCIsXG4gIHBvd2RlcmJsdWU6IFwiI0IwRTBFNlwiLFxuICBmaXJlYnJpY2s6IFwiI0IyMjIyMlwiLFxuICBkYXJrZ29sZGVucm9kOiBcIiNCODg2MEJcIixcbiAgbWVkaXVtb3JjaGlkOiBcIiNCQTU1RDNcIixcbiAgcm9zeWJyb3duOiBcIiNCQzhGOEZcIixcbiAgZGFya2toYWtpOiBcIiNCREI3NkJcIixcbiAgc2lsdmVyOiBcIiNDMEMwQzBcIixcbiAgbWVkaXVtdmlvbGV0cmVkOiBcIiNDNzE1ODVcIixcbiAgaW5kaWFucmVkOiBcIiNDRDVDNUNcIixcbiAgcGVydTogXCIjQ0Q4NTNGXCIsXG4gIGNob2NvbGF0ZTogXCIjRDI2OTFFXCIsXG4gIHRhbjogXCIjRDJCNDhDXCIsXG4gIGxpZ2h0Z3JleTogXCIjRDNEM0QzXCIsXG4gIHBhbGV2aW9sZXRyZWQ6IFwiI0Q4NzA5M1wiLFxuICB0aGlzdGxlOiBcIiNEOEJGRDhcIixcbiAgb3JjaGlkOiBcIiNEQTcwRDZcIixcbiAgZ29sZGVucm9kOiBcIiNEQUE1MjBcIixcbiAgY3JpbXNvbjogXCIjREMxNDNDXCIsXG4gIGdhaW5zYm9ybzogXCIjRENEQ0RDXCIsXG4gIHBsdW06IFwiI0REQTBERFwiLFxuICBidXJseXdvb2Q6IFwiI0RFQjg4N1wiLFxuICBsaWdodGN5YW46IFwiI0UwRkZGRlwiLFxuICBsYXZlbmRlcjogXCIjRTZFNkZBXCIsXG4gIGRhcmtzYWxtb246IFwiI0U5OTY3QVwiLFxuICB2aW9sZXQ6IFwiI0VFODJFRVwiLFxuICBwYWxlZ29sZGVucm9kOiBcIiNFRUU4QUFcIixcbiAgbGlnaHRjb3JhbDogXCIjRjA4MDgwXCIsXG4gIGtoYWtpOiBcIiNGMEU2OENcIixcbiAgYWxpY2VibHVlOiBcIiNGMEY4RkZcIixcbiAgaG9uZXlkZXc6IFwiI0YwRkZGMFwiLFxuICBhenVyZTogXCIjRjBGRkZGXCIsXG4gIHNhbmR5YnJvd246IFwiI0Y0QTQ2MFwiLFxuICB3aGVhdDogXCIjRjVERUIzXCIsXG4gIGJlaWdlOiBcIiNGNUY1RENcIixcbiAgd2hpdGVzbW9rZTogXCIjRjVGNUY1XCIsXG4gIG1pbnRjcmVhbTogXCIjRjVGRkZBXCIsXG4gIGdob3N0d2hpdGU6IFwiI0Y4RjhGRlwiLFxuICBzYWxtb246IFwiI0ZBODA3MlwiLFxuICBhbnRpcXVld2hpdGU6IFwiI0ZBRUJEN1wiLFxuICBsaW5lbjogXCIjRkFGMEU2XCIsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiBcIiNGQUZBRDJcIixcbiAgb2xkbGFjZTogXCIjRkRGNUU2XCIsXG4gIHJlZDogXCIjRkYwMDAwXCIsXG4gIGZ1Y2hzaWE6IFwiI0ZGMDBGRlwiLFxuICBtYWdlbnRhOiBcIiNGRjAwRkZcIixcbiAgZGVlcHBpbms6IFwiI0ZGMTQ5M1wiLFxuICBvcmFuZ2VyZWQ6IFwiI0ZGNDUwMFwiLFxuICB0b21hdG86IFwiI0ZGNjM0N1wiLFxuICBob3RwaW5rOiBcIiNGRjY5QjRcIixcbiAgY29yYWw6IFwiI0ZGN0Y1MFwiLFxuICBkYXJrb3JhbmdlOiBcIiNGRjhDMDBcIixcbiAgbGlnaHRzYWxtb246IFwiI0ZGQTA3QVwiLFxuICBvcmFuZ2U6IFwiI0ZGQTUwMFwiLFxuICBsaWdodHBpbms6IFwiI0ZGQjZDMVwiLFxuICBwaW5rOiBcIiNGRkMwQ0JcIixcbiAgZ29sZDogXCIjRkZENzAwXCIsXG4gIHBlYWNocHVmZjogXCIjRkZEQUI5XCIsXG4gIG5hdmFqb3doaXRlOiBcIiNGRkRFQURcIixcbiAgbW9jY2FzaW46IFwiI0ZGRTRCNVwiLFxuICBiaXNxdWU6IFwiI0ZGRTRDNFwiLFxuICBtaXN0eXJvc2U6IFwiI0ZGRTRFMVwiLFxuICBibGFuY2hlZGFsbW9uZDogXCIjRkZFQkNEXCIsXG4gIHBhcGF5YXdoaXA6IFwiI0ZGRUZENVwiLFxuICBsYXZlbmRlcmJsdXNoOiBcIiNGRkYwRjVcIixcbiAgc2Vhc2hlbGw6IFwiI0ZGRjVFRVwiLFxuICBjb3Juc2lsazogXCIjRkZGOERDXCIsXG4gIGxlbW9uY2hpZmZvbjogXCIjRkZGQUNEXCIsXG4gIGZsb3JhbHdoaXRlOiBcIiNGRkZBRjBcIixcbiAgc25vdzogXCIjRkZGQUZBXCIsXG4gIHllbGxvdzogXCIjRkZGRjAwXCIsXG4gIGxpZ2h0eWVsbG93OiBcIiNGRkZGRTBcIixcbiAgaXZvcnk6IFwiI0ZGRkZGMFwiLFxuICB3aGl0ZTogXCIjRkZGRkZGXCIsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGl4ZWxSYXRpbz0xXVxuICovXG5sZXQgQ29sb3JQaWNrZXIkMSA9IGNsYXNzIENvbG9yUGlja2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGl4ZWxSYXRpbz0xXVxuICAgKi9cbiAgY29uc3RydWN0b3IocGl4ZWxSYXRpbyA9IDEpIHtcbiAgICB0aGlzLnBpeGVsUmF0aW8gPSBwaXhlbFJhdGlvO1xuICAgIHRoaXMuZ2VuZXJhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5jZW50ZXJDb29yZGluYXRlcyA9IHsgeDogMjg5IC8gMiwgeTogMjg5IC8gMiB9O1xuICAgIHRoaXMuciA9IDI4OSAqIDAuNDk7XG4gICAgdGhpcy5jb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5odWVDaXJjbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pbml0aWFsQ29sb3IgPSB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGE6IDEuMCB9O1xuICAgIHRoaXMucHJldmlvdXNDb2xvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFwcGxpZWQgPSBmYWxzZTtcblxuICAgIC8vIGJvdW5kIGJ5XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayA9ICgpID0+IHt9O1xuICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9ICgpID0+IHt9O1xuXG4gICAgLy8gY3JlYXRlIGFsbCBET00gZWxlbWVudHNcbiAgICB0aGlzLl9jcmVhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGluc2VydHMgdGhlIGNvbG9yUGlja2VyIGludG8gYSBkaXYgZnJvbSB0aGUgRE9NXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyXG4gICAqL1xuICBpbnNlcnRUbyhjb250YWluZXIpIHtcbiAgICBpZiAodGhpcy5oYW1tZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5oYW1tZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy5oYW1tZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICAgIHRoaXMuX2JpbmRIYW1tZXIoKTtcblxuICAgIHRoaXMuX3NldFNpemUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgb24gYXBwbHkgYW5kIHNhdmUuIEJpbmQgaXQgdG8gdGhlIGFwcGxpY2F0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBzZXRVcGRhdGVDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRnVuY3Rpb24gYXR0ZW1wdGVkIHRvIHNldCBhcyBjb2xvclBpY2tlciB1cGRhdGUgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldENsb3NlQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRnVuY3Rpb24gYXR0ZW1wdGVkIHRvIHNldCBhcyBjb2xvclBpY2tlciBjbG9zaW5nIGNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pc0NvbG9yU3RyaW5nKGNvbG9yKSB7XG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGh0bWxDb2xvcnNbY29sb3JdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbG9yIG9mIHRoZSBjb2xvclBpY2tlclxuICAgKiBTdXBwb3J0ZWQgZm9ybWF0czpcbiAgICogJ3JlZCcgICAgICAgICAgICAgICAgICAgLS0+IEhUTUwgY29sb3Igc3RyaW5nXG4gICAqICcjZmZmZmZmJyAgICAgICAgICAgICAgIC0tPiBoZXggc3RyaW5nXG4gICAqICdyZ2IoMjU1LDI1NSwyNTUpJyAgICAgIC0tPiByZ2Igc3RyaW5nXG4gICAqICdyZ2JhKDI1NSwyNTUsMjU1LDEuMCknIC0tPiByZ2JhIHN0cmluZ1xuICAgKiB7cjoyNTUsZzoyNTUsYjoyNTV9ICAgICAtLT4gcmdiIG9iamVjdFxuICAgKiB7cjoyNTUsZzoyNTUsYjoyNTUsYToxLjB9IC0tPiByZ2JhIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG9iamVjdH0gY29sb3JcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2V0SW5pdGlhbD10cnVlXVxuICAgKi9cbiAgc2V0Q29sb3IoY29sb3IsIHNldEluaXRpYWwgPSB0cnVlKSB7XG4gICAgaWYgKGNvbG9yID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZ2JhO1xuXG4gICAgLy8gaWYgYSBodG1sIGNvbG9yIHNob3J0aGFuZCBpcyB1c2VkLCBjb252ZXJ0IHRvIGhleFxuICAgIGNvbnN0IGh0bWxDb2xvciA9IHRoaXMuX2lzQ29sb3JTdHJpbmcoY29sb3IpO1xuICAgIGlmIChodG1sQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29sb3IgPSBodG1sQ29sb3I7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9ybWF0XG4gICAgaWYgKGlzU3RyaW5nKGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKGlzVmFsaWRSR0IoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHJnYmFBcnJheSA9IGNvbG9yXG4gICAgICAgICAgLnN1YnN0cig0KVxuICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3IubGVuZ3RoIC0gNSlcbiAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xuICAgICAgICByZ2JhID0geyByOiByZ2JhQXJyYXlbMF0sIGc6IHJnYmFBcnJheVsxXSwgYjogcmdiYUFycmF5WzJdLCBhOiAxLjAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZFJHQkEoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHJnYmFBcnJheSA9IGNvbG9yXG4gICAgICAgICAgLnN1YnN0cig1KVxuICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3IubGVuZ3RoIC0gNilcbiAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xuICAgICAgICByZ2JhID0ge1xuICAgICAgICAgIHI6IHJnYmFBcnJheVswXSxcbiAgICAgICAgICBnOiByZ2JhQXJyYXlbMV0sXG4gICAgICAgICAgYjogcmdiYUFycmF5WzJdLFxuICAgICAgICAgIGE6IHJnYmFBcnJheVszXSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZEhleChjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiT2JqID0gaGV4VG9SR0IoY29sb3IpO1xuICAgICAgICByZ2JhID0geyByOiByZ2JPYmouciwgZzogcmdiT2JqLmcsIGI6IHJnYk9iai5iLCBhOiAxLjAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbG9yIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2xvci5yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb2xvci5nICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb2xvci5iICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgYWxwaGEgPSBjb2xvci5hICE9PSB1bmRlZmluZWQgPyBjb2xvci5hIDogXCIxLjBcIjtcbiAgICAgICAgICByZ2JhID0geyByOiBjb2xvci5yLCBnOiBjb2xvci5nLCBiOiBjb2xvci5iLCBhOiBhbHBoYSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbG9yXG4gICAgaWYgKHJnYmEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlVua25vd24gY29sb3IgcGFzc2VkIHRvIHRoZSBjb2xvclBpY2tlci4gU3VwcG9ydGVkIGFyZSBzdHJpbmdzOiByZ2IsIGhleCwgcmdiYS4gT2JqZWN0OiByZ2IgKHtyOnIsZzpnLGI6YixbYTphXX0pLiBTdXBwbGllZDogXCIgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNvbG9yKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0Q29sb3IocmdiYSwgc2V0SW5pdGlhbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgc2hvd3MgdGhlIGNvbG9yIHBpY2tlci5cbiAgICogVGhlIGh1ZSBjaXJjbGUgaXMgY29uc3RydWN0ZWQgb25jZSBhbmQgc3RvcmVkLlxuICAgKi9cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICB0aGlzLl9nZW5lcmF0ZUh1ZUNpcmNsZSgpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBSSVZBVEUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuICAvKipcbiAgICogSGlkZSB0aGUgcGlja2VyLiBJcyBjYWxsZWQgYnkgdGhlIGNhbmNlbCBidXR0b24uXG4gICAqIE9wdGlvbmFsIGJvb2xlYW4gdG8gc3RvcmUgdGhlIHByZXZpb3VzIGNvbG9yIGZvciBlYXN5IGFjY2VzcyBsYXRlciBvbi5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbc3RvcmVQcmV2aW91cz10cnVlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hpZGUoc3RvcmVQcmV2aW91cyA9IHRydWUpIHtcbiAgICAvLyBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIG5leHQgdGltZTtcbiAgICBpZiAoc3RvcmVQcmV2aW91cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5wcmV2aW91c0NvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXBwbGllZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmluaXRpYWxDb2xvcik7XG4gICAgfVxuXG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cbiAgICAvLyBjYWxsIHRoZSBjbG9zaW5nIGNhbGxiYWNrLCByZXN0b3JpbmcgdGhlIG9uY2xpY2sgbWV0aG9kLlxuICAgIC8vIHRoaXMgaXMgaW4gYSBzZXRUaW1lb3V0IGJlY2F1c2UgaXQgd2lsbCB0cmlnZ2VyIHRoZSBzaG93IGFnYWluIGJlZm9yZSB0aGUgY2xpY2sgaXMgZG9uZS5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcbiAgICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIGJvdW5kIHRvIHRoZSBzYXZlIGJ1dHRvbi4gU2F2ZXMgYW5kIGhpZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NhdmUoKSB7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLmFwcGxpZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9oaWRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQm91bmQgdG8gYXBwbHkgYnV0dG9uLiBTYXZlcyBidXQgZG9lcyBub3QgY2xvc2UuIElzIHVuZG9uZSBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hcHBseSgpIHtcbiAgICB0aGlzLmFwcGxpZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2sodGhpcy5jb2xvcik7XG4gICAgdGhpcy5fdXBkYXRlUGlja2VyKHRoaXMuY29sb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIGxvYWQgdGhlIGNvbG9yIGZyb20gdGhlIHByZXZpb3VzIHNlc3Npb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbG9hZExhc3QoKSB7XG4gICAgaWYgKHRoaXMucHJldmlvdXNDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldENvbG9yKHRoaXMucHJldmlvdXNDb2xvciwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGVydChcIlRoZXJlIGlzIG5vIGxhc3QgY29sb3IgdG8gbG9hZC4uLlwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBjb2xvciwgcGxhY2UgdGhlIHBpY2tlclxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0Q29sb3IocmdiYSwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICAvLyBzdG9yZSB0aGUgaW5pdGlhbCBjb2xvclxuICAgIGlmIChzZXRJbml0aWFsID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmluaXRpYWxDb2xvciA9IE9iamVjdC5hc3NpZ24oe30sIHJnYmEpO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuXG4gICAgY29uc3QgYW5nbGVDb252ZXJ0ID0gMiAqIE1hdGguUEk7XG4gICAgY29uc3QgcmFkaXVzID0gdGhpcy5yICogaHN2LnM7XG4gICAgY29uc3QgeCA9XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnggKyByYWRpdXMgKiBNYXRoLnNpbihhbmdsZUNvbnZlcnQgKiBoc3YuaCk7XG4gICAgY29uc3QgeSA9XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnkgKyByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZUNvbnZlcnQgKiBoc3YuaCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUubGVmdCA9XG4gICAgICB4IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudFdpZHRoICsgXCJweFwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS50b3AgPVxuICAgICAgeSAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG5cbiAgICB0aGlzLl91cGRhdGVQaWNrZXIocmdiYSk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gb3BhY2l0eSBjb250cm9sXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldE9wYWNpdHkodmFsdWUpIHtcbiAgICB0aGlzLmNvbG9yLmEgPSB2YWx1ZSAvIDEwMDtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gYnJpZ2h0bmVzcyBjb250cm9sXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldEJyaWdodG5lc3ModmFsdWUpIHtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVih0aGlzLmNvbG9yLnIsIHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iKTtcbiAgICBoc3YudiA9IHZhbHVlIC8gMTAwO1xuICAgIGNvbnN0IHJnYmEgPSBIU1ZUb1JHQihoc3YuaCwgaHN2LnMsIGhzdi52KTtcbiAgICByZ2JhW1wiYVwiXSA9IHRoaXMuY29sb3IuYTtcbiAgICB0aGlzLmNvbG9yID0gcmdiYTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGUgdGhlIGNvbG9yIHBpY2tlci4gQSBibGFjayBjaXJjbGUgb3ZlcmxheXMgdGhlIGh1ZSBjaXJjbGUgdG8gbWltaWMgdGhlIGJyaWdodG5lc3MgZGVjcmVhc2luZy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHJnYmFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVQaWNrZXIocmdiYSA9IHRoaXMuY29sb3IpIHtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVihyZ2JhLnIsIHJnYmEuZywgcmdiYS5iKTtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICBpZiAodGhpcy5waXhlbFJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBpeGVsUmF0aW8gPVxuICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAoY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHguYmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIDEpO1xuICAgIH1cbiAgICBjdHguc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcblxuICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICBjb25zdCB3ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBoID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRIZWlnaHQ7XG4gICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgIGN0eC5wdXRJbWFnZURhdGEodGhpcy5odWVDaXJjbGUsIDAsIDApO1xuICAgIGN0eC5maWxsU3R5bGUgPSBcInJnYmEoMCwwLDAsXCIgKyAoMSAtIGhzdi52KSArIFwiKVwiO1xuICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgY3R4LmZpbGwoKTtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gMTAwICogaHN2LnY7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UudmFsdWUgPSAxMDAgKiByZ2JhLmE7XG5cbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgXCJyZ2JhKFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5iICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gICAgdGhpcy5uZXdDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgXCJyZ2JhKFwiICtcbiAgICAgIHRoaXMuY29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5iICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB1c2VkIGJ5IGNyZWF0ZSB0byBzZXQgdGhlIHNpemUgb2YgdGhlIGNhbnZhcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRTaXplKCkge1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLnN0eWxlLmhlaWdodCA9IFwiMTAwJVwiO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy53aWR0aCA9IDI4OSAqIHRoaXMucGl4ZWxSYXRpbztcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmhlaWdodCA9IDI4OSAqIHRoaXMucGl4ZWxSYXRpbztcbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGUgYWxsIGRvbSBlbGVtZW50c1xuICAgKiBUT0RPOiBjbGVhbnVwLCBsb3RzIG9mIHNpbWlsYXIgZG9tIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlKCkge1xuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtY29sb3ItcGlja2VyXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGFzc05hbWUgPSBcInZpcy1zZWxlY3RvclwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlclNlbGVjdG9yKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckNhbnZhcyk7XG5cbiAgICBpZiAoIXRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dCkge1xuICAgICAgY29uc3Qgbm9DYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpO1xuICAgICAgbm9DYW52YXMuc3R5bGUuY29sb3IgPSBcInJlZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUucGFkZGluZyA9IFwiMTBweFwiO1xuICAgICAgbm9DYW52YXMuaW5uZXJUZXh0ID0gXCJFcnJvcjogeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTCBjYW52YXNcIjtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuYXBwZW5kQ2hpbGQobm9DYW52YXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzXG4gICAgICAgIC5nZXRDb250ZXh0KFwiMmRcIilcbiAgICAgICAgLnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5jbGFzc05hbWUgPSBcInZpcy1jb2xvclwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm9wYWNpdHlEaXYuY2xhc3NOYW1lID0gXCJ2aXMtb3BhY2l0eVwiO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuY2xhc3NOYW1lID0gXCJ2aXMtYnJpZ2h0bmVzc1wiO1xuXG4gICAgdGhpcy5hcnJvd0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcnJvd0Rpdi5jbGFzc05hbWUgPSBcInZpcy1hcnJvd1wiO1xuXG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLnR5cGUgPSBcInJhbmdlXCI7IC8vIE5vdCBzdXBwb3J0ZWQgb24gSUU5XG4gICAgICB0aGlzLm9wYWNpdHlSYW5nZS5taW4gPSBcIjBcIjtcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1heCA9IFwiMTAwXCI7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPOiBBZGQgc29tZSBlcnJvciBoYW5kbGluZy5cbiAgICB9XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UudmFsdWUgPSBcIjEwMFwiO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLmNsYXNzTmFtZSA9IFwidmlzLXJhbmdlXCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMub3BhY2l0eURpdi5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlSYW5nZSk7XG4gICAgdGhpcy5icmlnaHRuZXNzRGl2LmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc1JhbmdlKTtcblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRPcGFjaXR5KHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRPcGFjaXR5KHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fc2V0QnJpZ2h0bmVzcyh0aGlzLnZhbHVlKTtcbiAgICB9O1xuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fc2V0QnJpZ2h0bmVzcyh0aGlzLnZhbHVlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0xhYmVsLmNsYXNzTmFtZSA9IFwidmlzLWxhYmVsIHZpcy1icmlnaHRuZXNzXCI7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuaW5uZXJUZXh0ID0gXCJicmlnaHRuZXNzOlwiO1xuXG4gICAgdGhpcy5vcGFjaXR5TGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eUxhYmVsLmNsYXNzTmFtZSA9IFwidmlzLWxhYmVsIHZpcy1vcGFjaXR5XCI7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuaW5uZXJUZXh0ID0gXCJvcGFjaXR5OlwiO1xuXG4gICAgdGhpcy5uZXdDb2xvckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5uZXdDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1uZXctY29sb3JcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmlubmVyVGV4dCA9IFwibmV3XCI7XG5cbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuY2xhc3NOYW1lID0gXCJ2aXMtaW5pdGlhbC1jb2xvclwiO1xuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LmlubmVyVGV4dCA9IFwiaW5pdGlhbFwiO1xuXG4gICAgdGhpcy5jYW5jZWxCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtY2FuY2VsXCI7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uaW5uZXJUZXh0ID0gXCJjYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5faGlkZS5iaW5kKHRoaXMsIGZhbHNlKTtcblxuICAgIHRoaXMuYXBwbHlCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYXBwbHlCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1hcHBseVwiO1xuICAgIHRoaXMuYXBwbHlCdXR0b24uaW5uZXJUZXh0ID0gXCJhcHBseVwiO1xuICAgIHRoaXMuYXBwbHlCdXR0b24ub25jbGljayA9IHRoaXMuX2FwcGx5LmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnNhdmVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLXNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24uaW5uZXJUZXh0ID0gXCJzYXZlXCI7XG4gICAgdGhpcy5zYXZlQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9zYXZlLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmxvYWRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWxvYWRcIjtcbiAgICB0aGlzLmxvYWRCdXR0b24uaW5uZXJUZXh0ID0gXCJsb2FkIGxhc3RcIjtcbiAgICB0aGlzLmxvYWRCdXR0b24ub25jbGljayA9IHRoaXMuX2xvYWRMYXN0LmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY29sb3JQaWNrZXJEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5hcnJvd0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmJyaWdodG5lc3NMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmJyaWdodG5lc3NEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5vcGFjaXR5TGFiZWwpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5vcGFjaXR5RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubmV3Q29sb3JEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5pbml0aWFsQ29sb3JEaXYpO1xuXG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmNhbmNlbEJ1dHRvbik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFwcGx5QnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuc2F2ZUJ1dHRvbik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmxvYWRCdXR0b24pO1xuICB9XG5cbiAgLyoqXG4gICAqIGJpbmQgaGFtbWVyIHRvIHRoZSBjb2xvciBwaWNrZXJcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9iaW5kSGFtbWVyKCkge1xuICAgIHRoaXMuZHJhZyA9IHt9O1xuICAgIHRoaXMucGluY2ggPSB7fTtcbiAgICB0aGlzLmhhbW1lciA9IG5ldyBIYW1tZXIkMSh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcbiAgICB0aGlzLmhhbW1lci5nZXQoXCJwaW5jaFwiKS5zZXQoeyBlbmFibGU6IHRydWUgfSk7XG5cbiAgICB0aGlzLmhhbW1lci5vbihcImhhbW1lci5pbnB1dFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5pc0ZpcnN0KSB7XG4gICAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJ0YXBcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFuc3RhcnRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFubW92ZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5lbmRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlIHRoZSBodWUgY2lyY2xlLiBUaGlzIGlzIHJlbGF0aXZlbHkgaGVhdnkgKDIwMG1zKSBhbmQgaXMgZG9uZSBvbmx5IG9uY2Ugb24gdGhlIGZpcnN0IHRpbWUgaXQgaXMgc2hvd24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2VuZXJhdGVIdWVDaXJjbGUoKSB7XG4gICAgaWYgKHRoaXMuZ2VuZXJhdGVkID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgY3R4ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICBpZiAodGhpcy5waXhlbFJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgICAoY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICBjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICAxKTtcbiAgICAgIH1cbiAgICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgICAvLyBjbGVhciB0aGUgY2FudmFzXG4gICAgICBjb25zdCB3ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG5cbiAgICAgIC8vIGRyYXcgaHVlIGNpcmNsZVxuICAgICAgbGV0IHgsIHksIGh1ZSwgc2F0O1xuICAgICAgdGhpcy5jZW50ZXJDb29yZGluYXRlcyA9IHsgeDogdyAqIDAuNSwgeTogaCAqIDAuNSB9O1xuICAgICAgdGhpcy5yID0gMC40OSAqIHc7XG4gICAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAoMiAqIE1hdGguUEkpIC8gMzYwO1xuICAgICAgY29uc3QgaGZhYyA9IDEgLyAzNjA7XG4gICAgICBjb25zdCBzZmFjID0gMSAvIHRoaXMucjtcbiAgICAgIGxldCByZ2I7XG4gICAgICBmb3IgKGh1ZSA9IDA7IGh1ZSA8IDM2MDsgaHVlKyspIHtcbiAgICAgICAgZm9yIChzYXQgPSAwOyBzYXQgPCB0aGlzLnI7IHNhdCsrKSB7XG4gICAgICAgICAgeCA9IHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHNhdCAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGh1ZSk7XG4gICAgICAgICAgeSA9IHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHNhdCAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGh1ZSk7XG4gICAgICAgICAgcmdiID0gSFNWVG9SR0IoaHVlICogaGZhYywgc2F0ICogc2ZhYywgMSk7XG4gICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiKFwiICsgcmdiLnIgKyBcIixcIiArIHJnYi5nICsgXCIsXCIgKyByZ2IuYiArIFwiKVwiO1xuICAgICAgICAgIGN0eC5maWxsUmVjdCh4IC0gMC41LCB5IC0gMC41LCAyLCAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCJyZ2JhKDAsMCwwLDEpXCI7XG4gICAgICBjdHguY2lyY2xlKHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCwgdGhpcy5jZW50ZXJDb29yZGluYXRlcy55LCB0aGlzLnIpO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICB0aGlzLmh1ZUNpcmNsZSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgdywgaCk7XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtb3ZlIHRoZSBzZWxlY3Rvci4gVGhpcyBpcyBjYWxsZWQgYnkgaGFtbWVyIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbW92ZVNlbGVjdG9yKGV2ZW50KSB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuY29sb3JQaWNrZXJEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbGVmdCA9IGV2ZW50LmNlbnRlci54IC0gcmVjdC5sZWZ0O1xuICAgIGNvbnN0IHRvcCA9IGV2ZW50LmNlbnRlci55IC0gcmVjdC50b3A7XG5cbiAgICBjb25zdCBjZW50ZXJZID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgY2VudGVyWCA9IDAuNSAqIHRoaXMuY29sb3JQaWNrZXJEaXYuY2xpZW50V2lkdGg7XG5cbiAgICBjb25zdCB4ID0gbGVmdCAtIGNlbnRlclg7XG4gICAgY29uc3QgeSA9IHRvcCAtIGNlbnRlclk7XG5cbiAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIoeCwgeSk7XG4gICAgY29uc3QgcmFkaXVzID0gMC45OCAqIE1hdGgubWluKE1hdGguc3FydCh4ICogeCArIHkgKiB5KSwgY2VudGVyWCk7XG5cbiAgICBjb25zdCBuZXdUb3AgPSBNYXRoLmNvcyhhbmdsZSkgKiByYWRpdXMgKyBjZW50ZXJZO1xuICAgIGNvbnN0IG5ld0xlZnQgPSBNYXRoLnNpbihhbmdsZSkgKiByYWRpdXMgKyBjZW50ZXJYO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICBuZXdUb3AgLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50SGVpZ2h0ICsgXCJweFwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIG5ld0xlZnQgLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBsZXQgaCA9IGFuZ2xlIC8gKDIgKiBNYXRoLlBJKTtcbiAgICBoID0gaCA8IDAgPyBoICsgMSA6IGg7XG4gICAgY29uc3QgcyA9IHJhZGl1cyAvIHRoaXMucjtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVih0aGlzLmNvbG9yLnIsIHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iKTtcbiAgICBoc3YuaCA9IGg7XG4gICAgaHN2LnMgPSBzO1xuICAgIGNvbnN0IHJnYmEgPSBIU1ZUb1JHQihoc3YuaCwgaHN2LnMsIGhzdi52KTtcbiAgICByZ2JhW1wiYVwiXSA9IHRoaXMuY29sb3IuYTtcbiAgICB0aGlzLmNvbG9yID0gcmdiYTtcblxuICAgIC8vIHVwZGF0ZSBwcmV2aWV3c1xuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG59O1xuXG4vKipcbiAqIFdyYXAgZ2l2ZW4gdGV4dCAobGFzdCBhcmd1bWVudCkgaW4gSFRNTCBlbGVtZW50cyAoYWxsIHByZWNlZGluZyBhcmd1bWVudHMpLlxuICpcbiAqIEBwYXJhbSB7Li4uYW55fSByZXN0IC0gTGlzdCBvZiB0YWcgbmFtZXMgZm9sbG93ZWQgYnkgaW5uZXIgdGV4dC5cbiAqIEByZXR1cm5zIEFuIGVsZW1lbnQgb3IgYSB0ZXh0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHdyYXBJblRhZyguLi5yZXN0KSB7XG4gIGlmIChyZXN0Lmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMuXCIpO1xuICB9IGVsc2UgaWYgKHJlc3QubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlc3RbMF0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJlc3RbMF0pO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQod3JhcEluVGFnKC4uLnJlc3Quc2xpY2UoMSkpKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB3YXkgdGhpcyB3b3JrcyBpcyBmb3IgYWxsIHByb3BlcnRpZXMgb2YgdGhpcy5wb3NzaWJsZSBvcHRpb25zLCB5b3UgY2FuIHN1cHBseSB0aGUgcHJvcGVydHkgbmFtZSBpbiBhbnkgZm9ybSB0byBsaXN0IHRoZSBvcHRpb25zLlxuICogQm9vbGVhbiBvcHRpb25zIGFyZSByZWNvZ25pc2VkIGFzIEJvb2xlYW5cbiAqIE51bWJlciBvcHRpb25zIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbZGVmYXVsdCB2YWx1ZSwgbWluIHZhbHVlLCBtYXggdmFsdWUsIHN0ZXBzaXplXVxuICogQ29sb3JzIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbJ2NvbG9yJywgJyNmZmZmZmYnXVxuICogU3RyaW5ncyB3aXRoIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbb3B0aW9uMSwgb3B0aW9uMiwgb3B0aW9uMywgLi5dXG4gKlxuICogVGhlIG9wdGlvbnMgYXJlIG1hdGNoZWQgd2l0aCB0aGVpciBjb3VudGVycGFydHMgaW4gZWFjaCBvZiB0aGUgbW9kdWxlcyBhbmQgdGhlIHZhbHVlcyB1c2VkIGluIHRoZSBjb25maWd1cmF0aW9uIGFyZVxuICovXG5sZXQgQ29uZmlndXJhdG9yJDEgPSBjbGFzcyBDb25maWd1cmF0b3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudE1vZHVsZSAgICAgICAgfCB0aGUgbG9jYXRpb24gd2hlcmUgcGFyZW50TW9kdWxlLnNldE9wdGlvbnMoKSBjYW4gYmUgY2FsbGVkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0Q29udGFpbmVyICAgIHwgdGhlIGRlZmF1bHQgY29udGFpbmVyIG9mIHRoZSBtb2R1bGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ3VyZU9wdGlvbnMgICAgfCB0aGUgZnVsbHkgY29uZmlndXJlZCBhbmQgcHJlZGVmaW5lZCBvcHRpb25zIHNldCBmb3VuZCBpbiBhbGxPcHRpb25zLmpzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaXhlbFJhdGlvICAgICAgICAgIHwgY2FudmFzIHBpeGVsIHJhdGlvXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhpZGVPcHRpb24gICAgICAgIHwgY3VzdG9tIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGhpZGUgb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50TW9kdWxlLFxuICAgIGRlZmF1bHRDb250YWluZXIsXG4gICAgY29uZmlndXJlT3B0aW9ucyxcbiAgICBwaXhlbFJhdGlvID0gMSxcbiAgICBoaWRlT3B0aW9uID0gKCkgPT4gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnRNb2R1bGU7XG4gICAgdGhpcy5jaGFuZ2VkT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuY29udGFpbmVyID0gZGVmYXVsdENvbnRhaW5lcjtcbiAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmhpZGVPcHRpb24gPSBoaWRlT3B0aW9uO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMucG9wdXBDb3VudGVyID0gMDtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBmaWx0ZXI6IHRydWUsXG4gICAgICBjb250YWluZXI6IHVuZGVmaW5lZCxcbiAgICAgIHNob3dCdXR0b246IHRydWUsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmNvbmZpZ3VyZU9wdGlvbnMgPSBjb25maWd1cmVPcHRpb25zO1xuICAgIHRoaXMubW9kdWxlT3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcbiAgICB0aGlzLnBvcHVwRGl2ID0ge307XG4gICAgdGhpcy5wb3B1cExpbWl0ID0gNTtcbiAgICB0aGlzLnBvcHVwSGlzdG9yeSA9IHt9O1xuICAgIHRoaXMuY29sb3JQaWNrZXIgPSBuZXcgQ29sb3JQaWNrZXIkMShwaXhlbFJhdGlvKTtcbiAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogcmVmcmVzaCBhbGwgb3B0aW9ucy5cbiAgICogQmVjYXVzZSBhbGwgbW9kdWxlcyBwYXJzZSB0aGVpciBvcHRpb25zIGJ5IHRoZW1zZWx2ZXMsIHdlIGp1c3QgdXNlIHRoZWlyIG9wdGlvbnMuIFdlIGNvcHkgdGhlbSBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmVzZXQgdGhlIHBvcHVwIGhpc3RvcnkgYmVjYXVzZSB0aGUgaW5kaWNlcyBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQuXG4gICAgICB0aGlzLnBvcHVwSGlzdG9yeSA9IHt9O1xuICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcblxuICAgICAgbGV0IGVuYWJsZWQgPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zLmpvaW4oKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb25zIGNhbm5vdCBiZSBudWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnNob3dCdXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93QnV0dG9uID0gb3B0aW9ucy5zaG93QnV0dG9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSB0cnVlO1xuICAgICAgICBlbmFibGVkID0gb3B0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucztcbiAgICAgICAgZW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgfVxuICAgIHRoaXMuX2NsZWFuKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG1vZHVsZU9wdGlvbnNcbiAgICovXG4gIHNldE1vZHVsZU9wdGlvbnMobW9kdWxlT3B0aW9ucykge1xuICAgIHRoaXMubW9kdWxlT3B0aW9ucyA9IG1vZHVsZU9wdGlvbnM7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLl9jbGVhbigpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMub3B0aW9ucy5jb250YWluZXI7XG4gICAgICB9XG4gICAgICB0aGlzLl9jcmVhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG5cbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCBjb3VudGVyID0gMDtcbiAgICBsZXQgc2hvdyA9IGZhbHNlO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIGluIHRoaXMuY29uZmlndXJlT3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnMsIG9wdGlvbikpIHtcbiAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgIHNob3cgPSBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIob3B0aW9uLCBbXSk7XG4gICAgICAgICAgc2hvdyA9XG4gICAgICAgICAgICBzaG93IHx8XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIgPT09IHRydWUgfHwgZmlsdGVyLmluZGV4T2Yob3B0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICBzaG93ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IHRydWU7XG5cbiAgICAgICAgICAvLyBsaW5lYnJlYWsgYmV0d2VlbiBjYXRlZ29yaWVzXG4gICAgICAgICAgaWYgKGNvdW50ZXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShbXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGEgaGVhZGVyIGZvciB0aGUgY2F0ZWdvcnlcbiAgICAgICAgICB0aGlzLl9tYWtlSGVhZGVyKG9wdGlvbik7XG5cbiAgICAgICAgICAvLyBnZXQgdGhlIHN1YiBvcHRpb25zXG4gICAgICAgICAgdGhpcy5faGFuZGxlT2JqZWN0KHRoaXMuY29uZmlndXJlT3B0aW9uc1tvcHRpb25dLCBbb3B0aW9uXSk7XG4gICAgICAgIH1cbiAgICAgICAgY291bnRlcisrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9tYWtlQnV0dG9uKCk7XG4gICAgdGhpcy5fcHVzaCgpO1xuICAgIC8vfiB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKHRoaXMuY29udGFpbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBkcmF3IGFsbCBET00gZWxlbWVudHMgb24gdGhlIHNjcmVlblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3B1c2goKSB7XG4gICAgdGhpcy53cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLndyYXBwZXIuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi13cmFwcGVyXCI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy53cmFwcGVyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zaG93UG9wdXBJZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBhbGwgRE9NIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndyYXBwZXIucmVtb3ZlQ2hpbGQodGhpcy5kb21FbGVtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud3JhcHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgICAgdGhpcy53cmFwcGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmRvbUVsZW1lbnRzID0gW107XG5cbiAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgYWN0dWFsT3B0aW9ucyBpZiBpdCBleGlzdHNcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFZhbHVlKHBhdGgpIHtcbiAgICBsZXQgYmFzZSA9IHRoaXMubW9kdWxlT3B0aW9ucztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChiYXNlW3BhdGhbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYmFzZSA9IGJhc2VbcGF0aFtpXV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cblxuICAvKipcbiAgICogYWxsIG9wdGlvbiBlbGVtZW50cyBhcmUgd3JhcHBlZCBpbiBhbiBpdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge0FycmF5LjxFbGVtZW50Pn0gZG9tRWxlbWVudHNcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlSXRlbShwYXRoLCAuLi5kb21FbGVtZW50cykge1xuICAgIGlmICh0aGlzLmFsbG93Q3JlYXRpb24gPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgaXRlbS5jbGFzc05hbWUgPVxuICAgICAgICBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctaXRlbSB2aXMtY29uZmlnLXNcIiArIHBhdGgubGVuZ3RoO1xuICAgICAgZG9tRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIGhlYWRlciBmb3IgbWFqb3Igc3ViamVjdHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlSGVhZGVyKG5hbWUpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctaGVhZGVyXCI7XG4gICAgZGl2LmlubmVyVGV4dCA9IG5hbWU7XG4gICAgdGhpcy5fbWFrZUl0ZW0oW10sIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGxhYmVsLCBpZiBpdCBpcyBhbiBvYmplY3QgbGFiZWwsIGl0IGdldHMgZGlmZmVyZW50IHN0eWxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2JqZWN0TGFiZWxcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VMYWJlbChuYW1lLCBwYXRoLCBvYmplY3RMYWJlbCA9IGZhbHNlKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkaXYuY2xhc3NOYW1lID1cbiAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1sYWJlbCB2aXMtY29uZmlnLXNcIiArIHBhdGgubGVuZ3RoO1xuICAgIGlmIChvYmplY3RMYWJlbCA9PT0gdHJ1ZSkge1xuICAgICAgd2hpbGUgKGRpdi5maXJzdENoaWxkKSB7XG4gICAgICAgIGRpdi5yZW1vdmVDaGlsZChkaXYuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICBkaXYuYXBwZW5kQ2hpbGQod3JhcEluVGFnKFwiaVwiLCBcImJcIiwgbmFtZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZSArIFwiOlwiO1xuICAgIH1cbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBkcm9wZG93biBsaXN0IGZvciBtdWx0aXBsZSBwb3NzaWJsZSBzdHJpbmcgb3B0b2luc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VEcm9wZG93bihhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKTtcbiAgICBzZWxlY3QuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXNlbGVjdFwiO1xuICAgIGxldCBzZWxlY3RlZFZhbHVlID0gMDtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGFyci5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGFyci5pbmRleE9mKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcbiAgICAgIG9wdGlvbi52YWx1ZSA9IGFycltpXTtcbiAgICAgIGlmIChpID09PSBzZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IFwic2VsZWN0ZWRcIjtcbiAgICAgIH1cbiAgICAgIG9wdGlvbi5pbm5lclRleHQgPSBhcnJbaV07XG4gICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgc2VsZWN0Lm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3VwZGF0ZSh0aGlzLnZhbHVlLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgc2VsZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgcmFuZ2Ugb2JqZWN0IGZvciBudW1lcmljIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYXJyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGFyclswXTtcbiAgICBjb25zdCBtaW4gPSBhcnJbMV07XG4gICAgY29uc3QgbWF4ID0gYXJyWzJdO1xuICAgIGNvbnN0IHN0ZXAgPSBhcnJbM107XG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgcmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlXCI7XG4gICAgdHJ5IHtcbiAgICAgIHJhbmdlLnR5cGUgPSBcInJhbmdlXCI7IC8vIG5vdCBzdXBwb3J0ZWQgb24gSUU5XG4gICAgICByYW5nZS5taW4gPSBtaW47XG4gICAgICByYW5nZS5tYXggPSBtYXg7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPOiBBZGQgc29tZSBlcnJvciBoYW5kbGluZy5cbiAgICB9XG4gICAgcmFuZ2Uuc3RlcCA9IHN0ZXA7XG5cbiAgICAvLyBzZXQgdXAgdGhlIHBvcHVwIHNldHRpbmdzIGluIGNhc2UgdGhleSBhcmUgbmVlZGVkLlxuICAgIGxldCBwb3B1cFN0cmluZyA9IFwiXCI7XG4gICAgbGV0IHBvcHVwVmFsdWUgPSAwO1xuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZhY3RvciA9IDEuMjtcbiAgICAgIGlmICh2YWx1ZSA8IDAgJiYgdmFsdWUgKiBmYWN0b3IgPCBtaW4pIHtcbiAgICAgICAgcmFuZ2UubWluID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1pbjtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAvIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgLyBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgKiBmYWN0b3IgPiBtYXggJiYgbWF4ICE9PSAxKSB7XG4gICAgICAgIHJhbmdlLm1heCA9IE1hdGguY2VpbCh2YWx1ZSAqIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5tYXg7XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIHJhbmdlLnZhbHVlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGlucHV0LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1yYW5nZWlucHV0XCI7XG4gICAgaW5wdXQudmFsdWUgPSByYW5nZS52YWx1ZTtcblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICByYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIG1lLl91cGRhdGUoTnVtYmVyKHRoaXMudmFsdWUpLCBwYXRoKTtcbiAgICB9O1xuICAgIHJhbmdlLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIHJhbmdlLCBpbnB1dCk7XG5cbiAgICAvLyBpZiBhIHBvcHVwIGlzIG5lZWRlZCBBTkQgaXQgaGFzIG5vdCBiZWVuIHNob3duIGZvciB0aGlzIHZhbHVlLCBzaG93IGl0LlxuICAgIGlmIChwb3B1cFN0cmluZyAhPT0gXCJcIiAmJiB0aGlzLnBvcHVwSGlzdG9yeVtpdGVtSW5kZXhdICE9PSBwb3B1cFZhbHVlKSB7XG4gICAgICB0aGlzLnBvcHVwSGlzdG9yeVtpdGVtSW5kZXhdID0gcG9wdXBWYWx1ZTtcbiAgICAgIHRoaXMuX3NldHVwUG9wdXAocG9wdXBTdHJpbmcsIGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBidXR0b24gb2JqZWN0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUJ1dHRvbigpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNob3dCdXR0b24gPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGdlbmVyYXRlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLmlubmVyVGV4dCA9IFwiZ2VuZXJhdGUgb3B0aW9uc1wiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24ub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcHJpbnRPcHRpb25zKCk7XG4gICAgICB9O1xuICAgICAgZ2VuZXJhdGVCdXR0b24ub25tb3VzZW92ZXIgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b24gaG92ZXJcIjtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3V0ID0gKCkgPT4ge1xuICAgICAgICBnZW5lcmF0ZUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctYnV0dG9uXCI7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5vcHRpb25zQ29udGFpbmVyLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1vcHRpb24tY29udGFpbmVyXCI7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaCh0aGlzLm9wdGlvbnNDb250YWluZXIpO1xuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKGdlbmVyYXRlQnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcHJlcGFyZSB0aGUgcG9wdXBcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXR1cFBvcHVwKHN0cmluZywgaW5kZXgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmluaXRpYWxpemVkID09PSB0cnVlICYmXG4gICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPT09IHRydWUgJiZcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyIDwgdGhpcy5wb3B1cExpbWl0XG4gICAgKSB7XG4gICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZGl2LmlkID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24tcG9wdXBcIjtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBzdHJpbmc7XG4gICAgICBkaXYub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnBvcHVwQ291bnRlciArPSAxO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHsgaHRtbDogZGl2LCBpbmRleDogaW5kZXggfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcmVtb3ZlIHRoZSBwb3B1cCBmcm9tIHRoZSBkb21cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVQb3B1cCgpIHtcbiAgICBpZiAodGhpcy5wb3B1cERpdi5odG1sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9wdXBEaXYuaHRtbCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cERpdi5kZWxldGVUaW1lb3V0KTtcbiAgICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgaWYgaXQgaXMgbmVlZGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Nob3dQb3B1cElmTmVlZGVkKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29ycmVzcG9uZGluZ0VsZW1lbnQgPSB0aGlzLmRvbUVsZW1lbnRzW3RoaXMucG9wdXBEaXYuaW5kZXhdO1xuICAgICAgY29uc3QgcmVjdCA9IGNvcnJlc3BvbmRpbmdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyBcInB4XCI7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUudG9wID0gcmVjdC50b3AgLSAzMCArIFwicHhcIjsgLy8gMzAgaXMgdGhlIGhlaWdodDtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuaGlkZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgICAgfSwgMTUwMCk7XG4gICAgICB0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcbiAgICAgIH0sIDE4MDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY2hlY2tib3ggZm9yIGJvb2xlYW4gb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNoZWNrYm94KGRlZmF1bHRWYWx1ZSwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBjaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBjaGVja2JveC50eXBlID0gXCJjaGVja2JveFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jaGVja2JveFwiO1xuICAgIGNoZWNrYm94LmNoZWNrZWQgPSBkZWZhdWx0VmFsdWU7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY2hlY2tib3gub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMuY2hlY2tlZCwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgdGV4dCBpbnB1dCBmaWVsZCBmb3Igc3RyaW5nIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWZhdWx0VmFsdWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VUZXh0SW5wdXQoZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcInRleHRcIjtcbiAgICBjaGVja2JveC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctdGV4dFwiO1xuICAgIGNoZWNrYm94LnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY2hlY2tib3gub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBjaGVja2JveCk7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGNvbG9yIGZpZWxkIHdpdGggYSBjb2xvciBwaWNrZXIgZm9yIGNvbG9yIGZpZWxkc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VDb2xvckZpZWxkKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29sb3IgPSBhcnJbMV07XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBkZWZhdWx0Q29sb3IgOiB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAhPT0gXCJub25lXCIpIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9ja1wiO1xuICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNvbG9yQmxvY2sgbm9uZVwiO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBkaXYpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgdGhlIGNvbG9yIGJ1dHRvbnMgdG8gY2FsbCB0aGUgY29sb3IgcGlja2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZGl2XG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKSB7XG4gICAgLy8gY2xlYXIgdGhlIGNhbGxiYWNrIGZyb20gdGhpcyBkaXZcbiAgICBkaXYub25jbGljayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgdGhpcy5jb2xvclBpY2tlci5pbnNlcnRUbyhkaXYpO1xuICAgIHRoaXMuY29sb3JQaWNrZXIuc2hvdygpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRDb2xvcih2YWx1ZSk7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRVcGRhdGVDYWxsYmFjaygoY29sb3IpID0+IHtcbiAgICAgIGNvbnN0IGNvbG9yU3RyaW5nID1cbiAgICAgICAgXCJyZ2JhKFwiICsgY29sb3IuciArIFwiLFwiICsgY29sb3IuZyArIFwiLFwiICsgY29sb3IuYiArIFwiLFwiICsgY29sb3IuYSArIFwiKVwiO1xuICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yU3RyaW5nO1xuICAgICAgdGhpcy5fdXBkYXRlKGNvbG9yU3RyaW5nLCBwYXRoKTtcbiAgICB9KTtcblxuICAgIC8vIG9uIGNsb3NlIG9mIHRoZSBjb2xvcnBpY2tlciwgcmVzdG9yZSB0aGUgY2FsbGJhY2suXG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRDbG9zZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHBhcnNlIGFuIG9iamVjdCBhbmQgZHJhdyB0aGUgY29ycmVjdCBpdGVtc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtwYXRoPVtdXSAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrT25seT1mYWxzZV1cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGFuZGxlT2JqZWN0KG9iaiwgcGF0aCA9IFtdLCBjaGVja09ubHkgPSBmYWxzZSkge1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5vcHRpb25zLmZpbHRlcjtcbiAgICBsZXQgdmlzaWJsZUluU2V0ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBzdWJPYmogaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgc3ViT2JqKSkge1xuICAgICAgICBzaG93ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaXRlbSA9IG9ialtzdWJPYmpdO1xuICAgICAgICBjb25zdCBuZXdQYXRoID0gY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIHN1Yk9iaik7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBzaG93ID0gZmlsdGVyKHN1Yk9iaiwgcGF0aCk7XG5cbiAgICAgICAgICAvLyBpZiBuZWVkZWQgd2UgbXVzdCBnbyBkZWVwZXIgaW50byB0aGUgb2JqZWN0LlxuICAgICAgICAgIGlmIChzaG93ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShpdGVtKSAmJlxuICAgICAgICAgICAgICB0eXBlb2YgaXRlbSAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICB0eXBlb2YgaXRlbSAhPT0gXCJib29sZWFuXCIgJiZcbiAgICAgICAgICAgICAgaXRlbSBpbnN0YW5jZW9mIE9iamVjdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICBzaG93ID0gdGhpcy5faGFuZGxlT2JqZWN0KGl0ZW0sIG5ld1BhdGgsIHRydWUpO1xuICAgICAgICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBjaGVja09ubHkgPT09IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHZpc2libGVJblNldCA9IHRydWU7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZShuZXdQYXRoKTtcblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBcnJheShpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZVRleHRJbnB1dChpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VDaGVja2JveChpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBza2lwIHRoZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBlbmFibGVkXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGlkZU9wdGlvbihwYXRoLCBzdWJPYmosIHRoaXMubW9kdWxlT3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgLy8gaW5pdGlhbGx5IGNvbGxhcHNlIG9wdGlvbnMgd2l0aCBhbiBkaXNhYmxlZCBlbmFibGVkIG9wdGlvbi5cbiAgICAgICAgICAgICAgaWYgKGl0ZW0uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFBhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkobmV3UGF0aCwgXCJlbmFibGVkXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuYWJsZWRWYWx1ZSA9IHRoaXMuX2dldFZhbHVlKGVuYWJsZWRQYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZFZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChzdWJPYmosIG5ld1BhdGgsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUl0ZW0obmV3UGF0aCwgbGFiZWwpO1xuICAgICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlT2JqZWN0KGl0ZW0sIG5ld1BhdGgpIHx8IHZpc2libGVJblNldDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIGVuYWJsZWRWYWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFrZUl0ZW0obmV3UGF0aCwgbGFiZWwpO1xuICAgICAgICAgICAgICAgIHZpc2libGVJblNldCA9XG4gICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJkb250IGtub3cgaG93IHRvIGhhbmRsZVwiLCBpdGVtLCBzdWJPYmosIG5ld1BhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZUluU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSB0aGUgYXJyYXkgdHlwZSBvZiBvcHRpb25cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYXJyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVBcnJheShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHR5cGVvZiBhcnJbMF0gPT09IFwic3RyaW5nXCIgJiYgYXJyWzBdID09PSBcImNvbG9yXCIpIHtcbiAgICAgIHRoaXMuX21ha2VDb2xvckZpZWxkKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclsxXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5fbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclswXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdGhpcy5fbWFrZVJhbmdlKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclswXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IE51bWJlcih2YWx1ZSkgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxlZCB0byB1cGRhdGUgdGhlIG5ldHdvcmsgd2l0aCB0aGUgbmV3IHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlKHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2NvbnN0cnVjdE9wdGlvbnModmFsdWUsIHBhdGgpO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5wYXJlbnQuYm9keSAmJlxuICAgICAgdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdFxuICAgICkge1xuICAgICAgdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyLmVtaXQoXCJjb25maWdDaGFuZ2VcIiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMucGFyZW50LnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBib29sZWFufSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBwYXJhbSB7e319IG9wdGlvbnNPYmpcbiAgICogQHJldHVybnMge3t9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbnN0cnVjdE9wdGlvbnModmFsdWUsIHBhdGgsIG9wdGlvbnNPYmogPSB7fSkge1xuICAgIGxldCBwb2ludGVyID0gb3B0aW9uc09iajtcblxuICAgIC8vIHdoZW4gZHJvcGRvd24gYm94ZXMgY2FuIGJlIHN0cmluZyBvciBib29sZWFuLCB3ZSB0eXBlY2FzdCBpdCBpbnRvIGNvcnJlY3QgdHlwZXNcbiAgICB2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiA/IHRydWUgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHZhbHVlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGF0aFtpXSAhPT0gXCJnbG9iYWxcIikge1xuICAgICAgICBpZiAocG9pbnRlcltwYXRoW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcG9pbnRlcltwYXRoW2ldXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpICE9PSBwYXRoLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBwb2ludGVyID0gcG9pbnRlcltwYXRoW2ldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnNPYmo7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcmludE9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuXG4gICAgd2hpbGUgKHRoaXMub3B0aW9uc0NvbnRhaW5lci5maXJzdENoaWxkKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuYXBwZW5kQ2hpbGQoXG4gICAgICB3cmFwSW5UYWcoXCJwcmVcIiwgXCJjb25zdCBvcHRpb25zID0gXCIgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zLCBudWxsLCAyKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHt7fX0gb3B0aW9uc1xuICAgKi9cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoYW5nZWRPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLl9jb25zdHJ1Y3RPcHRpb25zKFxuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zW2ldLnZhbHVlLFxuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zW2ldLnBhdGgsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG59O1xuXG4vKipcbiAqIFBvcHVwIGlzIGEgY2xhc3MgdG8gY3JlYXRlIGEgcG9wdXAgd2luZG93IHdpdGggc29tZSB0ZXh0XG4gKi9cbmxldCBQb3B1cCQxID0gY2xhc3MgUG9wdXAge1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXIgICAgICAgVGhlIGNvbnRhaW5lciBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgb3ZlcmZsb3dNZXRob2QgIEhvdyB0aGUgcG9wdXAgc2hvdWxkIGFjdCB0byBvdmVyZmxvd2luZyAoJ2ZsaXAnIG9yICdjYXAnKVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCBvdmVyZmxvd01ldGhvZCkge1xuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMub3ZlcmZsb3dNZXRob2QgPSBvdmVyZmxvd01ldGhvZCB8fCBcImNhcFwiO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xuICAgIHRoaXMucGFkZGluZyA9IDU7XG4gICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgZnJhbWVcbiAgICB0aGlzLmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmZyYW1lLmNsYXNzTmFtZSA9IFwidmlzLXRvb2x0aXBcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCAgIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKiBAcGFyYW0ge251bWJlcn0geSAgIFZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIHNldFBvc2l0aW9uKHgsIHkpIHtcbiAgICB0aGlzLnggPSBwYXJzZUludCh4KTtcbiAgICB0aGlzLnkgPSBwYXJzZUludCh5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbnRlbnQgZm9yIHRoZSBwb3B1cCB3aW5kb3cuIFRoaXMgY2FuIGJlIEhUTUwgY29kZSBvciB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEVsZW1lbnR9IGNvbnRlbnRcbiAgICovXG4gIHNldFRleHQoY29udGVudCkge1xuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgd2hpbGUgKHRoaXMuZnJhbWUuZmlyc3RDaGlsZCkge1xuICAgICAgICB0aGlzLmZyYW1lLnJlbW92ZUNoaWxkKHRoaXMuZnJhbWUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdHJpbmcgY29udGFpbmluZyBsaXRlcmFsIHRleHQsIGVsZW1lbnQgaGFzIHRvIGJlIHVzZWQgZm9yIEhUTUwgZHVlIHRvXG4gICAgICAvLyBYU1Mgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGlubmVySFRNTCAoaS5lLiBwcmV2ZW50IFhTUyBieSBhY2NpZGVudCkuXG4gICAgICB0aGlzLmZyYW1lLmlubmVyVGV4dCA9IGNvbnRlbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIHBvcHVwIHdpbmRvd1xuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkb1Nob3ddICAgIFNob3cgb3IgaGlkZSB0aGUgd2luZG93XG4gICAqL1xuICBzaG93KGRvU2hvdykge1xuICAgIGlmIChkb1Nob3cgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZG9TaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZG9TaG93ID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmZyYW1lLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5mcmFtZS5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZnJhbWUucGFyZW50Tm9kZS5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuZnJhbWUucGFyZW50Tm9kZS5jbGllbnRXaWR0aDtcblxuICAgICAgbGV0IGxlZnQgPSAwLFxuICAgICAgICB0b3AgPSAwO1xuXG4gICAgICBpZiAodGhpcy5vdmVyZmxvd01ldGhvZCA9PSBcImZsaXBcIikge1xuICAgICAgICBsZXQgaXNMZWZ0ID0gZmFsc2UsXG4gICAgICAgICAgaXNUb3AgPSB0cnVlOyAvLyBXaGVyZSBhcm91bmQgdGhlIHBvc2l0aW9uIGl0J3MgbG9jYXRlZFxuXG4gICAgICAgIGlmICh0aGlzLnkgLSBoZWlnaHQgPCB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICBpc1RvcCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMueCArIHdpZHRoID4gbWF4V2lkdGggLSB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICBpc0xlZnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTGVmdCkge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLnggLSB3aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZWZ0ID0gdGhpcy54O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVG9wKSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55IC0gaGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvcCA9IHRoaXMueTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gdGhpcy55IC0gaGVpZ2h0O1xuICAgICAgICBpZiAodG9wICsgaGVpZ2h0ICsgdGhpcy5wYWRkaW5nID4gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgdG9wID0gbWF4SGVpZ2h0IC0gaGVpZ2h0IC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3AgPCB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBsZWZ0ID0gdGhpcy54O1xuICAgICAgICBpZiAobGVmdCArIHdpZHRoICsgdGhpcy5wYWRkaW5nID4gbWF4V2lkdGgpIHtcbiAgICAgICAgICBsZWZ0ID0gbWF4V2lkdGggLSB3aWR0aCAtIHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVmdCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS5sZWZ0ID0gbGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gdG9wICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG4gICAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGlkZSB0aGUgcG9wdXAgd2luZG93XG4gICAqL1xuICBoaWRlKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICB0aGlzLmZyYW1lLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5mcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZnJhbWUpOyAvLyBSZW1vdmUgZWxlbWVudCBmcm9tIERPTVxuICB9XG59O1xuXG5sZXQgZXJyb3JGb3VuZCA9IGZhbHNlO1xubGV0IGFsbE9wdGlvbnM7XG5cbmNvbnN0IFZBTElEQVRPUl9QUklOVF9TVFlMRSQxID0gXCJiYWNrZ3JvdW5kOiAjRkZlZWVlOyBjb2xvcjogI2RkMDAwMFwiO1xuXG4vKipcbiAqICBVc2VkIHRvIHZhbGlkYXRlIG9wdGlvbnMuXG4gKi9cbmxldCBWYWxpZGF0b3IkMSA9IGNsYXNzIFZhbGlkYXRvciB7XG4gIC8qKlxuICAgKiBNYWluIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gcmVmZXJlbmNlT3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gc3ViT2JqZWN0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGUob3B0aW9ucywgcmVmZXJlbmNlT3B0aW9ucywgc3ViT2JqZWN0KSB7XG4gICAgZXJyb3JGb3VuZCA9IGZhbHNlO1xuICAgIGFsbE9wdGlvbnMgPSByZWZlcmVuY2VPcHRpb25zO1xuICAgIGxldCB1c2VkT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgaWYgKHN1Yk9iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1c2VkT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnNbc3ViT2JqZWN0XTtcbiAgICB9XG4gICAgVmFsaWRhdG9yLnBhcnNlKG9wdGlvbnMsIHVzZWRPcHRpb25zLCBbXSk7XG4gICAgcmV0dXJuIGVycm9yRm91bmQ7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCB0cmF2ZXJzZSBhbiBvYmplY3QgcmVjdXJzaXZlbHkgYW5kIGNoZWNrIGV2ZXJ5IHZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcGFyc2Uob3B0aW9ucywgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCkge1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICBWYWxpZGF0b3IuY2hlY2sob3B0aW9uLCBvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZXZlcnkgdmFsdWUuIElmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QsIGNhbGwgdGhlIHBhcnNlIGZ1bmN0aW9uIG9uIHRoYXQgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgY2hlY2sob3B0aW9uLCBvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgaWYgKFxuICAgICAgcmVmZXJlbmNlT3B0aW9uc1tvcHRpb25dID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMuX19hbnlfXyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBWYWxpZGF0b3IuZ2V0U3VnZ2VzdGlvbihvcHRpb24sIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZWZlcmVuY2VPcHRpb24gPSBvcHRpb247XG4gICAgbGV0IGlzX29iamVjdCA9IHRydWU7XG5cbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgb25seSB0cmlnZ2VycyBpZiB0aGUgX19hbnlfXyBpcyBpbiB0aGUgdG9wIGxldmVsIG9mIHRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgIC8vICAgICAgIFRIQVQnUyBBIFJFQUxMWSBCQUQgUExBQ0UgVE8gQUxMT1cgSVQhISEhXG4gICAgICAvLyBUT0RPOiBFeGFtaW5lIGlmIG5lZWRlZCwgcmVtb3ZlIGlmIHBvc3NpYmxlXG5cbiAgICAgIC8vIF9fYW55X18gaXMgYSB3aWxkY2FyZC4gQW55IHZhbHVlIGlzIGFjY2VwdGVkIGFuZCB3aWxsIGJlIGZ1cnRoZXIgYW5hbHlzZWQgYnkgcmVmZXJlbmNlLlxuICAgICAgcmVmZXJlbmNlT3B0aW9uID0gXCJfX2FueV9fXCI7XG5cbiAgICAgIC8vIGlmIHRoZSBhbnktc3ViZ3JvdXAgaXMgbm90IGEgcHJlZGVmaW5lZCBvYmplY3QgaW4gdGhlIGNvbmZpZ3VyYXRvcixcbiAgICAgIC8vIHdlIGRvIG5vdCBsb29rIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICBpc19vYmplY3QgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pID09PSBcIm9iamVjdFwiO1xuICAgIH1cblxuICAgIGxldCByZWZPcHRpb25PYmogPSByZWZlcmVuY2VPcHRpb25zW3JlZmVyZW5jZU9wdGlvbl07XG4gICAgaWYgKGlzX29iamVjdCAmJiByZWZPcHRpb25PYmouX190eXBlX18gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVmT3B0aW9uT2JqID0gcmVmT3B0aW9uT2JqLl9fdHlwZV9fO1xuICAgIH1cblxuICAgIFZhbGlkYXRvci5jaGVja0ZpZWxkcyhcbiAgICAgIG9wdGlvbixcbiAgICAgIG9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb25zLFxuICAgICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgICAgcmVmT3B0aW9uT2JqLFxuICAgICAgcGF0aFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvcHRpb24gICAgICAgICAgIHwgdGhlIG9wdGlvbiBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge29iamVjdH0gIG9wdGlvbnMgICAgICAgICAgfCBUaGUgc3VwcGxpZWQgb3B0aW9ucyBvYmplY3RcbiAgICogQHBhcmFtIHtvYmplY3R9ICByZWZlcmVuY2VPcHRpb25zIHwgVGhlIHJlZmVyZW5jZSBvcHRpb25zIGNvbnRhaW5pbmcgYWxsIG9wdGlvbnMgYW5kIHRoZWlyIGFsbG93ZWQgZm9ybWF0c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZmVyZW5jZU9wdGlvbiAgfCBVc3VhbGx5IHRoaXMgaXMgdGhlIHNhbWUgYXMgb3B0aW9uLCBleGNlcHQgd2hlbiBoYW5kbGluZyBhbiBfX2FueV9fIHRhZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICByZWZPcHRpb25PYmogICAgIHwgVGhpcyBpcyB0aGUgdHlwZSBvYmplY3QgZnJvbSB0aGUgcmVmZXJlbmNlIG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gICBwYXRoICAgICAgICAgICAgIHwgd2hlcmUgaW4gdGhlIG9iamVjdCBpcyB0aGUgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVja0ZpZWxkcyhcbiAgICBvcHRpb24sXG4gICAgb3B0aW9ucyxcbiAgICByZWZlcmVuY2VPcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbixcbiAgICByZWZPcHRpb25PYmosXG4gICAgcGF0aFxuICApIHtcbiAgICBjb25zdCBsb2cgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCIlY1wiICsgbWVzc2FnZSArIFZhbGlkYXRvci5wcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiksXG4gICAgICAgIFZBTElEQVRPUl9QUklOVF9TVFlMRSQxXG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25UeXBlID0gVmFsaWRhdG9yLmdldFR5cGUob3B0aW9uc1tvcHRpb25dKTtcbiAgICBjb25zdCByZWZPcHRpb25UeXBlID0gcmVmT3B0aW9uT2JqW29wdGlvblR5cGVdO1xuXG4gICAgaWYgKHJlZk9wdGlvblR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaWYgdGhlIHR5cGUgaXMgY29ycmVjdCwgd2UgY2hlY2sgaWYgaXQgaXMgc3VwcG9zZWQgdG8gYmUgb25lIG9mIGEgZmV3IHNlbGVjdCB2YWx1ZXNcbiAgICAgIGlmIChcbiAgICAgICAgVmFsaWRhdG9yLmdldFR5cGUocmVmT3B0aW9uVHlwZSkgPT09IFwiYXJyYXlcIiAmJlxuICAgICAgICByZWZPcHRpb25UeXBlLmluZGV4T2Yob3B0aW9uc1tvcHRpb25dKSA9PT0gLTFcbiAgICAgICkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgJ0ludmFsaWQgb3B0aW9uIGRldGVjdGVkIGluIFwiJyArXG4gICAgICAgICAgICBvcHRpb24gK1xuICAgICAgICAgICAgJ1wiLicgK1xuICAgICAgICAgICAgXCIgQWxsb3dlZCB2YWx1ZXMgYXJlOlwiICtcbiAgICAgICAgICAgIFZhbGlkYXRvci5wcmludChyZWZPcHRpb25UeXBlKSArXG4gICAgICAgICAgICAnIG5vdCBcIicgK1xuICAgICAgICAgICAgb3B0aW9uc1tvcHRpb25dICtcbiAgICAgICAgICAgICdcIi4gJ1xuICAgICAgICApO1xuICAgICAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9uVHlwZSA9PT0gXCJvYmplY3RcIiAmJiByZWZlcmVuY2VPcHRpb24gIT09IFwiX19hbnlfX1wiKSB7XG4gICAgICAgIHBhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgb3B0aW9uKTtcbiAgICAgICAgVmFsaWRhdG9yLnBhcnNlKFxuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSxcbiAgICAgICAgICByZWZlcmVuY2VPcHRpb25zW3JlZmVyZW5jZU9wdGlvbl0sXG4gICAgICAgICAgcGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVmT3B0aW9uT2JqW1wiYW55XCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHR5cGUgb2YgdGhlIGZpZWxkIGlzIGluY29ycmVjdCBhbmQgdGhlIGZpZWxkIGNhbm5vdCBiZSBhbnlcbiAgICAgIGxvZyhcbiAgICAgICAgJ0ludmFsaWQgdHlwZSByZWNlaXZlZCBmb3IgXCInICtcbiAgICAgICAgICBvcHRpb24gK1xuICAgICAgICAgICdcIi4gRXhwZWN0ZWQ6ICcgK1xuICAgICAgICAgIFZhbGlkYXRvci5wcmludChPYmplY3Qua2V5cyhyZWZPcHRpb25PYmopKSArXG4gICAgICAgICAgXCIuIFJlY2VpdmVkIFtcIiArXG4gICAgICAgICAgb3B0aW9uVHlwZSArXG4gICAgICAgICAgJ10gXCInICtcbiAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICdcIidcbiAgICAgICk7XG4gICAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3QgfCBib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgQXJyYXkuPG51bWJlcj4gfCBEYXRlIHwgTm9kZSB8IE1vbWVudCB8IHVuZGVmaW5lZCB8IG51bGx9IG9iamVjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgZ2V0VHlwZShvYmplY3QpIHtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcblxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZiAob2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIFwiZGF0ZVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdC5ub2RlVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBcImRvbVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdC5faXNBTW9tZW50T2JqZWN0ID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBcIm1vbWVudFwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwib2JqZWN0XCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcGF0aFxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgZ2V0U3VnZ2VzdGlvbihvcHRpb24sIG9wdGlvbnMsIHBhdGgpIHtcbiAgICBjb25zdCBsb2NhbFNlYXJjaCA9IFZhbGlkYXRvci5maW5kSW5PcHRpb25zKG9wdGlvbiwgb3B0aW9ucywgcGF0aCwgZmFsc2UpO1xuICAgIGNvbnN0IGdsb2JhbFNlYXJjaCA9IFZhbGlkYXRvci5maW5kSW5PcHRpb25zKG9wdGlvbiwgYWxsT3B0aW9ucywgW10sIHRydWUpO1xuXG4gICAgY29uc3QgbG9jYWxTZWFyY2hUaHJlc2hvbGQgPSA4O1xuICAgIGNvbnN0IGdsb2JhbFNlYXJjaFRocmVzaG9sZCA9IDQ7XG5cbiAgICBsZXQgbXNnO1xuICAgIGlmIChsb2NhbFNlYXJjaC5pbmRleE1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1zZyA9XG4gICAgICAgIFwiIGluIFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uLCBcIlwiKSArXG4gICAgICAgICdQZXJoYXBzIGl0IHdhcyBpbmNvbXBsZXRlPyBEaWQgeW91IG1lYW46IFwiJyArXG4gICAgICAgIGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggK1xuICAgICAgICAnXCI/XFxuXFxuJztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZ2xvYmFsU2VhcmNoLmRpc3RhbmNlIDw9IGdsb2JhbFNlYXJjaFRocmVzaG9sZCAmJlxuICAgICAgbG9jYWxTZWFyY2guZGlzdGFuY2UgPiBnbG9iYWxTZWFyY2guZGlzdGFuY2VcbiAgICApIHtcbiAgICAgIG1zZyA9XG4gICAgICAgIFwiIGluIFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uLCBcIlwiKSArXG4gICAgICAgIFwiUGVyaGFwcyBpdCB3YXMgbWlzcGxhY2VkPyBNYXRjaGluZyBvcHRpb24gZm91bmQgYXQ6IFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24oXG4gICAgICAgICAgZ2xvYmFsU2VhcmNoLnBhdGgsXG4gICAgICAgICAgZ2xvYmFsU2VhcmNoLmNsb3Nlc3RNYXRjaCxcbiAgICAgICAgICBcIlwiXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChsb2NhbFNlYXJjaC5kaXN0YW5jZSA8PSBsb2NhbFNlYXJjaFRocmVzaG9sZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgJy4gRGlkIHlvdSBtZWFuIFwiJyArXG4gICAgICAgIGxvY2FsU2VhcmNoLmNsb3Nlc3RNYXRjaCArXG4gICAgICAgICdcIj8nICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIuIERpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U6IFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKG9wdGlvbnMpKSArXG4gICAgICAgIFZhbGlkYXRvci5wcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbik7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICclY1Vua25vd24gb3B0aW9uIGRldGVjdGVkOiBcIicgKyBvcHRpb24gKyAnXCInICsgbXNnLFxuICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICApO1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHRyYXZlcnNlIHRoZSBvcHRpb25zIGluIHNlYXJjaCBmb3IgYSBtYXRjaC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVjdXJzaXZlPWZhbHNlXVxuICAgKiBAcmV0dXJucyB7e2Nsb3Nlc3RNYXRjaDogc3RyaW5nLCBwYXRoOiBBcnJheSwgZGlzdGFuY2U6IG51bWJlcn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBmaW5kSW5PcHRpb25zKG9wdGlvbiwgb3B0aW9ucywgcGF0aCwgcmVjdXJzaXZlID0gZmFsc2UpIHtcbiAgICBsZXQgbWluID0gMWU5O1xuICAgIGxldCBjbG9zZXN0TWF0Y2ggPSBcIlwiO1xuICAgIGxldCBjbG9zZXN0TWF0Y2hQYXRoID0gW107XG4gICAgY29uc3QgbG93ZXJDYXNlT3B0aW9uID0gb3B0aW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgbGV0IGluZGV4TWF0Y2ggPSB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBvcCBpbiBvcHRpb25zKSB7XG4gICAgICBsZXQgZGlzdGFuY2U7XG4gICAgICBpZiAob3B0aW9uc1tvcF0uX190eXBlX18gIT09IHVuZGVmaW5lZCAmJiByZWN1cnNpdmUgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMoXG4gICAgICAgICAgb3B0aW9uLFxuICAgICAgICAgIG9wdGlvbnNbb3BdLFxuICAgICAgICAgIGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pbiA+IHJlc3VsdC5kaXN0YW5jZSkge1xuICAgICAgICAgIGNsb3Nlc3RNYXRjaCA9IHJlc3VsdC5jbG9zZXN0TWF0Y2g7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoUGF0aCA9IHJlc3VsdC5wYXRoO1xuICAgICAgICAgIG1pbiA9IHJlc3VsdC5kaXN0YW5jZTtcbiAgICAgICAgICBpbmRleE1hdGNoID0gcmVzdWx0LmluZGV4TWF0Y2g7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcC50b0xvd2VyQ2FzZSgpLmluZGV4T2YobG93ZXJDYXNlT3B0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICBpbmRleE1hdGNoID0gb3A7XG4gICAgICAgIH1cbiAgICAgICAgZGlzdGFuY2UgPSBWYWxpZGF0b3IubGV2ZW5zaHRlaW5EaXN0YW5jZShvcHRpb24sIG9wKTtcbiAgICAgICAgaWYgKG1pbiA+IGRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gb3A7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoUGF0aCA9IGNvcHlBcnJheShwYXRoKTtcbiAgICAgICAgICBtaW4gPSBkaXN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY2xvc2VzdE1hdGNoOiBjbG9zZXN0TWF0Y2gsXG4gICAgICBwYXRoOiBjbG9zZXN0TWF0Y2hQYXRoLFxuICAgICAgZGlzdGFuY2U6IG1pbixcbiAgICAgIGluZGV4TWF0Y2g6IGluZGV4TWF0Y2gsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcHJpbnRMb2NhdGlvbihwYXRoLCBvcHRpb24sIHByZWZpeCA9IFwiUHJvYmxlbSB2YWx1ZSBmb3VuZCBhdDogXFxuXCIpIHtcbiAgICBsZXQgc3RyID0gXCJcXG5cXG5cIiArIHByZWZpeCArIFwib3B0aW9ucyA9IHtcXG5cIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaSArIDE7IGorKykge1xuICAgICAgICBzdHIgKz0gXCIgIFwiO1xuICAgICAgfVxuICAgICAgc3RyICs9IHBhdGhbaV0gKyBcIjoge1xcblwiO1xuICAgIH1cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhdGgubGVuZ3RoICsgMTsgaisrKSB7XG4gICAgICBzdHIgKz0gXCIgIFwiO1xuICAgIH1cbiAgICBzdHIgKz0gb3B0aW9uICsgXCJcXG5cIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoICsgMTsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhdGgubGVuZ3RoIC0gaTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gXCJ9XFxuXCI7XG4gICAgfVxuICAgIHJldHVybiBzdHIgKyBcIlxcblxcblwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludChvcHRpb25zKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXG4gICAgICAucmVwbGFjZSgvKFwiKXwoXFxbKXwoXFxdKXwoLFwiX190eXBlX19cIikvZywgXCJcIilcbiAgICAgIC5yZXBsYWNlKC8oLCkvZywgXCIsIFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQ29tcHV0ZSB0aGUgZWRpdCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gc3RyaW5nc1xuICAgKiBodHRwOi8vZW4ud2lraWJvb2tzLm9yZy93aWtpL0FsZ29yaXRobV9JbXBsZW1lbnRhdGlvbi9TdHJpbmdzL0xldmVuc2h0ZWluX2Rpc3RhbmNlI0phdmFTY3JpcHRcbiAgICpcbiAgICogQ29weXJpZ2h0IChjKSAyMDExIEFuZHJlaSBNYWNrZW56aWVcbiAgICpcbiAgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAgICpcbiAgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gICAqXG4gICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBsZXZlbnNodGVpbkRpc3RhbmNlKGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggPT09IDApIHJldHVybiBiLmxlbmd0aDtcbiAgICBpZiAoYi5sZW5ndGggPT09IDApIHJldHVybiBhLmxlbmd0aDtcblxuICAgIGNvbnN0IG1hdHJpeCA9IFtdO1xuXG4gICAgLy8gaW5jcmVtZW50IGFsb25nIHRoZSBmaXJzdCBjb2x1bW4gb2YgZWFjaCByb3dcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hdHJpeFtpXSA9IFtpXTtcbiAgICB9XG5cbiAgICAvLyBpbmNyZW1lbnQgZWFjaCBjb2x1bW4gaW4gdGhlIGZpcnN0IHJvd1xuICAgIGxldCBqO1xuICAgIGZvciAoaiA9IDA7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgbWF0cml4WzBdW2pdID0gajtcbiAgICB9XG5cbiAgICAvLyBGaWxsIGluIHRoZSByZXN0IG9mIHRoZSBtYXRyaXhcbiAgICBmb3IgKGkgPSAxOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAoaiA9IDE7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoYi5jaGFyQXQoaSAtIDEpID09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtpIC0gMV1baiAtIDFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqIC0gMV0gKyAxLCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgICBtYXRyaXhbaV1baiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgIG1hdHJpeFtpIC0gMV1bal0gKyAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTsgLy8gZGVsZXRpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRyaXhbYi5sZW5ndGhdW2EubGVuZ3RoXTtcbiAgfVxufTtcblxuY29uc3QgQWN0aXZhdG9yID0gQWN0aXZhdG9yJDE7XHJcbmNvbnN0IENvbG9yUGlja2VyID0gQ29sb3JQaWNrZXIkMTtcclxuY29uc3QgQ29uZmlndXJhdG9yID0gQ29uZmlndXJhdG9yJDE7XHJcbmNvbnN0IEhhbW1lciA9IEhhbW1lciQxO1xyXG5jb25zdCBQb3B1cCA9IFBvcHVwJDE7XHJcbmNvbnN0IFZBTElEQVRPUl9QUklOVF9TVFlMRSA9IFZBTElEQVRPUl9QUklOVF9TVFlMRSQxO1xyXG5jb25zdCBWYWxpZGF0b3IgPSBWYWxpZGF0b3IkMTtcblxuZXhwb3J0IHsgQWN0aXZhdG9yLCBBbGVhLCBDb2xvclBpY2tlciwgQ29uZmlndXJhdG9yLCBERUxFVEUsIEhTVlRvSGV4LCBIU1ZUb1JHQiwgSGFtbWVyLCBQb3B1cCwgUkdCVG9IU1YsIFJHQlRvSGV4LCBWQUxJREFUT1JfUFJJTlRfU1RZTEUsIFZhbGlkYXRvciwgYWRkQ2xhc3NOYW1lLCBhZGRDc3NUZXh0LCBhZGRFdmVudExpc3RlbmVyLCBiaW5hcnlTZWFyY2hDdXN0b20sIGJpbmFyeVNlYXJjaFZhbHVlLCBicmlkZ2VPYmplY3QsIGNvcHlBbmRFeHRlbmRBcnJheSwgY29weUFycmF5LCBkZWVwRXh0ZW5kLCBkZWVwT2JqZWN0QXNzaWduLCBlYXNpbmdGdW5jdGlvbnMsIGVxdWFsQXJyYXksIGV4dGVuZCwgZmlsbElmRGVmaW5lZCwgZm9yRWFjaCwgZ2V0QWJzb2x1dGVMZWZ0LCBnZXRBYnNvbHV0ZVJpZ2h0LCBnZXRBYnNvbHV0ZVRvcCwgZ2V0U2Nyb2xsQmFyV2lkdGgsIGdldFRhcmdldCwgZ2V0VHlwZSwgaGFzUGFyZW50LCBoZXhUb0hTViwgaGV4VG9SR0IsIGluc2VydFNvcnQsIGlzRGF0ZSwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1N0cmluZywgaXNWYWxpZEhleCwgaXNWYWxpZFJHQiwgaXNWYWxpZFJHQkEsIG1lcmdlT3B0aW9ucywgb3B0aW9uLCBvdmVycmlkZU9wYWNpdHksIHBhcnNlQ29sb3IsIHByZXZlbnREZWZhdWx0LCBwdXJlRGVlcE9iamVjdEFzc2lnbiwgcmVjdXJzaXZlRE9NRGVsZXRlLCByZW1vdmVDbGFzc05hbWUsIHJlbW92ZUNzc1RleHQsIHJlbW92ZUV2ZW50TGlzdGVuZXIsIHNlbGVjdGl2ZUJyaWRnZU9iamVjdCwgc2VsZWN0aXZlRGVlcEV4dGVuZCwgc2VsZWN0aXZlRXh0ZW5kLCBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kLCB0aHJvdHRsZSwgdG9BcnJheSwgdG9wTW9zdCwgdXBkYXRlUHJvcGVydHkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZpcy11dGlsLmpzLm1hcFxuIiwgIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuXG4vKipcbiAqIFBhcnNlIGEgdGV4dCBzb3VyY2UgY29udGFpbmluZyBkYXRhIGluIERPVCBsYW5ndWFnZSBpbnRvIGEgSlNPTiBvYmplY3QuXG4gKiBUaGUgb2JqZWN0IGNvbnRhaW5zIHR3byBsaXN0czogb25lIHdpdGggbm9kZXMgYW5kIG9uZSB3aXRoIGVkZ2VzLlxuICpcbiAqIERPVCBsYW5ndWFnZSByZWZlcmVuY2U6IGh0dHA6Ly93d3cuZ3JhcGh2aXoub3JnL2RvYy9pbmZvL2xhbmcuaHRtbFxuICpcbiAqIERPVCBsYW5ndWFnZSBhdHRyaWJ1dGVzOiBodHRwOi8vZ3JhcGh2aXoub3JnL2NvbnRlbnQvYXR0cnNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAgICAgVGV4dCBjb250YWluaW5nIGEgZ3JhcGggaW4gRE9ULW5vdGF0aW9uXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBncmFwaCAgIEFuIG9iamVjdCBjb250YWluaW5nIHR3byBwYXJhbWV0ZXJzOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHtPYmplY3RbXX0gbm9kZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB7T2JqZWN0W119IGVkZ2VzXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVE9ET1xuICogPT09PVxuICpcbiAqIEZvciBsYWJlbCBoYW5kbGluZywgdGhpcyBpcyBhbiBpbmNvbXBsZXRlIGltcGxlbWVudGF0aW9uLiBGcm9tIGRvY3MgKHF1b3RlICMzMDE1KTpcbiAqXG4gKiA+IHRoZSBlc2NhcGUgc2VxdWVuY2VzIFwiXFxuXCIsIFwiXFxsXCIgYW5kIFwiXFxyXCIgZGl2aWRlIHRoZSBsYWJlbCBpbnRvIGxpbmVzLCBjZW50ZXJlZCxcbiAqID4gbGVmdC1qdXN0aWZpZWQsIGFuZCByaWdodC1qdXN0aWZpZWQsIHJlc3BlY3RpdmVseS5cbiAqXG4gKiBTb3VyY2U6IGh0dHA6Ly93d3cuZ3JhcGh2aXoub3JnL2NvbnRlbnQvYXR0cnMja2VzY1N0cmluZ1xuICpcbiAqID4gQXMgYW5vdGhlciBhaWQgZm9yIHJlYWRhYmlsaXR5LCBkb3QgYWxsb3dzIGRvdWJsZS1xdW90ZWQgc3RyaW5ncyB0byBzcGFuIG11bHRpcGxlIHBoeXNpY2FsXG4gKiA+IGxpbmVzIHVzaW5nIHRoZSBzdGFuZGFyZCBDIGNvbnZlbnRpb24gb2YgYSBiYWNrc2xhc2ggaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGEgbmV3bGluZVxuICogPiBjaGFyYWN0ZXJcbiAqID4gSW4gYWRkaXRpb24sIGRvdWJsZS1xdW90ZWQgc3RyaW5ncyBjYW4gYmUgY29uY2F0ZW5hdGVkIHVzaW5nIGEgJysnIG9wZXJhdG9yLlxuICogPiBBcyBIVE1MIHN0cmluZ3MgY2FuIGNvbnRhaW4gbmV3bGluZSBjaGFyYWN0ZXJzLCB3aGljaCBhcmUgdXNlZCBzb2xlbHkgZm9yIGZvcm1hdHRpbmcsXG4gKiA+IHRoZSBsYW5ndWFnZSBkb2VzIG5vdCBhbGxvdyBlc2NhcGVkIG5ld2xpbmVzIG9yIGNvbmNhdGVuYXRpb24gb3BlcmF0b3JzIHRvIGJlIHVzZWRcbiAqID4gd2l0aGluIHRoZW0uXG4gKlxuICogLSBDdXJyZW50bHksIG9ubHkgJ1xcXFxuJyBpcyBoYW5kbGVkXG4gKiAtIE5vdGUgdGhhdCB0ZXh0IGV4cGxpY2l0bHkgc2F5cyAnbGFiZWxzJzsgdGhlIGRvdCBwYXJzZXIgY3VycmVudGx5IGhhbmRsZXMgZXNjYXBlXG4gKiAgIHNlcXVlbmNlcyBpbiAqKmFsbCoqIHN0cmluZ3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURPVChkYXRhKSB7XG4gIGRvdCA9IGRhdGE7XG4gIHJldHVybiBwYXJzZUdyYXBoKCk7XG59XG5cbi8vIG1hcHBpbmcgb2YgYXR0cmlidXRlcyBmcm9tIERPVCAodGhlIGtleXMpIHRvIHZpcy5qcyAodGhlIHZhbHVlcylcbnZhciBOT0RFX0FUVFJfTUFQUElORyA9IHtcbiAgZm9udHNpemU6IFwiZm9udC5zaXplXCIsXG4gIGZvbnRjb2xvcjogXCJmb250LmNvbG9yXCIsXG4gIGxhYmVsZm9udGNvbG9yOiBcImZvbnQuY29sb3JcIixcbiAgZm9udG5hbWU6IFwiZm9udC5mYWNlXCIsXG4gIGNvbG9yOiBbXCJjb2xvci5ib3JkZXJcIiwgXCJjb2xvci5iYWNrZ3JvdW5kXCJdLFxuICBmaWxsY29sb3I6IFwiY29sb3IuYmFja2dyb3VuZFwiLFxuICB0b29sdGlwOiBcInRpdGxlXCIsXG4gIGxhYmVsdG9vbHRpcDogXCJ0aXRsZVwiLFxufTtcbnZhciBFREdFX0FUVFJfTUFQUElORyA9IE9iamVjdC5jcmVhdGUoTk9ERV9BVFRSX01BUFBJTkcpO1xuRURHRV9BVFRSX01BUFBJTkcuY29sb3IgPSBcImNvbG9yLmNvbG9yXCI7XG5FREdFX0FUVFJfTUFQUElORy5zdHlsZSA9IFwiZGFzaGVzXCI7XG5cbi8vIHRva2VuIHR5cGVzIGVudW1lcmF0aW9uXG52YXIgVE9LRU5UWVBFID0ge1xuICBOVUxMOiAwLFxuICBERUxJTUlURVI6IDEsXG4gIElERU5USUZJRVI6IDIsXG4gIFVOS05PV046IDMsXG59O1xuXG4vLyBtYXAgd2l0aCBhbGwgZGVsaW1pdGVyc1xudmFyIERFTElNSVRFUlMgPSB7XG4gIFwie1wiOiB0cnVlLFxuICBcIn1cIjogdHJ1ZSxcbiAgXCJbXCI6IHRydWUsXG4gIFwiXVwiOiB0cnVlLFxuICBcIjtcIjogdHJ1ZSxcbiAgXCI9XCI6IHRydWUsXG4gIFwiLFwiOiB0cnVlLFxuXG4gIFwiLT5cIjogdHJ1ZSxcbiAgXCItLVwiOiB0cnVlLFxufTtcblxudmFyIGRvdCA9IFwiXCI7IC8vIGN1cnJlbnQgZG90IGZpbGVcbnZhciBpbmRleCA9IDA7IC8vIGN1cnJlbnQgaW5kZXggaW4gZG90IGZpbGVcbnZhciBjID0gXCJcIjsgLy8gY3VycmVudCB0b2tlbiBjaGFyYWN0ZXIgaW4gZXhwclxudmFyIHRva2VuID0gXCJcIjsgLy8gY3VycmVudCB0b2tlblxudmFyIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5OVUxMOyAvLyB0eXBlIG9mIHRoZSB0b2tlblxuXG4vKipcbiAqIEdldCB0aGUgZmlyc3QgY2hhcmFjdGVyIGZyb20gdGhlIGRvdCBmaWxlLlxuICogVGhlIGNoYXJhY3RlciBpcyBzdG9yZWQgaW50byB0aGUgY2hhciBjLiBJZiB0aGUgZW5kIG9mIHRoZSBkb3QgZmlsZSBpc1xuICogcmVhY2hlZCwgdGhlIGZ1bmN0aW9uIHB1dHMgYW4gZW1wdHkgc3RyaW5nIGluIGMuXG4gKi9cbmZ1bmN0aW9uIGZpcnN0KCkge1xuICBpbmRleCA9IDA7XG4gIGMgPSBkb3QuY2hhckF0KDApO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgZG90IGZpbGUuXG4gKiBUaGUgY2hhcmFjdGVyIGlzIHN0b3JlZCBpbnRvIHRoZSBjaGFyIGMuIElmIHRoZSBlbmQgb2YgdGhlIGRvdCBmaWxlIGlzXG4gKiByZWFjaGVkLCB0aGUgZnVuY3Rpb24gcHV0cyBhbiBlbXB0eSBzdHJpbmcgaW4gYy5cbiAqL1xuZnVuY3Rpb24gbmV4dCgpIHtcbiAgaW5kZXgrKztcbiAgYyA9IGRvdC5jaGFyQXQoaW5kZXgpO1xufVxuXG4vKipcbiAqIFByZXZpZXcgdGhlIG5leHQgY2hhcmFjdGVyIGZyb20gdGhlIGRvdCBmaWxlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNOZXh0XG4gKi9cbmZ1bmN0aW9uIG5leHRQcmV2aWV3KCkge1xuICByZXR1cm4gZG90LmNoYXJBdChpbmRleCArIDEpO1xufVxuXG4vKipcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBjaGFyYWN0ZXIgaXMgYWxwaGFiZXRpYyBvciBudW1lcmljICggYS16QS1aXzAtOS46IyApXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNcbiAqIEByZXR1cm5zIHtib29sZWFufSBpc0FscGhhTnVtZXJpY1xuICovXG5mdW5jdGlvbiBpc0FscGhhTnVtZXJpYyhjKSB7XG4gIHZhciBjaGFyQ29kZSA9IGMuY2hhckNvZGVBdCgwKTtcblxuICBpZiAoY2hhckNvZGUgPCA0Nykge1xuICAgIC8vICMuXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSAzNSB8fCBjaGFyQ29kZSA9PT0gNDY7XG4gIH1cbiAgaWYgKGNoYXJDb2RlIDwgNTkpIHtcbiAgICAvLyAwLTkgYW5kIDpcbiAgICByZXR1cm4gY2hhckNvZGUgPiA0NztcbiAgfVxuICBpZiAoY2hhckNvZGUgPCA5MSkge1xuICAgIC8vIEEtWlxuICAgIHJldHVybiBjaGFyQ29kZSA+IDY0O1xuICB9XG4gIGlmIChjaGFyQ29kZSA8IDk2KSB7XG4gICAgLy8gX1xuICAgIHJldHVybiBjaGFyQ29kZSA9PT0gOTU7XG4gIH1cbiAgaWYgKGNoYXJDb2RlIDwgMTIzKSB7XG4gICAgLy8gYS16XG4gICAgcmV0dXJuIGNoYXJDb2RlID4gOTY7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogTWVyZ2UgYWxsIG9wdGlvbnMgb2Ygb2JqZWN0IGIgaW50byBvYmplY3QgYlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBhXG4gKiBAcGFyYW0ge29iamVjdH0gYlxuICogQHJldHVybnMge29iamVjdH0gYVxuICovXG5mdW5jdGlvbiBtZXJnZShhLCBiKSB7XG4gIGlmICghYSkge1xuICAgIGEgPSB7fTtcbiAgfVxuXG4gIGlmIChiKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiBiKSB7XG4gICAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBhW25hbWVdID0gYltuYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogU2V0IGEgdmFsdWUgaW4gYW4gb2JqZWN0LCB3aGVyZSB0aGUgcHJvdmlkZWQgcGFyYW1ldGVyIG5hbWUgY2FuIGJlIGFcbiAqIHBhdGggd2l0aCBuZXN0ZWQgcGFyYW1ldGVycy4gRm9yIGV4YW1wbGU6XG4gKlxuICogICAgIHZhciBvYmogPSB7YTogMn07XG4gKiAgICAgc2V0VmFsdWUob2JqLCAnYi5jJywgMyk7ICAgICAvLyBvYmogPSB7YTogMiwgYjoge2M6IDN9fVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoICBBIHBhcmFtZXRlciBuYW1lIG9yIGRvdC1zZXBhcmF0ZWQgcGFyYW1ldGVyIHBhdGgsXG4gKiAgICAgICAgICAgICAgICAgICAgICBsaWtlIFwiY29sb3IuaGlnaGxpZ2h0LmJvcmRlclwiLlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5mdW5jdGlvbiBzZXRWYWx1ZShvYmosIHBhdGgsIHZhbHVlKSB7XG4gIHZhciBrZXlzID0gcGF0aC5zcGxpdChcIi5cIik7XG4gIHZhciBvID0gb2JqO1xuICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICB2YXIga2V5ID0ga2V5cy5zaGlmdCgpO1xuICAgIGlmIChrZXlzLmxlbmd0aCkge1xuICAgICAgLy8gdGhpcyBpc24ndCB0aGUgZW5kIHBvaW50XG4gICAgICBpZiAoIW9ba2V5XSkge1xuICAgICAgICBvW2tleV0gPSB7fTtcbiAgICAgIH1cbiAgICAgIG8gPSBvW2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMgaXMgdGhlIGVuZCBwb2ludFxuICAgICAgb1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWRkIGEgbm9kZSB0byBhIGdyYXBoIG9iamVjdC4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIG5vZGUgd2l0aFxuICogdGhlIHNhbWUgaWQsIHRoZWlyIGF0dHJpYnV0ZXMgd2lsbCBiZSBtZXJnZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGdyYXBoXG4gKiBAcGFyYW0ge29iamVjdH0gbm9kZVxuICovXG5mdW5jdGlvbiBhZGROb2RlKGdyYXBoLCBub2RlKSB7XG4gIHZhciBpLCBsZW47XG4gIHZhciBjdXJyZW50ID0gbnVsbDtcblxuICAvLyBmaW5kIHJvb3QgZ3JhcGggKGluIGNhc2Ugb2Ygc3ViZ3JhcGgpXG4gIHZhciBncmFwaHMgPSBbZ3JhcGhdOyAvLyBsaXN0IHdpdGggYWxsIGdyYXBocyBmcm9tIGN1cnJlbnQgZ3JhcGggdG8gcm9vdCBncmFwaFxuICB2YXIgcm9vdCA9IGdyYXBoO1xuICB3aGlsZSAocm9vdC5wYXJlbnQpIHtcbiAgICBncmFwaHMucHVzaChyb290LnBhcmVudCk7XG4gICAgcm9vdCA9IHJvb3QucGFyZW50O1xuICB9XG5cbiAgLy8gZmluZCBleGlzdGluZyBub2RlIChhdCByb290IGxldmVsKSBieSBpdHMgaWRcbiAgaWYgKHJvb3Qubm9kZXMpIHtcbiAgICBmb3IgKGkgPSAwLCBsZW4gPSByb290Lm5vZGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAobm9kZS5pZCA9PT0gcm9vdC5ub2Rlc1tpXS5pZCkge1xuICAgICAgICBjdXJyZW50ID0gcm9vdC5ub2Rlc1tpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjdXJyZW50KSB7XG4gICAgLy8gdGhpcyBpcyBhIG5ldyBub2RlXG4gICAgY3VycmVudCA9IHtcbiAgICAgIGlkOiBub2RlLmlkLFxuICAgIH07XG4gICAgaWYgKGdyYXBoLm5vZGUpIHtcbiAgICAgIC8vIGNsb25lIGRlZmF1bHQgYXR0cmlidXRlc1xuICAgICAgY3VycmVudC5hdHRyID0gbWVyZ2UoY3VycmVudC5hdHRyLCBncmFwaC5ub2RlKTtcbiAgICB9XG4gIH1cblxuICAvLyBhZGQgbm9kZSB0byB0aGlzIChzdWIpZ3JhcGggYW5kIGFsbCBpdHMgcGFyZW50IGdyYXBoc1xuICBmb3IgKGkgPSBncmFwaHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgZyA9IGdyYXBoc1tpXTtcblxuICAgIGlmICghZy5ub2Rlcykge1xuICAgICAgZy5ub2RlcyA9IFtdO1xuICAgIH1cbiAgICBpZiAoZy5ub2Rlcy5pbmRleE9mKGN1cnJlbnQpID09PSAtMSkge1xuICAgICAgZy5ub2Rlcy5wdXNoKGN1cnJlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlIGF0dHJpYnV0ZXNcbiAgaWYgKG5vZGUuYXR0cikge1xuICAgIGN1cnJlbnQuYXR0ciA9IG1lcmdlKGN1cnJlbnQuYXR0ciwgbm9kZS5hdHRyKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBhbiBlZGdlIHRvIGEgZ3JhcGggb2JqZWN0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGdyYXBoXG4gKiBAcGFyYW0ge29iamVjdH0gZWRnZVxuICovXG5mdW5jdGlvbiBhZGRFZGdlKGdyYXBoLCBlZGdlKSB7XG4gIGlmICghZ3JhcGguZWRnZXMpIHtcbiAgICBncmFwaC5lZGdlcyA9IFtdO1xuICB9XG4gIGdyYXBoLmVkZ2VzLnB1c2goZWRnZSk7XG4gIGlmIChncmFwaC5lZGdlKSB7XG4gICAgdmFyIGF0dHIgPSBtZXJnZSh7fSwgZ3JhcGguZWRnZSk7IC8vIGNsb25lIGRlZmF1bHQgYXR0cmlidXRlc1xuICAgIGVkZ2UuYXR0ciA9IG1lcmdlKGF0dHIsIGVkZ2UuYXR0cik7IC8vIG1lcmdlIGF0dHJpYnV0ZXNcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBlZGdlIHRvIGEgZ3JhcGggb2JqZWN0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGdyYXBoXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IG9iamVjdH0gZnJvbVxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBvYmplY3R9IHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBhdHRyXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBlZGdlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVkZ2UoZ3JhcGgsIGZyb20sIHRvLCB0eXBlLCBhdHRyKSB7XG4gIHZhciBlZGdlID0ge1xuICAgIGZyb206IGZyb20sXG4gICAgdG86IHRvLFxuICAgIHR5cGU6IHR5cGUsXG4gIH07XG5cbiAgaWYgKGdyYXBoLmVkZ2UpIHtcbiAgICBlZGdlLmF0dHIgPSBtZXJnZSh7fSwgZ3JhcGguZWRnZSk7IC8vIGNsb25lIGRlZmF1bHQgYXR0cmlidXRlc1xuICB9XG4gIGVkZ2UuYXR0ciA9IG1lcmdlKGVkZ2UuYXR0ciB8fCB7fSwgYXR0cik7IC8vIG1lcmdlIGF0dHJpYnV0ZXNcblxuICAvLyBNb3ZlIGFycm93cyBhdHRyaWJ1dGUgZnJvbSBhdHRyIHRvIGVkZ2UgdGVtcG9yYWxseSBjcmVhdGVkIGluXG4gIC8vIHBhcnNlQXR0cmlidXRlTGlzdCgpLlxuICBpZiAoYXR0ciAhPSBudWxsKSB7XG4gICAgaWYgKGF0dHIuaGFzT3duUHJvcGVydHkoXCJhcnJvd3NcIikgJiYgYXR0cltcImFycm93c1wiXSAhPSBudWxsKSB7XG4gICAgICBlZGdlW1wiYXJyb3dzXCJdID0geyB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBhdHRyLmFycm93cy50eXBlIH0gfTtcbiAgICAgIGF0dHJbXCJhcnJvd3NcIl0gPSBudWxsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWRnZTtcbn1cblxuLyoqXG4gKiBHZXQgbmV4dCB0b2tlbiBpbiB0aGUgY3VycmVudCBkb3QgZmlsZS5cbiAqIFRoZSB0b2tlbiBhbmQgdG9rZW4gdHlwZSBhcmUgYXZhaWxhYmxlIGFzIHRva2VuIGFuZCB0b2tlblR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0VG9rZW4oKSB7XG4gIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5OVUxMO1xuICB0b2tlbiA9IFwiXCI7XG5cbiAgLy8gc2tpcCBvdmVyIHdoaXRlc3BhY2VzXG4gIHdoaWxlIChjID09PSBcIiBcIiB8fCBjID09PSBcIlxcdFwiIHx8IGMgPT09IFwiXFxuXCIgfHwgYyA9PT0gXCJcXHJcIikge1xuICAgIC8vIHNwYWNlLCB0YWIsIGVudGVyXG4gICAgbmV4dCgpO1xuICB9XG5cbiAgZG8ge1xuICAgIHZhciBpc0NvbW1lbnQgPSBmYWxzZTtcblxuICAgIC8vIHNraXAgY29tbWVudFxuICAgIGlmIChjID09PSBcIiNcIikge1xuICAgICAgLy8gZmluZCB0aGUgcHJldmlvdXMgbm9uLXNwYWNlIGNoYXJhY3RlclxuICAgICAgdmFyIGkgPSBpbmRleCAtIDE7XG4gICAgICB3aGlsZSAoZG90LmNoYXJBdChpKSA9PT0gXCIgXCIgfHwgZG90LmNoYXJBdChpKSA9PT0gXCJcXHRcIikge1xuICAgICAgICBpLS07XG4gICAgICB9XG4gICAgICBpZiAoZG90LmNoYXJBdChpKSA9PT0gXCJcXG5cIiB8fCBkb3QuY2hhckF0KGkpID09PSBcIlwiKSB7XG4gICAgICAgIC8vIHRoZSAjIGlzIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUsIHRoaXMgaXMgaW5kZWVkIGEgbGluZSBjb21tZW50XG4gICAgICAgIHdoaWxlIChjICE9IFwiXCIgJiYgYyAhPSBcIlxcblwiKSB7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlzQ29tbWVudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjID09PSBcIi9cIiAmJiBuZXh0UHJldmlldygpID09PSBcIi9cIikge1xuICAgICAgLy8gc2tpcCBsaW5lIGNvbW1lbnRcbiAgICAgIHdoaWxlIChjICE9IFwiXCIgJiYgYyAhPSBcIlxcblwiKSB7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGlzQ29tbWVudCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChjID09PSBcIi9cIiAmJiBuZXh0UHJldmlldygpID09PSBcIipcIikge1xuICAgICAgLy8gc2tpcCBibG9jayBjb21tZW50XG4gICAgICB3aGlsZSAoYyAhPSBcIlwiKSB7XG4gICAgICAgIGlmIChjID09PSBcIipcIiAmJiBuZXh0UHJldmlldygpID09PSBcIi9cIikge1xuICAgICAgICAgIC8vIGVuZCBvZiBibG9jayBjb21tZW50IGZvdW5kLiBza2lwIHRoZXNlIGxhc3QgdHdvIGNoYXJhY3RlcnNcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaXNDb21tZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBza2lwIG92ZXIgd2hpdGVzcGFjZXNcbiAgICB3aGlsZSAoYyA9PT0gXCIgXCIgfHwgYyA9PT0gXCJcXHRcIiB8fCBjID09PSBcIlxcblwiIHx8IGMgPT09IFwiXFxyXCIpIHtcbiAgICAgIC8vIHNwYWNlLCB0YWIsIGVudGVyXG4gICAgICBuZXh0KCk7XG4gICAgfVxuICB9IHdoaWxlIChpc0NvbW1lbnQpO1xuXG4gIC8vIGNoZWNrIGZvciBlbmQgb2YgZG90IGZpbGVcbiAgaWYgKGMgPT09IFwiXCIpIHtcbiAgICAvLyB0b2tlbiBpcyBzdGlsbCBlbXB0eVxuICAgIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gY2hlY2sgZm9yIGRlbGltaXRlcnMgY29uc2lzdGluZyBvZiAyIGNoYXJhY3RlcnNcbiAgdmFyIGMyID0gYyArIG5leHRQcmV2aWV3KCk7XG4gIGlmIChERUxJTUlURVJTW2MyXSkge1xuICAgIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgdG9rZW4gPSBjMjtcbiAgICBuZXh0KCk7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGNoZWNrIGZvciBkZWxpbWl0ZXJzIGNvbnNpc3Rpbmcgb2YgMSBjaGFyYWN0ZXJcbiAgaWYgKERFTElNSVRFUlNbY10pIHtcbiAgICB0b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSO1xuICAgIHRva2VuID0gYztcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gY2hlY2sgZm9yIGFuIGlkZW50aWZpZXIgKG51bWJlciBvciBzdHJpbmcpXG4gIC8vIFRPRE86IG1vcmUgcHJlY2lzZSBwYXJzaW5nIG9mIG51bWJlcnMvc3RyaW5ncyAoYW5kIHRoZSBwb3J0IHNlcGFyYXRvciAnOicpXG4gIGlmIChpc0FscGhhTnVtZXJpYyhjKSB8fCBjID09PSBcIi1cIikge1xuICAgIHRva2VuICs9IGM7XG4gICAgbmV4dCgpO1xuXG4gICAgd2hpbGUgKGlzQWxwaGFOdW1lcmljKGMpKSB7XG4gICAgICB0b2tlbiArPSBjO1xuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICBpZiAodG9rZW4gPT09IFwiZmFsc2VcIikge1xuICAgICAgdG9rZW4gPSBmYWxzZTsgLy8gY29udmVydCB0byBib29sZWFuXG4gICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIHRva2VuID0gdHJ1ZTsgLy8gY29udmVydCB0byBib29sZWFuXG4gICAgfSBlbHNlIGlmICghaXNOYU4oTnVtYmVyKHRva2VuKSkpIHtcbiAgICAgIHRva2VuID0gTnVtYmVyKHRva2VuKTsgLy8gY29udmVydCB0byBudW1iZXJcbiAgICB9XG4gICAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLklERU5USUZJRVI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gY2hlY2sgZm9yIGEgc3RyaW5nIGVuY2xvc2VkIGJ5IGRvdWJsZSBxdW90ZXNcbiAgaWYgKGMgPT09ICdcIicpIHtcbiAgICBuZXh0KCk7XG4gICAgd2hpbGUgKGMgIT0gXCJcIiAmJiAoYyAhPSAnXCInIHx8IChjID09PSAnXCInICYmIG5leHRQcmV2aWV3KCkgPT09ICdcIicpKSkge1xuICAgICAgaWYgKGMgPT09ICdcIicpIHtcbiAgICAgICAgLy8gc2tpcCB0aGUgZXNjYXBlIGNoYXJhY3RlclxuICAgICAgICB0b2tlbiArPSBjO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2UgaWYgKGMgPT09IFwiXFxcXFwiICYmIG5leHRQcmV2aWV3KCkgPT09IFwiblwiKSB7XG4gICAgICAgIC8vIEhvbm9yIGEgbmV3bGluZSBlc2NhcGUgc2VxdWVuY2VcbiAgICAgICAgdG9rZW4gKz0gXCJcXG5cIjtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9rZW4gKz0gYztcbiAgICAgIH1cbiAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgaWYgKGMgIT0gJ1wiJykge1xuICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoJ0VuZCBvZiBzdHJpbmcgXCIgZXhwZWN0ZWQnKTtcbiAgICB9XG4gICAgbmV4dCgpO1xuICAgIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5JREVOVElGSUVSO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHNvbWV0aGluZyB1bmtub3duIGlzIGZvdW5kLCB3cm9uZyBjaGFyYWN0ZXJzLCBhIHN5bnRheCBlcnJvclxuICB0b2tlblR5cGUgPSBUT0tFTlRZUEUuVU5LTk9XTjtcbiAgd2hpbGUgKGMgIT0gXCJcIikge1xuICAgIHRva2VuICs9IGM7XG4gICAgbmV4dCgpO1xuICB9XG4gIHRocm93IG5ldyBTeW50YXhFcnJvcignU3ludGF4IGVycm9yIGluIHBhcnQgXCInICsgY2hvcCh0b2tlbiwgMzApICsgJ1wiJyk7XG59XG5cbi8qKlxuICogUGFyc2UgYSBncmFwaC5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBncmFwaFxuICovXG5mdW5jdGlvbiBwYXJzZUdyYXBoKCkge1xuICB2YXIgZ3JhcGggPSB7fTtcblxuICBmaXJzdCgpO1xuICBnZXRUb2tlbigpO1xuXG4gIC8vIG9wdGlvbmFsIHN0cmljdCBrZXl3b3JkXG4gIGlmICh0b2tlbiA9PT0gXCJzdHJpY3RcIikge1xuICAgIGdyYXBoLnN0cmljdCA9IHRydWU7XG4gICAgZ2V0VG9rZW4oKTtcbiAgfVxuXG4gIC8vIGdyYXBoIG9yIGRpZ3JhcGgga2V5d29yZFxuICBpZiAodG9rZW4gPT09IFwiZ3JhcGhcIiB8fCB0b2tlbiA9PT0gXCJkaWdyYXBoXCIpIHtcbiAgICBncmFwaC50eXBlID0gdG9rZW47XG4gICAgZ2V0VG9rZW4oKTtcbiAgfVxuXG4gIC8vIG9wdGlvbmFsIGdyYXBoIGlkXG4gIGlmICh0b2tlblR5cGUgPT09IFRPS0VOVFlQRS5JREVOVElGSUVSKSB7XG4gICAgZ3JhcGguaWQgPSB0b2tlbjtcbiAgICBnZXRUb2tlbigpO1xuICB9XG5cbiAgLy8gb3BlbiBhbmdsZSBicmFja2V0XG4gIGlmICh0b2tlbiAhPSBcIntcIikge1xuICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiQW5nbGUgYnJhY2tldCB7IGV4cGVjdGVkXCIpO1xuICB9XG4gIGdldFRva2VuKCk7XG5cbiAgLy8gc3RhdGVtZW50c1xuICBwYXJzZVN0YXRlbWVudHMoZ3JhcGgpO1xuXG4gIC8vIGNsb3NlIGFuZ2xlIGJyYWNrZXRcbiAgaWYgKHRva2VuICE9IFwifVwiKSB7XG4gICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJBbmdsZSBicmFja2V0IH0gZXhwZWN0ZWRcIik7XG4gIH1cbiAgZ2V0VG9rZW4oKTtcblxuICAvLyBlbmQgb2YgZmlsZVxuICBpZiAodG9rZW4gIT09IFwiXCIpIHtcbiAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkVuZCBvZiBmaWxlIGV4cGVjdGVkXCIpO1xuICB9XG4gIGdldFRva2VuKCk7XG5cbiAgLy8gcmVtb3ZlIHRlbXBvcmFyeSBkZWZhdWx0IG9wdGlvbnNcbiAgZGVsZXRlIGdyYXBoLm5vZGU7XG4gIGRlbGV0ZSBncmFwaC5lZGdlO1xuICBkZWxldGUgZ3JhcGguZ3JhcGg7XG5cbiAgcmV0dXJuIGdyYXBoO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgbGlzdCB3aXRoIHN0YXRlbWVudHMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGdyYXBoXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50cyhncmFwaCkge1xuICB3aGlsZSAodG9rZW4gIT09IFwiXCIgJiYgdG9rZW4gIT0gXCJ9XCIpIHtcbiAgICBwYXJzZVN0YXRlbWVudChncmFwaCk7XG4gICAgaWYgKHRva2VuID09PSBcIjtcIikge1xuICAgICAgZ2V0VG9rZW4oKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhIHNpbmdsZSBzdGF0ZW1lbnQuIENhbiBiZSBhIGFuIGF0dHJpYnV0ZSBzdGF0ZW1lbnQsIG5vZGVcbiAqIHN0YXRlbWVudCwgYSBzZXJpZXMgb2Ygbm9kZSBzdGF0ZW1lbnRzIGFuZCBlZGdlIHN0YXRlbWVudHMsIG9yIGFcbiAqIHBhcmFtZXRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqL1xuZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnQoZ3JhcGgpIHtcbiAgLy8gcGFyc2Ugc3ViZ3JhcGhcbiAgdmFyIHN1YmdyYXBoID0gcGFyc2VTdWJncmFwaChncmFwaCk7XG4gIGlmIChzdWJncmFwaCkge1xuICAgIC8vIGVkZ2Ugc3RhdGVtZW50c1xuICAgIHBhcnNlRWRnZShncmFwaCwgc3ViZ3JhcGgpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gcGFyc2UgYW4gYXR0cmlidXRlIHN0YXRlbWVudFxuICB2YXIgYXR0ciA9IHBhcnNlQXR0cmlidXRlU3RhdGVtZW50KGdyYXBoKTtcbiAgaWYgKGF0dHIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBwYXJzZSBub2RlXG4gIGlmICh0b2tlblR5cGUgIT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIklkZW50aWZpZXIgZXhwZWN0ZWRcIik7XG4gIH1cbiAgdmFyIGlkID0gdG9rZW47IC8vIGlkIGNhbiBiZSBhIHN0cmluZyBvciBhIG51bWJlclxuICBnZXRUb2tlbigpO1xuXG4gIGlmICh0b2tlbiA9PT0gXCI9XCIpIHtcbiAgICAvLyBpZCBzdGF0ZW1lbnRcbiAgICBnZXRUb2tlbigpO1xuICAgIGlmICh0b2tlblR5cGUgIT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiSWRlbnRpZmllciBleHBlY3RlZFwiKTtcbiAgICB9XG4gICAgZ3JhcGhbaWRdID0gdG9rZW47XG4gICAgZ2V0VG9rZW4oKTtcbiAgICAvLyBUT0RPOiBpbXBsZW1lbnQgY29tbWEgc2VwYXJhdGVkIGxpc3Qgd2l0aCBcImFfbGlzdDogSUQ9SUQgWycsJ10gW2FfbGlzdF0gXCJcbiAgfSBlbHNlIHtcbiAgICBwYXJzZU5vZGVTdGF0ZW1lbnQoZ3JhcGgsIGlkKTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGEgc3ViZ3JhcGhcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGggICAgcGFyZW50IGdyYXBoIG9iamVjdFxuICogQHJldHVybnMge29iamVjdCB8IG51bGx9IHN1YmdyYXBoXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3ViZ3JhcGgoZ3JhcGgpIHtcbiAgdmFyIHN1YmdyYXBoID0gbnVsbDtcblxuICAvLyBvcHRpb25hbCBzdWJncmFwaCBrZXl3b3JkXG4gIGlmICh0b2tlbiA9PT0gXCJzdWJncmFwaFwiKSB7XG4gICAgc3ViZ3JhcGggPSB7fTtcbiAgICBzdWJncmFwaC50eXBlID0gXCJzdWJncmFwaFwiO1xuICAgIGdldFRva2VuKCk7XG5cbiAgICAvLyBvcHRpb25hbCBncmFwaCBpZFxuICAgIGlmICh0b2tlblR5cGUgPT09IFRPS0VOVFlQRS5JREVOVElGSUVSKSB7XG4gICAgICBzdWJncmFwaC5pZCA9IHRva2VuO1xuICAgICAgZ2V0VG9rZW4oKTtcbiAgICB9XG4gIH1cblxuICAvLyBvcGVuIGFuZ2xlIGJyYWNrZXRcbiAgaWYgKHRva2VuID09PSBcIntcIikge1xuICAgIGdldFRva2VuKCk7XG5cbiAgICBpZiAoIXN1YmdyYXBoKSB7XG4gICAgICBzdWJncmFwaCA9IHt9O1xuICAgIH1cbiAgICBzdWJncmFwaC5wYXJlbnQgPSBncmFwaDtcbiAgICBzdWJncmFwaC5ub2RlID0gZ3JhcGgubm9kZTtcbiAgICBzdWJncmFwaC5lZGdlID0gZ3JhcGguZWRnZTtcbiAgICBzdWJncmFwaC5ncmFwaCA9IGdyYXBoLmdyYXBoO1xuXG4gICAgLy8gc3RhdGVtZW50c1xuICAgIHBhcnNlU3RhdGVtZW50cyhzdWJncmFwaCk7XG5cbiAgICAvLyBjbG9zZSBhbmdsZSBicmFja2V0XG4gICAgaWYgKHRva2VuICE9IFwifVwiKSB7XG4gICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkFuZ2xlIGJyYWNrZXQgfSBleHBlY3RlZFwiKTtcbiAgICB9XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIC8vIHJlbW92ZSB0ZW1wb3JhcnkgZGVmYXVsdCBvcHRpb25zXG4gICAgZGVsZXRlIHN1YmdyYXBoLm5vZGU7XG4gICAgZGVsZXRlIHN1YmdyYXBoLmVkZ2U7XG4gICAgZGVsZXRlIHN1YmdyYXBoLmdyYXBoO1xuICAgIGRlbGV0ZSBzdWJncmFwaC5wYXJlbnQ7XG5cbiAgICAvLyByZWdpc3RlciBhdCB0aGUgcGFyZW50IGdyYXBoXG4gICAgaWYgKCFncmFwaC5zdWJncmFwaHMpIHtcbiAgICAgIGdyYXBoLnN1YmdyYXBocyA9IFtdO1xuICAgIH1cbiAgICBncmFwaC5zdWJncmFwaHMucHVzaChzdWJncmFwaCk7XG4gIH1cblxuICByZXR1cm4gc3ViZ3JhcGg7XG59XG5cbi8qKlxuICogcGFyc2UgYW4gYXR0cmlidXRlIHN0YXRlbWVudCBsaWtlIFwibm9kZSBbc2hhcGU9Y2lyY2xlIGZvbnRTaXplPTE2XVwiLlxuICogQXZhaWxhYmxlIGtleXdvcmRzIGFyZSAnbm9kZScsICdlZGdlJywgJ2dyYXBoJy5cbiAqIFRoZSBwcmV2aW91cyBsaXN0IHdpdGggZGVmYXVsdCBhdHRyaWJ1dGVzIHdpbGwgYmUgcmVwbGFjZWRcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfSBrZXl3b3JkIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBhcnNlZCBhdHRyaWJ1dGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub2RlLCBlZGdlLCBncmFwaCksIG9yIG51bGwgaWYgbm90aGluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcGFyc2VkLlxuICovXG5mdW5jdGlvbiBwYXJzZUF0dHJpYnV0ZVN0YXRlbWVudChncmFwaCkge1xuICAvLyBhdHRyaWJ1dGUgc3RhdGVtZW50c1xuICBpZiAodG9rZW4gPT09IFwibm9kZVwiKSB7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIC8vIG5vZGUgYXR0cmlidXRlc1xuICAgIGdyYXBoLm5vZGUgPSBwYXJzZUF0dHJpYnV0ZUxpc3QoKTtcbiAgICByZXR1cm4gXCJub2RlXCI7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09IFwiZWRnZVwiKSB7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIC8vIGVkZ2UgYXR0cmlidXRlc1xuICAgIGdyYXBoLmVkZ2UgPSBwYXJzZUF0dHJpYnV0ZUxpc3QoKTtcbiAgICByZXR1cm4gXCJlZGdlXCI7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09IFwiZ3JhcGhcIikge1xuICAgIGdldFRva2VuKCk7XG5cbiAgICAvLyBncmFwaCBhdHRyaWJ1dGVzXG4gICAgZ3JhcGguZ3JhcGggPSBwYXJzZUF0dHJpYnV0ZUxpc3QoKTtcbiAgICByZXR1cm4gXCJncmFwaFwiO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogcGFyc2UgYSBub2RlIHN0YXRlbWVudFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGlkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTm9kZVN0YXRlbWVudChncmFwaCwgaWQpIHtcbiAgLy8gbm9kZSBzdGF0ZW1lbnRcbiAgdmFyIG5vZGUgPSB7XG4gICAgaWQ6IGlkLFxuICB9O1xuICB2YXIgYXR0ciA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuICBpZiAoYXR0cikge1xuICAgIG5vZGUuYXR0ciA9IGF0dHI7XG4gIH1cbiAgYWRkTm9kZShncmFwaCwgbm9kZSk7XG5cbiAgLy8gZWRnZSBzdGF0ZW1lbnRzXG4gIHBhcnNlRWRnZShncmFwaCwgaWQpO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuIGVkZ2Ugb3IgYSBzZXJpZXMgb2YgZWRnZXNcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBmcm9tICAgICAgICBJZCBvZiB0aGUgZnJvbSBub2RlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRWRnZShncmFwaCwgZnJvbSkge1xuICB3aGlsZSAodG9rZW4gPT09IFwiLT5cIiB8fCB0b2tlbiA9PT0gXCItLVwiKSB7XG4gICAgdmFyIHRvO1xuICAgIHZhciB0eXBlID0gdG9rZW47XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIHZhciBzdWJncmFwaCA9IHBhcnNlU3ViZ3JhcGgoZ3JhcGgpO1xuICAgIGlmIChzdWJncmFwaCkge1xuICAgICAgdG8gPSBzdWJncmFwaDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRva2VuVHlwZSAhPSBUT0tFTlRZUEUuSURFTlRJRklFUikge1xuICAgICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIklkZW50aWZpZXIgb3Igc3ViZ3JhcGggZXhwZWN0ZWRcIik7XG4gICAgICB9XG4gICAgICB0byA9IHRva2VuO1xuICAgICAgYWRkTm9kZShncmFwaCwge1xuICAgICAgICBpZDogdG8sXG4gICAgICB9KTtcbiAgICAgIGdldFRva2VuKCk7XG4gICAgfVxuXG4gICAgLy8gcGFyc2UgZWRnZSBhdHRyaWJ1dGVzXG4gICAgdmFyIGF0dHIgPSBwYXJzZUF0dHJpYnV0ZUxpc3QoKTtcblxuICAgIC8vIGNyZWF0ZSBlZGdlXG4gICAgdmFyIGVkZ2UgPSBjcmVhdGVFZGdlKGdyYXBoLCBmcm9tLCB0bywgdHlwZSwgYXR0cik7XG4gICAgYWRkRWRnZShncmFwaCwgZWRnZSk7XG5cbiAgICBmcm9tID0gdG87XG4gIH1cbn1cblxuLyoqXG4gKiBBcyBleHBsYWluZWQgaW4gWzFdLCBncmFwaHZpeiBoYXMgbGltaXRhdGlvbnMgZm9yIGNvbWJpbmF0aW9uIG9mXG4gKiBhcnJvd1toZWFkfHRhaWxdIGFuZCBkaXIuIElmIGF0dHJpYnV0ZSBsaXN0IGluY2x1ZGVzICdkaXInLFxuICogZm9sbG93aW5nIGNhc2VzIGp1c3QgYmUgc3VwcG9ydGVkLlxuICogICAxLiBib3RoIG9yIG5vbmUgKyBhcnJvd2hlYWQsIGFycm93dGFpbFxuICogICAyLiBmb3J3YXJkICsgYXJyb3doZWFkIChhcnJvd3RhaWwgaXMgbm90IGFmZmVkdGVkKVxuICogICAzLiBiYWNrICsgYXJyb3d0YWlsIChhcnJvd2hlYWQgaXMgbm90IGFmZmVjdGVkKVxuICogWzFdIGh0dHBzOi8vd3d3LmdyYXBodml6Lm9yZy9kb2MvaW5mby9hdHRycy5odG1sI2g6dW5kaXJfbm90ZVxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcGFyc2VBdHRyaWJ1dGVMaXN0KCkgdG8gcGFyc2UgJ2RpcidcbiAqIGF0dHJpYnV0ZSB3aXRoIGdpdmVuICdhdHRyX25hbWVzJyBhbmQgJ2F0dHJfbGlzdCcuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGF0dHJfbmFtZXMgIEFycmF5IG9mIGF0dHJpYnV0ZSBuYW1lc1xuICogQHBhcmFtIHtvYmplY3R9IGF0dHJfbGlzdCAgQXJyYXkgb2Ygb2JqZWN0cyBvZiBhdHRyaWJ1dGUgc2V0XG4gKiBAcmV0dXJucyB7b2JqZWN0fSBhdHRyX2xpc3QgIFVwZGF0ZWQgYXR0cl9saXN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlRGlyQXR0cmlidXRlKGF0dHJfbmFtZXMsIGF0dHJfbGlzdCkge1xuICB2YXIgaTtcbiAgaWYgKGF0dHJfbmFtZXMuaW5jbHVkZXMoXCJkaXJcIikpIHtcbiAgICB2YXIgaWR4ID0ge307IC8vIGdldCBpbmRleCBvZiAnYXJyb3dzJyBhbmQgJ2RpcidcbiAgICBpZHguYXJyb3dzID0ge307XG4gICAgZm9yIChpID0gMDsgaSA8IGF0dHJfbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGF0dHJfbGlzdFtpXS5uYW1lID09PSBcImFycm93c1wiKSB7XG4gICAgICAgIGlmIChhdHRyX2xpc3RbaV0udmFsdWUudG8gIT0gbnVsbCkge1xuICAgICAgICAgIGlkeC5hcnJvd3MudG8gPSBpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0dHJfbGlzdFtpXS52YWx1ZS5mcm9tICE9IG51bGwpIHtcbiAgICAgICAgICBpZHguYXJyb3dzLmZyb20gPSBpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiSW52YWxpZCB2YWx1ZSBvZiBhcnJvd3NcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwiZGlyXCIpIHtcbiAgICAgICAgaWR4LmRpciA9IGk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZmlyc3QsIGFkZCBkZWZhdWx0IGFycm93IHNoYXBlIGlmIGl0IGlzIG5vdCBhc3NpZ25lZCB0byBhdm9pZCBlcnJvclxuICAgIHZhciBkaXJfdHlwZSA9IGF0dHJfbGlzdFtpZHguZGlyXS52YWx1ZTtcbiAgICBpZiAoIWF0dHJfbmFtZXMuaW5jbHVkZXMoXCJhcnJvd3NcIikpIHtcbiAgICAgIGlmIChkaXJfdHlwZSA9PT0gXCJib3RoXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgdG86IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICAgIGF0dHJfbGlzdC5wdXNoKHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmRpcl0uYXR0cixcbiAgICAgICAgICBuYW1lOiBcImFycm93c1wiLFxuICAgICAgICAgIHZhbHVlOiB7IGZyb206IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLmZyb20gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSBpZiAoZGlyX3R5cGUgPT09IFwiZm9yd2FyZFwiKSB7XG4gICAgICAgIGF0dHJfbGlzdC5wdXNoKHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmRpcl0uYXR0cixcbiAgICAgICAgICBuYW1lOiBcImFycm93c1wiLFxuICAgICAgICAgIHZhbHVlOiB7IHRvOiB7IGVuYWJsZWQ6IHRydWUgfSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWR4LmFycm93cy50byA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJiYWNrXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgZnJvbTogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJub25lXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcignSW52YWxpZCBkaXIgdHlwZSBcIicgKyBkaXJfdHlwZSArICdcIicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmcm9tX3R5cGU7XG4gICAgdmFyIHRvX3R5cGU7XG4gICAgLy8gdXBkYXRlICdhcnJvd3MnIGF0dHJpYnV0ZSBmcm9tICdkaXInLlxuICAgIGlmIChkaXJfdHlwZSA9PT0gXCJib3RoXCIpIHtcbiAgICAgIC8vIGJvdGggb2Ygc2hhcGVzIG9mICdmcm9tJyBhbmQgJ3RvJyBhcmUgZ2l2ZW5cbiAgICAgIGlmIChpZHguYXJyb3dzLnRvICYmIGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGF0dHJfbGlzdC5zcGxpY2UoaWR4LmFycm93cy5mcm9tLCAxKTtcblxuICAgICAgICAvLyBzaGFwZSBvZiAndG8nIGlzIGFzc2lnbmVkIGFuZCB1c2UgZGVmYXVsdCB0byAnZnJvbSdcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiYXJyb3dcIjtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gb25seSBzaGFwZSBvZiAnZnJvbScgaXMgYXNzaWduZWQgYW5kIHVzZSBkZWZhdWx0IGZvciAndG8nXG4gICAgICB9IGVsc2UgaWYgKGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlyX3R5cGUgPT09IFwiYmFja1wiKSB7XG4gICAgICAvLyBnaXZlbiBib3RoIG9mIHNoYXBlcywgYnV0IHVzZSBvbmx5ICdmcm9tJ1xuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGdpdmVuIHNoYXBlIG9mICd0bycsIGJ1dCBkb2VzIG5vdCB1c2UgaXRcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gXCJcIjtcbiAgICAgICAgZnJvbV90eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBpZHguYXJyb3dzLmZyb20gPSBpZHguYXJyb3dzLnRvO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBhc3NpZ24gZ2l2ZW4gJ2Zyb20nIHNoYXBlXG4gICAgICB9IGVsc2UgaWYgKGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gXCJcIjtcbiAgICAgICAgZnJvbV90eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0udmFsdWUuZnJvbS50eXBlO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGZyb206IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJub25lXCIpIHtcbiAgICAgIHZhciBpZHhfYXJyb3c7XG4gICAgICBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICBpZHhfYXJyb3cgPSBpZHguYXJyb3dzLnRvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWR4X2Fycm93ID0gaWR4LmFycm93cy5mcm9tO1xuICAgICAgfVxuXG4gICAgICBhdHRyX2xpc3RbaWR4X2Fycm93XSA9IHtcbiAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeF9hcnJvd10uYXR0cixcbiAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeF9hcnJvd10ubmFtZSxcbiAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoZGlyX3R5cGUgPT09IFwiZm9yd2FyZFwiKSB7XG4gICAgICAvLyBnaXZlbiBib3RoIG9mIHNoYXBlcywgYnV0IHVzZSBvbmx5ICd0bydcbiAgICAgIGlmIChpZHguYXJyb3dzLnRvICYmIGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFzc2lnbiBnaXZlbiAndG8nIHNoYXBlXG4gICAgICB9IGVsc2UgaWYgKGlkeC5hcnJvd3MudG8pIHtcbiAgICAgICAgdG9fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS52YWx1ZS50by50eXBlO1xuICAgICAgICBmcm9tX3R5cGUgPSBcIlwiO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBnaXZlbiBzaGFwZSBvZiAnZnJvbScsIGJ1dCBkb2VzIG5vdCB1c2UgaXRcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBpZHguYXJyb3dzLmZyb207XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICB0bzoge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS52YWx1ZS50by50eXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcignSW52YWxpZCBkaXIgdHlwZSBcIicgKyBkaXJfdHlwZSArICdcIicpO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSAnZGlyJyBhdHRyaWJ1dGUgbm8gbmVlZCBhbnltb3JlXG4gICAgYXR0cl9saXN0LnNwbGljZShpZHguZGlyLCAxKTtcbiAgfVxuICByZXR1cm4gYXR0cl9saXN0O1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc2V0IHdpdGggYXR0cmlidXRlcyxcbiAqIGZvciBleGFtcGxlIFtsYWJlbD1cIjEuMDAwXCIsIHNoYXBlPXNvbGlkXVxuICpcbiAqIEByZXR1cm5zIHtvYmplY3QgfCBudWxsfSBhdHRyXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlTGlzdCgpIHtcbiAgdmFyIGk7XG4gIHZhciBhdHRyID0gbnVsbDtcblxuICAvLyBlZGdlIHN0eWxlcyBvZiBkb3QgYW5kIHZpc1xuICB2YXIgZWRnZVN0eWxlcyA9IHtcbiAgICBkYXNoZWQ6IHRydWUsXG4gICAgc29saWQ6IGZhbHNlLFxuICAgIGRvdHRlZDogWzEsIDVdLFxuICB9O1xuXG4gIC8qKlxuICAgKiBEZWZpbmUgYXJyb3cgdHlwZXMuXG4gICAqIHZpcyBjdXJyZW50bHkgc3VwcG9ydHMgdHlwZXMgZGVmaW5lZCBpbiAnYXJyb3dUeXBlcycuXG4gICAqIERldGFpbHMgb2YgYXJyb3cgc2hhcGVzIGFyZSBkZXNjcmliZWQgaW5cbiAgICogaHR0cDovL3d3dy5ncmFwaHZpei5vcmcvY29udGVudC9hcnJvdy1zaGFwZXNcbiAgICovXG4gIHZhciBhcnJvd1R5cGVzID0ge1xuICAgIGRvdDogXCJjaXJjbGVcIixcbiAgICBib3g6IFwiYm94XCIsXG4gICAgY3JvdzogXCJjcm93XCIsXG4gICAgY3VydmU6IFwiY3VydmVcIixcbiAgICBpY3VydmU6IFwiaW52X2N1cnZlXCIsXG4gICAgbm9ybWFsOiBcInRyaWFuZ2xlXCIsXG4gICAgaW52OiBcImludl90cmlhbmdsZVwiLFxuICAgIGRpYW1vbmQ6IFwiZGlhbW9uZFwiLFxuICAgIHRlZTogXCJiYXJcIixcbiAgICB2ZWU6IFwidmVlXCIsXG4gIH07XG5cbiAgLyoqXG4gICAqICdhdHRyX2xpc3QnIGNvbnRhaW5zIGF0dHJpYnV0ZXMgZm9yIGNoZWNraW5nIGlmIHNvbWUgb2YgdGhlbSBhcmUgYWZmZWN0ZWRcbiAgICogbGF0ZXIuIEZvciBpbnN0YW5jZSwgYm90aCBvZiAnYXJyb3doZWFkJyBhbmQgJ2RpcicgKGVkZ2Ugc3R5bGUgZGVmaW5lZFxuICAgKiBpbiBET1QpIG1ha2UgY2hhbmdlcyB0byAnYXJyb3dzJyBhdHRyaWJ1dGUgaW4gdmlzLlxuICAgKi9cbiAgdmFyIGF0dHJfbGlzdCA9IG5ldyBBcnJheSgpO1xuICB2YXIgYXR0cl9uYW1lcyA9IG5ldyBBcnJheSgpOyAvLyB1c2VkIGZvciBjaGVja2luZyB0aGUgY2FzZS5cblxuICAvLyBwYXJzZSBhdHRyaWJ1dGVzXG4gIHdoaWxlICh0b2tlbiA9PT0gXCJbXCIpIHtcbiAgICBnZXRUb2tlbigpO1xuICAgIGF0dHIgPSB7fTtcbiAgICB3aGlsZSAodG9rZW4gIT09IFwiXCIgJiYgdG9rZW4gIT0gXCJdXCIpIHtcbiAgICAgIGlmICh0b2tlblR5cGUgIT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJBdHRyaWJ1dGUgbmFtZSBleHBlY3RlZFwiKTtcbiAgICAgIH1cbiAgICAgIHZhciBuYW1lID0gdG9rZW47XG5cbiAgICAgIGdldFRva2VuKCk7XG4gICAgICBpZiAodG9rZW4gIT0gXCI9XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJFcXVhbCBzaWduID0gZXhwZWN0ZWRcIik7XG4gICAgICB9XG4gICAgICBnZXRUb2tlbigpO1xuXG4gICAgICBpZiAodG9rZW5UeXBlICE9IFRPS0VOVFlQRS5JREVOVElGSUVSKSB7XG4gICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiQXR0cmlidXRlIHZhbHVlIGV4cGVjdGVkXCIpO1xuICAgICAgfVxuICAgICAgdmFyIHZhbHVlID0gdG9rZW47XG5cbiAgICAgIC8vIGNvbnZlcnQgZnJvbSBkb3Qgc3R5bGUgdG8gdmlzXG4gICAgICBpZiAobmFtZSA9PT0gXCJzdHlsZVwiKSB7XG4gICAgICAgIHZhbHVlID0gZWRnZVN0eWxlc1t2YWx1ZV07XG4gICAgICB9XG5cbiAgICAgIHZhciBhcnJvd1R5cGU7XG4gICAgICBpZiAobmFtZSA9PT0gXCJhcnJvd2hlYWRcIikge1xuICAgICAgICBhcnJvd1R5cGUgPSBhcnJvd1R5cGVzW3ZhbHVlXTtcbiAgICAgICAgbmFtZSA9IFwiYXJyb3dzXCI7XG4gICAgICAgIHZhbHVlID0geyB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBhcnJvd1R5cGUgfSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSA9PT0gXCJhcnJvd3RhaWxcIikge1xuICAgICAgICBhcnJvd1R5cGUgPSBhcnJvd1R5cGVzW3ZhbHVlXTtcbiAgICAgICAgbmFtZSA9IFwiYXJyb3dzXCI7XG4gICAgICAgIHZhbHVlID0geyBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGFycm93VHlwZSB9IH07XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdC5wdXNoKHsgYXR0cjogYXR0ciwgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgYXR0cl9uYW1lcy5wdXNoKG5hbWUpO1xuXG4gICAgICBnZXRUb2tlbigpO1xuICAgICAgaWYgKHRva2VuID09IFwiLFwiKSB7XG4gICAgICAgIGdldFRva2VuKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRva2VuICE9IFwiXVwiKSB7XG4gICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkJyYWNrZXQgXSBleHBlY3RlZFwiKTtcbiAgICB9XG4gICAgZ2V0VG9rZW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcyBleHBsYWluZWQgaW4gWzFdLCBncmFwaHZpeiBoYXMgbGltaXRhdGlvbnMgZm9yIGNvbWJpbmF0aW9uIG9mXG4gICAqIGFycm93W2hlYWR8dGFpbF0gYW5kIGRpci4gSWYgYXR0cmlidXRlIGxpc3QgaW5jbHVkZXMgJ2RpcicsXG4gICAqIGZvbGxvd2luZyBjYXNlcyBqdXN0IGJlIHN1cHBvcnRlZC5cbiAgICogICAxLiBib3RoIG9yIG5vbmUgKyBhcnJvd2hlYWQsIGFycm93dGFpbFxuICAgKiAgIDIuIGZvcndhcmQgKyBhcnJvd2hlYWQgKGFycm93dGFpbCBpcyBub3QgYWZmZWR0ZWQpXG4gICAqICAgMy4gYmFjayArIGFycm93dGFpbCAoYXJyb3doZWFkIGlzIG5vdCBhZmZlY3RlZClcbiAgICogWzFdIGh0dHBzOi8vd3d3LmdyYXBodml6Lm9yZy9kb2MvaW5mby9hdHRycy5odG1sI2g6dW5kaXJfbm90ZVxuICAgKi9cbiAgaWYgKGF0dHJfbmFtZXMuaW5jbHVkZXMoXCJkaXJcIikpIHtcbiAgICB2YXIgaWR4ID0ge307IC8vIGdldCBpbmRleCBvZiAnYXJyb3dzJyBhbmQgJ2RpcidcbiAgICBpZHguYXJyb3dzID0ge307XG4gICAgZm9yIChpID0gMDsgaSA8IGF0dHJfbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGF0dHJfbGlzdFtpXS5uYW1lID09PSBcImFycm93c1wiKSB7XG4gICAgICAgIGlmIChhdHRyX2xpc3RbaV0udmFsdWUudG8gIT0gbnVsbCkge1xuICAgICAgICAgIGlkeC5hcnJvd3MudG8gPSBpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0dHJfbGlzdFtpXS52YWx1ZS5mcm9tICE9IG51bGwpIHtcbiAgICAgICAgICBpZHguYXJyb3dzLmZyb20gPSBpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiSW52YWxpZCB2YWx1ZSBvZiBhcnJvd3NcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwiZGlyXCIpIHtcbiAgICAgICAgaWR4LmRpciA9IGk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZmlyc3QsIGFkZCBkZWZhdWx0IGFycm93IHNoYXBlIGlmIGl0IGlzIG5vdCBhc3NpZ25lZCB0byBhdm9pZCBlcnJvclxuICAgIHZhciBkaXJfdHlwZSA9IGF0dHJfbGlzdFtpZHguZGlyXS52YWx1ZTtcbiAgICBpZiAoIWF0dHJfbmFtZXMuaW5jbHVkZXMoXCJhcnJvd3NcIikpIHtcbiAgICAgIGlmIChkaXJfdHlwZSA9PT0gXCJib3RoXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgdG86IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICAgIGF0dHJfbGlzdC5wdXNoKHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmRpcl0uYXR0cixcbiAgICAgICAgICBuYW1lOiBcImFycm93c1wiLFxuICAgICAgICAgIHZhbHVlOiB7IGZyb206IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLmZyb20gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSBpZiAoZGlyX3R5cGUgPT09IFwiZm9yd2FyZFwiKSB7XG4gICAgICAgIGF0dHJfbGlzdC5wdXNoKHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmRpcl0uYXR0cixcbiAgICAgICAgICBuYW1lOiBcImFycm93c1wiLFxuICAgICAgICAgIHZhbHVlOiB7IHRvOiB7IGVuYWJsZWQ6IHRydWUgfSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWR4LmFycm93cy50byA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJiYWNrXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgZnJvbTogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJub25lXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcignSW52YWxpZCBkaXIgdHlwZSBcIicgKyBkaXJfdHlwZSArICdcIicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmcm9tX3R5cGU7XG4gICAgdmFyIHRvX3R5cGU7XG4gICAgLy8gdXBkYXRlICdhcnJvd3MnIGF0dHJpYnV0ZSBmcm9tICdkaXInLlxuICAgIGlmIChkaXJfdHlwZSA9PT0gXCJib3RoXCIpIHtcbiAgICAgIC8vIGJvdGggb2Ygc2hhcGVzIG9mICdmcm9tJyBhbmQgJ3RvJyBhcmUgZ2l2ZW5cbiAgICAgIGlmIChpZHguYXJyb3dzLnRvICYmIGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGF0dHJfbGlzdC5zcGxpY2UoaWR4LmFycm93cy5mcm9tLCAxKTtcblxuICAgICAgICAvLyBzaGFwZSBvZiAndG8nIGlzIGFzc2lnbmVkIGFuZCB1c2UgZGVmYXVsdCB0byAnZnJvbSdcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiYXJyb3dcIjtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gb25seSBzaGFwZSBvZiAnZnJvbScgaXMgYXNzaWduZWQgYW5kIHVzZSBkZWZhdWx0IGZvciAndG8nXG4gICAgICB9IGVsc2UgaWYgKGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlyX3R5cGUgPT09IFwiYmFja1wiKSB7XG4gICAgICAvLyBnaXZlbiBib3RoIG9mIHNoYXBlcywgYnV0IHVzZSBvbmx5ICdmcm9tJ1xuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGdpdmVuIHNoYXBlIG9mICd0bycsIGJ1dCBkb2VzIG5vdCB1c2UgaXRcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gXCJcIjtcbiAgICAgICAgZnJvbV90eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBpZHguYXJyb3dzLmZyb20gPSBpZHguYXJyb3dzLnRvO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBhc3NpZ24gZ2l2ZW4gJ2Zyb20nIHNoYXBlXG4gICAgICB9IGVsc2UgaWYgKGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gXCJcIjtcbiAgICAgICAgZnJvbV90eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0udmFsdWUuZnJvbS50eXBlO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGZyb206IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJub25lXCIpIHtcbiAgICAgIHZhciBpZHhfYXJyb3c7XG4gICAgICBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICBpZHhfYXJyb3cgPSBpZHguYXJyb3dzLnRvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWR4X2Fycm93ID0gaWR4LmFycm93cy5mcm9tO1xuICAgICAgfVxuXG4gICAgICBhdHRyX2xpc3RbaWR4X2Fycm93XSA9IHtcbiAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeF9hcnJvd10uYXR0cixcbiAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeF9hcnJvd10ubmFtZSxcbiAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoZGlyX3R5cGUgPT09IFwiZm9yd2FyZFwiKSB7XG4gICAgICAvLyBnaXZlbiBib3RoIG9mIHNoYXBlcywgYnV0IHVzZSBvbmx5ICd0bydcbiAgICAgIGlmIChpZHguYXJyb3dzLnRvICYmIGlkeC5hcnJvd3MuZnJvbSkge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFzc2lnbiBnaXZlbiAndG8nIHNoYXBlXG4gICAgICB9IGVsc2UgaWYgKGlkeC5hcnJvd3MudG8pIHtcbiAgICAgICAgdG9fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS52YWx1ZS50by50eXBlO1xuICAgICAgICBmcm9tX3R5cGUgPSBcIlwiO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBnaXZlbiBzaGFwZSBvZiAnZnJvbScsIGJ1dCBkb2VzIG5vdCB1c2UgaXRcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBpZHguYXJyb3dzLmZyb207XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZSB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoJ0ludmFsaWQgZGlyIHR5cGUgXCInICsgZGlyX3R5cGUgKyAnXCInKTtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgJ2RpcicgYXR0cmlidXRlIG5vIG5lZWQgYW55bW9yZVxuICAgIGF0dHJfbGlzdC5zcGxpY2UoaWR4LmRpciwgMSk7XG4gIH1cblxuICAvLyBwYXJzZSAncGVud2lkdGgnXG4gIHZhciBub2ZfYXR0cl9saXN0O1xuICBpZiAoYXR0cl9uYW1lcy5pbmNsdWRlcyhcInBlbndpZHRoXCIpKSB7XG4gICAgdmFyIHRtcF9hdHRyX2xpc3QgPSBbXTtcblxuICAgIG5vZl9hdHRyX2xpc3QgPSBhdHRyX2xpc3QubGVuZ3RoO1xuICAgIGZvciAoaSA9IDA7IGkgPCBub2ZfYXR0cl9saXN0OyBpKyspIHtcbiAgICAgIC8vIGV4Y2x1ZGUgJ3dpZHRoJyBmcm9tIGF0dHJfbGlzdCBpZiAncGVud2lkdGgnIGV4aXN0c1xuICAgICAgaWYgKGF0dHJfbGlzdFtpXS5uYW1lICE9PSBcIndpZHRoXCIpIHtcbiAgICAgICAgaWYgKGF0dHJfbGlzdFtpXS5uYW1lID09PSBcInBlbndpZHRoXCIpIHtcbiAgICAgICAgICBhdHRyX2xpc3RbaV0ubmFtZSA9IFwid2lkdGhcIjtcbiAgICAgICAgfVxuICAgICAgICB0bXBfYXR0cl9saXN0LnB1c2goYXR0cl9saXN0W2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXR0cl9saXN0ID0gdG1wX2F0dHJfbGlzdDtcbiAgfVxuXG4gIG5vZl9hdHRyX2xpc3QgPSBhdHRyX2xpc3QubGVuZ3RoO1xuICBmb3IgKGkgPSAwOyBpIDwgbm9mX2F0dHJfbGlzdDsgaSsrKSB7XG4gICAgc2V0VmFsdWUoYXR0cl9saXN0W2ldLmF0dHIsIGF0dHJfbGlzdFtpXS5uYW1lLCBhdHRyX2xpc3RbaV0udmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGF0dHI7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgc3ludGF4IGVycm9yIHdpdGggZXh0cmEgaW5mb3JtYXRpb24gb24gY3VycmVudCB0b2tlbiBhbmQgaW5kZXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtTeW50YXhFcnJvcn0gZXJyXG4gKi9cbmZ1bmN0aW9uIG5ld1N5bnRheEVycm9yKG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBTeW50YXhFcnJvcihcbiAgICBtZXNzYWdlICsgJywgZ290IFwiJyArIGNob3AodG9rZW4sIDMwKSArICdcIiAoY2hhciAnICsgaW5kZXggKyBcIilcIlxuICApO1xufVxuXG4vKipcbiAqIENob3Agb2ZmIHRleHQgYWZ0ZXIgYSBtYXhpbXVtIGxlbmd0aFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge251bWJlcn0gbWF4TGVuZ3RoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjaG9wKHRleHQsIG1heExlbmd0aCkge1xuICByZXR1cm4gdGV4dC5sZW5ndGggPD0gbWF4TGVuZ3RoID8gdGV4dCA6IHRleHQuc3Vic3RyKDAsIDI3KSArIFwiLi4uXCI7XG59XG5cbi8qKlxuICogRXhlY3V0ZSBhIGZ1bmN0aW9uIGZuIGZvciBlYWNoIHBhaXIgb2YgZWxlbWVudHMgaW4gdHdvIGFycmF5c1xuICpcbiAqIEBwYXJhbSB7QXJyYXkgfCAqfSBhcnJheTFcbiAqIEBwYXJhbSB7QXJyYXkgfCAqfSBhcnJheTJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gyKGFycmF5MSwgYXJyYXkyLCBmbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheTEpKSB7XG4gICAgYXJyYXkxLmZvckVhY2goZnVuY3Rpb24gKGVsZW0xKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheTIpKSB7XG4gICAgICAgIGFycmF5Mi5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtMikge1xuICAgICAgICAgIGZuKGVsZW0xLCBlbGVtMik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm4oZWxlbTEsIGFycmF5Mik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXkyKSkge1xuICAgICAgYXJyYXkyLmZvckVhY2goZnVuY3Rpb24gKGVsZW0yKSB7XG4gICAgICAgIGZuKGFycmF5MSwgZWxlbTIpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZuKGFycmF5MSwgYXJyYXkyKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTZXQgYSBuZXN0ZWQgcHJvcGVydHkgb24gYW4gb2JqZWN0XG4gKiBXaGVuIG5lc3RlZCBvYmplY3RzIGFyZSBtaXNzaW5nLCB0aGV5IHdpbGwgYmUgY3JlYXRlZC5cbiAqIEZvciBleGFtcGxlIHNldFByb3Aoe30sICdmb250LmNvbG9yJywgJ3JlZCcpIHdpbGwgcmV0dXJuIHtmb250OiB7Y29sb3I6ICdyZWQnfX1cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAgIEEgZG90IHNlcGFyYXRlZCBzdHJpbmcgbGlrZSAnZm9udC5jb2xvcidcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgICAgICAgVmFsdWUgZm9yIHRoZSBwcm9wZXJ0eVxuICogQHJldHVybnMge29iamVjdH0gUmV0dXJucyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBhbGxvd3MgZm9yIGNoYWluaW5nLlxuICovXG5mdW5jdGlvbiBzZXRQcm9wKG9iamVjdCwgcGF0aCwgdmFsdWUpIHtcbiAgdmFyIG5hbWVzID0gcGF0aC5zcGxpdChcIi5cIik7XG4gIHZhciBwcm9wID0gbmFtZXMucG9wKCk7XG5cbiAgLy8gdHJhdmVyc2Ugb3ZlciB0aGUgbmVzdGVkIG9iamVjdHNcbiAgdmFyIG9iaiA9IG9iamVjdDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBuYW1lID0gbmFtZXNbaV07XG4gICAgaWYgKCEobmFtZSBpbiBvYmopKSB7XG4gICAgICBvYmpbbmFtZV0gPSB7fTtcbiAgICB9XG4gICAgb2JqID0gb2JqW25hbWVdO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICBvYmpbcHJvcF0gPSB2YWx1ZTtcblxuICByZXR1cm4gb2JqZWN0O1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gb2JqZWN0IHdpdGggRE9UIGF0dHJpYnV0ZXMgdG8gdGhlaXIgdmlzLmpzIGVxdWl2YWxlbnRzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBhdHRyICAgICBPYmplY3Qgd2l0aCBET1QgYXR0cmlidXRlc1xuICogQHBhcmFtIHtvYmplY3R9IG1hcHBpbmdcbiAqIEByZXR1cm5zIHtvYmplY3R9ICAgICAgICAgUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB2aXMuanMgYXR0cmlidXRlc1xuICovXG5mdW5jdGlvbiBjb252ZXJ0QXR0cihhdHRyLCBtYXBwaW5nKSB7XG4gIHZhciBjb252ZXJ0ZWQgPSB7fTtcblxuICBmb3IgKHZhciBwcm9wIGluIGF0dHIpIHtcbiAgICBpZiAoYXR0ci5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgdmFyIHZpc1Byb3AgPSBtYXBwaW5nW3Byb3BdO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmlzUHJvcCkpIHtcbiAgICAgICAgdmlzUHJvcC5mb3JFYWNoKGZ1bmN0aW9uICh2aXNQcm9wSSkge1xuICAgICAgICAgIHNldFByb3AoY29udmVydGVkLCB2aXNQcm9wSSwgYXR0cltwcm9wXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmlzUHJvcCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzZXRQcm9wKGNvbnZlcnRlZCwgdmlzUHJvcCwgYXR0cltwcm9wXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRQcm9wKGNvbnZlcnRlZCwgcHJvcCwgYXR0cltwcm9wXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbnZlcnRlZDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBncmFwaCBpbiBET1QgbGFuZ3VhZ2UgaW50byBhIG1hcCBjb250YWluaW5nXG4gKiB3aXRoIG5vZGVzIGFuZCBlZGdlcyBpbiB0aGUgZm9ybWF0IG9mIGdyYXBoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhICAgICAgICAgVGV4dCBjb250YWluaW5nIGEgZ3JhcGggaW4gRE9ULW5vdGF0aW9uXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBncmFwaERhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERPVFRvR3JhcGgoZGF0YSkge1xuICAvLyBwYXJzZSB0aGUgRE9UIGZpbGVcbiAgdmFyIGRvdERhdGEgPSBwYXJzZURPVChkYXRhKTtcbiAgdmFyIGdyYXBoRGF0YSA9IHtcbiAgICBub2RlczogW10sXG4gICAgZWRnZXM6IFtdLFxuICAgIG9wdGlvbnM6IHt9LFxuICB9O1xuXG4gIC8vIGNvcHkgdGhlIG5vZGVzXG4gIGlmIChkb3REYXRhLm5vZGVzKSB7XG4gICAgZG90RGF0YS5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChkb3ROb2RlKSB7XG4gICAgICB2YXIgZ3JhcGhOb2RlID0ge1xuICAgICAgICBpZDogZG90Tm9kZS5pZCxcbiAgICAgICAgbGFiZWw6IFN0cmluZyhkb3ROb2RlLmxhYmVsIHx8IGRvdE5vZGUuaWQpLFxuICAgICAgfTtcbiAgICAgIG1lcmdlKGdyYXBoTm9kZSwgY29udmVydEF0dHIoZG90Tm9kZS5hdHRyLCBOT0RFX0FUVFJfTUFQUElORykpO1xuICAgICAgaWYgKGdyYXBoTm9kZS5pbWFnZSkge1xuICAgICAgICBncmFwaE5vZGUuc2hhcGUgPSBcImltYWdlXCI7XG4gICAgICB9XG4gICAgICBncmFwaERhdGEubm9kZXMucHVzaChncmFwaE5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gY29weSB0aGUgZWRnZXNcbiAgaWYgKGRvdERhdGEuZWRnZXMpIHtcbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGFuIGVkZ2UgaW4gRE9UIGZvcm1hdCB0byBhbiBlZGdlIHdpdGggVmlzR3JhcGggZm9ybWF0XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZG90RWRnZVxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9IGdyYXBoRWRnZVxuICAgICAqL1xuICAgIHZhciBjb252ZXJ0RWRnZSA9IGZ1bmN0aW9uIChkb3RFZGdlKSB7XG4gICAgICB2YXIgZ3JhcGhFZGdlID0ge1xuICAgICAgICBmcm9tOiBkb3RFZGdlLmZyb20sXG4gICAgICAgIHRvOiBkb3RFZGdlLnRvLFxuICAgICAgfTtcbiAgICAgIG1lcmdlKGdyYXBoRWRnZSwgY29udmVydEF0dHIoZG90RWRnZS5hdHRyLCBFREdFX0FUVFJfTUFQUElORykpO1xuXG4gICAgICAvLyBBZGQgYXJyb3dzIGF0dHJpYnV0ZSB0byBkZWZhdWx0IHN0eWxlZCBhcnJvdy5cbiAgICAgIC8vIFRoZSByZWFzb24gd2h5IGRlZmF1bHQgc3R5bGUgaXMgbm90IGFkZGVkIGluIHBhcnNlQXR0cmlidXRlTGlzdCgpIGlzXG4gICAgICAvLyBiZWNhdXNlIG9ubHkgZGVmYXVsdCBpcyBjbGVhcmVkIGJlZm9yZSBoZXJlLlxuICAgICAgaWYgKGdyYXBoRWRnZS5hcnJvd3MgPT0gbnVsbCAmJiBkb3RFZGdlLnR5cGUgPT09IFwiLT5cIikge1xuICAgICAgICBncmFwaEVkZ2UuYXJyb3dzID0gXCJ0b1wiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZ3JhcGhFZGdlO1xuICAgIH07XG5cbiAgICBkb3REYXRhLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGRvdEVkZ2UpIHtcbiAgICAgIHZhciBmcm9tLCB0bztcbiAgICAgIGlmIChkb3RFZGdlLmZyb20gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgZnJvbSA9IGRvdEVkZ2UuZnJvbS5ub2RlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyb20gPSB7XG4gICAgICAgICAgaWQ6IGRvdEVkZ2UuZnJvbSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRvdEVkZ2UudG8gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdG8gPSBkb3RFZGdlLnRvLm5vZGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG8gPSB7XG4gICAgICAgICAgaWQ6IGRvdEVkZ2UudG8sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChkb3RFZGdlLmZyb20gaW5zdGFuY2VvZiBPYmplY3QgJiYgZG90RWRnZS5mcm9tLmVkZ2VzKSB7XG4gICAgICAgIGRvdEVkZ2UuZnJvbS5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJFZGdlKSB7XG4gICAgICAgICAgdmFyIGdyYXBoRWRnZSA9IGNvbnZlcnRFZGdlKHN1YkVkZ2UpO1xuICAgICAgICAgIGdyYXBoRGF0YS5lZGdlcy5wdXNoKGdyYXBoRWRnZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmb3JFYWNoMihmcm9tLCB0bywgZnVuY3Rpb24gKGZyb20sIHRvKSB7XG4gICAgICAgIHZhciBzdWJFZGdlID0gY3JlYXRlRWRnZShcbiAgICAgICAgICBncmFwaERhdGEsXG4gICAgICAgICAgZnJvbS5pZCxcbiAgICAgICAgICB0by5pZCxcbiAgICAgICAgICBkb3RFZGdlLnR5cGUsXG4gICAgICAgICAgZG90RWRnZS5hdHRyXG4gICAgICAgICk7XG4gICAgICAgIHZhciBncmFwaEVkZ2UgPSBjb252ZXJ0RWRnZShzdWJFZGdlKTtcbiAgICAgICAgZ3JhcGhEYXRhLmVkZ2VzLnB1c2goZ3JhcGhFZGdlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZG90RWRnZS50byBpbnN0YW5jZW9mIE9iamVjdCAmJiBkb3RFZGdlLnRvLmVkZ2VzKSB7XG4gICAgICAgIGRvdEVkZ2UudG8uZWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoc3ViRWRnZSkge1xuICAgICAgICAgIHZhciBncmFwaEVkZ2UgPSBjb252ZXJ0RWRnZShzdWJFZGdlKTtcbiAgICAgICAgICBncmFwaERhdGEuZWRnZXMucHVzaChncmFwaEVkZ2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGNvcHkgdGhlIG9wdGlvbnNcbiAgaWYgKGRvdERhdGEuYXR0cikge1xuICAgIGdyYXBoRGF0YS5vcHRpb25zID0gZG90RGF0YS5hdHRyO1xuICB9XG5cbiAgcmV0dXJuIGdyYXBoRGF0YTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuby12YXIgKi9cbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1lbmFibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4iLCAiZXhwb3J0IHR5cGUgSWQgPSBudW1iZXIgfCBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JPYmplY3Qge1xuICBiYWNrZ3JvdW5kOiBzdHJpbmc7XG4gIGJvcmRlcjogc3RyaW5nO1xuICBoaWdobGlnaHQ6IHtcbiAgICBiYWNrZ3JvdW5kOiBzdHJpbmc7XG4gICAgYm9yZGVyOiBzdHJpbmc7XG4gIH07XG4gIGhvdmVyOiB7XG4gICAgYmFja2dyb3VuZDogc3RyaW5nO1xuICAgIGJvcmRlcjogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlcGhpRGF0YSB7XG4gIG5vZGVzOiBHZXBoaU5vZGVbXTtcbiAgZWRnZXM6IEdlcGhpRWRnZVtdO1xufVxuZXhwb3J0IGludGVyZmFjZSBHZXBoaVBhcnNlT3B0aW9ucyB7XG4gIGZpeGVkPzogYm9vbGVhbjtcbiAgaW5oZXJpdENvbG9yPzogYm9vbGVhbjtcbiAgcGFyc2VDb2xvcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VwaGlOb2RlIHtcbiAgaWQ6IElkO1xuXG4gIGF0dHJpYnV0ZXM/OiB7IHRpdGxlPzogc3RyaW5nIH07XG4gIGNvbG9yPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgc2l6ZT86IG51bWJlcjtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEdlcGhpRWRnZSB7XG4gIGlkOiBJZDtcbiAgc291cmNlOiBJZDtcbiAgdGFyZ2V0OiBJZDtcblxuICBhdHRyaWJ1dGVzPzogeyB0aXRsZT86IHN0cmluZyB9O1xuICBjb2xvcj86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlzRGF0YSB7XG4gIG5vZGVzOiBWaXNOb2RlW107XG4gIGVkZ2VzOiBWaXNFZGdlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlzTm9kZSB7XG4gIGlkOiBJZDtcbiAgZml4ZWQ6IGJvb2xlYW47XG5cbiAgY29sb3I/OiBzdHJpbmcgfCBDb2xvck9iamVjdDtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHNpemU/OiBudW1iZXI7XG4gIHRpdGxlPzogc3RyaW5nO1xuICB4PzogbnVtYmVyO1xuICB5PzogbnVtYmVyO1xuXG4gIGF0dHJpYnV0ZXM/OiB1bmtub3duO1xufVxuZXhwb3J0IGludGVyZmFjZSBWaXNFZGdlIHtcbiAgaWQ6IElkO1xuICBmcm9tOiBJZDtcbiAgdG86IElkO1xuXG4gIGFycm93cz86IFwidG9cIjtcbiAgY29sb3I/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcblxuICBhdHRyaWJ1dGVzPzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IEdlcGhpIHRvIFZpcy5cbiAqXG4gKiBAcGFyYW0gZ2VwaGlKU09OIC0gVGhlIHBhcnNlZCBKU09OIGRhdGEgaW4gR2VwaGkgZm9ybWF0LlxuICogQHBhcmFtIG9wdGlvbnNPYmogLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIGRhdGEgcmVhZHkgdG8gYmUgdXNlZCBpbiBWaXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUdlcGhpKFxuICBnZXBoaUpTT046IEdlcGhpRGF0YSxcbiAgb3B0aW9uc09iaj86IEdlcGhpUGFyc2VPcHRpb25zXG4pOiBWaXNEYXRhIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBlZGdlczoge1xuICAgICAgaW5oZXJpdENvbG9yOiBmYWxzZSxcbiAgICB9LFxuICAgIG5vZGVzOiB7XG4gICAgICBmaXhlZDogZmFsc2UsXG4gICAgICBwYXJzZUNvbG9yOiBmYWxzZSxcbiAgICB9LFxuICB9O1xuXG4gIGlmIChvcHRpb25zT2JqICE9IG51bGwpIHtcbiAgICBpZiAob3B0aW9uc09iai5maXhlZCAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLm5vZGVzLmZpeGVkID0gb3B0aW9uc09iai5maXhlZDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnNPYmoucGFyc2VDb2xvciAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLm5vZGVzLnBhcnNlQ29sb3IgPSBvcHRpb25zT2JqLnBhcnNlQ29sb3I7XG4gICAgfVxuICAgIGlmIChvcHRpb25zT2JqLmluaGVyaXRDb2xvciAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLmVkZ2VzLmluaGVyaXRDb2xvciA9IG9wdGlvbnNPYmouaW5oZXJpdENvbG9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGdFZGdlcyA9IGdlcGhpSlNPTi5lZGdlcztcbiAgY29uc3QgdkVkZ2VzID0gZ0VkZ2VzLm1hcCgoZ0VkZ2UpOiBWaXNFZGdlID0+IHtcbiAgICBjb25zdCB2RWRnZTogVmlzRWRnZSA9IHtcbiAgICAgIGZyb206IGdFZGdlLnNvdXJjZSxcbiAgICAgIGlkOiBnRWRnZS5pZCxcbiAgICAgIHRvOiBnRWRnZS50YXJnZXQsXG4gICAgfTtcblxuICAgIGlmIChnRWRnZS5hdHRyaWJ1dGVzICE9IG51bGwpIHtcbiAgICAgIHZFZGdlLmF0dHJpYnV0ZXMgPSBnRWRnZS5hdHRyaWJ1dGVzO1xuICAgIH1cbiAgICBpZiAoZ0VkZ2UubGFiZWwgIT0gbnVsbCkge1xuICAgICAgdkVkZ2UubGFiZWwgPSBnRWRnZS5sYWJlbDtcbiAgICB9XG4gICAgaWYgKGdFZGdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBnRWRnZS5hdHRyaWJ1dGVzLnRpdGxlICE9IG51bGwpIHtcbiAgICAgIHZFZGdlLnRpdGxlID0gZ0VkZ2UuYXR0cmlidXRlcy50aXRsZTtcbiAgICB9XG4gICAgaWYgKGdFZGdlLnR5cGUgPT09IFwiRGlyZWN0ZWRcIikge1xuICAgICAgdkVkZ2UuYXJyb3dzID0gXCJ0b1wiO1xuICAgIH1cbiAgICAvLyBlZGdlWyd2YWx1ZSddID0gZ0VkZ2UuYXR0cmlidXRlcyAhPSBudWxsID8gZ0VkZ2UuYXR0cmlidXRlcy5XZWlnaHQgOiB1bmRlZmluZWQ7XG4gICAgLy8gZWRnZVsnd2lkdGgnXSA9IGVkZ2VbJ3ZhbHVlJ10gIT0gbnVsbCA/IHVuZGVmaW5lZCA6IGVkZ2VnRWRnZS5zaXplO1xuICAgIGlmIChnRWRnZS5jb2xvciAmJiBvcHRpb25zLmVkZ2VzLmluaGVyaXRDb2xvciA9PT0gZmFsc2UpIHtcbiAgICAgIHZFZGdlLmNvbG9yID0gZ0VkZ2UuY29sb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZFZGdlO1xuICB9KTtcblxuICBjb25zdCB2Tm9kZXMgPSBnZXBoaUpTT04ubm9kZXMubWFwKChnTm9kZSk6IFZpc05vZGUgPT4ge1xuICAgIGNvbnN0IHZOb2RlOiBWaXNOb2RlID0ge1xuICAgICAgaWQ6IGdOb2RlLmlkLFxuICAgICAgZml4ZWQ6IG9wdGlvbnMubm9kZXMuZml4ZWQgJiYgZ05vZGUueCAhPSBudWxsICYmIGdOb2RlLnkgIT0gbnVsbCxcbiAgICB9O1xuXG4gICAgaWYgKGdOb2RlLmF0dHJpYnV0ZXMgIT0gbnVsbCkge1xuICAgICAgdk5vZGUuYXR0cmlidXRlcyA9IGdOb2RlLmF0dHJpYnV0ZXM7XG4gICAgfVxuICAgIGlmIChnTm9kZS5sYWJlbCAhPSBudWxsKSB7XG4gICAgICB2Tm9kZS5sYWJlbCA9IGdOb2RlLmxhYmVsO1xuICAgIH1cbiAgICBpZiAoZ05vZGUuc2l6ZSAhPSBudWxsKSB7XG4gICAgICB2Tm9kZS5zaXplID0gZ05vZGUuc2l6ZTtcbiAgICB9XG4gICAgaWYgKGdOb2RlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBnTm9kZS5hdHRyaWJ1dGVzLnRpdGxlICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLnRpdGxlID0gZ05vZGUuYXR0cmlidXRlcy50aXRsZTtcbiAgICB9XG4gICAgaWYgKGdOb2RlLnRpdGxlICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLnRpdGxlID0gZ05vZGUudGl0bGU7XG4gICAgfVxuICAgIGlmIChnTm9kZS54ICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLnggPSBnTm9kZS54O1xuICAgIH1cbiAgICBpZiAoZ05vZGUueSAhPSBudWxsKSB7XG4gICAgICB2Tm9kZS55ID0gZ05vZGUueTtcbiAgICB9XG4gICAgaWYgKGdOb2RlLmNvbG9yICE9IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLm5vZGVzLnBhcnNlQ29sb3IgPT09IHRydWUpIHtcbiAgICAgICAgdk5vZGUuY29sb3IgPSBnTm9kZS5jb2xvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZOb2RlLmNvbG9yID0ge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGdOb2RlLmNvbG9yLFxuICAgICAgICAgIGJvcmRlcjogZ05vZGUuY29sb3IsXG4gICAgICAgICAgaGlnaGxpZ2h0OiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBnTm9kZS5jb2xvcixcbiAgICAgICAgICAgIGJvcmRlcjogZ05vZGUuY29sb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBob3Zlcjoge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogZ05vZGUuY29sb3IsXG4gICAgICAgICAgICBib3JkZXI6IGdOb2RlLmNvbG9yLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZOb2RlO1xuICB9KTtcblxuICByZXR1cm4geyBub2Rlczogdk5vZGVzLCBlZGdlczogdkVkZ2VzIH07XG59XG4iLCAiZXhwb3J0IGludGVyZmFjZSBMb2NhbGUge1xuICBhZGREZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhZGRFZGdlOiBzdHJpbmc7XG4gIGFkZE5vZGU6IHN0cmluZztcbiAgYmFjazogc3RyaW5nO1xuICBjbG9zZTogc3RyaW5nO1xuICBjcmVhdGVFZGdlRXJyb3I6IHN0cmluZztcbiAgZGVsOiBzdHJpbmc7XG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogc3RyaW5nO1xuICBlZGdlRGVzY3JpcHRpb246IHN0cmluZztcbiAgZWRpdDogc3RyaW5nO1xuICBlZGl0Q2x1c3RlckVycm9yOiBzdHJpbmc7XG4gIGVkaXRFZGdlOiBzdHJpbmc7XG4gIGVkaXRFZGdlRGVzY3JpcHRpb246IHN0cmluZztcbiAgZWRpdE5vZGU6IHN0cmluZztcbn1cbmV4cG9ydCB0eXBlIExvY2FsZXMgPSBSZWNvcmQ8c3RyaW5nLCBMb2NhbGU+O1xuXG4vLyBFbmdsaXNoXG5leHBvcnQgY29uc3QgZW46IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiQ2xpY2sgaW4gYW4gZW1wdHkgc3BhY2UgdG8gcGxhY2UgYSBuZXcgbm9kZS5cIixcbiAgYWRkRWRnZTogXCJBZGQgRWRnZVwiLFxuICBhZGROb2RlOiBcIkFkZCBOb2RlXCIsXG4gIGJhY2s6IFwiQmFja1wiLFxuICBjbG9zZTogXCJDbG9zZVwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwiQ2Fubm90IGxpbmsgZWRnZXMgdG8gYSBjbHVzdGVyLlwiLFxuICBkZWw6IFwiRGVsZXRlIHNlbGVjdGVkXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBjYW5ub3QgYmUgZGVsZXRlZC5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpY2sgb24gYSBub2RlIGFuZCBkcmFnIHRoZSBlZGdlIHRvIGFub3RoZXIgbm9kZSB0byBjb25uZWN0IHRoZW0uXCIsXG4gIGVkaXQ6IFwiRWRpdFwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIkNsdXN0ZXJzIGNhbm5vdCBiZSBlZGl0ZWQuXCIsXG4gIGVkaXRFZGdlOiBcIkVkaXQgRWRnZVwiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpY2sgb24gdGhlIGNvbnRyb2wgcG9pbnRzIGFuZCBkcmFnIHRoZW0gdG8gYSBub2RlIHRvIGNvbm5lY3QgdG8gaXQuXCIsXG4gIGVkaXROb2RlOiBcIkVkaXQgTm9kZVwiLFxufTtcblxuLy8gR2VybWFuXG5leHBvcnQgY29uc3QgZGU6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246XG4gICAgXCJLbGlja2UgYXVmIGVpbmUgZnJlaWUgU3RlbGxlLCB1bSBlaW5lbiBuZXVlbiBLbm90ZW4genUgcGxhemllcmVuLlwiLFxuICBhZGRFZGdlOiBcIkthbnRlIGhpbnp1ZlxcdTAwZmNnZW5cIixcbiAgYWRkTm9kZTogXCJLbm90ZW4gaGluenVmXFx1MDBmY2dlblwiLFxuICBiYWNrOiBcIlp1clxcdTAwZmNja1wiLFxuICBjbG9zZTogXCJTY2hsaWXDn2VuXCIsXG4gIGNyZWF0ZUVkZ2VFcnJvcjpcbiAgICBcIkVzIGlzdCBuaWNodCBtXFx1MDBmNmdsaWNoLCBLYW50ZW4gbWl0IENsdXN0ZXJuIHp1IHZlcmJpbmRlbi5cIixcbiAgZGVsOiBcIkxcXHUwMGY2c2NoZSBBdXN3YWhsXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJDbHVzdGVyIGtcXHUwMGY2bm5lbiBuaWNodCBnZWxcXHUwMGY2c2NodCB3ZXJkZW4uXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIktsaWNrZSBhdWYgZWluZW4gS25vdGVuIHVuZCB6aWVoZSBkaWUgS2FudGUgenUgZWluZW0gYW5kZXJlbiBLbm90ZW4sIHVtIGRpZXNlIHp1IHZlcmJpbmRlbi5cIixcbiAgZWRpdDogXCJFZGl0aWVyZW5cIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJDbHVzdGVyIGtcXHUwMGY2bm5lbiBuaWNodCBlZGl0aWVydCB3ZXJkZW4uXCIsXG4gIGVkaXRFZGdlOiBcIkthbnRlIGVkaXRpZXJlblwiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOlxuICAgIFwiS2xpY2tlIGF1ZiBkaWUgVmVyYmluZHVuZ3NwdW5rdGUgdW5kIHppZWhlIGRpZXNlIGF1ZiBlaW5lbiBLbm90ZW4sIHVtIHNpZSB6dSB2ZXJiaW5kZW4uXCIsXG4gIGVkaXROb2RlOiBcIktub3RlbiBlZGl0aWVyZW5cIixcbn07XG5cbi8vIFNwYW5pc2hcbmV4cG9ydCBjb25zdCBlczogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjpcbiAgICBcIkhhZ2EgY2xpYyBlbiB1biBsdWdhciB2YWNcXHUwMGVkbyBwYXJhIGNvbG9jYXIgdW4gbnVldm8gbm9kby5cIixcbiAgYWRkRWRnZTogXCJBXFx1MDBmMWFkaXIgYXJpc3RhXCIsXG4gIGFkZE5vZGU6IFwiQVxcdTAwZjFhZGlyIG5vZG9cIixcbiAgYmFjazogXCJBdHJcXHUwMGUxc1wiLFxuICBjbG9zZTogXCJDZXJyYXJcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIk5vIHNlIHB1ZWRlIGNvbmVjdGFyIHVuYSBhcmlzdGEgYSB1biBncnVwby5cIixcbiAgZGVsOiBcIkVsaW1pbmFyIHNlbGVjY2lcXHUwMGYzblwiLFxuICBkZWxldGVDbHVzdGVyRXJyb3I6IFwiTm8gZXMgcG9zaWJsZSBlbGltaW5hciBncnVwb3MuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkhhZ2EgY2xpYyBlbiB1biBub2RvIHkgYXJyYXN0cmUgbGEgYXJpc3RhIGhhY2lhIG90cm8gbm9kbyBwYXJhIGNvbmVjdGFybG9zLlwiLFxuICBlZGl0OiBcIkVkaXRhclwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIk5vIGVzIHBvc2libGUgZWRpdGFyIGdydXBvcy5cIixcbiAgZWRpdEVkZ2U6IFwiRWRpdGFyIGFyaXN0YVwiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOlxuICAgIFwiSGFnYSBjbGljIGVuIHVuIHB1bnRvIGRlIGNvbnRyb2wgeSBhcnJhc3RyZWxvIGEgdW4gbm9kbyBwYXJhIGNvbmVjdGFybG8uXCIsXG4gIGVkaXROb2RlOiBcIkVkaXRhciBub2RvXCIsXG59O1xuXG4vL0l0YWxpYW5vXG5leHBvcnQgY29uc3QgaXQ6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiQ2xpY2NhIHBlciBhZ2dpdW5nZXJlIHVuIG51b3ZvIG5vZG9cIixcbiAgYWRkRWRnZTogXCJBZ2dpdW5naSB1biB2ZXJ0aWNlXCIsXG4gIGFkZE5vZGU6IFwiQWdnaXVuZ2kgdW4gbm9kb1wiLFxuICBiYWNrOiBcIkluZGlldHJvXCIsXG4gIGNsb3NlOiBcIkNoaXVkZXJlXCIsXG4gIGNyZWF0ZUVkZ2VFcnJvcjogXCJOb24gc2kgcG9zc29ubyBjb2xsZWdhcmUgdmVydGljaSBhZCB1biBjbHVzdGVyXCIsXG4gIGRlbDogXCJDYW5jZWxsYSBsYSBzZWxlemlvbmVcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIkkgY2x1c3RlciBub24gcG9zc29ubyBlc3NlcmUgY2FuY2VsbGF0aVwiLFxuICBlZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGljY2Egc3UgdW4gbm9kbyBlIHRyYXNjaW5hbG8gYWQgdW4gYWx0cm8gbm9kbyBwZXIgY29ubmV0dGVybGkuXCIsXG4gIGVkaXQ6IFwiTW9kaWZpY2FcIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJJIGNsdXN0ZXJzIG5vbiBwb3Nzb25vIGVzc2VyZSBtb2RpZmljYXRpLlwiLFxuICBlZGl0RWRnZTogXCJNb2RpZmljYSBpbCB2ZXJ0aWNlXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGljY2Egc3VpIFB1bnRpIGRpIGNvbnRyb2xsbyBlIHRyYXNjaW5hbGkgYWQgdW4gbm9kbyBwZXIgY29ubmV0dGVybGkuXCIsXG4gIGVkaXROb2RlOiBcIk1vZGlmaWNhIGlsIG5vZG9cIixcbn07XG5cbi8vIER1dGNoXG5leHBvcnQgY29uc3Qgbmw6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiS2xpayBvcCBlZW4gbGVlZyBnZWJpZWQgb20gZWVuIG5pZXV3ZSBub2RlIHRlIG1ha2VuLlwiLFxuICBhZGRFZGdlOiBcIkxpbmsgdG9ldm9lZ2VuXCIsXG4gIGFkZE5vZGU6IFwiTm9kZSB0b2V2b2VnZW5cIixcbiAgYmFjazogXCJUZXJ1Z1wiLFxuICBjbG9zZTogXCJTbHVpdGVuXCIsXG4gIGNyZWF0ZUVkZ2VFcnJvcjogXCJLYW4gZ2VlbiBsaW5rIG1ha2VuIG5hYXIgZWVuIGNsdXN0ZXIuXCIsXG4gIGRlbDogXCJTZWxlY3RpZSB2ZXJ3aWpkZXJlblwiLFxuICBkZWxldGVDbHVzdGVyRXJyb3I6IFwiQ2x1c3RlcnMga3VubmVuIG5pZXQgd29yZGVuIHZlcndpamRlcmQuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIktsaWsgb3AgZWVuIG5vZGUgZW4gc2xlZXAgZGUgbGluayBuYWFyIGVlbiBhbmRlcmUgbm9kZSBvbSB6ZSB0ZSB2ZXJiaW5kZW4uXCIsXG4gIGVkaXQ6IFwiV2lqemlnZW5cIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBrdW5uZW4gbmlldCB3b3JkZW4gYWFuZ2VwYXN0LlwiLFxuICBlZGl0RWRnZTogXCJMaW5rIHdpanppZ2VuXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJLbGlrIG9wIGRlIHZlcmJpbmRpbmdzcHVudGVuIGVuIHNsZWVwIHplIG5hYXIgZWVuIG5vZGUgb20gZGFhcm1lZSB0ZSB2ZXJiaW5kZW4uXCIsXG4gIGVkaXROb2RlOiBcIk5vZGUgd2lqemlnZW5cIixcbn07XG5cbi8vIFBvcnR1Z3Vlc2UgQnJhemlsXG5leHBvcnQgY29uc3QgcHQ6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiQ2xpcXVlIGVtIHVtIGVzcGHDp28gZW0gYnJhbmNvIHBhcmEgYWRpY2lvbmFyIHVtIG5vdm8gbsOzXCIsXG4gIGFkZEVkZ2U6IFwiQWRpY2lvbmFyIGFyZXN0YVwiLFxuICBhZGROb2RlOiBcIkFkaWNpb25hciBuw7NcIixcbiAgYmFjazogXCJWb2x0YXJcIixcbiAgY2xvc2U6IFwiRmVjaGFyXCIsXG4gIGNyZWF0ZUVkZ2VFcnJvcjogXCJOw6NvIGZvaSBwb3Nzw612ZWwgbGlua2FyIGFyZXN0YXMgYSB1bSBjbHVzdGVyLlwiLFxuICBkZWw6IFwiUmVtb3ZlciBzZWxlY2lvbmFkb1wiLFxuICBkZWxldGVDbHVzdGVyRXJyb3I6IFwiQ2x1c3RlcnMgbsOjbyBwdWRlcmFtIHNlciByZW1vdmlkb3MuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkNsaXF1ZSBlbSB1bSBuw7MgZSBhcnJhc3RlIGEgYXJlc3RhIGF0w6kgb3V0cm8gbsOzIHBhcmEgY29uZWN0w6EtbG9zXCIsXG4gIGVkaXQ6IFwiRWRpdGFyXCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwiQ2x1c3RlcnMgbsOjbyBwdWRlcmFtIHNlciBlZGl0YWRvcy5cIixcbiAgZWRpdEVkZ2U6IFwiRWRpdGFyIGFyZXN0YVwiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpcXVlIG5vcyBwb250b3MgZGUgY29udHJvbGUgZSBvcyBhcnJhc3RlIHBhcmEgdW0gbsOzIHBhcmEgY29uZWN0w6EtbG9zXCIsXG4gIGVkaXROb2RlOiBcIkVkaXRhciBuw7NcIixcbn07XG5cbi8vIFJ1c3NpYW5cbmV4cG9ydCBjb25zdCBydTogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCLQmtC70LjQutC90LjRgtC1INCyINGB0LLQvtCx0L7QtNC90L7QtSDQvNC10YHRgtC+LCDRh9GC0L7QsdGLINC00L7QsdCw0LLQuNGC0Ywg0L3QvtCy0YvQuSDRg9C30LXQuy5cIixcbiAgYWRkRWRnZTogXCLQlNC+0LHQsNCy0LjRgtGMINGA0LXQsdGA0L5cIixcbiAgYWRkTm9kZTogXCLQlNC+0LHQsNCy0LjRgtGMINGD0LfQtdC7XCIsXG4gIGJhY2s6IFwi0J3QsNC30LDQtFwiLFxuICBjbG9zZTogXCLQl9Cw0LrRgNGL0LLQsNGC0YxcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcItCd0LXQstC+0LfQvNC+0LbQvdC+INGB0L7QtdC00LjQvdC40YLRjCDRgNC10LHRgNCwINCyINC60LvQsNGB0YLQtdGALlwiLFxuICBkZWw6IFwi0KPQtNCw0LvQuNGC0Ywg0LLRi9Cx0YDQsNC90L3QvtC1XCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCLQmtC70LDRgdGC0LXRgNGLINC90LUg0LzQvtCz0YPRgiDQsdGL0YLRjCDRg9C00LDQu9C10L3Ri1wiLFxuICBlZGdlRGVzY3JpcHRpb246XG4gICAgXCLQmtC70LjQutC90LjRgtC1INC90LAg0YPQt9C10Lsg0Lgg0L/RgNC+0YLRj9C90LjRgtC1INGA0LXQsdGA0L4g0Log0LTRgNGD0LPQvtC80YMg0YPQt9C70YMsINGH0YLQvtCx0Ysg0YHQvtC10LTQuNC90LjRgtGMINC40YUuXCIsXG4gIGVkaXQ6IFwi0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YxcIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCLQmtC70LDRgdGC0LXRgNGLINC90LXQtNC+0YHRgtGD0L/QvdGLINC00LvRjyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPLlwiLFxuICBlZGl0RWRnZTogXCLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgNC10LHRgNC+XCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCLQmtC70LjQutC90LjRgtC1INC90LAg0LrQvtC90YLRgNC+0LvRjNC90YvQtSDRgtC+0YfQutC4INC4INC/0LXRgNC10YLQsNGJ0LjRgtC1INC40YUg0LIg0YPQt9C10LssINGH0YLQvtCx0Ysg0L/QvtC00LrQu9GO0YfQuNGC0YzRgdGPINC6INC90LXQvNGDLlwiLFxuICBlZGl0Tm9kZTogXCLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRg9C30LXQu1wiLFxufTtcblxuLy8gQ2hpbmVzZVxuZXhwb3J0IGNvbnN0IGNuOiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOiBcIuWNleWHu+epuueZveWkhOaUvue9ruaWsOiKgueCueOAglwiLFxuICBhZGRFZGdlOiBcIua3u+WKoOi/nuaOpee6v1wiLFxuICBhZGROb2RlOiBcIua3u+WKoOiKgueCuVwiLFxuICBiYWNrOiBcIui/lOWbnlwiLFxuICBjbG9zZTogXCLpl5zplolcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIuaXoOazleWwhui/nuaOpee6v+i/nuaOpeWIsOe+pOmbhuOAglwiLFxuICBkZWw6IFwi5Yig6Zmk6YCJ5a6aXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCLml6Dms5XliKDpmaTnvqTpm4bjgIJcIixcbiAgZWRnZURlc2NyaXB0aW9uOiBcIuWNleWHu+afkOS4quiKgueCueW5tuWwhuivpei/nuaOpee6v+aLluWKqOWIsOWPpuS4gOS4quiKgueCueS7pei/nuaOpeWug+S7rOOAglwiLFxuICBlZGl0OiBcIue8lui+kVwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIuaXoOazlee8lui+kee+pOmbhuOAglwiLFxuICBlZGl0RWRnZTogXCLnvJbovpHov57mjqXnur9cIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjogXCLljZXlh7vmjqfliLboioLngrnlubblsIblroPku6zmi5bliLDoioLngrnkuIrov57mjqXjgIJcIixcbiAgZWRpdE5vZGU6IFwi57yW6L6R6IqC54K5XCIsXG59O1xuXG4vLyBVa3JhaW5pYW5cbmV4cG9ydCBjb25zdCB1azogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJL0LvRltC60L3RltGC0Ywg0L3QsCDQstGW0LvRjNC90LUg0LzRltGB0YbQtSwg0YnQvtCxINC00L7QtNCw0YLQuCDQvdC+0LLQuNC5INCy0YPQt9C+0LsuXCIsXG4gIGFkZEVkZ2U6IFwi0JTQvtC00LDRgtC4INC60YDQsNC5XCIsXG4gIGFkZE5vZGU6IFwi0JTQvtC00LDRgtC4INCy0YPQt9C+0LtcIixcbiAgYmFjazogXCLQndCw0LfQsNC0XCIsXG4gIGNsb3NlOiBcItCX0LDQutGA0LjRgtC4XCIsXG4gIGNyZWF0ZUVkZ2VFcnJvcjogXCLQndC1INC80L7QttC70LjQstC+INC+0LEn0ZTQtNC90LDRgtC4INC60YDQsNGXINCyINCz0YDRg9C/0YMuXCIsXG4gIGRlbDogXCLQktC40LTQsNC70LjRgtC4INC+0LHRgNCw0L3QtVwiLFxuICBkZWxldGVDbHVzdGVyRXJyb3I6IFwi0JPRgNGD0L/QuCDQvdC1INC80L7QttGD0YLRjCDQsdGD0YLQuCDQstC40LTQsNC70LXQvdGWLlwiLFxuICBlZGdlRGVzY3JpcHRpb246XG4gICAgXCLQmtC70ZbQutC90ZbRgtGMINC90LAg0LLRg9C30L7QuyDRliDQv9C10YDQtdGC0Y/Qs9C90ZbRgtGMINC60YDQsNC5INC00L4g0ZbQvdGI0L7Qs9C+INCy0YPQt9C70LAsINGJ0L7QsSDRl9GFINC3J9GU0LTQvdCw0YLQuC5cIixcbiAgZWRpdDogXCLQoNC10LTQsNCz0YPQstCw0YLQuFwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcItCT0YDRg9C/0Lgg0L3QtdC00L7RgdGC0YPQv9C90ZYg0LTQu9GPINGA0LXQtNCw0LPRg9Cy0LDQvdC90Y8uXCIsXG4gIGVkaXRFZGdlOiBcItCg0LXQtNCw0LPRg9Cy0LDRgtC4INC60YDQsNC5XCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCLQmtC70ZbQutC90ZbRgtGMINC90LAg0LrQvtC90YLRgNC+0LvRjNC90ZYg0YLQvtGH0LrQuCDRliDQv9C10YDQtdGC0Y/Qs9C90ZbRgtGMINGX0YUg0YMg0LLRg9C30L7Quywg0YnQvtCxINC/0ZbQtNC60LvRjtGH0LjRgtC40YHRjyDQtNC+INC90YzQvtCz0L4uXCIsXG4gIGVkaXROb2RlOiBcItCg0LXQtNCw0LPRg9Cy0LDRgtC4INCy0YPQt9C+0LtcIixcbn07XG5cbi8vIEZyZW5jaFxuZXhwb3J0IGNvbnN0IGZyOiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOiBcIkNsaXF1ZXogZGFucyB1biBlbmRyb2l0IHZpZGUgcG91ciBwbGFjZXIgdW4gbsWTdWQuXCIsXG4gIGFkZEVkZ2U6IFwiQWpvdXRlciB1biBsaWVuXCIsXG4gIGFkZE5vZGU6IFwiQWpvdXRlciB1biBuxZN1ZFwiLFxuICBiYWNrOiBcIlJldG91clwiLFxuICBjbG9zZTogXCJGZXJtZXJcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIkltcG9zc2libGUgZGUgY3LDqWVyIHVuIGxpZW4gdmVycyB1biBjbHVzdGVyLlwiLFxuICBkZWw6IFwiRWZmYWNlciBsYSBzw6lsZWN0aW9uXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJMZXMgY2x1c3RlcnMgbmUgcGV1dmVudCBwYXMgw6p0cmUgZWZmYWPDqXMuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkNsaXF1ZXogc3VyIHVuIG7Fk3VkIGV0IGdsaXNzZXogbGUgbGllbiB2ZXJzIHVuIGF1dHJlIG7Fk3VkIHBvdXIgbGVzIGNvbm5lY3Rlci5cIixcbiAgZWRpdDogXCLDiWRpdGVyXCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwiTGVzIGNsdXN0ZXJzIG5lIHBldXZlbnQgcGFzIMOqdHJlIMOpZGl0w6lzLlwiLFxuICBlZGl0RWRnZTogXCLDiWRpdGVyIGxlIGxpZW5cIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkNsaXF1ZXogc3VyIGxlcyBwb2ludHMgZGUgY29udHLDtGxlIGV0IGdsaXNzZXotbGVzIHBvdXIgY29ubmVjdGVyIHVuIG7Fk3VkLlwiLFxuICBlZGl0Tm9kZTogXCLDiWRpdGVyIGxlIG7Fk3VkXCIsXG59O1xuXG4vLyBDemVjaFxuZXhwb3J0IGNvbnN0IGNzOiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOiBcIktsdWtudXTDrW0gZG8gcHLDoXpkbsOpaG8gcHJvc3RvcnUgbcWvxb5ldGUgcMWZaWRhdCBub3bDvSB2cmNob2wuXCIsXG4gIGFkZEVkZ2U6IFwiUMWZaWRhdCBocmFudVwiLFxuICBhZGROb2RlOiBcIlDFmWlkYXQgdnJjaG9sXCIsXG4gIGJhY2s6IFwiWnDEm3RcIixcbiAgY2xvc2U6IFwiWmF2xZnDrXRcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIk5lbHplIHDFmWlwb2ppdCBocmFudSBrZSBzaGx1a3UuXCIsXG4gIGRlbDogXCJTbWF6YXQgdsO9YsSbclwiLFxuICBkZWxldGVDbHVzdGVyRXJyb3I6IFwiTmVsemUgbWF6YXQgc2hsdWt5LlwiLFxuICBlZGdlRGVzY3JpcHRpb246XG4gICAgXCJQxZlldGHFvmVuw61tIHogamVkbm9obyB2cmNob2x1IGRvIGRydWjDqWhvIG3Fr8W+ZXRlIHNwb2ppdCB0eXRvIHZyY2hvbHkgbm92b3UgaHJhbm91LlwiLFxuICBlZGl0OiBcIlVwcmF2aXRcIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJOZWx6ZSB1cHJhdm92YXQgc2hsdWt5LlwiLFxuICBlZGl0RWRnZTogXCJVcHJhdml0IGhyYW51XCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJQxZlldGHFvmVuw61tIGtvbnRyb2xuw61obyB2cmNob2x1IGhyYW55IGppIG3Fr8W+ZXRlIHDFmWlwb2ppdCBrIGppbsOpbXUgdnJjaG9sdS5cIixcbiAgZWRpdE5vZGU6IFwiVXByYXZpdCB2cmNob2xcIixcbn07XG4iLCAiLyoqXG4gKiBBc3NvY2lhdGVzIGEgY2FudmFzIHRvIGEgZ2l2ZW4gaW1hZ2UsIGNvbnRhaW5pbmcgYSBudW1iZXIgb2YgcmVuZGVyaW5nc1xuICogb2YgdGhlIGltYWdlIGF0IHZhcmlvdXMgc2l6ZXMuXG4gKlxuICogVGhpcyB0ZWNobmlxdWUgaXMga25vd24gYXMgJ21pcG1hcHBpbmcnLlxuICpcbiAqIE5PVEU6IEltYWdlcyBjYW4gYWxzbyBiZSBvZiB0eXBlICdkYXRhOnN2Zyt4bWxgLiBUaGlzIGNvZGUgYWxzbyB3b3Jrc1xuICogICAgICAgZm9yIHN2ZywgYnV0IHRoZSBtaXBtYXBwaW5nIG1heSBub3QgYmUgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlXG4gKi9cbmNsYXNzIENhY2hlZEltYWdlIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuTlVNX0lURVJBVElPTlMgPSA0OyAvLyBOdW1iZXIgb2YgaXRlbXMgaW4gdGhlIGNvb3JkaW5hdGVzIGFycmF5XG5cbiAgICB0aGlzLmltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBpbWFnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICAgKi9cbiAgaW5pdCgpIHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCgpKSByZXR1cm47XG5cbiAgICB0aGlzLnNyYyA9IHRoaXMuaW1hZ2Uuc3JjOyAvLyBGb3Igc2FtZSBpbnRlcmZhY2Ugd2l0aCBJbWFnZVxuICAgIGNvbnN0IHcgPSB0aGlzLmltYWdlLndpZHRoO1xuICAgIGNvbnN0IGggPSB0aGlzLmltYWdlLmhlaWdodDtcblxuICAgIC8vIEVhc2UgZXh0ZXJuYWwgYWNjZXNzXG4gICAgdGhpcy53aWR0aCA9IHc7XG4gICAgdGhpcy5oZWlnaHQgPSBoO1xuXG4gICAgY29uc3QgaDIgPSBNYXRoLmZsb29yKGggLyAyKTtcbiAgICBjb25zdCBoNCA9IE1hdGguZmxvb3IoaCAvIDQpO1xuICAgIGNvbnN0IGg4ID0gTWF0aC5mbG9vcihoIC8gOCk7XG4gICAgY29uc3QgaDE2ID0gTWF0aC5mbG9vcihoIC8gMTYpO1xuXG4gICAgY29uc3QgdzIgPSBNYXRoLmZsb29yKHcgLyAyKTtcbiAgICBjb25zdCB3NCA9IE1hdGguZmxvb3IodyAvIDQpO1xuICAgIGNvbnN0IHc4ID0gTWF0aC5mbG9vcih3IC8gOCk7XG4gICAgY29uc3QgdzE2ID0gTWF0aC5mbG9vcih3IC8gMTYpO1xuXG4gICAgLy8gTWFrZSBjYW52YXMgYXMgc21hbGwgYXMgcG9zc2libGVcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IDMgKiB3NDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoMjtcblxuICAgIC8vIENvb3JkaW5hdGVzIGFuZCBzaXplcyBvZiBpbWFnZXMgY29udGFpbmVkIGluIHRoZSBjYW52YXNcbiAgICAvLyBWYWx1ZXMgcGVyIHJvdzogIFt0b3AgeCwgbGVmdCB5LCB3aWR0aCwgaGVpZ2h0XVxuXG4gICAgdGhpcy5jb29yZGluYXRlcyA9IFtcbiAgICAgIFswLCAwLCB3MiwgaDJdLFxuICAgICAgW3cyLCAwLCB3NCwgaDRdLFxuICAgICAgW3cyLCBoNCwgdzgsIGg4XSxcbiAgICAgIFs1ICogdzgsIGg0LCB3MTYsIGgxNl0sXG4gICAgXTtcblxuICAgIHRoaXMuX2ZpbGxNaXBNYXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBpbml0KCkgaGFzIGJlZW4gY2FsbGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBpbml0aWFsaXplZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb29yZGluYXRlcyAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBtYWluIGltYWdlIGluIHZhcmlvdXMgc2l6ZXMgdG8gdGhlIGNvbnRleHQuXG4gICAqXG4gICAqIFRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgaXMgdG8gcmVkdWNlIGFydGVmYWN0cyBkdWUgdG8gaW50ZXJwb2xhdGlvblxuICAgKiBhdCBkaWZmZXJpbmcgem9vbSBsZXZlbHMuXG4gICAqXG4gICAqIFNvdXJjZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTg3NjE0MDQvMTIyMzUzMVxuICAgKlxuICAgKiBUaGlzIG1ldGhvZHMgdGFrZXMgdGhlIHJlc2l6aW5nIG91dCBvZiB0aGUgZHJhd2luZyBsb29wLCBpbiBvcmRlciB0b1xuICAgKiByZWR1Y2UgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuXG4gICAqXG4gICAqIFRPRE86IFRoZSBjb2RlIGFzc3VtZXMgdGhhdCBhIDJEIGNvbnRleHQgY2FuIGFsd2F5cyBiZSBnb3R0ZW4uIFRoaXMgaXNcbiAgICogICAgICAgbm90IG5lY2Vzc2FyaWx5IHRydWUhIE9UT0gsIGlmIG5vdCB0cnVlIHRoZW4gdXNhZ2Ugb2YgdGhpcyBjbGFzc1xuICAgKiAgICAgICBpcyBzZW5zZWxlc3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmlsbE1pcE1hcCgpIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG5cbiAgICAvLyBGaXJzdCB6b29tLWxldmVsIGNvbWVzIGZyb20gdGhlIGltYWdlXG4gICAgY29uc3QgdG8gPSB0aGlzLmNvb3JkaW5hdGVzWzBdO1xuICAgIGN0eC5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgdG9bMF0sIHRvWzFdLCB0b1syXSwgdG9bM10pO1xuXG4gICAgLy8gVGhlIHJlc3QgYXJlIGNvcHkgYWN0aW9ucyBpbnRlcm5hbCB0byB0aGUgY2FudmFzL2NvbnRleHRcbiAgICBmb3IgKGxldCBpdGVyYXRpb25zID0gMTsgaXRlcmF0aW9ucyA8IHRoaXMuTlVNX0lURVJBVElPTlM7IGl0ZXJhdGlvbnMrKykge1xuICAgICAgY29uc3QgZnJvbSA9IHRoaXMuY29vcmRpbmF0ZXNbaXRlcmF0aW9ucyAtIDFdO1xuICAgICAgY29uc3QgdG8gPSB0aGlzLmNvb3JkaW5hdGVzW2l0ZXJhdGlvbnNdO1xuXG4gICAgICBjdHguZHJhd0ltYWdlKFxuICAgICAgICB0aGlzLmNhbnZhcyxcbiAgICAgICAgZnJvbVswXSxcbiAgICAgICAgZnJvbVsxXSxcbiAgICAgICAgZnJvbVsyXSxcbiAgICAgICAgZnJvbVszXSxcbiAgICAgICAgdG9bMF0sXG4gICAgICAgIHRvWzFdLFxuICAgICAgICB0b1syXSxcbiAgICAgICAgdG9bM11cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERyYXcgdGhlIGltYWdlLCB1c2luZyB0aGUgbWlwbWFwIGlmIG5lY2Vzc2FyeS5cbiAgICpcbiAgICogTWlwTWFwIGlzIG9ubHkgdXNlZCBpZiBwYXJhbSBmYWN0b3IgPiAyOyBvdGhlcndpc2UsIG9yaWdpbmFsIGJpdG1hcFxuICAgKiBpcyByZXNpemVkLiBUaGlzIGlzIGFsc28gdXNlZCB0byBza2lwIG1pcG1hcCB1c2FnZSwgZS5nLiBieSBzZXR0aW5nIGZhY3RvciA9IDFcbiAgICpcbiAgICogQ3JlZGl0cyB0byAnQWxleCBkZSBNdWxkZXInIGZvciBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAgY29udGV4dCBvbiB3aGljaCB0byBkcmF3IHpvb21lZCBpbWFnZVxuICAgKiBAcGFyYW0ge0Zsb2F0fSBmYWN0b3Igc2NhbGUgZmFjdG9yIGF0IHdoaWNoIHRvIGRyYXdcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxlZnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvcFxuICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICAgKi9cbiAgZHJhd0ltYWdlQXRQb3NpdGlvbihjdHgsIGZhY3RvciwgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKCkpIHJldHVybjsgLy9jYW4ndCBkcmF3IGltYWdlIHlldCBub3QgaW50aWFsaXplZFxuXG4gICAgaWYgKGZhY3RvciA+IDIpIHtcbiAgICAgIC8vIERldGVybWluZSB3aGljaCB6b29tZWQgaW1hZ2UgdG8gdXNlXG4gICAgICBmYWN0b3IgKj0gMC41O1xuICAgICAgbGV0IGl0ZXJhdGlvbnMgPSAwO1xuICAgICAgd2hpbGUgKGZhY3RvciA+IDIgJiYgaXRlcmF0aW9ucyA8IHRoaXMuTlVNX0lURVJBVElPTlMpIHtcbiAgICAgICAgZmFjdG9yICo9IDAuNTtcbiAgICAgICAgaXRlcmF0aW9ucyArPSAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlcmF0aW9ucyA+PSB0aGlzLk5VTV9JVEVSQVRJT05TKSB7XG4gICAgICAgIGl0ZXJhdGlvbnMgPSB0aGlzLk5VTV9JVEVSQVRJT05TIC0gMTtcbiAgICAgIH1cbiAgICAgIC8vY29uc29sZS5sb2coXCJpdGVyYXRpb25zOiBcIiArIGl0ZXJhdGlvbnMpO1xuXG4gICAgICBjb25zdCBmcm9tID0gdGhpcy5jb29yZGluYXRlc1tpdGVyYXRpb25zXTtcbiAgICAgIGN0eC5kcmF3SW1hZ2UoXG4gICAgICAgIHRoaXMuY2FudmFzLFxuICAgICAgICBmcm9tWzBdLFxuICAgICAgICBmcm9tWzFdLFxuICAgICAgICBmcm9tWzJdLFxuICAgICAgICBmcm9tWzNdLFxuICAgICAgICBsZWZ0LFxuICAgICAgICB0b3AsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERyYXcgaW1hZ2UgZGlyZWN0bHlcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FjaGVkSW1hZ2U7XG4iLCAiaW1wb3J0IENhY2hlZEltYWdlIGZyb20gXCIuL0NhY2hlZEltYWdlXCI7XG5cbi8qKlxuICogVGhpcyBjYWxsYmFjayBpcyBhIGNhbGxiYWNrIHRoYXQgYWNjZXB0cyBhbiBJbWFnZS5cbiAqXG4gKiBAY2FsbGJhY2sgSW1hZ2VDYWxsYmFja1xuICogQHBhcmFtIHtJbWFnZX0gaW1hZ2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgbG9hZHMgaW1hZ2VzIGFuZCBrZWVwcyB0aGVtIHN0b3JlZC5cbiAqXG4gKiBAcGFyYW0ge0ltYWdlQ2FsbGJhY2t9IGNhbGxiYWNrXG4gKi9cbmNsYXNzIEltYWdlcyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0ltYWdlQ2FsbGJhY2t9IGNhbGxiYWNrXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIHRoaXMuaW1hZ2VzID0ge307XG4gICAgdGhpcy5pbWFnZUJyb2tlbiA9IHt9O1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsICAgICAgICAgICAgICAgICAgICAgIFRoZSBvcmlnaW5hbCBVcmwgdGhhdCBmYWlsZWQgdG8gbG9hZCwgaWYgdGhlIGJyb2tlbiBpbWFnZSBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNhY2hlIHVzaW5nIHRoaXMgVXJsIGFzIHRoZSBrZXkgc28gdGhhdCBzdWJzZXF1ZW50IHJlcXVlc3RzIGZvciB0aGlzIFVybCB3aWxsIHJldHVybiB0aGUgYnJva2VuIGltYWdlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBicm9rZW5VcmwgICAgICAgICAgICAgICAgVXJsIHRoZSBicm9rZW4gaW1hZ2UgdG8gdHJ5IGFuZCBsb2FkXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlVG9Mb2FkQnJva2VuVXJsT24gICBUaGUgaW1hZ2Ugb2JqZWN0XG4gICAqL1xuICBfdHJ5bG9hZEJyb2tlblVybCh1cmwsIGJyb2tlblVybCwgaW1hZ2VUb0xvYWRCcm9rZW5VcmxPbikge1xuICAgIC8vSWYgdGhlc2UgcGFyYW1ldGVycyBhcmVuJ3Qgc3BlY2lmaWVkIHRoZW4gZXhpdCB0aGUgZnVuY3Rpb24gYmVjYXVzZSBub3RoaW5nIGNvbnN0cnVjdGl2ZSBjYW4gYmUgZG9uZVxuICAgIGlmICh1cmwgPT09IHVuZGVmaW5lZCB8fCBpbWFnZVRvTG9hZEJyb2tlblVybE9uID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBpZiAoYnJva2VuVXJsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIk5vIGJyb2tlbiB1cmwgaW1hZ2UgZGVmaW5lZFwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL0NsZWFyIHRoZSBvbGQgc3Vic2NyaXB0aW9uIHRvIHRoZSBlcnJvciBldmVudCBhbmQgcHV0IGEgbmV3IGluIHBsYWNlIHRoYXQgb25seSBoYW5kbGUgZXJyb3JzIGluIGxvYWRpbmcgdGhlIGJyb2tlbkltYWdlVXJsXG4gICAgaW1hZ2VUb0xvYWRCcm9rZW5VcmxPbi5pbWFnZS5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIGJyb2tlbkltYWdlOlwiLCBicm9rZW5VcmwpO1xuICAgICAgLy8gY2FjaGUgaXRlbSB3aWxsIGNvbnRhaW4gZW1wdHkgaW1hZ2UsIHRoaXMgc2hvdWxkIGJlIE9LIGZvciBkZWZhdWx0XG4gICAgfTtcblxuICAgIC8vU2V0IHRoZSBzb3VyY2Ugb2YgdGhlIGltYWdlIHRvIHRoZSBicm9rZW5VcmwsIHRoaXMgaXMgYWN0dWFsbHkgd2hhdCBraWNrcyBvZmYgdGhlIGxvYWRpbmcgb2YgdGhlIGJyb2tlbiBpbWFnZVxuICAgIGltYWdlVG9Mb2FkQnJva2VuVXJsT24uaW1hZ2Uuc3JjID0gYnJva2VuVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkltYWdlfSBpbWFnZVRvUmVkcmF3V2l0aFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlZHJhd1dpdGhJbWFnZShpbWFnZVRvUmVkcmF3V2l0aCkge1xuICAgIGlmICh0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrKGltYWdlVG9SZWRyYXdXaXRoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAgICAgICAgICBVcmwgb2YgdGhlIGltYWdlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBicm9rZW5VcmwgICAgVXJsIG9mIGFuIGltYWdlIHRvIHVzZSBpZiB0aGUgdXJsIGltYWdlIGlzIG5vdCBmb3VuZFxuICAgKiBAcmV0dXJucyB7SW1hZ2V9IGltZyAgICAgICAgICBUaGUgaW1hZ2Ugb2JqZWN0XG4gICAqL1xuICBsb2FkKHVybCwgYnJva2VuVXJsKSB7XG4gICAgLy9UcnkgYW5kIGdldCB0aGUgaW1hZ2UgZnJvbSB0aGUgY2FjaGUsIGlmIHN1Y2Nlc3NmdWwgdGhlbiByZXR1cm4gdGhlIGNhY2hlZCBpbWFnZVxuICAgIGNvbnN0IGNhY2hlZEltYWdlID0gdGhpcy5pbWFnZXNbdXJsXTtcbiAgICBpZiAoY2FjaGVkSW1hZ2UpIHJldHVybiBjYWNoZWRJbWFnZTtcblxuICAgIC8vQ3JlYXRlIGEgbmV3IGltYWdlXG4gICAgY29uc3QgaW1nID0gbmV3IENhY2hlZEltYWdlKCk7XG5cbiAgICAvLyBOZWVkIHRvIGFkZCB0byBjYWNoZSBoZXJlLCBvdGhlcndpc2UgZmluYWwgcmV0dXJuIHdpbGwgc3Bhd24gZGlmZmVyZW50IGNvcGllcyBvZiB0aGUgc2FtZSBpbWFnZSxcbiAgICAvLyBBbHNvLCB0aGVyZSB3aWxsIGJlIG11bHRpcGxlIGxvYWRzIG9mIHRoZSBzYW1lIGltYWdlLlxuICAgIHRoaXMuaW1hZ2VzW3VybF0gPSBpbWc7XG5cbiAgICAvL1N1YnNjcmliZSB0byB0aGUgZXZlbnQgdGhhdCBpcyByYWlzZWQgaWYgdGhlIGltYWdlIGxvYWRzIHN1Y2Nlc3NmdWxseVxuICAgIGltZy5pbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAvLyBQcm9wZXJseSBpbml0IHRoZSBjYWNoZWQgaXRlbSBhbmQgdGhlbiByZXF1ZXN0IGEgcmVkcmF3XG4gICAgICB0aGlzLl9maXhJbWFnZUNvb3JkaW5hdGVzKGltZy5pbWFnZSk7XG4gICAgICBpbWcuaW5pdCgpO1xuICAgICAgdGhpcy5fcmVkcmF3V2l0aEltYWdlKGltZyk7XG4gICAgfTtcblxuICAgIC8vU3Vic2NyaWJlIHRvIHRoZSBldmVudCB0aGF0IGlzIHJhaXNlZCBpZiB0aGUgaW1hZ2UgZmFpbHMgdG8gbG9hZFxuICAgIGltZy5pbWFnZS5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIGltYWdlOlwiLCB1cmwpO1xuICAgICAgLy9UcnkgYW5kIGxvYWQgdGhlIGltYWdlIHNwZWNpZmllZCBieSB0aGUgYnJva2VuVXJsIHVzaW5nXG4gICAgICB0aGlzLl90cnlsb2FkQnJva2VuVXJsKHVybCwgYnJva2VuVXJsLCBpbWcpO1xuICAgIH07XG5cbiAgICAvL1NldCB0aGUgc291cmNlIG9mIHRoZSBpbWFnZSB0byB0aGUgdXJsLCB0aGlzIGlzIHdoYXQgYWN0dWFsbHkga2lja3Mgb2ZmIHRoZSBsb2FkaW5nIG9mIHRoZSBpbWFnZVxuICAgIGltZy5pbWFnZS5zcmMgPSB1cmw7XG5cbiAgICAvL1JldHVybiB0aGUgbmV3IGltYWdlXG4gICAgcmV0dXJuIGltZztcbiAgfVxuXG4gIC8qKlxuICAgKiBJRTExIGZpeCAtLSB0aGFua3MgZHBvbmNoIVxuICAgKlxuICAgKiBMb2NhbCBoZWxwZXIgZnVuY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHt2aXMuSW1hZ2V9IGltYWdlVG9DYWNoZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpeEltYWdlQ29vcmRpbmF0ZXMoaW1hZ2VUb0NhY2hlKSB7XG4gICAgaWYgKGltYWdlVG9DYWNoZS53aWR0aCA9PT0gMCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbWFnZVRvQ2FjaGUpO1xuICAgICAgaW1hZ2VUb0NhY2hlLndpZHRoID0gaW1hZ2VUb0NhY2hlLm9mZnNldFdpZHRoO1xuICAgICAgaW1hZ2VUb0NhY2hlLmhlaWdodCA9IGltYWdlVG9DYWNoZS5vZmZzZXRIZWlnaHQ7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGltYWdlVG9DYWNoZSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlcztcbiIsICIndXNlIHN0cmljdCc7XG4vLyBGRjI2LSBidWc6IEFycmF5QnVmZmVycyBhcmUgbm9uLWV4dGVuc2libGUsIGJ1dCBPYmplY3QuaXNFeHRlbnNpYmxlIGRvZXMgbm90IHJlcG9ydCBpdFxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyID09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKGJ1ZmZlcikpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidWZmZXIsICdhJywgeyB2YWx1ZTogOCB9KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRpc0V4dGVuc2libGUoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmlzRXh0ZW5zaWJsZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5pc2V4dGVuc2libGVcbm1vZHVsZS5leHBvcnRzID0gKEZBSUxTX09OX1BSSU1JVElWRVMgfHwgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFKSA/IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFICYmIGNsYXNzb2YoaXQpID09PSAnQXJyYXlCdWZmZXInKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlO1xufSA6ICRpc0V4dGVuc2libGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1wcmV2ZW50ZXh0ZW5zaW9ucyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBpc0V4dGVuc2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcblxudmFyIFJFUVVJUkVEID0gZmFsc2U7XG52YXIgTUVUQURBVEEgPSB1aWQoJ21ldGEnKTtcbnZhciBpZCA9IDA7XG5cbnZhciBzZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBkZWZpbmVQcm9wZXJ0eShpdCwgTUVUQURBVEEsIHsgdmFsdWU6IHtcbiAgICBvYmplY3RJRDogJ08nICsgaWQrKywgLy8gb2JqZWN0IElEXG4gICAgd2Vha0RhdGE6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xuXG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBhIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLm9iamVjdElEO1xufTtcblxudmFyIGdldFdlYWtEYXRhID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiB0aGUgc3RvcmUgb2Ygd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLndlYWtEYXRhO1xufTtcblxuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaSU5HICYmIFJFUVVJUkVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhc093bihpdCwgTUVUQURBVEEpKSBzZXRNZXRhZGF0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cbnZhciBlbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gIG1ldGEuZW5hYmxlID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuICBSRVFVSVJFRCA9IHRydWU7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mO1xuICB2YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdGVzdFtNRVRBREFUQV0gPSAxO1xuXG4gIC8vIHByZXZlbnQgZXhwb3Npbmcgb2YgbWV0YWRhdGEga2V5XG4gIGlmIChnZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QpLmxlbmd0aCkge1xuICAgIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocmVzdWx0W2ldID09PSBNRVRBREFUQSkge1xuICAgICAgICAgIHNwbGljZShyZXN1bHQsIGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlLmZcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5hYmxlOiBlbmFibGUsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWtEYXRhOiBnZXRXZWFrRGF0YSxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5oaWRkZW5LZXlzW01FVEFEQVRBXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBSZXN1bHRQcm90b3R5cGUgPSBSZXN1bHQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgdW5ib3VuZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoYXQ7XG4gIHZhciBBU19FTlRSSUVTID0gISEob3B0aW9ucyAmJiBvcHRpb25zLkFTX0VOVFJJRVMpO1xuICB2YXIgSVNfUkVDT1JEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX1JFQ09SRCk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0KTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBjb25kaXRpb24pO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfUkVDT1JEKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZS5pdGVyYXRvcjtcbiAgfSBlbHNlIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICghaXRlckZuKSB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhpdGVyYWJsZSkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlcmFibGUpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBjYWxsRm4oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlLCBpdGVyRm4pO1xuICB9XG5cbiAgbmV4dCA9IElTX1JFQ09SRCA/IGl0ZXJhYmxlLm5leHQgOiBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSwgd3JhcHBlciwgY29tbW9uKSB7XG4gIHZhciBJU19NQVAgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ01hcCcpICE9PSAtMTtcbiAgdmFyIElTX1dFQUsgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ1dlYWsnKSAhPT0gLTE7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl9OQU1FXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgdmFyIGV4cG9ydGVkID0ge307XG4gIHZhciBDb25zdHJ1Y3RvcjtcblxuICBpZiAoIURFU0NSSVBUT1JTIHx8ICFpc0NhbGxhYmxlKE5hdGl2ZUNvbnN0cnVjdG9yKVxuICAgIHx8ICEoSVNfV0VBSyB8fCBOYXRpdmVQcm90b3R5cGUuZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKS5lbnRyaWVzKCkubmV4dCgpOyB9KSlcbiAgKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDb25zdHJ1Y3RvciA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB9IGVsc2Uge1xuICAgIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZShhbkluc3RhbmNlKHRhcmdldCwgUHJvdG90eXBlKSwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBjb2xsZWN0aW9uOiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGFyZ2V0W0FEREVSXSwgeyB0aGF0OiB0YXJnZXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICBmb3JFYWNoKFsnYWRkJywgJ2NsZWFyJywgJ2RlbGV0ZScsICdmb3JFYWNoJywgJ2dldCcsICdoYXMnLCAnc2V0JywgJ2tleXMnLCAndmFsdWVzJywgJ2VudHJpZXMnXSwgZnVuY3Rpb24gKEtFWSkge1xuICAgICAgdmFyIElTX0FEREVSID0gS0VZID09PSAnYWRkJyB8fCBLRVkgPT09ICdzZXQnO1xuICAgICAgaWYgKEtFWSBpbiBOYXRpdmVQcm90b3R5cGUgJiYgIShJU19XRUFLICYmIEtFWSA9PT0gJ2NsZWFyJykpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFByb3RvdHlwZSwgS0VZLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5jb2xsZWN0aW9uO1xuICAgICAgICAgIGlmICghSVNfQURERVIgJiYgSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkpIHJldHVybiBLRVkgPT09ICdnZXQnID8gdW5kZWZpbmVkIDogZmFsc2U7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGNvbGxlY3Rpb25bS0VZXShhID09PSAwID8gMCA6IGEsIGIpO1xuICAgICAgICAgIHJldHVybiBJU19BRERFUiA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgSVNfV0VBSyB8fCBkZWZpbmVQcm9wZXJ0eShQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb24uc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgZXhwb3J0ZWRbQ09OU1RSVUNUT1JfTkFNRV0gPSBDb25zdHJ1Y3RvcjtcbiAgJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIGV4cG9ydGVkKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5zYWZlICYmIHRhcmdldFtrZXldKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICB9IHJldHVybiB0YXJnZXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5mYXN0S2V5O1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGluZGV4OiBjcmVhdGUobnVsbCksXG4gICAgICAgIGZpcnN0OiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgc2l6ZTogMFxuICAgICAgfSk7XG4gICAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGF0LnNpemUgPSAwO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICB2YXIgZGVmaW5lID0gZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgdmFyIHByZXZpb3VzLCBpbmRleDtcbiAgICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sYXN0ID0gZW50cnkgPSB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91czogcHJldmlvdXMgPSBzdGF0ZS5sYXN0LFxuICAgICAgICAgIG5leHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXN0YXRlLmZpcnN0KSBzdGF0ZS5maXJzdCA9IGVudHJ5O1xuICAgICAgICBpZiAocHJldmlvdXMpIHByZXZpb3VzLm5leHQgPSBlbnRyeTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplKys7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplKys7XG4gICAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09ICdGJykgc3RhdGUuaW5kZXhbaW5kZXhdID0gZW50cnk7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgLy8gZmFzdCBjYXNlXG4gICAgICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gICAgICB2YXIgZW50cnk7XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHN0YXRlLmluZGV4W2luZGV4XTtcbiAgICAgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICAgICAgZm9yIChlbnRyeSA9IHN0YXRlLmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uZXh0KSB7XG4gICAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmNsZWFyKClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5jbGVhclxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmNsZWFyXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGRhdGEgPSBzdGF0ZS5pbmRleDtcbiAgICAgICAgdmFyIGVudHJ5ID0gc3RhdGUuZmlyc3Q7XG4gICAgICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wcmV2aW91cykgZW50cnkucHJldmlvdXMgPSBlbnRyeS5wcmV2aW91cy5uZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmlyc3QgPSBzdGF0ZS5sYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUgPSAwO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5kZWxldGVcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uZXh0O1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgICAgZGVsZXRlIHN0YXRlLmluZGV4W2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uZXh0ID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wcmV2aW91cyA9IHByZXY7XG4gICAgICAgICAgaWYgKHN0YXRlLmZpcnN0ID09PSBlbnRyeSkgc3RhdGUuZmlyc3QgPSBuZXh0O1xuICAgICAgICAgIGlmIChzdGF0ZS5sYXN0ID09PSBlbnRyeSkgc3RhdGUubGFzdCA9IHByZXY7XG4gICAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplLS07XG4gICAgICAgICAgZWxzZSB0aGF0LnNpemUtLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5maXJzdCkge1xuICAgICAgICAgIGJvdW5kRnVuY3Rpb24oZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuaGFzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuaGFzXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmdldFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52YWx1ZTtcbiAgICAgIH0sXG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IDoge1xuICAgICAgLy8gYFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKSB7XG4gICAgdmFyIElURVJBVE9SX05BTUUgPSBDT05TVFJVQ1RPUl9OQU1FICsgJyBJdGVyYXRvcic7XG4gICAgdmFyIGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICB2YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihJVEVSQVRPUl9OQU1FKTtcbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS57IGtleXMsIHZhbHVlcywgZW50cmllcywgQEBpdGVyYXRvciB9KClgIG1ldGhvZHNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIGRlZmluZUl0ZXJhdG9yKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgICB0eXBlOiBJVEVSQVRPUl9OQU1FLFxuICAgICAgICB0YXJnZXQ6IGl0ZXJhdGVkLFxuICAgICAgICBzdGF0ZTogZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUoaXRlcmF0ZWQpLFxuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmxhc3Q7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghc3RhdGUudGFyZ2V0IHx8ICEoc3RhdGUubGFzdCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuc3RhdGUuZmlyc3QpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09PSAna2V5cycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LmtleSwgZmFsc2UpO1xuICAgICAgaWYgKGtpbmQgPT09ICd2YWx1ZXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS52YWx1ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2VudHJ5LmtleSwgZW50cnkudmFsdWVdLCBmYWxzZSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGVbQEBzcGVjaWVzXWAgYWNjZXNzb3JzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtbWFwLUBAc3BlY2llc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXNldC1AQHNwZWNpZXNcbiAgICBzZXRTcGVjaWVzKENPTlNUUlVDVE9SX05BTUUpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uU3Ryb25nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIGBNYXBgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC1vYmplY3RzXG5jb2xsZWN0aW9uKCdNYXAnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIGNvbGxlY3Rpb25TdHJvbmcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubWFwJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5NYXA7XG4iLCAiLyoqXG4gKiBUaGlzIGNsYXNzIGNhbiBzdG9yZSBncm91cHMgYW5kIG9wdGlvbnMgc3BlY2lmaWMgZm9yIGdyb3Vwcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdyb3VwcyB7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5fZGVmYXVsdEluZGV4ID0gMDtcbiAgICB0aGlzLl9ncm91cEluZGV4ID0gMDtcblxuICAgIHRoaXMuX2RlZmF1bHRHcm91cHMgPSBbXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjMkI3Q0U5XCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzk3QzJGQ1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiMyQjdDRTlcIiwgYmFja2dyb3VuZDogXCIjRDJFNUZGXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiMyQjdDRTlcIiwgYmFja2dyb3VuZDogXCIjRDJFNUZGXCIgfSxcbiAgICAgIH0sIC8vIDA6IGJsdWVcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNGRkE1MDBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkZGRjAwXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0ZGQTUwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRkZGQTNcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0ZGQTUwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRkZGQTNcIiB9LFxuICAgICAgfSwgLy8gMTogeWVsbG93XG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjRkEwQTEwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0ZCN0U4MVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNGQTBBMTBcIiwgYmFja2dyb3VuZDogXCIjRkZBRkIxXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNGQTBBMTBcIiwgYmFja2dyb3VuZDogXCIjRkZBRkIxXCIgfSxcbiAgICAgIH0sIC8vIDI6IHJlZFxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzQxQTkwNlwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM3QkUxNDFcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjNDFBOTA2XCIsIGJhY2tncm91bmQ6IFwiI0ExRUM3NlwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjNDFBOTA2XCIsIGJhY2tncm91bmQ6IFwiI0ExRUM3NlwiIH0sXG4gICAgICB9LCAvLyAzOiBncmVlblxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0UxMjlGMFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNFQjdERjRcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRTEyOUYwXCIsIGJhY2tncm91bmQ6IFwiI0YwQjNGNVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRTEyOUYwXCIsIGJhY2tncm91bmQ6IFwiI0YwQjNGNVwiIH0sXG4gICAgICB9LCAvLyA0OiBtYWdlbnRhXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjN0MyOUYwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0FEODVFNFwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiM3QzI5RjBcIiwgYmFja2dyb3VuZDogXCIjRDNCREYwXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiM3QzI5RjBcIiwgYmFja2dyb3VuZDogXCIjRDNCREYwXCIgfSxcbiAgICAgIH0sIC8vIDU6IHB1cnBsZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0MzN0YwMFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRkE4MDdcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjQzM3RjAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGQ0E2NlwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjQzM3RjAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGQ0E2NlwiIH0sXG4gICAgICB9LCAvLyA2OiBvcmFuZ2VcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiM0MjIwRkJcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjNkU2RUZEXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiIzQyMjBGQlwiLCBiYWNrZ3JvdW5kOiBcIiM5QjlCRkRcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiIzQyMjBGQlwiLCBiYWNrZ3JvdW5kOiBcIiM5QjlCRkRcIiB9LFxuICAgICAgfSwgLy8gNzogZGFya2JsdWVcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNGRDVBNzdcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkZDMENCXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0ZENUE3N1wiLCBiYWNrZ3JvdW5kOiBcIiNGRkQxRDlcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0ZENUE3N1wiLCBiYWNrZ3JvdW5kOiBcIiNGRkQxRDlcIiB9LFxuICAgICAgfSwgLy8gODogcGlua1xuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzRBRDYzQVwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNDMkZBQkNcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjNEFENjNBXCIsIGJhY2tncm91bmQ6IFwiI0U2RkZFM1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjNEFENjNBXCIsIGJhY2tncm91bmQ6IFwiI0U2RkZFM1wiIH0sXG4gICAgICB9LCAvLyA5OiBtaW50XG5cbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiM5OTAwMDBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRUUwMDAwXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0JCMDAwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjMzMzNcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0JCMDAwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjMzMzNcIiB9LFxuICAgICAgfSwgLy8gMTA6YnJpZ2h0IHJlZFxuXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjRkY2MDAwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0ZGNjAwMFwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNGRjYwMDBcIiwgYmFja2dyb3VuZDogXCIjRkY2MDAwXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNGRjYwMDBcIiwgYmFja2dyb3VuZDogXCIjRkY2MDAwXCIgfSxcbiAgICAgIH0sIC8vIDEyOiByZWFsIG9yYW5nZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzk3QzJGQ1wiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiMyQjdDRTlcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRDJFNUZGXCIsIGJhY2tncm91bmQ6IFwiIzJCN0NFOVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRDJFNUZGXCIsIGJhY2tncm91bmQ6IFwiIzJCN0NFOVwiIH0sXG4gICAgICB9LCAvLyAxMzogYmx1ZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzM5OTYwNVwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiMyNTVDMDNcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjMzk5NjA1XCIsIGJhY2tncm91bmQ6IFwiIzI1NUMwM1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjMzk5NjA1XCIsIGJhY2tncm91bmQ6IFwiIzI1NUMwM1wiIH0sXG4gICAgICB9LCAvLyAxNDogZ3JlZW5cbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNCNzAwNTRcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkYwMDdFXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0I3MDA1NFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjAwN0VcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0I3MDA1NFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjAwN0VcIiB9LFxuICAgICAgfSwgLy8gMTU6IG1hZ2VudGFcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNBRDg1RTRcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjN0MyOUYwXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0QzQkRGMFwiLCBiYWNrZ3JvdW5kOiBcIiM3QzI5RjBcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0QzQkRGMFwiLCBiYWNrZ3JvdW5kOiBcIiM3QzI5RjBcIiB9LFxuICAgICAgfSwgLy8gMTY6IHB1cnBsZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzQ1NTdGQVwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiMwMDBFQTFcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjNkU2RUZEXCIsIGJhY2tncm91bmQ6IFwiIzAwMEVBMVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjNkU2RUZEXCIsIGJhY2tncm91bmQ6IFwiIzAwMEVBMVwiIH0sXG4gICAgICB9LCAvLyAxNzogZGFya2JsdWVcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNGRkMwQ0JcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkQ1QTc3XCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0ZGRDFEOVwiLCBiYWNrZ3JvdW5kOiBcIiNGRDVBNzdcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0ZGRDFEOVwiLCBiYWNrZ3JvdW5kOiBcIiNGRDVBNzdcIiB9LFxuICAgICAgfSwgLy8gMTg6IHBpbmtcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNDMkZBQkNcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjNzRENjZBXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0U2RkZFM1wiLCBiYWNrZ3JvdW5kOiBcIiM3NEQ2NkFcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0U2RkZFM1wiLCBiYWNrZ3JvdW5kOiBcIiM3NEQ2NkFcIiB9LFxuICAgICAgfSwgLy8gMTk6IG1pbnRcblxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0VFMDAwMFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM5OTAwMDBcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRkYzMzMzXCIsIGJhY2tncm91bmQ6IFwiI0JCMDAwMFwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRkYzMzMzXCIsIGJhY2tncm91bmQ6IFwiI0JCMDAwMFwiIH0sXG4gICAgICB9LCAvLyAyMDpicmlnaHQgcmVkXG4gICAgXTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICB1c2VEZWZhdWx0R3JvdXBzOiB0cnVlLFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvcHRpb25GaWVsZHMgPSBbXCJ1c2VEZWZhdWx0R3JvdXBzXCJdO1xuXG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBncm91cE5hbWUgaW4gb3B0aW9ucykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsIGdyb3VwTmFtZSkpIHtcbiAgICAgICAgICBpZiAob3B0aW9uRmllbGRzLmluZGV4T2YoZ3JvdXBOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uc1tncm91cE5hbWVdO1xuICAgICAgICAgICAgdGhpcy5hZGQoZ3JvdXBOYW1lLCBncm91cCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBncm91cHNcbiAgICovXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuX2dyb3VwcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9ncm91cE5hbWVzID0gW107XG4gIH1cblxuICAvKipcbiAgICogR2V0IGdyb3VwIG9wdGlvbnMgb2YgYSBncm91cG5hbWUuXG4gICAqIElmIGdyb3VwbmFtZSBpcyBub3QgZm91bmQsIGEgbmV3IGdyb3VwIG1heSBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0geyp9ICAgICAgIGdyb3VwbmFtZSAgICAgQ2FuIGJlIGEgbnVtYmVyLCBzdHJpbmcsIERhdGUsIGV0Yy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc2hvdWxkQ3JlYXRlPXRydWVdIElmIHRydWUsIGNyZWF0ZSBhIG5ldyBncm91cFxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgZm91bmQgb3IgY3JlYXRlZCBncm91cFxuICAgKi9cbiAgZ2V0KGdyb3VwbmFtZSwgc2hvdWxkQ3JlYXRlID0gdHJ1ZSkge1xuICAgIGxldCBncm91cCA9IHRoaXMuX2dyb3Vwcy5nZXQoZ3JvdXBuYW1lKTtcblxuICAgIGlmIChncm91cCA9PT0gdW5kZWZpbmVkICYmIHNob3VsZENyZWF0ZSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm9wdGlvbnMudXNlRGVmYXVsdEdyb3VwcyA9PT0gZmFsc2UgJiZcbiAgICAgICAgdGhpcy5fZ3JvdXBOYW1lcy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgLy8gY3JlYXRlIG5ldyBncm91cFxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2dyb3VwSW5kZXggJSB0aGlzLl9ncm91cE5hbWVzLmxlbmd0aDtcbiAgICAgICAgKyt0aGlzLl9ncm91cEluZGV4O1xuICAgICAgICBncm91cCA9IHt9O1xuICAgICAgICBncm91cC5jb2xvciA9IHRoaXMuX2dyb3Vwcy5nZXQodGhpcy5fZ3JvdXBOYW1lc1tpbmRleF0pO1xuICAgICAgICB0aGlzLl9ncm91cHMuc2V0KGdyb3VwbmFtZSwgZ3JvdXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIG5ldyBncm91cFxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2RlZmF1bHRJbmRleCAlIHRoaXMuX2RlZmF1bHRHcm91cHMubGVuZ3RoO1xuICAgICAgICB0aGlzLl9kZWZhdWx0SW5kZXgrKztcbiAgICAgICAgZ3JvdXAgPSB7fTtcbiAgICAgICAgZ3JvdXAuY29sb3IgPSB0aGlzLl9kZWZhdWx0R3JvdXBzW2luZGV4XTtcbiAgICAgICAgdGhpcy5fZ3JvdXBzLnNldChncm91cG5hbWUsIGdyb3VwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGN1c3RvbSBncm91cCBzdHlsZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBncm91cCwgYSBuZXcgZ3JvdXAgd2lsbCBiZVxuICAgKiBjcmVhdGVkIGlmIGEgZ3JvdXAgd2l0aCB0aGUgc2FtZSBuYW1lIGRvZXNuJ3QgZXhpc3QsIG90aGVyd2lzZSB0aGUgb2xkXG4gICAqIGdyb3VwcyBzdHlsZSB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGUgLSBBbiBvYmplY3QgY29udGFpbmluZyBib3JkZXJDb2xvciwgYmFja2dyb3VuZENvbG9yLFxuICAgKiBldGMuXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBjcmVhdGVkIGdyb3VwIG9iamVjdC5cbiAgICovXG4gIGFkZChncm91cE5hbWUsIHN0eWxlKSB7XG4gICAgLy8gT25seSBwdXNoIGdyb3VwIG5hbWUgb25jZSB0byBwcmV2ZW50IGR1cGxpY2F0ZXMgd2hpY2ggd291bGQgY29uc3VtZSBtb3JlXG4gICAgLy8gUkFNIGFuZCBhbHNvIHNrZXcgdGhlIGRpc3RyaWJ1dGlvbiB0b3dhcmRzIG1vcmUgb2Z0ZW4gdXBkYXRlZCBncm91cHMsXG4gICAgLy8gbmVpdGhlciBvZiB3aGljaCBpcyBkZXNpcmFibGUuXG4gICAgaWYgKCF0aGlzLl9ncm91cHMuaGFzKGdyb3VwTmFtZSkpIHtcbiAgICAgIHRoaXMuX2dyb3VwTmFtZXMucHVzaChncm91cE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLl9ncm91cHMuc2V0KGdyb3VwTmFtZSwgc3R5bGUpO1xuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBgTnVtYmVyLmlzTmFOYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLmlzbmFuXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIHJldHVybiBudW1iZXIgIT09IG51bWJlcjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5udW1iZXIuaXMtbmFuJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5OdW1iZXIuaXNOYU47XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGdsb2JhbElzRmluaXRlID0gZ2xvYmFsLmlzRmluaXRlO1xuXG4vLyBgTnVtYmVyLmlzRmluaXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLmlzZmluaXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbnVtYmVyLWlzZmluaXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzRmluaXRlIHx8IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgZ2xvYmFsSXNGaW5pdGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBudW1iZXJJc0Zpbml0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9udW1iZXItaXMtZmluaXRlJyk7XG5cbi8vIGBOdW1iZXIuaXNGaW5pdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNmaW5pdGVcbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHsgaXNGaW5pdGU6IG51bWJlcklzRmluaXRlIH0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubnVtYmVyLmlzLWZpbml0ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguTnVtYmVyLmlzRmluaXRlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLnNvbWU7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29tZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfSwge1xuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb21lJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5Jykuc29tZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb21lJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvbWU7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNvbWUpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc29tZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xufTtcblxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSkgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIga2V5LCBkZXNjcmlwdG9yO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSA9IGtleXNbaW5kZXgrK10pO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyAhPT0gZGVmaW5lUHJvcGVydGllcywgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydGllczogZGVmaW5lUHJvcGVydGllc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydGllcyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhULCBEKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhULCBEKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydGllcy5zaGFtKSBkZWZpbmVQcm9wZXJ0aWVzLnNoYW0gPSB0cnVlO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTsiLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciAkcGFyc2VGbG9hdCA9IGdsb2JhbC5wYXJzZUZsb2F0O1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgSVRFUkFUT1IgPSBTeW1ib2wgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZPUkNFRCA9IDEgLyAkcGFyc2VGbG9hdCh3aGl0ZXNwYWNlcyArICctMCcpICE9PSAtSW5maW5pdHlcbiAgLy8gTVMgRWRnZSAxOC0gYnJva2VuIHdpdGggYm94ZWQgc3ltYm9sc1xuICB8fCAoSVRFUkFUT1IgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHsgJHBhcnNlRmxvYXQoT2JqZWN0KElURVJBVE9SKSk7IH0pKTtcblxuLy8gYHBhcnNlRmxvYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wYXJzZWZsb2F0LXN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBGT1JDRUQgPyBmdW5jdGlvbiBwYXJzZUZsb2F0KHN0cmluZykge1xuICB2YXIgdHJpbW1lZFN0cmluZyA9IHRyaW0odG9TdHJpbmcoc3RyaW5nKSk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdCh0cmltbWVkU3RyaW5nKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gMCAmJiBjaGFyQXQodHJpbW1lZFN0cmluZywgMCkgPT09ICctJyA/IC0wIDogcmVzdWx0O1xufSA6ICRwYXJzZUZsb2F0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1wYXJzZS1mbG9hdCcpO1xuXG4vLyBgcGFyc2VGbG9hdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlZmxvYXQtc3RyaW5nXG4kKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHBhcnNlRmxvYXQgIT09ICRwYXJzZUZsb2F0IH0sIHtcbiAgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucGFyc2UtZmxvYXQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLnBhcnNlRmxvYXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJykuZjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuICFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcygxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktbmFtZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiaW1wb3J0IHsgdG9wTW9zdCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBjb21wb25lbnRzXG4gKi9cblxuLyoqXG4gKiBEZXRlcm1pbmUgdmFsdWVzIHRvIHVzZSBmb3IgKHN1YilvcHRpb25zIG9mICdjaG9zZW4nLlxuICpcbiAqIFRoaXMgb3B0aW9uIGlzIGVpdGhlciBhIGJvb2xlYW4gb3IgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBzaG91bGQgYmUgZXhhbWluZWQgZnVydGhlci5cbiAqIFRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFyZTpcbiAqXG4gKiAtIGNob3NlbjogPGJvb2xlYW4gdmFsdWU+XG4gKiAtIGNob3NlbjogeyBzdWJPcHRpb246IDxib29sZWFuIG9yIGZ1bmN0aW9uPiB9XG4gKlxuICogV2hlcmUgc3ViT3B0aW9uIGlzICdub2RlJywgJ2VkZ2UnIG9yICdsYWJlbCcuXG4gKlxuICogVGhlIGludGVudGlvbiBvZiB0aGlzIG1ldGhvZCBhcHBlYXJzIHRvIGJlIHRvIHNldCBhIHNwZWNpZmljIHByaW9yaXR5IHRvIHRoZSBvcHRpb25zO1xuICogU2luY2UgbW9zdCBwcm9wZXJ0aWVzIGFyZSBlaXRoZXIgYnJpZGdlZCBvciBtZXJnZWQgaW50byB0aGUgbG9jYWwgb3B0aW9ucyBvYmplY3RzLCB0aGVyZVxuICogaXMgbm90IG11Y2ggcG9pbnQgaW4gaGFuZGxpbmcgdGhlbSBzZXBhcmF0ZWx5LlxuICogVE9ETzogZXhhbWluZSBpZiAnbW9zdCcgaW4gcHJldmlvdXMgc2VudGVuY2UgY2FuIGJlIHJlcGxhY2VkIHdpdGggJ2FsbCcuIEluIHRoYXQgY2FzZSwgd2VcbiAqICAgICAgIHNob3VsZCBiZSBhYmxlIHRvIGdldCByaWQgb2YgdGhpcyBtZXRob2QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9ICBzdWJPcHRpb24gIG9wdGlvbiB3aXRoaW4gb2JqZWN0ICdjaG9zZW4nIHRvIGNvbnNpZGVyOyBlaXRoZXIgJ25vZGUnLCAnZWRnZScgb3IgJ2xhYmVsJ1xuICogQHBhcmFtIHtvYmplY3R9ICBwaWxlICAgICAgIGFycmF5IG9mIG9wdGlvbnMgb2JqZWN0cyB0byBjb25zaWRlclxuICogQHJldHVybnMge2Jvb2xlYW4gfCBGdW5jdGlvbn0gIHZhbHVlIGZvciBwYXNzZWQgc3ViT3B0aW9uIG9mICdjaG9zZW4nIHRvIHVzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hvb3NpZnkoc3ViT3B0aW9uLCBwaWxlKSB7XG4gIC8vIGFsbG93ZWQgdmFsdWVzIGZvciBzdWJPcHRpb25cbiAgY29uc3QgYWxsb3dlZCA9IFtcIm5vZGVcIiwgXCJlZGdlXCIsIFwibGFiZWxcIl07XG4gIGxldCB2YWx1ZSA9IHRydWU7XG5cbiAgY29uc3QgY2hvc2VuID0gdG9wTW9zdChwaWxlLCBcImNob3NlblwiKTtcbiAgaWYgKHR5cGVvZiBjaG9zZW4gPT09IFwiYm9vbGVhblwiKSB7XG4gICAgdmFsdWUgPSBjaG9zZW47XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNob3NlbiA9PT0gXCJvYmplY3RcIikge1xuICAgIGlmIChhbGxvd2VkLmluZGV4T2Yoc3ViT3B0aW9uKSA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJjaG9vc2lmeTogc3ViT3B0aW9uICdcIiArXG4gICAgICAgICAgc3ViT3B0aW9uICtcbiAgICAgICAgICBcIicgc2hvdWxkIGJlIG9uZSBvZiBcIiArXG4gICAgICAgICAgXCInXCIgK1xuICAgICAgICAgIGFsbG93ZWQuam9pbihcIicsICdcIikgK1xuICAgICAgICAgIFwiJ1wiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNob3NlbkVkZ2UgPSB0b3BNb3N0KHBpbGUsIFtcImNob3NlblwiLCBzdWJPcHRpb25dKTtcbiAgICBpZiAodHlwZW9mIGNob3NlbkVkZ2UgPT09IFwiYm9vbGVhblwiIHx8IHR5cGVvZiBjaG9zZW5FZGdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHZhbHVlID0gY2hvc2VuRWRnZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHBvaW50IGZhbGxzIHdpdGhpbiB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLlxuICpcbiAqIEBwYXJhbSB7cmVjdH0gcmVjdFxuICogQHBhcmFtIHtwb2ludH0gcG9pbnRcbiAqIEBwYXJhbSB7cm90YXRpb25Qb2ludH0gW3JvdGF0aW9uUG9pbnRdIGlmIHNwZWNpZmllZCwgdGhlIHJvdGF0aW9uIHRoYXQgYXBwbGllcyB0byB0aGUgcmVjdGFuZ2xlLlxuICogQHJldHVybnMge2Jvb2xlYW59ICB0cnVlIGlmIHBvaW50IHdpdGhpbiByZWN0YW5nbGUsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9pbnRJblJlY3QocmVjdCwgcG9pbnQsIHJvdGF0aW9uUG9pbnQpIHtcbiAgaWYgKHJlY3Qud2lkdGggPD0gMCB8fCByZWN0LmhlaWdodCA8PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBlYXJseSBvdXRcbiAgfVxuXG4gIGlmIChyb3RhdGlvblBvaW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBSb3RhdGUgdGhlIHBvaW50IHRoZSBzYW1lIGFtb3VudCBhcyB0aGUgcmVjdGFuZ2xlXG4gICAgY29uc3QgdG1wID0ge1xuICAgICAgeDogcG9pbnQueCAtIHJvdGF0aW9uUG9pbnQueCxcbiAgICAgIHk6IHBvaW50LnkgLSByb3RhdGlvblBvaW50LnksXG4gICAgfTtcblxuICAgIGlmIChyb3RhdGlvblBvaW50LmFuZ2xlICE9PSAwKSB7XG4gICAgICAvLyBJbiBvcmRlciB0byBnZXQgdGhlIGNvb3JkaW5hdGVzIHRoZSBzYW1lLCB5b3UgbmVlZCB0b1xuICAgICAgLy8gcm90YXRlIGluIHRoZSByZXZlcnNlIGRpcmVjdGlvblxuICAgICAgY29uc3QgYW5nbGUgPSAtcm90YXRpb25Qb2ludC5hbmdsZTtcblxuICAgICAgY29uc3QgdG1wMiA9IHtcbiAgICAgICAgeDogTWF0aC5jb3MoYW5nbGUpICogdG1wLnggLSBNYXRoLnNpbihhbmdsZSkgKiB0bXAueSxcbiAgICAgICAgeTogTWF0aC5zaW4oYW5nbGUpICogdG1wLnggKyBNYXRoLmNvcyhhbmdsZSkgKiB0bXAueSxcbiAgICAgIH07XG4gICAgICBwb2ludCA9IHRtcDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvaW50ID0gdG1wO1xuICAgIH1cblxuICAgIC8vIE5vdGUgdGhhdCBpZiBhIHJvdGF0aW9uIGlzIHNwZWNpZmllZCwgdGhlIHJlY3RhbmdsZSBjb29yZGluYXRlc1xuICAgIC8vIGFyZSAqKm5vdCogdGhlIGZ1bGwgY2FudmFzIGNvb3JkaW5hdGVzLiBUaGV5IGFyZSByZWxhdGl2ZSB0byB0aGVcbiAgICAvLyByb3RhdGlvblBvaW50LiBIZW5jZSwgdGhlIHBvaW50IGNvb3JkaW5hdGVzIG5lZWQgbm90IGJlIHRyYW5zbGF0ZWRcbiAgICAvLyBiYWNrIGluIHRoaXMgY2FzZS5cbiAgfVxuXG4gIGNvbnN0IHJpZ2h0ID0gcmVjdC54ICsgcmVjdC53aWR0aDtcbiAgY29uc3QgYm90dG9tID0gcmVjdC55ICsgcmVjdC53aWR0aDtcblxuICByZXR1cm4gKFxuICAgIHJlY3QubGVmdCA8IHBvaW50LnggJiZcbiAgICByaWdodCA+IHBvaW50LnggJiZcbiAgICByZWN0LnRvcCA8IHBvaW50LnkgJiZcbiAgICBib3R0b20gPiBwb2ludC55XG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgZ2l2ZW4gdmFsdWUgaXMgYWNjZXB0YWJsZSBhcyBhIGxhYmVsIHRleHQuXG4gKlxuICogQHBhcmFtIHsqfSB0ZXh0IHZhbHVlIHRvIGNoZWNrOyBjYW4gYmUgYW55dGhpbmcgYXQgdGhpcyBwb2ludFxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdmFsaWQgbGFiZWwgdmFsdWUsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZExhYmVsKHRleHQpIHtcbiAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgcXVpdGUgc3RyaWN0OiB0eXBlcyB0aGF0ICptaWdodCogYmUgY29udmVydGVkIHRvIHN0cmluZyBhcmUgZGlzYWxsb3dlZFxuICByZXR1cm4gdHlwZW9mIHRleHQgPT09IFwic3RyaW5nXCIgJiYgdGV4dCAhPT0gXCJcIjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHgsIHkgb2Ygc2VsZiByZWZlcmVuY2UgY2lyY2xlIGJhc2VkIG9uIHByb3ZpZGVkIGFuZ2xlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGN0eFxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkaXVzXG4gKiBAcGFyYW0ge1Zpc05vZGV9IG5vZGVcbiAqIEByZXR1cm5zIHtvYmplY3R9IHggYW5kIHkgY29vcmRpbmF0ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGZSZWZDb29yZGluYXRlcyhjdHgsIGFuZ2xlLCByYWRpdXMsIG5vZGUpIHtcbiAgbGV0IHggPSBub2RlLng7XG4gIGxldCB5ID0gbm9kZS55O1xuXG4gIGlmICh0eXBlb2Ygbm9kZS5kaXN0YW5jZVRvQm9yZGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAvL2NhbGN1bGF0aW5nIG9wcG9zaXRlIGFuZCBhZGphY2VudFxuICAgIC8vZGlzdGFuZVRvQm9yZGVyIGJlY29tZXMgSHlwb3RlbnVzZS5cbiAgICAvL0Zvcm11bGFzIHNpbihhKSA9IE9wcG9zaXRlIC8gSHlwb3RlbnVzZSBhbmQgY29zKGEpID0gQWRqYWNlbnQgLyBIeXBvdGVudXNlXG4gICAgY29uc3QgdG9Cb3JkZXJEaXN0ID0gbm9kZS5kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICAgIGNvbnN0IHlGcm9tTm9kZUNlbnRlciA9IE1hdGguc2luKGFuZ2xlKSAqIHRvQm9yZGVyRGlzdDtcbiAgICBjb25zdCB4RnJvbU5vZGVDZW50ZXIgPSBNYXRoLmNvcyhhbmdsZSkgKiB0b0JvcmRlckRpc3Q7XG4gICAgLy94RnJvbU5vZGVDZW50ZXIgaXMgYmFzaWNhbGx5IHggYW5kIGlmIHhGcm9tTm9kZUNlbnRlciBlcXVhbHMgdG8gdGhlIGRpc3RhbmNlIHRvIGJvcmRlciB0aGVuIGl0IG1lYW5zXG4gICAgLy90aGF0IHkgZG9lcyBub3QgbmVlZCBjYWxjdWxhdGlvbiBiZWNhdXNlIGl0IGlzIGVxdWFsIG5vZGUuaGVpZ2h0IC8gMiBvciBub2RlLnlcbiAgICAvL3NhbWUgdGhpbmcgd2l0aCB5RnJvbU5vZGVDZW50ZXIgYW5kIGlmIHlGcm9tTm9kZUNlbnRlciBlcXVhbHMgdG8gdGhlIGRpc3RhbmNlIHRvIGJvcmRlciB0aGVuIGl0IG1lYW5zXG4gICAgLy90aGF0IHggaXMgZXF1YWwgbm9kZS53aWR0aCAvIDIgb3Igbm9kZS54XG4gICAgaWYgKHhGcm9tTm9kZUNlbnRlciA9PT0gdG9Cb3JkZXJEaXN0KSB7XG4gICAgICB4ICs9IHRvQm9yZGVyRGlzdDtcbiAgICAgIHkgPSBub2RlLnk7XG4gICAgfSBlbHNlIGlmICh5RnJvbU5vZGVDZW50ZXIgPT09IHRvQm9yZGVyRGlzdCkge1xuICAgICAgeCA9IG5vZGUueDtcbiAgICAgIHkgLT0gdG9Cb3JkZXJEaXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB4ICs9IHhGcm9tTm9kZUNlbnRlcjtcbiAgICAgIHkgLT0geUZyb21Ob2RlQ2VudGVyO1xuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlLnNoYXBlLndpZHRoID4gbm9kZS5zaGFwZS5oZWlnaHQpIHtcbiAgICB4ID0gbm9kZS54ICsgbm9kZS5zaGFwZS53aWR0aCAqIDAuNTtcbiAgICB5ID0gbm9kZS55IC0gcmFkaXVzO1xuICB9IGVsc2Uge1xuICAgIHggPSBub2RlLnggKyByYWRpdXM7XG4gICAgeSA9IG5vZGUueSAtIG5vZGUuc2hhcGUuaGVpZ2h0ICogMC41O1xuICB9XG5cbiAgcmV0dXJuIHsgeCwgeSB9O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnZhbHVlcztcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnZhbHVlcztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUudmFsdWVzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdmFsdWVzXCIpOyIsICIvKipcbiAqIENhbGxiYWNrIHRvIGRldGVybWluZSB0ZXh0IGRpbWVuc2lvbnMsIHVzaW5nIHRoZSBwYXJlbnQgbGFiZWwgc2V0dGluZ3MuXG4gKlxuICogQGNhbGxiYWNrIE1lYXN1cmVUZXh0XG4gKiBAcGFyYW0ge3RleHR9IHRleHRcbiAqIEBwYXJhbSB7dGV4dH0gbW9kXG4gKiBAcmV0dXJucyB7b2JqZWN0fSB7IHdpZHRoLCB2YWx1ZXN9IHdpZHRoIGluIHBpeGVscyBhbmQgZm9udCBhdHRyaWJ1dGVzXG4gKi9cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIExhYmVsIHdoaWNoIGNvbGxlY3RzIHJlc3VsdHMgb2Ygc3BsaXR0aW5nIGxhYmVscyBpbnRvIGxpbmVzIGFuZCBibG9ja3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgTGFiZWxBY2N1bXVsYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge01lYXN1cmVUZXh0fSBtZWFzdXJlVGV4dFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVhc3VyZVRleHQpIHtcbiAgICB0aGlzLm1lYXN1cmVUZXh0ID0gbWVhc3VyZVRleHQ7XG4gICAgdGhpcy5jdXJyZW50ID0gMDtcbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG4gICAgdGhpcy5saW5lcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZCBnaXZlbiB0ZXh0IHRvIHRoZSBnaXZlbiBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gIGwgICAgaW5kZXggb2YgbGluZSB0byBhZGQgdG9cbiAgICogQHBhcmFtIHtzdHJpbmd9ICB0ZXh0IHN0cmluZyB0byBhcHBlbmQgdG8gbGluZVxuICAgKiBAcGFyYW0geydib2xkJ3wnaXRhbCd8J2JvbGRpdGFsJ3wnbW9ubyd8J25vcm1hbCd9IFttb2Q9J25vcm1hbCddXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWRkKGwsIHRleHQsIG1vZCA9IFwibm9ybWFsXCIpIHtcbiAgICBpZiAodGhpcy5saW5lc1tsXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxpbmVzW2xdID0ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBibG9ja3M6IFtdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBXZSBzdGlsbCBuZWVkIHRvIHNldCBhIGJsb2NrIGZvciB1bmRlZmluZWQgYW5kIGVtcHR5IHRleHRzLCBoZW5jZSByZXR1cm4gYXQgdGhpcyBwb2ludFxuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBhdCB0aGlzIHBvaW50IGlmIHdlJ3JlIGF0IHRoZVxuICAgIC8vIHN0YXJ0IG9mIGFuIGVtcHR5IGxpbmUgb3Igbm90LlxuICAgIC8vIFRvIGNvbXBlbnNhdGUsIGVtcHR5IGJsb2NrcyBhcmUgcmVtb3ZlZCBpbiBgZmluYWxpemUoKWAuXG4gICAgLy9cbiAgICAvLyBFbXB0eSBzdHJpbmdzIHNob3VsZCBzdGlsbCBoYXZlIGEgaGVpZ2h0XG4gICAgbGV0IHRtcFRleHQgPSB0ZXh0O1xuICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQgfHwgdGV4dCA9PT0gXCJcIikgdG1wVGV4dCA9IFwiIFwiO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHdpZHRoIGFuZCBnZXQgdGhlIGZvbnQgcHJvcGVydGllc1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWVhc3VyZVRleHQodG1wVGV4dCwgbW9kKTtcbiAgICBjb25zdCBibG9jayA9IE9iamVjdC5hc3NpZ24oe30sIHJlc3VsdC52YWx1ZXMpO1xuICAgIGJsb2NrLnRleHQgPSB0ZXh0O1xuICAgIGJsb2NrLndpZHRoID0gcmVzdWx0LndpZHRoO1xuICAgIGJsb2NrLm1vZCA9IG1vZDtcblxuICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQgfHwgdGV4dCA9PT0gXCJcIikge1xuICAgICAgYmxvY2sud2lkdGggPSAwO1xuICAgIH1cblxuICAgIHRoaXMubGluZXNbbF0uYmxvY2tzLnB1c2goYmxvY2spO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBsaW5lIHdpZHRoLiBXZSBuZWVkIHRoaXMgZm9yIGRldGVybWluaW5nIGlmIGEgc3RyaW5nIGdvZXMgb3ZlciBtYXggd2lkdGhcbiAgICB0aGlzLmxpbmVzW2xdLndpZHRoICs9IGJsb2NrLndpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHdpZHRoIGluIHBpeGVscyBvZiB0aGUgY3VycmVudCBsaW5lLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgY3VyV2lkdGgoKSB7XG4gICAgY29uc3QgbGluZSA9IHRoaXMubGluZXNbdGhpcy5jdXJyZW50XTtcbiAgICBpZiAobGluZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcblxuICAgIHJldHVybiBsaW5lLndpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0ZXh0IGluIGJsb2NrIHRvIGN1cnJlbnQgbGluZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcGFyYW0geydib2xkJ3wnaXRhbCd8J2JvbGRpdGFsJ3wnbW9ubyd8J25vcm1hbCd9IFttb2Q9J25vcm1hbCddXG4gICAqL1xuICBhcHBlbmQodGV4dCwgbW9kID0gXCJub3JtYWxcIikge1xuICAgIHRoaXMuX2FkZCh0aGlzLmN1cnJlbnQsIHRleHQsIG1vZCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRleHQgaW4gYmxvY2sgdG8gY3VycmVudCBsaW5lIGFuZCBzdGFydCBhIG5ldyBsaW5lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7J2JvbGQnfCdpdGFsJ3wnYm9sZGl0YWwnfCdtb25vJ3wnbm9ybWFsJ30gW21vZD0nbm9ybWFsJ11cbiAgICovXG4gIG5ld0xpbmUodGV4dCwgbW9kID0gXCJub3JtYWxcIikge1xuICAgIHRoaXMuX2FkZCh0aGlzLmN1cnJlbnQsIHRleHQsIG1vZCk7XG4gICAgdGhpcy5jdXJyZW50Kys7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGFuZCBzZXQgdGhlIGhlaWdodHMgb2YgYWxsIHRoZSBsaW5lcyBjdXJyZW50bHkgY29udGFpbmVkIGluIHRoaXMgaW5zdGFuY2VcbiAgICpcbiAgICogTm90ZSB0aGF0IHdpZHRoIGhhcyBhbHJlYWR5IGJlZW4gc2V0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGV0ZXJtaW5lTGluZUhlaWdodHMoKSB7XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaysrKSB7XG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1trXTtcblxuICAgICAgLy8gTG9va2luZyBmb3IgbWF4IGhlaWdodCBvZiBibG9ja3MgaW4gbGluZVxuICAgICAgbGV0IGhlaWdodCA9IDA7XG5cbiAgICAgIGlmIChsaW5lLmJsb2NrcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIENhbiBoYXBwZW4gaWYgdGV4dCBjb250YWlucyBlLmcuICdcXG4gJ1xuICAgICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGxpbmUuYmxvY2tzLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgICAgY29uc3QgYmxvY2sgPSBsaW5lLmJsb2Nrc1tsXTtcblxuICAgICAgICAgIGlmIChoZWlnaHQgPCBibG9jay5oZWlnaHQpIHtcbiAgICAgICAgICAgIGhlaWdodCA9IGJsb2NrLmhlaWdodDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGluZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgZnVsbCBzaXplIG9mIHRoZSBsYWJlbCB0ZXh0LCBhcyBkZXRlcm1pbmVkIGJ5IGN1cnJlbnQgbGluZXMgYW5kIGJsb2Nrc1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGV0ZXJtaW5lTGFiZWxTaXplKCkge1xuICAgIGxldCB3aWR0aCA9IDA7XG4gICAgbGV0IGhlaWdodCA9IDA7XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaysrKSB7XG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1trXTtcblxuICAgICAgaWYgKGxpbmUud2lkdGggPiB3aWR0aCkge1xuICAgICAgICB3aWR0aCA9IGxpbmUud2lkdGg7XG4gICAgICB9XG4gICAgICBoZWlnaHQgKz0gbGluZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgZW1wdHkgYmxvY2tzIGFuZCBlbXB0eSBsaW5lcyB3ZSBkb24ndCBuZWVkXG4gICAqXG4gICAqIFRoaXMgbXVzdCBiZSBkb25lIGFmdGVyIHRoZSB3aWR0aC9oZWlnaHQgZGV0ZXJtaW5hdGlvbixcbiAgICogc28gdGhhdCB0aGVzZSBhcmUgc2V0IHByb3Blcmx5IGZvciBwcm9jZXNzaW5nIGhlcmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheTxMaW5lPn0gTGluZXMgd2l0aCBlbXB0eSBibG9ja3MgKGFuZCBzb21lIGVtcHR5IGxpbmVzKSByZW1vdmVkXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZW1vdmVFbXB0eUJsb2NrcygpIHtcbiAgICBjb25zdCB0bXBMaW5lcyA9IFtdO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy5saW5lcy5sZW5ndGg7IGsrKykge1xuICAgICAgY29uc3QgbGluZSA9IHRoaXMubGluZXNba107XG5cbiAgICAgIC8vIE5vdGU6IGFuIGVtcHR5IGxpbmUgaW4gYmV0d2VlbiB0ZXh0IGhhcyB3aWR0aCB6ZXJvIGJ1dCBpcyBzdGlsbCByZWxldmFudCB0byBsYXlvdXQuXG4gICAgICAvLyBTbyB3ZSBjYW4ndCB1c2Ugd2lkdGggZm9yIHRlc3RpbmcgZW1wdHkgbGluZSBoZXJlXG4gICAgICBpZiAobGluZS5ibG9ja3MubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgLy8gRGlzY2FyZCBmaW5hbCBlbXB0eSBsaW5lIGFsd2F5c1xuICAgICAgaWYgKGsgPT09IHRoaXMubGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICBpZiAobGluZS53aWR0aCA9PT0gMCkgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRtcExpbmUgPSB7fTtcbiAgICAgIE9iamVjdC5hc3NpZ24odG1wTGluZSwgbGluZSk7XG4gICAgICB0bXBMaW5lLmJsb2NrcyA9IFtdO1xuXG4gICAgICBsZXQgZmlyc3RFbXB0eUJsb2NrO1xuICAgICAgY29uc3QgdG1wQmxvY2tzID0gW107XG4gICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGxpbmUuYmxvY2tzLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgIGNvbnN0IGJsb2NrID0gbGluZS5ibG9ja3NbbF07XG4gICAgICAgIGlmIChibG9jay53aWR0aCAhPT0gMCkge1xuICAgICAgICAgIHRtcEJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlyc3RFbXB0eUJsb2NrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpcnN0RW1wdHlCbG9jayA9IGJsb2NrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBFbnN1cmUgdGhhdCB0aGVyZSBpcyAqc29tZSogdGV4dCBwcmVzZW50XG4gICAgICBpZiAodG1wQmxvY2tzLmxlbmd0aCA9PT0gMCAmJiBmaXJzdEVtcHR5QmxvY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0bXBCbG9ja3MucHVzaChmaXJzdEVtcHR5QmxvY2spO1xuICAgICAgfVxuXG4gICAgICB0bXBMaW5lLmJsb2NrcyA9IHRtcEJsb2NrcztcblxuICAgICAgdG1wTGluZXMucHVzaCh0bXBMaW5lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG1wTGluZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzaXplcyBmb3IgYWxsIGxpbmVzIGFuZCB0aGUgd2hvbGUgdGhpbmcuXG4gICAqXG4gICAqIEByZXR1cm5zIHt7d2lkdGg6IChudW1iZXJ8KiksIGhlaWdodDogKG51bWJlcnwqKSwgbGluZXM6IEFycmF5fX1cbiAgICovXG4gIGZpbmFsaXplKCkge1xuICAgIC8vY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy5saW5lcywgbnVsbCwgMikpO1xuXG4gICAgdGhpcy5kZXRlcm1pbmVMaW5lSGVpZ2h0cygpO1xuICAgIHRoaXMuZGV0ZXJtaW5lTGFiZWxTaXplKCk7XG4gICAgY29uc3QgdG1wTGluZXMgPSB0aGlzLnJlbW92ZUVtcHR5QmxvY2tzKCk7XG5cbiAgICAvLyBSZXR1cm4gYSBzaW1wbGUgaGFzaCBvYmplY3QgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgbGluZXM6IHRtcExpbmVzLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGFiZWxBY2N1bXVsYXRvcjtcbiIsICJpbXBvcnQgTGFiZWxBY2N1bXVsYXRvciBmcm9tIFwiLi9MYWJlbEFjY3VtdWxhdG9yXCI7XG5pbXBvcnQgeyBpc1ZhbGlkTGFiZWwgfSBmcm9tIFwiLi9Db21wb25lbnRVdGlsXCI7XG5cbi8vIEhhc2ggb2YgcHJlcGFyZWQgcmVnZXhwJ3MgZm9yIHRhZ3NcbmNvbnN0IHRhZ1BhdHRlcm4gPSB7XG4gIC8vIEhUTUxcbiAgXCI8Yj5cIjogLzxiPi8sXG4gIFwiPGk+XCI6IC88aT4vLFxuICBcIjxjb2RlPlwiOiAvPGNvZGU+LyxcbiAgXCI8L2I+XCI6IC88XFwvYj4vLFxuICBcIjwvaT5cIjogLzxcXC9pPi8sXG4gIFwiPC9jb2RlPlwiOiAvPFxcL2NvZGU+LyxcbiAgLy8gTWFya2Rvd25cbiAgXCIqXCI6IC9cXCovLCAvLyBib2xkXG4gIF86IC9fLywgLy8gaXRhbFxuICBcImBcIjogL2AvLCAvLyBtb25vXG4gIGFmdGVyQm9sZDogL1teKl0vLFxuICBhZnRlckl0YWw6IC9bXl9dLyxcbiAgYWZ0ZXJNb25vOiAvW15gXS8sXG59O1xuXG4vKipcbiAqIEludGVybmFsIGhlbHBlciBjbGFzcyBmb3IgcGFyc2luZyB0aGUgbWFya3VwIHRhZ3MgZm9yIEhUTUwgYW5kIE1hcmtkb3duLlxuICpcbiAqIE5PVEU6IFNlcXVlbmNlcyBvZiB0YWJzIGFuZCBzcGFjZXMgYXJlIHJlZHVjZWQgdG8gc2luZ2xlIHNwYWNlLlxuICogICAgICAgU2NhbiB1c2FnZSBvZiBgdGhpcy5zcGFjaW5nYCB3aXRoaW4gbWV0aG9kXG4gKi9cbmNsYXNzIE1hcmt1cEFjY3VtdWxhdG9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnN0YW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAgdGV4dCB0byBwYXJzZSBmb3IgbWFya3VwXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLmJvbGQgPSBmYWxzZTtcbiAgICB0aGlzLml0YWwgPSBmYWxzZTtcbiAgICB0aGlzLm1vbm8gPSBmYWxzZTtcbiAgICB0aGlzLnNwYWNpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XG4gICAgdGhpcy5tb2RTdGFjayA9IFtdO1xuXG4gICAgdGhpcy5ibG9ja3MgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1vZCBsYWJlbCBjdXJyZW50bHkgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gIGxhYmVsIG9mIHRvcG1vc3QgbW9kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtb2QoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kU3RhY2subGVuZ3RoID09PSAwID8gXCJub3JtYWxcIiA6IHRoaXMubW9kU3RhY2tbMF07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBtb2QgbGFiZWwgY3VycmVudGx5IGFjdGl2ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAgbGFiZWwgb2YgYWN0aXZlIG1vZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbW9kTmFtZSgpIHtcbiAgICBpZiAodGhpcy5tb2RTdGFjay5sZW5ndGggPT09IDApIHJldHVybiBcIm5vcm1hbFwiO1xuICAgIGVsc2UgaWYgKHRoaXMubW9kU3RhY2tbMF0gPT09IFwibW9ub1wiKSByZXR1cm4gXCJtb25vXCI7XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5ib2xkICYmIHRoaXMuaXRhbCkge1xuICAgICAgICByZXR1cm4gXCJib2xkaXRhbFwiO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmJvbGQpIHtcbiAgICAgICAgcmV0dXJuIFwiYm9sZFwiO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLml0YWwpIHtcbiAgICAgICAgcmV0dXJuIFwiaXRhbFwiO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdEJsb2NrKCkge1xuICAgIGlmICh0aGlzLnNwYWNpbmcpIHtcbiAgICAgIHRoaXMuYWRkKFwiIFwiKTtcbiAgICAgIHRoaXMuc3BhY2luZyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5ibG9ja3MucHVzaCh7IHRleHQ6IHRoaXMuYnVmZmVyLCBtb2Q6IHRoaXMubW9kTmFtZSgpIH0pO1xuICAgICAgdGhpcy5idWZmZXIgPSBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXQgdGV4dCB0byBidWZmZXJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgIHRleHQgdG8gYWRkXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhZGQodGV4dCkge1xuICAgIGlmICh0ZXh0ID09PSBcIiBcIikge1xuICAgICAgdGhpcy5zcGFjaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3BhY2luZykge1xuICAgICAgdGhpcy5idWZmZXIgKz0gXCIgXCI7XG4gICAgICB0aGlzLnNwYWNpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRleHQgIT0gXCIgXCIpIHtcbiAgICAgIHRoaXMuYnVmZmVyICs9IHRleHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBwYXJzaW5nIG9mIHdoaXRlc3BhY2VcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoICB0aGUgY2hhcmFjdGVyIHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBjaGFyYWN0ZXIgd2FzIHByb2Nlc3NlZCBhcyB3aGl0ZXNwYWNlLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHBhcnNlV1MoY2gpIHtcbiAgICBpZiAoL1sgXFx0XS8udGVzdChjaCkpIHtcbiAgICAgIGlmICghdGhpcy5tb25vKSB7XG4gICAgICAgIHRoaXMuc3BhY2luZyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFkZChjaCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgIGxhYmVsIGZvciBibG9jayB0eXBlIHRvIHNldFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2V0VGFnKHRhZ05hbWUpIHtcbiAgICB0aGlzLmVtaXRCbG9jaygpO1xuICAgIHRoaXNbdGFnTmFtZV0gPSB0cnVlO1xuICAgIHRoaXMubW9kU3RhY2sudW5zaGlmdCh0YWdOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAgbGFiZWwgZm9yIGJsb2NrIHR5cGUgdG8gdW5zZXRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVuc2V0VGFnKHRhZ05hbWUpIHtcbiAgICB0aGlzLmVtaXRCbG9jaygpO1xuICAgIHRoaXNbdGFnTmFtZV0gPSBmYWxzZTtcbiAgICB0aGlzLm1vZFN0YWNrLnNoaWZ0KCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgbGFiZWwgZm9yIGJsb2NrIHR5cGUgd2UgYXJlIGN1cnJlbnRseSBwcm9jZXNzaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdGFnIHN0cmluZyB0byBtYXRjaCBpbiB0ZXh0XG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSB0YWcgd2FzIHByb2Nlc3NlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwYXJzZVN0YXJ0VGFnKHRhZ05hbWUsIHRhZykge1xuICAgIC8vIE5vdGU6IGlmICdtb25vJyBwYXNzZWQgYXMgdGFnTmFtZSwgdGhlcmUgaXMgYSBkb3VibGUgY2hlY2sgaGVyZS4gVGhpcyBpcyBPS1xuICAgIGlmICghdGhpcy5tb25vICYmICF0aGlzW3RhZ05hbWVdICYmIHRoaXMubWF0Y2godGFnKSkge1xuICAgICAgdGhpcy5zZXRUYWcodGFnTmFtZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB0YWdcbiAgICogQHBhcmFtIHtudW1iZXJ9IFthZHZhbmNlPXRydWVdIGlmIHNldCwgYWR2YW5jZSBjdXJyZW50IHBvc2l0aW9uIGluIHRleHRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgbWF0Y2ggYXQgZ2l2ZW4gcG9zaXRpb24sIGZhbHNlIG90aGVyd2lzZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbWF0Y2godGFnLCBhZHZhbmNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IFtyZWdFeHAsIGxlbmd0aF0gPSB0aGlzLnByZXBhcmVSZWdFeHAodGFnKTtcbiAgICBjb25zdCBtYXRjaGVkID0gcmVnRXhwLnRlc3QodGhpcy50ZXh0LnN1YnN0cih0aGlzLnBvc2l0aW9uLCBsZW5ndGgpKTtcblxuICAgIGlmIChtYXRjaGVkICYmIGFkdmFuY2UpIHtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSBsYWJlbCBmb3IgYmxvY2sgdHlwZSB3ZSBhcmUgY3VycmVudGx5IHByb2Nlc3NpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB0YWcgc3RyaW5nIHRvIG1hdGNoIGluIHRleHRcbiAgICogQHBhcmFtIHtSZWdFeHB9IFtuZXh0VGFnXSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggZm9yIGNoYXJhY3RlcnMgKmZvbGxvd2luZyogdGhlIGN1cnJlbnQgdGFnXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSB0YWcgd2FzIHByb2Nlc3NlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwYXJzZUVuZFRhZyh0YWdOYW1lLCB0YWcsIG5leHRUYWcpIHtcbiAgICBsZXQgY2hlY2tUYWcgPSB0aGlzLm1vZCgpID09PSB0YWdOYW1lO1xuICAgIGlmICh0YWdOYW1lID09PSBcIm1vbm9cIikge1xuICAgICAgLy8gc3BlY2lhbCBoYW5kbGluZyBmb3IgJ21vbm8nXG4gICAgICBjaGVja1RhZyA9IGNoZWNrVGFnICYmIHRoaXMubW9ubztcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2tUYWcgPSBjaGVja1RhZyAmJiAhdGhpcy5tb25vO1xuICAgIH1cblxuICAgIGlmIChjaGVja1RhZyAmJiB0aGlzLm1hdGNoKHRhZykpIHtcbiAgICAgIGlmIChuZXh0VGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gUHVycG9zZSBvZiB0aGUgZm9sbG93aW5nIG1hdGNoIGlzIHRvIHByZXZlbnQgYSBkaXJlY3QgdW5zZXQvc2V0IG9mIGEgZ2l2ZW4gdGFnXG4gICAgICAgIC8vIEUuZy4gJypib2xkICoqc3RpbGwgYm9sZConID0+ICcqYm9sZCBzdGlsbCBib2xkKidcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMucG9zaXRpb24gPT09IHRoaXMudGV4dC5sZW5ndGggLSAxIHx8XG4gICAgICAgICAgdGhpcy5tYXRjaChuZXh0VGFnLCBmYWxzZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy51bnNldFRhZyh0YWdOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51bnNldFRhZyh0YWdOYW1lKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdGFnICBzdHJpbmcgdG8gbWF0Y2ggaW4gdGV4dFxuICAgKiBAcGFyYW0ge3ZhbHVlfSB2YWx1ZSAgc3RyaW5nIHRvIHJlcGxhY2UgdGFnIHdpdGgsIGlmIGZvdW5kIGF0IGN1cnJlbnQgcG9zaXRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHRhZyB3YXMgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHJlcGxhY2UodGFnLCB2YWx1ZSkge1xuICAgIGlmICh0aGlzLm1hdGNoKHRhZykpIHtcbiAgICAgIHRoaXMuYWRkKHZhbHVlKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoIC0gMTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHRoZSB0YWcgaWYgaXQgaXNuJ3QgYWxyZWFkeSBvbmUuXG4gICAqXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gYXJyYXkgYFtSZWdFeHAsIG51bWJlcl1gLCB3aXRoIGV4YWN0bHkgdHdvIHZhbHVlLCB3aGVyZTpcbiAgICogIC0gUmVnRXhwIGlzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gdXNlXG4gICAqICAtIG51bWJlciBpcyB0aGUgbGVudGggb2YgdGhlIGlucHV0IHN0cmluZyB0byBtYXRjaFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHRhZyAgc3RyaW5nIHRvIG1hdGNoIGluIHRleHRcbiAgICogQHJldHVybnMge0FycmF5fSAgcmVndWxhciBleHByZXNzaW9uIHRvIHVzZSBhbmQgbGVuZ3RoIG9mIGlucHV0IHN0cmluZyB0byBtYXRjaFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJlcGFyZVJlZ0V4cCh0YWcpIHtcbiAgICBsZXQgbGVuZ3RoO1xuICAgIGxldCByZWdFeHA7XG4gICAgaWYgKHRhZyBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgcmVnRXhwID0gdGFnO1xuICAgICAgbGVuZ3RoID0gMTsgLy8gQVNTVU1QVElPTjogcmVnZXhwIG9ubHkgdGVzdHMgb25lIGNoYXJhY3RlclxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2UgcHJlcGFyZWQgcmVnZXhwIGlmIHByZXNlbnRcbiAgICAgIGNvbnN0IHByZXBhcmVkID0gdGFnUGF0dGVyblt0YWddO1xuICAgICAgaWYgKHByZXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVnRXhwID0gcHJlcGFyZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKHRhZyk7XG4gICAgICB9XG5cbiAgICAgIGxlbmd0aCA9IHRhZy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtyZWdFeHAsIGxlbmd0aF07XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIExhYmVsIHdoaWNoIGV4cGxvZGVzIHRoZSBsYWJlbCB0ZXh0IGludG8gbGluZXMgYW5kIGJsb2NrcyB3aXRoaW4gbGluZXNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBMYWJlbFNwbGl0dGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHggQ2FudmFzIHJlbmRlcmluZyBjb250ZXh0XG4gICAqIEBwYXJhbSB7TGFiZWx9IHBhcmVudCByZWZlcmVuY2UgdG8gdGhlIExhYmVsIGluc3RhbmNlIHVzaW5nIGN1cnJlbnQgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjdHgsIHBhcmVudCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgdGhpcy5jdHggPSBjdHg7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgIHRoaXMuaG92ZXIgPSBob3ZlcjtcblxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGRldGVybWluZSB0ZXh0IHdpZHRoOyBwYXNzZWQgdG8gTGFiZWxBY2N1bXVsYXRvciBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB0ZXh0IHN0cmluZyB0byBkZXRlcm1pbmUgd2lkdGggb2ZcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG1vZCAgZm9udCB0eXBlIHRvIHVzZSBmb3IgdGhpcyB0ZXh0XG4gICAgICogQHJldHVybnMge29iamVjdH0geyB3aWR0aCwgdmFsdWVzfSB3aWR0aCBpbiBwaXhlbHMgYW5kIGZvbnQgYXR0cmlidXRlc1xuICAgICAqL1xuICAgIGNvbnN0IHRleHRXaWR0aCA9ICh0ZXh0LCBtb2QpID0+IHtcbiAgICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuXG4gICAgICAvLyBUT0RPOiBUaGlzIGNhbiBiZSBkb25lIG1vcmUgZWZmaWNpZW50bHkgd2l0aCBjYWNoaW5nXG4gICAgICAvLyBUaGlzIHdpbGwgc2V0IHRoZSBjdHguZm9udCBjb3JyZWN0bHksIGRlcGVuZGluZyBvbiBzZWxlY3RlZC9ob3ZlciBhbmQgbW9kIC0gc28gdGhhdCBjdHgubWVhc3VyZVRleHQoKSB3aWxsIGJlIGFjY3VyYXRlLlxuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5wYXJlbnQuZ2V0Rm9ybWF0dGluZ1ZhbHVlcyhjdHgsIHNlbGVjdGVkLCBob3ZlciwgbW9kKTtcblxuICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgIGlmICh0ZXh0ICE9PSBcIlwiKSB7XG4gICAgICAgIGNvbnN0IG1lYXN1cmUgPSB0aGlzLmN0eC5tZWFzdXJlVGV4dCh0ZXh0KTtcbiAgICAgICAgd2lkdGggPSBtZWFzdXJlLndpZHRoO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyB3aWR0aCwgdmFsdWVzOiB2YWx1ZXMgfTtcbiAgICB9O1xuXG4gICAgdGhpcy5saW5lcyA9IG5ldyBMYWJlbEFjY3VtdWxhdG9yKHRleHRXaWR0aCk7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgcGFzc2VkIHRleHQgb2YgYSBsYWJlbCBpbnRvIGxpbmVzIGFuZCBibG9ja3MuXG4gICAqXG4gICAqICMgTk9URVxuICAgKlxuICAgKiBUaGUgaGFuZGxpbmcgb2Ygc3BhY2luZyBpcyBvcHRpb24gZGVwZW5kZW50OlxuICAgKlxuICAgKiAtIGlmIGBmb250Lm11bHRpIDogZmFsc2VgLCBhbGwgc3BhY2VzIGFyZSByZXRhaW5lZFxuICAgKiAtIGlmIGBmb250Lm11bHRpIDogdHJ1ZWAsIGV2ZXJ5IHNlcXVlbmNlIG9mIHNwYWNlcyBpcyBjb21wcmVzc2VkIHRvIGEgc2luZ2xlIHNwYWNlXG4gICAqXG4gICAqIFRoaXMgbWlnaHQgbm90IGJlIHRoZSBiZXN0IHdheSB0byBkbyBpdCwgYnV0IHRoaXMgaXMgYXMgaXQgaGFzIGJlZW4gd29ya2luZyB0aWxsIG5vdy5cbiAgICogSW4gb3JkZXIgbm90IHRvIGJyZWFrIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHksIGZvciB0aGUgdGltZSBiZWluZyB0aGlzIGJlaGF2aW91ciB3aWxsXG4gICAqIGJlIHJldGFpbmVkIGluIGFueSBjb2RlIGNoYW5nZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0ICB0ZXh0IHRvIHNwbGl0XG4gICAqIEByZXR1cm5zIHtBcnJheTxsaW5lPn1cbiAgICovXG4gIHByb2Nlc3ModGV4dCkge1xuICAgIGlmICghaXNWYWxpZExhYmVsKHRleHQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5saW5lcy5maW5hbGl6ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbnQgPSB0aGlzLnBhcmVudC5mb250T3B0aW9ucztcblxuICAgIC8vIE5vcm1hbGl6ZSB0aGUgZW5kLW9mLWxpbmUncyB0byBhIHNpbmdsZSByZXByZXNlbnRhdGlvbiAtIG9yZGVyIGltcG9ydGFudFxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcclxcbi9nLCBcIlxcblwiKTsgLy8gRG9zIEVPTCdzXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxyL2csIFwiXFxuXCIpOyAvLyBNYWMgRU9MJ3NcblxuICAgIC8vIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCB0aGVyZSBjYW4gYmUgbm8gXFxyJ3MgaW4gdGhlIHRleHQuXG4gICAgLy8gVGhpcyBpcyB1c2VkIGxhdGVyIG9uIHNwbGl0U3RyaW5nSW50b0xpbmVzKCkgdG8gc3BsaXQgbXVsdGlmb250IHRleHRzLlxuXG4gICAgY29uc3QgbmxMaW5lcyA9IFN0cmluZyh0ZXh0KS5zcGxpdChcIlxcblwiKTtcbiAgICBjb25zdCBsaW5lQ291bnQgPSBubExpbmVzLmxlbmd0aDtcblxuICAgIGlmIChmb250Lm11bHRpKSB7XG4gICAgICAvLyBNdWx0aS1mb250IGNhc2U6IHN0eWxpbmcgdGFncyBhY3RpdmVcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZUNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgYmxvY2tzID0gdGhpcy5zcGxpdEJsb2NrcyhubExpbmVzW2ldLCBmb250Lm11bHRpKTtcbiAgICAgICAgLy8gUG9zdDogU2VxdWVuY2VzIG9mIHRhYnMgYW5kIHNwYWNlcyBhcmUgcmVkdWNlZCB0byBzaW5nbGUgc3BhY2VcblxuICAgICAgICBpZiAoYmxvY2tzID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmIChibG9ja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5saW5lcy5uZXdMaW5lKFwiXCIpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvbnQubWF4V2R0ID4gMCkge1xuICAgICAgICAgIC8vIHdpZHRoQ29uc3RyYWludC5tYXhpbXVtIGRlZmluZWRcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdSdW5uaW5nIHdpZHRoQ29uc3RyYWludCBtdWx0aSwgbWF4OiAnICsgdGhpcy5mb250T3B0aW9ucy5tYXhXZHQpO1xuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYmxvY2tzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBtb2QgPSBibG9ja3Nbal0ubW9kO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGJsb2Nrc1tqXS50ZXh0O1xuICAgICAgICAgICAgdGhpcy5zcGxpdFN0cmluZ0ludG9MaW5lcyh0ZXh0LCBtb2QsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB3aWR0aENvbnN0cmFpbnQubWF4aW11bSBOT1QgZGVmaW5lZFxuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYmxvY2tzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBtb2QgPSBibG9ja3Nbal0ubW9kO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGJsb2Nrc1tqXS50ZXh0O1xuICAgICAgICAgICAgdGhpcy5saW5lcy5hcHBlbmQodGV4dCwgbW9kKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpbmVzLm5ld0xpbmUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2luZ2xlLWZvbnQgY2FzZVxuICAgICAgaWYgKGZvbnQubWF4V2R0ID4gMCkge1xuICAgICAgICAvLyB3aWR0aENvbnN0cmFpbnQubWF4aW11bSBkZWZpbmVkXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdSdW5uaW5nIHdpZHRoQ29uc3RyYWludCBub3JtYWwsIG1heDogJyArIHRoaXMuZm9udE9wdGlvbnMubWF4V2R0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lQ291bnQ7IGkrKykge1xuICAgICAgICAgIHRoaXMuc3BsaXRTdHJpbmdJbnRvTGluZXMobmxMaW5lc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdpZHRoQ29uc3RyYWludC5tYXhpbXVtIE5PVCBkZWZpbmVkXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZUNvdW50OyBpKyspIHtcbiAgICAgICAgICB0aGlzLmxpbmVzLm5ld0xpbmUobmxMaW5lc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5saW5lcy5maW5hbGl6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIG5vcm1hbGl6ZSB0aGUgbWFya3VwIHN5c3RlbVxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW58J21kJ3wnbWFya2Rvd24nfCdodG1sJ30gbWFya3VwU3lzdGVtXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBkZWNvZGVNYXJrdXBTeXN0ZW0obWFya3VwU3lzdGVtKSB7XG4gICAgbGV0IHN5c3RlbSA9IFwibm9uZVwiO1xuICAgIGlmIChtYXJrdXBTeXN0ZW0gPT09IFwibWFya2Rvd25cIiB8fCBtYXJrdXBTeXN0ZW0gPT09IFwibWRcIikge1xuICAgICAgc3lzdGVtID0gXCJtYXJrZG93blwiO1xuICAgIH0gZWxzZSBpZiAobWFya3VwU3lzdGVtID09PSB0cnVlIHx8IG1hcmt1cFN5c3RlbSA9PT0gXCJodG1sXCIpIHtcbiAgICAgIHN5c3RlbSA9IFwiaHRtbFwiO1xuICAgIH1cbiAgICByZXR1cm4gc3lzdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIHNwbGl0SHRtbEJsb2Nrcyh0ZXh0KSB7XG4gICAgY29uc3QgcyA9IG5ldyBNYXJrdXBBY2N1bXVsYXRvcih0ZXh0KTtcblxuICAgIGNvbnN0IHBhcnNlRW50aXRpZXMgPSAoY2gpID0+IHtcbiAgICAgIGlmICgvJi8udGVzdChjaCkpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID1cbiAgICAgICAgICBzLnJlcGxhY2Uocy50ZXh0LCBcIiZsdDtcIiwgXCI8XCIpIHx8IHMucmVwbGFjZShzLnRleHQsIFwiJmFtcDtcIiwgXCImXCIpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgcy5hZGQoXCImXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgd2hpbGUgKHMucG9zaXRpb24gPCBzLnRleHQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjaCA9IHMudGV4dC5jaGFyQXQocy5wb3NpdGlvbik7XG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9XG4gICAgICAgIHMucGFyc2VXUyhjaCkgfHxcbiAgICAgICAgKC88Ly50ZXN0KGNoKSAmJlxuICAgICAgICAgIChzLnBhcnNlU3RhcnRUYWcoXCJib2xkXCIsIFwiPGI+XCIpIHx8XG4gICAgICAgICAgICBzLnBhcnNlU3RhcnRUYWcoXCJpdGFsXCIsIFwiPGk+XCIpIHx8XG4gICAgICAgICAgICBzLnBhcnNlU3RhcnRUYWcoXCJtb25vXCIsIFwiPGNvZGU+XCIpIHx8XG4gICAgICAgICAgICBzLnBhcnNlRW5kVGFnKFwiYm9sZFwiLCBcIjwvYj5cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VFbmRUYWcoXCJpdGFsXCIsIFwiPC9pPlwiKSB8fFxuICAgICAgICAgICAgcy5wYXJzZUVuZFRhZyhcIm1vbm9cIiwgXCI8L2NvZGU+XCIpKSkgfHxcbiAgICAgICAgcGFyc2VFbnRpdGllcyhjaCk7XG5cbiAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIHMuYWRkKGNoKTtcbiAgICAgIH1cbiAgICAgIHMucG9zaXRpb24rKztcbiAgICB9XG4gICAgcy5lbWl0QmxvY2soKTtcbiAgICByZXR1cm4gcy5ibG9ja3M7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgc3BsaXRNYXJrZG93bkJsb2Nrcyh0ZXh0KSB7XG4gICAgY29uc3QgcyA9IG5ldyBNYXJrdXBBY2N1bXVsYXRvcih0ZXh0KTtcbiAgICBsZXQgYmVnaW5hYmxlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHBhcnNlT3ZlcnJpZGUgPSAoY2gpID0+IHtcbiAgICAgIGlmICgvXFxcXC8udGVzdChjaCkpIHtcbiAgICAgICAgaWYgKHMucG9zaXRpb24gPCB0aGlzLnRleHQubGVuZ3RoICsgMSkge1xuICAgICAgICAgIHMucG9zaXRpb24rKztcbiAgICAgICAgICBjaCA9IHRoaXMudGV4dC5jaGFyQXQocy5wb3NpdGlvbik7XG4gICAgICAgICAgaWYgKC8gXFx0Ly50ZXN0KGNoKSkge1xuICAgICAgICAgICAgcy5zcGFjaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcy5hZGQoY2gpO1xuICAgICAgICAgICAgYmVnaW5hYmxlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgd2hpbGUgKHMucG9zaXRpb24gPCBzLnRleHQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjaCA9IHMudGV4dC5jaGFyQXQocy5wb3NpdGlvbik7XG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9XG4gICAgICAgIHMucGFyc2VXUyhjaCkgfHxcbiAgICAgICAgcGFyc2VPdmVycmlkZShjaCkgfHxcbiAgICAgICAgKChiZWdpbmFibGUgfHwgcy5zcGFjaW5nKSAmJlxuICAgICAgICAgIChzLnBhcnNlU3RhcnRUYWcoXCJib2xkXCIsIFwiKlwiKSB8fFxuICAgICAgICAgICAgcy5wYXJzZVN0YXJ0VGFnKFwiaXRhbFwiLCBcIl9cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VTdGFydFRhZyhcIm1vbm9cIiwgXCJgXCIpKSkgfHxcbiAgICAgICAgcy5wYXJzZUVuZFRhZyhcImJvbGRcIiwgXCIqXCIsIFwiYWZ0ZXJCb2xkXCIpIHx8XG4gICAgICAgIHMucGFyc2VFbmRUYWcoXCJpdGFsXCIsIFwiX1wiLCBcImFmdGVySXRhbFwiKSB8fFxuICAgICAgICBzLnBhcnNlRW5kVGFnKFwibW9ub1wiLCBcImBcIiwgXCJhZnRlck1vbm9cIik7XG5cbiAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIHMuYWRkKGNoKTtcbiAgICAgICAgYmVnaW5hYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBzLnBvc2l0aW9uKys7XG4gICAgfVxuICAgIHMuZW1pdEJsb2NrKCk7XG4gICAgcmV0dXJuIHMuYmxvY2tzO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxvZGVzIGEgcGllY2Ugb2YgdGV4dCBpbnRvIHNpbmdsZS1mb250IGJsb2NrcyB1c2luZyBhIGdpdmVuIG1hcmt1cFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcGFyYW0ge2Jvb2xlYW58J21kJ3wnbWFya2Rvd24nfCdodG1sJ30gbWFya3VwU3lzdGVtXG4gICAqIEByZXR1cm5zIHtBcnJheS48e3RleHQ6IHN0cmluZywgbW9kOiBzdHJpbmd9Pn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNwbGl0QmxvY2tzKHRleHQsIG1hcmt1cFN5c3RlbSkge1xuICAgIGNvbnN0IHN5c3RlbSA9IHRoaXMuZGVjb2RlTWFya3VwU3lzdGVtKG1hcmt1cFN5c3RlbSk7XG4gICAgaWYgKHN5c3RlbSA9PT0gXCJub25lXCIpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIG1vZDogXCJub3JtYWxcIixcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSBlbHNlIGlmIChzeXN0ZW0gPT09IFwibWFya2Rvd25cIikge1xuICAgICAgcmV0dXJuIHRoaXMuc3BsaXRNYXJrZG93bkJsb2Nrcyh0ZXh0KTtcbiAgICB9IGVsc2UgaWYgKHN5c3RlbSA9PT0gXCJodG1sXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLnNwbGl0SHRtbEJsb2Nrcyh0ZXh0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGV4dCBsZW5ndGggb3ZlciB0aGUgY3VycmVudCBtYXggd2l0aFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb3Zlck1heFdpZHRoKHRleHQpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRleHQpLndpZHRoO1xuICAgIHJldHVybiB0aGlzLmxpbmVzLmN1cldpZHRoKCkgKyB3aWR0aCA+IHRoaXMucGFyZW50LmZvbnRPcHRpb25zLm1heFdkdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGxvbmdlc3QgcGFydCBvZiB0aGUgc2VudGVuY2Ugd2hpY2ggc3RpbGwgZml0cyBpbiB0aGVcbiAgICogY3VycmVudCBtYXggd2lkdGguXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzICBBcnJheSBvZiBzdHJpbmdzIHNpZ25pZnlpbmcgYSB0ZXh0IGxpbmVzXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9ICAgICAgaW5kZXggb2YgZmlyc3QgaXRlbSBpbiBzdHJpbmcgbWFraW5nIHN0cmluZyBnbyBvdmVyIG1heFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0TG9uZ2VzdEZpdCh3b3Jkcykge1xuICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICBsZXQgdyA9IDA7XG5cbiAgICB3aGlsZSAodyA8IHdvcmRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgcHJlID0gdGV4dCA9PT0gXCJcIiA/IFwiXCIgOiBcIiBcIjtcbiAgICAgIGNvbnN0IG5ld1RleHQgPSB0ZXh0ICsgcHJlICsgd29yZHNbd107XG5cbiAgICAgIGlmICh0aGlzLm92ZXJNYXhXaWR0aChuZXdUZXh0KSkgYnJlYWs7XG4gICAgICB0ZXh0ID0gbmV3VGV4dDtcbiAgICAgIHcrKztcbiAgICB9XG5cbiAgICByZXR1cm4gdztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGxvbmdlc3QgcGFydCBvZiB0aGUgc3RyaW5nIHdoaWNoIHN0aWxsIGZpdHMgaW4gdGhlXG4gICAqIGN1cnJlbnQgbWF4IHdpZHRoLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSB3b3JkcyBBcnJheSBvZiBzdHJpbmdzIHNpZ25pZnlpbmcgYSB0ZXh0IGxpbmVzXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IGluZGV4IG9mIGZpcnN0IGl0ZW0gaW4gc3RyaW5nIG1ha2luZyBzdHJpbmcgZ28gb3ZlciBtYXhcbiAgICovXG4gIGdldExvbmdlc3RGaXRXb3JkKHdvcmRzKSB7XG4gICAgbGV0IHcgPSAwO1xuXG4gICAgd2hpbGUgKHcgPCB3b3Jkcy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLm92ZXJNYXhXaWR0aCh3b3Jkcy5zbGljZSgwLCB3KSkpIGJyZWFrO1xuICAgICAgdysrO1xuICAgIH1cblxuICAgIHJldHVybiB3O1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IHRoZSBwYXNzZWQgdGV4dCBpbnRvIGxpbmVzLCBhY2NvcmRpbmcgdG8gd2lkdGggY29uc3RyYWludCAoaWYgYW55KS5cbiAgICpcbiAgICogVGhlIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIGlucHV0IHN0cmluZyBpcyBhIHNpbmdsZSBsaW5lLCBpLmUuIHdpdGhvdXQgbGluZXMgYnJlYWsuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHJldGFpbnMgc3BhY2VzLCBpZiBzdGlsbCBwcmVzZW50IChjYXNlIGBmb250Lm11bHRpOiBmYWxzZWApLlxuICAgKiBBIHNwYWNlIHdoaWNoIGZhbGxzIG9uIGFuIGludGVybmFsIGxpbmUgYnJlYWssIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBuZXdsaW5lLlxuICAgKiBUaGVyZSBpcyBubyBzcGVjaWFsIGhhbmRsaW5nIG9mIHRhYnM7IHRoZXNlIGdvIGFsb25nIHdpdGggdGhlIGZsb3cuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFttb2Q9J25vcm1hbCddXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FwcGVuZExhc3Q9ZmFsc2VdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzcGxpdFN0cmluZ0ludG9MaW5lcyhzdHIsIG1vZCA9IFwibm9ybWFsXCIsIGFwcGVuZExhc3QgPSBmYWxzZSkge1xuICAgIC8vIFNldCB0aGUgY2FudmFzIGNvbnRleHQgZm9udCwgYmFzZWQgdXBvbiB0aGUgY3VycmVudCBzZWxlY3RlZC9ob3ZlciBzdGF0ZVxuICAgIC8vIGFuZCB0aGUgcHJvdmlkZWQgbW9kLCBzbyB0aGUgdGV4dCBtZWFzdXJlbWVudCBwZXJmb3JtZWQgYnkgZ2V0TG9uZ2VzdEZpdFxuICAgIC8vIHdpbGwgYmUgYWNjdXJhdGUgLSBhbmQgbm90IGp1c3QgdXNlIHRoZSBmb250IG9mIHdob2V2ZXIgbGFzdCB1c2VkIHRoZSBjYW52YXMuXG4gICAgdGhpcy5wYXJlbnQuZ2V0Rm9ybWF0dGluZ1ZhbHVlcyh0aGlzLmN0eCwgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3ZlciwgbW9kKTtcblxuICAgIC8vIFN0aWxsLXByZXNlbnQgc3BhY2VzIGFyZSByZWxldmFudCwgcmV0YWluIHRoZW1cbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXiggKykvZywgXCIkMVxcclwiKTtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvKFteXFxyXVteIF0qKSggKykvZywgXCIkMVxcciQyXFxyXCIpO1xuICAgIGxldCB3b3JkcyA9IHN0ci5zcGxpdChcIlxcclwiKTtcblxuICAgIHdoaWxlICh3b3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgdyA9IHRoaXMuZ2V0TG9uZ2VzdEZpdCh3b3Jkcyk7XG5cbiAgICAgIGlmICh3ID09PSAwKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgY2FzZTogdGhlIGZpcnN0IHdvcmQgaXMgYWxyZWFkeSBsYXJnZXIgdGhhbiB0aGUgbWF4IHdpZHRoLlxuICAgICAgICBjb25zdCB3b3JkID0gd29yZHNbMF07XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIHdvcmQgdG8gdGhlIGxhcmdlc3QgcGFydCB0aGF0IGZpdHMgdGhlIGxpbmVcbiAgICAgICAgY29uc3QgeCA9IHRoaXMuZ2V0TG9uZ2VzdEZpdFdvcmQod29yZCk7XG4gICAgICAgIHRoaXMubGluZXMubmV3TGluZSh3b3JkLnNsaWNlKDAsIHgpLCBtb2QpO1xuXG4gICAgICAgIC8vIEFkanVzdCB0aGUgd29yZCwgc28gdGhhdCB0aGUgcmVzdCB3aWxsIGJlIGRvbmUgbmV4dCBpdGVyYXRpb25cbiAgICAgICAgd29yZHNbMF0gPSB3b3JkLnNsaWNlKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc2tpcCBhbnkgc3BhY2UgdGhhdCBpcyByZXBsYWNlZCBieSBhIG5ld2xpbmVcbiAgICAgICAgbGV0IG5ld1cgPSB3O1xuICAgICAgICBpZiAod29yZHNbdyAtIDFdID09PSBcIiBcIikge1xuICAgICAgICAgIHctLTtcbiAgICAgICAgfSBlbHNlIGlmICh3b3Jkc1tuZXdXXSA9PT0gXCIgXCIpIHtcbiAgICAgICAgICBuZXdXKys7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0ID0gd29yZHMuc2xpY2UoMCwgdykuam9pbihcIlwiKTtcblxuICAgICAgICBpZiAodyA9PSB3b3Jkcy5sZW5ndGggJiYgYXBwZW5kTGFzdCkge1xuICAgICAgICAgIHRoaXMubGluZXMuYXBwZW5kKHRleHQsIG1vZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5saW5lcy5uZXdMaW5lKHRleHQsIG1vZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGp1c3QgdGhlIHdvcmQsIHNvIHRoYXQgdGhlIHJlc3Qgd2lsbCBiZSBkb25lIG5leHQgaXRlcmF0aW9uXG4gICAgICAgIHdvcmRzID0gd29yZHMuc2xpY2UobmV3Vyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExhYmVsU3BsaXR0ZXI7XG4iLCAiaW1wb3J0IHsgZGVlcEV4dGVuZCwgZm9yRWFjaCwgb3ZlcnJpZGVPcGFjaXR5LCB0b3BNb3N0IH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgY2hvb3NpZnksIGlzVmFsaWRMYWJlbCB9IGZyb20gXCIuL0NvbXBvbmVudFV0aWxcIjtcbmltcG9ydCBMYWJlbFNwbGl0dGVyIGZyb20gXCIuL0xhYmVsU3BsaXR0ZXJcIjtcblxuLyoqXG4gKiBMaXN0IG9mIHNwZWNpYWwgc3R5bGVzIGZvciBtdWx0aS1mb250c1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IG11bHRpRm9udFN0eWxlID0gW1wiYm9sZFwiLCBcIml0YWxcIiwgXCJib2xkaXRhbFwiLCBcIm1vbm9cIl07XG5cbi8qKlxuICogQSBMYWJlbCB0byBiZSB1c2VkIGZvciBOb2RlcyBvciBFZGdlcy5cbiAqL1xuY2xhc3MgTGFiZWwge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZWRnZWxhYmVsPWZhbHNlXVxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgb3B0aW9ucywgZWRnZWxhYmVsID0gZmFsc2UpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucG9pbnRUb1NlbGYgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2VTaXplID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZm9udE9wdGlvbnMgPSB7fTsgLy8gaW5zdGFuY2UgdmFyaWFibGUgY29udGFpbmluZyB0aGUgKmluc3RhbmNlLWxvY2FsKiBmb250IG9wdGlvbnNcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgdGhpcy5zaXplID0geyB0b3A6IDAsIGxlZnQ6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHlMaW5lOiAwIH07XG4gICAgdGhpcy5pc0VkZ2VMYWJlbCA9IGVkZ2VsYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyB0aGUgb3B0aW9ucyBvZiB0aGUgcGFyZW50IE5vZGUtaW5zdGFuY2VcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMuZWxlbWVudE9wdGlvbnMgPSBvcHRpb25zOyAvLyBSZWZlcmVuY2UgdG8gdGhlIG9wdGlvbnMgb2YgdGhlIHBhcmVudCBOb2RlLWluc3RhbmNlXG5cbiAgICB0aGlzLmluaXRGb250T3B0aW9ucyhvcHRpb25zLmZvbnQpO1xuXG4gICAgaWYgKGlzVmFsaWRMYWJlbChvcHRpb25zLmxhYmVsKSkge1xuICAgICAgdGhpcy5sYWJlbERpcnR5ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQmFkIGxhYmVsISBDaGFuZ2UgdGhlIG9wdGlvbiB2YWx1ZSB0byBwcmV2ZW50IGJhZCBzdHVmZiBoYXBwZW5pbmdcbiAgICAgIG9wdGlvbnMubGFiZWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZm9udCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuZm9udCAhPT0gbnVsbCkge1xuICAgICAgLy8gZm9udCBvcHRpb25zIGNhbiBiZSBkZWxldGVkIGF0IHZhcmlvdXMgbGV2ZWxzXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZm9udCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aGlzLmJhc2VTaXplID0gdGhpcy5mb250T3B0aW9ucy5zaXplO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5mb250ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSBvcHRpb25zLmZvbnQuc2l6ZTtcblxuICAgICAgICBpZiAoc2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5iYXNlU2l6ZSA9IHNpemU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdCB0aGUgZm9udCBPcHRpb25zIHN0cnVjdHVyZS5cbiAgICpcbiAgICogTWVtYmVyIGZvbnRPcHRpb25zIHNlcnZlcyBhcyBhbiBhY2N1bXVsYXRvciBmb3IgdGhlIGN1cnJlbnQgZm9udCBvcHRpb25zLlxuICAgKiBBcyBzdWNoLCBpdCBuZWVkcyB0byBiZSBjb21wbGV0ZWx5IHNlcGFyYXRlZCBmcm9tIHRoZSBub2RlIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdGb250T3B0aW9ucyB0aGUgbmV3IGZvbnQgb3B0aW9ucyB0byBwcm9jZXNzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpbml0Rm9udE9wdGlvbnMobmV3Rm9udE9wdGlvbnMpIHtcbiAgICAvLyBQcmVwYXJlIHRoZSBtdWx0aS1mb250IG9wdGlvbiBvYmplY3RzLlxuICAgIC8vIFRoZXNlIHdpbGwgYmUgZmlsbGVkIGluIHByb3BhZ2F0ZUZvbnRzKCksIGlmIHJlcXVpcmVkXG4gICAgZm9yRWFjaChtdWx0aUZvbnRTdHlsZSwgKHN0eWxlKSA9PiB7XG4gICAgICB0aGlzLmZvbnRPcHRpb25zW3N0eWxlXSA9IHt9O1xuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIHNob3J0aGFuZCBvcHRpb24sIGlmIHByZXNlbnRcbiAgICBpZiAoTGFiZWwucGFyc2VGb250U3RyaW5nKHRoaXMuZm9udE9wdGlvbnMsIG5ld0ZvbnRPcHRpb25zKSkge1xuICAgICAgdGhpcy5mb250T3B0aW9ucy52YWRqdXN0ID0gMDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDb3B5IG92ZXIgdGhlIG5vbi1tdWx0aWZvbnQgb3B0aW9ucywgaWYgc3BlY2lmaWVkXG4gICAgZm9yRWFjaChuZXdGb250T3B0aW9ucywgKHByb3AsIG4pID0+IHtcbiAgICAgIGlmIChwcm9wICE9PSB1bmRlZmluZWQgJiYgcHJvcCAhPT0gbnVsbCAmJiB0eXBlb2YgcHJvcCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aGlzLmZvbnRPcHRpb25zW25dID0gcHJvcDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBpbi12YXJpYWJsZSBpcyBhIHN0cmluZywgcGFyc2UgaXQgYXMgYSBmb250IHNwZWNpZmllci5cbiAgICpcbiAgICogTm90ZSB0aGF0IGZvbGxvd2luZyBpcyBub3QgZG9uZSBoZXJlIGFuZCBoYXZlIHRvIGJlIGRvbmUgYWZ0ZXIgdGhlIGNhbGw6XG4gICAqIC0gTm90IGFsbCBmb250IG9wdGlvbnMgYXJlIHNldCAodmFkanVzdCwgbW9kKVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3V0T3B0aW9ucyAgb3V0LXBhcmFtZXRlciwgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBwYXJzZSByZXN1bHRzIChpZiBhbnkpXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbk9wdGlvbnMgIGZvbnQgb3B0aW9ucyB0byBwYXJzZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBmb250IHBhcnNlZCBhcyBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcGFyc2VGb250U3RyaW5nKG91dE9wdGlvbnMsIGluT3B0aW9ucykge1xuICAgIGlmICghaW5PcHRpb25zIHx8IHR5cGVvZiBpbk9wdGlvbnMgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IG5ld09wdGlvbnNBcnJheSA9IGluT3B0aW9ucy5zcGxpdChcIiBcIik7XG5cbiAgICBvdXRPcHRpb25zLnNpemUgPSArbmV3T3B0aW9uc0FycmF5WzBdLnJlcGxhY2UoXCJweFwiLCBcIlwiKTtcbiAgICBvdXRPcHRpb25zLmZhY2UgPSBuZXdPcHRpb25zQXJyYXlbMV07XG4gICAgb3V0T3B0aW9ucy5jb2xvciA9IG5ld09wdGlvbnNBcnJheVsyXTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgd2lkdGggYW5kIGhlaWdodCBjb25zdHJhaW50cyBiYXNlZCBvbiAnbmVhcmVzdCcgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGlsZSBhcnJheSBvZiBvcHRpb24gb2JqZWN0cyB0byBjb25zaWRlclxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSB0aGUgYWN0dWFsIGNvbnN0cmFpbnQgdmFsdWVzIHRvIHVzZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RyYWluKHBpbGUpIHtcbiAgICAvLyBOT1RFOiBjb25zdHJhaW5XaWR0aCBhbmQgIGNvbnN0cmFpbkhlaWdodCBuZXZlciBzZXQhXG4gICAgLy8gTk9URTogZm9yIGVkZ2UgbGFiZWxzLCBvbmx5ICdtYXhXZHQnIHNldFxuICAgIC8vIE5vZGUgbGFiZWxzIGNhbiBzZXQgYWxsIHRoZSBmaWVsZHNcbiAgICBjb25zdCBmb250T3B0aW9ucyA9IHtcbiAgICAgIGNvbnN0cmFpbldpZHRoOiBmYWxzZSxcbiAgICAgIG1heFdkdDogLTEsXG4gICAgICBtaW5XZHQ6IC0xLFxuICAgICAgY29uc3RyYWluSGVpZ2h0OiBmYWxzZSxcbiAgICAgIG1pbkhndDogLTEsXG4gICAgICB2YWxpZ246IFwibWlkZGxlXCIsXG4gICAgfTtcblxuICAgIGNvbnN0IHdpZHRoQ29uc3RyYWludCA9IHRvcE1vc3QocGlsZSwgXCJ3aWR0aENvbnN0cmFpbnRcIik7XG4gICAgaWYgKHR5cGVvZiB3aWR0aENvbnN0cmFpbnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGZvbnRPcHRpb25zLm1heFdkdCA9IE51bWJlcih3aWR0aENvbnN0cmFpbnQpO1xuICAgICAgZm9udE9wdGlvbnMubWluV2R0ID0gTnVtYmVyKHdpZHRoQ29uc3RyYWludCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygd2lkdGhDb25zdHJhaW50ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjb25zdCB3aWR0aENvbnN0cmFpbnRNYXhpbXVtID0gdG9wTW9zdChwaWxlLCBbXG4gICAgICAgIFwid2lkdGhDb25zdHJhaW50XCIsXG4gICAgICAgIFwibWF4aW11bVwiLFxuICAgICAgXSk7XG4gICAgICBpZiAodHlwZW9mIHdpZHRoQ29uc3RyYWludE1heGltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZm9udE9wdGlvbnMubWF4V2R0ID0gTnVtYmVyKHdpZHRoQ29uc3RyYWludE1heGltdW0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgd2lkdGhDb25zdHJhaW50TWluaW11bSA9IHRvcE1vc3QocGlsZSwgW1xuICAgICAgICBcIndpZHRoQ29uc3RyYWludFwiLFxuICAgICAgICBcIm1pbmltdW1cIixcbiAgICAgIF0pO1xuICAgICAgaWYgKHR5cGVvZiB3aWR0aENvbnN0cmFpbnRNaW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGZvbnRPcHRpb25zLm1pbldkdCA9IE51bWJlcih3aWR0aENvbnN0cmFpbnRNaW5pbXVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoZWlnaHRDb25zdHJhaW50ID0gdG9wTW9zdChwaWxlLCBcImhlaWdodENvbnN0cmFpbnRcIik7XG4gICAgaWYgKHR5cGVvZiBoZWlnaHRDb25zdHJhaW50ID09PSBcIm51bWJlclwiKSB7XG4gICAgICBmb250T3B0aW9ucy5taW5IZ3QgPSBOdW1iZXIoaGVpZ2h0Q29uc3RyYWludCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaGVpZ2h0Q29uc3RyYWludCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgY29uc3QgaGVpZ2h0Q29uc3RyYWludE1pbmltdW0gPSB0b3BNb3N0KHBpbGUsIFtcbiAgICAgICAgXCJoZWlnaHRDb25zdHJhaW50XCIsXG4gICAgICAgIFwibWluaW11bVwiLFxuICAgICAgXSk7XG4gICAgICBpZiAodHlwZW9mIGhlaWdodENvbnN0cmFpbnRNaW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGZvbnRPcHRpb25zLm1pbkhndCA9IE51bWJlcihoZWlnaHRDb25zdHJhaW50TWluaW11bSk7XG4gICAgICB9XG4gICAgICBjb25zdCBoZWlnaHRDb25zdHJhaW50VmFsaWduID0gdG9wTW9zdChwaWxlLCBbXG4gICAgICAgIFwiaGVpZ2h0Q29uc3RyYWludFwiLFxuICAgICAgICBcInZhbGlnblwiLFxuICAgICAgXSk7XG4gICAgICBpZiAodHlwZW9mIGhlaWdodENvbnN0cmFpbnRWYWxpZ24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGhlaWdodENvbnN0cmFpbnRWYWxpZ24gPT09IFwidG9wXCIgfHxcbiAgICAgICAgICBoZWlnaHRDb25zdHJhaW50VmFsaWduID09PSBcImJvdHRvbVwiXG4gICAgICAgICkge1xuICAgICAgICAgIGZvbnRPcHRpb25zLnZhbGlnbiA9IGhlaWdodENvbnN0cmFpbnRWYWxpZ247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm9udE9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG9wdGlvbnMgYW5kIHVwZGF0ZSBpbnRlcm5hbCBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgb3B0aW9ucyB0byBzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gIHBpbGUgICAgIGFycmF5IG9mIG9wdGlvbiBvYmplY3RzIHRvIGNvbnNpZGVyIGZvciBvcHRpb24gJ2Nob3NlbidcbiAgICovXG4gIHVwZGF0ZShvcHRpb25zLCBwaWxlKSB7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMsIHRydWUpO1xuICAgIHRoaXMucHJvcGFnYXRlRm9udHMocGlsZSk7XG4gICAgZGVlcEV4dGVuZCh0aGlzLmZvbnRPcHRpb25zLCB0aGlzLmNvbnN0cmFpbihwaWxlKSk7XG4gICAgdGhpcy5mb250T3B0aW9ucy5jaG9vc2VyID0gY2hvb3NpZnkoXCJsYWJlbFwiLCBwaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIG1hcmdpbnMgYXJlIHNldCBpbiBhbiBlbGVtZW50LCBhZGp1c3Qgc2l6ZXMgaXMgY2FsbGVkIHRvIHJlbW92ZSB0aGVtXG4gICAqIGZyb20gdGhlIHdpZHRoL2hlaWdodCBjb25zdHJhaW50cy4gVGhpcyBtdXN0IGJlIGRvbmUgcHJpb3IgdG8gbGFiZWwgc2l6aW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3t0b3A6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYm90dG9tOiBudW1iZXIsIGxlZnQ6IG51bWJlcn19IG1hcmdpbnNcbiAgICovXG4gIGFkanVzdFNpemVzKG1hcmdpbnMpIHtcbiAgICBjb25zdCB3aWR0aEJpYXMgPSBtYXJnaW5zID8gbWFyZ2lucy5yaWdodCArIG1hcmdpbnMubGVmdCA6IDA7XG4gICAgaWYgKHRoaXMuZm9udE9wdGlvbnMuY29uc3RyYWluV2lkdGgpIHtcbiAgICAgIHRoaXMuZm9udE9wdGlvbnMubWF4V2R0IC09IHdpZHRoQmlhcztcbiAgICAgIHRoaXMuZm9udE9wdGlvbnMubWluV2R0IC09IHdpZHRoQmlhcztcbiAgICB9XG4gICAgY29uc3QgaGVpZ2h0QmlhcyA9IG1hcmdpbnMgPyBtYXJnaW5zLnRvcCArIG1hcmdpbnMuYm90dG9tIDogMDtcbiAgICBpZiAodGhpcy5mb250T3B0aW9ucy5jb25zdHJhaW5IZWlnaHQpIHtcbiAgICAgIHRoaXMuZm9udE9wdGlvbnMubWluSGd0IC09IGhlaWdodEJpYXM7XG4gICAgfVxuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIE1ldGhvZHMgZm9yIGhhbmRsaW5nIG9wdGlvbnMgcGlsZXNcbiAgLy8gRXZlbnR1YWxseSwgdGhlc2Ugd2lsbCBiZSBtb3ZlZCB0byBhIHNlcGFyYXRlIGNsYXNzXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGZvbnQgbWVtYmVycyBvZiB0aGUgcGFzc2VkIGxpc3Qgb2Ygb3B0aW9uIG9iamVjdHMgdG8gdGhlIHBpbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UGlsZX0gZHN0UGlsZSAgcGlsZSBvZiBvcHRpb24gb2JqZWN0cyBhZGQgdG9cbiAgICogQHBhcmFtIHtQaWxlfSBzcmNQaWxlICBwaWxlIG9mIG9wdGlvbiBvYmplY3RzIHRvIHRha2UgZm9udCBvcHRpb25zIGZyb21cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFkZEZvbnRPcHRpb25zVG9QaWxlKGRzdFBpbGUsIHNyY1BpbGUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyY1BpbGUubGVuZ3RoOyArK2kpIHtcbiAgICAgIHRoaXMuYWRkRm9udFRvUGlsZShkc3RQaWxlLCBzcmNQaWxlW2ldKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGdpdmVuIGZvbnQgb3B0aW9uIG9iamVjdCB0byB0aGUgbGlzdCBvZiBvYmplY3RzICh0aGUgJ3BpbGUnKSB0byBjb25zaWRlciBmb3IgZGV0ZXJtaW5pbmdcbiAgICogbXVsdGktZm9udCBvcHRpb24gdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BpbGV9IHBpbGUgIHBpbGUgb2Ygb3B0aW9uIG9iamVjdHMgdG8gdXNlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICBpbnN0YW5jZSB0byBhZGQgdG8gcGlsZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkRm9udFRvUGlsZShwaWxlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIGlmIChvcHRpb25zLmZvbnQgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmZvbnQgPT09IG51bGwpIHJldHVybjtcblxuICAgIGNvbnN0IGl0ZW0gPSBvcHRpb25zLmZvbnQ7XG4gICAgcGlsZS5wdXNoKGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3QgYWxsIG93bi1wcm9wZXJ0eSB2YWx1ZXMgZnJvbSB0aGUgZm9udCBwaWxlIHRoYXQgYXJlbid0IG11bHRpLWZvbnQgb3B0aW9uIG9iamVjdHNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BpbGV9IHBpbGUgIHBpbGUgb2Ygb3B0aW9uIG9iamVjdHMgdG8gdXNlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IG9iamVjdCB3aXRoIGFsbCBjdXJyZW50IG93biBiYXNpYyBmb250IHByb3BlcnRpZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldEJhc2ljT3B0aW9ucyhwaWxlKSB7XG4gICAgY29uc3QgcmV0ID0ge307XG5cbiAgICAvLyBTY2FucyB0aGUgd2hvbGUgcGlsZSB0byBnZXQgYWxsIG9wdGlvbnMgcHJlc2VudFxuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcGlsZS5sZW5ndGg7ICsrbikge1xuICAgICAgbGV0IGZvbnRPcHRpb25zID0gcGlsZVtuXTtcblxuICAgICAgLy8gQ29udmVydCBzaG9ydGhhbmQgaWYgbmVjZXNzYXJ5XG4gICAgICBjb25zdCB0bXBTaG9ydGhhbmQgPSB7fTtcbiAgICAgIGlmIChMYWJlbC5wYXJzZUZvbnRTdHJpbmcodG1wU2hvcnRoYW5kLCBmb250T3B0aW9ucykpIHtcbiAgICAgICAgZm9udE9wdGlvbnMgPSB0bXBTaG9ydGhhbmQ7XG4gICAgICB9XG5cbiAgICAgIGZvckVhY2goZm9udE9wdGlvbnMsIChvcHQsIG5hbWUpID0+IHtcbiAgICAgICAgaWYgKG9wdCA9PT0gdW5kZWZpbmVkKSByZXR1cm47IC8vIG11bHRpLWZvbnQgb3B0aW9uIG5lZWQgbm90IGJlIHByZXNlbnRcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXQsIG5hbWUpKSByZXR1cm47IC8vIEtlZXAgZmlyc3QgdmFsdWUgd2UgZW5jb3VudGVyXG5cbiAgICAgICAgaWYgKG11bHRpRm9udFN0eWxlLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgLy8gU2tpcCBtdWx0aS1mb250IHByb3BlcnRpZXMgYnV0IHdlIGRvIG5lZWQgdGhlIHN0cnVjdHVyZVxuICAgICAgICAgIHJldFtuYW1lXSA9IHt9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldFtuYW1lXSA9IG9wdDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIGZvciBnaXZlbiBvcHRpb24gZm9yIHRoZSBnaXZlbiBtdWx0aS1mb250LlxuICAgKlxuICAgKiBBbGwgYXZhaWxhYmxlIG9wdGlvbiBvYmplY3RzIGFyZSB0cmF3bGVkIGluIHRoZSBzZXQgb3JkZXIgdG8gY29uc3RydWN0IHRoZSBvcHRpb24gdmFsdWVzLlxuICAgKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogIyMgVHJhdmVyc2FsIG9mIHBpbGUgZm9yIG11bHRpLWZvbnRzXG4gICAqXG4gICAqIFRoZSBkZXRlcm1pbmF0aW9uIG9mIG11bHRpLWZvbnQgb3B0aW9uIHZhbHVlcyBpcyBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSBhbnkgdmFsdWVzIG5vdFxuICAgKiBwcmVzZW50IGluIHRoZSBtdWx0aS1mb250IG9wdGlvbnMgc2hvdWxkIGJ5IGRlZmluaXRpb24gYmUgdGFrZW4gZnJvbSB0aGUgbWFpbiBmb250IG9wdGlvbnMsXG4gICAqIGkuZS4gZnJvbSB0aGUgY3VycmVudCAncGFyZW50JyBvYmplY3Qgb2YgdGhlIG11bHRpLWZvbnQgb3B0aW9uLlxuICAgKlxuICAgKiAjIyMgU2VhcmNoIG9yZGVyIGZvciBtdWx0aS1mb250c1xuICAgKlxuICAgKiAnYm9sZCcgdXNlZCBhcyBleGFtcGxlOlxuICAgKlxuICAgKiAgIC0gc2VhcmNoIGluIG9wdGlvbiBncm91cCAnYm9sZCcgaW4gbG9jYWwgcHJvcGVydGllc1xuICAgKiAgIC0gc2VhcmNoIGluIG1haW4gZm9udCBvcHRpb24gZ3JvdXAgaW4gbG9jYWwgcHJvcGVydGllc1xuICAgKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICpcbiAgICogQHBhcmFtIHtQaWxlfSBwaWxlICBwaWxlIG9mIG9wdGlvbiBvYmplY3RzIHRvIHVzZVxuICAgKiBAcGFyYW0ge011bHRpRm9udFN0eWxlfSBtdWx0aU5hbWUgc3ViIHBhdGggZm9yIHRoZSBtdWx0aS1mb250XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb24gIHRoZSBvcHRpb24gdG8gc2VhcmNoIGZvciwgZm9yIHRoZSBnaXZlbiBtdWx0aS1mb250XG4gICAqIEByZXR1cm5zIHtzdHJpbmd8bnVtYmVyfSB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldEZvbnRPcHRpb24ocGlsZSwgbXVsdGlOYW1lLCBvcHRpb24pIHtcbiAgICBsZXQgbXVsdGlGb250O1xuXG4gICAgLy8gU2VhcmNoIG11bHRpIGZvbnQgaW4gbG9jYWwgcHJvcGVydGllc1xuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcGlsZS5sZW5ndGg7ICsrbikge1xuICAgICAgY29uc3QgZm9udE9wdGlvbnMgPSBwaWxlW25dO1xuXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZvbnRPcHRpb25zLCBtdWx0aU5hbWUpKSB7XG4gICAgICAgIG11bHRpRm9udCA9IGZvbnRPcHRpb25zW211bHRpTmFtZV07XG4gICAgICAgIGlmIChtdWx0aUZvbnQgPT09IHVuZGVmaW5lZCB8fCBtdWx0aUZvbnQgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIENvbnZlcnQgc2hvcnRoYW5kIGlmIG5lY2Vzc2FyeVxuICAgICAgICAvLyBUT0RPOiBpbmVmZmljaWVudCB0byBkbyB0aGlzIGNvbnZlcnNpb24gZXZlcnkgdGltZTsgZmluZCBhIGJldHRlciB3YXkuXG4gICAgICAgIGNvbnN0IHRtcFNob3J0aGFuZCA9IHt9O1xuICAgICAgICBpZiAoTGFiZWwucGFyc2VGb250U3RyaW5nKHRtcFNob3J0aGFuZCwgbXVsdGlGb250KSkge1xuICAgICAgICAgIG11bHRpRm9udCA9IHRtcFNob3J0aGFuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobXVsdGlGb250LCBvcHRpb24pKSB7XG4gICAgICAgICAgcmV0dXJuIG11bHRpRm9udFtvcHRpb25dO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3B0aW9uIGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlIG11bHRpIGZvbnQgb3B0aW9uczsgdGFrZSBpdCBmcm9tIHRoZSBwYXJlbnQgZm9udCBvcHRpb25zLlxuICAgIC8vIFRoZXNlIGhhdmUgYWxyZWFkeSBiZWVuIGNvbnZlcnRlZCB3aXRoIGdldEJhc2ljT3B0aW9ucygpLCBzbyB1c2UgdGhlIGNvbnZlcnRlZCB2YWx1ZXMuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmZvbnRPcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb250T3B0aW9uc1tvcHRpb25dO1xuICAgIH1cblxuICAgIC8vIEEgdmFsdWUgKiptdXN0KiogYmUgZm91bmQ7IHlvdSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJEaWQgbm90IGZpbmQgdmFsdWUgZm9yIG11bHRpLWZvbnQgZm9yIHByb3BlcnR5OiAnXCIgKyBvcHRpb24gKyBcIidcIlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBvcHRpb25zIHZhbHVlcyBmb3IgdGhlIGdpdmVuIG11bHRpLWZvbnQuXG4gICAqXG4gICAqIEFsbCBhdmFpbGFibGUgb3B0aW9uIG9iamVjdHMgYXJlIHRyYXdsZWQgaW4gdGhlIHNldCBvcmRlciB0byBjb25zdHJ1Y3QgdGhlIG9wdGlvbiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UGlsZX0gcGlsZSAgcGlsZSBvZiBvcHRpb24gb2JqZWN0cyB0byB1c2VcbiAgICogQHBhcmFtIHtNdWx0aUZvbnRTdHlsZX0gbXVsdGlOYW1lIHN1YiBwYXRoIGZvciB0aGUgbW9kLWZvbnRcbiAgICogQHJldHVybnMge011bHRpRm9udE9wdGlvbnN9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRGb250T3B0aW9ucyhwaWxlLCBtdWx0aU5hbWUpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCBvcHRpb25OYW1lcyA9IFtcImNvbG9yXCIsIFwic2l6ZVwiLCBcImZhY2VcIiwgXCJtb2RcIiwgXCJ2YWRqdXN0XCJdOyAvLyBMaXN0IG9mIGFsbG93ZWQgb3B0aW9ucyBwZXIgbXVsdGktZm9udFxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25OYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgbW9kID0gb3B0aW9uTmFtZXNbaV07XG4gICAgICByZXN1bHRbbW9kXSA9IHRoaXMuZ2V0Rm9udE9wdGlvbihwaWxlLCBtdWx0aU5hbWUsIG1vZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBFbmQgbWV0aG9kcyBmb3IgaGFuZGxpbmcgb3B0aW9ucyBwaWxlc1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICogQ29sbGFwc2UgdGhlIGZvbnQgb3B0aW9ucyBmb3IgdGhlIG11bHRpLWZvbnQgdG8gc2luZ2xlIG9iamVjdHMsIGZyb21cbiAgICogdGhlIGNoYWluIG9mIG9wdGlvbiBvYmplY3RzIHBhc3NlZCAodGhlICdwaWxlJykuXG4gICAqXG4gICAqIEBwYXJhbSB7UGlsZX0gcGlsZSAgc2VxdWVuY2Ugb2Ygb3B0aW9uIG9iamVjdHMgdG8gY29uc2lkZXIuXG4gICAqICAgICAgICAgICAgICAgICAgICAgRmlyc3QgaXRlbSBpbiBsaXN0IGFzc3VtZWQgdG8gYmUgdGhlIG5ld2x5IHNldCBvcHRpb25zLlxuICAgKi9cbiAgcHJvcGFnYXRlRm9udHMocGlsZSkge1xuICAgIGNvbnN0IGZvbnRQaWxlID0gW107IC8vIHNlcXVlbmNlIG9mIGZvbnQgb2JqZWN0cyB0byBjb25zaWRlciwgb3JkZXIgaW1wb3J0YW50XG5cbiAgICAvLyBOb3RlIHRoYXQgdGhpcy5lbGVtZW50T3B0aW9ucyBpcyBub3QgdXNlZCBoZXJlLlxuICAgIHRoaXMuYWRkRm9udE9wdGlvbnNUb1BpbGUoZm9udFBpbGUsIHBpbGUpO1xuICAgIHRoaXMuZm9udE9wdGlvbnMgPSB0aGlzLmdldEJhc2ljT3B0aW9ucyhmb250UGlsZSk7XG5cbiAgICAvLyBXZSBzZXQgbXVsdGlmb250IHZhbHVlcyBldmVuIGlmIG11bHRpID09PSBmYWxzZSwgZm9yIGNvbnNpc3RlbmN5ICh0aGluZ3MgYnJlYWsgb3RoZXJ3aXNlKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXVsdGlGb250U3R5bGUubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IG1vZCA9IG11bHRpRm9udFN0eWxlW2ldO1xuICAgICAgY29uc3QgbW9kT3B0aW9ucyA9IHRoaXMuZm9udE9wdGlvbnNbbW9kXTtcbiAgICAgIGNvbnN0IHRtcE11bHRpRm9udE9wdGlvbnMgPSB0aGlzLmdldEZvbnRPcHRpb25zKGZvbnRQaWxlLCBtb2QpO1xuXG4gICAgICAvLyBDb3B5IG92ZXIgZm91bmQgdmFsdWVzXG4gICAgICBmb3JFYWNoKHRtcE11bHRpRm9udE9wdGlvbnMsIChvcHRpb24sIG4pID0+IHtcbiAgICAgICAgbW9kT3B0aW9uc1tuXSA9IG9wdGlvbjtcbiAgICAgIH0pO1xuXG4gICAgICBtb2RPcHRpb25zLnNpemUgPSBOdW1iZXIobW9kT3B0aW9ucy5zaXplKTtcbiAgICAgIG1vZE9wdGlvbnMudmFkanVzdCA9IE51bWJlcihtb2RPcHRpb25zLnZhZGp1c3QpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWluIGZ1bmN0aW9uLiBUaGlzIGlzIGNhbGxlZCBmcm9tIGFueXRoaW5nIHRoYXQgd2FudHMgdG8gZHJhdyBhIGxhYmVsLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Jhc2VsaW5lPSdtaWRkbGUnXVxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgYmFzZWxpbmUgPSBcIm1pZGRsZVwiKSB7XG4gICAgLy8gaWYgbm8gbGFiZWwsIHJldHVyblxuICAgIGlmICh0aGlzLmVsZW1lbnRPcHRpb25zLmxhYmVsID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgdG8gcmVuZGVyIHRoZSBsYWJlbFxuICAgIGxldCB2aWV3Rm9udFNpemUgPSB0aGlzLmZvbnRPcHRpb25zLnNpemUgKiB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmVsZW1lbnRPcHRpb25zLmxhYmVsICYmXG4gICAgICB2aWV3Rm9udFNpemUgPCB0aGlzLmVsZW1lbnRPcHRpb25zLnNjYWxpbmcubGFiZWwuZHJhd1RocmVzaG9sZCAtIDFcbiAgICApXG4gICAgICByZXR1cm47XG5cbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB0aGVyZSB3aWxsIG5vdCBiZSBIVUdFIGxldHRlcnMgb24gc2NyZWVuXG4gICAgLy8gYnkgc2V0dGluZyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgdmlzaWJsZSB0ZXh0IHNpemUgKHJlZ2FyZGxlc3Mgb2Ygem9vbUxldmVsKVxuICAgIGlmICh2aWV3Rm9udFNpemUgPj0gdGhpcy5lbGVtZW50T3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1heFZpc2libGUpIHtcbiAgICAgIHZpZXdGb250U2l6ZSA9XG4gICAgICAgIE51bWJlcih0aGlzLmVsZW1lbnRPcHRpb25zLnNjYWxpbmcubGFiZWwubWF4VmlzaWJsZSkgL1xuICAgICAgICB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNpemUgY2FjaGUgaWYgcmVxdWlyZWRcbiAgICB0aGlzLmNhbGN1bGF0ZUxhYmVsU2l6ZShjdHgsIHNlbGVjdGVkLCBob3ZlciwgeCwgeSwgYmFzZWxpbmUpO1xuICAgIHRoaXMuX2RyYXdCYWNrZ3JvdW5kKGN0eCk7XG4gICAgdGhpcy5fZHJhd1RleHQoY3R4LCB4LCB0aGlzLnNpemUueUxpbmUsIGJhc2VsaW5lLCB2aWV3Rm9udFNpemUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyYXdzIHRoZSBsYWJlbCBiYWNrZ3JvdW5kXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3QmFja2dyb3VuZChjdHgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvbnRPcHRpb25zLmJhY2tncm91bmQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5mb250T3B0aW9ucy5iYWNrZ3JvdW5kICE9PSBcIm5vbmVcIlxuICAgICkge1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuZm9udE9wdGlvbnMuYmFja2dyb3VuZDtcbiAgICAgIGNvbnN0IHNpemUgPSB0aGlzLmdldFNpemUoKTtcbiAgICAgIGN0eC5maWxsUmVjdChzaXplLmxlZnQsIHNpemUudG9wLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtiYXNlbGluZT0nbWlkZGxlJ11cbiAgICogQHBhcmFtIHtudW1iZXJ9IHZpZXdGb250U2l6ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdUZXh0KGN0eCwgeCwgeSwgYmFzZWxpbmUgPSBcIm1pZGRsZVwiLCB2aWV3Rm9udFNpemUpIHtcbiAgICBbeCwgeV0gPSB0aGlzLl9zZXRBbGlnbm1lbnQoY3R4LCB4LCB5LCBiYXNlbGluZSk7XG5cbiAgICBjdHgudGV4dEFsaWduID0gXCJsZWZ0XCI7XG4gICAgeCA9IHggLSB0aGlzLnNpemUud2lkdGggLyAyOyAvLyBTaGlmdCBsYWJlbCAxLzItZGlzdGFuY2UgdG8gdGhlIGxlZnRcbiAgICBpZiAodGhpcy5mb250T3B0aW9ucy52YWxpZ24gJiYgdGhpcy5zaXplLmhlaWdodCA+IHRoaXMuc2l6ZS5sYWJlbEhlaWdodCkge1xuICAgICAgaWYgKHRoaXMuZm9udE9wdGlvbnMudmFsaWduID09PSBcInRvcFwiKSB7XG4gICAgICAgIHkgLT0gKHRoaXMuc2l6ZS5oZWlnaHQgLSB0aGlzLnNpemUubGFiZWxIZWlnaHQpIC8gMjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLnZhbGlnbiA9PT0gXCJib3R0b21cIikge1xuICAgICAgICB5ICs9ICh0aGlzLnNpemUuaGVpZ2h0IC0gdGhpcy5zaXplLmxhYmVsSGVpZ2h0KSAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZHJhdyB0aGUgdGV4dFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5saW5lQ291bnQ7IGkrKykge1xuICAgICAgY29uc3QgbGluZSA9IHRoaXMubGluZXNbaV07XG4gICAgICBpZiAobGluZSAmJiBsaW5lLmJsb2Nrcykge1xuICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICBpZiAodGhpcy5pc0VkZ2VMYWJlbCB8fCB0aGlzLmZvbnRPcHRpb25zLmFsaWduID09PSBcImNlbnRlclwiKSB7XG4gICAgICAgICAgd2lkdGggKz0gKHRoaXMuc2l6ZS53aWR0aCAtIGxpbmUud2lkdGgpIC8gMjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZvbnRPcHRpb25zLmFsaWduID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICB3aWR0aCArPSB0aGlzLnNpemUud2lkdGggLSBsaW5lLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGluZS5ibG9ja3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBibG9jayA9IGxpbmUuYmxvY2tzW2pdO1xuICAgICAgICAgIGN0eC5mb250ID0gYmxvY2suZm9udDtcbiAgICAgICAgICBjb25zdCBbZm9udENvbG9yLCBzdHJva2VDb2xvcl0gPSB0aGlzLl9nZXRDb2xvcihcbiAgICAgICAgICAgIGJsb2NrLmNvbG9yLFxuICAgICAgICAgICAgdmlld0ZvbnRTaXplLFxuICAgICAgICAgICAgYmxvY2suc3Ryb2tlQ29sb3JcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChibG9jay5zdHJva2VXaWR0aCA+IDApIHtcbiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBibG9jay5zdHJva2VXaWR0aDtcbiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZUNvbG9yO1xuICAgICAgICAgICAgY3R4LmxpbmVKb2luID0gXCJyb3VuZFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gZm9udENvbG9yO1xuXG4gICAgICAgICAgaWYgKGJsb2NrLnN0cm9rZVdpZHRoID4gMCkge1xuICAgICAgICAgICAgY3R4LnN0cm9rZVRleHQoYmxvY2sudGV4dCwgeCArIHdpZHRoLCB5ICsgYmxvY2sudmFkanVzdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN0eC5maWxsVGV4dChibG9jay50ZXh0LCB4ICsgd2lkdGgsIHkgKyBibG9jay52YWRqdXN0KTtcbiAgICAgICAgICB3aWR0aCArPSBibG9jay53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICB5ICs9IGxpbmUuaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlbGluZVxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QWxpZ25tZW50KGN0eCwgeCwgeSwgYmFzZWxpbmUpIHtcbiAgICAvLyBjaGVjayBmb3IgbGFiZWwgYWxpZ25tZW50IChmb3IgZWRnZXMpXG4gICAgLy8gVE9ETzogbWFrZSBhbGlnbm1lbnQgZm9yIG5vZGVzXG4gICAgaWYgKFxuICAgICAgdGhpcy5pc0VkZ2VMYWJlbCAmJlxuICAgICAgdGhpcy5mb250T3B0aW9ucy5hbGlnbiAhPT0gXCJob3Jpem9udGFsXCIgJiZcbiAgICAgIHRoaXMucG9pbnRUb1NlbGYgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICB4ID0gMDtcbiAgICAgIHkgPSAwO1xuXG4gICAgICBjb25zdCBsaW5lTWFyZ2luID0gMjtcbiAgICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLmFsaWduID09PSBcInRvcFwiKSB7XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSBcImFscGhhYmV0aWNcIjtcbiAgICAgICAgeSAtPSAyICogbGluZU1hcmdpbjsgLy8gZGlzdGFuY2UgZnJvbSBlZGdlLCByZXF1aXJlZCBiZWNhdXNlIHdlIHVzZSBhbHBoYWJldGljLiBBbHBoYWJldGljIGhhcyBsZXNzIGRpZmZlcmVuY2UgYmV0d2VlbiBicm93c2Vyc1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmZvbnRPcHRpb25zLmFsaWduID09PSBcImJvdHRvbVwiKSB7XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSBcImhhbmdpbmdcIjtcbiAgICAgICAgeSArPSAyICogbGluZU1hcmdpbjsgLy8gZGlzdGFuY2UgZnJvbSBlZGdlLCByZXF1aXJlZCBiZWNhdXNlIHdlIHVzZSBoYW5naW5nLiBIYW5naW5nIGhhcyBsZXNzIGRpZmZlcmVuY2UgYmV0d2VlbiBicm93c2Vyc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSBiYXNlbGluZTtcbiAgICB9XG4gICAgcmV0dXJuIFt4LCB5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBmYWRlIGluIHdoZW4gcmVsYXRpdmUgc2NhbGUgaXMgYmV0d2VlbiB0aHJlc2hvbGQgYW5kIHRocmVzaG9sZCAtIDEuXG4gICAqIElmIHRoZSByZWxhdGl2ZSBzY2FsZSB3b3VsZCBiZSBzbWFsbGVyIHRoYW4gdGhyZXNob2xkIC0xIHRoZSBkcmF3IGZ1bmN0aW9uIHdvdWxkIGhhdmUgcmV0dXJuZWQgYmVmb3JlIGNvbWluZyBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgIFRoZSBmb250IGNvbG9yIHRvIHVzZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmlld0ZvbnRTaXplXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbml0aWFsU3Ryb2tlQ29sb3JcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBmb250IGNvbG9yIGFuZCBzdHJva2UgY29sb3JcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRDb2xvcihjb2xvciwgdmlld0ZvbnRTaXplLCBpbml0aWFsU3Ryb2tlQ29sb3IpIHtcbiAgICBsZXQgZm9udENvbG9yID0gY29sb3IgfHwgXCIjMDAwMDAwXCI7XG4gICAgbGV0IHN0cm9rZUNvbG9yID0gaW5pdGlhbFN0cm9rZUNvbG9yIHx8IFwiI2ZmZmZmZlwiO1xuICAgIGlmICh2aWV3Rm9udFNpemUgPD0gdGhpcy5lbGVtZW50T3B0aW9ucy5zY2FsaW5nLmxhYmVsLmRyYXdUaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBNYXRoLm1heChcbiAgICAgICAgMCxcbiAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgMSxcbiAgICAgICAgICAxIC0gKHRoaXMuZWxlbWVudE9wdGlvbnMuc2NhbGluZy5sYWJlbC5kcmF3VGhyZXNob2xkIC0gdmlld0ZvbnRTaXplKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgZm9udENvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KGZvbnRDb2xvciwgb3BhY2l0eSk7XG4gICAgICBzdHJva2VDb2xvciA9IG92ZXJyaWRlT3BhY2l0eShzdHJva2VDb2xvciwgb3BhY2l0eSk7XG4gICAgfVxuICAgIHJldHVybiBbZm9udENvbG9yLCBzdHJva2VDb2xvcl07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHJldHVybnMge3t3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcn19XG4gICAqL1xuICBnZXRUZXh0U2l6ZShjdHgsIHNlbGVjdGVkID0gZmFsc2UsIGhvdmVyID0gZmFsc2UpIHtcbiAgICB0aGlzLl9wcm9jZXNzTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogdGhpcy5zaXplLndpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLnNpemUuaGVpZ2h0LFxuICAgICAgbGluZUNvdW50OiB0aGlzLmxpbmVDb3VudCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBkaW1lbnNpb25zIG9mIHRoZSBsYWJlbFxuICAgKlxuICAgKiBAcmV0dXJucyB7cmVjdH1cbiAgICovXG4gIGdldFNpemUoKSB7XG4gICAgY29uc3QgbGluZU1hcmdpbiA9IDI7XG4gICAgbGV0IHggPSB0aGlzLnNpemUubGVmdDsgLy8gZGVmYXVsdCB2YWx1ZXMgd2hpY2ggbWlnaHQgYmUgb3ZlcnJpZGRlbiBiZWxvd1xuICAgIGxldCB5ID0gdGhpcy5zaXplLnRvcCAtIDAuNSAqIGxpbmVNYXJnaW47IC8vIGlkZW1cblxuICAgIGlmICh0aGlzLmlzRWRnZUxhYmVsKSB7XG4gICAgICBjb25zdCB4MiA9IC10aGlzLnNpemUud2lkdGggKiAwLjU7XG5cbiAgICAgIHN3aXRjaCAodGhpcy5mb250T3B0aW9ucy5hbGlnbikge1xuICAgICAgICBjYXNlIFwibWlkZGxlXCI6XG4gICAgICAgICAgeCA9IHgyO1xuICAgICAgICAgIHkgPSAtdGhpcy5zaXplLmhlaWdodCAqIDAuNTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRvcFwiOlxuICAgICAgICAgIHggPSB4MjtcbiAgICAgICAgICB5ID0gLSh0aGlzLnNpemUuaGVpZ2h0ICsgbGluZU1hcmdpbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJib3R0b21cIjpcbiAgICAgICAgICB4ID0geDI7XG4gICAgICAgICAgeSA9IGxpbmVNYXJnaW47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0ge1xuICAgICAgbGVmdDogeCxcbiAgICAgIHRvcDogeSxcbiAgICAgIHdpZHRoOiB0aGlzLnNpemUud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuc2l6ZS5oZWlnaHQsXG4gICAgfTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt4PTBdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbeT0wXVxuICAgKiBAcGFyYW0geydtaWRkbGUnfCdoYW5naW5nJ30gW2Jhc2VsaW5lPSdtaWRkbGUnXVxuICAgKi9cbiAgY2FsY3VsYXRlTGFiZWxTaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyLCB4ID0gMCwgeSA9IDAsIGJhc2VsaW5lID0gXCJtaWRkbGVcIikge1xuICAgIHRoaXMuX3Byb2Nlc3NMYWJlbChjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5zaXplLmxlZnQgPSB4IC0gdGhpcy5zaXplLndpZHRoICogMC41O1xuICAgIHRoaXMuc2l6ZS50b3AgPSB5IC0gdGhpcy5zaXplLmhlaWdodCAqIDAuNTtcbiAgICB0aGlzLnNpemUueUxpbmUgPSB5ICsgKDEgLSB0aGlzLmxpbmVDb3VudCkgKiAwLjUgKiB0aGlzLmZvbnRPcHRpb25zLnNpemU7XG4gICAgaWYgKGJhc2VsaW5lID09PSBcImhhbmdpbmdcIikge1xuICAgICAgdGhpcy5zaXplLnRvcCArPSAwLjUgKiB0aGlzLmZvbnRPcHRpb25zLnNpemU7XG4gICAgICB0aGlzLnNpemUudG9wICs9IDQ7IC8vIGRpc3RhbmNlIGZyb20gbm9kZSwgcmVxdWlyZWQgYmVjYXVzZSB3ZSB1c2UgaGFuZ2luZy4gSGFuZ2luZyBoYXMgbGVzcyBkaWZmZXJlbmNlIGJldHdlZW4gYnJvd3NlcnNcbiAgICAgIHRoaXMuc2l6ZS55TGluZSArPSA0OyAvLyBkaXN0YW5jZSBmcm9tIG5vZGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZFxuICAgKiBAcmV0dXJucyB7e2NvbG9yLCBzaXplLCBmYWNlLCBtb2QsIHZhZGp1c3QsIHN0cm9rZVdpZHRoOiAqLCBzdHJva2VDb2xvcjogKCp8c3RyaW5nfGFsbE9wdGlvbnMuZWRnZXMuZm9udC5zdHJva2VDb2xvcnx7c3RyaW5nfXxhbGxPcHRpb25zLm5vZGVzLmZvbnQuc3Ryb2tlQ29sb3J8QXJyYXkpfX1cbiAgICovXG4gIGdldEZvcm1hdHRpbmdWYWx1ZXMoY3R4LCBzZWxlY3RlZCwgaG92ZXIsIG1vZCkge1xuICAgIGNvbnN0IGdldFZhbHVlID0gZnVuY3Rpb24gKGZvbnRPcHRpb25zLCBtb2QsIG9wdGlvbikge1xuICAgICAgaWYgKG1vZCA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICBpZiAob3B0aW9uID09PSBcIm1vZFwiKSByZXR1cm4gXCJcIjtcbiAgICAgICAgcmV0dXJuIGZvbnRPcHRpb25zW29wdGlvbl07XG4gICAgICB9XG5cbiAgICAgIGlmIChmb250T3B0aW9uc1ttb2RdW29wdGlvbl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBHcnVtYmwgbGVhdmluZyBvdXQgdGVzdCBvbiB1bmRlZmluZWQgZXF1YWxzIGZhbHNlIGZvciBcIlwiXG4gICAgICAgIHJldHVybiBmb250T3B0aW9uc1ttb2RdW29wdGlvbl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUYWtlIGZyb20gcGFyZW50IGZvbnQgb3B0aW9uXG4gICAgICAgIHJldHVybiBmb250T3B0aW9uc1tvcHRpb25dO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB2YWx1ZXMgPSB7XG4gICAgICBjb2xvcjogZ2V0VmFsdWUodGhpcy5mb250T3B0aW9ucywgbW9kLCBcImNvbG9yXCIpLFxuICAgICAgc2l6ZTogZ2V0VmFsdWUodGhpcy5mb250T3B0aW9ucywgbW9kLCBcInNpemVcIiksXG4gICAgICBmYWNlOiBnZXRWYWx1ZSh0aGlzLmZvbnRPcHRpb25zLCBtb2QsIFwiZmFjZVwiKSxcbiAgICAgIG1vZDogZ2V0VmFsdWUodGhpcy5mb250T3B0aW9ucywgbW9kLCBcIm1vZFwiKSxcbiAgICAgIHZhZGp1c3Q6IGdldFZhbHVlKHRoaXMuZm9udE9wdGlvbnMsIG1vZCwgXCJ2YWRqdXN0XCIpLFxuICAgICAgc3Ryb2tlV2lkdGg6IHRoaXMuZm9udE9wdGlvbnMuc3Ryb2tlV2lkdGgsXG4gICAgICBzdHJva2VDb2xvcjogdGhpcy5mb250T3B0aW9ucy5zdHJva2VDb2xvcixcbiAgICB9O1xuICAgIGlmIChzZWxlY3RlZCB8fCBob3Zlcikge1xuICAgICAgaWYgKFxuICAgICAgICBtb2QgPT09IFwibm9ybWFsXCIgJiZcbiAgICAgICAgdGhpcy5mb250T3B0aW9ucy5jaG9vc2VyID09PSB0cnVlICYmXG4gICAgICAgIHRoaXMuZWxlbWVudE9wdGlvbnMubGFiZWxIaWdobGlnaHRCb2xkXG4gICAgICApIHtcbiAgICAgICAgdmFsdWVzLm1vZCA9IFwiYm9sZFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvbnRPcHRpb25zLmNob29zZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHRoaXMuZm9udE9wdGlvbnMuY2hvb3NlcihcbiAgICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudE9wdGlvbnMuaWQsXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgIGhvdmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmb250U3RyaW5nID0gXCJcIjtcbiAgICBpZiAodmFsdWVzLm1vZCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlcy5tb2QgIT09IFwiXCIpIHtcbiAgICAgIC8vIHNhZmVndWFyZCBmb3IgdW5kZWZpbmVkIC0gdGhpcyBoYXBwZW5lZFxuICAgICAgZm9udFN0cmluZyArPSB2YWx1ZXMubW9kICsgXCIgXCI7XG4gICAgfVxuICAgIGZvbnRTdHJpbmcgKz0gdmFsdWVzLnNpemUgKyBcInB4IFwiICsgdmFsdWVzLmZhY2U7XG5cbiAgICBjdHguZm9udCA9IGZvbnRTdHJpbmcucmVwbGFjZSgvXCIvZywgXCJcIik7XG4gICAgdmFsdWVzLmZvbnQgPSBjdHguZm9udDtcbiAgICB2YWx1ZXMuaGVpZ2h0ID0gdmFsdWVzLnNpemU7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBkaWZmZXJlbnRTdGF0ZShzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICByZXR1cm4gc2VsZWN0ZWQgIT09IHRoaXMuc2VsZWN0ZWRTdGF0ZSB8fCBob3ZlciAhPT0gdGhpcy5ob3ZlclN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXhwbG9kZXMgdGhlIHBhc3NlZCB0ZXh0IGludG8gbGluZXMgYW5kIGRldGVybWluZXMgdGhlIHdpZHRoLCBoZWlnaHQgYW5kIG51bWJlciBvZiBsaW5lcy5cbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGluVGV4dCAgdGhlIHRleHQgdG8gZXhwbG9kZVxuICAgKiBAcmV0dXJucyB7e3dpZHRoLCBoZWlnaHQsIGxpbmVzfXwqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Byb2Nlc3NMYWJlbFRleHQoY3R4LCBzZWxlY3RlZCwgaG92ZXIsIGluVGV4dCkge1xuICAgIGNvbnN0IHNwbGl0dGVyID0gbmV3IExhYmVsU3BsaXR0ZXIoY3R4LCB0aGlzLCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHJldHVybiBzcGxpdHRlci5wcm9jZXNzKGluVGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBleHBsb2RlcyB0aGUgbGFiZWwgc3RyaW5nIGludG8gbGluZXMgYW5kIHNldHMgdGhlIHdpZHRoLCBoZWlnaHQgYW5kIG51bWJlciBvZiBsaW5lcy5cbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcm9jZXNzTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAodGhpcy5sYWJlbERpcnR5ID09PSBmYWxzZSAmJiAhdGhpcy5kaWZmZXJlbnRTdGF0ZShzZWxlY3RlZCwgaG92ZXIpKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9wcm9jZXNzTGFiZWxUZXh0KFxuICAgICAgY3R4LFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBob3ZlcixcbiAgICAgIHRoaXMuZWxlbWVudE9wdGlvbnMubGFiZWxcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuZm9udE9wdGlvbnMubWluV2R0ID4gMCAmJiBzdGF0ZS53aWR0aCA8IHRoaXMuZm9udE9wdGlvbnMubWluV2R0KSB7XG4gICAgICBzdGF0ZS53aWR0aCA9IHRoaXMuZm9udE9wdGlvbnMubWluV2R0O1xuICAgIH1cblxuICAgIHRoaXMuc2l6ZS5sYWJlbEhlaWdodCA9IHN0YXRlLmhlaWdodDtcbiAgICBpZiAodGhpcy5mb250T3B0aW9ucy5taW5IZ3QgPiAwICYmIHN0YXRlLmhlaWdodCA8IHRoaXMuZm9udE9wdGlvbnMubWluSGd0KSB7XG4gICAgICBzdGF0ZS5oZWlnaHQgPSB0aGlzLmZvbnRPcHRpb25zLm1pbkhndDtcbiAgICB9XG5cbiAgICB0aGlzLmxpbmVzID0gc3RhdGUubGluZXM7XG4gICAgdGhpcy5saW5lQ291bnQgPSBzdGF0ZS5saW5lcy5sZW5ndGg7XG4gICAgdGhpcy5zaXplLndpZHRoID0gc3RhdGUud2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IHN0YXRlLmhlaWdodDtcbiAgICB0aGlzLnNlbGVjdGVkU3RhdGUgPSBzZWxlY3RlZDtcbiAgICB0aGlzLmhvdmVyU3RhdGUgPSBob3ZlcjtcblxuICAgIHRoaXMubGFiZWxEaXJ0eSA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgbGFiZWwgaXMgdmlzaWJsZVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGlzIGxhYmVsIHdpbGwgYmUgc2hvdywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICB2aXNpYmxlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc2l6ZS53aWR0aCA9PT0gMCB8fFxuICAgICAgdGhpcy5zaXplLmhlaWdodCA9PT0gMCB8fFxuICAgICAgdGhpcy5lbGVtZW50T3B0aW9ucy5sYWJlbCA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7IC8vIG5vdGhpbmcgdG8gZGlzcGxheVxuICAgIH1cblxuICAgIGNvbnN0IHZpZXdGb250U2l6ZSA9IHRoaXMuZm9udE9wdGlvbnMuc2l6ZSAqIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgIGlmICh2aWV3Rm9udFNpemUgPCB0aGlzLmVsZW1lbnRPcHRpb25zLnNjYWxpbmcubGFiZWwuZHJhd1RocmVzaG9sZCAtIDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gVG9vIHNtYWxsIG9yIHRvbyBmYXIgYXdheSB0byBzaG93XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGFiZWw7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ29uc3RydWN0b3IoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgbmF0aXZlQ29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgUmVmbGVjdC5jb25zdHJ1Y3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmNvbnN0cnVjdFxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEobmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcblxudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxudmFyIEZPUkNFRCA9IE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHO1xuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiBGT1JDRUQgfSwge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhQ29uc3RydWN0b3IoVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhQ29uc3RydWN0b3IoYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gbmF0aXZlQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICBhcHBseShwdXNoLCAkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChhcHBseShiaW5kLCBUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3RQcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBhcHBseShUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5SZWZsZWN0LmNvbnN0cnVjdDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBzZXRQcm90b3R5cGVPZjogc2V0UHJvdG90eXBlT2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiaW1wb3J0IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIHZhciBfY29udGV4dDtcbiAgX3NldFByb3RvdHlwZU9mID0gX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YpLmNhbGwoX2NvbnRleHQpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwgImltcG9ydCBfT2JqZWN0JGNyZWF0ZSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanNcIjtcbmltcG9ydCBfT2JqZWN0JGRlZmluZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBfT2JqZWN0JGNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZ2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfZ2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRnZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBfT2JqZWN0JGdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsICIvKipcbiAqIFRoZSBCYXNlIGNsYXNzIGZvciBhbGwgTm9kZXMuXG4gKi9cbmNsYXNzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5sYWJlbE1vZHVsZSA9IGxhYmVsTW9kdWxlO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLnRvcCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxlZnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5oZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJhZGl1cyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1hcmdpbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlZnJlc2hOZWVkZWQgPSB0cnVlO1xuICAgIHRoaXMuYm91bmRpbmdCb3ggPSB7IHRvcDogMCwgbGVmdDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0TWFyZ2lucyhsYWJlbE1vZHVsZSkge1xuICAgIHRoaXMubWFyZ2luID0ge307XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXJnaW4pIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLm1hcmdpbiA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRoaXMubWFyZ2luLnRvcCA9IHRoaXMub3B0aW9ucy5tYXJnaW4udG9wO1xuICAgICAgICB0aGlzLm1hcmdpbi5yaWdodCA9IHRoaXMub3B0aW9ucy5tYXJnaW4ucmlnaHQ7XG4gICAgICAgIHRoaXMubWFyZ2luLmJvdHRvbSA9IHRoaXMub3B0aW9ucy5tYXJnaW4uYm90dG9tO1xuICAgICAgICB0aGlzLm1hcmdpbi5sZWZ0ID0gdGhpcy5vcHRpb25zLm1hcmdpbi5sZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tYXJnaW4udG9wID0gdGhpcy5vcHRpb25zLm1hcmdpbjtcbiAgICAgICAgdGhpcy5tYXJnaW4ucmlnaHQgPSB0aGlzLm9wdGlvbnMubWFyZ2luO1xuICAgICAgICB0aGlzLm1hcmdpbi5ib3R0b20gPSB0aGlzLm9wdGlvbnMubWFyZ2luO1xuICAgICAgICB0aGlzLm1hcmdpbi5sZWZ0ID0gdGhpcy5vcHRpb25zLm1hcmdpbjtcbiAgICAgIH1cbiAgICB9XG4gICAgbGFiZWxNb2R1bGUuYWRqdXN0U2l6ZXModGhpcy5tYXJnaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgY29uc3QgYm9yZGVyV2lkdGggPSB0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGg7XG4gICAgaWYgKGN0eCkge1xuICAgICAgdGhpcy5yZXNpemUoY3R4KTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIE1hdGgubWluKFxuICAgICAgICBNYXRoLmFicyh0aGlzLndpZHRoIC8gMiAvIE1hdGguY29zKGFuZ2xlKSksXG4gICAgICAgIE1hdGguYWJzKHRoaXMuaGVpZ2h0IC8gMiAvIE1hdGguc2luKGFuZ2xlKSlcbiAgICAgICkgKyBib3JkZXJXaWR0aFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBlbmFibGVTaGFkb3coY3R4LCB2YWx1ZXMpIHtcbiAgICBpZiAodmFsdWVzLnNoYWRvdykge1xuICAgICAgY3R4LnNoYWRvd0NvbG9yID0gdmFsdWVzLnNoYWRvd0NvbG9yO1xuICAgICAgY3R4LnNoYWRvd0JsdXIgPSB2YWx1ZXMuc2hhZG93U2l6ZTtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gdmFsdWVzLnNoYWRvd1g7XG4gICAgICBjdHguc2hhZG93T2Zmc2V0WSA9IHZhbHVlcy5zaGFkb3dZO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpIHtcbiAgICBpZiAodmFsdWVzLnNoYWRvdykge1xuICAgICAgY3R4LnNoYWRvd0NvbG9yID0gXCJyZ2JhKDAsMCwwLDApXCI7XG4gICAgICBjdHguc2hhZG93Qmx1ciA9IDA7XG4gICAgICBjdHguc2hhZG93T2Zmc2V0WCA9IDA7XG4gICAgICBjdHguc2hhZG93T2Zmc2V0WSA9IDA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZW5hYmxlQm9yZGVyRGFzaGVzKGN0eCwgdmFsdWVzKSB7XG4gICAgaWYgKHZhbHVlcy5ib3JkZXJEYXNoZXMgIT09IGZhbHNlKSB7XG4gICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IGRhc2hlcyA9IHZhbHVlcy5ib3JkZXJEYXNoZXM7XG4gICAgICAgIGlmIChkYXNoZXMgPT09IHRydWUpIHtcbiAgICAgICAgICBkYXNoZXMgPSBbNSwgMTVdO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5zZXRMaW5lRGFzaChkYXNoZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwic2V0TGluZURhc2ggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXIuIFRoZSBkYXNoZWQgYm9yZGVycyBjYW5ub3QgYmUgdXNlZC5cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmJvcmRlckRhc2hlcyA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMuYm9yZGVyRGFzaGVzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZGlzYWJsZUJvcmRlckRhc2hlcyhjdHgsIHZhbHVlcykge1xuICAgIGlmICh2YWx1ZXMuYm9yZGVyRGFzaGVzICE9PSBmYWxzZSkge1xuICAgICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN0eC5zZXRMaW5lRGFzaChbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwic2V0TGluZURhc2ggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXIuIFRoZSBkYXNoZWQgYm9yZGVycyBjYW5ub3QgYmUgdXNlZC5cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmJvcmRlckRhc2hlcyA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMuYm9yZGVyRGFzaGVzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpZiB0aGUgc2hhcGUgb2YgYSBub2RlIG5lZWRzIHRvIGJlIHJlY2FsY3VsYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBuZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgaWYgKHRoaXMucmVmcmVzaE5lZWRlZCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSBub3QgdGhlIGJlc3QgbG9jYXRpb24gdG8gcmVzZXQgdGhpcyBtZW1iZXIuXG4gICAgICAvLyBIb3dldmVyLCBpbiB0aGUgY3VycmVudCBsb2dpYywgaXQgaXMgdGhlIG1vc3QgY29udmVuaWVudCBvbmUuXG4gICAgICB0aGlzLnJlZnJlc2hOZWVkZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLndpZHRoID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMubGFiZWxNb2R1bGUuZGlmZmVyZW50U3RhdGUoc2VsZWN0ZWQsIGhvdmVyKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBpbml0Q29udGV4dEZvckRyYXcoY3R4LCB2YWx1ZXMpIHtcbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IHZhbHVlcy5ib3JkZXJXaWR0aCAvIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuXG4gICAgY3R4LmxpbmVXaWR0aCA9IE1hdGgubWluKHRoaXMud2lkdGgsIGJvcmRlcldpZHRoKTtcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSB2YWx1ZXMuYm9yZGVyQ29sb3I7XG4gICAgY3R4LmZpbGxTdHlsZSA9IHZhbHVlcy5jb2xvcjtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIHBlcmZvcm1TdHJva2UoY3R4LCB2YWx1ZXMpIHtcbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IHZhbHVlcy5ib3JkZXJXaWR0aCAvIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuXG4gICAgLy9kcmF3IGRhc2hlZCBib3JkZXIgaWYgZW5hYmxlZCwgc2F2ZSBhbmQgcmVzdG9yZSBpcyByZXF1aXJlZCBmb3IgZmlyZWZveCBub3QgdG8gY3Jhc2ggb24gdW5peC5cbiAgICBjdHguc2F2ZSgpO1xuICAgIC8vIGlmIGJvcmRlcnMgYXJlIHplcm8gd2lkdGgsIHRoZXkgd2lsbCBiZSBkcmF3biB3aXRoIHdpZHRoIDEgYnkgZGVmYXVsdC4gVGhpcyBwcmV2ZW50cyB0aGF0XG4gICAgaWYgKGJvcmRlcldpZHRoID4gMCkge1xuICAgICAgdGhpcy5lbmFibGVCb3JkZXJEYXNoZXMoY3R4LCB2YWx1ZXMpO1xuICAgICAgLy9kcmF3IHRoZSBib3JkZXJcbiAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgIC8vZGlzYWJsZSBkYXNoZWQgYm9yZGVyIGZvciBvdGhlciBlbGVtZW50c1xuICAgICAgdGhpcy5kaXNhYmxlQm9yZGVyRGFzaGVzKGN0eCwgdmFsdWVzKTtcbiAgICB9XG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIHBlcmZvcm1GaWxsKGN0eCwgdmFsdWVzKSB7XG4gICAgY3R4LnNhdmUoKTtcbiAgICBjdHguZmlsbFN0eWxlID0gdmFsdWVzLmNvbG9yO1xuICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICB0aGlzLmVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgLy8gZHJhdyB0aGUgYmFja2dyb3VuZFxuICAgIGN0eC5maWxsKCk7XG4gICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuXG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgICB0aGlzLnBlcmZvcm1TdHJva2UoY3R4LCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXJnaW5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRCb3VuZGluZ0JveE1hcmdpbihtYXJnaW4pIHtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgLT0gbWFyZ2luO1xuICAgIHRoaXMuYm91bmRpbmdCb3gudG9wIC09IG1hcmdpbjtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSArPSBtYXJnaW47XG4gICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCArPSBtYXJnaW47XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIGNhbGwuXG4gICAqXG4gICAqIERvaW5nIGl0IGxpa2UgdGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gb3ZlcnJpZGVcbiAgICogaW4gdGhlIGNoaWxkIGNsYXNzZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgaWYgKGN0eCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgfVxuXG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcblxuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHRoaXMubGVmdDtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHRoaXMudG9wO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0gdGhpcy50b3AgKyB0aGlzLmhlaWdodDtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gdGhpcy5sZWZ0ICsgdGhpcy53aWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIGNhbGwuXG4gICAqIFRoaXMgYWN0cyBhcyBhIHN0dWIgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSwgY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICB0aGlzLl91cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBkaW1lbnNpb25zIHRvIHVzZSBmb3Igbm9kZXMgd2l0aCBhbiBpbnRlcm5hbCBsYWJlbFxuICAgKlxuICAgKiBDdXJyZW50bHksIHRoZXNlIGFyZTogQ2lyY2xlLCBFbGxpcHNlLCBEYXRhYmFzZSwgQm94XG4gICAqIFRoZSBvdGhlciBub2RlcyBoYXZlIGV4dGVybmFsIGxhYmVscywgYW5kIHdpbGwgbm90IGNhbGwgdGhpcyBtZXRob2RcbiAgICpcbiAgICogSWYgdGhlcmUgaXMgbm8gbGFiZWwsIGRlY2VudCBkZWZhdWx0IHZhbHVlcyBhcmUgc3VwcGxpZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2VsZWN0ZWRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hvdmVyXVxuICAgKiBAcmV0dXJucyB7e3dpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlcn19XG4gICAqL1xuICBnZXREaW1lbnNpb25zRnJvbUxhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgLy8gTk9URTogcHJldmlvdXNseSAndGV4dFNpemUnIHdhcyBub3QgcHV0IGluICd0aGlzJyBmb3IgRWxsaXBzZVxuICAgIC8vIFRPRE86IGV4YW1pbmUgdGhlIGNvbnNlcXVlbmNlcy5cbiAgICB0aGlzLnRleHRTaXplID0gdGhpcy5sYWJlbE1vZHVsZS5nZXRUZXh0U2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgbGV0IHdpZHRoID0gdGhpcy50ZXh0U2l6ZS53aWR0aDtcbiAgICBsZXQgaGVpZ2h0ID0gdGhpcy50ZXh0U2l6ZS5oZWlnaHQ7XG5cbiAgICBjb25zdCBERUZBVUxUX1NJWkUgPSAxNDtcbiAgICBpZiAod2lkdGggPT09IDApIHtcbiAgICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuIHRoZXJlIGlzIG5vIGxhYmVsIHRleHQgc2V0XG4gICAgICB3aWR0aCA9IERFRkFVTFRfU0laRTsgLy8gdXNlIGEgZGVjZW50IGRlZmF1bHRcbiAgICAgIGhlaWdodCA9IERFRkFVTFRfU0laRTsgLy8gaWYgd2lkdGggemVybywgdGhlbiBoZWlnaHQgYWxzbyBhbHdheXMgemVyb1xuICAgIH1cblxuICAgIHJldHVybiB7IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBOb2RlQmFzZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vZGVCYXNlIGZyb20gXCIuLi91dGlsL05vZGVCYXNlXCI7XG5pbXBvcnQgeyBkcmF3Um91bmRSZWN0IH0gZnJvbSBcIi4uL3V0aWwvc2hhcGVzXCI7XG5cbi8qKlxuICogQSBCb3ggTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBOb2RlQmFzZVxuICovXG5jbGFzcyBCb3ggZXh0ZW5kcyBOb2RlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gICAgdGhpcy5fc2V0TWFyZ2lucyhsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsIGhvdmVyID0gdGhpcy5ob3Zlcikge1xuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5nZXREaW1lbnNpb25zRnJvbUxhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcblxuICAgICAgdGhpcy53aWR0aCA9IGRpbWVuc2lvbnMud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQ7XG4gICAgICB0aGlzLmhlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0ICsgdGhpcy5tYXJnaW4udG9wICsgdGhpcy5tYXJnaW4uYm90dG9tO1xuICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLndpZHRoIC8gMjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgdGhpcy5pbml0Q29udGV4dEZvckRyYXcoY3R4LCB2YWx1ZXMpO1xuICAgIGRyYXdSb3VuZFJlY3QoXG4gICAgICBjdHgsXG4gICAgICB0aGlzLmxlZnQsXG4gICAgICB0aGlzLnRvcCxcbiAgICAgIHRoaXMud2lkdGgsXG4gICAgICB0aGlzLmhlaWdodCxcbiAgICAgIHZhbHVlcy5ib3JkZXJSYWRpdXNcbiAgICApO1xuICAgIHRoaXMucGVyZm9ybUZpbGwoY3R4LCB2YWx1ZXMpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KFxuICAgICAgY3R4LFxuICAgICAgdGhpcy5sZWZ0ICsgdGhpcy50ZXh0U2l6ZS53aWR0aCAvIDIgKyB0aGlzLm1hcmdpbi5sZWZ0LFxuICAgICAgdGhpcy50b3AgKyB0aGlzLnRleHRTaXplLmhlaWdodCAvIDIgKyB0aGlzLm1hcmdpbi50b3AsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICovXG4gIHVwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgdGhpcy5fdXBkYXRlQm91bmRpbmdCb3goeCwgeSwgY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgY29uc3QgYm9yZGVyUmFkaXVzID0gdGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5ib3JkZXJSYWRpdXM7IC8vIG9ubHkgZWZmZWN0aXZlIGZvciBib3hcbiAgICB0aGlzLl9hZGRCb3VuZGluZ0JveE1hcmdpbihib3JkZXJSYWRpdXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aDtcblxuICAgIHJldHVybiAoXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgTWF0aC5hYnModGhpcy53aWR0aCAvIDIgLyBNYXRoLmNvcyhhbmdsZSkpLFxuICAgICAgICBNYXRoLmFicyh0aGlzLmhlaWdodCAvIDIgLyBNYXRoLnNpbihhbmdsZSkpXG4gICAgICApICsgYm9yZGVyV2lkdGhcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJveDtcbiIsICJpbXBvcnQgTm9kZUJhc2UgZnJvbSBcIi4vTm9kZUJhc2VcIjtcbmltcG9ydCB7IGRyYXdDaXJjbGUgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuLyoqXG4gKiBOT1RFOiBUaGlzIGlzIGEgYmFkIGJhc2UgY2xhc3NcbiAqXG4gKiBDaGlsZCBjbGFzc2VzIGFyZTpcbiAqXG4gKiAgIEltYWdlICAgICAgIC0gdXNlcyAqb25seSogaW1hZ2UgbWV0aG9kc1xuICogICBDaXJjbGUgICAgICAtIHVzZXMgKm9ubHkqIF9kcmF3UmF3Q2lyY2xlXG4gKiAgIENpcmNsZUltYWdlIC0gdXNlcyBhbGxcbiAqXG4gKiBUT0RPOiBSZWZhY3RvciwgbW92ZSBfZHJhd1Jhd0NpcmNsZSB0byBkaWZmZXJlbnQgbW9kdWxlLCBkZXJpdmUgQ2lyY2xlIGZyb20gTm9kZUJhc2VcbiAqICAgICAgIFJlbmFtZSB0aGlzIHRvIEltYWdlQmFzZVxuICogICAgICAgQ29uc29saWRhdGUgY29tbW9uIGNvZGUgaW4gSW1hZ2UgYW5kIENpcmNsZUltYWdlIHRvIGJhc2UgY2xhc3NcbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgQ2lyY2xlSW1hZ2VCYXNlIGV4dGVuZHMgTm9kZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICAgIHRoaXMubGFiZWxPZmZzZXQgPSAwO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gW2ltYWdlT2JqXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2ltYWdlT2JqQWx0XVxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zLCBpbWFnZU9iaiwgaW1hZ2VPYmpBbHQpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKCEoaW1hZ2VPYmogPT09IHVuZGVmaW5lZCAmJiBpbWFnZU9iakFsdCA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgdGhpcy5zZXRJbWFnZXMoaW1hZ2VPYmosIGltYWdlT2JqQWx0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBpbWFnZXMgZm9yIHRoaXMgbm9kZS5cbiAgICpcbiAgICogVGhlIGltYWdlcyBjYW4gYmUgdXBkYXRlZCBhZnRlciB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIG9wdGlvbnM7XG4gICAqIHRoZXJlZm9yZSwgdGhpcyBtZXRob2QgbmVlZHMgdG8gYmUgcmVlbnRyYW50LlxuICAgKlxuICAgKiBGb3IgY29ycmVjdCB3b3JraW5nIGluIGVycm9yIGNhc2VzLCBpdCBpcyBuZWNlc3NhcnkgdG8gcHJvcGVybHkgc2V0XG4gICAqIGZpZWxkICdub2Rlcy5icm9rZW5JbWFnZScgaW4gdGhlIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqICByZXF1aXJlZDsgbWFpbiBpbWFnZSB0byBzaG93IGZvciB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtJbWFnZXx1bmRlZmluZWR9IGltYWdlT2JqQWx0IG9wdGlvbmFsOyBpbWFnZSB0byBzaG93IHdoZW4gbm9kZSBpcyBzZWxlY3RlZFxuICAgKi9cbiAgc2V0SW1hZ2VzKGltYWdlT2JqLCBpbWFnZU9iakFsdCkge1xuICAgIGlmIChpbWFnZU9iakFsdCAmJiB0aGlzLnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmltYWdlT2JqID0gaW1hZ2VPYmpBbHQ7XG4gICAgICB0aGlzLmltYWdlT2JqQWx0ID0gaW1hZ2VPYmo7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW1hZ2VPYmogPSBpbWFnZU9iajtcbiAgICAgIHRoaXMuaW1hZ2VPYmpBbHQgPSBpbWFnZU9iakFsdDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHNlbGVjdGlvbiBhbmQgc3dpdGNoIGJldHdlZW4gdGhlIGJhc2UgYW5kIHRoZSBzZWxlY3RlZCBpbWFnZS5cbiAgICpcbiAgICogRG8gdGhlIHN3aXRjaCBvbmx5IGlmIGltYWdlT2JqQWx0IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZCB2YWx1ZSBvZiBuZXcgc2VsZWN0ZWQgc3RhdGUgZm9yIGN1cnJlbnQgbm9kZVxuICAgKi9cbiAgc3dpdGNoSW1hZ2VzKHNlbGVjdGVkKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uX2NoYW5nZWQgPVxuICAgICAgKHNlbGVjdGVkICYmICF0aGlzLnNlbGVjdGVkKSB8fCAoIXNlbGVjdGVkICYmIHRoaXMuc2VsZWN0ZWQpO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBzZWxlY3RlZDsgLy8gUmVtZW1iZXIgbmV3IHNlbGVjdGlvblxuXG4gICAgaWYgKHRoaXMuaW1hZ2VPYmpBbHQgIT09IHVuZGVmaW5lZCAmJiBzZWxlY3Rpb25fY2hhbmdlZCkge1xuICAgICAgY29uc3QgaW1hZ2VUbXAgPSB0aGlzLmltYWdlT2JqO1xuICAgICAgdGhpcy5pbWFnZU9iaiA9IHRoaXMuaW1hZ2VPYmpBbHQ7XG4gICAgICB0aGlzLmltYWdlT2JqQWx0ID0gaW1hZ2VUbXA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgSW1hZ2UgUGFkZGluZyBmcm9tIG5vZGUgb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7e3RvcDogbnVtYmVyLGxlZnQ6IG51bWJlcixib3R0b206IG51bWJlcixyaWdodDogbnVtYmVyfX0gaW1hZ2UgcGFkZGluZyBpbnNpZGUgdGhpcyBzaGFwZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEltYWdlUGFkZGluZygpIHtcbiAgICBjb25zdCBpbWdQYWRkaW5nID0geyB0b3A6IDAsIHJpZ2h0OiAwLCBib3R0b206IDAsIGxlZnQ6IDAgfTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmltYWdlUGFkZGluZykge1xuICAgICAgY29uc3Qgb3B0SW1nUGFkZGluZyA9IHRoaXMub3B0aW9ucy5pbWFnZVBhZGRpbmc7XG4gICAgICBpZiAodHlwZW9mIG9wdEltZ1BhZGRpbmcgPT0gXCJvYmplY3RcIikge1xuICAgICAgICBpbWdQYWRkaW5nLnRvcCA9IG9wdEltZ1BhZGRpbmcudG9wO1xuICAgICAgICBpbWdQYWRkaW5nLnJpZ2h0ID0gb3B0SW1nUGFkZGluZy5yaWdodDtcbiAgICAgICAgaW1nUGFkZGluZy5ib3R0b20gPSBvcHRJbWdQYWRkaW5nLmJvdHRvbTtcbiAgICAgICAgaW1nUGFkZGluZy5sZWZ0ID0gb3B0SW1nUGFkZGluZy5sZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW1nUGFkZGluZy50b3AgPSBvcHRJbWdQYWRkaW5nO1xuICAgICAgICBpbWdQYWRkaW5nLnJpZ2h0ID0gb3B0SW1nUGFkZGluZztcbiAgICAgICAgaW1nUGFkZGluZy5ib3R0b20gPSBvcHRJbWdQYWRkaW5nO1xuICAgICAgICBpbWdQYWRkaW5nLmxlZnQgPSBvcHRJbWdQYWRkaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbWdQYWRkaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdCB0aGUgbm9kZSBkaW1lbnNpb25zIGZvciBhIGxvYWRlZCBpbWFnZS5cbiAgICpcbiAgICogUHJlOiB0aGlzLmltYWdlT2JqIGlzIHZhbGlkXG4gICAqL1xuICBfcmVzaXplSW1hZ2UoKSB7XG4gICAgbGV0IHdpZHRoLCBoZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy51c2VJbWFnZVNpemUgPT09IGZhbHNlKSB7XG4gICAgICAvLyBVc2UgdGhlIHNpemUgcHJvcGVydHlcbiAgICAgIGxldCByYXRpb193aWR0aCA9IDE7XG4gICAgICBsZXQgcmF0aW9faGVpZ2h0ID0gMTtcblxuICAgICAgLy8gT25seSBjYWxjdWxhdGUgdGhlIHByb3BlciByYXRpbyBpZiBib3RoIHdpZHRoIGFuZCBoZWlnaHQgbm90IHplcm9cbiAgICAgIGlmICh0aGlzLmltYWdlT2JqLndpZHRoICYmIHRoaXMuaW1hZ2VPYmouaGVpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlT2JqLndpZHRoID4gdGhpcy5pbWFnZU9iai5oZWlnaHQpIHtcbiAgICAgICAgICByYXRpb193aWR0aCA9IHRoaXMuaW1hZ2VPYmoud2lkdGggLyB0aGlzLmltYWdlT2JqLmhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByYXRpb19oZWlnaHQgPSB0aGlzLmltYWdlT2JqLmhlaWdodCAvIHRoaXMuaW1hZ2VPYmoud2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd2lkdGggPSB0aGlzLm9wdGlvbnMuc2l6ZSAqIDIgKiByYXRpb193aWR0aDtcbiAgICAgIGhlaWdodCA9IHRoaXMub3B0aW9ucy5zaXplICogMiAqIHJhdGlvX2hlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXNlIHRoZSBpbWFnZSBzaXplIHdpdGggaW1hZ2UgcGFkZGluZ1xuICAgICAgY29uc3QgaW1nUGFkZGluZyA9IHRoaXMuX2dldEltYWdlUGFkZGluZygpO1xuICAgICAgd2lkdGggPSB0aGlzLmltYWdlT2JqLndpZHRoICsgaW1nUGFkZGluZy5sZWZ0ICsgaW1nUGFkZGluZy5yaWdodDtcbiAgICAgIGhlaWdodCA9IHRoaXMuaW1hZ2VPYmouaGVpZ2h0ICsgaW1nUGFkZGluZy50b3AgKyBpbWdQYWRkaW5nLmJvdHRvbTtcbiAgICB9XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3UmF3Q2lyY2xlKGN0eCwgeCwgeSwgdmFsdWVzKSB7XG4gICAgdGhpcy5pbml0Q29udGV4dEZvckRyYXcoY3R4LCB2YWx1ZXMpO1xuICAgIGRyYXdDaXJjbGUoY3R4LCB4LCB5LCB2YWx1ZXMuc2l6ZSk7XG4gICAgdGhpcy5wZXJmb3JtRmlsbChjdHgsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd0ltYWdlQXRQb3NpdGlvbihjdHgsIHZhbHVlcykge1xuICAgIGlmICh0aGlzLmltYWdlT2JqLndpZHRoICE9IDApIHtcbiAgICAgIC8vIGRyYXcgdGhlIGltYWdlXG4gICAgICBjdHguZ2xvYmFsQWxwaGEgPSB2YWx1ZXMub3BhY2l0eSAhPT0gdW5kZWZpbmVkID8gdmFsdWVzLm9wYWNpdHkgOiAxO1xuXG4gICAgICAvLyBkcmF3IHNoYWRvdyBpZiBlbmFibGVkXG4gICAgICB0aGlzLmVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG5cbiAgICAgIGxldCBmYWN0b3IgPSAxO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuaW50ZXJwb2xhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICBmYWN0b3IgPSB0aGlzLmltYWdlT2JqLndpZHRoIC8gdGhpcy53aWR0aCAvIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbWdQYWRkaW5nID0gdGhpcy5fZ2V0SW1hZ2VQYWRkaW5nKCk7XG5cbiAgICAgIGNvbnN0IGltZ1Bvc0xlZnQgPSB0aGlzLmxlZnQgKyBpbWdQYWRkaW5nLmxlZnQ7XG4gICAgICBjb25zdCBpbWdQb3NUb3AgPSB0aGlzLnRvcCArIGltZ1BhZGRpbmcudG9wO1xuICAgICAgY29uc3QgaW1nV2lkdGggPSB0aGlzLndpZHRoIC0gaW1nUGFkZGluZy5sZWZ0IC0gaW1nUGFkZGluZy5yaWdodDtcbiAgICAgIGNvbnN0IGltZ0hlaWdodCA9IHRoaXMuaGVpZ2h0IC0gaW1nUGFkZGluZy50b3AgLSBpbWdQYWRkaW5nLmJvdHRvbTtcbiAgICAgIHRoaXMuaW1hZ2VPYmouZHJhd0ltYWdlQXRQb3NpdGlvbihcbiAgICAgICAgY3R4LFxuICAgICAgICBmYWN0b3IsXG4gICAgICAgIGltZ1Bvc0xlZnQsXG4gICAgICAgIGltZ1Bvc1RvcCxcbiAgICAgICAgaW1nV2lkdGgsXG4gICAgICAgIGltZ0hlaWdodFxuICAgICAgKTtcblxuICAgICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdJbWFnZUxhYmVsKGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgbGV0IG9mZnNldCA9IDA7XG5cbiAgICBpZiAodGhpcy5oZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2Zmc2V0ID0gdGhpcy5oZWlnaHQgKiAwLjU7XG4gICAgICBjb25zdCBsYWJlbERpbWVuc2lvbnMgPSB0aGlzLmxhYmVsTW9kdWxlLmdldFRleHRTaXplKFxuICAgICAgICBjdHgsXG4gICAgICAgIHNlbGVjdGVkLFxuICAgICAgICBob3ZlclxuICAgICAgKTtcbiAgICAgIGlmIChsYWJlbERpbWVuc2lvbnMubGluZUNvdW50ID49IDEpIHtcbiAgICAgICAgb2Zmc2V0ICs9IGxhYmVsRGltZW5zaW9ucy5oZWlnaHQgLyAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHlMYWJlbCA9IHkgKyBvZmZzZXQ7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsKSB7XG4gICAgICB0aGlzLmxhYmVsT2Zmc2V0ID0gb2Zmc2V0O1xuICAgIH1cbiAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoY3R4LCB4LCB5TGFiZWwsIHNlbGVjdGVkLCBob3ZlciwgXCJoYW5naW5nXCIpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENpcmNsZUltYWdlQmFzZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IENpcmNsZUltYWdlQmFzZSBmcm9tIFwiLi4vdXRpbC9DaXJjbGVJbWFnZUJhc2VcIjtcblxuLyoqXG4gKiBBIENpcmNsZSBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIENpcmNsZUltYWdlQmFzZVxuICovXG5jbGFzcyBDaXJjbGUgZXh0ZW5kcyBDaXJjbGVJbWFnZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICAgIHRoaXMuX3NldE1hcmdpbnMobGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2VsZWN0ZWRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hvdmVyXVxuICAgKi9cbiAgcmVzaXplKGN0eCwgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkLCBob3ZlciA9IHRoaXMuaG92ZXIpIHtcbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgY29uc3QgZGltZW5zaW9ucyA9IHRoaXMuZ2V0RGltZW5zaW9uc0Zyb21MYWJlbChjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG5cbiAgICAgIGNvbnN0IGRpYW1ldGVyID0gTWF0aC5tYXgoXG4gICAgICAgIGRpbWVuc2lvbnMud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQsXG4gICAgICAgIGRpbWVuc2lvbnMuaGVpZ2h0ICsgdGhpcy5tYXJnaW4udG9wICsgdGhpcy5tYXJnaW4uYm90dG9tXG4gICAgICApO1xuXG4gICAgICB0aGlzLm9wdGlvbnMuc2l6ZSA9IGRpYW1ldGVyIC8gMjsgLy8gTk9URTogdGhpcyBzaXplIGZpZWxkIG9ubHkgc2V0IGhlcmUsIG5vdCBpbiBFbGxpcHNlLCBEYXRhYmFzZSwgQm94XG4gICAgICB0aGlzLndpZHRoID0gZGlhbWV0ZXI7XG4gICAgICB0aGlzLmhlaWdodCA9IGRpYW1ldGVyO1xuICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLndpZHRoIC8gMjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgdGhpcy5fZHJhd1Jhd0NpcmNsZShjdHgsIHgsIHksIHZhbHVlcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpO1xuICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhcbiAgICAgIGN0eCxcbiAgICAgIHRoaXMubGVmdCArIHRoaXMudGV4dFNpemUud2lkdGggLyAyICsgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgIHksXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICovXG4gIHVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpIHtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHkgLSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSB4IC0gdGhpcy5vcHRpb25zLnNpemU7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IHggKyB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IHkgKyB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCkge1xuICAgIGlmIChjdHgpIHtcbiAgICAgIHRoaXMucmVzaXplKGN0eCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLndpZHRoICogMC41O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENpcmNsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IENpcmNsZUltYWdlQmFzZSBmcm9tIFwiLi4vdXRpbC9DaXJjbGVJbWFnZUJhc2VcIjtcblxuLyoqXG4gKiBBIENpcmN1bGFySW1hZ2UgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBDaXJjbGVJbWFnZUJhc2VcbiAqL1xuY2xhc3MgQ2lyY3VsYXJJbWFnZSBleHRlbmRzIENpcmNsZUltYWdlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKiBAcGFyYW0ge0ltYWdlfSBpbWFnZU9ialxuICAgKiBAcGFyYW0ge0ltYWdlfSBpbWFnZU9iakFsdFxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUsIGltYWdlT2JqLCBpbWFnZU9iakFsdCkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcblxuICAgIHRoaXMuc2V0SW1hZ2VzKGltYWdlT2JqLCBpbWFnZU9iakFsdCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsIGhvdmVyID0gdGhpcy5ob3Zlcikge1xuICAgIGNvbnN0IGltYWdlQWJzZW50ID1cbiAgICAgIHRoaXMuaW1hZ2VPYmouc3JjID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuaW1hZ2VPYmoud2lkdGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5pbWFnZU9iai5oZWlnaHQgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpbWFnZUFic2VudCkge1xuICAgICAgY29uc3QgZGlhbWV0ZXIgPSB0aGlzLm9wdGlvbnMuc2l6ZSAqIDI7XG4gICAgICB0aGlzLndpZHRoID0gZGlhbWV0ZXI7XG4gICAgICB0aGlzLmhlaWdodCA9IGRpYW1ldGVyO1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIGFuIGltYWdlIGlzIHByZXNlbnQsIGkuZS4gdGhpcy5pbWFnZU9iaiBpcyB2YWxpZC5cbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy5fcmVzaXplSW1hZ2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMuc3dpdGNoSW1hZ2VzKHNlbGVjdGVkKTtcbiAgICB0aGlzLnJlc2l6ZSgpO1xuXG4gICAgbGV0IGxhYmVsWCA9IHgsXG4gICAgICBsYWJlbFkgPSB5O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuY29vcmRpbmF0ZU9yaWdpbiA9PT0gXCJ0b3AtbGVmdFwiKSB7XG4gICAgICB0aGlzLmxlZnQgPSB4O1xuICAgICAgdGhpcy50b3AgPSB5O1xuICAgICAgbGFiZWxYICs9IHRoaXMud2lkdGggLyAyO1xuICAgICAgbGFiZWxZICs9IHRoaXMuaGVpZ2h0IC8gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuICAgIH1cblxuICAgIC8vIGRyYXcgdGhlIGJhY2tncm91bmQgY2lyY2xlLiBJTVBPUlRBTlQ6IHRoZSBzdHJva2UgaW4gdGhpcyBtZXRob2QgaXMgdXNlZCBieSB0aGUgY2xpcCBtZXRob2QgYmVsb3cuXG4gICAgdGhpcy5fZHJhd1Jhd0NpcmNsZShjdHgsIGxhYmVsWCwgbGFiZWxZLCB2YWx1ZXMpO1xuXG4gICAgLy8gbm93IHdlIGRyYXcgaW4gdGhlIGNpcmNsZSwgd2Ugc2F2ZSBzbyB3ZSBjYW4gcmV2ZXJ0IHRoZSBjbGlwIG9wZXJhdGlvbiBhZnRlciBkcmF3aW5nLlxuICAgIGN0eC5zYXZlKCk7XG4gICAgLy8gY2xpcCBpcyB1c2VkIHRvIHVzZSB0aGUgc3Ryb2tlIGluIGRyYXdSYXdDaXJjbGUgYXMgYW4gYXJlYSB0aGF0IHdlIGNhbiBkcmF3IGluLlxuICAgIGN0eC5jbGlwKCk7XG4gICAgLy8gZHJhdyB0aGUgaW1hZ2VcbiAgICB0aGlzLl9kcmF3SW1hZ2VBdFBvc2l0aW9uKGN0eCwgdmFsdWVzKTtcbiAgICAvLyByZXN0b3JlIHNvIHdlIGNhbiBhZ2FpbiBkcmF3IG9uIHRoZSBmdWxsIGNhbnZhc1xuICAgIGN0eC5yZXN0b3JlKCk7XG5cbiAgICB0aGlzLl9kcmF3SW1hZ2VMYWJlbChjdHgsIGxhYmVsWCwgbGFiZWxZLCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5KTtcbiAgfVxuXG4gIC8vIFRPRE86IGNvbXBhcmUgd2l0aCBDaXJjbGUudXBkYXRlQm91bmRpbmdCb3goKSwgY29uc29saWRhdGU/IE1vcmUgc3R1ZmYgaXMgaGFwcGVuaW5nIGhlcmVcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW4gPT09IFwidG9wLWxlZnRcIikge1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC50b3AgPSB5O1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0geDtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB4ICsgdGhpcy5vcHRpb25zLnNpemUgKiAyO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSB5ICsgdGhpcy5vcHRpb25zLnNpemUgKiAyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHkgLSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHggLSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB4ICsgdGhpcy5vcHRpb25zLnNpemU7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IHkgKyB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBjb21wYXJlIHdpdGggSW1hZ2UudXBkYXRlQm91bmRpbmdCb3goKSwgY29uc29saWRhdGU/XG4gICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0gTWF0aC5taW4oXG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQsXG4gICAgICB0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdFxuICAgICk7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IE1hdGgubWF4KFxuICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCxcbiAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0ICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoXG4gICAgKTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IE1hdGgubWF4KFxuICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20sXG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSArIHRoaXMubGFiZWxPZmZzZXRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4KSB7XG4gICAgaWYgKGN0eCkge1xuICAgICAgdGhpcy5yZXNpemUoY3R4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud2lkdGggKiAwLjU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2lyY3VsYXJJbWFnZTtcbiIsICJpbXBvcnQgTm9kZUJhc2UgZnJvbSBcIi4uL3V0aWwvTm9kZUJhc2VcIjtcbmltcG9ydCB7IGdldFNoYXBlIH0gZnJvbSBcIi4vc2hhcGVzXCI7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgY29uc3RydWN0aW5nIE5vZGUvQ2x1c3RlciBTaGFwZXMuXG4gKlxuICogQGF1Z21lbnRzIE5vZGVCYXNlXG4gKi9cbmNsYXNzIFNoYXBlQmFzZSBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbGVjdGVkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3Zlcl1cbiAgICogQHBhcmFtIHtvYmplY3R9IFt2YWx1ZXM9e3NpemU6IHRoaXMub3B0aW9ucy5zaXplfV1cbiAgICovXG4gIHJlc2l6ZShcbiAgICBjdHgsXG4gICAgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkLFxuICAgIGhvdmVyID0gdGhpcy5ob3ZlcixcbiAgICB2YWx1ZXMgPSB7IHNpemU6IHRoaXMub3B0aW9ucy5zaXplIH1cbiAgKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIHRoaXMubGFiZWxNb2R1bGUuZ2V0VGV4dFNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgICAgY29uc3Qgc2l6ZSA9IDIgKiB2YWx1ZXMuc2l6ZTtcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLmN1c3RvbVNpemVXaWR0aCA/PyBzaXplO1xuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmN1c3RvbVNpemVIZWlnaHQgPz8gc2l6ZTtcbiAgICAgIHRoaXMucmFkaXVzID0gMC41ICogdGhpcy53aWR0aDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2hhcGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVNdWx0aXBsaWVyIC0gVW51c2VkISBUT0RPOiBSZW1vdmUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGhpZ2hlciBsYXllcnMuXG4gICAqL1xuICBfZHJhd1NoYXBlKGN0eCwgc2hhcGUsIHNpemVNdWx0aXBsaWVyLCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICB0aGlzLmluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcyk7XG4gICAgZ2V0U2hhcGUoc2hhcGUpKGN0eCwgeCwgeSwgdmFsdWVzLnNpemUpO1xuICAgIHRoaXMucGVyZm9ybUZpbGwoY3R4LCB2YWx1ZXMpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pY29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWNvbi5jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3R4LmZvbnQgPVxuICAgICAgICAgIChzZWxlY3RlZCA/IFwiYm9sZCBcIiA6IFwiXCIpICtcbiAgICAgICAgICB0aGlzLmhlaWdodCAvIDIgK1xuICAgICAgICAgIFwicHggXCIgK1xuICAgICAgICAgICh0aGlzLm9wdGlvbnMuaWNvbi5mYWNlIHx8IFwiRm9udEF3ZXNvbWVcIik7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLm9wdGlvbnMuaWNvbi5jb2xvciB8fCBcImJsYWNrXCI7XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSBcImNlbnRlclwiO1xuICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcbiAgICAgICAgY3R4LmZpbGxUZXh0KHRoaXMub3B0aW9ucy5pY29uLmNvZGUsIHgsIHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkcmF3RXh0ZXJuYWxMYWJlbDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgZm9sbG93aW5nIGhlcmUgaW4gb3JkZXIgdG8gZW5zdXJlIHZhbHVlIGZvclxuICAgICAgICAgIC8vIGB0aGlzLmxhYmVsTW9kdWxlLnNpemUuaGVpZ2h0YC5cbiAgICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLmNhbGN1bGF0ZUxhYmVsU2l6ZShcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgaG92ZXIsXG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgeSxcbiAgICAgICAgICAgIFwiaGFuZ2luZ1wiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB5TGFiZWwgPVxuICAgICAgICAgICAgeSArIDAuNSAqIHRoaXMuaGVpZ2h0ICsgMC41ICogdGhpcy5sYWJlbE1vZHVsZS5zaXplLmhlaWdodDtcbiAgICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoY3R4LCB4LCB5TGFiZWwsIHNlbGVjdGVkLCBob3ZlciwgXCJoYW5naW5nXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSkge1xuICAgIHRoaXMuYm91bmRpbmdCb3gudG9wID0geSAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHggLSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0geCArIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0geSArIHRoaXMub3B0aW9ucy5zaXplO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS53aWR0aCA+IDApIHtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IE1hdGgubWluKFxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQsXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0XG4gICAgICApO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IE1hdGgubWF4KFxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0LFxuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdCArIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS53aWR0aFxuICAgICAgKTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0gTWF0aC5tYXgoXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tLFxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSArIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5oZWlnaHRcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNoYXBlQmFzZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNoYXBlQmFzZSBmcm9tIFwiLi4vdXRpbC9TaGFwZUJhc2VcIjtcblxuLyoqXG4gKiBBIEN1c3RvbVNoYXBlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIEN1c3RvbVNoYXBlIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGN0eFJlbmRlcmVyXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSwgY3R4UmVuZGVyZXIpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSwgY3R4UmVuZGVyZXIpO1xuICAgIHRoaXMuY3R4UmVuZGVyZXIgPSBjdHhSZW5kZXJlcjtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBkaWZmZXJlbnQgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcblxuICAgIC8vIEd1YXJkIHJpZ2h0IGF3YXkgYmVjYXVzZSBzb21lb25lIG1heSBqdXN0IGRyYXcgaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi5cbiAgICBjdHguc2F2ZSgpO1xuICAgIGNvbnN0IGRyYXdMYXRlciA9IHRoaXMuY3R4UmVuZGVyZXIoe1xuICAgICAgY3R4LFxuICAgICAgaWQ6IHRoaXMub3B0aW9ucy5pZCxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgc3RhdGU6IHsgc2VsZWN0ZWQsIGhvdmVyIH0sXG4gICAgICBzdHlsZTogeyAuLi52YWx1ZXMgfSxcbiAgICAgIGxhYmVsOiB0aGlzLm9wdGlvbnMubGFiZWwsXG4gICAgfSk7XG4gICAgLy8gUmVuZGVyIHRoZSBub2RlIHNoYXBlIGJlbGxvdyBhcnJvd3MuXG4gICAgaWYgKGRyYXdMYXRlci5kcmF3Tm9kZSAhPSBudWxsKSB7XG4gICAgICBkcmF3TGF0ZXIuZHJhd05vZGUoKTtcbiAgICB9XG4gICAgY3R4LnJlc3RvcmUoKTtcblxuICAgIGlmIChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwpIHtcbiAgICAgIC8vIEd1YXJkIHRoZSBleHRlcm5hbCBsYWJlbCAoYWJvdmUgYXJyb3dzKSBkcmF3aW5nIGZ1bmN0aW9uLlxuICAgICAgY29uc3QgZHJhd0V4dGVybmFsTGFiZWwgPSBkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWw7XG4gICAgICBkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwgPSAoKSA9PiB7XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGRyYXdFeHRlcm5hbExhYmVsKCk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChkcmF3TGF0ZXIubm9kZURpbWVuc2lvbnMpIHtcbiAgICAgIHRoaXMuY3VzdG9tU2l6ZVdpZHRoID0gZHJhd0xhdGVyLm5vZGVEaW1lbnNpb25zLndpZHRoO1xuICAgICAgdGhpcy5jdXN0b21TaXplSGVpZ2h0ID0gZHJhd0xhdGVyLm5vZGVEaW1lbnNpb25zLmhlaWdodDtcbiAgICB9XG5cbiAgICByZXR1cm4gZHJhd0xhdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDdXN0b21TaGFwZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vZGVCYXNlIGZyb20gXCIuLi91dGlsL05vZGVCYXNlXCI7XG5pbXBvcnQgeyBkcmF3RGF0YWJhc2UgfSBmcm9tIFwiLi4vdXRpbC9zaGFwZXNcIjtcblxuLyoqXG4gKiBBIERhdGFiYXNlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgRGF0YWJhc2UgZXh0ZW5kcyBOb2RlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gICAgdGhpcy5fc2V0TWFyZ2lucyhsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICovXG4gIHJlc2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcikge1xuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5nZXREaW1lbnNpb25zRnJvbUxhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICAgIGNvbnN0IHNpemUgPSBkaW1lbnNpb25zLndpZHRoICsgdGhpcy5tYXJnaW4ucmlnaHQgKyB0aGlzLm1hcmdpbi5sZWZ0O1xuXG4gICAgICB0aGlzLndpZHRoID0gc2l6ZTtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gc2l6ZTtcbiAgICAgIHRoaXMucmFkaXVzID0gdGhpcy53aWR0aCAvIDI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICB0aGlzLnJlc2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcblxuICAgIHRoaXMuaW5pdENvbnRleHRGb3JEcmF3KGN0eCwgdmFsdWVzKTtcbiAgICBkcmF3RGF0YWJhc2UoXG4gICAgICBjdHgsXG4gICAgICB4IC0gdGhpcy53aWR0aCAvIDIsXG4gICAgICB5IC0gdGhpcy5oZWlnaHQgLyAyLFxuICAgICAgdGhpcy53aWR0aCxcbiAgICAgIHRoaXMuaGVpZ2h0XG4gICAgKTtcbiAgICB0aGlzLnBlcmZvcm1GaWxsKGN0eCwgdmFsdWVzKTtcblxuICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goeCwgeSwgY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhcbiAgICAgIGN0eCxcbiAgICAgIHRoaXMubGVmdCArIHRoaXMudGV4dFNpemUud2lkdGggLyAyICsgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgIHRoaXMudG9wICsgdGhpcy50ZXh0U2l6ZS5oZWlnaHQgLyAyICsgdGhpcy5tYXJnaW4udG9wLFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBob3ZlclxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRhYmFzZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNoYXBlQmFzZSBmcm9tIFwiLi4vdXRpbC9TaGFwZUJhc2VcIjtcblxuLyoqXG4gKiBBIERpYW1vbmQgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgRGlhbW9uZCBleHRlbmRzIFNoYXBlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHJldHVybiB0aGlzLl9kcmF3U2hhcGUoY3R4LCBcImRpYW1vbmRcIiwgNCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEaWFtb25kO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgRG90IE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIERvdCBleHRlbmRzIFNoYXBlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHJldHVybiB0aGlzLl9kcmF3U2hhcGUoY3R4LCBcImNpcmNsZVwiLCAyLCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgpIHtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNpemU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRG90O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9kZUJhc2UgZnJvbSBcIi4uL3V0aWwvTm9kZUJhc2VcIjtcbmltcG9ydCB7IGRyYXdFbGxpcHNlIH0gZnJvbSBcIi4uL3V0aWwvc2hhcGVzXCI7XG5cbi8qKlxuICogQW0gRWxsaXBzZSBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIE5vZGVCYXNlXG4gKi9cbmNsYXNzIEVsbGlwc2UgZXh0ZW5kcyBOb2RlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsIGhvdmVyID0gdGhpcy5ob3Zlcikge1xuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5nZXREaW1lbnNpb25zRnJvbUxhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcblxuICAgICAgdGhpcy5oZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdodCAqIDI7XG4gICAgICB0aGlzLndpZHRoID0gZGltZW5zaW9ucy53aWR0aCArIGRpbWVuc2lvbnMuaGVpZ2h0O1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoICogMC41O1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0ICogMC41O1xuXG4gICAgdGhpcy5pbml0Q29udGV4dEZvckRyYXcoY3R4LCB2YWx1ZXMpO1xuICAgIGRyYXdFbGxpcHNlKGN0eCwgdGhpcy5sZWZ0LCB0aGlzLnRvcCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIHRoaXMucGVyZm9ybUZpbGwoY3R4LCB2YWx1ZXMpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgaWYgKGN0eCkge1xuICAgICAgdGhpcy5yZXNpemUoY3R4KTtcbiAgICB9XG4gICAgY29uc3QgYSA9IHRoaXMud2lkdGggKiAwLjU7XG4gICAgY29uc3QgYiA9IHRoaXMuaGVpZ2h0ICogMC41O1xuICAgIGNvbnN0IHcgPSBNYXRoLnNpbihhbmdsZSkgKiBhO1xuICAgIGNvbnN0IGggPSBNYXRoLmNvcyhhbmdsZSkgKiBiO1xuICAgIHJldHVybiAoYSAqIGIpIC8gTWF0aC5zcXJ0KHcgKiB3ICsgaCAqIGgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVsbGlwc2U7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi4vdXRpbC9Ob2RlQmFzZVwiO1xuXG4vKipcbiAqIEFuIGljb24gcmVwbGFjZW1lbnQgZm9yIHRoZSBkZWZhdWx0IE5vZGUgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIE5vZGVCYXNlXG4gKi9cbmNsYXNzIEljb24gZXh0ZW5kcyBOb2RlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gICAgdGhpcy5fc2V0TWFyZ2lucyhsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFVudXNlZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc2VsZWN0ZWRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hvdmVyXVxuICAgKi9cbiAgcmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIHRoaXMuaWNvblNpemUgPSB7XG4gICAgICAgIHdpZHRoOiBOdW1iZXIodGhpcy5vcHRpb25zLmljb24uc2l6ZSksXG4gICAgICAgIGhlaWdodDogTnVtYmVyKHRoaXMub3B0aW9ucy5pY29uLnNpemUpLFxuICAgICAgfTtcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLmljb25TaXplLndpZHRoICsgdGhpcy5tYXJnaW4ucmlnaHQgKyB0aGlzLm1hcmdpbi5sZWZ0O1xuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmljb25TaXplLmhlaWdodCArIHRoaXMubWFyZ2luLnRvcCArIHRoaXMubWFyZ2luLmJvdHRvbTtcbiAgICAgIHRoaXMucmFkaXVzID0gMC41ICogdGhpcy53aWR0aDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLm9wdGlvbnMuaWNvbi5zaXplID0gdGhpcy5vcHRpb25zLmljb24uc2l6ZSB8fCA1MDtcblxuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG4gICAgdGhpcy5faWNvbihjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkcmF3RXh0ZXJuYWxMYWJlbDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBpY29uVGV4dFNwYWNpbmcgPSA1O1xuICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIHRoaXMubGVmdCArIHRoaXMuaWNvblNpemUud2lkdGggLyAyICsgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgICAgICAgIHkgKyB0aGlzLmhlaWdodCAvIDIgKyBpY29uVGV4dFNwYWNpbmcsXG4gICAgICAgICAgICBzZWxlY3RlZFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5KSB7XG4gICAgdGhpcy5ib3VuZGluZ0JveC50b3AgPSB5IC0gdGhpcy5vcHRpb25zLmljb24uc2l6ZSAqIDAuNTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSB4IC0gdGhpcy5vcHRpb25zLmljb24uc2l6ZSAqIDAuNTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0geCArIHRoaXMub3B0aW9ucy5pY29uLnNpemUgKiAwLjU7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSB5ICsgdGhpcy5vcHRpb25zLmljb24uc2l6ZSAqIDAuNTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGggPiAwKSB7XG4gICAgICBjb25zdCBpY29uVGV4dFNwYWNpbmcgPSA1O1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0gTWF0aC5taW4oXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnRcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQsXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0ICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoXG4gICAgICApO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20sXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmhlaWdodCArIGljb25UZXh0U3BhY2luZ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyIC0gVW51c2VkXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIF9pY29uKGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICBjb25zdCBpY29uU2l6ZSA9IE51bWJlcih0aGlzLm9wdGlvbnMuaWNvbi5zaXplKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaWNvbi5jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGN0eC5mb250ID0gW1xuICAgICAgICB0aGlzLm9wdGlvbnMuaWNvbi53ZWlnaHQgIT0gbnVsbFxuICAgICAgICAgID8gdGhpcy5vcHRpb25zLmljb24ud2VpZ2h0XG4gICAgICAgICAgOiBzZWxlY3RlZFxuICAgICAgICAgID8gXCJib2xkXCJcbiAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIC8vIElmIHRoZSB3ZWlnaHQgaXMgZm9yY2VkIChmb3IgZXhhbXBsZSB0byBtYWtlIEZvbnQgQXdlc29tZSA1IHdvcmtcbiAgICAgICAgLy8gcHJvcGVybHkpIHN1YnN0aXR1dGUgc2xpZ2h0bHkgYmlnZ2VyIHNpemUgZm9yIGJvbGQgZm9udCBmYWNlLlxuICAgICAgICAodGhpcy5vcHRpb25zLmljb24ud2VpZ2h0ICE9IG51bGwgJiYgc2VsZWN0ZWQgPyA1IDogMCkgK1xuICAgICAgICAgIGljb25TaXplICtcbiAgICAgICAgICBcInB4XCIsXG4gICAgICAgIHRoaXMub3B0aW9ucy5pY29uLmZhY2UsXG4gICAgICBdLmpvaW4oXCIgXCIpO1xuXG4gICAgICAvLyBkcmF3IGljb25cbiAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLm9wdGlvbnMuaWNvbi5jb2xvciB8fCBcImJsYWNrXCI7XG4gICAgICBjdHgudGV4dEFsaWduID0gXCJjZW50ZXJcIjtcbiAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuXG4gICAgICAvLyBkcmF3IHNoYWRvdyBpZiBlbmFibGVkXG4gICAgICB0aGlzLmVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgICBjdHguZmlsbFRleHQodGhpcy5vcHRpb25zLmljb24uY29kZSwgeCwgeSk7XG5cbiAgICAgIC8vIGRpc2FibGUgc2hhZG93cyBmb3Igb3RoZXIgZWxlbWVudHMuXG4gICAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIldoZW4gdXNpbmcgdGhlIGljb24gc2hhcGUsIHlvdSBuZWVkIHRvIGRlZmluZSB0aGUgY29kZSBpbiB0aGUgaWNvbiBvcHRpb25zIG9iamVjdC4gVGhpcyBjYW4gYmUgZG9uZSBwZXIgbm9kZSBvciBnbG9iYWxseS5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb247XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBDaXJjbGVJbWFnZUJhc2UgZnJvbSBcIi4uL3V0aWwvQ2lyY2xlSW1hZ2VCYXNlXCI7XG5pbXBvcnQgeyBvdmVycmlkZU9wYWNpdHkgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogQW4gaW1hZ2UtYmFzZWQgcmVwbGFjZW1lbnQgZm9yIHRoZSBkZWZhdWx0IE5vZGUgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIENpcmNsZUltYWdlQmFzZVxuICovXG5jbGFzcyBJbWFnZSBleHRlbmRzIENpcmNsZUltYWdlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKiBAcGFyYW0ge0ltYWdlfSBpbWFnZU9ialxuICAgKiBAcGFyYW0ge0ltYWdlfSBpbWFnZU9iakFsdFxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUsIGltYWdlT2JqLCBpbWFnZU9iakFsdCkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcblxuICAgIHRoaXMuc2V0SW1hZ2VzKGltYWdlT2JqLCBpbWFnZU9iakFsdCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAtIFVudXNlZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc2VsZWN0ZWRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hvdmVyXVxuICAgKi9cbiAgcmVzaXplKGN0eCwgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkLCBob3ZlciA9IHRoaXMuaG92ZXIpIHtcbiAgICBjb25zdCBpbWFnZUFic2VudCA9XG4gICAgICB0aGlzLmltYWdlT2JqLnNyYyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLmltYWdlT2JqLndpZHRoID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuaW1hZ2VPYmouaGVpZ2h0ID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaW1hZ2VBYnNlbnQpIHtcbiAgICAgIGNvbnN0IHNpZGUgPSB0aGlzLm9wdGlvbnMuc2l6ZSAqIDI7XG4gICAgICB0aGlzLndpZHRoID0gc2lkZTtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gc2lkZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy5fcmVzaXplSW1hZ2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIGN0eC5zYXZlKCk7XG4gICAgdGhpcy5zd2l0Y2hJbWFnZXMoc2VsZWN0ZWQpO1xuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICBsZXQgbGFiZWxYID0geCxcbiAgICAgIGxhYmVsWSA9IHk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5jb29yZGluYXRlT3JpZ2luID09PSBcInRvcC1sZWZ0XCIpIHtcbiAgICAgIHRoaXMubGVmdCA9IHg7XG4gICAgICB0aGlzLnRvcCA9IHk7XG4gICAgICBsYWJlbFggKz0gdGhpcy53aWR0aCAvIDI7XG4gICAgICBsYWJlbFkgKz0gdGhpcy5oZWlnaHQgLyAyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMudXNlQm9yZGVyV2l0aEltYWdlID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBuZXV0cmFsYm9yZGVyV2lkdGggPSB0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGg7XG4gICAgICBjb25zdCBzZWxlY3Rpb25MaW5lV2lkdGggPVxuICAgICAgICB0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGhTZWxlY3RlZCB8fCAyICogdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoO1xuICAgICAgY29uc3QgYm9yZGVyV2lkdGggPVxuICAgICAgICAoc2VsZWN0ZWQgPyBzZWxlY3Rpb25MaW5lV2lkdGggOiBuZXV0cmFsYm9yZGVyV2lkdGgpIC9cbiAgICAgICAgdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgICBjdHgubGluZVdpZHRoID0gTWF0aC5taW4odGhpcy53aWR0aCwgYm9yZGVyV2lkdGgpO1xuXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBsZXQgc3Ryb2tlU3R5bGUgPSBzZWxlY3RlZFxuICAgICAgICA/IHRoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyXG4gICAgICAgIDogaG92ZXJcbiAgICAgICAgPyB0aGlzLm9wdGlvbnMuY29sb3IuaG92ZXIuYm9yZGVyXG4gICAgICAgIDogdGhpcy5vcHRpb25zLmNvbG9yLmJvcmRlcjtcbiAgICAgIGxldCBmaWxsU3R5bGUgPSBzZWxlY3RlZFxuICAgICAgICA/IHRoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZFxuICAgICAgICA6IGhvdmVyXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyLmJhY2tncm91bmRcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuY29sb3IuYmFja2dyb3VuZDtcblxuICAgICAgaWYgKHZhbHVlcy5vcGFjaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3Ryb2tlU3R5bGUgPSBvdmVycmlkZU9wYWNpdHkoc3Ryb2tlU3R5bGUsIHZhbHVlcy5vcGFjaXR5KTtcbiAgICAgICAgZmlsbFN0eWxlID0gb3ZlcnJpZGVPcGFjaXR5KGZpbGxTdHlsZSwgdmFsdWVzLm9wYWNpdHkpO1xuICAgICAgfVxuICAgICAgLy8gc2V0dXAgdGhlIGxpbmUgcHJvcGVydGllcy5cbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZVN0eWxlO1xuXG4gICAgICAvLyBzZXQgYSBmaWxsc3R5bGVcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBmaWxsU3R5bGU7XG5cbiAgICAgIC8vIGRyYXcgYSByZWN0YW5nbGUgdG8gZm9ybSB0aGUgYm9yZGVyIGFyb3VuZC4gVGhpcyByZWN0YW5nbGUgaXMgZmlsbGVkIHNvIHRoZSBvcGFjaXR5IG9mIGEgcGljdHVyZSAoaW4gZnV0dXJlIHZpcyByZWxlYXNlcz8pIGNhbiBiZSB1c2VkIHRvIHRpbnQgdGhlIGltYWdlXG4gICAgICBjdHgucmVjdChcbiAgICAgICAgdGhpcy5sZWZ0IC0gMC41ICogY3R4LmxpbmVXaWR0aCxcbiAgICAgICAgdGhpcy50b3AgLSAwLjUgKiBjdHgubGluZVdpZHRoLFxuICAgICAgICB0aGlzLndpZHRoICsgY3R4LmxpbmVXaWR0aCxcbiAgICAgICAgdGhpcy5oZWlnaHQgKyBjdHgubGluZVdpZHRoXG4gICAgICApO1xuICAgICAgY3R4LmZpbGwoKTtcblxuICAgICAgdGhpcy5wZXJmb3JtU3Ryb2tlKGN0eCwgdmFsdWVzKTtcblxuICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgIH1cblxuICAgIHRoaXMuX2RyYXdJbWFnZUF0UG9zaXRpb24oY3R4LCB2YWx1ZXMpO1xuXG4gICAgdGhpcy5fZHJhd0ltYWdlTGFiZWwoY3R4LCBsYWJlbFgsIGxhYmVsWSwgc2VsZWN0ZWQsIGhvdmVyKTtcblxuICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goeCwgeSk7XG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSkge1xuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5jb29yZGluYXRlT3JpZ2luID09PSBcInRvcC1sZWZ0XCIpIHtcbiAgICAgIHRoaXMubGVmdCA9IHg7XG4gICAgICB0aGlzLnRvcCA9IHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcbiAgICB9XG5cbiAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSB0aGlzLmxlZnQ7XG4gICAgdGhpcy5ib3VuZGluZ0JveC50b3AgPSB0aGlzLnRvcDtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IHRoaXMudG9wICsgdGhpcy5oZWlnaHQ7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IHRoaXMubGVmdCArIHRoaXMud2lkdGg7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoID4gMCkge1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0gTWF0aC5taW4oXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnRcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQsXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0ICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoXG4gICAgICApO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20sXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICsgdGhpcy5sYWJlbE9mZnNldFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgU3F1YXJlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIFNxdWFyZSBleHRlbmRzIFNoYXBlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHJldHVybiB0aGlzLl9kcmF3U2hhcGUoY3R4LCBcInNxdWFyZVwiLCAyLCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNxdWFyZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNoYXBlQmFzZSBmcm9tIFwiLi4vdXRpbC9TaGFwZUJhc2VcIjtcblxuLyoqXG4gKiBBIEhleGFnb24gTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgSGV4YWdvbiBleHRlbmRzIFNoYXBlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHJldHVybiB0aGlzLl9kcmF3U2hhcGUoY3R4LCBcImhleGFnb25cIiwgNCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIZXhhZ29uO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgU3RhciBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIFNoYXBlQmFzZVxuICovXG5jbGFzcyBTdGFyIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwic3RhclwiLCA0LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0YXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi4vdXRpbC9Ob2RlQmFzZVwiO1xuXG4vKipcbiAqIEEgdGV4dC1iYXNlZCByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgTm9kZSBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgVGV4dCBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgICB0aGlzLl9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKi9cbiAgcmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIHRoaXMudGV4dFNpemUgPSB0aGlzLmxhYmVsTW9kdWxlLmdldFRleHRTaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRleHRTaXplLndpZHRoICsgdGhpcy5tYXJnaW4ucmlnaHQgKyB0aGlzLm1hcmdpbi5sZWZ0O1xuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRleHRTaXplLmhlaWdodCArIHRoaXMubWFyZ2luLnRvcCArIHRoaXMubWFyZ2luLmJvdHRvbTtcbiAgICAgIHRoaXMucmFkaXVzID0gMC41ICogdGhpcy53aWR0aDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoXG4gICAgICBjdHgsXG4gICAgICB0aGlzLmxlZnQgKyB0aGlzLnRleHRTaXplLndpZHRoIC8gMiArIHRoaXMubWFyZ2luLmxlZnQsXG4gICAgICB0aGlzLnRvcCArIHRoaXMudGV4dFNpemUuaGVpZ2h0IC8gMiArIHRoaXMubWFyZ2luLnRvcCxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgaG92ZXJcbiAgICApO1xuXG4gICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRleHQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaGFwZUJhc2UgZnJvbSBcIi4uL3V0aWwvU2hhcGVCYXNlXCI7XG5cbi8qKlxuICogQSBUcmlhbmdsZSBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIFNoYXBlQmFzZVxuICovXG5jbGFzcyBUcmlhbmdsZSBleHRlbmRzIFNoYXBlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwidHJpYW5nbGVcIiwgMywgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUcmlhbmdsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNoYXBlQmFzZSBmcm9tIFwiLi4vdXRpbC9TaGFwZUJhc2VcIjtcblxuLyoqXG4gKiBBIGRvd253YXJkIGZhY2luZyBUcmlhbmdsZSBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIFNoYXBlQmFzZVxuICovXG5jbGFzcyBUcmlhbmdsZURvd24gZXh0ZW5kcyBTaGFwZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHJldHVybiB0aGlzLl9kcmF3U2hhcGUoXG4gICAgICBjdHgsXG4gICAgICBcInRyaWFuZ2xlRG93blwiLFxuICAgICAgMyxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBob3ZlcixcbiAgICAgIHZhbHVlc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyaWFuZ2xlRG93bjtcbiIsICJpbXBvcnQge1xuICBWQUxJREFUT1JfUFJJTlRfU1RZTEUsXG4gIGJyaWRnZU9iamVjdCxcbiAgZmlsbElmRGVmaW5lZCxcbiAgbWVyZ2VPcHRpb25zLFxuICBvdmVycmlkZU9wYWNpdHksXG4gIHBhcnNlQ29sb3IsXG4gIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsXG59IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuaW1wb3J0IExhYmVsIGZyb20gXCIuL3NoYXJlZC9MYWJlbFwiO1xuaW1wb3J0IHsgY2hvb3NpZnksIHBvaW50SW5SZWN0IH0gZnJvbSBcIi4vc2hhcmVkL0NvbXBvbmVudFV0aWxcIjtcbmltcG9ydCBCb3ggZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0JveFwiO1xuaW1wb3J0IENpcmNsZSBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvQ2lyY2xlXCI7XG5pbXBvcnQgQ2lyY3VsYXJJbWFnZSBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvQ2lyY3VsYXJJbWFnZVwiO1xuaW1wb3J0IEN1c3RvbVNoYXBlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9DdXN0b21TaGFwZVwiO1xuaW1wb3J0IERhdGFiYXNlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9EYXRhYmFzZVwiO1xuaW1wb3J0IERpYW1vbmQgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0RpYW1vbmRcIjtcbmltcG9ydCBEb3QgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0RvdFwiO1xuaW1wb3J0IEVsbGlwc2UgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0VsbGlwc2VcIjtcbmltcG9ydCBJY29uIGZyb20gXCIuL25vZGVzL3NoYXBlcy9JY29uXCI7XG5pbXBvcnQgSW1hZ2UgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0ltYWdlXCI7XG5pbXBvcnQgU3F1YXJlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9TcXVhcmVcIjtcbmltcG9ydCBIZXhhZ29uIGZyb20gXCIuL25vZGVzL3NoYXBlcy9IZXhhZ29uXCI7XG5pbXBvcnQgU3RhciBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvU3RhclwiO1xuaW1wb3J0IFRleHQgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL1RleHRcIjtcbmltcG9ydCBUcmlhbmdsZSBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvVHJpYW5nbGVcIjtcbmltcG9ydCBUcmlhbmdsZURvd24gZnJvbSBcIi4vbm9kZXMvc2hhcGVzL1RyaWFuZ2xlRG93blwiO1xuXG4vKipcbiAqIEEgbm9kZS4gQSBub2RlIGNhbiBiZSBjb25uZWN0ZWQgdG8gb3RoZXIgbm9kZXMgdmlhIG9uZSBvciBtdWx0aXBsZSBlZGdlcy5cbiAqL1xuY2xhc3MgTm9kZSB7XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBBbiBvYmplY3QgY29udGFpbmluZyBvcHRpb25zIGZvciB0aGUgbm9kZS4gQWxsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgYXJlIG9wdGlvbmFsLCBleGNlcHQgZm9yIHRoZSBpZC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBpZCAgICAgSWQgb2YgdGhlIG5vZGUuIFJlcXVpcmVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbGFiZWwgIFRleHQgbGFiZWwgZm9yIHRoZSBub2RlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge251bWJlcn0geCAgICAgIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIG5vZGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSB5ICAgICAgVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIG5vZGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBzaGFwZSAgTm9kZSBzaGFwZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IGltYWdlICBBbiBpbWFnZSB1cmxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSB0aXRsZSAgQSB0aXRsZSB0ZXh0LCBjYW4gYmUgSFRNTFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthbnl0eXBlfSBncm91cCBBIGdyb3VwIG5hbWUgb3IgbnVtYmVyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5ICAgICAgICAgICAgICAgU2hhcmVkIHN0YXRlIG9mIGN1cnJlbnQgbmV0d29yayBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge05ldHdvcmsuSW1hZ2VzfSBpbWFnZWxpc3QgIEEgbGlzdCB3aXRoIGltYWdlcy4gT25seSBuZWVkZWQgd2hlbiB0aGUgbm9kZSBoYXMgYW4gaW1hZ2VcbiAgICogQHBhcmFtIHtHcm91cHN9IGdyb3VwbGlzdCAgICAgICAgICBBIGxpc3Qgd2l0aCBncm91cHMuIE5lZWRlZCBmb3IgcmV0cmlldmluZyBncm91cCBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBnbG9iYWxPcHRpb25zICAgICAgQ3VycmVudCBnbG9iYWwgbm9kZSBvcHRpb25zOyB0aGVzZSBzZXJ2ZSBhcyBkZWZhdWx0cyBmb3IgdGhlIG5vZGUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRPcHRpb25zICAgICBHbG9iYWwgZGVmYXVsdCBvcHRpb25zIGZvciBub2Rlczsgbm90ZSB0aGF0IHRoaXMgaXMgYWxzbyB0aGUgcHJvdG90eXBlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBgZ2xvYmFsT3B0aW9uc2AuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zLFxuICAgIGJvZHksXG4gICAgaW1hZ2VsaXN0LFxuICAgIGdyb3VwbGlzdCxcbiAgICBnbG9iYWxPcHRpb25zLFxuICAgIGRlZmF1bHRPcHRpb25zXG4gICkge1xuICAgIHRoaXMub3B0aW9ucyA9IGJyaWRnZU9iamVjdChnbG9iYWxPcHRpb25zKTtcbiAgICB0aGlzLmdsb2JhbE9wdGlvbnMgPSBnbG9iYWxPcHRpb25zO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuXG4gICAgdGhpcy5lZGdlcyA9IFtdOyAvLyBhbGwgZWRnZXMgY29ubmVjdGVkIHRvIHRoaXMgbm9kZVxuXG4gICAgLy8gc2V0IGRlZmF1bHRzIGZvciB0aGUgb3B0aW9uc1xuICAgIHRoaXMuaWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pbWFnZWxpc3QgPSBpbWFnZWxpc3Q7XG4gICAgdGhpcy5ncm91cGxpc3QgPSBncm91cGxpc3Q7XG5cbiAgICAvLyBzdGF0ZSBvcHRpb25zXG4gICAgdGhpcy54ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMueSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmJhc2VTaXplID0gdGhpcy5vcHRpb25zLnNpemU7XG4gICAgdGhpcy5iYXNlRm9udFNpemUgPSB0aGlzLm9wdGlvbnMuZm9udC5zaXplO1xuICAgIHRoaXMucHJlZGVmaW5lZFBvc2l0aW9uID0gZmFsc2U7IC8vIHVzZWQgdG8gY2hlY2sgaWYgaW5pdGlhbCBmaXQgc2hvdWxkIGp1c3QgdGFrZSB0aGUgcmFuZ2Ugb3IgYXBwcm94aW1hdGVcbiAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5ob3ZlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5sYWJlbE1vZHVsZSA9IG5ldyBMYWJlbChcbiAgICAgIHRoaXMuYm9keSxcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIGZhbHNlIC8qIE5vdCBlZGdlIGxhYmVsICovXG4gICAgKTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoIGEgZWRnZSB0byB0aGUgbm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge0VkZ2V9IGVkZ2VcbiAgICovXG4gIGF0dGFjaEVkZ2UoZWRnZSkge1xuICAgIGlmICh0aGlzLmVkZ2VzLmluZGV4T2YoZWRnZSkgPT09IC0xKSB7XG4gICAgICB0aGlzLmVkZ2VzLnB1c2goZWRnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGFjaCBhIGVkZ2UgZnJvbSB0aGUgbm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge0VkZ2V9IGVkZ2VcbiAgICovXG4gIGRldGFjaEVkZ2UoZWRnZSkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5lZGdlcy5pbmRleE9mKGVkZ2UpO1xuICAgIGlmIChpbmRleCAhPSAtMSkge1xuICAgICAgdGhpcy5lZGdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgb3Igb3ZlcndyaXRlIG9wdGlvbnMgZm9yIHRoZSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIGFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAgICogQHJldHVybnMge251bGx8Ym9vbGVhbn1cbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IGN1cnJlbnRTaGFwZSA9IHRoaXMub3B0aW9ucy5zaGFwZTtcblxuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgcmV0dXJuOyAvLyBOb3RlIHRoYXQgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlICd1bmRlZmluZWQnISBUaGlzIGlzIE9LLlxuICAgIH1cblxuICAgIC8vIFNhdmUgdGhlIGNvbG9yIGZvciBsYXRlci5cbiAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBwcmV2ZW50IGxvY2FsIGNvbG9yIGZyb20gYmVpbmcgb3ZlcndyaXR0ZW4gYnkgZ3JvdXAgY29sb3IuXG4gICAgLy8gVE9ETzogVG8gcHJldmVudCBzdWNoIHdvcmthcm91bmRzIHRoZSB3YXkgb3B0aW9ucyBhcmUgaGFuZGxlZCBzaG91bGQgYmUgcmV3cml0dGVuIGZyb20gc2NyYXRjaC5cbiAgICAvLyBUaGlzIGlzIG5vdCB0aGUgb25seSBwcm9ibGVtIHdpdGggY3VycmVudCBvcHRpb25zIGhhbmRsaW5nLlxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb2xvciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5fbG9jYWxDb2xvciA9IG9wdGlvbnMuY29sb3I7XG4gICAgfVxuXG4gICAgLy8gYmFzaWMgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vZGUgbXVzdCBoYXZlIGFuIGlkXCIpO1xuICAgIH1cblxuICAgIE5vZGUuY2hlY2tNYXNzKG9wdGlvbnMsIHRoaXMuaWQpO1xuXG4gICAgLy8gc2V0IHRoZXNlIG9wdGlvbnMgbG9jYWxseVxuICAgIC8vIGNsZWFyIHggYW5kIHkgcG9zaXRpb25zXG4gICAgaWYgKG9wdGlvbnMueCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy54ID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMueCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMueCA9IHBhcnNlSW50KG9wdGlvbnMueCk7XG4gICAgICAgIHRoaXMucHJlZGVmaW5lZFBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMueSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy55ID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMueSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMueSA9IHBhcnNlSW50KG9wdGlvbnMueSk7XG4gICAgICAgIHRoaXMucHJlZGVmaW5lZFBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJhc2VTaXplID0gb3B0aW9ucy5zaXplO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLnZhbHVlID0gcGFyc2VGbG9hdChvcHRpb25zLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHRyYW5zZm9ybXMgYWxsIHNob3J0aGFuZHMgaW50byBmdWxseSBkZWZpbmVkIG9wdGlvbnNcbiAgICBOb2RlLnBhcnNlT3B0aW9ucyhcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIG9wdGlvbnMsXG4gICAgICB0cnVlLFxuICAgICAgdGhpcy5nbG9iYWxPcHRpb25zLFxuICAgICAgdGhpcy5ncm91cGxpc3RcbiAgICApO1xuXG4gICAgY29uc3QgcGlsZSA9IFtvcHRpb25zLCB0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnNdO1xuICAgIHRoaXMuY2hvb3NlciA9IGNob29zaWZ5KFwibm9kZVwiLCBwaWxlKTtcblxuICAgIHRoaXMuX2xvYWRfaW1hZ2VzKCk7XG4gICAgdGhpcy51cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKTtcblxuICAgIC8vIE5lZWQgdG8gc2V0IGxvY2FsIG9wYWNpdHkgYWZ0ZXIgYHRoaXMudXBkYXRlTGFiZWxNb2R1bGUob3B0aW9ucyk7YCBiZWNhdXNlIGB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKG9wdGlvbnMpO2Agb3ZlcnJpdGVzIGxvY2FsIG9wYWNpdHkgd2l0aCBncm91cCBvcGFjaXR5XG4gICAgaWYgKG9wdGlvbnMub3BhY2l0eSAhPT0gdW5kZWZpbmVkICYmIE5vZGUuY2hlY2tPcGFjaXR5KG9wdGlvbnMub3BhY2l0eSkpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5O1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU2hhcGUoY3VycmVudFNoYXBlKTtcblxuICAgIHJldHVybiBvcHRpb25zLmhpZGRlbiAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMucGh5c2ljcyAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGltYWdlcyBmcm9tIHRoZSBvcHRpb25zLCBmb3IgdGhlIG5vZGVzIHRoYXQgbmVlZCB0aGVtLlxuICAgKlxuICAgKiBJbWFnZXMgYXJlIGFsd2F5cyBsb2FkZWQsIGV2ZW4gaWYgdGhleSBhcmUgbm90IHVzZWQgaW4gdGhlIGN1cnJlbnQgc2hhcGUuXG4gICAqIFRoZSB1c2VyIG1heSBzd2l0Y2ggdG8gYW4gaW1hZ2Ugc2hhcGUgbGF0ZXIgb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbG9hZF9pbWFnZXMoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLnNoYXBlID09PSBcImNpcmN1bGFySW1hZ2VcIiB8fFxuICAgICAgdGhpcy5vcHRpb25zLnNoYXBlID09PSBcImltYWdlXCJcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW1hZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJPcHRpb24gaW1hZ2UgbXVzdCBiZSBkZWZpbmVkIGZvciBub2RlIHR5cGUgJ1wiICtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zaGFwZSArXG4gICAgICAgICAgICBcIidcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaW1hZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmltYWdlbGlzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnRlcm5hbCBFcnJvcjogTm8gaW1hZ2VzIHByb3ZpZGVkXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmltYWdlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLmltYWdlT2JqID0gdGhpcy5pbWFnZWxpc3QubG9hZChcbiAgICAgICAgdGhpcy5vcHRpb25zLmltYWdlLFxuICAgICAgICB0aGlzLm9wdGlvbnMuYnJva2VuSW1hZ2UsXG4gICAgICAgIHRoaXMuaWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW1hZ2UudW5zZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHVuc2VsZWN0ZWQgaW1hZ2UgcHJvdmlkZWRcIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW1hZ2VPYmogPSB0aGlzLmltYWdlbGlzdC5sb2FkKFxuICAgICAgICB0aGlzLm9wdGlvbnMuaW1hZ2UudW5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5vcHRpb25zLmJyb2tlbkltYWdlLFxuICAgICAgICB0aGlzLmlkXG4gICAgICApO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmltYWdlLnNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbWFnZU9iakFsdCA9IHRoaXMuaW1hZ2VsaXN0LmxvYWQoXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmltYWdlLnNlbGVjdGVkLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5icm9rZW5JbWFnZSxcbiAgICAgICAgICB0aGlzLmlkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmltYWdlT2JqQWx0ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGF0IG9wYWNpdHkgaXMgb25seSBiZXR3ZWVuIDAgYW5kIDFcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9wYWNpdHlcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgY2hlY2tPcGFjaXR5KG9wYWNpdHkpIHtcbiAgICByZXR1cm4gMCA8PSBvcGFjaXR5ICYmIG9wYWNpdHkgPD0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGF0IG9yaWdpbiBpcyAnY2VudGVyJyBvciAndG9wLWxlZnQnXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgY2hlY2tDb29yZGluYXRlT3JpZ2luKG9yaWdpbikge1xuICAgIHJldHVybiBvcmlnaW4gPT09IHVuZGVmaW5lZCB8fCBvcmlnaW4gPT09IFwiY2VudGVyXCIgfHwgb3JpZ2luID09PSBcInRvcC1sZWZ0XCI7XG4gIH1cblxuICAvKipcbiAgICogQ29weSBncm91cCBvcHRpb24gdmFsdWVzIGludG8gdGhlIG5vZGUgb3B0aW9ucy5cbiAgICpcbiAgICogVGhlIGdyb3VwIG9wdGlvbnMgb3ZlcnJpZGUgdGhlIGdsb2JhbCBub2RlIG9wdGlvbnMsIHNvIHRoZSBjb3B5IG9mIGdyb3VwIG9wdGlvbnNcbiAgICogIG11c3QgaGFwcGVuICphZnRlciogdGhlIGdsb2JhbCBub2RlIG9wdGlvbnMgaGF2ZSBiZWVuIHNldC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgbXVzdCBhbHNvIGJlIGNhbGxlZCBhbHNvIGlmIHRoZSBnbG9iYWwgbm9kZSBvcHRpb25zIGhhdmUgY2hhbmdlZCBhbmQgdGhlIGdyb3VwIG9wdGlvbnMgZGlkIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudE9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld09wdGlvbnMgIG5ldyB2YWx1ZXMgZm9yIHRoZSBvcHRpb25zLCBjdXJyZW50bHkgb25seSBwYXNzZWQgaW4gZm9yIGNoZWNrXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBncm91cExpc3RcbiAgICovXG4gIHN0YXRpYyB1cGRhdGVHcm91cE9wdGlvbnMocGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgZ3JvdXBMaXN0KSB7XG4gICAgaWYgKGdyb3VwTGlzdCA9PT0gdW5kZWZpbmVkKSByZXR1cm47IC8vIE5vIGdyb3Vwcywgbm90aGluZyB0byBkb1xuXG4gICAgY29uc3QgZ3JvdXAgPSBwYXJlbnRPcHRpb25zLmdyb3VwO1xuXG4gICAgLy8gcGFyYW5vaWE6IHRoZSBzZWxlY3RlZCBncm91cCBpcyBhbHJlYWR5IG1lcmdlZCBpbnRvIG5vZGUgb3B0aW9ucywgY2hlY2suXG4gICAgaWYgKFxuICAgICAgbmV3T3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBuZXdPcHRpb25zLmdyb3VwICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGdyb3VwICE9PSBuZXdPcHRpb25zLmdyb3VwXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwidXBkYXRlR3JvdXBPcHRpb25zOiBncm91cCB2YWx1ZXMgaW4gb3B0aW9ucyBkb24ndCBtYXRjaC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNHcm91cCA9XG4gICAgICB0eXBlb2YgZ3JvdXAgPT09IFwibnVtYmVyXCIgfHwgKHR5cGVvZiBncm91cCA9PT0gXCJzdHJpbmdcIiAmJiBncm91cCAhPSBcIlwiKTtcbiAgICBpZiAoIWhhc0dyb3VwKSByZXR1cm47IC8vIGN1cnJlbnQgbm9kZSBoYXMgbm8gZ3JvdXAsIG5vIG5lZWQgdG8gbWVyZ2VcblxuICAgIGNvbnN0IGdyb3VwT2JqID0gZ3JvdXBMaXN0LmdldChncm91cCk7XG5cbiAgICBpZiAoZ3JvdXBPYmoub3BhY2l0eSAhPT0gdW5kZWZpbmVkICYmIG5ld09wdGlvbnMub3BhY2l0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIU5vZGUuY2hlY2tPcGFjaXR5KGdyb3VwT2JqLm9wYWNpdHkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIG9wdGlvbiBmb3Igbm9kZSBvcGFjaXR5LiBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZm91bmQ6IFwiICtcbiAgICAgICAgICAgIGdyb3VwT2JqLm9wYWNpdHlcbiAgICAgICAgKTtcbiAgICAgICAgZ3JvdXBPYmoub3BhY2l0eSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTa2lwIGFueSBuZXcgb3B0aW9uIHRvIGF2b2lkIHRoZW0gYmVpbmcgb3ZlcnJpZGRlbiBieSB0aGUgZ3JvdXAgb3B0aW9ucy5cbiAgICBjb25zdCBza2lwUHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG5ld09wdGlvbnMpLmZpbHRlcihcbiAgICAgIChwKSA9PiBuZXdPcHRpb25zW3BdICE9IG51bGxcbiAgICApO1xuICAgIC8vIEFsd2F5cyBza2lwIG1lcmdpbmcgZ3JvdXAgZm9udCBvcHRpb25zIGludG8gcGFyZW50OyB0aGVzZSBhcmUgcmVxdWlyZWQgdG8gYmUgZGlzdGluY3QgZm9yIGxhYmVsc1xuICAgIHNraXBQcm9wZXJ0aWVzLnB1c2goXCJmb250XCIpO1xuICAgIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQoc2tpcFByb3BlcnRpZXMsIHBhcmVudE9wdGlvbnMsIGdyb3VwT2JqKTtcblxuICAgIC8vIHRoZSBjb2xvciBvYmplY3QgbmVlZHMgdG8gYmUgY29tcGxldGVseSBkZWZpbmVkLlxuICAgIC8vIFNpbmNlIGdyb3VwcyBjYW4gcGFydGlhbGx5IG92ZXJ3cml0ZSB0aGUgY29sb3JzLCB3ZSBwYXJzZSBpdCBhZ2FpbiwganVzdCBpbiBjYXNlLlxuICAgIHBhcmVudE9wdGlvbnMuY29sb3IgPSBwYXJzZUNvbG9yKHBhcmVudE9wdGlvbnMuY29sb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvY2VzcyBhbGwgcG9zc2libGUgc2hvcnRoYW5kcyBpbiB0aGUgbmV3IG9wdGlvbnMgYW5kIG1ha2VzIHN1cmUgdGhhdCB0aGUgcGFyZW50T3B0aW9ucyBhcmUgZnVsbHkgZGVmaW5lZC5cbiAgICogU3RhdGljIHNvIGl0IGNhbiBhbHNvIGJlIHVzZWQgYnkgdGhlIGhhbmRsZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdPcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93RGVsZXRpb249ZmFsc2VdXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbZ2xvYmFsT3B0aW9ucz17fV1cbiAgICogQHBhcmFtIHtvYmplY3R9IFtncm91cExpc3RdXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZU9wdGlvbnMoXG4gICAgcGFyZW50T3B0aW9ucyxcbiAgICBuZXdPcHRpb25zLFxuICAgIGFsbG93RGVsZXRpb24gPSBmYWxzZSxcbiAgICBnbG9iYWxPcHRpb25zID0ge30sXG4gICAgZ3JvdXBMaXN0XG4gICkge1xuICAgIGNvbnN0IGZpZWxkcyA9IFtcImNvbG9yXCIsIFwiZml4ZWRcIiwgXCJzaGFkb3dcIl07XG4gICAgc2VsZWN0aXZlTm90RGVlcEV4dGVuZChmaWVsZHMsIHBhcmVudE9wdGlvbnMsIG5ld09wdGlvbnMsIGFsbG93RGVsZXRpb24pO1xuXG4gICAgTm9kZS5jaGVja01hc3MobmV3T3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW50T3B0aW9ucy5vcGFjaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghTm9kZS5jaGVja09wYWNpdHkocGFyZW50T3B0aW9ucy5vcGFjaXR5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiSW52YWxpZCBvcHRpb24gZm9yIG5vZGUgb3BhY2l0eS4gVmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEsIGZvdW5kOiBcIiArXG4gICAgICAgICAgICBwYXJlbnRPcHRpb25zLm9wYWNpdHlcbiAgICAgICAgKTtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5vcGFjaXR5ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZXdPcHRpb25zLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFOb2RlLmNoZWNrT3BhY2l0eShuZXdPcHRpb25zLm9wYWNpdHkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIG9wdGlvbiBmb3Igbm9kZSBvcGFjaXR5LiBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZm91bmQ6IFwiICtcbiAgICAgICAgICAgIG5ld09wdGlvbnMub3BhY2l0eVxuICAgICAgICApO1xuICAgICAgICBuZXdPcHRpb25zLm9wYWNpdHkgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgbmV3T3B0aW9ucy5zaGFwZVByb3BlcnRpZXMgJiZcbiAgICAgICFOb2RlLmNoZWNrQ29vcmRpbmF0ZU9yaWdpbihuZXdPcHRpb25zLnNoYXBlUHJvcGVydGllcy5jb29yZGluYXRlT3JpZ2luKVxuICAgICkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJJbnZhbGlkIG9wdGlvbiBmb3Igbm9kZSBjb29yZGluYXRlT3JpZ2luLCBmb3VuZDogXCIgK1xuICAgICAgICAgIG5ld09wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gbWVyZ2UgdGhlIHNoYWRvdyBvcHRpb25zIGludG8gdGhlIHBhcmVudC5cbiAgICBtZXJnZU9wdGlvbnMocGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgXCJzaGFkb3dcIiwgZ2xvYmFsT3B0aW9ucyk7XG5cbiAgICAvLyBpbmRpdmlkdWFsIHNoYXBlIG5ld09wdGlvbnNcbiAgICBpZiAobmV3T3B0aW9ucy5jb2xvciAhPT0gdW5kZWZpbmVkICYmIG5ld09wdGlvbnMuY29sb3IgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZENvbG9yID0gcGFyc2VDb2xvcihuZXdPcHRpb25zLmNvbG9yKTtcbiAgICAgIGZpbGxJZkRlZmluZWQocGFyZW50T3B0aW9ucy5jb2xvciwgcGFyc2VkQ29sb3IpO1xuICAgIH0gZWxzZSBpZiAoYWxsb3dEZWxldGlvbiA9PT0gdHJ1ZSAmJiBuZXdPcHRpb25zLmNvbG9yID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmNvbG9yID0gYnJpZGdlT2JqZWN0KGdsb2JhbE9wdGlvbnMuY29sb3IpOyAvLyBzZXQgdGhlIG9iamVjdCBiYWNrIHRvIHRoZSBnbG9iYWwgb3B0aW9uc1xuICAgIH1cblxuICAgIC8vIGhhbmRsZSB0aGUgZml4ZWQgb3B0aW9uc1xuICAgIGlmIChuZXdPcHRpb25zLmZpeGVkICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5maXhlZCAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBuZXdPcHRpb25zLmZpeGVkID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICBwYXJlbnRPcHRpb25zLmZpeGVkLnggPSBuZXdPcHRpb25zLmZpeGVkO1xuICAgICAgICBwYXJlbnRPcHRpb25zLmZpeGVkLnkgPSBuZXdPcHRpb25zLmZpeGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5ld09wdGlvbnMuZml4ZWQueCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdHlwZW9mIG5ld09wdGlvbnMuZml4ZWQueCA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGFyZW50T3B0aW9ucy5maXhlZC54ID0gbmV3T3B0aW9ucy5maXhlZC54O1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBuZXdPcHRpb25zLmZpeGVkLnkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHR5cGVvZiBuZXdPcHRpb25zLmZpeGVkLnkgPT09IFwiYm9vbGVhblwiXG4gICAgICAgICkge1xuICAgICAgICAgIHBhcmVudE9wdGlvbnMuZml4ZWQueSA9IG5ld09wdGlvbnMuZml4ZWQueTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuZm9udCA9PT0gbnVsbCkge1xuICAgICAgcGFyZW50T3B0aW9ucy5mb250ID0gYnJpZGdlT2JqZWN0KGdsb2JhbE9wdGlvbnMuZm9udCk7IC8vIHNldCB0aGUgb2JqZWN0IGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb25zXG4gICAgfVxuXG4gICAgTm9kZS51cGRhdGVHcm91cE9wdGlvbnMocGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgZ3JvdXBMaXN0KTtcblxuICAgIC8vIGhhbmRsZSB0aGUgc2NhbGluZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGxhYmVsIHBhcnRcbiAgICBpZiAobmV3T3B0aW9ucy5zY2FsaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1lcmdlT3B0aW9ucyhcbiAgICAgICAgcGFyZW50T3B0aW9ucy5zY2FsaW5nLFxuICAgICAgICBuZXdPcHRpb25zLnNjYWxpbmcsXG4gICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgZ2xvYmFsT3B0aW9ucy5zY2FsaW5nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7e2NvbG9yOiAqLCBib3JkZXJXaWR0aDogKiwgYm9yZGVyQ29sb3I6ICosIHNpemU6ICosIGJvcmRlckRhc2hlczogKGJvb2xlYW58QXJyYXl8YWxsT3B0aW9ucy5ub2Rlcy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyRGFzaGVzfHtib29sZWFuLCBhcnJheX0pLCBib3JkZXJSYWRpdXM6IChudW1iZXJ8YWxsT3B0aW9ucy5ub2Rlcy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzfHtudW1iZXJ9fEFycmF5KSwgc2hhZG93OiAqLCBzaGFkb3dDb2xvcjogKiwgc2hhZG93U2l6ZTogKiwgc2hhZG93WDogKiwgc2hhZG93WTogKn19XG4gICAqL1xuICBnZXRGb3JtYXR0aW5nVmFsdWVzKCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHtcbiAgICAgIGNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IuYmFja2dyb3VuZCxcbiAgICAgIG9wYWNpdHk6IHRoaXMub3B0aW9ucy5vcGFjaXR5LFxuICAgICAgYm9yZGVyV2lkdGg6IHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aCxcbiAgICAgIGJvcmRlckNvbG9yOiB0aGlzLm9wdGlvbnMuY29sb3IuYm9yZGVyLFxuICAgICAgc2l6ZTogdGhpcy5vcHRpb25zLnNpemUsXG4gICAgICBib3JkZXJEYXNoZXM6IHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyRGFzaGVzLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmJvcmRlclJhZGl1cyxcbiAgICAgIHNoYWRvdzogdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkLFxuICAgICAgc2hhZG93Q29sb3I6IHRoaXMub3B0aW9ucy5zaGFkb3cuY29sb3IsXG4gICAgICBzaGFkb3dTaXplOiB0aGlzLm9wdGlvbnMuc2hhZG93LnNpemUsXG4gICAgICBzaGFkb3dYOiB0aGlzLm9wdGlvbnMuc2hhZG93LngsXG4gICAgICBzaGFkb3dZOiB0aGlzLm9wdGlvbnMuc2hhZG93LnksXG4gICAgfTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZCB8fCB0aGlzLmhvdmVyKSB7XG4gICAgICBpZiAodGhpcy5jaG9vc2VyID09PSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aFNlbGVjdGVkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhbHVlcy5ib3JkZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aFNlbGVjdGVkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXMuYm9yZGVyV2lkdGggKj0gMjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWVzLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kO1xuICAgICAgICAgIHZhbHVlcy5ib3JkZXJDb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyO1xuICAgICAgICAgIHZhbHVlcy5zaGFkb3cgPSB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ob3Zlcikge1xuICAgICAgICAgIHZhbHVlcy5jb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvci5ob3Zlci5iYWNrZ3JvdW5kO1xuICAgICAgICAgIHZhbHVlcy5ib3JkZXJDb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvci5ob3Zlci5ib3JkZXI7XG4gICAgICAgICAgdmFsdWVzLnNoYWRvdyA9IHRoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5jaG9vc2VyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5jaG9vc2VyKHZhbHVlcywgdGhpcy5vcHRpb25zLmlkLCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyKTtcbiAgICAgICAgaWYgKHZhbHVlcy5zaGFkb3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsdWVzLnNoYWRvd0NvbG9yICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LmNvbG9yIHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93U2l6ZSAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy5zaXplIHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93WCAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy54IHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93WSAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy55XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVzLnNoYWRvdyA9IHRoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZDtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5vcGFjaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSB0aGlzLm9wdGlvbnMub3BhY2l0eTtcbiAgICAgIHZhbHVlcy5ib3JkZXJDb2xvciA9IG92ZXJyaWRlT3BhY2l0eSh2YWx1ZXMuYm9yZGVyQ29sb3IsIG9wYWNpdHkpO1xuICAgICAgdmFsdWVzLmNvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KHZhbHVlcy5jb2xvciwgb3BhY2l0eSk7XG4gICAgICB2YWx1ZXMuc2hhZG93Q29sb3IgPSBvdmVycmlkZU9wYWNpdHkodmFsdWVzLnNoYWRvd0NvbG9yLCBvcGFjaXR5KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgdXBkYXRlTGFiZWxNb2R1bGUob3B0aW9ucykge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgPT09IHVuZGVmaW5lZCB8fCB0aGlzLm9wdGlvbnMubGFiZWwgPT09IG51bGwpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5sYWJlbCA9IFwiXCI7XG4gICAgfVxuXG4gICAgTm9kZS51cGRhdGVHcm91cE9wdGlvbnMoXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGNvbG9yOiAob3B0aW9ucyAmJiBvcHRpb25zLmNvbG9yKSB8fCB0aGlzLl9sb2NhbENvbG9yIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICB0aGlzLmdyb3VwbGlzdFxuICAgICk7XG5cbiAgICAvL1xuICAgIC8vIE5vdGU6VGhlIHByb3RvdHlwZSBjaGFpbiBmb3IgdGhpcy5vcHRpb25zIGlzOlxuICAgIC8vXG4gICAgLy8gdGhpcy5vcHRpb25zIC0+ICAgIE5vZGVzSGFuZGxlci5vcHRpb25zICAgIC0+IE5vZGVzSGFuZGxlci5kZWZhdWx0T3B0aW9uc1xuICAgIC8vICAgICAgICAgICAgICAgICAoYWxzbzogdGhpcy5nbG9iYWxPcHRpb25zKVxuICAgIC8vXG4gICAgLy8gTm90ZSB0aGF0IHRoZSBwcm90b3R5cGVzIGFyZSBtZW50aW9uZWQgZXhwbGljaXRseSBpbiB0aGUgcGlsZSBsaXN0IGJlbG93O1xuICAgIC8vIFdFIERPTidUIFdBTlQgVEhFIE9SREVSIE9GIFRIRSBQUk9UT1RZUEVTISEhISBBdCBsZWFzdCwgbm90IGZvciBmb250IGhhbmRsaW5nIG9mIGxhYmVscy5cbiAgICAvLyBUaGlzIGlzIGEgZ29vZCBpbmRpY2F0aW9uIHRoYXQgdGhlIHByb3RvdHlwZSB1c2FnZSBvZiBvcHRpb25zIGlzIGRlZmljaWVudC5cbiAgICAvL1xuICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBsaXN0LmdldCh0aGlzLm9wdGlvbnMuZ3JvdXAsIGZhbHNlKTtcbiAgICBjb25zdCBwaWxlID0gW1xuICAgICAgb3B0aW9ucywgLy8gbmV3IG9wdGlvbnNcbiAgICAgIHRoaXMub3B0aW9ucywgLy8gY3VycmVudCBub2RlIG9wdGlvbnMsIHNlZSBjb21tZW50IGFib3ZlIGZvciBwcm90b3R5cGVcbiAgICAgIGN1cnJlbnRHcm91cCwgLy8gZ3JvdXAgb3B0aW9ucywgaWYgYW55XG4gICAgICB0aGlzLmdsb2JhbE9wdGlvbnMsIC8vIEN1cnJlbnRseSBzZXQgZ2xvYmFsIG5vZGUgb3B0aW9uc1xuICAgICAgdGhpcy5kZWZhdWx0T3B0aW9ucywgLy8gRGVmYXVsdCBnbG9iYWwgbm9kZSBvcHRpb25zXG4gICAgXTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlLnVwZGF0ZSh0aGlzLm9wdGlvbnMsIHBpbGUpO1xuXG4gICAgaWYgKHRoaXMubGFiZWxNb2R1bGUuYmFzZVNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5iYXNlRm9udFNpemUgPSB0aGlzLmxhYmVsTW9kdWxlLmJhc2VTaXplO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudFNoYXBlXG4gICAqL1xuICB1cGRhdGVTaGFwZShjdXJyZW50U2hhcGUpIHtcbiAgICBpZiAoY3VycmVudFNoYXBlID09PSB0aGlzLm9wdGlvbnMuc2hhcGUgJiYgdGhpcy5zaGFwZSkge1xuICAgICAgdGhpcy5zaGFwZS5zZXRPcHRpb25zKHRoaXMub3B0aW9ucywgdGhpcy5pbWFnZU9iaiwgdGhpcy5pbWFnZU9iakFsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNob29zZSBkcmF3IG1ldGhvZCBkZXBlbmRpbmcgb24gdGhlIHNoYXBlXG4gICAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5zaGFwZSkge1xuICAgICAgICBjYXNlIFwiYm94XCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBCb3godGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY2lyY2xlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBDaXJjbGUodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY2lyY3VsYXJJbWFnZVwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgQ2lyY3VsYXJJbWFnZShcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGUsXG4gICAgICAgICAgICB0aGlzLmltYWdlT2JqLFxuICAgICAgICAgICAgdGhpcy5pbWFnZU9iakFsdFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjdXN0b21cIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEN1c3RvbVNoYXBlKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZSxcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jdHhSZW5kZXJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkYXRhYmFzZVwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgRGF0YWJhc2UodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGlhbW9uZFwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgRGlhbW9uZCh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkb3RcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IERvdCh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJlbGxpcHNlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBFbGxpcHNlKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImljb25cIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEljb24odGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW1hZ2VcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEltYWdlKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZSxcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VPYmosXG4gICAgICAgICAgICB0aGlzLmltYWdlT2JqQWx0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInNxdWFyZVwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgU3F1YXJlKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImhleGFnb25cIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEhleGFnb24odGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3RhclwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgU3Rhcih0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBUZXh0KHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRyaWFuZ2xlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBUcmlhbmdsZSh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ0cmlhbmdsZURvd25cIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IFRyaWFuZ2xlRG93bihcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgRWxsaXBzZSh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubmVlZHNSZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogc2VsZWN0IHRoaXMgbm9kZVxuICAgKi9cbiAgc2VsZWN0KCkge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMubmVlZHNSZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogdW5zZWxlY3QgdGhpcyBub2RlXG4gICAqL1xuICB1bnNlbGVjdCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5uZWVkc1JlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgY2FsY3VsYXRlZCBzaXplIG9mIHRoZSBub2RlLCBmb3JjZXMgaXQgdG8gcmVjYWxjdWxhdGUgaXRzIHNpemVcbiAgICovXG4gIG5lZWRzUmVmcmVzaCgpIHtcbiAgICB0aGlzLnNoYXBlLnJlZnJlc2hOZWVkZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgdGl0bGUgb2YgdGhpcyBub2RlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aXRsZSAgICBUaGUgdGl0bGUgb2YgdGhlIG5vZGUsIG9yIHVuZGVmaW5lZCB3aGVuIG5vIHRpdGxlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gc2V0LlxuICAgKi9cbiAgZ2V0VGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50aXRsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIHRvIHRoZSBib3JkZXIgb2YgdGhlIE5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAgICAgICAgQW5nbGUgaW4gcmFkaWFuc1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBkaXN0YW5jZSAgIERpc3RhbmNlIHRvIHRoZSBib3JkZXIgaW4gcGl4ZWxzXG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFwZS5kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgbm9kZSBoYXMgYSBmaXhlZCB4IGFuZCB5IHBvc2l0aW9uXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAgICAgIHRydWUgaWYgZml4ZWQsIGZhbHNlIGlmIG5vdFxuICAgKi9cbiAgaXNGaXhlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpeGVkLnggJiYgdGhpcy5vcHRpb25zLmZpeGVkLnk7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2sgaWYgdGhpcyBub2RlIGlzIHNlbGVjdGVcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHNlbGVjdGVkICAgVHJ1ZSBpZiBub2RlIGlzIHNlbGVjdGVkLCBlbHNlIGZhbHNlXG4gICAqL1xuICBpc1NlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiB0aGUgbm9kZS4gQ2FuIGJlIHVuZGVmaW5lZFxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSB2YWx1ZVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgZGltZW5zaW9ucyBvZiB0aGUgbGFiZWxcbiAgICpcbiAgICogQHJldHVybnMge3JlY3R9XG4gICAqL1xuICBnZXRMYWJlbFNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxNb2R1bGUuc2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdCB0aGUgdmFsdWUgcmFuZ2Ugb2YgdGhlIG5vZGUuIFRoZSBub2RlIHdpbGwgYWRqdXN0IGl0J3Mgc2l6ZVxuICAgKiBiYXNlZCBvbiBpdHMgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heFxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxcbiAgICovXG4gIHNldFZhbHVlUmFuZ2UobWluLCBtYXgsIHRvdGFsKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzY2FsZSA9IHRoaXMub3B0aW9ucy5zY2FsaW5nLmN1c3RvbVNjYWxpbmdGdW5jdGlvbihcbiAgICAgICAgbWluLFxuICAgICAgICBtYXgsXG4gICAgICAgIHRvdGFsLFxuICAgICAgICB0aGlzLm9wdGlvbnMudmFsdWVcbiAgICAgICk7XG4gICAgICBjb25zdCBzaXplRGlmZiA9IHRoaXMub3B0aW9ucy5zY2FsaW5nLm1heCAtIHRoaXMub3B0aW9ucy5zY2FsaW5nLm1pbjtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGZvbnREaWZmID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5tYXggLSB0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5taW47XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb250LnNpemUgPVxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1pbiArIHNjYWxlICogZm9udERpZmY7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMuc2l6ZSA9IHRoaXMub3B0aW9ucy5zY2FsaW5nLm1pbiArIHNjYWxlICogc2l6ZURpZmY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9ucy5zaXplID0gdGhpcy5iYXNlU2l6ZTtcbiAgICAgIHRoaXMub3B0aW9ucy5mb250LnNpemUgPSB0aGlzLmJhc2VGb250U2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKCk7XG4gIH1cblxuICAvKipcbiAgICogRHJhdyB0aGlzIG5vZGUgaW4gdGhlIGdpdmVuIGNhbnZhc1xuICAgKiBUaGUgMmQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGhpZ2hlciBsYXllcnMuXG4gICAqL1xuICBkcmF3KGN0eCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0Rm9ybWF0dGluZ1ZhbHVlcygpO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNoYXBlLmRyYXcoY3R4LCB0aGlzLngsIHRoaXMueSwgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3ZlciwgdmFsdWVzKSB8fFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBzaGFwZVxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gICBjdHhcbiAgICovXG4gIHVwZGF0ZUJvdW5kaW5nQm94KGN0eCkge1xuICAgIHRoaXMuc2hhcGUudXBkYXRlQm91bmRpbmdCb3godGhpcy54LCB0aGlzLnksIGN0eCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhpcyBub2RlIGluIHRoZSBnaXZlbiBjYW52YXNcbiAgICogVGhlIDJkIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhcyBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSAgIGN0eFxuICAgKi9cbiAgcmVzaXplKGN0eCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0Rm9ybWF0dGluZ1ZhbHVlcygpO1xuICAgIHRoaXMuc2hhcGUucmVzaXplKGN0eCwgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3ZlciwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgYWxsIHZpc3VhbCBlbGVtZW50cyBvZiB0aGlzIG5vZGUgaW5zdGFuY2UsIGluIHdoaWNoIHRoZSBnaXZlblxuICAgKiBwb2ludCBmYWxscyB3aXRoaW4gdGhlIGJvdW5kaW5nIHNoYXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb2ludFxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG5vZGVDbGlja0l0ZW18bm9kZUxhYmVsQ2xpY2tJdGVtPn0gbGlzdCB3aXRoIHRoZSBpdGVtcyB3aGljaCBhcmUgb24gdGhlIHBvaW50XG4gICAqL1xuICBnZXRJdGVtc09uUG9pbnQocG9pbnQpIHtcbiAgICBjb25zdCByZXQgPSBbXTtcblxuICAgIGlmICh0aGlzLmxhYmVsTW9kdWxlLnZpc2libGUoKSkge1xuICAgICAgaWYgKHBvaW50SW5SZWN0KHRoaXMubGFiZWxNb2R1bGUuZ2V0U2l6ZSgpLCBwb2ludCkpIHtcbiAgICAgICAgcmV0LnB1c2goeyBub2RlSWQ6IHRoaXMuaWQsIGxhYmVsSWQ6IDAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvaW50SW5SZWN0KHRoaXMuc2hhcGUuYm91bmRpbmdCb3gsIHBvaW50KSkge1xuICAgICAgcmV0LnB1c2goeyBub2RlSWQ6IHRoaXMuaWQgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIG9iamVjdCBpcyBvdmVybGFwcGluZyB3aXRoIHRoZSBwcm92aWRlZCBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iaiAgIGFuIG9iamVjdCB3aXRoIHBhcmFtZXRlcnMgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAgICAgVHJ1ZSBpZiBsb2NhdGlvbiBpcyBsb2NhdGVkIG9uIG5vZGVcbiAgICovXG4gIGlzT3ZlcmxhcHBpbmdXaXRoKG9iaikge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNoYXBlLmxlZnQgPCBvYmoucmlnaHQgJiZcbiAgICAgIHRoaXMuc2hhcGUubGVmdCArIHRoaXMuc2hhcGUud2lkdGggPiBvYmoubGVmdCAmJlxuICAgICAgdGhpcy5zaGFwZS50b3AgPCBvYmouYm90dG9tICYmXG4gICAgICB0aGlzLnNoYXBlLnRvcCArIHRoaXMuc2hhcGUuaGVpZ2h0ID4gb2JqLnRvcFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBvYmplY3QgaXMgb3ZlcmxhcHBpbmcgd2l0aCB0aGUgcHJvdmlkZWQgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmogICBhbiBvYmplY3Qgd2l0aCBwYXJhbWV0ZXJzIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gICAgIFRydWUgaWYgbG9jYXRpb24gaXMgbG9jYXRlZCBvbiBub2RlXG4gICAqL1xuICBpc0JvdW5kaW5nQm94T3ZlcmxhcHBpbmdXaXRoKG9iaikge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNoYXBlLmJvdW5kaW5nQm94LmxlZnQgPCBvYmoucmlnaHQgJiZcbiAgICAgIHRoaXMuc2hhcGUuYm91bmRpbmdCb3gucmlnaHQgPiBvYmoubGVmdCAmJlxuICAgICAgdGhpcy5zaGFwZS5ib3VuZGluZ0JveC50b3AgPCBvYmouYm90dG9tICYmXG4gICAgICB0aGlzLnNoYXBlLmJvdW5kaW5nQm94LmJvdHRvbSA+IG9iai50b3BcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHZhbGlkIHZhbHVlcyBmb3IgbWFzc1xuICAgKlxuICAgKiBUaGUgbWFzcyBtYXkgbm90IGJlIG5lZ2F0aXZlIG9yIHplcm8uIElmIGl0IGlzLCByZXNldCB0byAxXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gaWRcbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNoZWNrTWFzcyhvcHRpb25zLCBpZCkge1xuICAgIGlmIChvcHRpb25zLm1hc3MgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLm1hc3MgPD0gMCkge1xuICAgICAgbGV0IHN0cklkID0gXCJcIjtcbiAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHN0cklkID0gXCIgaW4gbm9kZSBpZDogXCIgKyBpZDtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiJWNOZWdhdGl2ZSBvciB6ZXJvIG1hc3MgZGlzYWxsb3dlZFwiICsgc3RySWQgKyBcIiwgc2V0dGluZyBtYXNzIHRvIDEuXCIsXG4gICAgICAgIFZBTElEQVRPUl9QUklOVF9TVFlMRVxuICAgICAgKTtcbiAgICAgIG9wdGlvbnMubWFzcyA9IDE7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5vZGU7XG4iLCAiaW1wb3J0IHsgYnJpZGdlT2JqZWN0LCBmb3JFYWNoIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgRGF0YVNldCwgaXNEYXRhVmlld0xpa2UgfSBmcm9tIFwidmlzLWRhdGEvZXNuZXh0XCI7XG5pbXBvcnQgTm9kZSBmcm9tIFwiLi9jb21wb25lbnRzL05vZGVcIjtcblxuLyoqXG4gKiBIYW5kbGVyIGZvciBOb2Rlc1xuICovXG5jbGFzcyBOb2Rlc0hhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtJbWFnZXN9IGltYWdlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxHcm91cD59IGdyb3Vwc1xuICAgKiBAcGFyYW0ge0xheW91dEVuZ2luZX0gbGF5b3V0RW5naW5lXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBpbWFnZXMsIGdyb3VwcywgbGF5b3V0RW5naW5lKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmltYWdlcyA9IGltYWdlcztcbiAgICB0aGlzLmdyb3VwcyA9IGdyb3VwcztcbiAgICB0aGlzLmxheW91dEVuZ2luZSA9IGxheW91dEVuZ2luZTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgbm9kZSBBUEkgaW4gdGhlIGJvZHkgY29udGFpbmVyXG4gICAgdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVOb2RlID0gdGhpcy5jcmVhdGUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubm9kZXNMaXN0ZW5lcnMgPSB7XG4gICAgICBhZGQ6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkKHBhcmFtcy5pdGVtcyk7XG4gICAgICB9LFxuICAgICAgdXBkYXRlOiAoZXZlbnQsIHBhcmFtcykgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZShwYXJhbXMuaXRlbXMsIHBhcmFtcy5kYXRhLCBwYXJhbXMub2xkRGF0YSk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlOiAoZXZlbnQsIHBhcmFtcykgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZShwYXJhbXMuaXRlbXMpO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgYm9yZGVyV2lkdGhTZWxlY3RlZDogdW5kZWZpbmVkLFxuICAgICAgYnJva2VuSW1hZ2U6IHVuZGVmaW5lZCxcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIGJvcmRlcjogXCIjMkI3Q0U5XCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzk3QzJGQ1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHtcbiAgICAgICAgICBib3JkZXI6IFwiIzJCN0NFOVwiLFxuICAgICAgICAgIGJhY2tncm91bmQ6IFwiI0QyRTVGRlwiLFxuICAgICAgICB9LFxuICAgICAgICBob3Zlcjoge1xuICAgICAgICAgIGJvcmRlcjogXCIjMkI3Q0U5XCIsXG4gICAgICAgICAgYmFja2dyb3VuZDogXCIjRDJFNUZGXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgb3BhY2l0eTogdW5kZWZpbmVkLCAvLyBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG4gICAgICBmaXhlZDoge1xuICAgICAgICB4OiBmYWxzZSxcbiAgICAgICAgeTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZm9udDoge1xuICAgICAgICBjb2xvcjogXCIjMzQzNDM0XCIsXG4gICAgICAgIHNpemU6IDE0LCAvLyBweFxuICAgICAgICBmYWNlOiBcImFyaWFsXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwibm9uZVwiLFxuICAgICAgICBzdHJva2VXaWR0aDogMCwgLy8gcHhcbiAgICAgICAgc3Ryb2tlQ29sb3I6IFwiI2ZmZmZmZlwiLFxuICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgdmFkanVzdDogMCxcbiAgICAgICAgbXVsdGk6IGZhbHNlLFxuICAgICAgICBib2xkOiB7XG4gICAgICAgICAgbW9kOiBcImJvbGRcIixcbiAgICAgICAgfSxcbiAgICAgICAgYm9sZGl0YWw6IHtcbiAgICAgICAgICBtb2Q6IFwiYm9sZCBpdGFsaWNcIixcbiAgICAgICAgfSxcbiAgICAgICAgaXRhbDoge1xuICAgICAgICAgIG1vZDogXCJpdGFsaWNcIixcbiAgICAgICAgfSxcbiAgICAgICAgbW9ubzoge1xuICAgICAgICAgIG1vZDogXCJcIixcbiAgICAgICAgICBzaXplOiAxNSwgLy8gcHhcbiAgICAgICAgICBmYWNlOiBcIm1vbm9zcGFjZVwiLFxuICAgICAgICAgIHZhZGp1c3Q6IDIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZ3JvdXA6IHVuZGVmaW5lZCxcbiAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICBpY29uOiB7XG4gICAgICAgIGZhY2U6IFwiRm9udEF3ZXNvbWVcIiwgLy8nRm9udEF3ZXNvbWUnLFxuICAgICAgICBjb2RlOiB1bmRlZmluZWQsIC8vJ1xcdWYwMDcnLFxuICAgICAgICBzaXplOiA1MCwgLy81MCxcbiAgICAgICAgY29sb3I6IFwiIzJCN0NFOVwiLCAvLycjYWEwMGZmJ1xuICAgICAgfSxcbiAgICAgIGltYWdlOiB1bmRlZmluZWQsIC8vIC0tPiBVUkxcbiAgICAgIGltYWdlUGFkZGluZzoge1xuICAgICAgICAvLyBvbmx5IGZvciBpbWFnZSBzaGFwZVxuICAgICAgICB0b3A6IDAsXG4gICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICBib3R0b206IDAsXG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICB9LFxuICAgICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogdHJ1ZSxcbiAgICAgIGxldmVsOiB1bmRlZmluZWQsXG4gICAgICBtYXJnaW46IHtcbiAgICAgICAgdG9wOiA1LFxuICAgICAgICByaWdodDogNSxcbiAgICAgICAgYm90dG9tOiA1LFxuICAgICAgICBsZWZ0OiA1LFxuICAgICAgfSxcbiAgICAgIG1hc3M6IDEsXG4gICAgICBwaHlzaWNzOiB0cnVlLFxuICAgICAgc2NhbGluZzoge1xuICAgICAgICBtaW46IDEwLFxuICAgICAgICBtYXg6IDMwLFxuICAgICAgICBsYWJlbDoge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgIG1pbjogMTQsXG4gICAgICAgICAgbWF4OiAzMCxcbiAgICAgICAgICBtYXhWaXNpYmxlOiAzMCxcbiAgICAgICAgICBkcmF3VGhyZXNob2xkOiA1LFxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21TY2FsaW5nRnVuY3Rpb246IGZ1bmN0aW9uIChtaW4sIG1heCwgdG90YWwsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKG1heCA9PT0gbWluKSB7XG4gICAgICAgICAgICByZXR1cm4gMC41O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9IDEgLyAobWF4IC0gbWluKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCAodmFsdWUgLSBtaW4pICogc2NhbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzaGFkb3c6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGNvbG9yOiBcInJnYmEoMCwwLDAsMC41KVwiLFxuICAgICAgICBzaXplOiAxMCxcbiAgICAgICAgeDogNSxcbiAgICAgICAgeTogNSxcbiAgICAgIH0sXG4gICAgICBzaGFwZTogXCJlbGxpcHNlXCIsXG4gICAgICBzaGFwZVByb3BlcnRpZXM6IHtcbiAgICAgICAgYm9yZGVyRGFzaGVzOiBmYWxzZSwgLy8gb25seSBmb3IgYm9yZGVyc1xuICAgICAgICBib3JkZXJSYWRpdXM6IDYsIC8vIG9ubHkgZm9yIGJveCBzaGFwZVxuICAgICAgICBpbnRlcnBvbGF0aW9uOiB0cnVlLCAvLyBvbmx5IGZvciBpbWFnZSBhbmQgY2lyY3VsYXJJbWFnZSBzaGFwZXNcbiAgICAgICAgdXNlSW1hZ2VTaXplOiBmYWxzZSwgLy8gb25seSBmb3IgaW1hZ2UgYW5kIGNpcmN1bGFySW1hZ2Ugc2hhcGVzXG4gICAgICAgIHVzZUJvcmRlcldpdGhJbWFnZTogZmFsc2UsIC8vIG9ubHkgZm9yIGltYWdlIHNoYXBlXG4gICAgICAgIGNvb3JkaW5hdGVPcmlnaW46IFwiY2VudGVyXCIsIC8vIG9ubHkgZm9yIGltYWdlIGFuZCBjaXJjdWxhckltYWdlIHNoYXBlc1xuICAgICAgfSxcbiAgICAgIHNpemU6IDI1LFxuICAgICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB4OiB1bmRlZmluZWQsXG4gICAgICB5OiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIC8vIFByb3RlY3QgZnJvbSBpZGlvY3lcbiAgICBpZiAodGhpcy5kZWZhdWx0T3B0aW9ucy5tYXNzIDw9IDApIHtcbiAgICAgIHRocm93IFwiSW50ZXJuYWwgZXJyb3I6IG1hc3MgaW4gZGVmYXVsdE9wdGlvbnMgb2YgTm9kZXNIYW5kbGVyIG1heSBub3QgYmUgemVybyBvciBuZWdhdGl2ZVwiO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IGJyaWRnZU9iamVjdCh0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgLy8gcmVmcmVzaCB0aGUgbm9kZXMuIFVzZWQgd2hlbiByZXZlcnRpbmcgZnJvbSBoaWVyYXJjaGljYWwgbGF5b3V0XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJyZWZyZXNoTm9kZXNcIiwgdGhpcy5yZWZyZXNoLmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwicmVmcmVzaFwiLCB0aGlzLnJlZnJlc2guYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZXN0cm95XCIsICgpID0+IHtcbiAgICAgIGZvckVhY2godGhpcy5ub2Rlc0xpc3RlbmVycywgKGNhbGxiYWNrLCBldmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ib2R5LmRhdGEubm9kZXMpIHRoaXMuYm9keS5kYXRhLm5vZGVzLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgICBkZWxldGUgdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVOb2RlO1xuICAgICAgZGVsZXRlIHRoaXMubm9kZXNMaXN0ZW5lcnMuYWRkO1xuICAgICAgZGVsZXRlIHRoaXMubm9kZXNMaXN0ZW5lcnMudXBkYXRlO1xuICAgICAgZGVsZXRlIHRoaXMubm9kZXNMaXN0ZW5lcnMucmVtb3ZlO1xuICAgICAgZGVsZXRlIHRoaXMubm9kZXNMaXN0ZW5lcnM7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIE5vZGUucGFyc2VPcHRpb25zKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgIC8vIE5lZWQgdG8gc2V0IG9wYWNpdHkgaGVyZSBiZWNhdXNlIE5vZGUucGFyc2VPcHRpb25zIGlzIGFsc28gdXNlZCBmb3IgZ3JvdXBzLFxuICAgICAgLy8gaWYgeW91IHNldCBvcGFjaXR5IGluIE5vZGUucGFyc2VPcHRpb25zIGl0IG92ZXJ3cml0ZXMgZ3JvdXAgb3BhY2l0eS5cbiAgICAgIGlmIChvcHRpb25zLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgTnVtYmVyLmlzTmFOKG9wdGlvbnMub3BhY2l0eSkgfHxcbiAgICAgICAgICAhTnVtYmVyLmlzRmluaXRlKG9wdGlvbnMub3BhY2l0eSkgfHxcbiAgICAgICAgICBvcHRpb25zLm9wYWNpdHkgPCAwIHx8XG4gICAgICAgICAgb3B0aW9ucy5vcGFjaXR5ID4gMVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIG9wdGlvbiBmb3Igbm9kZSBvcGFjaXR5LiBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZm91bmQ6IFwiICtcbiAgICAgICAgICAgICAgb3B0aW9ucy5vcGFjaXR5XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMub3BhY2l0eSA9IG9wdGlvbnMub3BhY2l0eTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgdGhlIHNoYXBlIGluIGFsbCBub2Rlc1xuICAgICAgaWYgKG9wdGlvbnMuc2hhcGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0aGlzLmJvZHkubm9kZXMpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5ub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0udXBkYXRlU2hhcGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIHRoZSBsYWJlbHMgb2Ygbm9kZXMgaWYgYW55IHJlbGV2YW50IG9wdGlvbnMgY2hhbmdlZC5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMuZm9udCAhPT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy53aWR0aENvbnN0cmFpbnQgIT09IFwidW5kZWZpbmVkXCIgfHxcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMuaGVpZ2h0Q29uc3RyYWludCAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlkIG9mIE9iamVjdC5rZXlzKHRoaXMuYm9keS5ub2RlcykpIHtcbiAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS51cGRhdGVMYWJlbE1vZHVsZSgpO1xuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLm5lZWRzUmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgc2hhcGUgc2l6ZSBpbiBhbGwgbm9kZXNcbiAgICAgIGlmIChvcHRpb25zLnNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0aGlzLmJvZHkubm9kZXMpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5ub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0ubmVlZHNSZWZyZXNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIHZhcmlhYmxlcyBpZiBuZWVkZWRcbiAgICAgIGlmIChvcHRpb25zLmhpZGRlbiAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMucGh5c2ljcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGRhdGEgc2V0IHdpdGggbm9kZXMgZm9yIHRoZSBuZXR3b3JrXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBEYXRhU2V0IHwgRGF0YVZpZXd9IG5vZGVzICAgICAgICAgVGhlIGRhdGEgY29udGFpbmluZyB0aGUgbm9kZXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvTm90RW1pdD1mYWxzZV0gLSBTdXBwcmVzcyBkYXRhIGNoYW5nZWQgZXZlbnQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXREYXRhKG5vZGVzLCBkb05vdEVtaXQgPSBmYWxzZSkge1xuICAgIGNvbnN0IG9sZE5vZGVzRGF0YSA9IHRoaXMuYm9keS5kYXRhLm5vZGVzO1xuXG4gICAgaWYgKGlzRGF0YVZpZXdMaWtlKFwiaWRcIiwgbm9kZXMpKSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5ub2RlcyA9IG5vZGVzO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShub2RlcykpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzID0gbmV3IERhdGFTZXQoKTtcbiAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzLmFkZChub2Rlcyk7XG4gICAgfSBlbHNlIGlmICghbm9kZXMpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzID0gbmV3IERhdGFTZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5IG9yIERhdGFTZXQgZXhwZWN0ZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKG9sZE5vZGVzRGF0YSkge1xuICAgICAgLy8gdW5zdWJzY3JpYmUgZnJvbSBvbGQgZGF0YXNldFxuICAgICAgZm9yRWFjaCh0aGlzLm5vZGVzTGlzdGVuZXJzLCBmdW5jdGlvbiAoY2FsbGJhY2ssIGV2ZW50KSB7XG4gICAgICAgIG9sZE5vZGVzRGF0YS5vZmYoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSBkcmF3biBub2Rlc1xuICAgIHRoaXMuYm9keS5ub2RlcyA9IHt9O1xuXG4gICAgaWYgKHRoaXMuYm9keS5kYXRhLm5vZGVzKSB7XG4gICAgICAvLyBzdWJzY3JpYmUgdG8gbmV3IGRhdGFzZXRcbiAgICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICAgIGZvckVhY2godGhpcy5ub2Rlc0xpc3RlbmVycywgZnVuY3Rpb24gKGNhbGxiYWNrLCBldmVudCkge1xuICAgICAgICBtZS5ib2R5LmRhdGEubm9kZXMub24oZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBkcmF3IGFsbCBuZXcgbm9kZXNcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldElkcygpO1xuICAgICAgdGhpcy5hZGQoaWRzLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoZG9Ob3RFbWl0ID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIG5vZGVzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvTm90RW1pdD1mYWxzZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFkZChpZHMsIGRvTm90RW1pdCA9IGZhbHNlKSB7XG4gICAgbGV0IGlkO1xuICAgIGNvbnN0IG5ld05vZGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlkID0gaWRzW2ldO1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldChpZCk7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGUocHJvcGVydGllcyk7XG4gICAgICBuZXdOb2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgdGhpcy5ib2R5Lm5vZGVzW2lkXSA9IG5vZGU7IC8vIG5vdGU6IHRoaXMgbWF5IHJlcGxhY2UgYW4gZXhpc3Rpbmcgbm9kZVxuICAgIH1cblxuICAgIHRoaXMubGF5b3V0RW5naW5lLnBvc2l0aW9uSW5pdGlhbGx5KG5ld05vZGVzKTtcblxuICAgIGlmIChkb05vdEVtaXQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZXhpc3Rpbmcgbm9kZXMsIG9yIGNyZWF0ZSB0aGVtIHdoZW4gbm90IHlldCBleGlzdGluZ1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgc3RyaW5nW119IGlkcyBpZCdzIG9mIGNoYW5nZWQgbm9kZXNcbiAgICogQHBhcmFtIHtBcnJheX0gY2hhbmdlZERhdGEgYXJyYXkgd2l0aCBjaGFuZ2VkIGRhdGFcbiAgICogQHBhcmFtIHtBcnJheXx1bmRlZmluZWR9IG9sZERhdGEgb3B0aW9uYWw7IGFycmF5IHdpdGggcHJldmlvdXMgZGF0YVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlKGlkcywgY2hhbmdlZERhdGEsIG9sZERhdGEpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBsZXQgZGF0YUNoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICBsZXQgbm9kZSA9IG5vZGVzW2lkXTtcbiAgICAgIGNvbnN0IGRhdGEgPSBjaGFuZ2VkRGF0YVtpXTtcbiAgICAgIGlmIChub2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gdXBkYXRlIG5vZGVcbiAgICAgICAgaWYgKG5vZGUuc2V0T3B0aW9ucyhkYXRhKSkge1xuICAgICAgICAgIGRhdGFDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAvLyBjcmVhdGUgbm9kZVxuICAgICAgICBub2RlID0gdGhpcy5jcmVhdGUoZGF0YSk7XG4gICAgICAgIG5vZGVzW2lkXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhQ2hhbmdlZCAmJiBvbGREYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENoZWNrIGZvciBhbnkgY2hhbmdlcyB3aGljaCBzaG91bGQgdHJpZ2dlciBhIGxheW91dCByZWNhbGN1bGF0aW9uXG4gICAgICAvLyBGb3Igbm93LCB0aGlzIGlzIGp1c3QgJ2xldmVsJyBmb3IgaGllcmFyY2hpY2FsIGxheW91dFxuICAgICAgLy8gQXNzdW1wdGlvbjogb2xkIGFuZCBuZXcgZGF0YSBhcnJhbmdlZCBpbiBzYW1lIG9yZGVyOyBhdCB0aW1lIG9mIHdyaXRpbmcsIHRoaXMgaG9sZHMuXG4gICAgICBkYXRhQ2hhbmdlZCA9IGNoYW5nZWREYXRhLnNvbWUoZnVuY3Rpb24gKG5ld1ZhbHVlLCBpbmRleCkge1xuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IG9sZERhdGFbaW5kZXhdO1xuICAgICAgICByZXR1cm4gb2xkVmFsdWUgJiYgb2xkVmFsdWUubGV2ZWwgIT09IG5ld1ZhbHVlLmxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGFDaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFVcGRhdGVkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZXhpc3Rpbmcgbm9kZXMuIElmIG5vZGVzIGRvIG5vdCBleGlzdCwgdGhlIG1ldGhvZCB3aWxsIGp1c3QgaWdub3JlIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgc3RyaW5nW119IGlkc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVtb3ZlKGlkcykge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgZGVsZXRlIG5vZGVzW2lkXTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHByb3BlcnRpZXNcbiAgICogQHBhcmFtIHtjbGFzc30gW2NvbnN0cnVjdG9yQ2xhc3M9Tm9kZS5kZWZhdWx0XVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGNyZWF0ZShwcm9wZXJ0aWVzLCBjb25zdHJ1Y3RvckNsYXNzID0gTm9kZSkge1xuICAgIHJldHVybiBuZXcgY29uc3RydWN0b3JDbGFzcyhcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICB0aGlzLmJvZHksXG4gICAgICB0aGlzLmltYWdlcyxcbiAgICAgIHRoaXMuZ3JvdXBzLFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgdGhpcy5kZWZhdWx0T3B0aW9uc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbY2xlYXJQb3NpdGlvbnM9ZmFsc2VdXG4gICAqL1xuICByZWZyZXNoKGNsZWFyUG9zaXRpb25zID0gZmFsc2UpIHtcbiAgICBmb3JFYWNoKHRoaXMuYm9keS5ub2RlcywgKG5vZGUsIG5vZGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldChub2RlSWQpO1xuICAgICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2xlYXJQb3NpdGlvbnMgPT09IHRydWUpIHtcbiAgICAgICAgICBub2RlLnNldE9wdGlvbnMoeyB4OiBudWxsLCB5OiBudWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuc2V0T3B0aW9ucyh7IGZpeGVkOiBmYWxzZSB9KTtcbiAgICAgICAgbm9kZS5zZXRPcHRpb25zKGRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBvc2l0aW9ucyBvZiB0aGUgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGUuaWQ+IHwgc3RyaW5nfSBbaWRzXSAgLS0+IG9wdGlvbmFsLCBjYW4gYmUgYXJyYXkgb2Ygbm9kZUlkcywgY2FuIGJlIHN0cmluZ1xuICAgKiBAcmV0dXJucyB7e319XG4gICAqL1xuICBnZXRQb3NpdGlvbnMoaWRzKSB7XG4gICAgY29uc3QgZGF0YUFycmF5ID0ge307XG4gICAgaWYgKGlkcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpZHMpID09PSB0cnVlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tpZHNbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbaWRzW2ldXTtcbiAgICAgICAgICAgIGRhdGFBcnJheVtpZHNbaV1dID0ge1xuICAgICAgICAgICAgICB4OiBNYXRoLnJvdW5kKG5vZGUueCksXG4gICAgICAgICAgICAgIHk6IE1hdGgucm91bmQobm9kZS55KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW2lkc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbaWRzXTtcbiAgICAgICAgICBkYXRhQXJyYXlbaWRzXSA9IHsgeDogTWF0aC5yb3VuZChub2RlLngpLCB5OiBNYXRoLnJvdW5kKG5vZGUueSkgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV07XG4gICAgICAgIGRhdGFBcnJheVt0aGlzLmJvZHkubm9kZUluZGljZXNbaV1dID0ge1xuICAgICAgICAgIHg6IE1hdGgucm91bmQobm9kZS54KSxcbiAgICAgICAgICB5OiBNYXRoLnJvdW5kKG5vZGUueSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhQXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB4IHkgcG9zaXRpb24gb2YgYSBzcGVjaWZpYyBpZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBpZCB0byByZXRyaWV2ZS5cbiAgICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBubyBpZCBpcyBpbmNsdWRlZC5cbiAgICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IElmIGFuIGludmFsaWQgaWQgaXMgcHJvdmlkZWQuXG4gICAqIEByZXR1cm5zIHt7IHg6IG51bWJlciwgeTogbnVtYmVyIH19IFJldHVybnMgWCwgWSBjYW52YXMgcG9zaXRpb24gb2YgdGhlIG5vZGUgd2l0aCBnaXZlbiBpZC5cbiAgICovXG4gIGdldFBvc2l0aW9uKGlkKSB7XG4gICAgaWYgKGlkID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIGlkIHdhcyBzcGVjaWZpZWQgZm9yIGdldFBvc2l0aW9uIG1ldGhvZC5cIik7XG4gICAgfSBlbHNlIGlmICh0aGlzLmJvZHkubm9kZXNbaWRdID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICBgTm9kZUlkIHByb3ZpZGVkIGZvciBnZXRQb3NpdGlvbiBkb2VzIG5vdCBleGlzdC4gUHJvdmlkZWQ6ICR7aWR9YFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogTWF0aC5yb3VuZCh0aGlzLmJvZHkubm9kZXNbaWRdLngpLFxuICAgICAgICB5OiBNYXRoLnJvdW5kKHRoaXMuYm9keS5ub2Rlc1tpZF0ueSksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBYWSBwb3NpdGlvbnMgb2YgdGhlIG5vZGVzIGludG8gdGhlIGRhdGFzZXQuXG4gICAqL1xuICBzdG9yZVBvc2l0aW9ucygpIHtcbiAgICAvLyB0b2RvOiBhZGQgc3VwcG9ydCBmb3IgY2x1c3RlcnMgYW5kIGhpZXJhcmNoaWNhbC5cbiAgICBjb25zdCBkYXRhQXJyYXkgPSBbXTtcbiAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpO1xuXG4gICAgZm9yIChjb25zdCBkc05vZGUgb2YgZGF0YXNldC5nZXQoKSkge1xuICAgICAgY29uc3QgaWQgPSBkc05vZGUuaWQ7XG4gICAgICBjb25zdCBib2R5Tm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpZF07XG4gICAgICBjb25zdCB4ID0gTWF0aC5yb3VuZChib2R5Tm9kZS54KTtcbiAgICAgIGNvbnN0IHkgPSBNYXRoLnJvdW5kKGJvZHlOb2RlLnkpO1xuXG4gICAgICBpZiAoZHNOb2RlLnggIT09IHggfHwgZHNOb2RlLnkgIT09IHkpIHtcbiAgICAgICAgZGF0YUFycmF5LnB1c2goeyBpZCwgeCwgeSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRhc2V0LnVwZGF0ZShkYXRhQXJyYXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgYm91bmRpbmcgYm94IG9mIGEgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge2p8Kn1cbiAgICovXG4gIGdldEJvdW5kaW5nQm94KG5vZGVJZCkge1xuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0uc2hhcGUuYm91bmRpbmdCb3g7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSWRzIG9mIG5vZGVzIGNvbm5lY3RlZCB0byB0aGlzIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEBwYXJhbSB7J3RvJ3wnZnJvbSd8dW5kZWZpbmVkfSBkaXJlY3Rpb24gdmFsdWVzICdmcm9tJyBhbmQgJ3RvJyBzZWxlY3QgcmVzcGVjdGl2ZWx5IHBhcmVudCBhbmQgY2hpbGQgbm9kZXMgb25seS5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnkgb3RoZXIgdmFsdWUgcmV0dXJucyBib3RoIHBhcmVudCBhbmQgY2hpbGQgbm9kZXMuXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGdldENvbm5lY3RlZE5vZGVzKG5vZGVJZCwgZGlyZWN0aW9uKSB7XG4gICAgY29uc3Qgbm9kZUxpc3QgPSBbXTtcbiAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgY29uc3Qgbm9kZU9iaiA9IHt9OyAvLyB1c2VkIHRvIHF1aWNrbHkgY2hlY2sgaWYgbm9kZSBhbHJlYWR5IGV4aXN0c1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBub2RlLmVkZ2VzW2ldO1xuICAgICAgICBpZiAoZGlyZWN0aW9uICE9PSBcInRvXCIgJiYgZWRnZS50b0lkID09IG5vZGUuaWQpIHtcbiAgICAgICAgICAvLyB0aGVzZSBhcmUgZG91YmxlIGVxdWFscyBzaW5jZSBpZHMgY2FuIGJlIG51bWVyaWMgb3Igc3RyaW5nXG4gICAgICAgICAgaWYgKG5vZGVPYmpbZWRnZS5mcm9tSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5vZGVMaXN0LnB1c2goZWRnZS5mcm9tSWQpO1xuICAgICAgICAgICAgbm9kZU9ialtlZGdlLmZyb21JZF0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gIT09IFwiZnJvbVwiICYmIGVkZ2UuZnJvbUlkID09IG5vZGUuaWQpIHtcbiAgICAgICAgICAvLyB0aGVzZSBhcmUgZG91YmxlIGVxdWFscyBzaW5jZSBpZHMgY2FuIGJlIG51bWVyaWMgb3Igc3RyaW5nXG4gICAgICAgICAgaWYgKG5vZGVPYmpbZWRnZS50b0lkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBub2RlTGlzdC5wdXNoKGVkZ2UudG9JZCk7XG4gICAgICAgICAgICBub2RlT2JqW2VkZ2UudG9JZF0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZUxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpZHMgb2YgdGhlIGVkZ2VzIGNvbm5lY3RlZCB0byB0aGlzIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZ2V0Q29ubmVjdGVkRWRnZXMobm9kZUlkKSB7XG4gICAgY29uc3QgZWRnZUxpc3QgPSBbXTtcbiAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVkZ2VMaXN0LnB1c2gobm9kZS5lZGdlc1tpXS5pZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiTm9kZUlkIHByb3ZpZGVkIGZvciBnZXRDb25uZWN0ZWRFZGdlcyBkb2VzIG5vdCBleGlzdC4gUHJvdmlkZWQ6IFwiLFxuICAgICAgICBub2RlSWRcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBlZGdlTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIGEgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICovXG4gIG1vdmVOb2RlKG5vZGVJZCwgeCwgeSkge1xuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS54ID0gTnVtYmVyKHgpO1xuICAgICAgdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0ueSA9IE51bWJlcih5KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwic3RhcnRTaW11bGF0aW9uXCIpO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiTm9kZSBpZCBzdXBwbGllZCB0byBtb3ZlTm9kZSBkb2VzIG5vdCBleGlzdC4gUHJvdmlkZWQ6IFwiLFxuICAgICAgICBub2RlSWRcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5vZGVzSGFuZGxlcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZGVzY3JpcHRvcikge1xuICByZXR1cm4gZGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkICYmIChoYXNPd24oZGVzY3JpcHRvciwgJ3ZhbHVlJykgfHwgaGFzT3duKGRlc2NyaXB0b3IsICd3cml0YWJsZScpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNEYXRhRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1kYXRhLWRlc2NyaXB0b3InKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIGBSZWZsZWN0LmdldGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QuZ2V0XG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzY3JpcHRvciwgcHJvdG90eXBlO1xuICBpZiAoYW5PYmplY3QodGFyZ2V0KSA9PT0gcmVjZWl2ZXIpIHJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gIGlmIChkZXNjcmlwdG9yKSByZXR1cm4gaXNEYXRhRGVzY3JpcHRvcihkZXNjcmlwdG9yKVxuICAgID8gZGVzY3JpcHRvci52YWx1ZVxuICAgIDogZGVzY3JpcHRvci5nZXQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGNhbGwoZGVzY3JpcHRvci5nZXQsIHJlY2VpdmVyKTtcbiAgaWYgKGlzT2JqZWN0KHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSByZXR1cm4gZ2V0KHByb3RvdHlwZSwgcHJvcGVydHlLZXksIHJlY2VpdmVyKTtcbn1cblxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZ2V0OiBnZXRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC5nZXQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlJlZmxlY3QuZ2V0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgX1JlZmxlY3QkZ2V0IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvcmVmbGVjdC9nZXQuanNcIjtcbmltcG9ydCBfYmluZEluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9iaW5kLmpzXCI7XG5pbXBvcnQgX09iamVjdCRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzXCI7XG5pbXBvcnQgc3VwZXJQcm9wQmFzZSBmcm9tIFwiLi9zdXBlclByb3BCYXNlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0KCkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgX1JlZmxlY3QkZ2V0KSB7XG4gICAgdmFyIF9jb250ZXh0O1xuICAgIF9nZXQgPSBfYmluZEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBfUmVmbGVjdCRnZXQpLmNhbGwoX2NvbnRleHQpO1xuICB9IGVsc2Uge1xuICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICB2YXIgYmFzZSA9IHN1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgICBpZiAoIWJhc2UpIHJldHVybjtcbiAgICAgIHZhciBkZXNjID0gX09iamVjdCRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogcmVjZWl2ZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gX2dldC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsICJpbXBvcnQgZ2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vZ2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgd2hpbGUgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpIHtcbiAgICBvYmplY3QgPSBnZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC1oeXBvdCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyICRoeXBvdCA9IE1hdGguaHlwb3Q7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgc3FydCA9IE1hdGguc3FydDtcblxuLy8gQ2hyb21lIDc3IGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9OTU0NlxudmFyIEZPUkNFRCA9ICEhJGh5cG90ICYmICRoeXBvdChJbmZpbml0eSwgTmFOKSAhPT0gSW5maW5pdHk7XG5cbi8vIGBNYXRoLmh5cG90YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5oeXBvdFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlLCBhcml0eTogMiwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBoeXBvdDogZnVuY3Rpb24gaHlwb3QodmFsdWUxLCB2YWx1ZTIpIHtcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIHNxcnQoc3VtKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXRoLmh5cG90Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5NYXRoLmh5cG90O1xuIiwgIi8qKlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogTG9jYXRpb24gb2YgYWxsIHRoZSBlbmRwb2ludCBkcmF3aW5nIHJvdXRpbmVzLlxuICpcbiAqIEV2ZXJ5IGVuZHBvaW50IGhhcyBpdHMgb3duIGRyYXdpbmcgcm91dGluZSwgd2hpY2ggY29udGFpbnMgYW4gZW5kcG9pbnQgZGVmaW5pdGlvbi5cbiAqXG4gKiBUaGUgZW5kcG9pbnQgZGVmaW5pdGlvbnMgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVyaWVzOlxuICpcbiAqIC0gKDAsMCkgaXMgdGhlIGNvbm5lY3Rpb24gcG9pbnQgdG8gdGhlIG5vZGUgaXQgYXR0YWNoZXMgdG9cbiAqIC0gVGhlIGVuZHBvaW50cyBhcmUgb3JpZW50YXRlZCB0byB0aGUgcG9zaXRpdmUgeC1kaXJlY3Rpb25cbiAqIC0gVGhlIGxlbmd0aCBvZiB0aGUgZW5kcG9pbnQgaXMgYXQgbW9zdCAxXG4gKlxuICogQXMgbG9uZyBhcyB0aGUgZW5kcG9pbnQgY2xhc3NlcyByZW1haW4gc2ltcGxlIGFuZCBub3QgdG9vIG51bWVyb3VzLCB0aGV5IHdpbGxcbiAqIGJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBtb2R1bGUuXG4gKiBBbGwgY2xhc3NlcyBoZXJlIGV4Y2VwdCBgRW5kUG9pbnRzYCBzaG91bGQgYmUgY29uc2lkZXJlZCBhcyBwcml2YXRlIHRvIHRoaXMgbW9kdWxlLlxuICpcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiAjIyMgRnVydGhlciBBY3Rpb25zXG4gKlxuICogQWZ0ZXIgYWRkaW5nIGEgbmV3IGVuZHBvaW50IGhlcmUsIHlvdSBhbHNvIG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZyB0aGluZ3M6XG4gKlxuICogLSBBZGQgdGhlIG5ldyBlbmRwb2ludCBuYW1lIHRvIGBuZXR3b3JrL29wdGlvbnMuanNgIGluIGFycmF5IGBlbmRQb2ludHNgLlxuICogLSBBZGQgdGhlIG5ldyBlbmRwb2ludCBuYW1lIHRvIHRoZSBkb2N1bWVudGF0aW9uLlxuICogICBTY2FuIGZvciAnYXJyb3dzLnRvLnR5cGVgIGFuZCBhZGQgaXQgdG8gdGhlIGRlc2NyaXB0aW9uLlxuICogLSBBZGQgdGhlIGVuZHBvaW50IHRvIHRoZSBleGFtcGxlcy4gQXQgdGhlIHZlcnkgbGVhc3QsIGFkZCBpdCB0byBleGFtcGxlXG4gKiAgIGBlZGdlU3R5bGVzL2Fycm93VHlwZXNgLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQgeyBBcnJvd0RhdGEsIFBvaW50IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGRyYXdDaXJjbGUgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuLyoqXG4gKiBDb21tb24gbWV0aG9kcyBmb3IgZW5kcG9pbnRzXG4gKlxuICogQGNsYXNzXG4gKi9cbmNsYXNzIEVuZFBvaW50IHtcbiAgLyoqXG4gICAqIEFwcGx5IHRyYW5zZm9ybWF0aW9uIG9uIHBvaW50cyBmb3IgZGlzcGxheS5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBpcyBkb25lOlxuICAgKiAtIHJvdGF0ZSBieSB0aGUgc3BlY2lmaWVkIGFuZ2xlXG4gICAqIC0gbXVsdGlwbHkgdGhlIChub3JtYWxpemVkKSBjb29yZGluYXRlcyBieSB0aGUgcGFzc2VkIGxlbmd0aFxuICAgKiAtIG9mZnNldCBieSB0aGUgdGFyZ2V0IGNvb3JkaW5hdGVzXG4gICAqXG4gICAqIEBwYXJhbSBwb2ludHMgLSBUaGUgcG9pbnQocykgdG8gYmUgdHJhbnNmb3JtZWQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgcmVzdWx0IG9mIHRoZSB0cmFuc2Zvcm1hdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdHJhbnNmb3JtKHBvaW50czogUG9pbnQgfCBQb2ludFtdLCBhcnJvd0RhdGE6IEFycm93RGF0YSk6IHZvaWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKSB7XG4gICAgICBwb2ludHMgPSBbcG9pbnRzXTtcbiAgICB9XG5cbiAgICBjb25zdCB4ID0gYXJyb3dEYXRhLnBvaW50Lng7XG4gICAgY29uc3QgeSA9IGFycm93RGF0YS5wb2ludC55O1xuICAgIGNvbnN0IGFuZ2xlID0gYXJyb3dEYXRhLmFuZ2xlO1xuICAgIGNvbnN0IGxlbmd0aCA9IGFycm93RGF0YS5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgcCA9IHBvaW50c1tpXTtcbiAgICAgIGNvbnN0IHh0ID0gcC54ICogTWF0aC5jb3MoYW5nbGUpIC0gcC55ICogTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgY29uc3QgeXQgPSBwLnggKiBNYXRoLnNpbihhbmdsZSkgKyBwLnkgKiBNYXRoLmNvcyhhbmdsZSk7XG5cbiAgICAgIHAueCA9IHggKyBsZW5ndGggKiB4dDtcbiAgICAgIHAueSA9IHkgKyBsZW5ndGggKiB5dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhdyBhIGNsb3NlZCBwYXRoIHVzaW5nIHRoZSBnaXZlbiByZWFsIGNvb3JkaW5hdGVzLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHBhdGggd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIHBvaW50cyAtIFRoZSBwb2ludHMgb2YgdGhlIHBhdGguXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXdQYXRoKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBwb2ludHM6IFBvaW50W10pOiB2b2lkIHtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyhwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnkpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjdHgubGluZVRvKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XG4gICAgfVxuICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGFycm93IGVuZHBvaW50LlxuICovXG5jbGFzcyBJbWFnZSBleHRlbmRzIEVuZFBvaW50IHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBGYWxzZSBhcyB0aGVyZSBpcyBubyB3YXkgdG8gZmlsbCBhbiBpbWFnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiBmYWxzZSB7XG4gICAgaWYgKGFycm93RGF0YS5pbWFnZSkge1xuICAgICAgY3R4LnNhdmUoKTtcblxuICAgICAgY3R4LnRyYW5zbGF0ZShhcnJvd0RhdGEucG9pbnQueCwgYXJyb3dEYXRhLnBvaW50LnkpO1xuICAgICAgY3R4LnJvdGF0ZShNYXRoLlBJIC8gMiArIGFycm93RGF0YS5hbmdsZSk7XG5cbiAgICAgIGNvbnN0IHdpZHRoID1cbiAgICAgICAgYXJyb3dEYXRhLmltYWdlV2lkdGggIT0gbnVsbFxuICAgICAgICAgID8gYXJyb3dEYXRhLmltYWdlV2lkdGhcbiAgICAgICAgICA6IGFycm93RGF0YS5pbWFnZS53aWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodCA9XG4gICAgICAgIGFycm93RGF0YS5pbWFnZUhlaWdodCAhPSBudWxsXG4gICAgICAgICAgPyBhcnJvd0RhdGEuaW1hZ2VIZWlnaHRcbiAgICAgICAgICA6IGFycm93RGF0YS5pbWFnZS5oZWlnaHQ7XG5cbiAgICAgIGFycm93RGF0YS5pbWFnZS5kcmF3SW1hZ2VBdFBvc2l0aW9uKFxuICAgICAgICBjdHgsXG4gICAgICAgIDEsIC8vIHNjYWxlXG4gICAgICAgIC13aWR0aCAvIDIsIC8vIHhcbiAgICAgICAgMCwgLy8geVxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICApO1xuXG4gICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGFycm93IGVuZHBvaW50LlxuICovXG5jbGFzcyBBcnJvdyBleHRlbmRzIEVuZFBvaW50IHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvLyBOb3JtYWxpemVkIHBvaW50cyBvZiBjbG9zZWQgcGF0aCwgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZHJhd24uXG4gICAgLy8gKDAsIDApIGlzIHRoZSBhdHRhY2htZW50IHBvaW50LCBhbmQgdGhlIHBvaW50IGFyb3VuZCB3aGljaCBzaG91bGQgYmUgcm90YXRlZFxuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgICAgeyB4OiAtMSwgeTogMC4zIH0sXG4gICAgICB7IHg6IC0wLjksIHk6IDAgfSxcbiAgICAgIHsgeDogLTEsIHk6IC0wLjMgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGNyb3cgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIENyb3cge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIC8vIE5vcm1hbGl6ZWQgcG9pbnRzIG9mIGNsb3NlZCBwYXRoLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkcmF3bi5cbiAgICAvLyAoMCwgMCkgaXMgdGhlIGF0dGFjaG1lbnQgcG9pbnQsIGFuZCB0aGUgcG9pbnQgYXJvdW5kIHdoaWNoIHNob3VsZCBiZSByb3RhdGVkXG4gICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgeyB4OiAtMSwgeTogMCB9LFxuICAgICAgeyB4OiAwLCB5OiAwLjMgfSxcbiAgICAgIHsgeDogLTAuNCwgeTogMCB9LFxuICAgICAgeyB4OiAwLCB5OiAtMC4zIH0sXG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgRW5kUG9pbnQuZHJhd1BhdGgoY3R4LCBwb2ludHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBjdXJ2ZSBlbmRwb2ludC5cbiAqL1xuY2xhc3MgQ3VydmUge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIC8vIE5vcm1hbGl6ZWQgcG9pbnRzIG9mIGNsb3NlZCBwYXRoLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkcmF3bi5cbiAgICAvLyAoMCwgMCkgaXMgdGhlIGF0dGFjaG1lbnQgcG9pbnQsIGFuZCB0aGUgcG9pbnQgYXJvdW5kIHdoaWNoIHNob3VsZCBiZSByb3RhdGVkXG4gICAgY29uc3QgcG9pbnQgPSB7IHg6IC0wLjQsIHk6IDAgfTtcbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnQsIGFycm93RGF0YSk7XG5cbiAgICAvLyBVcGRhdGUgZW5kcG9pbnQgc3R5bGUgZm9yIGRyYXdpbmcgdHJhbnNwYXJlbnQgYXJjLlxuICAgIGN0eC5zdHJva2VTdHlsZSA9IGN0eC5maWxsU3R5bGU7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLCAwLCAwLCAwKVwiO1xuXG4gICAgLy8gRGVmaW5lIGN1cnZlIGVuZHBvaW50IGFzIHNlbWljaXJjbGUuXG4gICAgY29uc3QgcGkgPSBNYXRoLlBJO1xuICAgIGNvbnN0IHN0YXJ0QW5nbGUgPSBhcnJvd0RhdGEuYW5nbGUgLSBwaSAvIDI7XG4gICAgY29uc3QgZW5kQW5nbGUgPSBhcnJvd0RhdGEuYW5nbGUgKyBwaSAvIDI7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5hcmMoXG4gICAgICBwb2ludC54LFxuICAgICAgcG9pbnQueSxcbiAgICAgIGFycm93RGF0YS5sZW5ndGggKiAwLjQsXG4gICAgICBzdGFydEFuZ2xlLFxuICAgICAgZW5kQW5nbGUsXG4gICAgICBmYWxzZVxuICAgICk7XG4gICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBpbnZlcnRlZCBjdXJ2ZSBlbmRwb2ludC5cbiAqL1xuY2xhc3MgSW52ZXJ0ZWRDdXJ2ZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludCA9IHsgeDogLTAuMywgeTogMCB9O1xuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludCwgYXJyb3dEYXRhKTtcblxuICAgIC8vIFVwZGF0ZSBlbmRwb2ludCBzdHlsZSBmb3IgZHJhd2luZyB0cmFuc3BhcmVudCBhcmMuXG4gICAgY3R4LnN0cm9rZVN0eWxlID0gY3R4LmZpbGxTdHlsZTtcbiAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2JhKDAsIDAsIDAsIDApXCI7XG5cbiAgICAvLyBEZWZpbmUgaW52ZXJ0ZWQgY3VydmUgZW5kcG9pbnQgYXMgc2VtaWNpcmNsZS5cbiAgICBjb25zdCBwaSA9IE1hdGguUEk7XG4gICAgY29uc3Qgc3RhcnRBbmdsZSA9IGFycm93RGF0YS5hbmdsZSArIHBpIC8gMjtcbiAgICBjb25zdCBlbmRBbmdsZSA9IGFycm93RGF0YS5hbmdsZSArICgzICogcGkpIC8gMjtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyhcbiAgICAgIHBvaW50LngsXG4gICAgICBwb2ludC55LFxuICAgICAgYXJyb3dEYXRhLmxlbmd0aCAqIDAuNCxcbiAgICAgIHN0YXJ0QW5nbGUsXG4gICAgICBlbmRBbmdsZSxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIHRyaW5hZ2xlIGVuZHBvaW50LlxuICovXG5jbGFzcyBUcmlhbmdsZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IDAuMDIsIHk6IDAgfSxcbiAgICAgIHsgeDogLTEsIHk6IDAuMyB9LFxuICAgICAgeyB4OiAtMSwgeTogLTAuMyB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgaW52ZXJ0ZWQgdHJpbmFnbGUgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIEludmVydGVkVHJpYW5nbGUge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIC8vIE5vcm1hbGl6ZWQgcG9pbnRzIG9mIGNsb3NlZCBwYXRoLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkcmF3bi5cbiAgICAvLyAoMCwgMCkgaXMgdGhlIGF0dGFjaG1lbnQgcG9pbnQsIGFuZCB0aGUgcG9pbnQgYXJvdW5kIHdoaWNoIHNob3VsZCBiZSByb3RhdGVkXG4gICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgeyB4OiAwLCB5OiAwLjMgfSxcbiAgICAgIHsgeDogMCwgeTogLTAuMyB9LFxuICAgICAgeyB4OiAtMSwgeTogMCB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgY2lyY2xlIGVuZHBvaW50LlxuICovXG5jbGFzcyBDaXJjbGUge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIGNvbnN0IHBvaW50ID0geyB4OiAtMC40LCB5OiAwIH07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnQsIGFycm93RGF0YSk7XG4gICAgZHJhd0NpcmNsZShjdHgsIHBvaW50LngsIHBvaW50LnksIGFycm93RGF0YS5sZW5ndGggKiAwLjQpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBiYXIgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIEJhciB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLypcbiAgICB2YXIgcG9pbnRzID0gW1xuICAgICAge3g6MCwgeTowLjV9LFxuICAgICAge3g6MCwgeTotMC41fVxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XG4gICAgY3R4LmxpbmVUbyhwb2ludHNbMV0ueCwgcG9pbnRzWzFdLnkpO1xuICAgIGN0eC5zdHJva2UoKTtcbiovXG5cbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IDAsIHk6IDAuNSB9LFxuICAgICAgeyB4OiAwLCB5OiAtMC41IH0sXG4gICAgICB7IHg6IC0wLjE1LCB5OiAtMC41IH0sXG4gICAgICB7IHg6IC0wLjE1LCB5OiAwLjUgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGJveCBlbmRwb2ludC5cbiAqL1xuY2xhc3MgQm94IHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IDAsIHk6IDAuMyB9LFxuICAgICAgeyB4OiAwLCB5OiAtMC4zIH0sXG4gICAgICB7IHg6IC0wLjYsIHk6IC0wLjMgfSxcbiAgICAgIHsgeDogLTAuNiwgeTogMC4zIH0sXG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgRW5kUG9pbnQuZHJhd1BhdGgoY3R4LCBwb2ludHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBkaWFtb25kIGVuZHBvaW50LlxuICovXG5jbGFzcyBEaWFtb25kIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIHsgeDogLTAuNSwgeTogLTAuMyB9LFxuICAgICAgeyB4OiAtMSwgeTogMCB9LFxuICAgICAgeyB4OiAtMC41LCB5OiAwLjMgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIHZlZSBlbmRwb2ludC5cbiAqL1xuY2xhc3MgVmVlIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvLyBOb3JtYWxpemVkIHBvaW50cyBvZiBjbG9zZWQgcGF0aCwgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZHJhd24uXG4gICAgLy8gKDAsIDApIGlzIHRoZSBhdHRhY2htZW50IHBvaW50LCBhbmQgdGhlIHBvaW50IGFyb3VuZCB3aGljaCBzaG91bGQgYmUgcm90YXRlZFxuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogLTEsIHk6IDAuMyB9LFxuICAgICAgeyB4OiAtMC41LCB5OiAwIH0sXG4gICAgICB7IHg6IC0xLCB5OiAtMC4zIH0sXG4gICAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGVuZHBvaW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVuZFBvaW50cyB7XG4gIC8qKlxuICAgKiBEcmF3IGFuIGVuZHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCB0eXBlO1xuICAgIGlmIChhcnJvd0RhdGEudHlwZSkge1xuICAgICAgdHlwZSA9IGFycm93RGF0YS50eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiaW1hZ2VcIjpcbiAgICAgICAgcmV0dXJuIEltYWdlLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuICAgICAgY2FzZSBcImNpcmNsZVwiOlxuICAgICAgICByZXR1cm4gQ2lyY2xlLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuICAgICAgY2FzZSBcImJveFwiOlxuICAgICAgICByZXR1cm4gQm94LmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuICAgICAgY2FzZSBcImNyb3dcIjpcbiAgICAgICAgcmV0dXJuIENyb3cuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiY3VydmVcIjpcbiAgICAgICAgcmV0dXJuIEN1cnZlLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuICAgICAgY2FzZSBcImRpYW1vbmRcIjpcbiAgICAgICAgcmV0dXJuIERpYW1vbmQuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiaW52X2N1cnZlXCI6XG4gICAgICAgIHJldHVybiBJbnZlcnRlZEN1cnZlLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuICAgICAgY2FzZSBcInRyaWFuZ2xlXCI6XG4gICAgICAgIHJldHVybiBUcmlhbmdsZS5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJpbnZfdHJpYW5nbGVcIjpcbiAgICAgICAgcmV0dXJuIEludmVydGVkVHJpYW5nbGUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiYmFyXCI6XG4gICAgICAgIHJldHVybiBCYXIuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwidmVlXCI6XG4gICAgICAgIHJldHVybiBWZWUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiYXJyb3dcIjogLy8gZmFsbC10aHJvdWdoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gQXJyb3cuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgb3ZlcnJpZGVPcGFjaXR5IH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgRW5kUG9pbnRzIH0gZnJvbSBcIi4vZW5kLXBvaW50c1wiO1xuaW1wb3J0IHtcbiAgQXJyb3dEYXRhLFxuICBBcnJvd0RhdGFXaXRoQ29yZSxcbiAgQXJyb3dUeXBlLFxuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgRWRnZVR5cGUsXG4gIElkLFxuICBMYWJlbCxcbiAgRWRnZU9wdGlvbnMsXG4gIFBvaW50LFxuICBQb2ludFQsXG4gIFNlbGVjdGl2ZVJlcXVpcmVkLFxuICBWQm9keSxcbiAgVk5vZGUsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBkcmF3RGFzaGVkTGluZSB9IGZyb20gXCIuL3NoYXBlc1wiO1xuaW1wb3J0IHsgZ2V0U2VsZlJlZkNvb3JkaW5hdGVzIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9Db21wb25lbnRVdGlsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmluZEJvcmRlclBvc2l0aW9uT3B0aW9uczxWaWE+IHtcbiAgdmlhOiBWaWE7XG59XG5leHBvcnQgaW50ZXJmYWNlIEZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZU9wdGlvbnMge1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgbG93OiBudW1iZXI7XG4gIGhpZ2g6IG51bWJlcjtcbiAgZGlyZWN0aW9uOiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIEJhc2UgQ2xhc3MgZm9yIGFsbCBlZGdlcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVkZ2VCYXNlPFZpYSA9IHVuZGVmaW5lZD4gaW1wbGVtZW50cyBFZGdlVHlwZSB7XG4gIHB1YmxpYyBmcm9tITogVk5vZGU7IC8vIEluaXRpYWxpemVkIGluIHNldE9wdGlvbnNcbiAgcHVibGljIGZyb21Qb2ludDogUG9pbnQ7XG4gIHB1YmxpYyB0byE6IFZOb2RlOyAvLyBJbml0aWFsaXplZCBpbiBzZXRPcHRpb25zXG4gIHB1YmxpYyB0b1BvaW50OiBQb2ludDtcbiAgcHVibGljIHZpYT86IFZOb2RlO1xuXG4gIHB1YmxpYyBjb2xvcjogdW5rbm93biA9IHt9O1xuICBwdWJsaWMgY29sb3JEaXJ0eSA9IHRydWU7XG4gIHB1YmxpYyBpZCE6IElkOyAvLyBJbml0aWFsaXplZCBpbiBzZXRPcHRpb25zXG4gIHB1YmxpYyBvcHRpb25zITogRWRnZU9wdGlvbnM7IC8vIEluaXRpYWxpemVkIGluIHNldE9wdGlvbnNcbiAgcHVibGljIGhvdmVyV2lkdGggPSAxLjU7XG4gIHB1YmxpYyBzZWxlY3Rpb25XaWR0aCA9IDI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIF9ib2R5IC0gVGhlIGJvZHkgb2YgdGhlIG5ldHdvcmsuXG4gICAqIEBwYXJhbSBfbGFiZWxNb2R1bGUgLSBMYWJlbCBtb2R1bGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgb3B0aW9uczogRWRnZU9wdGlvbnMsXG4gICAgcHJvdGVjdGVkIF9ib2R5OiBWQm9keSxcbiAgICBwcm90ZWN0ZWQgX2xhYmVsTW9kdWxlOiBMYWJlbFxuICApIHtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICB0aGlzLmZyb21Qb2ludCA9IHRoaXMuZnJvbTtcbiAgICB0aGlzLnRvUG9pbnQgPSB0aGlzLnRvO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBib3JkZXIgb2YgdGhlIG5vZGUgYW5kIHRoZSBlZGdlLlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlIChlaXRoZXIgZnJvbSBvciB0byBub2RlIG9mIHRoZSBlZGdlKS5cbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBib3JkZXIgb2YgdGhlIG5vZGUgYW5kIHRoZSBlZGdlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IF9maW5kQm9yZGVyUG9zaXRpb24oXG4gICAgbm9kZTogVk5vZGUsXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgb3B0aW9ucz86IEZpbmRCb3JkZXJQb3NpdGlvbk9wdGlvbnM8VmlhPlxuICApOiBQb2ludFQ7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhZGRpdGlvbmFsIHBvaW50KHMpIHRoZSBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50KHMpIHRoZSBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGdldFZpYU5vZGUoKTogVmlhO1xuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZ2V0UG9pbnQocG9zaXRpb246IG51bWJlciwgdmlhTm9kZT86IFZpYSk6IFBvaW50O1xuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgY29ubmVjdCgpOiB2b2lkIHtcbiAgICB0aGlzLmZyb20gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy5mcm9tXTtcbiAgICB0aGlzLnRvID0gdGhpcy5fYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMudG9dO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBjbGVhbnVwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbmV3IGVkZ2Ugb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgbmV3IGVkZ2Ugb3B0aW9ucyBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zOiBFZGdlT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICB0aGlzLmZyb20gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy5mcm9tXTtcbiAgICB0aGlzLnRvID0gdGhpcy5fYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMudG9dO1xuICAgIHRoaXMuaWQgPSB0aGlzLm9wdGlvbnMuaWQ7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGRyYXdMaW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIHwgXCJjb2xvclwiXG4gICAgICB8IFwib3BhY2l0eVwiXG4gICAgICB8IFwic2hhZG93Q29sb3JcIlxuICAgICAgfCBcInNoYWRvd1NpemVcIlxuICAgICAgfCBcInNoYWRvd1hcIlxuICAgICAgfCBcInNoYWRvd1lcIlxuICAgICAgfCBcIndpZHRoXCJcbiAgICA+LFxuICAgIF9zZWxlY3RlZD86IGJvb2xlYW4sXG4gICAgX2hvdmVyPzogYm9vbGVhbixcbiAgICB2aWFOb2RlOiBWaWEgPSB0aGlzLmdldFZpYU5vZGUoKVxuICApOiB2b2lkIHtcbiAgICAvLyBzZXQgc3R5bGVcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmdldENvbG9yKGN0eCwgdmFsdWVzKTtcbiAgICBjdHgubGluZVdpZHRoID0gdmFsdWVzLndpZHRoO1xuXG4gICAgaWYgKHZhbHVlcy5kYXNoZXMgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9kcmF3RGFzaGVkTGluZShjdHgsIHZhbHVlcywgdmlhTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RyYXdMaW5lKGN0eCwgdmFsdWVzLCB2aWFOb2RlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhdyBhIGxpbmUgd2l0aCBnaXZlbiBzdHlsZSBiZXR3ZWVuIHR3byBub2RlcyB0aHJvdWdoIHN1cHBsaWVkIG5vZGUocykuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgbGlrZSBjb2xvciwgb3BhY2l0eSBvciBzaGFkb3cuXG4gICAqIEBwYXJhbSB2aWFOb2RlIC0gQWRkaXRpb25hbCBjb250cm9sIHBvaW50KHMpIGZvciB0aGUgZWRnZS5cbiAgICogQHBhcmFtIGZyb21Qb2ludCAtIFRPRE86IFNlZW1zIGlnbm9yZWQsIHJlbW92ZT9cbiAgICogQHBhcmFtIHRvUG9pbnQgLSBUT0RPOiBTZWVtcyBpZ25vcmVkLCByZW1vdmU/XG4gICAqL1xuICBwcml2YXRlIF9kcmF3TGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcInNoYWRvd0NvbG9yXCIgfCBcInNoYWRvd1NpemVcIiB8IFwic2hhZG93WFwiIHwgXCJzaGFkb3dZXCJcbiAgICA+LFxuICAgIHZpYU5vZGU6IFZpYSxcbiAgICBmcm9tUG9pbnQ/OiBQb2ludCxcbiAgICB0b1BvaW50PzogUG9pbnRcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZnJvbSAhPSB0aGlzLnRvKSB7XG4gICAgICAvLyBkcmF3IGxpbmVcbiAgICAgIHRoaXMuX2xpbmUoY3R4LCB2YWx1ZXMsIHZpYU5vZGUsIGZyb21Qb2ludCwgdG9Qb2ludCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IFt4LCB5LCByYWRpdXNdID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YShjdHgpO1xuICAgICAgdGhpcy5fY2lyY2xlKGN0eCwgdmFsdWVzLCB4LCB5LCByYWRpdXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGEgZGFzaGVkIGxpbmUgd2l0aCBnaXZlbiBzdHlsZSBiZXR3ZWVuIHR3byBub2RlcyB0aHJvdWdoIHN1cHBsaWVkIG5vZGUocykuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgbGlrZSBjb2xvciwgb3BhY2l0eSBvciBzaGFkb3cuXG4gICAqIEBwYXJhbSB2aWFOb2RlIC0gQWRkaXRpb25hbCBjb250cm9sIHBvaW50KHMpIGZvciB0aGUgZWRnZS5cbiAgICogQHBhcmFtIF9mcm9tUG9pbnQgLSBJZ25vcmVkIChUT0RPOiByZW1vdmUgaW4gdGhlIGZ1dHVyZSkuXG4gICAqIEBwYXJhbSBfdG9Qb2ludCAtIElnbm9yZWQgKFRPRE86IHJlbW92ZSBpbiB0aGUgZnV0dXJlKS5cbiAgICovXG4gIHByaXZhdGUgX2RyYXdEYXNoZWRMaW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwic2hhZG93Q29sb3JcIiB8IFwic2hhZG93U2l6ZVwiIHwgXCJzaGFkb3dYXCIgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZTogVmlhLFxuICAgIF9mcm9tUG9pbnQ/OiBQb2ludCxcbiAgICBfdG9Qb2ludD86IFBvaW50XG4gICk6IHZvaWQge1xuICAgIGN0eC5saW5lQ2FwID0gXCJyb3VuZFwiO1xuICAgIGNvbnN0IHBhdHRlcm4gPSBBcnJheS5pc0FycmF5KHZhbHVlcy5kYXNoZXMpID8gdmFsdWVzLmRhc2hlcyA6IFs1LCA1XTtcblxuICAgIC8vIG9ubHkgZmlyZWZveCBhbmQgY2hyb21lIHN1cHBvcnQgdGhpcyBtZXRob2QsIGVsc2Ugd2UgdXNlIHRoZSBsZWdhY3kgb25lLlxuICAgIGlmIChjdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3R4LnNhdmUoKTtcblxuICAgICAgLy8gc2V0IGRhc2ggc2V0dGluZ3MgZm9yIGNocm9tZSBvciBmaXJlZm94XG4gICAgICBjdHguc2V0TGluZURhc2gocGF0dGVybik7XG4gICAgICBjdHgubGluZURhc2hPZmZzZXQgPSAwO1xuXG4gICAgICAvLyBkcmF3IHRoZSBsaW5lXG4gICAgICBpZiAodGhpcy5mcm9tICE9IHRoaXMudG8pIHtcbiAgICAgICAgLy8gZHJhdyBsaW5lXG4gICAgICAgIHRoaXMuX2xpbmUoY3R4LCB2YWx1ZXMsIHZpYU5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgW3gsIHksIHJhZGl1c10gPSB0aGlzLl9nZXRDaXJjbGVEYXRhKGN0eCk7XG4gICAgICAgIHRoaXMuX2NpcmNsZShjdHgsIHZhbHVlcywgeCwgeSwgcmFkaXVzKTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVzdG9yZSB0aGUgZGFzaCBzZXR0aW5ncy5cbiAgICAgIGN0eC5zZXRMaW5lRGFzaChbMF0pO1xuICAgICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gMDtcbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVuc3VwcG9ydGluZyBzbW9vdGggbGluZXNcbiAgICAgIGlmICh0aGlzLmZyb20gIT0gdGhpcy50bykge1xuICAgICAgICAvLyBkcmF3IGxpbmVcbiAgICAgICAgZHJhd0Rhc2hlZExpbmUoXG4gICAgICAgICAgY3R4LFxuICAgICAgICAgIHRoaXMuZnJvbS54LFxuICAgICAgICAgIHRoaXMuZnJvbS55LFxuICAgICAgICAgIHRoaXMudG8ueCxcbiAgICAgICAgICB0aGlzLnRvLnksXG4gICAgICAgICAgcGF0dGVyblxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgW3gsIHksIHJhZGl1c10gPSB0aGlzLl9nZXRDaXJjbGVEYXRhKGN0eCk7XG4gICAgICAgIHRoaXMuX2NpcmNsZShjdHgsIHZhbHVlcywgeCwgeSwgcmFkaXVzKTtcbiAgICAgIH1cbiAgICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcblxuICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhdyBhIGxpbmUgd2l0aCBnaXZlbiBzdHlsZSBiZXR3ZWVuIHR3byBub2RlcyB0aHJvdWdoIHN1cHBsaWVkIG5vZGUocykuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgbGlrZSBjb2xvciwgb3BhY2l0eSBvciBzaGFkb3cuXG4gICAqIEBwYXJhbSB2aWFOb2RlIC0gQWRkaXRpb25hbCBjb250cm9sIHBvaW50KHMpIGZvciB0aGUgZWRnZS5cbiAgICogQHBhcmFtIGZyb21Qb2ludCAtIFRPRE86IFNlZW1zIGlnbm9yZWQsIHJlbW92ZT9cbiAgICogQHBhcmFtIHRvUG9pbnQgLSBUT0RPOiBTZWVtcyBpZ25vcmVkLCByZW1vdmU/XG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2xpbmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICB2aWFOb2RlOiBWaWEsXG4gICAgZnJvbVBvaW50PzogUG9pbnQsXG4gICAgdG9Qb2ludD86IFBvaW50XG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBib3JkZXIgb2YgdGhlIG5vZGUgYW5kIHRoZSBlZGdlLlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlIChlaXRoZXIgZnJvbSBvciB0byBub2RlIG9mIHRoZSBlZGdlKS5cbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBib3JkZXIgb2YgdGhlIG5vZGUgYW5kIHRoZSBlZGdlLlxuICAgKi9cbiAgcHVibGljIGZpbmRCb3JkZXJQb3NpdGlvbihcbiAgICBub2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBvcHRpb25zPzogRmluZEJvcmRlclBvc2l0aW9uT3B0aW9uczxWaWE+IHwgRmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlT3B0aW9uc1xuICApOiBQb2ludFQge1xuICAgIGlmICh0aGlzLmZyb20gIT0gdGhpcy50bykge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbihub2RlLCBjdHgsIG9wdGlvbnMgYXMgYW55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZShub2RlLCBjdHgsIG9wdGlvbnMgYXMgYW55KTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGZpbmRCb3JkZXJQb3NpdGlvbnMoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOiB7XG4gICAgZnJvbTogUG9pbnQ7XG4gICAgdG86IFBvaW50O1xuICB9IHtcbiAgICBpZiAodGhpcy5mcm9tICE9IHRoaXMudG8pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZyb206IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbih0aGlzLmZyb20sIGN0eCksXG4gICAgICAgIHRvOiB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb24odGhpcy50bywgY3R4KSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IFt4LCB5XSA9IHRoaXMuX2dldENpcmNsZURhdGEoY3R4KS5zbGljZSgwLCAyKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbTogdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlKHRoaXMuZnJvbSwgY3R4LCB7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5LFxuICAgICAgICAgIGxvdzogMC4yNSxcbiAgICAgICAgICBoaWdoOiAwLjYsXG4gICAgICAgICAgZGlyZWN0aW9uOiAtMSxcbiAgICAgICAgfSksXG4gICAgICAgIHRvOiB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgbG93OiAwLjYsXG4gICAgICAgICAgaGlnaDogMC44LFxuICAgICAgICAgIGRpcmVjdGlvbjogMSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBjZW50ZXIgcG9pbnQgYW5kIHJhZGl1cyBvZiBhbiBlZGdlIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBub2RlIGF0IGJvdGggZW5kcy5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEByZXR1cm5zIGBbeCwgeSwgcmFkaXVzXWBcbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0Q2lyY2xlRGF0YShcbiAgICBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcbiAgKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5zaXplO1xuXG4gICAgaWYgKGN0eCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5mcm9tLnNoYXBlLndpZHRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5mcm9tLnNoYXBlLnJlc2l6ZShjdHgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGdldCBjaXJjbGUgY29vcmRpbmF0ZXNcbiAgICBjb25zdCBjb29yZGluYXRlcyA9IGdldFNlbGZSZWZDb29yZGluYXRlcyhcbiAgICAgIGN0eCxcbiAgICAgIHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlLFxuICAgICAgcmFkaXVzLFxuICAgICAgdGhpcy5mcm9tXG4gICAgKTtcblxuICAgIHJldHVybiBbY29vcmRpbmF0ZXMueCwgY29vcmRpbmF0ZXMueSwgcmFkaXVzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBwb2ludCBvbiBhIGNpcmNsZS5cbiAgICpcbiAgICogQHBhcmFtIHggLSBDZW50ZXIgb2YgdGhlIGNpcmNsZSBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geSAtIENlbnRlciBvZiB0aGUgY2lyY2xlIG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSByYWRpdXMgLSBSYWRpdXMgb2YgdGhlIGNpcmNsZS5cbiAgICogQHBhcmFtIHBvc2l0aW9uIC0gVmFsdWUgYmV0d2VlbiAwIChsaW5lIHN0YXJ0KSBhbmQgMSAobGluZSBlbmQpLlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgcmVxdWVzdGVkIHBvaW50IG9uIHRoZSBjaXJjbGUuXG4gICAqL1xuICBwcml2YXRlIF9wb2ludE9uQ2lyY2xlKFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgcmFkaXVzOiBudW1iZXIsXG4gICAgcG9zaXRpb246IG51bWJlclxuICApOiBQb2ludCB7XG4gICAgY29uc3QgYW5nbGUgPSBwb3NpdGlvbiAqIDIgKiBNYXRoLlBJO1xuICAgIHJldHVybiB7XG4gICAgICB4OiB4ICsgcmFkaXVzICogTWF0aC5jb3MoYW5nbGUpLFxuICAgICAgeTogeSAtIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBib3JkZXIgb2YgdGhlIG5vZGUgYW5kIHRoZSBlZGdlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgYmluYXJ5IHNlYXJjaCB0byBsb29rIGZvciB0aGUgcG9pbnQgd2hlcmUgdGhlIGNpcmNsZSBjcm9zc2VzIHRoZSBib3JkZXIgb2YgdGhlIG5vZGUuXG4gICAqIEBwYXJhbSBuZWFyTm9kZSAtIFRoZSBub2RlIChlaXRoZXIgZnJvbSBvciB0byBub2RlIG9mIHRoZSBlZGdlKS5cbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBib3JkZXIgb2YgdGhlIG5vZGUgYW5kIHRoZSBlZGdlLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlKFxuICAgIG5lYXJOb2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBvcHRpb25zOiBGaW5kQm9yZGVyUG9zaXRpb25DaXJjbGVPcHRpb25zXG4gICk6IFBvaW50VCB7XG4gICAgY29uc3QgeCA9IG9wdGlvbnMueDtcbiAgICBjb25zdCB5ID0gb3B0aW9ucy55O1xuICAgIGxldCBsb3cgPSBvcHRpb25zLmxvdztcbiAgICBsZXQgaGlnaCA9IG9wdGlvbnMuaGlnaDtcbiAgICBjb25zdCBkaXJlY3Rpb24gPSBvcHRpb25zLmRpcmVjdGlvbjtcblxuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5zaXplO1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IDAuMDU7XG4gICAgbGV0IHBvczogUG9pbnQ7XG5cbiAgICBsZXQgbWlkZGxlID0gKGxvdyArIGhpZ2gpICogMC41O1xuXG4gICAgbGV0IGVuZFBvaW50T2Zmc2V0ID0gMDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmFycm93U3RyaWtldGhyb3VnaCA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgZW5kUG9pbnRPZmZzZXQgPSB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbTtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAxKSB7XG4gICAgICAgIGVuZFBvaW50T2Zmc2V0ID0gdGhpcy5vcHRpb25zLmVuZFBvaW50T2Zmc2V0LnRvO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xuICAgIGRvIHtcbiAgICAgIG1pZGRsZSA9IChsb3cgKyBoaWdoKSAqIDAuNTtcblxuICAgICAgcG9zID0gdGhpcy5fcG9pbnRPbkNpcmNsZSh4LCB5LCByYWRpdXMsIG1pZGRsZSk7XG4gICAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIobmVhck5vZGUueSAtIHBvcy55LCBuZWFyTm9kZS54IC0gcG9zLngpO1xuXG4gICAgICBjb25zdCBkaXN0YW5jZVRvQm9yZGVyID1cbiAgICAgICAgbmVhck5vZGUuZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSArIGVuZFBvaW50T2Zmc2V0O1xuXG4gICAgICBjb25zdCBkaXN0YW5jZVRvUG9pbnQgPSBNYXRoLnNxcnQoXG4gICAgICAgIE1hdGgucG93KHBvcy54IC0gbmVhck5vZGUueCwgMikgKyBNYXRoLnBvdyhwb3MueSAtIG5lYXJOb2RlLnksIDIpXG4gICAgICApO1xuICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IGRpc3RhbmNlVG9Cb3JkZXIgLSBkaXN0YW5jZVRvUG9pbnQ7XG4gICAgICBpZiAoTWF0aC5hYnMoZGlmZmVyZW5jZSkgPCB0aHJlc2hvbGQpIHtcbiAgICAgICAgYnJlYWs7IC8vIGZvdW5kXG4gICAgICB9IGVsc2UgaWYgKGRpZmZlcmVuY2UgPiAwKSB7XG4gICAgICAgIC8vIGRpc3RhbmNlIHRvIG5vZGVzIGlzIGxhcmdlciB0aGFuIGRpc3RhbmNlIHRvIGJvcmRlciAtLT4gdCBuZWVkcyB0byBiZSBiaWdnZXIgaWYgd2UncmUgbG9va2luZyBhdCB0aGUgdG8gbm9kZS5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA+IDApIHtcbiAgICAgICAgICBsb3cgPSBtaWRkbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaCA9IG1pZGRsZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA+IDApIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICArK2l0ZXJhdGlvbjtcbiAgICB9IHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wb3MsXG4gICAgICB0OiBtaWRkbGUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxpbmUgd2lkdGggb2YgdGhlIGVkZ2UuIERlcGVuZHMgb24gd2lkdGggYW5kIHdoZXRoZXIgb25lIG9mIHRoZSBjb25uZWN0ZWQgbm9kZXMgaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzZWxlY3RlZCAtIERldGVybWluZXMgd2hldGVyIHRoZSBsaW5lIGlzIHNlbGVjdGVkLlxuICAgKiBAcGFyYW0gaG92ZXIgLSBEZXRlcm1pbmVzIHdoZXRlciB0aGUgbGluZSBpcyBiZWluZyBob3ZlcmVkLCBvbmx5IGFwcGxpZXMgaWYgc2VsZWN0ZWQgaXMgZmFsc2UuXG4gICAqIEByZXR1cm5zIFRoZSB3aWR0aCBvZiB0aGUgbGluZS5cbiAgICovXG4gIHB1YmxpYyBnZXRMaW5lV2lkdGgoc2VsZWN0ZWQ6IGJvb2xlYW4sIGhvdmVyOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICBpZiAoc2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLnNlbGVjdGlvbldpZHRoLCAwLjMgLyB0aGlzLl9ib2R5LnZpZXcuc2NhbGUpO1xuICAgIH0gZWxzZSBpZiAoaG92ZXIgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmhvdmVyV2lkdGgsIDAuMyAvIHRoaXMuX2JvZHkudmlldy5zY2FsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLm9wdGlvbnMud2lkdGgsIDAuMyAvIHRoaXMuX2JvZHkudmlldy5zY2FsZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGNvbG9yIG9yIGdyYWRpZW50IGZvciBnaXZlbiBlZGdlLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIHZhbHVlcyAtIEZvcm1hdHRpbmcgdmFsdWVzIGxpa2UgY29sb3IsIG9wYWNpdHkgb3Igc2hhZG93LlxuICAgKiBAcGFyYW0gX3NlbGVjdGVkIC0gSWdub3JlZCAoVE9ETzogcmVtb3ZlIGluIHRoZSBmdXR1cmUpLlxuICAgKiBAcGFyYW0gX2hvdmVyIC0gSWdub3JlZCAoVE9ETzogcmVtb3ZlIGluIHRoZSBmdXR1cmUpLlxuICAgKiBAcmV0dXJucyBDb2xvciBzdHJpbmcgaWYgc2luZ2xlIGNvbG9yIGlzIGluaGVyaXRlZCBvciBncmFkaWVudCBpZiB0d28uXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29sb3IoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxFZGdlRm9ybWF0dGluZ1ZhbHVlcywgXCJjb2xvclwiIHwgXCJvcGFjaXR5XCI+XG4gICk6IHN0cmluZyB8IENhbnZhc0dyYWRpZW50IHtcbiAgICBpZiAodmFsdWVzLmluaGVyaXRzQ29sb3IgIT09IGZhbHNlKSB7XG4gICAgICAvLyB3aGVuIHRoaXMgaXMgYSBsb29wIGVkZ2UsIGp1c3QgdXNlIHRoZSAnZnJvbScgbWV0aG9kXG4gICAgICBpZiAodmFsdWVzLmluaGVyaXRzQ29sb3IgPT09IFwiYm90aFwiICYmIHRoaXMuZnJvbS5pZCAhPT0gdGhpcy50by5pZCkge1xuICAgICAgICBjb25zdCBncmQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoXG4gICAgICAgICAgdGhpcy5mcm9tLngsXG4gICAgICAgICAgdGhpcy5mcm9tLnksXG4gICAgICAgICAgdGhpcy50by54LFxuICAgICAgICAgIHRoaXMudG8ueVxuICAgICAgICApO1xuICAgICAgICBsZXQgZnJvbUNvbG9yID0gdGhpcy5mcm9tLm9wdGlvbnMuY29sb3IuaGlnaGxpZ2h0LmJvcmRlcjtcbiAgICAgICAgbGV0IHRvQ29sb3IgPSB0aGlzLnRvLm9wdGlvbnMuY29sb3IuaGlnaGxpZ2h0LmJvcmRlcjtcblxuICAgICAgICBpZiAodGhpcy5mcm9tLnNlbGVjdGVkID09PSBmYWxzZSAmJiB0aGlzLnRvLnNlbGVjdGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIGZyb21Db2xvciA9IG92ZXJyaWRlT3BhY2l0eShcbiAgICAgICAgICAgIHRoaXMuZnJvbS5vcHRpb25zLmNvbG9yLmJvcmRlcixcbiAgICAgICAgICAgIHZhbHVlcy5vcGFjaXR5XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0b0NvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KFxuICAgICAgICAgICAgdGhpcy50by5vcHRpb25zLmNvbG9yLmJvcmRlcixcbiAgICAgICAgICAgIHZhbHVlcy5vcGFjaXR5XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZyb20uc2VsZWN0ZWQgPT09IHRydWUgJiYgdGhpcy50by5zZWxlY3RlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0b0NvbG9yID0gdGhpcy50by5vcHRpb25zLmNvbG9yLmJvcmRlcjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZyb20uc2VsZWN0ZWQgPT09IGZhbHNlICYmIHRoaXMudG8uc2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICBmcm9tQ29sb3IgPSB0aGlzLmZyb20ub3B0aW9ucy5jb2xvci5ib3JkZXI7XG4gICAgICAgIH1cbiAgICAgICAgZ3JkLmFkZENvbG9yU3RvcCgwLCBmcm9tQ29sb3IpO1xuICAgICAgICBncmQuYWRkQ29sb3JTdG9wKDEsIHRvQ29sb3IpO1xuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIHRoaXMgcmV0dXJucyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuICAgICAgICByZXR1cm4gZ3JkO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVzLmluaGVyaXRzQ29sb3IgPT09IFwidG9cIikge1xuICAgICAgICByZXR1cm4gb3ZlcnJpZGVPcGFjaXR5KHRoaXMudG8ub3B0aW9ucy5jb2xvci5ib3JkZXIsIHZhbHVlcy5vcGFjaXR5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwiZnJvbVwiXG4gICAgICAgIHJldHVybiBvdmVycmlkZU9wYWNpdHkodGhpcy5mcm9tLm9wdGlvbnMuY29sb3IuYm9yZGVyLCB2YWx1ZXMub3BhY2l0eSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvdmVycmlkZU9wYWNpdHkodmFsdWVzLmNvbG9yLCB2YWx1ZXMub3BhY2l0eSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERyYXcgYSBsaW5lIGZyb20gYSBub2RlIHRvIGl0c2VsZiwgYSBjaXJjbGUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgbGlrZSBjb2xvciwgb3BhY2l0eSBvciBzaGFkb3cuXG4gICAqIEBwYXJhbSB4IC0gQ2VudGVyIG9mIHRoZSBjaXJjbGUgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkgLSBDZW50ZXIgb2YgdGhlIGNpcmNsZSBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0gcmFkaXVzIC0gUmFkaXVzIG9mIHRoZSBjaXJjbGUuXG4gICAqL1xuICBwcml2YXRlIF9jaXJjbGUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJzaGFkb3dDb2xvclwiIHwgXCJzaGFkb3dTaXplXCIgfCBcInNoYWRvd1hcIiB8IFwic2hhZG93WVwiXG4gICAgPixcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHJhZGl1czogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICB0aGlzLmVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG5cbiAgICAvL2Z1bGwgY2lyY2xlXG4gICAgbGV0IGFuZ2xlRnJvbSA9IDA7XG4gICAgbGV0IGFuZ2xlVG8gPSBNYXRoLlBJICogMjtcblxuICAgIGlmICghdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UucmVuZGVyQmVoaW5kVGhlTm9kZSkge1xuICAgICAgLy9yZW5kZXIgb25seSBwYXJ0cyB3aGljaCBhcmUgbm90IG92ZXJsYXBpbmcgd2l0aCBwYXJlbnQgbm9kZVxuICAgICAgLy9uZWVkIHRvIGZpbmQgeCx5IG9mIGZyb20gcG9pbnQgYW5kIHgseSB0byBwb2ludFxuICAgICAgLy9jYWxjdWxhdGluZyByYWRpYW5zXG4gICAgICBjb25zdCBsb3cgPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZTtcbiAgICAgIGNvbnN0IGhpZ2ggPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZSArIE1hdGguUEk7XG4gICAgICBjb25zdCBwb2ludFRGcm9tID0gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlKHRoaXMuZnJvbSwgY3R4LCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIGxvdyxcbiAgICAgICAgaGlnaCxcbiAgICAgICAgZGlyZWN0aW9uOiAtMSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcG9pbnRUVG8gPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbG93LFxuICAgICAgICBoaWdoLFxuICAgICAgICBkaXJlY3Rpb246IDEsXG4gICAgICB9KTtcbiAgICAgIGFuZ2xlRnJvbSA9IE1hdGguYXRhbjIocG9pbnRURnJvbS55IC0geSwgcG9pbnRURnJvbS54IC0geCk7XG4gICAgICBhbmdsZVRvID0gTWF0aC5hdGFuMihwb2ludFRUby55IC0geSwgcG9pbnRUVG8ueCAtIHgpO1xuICAgIH1cblxuICAgIC8vIGRyYXcgYSBjaXJjbGVcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyh4LCB5LCByYWRpdXMsIGFuZ2xlRnJvbSwgYW5nbGVUbywgZmFsc2UpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIC8vIGRpc2FibGUgc2hhZG93cyBmb3Igb3RoZXIgZWxlbWVudHMuXG4gICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKiBAcmVtYXJrc1xuICAgKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg0OTIxMS9zaG9ydGVzdC1kaXN0YW5jYWUtYmV0d2Vlbi1hLXBvaW50LWFuZC1hLWxpbmUtc2VnbWVudFxuICAgKi9cbiAgcHVibGljIGdldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyXG4gICk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuZnJvbSAhPSB0aGlzLnRvKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RGlzdGFuY2VUb0VkZ2UoeDEsIHkxLCB4MiwgeTIsIHgzLCB5Myk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IFt4LCB5LCByYWRpdXNdID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YSh1bmRlZmluZWQpO1xuICAgICAgY29uc3QgZHggPSB4IC0geDM7XG4gICAgICBjb25zdCBkeSA9IHkgLSB5MztcbiAgICAgIHJldHVybiBNYXRoLmFicyhNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpIC0gcmFkaXVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGEgcG9pbnQgKHgzLCB5MykgYW5kIGEgbGluZSBzZWdtZW50IGZyb20gKHgxLCB5MSkgdG8gKHgyLCB5MikuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODQ5MjExL3Nob3J0ZXN0LWRpc3RhbmNhZS1iZXR3ZWVuLWEtcG9pbnQtYW5kLWEtbGluZS1zZWdtZW50XG4gICAqIEBwYXJhbSB4MSAtIEZpcnN0IGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MSAtIEZpcnN0IGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB4MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTIgLSBTZWNvbmQgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MyAtIFBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0gdmlhIC0gQWRkaXRpb25hbCBjb250cm9sIHBvaW50KHMpIGZvciB0aGUgZWRnZS5cbiAgICogQHJldHVybnMgVGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGxpbmUgc2VnbWVudCBhbmQgdGhlIHBvaW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IF9nZXREaXN0YW5jZVRvRWRnZShcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlcixcbiAgICB2aWE/OiBWaWFcbiAgKTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCAoeDMsIHkzKSBhbmQgYSBsaW5lIHNlZ21lbnQgZnJvbSAoeDEsIHkxKSB0byAoeDIsIHkyKS5cbiAgICpcbiAgICogQHBhcmFtIHgxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEByZXR1cm5zIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBsaW5lIHNlZ21lbnQgYW5kIHRoZSBwb2ludC5cbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0RGlzdGFuY2VUb0xpbmUoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXJcbiAgKTogbnVtYmVyIHtcbiAgICBjb25zdCBweCA9IHgyIC0geDE7XG4gICAgY29uc3QgcHkgPSB5MiAtIHkxO1xuICAgIGNvbnN0IHNvbWV0aGluZyA9IHB4ICogcHggKyBweSAqIHB5O1xuICAgIGxldCB1ID0gKCh4MyAtIHgxKSAqIHB4ICsgKHkzIC0geTEpICogcHkpIC8gc29tZXRoaW5nO1xuXG4gICAgaWYgKHUgPiAxKSB7XG4gICAgICB1ID0gMTtcbiAgICB9IGVsc2UgaWYgKHUgPCAwKSB7XG4gICAgICB1ID0gMDtcbiAgICB9XG5cbiAgICBjb25zdCB4ID0geDEgKyB1ICogcHg7XG4gICAgY29uc3QgeSA9IHkxICsgdSAqIHB5O1xuICAgIGNvbnN0IGR4ID0geCAtIHgzO1xuICAgIGNvbnN0IGR5ID0geSAtIHkzO1xuXG4gICAgLy8jIE5vdGU6IElmIHRoZSBhY3R1YWwgZGlzdGFuY2UgZG9lcyBub3QgbWF0dGVyLFxuICAgIC8vIyBpZiB5b3Ugb25seSB3YW50IHRvIGNvbXBhcmUgd2hhdCB0aGlzIGZ1bmN0aW9uXG4gICAgLy8jIHJldHVybnMgdG8gb3RoZXIgcmVzdWx0cyBvZiB0aGlzIGZ1bmN0aW9uLCB5b3VcbiAgICAvLyMgY2FuIGp1c3QgcmV0dXJuIHRoZSBzcXVhcmVkIGRpc3RhbmNlIGluc3RlYWRcbiAgICAvLyMgKGkuZS4gcmVtb3ZlIHRoZSBzcXJ0KSB0byBnYWluIGEgbGl0dGxlIHBlcmZvcm1hbmNlXG5cbiAgICByZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0QXJyb3dEYXRhKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHBvc2l0aW9uOiBcIm1pZGRsZVwiLFxuICAgIHZpYU5vZGU6IFZOb2RlLFxuICAgIHNlbGVjdGVkOiBib29sZWFuLFxuICAgIGhvdmVyOiBib29sZWFuLFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwibWlkZGxlQXJyb3dUeXBlXCIgfCBcIm1pZGRsZUFycm93U2NhbGVcIiB8IFwid2lkdGhcIlxuICAgID5cbiAgKTogQXJyb3dEYXRhV2l0aENvcmU7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0QXJyb3dEYXRhKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHBvc2l0aW9uOiBcInRvXCIsXG4gICAgdmlhTm9kZTogVk5vZGUsXG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgaG92ZXI6IGJvb2xlYW4sXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJ0b0Fycm93VHlwZVwiIHwgXCJ0b0Fycm93U2NhbGVcIiB8IFwid2lkdGhcIlxuICAgID5cbiAgKTogQXJyb3dEYXRhV2l0aENvcmU7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0QXJyb3dEYXRhKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHBvc2l0aW9uOiBcImZyb21cIixcbiAgICB2aWFOb2RlOiBWTm9kZSxcbiAgICBzZWxlY3RlZDogYm9vbGVhbixcbiAgICBob3ZlcjogYm9vbGVhbixcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcImZyb21BcnJvd1R5cGVcIiB8IFwiZnJvbUFycm93U2NhbGVcIiB8IFwid2lkdGhcIlxuICAgID5cbiAgKTogQXJyb3dEYXRhV2l0aENvcmU7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0QXJyb3dEYXRhKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHBvc2l0aW9uOiBcImZyb21cIiB8IFwidG9cIiB8IFwibWlkZGxlXCIsXG4gICAgdmlhTm9kZTogVk5vZGUsXG4gICAgX3NlbGVjdGVkOiBib29sZWFuLFxuICAgIF9ob3ZlcjogYm9vbGVhbixcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPEVkZ2VGb3JtYXR0aW5nVmFsdWVzLCBcIndpZHRoXCI+XG4gICk6IEFycm93RGF0YVdpdGhDb3JlIHtcbiAgICAvLyBzZXQgbGV0c1xuICAgIGxldCBhbmdsZTogbnVtYmVyO1xuICAgIGxldCBhcnJvd1BvaW50OiBQb2ludDtcbiAgICBsZXQgbm9kZTE6IFZOb2RlO1xuICAgIGxldCBub2RlMjogVk5vZGU7XG4gICAgbGV0IHJldmVyc2VkOiBib29sZWFuO1xuICAgIGxldCBzY2FsZUZhY3RvcjogbnVtYmVyO1xuICAgIGxldCB0eXBlOiBBcnJvd1R5cGU7XG4gICAgY29uc3QgbGluZVdpZHRoOiBudW1iZXIgPSB2YWx1ZXMud2lkdGg7XG5cbiAgICBpZiAocG9zaXRpb24gPT09IFwiZnJvbVwiKSB7XG4gICAgICBub2RlMSA9IHRoaXMuZnJvbTtcbiAgICAgIG5vZGUyID0gdGhpcy50bztcbiAgICAgIHJldmVyc2VkID0gdmFsdWVzLmZyb21BcnJvd1NjYWxlISA8IDA7XG4gICAgICBzY2FsZUZhY3RvciA9IE1hdGguYWJzKHZhbHVlcy5mcm9tQXJyb3dTY2FsZSEpO1xuICAgICAgdHlwZSA9IHZhbHVlcy5mcm9tQXJyb3dUeXBlITtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSBcInRvXCIpIHtcbiAgICAgIG5vZGUxID0gdGhpcy50bztcbiAgICAgIG5vZGUyID0gdGhpcy5mcm9tO1xuICAgICAgcmV2ZXJzZWQgPSB2YWx1ZXMudG9BcnJvd1NjYWxlISA8IDA7XG4gICAgICBzY2FsZUZhY3RvciA9IE1hdGguYWJzKHZhbHVlcy50b0Fycm93U2NhbGUhKTtcbiAgICAgIHR5cGUgPSB2YWx1ZXMudG9BcnJvd1R5cGUhO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlMSA9IHRoaXMudG87XG4gICAgICBub2RlMiA9IHRoaXMuZnJvbTtcbiAgICAgIHJldmVyc2VkID0gdmFsdWVzLm1pZGRsZUFycm93U2NhbGUhIDwgMDtcbiAgICAgIHNjYWxlRmFjdG9yID0gTWF0aC5hYnModmFsdWVzLm1pZGRsZUFycm93U2NhbGUhKTtcbiAgICAgIHR5cGUgPSB2YWx1ZXMubWlkZGxlQXJyb3dUeXBlITtcbiAgICB9XG5cbiAgICBjb25zdCBsZW5ndGggPSAxNSAqIHNjYWxlRmFjdG9yICsgMyAqIGxpbmVXaWR0aDsgLy8gMyogbGluZVdpZHRoIGlzIHRoZSB3aWR0aCBvZiB0aGUgZWRnZS5cblxuICAgIC8vIGlmIG5vdCBjb25uZWN0ZWQgdG8gaXRzZWxmXG4gICAgaWYgKG5vZGUxICE9IG5vZGUyKSB7XG4gICAgICBjb25zdCBhcHByb3hpbWF0ZUVkZ2VMZW5ndGggPSBNYXRoLmh5cG90KFxuICAgICAgICBub2RlMS54IC0gbm9kZTIueCxcbiAgICAgICAgbm9kZTEueSAtIG5vZGUyLnlcbiAgICAgICk7XG4gICAgICBjb25zdCByZWxhdGl2ZUxlbmd0aCA9IGxlbmd0aCAvIGFwcHJveGltYXRlRWRnZUxlbmd0aDtcblxuICAgICAgaWYgKHBvc2l0aW9uICE9PSBcIm1pZGRsZVwiKSB7XG4gICAgICAgIC8vIGRyYXcgYXJyb3cgaGVhZFxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNtb290aC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3QgcG9pbnRUID0gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uKG5vZGUxLCBjdHgsIHsgdmlhOiB2aWFOb2RlIH0pO1xuICAgICAgICAgIGNvbnN0IGd1aWRlUG9zID0gdGhpcy5nZXRQb2ludChcbiAgICAgICAgICAgIHBvaW50VC50ICsgcmVsYXRpdmVMZW5ndGggKiAocG9zaXRpb24gPT09IFwiZnJvbVwiID8gMSA6IC0xKSxcbiAgICAgICAgICAgIHZpYU5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGFuZ2xlID0gTWF0aC5hdGFuMihwb2ludFQueSAtIGd1aWRlUG9zLnksIHBvaW50VC54IC0gZ3VpZGVQb3MueCk7XG4gICAgICAgICAgYXJyb3dQb2ludCA9IHBvaW50VDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbmdsZSA9IE1hdGguYXRhbjIobm9kZTEueSAtIG5vZGUyLnksIG5vZGUxLnggLSBub2RlMi54KTtcbiAgICAgICAgICBhcnJvd1BvaW50ID0gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uKG5vZGUxLCBjdHgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBOZWdhdGl2ZSBoYWxmIGxlbmd0aCByZXZlcnNlcyBhcnJvdyBkaXJlY3Rpb24uXG4gICAgICAgIGNvbnN0IGhhbGZMZW5ndGggPSAocmV2ZXJzZWQgPyAtcmVsYXRpdmVMZW5ndGggOiByZWxhdGl2ZUxlbmd0aCkgLyAyO1xuICAgICAgICBjb25zdCBndWlkZVBvczEgPSB0aGlzLmdldFBvaW50KDAuNSArIGhhbGZMZW5ndGgsIHZpYU5vZGUpO1xuICAgICAgICBjb25zdCBndWlkZVBvczIgPSB0aGlzLmdldFBvaW50KDAuNSAtIGhhbGZMZW5ndGgsIHZpYU5vZGUpO1xuICAgICAgICBhbmdsZSA9IE1hdGguYXRhbjIoXG4gICAgICAgICAgZ3VpZGVQb3MxLnkgLSBndWlkZVBvczIueSxcbiAgICAgICAgICBndWlkZVBvczEueCAtIGd1aWRlUG9zMi54XG4gICAgICAgICk7XG4gICAgICAgIGFycm93UG9pbnQgPSB0aGlzLmdldFBvaW50KDAuNSwgdmlhTm9kZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRyYXcgY2lyY2xlXG4gICAgICBjb25zdCBbeCwgeSwgcmFkaXVzXSA9IHRoaXMuX2dldENpcmNsZURhdGEoY3R4KTtcblxuICAgICAgaWYgKHBvc2l0aW9uID09PSBcImZyb21cIikge1xuICAgICAgICBjb25zdCBsb3cgPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZTtcbiAgICAgICAgY29uc3QgaGlnaCA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlICsgTWF0aC5QSTtcblxuICAgICAgICBjb25zdCBwb2ludFQgPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgbG93LFxuICAgICAgICAgIGhpZ2gsXG4gICAgICAgICAgZGlyZWN0aW9uOiAtMSxcbiAgICAgICAgfSk7XG4gICAgICAgIGFuZ2xlID0gcG9pbnRULnQgKiAtMiAqIE1hdGguUEkgKyAxLjUgKiBNYXRoLlBJICsgMC4xICogTWF0aC5QSTtcbiAgICAgICAgYXJyb3dQb2ludCA9IHBvaW50VDtcbiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09IFwidG9cIikge1xuICAgICAgICBjb25zdCBsb3cgPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZTtcbiAgICAgICAgY29uc3QgaGlnaCA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlICsgTWF0aC5QSTtcblxuICAgICAgICBjb25zdCBwb2ludFQgPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgbG93LFxuICAgICAgICAgIGhpZ2gsXG4gICAgICAgICAgZGlyZWN0aW9uOiAxLFxuICAgICAgICB9KTtcbiAgICAgICAgYW5nbGUgPSBwb2ludFQudCAqIC0yICogTWF0aC5QSSArIDEuNSAqIE1hdGguUEkgLSAxLjEgKiBNYXRoLlBJO1xuICAgICAgICBhcnJvd1BvaW50ID0gcG9pbnRUO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUgLyAoMiAqIE1hdGguUEkpO1xuICAgICAgICBhcnJvd1BvaW50ID0gdGhpcy5fcG9pbnRPbkNpcmNsZSh4LCB5LCByYWRpdXMsIHBvcyk7XG4gICAgICAgIGFuZ2xlID0gcG9zICogLTIgKiBNYXRoLlBJICsgMS41ICogTWF0aC5QSSArIDAuMSAqIE1hdGguUEk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeGkgPSBhcnJvd1BvaW50LnggLSBsZW5ndGggKiAwLjkgKiBNYXRoLmNvcyhhbmdsZSk7XG4gICAgY29uc3QgeWkgPSBhcnJvd1BvaW50LnkgLSBsZW5ndGggKiAwLjkgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgY29uc3QgYXJyb3dDb3JlID0geyB4OiB4aSwgeTogeWkgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBwb2ludDogYXJyb3dQb2ludCxcbiAgICAgIGNvcmU6IGFycm93Q29yZSxcbiAgICAgIGFuZ2xlOiBhbmdsZSxcbiAgICAgIGxlbmd0aDogbGVuZ3RoLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBkcmF3QXJyb3dIZWFkKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIHwgXCJjb2xvclwiXG4gICAgICB8IFwib3BhY2l0eVwiXG4gICAgICB8IFwic2hhZG93Q29sb3JcIlxuICAgICAgfCBcInNoYWRvd1NpemVcIlxuICAgICAgfCBcInNoYWRvd1hcIlxuICAgICAgfCBcInNoYWRvd1lcIlxuICAgICAgfCBcIndpZHRoXCJcbiAgICA+LFxuICAgIF9zZWxlY3RlZDogYm9vbGVhbixcbiAgICBfaG92ZXI6IGJvb2xlYW4sXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdm9pZCB7XG4gICAgLy8gc2V0IHN0eWxlXG4gICAgY3R4LnN0cm9rZVN0eWxlID0gdGhpcy5nZXRDb2xvcihjdHgsIHZhbHVlcyk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IGN0eC5zdHJva2VTdHlsZTtcbiAgICBjdHgubGluZVdpZHRoID0gdmFsdWVzLndpZHRoO1xuXG4gICAgY29uc3QgY2FuRmlsbCA9IEVuZFBvaW50cy5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcblxuICAgIGlmIChjYW5GaWxsKSB7XG4gICAgICAvLyBkcmF3IHNoYWRvdyBpZiBlbmFibGVkXG4gICAgICB0aGlzLmVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgICBjdHguZmlsbCgpO1xuICAgICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc2hhZG93IGZvcm1hdHRpbmcgdmFsdWVzIGluIHRoZSBjb250ZXh0IGlmIGVuYWJsZWQsIGRvIG5vdGhpbmcgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIHZhbHVlcyAtIEZvcm1hdHRpbmcgdmFsdWVzIGZvciB0aGUgc2hhZG93LlxuICAgKi9cbiAgcHVibGljIGVuYWJsZVNoYWRvdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcInNoYWRvd0NvbG9yXCIgfCBcInNoYWRvd1NpemVcIiB8IFwic2hhZG93WFwiIHwgXCJzaGFkb3dZXCJcbiAgICA+XG4gICk6IHZvaWQge1xuICAgIGlmICh2YWx1ZXMuc2hhZG93ID09PSB0cnVlKSB7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSB2YWx1ZXMuc2hhZG93Q29sb3I7XG4gICAgICBjdHguc2hhZG93Qmx1ciA9IHZhbHVlcy5zaGFkb3dTaXplO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFggPSB2YWx1ZXMuc2hhZG93WDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gdmFsdWVzLnNoYWRvd1k7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBzaGFkb3cgZm9ybWF0dGluZyB2YWx1ZXMgaW4gdGhlIGNvbnRleHQgaWYgZW5hYmxlZCwgZG8gbm90aGluZyBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgZm9yIHRoZSBzaGFkb3cuXG4gICAqL1xuICBwdWJsaWMgZGlzYWJsZVNoYWRvdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IEVkZ2VGb3JtYXR0aW5nVmFsdWVzXG4gICk6IHZvaWQge1xuICAgIGlmICh2YWx1ZXMuc2hhZG93ID09PSB0cnVlKSB7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSBcInJnYmEoMCwwLDAsMClcIjtcbiAgICAgIGN0eC5zaGFkb3dCbHVyID0gMDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gMDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBiYWNrZ3JvdW5kIGFjY29yZGluZyB0byB0aGUgZm9ybWF0dGluZyB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgZm9yIHRoZSBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgcHVibGljIGRyYXdCYWNrZ3JvdW5kKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwiYmFja2dyb3VuZENvbG9yXCIgfCBcImJhY2tncm91bmRTaXplXCJcbiAgICA+XG4gICk6IHZvaWQge1xuICAgIGlmICh2YWx1ZXMuYmFja2dyb3VuZCAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIHNhdmUgb3JpZ2luYWwgbGluZSBhdHRyc1xuICAgICAgY29uc3Qgb3JpZ0N0eEF0dHIgPSB7XG4gICAgICAgIHN0cm9rZVN0eWxlOiBjdHguc3Ryb2tlU3R5bGUsXG4gICAgICAgIGxpbmVXaWR0aDogY3R4LmxpbmVXaWR0aCxcbiAgICAgICAgZGFzaGVzOiAoY3R4IGFzIGFueSkuZGFzaGVzLFxuICAgICAgfTtcblxuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gdmFsdWVzLmJhY2tncm91bmRDb2xvcjtcbiAgICAgIGN0eC5saW5lV2lkdGggPSB2YWx1ZXMuYmFja2dyb3VuZFNpemU7XG4gICAgICB0aGlzLnNldFN0cm9rZURhc2hlZChjdHgsIHZhbHVlcy5iYWNrZ3JvdW5kRGFzaGVzKTtcblxuICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICAvLyByZXN0b3JlIG9yaWdpbmFsIGxpbmUgYXR0cnNcbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IG9yaWdDdHhBdHRyLnN0cm9rZVN0eWxlO1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IG9yaWdDdHhBdHRyLmxpbmVXaWR0aDtcbiAgICAgIChjdHggYXMgYW55KS5kYXNoZXMgPSBvcmlnQ3R4QXR0ci5kYXNoZXM7XG4gICAgICB0aGlzLnNldFN0cm9rZURhc2hlZChjdHgsIHZhbHVlcy5kYXNoZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGxpbmUgZGFzaCBwYXR0ZXJuIGlmIHN1cHBvcnRlZC4gTG9ncyBhIHdhcm5pbmcgdG8gdGhlIGNvbnNvbGUgaWYgaXQgaXNuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIGRhc2hlcyAtIFRoZSBwYXR0ZXJuIFtsaW5lLCBzcGFjZSwgbGluZeKApl0sIHRydWUgZm9yIGRlZmF1bHQgZGFzaGVkIGxpbmUgb3IgZmFsc2UgZm9yIG5vcm1hbCBsaW5lLlxuICAgKi9cbiAgcHVibGljIHNldFN0cm9rZURhc2hlZChcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBkYXNoZXM/OiBib29sZWFuIHwgbnVtYmVyW11cbiAgKTogdm9pZCB7XG4gICAgaWYgKGRhc2hlcyAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChjdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gQXJyYXkuaXNBcnJheShkYXNoZXMpID8gZGFzaGVzIDogWzUsIDVdO1xuICAgICAgICBjdHguc2V0TGluZURhc2gocGF0dGVybik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJzZXRMaW5lRGFzaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4gVGhlIGRhc2hlZCBzdHJva2UgY2Fubm90IGJlIHVzZWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN0eC5zZXRMaW5lRGFzaChbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJzZXRMaW5lRGFzaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4gVGhlIGRhc2hlZCBzdHJva2UgY2Fubm90IGJlIHVzZWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFZGdlQmFzZSB9IGZyb20gXCIuL2VkZ2UtYmFzZVwiO1xuaW1wb3J0IHtcbiAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBUaGUgQmFzZSBDbGFzcyBmb3IgYWxsIEJlemllciBlZGdlcy5cbiAqIEJlemllciBjdXJ2ZXMgYXJlIHVzZWQgdG8gbW9kZWwgc21vb3RoIGdyYWR1YWwgY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCZXppZXJFZGdlQmFzZTxWaWE+IGV4dGVuZHMgRWRnZUJhc2U8VmlhPiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IG9mIGdpdmVuIGVkZ2UuXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIGJvZHkgb2YgdGhlIG5ldHdvcmsuXG4gICAqIEBwYXJhbSBsYWJlbE1vZHVsZSAtIExhYmVsIG1vZHVsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBFZGdlT3B0aW9ucywgYm9keTogVkJvZHksIGxhYmVsTW9kdWxlOiBMYWJlbCkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGFkZGl0aW9uYWwgcG9pbnQocykgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQocykgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2dldFZpYUNvb3JkaW5hdGVzKCk6IFZpYTtcblxuICAvKipcbiAgICogRmluZCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgZnVuY3Rpb24gdXNlcyBiaW5hcnkgc2VhcmNoIHRvIGxvb2sgZm9yIHRoZSBwb2ludCB3aGVyZSB0aGUgYmV6aWVyIGN1cnZlIGNyb3NzZXMgdGhlIGJvcmRlciBvZiB0aGUgbm9kZS5cbiAgICogQHBhcmFtIG5lYXJOb2RlIC0gVGhlIG5vZGUgKGVpdGhlciBmcm9tIG9yIHRvIG5vZGUgb2YgdGhlIGVkZ2UpLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIHZpYU5vZGUgLSBBZGRpdGlvbmFsIG5vZGUocykgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2ZpbmRCb3JkZXJQb3NpdGlvbkJlemllcihcbiAgICBuZWFyTm9kZTogVk5vZGUsXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmlhTm9kZTogVmlhID0gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKVxuICApOiBQb2ludFQge1xuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSAwLjI7XG4gICAgbGV0IGZyb20gPSBmYWxzZTtcbiAgICBsZXQgaGlnaCA9IDE7XG4gICAgbGV0IGxvdyA9IDA7XG4gICAgbGV0IG5vZGUgPSB0aGlzLnRvO1xuICAgIGxldCBwb3M6IFBvaW50O1xuICAgIGxldCBtaWRkbGU6IG51bWJlcjtcblxuICAgIGxldCBlbmRQb2ludE9mZnNldCA9IHRoaXMub3B0aW9ucy5lbmRQb2ludE9mZnNldFxuICAgICAgPyB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG9cbiAgICAgIDogMDtcblxuICAgIGlmIChuZWFyTm9kZS5pZCA9PT0gdGhpcy5mcm9tLmlkKSB7XG4gICAgICBub2RlID0gdGhpcy5mcm9tO1xuICAgICAgZnJvbSA9IHRydWU7XG5cbiAgICAgIGVuZFBvaW50T2Zmc2V0ID0gdGhpcy5vcHRpb25zLmVuZFBvaW50T2Zmc2V0XG4gICAgICAgID8gdGhpcy5vcHRpb25zLmVuZFBvaW50T2Zmc2V0LmZyb21cbiAgICAgICAgOiAwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXJyb3dTdHJpa2V0aHJvdWdoID09PSBmYWxzZSkge1xuICAgICAgZW5kUG9pbnRPZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xuICAgIGRvIHtcbiAgICAgIG1pZGRsZSA9IChsb3cgKyBoaWdoKSAqIDAuNTtcblxuICAgICAgcG9zID0gdGhpcy5nZXRQb2ludChtaWRkbGUsIHZpYU5vZGUpO1xuICAgICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKG5vZGUueSAtIHBvcy55LCBub2RlLnggLSBwb3MueCk7XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9Cb3JkZXIgPVxuICAgICAgICBub2RlLmRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkgKyBlbmRQb2ludE9mZnNldDtcblxuICAgICAgY29uc3QgZGlzdGFuY2VUb1BvaW50ID0gTWF0aC5zcXJ0KFxuICAgICAgICBNYXRoLnBvdyhwb3MueCAtIG5vZGUueCwgMikgKyBNYXRoLnBvdyhwb3MueSAtIG5vZGUueSwgMilcbiAgICAgICk7XG4gICAgICBjb25zdCBkaWZmZXJlbmNlID0gZGlzdGFuY2VUb0JvcmRlciAtIGRpc3RhbmNlVG9Qb2ludDtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmZXJlbmNlKSA8IHRocmVzaG9sZCkge1xuICAgICAgICBicmVhazsgLy8gZm91bmRcbiAgICAgIH0gZWxzZSBpZiAoZGlmZmVyZW5jZSA8IDApIHtcbiAgICAgICAgLy8gZGlzdGFuY2UgdG8gbm9kZXMgaXMgbGFyZ2VyIHRoYW4gZGlzdGFuY2UgdG8gYm9yZGVyIC0tPiB0IG5lZWRzIHRvIGJlIGJpZ2dlciBpZiB3ZSdyZSBsb29raW5nIGF0IHRoZSB0byBub2RlLlxuICAgICAgICBpZiAoZnJvbSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBsb3cgPSBtaWRkbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaCA9IG1pZGRsZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZyb20gPT09IGZhbHNlKSB7XG4gICAgICAgICAgaGlnaCA9IG1pZGRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb3cgPSBtaWRkbGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgKytpdGVyYXRpb247XG4gICAgfSB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucG9zLFxuICAgICAgdDogbWlkZGxlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGEgcG9pbnQgKHgzLHkzKSBhbmQgYSBsaW5lIHNlZ21lbnQgZnJvbSAoeDEseTEpIHRvICh4Mix5MikuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODQ5MjExL3Nob3J0ZXN0LWRpc3RhbmNhZS1iZXR3ZWVuLWEtcG9pbnQtYW5kLWEtbGluZS1zZWdtZW50XG4gICAqIEBwYXJhbSB4MSAtIEZpcnN0IGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MSAtIEZpcnN0IGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB4MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTIgLSBTZWNvbmQgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MyAtIFBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0gdmlhIC0gVGhlIGNvbnRyb2wgcG9pbnQgZm9yIHRoZSBlZGdlLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbGluZSBzZWdtZW50IGFuZCB0aGUgcG9pbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9CZXppZXJFZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyLFxuICAgIHZpYTogUG9pbnRcbiAgKTogbnVtYmVyIHtcbiAgICAvLyB4Myx5MyBpcyB0aGUgcG9pbnRcbiAgICBsZXQgbWluRGlzdGFuY2UgPSAxZTk7XG4gICAgbGV0IGRpc3RhbmNlO1xuICAgIGxldCBpLCB0LCB4LCB5O1xuICAgIGxldCBsYXN0WCA9IHgxO1xuICAgIGxldCBsYXN0WSA9IHkxO1xuICAgIGZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKSB7XG4gICAgICB0ID0gMC4xICogaTtcbiAgICAgIHggPVxuICAgICAgICBNYXRoLnBvdygxIC0gdCwgMikgKiB4MSArIDIgKiB0ICogKDEgLSB0KSAqIHZpYS54ICsgTWF0aC5wb3codCwgMikgKiB4MjtcbiAgICAgIHkgPVxuICAgICAgICBNYXRoLnBvdygxIC0gdCwgMikgKiB5MSArIDIgKiB0ICogKDEgLSB0KSAqIHZpYS55ICsgTWF0aC5wb3codCwgMikgKiB5MjtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBkaXN0YW5jZSA9IHRoaXMuX2dldERpc3RhbmNlVG9MaW5lKGxhc3RYLCBsYXN0WSwgeCwgeSwgeDMsIHkzKTtcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZSA8IG1pbkRpc3RhbmNlID8gZGlzdGFuY2UgOiBtaW5EaXN0YW5jZTtcbiAgICAgIH1cbiAgICAgIGxhc3RYID0geDtcbiAgICAgIGxhc3RZID0geTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWluRGlzdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIGEgYmV6aWVyIGN1cnZlIGJldHdlZW4gdHdvIG5vZGVzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgbWV0aG9kIGFjY2VwdHMgemVybywgb25lIG9yIHR3byBjb250cm9sIHBvaW50cy5cbiAgICogUGFzc2luZyB6ZXJvIGNvbnRyb2wgcG9pbnRzIGp1c3QgZHJhd3MgYSBzdHJhaWdodCBsaW5lLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIHZhbHVlcyAtIFN0eWxlIG9wdGlvbnMgZm9yIGVkZ2UgZHJhd2luZy5cbiAgICogQHBhcmFtIHZpYU5vZGUxIC0gRmlyc3QgY29udHJvbCBwb2ludCBmb3IgY3VydmUgZHJhd2luZy5cbiAgICogQHBhcmFtIHZpYU5vZGUyIC0gU2Vjb25kIGNvbnRyb2wgcG9pbnQgZm9yIGN1cnZlIGRyYXdpbmcuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2JlemllckN1cnZlKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIHwgXCJiYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgfCBcImJhY2tncm91bmRTaXplXCJcbiAgICAgIHwgXCJzaGFkb3dDb2xvclwiXG4gICAgICB8IFwic2hhZG93U2l6ZVwiXG4gICAgICB8IFwic2hhZG93WFwiXG4gICAgICB8IFwic2hhZG93WVwiXG4gICAgPixcbiAgICB2aWFOb2RlMT86IFBvaW50LFxuICAgIHZpYU5vZGUyPzogUG9pbnRcbiAgKTogdm9pZCB7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5tb3ZlVG8odGhpcy5mcm9tUG9pbnQueCwgdGhpcy5mcm9tUG9pbnQueSk7XG5cbiAgICBpZiAodmlhTm9kZTEgIT0gbnVsbCAmJiB2aWFOb2RlMS54ICE9IG51bGwpIHtcbiAgICAgIGlmICh2aWFOb2RlMiAhPSBudWxsICYmIHZpYU5vZGUyLnggIT0gbnVsbCkge1xuICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyhcbiAgICAgICAgICB2aWFOb2RlMS54LFxuICAgICAgICAgIHZpYU5vZGUxLnksXG4gICAgICAgICAgdmlhTm9kZTIueCxcbiAgICAgICAgICB2aWFOb2RlMi55LFxuICAgICAgICAgIHRoaXMudG9Qb2ludC54LFxuICAgICAgICAgIHRoaXMudG9Qb2ludC55XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHgucXVhZHJhdGljQ3VydmVUbyhcbiAgICAgICAgICB2aWFOb2RlMS54LFxuICAgICAgICAgIHZpYU5vZGUxLnksXG4gICAgICAgICAgdGhpcy50b1BvaW50LngsXG4gICAgICAgICAgdGhpcy50b1BvaW50LnlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbGJhY2sgdG8gbm9ybWFsIHN0cmFpZ2h0IGVkZ2VcbiAgICAgIGN0eC5saW5lVG8odGhpcy50b1BvaW50LngsIHRoaXMudG9Qb2ludC55KTtcbiAgICB9XG5cbiAgICAvLyBkcmF3IGEgYmFja2dyb3VuZFxuICAgIHRoaXMuZHJhd0JhY2tncm91bmQoY3R4LCB2YWx1ZXMpO1xuXG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICBjdHguc3Ryb2tlKCk7XG4gICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0VmlhTm9kZSgpOiBWaWEge1xuICAgIHJldHVybiB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgQmV6aWVyRWRnZUJhc2UgfSBmcm9tIFwiLi91dGlsL2Jlemllci1lZGdlLWJhc2VcIjtcbmltcG9ydCB7XG4gIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICBMYWJlbCxcbiAgRWRnZU9wdGlvbnMsXG4gIFBvaW50LFxuICBQb2ludFQsXG4gIFNlbGVjdGl2ZVJlcXVpcmVkLFxuICBWQm9keSxcbiAgVk5vZGUsXG59IGZyb20gXCIuL3V0aWwvdHlwZXNcIjtcblxuLyoqXG4gKiBBIER5bmFtaWMgQmV6aWVyIEVkZ2UuIEJlemllciBjdXJ2ZXMgYXJlIHVzZWQgdG8gbW9kZWwgc21vb3RoIGdyYWR1YWxcbiAqIGN1cnZlcyBpbiBwYXRocyBiZXR3ZWVuIG5vZGVzLiBUaGUgRHluYW1pYyBwaWVjZSByZWZlcnMgdG8gaG93IHRoZSBjdXJ2ZVxuICogcmVhY3RzIHRvIHBoeXNpY3MgY2hhbmdlcy5cbiAqXG4gKiBAYXVnbWVudHMgQmV6aWVyRWRnZUJhc2VcbiAqL1xuZXhwb3J0IGNsYXNzIEJlemllckVkZ2VEeW5hbWljIGV4dGVuZHMgQmV6aWVyRWRnZUJhc2U8UG9pbnQ+IHtcbiAgcHVibGljIHZpYTogVk5vZGUgPSB0aGlzLnZpYTsgLy8gY29uc3RydWN0b3Ig4oaSIHN1cGVyIOKGkiBzdXBlciDihpIgc2V0T3B0aW9ucyDihpIgc2V0dXBTdXBwb3J0Tm9kZVxuICBwcml2YXRlIHJlYWRvbmx5IF9ib3VuZEZ1bmN0aW9uOiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IG9mIGdpdmVuIGVkZ2UuXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIGJvZHkgb2YgdGhlIG5ldHdvcmsuXG4gICAqIEBwYXJhbSBsYWJlbE1vZHVsZSAtIExhYmVsIG1vZHVsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBFZGdlT3B0aW9ucywgYm9keTogVkJvZHksIGxhYmVsTW9kdWxlOiBMYWJlbCkge1xuICAgIC8vdGhpcy52aWEgPSB1bmRlZmluZWQ7IC8vIEhlcmUgZm9yIGNvbXBsZXRlbmVzcyBidXQgbm90IGFsbG93ZWQgdG8gZGVmaW5lZCBiZWZvcmUgc3VwZXIoKSBpcyBpbnZva2VkLlxuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTsgLy8gLS0+IHRoaXMgY2FsbHMgdGhlIHNldE9wdGlvbnMgYmVsb3dcbiAgICB0aGlzLl9ib3VuZEZ1bmN0aW9uID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy5wb3NpdGlvbkJlemllck5vZGUoKTtcbiAgICB9O1xuICAgIHRoaXMuX2JvZHkuZW1pdHRlci5vbihcIl9yZXBvc2l0aW9uQmV6aWVyTm9kZXNcIiwgdGhpcy5fYm91bmRGdW5jdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHNldE9wdGlvbnMob3B0aW9uczogRWRnZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBzdXBlci5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgLy8gY2hlY2sgaWYgdGhlIHBoeXNpY3MgaGFzIGNoYW5nZWQuXG4gICAgbGV0IHBoeXNpY3NDaGFuZ2UgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5vcHRpb25zLnBoeXNpY3MgIT09IG9wdGlvbnMucGh5c2ljcykge1xuICAgICAgcGh5c2ljc0NoYW5nZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBvcHRpb25zIGFuZCB0aGUgdG8gYW5kIGZyb20gbm9kZXNcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuaWQgPSB0aGlzLm9wdGlvbnMuaWQ7XG4gICAgdGhpcy5mcm9tID0gdGhpcy5fYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMuZnJvbV07XG4gICAgdGhpcy50byA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLnRvXTtcblxuICAgIC8vIHNldHVwIHRoZSBzdXBwb3J0IG5vZGUgYW5kIGNvbm5lY3RcbiAgICB0aGlzLnNldHVwU3VwcG9ydE5vZGUoKTtcbiAgICB0aGlzLmNvbm5lY3QoKTtcblxuICAgIC8vIHdoZW4gd2UgY2hhbmdlIHRoZSBwaHlzaWNzIHN0YXRlIG9mIHRoZSBlZGdlLCB3ZSByZXBvc2l0aW9uIHRoZSBzdXBwb3J0IG5vZGUuXG4gICAgaWYgKHBoeXNpY3NDaGFuZ2UgPT09IHRydWUpIHtcbiAgICAgIHRoaXMudmlhLnNldE9wdGlvbnMoeyBwaHlzaWNzOiB0aGlzLm9wdGlvbnMucGh5c2ljcyB9KTtcbiAgICAgIHRoaXMucG9zaXRpb25CZXppZXJOb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBjb25uZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuZnJvbSA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLmZyb21dO1xuICAgIHRoaXMudG8gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy50b107XG4gICAgaWYgKFxuICAgICAgdGhpcy5mcm9tID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMudG8gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5vcHRpb25zLnBoeXNpY3MgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICB0aGlzLnZpYS5zZXRPcHRpb25zKHsgcGh5c2ljczogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpeCB3ZWlyZCBiZWhhdmlvdXIgd2hlcmUgYSBzZWxmIHJlZmVyZW5jaW5nIG5vZGUgaGFzIHBoeXNpY3MgZW5hYmxlZFxuICAgICAgaWYgKHRoaXMuZnJvbS5pZCA9PT0gdGhpcy50by5pZCkge1xuICAgICAgICB0aGlzLnZpYS5zZXRPcHRpb25zKHsgcGh5c2ljczogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZpYS5zZXRPcHRpb25zKHsgcGh5c2ljczogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGNsZWFudXAoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5fYm9keS5lbWl0dGVyLm9mZihcIl9yZXBvc2l0aW9uQmV6aWVyTm9kZXNcIiwgdGhpcy5fYm91bmRGdW5jdGlvbik7XG4gICAgaWYgKHRoaXMudmlhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMudmlhLmlkXTtcbiAgICAgIHRoaXMudmlhID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW5kIGFkZCBhIHN1cHBvcnQgbm9kZSBpZiBub3QgYWxyZWFkeSBwcmVzZW50LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBCZXppZXIgY3VydmVzIHJlcXVpcmUgYW4gYW5jaG9yIHBvaW50IHRvIGNhbGN1bGF0ZSB0aGUgc21vb3RoIGZsb3cuXG4gICAqIFRoZXNlIHBvaW50cyBhcmUgbm9kZXMuXG4gICAqIFRoZXNlIG5vZGVzIGFyZSBpbnZpc2libGUgYnV0IGFyZSB1c2VkIGZvciB0aGUgZm9yY2UgY2FsY3VsYXRpb24uXG4gICAqXG4gICAqIFRoZSBjaGFuZ2VkIGRhdGEgaXMgbm90IGNhbGxlZCwgaWYgbmVlZGVkLCBpdCBpcyByZXR1cm5lZCBieSB0aGUgbWFpbiBlZGdlIGNvbnN0cnVjdG9yLlxuICAgKi9cbiAgcHVibGljIHNldHVwU3VwcG9ydE5vZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IFwiZWRnZUlkOlwiICsgdGhpcy5pZDtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9ib2R5LmZ1bmN0aW9ucy5jcmVhdGVOb2RlKHtcbiAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBoeXNpY3M6IHRydWUsXG4gICAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fYm9keS5ub2Rlc1tub2RlSWRdID0gbm9kZTtcbiAgICAgIHRoaXMudmlhID0gbm9kZTtcbiAgICAgIHRoaXMudmlhLnBhcmVudEVkZ2VJZCA9IHRoaXMuaWQ7XG4gICAgICB0aGlzLnBvc2l0aW9uQmV6aWVyTm9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQb3NpdGlvbiBiZXppZXIgbm9kZS5cbiAgICovXG4gIHB1YmxpYyBwb3NpdGlvbkJlemllck5vZGUoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy52aWEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5mcm9tICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMudG8gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhpcy52aWEueCA9IDAuNSAqICh0aGlzLmZyb20ueCArIHRoaXMudG8ueCk7XG4gICAgICB0aGlzLnZpYS55ID0gMC41ICogKHRoaXMuZnJvbS55ICsgdGhpcy50by55KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudmlhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudmlhLnggPSAwO1xuICAgICAgdGhpcy52aWEueSA9IDA7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICB8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAgICAgIHwgXCJiYWNrZ3JvdW5kU2l6ZVwiXG4gICAgICB8IFwic2hhZG93Q29sb3JcIlxuICAgICAgfCBcInNoYWRvd1NpemVcIlxuICAgICAgfCBcInNoYWRvd1hcIlxuICAgICAgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZTogVk5vZGVcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fYmV6aWVyQ3VydmUoY3R4LCB2YWx1ZXMsIHZpYU5vZGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfZ2V0VmlhQ29vcmRpbmF0ZXMoKTogUG9pbnQge1xuICAgIHJldHVybiB0aGlzLnZpYTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0VmlhTm9kZSgpOiBQb2ludCB7XG4gICAgcmV0dXJuIHRoaXMudmlhO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRQb2ludChwb3NpdGlvbjogbnVtYmVyLCB2aWFOb2RlOiBQb2ludCA9IHRoaXMudmlhKTogUG9pbnQge1xuICAgIGlmICh0aGlzLmZyb20gPT09IHRoaXMudG8pIHtcbiAgICAgIGNvbnN0IFtjeCwgY3ksIGNyXSA9IHRoaXMuX2dldENpcmNsZURhdGEoKTtcbiAgICAgIGNvbnN0IGEgPSAyICogTWF0aC5QSSAqICgxIC0gcG9zaXRpb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogY3ggKyBjciAqIE1hdGguc2luKGEpLFxuICAgICAgICB5OiBjeSArIGNyIC0gY3IgKiAoMSAtIE1hdGguY29zKGEpKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6XG4gICAgICAgICAgTWF0aC5wb3coMSAtIHBvc2l0aW9uLCAyKSAqIHRoaXMuZnJvbVBvaW50LnggK1xuICAgICAgICAgIDIgKiBwb3NpdGlvbiAqICgxIC0gcG9zaXRpb24pICogdmlhTm9kZS54ICtcbiAgICAgICAgICBNYXRoLnBvdyhwb3NpdGlvbiwgMikgKiB0aGlzLnRvUG9pbnQueCxcbiAgICAgICAgeTpcbiAgICAgICAgICBNYXRoLnBvdygxIC0gcG9zaXRpb24sIDIpICogdGhpcy5mcm9tUG9pbnQueSArXG4gICAgICAgICAgMiAqIHBvc2l0aW9uICogKDEgLSBwb3NpdGlvbikgKiB2aWFOb2RlLnkgK1xuICAgICAgICAgIE1hdGgucG93KHBvc2l0aW9uLCAyKSAqIHRoaXMudG9Qb2ludC55LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9maW5kQm9yZGVyUG9zaXRpb24oXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXG4gICk6IFBvaW50VCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkJlemllcihuZWFyTm9kZSwgY3R4LCB0aGlzLnZpYSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9nZXREaXN0YW5jZVRvRWRnZShcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlclxuICApOiBudW1iZXIge1xuICAgIC8vIHgzLHkzIGlzIHRoZSBwb2ludFxuICAgIHJldHVybiB0aGlzLl9nZXREaXN0YW5jZVRvQmV6aWVyRWRnZSh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB0aGlzLnZpYSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCZXppZXJFZGdlQmFzZSB9IGZyb20gXCIuL3V0aWwvYmV6aWVyLWVkZ2UtYmFzZVwiO1xuaW1wb3J0IHtcbiAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdXRpbC90eXBlc1wiO1xuXG4vKipcbiAqIEEgU3RhdGljIEJlemllciBFZGdlLiBCZXppZXIgY3VydmVzIGFyZSB1c2VkIHRvIG1vZGVsIHNtb290aCBncmFkdWFsIGN1cnZlcyBpbiBwYXRocyBiZXR3ZWVuIG5vZGVzLlxuICovXG5leHBvcnQgY2xhc3MgQmV6aWVyRWRnZVN0YXRpYyBleHRlbmRzIEJlemllckVkZ2VCYXNlPFBvaW50PiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IG9mIGdpdmVuIGVkZ2UuXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIGJvZHkgb2YgdGhlIG5ldHdvcmsuXG4gICAqIEBwYXJhbSBsYWJlbE1vZHVsZSAtIExhYmVsIG1vZHVsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBFZGdlT3B0aW9ucywgYm9keTogVkJvZHksIGxhYmVsTW9kdWxlOiBMYWJlbCkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2xpbmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImJhY2tncm91bmRDb2xvclwiXG4gICAgICB8IFwiYmFja2dyb3VuZFNpemVcIlxuICAgICAgfCBcInNoYWRvd0NvbG9yXCJcbiAgICAgIHwgXCJzaGFkb3dTaXplXCJcbiAgICAgIHwgXCJzaGFkb3dYXCJcbiAgICAgIHwgXCJzaGFkb3dZXCJcbiAgICA+LFxuICAgIHZpYU5vZGU6IFBvaW50XG4gICk6IHZvaWQge1xuICAgIHRoaXMuX2JlemllckN1cnZlKGN0eCwgdmFsdWVzLCB2aWFOb2RlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0VmlhTm9kZSgpOiBQb2ludCB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHZpYSBub2RlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBXZSBkbyBub3QgdXNlIHRoZSB0byBhbmQgZnJvbVBvaW50cyBoZXJlIHRvIG1ha2UgdGhlIHZpYSBub2RlcyB0aGUgc2FtZSBhcyBlZGdlcyB3aXRob3V0IGFycm93cy5cbiAgICogQHJldHVybnMgQ2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIHRoZSB2aWEgbm9kZS5cbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0VmlhQ29vcmRpbmF0ZXMoKTogUG9pbnQge1xuICAgIC8vIEFzc3VtcHRpb246IHgveSBjb29yZGluYXRlcyBpbiBmcm9tL3RvIGFsd2F5cyBkZWZpbmVkXG4gICAgY29uc3QgZmFjdG9yID0gdGhpcy5vcHRpb25zLnNtb290aC5yb3VuZG5lc3M7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMub3B0aW9ucy5zbW9vdGgudHlwZTtcbiAgICBsZXQgZHggPSBNYXRoLmFicyh0aGlzLmZyb20ueCAtIHRoaXMudG8ueCk7XG4gICAgbGV0IGR5ID0gTWF0aC5hYnModGhpcy5mcm9tLnkgLSB0aGlzLnRvLnkpO1xuICAgIGlmICh0eXBlID09PSBcImRpc2NyZXRlXCIgfHwgdHlwZSA9PT0gXCJkaWFnb25hbENyb3NzXCIpIHtcbiAgICAgIGxldCBzdGVwWDtcbiAgICAgIGxldCBzdGVwWTtcblxuICAgICAgaWYgKGR4IDw9IGR5KSB7XG4gICAgICAgIHN0ZXBYID0gc3RlcFkgPSBmYWN0b3IgKiBkeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZXBYID0gc3RlcFkgPSBmYWN0b3IgKiBkeDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZnJvbS54ID4gdGhpcy50by54KSB7XG4gICAgICAgIHN0ZXBYID0gLXN0ZXBYO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZnJvbS55ID49IHRoaXMudG8ueSkge1xuICAgICAgICBzdGVwWSA9IC1zdGVwWTtcbiAgICAgIH1cblxuICAgICAgbGV0IHhWaWEgPSB0aGlzLmZyb20ueCArIHN0ZXBYO1xuICAgICAgbGV0IHlWaWEgPSB0aGlzLmZyb20ueSArIHN0ZXBZO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJkaXNjcmV0ZVwiKSB7XG4gICAgICAgIGlmIChkeCA8PSBkeSkge1xuICAgICAgICAgIHhWaWEgPSBkeCA8IGZhY3RvciAqIGR5ID8gdGhpcy5mcm9tLnggOiB4VmlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlWaWEgPSBkeSA8IGZhY3RvciAqIGR4ID8gdGhpcy5mcm9tLnkgOiB5VmlhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHg6IHhWaWEsIHk6IHlWaWEgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic3RyYWlnaHRDcm9zc1wiKSB7XG4gICAgICBsZXQgc3RlcFggPSAoMSAtIGZhY3RvcikgKiBkeDtcbiAgICAgIGxldCBzdGVwWSA9ICgxIC0gZmFjdG9yKSAqIGR5O1xuXG4gICAgICBpZiAoZHggPD0gZHkpIHtcbiAgICAgICAgLy8gdXAgLSBkb3duXG4gICAgICAgIHN0ZXBYID0gMDtcbiAgICAgICAgaWYgKHRoaXMuZnJvbS55IDwgdGhpcy50by55KSB7XG4gICAgICAgICAgc3RlcFkgPSAtc3RlcFk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGxlZnQgLSByaWdodFxuICAgICAgICBpZiAodGhpcy5mcm9tLnggPCB0aGlzLnRvLngpIHtcbiAgICAgICAgICBzdGVwWCA9IC1zdGVwWDtcbiAgICAgICAgfVxuICAgICAgICBzdGVwWSA9IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHRoaXMudG8ueCArIHN0ZXBYLFxuICAgICAgICB5OiB0aGlzLnRvLnkgKyBzdGVwWSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgbGV0IHN0ZXBYID0gKDEgLSBmYWN0b3IpICogZHg7XG4gICAgICBpZiAodGhpcy5mcm9tLnggPCB0aGlzLnRvLngpIHtcbiAgICAgICAgc3RlcFggPSAtc3RlcFg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHRoaXMudG8ueCArIHN0ZXBYLFxuICAgICAgICB5OiB0aGlzLmZyb20ueSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgIGxldCBzdGVwWSA9ICgxIC0gZmFjdG9yKSAqIGR5O1xuICAgICAgaWYgKHRoaXMuZnJvbS55IDwgdGhpcy50by55KSB7XG4gICAgICAgIHN0ZXBZID0gLXN0ZXBZO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiB0aGlzLmZyb20ueCxcbiAgICAgICAgeTogdGhpcy50by55ICsgc3RlcFksXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJjdXJ2ZWRDV1wiKSB7XG4gICAgICBkeCA9IHRoaXMudG8ueCAtIHRoaXMuZnJvbS54O1xuICAgICAgZHkgPSB0aGlzLmZyb20ueSAtIHRoaXMudG8ueTtcbiAgICAgIGNvbnN0IHJhZGl1cyA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgICBjb25zdCBwaSA9IE1hdGguUEk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsQW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCk7XG4gICAgICBjb25zdCBteUFuZ2xlID0gKG9yaWdpbmFsQW5nbGUgKyAoZmFjdG9yICogMC41ICsgMC41KSAqIHBpKSAlICgyICogcGkpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiB0aGlzLmZyb20ueCArIChmYWN0b3IgKiAwLjUgKyAwLjUpICogcmFkaXVzICogTWF0aC5zaW4obXlBbmdsZSksXG4gICAgICAgIHk6IHRoaXMuZnJvbS55ICsgKGZhY3RvciAqIDAuNSArIDAuNSkgKiByYWRpdXMgKiBNYXRoLmNvcyhteUFuZ2xlKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcImN1cnZlZENDV1wiKSB7XG4gICAgICBkeCA9IHRoaXMudG8ueCAtIHRoaXMuZnJvbS54O1xuICAgICAgZHkgPSB0aGlzLmZyb20ueSAtIHRoaXMudG8ueTtcbiAgICAgIGNvbnN0IHJhZGl1cyA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgICBjb25zdCBwaSA9IE1hdGguUEk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsQW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCk7XG4gICAgICBjb25zdCBteUFuZ2xlID0gKG9yaWdpbmFsQW5nbGUgKyAoLWZhY3RvciAqIDAuNSArIDAuNSkgKiBwaSkgJSAoMiAqIHBpKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogdGhpcy5mcm9tLnggKyAoZmFjdG9yICogMC41ICsgMC41KSAqIHJhZGl1cyAqIE1hdGguc2luKG15QW5nbGUpLFxuICAgICAgICB5OiB0aGlzLmZyb20ueSArIChmYWN0b3IgKiAwLjUgKyAwLjUpICogcmFkaXVzICogTWF0aC5jb3MobXlBbmdsZSksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb250aW51b3VzXG4gICAgICBsZXQgc3RlcFg7XG4gICAgICBsZXQgc3RlcFk7XG5cbiAgICAgIGlmIChkeCA8PSBkeSkge1xuICAgICAgICBzdGVwWCA9IHN0ZXBZID0gZmFjdG9yICogZHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGVwWCA9IHN0ZXBZID0gZmFjdG9yICogZHg7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZyb20ueCA+IHRoaXMudG8ueCkge1xuICAgICAgICBzdGVwWCA9IC1zdGVwWDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZyb20ueSA+PSB0aGlzLnRvLnkpIHtcbiAgICAgICAgc3RlcFkgPSAtc3RlcFk7XG4gICAgICB9XG5cbiAgICAgIGxldCB4VmlhID0gdGhpcy5mcm9tLnggKyBzdGVwWDtcbiAgICAgIGxldCB5VmlhID0gdGhpcy5mcm9tLnkgKyBzdGVwWTtcblxuICAgICAgaWYgKGR4IDw9IGR5KSB7XG4gICAgICAgIGlmICh0aGlzLmZyb20ueCA8PSB0aGlzLnRvLngpIHtcbiAgICAgICAgICB4VmlhID0gdGhpcy50by54IDwgeFZpYSA/IHRoaXMudG8ueCA6IHhWaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeFZpYSA9IHRoaXMudG8ueCA+IHhWaWEgPyB0aGlzLnRvLnggOiB4VmlhO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5mcm9tLnkgPj0gdGhpcy50by55KSB7XG4gICAgICAgICAgeVZpYSA9IHRoaXMudG8ueSA+IHlWaWEgPyB0aGlzLnRvLnkgOiB5VmlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlWaWEgPSB0aGlzLnRvLnkgPCB5VmlhID8gdGhpcy50by55IDogeVZpYTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4geyB4OiB4VmlhLCB5OiB5VmlhIH07XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfZmluZEJvcmRlclBvc2l0aW9uKFxuICAgIG5lYXJOb2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBvcHRpb25zOiB7IHZpYT86IFBvaW50IH0gPSB7fVxuICApOiBQb2ludFQge1xuICAgIHJldHVybiB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25CZXppZXIobmVhck5vZGUsIGN0eCwgb3B0aW9ucy52aWEpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXIsXG4gICAgdmlhTm9kZSA9IHRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKClcbiAgKSB7XG4gICAgLy8geDMseTMgaXMgdGhlIHBvaW50XG4gICAgcmV0dXJuIHRoaXMuX2dldERpc3RhbmNlVG9CZXppZXJFZGdlKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHZpYU5vZGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRQb2ludChcbiAgICBwb3NpdGlvbjogbnVtYmVyLFxuICAgIHZpYU5vZGU6IFBvaW50ID0gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKVxuICApOiBQb2ludCB7XG4gICAgY29uc3QgdCA9IHBvc2l0aW9uO1xuICAgIGNvbnN0IHggPVxuICAgICAgTWF0aC5wb3coMSAtIHQsIDIpICogdGhpcy5mcm9tUG9pbnQueCArXG4gICAgICAyICogdCAqICgxIC0gdCkgKiB2aWFOb2RlLnggK1xuICAgICAgTWF0aC5wb3codCwgMikgKiB0aGlzLnRvUG9pbnQueDtcbiAgICBjb25zdCB5ID1cbiAgICAgIE1hdGgucG93KDEgLSB0LCAyKSAqIHRoaXMuZnJvbVBvaW50LnkgK1xuICAgICAgMiAqIHQgKiAoMSAtIHQpICogdmlhTm9kZS55ICtcbiAgICAgIE1hdGgucG93KHQsIDIpICogdGhpcy50b1BvaW50Lnk7XG5cbiAgICByZXR1cm4geyB4OiB4LCB5OiB5IH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCZXppZXJFZGdlQmFzZSB9IGZyb20gXCIuL2Jlemllci1lZGdlLWJhc2VcIjtcbmltcG9ydCB7IExhYmVsLCBFZGdlT3B0aW9ucywgUG9pbnQsIFZCb2R5IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBBIEJhc2UgQ2xhc3MgZm9yIGFsbCBDdWJpYyBCZXppZXIgRWRnZXMuIEJlemllciBjdXJ2ZXMgYXJlIHVzZWQgdG8gbW9kZWxcbiAqIHNtb290aCBncmFkdWFsIGN1cnZlcyBpbiBwYXRocyBiZXR3ZWVuIG5vZGVzLlxuICpcbiAqIEBhdWdtZW50cyBCZXppZXJFZGdlQmFzZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3ViaWNCZXppZXJFZGdlQmFzZTxWaWE+IGV4dGVuZHMgQmV6aWVyRWRnZUJhc2U8VmlhPiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IG9mIGdpdmVuIGVkZ2UuXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIGJvZHkgb2YgdGhlIG5ldHdvcmsuXG4gICAqIEBwYXJhbSBsYWJlbE1vZHVsZSAtIExhYmVsIG1vZHVsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBFZGdlT3B0aW9ucywgYm9keTogVkJvZHksIGxhYmVsTW9kdWxlOiBMYWJlbCkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCAoeDMseTMpIGFuZCBhIGxpbmUgc2VnbWVudCBmcm9tICh4MSx5MSkgdG8gKHgyLHkyKS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84NDkyMTEvc2hvcnRlc3QtZGlzdGFuY2FlLWJldHdlZW4tYS1wb2ludC1hbmQtYS1saW5lLXNlZ21lbnRcbiAgICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQiVDMyVBOXppZXJfY3VydmVcbiAgICogQHBhcmFtIHgxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB2aWExIC0gVGhlIGZpcnN0IHBvaW50IHRoaXMgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICogQHBhcmFtIHZpYTIgLSBUaGUgc2Vjb25kIHBvaW50IHRoaXMgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICogQHJldHVybnMgVGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGxpbmUgc2VnbWVudCBhbmQgdGhlIHBvaW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXREaXN0YW5jZVRvQmV6aWVyRWRnZTIoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXIsXG4gICAgdmlhMTogUG9pbnQsXG4gICAgdmlhMjogUG9pbnRcbiAgKTogbnVtYmVyIHtcbiAgICAvLyB4Myx5MyBpcyB0aGUgcG9pbnRcbiAgICBsZXQgbWluRGlzdGFuY2UgPSAxZTk7XG4gICAgbGV0IGxhc3RYID0geDE7XG4gICAgbGV0IGxhc3RZID0geTE7XG4gICAgY29uc3QgdmVjID0gWzAsIDAsIDAsIDBdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMTA7IGkrKykge1xuICAgICAgY29uc3QgdCA9IDAuMSAqIGk7XG4gICAgICB2ZWNbMF0gPSBNYXRoLnBvdygxIC0gdCwgMyk7XG4gICAgICB2ZWNbMV0gPSAzICogdCAqIE1hdGgucG93KDEgLSB0LCAyKTtcbiAgICAgIHZlY1syXSA9IDMgKiBNYXRoLnBvdyh0LCAyKSAqICgxIC0gdCk7XG4gICAgICB2ZWNbM10gPSBNYXRoLnBvdyh0LCAzKTtcbiAgICAgIGNvbnN0IHggPSB2ZWNbMF0gKiB4MSArIHZlY1sxXSAqIHZpYTEueCArIHZlY1syXSAqIHZpYTIueCArIHZlY1szXSAqIHgyO1xuICAgICAgY29uc3QgeSA9IHZlY1swXSAqIHkxICsgdmVjWzFdICogdmlhMS55ICsgdmVjWzJdICogdmlhMi55ICsgdmVjWzNdICogeTI7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSB0aGlzLl9nZXREaXN0YW5jZVRvTGluZShsYXN0WCwgbGFzdFksIHgsIHksIHgzLCB5Myk7XG4gICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2UgPCBtaW5EaXN0YW5jZSA/IGRpc3RhbmNlIDogbWluRGlzdGFuY2U7XG4gICAgICB9XG4gICAgICBsYXN0WCA9IHg7XG4gICAgICBsYXN0WSA9IHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbkRpc3RhbmNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgQ3ViaWNCZXppZXJFZGdlQmFzZSB9IGZyb20gXCIuL3V0aWwvY3ViaWMtYmV6aWVyLWVkZ2UtYmFzZVwiO1xuaW1wb3J0IHtcbiAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdXRpbC90eXBlc1wiO1xuXG4vKipcbiAqIEEgQ3ViaWMgQmV6aWVyIEVkZ2UuIEJlemllciBjdXJ2ZXMgYXJlIHVzZWQgdG8gbW9kZWwgc21vb3RoIGdyYWR1YWwgY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDdWJpY0JlemllckVkZ2UgZXh0ZW5kcyBDdWJpY0JlemllckVkZ2VCYXNlPFtQb2ludCwgUG9pbnRdPiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IG9mIGdpdmVuIGVkZ2UuXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIGJvZHkgb2YgdGhlIG5ldHdvcmsuXG4gICAqIEBwYXJhbSBsYWJlbE1vZHVsZSAtIExhYmVsIG1vZHVsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBFZGdlT3B0aW9ucywgYm9keTogVkJvZHksIGxhYmVsTW9kdWxlOiBMYWJlbCkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2xpbmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImJhY2tncm91bmRDb2xvclwiXG4gICAgICB8IFwiYmFja2dyb3VuZFNpemVcIlxuICAgICAgfCBcInNoYWRvd0NvbG9yXCJcbiAgICAgIHwgXCJzaGFkb3dTaXplXCJcbiAgICAgIHwgXCJzaGFkb3dYXCJcbiAgICAgIHwgXCJzaGFkb3dZXCJcbiAgICA+LFxuICAgIHZpYU5vZGVzOiBbUG9pbnQsIFBvaW50XVxuICApOiB2b2lkIHtcbiAgICAvLyBnZXQgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBzdXBwb3J0IHBvaW50cy5cbiAgICBjb25zdCB2aWExID0gdmlhTm9kZXNbMF07XG4gICAgY29uc3QgdmlhMiA9IHZpYU5vZGVzWzFdO1xuICAgIHRoaXMuX2JlemllckN1cnZlKGN0eCwgdmFsdWVzLCB2aWExLCB2aWEyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBhZGRpdGlvbmFsIHBvaW50cyB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICpcbiAgICogQHJldHVybnMgQ2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludHMgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqL1xuICBwcm90ZWN0ZWQgX2dldFZpYUNvb3JkaW5hdGVzKCk6IFtQb2ludCwgUG9pbnRdIHtcbiAgICBjb25zdCBkeCA9IHRoaXMuZnJvbS54IC0gdGhpcy50by54O1xuICAgIGNvbnN0IGR5ID0gdGhpcy5mcm9tLnkgLSB0aGlzLnRvLnk7XG5cbiAgICBsZXQgeDE6IG51bWJlcjtcbiAgICBsZXQgeTE6IG51bWJlcjtcbiAgICBsZXQgeDI6IG51bWJlcjtcbiAgICBsZXQgeTI6IG51bWJlcjtcbiAgICBjb25zdCByb3VuZG5lc3MgPSB0aGlzLm9wdGlvbnMuc21vb3RoLnJvdW5kbmVzcztcblxuICAgIC8vIGhvcml6b250YWwgaWYgeCA+IHkgb3IgaWYgZGlyZWN0aW9uIGlzIGZvcmNlZCBvciBpZiBkaXJlY3Rpb24gaXMgaG9yaXpvbnRhbFxuICAgIGlmIChcbiAgICAgIChNYXRoLmFicyhkeCkgPiBNYXRoLmFicyhkeSkgfHxcbiAgICAgICAgdGhpcy5vcHRpb25zLnNtb290aC5mb3JjZURpcmVjdGlvbiA9PT0gdHJ1ZSB8fFxuICAgICAgICB0aGlzLm9wdGlvbnMuc21vb3RoLmZvcmNlRGlyZWN0aW9uID09PSBcImhvcml6b250YWxcIikgJiZcbiAgICAgIHRoaXMub3B0aW9ucy5zbW9vdGguZm9yY2VEaXJlY3Rpb24gIT09IFwidmVydGljYWxcIlxuICAgICkge1xuICAgICAgeTEgPSB0aGlzLmZyb20ueTtcbiAgICAgIHkyID0gdGhpcy50by55O1xuICAgICAgeDEgPSB0aGlzLmZyb20ueCAtIHJvdW5kbmVzcyAqIGR4O1xuICAgICAgeDIgPSB0aGlzLnRvLnggKyByb3VuZG5lc3MgKiBkeDtcbiAgICB9IGVsc2Uge1xuICAgICAgeTEgPSB0aGlzLmZyb20ueSAtIHJvdW5kbmVzcyAqIGR5O1xuICAgICAgeTIgPSB0aGlzLnRvLnkgKyByb3VuZG5lc3MgKiBkeTtcbiAgICAgIHgxID0gdGhpcy5mcm9tLng7XG4gICAgICB4MiA9IHRoaXMudG8ueDtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgeyB4OiB4MSwgeTogeTEgfSxcbiAgICAgIHsgeDogeDIsIHk6IHkyIH0sXG4gICAgXTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0VmlhTm9kZSgpOiBbUG9pbnQsIFBvaW50XSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9maW5kQm9yZGVyUG9zaXRpb24oXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXG4gICk6IFBvaW50VCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkJlemllcihuZWFyTm9kZSwgY3R4KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyLFxuICAgIFt2aWExLCB2aWEyXTogW1BvaW50LCBQb2ludF0gPSB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpXG4gICk6IG51bWJlciB7XG4gICAgLy8geDMseTMgaXMgdGhlIHBvaW50XG4gICAgcmV0dXJuIHRoaXMuX2dldERpc3RhbmNlVG9CZXppZXJFZGdlMih4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB2aWExLCB2aWEyKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0UG9pbnQoXG4gICAgcG9zaXRpb246IG51bWJlcixcbiAgICBbdmlhMSwgdmlhMl06IFtQb2ludCwgUG9pbnRdID0gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKVxuICApOiBQb2ludCB7XG4gICAgY29uc3QgdCA9IHBvc2l0aW9uO1xuICAgIGNvbnN0IHZlYzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgICBNYXRoLnBvdygxIC0gdCwgMyksXG4gICAgICAzICogdCAqIE1hdGgucG93KDEgLSB0LCAyKSxcbiAgICAgIDMgKiBNYXRoLnBvdyh0LCAyKSAqICgxIC0gdCksXG4gICAgICBNYXRoLnBvdyh0LCAzKSxcbiAgICBdO1xuICAgIGNvbnN0IHggPVxuICAgICAgdmVjWzBdICogdGhpcy5mcm9tUG9pbnQueCArXG4gICAgICB2ZWNbMV0gKiB2aWExLnggK1xuICAgICAgdmVjWzJdICogdmlhMi54ICtcbiAgICAgIHZlY1szXSAqIHRoaXMudG9Qb2ludC54O1xuICAgIGNvbnN0IHkgPVxuICAgICAgdmVjWzBdICogdGhpcy5mcm9tUG9pbnQueSArXG4gICAgICB2ZWNbMV0gKiB2aWExLnkgK1xuICAgICAgdmVjWzJdICogdmlhMi55ICtcbiAgICAgIHZlY1szXSAqIHRoaXMudG9Qb2ludC55O1xuXG4gICAgcmV0dXJuIHsgeDogeCwgeTogeSB9O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgRWRnZUJhc2UgfSBmcm9tIFwiLi91dGlsL2VkZ2UtYmFzZVwiO1xuaW1wb3J0IHtcbiAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdXRpbC90eXBlc1wiO1xuXG4vKipcbiAqIEEgU3RyYWlnaHQgRWRnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0cmFpZ2h0RWRnZSBleHRlbmRzIEVkZ2VCYXNlIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcInNoYWRvd0NvbG9yXCIgfCBcInNoYWRvd1NpemVcIiB8IFwic2hhZG93WFwiIHwgXCJzaGFkb3dZXCJcbiAgICA+XG4gICk6IHZvaWQge1xuICAgIC8vIGRyYXcgYSBzdHJhaWdodCBsaW5lXG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5tb3ZlVG8odGhpcy5mcm9tUG9pbnQueCwgdGhpcy5mcm9tUG9pbnQueSk7XG4gICAgY3R4LmxpbmVUbyh0aGlzLnRvUG9pbnQueCwgdGhpcy50b1BvaW50LnkpO1xuICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICB0aGlzLmVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgY3R4LnN0cm9rZSgpO1xuICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldFZpYU5vZGUoKTogdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRQb2ludChwb3NpdGlvbjogbnVtYmVyKTogUG9pbnQge1xuICAgIHJldHVybiB7XG4gICAgICB4OiAoMSAtIHBvc2l0aW9uKSAqIHRoaXMuZnJvbVBvaW50LnggKyBwb3NpdGlvbiAqIHRoaXMudG9Qb2ludC54LFxuICAgICAgeTogKDEgLSBwb3NpdGlvbikgKiB0aGlzLmZyb21Qb2ludC55ICsgcG9zaXRpb24gKiB0aGlzLnRvUG9pbnQueSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfZmluZEJvcmRlclBvc2l0aW9uKFxuICAgIG5lYXJOb2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFxuICApOiBQb2ludFQge1xuICAgIGxldCBub2RlMSA9IHRoaXMudG87XG4gICAgbGV0IG5vZGUyID0gdGhpcy5mcm9tO1xuICAgIGlmIChuZWFyTm9kZS5pZCA9PT0gdGhpcy5mcm9tLmlkKSB7XG4gICAgICBub2RlMSA9IHRoaXMuZnJvbTtcbiAgICAgIG5vZGUyID0gdGhpcy50bztcbiAgICB9XG5cbiAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIobm9kZTEueSAtIG5vZGUyLnksIG5vZGUxLnggLSBub2RlMi54KTtcbiAgICBjb25zdCBkeCA9IG5vZGUxLnggLSBub2RlMi54O1xuICAgIGNvbnN0IGR5ID0gbm9kZTEueSAtIG5vZGUyLnk7XG4gICAgY29uc3QgZWRnZVNlZ21lbnRMZW5ndGggPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICAgIGNvbnN0IHRvQm9yZGVyRGlzdCA9IG5lYXJOb2RlLmRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gICAgY29uc3QgdG9Cb3JkZXJQb2ludCA9XG4gICAgICAoZWRnZVNlZ21lbnRMZW5ndGggLSB0b0JvcmRlckRpc3QpIC8gZWRnZVNlZ21lbnRMZW5ndGg7XG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogKDEgLSB0b0JvcmRlclBvaW50KSAqIG5vZGUyLnggKyB0b0JvcmRlclBvaW50ICogbm9kZTEueCxcbiAgICAgIHk6ICgxIC0gdG9Cb3JkZXJQb2ludCkgKiBub2RlMi55ICsgdG9Cb3JkZXJQb2ludCAqIG5vZGUxLnksXG4gICAgICB0OiAwLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9nZXREaXN0YW5jZVRvRWRnZShcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlclxuICApOiBudW1iZXIge1xuICAgIC8vIHgzLHkzIGlzIHRoZSBwb2ludFxuICAgIHJldHVybiB0aGlzLl9nZXREaXN0YW5jZVRvTGluZSh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKTtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIGJyaWRnZU9iamVjdCxcbiAgZGVlcEV4dGVuZCxcbiAgaXNTdHJpbmcsXG4gIG1lcmdlT3B0aW9ucyxcbiAgc2VsZWN0aXZlRGVlcEV4dGVuZCxcbn0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IExhYmVsIGZyb20gXCIuL3NoYXJlZC9MYWJlbFwiO1xuaW1wb3J0IHtcbiAgY2hvb3NpZnksXG4gIGdldFNlbGZSZWZDb29yZGluYXRlcyxcbiAgaXNWYWxpZExhYmVsLFxuICBwb2ludEluUmVjdCxcbn0gZnJvbSBcIi4vc2hhcmVkL0NvbXBvbmVudFV0aWxcIjtcbmltcG9ydCB7XG4gIEJlemllckVkZ2VEeW5hbWljLFxuICBCZXppZXJFZGdlU3RhdGljLFxuICBDdWJpY0JlemllckVkZ2UsXG4gIFN0cmFpZ2h0RWRnZSxcbn0gZnJvbSBcIi4vZWRnZXNcIjtcblxuLyoqXG4gKiBBbiBlZGdlIGNvbm5lY3RzIHR3byBub2RlcyBhbmQgaGFzIGEgc3BlY2lmaWMgZGlyZWN0aW9uLlxuICovXG5jbGFzcyBFZGdlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICAgICAgICB2YWx1ZXMgc3BlY2lmaWMgdG8gdGhpcyBlZGdlLCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJ2Zyb20nIGFuZCAndG8nXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5ICAgICAgICAgICBzaGFyZWQgc3RhdGUgZnJvbSBOZXR3b3JrIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7TmV0d29yay5JbWFnZXN9IGltYWdlbGlzdCAgQSBsaXN0IHdpdGggaW1hZ2VzLiBPbmx5IG5lZWRlZCB3aGVuIHRoZSBlZGdlIGhhcyBpbWFnZSBhcnJvd3MuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBnbG9iYWxPcHRpb25zICBvcHRpb25zIGZyb20gdGhlIEVkZ2VzSGFuZGxlciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdE9wdGlvbnMgZGVmYXVsdCBvcHRpb25zIGZyb20gdGhlIEVkZ2VIYW5kbGVyIGluc3RhbmNlLiBWYWx1ZSBhbmQgcmVmZXJlbmNlIGFyZSBjb25zdGFudFxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgaW1hZ2VsaXN0LCBnbG9iYWxPcHRpb25zLCBkZWZhdWx0T3B0aW9ucykge1xuICAgIGlmIChib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGJvZHkgcHJvdmlkZWRcIik7XG4gICAgfVxuXG4gICAgLy8gU2luY2UgZ2xvYmFsT3B0aW9ucyBpcyBjb25zdGFudCBpbiB2YWx1ZXMgYXMgd2VsbCBhcyByZWZlcmVuY2UsXG4gICAgLy8gRm9sbG93aW5nIG5lZWRzIHRvIGJlIGRvbmUgb25seSBvbmNlLlxuXG4gICAgdGhpcy5vcHRpb25zID0gYnJpZGdlT2JqZWN0KGdsb2JhbE9wdGlvbnMpO1xuICAgIHRoaXMuZ2xvYmFsT3B0aW9ucyA9IGdsb2JhbE9wdGlvbnM7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5pbWFnZWxpc3QgPSBpbWFnZWxpc3Q7XG5cbiAgICAvLyBpbml0aWFsaXplIHZhcmlhYmxlc1xuICAgIHRoaXMuaWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mcm9tSWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50b0lkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhvdmVyID0gZmFsc2U7XG4gICAgdGhpcy5sYWJlbERpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuYmFzZVdpZHRoID0gdGhpcy5vcHRpb25zLndpZHRoO1xuICAgIHRoaXMuYmFzZUZvbnRTaXplID0gdGhpcy5vcHRpb25zLmZvbnQuc2l6ZTtcblxuICAgIHRoaXMuZnJvbSA9IHVuZGVmaW5lZDsgLy8gYSBub2RlXG4gICAgdGhpcy50byA9IHVuZGVmaW5lZDsgLy8gYSBub2RlXG5cbiAgICB0aGlzLmVkZ2VUeXBlID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubGFiZWxNb2R1bGUgPSBuZXcgTGFiZWwoXG4gICAgICB0aGlzLmJvZHksXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0cnVlIC8qIEl0J3MgYW4gZWRnZSBsYWJlbCAqL1xuICAgICk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBvciBvdmVyd3JpdGUgb3B0aW9ucyBmb3IgdGhlIGVkZ2VcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgIGFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAgICogQHJldHVybnMge3VuZGVmaW5lZHxib29sZWFufSB1bmRlZmluZWQgaWYgbm8gb3B0aW9ucywgdHJ1ZSBpZiBsYXlvdXQgYWZmZWN0aW5nIGRhdGEgY2hhbmdlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9sbG93aW5nIG9wdGlvbnMgaWYgY2hhbmdlZCBhZmZlY3QgdGhlIGxheW91dC5cbiAgICBsZXQgYWZmZWN0c0xheW91dCA9XG4gICAgICAodHlwZW9mIG9wdGlvbnMucGh5c2ljcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0aGlzLm9wdGlvbnMucGh5c2ljcyAhPT0gb3B0aW9ucy5waHlzaWNzKSB8fFxuICAgICAgKHR5cGVvZiBvcHRpb25zLmhpZGRlbiAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAodGhpcy5vcHRpb25zLmhpZGRlbiB8fCBmYWxzZSkgIT09IChvcHRpb25zLmhpZGRlbiB8fCBmYWxzZSkpIHx8XG4gICAgICAodHlwZW9mIG9wdGlvbnMuZnJvbSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0aGlzLm9wdGlvbnMuZnJvbSAhPT0gb3B0aW9ucy5mcm9tKSB8fFxuICAgICAgKHR5cGVvZiBvcHRpb25zLnRvICE9PSBcInVuZGVmaW5lZFwiICYmIHRoaXMub3B0aW9ucy50byAhPT0gb3B0aW9ucy50byk7XG5cbiAgICBFZGdlLnBhcnNlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG9wdGlvbnMsIHRydWUsIHRoaXMuZ2xvYmFsT3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucy5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlkID0gb3B0aW9ucy5pZDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZnJvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZyb21JZCA9IG9wdGlvbnMuZnJvbTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy50b0lkID0gb3B0aW9ucy50bztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy50aXRsZSA9IG9wdGlvbnMudGl0bGU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMudmFsdWUgPSBwYXJzZUZsb2F0KG9wdGlvbnMudmFsdWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHBpbGUgPSBbb3B0aW9ucywgdGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zXTtcbiAgICB0aGlzLmNob29zZXIgPSBjaG9vc2lmeShcImVkZ2VcIiwgcGlsZSk7XG5cbiAgICAvLyB1cGRhdGUgbGFiZWwgTW9kdWxlXG4gICAgdGhpcy51cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKTtcblxuICAgIC8vIFVwZGF0ZSBlZGdlIHR5cGUsIHRoaXMgaWYgY2hhbmdlZCBhZmZlY3RzIHRoZSBsYXlvdXQuXG4gICAgYWZmZWN0c0xheW91dCA9IHRoaXMudXBkYXRlRWRnZVR5cGUoKSB8fCBhZmZlY3RzTGF5b3V0O1xuXG4gICAgLy8gaWYgYW55dGhpbmcgaGFzIGJlZW4gdXBkYXRlcywgcmVzZXQgdGhlIHNlbGVjdGlvbiB3aWR0aCBhbmQgdGhlIGhvdmVyIHdpZHRoXG4gICAgdGhpcy5fc2V0SW50ZXJhY3Rpb25XaWR0aHMoKTtcblxuICAgIC8vIEEgbm9kZSBpcyBjb25uZWN0ZWQgd2hlbiBpdCBoYXMgYSBmcm9tIGFuZCB0byBub2RlIHRoYXQgYm90aCBleGlzdCBpbiB0aGUgbmV0d29yay5ib2R5Lm5vZGVzLlxuICAgIHRoaXMuY29ubmVjdCgpO1xuXG4gICAgcmV0dXJuIGFmZmVjdHNMYXlvdXQ7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudE9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld09wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dEZWxldGlvbj1mYWxzZV1cbiAgICogQHBhcmFtIHtvYmplY3R9IFtnbG9iYWxPcHRpb25zPXt9XVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb3B5RnJvbUdsb2JhbHM9ZmFsc2VdXG4gICAqL1xuICBzdGF0aWMgcGFyc2VPcHRpb25zKFxuICAgIHBhcmVudE9wdGlvbnMsXG4gICAgbmV3T3B0aW9ucyxcbiAgICBhbGxvd0RlbGV0aW9uID0gZmFsc2UsXG4gICAgZ2xvYmFsT3B0aW9ucyA9IHt9LFxuICAgIGNvcHlGcm9tR2xvYmFscyA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IGZpZWxkcyA9IFtcbiAgICAgIFwiZW5kUG9pbnRPZmZzZXRcIixcbiAgICAgIFwiYXJyb3dTdHJpa2V0aHJvdWdoXCIsXG4gICAgICBcImlkXCIsXG4gICAgICBcImZyb21cIixcbiAgICAgIFwiaGlkZGVuXCIsXG4gICAgICBcImhvdmVyV2lkdGhcIixcbiAgICAgIFwibGFiZWxIaWdobGlnaHRCb2xkXCIsXG4gICAgICBcImxlbmd0aFwiLFxuICAgICAgXCJsaW5lXCIsXG4gICAgICBcIm9wYWNpdHlcIixcbiAgICAgIFwicGh5c2ljc1wiLFxuICAgICAgXCJzY2FsaW5nXCIsXG4gICAgICBcInNlbGVjdGlvbldpZHRoXCIsXG4gICAgICBcInNlbGZSZWZlcmVuY2VTaXplXCIsXG4gICAgICBcInNlbGZSZWZlcmVuY2VcIixcbiAgICAgIFwidG9cIixcbiAgICAgIFwidGl0bGVcIixcbiAgICAgIFwidmFsdWVcIixcbiAgICAgIFwid2lkdGhcIixcbiAgICAgIFwiZm9udFwiLFxuICAgICAgXCJjaG9zZW5cIixcbiAgICAgIFwid2lkdGhDb25zdHJhaW50XCIsXG4gICAgXTtcblxuICAgIC8vIG9ubHkgZGVlcCBleHRlbmQgdGhlIGl0ZW1zIGluIHRoZSBmaWVsZCBhcnJheS4gVGhlc2UgZG8gbm90IGhhdmUgc2hvcnRoYW5kLlxuICAgIHNlbGVjdGl2ZURlZXBFeHRlbmQoZmllbGRzLCBwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBhbGxvd0RlbGV0aW9uKTtcblxuICAgIC8vIE9ubHkgdXNlIGVuZFBvaW50T2Zmc2V0IHZhbHVlcyAoZnJvbSBhbmQgdG8pIGlmIGl0J3MgdmFsaWQgdmFsdWVzXG4gICAgaWYgKFxuICAgICAgbmV3T3B0aW9ucy5lbmRQb2ludE9mZnNldCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0LmZyb20gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0LmZyb20pKSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbSA9IG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbSA9XG4gICAgICAgICAgZ2xvYmFsT3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZ2xvYmFsT3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tXG4gICAgICAgICAgICA6IDA7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJlbmRQb2ludE9mZnNldC5mcm9tIGlzIG5vdCBhIHZhbGlkIG51bWJlclwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG8gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0LnRvKSkge1xuICAgICAgICBwYXJlbnRPcHRpb25zLmVuZFBvaW50T2Zmc2V0LnRvID0gbmV3T3B0aW9ucy5lbmRQb2ludE9mZnNldC50bztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG8gPVxuICAgICAgICAgIGdsb2JhbE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG8gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBnbG9iYWxPcHRpb25zLmVuZFBvaW50T2Zmc2V0LnRvXG4gICAgICAgICAgICA6IDA7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJlbmRQb2ludE9mZnNldC50byBpcyBub3QgYSB2YWxpZCBudW1iZXJcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSBjb3B5IGxhYmVsIGlmIGl0J3MgYSBsZWdhbCB2YWx1ZS5cbiAgICBpZiAoaXNWYWxpZExhYmVsKG5ld09wdGlvbnMubGFiZWwpKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmxhYmVsID0gbmV3T3B0aW9ucy5sYWJlbDtcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkTGFiZWwocGFyZW50T3B0aW9ucy5sYWJlbCkpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMubGFiZWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbWVyZ2VPcHRpb25zKHBhcmVudE9wdGlvbnMsIG5ld09wdGlvbnMsIFwic21vb3RoXCIsIGdsb2JhbE9wdGlvbnMpO1xuICAgIG1lcmdlT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBcInNoYWRvd1wiLCBnbG9iYWxPcHRpb25zKTtcbiAgICBtZXJnZU9wdGlvbnMocGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgXCJiYWNrZ3JvdW5kXCIsIGdsb2JhbE9wdGlvbnMpO1xuXG4gICAgaWYgKG5ld09wdGlvbnMuZGFzaGVzICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5kYXNoZXMgIT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuZGFzaGVzID0gbmV3T3B0aW9ucy5kYXNoZXM7XG4gICAgfSBlbHNlIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuZGFzaGVzID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmRhc2hlcyA9IE9iamVjdC5jcmVhdGUoZ2xvYmFsT3B0aW9ucy5kYXNoZXMpOyAvLyB0aGlzIHNldHMgdGhlIHBvaW50ZXIgb2YgdGhlIG9wdGlvbiBiYWNrIHRvIHRoZSBnbG9iYWwgb3B0aW9uLlxuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2NhbGluZyBuZXdPcHRpb25zXG4gICAgaWYgKG5ld09wdGlvbnMuc2NhbGluZyAhPT0gdW5kZWZpbmVkICYmIG5ld09wdGlvbnMuc2NhbGluZyAhPT0gbnVsbCkge1xuICAgICAgaWYgKG5ld09wdGlvbnMuc2NhbGluZy5taW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXJlbnRPcHRpb25zLnNjYWxpbmcubWluID0gbmV3T3B0aW9ucy5zY2FsaW5nLm1pbjtcbiAgICAgIH1cbiAgICAgIGlmIChuZXdPcHRpb25zLnNjYWxpbmcubWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5zY2FsaW5nLm1heCA9IG5ld09wdGlvbnMuc2NhbGluZy5tYXg7XG4gICAgICB9XG4gICAgICBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHBhcmVudE9wdGlvbnMuc2NhbGluZyxcbiAgICAgICAgbmV3T3B0aW9ucy5zY2FsaW5nLFxuICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgIGdsb2JhbE9wdGlvbnMuc2NhbGluZ1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUgJiYgbmV3T3B0aW9ucy5zY2FsaW5nID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLnNjYWxpbmcgPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbnMuc2NhbGluZyk7IC8vIHRoaXMgc2V0cyB0aGUgcG9pbnRlciBvZiB0aGUgb3B0aW9uIGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb24uXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIG11bHRpcGxlIGlucHV0IGNhc2VzIGZvciBhcnJvd3NcbiAgICBpZiAobmV3T3B0aW9ucy5hcnJvd3MgIT09IHVuZGVmaW5lZCAmJiBuZXdPcHRpb25zLmFycm93cyAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBuZXdPcHRpb25zLmFycm93cyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBhcnJvd3MgPSBuZXdPcHRpb25zLmFycm93cy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cy50by5lbmFibGVkID0gYXJyb3dzLmluZGV4T2YoXCJ0b1wiKSAhPSAtMTtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5hcnJvd3MubWlkZGxlLmVuYWJsZWQgPSBhcnJvd3MuaW5kZXhPZihcIm1pZGRsZVwiKSAhPSAtMTtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5hcnJvd3MuZnJvbS5lbmFibGVkID0gYXJyb3dzLmluZGV4T2YoXCJmcm9tXCIpICE9IC0xO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmV3T3B0aW9ucy5hcnJvd3MgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgbWVyZ2VPcHRpb25zKFxuICAgICAgICAgIHBhcmVudE9wdGlvbnMuYXJyb3dzLFxuICAgICAgICAgIG5ld09wdGlvbnMuYXJyb3dzLFxuICAgICAgICAgIFwidG9cIixcbiAgICAgICAgICBnbG9iYWxPcHRpb25zLmFycm93c1xuICAgICAgICApO1xuICAgICAgICBtZXJnZU9wdGlvbnMoXG4gICAgICAgICAgcGFyZW50T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgbmV3T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgXCJtaWRkbGVcIixcbiAgICAgICAgICBnbG9iYWxPcHRpb25zLmFycm93c1xuICAgICAgICApO1xuICAgICAgICBtZXJnZU9wdGlvbnMoXG4gICAgICAgICAgcGFyZW50T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgbmV3T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgXCJmcm9tXCIsXG4gICAgICAgICAgZ2xvYmFsT3B0aW9ucy5hcnJvd3NcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRoZSBhcnJvdyBuZXdPcHRpb25zIGNhbiBvbmx5IGJlIGFuIG9iamVjdCBvciBhIHN0cmluZy4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24uIFlvdSB1c2VkOlwiICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG5ld09wdGlvbnMuYXJyb3dzKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWxsb3dEZWxldGlvbiA9PT0gdHJ1ZSAmJiBuZXdPcHRpb25zLmFycm93cyA9PT0gbnVsbCkge1xuICAgICAgcGFyZW50T3B0aW9ucy5hcnJvd3MgPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbnMuYXJyb3dzKTsgLy8gdGhpcyBzZXRzIHRoZSBwb2ludGVyIG9mIHRoZSBvcHRpb24gYmFjayB0byB0aGUgZ2xvYmFsIG9wdGlvbi5cbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbXVsdGlwbGUgaW5wdXQgY2FzZXMgZm9yIGNvbG9yXG4gICAgaWYgKG5ld09wdGlvbnMuY29sb3IgIT09IHVuZGVmaW5lZCAmJiBuZXdPcHRpb25zLmNvbG9yICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmcm9tQ29sb3IgPSBpc1N0cmluZyhuZXdPcHRpb25zLmNvbG9yKVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGNvbG9yOiBuZXdPcHRpb25zLmNvbG9yLFxuICAgICAgICAgICAgaGlnaGxpZ2h0OiBuZXdPcHRpb25zLmNvbG9yLFxuICAgICAgICAgICAgaG92ZXI6IG5ld09wdGlvbnMuY29sb3IsXG4gICAgICAgICAgICBpbmhlcml0OiBmYWxzZSxcbiAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgfVxuICAgICAgICA6IG5ld09wdGlvbnMuY29sb3I7XG4gICAgICBjb25zdCB0b0NvbG9yID0gcGFyZW50T3B0aW9ucy5jb2xvcjtcblxuICAgICAgLy8gSWYgcGFzc2VkLCBmaWxsIGluIHZhbHVlcyBmcm9tIGRlZmF1bHQgb3B0aW9ucyAtIHJlcXVpcmVkIGluIHRoZSBjYXNlIG9mIG5vIHByb3RvdHlwZSBicmlkZ2luZ1xuICAgICAgaWYgKGNvcHlGcm9tR2xvYmFscykge1xuICAgICAgICBkZWVwRXh0ZW5kKHRvQ29sb3IsIGdsb2JhbE9wdGlvbnMuY29sb3IsIGZhbHNlLCBhbGxvd0RlbGV0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENsZWFyIGxvY2FsIHByb3BlcnRpZXMgLSBuZWVkIHRvIGRvIGl0IGxpa2UgdGhpcyBpbiBvcmRlciB0byByZXRhaW4gcHJvdG90eXBlIGJyaWRnZXNcbiAgICAgICAgZm9yIChjb25zdCBpIGluIHRvQ29sb3IpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRvQ29sb3IsIGkpKSB7XG4gICAgICAgICAgICBkZWxldGUgdG9Db2xvcltpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzU3RyaW5nKHRvQ29sb3IpKSB7XG4gICAgICAgIHRvQ29sb3IuY29sb3IgPSB0b0NvbG9yO1xuICAgICAgICB0b0NvbG9yLmhpZ2hsaWdodCA9IHRvQ29sb3I7XG4gICAgICAgIHRvQ29sb3IuaG92ZXIgPSB0b0NvbG9yO1xuICAgICAgICB0b0NvbG9yLmluaGVyaXQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZyb21Db2xvci5vcGFjaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0b0NvbG9yLm9wYWNpdHkgPSAxLjA7IC8vIHNldCBkZWZhdWx0XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb2xvcnNEZWZpbmVkID0gZmFsc2U7XG4gICAgICAgIGlmIChmcm9tQ29sb3IuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3IuY29sb3IgPSBmcm9tQ29sb3IuY29sb3I7XG4gICAgICAgICAgY29sb3JzRGVmaW5lZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyb21Db2xvci5oaWdobGlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3IuaGlnaGxpZ2h0ID0gZnJvbUNvbG9yLmhpZ2hsaWdodDtcbiAgICAgICAgICBjb2xvcnNEZWZpbmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZnJvbUNvbG9yLmhvdmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0b0NvbG9yLmhvdmVyID0gZnJvbUNvbG9yLmhvdmVyO1xuICAgICAgICAgIGNvbG9yc0RlZmluZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tQ29sb3IuaW5oZXJpdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG9Db2xvci5pbmhlcml0ID0gZnJvbUNvbG9yLmluaGVyaXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyb21Db2xvci5vcGFjaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0b0NvbG9yLm9wYWNpdHkgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBmcm9tQ29sb3Iub3BhY2l0eSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbG9yc0RlZmluZWQgPT09IHRydWUpIHtcbiAgICAgICAgICB0b0NvbG9yLmluaGVyaXQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodG9Db2xvci5pbmhlcml0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRvQ29sb3IuaW5oZXJpdCA9IFwiZnJvbVwiOyAvLyBTZXQgZGVmYXVsdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWxsb3dEZWxldGlvbiA9PT0gdHJ1ZSAmJiBuZXdPcHRpb25zLmNvbG9yID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmNvbG9yID0gYnJpZGdlT2JqZWN0KGdsb2JhbE9wdGlvbnMuY29sb3IpOyAvLyBzZXQgdGhlIG9iamVjdCBiYWNrIHRvIHRoZSBnbG9iYWwgb3B0aW9uc1xuICAgIH1cblxuICAgIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuZm9udCA9PT0gbnVsbCkge1xuICAgICAgcGFyZW50T3B0aW9ucy5mb250ID0gYnJpZGdlT2JqZWN0KGdsb2JhbE9wdGlvbnMuZm9udCk7IC8vIHNldCB0aGUgb2JqZWN0IGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb25zXG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdPcHRpb25zLCBcInNlbGZSZWZlcmVuY2VTaXplXCIpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiVGhlIHNlbGZSZWZlcmVuY2VTaXplIHByb3BlcnR5IGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2Ugc2VsZlJlZmVyZW5jZSBwcm9wZXJ0eSBpbnN0ZWFkLiBUaGUgc2VsZlJlZmVyZW5jZSBjYW4gYmUgc2V0IGxpa2UgdGhpc2Ugc2VsZlJlZmVyZW5jZTp7c2l6ZTozMCwgYW5nbGU6TWF0aC5QSSAvIDR9XCJcbiAgICAgICk7XG4gICAgICBwYXJlbnRPcHRpb25zLnNlbGZSZWZlcmVuY2Uuc2l6ZSA9IG5ld09wdGlvbnMuc2VsZlJlZmVyZW5jZVNpemU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJvd09wdGlvbnN9XG4gICAqL1xuICBnZXRGb3JtYXR0aW5nVmFsdWVzKCkge1xuICAgIGNvbnN0IHRvQXJyb3cgPVxuICAgICAgdGhpcy5vcHRpb25zLmFycm93cy50byA9PT0gdHJ1ZSB8fFxuICAgICAgdGhpcy5vcHRpb25zLmFycm93cy50by5lbmFibGVkID09PSB0cnVlO1xuICAgIGNvbnN0IGZyb21BcnJvdyA9XG4gICAgICB0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20gPT09IHRydWUgfHxcbiAgICAgIHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbS5lbmFibGVkID09PSB0cnVlO1xuICAgIGNvbnN0IG1pZGRsZUFycm93ID1cbiAgICAgIHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlID09PSB0cnVlIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuYXJyb3dzLm1pZGRsZS5lbmFibGVkID09PSB0cnVlO1xuICAgIGNvbnN0IGluaGVyaXRzQ29sb3IgPSB0aGlzLm9wdGlvbnMuY29sb3IuaW5oZXJpdDtcbiAgICBjb25zdCB2YWx1ZXMgPSB7XG4gICAgICB0b0Fycm93OiB0b0Fycm93LFxuICAgICAgdG9BcnJvd1NjYWxlOiB0aGlzLm9wdGlvbnMuYXJyb3dzLnRvLnNjYWxlRmFjdG9yLFxuICAgICAgdG9BcnJvd1R5cGU6IHRoaXMub3B0aW9ucy5hcnJvd3MudG8udHlwZSxcbiAgICAgIHRvQXJyb3dTcmM6IHRoaXMub3B0aW9ucy5hcnJvd3MudG8uc3JjLFxuICAgICAgdG9BcnJvd0ltYWdlV2lkdGg6IHRoaXMub3B0aW9ucy5hcnJvd3MudG8uaW1hZ2VXaWR0aCxcbiAgICAgIHRvQXJyb3dJbWFnZUhlaWdodDogdGhpcy5vcHRpb25zLmFycm93cy50by5pbWFnZUhlaWdodCxcbiAgICAgIG1pZGRsZUFycm93OiBtaWRkbGVBcnJvdyxcbiAgICAgIG1pZGRsZUFycm93U2NhbGU6IHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLnNjYWxlRmFjdG9yLFxuICAgICAgbWlkZGxlQXJyb3dUeXBlOiB0aGlzLm9wdGlvbnMuYXJyb3dzLm1pZGRsZS50eXBlLFxuICAgICAgbWlkZGxlQXJyb3dTcmM6IHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLnNyYyxcbiAgICAgIG1pZGRsZUFycm93SW1hZ2VXaWR0aDogdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUuaW1hZ2VXaWR0aCxcbiAgICAgIG1pZGRsZUFycm93SW1hZ2VIZWlnaHQ6IHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLmltYWdlSGVpZ2h0LFxuICAgICAgZnJvbUFycm93OiBmcm9tQXJyb3csXG4gICAgICBmcm9tQXJyb3dTY2FsZTogdGhpcy5vcHRpb25zLmFycm93cy5mcm9tLnNjYWxlRmFjdG9yLFxuICAgICAgZnJvbUFycm93VHlwZTogdGhpcy5vcHRpb25zLmFycm93cy5mcm9tLnR5cGUsXG4gICAgICBmcm9tQXJyb3dTcmM6IHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbS5zcmMsXG4gICAgICBmcm9tQXJyb3dJbWFnZVdpZHRoOiB0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20uaW1hZ2VXaWR0aCxcbiAgICAgIGZyb21BcnJvd0ltYWdlSGVpZ2h0OiB0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20uaW1hZ2VIZWlnaHQsXG4gICAgICBhcnJvd1N0cmlrZXRocm91Z2g6IHRoaXMub3B0aW9ucy5hcnJvd1N0cmlrZXRocm91Z2gsXG4gICAgICBjb2xvcjogaW5oZXJpdHNDb2xvciA/IHVuZGVmaW5lZCA6IHRoaXMub3B0aW9ucy5jb2xvci5jb2xvcixcbiAgICAgIGluaGVyaXRzQ29sb3I6IGluaGVyaXRzQ29sb3IsXG4gICAgICBvcGFjaXR5OiB0aGlzLm9wdGlvbnMuY29sb3Iub3BhY2l0eSxcbiAgICAgIGhpZGRlbjogdGhpcy5vcHRpb25zLmhpZGRlbixcbiAgICAgIGxlbmd0aDogdGhpcy5vcHRpb25zLmxlbmd0aCxcbiAgICAgIHNoYWRvdzogdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkLFxuICAgICAgc2hhZG93Q29sb3I6IHRoaXMub3B0aW9ucy5zaGFkb3cuY29sb3IsXG4gICAgICBzaGFkb3dTaXplOiB0aGlzLm9wdGlvbnMuc2hhZG93LnNpemUsXG4gICAgICBzaGFkb3dYOiB0aGlzLm9wdGlvbnMuc2hhZG93LngsXG4gICAgICBzaGFkb3dZOiB0aGlzLm9wdGlvbnMuc2hhZG93LnksXG4gICAgICBkYXNoZXM6IHRoaXMub3B0aW9ucy5kYXNoZXMsXG4gICAgICB3aWR0aDogdGhpcy5vcHRpb25zLndpZHRoLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy5vcHRpb25zLmJhY2tncm91bmQuZW5hYmxlZCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5vcHRpb25zLmJhY2tncm91bmQuY29sb3IsXG4gICAgICBiYWNrZ3JvdW5kU2l6ZTogdGhpcy5vcHRpb25zLmJhY2tncm91bmQuc2l6ZSxcbiAgICAgIGJhY2tncm91bmREYXNoZXM6IHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kLmRhc2hlcyxcbiAgICB9O1xuICAgIGlmICh0aGlzLnNlbGVjdGVkIHx8IHRoaXMuaG92ZXIpIHtcbiAgICAgIGlmICh0aGlzLmNob29zZXIgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZFdpZHRoID0gdGhpcy5vcHRpb25zLnNlbGVjdGlvbldpZHRoO1xuICAgICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0ZWRXaWR0aCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB2YWx1ZXMud2lkdGggPSBzZWxlY3RlZFdpZHRoKHZhbHVlcy53aWR0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZWN0ZWRXaWR0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdmFsdWVzLndpZHRoICs9IHNlbGVjdGVkV2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlcy53aWR0aCA9IE1hdGgubWF4KHZhbHVlcy53aWR0aCwgMC4zIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGUpO1xuICAgICAgICAgIHZhbHVlcy5jb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQ7XG4gICAgICAgICAgdmFsdWVzLnNoYWRvdyA9IHRoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhvdmVyKSB7XG4gICAgICAgICAgY29uc3QgaG92ZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ob3ZlcldpZHRoO1xuICAgICAgICAgIGlmICh0eXBlb2YgaG92ZXJXaWR0aCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB2YWx1ZXMud2lkdGggPSBob3ZlcldpZHRoKHZhbHVlcy53aWR0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaG92ZXJXaWR0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdmFsdWVzLndpZHRoICs9IGhvdmVyV2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlcy53aWR0aCA9IE1hdGgubWF4KHZhbHVlcy53aWR0aCwgMC4zIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGUpO1xuICAgICAgICAgIHZhbHVlcy5jb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvci5ob3ZlcjtcbiAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNob29zZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLmNob29zZXIodmFsdWVzLCB0aGlzLm9wdGlvbnMuaWQsIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuICAgICAgICBpZiAodmFsdWVzLmNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZXMuaW5oZXJpdHNDb2xvciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZXMuc2hhZG93ID09PSBmYWxzZSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3dDb2xvciAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy5jb2xvciB8fFxuICAgICAgICAgICAgdmFsdWVzLnNoYWRvd1NpemUgIT09IHRoaXMub3B0aW9ucy5zaGFkb3cuc2l6ZSB8fFxuICAgICAgICAgICAgdmFsdWVzLnNoYWRvd1ggIT09IHRoaXMub3B0aW9ucy5zaGFkb3cueCB8fFxuICAgICAgICAgICAgdmFsdWVzLnNoYWRvd1kgIT09IHRoaXMub3B0aW9ucy5zaGFkb3cueVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFsdWVzLnNoYWRvdyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlcy5zaGFkb3cgPSB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQ7XG4gICAgICB2YWx1ZXMud2lkdGggPSBNYXRoLm1heCh2YWx1ZXMud2lkdGgsIDAuMyAvIHRoaXMuYm9keS52aWV3LnNjYWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGUgdGhlIG9wdGlvbnMgaW4gdGhlIGxhYmVsIG1vZHVsZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgdXBkYXRlTGFiZWxNb2R1bGUob3B0aW9ucykge1xuICAgIGNvbnN0IHBpbGUgPSBbXG4gICAgICBvcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgdGhpcy5nbG9iYWxPcHRpb25zLCAvLyBDdXJyZW50bHkgc2V0IGdsb2JhbCBlZGdlIG9wdGlvbnNcbiAgICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMsXG4gICAgXTtcblxuICAgIHRoaXMubGFiZWxNb2R1bGUudXBkYXRlKHRoaXMub3B0aW9ucywgcGlsZSk7XG5cbiAgICBpZiAodGhpcy5sYWJlbE1vZHVsZS5iYXNlU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJhc2VGb250U2l6ZSA9IHRoaXMubGFiZWxNb2R1bGUuYmFzZVNpemU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgZWRnZSB0eXBlLCBzZXQgdGhlIG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICB1cGRhdGVFZGdlVHlwZSgpIHtcbiAgICBjb25zdCBzbW9vdGggPSB0aGlzLm9wdGlvbnMuc21vb3RoO1xuICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGxldCBjaGFuZ2VJblR5cGUgPSB0cnVlO1xuICAgIGlmICh0aGlzLmVkZ2VUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuZWRnZVR5cGUgaW5zdGFuY2VvZiBCZXppZXJFZGdlRHluYW1pYyAmJlxuICAgICAgICAgIHNtb290aC5lbmFibGVkID09PSB0cnVlICYmXG4gICAgICAgICAgc21vb3RoLnR5cGUgPT09IFwiZHluYW1pY1wiKSB8fFxuICAgICAgICAodGhpcy5lZGdlVHlwZSBpbnN0YW5jZW9mIEN1YmljQmV6aWVyRWRnZSAmJlxuICAgICAgICAgIHNtb290aC5lbmFibGVkID09PSB0cnVlICYmXG4gICAgICAgICAgc21vb3RoLnR5cGUgPT09IFwiY3ViaWNCZXppZXJcIikgfHxcbiAgICAgICAgKHRoaXMuZWRnZVR5cGUgaW5zdGFuY2VvZiBCZXppZXJFZGdlU3RhdGljICYmXG4gICAgICAgICAgc21vb3RoLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgICAgICBzbW9vdGgudHlwZSAhPT0gXCJkeW5hbWljXCIgJiZcbiAgICAgICAgICBzbW9vdGgudHlwZSAhPT0gXCJjdWJpY0JlemllclwiKSB8fFxuICAgICAgICAodGhpcy5lZGdlVHlwZSBpbnN0YW5jZW9mIFN0cmFpZ2h0RWRnZSAmJiBzbW9vdGgudHlwZS5lbmFibGVkID09PSBmYWxzZSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VJblR5cGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VJblR5cGUgPT09IHRydWUpIHtcbiAgICAgICAgZGF0YUNoYW5nZWQgPSB0aGlzLmNsZWFudXAoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZUluVHlwZSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHNtb290aC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChzbW9vdGgudHlwZSA9PT0gXCJkeW5hbWljXCIpIHtcbiAgICAgICAgICBkYXRhQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5lZGdlVHlwZSA9IG5ldyBCZXppZXJFZGdlRHluYW1pYyhcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGVcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHNtb290aC50eXBlID09PSBcImN1YmljQmV6aWVyXCIpIHtcbiAgICAgICAgICB0aGlzLmVkZ2VUeXBlID0gbmV3IEN1YmljQmV6aWVyRWRnZShcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGVcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZWRnZVR5cGUgPSBuZXcgQmV6aWVyRWRnZVN0YXRpYyhcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkZ2VUeXBlID0gbmV3IFN0cmFpZ2h0RWRnZShcbiAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgbm90aGluZyBjaGFuZ2VzLCB3ZSBqdXN0IHNldCB0aGUgb3B0aW9ucy5cbiAgICAgIHRoaXMuZWRnZVR5cGUuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YUNoYW5nZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29ubmVjdCBhbiBlZGdlIHRvIGl0cyBub2Rlc1xuICAgKi9cbiAgY29ubmVjdCgpIHtcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcblxuICAgIHRoaXMuZnJvbSA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLmZyb21JZF0gfHwgdW5kZWZpbmVkO1xuICAgIHRoaXMudG8gPSB0aGlzLmJvZHkubm9kZXNbdGhpcy50b0lkXSB8fCB1bmRlZmluZWQ7XG4gICAgdGhpcy5jb25uZWN0ZWQgPSB0aGlzLmZyb20gIT09IHVuZGVmaW5lZCAmJiB0aGlzLnRvICE9PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5jb25uZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZnJvbS5hdHRhY2hFZGdlKHRoaXMpO1xuICAgICAgdGhpcy50by5hdHRhY2hFZGdlKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5mcm9tKSB7XG4gICAgICAgIHRoaXMuZnJvbS5kZXRhY2hFZGdlKHRoaXMpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudG8pIHtcbiAgICAgICAgdGhpcy50by5kZXRhY2hFZGdlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZWRnZVR5cGUuY29ubmVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2Nvbm5lY3QgYW4gZWRnZSBmcm9tIGl0cyBub2Rlc1xuICAgKi9cbiAgZGlzY29ubmVjdCgpIHtcbiAgICBpZiAodGhpcy5mcm9tKSB7XG4gICAgICB0aGlzLmZyb20uZGV0YWNoRWRnZSh0aGlzKTtcbiAgICAgIHRoaXMuZnJvbSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHRoaXMudG8pIHtcbiAgICAgIHRoaXMudG8uZGV0YWNoRWRnZSh0aGlzKTtcbiAgICAgIHRoaXMudG8gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgdGhlIHRpdGxlIG9mIHRoaXMgZWRnZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gdGl0bGUgICAgVGhlIHRpdGxlIG9mIHRoZSBlZGdlLCBvciB1bmRlZmluZWQgd2hlbiBubyB0aXRsZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcyBiZWVuIHNldC5cbiAgICovXG4gIGdldFRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLnRpdGxlO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrIGlmIHRoaXMgbm9kZSBpcyBzZWxlY3RlXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBzZWxlY3RlZCAgIFRydWUgaWYgbm9kZSBpcyBzZWxlY3RlZCwgZWxzZSBmYWxzZVxuICAgKi9cbiAgaXNTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgdmFsdWUgb2YgdGhlIGVkZ2UuIENhbiBiZSB1bmRlZmluZWRcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gdmFsdWVcbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0IHRoZSB2YWx1ZSByYW5nZSBvZiB0aGUgZWRnZS4gVGhlIGVkZ2Ugd2lsbCBhZGp1c3QgaXQncyB3aWR0aFxuICAgKiBiYXNlZCBvbiBpdHMgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heFxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxcbiAgICovXG4gIHNldFZhbHVlUmFuZ2UobWluLCBtYXgsIHRvdGFsKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzY2FsZSA9IHRoaXMub3B0aW9ucy5zY2FsaW5nLmN1c3RvbVNjYWxpbmdGdW5jdGlvbihcbiAgICAgICAgbWluLFxuICAgICAgICBtYXgsXG4gICAgICAgIHRvdGFsLFxuICAgICAgICB0aGlzLm9wdGlvbnMudmFsdWVcbiAgICAgICk7XG4gICAgICBjb25zdCB3aWR0aERpZmYgPSB0aGlzLm9wdGlvbnMuc2NhbGluZy5tYXggLSB0aGlzLm9wdGlvbnMuc2NhbGluZy5taW47XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBmb250RGlmZiA9XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwubWF4IC0gdGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwubWluO1xuICAgICAgICB0aGlzLm9wdGlvbnMuZm9udC5zaXplID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5taW4gKyBzY2FsZSAqIGZvbnREaWZmO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRpb25zLndpZHRoID0gdGhpcy5vcHRpb25zLnNjYWxpbmcubWluICsgc2NhbGUgKiB3aWR0aERpZmY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9ucy53aWR0aCA9IHRoaXMuYmFzZVdpZHRoO1xuICAgICAgdGhpcy5vcHRpb25zLmZvbnQuc2l6ZSA9IHRoaXMuYmFzZUZvbnRTaXplO1xuICAgIH1cblxuICAgIHRoaXMuX3NldEludGVyYWN0aW9uV2lkdGhzKCk7XG4gICAgdGhpcy51cGRhdGVMYWJlbE1vZHVsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0SW50ZXJhY3Rpb25XaWR0aHMoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuaG92ZXJXaWR0aCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLmhvdmVyV2lkdGggPSB0aGlzLm9wdGlvbnMuaG92ZXJXaWR0aCh0aGlzLm9wdGlvbnMud2lkdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLmhvdmVyV2lkdGggPSB0aGlzLm9wdGlvbnMuaG92ZXJXaWR0aCArIHRoaXMub3B0aW9ucy53aWR0aDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uV2lkdGggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5lZGdlVHlwZS5zZWxlY3Rpb25XaWR0aCA9IHRoaXMub3B0aW9ucy5zZWxlY3Rpb25XaWR0aChcbiAgICAgICAgdGhpcy5vcHRpb25zLndpZHRoXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLnNlbGVjdGlvbldpZHRoID1cbiAgICAgICAgdGhpcy5vcHRpb25zLnNlbGVjdGlvbldpZHRoICsgdGhpcy5vcHRpb25zLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgYSBlZGdlXG4gICAqIERyYXcgdGhpcyBlZGdlIGluIHRoZSBnaXZlbiBjYW52YXNcbiAgICogVGhlIDJkIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhcyBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSAgIGN0eFxuICAgKi9cbiAgZHJhdyhjdHgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldEZvcm1hdHRpbmdWYWx1ZXMoKTtcbiAgICBpZiAodmFsdWVzLmhpZGRlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCB0aGUgdmlhIG5vZGUgZnJvbSB0aGUgZWRnZSB0eXBlXG4gICAgY29uc3QgdmlhTm9kZSA9IHRoaXMuZWRnZVR5cGUuZ2V0VmlhTm9kZSgpO1xuXG4gICAgLy8gZHJhdyBsaW5lIGFuZCBsYWJlbFxuICAgIHRoaXMuZWRnZVR5cGUuZHJhd0xpbmUoY3R4LCB2YWx1ZXMsIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIsIHZpYU5vZGUpO1xuICAgIHRoaXMuZHJhd0xhYmVsKGN0eCwgdmlhTm9kZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IGFycm93c1xuICAgKiBEcmF3IHRoaXMgYXJyb3dzIGluIHRoZSBnaXZlbiBjYW52YXNcbiAgICogVGhlIDJkIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhcyBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSAgIGN0eFxuICAgKi9cbiAgZHJhd0Fycm93cyhjdHgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldEZvcm1hdHRpbmdWYWx1ZXMoKTtcbiAgICBpZiAodmFsdWVzLmhpZGRlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCB0aGUgdmlhIG5vZGUgZnJvbSB0aGUgZWRnZSB0eXBlXG4gICAgY29uc3QgdmlhTm9kZSA9IHRoaXMuZWRnZVR5cGUuZ2V0VmlhTm9kZSgpO1xuICAgIGNvbnN0IGFycm93RGF0YSA9IHt9O1xuXG4gICAgLy8gcmVzdG9yZSBlZGdlIHRhcmdldHMgdG8gZGVmYXVsdHNcbiAgICB0aGlzLmVkZ2VUeXBlLmZyb21Qb2ludCA9IHRoaXMuZWRnZVR5cGUuZnJvbTtcbiAgICB0aGlzLmVkZ2VUeXBlLnRvUG9pbnQgPSB0aGlzLmVkZ2VUeXBlLnRvO1xuXG4gICAgLy8gZnJvbSBhbmQgdG8gYXJyb3dzIGdpdmUgYSBkaWZmZXJlbnQgZW5kIHBvaW50IGZvciBlZGdlcy4gd2Ugc2V0IHRoZW0gaGVyZVxuICAgIGlmICh2YWx1ZXMuZnJvbUFycm93KSB7XG4gICAgICBhcnJvd0RhdGEuZnJvbSA9IHRoaXMuZWRnZVR5cGUuZ2V0QXJyb3dEYXRhKFxuICAgICAgICBjdHgsXG4gICAgICAgIFwiZnJvbVwiLFxuICAgICAgICB2aWFOb2RlLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICB2YWx1ZXNcbiAgICAgICk7XG4gICAgICBpZiAodmFsdWVzLmFycm93U3RyaWtldGhyb3VnaCA9PT0gZmFsc2UpXG4gICAgICAgIHRoaXMuZWRnZVR5cGUuZnJvbVBvaW50ID0gYXJyb3dEYXRhLmZyb20uY29yZTtcbiAgICAgIGlmICh2YWx1ZXMuZnJvbUFycm93U3JjKSB7XG4gICAgICAgIGFycm93RGF0YS5mcm9tLmltYWdlID0gdGhpcy5pbWFnZWxpc3QubG9hZCh2YWx1ZXMuZnJvbUFycm93U3JjKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMuZnJvbUFycm93SW1hZ2VXaWR0aCkge1xuICAgICAgICBhcnJvd0RhdGEuZnJvbS5pbWFnZVdpZHRoID0gdmFsdWVzLmZyb21BcnJvd0ltYWdlV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVzLmZyb21BcnJvd0ltYWdlSGVpZ2h0KSB7XG4gICAgICAgIGFycm93RGF0YS5mcm9tLmltYWdlSGVpZ2h0ID0gdmFsdWVzLmZyb21BcnJvd0ltYWdlSGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFsdWVzLnRvQXJyb3cpIHtcbiAgICAgIGFycm93RGF0YS50byA9IHRoaXMuZWRnZVR5cGUuZ2V0QXJyb3dEYXRhKFxuICAgICAgICBjdHgsXG4gICAgICAgIFwidG9cIixcbiAgICAgICAgdmlhTm9kZSxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgdmFsdWVzXG4gICAgICApO1xuICAgICAgaWYgKHZhbHVlcy5hcnJvd1N0cmlrZXRocm91Z2ggPT09IGZhbHNlKVxuICAgICAgICB0aGlzLmVkZ2VUeXBlLnRvUG9pbnQgPSBhcnJvd0RhdGEudG8uY29yZTtcbiAgICAgIGlmICh2YWx1ZXMudG9BcnJvd1NyYykge1xuICAgICAgICBhcnJvd0RhdGEudG8uaW1hZ2UgPSB0aGlzLmltYWdlbGlzdC5sb2FkKHZhbHVlcy50b0Fycm93U3JjKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMudG9BcnJvd0ltYWdlV2lkdGgpIHtcbiAgICAgICAgYXJyb3dEYXRhLnRvLmltYWdlV2lkdGggPSB2YWx1ZXMudG9BcnJvd0ltYWdlV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVzLnRvQXJyb3dJbWFnZUhlaWdodCkge1xuICAgICAgICBhcnJvd0RhdGEudG8uaW1hZ2VIZWlnaHQgPSB2YWx1ZXMudG9BcnJvd0ltYWdlSGVpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoZSBtaWRkbGUgYXJyb3cgZGVwZW5kcyBvbiB0aGUgbGluZSwgd2hpY2ggY2FuIGRlcGVuZCBvbiB0aGUgdG8gYW5kIGZyb20gYXJyb3dzIHNvIHdlIGRvIHRoaXMgb25lIGxhc3RseS5cbiAgICBpZiAodmFsdWVzLm1pZGRsZUFycm93KSB7XG4gICAgICBhcnJvd0RhdGEubWlkZGxlID0gdGhpcy5lZGdlVHlwZS5nZXRBcnJvd0RhdGEoXG4gICAgICAgIGN0eCxcbiAgICAgICAgXCJtaWRkbGVcIixcbiAgICAgICAgdmlhTm9kZSxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgdmFsdWVzXG4gICAgICApO1xuXG4gICAgICBpZiAodmFsdWVzLm1pZGRsZUFycm93U3JjKSB7XG4gICAgICAgIGFycm93RGF0YS5taWRkbGUuaW1hZ2UgPSB0aGlzLmltYWdlbGlzdC5sb2FkKHZhbHVlcy5taWRkbGVBcnJvd1NyYyk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVzLm1pZGRsZUFycm93SW1hZ2VXaWR0aCkge1xuICAgICAgICBhcnJvd0RhdGEubWlkZGxlLmltYWdlV2lkdGggPSB2YWx1ZXMubWlkZGxlQXJyb3dJbWFnZVdpZHRoO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlcy5taWRkbGVBcnJvd0ltYWdlSGVpZ2h0KSB7XG4gICAgICAgIGFycm93RGF0YS5taWRkbGUuaW1hZ2VIZWlnaHQgPSB2YWx1ZXMubWlkZGxlQXJyb3dJbWFnZUhlaWdodDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsdWVzLmZyb21BcnJvdykge1xuICAgICAgdGhpcy5lZGdlVHlwZS5kcmF3QXJyb3dIZWFkKFxuICAgICAgICBjdHgsXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgYXJyb3dEYXRhLmZyb21cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh2YWx1ZXMubWlkZGxlQXJyb3cpIHtcbiAgICAgIHRoaXMuZWRnZVR5cGUuZHJhd0Fycm93SGVhZChcbiAgICAgICAgY3R4LFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgIHRoaXMuaG92ZXIsXG4gICAgICAgIGFycm93RGF0YS5taWRkbGVcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh2YWx1ZXMudG9BcnJvdykge1xuICAgICAgdGhpcy5lZGdlVHlwZS5kcmF3QXJyb3dIZWFkKFxuICAgICAgICBjdHgsXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgYXJyb3dEYXRhLnRvXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Tm9kZX0gdmlhTm9kZVxuICAgKi9cbiAgZHJhd0xhYmVsKGN0eCwgdmlhTm9kZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2V0IHN0eWxlXG4gICAgICBjb25zdCBub2RlMSA9IHRoaXMuZnJvbTtcbiAgICAgIGNvbnN0IG5vZGUyID0gdGhpcy50bztcblxuICAgICAgaWYgKHRoaXMubGFiZWxNb2R1bGUuZGlmZmVyZW50U3RhdGUodGhpcy5zZWxlY3RlZCwgdGhpcy5ob3ZlcikpIHtcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5nZXRUZXh0U2l6ZShjdHgsIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcG9pbnQ7XG4gICAgICBpZiAobm9kZTEuaWQgIT0gbm9kZTIuaWQpIHtcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5wb2ludFRvU2VsZiA9IGZhbHNlO1xuICAgICAgICBwb2ludCA9IHRoaXMuZWRnZVR5cGUuZ2V0UG9pbnQoMC41LCB2aWFOb2RlKTtcbiAgICAgICAgY3R4LnNhdmUoKTtcblxuICAgICAgICBjb25zdCByb3RhdGlvblBvaW50ID0gdGhpcy5fZ2V0Um90YXRpb24oY3R4KTtcbiAgICAgICAgaWYgKHJvdGF0aW9uUG9pbnQuYW5nbGUgIT0gMCkge1xuICAgICAgICAgIGN0eC50cmFuc2xhdGUocm90YXRpb25Qb2ludC54LCByb3RhdGlvblBvaW50LnkpO1xuICAgICAgICAgIGN0eC5yb3RhdGUocm90YXRpb25Qb2ludC5hbmdsZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IHRoZSBsYWJlbFxuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoY3R4LCBwb2ludC54LCBwb2ludC55LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyKTtcblxuICAgICAgICAvKlxuICAgICAgICAvLyBVc2VmdWwgZGVidWcgY29kZTogZHJhdyBhIGJvcmRlciBhcm91bmQgdGhlIGxhYmVsXG4gICAgICAgIC8vIFRoaXMgc2hvdWxkICoqbm90KiogYmUgZW5hYmxlZCBpbiBwcm9kdWN0aW9uIVxuICAgICAgICB2YXIgc2l6ZSA9IHRoaXMubGFiZWxNb2R1bGUuZ2V0U2l6ZSgpOzsgLy8gOzsgaW50ZW50aW9uYWwgc28gbGludCBjYXRjaGVzIGl0XG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IFwiI2ZmMDAwMFwiO1xuICAgICAgICBjdHguc3Ryb2tlUmVjdChzaXplLmxlZnQsIHNpemUudG9wLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7XG4gICAgICAgIC8vIEVuZCAgZGVidWcgY29kZVxuKi9cblxuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBvcmllbnRhdGlvbnMuXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUucG9pbnRUb1NlbGYgPSB0cnVlO1xuXG4gICAgICAgIC8vIGdldCBjaXJjbGUgY29vcmRpbmF0ZXNcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBnZXRTZWxmUmVmQ29vcmRpbmF0ZXMoXG4gICAgICAgICAgY3R4LFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLnNpemUsXG4gICAgICAgICAgbm9kZTFcbiAgICAgICAgKTtcblxuICAgICAgICBwb2ludCA9IHRoaXMuX3BvaW50T25DaXJjbGUoXG4gICAgICAgICAgY29vcmRpbmF0ZXMueCxcbiAgICAgICAgICBjb29yZGluYXRlcy55LFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLnNpemUsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGVcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoY3R4LCBwb2ludC54LCBwb2ludC55LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGFsbCB2aXN1YWwgZWxlbWVudHMgb2YgdGhpcyBlZGdlIGluc3RhbmNlLCBpbiB3aGljaCB0aGUgZ2l2ZW5cbiAgICogcG9pbnQgZmFsbHMgd2l0aGluIHRoZSBib3VuZGluZyBzaGFwZS5cbiAgICpcbiAgICogQHBhcmFtIHtwb2ludH0gcG9pbnRcbiAgICogQHJldHVybnMge0FycmF5LjxlZGdlQ2xpY2tJdGVtfGVkZ2VMYWJlbENsaWNrSXRlbT59IGxpc3Qgd2l0aCB0aGUgaXRlbXMgd2hpY2ggYXJlIG9uIHRoZSBwb2ludFxuICAgKi9cbiAgZ2V0SXRlbXNPblBvaW50KHBvaW50KSB7XG4gICAgY29uc3QgcmV0ID0gW107XG5cbiAgICBpZiAodGhpcy5sYWJlbE1vZHVsZS52aXNpYmxlKCkpIHtcbiAgICAgIGNvbnN0IHJvdGF0aW9uUG9pbnQgPSB0aGlzLl9nZXRSb3RhdGlvbigpO1xuICAgICAgaWYgKHBvaW50SW5SZWN0KHRoaXMubGFiZWxNb2R1bGUuZ2V0U2l6ZSgpLCBwb2ludCwgcm90YXRpb25Qb2ludCkpIHtcbiAgICAgICAgcmV0LnB1c2goeyBlZGdlSWQ6IHRoaXMuaWQsIGxhYmVsSWQ6IDAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgbGVmdDogcG9pbnQueCxcbiAgICAgIHRvcDogcG9pbnQueSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuaXNPdmVybGFwcGluZ1dpdGgob2JqKSkge1xuICAgICAgcmV0LnB1c2goeyBlZGdlSWQ6IHRoaXMuaWQgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIG9iamVjdCBpcyBvdmVybGFwcGluZyB3aXRoIHRoZSBwcm92aWRlZCBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iaiAgIGFuIG9iamVjdCB3aXRoIHBhcmFtZXRlcnMgbGVmdCwgdG9wXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAgICAgVHJ1ZSBpZiBsb2NhdGlvbiBpcyBsb2NhdGVkIG9uIHRoZSBlZGdlXG4gICAqL1xuICBpc092ZXJsYXBwaW5nV2l0aChvYmopIHtcbiAgICBpZiAodGhpcy5jb25uZWN0ZWQpIHtcbiAgICAgIGNvbnN0IGRpc3RNYXggPSAxMDtcbiAgICAgIGNvbnN0IHhGcm9tID0gdGhpcy5mcm9tLng7XG4gICAgICBjb25zdCB5RnJvbSA9IHRoaXMuZnJvbS55O1xuICAgICAgY29uc3QgeFRvID0gdGhpcy50by54O1xuICAgICAgY29uc3QgeVRvID0gdGhpcy50by55O1xuICAgICAgY29uc3QgeE9iaiA9IG9iai5sZWZ0O1xuICAgICAgY29uc3QgeU9iaiA9IG9iai50b3A7XG5cbiAgICAgIGNvbnN0IGRpc3QgPSB0aGlzLmVkZ2VUeXBlLmdldERpc3RhbmNlVG9FZGdlKFxuICAgICAgICB4RnJvbSxcbiAgICAgICAgeUZyb20sXG4gICAgICAgIHhUbyxcbiAgICAgICAgeVRvLFxuICAgICAgICB4T2JqLFxuICAgICAgICB5T2JqXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gZGlzdCA8IGRpc3RNYXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSByb3RhdGlvbiBwb2ludCwgaWYgYW55LlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gW2N0eF0gaWYgcGFzc2VkLCBkbyBhIHJlY2FsY3VsYXRpb24gb2YgdGhlIGxhYmVsIHNpemVcbiAgICogQHJldHVybnMge3JvdGF0aW9uUG9pbnR9IHRoZSBwb2ludCB0byByb3RhdGUgYXJvdW5kIGFuZCB0aGUgYW5nbGUgaW4gcmFkaWFucyB0byByb3RhdGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRSb3RhdGlvbihjdHgpIHtcbiAgICBjb25zdCB2aWFOb2RlID0gdGhpcy5lZGdlVHlwZS5nZXRWaWFOb2RlKCk7XG4gICAgY29uc3QgcG9pbnQgPSB0aGlzLmVkZ2VUeXBlLmdldFBvaW50KDAuNSwgdmlhTm9kZSk7XG5cbiAgICBpZiAoY3R4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubGFiZWxNb2R1bGUuY2FsY3VsYXRlTGFiZWxTaXplKFxuICAgICAgICBjdHgsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgIHRoaXMuaG92ZXIsXG4gICAgICAgIHBvaW50LngsXG4gICAgICAgIHBvaW50LnlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0ge1xuICAgICAgeDogcG9pbnQueCxcbiAgICAgIHk6IHRoaXMubGFiZWxNb2R1bGUuc2l6ZS55TGluZSxcbiAgICAgIGFuZ2xlOiAwLFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMubGFiZWxNb2R1bGUudmlzaWJsZSgpKSB7XG4gICAgICByZXR1cm4gcmV0OyAvLyBEb24ndCBldmVuIGJvdGhlciBkb2luZyB0aGUgYXRhbjIsIHRoZXJlJ3Mgbm90aGluZyB0byBkcmF3XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5mb250LmFsaWduID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgcmV0dXJuIHJldDsgLy8gTm8gbmVlZCB0byBjYWxjdWxhdGUgYW5nbGVcbiAgICB9XG5cbiAgICBjb25zdCBkeSA9IHRoaXMuZnJvbS55IC0gdGhpcy50by55O1xuICAgIGNvbnN0IGR4ID0gdGhpcy5mcm9tLnggLSB0aGlzLnRvLng7XG4gICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMihkeSwgZHgpOyAvLyByYWRpYW5zXG5cbiAgICAvLyByb3RhdGUgc28gdGhhdCBsYWJlbCBpcyByZWFkYWJsZVxuICAgIGlmICgoYW5nbGUgPCAtMSAmJiBkeCA8IDApIHx8IChhbmdsZSA+IDAgJiYgZHggPCAwKSkge1xuICAgICAgYW5nbGUgKz0gTWF0aC5QSTtcbiAgICB9XG4gICAgcmV0LmFuZ2xlID0gYW5nbGU7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHBvaW50IG9uIGEgY2lyY2xlXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IHBvaW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcG9pbnRPbkNpcmNsZSh4LCB5LCByYWRpdXMsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHggKyByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSksXG4gICAgICB5OiB5IC0gcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBzZWxlY3RlZCBzdGF0ZSB0byB0cnVlXG4gICAqL1xuICBzZWxlY3QoKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBzZWxlY3RlZCBzdGF0ZSB0byBmYWxzZVxuICAgKi9cbiAgdW5zZWxlY3QoKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIGNsZWFucyBhbGwgcmVxdWlyZWQgdGhpbmdzIG9uIGRlbGV0ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGNsZWFudXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWRnZVR5cGUuY2xlYW51cCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBlZGdlIGZyb20gdGhlIGxpc3QgYW5kIHBlcmZvcm0gbmVjZXNzYXJ5IGNsZWFudXAuXG4gICAqL1xuICByZW1vdmUoKSB7XG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgdGhpcy5kaXNjb25uZWN0KCk7XG4gICAgZGVsZXRlIHRoaXMuYm9keS5lZGdlc1t0aGlzLmlkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBib3RoIGNvbm5lY3Rpbmcgbm9kZXMgZXhpc3RcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBlbmRQb2ludHNWYWxpZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5ib2R5Lm5vZGVzW3RoaXMuZnJvbUlkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmJvZHkubm9kZXNbdGhpcy50b0lkXSAhPT0gdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFZGdlO1xuIiwgImltcG9ydCB7IGRlZXBFeHRlbmQsIGZvckVhY2ggfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBEYXRhU2V0LCBpc0RhdGFWaWV3TGlrZSB9IGZyb20gXCJ2aXMtZGF0YS9lc25leHRcIjtcbmltcG9ydCBFZGdlIGZyb20gXCIuL2NvbXBvbmVudHMvRWRnZVwiO1xuXG4vKipcbiAqIEhhbmRsZXIgZm9yIEVkZ2VzXG4gKi9cbmNsYXNzIEVkZ2VzSGFuZGxlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0FycmF5LjxJbWFnZT59IGltYWdlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxHcm91cD59IGdyb3Vwc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgaW1hZ2VzLCBncm91cHMpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuaW1hZ2VzID0gaW1hZ2VzO1xuICAgIHRoaXMuZ3JvdXBzID0gZ3JvdXBzO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBlZGdlIEFQSSBpbiB0aGUgYm9keSBjb250YWluZXJcbiAgICB0aGlzLmJvZHkuZnVuY3Rpb25zLmNyZWF0ZUVkZ2UgPSB0aGlzLmNyZWF0ZS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5lZGdlc0xpc3RlbmVycyA9IHtcbiAgICAgIGFkZDogKGV2ZW50LCBwYXJhbXMpID0+IHtcbiAgICAgICAgdGhpcy5hZGQocGFyYW1zLml0ZW1zKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlKHBhcmFtcy5pdGVtcyk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlOiAoZXZlbnQsIHBhcmFtcykgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZShwYXJhbXMuaXRlbXMpO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGFycm93czoge1xuICAgICAgICB0bzogeyBlbmFibGVkOiBmYWxzZSwgc2NhbGVGYWN0b3I6IDEsIHR5cGU6IFwiYXJyb3dcIiB9LCAvLyBib29sZWFuIC8ge2Fycm93U2NhbGVGYWN0b3I6MX0gLyB7ZW5hYmxlZDogZmFsc2UsIGFycm93U2NhbGVGYWN0b3I6MX1cbiAgICAgICAgbWlkZGxlOiB7IGVuYWJsZWQ6IGZhbHNlLCBzY2FsZUZhY3RvcjogMSwgdHlwZTogXCJhcnJvd1wiIH0sXG4gICAgICAgIGZyb206IHsgZW5hYmxlZDogZmFsc2UsIHNjYWxlRmFjdG9yOiAxLCB0eXBlOiBcImFycm93XCIgfSxcbiAgICAgIH0sXG4gICAgICBlbmRQb2ludE9mZnNldDoge1xuICAgICAgICBmcm9tOiAwLFxuICAgICAgICB0bzogMCxcbiAgICAgIH0sXG4gICAgICBhcnJvd1N0cmlrZXRocm91Z2g6IHRydWUsXG4gICAgICBjb2xvcjoge1xuICAgICAgICBjb2xvcjogXCIjODQ4NDg0XCIsXG4gICAgICAgIGhpZ2hsaWdodDogXCIjODQ4NDg0XCIsXG4gICAgICAgIGhvdmVyOiBcIiM4NDg0ODRcIixcbiAgICAgICAgaW5oZXJpdDogXCJmcm9tXCIsXG4gICAgICAgIG9wYWNpdHk6IDEuMCxcbiAgICAgIH0sXG4gICAgICBkYXNoZXM6IGZhbHNlLFxuICAgICAgZm9udDoge1xuICAgICAgICBjb2xvcjogXCIjMzQzNDM0XCIsXG4gICAgICAgIHNpemU6IDE0LCAvLyBweFxuICAgICAgICBmYWNlOiBcImFyaWFsXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwibm9uZVwiLFxuICAgICAgICBzdHJva2VXaWR0aDogMiwgLy8gcHhcbiAgICAgICAgc3Ryb2tlQ29sb3I6IFwiI2ZmZmZmZlwiLFxuICAgICAgICBhbGlnbjogXCJob3Jpem9udGFsXCIsXG4gICAgICAgIG11bHRpOiBmYWxzZSxcbiAgICAgICAgdmFkanVzdDogMCxcbiAgICAgICAgYm9sZDoge1xuICAgICAgICAgIG1vZDogXCJib2xkXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGJvbGRpdGFsOiB7XG4gICAgICAgICAgbW9kOiBcImJvbGQgaXRhbGljXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGl0YWw6IHtcbiAgICAgICAgICBtb2Q6IFwiaXRhbGljXCIsXG4gICAgICAgIH0sXG4gICAgICAgIG1vbm86IHtcbiAgICAgICAgICBtb2Q6IFwiXCIsXG4gICAgICAgICAgc2l6ZTogMTUsIC8vIHB4XG4gICAgICAgICAgZmFjZTogXCJjb3VyaWVyIG5ld1wiLFxuICAgICAgICAgIHZhZGp1c3Q6IDIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgIGhvdmVyV2lkdGg6IDEuNSxcbiAgICAgIGxhYmVsOiB1bmRlZmluZWQsXG4gICAgICBsYWJlbEhpZ2hsaWdodEJvbGQ6IHRydWUsXG4gICAgICBsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgIHBoeXNpY3M6IHRydWUsXG4gICAgICBzY2FsaW5nOiB7XG4gICAgICAgIG1pbjogMSxcbiAgICAgICAgbWF4OiAxNSxcbiAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIG1pbjogMTQsXG4gICAgICAgICAgbWF4OiAzMCxcbiAgICAgICAgICBtYXhWaXNpYmxlOiAzMCxcbiAgICAgICAgICBkcmF3VGhyZXNob2xkOiA1LFxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21TY2FsaW5nRnVuY3Rpb246IGZ1bmN0aW9uIChtaW4sIG1heCwgdG90YWwsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKG1heCA9PT0gbWluKSB7XG4gICAgICAgICAgICByZXR1cm4gMC41O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9IDEgLyAobWF4IC0gbWluKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCAodmFsdWUgLSBtaW4pICogc2NhbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzZWxlY3Rpb25XaWR0aDogMS41LFxuICAgICAgc2VsZlJlZmVyZW5jZToge1xuICAgICAgICBzaXplOiAyMCxcbiAgICAgICAgYW5nbGU6IE1hdGguUEkgLyA0LFxuICAgICAgICByZW5kZXJCZWhpbmRUaGVOb2RlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHNoYWRvdzoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgY29sb3I6IFwicmdiYSgwLDAsMCwwLjUpXCIsXG4gICAgICAgIHNpemU6IDEwLFxuICAgICAgICB4OiA1LFxuICAgICAgICB5OiA1LFxuICAgICAgfSxcbiAgICAgIGJhY2tncm91bmQ6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGNvbG9yOiBcInJnYmEoMTExLDExMSwxMTEsMSlcIixcbiAgICAgICAgc2l6ZTogMTAsXG4gICAgICAgIGRhc2hlczogZmFsc2UsXG4gICAgICB9LFxuICAgICAgc21vb3RoOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6IFwiZHluYW1pY1wiLFxuICAgICAgICBmb3JjZURpcmVjdGlvbjogXCJub25lXCIsXG4gICAgICAgIHJvdW5kbmVzczogMC41LFxuICAgICAgfSxcbiAgICAgIHRpdGxlOiB1bmRlZmluZWQsXG4gICAgICB3aWR0aDogMSxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIGRlZXBFeHRlbmQodGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgLy8gdGhpcyBhbGxvd3MgZXh0ZXJuYWwgbW9kdWxlcyB0byBmb3JjZSBhbGwgZHluYW1pYyBjdXJ2ZXMgdG8gdHVybiBzdGF0aWMuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZm9yY2VEaXNhYmxlRHluYW1pY0N1cnZlc1wiLCAodHlwZSwgZW1pdCA9IHRydWUpID0+IHtcbiAgICAgIGlmICh0eXBlID09PSBcImR5bmFtaWNcIikge1xuICAgICAgICB0eXBlID0gXCJjb250aW51b3VzXCI7XG4gICAgICB9XG4gICAgICBsZXQgZGF0YUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3QgZWRnZUlkIGluIHRoaXMuYm9keS5lZGdlcykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5lZGdlcywgZWRnZUlkKSkge1xuICAgICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgICAgICAgICBjb25zdCBlZGdlRGF0YSA9IHRoaXMuYm9keS5kYXRhLmVkZ2VzLmdldChlZGdlSWQpO1xuXG4gICAgICAgICAgLy8gb25seSBmb3JjaWJseSByZW1vdmUgdGhlIHNtb290aCBjdXJ2ZSBpZiB0aGUgZGF0YSBoYXMgYmVlbiBzZXQgb2YgdGhlIGVkZ2UgaGFzIHRoZSBzbW9vdGggY3VydmVzIGRlZmluZWQuXG4gICAgICAgICAgLy8gdGhpcyBpcyBiZWNhdXNlIGEgY2hhbmdlIGluIHRoZSBnbG9iYWwgd291bGQgbm90IGFmZmVjdCB0aGVzZSBjdXJ2ZXMuXG4gICAgICAgICAgaWYgKGVkZ2VEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNtb290aE9wdGlvbnMgPSBlZGdlRGF0YS5zbW9vdGg7XG4gICAgICAgICAgICBpZiAoc21vb3RoT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzbW9vdGhPcHRpb25zLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgICAgICAgICAgICBzbW9vdGhPcHRpb25zLnR5cGUgPT09IFwiZHluYW1pY1wiXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0T3B0aW9ucyh7IHNtb290aDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0T3B0aW9ucyh7IHNtb290aDogeyB0eXBlOiB0eXBlIH0gfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGFDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGVtaXQgPT09IHRydWUgJiYgZGF0YUNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHRoaXMgaXMgY2FsbGVkIHdoZW4gb3B0aW9ucyBvZiBFWElTVElORyBub2RlcyBvciBlZGdlcyBoYXZlIGNoYW5nZWQuXG4gICAgLy9cbiAgICAvLyBOT1RFOiBOb3QgdHJ1ZSwgY2FsbGVkIHdoZW4gb3B0aW9ucyBoYXZlIE5PVCBjaGFuZ2VkLCBmb3IgYm90aCBleGlzdGluZyBhcyB3ZWxsIGFzIG5ldyBub2Rlcy5cbiAgICAvLyAgICAgICBTZWUgdXBkYXRlKCkgZm9yIGxvZ2ljLlxuICAgIC8vIFRPRE86IFZlcmlmeSBhbmQgZXhhbWluZSB0aGUgY29uc2VxdWVuY2VzIG9mIHRoaXMuIEl0IG1pZ2h0IHN0aWxsIHRyaWdnZXIgd2hlblxuICAgIC8vICAgICAgIG5vbi1vcHRpb24gZmllbGRzIGhhdmUgY2hhbmdlZCwgYnV0IHRoZW4gcmVjb25uZWN0aW5nIGVkZ2VzIGlzIHN0aWxsIHVzZWxlc3MuXG4gICAgLy8gICAgICAgQWx0ZXJuYXRpdmVseSwgaXQgbWlnaHQgYWxzbyBiZSBjYWxsZWQgd2hlbiBlZGdlcyBhcmUgcmVtb3ZlZC5cbiAgICAvL1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFVcGRhdGVkXCIsICgpID0+IHtcbiAgICAgIHRoaXMucmVjb25uZWN0RWRnZXMoKTtcbiAgICB9KTtcblxuICAgIC8vIHJlZnJlc2ggdGhlIGVkZ2VzLiBVc2VkIHdoZW4gcmV2ZXJ0aW5nIGZyb20gaGllcmFyY2hpY2FsIGxheW91dFxuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwicmVmcmVzaEVkZ2VzXCIsIHRoaXMucmVmcmVzaC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInJlZnJlc2hcIiwgdGhpcy5yZWZyZXNoLmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICBmb3JFYWNoKHRoaXMuZWRnZXNMaXN0ZW5lcnMsIChjYWxsYmFjaywgZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYm9keS5kYXRhLmVkZ2VzKSB0aGlzLmJvZHkuZGF0YS5lZGdlcy5vZmYoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgICAgZGVsZXRlIHRoaXMuYm9keS5mdW5jdGlvbnMuY3JlYXRlRWRnZTtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkZ2VzTGlzdGVuZXJzLmFkZDtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkZ2VzTGlzdGVuZXJzLnVwZGF0ZTtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkZ2VzTGlzdGVuZXJzLnJlbW92ZTtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkZ2VzTGlzdGVuZXJzO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB1c2UgdGhlIHBhcnNlciBmcm9tIHRoZSBFZGdlIGNsYXNzIHRvIGZpbGwgaW4gYWxsIHNob3J0aGFuZCBub3RhdGlvbnNcbiAgICAgIEVkZ2UucGFyc2VPcHRpb25zKHRoaXMub3B0aW9ucywgb3B0aW9ucywgdHJ1ZSwgdGhpcy5kZWZhdWx0T3B0aW9ucywgdHJ1ZSk7XG5cbiAgICAgIC8vIHVwZGF0ZSBzbW9vdGggc2V0dGluZ3MgaW4gYWxsIGVkZ2VzXG4gICAgICBsZXQgZGF0YUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgIGlmIChvcHRpb25zLnNtb290aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWRnZUlkIGluIHRoaXMuYm9keS5lZGdlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlSWQpKSB7XG4gICAgICAgICAgICBkYXRhQ2hhbmdlZCA9XG4gICAgICAgICAgICAgIHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdLnVwZGF0ZUVkZ2VUeXBlKCkgfHwgZGF0YUNoYW5nZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSBmb250cyBpbiBhbGwgZWRnZXNcbiAgICAgIGlmIChvcHRpb25zLmZvbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGVkZ2VJZCBpbiB0aGlzLmJvZHkuZWRnZXMpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5lZGdlcywgZWRnZUlkKSkge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0udXBkYXRlTGFiZWxNb2R1bGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgdmFyaWFibGVzIGlmIG5lZWRlZFxuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLmhpZGRlbiAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIG9wdGlvbnMucGh5c2ljcyAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIGRhdGFDaGFuZ2VkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBlZGdlcyBieSByZWFkaW5nIHRoZSBkYXRhIHRhYmxlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBEYXRhU2V0IHwgRGF0YVZpZXd9IGVkZ2VzICAgIFRoZSBkYXRhIGNvbnRhaW5pbmcgdGhlIGVkZ2VzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkb05vdEVtaXQ9ZmFsc2VdIC0gU3VwcHJlc3MgZGF0YSBjaGFuZ2VkIGV2ZW50LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2V0RGF0YShlZGdlcywgZG9Ob3RFbWl0ID0gZmFsc2UpIHtcbiAgICBjb25zdCBvbGRFZGdlc0RhdGEgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcztcblxuICAgIGlmIChpc0RhdGFWaWV3TGlrZShcImlkXCIsIGVkZ2VzKSkge1xuICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMgPSBlZGdlcztcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZWRnZXMpKSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcyA9IG5ldyBEYXRhU2V0KCk7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5hZGQoZWRnZXMpO1xuICAgIH0gZWxzZSBpZiAoIWVkZ2VzKSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcyA9IG5ldyBEYXRhU2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheSBvciBEYXRhU2V0IGV4cGVjdGVkXCIpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGlzIHRoaXMgbnVsbCBvciB1bmRlZmluZWQgb3IgZmFsc2U/XG4gICAgaWYgKG9sZEVkZ2VzRGF0YSkge1xuICAgICAgLy8gdW5zdWJzY3JpYmUgZnJvbSBvbGQgZGF0YXNldFxuICAgICAgZm9yRWFjaCh0aGlzLmVkZ2VzTGlzdGVuZXJzLCAoY2FsbGJhY2ssIGV2ZW50KSA9PiB7XG4gICAgICAgIG9sZEVkZ2VzRGF0YS5vZmYoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSBkcmF3biBlZGdlc1xuICAgIHRoaXMuYm9keS5lZGdlcyA9IHt9O1xuXG4gICAgLy8gVE9ETzogaXMgdGhpcyBudWxsIG9yIHVuZGVmaW5lZCBvciBmYWxzZT9cbiAgICBpZiAodGhpcy5ib2R5LmRhdGEuZWRnZXMpIHtcbiAgICAgIC8vIHN1YnNjcmliZSB0byBuZXcgZGF0YXNldFxuICAgICAgZm9yRWFjaCh0aGlzLmVkZ2VzTGlzdGVuZXJzLCAoY2FsbGJhY2ssIGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzLm9uKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICB9KTtcblxuICAgICAgLy8gZHJhdyBhbGwgbmV3IG5vZGVzXG4gICAgICBjb25zdCBpZHMgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXRJZHMoKTtcbiAgICAgIHRoaXMuYWRkKGlkcywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9hZGp1c3RFZGdlc0ZvckhpZXJhcmNoaWNhbExheW91dFwiKTtcbiAgICBpZiAoZG9Ob3RFbWl0ID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvTm90RW1pdD1mYWxzZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFkZChpZHMsIGRvTm90RW1pdCA9IGZhbHNlKSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgZWRnZXNEYXRhID0gdGhpcy5ib2R5LmRhdGEuZWRnZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG5cbiAgICAgIGNvbnN0IG9sZEVkZ2UgPSBlZGdlc1tpZF07XG4gICAgICBpZiAob2xkRWRnZSkge1xuICAgICAgICBvbGRFZGdlLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IGVkZ2VzRGF0YS5nZXQoaWQsIHsgc2hvd0ludGVybmFsSWRzOiB0cnVlIH0pO1xuICAgICAgZWRnZXNbaWRdID0gdGhpcy5jcmVhdGUoZGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9hZGp1c3RFZGdlc0ZvckhpZXJhcmNoaWNhbExheW91dFwiKTtcblxuICAgIGlmIChkb05vdEVtaXQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZXhpc3RpbmcgZWRnZXMsIG9yIGNyZWF0ZSB0aGVtIHdoZW4gbm90IHlldCBleGlzdGluZ1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgc3RyaW5nW119IGlkc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlKGlkcykge1xuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5ib2R5LmVkZ2VzO1xuICAgIGNvbnN0IGVkZ2VzRGF0YSA9IHRoaXMuYm9keS5kYXRhLmVkZ2VzO1xuICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgIGNvbnN0IGRhdGEgPSBlZGdlc0RhdGEuZ2V0KGlkKTtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tpZF07XG4gICAgICBpZiAoZWRnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBlZGdlXG4gICAgICAgIGVkZ2UuZGlzY29ubmVjdCgpO1xuICAgICAgICBkYXRhQ2hhbmdlZCA9IGVkZ2Uuc2V0T3B0aW9ucyhkYXRhKSB8fCBkYXRhQ2hhbmdlZDsgLy8gaWYgYSBzdXBwb3J0IG5vZGUgaXMgYWRkZWQsIGRhdGEgY2FuIGJlIGNoYW5nZWQuXG4gICAgICAgIGVkZ2UuY29ubmVjdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIGVkZ2VcbiAgICAgICAgdGhpcy5ib2R5LmVkZ2VzW2lkXSA9IHRoaXMuY3JlYXRlKGRhdGEpO1xuICAgICAgICBkYXRhQ2hhbmdlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRhdGFDaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2FkanVzdEVkZ2VzRm9ySGllcmFyY2hpY2FsTGF5b3V0XCIpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhVXBkYXRlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGV4aXN0aW5nIGVkZ2VzLiBOb24gZXhpc3RpbmcgaWRzIHdpbGwgYmUgaWdub3JlZFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgc3RyaW5nW119IGlkc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlbWl0PXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZW1vdmUoaWRzLCBlbWl0ID0gdHJ1ZSkge1xuICAgIGlmIChpZHMubGVuZ3RoID09PSAwKSByZXR1cm47IC8vIGVhcmx5IG91dFxuXG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgZm9yRWFjaChpZHMsIChpZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2lkXTtcbiAgICAgIGlmIChlZGdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWRnZS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChlbWl0KSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgRWRnZSBIYW5kbGVyXG4gICAqL1xuICByZWZyZXNoKCkge1xuICAgIGZvckVhY2godGhpcy5ib2R5LmVkZ2VzLCAoZWRnZSwgZWRnZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0KGVkZ2VJZCk7XG4gICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVkZ2Uuc2V0T3B0aW9ucyhkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyB7RWRnZX1cbiAgICovXG4gIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgcmV0dXJuIG5ldyBFZGdlKFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHRoaXMuYm9keSxcbiAgICAgIHRoaXMuaW1hZ2VzLFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgdGhpcy5kZWZhdWx0T3B0aW9uc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb25uZWN0IGFsbCBlZGdlc1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVjb25uZWN0RWRnZXMoKSB7XG4gICAgbGV0IGlkO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5ib2R5LmVkZ2VzO1xuXG4gICAgZm9yIChpZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlcywgaWQpKSB7XG4gICAgICAgIG5vZGVzW2lkXS5lZGdlcyA9IFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaWQgaW4gZWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZWRnZXMsIGlkKSkge1xuICAgICAgICBjb25zdCBlZGdlID0gZWRnZXNbaWRdO1xuICAgICAgICBlZGdlLmZyb20gPSBudWxsO1xuICAgICAgICBlZGdlLnRvID0gbnVsbDtcbiAgICAgICAgZWRnZS5jb25uZWN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZS5pZH0gZWRnZUlkXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGdldENvbm5lY3RlZE5vZGVzKGVkZ2VJZCkge1xuICAgIGNvbnN0IG5vZGVMaXN0ID0gW107XG4gICAgaWYgKHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgICAgIGlmIChlZGdlLmZyb21JZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGVMaXN0LnB1c2goZWRnZS5mcm9tSWQpO1xuICAgICAgfVxuICAgICAgaWYgKGVkZ2UudG9JZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGVMaXN0LnB1c2goZWRnZS50b0lkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGVMaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZXJlIGlzIG5vIGRpcmVjdCByZWxhdGlvbiBiZXR3ZWVuIHRoZSBub2RlcyBhbmQgdGhlIGVkZ2VzIERhdGFTZXQsXG4gICAqIHNvIHRoZSByaWdodCBwbGFjZSB0byBkbyBjYWxsIHRoaXMgaXMgaW4gdGhlIGhhbmRsZXIgZm9yIGV2ZW50IGBfZGF0YVVwZGF0ZWRgLlxuICAgKi9cbiAgX3VwZGF0ZVN0YXRlKCkge1xuICAgIHRoaXMuX2FkZE1pc3NpbmdFZGdlcygpO1xuICAgIHRoaXMuX3JlbW92ZUludmFsaWRFZGdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjYW4gZm9yIG1pc3Npbmcgbm9kZXMgYW5kIHJlbW92ZSBjb3JyZXNwb25kaW5nIGVkZ2VzLCBpZiBhbnkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVtb3ZlSW52YWxpZEVkZ2VzKCkge1xuICAgIGNvbnN0IGVkZ2VzVG9EZWxldGUgPSBbXTtcblxuICAgIGZvckVhY2godGhpcy5ib2R5LmVkZ2VzLCAoZWRnZSwgaWQpID0+IHtcbiAgICAgIGNvbnN0IHRvTm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tlZGdlLnRvSWRdO1xuICAgICAgY29uc3QgZnJvbU5vZGUgPSB0aGlzLmJvZHkubm9kZXNbZWRnZS5mcm9tSWRdO1xuXG4gICAgICAvLyBTa2lwIGNsdXN0ZXJpbmcgZWRnZXMgaGVyZSwgbGV0IHRoZSBDbHVzdGVyaW5nIG1vZHVsZSBoYW5kbGUgdGhvc2VcbiAgICAgIGlmIChcbiAgICAgICAgKHRvTm9kZSAhPT0gdW5kZWZpbmVkICYmIHRvTm9kZS5pc0NsdXN0ZXIgPT09IHRydWUpIHx8XG4gICAgICAgIChmcm9tTm9kZSAhPT0gdW5kZWZpbmVkICYmIGZyb21Ob2RlLmlzQ2x1c3RlciA9PT0gdHJ1ZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0b05vZGUgPT09IHVuZGVmaW5lZCB8fCBmcm9tTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVkZ2VzVG9EZWxldGUucHVzaChpZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbW92ZShlZGdlc1RvRGVsZXRlLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogYWRkIGFsbCBlZGdlcyBmcm9tIGRhdGFzZXQgdGhhdCBhcmUgbm90IGluIHRoZSBjYWNoZWQgc3RhdGVcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRNaXNzaW5nRWRnZXMoKSB7XG4gICAgY29uc3QgZWRnZXNEYXRhID0gdGhpcy5ib2R5LmRhdGEuZWRnZXM7XG4gICAgaWYgKGVkZ2VzRGF0YSA9PT0gdW5kZWZpbmVkIHx8IGVkZ2VzRGF0YSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuOyAvLyBObyBlZGdlcyBEYXRhU2V0IHlldDsgY2FuIGhhcHBlbiBvbiBzdGFydHVwXG4gICAgfVxuXG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgYWRkSWRzID0gW107XG5cbiAgICBlZGdlc0RhdGEuZm9yRWFjaCgoZWRnZURhdGEsIGVkZ2VJZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2VkZ2VJZF07XG4gICAgICBpZiAoZWRnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFkZElkcy5wdXNoKGVkZ2VJZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZChhZGRJZHMsIHRydWUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkZ2VzSGFuZGxlcjtcbiIsICJpbXBvcnQgeyBBbGVhIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIEJhcm5lcyBIdXQgU29sdmVyXG4gKi9cbmNsYXNzIEJhcm5lc0h1dFNvbHZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge3twaHlzaWNzTm9kZUluZGljZXM6IEFycmF5LCBwaHlzaWNzRWRnZUluZGljZXM6IEFycmF5LCBmb3JjZXM6IHt9LCB2ZWxvY2l0aWVzOiB7fX19IHBoeXNpY3NCb2R5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waHlzaWNzQm9keSA9IHBoeXNpY3NCb2R5O1xuICAgIHRoaXMuYmFybmVzSHV0VHJlZTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgdGhpcy5fcm5nID0gQWxlYShcIkJBUk5FUyBIVVQgU09MVkVSXCIpO1xuXG4gICAgLy8gZGVidWc6IHNob3cgZ3JpZFxuICAgIC8vIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiYWZ0ZXJEcmF3aW5nXCIsIChjdHgpID0+IHt0aGlzLl9kZWJ1ZyhjdHgsJyNmZjAwMDAnKX0pXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy50aGV0YUludmVyc2VkID0gMSAvIHRoaXMub3B0aW9ucy50aGV0YTtcblxuICAgIC8vIGlmIDEgdGhlbiBtaW4gZGlzdGFuY2UgPSAwLjUsIGlmIDAuNSB0aGVuIG1pbiBkaXN0YW5jZSA9IDAuNSArIDAuNSpub2RlLnNoYXBlLnJhZGl1c1xuICAgIHRoaXMub3ZlcmxhcEF2b2lkYW5jZUZhY3RvciA9XG4gICAgICAxIC0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdGhpcy5vcHRpb25zLmF2b2lkT3ZlcmxhcCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgZm9yY2VzIHRoZSBub2RlcyBhcHBseSBvbiBlYWNoIG90aGVyIGJhc2VkIG9uIGEgZ3Jhdml0YXRpb25hbCBtb2RlbC5cbiAgICogVGhlIEJhcm5lcyBIdXQgbWV0aG9kIGlzIHVzZWQgdG8gc3BlZWQgdXAgdGhpcyBOLWJvZHkgc2ltdWxhdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNvbHZlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9ucy5ncmF2aXRhdGlvbmFsQ29uc3RhbnQgIT09IDAgJiZcbiAgICAgIHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGxldCBub2RlO1xuICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzO1xuICAgICAgY29uc3Qgbm9kZUNvdW50ID0gbm9kZUluZGljZXMubGVuZ3RoO1xuXG4gICAgICAvLyBjcmVhdGUgdGhlIHRyZWVcbiAgICAgIGNvbnN0IGJhcm5lc0h1dFRyZWUgPSB0aGlzLl9mb3JtQmFybmVzSHV0VHJlZShub2Rlcywgbm9kZUluZGljZXMpO1xuXG4gICAgICAvLyBmb3IgZGVidWdnaW5nXG4gICAgICB0aGlzLmJhcm5lc0h1dFRyZWUgPSBiYXJuZXNIdXRUcmVlO1xuXG4gICAgICAvLyBwbGFjZSB0aGUgbm9kZXMgb25lIGJ5IG9uZSByZWN1cnNpdmVseVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlQ291bnQ7IGkrKykge1xuICAgICAgICBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgICBpZiAobm9kZS5vcHRpb25zLm1hc3MgPiAwKSB7XG4gICAgICAgICAgLy8gc3RhcnRpbmcgd2l0aCByb290IGlzIGlycmVsZXZhbnQsIGl0IG5ldmVyIHBhc3NlcyB0aGUgQmFybmVzSHV0U29sdmVyIGNvbmRpdGlvblxuICAgICAgICAgIHRoaXMuX2dldEZvcmNlQ29udHJpYnV0aW9ucyhiYXJuZXNIdXRUcmVlLnJvb3QsIG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Rm9yY2VDb250cmlidXRpb25zKHBhcmVudEJyYW5jaCwgbm9kZSkge1xuICAgIHRoaXMuX2dldEZvcmNlQ29udHJpYnV0aW9uKHBhcmVudEJyYW5jaC5jaGlsZHJlbi5OVywgbm9kZSk7XG4gICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb24ocGFyZW50QnJhbmNoLmNoaWxkcmVuLk5FLCBub2RlKTtcbiAgICB0aGlzLl9nZXRGb3JjZUNvbnRyaWJ1dGlvbihwYXJlbnRCcmFuY2guY2hpbGRyZW4uU1csIG5vZGUpO1xuICAgIHRoaXMuX2dldEZvcmNlQ29udHJpYnV0aW9uKHBhcmVudEJyYW5jaC5jaGlsZHJlbi5TRSwgbm9kZSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhlIGJhcm5lc0h1dFRyZWUuIEl0IGNoZWNrcyB3aGVuIGl0IGNhbiBhcHByb3hpbWF0ZSBkaXN0YW50IG5vZGVzIHdpdGggdGhlaXIgY2VudGVyIG9mIG1hc3MuXG4gICAqIElmIGEgcmVnaW9uIGNvbnRhaW5zIGEgc2luZ2xlIG5vZGUsIHdlIGNoZWNrIGlmIGl0IGlzIG5vdCBpdHNlbGYsIHRoZW4gd2UgYXBwbHkgdGhlIGZvcmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEZvcmNlQ29udHJpYnV0aW9uKHBhcmVudEJyYW5jaCwgbm9kZSkge1xuICAgIC8vIHdlIGdldCBubyBmb3JjZSBjb250cmlidXRpb24gZnJvbSBhbiBlbXB0eSByZWdpb25cbiAgICBpZiAocGFyZW50QnJhbmNoLmNoaWxkcmVuQ291bnQgPiAwKSB7XG4gICAgICAvLyBnZXQgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGNlbnRlciBvZiBtYXNzIHRvIHRoZSBub2RlLlxuICAgICAgY29uc3QgZHggPSBwYXJlbnRCcmFuY2guY2VudGVyT2ZNYXNzLnggLSBub2RlLng7XG4gICAgICBjb25zdCBkeSA9IHBhcmVudEJyYW5jaC5jZW50ZXJPZk1hc3MueSAtIG5vZGUueTtcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgICAgLy8gQmFybmVzSHV0U29sdmVyIGNvbmRpdGlvblxuICAgICAgLy8gb3JpZ2luYWwgY29uZGl0aW9uIDogcy9kIDwgdGhldGEgPSBwYXNzZWQgID09PSAgZC9zID4gMS90aGV0YSA9IHBhc3NlZFxuICAgICAgLy8gY2FsY1NpemUgPSAxL3MgLS0+IGQgKiAxL3MgPiAxL3RoZXRhID0gcGFzc2VkXG4gICAgICBpZiAoZGlzdGFuY2UgKiBwYXJlbnRCcmFuY2guY2FsY1NpemUgPiB0aGlzLnRoZXRhSW52ZXJzZWQpIHtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlRm9yY2VzKGRpc3RhbmNlLCBkeCwgZHksIG5vZGUsIHBhcmVudEJyYW5jaCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEaWQgbm90IHBhc3MgdGhlIGNvbmRpdGlvbiwgZ28gaW50byBjaGlsZHJlbiBpZiBhdmFpbGFibGVcbiAgICAgICAgaWYgKHBhcmVudEJyYW5jaC5jaGlsZHJlbkNvdW50ID09PSA0KSB7XG4gICAgICAgICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb25zKHBhcmVudEJyYW5jaCwgbm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcGFyZW50QnJhbmNoIG11c3QgaGF2ZSBvbmx5IG9uZSBub2RlLCBpZiBpdCB3YXMgZW1wdHkgd2Ugd291bGRudCBiZSBoZXJlXG4gICAgICAgICAgaWYgKHBhcmVudEJyYW5jaC5jaGlsZHJlbi5kYXRhLmlkICE9IG5vZGUuaWQpIHtcbiAgICAgICAgICAgIC8vIGlmIGl0IGlzIG5vdCBzZWxmXG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgbm9kZSwgcGFyZW50QnJhbmNoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgYmFzZWQgb24gdGhlIGRpc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IGR4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudEJyYW5jaFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NhbGN1bGF0ZUZvcmNlcyhkaXN0YW5jZSwgZHgsIGR5LCBub2RlLCBwYXJlbnRCcmFuY2gpIHtcbiAgICBpZiAoZGlzdGFuY2UgPT09IDApIHtcbiAgICAgIGRpc3RhbmNlID0gMC4xO1xuICAgICAgZHggPSBkaXN0YW5jZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yIDwgMSAmJiBub2RlLnNoYXBlLnJhZGl1cykge1xuICAgICAgZGlzdGFuY2UgPSBNYXRoLm1heChcbiAgICAgICAgMC4xICsgdGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yICogbm9kZS5zaGFwZS5yYWRpdXMsXG4gICAgICAgIGRpc3RhbmNlIC0gbm9kZS5zaGFwZS5yYWRpdXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGRpdmlkaW5nIGJ5IHRoZSBkaXN0YW5jZSBjdWJlZCBpbnN0ZWFkIG9mIHNxdWFyZWQgYWxsb3dzIHVzIHRvIGdldCB0aGUgZnggYW5kIGZ5IGNvbXBvbmVudHMgd2l0aG91dCBzaW5lcyBhbmQgY29zaW5lc1xuICAgIC8vIGl0IGlzIHNob3J0aGFuZCBmb3IgZ3Jhdml0eWZvcmNlIHdpdGggZGlzdGFuY2Ugc3F1YXJlZCBhbmQgZnggPSBkeC9kaXN0YW5jZSAqIGdyYXZpdHlGb3JjZVxuICAgIGNvbnN0IGdyYXZpdHlGb3JjZSA9XG4gICAgICAodGhpcy5vcHRpb25zLmdyYXZpdGF0aW9uYWxDb25zdGFudCAqXG4gICAgICAgIHBhcmVudEJyYW5jaC5tYXNzICpcbiAgICAgICAgbm9kZS5vcHRpb25zLm1hc3MpIC9cbiAgICAgIE1hdGgucG93KGRpc3RhbmNlLCAzKTtcbiAgICBjb25zdCBmeCA9IGR4ICogZ3Jhdml0eUZvcmNlO1xuICAgIGNvbnN0IGZ5ID0gZHkgKiBncmF2aXR5Rm9yY2U7XG5cbiAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlLmlkXS54ICs9IGZ4O1xuICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUuaWRdLnkgKz0gZnk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjb25zdHJ1Y3RzIHRoZSBiYXJuZXNIdXQgdHJlZSByZWN1cnNpdmVseS4gSXQgY3JlYXRlcyB0aGUgcm9vdCwgc3BsaXRzIGl0IGFuZCBzdGFydHMgcGxhY2luZyB0aGUgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBub2Rlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBub2RlSW5kaWNlc1xuICAgKiBAcmV0dXJucyB7e3Jvb3Q6IHtjZW50ZXJPZk1hc3M6IHt4OiBudW1iZXIsIHk6IG51bWJlcn0sIG1hc3M6IG51bWJlciwgcmFuZ2U6IHttaW5YOiBudW1iZXIsIG1heFg6IG51bWJlciwgbWluWTogbnVtYmVyLCBtYXhZOiBudW1iZXJ9LCBzaXplOiBudW1iZXIsIGNhbGNTaXplOiBudW1iZXIsIGNoaWxkcmVuOiB7ZGF0YTogbnVsbH0sIG1heFdpZHRoOiBudW1iZXIsIGxldmVsOiBudW1iZXIsIGNoaWxkcmVuQ291bnQ6IG51bWJlcn19fSBCYXJuZXNIdXRUcmVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZm9ybUJhcm5lc0h1dFRyZWUobm9kZXMsIG5vZGVJbmRpY2VzKSB7XG4gICAgbGV0IG5vZGU7XG4gICAgY29uc3Qgbm9kZUNvdW50ID0gbm9kZUluZGljZXMubGVuZ3RoO1xuXG4gICAgbGV0IG1pblggPSBub2Rlc1tub2RlSW5kaWNlc1swXV0ueDtcbiAgICBsZXQgbWluWSA9IG5vZGVzW25vZGVJbmRpY2VzWzBdXS55O1xuICAgIGxldCBtYXhYID0gbm9kZXNbbm9kZUluZGljZXNbMF1dLng7XG4gICAgbGV0IG1heFkgPSBub2Rlc1tub2RlSW5kaWNlc1swXV0ueTtcblxuICAgIC8vIGdldCB0aGUgcmFuZ2Ugb2YgdGhlIG5vZGVzXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBub2RlQ291bnQ7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgIGNvbnN0IHggPSBub2RlLng7XG4gICAgICBjb25zdCB5ID0gbm9kZS55O1xuICAgICAgaWYgKG5vZGUub3B0aW9ucy5tYXNzID4gMCkge1xuICAgICAgICBpZiAoeCA8IG1pblgpIHtcbiAgICAgICAgICBtaW5YID0geDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCA+IG1heFgpIHtcbiAgICAgICAgICBtYXhYID0geDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeSA8IG1pblkpIHtcbiAgICAgICAgICBtaW5ZID0geTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeSA+IG1heFkpIHtcbiAgICAgICAgICBtYXhZID0geTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBtYWtlIHRoZSByYW5nZSBhIHNxdWFyZVxuICAgIGNvbnN0IHNpemVEaWZmID0gTWF0aC5hYnMobWF4WCAtIG1pblgpIC0gTWF0aC5hYnMobWF4WSAtIG1pblkpOyAvLyBkaWZmZXJlbmNlIGJldHdlZW4gWCBhbmQgWVxuICAgIGlmIChzaXplRGlmZiA+IDApIHtcbiAgICAgIG1pblkgLT0gMC41ICogc2l6ZURpZmY7XG4gICAgICBtYXhZICs9IDAuNSAqIHNpemVEaWZmO1xuICAgIH0gLy8geFNpemUgPiB5U2l6ZVxuICAgIGVsc2Uge1xuICAgICAgbWluWCArPSAwLjUgKiBzaXplRGlmZjtcbiAgICAgIG1heFggLT0gMC41ICogc2l6ZURpZmY7XG4gICAgfSAvLyB4U2l6ZSA8IHlTaXplXG5cbiAgICBjb25zdCBtaW5pbXVtVHJlZVNpemUgPSAxZS01O1xuICAgIGNvbnN0IHJvb3RTaXplID0gTWF0aC5tYXgobWluaW11bVRyZWVTaXplLCBNYXRoLmFicyhtYXhYIC0gbWluWCkpO1xuICAgIGNvbnN0IGhhbGZSb290U2l6ZSA9IDAuNSAqIHJvb3RTaXplO1xuICAgIGNvbnN0IGNlbnRlclggPSAwLjUgKiAobWluWCArIG1heFgpLFxuICAgICAgY2VudGVyWSA9IDAuNSAqIChtaW5ZICsgbWF4WSk7XG5cbiAgICAvLyBjb25zdHJ1Y3QgdGhlIGJhcm5lc0h1dFRyZWVcbiAgICBjb25zdCBiYXJuZXNIdXRUcmVlID0ge1xuICAgICAgcm9vdDoge1xuICAgICAgICBjZW50ZXJPZk1hc3M6IHsgeDogMCwgeTogMCB9LFxuICAgICAgICBtYXNzOiAwLFxuICAgICAgICByYW5nZToge1xuICAgICAgICAgIG1pblg6IGNlbnRlclggLSBoYWxmUm9vdFNpemUsXG4gICAgICAgICAgbWF4WDogY2VudGVyWCArIGhhbGZSb290U2l6ZSxcbiAgICAgICAgICBtaW5ZOiBjZW50ZXJZIC0gaGFsZlJvb3RTaXplLFxuICAgICAgICAgIG1heFk6IGNlbnRlclkgKyBoYWxmUm9vdFNpemUsXG4gICAgICAgIH0sXG4gICAgICAgIHNpemU6IHJvb3RTaXplLFxuICAgICAgICBjYWxjU2l6ZTogMSAvIHJvb3RTaXplLFxuICAgICAgICBjaGlsZHJlbjogeyBkYXRhOiBudWxsIH0sXG4gICAgICAgIG1heFdpZHRoOiAwLFxuICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgY2hpbGRyZW5Db3VudDogNCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLl9zcGxpdEJyYW5jaChiYXJuZXNIdXRUcmVlLnJvb3QpO1xuXG4gICAgLy8gcGxhY2UgdGhlIG5vZGVzIG9uZSBieSBvbmUgcmVjdXJzaXZlbHlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVDb3VudDsgaSsrKSB7XG4gICAgICBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgaWYgKG5vZGUub3B0aW9ucy5tYXNzID4gMCkge1xuICAgICAgICB0aGlzLl9wbGFjZUluVHJlZShiYXJuZXNIdXRUcmVlLnJvb3QsIG5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG1ha2UgZ2xvYmFsXG4gICAgcmV0dXJuIGJhcm5lc0h1dFRyZWU7XG4gIH1cblxuICAvKipcbiAgICogdGhpcyB1cGRhdGVzIHRoZSBtYXNzIG9mIGEgYnJhbmNoLiB0aGlzIGlzIGluY3JlYXNlZCBieSBhZGRpbmcgYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZUJyYW5jaE1hc3MocGFyZW50QnJhbmNoLCBub2RlKSB7XG4gICAgY29uc3QgY2VudGVyT2ZNYXNzID0gcGFyZW50QnJhbmNoLmNlbnRlck9mTWFzcztcbiAgICBjb25zdCB0b3RhbE1hc3MgPSBwYXJlbnRCcmFuY2gubWFzcyArIG5vZGUub3B0aW9ucy5tYXNzO1xuICAgIGNvbnN0IHRvdGFsTWFzc0ludiA9IDEgLyB0b3RhbE1hc3M7XG5cbiAgICBjZW50ZXJPZk1hc3MueCA9XG4gICAgICBjZW50ZXJPZk1hc3MueCAqIHBhcmVudEJyYW5jaC5tYXNzICsgbm9kZS54ICogbm9kZS5vcHRpb25zLm1hc3M7XG4gICAgY2VudGVyT2ZNYXNzLnggKj0gdG90YWxNYXNzSW52O1xuXG4gICAgY2VudGVyT2ZNYXNzLnkgPVxuICAgICAgY2VudGVyT2ZNYXNzLnkgKiBwYXJlbnRCcmFuY2gubWFzcyArIG5vZGUueSAqIG5vZGUub3B0aW9ucy5tYXNzO1xuICAgIGNlbnRlck9mTWFzcy55ICo9IHRvdGFsTWFzc0ludjtcblxuICAgIHBhcmVudEJyYW5jaC5tYXNzID0gdG90YWxNYXNzO1xuICAgIGNvbnN0IGJpZ2dlc3RTaXplID0gTWF0aC5tYXgoXG4gICAgICBNYXRoLm1heChub2RlLmhlaWdodCwgbm9kZS5yYWRpdXMpLFxuICAgICAgbm9kZS53aWR0aFxuICAgICk7XG4gICAgcGFyZW50QnJhbmNoLm1heFdpZHRoID1cbiAgICAgIHBhcmVudEJyYW5jaC5tYXhXaWR0aCA8IGJpZ2dlc3RTaXplID8gYmlnZ2VzdFNpemUgOiBwYXJlbnRCcmFuY2gubWF4V2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogZGV0ZXJtaW5lIGluIHdoaWNoIGJyYW5jaCB0aGUgbm9kZSB3aWxsIGJlIHBsYWNlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudEJyYW5jaFxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtib29sZWFufSBza2lwTWFzc1VwZGF0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BsYWNlSW5UcmVlKHBhcmVudEJyYW5jaCwgbm9kZSwgc2tpcE1hc3NVcGRhdGUpIHtcbiAgICBpZiAoc2tpcE1hc3NVcGRhdGUgIT0gdHJ1ZSB8fCBza2lwTWFzc1VwZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB1cGRhdGUgdGhlIG1hc3Mgb2YgdGhlIGJyYW5jaC5cbiAgICAgIHRoaXMuX3VwZGF0ZUJyYW5jaE1hc3MocGFyZW50QnJhbmNoLCBub2RlKTtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZSA9IHBhcmVudEJyYW5jaC5jaGlsZHJlbi5OVy5yYW5nZTtcbiAgICBsZXQgcmVnaW9uO1xuICAgIGlmIChyYW5nZS5tYXhYID4gbm9kZS54KSB7XG4gICAgICAvLyBpbiBOVyBvciBTV1xuICAgICAgaWYgKHJhbmdlLm1heFkgPiBub2RlLnkpIHtcbiAgICAgICAgcmVnaW9uID0gXCJOV1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVnaW9uID0gXCJTV1wiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbiBORSBvciBTRVxuICAgICAgaWYgKHJhbmdlLm1heFkgPiBub2RlLnkpIHtcbiAgICAgICAgcmVnaW9uID0gXCJORVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVnaW9uID0gXCJTRVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3BsYWNlSW5SZWdpb24ocGFyZW50QnJhbmNoLCBub2RlLCByZWdpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIGFjdHVhbGx5IHBsYWNlIHRoZSBub2RlIGluIGEgcmVnaW9uIChvciBicmFuY2gpXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7J05XJ3wgJ05FJyB8ICdTVycgfCAnU0UnfSByZWdpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wbGFjZUluUmVnaW9uKHBhcmVudEJyYW5jaCwgbm9kZSwgcmVnaW9uKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnRCcmFuY2guY2hpbGRyZW5bcmVnaW9uXTtcblxuICAgIHN3aXRjaCAoY2hpbGRyZW4uY2hpbGRyZW5Db3VudCkge1xuICAgICAgY2FzZSAwOiAvLyBwbGFjZSBub2RlIGhlcmVcbiAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4uZGF0YSA9IG5vZGU7XG4gICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuQ291bnQgPSAxO1xuICAgICAgICB0aGlzLl91cGRhdGVCcmFuY2hNYXNzKGNoaWxkcmVuLCBub2RlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6IC8vIGNvbnZlcnQgaW50byBjaGlsZHJlblxuICAgICAgICAvLyBpZiB0aGVyZSBhcmUgdHdvIG5vZGVzIGV4YWN0bHkgb3ZlcmxhcHBpbmcgKG9uIGluaXQsIG9uIG9wZW5pbmcgb2YgY2x1c3RlciBldGMuKVxuICAgICAgICAvLyB3ZSBtb3ZlIG9uZSBub2RlIGEgbGl0dGxlIGJpdCBhbmQgd2UgZG8gbm90IHB1dCBpdCBpbiB0aGUgdHJlZS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLmRhdGEueCA9PT0gbm9kZS54ICYmXG4gICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4uZGF0YS55ID09PSBub2RlLnlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbm9kZS54ICs9IHRoaXMuX3JuZygpO1xuICAgICAgICAgIG5vZGUueSArPSB0aGlzLl9ybmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zcGxpdEJyYW5jaChjaGlsZHJlbik7XG4gICAgICAgICAgdGhpcy5fcGxhY2VJblRyZWUoY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA0OiAvLyBwbGFjZSBpbiBicmFuY2hcbiAgICAgICAgdGhpcy5fcGxhY2VJblRyZWUoY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBmdW5jdGlvbiBzcGxpdHMgYSBicmFuY2ggaW50byA0IHN1YiBicmFuY2hlcy4gSWYgdGhlIGJyYW5jaCBjb250YWluZWQgYSBub2RlLCB3ZSBwbGFjZSBpdCBpbiB0aGUgc3ViYnJhbmNoXG4gICAqIGFmdGVyIHRoZSBzcGxpdCBpcyBjb21wbGV0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudEJyYW5jaFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NwbGl0QnJhbmNoKHBhcmVudEJyYW5jaCkge1xuICAgIC8vIGlmIHRoZSBicmFuY2ggaXMgc2hhZGVkIHdpdGggYSBub2RlLCByZXBsYWNlIHRoZSBub2RlIGluIHRoZSBuZXcgc3Vic2V0LlxuICAgIGxldCBjb250YWluZWROb2RlID0gbnVsbDtcbiAgICBpZiAocGFyZW50QnJhbmNoLmNoaWxkcmVuQ291bnQgPT09IDEpIHtcbiAgICAgIGNvbnRhaW5lZE5vZGUgPSBwYXJlbnRCcmFuY2guY2hpbGRyZW4uZGF0YTtcbiAgICAgIHBhcmVudEJyYW5jaC5tYXNzID0gMDtcbiAgICAgIHBhcmVudEJyYW5jaC5jZW50ZXJPZk1hc3MueCA9IDA7XG4gICAgICBwYXJlbnRCcmFuY2guY2VudGVyT2ZNYXNzLnkgPSAwO1xuICAgIH1cbiAgICBwYXJlbnRCcmFuY2guY2hpbGRyZW5Db3VudCA9IDQ7XG4gICAgcGFyZW50QnJhbmNoLmNoaWxkcmVuLmRhdGEgPSBudWxsO1xuICAgIHRoaXMuX2luc2VydFJlZ2lvbihwYXJlbnRCcmFuY2gsIFwiTldcIik7XG4gICAgdGhpcy5faW5zZXJ0UmVnaW9uKHBhcmVudEJyYW5jaCwgXCJORVwiKTtcbiAgICB0aGlzLl9pbnNlcnRSZWdpb24ocGFyZW50QnJhbmNoLCBcIlNXXCIpO1xuICAgIHRoaXMuX2luc2VydFJlZ2lvbihwYXJlbnRCcmFuY2gsIFwiU0VcIik7XG5cbiAgICBpZiAoY29udGFpbmVkTm9kZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9wbGFjZUluVHJlZShwYXJlbnRCcmFuY2gsIGNvbnRhaW5lZE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHN1YmRpdmlkZXMgdGhlIHJlZ2lvbiBpbnRvIGZvdXIgbmV3IHNlZ21lbnRzLlxuICAgKiBTcGVjaWZpY2FsbHksIHRoaXMgaW5zZXJ0cyBhIHNpbmdsZSBuZXcgc2VnbWVudC5cbiAgICogSXQgZmlsbHMgdGhlIGNoaWxkcmVuIHNlY3Rpb24gb2YgdGhlIHBhcmVudEJyYW5jaFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwYXJhbSB7J05XJ3wgJ05FJyB8ICdTVycgfCAnU0UnfSByZWdpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbnNlcnRSZWdpb24ocGFyZW50QnJhbmNoLCByZWdpb24pIHtcbiAgICBsZXQgbWluWCwgbWF4WCwgbWluWSwgbWF4WTtcbiAgICBjb25zdCBjaGlsZFNpemUgPSAwLjUgKiBwYXJlbnRCcmFuY2guc2l6ZTtcbiAgICBzd2l0Y2ggKHJlZ2lvbikge1xuICAgICAgY2FzZSBcIk5XXCI6XG4gICAgICAgIG1pblggPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWDtcbiAgICAgICAgbWF4WCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YICsgY2hpbGRTaXplO1xuICAgICAgICBtaW5ZID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblk7XG4gICAgICAgIG1heFkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWSArIGNoaWxkU2l6ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiTkVcIjpcbiAgICAgICAgbWluWCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YICsgY2hpbGRTaXplO1xuICAgICAgICBtYXhYID0gcGFyZW50QnJhbmNoLnJhbmdlLm1heFg7XG4gICAgICAgIG1pblkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWTtcbiAgICAgICAgbWF4WSA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5ZICsgY2hpbGRTaXplO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJTV1wiOlxuICAgICAgICBtaW5YID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblg7XG4gICAgICAgIG1heFggPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWCArIGNoaWxkU2l6ZTtcbiAgICAgICAgbWluWSA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5ZICsgY2hpbGRTaXplO1xuICAgICAgICBtYXhZID0gcGFyZW50QnJhbmNoLnJhbmdlLm1heFk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlNFXCI6XG4gICAgICAgIG1pblggPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWCArIGNoaWxkU2l6ZTtcbiAgICAgICAgbWF4WCA9IHBhcmVudEJyYW5jaC5yYW5nZS5tYXhYO1xuICAgICAgICBtaW5ZID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblkgKyBjaGlsZFNpemU7XG4gICAgICAgIG1heFkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWF4WTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcGFyZW50QnJhbmNoLmNoaWxkcmVuW3JlZ2lvbl0gPSB7XG4gICAgICBjZW50ZXJPZk1hc3M6IHsgeDogMCwgeTogMCB9LFxuICAgICAgbWFzczogMCxcbiAgICAgIHJhbmdlOiB7IG1pblg6IG1pblgsIG1heFg6IG1heFgsIG1pblk6IG1pblksIG1heFk6IG1heFkgfSxcbiAgICAgIHNpemU6IDAuNSAqIHBhcmVudEJyYW5jaC5zaXplLFxuICAgICAgY2FsY1NpemU6IDIgKiBwYXJlbnRCcmFuY2guY2FsY1NpemUsXG4gICAgICBjaGlsZHJlbjogeyBkYXRhOiBudWxsIH0sXG4gICAgICBtYXhXaWR0aDogMCxcbiAgICAgIGxldmVsOiBwYXJlbnRCcmFuY2gubGV2ZWwgKyAxLFxuICAgICAgY2hpbGRyZW5Db3VudDogMCxcbiAgICB9O1xuICB9XG5cbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFQlVHR0lORyBCRUxPVyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VkLCBpdCBkcmF3cyB0aGUgdHJlZS5cbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZWJ1ZyhjdHgsIGNvbG9yKSB7XG4gICAgaWYgKHRoaXMuYmFybmVzSHV0VHJlZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdHgubGluZVdpZHRoID0gMTtcblxuICAgICAgdGhpcy5fZHJhd0JyYW5jaCh0aGlzLmJhcm5lc0h1dFRyZWUucm9vdCwgY3R4LCBjb2xvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gSXQgZHJhd3MgdGhlIGJyYW5jaGVzIHJlY3Vyc2l2ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYnJhbmNoXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd0JyYW5jaChicmFuY2gsIGN0eCwgY29sb3IpIHtcbiAgICBpZiAoY29sb3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29sb3IgPSBcIiNGRjAwMDBcIjtcbiAgICB9XG5cbiAgICBpZiAoYnJhbmNoLmNoaWxkcmVuQ291bnQgPT09IDQpIHtcbiAgICAgIHRoaXMuX2RyYXdCcmFuY2goYnJhbmNoLmNoaWxkcmVuLk5XLCBjdHgpO1xuICAgICAgdGhpcy5fZHJhd0JyYW5jaChicmFuY2guY2hpbGRyZW4uTkUsIGN0eCk7XG4gICAgICB0aGlzLl9kcmF3QnJhbmNoKGJyYW5jaC5jaGlsZHJlbi5TRSwgY3R4KTtcbiAgICAgIHRoaXMuX2RyYXdCcmFuY2goYnJhbmNoLmNoaWxkcmVuLlNXLCBjdHgpO1xuICAgIH1cbiAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyhicmFuY2gucmFuZ2UubWluWCwgYnJhbmNoLnJhbmdlLm1pblkpO1xuICAgIGN0eC5saW5lVG8oYnJhbmNoLnJhbmdlLm1heFgsIGJyYW5jaC5yYW5nZS5taW5ZKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyhicmFuY2gucmFuZ2UubWF4WCwgYnJhbmNoLnJhbmdlLm1pblkpO1xuICAgIGN0eC5saW5lVG8oYnJhbmNoLnJhbmdlLm1heFgsIGJyYW5jaC5yYW5nZS5tYXhZKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyhicmFuY2gucmFuZ2UubWF4WCwgYnJhbmNoLnJhbmdlLm1heFkpO1xuICAgIGN0eC5saW5lVG8oYnJhbmNoLnJhbmdlLm1pblgsIGJyYW5jaC5yYW5nZS5tYXhZKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyhicmFuY2gucmFuZ2UubWluWCwgYnJhbmNoLnJhbmdlLm1heFkpO1xuICAgIGN0eC5saW5lVG8oYnJhbmNoLnJhbmdlLm1pblgsIGJyYW5jaC5yYW5nZS5taW5ZKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAvKlxuICAgICBpZiAoYnJhbmNoLm1hc3MgPiAwKSB7XG4gICAgIGN0eC5jaXJjbGUoYnJhbmNoLmNlbnRlck9mTWFzcy54LCBicmFuY2guY2VudGVyT2ZNYXNzLnksIDMqYnJhbmNoLm1hc3MpO1xuICAgICBjdHguc3Ryb2tlKCk7XG4gICAgIH1cbiAgICAgKi9cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCYXJuZXNIdXRTb2x2ZXI7XG4iLCAiaW1wb3J0IHsgQWxlYSB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBSZXB1bHNpb24gU29sdmVyXG4gKi9cbmNsYXNzIFJlcHVsc2lvblNvbHZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge3twaHlzaWNzTm9kZUluZGljZXM6IEFycmF5LCBwaHlzaWNzRWRnZUluZGljZXM6IEFycmF5LCBmb3JjZXM6IHt9LCB2ZWxvY2l0aWVzOiB7fX19IHBoeXNpY3NCb2R5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucykge1xuICAgIHRoaXMuX3JuZyA9IEFsZWEoXCJSRVBVTFNJT04gU09MVkVSXCIpO1xuXG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIHRoZSBub2RlcyBhcHBseSBvbiBlYWNoIG90aGVyIGJhc2VkIG9uIGEgcmVwdWxzaW9uIGZpZWxkLlxuICAgKiBUaGlzIGZpZWxkIGlzIGxpbmVhcmx5IGFwcHJveGltYXRlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNvbHZlKCkge1xuICAgIGxldCBkeCwgZHksIGRpc3RhbmNlLCBmeCwgZnksIHJlcHVsc2luZ0ZvcmNlLCBub2RlMSwgbm9kZTI7XG5cbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzO1xuICAgIGNvbnN0IGZvcmNlcyA9IHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzO1xuXG4gICAgLy8gcmVwdWxzaW5nIGZvcmNlcyBiZXR3ZWVuIG5vZGVzXG4gICAgY29uc3Qgbm9kZURpc3RhbmNlID0gdGhpcy5vcHRpb25zLm5vZGVEaXN0YW5jZTtcblxuICAgIC8vIGFwcHJveGltYXRpb24gY29uc3RhbnRzXG4gICAgY29uc3QgYSA9IC0yIC8gMyAvIG5vZGVEaXN0YW5jZTtcbiAgICBjb25zdCBiID0gNCAvIDM7XG5cbiAgICAvLyB3ZSBsb29wIGZyb20gaSBvdmVyIGFsbCBidXQgdGhlIGxhc3QgZW50cmVlIGluIHRoZSBhcnJheVxuICAgIC8vIGogbG9vcHMgZnJvbSBpKzEgdG8gdGhlIGxhc3QuIFRoaXMgd2F5IHdlIGRvIG5vdCBkb3VibGUgY291bnQgYW55IG9mIHRoZSBpbmRpY2VzLCBub3IgaSA9PT0galxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBub2RlMSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIG5vZGUyID0gbm9kZXNbbm9kZUluZGljZXNbal1dO1xuXG4gICAgICAgIGR4ID0gbm9kZTIueCAtIG5vZGUxLng7XG4gICAgICAgIGR5ID0gbm9kZTIueSAtIG5vZGUxLnk7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgICAgICAvLyBzYW1lIGNvbmRpdGlvbiBhcyBCYXJuZXNIdXRTb2x2ZXIsIG1ha2luZyBzdXJlIG5vZGVzIGFyZSBuZXZlciAxMDAlIG92ZXJsYXBwaW5nLlxuICAgICAgICBpZiAoZGlzdGFuY2UgPT09IDApIHtcbiAgICAgICAgICBkaXN0YW5jZSA9IDAuMSAqIHRoaXMuX3JuZygpO1xuICAgICAgICAgIGR4ID0gZGlzdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzdGFuY2UgPCAyICogbm9kZURpc3RhbmNlKSB7XG4gICAgICAgICAgaWYgKGRpc3RhbmNlIDwgMC41ICogbm9kZURpc3RhbmNlKSB7XG4gICAgICAgICAgICByZXB1bHNpbmdGb3JjZSA9IDEuMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVwdWxzaW5nRm9yY2UgPSBhICogZGlzdGFuY2UgKyBiOyAvLyBsaW5lYXIgYXBwcm94IG9mICAxIC8gKDEgKyBNYXRoLmV4cCgoZGlzdGFuY2UgLyBub2RlRGlzdGFuY2UgLSAxKSAqIHN0ZWVwbmVzcykpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID0gcmVwdWxzaW5nRm9yY2UgLyBkaXN0YW5jZTtcblxuICAgICAgICAgIGZ4ID0gZHggKiByZXB1bHNpbmdGb3JjZTtcbiAgICAgICAgICBmeSA9IGR5ICogcmVwdWxzaW5nRm9yY2U7XG5cbiAgICAgICAgICBmb3JjZXNbbm9kZTEuaWRdLnggLT0gZng7XG4gICAgICAgICAgZm9yY2VzW25vZGUxLmlkXS55IC09IGZ5O1xuICAgICAgICAgIGZvcmNlc1tub2RlMi5pZF0ueCArPSBmeDtcbiAgICAgICAgICBmb3JjZXNbbm9kZTIuaWRdLnkgKz0gZnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVwdWxzaW9uU29sdmVyO1xuIiwgIi8qKlxuICogSGllcmFyY2hpY2FsIFJlcHVsc2lvbiBTb2x2ZXJcbiAqL1xuY2xhc3MgSGllcmFyY2hpY2FsUmVwdWxzaW9uU29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMub3ZlcmxhcEF2b2lkYW5jZUZhY3RvciA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKDEsIHRoaXMub3B0aW9ucy5hdm9pZE92ZXJsYXAgfHwgMClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIHRoZSBub2RlcyBhcHBseSBvbiBlYWNoIG90aGVyIGJhc2VkIG9uIGEgcmVwdWxzaW9uIGZpZWxkLlxuICAgKiBUaGlzIGZpZWxkIGlzIGxpbmVhcmx5IGFwcHJveGltYXRlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNvbHZlKCkge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgY29uc3QgZm9yY2VzID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXM7XG5cbiAgICAvLyByZXB1bHNpbmcgZm9yY2VzIGJldHdlZW4gbm9kZXNcbiAgICBjb25zdCBub2RlRGlzdGFuY2UgPSB0aGlzLm9wdGlvbnMubm9kZURpc3RhbmNlO1xuXG4gICAgLy8gd2UgbG9vcCBmcm9tIGkgb3ZlciBhbGwgYnV0IHRoZSBsYXN0IGVudHJlZSBpbiB0aGUgYXJyYXlcbiAgICAvLyBqIGxvb3BzIGZyb20gaSsxIHRvIHRoZSBsYXN0LiBUaGlzIHdheSB3ZSBkbyBub3QgZG91YmxlIGNvdW50IGFueSBvZiB0aGUgaW5kaWNlcywgbm9yIGkgPT09IGpcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZTEgPSBub2Rlc1tub2RlSW5kaWNlc1tpXV07XG4gICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBub2RlSW5kaWNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBub2RlMiA9IG5vZGVzW25vZGVJbmRpY2VzW2pdXTtcblxuICAgICAgICAvLyBub2RlcyBvbmx5IGFmZmVjdCBub2RlcyBvbiB0aGVpciBsZXZlbFxuICAgICAgICBpZiAobm9kZTEubGV2ZWwgPT09IG5vZGUyLmxldmVsKSB7XG4gICAgICAgICAgY29uc3QgdGhlc2VOb2Rlc0Rpc3RhbmNlID1cbiAgICAgICAgICAgIG5vZGVEaXN0YW5jZSArXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXBBdm9pZGFuY2VGYWN0b3IgKlxuICAgICAgICAgICAgICAoKG5vZGUxLnNoYXBlLnJhZGl1cyB8fCAwKSAvIDIgKyAobm9kZTIuc2hhcGUucmFkaXVzIHx8IDApIC8gMik7XG5cbiAgICAgICAgICBjb25zdCBkeCA9IG5vZGUyLnggLSBub2RlMS54O1xuICAgICAgICAgIGNvbnN0IGR5ID0gbm9kZTIueSAtIG5vZGUxLnk7XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICAgICAgY29uc3Qgc3RlZXBuZXNzID0gMC4wNTtcbiAgICAgICAgICBsZXQgcmVwdWxzaW5nRm9yY2U7XG4gICAgICAgICAgaWYgKGRpc3RhbmNlIDwgdGhlc2VOb2Rlc0Rpc3RhbmNlKSB7XG4gICAgICAgICAgICByZXB1bHNpbmdGb3JjZSA9XG4gICAgICAgICAgICAgIC1NYXRoLnBvdyhzdGVlcG5lc3MgKiBkaXN0YW5jZSwgMikgK1xuICAgICAgICAgICAgICBNYXRoLnBvdyhzdGVlcG5lc3MgKiB0aGVzZU5vZGVzRGlzdGFuY2UsIDIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXB1bHNpbmdGb3JjZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG5vcm1hbGl6ZSBmb3JjZSB3aXRoXG4gICAgICAgICAgaWYgKGRpc3RhbmNlICE9PSAwKSB7XG4gICAgICAgICAgICByZXB1bHNpbmdGb3JjZSA9IHJlcHVsc2luZ0ZvcmNlIC8gZGlzdGFuY2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGZ4ID0gZHggKiByZXB1bHNpbmdGb3JjZTtcbiAgICAgICAgICBjb25zdCBmeSA9IGR5ICogcmVwdWxzaW5nRm9yY2U7XG5cbiAgICAgICAgICBmb3JjZXNbbm9kZTEuaWRdLnggLT0gZng7XG4gICAgICAgICAgZm9yY2VzW25vZGUxLmlkXS55IC09IGZ5O1xuICAgICAgICAgIGZvcmNlc1tub2RlMi5pZF0ueCArPSBmeDtcbiAgICAgICAgICBmb3JjZXNbbm9kZTIuaWRdLnkgKz0gZnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGllcmFyY2hpY2FsUmVwdWxzaW9uU29sdmVyO1xuIiwgIi8qKlxuICogU3ByaW5nIFNvbHZlclxuICovXG5jbGFzcyBTcHJpbmdTb2x2ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHt7cGh5c2ljc05vZGVJbmRpY2VzOiBBcnJheSwgcGh5c2ljc0VkZ2VJbmRpY2VzOiBBcnJheSwgZm9yY2VzOiB7fSwgdmVsb2NpdGllczoge319fSBwaHlzaWNzQm9keVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucGh5c2ljc0JvZHkgPSBwaHlzaWNzQm9keTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBzcHJpbmdmb3JjZXMgb24gdGhlIG5vZGVzLCBhY2NvdW50aW5nIGZvciB0aGUgc3VwcG9ydCBub2Rlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNvbHZlKCkge1xuICAgIGxldCBlZGdlTGVuZ3RoLCBlZGdlO1xuICAgIGNvbnN0IGVkZ2VJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzRWRnZUluZGljZXM7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgbGV0IG5vZGUxLCBub2RlMiwgbm9kZTM7XG5cbiAgICAvLyBmb3JjZXMgY2F1c2VkIGJ5IHRoZSBlZGdlcywgbW9kZWxsZWQgYXMgc3ByaW5nc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVkZ2UgPSBlZGdlc1tlZGdlSW5kaWNlc1tpXV07XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQgPT09IHRydWUgJiYgZWRnZS50b0lkICE9PSBlZGdlLmZyb21JZCkge1xuICAgICAgICAvLyBvbmx5IGNhbGN1bGF0ZSBmb3JjZXMgaWYgbm9kZXMgYXJlIGluIHRoZSBzYW1lIHNlY3RvclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW2VkZ2UudG9JZF0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tlZGdlLmZyb21JZF0gIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoZWRnZS5lZGdlVHlwZS52aWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZWRnZUxlbmd0aCA9XG4gICAgICAgICAgICAgIGVkZ2Uub3B0aW9ucy5sZW5ndGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gdGhpcy5vcHRpb25zLnNwcmluZ0xlbmd0aFxuICAgICAgICAgICAgICAgIDogZWRnZS5vcHRpb25zLmxlbmd0aDtcbiAgICAgICAgICAgIG5vZGUxID0gZWRnZS50bztcbiAgICAgICAgICAgIG5vZGUyID0gZWRnZS5lZGdlVHlwZS52aWE7XG4gICAgICAgICAgICBub2RlMyA9IGVkZ2UuZnJvbTtcblxuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlU3ByaW5nRm9yY2Uobm9kZTEsIG5vZGUyLCAwLjUgKiBlZGdlTGVuZ3RoKTtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNwcmluZ0ZvcmNlKG5vZGUyLCBub2RlMywgMC41ICogZWRnZUxlbmd0aCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoZSAqIDEuNSBpcyBoZXJlIHNvIHRoZSBlZGdlIGxvb2tzIGFzIGxhcmdlIGFzIGEgc21vb3RoIGVkZ2UuIEl0IGRvZXMgbm90IGluaXRpYWxseSBiZWNhdXNlIHRoZSBzbW9vdGggZWRnZXMgdXNlXG4gICAgICAgICAgICAvLyB0aGUgc3VwcG9ydCBub2RlcyB3aGljaCBleGVydCBhIHJlcHVsc2l2ZSBmb3JjZSBvbiB0aGUgdG8gYW5kIGZyb20gbm9kZXMsIG1ha2luZyB0aGUgZWRnZSBhcHBlYXIgbGFyZ2VyLlxuICAgICAgICAgICAgZWRnZUxlbmd0aCA9XG4gICAgICAgICAgICAgIGVkZ2Uub3B0aW9ucy5sZW5ndGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gdGhpcy5vcHRpb25zLnNwcmluZ0xlbmd0aCAqIDEuNVxuICAgICAgICAgICAgICAgIDogZWRnZS5vcHRpb25zLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNwcmluZ0ZvcmNlKGVkZ2UuZnJvbSwgZWRnZS50bywgZWRnZUxlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIGNvZGUgYWN0dWFsbHkgcGVyZm9ybWluZyB0aGUgY2FsY3VsYXRpb24gZm9yIHRoZSBmdW5jdGlvbiBhYm92ZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlMVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlZGdlTGVuZ3RoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2FsY3VsYXRlU3ByaW5nRm9yY2Uobm9kZTEsIG5vZGUyLCBlZGdlTGVuZ3RoKSB7XG4gICAgY29uc3QgZHggPSBub2RlMS54IC0gbm9kZTIueDtcbiAgICBjb25zdCBkeSA9IG5vZGUxLnkgLSBub2RlMi55O1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5tYXgoTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KSwgMC4wMSk7XG5cbiAgICAvLyB0aGUgMS9kaXN0YW5jZSBpcyBzbyB0aGUgZnggYW5kIGZ5IGNhbiBiZSBjYWxjdWxhdGVkIHdpdGhvdXQgc2luZSBvciBjb3NpbmUuXG4gICAgY29uc3Qgc3ByaW5nRm9yY2UgPVxuICAgICAgKHRoaXMub3B0aW9ucy5zcHJpbmdDb25zdGFudCAqIChlZGdlTGVuZ3RoIC0gZGlzdGFuY2UpKSAvIGRpc3RhbmNlO1xuXG4gICAgY29uc3QgZnggPSBkeCAqIHNwcmluZ0ZvcmNlO1xuICAgIGNvbnN0IGZ5ID0gZHkgKiBzcHJpbmdGb3JjZTtcblxuICAgIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBvbmUgbm9kZSBpcyBub3QgcGFydCBvZiB0aGUgcGh5c2Npc1xuICAgIGlmICh0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMS5pZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZTEuaWRdLnggKz0gZng7XG4gICAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMS5pZF0ueSArPSBmeTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZTIuaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUyLmlkXS54IC09IGZ4O1xuICAgICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZTIuaWRdLnkgLT0gZnk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNwcmluZ1NvbHZlcjtcbiIsICIvKipcbiAqIEhpZXJhcmNoaWNhbCBTcHJpbmcgU29sdmVyXG4gKi9cbmNsYXNzIEhpZXJhcmNoaWNhbFNwcmluZ1NvbHZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge3twaHlzaWNzTm9kZUluZGljZXM6IEFycmF5LCBwaHlzaWNzRWRnZUluZGljZXM6IEFycmF5LCBmb3JjZXM6IHt9LCB2ZWxvY2l0aWVzOiB7fX19IHBoeXNpY3NCb2R5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waHlzaWNzQm9keSA9IHBoeXNpY3NCb2R5O1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHNwcmluZ2ZvcmNlcyBvbiB0aGUgbm9kZXMsIGFjY291bnRpbmcgZm9yIHRoZSBzdXBwb3J0IG5vZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgbGV0IGVkZ2VMZW5ndGgsIGVkZ2U7XG4gICAgbGV0IGR4LCBkeSwgZngsIGZ5LCBzcHJpbmdGb3JjZSwgZGlzdGFuY2U7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgZmFjdG9yID0gMC41O1xuXG4gICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NFZGdlSW5kaWNlcztcbiAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzO1xuICAgIGNvbnN0IGZvcmNlcyA9IHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgc3ByaW5nIGZvcmNlIGNvdW50ZXJzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gbm9kZUluZGljZXNbaV07XG4gICAgICBmb3JjZXNbbm9kZUlkXS5zcHJpbmdGeCA9IDA7XG4gICAgICBmb3JjZXNbbm9kZUlkXS5zcHJpbmdGeSA9IDA7XG4gICAgfVxuXG4gICAgLy8gZm9yY2VzIGNhdXNlZCBieSB0aGUgZWRnZXMsIG1vZGVsbGVkIGFzIHNwcmluZ3NcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlZGdlID0gZWRnZXNbZWRnZUluZGljZXNbaV1dO1xuICAgICAgaWYgKGVkZ2UuY29ubmVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgIGVkZ2VMZW5ndGggPVxuICAgICAgICAgIGVkZ2Uub3B0aW9ucy5sZW5ndGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLm9wdGlvbnMuc3ByaW5nTGVuZ3RoXG4gICAgICAgICAgICA6IGVkZ2Uub3B0aW9ucy5sZW5ndGg7XG5cbiAgICAgICAgZHggPSBlZGdlLmZyb20ueCAtIGVkZ2UudG8ueDtcbiAgICAgICAgZHkgPSBlZGdlLmZyb20ueSAtIGVkZ2UudG8ueTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICAgICAgICBkaXN0YW5jZSA9IGRpc3RhbmNlID09PSAwID8gMC4wMSA6IGRpc3RhbmNlO1xuXG4gICAgICAgIC8vIHRoZSAxL2Rpc3RhbmNlIGlzIHNvIHRoZSBmeCBhbmQgZnkgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBzaW5lIG9yIGNvc2luZS5cbiAgICAgICAgc3ByaW5nRm9yY2UgPVxuICAgICAgICAgICh0aGlzLm9wdGlvbnMuc3ByaW5nQ29uc3RhbnQgKiAoZWRnZUxlbmd0aCAtIGRpc3RhbmNlKSkgLyBkaXN0YW5jZTtcblxuICAgICAgICBmeCA9IGR4ICogc3ByaW5nRm9yY2U7XG4gICAgICAgIGZ5ID0gZHkgKiBzcHJpbmdGb3JjZTtcblxuICAgICAgICBpZiAoZWRnZS50by5sZXZlbCAhPSBlZGdlLmZyb20ubGV2ZWwpIHtcbiAgICAgICAgICBpZiAoZm9yY2VzW2VkZ2UudG9JZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9yY2VzW2VkZ2UudG9JZF0uc3ByaW5nRnggLT0gZng7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS50b0lkXS5zcHJpbmdGeSAtPSBmeTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZvcmNlc1tlZGdlLmZyb21JZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9yY2VzW2VkZ2UuZnJvbUlkXS5zcHJpbmdGeCArPSBmeDtcbiAgICAgICAgICAgIGZvcmNlc1tlZGdlLmZyb21JZF0uc3ByaW5nRnkgKz0gZnk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmb3JjZXNbZWRnZS50b0lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS50b0lkXS54IC09IGZhY3RvciAqIGZ4O1xuICAgICAgICAgICAgZm9yY2VzW2VkZ2UudG9JZF0ueSAtPSBmYWN0b3IgKiBmeTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZvcmNlc1tlZGdlLmZyb21JZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9yY2VzW2VkZ2UuZnJvbUlkXS54ICs9IGZhY3RvciAqIGZ4O1xuICAgICAgICAgICAgZm9yY2VzW2VkZ2UuZnJvbUlkXS55ICs9IGZhY3RvciAqIGZ5O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vcm1hbGl6ZSBzcHJpbmcgZm9yY2VzXG4gICAgc3ByaW5nRm9yY2UgPSAxO1xuICAgIGxldCBzcHJpbmdGeCwgc3ByaW5nRnk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gbm9kZUluZGljZXNbaV07XG4gICAgICBzcHJpbmdGeCA9IE1hdGgubWluKFxuICAgICAgICBzcHJpbmdGb3JjZSxcbiAgICAgICAgTWF0aC5tYXgoLXNwcmluZ0ZvcmNlLCBmb3JjZXNbbm9kZUlkXS5zcHJpbmdGeClcbiAgICAgICk7XG4gICAgICBzcHJpbmdGeSA9IE1hdGgubWluKFxuICAgICAgICBzcHJpbmdGb3JjZSxcbiAgICAgICAgTWF0aC5tYXgoLXNwcmluZ0ZvcmNlLCBmb3JjZXNbbm9kZUlkXS5zcHJpbmdGeSlcbiAgICAgICk7XG5cbiAgICAgIGZvcmNlc1tub2RlSWRdLnggKz0gc3ByaW5nRng7XG4gICAgICBmb3JjZXNbbm9kZUlkXS55ICs9IHNwcmluZ0Z5O1xuICAgIH1cblxuICAgIC8vIHJldGFpbiBlbmVyZ3kgYmFsYW5jZVxuICAgIGxldCB0b3RhbEZ4ID0gMDtcbiAgICBsZXQgdG90YWxGeSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gbm9kZUluZGljZXNbaV07XG4gICAgICB0b3RhbEZ4ICs9IGZvcmNlc1tub2RlSWRdLng7XG4gICAgICB0b3RhbEZ5ICs9IGZvcmNlc1tub2RlSWRdLnk7XG4gICAgfVxuICAgIGNvbnN0IGNvcnJlY3Rpb25GeCA9IHRvdGFsRnggLyBub2RlSW5kaWNlcy5sZW5ndGg7XG4gICAgY29uc3QgY29ycmVjdGlvbkZ5ID0gdG90YWxGeSAvIG5vZGVJbmRpY2VzLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IG5vZGVJbmRpY2VzW2ldO1xuICAgICAgZm9yY2VzW25vZGVJZF0ueCAtPSBjb3JyZWN0aW9uRng7XG4gICAgICBmb3JjZXNbbm9kZUlkXS55IC09IGNvcnJlY3Rpb25GeTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyO1xuIiwgIi8qKlxuICogQ2VudHJhbCBHcmF2aXR5IFNvbHZlclxuICovXG5jbGFzcyBDZW50cmFsR3Jhdml0eVNvbHZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge3twaHlzaWNzTm9kZUluZGljZXM6IEFycmF5LCBwaHlzaWNzRWRnZUluZGljZXM6IEFycmF5LCBmb3JjZXM6IHt9LCB2ZWxvY2l0aWVzOiB7fX19IHBoeXNpY3NCb2R5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waHlzaWNzQm9keSA9IHBoeXNpY3NCb2R5O1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGZvcmNlcyBmb3IgZWFjaCBub2RlXG4gICAqL1xuICBzb2x2ZSgpIHtcbiAgICBsZXQgZHgsIGR5LCBkaXN0YW5jZSwgbm9kZTtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzO1xuICAgIGNvbnN0IGZvcmNlcyA9IHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gbm9kZUluZGljZXNbaV07XG4gICAgICBub2RlID0gbm9kZXNbbm9kZUlkXTtcbiAgICAgIGR4ID0gLW5vZGUueDtcbiAgICAgIGR5ID0gLW5vZGUueTtcbiAgICAgIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgICAgdGhpcy5fY2FsY3VsYXRlRm9yY2VzKGRpc3RhbmNlLCBkeCwgZHksIGZvcmNlcywgbm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIGJhc2VkIG9uIHRoZSBkaXN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeFxuICAgKiBAcGFyYW0ge251bWJlcn0gZHlcbiAgICogQHBhcmFtIHtPYmplY3Q8Tm9kZS5pZCwgdmlzLk5vZGU+fSBmb3JjZXNcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2FsY3VsYXRlRm9yY2VzKGRpc3RhbmNlLCBkeCwgZHksIGZvcmNlcywgbm9kZSkge1xuICAgIGNvbnN0IGdyYXZpdHlGb3JjZSA9XG4gICAgICBkaXN0YW5jZSA9PT0gMCA/IDAgOiB0aGlzLm9wdGlvbnMuY2VudHJhbEdyYXZpdHkgLyBkaXN0YW5jZTtcbiAgICBmb3JjZXNbbm9kZS5pZF0ueCA9IGR4ICogZ3Jhdml0eUZvcmNlO1xuICAgIGZvcmNlc1tub2RlLmlkXS55ID0gZHkgKiBncmF2aXR5Rm9yY2U7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2VudHJhbEdyYXZpdHlTb2x2ZXI7XG4iLCAiaW1wb3J0IEJhcm5lc0h1dFNvbHZlciBmcm9tIFwiLi9CYXJuZXNIdXRTb2x2ZXJcIjtcbmltcG9ydCB7IEFsZWEgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogQGF1Z21lbnRzIEJhcm5lc0h1dFNvbHZlclxuICovXG5jbGFzcyBGb3JjZUF0bGFzMkJhc2VkUmVwdWxzaW9uU29sdmVyIGV4dGVuZHMgQmFybmVzSHV0U29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fcm5nID0gQWxlYShcIkZPUkNFIEFUTEFTIDIgQkFTRUQgUkVQVUxTSU9OIFNPTFZFUlwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGZvcmNlcyBiYXNlZCBvbiB0aGUgZGlzdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxuICAgKiBAcGFyYW0ge251bWJlcn0gZHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGR5XG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2FsY3VsYXRlRm9yY2VzKGRpc3RhbmNlLCBkeCwgZHksIG5vZGUsIHBhcmVudEJyYW5jaCkge1xuICAgIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuICAgICAgZGlzdGFuY2UgPSAwLjEgKiB0aGlzLl9ybmcoKTtcbiAgICAgIGR4ID0gZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3ZlcmxhcEF2b2lkYW5jZUZhY3RvciA8IDEgJiYgbm9kZS5zaGFwZS5yYWRpdXMpIHtcbiAgICAgIGRpc3RhbmNlID0gTWF0aC5tYXgoXG4gICAgICAgIDAuMSArIHRoaXMub3ZlcmxhcEF2b2lkYW5jZUZhY3RvciAqIG5vZGUuc2hhcGUucmFkaXVzLFxuICAgICAgICBkaXN0YW5jZSAtIG5vZGUuc2hhcGUucmFkaXVzXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZ3JlZSA9IG5vZGUuZWRnZXMubGVuZ3RoICsgMTtcbiAgICAvLyB0aGUgZGl2aWRpbmcgYnkgdGhlIGRpc3RhbmNlIGN1YmVkIGluc3RlYWQgb2Ygc3F1YXJlZCBhbGxvd3MgdXMgdG8gZ2V0IHRoZSBmeCBhbmQgZnkgY29tcG9uZW50cyB3aXRob3V0IHNpbmVzIGFuZCBjb3NpbmVzXG4gICAgLy8gaXQgaXMgc2hvcnRoYW5kIGZvciBncmF2aXR5Zm9yY2Ugd2l0aCBkaXN0YW5jZSBzcXVhcmVkIGFuZCBmeCA9IGR4L2Rpc3RhbmNlICogZ3Jhdml0eUZvcmNlXG4gICAgY29uc3QgZ3Jhdml0eUZvcmNlID1cbiAgICAgICh0aGlzLm9wdGlvbnMuZ3Jhdml0YXRpb25hbENvbnN0YW50ICpcbiAgICAgICAgcGFyZW50QnJhbmNoLm1hc3MgKlxuICAgICAgICBub2RlLm9wdGlvbnMubWFzcyAqXG4gICAgICAgIGRlZ3JlZSkgL1xuICAgICAgTWF0aC5wb3coZGlzdGFuY2UsIDIpO1xuICAgIGNvbnN0IGZ4ID0gZHggKiBncmF2aXR5Rm9yY2U7XG4gICAgY29uc3QgZnkgPSBkeSAqIGdyYXZpdHlGb3JjZTtcblxuICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUuaWRdLnggKz0gZng7XG4gICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZS5pZF0ueSArPSBmeTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGb3JjZUF0bGFzMkJhc2VkUmVwdWxzaW9uU29sdmVyO1xuIiwgImltcG9ydCBDZW50cmFsR3Jhdml0eVNvbHZlciBmcm9tIFwiLi9DZW50cmFsR3Jhdml0eVNvbHZlclwiO1xuXG4vKipcbiAqIEBhdWdtZW50cyBDZW50cmFsR3Jhdml0eVNvbHZlclxuICovXG5jbGFzcyBGb3JjZUF0bGFzMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXIgZXh0ZW5kcyBDZW50cmFsR3Jhdml0eVNvbHZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge3twaHlzaWNzTm9kZUluZGljZXM6IEFycmF5LCBwaHlzaWNzRWRnZUluZGljZXM6IEFycmF5LCBmb3JjZXM6IHt9LCB2ZWxvY2l0aWVzOiB7fX19IHBoeXNpY3NCb2R5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucykge1xuICAgIHN1cGVyKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGZvcmNlcyBiYXNlZCBvbiB0aGUgZGlzdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxuICAgKiBAcGFyYW0ge251bWJlcn0gZHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGR5XG4gICAqIEBwYXJhbSB7T2JqZWN0PE5vZGUuaWQsIE5vZGU+fSBmb3JjZXNcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2FsY3VsYXRlRm9yY2VzKGRpc3RhbmNlLCBkeCwgZHksIGZvcmNlcywgbm9kZSkge1xuICAgIGlmIChkaXN0YW5jZSA+IDApIHtcbiAgICAgIGNvbnN0IGRlZ3JlZSA9IG5vZGUuZWRnZXMubGVuZ3RoICsgMTtcbiAgICAgIGNvbnN0IGdyYXZpdHlGb3JjZSA9XG4gICAgICAgIHRoaXMub3B0aW9ucy5jZW50cmFsR3Jhdml0eSAqIGRlZ3JlZSAqIG5vZGUub3B0aW9ucy5tYXNzO1xuICAgICAgZm9yY2VzW25vZGUuaWRdLnggPSBkeCAqIGdyYXZpdHlGb3JjZTtcbiAgICAgIGZvcmNlc1tub2RlLmlkXS55ID0gZHkgKiBncmF2aXR5Rm9yY2U7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvcmNlQXRsYXMyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlcjtcbiIsICJpbXBvcnQgQmFybmVzSHV0U29sdmVyIGZyb20gXCIuL2NvbXBvbmVudHMvcGh5c2ljcy9CYXJuZXNIdXRTb2x2ZXJcIjtcbmltcG9ydCBSZXB1bHNpb24gZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL1JlcHVsc2lvblNvbHZlclwiO1xuaW1wb3J0IEhpZXJhcmNoaWNhbFJlcHVsc2lvbiBmcm9tIFwiLi9jb21wb25lbnRzL3BoeXNpY3MvSGllcmFyY2hpY2FsUmVwdWxzaW9uU29sdmVyXCI7XG5pbXBvcnQgU3ByaW5nU29sdmVyIGZyb20gXCIuL2NvbXBvbmVudHMvcGh5c2ljcy9TcHJpbmdTb2x2ZXJcIjtcbmltcG9ydCBIaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0hpZXJhcmNoaWNhbFNwcmluZ1NvbHZlclwiO1xuaW1wb3J0IENlbnRyYWxHcmF2aXR5U29sdmVyIGZyb20gXCIuL2NvbXBvbmVudHMvcGh5c2ljcy9DZW50cmFsR3Jhdml0eVNvbHZlclwiO1xuaW1wb3J0IEZvcmNlQXRsYXMyQmFzZWRSZXB1bHNpb25Tb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0ZBMkJhc2VkUmVwdWxzaW9uU29sdmVyXCI7XG5pbXBvcnQgRm9yY2VBdGxhczJCYXNlZENlbnRyYWxHcmF2aXR5U29sdmVyIGZyb20gXCIuL2NvbXBvbmVudHMvcGh5c2ljcy9GQTJCYXNlZENlbnRyYWxHcmF2aXR5U29sdmVyXCI7XG5pbXBvcnQge1xuICBIU1ZUb0hleCxcbiAgbWVyZ2VPcHRpb25zLFxuICBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBFbmRQb2ludHMgfSBmcm9tIFwiLi9jb21wb25lbnRzL2VkZ2VzXCI7IC8vIGZvciBkZWJ1Z2dpbmcgd2l0aCBfZHJhd0ZvcmNlcygpXG5cbi8qKlxuICogVGhlIHBoeXNpY3MgZW5naW5lXG4gKi9cbmNsYXNzIFBoeXNpY3NFbmdpbmUge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHkpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucGh5c2ljc0JvZHkgPSB7XG4gICAgICBwaHlzaWNzTm9kZUluZGljZXM6IFtdLFxuICAgICAgcGh5c2ljc0VkZ2VJbmRpY2VzOiBbXSxcbiAgICAgIGZvcmNlczoge30sXG4gICAgICB2ZWxvY2l0aWVzOiB7fSxcbiAgICB9O1xuXG4gICAgdGhpcy5waHlzaWNzRW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5zaW11bGF0aW9uSW50ZXJ2YWwgPSAxMDAwIC8gNjA7XG4gICAgdGhpcy5yZXF1aXJlc1RpbWVvdXQgPSB0cnVlO1xuICAgIHRoaXMucHJldmlvdXNTdGF0ZXMgPSB7fTtcbiAgICB0aGlzLnJlZmVyZW5jZVN0YXRlID0ge307XG4gICAgdGhpcy5mcmVlemVDYWNoZSA9IHt9O1xuICAgIHRoaXMucmVuZGVyVGltZXIgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBwYXJhbWV0ZXJzIGZvciB0aGUgYWRhcHRpdmUgdGltZXN0ZXBcbiAgICB0aGlzLmFkYXB0aXZlVGltZXN0ZXAgPSBmYWxzZTtcbiAgICB0aGlzLmFkYXB0aXZlVGltZXN0ZXBFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5hZGFwdGl2ZUNvdW50ZXIgPSAwO1xuICAgIHRoaXMuYWRhcHRpdmVJbnRlcnZhbCA9IDM7XG5cbiAgICB0aGlzLnN0YWJpbGl6ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXJ0ZWRTdGFiaWxpemF0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucyA9IDA7XG4gICAgdGhpcy5yZWFkeSA9IGZhbHNlOyAvLyB3aWxsIGJlIHNldCB0byB0cnVlIGlmIHRoZSBzdGFiaWxpemVcblxuICAgIC8vIGRlZmF1bHQgb3B0aW9uc1xuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgYmFybmVzSHV0OiB7XG4gICAgICAgIHRoZXRhOiAwLjUsXG4gICAgICAgIGdyYXZpdGF0aW9uYWxDb25zdGFudDogLTIwMDAsXG4gICAgICAgIGNlbnRyYWxHcmF2aXR5OiAwLjMsXG4gICAgICAgIHNwcmluZ0xlbmd0aDogOTUsXG4gICAgICAgIHNwcmluZ0NvbnN0YW50OiAwLjA0LFxuICAgICAgICBkYW1waW5nOiAwLjA5LFxuICAgICAgICBhdm9pZE92ZXJsYXA6IDAsXG4gICAgICB9LFxuICAgICAgZm9yY2VBdGxhczJCYXNlZDoge1xuICAgICAgICB0aGV0YTogMC41LFxuICAgICAgICBncmF2aXRhdGlvbmFsQ29uc3RhbnQ6IC01MCxcbiAgICAgICAgY2VudHJhbEdyYXZpdHk6IDAuMDEsXG4gICAgICAgIHNwcmluZ0NvbnN0YW50OiAwLjA4LFxuICAgICAgICBzcHJpbmdMZW5ndGg6IDEwMCxcbiAgICAgICAgZGFtcGluZzogMC40LFxuICAgICAgICBhdm9pZE92ZXJsYXA6IDAsXG4gICAgICB9LFxuICAgICAgcmVwdWxzaW9uOiB7XG4gICAgICAgIGNlbnRyYWxHcmF2aXR5OiAwLjIsXG4gICAgICAgIHNwcmluZ0xlbmd0aDogMjAwLFxuICAgICAgICBzcHJpbmdDb25zdGFudDogMC4wNSxcbiAgICAgICAgbm9kZURpc3RhbmNlOiAxMDAsXG4gICAgICAgIGRhbXBpbmc6IDAuMDksXG4gICAgICAgIGF2b2lkT3ZlcmxhcDogMCxcbiAgICAgIH0sXG4gICAgICBoaWVyYXJjaGljYWxSZXB1bHNpb246IHtcbiAgICAgICAgY2VudHJhbEdyYXZpdHk6IDAuMCxcbiAgICAgICAgc3ByaW5nTGVuZ3RoOiAxMDAsXG4gICAgICAgIHNwcmluZ0NvbnN0YW50OiAwLjAxLFxuICAgICAgICBub2RlRGlzdGFuY2U6IDEyMCxcbiAgICAgICAgZGFtcGluZzogMC4wOSxcbiAgICAgIH0sXG4gICAgICBtYXhWZWxvY2l0eTogNTAsXG4gICAgICBtaW5WZWxvY2l0eTogMC43NSwgLy8gcHgvc1xuICAgICAgc29sdmVyOiBcImJhcm5lc0h1dFwiLFxuICAgICAgc3RhYmlsaXphdGlvbjoge1xuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICBpdGVyYXRpb25zOiAxMDAwLCAvLyBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb24gdG8gc3RhYmlsaXplXG4gICAgICAgIHVwZGF0ZUludGVydmFsOiA1MCxcbiAgICAgICAgb25seUR5bmFtaWNFZGdlczogZmFsc2UsXG4gICAgICAgIGZpdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB0aW1lc3RlcDogMC41LFxuICAgICAgYWRhcHRpdmVUaW1lc3RlcDogdHJ1ZSxcbiAgICAgIHdpbmQ6IHsgeDogMCwgeTogMCB9LFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuICAgIHRoaXMudGltZXN0ZXAgPSAwLjU7XG4gICAgdGhpcy5sYXlvdXRGYWlsZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJpbml0UGh5c2ljc1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLmluaXRQaHlzaWNzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfbGF5b3V0RmFpbGVkXCIsICgpID0+IHtcbiAgICAgIHRoaXMubGF5b3V0RmFpbGVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInJlc2V0UGh5c2ljc1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKCk7XG4gICAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkaXNhYmxlUGh5c2ljc1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLnBoeXNpY3NFbmFibGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJyZXN0b3JlUGh5c2ljc1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLnNldE9wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICAgIGlmICh0aGlzLnJlYWR5ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuc3RhcnRTaW11bGF0aW9uKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJzdGFydFNpbXVsYXRpb25cIiwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucmVhZHkgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFNpbXVsYXRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInN0b3BTaW11bGF0aW9uXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc3RvcFNpbXVsYXRpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zdG9wU2ltdWxhdGlvbihmYWxzZSk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9kYXRhQ2hhbmdlZFwiLCAoKSA9PiB7XG4gICAgICAvLyBOb2RlcyBhbmQvb3IgZWRnZXMgaGF2ZSBiZWVuIGFkZGVkIG9yIHJlbW92ZWQsIHVwZGF0ZSBzaG9ydGN1dCBsaXN0cy5cbiAgICAgIHRoaXMudXBkYXRlUGh5c2ljc0RhdGEoKTtcbiAgICB9KTtcblxuICAgIC8vIGRlYnVnOiBzaG93IGZvcmNlc1xuICAgIC8vIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiYWZ0ZXJEcmF3aW5nXCIsIChjdHgpID0+IHt0aGlzLl9kcmF3Rm9yY2VzKGN0eCk7fSk7XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBwaHlzaWNzIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBoeXNpY3NFbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RvcFNpbXVsYXRpb24oKTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucyA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucGh5c2ljc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0YXJ0U2ltdWxhdGlvbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5waHlzaWNzRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQoW1wic3RhYmlsaXphdGlvblwiXSwgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgbWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucywgb3B0aW9ucywgXCJzdGFiaWxpemF0aW9uXCIpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLnBoeXNpY3NFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2luZCA9IHRoaXMub3B0aW9ucy53aW5kO1xuICAgICAgICBpZiAod2luZCkge1xuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZC54ICE9PSBcIm51bWJlclwiIHx8IE51bWJlci5pc05hTih3aW5kLngpKSB7XG4gICAgICAgICAgICB3aW5kLnggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmQueSAhPT0gXCJudW1iZXJcIiB8fCBOdW1iZXIuaXNOYU4od2luZC55KSkge1xuICAgICAgICAgICAgd2luZC55ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgdGhlIHRpbWVzdGVwXG4gICAgICAgIHRoaXMudGltZXN0ZXAgPSB0aGlzLm9wdGlvbnMudGltZXN0ZXA7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNvbmZpZ3VyZSB0aGUgZW5naW5lLlxuICAgKi9cbiAgaW5pdCgpIHtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBpZiAodGhpcy5vcHRpb25zLnNvbHZlciA9PT0gXCJmb3JjZUF0bGFzMkJhc2VkXCIpIHtcbiAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZm9yY2VBdGxhczJCYXNlZDtcbiAgICAgIHRoaXMubm9kZXNTb2x2ZXIgPSBuZXcgRm9yY2VBdGxhczJCYXNlZFJlcHVsc2lvblNvbHZlcihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgICAgdGhpcy5lZGdlc1NvbHZlciA9IG5ldyBTcHJpbmdTb2x2ZXIodGhpcy5ib2R5LCB0aGlzLnBoeXNpY3NCb2R5LCBvcHRpb25zKTtcbiAgICAgIHRoaXMuZ3Jhdml0eVNvbHZlciA9IG5ldyBGb3JjZUF0bGFzMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zb2x2ZXIgPT09IFwicmVwdWxzaW9uXCIpIHtcbiAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMucmVwdWxzaW9uO1xuICAgICAgdGhpcy5ub2Rlc1NvbHZlciA9IG5ldyBSZXB1bHNpb24odGhpcy5ib2R5LCB0aGlzLnBoeXNpY3NCb2R5LCBvcHRpb25zKTtcbiAgICAgIHRoaXMuZWRnZXNTb2x2ZXIgPSBuZXcgU3ByaW5nU29sdmVyKHRoaXMuYm9keSwgdGhpcy5waHlzaWNzQm9keSwgb3B0aW9ucyk7XG4gICAgICB0aGlzLmdyYXZpdHlTb2x2ZXIgPSBuZXcgQ2VudHJhbEdyYXZpdHlTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zb2x2ZXIgPT09IFwiaGllcmFyY2hpY2FsUmVwdWxzaW9uXCIpIHtcbiAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsUmVwdWxzaW9uO1xuICAgICAgdGhpcy5ub2Rlc1NvbHZlciA9IG5ldyBIaWVyYXJjaGljYWxSZXB1bHNpb24oXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIHRoaXMuZWRnZXNTb2x2ZXIgPSBuZXcgSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyKFxuICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgIHRoaXMucGh5c2ljc0JvZHksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgICB0aGlzLmdyYXZpdHlTb2x2ZXIgPSBuZXcgQ2VudHJhbEdyYXZpdHlTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYmFybmVzSHV0XG4gICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLmJhcm5lc0h1dDtcbiAgICAgIHRoaXMubm9kZXNTb2x2ZXIgPSBuZXcgQmFybmVzSHV0U29sdmVyKFxuICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgIHRoaXMucGh5c2ljc0JvZHksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgICB0aGlzLmVkZ2VzU29sdmVyID0gbmV3IFNwcmluZ1NvbHZlcih0aGlzLmJvZHksIHRoaXMucGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuICAgICAgdGhpcy5ncmF2aXR5U29sdmVyID0gbmV3IENlbnRyYWxHcmF2aXR5U29sdmVyKFxuICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgIHRoaXMucGh5c2ljc0JvZHksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5tb2RlbE9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIGluaXRpYWxpemUgdGhlIGVuZ2luZVxuICAgKi9cbiAgaW5pdFBoeXNpY3MoKSB7XG4gICAgaWYgKHRoaXMucGh5c2ljc0VuYWJsZWQgPT09IHRydWUgJiYgdGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuc3RhYmlsaXplKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YWJpbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJmaXRcIiwge30sIHRoaXMubGF5b3V0RmFpbGVkKTsgLy8gaWYgdGhlIGxheW91dCBmYWlsZWQsIHdlIHVzZSB0aGUgYXBwcm94aW1hdGlvbiBmb3IgdGhlIHpvb21cbiAgICAgICAgdGhpcy5zdGFydFNpbXVsYXRpb24oKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiZml0XCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgc2ltdWxhdGlvblxuICAgKi9cbiAgc3RhcnRTaW11bGF0aW9uKCkge1xuICAgIGlmICh0aGlzLnBoeXNpY3NFbmFibGVkID09PSB0cnVlICYmIHRoaXMub3B0aW9ucy5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnN0YWJpbGl6ZWQgPSBmYWxzZTtcblxuICAgICAgLy8gd2hlbiB2aXNpYmxlLCBhZGFwdGl2aXR5IGlzIGRpc2FibGVkLlxuICAgICAgdGhpcy5hZGFwdGl2ZVRpbWVzdGVwID0gZmFsc2U7XG5cbiAgICAgIC8vIHRoaXMgc2V0cyB0aGUgd2lkdGggb2YgYWxsIG5vZGVzIGluaXRpYWxseSB3aGljaCBjb3VsZCBiZSByZXF1aXJlZCBmb3IgdGhlIGF2b2lkT3ZlcmxhcFxuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXNpemVOb2Rlc1wiKTtcbiAgICAgIGlmICh0aGlzLnZpZXdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMudmlld0Z1bmN0aW9uID0gdGhpcy5zaW11bGF0aW9uU3RlcC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImluaXRSZWRyYXdcIiwgdGhpcy52aWV3RnVuY3Rpb24pO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0YXJ0UmVuZGVyaW5nXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0aGUgc2ltdWxhdGlvbiwgZm9yY2Ugc3RhYmlsaXphdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbZW1pdD10cnVlXVxuICAgKi9cbiAgc3RvcFNpbXVsYXRpb24oZW1pdCA9IHRydWUpIHtcbiAgICB0aGlzLnN0YWJpbGl6ZWQgPSB0cnVlO1xuICAgIGlmIChlbWl0ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLl9lbWl0U3RhYmlsaXplZCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy52aWV3RnVuY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKFwiaW5pdFJlZHJhd1wiLCB0aGlzLnZpZXdGdW5jdGlvbik7XG4gICAgICB0aGlzLnZpZXdGdW5jdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlbWl0ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfc3RvcFJlbmRlcmluZ1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIHZpZXdGdW5jdGlvbiBpbnNlcnRzIHRoaXMgc3RlcCBpbnRvIGVhY2ggcmVuZGVyIGxvb3AuIEl0IGNhbGxzIHRoZSBwaHlzaWNzIHRpY2sgYW5kIGhhbmRsZXMgdGhlIGNsZWFudXAgYXQgc3RhYmlsaXplZC5cbiAgICpcbiAgICovXG4gIHNpbXVsYXRpb25TdGVwKCkge1xuICAgIC8vIGNoZWNrIGlmIHRoZSBwaHlzaWNzIGhhdmUgc2V0dGxlZFxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5waHlzaWNzVGljaygpO1xuICAgIGNvbnN0IHBoeXNpY3NUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcblxuICAgIC8vIHJ1biBkb3VibGUgc3BlZWQgaWYgaXQgaXMgYSBsaXR0bGUgZ3JhcGhcbiAgICBpZiAoXG4gICAgICAocGh5c2ljc1RpbWUgPCAwLjQgKiB0aGlzLnNpbXVsYXRpb25JbnRlcnZhbCB8fFxuICAgICAgICB0aGlzLnJ1bkRvdWJsZVNwZWVkID09PSB0cnVlKSAmJlxuICAgICAgdGhpcy5zdGFiaWxpemVkID09PSBmYWxzZVxuICAgICkge1xuICAgICAgdGhpcy5waHlzaWNzVGljaygpO1xuXG4gICAgICAvLyB0aGlzIG1ha2VzIHN1cmUgdGhlcmUgaXMgbm8gaml0dGVyLiBUaGUgZGVjaXNpb24gaXMgdGFrZW4gb25jZSB0byBydW4gaXQgYXQgZG91YmxlIHNwZWVkLlxuICAgICAgdGhpcy5ydW5Eb3VibGVTcGVlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhYmlsaXplZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB0cmlnZ2VyIHRoZSBzdGFiaWxpemVkIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2Ftb3VudE9mSXRlcmF0aW9ucz10aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2VtaXRTdGFiaWxpemVkKGFtb3VudE9mSXRlcmF0aW9ucyA9IHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zID4gMSB8fFxuICAgICAgdGhpcy5zdGFydGVkU3RhYmlsaXphdGlvbiA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFiaWxpemVkXCIsIHtcbiAgICAgICAgICBpdGVyYXRpb25zOiBhbW91bnRPZkl0ZXJhdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN0YXJ0ZWRTdGFiaWxpemF0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMgPSAwO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIGZvciBvbmUgcGh5c2ljcyBpdGVyYXRpb24gYW5kIG1vdmUgdGhlIG5vZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcGh5c2ljc1N0ZXAoKSB7XG4gICAgdGhpcy5ncmF2aXR5U29sdmVyLnNvbHZlKCk7XG4gICAgdGhpcy5ub2Rlc1NvbHZlci5zb2x2ZSgpO1xuICAgIHRoaXMuZWRnZXNTb2x2ZXIuc29sdmUoKTtcbiAgICB0aGlzLm1vdmVOb2RlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgZHluYW1pYyBhZGp1c3RtZW50cyB0byB0aGUgdGltZXN0ZXAsIGJhc2VkIG9uIGN1cnJlbnQgc3RhdGUuXG4gICAqXG4gICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgcGh5c2ljc1RpY2soKS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFkanVzdFRpbWVTdGVwKCkge1xuICAgIGNvbnN0IGZhY3RvciA9IDEuMjsgLy8gRmFjdG9yIGZvciBpbmNyZWFzaW5nIHRoZSB0aW1lc3RlcCBvbiBzdWNjZXNzLlxuXG4gICAgLy8gd2UgY29tcGFyZSB0aGUgdHdvIHN0ZXBzLiBpZiBpdCBpcyBhY2NlcHRhYmxlIHdlIGRvdWJsZSB0aGUgc3RlcC5cbiAgICBpZiAodGhpcy5fZXZhbHVhdGVTdGVwUXVhbGl0eSgpID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnRpbWVzdGVwID0gZmFjdG9yICogdGhpcy50aW1lc3RlcDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgbm90LCB3ZSBkZWNyZWFzZSB0aGUgc3RlcCB0byBhIG1pbmltdW0gb2YgdGhlIG9wdGlvbnMgdGltZXN0ZXAuXG4gICAgICAvLyBpZiB0aGUgZGVjcmVhc2VkIHRpbWVzdGVwIGlzIHNtYWxsZXIgdGhhbiB0aGUgb3B0aW9ucyBzdGVwLCB3ZSBkbyBub3QgcmVzZXQgdGhlIGNvdW50ZXJcbiAgICAgIC8vIHdlIGFzc3VtZSB0aGF0IHRoZSBvcHRpb25zIHRpbWVzdGVwIGlzIHN0YWJsZSBlbm91Z2guXG4gICAgICBpZiAodGhpcy50aW1lc3RlcCAvIGZhY3RvciA8IHRoaXMub3B0aW9ucy50aW1lc3RlcCkge1xuICAgICAgICB0aGlzLnRpbWVzdGVwID0gdGhpcy5vcHRpb25zLnRpbWVzdGVwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgdGhlIHRpbWVzdGVwIHdhcyBsYXJnZXIgdGhhbiAyIHRpbWVzIHRoZSBvcHRpb24gb25lIHdlIGNoZWNrIHRoZSBhZGFwdGl2aXR5IGFnYWluIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IGxhcmdlIGluc3RhYmlsaXRpZXMgZG8gbm90IGZvcm0uXG4gICAgICAgIHRoaXMuYWRhcHRpdmVDb3VudGVyID0gLTE7IC8vIGNoZWNrIGFnYWluIG5leHQgaXRlcmF0aW9uXG4gICAgICAgIHRoaXMudGltZXN0ZXAgPSBNYXRoLm1heCh0aGlzLm9wdGlvbnMudGltZXN0ZXAsIHRoaXMudGltZXN0ZXAgLyBmYWN0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBzaW11bGF0aW9uIHN0ZXAgKG9yICd0aWNrJykgaW4gdGhlIHBoeXNpY3Mgc2ltdWxhdGlvblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcGh5c2ljc1RpY2soKSB7XG4gICAgdGhpcy5fc3RhcnRTdGFiaWxpemluZygpOyAvLyB0aGlzIGVuc3VyZXMgdGhhdCB0aGVyZSBpcyBubyBzdGFydCBldmVudCB3aGVuIHRoZSBuZXR3b3JrIGlzIGFscmVhZHkgc3RhYmxlLlxuICAgIGlmICh0aGlzLnN0YWJpbGl6ZWQgPT09IHRydWUpIHJldHVybjtcblxuICAgIC8vIGFkYXB0aXZpdHkgbWVhbnMgdGhlIHRpbWVzdGVwIGFkYXB0cyB0byB0aGUgc2l0dWF0aW9uLCBvbmx5IGFwcGxpY2FibGUgZm9yIHN0YWJpbGl6YXRpb25cbiAgICBpZiAoXG4gICAgICB0aGlzLmFkYXB0aXZlVGltZXN0ZXAgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcEVuYWJsZWQgPT09IHRydWVcbiAgICApIHtcbiAgICAgIC8vIHRpbWVzdGVwIHJlbWFpbnMgc3RhYmxlIGZvciBcImludGVydmFsXCIgaXRlcmF0aW9ucy5cbiAgICAgIGNvbnN0IGRvQWRhcHRpdmUgPSB0aGlzLmFkYXB0aXZlQ291bnRlciAlIHRoaXMuYWRhcHRpdmVJbnRlcnZhbCA9PT0gMDtcblxuICAgICAgaWYgKGRvQWRhcHRpdmUpIHtcbiAgICAgICAgLy8gZmlyc3QgdGhlIGJpZyBzdGVwIGFuZCByZXZlcnQuXG4gICAgICAgIHRoaXMudGltZXN0ZXAgPSAyICogdGhpcy50aW1lc3RlcDtcbiAgICAgICAgdGhpcy5waHlzaWNzU3RlcCgpO1xuICAgICAgICB0aGlzLnJldmVydCgpOyAvLyBzYXZlcyB0aGUgcmVmZXJlbmNlIHN0YXRlXG5cbiAgICAgICAgLy8gbm93IHRoZSBub3JtYWwgc3RlcC4gU2luY2UgdGhpcyBpcyB0aGUgbGFzdCBzdGVwLCBpdCBpcyB0aGUgbW9yZSBzdGFibGUgb25lIGFuZCB3ZSB3aWxsIHRha2UgdGhpcy5cbiAgICAgICAgdGhpcy50aW1lc3RlcCA9IDAuNSAqIHRoaXMudGltZXN0ZXA7XG5cbiAgICAgICAgLy8gc2luY2UgaXQncyBoYWxmIHRoZSBzdGVwLCB3ZSBkbyBpdCB0d2ljZS5cbiAgICAgICAgdGhpcy5waHlzaWNzU3RlcCgpO1xuICAgICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7XG5cbiAgICAgICAgdGhpcy5hZGp1c3RUaW1lU3RlcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5waHlzaWNzU3RlcCgpOyAvLyBub3JtYWwgc3RlcCwga2VlcGluZyB0aW1lc3RlcCBjb25zdGFudFxuICAgICAgfVxuXG4gICAgICB0aGlzLmFkYXB0aXZlQ291bnRlciArPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjYXNlIGZvciB0aGUgc3RhdGljIHRpbWVzdGVwLCB3ZSByZXNldCBpdCB0byB0aGUgb25lIGluIG9wdGlvbnMgYW5kIHRha2UgYSBub3JtYWwgc3RlcC5cbiAgICAgIHRoaXMudGltZXN0ZXAgPSB0aGlzLm9wdGlvbnMudGltZXN0ZXA7XG4gICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhYmlsaXplZCA9PT0gdHJ1ZSkgdGhpcy5yZXZlcnQoKTtcbiAgICB0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zKys7XG4gIH1cblxuICAvKipcbiAgICogTm9kZXMgYW5kIGVkZ2VzIGNhbiBoYXZlIHRoZSBwaHlzaWNzIHRvZ2dsZXMgb24gb3Igb2ZmLiBBIGNvbGxlY3Rpb24gb2YgaW5kaWNlcyBpcyBjcmVhdGVkIGhlcmUgc28gd2UgY2FuIHNraXAgdGhlIGNoZWNrIGFsbCB0aGUgdGltZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVwZGF0ZVBoeXNpY3NEYXRhKCkge1xuICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzID0ge307XG4gICAgdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXMgPSBbXTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NFZGdlSW5kaWNlcyA9IFtdO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5ib2R5LmVkZ2VzO1xuXG4gICAgLy8gZ2V0IG5vZGUgaW5kaWNlcyBmb3IgcGh5c2ljc1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIGlmIChub2Rlc1tub2RlSWRdLm9wdGlvbnMucGh5c2ljcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLnB1c2gobm9kZXNbbm9kZUlkXS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBnZXQgZWRnZSBpbmRpY2VzIGZvciBwaHlzaWNzXG4gICAgZm9yIChjb25zdCBlZGdlSWQgaW4gZWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgICAgaWYgKGVkZ2VzW2VkZ2VJZF0ub3B0aW9ucy5waHlzaWNzID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5waHlzaWNzQm9keS5waHlzaWNzRWRnZUluZGljZXMucHVzaChlZGdlc1tlZGdlSWRdLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGdldCB0aGUgdmVsb2NpdHkgYW5kIHRoZSBmb3JjZXMgdmVjdG9yXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXNbaV07XG4gICAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlSWRdID0geyB4OiAwLCB5OiAwIH07XG5cbiAgICAgIC8vIGZvcmNlcyBjYW4gYmUgcmVzZXQgYmVjYXVzZSB0aGV5IGFyZSByZWNhbGN1bGF0ZWQuIFZlbG9jaXRpZXMgaGF2ZSB0byBwZXJzaXN0LlxuICAgICAgaWYgKHRoaXMucGh5c2ljc0JvZHkudmVsb2NpdGllc1tub2RlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzW25vZGVJZF0gPSB7IHg6IDAsIHk6IDAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjbGVhbiBkZWxldGVkIG5vZGVzIGZyb20gdGhlIHZlbG9jaXR5IHZlY3RvclxuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMucGh5c2ljc0JvZHkudmVsb2NpdGllcykge1xuICAgICAgaWYgKG5vZGVzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZWxldGUgdGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzW25vZGVJZF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldmVydCB0aGUgc2ltdWxhdGlvbiBvbmUgc3RlcC4gVGhpcyBpcyBkb25lIHNvIGFmdGVyIHN0YWJpbGl6YXRpb24sIGV2ZXJ5IG5ldyBzdGFydCBvZiB0aGUgc2ltdWxhdGlvbiB3aWxsIGFsc28gc2F5IHN0YWJpbGl6ZWQuXG4gICAqL1xuICByZXZlcnQoKSB7XG4gICAgY29uc3Qgbm9kZUlkcyA9IE9iamVjdC5rZXlzKHRoaXMucHJldmlvdXNTdGF0ZXMpO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IHZlbG9jaXRpZXMgPSB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXM7XG4gICAgdGhpcy5yZWZlcmVuY2VTdGF0ZSA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSWRzW2ldO1xuICAgICAgaWYgKG5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobm9kZXNbbm9kZUlkXS5vcHRpb25zLnBoeXNpY3MgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnJlZmVyZW5jZVN0YXRlW25vZGVJZF0gPSB7XG4gICAgICAgICAgICBwb3NpdGlvbnM6IHsgeDogbm9kZXNbbm9kZUlkXS54LCB5OiBub2Rlc1tub2RlSWRdLnkgfSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZlbG9jaXRpZXNbbm9kZUlkXS54ID0gdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdLnZ4O1xuICAgICAgICAgIHZlbG9jaXRpZXNbbm9kZUlkXS55ID0gdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdLnZ5O1xuICAgICAgICAgIG5vZGVzW25vZGVJZF0ueCA9IHRoaXMucHJldmlvdXNTdGF0ZXNbbm9kZUlkXS54O1xuICAgICAgICAgIG5vZGVzW25vZGVJZF0ueSA9IHRoaXMucHJldmlvdXNTdGF0ZXNbbm9kZUlkXS55O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGNvbXBhcmVzIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gdGhlIGN1cnJlbnQgc3RhdGVcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZhbHVhdGVTdGVwUXVhbGl0eSgpIHtcbiAgICBsZXQgZHgsIGR5LCBkcG9zO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlU3RhdGU7XG4gICAgY29uc3QgcG9zVGhyZXNob2xkID0gMC4zO1xuXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5yZWZlcmVuY2VTdGF0ZSkge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5yZWZlcmVuY2VTdGF0ZSwgbm9kZUlkKSAmJlxuICAgICAgICBub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICBkeCA9IG5vZGVzW25vZGVJZF0ueCAtIHJlZmVyZW5jZVtub2RlSWRdLnBvc2l0aW9ucy54O1xuICAgICAgICBkeSA9IG5vZGVzW25vZGVJZF0ueSAtIHJlZmVyZW5jZVtub2RlSWRdLnBvc2l0aW9ucy55O1xuXG4gICAgICAgIGRwb3MgPSBNYXRoLnNxcnQoTWF0aC5wb3coZHgsIDIpICsgTWF0aC5wb3coZHksIDIpKTtcblxuICAgICAgICBpZiAoZHBvcyA+IHBvc1RocmVzaG9sZCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtb3ZlIHRoZSBub2RlcyBvbmUgdGltZXN0ZXAgYW5kIGNoZWNrIGlmIHRoZXkgYXJlIHN0YWJpbGl6ZWRcbiAgICovXG4gIG1vdmVOb2RlcygpIHtcbiAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzO1xuICAgIGxldCBtYXhOb2RlVmVsb2NpdHkgPSAwO1xuICAgIGxldCBhdmVyYWdlTm9kZVZlbG9jaXR5ID0gMDtcblxuICAgIC8vIHRoZSB2ZWxvY2l0eSB0aHJlc2hvbGQgKGVuZXJneSBpbiB0aGUgc3lzdGVtKSBmb3IgdGhlIGFkYXB0aXZpdHkgdG9nZ2xlXG4gICAgY29uc3QgdmVsb2NpdHlBZGFwdGl2ZVRocmVzaG9sZCA9IDU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIGNvbnN0IG5vZGVWZWxvY2l0eSA9IHRoaXMuX3BlcmZvcm1TdGVwKG5vZGVJZCk7XG4gICAgICAvLyBzdGFiaWxpemVkIGlzIHRydWUgaWYgc3RhYmlsaXplZCBpcyB0cnVlIGFuZCB2ZWxvY2l0eSBpcyBzbWFsbGVyIHRoYW4gdm1pbiAtLT4gYWxsIG5vZGVzIG11c3QgYmUgc3RhYmlsaXplZFxuICAgICAgbWF4Tm9kZVZlbG9jaXR5ID0gTWF0aC5tYXgobWF4Tm9kZVZlbG9jaXR5LCBub2RlVmVsb2NpdHkpO1xuICAgICAgYXZlcmFnZU5vZGVWZWxvY2l0eSArPSBub2RlVmVsb2NpdHk7XG4gICAgfVxuXG4gICAgLy8gZXZhbHVhdGluZyB0aGUgc3RhYmlsaXplZCBhbmQgYWRhcHRpdmVUaW1lc3RlcEVuYWJsZWQgY29uZGl0aW9uc1xuICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcEVuYWJsZWQgPVxuICAgICAgYXZlcmFnZU5vZGVWZWxvY2l0eSAvIG5vZGVJbmRpY2VzLmxlbmd0aCA8IHZlbG9jaXR5QWRhcHRpdmVUaHJlc2hvbGQ7XG4gICAgdGhpcy5zdGFiaWxpemVkID0gbWF4Tm9kZVZlbG9jaXR5IDwgdGhpcy5vcHRpb25zLm1pblZlbG9jaXR5O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBuZXcgdmVsb2NpdHkgZm9yIGEgY29vcmRpbmF0ZSBkaXJlY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHYgIHZlbG9jaXR5IGZvciBjdXJyZW50IGNvb3JkaW5hdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGYgIHJlZ3VsYXIgZm9yY2UgZm9yIGN1cnJlbnQgY29vcmRpbmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbSAgbWFzcyBvZiBjdXJyZW50IG5vZGVcbiAgICogQHJldHVybnMge251bWJlcn0gbmV3IHZlbG9jaXR5IGZvciBjdXJyZW50IGNvb3JkaW5hdGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNhbGN1bGF0ZUNvbXBvbmVudFZlbG9jaXR5KHYsIGYsIG0pIHtcbiAgICBjb25zdCBkZiA9IHRoaXMubW9kZWxPcHRpb25zLmRhbXBpbmcgKiB2OyAvLyBkYW1waW5nIGZvcmNlXG4gICAgY29uc3QgYSA9IChmIC0gZGYpIC8gbTsgLy8gYWNjZWxlcmF0aW9uXG5cbiAgICB2ICs9IGEgKiB0aGlzLnRpbWVzdGVwO1xuXG4gICAgLy8gUHV0IGEgbGltaXQgb24gdGhlIHZlbG9jaXRpZXMgaWYgaXQgaXMgcmVhbGx5IGhpZ2hcbiAgICBjb25zdCBtYXhWID0gdGhpcy5vcHRpb25zLm1heFZlbG9jaXR5IHx8IDFlOTtcbiAgICBpZiAoTWF0aC5hYnModikgPiBtYXhWKSB7XG4gICAgICB2ID0gdiA+IDAgPyBtYXhWIDogLW1heFY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSB0aGUgYWN0dWFsIHN0ZXBcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge251bWJlcn0gdGhlIG5ldyB2ZWxvY2l0eSBvZiBnaXZlbiBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGVyZm9ybVN0ZXAobm9kZUlkKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgIGNvbnN0IGZvcmNlID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZUlkXTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMud2luZCkge1xuICAgICAgZm9yY2UueCArPSB0aGlzLm9wdGlvbnMud2luZC54O1xuICAgICAgZm9yY2UueSArPSB0aGlzLm9wdGlvbnMud2luZC55O1xuICAgIH1cblxuICAgIGNvbnN0IHZlbG9jaXR5ID0gdGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzW25vZGVJZF07XG5cbiAgICAvLyBzdG9yZSB0aGUgc3RhdGUgc28gd2UgY2FuIHJldmVydFxuICAgIHRoaXMucHJldmlvdXNTdGF0ZXNbbm9kZUlkXSA9IHtcbiAgICAgIHg6IG5vZGUueCxcbiAgICAgIHk6IG5vZGUueSxcbiAgICAgIHZ4OiB2ZWxvY2l0eS54LFxuICAgICAgdnk6IHZlbG9jaXR5LnksXG4gICAgfTtcblxuICAgIGlmIChub2RlLm9wdGlvbnMuZml4ZWQueCA9PT0gZmFsc2UpIHtcbiAgICAgIHZlbG9jaXR5LnggPSB0aGlzLmNhbGN1bGF0ZUNvbXBvbmVudFZlbG9jaXR5KFxuICAgICAgICB2ZWxvY2l0eS54LFxuICAgICAgICBmb3JjZS54LFxuICAgICAgICBub2RlLm9wdGlvbnMubWFzc1xuICAgICAgKTtcbiAgICAgIG5vZGUueCArPSB2ZWxvY2l0eS54ICogdGhpcy50aW1lc3RlcDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yY2UueCA9IDA7XG4gICAgICB2ZWxvY2l0eS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5vcHRpb25zLmZpeGVkLnkgPT09IGZhbHNlKSB7XG4gICAgICB2ZWxvY2l0eS55ID0gdGhpcy5jYWxjdWxhdGVDb21wb25lbnRWZWxvY2l0eShcbiAgICAgICAgdmVsb2NpdHkueSxcbiAgICAgICAgZm9yY2UueSxcbiAgICAgICAgbm9kZS5vcHRpb25zLm1hc3NcbiAgICAgICk7XG4gICAgICBub2RlLnkgKz0gdmVsb2NpdHkueSAqIHRoaXMudGltZXN0ZXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcmNlLnkgPSAwO1xuICAgICAgdmVsb2NpdHkueSA9IDA7XG4gICAgfVxuXG4gICAgY29uc3QgdG90YWxWZWxvY2l0eSA9IE1hdGguc3FydChcbiAgICAgIE1hdGgucG93KHZlbG9jaXR5LngsIDIpICsgTWF0aC5wb3codmVsb2NpdHkueSwgMilcbiAgICApO1xuICAgIHJldHVybiB0b3RhbFZlbG9jaXR5O1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gaW5pdGlhbGl6aW5nIGFuZCBzdGFiaWxpemluZywgd2UgY2FuIGZyZWV6ZSBub2RlcyB3aXRoIGEgcHJlZGVmaW5lZCBwb3NpdGlvbi5cbiAgICogVGhpcyBncmVhdGx5IHNwZWVkcyB1cCBzdGFiaWxpemF0aW9uIGJlY2F1c2Ugb25seSB0aGUgc3VwcG9ydG5vZGVzIGZvciB0aGUgc21vb3RoQ3VydmVzIGhhdmUgdG8gc2V0dGxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZyZWV6ZU5vZGVzKCkge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGZvciAoY29uc3QgaWQgaW4gbm9kZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZXMsIGlkKSkge1xuICAgICAgICBpZiAobm9kZXNbaWRdLnggJiYgbm9kZXNbaWRdLnkpIHtcbiAgICAgICAgICBjb25zdCBmaXhlZCA9IG5vZGVzW2lkXS5vcHRpb25zLmZpeGVkO1xuICAgICAgICAgIHRoaXMuZnJlZXplQ2FjaGVbaWRdID0geyB4OiBmaXhlZC54LCB5OiBmaXhlZC55IH07XG4gICAgICAgICAgZml4ZWQueCA9IHRydWU7XG4gICAgICAgICAgZml4ZWQueSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5mcmVlemVzIHRoZSBub2RlcyB0aGF0IGhhdmUgYmVlbiBmcm96ZW4gYnkgX2ZyZWV6ZURlZmluZWROb2Rlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXN0b3JlRnJvemVuTm9kZXMoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgZm9yIChjb25zdCBpZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlcywgaWQpKSB7XG4gICAgICAgIGlmICh0aGlzLmZyZWV6ZUNhY2hlW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbm9kZXNbaWRdLm9wdGlvbnMuZml4ZWQueCA9IHRoaXMuZnJlZXplQ2FjaGVbaWRdLng7XG4gICAgICAgICAgbm9kZXNbaWRdLm9wdGlvbnMuZml4ZWQueSA9IHRoaXMuZnJlZXplQ2FjaGVbaWRdLnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5mcmVlemVDYWNoZSA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSBzdGFibGUgcG9zaXRpb24gZm9yIGFsbCBub2Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2l0ZXJhdGlvbnM9dGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24uaXRlcmF0aW9uc11cbiAgICovXG4gIHN0YWJpbGl6ZShpdGVyYXRpb25zID0gdGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24uaXRlcmF0aW9ucykge1xuICAgIGlmICh0eXBlb2YgaXRlcmF0aW9ucyAhPT0gXCJudW1iZXJcIikge1xuICAgICAgaXRlcmF0aW9ucyA9IHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLml0ZXJhdGlvbnM7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIlRoZSBzdGFiaWxpemUgbWV0aG9kIG5lZWRzIGEgbnVtZXJpYyBhbW91bnQgb2YgaXRlcmF0aW9ucy4gU3dpdGNoaW5nIHRvIGRlZmF1bHQ6IFwiLFxuICAgICAgICBpdGVyYXRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGVuYWJsZSBhZGFwdGl2ZSB0aW1lc3RlcHNcbiAgICB0aGlzLmFkYXB0aXZlVGltZXN0ZXAgPSB0cnVlICYmIHRoaXMub3B0aW9ucy5hZGFwdGl2ZVRpbWVzdGVwO1xuXG4gICAgLy8gdGhpcyBzZXRzIHRoZSB3aWR0aCBvZiBhbGwgbm9kZXMgaW5pdGlhbGx5IHdoaWNoIGNvdWxkIGJlIHJlcXVpcmVkIGZvciB0aGUgYXZvaWRPdmVybGFwXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXNpemVOb2Rlc1wiKTtcblxuICAgIHRoaXMuc3RvcFNpbXVsYXRpb24oKTsgLy8gc3RvcCB0aGUgcmVuZGVyIGxvb3BcbiAgICB0aGlzLnN0YWJpbGl6ZWQgPSBmYWxzZTtcblxuICAgIC8vIGJsb2NrIHJlZHJhdyByZXF1ZXN0c1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfYmxvY2tSZWRyYXdcIik7XG4gICAgdGhpcy50YXJnZXRJdGVyYXRpb25zID0gaXRlcmF0aW9ucztcblxuICAgIC8vIHN0YXJ0IHRoZSBzdGFiaWxpemF0aW9uXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLm9ubHlEeW5hbWljRWRnZXMgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2ZyZWV6ZU5vZGVzKCk7XG4gICAgfVxuICAgIHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMgPSAwO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9zdGFiaWxpemF0aW9uQmF0Y2goKSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogSWYgbm90IGFscmVhZHkgc3RhYmlsaXppbmcsIHN0YXJ0IGl0IGFuZCBlbWl0IGEgc3RhcnQgZXZlbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHN0YWJpbGl6YXRpb24gc3RhcnRlZCB3aXRoIHRoaXMgY2FsbFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3N0YXJ0U3RhYmlsaXppbmcoKSB7XG4gICAgaWYgKHRoaXMuc3RhcnRlZFN0YWJpbGl6YXRpb24gPT09IHRydWUpIHJldHVybiBmYWxzZTtcblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFN0YWJpbGl6aW5nXCIpO1xuICAgIHRoaXMuc3RhcnRlZFN0YWJpbGl6YXRpb24gPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uZSBiYXRjaCBvZiBzdGFiaWxpemF0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RhYmlsaXphdGlvbkJhdGNoKCkge1xuICAgIGNvbnN0IHJ1bm5pbmcgPSAoKSA9PlxuICAgICAgdGhpcy5zdGFiaWxpemVkID09PSBmYWxzZSAmJlxuICAgICAgdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucyA8IHRoaXMudGFyZ2V0SXRlcmF0aW9ucztcblxuICAgIGNvbnN0IHNlbmRQcm9ncmVzcyA9ICgpID0+IHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFiaWxpemF0aW9uUHJvZ3Jlc3NcIiwge1xuICAgICAgICBpdGVyYXRpb25zOiB0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zLFxuICAgICAgICB0b3RhbDogdGhpcy50YXJnZXRJdGVyYXRpb25zLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLl9zdGFydFN0YWJpbGl6aW5nKCkpIHtcbiAgICAgIHNlbmRQcm9ncmVzcygpOyAvLyBFbnN1cmUgdGhhdCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc3RhcnQgZXZlbnQuXG4gICAgfVxuXG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICB3aGlsZSAocnVubmluZygpICYmIGNvdW50IDwgdGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24udXBkYXRlSW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMucGh5c2ljc1RpY2soKTtcbiAgICAgIGNvdW50Kys7XG4gICAgfVxuXG4gICAgc2VuZFByb2dyZXNzKCk7XG5cbiAgICBpZiAocnVubmluZygpKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMuX3N0YWJpbGl6YXRpb25CYXRjaC5iaW5kKHRoaXMpLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZmluYWxpemVTdGFiaWxpemF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdyYXAgdXAgdGhlIHN0YWJpbGl6YXRpb24sIGZpdCBhbmQgZW1pdCB0aGUgZXZlbnRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpbmFsaXplU3RhYmlsaXphdGlvbigpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2FsbG93UmVkcmF3XCIpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5maXQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJmaXRcIik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLm9ubHlEeW5hbWljRWRnZXMgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX3Jlc3RvcmVGcm96ZW5Ob2RlcygpO1xuICAgIH1cblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFiaWxpemF0aW9uSXRlcmF0aW9uc0RvbmVcIik7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuXG4gICAgaWYgKHRoaXMuc3RhYmlsaXplZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5fZW1pdFN0YWJpbGl6ZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydFNpbXVsYXRpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgfVxuXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERUJVR0dJTkcgQkVMT1cgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqIERlYnVnIGZ1bmN0aW9uIHRoYXQgZGlzcGxheSBhcnJvd3MgZm9yIHRoZSBmb3JjZXMgY3VycmVudGx5IGFjdGl2ZSBpbiB0aGUgbmV0d29yay5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiBkZWJ1Z2dpbmcgb25seS5cbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdGb3JjZXMoY3R4KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlc1tpXTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbaW5kZXhdO1xuICAgICAgY29uc3QgZm9yY2UgPSB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tpbmRleF07XG4gICAgICBjb25zdCBmYWN0b3IgPSAyMDtcbiAgICAgIGNvbnN0IGNvbG9yRmFjdG9yID0gMC4wMztcbiAgICAgIGNvbnN0IGZvcmNlU2l6ZSA9IE1hdGguc3FydChNYXRoLnBvdyhmb3JjZS54LCAyKSArIE1hdGgucG93KGZvcmNlLngsIDIpKTtcblxuICAgICAgY29uc3Qgc2l6ZSA9IE1hdGgubWluKE1hdGgubWF4KDUsIGZvcmNlU2l6ZSksIDE1KTtcbiAgICAgIGNvbnN0IGFycm93U2l6ZSA9IDMgKiBzaXplO1xuXG4gICAgICBjb25zdCBjb2xvciA9IEhTVlRvSGV4KFxuICAgICAgICAoMTgwIC0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgY29sb3JGYWN0b3IgKiBmb3JjZVNpemUpKSAqIDE4MCkgLyAzNjAsXG4gICAgICAgIDEsXG4gICAgICAgIDFcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHBvaW50ID0ge1xuICAgICAgICB4OiBub2RlLnggKyBmYWN0b3IgKiBmb3JjZS54LFxuICAgICAgICB5OiBub2RlLnkgKyBmYWN0b3IgKiBmb3JjZS55LFxuICAgICAgfTtcblxuICAgICAgY3R4LmxpbmVXaWR0aCA9IHNpemU7XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGN0eC5tb3ZlVG8obm9kZS54LCBub2RlLnkpO1xuICAgICAgY3R4LmxpbmVUbyhwb2ludC54LCBwb2ludC55KTtcbiAgICAgIGN0eC5zdHJva2UoKTtcblxuICAgICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKGZvcmNlLnksIGZvcmNlLngpO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuICAgICAgRW5kUG9pbnRzLmRyYXcoY3R4LCB7XG4gICAgICAgIHR5cGU6IFwiYXJyb3dcIixcbiAgICAgICAgcG9pbnQ6IHBvaW50LFxuICAgICAgICBhbmdsZTogYW5nbGUsXG4gICAgICAgIGxlbmd0aDogYXJyb3dTaXplLFxuICAgICAgfSk7XG4gICAgICBjdHguZmlsbCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQaHlzaWNzRW5naW5lO1xuIiwgIi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuIEluIHRoZSBicm93c2VyIHdlIHRoZXJlZm9yZVxuLy8gcmVxdWlyZSB0aGUgY3J5cHRvIEFQSSBhbmQgZG8gbm90IHN1cHBvcnQgYnVpbHQtaW4gZmFsbGJhY2sgdG8gbG93ZXIgcXVhbGl0eSByYW5kb20gbnVtYmVyXG4vLyBnZW5lcmF0b3JzIChsaWtlIE1hdGgucmFuZG9tKCkpLlxubGV0IGdldFJhbmRvbVZhbHVlcztcbmNvbnN0IHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcm5nKCkge1xuICAvLyBsYXp5IGxvYWQgc28gdGhhdCBlbnZpcm9ubWVudHMgdGhhdCBuZWVkIHRvIHBvbHlmaWxsIGhhdmUgYSBjaGFuY2UgdG8gZG8gc29cbiAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBnZXRSYW5kb21WYWx1ZXMgbmVlZHMgdG8gYmUgaW52b2tlZCBpbiBhIGNvbnRleHQgd2hlcmUgXCJ0aGlzXCIgaXMgYSBDcnlwdG8gaW1wbGVtZW50YXRpb24uXG4gICAgZ2V0UmFuZG9tVmFsdWVzID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKTtcblxuICAgIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59IiwgImltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuXG5jb25zdCBieXRlVG9IZXggPSBbXTtcblxuZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXgucHVzaCgoaSArIDB4MTAwKS50b1N0cmluZygxNikuc2xpY2UoMSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICAvLyBOb3RlOiBCZSBjYXJlZnVsIGVkaXRpbmcgdGhpcyBjb2RlISAgSXQncyBiZWVuIHR1bmVkIGZvciBwZXJmb3JtYW5jZVxuICAvLyBhbmQgd29ya3MgaW4gd2F5cyB5b3UgbWF5IG5vdCBleHBlY3QuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQvcHVsbC80MzRcbiAgcmV0dXJuIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIGNvbnN0IHV1aWQgPSB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQpOyAvLyBDb25zaXN0ZW5jeSBjaGVjayBmb3IgdmFsaWQgVVVJRC4gIElmIHRoaXMgdGhyb3dzLCBpdCdzIGxpa2VseSBkdWUgdG8gb25lXG4gIC8vIG9mIHRoZSBmb2xsb3dpbmc6XG4gIC8vIC0gT25lIG9yIG1vcmUgaW5wdXQgYXJyYXkgdmFsdWVzIGRvbid0IG1hcCB0byBhIGhleCBvY3RldCAobGVhZGluZyB0b1xuICAvLyBcInVuZGVmaW5lZFwiIGluIHRoZSB1dWlkKVxuICAvLyAtIEludmFsaWQgaW5wdXQgdmFsdWVzIGZvciB0aGUgUkZDIGB2ZXJzaW9uYCBvciBgdmFyaWFudGAgZmllbGRzXG5cbiAgaWYgKCF2YWxpZGF0ZSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaW5naWZ5OyIsICJjb25zdCByYW5kb21VVUlEID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLnJhbmRvbVVVSUQgJiYgY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pO1xuZXhwb3J0IGRlZmF1bHQge1xuICByYW5kb21VVUlEXG59OyIsICJpbXBvcnQgbmF0aXZlIGZyb20gJy4vbmF0aXZlLmpzJztcbmltcG9ydCBybmcgZnJvbSAnLi9ybmcuanMnO1xuaW1wb3J0IHsgdW5zYWZlU3RyaW5naWZ5IH0gZnJvbSAnLi9zdHJpbmdpZnkuanMnO1xuXG5mdW5jdGlvbiB2NChvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICBpZiAobmF0aXZlLnJhbmRvbVVVSUQgJiYgIWJ1ZiAmJiAhb3B0aW9ucykge1xuICAgIHJldHVybiBuYXRpdmUucmFuZG9tVVVJRCgpO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgcm5nKSgpOyAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXG5cbiAgcm5kc1s2XSA9IHJuZHNbNl0gJiAweDBmIHwgMHg0MDtcbiAgcm5kc1s4XSA9IHJuZHNbOF0gJiAweDNmIHwgMHg4MDsgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG5cbiAgaWYgKGJ1Zikge1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICBidWZbb2Zmc2V0ICsgaV0gPSBybmRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBidWY7XG4gIH1cblxuICByZXR1cm4gdW5zYWZlU3RyaW5naWZ5KHJuZHMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB2NDsiLCAiaW1wb3J0IHsgZGVlcEV4dGVuZCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBVdGlsaXR5IENsYXNzXG4gKi9cbmNsYXNzIE5ldHdvcmtVdGlsIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogRmluZCB0aGUgY2VudGVyIHBvc2l0aW9uIG9mIHRoZSBuZXR3b3JrIGNvbnNpZGVyaW5nIHRoZSBib3VuZGluZyBib3hlc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gYWxsTm9kZXNcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IFtzcGVjaWZpY05vZGVzPVtdXVxuICAgKiBAcmV0dXJucyB7e21pblg6IG51bWJlciwgbWF4WDogbnVtYmVyLCBtaW5ZOiBudW1iZXIsIG1heFk6IG51bWJlcn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRSYW5nZShhbGxOb2Rlcywgc3BlY2lmaWNOb2RlcyA9IFtdKSB7XG4gICAgbGV0IG1pblkgPSAxZTksXG4gICAgICBtYXhZID0gLTFlOSxcbiAgICAgIG1pblggPSAxZTksXG4gICAgICBtYXhYID0gLTFlOSxcbiAgICAgIG5vZGU7XG4gICAgaWYgKHNwZWNpZmljTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGVjaWZpY05vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5vZGUgPSBhbGxOb2Rlc1tzcGVjaWZpY05vZGVzW2ldXTtcbiAgICAgICAgaWYgKG1pblggPiBub2RlLnNoYXBlLmJvdW5kaW5nQm94LmxlZnQpIHtcbiAgICAgICAgICBtaW5YID0gbm9kZS5zaGFwZS5ib3VuZGluZ0JveC5sZWZ0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhYIDwgbm9kZS5zaGFwZS5ib3VuZGluZ0JveC5yaWdodCkge1xuICAgICAgICAgIG1heFggPSBub2RlLnNoYXBlLmJvdW5kaW5nQm94LnJpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW5ZID4gbm9kZS5zaGFwZS5ib3VuZGluZ0JveC50b3ApIHtcbiAgICAgICAgICBtaW5ZID0gbm9kZS5zaGFwZS5ib3VuZGluZ0JveC50b3A7XG4gICAgICAgIH0gLy8gdG9wIGlzIG5lZ2F0aXZlLCBib3R0b20gaXMgcG9zaXRpdmVcbiAgICAgICAgaWYgKG1heFkgPCBub2RlLnNoYXBlLmJvdW5kaW5nQm94LmJvdHRvbSkge1xuICAgICAgICAgIG1heFkgPSBub2RlLnNoYXBlLmJvdW5kaW5nQm94LmJvdHRvbTtcbiAgICAgICAgfSAvLyB0b3AgaXMgbmVnYXRpdmUsIGJvdHRvbSBpcyBwb3NpdGl2ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtaW5YID09PSAxZTkgJiYgbWF4WCA9PT0gLTFlOSAmJiBtaW5ZID09PSAxZTkgJiYgbWF4WSA9PT0gLTFlOSkge1xuICAgICAgKG1pblkgPSAwKSwgKG1heFkgPSAwKSwgKG1pblggPSAwKSwgKG1heFggPSAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbWluWDogbWluWCwgbWF4WDogbWF4WCwgbWluWTogbWluWSwgbWF4WTogbWF4WSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGNlbnRlciBwb3NpdGlvbiBvZiB0aGUgbmV0d29ya1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gYWxsTm9kZXNcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IFtzcGVjaWZpY05vZGVzPVtdXVxuICAgKiBAcmV0dXJucyB7e21pblg6IG51bWJlciwgbWF4WDogbnVtYmVyLCBtaW5ZOiBudW1iZXIsIG1heFk6IG51bWJlcn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRSYW5nZUNvcmUoYWxsTm9kZXMsIHNwZWNpZmljTm9kZXMgPSBbXSkge1xuICAgIGxldCBtaW5ZID0gMWU5LFxuICAgICAgbWF4WSA9IC0xZTksXG4gICAgICBtaW5YID0gMWU5LFxuICAgICAgbWF4WCA9IC0xZTksXG4gICAgICBub2RlO1xuICAgIGlmIChzcGVjaWZpY05vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BlY2lmaWNOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBub2RlID0gYWxsTm9kZXNbc3BlY2lmaWNOb2Rlc1tpXV07XG4gICAgICAgIGlmIChtaW5YID4gbm9kZS54KSB7XG4gICAgICAgICAgbWluWCA9IG5vZGUueDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4WCA8IG5vZGUueCkge1xuICAgICAgICAgIG1heFggPSBub2RlLng7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pblkgPiBub2RlLnkpIHtcbiAgICAgICAgICBtaW5ZID0gbm9kZS55O1xuICAgICAgICB9IC8vIHRvcCBpcyBuZWdhdGl2ZSwgYm90dG9tIGlzIHBvc2l0aXZlXG4gICAgICAgIGlmIChtYXhZIDwgbm9kZS55KSB7XG4gICAgICAgICAgbWF4WSA9IG5vZGUueTtcbiAgICAgICAgfSAvLyB0b3AgaXMgbmVnYXRpdmUsIGJvdHRvbSBpcyBwb3NpdGl2ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtaW5YID09PSAxZTkgJiYgbWF4WCA9PT0gLTFlOSAmJiBtaW5ZID09PSAxZTkgJiYgbWF4WSA9PT0gLTFlOSkge1xuICAgICAgKG1pblkgPSAwKSwgKG1heFkgPSAwKSwgKG1pblggPSAwKSwgKG1heFggPSAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbWluWDogbWluWCwgbWF4WDogbWF4WCwgbWluWTogbWluWSwgbWF4WTogbWF4WSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByYW5nZSA9IHttaW5YOiBtaW5YLCBtYXhYOiBtYXhYLCBtaW5ZOiBtaW5ZLCBtYXhZOiBtYXhZfTtcbiAgICogQHJldHVybnMge3t4OiBudW1iZXIsIHk6IG51bWJlcn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBmaW5kQ2VudGVyKHJhbmdlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IDAuNSAqIChyYW5nZS5tYXhYICsgcmFuZ2UubWluWCksXG4gICAgICB5OiAwLjUgKiAocmFuZ2UubWF4WSArIHJhbmdlLm1pblkpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyByZXR1cm5zIGEgY2xvbmUgb2YgdGhlIG9wdGlvbnMgb3Igb3B0aW9ucyBvZiB0aGUgZWRnZSBvciBub2RlIHRvIGJlIHVzZWQgZm9yIGNvbnN0cnVjdGlvbiBvZiBuZXcgZWRnZXMgb3IgY2hlY2sgZnVuY3Rpb25zIGZvciBuZXcgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkl0ZW19IGl0ZW1cbiAgICogQHBhcmFtIHsnbm9kZSd8dW5kZWZpbmVkfSB0eXBlXG4gICAqIEByZXR1cm5zIHt7fX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNsb25lT3B0aW9ucyhpdGVtLCB0eXBlKSB7XG4gICAgY29uc3QgY2xvbmVkT3B0aW9ucyA9IHt9O1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJub2RlXCIpIHtcbiAgICAgIGRlZXBFeHRlbmQoY2xvbmVkT3B0aW9ucywgaXRlbS5vcHRpb25zLCB0cnVlKTtcbiAgICAgIGNsb25lZE9wdGlvbnMueCA9IGl0ZW0ueDtcbiAgICAgIGNsb25lZE9wdGlvbnMueSA9IGl0ZW0ueTtcbiAgICAgIGNsb25lZE9wdGlvbnMuYW1vdW50T2ZDb25uZWN0aW9ucyA9IGl0ZW0uZWRnZXMubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWVwRXh0ZW5kKGNsb25lZE9wdGlvbnMsIGl0ZW0ub3B0aW9ucywgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZWRPcHRpb25zO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5ldHdvcmtVdGlsO1xuIiwgImltcG9ydCB7IGZvckVhY2ggfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgTm9kZSBmcm9tIFwiLi4vTm9kZVwiO1xuXG4vKipcbiAqIEEgQ2x1c3RlciBpcyBhIHNwZWNpYWwgTm9kZSB0aGF0IGFsbG93cyBhIGdyb3VwIG9mIE5vZGVzIHBvc2l0aW9uZWQgY2xvc2VseSB0b2dldGhlclxuICogdG8gYmUgcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgQ2x1c3RlciBOb2RlLlxuICpcbiAqIEBhdWdtZW50cyBOb2RlXG4gKi9cbmNsYXNzIENsdXN0ZXIgZXh0ZW5kcyBOb2RlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7QXJyYXkuPEhUTUxJbWFnZUVsZW1lbnQ+fWltYWdlbGlzdFxuICAgKiBAcGFyYW0ge0FycmF5fSBncm91cGxpc3RcbiAgICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbE9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRPcHRpb25zICAgICBHbG9iYWwgZGVmYXVsdCBvcHRpb25zIGZvciBub2Rlc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9ucyxcbiAgICBib2R5LFxuICAgIGltYWdlbGlzdCxcbiAgICBncm91cGxpc3QsXG4gICAgZ2xvYmFsT3B0aW9ucyxcbiAgICBkZWZhdWx0T3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBpbWFnZWxpc3QsIGdyb3VwbGlzdCwgZ2xvYmFsT3B0aW9ucywgZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5pc0NsdXN0ZXIgPSB0cnVlO1xuICAgIHRoaXMuY29udGFpbmVkTm9kZXMgPSB7fTtcbiAgICB0aGlzLmNvbnRhaW5lZEVkZ2VzID0ge307XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmZXIgY2hpbGQgY2x1c3RlciBkYXRhIHRvIGN1cnJlbnQgYW5kIGRpc2Nvbm5lY3QgdGhlIGNoaWxkIGNsdXN0ZXIuXG4gICAqXG4gICAqIFBsZWFzZSBjb25zdWx0IHRoZSBoZWFkZXIgY29tbWVudCBpbiAnQ2x1c3RlcmluZy5qcycgZm9yIHRoZSBmaWVsZHMgc2V0IGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gY2hpbGRDbHVzdGVySWQgIGlkIG9mIGNoaWxkIGNsdXN0ZXIgdG8gb3BlblxuICAgKi9cbiAgX29wZW5DaGlsZENsdXN0ZXIoY2hpbGRDbHVzdGVySWQpIHtcbiAgICBjb25zdCBjaGlsZENsdXN0ZXIgPSB0aGlzLmJvZHkubm9kZXNbY2hpbGRDbHVzdGVySWRdO1xuICAgIGlmICh0aGlzLmNvbnRhaW5lZE5vZGVzW2NoaWxkQ2x1c3RlcklkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwibm9kZSB3aXRoIGlkOiBcIiArIGNoaWxkQ2x1c3RlcklkICsgXCIgbm90IGluIGN1cnJlbnQgY2x1c3RlclwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWNoaWxkQ2x1c3Rlci5pc0NsdXN0ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vZGUgd2l0aCBpZDogXCIgKyBjaGlsZENsdXN0ZXJJZCArIFwiIGlzIG5vdCBhIGNsdXN0ZXJcIik7XG4gICAgfVxuXG4gICAgLy8gRGlzY29ubmVjdCBjaGlsZCBjbHVzdGVyIGZyb20gY3VycmVudCBjbHVzdGVyXG4gICAgZGVsZXRlIHRoaXMuY29udGFpbmVkTm9kZXNbY2hpbGRDbHVzdGVySWRdO1xuICAgIGZvckVhY2goY2hpbGRDbHVzdGVyLmVkZ2VzLCAoZWRnZSkgPT4ge1xuICAgICAgZGVsZXRlIHRoaXMuY29udGFpbmVkRWRnZXNbZWRnZS5pZF07XG4gICAgfSk7XG5cbiAgICAvLyBUcmFuc2ZlciBub2RlcyBhbmQgZWRnZXNcbiAgICBmb3JFYWNoKGNoaWxkQ2x1c3Rlci5jb250YWluZWROb2RlcywgKG5vZGUsIG5vZGVJZCkgPT4ge1xuICAgICAgdGhpcy5jb250YWluZWROb2Rlc1tub2RlSWRdID0gbm9kZTtcbiAgICB9KTtcbiAgICBjaGlsZENsdXN0ZXIuY29udGFpbmVkTm9kZXMgPSB7fTtcblxuICAgIGZvckVhY2goY2hpbGRDbHVzdGVyLmNvbnRhaW5lZEVkZ2VzLCAoZWRnZSwgZWRnZUlkKSA9PiB7XG4gICAgICB0aGlzLmNvbnRhaW5lZEVkZ2VzW2VkZ2VJZF0gPSBlZGdlO1xuICAgIH0pO1xuICAgIGNoaWxkQ2x1c3Rlci5jb250YWluZWRFZGdlcyA9IHt9O1xuXG4gICAgLy8gVHJhbnNmZXIgZWRnZXMgd2l0aGluIGNsdXN0ZXIgZWRnZXMgd2hpY2ggYXJlIGNsdXN0ZXJlZFxuICAgIGZvckVhY2goY2hpbGRDbHVzdGVyLmVkZ2VzLCAoY2x1c3RlckVkZ2UpID0+IHtcbiAgICAgIGZvckVhY2godGhpcy5lZGdlcywgKHBhcmVudENsdXN0ZXJFZGdlKSA9PiB7XG4gICAgICAgIC8vIEFzc3VtcHRpb246IGEgY2x1c3RlcmVkIGVkZ2UgY2FuIG9ubHkgYmUgcHJlc2VudCBpbiBhIHNpbmdsZSBjbHVzdGVyaW5nIGVkZ2VcbiAgICAgICAgLy8gTm90IHRlc3RlZCBoZXJlXG4gICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50Q2x1c3RlckVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMuaW5kZXhPZihcbiAgICAgICAgICBjbHVzdGVyRWRnZS5pZFxuICAgICAgICApO1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICAgICAgZm9yRWFjaChjbHVzdGVyRWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcywgKHNyY0lkKSA9PiB7XG4gICAgICAgICAgcGFyZW50Q2x1c3RlckVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMucHVzaChzcmNJZCk7XG5cbiAgICAgICAgICAvLyBNYWludGFpbiBjb3JyZWN0IGJvb2trZWVwaW5nIGZvciB0cmFuc2ZlcnJlZCBlZGdlXG4gICAgICAgICAgdGhpcy5ib2R5LmVkZ2VzW3NyY0lkXS5lZGdlUmVwbGFjZWRCeUlkID0gcGFyZW50Q2x1c3RlckVkZ2UuaWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlbW92ZSBjbHVzdGVyIGVkZ2UgZnJvbSBwYXJlbnQgY2x1c3RlciBlZGdlXG4gICAgICAgIHBhcmVudENsdXN0ZXJFZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjaGlsZENsdXN0ZXIuZWRnZXMgPSBbXTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDbHVzdGVyO1xuIiwgIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4jIFRPRE9cblxuLSBgZWRnZVJlcGxhY2VkQnlJZGAgbm90IGNsZWFuZWQgdXAgeWV0IG9uIGNsdXN0ZXIgZWRnZSByZW1vdmFsXG4tIGFsbG93U2luZ2xlTm9kZUNsdXN0ZXIgY291bGQgYmUgYSBnbG9iYWwgb3B0aW9uIGFzIHdlbGw7IGN1cnJlbnRseSBuZWVkcyB0byBhbHdheXNcbiAgYmUgcGFzc2VkIHRvIGNsdXN0ZXJpbmcgbWV0aG9kc1xuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiMgU3RhdGUgTW9kZWwgZm9yIENsdXN0ZXJpbmdcblxuVGhlIHRvdGFsIHN0YXRlIGZvciBjbHVzdGVyaW5nIGlzIG5vbi10cml2aWFsLiBJdCBpcyB1c2VmdWwgdG8gaGF2ZSBhIG1vZGVsXG5hdmFpbGFibGUgYXMgdG8gaG93IGl0IHdvcmtzLiBUaGUgZm9sbG93aW5nIGRvY3VtZW50cyB0aGUgcmVsZXZhbnQgc3RhdGUgaXRlbXMuXG5cblxuIyMgTmV0d29yayBTdGF0ZVxuXG5UaGUgZm9sbG93aW5nIGBuZXR3b3JrYC1tZW1iZXJzIGFyZSByZWxldmFudCB0byBjbHVzdGVyaW5nOlxuXG4tIGBib2R5Lm5vZGVzYCAgICAgICAtIGFsbCBub2RlcyBhY3RpdmVseSBwYXJ0aWNpcGF0aW5nIGluIHRoZSBuZXR3b3JrXG4tIGBib2R5LmVkZ2VzYCAgICAgICAtIHNhbWUgZm9yIGVkZ2VzXG4tIGBib2R5Lm5vZGVJbmRpY2VzYCAtIGlkJ3Mgb2Ygbm9kZXMgdGhhdCBhcmUgdmlzaWJsZSBhdCBhIGdpdmVuIG1vbWVudFxuLSBgYm9keS5lZGdlSW5kaWNlc2AgLSBzYW1lIGZvciBlZGdlc1xuXG5UaGlzIGluY2x1ZGVzOlxuXG4tIGhlbHBlciBub2RlcyBmb3IgZHJhZ2dpbmcgaW4gYG1hbmlwdWxhdGlvbmBcbi0gaGVscGVyIG5vZGVzIGZvciBlZGdlIHR5cGUgYGR5bmFtaWNgXG4tIGNsdXN0ZXIgbm9kZXMgYW5kIGVkZ2VzXG4tIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gdGhpcy5cblxuQSBub2RlL2VkZ2UgbWF5IGJlIG1pc3NpbmcgaW4gdGhlIGBJbmRpY2VzYCBtZW1iZXIgaWY6XG5cbi0gaXQgaXMgYSBoZWxwZXIgbm9kZVxuLSB0aGUgbm9kZSBvciBlZGdlIHN0YXRlIGhhcyBvcHRpb24gYGhpZGRlbmAgc2V0XG4tIEl0IGlzIG5vdCB2aXNpYmxlIGR1ZSB0byBjbHVzdGVyaW5nXG5cblxuIyMgQ2x1c3RlcmluZyBTdGF0ZVxuXG5Gb3IgdGhlIGhhc2hlcywgdGhlIGlkJ3Mgb2YgdGhlIG5vZGVzL2VkZ2VzIGFyZSB1c2VkIGFzIGtleS5cblxuTWVtYmVyIGBuZXR3b3JrLmNsdXN0ZXJpbmdgIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgaXRlbXM6XG5cbi0gYGNsdXN0ZXJlZE5vZGVzYCAtIGhhc2ggd2l0aCB2YWx1ZXM6IHsgY2x1c3RlcklkOiA8aWQgb2YgY2x1c3Rlcj4sIG5vZGU6IDxub2RlIGluc3RhbmNlPn1cbi0gYGNsdXN0ZXJlZEVkZ2VzYCAtIGhhc2ggd2l0aCB2YWx1ZXM6IHJlc3RvcmUgaW5mb3JtYXRpb24gZm9yIGdpdmVuIGVkZ2VcblxuXG5EdWUgdG8gbmVzdGluZyBvZiBjbHVzdGVycywgdGhlc2UgbWVtYmVycyBjYW4gY29udGFpbiBjbHVzdGVyIG5vZGVzIGFuZCBlZGdlcyBhcyB3ZWxsLlxuXG5UaGUgaW1wb3J0YW50IHRoaW5nIHRvIG5vdGUgaGVyZSwgaXMgdGhhdCB0aGUgY2x1c3RlcmVkIG5vZGVzIGFuZCBlZGdlcyBhbHNvXG5hcHBlYXIgaW4gdGhlIG1lbWJlcnMgb2YgdGhlIGNsdXN0ZXIgbm9kZXMuIEZvciBkYXRhIHVwZGF0ZSwgaXQgaXMgdGhlcmVmb3JlXG5pbXBvcnRhbnQgdG8gc2NhbiB0aGVzZSBsaXN0cyBhcyB3ZWxsIGFzIHRoZSBjbHVzdGVyIG5vZGVzLlxuXG5cbiMjIyBDbHVzdGVyIE5vZGVcblxuQSBjbHVzdGVyIG5vZGUgaGFzIHRoZSBmb2xsb3dpbmcgZXh0cmEgZmllbGRzOlxuXG4tIGBpc0NsdXN0ZXIgOiB0cnVlYCAtIGluZGljYXRpb24gdGhhdCB0aGlzIGlzIGEgY2x1c3RlciBub2RlXG4tIGBjb250YWluZWROb2Rlc2AgICAtIGhhc2ggb2Ygbm9kZXMgY29udGFpbmVkIGluIHRoaXMgY2x1c3RlclxuLSBgY29udGFpbmVkRWRnZXNgICAgLSBzYW1lIGZvciBlZGdlc1xuLSBgZWRnZXNgICAgICAgICAgICAgLSBhcnJheSBvZiBjbHVzdGVyIGVkZ2VzIGZvciB0aGlzIG5vZGVcblxuXG4qKk5PVEU6KipcblxuLSBgY29udGFpbmVkRWRnZXNgIGNhbiBhbHNvIGNvbnRhaW4gZWRnZXMgd2hpY2ggYXJlIG5vdCBjbHVzdGVyZWQ7IGUuZy4gYW4gZWRnZVxuICAgY29ubmVjdGluZyB0d28gbm9kZXMgaW4gdGhlIHNhbWUgY2x1c3Rlci5cblxuXG4jIyMgQ2x1c3RlciBFZGdlXG5cblRoZXNlIGFyZSB0aGUgaXRlbXMgaW4gdGhlIGBlZGdlc2AgbWVtYmVyIG9mIGEgY2x1c3RlcmVkIG5vZGUuIFRoZXkgaGF2ZSB0aGVcbmZvbGxvd2luZyByZWxldmFudCBtZW1iZXJzOlxuXG4tICdjbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkc2AgLSBhcnJheSBvZiBpZCdzIG9mIGVkZ2VzIHJlcGxhY2VkIGJ5IHRoaXMgZWRnZVxuXG5Ob3RlIHRoYXQgaXQncyBwb3NzaWJsZSB0byBuZXN0IGNsdXN0ZXJzLCBzbyB0aGF0IGBjbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkc2BcbmNhbiBjb250YWluIGVkZ2UgaWQncyBvZiBvdGhlciBjbHVzdGVycy5cblxuXG4jIyMgQ2x1c3RlcmVkIEVkZ2VcblxuVGhpcyBpcyBhbnkgZWRnZSBjb250YWluZWQgYnkgYSBjbHVzdGVyIGVkZ2UuIEl0IGdldHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsXG5tZW1iZXI6XG5cbi0gYGVkZ2VSZXBsYWNlZEJ5SWRgIC0gaWQgb2YgdGhlIGNsdXN0ZXIgZWRnZSBpbiB3aGljaCBjdXJyZW50IGVkZ2UgaXMgY2x1c3RlcmVkXG5cblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5pbXBvcnQgeyBkZWVwRXh0ZW5kLCBmb3JFYWNoIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgdjQgYXMgcmFuZG9tVVVJRCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgTmV0d29ya1V0aWwgZnJvbSBcIi4uL05ldHdvcmtVdGlsXCI7XG5pbXBvcnQgQ2x1c3RlciBmcm9tIFwiLi9jb21wb25lbnRzL25vZGVzL0NsdXN0ZXJcIjtcbmltcG9ydCBFZGdlIGZyb20gXCIuL2NvbXBvbmVudHMvRWRnZVwiOyAvLyBPbmx5IG5lZWRlZCBmb3IgY2hlY2sgb24gdHlwZSFcbmltcG9ydCBOb2RlIGZyb20gXCIuL2NvbXBvbmVudHMvTm9kZVwiOyAvLyBPbmx5IG5lZWRlZCBmb3IgY2hlY2sgb24gdHlwZSFcblxuLyoqXG4gKiBUaGUgY2x1c3RlcmluZyBlbmdpbmVcbiAqL1xuY2xhc3MgQ2x1c3RlckVuZ2luZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5jbHVzdGVyZWROb2RlcyA9IHt9OyAvLyBrZXk6IG5vZGUgaWQsIHZhbHVlOiB7IGNsdXN0ZXJJZDogPGlkIG9mIGNsdXN0ZXI+LCBub2RlOiA8bm9kZSBpbnN0YW5jZT59XG4gICAgdGhpcy5jbHVzdGVyZWRFZGdlcyA9IHt9OyAvLyBrZXk6IGVkZ2UgaWQsIHZhbHVlOiByZXN0b3JlIGluZm9ybWF0aW9uIGZvciBnaXZlbiBlZGdlXG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge307XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfcmVzZXREYXRhXCIsICgpID0+IHtcbiAgICAgIHRoaXMuY2x1c3RlcmVkTm9kZXMgPSB7fTtcbiAgICAgIHRoaXMuY2x1c3RlcmVkRWRnZXMgPSB7fTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaHVic2l6ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgY2x1c3RlckJ5SHVic2l6ZShodWJzaXplLCBvcHRpb25zKSB7XG4gICAgaWYgKGh1YnNpemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaHVic2l6ZSA9IHRoaXMuX2dldEh1YlNpemUoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBodWJzaXplID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBvcHRpb25zID0gdGhpcy5fY2hlY2tPcHRpb25zKGh1YnNpemUpO1xuICAgICAgaHVic2l6ZSA9IHRoaXMuX2dldEh1YlNpemUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBub2Rlc1RvQ2x1c3RlciA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV07XG4gICAgICBpZiAobm9kZS5lZGdlcy5sZW5ndGggPj0gaHVic2l6ZSkge1xuICAgICAgICBub2Rlc1RvQ2x1c3Rlci5wdXNoKG5vZGUuaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNUb0NsdXN0ZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2x1c3RlckJ5Q29ubmVjdGlvbihub2Rlc1RvQ2x1c3RlcltpXSwgb3B0aW9ucywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBsb29wIG92ZXIgYWxsIG5vZGVzLCBjaGVjayBpZiB0aGV5IGFkaGVyZSB0byB0aGUgY29uZGl0aW9uIGFuZCBjbHVzdGVyIGlmIG5lZWRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVmcmVzaERhdGE9dHJ1ZV1cbiAgICovXG4gIGNsdXN0ZXIob3B0aW9ucyA9IHt9LCByZWZyZXNoRGF0YSA9IHRydWUpIHtcbiAgICBpZiAob3B0aW9ucy5qb2luQ29uZGl0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgY2FsbCBjbHVzdGVyQnlOb2RlRGF0YSB3aXRob3V0IGEgam9pbkNvbmRpdGlvbiBmdW5jdGlvbiBpbiB0aGUgb3B0aW9ucy5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgb3B0aW9ucyBvYmplY3QgaXMgZmluZSwgYXBwZW5kIGlmIG5lZWRlZFxuICAgIG9wdGlvbnMgPSB0aGlzLl9jaGVja09wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBjb25zdCBjaGlsZE5vZGVzT2JqID0ge307XG4gICAgY29uc3QgY2hpbGRFZGdlc09iaiA9IHt9O1xuXG4gICAgLy8gY29sbGVjdCB0aGUgbm9kZXMgdGhhdCB3aWxsIGJlIGluIHRoZSBjbHVzdGVyXG4gICAgZm9yRWFjaCh0aGlzLmJvZHkubm9kZXMsIChub2RlLCBub2RlSWQpID0+IHtcbiAgICAgIGlmIChub2RlLm9wdGlvbnMgJiYgb3B0aW9ucy5qb2luQ29uZGl0aW9uKG5vZGUub3B0aW9ucykgPT09IHRydWUpIHtcbiAgICAgICAgY2hpbGROb2Rlc09ialtub2RlSWRdID0gbm9kZTtcblxuICAgICAgICAvLyBjb2xsZWN0IHRoZSBlZGdlcyB0aGF0IHdpbGwgYmUgaW4gdGhlIGNsdXN0ZXJcbiAgICAgICAgZm9yRWFjaChub2RlLmVkZ2VzLCAoZWRnZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNoaWxkRWRnZXNPYmpbZWRnZS5pZF0gPSBlZGdlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9jbHVzdGVyKGNoaWxkTm9kZXNPYmosIGNoaWxkRWRnZXNPYmosIG9wdGlvbnMsIHJlZnJlc2hEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbHVzdGVyIGFsbCBub2RlcyBpbiB0aGUgbmV0d29yayB0aGF0IGhhdmUgb25seSBYIGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlZGdlQ291bnRcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVmcmVzaERhdGE9dHJ1ZV1cbiAgICovXG4gIGNsdXN0ZXJCeUVkZ2VDb3VudChlZGdlQ291bnQsIG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIG9wdGlvbnMgPSB0aGlzLl9jaGVja09wdGlvbnMob3B0aW9ucyk7XG4gICAgY29uc3QgY2x1c3RlcnMgPSBbXTtcbiAgICBjb25zdCB1c2VkTm9kZXMgPSB7fTtcbiAgICBsZXQgZWRnZSwgZWRnZXMsIHJlbGV2YW50RWRnZUNvdW50O1xuICAgIC8vIGNvbGxlY3QgdGhlIG5vZGVzIHRoYXQgd2lsbCBiZSBpbiB0aGUgY2x1c3RlclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGlsZE5vZGVzT2JqID0ge307XG4gICAgICBjb25zdCBjaGlsZEVkZ2VzT2JqID0ge307XG4gICAgICBjb25zdCBub2RlSWQgPSB0aGlzLmJvZHkubm9kZUluZGljZXNbaV07XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG5cbiAgICAgIC8vIGlmIHRoaXMgbm9kZSBpcyBhbHJlYWR5IHVzZWQgaW4gYW5vdGhlciBjbHVzdGVyIHRoaXMgc2Vzc2lvbiwgd2UgZG8gbm90IGhhdmUgdG8gcmUtZXZhbHVhdGUgaXQuXG4gICAgICBpZiAodXNlZE5vZGVzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZWxldmFudEVkZ2VDb3VudCA9IDA7XG4gICAgICAgIGVkZ2VzID0gW107XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbm9kZS5lZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGVkZ2UgPSBub2RlLmVkZ2VzW2pdO1xuICAgICAgICAgIGlmICh0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChlZGdlLnRvSWQgIT09IGVkZ2UuZnJvbUlkKSB7XG4gICAgICAgICAgICAgIHJlbGV2YW50RWRnZUNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMgbm9kZSBxdWFsaWZpZXMsIHdlIGNvbGxlY3QgaXRzIG5laWdoYm91cnMgdG8gc3RhcnQgdGhlIGNsdXN0ZXJpbmcgcHJvY2Vzcy5cbiAgICAgICAgaWYgKHJlbGV2YW50RWRnZUNvdW50ID09PSBlZGdlQ291bnQpIHtcbiAgICAgICAgICBjb25zdCBjaGVja0pvaW5Db25kaXRpb24gPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBvcHRpb25zLmpvaW5Db25kaXRpb24gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBvcHRpb25zLmpvaW5Db25kaXRpb24gPT09IG51bGxcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2xvbmVkT3B0aW9ucyA9IE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhub2RlKTtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmpvaW5Db25kaXRpb24oY2xvbmVkT3B0aW9ucyk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGxldCBnYXRoZXJpbmdTdWNjZXNzZnVsID0gdHJ1ZTtcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVkZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBlZGdlID0gZWRnZXNbal07XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVJZCA9IHRoaXMuX2dldENvbm5lY3RlZElkKGVkZ2UsIG5vZGVJZCk7XG4gICAgICAgICAgICAvLyBhZGQgdGhlIG5vZGVzIHRvIHRoZSBsaXN0IGJ5IHRoZSBqb2luIGNvbmRpdGlvbi5cbiAgICAgICAgICAgIGlmIChjaGVja0pvaW5Db25kaXRpb24obm9kZSkpIHtcbiAgICAgICAgICAgICAgY2hpbGRFZGdlc09ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZXNPYmpbbm9kZUlkXSA9IG5vZGU7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZXNPYmpbY2hpbGROb2RlSWRdID0gdGhpcy5ib2R5Lm5vZGVzW2NoaWxkTm9kZUlkXTtcbiAgICAgICAgICAgICAgdXNlZE5vZGVzW25vZGVJZF0gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gdGhpcyBub2RlIGRvZXMgbm90IHF1YWxpZnkgYWZ0ZXIgYWxsLlxuICAgICAgICAgICAgICBnYXRoZXJpbmdTdWNjZXNzZnVsID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGFkZCB0byB0aGUgY2x1c3RlciBxdWV1ZVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNoaWxkTm9kZXNPYmopLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNoaWxkRWRnZXNPYmopLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGdhdGhlcmluZ1N1Y2Nlc3NmdWwgPT09IHRydWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU2VhcmNoIGZvciBjbHVzdGVyIGRhdGEgdGhhdCBjb250YWlucyBhbnkgb2YgdGhlIG5vZGUgaWQnc1xuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIG5vIGpvaW5Db25kaXRpb24sIG90aGVyd2lzZSByZXR1cm4gdmFsdWUgb2Ygam9pbkNvbmRpdGlvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBmaW5kQ2x1c3RlckRhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgY2x1c3RlcnMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgICAgICAvLyBTZWFyY2ggZm9yIGEgY2x1c3RlciBjb250YWluaW5nIGFueSBvZiB0aGUgbm9kZSBpZCdzXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtIGluIGNoaWxkTm9kZXNPYmopIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjbHVzdGVyc1tuXS5ub2Rlc1ttXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHVzdGVyc1tuXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gSWYgYW55IG9mIHRoZSBmb3VuZCBub2RlcyBpcyBwYXJ0IG9mIGEgY2x1c3RlciBmb3VuZCBpbiB0aGlzIG1ldGhvZCxcbiAgICAgICAgICAgIC8vIGFkZCB0aGUgY3VycmVudCB2YWx1ZXMgdG8gdGhhdCBjbHVzdGVyXG4gICAgICAgICAgICBjb25zdCBmb3VuZENsdXN0ZXIgPSBmaW5kQ2x1c3RlckRhdGEoKTtcbiAgICAgICAgICAgIGlmIChmb3VuZENsdXN0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyBBZGQgbm9kZXMgdG8gZm91bmQgY2x1c3RlciBpZiBub3QgcHJlc2VudFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gaW4gY2hpbGROb2Rlc09iaikge1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZENsdXN0ZXIubm9kZXNbbV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgZm91bmRDbHVzdGVyLm5vZGVzW21dID0gY2hpbGROb2Rlc09ialttXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBBZGQgZWRnZXMgdG8gZm91bmQgY2x1c3RlciwgaWYgbm90IHByZXNlbnRcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtIGluIGNoaWxkRWRnZXNPYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmRDbHVzdGVyLmVkZ2VzW21dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGZvdW5kQ2x1c3Rlci5lZGdlc1ttXSA9IGNoaWxkRWRnZXNPYmpbbV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgY2x1c3RlciBncm91cFxuICAgICAgICAgICAgICBjbHVzdGVycy5wdXNoKHsgbm9kZXM6IGNoaWxkTm9kZXNPYmosIGVkZ2VzOiBjaGlsZEVkZ2VzT2JqIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2x1c3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2NsdXN0ZXIoY2x1c3RlcnNbaV0ubm9kZXMsIGNsdXN0ZXJzW2ldLmVkZ2VzLCBvcHRpb25zLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHJlZnJlc2hEYXRhID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbHVzdGVyIGFsbCBub2RlcyBpbiB0aGUgbmV0d29yayB0aGF0IGhhdmUgb25seSAxIGVkZ2VcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVmcmVzaERhdGE9dHJ1ZV1cbiAgICovXG4gIGNsdXN0ZXJPdXRsaWVycyhvcHRpb25zLCByZWZyZXNoRGF0YSA9IHRydWUpIHtcbiAgICB0aGlzLmNsdXN0ZXJCeUVkZ2VDb3VudCgxLCBvcHRpb25zLCByZWZyZXNoRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQ2x1c3RlciBhbGwgbm9kZXMgaW4gdGhlIG5ldHdvcmsgdGhhdCBoYXZlIG9ubHkgMiBlZGdlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlZnJlc2hEYXRhPXRydWVdXG4gICAqL1xuICBjbHVzdGVyQnJpZGdlcyhvcHRpb25zLCByZWZyZXNoRGF0YSA9IHRydWUpIHtcbiAgICB0aGlzLmNsdXN0ZXJCeUVkZ2VDb3VudCgyLCBvcHRpb25zLCByZWZyZXNoRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogc3VjayBhbGwgY29ubmVjdGVkIG5vZGVzIG9mIGEgbm9kZSBpbnRvIHRoZSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWZyZXNoRGF0YT10cnVlXVxuICAgKi9cbiAgY2x1c3RlckJ5Q29ubmVjdGlvbihub2RlSWQsIG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIC8vIGtpbGwgY29uZGl0aW9uc1xuICAgIGlmIChub2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbm9kZUlkIHN1cHBsaWVkIHRvIGNsdXN0ZXJCeUNvbm5lY3Rpb24hXCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSBub2RlSWQgZ2l2ZW4gdG8gY2x1c3RlckJ5Q29ubmVjdGlvbiBkb2VzIG5vdCBleGlzdCFcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgb3B0aW9ucyA9IHRoaXMuX2NoZWNrT3B0aW9ucyhvcHRpb25zLCBub2RlKTtcbiAgICBpZiAob3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMueCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy54ID0gbm9kZS54O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMueSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy55ID0gbm9kZS55O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuZml4ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuZml4ZWQgPSB7fTtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmZpeGVkLnggPSBub2RlLm9wdGlvbnMuZml4ZWQueDtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmZpeGVkLnkgPSBub2RlLm9wdGlvbnMuZml4ZWQueTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZE5vZGVzT2JqID0ge307XG4gICAgY29uc3QgY2hpbGRFZGdlc09iaiA9IHt9O1xuICAgIGNvbnN0IHBhcmVudE5vZGVJZCA9IG5vZGUuaWQ7XG4gICAgY29uc3QgcGFyZW50Q2xvbmVkT3B0aW9ucyA9IE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhub2RlKTtcbiAgICBjaGlsZE5vZGVzT2JqW3BhcmVudE5vZGVJZF0gPSBub2RlO1xuXG4gICAgLy8gY29sbGVjdCB0aGUgbm9kZXMgdGhhdCB3aWxsIGJlIGluIHRoZSBjbHVzdGVyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gbm9kZS5lZGdlc1tpXTtcbiAgICAgIGlmICh0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlSWQgPSB0aGlzLl9nZXRDb25uZWN0ZWRJZChlZGdlLCBwYXJlbnROb2RlSWQpO1xuXG4gICAgICAgIC8vIGlmIHRoZSBjaGlsZCBub2RlIGlzIG5vdCBpbiBhIGNsdXN0ZXJcbiAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkTm9kZXNbY2hpbGROb2RlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoY2hpbGROb2RlSWQgIT09IHBhcmVudE5vZGVJZCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuam9pbkNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGNoaWxkRWRnZXNPYmpbZWRnZS5pZF0gPSBlZGdlO1xuICAgICAgICAgICAgICBjaGlsZE5vZGVzT2JqW2NoaWxkTm9kZUlkXSA9IHRoaXMuYm9keS5ub2Rlc1tjaGlsZE5vZGVJZF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBjbG9uZSB0aGUgb3B0aW9ucyBhbmQgaW5zZXJ0IHNvbWUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcuXG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ2xvbmVkT3B0aW9ucyA9IE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhcbiAgICAgICAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbY2hpbGROb2RlSWRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBvcHRpb25zLmpvaW5Db25kaXRpb24oXG4gICAgICAgICAgICAgICAgICBwYXJlbnRDbG9uZWRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgY2hpbGRDbG9uZWRPcHRpb25zXG4gICAgICAgICAgICAgICAgKSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2UuaWRdID0gZWRnZTtcbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVzT2JqW2NoaWxkTm9kZUlkXSA9IHRoaXMuYm9keS5ub2Rlc1tjaGlsZE5vZGVJZF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc3dhbGxvdyB0aGUgZWRnZSBpZiBpdCBpcyBzZWxmLXJlZmVyZW5jaW5nLlxuICAgICAgICAgICAgY2hpbGRFZGdlc09ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkTm9kZUlEcyA9IE9iamVjdC5rZXlzKGNoaWxkTm9kZXNPYmopLm1hcChmdW5jdGlvbiAoY2hpbGROb2RlKSB7XG4gICAgICByZXR1cm4gY2hpbGROb2Rlc09ialtjaGlsZE5vZGVdLmlkO1xuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZE5vZGVLZXkgaW4gY2hpbGROb2Rlc09iaikge1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hpbGROb2Rlc09iaiwgY2hpbGROb2RlS2V5KSlcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGNoaWxkTm9kZXNPYmpbY2hpbGROb2RlS2V5XTtcbiAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgY2hpbGROb2RlLmVkZ2VzLmxlbmd0aDsgeSsrKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkRWRnZSA9IGNoaWxkTm9kZS5lZGdlc1t5XTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoaWxkTm9kZUlEcy5pbmRleE9mKHRoaXMuX2dldENvbm5lY3RlZElkKGNoaWxkRWRnZSwgY2hpbGROb2RlLmlkKSkgPlxuICAgICAgICAgIC0xXG4gICAgICAgICkge1xuICAgICAgICAgIGNoaWxkRWRnZXNPYmpbY2hpbGRFZGdlLmlkXSA9IGNoaWxkRWRnZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9jbHVzdGVyKGNoaWxkTm9kZXNPYmosIGNoaWxkRWRnZXNPYmosIG9wdGlvbnMsIHJlZnJlc2hEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGVkZ2VzIHRoYXQgd2lsbCBiZSBhdHRhY2hlZCB0byB0aGUgY2x1c3RlclxuICAgKiBJdCBsb29rcyBmb3IgZWRnZXMgdGhhdCBhcmUgY29ubmVjdGVkIHRvIHRoZSBub2RlcyBmcm9tIHRoZSBcIm91dHNpZGUnIG9mIHRoZSBjbHVzdGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3tOb2RlLmlkOiB2aXMuTm9kZX19IGNoaWxkTm9kZXNPYmpcbiAgICogQHBhcmFtIHt7dmlzLkVkZ2UuaWQ6IHZpcy5FZGdlfX0gY2hpbGRFZGdlc09ialxuICAgKiBAcGFyYW0ge29iamVjdH0gY2x1c3Rlck5vZGVQcm9wZXJ0aWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjbHVzdGVyRWRnZVByb3BlcnRpZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVDbHVzdGVyRWRnZXMoXG4gICAgY2hpbGROb2Rlc09iaixcbiAgICBjaGlsZEVkZ2VzT2JqLFxuICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcyxcbiAgICBjbHVzdGVyRWRnZVByb3BlcnRpZXNcbiAgKSB7XG4gICAgbGV0IGVkZ2UsIGNoaWxkTm9kZUlkLCBjaGlsZE5vZGUsIHRvSWQsIGZyb21JZCwgb3RoZXJOb2RlSWQ7XG5cbiAgICAvLyBsb29wIG92ZXIgYWxsIGNoaWxkIG5vZGVzIGFuZCB0aGVpciBlZGdlcyB0byBmaW5kIGVkZ2VzIGdvaW5nIG91dCBvZiB0aGUgY2x1c3RlclxuICAgIC8vIHRoZXNlIGVkZ2VzIHdpbGwgYmUgcmVwbGFjZWQgYnkgY2x1c3RlckVkZ2VzLlxuICAgIGNvbnN0IGNoaWxkS2V5cyA9IE9iamVjdC5rZXlzKGNoaWxkTm9kZXNPYmopO1xuICAgIGNvbnN0IGNyZWF0ZUVkZ2VzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkTm9kZUlkID0gY2hpbGRLZXlzW2ldO1xuICAgICAgY2hpbGROb2RlID0gY2hpbGROb2Rlc09ialtjaGlsZE5vZGVJZF07XG5cbiAgICAgIC8vIGNvbnN0cnVjdCBuZXcgZWRnZXMgZnJvbSB0aGUgY2x1c3RlciB0byBvdGhlcnNcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2hpbGROb2RlLmVkZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGVkZ2UgPSBjaGlsZE5vZGUuZWRnZXNbal07XG4gICAgICAgIC8vIHdlIG9ubHkgaGFuZGxlIGVkZ2VzIHRoYXQgYXJlIHZpc2libGUgdG8gdGhlIHN5c3RlbSwgbm90IHRoZSBkaXNhYmxlZCBvbmVzIGZyb20gdGhlIGNsdXN0ZXJpbmcgcHJvY2Vzcy5cbiAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHNlbGYtcmVmZXJlbmNpbmcgZWRnZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgXCJoaWRkZW5cIiBsaXN0XG4gICAgICAgICAgaWYgKGVkZ2UudG9JZCA9PSBlZGdlLmZyb21JZCkge1xuICAgICAgICAgICAgY2hpbGRFZGdlc09ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNldCB1cCB0aGUgZnJvbSBhbmQgdG8uXG4gICAgICAgICAgICBpZiAoZWRnZS50b0lkID09IGNoaWxkTm9kZUlkKSB7XG4gICAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBkb3VibGUgZXF1YWxzIGJlY2F1c2UgaW50cyBhbmQgc3RyaW5ncyBjYW4gYmUgaW50ZXJjaGFuZ2VkIGhlcmUuXG4gICAgICAgICAgICAgIHRvSWQgPSBjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWQ7XG4gICAgICAgICAgICAgIGZyb21JZCA9IGVkZ2UuZnJvbUlkO1xuICAgICAgICAgICAgICBvdGhlck5vZGVJZCA9IGZyb21JZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRvSWQgPSBlZGdlLnRvSWQ7XG4gICAgICAgICAgICAgIGZyb21JZCA9IGNsdXN0ZXJOb2RlUHJvcGVydGllcy5pZDtcbiAgICAgICAgICAgICAgb3RoZXJOb2RlSWQgPSB0b0lkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE9ubHkgZWRnZXMgZnJvbSB0aGUgY2x1c3RlciBvdXR3YXJkcyBhcmUgYmVpbmcgcmVwbGFjZWQuXG4gICAgICAgICAgaWYgKGNoaWxkTm9kZXNPYmpbb3RoZXJOb2RlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNyZWF0ZUVkZ2VzLnB1c2goeyBlZGdlOiBlZGdlLCBmcm9tSWQ6IGZyb21JZCwgdG9JZDogdG9JZCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIEhlcmUgd2UgYWN0dWFsbHkgY3JlYXRlIHRoZSByZXBsYWNlbWVudCBlZGdlcy5cbiAgICAvL1xuICAgIC8vIFdlIGNvdWxkIG5vdCBkbyB0aGlzIGluIHRoZSBsb29wIGFib3ZlIGFzIHRoZSBjcmVhdGlvbiBwcm9jZXNzXG4gICAgLy8gd291bGQgYWRkIGFuIGVkZ2UgdG8gdGhlIGVkZ2VzIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3Zlci5cbiAgICAvL1xuICAgIC8vIE5PVEU6IGEgY2x1c3RlcmVkIGVkZ2UgY2FuIGhhdmUgbXVsdGlwbGUgYmFzZSBlZGdlcyFcbiAgICAvL1xuICAgIGNvbnN0IG5ld0VkZ2VzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgY2x1c3RlciBlZGdlIHdoaWNoIG1hdGNoZXMgdGhlIGdpdmVuIGNyZWF0ZWQgZWRnZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7dmlzLkVkZ2V9IGNyZWF0ZWRFZGdlXG4gICAgICogQHJldHVybnMge3Zpcy5FZGdlfVxuICAgICAqL1xuICAgIGNvbnN0IGdldE5ld0VkZ2UgPSBmdW5jdGlvbiAoY3JlYXRlZEVkZ2UpIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbmV3RWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgbmV3RWRnZSA9IG5ld0VkZ2VzW2pdO1xuXG4gICAgICAgIC8vIFdlIHJlcGxhY2UgYm90aCB0byBhbmQgZnJvbSBlZGdlcyB3aXRoIGEgc2luZ2xlIGNsdXN0ZXIgZWRnZVxuICAgICAgICBjb25zdCBtYXRjaFRvRGlyZWN0aW9uID1cbiAgICAgICAgICBjcmVhdGVkRWRnZS5mcm9tSWQgPT09IG5ld0VkZ2UuZnJvbUlkICYmXG4gICAgICAgICAgY3JlYXRlZEVkZ2UudG9JZCA9PT0gbmV3RWRnZS50b0lkO1xuICAgICAgICBjb25zdCBtYXRjaEZyb21EaXJlY3Rpb24gPVxuICAgICAgICAgIGNyZWF0ZWRFZGdlLmZyb21JZCA9PT0gbmV3RWRnZS50b0lkICYmXG4gICAgICAgICAgY3JlYXRlZEVkZ2UudG9JZCA9PT0gbmV3RWRnZS5mcm9tSWQ7XG5cbiAgICAgICAgaWYgKG1hdGNoVG9EaXJlY3Rpb24gfHwgbWF0Y2hGcm9tRGlyZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG5ld0VkZ2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY3JlYXRlRWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGNyZWF0ZWRFZGdlID0gY3JlYXRlRWRnZXNbal07XG4gICAgICBjb25zdCBlZGdlID0gY3JlYXRlZEVkZ2UuZWRnZTtcbiAgICAgIGxldCBuZXdFZGdlID0gZ2V0TmV3RWRnZShjcmVhdGVkRWRnZSk7XG5cbiAgICAgIGlmIChuZXdFZGdlID09PSBudWxsKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIGNsdXN0ZXJlZCBlZGdlIGZvciB0aGlzIGNvbm5lY3Rpb25cbiAgICAgICAgbmV3RWRnZSA9IHRoaXMuX2NyZWF0ZUNsdXN0ZXJlZEVkZ2UoXG4gICAgICAgICAgY3JlYXRlZEVkZ2UuZnJvbUlkLFxuICAgICAgICAgIGNyZWF0ZWRFZGdlLnRvSWQsXG4gICAgICAgICAgZWRnZSxcbiAgICAgICAgICBjbHVzdGVyRWRnZVByb3BlcnRpZXNcbiAgICAgICAgKTtcblxuICAgICAgICBuZXdFZGdlcy5wdXNoKG5ld0VkZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3RWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcy5wdXNoKGVkZ2UuaWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBhbHNvIHJlZmVyZW5jZSB0aGUgbmV3IGVkZ2UgaW4gdGhlIG9sZCBlZGdlXG4gICAgICB0aGlzLmJvZHkuZWRnZXNbZWRnZS5pZF0uZWRnZVJlcGxhY2VkQnlJZCA9IG5ld0VkZ2UuaWQ7XG5cbiAgICAgIC8vIGhpZGUgdGhlIHJlcGxhY2VkIGVkZ2VcbiAgICAgIHRoaXMuX2JhY2t1cEVkZ2VPcHRpb25zKGVkZ2UpO1xuICAgICAgZWRnZS5zZXRPcHRpb25zKHsgcGh5c2ljczogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBvcHRpb25zIHRoYXQgY2FuIGJlIHN1cHBsaWVkIHRvIHRoZSBkaWZmZXJlbnQgY2x1c3RlciBmdW5jdGlvbnNcbiAgICogZm9yIGNlcnRhaW4gZmllbGRzIGFuZCBpbnNlcnRzIGRlZmF1bHRzIGlmIG5lZWRlZFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja09wdGlvbnMob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKG9wdGlvbnMuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzID0ge307XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgICBjaGlsZE5vZGVzT2JqICAgICAgICAgfCBvYmplY3Qgd2l0aCBub2RlIG9iamVjdHMsIGlkIGFzIGtleXMsIHNhbWUgYXMgY2hpbGROb2RlcyBleGNlcHQgaXQgYWxzbyBjb250YWlucyBhIHNvdXJjZSBub2RlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgICBjaGlsZEVkZ2VzT2JqICAgICAgICAgfCBvYmplY3Qgd2l0aCBlZGdlIG9iamVjdHMsIGlkIGFzIGtleXNcbiAgICogQHBhcmFtIHtBcnJheX0gICAgIG9wdGlvbnMgICAgICAgICAgICAgICB8IG9iamVjdCB3aXRoIHtjbHVzdGVyTm9kZVByb3BlcnRpZXMsIGNsdXN0ZXJFZGdlUHJvcGVydGllcywgcHJvY2Vzc1Byb3BlcnRpZXN9XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gICByZWZyZXNoRGF0YSB8IHdoZW4gdHJ1ZSwgZG8gbm90IHdyYXAgdXBcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbHVzdGVyKGNoaWxkTm9kZXNPYmosIGNoaWxkRWRnZXNPYmosIG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIC8vIFJlbW92ZSBub2RlcyB3aGljaCBhcmUgYWxyZWFkeSBjbHVzdGVyZWRcbiAgICBjb25zdCB0bXBOb2Rlc1RvUmVtb3ZlID0gW107XG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gY2hpbGROb2Rlc09iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZE5vZGVzT2JqLCBub2RlSWQpKSB7XG4gICAgICAgIGlmICh0aGlzLmNsdXN0ZXJlZE5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRtcE5vZGVzVG9SZW1vdmUucHVzaChub2RlSWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCB0bXBOb2Rlc1RvUmVtb3ZlLmxlbmd0aDsgKytuKSB7XG4gICAgICBkZWxldGUgY2hpbGROb2Rlc09ialt0bXBOb2Rlc1RvUmVtb3ZlW25dXTtcbiAgICB9XG5cbiAgICAvLyBraWxsIGNvbmRpdGlvbjogbm8gbm9kZXMgZG9uJ3QgYm90aGVyXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoaWxkTm9kZXNPYmopLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYWxsb3cgY2x1c3RlcnMgb2YgMSBpZiBvcHRpb25zIGFsbG93XG4gICAgaWYgKFxuICAgICAgT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaikubGVuZ3RoID09IDEgJiZcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmFsbG93U2luZ2xlTm9kZUNsdXN0ZXIgIT0gdHJ1ZVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjbHVzdGVyTm9kZVByb3BlcnRpZXMgPSBkZWVwRXh0ZW5kKHt9LCBvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcyk7XG5cbiAgICAvLyBjb25zdHJ1Y3QgdGhlIGNsdXN0ZXJOb2RlUHJvcGVydGllc1xuICAgIGlmIChvcHRpb25zLnByb2Nlc3NQcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGdldCB0aGUgY2hpbGROb2RlIG9wdGlvbnNcbiAgICAgIGNvbnN0IGNoaWxkTm9kZXNPcHRpb25zID0gW107XG4gICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBjaGlsZE5vZGVzT2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hpbGROb2Rlc09iaiwgbm9kZUlkKSkge1xuICAgICAgICAgIGNvbnN0IGNsb25lZE9wdGlvbnMgPSBOZXR3b3JrVXRpbC5jbG9uZU9wdGlvbnMoY2hpbGROb2Rlc09ialtub2RlSWRdKTtcbiAgICAgICAgICBjaGlsZE5vZGVzT3B0aW9ucy5wdXNoKGNsb25lZE9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBjbHVzdGVyIHByb3BlcnRpZXMgYmFzZWQgb24gY2hpbGROb2Rlc1xuICAgICAgY29uc3QgY2hpbGRFZGdlc09wdGlvbnMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgZWRnZUlkIGluIGNoaWxkRWRnZXNPYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZEVkZ2VzT2JqLCBlZGdlSWQpKSB7XG4gICAgICAgICAgLy8gdGhlc2UgY2x1c3RlciBlZGdlcyB3aWxsIGJlIHJlbW92ZWQgb24gY3JlYXRpb24gb2YgdGhlIGNsdXN0ZXIuXG4gICAgICAgICAgaWYgKGVkZ2VJZC5zdWJzdHIoMCwgMTIpICE9PSBcImNsdXN0ZXJFZGdlOlwiKSB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKFxuICAgICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2VJZF0sXG4gICAgICAgICAgICAgIFwiZWRnZVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY2hpbGRFZGdlc09wdGlvbnMucHVzaChjbG9uZWRPcHRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzID0gb3B0aW9ucy5wcm9jZXNzUHJvcGVydGllcyhcbiAgICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLFxuICAgICAgICBjaGlsZE5vZGVzT3B0aW9ucyxcbiAgICAgICAgY2hpbGRFZGdlc09wdGlvbnNcbiAgICAgICk7XG4gICAgICBpZiAoIWNsdXN0ZXJOb2RlUHJvcGVydGllcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgcHJvY2Vzc1Byb3BlcnRpZXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIHByb3BlcnRpZXMhXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiB3ZSBoYXZlIGFuIHVuaXF1ZSBpZDtcbiAgICBpZiAoY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcy5pZCA9IFwiY2x1c3RlcjpcIiArIHJhbmRvbVVVSUQoKTtcbiAgICB9XG4gICAgY29uc3QgY2x1c3RlcklkID0gY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkO1xuXG4gICAgaWYgKGNsdXN0ZXJOb2RlUHJvcGVydGllcy5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMubGFiZWwgPSBcImNsdXN0ZXJcIjtcbiAgICB9XG5cbiAgICAvLyBnaXZlIHRoZSBjbHVzdGVyTm9kZSBhIHBvc2l0aW9uIGlmIGl0IGRvZXMgbm90IGhhdmUgb25lLlxuICAgIGxldCBwb3MgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGNsdXN0ZXJOb2RlUHJvcGVydGllcy54ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBvcyA9IHRoaXMuX2dldENsdXN0ZXJQb3NpdGlvbihjaGlsZE5vZGVzT2JqKTtcbiAgICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcy54ID0gcG9zLng7XG4gICAgfVxuICAgIGlmIChjbHVzdGVyTm9kZVByb3BlcnRpZXMueSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocG9zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcG9zID0gdGhpcy5fZ2V0Q2x1c3RlclBvc2l0aW9uKGNoaWxkTm9kZXNPYmopO1xuICAgICAgfVxuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnkgPSBwb3MueTtcbiAgICB9XG5cbiAgICAvLyBmb3JjZSB0aGUgSUQgdG8gcmVtYWluIHRoZSBzYW1lXG4gICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkID0gY2x1c3RlcklkO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBjbHVzdGVyIE5vZGVcbiAgICAvLyBOb3RlIHRoYXQgYWxsb3dTaW5nbGVOb2RlQ2x1c3RlciwgaWYgcHJlc2VudCwgaXMgc3RvcmVkIGluIHRoZSBvcHRpb25zIGFzIHdlbGxcbiAgICBjb25zdCBjbHVzdGVyTm9kZSA9IHRoaXMuYm9keS5mdW5jdGlvbnMuY3JlYXRlTm9kZShcbiAgICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcyxcbiAgICAgIENsdXN0ZXJcbiAgICApO1xuICAgIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZE5vZGVzID0gY2hpbGROb2Rlc09iajtcbiAgICBjbHVzdGVyTm9kZS5jb250YWluZWRFZGdlcyA9IGNoaWxkRWRnZXNPYmo7XG4gICAgLy8gY2FjaGUgYSBjb3B5IGZyb20gdGhlIGNsdXN0ZXIgZWRnZSBwcm9wZXJ0aWVzIGlmIHdlIGhhdmUgdG8gcmVjb25uZWN0IG90aGVycyBsYXRlciBvblxuICAgIGNsdXN0ZXJOb2RlLmNsdXN0ZXJFZGdlUHJvcGVydGllcyA9IG9wdGlvbnMuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzO1xuXG4gICAgLy8gZmluYWxseSBwdXQgdGhlIGNsdXN0ZXIgbm9kZSBpbnRvIGdsb2JhbFxuICAgIHRoaXMuYm9keS5ub2Rlc1tjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWRdID0gY2x1c3Rlck5vZGU7XG5cbiAgICB0aGlzLl9jbHVzdGVyRWRnZXMoXG4gICAgICBjaGlsZE5vZGVzT2JqLFxuICAgICAgY2hpbGRFZGdlc09iaixcbiAgICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcyxcbiAgICAgIG9wdGlvbnMuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzXG4gICAgKTtcblxuICAgIC8vIHNldCBJRCB0byB1bmRlZmluZWQgc28gbm8gZHVwbGljYXRlcyBhcmlzZVxuICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcy5pZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIHdyYXAgdXBcbiAgICBpZiAocmVmcmVzaERhdGEgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZX0gZWRnZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JhY2t1cEVkZ2VPcHRpb25zKGVkZ2UpIHtcbiAgICBpZiAodGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdID0geyBwaHlzaWNzOiBlZGdlLm9wdGlvbnMucGh5c2ljcyB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0VkZ2V9IGVkZ2VcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXN0b3JlRWRnZShlZGdlKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxPcHRpb25zID0gdGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlLmlkXTtcbiAgICBpZiAob3JpZ2luYWxPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVkZ2Uuc2V0T3B0aW9ucyh7IHBoeXNpY3M6IG9yaWdpbmFsT3B0aW9ucy5waHlzaWNzIH0pO1xuICAgICAgZGVsZXRlIHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbm9kZSBpcyBhIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgaXNDbHVzdGVyKG5vZGVJZCkge1xuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0uaXNDbHVzdGVyID09PSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiTm9kZSBkb2VzIG5vdCBleGlzdC5cIik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGNsdXN0ZXIgbm9kZSBiYXNlZCBvbiB3aGF0J3MgaW5zaWRlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjaGlsZE5vZGVzT2JqICAgIHwgb2JqZWN0IHdpdGggbm9kZSBvYmplY3RzLCBpZCBhcyBrZXlzXG4gICAqIEByZXR1cm5zIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldENsdXN0ZXJQb3NpdGlvbihjaGlsZE5vZGVzT2JqKSB7XG4gICAgY29uc3QgY2hpbGRLZXlzID0gT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaik7XG4gICAgbGV0IG1pblggPSBjaGlsZE5vZGVzT2JqW2NoaWxkS2V5c1swXV0ueDtcbiAgICBsZXQgbWF4WCA9IGNoaWxkTm9kZXNPYmpbY2hpbGRLZXlzWzBdXS54O1xuICAgIGxldCBtaW5ZID0gY2hpbGROb2Rlc09ialtjaGlsZEtleXNbMF1dLnk7XG4gICAgbGV0IG1heFkgPSBjaGlsZE5vZGVzT2JqW2NoaWxkS2V5c1swXV0ueTtcbiAgICBsZXQgbm9kZTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGNoaWxkS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZSA9IGNoaWxkTm9kZXNPYmpbY2hpbGRLZXlzW2ldXTtcbiAgICAgIG1pblggPSBub2RlLnggPCBtaW5YID8gbm9kZS54IDogbWluWDtcbiAgICAgIG1heFggPSBub2RlLnggPiBtYXhYID8gbm9kZS54IDogbWF4WDtcbiAgICAgIG1pblkgPSBub2RlLnkgPCBtaW5ZID8gbm9kZS55IDogbWluWTtcbiAgICAgIG1heFkgPSBub2RlLnkgPiBtYXhZID8gbm9kZS55IDogbWF4WTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB4OiAwLjUgKiAobWluWCArIG1heFgpLCB5OiAwLjUgKiAobWluWSArIG1heFkpIH07XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIGNsdXN0ZXIgYnkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSAgY2x1c3Rlck5vZGVJZCB8IHRoZSBJRCBvZiB0aGUgY2x1c3RlciBub2RlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVmcmVzaERhdGEgfCB3cmFwIHVwIGFmdGVyd2FyZHMgaWYgbm90IHRydWVcbiAgICovXG4gIG9wZW5DbHVzdGVyKGNsdXN0ZXJOb2RlSWQsIG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIC8vIGtpbGwgY29uZGl0aW9uc1xuICAgIGlmIChjbHVzdGVyTm9kZUlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNsdXN0ZXJOb2RlSWQgc3VwcGxpZWQgdG8gb3BlbkNsdXN0ZXIuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsdXN0ZXJOb2RlID0gdGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJOb2RlSWRdO1xuXG4gICAgaWYgKGNsdXN0ZXJOb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgY2x1c3Rlck5vZGVJZCBzdXBwbGllZCB0byBvcGVuQ2x1c3RlciBkb2VzIG5vdCBleGlzdC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2x1c3Rlck5vZGUuaXNDbHVzdGVyICE9PSB0cnVlIHx8XG4gICAgICBjbHVzdGVyTm9kZS5jb250YWluZWROb2RlcyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBjbHVzdGVyTm9kZS5jb250YWluZWRFZGdlcyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgbm9kZTpcIiArIGNsdXN0ZXJOb2RlSWQgKyBcIiBpcyBub3QgYSB2YWxpZCBjbHVzdGVyLlwiKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBjdXJyZW50IGNsdXN0ZXIgaXMgY2x1c3RlcmVkIGl0c2VsZlxuICAgIGNvbnN0IHN0YWNrID0gdGhpcy5maW5kTm9kZShjbHVzdGVyTm9kZUlkKTtcbiAgICBjb25zdCBwYXJlbnRJbmRleCA9IHN0YWNrLmluZGV4T2YoY2x1c3Rlck5vZGVJZCkgLSAxO1xuICAgIGlmIChwYXJlbnRJbmRleCA+PSAwKSB7XG4gICAgICAvLyBDdXJyZW50IGNsdXN0ZXIgaXMgY2x1c3RlcmVkOyB0cmFuc2ZlciBjb250YWluZWQgbm9kZXMgYW5kIGVkZ2VzIHRvIHBhcmVudFxuICAgICAgY29uc3QgcGFyZW50Q2x1c3Rlck5vZGVJZCA9IHN0YWNrW3BhcmVudEluZGV4XTtcbiAgICAgIGNvbnN0IHBhcmVudENsdXN0ZXJOb2RlID0gdGhpcy5ib2R5Lm5vZGVzW3BhcmVudENsdXN0ZXJOb2RlSWRdO1xuXG4gICAgICAvLyBjbHVzdGVyaW5nLmNsdXN0ZXJlZE5vZGVzIGFuZCBjbHVzdGVyaW5nLmNsdXN0ZXJlZEVkZ2VzIHJlbWFpbiB1bmNoYW5nZWRcbiAgICAgIHBhcmVudENsdXN0ZXJOb2RlLl9vcGVuQ2hpbGRDbHVzdGVyKGNsdXN0ZXJOb2RlSWQpO1xuXG4gICAgICAvLyBBbGwgY29tcG9uZW50cyBvZiBjaGlsZCBjbHVzdGVyIG5vZGUgaGF2ZSBiZWVuIHRyYW5zZmVycmVkLiBJdCBjYW4gZGllIG5vdy5cbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkubm9kZXNbY2x1c3Rlck5vZGVJZF07XG4gICAgICBpZiAocmVmcmVzaERhdGEgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG1haW4gYm9keVxuICAgIGNvbnN0IGNvbnRhaW5lZE5vZGVzID0gY2x1c3Rlck5vZGUuY29udGFpbmVkTm9kZXM7XG4gICAgY29uc3QgY29udGFpbmVkRWRnZXMgPSBjbHVzdGVyTm9kZS5jb250YWluZWRFZGdlcztcblxuICAgIC8vIGFsbG93IHRoZSB1c2VyIHRvIHBvc2l0aW9uIHRoZSBub2RlcyBhZnRlciByZWxlYXNlLlxuICAgIGlmIChcbiAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb3B0aW9ucy5yZWxlYXNlRnVuY3Rpb24gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdHlwZW9mIG9wdGlvbnMucmVsZWFzZUZ1bmN0aW9uID09PSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHt9O1xuICAgICAgY29uc3QgY2x1c3RlclBvc2l0aW9uID0geyB4OiBjbHVzdGVyTm9kZS54LCB5OiBjbHVzdGVyTm9kZS55IH07XG4gICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBjb250YWluZWROb2Rlcykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnRhaW5lZE5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgY29uc3QgY29udGFpbmVkTm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgICAgIHBvc2l0aW9uc1tub2RlSWRdID0geyB4OiBjb250YWluZWROb2RlLngsIHk6IGNvbnRhaW5lZE5vZGUueSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdQb3NpdGlvbnMgPSBvcHRpb25zLnJlbGVhc2VGdW5jdGlvbihjbHVzdGVyUG9zaXRpb24sIHBvc2l0aW9ucyk7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNvbnRhaW5lZE5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBjb25zdCBjb250YWluZWROb2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgICAgaWYgKG5ld1Bvc2l0aW9uc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lZE5vZGUueCA9XG4gICAgICAgICAgICAgIG5ld1Bvc2l0aW9uc1tub2RlSWRdLnggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gY2x1c3Rlck5vZGUueFxuICAgICAgICAgICAgICAgIDogbmV3UG9zaXRpb25zW25vZGVJZF0ueDtcbiAgICAgICAgICAgIGNvbnRhaW5lZE5vZGUueSA9XG4gICAgICAgICAgICAgIG5ld1Bvc2l0aW9uc1tub2RlSWRdLnkgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gY2x1c3Rlck5vZGUueVxuICAgICAgICAgICAgICAgIDogbmV3UG9zaXRpb25zW25vZGVJZF0ueTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29weSB0aGUgcG9zaXRpb24gZnJvbSB0aGUgY2x1c3RlclxuICAgICAgZm9yRWFjaChjb250YWluZWROb2RlcywgZnVuY3Rpb24gKGNvbnRhaW5lZE5vZGUpIHtcbiAgICAgICAgLy8gaW5oZXJpdCBwb3NpdGlvblxuICAgICAgICBpZiAoY29udGFpbmVkTm9kZS5vcHRpb25zLmZpeGVkLnggPT09IGZhbHNlKSB7XG4gICAgICAgICAgY29udGFpbmVkTm9kZS54ID0gY2x1c3Rlck5vZGUueDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGFpbmVkTm9kZS5vcHRpb25zLmZpeGVkLnkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgY29udGFpbmVkTm9kZS55ID0gY2x1c3Rlck5vZGUueTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcmVsZWFzZSBub2Rlc1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNvbnRhaW5lZE5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnRhaW5lZE5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lZE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcblxuICAgICAgICAvLyBpbmhlcml0IHNwZWVkXG4gICAgICAgIGNvbnRhaW5lZE5vZGUudnggPSBjbHVzdGVyTm9kZS52eDtcbiAgICAgICAgY29udGFpbmVkTm9kZS52eSA9IGNsdXN0ZXJOb2RlLnZ5O1xuXG4gICAgICAgIGNvbnRhaW5lZE5vZGUuc2V0T3B0aW9ucyh7IHBoeXNpY3M6IHRydWUgfSk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuY2x1c3RlcmVkTm9kZXNbbm9kZUlkXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb3B5IHRoZSBjbHVzdGVyTm9kZSBlZGdlcyBiZWNhdXNlIHdlIGNhbm5vdCBpdGVyYXRlIG92ZXIgYW4gb2JqZWN0IHRoYXQgd2UgYWRkIG9yIHJlbW92ZSBmcm9tLlxuICAgIGNvbnN0IGVkZ2VzVG9CZURlbGV0ZWQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsdXN0ZXJOb2RlLmVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlZGdlc1RvQmVEZWxldGVkLnB1c2goY2x1c3Rlck5vZGUuZWRnZXNbaV0pO1xuICAgIH1cblxuICAgIC8vIGFjdHVhbGx5IGhhbmRsaW5nIHRoZSBkZWxldGluZy5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VzVG9CZURlbGV0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1RvQmVEZWxldGVkW2ldO1xuICAgICAgY29uc3Qgb3RoZXJOb2RlSWQgPSB0aGlzLl9nZXRDb25uZWN0ZWRJZChlZGdlLCBjbHVzdGVyTm9kZUlkKTtcbiAgICAgIGNvbnN0IG90aGVyTm9kZSA9IHRoaXMuY2x1c3RlcmVkTm9kZXNbb3RoZXJOb2RlSWRdO1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgdHJhbnNmZXJJZCA9IGVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHNbal07XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyRWRnZSA9IHRoaXMuYm9keS5lZGdlc1t0cmFuc2ZlcklkXTtcbiAgICAgICAgaWYgKHRyYW5zZmVyRWRnZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblxuICAgICAgICAvLyBpZiB0aGUgb3RoZXIgbm9kZSBpcyBpbiBhbm90aGVyIGNsdXN0ZXIsIHdlIHRyYW5zZmVyIG93bmVyc2hpcCBvZiB0aGlzIGVkZ2UgdG8gdGhlIG90aGVyIGNsdXN0ZXJcbiAgICAgICAgaWYgKG90aGVyTm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gdHJhbnNmZXIgb3duZXJzaGlwOlxuICAgICAgICAgIGNvbnN0IG90aGVyQ2x1c3RlciA9IHRoaXMuYm9keS5ub2Rlc1tvdGhlck5vZGUuY2x1c3RlcklkXTtcbiAgICAgICAgICBvdGhlckNsdXN0ZXIuY29udGFpbmVkRWRnZXNbdHJhbnNmZXJFZGdlLmlkXSA9IHRyYW5zZmVyRWRnZTtcblxuICAgICAgICAgIC8vIGRlbGV0ZSBsb2NhbCByZWZlcmVuY2VcbiAgICAgICAgICBkZWxldGUgY29udGFpbmVkRWRnZXNbdHJhbnNmZXJFZGdlLmlkXTtcblxuICAgICAgICAgIC8vIGdldCB0byBhbmQgZnJvbVxuICAgICAgICAgIGxldCBmcm9tSWQgPSB0cmFuc2ZlckVkZ2UuZnJvbUlkO1xuICAgICAgICAgIGxldCB0b0lkID0gdHJhbnNmZXJFZGdlLnRvSWQ7XG4gICAgICAgICAgaWYgKHRyYW5zZmVyRWRnZS50b0lkID09IG90aGVyTm9kZUlkKSB7XG4gICAgICAgICAgICB0b0lkID0gb3RoZXJOb2RlLmNsdXN0ZXJJZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJvbUlkID0gb3RoZXJOb2RlLmNsdXN0ZXJJZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjcmVhdGUgbmV3IGNsdXN0ZXIgZWRnZSBmcm9tIHRoZSBvdGhlckNsdXN0ZXJcbiAgICAgICAgICB0aGlzLl9jcmVhdGVDbHVzdGVyZWRFZGdlKFxuICAgICAgICAgICAgZnJvbUlkLFxuICAgICAgICAgICAgdG9JZCxcbiAgICAgICAgICAgIHRyYW5zZmVyRWRnZSxcbiAgICAgICAgICAgIG90aGVyQ2x1c3Rlci5jbHVzdGVyRWRnZVByb3BlcnRpZXMsXG4gICAgICAgICAgICB7IGhpZGRlbjogZmFsc2UsIHBoeXNpY3M6IHRydWUgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fcmVzdG9yZUVkZ2UodHJhbnNmZXJFZGdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZGdlLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIC8vIGhhbmRsZSB0aGUgcmVsZWFzaW5nIG9mIHRoZSBlZGdlc1xuICAgIGZvciAoY29uc3QgZWRnZUlkIGluIGNvbnRhaW5lZEVkZ2VzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnRhaW5lZEVkZ2VzLCBlZGdlSWQpKSB7XG4gICAgICAgIHRoaXMuX3Jlc3RvcmVFZGdlKGNvbnRhaW5lZEVkZ2VzW2VkZ2VJZF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSBjbHVzdGVyTm9kZVxuICAgIGRlbGV0ZSB0aGlzLmJvZHkubm9kZXNbY2x1c3Rlck5vZGVJZF07XG5cbiAgICBpZiAocmVmcmVzaERhdGEgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2x1c3Rlci5pZH0gY2x1c3RlcklkXG4gICAqIEByZXR1cm5zIHtBcnJheS48Tm9kZS5pZD59XG4gICAqL1xuICBnZXROb2Rlc0luQ2x1c3RlcihjbHVzdGVySWQpIHtcbiAgICBjb25zdCBub2Rlc0FycmF5ID0gW107XG4gICAgaWYgKHRoaXMuaXNDbHVzdGVyKGNsdXN0ZXJJZCkgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lZE5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJJZF0uY29udGFpbmVkTm9kZXM7XG4gICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBjb250YWluZWROb2Rlcykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnRhaW5lZE5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgbm9kZXNBcnJheS5wdXNoKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2Rlc0FycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RhY2sgY2x1c3RlcklkJ3MgdGhhdCBhIGNlcnRhaW4gbm9kZSByZXNpZGVzIGluLiBjbHVzdGVyIEEgLT4gY2x1c3RlciBCIC0+IGNsdXN0ZXIgQyAtPiBub2RlXG4gICAqXG4gICAqIElmIGEgbm9kZSBjYW4ndCBiZSBmb3VuZCBpbiB0aGUgY2hhaW4sIHJldHVybiBhbiBlbXB0eSBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBub2RlSWRcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZmluZE5vZGUobm9kZUlkKSB7XG4gICAgY29uc3Qgc3RhY2sgPSBbXTtcbiAgICBjb25zdCBtYXggPSAxMDA7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCBub2RlO1xuXG4gICAgd2hpbGUgKHRoaXMuY2x1c3RlcmVkTm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkICYmIGNvdW50ZXIgPCBtYXgpIHtcbiAgICAgIG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgICAgIHN0YWNrLnB1c2gobm9kZS5pZCk7XG5cbiAgICAgIG5vZGVJZCA9IHRoaXMuY2x1c3RlcmVkTm9kZXNbbm9kZUlkXS5jbHVzdGVySWQ7XG4gICAgICBjb3VudGVyKys7XG4gICAgfVxuXG4gICAgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgICBzdGFjay5wdXNoKG5vZGUuaWQpO1xuXG4gICAgc3RhY2sucmV2ZXJzZSgpO1xuICAgIHJldHVybiBzdGFjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2luZyBhIGNsdXN0ZXJlZCBub2RlSWQsIHVwZGF0ZSB3aXRoIHRoZSBuZXcgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IGNsdXN0ZXJlZE5vZGVJZFxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3T3B0aW9uc1xuICAgKi9cbiAgdXBkYXRlQ2x1c3RlcmVkTm9kZShjbHVzdGVyZWROb2RlSWQsIG5ld09wdGlvbnMpIHtcbiAgICBpZiAoY2x1c3RlcmVkTm9kZUlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNsdXN0ZXJlZE5vZGVJZCBzdXBwbGllZCB0byB1cGRhdGVDbHVzdGVyZWROb2RlLlwiKTtcbiAgICB9XG4gICAgaWYgKG5ld09wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbmV3T3B0aW9ucyBzdXBwbGllZCB0byB1cGRhdGVDbHVzdGVyZWROb2RlLlwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tjbHVzdGVyZWROb2RlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgY2x1c3RlcmVkTm9kZUlkIHN1cHBsaWVkIHRvIHVwZGF0ZUNsdXN0ZXJlZE5vZGUgZG9lcyBub3QgZXhpc3QuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJlZE5vZGVJZF0uc2V0T3B0aW9ucyhuZXdPcHRpb25zKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzaW5nIGEgYmFzZSBlZGdlSWQsIHVwZGF0ZSBhbGwgcmVsYXRlZCBjbHVzdGVyZWQgZWRnZXMgd2l0aCB0aGUgbmV3IG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHt2aXMuRWRnZS5pZH0gc3RhcnRFZGdlSWRcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld09wdGlvbnNcbiAgICovXG4gIHVwZGF0ZUVkZ2Uoc3RhcnRFZGdlSWQsIG5ld09wdGlvbnMpIHtcbiAgICBpZiAoc3RhcnRFZGdlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RhcnRFZGdlSWQgc3VwcGxpZWQgdG8gdXBkYXRlRWRnZS5cIik7XG4gICAgfVxuICAgIGlmIChuZXdPcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG5ld09wdGlvbnMgc3VwcGxpZWQgdG8gdXBkYXRlRWRnZS5cIik7XG4gICAgfVxuICAgIGlmICh0aGlzLmJvZHkuZWRnZXNbc3RhcnRFZGdlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBzdGFydEVkZ2VJZCBzdXBwbGllZCB0byB1cGRhdGVFZGdlIGRvZXMgbm90IGV4aXN0LlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxFZGdlSWRzID0gdGhpcy5nZXRDbHVzdGVyZWRFZGdlcyhzdGFydEVkZ2VJZCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxFZGdlSWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gdGhpcy5ib2R5LmVkZ2VzW2FsbEVkZ2VJZHNbaV1dO1xuICAgICAgZWRnZS5zZXRPcHRpb25zKG5ld09wdGlvbnMpO1xuICAgIH1cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHN0YWNrIG9mIGNsdXN0ZXJFZGdlSWQncyAoK2Jhc2UgZWRnZWlkKSB0aGF0IGEgYmFzZSBlZGdlIGlzIHRoZSBzYW1lIGFzLiBjbHVzdGVyIGVkZ2UgQyAtPiBjbHVzdGVyIGVkZ2UgQiAtPiBjbHVzdGVyIGVkZ2UgQSAtPiBiYXNlIGVkZ2UoZWRnZUlkKVxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBlZGdlSWRcbiAgICogQHJldHVybnMge0FycmF5Ljx2aXMuRWRnZS5pZD59XG4gICAqL1xuICBnZXRDbHVzdGVyZWRFZGdlcyhlZGdlSWQpIHtcbiAgICBjb25zdCBzdGFjayA9IFtdO1xuICAgIGNvbnN0IG1heCA9IDEwMDtcbiAgICBsZXQgY291bnRlciA9IDA7XG5cbiAgICB3aGlsZSAoXG4gICAgICBlZGdlSWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgY291bnRlciA8IG1heFxuICAgICkge1xuICAgICAgc3RhY2sucHVzaCh0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXS5pZCk7XG4gICAgICBlZGdlSWQgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXS5lZGdlUmVwbGFjZWRCeUlkO1xuICAgICAgY291bnRlcisrO1xuICAgIH1cbiAgICBzdGFjay5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYmFzZSBlZGdlIGlkIG9mIGNsdXN0ZXJFZGdlSWQuIGNsdXN0ZXIgZWRnZSAoY2x1c3RlcmVkRWRnZUlkKSAtPiBjbHVzdGVyIGVkZ2UgQiAtPiBjbHVzdGVyIGVkZ2UgQyAtPiBiYXNlIGVkZ2VcbiAgICpcbiAgICogQHBhcmFtIHt2aXMuRWRnZS5pZH0gY2x1c3RlcmVkRWRnZUlkXG4gICAqIEByZXR1cm5zIHt2aXMuRWRnZS5pZH0gYmFzZUVkZ2VJZFxuICAgKlxuICAgKiBUT0RPOiBkZXByZWNhdGUgaW4gNS4wLjAuIE1ldGhvZCBnZXRCYXNlRWRnZXMoKSBpcyB0aGUgY29ycmVjdCBvbmUgdG8gdXNlLlxuICAgKi9cbiAgZ2V0QmFzZUVkZ2UoY2x1c3RlcmVkRWRnZUlkKSB7XG4gICAgLy8gSnVzdCBrbHVkZ2UgdGhpcyBieSByZXR1cm5pbmcgdGhlIGZpcnN0IGJhc2UgZWRnZSBpZCBmb3VuZFxuICAgIHJldHVybiB0aGlzLmdldEJhc2VFZGdlcyhjbHVzdGVyZWRFZGdlSWQpWzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgcmVndWxhciBlZGdlcyBmb3IgdGhpcyBjbHVzdGVyZWQgZWRnZSBpZC5cbiAgICpcbiAgICogQHBhcmFtIHt2aXMuRWRnZS5pZH0gY2x1c3RlcmVkRWRnZUlkXG4gICAqIEByZXR1cm5zIHtBcnJheS48dmlzLkVkZ2UuaWQ+fSBhbGwgYmFzZUVkZ2VJZCdzIHVuZGVyIHRoaXMgY2x1c3RlcmVkIGVkZ2VcbiAgICovXG4gIGdldEJhc2VFZGdlcyhjbHVzdGVyZWRFZGdlSWQpIHtcbiAgICBjb25zdCBJZHNUb0hhbmRsZSA9IFtjbHVzdGVyZWRFZGdlSWRdO1xuICAgIGNvbnN0IGRvbmVJZHMgPSBbXTtcbiAgICBjb25zdCBmb3VuZElkcyA9IFtdO1xuICAgIGNvbnN0IG1heCA9IDEwMDtcbiAgICBsZXQgY291bnRlciA9IDA7XG5cbiAgICB3aGlsZSAoSWRzVG9IYW5kbGUubGVuZ3RoID4gMCAmJiBjb3VudGVyIDwgbWF4KSB7XG4gICAgICBjb25zdCBuZXh0SWQgPSBJZHNUb0hhbmRsZS5wb3AoKTtcbiAgICAgIGlmIChuZXh0SWQgPT09IHVuZGVmaW5lZCkgY29udGludWU7IC8vIFBhcmFub2lhIGhlcmUgYW5kIG9ud2FyZHNcbiAgICAgIGNvbnN0IG5leHRFZGdlID0gdGhpcy5ib2R5LmVkZ2VzW25leHRJZF07XG4gICAgICBpZiAobmV4dEVkZ2UgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICBjb3VudGVyKys7XG5cbiAgICAgIGNvbnN0IHJlcGxhY2luZ0lkcyA9IG5leHRFZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzO1xuICAgICAgaWYgKHJlcGxhY2luZ0lkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIG5leHRJZCBpcyBhIGJhc2UgaWRcbiAgICAgICAgZm91bmRJZHMucHVzaChuZXh0SWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQW5vdGhlciBjbHVzdGVyIGVkZ2UsIHVucmF2ZWwgdGhpcyBvbmUgYXMgd2VsbFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcGxhY2luZ0lkcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGNvbnN0IHJlcGxhY2luZ0lkID0gcmVwbGFjaW5nSWRzW2ldO1xuXG4gICAgICAgICAgLy8gRG9uJ3QgYWRkIGlmIGFscmVhZHkgaGFuZGxlZFxuICAgICAgICAgIC8vIFRPRE86IG5ldmVyIHRyaWdnZXJzOyBmaW5kIGEgdGVzdC1jYXNlIHdoaWNoIGRvZXNcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBJZHNUb0hhbmRsZS5pbmRleE9mKHJlcGxhY2luZ0lkcykgIT09IC0xIHx8XG4gICAgICAgICAgICBkb25lSWRzLmluZGV4T2YocmVwbGFjaW5nSWRzKSAhPT0gLTFcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIElkc1RvSGFuZGxlLnB1c2gocmVwbGFjaW5nSWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRvbmVJZHMucHVzaChuZXh0SWQpO1xuICAgIH1cblxuICAgIHJldHVybiBmb3VuZElkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIElkIHRoZSBub2RlIGlzIGNvbm5lY3RlZCB0b1xuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlfSBlZGdlXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldENvbm5lY3RlZElkKGVkZ2UsIG5vZGVJZCkge1xuICAgIGlmIChlZGdlLnRvSWQgIT0gbm9kZUlkKSB7XG4gICAgICByZXR1cm4gZWRnZS50b0lkO1xuICAgIH0gZWxzZSBpZiAoZWRnZS5mcm9tSWQgIT0gbm9kZUlkKSB7XG4gICAgICByZXR1cm4gZWRnZS5mcm9tSWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlZGdlLmZyb21JZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2UgZGV0ZXJtaW5lIGhvdyBtYW55IGNvbm5lY3Rpb25zIGRlbm90ZSBhbiBpbXBvcnRhbnQgaHViLlxuICAgKiBXZSB0YWtlIHRoZSBtZWFuICsgMipzdGQgYXMgdGhlIGltcG9ydGFudCBodWIgc2l6ZS4gKEFzc3VtaW5nIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiBkYXRhLCB+Mi4yJSlcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRIdWJTaXplKCkge1xuICAgIGxldCBhdmVyYWdlID0gMDtcbiAgICBsZXQgYXZlcmFnZVNxdWFyZWQgPSAwO1xuICAgIGxldCBodWJDb3VudGVyID0gMDtcbiAgICBsZXQgbGFyZ2VzdEh1YiA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLmJvZHkubm9kZUluZGljZXNbaV1dO1xuICAgICAgaWYgKG5vZGUuZWRnZXMubGVuZ3RoID4gbGFyZ2VzdEh1Yikge1xuICAgICAgICBsYXJnZXN0SHViID0gbm9kZS5lZGdlcy5sZW5ndGg7XG4gICAgICB9XG4gICAgICBhdmVyYWdlICs9IG5vZGUuZWRnZXMubGVuZ3RoO1xuICAgICAgYXZlcmFnZVNxdWFyZWQgKz0gTWF0aC5wb3cobm9kZS5lZGdlcy5sZW5ndGgsIDIpO1xuICAgICAgaHViQ291bnRlciArPSAxO1xuICAgIH1cbiAgICBhdmVyYWdlID0gYXZlcmFnZSAvIGh1YkNvdW50ZXI7XG4gICAgYXZlcmFnZVNxdWFyZWQgPSBhdmVyYWdlU3F1YXJlZCAvIGh1YkNvdW50ZXI7XG5cbiAgICBjb25zdCB2YXJpYW5jZSA9IGF2ZXJhZ2VTcXVhcmVkIC0gTWF0aC5wb3coYXZlcmFnZSwgMik7XG4gICAgY29uc3Qgc3RhbmRhcmREZXZpYXRpb24gPSBNYXRoLnNxcnQodmFyaWFuY2UpO1xuXG4gICAgbGV0IGh1YlRocmVzaG9sZCA9IE1hdGguZmxvb3IoYXZlcmFnZSArIDIgKiBzdGFuZGFyZERldmlhdGlvbik7XG5cbiAgICAvLyBhbHdheXMgaGF2ZSBhdCBsZWFzdCBvbmUgdG8gY2x1c3RlclxuICAgIGlmIChodWJUaHJlc2hvbGQgPiBsYXJnZXN0SHViKSB7XG4gICAgICBodWJUaHJlc2hvbGQgPSBsYXJnZXN0SHViO1xuICAgIH1cblxuICAgIHJldHVybiBodWJUaHJlc2hvbGQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGVkZ2UgZm9yIHRoZSBjbHVzdGVyIHJlcHJlc2VudGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IGZyb21JZFxuICAgKiBAcGFyYW0ge05vZGUuaWR9IHRvSWRcbiAgICogQHBhcmFtIHt2aXMuRWRnZX0gYmFzZUVkZ2VcbiAgICogQHBhcmFtIHtvYmplY3R9IGNsdXN0ZXJFZGdlUHJvcGVydGllc1xuICAgKiBAcGFyYW0ge29iamVjdH0gZXh0cmFPcHRpb25zXG4gICAqIEByZXR1cm5zIHtFZGdlfSBuZXdseSBjcmVhdGVkIGNsdXN0ZXJlZCBlZGdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQ2x1c3RlcmVkRWRnZShcbiAgICBmcm9tSWQsXG4gICAgdG9JZCxcbiAgICBiYXNlRWRnZSxcbiAgICBjbHVzdGVyRWRnZVByb3BlcnRpZXMsXG4gICAgZXh0cmFPcHRpb25zXG4gICkge1xuICAgIC8vIGNvcHkgdGhlIG9wdGlvbnMgb2YgdGhlIGVkZ2Ugd2Ugd2lsbCByZXBsYWNlXG4gICAgY29uc3QgY2xvbmVkT3B0aW9ucyA9IE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhiYXNlRWRnZSwgXCJlZGdlXCIpO1xuICAgIC8vIG1ha2Ugc3VyZSB0aGUgcHJvcGVydGllcyBvZiBjbHVzdGVyRWRnZXMgYXJlIHN1cGVyaW1wb3NlZCBvbiBpdFxuICAgIGRlZXBFeHRlbmQoY2xvbmVkT3B0aW9ucywgY2x1c3RlckVkZ2VQcm9wZXJ0aWVzKTtcblxuICAgIC8vIHNldCB1cCB0aGUgZWRnZVxuICAgIGNsb25lZE9wdGlvbnMuZnJvbSA9IGZyb21JZDtcbiAgICBjbG9uZWRPcHRpb25zLnRvID0gdG9JZDtcbiAgICBjbG9uZWRPcHRpb25zLmlkID0gXCJjbHVzdGVyRWRnZTpcIiArIHJhbmRvbVVVSUQoKTtcblxuICAgIC8vIGFwcGx5IHRoZSBlZGdlIHNwZWNpZmljIG9wdGlvbnMgdG8gaXQgaWYgc3BlY2lmaWVkXG4gICAgaWYgKGV4dHJhT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWVwRXh0ZW5kKGNsb25lZE9wdGlvbnMsIGV4dHJhT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3RWRnZSA9IHRoaXMuYm9keS5mdW5jdGlvbnMuY3JlYXRlRWRnZShjbG9uZWRPcHRpb25zKTtcbiAgICBuZXdFZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzID0gW2Jhc2VFZGdlLmlkXTtcbiAgICBuZXdFZGdlLmNvbm5lY3QoKTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBuZXcgZWRnZVxuICAgIHRoaXMuYm9keS5lZGdlc1tuZXdFZGdlLmlkXSA9IG5ld0VkZ2U7XG5cbiAgICByZXR1cm4gbmV3RWRnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIHBhc3NlZCBjaGlsZCBub2RlcyBhbmQgZWRnZXMgdG8gdGhlIGdpdmVuIGNsdXN0ZXIgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3QgfCBOb2RlfSBjaGlsZE5vZGVzICBoYXNoIG9mIG5vZGVzIG9yIHNpbmdsZSBub2RlIHRvIGFkZCBpbiBjbHVzdGVyXG4gICAqIEBwYXJhbSB7b2JqZWN0IHwgRWRnZX0gY2hpbGRFZGdlcyAgaGFzaCBvZiBlZGdlcyBvciBzaW5nbGUgZWRnZSB0byB0YWtlIGludG8gYWNjb3VudCB3aGVuIGNsdXN0ZXJpbmdcbiAgICogQHBhcmFtIHtOb2RlfSBjbHVzdGVyTm9kZSAgY2x1c3RlciBub2RlIHRvIGFkZCBub2RlcyBhbmQgZWRnZXMgdG9cbiAgICogQHBhcmFtIHtvYmplY3R9IFtjbHVzdGVyRWRnZVByb3BlcnRpZXNdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2x1c3RlckVkZ2VzKGNoaWxkTm9kZXMsIGNoaWxkRWRnZXMsIGNsdXN0ZXJOb2RlLCBjbHVzdGVyRWRnZVByb3BlcnRpZXMpIHtcbiAgICBpZiAoY2hpbGRFZGdlcyBpbnN0YW5jZW9mIEVkZ2UpIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBjaGlsZEVkZ2VzO1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBvYmpbZWRnZS5pZF0gPSBlZGdlO1xuICAgICAgY2hpbGRFZGdlcyA9IG9iajtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGROb2RlcyBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBjaGlsZE5vZGVzO1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBvYmpbbm9kZS5pZF0gPSBub2RlO1xuICAgICAgY2hpbGROb2RlcyA9IG9iajtcbiAgICB9XG5cbiAgICBpZiAoY2x1c3Rlck5vZGUgPT09IHVuZGVmaW5lZCB8fCBjbHVzdGVyTm9kZSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiX2NsdXN0ZXJFZGdlczogcGFyYW1ldGVyIGNsdXN0ZXJOb2RlIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGlmIChjbHVzdGVyRWRnZVByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVGFrZSB0aGUgcmVxdWlyZWQgcHJvcGVydGllcyBmcm9tIHRoZSBjbHVzdGVyIG5vZGVcbiAgICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllcyA9IGNsdXN0ZXJOb2RlLmNsdXN0ZXJFZGdlUHJvcGVydGllcztcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgdGhlIG5ldyBlZGdlcyB0aGF0IHdpbGwgY29ubmVjdCB0byB0aGUgY2x1c3Rlci5cbiAgICAvLyBBbGwgc2VsZi1yZWZlcmVuY2luZyBlZGdlcyB3aWxsIGJlIGFkZGVkIHRvIGNoaWxkRWRnZXMgaGVyZS5cbiAgICB0aGlzLl9jcmVhdGVDbHVzdGVyRWRnZXMoXG4gICAgICBjaGlsZE5vZGVzLFxuICAgICAgY2hpbGRFZGdlcyxcbiAgICAgIGNsdXN0ZXJOb2RlLFxuICAgICAgY2x1c3RlckVkZ2VQcm9wZXJ0aWVzXG4gICAgKTtcblxuICAgIC8vIGRpc2FibGUgdGhlIGNoaWxkRWRnZXNcbiAgICBmb3IgKGNvbnN0IGVkZ2VJZCBpbiBjaGlsZEVkZ2VzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkRWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBlZGdlID0gdGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF07XG4gICAgICAgICAgLy8gY2FjaGUgdGhlIG9wdGlvbnMgYmVmb3JlIGNoYW5naW5nXG4gICAgICAgICAgdGhpcy5fYmFja3VwRWRnZU9wdGlvbnMoZWRnZSk7XG4gICAgICAgICAgLy8gZGlzYWJsZSBwaHlzaWNzIGFuZCBoaWRlIHRoZSBlZGdlXG4gICAgICAgICAgZWRnZS5zZXRPcHRpb25zKHsgcGh5c2ljczogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkaXNhYmxlIHRoZSBjaGlsZE5vZGVzXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gY2hpbGROb2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZE5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIHRoaXMuY2x1c3RlcmVkTm9kZXNbbm9kZUlkXSA9IHtcbiAgICAgICAgICBjbHVzdGVySWQ6IGNsdXN0ZXJOb2RlLmlkLFxuICAgICAgICAgIG5vZGU6IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS5zZXRPcHRpb25zKHsgcGh5c2ljczogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpbiB3aGljaCBjbHVzdGVyIGdpdmVuIG5vZGVJZCByZXNpZGVzLlxuICAgKlxuICAgKiBJZiBub3QgaW4gY2x1c3RlciwgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICpcbiAgICogTk9URTogSWYgeW91IGtub3cgYSBjbGVhbmVyIHdheSB0byBkbyB0aGlzLCBwbGVhc2UgZW5saWdodGVuIG1lICh3aW1yaWpuZGVycykuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEByZXR1cm5zIHtOb2RlfHVuZGVmaW5lZH0gTm9kZSBpbnN0YW5jZSBmb3IgY2x1c3RlciwgaWYgcHJlc2VudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldENsdXN0ZXJOb2RlRm9yTm9kZShub2RlSWQpIHtcbiAgICBpZiAobm9kZUlkID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgY2x1c3RlcmVkTm9kZSA9IHRoaXMuY2x1c3RlcmVkTm9kZXNbbm9kZUlkXTtcblxuICAgIC8vIE5PVEU6IElmIG5vIGNsdXN0ZXIgaW5mbyBmb3VuZCwgaXQgc2hvdWxkIGFjdHVhbGx5IGJlIGFuIGVycm9yXG4gICAgaWYgKGNsdXN0ZXJlZE5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBjbHVzdGVySWQgPSBjbHVzdGVyZWROb2RlLmNsdXN0ZXJJZDtcbiAgICBpZiAoY2x1c3RlcklkID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gdGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJJZF07XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIGZvciBjb25kaXRpb25hbGx5IHJlbW92aW5nIGl0ZW1zIGluIGFycmF5XG4gICAqXG4gICAqIERvbmUgbGlrZSB0aGlzIGJlY2F1c2UgQXJyYXkuZmlsdGVyKCkgaXMgbm90IGZ1bGx5IHN1cHBvcnRlZCBieSBhbGwgSUUncy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9maWx0ZXIoYXJyLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHJldCA9IFtdO1xuXG4gICAgZm9yRWFjaChhcnIsIChpdGVtKSA9PiB7XG4gICAgICBpZiAoY2FsbGJhY2soaXRlbSkpIHtcbiAgICAgICAgcmV0LnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNjYW4gYWxsIGVkZ2VzIGZvciBjaGFuZ2VzIGluIGNsdXN0ZXJpbmcgYW5kIGFkanVzdCB0aGlzIGlmIG5lY2Vzc2FyeS5cbiAgICpcbiAgICogQ2FsbCB0aGlzIChpbnRlcm5hbGx5KSBhZnRlciB0aGVyZSBoYXMgYmVlbiBhIGNoYW5nZSBpbiBub2RlIG9yIGVkZ2UgZGF0YS5cbiAgICpcbiAgICogUHJlOiBTdGF0ZXMgb2YgdGhpcy5ib2R5Lm5vZGVzIGFuZCB0aGlzLmJvZHkuZWRnZXMgY29uc2lzdGVudFxuICAgKiBQcmU6IHRoaXMuY2x1c3RlcmVkTm9kZXMgYW5kIHRoaXMuY2x1c3RlcmVkRWRnZSBjb25zaXN0ZW50IHdpdGggY29udGFpbmVkTm9kZXMgYW5kIGNvbnRhaW5lZEVkZ2VzXG4gICAqICAgICAgb2YgY2x1c3RlciBub2Rlcy5cbiAgICovXG4gIF91cGRhdGVTdGF0ZSgpIHtcbiAgICBsZXQgbm9kZUlkO1xuICAgIGNvbnN0IGRlbGV0ZWROb2RlSWRzID0gW107XG4gICAgY29uc3QgZGVsZXRlZEVkZ2VJZHMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGNsdXN0ZXJpbmcgbm9kZXMgb25seVxuICAgICAqXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggY2x1c3RlciBub2RlXG4gICAgICovXG4gICAgY29uc3QgZWFjaENsdXN0ZXJOb2RlID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgICBmb3JFYWNoKHRoaXMuYm9keS5ub2RlcywgKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKG5vZGUuaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvL1xuICAgIC8vIFJlbW92ZSBkZWxldGVkIHJlZ3VsYXIgbm9kZXMgZnJvbSBjbHVzdGVyaW5nXG4gICAgLy9cblxuICAgIC8vIERldGVybWluZSB0aGUgZGVsZXRlZCBub2Rlc1xuICAgIGZvciAobm9kZUlkIGluIHRoaXMuY2x1c3RlcmVkTm9kZXMpIHtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY2x1c3RlcmVkTm9kZXMsIG5vZGVJZCkpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuXG4gICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZWROb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbm9kZXMgZnJvbSBjbHVzdGVyIG5vZGVzXG4gICAgZWFjaENsdXN0ZXJOb2RlKGZ1bmN0aW9uIChjbHVzdGVyTm9kZSkge1xuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBkZWxldGVkTm9kZUlkcy5sZW5ndGg7IG4rKykge1xuICAgICAgICBkZWxldGUgY2x1c3Rlck5vZGUuY29udGFpbmVkTm9kZXNbZGVsZXRlZE5vZGVJZHNbbl1dO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gUmVtb3ZlIG5vZGVzIGZyb20gY2x1c3RlciBsaXN0XG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBkZWxldGVkTm9kZUlkcy5sZW5ndGg7IG4rKykge1xuICAgICAgZGVsZXRlIHRoaXMuY2x1c3RlcmVkTm9kZXNbZGVsZXRlZE5vZGVJZHNbbl1dO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVtb3ZlIGRlbGV0ZWQgZWRnZXMgZnJvbSBjbHVzdGVyaW5nXG4gICAgLy9cblxuICAgIC8vIEFkZCB0aGUgZGVsZXRlZCBjbHVzdGVyZWQgZWRnZXMgdG8gdGhlIGxpc3RcbiAgICBmb3JFYWNoKHRoaXMuY2x1c3RlcmVkRWRnZXMsIChlZGdlSWQpID0+IHtcbiAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgICAgIGlmIChlZGdlID09PSB1bmRlZmluZWQgfHwgIWVkZ2UuZW5kUG9pbnRzVmFsaWQoKSkge1xuICAgICAgICBkZWxldGVkRWRnZUlkc1tlZGdlSWRdID0gZWRnZUlkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2x1c3RlciBub2RlcyBjYW4gYWxzbyBjb250YWluIGVkZ2VzIHdoaWNoIGFyZSBub3QgY2x1c3RlcmVkLFxuICAgIC8vIGkuZS4gbm9kZXMgMS0yIHdpdGhpbiBjbHVzdGVyIHdpdGggYW4gZWRnZSBpbiBiZXR3ZWVuLlxuICAgIC8vIFNvIHRoZSBjbHVzdGVyIG5vZGVzIGFsc28gbmVlZCB0byBiZSBzY2FubmVkIGZvciBpbnZhbGlkIGVkZ2VzXG4gICAgZWFjaENsdXN0ZXJOb2RlKGZ1bmN0aW9uIChjbHVzdGVyTm9kZSkge1xuICAgICAgZm9yRWFjaChjbHVzdGVyTm9kZS5jb250YWluZWRFZGdlcywgKGVkZ2UsIGVkZ2VJZCkgPT4ge1xuICAgICAgICBpZiAoIWVkZ2UuZW5kUG9pbnRzVmFsaWQoKSAmJiAhZGVsZXRlZEVkZ2VJZHNbZWRnZUlkXSkge1xuICAgICAgICAgIGRlbGV0ZWRFZGdlSWRzW2VkZ2VJZF0gPSBlZGdlSWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gQWxzbyBzY2FuIGZvciBjbHVzdGVyIGVkZ2VzIHdoaWNoIG5lZWQgdG8gYmUgcmVtb3ZlZCBpbiB0aGUgYWN0aXZlIGxpc3QuXG4gICAgLy8gUmVndWxhciBlZGdlcyBoYXZlIGJlZW4gcmVtb3ZlZCBiZWZvcmVoYW5kLCBzbyB0aGlzIG9ubHkgcGlja3MgdXAgdGhlIGNsdXN0ZXIgZWRnZXMuXG4gICAgZm9yRWFjaCh0aGlzLmJvZHkuZWRnZXMsIChlZGdlLCBlZGdlSWQpID0+IHtcbiAgICAgIC8vIEV4cGxpY2l0bHkgc2NhbiB0aGUgY29udGFpbmVkIGVkZ2VzIGZvciB2YWxpZGl0eVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgICAgY29uc3QgcmVwbGFjZWRJZHMgPSBlZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzO1xuICAgICAgaWYgKHJlcGxhY2VkSWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IG51bVZhbGlkID0gMDtcblxuICAgICAgICBmb3JFYWNoKHJlcGxhY2VkSWRzLCAoY29udGFpbmVkRWRnZUlkKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGFpbmVkRWRnZSA9IHRoaXMuYm9keS5lZGdlc1tjb250YWluZWRFZGdlSWRdO1xuXG4gICAgICAgICAgaWYgKGNvbnRhaW5lZEVkZ2UgIT09IHVuZGVmaW5lZCAmJiBjb250YWluZWRFZGdlLmVuZFBvaW50c1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIG51bVZhbGlkICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpc1ZhbGlkID0gbnVtVmFsaWQgPiAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVkZ2UuZW5kUG9pbnRzVmFsaWQoKSB8fCAhaXNWYWxpZCkge1xuICAgICAgICBkZWxldGVkRWRnZUlkc1tlZGdlSWRdID0gZWRnZUlkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gUmVtb3ZlIGVkZ2VzIGZyb20gY2x1c3RlciBub2Rlc1xuICAgIGVhY2hDbHVzdGVyTm9kZSgoY2x1c3Rlck5vZGUpID0+IHtcbiAgICAgIGZvckVhY2goZGVsZXRlZEVkZ2VJZHMsIChkZWxldGVkRWRnZUlkKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBjbHVzdGVyTm9kZS5jb250YWluZWRFZGdlc1tkZWxldGVkRWRnZUlkXTtcblxuICAgICAgICBmb3JFYWNoKGNsdXN0ZXJOb2RlLmVkZ2VzLCAoZWRnZSwgbSkgPT4ge1xuICAgICAgICAgIGlmIChlZGdlLmlkID09PSBkZWxldGVkRWRnZUlkKSB7XG4gICAgICAgICAgICBjbHVzdGVyTm9kZS5lZGdlc1ttXSA9IG51bGw7IC8vIERvbid0IHdhbnQgdG8gZGlyZWN0bHkgZGVsZXRlIGhlcmUsIGJlY2F1c2UgaW4gdGhlIGxvb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzID0gdGhpcy5fZmlsdGVyKFxuICAgICAgICAgICAgZWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcyxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChpZCkge1xuICAgICAgICAgICAgICByZXR1cm4gIWRlbGV0ZWRFZGdlSWRzW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBDbGVhbiB1cCB0aGUgbnVsbHNcbiAgICAgICAgY2x1c3Rlck5vZGUuZWRnZXMgPSB0aGlzLl9maWx0ZXIoY2x1c3Rlck5vZGUuZWRnZXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0gIT09IG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBjbHVzdGVyIGxpc3RcbiAgICBmb3JFYWNoKGRlbGV0ZWRFZGdlSWRzLCAoZWRnZUlkKSA9PiB7XG4gICAgICBkZWxldGUgdGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlSWRdO1xuICAgIH0pO1xuXG4gICAgLy8gUmVtb3ZlIGNsdXN0ZXIgZWRnZXMgZnJvbSBhY3RpdmUgbGlzdCAodGhpcy5ib2R5LmVkZ2VzKS5cbiAgICAvLyBkZWxldGVkRWRnZUlkcyBzdGlsbCBjb250YWlucyBpZCBvZiByZWd1bGFyIGVkZ2VzLCBidXQgdGhlc2Ugc2hvdWxkIGFsbFxuICAgIC8vIGJlIGdvbmUgd2hlbiB5b3UgcmVhY2ggaGVyZS5cbiAgICBmb3JFYWNoKGRlbGV0ZWRFZGdlSWRzLCAoZWRnZUlkKSA9PiB7XG4gICAgICBkZWxldGUgdGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF07XG4gICAgfSk7XG5cbiAgICAvL1xuICAgIC8vIENoZWNrIGNoYW5nZWQgY2x1c3RlciBzdGF0ZSBvZiBlZGdlc1xuICAgIC8vXG5cbiAgICAvLyBJdGVyYXRpbmcgb3ZlciBrZXlzIGhlcmUsIGJlY2F1c2UgZWRnZXMgbWF5IGJlIHJlbW92ZWQgaW4gdGhlIGxvb3BcbiAgICBjb25zdCBpZHMgPSBPYmplY3Qua2V5cyh0aGlzLmJvZHkuZWRnZXMpO1xuICAgIGZvckVhY2goaWRzLCAoZWRnZUlkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlID0gdGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF07XG5cbiAgICAgIGNvbnN0IHNob3VsZEJlQ2x1c3RlcmVkID1cbiAgICAgICAgdGhpcy5faXNDbHVzdGVyZWROb2RlKGVkZ2UuZnJvbUlkKSB8fCB0aGlzLl9pc0NsdXN0ZXJlZE5vZGUoZWRnZS50b0lkKTtcbiAgICAgIGlmIChzaG91bGRCZUNsdXN0ZXJlZCA9PT0gdGhpcy5faXNDbHVzdGVyZWRFZGdlKGVkZ2UuaWQpKSB7XG4gICAgICAgIHJldHVybjsgLy8gYWxsIGlzIHdlbGxcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZEJlQ2x1c3RlcmVkKSB7XG4gICAgICAgIC8vIGFkZCBlZGdlIHRvIGNsdXN0ZXJpbmdcbiAgICAgICAgY29uc3QgY2x1c3RlckZyb20gPSB0aGlzLl9nZXRDbHVzdGVyTm9kZUZvck5vZGUoZWRnZS5mcm9tSWQpO1xuICAgICAgICBpZiAoY2x1c3RlckZyb20gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX2NsdXN0ZXJFZGdlcyh0aGlzLmJvZHkubm9kZXNbZWRnZS5mcm9tSWRdLCBlZGdlLCBjbHVzdGVyRnJvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbHVzdGVyVG8gPSB0aGlzLl9nZXRDbHVzdGVyTm9kZUZvck5vZGUoZWRnZS50b0lkKTtcbiAgICAgICAgaWYgKGNsdXN0ZXJUbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fY2x1c3RlckVkZ2VzKHRoaXMuYm9keS5ub2Rlc1tlZGdlLnRvSWRdLCBlZGdlLCBjbHVzdGVyVG8pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogY2hlY2sgdGhhdCBpdCB3b3JrcyBmb3IgYm90aCBlZGdlcyBjbHVzdGVyZWRcbiAgICAgICAgLy8gICAgICAgKFRoaXMgbWlnaHQgYmUgcGFyYW5vaWEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5fY2x1c3RlckVkZ2VzW2VkZ2VJZF07XG4gICAgICAgIHRoaXMuX3Jlc3RvcmVFZGdlKGVkZ2UpO1xuICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgYmUgaGFwcGVuaW5nLCB0aGUgc3RhdGUgc2hvdWxkXG4gICAgICAgIC8vIGJlIHByb3Blcmx5IHVwZGF0ZWQgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgaXQgKmlzKiByZWFjaGVkIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLCB0aGVuIHdlIGhhdmUgdG8gaW1wbGVtZW50XG4gICAgICAgIC8vIHVuZG8gY2x1c3RlcmluZyBmb3IgdGhpcyBlZGdlIGhlcmUuXG4gICAgICAgIC8vIHRocm93IG5ldyBFcnJvcigncmVtb3ZlIGVkZ2UgZnJvbSBjbHVzdGVyaW5nIG5vdCBpbXBsZW1lbnRlZCEnKVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2x1c3RlcnMgbWF5IGJlIG5lc3RlZCB0byBhbnkgbGV2ZWwuIEtlZXAgb24gb3BlbmluZyB1bnRpbCBub3RoaW5nIHRvIG9wZW5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGxldCBjb250aW51ZUxvb3AgPSB0cnVlO1xuICAgIHdoaWxlIChjb250aW51ZUxvb3ApIHtcbiAgICAgIGNvbnN0IGNsdXN0ZXJzVG9PcGVuID0gW107XG5cbiAgICAgIC8vIERldGVybWluZSB0aGUgaWQncyBvZiBjbHVzdGVycyB0aGF0IG5lZWQgb3BlbmluZ1xuICAgICAgZWFjaENsdXN0ZXJOb2RlKGZ1bmN0aW9uIChjbHVzdGVyTm9kZSkge1xuICAgICAgICBjb25zdCBudW1Ob2RlcyA9IE9iamVjdC5rZXlzKGNsdXN0ZXJOb2RlLmNvbnRhaW5lZE5vZGVzKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGFsbG93U2luZ2xlID0gY2x1c3Rlck5vZGUub3B0aW9ucy5hbGxvd1NpbmdsZU5vZGVDbHVzdGVyID09PSB0cnVlO1xuICAgICAgICBpZiAoKGFsbG93U2luZ2xlICYmIG51bU5vZGVzIDwgMSkgfHwgKCFhbGxvd1NpbmdsZSAmJiBudW1Ob2RlcyA8IDIpKSB7XG4gICAgICAgICAgY2x1c3RlcnNUb09wZW4ucHVzaChjbHVzdGVyTm9kZS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBPcGVuIHRoZW1cbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgY2x1c3RlcnNUb09wZW4ubGVuZ3RoOyArK24pIHtcbiAgICAgICAgdGhpcy5vcGVuQ2x1c3RlcihcbiAgICAgICAgICBjbHVzdGVyc1RvT3BlbltuXSxcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBmYWxzZSAvKiBEb24ndCByZWZyZXNoLCB3ZSdyZSBpbiBhbiByZWZyZXNoL3VwZGF0ZSBhbHJlYWR5ICovXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlTG9vcCA9IGNsdXN0ZXJzVG9PcGVuLmxlbmd0aCA+IDA7XG4gICAgICBjaGFuZ2VkID0gY2hhbmdlZCB8fCBjb250aW51ZUxvb3A7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVN0YXRlKCk7IC8vIFJlZG8gdGhpcyBtZXRob2QgKHJlY3Vyc2lvbiBwb3NzaWJsZSEgc2hvdWxkIGJlIHNhZmUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpZiBub2RlIHdpdGggZ2l2ZW4gaWQgaXMgcGFydCBvZiBhIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHBhcnQgb2YgYSBjbHVzdGVyLlxuICAgKi9cbiAgX2lzQ2x1c3RlcmVkTm9kZShub2RlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIGVkZ2Ugd2l0aCBnaXZlbiBpZCBpcyBub3QgdmlzaWJsZSBkdWUgdG8gY2x1c3RlcmluZy5cbiAgICpcbiAgICogQW4gZWRnZSBpcyBjb25zaWRlcmVkIGNsdXN0ZXJlZCBpZjpcbiAgICogLSBpdCBpcyBkaXJlY3RseSByZXBsYWNlZCBieSBhIGNsdXN0ZXJpbmcgZWRnZVxuICAgKiAtIGFueSBvZiBpdHMgY29ubmVjdGluZyBub2RlcyBpcyBpbiBhIGNsdXN0ZXJcbiAgICpcbiAgICogQHBhcmFtIHt2aXMuRWRnZS5pZH0gZWRnZUlkXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHBhcnQgb2YgYSBjbHVzdGVyLlxuICAgKi9cbiAgX2lzQ2x1c3RlcmVkRWRnZShlZGdlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlSWRdICE9PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2x1c3RlckVuZ2luZTtcbiIsICJpbXBvcnQgeyBzZWxlY3RpdmVEZWVwRXh0ZW5kIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSB0byBhIHVzYWJsZSBmb3JtLlxuICpcbiAqIFNwZWNpZmljYWxseSwgc2V0IHVwIHRoaXMgbWV0aG9kIGZvciB0aGUgY2FzZSBvZiBydW5uaW5nIG9uIG5vZGUuanMgd2l0aCBqc2RvbSBlbmFibGVkLlxuICpcbiAqIE5PVEVTOlxuICpcbiAqIE9uIG5vZGUuanMsIHdoZW4gY2FsbGluZyB0aGlzIGRpcmVjdGx5IG91dHNpZGUgb2YgdGhpcyBjbGFzcywgYHdpbmRvd2AgaXMgbm90IGRlZmluZWQuXG4gKiAgIFRoaXMgaGFwcGVucyBldmVuIGlmIGpzZG9tIGlzIHVzZWQuXG4gKiBGb3Igbm9kZS5qcyArIGpzZG9tLCBgd2luZG93YCBpcyBhdmFpbGFibGUgYXQgdGhlIG1vbWVudCB0aGUgY29uc3RydWN0b3IgaXMgY2FsbGVkLlxuICogICBGb3IgdGhpcyByZWFzb24sIHRoZSBjYWxsZWQgaXMgcGxhY2VkIHdpdGhpbiB0aGUgY29uc3RydWN0b3IuXG4gKiBFdmVuIHRoZW4sIGB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKClgIGlzIG5vdCBkZWZpbmVkLCBzbyBpdCBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZC5cbiAqIER1cmluZyB1bml0IHRlc3RpbmcsIGl0IGhhcHBlbnMgdGhhdCB0aGUgd2luZG93IG9iamVjdCBpcyByZXNldCBkdXJpbmcgZXhlY3V0aW9uLCBjYXVzaW5nXG4gKiAgIGEgcnVudGltZSBlcnJvciBkdWUgdG8gbWlzc2luZyBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKClgLiBUaGlzIG5lZWRzIHRvIGJlIGNvbXBlbnNhdGVkIGZvcixcbiAqICAgc2VlIGBfcmVxdWVzdE5leHRGcmFtZSgpYC5cbiAqIFNpbmNlIHRoaXMgaXMgYSBnbG9iYWwgb2JqZWN0LCBpdCBtYXkgYWZmZWN0IG90aGVyIG1vZHVsZXMgYmVzaWRlcyBgTmV0d29ya2AuIFdpdGggbm9ybWFsXG4gKiAgIHVzYWdlLCB0aGlzIGRvZXMgbm90IGNhdXNlIGFueSBwcm9ibGVtcy4gRHVyaW5nIHVuaXQgdGVzdGluZywgZXJyb3JzIG1heSBvY2N1ci4gVGhlc2UgaGF2ZVxuICogICBiZWVuIGNvbXBlbnNhdGVkIGZvciwgc2VlIGNvbW1lbnQgYmxvY2sgaW4gX3JlcXVlc3ROZXh0RnJhbWUoKS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfaW5pdFJlcXVlc3RBbmltYXRpb25GcmFtZSgpIHtcbiAgbGV0IGZ1bmM7XG5cbiAgaWYgKHdpbmRvdyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZnVuYyA9XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgICB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgICB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgICB3aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG4gIH1cblxuICBpZiAoZnVuYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gd2luZG93IG9yIG1ldGhvZCBub3QgcHJlc2VudCwgc2V0dGluZyBtb2NrIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIC8vY29uc29sZS5sb2coXCJDYWxsZWQgbW9jayByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIik7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmM7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgY2FudmFzIHJlbmRlcmVyXG4gKi9cbmNsYXNzIENhbnZhc1JlbmRlcmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGNhbnZhcykge1xuICAgIF9pbml0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcblxuICAgIHRoaXMucmVkcmF3UmVxdWVzdGVkID0gZmFsc2U7XG4gICAgdGhpcy5yZW5kZXJUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlcXVpcmVzVGltZW91dCA9IHRydWU7XG4gICAgdGhpcy5yZW5kZXJpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlclJlcXVlc3RzID0gMDtcbiAgICB0aGlzLmFsbG93UmVkcmF3ID0gdHJ1ZTtcblxuICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnpvb21pbmcgPSBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgaGlkZUVkZ2VzT25EcmFnOiBmYWxzZSxcbiAgICAgIGhpZGVFZGdlc09uWm9vbTogZmFsc2UsXG4gICAgICBoaWRlTm9kZXNPbkRyYWc6IGZhbHNlLFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5fZGV0ZXJtaW5lQnJvd3Nlck1ldGhvZCgpO1xuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkcmFnU3RhcnRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkcmFnRW5kXCIsICgpID0+IHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInpvb21cIiwgKCkgPT4ge1xuICAgICAgdGhpcy56b29taW5nID0gdHJ1ZTtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy56b29tVGltZW91dElkKTtcbiAgICAgIHRoaXMuem9vbVRpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy56b29taW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RSZWRyYXcuYmluZCh0aGlzKSgpO1xuICAgICAgfSwgMjUwKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9yZXNpemVOb2Rlc1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLl9yZXNpemVOb2RlcygpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX3JlZHJhd1wiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5yZW5kZXJpbmdBY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX3JlZHJhdygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2Jsb2NrUmVkcmF3XCIsICgpID0+IHtcbiAgICAgIHRoaXMuYWxsb3dSZWRyYXcgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9hbGxvd1JlZHJhd1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLmFsbG93UmVkcmF3ID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVkcmF3UmVxdWVzdGVkID0gZmFsc2U7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfcmVxdWVzdFJlZHJhd1wiLCB0aGlzLl9yZXF1ZXN0UmVkcmF3LmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX3N0YXJ0UmVuZGVyaW5nXCIsICgpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyUmVxdWVzdHMgKz0gMTtcbiAgICAgIHRoaXMucmVuZGVyaW5nQWN0aXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3N0YXJ0UmVuZGVyaW5nKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfc3RvcFJlbmRlcmluZ1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlclJlcXVlc3RzIC09IDE7XG4gICAgICB0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9IHRoaXMucmVuZGVyUmVxdWVzdHMgPiAwO1xuICAgICAgdGhpcy5yZW5kZXJUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJSZXF1ZXN0cyA9IDA7XG4gICAgICB0aGlzLmFsbG93UmVkcmF3ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucmVxdWlyZXNUaW1lb3V0ID09PSB0cnVlKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlbmRlclRpbWVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJlbmRlclRpbWVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9mZigpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBbXCJoaWRlRWRnZXNPbkRyYWdcIiwgXCJoaWRlRWRnZXNPblpvb21cIiwgXCJoaWRlTm9kZXNPbkRyYWdcIl07XG4gICAgICBzZWxlY3RpdmVEZWVwRXh0ZW5kKGZpZWxkcywgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSB0aGUgZHJhd2luZyBvZiB0aGUgbmV4dCBmcmFtZS5cbiAgICpcbiAgICogQ2FsbHMgdGhlIGNhbGxiYWNrIHdoZW4gdGhlIG5leHQgZnJhbWUgY2FuIG9yIHdpbGwgYmUgZHJhd24uXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWxheSAtIHRpbWVvdXQgY2FzZSBvbmx5LCB3YWl0IHRoaXMgbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICAgKiBAcmV0dXJucyB7RnVuY3Rpb24gfCB1bmRlZmluZWR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVxdWVzdE5leHRGcmFtZShjYWxsYmFjaywgZGVsYXkpIHtcbiAgICAvLyBEdXJpbmcgdW5pdCB0ZXN0aW5nLCBpdCBoYXBwZW5zIHRoYXQgdGhlIG1vY2sgd2luZG93IG9iamVjdCBpcyByZXNldCB3aGlsZVxuICAgIC8vIHRoZSBuZXh0IGZyYW1lIGlzIHN0aWxsIHBlbmRpbmcuIFRoZW4sIGVpdGhlciAnd2luZG93JyBpcyBub3QgcHJlc2VudCwgb3JcbiAgICAvLyAncmVxdWVzdEFuaW1hdGlvbkZyYW1lKCknIGlzIG5vdCBwcmVzZW50IGJlY2F1c2UgaXQgaXMgbm90IGRlZmluZWQgb24gdGhlXG4gICAgLy8gbW9jayB3aW5kb3cgb2JqZWN0LlxuICAgIC8vXG4gICAgLy8gQXMgYSBjb25zZXF1ZW5jZSwgdW5yZWxhdGVkIHVuaXQgdGVzdHMgbWF5IGFwcGVhciB0byBmYWlsLCBldmVuIGlmIHRoZSBwcm9ibGVtXG4gICAgLy8gZGVzY3JpYmVkIGhhcHBlbnMgaW4gdGhlIGN1cnJlbnQgdW5pdCB0ZXN0LlxuICAgIC8vXG4gICAgLy8gVGhpcyBpcyBub3Qgc29tZXRoaW5nIHRoYXQgd2lsbCBoYXBwZW4gaW4gbm9ybWFsIG9wZXJhdGlvbiwgYnV0IHdlIHN0aWxsIG5lZWRcbiAgICAvLyB0byB0YWtlIGl0IGludG8gYWNjb3VudC5cbiAgICAvL1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47IC8vIERvaW5nIGBpZiAod2luZG93ID09PSB1bmRlZmluZWQpYCBkb2VzIG5vdCB3b3JrIGhlcmUhXG5cbiAgICBsZXQgdGltZXI7XG5cbiAgICBjb25zdCBteVdpbmRvdyA9IHdpbmRvdzsgLy8gR3JhYiBhIHJlZmVyZW5jZSB0byByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IHRoYXQgJ3dpbmRvdycgaXMgcmVzZXRcbiAgICAvLyB3aGlsZSBydW5uaW5nIHRoaXMgbWV0aG9kLlxuXG4gICAgaWYgKHRoaXMucmVxdWlyZXNUaW1lb3V0ID09PSB0cnVlKSB7XG4gICAgICAvLyB3YWl0IGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYW5kIHBlcmZvcm0gdGhlIGFuaW1hdGlvbiBzdGVwIGZ1bmN0aW9uXG4gICAgICB0aW1lciA9IG15V2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG15V2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgICAgICB0aW1lciA9IG15V2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRpbWVyO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RhcnRSZW5kZXJpbmcoKSB7XG4gICAgaWYgKHRoaXMucmVuZGVyaW5nQWN0aXZlID09PSB0cnVlKSB7XG4gICAgICBpZiAodGhpcy5yZW5kZXJUaW1lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVuZGVyVGltZXIgPSB0aGlzLl9yZXF1ZXN0TmV4dEZyYW1lKFxuICAgICAgICAgIHRoaXMuX3JlbmRlclN0ZXAuYmluZCh0aGlzKSxcbiAgICAgICAgICB0aGlzLnNpbXVsYXRpb25JbnRlcnZhbFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbmRlclN0ZXAoKSB7XG4gICAgaWYgKHRoaXMucmVuZGVyaW5nQWN0aXZlID09PSB0cnVlKSB7XG4gICAgICAvLyByZXNldCB0aGUgcmVuZGVyVGltZXIgc28gYSBuZXcgc2NoZWR1bGVkIGFuaW1hdGlvbiBzdGVwIGNhbiBiZSBzZXRcbiAgICAgIHRoaXMucmVuZGVyVGltZXIgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVzVGltZW91dCA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyB0aGlzIHNjaGVkdWxlcyBhIG5ldyBzaW11bGF0aW9uIHN0ZXBcbiAgICAgICAgdGhpcy5fc3RhcnRSZW5kZXJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVkcmF3KCk7XG5cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVzVGltZW91dCA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gdGhpcyBzY2hlZHVsZXMgYSBuZXcgc2ltdWxhdGlvbiBzdGVwXG4gICAgICAgIHRoaXMuX3N0YXJ0UmVuZGVyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyB0aGUgbmV0d29yayB3aXRoIHRoZSBjdXJyZW50IGRhdGFcbiAgICogY2hhcnQgd2lsbCBiZSByZXNpemVkIHRvby5cbiAgICovXG4gIHJlZHJhdygpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwic2V0U2l6ZVwiKTtcbiAgICB0aGlzLl9yZWRyYXcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgdGhlIG5ldHdvcmsgd2l0aCB0aGUgY3VycmVudCBkYXRhXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVxdWVzdFJlZHJhdygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJlZHJhd1JlcXVlc3RlZCAhPT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5yZW5kZXJpbmdBY3RpdmUgPT09IGZhbHNlICYmXG4gICAgICB0aGlzLmFsbG93UmVkcmF3ID09PSB0cnVlXG4gICAgKSB7XG4gICAgICB0aGlzLnJlZHJhd1JlcXVlc3RlZCA9IHRydWU7XG4gICAgICB0aGlzLl9yZXF1ZXN0TmV4dEZyYW1lKCgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVkcmF3KGZhbHNlKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgdGhlIG5ldHdvcmsgd2l0aCB0aGUgY3VycmVudCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpZGRlbj1mYWxzZV0gfCBVc2VkIHRvIGdldCB0aGUgZmlyc3QgZXN0aW1hdGUgb2YgdGhlIG5vZGUgc2l6ZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHRoZSBub2RlcyBhcmUgZHJhd24gYWZ0ZXIgd2hpY2ggdGhleSBhcmUgcXVpY2tseSBkcmF3biBvdmVyLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlZHJhdyhoaWRkZW4gPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLmFsbG93UmVkcmF3ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiaW5pdFJlZHJhd1wiKTtcblxuICAgICAgdGhpcy5yZWRyYXdSZXF1ZXN0ZWQgPSBmYWxzZTtcblxuICAgICAgY29uc3QgZHJhd0xhdGVyID0ge1xuICAgICAgICBkcmF3RXh0ZXJuYWxMYWJlbHM6IG51bGwsXG4gICAgICB9O1xuXG4gICAgICAvLyB3aGVuIHRoZSBjb250YWluZXIgZGl2IHdhcyBoaWRkZW4sIHRoaXMgZml4ZXMgaXQgYmFjayB1cCFcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLndpZHRoID09PSAwIHx8XG4gICAgICAgIHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5oZWlnaHQgPT09IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNhbnZhcy5zZXRTaXplKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FudmFzLnNldFRyYW5zZm9ybSgpO1xuXG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGg7XG4gICAgICBjb25zdCBoID0gdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodDtcbiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG5cbiAgICAgIC8vIGlmIHRoZSBkaXYgaXMgaGlkZGVuLCB3ZSBzdG9wIHRoZSByZWRyYXcgaGVyZSBmb3IgcGVyZm9ybWFuY2UuXG4gICAgICBpZiAodGhpcy5jYW52YXMuZnJhbWUuY2xpZW50V2lkdGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXQgc2NhbGluZyBhbmQgdHJhbnNsYXRpb25cbiAgICAgIGN0eC5zYXZlKCk7XG4gICAgICBjdHgudHJhbnNsYXRlKHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLngsIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnkpO1xuICAgICAgY3R4LnNjYWxlKHRoaXMuYm9keS52aWV3LnNjYWxlLCB0aGlzLmJvZHkudmlldy5zY2FsZSk7XG5cbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJiZWZvcmVEcmF3aW5nXCIsIGN0eCk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG5cbiAgICAgIGlmIChoaWRkZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodGhpcy5kcmFnZ2luZyA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICh0aGlzLmRyYWdnaW5nID09PSB0cnVlICYmXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5oaWRlRWRnZXNPbkRyYWcgPT09IGZhbHNlKSkgJiZcbiAgICAgICAgICAodGhpcy56b29taW5nID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgKHRoaXMuem9vbWluZyA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuaGlkZUVkZ2VzT25ab29tID09PSBmYWxzZSkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX2RyYXdFZGdlcyhjdHgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9PT0gZmFsc2UgfHxcbiAgICAgICAgKHRoaXMuZHJhZ2dpbmcgPT09IHRydWUgJiYgdGhpcy5vcHRpb25zLmhpZGVOb2Rlc09uRHJhZyA9PT0gZmFsc2UpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgeyBkcmF3RXh0ZXJuYWxMYWJlbHMgfSA9IHRoaXMuX2RyYXdOb2RlcyhjdHgsIGhpZGRlbik7XG4gICAgICAgIGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbHMgPSBkcmF3RXh0ZXJuYWxMYWJlbHM7XG4gICAgICB9XG5cbiAgICAgIC8vIGRyYXcgdGhlIGFycm93cyBsYXN0IHNvIHRoZXkgd2lsbCBiZSBhdCB0aGUgdG9wXG4gICAgICBpZiAoaGlkZGVuID09PSBmYWxzZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRoaXMuZHJhZ2dpbmcgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAodGhpcy5kcmFnZ2luZyA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuaGlkZUVkZ2VzT25EcmFnID09PSBmYWxzZSkpICYmXG4gICAgICAgICAgKHRoaXMuem9vbWluZyA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICh0aGlzLnpvb21pbmcgPT09IHRydWUgJiYgdGhpcy5vcHRpb25zLmhpZGVFZGdlc09uWm9vbSA9PT0gZmFsc2UpKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9kcmF3QXJyb3dzKGN0eCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbHMgIT0gbnVsbCkge1xuICAgICAgICBkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWxzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoaWRkZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2RyYXdTZWxlY3Rpb25Cb3goY3R4KTtcbiAgICAgIH1cblxuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImFmdGVyRHJhd2luZ1wiLCBjdHgpO1xuICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuXG4gICAgICAvLyByZXN0b3JlIG9yaWdpbmFsIHNjYWxpbmcgYW5kIHRyYW5zbGF0aW9uXG4gICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgaWYgKGhpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgYWxsIG5vZGVzXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSAgIGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbHdheXNTaG93XVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc2l6ZU5vZGVzKCkge1xuICAgIHRoaXMuY2FudmFzLnNldFRyYW5zZm9ybSgpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoKTtcbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC50cmFuc2xhdGUodGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueCwgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueSk7XG4gICAgY3R4LnNjYWxlKHRoaXMuYm9keS52aWV3LnNjYWxlLCB0aGlzLmJvZHkudmlldy5zY2FsZSk7XG5cbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBsZXQgbm9kZTtcblxuICAgIC8vIHJlc2l6ZSBhbGwgbm9kZXNcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICBub2RlID0gbm9kZXNbbm9kZUlkXTtcbiAgICAgICAgbm9kZS5yZXNpemUoY3R4KTtcbiAgICAgICAgbm9kZS51cGRhdGVCb3VuZGluZ0JveChjdHgsIG5vZGUuc2VsZWN0ZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgc2NhbGluZyBhbmQgdHJhbnNsYXRpb25cbiAgICBjdHgucmVzdG9yZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBhbGwgbm9kZXNcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAgMkQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Fsd2F5c1Nob3ddXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGhpZ2hlciBsYXllcnMuXG4gICAqL1xuICBfZHJhd05vZGVzKGN0eCwgYWx3YXlzU2hvdyA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3Qgbm9kZUluZGljZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgbGV0IG5vZGU7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBbXTtcbiAgICBjb25zdCBob3ZlcmVkID0gW107XG4gICAgY29uc3QgbWFyZ2luID0gMjA7XG4gICAgY29uc3QgdG9wTGVmdCA9IHRoaXMuY2FudmFzLkRPTXRvQ2FudmFzKHsgeDogLW1hcmdpbiwgeTogLW1hcmdpbiB9KTtcbiAgICBjb25zdCBib3R0b21SaWdodCA9IHRoaXMuY2FudmFzLkRPTXRvQ2FudmFzKHtcbiAgICAgIHg6IHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCArIG1hcmdpbixcbiAgICAgIHk6IHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQgKyBtYXJnaW4sXG4gICAgfSk7XG4gICAgY29uc3Qgdmlld2FibGVBcmVhID0ge1xuICAgICAgdG9wOiB0b3BMZWZ0LnksXG4gICAgICBsZWZ0OiB0b3BMZWZ0LngsXG4gICAgICBib3R0b206IGJvdHRvbVJpZ2h0LnksXG4gICAgICByaWdodDogYm90dG9tUmlnaHQueCxcbiAgICB9O1xuXG4gICAgY29uc3QgZHJhd0V4dGVybmFsTGFiZWxzID0gW107XG5cbiAgICAvLyBkcmF3IHVuc2VsZWN0ZWQgbm9kZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgIC8vIHNldCBzZWxlY3RlZCBhbmQgaG92ZXJlZCBub2RlcyBhc2lkZVxuICAgICAgaWYgKG5vZGUuaG92ZXIpIHtcbiAgICAgICAgaG92ZXJlZC5wdXNoKG5vZGVJbmRpY2VzW2ldKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5pc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgc2VsZWN0ZWQucHVzaChub2RlSW5kaWNlc1tpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYWx3YXlzU2hvdyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IGRyYXdMYXRlciA9IG5vZGUuZHJhdyhjdHgpO1xuICAgICAgICAgIGlmIChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgZHJhd0V4dGVybmFsTGFiZWxzLnB1c2goZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5pc0JvdW5kaW5nQm94T3ZlcmxhcHBpbmdXaXRoKHZpZXdhYmxlQXJlYSkgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBkcmF3TGF0ZXIgPSBub2RlLmRyYXcoY3R4KTtcbiAgICAgICAgICBpZiAoZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRyYXdFeHRlcm5hbExhYmVscy5wdXNoKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUudXBkYXRlQm91bmRpbmdCb3goY3R4LCBub2RlLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpO1xuICAgIGNvbnN0IHNlbGVjdGVkTGVuZ3RoID0gc2VsZWN0ZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhvdmVyZWRMZW5ndGggPSBob3ZlcmVkLmxlbmd0aDtcblxuICAgIC8vIGRyYXcgdGhlIHNlbGVjdGVkIG5vZGVzIG9uIHRvcFxuICAgIGZvciAoaSA9IDA7IGkgPCBzZWxlY3RlZExlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gbm9kZXNbc2VsZWN0ZWRbaV1dO1xuICAgICAgY29uc3QgZHJhd0xhdGVyID0gbm9kZS5kcmF3KGN0eCk7XG4gICAgICBpZiAoZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsICE9IG51bGwpIHtcbiAgICAgICAgZHJhd0V4dGVybmFsTGFiZWxzLnB1c2goZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkcmF3IGhvdmVyZWQgbm9kZXMgYWJvdmUgZXZlcnl0aGluZyBlbHNlOiBmaXhlcyBodHRwczovL2dpdGh1Yi5jb20vdmlzanMvdmlzLW5ldHdvcmsvaXNzdWVzLzIyNlxuICAgIGZvciAoaSA9IDA7IGkgPCBob3ZlcmVkTGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tob3ZlcmVkW2ldXTtcbiAgICAgIGNvbnN0IGRyYXdMYXRlciA9IG5vZGUuZHJhdyhjdHgpO1xuICAgICAgaWYgKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCAhPSBudWxsKSB7XG4gICAgICAgIGRyYXdFeHRlcm5hbExhYmVscy5wdXNoKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYXdFeHRlcm5hbExhYmVsczogKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGRyYXcgb2YgZHJhd0V4dGVybmFsTGFiZWxzKSB7XG4gICAgICAgICAgZHJhdygpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IGFsbCBlZGdlc1xuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4ICAyRCBjb250ZXh0IG9mIGEgSFRNTCBjYW52YXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3RWRnZXMoY3R4KSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLmJvZHkuZWRnZUluZGljZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUluZGljZXNbaV1dO1xuICAgICAgaWYgKGVkZ2UuY29ubmVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgIGVkZ2UuZHJhdyhjdHgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgYWxsIGFycm93c1xuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4ICAyRCBjb250ZXh0IG9mIGEgSFRNTCBjYW52YXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3QXJyb3dzKGN0eCkge1xuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5ib2R5LmVkZ2VzO1xuICAgIGNvbnN0IGVkZ2VJbmRpY2VzID0gdGhpcy5ib2R5LmVkZ2VJbmRpY2VzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2VkZ2VJbmRpY2VzW2ldXTtcbiAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBlZGdlLmRyYXdBcnJvd3MoY3R4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIHJlcXVpcmVzIGEgc2V0VGltZW91dCBvciBhIHJlcXVlc3RBbmltYXRpb25GcmFtZS4gVGhpcyB3YXMgcmVxdWlyZWQgYmVjYXVzZVxuICAgKiBzb21lIGltcGxlbWVudGF0aW9ucyAoc2FmYXJpIGFuZCBJRTkpIGRpZCBub3Qgc3VwcG9ydCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZXRlcm1pbmVCcm93c2VyTWV0aG9kKCkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBicm93c2VyVHlwZSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgIHRoaXMucmVxdWlyZXNUaW1lb3V0ID0gZmFsc2U7XG4gICAgICBpZiAoYnJvd3NlclR5cGUuaW5kZXhPZihcIm1zaWUgOS4wXCIpICE9IC0xKSB7XG4gICAgICAgIC8vIElFIDlcbiAgICAgICAgdGhpcy5yZXF1aXJlc1RpbWVvdXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChicm93c2VyVHlwZS5pbmRleE9mKFwic2FmYXJpXCIpICE9IC0xKSB7XG4gICAgICAgIC8vIHNhZmFyaVxuICAgICAgICBpZiAoYnJvd3NlclR5cGUuaW5kZXhPZihcImNocm9tZVwiKSA8PSAtMSkge1xuICAgICAgICAgIHRoaXMucmVxdWlyZXNUaW1lb3V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlcXVpcmVzVGltZW91dCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBzZWxlY3Rpb24gYm94XG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHggIDJEIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdTZWxlY3Rpb25Cb3goY3R4KSB7XG4gICAgaWYgKHRoaXMuYm9keS5zZWxlY3Rpb25Cb3guc2hvdykge1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY29uc3Qgd2lkdGggPVxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLmVuZC54IC1cbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5zdGFydC54O1xuICAgICAgY29uc3QgaGVpZ2h0ID1cbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5lbmQueSAtXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQueTtcbiAgICAgIGN0eC5yZWN0KFxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLnN0YXJ0LngsXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQueSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgKTtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBcInJnYmEoMTUxLCAxOTQsIDI1MiwgMC4yKVwiO1xuICAgICAgY3R4LmZpbGxSZWN0KFxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLnN0YXJ0LngsXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQueSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgKTtcbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IFwicmdiYSgxNTEsIDE5NCwgMjUyLCAxKVwiO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbnZhc1JlbmRlcmVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnRpbWVycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0SW50ZXJ2YWw7XG4iLCAiLyoqXG4gKiBSZWdpc3RlciBhIHRvdWNoIGV2ZW50LCB0YWtpbmcgcGxhY2UgYmVmb3JlIGEgZ2VzdHVyZVxuICpcbiAqIEBwYXJhbSB7SGFtbWVyfSBoYW1tZXIgICAgICAgQSBoYW1tZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgQ2FsbGJhY2ssIGNhbGxlZCBhcyBjYWxsYmFjayhldmVudClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uVG91Y2goaGFtbWVyLCBjYWxsYmFjaykge1xuICBjYWxsYmFjay5pbnB1dEhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuaXNGaXJzdCkge1xuICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBoYW1tZXIub24oXCJoYW1tZXIuaW5wdXRcIiwgY2FsbGJhY2suaW5wdXRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIHJlbGVhc2UgZXZlbnQsIHRha2luZyBwbGFjZSBhZnRlciBhIGdlc3R1cmVcbiAqXG4gKiBAcGFyYW0ge0hhbW1lcn0gaGFtbWVyICAgICAgIEEgaGFtbWVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxiYWNrLCBjYWxsZWQgYXMgY2FsbGJhY2soZXZlbnQpXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uUmVsZWFzZShoYW1tZXIsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrLmlucHV0SGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC5pc0ZpbmFsKSB7XG4gICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBoYW1tZXIub24oXCJoYW1tZXIuaW5wdXRcIiwgY2FsbGJhY2suaW5wdXRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBVbnJlZ2lzdGVyIGEgdG91Y2ggZXZlbnQsIHRha2luZyBwbGFjZSBiZWZvcmUgYSBnZXN0dXJlXG4gKlxuICogQHBhcmFtIHtIYW1tZXJ9IGhhbW1lciAgICAgICBBIGhhbW1lciBpbnN0YW5jZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBDYWxsYmFjaywgY2FsbGVkIGFzIGNhbGxiYWNrKGV2ZW50KVxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZmVG91Y2goaGFtbWVyLCBjYWxsYmFjaykge1xuICBoYW1tZXIub2ZmKFwiaGFtbWVyLmlucHV0XCIsIGNhbGxiYWNrLmlucHV0SGFuZGxlcik7XG59XG5cbi8qKlxuICogVW5yZWdpc3RlciBhIHJlbGVhc2UgZXZlbnQsIHRha2luZyBwbGFjZSBiZWZvcmUgYSBnZXN0dXJlXG4gKlxuICogQHBhcmFtIHtIYW1tZXJ9IGhhbW1lciAgICAgICBBIGhhbW1lciBpbnN0YW5jZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBDYWxsYmFjaywgY2FsbGVkIGFzIGNhbGxiYWNrKGV2ZW50KVxuICovXG5leHBvcnQgY29uc3Qgb2ZmUmVsZWFzZSA9IG9mZlRvdWNoO1xuXG4vKipcbiAqIEhhY2sgdGhlIFBpbmNoUmVjb2duaXplciBzdWNoIHRoYXQgaXQgZG9lc24ndCBwcmV2ZW50IGRlZmF1bHQgYmVoYXZpb3JcbiAqIGZvciB2ZXJ0aWNhbCBwYW5uaW5nLlxuICpcbiAqIFllYWggLi4uIHRoaXMgaXMgcXVpdGUgYSBoYWNrIC4uLiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2hhbW1lcmpzL2hhbW1lci5qcy9pc3N1ZXMvOTMyXG4gKlxuICogQHBhcmFtIHtIYW1tZXIuUGluY2h9IHBpbmNoUmVjb2duaXplclxuICogQHJldHVybnMge0hhbW1lci5QaW5jaH0gcmV0dXJucyB0aGUgcGluY2hSZWNvZ25pemVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlUHJldmVudERlZmF1bHRWZXJ0aWNhbGx5KHBpbmNoUmVjb2duaXplcikge1xuICBjb25zdCBUT1VDSF9BQ1RJT05fUEFOX1kgPSBcInBhbi15XCI7XG5cbiAgcGluY2hSZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGRlZmF1bHQgbWV0aG9kIHJldHVybnMgW1RPVUNIX0FDVElPTl9OT05FXVxuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX1BBTl9ZXTtcbiAgfTtcblxuICByZXR1cm4gcGluY2hSZWNvZ25pemVyO1xufVxuIiwgImltcG9ydCB7IG9uUmVsZWFzZSwgb25Ub3VjaCB9IGZyb20gXCIuLi8uLi9oYW1tZXJVdGlsXCI7XG5cbmltcG9ydCB7IEhhbW1lciwgc2VsZWN0aXZlRGVlcEV4dGVuZCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIG1haW4gZnJhbWUgZm9yIHRoZSBOZXR3b3JrLlxuICogVGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBvbmNlIHdoZW4gYSBOZXR3b3JrIG9iamVjdCBpcyBjcmVhdGVkLiBUaGUgZnJhbWVcbiAqIGNvbnRhaW5zIGEgY2FudmFzLCBhbmQgdGhpcyBjYW52YXMgY29udGFpbnMgYWxsIG9iamVjdHMgbGlrZSB0aGUgYXhpcyBhbmRcbiAqIG5vZGVzLlxuICovXG5jbGFzcyBDYW52YXMge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHkpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IDE7XG4gICAgdGhpcy5jYW1lcmFTdGF0ZSA9IHt9O1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbnZhc1ZpZXdDZW50ZXIgPSB7fTtcbiAgICB0aGlzLl9jbGVhbnVwQ2FsbGJhY2tzID0gW107XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgYXV0b1Jlc2l6ZTogdHJ1ZSxcbiAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmJpbmRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGV2ZW50IGxpc3RlbmVyc1xuICAgKi9cbiAgYmluZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIC8vIGJpbmQgdGhlIGV2ZW50c1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uY2UoXCJyZXNpemVcIiwgKG9iaikgPT4ge1xuICAgICAgaWYgKG9iai53aWR0aCAhPT0gMCkge1xuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi54ID0gb2JqLndpZHRoICogMC41O1xuICAgICAgfVxuICAgICAgaWYgKG9iai5oZWlnaHQgIT09IDApIHtcbiAgICAgICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueSA9IG9iai5oZWlnaHQgKiAwLjU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJzZXRTaXplXCIsIHRoaXMuc2V0U2l6ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5oYW1tZXJGcmFtZS5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7XG4gICAgICB0aGlzLl9jbGVhblVwKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IFtcIndpZHRoXCIsIFwiaGVpZ2h0XCIsIFwiYXV0b1Jlc2l6ZVwiXTtcbiAgICAgIHNlbGVjdGl2ZURlZXBFeHRlbmQoZmllbGRzLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIEF1dG9tYXRpY2FsbHkgYWRhcHQgdG8gY2hhbmdpbmcgc2l6ZSBvZiB0aGUgY29udGFpbmVyIGVsZW1lbnQuXG4gICAgdGhpcy5fY2xlYW5VcCgpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1Jlc2l6ZSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHdpbmRvdy5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAvLyBkZWNlbnQgYnJvd3NlcnMsIGltbWVkaWF0ZSByZWFjdGlvbnNcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnNldFNpemUoKTtcbiAgICAgICAgICBpZiAoY2hhbmdlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHsgZnJhbWUgfSA9IHRoaXM7XG5cbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShmcmFtZSk7XG4gICAgICAgIHRoaXMuX2NsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKGZyYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJRTExLCBjb250aW5vdXMgcG9sbGluZ1xuICAgICAgICBjb25zdCByZXNpemVUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5zZXRTaXplKCk7XG4gICAgICAgICAgaWYgKGNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgICB0aGlzLl9jbGVhbnVwQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwocmVzaXplVGltZXIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQXV0b21hdGljYWxseSBhZGFwdCB0byBjaGFuZ2luZyBzaXplIG9mIHRoZSBicm93c2VyLlxuICAgICAgY29uc3QgcmVzaXplRnVuY3Rpb24gPSB0aGlzLl9vblJlc2l6ZS5iaW5kKHRoaXMpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgcmVzaXplRnVuY3Rpb24pO1xuICAgICAgdGhpcy5fY2xlYW51cENhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgcmVzaXplRnVuY3Rpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW5VcCgpIHtcbiAgICB0aGlzLl9jbGVhbnVwQ2FsbGJhY2tzXG4gICAgICAuc3BsaWNlKDApXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uUmVzaXplKCkge1xuICAgIHRoaXMuc2V0U2l6ZSgpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbmQgc3RvcmUgdGhlIGNhbWVyYVN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGl4ZWxSYXRpbz10aGlzLnBpeGVsUmF0aW9dXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q2FtZXJhU3RhdGUocGl4ZWxSYXRpbyA9IHRoaXMucGl4ZWxSYXRpbykge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmNhbWVyYVN0YXRlLnByZXZpb3VzV2lkdGggPSB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCAvIHBpeGVsUmF0aW87XG4gICAgICB0aGlzLmNhbWVyYVN0YXRlLnByZXZpb3VzSGVpZ2h0ID0gdGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0IC8gcGl4ZWxSYXRpbztcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUuc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUucG9zaXRpb24gPSB0aGlzLkRPTXRvQ2FudmFzKHtcbiAgICAgICAgeDogKDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLndpZHRoKSAvIHBpeGVsUmF0aW8sXG4gICAgICAgIHk6ICgwLjUgKiB0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQpIC8gcGl4ZWxSYXRpbyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNhbWVyYVN0YXRlXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0Q2FtZXJhU3RhdGUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5zY2FsZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCAhPT0gMCAmJlxuICAgICAgdGhpcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0ICE9PSAwICYmXG4gICAgICB0aGlzLnBpeGVsUmF0aW8gIT09IDAgJiZcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNXaWR0aCA+IDAgJiZcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNIZWlnaHQgPiAwXG4gICAgKSB7XG4gICAgICBjb25zdCB3aWR0aFJhdGlvID1cbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMud2lkdGggL1xuICAgICAgICB0aGlzLnBpeGVsUmF0aW8gL1xuICAgICAgICB0aGlzLmNhbWVyYVN0YXRlLnByZXZpb3VzV2lkdGg7XG4gICAgICBjb25zdCBoZWlnaHRSYXRpbyA9XG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCAvXG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyAvXG4gICAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNIZWlnaHQ7XG4gICAgICBsZXQgbmV3U2NhbGUgPSB0aGlzLmNhbWVyYVN0YXRlLnNjYWxlO1xuXG4gICAgICBpZiAod2lkdGhSYXRpbyAhPSAxICYmIGhlaWdodFJhdGlvICE9IDEpIHtcbiAgICAgICAgbmV3U2NhbGUgPSB0aGlzLmNhbWVyYVN0YXRlLnNjYWxlICogMC41ICogKHdpZHRoUmF0aW8gKyBoZWlnaHRSYXRpbyk7XG4gICAgICB9IGVsc2UgaWYgKHdpZHRoUmF0aW8gIT0gMSkge1xuICAgICAgICBuZXdTY2FsZSA9IHRoaXMuY2FtZXJhU3RhdGUuc2NhbGUgKiB3aWR0aFJhdGlvO1xuICAgICAgfSBlbHNlIGlmIChoZWlnaHRSYXRpbyAhPSAxKSB7XG4gICAgICAgIG5ld1NjYWxlID0gdGhpcy5jYW1lcmFTdGF0ZS5zY2FsZSAqIGhlaWdodFJhdGlvO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmJvZHkudmlldy5zY2FsZSA9IG5ld1NjYWxlO1xuICAgICAgLy8gdGhpcyBjb21lcyBmcm9tIHRoZSB2aWV3IG1vZHVsZS5cbiAgICAgIGNvbnN0IGN1cnJlbnRWaWV3Q2VudGVyID0gdGhpcy5ET010b0NhbnZhcyh7XG4gICAgICAgIHg6IDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoLFxuICAgICAgICB5OiAwLjUgKiB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQ2VudGVyID0ge1xuICAgICAgICAvLyBvZmZzZXQgZnJvbSB2aWV3LCBkaXN0YW5jZSB2aWV3IGhhcyB0byBjaGFuZ2UgYnkgdGhlc2UgeCBhbmQgeSB0byBjZW50ZXIgdGhlIG5vZGVcbiAgICAgICAgeDogY3VycmVudFZpZXdDZW50ZXIueCAtIHRoaXMuY2FtZXJhU3RhdGUucG9zaXRpb24ueCxcbiAgICAgICAgeTogY3VycmVudFZpZXdDZW50ZXIueSAtIHRoaXMuY2FtZXJhU3RhdGUucG9zaXRpb24ueSxcbiAgICAgIH07XG4gICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi54ICs9XG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci54ICogdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55ICs9XG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci55ICogdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcmVwYXJlVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmICh2YWx1ZS5pbmRleE9mKFwiJVwiKSAhPT0gLTEgfHwgdmFsdWUuaW5kZXhPZihcInB4XCIpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoXCIlXCIpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQ291bGQgbm90IHVzZSB0aGUgdmFsdWUgc3VwcGxpZWQgZm9yIHdpZHRoIG9yIGhlaWdodDpcIiArIHZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIEhUTUxcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgLy8gcmVtb3ZlIGFsbCBlbGVtZW50cyBmcm9tIHRoZSBjb250YWluZXIgZWxlbWVudC5cbiAgICB3aGlsZSAodGhpcy5ib2R5LmNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgIHRoaXMuYm9keS5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5ib2R5LmNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmZyYW1lLmNsYXNzTmFtZSA9IFwidmlzLW5ldHdvcmtcIjtcbiAgICB0aGlzLmZyYW1lLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuICAgIHRoaXMuZnJhbWUudGFiSW5kZXggPSAwOyAvLyB0YWIgaW5kZXggaXMgcmVxdWlyZWQgZm9yIGtleWNoYXJtIHRvIGJpbmQga2V5c3Ryb2tlcyB0byB0aGUgZGl2IGluc3RlYWQgb2YgdGhlIHdpbmRvd1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICB0aGlzLmZyYW1lLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgdGhpcy5mcmFtZS5jYW52YXMuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lLmNhbnZhcyk7XG5cbiAgICBpZiAoIXRoaXMuZnJhbWUuY2FudmFzLmdldENvbnRleHQpIHtcbiAgICAgIGNvbnN0IG5vQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIkRJVlwiKTtcbiAgICAgIG5vQ2FudmFzLnN0eWxlLmNvbG9yID0gXCJyZWRcIjtcbiAgICAgIG5vQ2FudmFzLnN0eWxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgICAgIG5vQ2FudmFzLnN0eWxlLnBhZGRpbmcgPSBcIjEwcHhcIjtcbiAgICAgIG5vQ2FudmFzLmlubmVyVGV4dCA9IFwiRXJyb3I6IHlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IEhUTUwgY2FudmFzXCI7XG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5hcHBlbmRDaGlsZChub0NhbnZhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NldFBpeGVsUmF0aW8oKTtcbiAgICAgIHRoaXMuc2V0VHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gYWRkIHRoZSBmcmFtZSB0byB0aGUgY29udGFpbmVyIGVsZW1lbnRcbiAgICB0aGlzLmJvZHkuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuXG4gICAgdGhpcy5ib2R5LnZpZXcuc2NhbGUgPSAxO1xuICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uID0ge1xuICAgICAgeDogMC41ICogdGhpcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGgsXG4gICAgICB5OiAwLjUgKiB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQsXG4gICAgfTtcblxuICAgIHRoaXMuX2JpbmRIYW1tZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGJpbmRzIGhhbW1lciwgaXQgY2FuIGJlIHJlcGVhdGVkIG92ZXIgYW5kIG92ZXIgZHVlIHRvIHRoZSB1bmlxdWVuZXNzIGNoZWNrLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JpbmRIYW1tZXIoKSB7XG4gICAgaWYgKHRoaXMuaGFtbWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaGFtbWVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5kcmFnID0ge307XG4gICAgdGhpcy5waW5jaCA9IHt9O1xuXG4gICAgLy8gaW5pdCBoYW1tZXJcbiAgICB0aGlzLmhhbW1lciA9IG5ldyBIYW1tZXIodGhpcy5mcmFtZS5jYW52YXMpO1xuICAgIHRoaXMuaGFtbWVyLmdldChcInBpbmNoXCIpLnNldCh7IGVuYWJsZTogdHJ1ZSB9KTtcbiAgICAvLyBlbmFibGUgdG8gZ2V0IGJldHRlciByZXNwb25zZSwgdG9kbzogdGVzdCBvbiBtb2JpbGUuXG4gICAgdGhpcy5oYW1tZXJcbiAgICAgIC5nZXQoXCJwYW5cIilcbiAgICAgIC5zZXQoeyB0aHJlc2hvbGQ6IDUsIGRpcmVjdGlvbjogSGFtbWVyLkRJUkVDVElPTl9BTEwgfSk7XG5cbiAgICBvblRvdWNoKHRoaXMuaGFtbWVyLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblRvdWNoKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblRhcChldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJkb3VibGV0YXBcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Eb3VibGVUYXAoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicHJlc3NcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Ib2xkKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbnN0YXJ0XCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uRHJhZ1N0YXJ0KGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbm1vdmVcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25EcmFnKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbmVuZFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWdFbmQoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGluY2hcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25QaW5jaChldmVudCk7XG4gICAgfSk7XG5cbiAgICAvLyBUT0RPOiBuZWF0bHkgY2xlYW51cCB0aGVzZSBoYW5kbGVycyB3aGVuIHJlLWNyZWF0aW5nIHRoZSBDYW52YXMsIElGIHRoZXNlIGFyZSBkb25lIHdpdGggaGFtbWVyLCBldmVudC5zdG9wUHJvcGFnYXRpb24gd2lsbCBub3Qgd29yaz9cbiAgICB0aGlzLmZyYW1lLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Nb3VzZVdoZWVsKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZnJhbWUuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Nb3VzZU1vdmUoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuZnJhbWUuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkNvbnRleHQoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5oYW1tZXJGcmFtZSA9IG5ldyBIYW1tZXIodGhpcy5mcmFtZSk7XG4gICAgb25SZWxlYXNlKHRoaXMuaGFtbWVyRnJhbWUsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uUmVsZWFzZShldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgbmV3IHNpemUgZm9yIHRoZSBuZXR3b3JrXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB3aWR0aCAgIFdpZHRoIGluIHBpeGVscyBvciBwZXJjZW50YWdlIChmb3IgZXhhbXBsZSAnODAwcHgnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIG9yICc1MCUnKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGVpZ2h0ICBIZWlnaHQgaW4gcGl4ZWxzIG9yIHBlcmNlbnRhZ2UgIChmb3IgZXhhbXBsZSAnNDAwcHgnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIG9yICczMCUnKVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNldFNpemUod2lkdGggPSB0aGlzLm9wdGlvbnMud2lkdGgsIGhlaWdodCA9IHRoaXMub3B0aW9ucy5oZWlnaHQpIHtcbiAgICB3aWR0aCA9IHRoaXMuX3ByZXBhcmVWYWx1ZSh3aWR0aCk7XG4gICAgaGVpZ2h0ID0gdGhpcy5fcHJlcGFyZVZhbHVlKGhlaWdodCk7XG5cbiAgICBsZXQgZW1pdEV2ZW50ID0gZmFsc2U7XG4gICAgY29uc3Qgb2xkV2lkdGggPSB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aDtcbiAgICBjb25zdCBvbGRIZWlnaHQgPSB0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHBpeGVsIHJhdGlvXG4gICAgLy9cbiAgICAvLyBOT1RFOiBDb21tZW50IGluIGZvbGxvd2luZyBpcyByYXRoZXIgaW5jb25zaXN0ZW50OyB0aGlzIGlzIHRoZSBPTkxZIHBsYWNlIGluIHRoZSBjb2RlXG4gICAgLy8gICAgICAgd2hlcmUgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBwaXhlbCByYXRpbyBjb3VsZCBjaGFuZ2UgYXQgcnVudGltZS5cbiAgICAvLyAgICAgICBUaGUgb25seSB3YXkgSSBjYW4gdGhpbmsgb2YgdGhpcyBoYXBwZW5pbmcgaXMgYSByb3RhdGluZyBzY3JlZW4gb3IgdGFibGV0OyBidXQgdGhlblxuICAgIC8vICAgICAgIHRoZXJlIHNob3VsZCBiZSBhIG1lY2hhbmlzbSBmb3IgcmVsb2FkaW5nIHRoZSBkYXRhIChUT0RPOiBjaGVjayBpZiB0aGlzIGlzIHByZXNlbnQpLlxuICAgIC8vXG4gICAgLy8gICAgICAgSWYgdGhlIGFzc3VtcHRpb24gaXMgdHJ1ZSAoaS5lLiBwaXhlbCByYXRpbyBjYW4gY2hhbmdlIGF0IHJ1bnRpbWUpLCB0aGVuICphbGwqIHVzYWdlXG4gICAgLy8gICAgICAgb2YgcGl4ZWwgcmF0aW8gbXVzdCBiZSBvdmVyaGF1bGVkIGZvciB0aGlzLlxuICAgIC8vXG4gICAgLy8gICAgICAgRm9yIHRoZSB0aW1lIGJlaW5nLCBJIHdpbGwgaHVtb3IgdGhlIGFzc3VtcHRpb24gaGVyZSwgYW5kIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlIGFzc3VtZSBpdCBpc1xuICAgIC8vICAgICAgIGNvbnN0YW50LlxuICAgIGNvbnN0IHByZXZpb3VzUmF0aW8gPSB0aGlzLnBpeGVsUmF0aW87IC8vIHdlIGNhY2hlIHRoaXMgYmVjYXVzZSB0aGUgY2FtZXJhIHN0YXRlIHN0b3JhZ2UgbmVlZHMgdGhlIG9sZCB2YWx1ZVxuICAgIHRoaXMuX3NldFBpeGVsUmF0aW8oKTtcblxuICAgIGlmIChcbiAgICAgIHdpZHRoICE9IHRoaXMub3B0aW9ucy53aWR0aCB8fFxuICAgICAgaGVpZ2h0ICE9IHRoaXMub3B0aW9ucy5oZWlnaHQgfHxcbiAgICAgIHRoaXMuZnJhbWUuc3R5bGUud2lkdGggIT0gd2lkdGggfHxcbiAgICAgIHRoaXMuZnJhbWUuc3R5bGUuaGVpZ2h0ICE9IGhlaWdodFxuICAgICkge1xuICAgICAgdGhpcy5fZ2V0Q2FtZXJhU3RhdGUocHJldmlvdXNSYXRpbyk7XG5cbiAgICAgIHRoaXMuZnJhbWUuc3R5bGUud2lkdGggPSB3aWR0aDtcbiAgICAgIHRoaXMuZnJhbWUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgICAgdGhpcy5mcmFtZS5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLndpZHRoID0gTWF0aC5yb3VuZChcbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGggKiB0aGlzLnBpeGVsUmF0aW9cbiAgICAgICk7XG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQgPSBNYXRoLnJvdW5kKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQgKiB0aGlzLnBpeGVsUmF0aW9cbiAgICAgICk7XG5cbiAgICAgIHRoaXMub3B0aW9ucy53aWR0aCA9IHdpZHRoO1xuICAgICAgdGhpcy5vcHRpb25zLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgdGhpcy5jYW52YXNWaWV3Q2VudGVyID0ge1xuICAgICAgICB4OiAwLjUgKiB0aGlzLmZyYW1lLmNsaWVudFdpZHRoLFxuICAgICAgICB5OiAwLjUgKiB0aGlzLmZyYW1lLmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGVtaXRFdmVudCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMgd291bGQgYWRhcHQgdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdG8gdGhlIHdpZHRoIGZyb20gMTAwJSBpZiBhbmQgb25seSBpZlxuICAgICAgLy8gdGhlcmUgaXMgYSBjaGFuZ2UuXG5cbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5yb3VuZChcbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGggKiB0aGlzLnBpeGVsUmF0aW9cbiAgICAgICk7XG4gICAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLnJvdW5kKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQgKiB0aGlzLnBpeGVsUmF0aW9cbiAgICAgICk7XG5cbiAgICAgIC8vIHN0b3JlIHRoZSBjYW1lcmEgaWYgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gc2l6ZS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMud2lkdGggIT09IG5ld1dpZHRoIHx8XG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCAhPT0gbmV3SGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fZ2V0Q2FtZXJhU3RhdGUocHJldmlvdXNSYXRpbyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCAhPT0gbmV3V2lkdGgpIHtcbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMud2lkdGggPSBuZXdXaWR0aDtcbiAgICAgICAgZW1pdEV2ZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQgIT09IG5ld0hlaWdodCkge1xuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQgPSBuZXdIZWlnaHQ7XG4gICAgICAgIGVtaXRFdmVudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVtaXRFdmVudCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInJlc2l6ZVwiLCB7XG4gICAgICAgIHdpZHRoOiBNYXRoLnJvdW5kKHRoaXMuZnJhbWUuY2FudmFzLndpZHRoIC8gdGhpcy5waXhlbFJhdGlvKSxcbiAgICAgICAgaGVpZ2h0OiBNYXRoLnJvdW5kKHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCAvIHRoaXMucGl4ZWxSYXRpbyksXG4gICAgICAgIG9sZFdpZHRoOiBNYXRoLnJvdW5kKG9sZFdpZHRoIC8gdGhpcy5waXhlbFJhdGlvKSxcbiAgICAgICAgb2xkSGVpZ2h0OiBNYXRoLnJvdW5kKG9sZEhlaWdodCAvIHRoaXMucGl4ZWxSYXRpbyksXG4gICAgICB9KTtcblxuICAgICAgLy8gcmVzdG9yZSB0aGUgY2FtZXJhIG9uIGNoYW5nZS5cbiAgICAgIHRoaXMuX3NldENhbWVyYVN0YXRlKCk7XG4gICAgfVxuXG4gICAgLy8gc2V0IGluaXRpYWxpemVkIHNvIHRoZSBnZXQgYW5kIHNldCBjYW1lcmEgd2lsbCB3b3JrIGZyb20gbm93IG9uLlxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHJldHVybiBlbWl0RXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICovXG4gIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWUuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHBpeGVsIHJhdGlvIGZvciB2YXJpb3VzIGJyb3dzZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RldGVybWluZVBpeGVsUmF0aW8oKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5nZXRDb250ZXh0KCk7XG4gICAgaWYgKGN0eCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGNhbnZheCBjb250ZXh0XCIpO1xuICAgIH1cblxuICAgIGxldCBudW1lcmF0b3IgPSAxO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAvLyAod2luZG93ICE9PSB1bmRlZmluZWQpIGRvZXNuJ3Qgd29yayBoZXJlIVxuICAgICAgLy8gUHJvdGVjdGlvbiBkdXJpbmcgdW5pdCB0ZXN0cywgd2hlcmUgJ3dpbmRvdycgY2FuIGJlIG1pc3NpbmdcbiAgICAgIG51bWVyYXRvciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gICAgfVxuXG4gICAgY29uc3QgZGVub21pbmF0b3IgPVxuICAgICAgY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICBjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAxO1xuXG4gICAgcmV0dXJuIG51bWVyYXRvciAvIGRlbm9taW5hdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIExhenkgZGV0ZXJtaW5hdGlvbiBvZiBwaXhlbCByYXRpby5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRQaXhlbFJhdGlvKCkge1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IHRoaXMuX2RldGVybWluZVBpeGVsUmF0aW8oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zZm9ybSBpbiB0aGUgY29udGFpbmVkIGNvbnRleHQsIGJhc2VkIG9uIGl0cyBwaXhlbFJhdGlvXG4gICAqL1xuICBzZXRUcmFuc2Zvcm0oKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5nZXRDb250ZXh0KCk7XG4gICAgaWYgKGN0eCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGNhbnZheCBjb250ZXh0XCIpO1xuICAgIH1cblxuICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIFggY29vcmRpbmF0ZSBpbiBET00tc3BhY2UgKGNvb3JkaW5hdGUgcG9pbnQgaW4gYnJvd3NlciByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyIGRpdikgdG9cbiAgICogdGhlIFggY29vcmRpbmF0ZSBpbiBjYW52YXMtc3BhY2UgKHRoZSBzaW11bGF0aW9uIHNhbmRib3gsIHdoaWNoIHRoZSBjYW1lcmEgbG9va3MgdXBvbilcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9YY29udmVydERPTXRvQ2FudmFzKHgpIHtcbiAgICByZXR1cm4gKHggLSB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi54KSAvIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIFggY29vcmRpbmF0ZSBpbiBjYW52YXMtc3BhY2UgKHRoZSBzaW11bGF0aW9uIHNhbmRib3gsIHdoaWNoIHRoZSBjYW1lcmEgbG9va3MgdXBvbikgdG9cbiAgICogdGhlIFggY29vcmRpbmF0ZSBpbiBET00tc3BhY2UgKGNvb3JkaW5hdGUgcG9pbnQgaW4gYnJvd3NlciByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyIGRpdilcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9YY29udmVydENhbnZhc1RvRE9NKHgpIHtcbiAgICByZXR1cm4geCAqIHRoaXMuYm9keS52aWV3LnNjYWxlICsgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSBZIGNvb3JkaW5hdGUgaW4gRE9NLXNwYWNlIChjb29yZGluYXRlIHBvaW50IGluIGJyb3dzZXIgcmVsYXRpdmUgdG8gdGhlIGNvbnRhaW5lciBkaXYpIHRvXG4gICAqIHRoZSBZIGNvb3JkaW5hdGUgaW4gY2FudmFzLXNwYWNlICh0aGUgc2ltdWxhdGlvbiBzYW5kYm94LCB3aGljaCB0aGUgY2FtZXJhIGxvb2tzIHVwb24pXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfWWNvbnZlcnRET010b0NhbnZhcyh5KSB7XG4gICAgcmV0dXJuICh5IC0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueSkgLyB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSBZIGNvb3JkaW5hdGUgaW4gY2FudmFzLXNwYWNlICh0aGUgc2ltdWxhdGlvbiBzYW5kYm94LCB3aGljaCB0aGUgY2FtZXJhIGxvb2tzIHVwb24pIHRvXG4gICAqIHRoZSBZIGNvb3JkaW5hdGUgaW4gRE9NLXNwYWNlIChjb29yZGluYXRlIHBvaW50IGluIGJyb3dzZXIgcmVsYXRpdmUgdG8gdGhlIGNvbnRhaW5lciBkaXYpXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfWWNvbnZlcnRDYW52YXNUb0RPTSh5KSB7XG4gICAgcmV0dXJuIHkgKiB0aGlzLmJvZHkudmlldy5zY2FsZSArIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtwb2ludH0gcG9zXG4gICAqIEByZXR1cm5zIHtwb2ludH1cbiAgICovXG4gIGNhbnZhc1RvRE9NKHBvcykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB0aGlzLl9YY29udmVydENhbnZhc1RvRE9NKHBvcy54KSxcbiAgICAgIHk6IHRoaXMuX1ljb252ZXJ0Q2FudmFzVG9ET00ocG9zLnkpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtwb2ludH0gcG9zXG4gICAqIEByZXR1cm5zIHtwb2ludH1cbiAgICovXG4gIERPTXRvQ2FudmFzKHBvcykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB0aGlzLl9YY29udmVydERPTXRvQ2FudmFzKHBvcy54KSxcbiAgICAgIHk6IHRoaXMuX1ljb252ZXJ0RE9NdG9DYW52YXMocG9zLnkpLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FudmFzO1xuIiwgImltcG9ydCB7IGVhc2luZ0Z1bmN0aW9ucyB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuaW1wb3J0IE5ldHdvcmtVdGlsIGZyb20gXCIuLi9OZXR3b3JrVXRpbFwiO1xuaW1wb3J0IHsgbm9ybWFsaXplRml0T3B0aW9ucyB9IGZyb20gXCIuL3ZpZXctaGFuZGxlclwiO1xuXG4vKipcbiAqIFRoZSB2aWV3XG4gKi9cbmNsYXNzIFZpZXcge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcblxuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxIC8gdGhpcy5yZW5kZXJSZWZyZXNoUmF0ZTtcbiAgICB0aGlzLmFuaW1hdGlvbkVhc2luZ0Z1bmN0aW9uID0gXCJlYXNlSW5PdXRRdWludFwiO1xuICAgIHRoaXMuZWFzaW5nVGltZSA9IDA7XG4gICAgdGhpcy5zb3VyY2VTY2FsZSA9IDA7XG4gICAgdGhpcy50YXJnZXRTY2FsZSA9IDA7XG4gICAgdGhpcy5zb3VyY2VUcmFuc2xhdGlvbiA9IDA7XG4gICAgdGhpcy50YXJnZXRUcmFuc2xhdGlvbiA9IDA7XG4gICAgdGhpcy5sb2NrZWRPbk5vZGVJZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxvY2tlZE9uTm9kZU9mZnNldCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRvdWNoVGltZSA9IDA7XG5cbiAgICB0aGlzLnZpZXdGdW5jdGlvbiA9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZml0XCIsIHRoaXMuZml0LmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiYW5pbWF0aW9uRmluaXNoZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9zdG9wUmVuZGVyaW5nXCIpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwidW5sb2NrTm9kZVwiLCB0aGlzLnJlbGVhc2VOb2RlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV1cbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHpvb21zIG91dCB0byBmaXQgYWxsIGRhdGEgb24gc2NyZWVuIGJhc2VkIG9uIGFtb3VudCBvZiBub2Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e3tub2Rlcz1BcnJheX19XVxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0aWFsWm9vbT1mYWxzZV0gIHwgem9vbSBiYXNlZCBvbiBmaXR0ZWQgZm9ybXVsYSBvciByYW5nZSwgdHJ1ZSA9IGZpdHRlZCwgZGVmYXVsdCA9IGZhbHNlO1xuICAgKi9cbiAgZml0KG9wdGlvbnMsIGluaXRpYWxab29tID0gZmFsc2UpIHtcbiAgICBvcHRpb25zID0gbm9ybWFsaXplRml0T3B0aW9ucyhvcHRpb25zLCB0aGlzLmJvZHkubm9kZUluZGljZXMpO1xuXG4gICAgY29uc3QgY2FudmFzV2lkdGggPSB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGg7XG4gICAgY29uc3QgY2FudmFzSGVpZ2h0ID0gdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodDtcblxuICAgIGxldCByYW5nZTtcbiAgICBsZXQgem9vbUxldmVsO1xuICAgIGlmIChjYW52YXNXaWR0aCA9PT0gMCB8fCBjYW52YXNIZWlnaHQgPT09IDApIHtcbiAgICAgIC8vIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGZpdCBpbnRvIHplcm8gc2l6ZWQgY2FudmFzLiBUaGlzIGNvdWxkXG4gICAgICAvLyBwb3RlbnRpYWxseSBldmVuIHJlc3VsdCBpbiBpbnZhbGlkIHZhbHVlcyBiZWluZyBjb21wdXRlZC4gRm9yIGV4YW1wbGVcbiAgICAgIC8vIGZvciBuZXR3b3JrIHdpdGhvdXQgbm9kZXMgYW5kIHplcm8gc2l6ZWQgY2FudmFzIHRoZSB6b29tIGxldmVsIHdvdWxkXG4gICAgICAvLyBlbmQgdXAgYmVpbmcgY29tcHV0ZWQgYXMgMC8wIHdoaWNoIHJlc3VsdHMgaW4gTmFOLiBJbiBhbnkgb3RoZXIgY2FzZVxuICAgICAgLy8gdGhpcyB3b3VsZCBiZSAwL3NvbWV0aGluZyB3aGljaCBpcyBhZ2FpbiBwb2ludGxlc3MgdG8gY29tcHV0ZS5cbiAgICAgIHpvb21MZXZlbCA9IDE7XG5cbiAgICAgIHJhbmdlID0gTmV0d29ya1V0aWwuZ2V0UmFuZ2UodGhpcy5ib2R5Lm5vZGVzLCBvcHRpb25zLm5vZGVzKTtcbiAgICB9IGVsc2UgaWYgKGluaXRpYWxab29tID09PSB0cnVlKSB7XG4gICAgICAvLyBjaGVjayBpZiBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgbm9kZXMgaGF2ZSBhIHByZWRlZmluZWQgcG9zaXRpb24uIElmIHNvLCB3ZSB1c2UgdGhlIHJhbmdlLCBub3QgdGhlIGFwcHJveGltYXRpb24uXG4gICAgICBsZXQgcG9zaXRpb25EZWZpbmVkID0gMDtcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5ub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgICBpZiAobm9kZS5wcmVkZWZpbmVkUG9zaXRpb24gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uRGVmaW5lZCArPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvc2l0aW9uRGVmaW5lZCA+IDAuNSAqIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5maXQob3B0aW9ucywgZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJhbmdlID0gTmV0d29ya1V0aWwuZ2V0UmFuZ2UodGhpcy5ib2R5Lm5vZGVzLCBvcHRpb25zLm5vZGVzKTtcblxuICAgICAgY29uc3QgbnVtYmVyT2ZOb2RlcyA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7XG4gICAgICB6b29tTGV2ZWwgPSAxMi42NjIgLyAobnVtYmVyT2ZOb2RlcyArIDcuNDE0NykgKyAwLjA5NjQ4MjI7IC8vIHRoaXMgaXMgb2J0YWluZWQgZnJvbSBmaXR0aW5nIGEgZGF0YXNldCBmcm9tIDUgcG9pbnRzIHdpdGggc2NhbGUgbGV2ZWxzIHRoYXQgbG9va2VkIGdvb2QuXG5cbiAgICAgIC8vIGNvcnJlY3QgZm9yIGxhcmdlciBjYW52YXNzZXMuXG4gICAgICBjb25zdCBmYWN0b3IgPSBNYXRoLm1pbihjYW52YXNXaWR0aCAvIDYwMCwgY2FudmFzSGVpZ2h0IC8gNjAwKTtcbiAgICAgIHpvb21MZXZlbCAqPSBmYWN0b3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVzaXplTm9kZXNcIik7XG4gICAgICByYW5nZSA9IE5ldHdvcmtVdGlsLmdldFJhbmdlKHRoaXMuYm9keS5ub2Rlcywgb3B0aW9ucy5ub2Rlcyk7XG5cbiAgICAgIGNvbnN0IHhEaXN0YW5jZSA9IE1hdGguYWJzKHJhbmdlLm1heFggLSByYW5nZS5taW5YKSAqIDEuMTtcbiAgICAgIGNvbnN0IHlEaXN0YW5jZSA9IE1hdGguYWJzKHJhbmdlLm1heFkgLSByYW5nZS5taW5ZKSAqIDEuMTtcblxuICAgICAgY29uc3QgeFpvb21MZXZlbCA9IGNhbnZhc1dpZHRoIC8geERpc3RhbmNlO1xuICAgICAgY29uc3QgeVpvb21MZXZlbCA9IGNhbnZhc0hlaWdodCAvIHlEaXN0YW5jZTtcblxuICAgICAgem9vbUxldmVsID0geFpvb21MZXZlbCA8PSB5Wm9vbUxldmVsID8geFpvb21MZXZlbCA6IHlab29tTGV2ZWw7XG4gICAgfVxuXG4gICAgaWYgKHpvb21MZXZlbCA+IG9wdGlvbnMubWF4Wm9vbUxldmVsKSB7XG4gICAgICB6b29tTGV2ZWwgPSBvcHRpb25zLm1heFpvb21MZXZlbDtcbiAgICB9IGVsc2UgaWYgKHpvb21MZXZlbCA8IG9wdGlvbnMubWluWm9vbUxldmVsKSB7XG4gICAgICB6b29tTGV2ZWwgPSBvcHRpb25zLm1pblpvb21MZXZlbDtcbiAgICB9XG5cbiAgICBjb25zdCBjZW50ZXIgPSBOZXR3b3JrVXRpbC5maW5kQ2VudGVyKHJhbmdlKTtcbiAgICBjb25zdCBhbmltYXRpb25PcHRpb25zID0ge1xuICAgICAgcG9zaXRpb246IGNlbnRlcixcbiAgICAgIHNjYWxlOiB6b29tTGV2ZWwsXG4gICAgICBhbmltYXRpb246IG9wdGlvbnMuYW5pbWF0aW9uLFxuICAgIH07XG4gICAgdGhpcy5tb3ZlVG8oYW5pbWF0aW9uT3B0aW9ucyk7XG4gIH1cblxuICAvLyBhbmltYXRpb25cblxuICAvKipcbiAgICogQ2VudGVyIGEgbm9kZSBpbiB2aWV3LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbm9kZUlkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9uc11cbiAgICovXG4gIGZvY3VzKG5vZGVJZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0ueCxcbiAgICAgICAgeTogdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0ueSxcbiAgICAgIH07XG4gICAgICBvcHRpb25zLnBvc2l0aW9uID0gbm9kZVBvc2l0aW9uO1xuICAgICAgb3B0aW9ucy5sb2NrZWRPbk5vZGUgPSBub2RlSWQ7XG5cbiAgICAgIHRoaXMubW92ZVRvKG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiTm9kZTogXCIgKyBub2RlSWQgKyBcIiBjYW5ub3QgYmUgZm91bmQuXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgfCAgb3B0aW9ucy5vZmZzZXQgICA9IHt4Om51bWJlciwgeTpudW1iZXJ9ICAgLy8gb2Zmc2V0IGZyb20gdGhlIGNlbnRlciBpbiBET00gcGl4ZWxzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLnNjYWxlICAgID0gbnVtYmVyICAgICAgICAgICAgICAgICAvLyBzY2FsZSB0byBtb3ZlIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLnBvc2l0aW9uID0ge3g6bnVtYmVyLCB5Om51bWJlcn0gICAvLyBwb3NpdGlvbiB0byBtb3ZlIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLmFuaW1hdGlvbiA9IHtkdXJhdGlvbjpudW1iZXIsIGVhc2luZ0Z1bmN0aW9uOlN0cmluZ30gfHwgQm9vbGVhbiAgIC8vIHBvc2l0aW9uIHRvIG1vdmUgdG9cbiAgICovXG4gIG1vdmVUbyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm9mZnNldCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5vZmZzZXQueCAhPSBudWxsKSB7XG4gICAgICAgIC8vIENvZXJjZSBhbmQgdmVyaWZ5IHRoYXQgeCBpcyB2YWxpZC5cbiAgICAgICAgb3B0aW9ucy5vZmZzZXQueCA9ICtvcHRpb25zLm9mZnNldC54O1xuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zLm9mZnNldC54KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAnVGhlIG9wdGlvbiBcIm9mZnNldC54XCIgaGFzIHRvIGJlIGEgZmluaXRlIG51bWJlci4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5vZmZzZXQueCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLm9mZnNldC55ICE9IG51bGwpIHtcbiAgICAgICAgLy8gQ29lcmNlIGFuZCB2ZXJpZnkgdGhhdCB5IGlzIHZhbGlkLlxuICAgICAgICBvcHRpb25zLm9mZnNldC55ID0gK29wdGlvbnMub2Zmc2V0Lnk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG9wdGlvbnMub2Zmc2V0LnkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdUaGUgb3B0aW9uIFwib2Zmc2V0LnlcIiBoYXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLm9mZnNldC54ID0gMDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5vZmZzZXQgPSB7XG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnBvc2l0aW9uICE9IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLnBvc2l0aW9uLnggIT0gbnVsbCkge1xuICAgICAgICAvLyBDb2VyY2UgYW5kIHZlcmlmeSB0aGF0IHggaXMgdmFsaWQuXG4gICAgICAgIG9wdGlvbnMucG9zaXRpb24ueCA9ICtvcHRpb25zLnBvc2l0aW9uLng7XG4gICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG9wdGlvbnMucG9zaXRpb24ueCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgJ1RoZSBvcHRpb24gXCJwb3NpdGlvbi54XCIgaGFzIHRvIGJlIGEgZmluaXRlIG51bWJlci4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5wb3NpdGlvbi54ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucG9zaXRpb24ueSAhPSBudWxsKSB7XG4gICAgICAgIC8vIENvZXJjZSBhbmQgdmVyaWZ5IHRoYXQgeSBpcyB2YWxpZC5cbiAgICAgICAgb3B0aW9ucy5wb3NpdGlvbi55ID0gK29wdGlvbnMucG9zaXRpb24ueTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5wb3NpdGlvbi55KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAnVGhlIG9wdGlvbiBcInBvc2l0aW9uLnlcIiBoYXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnBvc2l0aW9uLnggPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnBvc2l0aW9uID0gdGhpcy5nZXRWaWV3UG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zY2FsZSAhPSBudWxsKSB7XG4gICAgICAvLyBDb2VyY2UgYW5kIHZlcmlmeSB0aGF0IHRoZSBzY2FsZSBpcyB2YWxpZC5cbiAgICAgIG9wdGlvbnMuc2NhbGUgPSArb3B0aW9ucy5zY2FsZTtcbiAgICAgIGlmICghKG9wdGlvbnMuc2NhbGUgPiAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdUaGUgb3B0aW9uIFwic2NhbGVcIiBoYXMgdG8gYmUgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8uJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnNjYWxlID0gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuYW5pbWF0aW9uID0geyBkdXJhdGlvbjogMCB9O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLmFuaW1hdGlvbiA9IHsgZHVyYXRpb246IDAgfTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0aW9uID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLmFuaW1hdGlvbiA9IHt9O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24uZHVyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5hbmltYXRpb24uZHVyYXRpb24gPSAxMDAwO1xuICAgIH0gLy8gZGVmYXVsdCBkdXJhdGlvblxuICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbi5lYXNpbmdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmFuaW1hdGlvbi5lYXNpbmdGdW5jdGlvbiA9IFwiZWFzZUluT3V0UXVhZFwiO1xuICAgIH0gLy8gZGVmYXVsdCBlYXNpbmcgZnVuY3Rpb25cblxuICAgIHRoaXMuYW5pbWF0ZVZpZXcob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgIHwgIG9wdGlvbnMub2Zmc2V0ICAgPSB7eDpudW1iZXIsIHk6bnVtYmVyfSAgIC8vIG9mZnNldCBmcm9tIHRoZSBjZW50ZXIgaW4gRE9NIHBpeGVsc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgb3B0aW9ucy50aW1lICAgICA9IG51bWJlciAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLnNjYWxlICAgID0gbnVtYmVyICAgICAgICAgICAgICAgICAvLyBzY2FsZSB0byBhbmltYXRlIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLnBvc2l0aW9uID0ge3g6bnVtYmVyLCB5Om51bWJlcn0gICAvLyBwb3NpdGlvbiB0byBhbmltYXRlIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLmVhc2luZ0Z1bmN0aW9uID0gU3RyaW5nICAgICAgICAgICAvLyBsaW5lYXIsIGVhc2VJblF1YWQsIGVhc2VPdXRRdWFkLCBlYXNlSW5PdXRRdWFkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFzZUluQ3ViaWMsIGVhc2VPdXRDdWJpYywgZWFzZUluT3V0Q3ViaWMsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYXNlSW5RdWFydCwgZWFzZU91dFF1YXJ0LCBlYXNlSW5PdXRRdWFydCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhc2VJblF1aW50LCBlYXNlT3V0UXVpbnQsIGVhc2VJbk91dFF1aW50XG4gICAqL1xuICBhbmltYXRlVmlldyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFuaW1hdGlvbkVhc2luZ0Z1bmN0aW9uID0gb3B0aW9ucy5hbmltYXRpb24uZWFzaW5nRnVuY3Rpb247XG4gICAgLy8gcmVsZWFzZSBpZiBzb21ldGhpbmcgZm9jdXNzZWQgb24gdGhlIG5vZGVcbiAgICB0aGlzLnJlbGVhc2VOb2RlKCk7XG4gICAgaWYgKG9wdGlvbnMubG9ja2VkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmxvY2tlZE9uTm9kZUlkID0gb3B0aW9ucy5sb2NrZWRPbk5vZGU7XG4gICAgICB0aGlzLmxvY2tlZE9uTm9kZU9mZnNldCA9IG9wdGlvbnMub2Zmc2V0O1xuICAgIH1cblxuICAgIC8vIGZvcmNlZnVsbHkgY29tcGxldGUgdGhlIG9sZCBhbmltYXRpb24gaWYgaXQgd2FzIHN0aWxsIHJ1bm5pbmdcbiAgICBpZiAodGhpcy5lYXNpbmdUaW1lICE9IDApIHtcbiAgICAgIHRoaXMuX3RyYW5zaXRpb25SZWRyYXcodHJ1ZSk7IC8vIGJ5IHNldHRpbmcgZWFzaW5ndGltZSB0byAxLCB3ZSBmaW5pc2ggdGhlIGFuaW1hdGlvbi5cbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZVNjYWxlID0gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgdGhpcy5zb3VyY2VUcmFuc2xhdGlvbiA9IHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uO1xuICAgIHRoaXMudGFyZ2V0U2NhbGUgPSBvcHRpb25zLnNjYWxlO1xuXG4gICAgLy8gc2V0IHRoZSBzY2FsZSBzbyB0aGUgdmlld0NlbnRlciBpcyBiYXNlZCBvbiB0aGUgY29ycmVjdCB6b29tIGxldmVsLiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gdGhlIHRyYW5zaXRpb25SZWRyYXdcbiAgICAvLyBidXQgYXQgbGVhc3QgdGhlbiB3ZSdsbCBoYXZlIHRoZSB0YXJnZXQgdHJhbnNpdGlvblxuICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gdGhpcy50YXJnZXRTY2FsZTtcbiAgICBjb25zdCB2aWV3Q2VudGVyID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoe1xuICAgICAgeDogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoLFxuICAgICAgeTogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRpc3RhbmNlRnJvbUNlbnRlciA9IHtcbiAgICAgIC8vIG9mZnNldCBmcm9tIHZpZXcsIGRpc3RhbmNlIHZpZXcgaGFzIHRvIGNoYW5nZSBieSB0aGVzZSB4IGFuZCB5IHRvIGNlbnRlciB0aGUgbm9kZVxuICAgICAgeDogdmlld0NlbnRlci54IC0gb3B0aW9ucy5wb3NpdGlvbi54LFxuICAgICAgeTogdmlld0NlbnRlci55IC0gb3B0aW9ucy5wb3NpdGlvbi55LFxuICAgIH07XG4gICAgdGhpcy50YXJnZXRUcmFuc2xhdGlvbiA9IHtcbiAgICAgIHg6XG4gICAgICAgIHRoaXMuc291cmNlVHJhbnNsYXRpb24ueCArXG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci54ICogdGhpcy50YXJnZXRTY2FsZSArXG4gICAgICAgIG9wdGlvbnMub2Zmc2V0LngsXG4gICAgICB5OlxuICAgICAgICB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uLnkgK1xuICAgICAgICBkaXN0YW5jZUZyb21DZW50ZXIueSAqIHRoaXMudGFyZ2V0U2NhbGUgK1xuICAgICAgICBvcHRpb25zLm9mZnNldC55LFxuICAgIH07XG5cbiAgICAvLyBpZiB0aGUgdGltZSBpcyBzZXQgdG8gMCwgZG9uJ3QgZG8gYW4gYW5pbWF0aW9uXG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0aW9uLmR1cmF0aW9uID09PSAwKSB7XG4gICAgICBpZiAodGhpcy5sb2NrZWRPbk5vZGVJZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52aWV3RnVuY3Rpb24gPSB0aGlzLl9sb2NrZWRSZWRyYXcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gdGhpcy50YXJnZXRTY2FsZTtcbiAgICAgICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB0aGlzLnRhcmdldFRyYW5zbGF0aW9uO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPVxuICAgICAgICAxIC8gKDYwICogb3B0aW9ucy5hbmltYXRpb24uZHVyYXRpb24gKiAwLjAwMSkgfHwgMSAvIDYwOyAvLyA2MCBmb3IgNjAgc2Vjb25kcywgMC4wMDEgZm9yIG1pbGxpJ3NcbiAgICAgIHRoaXMuYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb24gPSBvcHRpb25zLmFuaW1hdGlvbi5lYXNpbmdGdW5jdGlvbjtcblxuICAgICAgdGhpcy52aWV3RnVuY3Rpb24gPSB0aGlzLl90cmFuc2l0aW9uUmVkcmF3LmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImluaXRSZWRyYXdcIiwgdGhpcy52aWV3RnVuY3Rpb24pO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9zdGFydFJlbmRlcmluZ1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdXNlZCB0byBhbmltYXRlIHNtb290aGx5IGJ5IGhpamFja2luZyB0aGUgcmVkcmF3IGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2xvY2tlZFJlZHJhdygpIHtcbiAgICBjb25zdCBub2RlUG9zaXRpb24gPSB7XG4gICAgICB4OiB0aGlzLmJvZHkubm9kZXNbdGhpcy5sb2NrZWRPbk5vZGVJZF0ueCxcbiAgICAgIHk6IHRoaXMuYm9keS5ub2Rlc1t0aGlzLmxvY2tlZE9uTm9kZUlkXS55LFxuICAgIH07XG4gICAgY29uc3Qgdmlld0NlbnRlciA9IHRoaXMuY2FudmFzLkRPTXRvQ2FudmFzKHtcbiAgICAgIHg6IDAuNSAqIHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCxcbiAgICAgIHk6IDAuNSAqIHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQsXG4gICAgfSk7XG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQ2VudGVyID0ge1xuICAgICAgLy8gb2Zmc2V0IGZyb20gdmlldywgZGlzdGFuY2UgdmlldyBoYXMgdG8gY2hhbmdlIGJ5IHRoZXNlIHggYW5kIHkgdG8gY2VudGVyIHRoZSBub2RlXG4gICAgICB4OiB2aWV3Q2VudGVyLnggLSBub2RlUG9zaXRpb24ueCxcbiAgICAgIHk6IHZpZXdDZW50ZXIueSAtIG5vZGVQb3NpdGlvbi55LFxuICAgIH07XG4gICAgY29uc3Qgc291cmNlVHJhbnNsYXRpb24gPSB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbjtcbiAgICBjb25zdCB0YXJnZXRUcmFuc2xhdGlvbiA9IHtcbiAgICAgIHg6XG4gICAgICAgIHNvdXJjZVRyYW5zbGF0aW9uLnggK1xuICAgICAgICBkaXN0YW5jZUZyb21DZW50ZXIueCAqIHRoaXMuYm9keS52aWV3LnNjYWxlICtcbiAgICAgICAgdGhpcy5sb2NrZWRPbk5vZGVPZmZzZXQueCxcbiAgICAgIHk6XG4gICAgICAgIHNvdXJjZVRyYW5zbGF0aW9uLnkgK1xuICAgICAgICBkaXN0YW5jZUZyb21DZW50ZXIueSAqIHRoaXMuYm9keS52aWV3LnNjYWxlICtcbiAgICAgICAgdGhpcy5sb2NrZWRPbk5vZGVPZmZzZXQueSxcbiAgICB9O1xuXG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB0YXJnZXRUcmFuc2xhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgc3RhdGUgb2YgYSBsb2NrZWQgb24gTm9kZVxuICAgKi9cbiAgcmVsZWFzZU5vZGUoKSB7XG4gICAgaWYgKHRoaXMubG9ja2VkT25Ob2RlSWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnZpZXdGdW5jdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIHRoaXMubG9ja2VkT25Ob2RlSWQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmxvY2tlZE9uTm9kZU9mZnNldCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBbZmluaXNoZWQ9ZmFsc2VdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdHJhbnNpdGlvblJlZHJhdyhmaW5pc2hlZCA9IGZhbHNlKSB7XG4gICAgdGhpcy5lYXNpbmdUaW1lICs9IHRoaXMuYW5pbWF0aW9uU3BlZWQ7XG4gICAgdGhpcy5lYXNpbmdUaW1lID0gZmluaXNoZWQgPT09IHRydWUgPyAxLjAgOiB0aGlzLmVhc2luZ1RpbWU7XG5cbiAgICBjb25zdCBwcm9ncmVzcyA9IGVhc2luZ0Z1bmN0aW9uc1t0aGlzLmFuaW1hdGlvbkVhc2luZ0Z1bmN0aW9uXShcbiAgICAgIHRoaXMuZWFzaW5nVGltZVxuICAgICk7XG5cbiAgICB0aGlzLmJvZHkudmlldy5zY2FsZSA9XG4gICAgICB0aGlzLnNvdXJjZVNjYWxlICsgKHRoaXMudGFyZ2V0U2NhbGUgLSB0aGlzLnNvdXJjZVNjYWxlKSAqIHByb2dyZXNzO1xuICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uID0ge1xuICAgICAgeDpcbiAgICAgICAgdGhpcy5zb3VyY2VUcmFuc2xhdGlvbi54ICtcbiAgICAgICAgKHRoaXMudGFyZ2V0VHJhbnNsYXRpb24ueCAtIHRoaXMuc291cmNlVHJhbnNsYXRpb24ueCkgKiBwcm9ncmVzcyxcbiAgICAgIHk6XG4gICAgICAgIHRoaXMuc291cmNlVHJhbnNsYXRpb24ueSArXG4gICAgICAgICh0aGlzLnRhcmdldFRyYW5zbGF0aW9uLnkgLSB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uLnkpICogcHJvZ3Jlc3MsXG4gICAgfTtcblxuICAgIC8vIGNsZWFudXBcbiAgICBpZiAodGhpcy5lYXNpbmdUaW1lID49IDEuMCkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKFwiaW5pdFJlZHJhd1wiLCB0aGlzLnZpZXdGdW5jdGlvbik7XG4gICAgICB0aGlzLmVhc2luZ1RpbWUgPSAwO1xuICAgICAgaWYgKHRoaXMubG9ja2VkT25Ob2RlSWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMudmlld0Z1bmN0aW9uID0gdGhpcy5fbG9ja2VkUmVkcmF3LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiaW5pdFJlZHJhd1wiLCB0aGlzLnZpZXdGdW5jdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYW5pbWF0aW9uRmluaXNoZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRTY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge3t4OiBudW1iZXIsIHk6IG51bWJlcn19XG4gICAqL1xuICBnZXRWaWV3UG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FudmFzLkRPTXRvQ2FudmFzKHtcbiAgICAgIHg6IDAuNSAqIHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCxcbiAgICAgIHk6IDAuNSAqIHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlldztcbiIsICJ0eXBlIElkVHlwZSA9IHN0cmluZyB8IG51bWJlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWV3Rml0T3B0aW9ucyB7XG4gIG5vZGVzOiBJZFR5cGVbXTtcbiAgbWluWm9vbUxldmVsOiBudW1iZXI7XG4gIG1heFpvb21MZXZlbDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoZSBmaXQgb3B0aW9ucywgcmVwbGFjZSBtaXNzaW5nIG9wdGlvbmFsIHZhbHVlcyBieSBkZWZhdWx0cyBldGMuXG4gKlxuICogQHBhcmFtIHJhd09wdGlvbnMgLSBUaGUgcmF3IG9wdGlvbnMuXG4gKiBAcGFyYW0gYWxsTm9kZUlkcyAtIEFsbCBub2RlIGlkcyB0aGF0IHdpbGwgYmUgdXNlZCBpZiBub2RlcyBhcmUgb21pdHRlZCBpblxuICogdGhlIHJhdyBvcHRpb25zLlxuICogQHJldHVybnMgT3B0aW9ucyB3aXRoIGV2ZXJ5dGhpbmcgZmlsbGVkIGluIGFuZCB2YWxpZGF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGaXRPcHRpb25zKFxuICByYXdPcHRpb25zOiBQYXJ0aWFsPFZpZXdGaXRPcHRpb25zPixcbiAgYWxsTm9kZUlkczogSWRUeXBlW11cbik6IFZpZXdGaXRPcHRpb25zIHtcbiAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ248Vmlld0ZpdE9wdGlvbnMsIFBhcnRpYWw8Vmlld0ZpdE9wdGlvbnM+PihcbiAgICB7XG4gICAgICBub2RlczogYWxsTm9kZUlkcyxcbiAgICAgIG1pblpvb21MZXZlbDogTnVtYmVyLk1JTl9WQUxVRSxcbiAgICAgIG1heFpvb21MZXZlbDogMSxcbiAgICB9LFxuICAgIHJhd09wdGlvbnMgPz8ge31cbiAgKTtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5ub2RlcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm9kZXMgaGFzIHRvIGJlIGFuIGFycmF5IG9mIGlkcy5cIik7XG4gIH1cbiAgaWYgKG9wdGlvbnMubm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgb3B0aW9ucy5ub2RlcyA9IGFsbE5vZGVJZHM7XG4gIH1cblxuICBpZiAoISh0eXBlb2Ygb3B0aW9ucy5taW5ab29tTGV2ZWwgPT09IFwibnVtYmVyXCIgJiYgb3B0aW9ucy5taW5ab29tTGV2ZWwgPiAwKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNaW4gem9vbSBsZXZlbCBoYXMgdG8gYmUgYSBudW1iZXIgaGlnaGVyIHRoYW4gemVyby5cIik7XG4gIH1cblxuICBpZiAoXG4gICAgIShcbiAgICAgIHR5cGVvZiBvcHRpb25zLm1heFpvb21MZXZlbCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgb3B0aW9ucy5taW5ab29tTGV2ZWwgPD0gb3B0aW9ucy5tYXhab29tTGV2ZWxcbiAgICApXG4gICkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBcIk1heCB6b29tIGxldmVsIGhhcyB0byBiZSBhIG51bWJlciBoaWdoZXIgdGhhbiBtaW4gem9vbSBsZXZlbC5cIlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn1cbiIsICIvKipcclxuICogQ3JlYXRlZCBieSBBbGV4IG9uIDExLzYvMjAxNC5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGtleWNoYXJtKG9wdGlvbnMpIHtcclxuICB2YXIgcHJldmVudERlZmF1bHQgPSBvcHRpb25zICYmIG9wdGlvbnMucHJldmVudERlZmF1bHQgfHwgZmFsc2U7XHJcblxyXG4gIHZhciBjb250YWluZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGFpbmVyIHx8IHdpbmRvdztcclxuXHJcbiAgdmFyIF9leHBvcnRGdW5jdGlvbnMgPSB7fTtcclxuICB2YXIgX2JvdW5kID0ge2tleWRvd246e30sIGtleXVwOnt9fTtcclxuICB2YXIgX2tleXMgPSB7fTtcclxuICB2YXIgaTtcclxuXHJcbiAgLy8gYSAtIHpcclxuICBmb3IgKGkgPSA5NzsgaSA8PSAxMjI7IGkrKykge19rZXlzW1N0cmluZy5mcm9tQ2hhckNvZGUoaSldID0ge2NvZGU6NjUgKyAoaSAtIDk3KSwgc2hpZnQ6IGZhbHNlfTt9XHJcbiAgLy8gQSAtIFpcclxuICBmb3IgKGkgPSA2NTsgaSA8PSA5MDsgaSsrKSB7X2tleXNbU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSB7Y29kZTppLCBzaGlmdDogdHJ1ZX07fVxyXG4gIC8vIDAgLSA5XHJcbiAgZm9yIChpID0gMDsgIGkgPD0gOTsgICBpKyspIHtfa2V5c1snJyArIGldID0ge2NvZGU6NDggKyBpLCBzaGlmdDogZmFsc2V9O31cclxuICAvLyBGMSAtIEYxMlxyXG4gIGZvciAoaSA9IDE7ICBpIDw9IDEyOyAgIGkrKykge19rZXlzWydGJyArIGldID0ge2NvZGU6MTExICsgaSwgc2hpZnQ6IGZhbHNlfTt9XHJcbiAgLy8gbnVtMCAtIG51bTlcclxuICBmb3IgKGkgPSAwOyAgaSA8PSA5OyAgIGkrKykge19rZXlzWydudW0nICsgaV0gPSB7Y29kZTo5NiArIGksIHNoaWZ0OiBmYWxzZX07fVxyXG5cclxuICAvLyBudW1wYWQgbWlzY1xyXG4gIF9rZXlzWydudW0qJ10gPSB7Y29kZToxMDYsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ251bSsnXSA9IHtjb2RlOjEwNywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snbnVtLSddID0ge2NvZGU6MTA5LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydudW0vJ10gPSB7Y29kZToxMTEsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ251bS4nXSA9IHtjb2RlOjExMCwgc2hpZnQ6IGZhbHNlfTtcclxuICAvLyBhcnJvd3NcclxuICBfa2V5c1snbGVmdCddICA9IHtjb2RlOjM3LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWyd1cCddICAgID0ge2NvZGU6MzgsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3JpZ2h0J10gPSB7Y29kZTozOSwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snZG93biddICA9IHtjb2RlOjQwLCBzaGlmdDogZmFsc2V9O1xyXG4gIC8vIGV4dHJhIGtleXNcclxuICBfa2V5c1snc3BhY2UnXSA9IHtjb2RlOjMyLCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydlbnRlciddID0ge2NvZGU6MTMsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3NoaWZ0J10gPSB7Y29kZToxNiwgc2hpZnQ6IHVuZGVmaW5lZH07XHJcbiAgX2tleXNbJ2VzYyddICAgPSB7Y29kZToyNywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snYmFja3NwYWNlJ10gPSB7Y29kZTo4LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWyd0YWInXSAgICAgICA9IHtjb2RlOjksIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ2N0cmwnXSAgICAgID0ge2NvZGU6MTcsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ2FsdCddICAgICAgID0ge2NvZGU6MTgsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ2RlbGV0ZSddICAgID0ge2NvZGU6NDYsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3BhZ2V1cCddICAgID0ge2NvZGU6MzMsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3BhZ2Vkb3duJ10gID0ge2NvZGU6MzQsIHNoaWZ0OiBmYWxzZX07XHJcbiAgLy8gc3ltYm9sc1xyXG4gIF9rZXlzWyc9J10gICAgID0ge2NvZGU6MTg3LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWyctJ10gICAgID0ge2NvZGU6MTg5LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWyddJ10gICAgID0ge2NvZGU6MjIxLCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydbJ10gICAgID0ge2NvZGU6MjE5LCBzaGlmdDogZmFsc2V9O1xyXG5cclxuXHJcblxyXG4gIHZhciBkb3duID0gZnVuY3Rpb24oZXZlbnQpIHtoYW5kbGVFdmVudChldmVudCwna2V5ZG93bicpO307XHJcbiAgdmFyIHVwID0gZnVuY3Rpb24oZXZlbnQpIHtoYW5kbGVFdmVudChldmVudCwna2V5dXAnKTt9O1xyXG5cclxuICAvLyBoYW5kbGUgdGhlIGFjdHVhbHkgYm91bmQga2V5IHdpdGggdGhlIGV2ZW50XHJcbiAgdmFyIGhhbmRsZUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQsdHlwZSkge1xyXG4gICAgaWYgKF9ib3VuZFt0eXBlXVtldmVudC5rZXlDb2RlXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHZhciBib3VuZCA9IF9ib3VuZFt0eXBlXVtldmVudC5rZXlDb2RlXTtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChib3VuZFtpXS5zaGlmdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBib3VuZFtpXS5mbihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGJvdW5kW2ldLnNoaWZ0ID09IHRydWUgJiYgZXZlbnQuc2hpZnRLZXkgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgYm91bmRbaV0uZm4oZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChib3VuZFtpXS5zaGlmdCA9PSBmYWxzZSAmJiBldmVudC5zaGlmdEtleSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgYm91bmRbaV0uZm4oZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHByZXZlbnREZWZhdWx0ID09IHRydWUpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gYmluZCBhIGtleSB0byBhIGNhbGxiYWNrXHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy5iaW5kID0gZnVuY3Rpb24oa2V5LCBjYWxsYmFjaywgdHlwZSkge1xyXG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0eXBlID0gJ2tleWRvd24nO1xyXG4gICAgfVxyXG4gICAgaWYgKF9rZXlzW2tleV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBrZXk6IFwiICsga2V5KTtcclxuICAgIH1cclxuICAgIGlmIChfYm91bmRbdHlwZV1bX2tleXNba2V5XS5jb2RlXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdID0gW107XHJcbiAgICB9XHJcbiAgICBfYm91bmRbdHlwZV1bX2tleXNba2V5XS5jb2RlXS5wdXNoKHtmbjpjYWxsYmFjaywgc2hpZnQ6X2tleXNba2V5XS5zaGlmdH0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvLyBiaW5kIGFsbCBrZXlzIHRvIGEgY2FsbCBiYWNrIChkZW1vIHB1cnBvc2VzKVxyXG4gIF9leHBvcnRGdW5jdGlvbnMuYmluZEFsbCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0eXBlKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHR5cGUgPSAna2V5ZG93bic7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gX2tleXMpIHtcclxuICAgICAgaWYgKF9rZXlzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICBfZXhwb3J0RnVuY3Rpb25zLmJpbmQoa2V5LGNhbGxiYWNrLHR5cGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gZ2V0IHRoZSBrZXkgbGFiZWwgZnJvbSBhbiBldmVudFxyXG4gIF9leHBvcnRGdW5jdGlvbnMuZ2V0S2V5ID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIGZvciAodmFyIGtleSBpbiBfa2V5cykge1xyXG4gICAgICBpZiAoX2tleXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSA9PSB0cnVlICYmIF9rZXlzW2tleV0uc2hpZnQgPT0gdHJ1ZSAmJiBldmVudC5rZXlDb2RlID09IF9rZXlzW2tleV0uY29kZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkgPT0gZmFsc2UgJiYgX2tleXNba2V5XS5zaGlmdCA9PSBmYWxzZSAmJiBldmVudC5rZXlDb2RlID09IF9rZXlzW2tleV0uY29kZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PSBfa2V5c1trZXldLmNvZGUgJiYga2V5ID09ICdzaGlmdCcpIHtcclxuICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJ1bmtub3duIGtleSwgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWRcIjtcclxuICB9O1xyXG5cclxuICAvLyB1bmJpbmQgZWl0aGVyIGEgc3BlY2lmaWMgY2FsbGJhY2sgZnJvbSBhIGtleSBvciBhbGwgb2YgdGhlbSAoYnkgbGVhdmluZyBjYWxsYmFjayB1bmRlZmluZWQpXHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy51bmJpbmQgPSBmdW5jdGlvbihrZXksIGNhbGxiYWNrLCB0eXBlKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHR5cGUgPSAna2V5ZG93bic7XHJcbiAgICB9XHJcbiAgICBpZiAoX2tleXNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGtleTogXCIgKyBrZXkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdmFyIG5ld0JpbmRpbmdzID0gW107XHJcbiAgICAgIHZhciBib3VuZCA9IF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdO1xyXG4gICAgICBpZiAoYm91bmQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmICghKGJvdW5kW2ldLmZuID09IGNhbGxiYWNrICYmIGJvdW5kW2ldLnNoaWZ0ID09IF9rZXlzW2tleV0uc2hpZnQpKSB7XHJcbiAgICAgICAgICAgIG5ld0JpbmRpbmdzLnB1c2goX2JvdW5kW3R5cGVdW19rZXlzW2tleV0uY29kZV1baV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBfYm91bmRbdHlwZV1bX2tleXNba2V5XS5jb2RlXSA9IG5ld0JpbmRpbmdzO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdID0gW107XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gcmVzZXQgYWxsIGJvdW5kIHZhcmlhYmxlcy5cclxuICBfZXhwb3J0RnVuY3Rpb25zLnJlc2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfYm91bmQgPSB7a2V5ZG93bjp7fSwga2V5dXA6e319O1xyXG4gIH07XHJcblxyXG4gIC8vIHVuYmluZCBhbGwgbGlzdGVuZXJzIGFuZCByZXNldCBhbGwgdmFyaWFibGVzLlxyXG4gIF9leHBvcnRGdW5jdGlvbnMuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX2JvdW5kID0ge2tleWRvd246e30sIGtleXVwOnt9fTtcclxuICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZG93biwgdHJ1ZSk7XHJcbiAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB1cCwgdHJ1ZSk7XHJcbiAgfTtcclxuXHJcbiAgLy8gY3JlYXRlIGxpc3RlbmVycy5cclxuICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsZG93bix0cnVlKTtcclxuICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLHVwLHRydWUpO1xyXG5cclxuICAvLyByZXR1cm4gdGhlIHB1YmxpYyBmdW5jdGlvbnMuXHJcbiAgcmV0dXJuIF9leHBvcnRGdW5jdGlvbnM7XHJcbn1cclxuIiwgImltcG9ydCBcIi4vTmF2aWdhdGlvbkhhbmRsZXIuY3NzXCI7XG5cbmltcG9ydCB7IEhhbW1lciB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCB7IG9uUmVsZWFzZSwgb25Ub3VjaCB9IGZyb20gXCIuLi8uLi8uLi9oYW1tZXJVdGlsXCI7XG5pbXBvcnQga2V5Y2hhcm0gZnJvbSBcImtleWNoYXJtXCI7XG5cbi8qKlxuICogTmF2aWdhdGlvbiBIYW5kbGVyXG4gKi9cbmNsYXNzIE5hdmlnYXRpb25IYW5kbGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGNhbnZhcykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5jYW52YXMgPSBjYW52YXM7XG5cbiAgICB0aGlzLmljb25zQ3JlYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMubmF2aWdhdGlvbkhhbW1lcnMgPSBbXTtcbiAgICB0aGlzLmJvdW5kRnVuY3Rpb25zID0ge307XG4gICAgdGhpcy50b3VjaFRpbWUgPSAwO1xuICAgIHRoaXMuYWN0aXZhdGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImFjdGl2YXRlXCIsICgpID0+IHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuY29uZmlndXJlS2V5Ym9hcmRCaW5kaW5ncygpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVhY3RpdmF0ZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmFjdGl2YXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jb25maWd1cmVLZXlib2FyZEJpbmRpbmdzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZXN0cm95XCIsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmtleWNoYXJtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5rZXljaGFybS5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgIHRoaXMuY3JlYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgb3IgcmVmcmVzaGVzIG5hdmlnYXRpb24gYW5kIHNldHMga2V5IGJpbmRpbmdzXG4gICAqL1xuICBjcmVhdGUoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5uYXZpZ2F0aW9uQnV0dG9ucyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMuaWNvbnNDcmVhdGVkID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmxvYWROYXZpZ2F0aW9uRWxlbWVudHMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuaWNvbnNDcmVhdGVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmNsZWFuTmF2aWdhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlndXJlS2V5Ym9hcmRCaW5kaW5ncygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFucyB1cCBwcmV2aW91cyBuYXZpZ2F0aW9uIGl0ZW1zXG4gICAqL1xuICBjbGVhbk5hdmlnYXRpb24oKSB7XG4gICAgLy8gY2xlYW4gaGFtbWVyIGJpbmRpbmdzXG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkhhbW1lcnMubGVuZ3RoICE9IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5uYXZpZ2F0aW9uSGFtbWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25IYW1tZXJzW2ldLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmF2aWdhdGlvbkhhbW1lcnMgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBwcmV2aW91cyBuYXZpZ2F0aW9uIGl0ZW1zXG4gICAgaWYgKFxuICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NICYmXG4gICAgICB0aGlzLm5hdmlnYXRpb25ET01bXCJ3cmFwcGVyXCJdICYmXG4gICAgICB0aGlzLm5hdmlnYXRpb25ET01bXCJ3cmFwcGVyXCJdLnBhcmVudE5vZGVcbiAgICApIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmljb25zQ3JlYXRlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0aW9uIG9mIHRoZSBuYXZpZ2F0aW9uIGNvbnRyb2xzIG5vZGVzLiBUaGV5IGFyZSBkcmF3biBvdmVyIHRoZSByZXN0IG9mIHRoZSBub2RlcyBhbmQgYXJlIG5vdCBhZmZlY3RlZCBieSBzY2FsZSBhbmQgdHJhbnNsYXRpb25cbiAgICogdGhleSBoYXZlIGEgdHJpZ2dlckZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBvbiBjbGljay4gSWYgdGhlIHBvc2l0aW9uIG9mIHRoZSBuYXZpZ2F0aW9uIGNvbnRyb2xzIGlzIGRlcGVuZGVudFxuICAgKiBvbiB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCBvciB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQsIHdlIGZsYWcgaG9yaXpvbnRhbEFsaWduTGVmdCBhbmQgdmVydGljYWxBbGlnblRvcCBmYWxzZS5cbiAgICogVGhpcyBtZWFucyB0aGF0IHRoZSBsb2NhdGlvbiB3aWxsIGJlIGNvcnJlY3RlZCBieSB0aGUgX3JlbG9jYXRlTmF2aWdhdGlvbiBmdW5jdGlvbiBvbiBhIHNpemUgY2hhbmdlIG9mIHRoZSBjYW52YXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBsb2FkTmF2aWdhdGlvbkVsZW1lbnRzKCkge1xuICAgIHRoaXMuY2xlYW5OYXZpZ2F0aW9uKCk7XG5cbiAgICB0aGlzLm5hdmlnYXRpb25ET00gPSB7fTtcbiAgICBjb25zdCBuYXZpZ2F0aW9uRGl2cyA9IFtcbiAgICAgIFwidXBcIixcbiAgICAgIFwiZG93blwiLFxuICAgICAgXCJsZWZ0XCIsXG4gICAgICBcInJpZ2h0XCIsXG4gICAgICBcInpvb21JblwiLFxuICAgICAgXCJ6b29tT3V0XCIsXG4gICAgICBcInpvb21FeHRlbmRzXCIsXG4gICAgXTtcbiAgICBjb25zdCBuYXZpZ2F0aW9uRGl2QWN0aW9ucyA9IFtcbiAgICAgIFwiX21vdmVVcFwiLFxuICAgICAgXCJfbW92ZURvd25cIixcbiAgICAgIFwiX21vdmVMZWZ0XCIsXG4gICAgICBcIl9tb3ZlUmlnaHRcIixcbiAgICAgIFwiX3pvb21JblwiLFxuICAgICAgXCJfem9vbU91dFwiLFxuICAgICAgXCJfZml0XCIsXG4gICAgXTtcblxuICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0uY2xhc3NOYW1lID0gXCJ2aXMtbmF2aWdhdGlvblwiO1xuICAgIHRoaXMuY2FudmFzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXZpZ2F0aW9uRGl2cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW25hdmlnYXRpb25EaXZzW2ldXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLm5hdmlnYXRpb25ET01bbmF2aWdhdGlvbkRpdnNbaV1dLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWJ1dHRvbiB2aXMtXCIgKyBuYXZpZ2F0aW9uRGl2c1tpXTtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0uYXBwZW5kQ2hpbGQoXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtuYXZpZ2F0aW9uRGl2c1tpXV1cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGhhbW1lciA9IG5ldyBIYW1tZXIodGhpcy5uYXZpZ2F0aW9uRE9NW25hdmlnYXRpb25EaXZzW2ldXSk7XG4gICAgICBpZiAobmF2aWdhdGlvbkRpdkFjdGlvbnNbaV0gPT09IFwiX2ZpdFwiKSB7XG4gICAgICAgIG9uVG91Y2goaGFtbWVyLCB0aGlzLl9maXQuYmluZCh0aGlzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvblRvdWNoKGhhbW1lciwgdGhpcy5iaW5kVG9SZWRyYXcuYmluZCh0aGlzLCBuYXZpZ2F0aW9uRGl2QWN0aW9uc1tpXSkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5hdmlnYXRpb25IYW1tZXJzLnB1c2goaGFtbWVyKTtcbiAgICB9XG5cbiAgICAvLyB1c2UgYSBoYW1tZXIgZm9yIHRoZSByZWxlYXNlIHNvIHdlIGRvIG5vdCByZXF1aXJlIHRoZSBvbmUgdXNlZCBpbiB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya1xuICAgIC8vIHRoZSBvbmUgdGhlIHJlc3QgdXNlcyBjYW4gYmUgb3ZlcmxvYWRlZCBieSB0aGUgbWFuaXB1bGF0aW9uIHN5c3RlbS5cbiAgICBjb25zdCBoYW1tZXJGcmFtZSA9IG5ldyBIYW1tZXIodGhpcy5jYW52YXMuZnJhbWUpO1xuICAgIG9uUmVsZWFzZShoYW1tZXJGcmFtZSwgKCkgPT4ge1xuICAgICAgdGhpcy5fc3RvcE1vdmVtZW50KCk7XG4gICAgfSk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uSGFtbWVycy5wdXNoKGhhbW1lckZyYW1lKTtcblxuICAgIHRoaXMuaWNvbnNDcmVhdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uXG4gICAqL1xuICBiaW5kVG9SZWRyYXcoYWN0aW9uKSB7XG4gICAgaWYgKHRoaXMuYm91bmRGdW5jdGlvbnNbYWN0aW9uXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJvdW5kRnVuY3Rpb25zW2FjdGlvbl0gPSB0aGlzW2FjdGlvbl0uYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiaW5pdFJlZHJhd1wiLCB0aGlzLmJvdW5kRnVuY3Rpb25zW2FjdGlvbl0pO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9zdGFydFJlbmRlcmluZ1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvblxuICAgKi9cbiAgdW5iaW5kRnJvbVJlZHJhdyhhY3Rpb24pIHtcbiAgICBpZiAodGhpcy5ib3VuZEZ1bmN0aW9uc1thY3Rpb25dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9mZihcImluaXRSZWRyYXdcIiwgdGhpcy5ib3VuZEZ1bmN0aW9uc1thY3Rpb25dKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfc3RvcFJlbmRlcmluZ1wiKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvdW5kRnVuY3Rpb25zW2FjdGlvbl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgc3RvcHMgYWxsIG1vdmVtZW50IGluZHVjZWQgYnkgdGhlIG5hdmlnYXRpb24gYnV0dG9uc1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpdCgpIHtcbiAgICBpZiAobmV3IERhdGUoKS52YWx1ZU9mKCkgLSB0aGlzLnRvdWNoVGltZSA+IDcwMCkge1xuICAgICAgLy8gVE9ETzogZml4IHVnbHkgaGFjayB0byBhdm9pZCBoYW1tZXIncyBkb3VibGUgZmlyZWluZyBvZiBldmVudCAoYmVjYXVzZSB3ZSB1c2UgcmVsZWFzZT8pXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiZml0XCIsIHsgZHVyYXRpb246IDcwMCB9KTtcbiAgICAgIHRoaXMudG91Y2hUaW1lID0gbmV3IERhdGUoKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgc3RvcHMgYWxsIG1vdmVtZW50IGluZHVjZWQgYnkgdGhlIG5hdmlnYXRpb24gYnV0dG9uc1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3N0b3BNb3ZlbWVudCgpIHtcbiAgICBmb3IgKGNvbnN0IGJvdW5kQWN0aW9uIGluIHRoaXMuYm91bmRGdW5jdGlvbnMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm91bmRGdW5jdGlvbnMsIGJvdW5kQWN0aW9uKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9mZihcImluaXRSZWRyYXdcIiwgdGhpcy5ib3VuZEZ1bmN0aW9uc1tib3VuZEFjdGlvbl0pO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0b3BSZW5kZXJpbmdcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYm91bmRGdW5jdGlvbnMgPSB7fTtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlVXAoKSB7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueSArPSB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuc3BlZWQueTtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlRG93bigpIHtcbiAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55IC09IHRoaXMub3B0aW9ucy5rZXlib2FyZC5zcGVlZC55O1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21vdmVMZWZ0KCkge1xuICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnggKz0gdGhpcy5vcHRpb25zLmtleWJvYXJkLnNwZWVkLng7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbW92ZVJpZ2h0KCkge1xuICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnggLT0gdGhpcy5vcHRpb25zLmtleWJvYXJkLnNwZWVkLng7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfem9vbUluKCkge1xuICAgIGNvbnN0IHNjYWxlT2xkID0gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgY29uc3Qgc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZSAqICgxICsgdGhpcy5vcHRpb25zLmtleWJvYXJkLnNwZWVkLnpvb20pO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb247XG4gICAgY29uc3Qgc2NhbGVGcmFjID0gc2NhbGUgLyBzY2FsZU9sZDtcbiAgICBjb25zdCB0eCA9XG4gICAgICAoMSAtIHNjYWxlRnJhYykgKiB0aGlzLmNhbnZhcy5jYW52YXNWaWV3Q2VudGVyLnggK1xuICAgICAgdHJhbnNsYXRpb24ueCAqIHNjYWxlRnJhYztcbiAgICBjb25zdCB0eSA9XG4gICAgICAoMSAtIHNjYWxlRnJhYykgKiB0aGlzLmNhbnZhcy5jYW52YXNWaWV3Q2VudGVyLnkgK1xuICAgICAgdHJhbnNsYXRpb24ueSAqIHNjYWxlRnJhYztcblxuICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gc2NhbGU7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7IHg6IHR4LCB5OiB0eSB9O1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJ6b29tXCIsIHtcbiAgICAgIGRpcmVjdGlvbjogXCIrXCIsXG4gICAgICBzY2FsZTogdGhpcy5ib2R5LnZpZXcuc2NhbGUsXG4gICAgICBwb2ludGVyOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfem9vbU91dCgpIHtcbiAgICBjb25zdCBzY2FsZU9sZCA9IHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgIGNvbnN0IHNjYWxlID0gdGhpcy5ib2R5LnZpZXcuc2NhbGUgLyAoMSArIHRoaXMub3B0aW9ucy5rZXlib2FyZC5zcGVlZC56b29tKTtcbiAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uO1xuICAgIGNvbnN0IHNjYWxlRnJhYyA9IHNjYWxlIC8gc2NhbGVPbGQ7XG4gICAgY29uc3QgdHggPVxuICAgICAgKDEgLSBzY2FsZUZyYWMpICogdGhpcy5jYW52YXMuY2FudmFzVmlld0NlbnRlci54ICtcbiAgICAgIHRyYW5zbGF0aW9uLnggKiBzY2FsZUZyYWM7XG4gICAgY29uc3QgdHkgPVxuICAgICAgKDEgLSBzY2FsZUZyYWMpICogdGhpcy5jYW52YXMuY2FudmFzVmlld0NlbnRlci55ICtcbiAgICAgIHRyYW5zbGF0aW9uLnkgKiBzY2FsZUZyYWM7XG5cbiAgICB0aGlzLmJvZHkudmlldy5zY2FsZSA9IHNjYWxlO1xuICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uID0geyB4OiB0eCwgeTogdHkgfTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiem9vbVwiLCB7XG4gICAgICBkaXJlY3Rpb246IFwiLVwiLFxuICAgICAgc2NhbGU6IHRoaXMuYm9keS52aWV3LnNjYWxlLFxuICAgICAgcG9pbnRlcjogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBiaW5kIGFsbCBrZXlzIHVzaW5nIGtleWNoYXJtLlxuICAgKi9cbiAgY29uZmlndXJlS2V5Ym9hcmRCaW5kaW5ncygpIHtcbiAgICBpZiAodGhpcy5rZXljaGFybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmtleWNoYXJtLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmtleWJvYXJkLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMua2V5Ym9hcmQuYmluZFRvV2luZG93ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0gPSBrZXljaGFybSh7IGNvbnRhaW5lcjogd2luZG93LCBwcmV2ZW50RGVmYXVsdDogdHJ1ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0gPSBrZXljaGFybSh7XG4gICAgICAgICAgY29udGFpbmVyOiB0aGlzLmNhbnZhcy5mcmFtZSxcbiAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMua2V5Y2hhcm0ucmVzZXQoKTtcblxuICAgICAgaWYgKHRoaXMuYWN0aXZhdGVkID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcInVwXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfbW92ZVVwXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiZG93blwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX21vdmVEb3duXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibGVmdFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX21vdmVMZWZ0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwicmlnaHRcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl9tb3ZlUmlnaHRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCI9XCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbUluXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibnVtK1wiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21JblwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIm51bS1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiLVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21PdXRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJbXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIl1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJwYWdldXBcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJwYWdlZG93blwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21PdXRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcInVwXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRGcm9tUmVkcmF3KFwiX21vdmVVcFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJkb3duXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRGcm9tUmVkcmF3KFwiX21vdmVEb3duXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcImxlZnRcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfbW92ZUxlZnRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwicmlnaHRcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfbW92ZVJpZ2h0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIj1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfem9vbUluXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIm51bStcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfem9vbUluXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIm51bS1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCItXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRGcm9tUmVkcmF3KFwiX3pvb21PdXRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiW1wiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIl1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfem9vbUluXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcInBhZ2V1cFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwicGFnZWRvd25cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uSGFuZGxlcjtcbiIsICJpbXBvcnQge1xuICBQb3B1cCxcbiAgZ2V0QWJzb2x1dGVMZWZ0LFxuICBnZXRBYnNvbHV0ZVRvcCxcbiAgbWVyZ2VPcHRpb25zLFxuICBwYXJzZUNvbG9yLFxuICBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgTmF2aWdhdGlvbkhhbmRsZXIgZnJvbSBcIi4vY29tcG9uZW50cy9OYXZpZ2F0aW9uSGFuZGxlclwiO1xuXG4vKipcbiAqIEhhbmRsZXIgZm9yIGludGVyYWN0aW9uc1xuICovXG5jbGFzcyBJbnRlcmFjdGlvbkhhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkhhbmRsZXJ9IHNlbGVjdGlvbkhhbmRsZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGNhbnZhcywgc2VsZWN0aW9uSGFuZGxlcikge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5jYW52YXMgPSBjYW52YXM7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gc2VsZWN0aW9uSGFuZGxlcjtcbiAgICB0aGlzLm5hdmlnYXRpb25IYW5kbGVyID0gbmV3IE5hdmlnYXRpb25IYW5kbGVyKGJvZHksIGNhbnZhcyk7XG5cbiAgICAvLyBiaW5kIHRoZSBldmVudHMgZnJvbSBoYW1tZXIgdG8gZnVuY3Rpb25zIGluIHRoaXMgb2JqZWN0XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uVGFwID0gdGhpcy5vblRhcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblRvdWNoID0gdGhpcy5vblRvdWNoLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uRG91YmxlVGFwID0gdGhpcy5vbkRvdWJsZVRhcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkhvbGQgPSB0aGlzLm9uSG9sZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWdTdGFydCA9IHRoaXMub25EcmFnU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25EcmFnID0gdGhpcy5vbkRyYWcuYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25EcmFnRW5kID0gdGhpcy5vbkRyYWdFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Nb3VzZVdoZWVsID0gdGhpcy5vbk1vdXNlV2hlZWwuYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25QaW5jaCA9IHRoaXMub25QaW5jaC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25SZWxlYXNlID0gdGhpcy5vblJlbGVhc2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Db250ZXh0ID0gdGhpcy5vbkNvbnRleHQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudG91Y2hUaW1lID0gMDtcbiAgICB0aGlzLmRyYWcgPSB7fTtcbiAgICB0aGlzLnBpbmNoID0ge307XG4gICAgdGhpcy5wb3B1cCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBvcHVwT2JqID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucG9wdXBUaW1lciA9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuYm9keS5mdW5jdGlvbnMuZ2V0UG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlci5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGRyYWdOb2RlczogdHJ1ZSxcbiAgICAgIGRyYWdWaWV3OiB0cnVlLFxuICAgICAgaG92ZXI6IGZhbHNlLFxuICAgICAga2V5Ym9hcmQ6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHNwZWVkOiB7IHg6IDEwLCB5OiAxMCwgem9vbTogMC4wMiB9LFxuICAgICAgICBiaW5kVG9XaW5kb3c6IHRydWUsXG4gICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBuYXZpZ2F0aW9uQnV0dG9uczogZmFsc2UsXG4gICAgICB0b29sdGlwRGVsYXk6IDMwMCxcbiAgICAgIHpvb21WaWV3OiB0cnVlLFxuICAgICAgem9vbVNwZWVkOiAxLFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucG9wdXBUaW1lcik7XG4gICAgICBkZWxldGUgdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBleHRlbmQgYWxsIGJ1dCB0aGUgdmFsdWVzIGluIGZpZWxkc1xuICAgICAgY29uc3QgZmllbGRzID0gW1xuICAgICAgICBcImhpZGVFZGdlc09uRHJhZ1wiLFxuICAgICAgICBcImhpZGVFZGdlc09uWm9vbVwiLFxuICAgICAgICBcImhpZGVOb2Rlc09uRHJhZ1wiLFxuICAgICAgICBcImtleWJvYXJkXCIsXG4gICAgICAgIFwibXVsdGlzZWxlY3RcIixcbiAgICAgICAgXCJzZWxlY3RhYmxlXCIsXG4gICAgICAgIFwic2VsZWN0Q29ubmVjdGVkRWRnZXNcIixcbiAgICAgIF07XG4gICAgICBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kKGZpZWxkcywgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgLy8gbWVyZ2UgdGhlIGtleWJvYXJkIG9wdGlvbnMgaW4uXG4gICAgICBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zLCBcImtleWJvYXJkXCIpO1xuXG4gICAgICBpZiAob3B0aW9ucy50b29sdGlwKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLnRvb2x0aXAsIG9wdGlvbnMudG9vbHRpcCk7XG4gICAgICAgIGlmIChvcHRpb25zLnRvb2x0aXAuY29sb3IpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMudG9vbHRpcC5jb2xvciA9IHBhcnNlQ29sb3Iob3B0aW9ucy50b29sdGlwLmNvbG9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubmF2aWdhdGlvbkhhbmRsZXIuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9pbnRlciBsb2NhdGlvbiBmcm9tIGEgdG91Y2ggbG9jYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSB0b3VjaFxuICAgKiBAcmV0dXJucyB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0UG9pbnRlcih0b3VjaCkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB0b3VjaC54IC0gZ2V0QWJzb2x1dGVMZWZ0KHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcyksXG4gICAgICB5OiB0b3VjaC55IC0gZ2V0QWJzb2x1dGVUb3AodGhpcy5jYW52YXMuZnJhbWUuY2FudmFzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIHN0YXJ0IG9mIGEgdG91Y2ggZ2VzdHVyZSwgc3RvcmUgdGhlIHBvaW50ZXJcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvblRvdWNoKGV2ZW50KSB7XG4gICAgaWYgKG5ldyBEYXRlKCkudmFsdWVPZigpIC0gdGhpcy50b3VjaFRpbWUgPiA1MCkge1xuICAgICAgdGhpcy5kcmFnLnBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICAgIHRoaXMuZHJhZy5waW5jaGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnBpbmNoLnNjYWxlID0gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgICAvLyB0byBhdm9pZCBkb3VibGUgZmlyZWluZyBvZiB0aGlzIGV2ZW50IGJlY2F1c2Ugd2UgaGF2ZSB0d28gaGFtbWVyIGluc3RhbmNlcy4gKG9uIGNhbnZhcyBhbmQgb24gZnJhbWUpXG4gICAgICB0aGlzLnRvdWNoVGltZSA9IG5ldyBEYXRlKCkudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBoYW5kbGUgdGFwL2NsaWNrIGV2ZW50OiBzZWxlY3QvdW5zZWxlY3QgYSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvblRhcChldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICBjb25zdCBtdWx0aXNlbGVjdCA9XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIub3B0aW9ucy5tdWx0aXNlbGVjdCAmJlxuICAgICAgKGV2ZW50LmNoYW5nZWRQb2ludGVyc1swXS5jdHJsS2V5IHx8IGV2ZW50LmNoYW5nZWRQb2ludGVyc1swXS5tZXRhS2V5KTtcblxuICAgIHRoaXMuY2hlY2tTZWxlY3Rpb25DaGFuZ2VzKHBvaW50ZXIsIG11bHRpc2VsZWN0KTtcblxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5jb21taXRBbmRFbWl0KHBvaW50ZXIsIGV2ZW50KTtcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwiY2xpY2tcIiwgZXZlbnQsIHBvaW50ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSBkb3VibGV0YXAgZXZlbnRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uRG91YmxlVGFwKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJkb3VibGVDbGlja1wiLCBldmVudCwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIGxvbmcgdGFwIGV2ZW50OiBtdWx0aSBzZWxlY3Qgbm9kZXNcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uSG9sZChldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICBjb25zdCBtdWx0aXNlbGVjdCA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5vcHRpb25zLm11bHRpc2VsZWN0O1xuXG4gICAgdGhpcy5jaGVja1NlbGVjdGlvbkNoYW5nZXMocG9pbnRlciwgbXVsdGlzZWxlY3QpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmNvbW1pdEFuZEVtaXQocG9pbnRlciwgZXZlbnQpO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJjbGlja1wiLCBldmVudCwgcG9pbnRlcik7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcImhvbGRcIiwgZXZlbnQsIHBvaW50ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSB0aGUgcmVsZWFzZSBvZiB0aGUgc2NyZWVuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvblJlbGVhc2UoZXZlbnQpIHtcbiAgICBpZiAobmV3IERhdGUoKS52YWx1ZU9mKCkgLSB0aGlzLnRvdWNoVGltZSA+IDEwKSB7XG4gICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwicmVsZWFzZVwiLCBldmVudCwgcG9pbnRlcik7XG4gICAgICAvLyB0byBhdm9pZCBkb3VibGUgZmlyZWluZyBvZiB0aGlzIGV2ZW50IGJlY2F1c2Ugd2UgaGF2ZSB0d28gaGFtbWVyIGluc3RhbmNlcy4gKG9uIGNhbnZhcyBhbmQgb24gZnJhbWUpXG4gICAgICB0aGlzLnRvdWNoVGltZSA9IG5ldyBEYXRlKCkudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgb25Db250ZXh0KGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcih7IHg6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFkgfSk7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcIm9uY29udGV4dFwiLCBldmVudCwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGFuZCBkZXNlbGVjdCBub2RlcyBkZXBlbmRpbmcgY3VycmVudCBzZWxlY3Rpb24gY2hhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvaW50ZXJcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWRkPWZhbHNlXVxuICAgKi9cbiAgY2hlY2tTZWxlY3Rpb25DaGFuZ2VzKHBvaW50ZXIsIGFkZCA9IGZhbHNlKSB7XG4gICAgaWYgKGFkZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNlbGVjdEFkZGl0aW9uYWxPblBvaW50KHBvaW50ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0T25Qb2ludChwb2ludGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBub2RlIGFuZCBlZGdlIGlkJ3MgZnJvbSB0aGUgZmlyc3Qgc2V0IHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIHNlY29uZCBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7e25vZGVzOiBBcnJheS48Tm9kZT4sIGVkZ2VzOiBBcnJheS48dmlzLkVkZ2U+fX0gZmlyc3RTZXRcbiAgICogQHBhcmFtIHt7bm9kZXM6IEFycmF5LjxOb2RlPiwgZWRnZXM6IEFycmF5Ljx2aXMuRWRnZT59fSBzZWNvbmRTZXRcbiAgICogQHJldHVybnMge3tub2RlczogQXJyYXkuPE5vZGU+LCBlZGdlczogQXJyYXkuPHZpcy5FZGdlPn19XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lRGlmZmVyZW5jZShmaXJzdFNldCwgc2Vjb25kU2V0KSB7XG4gICAgY29uc3QgYXJyYXlEaWZmID0gZnVuY3Rpb24gKGZpcnN0QXJyLCBzZWNvbmRBcnIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpcnN0QXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmlyc3RBcnJbaV07XG4gICAgICAgIGlmIChzZWNvbmRBcnIuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBub2RlczogYXJyYXlEaWZmKGZpcnN0U2V0Lm5vZGVzLCBzZWNvbmRTZXQubm9kZXMpLFxuICAgICAgZWRnZXM6IGFycmF5RGlmZihmaXJzdFNldC5lZGdlcywgc2Vjb25kU2V0LmVkZ2VzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IG9uRHJhZ1N0YXJ0LlxuICAgKiBJdCBpcyBzZXBhcmF0ZWQgb3V0IGJlY2F1c2Ugd2UgY2FuIHRoZW4gb3ZlcmxvYWQgaXQgZm9yIHRoZSBkYXRhbWFuaXB1bGF0aW9uIHN5c3RlbS5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uRHJhZ1N0YXJ0KGV2ZW50KSB7XG4gICAgLy8gaWYgYWxyZWFkeSBkcmFnZ2luZywgZG8gbm90IHN0YXJ0XG4gICAgLy8gdGhpcyBjYW4gaGFwcGVuIG9uIHRvdWNoIHNjcmVlbnMgd2l0aCBtdWx0aXBsZSBmaW5nZXJzXG4gICAgaWYgKHRoaXMuZHJhZy5kcmFnZ2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vaW4gY2FzZSB0aGUgdG91Y2ggZXZlbnQgd2FzIHRyaWdnZXJlZCBvbiBhbiBleHRlcm5hbCBkaXYsIGRvIHRoZSBpbml0aWFsIHRvdWNoIG5vdy5cbiAgICBpZiAodGhpcy5kcmFnLnBvaW50ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vblRvdWNoKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBub3RlOiBkcmFnLnBvaW50ZXIgaXMgc2V0IGluIG9uVG91Y2ggdG8gZ2V0IHRoZSBpbml0aWFsIHRvdWNoIGxvY2F0aW9uXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXROb2RlQXQodGhpcy5kcmFnLnBvaW50ZXIpO1xuXG4gICAgdGhpcy5kcmFnLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmRyYWcuc2VsZWN0aW9uID0gW107XG4gICAgdGhpcy5kcmFnLnRyYW5zbGF0aW9uID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24pOyAvLyBjb3B5IHRoZSBvYmplY3RcbiAgICB0aGlzLmRyYWcubm9kZUlkID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGV2ZW50LnNyY0V2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnNob3cgPSB0cnVlO1xuICAgICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuXG4gICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLnN0YXJ0ID0ge1xuICAgICAgICB4OiB0aGlzLmNhbnZhcy5fWGNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLngpLFxuICAgICAgICB5OiB0aGlzLmNhbnZhcy5fWWNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLnkpLFxuICAgICAgfTtcbiAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uZW5kID0ge1xuICAgICAgICB4OiB0aGlzLmNhbnZhcy5fWGNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLngpLFxuICAgICAgICB5OiB0aGlzLmNhbnZhcy5fWWNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLnkpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMuZHJhZ05vZGVzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmRyYWcubm9kZUlkID0gbm9kZS5pZDtcbiAgICAgIC8vIHNlbGVjdCB0aGUgY2xpY2tlZCBub2RlIGlmIG5vdCB5ZXQgc2VsZWN0ZWRcbiAgICAgIGlmIChub2RlLmlzU2VsZWN0ZWQoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNldFNlbGVjdGlvbih7IG5vZGVzOiBbbm9kZS5pZF0gfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFmdGVyIHNlbGVjdCB0byBjb250YWluIHRoZSBub2RlXG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICBcImRyYWdTdGFydFwiLFxuICAgICAgICBldmVudCxcbiAgICAgICAgdGhpcy5kcmFnLnBvaW50ZXJcbiAgICAgICk7XG5cbiAgICAgIC8vIGNyZWF0ZSBhbiBhcnJheSB3aXRoIHRoZSBzZWxlY3RlZCBub2RlcyBhbmQgdGhlaXIgb3JpZ2luYWwgbG9jYXRpb24gYW5kIHN0YXR1c1xuICAgICAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZE5vZGVzKCkpIHtcbiAgICAgICAgY29uc3QgcyA9IHtcbiAgICAgICAgICBpZDogbm9kZS5pZCxcbiAgICAgICAgICBub2RlOiBub2RlLFxuXG4gICAgICAgICAgLy8gc3RvcmUgb3JpZ2luYWwgeCwgeSwgeEZpeGVkIGFuZCB5Rml4ZWQsIG1ha2UgdGhlIG5vZGUgdGVtcG9yYXJpbHkgRml4ZWRcbiAgICAgICAgICB4OiBub2RlLngsXG4gICAgICAgICAgeTogbm9kZS55LFxuICAgICAgICAgIHhGaXhlZDogbm9kZS5vcHRpb25zLmZpeGVkLngsXG4gICAgICAgICAgeUZpeGVkOiBub2RlLm9wdGlvbnMuZml4ZWQueSxcbiAgICAgICAgfTtcblxuICAgICAgICBub2RlLm9wdGlvbnMuZml4ZWQueCA9IHRydWU7XG4gICAgICAgIG5vZGUub3B0aW9ucy5maXhlZC55ID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmRyYWcuc2VsZWN0aW9uLnB1c2gocyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZhbGxiYWNrIGlmIG5vIG5vZGUgaXMgc2VsZWN0ZWQgYW5kIHRodXMgdGhlIHZpZXcgaXMgZHJhZ2dlZC5cbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgIFwiZHJhZ1N0YXJ0XCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aGlzLmRyYWcucG9pbnRlcixcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBoYW5kbGUgZHJhZyBldmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25EcmFnKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZHJhZy5waW5jaGVkID09PSB0cnVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHRoZSBmb2N1cyBvbiBub2RlIGlmIGl0IGlzIGZvY3Vzc2VkIG9uIGJ5IHRoZSBmb2N1c09uTm9kZVxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJ1bmxvY2tOb2RlXCIpO1xuXG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5kcmFnLnNlbGVjdGlvbjtcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5sZW5ndGggJiYgdGhpcy5vcHRpb25zLmRyYWdOb2RlcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcImRyYWdnaW5nXCIsIGV2ZW50LCBwb2ludGVyKTtcblxuICAgICAgLy8gY2FsY3VsYXRlIGRlbHRhJ3MgYW5kIG5ldyBsb2NhdGlvblxuICAgICAgY29uc3QgZGVsdGFYID0gcG9pbnRlci54IC0gdGhpcy5kcmFnLnBvaW50ZXIueDtcbiAgICAgIGNvbnN0IGRlbHRhWSA9IHBvaW50ZXIueSAtIHRoaXMuZHJhZy5wb2ludGVyLnk7XG5cbiAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbiBvZiBhbGwgc2VsZWN0ZWQgbm9kZXNcbiAgICAgIHNlbGVjdGlvbi5mb3JFYWNoKChzZWxlY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHNlbGVjdGlvbi5ub2RlO1xuICAgICAgICAvLyBvbmx5IG1vdmUgdGhlIG5vZGUgaWYgaXQgd2FzIG5vdCBmaXhlZCBpbml0aWFsbHlcbiAgICAgICAgaWYgKHNlbGVjdGlvbi54Rml4ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgbm9kZS54ID0gdGhpcy5jYW52YXMuX1hjb252ZXJ0RE9NdG9DYW52YXMoXG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5fWGNvbnZlcnRDYW52YXNUb0RPTShzZWxlY3Rpb24ueCkgKyBkZWx0YVhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9ubHkgbW92ZSB0aGUgbm9kZSBpZiBpdCB3YXMgbm90IGZpeGVkIGluaXRpYWxseVxuICAgICAgICBpZiAoc2VsZWN0aW9uLnlGaXhlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBub2RlLnkgPSB0aGlzLmNhbnZhcy5fWWNvbnZlcnRET010b0NhbnZhcyhcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLl9ZY29udmVydENhbnZhc1RvRE9NKHNlbGVjdGlvbi55KSArIGRlbHRhWVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBzdGFydCB0aGUgc2ltdWxhdGlvbiBvZiB0aGUgcGh5c2ljc1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U2ltdWxhdGlvblwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY3JlYXRlIHNlbGVjdGlvbiBib3hcbiAgICAgIGlmIChldmVudC5zcmNFdmVudC5zaGlmdEtleSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICAgIFwiZHJhZ2dpbmdcIixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBwb2ludGVyLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaWYgdGhlIGRyYWcgd2FzIG5vdCBzdGFydGVkIHByb3Blcmx5IGJlY2F1c2UgdGhlIGNsaWNrIHN0YXJ0ZWQgb3V0c2lkZSB0aGUgbmV0d29yayBkaXYsIHN0YXJ0IGl0IG5vdy5cbiAgICAgICAgaWYgKHRoaXMuZHJhZy5wb2ludGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9uRHJhZ1N0YXJ0KGV2ZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLmVuZCA9IHtcbiAgICAgICAgICB4OiB0aGlzLmNhbnZhcy5fWGNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLngpLFxuICAgICAgICAgIHk6IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueSksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgIH1cblxuICAgICAgLy8gbW92ZSB0aGUgbmV0d29ya1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kcmFnVmlldyA9PT0gdHJ1ZSAmJiAhZXZlbnQuc3JjRXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgICBcImRyYWdnaW5nXCIsXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgcG9pbnRlcixcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGlmIHRoZSBkcmFnIHdhcyBub3Qgc3RhcnRlZCBwcm9wZXJseSBiZWNhdXNlIHRoZSBjbGljayBzdGFydGVkIG91dHNpZGUgdGhlIG5ldHdvcmsgZGl2LCBzdGFydCBpdCBub3cuXG4gICAgICAgIGlmICh0aGlzLmRyYWcucG9pbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vbkRyYWdTdGFydChldmVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlmZlggPSBwb2ludGVyLnggLSB0aGlzLmRyYWcucG9pbnRlci54O1xuICAgICAgICBjb25zdCBkaWZmWSA9IHBvaW50ZXIueSAtIHRoaXMuZHJhZy5wb2ludGVyLnk7XG5cbiAgICAgICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7XG4gICAgICAgICAgeDogdGhpcy5kcmFnLnRyYW5zbGF0aW9uLnggKyBkaWZmWCxcbiAgICAgICAgICB5OiB0aGlzLmRyYWcudHJhbnNsYXRpb24ueSArIGRpZmZZLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSBkcmFnIHN0YXJ0IGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvbkRyYWdFbmQoZXZlbnQpIHtcbiAgICB0aGlzLmRyYWcuZHJhZ2dpbmcgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnNob3cpIHtcbiAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3guc2hvdyA9IGZhbHNlO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uQm94UG9zaXRpb24gPSB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uQm94UG9zaXRpb25NaW5NYXggPSB7XG4gICAgICAgIG1pblg6IE1hdGgubWluKFxuICAgICAgICAgIHNlbGVjdGlvbkJveFBvc2l0aW9uLnN0YXJ0LngsXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uZW5kLnhcbiAgICAgICAgKSxcbiAgICAgICAgbWluWTogTWF0aC5taW4oXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uc3RhcnQueSxcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5lbmQueVxuICAgICAgICApLFxuICAgICAgICBtYXhYOiBNYXRoLm1heChcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5zdGFydC54LFxuICAgICAgICAgIHNlbGVjdGlvbkJveFBvc2l0aW9uLmVuZC54XG4gICAgICAgICksXG4gICAgICAgIG1heFk6IE1hdGgubWF4KFxuICAgICAgICAgIHNlbGVjdGlvbkJveFBvc2l0aW9uLnN0YXJ0LnksXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uZW5kLnlcbiAgICAgICAgKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRvQmVTZWxlY3RlZE5vZGVzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmZpbHRlcigobm9kZUlkKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBub2RlLnggPj0gc2VsZWN0aW9uQm94UG9zaXRpb25NaW5NYXgubWluWCAmJlxuICAgICAgICAgIG5vZGUueCA8PSBzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heC5tYXhYICYmXG4gICAgICAgICAgbm9kZS55ID49IHNlbGVjdGlvbkJveFBvc2l0aW9uTWluTWF4Lm1pblkgJiZcbiAgICAgICAgICBub2RlLnkgPD0gc2VsZWN0aW9uQm94UG9zaXRpb25NaW5NYXgubWF4WVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHRvQmVTZWxlY3RlZE5vZGVzLmZvckVhY2goKG5vZGVJZCkgPT5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNlbGVjdE9iamVjdCh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5jb21taXRBbmRFbWl0KHBvaW50ZXIsIGV2ZW50KTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgIFwiZHJhZ0VuZFwiLFxuICAgICAgICBldmVudCxcbiAgICAgICAgdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlciksXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5kcmFnLnNlbGVjdGlvbjtcbiAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBzZWxlY3Rpb24uZm9yRWFjaChmdW5jdGlvbiAocykge1xuICAgICAgICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgeEZpeGVkIGFuZCB5Rml4ZWRcbiAgICAgICAgICBzLm5vZGUub3B0aW9ucy5maXhlZC54ID0gcy54Rml4ZWQ7XG4gICAgICAgICAgcy5ub2RlLm9wdGlvbnMuZml4ZWQueSA9IHMueUZpeGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgICBcImRyYWdFbmRcIixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwic3RhcnRTaW11bGF0aW9uXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgICBcImRyYWdFbmRcIixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBwaW5jaCBldmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uUGluY2goZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG5cbiAgICB0aGlzLmRyYWcucGluY2hlZCA9IHRydWU7XG4gICAgaWYgKHRoaXMucGluY2hbXCJzY2FsZVwiXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBpbmNoLnNjYWxlID0gMTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBlbmFibGVkIG1vdmluZyB3aGlsZSBwaW5jaGluZz9cbiAgICBjb25zdCBzY2FsZSA9IHRoaXMucGluY2guc2NhbGUgKiBldmVudC5zY2FsZTtcbiAgICB0aGlzLnpvb20oc2NhbGUsIHBvaW50ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFpvb20gdGhlIG5ldHdvcmsgaW4gb3Igb3V0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzY2FsZSBhIG51bWJlciBhcm91bmQgMSwgYW5kIGJldHdlZW4gMC4wMSBhbmQgMTBcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyICAgIFBvc2l0aW9uIG9uIHNjcmVlblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgem9vbShzY2FsZSwgcG9pbnRlcikge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuem9vbVZpZXcgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IHNjYWxlT2xkID0gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgICBpZiAoc2NhbGUgPCAwLjAwMDAxKSB7XG4gICAgICAgIHNjYWxlID0gMC4wMDAwMTtcbiAgICAgIH1cbiAgICAgIGlmIChzY2FsZSA+IDEwKSB7XG4gICAgICAgIHNjYWxlID0gMTA7XG4gICAgICB9XG5cbiAgICAgIGxldCBwcmVTY2FsZURyYWdQb2ludGVyID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHRoaXMuZHJhZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWcuZHJhZ2dpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICBwcmVTY2FsZURyYWdQb2ludGVyID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXModGhpcy5kcmFnLnBvaW50ZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyArIHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQgLyAyXG4gICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uO1xuXG4gICAgICBjb25zdCBzY2FsZUZyYWMgPSBzY2FsZSAvIHNjYWxlT2xkO1xuICAgICAgY29uc3QgdHggPSAoMSAtIHNjYWxlRnJhYykgKiBwb2ludGVyLnggKyB0cmFuc2xhdGlvbi54ICogc2NhbGVGcmFjO1xuICAgICAgY29uc3QgdHkgPSAoMSAtIHNjYWxlRnJhYykgKiBwb2ludGVyLnkgKyB0cmFuc2xhdGlvbi55ICogc2NhbGVGcmFjO1xuXG4gICAgICB0aGlzLmJvZHkudmlldy5zY2FsZSA9IHNjYWxlO1xuICAgICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7IHg6IHR4LCB5OiB0eSB9O1xuXG4gICAgICBpZiAocHJlU2NhbGVEcmFnUG9pbnRlciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgcG9zdFNjYWxlRHJhZ1BvaW50ZXIgPVxuICAgICAgICAgIHRoaXMuY2FudmFzLmNhbnZhc1RvRE9NKHByZVNjYWxlRHJhZ1BvaW50ZXIpO1xuICAgICAgICB0aGlzLmRyYWcucG9pbnRlci54ID0gcG9zdFNjYWxlRHJhZ1BvaW50ZXIueDtcbiAgICAgICAgdGhpcy5kcmFnLnBvaW50ZXIueSA9IHBvc3RTY2FsZURyYWdQb2ludGVyLnk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcblxuICAgICAgaWYgKHNjYWxlT2xkIDwgc2NhbGUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInpvb21cIiwge1xuICAgICAgICAgIGRpcmVjdGlvbjogXCIrXCIsXG4gICAgICAgICAgc2NhbGU6IHRoaXMuYm9keS52aWV3LnNjYWxlLFxuICAgICAgICAgIHBvaW50ZXI6IHBvaW50ZXIsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInpvb21cIiwge1xuICAgICAgICAgIGRpcmVjdGlvbjogXCItXCIsXG4gICAgICAgICAgc2NhbGU6IHRoaXMuYm9keS52aWV3LnNjYWxlLFxuICAgICAgICAgIHBvaW50ZXI6IHBvaW50ZXIsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBoYW5kbGVyIGZvciBtb3VzZSB3aGVlbCBldmVudCwgdXNlZCB0byB6b29tIHRoZSB0aW1lbGluZVxuICAgKiBTZWUgaHR0cDovL2Fkb21hcy5vcmcvamF2YXNjcmlwdC1tb3VzZS13aGVlbC9cbiAgICogICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9FaWdodE1lZGlhL2hhbW1lci5qcy9pc3N1ZXMvMjU2XG4gICAqXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvbk1vdXNlV2hlZWwoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnpvb21WaWV3ID09PSB0cnVlKSB7XG4gICAgICAvLyBJZiBkZWx0YSBpcyBub256ZXJvLCBoYW5kbGUgaXQuXG4gICAgICAvLyBCYXNpY2FsbHksIGRlbHRhIGlzIG5vdyBwb3NpdGl2ZSBpZiB3aGVlbCB3YXMgc2Nyb2xsZWQgdXAsXG4gICAgICAvLyBhbmQgbmVnYXRpdmUsIGlmIHdoZWVsIHdhcyBzY3JvbGxlZCBkb3duLlxuICAgICAgaWYgKGV2ZW50LmRlbHRhWSAhPT0gMCkge1xuICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG5ldyBzY2FsZVxuICAgICAgICBsZXQgc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgICAgc2NhbGUgKj1cbiAgICAgICAgICAxICsgKGV2ZW50LmRlbHRhWSA8IDAgPyAxIDogLTEpICogKHRoaXMub3B0aW9ucy56b29tU3BlZWQgKiAwLjEpO1xuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgcG9pbnRlciBsb2NhdGlvblxuICAgICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9KTtcblxuICAgICAgICAvLyBhcHBseSB0aGUgbmV3IHNjYWxlXG4gICAgICAgIHRoaXMuem9vbShzY2FsZSwgcG9pbnRlcik7XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBhY3Rpb25zIGNhdXNlZCBieSBtb3VzZSB3aGVlbC5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdXNlIG1vdmUgaGFuZGxlciBmb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgdGl0bGUgbW92ZXMgb3ZlciBhIG5vZGUgd2l0aCBhIHRpdGxlLlxuICAgKlxuICAgKiBAcGFyYW0gIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uTW91c2VNb3ZlKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcih7IHg6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFkgfSk7XG4gICAgbGV0IHBvcHVwVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgLy8gY2hlY2sgaWYgdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgbm9kZSBpcyBzdGlsbCBzZWxlY3RlZFxuICAgIGlmICh0aGlzLnBvcHVwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLnBvcHVwLmhpZGRlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tIaWRlUG9wdXAocG9pbnRlcik7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZSBwb3B1cCB3YXMgbm90IGhpZGRlbiBhYm92ZVxuICAgICAgaWYgKHRoaXMucG9wdXAuaGlkZGVuID09PSBmYWxzZSkge1xuICAgICAgICBwb3B1cFZpc2libGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnBvcHVwLnNldFBvc2l0aW9uKHBvaW50ZXIueCArIDMsIHBvaW50ZXIueSAtIDUpO1xuICAgICAgICB0aGlzLnBvcHVwLnNob3coKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBiaW5kIHRoZSBrZXlib2FyZCB0byB0aGUgZGl2LCB3ZSBoYXZlIHRvIGhpZ2hsaWdodCBpdCB0byB1c2UgaXQuIFRoaXMgaGlnaGxpZ2h0cyBpdCBvbiBtb3VzZSBvdmVyLlxuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9ucy5rZXlib2FyZC5hdXRvRm9jdXMgJiZcbiAgICAgIHRoaXMub3B0aW9ucy5rZXlib2FyZC5iaW5kVG9XaW5kb3cgPT09IGZhbHNlICYmXG4gICAgICB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuZW5hYmxlZCA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgdGhpcy5jYW52YXMuZnJhbWUuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvLyBzdGFydCBhIHRpbWVvdXQgdGhhdCB3aWxsIGNoZWNrIGlmIHRoZSBtb3VzZSBpcyBwb3NpdGlvbmVkIGFib3ZlIGFuIGVsZW1lbnRcbiAgICBpZiAocG9wdXBWaXNpYmxlID09PSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMucG9wdXBUaW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5wb3B1cFRpbWVyKTsgLy8gc3RvcCBhbnkgcnVubmluZyBjYWxjdWxhdGlvblRpbWVyXG4gICAgICAgIHRoaXMucG9wdXBUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5kcmFnLmRyYWdnaW5nKSB7XG4gICAgICAgIHRoaXMucG9wdXBUaW1lciA9IHNldFRpbWVvdXQoXG4gICAgICAgICAgKCkgPT4gdGhpcy5fY2hlY2tTaG93UG9wdXAocG9pbnRlciksXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnRvb2x0aXBEZWxheVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZGluZyBob3ZlciBoaWdobGlnaHRzXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ob3ZlciA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmhvdmVyT2JqZWN0KGV2ZW50LCBwb2ludGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlcmUgaXMgYW4gZWxlbWVudCBvbiB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhlIG5ldHdvcmtcbiAgICogKGEgbm9kZSBvciBlZGdlKS4gSWYgc28sIGFuZCBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgdGl0bGUsXG4gICAqIHNob3cgYSBwb3B1cCB3aW5kb3cgd2l0aCBpdHMgdGl0bGUuXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6bnVtYmVyLCB5Om51bWJlcn19IHBvaW50ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja1Nob3dQb3B1cChwb2ludGVyKSB7XG4gICAgY29uc3QgeCA9IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCk7XG4gICAgY29uc3QgeSA9IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueSk7XG4gICAgY29uc3QgcG9pbnRlck9iaiA9IHtcbiAgICAgIGxlZnQ6IHgsXG4gICAgICB0b3A6IHksXG4gICAgICByaWdodDogeCxcbiAgICAgIGJvdHRvbTogeSxcbiAgICB9O1xuXG4gICAgY29uc3QgcHJldmlvdXNQb3B1cE9iaklkID1cbiAgICAgIHRoaXMucG9wdXBPYmogPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRoaXMucG9wdXBPYmouaWQ7XG4gICAgbGV0IG5vZGVVbmRlckN1cnNvciA9IGZhbHNlO1xuICAgIGxldCBwb3B1cFR5cGUgPSBcIm5vZGVcIjtcblxuICAgIC8vIGNoZWNrIGlmIGEgbm9kZSBpcyB1bmRlciB0aGUgY3Vyc29yLlxuICAgIGlmICh0aGlzLnBvcHVwT2JqID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHNlYXJjaCB0aGUgbm9kZXMgZm9yIG92ZXJsYXAsIHNlbGVjdCB0aGUgdG9wIG9uZSBpbiBjYXNlIG9mIG11bHRpcGxlIG5vZGVzXG4gICAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcbiAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBjb25zdCBvdmVybGFwcGluZ05vZGVzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tub2RlSW5kaWNlc1tpXV07XG4gICAgICAgIGlmIChub2RlLmlzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopID09PSB0cnVlKSB7XG4gICAgICAgICAgbm9kZVVuZGVyQ3Vyc29yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAobm9kZS5nZXRUaXRsZSgpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG92ZXJsYXBwaW5nTm9kZXMucHVzaChub2RlSW5kaWNlc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvdmVybGFwcGluZ05vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG92ZXJsYXBwaW5nIG5vZGVzLCBzZWxlY3QgdGhlIGxhc3Qgb25lLCB0aGlzIGlzIHRoZSBvbmUgd2hpY2ggaXMgZHJhd24gb24gdG9wIG9mIHRoZSBvdGhlcnNcbiAgICAgICAgdGhpcy5wb3B1cE9iaiA9IG5vZGVzW292ZXJsYXBwaW5nTm9kZXNbb3ZlcmxhcHBpbmdOb2Rlcy5sZW5ndGggLSAxXV07XG4gICAgICAgIC8vIGlmIHlvdSBob3ZlciBvdmVyIGEgbm9kZSwgdGhlIHRpdGxlIG9mIHRoZSBlZGdlIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBzaG93bi5cbiAgICAgICAgbm9kZVVuZGVyQ3Vyc29yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5wb3B1cE9iaiA9PT0gdW5kZWZpbmVkICYmIG5vZGVVbmRlckN1cnNvciA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIHNlYXJjaCB0aGUgZWRnZXMgZm9yIG92ZXJsYXBcbiAgICAgIGNvbnN0IGVkZ2VJbmRpY2VzID0gdGhpcy5ib2R5LmVkZ2VJbmRpY2VzO1xuICAgICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgICBsZXQgZWRnZTtcbiAgICAgIGNvbnN0IG92ZXJsYXBwaW5nRWRnZXMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWRnZSA9IGVkZ2VzW2VkZ2VJbmRpY2VzW2ldXTtcbiAgICAgICAgaWYgKGVkZ2UuaXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaikgPT09IHRydWUpIHtcbiAgICAgICAgICBpZiAoZWRnZS5jb25uZWN0ZWQgPT09IHRydWUgJiYgZWRnZS5nZXRUaXRsZSgpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG92ZXJsYXBwaW5nRWRnZXMucHVzaChlZGdlSW5kaWNlc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvdmVybGFwcGluZ0VkZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5wb3B1cE9iaiA9IGVkZ2VzW292ZXJsYXBwaW5nRWRnZXNbb3ZlcmxhcHBpbmdFZGdlcy5sZW5ndGggLSAxXV07XG4gICAgICAgIHBvcHVwVHlwZSA9IFwiZWRnZVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBvcHVwT2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHNob3cgcG9wdXAgbWVzc2FnZSB3aW5kb3dcbiAgICAgIGlmICh0aGlzLnBvcHVwT2JqLmlkICE9PSBwcmV2aW91c1BvcHVwT2JqSWQpIHtcbiAgICAgICAgaWYgKHRoaXMucG9wdXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMucG9wdXAgPSBuZXcgUG9wdXAodGhpcy5jYW52YXMuZnJhbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wb3B1cC5wb3B1cFRhcmdldFR5cGUgPSBwb3B1cFR5cGU7XG4gICAgICAgIHRoaXMucG9wdXAucG9wdXBUYXJnZXRJZCA9IHRoaXMucG9wdXBPYmouaWQ7XG5cbiAgICAgICAgLy8gYWRqdXN0IGEgc21hbGwgb2Zmc2V0IHN1Y2ggdGhhdCB0aGUgbW91c2UgY3Vyc29yIGlzIGxvY2F0ZWQgaW4gdGhlXG4gICAgICAgIC8vIGJvdHRvbSBsZWZ0IGxvY2F0aW9uIG9mIHRoZSBwb3B1cCwgYW5kIHlvdSBjYW4gZWFzaWx5IG1vdmUgb3ZlciB0aGVcbiAgICAgICAgLy8gcG9wdXAgYXJlYVxuICAgICAgICB0aGlzLnBvcHVwLnNldFBvc2l0aW9uKHBvaW50ZXIueCArIDMsIHBvaW50ZXIueSAtIDUpO1xuICAgICAgICB0aGlzLnBvcHVwLnNldFRleHQodGhpcy5wb3B1cE9iai5nZXRUaXRsZSgpKTtcbiAgICAgICAgdGhpcy5wb3B1cC5zaG93KCk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzaG93UG9wdXBcIiwgdGhpcy5wb3B1cE9iai5pZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnBvcHVwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5wb3B1cC5oaWRlKCk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJoaWRlUG9wdXBcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBwb3B1cCBtdXN0IGJlIGhpZGRlbiwgd2hpY2ggaXMgdGhlIGNhc2Ugd2hlbiB0aGUgbW91c2UgaXMgbm9cbiAgICogbG9uZ2VyIGhvdmVyaW5nIG9uIHRoZSBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHt7eDpudW1iZXIsIHk6bnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrSGlkZVBvcHVwKHBvaW50ZXIpIHtcbiAgICBjb25zdCBwb2ludGVyT2JqID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKTtcblxuICAgIGxldCBzdGlsbE9uT2JqID0gZmFsc2U7XG4gICAgaWYgKHRoaXMucG9wdXAucG9wdXBUYXJnZXRUeXBlID09PSBcIm5vZGVcIikge1xuICAgICAgaWYgKHRoaXMuYm9keS5ub2Rlc1t0aGlzLnBvcHVwLnBvcHVwVGFyZ2V0SWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3RpbGxPbk9iaiA9XG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW3RoaXMucG9wdXAucG9wdXBUYXJnZXRJZF0uaXNPdmVybGFwcGluZ1dpdGgoXG4gICAgICAgICAgICBwb2ludGVyT2JqXG4gICAgICAgICAgKTtcblxuICAgICAgICAvLyBpZiB0aGUgbW91c2UgaXMgc3RpbGwgb25lIHRoZSBub2RlLCB3ZSBoYXZlIHRvIGNoZWNrIGlmIGl0IGlzIG5vdCBhbHNvIG9uIG9uZSB0aGF0IGlzIGRyYXduIG9uIHRvcCBvZiBpdC5cbiAgICAgICAgLy8gd2UgaW5pdGlhbGx5IG9ubHkgY2hlY2sgc3RpbGxPbk9iaiBiZWNhdXNlIHRoaXMgaXMgbXVjaCBmYXN0ZXIuXG4gICAgICAgIGlmIChzdGlsbE9uT2JqID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3Qgb3Zlck5vZGUgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0Tm9kZUF0KHBvaW50ZXIpO1xuICAgICAgICAgIHN0aWxsT25PYmogPVxuICAgICAgICAgICAgb3Zlck5vZGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgIDogb3Zlck5vZGUuaWQgPT09IHRoaXMucG9wdXAucG9wdXBUYXJnZXRJZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdChwb2ludGVyKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkuZWRnZXNbdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RpbGxPbk9iaiA9XG4gICAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkXS5pc092ZXJsYXBwaW5nV2l0aChcbiAgICAgICAgICAgICAgcG9pbnRlck9ialxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGlsbE9uT2JqID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5wb3B1cE9iaiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucG9wdXAuaGlkZSgpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImhpZGVQb3B1cFwiKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJhY3Rpb25IYW5kbGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uU3Ryb25nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIGBTZXRgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC1vYmplY3RzXG5jb2xsZWN0aW9uKCdTZXQnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIGNvbGxlY3Rpb25TdHJvbmcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5TZXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBnZXRXZWFrRGF0YSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLmdldFdlYWtEYXRhO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIEFycmF5SXRlcmF0aW9uTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcbnZhciBmaW5kID0gQXJyYXlJdGVyYXRpb25Nb2R1bGUuZmluZDtcbnZhciBmaW5kSW5kZXggPSBBcnJheUl0ZXJhdGlvbk1vZHVsZS5maW5kSW5kZXg7XG52YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmZyb3plbiB8fCAoc3RhdGUuZnJvemVuID0gbmV3IFVuY2F1Z2h0RnJvemVuU3RvcmUoKSk7XG59O1xuXG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5lbnRyaWVzID0gW107XG59O1xuXG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGZpbmQoc3RvcmUuZW50cmllcywgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblxuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuZW50cmllcy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gZmluZEluZGV4KHRoaXMuZW50cmllcywgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSBzcGxpY2UodGhpcy5lbnRyaWVzLCBpbmRleCwgMSk7XG4gICAgcmV0dXJuICEhfmluZGV4O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgUHJvdG90eXBlKTtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBpZDogaWQrKyxcbiAgICAgICAgZnJvemVuOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICB2YXIgZGVmaW5lID0gZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWtEYXRhKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpLnNldChrZXksIHZhbHVlKTtcbiAgICAgIGVsc2UgZGF0YVtzdGF0ZS5pZF0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IFdlYWtNYXAsIFdlYWtTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWtzZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHN0YXRlKVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgaGFzT3duKGRhdGEsIHN0YXRlLmlkKSAmJiBkZWxldGUgZGF0YVtzdGF0ZS5pZF07XG4gICAgICB9LFxuICAgICAgLy8gYHsgV2Vha01hcCwgV2Vha1NldCB9LnByb3RvdHlwZS5oYXMoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuaGFzXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHN0YXRlKS5oYXMoa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgaGFzT3duKGRhdGEsIHN0YXRlLmlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGtleSkpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWtEYXRhKGtleSk7XG4gICAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHN0YXRlKS5nZXQoa2V5KTtcbiAgICAgICAgICByZXR1cm4gZGF0YSA/IGRhdGFbc3RhdGUuaWRdIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYFdlYWtNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWttYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWtzZXQucHJvdG90eXBlLmFkZFxuICAgICAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvbldlYWsgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5lbmZvcmNlO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciBpc0V4dGVuc2libGUgPSAkT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNmcm96ZW4gLS0gc2FmZVxudmFyIGlzRnJvemVuID0gJE9iamVjdC5pc0Zyb3plbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNzZWFsZWQgLS0gc2FmZVxudmFyIGlzU2VhbGVkID0gJE9iamVjdC5pc1NlYWxlZDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZnJlZXplIC0tIHNhZmVcbnZhciBmcmVlemUgPSAkT2JqZWN0LmZyZWV6ZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2VhbCAtLSBzYWZlXG52YXIgc2VhbCA9ICRPYmplY3Quc2VhbDtcblxudmFyIEZST1pFTiA9IHt9O1xudmFyIFNFQUxFRCA9IHt9O1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBJbnRlcm5hbFdlYWtNYXA7XG5cbnZhciB3cmFwcGVyID0gZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtNYXAoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gIH07XG59O1xuXG4vLyBgV2Vha01hcGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC1jb25zdHJ1Y3RvclxudmFyICRXZWFrTWFwID0gY29sbGVjdGlvbignV2Vha01hcCcsIHdyYXBwZXIsIGNvbGxlY3Rpb25XZWFrKTtcbnZhciBXZWFrTWFwUHJvdG90eXBlID0gJFdlYWtNYXAucHJvdG90eXBlO1xudmFyIG5hdGl2ZVNldCA9IHVuY3VycnlUaGlzKFdlYWtNYXBQcm90b3R5cGUuc2V0KTtcblxuLy8gQ2hha3JhIEVkZ2UgYnVnOiBhZGRpbmcgZnJvemVuIGFycmF5cyB0byBXZWFrTWFwIHVuZnJlZXplIHRoZW1cbnZhciBoYXNNU0VkZ2VGcmVlemluZ0J1ZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIEZSRUVaSU5HICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZnJvemVuQXJyYXkgPSBmcmVlemUoW10pO1xuICAgIG5hdGl2ZVNldChuZXcgJFdlYWtNYXAoKSwgZnJvemVuQXJyYXksIDEpO1xuICAgIHJldHVybiAhaXNGcm96ZW4oZnJvemVuQXJyYXkpO1xuICB9KTtcbn07XG5cbi8vIElFMTEgV2Vha01hcCBmcm96ZW4ga2V5cyBmaXhcbi8vIFdlIGNhbid0IHVzZSBmZWF0dXJlIGRldGVjdGlvbiBiZWNhdXNlIGl0IGNyYXNoIHNvbWUgb2xkIElFIGJ1aWxkc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ4NVxuaWYgKE5BVElWRV9XRUFLX01BUCkgaWYgKElTX0lFMTEpIHtcbiAgSW50ZXJuYWxXZWFrTWFwID0gY29sbGVjdGlvbldlYWsuZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgJ1dlYWtNYXAnLCB0cnVlKTtcbiAgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZS5lbmFibGUoKTtcbiAgdmFyIG5hdGl2ZURlbGV0ZSA9IHVuY3VycnlUaGlzKFdlYWtNYXBQcm90b3R5cGVbJ2RlbGV0ZSddKTtcbiAgdmFyIG5hdGl2ZUhhcyA9IHVuY3VycnlUaGlzKFdlYWtNYXBQcm90b3R5cGUuaGFzKTtcbiAgdmFyIG5hdGl2ZUdldCA9IHVuY3VycnlUaGlzKFdlYWtNYXBQcm90b3R5cGUuZ2V0KTtcbiAgZGVmaW5lQnVpbHRJbnMoV2Vha01hcFByb3RvdHlwZSwge1xuICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoaXNPYmplY3Qoa2V5KSAmJiAhaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghc3RhdGUuZnJvemVuKSBzdGF0ZS5mcm96ZW4gPSBuZXcgSW50ZXJuYWxXZWFrTWFwKCk7XG4gICAgICAgIHJldHVybiBuYXRpdmVEZWxldGUodGhpcywga2V5KSB8fCBzdGF0ZS5mcm96ZW5bJ2RlbGV0ZSddKGtleSk7XG4gICAgICB9IHJldHVybiBuYXRpdmVEZWxldGUodGhpcywga2V5KTtcbiAgICB9LFxuICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlSGFzKHRoaXMsIGtleSkgfHwgc3RhdGUuZnJvemVuLmhhcyhrZXkpO1xuICAgICAgfSByZXR1cm4gbmF0aXZlSGFzKHRoaXMsIGtleSk7XG4gICAgfSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgIGlmIChpc09iamVjdChrZXkpICYmICFpc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5mcm96ZW4pIHN0YXRlLmZyb3plbiA9IG5ldyBJbnRlcm5hbFdlYWtNYXAoKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUhhcyh0aGlzLCBrZXkpID8gbmF0aXZlR2V0KHRoaXMsIGtleSkgOiBzdGF0ZS5mcm96ZW4uZ2V0KGtleSk7XG4gICAgICB9IHJldHVybiBuYXRpdmVHZXQodGhpcywga2V5KTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgIGlmIChpc09iamVjdChrZXkpICYmICFpc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5mcm96ZW4pIHN0YXRlLmZyb3plbiA9IG5ldyBJbnRlcm5hbFdlYWtNYXAoKTtcbiAgICAgICAgbmF0aXZlSGFzKHRoaXMsIGtleSkgPyBuYXRpdmVTZXQodGhpcywga2V5LCB2YWx1ZSkgOiBzdGF0ZS5mcm96ZW4uc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIG5hdGl2ZVNldCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSk7XG4vLyBDaGFrcmEgRWRnZSBmcm96ZW4ga2V5cyBmaXhcbn0gZWxzZSBpZiAoaGFzTVNFZGdlRnJlZXppbmdCdWcoKSkge1xuICBkZWZpbmVCdWlsdElucyhXZWFrTWFwUHJvdG90eXBlLCB7XG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGFycmF5SW50ZWdyaXR5TGV2ZWw7XG4gICAgICBpZiAoaXNBcnJheShrZXkpKSB7XG4gICAgICAgIGlmIChpc0Zyb3plbihrZXkpKSBhcnJheUludGVncml0eUxldmVsID0gRlJPWkVOO1xuICAgICAgICBlbHNlIGlmIChpc1NlYWxlZChrZXkpKSBhcnJheUludGVncml0eUxldmVsID0gU0VBTEVEO1xuICAgICAgfVxuICAgICAgbmF0aXZlU2V0KHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYgKGFycmF5SW50ZWdyaXR5TGV2ZWwgPT09IEZST1pFTikgZnJlZXplKGtleSk7XG4gICAgICBpZiAoYXJyYXlJbnRlZ3JpdHlMZXZlbCA9PT0gU0VBTEVEKSBzZWFsKGtleSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy53ZWFrLW1hcCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguV2Vha01hcDtcbiIsICJleHBvcnQgaW50ZXJmYWNlIFNlbGVjdGFibGUge1xuICBzZWxlY3QoKTogdm9pZDtcbiAgdW5zZWxlY3QoKTogdm9pZDtcbn1cblxuaW50ZXJmYWNlIFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8VD4ge1xuICBhZGRlZDogVFtdO1xuICBkZWxldGVkOiBUW107XG4gIHByZXZpb3VzOiBUW107XG4gIGN1cnJlbnQ6IFRbXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcHJldlxuICogQHBhcmFtIG5leHRcbiAqL1xuZnVuY3Rpb24gZGlmZlNldHM8VD4ocHJldjogUmVhZG9ubHlTZXQ8VD4sIG5leHQ6IFJlYWRvbmx5U2V0PFQ+KTogU2V0PFQ+IHtcbiAgY29uc3QgZGlmZiA9IG5ldyBTZXQ8VD4oKTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIG5leHQpIHtcbiAgICBpZiAoIXByZXYuaGFzKGl0ZW0pKSB7XG4gICAgICBkaWZmLmFkZChpdGVtKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRpZmY7XG59XG5cbmNsYXNzIFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvcjxUIGV4dGVuZHMgU2VsZWN0YWJsZT4ge1xuICAjcHJldmlvdXNTZWxlY3Rpb246IFJlYWRvbmx5U2V0PFQ+ID0gbmV3IFNldCgpO1xuICAjc2VsZWN0aW9uOiBTZXQ8VD4gPSBuZXcgU2V0KCk7XG5cbiAgcHVibGljIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvbi5zaXplO1xuICB9XG5cbiAgcHVibGljIGFkZCguLi5pdGVtczogcmVhZG9ubHkgVFtdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICB0aGlzLiNzZWxlY3Rpb24uYWRkKGl0ZW0pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZGVsZXRlKC4uLml0ZW1zOiByZWFkb25seSBUW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIHRoaXMuI3NlbGVjdGlvbi5kZWxldGUoaXRlbSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLiNzZWxlY3Rpb24uY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3Rpb24oKTogVFtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuI3NlbGVjdGlvbl07XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2hhbmdlcygpOiBTaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3JDaGFuZ2VzPFQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYWRkZWQ6IFsuLi5kaWZmU2V0cyh0aGlzLiNwcmV2aW91c1NlbGVjdGlvbiwgdGhpcy4jc2VsZWN0aW9uKV0sXG4gICAgICBkZWxldGVkOiBbLi4uZGlmZlNldHModGhpcy4jc2VsZWN0aW9uLCB0aGlzLiNwcmV2aW91c1NlbGVjdGlvbildLFxuICAgICAgcHJldmlvdXM6IFsuLi5uZXcgU2V0PFQ+KHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uKV0sXG4gICAgICBjdXJyZW50OiBbLi4ubmV3IFNldDxUPih0aGlzLiNzZWxlY3Rpb24pXSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGNvbW1pdCgpOiBTaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3JDaGFuZ2VzPFQ+IHtcbiAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5nZXRDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLiNwcmV2aW91c1NlbGVjdGlvbiA9IHRoaXMuI3NlbGVjdGlvbjtcbiAgICB0aGlzLiNzZWxlY3Rpb24gPSBuZXcgU2V0KHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uKTtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGFuZ2VzLmFkZGVkKSB7XG4gICAgICBpdGVtLnNlbGVjdCgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2hhbmdlcy5kZWxldGVkKSB7XG4gICAgICBpdGVtLnVuc2VsZWN0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYW5nZXM7XG4gIH1cbn1cblxuLy8gVE9ETzogVGhlc2Ugc2hvdWxkIGJlIHJlYWwgdHlwZXMgaW1wb3J0ZWQgZnJvbSBub2RlLnRzIGFuZCBlZGdlLnRzIHRoYXQgZG9uJ3Rcbi8vIGV4aXN0IHlldC5cbmludGVyZmFjZSBOb2RlIGV4dGVuZHMgU2VsZWN0YWJsZSB7XG4gICQ6IFwibm9kZVwiO1xufVxuaW50ZXJmYWNlIEVkZ2UgZXh0ZW5kcyBTZWxlY3RhYmxlIHtcbiAgJDogXCJlZGdlXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uQWNjdW11bGF0b3JDb21taXRTdW1tYXJ5IHtcbiAgbm9kZXM6IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8Tm9kZT47XG4gIGVkZ2VzOiBTaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3JDaGFuZ2VzPEVkZ2U+O1xufVxuXG5leHBvcnQgdHlwZSBTZWxlY3Rpb25BY2N1bXVsYXRvckNvbW1pdEhhbmRsZXI8XG4gIENvbW1pdEFyZ3MgZXh0ZW5kcyByZWFkb25seSBhbnlbXVxuPiA9IChzdW1tYXJ5OiBTZWxlY3Rpb25BY2N1bXVsYXRvckNvbW1pdFN1bW1hcnksIC4uLnJlc3Q6IENvbW1pdEFyZ3MpID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25BY2N1bXVsYXRvcjxDb21taXRBcmdzIGV4dGVuZHMgcmVhZG9ubHkgYW55W10+IHtcbiAgI25vZGVzID0gbmV3IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvcjxOb2RlPigpO1xuICAjZWRnZXMgPSBuZXcgU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yPEVkZ2U+KCk7XG5cbiAgcmVhZG9ubHkgI2NvbW1pdEhhbmRsZXI6IFNlbGVjdGlvbkFjY3VtdWxhdG9yQ29tbWl0SGFuZGxlcjxDb21taXRBcmdzPjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgY29tbWl0SGFuZGxlcjogU2VsZWN0aW9uQWNjdW11bGF0b3JDb21taXRIYW5kbGVyPENvbW1pdEFyZ3M+ID0gKCk6IHZvaWQgPT4ge31cbiAgKSB7XG4gICAgdGhpcy4jY29tbWl0SGFuZGxlciA9IGNvbW1pdEhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNpemVOb2RlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNub2Rlcy5zaXplO1xuICB9XG4gIHB1YmxpYyBnZXQgc2l6ZUVkZ2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI2VkZ2VzLnNpemU7XG4gIH1cblxuICBwdWJsaWMgZ2V0Tm9kZXMoKTogTm9kZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jbm9kZXMuZ2V0U2VsZWN0aW9uKCk7XG4gIH1cbiAgcHVibGljIGdldEVkZ2VzKCk6IEVkZ2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuI2VkZ2VzLmdldFNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIGFkZE5vZGVzKC4uLm5vZGVzOiByZWFkb25seSBOb2RlW10pOiB2b2lkIHtcbiAgICB0aGlzLiNub2Rlcy5hZGQoLi4ubm9kZXMpO1xuICB9XG4gIHB1YmxpYyBhZGRFZGdlcyguLi5lZGdlczogcmVhZG9ubHkgRWRnZVtdKTogdm9pZCB7XG4gICAgdGhpcy4jZWRnZXMuYWRkKC4uLmVkZ2VzKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVOb2Rlcyhub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgdGhpcy4jbm9kZXMuZGVsZXRlKG5vZGUpO1xuICB9XG4gIHB1YmxpYyBkZWxldGVFZGdlcyhlZGdlOiBFZGdlKTogdm9pZCB7XG4gICAgdGhpcy4jZWRnZXMuZGVsZXRlKGVkZ2UpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuI25vZGVzLmNsZWFyKCk7XG4gICAgdGhpcy4jZWRnZXMuY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjb21taXQoLi4ucmVzdDogQ29tbWl0QXJncyk6IFNlbGVjdGlvbkFjY3VtdWxhdG9yQ29tbWl0U3VtbWFyeSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IHtcbiAgICAgIG5vZGVzOiB0aGlzLiNub2Rlcy5jb21taXQoKSxcbiAgICAgIGVkZ2VzOiB0aGlzLiNlZGdlcy5jb21taXQoKSxcbiAgICB9O1xuICAgIHRoaXMuI2NvbW1pdEhhbmRsZXIoc3VtbWFyeSwgLi4ucmVzdCk7XG4gICAgcmV0dXJuIHN1bW1hcnk7XG4gIH1cbn1cbiIsICJpbXBvcnQgTm9kZSBmcm9tIFwiLi9jb21wb25lbnRzL05vZGVcIjtcbmltcG9ydCBFZGdlIGZyb20gXCIuL2NvbXBvbmVudHMvRWRnZVwiO1xuaW1wb3J0IHsgU2VsZWN0aW9uQWNjdW11bGF0b3IgfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcblxuaW1wb3J0IHsgc2VsZWN0aXZlRGVlcEV4dGVuZCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBUaGUgaGFuZGxlciBmb3Igc2VsZWN0aW9uc1xuICovXG5jbGFzcyBTZWxlY3Rpb25IYW5kbGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGNhbnZhcykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5jYW52YXMgPSBjYW52YXM7XG4gICAgLy8gVE9ETzogQ29uc2lkZXIgZmlyaW5nIGFuIGV2ZW50IG9uIGFueSBjaGFuZ2UgdG8gdGhlIHNlbGVjdGlvbiwgbm90XG4gICAgLy8gb25seSB0aG9zZSBjYXVzZWQgYnkgY2xpY2tzIGFuZCB0YXBzLiBJdCB3b3VsZCBiZSBlYXN5IHRvIGltcGxlbWVudFxuICAgIC8vIG5vdyBhbmQgKGF0IGxlYXN0IHRvIG1lKSBpdCBzZWVtcyBsaWtlIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlXG4gICAgLy8gcXVpdGUgdXNlZnVsLlxuICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yID0gbmV3IFNlbGVjdGlvbkFjY3VtdWxhdG9yKCk7XG4gICAgdGhpcy5ob3Zlck9iaiA9IHsgbm9kZXM6IHt9LCBlZGdlczoge30gfTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBtdWx0aXNlbGVjdDogZmFsc2UsXG4gICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgc2VsZWN0Q29ubmVjdGVkRWRnZXM6IHRydWUsXG4gICAgICBob3ZlckNvbm5lY3RlZEVkZ2VzOiB0cnVlLFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YUNoYW5nZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBbXG4gICAgICAgIFwibXVsdGlzZWxlY3RcIixcbiAgICAgICAgXCJob3ZlckNvbm5lY3RlZEVkZ2VzXCIsXG4gICAgICAgIFwic2VsZWN0YWJsZVwiLFxuICAgICAgICBcInNlbGVjdENvbm5lY3RlZEVkZ2VzXCIsXG4gICAgICBdO1xuICAgICAgc2VsZWN0aXZlRGVlcEV4dGVuZChmaWVsZHMsIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZXMgdGhlIHNlbGVjdGlvbiBwYXJ0IG9mIHRoZSB0YXA7XG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNlbGVjdE9uUG9pbnQocG9pbnRlcikge1xuICAgIGxldCBzZWxlY3RlZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZWN0YWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3Qgb2JqID0gdGhpcy5nZXROb2RlQXQocG9pbnRlcikgfHwgdGhpcy5nZXRFZGdlQXQocG9pbnRlcik7XG5cbiAgICAgIC8vIHVuc2VsZWN0IGFmdGVyIGdldHRpbmcgdGhlIG9iamVjdHMgaW4gb3JkZXIgdG8gcmVzdG9yZSB3aWR0aCBhbmQgaGVpZ2h0LlxuICAgICAgdGhpcy51bnNlbGVjdEFsbCgpO1xuXG4gICAgICBpZiAob2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdE9iamVjdChvYmopO1xuICAgICAgfVxuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2VsZWN0QWRkaXRpb25hbE9uUG9pbnQocG9pbnRlcikge1xuICAgIGxldCBzZWxlY3Rpb25DaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlY3RhYmxlID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBvYmogPSB0aGlzLmdldE5vZGVBdChwb2ludGVyKSB8fCB0aGlzLmdldEVkZ2VBdChwb2ludGVyKTtcblxuICAgICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgICAgICBpZiAob2JqLmlzU2VsZWN0ZWQoKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuZGVzZWxlY3RPYmplY3Qob2JqKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdE9iamVjdChvYmopO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0aW9uQ2hhbmdlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YW5kYXJkIGZpZWxkcyBmb3IgYW4gZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlciBPYmplY3Qgd2l0aCB0aGUgeCBhbmQgeSBzY3JlZW4gY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlXG4gICAqIEByZXR1cm5zIHt7fX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0QmFzZUV2ZW50KGV2ZW50LCBwb2ludGVyKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgcHJvcGVydGllc1tcInBvaW50ZXJcIl0gPSB7XG4gICAgICBET006IHsgeDogcG9pbnRlci54LCB5OiBwb2ludGVyLnkgfSxcbiAgICAgIGNhbnZhczogdGhpcy5jYW52YXMuRE9NdG9DYW52YXMocG9pbnRlciksXG4gICAgfTtcbiAgICBwcm9wZXJ0aWVzW1wiZXZlbnRcIl0gPSBldmVudDtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGFuIGV2ZW50IHdoaWNoIHRoZSB1c2VyIGNhbiBjYXRjaC5cbiAgICpcbiAgICogVGhpcyBhZGRzIHNvbWUgZXh0cmEgZGF0YSB0byB0aGUgZXZlbnQgd2l0aCByZXNwZWN0IHRvIGN1cnNvciBwb3NpdGlvbiBhbmRcbiAgICogc2VsZWN0ZWQgbm9kZXMgYW5kIGVkZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lIG9mIGV2ZW50IHRvIHNlbmRcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50XG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlciAgICAgICAgICAgIE9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICogQHBhcmFtIHtvYmplY3QgfCB1bmRlZmluZWR9IG9sZFNlbGVjdGlvbiAgICAgICAgICAgICBJZiBwcmVzZW50LCBzZWxlY3Rpb24gc3RhdGUgYmVmb3JlIGV2ZW50IG9jY3VyZWRcbiAgICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gW2VtcHR5U2VsZWN0aW9uPWZhbHNlXSAgSW5kaWNhdGUgaWYgc2VsZWN0aW9uIGRhdGEgc2hvdWxkIGJlIHBhc3NlZFxuICAgKi9cbiAgZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgIGV2ZW50VHlwZSxcbiAgICBldmVudCxcbiAgICBwb2ludGVyLFxuICAgIG9sZFNlbGVjdGlvbixcbiAgICBlbXB0eVNlbGVjdGlvbiA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9pbml0QmFzZUV2ZW50KGV2ZW50LCBwb2ludGVyKTtcblxuICAgIGlmIChlbXB0eVNlbGVjdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgcHJvcGVydGllcy5ub2RlcyA9IFtdO1xuICAgICAgcHJvcGVydGllcy5lZGdlcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0bXAgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgICAgcHJvcGVydGllcy5ub2RlcyA9IHRtcC5ub2RlcztcbiAgICAgIHByb3BlcnRpZXMuZWRnZXMgPSB0bXAuZWRnZXM7XG4gICAgfVxuXG4gICAgaWYgKG9sZFNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9wZXJ0aWVzW1wicHJldmlvdXNTZWxlY3Rpb25cIl0gPSBvbGRTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSA9PSBcImNsaWNrXCIpIHtcbiAgICAgIC8vIEZvciB0aGUgdGltZSBiZWluZywgcmVzdHJpY3QgdGhpcyBmdW5jdGlvbmFsaXR5IHRvXG4gICAgICAvLyBqdXN0IHRoZSBjbGljayBldmVudC5cbiAgICAgIHByb3BlcnRpZXMuaXRlbXMgPSB0aGlzLmdldENsaWNrZWRJdGVtcyhwb2ludGVyKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQuY29udHJvbEVkZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJvcGVydGllcy5jb250cm9sRWRnZSA9IGV2ZW50LmNvbnRyb2xFZGdlO1xuICAgIH1cblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoZXZlbnRUeXBlLCBwcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpZ2hsaWdodEVkZ2VzPXRoaXMub3B0aW9ucy5zZWxlY3RDb25uZWN0ZWRFZGdlc11cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzZWxlY3RPYmplY3Qob2JqLCBoaWdobGlnaHRFZGdlcyA9IHRoaXMub3B0aW9ucy5zZWxlY3RDb25uZWN0ZWRFZGdlcykge1xuICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgaWYgKGhpZ2hsaWdodEVkZ2VzID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuYWRkRWRnZXMoLi4ub2JqLmVkZ2VzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5hZGROb2RlcyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuYWRkRWRnZXMob2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9ialxuICAgKi9cbiAgZGVzZWxlY3RPYmplY3Qob2JqKSB7XG4gICAgaWYgKG9iai5pc1NlbGVjdGVkKCkgPT09IHRydWUpIHtcbiAgICAgIG9iai5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fcmVtb3ZlRnJvbVNlbGVjdGlvbihvYmopO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXRyaWV2ZSBhbGwgbm9kZXMgb3ZlcmxhcHBpbmcgd2l0aCBnaXZlbiBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAgQW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b21cbiAgICogQHJldHVybnMge251bWJlcltdfSAgIEFuIGFycmF5IHdpdGggaWQncyBvZiB0aGUgb3ZlcmxhcHBpbmcgbm9kZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRBbGxOb2Rlc092ZXJsYXBwaW5nV2l0aChvYmplY3QpIHtcbiAgICBjb25zdCBvdmVybGFwcGluZ05vZGVzID0gW107XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IHRoaXMuYm9keS5ub2RlSW5kaWNlc1tpXTtcbiAgICAgIGlmIChub2Rlc1tub2RlSWRdLmlzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCkpIHtcbiAgICAgICAgb3ZlcmxhcHBpbmdOb2Rlcy5wdXNoKG5vZGVJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdmVybGFwcGluZ05vZGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHBvc2l0aW9uIG9iamVjdCBpbiBjYW52YXNzcGFjZSBmcm9tIGEgc2luZ2xlIHBvaW50IGluIHNjcmVlbnNwYWNlXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcmV0dXJucyB7e2xlZnQ6IG51bWJlciwgdG9wOiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyfX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKSB7XG4gICAgY29uc3QgY2FudmFzUG9zID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMocG9pbnRlcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZnQ6IGNhbnZhc1Bvcy54IC0gMSxcbiAgICAgIHRvcDogY2FudmFzUG9zLnkgKyAxLFxuICAgICAgcmlnaHQ6IGNhbnZhc1Bvcy54ICsgMSxcbiAgICAgIGJvdHRvbTogY2FudmFzUG9zLnkgLSAxLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0b3Agbm9kZSBhdCB0aGUgcGFzc2VkIHBvaW50IChsaWtlIGEgY2xpY2spXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXR1cm5Ob2RlPXRydWVdXG4gICAqIEByZXR1cm5zIHtOb2RlIHwgdW5kZWZpbmVkfSBub2RlXG4gICAqL1xuICBnZXROb2RlQXQocG9pbnRlciwgcmV0dXJuTm9kZSA9IHRydWUpIHtcbiAgICAvLyB3ZSBmaXJzdCBjaGVjayBpZiB0aGlzIGlzIGFuIG5hdmlnYXRpb24gY29udHJvbHMgZWxlbWVudFxuICAgIGNvbnN0IHBvc2l0aW9uT2JqZWN0ID0gdGhpcy5fcG9pbnRlclRvUG9zaXRpb25PYmplY3QocG9pbnRlcik7XG4gICAgY29uc3Qgb3ZlcmxhcHBpbmdOb2RlcyA9IHRoaXMuX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoKHBvc2l0aW9uT2JqZWN0KTtcbiAgICAvLyBpZiB0aGVyZSBhcmUgb3ZlcmxhcHBpbmcgbm9kZXMsIHNlbGVjdCB0aGUgbGFzdCBvbmUsIHRoaXMgaXMgdGhlXG4gICAgLy8gb25lIHdoaWNoIGlzIGRyYXduIG9uIHRvcCBvZiB0aGUgb3RoZXJzXG4gICAgaWYgKG92ZXJsYXBwaW5nTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHJldHVybk5vZGUgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5ub2Rlc1tvdmVybGFwcGluZ05vZGVzW292ZXJsYXBwaW5nTm9kZXMubGVuZ3RoIC0gMV1dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXBwaW5nTm9kZXNbb3ZlcmxhcHBpbmdOb2Rlcy5sZW5ndGggLSAxXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcmV0cmlldmUgYWxsIGVkZ2VzIG92ZXJsYXBwaW5nIHdpdGggZ2l2ZW4gb2JqZWN0LCBzZWxlY3RvciBpcyBhcm91bmQgY2VudGVyXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgIEFuIG9iamVjdCB3aXRoIHBhcmFtZXRlcnMgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IG92ZXJsYXBwaW5nRWRnZXMgQW4gYXJyYXkgd2l0aCBpZCdzIG9mIHRoZSBvdmVybGFwcGluZyBub2Rlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEVkZ2VzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCwgb3ZlcmxhcHBpbmdFZGdlcykge1xuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5ib2R5LmVkZ2VzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlSWQgPSB0aGlzLmJvZHkuZWRnZUluZGljZXNbaV07XG4gICAgICBpZiAoZWRnZXNbZWRnZUlkXS5pc092ZXJsYXBwaW5nV2l0aChvYmplY3QpKSB7XG4gICAgICAgIG92ZXJsYXBwaW5nRWRnZXMucHVzaChlZGdlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXRyaWV2ZSBhbGwgbm9kZXMgb3ZlcmxhcHBpbmcgd2l0aCBnaXZlbiBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAgQW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b21cbiAgICogQHJldHVybnMge251bWJlcltdfSAgIEFuIGFycmF5IHdpdGggaWQncyBvZiB0aGUgb3ZlcmxhcHBpbmcgbm9kZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRBbGxFZGdlc092ZXJsYXBwaW5nV2l0aChvYmplY3QpIHtcbiAgICBjb25zdCBvdmVybGFwcGluZ0VkZ2VzID0gW107XG4gICAgdGhpcy5fZ2V0RWRnZXNPdmVybGFwcGluZ1dpdGgob2JqZWN0LCBvdmVybGFwcGluZ0VkZ2VzKTtcbiAgICByZXR1cm4gb3ZlcmxhcHBpbmdFZGdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGVkZ2VzIG5lYXJlc3QgdG8gdGhlIHBhc3NlZCBwb2ludCAobGlrZSBhIGNsaWNrKVxuICAgKlxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvaW50ZXJcbiAgICogQHBhcmFtIHtib29sZWFufSBbcmV0dXJuRWRnZT10cnVlXVxuICAgKiBAcmV0dXJucyB7RWRnZSB8IHVuZGVmaW5lZH0gbm9kZVxuICAgKi9cbiAgZ2V0RWRnZUF0KHBvaW50ZXIsIHJldHVybkVkZ2UgPSB0cnVlKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGVkZ2VzLCBwaWNrIGNsb3Nlc3Qgd2l0aGluIDEwXG4gICAgY29uc3QgY2FudmFzUG9zID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMocG9pbnRlcik7XG4gICAgbGV0IG1pbmRpc3QgPSAxMDtcbiAgICBsZXQgb3ZlcmxhcHBpbmdFZGdlID0gbnVsbDtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5lZGdlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWRnZUlkID0gdGhpcy5ib2R5LmVkZ2VJbmRpY2VzW2ldO1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2VkZ2VJZF07XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQpIHtcbiAgICAgICAgY29uc3QgeEZyb20gPSBlZGdlLmZyb20ueDtcbiAgICAgICAgY29uc3QgeUZyb20gPSBlZGdlLmZyb20ueTtcbiAgICAgICAgY29uc3QgeFRvID0gZWRnZS50by54O1xuICAgICAgICBjb25zdCB5VG8gPSBlZGdlLnRvLnk7XG4gICAgICAgIGNvbnN0IGRpc3QgPSBlZGdlLmVkZ2VUeXBlLmdldERpc3RhbmNlVG9FZGdlKFxuICAgICAgICAgIHhGcm9tLFxuICAgICAgICAgIHlGcm9tLFxuICAgICAgICAgIHhUbyxcbiAgICAgICAgICB5VG8sXG4gICAgICAgICAgY2FudmFzUG9zLngsXG4gICAgICAgICAgY2FudmFzUG9zLnlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRpc3QgPCBtaW5kaXN0KSB7XG4gICAgICAgICAgb3ZlcmxhcHBpbmdFZGdlID0gZWRnZUlkO1xuICAgICAgICAgIG1pbmRpc3QgPSBkaXN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvdmVybGFwcGluZ0VkZ2UgIT09IG51bGwpIHtcbiAgICAgIGlmIChyZXR1cm5FZGdlID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvZHkuZWRnZXNbb3ZlcmxhcHBpbmdFZGdlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvdmVybGFwcGluZ0VkZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBvYmplY3QgdG8gdGhlIHNlbGVjdGlvbiBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9ialxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZFRvSG92ZXIob2JqKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgIHRoaXMuaG92ZXJPYmoubm9kZXNbb2JqLmlkXSA9IG9iajtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ob3Zlck9iai5lZGdlc1tvYmouaWRdID0gb2JqO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBzaW5nbGUgb3B0aW9uIGZyb20gc2VsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVtb3ZlRnJvbVNlbGVjdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZGVsZXRlTm9kZXMob2JqKTtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmRlbGV0ZUVkZ2VzKC4uLm9iai5lZGdlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmRlbGV0ZUVkZ2VzKG9iaik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc2VsZWN0IGFsbCBub2RlcyBhbmQgZWRnZXMuXG4gICAqL1xuICB1bnNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIG5vZGVzXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRTZWxlY3RlZE5vZGVDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3Iuc2l6ZU5vZGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVkZ2VzXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRTZWxlY3RlZEVkZ2VDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3Iuc2l6ZUVkZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIHNlbGVjdCB0aGUgZWRnZXMgY29ubmVjdGVkIHRvIHRoZSBub2RlIHRoYXQgaXMgYmVpbmcgc2VsZWN0ZWRcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaG92ZXJDb25uZWN0ZWRFZGdlcyhub2RlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gbm9kZS5lZGdlc1tpXTtcbiAgICAgIGVkZ2UuaG92ZXIgPSB0cnVlO1xuICAgICAgdGhpcy5fYWRkVG9Ib3ZlcihlZGdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBoaWdobGlnaHQgZnJvbSBhIG5vZGUgb3IgZWRnZSwgaW4gcmVzcG9uc2UgdG8gbW91c2UgbW92ZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50XG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlciBvYmplY3Qgd2l0aCB0aGUgeCBhbmQgeSBzY3JlZW4gY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlXG4gICAqIEBwYXJhbSB7Tm9kZXx2aXMuRWRnZX0gb2JqZWN0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0Qmx1ckV2ZW50KGV2ZW50LCBwb2ludGVyLCBvYmplY3QpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5faW5pdEJhc2VFdmVudChldmVudCwgcG9pbnRlcik7XG5cbiAgICBpZiAob2JqZWN0LmhvdmVyID09PSB0cnVlKSB7XG4gICAgICBvYmplY3QuaG92ZXIgPSBmYWxzZTtcbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlKSB7XG4gICAgICAgIHByb3BlcnRpZXMubm9kZSA9IG9iamVjdC5pZDtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImJsdXJOb2RlXCIsIHByb3BlcnRpZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcGVydGllcy5lZGdlID0gb2JqZWN0LmlkO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYmx1ckVkZ2VcIiwgcHJvcGVydGllcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgaGlnaGxpZ2h0IGZvciBhIG5vZGUgb3IgZWRnZSwgaW4gcmVzcG9uc2UgdG8gbW91c2UgbW92ZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50XG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlciBvYmplY3Qgd2l0aCB0aGUgeCBhbmQgeSBzY3JlZW4gY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlXG4gICAqIEBwYXJhbSB7Tm9kZXx2aXMuRWRnZX0gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtib29sZWFufSBob3ZlckNoYW5nZWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXRIb3ZlckV2ZW50KGV2ZW50LCBwb2ludGVyLCBvYmplY3QpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5faW5pdEJhc2VFdmVudChldmVudCwgcG9pbnRlcik7XG4gICAgbGV0IGhvdmVyQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgaWYgKG9iamVjdC5ob3ZlciA9PT0gZmFsc2UpIHtcbiAgICAgIG9iamVjdC5ob3ZlciA9IHRydWU7XG4gICAgICB0aGlzLl9hZGRUb0hvdmVyKG9iamVjdCk7XG4gICAgICBob3ZlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgcHJvcGVydGllcy5ub2RlID0gb2JqZWN0LmlkO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiaG92ZXJOb2RlXCIsIHByb3BlcnRpZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcGVydGllcy5lZGdlID0gb2JqZWN0LmlkO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiaG92ZXJFZGdlXCIsIHByb3BlcnRpZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBob3ZlckNoYW5nZWQ7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBhY3Rpb25zIGluIHJlc3BvbnNlIHRvIGEgbW91c2UgbW92ZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9ICBldmVudFxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvaW50ZXIgfCBvYmplY3Qgd2l0aCB0aGUgeCBhbmQgeSBzY3JlZW4gY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlXG4gICAqL1xuICBob3Zlck9iamVjdChldmVudCwgcG9pbnRlcikge1xuICAgIGxldCBvYmplY3QgPSB0aGlzLmdldE5vZGVBdChwb2ludGVyKTtcbiAgICBpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iamVjdCA9IHRoaXMuZ2V0RWRnZUF0KHBvaW50ZXIpO1xuICAgIH1cblxuICAgIGxldCBob3ZlckNoYW5nZWQgPSBmYWxzZTtcbiAgICAvLyByZW1vdmUgYWxsIG5vZGUgaG92ZXIgaGlnaGxpZ2h0c1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuaG92ZXJPYmoubm9kZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ob3Zlck9iai5ub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgb2JqZWN0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAob2JqZWN0IGluc3RhbmNlb2YgTm9kZSAmJiBvYmplY3QuaWQgIT0gbm9kZUlkKSB8fFxuICAgICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIEVkZ2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5lbWl0Qmx1ckV2ZW50KGV2ZW50LCBwb2ludGVyLCB0aGlzLmhvdmVyT2JqLm5vZGVzW25vZGVJZF0pO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmhvdmVyT2JqLm5vZGVzW25vZGVJZF07XG4gICAgICAgICAgaG92ZXJDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92aW5nIGFsbCBlZGdlIGhvdmVyIGhpZ2hsaWdodHNcbiAgICBmb3IgKGNvbnN0IGVkZ2VJZCBpbiB0aGlzLmhvdmVyT2JqLmVkZ2VzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuaG92ZXJPYmouZWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgICAgLy8gaWYgdGhlIGhvdmVyIGhhcyBiZWVuIGNoYW5nZWQgaGVyZSBpdCBtZWFucyB0aGF0IHRoZSBub2RlIGhhcyBiZWVuIGhvdmVyZWQgb3ZlciBvciBvZmZcbiAgICAgICAgLy8gd2UgdGhlbiBkbyBub3QgdXNlIHRoZSBlbWl0Qmx1ckV2ZW50IG1ldGhvZCBoZXJlLlxuICAgICAgICBpZiAoaG92ZXJDaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5ob3Zlck9iai5lZGdlc1tlZGdlSWRdLmhvdmVyID0gZmFsc2U7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuaG92ZXJPYmouZWRnZXNbZWRnZUlkXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgYmx1ciByZW1haW5zIHRoZSBzYW1lIGFuZCB0aGUgb2JqZWN0IGlzIHVuZGVmaW5lZCAobW91c2Ugb2ZmKSBvciBhbm90aGVyXG4gICAgICAgIC8vIGVkZ2UgaGFzIGJlZW4gaG92ZXJlZCwgb3IgYW5vdGhlciBub2RlIGhhcyBiZWVuIGhvdmVyZWQgd2UgYmx1ciB0aGUgZWRnZS5cbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgb2JqZWN0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAob2JqZWN0IGluc3RhbmNlb2YgRWRnZSAmJiBvYmplY3QuaWQgIT0gZWRnZUlkKSB8fFxuICAgICAgICAgIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlICYmICFvYmplY3QuaG92ZXIpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZW1pdEJsdXJFdmVudChldmVudCwgcG9pbnRlciwgdGhpcy5ob3Zlck9iai5lZGdlc1tlZGdlSWRdKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5ob3Zlck9iai5lZGdlc1tlZGdlSWRdO1xuICAgICAgICAgIGhvdmVyQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGhvdmVyZWRFZGdlc0NvdW50ID0gT2JqZWN0LmtleXModGhpcy5ob3Zlck9iai5lZGdlcykubGVuZ3RoO1xuICAgICAgY29uc3QgaG92ZXJlZE5vZGVzQ291bnQgPSBPYmplY3Qua2V5cyh0aGlzLmhvdmVyT2JqLm5vZGVzKS5sZW5ndGg7XG4gICAgICBjb25zdCBuZXdPbmx5SG92ZXJlZEVkZ2UgPVxuICAgICAgICBvYmplY3QgaW5zdGFuY2VvZiBFZGdlICYmXG4gICAgICAgIGhvdmVyZWRFZGdlc0NvdW50ID09PSAwICYmXG4gICAgICAgIGhvdmVyZWROb2Rlc0NvdW50ID09PSAwO1xuICAgICAgY29uc3QgbmV3T25seUhvdmVyZWROb2RlID1cbiAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgTm9kZSAmJlxuICAgICAgICBob3ZlcmVkRWRnZXNDb3VudCA9PT0gMCAmJlxuICAgICAgICBob3ZlcmVkTm9kZXNDb3VudCA9PT0gMDtcblxuICAgICAgaWYgKGhvdmVyQ2hhbmdlZCB8fCBuZXdPbmx5SG92ZXJlZEVkZ2UgfHwgbmV3T25seUhvdmVyZWROb2RlKSB7XG4gICAgICAgIGhvdmVyQ2hhbmdlZCA9IHRoaXMuZW1pdEhvdmVyRXZlbnQoZXZlbnQsIHBvaW50ZXIsIG9iamVjdCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlICYmIHRoaXMub3B0aW9ucy5ob3ZlckNvbm5lY3RlZEVkZ2VzID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX2hvdmVyQ29ubmVjdGVkRWRnZXMob2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaG92ZXJDaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbW1pdCB0aGUgc2VsZWN0aW9uIGNoYW5nZXMgYnV0IGRvbid0IGVtaXQgYW55IGV2ZW50cy5cbiAgICovXG4gIGNvbW1pdFdpdGhvdXRFbWl0dGluZygpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5jb21taXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYW5kIGRlc2VsZWN0IG5vZGVzIGRlcGVuZGluZyBjdXJyZW50IHNlbGVjdGlvbiBjaGFuZ2UuXG4gICAqXG4gICAqIEZvciBjaGFuZ2luZyBub2Rlcywgc2VsZWN0L2Rlc2VsZWN0IGV2ZW50cyBhcmUgZmlyZWQuXG4gICAqXG4gICAqIE5PVEU6IEZvciBhIGdpdmVuIGVkZ2UsIGlmIG9uZSBjb25uZWN0aW5nIG5vZGUgaXMgZGVzZWxlY3RlZCBhbmQgd2l0aCB0aGVcbiAgICogc2FtZSBjbGljayB0aGUgb3RoZXIgbm9kZSBpcyBzZWxlY3RlZCwgbm8gZXZlbnRzIGZvciB0aGUgZWRnZSB3aWxsIGZpcmUuIEl0XG4gICAqIHdhcyBzZWxlY3RlZCBhbmQgaXQgd2lsbCByZW1haW4gc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlciAtIFRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIG9mIHRoZVxuICAgKiBjbGljaywgdGFwLCBkcmFnZW5k4oCmIHRoYXQgdHJpZ2dlcmVkIHRoaXMuXG4gICAqIEBwYXJhbSB7VUlFdmVudH0gZXZlbnQgLSBUaGUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhpcy5cbiAgICovXG4gIGNvbW1pdEFuZEVtaXQocG9pbnRlciwgZXZlbnQpIHtcbiAgICBsZXQgc2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbkNoYW5nZXMgPSB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5jb21taXQoKTtcbiAgICBjb25zdCBwcmV2aW91c1NlbGVjdGlvbiA9IHtcbiAgICAgIG5vZGVzOiBzZWxlY3Rpb25DaGFuZ2VzLm5vZGVzLnByZXZpb3VzLFxuICAgICAgZWRnZXM6IHNlbGVjdGlvbkNoYW5nZXMuZWRnZXMucHJldmlvdXMsXG4gICAgfTtcblxuICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VzLmVkZ2VzLmRlbGV0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgIFwiZGVzZWxlY3RFZGdlXCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBwb2ludGVyLFxuICAgICAgICBwcmV2aW91c1NlbGVjdGlvblxuICAgICAgKTtcbiAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlcy5ub2Rlcy5kZWxldGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICBcImRlc2VsZWN0Tm9kZVwiLFxuICAgICAgICBldmVudCxcbiAgICAgICAgcG9pbnRlcixcbiAgICAgICAgcHJldmlvdXNTZWxlY3Rpb25cbiAgICAgICk7XG4gICAgICBzZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGlvbkNoYW5nZXMubm9kZXMuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJzZWxlY3ROb2RlXCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlcy5lZGdlcy5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2xpY2tFdmVudChcInNlbGVjdEVkZ2VcIiwgZXZlbnQsIHBvaW50ZXIpO1xuICAgICAgc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZpcmUgdGhlIHNlbGVjdCBldmVudCBpZiBhbnl0aGluZyBoYXMgYmVlbiBzZWxlY3RlZCBvciBkZXNlbGVjdGVkXG4gICAgaWYgKHNlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBzZWxlY3Qgb3IgdW5zZWxlY3RcbiAgICAgIHRoaXMuZ2VuZXJhdGVDbGlja0V2ZW50KFwic2VsZWN0XCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBub2RlIGFuZCBlZGdlIGlkcy5cbiAgICpcbiAgICogQHJldHVybnMge3tub2RlczogQXJyYXkuPHN0cmluZz4sIGVkZ2VzOiBBcnJheS48c3RyaW5nPn19IEFycmF5cyB3aXRoIHRoZVxuICAgKiBpZHMgb2YgdGhlIHNlbGVjdGVkIG5vZGVzIGFuZCBlZGdlcy5cbiAgICovXG4gIGdldFNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbm9kZXM6IHRoaXMuZ2V0U2VsZWN0ZWROb2RlSWRzKCksXG4gICAgICBlZGdlczogdGhpcy5nZXRTZWxlY3RlZEVkZ2VJZHMoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQW4gYXJyYXkgd2l0aCBzZWxlY3RlZCBub2Rlcy5cbiAgICovXG4gIGdldFNlbGVjdGVkTm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmdldE5vZGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlZGdlcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSB3aXRoIHNlbGVjdGVkIGVkZ2VzLlxuICAgKi9cbiAgZ2V0U2VsZWN0ZWRFZGdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0RWRnZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGUgaWRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFuIGFycmF5IHdpdGggdGhlIGlkcyBvZiB0aGUgc2VsZWN0ZWQgbm9kZXMuXG4gICAqL1xuICBnZXRTZWxlY3RlZE5vZGVJZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmdldE5vZGVzKCkubWFwKChub2RlKSA9PiBub2RlLmlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGVkZ2UgaWRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFuIGFycmF5IHdpdGggdGhlIGlkcyBvZiB0aGUgc2VsZWN0ZWQgZWRnZXMuXG4gICAqL1xuICBnZXRTZWxlY3RlZEVkZ2VJZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmdldEVkZ2VzKCkubWFwKChlZGdlKSA9PiBlZGdlLmlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjdXJyZW50IHNlbGVjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3tub2RlczogQXJyYXkuPHN0cmluZz4sIGVkZ2VzOiBBcnJheS48c3RyaW5nPn19IHNlbGVjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnNcbiAgICovXG4gIHNldFNlbGVjdGlvbihzZWxlY3Rpb24sIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghc2VsZWN0aW9uIHx8ICghc2VsZWN0aW9uLm5vZGVzICYmICFzZWxlY3Rpb24uZWRnZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIlNlbGVjdGlvbiBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIG5vZGVzIGFuZC9vciBlZGdlcyBwcm9wZXJ0aWVzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gZmlyc3QgdW5zZWxlY3QgYW55IHNlbGVjdGVkIG5vZGUsIGlmIG9wdGlvbiBpcyB0cnVlIG9yIHVuZGVmaW5lZFxuICAgIGlmIChvcHRpb25zLnVuc2VsZWN0QWxsIHx8IG9wdGlvbnMudW5zZWxlY3RBbGwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy51bnNlbGVjdEFsbCgpO1xuICAgIH1cbiAgICBpZiAoc2VsZWN0aW9uLm5vZGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIHNlbGVjdGlvbi5ub2Rlcykge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW2lkXTtcbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ05vZGUgd2l0aCBpZCBcIicgKyBpZCArICdcIiBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBzZWxlY3QgZWRnZXMgd2l0aCBpdFxuICAgICAgICB0aGlzLnNlbGVjdE9iamVjdChub2RlLCBvcHRpb25zLmhpZ2hsaWdodEVkZ2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0aW9uLmVkZ2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIHNlbGVjdGlvbi5lZGdlcykge1xuICAgICAgICBjb25zdCBlZGdlID0gdGhpcy5ib2R5LmVkZ2VzW2lkXTtcbiAgICAgICAgaWYgKCFlZGdlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0VkZ2Ugd2l0aCBpZCBcIicgKyBpZCArICdcIiBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdE9iamVjdChlZGdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmNvbW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHNlbGVjdCB6ZXJvIG9yIG1vcmUgbm9kZXMgd2l0aCB0aGUgb3B0aW9uIHRvIGhpZ2hsaWdodCBlZGdlc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgc3RyaW5nW119IHNlbGVjdGlvbiAgICAgQW4gYXJyYXkgd2l0aCB0aGUgaWRzIG9mIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbm9kZXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpZ2hsaWdodEVkZ2VzXVxuICAgKi9cbiAgc2VsZWN0Tm9kZXMoc2VsZWN0aW9uLCBoaWdobGlnaHRFZGdlcyA9IHRydWUpIHtcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ubGVuZ3RoID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBcIlNlbGVjdGlvbiBtdXN0IGJlIGFuIGFycmF5IHdpdGggaWRzXCI7XG5cbiAgICB0aGlzLnNldFNlbGVjdGlvbih7IG5vZGVzOiBzZWxlY3Rpb24gfSwgeyBoaWdobGlnaHRFZGdlczogaGlnaGxpZ2h0RWRnZXMgfSk7XG4gIH1cblxuICAvKipcbiAgICogc2VsZWN0IHplcm8gb3IgbW9yZSBlZGdlc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgc3RyaW5nW119IHNlbGVjdGlvbiAgICAgQW4gYXJyYXkgd2l0aCB0aGUgaWRzIG9mIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbm9kZXMuXG4gICAqL1xuICBzZWxlY3RFZGdlcyhzZWxlY3Rpb24pIHtcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ubGVuZ3RoID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBcIlNlbGVjdGlvbiBtdXN0IGJlIGFuIGFycmF5IHdpdGggaWRzXCI7XG5cbiAgICB0aGlzLnNldFNlbGVjdGlvbih7IGVkZ2VzOiBzZWxlY3Rpb24gfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIHNlbGVjdGlvbjogcmVtb3ZlIGlkcyBvZiBub2RlcyB3aGljaCBubyBsb25nZXIgZXhpc3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVwZGF0ZVNlbGVjdGlvbigpIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgaW4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0Tm9kZXMoKSkge1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlLmlkKSkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5kZWxldGVOb2Rlcyhub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBlZGdlIGluIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmdldEVkZ2VzKCkpIHtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5lZGdlcywgZWRnZS5pZCkpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZGVsZXRlRWRnZXMoZWRnZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBhbGwgdGhlIHZpc3VhbCBlbGVtZW50cyBjbGlja2VkIHdoaWNoIGFyZSBvbiB0aGUgZ2l2ZW4gcG9pbnQuXG4gICAqXG4gICAqIEFsbCBlbGVtZW50cyBhcmUgcmV0dXJuZWQ7IHRoaXMgaW5jbHVkZXMgbm9kZXMsIGVkZ2VzIGFuZCB0aGVpciBsYWJlbHMuXG4gICAqIFRoZSBvcmRlciByZXR1cm5lZCBpcyBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0LCBpLmUuIGVsZW1lbnQgMCBvZiB0aGUgcmV0dXJuXG4gICAqIHZhbHVlIGlzIHRoZSB0b3Btb3N0IGl0ZW0gY2xpY2tlZCBvbi5cbiAgICpcbiAgICogVGhlIHJldHVybiB2YWx1ZSBjb25zaXN0cyBvZiBhbiBhcnJheSBvZiB0aGUgZm9sbG93aW5nIHBvc3NpYmxlIGVsZW1lbnRzOlxuICAgKlxuICAgKiAtIGB7bm9kZUlkOm51bWJlcn1gICAgICAgICAgICAgIC0gbm9kZSB3aXRoIGdpdmVuIGlkIGNsaWNrZWQgb25cbiAgICogLSBge25vZGVJZDpudW1iZXIsIGxhYmVsSWQ6MH1gICAtIGxhYmVsIG9mIG5vZGUgd2l0aCBnaXZlbiBpZCBjbGlja2VkIG9uXG4gICAqIC0gYHtlZGdlSWQ6bnVtYmVyfWAgICAgICAgICAgICAgLSBlZGdlIHdpdGggZ2l2ZW4gaWQgY2xpY2tlZCBvblxuICAgKiAtIGB7ZWRnZTpudW1iZXIsIGxhYmVsSWQ6MH1gICAgIC0gbGFiZWwgb2YgZWRnZSB3aXRoIGdpdmVuIGlkIGNsaWNrZWQgb25cbiAgICpcbiAgICogIyMgTk9URVNcbiAgICpcbiAgICogLSBDdXJyZW50bHksIHRoZXJlIGlzIG9ubHkgb25lIGxhYmVsIGFzc29jaWF0ZWQgd2l0aCBhIG5vZGUgb3IgYW4gZWRnZSxcbiAgICogICBidXQgdGhpcyBpcyBleHBlY3RlZCB0byBjaGFuZ2Ugc29tZXdoZXJlIGluIHRoZSBmdXR1cmUuXG4gICAqIC0gU2luY2UgdGhlcmUgaXMgbm8gei1pbmRleGluZyB5ZXQsIGl0IGlzIG5vdCByZWFsbHkgcG9zc2libGUgdG8gc2V0IHRoZSBub2RlcyBhbmRcbiAgICogICBlZGdlcyBpbiB0aGUgY29ycmVjdCBvcmRlci4gRm9yIHRoZSB0aW1lIGJlaW5nLCBub2RlcyBjb21lIGZpcnN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb2ludGVyICBtb3VzZSBwb3NpdGlvbiBpbiBzY3JlZW4gY29vcmRpbmF0ZXNcbiAgICogQHJldHVybnMge0FycmF5Ljxub2RlQ2xpY2tJdGVtfG5vZGVMYWJlbENsaWNrSXRlbXxlZGdlQ2xpY2tJdGVtfGVkZ2VMYWJlbENsaWNrSXRlbT59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRDbGlja2VkSXRlbXMocG9pbnRlcikge1xuICAgIGNvbnN0IHBvaW50ID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMocG9pbnRlcik7XG4gICAgY29uc3QgaXRlbXMgPSBbXTtcblxuICAgIC8vIE5vdGUgcmV2ZXJzZSBvcmRlcjsgd2Ugd2FudCB0aGUgdG9wbW9zdCBjbGlja2VkIGl0ZW1zIHRvIGJlIGZpcnN0IGluIHRoZSBhcnJheVxuICAgIC8vIEFsc28gbm90ZSB0aGF0IHNlbGVjdGVkIG5vZGVzIGFyZSBkaXNyZWdhcmRlZCBoZXJlOyB0aGVzZSBub3JtYWxseSBkaXNwbGF5IG9uIHRvcFxuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGZvciAobGV0IGkgPSBub2RlSW5kaWNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgIGNvbnN0IHJldCA9IG5vZGUuZ2V0SXRlbXNPblBvaW50KHBvaW50KTtcbiAgICAgIGl0ZW1zLnB1c2guYXBwbHkoaXRlbXMsIHJldCk7IC8vIEFwcGVuZCB0aGUgcmV0dXJuIHZhbHVlIHRvIHRoZSBydW5uaW5nIGxpc3QuXG4gICAgfVxuXG4gICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLmJvZHkuZWRnZUluZGljZXM7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgZm9yIChsZXQgaSA9IGVkZ2VJbmRpY2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUluZGljZXNbaV1dO1xuICAgICAgY29uc3QgcmV0ID0gZWRnZS5nZXRJdGVtc09uUG9pbnQocG9pbnQpO1xuICAgICAgaXRlbXMucHVzaC5hcHBseShpdGVtcywgcmV0KTsgLy8gQXBwZW5kIHRoZSByZXR1cm4gdmFsdWUgdG8gdGhlIHJ1bm5pbmcgbGlzdC5cbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0aW9uSGFuZGxlcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxudmFyIG1lcmdlU29ydCA9IGZ1bmN0aW9uIChhcnJheSwgY29tcGFyZWZuKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHZhciBtaWRkbGUgPSBmbG9vcihsZW5ndGggLyAyKTtcbiAgcmV0dXJuIGxlbmd0aCA8IDggPyBpbnNlcnRpb25Tb3J0KGFycmF5LCBjb21wYXJlZm4pIDogbWVyZ2UoXG4gICAgYXJyYXksXG4gICAgbWVyZ2VTb3J0KGFycmF5U2xpY2UoYXJyYXksIDAsIG1pZGRsZSksIGNvbXBhcmVmbiksXG4gICAgbWVyZ2VTb3J0KGFycmF5U2xpY2UoYXJyYXksIG1pZGRsZSksIGNvbXBhcmVmbiksXG4gICAgY29tcGFyZWZuXG4gICk7XG59O1xuXG52YXIgaW5zZXJ0aW9uU29ydCA9IGZ1bmN0aW9uIChhcnJheSwgY29tcGFyZWZuKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHZhciBpID0gMTtcbiAgdmFyIGVsZW1lbnQsIGo7XG5cbiAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICBqID0gaTtcbiAgICBlbGVtZW50ID0gYXJyYXlbaV07XG4gICAgd2hpbGUgKGogJiYgY29tcGFyZWZuKGFycmF5W2ogLSAxXSwgZWxlbWVudCkgPiAwKSB7XG4gICAgICBhcnJheVtqXSA9IGFycmF5Wy0tal07XG4gICAgfVxuICAgIGlmIChqICE9PSBpKyspIGFycmF5W2pdID0gZWxlbWVudDtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG52YXIgbWVyZ2UgPSBmdW5jdGlvbiAoYXJyYXksIGxlZnQsIHJpZ2h0LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxsZW5ndGggPSBsZWZ0Lmxlbmd0aDtcbiAgdmFyIHJsZW5ndGggPSByaWdodC5sZW5ndGg7XG4gIHZhciBsaW5kZXggPSAwO1xuICB2YXIgcmluZGV4ID0gMDtcblxuICB3aGlsZSAobGluZGV4IDwgbGxlbmd0aCB8fCByaW5kZXggPCBybGVuZ3RoKSB7XG4gICAgYXJyYXlbbGluZGV4ICsgcmluZGV4XSA9IChsaW5kZXggPCBsbGVuZ3RoICYmIHJpbmRleCA8IHJsZW5ndGgpXG4gICAgICA/IGNvbXBhcmVmbihsZWZ0W2xpbmRleF0sIHJpZ2h0W3JpbmRleF0pIDw9IDAgPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXVxuICAgICAgOiBsaW5kZXggPCBsbGVuZ3RoID8gbGVmdFtsaW5kZXgrK10gOiByaWdodFtyaW5kZXgrK107XG4gIH0gcmV0dXJuIGFycmF5O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXJnZVNvcnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgZmlyZWZveCA9IHVzZXJBZ2VudC5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS9pKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIWZpcmVmb3ggJiYgK2ZpcmVmb3hbMV07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFVBID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL01TSUV8VHJpZGVudC8udGVzdChVQSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgd2Via2l0ID0gdXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdFxcLyhcXGQrKVxcLi8pO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhd2Via2l0ICYmICt3ZWJraXRbMV07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVybmFsU29ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zb3J0Jyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgRkYgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24nKTtcbnZhciBJRV9PUl9FREdFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlJyk7XG52YXIgVjggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBXRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uJyk7XG5cbnZhciB0ZXN0ID0gW107XG52YXIgbmF0aXZlU29ydCA9IHVuY3VycnlUaGlzKHRlc3Quc29ydCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKHRlc3QucHVzaCk7XG5cbi8vIElFOC1cbnZhciBGQUlMU19PTl9VTkRFRklORUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSk7XG4vLyBWOCBidWdcbnZhciBGQUlMU19PTl9OVUxMID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQobnVsbCk7XG59KTtcbi8vIE9sZCBXZWJLaXRcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29ydCcpO1xuXG52YXIgU1RBQkxFX1NPUlQgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBmZWF0dXJlIGRldGVjdGlvbiBjYW4gYmUgdG9vIHNsb3csIHNvIGNoZWNrIGVuZ2luZXMgdmVyc2lvbnNcbiAgaWYgKFY4KSByZXR1cm4gVjggPCA3MDtcbiAgaWYgKEZGICYmIEZGID4gMykgcmV0dXJuO1xuICBpZiAoSUVfT1JfRURHRSkgcmV0dXJuIHRydWU7XG4gIGlmIChXRUJLSVQpIHJldHVybiBXRUJLSVQgPCA2MDM7XG5cbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgY29kZSwgY2hyLCB2YWx1ZSwgaW5kZXg7XG5cbiAgLy8gZ2VuZXJhdGUgYW4gYXJyYXkgd2l0aCBtb3JlIDUxMiBlbGVtZW50cyAoQ2hha3JhIGFuZCBvbGQgVjggZmFpbHMgb25seSBpbiB0aGlzIGNhc2UpXG4gIGZvciAoY29kZSA9IDY1OyBjb2RlIDwgNzY7IGNvZGUrKykge1xuICAgIGNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgIGNhc2UgNjY6IGNhc2UgNjk6IGNhc2UgNzA6IGNhc2UgNzI6IHZhbHVlID0gMzsgYnJlYWs7XG4gICAgICBjYXNlIDY4OiBjYXNlIDcxOiB2YWx1ZSA9IDQ7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogdmFsdWUgPSAyO1xuICAgIH1cblxuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDQ3OyBpbmRleCsrKSB7XG4gICAgICB0ZXN0LnB1c2goeyBrOiBjaHIgKyBpbmRleCwgdjogdmFsdWUgfSk7XG4gICAgfVxuICB9XG5cbiAgdGVzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLnYgLSBhLnY7IH0pO1xuXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRlc3QubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY2hyID0gdGVzdFtpbmRleF0uay5jaGFyQXQoMCk7XG4gICAgaWYgKHJlc3VsdC5jaGFyQXQocmVzdWx0Lmxlbmd0aCAtIDEpICE9PSBjaHIpIHJlc3VsdCArPSBjaHI7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0ICE9PSAnREdCRUZIQUNJSksnO1xufSk7XG5cbnZhciBGT1JDRUQgPSBGQUlMU19PTl9VTkRFRklORUQgfHwgIUZBSUxTX09OX05VTEwgfHwgIVNUUklDVF9NRVRIT0QgfHwgIVNUQUJMRV9TT1JUO1xuXG52YXIgZ2V0U29ydENvbXBhcmUgPSBmdW5jdGlvbiAoY29tcGFyZWZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoeCwgeSkge1xuICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHJldHVybiAtMTtcbiAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIHJldHVybiArY29tcGFyZWZuKHgsIHkpIHx8IDA7XG4gICAgcmV0dXJuIHRvU3RyaW5nKHgpID4gdG9TdHJpbmcoeSkgPyAxIDogLTE7XG4gIH07XG59O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29ydFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIGFDYWxsYWJsZShjb21wYXJlZm4pO1xuXG4gICAgdmFyIGFycmF5ID0gdG9PYmplY3QodGhpcyk7XG5cbiAgICBpZiAoU1RBQkxFX1NPUlQpIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZCA/IG5hdGl2ZVNvcnQoYXJyYXkpIDogbmF0aXZlU29ydChhcnJheSwgY29tcGFyZWZuKTtcblxuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciBhcnJheUxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGFycmF5KTtcbiAgICB2YXIgaXRlbXNMZW5ndGgsIGluZGV4O1xuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChpbmRleCBpbiBhcnJheSkgcHVzaChpdGVtcywgYXJyYXlbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBpbnRlcm5hbFNvcnQoaXRlbXMsIGdldFNvcnRDb21wYXJlKGNvbXBhcmVmbikpO1xuXG4gICAgaXRlbXNMZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVtcyk7XG4gICAgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgaXRlbXNMZW5ndGgpIGFycmF5W2luZGV4XSA9IGl0ZW1zW2luZGV4KytdO1xuICAgIHdoaWxlIChpbmRleCA8IGFycmF5TGVuZ3RoKSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coYXJyYXksIGluZGV4KyspO1xuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvcnQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zb3J0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvcnQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29ydDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29ydCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb3J0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IHJlZHVjZSwgcmVkdWNlUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19SSUdIVCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c0xlbmd0aCwgbWVtbykge1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gSVNfUklHSFQgPyBsZW5ndGggLSAxIDogMDtcbiAgICB2YXIgaSA9IElTX1JJR0hUID8gLTEgOiAxO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPCAyKSB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBpZiAoSVNfUklHSFQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7SVNfUklHSFQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuICBsZWZ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiAgcmlnaHQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzc29mKGdsb2JhbC5wcm9jZXNzKSA9PT0gJ3Byb2Nlc3MnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktcmVkdWNlJykubGVmdDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBDSFJPTUVfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxuLy8gQ2hyb21lIDgwLTgyIGhhcyBhIGNyaXRpY2FsIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA0OTk4MlxudmFyIENIUk9NRV9CVUcgPSAhSVNfTk9ERSAmJiBDSFJPTUVfVkVSU0lPTiA+IDc5ICYmIENIUk9NRV9WRVJTSU9OIDwgODM7XG52YXIgRk9SQ0VEID0gQ0hST01FX0JVRyB8fCAhYXJyYXlNZXRob2RJc1N0cmljdCgncmVkdWNlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGxlbmd0aCwgbGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykucmVkdWNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JlZHVjZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZWR1Y2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJlZHVjZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9yZWR1Y2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiLyoqXG4gKiBIZWxwZXIgY2xhc3NlcyBmb3IgTGF5b3V0RW5naW5lLlxuICpcbiAqIFN0cmF0ZWd5IHBhdHRlcm4gZm9yIHVzYWdlIG9mIGRpcmVjdGlvbiBtZXRob2RzIGZvciBoaWVyYXJjaGljYWwgbGF5b3V0cy5cbiAqL1xuXG4vKipcbiAqIEludGVyZmFjZSBkZWZpbml0aW9uIGZvciBkaXJlY3Rpb24gc3RyYXRlZ3kgY2xhc3Nlcy5cbiAqXG4gKiBUaGlzIGNsYXNzIGRlc2NyaWJlcyB0aGUgaW50ZXJmYWNlIGZvciB0aGUgU3RyYXRlZ3lcbiAqIHBhdHRlcm4gY2xhc3NlcyB1c2VkIHRvIGRpZmZlcmVudGlhdGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWxcbiAqIGRpcmVjdGlvbiBvZiBoaWVyYXJjaGljYWwgcmVzdWx0cy5cbiAqXG4gKiBGb3IgYSBnaXZlbiBkaXJlY3Rpb24sIG9uZSBjb29yZGluYXRlIHdpbGwgYmUgJ2ZpeGVkJywgbWVhbmluZyB0aGF0IGl0IGlzXG4gKiBkZXRlcm1pbmVkIGJ5IGxldmVsLlxuICogVGhlIG90aGVyIGNvb3JkaW5hdGUgaXMgJ3VuZml4ZWQnLCBtZWFuaW5nIHRoYXQgdGhlIG5vZGVzIG9uIGEgZ2l2ZW4gbGV2ZWxcbiAqIGNhbiBzdGlsbCBtb3ZlIGFsb25nIHRoYXQgY29vcmRpbmF0ZS4gU286XG4gKlxuICogLSBgdmVydGljYWxgIGxheW91dDogYHhgIHVuZml4ZWQsIGB5YCBmaXhlZCBwZXIgbGV2ZWxcbiAqIC0gYGhvcml6b250YWxgIGxheW91dDogYHhgIGZpeGVkIHBlciBsZXZlbCwgYHlgIHVuZml4ZWRcbiAqXG4gKiBUaGUgbG9jYWwgbWV0aG9kcyBhcmUgc3R1YnMgYW5kIHNob3VsZCBiZSByZWdhcmRlZCBhcyBhYnN0cmFjdC5cbiAqIERlcml2ZWQgY2xhc3NlcyAqKm11c3QqKiBpbXBsZW1lbnQgYWxsIHRoZSBtZXRob2RzIHRoZW1zZWx2ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgRGlyZWN0aW9uSW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGFic3RyYWN0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGluc3RhbnRpYXRlIGFic3RyYWN0IGNsYXNzIVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgZHVtbXkgY2FsbCB3aGljaCBpcyB1c2VkIHRvIHN1cHByZXNzIHRoZSBqc2RvYyBlcnJvcnMgb2YgdHlwZTpcbiAgICpcbiAgICogICBcIidwYXJhbScgaXMgYXNzaWduZWQgYSB2YWx1ZSBidXQgbmV2ZXIgdXNlZFwiXG4gICAqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGZha2VfdXNlKCkge1xuICAgIC8vIERvIG5vdGhpbmcgc3BlY2lhbFxuICB9XG5cbiAgLyoqXG4gICAqIFR5cGUgdG8gdXNlIHRvIHRyYW5zbGF0ZSBkeW5hbWljIGN1cnZlcyB0bywgaW4gdGhlIGNhc2Ugb2YgaGllcmFyY2hpY2FsIGxheW91dC5cbiAgICogRHluYW1pYyBjdXJ2ZXMgZG8gbm90IHdvcmsgZm9yIHRoZXNlLlxuICAgKlxuICAgKiBUaGUgdmFsdWUgc2hvdWxkIGJlIHBlcnBlbmRpY3VsYXIgdG8gdGhlIGFjdHVhbCBkaXJlY3Rpb24gb2YgdGhlIGxheW91dC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gRGlyZWN0aW9uLCBlaXRoZXIgJ3ZlcnRpY2FsJyBvciAnaG9yaXpvbnRhbCdcbiAgICovXG4gIGN1cnZlVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5hYnN0cmFjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGNvb3JkaW5hdGUgdGhhdCBpcyBub3QgZml4ZWQgZm9yIHRoaXMgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIG5vZGUgdG8gcmVhZFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSBvZiB0aGUgdW5maXhlZCBjb29yZGluYXRlXG4gICAqL1xuICBnZXRQb3NpdGlvbihub2RlKSB7XG4gICAgdGhpcy5mYWtlX3VzZShub2RlKTtcbiAgICByZXR1cm4gdGhpcy5hYnN0cmFjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdmFsdWUgb2YgdGhlIGNvb3JkaW5hdGUgdGhhdCBpcyBub3QgZml4ZWQgZm9yIHRoaXMgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIG5vZGUgdG8gYWRqdXN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvblxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xldmVsXSBpZiBzcGVjaWZpZWQsIHRoZSBoaWVyYXJjaHkgbGV2ZWwgdGhhdCB0aGlzIG5vZGUgc2hvdWxkIGJlIGZpeGVkIHRvXG4gICAqL1xuICBzZXRQb3NpdGlvbihub2RlLCBwb3NpdGlvbiwgbGV2ZWwgPSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmZha2VfdXNlKG5vZGUsIHBvc2l0aW9uLCBsZXZlbCk7XG4gICAgdGhpcy5hYnN0cmFjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd2lkdGggb2YgYSB0cmVlLlxuICAgKlxuICAgKiBBIGB0cmVlYCBoZXJlIGlzIGEgc3Vic2V0IG9mIG5vZGVzIHdpdGhpbiB0aGUgbmV0d29yayB3aGljaCBhcmUgbm90IGNvbm5lY3RlZCB0byBvdGhlciBub2RlcyxcbiAgICogb25seSBhbW9uZyB0aGVtc2VsdmVzLiBJbiBlc3NlbmNlLCBpdCBpcyBhIHN1Yi1uZXR3b3JrLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG51bWJlciBvZiBhIHRyZWVcbiAgICogQHJldHVybnMge251bWJlcn0gdGhlIHdpZHRoIG9mIGEgdHJlZSBpbiB0aGUgdmlldyBjb29yZGluYXRlc1xuICAgKi9cbiAgZ2V0VHJlZVNpemUoaW5kZXgpIHtcbiAgICB0aGlzLmZha2VfdXNlKGluZGV4KTtcbiAgICByZXR1cm4gdGhpcy5hYnN0cmFjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgYXJyYXkgb2Ygbm9kZXMgb24gdGhlIHVuZml4ZWQgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIE5vdGU6KiogY2hyb21lIGhhcyBub24tc3RhYmxlIHNvcnRpbmcgaW1wbGVtZW50YXRpb24sIHdoaWNoXG4gICAqIGhhcyBhIHRlbmRlbmN5IHRvIGNoYW5nZSB0aGUgb3JkZXIgb2YgdGhlIGFycmF5IGl0ZW1zLFxuICAgKiBldmVuIGlmIHRoZSBjdXN0b20gc29ydCBmdW5jdGlvbiByZXR1cm5zIDAuXG4gICAqXG4gICAqIEZvciB0aGlzIHJlYXNvbiwgYW4gZXh0ZXJuYWwgc29ydCBpbXBsZW1lbnRhdGlvbiBpcyB1c2VkLFxuICAgKiB3aGljaCBoYXMgdGhlIGFkZGVkIGJlbmVmaXQgb2YgYmVpbmcgZmFzdGVyIHRoYW4gdGhlIHN0YW5kYXJkXG4gICAqIHBsYXRmb3JtcyBpbXBsZW1lbnRhdGlvbi4gVGhpcyBoYXMgYmVlbiB2ZXJpZmllZCBvbiBgbm9kZS5qc2AsXG4gICAqIGBmaXJlZm94YCBhbmQgYGNocm9tZWAgKGFsbCBsaW51eCkuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBub2RlQXJyYXkgYXJyYXkgb2Ygbm9kZXMgdG8gc29ydFxuICAgKi9cbiAgc29ydChub2RlQXJyYXkpIHtcbiAgICB0aGlzLmZha2VfdXNlKG5vZGVBcnJheSk7XG4gICAgdGhpcy5hYnN0cmFjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiB0aGUgZml4ZWQgY29vcmRpbmF0ZSBvZiB0aGUgbm9kZSB0byB0aGUgZ2l2ZW4gbGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlIFRoZSBub2RlIHRvIGFkanVzdFxuICAgKiBAcGFyYW0ge251bWJlcn0gbGV2ZWwgVGhlIGxldmVsIHRvIGZpeCB0b1xuICAgKi9cbiAgZml4KG5vZGUsIGxldmVsKSB7XG4gICAgdGhpcy5mYWtlX3VzZShub2RlLCBsZXZlbCk7XG4gICAgdGhpcy5hYnN0cmFjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBvZmZzZXQgdG8gdGhlIHVuZml4ZWQgY29vcmRpbmF0ZSBvZiB0aGUgZ2l2ZW4gbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlSWR9IG5vZGVJZCBJZCBvZiB0aGUgbm9kZSB0byBhZGp1c3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpZmYgT2Zmc2V0IHRvIGFkZCB0byB0aGUgdW5maXhlZCBjb29yZGluYXRlXG4gICAqL1xuICBzaGlmdChub2RlSWQsIGRpZmYpIHtcbiAgICB0aGlzLmZha2VfdXNlKG5vZGVJZCwgZGlmZik7XG4gICAgdGhpcy5hYnN0cmFjdCgpO1xuICB9XG59XG5cbi8qKlxuICogVmVydGljYWwgU3RyYXRlZ3lcbiAqXG4gKiBDb29yZGluYXRlIGB5YCBpcyBmaXhlZCBvbiBsZXZlbHMsIGNvb3JkaW5hdGUgYHhgIGlzIHVuZml4ZWQuXG4gKlxuICogQGF1Z21lbnRzIERpcmVjdGlvbkludGVyZmFjZVxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVmVydGljYWxTdHJhdGVneSBleHRlbmRzIERpcmVjdGlvbkludGVyZmFjZSB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbGF5b3V0IHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IExheW91dEVuZ2luZSBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGxheW91dCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgY3VydmVUeXBlKCkge1xuICAgIHJldHVybiBcImhvcml6b250YWxcIjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRQb3NpdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUueDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzZXRQb3NpdGlvbihub2RlLCBwb3NpdGlvbiwgbGV2ZWwgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAobGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sYXlvdXQuaGllcmFyY2hpY2FsLmFkZFRvT3JkZXJpbmcobm9kZSwgbGV2ZWwpO1xuICAgIH1cbiAgICBub2RlLnggPSBwb3NpdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRUcmVlU2l6ZShpbmRleCkge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMubGF5b3V0LmhpZXJhcmNoaWNhbC5nZXRUcmVlU2l6ZShcbiAgICAgIHRoaXMubGF5b3V0LmJvZHkubm9kZXMsXG4gICAgICBpbmRleFxuICAgICk7XG4gICAgcmV0dXJuIHsgbWluOiByZXMubWluX3gsIG1heDogcmVzLm1heF94IH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc29ydChub2RlQXJyYXkpIHtcbiAgICBub2RlQXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEueCAtIGIueDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBmaXgobm9kZSwgbGV2ZWwpIHtcbiAgICBub2RlLnkgPSB0aGlzLmxheW91dC5vcHRpb25zLmhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gKiBsZXZlbDtcbiAgICBub2RlLm9wdGlvbnMuZml4ZWQueSA9IHRydWU7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc2hpZnQobm9kZUlkLCBkaWZmKSB7XG4gICAgdGhpcy5sYXlvdXQuYm9keS5ub2Rlc1tub2RlSWRdLnggKz0gZGlmZjtcbiAgfVxufVxuXG4vKipcbiAqIEhvcml6b250YWwgU3RyYXRlZ3lcbiAqXG4gKiBDb29yZGluYXRlIGB4YCBpcyBmaXhlZCBvbiBsZXZlbHMsIGNvb3JkaW5hdGUgYHlgIGlzIHVuZml4ZWQuXG4gKlxuICogQGF1Z21lbnRzIERpcmVjdGlvbkludGVyZmFjZVxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgSG9yaXpvbnRhbFN0cmF0ZWd5IGV4dGVuZHMgRGlyZWN0aW9uSW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBsYXlvdXQgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgTGF5b3V0RW5naW5lIGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IobGF5b3V0KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBjdXJ2ZVR5cGUoKSB7XG4gICAgcmV0dXJuIFwidmVydGljYWxcIjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRQb3NpdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUueTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzZXRQb3NpdGlvbihub2RlLCBwb3NpdGlvbiwgbGV2ZWwgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAobGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sYXlvdXQuaGllcmFyY2hpY2FsLmFkZFRvT3JkZXJpbmcobm9kZSwgbGV2ZWwpO1xuICAgIH1cbiAgICBub2RlLnkgPSBwb3NpdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRUcmVlU2l6ZShpbmRleCkge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMubGF5b3V0LmhpZXJhcmNoaWNhbC5nZXRUcmVlU2l6ZShcbiAgICAgIHRoaXMubGF5b3V0LmJvZHkubm9kZXMsXG4gICAgICBpbmRleFxuICAgICk7XG4gICAgcmV0dXJuIHsgbWluOiByZXMubWluX3ksIG1heDogcmVzLm1heF95IH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc29ydChub2RlQXJyYXkpIHtcbiAgICBub2RlQXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEueSAtIGIueTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBmaXgobm9kZSwgbGV2ZWwpIHtcbiAgICBub2RlLnggPSB0aGlzLmxheW91dC5vcHRpb25zLmhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gKiBsZXZlbDtcbiAgICBub2RlLm9wdGlvbnMuZml4ZWQueCA9IHRydWU7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc2hpZnQobm9kZUlkLCBkaWZmKSB7XG4gICAgdGhpcy5sYXlvdXQuYm9keS5ub2Rlc1tub2RlSWRdLnkgKz0gZGlmZjtcbiAgfVxufVxuXG5leHBvcnQgeyBIb3Jpem9udGFsU3RyYXRlZ3ksIFZlcnRpY2FsU3RyYXRlZ3kgfTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZXZlcnkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZXZlcnk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZXZlcnknKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfSwge1xuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5ldmVyeScpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmV2ZXJ5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2V2ZXJ5Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmV2ZXJ5O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5ldmVyeSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9ldmVyeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJ0eXBlIExldmVscyA9IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj47XG50eXBlIElkID0gc3RyaW5nIHwgbnVtYmVyO1xuaW50ZXJmYWNlIEVkZ2Uge1xuICBjb25uZWN0ZWQ6IGJvb2xlYW47XG4gIGZyb206IE5vZGU7XG4gIGZyb21JZDogSWQ7XG4gIHRvOiBOb2RlO1xuICB0b0lkOiBJZDtcbn1cbmludGVyZmFjZSBOb2RlIHtcbiAgaWQ6IElkO1xuICBlZGdlczogRWRnZVtdO1xufVxuXG4vKipcbiAqIFRyeSB0byBhc3NpZ24gbGV2ZWxzIHRvIG5vZGVzIGFjY29yZGluZyB0byB0aGVpciBwb3NpdGlvbnMgaW4gdGhlIGN5Y2xpYyDigJxoaWVyYXJjaHnigJ0uXG4gKlxuICogQHBhcmFtIG5vZGVzIC0gVmlzaWJsZSBub2RlcyBvZiB0aGUgZ3JhcGguXG4gKiBAcGFyYW0gbGV2ZWxzIC0gSWYgcHJlc2VudCBsZXZlbHMgd2lsbCBiZSBhZGRlZCB0byBpdCwgaWYgbm90IGEgbmV3IG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBAcmV0dXJucyBQb3B1bGF0ZWQgbm9kZSBsZXZlbHMuXG4gKi9cbmZ1bmN0aW9uIGZpbGxMZXZlbHNCeURpcmVjdGlvbkN5Y2xpYyhcbiAgbm9kZXM6IE1hcDxJZCwgTm9kZT4sXG4gIGxldmVsczogTGV2ZWxzXG4pOiBMZXZlbHMge1xuICBjb25zdCBlZGdlcyA9IG5ldyBTZXQ8RWRnZT4oKTtcbiAgbm9kZXMuZm9yRWFjaCgobm9kZSk6IHZvaWQgPT4ge1xuICAgIG5vZGUuZWRnZXMuZm9yRWFjaCgoZWRnZSk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGVkZ2UuY29ubmVjdGVkKSB7XG4gICAgICAgIGVkZ2VzLmFkZChlZGdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZWRnZXMuZm9yRWFjaCgoZWRnZSk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGZyb21JZCA9IGVkZ2UuZnJvbS5pZDtcbiAgICBjb25zdCB0b0lkID0gZWRnZS50by5pZDtcblxuICAgIGlmIChsZXZlbHNbZnJvbUlkXSA9PSBudWxsKSB7XG4gICAgICBsZXZlbHNbZnJvbUlkXSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGxldmVsc1t0b0lkXSA9PSBudWxsIHx8IGxldmVsc1tmcm9tSWRdID49IGxldmVsc1t0b0lkXSkge1xuICAgICAgbGV2ZWxzW3RvSWRdID0gbGV2ZWxzW2Zyb21JZF0gKyAxO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGxldmVscztcbn1cblxuLyoqXG4gKiBBc3NpZ24gbGV2ZWxzIHRvIG5vZGVzIGFjY29yZGluZyB0byB0aGVpciBwb3NpdGlvbnMgaW4gdGhlIGhpZXJhcmNoeS4gTGVhdmVzIHdpbGwgYmUgbGluZWQgdXAgYXQgdGhlIGJvdHRvbSBhbmQgYWxsIG90aGVyIG5vZGVzIGFzIGNsb3NlIHRvIHRoZWlyIGNoaWxkcmVuIGFzIHBvc3NpYmxlLlxuICpcbiAqIEBwYXJhbSBub2RlcyAtIFZpc2libGUgbm9kZXMgb2YgdGhlIGdyYXBoLlxuICogQHJldHVybnMgUG9wdWxhdGVkIG5vZGUgbGV2ZWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsbExldmVsc0J5RGlyZWN0aW9uTGVhdmVzKG5vZGVzOiBNYXA8SWQsIE5vZGU+KTogTGV2ZWxzIHtcbiAgcmV0dXJuIGZpbGxMZXZlbHNCeURpcmVjdGlvbihcbiAgICAvLyBQaWNrIG9ubHkgbGVhdmVzIChub2RlcyB3aXRob3V0IGNoaWxkcmVuKS5cbiAgICAobm9kZSk6IGJvb2xlYW4gPT5cbiAgICAgIG5vZGUuZWRnZXNcbiAgICAgICAgLy8gVGFrZSBvbmx5IHZpc2libGUgbm9kZXMgaW50byBhY2NvdW50LlxuICAgICAgICAuZmlsdGVyKChlZGdlKTogYm9vbGVhbiA9PiBub2Rlcy5oYXMoZWRnZS50b0lkKSlcbiAgICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgZWRnZXMgbGVhZCB0byB0aGlzIG5vZGUgKGxlYWYpLlxuICAgICAgICAuZXZlcnkoKGVkZ2UpOiBib29sZWFuID0+IGVkZ2UudG8gPT09IG5vZGUpLFxuICAgIC8vIFVzZSB0aGUgbG93ZXN0IGxldmVsLlxuICAgIChuZXdMZXZlbCwgb2xkTGV2ZWwpOiBib29sZWFuID0+IG9sZExldmVsID4gbmV3TGV2ZWwsXG4gICAgLy8gR28gYWdhaW5zdCB0aGUgZGlyZWN0aW9uIG9mIHRoZSBlZGdlcy5cbiAgICBcImZyb21cIixcbiAgICBub2Rlc1xuICApO1xufVxuXG4vKipcbiAqIEFzc2lnbiBsZXZlbHMgdG8gbm9kZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgaGllcmFyY2h5LiBSb290cyB3aWxsIGJlIGxpbmVkIHVwIGF0IHRoZSB0b3AgYW5kIGFsbCBub2RlcyBhcyBjbG9zZSB0byB0aGVpciBwYXJlbnRzIGFzIHBvc3NpYmxlLlxuICpcbiAqIEBwYXJhbSBub2RlcyAtIFZpc2libGUgbm9kZXMgb2YgdGhlIGdyYXBoLlxuICogQHJldHVybnMgUG9wdWxhdGVkIG5vZGUgbGV2ZWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsbExldmVsc0J5RGlyZWN0aW9uUm9vdHMobm9kZXM6IE1hcDxJZCwgTm9kZT4pOiBMZXZlbHMge1xuICByZXR1cm4gZmlsbExldmVsc0J5RGlyZWN0aW9uKFxuICAgIC8vIFBpY2sgb25seSByb290cyAobm9kZXMgd2l0aG91dCBwYXJlbnRzKS5cbiAgICAobm9kZSk6IGJvb2xlYW4gPT5cbiAgICAgIG5vZGUuZWRnZXNcbiAgICAgICAgLy8gVGFrZSBvbmx5IHZpc2libGUgbm9kZXMgaW50byBhY2NvdW50LlxuICAgICAgICAuZmlsdGVyKChlZGdlKTogYm9vbGVhbiA9PiBub2Rlcy5oYXMoZWRnZS50b0lkKSlcbiAgICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgZWRnZXMgbGVhZCBmcm9tIHRoaXMgbm9kZSAocm9vdCkuXG4gICAgICAgIC5ldmVyeSgoZWRnZSk6IGJvb2xlYW4gPT4gZWRnZS5mcm9tID09PSBub2RlKSxcbiAgICAvLyBVc2UgdGhlIGhpZ2hlc3QgbGV2ZWwuXG4gICAgKG5ld0xldmVsLCBvbGRMZXZlbCk6IGJvb2xlYW4gPT4gb2xkTGV2ZWwgPCBuZXdMZXZlbCxcbiAgICAvLyBHbyBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBlZGdlcy5cbiAgICBcInRvXCIsXG4gICAgbm9kZXNcbiAgKTtcbn1cblxuLyoqXG4gKiBBc3NpZ24gbGV2ZWxzIHRvIG5vZGVzIGFjY29yZGluZyB0byB0aGVpciBwb3NpdGlvbnMgaW4gdGhlIGhpZXJhcmNoeS5cbiAqXG4gKiBAcGFyYW0gaXNFbnRyeU5vZGUgLSBDaGVja3MgYW5kIHJldHVybiB0cnVlIGlmIHRoZSBncmFwaCBzaG91bGQgYmUgdHJhdmVyc2VkIGZyb20gdGhpcyBub2RlLlxuICogQHBhcmFtIHNob3VsZExldmVsQmVSZXBsYWNlZCAtIENoZWNrcyBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSBsZXZlbCBvZiBnaXZlbiBub2RlIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRoZSBuZXcgdmFsdWUuXG4gKiBAcGFyYW0gZGlyZWN0aW9uIC0gV2hldGVyIHRoZSBncmFwaCBzaG91bGQgYmUgdHJhdmVyc2VkIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGVkZ2VzIGBcInRvXCJgIG9yIGluIHRoZSBvdGhlciB3YXkgYFwiZnJvbVwiYC5cbiAqIEBwYXJhbSBub2RlcyAtIFZpc2libGUgbm9kZXMgb2YgdGhlIGdyYXBoLlxuICogQHJldHVybnMgUG9wdWxhdGVkIG5vZGUgbGV2ZWxzLlxuICovXG5mdW5jdGlvbiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb24oXG4gIGlzRW50cnlOb2RlOiAobm9kZTogTm9kZSkgPT4gYm9vbGVhbixcbiAgc2hvdWxkTGV2ZWxCZVJlcGxhY2VkOiAobmV3TGV2ZWw6IG51bWJlciwgb2xkTGV2ZWw6IG51bWJlcikgPT4gYm9vbGVhbixcbiAgZGlyZWN0aW9uOiBcInRvXCIgfCBcImZyb21cIixcbiAgbm9kZXM6IE1hcDxJZCwgTm9kZT5cbik6IExldmVscyB7XG4gIGNvbnN0IGxldmVscyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy8gSWYgYWN5Y2xpYywgdGhlIGdyYXBoIGNhbiBiZSB3YWxrZWQgdGhyb3VnaCB3aXRoIChtb3N0IGxpa2VseSB3YXkpIGZld2VyXG4gIC8vIHN0ZXBzIHRoYW4gdGhlIG51bWJlciBiZWxsb3cuIFRoZSBleGFjdCB2YWx1ZSBpc24ndCB0b28gaW1wb3J0YW50IGFzIGxvbmdcbiAgLy8gYXMgaXQncyBxdWljayB0byBjb21wdXRlIChkb2Vzbid0IGltcGFjdCBhY3ljbGljIGdyYXBocyB0b28gbXVjaCksIGlzXG4gIC8vIGhpZ2hlciB0aGFuIHRoZSBudW1iZXIgb2Ygc3RlcHMgYWN0dWFsbHkgbmVlZGVkIChkb2Vzbid0IGN1dCBvZmYgYmVmb3JlXG4gIC8vIGFjeWNsaWMgZ3JhcGggaXMgd2Fsa2VkIHRocm91Z2gpIGFuZCBwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyAoY3V0cyBvZmYgZm9yXG4gIC8vIGN5Y2xpYyBncmFwaHMpLlxuICBjb25zdCBsaW1pdCA9IFsuLi5ub2Rlcy52YWx1ZXMoKV0ucmVkdWNlPG51bWJlcj4oXG4gICAgKGFjYywgbm9kZSk6IG51bWJlciA9PiBhY2MgKyAxICsgbm9kZS5lZGdlcy5sZW5ndGgsXG4gICAgMFxuICApO1xuXG4gIGNvbnN0IGVkZ2VJZFByb3A6IFwiZnJvbUlkXCIgfCBcInRvSWRcIiA9IChkaXJlY3Rpb24gKyBcIklkXCIpIGFzIFwiZnJvbUlkXCIgfCBcInRvSWRcIjtcbiAgY29uc3QgbmV3TGV2ZWxEaWZmID0gZGlyZWN0aW9uID09PSBcInRvXCIgPyAxIDogLTE7XG5cbiAgZm9yIChjb25zdCBbZW50cnlOb2RlSWQsIGVudHJ5Tm9kZV0gb2Ygbm9kZXMpIHtcbiAgICBpZiAoXG4gICAgICAvLyBTa2lwIGlmIHRoZSBub2RlIGlzIG5vdCB2aXNpYmxlLlxuICAgICAgIW5vZGVzLmhhcyhlbnRyeU5vZGVJZCkgfHxcbiAgICAgIC8vIFNraXAgaWYgdGhlIG5vZGUgaXMgbm90IGFuIGVudHJ5IG5vZGUuXG4gICAgICAhaXNFbnRyeU5vZGUoZW50cnlOb2RlKVxuICAgICkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gTGluZSB1cCBhbGwgdGhlIGVudHJ5IG5vZGVzIG9uIGxldmVsIDAuXG4gICAgbGV2ZWxzW2VudHJ5Tm9kZUlkXSA9IDA7XG5cbiAgICBjb25zdCBzdGFjazogTm9kZVtdID0gW2VudHJ5Tm9kZV07XG4gICAgbGV0IGRvbmUgPSAwO1xuICAgIGxldCBub2RlOiBOb2RlIHwgdW5kZWZpbmVkO1xuICAgIHdoaWxlICgobm9kZSA9IHN0YWNrLnBvcCgpKSkge1xuICAgICAgaWYgKCFub2Rlcy5oYXMoZW50cnlOb2RlSWQpKSB7XG4gICAgICAgIC8vIFNraXAgaWYgdGhlIG5vZGUgaXMgbm90IHZpc2libGUuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdMZXZlbCA9IGxldmVsc1tub2RlLmlkXSArIG5ld0xldmVsRGlmZjtcblxuICAgICAgbm9kZS5lZGdlc1xuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChlZGdlKTogYm9vbGVhbiA9PlxuICAgICAgICAgICAgLy8gSWdub3JlIGRpc2Nvbm5lY3RlZCBlZGdlcy5cbiAgICAgICAgICAgIGVkZ2UuY29ubmVjdGVkICYmXG4gICAgICAgICAgICAvLyBJZ25vcmUgY2lyY3VsYXIgZWRnZXMuXG4gICAgICAgICAgICBlZGdlLnRvICE9PSBlZGdlLmZyb20gJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBlZGdlcyBsZWFkaW5nIHRvIHRoZSBub2RlIHRoYXQncyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuICAgICAgICAgICAgZWRnZVtkaXJlY3Rpb25dICE9PSBub2RlICYmXG4gICAgICAgICAgICAvLyBJZ25vcmUgZWRnZXMgY29ubmVjdGluZyB0byBhbiBpbnZpc2libGUgbm9kZS5cbiAgICAgICAgICAgIG5vZGVzLmhhcyhlZGdlLnRvSWQpICYmXG4gICAgICAgICAgICAvLyBJZ25vcmUgZWRnZXMgY29ubmVjdGluZyBmcm9tIGFuIGludmlzaWJsZSBub2RlLlxuICAgICAgICAgICAgbm9kZXMuaGFzKGVkZ2UuZnJvbUlkKVxuICAgICAgICApXG4gICAgICAgIC5mb3JFYWNoKChlZGdlKTogdm9pZCA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZUlkID0gZWRnZVtlZGdlSWRQcm9wXTtcbiAgICAgICAgICBjb25zdCBvbGRMZXZlbCA9IGxldmVsc1t0YXJnZXROb2RlSWRdO1xuXG4gICAgICAgICAgaWYgKG9sZExldmVsID09IG51bGwgfHwgc2hvdWxkTGV2ZWxCZVJlcGxhY2VkKG5ld0xldmVsLCBvbGRMZXZlbCkpIHtcbiAgICAgICAgICAgIGxldmVsc1t0YXJnZXROb2RlSWRdID0gbmV3TGV2ZWw7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGVkZ2VbZGlyZWN0aW9uXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgaWYgKGRvbmUgPiBsaW1pdCkge1xuICAgICAgICAvLyBUaGlzIHdvdWxkIHJ1biBmb3JldmVyIG9uIGEgY3ljbGljIGdyYXBoLlxuICAgICAgICByZXR1cm4gZmlsbExldmVsc0J5RGlyZWN0aW9uQ3ljbGljKG5vZGVzLCBsZXZlbHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKytkb25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZXZlbHM7XG59XG4iLCAiLyoqXG4gKiBUaGVyZSdzIGEgbWl4LXVwIHdpdGggdGVybXMgaW4gdGhlIGNvZGUuIEZvbGxvd2luZyBhcmUgdGhlIGZvcm1hbCBkZWZpbml0aW9uczpcbiAqXG4gKiAgIHRyZWUgICAtIGEgc3RyaWN0IGhpZXJhcmNoaWNhbCBuZXR3b3JrLCBpLmUuIGV2ZXJ5IG5vZGUgaGFzIGF0IG1vc3Qgb25lIHBhcmVudFxuICogICBmb3Jlc3QgLSBhIGNvbGxlY3Rpb24gb2YgdHJlZXMuIFRoZXNlIGRpc3RpbmN0IHRyZWVzIGFyZSB0aHVzIG5vdCBjb25uZWN0ZWQuXG4gKlxuICogU286XG4gKiAtIGluIGEgbmV0d29yayB0aGF0IGlzIG5vdCBhIHRyZWUsIHRoZXJlIGV4aXN0IG5vZGVzIHdpdGggbXVsdGlwbGUgcGFyZW50cy5cbiAqIC0gYSBuZXR3b3JrIGNvbnNpc3Rpbmcgb2YgdW5jb25uZWN0ZWQgc3ViLW5ldHdvcmtzLCBvZiB3aGljaCBhdCBsZWFzdCBvbmVcbiAqICAgaXMgbm90IGEgdHJlZSwgaXMgbm90IGEgZm9yZXN0LlxuICpcbiAqIEluIHRoZSBjb2RlLCB0aGUgZGVmaW5pdGlvbnMgYXJlOlxuICpcbiAqICAgdHJlZSAgIC0gYW55IGRpc2Nvbm5lY3RlZCBzdWItbmV0d29yaywgc3RyaWN0IGhpZXJhcmNoaWNhbCBvciBub3QuXG4gKiAgIGZvcmVzdCAtIGEgYnVuY2ggb2YgdGhlc2Ugc3ViLW5ldHdvcmtzXG4gKlxuICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0cmVlIGFuZCBub3QtdHJlZSBpcyBpbXBvcnRhbnQgaW4gdGhlIGNvZGUsIG5vdGFibHkgd2l0aGluXG4gKiB0byB0aGUgYmxvY2stc2hpZnRpbmcgYWxnb3JpdGhtLiBUaGUgYWxnb3JpdGhtIGFzc3VtZXMgZm9ybWFsIHRyZWVzIGFuZCBmYWlsc1xuICogZm9yIG5vdC10cmVlcywgb2Z0ZW4gaW4gYSBzcGVjdGFjdWxhciBtYW5uZXIgKHNlYXJjaCBmb3IgJ2V4cGxvZGluZyBuZXR3b3JrJyBpbiB0aGUgaXNzdWVzKS5cbiAqXG4gKiBJbiBvcmRlciB0byBkaXN0aW5ndWlzaCB0aGUgZGVmaW5pdGlvbnMgaW4gdGhlIGZvbGxvd2luZyBjb2RlLCB0aGUgYWRqZWN0aXZlICdmb3JtYWwnIGlzXG4gKiB1c2VkLiBJZiAnZm9ybWFsJyBpcyBhYnNlbnQsIHlvdSBtdXN0IGFzc3VtZSB0aGUgbm9uLWZvcm1hbCBkZWZpbml0aW9uLlxuICpcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIE5PVEVTXG4gKiA9PT09PVxuICpcbiAqIEEgaGllcmFyY2hpY2FsIGxheW91dCBpcyBhIGRpZmZlcmVudCB0aGluZyBmcm9tIGEgaGllcmFyY2hpY2FsIG5ldHdvcmsuXG4gKiBUaGUgbGF5b3V0IGlzIGEgd2F5IHRvIGFycmFuZ2UgdGhlIG5vZGVzIGluIHRoZSB2aWV3OyB0aGlzIGNhbiBiZSBkb25lXG4gKiBvbiBub24taGllcmFyY2hpY2FsIG5ldHdvcmtzIGFzIHdlbGwuIFRoZSBjb252ZXJzZSBpcyBhbHNvIHBvc3NpYmxlLlxuICovXG5cInVzZSBzdHJpY3RcIjtcbmltcG9ydCB7XG4gIEFsZWEsXG4gIGRlZXBFeHRlbmQsXG4gIGZvckVhY2gsXG4gIG1lcmdlT3B0aW9ucyxcbiAgc2VsZWN0aXZlRGVlcEV4dGVuZCxcbn0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IE5ldHdvcmtVdGlsIGZyb20gXCIuLi9OZXR3b3JrVXRpbFwiO1xuaW1wb3J0IHtcbiAgSG9yaXpvbnRhbFN0cmF0ZWd5LFxuICBWZXJ0aWNhbFN0cmF0ZWd5LFxufSBmcm9tIFwiLi9jb21wb25lbnRzL0RpcmVjdGlvblN0cmF0ZWd5LmpzXCI7XG5pbXBvcnQge1xuICBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25MZWF2ZXMsXG4gIGZpbGxMZXZlbHNCeURpcmVjdGlvblJvb3RzLFxufSBmcm9tIFwiLi9sYXlvdXQtZW5naW5lXCI7XG5cbi8qKlxuICogQ29udGFpbmVyIGZvciBkZXJpdmVkIGRhdGEgb24gY3VycmVudCBuZXR3b3JrLCByZWxhdGluZyB0byBoaWVyYXJjaHkuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgSGllcmFyY2hpY2FsU3RhdHVzIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2hpbGRyZW5SZWZlcmVuY2UgPSB7fTsgLy8gY2hpbGQgaWQncyBwZXIgbm9kZSBpZFxuICAgIHRoaXMucGFyZW50UmVmZXJlbmNlID0ge307IC8vIHBhcmVudCBpZCdzIHBlciBub2RlIGlkXG4gICAgdGhpcy50cmVlcyA9IHt9OyAvLyB0cmVlIGlkIHBlciBub2RlIGlkOyBpLmUuIHRvIHdoaWNoIHRyZWUgZG9lcyBnaXZlbiBub2RlIGlkIGJlbG9uZ1xuXG4gICAgdGhpcy5kaXN0cmlidXRpb25PcmRlcmluZyA9IHt9OyAvLyBUaGUgbm9kZXMgcGVyIGxldmVsLCBpbiB0aGUgZGlzcGxheSBvcmRlclxuICAgIHRoaXMubGV2ZWxzID0ge307IC8vIGhpZXJhcmNoeSBsZXZlbCBwZXIgbm9kZSBpZFxuICAgIHRoaXMuZGlzdHJpYnV0aW9uSW5kZXggPSB7fTsgLy8gVGhlIHBvc2l0aW9uIG9mIHRoZSBub2RlIGluIHRoZSBsZXZlbCBzb3J0aW5nIG9yZGVyLCBwZXIgbm9kZSBpZC5cblxuICAgIHRoaXMuaXNUcmVlID0gZmFsc2U7IC8vIFRydWUgaWYgY3VycmVudCBuZXR3b3JrIGlzIGEgZm9ybWFsIHRyZWVcbiAgICB0aGlzLnRyZWVJbmRleCA9IC0xOyAvLyBIaWdoZXN0IHRyZWUgaWQgaW4gY3VycmVudCBuZXR3b3JrLlxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgcmVsYXRpb24gYmV0d2VlbiBnaXZlbiBub2RlcyB0byB0aGUgY3VycmVudCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBwYXJlbnROb2RlSWRcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBjaGlsZE5vZGVJZFxuICAgKi9cbiAgYWRkUmVsYXRpb24ocGFyZW50Tm9kZUlkLCBjaGlsZE5vZGVJZCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuUmVmZXJlbmNlW3BhcmVudE5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jaGlsZHJlblJlZmVyZW5jZVtwYXJlbnROb2RlSWRdID0gW107XG4gICAgfVxuICAgIHRoaXMuY2hpbGRyZW5SZWZlcmVuY2VbcGFyZW50Tm9kZUlkXS5wdXNoKGNoaWxkTm9kZUlkKTtcblxuICAgIGlmICh0aGlzLnBhcmVudFJlZmVyZW5jZVtjaGlsZE5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wYXJlbnRSZWZlcmVuY2VbY2hpbGROb2RlSWRdID0gW107XG4gICAgfVxuICAgIHRoaXMucGFyZW50UmVmZXJlbmNlW2NoaWxkTm9kZUlkXS5wdXNoKHBhcmVudE5vZGVJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgZm9yIGEgZm9ybWFsIHRyZWUgb3IgZm9ybWFsIGZvcmVzdC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgY2FzZSBpZiBldmVyeSBub2RlIGhhcyBhdCBtb3N0IG9uZSBwYXJlbnQuXG4gICAqXG4gICAqIFByZTogcGFyZW50UmVmZXJlbmNlIGluaXQnZWQgcHJvcGVybHkgZm9yIGN1cnJlbnQgbmV0d29ya1xuICAgKi9cbiAgY2hlY2tJZlRyZWUoKSB7XG4gICAgZm9yIChjb25zdCBpIGluIHRoaXMucGFyZW50UmVmZXJlbmNlKSB7XG4gICAgICBpZiAodGhpcy5wYXJlbnRSZWZlcmVuY2VbaV0ubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLmlzVHJlZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pc1RyZWUgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHNlcGFyYXRlIHRyZWVzIGluIHRoZSBjdXJyZW50IG5ldHdvcmsuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBudW1UcmVlcygpIHtcbiAgICByZXR1cm4gdGhpcy50cmVlSW5kZXggKyAxOyAvLyBUaGlzIGFzc3VtZXMgdGhlIGluZGV4ZXMgYXJlIGFzc2lnbmVkIGNvbnNlY2l0aXZlbHlcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSB0cmVlIGlkIHRvIGEgbm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB0cmVlSWRcbiAgICovXG4gIHNldFRyZWVJbmRleChub2RlLCB0cmVlSWQpIHtcbiAgICBpZiAodHJlZUlkID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gRG9uJ3QgYm90aGVyXG5cbiAgICBpZiAodGhpcy50cmVlc1tub2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRyZWVzW25vZGUuaWRdID0gdHJlZUlkO1xuICAgICAgdGhpcy50cmVlSW5kZXggPSBNYXRoLm1heCh0cmVlSWQsIHRoaXMudHJlZUluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIGxldmVsIGZvciBnaXZlbiBpZCBpcyBkZWZpbmVkLlxuICAgKlxuICAgKiBTZXRzIGxldmVsIHRvIHplcm8gZm9yIGdpdmVuIG5vZGUgaWQgaWYgbm90IGFscmVhZHkgcHJlc2VudFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKi9cbiAgZW5zdXJlTGV2ZWwobm9kZUlkKSB7XG4gICAgaWYgKHRoaXMubGV2ZWxzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sZXZlbHNbbm9kZUlkXSA9IDA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgbWF4aW11bSBsZXZlbCBvZiBhIGJyYW5jaC5cbiAgICpcbiAgICogVE9ETzogTmV2ZXIgZW50ZXJlZDsgZmluZCBhIHRlc3QgY2FzZSB0byB0ZXN0IHRoaXMhXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRNYXhMZXZlbChub2RlSWQpIHtcbiAgICBjb25zdCBhY2N1bXVsYXRvciA9IHt9O1xuXG4gICAgY29uc3QgX2dldE1heExldmVsID0gKG5vZGVJZCkgPT4ge1xuICAgICAgaWYgKGFjY3VtdWxhdG9yW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3Jbbm9kZUlkXTtcbiAgICAgIH1cbiAgICAgIGxldCBsZXZlbCA9IHRoaXMubGV2ZWxzW25vZGVJZF07XG4gICAgICBpZiAodGhpcy5jaGlsZHJlblJlZmVyZW5jZVtub2RlSWRdKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlblJlZmVyZW5jZVtub2RlSWRdO1xuICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldmVsID0gTWF0aC5tYXgobGV2ZWwsIF9nZXRNYXhMZXZlbChjaGlsZHJlbltpXSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWNjdW11bGF0b3Jbbm9kZUlkXSA9IGxldmVsO1xuICAgICAgcmV0dXJuIGxldmVsO1xuICAgIH07XG5cbiAgICByZXR1cm4gX2dldE1heExldmVsKG5vZGVJZCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlQVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVCXG4gICAqL1xuICBsZXZlbERvd25zdHJlYW0obm9kZUEsIG5vZGVCKSB7XG4gICAgaWYgKHRoaXMubGV2ZWxzW25vZGVCLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzZXQgaW5pdGlhbCBsZXZlbFxuICAgICAgaWYgKHRoaXMubGV2ZWxzW25vZGVBLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMubGV2ZWxzW25vZGVBLmlkXSA9IDA7XG4gICAgICB9XG4gICAgICAvLyBzZXQgbGV2ZWxcbiAgICAgIHRoaXMubGV2ZWxzW25vZGVCLmlkXSA9IHRoaXMubGV2ZWxzW25vZGVBLmlkXSArIDE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNtYWxsIHV0aWwgbWV0aG9kIHRvIHNldCB0aGUgbWluaW11bSBsZXZlbHMgb2YgdGhlIG5vZGVzIHRvIHplcm8uXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBub2Rlc1xuICAgKi9cbiAgc2V0TWluTGV2ZWxUb1plcm8obm9kZXMpIHtcbiAgICBsZXQgbWluTGV2ZWwgPSAxZTk7XG4gICAgLy8gZ2V0IHRoZSBtaW5pbXVtIGxldmVsXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gbm9kZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgaWYgKHRoaXMubGV2ZWxzW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG1pbkxldmVsID0gTWF0aC5taW4odGhpcy5sZXZlbHNbbm9kZUlkXSwgbWluTGV2ZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc3VidHJhY3QgdGhlIG1pbmltdW0gZnJvbSB0aGUgc2V0IHNvIHdlIGhhdmUgYSByYW5nZSBzdGFydGluZyBmcm9tIDBcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5sZXZlbHNbbm9kZUlkXSAtPSBtaW5MZXZlbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbiBhbmQgbWF4IHh5LWNvb3JkaW5hdGVzIG9mIGEgZ2l2ZW4gdHJlZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gbm9kZXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gICAqIEByZXR1cm5zIHt7bWluX3g6IG51bWJlciwgbWF4X3g6IG51bWJlciwgbWluX3k6IG51bWJlciwgbWF4X3k6IG51bWJlcn19XG4gICAqL1xuICBnZXRUcmVlU2l6ZShub2RlcywgaW5kZXgpIHtcbiAgICBsZXQgbWluX3ggPSAxZTk7XG4gICAgbGV0IG1heF94ID0gLTFlOTtcbiAgICBsZXQgbWluX3kgPSAxZTk7XG4gICAgbGV0IG1heF95ID0gLTFlOTtcblxuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMudHJlZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy50cmVlcywgbm9kZUlkKSkge1xuICAgICAgICBpZiAodGhpcy50cmVlc1tub2RlSWRdID09PSBpbmRleCkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tub2RlSWRdO1xuICAgICAgICAgIG1pbl94ID0gTWF0aC5taW4obm9kZS54LCBtaW5feCk7XG4gICAgICAgICAgbWF4X3ggPSBNYXRoLm1heChub2RlLngsIG1heF94KTtcbiAgICAgICAgICBtaW5feSA9IE1hdGgubWluKG5vZGUueSwgbWluX3kpO1xuICAgICAgICAgIG1heF95ID0gTWF0aC5tYXgobm9kZS55LCBtYXhfeSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbWluX3g6IG1pbl94LFxuICAgICAgbWF4X3g6IG1heF94LFxuICAgICAgbWluX3k6IG1pbl95LFxuICAgICAgbWF4X3k6IG1heF95LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdHdvIG5vZGVzIGhhdmUgdGhlIHNhbWUgcGFyZW50KHMpXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZTFcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlMlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgdHdvIG5vZGVzIGhhdmUgYSBzYW1lIGFuY2VzdG9yIG5vZGUsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaGFzU2FtZVBhcmVudChub2RlMSwgbm9kZTIpIHtcbiAgICBjb25zdCBwYXJlbnRzMSA9IHRoaXMucGFyZW50UmVmZXJlbmNlW25vZGUxLmlkXTtcbiAgICBjb25zdCBwYXJlbnRzMiA9IHRoaXMucGFyZW50UmVmZXJlbmNlW25vZGUyLmlkXTtcbiAgICBpZiAocGFyZW50czEgPT09IHVuZGVmaW5lZCB8fCBwYXJlbnRzMiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnRzMS5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXJlbnRzMi5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocGFyZW50czFbaV0gPT0gcGFyZW50czJbal0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdHdvIG5vZGVzIGFyZSBpbiB0aGUgc2FtZSB0cmVlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUxXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZTJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhpcyBpcyBzbywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBpblNhbWVTdWJOZXR3b3JrKG5vZGUxLCBub2RlMikge1xuICAgIHJldHVybiB0aGlzLnRyZWVzW25vZGUxLmlkXSA9PT0gdGhpcy50cmVlc1tub2RlMi5pZF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgbGlzdCBvZiB0aGUgZGlzdGluY3QgbGV2ZWxzIGluIHRoZSBjdXJyZW50IG5ldHdvcmtcbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0TGV2ZWxzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBub2RlIHRvIHRoZSBvcmRlcmluZyBwZXIgbGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbFxuICAgKi9cbiAgYWRkVG9PcmRlcmluZyhub2RlLCBsZXZlbCkge1xuICAgIGlmICh0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXSA9IFtdO1xuICAgIH1cblxuICAgIGxldCBpc1ByZXNlbnQgPSBmYWxzZTtcbiAgICBjb25zdCBjdXJMZXZlbCA9IHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdO1xuICAgIGZvciAoY29uc3QgbiBpbiBjdXJMZXZlbCkge1xuICAgICAgLy9pZiAoY3VyTGV2ZWxbbl0uaWQgPT09IG5vZGUuaWQpIHtcbiAgICAgIGlmIChjdXJMZXZlbFtuXSA9PT0gbm9kZSkge1xuICAgICAgICBpc1ByZXNlbnQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzUHJlc2VudCkge1xuICAgICAgdGhpcy5kaXN0cmlidXRpb25PcmRlcmluZ1tsZXZlbF0ucHVzaChub2RlKTtcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uSW5kZXhbbm9kZS5pZF0gPVxuICAgICAgICB0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXS5sZW5ndGggLSAxO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoZSBMYXlvdXQgRW5naW5lXG4gKi9cbmNsYXNzIExheW91dEVuZ2luZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlcmUgYWx3YXlzIGlzIHNvbWUgUk5HIGJlY2F1c2UgdGhlIHNldE9wdGlvbnMgbWV0aG9kIHdvbid0XG4gICAgLy8gc2V0IGl0IHVubGVzcyB0aGVyZSdzIGEgc2VlZCBmb3IgaXQuXG4gICAgdGhpcy5fcmVzZXRSTkcoTWF0aC5yYW5kb20oKSArIFwiOlwiICsgRGF0ZS5ub3coKSk7XG5cbiAgICB0aGlzLnNldFBoeXNpY3MgPSBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLm9wdGlvbnNCYWNrdXAgPSB7IHBoeXNpY3M6IHt9IH07XG5cbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgcmFuZG9tU2VlZDogdW5kZWZpbmVkLFxuICAgICAgaW1wcm92ZWRMYXlvdXQ6IHRydWUsXG4gICAgICBjbHVzdGVyVGhyZXNob2xkOiAxNTAsXG4gICAgICBoaWVyYXJjaGljYWw6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGxldmVsU2VwYXJhdGlvbjogMTUwLFxuICAgICAgICBub2RlU3BhY2luZzogMTAwLFxuICAgICAgICB0cmVlU3BhY2luZzogMjAwLFxuICAgICAgICBibG9ja1NoaWZ0aW5nOiB0cnVlLFxuICAgICAgICBlZGdlTWluaW1pemF0aW9uOiB0cnVlLFxuICAgICAgICBwYXJlbnRDZW50cmFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgZGlyZWN0aW9uOiBcIlVEXCIsIC8vIFVELCBEVSwgTFIsIFJMXG4gICAgICAgIHNvcnRNZXRob2Q6IFwiaHVic2l6ZVwiLCAvLyBodWJzaXplLCBkaXJlY3RlZFxuICAgICAgfSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcbiAgICB0aGlzLmJpbmRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGV2ZW50IGxpc3RlbmVyc1xuICAgKi9cbiAgYmluZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFDaGFuZ2VkXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc2V0dXBIaWVyYXJjaGljYWxMYXlvdXQoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9kYXRhTG9hZGVkXCIsICgpID0+IHtcbiAgICAgIHRoaXMubGF5b3V0TmV0d29yaygpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX3Jlc2V0SGllcmFyY2hpY2FsTGF5b3V0XCIsICgpID0+IHtcbiAgICAgIHRoaXMuc2V0dXBIaWVyYXJjaGljYWxMYXlvdXQoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9hZGp1c3RFZGdlc0ZvckhpZXJhcmNoaWNhbExheW91dFwiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lbmFibGVkICE9PSB0cnVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGdldCB0aGUgdHlwZSBvZiBzdGF0aWMgc21vb3RoIGN1cnZlIGluIGNhc2UgaXQgaXMgcmVxdWlyZWRcbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmRpcmVjdGlvbi5jdXJ2ZVR5cGUoKTtcblxuICAgICAgLy8gZm9yY2UgYWxsIGVkZ2VzIGludG8gc3RhdGljIHNtb290aCBjdXJ2ZXMuXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2ZvcmNlRGlzYWJsZUR5bmFtaWNDdXJ2ZXNcIiwgdHlwZSwgZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhbGxPcHRpb25zXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMsIGFsbE9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBoaWVyYXJjaGljYWwgPSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsO1xuICAgICAgY29uc3QgcHJldkhpZXJhcmNoaWNhbFN0YXRlID0gaGllcmFyY2hpY2FsLmVuYWJsZWQ7XG4gICAgICBzZWxlY3RpdmVEZWVwRXh0ZW5kKFxuICAgICAgICBbXCJyYW5kb21TZWVkXCIsIFwiaW1wcm92ZWRMYXlvdXRcIiwgXCJjbHVzdGVyVGhyZXNob2xkXCJdLFxuICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgICBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zLCBcImhpZXJhcmNoaWNhbFwiKTtcblxuICAgICAgaWYgKG9wdGlvbnMucmFuZG9tU2VlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3Jlc2V0Uk5HKG9wdGlvbnMucmFuZG9tU2VlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoaWVyYXJjaGljYWwuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAocHJldkhpZXJhcmNoaWNhbFN0YXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgLy8gcmVmcmVzaCB0aGUgb3ZlcnJpZGRlbiBvcHRpb25zIGZvciBub2RlcyBhbmQgZWRnZXMuXG4gICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInJlZnJlc2hcIiwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGxldmVsIHNlcGFyYXRpb24gaXMgdGhlIHJpZ2h0IHdheSB1cFxuICAgICAgICBpZiAoXG4gICAgICAgICAgaGllcmFyY2hpY2FsLmRpcmVjdGlvbiA9PT0gXCJSTFwiIHx8XG4gICAgICAgICAgaGllcmFyY2hpY2FsLmRpcmVjdGlvbiA9PT0gXCJEVVwiXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChoaWVyYXJjaGljYWwubGV2ZWxTZXBhcmF0aW9uID4gMCkge1xuICAgICAgICAgICAgaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbiAqPSAtMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gPCAwKSB7XG4gICAgICAgICAgICBoaWVyYXJjaGljYWwubGV2ZWxTZXBhcmF0aW9uICo9IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0RGlyZWN0aW9uU3RyYXRlZ3koKTtcblxuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3Jlc2V0SGllcmFyY2hpY2FsTGF5b3V0XCIpO1xuICAgICAgICAvLyBiZWNhdXNlIHRoZSBoaWVyYXJjaGljYWwgc3lzdGVtIG5lZWRzIGl0J3Mgb3duIHBoeXNpY3MgYW5kIHNtb290aCBjdXJ2ZSBzZXR0aW5ncyxcbiAgICAgICAgLy8gd2UgYWRhcHQgdGhlIG90aGVyIG9wdGlvbnMgaWYgbmVlZGVkLlxuICAgICAgICByZXR1cm4gdGhpcy5hZGFwdEFsbE9wdGlvbnNGb3JIaWVyYXJjaGljYWxMYXlvdXQoYWxsT3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJldkhpZXJhcmNoaWNhbFN0YXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgLy8gcmVmcmVzaCB0aGUgb3ZlcnJpZGRlbiBvcHRpb25zIGZvciBub2RlcyBhbmQgZWRnZXMuXG4gICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInJlZnJlc2hcIik7XG4gICAgICAgICAgcmV0dXJuIGRlZXBFeHRlbmQoYWxsT3B0aW9ucywgdGhpcy5vcHRpb25zQmFja3VwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWxsT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igd2l0aCBnaXZlbiBzZWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gc2VlZCAtIFRoZSBzZWVkIHRoYXQgd2lsbCBiZSBmb3J3YXJkZWQgdGhlIHRoZSBSTkcuXG4gICAqL1xuICBfcmVzZXRSTkcoc2VlZCkge1xuICAgIHRoaXMuaW5pdGlhbFJhbmRvbVNlZWQgPSBzZWVkO1xuICAgIHRoaXMuX3JuZyA9IEFsZWEodGhpcy5pbml0aWFsUmFuZG9tU2VlZCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGFsbE9wdGlvbnNcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGFkYXB0QWxsT3B0aW9uc0ZvckhpZXJhcmNoaWNhbExheW91dChhbGxPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgYmFja3VwUGh5c2ljcyA9IHRoaXMub3B0aW9uc0JhY2t1cC5waHlzaWNzO1xuXG4gICAgICAvLyBzZXQgdGhlIHBoeXNpY3NcbiAgICAgIGlmIChhbGxPcHRpb25zLnBoeXNpY3MgPT09IHVuZGVmaW5lZCB8fCBhbGxPcHRpb25zLnBoeXNpY3MgPT09IHRydWUpIHtcbiAgICAgICAgYWxsT3B0aW9ucy5waHlzaWNzID0ge1xuICAgICAgICAgIGVuYWJsZWQ6XG4gICAgICAgICAgICBiYWNrdXBQaHlzaWNzLmVuYWJsZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBiYWNrdXBQaHlzaWNzLmVuYWJsZWQsXG4gICAgICAgICAgc29sdmVyOiBcImhpZXJhcmNoaWNhbFJlcHVsc2lvblwiLFxuICAgICAgICB9O1xuICAgICAgICBiYWNrdXBQaHlzaWNzLmVuYWJsZWQgPVxuICAgICAgICAgIGJhY2t1cFBoeXNpY3MuZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGJhY2t1cFBoeXNpY3MuZW5hYmxlZDtcbiAgICAgICAgYmFja3VwUGh5c2ljcy5zb2x2ZXIgPSBiYWNrdXBQaHlzaWNzLnNvbHZlciB8fCBcImJhcm5lc0h1dFwiO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYWxsT3B0aW9ucy5waHlzaWNzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGJhY2t1cFBoeXNpY3MuZW5hYmxlZCA9XG4gICAgICAgICAgYWxsT3B0aW9ucy5waHlzaWNzLmVuYWJsZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IGFsbE9wdGlvbnMucGh5c2ljcy5lbmFibGVkO1xuICAgICAgICBiYWNrdXBQaHlzaWNzLnNvbHZlciA9IGFsbE9wdGlvbnMucGh5c2ljcy5zb2x2ZXIgfHwgXCJiYXJuZXNIdXRcIjtcbiAgICAgICAgYWxsT3B0aW9ucy5waHlzaWNzLnNvbHZlciA9IFwiaGllcmFyY2hpY2FsUmVwdWxzaW9uXCI7XG4gICAgICB9IGVsc2UgaWYgKGFsbE9wdGlvbnMucGh5c2ljcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgYmFja3VwUGh5c2ljcy5zb2x2ZXIgPSBcImJhcm5lc0h1dFwiO1xuICAgICAgICBhbGxPcHRpb25zLnBoeXNpY3MgPSB7IHNvbHZlcjogXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIiB9O1xuICAgICAgfVxuXG4gICAgICAvLyBnZXQgdGhlIHR5cGUgb2Ygc3RhdGljIHNtb290aCBjdXJ2ZSBpbiBjYXNlIGl0IGlzIHJlcXVpcmVkXG4gICAgICBsZXQgdHlwZSA9IHRoaXMuZGlyZWN0aW9uLmN1cnZlVHlwZSgpO1xuXG4gICAgICAvLyBkaXNhYmxlIHNtb290aCBjdXJ2ZXMgaWYgbm90aGluZyBpcyBkZWZpbmVkLiBJZiBzbW9vdGggY3VydmVzIGhhdmUgYmVlbiB0dXJuZWQgb24sXG4gICAgICAvLyB0dXJuIHRoZW0gaW50byBzdGF0aWMgc21vb3RoIGN1cnZlcy5cbiAgICAgIGlmIChhbGxPcHRpb25zLmVkZ2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQmFja3VwLmVkZ2VzID0ge1xuICAgICAgICAgIHNtb290aDogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBcImR5bmFtaWNcIiB9LFxuICAgICAgICB9O1xuICAgICAgICBhbGxPcHRpb25zLmVkZ2VzID0geyBzbW9vdGg6IGZhbHNlIH07XG4gICAgICB9IGVsc2UgaWYgKGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQmFja3VwLmVkZ2VzID0ge1xuICAgICAgICAgIHNtb290aDogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBcImR5bmFtaWNcIiB9LFxuICAgICAgICB9O1xuICAgICAgICBhbGxPcHRpb25zLmVkZ2VzLnNtb290aCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGxPcHRpb25zLmVkZ2VzLnNtb290aCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNCYWNrdXAuZWRnZXMgPSB7IHNtb290aDogYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGggfTtcbiAgICAgICAgICBhbGxPcHRpb25zLmVkZ2VzLnNtb290aCA9IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoLFxuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHNtb290aCA9IGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoO1xuXG4gICAgICAgICAgLy8gYWxsb3cgY3VzdG9tIHR5cGVzIGV4Y2VwdCBmb3IgZHluYW1pY1xuICAgICAgICAgIGlmIChzbW9vdGgudHlwZSAhPT0gdW5kZWZpbmVkICYmIHNtb290aC50eXBlICE9PSBcImR5bmFtaWNcIikge1xuICAgICAgICAgICAgdHlwZSA9IHNtb290aC50eXBlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFRPRE86IHRoaXMgaXMgb3B0aW9ucyBtZXJnaW5nOyBzZWUgaWYgdGhlIHN0YW5kYXJkIHJvdXRpbmVzIGNhbiBiZSB1c2VkIGhlcmUuXG4gICAgICAgICAgdGhpcy5vcHRpb25zQmFja3VwLmVkZ2VzID0ge1xuICAgICAgICAgICAgc21vb3RoOiB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IHNtb290aC5lbmFibGVkID09PSB1bmRlZmluZWQgPyB0cnVlIDogc21vb3RoLmVuYWJsZWQsXG4gICAgICAgICAgICAgIHR5cGU6IHNtb290aC50eXBlID09PSB1bmRlZmluZWQgPyBcImR5bmFtaWNcIiA6IHNtb290aC50eXBlLFxuICAgICAgICAgICAgICByb3VuZG5lc3M6XG4gICAgICAgICAgICAgICAgc21vb3RoLnJvdW5kbmVzcyA9PT0gdW5kZWZpbmVkID8gMC41IDogc21vb3RoLnJvdW5kbmVzcyxcbiAgICAgICAgICAgICAgZm9yY2VEaXJlY3Rpb246XG4gICAgICAgICAgICAgICAgc21vb3RoLmZvcmNlRGlyZWN0aW9uID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICAgIDogc21vb3RoLmZvcmNlRGlyZWN0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gTk9URTogQ29weWluZyBhbiBvYmplY3QgdG8gc2VsZjsgdGhpcyBpcyBiYXNpY2FsbHkgc2V0dGluZyBkZWZhdWx0cyBmb3IgdW5kZWZpbmVkIHZhcmlhYmxlc1xuICAgICAgICAgIGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID0ge1xuICAgICAgICAgICAgZW5hYmxlZDogc21vb3RoLmVuYWJsZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBzbW9vdGguZW5hYmxlZCxcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICByb3VuZG5lc3M6IHNtb290aC5yb3VuZG5lc3MgPT09IHVuZGVmaW5lZCA/IDAuNSA6IHNtb290aC5yb3VuZG5lc3MsXG4gICAgICAgICAgICBmb3JjZURpcmVjdGlvbjpcbiAgICAgICAgICAgICAgc21vb3RoLmZvcmNlRGlyZWN0aW9uID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgOiBzbW9vdGguZm9yY2VEaXJlY3Rpb24sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBGb3JjZSBhbGwgZWRnZXMgaW50byBzdGF0aWMgc21vb3RoIGN1cnZlcy5cbiAgICAgIC8vIE9ubHkgYXBwbGllcyB0byBlZGdlcyB0aGF0IGRvIG5vdCB1c2UgdGhlIGdsb2JhbCBvcHRpb25zIGZvciBzbW9vdGguXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2ZvcmNlRGlzYWJsZUR5bmFtaWNDdXJ2ZXNcIiwgdHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbE9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzQXJyYXlcbiAgICovXG4gIHBvc2l0aW9uSW5pdGlhbGx5KG5vZGVzQXJyYXkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lbmFibGVkICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLl9yZXNldFJORyh0aGlzLmluaXRpYWxSYW5kb21TZWVkKTtcbiAgICAgIGNvbnN0IHJhZGl1cyA9IG5vZGVzQXJyYXkubGVuZ3RoICsgNTA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzQXJyYXlbaV07XG4gICAgICAgIGNvbnN0IGFuZ2xlID0gMiAqIE1hdGguUEkgKiB0aGlzLl9ybmcoKTtcbiAgICAgICAgaWYgKG5vZGUueCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbm9kZS54ID0gcmFkaXVzICogTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5vZGUueSA9IHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgS2FtYWRhIEthd2FpIHRvIHBvc2l0aW9uIG5vZGVzLiBUaGlzIGlzIHF1aXRlIGEgaGVhdnkgYWxnb3JpdGhtIHNvIGlmIHRoZXJlIGFyZSBhIGxvdCBvZiBub2RlcyB3ZVxuICAgKiBjbHVzdGVyIHRoZW0gZmlyc3QgdG8gcmVkdWNlIHRoZSBhbW91bnQuXG4gICAqL1xuICBsYXlvdXROZXR3b3JrKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwuZW5hYmxlZCAhPT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5vcHRpb25zLmltcHJvdmVkTGF5b3V0ID09PSB0cnVlXG4gICAgKSB7XG4gICAgICBjb25zdCBpbmRpY2VzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuXG4gICAgICAvLyBmaXJzdCBjaGVjayBpZiB3ZSBzaG91bGQgS2FtYWRhIEthd2FpIHRvIGxheW91dC4gVGhlIHRocmVzaG9sZCBpcyBpZiBsZXNzIHRoYW4gaGFsZiBvZiB0aGUgdmlzaWJsZVxuICAgICAgLy8gbm9kZXMgaGF2ZSBwcmVkZWZpbmVkIHBvc2l0aW9ucyB3ZSB1c2UgdGhpcy5cbiAgICAgIGxldCBwb3NpdGlvbkRlZmluZWQgPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbaW5kaWNlc1tpXV07XG4gICAgICAgIGlmIChub2RlLnByZWRlZmluZWRQb3NpdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHBvc2l0aW9uRGVmaW5lZCArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGxlc3MgdGhhbiBoYWxmIG9mIHRoZSBub2RlcyBoYXZlIGEgcHJlZGVmaW5lZCBwb3NpdGlvbiB3ZSBjb250aW51ZVxuICAgICAgaWYgKHBvc2l0aW9uRGVmaW5lZCA8IDAuNSAqIGluZGljZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IE1BWF9MRVZFTFMgPSAxMDtcbiAgICAgICAgbGV0IGxldmVsID0gMDtcbiAgICAgICAgY29uc3QgY2x1c3RlclRocmVzaG9sZCA9IHRoaXMub3B0aW9ucy5jbHVzdGVyVGhyZXNob2xkO1xuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIERlZmluZSB0aGUgb3B0aW9ucyBmb3IgdGhlIGhpZGRlbiBjbHVzdGVyIG5vZGVzXG4gICAgICAgIC8vIFRoZXNlIG9wdGlvbnMgZG9uJ3QgcHJvcGFnYXRlIG91dHNpZGUgdGhlIGNsdXN0ZXJpbmcgcGhhc2UuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFNvbWUgb3B0aW9ucyBhcmUgZXhwbGljaXRseSBkaXNhYmxlZCwgYmVjYXVzZSB0aGV5IG1heSBiZSBzZXQgaW4gZ3JvdXAgb3IgZGVmYXVsdCBub2RlIG9wdGlvbnMuXG4gICAgICAgIC8vIFRoZSBjbHVzdGVycyBhcmUgbmV2ZXIgZGlzcGxheWVkLCBzbyBtb3N0IGV4cGxpY2l0IHNldHRpbmdzIGhlcmUgc2VydmUgYXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlIGV4cGxpY2l0IHNldHRpbmcgb2YgJ3NoYXBlJyBpcyB0byBhdm9pZCBgc2hhcGU6ICdpbWFnZSdgOyBpbWFnZXMgYXJlIG5vdCBwYXNzZWQgdG8gdGhlIGhpZGRlblxuICAgICAgICAvLyBjbHVzdGVyIG5vZGVzLCBsZWFkaW5nIHRvIGFuIGV4Y2VwdGlvbiBvbiBjcmVhdGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gQWxsIHNldHRpbmdzIGhlcmUgYXJlIHBlcmZvcm1hbmNlIHJlbGF0ZWQsIGV4Y2VwdCB3aGVuIG5vdGVkIG90aGVyd2lzZS5cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgY2x1c3Rlck9wdGlvbnMgPSB7XG4gICAgICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzaGFwZTogXCJlbGxpcHNlXCIsIC8vIEJ1Z2ZpeDogYXZvaWQgdHlwZSAnaW1hZ2UnLCBubyBpbWFnZXMgc3VwcGxpZWRcbiAgICAgICAgICAgIGxhYmVsOiBcIlwiLCAvLyBhdm9pZCBsYWJlbCBoYW5kbGluZ1xuICAgICAgICAgICAgZ3JvdXA6IFwiXCIsIC8vIGF2b2lkIGdyb3VwIGhhbmRsaW5nXG4gICAgICAgICAgICBmb250OiB7IG11bHRpOiBmYWxzZSB9LCAvLyBhdm9pZCBmb250IHByb3BhZ2F0aW9uXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbHVzdGVyRWRnZVByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlwiLCAvLyBhdm9pZCBsYWJlbCBoYW5kbGluZ1xuICAgICAgICAgICAgZm9udDogeyBtdWx0aTogZmFsc2UgfSwgLy8gYXZvaWQgZm9udCBwcm9wYWdhdGlvblxuICAgICAgICAgICAgc21vb3RoOiB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLCAvLyBhdm9pZCBkcmF3aW5nIHBlbmFsdHkgZm9yIGNvbXBsZXggZWRnZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBhcmUgYSBsb3Qgb2Ygbm9kZXMsIHdlIGNsdXN0ZXIgYmVmb3JlIHdlIHJ1biB0aGUgYWxnb3JpdGhtLlxuICAgICAgICAvLyBOT1RFOiB0aGlzIHBhcnQgZmFpbHMgdG8gZmluZCBjbHVzdGVycyBmb3IgbGFyZ2Ugc2NhbGUtZnJlZSBuZXR3b3Jrcywgd2hpY2ggc2hvdWxkXG4gICAgICAgIC8vICAgICAgIGJlIGVhc2lseSBjbHVzdGVyYWJsZS5cbiAgICAgICAgLy8gVE9ETzogZXhhbWluZSB3aHkgdGhpcyBpcyBzb1xuICAgICAgICBpZiAoaW5kaWNlcy5sZW5ndGggPiBjbHVzdGVyVGhyZXNob2xkKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRMZW5ndGggPSBpbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaW5kaWNlcy5sZW5ndGggPiBjbHVzdGVyVGhyZXNob2xkICYmIGxldmVsIDw9IE1BWF9MRVZFTFMpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS50aW1lKFwiY2x1c3RlcmluZ1wiKVxuICAgICAgICAgICAgbGV2ZWwgKz0gMTtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IGluZGljZXMubGVuZ3RoO1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG1hbnkgbm9kZXMgd2UgZG8gYSBodWJzaXplIGNsdXN0ZXJcbiAgICAgICAgICAgIGlmIChsZXZlbCAlIDMgPT09IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5ib2R5Lm1vZHVsZXMuY2x1c3RlcmluZy5jbHVzdGVyQnJpZGdlcyhjbHVzdGVyT3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmJvZHkubW9kdWxlcy5jbHVzdGVyaW5nLmNsdXN0ZXJPdXRsaWVycyhjbHVzdGVyT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhZnRlciA9IGluZGljZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGJlZm9yZSA9PSBhZnRlciAmJiBsZXZlbCAlIDMgIT09IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5fZGVjbHVzdGVyQWxsKCk7XG4gICAgICAgICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfbGF5b3V0RmFpbGVkXCIpO1xuICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgICAgICAgXCJUaGlzIG5ldHdvcmsgY291bGQgbm90IGJlIHBvc2l0aW9uZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIHRoZSBpbXByb3ZlZCBsYXlvdXQgYWxnb3JpdGhtLlwiICtcbiAgICAgICAgICAgICAgICAgIFwiIFBsZWFzZSBkaXNhYmxlIGltcHJvdmVkTGF5b3V0IGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb25zb2xlLnRpbWVFbmQoXCJjbHVzdGVyaW5nXCIpXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGJlZm9yZSxsZXZlbCxhZnRlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBlZGdlc1xuICAgICAgICAgIHRoaXMuYm9keS5tb2R1bGVzLmthbWFkYUthd2FpLnNldE9wdGlvbnMoe1xuICAgICAgICAgICAgc3ByaW5nTGVuZ3RoOiBNYXRoLm1heCgxNTAsIDIgKiBzdGFydExlbmd0aCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxldmVsID4gTUFYX0xFVkVMUykge1xuICAgICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgIFwiVGhlIGNsdXN0ZXJpbmcgZGlkbid0IHN1Y2NlZWQgd2l0aGluIHRoZSBhbW91bnQgb2YgaW50ZXJhdGlvbnMgYWxsb3dlZCxcIiArXG4gICAgICAgICAgICAgIFwiIHByb2dyZXNzaW5nIHdpdGggcGFydGlhbCByZXN1bHQuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcG9zaXRpb24gdGhlIHN5c3RlbSBmb3IgdGhlc2Ugbm9kZXMgYW5kIGVkZ2VzXG4gICAgICAgIHRoaXMuYm9keS5tb2R1bGVzLmthbWFkYUthd2FpLnNvbHZlKFxuICAgICAgICAgIGluZGljZXMsXG4gICAgICAgICAgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBzaGlmdCB0byBjZW50ZXIgcG9pbnRcbiAgICAgICAgdGhpcy5fc2hpZnRUb0NlbnRlcigpO1xuXG4gICAgICAgIC8vIHBlcnR1cmIgdGhlIG5vZGVzIGEgbGl0dGxlIGJpdCB0byBmb3JjZSB0aGUgcGh5c2ljcyB0byBraWNrIGluXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDcwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAvLyBPbmx5IHBlcnR1cmIgdGhlIG5vZGVzIHRoYXQgYXJlbid0IGZpeGVkXG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpbmRpY2VzW2ldXTtcbiAgICAgICAgICBpZiAobm9kZS5wcmVkZWZpbmVkUG9zaXRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBub2RlLnggKz0gKDAuNSAtIHRoaXMuX3JuZygpKSAqIG9mZnNldDtcbiAgICAgICAgICAgIG5vZGUueSArPSAoMC41IC0gdGhpcy5fcm5nKCkpICogb2Zmc2V0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVuY2x1c3RlciBhbGwgY2x1c3RlcnNcbiAgICAgICAgdGhpcy5fZGVjbHVzdGVyQWxsKCk7XG5cbiAgICAgICAgLy8gcmVwb3NpdGlvbiBhbGwgYmV6aWVyIG5vZGVzLlxuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcG9zaXRpb25CZXppZXJOb2Rlc1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBhbGwgdGhlIG5vZGVzIHRvd2FyZHMgdG8gdGhlIGNlbnRlciBzbyBncmF2aXRhdGlvbmFsIHB1bGwgd2lsIG5vdCBtb3ZlIHRoZSBub2RlcyBhd2F5IGZyb20gdmlld1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NoaWZ0VG9DZW50ZXIoKSB7XG4gICAgY29uc3QgcmFuZ2UgPSBOZXR3b3JrVXRpbC5nZXRSYW5nZUNvcmUoXG4gICAgICB0aGlzLmJvZHkubm9kZXMsXG4gICAgICB0aGlzLmJvZHkubm9kZUluZGljZXNcbiAgICApO1xuICAgIGNvbnN0IGNlbnRlciA9IE5ldHdvcmtVdGlsLmZpbmRDZW50ZXIocmFuZ2UpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV07XG4gICAgICBub2RlLnggLT0gY2VudGVyLng7XG4gICAgICBub2RlLnkgLT0gY2VudGVyLnk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZHMgYWxsIGNsdXN0ZXJzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGVjbHVzdGVyQWxsKCkge1xuICAgIGxldCBjbHVzdGVyc1ByZXNlbnQgPSB0cnVlO1xuICAgIHdoaWxlIChjbHVzdGVyc1ByZXNlbnQgPT09IHRydWUpIHtcbiAgICAgIGNsdXN0ZXJzUHJlc2VudCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMuYm9keS5ub2Rlc1t0aGlzLmJvZHkubm9kZUluZGljZXNbaV1dLmlzQ2x1c3RlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNsdXN0ZXJzUHJlc2VudCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5ib2R5Lm1vZHVsZXMuY2x1c3RlcmluZy5vcGVuQ2x1c3RlcihcbiAgICAgICAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlc1tpXSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2x1c3RlcnNQcmVzZW50ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8Kn1cbiAgICovXG4gIGdldFNlZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbFJhbmRvbVNlZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiB0byBsYXlvdXQgdGhlIG5vZGVzIGluIGEgaGllcmFyY2hpY2FsIHdheS5cbiAgICogSXQgY2hlY2tzIGlmIHRoZSBub2RlIGRldGFpbHMgYXJlIHN1cHBsaWVkIGNvcnJlY3RseVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2V0dXBIaWVyYXJjaGljYWxMYXlvdXQoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lbmFibGVkID09PSB0cnVlICYmXG4gICAgICB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgLy8gZ2V0IHRoZSBzaXplIG9mIHRoZSBsYXJnZXN0IGh1YnMgYW5kIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyBkZWZpbmVkIGEgbGV2ZWwgZm9yIGEgbm9kZS5cbiAgICAgIGxldCBub2RlLCBub2RlSWQ7XG4gICAgICBsZXQgZGVmaW5lZExldmVsID0gZmFsc2U7XG4gICAgICBsZXQgdW5kZWZpbmVkTGV2ZWwgPSBmYWxzZTtcbiAgICAgIHRoaXMubGFzdE5vZGVPbkxldmVsID0ge307XG4gICAgICB0aGlzLmhpZXJhcmNoaWNhbCA9IG5ldyBIaWVyYXJjaGljYWxTdGF0dXMoKTtcblxuICAgICAgZm9yIChub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgICAgIGlmIChub2RlLm9wdGlvbnMubGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVmaW5lZExldmVsID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlSWRdID0gbm9kZS5vcHRpb25zLmxldmVsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bmRlZmluZWRMZXZlbCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZSB1c2VyIGRlZmluZWQgc29tZSBsZXZlbHMgYnV0IG5vdCBhbGwsIGFsZXJ0IGFuZCBydW4gd2l0aG91dCBoaWVyYXJjaGljYWwgbGF5b3V0XG4gICAgICBpZiAodW5kZWZpbmVkTGV2ZWwgPT09IHRydWUgJiYgZGVmaW5lZExldmVsID09PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRvIHVzZSB0aGUgaGllcmFyY2hpY2FsIGxheW91dCwgbm9kZXMgcmVxdWlyZSBlaXRoZXIgbm8gcHJlZGVmaW5lZCBsZXZlbHNcIiArXG4gICAgICAgICAgICBcIiBvciBsZXZlbHMgaGF2ZSB0byBiZSBkZWZpbmVkIGZvciBhbGwgbm9kZXMuXCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlZmluZSBsZXZlbHMgaWYgdW5kZWZpbmVkIGJ5IHRoZSB1c2Vycy4gQmFzZWQgb24gaHVic2l6ZS5cbiAgICAgICAgaWYgKHVuZGVmaW5lZExldmVsID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3Qgc29ydE1ldGhvZCA9IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwuc29ydE1ldGhvZDtcbiAgICAgICAgICBpZiAoc29ydE1ldGhvZCA9PT0gXCJodWJzaXplXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RldGVybWluZUxldmVsc0J5SHVic2l6ZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc29ydE1ldGhvZCA9PT0gXCJkaXJlY3RlZFwiKSB7XG4gICAgICAgICAgICB0aGlzLl9kZXRlcm1pbmVMZXZlbHNEaXJlY3RlZCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc29ydE1ldGhvZCA9PT0gXCJjdXN0b21cIikge1xuICAgICAgICAgICAgdGhpcy5fZGV0ZXJtaW5lTGV2ZWxzQ3VzdG9tQ2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmYWxsYmFjayBmb3IgY2FzZXMgd2hlcmUgdGhlcmUgYXJlIG5vZGVzIGJ1dCBubyBlZGdlc1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0aGlzLmJvZHkubm9kZXMpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5ub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWwuZW5zdXJlTGV2ZWwobm9kZUlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgbm9kZXMgcGVyIGxldmVsLlxuICAgICAgICBjb25zdCBkaXN0cmlidXRpb24gPSB0aGlzLl9nZXREaXN0cmlidXRpb24oKTtcblxuICAgICAgICAvLyBnZXQgdGhlIHBhcmVudCBjaGlsZHJlbiByZWxhdGlvbnMuXG4gICAgICAgIHRoaXMuX2dlbmVyYXRlTWFwKCk7XG5cbiAgICAgICAgLy8gcGxhY2UgdGhlIG5vZGVzIG9uIHRoZSBjYW52YXMuXG4gICAgICAgIHRoaXMuX3BsYWNlTm9kZXNCeUhpZXJhcmNoeShkaXN0cmlidXRpb24pO1xuXG4gICAgICAgIC8vIGNvbmRlbnNlIHRoZSB3aGl0ZXNwYWNlLlxuICAgICAgICB0aGlzLl9jb25kZW5zZUhpZXJhcmNoeSgpO1xuXG4gICAgICAgIC8vIHNoaWZ0IHRvIGNlbnRlciBzbyBncmF2aXR5IGRvZXMgbm90IGhhdmUgdG8gZG8gbXVjaFxuICAgICAgICB0aGlzLl9zaGlmdFRvQ2VudGVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uZGVuc2VIaWVyYXJjaHkoKSB7XG4gICAgLy8gR2xvYmFsIHZhciBpbiB0aGlzIHNjb3BlIHRvIGRlZmluZSB3aGVuIHRoZSBtb3ZlbWVudCBoYXMgc3RvcHBlZC5cbiAgICBsZXQgc3RpbGxTaGlmdGluZyA9IGZhbHNlO1xuICAgIGNvbnN0IGJyYW5jaGVzID0ge307XG4gICAgLy8gZmlyc3Qgd2UgaGF2ZSBzb21lIG1ldGhvZHMgdG8gaGVscCBzaGlmdGluZyB0cmVlcyBhcm91bmQuXG4gICAgLy8gdGhlIG1haW4gbWV0aG9kIHRvIHNoaWZ0IHRoZSB0cmVlc1xuICAgIGNvbnN0IHNoaWZ0VHJlZXMgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0cmVlU2l6ZXMgPSBnZXRUcmVlU2l6ZXMoKTtcbiAgICAgIGxldCBzaGlmdEJ5ID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJlZVNpemVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBkaWZmID0gdHJlZVNpemVzW2ldLm1heCAtIHRyZWVTaXplc1tpICsgMV0ubWluO1xuICAgICAgICBzaGlmdEJ5ICs9IGRpZmYgKyB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLnRyZWVTcGFjaW5nO1xuICAgICAgICBzaGlmdFRyZWUoaSArIDEsIHNoaWZ0QnkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBzaGlmdCBhIHNpbmdsZSB0cmVlIGJ5IGFuIG9mZnNldFxuICAgIGNvbnN0IHNoaWZ0VHJlZSA9IChpbmRleCwgb2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCB0cmVlcyA9IHRoaXMuaGllcmFyY2hpY2FsLnRyZWVzO1xuXG4gICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0cmVlcykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRyZWVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgaWYgKHRyZWVzW25vZGVJZF0gPT09IGluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbi5zaGlmdChub2RlSWQsIG9mZnNldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGdldCB0aGUgd2lkdGggb2YgYWxsIHRyZWVzXG4gICAgY29uc3QgZ2V0VHJlZVNpemVzID0gKCkgPT4ge1xuICAgICAgY29uc3QgdHJlZVdpZHRocyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmhpZXJhcmNoaWNhbC5udW1UcmVlcygpOyBpKyspIHtcbiAgICAgICAgdHJlZVdpZHRocy5wdXNoKHRoaXMuZGlyZWN0aW9uLmdldFRyZWVTaXplKGkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cmVlV2lkdGhzO1xuICAgIH07XG5cbiAgICAvLyBnZXQgYSBtYXAgb2YgYWxsIG5vZGVzIGluIHRoaXMgYnJhbmNoXG4gICAgY29uc3QgZ2V0QnJhbmNoTm9kZXMgPSAoc291cmNlLCBtYXApID0+IHtcbiAgICAgIGlmIChtYXBbc291cmNlLmlkXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtYXBbc291cmNlLmlkXSA9IHRydWU7XG4gICAgICBpZiAodGhpcy5oaWVyYXJjaGljYWwuY2hpbGRyZW5SZWZlcmVuY2Vbc291cmNlLmlkXSkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuaGllcmFyY2hpY2FsLmNoaWxkcmVuUmVmZXJlbmNlW3NvdXJjZS5pZF07XG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZ2V0QnJhbmNoTm9kZXModGhpcy5ib2R5Lm5vZGVzW2NoaWxkcmVuW2ldXSwgbWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gZ2V0IGEgbWluIG1heCB3aWR0aCBhcyB3ZWxsIGFzIHRoZSBtYXhpbXVtIG1vdmVtZW50IHNwYWNlIGl0IGhhcyBvbiBlaXRoZXIgc2lkZXNcbiAgICAvLyB3ZSB1c2UgbWluIG1heCB0ZXJtaW5vbG9neSBiZWNhdXNlIHdpZHRoIGFuZCBoZWlnaHQgY2FuIGludGVyY2hhbmdlIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBsYXlvdXRcbiAgICBjb25zdCBnZXRCcmFuY2hCb3VuZGFyeSA9IChicmFuY2hNYXAsIG1heExldmVsID0gMWU5KSA9PiB7XG4gICAgICBsZXQgbWluU3BhY2UgPSAxZTk7XG4gICAgICBsZXQgbWF4U3BhY2UgPSAxZTk7XG4gICAgICBsZXQgbWluID0gMWU5O1xuICAgICAgbGV0IG1heCA9IC0xZTk7XG4gICAgICBmb3IgKGNvbnN0IGJyYW5jaE5vZGUgaW4gYnJhbmNoTWFwKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYnJhbmNoTWFwLCBicmFuY2hOb2RlKSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbYnJhbmNoTm9kZV07XG4gICAgICAgICAgY29uc3QgbGV2ZWwgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZS5pZF07XG4gICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihub2RlKTtcblxuICAgICAgICAgIC8vIGdldCB0aGUgc3BhY2UgYXJvdW5kIHRoZSBub2RlLlxuICAgICAgICAgIGNvbnN0IFttaW5TcGFjZU5vZGUsIG1heFNwYWNlTm9kZV0gPSB0aGlzLl9nZXRTcGFjZUFyb3VuZE5vZGUoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgYnJhbmNoTWFwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBtaW5TcGFjZSA9IE1hdGgubWluKG1pblNwYWNlTm9kZSwgbWluU3BhY2UpO1xuICAgICAgICAgIG1heFNwYWNlID0gTWF0aC5taW4obWF4U3BhY2VOb2RlLCBtYXhTcGFjZSk7XG5cbiAgICAgICAgICAvLyB0aGUgd2lkdGggaXMgb25seSByZWxldmFudCBmb3IgdGhlIGxldmVscyB0d28gbm9kZXMgaGF2ZSBpbiBjb21tb24uIFRoaXMgaXMgd2h5IHdlIGZpbHRlciBvbiB0aGlzLlxuICAgICAgICAgIGlmIChsZXZlbCA8PSBtYXhMZXZlbCkge1xuICAgICAgICAgICAgbWluID0gTWF0aC5taW4ocG9zaXRpb24sIG1pbik7XG4gICAgICAgICAgICBtYXggPSBNYXRoLm1heChwb3NpdGlvbiwgbWF4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFttaW4sIG1heCwgbWluU3BhY2UsIG1heFNwYWNlXTtcbiAgICB9O1xuXG4gICAgLy8gY2hlY2sgd2hhdCB0aGUgbWF4aW11bSBsZXZlbCBpcyB0aGVzZSBub2RlcyBoYXZlIGluIGNvbW1vbi5cbiAgICBjb25zdCBnZXRDb2xsaXNpb25MZXZlbCA9IChub2RlMSwgbm9kZTIpID0+IHtcbiAgICAgIGNvbnN0IG1heExldmVsMSA9IHRoaXMuaGllcmFyY2hpY2FsLmdldE1heExldmVsKG5vZGUxLmlkKTtcbiAgICAgIGNvbnN0IG1heExldmVsMiA9IHRoaXMuaGllcmFyY2hpY2FsLmdldE1heExldmVsKG5vZGUyLmlkKTtcbiAgICAgIHJldHVybiBNYXRoLm1pbihtYXhMZXZlbDEsIG1heExldmVsMik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENvbmRlbnNlIGVsZW1lbnRzLiBUaGVzZSBjYW4gYmUgbm9kZXMgb3IgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHRoZSBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gbGV2ZWxzXG4gICAgICogQHBhcmFtIHsqfSBjZW50ZXJQYXJlbnRzXG4gICAgICovXG4gICAgY29uc3Qgc2hpZnRFbGVtZW50c0Nsb3NlciA9IChjYWxsYmFjaywgbGV2ZWxzLCBjZW50ZXJQYXJlbnRzKSA9PiB7XG4gICAgICBjb25zdCBoaWVyID0gdGhpcy5oaWVyYXJjaGljYWw7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGV2ZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxldmVsID0gbGV2ZWxzW2ldO1xuICAgICAgICBjb25zdCBsZXZlbE5vZGVzID0gaGllci5kaXN0cmlidXRpb25PcmRlcmluZ1tsZXZlbF07XG4gICAgICAgIGlmIChsZXZlbE5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldmVsTm9kZXMubGVuZ3RoIC0gMTsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlMSA9IGxldmVsTm9kZXNbal07XG4gICAgICAgICAgICBjb25zdCBub2RlMiA9IGxldmVsTm9kZXNbaiArIDFdO1xuXG4gICAgICAgICAgICAvLyBOT1RFOiBsb2dpYyBtYWludGFpbmVkIGFzIGl0IHdhczsgaWYgbm9kZXMgaGF2ZSBzYW1lIGFuY2VzdG9yLFxuICAgICAgICAgICAgLy8gICAgICAgdGhlbiBvZiBjb3Vyc2UgdGhleSBhcmUgaW4gdGhlIHNhbWUgc3ViLW5ldHdvcmsuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGhpZXIuaGFzU2FtZVBhcmVudChub2RlMSwgbm9kZTIpICYmXG4gICAgICAgICAgICAgIGhpZXIuaW5TYW1lU3ViTmV0d29yayhub2RlMSwgbm9kZTIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sobm9kZTEsIG5vZGUyLCBjZW50ZXJQYXJlbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gY2FsbGJhY2sgZm9yIHNoaWZ0aW5nIGJyYW5jaGVzXG4gICAgY29uc3QgYnJhbmNoU2hpZnRDYWxsYmFjayA9IChub2RlMSwgbm9kZTIsIGNlbnRlclBhcmVudCA9IGZhbHNlKSA9PiB7XG4gICAgICAvL3dpbmRvdy5DQUxMQkFDS1MucHVzaCgoKSA9PiB7XG4gICAgICBjb25zdCBwb3MxID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24obm9kZTEpO1xuICAgICAgY29uc3QgcG9zMiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUyKTtcbiAgICAgIGNvbnN0IGRpZmZBYnMgPSBNYXRoLmFicyhwb3MyIC0gcG9zMSk7XG4gICAgICBjb25zdCBub2RlU3BhY2luZyA9IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwubm9kZVNwYWNpbmc7XG4gICAgICAvL2NvbnNvbGUubG9nKFwiTk9XIENIRUNLSU5HOlwiLCBub2RlMS5pZCwgbm9kZTIuaWQsIGRpZmZBYnMpO1xuICAgICAgaWYgKGRpZmZBYnMgPiBub2RlU3BhY2luZykge1xuICAgICAgICBjb25zdCBicmFuY2hOb2RlczEgPSB7fTtcbiAgICAgICAgY29uc3QgYnJhbmNoTm9kZXMyID0ge307XG5cbiAgICAgICAgZ2V0QnJhbmNoTm9kZXMobm9kZTEsIGJyYW5jaE5vZGVzMSk7XG4gICAgICAgIGdldEJyYW5jaE5vZGVzKG5vZGUyLCBicmFuY2hOb2RlczIpO1xuXG4gICAgICAgIC8vIGNoZWNrIHRoZSBsYXJnZXN0IGRpc3RhbmNlIGJldHdlZW4gdGhlIGJyYW5jaGVzXG4gICAgICAgIGNvbnN0IG1heExldmVsID0gZ2V0Q29sbGlzaW9uTGV2ZWwobm9kZTEsIG5vZGUyKTtcbiAgICAgICAgY29uc3QgYnJhbmNoTm9kZUJvdW5kYXJ5MSA9IGdldEJyYW5jaEJvdW5kYXJ5KGJyYW5jaE5vZGVzMSwgbWF4TGV2ZWwpO1xuICAgICAgICBjb25zdCBicmFuY2hOb2RlQm91bmRhcnkyID0gZ2V0QnJhbmNoQm91bmRhcnkoYnJhbmNoTm9kZXMyLCBtYXhMZXZlbCk7XG4gICAgICAgIGNvbnN0IG1heDEgPSBicmFuY2hOb2RlQm91bmRhcnkxWzFdO1xuICAgICAgICBjb25zdCBtaW4yID0gYnJhbmNoTm9kZUJvdW5kYXJ5MlswXTtcbiAgICAgICAgY29uc3QgbWluU3BhY2UyID0gYnJhbmNoTm9kZUJvdW5kYXJ5MlsyXTtcblxuICAgICAgICAvL2NvbnNvbGUubG9nKG5vZGUxLmlkLCBnZXRCcmFuY2hCb3VuZGFyeShicmFuY2hOb2RlczEsIG1heExldmVsKSwgbm9kZTIuaWQsXG4gICAgICAgIC8vICAgICAgICAgICAgZ2V0QnJhbmNoQm91bmRhcnkoYnJhbmNoTm9kZXMyLCBtYXhMZXZlbCksIG1heExldmVsKTtcbiAgICAgICAgY29uc3QgZGlmZkJyYW5jaCA9IE1hdGguYWJzKG1heDEgLSBtaW4yKTtcbiAgICAgICAgaWYgKGRpZmZCcmFuY2ggPiBub2RlU3BhY2luZykge1xuICAgICAgICAgIGxldCBvZmZzZXQgPSBtYXgxIC0gbWluMiArIG5vZGVTcGFjaW5nO1xuICAgICAgICAgIGlmIChvZmZzZXQgPCAtbWluU3BhY2UyICsgbm9kZVNwYWNpbmcpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IC1taW5TcGFjZTIgKyBub2RlU3BhY2luZztcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJSRVNFVFRJTkcgT0ZGU0VUXCIsIG1heDEgLSBtaW4yICsgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZywgLW1pblNwYWNlMiwgb2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJTSElGVElOR1wiLCBub2RlMi5pZCwgb2Zmc2V0KTtcbiAgICAgICAgICAgIHRoaXMuX3NoaWZ0QmxvY2sobm9kZTIuaWQsIG9mZnNldCk7XG4gICAgICAgICAgICBzdGlsbFNoaWZ0aW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGNlbnRlclBhcmVudCA9PT0gdHJ1ZSkgdGhpcy5fY2VudGVyUGFyZW50KG5vZGUyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7fSlcbiAgICB9O1xuXG4gICAgY29uc3QgbWluaW1pemVFZGdlTGVuZ3RoID0gKGl0ZXJhdGlvbnMsIG5vZGUpID0+IHtcbiAgICAgIC8vd2luZG93LkNBTExCQUNLUy5wdXNoKCgpID0+IHtcbiAgICAgIC8vICBjb25zb2xlLmxvZyhcInRzXCIsbm9kZS5pZCk7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlLmlkO1xuICAgICAgY29uc3QgYWxsRWRnZXMgPSBub2RlLmVkZ2VzO1xuICAgICAgY29uc3Qgbm9kZUxldmVsID0gdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW25vZGUuaWRdO1xuXG4gICAgICAvLyBnYXRoZXIgY29uc3RhbnRzXG4gICAgICBjb25zdCBDMiA9XG4gICAgICAgIHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwubGV2ZWxTZXBhcmF0aW9uICpcbiAgICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb247XG4gICAgICBjb25zdCByZWZlcmVuY2VOb2RlcyA9IHt9O1xuICAgICAgY29uc3QgYWJvdmVFZGdlcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxFZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBlZGdlID0gYWxsRWRnZXNbaV07XG4gICAgICAgIGlmIChlZGdlLnRvSWQgIT0gZWRnZS5mcm9tSWQpIHtcbiAgICAgICAgICBjb25zdCBvdGhlck5vZGUgPSBlZGdlLnRvSWQgPT0gbm9kZUlkID8gZWRnZS5mcm9tIDogZWRnZS50bztcbiAgICAgICAgICByZWZlcmVuY2VOb2Rlc1thbGxFZGdlc1tpXS5pZF0gPSBvdGhlck5vZGU7XG4gICAgICAgICAgaWYgKHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tvdGhlck5vZGUuaWRdIDwgbm9kZUxldmVsKSB7XG4gICAgICAgICAgICBhYm92ZUVkZ2VzLnB1c2goZWRnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGRpZmZlcmVudGlhdGVkIHN1bSBvZiBsZW5ndGhzIGJhc2VkIG9uIG9ubHkgbW92aW5nIG9uZSBub2RlIG92ZXIgb25lIGF4aXNcbiAgICAgIGNvbnN0IGdldEZ4ID0gKHBvaW50LCBlZGdlcykgPT4ge1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChyZWZlcmVuY2VOb2Rlc1tlZGdlc1tpXS5pZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYSA9XG4gICAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKHJlZmVyZW5jZU5vZGVzW2VkZ2VzW2ldLmlkXSkgLSBwb2ludDtcbiAgICAgICAgICAgIHN1bSArPSBhIC8gTWF0aC5zcXJ0KGEgKiBhICsgQzIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VtO1xuICAgICAgfTtcblxuICAgICAgLy8gZG91Ymx5IGRpZmZlcmVudGlhdGVkIHN1bSBvZiBsZW5ndGhzIGJhc2VkIG9uIG9ubHkgbW92aW5nIG9uZSBub2RlIG92ZXIgb25lIGF4aXNcbiAgICAgIGNvbnN0IGdldERGeCA9IChwb2ludCwgZWRnZXMpID0+IHtcbiAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAocmVmZXJlbmNlTm9kZXNbZWRnZXNbaV0uaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPVxuICAgICAgICAgICAgICB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihyZWZlcmVuY2VOb2Rlc1tlZGdlc1tpXS5pZF0pIC0gcG9pbnQ7XG4gICAgICAgICAgICBzdW0gLT0gQzIgKiBNYXRoLnBvdyhhICogYSArIEMyLCAtMS41KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1bTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGdldEd1ZXNzID0gKGl0ZXJhdGlvbnMsIGVkZ2VzKSA9PiB7XG4gICAgICAgIGxldCBndWVzcyA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuICAgICAgICAvLyBOZXd0b24ncyBtZXRob2QgZm9yIG9wdGltaXphdGlvblxuICAgICAgICBjb25zdCBndWVzc01hcCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGZ4ID0gZ2V0RngoZ3Vlc3MsIGVkZ2VzKTtcbiAgICAgICAgICBjb25zdCBkZnggPSBnZXRERngoZ3Vlc3MsIGVkZ2VzKTtcblxuICAgICAgICAgIC8vIHdlIGxpbWl0IHRoZSBtb3ZlbWVudCB0byBhdm9pZCBpbnN0YWJpbGl0eS5cbiAgICAgICAgICBjb25zdCBsaW1pdCA9IDQwO1xuICAgICAgICAgIGNvbnN0IHJhdGlvID0gTWF0aC5tYXgoLWxpbWl0LCBNYXRoLm1pbihsaW1pdCwgTWF0aC5yb3VuZChmeCAvIGRmeCkpKTtcbiAgICAgICAgICBndWVzcyA9IGd1ZXNzIC0gcmF0aW87XG4gICAgICAgICAgLy8gcmVkdWNlIGR1cGxpY2F0ZXNcbiAgICAgICAgICBpZiAoZ3Vlc3NNYXBbZ3Vlc3NdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBndWVzc01hcFtndWVzc10gPSBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBndWVzcztcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vdmVCcmFuY2ggPSAoZ3Vlc3MpID0+IHtcbiAgICAgICAgLy8gcG9zaXRpb24gbm9kZSBpZiB0aGVyZSBpcyBzcGFjZVxuICAgICAgICBjb25zdCBub2RlUG9zaXRpb24gPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihub2RlKTtcblxuICAgICAgICAvLyBjaGVjayBtb3ZhYmxlIGFyZWEgb2YgdGhlIGJyYW5jaFxuICAgICAgICBpZiAoYnJhbmNoZXNbbm9kZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGJyYW5jaE5vZGVzID0ge307XG4gICAgICAgICAgZ2V0QnJhbmNoTm9kZXMobm9kZSwgYnJhbmNoTm9kZXMpO1xuICAgICAgICAgIGJyYW5jaGVzW25vZGUuaWRdID0gYnJhbmNoTm9kZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnJhbmNoQm91bmRhcnkgPSBnZXRCcmFuY2hCb3VuZGFyeShicmFuY2hlc1tub2RlLmlkXSk7XG4gICAgICAgIGNvbnN0IG1pblNwYWNlQnJhbmNoID0gYnJhbmNoQm91bmRhcnlbMl07XG4gICAgICAgIGNvbnN0IG1heFNwYWNlQnJhbmNoID0gYnJhbmNoQm91bmRhcnlbM107XG5cbiAgICAgICAgY29uc3QgZGlmZiA9IGd1ZXNzIC0gbm9kZVBvc2l0aW9uO1xuXG4gICAgICAgIC8vIGNoZWNrIGlmIHdlIGFyZSBhbGxvd2VkIHRvIG1vdmUgdGhlIG5vZGU6XG4gICAgICAgIGxldCBicmFuY2hPZmZzZXQgPSAwO1xuICAgICAgICBpZiAoZGlmZiA+IDApIHtcbiAgICAgICAgICBicmFuY2hPZmZzZXQgPSBNYXRoLm1pbihcbiAgICAgICAgICAgIGRpZmYsXG4gICAgICAgICAgICBtYXhTcGFjZUJyYW5jaCAtIHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwubm9kZVNwYWNpbmdcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGRpZmYgPCAwKSB7XG4gICAgICAgICAgYnJhbmNoT2Zmc2V0ID0gLU1hdGgubWluKFxuICAgICAgICAgICAgLWRpZmYsXG4gICAgICAgICAgICBtaW5TcGFjZUJyYW5jaCAtIHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwubm9kZVNwYWNpbmdcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJyYW5jaE9mZnNldCAhPSAwKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIm1vdmluZyBicmFuY2g6XCIsYnJhbmNoT2Zmc2V0LCBtYXhTcGFjZUJyYW5jaCwgbWluU3BhY2VCcmFuY2gpXG4gICAgICAgICAgdGhpcy5fc2hpZnRCbG9jayhub2RlLmlkLCBicmFuY2hPZmZzZXQpO1xuICAgICAgICAgIC8vdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gICAgICAgICAgc3RpbGxTaGlmdGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vdmVOb2RlID0gKGd1ZXNzKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuXG4gICAgICAgIC8vIHBvc2l0aW9uIG5vZGUgaWYgdGhlcmUgaXMgc3BhY2VcbiAgICAgICAgY29uc3QgW21pblNwYWNlLCBtYXhTcGFjZV0gPSB0aGlzLl9nZXRTcGFjZUFyb3VuZE5vZGUobm9kZSk7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBndWVzcyAtIG5vZGVQb3NpdGlvbjtcbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIGFsbG93ZWQgdG8gbW92ZSB0aGUgbm9kZTpcbiAgICAgICAgbGV0IG5ld1Bvc2l0aW9uID0gbm9kZVBvc2l0aW9uO1xuICAgICAgICBpZiAoZGlmZiA+IDApIHtcbiAgICAgICAgICBuZXdQb3NpdGlvbiA9IE1hdGgubWluKFxuICAgICAgICAgICAgbm9kZVBvc2l0aW9uICsgKG1heFNwYWNlIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZyksXG4gICAgICAgICAgICBndWVzc1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZiA8IDApIHtcbiAgICAgICAgICBuZXdQb3NpdGlvbiA9IE1hdGgubWF4KFxuICAgICAgICAgICAgbm9kZVBvc2l0aW9uIC0gKG1pblNwYWNlIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZyksXG4gICAgICAgICAgICBndWVzc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3UG9zaXRpb24gIT09IG5vZGVQb3NpdGlvbikge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJtb3ZpbmcgTm9kZTpcIixkaWZmLCBtaW5TcGFjZSwgbWF4U3BhY2UpO1xuICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKG5vZGUsIG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICAvL3RoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICAgICAgICAgIHN0aWxsU2hpZnRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBsZXQgZ3Vlc3MgPSBnZXRHdWVzcyhpdGVyYXRpb25zLCBhYm92ZUVkZ2VzKTtcbiAgICAgIG1vdmVCcmFuY2goZ3Vlc3MpO1xuICAgICAgZ3Vlc3MgPSBnZXRHdWVzcyhpdGVyYXRpb25zLCBhbGxFZGdlcyk7XG4gICAgICBtb3ZlTm9kZShndWVzcyk7XG4gICAgICAvL30pXG4gICAgfTtcblxuICAgIC8vIG1ldGhvZCB0byByZW1vdmUgd2hpdGVzcGFjZSBiZXR3ZWVuIGJyYW5jaGVzLiBCZWNhdXNlIHdlIGRvIGJvdHRvbSB1cCwgd2UgY2FuIGNlbnRlciB0aGUgcGFyZW50cy5cbiAgICBjb25zdCBtaW5pbWl6ZUVkZ2VMZW5ndGhCb3R0b21VcCA9IChpdGVyYXRpb25zKSA9PiB7XG4gICAgICBsZXQgbGV2ZWxzID0gdGhpcy5oaWVyYXJjaGljYWwuZ2V0TGV2ZWxzKCk7XG4gICAgICBsZXZlbHMgPSBsZXZlbHMucmV2ZXJzZSgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHtcbiAgICAgICAgc3RpbGxTaGlmdGluZyA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldmVscy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNvbnN0IGxldmVsID0gbGV2ZWxzW2pdO1xuICAgICAgICAgIGNvbnN0IGxldmVsTm9kZXMgPSB0aGlzLmhpZXJhcmNoaWNhbC5kaXN0cmlidXRpb25PcmRlcmluZ1tsZXZlbF07XG4gICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsZXZlbE5vZGVzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBtaW5pbWl6ZUVkZ2VMZW5ndGgoMTAwMCwgbGV2ZWxOb2Rlc1trXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGlsbFNoaWZ0aW5nICE9PSB0cnVlKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkZJTklTSEVEIG1pbmltaXplRWRnZUxlbmd0aEJvdHRvbVVwIElOIFwiICsgaSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gbWV0aG9kIHRvIHJlbW92ZSB3aGl0ZXNwYWNlIGJldHdlZW4gYnJhbmNoZXMuIEJlY2F1c2Ugd2UgZG8gYm90dG9tIHVwLCB3ZSBjYW4gY2VudGVyIHRoZSBwYXJlbnRzLlxuICAgIGNvbnN0IHNoaWZ0QnJhbmNoZXNDbG9zZXJCb3R0b21VcCA9IChpdGVyYXRpb25zKSA9PiB7XG4gICAgICBsZXQgbGV2ZWxzID0gdGhpcy5oaWVyYXJjaGljYWwuZ2V0TGV2ZWxzKCk7XG4gICAgICBsZXZlbHMgPSBsZXZlbHMucmV2ZXJzZSgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHtcbiAgICAgICAgc3RpbGxTaGlmdGluZyA9IGZhbHNlO1xuICAgICAgICBzaGlmdEVsZW1lbnRzQ2xvc2VyKGJyYW5jaFNoaWZ0Q2FsbGJhY2ssIGxldmVscywgdHJ1ZSk7XG4gICAgICAgIGlmIChzdGlsbFNoaWZ0aW5nICE9PSB0cnVlKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkZJTklTSEVEIHNoaWZ0QnJhbmNoZXNDbG9zZXJCb3R0b21VcCBJTiBcIiArIChpKzEpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBjZW50ZXIgYWxsIHBhcmVudHNcbiAgICBjb25zdCBjZW50ZXJBbGxQYXJlbnRzID0gKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKVxuICAgICAgICAgIHRoaXMuX2NlbnRlclBhcmVudCh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGNlbnRlciBhbGwgcGFyZW50c1xuICAgIGNvbnN0IGNlbnRlckFsbFBhcmVudHNCb3R0b21VcCA9ICgpID0+IHtcbiAgICAgIGxldCBsZXZlbHMgPSB0aGlzLmhpZXJhcmNoaWNhbC5nZXRMZXZlbHMoKTtcbiAgICAgIGxldmVscyA9IGxldmVscy5yZXZlcnNlKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxldmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBsZXZlbCA9IGxldmVsc1tpXTtcbiAgICAgICAgY29uc3QgbGV2ZWxOb2RlcyA9IHRoaXMuaGllcmFyY2hpY2FsLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZXZlbE5vZGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdGhpcy5fY2VudGVyUGFyZW50KGxldmVsTm9kZXNbal0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHRoZSBhY3R1YWwgd29yayBpcyBkb25lIGhlcmUuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwuYmxvY2tTaGlmdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgc2hpZnRCcmFuY2hlc0Nsb3NlckJvdHRvbVVwKDUpO1xuICAgICAgY2VudGVyQWxsUGFyZW50cygpO1xuICAgIH1cblxuICAgIC8vIG1pbmltaXplIGVkZ2UgbGVuZ3RoXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwuZWRnZU1pbmltaXphdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgbWluaW1pemVFZGdlTGVuZ3RoQm90dG9tVXAoMjApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLnBhcmVudENlbnRyYWxpemF0aW9uID09PSB0cnVlKSB7XG4gICAgICBjZW50ZXJBbGxQYXJlbnRzQm90dG9tVXAoKTtcbiAgICB9XG5cbiAgICBzaGlmdFRyZWVzKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBnaXZlcyB0aGUgc3BhY2UgYXJvdW5kIHRoZSBub2RlLiBJRiBhIG1hcCBpcyBzdXBwbGllZCwgaXQgd2lsbCBvbmx5IGNoZWNrIGFnYWluc3Qgbm9kZXMgTk9UIGluIHRoZSBtYXAuXG4gICAqIFRoaXMgaXMgdXNlZCB0byBvbmx5IGdldCB0aGUgZGlzdGFuY2VzIHRvIG5vZGVzIG91dHNpZGUgb2YgYSBicmFuY2guXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3tOb2RlLmlkOiB2aXMuTm9kZX19IG1hcFxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0U3BhY2VBcm91bmROb2RlKG5vZGUsIG1hcCkge1xuICAgIGxldCB1c2VNYXAgPSB0cnVlO1xuICAgIGlmIChtYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdXNlTWFwID0gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGxldmVsID0gdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW25vZGUuaWRdO1xuICAgIGlmIChsZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaGllcmFyY2hpY2FsLmRpc3RyaWJ1dGlvbkluZGV4W25vZGUuaWRdO1xuICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihub2RlKTtcbiAgICAgIGNvbnN0IG9yZGVyaW5nID0gdGhpcy5oaWVyYXJjaGljYWwuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdO1xuICAgICAgbGV0IG1pblNwYWNlID0gMWU5O1xuICAgICAgbGV0IG1heFNwYWNlID0gMWU5O1xuICAgICAgaWYgKGluZGV4ICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IHByZXZOb2RlID0gb3JkZXJpbmdbaW5kZXggLSAxXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh1c2VNYXAgPT09IHRydWUgJiYgbWFwW3ByZXZOb2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB8fFxuICAgICAgICAgIHVzZU1hcCA9PT0gZmFsc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcHJldlBvcyA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKHByZXZOb2RlKTtcbiAgICAgICAgICBtaW5TcGFjZSA9IHBvc2l0aW9uIC0gcHJldlBvcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXggIT0gb3JkZXJpbmcubGVuZ3RoIC0gMSkge1xuICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IG9yZGVyaW5nW2luZGV4ICsgMV07XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodXNlTWFwID09PSB0cnVlICYmIG1hcFtuZXh0Tm9kZS5pZF0gPT09IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgICB1c2VNYXAgPT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG5leHRQb3MgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihuZXh0Tm9kZSk7XG4gICAgICAgICAgbWF4U3BhY2UgPSBNYXRoLm1pbihtYXhTcGFjZSwgbmV4dFBvcyAtIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gW21pblNwYWNlLCBtYXhTcGFjZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbMCwgMF07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdlIHVzZSB0aGlzIG1ldGhvZCB0byBjZW50ZXIgYSBwYXJlbnQgbm9kZSBhbmQgY2hlY2sgaWYgaXQgZG9lcyBub3QgY3Jvc3Mgb3RoZXIgbm9kZXMgd2hlbiBpdCBkb2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jZW50ZXJQYXJlbnQobm9kZSkge1xuICAgIGlmICh0aGlzLmhpZXJhcmNoaWNhbC5wYXJlbnRSZWZlcmVuY2Vbbm9kZS5pZF0pIHtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSB0aGlzLmhpZXJhcmNoaWNhbC5wYXJlbnRSZWZlcmVuY2Vbbm9kZS5pZF07XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFyZW50SWQgPSBwYXJlbnRzW2ldO1xuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5ib2R5Lm5vZGVzW3BhcmVudElkXTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmhpZXJhcmNoaWNhbC5jaGlsZHJlblJlZmVyZW5jZVtwYXJlbnRJZF07XG5cbiAgICAgICAgaWYgKGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBnZXQgdGhlIHJhbmdlIG9mIHRoZSBjaGlsZHJlblxuICAgICAgICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gdGhpcy5fZ2V0Q2VudGVyUG9zaXRpb24oY2hpbGRyZW4pO1xuXG4gICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihwYXJlbnROb2RlKTtcbiAgICAgICAgICBjb25zdCBbbWluU3BhY2UsIG1heFNwYWNlXSA9IHRoaXMuX2dldFNwYWNlQXJvdW5kTm9kZShwYXJlbnROb2RlKTtcbiAgICAgICAgICBjb25zdCBkaWZmID0gcG9zaXRpb24gLSBuZXdQb3NpdGlvbjtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZGlmZiA8IDAgJiZcbiAgICAgICAgICAgICAgTWF0aC5hYnMoZGlmZikgPFxuICAgICAgICAgICAgICAgIG1heFNwYWNlIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZykgfHxcbiAgICAgICAgICAgIChkaWZmID4gMCAmJlxuICAgICAgICAgICAgICBNYXRoLmFicyhkaWZmKSA8IG1pblNwYWNlIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKHBhcmVudE5vZGUsIG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBwbGFjZXMgdGhlIG5vZGVzIG9uIHRoZSBjYW52YXMgYmFzZWQgb24gdGhlIGhpZXJhcmNoaWFsIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGRpc3RyaWJ1dGlvbiB8IG9idGFpbmVkIGJ5IHRoZSBmdW5jdGlvbiB0aGlzLl9nZXREaXN0cmlidXRpb24oKVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BsYWNlTm9kZXNCeUhpZXJhcmNoeShkaXN0cmlidXRpb24pIHtcbiAgICB0aGlzLnBvc2l0aW9uZWROb2RlcyA9IHt9O1xuICAgIC8vIHN0YXJ0IHBsYWNpbmcgYWxsIHRoZSBsZXZlbCAwIG5vZGVzIGZpcnN0LiBUaGVuIHJlY3Vyc2l2ZWx5IHBvc2l0aW9uIHRoZWlyIGJyYW5jaGVzLlxuICAgIGZvciAoY29uc3QgbGV2ZWwgaW4gZGlzdHJpYnV0aW9uKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRpc3RyaWJ1dGlvbiwgbGV2ZWwpKSB7XG4gICAgICAgIC8vIHNvcnQgbm9kZXMgaW4gbGV2ZWwgYnkgcG9zaXRpb246XG4gICAgICAgIGxldCBub2RlQXJyYXkgPSBPYmplY3Qua2V5cyhkaXN0cmlidXRpb25bbGV2ZWxdKTtcbiAgICAgICAgbm9kZUFycmF5ID0gdGhpcy5faW5kZXhBcnJheVRvTm9kZXMobm9kZUFycmF5KTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24uc29ydChub2RlQXJyYXkpO1xuICAgICAgICBsZXQgaGFuZGxlZE5vZGVDb3VudCA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gbm9kZUFycmF5W2ldO1xuICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uZWROb2Rlc1tub2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZztcbiAgICAgICAgICAgIGxldCBwb3MgPSBzcGFjaW5nICogaGFuZGxlZE5vZGVDb3VudDtcbiAgICAgICAgICAgIC8vIFdlIGdldCB0aGUgWCBvciBZIHZhbHVlcyB3ZSBuZWVkIGFuZCBzdG9yZSB0aGVtIGluIHBvcyBhbmQgcHJldmlvdXNQb3MuXG4gICAgICAgICAgICAvLyBUaGUgZ2V0IGFuZCBzZXQgbWFrZSBzdXJlIHdlIGdldCBYIG9yIFlcbiAgICAgICAgICAgIGlmIChoYW5kbGVkTm9kZUNvdW50ID4gMCkge1xuICAgICAgICAgICAgICBwb3MgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihub2RlQXJyYXlbaSAtIDFdKSArIHNwYWNpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbi5zZXRQb3NpdGlvbihub2RlLCBwb3MsIGxldmVsKTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25BbmRDb250aW51ZShub2RlLCBsZXZlbCwgcG9zKTtcblxuICAgICAgICAgICAgaGFuZGxlZE5vZGVDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgcmVjdXJzaXZlbHkgY2FsbGVkIGZ1bmN0aW9uIHRvIGVudW1lcmF0ZSB0aGUgYnJhbmNoZXMgZnJvbSB0aGUgbGFyZ2VzdCBodWJzIGFuZCBwbGFjZSB0aGUgbm9kZXNcbiAgICogb24gYSBYIHBvc2l0aW9uIHRoYXQgZW5zdXJlcyB0aGVyZSB3aWxsIGJlIG5vIG92ZXJsYXAuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gcGFyZW50SWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhcmVudExldmVsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGxhY2VCcmFuY2hOb2RlcyhwYXJlbnRJZCwgcGFyZW50TGV2ZWwpIHtcbiAgICBjb25zdCBjaGlsZFJlZiA9IHRoaXMuaGllcmFyY2hpY2FsLmNoaWxkcmVuUmVmZXJlbmNlW3BhcmVudElkXTtcblxuICAgIC8vIGlmIHRoaXMgaXMgbm90IGEgcGFyZW50LCBjYW5jZWwgdGhlIHBsYWNpbmcuIFRoaXMgY2FuIGhhcHBlbiB3aXRoIG11bHRpcGxlIHBhcmVudHMgdG8gb25lIGNoaWxkLlxuICAgIGlmIChjaGlsZFJlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGEgbGlzdCBvZiBjaGlsZE5vZGVzXG4gICAgY29uc3QgY2hpbGROb2RlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRSZWYubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkTm9kZXMucHVzaCh0aGlzLmJvZHkubm9kZXNbY2hpbGRSZWZbaV1dKTtcbiAgICB9XG5cbiAgICAvLyB1c2UgdGhlIHBvc2l0aW9ucyB0byBvcmRlciB0aGUgbm9kZXMuXG4gICAgdGhpcy5kaXJlY3Rpb24uc29ydChjaGlsZE5vZGVzKTtcblxuICAgIC8vIHBvc2l0aW9uIHRoZSBjaGlsZE5vZGVzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgY29uc3QgY2hpbGROb2RlTGV2ZWwgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbY2hpbGROb2RlLmlkXTtcbiAgICAgIC8vIGNoZWNrIGlmIHRoZSBjaGlsZCBub2RlIGlzIGJlbG93IHRoZSBwYXJlbnQgbm9kZSBhbmQgaWYgaXQgaGFzIGFscmVhZHkgYmVlbiBwb3NpdGlvbmVkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGlsZE5vZGVMZXZlbCA+IHBhcmVudExldmVsICYmXG4gICAgICAgIHRoaXMucG9zaXRpb25lZE5vZGVzW2NoaWxkTm9kZS5pZF0gPT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIC8vIGdldCB0aGUgYW1vdW50IG9mIHNwYWNlIHJlcXVpcmVkIGZvciB0aGlzIG5vZGUuIElmIHBhcmVudCB0aGUgd2lkdGggaXMgYmFzZWQgb24gdGhlIGFtb3VudCBvZiBjaGlsZHJlbi5cbiAgICAgICAgY29uc3Qgc3BhY2luZyA9IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwubm9kZVNwYWNpbmc7XG4gICAgICAgIGxldCBwb3M7XG5cbiAgICAgICAgLy8gd2UgZ2V0IHRoZSBYIG9yIFkgdmFsdWVzIHdlIG5lZWQgYW5kIHN0b3JlIHRoZW0gaW4gcG9zIGFuZCBwcmV2aW91c1Bvcy5cbiAgICAgICAgLy8gVGhlIGdldCBhbmQgc2V0IG1ha2Ugc3VyZSB3ZSBnZXQgWCBvciBZXG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgcG9zID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24odGhpcy5ib2R5Lm5vZGVzW3BhcmVudElkXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcG9zID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24oY2hpbGROb2Rlc1tpIC0gMV0pICsgc3BhY2luZztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpcmVjdGlvbi5zZXRQb3NpdGlvbihjaGlsZE5vZGUsIHBvcywgY2hpbGROb2RlTGV2ZWwpO1xuICAgICAgICB0aGlzLl92YWxpZGF0ZVBvc2l0aW9uQW5kQ29udGludWUoY2hpbGROb2RlLCBjaGlsZE5vZGVMZXZlbCwgcG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjZW50ZXIgdGhlIHBhcmVudCBub2Rlcy5cbiAgICBjb25zdCBjZW50ZXIgPSB0aGlzLl9nZXRDZW50ZXJQb3NpdGlvbihjaGlsZE5vZGVzKTtcbiAgICB0aGlzLmRpcmVjdGlvbi5zZXRQb3NpdGlvbih0aGlzLmJvZHkubm9kZXNbcGFyZW50SWRdLCBjZW50ZXIsIHBhcmVudExldmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgZm9yIG92ZXJsYXAgYW5kIGlmIHJlcXVpcmVkIHNoaWZ0cyB0aGUgYnJhbmNoLiBJdCBhbHNvIGtlZXBzIHJlY29yZHMgb2YgcG9zaXRpb25lZCBub2Rlcy5cbiAgICogRmluYWxseSBpdCB3aWxsIGNhbGwgX3BsYWNlQnJhbmNoTm9kZXMgdG8gcGxhY2UgdGhlIGJyYW5jaCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbFxuICAgKiBAcGFyYW0ge251bWJlcn0gcG9zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdmFsaWRhdGVQb3NpdGlvbkFuZENvbnRpbnVlKG5vZGUsIGxldmVsLCBwb3MpIHtcbiAgICAvLyBUaGlzIG1ldGhvZCBvbmx5IHdvcmtzIGZvciBmb3JtYWwgdHJlZXMgYW5kIGZvcm1hbCBmb3Jlc3RzXG4gICAgLy8gRWFybHkgZXhpdCBpZiB0aGlzIGlzIG5vdCB0aGUgY2FzZVxuICAgIGlmICghdGhpcy5oaWVyYXJjaGljYWwuaXNUcmVlKSByZXR1cm47XG5cbiAgICAvLyBpZiBvdmVybGFwIGhhcyBiZWVuIGRldGVjdGVkLCB3ZSBzaGlmdCB0aGUgYnJhbmNoXG4gICAgaWYgKHRoaXMubGFzdE5vZGVPbkxldmVsW2xldmVsXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1BvcyA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKFxuICAgICAgICB0aGlzLmJvZHkubm9kZXNbdGhpcy5sYXN0Tm9kZU9uTGV2ZWxbbGV2ZWxdXVxuICAgICAgKTtcbiAgICAgIGlmIChwb3MgLSBwcmV2aW91c1BvcyA8IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwubm9kZVNwYWNpbmcpIHtcbiAgICAgICAgY29uc3QgZGlmZiA9IHByZXZpb3VzUG9zICsgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZyAtIHBvcztcbiAgICAgICAgY29uc3Qgc2hhcmVkUGFyZW50ID0gdGhpcy5fZmluZENvbW1vblBhcmVudChcbiAgICAgICAgICB0aGlzLmxhc3ROb2RlT25MZXZlbFtsZXZlbF0sXG4gICAgICAgICAgbm9kZS5pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zaGlmdEJsb2NrKHNoYXJlZFBhcmVudC53aXRoQ2hpbGQsIGRpZmYpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGFzdE5vZGVPbkxldmVsW2xldmVsXSA9IG5vZGUuaWQ7IC8vIHN0b3JlIGNoYW5nZSBpbiBwb3NpdGlvbi5cbiAgICB0aGlzLnBvc2l0aW9uZWROb2Rlc1tub2RlLmlkXSA9IHRydWU7XG4gICAgdGhpcy5fcGxhY2VCcmFuY2hOb2Rlcyhub2RlLmlkLCBsZXZlbCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjZWl2ZXMgYW4gYXJyYXkgd2l0aCBub2RlIGluZGljZXMgYW5kIHJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgYWN0dWFsIG5vZGUgcmVmZXJlbmNlcy5cbiAgICogVXNlZCBmb3Igc29ydGluZyBiYXNlZCBvbiBub2RlIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGUuaWQ+fSBpZEFycmF5XG4gICAqIEByZXR1cm5zIHtBcnJheS48Tm9kZT59XG4gICAqL1xuICBfaW5kZXhBcnJheVRvTm9kZXMoaWRBcnJheSkge1xuICAgIGNvbnN0IGFycmF5ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZEFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnJheS5wdXNoKHRoaXMuYm9keS5ub2Rlc1tpZEFycmF5W2ldXSk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgZGlzdHJpYnV0aW9uIG9mIGxldmVscyBiYXNlZCBvbiBodWJzaXplXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0RGlzdHJpYnV0aW9uKCkge1xuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbiA9IHt9O1xuICAgIGxldCBub2RlSWQsIG5vZGU7XG5cbiAgICAvLyB3ZSBmaXggWSBiZWNhdXNlIHRoZSBoaWVyYXJjaHkgaXMgdmVydGljYWwsXG4gICAgLy8gd2UgZml4IFggc28gd2UgZG8gbm90IGdpdmUgYSBub2RlIGFuIHggcG9zaXRpb24gZm9yIGEgc2Vjb25kIHRpbWUuXG4gICAgLy8gdGhlIGZpeCBvZiBYIGlzIHJlbW92ZWQgYWZ0ZXIgdGhlIHggdmFsdWUgaGFzIGJlZW4gc2V0LlxuICAgIGZvciAobm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkubm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgICBjb25zdCBsZXZlbCA9XG4gICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW25vZGVJZF0gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlSWRdO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbi5maXgobm9kZSwgbGV2ZWwpO1xuICAgICAgICBpZiAoZGlzdHJpYnV0aW9uW2xldmVsXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGlzdHJpYnV0aW9uW2xldmVsXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGRpc3RyaWJ1dGlvbltsZXZlbF1bbm9kZUlkXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaXN0cmlidXRpb247XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBhY3RpdmUgKGkuZS4gdmlzaWJsZSkgZWRnZXMgZm9yIHRoaXMgbm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHJldHVybnMge0FycmF5Ljx2aXMuRWRnZT59IEFycmF5IG9mIGVkZ2UgaW5zdGFuY2VzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0QWN0aXZlRWRnZXMobm9kZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgZm9yRWFjaChub2RlLmVkZ2VzLCAoZWRnZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuYm9keS5lZGdlSW5kaWNlcy5pbmRleE9mKGVkZ2UuaWQpICE9PSAtMSkge1xuICAgICAgICByZXN1bHQucHVzaChlZGdlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBodWJzaXplcyBmb3IgYWxsIGFjdGl2ZSBub2Rlcy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRIdWJTaXplcygpIHtcbiAgICBjb25zdCBodWJTaXplcyA9IHt9O1xuICAgIGNvbnN0IG5vZGVJZHMgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG5cbiAgICBmb3JFYWNoKG5vZGVJZHMsIChub2RlSWQpID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgIGNvbnN0IGh1YlNpemUgPSB0aGlzLl9nZXRBY3RpdmVFZGdlcyhub2RlKS5sZW5ndGg7XG4gICAgICBodWJTaXplc1todWJTaXplXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICAvLyBNYWtlIGFuIGFycmF5IG9mIHRoZSBzaXplIHNvcnRlZCBkZXNjZW5kaW5nXG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yRWFjaChodWJTaXplcywgKHNpemUpID0+IHtcbiAgICAgIHJlc3VsdC5wdXNoKE51bWJlcihzaXplKSk7XG4gICAgfSk7XG5cbiAgICByZXN1bHQuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGIgLSBhO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBub2RlcyBpbiBsZXZlbHMgYmFzZWQgb24gdGhlIHJlY3Vyc2l2ZSBicmFuY2hpbmcgZnJvbSB0aGUgbGFyZ2VzdCBodWJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RldGVybWluZUxldmVsc0J5SHVic2l6ZSgpIHtcbiAgICBjb25zdCBsZXZlbERvd25zdHJlYW0gPSAobm9kZUEsIG5vZGVCKSA9PiB7XG4gICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbERvd25zdHJlYW0obm9kZUEsIG5vZGVCKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaHViU2l6ZXMgPSB0aGlzLl9nZXRIdWJTaXplcygpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBodWJTaXplcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgaHViU2l6ZSA9IGh1YlNpemVzW2ldO1xuICAgICAgaWYgKGh1YlNpemUgPT09IDApIGJyZWFrO1xuXG4gICAgICBmb3JFYWNoKHRoaXMuYm9keS5ub2RlSW5kaWNlcywgKG5vZGVJZCkgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG5cbiAgICAgICAgaWYgKGh1YlNpemUgPT09IHRoaXMuX2dldEFjdGl2ZUVkZ2VzKG5vZGUpLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuX2NyYXdsTmV0d29yayhsZXZlbERvd25zdHJlYW0sIG5vZGVJZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUT0RPOiByZWxlYXNlIGZlYXR1cmVcbiAgICogVE9ETzogRGV0ZXJtaW5lIGlmIHRoaXMgZmVhdHVyZSBpcyBuZWVkZWQgYXQgYWxsXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lTGV2ZWxzQ3VzdG9tQ2FsbGJhY2soKSB7XG4gICAgY29uc3QgbWluTGV2ZWwgPSAxMDAwMDA7XG5cbiAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBjb21lIGZyb20gb3B0aW9ucy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gVGhpcyBzaG91bGQgZXZlbnR1YWxseSBiZSBpbXBsZW1lbnRlZCB3aXRoIHRoZXNlIHBhcmFtZXRlcnMgdXNlZC5cbiAgICBjb25zdCBjdXN0b21DYWxsYmFjayA9IGZ1bmN0aW9uIChub2RlQSwgbm9kZUIsIGVkZ2UpIHt9O1xuXG4gICAgLy8gVE9ETzogcGVyaGFwcyBtb3ZlIHRvIEhpZXJhcmNoaWNhbFN0YXR1cy5cbiAgICAvLyAgICAgICBCdXQgSSBjdXJyZW50bHkgZG9uJ3Qgc2VlIHRoZSBwb2ludCwgdGhpcyBtZXRob2QgaXMgbm90IHVzZWQuXG4gICAgY29uc3QgbGV2ZWxCeURpcmVjdGlvbiA9IChub2RlQSwgbm9kZUIsIGVkZ2UpID0+IHtcbiAgICAgIGxldCBsZXZlbEEgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZUEuaWRdO1xuICAgICAgLy8gc2V0IGluaXRpYWwgbGV2ZWxcbiAgICAgIGlmIChsZXZlbEEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXZlbEEgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZUEuaWRdID0gbWluTGV2ZWw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpZmYgPSBjdXN0b21DYWxsYmFjayhcbiAgICAgICAgTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKG5vZGVBLCBcIm5vZGVcIiksXG4gICAgICAgIE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhub2RlQiwgXCJub2RlXCIpLFxuICAgICAgICBOZXR3b3JrVXRpbC5jbG9uZU9wdGlvbnMoZWRnZSwgXCJlZGdlXCIpXG4gICAgICApO1xuXG4gICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZUIuaWRdID0gbGV2ZWxBICsgZGlmZjtcbiAgICB9O1xuXG4gICAgdGhpcy5fY3Jhd2xOZXR3b3JrKGxldmVsQnlEaXJlY3Rpb24pO1xuICAgIHRoaXMuaGllcmFyY2hpY2FsLnNldE1pbkxldmVsVG9aZXJvKHRoaXMuYm9keS5ub2Rlcyk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb2NhdGUgbm9kZXMgaW4gbGV2ZWxzIGJhc2VkIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGVkZ2VzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RldGVybWluZUxldmVsc0RpcmVjdGVkKCkge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLnJlZHVjZSgoYWNjLCBpZCkgPT4ge1xuICAgICAgYWNjLnNldChpZCwgdGhpcy5ib2R5Lm5vZGVzW2lkXSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG5ldyBNYXAoKSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5zaGFrZVRvd2FyZHMgPT09IFwicm9vdHNcIikge1xuICAgICAgdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzID0gZmlsbExldmVsc0J5RGlyZWN0aW9uUm9vdHMobm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHMgPSBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25MZWF2ZXMobm9kZXMpO1xuICAgIH1cblxuICAgIHRoaXMuaGllcmFyY2hpY2FsLnNldE1pbkxldmVsVG9aZXJvKHRoaXMuYm9keS5ub2Rlcyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBib29ra2VlcGluZyBvZiBwYXJlbnQgYW5kIGNoaWxkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dlbmVyYXRlTWFwKCkge1xuICAgIGNvbnN0IGZpbGxJblJlbGF0aW9ucyA9IChwYXJlbnROb2RlLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW2NoaWxkTm9kZS5pZF0gPlxuICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbcGFyZW50Tm9kZS5pZF1cbiAgICAgICkge1xuICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5hZGRSZWxhdGlvbihwYXJlbnROb2RlLmlkLCBjaGlsZE5vZGUuaWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLl9jcmF3bE5ldHdvcmsoZmlsbEluUmVsYXRpb25zKTtcbiAgICB0aGlzLmhpZXJhcmNoaWNhbC5jaGVja0lmVHJlZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyYXdsIG92ZXIgdGhlIGVudGlyZSBuZXR3b3JrIGFuZCB1c2UgYSBjYWxsYmFjayBvbiBlYWNoIG5vZGUgY291cGxlIHRoYXQgaXMgY29ubmVjdGVkIHRvIGVhY2ggb3RoZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFjaz1mdW5jdGlvbigpe31dICAgICAgICAgIHwgd2lsbCByZWNlaXZlIG5vZGVBLCBub2RlQiBhbmQgdGhlIGNvbm5lY3RpbmcgZWRnZS4gQSBhbmQgQiBhcmUgZGlzdGluY3QuXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gc3RhcnRpbmdOb2RlSWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmF3bE5ldHdvcmsoY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fSwgc3RhcnRpbmdOb2RlSWQpIHtcbiAgICBjb25zdCBwcm9ncmVzcyA9IHt9O1xuXG4gICAgY29uc3QgY3Jhd2xlciA9IChub2RlLCB0cmVlKSA9PiB7XG4gICAgICBpZiAocHJvZ3Jlc3Nbbm9kZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5zZXRUcmVlSW5kZXgobm9kZSwgdHJlZSk7XG5cbiAgICAgICAgcHJvZ3Jlc3Nbbm9kZS5pZF0gPSB0cnVlO1xuICAgICAgICBsZXQgY2hpbGROb2RlO1xuICAgICAgICBjb25zdCBlZGdlcyA9IHRoaXMuX2dldEFjdGl2ZUVkZ2VzKG5vZGUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2ldO1xuICAgICAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGVkZ2UudG9JZCA9PSBub2RlLmlkKSB7XG4gICAgICAgICAgICAgIC8vIE5vdCAnPT09JyBiZWNhdXNlIGlkJ3MgY2FuIGJlIHN0cmluZyBhbmQgbnVtZXJpY1xuICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBlZGdlLmZyb207XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBlZGdlLnRvO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobm9kZS5pZCAhPSBjaGlsZE5vZGUuaWQpIHtcbiAgICAgICAgICAgICAgLy8gTm90ICchPT0nIGJlY2F1c2UgaWQncyBjYW4gYmUgc3RyaW5nIGFuZCBudW1lcmljXG4gICAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIGNoaWxkTm9kZSwgZWRnZSk7XG4gICAgICAgICAgICAgIGNyYXdsZXIoY2hpbGROb2RlLCB0cmVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHN0YXJ0aW5nTm9kZUlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENyYXdsIG92ZXIgYWxsIG5vZGVzXG4gICAgICBsZXQgdHJlZUluZGV4ID0gMDsgLy8gU2VydmVzIHRvIHBhc3MgYSB1bmlxdWUgaWQgZm9yIHRoZSBjdXJyZW50IGRpc3RpbmN0IHRyZWVcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZUlkID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldO1xuXG4gICAgICAgIGlmIChwcm9ncmVzc1tub2RlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgICAgY3Jhd2xlcihub2RlLCB0cmVlSW5kZXgpO1xuICAgICAgICAgIHRyZWVJbmRleCArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyYXdsIGZyb20gdGhlIGdpdmVuIHN0YXJ0aW5nIG5vZGVcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbc3RhcnRpbmdOb2RlSWRdO1xuICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiTm9kZSBub3QgZm91bmQ6XCIsIHN0YXJ0aW5nTm9kZUlkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY3Jhd2xlcihub2RlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hpZnQgYSBicmFuY2ggYSBjZXJ0YWluIGRpc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gcGFyZW50SWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpZmZcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zaGlmdEJsb2NrKHBhcmVudElkLCBkaWZmKSB7XG4gICAgY29uc3QgcHJvZ3Jlc3MgPSB7fTtcbiAgICBjb25zdCBzaGlmdGVyID0gKHBhcmVudElkKSA9PiB7XG4gICAgICBpZiAocHJvZ3Jlc3NbcGFyZW50SWRdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHByb2dyZXNzW3BhcmVudElkXSA9IHRydWU7XG4gICAgICB0aGlzLmRpcmVjdGlvbi5zaGlmdChwYXJlbnRJZCwgZGlmZik7XG5cbiAgICAgIGNvbnN0IGNoaWxkUmVmID0gdGhpcy5oaWVyYXJjaGljYWwuY2hpbGRyZW5SZWZlcmVuY2VbcGFyZW50SWRdO1xuICAgICAgaWYgKGNoaWxkUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZFJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHNoaWZ0ZXIoY2hpbGRSZWZbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBzaGlmdGVyKHBhcmVudElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgY29tbW9uIHBhcmVudCBiZXR3ZWVuIGJyYW5jaGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IGNoaWxkQVxuICAgKiBAcGFyYW0ge05vZGUuaWR9IGNoaWxkQlxuICAgKiBAcmV0dXJucyB7e2ZvdW5kUGFyZW50LCB3aXRoQ2hpbGR9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpbmRDb21tb25QYXJlbnQoY2hpbGRBLCBjaGlsZEIpIHtcbiAgICBjb25zdCBwYXJlbnRzID0ge307XG4gICAgY29uc3QgaXRlcmF0ZVBhcmVudHMgPSAocGFyZW50cywgY2hpbGQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudFJlZiA9IHRoaXMuaGllcmFyY2hpY2FsLnBhcmVudFJlZmVyZW5jZVtjaGlsZF07XG4gICAgICBpZiAocGFyZW50UmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnRSZWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRSZWZbaV07XG4gICAgICAgICAgcGFyZW50c1twYXJlbnRdID0gdHJ1ZTtcbiAgICAgICAgICBpdGVyYXRlUGFyZW50cyhwYXJlbnRzLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmaW5kUGFyZW50ID0gKHBhcmVudHMsIGNoaWxkKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnRSZWYgPSB0aGlzLmhpZXJhcmNoaWNhbC5wYXJlbnRSZWZlcmVuY2VbY2hpbGRdO1xuICAgICAgaWYgKHBhcmVudFJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50UmVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50ID0gcGFyZW50UmVmW2ldO1xuICAgICAgICAgIGlmIChwYXJlbnRzW3BhcmVudF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZm91bmRQYXJlbnQ6IHBhcmVudCwgd2l0aENoaWxkOiBjaGlsZCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBicmFuY2ggPSBmaW5kUGFyZW50KHBhcmVudHMsIHBhcmVudCk7XG4gICAgICAgICAgaWYgKGJyYW5jaC5mb3VuZFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGZvdW5kUGFyZW50OiBudWxsLCB3aXRoQ2hpbGQ6IGNoaWxkIH07XG4gICAgfTtcblxuICAgIGl0ZXJhdGVQYXJlbnRzKHBhcmVudHMsIGNoaWxkQSk7XG4gICAgcmV0dXJuIGZpbmRQYXJlbnQocGFyZW50cywgY2hpbGRCKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHN0cmF0ZWd5IHBhdHRlcm4gZm9yIGhhbmRsaW5nIHRoZSBjb29yZGluYXRlcyBnaXZlbiB0aGUgY3VycmVudCBkaXJlY3Rpb24uXG4gICAqXG4gICAqIFRoZSBpbmRpdmlkdWFsIGluc3RhbmNlcyBjb250YWluIGFsbCB0aGUgb3BlcmF0aW9ucyBhbmQgZGF0YSBzcGVjaWZpYyB0byBhIGxheW91dCBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvc2l0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkb05vdFVwZGF0ZT1mYWxzZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNldERpcmVjdGlvblN0cmF0ZWd5KCkge1xuICAgIGNvbnN0IGlzVmVydGljYWwgPVxuICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5kaXJlY3Rpb24gPT09IFwiVURcIiB8fFxuICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5kaXJlY3Rpb24gPT09IFwiRFVcIjtcblxuICAgIGlmIChpc1ZlcnRpY2FsKSB7XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9IG5ldyBWZXJ0aWNhbFN0cmF0ZWd5KHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9IG5ldyBIb3Jpem9udGFsU3RyYXRlZ3kodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgY2VudGVyIHBvc2l0aW9uIG9mIGEgYnJhbmNoIGZyb20gdGhlIHBhc3NlZCBsaXN0IG9mIGNoaWxkIG5vZGVzXG4gICAqXG4gICAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBwb3NpdGlvbnMgb2YgYWxsIHRoZSBjaGlsZCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZXx2aXMuTm9kZS5pZD59IGNoaWxkTm9kZXMgIEFycmF5IG9mIGVpdGhlciBjaGlsZCBub2RlcyBvciBub2RlIGlkJ3NcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRDZW50ZXJQb3NpdGlvbihjaGlsZE5vZGVzKSB7XG4gICAgbGV0IG1pblBvcyA9IDFlOTtcbiAgICBsZXQgbWF4UG9zID0gLTFlOTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNoaWxkTm9kZTtcbiAgICAgIGlmIChjaGlsZE5vZGVzW2ldLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2Rlc1tpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZUlkID0gY2hpbGROb2Rlc1tpXTtcbiAgICAgICAgY2hpbGROb2RlID0gdGhpcy5ib2R5Lm5vZGVzW2NoaWxkTm9kZUlkXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihjaGlsZE5vZGUpO1xuICAgICAgbWluUG9zID0gTWF0aC5taW4obWluUG9zLCBwb3NpdGlvbik7XG4gICAgICBtYXhQb3MgPSBNYXRoLm1heChtYXhQb3MsIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMC41ICogKG1pblBvcyArIG1heFBvcyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGF5b3V0RW5naW5lO1xuIiwgImltcG9ydCBcIi4vTWFuaXB1bGF0aW9uU3lzdGVtLmNzc1wiO1xuXG5pbXBvcnQgeyBIYW1tZXIsIGRlZXBFeHRlbmQsIHJlY3Vyc2l2ZURPTURlbGV0ZSB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCB7IHY0IGFzIHJhbmRvbVVVSUQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgb25Ub3VjaCB9IGZyb20gXCIuLi8uLi9oYW1tZXJVdGlsXCI7XG5cbi8qKlxuICogQ2xlYXJzIHRoZSB0b29sYmFyIGRpdiBlbGVtZW50IG9mIGNoaWxkcmVuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgTWFuaXB1bGF0aW9uU3lzdGVtIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAgICogQHBhcmFtIHtTZWxlY3Rpb25IYW5kbGVyfSBzZWxlY3Rpb25IYW5kbGVyXG4gICAqIEBwYXJhbSB7SW50ZXJhY3Rpb25IYW5kbGVyfSBpbnRlcmFjdGlvbkhhbmRsZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGNhbnZhcywgc2VsZWN0aW9uSGFuZGxlciwgaW50ZXJhY3Rpb25IYW5kbGVyKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBzZWxlY3Rpb25IYW5kbGVyO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyID0gaW50ZXJhY3Rpb25IYW5kbGVyO1xuXG4gICAgdGhpcy5lZGl0TW9kZSA9IGZhbHNlO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdE1vZGVEaXYgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jbG9zZURpdiA9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuX2RvbUV2ZW50TGlzdGVuZXJDbGVhbnVwUXVldWUgPSBbXTtcbiAgICB0aGlzLnRlbXBvcmFyeVVJRnVuY3Rpb25zID0ge307XG4gICAgdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucyA9IFtdO1xuXG4gICAgdGhpcy50b3VjaFRpbWUgPSAwO1xuICAgIHRoaXMudGVtcG9yYXJ5SWRzID0geyBub2RlczogW10sIGVkZ2VzOiBbXSB9O1xuICAgIHRoaXMuZ3VpRW5hYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuaW5Nb2RlID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgaW5pdGlhbGx5QWN0aXZlOiBmYWxzZSxcbiAgICAgIGFkZE5vZGU6IHRydWUsXG4gICAgICBhZGRFZGdlOiB0cnVlLFxuICAgICAgZWRpdE5vZGU6IHVuZGVmaW5lZCxcbiAgICAgIGVkaXRFZGdlOiB0cnVlLFxuICAgICAgZGVsZXRlTm9kZTogdHJ1ZSxcbiAgICAgIGRlbGV0ZUVkZ2U6IHRydWUsXG4gICAgICBjb250cm9sTm9kZVN0eWxlOiB7XG4gICAgICAgIHNoYXBlOiBcImRvdFwiLFxuICAgICAgICBzaXplOiA2LFxuICAgICAgICBjb2xvcjoge1xuICAgICAgICAgIGJhY2tncm91bmQ6IFwiI2ZmMDAwMFwiLFxuICAgICAgICAgIGJvcmRlcjogXCIjM2MzYzNjXCIsXG4gICAgICAgICAgaGlnaGxpZ2h0OiB7IGJhY2tncm91bmQ6IFwiIzA3Zjk2OFwiLCBib3JkZXI6IFwiIzNjM2MzY1wiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGJvcmRlcldpZHRoOiAyLFxuICAgICAgICBib3JkZXJXaWR0aFNlbGVjdGVkOiAyLFxuICAgICAgfSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLl9jbGVhbigpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFDaGFuZ2VkXCIsIHRoaXMuX3Jlc3RvcmUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfcmVzZXREYXRhXCIsIHRoaXMuX3Jlc3RvcmUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgc29tZXRoaW5nIGNoYW5nZXMgaW4gdGhlIGRhdGEgZHVyaW5nIGVkaXRpbmcsIHN3aXRjaCBiYWNrIHRvIHRoZSBpbml0aWFsIGRhdGFtYW5pcHVsYXRpb24gc3RhdGUgYW5kIGNsb3NlIGFsbCBlZGl0IG1vZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc3RvcmUoKSB7XG4gICAgaWYgKHRoaXMuaW5Nb2RlICE9PSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbml0aWFsbHlBY3RpdmUgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlRWRpdE1vZGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBPcHRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhbGxPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBnbG9iYWxPcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMsIGFsbE9wdGlvbnMsIGdsb2JhbE9wdGlvbnMpIHtcbiAgICBpZiAoYWxsT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYWxsT3B0aW9ucy5sb2NhbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlID0gYWxsT3B0aW9ucy5sb2NhbGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlID0gZ2xvYmFsT3B0aW9ucy5sb2NhbGU7XG4gICAgICB9XG4gICAgICBpZiAoYWxsT3B0aW9ucy5sb2NhbGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXMgPSBhbGxPcHRpb25zLmxvY2FsZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlcyA9IGdsb2JhbE9wdGlvbnMubG9jYWxlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gb3B0aW9ucztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgZGVlcEV4dGVuZCh0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbml0aWFsbHlBY3RpdmUgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5lZGl0TW9kZSA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLl9zZXR1cCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBlZGl0LW1vZGUuIERyYXdzIHRoZSBET00gcmVxdWlyZWQgYW5kIGNsZWFucyB1cCBhZnRlciBpdHNlbGYuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0b2dnbGVFZGl0TW9kZSgpIHtcbiAgICBpZiAodGhpcy5lZGl0TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kaXNhYmxlRWRpdE1vZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIEVkaXQgTW9kZVxuICAgKi9cbiAgZW5hYmxlRWRpdE1vZGUoKSB7XG4gICAgdGhpcy5lZGl0TW9kZSA9IHRydWU7XG5cbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB0aGlzLmNsb3NlRGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB0aGlzLmVkaXRNb2RlRGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyBFZGl0IE1vZGVcbiAgICovXG4gIGRpc2FibGVFZGl0TW9kZSgpIHtcbiAgICB0aGlzLmVkaXRNb2RlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgIHRoaXMuY2xvc2VEaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgdGhpcy5lZGl0TW9kZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgdGhpcy5fY3JlYXRlRWRpdEJ1dHRvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBtYWluIHRvb2xiYXIuIFJlbW92ZXMgZnVuY3Rpb25zIGJvdW5kIHRvIHRoZSBzZWxlY3QgZXZlbnQuIEJpbmRzIGFsbCB0aGUgYnV0dG9ucyBvZiB0aGUgdG9vbGJhci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNob3dNYW5pcHVsYXRvclRvb2xiYXIoKSB7XG4gICAgLy8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgYW55IGJvdW5kIGZ1bmN0aW9ucyBvciBldmVudHMsIHJlbW92ZSBjb250cm9sIG5vZGVzLCByZXN0b3JlIHBoeXNpY3NcbiAgICB0aGlzLl9jbGVhbigpO1xuXG4gICAgLy8gcmVzZXQgZ2xvYmFsIHZhcmlhYmxlc1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NID0ge307XG5cbiAgICAvLyBpZiB0aGUgZ3VpIGlzIGVuYWJsZWQsIGRyYXcgYWxsIGVsZW1lbnRzLlxuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIGEgX3Jlc3RvcmUgd2lsbCBoaWRlIHRoZXNlIG1lbnVzXG4gICAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTtcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB0aGlzLmNsb3NlRGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cbiAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZUNvdW50ID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkTm9kZUNvdW50KCk7XG4gICAgICBjb25zdCBzZWxlY3RlZEVkZ2VDb3VudCA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZEVkZ2VDb3VudCgpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRUb3RhbENvdW50ID0gc2VsZWN0ZWROb2RlQ291bnQgKyBzZWxlY3RlZEVkZ2VDb3VudDtcbiAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdO1xuICAgICAgbGV0IG5lZWRTZXBlcmF0b3IgPSBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hZGROb2RlICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9jcmVhdGVBZGROb2RlQnV0dG9uKGxvY2FsZSk7XG4gICAgICAgIG5lZWRTZXBlcmF0b3IgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hZGRFZGdlICE9PSBmYWxzZSkge1xuICAgICAgICBpZiAobmVlZFNlcGVyYXRvciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZWVkU2VwZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jcmVhdGVBZGRFZGdlQnV0dG9uKGxvY2FsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgc2VsZWN0ZWROb2RlQ291bnQgPT09IDEgJiZcbiAgICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lZGl0Tm9kZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICApIHtcbiAgICAgICAgaWYgKG5lZWRTZXBlcmF0b3IgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLl9jcmVhdGVTZXBlcmF0b3IoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmVlZFNlcGVyYXRvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3JlYXRlRWRpdE5vZGVCdXR0b24obG9jYWxlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHNlbGVjdGVkRWRnZUNvdW50ID09PSAxICYmXG4gICAgICAgIHNlbGVjdGVkTm9kZUNvdW50ID09PSAwICYmXG4gICAgICAgIHRoaXMub3B0aW9ucy5lZGl0RWRnZSAhPT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICBpZiAobmVlZFNlcGVyYXRvciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZWVkU2VwZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jcmVhdGVFZGl0RWRnZUJ1dHRvbihsb2NhbGUpO1xuICAgICAgfVxuXG4gICAgICAvLyByZW1vdmUgYnV0dG9uc1xuICAgICAgaWYgKHNlbGVjdGVkVG90YWxDb3VudCAhPT0gMCkge1xuICAgICAgICBpZiAoc2VsZWN0ZWROb2RlQ291bnQgPiAwICYmIHRoaXMub3B0aW9ucy5kZWxldGVOb2RlICE9PSBmYWxzZSkge1xuICAgICAgICAgIGlmIChuZWVkU2VwZXJhdG9yID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVTZXBlcmF0b3IoNCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2NyZWF0ZURlbGV0ZUJ1dHRvbihsb2NhbGUpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHNlbGVjdGVkTm9kZUNvdW50ID09PSAwICYmXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmRlbGV0ZUVkZ2UgIT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChuZWVkU2VwZXJhdG9yID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVTZXBlcmF0b3IoNCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2NyZWF0ZURlbGV0ZUJ1dHRvbihsb2NhbGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGJpbmQgdGhlIGNsb3NlIGJ1dHRvblxuICAgICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHModGhpcy5jbG9zZURpdiwgdGhpcy50b2dnbGVFZGl0TW9kZS5iaW5kKHRoaXMpKTtcblxuICAgICAgLy8gcmVmcmVzaCB0aGlzIGJhciBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHNlbGVjdGVkXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kRXZlbnQoXG4gICAgICAgIFwic2VsZWN0XCIsXG4gICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhci5iaW5kKHRoaXMpXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHJlZHJhdyB0byBzaG93IGFueSBwb3NzaWJsZSBjaGFuZ2VzXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSB0b29sYmFyIGZvciBhZGRpbmcgTm9kZXNcbiAgICovXG4gIGFkZE5vZGVNb2RlKCkge1xuICAgIC8vIHdoZW4gdXNpbmcgdGhlIGd1aSwgZW5hYmxlIGVkaXQgbW9kZSBpZiBpdCB3YXNudCBhbHJlYWR5LlxuICAgIGlmICh0aGlzLmVkaXRNb2RlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgfVxuXG4gICAgLy8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgYW55IGJvdW5kIGZ1bmN0aW9ucyBvciBldmVudHMsIHJlbW92ZSBjb250cm9sIG5vZGVzLCByZXN0b3JlIHBoeXNpY3NcbiAgICB0aGlzLl9jbGVhbigpO1xuXG4gICAgdGhpcy5pbk1vZGUgPSBcImFkZE5vZGVcIjtcbiAgICBpZiAodGhpcy5ndWlFbmFibGVkID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBsb2NhbGUgPSB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXTtcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NID0ge307XG4gICAgICB0aGlzLl9jcmVhdGVCYWNrQnV0dG9uKGxvY2FsZSk7XG4gICAgICB0aGlzLl9jcmVhdGVTZXBlcmF0b3IoKTtcbiAgICAgIHRoaXMuX2NyZWF0ZURlc2NyaXB0aW9uKFxuICAgICAgICBsb2NhbGVbXCJhZGREZXNjcmlwdGlvblwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiYWRkRGVzY3JpcHRpb25cIl1cbiAgICAgICk7XG5cbiAgICAgIC8vIGJpbmQgdGhlIGNsb3NlIGJ1dHRvblxuICAgICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHModGhpcy5jbG9zZURpdiwgdGhpcy50b2dnbGVFZGl0TW9kZS5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kRXZlbnQoXCJjbGlja1wiLCB0aGlzLl9wZXJmb3JtQWRkTm9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxsIHRoZSBib3VuZCBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGVkaXRpbmcgb2YgdGhlIG5vZGUuIFRoZSBub2RlIGhhcyB0byBiZSBzZWxlY3RlZC5cbiAgICovXG4gIGVkaXROb2RlKCkge1xuICAgIC8vIHdoZW4gdXNpbmcgdGhlIGd1aSwgZW5hYmxlIGVkaXQgbW9kZSBpZiBpdCB3YXNudCBhbHJlYWR5LlxuICAgIGlmICh0aGlzLmVkaXRNb2RlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgfVxuXG4gICAgLy8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgYW55IGJvdW5kIGZ1bmN0aW9ucyBvciBldmVudHMsIHJlbW92ZSBjb250cm9sIG5vZGVzLCByZXN0b3JlIHBoeXNpY3NcbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2RlcygpWzBdO1xuICAgIGlmIChub2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaW5Nb2RlID0gXCJlZGl0Tm9kZVwiO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuZWRpdE5vZGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpZiAobm9kZS5pc0NsdXN0ZXIgIT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gZGVlcEV4dGVuZCh7fSwgbm9kZS5vcHRpb25zLCBmYWxzZSk7XG4gICAgICAgICAgZGF0YS54ID0gbm9kZS54O1xuICAgICAgICAgIGRhdGEueSA9IG5vZGUueTtcblxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWRpdE5vZGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZWRpdE5vZGUoZGF0YSwgKGZpbmFsaXplZERhdGEpID0+IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZWREYXRhICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmluTW9kZSA9PT0gXCJlZGl0Tm9kZVwiXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGZvciB3aGF0ZXZlciByZWFzb24gdGhlIG1vZGUgaGFzIGNoYW5nZXMgKGR1ZSB0byBkYXRhc2V0IGNoYW5nZSkgZGlzcmVnYXJkIHRoZSBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldERhdGFTZXQoKS51cGRhdGUoZmluYWxpemVkRGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIlRoZSBmdW5jdGlvbiBmb3IgZWRpdCBkb2VzIG5vdCBzdXBwb3J0IHR3byBhcmd1bWVudHMgKGRhdGEsIGNhbGxiYWNrKVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbGVydChcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdW1wiZWRpdENsdXN0ZXJFcnJvclwiXSB8fFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdENsdXN0ZXJFcnJvclwiXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIk5vIGZ1bmN0aW9uIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8gaGFuZGxlIHRoZSBlZGl0aW5nIG9mIG5vZGVzLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGUgdGhlIHRvb2xiYXIgdG8gY29ubmVjdCBub2Rlc1xuICAgKi9cbiAgYWRkRWRnZU1vZGUoKSB7XG4gICAgLy8gd2hlbiB1c2luZyB0aGUgZ3VpLCBlbmFibGUgZWRpdCBtb2RlIGlmIGl0IHdhc250IGFscmVhZHkuXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICB9XG5cbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICB0aGlzLmluTW9kZSA9IFwiYWRkRWRnZVwiO1xuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25ET00gPSB7fTtcbiAgICAgIHRoaXMuX2NyZWF0ZUJhY2tCdXR0b24obG9jYWxlKTtcbiAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigpO1xuICAgICAgdGhpcy5fY3JlYXRlRGVzY3JpcHRpb24oXG4gICAgICAgIGxvY2FsZVtcImVkZ2VEZXNjcmlwdGlvblwiXSB8fFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJlZGdlRGVzY3JpcHRpb25cIl1cbiAgICAgICk7XG5cbiAgICAgIC8vIGJpbmQgdGhlIGNsb3NlIGJ1dHRvblxuICAgICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHModGhpcy5jbG9zZURpdiwgdGhpcy50b2dnbGVFZGl0TW9kZS5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICAvLyB0ZW1wb3JhcmlseSBvdmVybG9hZCBmdW5jdGlvbnNcbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvblRvdWNoXCIsIHRoaXMuX2hhbmRsZUNvbm5lY3QuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25EcmFnRW5kXCIsIHRoaXMuX2ZpbmlzaENvbm5lY3QuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25EcmFnXCIsIHRoaXMuX2RyYWdDb250cm9sTm9kZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvblJlbGVhc2VcIiwgdGhpcy5fZmluaXNoQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbkRyYWdTdGFydFwiLCB0aGlzLl9kcmFnU3RhcnRFZGdlLmJpbmQodGhpcykpO1xuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uSG9sZFwiLCAoKSA9PiB7fSk7XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIHRoZSB0b29sYmFyIHRvIGVkaXQgZWRnZXNcbiAgICovXG4gIGVkaXRFZGdlTW9kZSgpIHtcbiAgICAvLyB3aGVuIHVzaW5nIHRoZSBndWksIGVuYWJsZSBlZGl0IG1vZGUgaWYgaXQgd2Fzbid0IGFscmVhZHkuXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICB9XG5cbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICB0aGlzLmluTW9kZSA9IFwiZWRpdEVkZ2VcIjtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVkaXRFZGdlID09PSBcIm9iamVjdFwiICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVkaXRFZGdlLmVkaXRXaXRob3V0RHJhZyA9PT0gXCJmdW5jdGlvblwiXG4gICAgKSB7XG4gICAgICB0aGlzLmVkZ2VCZWluZ0VkaXRlZElkID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkRWRnZUlkcygpWzBdO1xuICAgICAgaWYgKHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBlZGdlID0gdGhpcy5ib2R5LmVkZ2VzW3RoaXMuZWRnZUJlaW5nRWRpdGVkSWRdO1xuICAgICAgICB0aGlzLl9wZXJmb3JtRWRpdEVkZ2UoZWRnZS5mcm9tLmlkLCBlZGdlLnRvLmlkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5ndWlFbmFibGVkID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBsb2NhbGUgPSB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXTtcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NID0ge307XG4gICAgICB0aGlzLl9jcmVhdGVCYWNrQnV0dG9uKGxvY2FsZSk7XG4gICAgICB0aGlzLl9jcmVhdGVTZXBlcmF0b3IoKTtcbiAgICAgIHRoaXMuX2NyZWF0ZURlc2NyaXB0aW9uKFxuICAgICAgICBsb2NhbGVbXCJlZGl0RWRnZURlc2NyaXB0aW9uXCJdIHx8XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImVkaXRFZGdlRGVzY3JpcHRpb25cIl1cbiAgICAgICk7XG5cbiAgICAgIC8vIGJpbmQgdGhlIGNsb3NlIGJ1dHRvblxuICAgICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHModGhpcy5jbG9zZURpdiwgdGhpcy50b2dnbGVFZGl0TW9kZS5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLmVkZ2VCZWluZ0VkaXRlZElkID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkRWRnZUlkcygpWzBdO1xuICAgIGlmICh0aGlzLmVkZ2VCZWluZ0VkaXRlZElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy5lZGdlQmVpbmdFZGl0ZWRJZF07XG5cbiAgICAgIC8vIGNyZWF0ZSBjb250cm9sIG5vZGVzXG4gICAgICBjb25zdCBjb250cm9sTm9kZUZyb20gPSB0aGlzLl9nZXROZXdUYXJnZXROb2RlKGVkZ2UuZnJvbS54LCBlZGdlLmZyb20ueSk7XG4gICAgICBjb25zdCBjb250cm9sTm9kZVRvID0gdGhpcy5fZ2V0TmV3VGFyZ2V0Tm9kZShlZGdlLnRvLngsIGVkZ2UudG8ueSk7XG5cbiAgICAgIHRoaXMudGVtcG9yYXJ5SWRzLm5vZGVzLnB1c2goY29udHJvbE5vZGVGcm9tLmlkKTtcbiAgICAgIHRoaXMudGVtcG9yYXJ5SWRzLm5vZGVzLnB1c2goY29udHJvbE5vZGVUby5pZCk7XG5cbiAgICAgIHRoaXMuYm9keS5ub2Rlc1tjb250cm9sTm9kZUZyb20uaWRdID0gY29udHJvbE5vZGVGcm9tO1xuICAgICAgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLnB1c2goY29udHJvbE5vZGVGcm9tLmlkKTtcbiAgICAgIHRoaXMuYm9keS5ub2Rlc1tjb250cm9sTm9kZVRvLmlkXSA9IGNvbnRyb2xOb2RlVG87XG4gICAgICB0aGlzLmJvZHkubm9kZUluZGljZXMucHVzaChjb250cm9sTm9kZVRvLmlkKTtcblxuICAgICAgLy8gdGVtcG9yYXJpbHkgb3ZlcmxvYWQgVUkgZnVuY3Rpb25zLCBjbGVhbmVkIHVwIGF1dG9tYXRpY2FsbHkgYmVjYXVzZSBvZiBfdGVtcG9yYXJ5QmluZFVJXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvblRvdWNoXCIsIHRoaXMuX2NvbnRyb2xOb2RlVG91Y2guYmluZCh0aGlzKSk7IC8vIHVzZWQgdG8gZ2V0IHRoZSBwb3NpdGlvblxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25UYXBcIiwgKCkgPT4ge30pOyAvLyBkaXNhYmxlZFxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25Ib2xkXCIsICgpID0+IHt9KTsgLy8gZGlzYWJsZWRcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcbiAgICAgICAgXCJvbkRyYWdTdGFydFwiLFxuICAgICAgICB0aGlzLl9jb250cm9sTm9kZURyYWdTdGFydC5iaW5kKHRoaXMpXG4gICAgICApOyAvLyB1c2VkIHRvIHNlbGVjdCBjb250cm9sIG5vZGVcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uRHJhZ1wiLCB0aGlzLl9jb250cm9sTm9kZURyYWcuYmluZCh0aGlzKSk7IC8vIHVzZWQgdG8gZHJhZyBjb250cm9sIG5vZGVcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uRHJhZ0VuZFwiLCB0aGlzLl9jb250cm9sTm9kZURyYWdFbmQuYmluZCh0aGlzKSk7IC8vIHVzZWQgdG8gY29ubmVjdCBvciByZXZlcnQgY29udHJvbCBub2Rlc1xuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25Nb3VzZU1vdmVcIiwgKCkgPT4ge30pOyAvLyBkaXNhYmxlZFxuXG4gICAgICAvLyBjcmVhdGUgZnVuY3Rpb24gdG8gcG9zaXRpb24gY29udHJvbCBub2RlcyBjb3JyZWN0bHkgb24gbW92ZW1lbnRcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB1cCBiZWNhdXNlIHdlIHVzZSB0aGUgdGVtcG9yYXJ5IGJpbmRcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRFdmVudChcImJlZm9yZURyYXdpbmdcIiwgKGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBlZGdlLmVkZ2VUeXBlLmZpbmRCb3JkZXJQb3NpdGlvbnMoY3R4KTtcbiAgICAgICAgaWYgKGNvbnRyb2xOb2RlRnJvbS5zZWxlY3RlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBjb250cm9sTm9kZUZyb20ueCA9IHBvc2l0aW9ucy5mcm9tLng7XG4gICAgICAgICAgY29udHJvbE5vZGVGcm9tLnkgPSBwb3NpdGlvbnMuZnJvbS55O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sTm9kZVRvLnNlbGVjdGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIGNvbnRyb2xOb2RlVG8ueCA9IHBvc2l0aW9ucy50by54O1xuICAgICAgICAgIGNvbnRyb2xOb2RlVG8ueSA9IHBvc2l0aW9ucy50by55O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBkZWxldGUgZXZlcnl0aGluZyBpbiB0aGUgc2VsZWN0aW9uXG4gICAqL1xuICBkZWxldGVTZWxlY3RlZCgpIHtcbiAgICAvLyB3aGVuIHVzaW5nIHRoZSBndWksIGVuYWJsZSBlZGl0IG1vZGUgaWYgaXQgd2FzbnQgYWxyZWFkeS5cbiAgICBpZiAodGhpcy5lZGl0TW9kZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgIH1cblxuICAgIC8vIHJlc3RvcmUgdGhlIHN0YXRlIG9mIGFueSBib3VuZCBmdW5jdGlvbnMgb3IgZXZlbnRzLCByZW1vdmUgY29udHJvbCBub2RlcywgcmVzdG9yZSBwaHlzaWNzXG4gICAgdGhpcy5fY2xlYW4oKTtcblxuICAgIHRoaXMuaW5Nb2RlID0gXCJkZWxldGVcIjtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGVzID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkTm9kZUlkcygpO1xuICAgIGNvbnN0IHNlbGVjdGVkRWRnZXMgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWRFZGdlSWRzKCk7XG4gICAgbGV0IGRlbGV0ZUZ1bmN0aW9uID0gdW5kZWZpbmVkO1xuICAgIGlmIChzZWxlY3RlZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW3NlbGVjdGVkTm9kZXNbaV1dLmlzQ2x1c3RlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGFsZXJ0KFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV1bXCJkZWxldGVDbHVzdGVyRXJyb3JcIl0gfHxcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImRlbGV0ZUNsdXN0ZXJFcnJvclwiXVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmRlbGV0ZU5vZGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkZWxldGVGdW5jdGlvbiA9IHRoaXMub3B0aW9ucy5kZWxldGVOb2RlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRFZGdlcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5kZWxldGVFZGdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZGVsZXRlRnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGVsZXRlRWRnZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRlbGV0ZUZ1bmN0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7IG5vZGVzOiBzZWxlY3RlZE5vZGVzLCBlZGdlczogc2VsZWN0ZWRFZGdlcyB9O1xuICAgICAgaWYgKGRlbGV0ZUZ1bmN0aW9uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBkZWxldGVGdW5jdGlvbihkYXRhLCAoZmluYWxpemVkRGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IG51bGwgJiZcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdGhpcy5pbk1vZGUgPT09IFwiZGVsZXRlXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIGlmIGZvciB3aGF0ZXZlciByZWFzb24gdGhlIG1vZGUgaGFzIGNoYW5nZXMgKGR1ZSB0byBkYXRhc2V0IGNoYW5nZSkgZGlzcmVnYXJkIHRoZSBjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0RGF0YVNldCgpLnJlbW92ZShmaW5hbGl6ZWREYXRhLmVkZ2VzKTtcbiAgICAgICAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldERhdGFTZXQoKS5yZW1vdmUoZmluYWxpemVkRGF0YS5ub2Rlcyk7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwic3RhcnRTaW11bGF0aW9uXCIpO1xuICAgICAgICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBkZWxldGUgZG9lcyBub3Qgc3VwcG9ydCB0d28gYXJndW1lbnRzIChkYXRhLCBjYWxsYmFjaylcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkucmVtb3ZlKHNlbGVjdGVkRWRnZXMpO1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpLnJlbW92ZShzZWxlY3RlZE5vZGVzKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICB9XG4gIH1cblxuICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUFJJVkFURSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovL1xuXG4gIC8qKlxuICAgKiBkcmF3IG9yIHJlbW92ZSB0aGUgRE9NXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0dXAoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBFbmFibGUgdGhlIEdVSVxuICAgICAgdGhpcy5ndWlFbmFibGVkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5fY3JlYXRlV3JhcHBlcnMoKTtcbiAgICAgIGlmICh0aGlzLmVkaXRNb2RlID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9jcmVhdGVFZGl0QnV0dG9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVtb3ZlTWFuaXB1bGF0aW9uRE9NKCk7XG5cbiAgICAgIC8vIGRpc2FibGUgdGhlIGd1aVxuICAgICAgdGhpcy5ndWlFbmFibGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSB0aGUgZGl2IG92ZXJsYXlzIHRoYXQgY29udGFpbiB0aGUgRE9NXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlV3JhcHBlcnMoKSB7XG4gICAgLy8gbG9hZCB0aGUgbWFuaXB1bGF0b3IgSFRNTCBlbGVtZW50cy4gQWxsIHN0eWxpbmcgZG9uZSBpbiBjc3MuXG4gICAgaWYgKHRoaXMubWFuaXB1bGF0aW9uRGl2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmNsYXNzTmFtZSA9IFwidmlzLW1hbmlwdWxhdGlvblwiO1xuICAgICAgaWYgKHRoaXMuZWRpdE1vZGUgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FudmFzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubWFuaXB1bGF0aW9uRGl2KTtcbiAgICB9XG5cbiAgICAvLyBjb250YWluZXIgZm9yIHRoZSBlZGl0IGJ1dHRvbi5cbiAgICBpZiAodGhpcy5lZGl0TW9kZURpdiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRNb2RlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRoaXMuZWRpdE1vZGVEaXYuY2xhc3NOYW1lID0gXCJ2aXMtZWRpdC1tb2RlXCI7XG4gICAgICBpZiAodGhpcy5lZGl0TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmVkaXRNb2RlRGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdE1vZGVEaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FudmFzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuZWRpdE1vZGVEaXYpO1xuICAgIH1cblxuICAgIC8vIGNvbnRhaW5lciBmb3IgdGhlIGNsb3NlIGRpdiBidXR0b25cbiAgICBpZiAodGhpcy5jbG9zZURpdiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNsb3NlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICAgIHRoaXMuY2xvc2VEaXYuY2xhc3NOYW1lID0gXCJ2aXMtY2xvc2VcIjtcbiAgICAgIHRoaXMuY2xvc2VEaXYuc2V0QXR0cmlidXRlKFxuICAgICAgICBcImFyaWEtbGFiZWxcIixcbiAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV0/LltcImNsb3NlXCJdID8/XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImNsb3NlXCJdXG4gICAgICApO1xuICAgICAgdGhpcy5jbG9zZURpdi5zdHlsZS5kaXNwbGF5ID0gdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheTtcbiAgICAgIHRoaXMuY2FudmFzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY2xvc2VEaXYpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBnZW5lcmF0ZSBhIG5ldyB0YXJnZXQgbm9kZS4gVXNlZCBmb3IgY3JlYXRpbmcgbmV3IGVkZ2VzIGFuZCBlZGl0aW5nIGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEByZXR1cm5zIHtOb2RlfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldE5ld1RhcmdldE5vZGUoeCwgeSkge1xuICAgIGNvbnN0IGNvbnRyb2xOb2RlU3R5bGUgPSBkZWVwRXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMuY29udHJvbE5vZGVTdHlsZSk7XG5cbiAgICBjb250cm9sTm9kZVN0eWxlLmlkID0gXCJ0YXJnZXROb2RlXCIgKyByYW5kb21VVUlEKCk7XG4gICAgY29udHJvbE5vZGVTdHlsZS5oaWRkZW4gPSBmYWxzZTtcbiAgICBjb250cm9sTm9kZVN0eWxlLnBoeXNpY3MgPSBmYWxzZTtcbiAgICBjb250cm9sTm9kZVN0eWxlLnggPSB4O1xuICAgIGNvbnRyb2xOb2RlU3R5bGUueSA9IHk7XG5cbiAgICAvLyB3ZSBoYXZlIHRvIGRlZmluZSB0aGUgYm91bmRpbmcgYm94IGluIG9yZGVyIGZvciB0aGUgbm9kZXMgdG8gYmUgZHJhd24gaW1tZWRpYXRlbHlcbiAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVOb2RlKGNvbnRyb2xOb2RlU3R5bGUpO1xuICAgIG5vZGUuc2hhcGUuYm91bmRpbmdCb3ggPSB7IGxlZnQ6IHgsIHJpZ2h0OiB4LCB0b3A6IHksIGJvdHRvbTogeSB9O1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBlZGl0IGJ1dHRvblxuICAgKi9cbiAgX2NyZWF0ZUVkaXRCdXR0b24oKSB7XG4gICAgLy8gcmVzdG9yZSBldmVyeXRoaW5nIHRvIGl0J3Mgb3JpZ2luYWwgc3RhdGUgKGlmIGFwcGxpY2FibGUpXG4gICAgdGhpcy5fY2xlYW4oKTtcblxuICAgIC8vIHJlc2V0IHRoZSBtYW5pcHVsYXRpb25ET01cbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTSA9IHt9O1xuXG4gICAgLy8gZW1wdHkgdGhlIGVkaXRNb2RlRGl2XG4gICAgcmVjdXJzaXZlRE9NRGVsZXRlKHRoaXMuZWRpdE1vZGVEaXYpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBjb250ZW50cyBmb3IgdGhlIGVkaXRNb2RlIGJ1dHRvblxuICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdO1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihcbiAgICAgIFwiZWRpdE1vZGVcIixcbiAgICAgIFwidmlzLWVkaXQgdmlzLWVkaXQtbW9kZVwiLFxuICAgICAgbG9jYWxlW1wiZWRpdFwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdFwiXVxuICAgICk7XG4gICAgdGhpcy5lZGl0TW9kZURpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuXG4gICAgLy8gYmluZCBhIGhhbW1lciBsaXN0ZW5lciB0byB0aGUgYnV0dG9uLCBjYWxsaW5nIHRoZSBmdW5jdGlvbiB0b2dnbGVFZGl0TW9kZS5cbiAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyhidXR0b24sIHRoaXMudG9nZ2xlRWRpdE1vZGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgYWZ0ZXIgZXZlcnl0aGluZyB0aGlzIG1vZHVsZSBkb2VzLiBUZW1wb3JhcnkgZWxlbWVudHMsIGZ1bmN0aW9ucyBhbmQgZXZlbnRzIGFyZSByZW1vdmVkLCBwaHlzaWNzIHJlc3RvcmVkLCBoYW1tZXJzIHJlbW92ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW4oKSB7XG4gICAgLy8gbm90IGluIG1vZGVcbiAgICB0aGlzLmluTW9kZSA9IGZhbHNlO1xuXG4gICAgLy8gX2NsZWFuIHRoZSBkaXZzXG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmVjdXJzaXZlRE9NRGVsZXRlKHRoaXMuZWRpdE1vZGVEaXYpO1xuICAgICAgcmVjdXJzaXZlRE9NRGVsZXRlKHRoaXMubWFuaXB1bGF0aW9uRGl2KTtcblxuICAgICAgLy8gcmVtb3ZlcyBhbGwgdGhlIGJpbmRpbmdzIGFuZCBvdmVybG9hZHNcbiAgICAgIHRoaXMuX2NsZWFudXBET01FdmVudExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSB0ZW1wb3Jhcnkgbm9kZXMgYW5kIGVkZ2VzXG4gICAgdGhpcy5fY2xlYW51cFRlbXBvcmFyeU5vZGVzQW5kRWRnZXMoKTtcblxuICAgIC8vIHJlc3RvcmUgb3ZlcmxvYWRlZCBVSSBmdW5jdGlvbnNcbiAgICB0aGlzLl91bmJpbmRUZW1wb3JhcnlVSXMoKTtcblxuICAgIC8vIHJlbW92ZSB0aGUgdGVtcG9yYXJ5RXZlbnRGdW5jdGlvbnNcbiAgICB0aGlzLl91bmJpbmRUZW1wb3JhcnlFdmVudHMoKTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIHBoeXNpY3MgaWYgcmVxdWlyZWRcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVzdG9yZVBoeXNpY3NcIik7XG4gIH1cblxuICAvKipcbiAgICogRWFjaCBkb20gZWxlbWVudCBoYXMgaXQncyBvd24gaGFtbWVyLiBUaGV5IGFyZSBzdG9yZWQgaW4gdGhpcy5tYW5pcHVsYXRpb25IYW1tZXJzLiBUaGlzIGNsZWFucyB0aGVtIHVwLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NsZWFudXBET01FdmVudExpc3RlbmVycygpIHtcbiAgICAvLyBfY2xlYW4gRE9NIGV2ZW50IGxpc3RlbmVyIGJpbmRpbmdzXG4gICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLl9kb21FdmVudExpc3RlbmVyQ2xlYW51cFF1ZXVlLnNwbGljZSgwKSkge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBET00gZWxlbWVudHMgY3JlYXRlZCBieSB0aGlzIG1vZHVsZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVNYW5pcHVsYXRpb25ET00oKSB7XG4gICAgLy8gcmVtb3ZlcyBhbGwgdGhlIGJpbmRpbmdzIGFuZCBvdmVybG9hZHNcbiAgICB0aGlzLl9jbGVhbigpO1xuXG4gICAgLy8gZW1wdHkgdGhlIG1hbmlwdWxhdGlvbiBkaXZzXG4gICAgcmVjdXJzaXZlRE9NRGVsZXRlKHRoaXMubWFuaXB1bGF0aW9uRGl2KTtcbiAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5lZGl0TW9kZURpdik7XG4gICAgcmVjdXJzaXZlRE9NRGVsZXRlKHRoaXMuY2xvc2VEaXYpO1xuXG4gICAgLy8gcmVtb3ZlIHRoZSBtYW5pcHVsYXRpb24gZGl2c1xuICAgIGlmICh0aGlzLm1hbmlwdWxhdGlvbkRpdikge1xuICAgICAgdGhpcy5jYW52YXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5tYW5pcHVsYXRpb25EaXYpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0TW9kZURpdikge1xuICAgICAgdGhpcy5jYW52YXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5lZGl0TW9kZURpdik7XG4gICAgfVxuICAgIGlmICh0aGlzLmNsb3NlRGl2KSB7XG4gICAgICB0aGlzLmNhbnZhcy5mcmFtZS5yZW1vdmVDaGlsZCh0aGlzLmNsb3NlRGl2KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHJlZmVyZW5jZXMgdG8gdW5kZWZpbmVkXG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0TW9kZURpdiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNsb3NlRGl2ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhIHNlcGVyYXRvciBsaW5lLiB0aGUgaW5kZXggaXMgdG8gZGlmZmVyZW50aWF0ZSBpbiB0aGUgbWFuaXB1bGF0aW9uIGRvbVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2luZGV4PTFdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlU2VwZXJhdG9yKGluZGV4ID0gMSkge1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW1wic2VwZXJhdG9yTGluZURpdlwiICsgaW5kZXhdID1cbiAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01bXCJzZXBlcmF0b3JMaW5lRGl2XCIgKyBpbmRleF0uY2xhc3NOYW1lID1cbiAgICAgIFwidmlzLXNlcGFyYXRvci1saW5lXCI7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuYXBwZW5kQ2hpbGQoXG4gICAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtcInNlcGVyYXRvckxpbmVEaXZcIiArIGluZGV4XVxuICAgICk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIERPTSBmdW5jdGlvbnMgZm9yIGJ1dHRvbnMgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQWRkTm9kZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImFkZE5vZGVcIixcbiAgICAgIFwidmlzLWFkZFwiLFxuICAgICAgbG9jYWxlW1wiYWRkTm9kZVwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiYWRkTm9kZVwiXVxuICAgICk7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcbiAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyhidXR0b24sIHRoaXMuYWRkTm9kZU1vZGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtMb2NhbGV9IGxvY2FsZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUFkZEVkZ2VCdXR0b24obG9jYWxlKSB7XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKFxuICAgICAgXCJhZGRFZGdlXCIsXG4gICAgICBcInZpcy1jb25uZWN0XCIsXG4gICAgICBsb2NhbGVbXCJhZGRFZGdlXCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJhZGRFZGdlXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5hZGRFZGdlTW9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlRWRpdE5vZGVCdXR0b24obG9jYWxlKSB7XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKFxuICAgICAgXCJlZGl0Tm9kZVwiLFxuICAgICAgXCJ2aXMtZWRpdFwiLFxuICAgICAgbG9jYWxlW1wiZWRpdE5vZGVcIl0gfHwgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImVkaXROb2RlXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5lZGl0Tm9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlRWRpdEVkZ2VCdXR0b24obG9jYWxlKSB7XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKFxuICAgICAgXCJlZGl0RWRnZVwiLFxuICAgICAgXCJ2aXMtZWRpdFwiLFxuICAgICAgbG9jYWxlW1wiZWRpdEVkZ2VcIl0gfHwgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImVkaXRFZGdlXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5lZGl0RWRnZU1vZGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtMb2NhbGV9IGxvY2FsZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZURlbGV0ZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBsZXQgZGVsZXRlQnRuQ2xhc3M7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5ydGwpIHtcbiAgICAgIGRlbGV0ZUJ0bkNsYXNzID0gXCJ2aXMtZGVsZXRlLXJ0bFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVCdG5DbGFzcyA9IFwidmlzLWRlbGV0ZVwiO1xuICAgIH1cbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImRlbGV0ZVwiLFxuICAgICAgZGVsZXRlQnRuQ2xhc3MsXG4gICAgICBsb2NhbGVbXCJkZWxcIl0gfHwgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImRlbFwiXVxuICAgICk7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcbiAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyhidXR0b24sIHRoaXMuZGVsZXRlU2VsZWN0ZWQuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtMb2NhbGV9IGxvY2FsZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUJhY2tCdXR0b24obG9jYWxlKSB7XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKFxuICAgICAgXCJiYWNrXCIsXG4gICAgICBcInZpcy1iYWNrXCIsXG4gICAgICBsb2NhbGVbXCJiYWNrXCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJiYWNrXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gaWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxuICAgKiBAcGFyYW0ge2xhYmVsfSBsYWJlbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxDbGFzc05hbWVcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUJ1dHRvbihpZCwgY2xhc3NOYW1lLCBsYWJlbCwgbGFiZWxDbGFzc05hbWUgPSBcInZpcy1sYWJlbFwiKSB7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01baWQgKyBcIkRpdlwiXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01baWQgKyBcIkRpdlwiXS5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gXCIgKyBjbGFzc05hbWU7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01baWQgKyBcIkxhYmVsXCJdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiTGFiZWxcIl0uY2xhc3NOYW1lID0gbGFiZWxDbGFzc05hbWU7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01baWQgKyBcIkxhYmVsXCJdLmlubmVyVGV4dCA9IGxhYmVsO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW2lkICsgXCJEaXZcIl0uYXBwZW5kQ2hpbGQoXG4gICAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiTGFiZWxcIl1cbiAgICApO1xuICAgIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiRGl2XCJdO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlRGVzY3JpcHRpb24obGFiZWwpIHtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtcImRlc2NyaXB0aW9uTGFiZWxcIl0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW1wiZGVzY3JpcHRpb25MYWJlbFwiXS5jbGFzc05hbWUgPSBcInZpcy1ub25lXCI7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01bXCJkZXNjcmlwdGlvbkxhYmVsXCJdLmlubmVyVGV4dCA9IGxhYmVsO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKHRoaXMubWFuaXB1bGF0aW9uRE9NW1wiZGVzY3JpcHRpb25MYWJlbFwiXSk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFbmQgb2YgRE9NIGZ1bmN0aW9ucyBmb3IgYnV0dG9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8qKlxuICAgKiB0aGlzIGJpbmRzIGFuIGV2ZW50IHVudGlsIGNsZWFudXAgYnkgdGhlIGNsZWFuIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5ld0Z1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdGVtcG9yYXJ5QmluZEV2ZW50KGV2ZW50LCBuZXdGdW5jdGlvbikge1xuICAgIHRoaXMudGVtcG9yYXJ5RXZlbnRGdW5jdGlvbnMucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBib3VuZEZ1bmN0aW9uOiBuZXdGdW5jdGlvbixcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihldmVudCwgbmV3RnVuY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgb3ZlcnJpZGVzIGFuIFVJIGZ1bmN0aW9uIHVudGlsIGNsZWFudXAgYnkgdGhlIGNsZWFuIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBVSWZ1bmN0aW9uTmFtZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXdGdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3RlbXBvcmFyeUJpbmRVSShVSWZ1bmN0aW9uTmFtZSwgbmV3RnVuY3Rpb24pIHtcbiAgICBpZiAodGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzW1VJZnVuY3Rpb25OYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRlbXBvcmFyeVVJRnVuY3Rpb25zW1VJZnVuY3Rpb25OYW1lXSA9XG4gICAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVyc1tVSWZ1bmN0aW9uTmFtZV07XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnNbVUlmdW5jdGlvbk5hbWVdID0gbmV3RnVuY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGlzIFVJIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0LiBUeXBvPyBZb3UgdHJpZWQ6IFwiICtcbiAgICAgICAgICBVSWZ1bmN0aW9uTmFtZSArXG4gICAgICAgICAgXCIgcG9zc2libGUgYXJlOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXModGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgdGhlIG92ZXJyaWRkZW4gVUkgZnVuY3Rpb25zIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VuYmluZFRlbXBvcmFyeVVJcygpIHtcbiAgICBmb3IgKGNvbnN0IGZ1bmN0aW9uTmFtZSBpbiB0aGlzLnRlbXBvcmFyeVVJRnVuY3Rpb25zKSB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICB0aGlzLnRlbXBvcmFyeVVJRnVuY3Rpb25zLFxuICAgICAgICAgIGZ1bmN0aW9uTmFtZVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzW2Z1bmN0aW9uTmFtZV0gPVxuICAgICAgICAgIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnNbZnVuY3Rpb25OYW1lXTtcbiAgICAgICAgZGVsZXRlIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnNbZnVuY3Rpb25OYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50ZW1wb3JhcnlVSUZ1bmN0aW9ucyA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVuYmluZCB0aGUgZXZlbnRzIGNyZWF0ZWQgYnkgX3RlbXBvcmFyeUJpbmRFdmVudFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VuYmluZFRlbXBvcmFyeUV2ZW50cygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGVtcG9yYXJ5RXZlbnRGdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IHRoaXMudGVtcG9yYXJ5RXZlbnRGdW5jdGlvbnNbaV0uZXZlbnQ7XG4gICAgICBjb25zdCBib3VuZEZ1bmN0aW9uID0gdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9uc1tpXS5ib3VuZEZ1bmN0aW9uO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKGV2ZW50TmFtZSwgYm91bmRGdW5jdGlvbik7XG4gICAgfVxuICAgIHRoaXMudGVtcG9yYXJ5RXZlbnRGdW5jdGlvbnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIGFuIGhhbW1lciBpbnN0YW5jZSB0byBhIERPTSBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGRvbUVsZW1lbnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gYm91bmRGdW5jdGlvblxuICAgKi9cbiAgX2JpbmRFbGVtZW50RXZlbnRzKGRvbUVsZW1lbnQsIGJvdW5kRnVuY3Rpb24pIHtcbiAgICAvLyBCaW5kIHRvdWNoIGV2ZW50cy5cbiAgICBjb25zdCBoYW1tZXIgPSBuZXcgSGFtbWVyKGRvbUVsZW1lbnQsIHt9KTtcbiAgICBvblRvdWNoKGhhbW1lciwgYm91bmRGdW5jdGlvbik7XG4gICAgdGhpcy5fZG9tRXZlbnRMaXN0ZW5lckNsZWFudXBRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICAgIGhhbW1lci5kZXN0cm95KCk7XG4gICAgfSk7XG5cbiAgICAvLyBCaW5kIGtleWJvYXJkIGV2ZW50cy5cbiAgICBjb25zdCBrZXl1cExpc3RlbmVyID0gKHsga2V5Q29kZSwga2V5IH0pID0+IHtcbiAgICAgIGlmIChrZXkgPT09IFwiRW50ZXJcIiB8fCBrZXkgPT09IFwiIFwiIHx8IGtleUNvZGUgPT09IDEzIHx8IGtleUNvZGUgPT09IDMyKSB7XG4gICAgICAgIGJvdW5kRnVuY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGtleXVwTGlzdGVuZXIsIGZhbHNlKTtcbiAgICB0aGlzLl9kb21FdmVudExpc3RlbmVyQ2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwga2V5dXBMaXN0ZW5lciwgZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5lYXRseSBjbGVhbiB1cCB0ZW1wb3JhcnkgZWRnZXMgYW5kIG5vZGVzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW51cFRlbXBvcmFyeU5vZGVzQW5kRWRnZXMoKSB7XG4gICAgLy8gX2NsZWFuIHRlbXBvcmFyeSBlZGdlc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50ZW1wb3JhcnlJZHMuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYm9keS5lZGdlc1t0aGlzLnRlbXBvcmFyeUlkcy5lZGdlc1tpXV0uZGlzY29ubmVjdCgpO1xuICAgICAgZGVsZXRlIHRoaXMuYm9keS5lZGdlc1t0aGlzLnRlbXBvcmFyeUlkcy5lZGdlc1tpXV07XG4gICAgICBjb25zdCBpbmRleFRlbXBFZGdlID0gdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLmluZGV4T2YoXG4gICAgICAgIHRoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzW2ldXG4gICAgICApO1xuICAgICAgaWYgKGluZGV4VGVtcEVkZ2UgIT09IC0xKSB7XG4gICAgICAgIHRoaXMuYm9keS5lZGdlSW5kaWNlcy5zcGxpY2UoaW5kZXhUZW1wRWRnZSwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gX2NsZWFuIHRlbXBvcmFyeSBub2Rlc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50ZW1wb3JhcnlJZHMubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkubm9kZXNbdGhpcy50ZW1wb3JhcnlJZHMubm9kZXNbaV1dO1xuICAgICAgY29uc3QgaW5kZXhUZW1wTm9kZSA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5pbmRleE9mKFxuICAgICAgICB0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlc1tpXVxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleFRlbXBOb2RlICE9PSAtMSkge1xuICAgICAgICB0aGlzLmJvZHkubm9kZUluZGljZXMuc3BsaWNlKGluZGV4VGVtcE5vZGUsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGVtcG9yYXJ5SWRzID0geyBub2RlczogW10sIGVkZ2VzOiBbXSB9O1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVESVQgRURHRSBGVU5DVElPTlMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8qKlxuICAgKiB0aGUgdG91Y2ggaXMgdXNlZCB0byBnZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBpbml0aWFsIGNsaWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbnRyb2xOb2RlVG91Y2goZXZlbnQpIHtcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKTtcbiAgICB0aGlzLmxhc3RUb3VjaCA9IHRoaXMuYm9keS5mdW5jdGlvbnMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIHRoaXMubGFzdFRvdWNoLnRyYW5zbGF0aW9uID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24pOyAvLyBjb3B5IHRoZSBvYmplY3RcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgZHJhZyBzdGFydCBpcyB1c2VkIHRvIG1hcmsgb25lIG9mIHRoZSBjb250cm9sIG5vZGVzIGFzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbnRyb2xOb2RlRHJhZ1N0YXJ0KCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmxhc3RUb3VjaDtcbiAgICBjb25zdCBwb2ludGVyT2JqID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKTtcbiAgICBjb25zdCBmcm9tID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMudGVtcG9yYXJ5SWRzLm5vZGVzWzBdXTtcbiAgICBjb25zdCB0byA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlc1sxXV07XG4gICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1t0aGlzLmVkZ2VCZWluZ0VkaXRlZElkXTtcbiAgICB0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBmcm9tU2VsZWN0ID0gZnJvbS5pc092ZXJsYXBwaW5nV2l0aChwb2ludGVyT2JqKTtcbiAgICBjb25zdCB0b1NlbGVjdCA9IHRvLmlzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopO1xuXG4gICAgaWYgKGZyb21TZWxlY3QgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSA9IGZyb207XG4gICAgICBlZGdlLmVkZ2VUeXBlLmZyb20gPSBmcm9tO1xuICAgIH0gZWxzZSBpZiAodG9TZWxlY3QgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSA9IHRvO1xuICAgICAgZWRnZS5lZGdlVHlwZS50byA9IHRvO1xuICAgIH1cblxuICAgIC8vIHdlIHVzZSB0aGUgc2VsZWN0aW9uIHRvIGZpbmQgdGhlIG5vZGUgdGhhdCBpcyBiZWluZyBkcmFnZ2VkLiBXZSBleHBsaWNpdGx5IHNlbGVjdCBpdCBoZXJlLlxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNlbGVjdE9iamVjdCh0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUpO1xuICAgIH1cblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYWdnaW5nIHRoZSBjb250cm9sIG5vZGVzIG9yIHRoZSBjYW52YXNcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29udHJvbE5vZGVEcmFnKGV2ZW50KSB7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImRpc2FibGVQaHlzaWNzXCIpO1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICBjb25zdCBwb3MgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZS54ID0gcG9zLng7XG4gICAgICB0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUueSA9IHBvcy55O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVyYWN0aW9uSGFuZGxlci5vbkRyYWcoZXZlbnQpO1xuICAgIH1cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb25uZWN0aW5nIG9yIHJlc3RvcmluZyB0aGUgY29udHJvbCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29udHJvbE5vZGVEcmFnRW5kKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuYm9keS5mdW5jdGlvbnMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIGNvbnN0IHBvaW50ZXJPYmogPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpO1xuICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy5lZGdlQmVpbmdFZGl0ZWRJZF07XG4gICAgLy8gaWYgdGhlIG5vZGUgdGhhdCB3YXMgZHJhZ2dlZCBpcyBub3QgYSBjb250cm9sIG5vZGUsIHJldHVyblxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHdlIHVzZSB0aGUgc2VsZWN0aW9uIHRvIGZpbmQgdGhlIG5vZGUgdGhhdCBpcyBiZWluZyBkcmFnZ2VkLiBXZSBleHBsaWNpdGx5IERFc2VsZWN0IHRoZSBjb250cm9sIG5vZGUgaGVyZS5cbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKTtcbiAgICBjb25zdCBvdmVybGFwcGluZ05vZGVJZHMgPVxuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLl9nZXRBbGxOb2Rlc092ZXJsYXBwaW5nV2l0aChwb2ludGVyT2JqKTtcbiAgICBsZXQgbm9kZSA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBpID0gb3ZlcmxhcHBpbmdOb2RlSWRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAob3ZlcmxhcHBpbmdOb2RlSWRzW2ldICE9PSB0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUuaWQpIHtcbiAgICAgICAgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tvdmVybGFwcGluZ05vZGVJZHNbaV1dO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gcGVyZm9ybSB0aGUgY29ubmVjdGlvblxuICAgIGlmIChub2RlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChub2RlLmlzQ2x1c3RlciA9PT0gdHJ1ZSkge1xuICAgICAgICBhbGVydChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXVtcImNyZWF0ZUVkZ2VFcnJvclwiXSB8fFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImNyZWF0ZUVkZ2VFcnJvclwiXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZnJvbSA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlc1swXV07XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUuaWQgPT09IGZyb20uaWQpIHtcbiAgICAgICAgICB0aGlzLl9wZXJmb3JtRWRpdEVkZ2Uobm9kZS5pZCwgZWRnZS50by5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fcGVyZm9ybUVkaXRFZGdlKGVkZ2UuZnJvbS5pZCwgbm9kZS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWRnZS51cGRhdGVFZGdlVHlwZSgpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInJlc3RvcmVQaHlzaWNzXCIpO1xuICAgIH1cblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORCBPRiBFRElUIEVER0UgRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFERCBFREdFIEZVTkNUSU9OUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG4gIC8qKlxuICAgKiB0aGUgZnVuY3Rpb24gYm91bmQgdG8gdGhlIHNlbGVjdGlvbiBldmVudC4gSXQgY2hlY2tzIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBjbHVzdGVyIGFuZCBjaGFuZ2VzIHRoZSBkZXNjcmlwdGlvblxuICAgKiB0byB3YWxrIHRoZSB1c2VyIHRocm91Z2ggdGhlIHByb2Nlc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGFuZGxlQ29ubmVjdChldmVudCkge1xuICAgIC8vIGNoZWNrIHRvIGF2b2lkIGRvdWJsZSBmaXJlaW5nIG9mIHRoaXMgZnVuY3Rpb24uXG4gICAgaWYgKG5ldyBEYXRlKCkudmFsdWVPZigpIC0gdGhpcy50b3VjaFRpbWUgPiAxMDApIHtcbiAgICAgIHRoaXMubGFzdFRvdWNoID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgICB0aGlzLmxhc3RUb3VjaC50cmFuc2xhdGlvbiA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvblxuICAgICAgKTsgLy8gY29weSB0aGUgb2JqZWN0XG5cbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyLmRyYWcucG9pbnRlciA9IHRoaXMubGFzdFRvdWNoOyAvLyBEcmFnIHBvaW50ZXIgaXMgbm90IHVwZGF0ZWQgd2hlbiBhZGRpbmcgZWRnZXNcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyLmRyYWcudHJhbnNsYXRpb24gPSB0aGlzLmxhc3RUb3VjaC50cmFuc2xhdGlvbjtcblxuICAgICAgY29uc3QgcG9pbnRlciA9IHRoaXMubGFzdFRvdWNoO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXROb2RlQXQocG9pbnRlcik7XG5cbiAgICAgIGlmIChub2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG5vZGUuaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgYWxlcnQoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXVtcImNyZWF0ZUVkZ2VFcnJvclwiXSB8fFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiY3JlYXRlRWRnZUVycm9yXCJdXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjcmVhdGUgYSBub2RlIHRoZSB0ZW1wb3JhcnkgbGluZSBjYW4gbG9vayBhdFxuICAgICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0aGlzLl9nZXROZXdUYXJnZXROb2RlKG5vZGUueCwgbm9kZS55KTtcbiAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbdGFyZ2V0Tm9kZS5pZF0gPSB0YXJnZXROb2RlO1xuICAgICAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5wdXNoKHRhcmdldE5vZGUuaWQpO1xuXG4gICAgICAgICAgLy8gY3JlYXRlIGEgdGVtcG9yYXJ5IGVkZ2VcbiAgICAgICAgICBjb25zdCBjb25uZWN0aW9uRWRnZSA9IHRoaXMuYm9keS5mdW5jdGlvbnMuY3JlYXRlRWRnZSh7XG4gICAgICAgICAgICBpZDogXCJjb25uZWN0aW9uRWRnZVwiICsgcmFuZG9tVVVJRCgpLFxuICAgICAgICAgICAgZnJvbTogbm9kZS5pZCxcbiAgICAgICAgICAgIHRvOiB0YXJnZXROb2RlLmlkLFxuICAgICAgICAgICAgcGh5c2ljczogZmFsc2UsXG4gICAgICAgICAgICBzbW9vdGg6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgdHlwZTogXCJjb250aW51b3VzXCIsXG4gICAgICAgICAgICAgIHJvdW5kbmVzczogMC41LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbY29ubmVjdGlvbkVkZ2UuaWRdID0gY29ubmVjdGlvbkVkZ2U7XG4gICAgICAgICAgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLnB1c2goY29ubmVjdGlvbkVkZ2UuaWQpO1xuXG4gICAgICAgICAgdGhpcy50ZW1wb3JhcnlJZHMubm9kZXMucHVzaCh0YXJnZXROb2RlLmlkKTtcbiAgICAgICAgICB0aGlzLnRlbXBvcmFyeUlkcy5lZGdlcy5wdXNoKGNvbm5lY3Rpb25FZGdlLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50b3VjaFRpbWUgPSBuZXcgRGF0ZSgpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmFnQ29udHJvbE5vZGUoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG5cbiAgICBjb25zdCBwb2ludGVyT2JqID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKTtcbiAgICAvLyByZW1lbWJlciB0aGUgZWRnZSBpZFxuICAgIGxldCBjb25uZWN0RnJvbUlkID0gdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLnRlbXBvcmFyeUlkcy5lZGdlc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25uZWN0RnJvbUlkID0gdGhpcy5ib2R5LmVkZ2VzW3RoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzWzBdXS5mcm9tSWQ7XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSBvdmVybGFwcGluZyBub2RlIGJ1dCBOT1QgdGhlIHRlbXBvcmFyeSBub2RlO1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZUlkcyA9XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopO1xuICAgIGxldCBub2RlID0gdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGkgPSBvdmVybGFwcGluZ05vZGVJZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIC8vIGlmIHRoZSBub2RlIGlkIGlzIE5PVCBhIHRlbXBvcmFyeSBub2RlLCBhY2NlcHQgdGhlIG5vZGUuXG4gICAgICBpZiAodGhpcy50ZW1wb3JhcnlJZHMubm9kZXMuaW5kZXhPZihvdmVybGFwcGluZ05vZGVJZHNbaV0pID09PSAtMSkge1xuICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW292ZXJsYXBwaW5nTm9kZUlkc1tpXV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGV2ZW50LmNvbnRyb2xFZGdlID0geyBmcm9tOiBjb25uZWN0RnJvbUlkLCB0bzogbm9kZSA/IG5vZGUuaWQgOiB1bmRlZmluZWQgfTtcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgXCJjb250cm9sTm9kZURyYWdnaW5nXCIsXG4gICAgICBldmVudCxcbiAgICAgIHBvaW50ZXJcbiAgICApO1xuXG4gICAgaWYgKHRoaXMudGVtcG9yYXJ5SWRzLm5vZGVzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbdGhpcy50ZW1wb3JhcnlJZHMubm9kZXNbMF1dOyAvLyB0aGVyZSBpcyBvbmx5IG9uZSB0ZW1wIG5vZGUgaW4gdGhlIGFkZCBlZGdlIG1vZGUuXG4gICAgICB0YXJnZXROb2RlLnggPSB0aGlzLmNhbnZhcy5fWGNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLngpO1xuICAgICAgdGFyZ2V0Tm9kZS55ID0gdGhpcy5jYW52YXMuX1ljb252ZXJ0RE9NdG9DYW52YXMocG9pbnRlci55KTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVyYWN0aW9uSGFuZGxlci5vbkRyYWcoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IHRoZSBuZXcgZWRnZSB0byB0aGUgdGFyZ2V0IGlmIG9uZSBleGlzdHMsIG90aGVyd2lzZSByZW1vdmUgdGVtcCBsaW5lXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpbmlzaENvbm5lY3QoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgY29uc3QgcG9pbnRlck9iaiA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5fcG9pbnRlclRvUG9zaXRpb25PYmplY3QocG9pbnRlcik7XG5cbiAgICAvLyByZW1lbWJlciB0aGUgZWRnZSBpZFxuICAgIGxldCBjb25uZWN0RnJvbUlkID0gdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLnRlbXBvcmFyeUlkcy5lZGdlc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25uZWN0RnJvbUlkID0gdGhpcy5ib2R5LmVkZ2VzW3RoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzWzBdXS5mcm9tSWQ7XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSBvdmVybGFwcGluZyBub2RlIGJ1dCBOT1QgdGhlIHRlbXBvcmFyeSBub2RlO1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZUlkcyA9XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopO1xuICAgIGxldCBub2RlID0gdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGkgPSBvdmVybGFwcGluZ05vZGVJZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIC8vIGlmIHRoZSBub2RlIGlkIGlzIE5PVCBhIHRlbXBvcmFyeSBub2RlLCBhY2NlcHQgdGhlIG5vZGUuXG4gICAgICBpZiAodGhpcy50ZW1wb3JhcnlJZHMubm9kZXMuaW5kZXhPZihvdmVybGFwcGluZ05vZGVJZHNbaV0pID09PSAtMSkge1xuICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW292ZXJsYXBwaW5nTm9kZUlkc1tpXV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNsZWFuIHRlbXBvcmFyeSBub2RlcyBhbmQgZWRnZXMuXG4gICAgdGhpcy5fY2xlYW51cFRlbXBvcmFyeU5vZGVzQW5kRWRnZXMoKTtcblxuICAgIC8vIHBlcmZvcm0gdGhlIGNvbm5lY3Rpb25cbiAgICBpZiAobm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAobm9kZS5pc0NsdXN0ZXIgPT09IHRydWUpIHtcbiAgICAgICAgYWxlcnQoXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV1bXCJjcmVhdGVFZGdlRXJyb3JcIl0gfHxcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJjcmVhdGVFZGdlRXJyb3JcIl1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbY29ubmVjdEZyb21JZF0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlLmlkXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX3BlcmZvcm1BZGRFZGdlKGNvbm5lY3RGcm9tSWQsIG5vZGUuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXZlbnQuY29udHJvbEVkZ2UgPSB7IGZyb206IGNvbm5lY3RGcm9tSWQsIHRvOiBub2RlID8gbm9kZS5pZCA6IHVuZGVmaW5lZCB9O1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICBcImNvbnRyb2xOb2RlRHJhZ0VuZFwiLFxuICAgICAgZXZlbnQsXG4gICAgICBwb2ludGVyXG4gICAgKTtcblxuICAgIC8vIE5vIG5lZWQgdG8gZG8gX2dlbmVyYXRlY2xpY2tldmVudCgnZHJhZ0VuZCcpIGhlcmUsIHRoZSByZWd1bGFyIGRyYWdFbmQgZXZlbnQgZmlyZXMuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmFnU3RhcnRFZGdlKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMubGFzdFRvdWNoO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICBcImRyYWdTdGFydFwiLFxuICAgICAgZXZlbnQsXG4gICAgICBwb2ludGVyLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EIE9GIEFERCBFREdFIEZVTkNUSU9OUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGVyZm9ybWluZyBhbGwgdGhlIGFjdHVhbCBkYXRhIG1hbmlwdWxhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgbm9kZSBvbiB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjbGlja0RhdGFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtQWRkTm9kZShjbGlja0RhdGEpIHtcbiAgICBjb25zdCBkZWZhdWx0RGF0YSA9IHtcbiAgICAgIGlkOiByYW5kb21VVUlEKCksXG4gICAgICB4OiBjbGlja0RhdGEucG9pbnRlci5jYW52YXMueCxcbiAgICAgIHk6IGNsaWNrRGF0YS5wb2ludGVyLmNhbnZhcy55LFxuICAgICAgbGFiZWw6IFwibmV3XCIsXG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmFkZE5vZGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hZGROb2RlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuYWRkTm9kZShkZWZhdWx0RGF0YSwgKGZpbmFsaXplZERhdGEpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhICE9PSBudWxsICYmXG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHRoaXMuaW5Nb2RlID09PSBcImFkZE5vZGVcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrXG4gICAgICAgICAgICB0aGlzLmJvZHkuZGF0YS5ub2Rlcy5nZXREYXRhU2V0KCkuYWRkKGZpbmFsaXplZERhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBhZGQgZG9lcyBub3Qgc3VwcG9ydCB0d28gYXJndW1lbnRzIChkYXRhLGNhbGxiYWNrKVwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldERhdGFTZXQoKS5hZGQoZGVmYXVsdERhdGEpO1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNvbm5lY3QgdHdvIG5vZGVzIHdpdGggYSBuZXcgZWRnZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBzb3VyY2VOb2RlSWRcbiAgICogQHBhcmFtIHtOb2RlLmlkfSB0YXJnZXROb2RlSWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtQWRkRWRnZShzb3VyY2VOb2RlSWQsIHRhcmdldE5vZGVJZCkge1xuICAgIGNvbnN0IGRlZmF1bHREYXRhID0geyBmcm9tOiBzb3VyY2VOb2RlSWQsIHRvOiB0YXJnZXROb2RlSWQgfTtcbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5hZGRFZGdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWRkRWRnZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmFkZEVkZ2UoZGVmYXVsdERhdGEsIChmaW5hbGl6ZWREYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0aGlzLmluTW9kZSA9PT0gXCJhZGRFZGdlXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIGlmIGZvciB3aGF0ZXZlciByZWFzb24gdGhlIG1vZGUgaGFzIGNoYW5nZXMgKGR1ZSB0byBkYXRhc2V0IGNoYW5nZSkgZGlzcmVnYXJkIHRoZSBjYWxsYmFja1xuICAgICAgICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0RGF0YVNldCgpLmFkZChmaW5hbGl6ZWREYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgICAgICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRoZSBmdW5jdGlvbiBmb3IgY29ubmVjdCBkb2VzIG5vdCBzdXBwb3J0IHR3byBhcmd1bWVudHMgKGRhdGEsY2FsbGJhY2spXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0RGF0YVNldCgpLmFkZChkZWZhdWx0RGF0YSk7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKTtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBjb25uZWN0IHR3byBub2RlcyB3aXRoIGEgbmV3IGVkZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gc291cmNlTm9kZUlkXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gdGFyZ2V0Tm9kZUlkXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGVyZm9ybUVkaXRFZGdlKHNvdXJjZU5vZGVJZCwgdGFyZ2V0Tm9kZUlkKSB7XG4gICAgY29uc3QgZGVmYXVsdERhdGEgPSB7XG4gICAgICBpZDogdGhpcy5lZGdlQmVpbmdFZGl0ZWRJZCxcbiAgICAgIGZyb206IHNvdXJjZU5vZGVJZCxcbiAgICAgIHRvOiB0YXJnZXROb2RlSWQsXG4gICAgICBsYWJlbDogdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0KHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQpLmxhYmVsLFxuICAgIH07XG4gICAgbGV0IGVlRnVuY3QgPSB0aGlzLm9wdGlvbnMuZWRpdEVkZ2U7XG4gICAgaWYgKHR5cGVvZiBlZUZ1bmN0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBlZUZ1bmN0ID0gZWVGdW5jdC5lZGl0V2l0aG91dERyYWc7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZWVGdW5jdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAoZWVGdW5jdC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgZWVGdW5jdChkZWZhdWx0RGF0YSwgKGZpbmFsaXplZERhdGEpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhID09PSBudWxsIHx8XG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIHRoaXMuaW5Nb2RlICE9PSBcImVkaXRFZGdlXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIGlmIGZvciB3aGF0ZXZlciByZWFzb24gdGhlIG1vZGUgaGFzIGNoYW5nZXMgKGR1ZSB0byBkYXRhc2V0IGNoYW5nZSkgZGlzcmVnYXJkIHRoZSBjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVkZ2VzW2RlZmF1bHREYXRhLmlkXS51cGRhdGVFZGdlVHlwZSgpO1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0RGF0YVNldCgpLnVwZGF0ZShmaW5hbGl6ZWREYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgICAgICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRoZSBmdW5jdGlvbiBmb3IgZWRpdCBkb2VzIG5vdCBzdXBwb3J0IHR3byBhcmd1bWVudHMgKGRhdGEsIGNhbGxiYWNrKVwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzLmdldERhdGFTZXQoKS51cGRhdGUoZGVmYXVsdERhdGEpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsKCk7XG4gICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFuaXB1bGF0aW9uU3lzdGVtO1xuIiwgImltcG9ydCB7XG4gIENvbmZpZ3VyYXRvckNvbmZpZyxcbiAgQ29uZmlndXJhdG9ySGlkZU9wdGlvbixcbiAgT3B0aW9uc0NvbmZpZyxcbn0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIFRoaXMgb2JqZWN0IGNvbnRhaW5zIGFsbCBwb3NzaWJsZSBvcHRpb25zLiBJdCB3aWxsIGNoZWNrIGlmIHRoZSB0eXBlcyBhcmUgY29ycmVjdCwgaWYgcmVxdWlyZWQgaWYgdGhlIG9wdGlvbiBpcyBvbmVcbiAqIG9mIHRoZSBhbGxvd2VkIHZhbHVlcy5cbiAqXG4gKiBfX2FueV9fIG1lYW5zIHRoYXQgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGRvZXMgbm90IG1hdHRlci5cbiAqIF9fdHlwZV9fIGlzIGEgcmVxdWlyZWQgZmllbGQgZm9yIGFsbCBvYmplY3RzIGFuZCBjb250YWlucyB0aGUgYWxsb3dlZCB0eXBlcyBvZiBhbGwgb2JqZWN0c1xuICovXG5jb25zdCBzdHJpbmcgPSBcInN0cmluZ1wiO1xuY29uc3QgYm9vbCA9IFwiYm9vbGVhblwiO1xuY29uc3QgbnVtYmVyID0gXCJudW1iZXJcIjtcbmNvbnN0IGFycmF5ID0gXCJhcnJheVwiO1xuY29uc3Qgb2JqZWN0ID0gXCJvYmplY3RcIjsgLy8gc2hvdWxkIG9ubHkgYmUgaW4gYSBfX3R5cGVfXyBwcm9wZXJ0eVxuY29uc3QgZG9tID0gXCJkb21cIjtcbmNvbnN0IGFueSA9IFwiYW55XCI7XG5cbi8vIExpc3Qgb2YgZW5kcG9pbnRzXG5jb25zdCBlbmRQb2ludHMgPSBbXG4gIFwiYXJyb3dcIixcbiAgXCJiYXJcIixcbiAgXCJib3hcIixcbiAgXCJjaXJjbGVcIixcbiAgXCJjcm93XCIsXG4gIFwiY3VydmVcIixcbiAgXCJkaWFtb25kXCIsXG4gIFwiaW1hZ2VcIixcbiAgXCJpbnZfY3VydmVcIixcbiAgXCJpbnZfdHJpYW5nbGVcIixcbiAgXCJ0cmlhbmdsZVwiLFxuICBcInZlZVwiLFxuXTtcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uIC0tIFRoZSBfXypfXyBmb3JtYXQgaXMgdXNlZCB0byBwcmV2ZW50IGNvbGxpc2lvbnMgd2l0aCBhY3R1YWwgb3B0aW9uIG5hbWVzLiAqL1xuY29uc3Qgbm9kZU9wdGlvbnM6IE9wdGlvbnNDb25maWcgPSB7XG4gIGJvcmRlcldpZHRoOiB7IG51bWJlciB9LFxuICBib3JkZXJXaWR0aFNlbGVjdGVkOiB7IG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIGJyb2tlbkltYWdlOiB7IHN0cmluZywgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIGNob3Nlbjoge1xuICAgIGxhYmVsOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBub2RlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgfSxcbiAgY29sb3I6IHtcbiAgICBib3JkZXI6IHsgc3RyaW5nIH0sXG4gICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICBoaWdobGlnaHQ6IHtcbiAgICAgIGJvcmRlcjogeyBzdHJpbmcgfSxcbiAgICAgIGJhY2tncm91bmQ6IHsgc3RyaW5nIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgIH0sXG4gICAgaG92ZXI6IHtcbiAgICAgIGJvcmRlcjogeyBzdHJpbmcgfSxcbiAgICAgIGJhY2tncm91bmQ6IHsgc3RyaW5nIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgfSxcbiAgb3BhY2l0eTogeyBudW1iZXIsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICBmaXhlZDoge1xuICAgIHg6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHk6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuICBmb250OiB7XG4gICAgYWxpZ246IHsgc3RyaW5nIH0sXG4gICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgc2l6ZTogeyBudW1iZXIgfSwgLy8gcHhcbiAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgIGJhY2tncm91bmQ6IHsgc3RyaW5nIH0sXG4gICAgc3Ryb2tlV2lkdGg6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgc3Ryb2tlQ29sb3I6IHsgc3RyaW5nIH0sXG4gICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICBtdWx0aTogeyBib29sZWFuOiBib29sLCBzdHJpbmcgfSxcbiAgICBib2xkOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBib2xkaXRhbDoge1xuICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgIH0sXG4gICAgaXRhbDoge1xuICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgIH0sXG4gICAgbW9ubzoge1xuICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgfSxcbiAgZ3JvdXA6IHsgc3RyaW5nLCBudW1iZXIsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICBoZWlnaHRDb25zdHJhaW50OiB7XG4gICAgbWluaW11bTogeyBudW1iZXIgfSxcbiAgICB2YWxpZ246IHsgc3RyaW5nIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sLCBudW1iZXIgfSxcbiAgfSxcbiAgaGlkZGVuOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgaWNvbjoge1xuICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgY29kZTogeyBzdHJpbmcgfSwgLy8nXFx1ZjAwNycsXG4gICAgc2l6ZTogeyBudW1iZXIgfSwgLy81MCxcbiAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICB3ZWlnaHQ6IHsgc3RyaW5nLCBudW1iZXIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgaWQ6IHsgc3RyaW5nLCBudW1iZXIgfSxcbiAgaW1hZ2U6IHtcbiAgICBzZWxlY3RlZDogeyBzdHJpbmcsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LCAvLyAtLT4gVVJMXG4gICAgdW5zZWxlY3RlZDogeyBzdHJpbmcsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LCAvLyAtLT4gVVJMXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgfSxcbiAgaW1hZ2VQYWRkaW5nOiB7XG4gICAgdG9wOiB7IG51bWJlciB9LFxuICAgIHJpZ2h0OiB7IG51bWJlciB9LFxuICAgIGJvdHRvbTogeyBudW1iZXIgfSxcbiAgICBsZWZ0OiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgbnVtYmVyIH0sXG4gIH0sXG4gIGxhYmVsOiB7IHN0cmluZywgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIGxhYmVsSGlnaGxpZ2h0Qm9sZDogeyBib29sZWFuOiBib29sIH0sXG4gIGxldmVsOiB7IG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIG1hcmdpbjoge1xuICAgIHRvcDogeyBudW1iZXIgfSxcbiAgICByaWdodDogeyBudW1iZXIgfSxcbiAgICBib3R0b206IHsgbnVtYmVyIH0sXG4gICAgbGVmdDogeyBudW1iZXIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIG51bWJlciB9LFxuICB9LFxuICBtYXNzOiB7IG51bWJlciB9LFxuICBwaHlzaWNzOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgc2NhbGluZzoge1xuICAgIG1pbjogeyBudW1iZXIgfSxcbiAgICBtYXg6IHsgbnVtYmVyIH0sXG4gICAgbGFiZWw6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgbWluOiB7IG51bWJlciB9LFxuICAgICAgbWF4OiB7IG51bWJlciB9LFxuICAgICAgbWF4VmlzaWJsZTogeyBudW1iZXIgfSxcbiAgICAgIGRyYXdUaHJlc2hvbGQ6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICB9LFxuICAgIGN1c3RvbVNjYWxpbmdGdW5jdGlvbjogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gIH0sXG4gIHNoYWRvdzoge1xuICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgIHNpemU6IHsgbnVtYmVyIH0sXG4gICAgeDogeyBudW1iZXIgfSxcbiAgICB5OiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuICBzaGFwZToge1xuICAgIHN0cmluZzogW1xuICAgICAgXCJjdXN0b21cIixcbiAgICAgIFwiZWxsaXBzZVwiLFxuICAgICAgXCJjaXJjbGVcIixcbiAgICAgIFwiZGF0YWJhc2VcIixcbiAgICAgIFwiYm94XCIsXG4gICAgICBcInRleHRcIixcbiAgICAgIFwiaW1hZ2VcIixcbiAgICAgIFwiY2lyY3VsYXJJbWFnZVwiLFxuICAgICAgXCJkaWFtb25kXCIsXG4gICAgICBcImRvdFwiLFxuICAgICAgXCJzdGFyXCIsXG4gICAgICBcInRyaWFuZ2xlXCIsXG4gICAgICBcInRyaWFuZ2xlRG93blwiLFxuICAgICAgXCJzcXVhcmVcIixcbiAgICAgIFwiaWNvblwiLFxuICAgICAgXCJoZXhhZ29uXCIsXG4gICAgXSxcbiAgfSxcbiAgY3R4UmVuZGVyZXI6IHsgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICBzaGFwZVByb3BlcnRpZXM6IHtcbiAgICBib3JkZXJEYXNoZXM6IHsgYm9vbGVhbjogYm9vbCwgYXJyYXkgfSxcbiAgICBib3JkZXJSYWRpdXM6IHsgbnVtYmVyIH0sXG4gICAgaW50ZXJwb2xhdGlvbjogeyBib29sZWFuOiBib29sIH0sXG4gICAgdXNlSW1hZ2VTaXplOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICB1c2VCb3JkZXJXaXRoSW1hZ2U6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGNvb3JkaW5hdGVPcmlnaW46IHsgc3RyaW5nOiBbXCJjZW50ZXJcIiwgXCJ0b3AtbGVmdFwiXSB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICB9LFxuICBzaXplOiB7IG51bWJlciB9LFxuICB0aXRsZTogeyBzdHJpbmcsIGRvbSwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIHZhbHVlOiB7IG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIHdpZHRoQ29uc3RyYWludDoge1xuICAgIG1pbmltdW06IHsgbnVtYmVyIH0sXG4gICAgbWF4aW11bTogeyBudW1iZXIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wsIG51bWJlciB9LFxuICB9LFxuICB4OiB7IG51bWJlciB9LFxuICB5OiB7IG51bWJlciB9LFxuICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbn07XG5jb25zdCBhbGxPcHRpb25zOiBPcHRpb25zQ29uZmlnID0ge1xuICBjb25maWd1cmU6IHtcbiAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBmaWx0ZXI6IHsgYm9vbGVhbjogYm9vbCwgc3RyaW5nLCBhcnJheSwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIGNvbnRhaW5lcjogeyBkb20gfSxcbiAgICBzaG93QnV0dG9uOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wsIHN0cmluZywgYXJyYXksIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgfSxcbiAgZWRnZXM6IHtcbiAgICBhcnJvd3M6IHtcbiAgICAgIHRvOiB7XG4gICAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgICBzY2FsZUZhY3RvcjogeyBudW1iZXIgfSxcbiAgICAgICAgdHlwZTogeyBzdHJpbmc6IGVuZFBvaW50cyB9LFxuICAgICAgICBpbWFnZUhlaWdodDogeyBudW1iZXIgfSxcbiAgICAgICAgaW1hZ2VXaWR0aDogeyBudW1iZXIgfSxcbiAgICAgICAgc3JjOiB7IHN0cmluZyB9LFxuICAgICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIH0sXG4gICAgICBtaWRkbGU6IHtcbiAgICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICAgIHNjYWxlRmFjdG9yOiB7IG51bWJlciB9LFxuICAgICAgICB0eXBlOiB7IHN0cmluZzogZW5kUG9pbnRzIH0sXG4gICAgICAgIGltYWdlV2lkdGg6IHsgbnVtYmVyIH0sXG4gICAgICAgIGltYWdlSGVpZ2h0OiB7IG51bWJlciB9LFxuICAgICAgICBzcmM6IHsgc3RyaW5nIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgfSxcbiAgICAgIGZyb206IHtcbiAgICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICAgIHNjYWxlRmFjdG9yOiB7IG51bWJlciB9LFxuICAgICAgICB0eXBlOiB7IHN0cmluZzogZW5kUG9pbnRzIH0sXG4gICAgICAgIGltYWdlV2lkdGg6IHsgbnVtYmVyIH0sXG4gICAgICAgIGltYWdlSGVpZ2h0OiB7IG51bWJlciB9LFxuICAgICAgICBzcmM6IHsgc3RyaW5nIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgfSxcbiAgICAgIF9fdHlwZV9fOiB7IHN0cmluZzogW1wiZnJvbVwiLCBcInRvXCIsIFwibWlkZGxlXCJdLCBvYmplY3QgfSxcbiAgICB9LFxuICAgIGVuZFBvaW50T2Zmc2V0OiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIG51bWJlcjogbnVtYmVyLFxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIG51bWJlcjogbnVtYmVyLFxuICAgICAgfSxcbiAgICAgIF9fdHlwZV9fOiB7XG4gICAgICAgIG9iamVjdDogb2JqZWN0LFxuICAgICAgICBudW1iZXI6IG51bWJlcixcbiAgICAgIH0sXG4gICAgfSxcbiAgICBhcnJvd1N0cmlrZXRocm91Z2g6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGJhY2tncm91bmQ6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICBzaXplOiB7IG51bWJlciB9LFxuICAgICAgZGFzaGVzOiB7IGJvb2xlYW46IGJvb2wsIGFycmF5IH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICB9LFxuICAgIGNob3Nlbjoge1xuICAgICAgbGFiZWw6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgICAgZWRnZTogeyBib29sZWFuOiBib29sLCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICB9LFxuICAgIGNvbG9yOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIGhpZ2hsaWdodDogeyBzdHJpbmcgfSxcbiAgICAgIGhvdmVyOiB7IHN0cmluZyB9LFxuICAgICAgaW5oZXJpdDogeyBzdHJpbmc6IFtcImZyb21cIiwgXCJ0b1wiLCBcImJvdGhcIl0sIGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIG9wYWNpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgIH0sXG4gICAgZGFzaGVzOiB7IGJvb2xlYW46IGJvb2wsIGFycmF5IH0sXG4gICAgZm9udDoge1xuICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICAgIGJhY2tncm91bmQ6IHsgc3RyaW5nIH0sXG4gICAgICBzdHJva2VXaWR0aDogeyBudW1iZXIgfSwgLy8gcHhcbiAgICAgIHN0cm9rZUNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgYWxpZ246IHsgc3RyaW5nOiBbXCJob3Jpem9udGFsXCIsIFwidG9wXCIsIFwibWlkZGxlXCIsIFwiYm90dG9tXCJdIH0sXG4gICAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgICAgbXVsdGk6IHsgYm9vbGVhbjogYm9vbCwgc3RyaW5nIH0sXG4gICAgICBib2xkOiB7XG4gICAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgICBtb2Q6IHsgc3RyaW5nIH0sXG4gICAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgICB9LFxuICAgICAgYm9sZGl0YWw6IHtcbiAgICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICAgIH0sXG4gICAgICBpdGFsOiB7XG4gICAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgICBtb2Q6IHsgc3RyaW5nIH0sXG4gICAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgICB9LFxuICAgICAgbW9ubzoge1xuICAgICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgICAgc2l6ZTogeyBudW1iZXIgfSwgLy8gcHhcbiAgICAgICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgICAgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBoaWRkZW46IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGhvdmVyV2lkdGg6IHsgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiwgbnVtYmVyIH0sXG4gICAgbGFiZWw6IHsgc3RyaW5nLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgICBsYWJlbEhpZ2hsaWdodEJvbGQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGxlbmd0aDogeyBudW1iZXIsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICAgIHBoeXNpY3M6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHNjYWxpbmc6IHtcbiAgICAgIG1pbjogeyBudW1iZXIgfSxcbiAgICAgIG1heDogeyBudW1iZXIgfSxcbiAgICAgIGxhYmVsOiB7XG4gICAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgICBtaW46IHsgbnVtYmVyIH0sXG4gICAgICAgIG1heDogeyBudW1iZXIgfSxcbiAgICAgICAgbWF4VmlzaWJsZTogeyBudW1iZXIgfSxcbiAgICAgICAgZHJhd1RocmVzaG9sZDogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgICB9LFxuICAgICAgY3VzdG9tU2NhbGluZ0Z1bmN0aW9uOiB7IGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICAgIH0sXG4gICAgc2VsZWN0aW9uV2lkdGg6IHsgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiwgbnVtYmVyIH0sXG4gICAgc2VsZlJlZmVyZW5jZVNpemU6IHsgbnVtYmVyIH0sXG4gICAgc2VsZlJlZmVyZW5jZToge1xuICAgICAgc2l6ZTogeyBudW1iZXIgfSxcbiAgICAgIGFuZ2xlOiB7IG51bWJlciB9LFxuICAgICAgcmVuZGVyQmVoaW5kVGhlTm9kZTogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIHNoYWRvdzoge1xuICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sXG4gICAgICB4OiB7IG51bWJlciB9LFxuICAgICAgeTogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgc21vb3RoOiB7XG4gICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIHR5cGU6IHtcbiAgICAgICAgc3RyaW5nOiBbXG4gICAgICAgICAgXCJkeW5hbWljXCIsXG4gICAgICAgICAgXCJjb250aW51b3VzXCIsXG4gICAgICAgICAgXCJkaXNjcmV0ZVwiLFxuICAgICAgICAgIFwiZGlhZ29uYWxDcm9zc1wiLFxuICAgICAgICAgIFwic3RyYWlnaHRDcm9zc1wiLFxuICAgICAgICAgIFwiaG9yaXpvbnRhbFwiLFxuICAgICAgICAgIFwidmVydGljYWxcIixcbiAgICAgICAgICBcImN1cnZlZENXXCIsXG4gICAgICAgICAgXCJjdXJ2ZWRDQ1dcIixcbiAgICAgICAgICBcImN1YmljQmV6aWVyXCIsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgcm91bmRuZXNzOiB7IG51bWJlciB9LFxuICAgICAgZm9yY2VEaXJlY3Rpb246IHtcbiAgICAgICAgc3RyaW5nOiBbXCJob3Jpem9udGFsXCIsIFwidmVydGljYWxcIiwgXCJub25lXCJdLFxuICAgICAgICBib29sZWFuOiBib29sLFxuICAgICAgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgdGl0bGU6IHsgc3RyaW5nLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgICB3aWR0aDogeyBudW1iZXIgfSxcbiAgICB3aWR0aENvbnN0cmFpbnQ6IHtcbiAgICAgIG1heGltdW06IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wsIG51bWJlciB9LFxuICAgIH0sXG4gICAgdmFsdWU6IHsgbnVtYmVyLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgZ3JvdXBzOiB7XG4gICAgdXNlRGVmYXVsdEdyb3VwczogeyBib29sZWFuOiBib29sIH0sXG4gICAgX19hbnlfXzogbm9kZU9wdGlvbnMsXG4gICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gIH0sXG4gIGludGVyYWN0aW9uOiB7XG4gICAgZHJhZ05vZGVzOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBkcmFnVmlldzogeyBib29sZWFuOiBib29sIH0sXG4gICAgaGlkZUVkZ2VzT25EcmFnOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBoaWRlRWRnZXNPblpvb206IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGhpZGVOb2Rlc09uRHJhZzogeyBib29sZWFuOiBib29sIH0sXG4gICAgaG92ZXI6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGtleWJvYXJkOiB7XG4gICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIHNwZWVkOiB7XG4gICAgICAgIHg6IHsgbnVtYmVyIH0sXG4gICAgICAgIHk6IHsgbnVtYmVyIH0sXG4gICAgICAgIHpvb206IHsgbnVtYmVyIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICAgICAgfSxcbiAgICAgIGJpbmRUb1dpbmRvdzogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBhdXRvRm9jdXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgfSxcbiAgICBtdWx0aXNlbGVjdDogeyBib29sZWFuOiBib29sIH0sXG4gICAgbmF2aWdhdGlvbkJ1dHRvbnM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHNlbGVjdGFibGU6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHNlbGVjdENvbm5lY3RlZEVkZ2VzOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBob3ZlckNvbm5lY3RlZEVkZ2VzOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICB0b29sdGlwRGVsYXk6IHsgbnVtYmVyIH0sXG4gICAgem9vbVZpZXc6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHpvb21TcGVlZDogeyBudW1iZXIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgbGF5b3V0OiB7XG4gICAgcmFuZG9tU2VlZDogeyB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIsIG51bWJlciwgc3RyaW5nIH0sXG4gICAgaW1wcm92ZWRMYXlvdXQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGNsdXN0ZXJUaHJlc2hvbGQ6IHsgbnVtYmVyIH0sXG4gICAgaGllcmFyY2hpY2FsOiB7XG4gICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIGxldmVsU2VwYXJhdGlvbjogeyBudW1iZXIgfSxcbiAgICAgIG5vZGVTcGFjaW5nOiB7IG51bWJlciB9LFxuICAgICAgdHJlZVNwYWNpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBibG9ja1NoaWZ0aW5nOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIGVkZ2VNaW5pbWl6YXRpb246IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgcGFyZW50Q2VudHJhbGl6YXRpb246IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgZGlyZWN0aW9uOiB7IHN0cmluZzogW1wiVURcIiwgXCJEVVwiLCBcIkxSXCIsIFwiUkxcIl0gfSwgLy8gVUQsIERVLCBMUiwgUkxcbiAgICAgIHNvcnRNZXRob2Q6IHsgc3RyaW5nOiBbXCJodWJzaXplXCIsIFwiZGlyZWN0ZWRcIl0gfSwgLy8gaHVic2l6ZSwgZGlyZWN0ZWRcbiAgICAgIHNoYWtlVG93YXJkczogeyBzdHJpbmc6IFtcImxlYXZlc1wiLCBcInJvb3RzXCJdIH0sIC8vIGxlYXZlcywgcm9vdHNcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gIH0sXG4gIG1hbmlwdWxhdGlvbjoge1xuICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGluaXRpYWxseUFjdGl2ZTogeyBib29sZWFuOiBib29sIH0sXG4gICAgYWRkTm9kZTogeyBib29sZWFuOiBib29sLCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgYWRkRWRnZTogeyBib29sZWFuOiBib29sLCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgZWRpdE5vZGU6IHsgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIGVkaXRFZGdlOiB7XG4gICAgICBlZGl0V2l0aG91dERyYWc6IHsgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sLCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgfSxcbiAgICBkZWxldGVOb2RlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBkZWxldGVFZGdlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBjb250cm9sTm9kZVN0eWxlOiBub2RlT3B0aW9ucyxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgfSxcbiAgbm9kZXM6IG5vZGVPcHRpb25zLFxuICBwaHlzaWNzOiB7XG4gICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgYmFybmVzSHV0OiB7XG4gICAgICB0aGV0YTogeyBudW1iZXIgfSxcbiAgICAgIGdyYXZpdGF0aW9uYWxDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIGNlbnRyYWxHcmF2aXR5OiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nTGVuZ3RoOiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IHsgbnVtYmVyIH0sXG4gICAgICBkYW1waW5nOiB7IG51bWJlciB9LFxuICAgICAgYXZvaWRPdmVybGFwOiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgfSxcbiAgICBmb3JjZUF0bGFzMkJhc2VkOiB7XG4gICAgICB0aGV0YTogeyBudW1iZXIgfSxcbiAgICAgIGdyYXZpdGF0aW9uYWxDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIGNlbnRyYWxHcmF2aXR5OiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nTGVuZ3RoOiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IHsgbnVtYmVyIH0sXG4gICAgICBkYW1waW5nOiB7IG51bWJlciB9LFxuICAgICAgYXZvaWRPdmVybGFwOiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgfSxcbiAgICByZXB1bHNpb246IHtcbiAgICAgIGNlbnRyYWxHcmF2aXR5OiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nTGVuZ3RoOiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IHsgbnVtYmVyIH0sXG4gICAgICBub2RlRGlzdGFuY2U6IHsgbnVtYmVyIH0sXG4gICAgICBkYW1waW5nOiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgfSxcbiAgICBoaWVyYXJjaGljYWxSZXB1bHNpb246IHtcbiAgICAgIGNlbnRyYWxHcmF2aXR5OiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nTGVuZ3RoOiB7IG51bWJlciB9LFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IHsgbnVtYmVyIH0sXG4gICAgICBub2RlRGlzdGFuY2U6IHsgbnVtYmVyIH0sXG4gICAgICBkYW1waW5nOiB7IG51bWJlciB9LFxuICAgICAgYXZvaWRPdmVybGFwOiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgfSxcbiAgICBtYXhWZWxvY2l0eTogeyBudW1iZXIgfSxcbiAgICBtaW5WZWxvY2l0eTogeyBudW1iZXIgfSwgLy8gcHgvc1xuICAgIHNvbHZlcjoge1xuICAgICAgc3RyaW5nOiBbXG4gICAgICAgIFwiYmFybmVzSHV0XCIsXG4gICAgICAgIFwicmVwdWxzaW9uXCIsXG4gICAgICAgIFwiaGllcmFyY2hpY2FsUmVwdWxzaW9uXCIsXG4gICAgICAgIFwiZm9yY2VBdGxhczJCYXNlZFwiLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHN0YWJpbGl6YXRpb246IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgaXRlcmF0aW9uczogeyBudW1iZXIgfSwgLy8gbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9uIHRvIHN0YWJpbGl6ZVxuICAgICAgdXBkYXRlSW50ZXJ2YWw6IHsgbnVtYmVyIH0sXG4gICAgICBvbmx5RHluYW1pY0VkZ2VzOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIGZpdDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICB9LFxuICAgIHRpbWVzdGVwOiB7IG51bWJlciB9LFxuICAgIGFkYXB0aXZlVGltZXN0ZXA6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHdpbmQ6IHtcbiAgICAgIHg6IHsgbnVtYmVyIH0sXG4gICAgICB5OiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgfSxcblxuICAvL2dsb2JhbHMgOlxuICBhdXRvUmVzaXplOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgY2xpY2tUb1VzZTogeyBib29sZWFuOiBib29sIH0sXG4gIGxvY2FsZTogeyBzdHJpbmcgfSxcbiAgbG9jYWxlczoge1xuICAgIF9fYW55X186IHsgYW55IH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gIH0sXG4gIGhlaWdodDogeyBzdHJpbmcgfSxcbiAgd2lkdGg6IHsgc3RyaW5nIH0sXG4gIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxufTtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5cbi8qKlxuICogVGhpcyBwcm92aWRlcyByYW5nZXMsIGluaXRpYWwgdmFsdWVzLCBzdGVwcyBhbmQgZHJvcGRvd24gbWVudSBjaG9pY2VzIGZvciB0aGVcbiAqIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHJlbWFya3NcbiAqIENoZWNrYm94OiBgYm9vbGVhbmBcbiAqICAgVGhlIHZhbHVlIHN1cGxsaWVkIHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAqXG4gKiBUZXh0IGZpZWxkOiBgc3RyaW5nYFxuICogICBUaGUgcGFzc2VkIHRleHQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbml0aWFsIHZhbHVlLiBBbnkgdGV4dCB3aWxsIGJlXG4gKiAgIGFjY2VwdGVkIGFmdGVyd2FyZHMuXG4gKlxuICogTnVtYmVyIHJhbmdlOiBgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl1gXG4gKiAgIFRoZSBtZWFuaW5ncyBhcmUgYFtpbml0aWFsIHZhbHVlLCBtaW4sIG1heCwgc3RlcF1gLlxuICpcbiAqIERyb3Bkb3duOiBgW0V4Y2x1ZGU8c3RyaW5nLCBcImNvbG9yXCI+LCAuLi4oc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbilbXV1gXG4gKiAgIFRyYW5zbGF0aW9ucyBmb3IgcGVvcGxlIHdpdGggcG9vciB1bmRlcnN0YW5kaW5nIG9mIFR5cGVTY3JpcHQ6IHRoZSBmaXJzdFxuICogICB2YWx1ZSBhbHdheXMgaGFzIHRvIGJlIGEgc3RyaW5nIGJ1dCBuZXZlciBgXCJjb2xvclwiYCwgdGhlIHJlc3QgY2FuIGJlIGFueVxuICogICBjb21iaW5hdGlvbiBvZiBzdHJpbmdzLCBudW1iZXJzIGFuZCBib29sZWFucy5cbiAqXG4gKiBDb2xvciBwaWNrZXI6IGBbXCJjb2xvclwiLCBzdHJpbmddYFxuICogICBUaGUgZmlyc3QgdmFsdWUgc2F5cyB0aGlzIHdpbGwgYmUgYSBjb2xvciBwaWNrZXIgbm90IGEgZHJvcGRvd24gbWVudS4gVGhlXG4gKiAgIG5leHQgdmFsdWUgaXMgdGhlIGluaXRpYWwgY29sb3IuXG4gKi9cbmNvbnN0IGNvbmZpZ3VyZU9wdGlvbnM6IENvbmZpZ3VyYXRvckNvbmZpZyA9IHtcbiAgbm9kZXM6IHtcbiAgICBib3JkZXJXaWR0aDogWzEsIDAsIDEwLCAxXSxcbiAgICBib3JkZXJXaWR0aFNlbGVjdGVkOiBbMiwgMCwgMTAsIDFdLFxuICAgIGNvbG9yOiB7XG4gICAgICBib3JkZXI6IFtcImNvbG9yXCIsIFwiIzJCN0NFOVwiXSxcbiAgICAgIGJhY2tncm91bmQ6IFtcImNvbG9yXCIsIFwiIzk3QzJGQ1wiXSxcbiAgICAgIGhpZ2hsaWdodDoge1xuICAgICAgICBib3JkZXI6IFtcImNvbG9yXCIsIFwiIzJCN0NFOVwiXSxcbiAgICAgICAgYmFja2dyb3VuZDogW1wiY29sb3JcIiwgXCIjRDJFNUZGXCJdLFxuICAgICAgfSxcbiAgICAgIGhvdmVyOiB7XG4gICAgICAgIGJvcmRlcjogW1wiY29sb3JcIiwgXCIjMkI3Q0U5XCJdLFxuICAgICAgICBiYWNrZ3JvdW5kOiBbXCJjb2xvclwiLCBcIiNEMkU1RkZcIl0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgb3BhY2l0eTogWzAsIDAsIDEsIDAuMV0sXG4gICAgZml4ZWQ6IHtcbiAgICAgIHg6IGZhbHNlLFxuICAgICAgeTogZmFsc2UsXG4gICAgfSxcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogW1wiY29sb3JcIiwgXCIjMzQzNDM0XCJdLFxuICAgICAgc2l6ZTogWzE0LCAwLCAxMDAsIDFdLCAvLyBweFxuICAgICAgZmFjZTogW1wiYXJpYWxcIiwgXCJ2ZXJkYW5hXCIsIFwidGFob21hXCJdLFxuICAgICAgYmFja2dyb3VuZDogW1wiY29sb3JcIiwgXCJub25lXCJdLFxuICAgICAgc3Ryb2tlV2lkdGg6IFswLCAwLCA1MCwgMV0sIC8vIHB4XG4gICAgICBzdHJva2VDb2xvcjogW1wiY29sb3JcIiwgXCIjZmZmZmZmXCJdLFxuICAgIH0sXG4gICAgLy9ncm91cDogJ3N0cmluZycsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBsYWJlbEhpZ2hsaWdodEJvbGQ6IHRydWUsXG4gICAgLy9pY29uOiB7XG4gICAgLy8gIGZhY2U6ICdzdHJpbmcnLCAgLy8nRm9udEF3ZXNvbWUnLFxuICAgIC8vICBjb2RlOiAnc3RyaW5nJywgIC8vJ1xcdWYwMDcnLFxuICAgIC8vICBzaXplOiBbNTAsIDAsIDIwMCwgMV0sICAvLzUwLFxuICAgIC8vICBjb2xvcjogWydjb2xvcicsJyMyQjdDRTknXSAgIC8vJyNhYTAwZmYnXG4gICAgLy99LFxuICAgIC8vaW1hZ2U6ICdzdHJpbmcnLCAvLyAtLT4gVVJMXG4gICAgcGh5c2ljczogdHJ1ZSxcbiAgICBzY2FsaW5nOiB7XG4gICAgICBtaW46IFsxMCwgMCwgMjAwLCAxXSxcbiAgICAgIG1heDogWzMwLCAwLCAyMDAsIDFdLFxuICAgICAgbGFiZWw6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG1pbjogWzE0LCAwLCAyMDAsIDFdLFxuICAgICAgICBtYXg6IFszMCwgMCwgMjAwLCAxXSxcbiAgICAgICAgbWF4VmlzaWJsZTogWzMwLCAwLCAyMDAsIDFdLFxuICAgICAgICBkcmF3VGhyZXNob2xkOiBbNSwgMCwgMjAsIDFdLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHNoYWRvdzoge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBjb2xvcjogXCJyZ2JhKDAsMCwwLDAuNSlcIixcbiAgICAgIHNpemU6IFsxMCwgMCwgMjAsIDFdLFxuICAgICAgeDogWzUsIC0zMCwgMzAsIDFdLFxuICAgICAgeTogWzUsIC0zMCwgMzAsIDFdLFxuICAgIH0sXG4gICAgc2hhcGU6IFtcbiAgICAgIFwiZWxsaXBzZVwiLFxuICAgICAgXCJib3hcIixcbiAgICAgIFwiY2lyY2xlXCIsXG4gICAgICBcImRhdGFiYXNlXCIsXG4gICAgICBcImRpYW1vbmRcIixcbiAgICAgIFwiZG90XCIsXG4gICAgICBcInNxdWFyZVwiLFxuICAgICAgXCJzdGFyXCIsXG4gICAgICBcInRleHRcIixcbiAgICAgIFwidHJpYW5nbGVcIixcbiAgICAgIFwidHJpYW5nbGVEb3duXCIsXG4gICAgICBcImhleGFnb25cIixcbiAgICBdLFxuICAgIHNoYXBlUHJvcGVydGllczoge1xuICAgICAgYm9yZGVyRGFzaGVzOiBmYWxzZSxcbiAgICAgIGJvcmRlclJhZGl1czogWzYsIDAsIDIwLCAxXSxcbiAgICAgIGludGVycG9sYXRpb246IHRydWUsXG4gICAgICB1c2VJbWFnZVNpemU6IGZhbHNlLFxuICAgIH0sXG4gICAgc2l6ZTogWzI1LCAwLCAyMDAsIDFdLFxuICB9LFxuICBlZGdlczoge1xuICAgIGFycm93czoge1xuICAgICAgdG86IHsgZW5hYmxlZDogZmFsc2UsIHNjYWxlRmFjdG9yOiBbMSwgMCwgMywgMC4wNV0sIHR5cGU6IFwiYXJyb3dcIiB9LFxuICAgICAgbWlkZGxlOiB7IGVuYWJsZWQ6IGZhbHNlLCBzY2FsZUZhY3RvcjogWzEsIDAsIDMsIDAuMDVdLCB0eXBlOiBcImFycm93XCIgfSxcbiAgICAgIGZyb206IHsgZW5hYmxlZDogZmFsc2UsIHNjYWxlRmFjdG9yOiBbMSwgMCwgMywgMC4wNV0sIHR5cGU6IFwiYXJyb3dcIiB9LFxuICAgIH0sXG4gICAgZW5kUG9pbnRPZmZzZXQ6IHtcbiAgICAgIGZyb206IFswLCAtMTAsIDEwLCAxXSxcbiAgICAgIHRvOiBbMCwgLTEwLCAxMCwgMV0sXG4gICAgfSxcbiAgICBhcnJvd1N0cmlrZXRocm91Z2g6IHRydWUsXG4gICAgY29sb3I6IHtcbiAgICAgIGNvbG9yOiBbXCJjb2xvclwiLCBcIiM4NDg0ODRcIl0sXG4gICAgICBoaWdobGlnaHQ6IFtcImNvbG9yXCIsIFwiIzg0ODQ4NFwiXSxcbiAgICAgIGhvdmVyOiBbXCJjb2xvclwiLCBcIiM4NDg0ODRcIl0sXG4gICAgICBpbmhlcml0OiBbXCJmcm9tXCIsIFwidG9cIiwgXCJib3RoXCIsIHRydWUsIGZhbHNlXSxcbiAgICAgIG9wYWNpdHk6IFsxLCAwLCAxLCAwLjA1XSxcbiAgICB9LFxuICAgIGRhc2hlczogZmFsc2UsXG4gICAgZm9udDoge1xuICAgICAgY29sb3I6IFtcImNvbG9yXCIsIFwiIzM0MzQzNFwiXSxcbiAgICAgIHNpemU6IFsxNCwgMCwgMTAwLCAxXSwgLy8gcHhcbiAgICAgIGZhY2U6IFtcImFyaWFsXCIsIFwidmVyZGFuYVwiLCBcInRhaG9tYVwiXSxcbiAgICAgIGJhY2tncm91bmQ6IFtcImNvbG9yXCIsIFwibm9uZVwiXSxcbiAgICAgIHN0cm9rZVdpZHRoOiBbMiwgMCwgNTAsIDFdLCAvLyBweFxuICAgICAgc3Ryb2tlQ29sb3I6IFtcImNvbG9yXCIsIFwiI2ZmZmZmZlwiXSxcbiAgICAgIGFsaWduOiBbXCJob3Jpem9udGFsXCIsIFwidG9wXCIsIFwibWlkZGxlXCIsIFwiYm90dG9tXCJdLFxuICAgIH0sXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBob3ZlcldpZHRoOiBbMS41LCAwLCA1LCAwLjFdLFxuICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogdHJ1ZSxcbiAgICBwaHlzaWNzOiB0cnVlLFxuICAgIHNjYWxpbmc6IHtcbiAgICAgIG1pbjogWzEsIDAsIDEwMCwgMV0sXG4gICAgICBtYXg6IFsxNSwgMCwgMTAwLCAxXSxcbiAgICAgIGxhYmVsOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIG1pbjogWzE0LCAwLCAyMDAsIDFdLFxuICAgICAgICBtYXg6IFszMCwgMCwgMjAwLCAxXSxcbiAgICAgICAgbWF4VmlzaWJsZTogWzMwLCAwLCAyMDAsIDFdLFxuICAgICAgICBkcmF3VGhyZXNob2xkOiBbNSwgMCwgMjAsIDFdLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHNlbGVjdGlvbldpZHRoOiBbMS41LCAwLCA1LCAwLjFdLFxuICAgIHNlbGZSZWZlcmVuY2VTaXplOiBbMjAsIDAsIDIwMCwgMV0sXG4gICAgc2VsZlJlZmVyZW5jZToge1xuICAgICAgc2l6ZTogWzIwLCAwLCAyMDAsIDFdLFxuICAgICAgYW5nbGU6IFtNYXRoLlBJIC8gMiwgLTYgKiBNYXRoLlBJLCA2ICogTWF0aC5QSSwgTWF0aC5QSSAvIDhdLFxuICAgICAgcmVuZGVyQmVoaW5kVGhlTm9kZTogdHJ1ZSxcbiAgICB9LFxuICAgIHNoYWRvdzoge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBjb2xvcjogXCJyZ2JhKDAsMCwwLDAuNSlcIixcbiAgICAgIHNpemU6IFsxMCwgMCwgMjAsIDFdLFxuICAgICAgeDogWzUsIC0zMCwgMzAsIDFdLFxuICAgICAgeTogWzUsIC0zMCwgMzAsIDFdLFxuICAgIH0sXG4gICAgc21vb3RoOiB7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgdHlwZTogW1xuICAgICAgICBcImR5bmFtaWNcIixcbiAgICAgICAgXCJjb250aW51b3VzXCIsXG4gICAgICAgIFwiZGlzY3JldGVcIixcbiAgICAgICAgXCJkaWFnb25hbENyb3NzXCIsXG4gICAgICAgIFwic3RyYWlnaHRDcm9zc1wiLFxuICAgICAgICBcImhvcml6b250YWxcIixcbiAgICAgICAgXCJ2ZXJ0aWNhbFwiLFxuICAgICAgICBcImN1cnZlZENXXCIsXG4gICAgICAgIFwiY3VydmVkQ0NXXCIsXG4gICAgICAgIFwiY3ViaWNCZXppZXJcIixcbiAgICAgIF0sXG4gICAgICBmb3JjZURpcmVjdGlvbjogW1wiaG9yaXpvbnRhbFwiLCBcInZlcnRpY2FsXCIsIFwibm9uZVwiXSxcbiAgICAgIHJvdW5kbmVzczogWzAuNSwgMCwgMSwgMC4wNV0sXG4gICAgfSxcbiAgICB3aWR0aDogWzEsIDAsIDMwLCAxXSxcbiAgfSxcbiAgbGF5b3V0OiB7XG4gICAgLy9yYW5kb21TZWVkOiBbMCwgMCwgNTAwLCAxXSxcbiAgICAvL2ltcHJvdmVkTGF5b3V0OiB0cnVlLFxuICAgIGhpZXJhcmNoaWNhbDoge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBsZXZlbFNlcGFyYXRpb246IFsxNTAsIDIwLCA1MDAsIDVdLFxuICAgICAgbm9kZVNwYWNpbmc6IFsxMDAsIDIwLCA1MDAsIDVdLFxuICAgICAgdHJlZVNwYWNpbmc6IFsyMDAsIDIwLCA1MDAsIDVdLFxuICAgICAgYmxvY2tTaGlmdGluZzogdHJ1ZSxcbiAgICAgIGVkZ2VNaW5pbWl6YXRpb246IHRydWUsXG4gICAgICBwYXJlbnRDZW50cmFsaXphdGlvbjogdHJ1ZSxcbiAgICAgIGRpcmVjdGlvbjogW1wiVURcIiwgXCJEVVwiLCBcIkxSXCIsIFwiUkxcIl0sIC8vIFVELCBEVSwgTFIsIFJMXG4gICAgICBzb3J0TWV0aG9kOiBbXCJodWJzaXplXCIsIFwiZGlyZWN0ZWRcIl0sIC8vIGh1YnNpemUsIGRpcmVjdGVkXG4gICAgICBzaGFrZVRvd2FyZHM6IFtcImxlYXZlc1wiLCBcInJvb3RzXCJdLCAvLyBsZWF2ZXMsIHJvb3RzXG4gICAgfSxcbiAgfSxcbiAgaW50ZXJhY3Rpb246IHtcbiAgICBkcmFnTm9kZXM6IHRydWUsXG4gICAgZHJhZ1ZpZXc6IHRydWUsXG4gICAgaGlkZUVkZ2VzT25EcmFnOiBmYWxzZSxcbiAgICBoaWRlRWRnZXNPblpvb206IGZhbHNlLFxuICAgIGhpZGVOb2Rlc09uRHJhZzogZmFsc2UsXG4gICAgaG92ZXI6IGZhbHNlLFxuICAgIGtleWJvYXJkOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIHNwZWVkOiB7XG4gICAgICAgIHg6IFsxMCwgMCwgNDAsIDFdLFxuICAgICAgICB5OiBbMTAsIDAsIDQwLCAxXSxcbiAgICAgICAgem9vbTogWzAuMDIsIDAsIDAuMSwgMC4wMDVdLFxuICAgICAgfSxcbiAgICAgIGJpbmRUb1dpbmRvdzogdHJ1ZSxcbiAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICB9LFxuICAgIG11bHRpc2VsZWN0OiBmYWxzZSxcbiAgICBuYXZpZ2F0aW9uQnV0dG9uczogZmFsc2UsXG4gICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICBzZWxlY3RDb25uZWN0ZWRFZGdlczogdHJ1ZSxcbiAgICBob3ZlckNvbm5lY3RlZEVkZ2VzOiB0cnVlLFxuICAgIHRvb2x0aXBEZWxheTogWzMwMCwgMCwgMTAwMCwgMjVdLFxuICAgIHpvb21WaWV3OiB0cnVlLFxuICAgIHpvb21TcGVlZDogWzEsIDAuMSwgMiwgMC4xXSxcbiAgfSxcbiAgbWFuaXB1bGF0aW9uOiB7XG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgaW5pdGlhbGx5QWN0aXZlOiBmYWxzZSxcbiAgfSxcbiAgcGh5c2ljczoge1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgYmFybmVzSHV0OiB7XG4gICAgICB0aGV0YTogWzAuNSwgMC4xLCAxLCAwLjA1XSxcbiAgICAgIGdyYXZpdGF0aW9uYWxDb25zdGFudDogWy0yMDAwLCAtMzAwMDAsIDAsIDUwXSxcbiAgICAgIGNlbnRyYWxHcmF2aXR5OiBbMC4zLCAwLCAxMCwgMC4wNV0sXG4gICAgICBzcHJpbmdMZW5ndGg6IFs5NSwgMCwgNTAwLCA1XSxcbiAgICAgIHNwcmluZ0NvbnN0YW50OiBbMC4wNCwgMCwgMS4yLCAwLjAwNV0sXG4gICAgICBkYW1waW5nOiBbMC4wOSwgMCwgMSwgMC4wMV0sXG4gICAgICBhdm9pZE92ZXJsYXA6IFswLCAwLCAxLCAwLjAxXSxcbiAgICB9LFxuICAgIGZvcmNlQXRsYXMyQmFzZWQ6IHtcbiAgICAgIHRoZXRhOiBbMC41LCAwLjEsIDEsIDAuMDVdLFxuICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiBbLTUwLCAtNTAwLCAwLCAxXSxcbiAgICAgIGNlbnRyYWxHcmF2aXR5OiBbMC4wMSwgMCwgMSwgMC4wMDVdLFxuICAgICAgc3ByaW5nTGVuZ3RoOiBbOTUsIDAsIDUwMCwgNV0sXG4gICAgICBzcHJpbmdDb25zdGFudDogWzAuMDgsIDAsIDEuMiwgMC4wMDVdLFxuICAgICAgZGFtcGluZzogWzAuNCwgMCwgMSwgMC4wMV0sXG4gICAgICBhdm9pZE92ZXJsYXA6IFswLCAwLCAxLCAwLjAxXSxcbiAgICB9LFxuICAgIHJlcHVsc2lvbjoge1xuICAgICAgY2VudHJhbEdyYXZpdHk6IFswLjIsIDAsIDEwLCAwLjA1XSxcbiAgICAgIHNwcmluZ0xlbmd0aDogWzIwMCwgMCwgNTAwLCA1XSxcbiAgICAgIHNwcmluZ0NvbnN0YW50OiBbMC4wNSwgMCwgMS4yLCAwLjAwNV0sXG4gICAgICBub2RlRGlzdGFuY2U6IFsxMDAsIDAsIDUwMCwgNV0sXG4gICAgICBkYW1waW5nOiBbMC4wOSwgMCwgMSwgMC4wMV0sXG4gICAgfSxcbiAgICBoaWVyYXJjaGljYWxSZXB1bHNpb246IHtcbiAgICAgIGNlbnRyYWxHcmF2aXR5OiBbMC4yLCAwLCAxMCwgMC4wNV0sXG4gICAgICBzcHJpbmdMZW5ndGg6IFsxMDAsIDAsIDUwMCwgNV0sXG4gICAgICBzcHJpbmdDb25zdGFudDogWzAuMDEsIDAsIDEuMiwgMC4wMDVdLFxuICAgICAgbm9kZURpc3RhbmNlOiBbMTIwLCAwLCA1MDAsIDVdLFxuICAgICAgZGFtcGluZzogWzAuMDksIDAsIDEsIDAuMDFdLFxuICAgICAgYXZvaWRPdmVybGFwOiBbMCwgMCwgMSwgMC4wMV0sXG4gICAgfSxcbiAgICBtYXhWZWxvY2l0eTogWzUwLCAwLCAxNTAsIDFdLFxuICAgIG1pblZlbG9jaXR5OiBbMC4xLCAwLjAxLCAwLjUsIDAuMDFdLFxuICAgIHNvbHZlcjogW1xuICAgICAgXCJiYXJuZXNIdXRcIixcbiAgICAgIFwiZm9yY2VBdGxhczJCYXNlZFwiLFxuICAgICAgXCJyZXB1bHNpb25cIixcbiAgICAgIFwiaGllcmFyY2hpY2FsUmVwdWxzaW9uXCIsXG4gICAgXSxcbiAgICB0aW1lc3RlcDogWzAuNSwgMC4wMSwgMSwgMC4wMV0sXG4gICAgd2luZDoge1xuICAgICAgeDogWzAsIC0xMCwgMTAsIDAuMV0sXG4gICAgICB5OiBbMCwgLTEwLCAxMCwgMC4xXSxcbiAgICB9LFxuICAgIC8vYWRhcHRpdmVUaW1lc3RlcDogdHJ1ZVxuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IGNvbmZpZ3VyYXRvckhpZGVPcHRpb246IENvbmZpZ3VyYXRvckhpZGVPcHRpb24gPSAoXG4gIHBhcmVudFBhdGgsXG4gIG9wdGlvbk5hbWUsXG4gIG9wdGlvbnNcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoXG4gICAgcGFyZW50UGF0aC5pbmNsdWRlcyhcInBoeXNpY3NcIikgJiZcbiAgICAoY29uZmlndXJlT3B0aW9ucyBhcyBhbnkpLnBoeXNpY3Muc29sdmVyLmluY2x1ZGVzKG9wdGlvbk5hbWUpICYmXG4gICAgb3B0aW9ucy5waHlzaWNzLnNvbHZlciAhPT0gb3B0aW9uTmFtZSAmJlxuICAgIG9wdGlvbk5hbWUgIT09IFwid2luZFwiXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IHsgYWxsT3B0aW9ucywgY29uZmlndXJlT3B0aW9ucyB9O1xuIiwgIi8qKlxuICogIFRoZSBGbG95ZOKAk1dhcnNoYWxsIGFsZ29yaXRobSBpcyBhbiBhbGdvcml0aG0gZm9yIGZpbmRpbmcgc2hvcnRlc3QgcGF0aHMgaW5cbiAqICBhIHdlaWdodGVkIGdyYXBoIHdpdGggcG9zaXRpdmUgb3IgbmVnYXRpdmUgZWRnZSB3ZWlnaHRzIChidXQgd2l0aCBubyBuZWdhdGl2ZVxuICogIGN5Y2xlcykuIC0gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmxveWTigJNXYXJzaGFsbF9hbGdvcml0aG1cbiAqL1xuY2xhc3MgRmxveWRXYXJzaGFsbCB7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBub2Rlc0FycmF5XG4gICAqIEBwYXJhbSB7QXJyYXkuPEVkZ2U+fSBlZGdlc0FycmF5XG4gICAqIEByZXR1cm5zIHt7fX1cbiAgICovXG4gIGdldERpc3RhbmNlcyhib2R5LCBub2Rlc0FycmF5LCBlZGdlc0FycmF5KSB7XG4gICAgY29uc3QgRF9tYXRyaXggPSB7fTtcbiAgICBjb25zdCBlZGdlcyA9IGJvZHkuZWRnZXM7XG5cbiAgICAvLyBwcmVwYXJlIG1hdHJpeCB3aXRoIGxhcmdlIG51bWJlcnNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc0FycmF5W2ldO1xuICAgICAgY29uc3QgY2VsbCA9IHt9O1xuICAgICAgRF9tYXRyaXhbbm9kZV0gPSBjZWxsO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2Rlc0FycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNlbGxbbm9kZXNBcnJheVtqXV0gPSBpID09IGogPyAwIDogMWU5O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHB1dCB0aGUgd2VpZ2h0cyBmb3IgdGhlIGVkZ2VzIGluLiBUaGlzIGFzc3VtZXMgdW5pZGlyZWN0aW9uYWxpdHkuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlc0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZXNBcnJheVtpXV07XG4gICAgICAvLyBlZGdlIGhhcyB0byBiZSBjb25uZWN0ZWQgaWYgaXQgY291bnRzIHRvIHRoZSBkaXN0YW5jZXMuIElmIGl0IGlzIGNvbm5lY3RlZCB0byBpbm5lciBjbHVzdGVycyBpdCB3aWxsIGNyYXNoIHNvIHdlIGFsc28gY2hlY2sgaWYgaXQgaXMgaW4gdGhlIERfbWF0cml4XG4gICAgICBpZiAoXG4gICAgICAgIGVkZ2UuY29ubmVjdGVkID09PSB0cnVlICYmXG4gICAgICAgIERfbWF0cml4W2VkZ2UuZnJvbUlkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIERfbWF0cml4W2VkZ2UudG9JZF0gIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIERfbWF0cml4W2VkZ2UuZnJvbUlkXVtlZGdlLnRvSWRdID0gMTtcbiAgICAgICAgRF9tYXRyaXhbZWRnZS50b0lkXVtlZGdlLmZyb21JZF0gPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5vZGVDb3VudCA9IG5vZGVzQXJyYXkubGVuZ3RoO1xuXG4gICAgLy8gQWRhcHRlZCBGbG95ZFdhcnNoYWxsIGJhc2VkIG9uIHVuaWRpcmVjdGlvbmFsaXR5IHRvIGdyZWF0bHkgcmVkdWNlIGNvbXBsZXhpdHkuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBub2RlQ291bnQ7IGsrKykge1xuICAgICAgY29uc3Qga25vZGUgPSBub2Rlc0FycmF5W2tdO1xuICAgICAgY29uc3Qga2NvbG0gPSBEX21hdHJpeFtrbm9kZV07XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVDb3VudCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBpbm9kZSA9IG5vZGVzQXJyYXlbaV07XG4gICAgICAgIGNvbnN0IGljb2xtID0gRF9tYXRyaXhbaW5vZGVdO1xuICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBub2RlQ291bnQ7IGorKykge1xuICAgICAgICAgIGNvbnN0IGpub2RlID0gbm9kZXNBcnJheVtqXTtcbiAgICAgICAgICBjb25zdCBqY29sbSA9IERfbWF0cml4W2pub2RlXTtcblxuICAgICAgICAgIGNvbnN0IHZhbCA9IE1hdGgubWluKGljb2xtW2pub2RlXSwgaWNvbG1ba25vZGVdICsga2NvbG1bam5vZGVdKTtcbiAgICAgICAgICBpY29sbVtqbm9kZV0gPSB2YWw7XG4gICAgICAgICAgamNvbG1baW5vZGVdID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIERfbWF0cml4O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZsb3lkV2Fyc2hhbGw7XG4iLCAiLy8gZGlzdGFuY2UgZmluZGluZyBhbGdvcml0aG1cbmltcG9ydCBGbG95ZFdhcnNoYWxsIGZyb20gXCIuL2NvbXBvbmVudHMvYWxnb3JpdGhtcy9GbG95ZFdhcnNoYWxsLmpzXCI7XG5cbi8qKlxuICogS2FtYWRhS2F3YWkgcG9zaXRpb25zIHRoZSBub2RlcyBpbml0aWFsbHkgYmFzZWQgb25cbiAqXG4gKiBcIkFOIEFMR09SSVRITSBGT1IgRFJBV0lORyBHRU5FUkFMIFVORElSRUNURUQgR1JBUEhTXCJcbiAqIC0tIFRvbWloaXNhIEtBTUFEQSBhbmQgU2F0b3J1IEtBV0FJIGluIDE5ODlcbiAqXG4gKiBQb3NzaWJsZSBvcHRpbWl6YXRpb25zIGluIHRoZSBkaXN0YW5jZSBjYWxjdWxhdGlvbiBjYW4gYmUgaW1wbGVtZW50ZWQuXG4gKi9cbmNsYXNzIEthbWFkYUthd2FpIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlZGdlTGVuZ3RoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlZGdlU3RyZW5ndGhcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGVkZ2VMZW5ndGgsIGVkZ2VTdHJlbmd0aCkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5zcHJpbmdMZW5ndGggPSBlZGdlTGVuZ3RoO1xuICAgIHRoaXMuc3ByaW5nQ29uc3RhbnQgPSBlZGdlU3RyZW5ndGg7XG4gICAgdGhpcy5kaXN0YW5jZVNvbHZlciA9IG5ldyBGbG95ZFdhcnNoYWxsKCk7XG4gIH1cblxuICAvKipcbiAgICogTm90IHN1cmUgaWYgbmVlZGVkIGJ1dCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlIHNwcmluZyBsZW5ndGggYW5kIHNwcmluZyBjb25zdGFudFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLnNwcmluZ0xlbmd0aCkge1xuICAgICAgICB0aGlzLnNwcmluZ0xlbmd0aCA9IG9wdGlvbnMuc3ByaW5nTGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuc3ByaW5nQ29uc3RhbnQpIHtcbiAgICAgICAgdGhpcy5zcHJpbmdDb25zdGFudCA9IG9wdGlvbnMuc3ByaW5nQ29uc3RhbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9uIHRoZSBzeXN0ZW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzQXJyYXlcbiAgICogQHBhcmFtIHtBcnJheS48dmlzLkVkZ2U+fSBlZGdlc0FycmF5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lnbm9yZUNsdXN0ZXJzPWZhbHNlXVxuICAgKi9cbiAgc29sdmUobm9kZXNBcnJheSwgZWRnZXNBcnJheSwgaWdub3JlQ2x1c3RlcnMgPSBmYWxzZSkge1xuICAgIC8vIGdldCBkaXN0YW5jZSBtYXRyaXhcbiAgICBjb25zdCBEX21hdHJpeCA9IHRoaXMuZGlzdGFuY2VTb2x2ZXIuZ2V0RGlzdGFuY2VzKFxuICAgICAgdGhpcy5ib2R5LFxuICAgICAgbm9kZXNBcnJheSxcbiAgICAgIGVkZ2VzQXJyYXlcbiAgICApOyAvLyBkaXN0YW5jZSBtYXRyaXhcblxuICAgIC8vIGdldCB0aGUgTCBNYXRyaXhcbiAgICB0aGlzLl9jcmVhdGVMX21hdHJpeChEX21hdHJpeCk7XG5cbiAgICAvLyBnZXQgdGhlIEsgTWF0cml4XG4gICAgdGhpcy5fY3JlYXRlS19tYXRyaXgoRF9tYXRyaXgpO1xuXG4gICAgLy8gaW5pdGlhbCBFIE1hdHJpeFxuICAgIHRoaXMuX2NyZWF0ZUVfbWF0cml4KCk7XG5cbiAgICAvLyBjYWxjdWxhdGUgcG9zaXRpb25zXG4gICAgY29uc3QgdGhyZXNob2xkID0gMC4wMTtcbiAgICBjb25zdCBpbm5lclRocmVzaG9sZCA9IDE7XG4gICAgbGV0IGl0ZXJhdGlvbnMgPSAwO1xuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSBNYXRoLm1heChcbiAgICAgIDEwMDAsXG4gICAgICBNYXRoLm1pbigxMCAqIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGgsIDYwMDApXG4gICAgKTtcbiAgICBjb25zdCBtYXhJbm5lckl0ZXJhdGlvbnMgPSA1O1xuXG4gICAgbGV0IG1heEVuZXJneSA9IDFlOTtcbiAgICBsZXQgaGlnaEVfbm9kZUlkID0gMCxcbiAgICAgIGRFX2R4ID0gMCxcbiAgICAgIGRFX2R5ID0gMCxcbiAgICAgIGRlbHRhX20gPSAwLFxuICAgICAgc3ViSXRlcmF0aW9ucyA9IDA7XG5cbiAgICB3aGlsZSAobWF4RW5lcmd5ID4gdGhyZXNob2xkICYmIGl0ZXJhdGlvbnMgPCBtYXhJdGVyYXRpb25zKSB7XG4gICAgICBpdGVyYXRpb25zICs9IDE7XG4gICAgICBbaGlnaEVfbm9kZUlkLCBtYXhFbmVyZ3ksIGRFX2R4LCBkRV9keV0gPVxuICAgICAgICB0aGlzLl9nZXRIaWdoZXN0RW5lcmd5Tm9kZShpZ25vcmVDbHVzdGVycyk7XG4gICAgICBkZWx0YV9tID0gbWF4RW5lcmd5O1xuICAgICAgc3ViSXRlcmF0aW9ucyA9IDA7XG4gICAgICB3aGlsZSAoZGVsdGFfbSA+IGlubmVyVGhyZXNob2xkICYmIHN1Ykl0ZXJhdGlvbnMgPCBtYXhJbm5lckl0ZXJhdGlvbnMpIHtcbiAgICAgICAgc3ViSXRlcmF0aW9ucyArPSAxO1xuICAgICAgICB0aGlzLl9tb3ZlTm9kZShoaWdoRV9ub2RlSWQsIGRFX2R4LCBkRV9keSk7XG4gICAgICAgIFtkZWx0YV9tLCBkRV9keCwgZEVfZHldID0gdGhpcy5fZ2V0RW5lcmd5KGhpZ2hFX25vZGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgbm9kZSB3aXRoIHRoZSBoaWdoZXN0IGVuZXJneVxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZUNsdXN0ZXJzXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRIaWdoZXN0RW5lcmd5Tm9kZShpZ25vcmVDbHVzdGVycykge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgbGV0IG1heEVuZXJneSA9IDA7XG4gICAgbGV0IG1heEVuZXJneU5vZGVJZCA9IG5vZGVzQXJyYXlbMF07XG4gICAgbGV0IGRFX2R4X21heCA9IDAsXG4gICAgICBkRV9keV9tYXggPSAwO1xuXG4gICAgZm9yIChsZXQgbm9kZUlkeCA9IDA7IG5vZGVJZHggPCBub2Rlc0FycmF5Lmxlbmd0aDsgbm9kZUlkeCsrKSB7XG4gICAgICBjb25zdCBtID0gbm9kZXNBcnJheVtub2RlSWR4XTtcbiAgICAgIC8vIGJ5IG5vdCBldmFsdWF0aW5nIG5vZGVzIHdpdGggcHJlZGVmaW5lZCBwb3NpdGlvbnMgd2Ugc2hvdWxkIG9ubHkgbW92ZSBub2RlcyB0aGF0IGhhdmUgbm8gcG9zaXRpb25zLlxuICAgICAgaWYgKFxuICAgICAgICBub2Rlc1ttXS5wcmVkZWZpbmVkUG9zaXRpb24gIT09IHRydWUgfHxcbiAgICAgICAgKG5vZGVzW21dLmlzQ2x1c3RlciA9PT0gdHJ1ZSAmJiBpZ25vcmVDbHVzdGVycyA9PT0gdHJ1ZSkgfHxcbiAgICAgICAgbm9kZXNbbV0ub3B0aW9ucy5maXhlZC54ICE9PSB0cnVlIHx8XG4gICAgICAgIG5vZGVzW21dLm9wdGlvbnMuZml4ZWQueSAhPT0gdHJ1ZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IFtkZWx0YV9tLCBkRV9keCwgZEVfZHldID0gdGhpcy5fZ2V0RW5lcmd5KG0pO1xuICAgICAgICBpZiAobWF4RW5lcmd5IDwgZGVsdGFfbSkge1xuICAgICAgICAgIG1heEVuZXJneSA9IGRlbHRhX207XG4gICAgICAgICAgbWF4RW5lcmd5Tm9kZUlkID0gbTtcbiAgICAgICAgICBkRV9keF9tYXggPSBkRV9keDtcbiAgICAgICAgICBkRV9keV9tYXggPSBkRV9keTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbbWF4RW5lcmd5Tm9kZUlkLCBtYXhFbmVyZ3ksIGRFX2R4X21heCwgZEVfZHlfbWF4XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxjdWxhdGUgdGhlIGVuZXJneSBvZiBhIHNpbmdsZSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbVxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0RW5lcmd5KG0pIHtcbiAgICBjb25zdCBbZEVfZHgsIGRFX2R5XSA9IHRoaXMuRV9zdW1zW21dO1xuICAgIGNvbnN0IGRlbHRhX20gPSBNYXRoLnNxcnQoZEVfZHggKiogMiArIGRFX2R5ICoqIDIpO1xuICAgIHJldHVybiBbZGVsdGFfbSwgZEVfZHgsIGRFX2R5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtb3ZlIHRoZSBub2RlIGJhc2VkIG9uIGl0J3MgZW5lcmd5XG4gICAqIHRoZSBkeCBhbmQgZHkgYXJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgbGluZWFyIHN5c3RlbSBwcm9wb3NlZCBieSBLYW1hZGEgYW5kIEthd2FpXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkRV9keFxuICAgKiBAcGFyYW0ge251bWJlcn0gZEVfZHlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlTm9kZShtLCBkRV9keCwgZEVfZHkpIHtcbiAgICBjb25zdCBub2Rlc0FycmF5ID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGxldCBkMkVfZHgyID0gMDtcbiAgICBsZXQgZDJFX2R4ZHkgPSAwO1xuICAgIGxldCBkMkVfZHkyID0gMDtcblxuICAgIGNvbnN0IHhfbSA9IG5vZGVzW21dLng7XG4gICAgY29uc3QgeV9tID0gbm9kZXNbbV0ueTtcbiAgICBjb25zdCBrbSA9IHRoaXMuS19tYXRyaXhbbV07XG4gICAgY29uc3QgbG0gPSB0aGlzLkxfbWF0cml4W21dO1xuXG4gICAgZm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCBub2Rlc0FycmF5Lmxlbmd0aDsgaUlkeCsrKSB7XG4gICAgICBjb25zdCBpID0gbm9kZXNBcnJheVtpSWR4XTtcbiAgICAgIGlmIChpICE9PSBtKSB7XG4gICAgICAgIGNvbnN0IHhfaSA9IG5vZGVzW2ldLng7XG4gICAgICAgIGNvbnN0IHlfaSA9IG5vZGVzW2ldLnk7XG4gICAgICAgIGNvbnN0IGttYXQgPSBrbVtpXTtcbiAgICAgICAgY29uc3QgbG1hdCA9IGxtW2ldO1xuICAgICAgICBjb25zdCBkZW5vbWluYXRvciA9IDEuMCAvICgoeF9tIC0geF9pKSAqKiAyICsgKHlfbSAtIHlfaSkgKiogMikgKiogMS41O1xuICAgICAgICBkMkVfZHgyICs9IGttYXQgKiAoMSAtIGxtYXQgKiAoeV9tIC0geV9pKSAqKiAyICogZGVub21pbmF0b3IpO1xuICAgICAgICBkMkVfZHhkeSArPSBrbWF0ICogKGxtYXQgKiAoeF9tIC0geF9pKSAqICh5X20gLSB5X2kpICogZGVub21pbmF0b3IpO1xuICAgICAgICBkMkVfZHkyICs9IGttYXQgKiAoMSAtIGxtYXQgKiAoeF9tIC0geF9pKSAqKiAyICogZGVub21pbmF0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBtYWtlIHRoZSB2YXJpYWJsZSBuYW1lcyBlYXNpZXIgdG8gbWFrZSB0aGUgc29sdmluZyBvZiB0aGUgbGluZWFyIHN5c3RlbSBlYXNpZXIgdG8gcmVhZFxuICAgIGNvbnN0IEEgPSBkMkVfZHgyLFxuICAgICAgQiA9IGQyRV9keGR5LFxuICAgICAgQyA9IGRFX2R4LFxuICAgICAgRCA9IGQyRV9keTIsXG4gICAgICBFID0gZEVfZHk7XG5cbiAgICAvLyBzb2x2ZSB0aGUgbGluZWFyIHN5c3RlbSBmb3IgZHggYW5kIGR5XG4gICAgY29uc3QgZHkgPSAoQyAvIEEgKyBFIC8gQikgLyAoQiAvIEEgLSBEIC8gQik7XG4gICAgY29uc3QgZHggPSAtKEIgKiBkeSArIEMpIC8gQTtcblxuICAgIC8vIG1vdmUgdGhlIG5vZGVcbiAgICBub2Rlc1ttXS54ICs9IGR4O1xuICAgIG5vZGVzW21dLnkgKz0gZHk7XG5cbiAgICAvLyBSZWNhbGN1bGF0ZSBFX21hdHJpeCAoc2hvdWxkIGJlIGluY3JlbWVudGFsKVxuICAgIHRoaXMuX3VwZGF0ZUVfbWF0cml4KG0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgTCBtYXRyaXg6IGVkZ2UgbGVuZ3RoIHRpbWVzIHNob3J0ZXN0IHBhdGhcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IERfbWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlTF9tYXRyaXgoRF9tYXRyaXgpIHtcbiAgICBjb25zdCBub2Rlc0FycmF5ID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuICAgIGNvbnN0IGVkZ2VMZW5ndGggPSB0aGlzLnNwcmluZ0xlbmd0aDtcblxuICAgIHRoaXMuTF9tYXRyaXggPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuTF9tYXRyaXhbbm9kZXNBcnJheVtpXV0gPSB7fTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbm9kZXNBcnJheS5sZW5ndGg7IGorKykge1xuICAgICAgICB0aGlzLkxfbWF0cml4W25vZGVzQXJyYXlbaV1dW25vZGVzQXJyYXlbal1dID1cbiAgICAgICAgICBlZGdlTGVuZ3RoICogRF9tYXRyaXhbbm9kZXNBcnJheVtpXV1bbm9kZXNBcnJheVtqXV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgSyBtYXRyaXg6IHNwcmluZyBjb25zdGFudHMgdGltZXMgc2hvcnRlc3QgcGF0aFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gRF9tYXRyaXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVLX21hdHJpeChEX21hdHJpeCkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3QgZWRnZVN0cmVuZ3RoID0gdGhpcy5zcHJpbmdDb25zdGFudDtcblxuICAgIHRoaXMuS19tYXRyaXggPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuS19tYXRyaXhbbm9kZXNBcnJheVtpXV0gPSB7fTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbm9kZXNBcnJheS5sZW5ndGg7IGorKykge1xuICAgICAgICB0aGlzLktfbWF0cml4W25vZGVzQXJyYXlbaV1dW25vZGVzQXJyYXlbal1dID1cbiAgICAgICAgICBlZGdlU3RyZW5ndGggKiBEX21hdHJpeFtub2Rlc0FycmF5W2ldXVtub2Rlc0FycmF5W2pdXSAqKiAtMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIENyZWF0ZSBtYXRyaXggd2l0aCBhbGwgZW5lcmdpZXMgYmV0d2VlbiBub2Rlc1xuICAgKlxuICAgKiAgQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVFX21hdHJpeCgpIHtcbiAgICBjb25zdCBub2Rlc0FycmF5ID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIHRoaXMuRV9tYXRyaXggPSB7fTtcbiAgICB0aGlzLkVfc3VtcyA9IHt9O1xuICAgIGZvciAobGV0IG1JZHggPSAwOyBtSWR4IDwgbm9kZXNBcnJheS5sZW5ndGg7IG1JZHgrKykge1xuICAgICAgdGhpcy5FX21hdHJpeFtub2Rlc0FycmF5W21JZHhdXSA9IFtdO1xuICAgIH1cbiAgICBmb3IgKGxldCBtSWR4ID0gMDsgbUlkeCA8IG5vZGVzQXJyYXkubGVuZ3RoOyBtSWR4KyspIHtcbiAgICAgIGNvbnN0IG0gPSBub2Rlc0FycmF5W21JZHhdO1xuICAgICAgY29uc3QgeF9tID0gbm9kZXNbbV0ueDtcbiAgICAgIGNvbnN0IHlfbSA9IG5vZGVzW21dLnk7XG4gICAgICBsZXQgZEVfZHggPSAwO1xuICAgICAgbGV0IGRFX2R5ID0gMDtcbiAgICAgIGZvciAobGV0IGlJZHggPSBtSWR4OyBpSWR4IDwgbm9kZXNBcnJheS5sZW5ndGg7IGlJZHgrKykge1xuICAgICAgICBjb25zdCBpID0gbm9kZXNBcnJheVtpSWR4XTtcbiAgICAgICAgaWYgKGkgIT09IG0pIHtcbiAgICAgICAgICBjb25zdCB4X2kgPSBub2Rlc1tpXS54O1xuICAgICAgICAgIGNvbnN0IHlfaSA9IG5vZGVzW2ldLnk7XG4gICAgICAgICAgY29uc3QgZGVub21pbmF0b3IgPVxuICAgICAgICAgICAgMS4wIC8gTWF0aC5zcXJ0KCh4X20gLSB4X2kpICoqIDIgKyAoeV9tIC0geV9pKSAqKiAyKTtcbiAgICAgICAgICB0aGlzLkVfbWF0cml4W21dW2lJZHhdID0gW1xuICAgICAgICAgICAgdGhpcy5LX21hdHJpeFttXVtpXSAqXG4gICAgICAgICAgICAgICh4X20gLSB4X2kgLSB0aGlzLkxfbWF0cml4W21dW2ldICogKHhfbSAtIHhfaSkgKiBkZW5vbWluYXRvciksXG4gICAgICAgICAgICB0aGlzLktfbWF0cml4W21dW2ldICpcbiAgICAgICAgICAgICAgKHlfbSAtIHlfaSAtIHRoaXMuTF9tYXRyaXhbbV1baV0gKiAoeV9tIC0geV9pKSAqIGRlbm9taW5hdG9yKSxcbiAgICAgICAgICBdO1xuICAgICAgICAgIHRoaXMuRV9tYXRyaXhbaV1bbUlkeF0gPSB0aGlzLkVfbWF0cml4W21dW2lJZHhdO1xuICAgICAgICAgIGRFX2R4ICs9IHRoaXMuRV9tYXRyaXhbbV1baUlkeF1bMF07XG4gICAgICAgICAgZEVfZHkgKz0gdGhpcy5FX21hdHJpeFttXVtpSWR4XVsxXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy9TdG9yZSBzdW1cbiAgICAgIHRoaXMuRV9zdW1zW21dID0gW2RFX2R4LCBkRV9keV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBtZXRob2QsIGp1c3QgZG9pbmcgc2luZ2xlIGNvbHVtbiAocm93cyBhcmUgYXV0by11cGRhdGVkKSAodXBkYXRlIGFsbCBzdW1zKVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZUVfbWF0cml4KG0pIHtcbiAgICBjb25zdCBub2Rlc0FycmF5ID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IGNvbG0gPSB0aGlzLkVfbWF0cml4W21dO1xuICAgIGNvbnN0IGtjb2xtID0gdGhpcy5LX21hdHJpeFttXTtcbiAgICBjb25zdCBsY29sbSA9IHRoaXMuTF9tYXRyaXhbbV07XG4gICAgY29uc3QgeF9tID0gbm9kZXNbbV0ueDtcbiAgICBjb25zdCB5X20gPSBub2Rlc1ttXS55O1xuICAgIGxldCBkRV9keCA9IDA7XG4gICAgbGV0IGRFX2R5ID0gMDtcbiAgICBmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpSWR4KyspIHtcbiAgICAgIGNvbnN0IGkgPSBub2Rlc0FycmF5W2lJZHhdO1xuICAgICAgaWYgKGkgIT09IG0pIHtcbiAgICAgICAgLy9LZWVwIG9sZCBlbmVyZ3kgdmFsdWUgZm9yIHN1bSBtb2RpZmljYXRpb24gYmVsb3dcbiAgICAgICAgY29uc3QgY2VsbCA9IGNvbG1baUlkeF07XG4gICAgICAgIGNvbnN0IG9sZER4ID0gY2VsbFswXTtcbiAgICAgICAgY29uc3Qgb2xkRHkgPSBjZWxsWzFdO1xuXG4gICAgICAgIC8vQ2FsYyBuZXcgZW5lcmd5OlxuICAgICAgICBjb25zdCB4X2kgPSBub2Rlc1tpXS54O1xuICAgICAgICBjb25zdCB5X2kgPSBub2Rlc1tpXS55O1xuICAgICAgICBjb25zdCBkZW5vbWluYXRvciA9XG4gICAgICAgICAgMS4wIC8gTWF0aC5zcXJ0KCh4X20gLSB4X2kpICoqIDIgKyAoeV9tIC0geV9pKSAqKiAyKTtcbiAgICAgICAgY29uc3QgZHggPVxuICAgICAgICAgIGtjb2xtW2ldICogKHhfbSAtIHhfaSAtIGxjb2xtW2ldICogKHhfbSAtIHhfaSkgKiBkZW5vbWluYXRvcik7XG4gICAgICAgIGNvbnN0IGR5ID1cbiAgICAgICAgICBrY29sbVtpXSAqICh5X20gLSB5X2kgLSBsY29sbVtpXSAqICh5X20gLSB5X2kpICogZGVub21pbmF0b3IpO1xuICAgICAgICBjb2xtW2lJZHhdID0gW2R4LCBkeV07XG4gICAgICAgIGRFX2R4ICs9IGR4O1xuICAgICAgICBkRV9keSArPSBkeTtcblxuICAgICAgICAvL2FkZCBuZXcgZW5lcmd5IHRvIHN1bSBvZiBlYWNoIGNvbHVtblxuICAgICAgICBjb25zdCBzdW0gPSB0aGlzLkVfc3Vtc1tpXTtcbiAgICAgICAgc3VtWzBdICs9IGR4IC0gb2xkRHg7XG4gICAgICAgIHN1bVsxXSArPSBkeSAtIG9sZER5O1xuICAgICAgfVxuICAgIH1cbiAgICAvL1N0b3JlIHN1bSBhdCAtMSBpbmRleFxuICAgIHRoaXMuRV9zdW1zW21dID0gW2RFX2R4LCBkRV9keV07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgS2FtYWRhS2F3YWk7XG4iLCAiLy8gTG9hZCBjdXN0b20gc2hhcGVzIGludG8gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXG5pbXBvcnQgXCIuL3NoYXBlc1wiO1xuXG5pbXBvcnQgXCJ2aXMtdXRpbC9lc25leHQvc3R5bGVzL2FjdGl2YXRvci5jc3NcIjtcbmltcG9ydCBcInZpcy11dGlsL2VzbmV4dC9zdHlsZXMvYm9vdHN0cmFwLmNzc1wiO1xuaW1wb3J0IFwidmlzLXV0aWwvZXNuZXh0L3N0eWxlcy9jb2xvci1waWNrZXIuY3NzXCI7XG5pbXBvcnQgXCJ2aXMtdXRpbC9lc25leHQvc3R5bGVzL2NvbmZpZ3VyYXRvci5jc3NcIjtcbmltcG9ydCBcInZpcy11dGlsL2VzbmV4dC9zdHlsZXMvcG9wdXAuY3NzXCI7XG5cbmltcG9ydCBFbWl0dGVyIGZyb20gXCJjb21wb25lbnQtZW1pdHRlclwiO1xuaW1wb3J0IHtcbiAgQWN0aXZhdG9yLFxuICBDb25maWd1cmF0b3IsXG4gIFZBTElEQVRPUl9QUklOVF9TVFlMRSxcbiAgVmFsaWRhdG9yLFxuICBkZWVwRXh0ZW5kLFxuICByZWN1cnNpdmVET01EZWxldGUsXG4gIHNlbGVjdGl2ZURlZXBFeHRlbmQsXG59IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCB7IERPVFRvR3JhcGggfSBmcm9tIFwiLi9kb3RwYXJzZXJcIjtcbmltcG9ydCB7IHBhcnNlR2VwaGkgfSBmcm9tIFwiLi9nZXBoaVBhcnNlclwiO1xuaW1wb3J0ICogYXMgbG9jYWxlcyBmcm9tIFwiLi9sb2NhbGVzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVMYW5ndWFnZUNvZGUgfSBmcm9tIFwiLi9sb2NhbGUtdXRpbHNcIjtcblxuaW1wb3J0IEltYWdlcyBmcm9tIFwiLi9JbWFnZXNcIjtcbmltcG9ydCB7IEdyb3VwcyB9IGZyb20gXCIuL21vZHVsZXMvR3JvdXBzXCI7XG5pbXBvcnQgTm9kZXNIYW5kbGVyIGZyb20gXCIuL21vZHVsZXMvTm9kZXNIYW5kbGVyXCI7XG5pbXBvcnQgRWRnZXNIYW5kbGVyIGZyb20gXCIuL21vZHVsZXMvRWRnZXNIYW5kbGVyXCI7XG5pbXBvcnQgUGh5c2ljc0VuZ2luZSBmcm9tIFwiLi9tb2R1bGVzL1BoeXNpY3NFbmdpbmVcIjtcbmltcG9ydCBDbHVzdGVyRW5naW5lIGZyb20gXCIuL21vZHVsZXMvQ2x1c3RlcmluZ1wiO1xuaW1wb3J0IENhbnZhc1JlbmRlcmVyIGZyb20gXCIuL21vZHVsZXMvQ2FudmFzUmVuZGVyZXJcIjtcbmltcG9ydCBDYW52YXMgZnJvbSBcIi4vbW9kdWxlcy9DYW52YXNcIjtcbmltcG9ydCBWaWV3IGZyb20gXCIuL21vZHVsZXMvVmlld1wiO1xuaW1wb3J0IEludGVyYWN0aW9uSGFuZGxlciBmcm9tIFwiLi9tb2R1bGVzL0ludGVyYWN0aW9uSGFuZGxlclwiO1xuaW1wb3J0IFNlbGVjdGlvbkhhbmRsZXIgZnJvbSBcIi4vbW9kdWxlcy9TZWxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgTGF5b3V0RW5naW5lIGZyb20gXCIuL21vZHVsZXMvTGF5b3V0RW5naW5lXCI7XG5pbXBvcnQgTWFuaXB1bGF0aW9uU3lzdGVtIGZyb20gXCIuL21vZHVsZXMvTWFuaXB1bGF0aW9uU3lzdGVtXCI7XG5pbXBvcnQge1xuICBhbGxPcHRpb25zLFxuICBjb25maWd1cmVPcHRpb25zLFxuICBjb25maWd1cmF0b3JIaWRlT3B0aW9uLFxufSBmcm9tIFwiLi9vcHRpb25zXCI7XG5pbXBvcnQgS2FtYWRhS2F3YWkgZnJvbSBcIi4vbW9kdWxlcy9LYW1hZGFLYXdhaS5qc1wiO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldHdvcmsgdmlzdWFsaXphdGlvbiwgZGlzcGxheWluZyBub2RlcyBhbmQgZWRnZXMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXIgICBUaGUgRE9NIGVsZW1lbnQgaW4gd2hpY2ggdGhlIE5ldHdvcmsgd2lsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgY3JlYXRlZC4gTm9ybWFsbHkgYSBkaXYgZWxlbWVudC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhICAgICAgICAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgcGFyYW1ldGVyc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QXJyYXl9IG5vZGVzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtBcnJheX0gZWRnZXNcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICAgICAgT3B0aW9uc1xuICogQGNsYXNzIE5ldHdvcmtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE5ldHdvcmsoY29udGFpbmVyLCBkYXRhLCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBOZXR3b3JrKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvclwiKTtcbiAgfVxuXG4gIC8vIHNldCBjb25zdGFudCB2YWx1ZXNcbiAgdGhpcy5vcHRpb25zID0ge307XG4gIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgbG9jYWxlOiBcImVuXCIsXG4gICAgbG9jYWxlczogbG9jYWxlcyxcbiAgICBjbGlja1RvVXNlOiBmYWxzZSxcbiAgfTtcbiAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gIC8qKlxuICAgKiBDb250YWluZXJzIGZvciBub2RlcyBhbmQgZWRnZXMuXG4gICAqXG4gICAqICdlZGdlcycgYW5kICdub2RlcycgY29udGFpbiB0aGUgZnVsbCBkZWZpbml0aW9ucyBvZiBhbGwgdGhlIG5ldHdvcmsgZWxlbWVudHMuXG4gICAqICdub2RlSW5kaWNlcycgYW5kICdlZGdlSW5kaWNlcycgY29udGFpbiB0aGUgaWQncyBvZiB0aGUgYWN0aXZlIGVsZW1lbnRzLlxuICAgKlxuICAgKiBUaGUgZGlzdGluY3Rpb24gaXMgaW1wb3J0YW50LCBiZWNhdXNlIGEgZGVmaW5lZCBub2RlIG5lZWQgbm90IGJlIGFjdGl2ZSwgaS5lLlxuICAgKiB2aXNpYmxlIG9uIHRoZSBjYW52YXMuIFRoaXMgaGFwcGVucyBpbiBwYXJ0aWN1bGFyIHdoZW4gY2x1c3RlcnMgYXJlIGRlZmluZWQsIGluXG4gICAqIHRoYXQgY2FzZSB0aGVyZSB3aWxsIGJlIG5vZGVzIGFuZCBlZGdlcyBub3QgZGlzcGxheWVkLlxuICAgKiBUaGUgYm90dG9tIGxpbmUgaXMgdGhhdCBhbGwgY29kZSB3aXRoIGFjdGlvbnMgcmVsYXRlZCB0byB2aXNpYmlsaXR5LCAqbXVzdCogdXNlXG4gICAqICdub2RlSW5kaWNlcycgYW5kICdlZGdlSW5kaWNlcycsIG5vdCAnbm9kZXMnIGFuZCAnZWRnZXMnIGRpcmVjdGx5LlxuICAgKi9cbiAgdGhpcy5ib2R5ID0ge1xuICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuXG4gICAgLy8gU2VlIGNvbW1lbnQgYWJvdmUgZm9yIGZvbGxvd2luZyBmaWVsZHNcbiAgICBub2Rlczoge30sXG4gICAgbm9kZUluZGljZXM6IFtdLFxuICAgIGVkZ2VzOiB7fSxcbiAgICBlZGdlSW5kaWNlczogW10sXG5cbiAgICBlbWl0dGVyOiB7XG4gICAgICBvbjogdGhpcy5vbi5iaW5kKHRoaXMpLFxuICAgICAgb2ZmOiB0aGlzLm9mZi5iaW5kKHRoaXMpLFxuICAgICAgZW1pdDogdGhpcy5lbWl0LmJpbmQodGhpcyksXG4gICAgICBvbmNlOiB0aGlzLm9uY2UuYmluZCh0aGlzKSxcbiAgICB9LFxuICAgIGV2ZW50TGlzdGVuZXJzOiB7XG4gICAgICBvblRhcDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvblRvdWNoOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uRG91YmxlVGFwOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uSG9sZDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvbkRyYWdTdGFydDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvbkRyYWc6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25EcmFnRW5kOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uTW91c2VXaGVlbDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvblBpbmNoOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uTW91c2VNb3ZlOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uUmVsZWFzZTogZnVuY3Rpb24gKCkge30sXG4gICAgICBvbkNvbnRleHQ6IGZ1bmN0aW9uICgpIHt9LFxuICAgIH0sXG4gICAgZGF0YToge1xuICAgICAgbm9kZXM6IG51bGwsIC8vIEEgRGF0YVNldCBvciBEYXRhVmlld1xuICAgICAgZWRnZXM6IG51bGwsIC8vIEEgRGF0YVNldCBvciBEYXRhVmlld1xuICAgIH0sXG4gICAgZnVuY3Rpb25zOiB7XG4gICAgICBjcmVhdGVOb2RlOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIGNyZWF0ZUVkZ2U6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgZ2V0UG9pbnRlcjogZnVuY3Rpb24gKCkge30sXG4gICAgfSxcbiAgICBtb2R1bGVzOiB7fSxcbiAgICB2aWV3OiB7XG4gICAgICBzY2FsZTogMSxcbiAgICAgIHRyYW5zbGF0aW9uOiB7IHg6IDAsIHk6IDAgfSxcbiAgICB9LFxuICAgIHNlbGVjdGlvbkJveDoge1xuICAgICAgc2hvdzogZmFsc2UsXG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICBzdGFydDogeyB4OiAwLCB5OiAwIH0sXG4gICAgICAgIGVuZDogeyB4OiAwLCB5OiAwIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgLy8gYmluZCB0aGUgZXZlbnQgbGlzdGVuZXJzXG4gIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG5cbiAgLy8gc2V0dGluZyB1cCBhbGwgbW9kdWxlc1xuICB0aGlzLmltYWdlcyA9IG5ldyBJbWFnZXMoKCkgPT4gdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpKTsgLy8gb2JqZWN0IHdpdGggaW1hZ2VzXG4gIHRoaXMuZ3JvdXBzID0gbmV3IEdyb3VwcygpOyAvLyBvYmplY3Qgd2l0aCBncm91cHNcbiAgdGhpcy5jYW52YXMgPSBuZXcgQ2FudmFzKHRoaXMuYm9keSk7IC8vIERPTSBoYW5kbGVyXG4gIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IG5ldyBTZWxlY3Rpb25IYW5kbGVyKHRoaXMuYm9keSwgdGhpcy5jYW52YXMpOyAvLyBTZWxlY3Rpb24gaGFuZGxlclxuICB0aGlzLmludGVyYWN0aW9uSGFuZGxlciA9IG5ldyBJbnRlcmFjdGlvbkhhbmRsZXIoXG4gICAgdGhpcy5ib2R5LFxuICAgIHRoaXMuY2FudmFzLFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlclxuICApOyAvLyBJbnRlcmFjdGlvbiBoYW5kbGVyIGhhbmRsZXMgYWxsIHRoZSBoYW1tZXIgYmluZGluZ3MgKHRoYXQgYXJlIGJvdW5kIGJ5IGNhbnZhcyksIGtleVxuICB0aGlzLnZpZXcgPSBuZXcgVmlldyh0aGlzLmJvZHksIHRoaXMuY2FudmFzKTsgLy8gY2FtZXJhIGhhbmRsZXIsIGRvZXMgYW5pbWF0aW9ucyBhbmQgem9vbXNcbiAgdGhpcy5yZW5kZXJlciA9IG5ldyBDYW52YXNSZW5kZXJlcih0aGlzLmJvZHksIHRoaXMuY2FudmFzKTsgLy8gcmVuZGVyZXIsIHN0YXJ0cyByZW5kZXJsb29wLCBoYXMgZXZlbnRzIHRoYXQgbW9kdWxlcyBjYW4gaG9vayBpbnRvXG4gIHRoaXMucGh5c2ljcyA9IG5ldyBQaHlzaWNzRW5naW5lKHRoaXMuYm9keSk7IC8vIHBoeXNpY3MgZW5naW5lLCBkb2VzIGFsbCB0aGUgc2ltdWxhdGlvbnNcbiAgdGhpcy5sYXlvdXRFbmdpbmUgPSBuZXcgTGF5b3V0RW5naW5lKHRoaXMuYm9keSk7IC8vIGxheW91dCBlbmdpbmUgZm9yIGluaXRhbCBsYXlvdXQgYW5kIGhpZXJhcmNoaWNhbCBsYXlvdXRcbiAgdGhpcy5jbHVzdGVyaW5nID0gbmV3IENsdXN0ZXJFbmdpbmUodGhpcy5ib2R5KTsgLy8gY2x1c3RlcmluZyBhcGlcbiAgdGhpcy5tYW5pcHVsYXRpb24gPSBuZXcgTWFuaXB1bGF0aW9uU3lzdGVtKFxuICAgIHRoaXMuYm9keSxcbiAgICB0aGlzLmNhbnZhcyxcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXJcbiAgKTsgLy8gZGF0YSBtYW5pcHVsYXRpb24gc3lzdGVtXG5cbiAgdGhpcy5ub2Rlc0hhbmRsZXIgPSBuZXcgTm9kZXNIYW5kbGVyKFxuICAgIHRoaXMuYm9keSxcbiAgICB0aGlzLmltYWdlcyxcbiAgICB0aGlzLmdyb3VwcyxcbiAgICB0aGlzLmxheW91dEVuZ2luZVxuICApOyAvLyBIYW5kbGUgYWRkaW5nLCBkZWxldGluZyBhbmQgdXBkYXRpbmcgb2Ygbm9kZXMgYXMgd2VsbCBhcyBnbG9iYWwgb3B0aW9uc1xuICB0aGlzLmVkZ2VzSGFuZGxlciA9IG5ldyBFZGdlc0hhbmRsZXIodGhpcy5ib2R5LCB0aGlzLmltYWdlcywgdGhpcy5ncm91cHMpOyAvLyBIYW5kbGUgYWRkaW5nLCBkZWxldGluZyBhbmQgdXBkYXRpbmcgb2YgZWRnZXMgYXMgd2VsbCBhcyBnbG9iYWwgb3B0aW9uc1xuXG4gIHRoaXMuYm9keS5tb2R1bGVzW1wia2FtYWRhS2F3YWlcIl0gPSBuZXcgS2FtYWRhS2F3YWkodGhpcy5ib2R5LCAxNTAsIDAuMDUpOyAvLyBMYXlvdXRpbmcgYWxnb3JpdGhtLlxuICB0aGlzLmJvZHkubW9kdWxlc1tcImNsdXN0ZXJpbmdcIl0gPSB0aGlzLmNsdXN0ZXJpbmc7XG5cbiAgLy8gY3JlYXRlIHRoZSBET00gZWxlbWVudHNcbiAgdGhpcy5jYW52YXMuX2NyZWF0ZSgpO1xuXG4gIC8vIGFwcGx5IG9wdGlvbnNcbiAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gIC8vIGxvYWQgZGF0YSAodGhlIGRpc2FibGUgc3RhcnQgdmFyaWFibGUgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgZW5hYmxlZCBjbHVzdGVyaW5nKVxuICB0aGlzLnNldERhdGEoZGF0YSk7XG59XG5cbi8vIEV4dGVuZCBOZXR3b3JrIHdpdGggYW4gRW1pdHRlciBtaXhpblxuRW1pdHRlcihOZXR3b3JrLnByb3RvdHlwZSk7XG5cbi8qKlxuICogU2V0IG9wdGlvbnNcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICovXG5OZXR3b3JrLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IG51bGwpIHtcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkOyAvLyBUaGlzIGVuc3VyZXMgdGhhdCBvcHRpb25zIGhhbmRsaW5nIGRvZXNuJ3QgY3Jhc2ggaW4gdGhlIGhhbmRsaW5nXG4gIH1cblxuICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZXJyb3JGb3VuZCA9IFZhbGlkYXRvci52YWxpZGF0ZShvcHRpb25zLCBhbGxPcHRpb25zKTtcbiAgICBpZiAoZXJyb3JGb3VuZCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCIlY0Vycm9ycyBoYXZlIGJlZW4gZm91bmQgaW4gdGhlIHN1cHBsaWVkIG9wdGlvbnMgb2JqZWN0LlwiLFxuICAgICAgICBWQUxJREFUT1JfUFJJTlRfU1RZTEVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gY29weSB0aGUgZ2xvYmFsIGZpZWxkcyBvdmVyXG4gICAgY29uc3QgZmllbGRzID0gW1wibG9jYWxlXCIsIFwibG9jYWxlc1wiLCBcImNsaWNrVG9Vc2VcIl07XG4gICAgc2VsZWN0aXZlRGVlcEV4dGVuZChmaWVsZHMsIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAvLyBub3JtYWxpemUgdGhlIGxvY2FsZSBvciB1c2UgRW5nbGlzaFxuICAgIGlmIChvcHRpb25zLmxvY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmxvY2FsZSA9IG5vcm1hbGl6ZUxhbmd1YWdlQ29kZShcbiAgICAgICAgb3B0aW9ucy5sb2NhbGVzIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzLFxuICAgICAgICBvcHRpb25zLmxvY2FsZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaGllcmFyY2hpY2FsIHN5c3RlbSBjYW4gYWRhcHQgdGhlIGVkZ2VzIGFuZCB0aGUgcGh5c2ljcyB0byBpdCdzIG93biBvcHRpb25zIGJlY2F1c2Ugbm90IGFsbCBjb21iaW5hdGlvbnMgd29yayB3aXRoIHRoZSBoaWVyYXJpY2hpY2FsIHN5c3RlbS5cbiAgICBvcHRpb25zID0gdGhpcy5sYXlvdXRFbmdpbmUuc2V0T3B0aW9ucyhvcHRpb25zLmxheW91dCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLmNhbnZhcy5zZXRPcHRpb25zKG9wdGlvbnMpOyAvLyBvcHRpb25zIGZvciBjYW52YXMgYXJlIGluIGdsb2JhbHNcblxuICAgIC8vIHBhc3MgdGhlIG9wdGlvbnMgdG8gdGhlIG1vZHVsZXNcbiAgICB0aGlzLmdyb3Vwcy5zZXRPcHRpb25zKG9wdGlvbnMuZ3JvdXBzKTtcbiAgICB0aGlzLm5vZGVzSGFuZGxlci5zZXRPcHRpb25zKG9wdGlvbnMubm9kZXMpO1xuICAgIHRoaXMuZWRnZXNIYW5kbGVyLnNldE9wdGlvbnMob3B0aW9ucy5lZGdlcyk7XG4gICAgdGhpcy5waHlzaWNzLnNldE9wdGlvbnMob3B0aW9ucy5waHlzaWNzKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbi5zZXRPcHRpb25zKG9wdGlvbnMubWFuaXB1bGF0aW9uLCBvcHRpb25zLCB0aGlzLm9wdGlvbnMpOyAvLyBtYW5pcHVsYXRpb24gdXNlcyB0aGUgbG9jYWxlcyBpbiB0aGUgZ2xvYmFsc1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIuc2V0T3B0aW9ucyhvcHRpb25zLmludGVyYWN0aW9uKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9wdGlvbnMob3B0aW9ucy5pbnRlcmFjdGlvbik7IC8vIG9wdGlvbnMgZm9yIHJlbmRlcmluZyBhcmUgaW4gaW50ZXJhY3Rpb25cbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2V0T3B0aW9ucyhvcHRpb25zLmludGVyYWN0aW9uKTsgLy8gb3B0aW9ucyBmb3Igc2VsZWN0aW9uIGFyZSBpbiBpbnRlcmFjdGlvblxuXG4gICAgLy8gcmVsb2FkIHRoZSBzZXR0aW5ncyBvZiB0aGUgbm9kZXMgdG8gYXBwbHkgY2hhbmdlcyBpbiBncm91cHMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgYnkgcG9pbnRlci5cbiAgICBpZiAob3B0aW9ucy5ncm91cHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInJlZnJlc2hOb2Rlc1wiKTtcbiAgICB9XG4gICAgLy8gdGhlc2UgdHdvIGRvIG5vdCBoYXZlIG9wdGlvbnMgYXQgdGhlIG1vbWVudCwgaGVyZSBmb3IgY29tcGxldGVuZXNzXG4gICAgLy90aGlzLnZpZXcuc2V0T3B0aW9ucyhvcHRpb25zLnZpZXcpO1xuICAgIC8vdGhpcy5jbHVzdGVyaW5nLnNldE9wdGlvbnMob3B0aW9ucy5jbHVzdGVyaW5nKTtcblxuICAgIGlmIChcImNvbmZpZ3VyZVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0b3IpIHtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0b3IgPSBuZXcgQ29uZmlndXJhdG9yKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5ib2R5LmNvbnRhaW5lcixcbiAgICAgICAgICBjb25maWd1cmVPcHRpb25zLFxuICAgICAgICAgIHRoaXMuY2FudmFzLnBpeGVsUmF0aW8sXG4gICAgICAgICAgY29uZmlndXJhdG9ySGlkZU9wdGlvblxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRvci5zZXRPcHRpb25zKG9wdGlvbnMuY29uZmlndXJlKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgZW5hYmxlZCwgY29weSBhbGwgb3B0aW9ucyBhbmQgcHV0IHRoZW0gaW50byB0aGUgY29uZmlnIHN5c3RlbVxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRvciAmJiB0aGlzLmNvbmZpZ3VyYXRvci5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IG5ldHdvcmtPcHRpb25zID0ge1xuICAgICAgICBub2Rlczoge30sXG4gICAgICAgIGVkZ2VzOiB7fSxcbiAgICAgICAgbGF5b3V0OiB7fSxcbiAgICAgICAgaW50ZXJhY3Rpb246IHt9LFxuICAgICAgICBtYW5pcHVsYXRpb246IHt9LFxuICAgICAgICBwaHlzaWNzOiB7fSxcbiAgICAgICAgZ2xvYmFsOiB7fSxcbiAgICAgIH07XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLm5vZGVzLCB0aGlzLm5vZGVzSGFuZGxlci5vcHRpb25zKTtcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuZWRnZXMsIHRoaXMuZWRnZXNIYW5kbGVyLm9wdGlvbnMpO1xuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5sYXlvdXQsIHRoaXMubGF5b3V0RW5naW5lLm9wdGlvbnMpO1xuICAgICAgLy8gbG9hZCB0aGUgc2VsZWN0aW9uSGFuZGxlciBhbmQgcmVuZGVyIGRlZmF1bHQgb3B0aW9ucyBpbiB0byB0aGUgaW50ZXJhY3Rpb24gZ3JvdXBcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuaW50ZXJhY3Rpb24sIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5vcHRpb25zKTtcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuaW50ZXJhY3Rpb24sIHRoaXMucmVuZGVyZXIub3B0aW9ucyk7XG5cbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuaW50ZXJhY3Rpb24sIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyLm9wdGlvbnMpO1xuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5tYW5pcHVsYXRpb24sIHRoaXMubWFuaXB1bGF0aW9uLm9wdGlvbnMpO1xuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5waHlzaWNzLCB0aGlzLnBoeXNpY3Mub3B0aW9ucyk7XG5cbiAgICAgIC8vIGxvYWQgZ2xvYmFscyBpbnRvIHRoZSBnbG9iYWwgb2JqZWN0XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLmdsb2JhbCwgdGhpcy5jYW52YXMub3B0aW9ucyk7XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLmdsb2JhbCwgdGhpcy5vcHRpb25zKTtcblxuICAgICAgdGhpcy5jb25maWd1cmF0b3Iuc2V0TW9kdWxlT3B0aW9ucyhuZXR3b3JrT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIG5ldHdvcmsgZ2xvYmFsIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucy5jbGlja1RvVXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLmNsaWNrVG9Vc2UgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2YXRvciA9IG5ldyBBY3RpdmF0b3IodGhpcy5jYW52YXMuZnJhbWUpO1xuICAgICAgICAgIHRoaXMuYWN0aXZhdG9yLm9uKFwiY2hhbmdlXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJhY3RpdmF0ZVwiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZhdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2YXRvci5kZXN0cm95KCk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZhdG9yO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJhY3RpdmF0ZVwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImFjdGl2YXRlXCIpO1xuICAgIH1cblxuICAgIHRoaXMuY2FudmFzLnNldFNpemUoKTtcbiAgICAvLyBzdGFydCB0aGUgcGh5c2ljcyBzaW11bGF0aW9uLiBDYW4gYmUgc2FmZWx5IGNhbGxlZCBtdWx0aXBsZSB0aW1lcy5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwic3RhcnRTaW11bGF0aW9uXCIpO1xuICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgdmlzaWJsZSBub2RlcyBhbmQgZWRnZXMgbGlzdCB3aXRoIHRoZSBtb3N0IHJlY2VudCBub2RlIHN0YXRlLlxuICpcbiAqIFZpc2libGUgbm9kZXMgYXJlIHN0b3JlZCBpbiB0aGlzLmJvZHkubm9kZUluZGljZXMuXG4gKiBWaXNpYmxlIGVkZ2VzIGFyZSBzdG9yZWQgaW4gdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLlxuICogQSBub2RlIG9yIGVkZ2VzIGlzIHZpc2libGUgaWYgaXQgaXMgbm90IGhpZGRlbiBvciBjbHVzdGVyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTmV0d29yay5wcm90b3R5cGUuX3VwZGF0ZVZpc2libGVJbmRpY2VzID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gIHRoaXMuYm9keS5ub2RlSW5kaWNlcyA9IFtdO1xuICB0aGlzLmJvZHkuZWRnZUluZGljZXMgPSBbXTtcblxuICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBub2Rlcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuY2x1c3RlcmluZy5faXNDbHVzdGVyZWROb2RlKG5vZGVJZCkgJiZcbiAgICAgICAgbm9kZXNbbm9kZUlkXS5vcHRpb25zLmhpZGRlbiA9PT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmJvZHkubm9kZUluZGljZXMucHVzaChub2Rlc1tub2RlSWRdLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGVkZ2VJZCBpbiBlZGdlcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tlZGdlSWRdO1xuXG4gICAgICAvLyBJdCBjYW4gaGFwcGVuIHRoYXQgdGhpcyBpcyBleGVjdXRlZCAqYWZ0ZXIqIGEgbm9kZSBlZGdlIGhhcyBiZWVuIHJlbW92ZWQsXG4gICAgICAvLyBidXQgKmJlZm9yZSogdGhlIGVkZ2UgaXRzZWxmIGhhcyBiZWVuIHJlbW92ZWQuIFRha2luZyB0aGlzIGludG8gYWNjb3VudC5cbiAgICAgIGNvbnN0IGZyb21Ob2RlID0gbm9kZXNbZWRnZS5mcm9tSWRdO1xuICAgICAgY29uc3QgdG9Ob2RlID0gbm9kZXNbZWRnZS50b0lkXTtcbiAgICAgIGNvbnN0IGVkZ2VOb2Rlc1ByZXNlbnQgPSBmcm9tTm9kZSAhPT0gdW5kZWZpbmVkICYmIHRvTm9kZSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBpc1Zpc2libGUgPVxuICAgICAgICAhdGhpcy5jbHVzdGVyaW5nLl9pc0NsdXN0ZXJlZEVkZ2UoZWRnZUlkKSAmJlxuICAgICAgICBlZGdlLm9wdGlvbnMuaGlkZGVuID09PSBmYWxzZSAmJlxuICAgICAgICBlZGdlTm9kZXNQcmVzZW50ICYmXG4gICAgICAgIGZyb21Ob2RlLm9wdGlvbnMuaGlkZGVuID09PSBmYWxzZSAmJiAvLyBBbHNvIGhpZGRlbiBpZiBhbnkgb2YgaXRzIGNvbm5lY3Rpbmcgbm9kZXMgYXJlIGhpZGRlblxuICAgICAgICB0b05vZGUub3B0aW9ucy5oaWRkZW4gPT09IGZhbHNlOyAvLyBpZGVtXG5cbiAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLnB1c2goZWRnZS5pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEJpbmQgYWxsIGV2ZW50c1xuICovXG5OZXR3b3JrLnByb3RvdHlwZS5iaW5kRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRoaXMgZXZlbnQgd2lsbCB0cmlnZ2VyIGEgcmVidWlsZGluZyBvZiB0aGUgY2FjaGUgZXZlcnl0aGluZy5cbiAgLy8gVXNlZCB3aGVuIG5vZGVzIG9yIGVkZ2VzIGhhdmUgYmVlbiBhZGRlZCBvciByZW1vdmVkLlxuICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9kYXRhQ2hhbmdlZFwiLCAoKSA9PiB7XG4gICAgdGhpcy5lZGdlc0hhbmRsZXIuX3VwZGF0ZVN0YXRlKCk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhVXBkYXRlZFwiKTtcbiAgfSk7XG5cbiAgLy8gdGhpcyBpcyBjYWxsZWQgd2hlbiBvcHRpb25zIG9mIEVYSVNUSU5HIG5vZGVzIG9yIGVkZ2VzIGhhdmUgY2hhbmdlZC5cbiAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YVVwZGF0ZWRcIiwgKCkgPT4ge1xuICAgIC8vIE9yZGVyIGltcG9ydGFudCBpbiBmb2xsb3dpbmcgYmxvY2tcbiAgICB0aGlzLmNsdXN0ZXJpbmcuX3VwZGF0ZVN0YXRlKCk7XG4gICAgdGhpcy5fdXBkYXRlVmlzaWJsZUluZGljZXMoKTtcblxuICAgIHRoaXMuX3VwZGF0ZVZhbHVlUmFuZ2UodGhpcy5ib2R5Lm5vZGVzKTtcbiAgICB0aGlzLl91cGRhdGVWYWx1ZVJhbmdlKHRoaXMuYm9keS5lZGdlcyk7XG4gICAgLy8gc3RhcnQgc2ltdWxhdGlvbiAoY2FuIGJlIGNhbGxlZCBzYWZlbHksIGV2ZW4gaWYgYWxyZWFkeSBydW5uaW5nKVxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICB9KTtcbn07XG5cbi8qKlxuICogU2V0IG5vZGVzIGFuZCBlZGdlcywgYW5kIG9wdGlvbmFsbHkgb3B0aW9ucyBhcyB3ZWxsLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhICAgICAgICAgICAgICBPYmplY3QgY29udGFpbmluZyBwYXJhbWV0ZXJzOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtBcnJheSB8IERhdGFTZXQgfCBEYXRhVmlld30gW25vZGVzXSBBcnJheSB3aXRoIG5vZGVzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0FycmF5IHwgRGF0YVNldCB8IERhdGFWaWV3fSBbZWRnZXNdIEFycmF5IHdpdGggZWRnZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7U3RyaW5nfSBbZG90XSBTdHJpbmcgY29udGFpbmluZyBkYXRhIGluIERPVCBmb3JtYXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7U3RyaW5nfSBbZ2VwaGldIFN0cmluZyBjb250YWluaW5nIGRhdGEgaW4gZ2VwaGkgSlNPTiBmb3JtYXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7T3B0aW9uc30gW29wdGlvbnNdIE9iamVjdCB3aXRoIG9wdGlvbnNcbiAqL1xuTmV0d29yay5wcm90b3R5cGUuc2V0RGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIC8vIHJlc2V0IHRoZSBwaHlzaWNzIGVuZ2luZS5cbiAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInJlc2V0UGh5c2ljc1wiKTtcbiAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXNldERhdGFcIik7XG5cbiAgLy8gdW5zZWxlY3QgYWxsIHRvIGVuc3VyZSBubyBzZWxlY3Rpb25zIGZyb20gb2xkIGRhdGEgYXJlIGNhcnJpZWQgb3Zlci5cbiAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsKCk7XG5cbiAgaWYgKGRhdGEgJiYgZGF0YS5kb3QgJiYgKGRhdGEubm9kZXMgfHwgZGF0YS5lZGdlcykpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXG4gICAgICAnRGF0YSBtdXN0IGNvbnRhaW4gZWl0aGVyIHBhcmFtZXRlciBcImRvdFwiIG9yICcgK1xuICAgICAgICAnIHBhcmFtZXRlciBwYWlyIFwibm9kZXNcIiBhbmQgXCJlZGdlc1wiLCBidXQgbm90IGJvdGguJ1xuICAgICk7XG4gIH1cblxuICAvLyBzZXQgb3B0aW9uc1xuICB0aGlzLnNldE9wdGlvbnMoZGF0YSAmJiBkYXRhLm9wdGlvbnMpO1xuICAvLyBzZXQgYWxsIGRhdGFcbiAgaWYgKGRhdGEgJiYgZGF0YS5kb3QpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIlRoZSBkb3QgcHJvcGVydHkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0aGUgc3RhdGljIGNvbnZlcnREb3QgbWV0aG9kIHRvIGNvbnZlcnQgRE9UIGludG8gdmlzLm5ldHdvcmsgZm9ybWF0IGFuZCB1c2UgdGhlIG5vcm1hbCBkYXRhIGZvcm1hdCB3aXRoIG5vZGVzIGFuZCBlZGdlcy4gVGhpcyBjb252ZXJ0ZXIgaXMgdXNlZCBsaWtlIHRoaXM6IHZhciBkYXRhID0gdmlzLm5ldHdvcmsuY29udmVydERvdChkb3RTdHJpbmcpO1wiXG4gICAgKTtcbiAgICAvLyBwYXJzZSBET1QgZmlsZVxuICAgIGNvbnN0IGRvdERhdGEgPSBET1RUb0dyYXBoKGRhdGEuZG90KTtcbiAgICB0aGlzLnNldERhdGEoZG90RGF0YSk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKGRhdGEgJiYgZGF0YS5nZXBoaSkge1xuICAgIC8vIHBhcnNlIERPVCBmaWxlXG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJUaGUgZ2VwaGkgcHJvcGVydHkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0aGUgc3RhdGljIGNvbnZlcnRHZXBoaSBtZXRob2QgdG8gY29udmVydCBnZXBoaSBpbnRvIHZpcy5uZXR3b3JrIGZvcm1hdCBhbmQgdXNlIHRoZSBub3JtYWwgZGF0YSBmb3JtYXQgd2l0aCBub2RlcyBhbmQgZWRnZXMuIFRoaXMgY29udmVydGVyIGlzIHVzZWQgbGlrZSB0aGlzOiB2YXIgZGF0YSA9IHZpcy5uZXR3b3JrLmNvbnZlcnRHZXBoaShnZXBoaUpzb24pO1wiXG4gICAgKTtcbiAgICBjb25zdCBnZXBoaURhdGEgPSBwYXJzZUdlcGhpKGRhdGEuZ2VwaGkpO1xuICAgIHRoaXMuc2V0RGF0YShnZXBoaURhdGEpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm5vZGVzSGFuZGxlci5zZXREYXRhKGRhdGEgJiYgZGF0YS5ub2RlcywgdHJ1ZSk7XG4gICAgdGhpcy5lZGdlc0hhbmRsZXIuc2V0RGF0YShkYXRhICYmIGRhdGEuZWRnZXMsIHRydWUpO1xuICB9XG5cbiAgLy8gZW1pdCBjaGFuZ2UgaW4gZGF0YVxuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuXG4gIC8vIGVtaXQgZGF0YSBsb2FkZWRcbiAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhTG9hZGVkXCIpO1xuXG4gIC8vIGZpbmQgYSBzdGFibGUgcG9zaXRpb24gb3Igc3RhcnQgYW5pbWF0aW5nIHRvIGEgc3RhYmxlIHBvc2l0aW9uXG4gIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJpbml0UGh5c2ljc1wiKTtcbn07XG5cbi8qKlxuICogQ2xlYW5zIHVwIGFsbCBiaW5kaW5ncyBvZiB0aGUgbmV0d29yaywgcmVtb3ZpbmcgaXQgZnVsbHkgZnJvbSB0aGUgbWVtb3J5IElGIHRoZSB2YXJpYWJsZSBpcyBzZXQgdG8gbnVsbCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4gKiB2YXIgbmV0d29yayA9IG5ldyB2aXMuTmV0d29yayguLik7XG4gKiBuZXR3b3JrLmRlc3Ryb3koKTtcbiAqIG5ldHdvcmsgPSBudWxsO1xuICovXG5OZXR3b3JrLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiZGVzdHJveVwiKTtcbiAgLy8gY2xlYXIgZXZlbnRzXG4gIHRoaXMuYm9keS5lbWl0dGVyLm9mZigpO1xuICB0aGlzLm9mZigpO1xuXG4gIC8vIGRlbGV0ZSBtb2R1bGVzXG4gIGRlbGV0ZSB0aGlzLmdyb3VwcztcbiAgZGVsZXRlIHRoaXMuY2FudmFzO1xuICBkZWxldGUgdGhpcy5zZWxlY3Rpb25IYW5kbGVyO1xuICBkZWxldGUgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXI7XG4gIGRlbGV0ZSB0aGlzLnZpZXc7XG4gIGRlbGV0ZSB0aGlzLnJlbmRlcmVyO1xuICBkZWxldGUgdGhpcy5waHlzaWNzO1xuICBkZWxldGUgdGhpcy5sYXlvdXRFbmdpbmU7XG4gIGRlbGV0ZSB0aGlzLmNsdXN0ZXJpbmc7XG4gIGRlbGV0ZSB0aGlzLm1hbmlwdWxhdGlvbjtcbiAgZGVsZXRlIHRoaXMubm9kZXNIYW5kbGVyO1xuICBkZWxldGUgdGhpcy5lZGdlc0hhbmRsZXI7XG4gIGRlbGV0ZSB0aGlzLmNvbmZpZ3VyYXRvcjtcbiAgZGVsZXRlIHRoaXMuaW1hZ2VzO1xuXG4gIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5ub2Rlcywgbm9kZUlkKSlcbiAgICAgIGNvbnRpbnVlO1xuICAgIGRlbGV0ZSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZWRnZUlkIGluIHRoaXMuYm9keS5lZGdlcykge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5lZGdlcywgZWRnZUlkKSlcbiAgICAgIGNvbnRpbnVlO1xuICAgIGRlbGV0ZSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgfVxuXG4gIC8vIHJlbW92ZSB0aGUgY29udGFpbmVyIGFuZCBldmVyeXRoaW5nIGluc2lkZSBpdCByZWN1cnNpdmVseVxuICByZWN1cnNpdmVET01EZWxldGUodGhpcy5ib2R5LmNvbnRhaW5lcik7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgdmFsdWVzIG9mIGFsbCBvYmplY3QgaW4gdGhlIGdpdmVuIGFycmF5IGFjY29yZGluZyB0byB0aGUgY3VycmVudFxuICogdmFsdWUgcmFuZ2Ugb2YgdGhlIG9iamVjdHMgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmogICAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgYSBzZXQgb2YgRWRnZXMgb3IgTm9kZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdHMgbXVzdCBoYXZlIGEgbWV0aG9kIGdldFZhbHVlKCkgYW5kXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlUmFuZ2UobWluLCBtYXgpLlxuICogQHByaXZhdGVcbiAqL1xuTmV0d29yay5wcm90b3R5cGUuX3VwZGF0ZVZhbHVlUmFuZ2UgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGxldCBpZDtcblxuICAvLyBkZXRlcm1pbmUgdGhlIHJhbmdlIG9mIHRoZSBvYmplY3RzXG4gIGxldCB2YWx1ZU1pbiA9IHVuZGVmaW5lZDtcbiAgbGV0IHZhbHVlTWF4ID0gdW5kZWZpbmVkO1xuICBsZXQgdmFsdWVUb3RhbCA9IDA7XG4gIGZvciAoaWQgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGlkKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpbaWRdLmdldFZhbHVlKCk7XG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZU1pbiA9IHZhbHVlTWluID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IE1hdGgubWluKHZhbHVlLCB2YWx1ZU1pbik7XG4gICAgICAgIHZhbHVlTWF4ID0gdmFsdWVNYXggPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogTWF0aC5tYXgodmFsdWUsIHZhbHVlTWF4KTtcbiAgICAgICAgdmFsdWVUb3RhbCArPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBhZGp1c3QgdGhlIHJhbmdlIG9mIGFsbCBvYmplY3RzXG4gIGlmICh2YWx1ZU1pbiAhPT0gdW5kZWZpbmVkICYmIHZhbHVlTWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGlkIGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGlkKSkge1xuICAgICAgICBvYmpbaWRdLnNldFZhbHVlUmFuZ2UodmFsdWVNaW4sIHZhbHVlTWF4LCB2YWx1ZVRvdGFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIE5ldHdvcmsgaXMgYWN0aXZlLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5OZXR3b3JrLnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICF0aGlzLmFjdGl2YXRvciB8fCB0aGlzLmFjdGl2YXRvci5hY3RpdmU7XG59O1xuXG5OZXR3b3JrLnByb3RvdHlwZS5zZXRTaXplID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jYW52YXMuc2V0U2l6ZS5hcHBseSh0aGlzLmNhbnZhcywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5jYW52YXNUb0RPTSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2FudmFzLmNhbnZhc1RvRE9NLmFwcGx5KHRoaXMuY2FudmFzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLkRPTXRvQ2FudmFzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMuYXBwbHkodGhpcy5jYW52YXMsIGFyZ3VtZW50cyk7XG59O1xuXG4vKipcbiAqIE5vZGVzIGNhbiBiZSBpbiBjbHVzdGVycy4gQ2x1c3RlcnMgY2FuIGFsc28gYmUgaW4gY2x1c3RlcnMuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbmQgYXJyYXkgb2ZcbiAqIG5vZGVJZHMgc2hvd2luZyB3aGVyZSB0aGUgbm9kZSBpcy5cbiAqXG4gKiBJZiBhbnkgbm9kZUlkIGluIHRoZSBjaGFpbiwgZXNwZWNpYWxseSB0aGUgZmlyc3QgcGFzc2VkIGluIGFzIGEgcGFyYW1ldGVyLCBpcyBub3QgcHJlc2VudCBpblxuICogdGhlIGN1cnJlbnQgbm9kZXMgbGlzdCwgYW4gZW1wdHkgYXJyYXkgaXMgcmV0dXJuZWQuXG4gKlxuICogRXhhbXBsZTpcbiAqIGNsdXN0ZXIgJ0EnIGNvbnRhaW5zIGNsdXN0ZXIgJ0InLFxuICogY2x1c3RlciAnQicgY29udGFpbnMgY2x1c3RlciAnQycsXG4gKiBjbHVzdGVyICdDJyBjb250YWlucyBub2RlICdmcmVkJy5cbiAqIGBqc25ldHdvcmsuY2x1c3RlcmluZy5maW5kTm9kZSgnZnJlZCcpYCB3aWxsIHJldHVybiBgWydBJywnQicsJ0MnLCdmcmVkJ11gLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbm9kZUlkXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLmZpbmROb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmZpbmROb2RlLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5cbk5ldHdvcmsucHJvdG90eXBlLmlzQ2x1c3RlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy5pc0NsdXN0ZXIuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLm9wZW5DbHVzdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLm9wZW5DbHVzdGVyLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5jbHVzdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmNsdXN0ZXIuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldE5vZGVzSW5DbHVzdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmdldE5vZGVzSW5DbHVzdGVyLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5jbHVzdGVyQnlDb25uZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmNsdXN0ZXJCeUNvbm5lY3Rpb24uYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmNsdXN0ZXJCeUh1YnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3RlckJ5SHVic2l6ZS5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUudXBkYXRlQ2x1c3RlcmVkTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy51cGRhdGVDbHVzdGVyZWROb2RlLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRDbHVzdGVyZWRFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy5nZXRDbHVzdGVyZWRFZGdlcy5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0QmFzZUVkZ2UgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuZ2V0QmFzZUVkZ2UuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldEJhc2VFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy5nZXRCYXNlRWRnZXMuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnVwZGF0ZUVkZ2UgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcudXBkYXRlRWRnZS5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHdpbGwgY2x1c3RlciBhbGwgbm9kZXMgd2l0aCAxIGVkZ2Ugd2l0aCB0aGVpciByZXNwZWN0aXZlIGNvbm5lY3RlZCBub2RlLlxuICogVGhlIG9wdGlvbnMgb2JqZWN0IGlzIGV4cGxhaW5lZCBpbiBmdWxsIDxhIGRhdGEtc2Nyb2xsPVwiXCIgZGF0YS1vcHRpb25zPVwieyAmcXVvdDtlYXNpbmcmcXVvdDs6ICZxdW90O2Vhc2VJbkN1YmljJnF1b3Q7IH1cIiBocmVmPVwiI29wdGlvbnNPYmplY3RcIj5iZWxvdzwvYT4uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuTmV0d29yay5wcm90b3R5cGUuY2x1c3Rlck91dGxpZXJzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmNsdXN0ZXJPdXRsaWVycy5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuXG5OZXR3b3JrLnByb3RvdHlwZS5nZXRTZWVkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sYXlvdXRFbmdpbmUuZ2V0U2VlZC5hcHBseSh0aGlzLmxheW91dEVuZ2luZSwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5lbmFibGVFZGl0TW9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubWFuaXB1bGF0aW9uLmVuYWJsZUVkaXRNb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmRpc2FibGVFZGl0TW9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubWFuaXB1bGF0aW9uLmRpc2FibGVFZGl0TW9kZS5hcHBseSh0aGlzLm1hbmlwdWxhdGlvbiwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5hZGROb2RlTW9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubWFuaXB1bGF0aW9uLmFkZE5vZGVNb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmVkaXROb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZWRpdE5vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZWRpdE5vZGVNb2RlID0gZnVuY3Rpb24gKCkge1xuICBjb25zb2xlLndhcm4oXCJEZXByZWNhdGVkOiBQbGVhc2UgdXNlIGVkaXROb2RlIGluc3RlYWQgb2YgZWRpdE5vZGVNb2RlLlwiKTtcbiAgcmV0dXJuIHRoaXMubWFuaXB1bGF0aW9uLmVkaXROb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmFkZEVkZ2VNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uYWRkRWRnZU1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZWRpdEVkZ2VNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZWRpdEVkZ2VNb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmRlbGV0ZVNlbGVjdGVkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZGVsZXRlU2VsZWN0ZWQuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0UG9zaXRpb25zID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIuZ2V0UG9zaXRpb25zLmFwcGx5KHRoaXMubm9kZXNIYW5kbGVyLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFBvc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIuZ2V0UG9zaXRpb24uYXBwbHkodGhpcy5ub2Rlc0hhbmRsZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuc3RvcmVQb3NpdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5zdG9yZVBvc2l0aW9ucy5hcHBseSh0aGlzLm5vZGVzSGFuZGxlciwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5tb3ZlTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZXNIYW5kbGVyLm1vdmVOb2RlLmFwcGx5KHRoaXMubm9kZXNIYW5kbGVyLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldEJvdW5kaW5nQm94ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIuZ2V0Qm91bmRpbmdCb3guYXBwbHkodGhpcy5ub2Rlc0hhbmRsZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0Q29ubmVjdGVkTm9kZXMgPSBmdW5jdGlvbiAob2JqZWN0SWQpIHtcbiAgaWYgKHRoaXMuYm9keS5ub2Rlc1tvYmplY3RJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRDb25uZWN0ZWROb2Rlcy5hcHBseShcbiAgICAgIHRoaXMubm9kZXNIYW5kbGVyLFxuICAgICAgYXJndW1lbnRzXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5lZGdlc0hhbmRsZXIuZ2V0Q29ubmVjdGVkTm9kZXMuYXBwbHkoXG4gICAgICB0aGlzLmVkZ2VzSGFuZGxlcixcbiAgICAgIGFyZ3VtZW50c1xuICAgICk7XG4gIH1cbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRDb25uZWN0ZWRFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZXNIYW5kbGVyLmdldENvbm5lY3RlZEVkZ2VzLmFwcGx5KFxuICAgIHRoaXMubm9kZXNIYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnN0YXJ0U2ltdWxhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGh5c2ljcy5zdGFydFNpbXVsYXRpb24uYXBwbHkodGhpcy5waHlzaWNzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnN0b3BTaW11bGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5waHlzaWNzLnN0b3BTaW11bGF0aW9uLmFwcGx5KHRoaXMucGh5c2ljcywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5zdGFiaWxpemUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBoeXNpY3Muc3RhYmlsaXplLmFwcGx5KHRoaXMucGh5c2ljcywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0aW9uLmFwcGx5KFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICBhcmd1bWVudHNcbiAgKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5zZXRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2V0U2VsZWN0aW9uLmFwcGx5KFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICBhcmd1bWVudHNcbiAgKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRTZWxlY3RlZE5vZGVzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkTm9kZUlkcy5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZEVkZ2VJZHMuYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldE5vZGVBdCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgbm9kZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXROb2RlQXQuYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xuICBpZiAobm9kZSAhPT0gdW5kZWZpbmVkICYmIG5vZGUuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBub2RlLmlkO1xuICB9XG4gIHJldHVybiBub2RlO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldEVkZ2VBdCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZWRnZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRFZGdlQXQuYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xuICBpZiAoZWRnZSAhPT0gdW5kZWZpbmVkICYmIGVkZ2UuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBlZGdlLmlkO1xuICB9XG4gIHJldHVybiBlZGdlO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnNlbGVjdE5vZGVzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNlbGVjdE5vZGVzLmFwcGx5KFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICBhcmd1bWVudHNcbiAgKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5zZWxlY3RFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZWxlY3RFZGdlcy5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG59O1xuTmV0d29yay5wcm90b3R5cGUudW5zZWxlY3RBbGwgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbC5hcHBseSh0aGlzLnNlbGVjdGlvbkhhbmRsZXIsIGFyZ3VtZW50cyk7XG4gIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5jb21taXRXaXRob3V0RW1pdHRpbmcuYXBwbHkodGhpcy5zZWxlY3Rpb25IYW5kbGVyKTtcbiAgdGhpcy5yZWRyYXcoKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5yZWRyYXcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJlbmRlcmVyLnJlZHJhdy5hcHBseSh0aGlzLnJlbmRlcmVyLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFNjYWxlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy52aWV3LmdldFNjYWxlLmFwcGx5KHRoaXMudmlldywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRWaWV3UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnZpZXcuZ2V0Vmlld1Bvc2l0aW9uLmFwcGx5KHRoaXMudmlldywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5maXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnZpZXcuZml0LmFwcGx5KHRoaXMudmlldywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5tb3ZlVG8gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnZpZXcubW92ZVRvLmFwcGx5KHRoaXMudmlldywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5mb2N1cy5hcHBseSh0aGlzLnZpZXcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUucmVsZWFzZU5vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnZpZXcucmVsZWFzZU5vZGUuYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldE9wdGlvbnNGcm9tQ29uZmlndXJhdG9yID0gZnVuY3Rpb24gKCkge1xuICBsZXQgb3B0aW9ucyA9IHt9O1xuICBpZiAodGhpcy5jb25maWd1cmF0b3IpIHtcbiAgICBvcHRpb25zID0gdGhpcy5jb25maWd1cmF0b3IuZ2V0T3B0aW9ucy5hcHBseSh0aGlzLmNvbmZpZ3VyYXRvcik7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBOZXR3b3JrO1xuIiwgIi8qKlxuICogTm9ybWFsaXplcyBsYW5ndWFnZSBjb2RlIGludG8gdGhlIGZvcm1hdCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHBhcmFtIGxvY2FsZXMgLSBBbGwgdGhlIGF2YWlsYWJsZSBsb2NhbGVzLlxuICogQHBhcmFtIHJhd0NvZGUgLSBUaGUgb3JpZ2luYWwgY29kZSBhcyBzdXBwbGllZCBieSB0aGUgdXNlci5cbiAqIEByZXR1cm5zIExhbmd1YWdlIGNvZGUgaW4gdGhlIGZvcm1hdCBsYW5ndWFnZS1DT1VOVFJZIG9yIGxhbmd1YWdlLCBldmVudHVhbGx5XG4gKiBmYWxsYmFja3MgdG8gZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVMYW5ndWFnZUNvZGUoXG4gIGxvY2FsZXM6IFJlY29yZDxzdHJpbmcsIHVuZGVmaW5lZCB8IG9iamVjdD4sXG4gIHJhd0NvZGU6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBbcmF3TGFuZ3VhZ2UsIHJhd0NvdW50cnldID0gcmF3Q29kZS5zcGxpdCgvWy1fIC9dLywgMik7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSByYXdMYW5ndWFnZSAhPSBudWxsID8gcmF3TGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSA6IG51bGw7XG4gICAgY29uc3QgY291bnRyeSA9IHJhd0NvdW50cnkgIT0gbnVsbCA/IHJhd0NvdW50cnkudG9VcHBlckNhc2UoKSA6IG51bGw7XG5cbiAgICBpZiAobGFuZ3VhZ2UgJiYgY291bnRyeSkge1xuICAgICAgY29uc3QgY29kZSA9IGxhbmd1YWdlICsgXCItXCIgKyBjb3VudHJ5O1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsb2NhbGVzLCBjb2RlKSkge1xuICAgICAgICByZXR1cm4gY29kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgVW5rbm93biB2YXJpYW50ICR7Y291bnRyeX0gb2YgbGFuZ3VhZ2UgJHtsYW5ndWFnZX0uYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxhbmd1YWdlKSB7XG4gICAgICBjb25zdCBjb2RlID0gbGFuZ3VhZ2U7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxvY2FsZXMsIGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIGxhbmd1YWdlICR7bGFuZ3VhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS53YXJuKGBVbmtub3duIGxvY2FsZSAke3Jhd0NvZGV9LCBmYWxsaW5nIGJhY2sgdG8gRW5nbGlzaC5gKTtcblxuICAgIHJldHVybiBcImVuXCI7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYFVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgbm9ybWFsaXppbmcgbG9jYWxlICR7cmF3Q29kZX0sIGZhbGxpbmcgYmFjayB0byBFbmdsaXNoLmBcbiAgICApO1xuXG4gICAgcmV0dXJuIFwiZW5cIjtcbiAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gXCIuL25ldHdvcmsvTmV0d29ya1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIE5ldHdvcmtJbWFnZXMgfSBmcm9tIFwiLi9uZXR3b3JrL0ltYWdlc1wiO1xuXG5pbXBvcnQgKiBhcyBkb3RwYXJzZXIgZnJvbSBcIi4vbmV0d29yay9kb3RwYXJzZXJcIjtcbmV4cG9ydCB7IGRvdHBhcnNlciBhcyBuZXR3b3JrRE9UUGFyc2VyIH07XG5leHBvcnQgY29uc3QgcGFyc2VET1ROZXR3b3JrID0gZG90cGFyc2VyLkRPVFRvR3JhcGg7XG5cbmltcG9ydCAqIGFzIGdlcGhpUGFyc2VyIGZyb20gXCIuL25ldHdvcmsvZ2VwaGlQYXJzZXJcIjtcbmV4cG9ydCB7IHBhcnNlR2VwaGkgYXMgcGFyc2VHZXBoaU5ldHdvcmsgfSBmcm9tIFwiLi9uZXR3b3JrL2dlcGhpUGFyc2VyXCI7XG5leHBvcnQgeyBnZXBoaVBhcnNlciBhcyBuZXR3b3JrR2VwaGlQYXJzZXIgfTtcblxuaW1wb3J0ICogYXMgYWxsT3B0aW9ucyBmcm9tIFwiLi9uZXR3b3JrL29wdGlvbnNcIjtcbmV4cG9ydCB7IGFsbE9wdGlvbnMgYXMgbmV0d29ya09wdGlvbnMgfTtcblxuLy8gRGF0YVNldCwgdXRpbHMgZXRjLiBjYW4ndCBiZSByZWV4cG9ydGVkIGhlcmUgYmVjYXVzZSB0aGF0IHdvdWxkIGNhdXNlIHN0YWNrXG4vLyBvdmVyZmxvdyBpbiBVTUQgYnVpbGRzLiBUaGV5IGFsbCBleHBvcnQgdmlzIG5hbWVzcGFjZSB0aGVyZWZvcmUgcmVleHBvcnRpbmdcbi8vIGxlYWRzIHRvIGxvYWRpbmcgdmlzIHRvIGxvYWQgdmlzIHRvIGxvYWQgdmlz4oCmXG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IHRoaXMgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3Rcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBJU19IVE1MRERBID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhbGw6IGRvY3VtZW50QWxsLFxuICBJU19IVE1MRERBOiBJU19IVE1MRERBXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkZG9jdW1lbnRBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsJyk7XG5cbnZhciBkb2N1bWVudEFsbCA9ICRkb2N1bWVudEFsbC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxubW9kdWxlLmV4cG9ydHMgPSAkZG9jdW1lbnRBbGwuSVNfSFRNTEREQSA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciAkZG9jdW1lbnRBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsJyk7XG5cbnZhciBkb2N1bWVudEFsbCA9ICRkb2N1bWVudEFsbC5hbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gJGRvY3VtZW50QWxsLklTX0hUTUxEREEgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCkgfHwgaXQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh2YXJpYWJsZSkgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgbmF2aWdhdG9yICE9ICd1bmRlZmluZWQnICYmIFN0cmluZyhuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAnJztcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWwsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zMy4yJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjMgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zMy4yL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBiaW5kID0gdW5jdXJyeVRoaXModW5jdXJyeVRoaXMuYmluZCk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQpIHtcbiAgYUNhbGxhYmxlKGZuKTtcbiAgcmV0dXJuIHRoYXQgPT09IHVuZGVmaW5lZCA/IGZuIDogTkFUSVZFX0JJTkQgPyBiaW5kKGZuLCB0aGF0KSA6IGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIHdyYXBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChOYXRpdmVDb25zdHJ1Y3Rvcikge1xuICB2YXIgV3JhcHBlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcmFwcGVyKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIGFwcGx5KE5hdGl2ZUNvbnN0cnVjdG9yLCB0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICBXcmFwcGVyLnByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIFdyYXBwZXI7XG59O1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWwgOiBTVEFUSUMgPyBnbG9iYWxbVEFSR0VUXSA6IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBUQVJHRVQsIHt9KVtUQVJHRVRdO1xuICB2YXIgdGFyZ2V0UHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcblxuICB2YXIgRk9SQ0VELCBVU0VfTkFUSVZFLCBWSVJUVUFMX1BST1RPVFlQRTtcbiAgdmFyIGtleSwgc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5LCBuYXRpdmVQcm9wZXJ0eSwgcmVzdWx0UHJvcGVydHksIGRlc2NyaXB0b3I7XG5cbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBVU0VfTkFUSVZFID0gIUZPUkNFRCAmJiBuYXRpdmVTb3VyY2UgJiYgaGFzT3duKG5hdGl2ZVNvdXJjZSwga2V5KTtcblxuICAgIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSkgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmF0aXZlU291cmNlLCBrZXkpO1xuICAgICAgbmF0aXZlUHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIG5hdGl2ZVByb3BlcnR5ID0gbmF0aXZlU291cmNlW2tleV07XG5cbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIGltcGxlbWVudGF0aW9uXG4gICAgc291cmNlUHJvcGVydHkgPSAoVVNFX05BVElWRSAmJiBuYXRpdmVQcm9wZXJ0eSkgPyBuYXRpdmVQcm9wZXJ0eSA6IHNvdXJjZVtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUgJiYgdHlwZW9mIHRhcmdldFByb3BlcnR5ID09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIG1ldGhvZHMgdG8gZ2xvYmFsIGZvciBjYWxsaW5nIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBpZiAob3B0aW9ucy5iaW5kICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gYmluZChzb3VyY2VQcm9wZXJ0eSwgZ2xvYmFsKTtcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlcyBpbiB0aGlzIHZlcnNpb25cbiAgICBlbHNlIGlmIChvcHRpb25zLndyYXAgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSB3cmFwQ29uc3RydWN0b3Ioc291cmNlUHJvcGVydHkpO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIGVsc2UgaWYgKFBST1RPICYmIGlzQ2FsbGFibGUoc291cmNlUHJvcGVydHkpKSByZXN1bHRQcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCByZXN1bHRQcm9wZXJ0eSk7XG5cbiAgICBpZiAoUFJPVE8pIHtcbiAgICAgIFZJUlRVQUxfUFJPVE9UWVBFID0gVEFSR0VUICsgJ1Byb3RvdHlwZSc7XG4gICAgICBpZiAoIWhhc093bihwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFLCB7fSk7XG4gICAgICB9XG4gICAgICAvLyBleHBvcnQgdmlydHVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGhbVklSVFVBTF9QUk9UT1RZUEVdLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIC8vIGV4cG9ydCByZWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBpZiAob3B0aW9ucy5yZWFsICYmIHRhcmdldFByb3RvdHlwZSAmJiAoRk9SQ0VEIHx8ICF0YXJnZXRQcm90b3R5cGVba2V5XSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldFByb3RvdHlwZSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSBkZWZpbmVQcm9wZXJ0eSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGRlZmluZVByb3BlcnR5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkuc2hhbSkgZGVmaW5lUHJvcGVydHkuc2hhbSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KSwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKHByb3BlcnR5S2V5IGluIG9iamVjdCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIHByb3BlcnR5S2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbcHJvcGVydHlLZXldID0gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgZW1wdHkgPSBbXTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoY29uc3RydWN0b3JSZWdFeHAuZXhlYyk7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC50ZXN0KG5vb3ApO1xuXG52YXIgaXNDb25zdHJ1Y3Rvck1vZGVybiA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChub29wLCBlbXB0eSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChjbGFzc29mKGFyZ3VtZW50KSkge1xuICAgIGNhc2UgJ0FzeW5jRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0dlbmVyYXRvckZ1bmN0aW9uJzpcbiAgICBjYXNlICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJzogcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICAgIC8vIGBGdW5jdGlvbiN0b1N0cmluZ2AgdGhyb3dzIG9uIHNvbWUgYnVpbHQtaXQgZnVuY3Rpb24gaW4gc29tZSBsZWdhY3kgZW5naW5lc1xuICAgIC8vIChmb3IgZXhhbXBsZSwgYERPTVF1YWRgIGFuZCBzaW1pbGFyIGluIEZGNDEtKVxuICAgIHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYyhjb25zdHJ1Y3RvclJlZ0V4cCwgaW5zcGVjdFNvdXJjZShhcmd1bWVudCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5pc0NvbnN0cnVjdG9yTGVnYWN5LnNoYW0gPSB0cnVlO1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIGxlbik7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgMSk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gdHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnXG4gICAgPyBkb2N1bWVudC5kb21haW4gJiYgYWN0aXZlWERvY3VtZW50XG4gICAgICA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSAvLyBvbGQgSUVcbiAgICAgIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKClcbiAgICA6IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KTsgLy8gV1NIXG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1jcmVhdGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllc01vZHVsZS5mKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gIHZhciByZXN1bHQgPSAkQXJyYXkobWF4KGZpbiAtIGssIDApKTtcbiAgdmFyIG4gPSAwO1xuICBmb3IgKDsgayA8IGZpbjsgaysrLCBuKyspIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gIHJlc3VsdC5sZW5ndGggPSBuO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW51bWVyYWJsZSkgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzT3duKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVEFHLCBTVEFUSUMsIFNFVF9NRVRIT0QpIHtcbiAgaWYgKGl0KSB7XG4gICAgdmFyIHRhcmdldCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gICAgfVxuICAgIGlmIChTRVRfTUVUSE9EICYmICFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsICd0b1N0cmluZycsIHRvU3RyaW5nKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJSZWplY3QgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBuYXRpdmVPYmplY3RDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgSElEREVOID0gc2hhcmVkS2V5KCdoaWRkZW4nKTtcbnZhciBTWU1CT0wgPSAnU3ltYm9sJztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1lNQk9MKTtcblxudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2wgJiYgJFN5bWJvbFtQUk9UT1RZUEVdO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mO1xudmFyIG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIFVTRV9TRVRURVIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBmYWxsYmFja0RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgdmFyIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCBQKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpIGRlbGV0ZSBPYmplY3RQcm90b3R5cGVbUF07XG4gIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciAmJiBPICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGUsIFAsIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpO1xuICB9XG59O1xuXG52YXIgc2V0U3ltYm9sRGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdENyZWF0ZShuYXRpdmVEZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPT0gNztcbn0pID8gZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA6IG5hdGl2ZURlZmluZVByb3BlcnR5O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcsIGRlc2NyaXB0aW9uKSB7XG4gIHZhciBzeW1ib2wgPSBBbGxTeW1ib2xzW3RhZ10gPSBuYXRpdmVPYmplY3RDcmVhdGUoU3ltYm9sUHJvdG90eXBlKTtcbiAgc2V0SW50ZXJuYWxTdGF0ZShzeW1ib2wsIHtcbiAgICB0eXBlOiBTWU1CT0wsXG4gICAgdGFnOiB0YWcsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gIH0pO1xuICBpZiAoIURFU0NSSVBUT1JTKSBzeW1ib2wuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgcmV0dXJuIHN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGlmIChPID09PSBPYmplY3RQcm90b3R5cGUpICRkZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQLCBBdHRyaWJ1dGVzKTtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFBdHRyaWJ1dGVzLmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzT3duKE8sIEhJRERFTikpIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIEhJRERFTiwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHt9KSk7XG4gICAgICBPW0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNPd24oTywgSElEREVOKSAmJiBPW0hJRERFTl1ba2V5XSkgT1tISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSBuYXRpdmVPYmplY3RDcmVhdGUoQXR0cmlidXRlcywgeyBlbnVtZXJhYmxlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2NyaXB0b3IoTywga2V5LCBBdHRyaWJ1dGVzKTtcbiAgfSByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywga2V5LCBBdHRyaWJ1dGVzKTtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhwcm9wZXJ0aWVzKS5jb25jYXQoJGdldE93blByb3BlcnR5U3ltYm9scyhwcm9wZXJ0aWVzKSk7XG4gICRmb3JFYWNoKGtleXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwoJHByb3BlcnR5SXNFbnVtZXJhYmxlLCBwcm9wZXJ0aWVzLCBrZXkpKSAkZGVmaW5lUHJvcGVydHkoTywga2V5LCBwcm9wZXJ0aWVzW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuXG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyBuYXRpdmVPYmplY3RDcmVhdGUoTykgOiAkZGVmaW5lUHJvcGVydGllcyhuYXRpdmVPYmplY3RDcmVhdGUoTyksIFByb3BlcnRpZXMpO1xufTtcblxudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIFAgPSB0b1Byb3BlcnR5S2V5KFYpO1xuICB2YXIgZW51bWVyYWJsZSA9IGNhbGwobmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUsIHRoaXMsIFApO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBQKSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBlbnVtZXJhYmxlIHx8ICFoYXNPd24odGhpcywgUCkgfHwgIWhhc093bihBbGxTeW1ib2xzLCBQKSB8fCBoYXNPd24odGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1bUF1cbiAgICA/IGVudW1lcmFibGUgOiB0cnVlO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICB2YXIgaXQgPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG4gIGlmIChkZXNjcmlwdG9yICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzT3duKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIHtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpKSBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBJU19PQkpFQ1RfUFJPVE9UWVBFID0gTyA9PT0gT2JqZWN0UHJvdG90eXBlO1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKElTX09CSkVDVF9QUk9UT1RZUEUgPyBPYmplY3RQcm90b3R5cGVTeW1ib2xzIDogdG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAoIUlTX09CSkVDVF9QUk9UT1RZUEUgfHwgaGFzT3duKE9iamVjdFByb3RvdHlwZSwga2V5KSkpIHtcbiAgICAgIHB1c2gocmVzdWx0LCBBbGxTeW1ib2xzW2tleV0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wtY29uc3RydWN0b3JcbmlmICghTkFUSVZFX1NZTUJPTCkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmIChpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgIHZhciBkZXNjcmlwdGlvbiA9ICFhcmd1bWVudHMubGVuZ3RoIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogJHRvU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHRhZyA9IHVpZChkZXNjcmlwdGlvbik7XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyICR0aGlzID0gdGhpcyA9PT0gdW5kZWZpbmVkID8gZ2xvYmFsIDogdGhpcztcbiAgICAgIGlmICgkdGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBjYWxsKHNldHRlciwgT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhc093bigkdGhpcywgSElEREVOKSAmJiBoYXNPd24oJHRoaXNbSElEREVOXSwgdGFnKSkgJHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZXBsYWNlcikge1xuICBpZiAoaXNDYWxsYWJsZShyZXBsYWNlcikpIHJldHVybiByZXBsYWNlcjtcbiAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmV0dXJuO1xuICB2YXIgcmF3TGVuZ3RoID0gcmVwbGFjZXIubGVuZ3RoO1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd0xlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZW1lbnQgPSByZXBsYWNlcltpXTtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ3N0cmluZycpIHB1c2goa2V5cywgZWxlbWVudCk7XG4gICAgZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ251bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ051bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ1N0cmluZycpIHB1c2goa2V5cywgdG9TdHJpbmcoZWxlbWVudCkpO1xuICB9XG4gIHZhciBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciByb290ID0gdHJ1ZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHJvb3QpIHtcbiAgICAgIHJvb3QgPSBmYWxzZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHJldHVybiB2YWx1ZTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXNMZW5ndGg7IGorKykgaWYgKGtleXNbal0gPT09IGtleSkgcmV0dXJuIHZhbHVlO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGdldFJlcGxhY2VyRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24nKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJHN0cmluZ2lmeSA9IGdldEJ1aWx0SW4oJ0pTT04nLCAnc3RyaW5naWZ5Jyk7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKC8uLy5leGVjKTtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbnVtYmVyVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG52YXIgdGVzdGVyID0gL1tcXHVEODAwLVxcdURGRkZdL2c7XG52YXIgbG93ID0gL15bXFx1RDgwMC1cXHVEQkZGXSQvO1xudmFyIGhpID0gL15bXFx1REMwMC1cXHVERkZGXSQvO1xuXG52YXIgV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoJ3N0cmluZ2lmeSBkZXRlY3Rpb24nKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgcmV0dXJuICRzdHJpbmdpZnkoW3N5bWJvbF0pICE9PSAnW251bGxdJ1xuICAgIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAgIHx8ICRzdHJpbmdpZnkoeyBhOiBzeW1ib2wgfSkgIT09ICd7fSdcbiAgICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICAgIHx8ICRzdHJpbmdpZnkoT2JqZWN0KHN5bWJvbCkpICE9PSAne30nO1xufSk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXdlbGwtZm9ybWVkLXN0cmluZ2lmeVxudmFyIElMTF9GT1JNRURfVU5JQ09ERSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRzdHJpbmdpZnkoJ1xcdURGMDZcXHVEODM0JykgIT09ICdcIlxcXFx1ZGYwNlxcXFx1ZDgzNFwiJ1xuICAgIHx8ICRzdHJpbmdpZnkoJ1xcdURFQUQnKSAhPT0gJ1wiXFxcXHVkZWFkXCInO1xufSk7XG5cbnZhciBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA9IGZ1bmN0aW9uIChpdCwgcmVwbGFjZXIpIHtcbiAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gIHZhciAkcmVwbGFjZXIgPSBnZXRSZXBsYWNlckZ1bmN0aW9uKHJlcGxhY2VyKTtcbiAgaWYgKCFpc0NhbGxhYmxlKCRyZXBsYWNlcikgJiYgKGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gIGFyZ3NbMV0gPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIHNvbWUgb2xkIGltcGxlbWVudGF0aW9ucyAobGlrZSBXZWJLaXQpIGNvdWxkIHBhc3MgbnVtYmVycyBhcyBrZXlzXG4gICAgaWYgKGlzQ2FsbGFibGUoJHJlcGxhY2VyKSkgdmFsdWUgPSBjYWxsKCRyZXBsYWNlciwgdGhpcywgJFN0cmluZyhrZXkpLCB2YWx1ZSk7XG4gICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbiAgcmV0dXJuIGFwcGx5KCRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xufTtcblxudmFyIGZpeElsbEZvcm1lZCA9IGZ1bmN0aW9uIChtYXRjaCwgb2Zmc2V0LCBzdHJpbmcpIHtcbiAgdmFyIHByZXYgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgLSAxKTtcbiAgdmFyIG5leHQgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgKyAxKTtcbiAgaWYgKChleGVjKGxvdywgbWF0Y2gpICYmICFleGVjKGhpLCBuZXh0KSkgfHwgKGV4ZWMoaGksIG1hdGNoKSAmJiAhZXhlYyhsb3csIHByZXYpKSkge1xuICAgIHJldHVybiAnXFxcXHUnICsgbnVtYmVyVG9TdHJpbmcoY2hhckNvZGVBdChtYXRjaCwgMCksIDE2KTtcbiAgfSByZXR1cm4gbWF0Y2g7XG59O1xuXG5pZiAoJHN0cmluZ2lmeSkge1xuICAvLyBgSlNPTi5zdHJpbmdpZnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24uc3RyaW5naWZ5XG4gICQoeyB0YXJnZXQ6ICdKU09OJywgc3RhdDogdHJ1ZSwgYXJpdHk6IDMsIGZvcmNlZDogV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIHx8IElMTF9GT1JNRURfVU5JQ09ERSB9LCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgICAgIHZhciByZXN1bHQgPSBhcHBseShXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPyBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA6ICRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xuICAgICAgcmV0dXJuIElMTF9GT1JNRURfVU5JQ09ERSAmJiB0eXBlb2YgcmVzdWx0ID09ICdzdHJpbmcnID8gcmVwbGFjZShyZXN1bHQsIHRlc3RlciwgZml4SWxsRm9ybWVkKSA6IHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxuLy8gVjggfiBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRk9SQ0VEID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5c3ltYm9sc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICB2YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gJGdldE93blByb3BlcnR5U3ltYm9scyh0b09iamVjdChpdCkpIDogW107XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNJdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmFzeW5jaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNJdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaGFzSW5zdGFuY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5oYXNpbnN0YW5jZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdoYXNJbnN0YW5jZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXNjb25jYXRzcHJlYWRhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hBbGxgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaGFsbFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaEFsbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucmVwbGFjZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnJlcGxhY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc2VhcmNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc2VhcmNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NlYXJjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BlY2llc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwZWNpZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BsaXRgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGxpdFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGxpdCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC50b1ByaW1pdGl2ZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvcHJpbWl0aXZlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9zdHJpbmd0YWdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2V0QnVpbHRJbignU3ltYm9sJyksICdTeW1ib2wnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnVuc2NvcGFibGVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudW5zY29wYWJsZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIEpTT05bQEB0b1N0cmluZ1RhZ10gcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wucmVwbGFjZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc2VhcmNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGxpdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC51bnNjb3BhYmxlcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QudG8tc3RyaW5nLXRhZycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1rZXlzIC0tIHNhZmUgKi9cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxudmFyIE5FV19JVEVSQVRPUl9QUk9UT1RZUEUgPSAhaXNPYmplY3QoSXRlcmF0b3JQcm90b3R5cGUpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEl0ZXJhdG9yUHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtQEBpdGVyYXRvclxuaWYgKCFpc0NhbGxhYmxlKEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgZGVmaW5lQnVpbHRJbihJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gJE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyAkT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzT3duKG9iamVjdCwgSUVfUFJPVE8pKSByZXR1cm4gb2JqZWN0W0lFX1BST1RPXTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBpZiAoaXNDYWxsYWJsZShjb25zdHJ1Y3RvcikgJiYgb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiAkT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICh0eXBlb2YgYXJndW1lbnQgPT0gJ29iamVjdCcgfHwgaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSXRlcmF0b3JzQ29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpO1xuXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuUFJPUEVSO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcblxuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNDYWxsYWJsZShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICAgICAgICAgIGRlZmluZUJ1aWx0SW4oQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkucHJvdG90eXBlLnsgdmFsdWVzLCBAQGl0ZXJhdG9yIH0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBERUZBVUxUID09PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgaWYgKCFJU19QVVJFICYmIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsICduYW1lJywgVkFMVUVTKTtcbiAgICB9IGVsc2Uge1xuICAgICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIGNhbGwobmF0aXZlSXRlcmF0b3IsIHRoaXMpOyB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IsIHsgbmFtZTogREVGQVVMVCB9KTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uUHJvdG90eXBlID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUgJiYgY2xhc3NvZihDb2xsZWN0aW9uUHJvdG90eXBlKSAhPT0gVE9fU1RSSU5HX1RBRykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCBDT0xMRUNUSU9OX05BTUUpO1xuICB9XG4gIEl0ZXJhdG9yc1tDT0xMRUNUSU9OX05BTUVdID0gSXRlcmF0b3JzLkFycmF5O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbnZhciBNRVRBREFUQSA9IHdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLy8gRnVuY3Rpb24ucHJvdG90eXBlW0BAbWV0YWRhdGFdXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmlmIChGdW5jdGlvblByb3RvdHlwZVtNRVRBREFUQV0gPT09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eShGdW5jdGlvblByb3RvdHlwZSwgTUVUQURBVEEsIHtcbiAgICB2YWx1ZTogbnVsbFxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFzeW5jLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNEaXNwb3NlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5kaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdkaXNwb3NlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvcnNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3N5bWJvbCcpO1xuXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5mdW5jdGlvbi5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciBrZXlGb3IgPSBTeW1ib2wua2V5Rm9yO1xudmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbCB8fCBmdW5jdGlvbiBpc1JlZ2lzdGVyZWRTeW1ib2wodmFsdWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4ga2V5Rm9yKHRoaXNTeW1ib2xWYWx1ZSh2YWx1ZSkpICE9PSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUmVnaXN0ZXJlZFN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZCcpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzUmVnaXN0ZXJlZFN5bWJvbDogaXNSZWdpc3RlcmVkU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciAkaXNXZWxsS25vd25TeW1ib2wgPSBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2w7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldEJ1aWx0SW4oJ09iamVjdCcsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyk7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG5mb3IgKHZhciBpID0gMCwgc3ltYm9sS2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKSwgc3ltYm9sS2V5c0xlbmd0aCA9IHN5bWJvbEtleXMubGVuZ3RoOyBpIDwgc3ltYm9sS2V5c0xlbmd0aDsgaSsrKSB7XG4gIC8vIHNvbWUgb2xkIGVuZ2luZXMgdGhyb3dzIG9uIGFjY2VzcyB0byBzb21lIGtleXMgbGlrZSBgYXJndW1lbnRzYCBvciBgY2FsbGVyYFxuICB0cnkge1xuICAgIHZhciBzeW1ib2xLZXkgPSBzeW1ib2xLZXlzW2ldO1xuICAgIGlmIChpc1N5bWJvbChTeW1ib2xbc3ltYm9sS2V5XSkpIHdlbGxLbm93blN5bWJvbChzeW1ib2xLZXkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNXZWxsS25vd25TeW1ib2wodmFsdWUpIHtcbiAgaWYgKCRpc1dlbGxLbm93blN5bWJvbCAmJiAkaXNXZWxsS25vd25TeW1ib2wodmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICB2YXIgc3ltYm9sID0gdGhpc1N5bWJvbFZhbHVlKHZhbHVlKTtcbiAgICBmb3IgKHZhciBqID0gMCwga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoOyBqIDwga2V5c0xlbmd0aDsgaisrKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxIC0tIHBvbHlmaWxsZWQgc3ltYm9scyBjYXNlXG4gICAgICBpZiAoV2VsbEtub3duU3ltYm9sc1N0b3JlW2tleXNbal1dID09IHN5bWJvbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duU3ltYm9sOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGVyYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaGVyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5vYnNlcnZhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdvYnNlcnZhYmxlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkYCBtZXRob2Rcbi8vIG9ic29sZXRlIHZlcnNpb24gb2YgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1JlZ2lzdGVyZWRTeW1ib2wnIH0sIHtcbiAgaXNSZWdpc3RlcmVkOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duJyk7XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25gIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1dlbGxLbm93blN5bWJvbCcsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWV0YWRhdGFLZXlgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGFLZXknKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5wYXR0ZXJuTWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3BhdHRlcm5NYXRjaCcpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2VBbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQtc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZScpO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLWtleScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHBvaW50LCBmYWxzZSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZignaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sL2l0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbC9pdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sL2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX1N5bWJvbCRpdGVyYXRvciBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBfU3ltYm9sJGl0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBfU3ltYm9sICYmIG8gIT09IF9TeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufSIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ3RvUHJpbWl0aXZlJyk7XG4iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBfU3ltYm9sJHRvUHJpbWl0aXZlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL3RvLXByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W19TeW1ib2wkdG9QcmltaXRpdmVdO1xuICBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKF90eXBlb2YocmVzKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlcztcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7XG59IiwgImltcG9ydCBfT2JqZWN0JGRlZmluZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwgImltcG9ydCBfT2JqZWN0JGRlZmluZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgJEZ1bmN0aW9uID0gRnVuY3Rpb247XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoQywgYXJnc0xlbmd0aCwgYXJncykge1xuICBpZiAoIWhhc093bihmYWN0b3JpZXMsIGFyZ3NMZW5ndGgpKSB7XG4gICAgdmFyIGxpc3QgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIGxpc3RbaV0gPSAnYVsnICsgaSArICddJztcbiAgICBmYWN0b3JpZXNbYXJnc0xlbmd0aF0gPSAkRnVuY3Rpb24oJ0MsYScsICdyZXR1cm4gbmV3IEMoJyArIGpvaW4obGlzdCwgJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1thcmdzTGVuZ3RoXShDLCBhcmdzKTtcbn07XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gZGV0ZWN0aW9uXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gJEZ1bmN0aW9uLmJpbmQgOiBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBGID0gYUNhbGxhYmxlKHRoaXMpO1xuICB2YXIgUHJvdG90eXBlID0gRi5wcm90b3R5cGU7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kRnVuY3Rpb24gPSBmdW5jdGlvbiBib3VuZCgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBjb25jYXQocGFydEFyZ3MsIGFycmF5U2xpY2UoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZEZ1bmN0aW9uID8gY29uc3RydWN0KEYsIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IEYuYXBwbHkodGhhdCwgYXJncyk7XG4gIH07XG4gIGlmIChpc09iamVjdChQcm90b3R5cGUpKSBib3VuZEZ1bmN0aW9uLnByb3RvdHlwZSA9IFByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kRnVuY3Rpb247XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQnKTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBkZXRlY3Rpb25cbiQoeyB0YXJnZXQ6ICdGdW5jdGlvbicsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZ1bmN0aW9uLmJpbmQgIT09IGJpbmQgfSwge1xuICBiaW5kOiBiaW5kXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUiwgTUVUSE9EKSB7XG4gIHZhciBOYW1lc3BhY2UgPSBwYXRoW0NPTlNUUlVDVE9SICsgJ1Byb3RvdHlwZSddO1xuICB2YXIgcHVyZU1ldGhvZCA9IE5hbWVzcGFjZSAmJiBOYW1lc3BhY2VbTUVUSE9EXTtcbiAgaWYgKHB1cmVNZXRob2QpIHJldHVybiBwdXJlTWV0aG9kO1xuICB2YXIgTmF0aXZlQ29uc3RydWN0b3IgPSBnbG9iYWxbQ09OU1RSVUNUT1JdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gTmF0aXZlUHJvdG90eXBlICYmIE5hdGl2ZVByb3RvdHlwZVtNRVRIT0RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmZ1bmN0aW9uLmJpbmQnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnRnVuY3Rpb24nLCAnYmluZCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9mdW5jdGlvbi92aXJ0dWFsL2JpbmQnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuYmluZDtcbiAgcmV0dXJuIGl0ID09PSBGdW5jdGlvblByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihGdW5jdGlvblByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gRnVuY3Rpb25Qcm90b3R5cGUuYmluZCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgcmVkdWNlLCByZWR1Y2VSaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX1JJR0hUKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYXJndW1lbnRzTGVuZ3RoLCBtZW1vKSB7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDtJU19SSUdIVCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4gIGxlZnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuICByaWdodDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgYXJndW1lbnQpIHtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzc29mKGdsb2JhbC5wcm9jZXNzKSA9PT0gJ3Byb2Nlc3MnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktcmVkdWNlJykubGVmdDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBDSFJPTUVfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxuLy8gQ2hyb21lIDgwLTgyIGhhcyBhIGNyaXRpY2FsIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA0OTk4MlxudmFyIENIUk9NRV9CVUcgPSAhSVNfTk9ERSAmJiBDSFJPTUVfVkVSU0lPTiA+IDc5ICYmIENIUk9NRV9WRVJTSU9OIDwgODM7XG52YXIgRk9SQ0VEID0gQ0hST01FX0JVRyB8fCAhYXJyYXlNZXRob2RJc1N0cmljdCgncmVkdWNlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGxlbmd0aCwgbGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3JlZHVjZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JlZHVjZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZWR1Y2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJlZHVjZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maWx0ZXInKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnZmlsdGVyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmlsdGVyJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZpbHRlcjtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmlsdGVyKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5tYXA7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lm1hcCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdtYXAnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5tYXApID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xuXG4vLyBgRmxhdHRlbkludG9BcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1GbGF0dGVuSW50b0FycmF5XG52YXIgZmxhdHRlbkludG9BcnJheSA9IGZ1bmN0aW9uICh0YXJnZXQsIG9yaWdpbmFsLCBzb3VyY2UsIHNvdXJjZUxlbiwgc3RhcnQsIGRlcHRoLCBtYXBwZXIsIHRoaXNBcmcpIHtcbiAgdmFyIHRhcmdldEluZGV4ID0gc3RhcnQ7XG4gIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gIHZhciBtYXBGbiA9IG1hcHBlciA/IGJpbmQobWFwcGVyLCB0aGlzQXJnKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgZWxlbWVudExlbjtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgaWYgKGRlcHRoID4gMCAmJiBpc0FycmF5KGVsZW1lbnQpKSB7XG4gICAgICAgIGVsZW1lbnRMZW4gPSBsZW5ndGhPZkFycmF5TGlrZShlbGVtZW50KTtcbiAgICAgICAgdGFyZ2V0SW5kZXggPSBmbGF0dGVuSW50b0FycmF5KHRhcmdldCwgb3JpZ2luYWwsIGVsZW1lbnQsIGVsZW1lbnRMZW4sIHRhcmdldEluZGV4LCBkZXB0aCAtIDEpIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcih0YXJnZXRJbmRleCArIDEpO1xuICAgICAgICB0YXJnZXRbdGFyZ2V0SW5kZXhdID0gZWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgdGFyZ2V0SW5kZXgrKztcbiAgICB9XG4gICAgc291cmNlSW5kZXgrKztcbiAgfVxuICByZXR1cm4gdGFyZ2V0SW5kZXg7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmxhdE1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mbGF0bWFwXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGZsYXRNYXA6IGZ1bmN0aW9uIGZsYXRNYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgQTtcbiAgICBhQ2FsbGFibGUoY2FsbGJhY2tmbik7XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBBLmxlbmd0aCA9IGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCAxLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmxhdC1tYXAnKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkudW5zY29wYWJsZXMuZmxhdC1tYXAnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnZmxhdE1hcCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZsYXQtbWFwJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZsYXRNYXA7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZsYXRNYXApID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJpbXBvcnQgeyBEYXRhSW50ZXJmYWNlLCBFdmVudENhbGxiYWNrcywgUGFydEl0ZW0gfSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuaW1wb3J0IHsgRGF0YVNldCB9IGZyb20gXCIuL2RhdGEtc2V0XCI7XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjb250cm9sIHRoZSBwaXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFQaXBlIHtcbiAgLyoqXG4gICAqIFRha2UgYWxsIGl0ZW1zIGZyb20gdGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcsIHRyYW5zZm9ybSB0aGVtIGFzXG4gICAqIGNvbmZpZ3VyZWQgYW5kIHVwZGF0ZSB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKi9cbiAgYWxsKCk6IHRoaXM7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9ic2VydmluZyB0aGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldywgdHJhbnNmb3JtaW5nIHRoZSBpdGVtc1xuICAgKiBhbmQgdXBkYXRpbmcgdGhlIHRhcmdldCBkYXRhIHNldC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUgc291cmNlIGRhdGEgc2V0IHdpbGwgYmUgaWdub3JlZC4gSWYgeW91IGZvclxuICAgKiBleGFtcGxlIHdhbnQgdG8gcHJvY2VzcyBhbGwgdGhlIGl0ZW1zIHRoYXQgYXJlIGFscmVhZHkgdGhlcmUgdXNlOlxuICAgKiBgcGlwZS5hbGwoKS5zdGFydCgpYC5cbiAgICovXG4gIHN0YXJ0KCk6IHRoaXM7XG5cbiAgLyoqXG4gICAqIFN0b3Agb2JzZXJ2aW5nIHRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LCB0cmFuc2Zvcm1pbmcgdGhlIGl0ZW1zXG4gICAqIGFuZCB1cGRhdGluZyB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKi9cbiAgc3RvcCgpOiB0aGlzO1xufVxuXG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwaXBlLlxuICovXG5leHBvcnQgdHlwZSBEYXRhUGlwZUZhY3RvcnkgPSBJbnN0YW5jZVR5cGU8dHlwZW9mIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24+O1xuXG4vKipcbiAqIENyZWF0ZSBuZXcgZGF0YSBwaXBlLlxuICpcbiAqIEBwYXJhbSBmcm9tIC0gVGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcuXG4gKiBAcmVtYXJrc1xuICogRXhhbXBsZSB1c2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGludGVyZmFjZSBBcHBJdGVtIHtcbiAqICAgd2hvYW1pOiBzdHJpbmc7XG4gKiAgIGFwcERhdGE6IHVua25vd247XG4gKiAgIHZpc0RhdGE6IFZpc0l0ZW07XG4gKiB9XG4gKiBpbnRlcmZhY2UgVmlzSXRlbSB7XG4gKiAgIGlkOiBudW1iZXI7XG4gKiAgIGxhYmVsOiBzdHJpbmc7XG4gKiAgIGNvbG9yOiBzdHJpbmc7XG4gKiAgIHg6IG51bWJlcjtcbiAqICAgeTogbnVtYmVyO1xuICogfVxuICpcbiAqIGNvbnN0IGRzMSA9IG5ldyBEYXRhU2V0PEFwcEl0ZW0sIFwid2hvYW1pXCI+KFtdLCB7IGZpZWxkSWQ6IFwid2hvYW1pXCIgfSk7XG4gKiBjb25zdCBkczIgPSBuZXcgRGF0YVNldDxWaXNJdGVtLCBcImlkXCI+KCk7XG4gKlxuICogY29uc3QgcGlwZSA9IGNyZWF0ZU5ld0RhdGFQaXBlRnJvbShkczEpXG4gKiAgIC5maWx0ZXIoKGl0ZW0pOiBib29sZWFuID0+IGl0ZW0uZW5hYmxlZCA9PT0gdHJ1ZSlcbiAqICAgLm1hcDxWaXNJdGVtLCBcImlkXCI+KChpdGVtKTogVmlzSXRlbSA9PiBpdGVtLnZpc0RhdGEpXG4gKiAgIC50byhkczIpO1xuICpcbiAqIHBpcGUuc3RhcnQoKTtcbiAqIGBgYFxuICogQHJldHVybnMgQSBmYWN0b3J5IHdob3NlIG1ldGhvZHMgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBwaXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTmV3RGF0YVBpcGVGcm9tPFxuICBTSSBleHRlbmRzIFBhcnRJdGVtPFNQPixcbiAgU1AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4oZnJvbTogRGF0YUludGVyZmFjZTxTSSwgU1A+KTogRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxTSSwgU1A+IHtcbiAgcmV0dXJuIG5ldyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uKGZyb20pO1xufVxuXG50eXBlIFRyYW5zZm9ybWVyPFQ+ID0gKGlucHV0OiBUW10pID0+IFRbXTtcblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGlwZS4gVGhpcyBzaG91bGQgYmUgYWNjZXNzaWJsZSBvbmx5IHRocm91Z2hcbiAqIGBjcmVhdGVOZXdEYXRhUGlwZUZyb21gIGZyb20gdGhlIG91dHNpZGUuXG4gKlxuICogQHR5cGVQYXJhbSBTSSAtIFNvdXJjZSBpdGVtIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFNQIC0gU291cmNlIGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqL1xuY2xhc3MgU2ltcGxlRGF0YVBpcGU8XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyxcbiAgVEkgZXh0ZW5kcyBQYXJ0SXRlbTxUUD4sXG4gIFRQIGV4dGVuZHMgc3RyaW5nXG4+IGltcGxlbWVudHMgRGF0YVBpcGVcbntcbiAgLyoqXG4gICAqIEJvdW5kIGxpc3RlbmVycyBmb3IgdXNlIHdpdGggYERhdGFJbnRlcmZhY2VbJ29uJyB8ICdvZmYnXWAuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD4gPSB7XG4gICAgYWRkOiB0aGlzLl9hZGQuYmluZCh0aGlzKSxcbiAgICByZW1vdmU6IHRoaXMuX3JlbW92ZS5iaW5kKHRoaXMpLFxuICAgIHVwZGF0ZTogdGhpcy5fdXBkYXRlLmJpbmQodGhpcyksXG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBkYXRhIHBpcGUuXG4gICAqXG4gICAqIEBwYXJhbSBfc291cmNlIC0gVGhlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyB0aGF0IHdpbGwgYmUgb2JzZXJ2ZWQuXG4gICAqIEBwYXJhbSBfdHJhbnNmb3JtZXJzIC0gQW4gYXJyYXkgb2YgdHJhbnNmb3JtaW5nIGZ1bmN0aW9ucyB0byBiZSB1c2VkIHRvXG4gICAqIGZpbHRlciBvciB0cmFuc2Zvcm0gdGhlIGl0ZW1zIGluIHRoZSBwaXBlLlxuICAgKiBAcGFyYW0gX3RhcmdldCAtIFRoZSBkYXRhIHNldCBvciBkYXRhIHZpZXcgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NvdXJjZTogRGF0YUludGVyZmFjZTxTSSwgU1A+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zZm9ybWVyczogcmVhZG9ubHkgVHJhbnNmb3JtZXI8dW5rbm93bj5bXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YXJnZXQ6IERhdGFTZXQ8VEksIFRQPlxuICApIHt9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBhbGwoKTogdGhpcyB7XG4gICAgdGhpcy5fdGFyZ2V0LnVwZGF0ZSh0aGlzLl90cmFuc2Zvcm1JdGVtcyh0aGlzLl9zb3VyY2UuZ2V0KCkpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RhcnQoKTogdGhpcyB7XG4gICAgdGhpcy5fc291cmNlLm9uKFwiYWRkXCIsIHRoaXMuX2xpc3RlbmVycy5hZGQpO1xuICAgIHRoaXMuX3NvdXJjZS5vbihcInJlbW92ZVwiLCB0aGlzLl9saXN0ZW5lcnMucmVtb3ZlKTtcbiAgICB0aGlzLl9zb3VyY2Uub24oXCJ1cGRhdGVcIiwgdGhpcy5fbGlzdGVuZXJzLnVwZGF0ZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RvcCgpOiB0aGlzIHtcbiAgICB0aGlzLl9zb3VyY2Uub2ZmKFwiYWRkXCIsIHRoaXMuX2xpc3RlbmVycy5hZGQpO1xuICAgIHRoaXMuX3NvdXJjZS5vZmYoXCJyZW1vdmVcIiwgdGhpcy5fbGlzdGVuZXJzLnJlbW92ZSk7XG4gICAgdGhpcy5fc291cmNlLm9mZihcInVwZGF0ZVwiLCB0aGlzLl9saXN0ZW5lcnMudXBkYXRlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRoZSB0cmFuc2Zvcm1lcnMgdG8gdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbXMgLSBUaGUgaXRlbXMgdG8gYmUgdHJhbnNmb3JtZWQuXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2Zvcm1lZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX3RyYW5zZm9ybUl0ZW1zKGl0ZW1zOiB1bmtub3duW10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybWVycy5yZWR1Y2UoKGl0ZW1zLCB0cmFuc2Zvcm0pOiB1bmtub3duW10gPT4ge1xuICAgICAgcmV0dXJuIHRyYW5zZm9ybShpdGVtcyk7XG4gICAgfSwgaXRlbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiBhZGQgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgaWRzIG9mIHRoZSBhZGRlZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX2FkZChcbiAgICBfbmFtZTogUGFyYW1ldGVyczxFdmVudENhbGxiYWNrczxTSSwgU1A+W1wiYWRkXCJdPlswXSxcbiAgICBwYXlsb2FkOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJhZGRcIl0+WzFdXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXlsb2FkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90YXJnZXQuYWRkKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQocGF5bG9hZC5pdGVtcykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYW4gdXBkYXRlIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gX25hbWUgLSBJZ25vcmVkLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIGlkcyBvZiB0aGUgdXBkYXRlZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZShcbiAgICBfbmFtZTogUGFyYW1ldGVyczxFdmVudENhbGxiYWNrczxTSSwgU1A+W1widXBkYXRlXCJdPlswXSxcbiAgICBwYXlsb2FkOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJ1cGRhdGVcIl0+WzFdXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXlsb2FkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90YXJnZXQudXBkYXRlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQocGF5bG9hZC5pdGVtcykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSByZW1vdmUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgZGF0YSBvZiB0aGUgcmVtb3ZlZCBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX3JlbW92ZShcbiAgICBfbmFtZTogUGFyYW1ldGVyczxFdmVudENhbGxiYWNrczxTSSwgU1A+W1wicmVtb3ZlXCJdPlswXSxcbiAgICBwYXlsb2FkOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJyZW1vdmVcIl0+WzFdXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXlsb2FkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90YXJnZXQucmVtb3ZlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHBheWxvYWQub2xkRGF0YSkpO1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBpcGUgZmFjdG9yeS4gVGhpcyBzaG91bGQgYmUgYWNjZXNzaWJsZVxuICogb25seSB0aHJvdWdoIGBjcmVhdGVOZXdEYXRhUGlwZUZyb21gIGZyb20gdGhlIG91dHNpZGUuXG4gKlxuICogQHR5cGVQYXJhbSBUSSAtIFRhcmdldCBpdGVtIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gKi9cbmNsYXNzIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPiB7XG4gIC8qKlxuICAgKiBBcnJheSB0cmFuc2Zvcm1lcnMgdXNlZCB0byB0cmFuc2Zvcm0gaXRlbXMgd2l0aGluIHRoZSBwaXBlLiBUaGlzIGlzIHR5cGVkXG4gICAqIGFzIGFueSBmb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zZm9ybWVyczogVHJhbnNmb3JtZXI8YW55PltdID0gW107XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBkYXRhIHBpcGUgZmFjdG9yeS4gVGhpcyBpcyBhbiBpbnRlcm5hbCBjb25zdHJ1Y3RvciB0aGF0XG4gICAqIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIHRoaXMgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyBmb3IgdGhpcyBwaXBlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3NvdXJjZTogRGF0YUludGVyZmFjZTxTSSwgU1A+KSB7fVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIGZpbHRlcmluZyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiBnaXZlbiBpdGVtXG4gICAqIHNob3VsZCBiZSBwaXBlZCBhbmQgZmFsc2UgaWYgbm90LlxuICAgKiBAcmV0dXJucyBUaGlzIGZhY3RvcnkgZm9yIGZ1cnRoZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBmaWx0ZXIoXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gYm9vbGVhblxuICApOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFNJLCBTUD4ge1xuICAgIHRoaXMuX3RyYW5zZm9ybWVycy5wdXNoKChpbnB1dCk6IHVua25vd25bXSA9PiBpbnB1dC5maWx0ZXIoY2FsbGJhY2spKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgZWFjaCBzb3VyY2UgaXRlbSB0byBhIG5ldyB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIG1hcHBpbmcgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHNvdXJjZSBpdGVtIGFuZCByZXR1cm5zXG4gICAqIGNvcnJlc3BvbmRpbmcgbWFwcGVkIGl0ZW0uXG4gICAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICAgKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIG1hcDxUSSBleHRlbmRzIFBhcnRJdGVtPFRQPiwgVFAgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCI+KFxuICAgIGNhbGxiYWNrOiAoaXRlbTogU0kpID0+IFRJXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0Lm1hcChjYWxsYmFjaykpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxUSSwgVFA+O1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBlYWNoIHNvdXJjZSBpdGVtIHRvIHplcm8gb3IgbW9yZSBpdGVtcyBvZiBhIG5ldyB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIG1hcHBpbmcgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHNvdXJjZSBpdGVtIGFuZCByZXR1cm5zXG4gICAqIGFuIGFycmF5IG9mIGNvcnJlc3BvbmRpbmcgbWFwcGVkIGl0ZW1zLlxuICAgKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAgICogQHR5cGVQYXJhbSBUUCAtIFRhcmdldCBpdGVtIHR5cGUncyBpZCBwcm9wZXJ0eSBuYW1lLlxuICAgKiBAcmV0dXJucyBUaGlzIGZhY3RvcnkgZm9yIGZ1cnRoZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBmbGF0TWFwPFRJIGV4dGVuZHMgUGFydEl0ZW08VFA+LCBUUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIj4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gVElbXVxuICApOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD4ge1xuICAgIHRoaXMuX3RyYW5zZm9ybWVycy5wdXNoKChpbnB1dCk6IHVua25vd25bXSA9PiBpbnB1dC5mbGF0TWFwKGNhbGxiYWNrKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD47XG4gIH1cblxuICAvKipcbiAgICogQ29ubmVjdCB0aGlzIHBpcGUgdG8gZ2l2ZW4gZGF0YSBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgZGF0YSBzZXQgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGl0ZW1zIGZyb20gdGhpcyBwaXBlLlxuICAgKiBAcmV0dXJucyBUaGUgcGlwZSBjb25uZWN0ZWQgYmV0d2VlbiBnaXZlbiBkYXRhIHNldHMgYW5kIHBlcmZvcm1pbmdcbiAgICogY29uZmlndXJlZCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgcHJvY2Vzc2VkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIHRvKHRhcmdldDogRGF0YVNldDxTSSwgU1A+KTogRGF0YVBpcGUge1xuICAgIHJldHVybiBuZXcgU2ltcGxlRGF0YVBpcGUodGhpcy5fc291cmNlLCB0aGlzLl90cmFuc2Zvcm1lcnMsIHRhcmdldCk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGNhbGwoaW5uZXJSZXN1bHQsIGl0ZXJhdG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbm5lckVycm9yID0gdHJ1ZTtcbiAgICBpbm5lclJlc3VsdCA9IGVycm9yO1xuICB9XG4gIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgaWYgKGlubmVyRXJyb3IpIHRocm93IGlubmVyUmVzdWx0O1xuICBhbk9iamVjdChpbm5lclJlc3VsdCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgRU5UUklFUykge1xuICB0cnkge1xuICAgIHJldHVybiBFTlRSSUVTID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXQpKSByZXR1cm4gZ2V0TWV0aG9kKGl0LCBJVEVSQVRPUilcbiAgICB8fCBnZXRNZXRob2QoaXQsICdAQGl0ZXJhdG9yJylcbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGNhbGwoaXRlcmF0b3JNZXRob2QsIGFyZ3VtZW50KSk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgdmFyIElTX0NPTlNUUlVDVE9SID0gaXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0LCB2YWx1ZTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICEodGhpcyA9PT0gJEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6ICRBcnJheShsZW5ndGgpO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICB0cnkge1xuICAgIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIHdvcmthcm91bmQgb2Ygb2xkIFdlYktpdCArIGBldmFsYCBidWdcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG5cbnZhciBJTkNPUlJFQ1RfSVRFUkFUSU9OID0gIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYWJsZSk7XG59KTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBmcm9tOiBmcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mcm9tJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5mcm9tO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9mcm9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvZnJvbVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9mdWxsL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvck1ldGhvZDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG4vLyBgQXJyYXkuaXNBcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmlzYXJyYXlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUgfSwge1xuICBpc0FycmF5OiBpc0FycmF5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5pc0FycmF5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggYW5kIFNhZmFyaSA8PSAxNS40LCBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5wdXNoJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3B1c2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9wdXNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnB1c2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnB1c2gpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvaW5zdGFuY2UvcHVzaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgbmF0aXZlU2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzbGljZScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNsaWNlXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gICAgLy8gaW5saW5lIGBBcnJheVNwZWNpZXNDcmVhdGVgIGZvciB1c2FnZSBuYXRpdmUgYEFycmF5I3NsaWNlYCB3aGVyZSBpdCdzIHBvc3NpYmxlXG4gICAgdmFyIENvbnN0cnVjdG9yLCByZXN1bHQsIG47XG4gICAgaWYgKGlzQXJyYXkoTykpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gTy5jb25zdHJ1Y3RvcjtcbiAgICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgICBpZiAoaXNDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvcikgJiYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVTbGljZShPLCBrLCBmaW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQgPSBuZXcgKENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNsaWNlJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NsaWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc2xpY2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc2xpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNsaWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9zbGljZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9hcnJheS9mcm9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufSIsICJpbXBvcnQgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzXCI7XG5pbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzXCI7XG5pbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIHZhciBfY29udGV4dDtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBfc2xpY2VJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pKS5jYWxsKF9jb250ZXh0LCA4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBfQXJyYXkkZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59IiwgImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsICJpbXBvcnQgX0FycmF5JGlzQXJyYXkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9pcy1hcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoX0FycmF5JGlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfZ2V0SXRlcmF0b3JNZXRob2QgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCI7XG5pbXBvcnQgX3B1c2hJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcHVzaC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgX1N5bWJvbCAmJiBfZ2V0SXRlcmF0b3JNZXRob2QocikgfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChfcHVzaEluc3RhbmNlUHJvcGVydHkoYSkuY2FsbChhLCBlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsICJpbXBvcnQgYXJyYXlXaXRob3V0SG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59IiwgImltcG9ydCBfQXJyYXkkaXNBcnJheSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2lzLWFycmF5LmpzXCI7XG5pbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChfQXJyYXkkaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufSIsICJpbXBvcnQgX1N5bWJvbCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiO1xuaW1wb3J0IF9nZXRJdGVyYXRvck1ldGhvZCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanNcIjtcbmltcG9ydCBfQXJyYXkkZnJvbSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2Zyb20uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIF9TeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgX2dldEl0ZXJhdG9yTWV0aG9kKGl0ZXIpICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIF9BcnJheSRmcm9tKGl0ZXIpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnY29uY2F0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvY29uY2F0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmNvbmNhdDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuY29uY2F0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zbGljZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xuXG4vLyBgUmVmbGVjdC5vd25LZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5vd25rZXlzXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBvd25LZXlzOiBvd25LZXlzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3Qub3duLWtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlJlZmxlY3Qub3duS2V5cztcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5XCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICFTVFJJQ1RfTUVUSE9EID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbn0gOiBbXS5mb3JFYWNoO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9PSBmb3JFYWNoIH0sIHtcbiAgZm9yRWFjaDogZm9yRWFjaFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmb3JFYWNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZvckVhY2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciBuYXRpdmVSZXZlcnNlID0gdW5jdXJyeVRoaXMoW10ucmV2ZXJzZSk7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJldmVyc2Vcbi8vIGZpeCBmb3IgU2FmYXJpIDEyLjAgYnVnXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4Nzk0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTdHJpbmcodGVzdCkgPT09IFN0cmluZyh0ZXN0LnJldmVyc2UoKSkgfSwge1xuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnbiAtLSBkaXJ0eSBoYWNrXG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgcmV0dXJuIG5hdGl2ZVJldmVyc2UodGhpcyk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdyZXZlcnNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZXZlcnNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZXZlcnNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JldmVyc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgUCkge1xuICBpZiAoIWRlbGV0ZSBPW1BdKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAnICsgdHJ5VG9TdHJpbmcoUCkgKyAnIG9mICcgKyB0cnlUb1N0cmluZyhPKSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzcGxpY2UnKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNwbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zcGxpY2Vcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNwbGljZTogZnVuY3Rpb24gc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCAvKiAsIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFjdHVhbFN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpbnNlcnRDb3VudCwgYWN0dWFsRGVsZXRlQ291bnQsIEEsIGssIGZyb20sIHRvO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgIGluc2VydENvdW50ID0gYWN0dWFsRGVsZXRlQ291bnQgPSAwO1xuICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgICBpbnNlcnRDb3VudCA9IDA7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IGxlbiAtIGFjdHVhbFN0YXJ0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnNlcnRDb3VudCA9IGFyZ3VtZW50c0xlbmd0aCAtIDI7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IG1pbihtYXgodG9JbnRlZ2VyT3JJbmZpbml0eShkZWxldGVDb3VudCksIDApLCBsZW4gLSBhY3R1YWxTdGFydCk7XG4gICAgfVxuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBpbnNlcnRDb3VudCAtIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBmb3IgKGsgPSAwOyBrIDwgYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgZnJvbSA9IGFjdHVhbFN0YXJ0ICsgaztcbiAgICAgIGlmIChmcm9tIGluIE8pIGNyZWF0ZVByb3BlcnR5KEEsIGssIE9bZnJvbV0pO1xuICAgIH1cbiAgICBBLmxlbmd0aCA9IGFjdHVhbERlbGV0ZUNvdW50O1xuICAgIGlmIChpbnNlcnRDb3VudCA8IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBhY3R1YWxTdGFydDsgayA8IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50OyBrKyspIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudDtcbiAgICAgICAgdG8gPSBrICsgaW5zZXJ0Q291bnQ7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgICAgZm9yIChrID0gbGVuOyBrID4gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudDsgay0tKSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgayAtIDEpO1xuICAgIH0gZWxzZSBpZiAoaW5zZXJ0Q291bnQgPiBhY3R1YWxEZWxldGVDb3VudCkge1xuICAgICAgZm9yIChrID0gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsgPiBhY3R1YWxTdGFydDsgay0tKSB7XG4gICAgICAgIGZyb20gPSBrICsgYWN0dWFsRGVsZXRlQ291bnQgLSAxO1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudCAtIDE7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGsgPSAwOyBrIDwgaW5zZXJ0Q291bnQ7IGsrKykge1xuICAgICAgT1trICsgYWN0dWFsU3RhcnRdID0gYXJndW1lbnRzW2sgKyAyXTtcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudCk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NwbGljZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NwbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zcGxpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNwbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBzaG91bGQgaGF2ZSBjb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgKEVkZ2UgYnVnKVxuICBpZiAoREVTQ1JJUFRPUlMgJiYgJGFzc2lnbih7IGI6IDEgfSwgJGFzc2lnbihkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsICdiJywge1xuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSksIHsgYjogMiB9KSkuYiAhPT0gMSkgcmV0dXJuIHRydWU7XG4gIC8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3ltYm9sIC0tIHNhZmVcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnYXNzaWduIGRldGVjdGlvbicpO1xuICB2YXIgYWxwaGFiZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW3N5bWJvbF0gPSA3O1xuICBhbHBoYWJldC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoY2hyKSB7IEJbY2hyXSA9IGNocjsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtzeW1ib2xdICE9PSA3IHx8IG9iamVjdEtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9PSBhbHBoYWJldDtcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG4gIHdoaWxlIChhcmd1bWVudHNMZW5ndGggPiBpbmRleCkge1xuICAgIHZhciBTID0gSW5kZXhlZE9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KG9iamVjdEtleXMoUyksIGdldE93blByb3BlcnR5U3ltYm9scyhTKSkgOiBvYmplY3RLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlLCBTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24nKTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGFyaXR5OiAyLCBmb3JjZWQ6IE9iamVjdC5hc3NpZ24gIT09IGFzc2lnbiB9LCB7XG4gIGFzc2lnbjogYXNzaWduXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5hc3NpZ247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldFByb3RvdHlwZU9mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUywgc2hhbTogIUNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiB9LCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiBuYXRpdmVHZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgY3JlYXRlOiBjcmVhdGVcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlKFAsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoUCwgRCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2NyZWF0ZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1qc29uIC0tIHNhZmVcbmlmICghcGF0aC5KU09OKSBwYXRoLkpTT04gPSB7IHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnkgfTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgcmV0dXJuIGFwcGx5KHBhdGguSlNPTi5zdHJpbmdpZnksIG51bGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9qc29uL3N0cmluZ2lmeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQnVuIC0tIERlbm8gY2FzZSAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgQnVuID09ICdmdW5jdGlvbicgJiYgQnVuICYmIHR5cGVvZiBCdW4udmVyc2lvbiA9PSAnc3RyaW5nJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFzc2VkLCByZXF1aXJlZCkge1xuICBpZiAocGFzc2VkIDwgcmVxdWlyZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuICByZXR1cm4gcGFzc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIEVOR0lORV9JU19CVU4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bicpO1xudmFyIFVTRVJfQUdFTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xuXG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG4vLyBkaXJ0eSBJRTktIGFuZCBCdW4gMC4zLjAtIGNoZWNrc1xudmFyIFdSQVAgPSAvTVNJRSAuXFwuLy50ZXN0KFVTRVJfQUdFTlQpIHx8IEVOR0lORV9JU19CVU4gJiYgKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlcnNpb24gPSBnbG9iYWwuQnVuLnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoIDwgMyB8fCB2ZXJzaW9uWzBdID09PSAnMCcgJiYgKHZlcnNpb25bMV0gPCAzIHx8IHZlcnNpb25bMV0gPT09ICczJyAmJiB2ZXJzaW9uWzJdID09PSAnMCcpO1xufSkoKTtcblxuLy8gSUU5LSAvIEJ1biAwLjMuMC0gc2V0VGltZW91dCAvIHNldEludGVydmFsIC8gc2V0SW1tZWRpYXRlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjdGltZXJzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzE2MzNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaGFzVGltZUFyZykge1xuICB2YXIgZmlyc3RQYXJhbUluZGV4ID0gaGFzVGltZUFyZyA/IDIgOiAxO1xuICByZXR1cm4gV1JBUCA/IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpID4gZmlyc3RQYXJhbUluZGV4O1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIHBhcmFtcyA9IGJvdW5kQXJncyA/IGFycmF5U2xpY2UoYXJndW1lbnRzLCBmaXJzdFBhcmFtSW5kZXgpIDogW107XG4gICAgdmFyIGNhbGxiYWNrID0gYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHRoaXMsIHBhcmFtcyk7XG4gICAgfSA6IGZuO1xuICAgIHJldHVybiBoYXNUaW1lQXJnID8gc2NoZWR1bGVyKGNhbGxiYWNrLCB0aW1lb3V0KSA6IHNjaGVkdWxlcihjYWxsYmFjayk7XG4gIH0gOiBzY2hlZHVsZXI7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRJbnRlcnZhbCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldEludGVydmFsLCB0cnVlKTtcblxuLy8gQnVuIC8gSUU5LSBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0SW50ZXJ2YWwgIT09IHNldEludGVydmFsIH0sIHtcbiAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG52YXIgc2V0VGltZW91dCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldFRpbWVvdXQsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldFRpbWVvdXQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0dGltZW91dFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0VGltZW91dCAhPT0gc2V0VGltZW91dCB9LCB7XG4gIHNldFRpbWVvdXQ6IHNldFRpbWVvdXRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnRpbWVycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0VGltZW91dDtcbiIsICJmdW5jdGlvbiBFbWl0dGVyKG9iamVjdCkge1xuXHRpZiAob2JqZWN0KSB7XG5cdFx0cmV0dXJuIG1peGluKG9iamVjdCk7XG5cdH1cblxuXHR0aGlzLl9jYWxsYmFja3MgPSBuZXcgTWFwKCk7XG59XG5cbmZ1bmN0aW9uIG1peGluKG9iamVjdCkge1xuXHRPYmplY3QuYXNzaWduKG9iamVjdCwgRW1pdHRlci5wcm90b3R5cGUpO1xuXHRvYmplY3QuX2NhbGxiYWNrcyA9IG5ldyBNYXAoKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuRW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXZlbnQsIGxpc3RlbmVyKSB7XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpID8/IFtdO1xuXHRjYWxsYmFja3MucHVzaChsaXN0ZW5lcik7XG5cdHRoaXMuX2NhbGxiYWNrcy5zZXQoZXZlbnQsIGNhbGxiYWNrcyk7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0Y29uc3Qgb24gPSAoLi4uYXJndW1lbnRzXykgPT4ge1xuXHRcdHRoaXMub2ZmKGV2ZW50LCBvbik7XG5cdFx0bGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzXyk7XG5cdH07XG5cblx0b24uZm4gPSBsaXN0ZW5lcjtcblx0dGhpcy5vbihldmVudCwgb24pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0aWYgKGV2ZW50ID09PSB1bmRlZmluZWQgJiYgbGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2NhbGxiYWNrcy5jbGVhcigpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aWYgKGxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcblx0XHR0aGlzLl9jYWxsYmFja3MuZGVsZXRlKGV2ZW50KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpO1xuXHRpZiAoY2FsbGJhY2tzKSB7XG5cdFx0Zm9yIChjb25zdCBbaW5kZXgsIGNhbGxiYWNrXSBvZiBjYWxsYmFja3MuZW50cmllcygpKSB7XG5cdFx0XHRpZiAoY2FsbGJhY2sgPT09IGxpc3RlbmVyIHx8IGNhbGxiYWNrLmZuID09PSBsaXN0ZW5lcikge1xuXHRcdFx0XHRjYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGNhbGxiYWNrcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuX2NhbGxiYWNrcy5kZWxldGUoZXZlbnQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9jYWxsYmFja3Muc2V0KGV2ZW50LCBjYWxsYmFja3MpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldmVudCwgLi4uYXJndW1lbnRzXykge1xuXHRjb25zdCBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MuZ2V0KGV2ZW50KTtcblx0aWYgKGNhbGxiYWNrcykge1xuXHRcdC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGNhbGxiYWNrcyBhcnJheSB0byBhdm9pZCBpc3N1ZXMgaWYgaXQncyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uXG5cdFx0Y29uc3QgY2FsbGJhY2tzQ29weSA9IFsuLi5jYWxsYmFja3NdO1xuXG5cdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBjYWxsYmFja3NDb3B5KSB7XG5cdFx0XHRjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCkgPz8gW107XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdGlmIChldmVudCkge1xuXHRcdHJldHVybiB0aGlzLmxpc3RlbmVycyhldmVudCkubGVuZ3RoO1xuXHR9XG5cblx0bGV0IHRvdGFsQ291bnQgPSAwO1xuXHRmb3IgKGNvbnN0IGNhbGxiYWNrcyBvZiB0aGlzLl9jYWxsYmFja3MudmFsdWVzKCkpIHtcblx0XHR0b3RhbENvdW50ICs9IGNhbGxiYWNrcy5sZW5ndGg7XG5cdH1cblxuXHRyZXR1cm4gdG90YWxDb3VudDtcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRyZXR1cm4gdGhpcy5saXN0ZW5lckNvdW50KGV2ZW50KSA+IDA7XG59O1xuXG4vLyBBbGlhc2VzXG5FbWl0dGVyLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub247XG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vZmY7XG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBFbWl0dGVyLnByb3RvdHlwZS5vZmY7XG5cbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IEVtaXR0ZXI7XG59XG4iLCAiLyohIEhhbW1lci5KUyAtIHYyLjAuMTctcmMgLSAyMDE5LTEyLTE2XG4gKiBodHRwOi8vbmF2ZXIuZ2l0aHViLmlvL2VnanNcbiAqXG4gKiBGb3JrZWQgQnkgTmF2ZXIgZWdqc1xuICogQ29weXJpZ2h0IChjKSBoYW1tZXJqc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlICovXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGV4dGVuZCBvYmplY3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgaW4gZGVzdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBvbmVzIGluIHNyYy5cbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBvYmplY3RzX3RvX2Fzc2lnblxuICogQHJldHVybnMge09iamVjdH0gdGFyZ2V0XG4gKi9cbnZhciBhc3NpZ247XG5cbmlmICh0eXBlb2YgT2JqZWN0LmFzc2lnbiAhPT0gJ2Z1bmN0aW9uJykge1xuICBhc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0KSB7XG4gICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IHRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IE9iamVjdCh0YXJnZXQpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdO1xuXG4gICAgICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQgJiYgc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIG5leHRLZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuZXh0S2V5KSkge1xuICAgICAgICAgICAgb3V0cHV0W25leHRLZXldID0gc291cmNlW25leHRLZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG59IGVsc2Uge1xuICBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xufVxuXG52YXIgYXNzaWduJDEgPSBhc3NpZ247XG5cbnZhciBWRU5ET1JfUFJFRklYRVMgPSBbJycsICd3ZWJraXQnLCAnTW96JywgJ01TJywgJ21zJywgJ28nXTtcbnZhciBURVNUX0VMRU1FTlQgPSB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyB7XG4gIHN0eWxlOiB7fVxufSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xudmFyIFRZUEVfRlVOQ1RJT04gPSAnZnVuY3Rpb24nO1xudmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICBhYnMgPSBNYXRoLmFicztcbnZhciBub3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBwcmVmaXhlZCBwcm9wZXJ0eVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7U3RyaW5nfFVuZGVmaW5lZH0gcHJlZml4ZWRcbiAqL1xuXG5mdW5jdGlvbiBwcmVmaXhlZChvYmosIHByb3BlcnR5KSB7XG4gIHZhciBwcmVmaXg7XG4gIHZhciBwcm9wO1xuICB2YXIgY2FtZWxQcm9wID0gcHJvcGVydHlbMF0udG9VcHBlckNhc2UoKSArIHByb3BlcnR5LnNsaWNlKDEpO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBWRU5ET1JfUFJFRklYRVMubGVuZ3RoKSB7XG4gICAgcHJlZml4ID0gVkVORE9SX1BSRUZJWEVTW2ldO1xuICAgIHByb3AgPSBwcmVmaXggPyBwcmVmaXggKyBjYW1lbFByb3AgOiBwcm9wZXJ0eTtcblxuICAgIGlmIChwcm9wIGluIG9iaikge1xuICAgICAgcmV0dXJuIHByb3A7XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tbmV3LWZ1bmMsIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG52YXIgd2luO1xuXG5pZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAvLyB3aW5kb3cgaXMgdW5kZWZpbmVkIGluIG5vZGUuanNcbiAgd2luID0ge307XG59IGVsc2Uge1xuICB3aW4gPSB3aW5kb3c7XG59XG5cbnZhciBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gPSBwcmVmaXhlZChURVNUX0VMRU1FTlQuc3R5bGUsICd0b3VjaEFjdGlvbicpO1xudmFyIE5BVElWRV9UT1VDSF9BQ1RJT04gPSBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gIT09IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uUHJvcHMoKSB7XG4gIGlmICghTkFUSVZFX1RPVUNIX0FDVElPTikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0b3VjaE1hcCA9IHt9O1xuICB2YXIgY3NzU3VwcG9ydHMgPSB3aW4uQ1NTICYmIHdpbi5DU1Muc3VwcG9ydHM7XG4gIFsnYXV0bycsICdtYW5pcHVsYXRpb24nLCAncGFuLXknLCAncGFuLXgnLCAncGFuLXggcGFuLXknLCAnbm9uZSddLmZvckVhY2goZnVuY3Rpb24gKHZhbCkge1xuICAgIC8vIElmIGNzcy5zdXBwb3J0cyBpcyBub3Qgc3VwcG9ydGVkIGJ1dCB0aGVyZSBpcyBuYXRpdmUgdG91Y2gtYWN0aW9uIGFzc3VtZSBpdCBzdXBwb3J0c1xuICAgIC8vIGFsbCB2YWx1ZXMuIFRoaXMgaXMgdGhlIGNhc2UgZm9yIElFIDEwIGFuZCAxMS5cbiAgICByZXR1cm4gdG91Y2hNYXBbdmFsXSA9IGNzc1N1cHBvcnRzID8gd2luLkNTUy5zdXBwb3J0cygndG91Y2gtYWN0aW9uJywgdmFsKSA6IHRydWU7XG4gIH0pO1xuICByZXR1cm4gdG91Y2hNYXA7XG59XG5cbnZhciBUT1VDSF9BQ1RJT05fQ09NUFVURSA9ICdjb21wdXRlJztcbnZhciBUT1VDSF9BQ1RJT05fQVVUTyA9ICdhdXRvJztcbnZhciBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OID0gJ21hbmlwdWxhdGlvbic7IC8vIG5vdCBpbXBsZW1lbnRlZFxuXG52YXIgVE9VQ0hfQUNUSU9OX05PTkUgPSAnbm9uZSc7XG52YXIgVE9VQ0hfQUNUSU9OX1BBTl9YID0gJ3Bhbi14JztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1kgPSAncGFuLXknO1xudmFyIFRPVUNIX0FDVElPTl9NQVAgPSBnZXRUb3VjaEFjdGlvblByb3BzKCk7XG5cbnZhciBNT0JJTEVfUkVHRVggPSAvbW9iaWxlfHRhYmxldHxpcChhZHxob25lfG9kKXxhbmRyb2lkL2k7XG52YXIgU1VQUE9SVF9UT1VDSCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbjtcbnZhciBTVVBQT1JUX1BPSU5URVJfRVZFTlRTID0gcHJlZml4ZWQod2luLCAnUG9pbnRlckV2ZW50JykgIT09IHVuZGVmaW5lZDtcbnZhciBTVVBQT1JUX09OTFlfVE9VQ0ggPSBTVVBQT1JUX1RPVUNIICYmIE1PQklMRV9SRUdFWC50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElOUFVUX1RZUEVfVE9VQ0ggPSAndG91Y2gnO1xudmFyIElOUFVUX1RZUEVfUEVOID0gJ3Blbic7XG52YXIgSU5QVVRfVFlQRV9NT1VTRSA9ICdtb3VzZSc7XG52YXIgSU5QVVRfVFlQRV9LSU5FQ1QgPSAna2luZWN0JztcbnZhciBDT01QVVRFX0lOVEVSVkFMID0gMjU7XG52YXIgSU5QVVRfU1RBUlQgPSAxO1xudmFyIElOUFVUX01PVkUgPSAyO1xudmFyIElOUFVUX0VORCA9IDQ7XG52YXIgSU5QVVRfQ0FOQ0VMID0gODtcbnZhciBESVJFQ1RJT05fTk9ORSA9IDE7XG52YXIgRElSRUNUSU9OX0xFRlQgPSAyO1xudmFyIERJUkVDVElPTl9SSUdIVCA9IDQ7XG52YXIgRElSRUNUSU9OX1VQID0gODtcbnZhciBESVJFQ1RJT05fRE9XTiA9IDE2O1xudmFyIERJUkVDVElPTl9IT1JJWk9OVEFMID0gRElSRUNUSU9OX0xFRlQgfCBESVJFQ1RJT05fUklHSFQ7XG52YXIgRElSRUNUSU9OX1ZFUlRJQ0FMID0gRElSRUNUSU9OX1VQIHwgRElSRUNUSU9OX0RPV047XG52YXIgRElSRUNUSU9OX0FMTCA9IERJUkVDVElPTl9IT1JJWk9OVEFMIHwgRElSRUNUSU9OX1ZFUlRJQ0FMO1xudmFyIFBST1BTX1hZID0gWyd4JywgJ3knXTtcbnZhciBQUk9QU19DTElFTlRfWFkgPSBbJ2NsaWVudFgnLCAnY2xpZW50WSddO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3YWxrIG9iamVjdHMgYW5kIGFycmF5c1xuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICB2YXIgaTtcblxuICBpZiAoIW9iaikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChvYmouZm9yRWFjaCkge1xuICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgfSBlbHNlIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgb2JqLmxlbmd0aCkge1xuICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgICBpKys7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgIG9iai5oYXNPd25Qcm9wZXJ0eShpKSAmJiBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogbGV0IGEgYm9vbGVhbiB2YWx1ZSBhbHNvIGJlIGEgZnVuY3Rpb24gdGhhdCBtdXN0IHJldHVybiBhIGJvb2xlYW5cbiAqIHRoaXMgZmlyc3QgaXRlbSBpbiBhcmdzIHdpbGwgYmUgdXNlZCBhcyB0aGUgY29udGV4dFxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSB2YWxcbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdzXVxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cblxuZnVuY3Rpb24gYm9vbE9yRm4odmFsLCBhcmdzKSB7XG4gIGlmICh0eXBlb2YgdmFsID09PSBUWVBFX0ZVTkNUSU9OKSB7XG4gICAgcmV0dXJuIHZhbC5hcHBseShhcmdzID8gYXJnc1swXSB8fCB1bmRlZmluZWQgOiB1bmRlZmluZWQsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc21hbGwgaW5kZXhPZiB3cmFwcGVyXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gZmluZFxuICogQHJldHVybnMge0Jvb2xlYW59IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGluU3RyKHN0ciwgZmluZCkge1xuICByZXR1cm4gc3RyLmluZGV4T2YoZmluZCkgPiAtMTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogd2hlbiB0aGUgdG91Y2hBY3Rpb25zIGFyZSBjb2xsZWN0ZWQgdGhleSBhcmUgbm90IGEgdmFsaWQgdmFsdWUsIHNvIHdlIG5lZWQgdG8gY2xlYW4gdGhpbmdzIHVwLiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWN0aW9uc1xuICogQHJldHVybnMgeyp9XG4gKi9cblxuZnVuY3Rpb24gY2xlYW5Ub3VjaEFjdGlvbnMoYWN0aW9ucykge1xuICAvLyBub25lXG4gIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTk9ORSkpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gIH1cblxuICB2YXIgaGFzUGFuWCA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWCk7XG4gIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKTsgLy8gaWYgYm90aCBwYW4teCBhbmQgcGFuLXkgYXJlIHNldCAoZGlmZmVyZW50IHJlY29nbml6ZXJzXG4gIC8vIGZvciBkaWZmZXJlbnQgZGlyZWN0aW9ucywgZS5nLiBob3Jpem9udGFsIHBhbiBidXQgdmVydGljYWwgc3dpcGU/KVxuICAvLyB3ZSBuZWVkIG5vbmUgKGFzIG90aGVyd2lzZSB3aXRoIHBhbi14IHBhbi15IGNvbWJpbmVkIG5vbmUgb2YgdGhlc2VcbiAgLy8gcmVjb2duaXplcnMgd2lsbCB3b3JrLCBzaW5jZSB0aGUgYnJvd3NlciB3b3VsZCBoYW5kbGUgYWxsIHBhbm5pbmdcblxuICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgcmV0dXJuIFRPVUNIX0FDVElPTl9OT05FO1xuICB9IC8vIHBhbi14IE9SIHBhbi15XG5cblxuICBpZiAoaGFzUGFuWCB8fCBoYXNQYW5ZKSB7XG4gICAgcmV0dXJuIGhhc1BhblggPyBUT1VDSF9BQ1RJT05fUEFOX1ggOiBUT1VDSF9BQ1RJT05fUEFOX1k7XG4gIH0gLy8gbWFuaXB1bGF0aW9uXG5cblxuICBpZiAoaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTikpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTjtcbiAgfVxuXG4gIHJldHVybiBUT1VDSF9BQ1RJT05fQVVUTztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogVG91Y2ggQWN0aW9uXG4gKiBzZXRzIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eSBvciB1c2VzIHRoZSBqcyBhbHRlcm5hdGl2ZVxuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBUb3VjaEFjdGlvbiA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRvdWNoQWN0aW9uKG1hbmFnZXIsIHZhbHVlKSB7XG4gICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICB0aGlzLnNldCh2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWUgb24gdGhlIGVsZW1lbnQgb3IgZW5hYmxlIHRoZSBwb2x5ZmlsbFxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gVG91Y2hBY3Rpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAvLyBmaW5kIG91dCB0aGUgdG91Y2gtYWN0aW9uIGJ5IHRoZSBldmVudCBoYW5kbGVyc1xuICAgIGlmICh2YWx1ZSA9PT0gVE9VQ0hfQUNUSU9OX0NPTVBVVEUpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5jb21wdXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKE5BVElWRV9UT1VDSF9BQ1RJT04gJiYgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGUgJiYgVE9VQ0hfQUNUSU9OX01BUFt2YWx1ZV0pIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbGVtZW50LnN0eWxlW1BSRUZJWEVEX1RPVUNIX0FDVElPTl0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGlvbnMgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGp1c3QgcmUtc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZVxuICAgKi9cblxuXG4gIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgdGhpcy5zZXQodGhpcy5tYW5hZ2VyLm9wdGlvbnMudG91Y2hBY3Rpb24pO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY29tcHV0ZSB0aGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgcmVjb2duaXplcidzIHNldHRpbmdzXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHZhbHVlXG4gICAqL1xuXG5cbiAgX3Byb3RvLmNvbXB1dGUgPSBmdW5jdGlvbiBjb21wdXRlKCkge1xuICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgZWFjaCh0aGlzLm1hbmFnZXIucmVjb2duaXplcnMsIGZ1bmN0aW9uIChyZWNvZ25pemVyKSB7XG4gICAgICBpZiAoYm9vbE9yRm4ocmVjb2duaXplci5vcHRpb25zLmVuYWJsZSwgW3JlY29nbml6ZXJdKSkge1xuICAgICAgICBhY3Rpb25zID0gYWN0aW9ucy5jb25jYXQocmVjb2duaXplci5nZXRUb3VjaEFjdGlvbigpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xlYW5Ub3VjaEFjdGlvbnMoYWN0aW9ucy5qb2luKCcgJykpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGVhY2ggaW5wdXQgY3ljbGUgYW5kIHByb3ZpZGVzIHRoZSBwcmV2ZW50aW5nIG9mIHRoZSBicm93c2VyIGJlaGF2aW9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by5wcmV2ZW50RGVmYXVsdHMgPSBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdHMoaW5wdXQpIHtcbiAgICB2YXIgc3JjRXZlbnQgPSBpbnB1dC5zcmNFdmVudDtcbiAgICB2YXIgZGlyZWN0aW9uID0gaW5wdXQub2Zmc2V0RGlyZWN0aW9uOyAvLyBpZiB0aGUgdG91Y2ggYWN0aW9uIGRpZCBwcmV2ZW50ZWQgb25jZSB0aGlzIHNlc3Npb25cblxuICAgIGlmICh0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQpIHtcbiAgICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgdmFyIGhhc05vbmUgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTk9ORSkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fUEFOX1ldO1xuICAgIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fUEFOX1hdO1xuXG4gICAgaWYgKGhhc05vbmUpIHtcbiAgICAgIC8vIGRvIG5vdCBwcmV2ZW50IGRlZmF1bHRzIGlmIHRoaXMgaXMgYSB0YXAgZ2VzdHVyZVxuICAgICAgdmFyIGlzVGFwUG9pbnRlciA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gMTtcbiAgICAgIHZhciBpc1RhcE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCAyO1xuICAgICAgdmFyIGlzVGFwVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgMjUwO1xuXG4gICAgICBpZiAoaXNUYXBQb2ludGVyICYmIGlzVGFwTW92ZW1lbnQgJiYgaXNUYXBUb3VjaFRpbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICAgIC8vIGBwYW4teCBwYW4teWAgbWVhbnMgYnJvd3NlciBoYW5kbGVzIGFsbCBzY3JvbGxpbmcvcGFubmluZywgZG8gbm90IHByZXZlbnRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaGFzTm9uZSB8fCBoYXNQYW5ZICYmIGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMIHx8IGhhc1BhblggJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmV2ZW50U3JjKHNyY0V2ZW50KTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYWxsIHByZXZlbnREZWZhdWx0IHRvIHByZXZlbnQgdGhlIGJyb3dzZXIncyBkZWZhdWx0IGJlaGF2aW9yIChzY3JvbGxpbmcgaW4gbW9zdCBjYXNlcylcbiAgICogQHBhcmFtIHtPYmplY3R9IHNyY0V2ZW50XG4gICAqL1xuXG5cbiAgX3Byb3RvLnByZXZlbnRTcmMgPSBmdW5jdGlvbiBwcmV2ZW50U3JjKHNyY0V2ZW50KSB7XG4gICAgdGhpcy5tYW5hZ2VyLnNlc3Npb24ucHJldmVudGVkID0gdHJ1ZTtcbiAgICBzcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuXG4gIHJldHVybiBUb3VjaEFjdGlvbjtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZmluZCBpZiBhIG5vZGUgaXMgaW4gdGhlIGdpdmVuIHBhcmVudFxuICogQG1ldGhvZCBoYXNQYXJlbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybiB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaGFzUGFyZW50KG5vZGUsIHBhcmVudCkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlID09PSBwYXJlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgY2VudGVyIG9mIGFsbCB0aGUgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtPYmplY3R9IGNlbnRlciBjb250YWlucyBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzXG4gKi9cblxuZnVuY3Rpb24gZ2V0Q2VudGVyKHBvaW50ZXJzKSB7XG4gIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDsgLy8gbm8gbmVlZCB0byBsb29wIHdoZW4gb25seSBvbmUgdG91Y2hcblxuICBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcm91bmQocG9pbnRlcnNbMF0uY2xpZW50WCksXG4gICAgICB5OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRZKVxuICAgIH07XG4gIH1cblxuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgcG9pbnRlcnNMZW5ndGgpIHtcbiAgICB4ICs9IHBvaW50ZXJzW2ldLmNsaWVudFg7XG4gICAgeSArPSBwb2ludGVyc1tpXS5jbGllbnRZO1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAvIHBvaW50ZXJzTGVuZ3RoKSxcbiAgICB5OiByb3VuZCh5IC8gcG9pbnRlcnNMZW5ndGgpXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBhIHNpbXBsZSBjbG9uZSBmcm9tIHRoZSBpbnB1dCB1c2VkIGZvciBzdG9yYWdlIG9mIGZpcnN0SW5wdXQgYW5kIGZpcnN0TXVsdGlwbGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICogQHJldHVybnMge09iamVjdH0gY2xvbmVkSW5wdXREYXRhXG4gKi9cblxuZnVuY3Rpb24gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpIHtcbiAgLy8gbWFrZSBhIHNpbXBsZSBjb3B5IG9mIHRoZSBwb2ludGVycyBiZWNhdXNlIHdlIHdpbGwgZ2V0IGEgcmVmZXJlbmNlIGlmIHdlIGRvbid0XG4gIC8vIHdlIG9ubHkgbmVlZCBjbGllbnRYWSBmb3IgdGhlIGNhbGN1bGF0aW9uc1xuICB2YXIgcG9pbnRlcnMgPSBbXTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgaW5wdXQucG9pbnRlcnMubGVuZ3RoKSB7XG4gICAgcG9pbnRlcnNbaV0gPSB7XG4gICAgICBjbGllbnRYOiByb3VuZChpbnB1dC5wb2ludGVyc1tpXS5jbGllbnRYKSxcbiAgICAgIGNsaWVudFk6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFkpXG4gICAgfTtcbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRpbWVTdGFtcDogbm93KCksXG4gICAgcG9pbnRlcnM6IHBvaW50ZXJzLFxuICAgIGNlbnRlcjogZ2V0Q2VudGVyKHBvaW50ZXJzKSxcbiAgICBkZWx0YVg6IGlucHV0LmRlbHRhWCxcbiAgICBkZWx0YVk6IGlucHV0LmRlbHRhWVxuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIGFic29sdXRlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtPYmplY3R9IHAxIHt4LCB5fVxuICogQHBhcmFtIHtPYmplY3R9IHAyIHt4LCB5fVxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICovXG5cbmZ1bmN0aW9uIGdldERpc3RhbmNlKHAxLCBwMiwgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHByb3BzID0gUFJPUFNfWFk7XG4gIH1cblxuICB2YXIgeCA9IHAyW3Byb3BzWzBdXSAtIHAxW3Byb3BzWzBdXTtcbiAgdmFyIHkgPSBwMltwcm9wc1sxXV0gLSBwMVtwcm9wc1sxXV07XG4gIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgYW5nbGUgYmV0d2VlbiB0d28gY29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMVxuICogQHBhcmFtIHtPYmplY3R9IHAyXG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGFuZ2xlXG4gKi9cblxuZnVuY3Rpb24gZ2V0QW5nbGUocDEsIHAyLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgfVxuXG4gIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dO1xuICB2YXIgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgcmV0dXJuIE1hdGguYXRhbjIoeSwgeCkgKiAxODAgLyBNYXRoLlBJO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIGRpcmVjdGlvbiBiZXR3ZWVuIHR3byBwb2ludHNcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7TnVtYmVyfSBkaXJlY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBnZXREaXJlY3Rpb24oeCwgeSkge1xuICBpZiAoeCA9PT0geSkge1xuICAgIHJldHVybiBESVJFQ1RJT05fTk9ORTtcbiAgfVxuXG4gIGlmIChhYnMoeCkgPj0gYWJzKHkpKSB7XG4gICAgcmV0dXJuIHggPCAwID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFQ7XG4gIH1cblxuICByZXR1cm4geSA8IDAgPyBESVJFQ1RJT05fVVAgOiBESVJFQ1RJT05fRE9XTjtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZURlbHRhWFkoc2Vzc2lvbiwgaW5wdXQpIHtcbiAgdmFyIGNlbnRlciA9IGlucHV0LmNlbnRlcjsgLy8gbGV0IHsgb2Zmc2V0RGVsdGE6b2Zmc2V0ID0ge30sIHByZXZEZWx0YSA9IHt9LCBwcmV2SW5wdXQgPSB7fSB9ID0gc2Vzc2lvbjtcbiAgLy8ganNjcyB0aHJvd2luZyBlcnJvciBvbiBkZWZhbHV0IGRlc3RydWN0dXJlZCB2YWx1ZXMgYW5kIHdpdGhvdXQgZGVmYXVsdHMgdGVzdHMgZmFpbFxuXG4gIHZhciBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhIHx8IHt9O1xuICB2YXIgcHJldkRlbHRhID0gc2Vzc2lvbi5wcmV2RGVsdGEgfHwge307XG4gIHZhciBwcmV2SW5wdXQgPSBzZXNzaW9uLnByZXZJbnB1dCB8fCB7fTtcblxuICBpZiAoaW5wdXQuZXZlbnRUeXBlID09PSBJTlBVVF9TVEFSVCB8fCBwcmV2SW5wdXQuZXZlbnRUeXBlID09PSBJTlBVVF9FTkQpIHtcbiAgICBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSA9IHtcbiAgICAgIHg6IHByZXZJbnB1dC5kZWx0YVggfHwgMCxcbiAgICAgIHk6IHByZXZJbnB1dC5kZWx0YVkgfHwgMFxuICAgIH07XG4gICAgb2Zmc2V0ID0gc2Vzc2lvbi5vZmZzZXREZWx0YSA9IHtcbiAgICAgIHg6IGNlbnRlci54LFxuICAgICAgeTogY2VudGVyLnlcbiAgICB9O1xuICB9XG5cbiAgaW5wdXQuZGVsdGFYID0gcHJldkRlbHRhLnggKyAoY2VudGVyLnggLSBvZmZzZXQueCk7XG4gIGlucHV0LmRlbHRhWSA9IHByZXZEZWx0YS55ICsgKGNlbnRlci55IC0gb2Zmc2V0LnkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIHZlbG9jaXR5IGJldHdlZW4gdHdvIHBvaW50cy4gdW5pdCBpcyBpbiBweCBwZXIgbXMuXG4gKiBAcGFyYW0ge051bWJlcn0gZGVsdGFUaW1lXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge09iamVjdH0gdmVsb2NpdHkgYHhgIGFuZCBgeWBcbiAqL1xuZnVuY3Rpb24gZ2V0VmVsb2NpdHkoZGVsdGFUaW1lLCB4LCB5KSB7XG4gIHJldHVybiB7XG4gICAgeDogeCAvIGRlbHRhVGltZSB8fCAwLFxuICAgIHk6IHkgLyBkZWx0YVRpbWUgfHwgMFxuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIHNjYWxlIGZhY3RvciBiZXR3ZWVuIHR3byBwb2ludGVyc2V0c1xuICogbm8gc2NhbGUgaXMgMSwgYW5kIGdvZXMgZG93biB0byAwIHdoZW4gcGluY2hlZCB0b2dldGhlciwgYW5kIGJpZ2dlciB3aGVuIHBpbmNoZWQgb3V0XG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHNjYWxlXG4gKi9cblxuZnVuY3Rpb24gZ2V0U2NhbGUoc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZ2V0RGlzdGFuY2UoZW5kWzBdLCBlbmRbMV0sIFBST1BTX0NMSUVOVF9YWSkgLyBnZXREaXN0YW5jZShzdGFydFswXSwgc3RhcnRbMV0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgcm90YXRpb24gZGVncmVlcyBiZXR3ZWVuIHR3byBwb2ludGVyc2V0c1xuICogQHBhcmFtIHtBcnJheX0gc3RhcnQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IGVuZCBhcnJheSBvZiBwb2ludGVyc1xuICogQHJldHVybiB7TnVtYmVyfSByb3RhdGlvblxuICovXG5cbmZ1bmN0aW9uIGdldFJvdGF0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGdldEFuZ2xlKGVuZFsxXSwgZW5kWzBdLCBQUk9QU19DTElFTlRfWFkpICsgZ2V0QW5nbGUoc3RhcnRbMV0sIHN0YXJ0WzBdLCBQUk9QU19DTElFTlRfWFkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB2ZWxvY2l0eSBpcyBjYWxjdWxhdGVkIGV2ZXJ5IHggbXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXNzaW9uXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuXG5mdW5jdGlvbiBjb21wdXRlSW50ZXJ2YWxJbnB1dERhdGEoc2Vzc2lvbiwgaW5wdXQpIHtcbiAgdmFyIGxhc3QgPSBzZXNzaW9uLmxhc3RJbnRlcnZhbCB8fCBpbnB1dDtcbiAgdmFyIGRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGxhc3QudGltZVN0YW1wO1xuICB2YXIgdmVsb2NpdHk7XG4gIHZhciB2ZWxvY2l0eVg7XG4gIHZhciB2ZWxvY2l0eVk7XG4gIHZhciBkaXJlY3Rpb247XG5cbiAgaWYgKGlucHV0LmV2ZW50VHlwZSAhPT0gSU5QVVRfQ0FOQ0VMICYmIChkZWx0YVRpbWUgPiBDT01QVVRFX0lOVEVSVkFMIHx8IGxhc3QudmVsb2NpdHkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICB2YXIgZGVsdGFYID0gaW5wdXQuZGVsdGFYIC0gbGFzdC5kZWx0YVg7XG4gICAgdmFyIGRlbHRhWSA9IGlucHV0LmRlbHRhWSAtIGxhc3QuZGVsdGFZO1xuICAgIHZhciB2ID0gZ2V0VmVsb2NpdHkoZGVsdGFUaW1lLCBkZWx0YVgsIGRlbHRhWSk7XG4gICAgdmVsb2NpdHlYID0gdi54O1xuICAgIHZlbG9jaXR5WSA9IHYueTtcbiAgICB2ZWxvY2l0eSA9IGFicyh2LngpID4gYWJzKHYueSkgPyB2LnggOiB2Lnk7XG4gICAgZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGRlbHRhWCwgZGVsdGFZKTtcbiAgICBzZXNzaW9uLmxhc3RJbnRlcnZhbCA9IGlucHV0O1xuICB9IGVsc2Uge1xuICAgIC8vIHVzZSBsYXRlc3QgdmVsb2NpdHkgaW5mbyBpZiBpdCBkb2Vzbid0IG92ZXJ0YWtlIGEgbWluaW11bSBwZXJpb2RcbiAgICB2ZWxvY2l0eSA9IGxhc3QudmVsb2NpdHk7XG4gICAgdmVsb2NpdHlYID0gbGFzdC52ZWxvY2l0eVg7XG4gICAgdmVsb2NpdHlZID0gbGFzdC52ZWxvY2l0eVk7XG4gICAgZGlyZWN0aW9uID0gbGFzdC5kaXJlY3Rpb247XG4gIH1cblxuICBpbnB1dC52ZWxvY2l0eSA9IHZlbG9jaXR5O1xuICBpbnB1dC52ZWxvY2l0eVggPSB2ZWxvY2l0eVg7XG4gIGlucHV0LnZlbG9jaXR5WSA9IHZlbG9jaXR5WTtcbiAgaW5wdXQuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xufVxuXG4vKipcbiogQHByaXZhdGVcbiAqIGV4dGVuZCB0aGUgZGF0YSB3aXRoIHNvbWUgdXNhYmxlIHByb3BlcnRpZXMgbGlrZSBzY2FsZSwgcm90YXRlLCB2ZWxvY2l0eSBldGNcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYW5hZ2VyXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuXG5mdW5jdGlvbiBjb21wdXRlSW5wdXREYXRhKG1hbmFnZXIsIGlucHV0KSB7XG4gIHZhciBzZXNzaW9uID0gbWFuYWdlci5zZXNzaW9uO1xuICB2YXIgcG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycztcbiAgdmFyIHBvaW50ZXJzTGVuZ3RoID0gcG9pbnRlcnMubGVuZ3RoOyAvLyBzdG9yZSB0aGUgZmlyc3QgaW5wdXQgdG8gY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBhbmQgZGlyZWN0aW9uXG5cbiAgaWYgKCFzZXNzaW9uLmZpcnN0SW5wdXQpIHtcbiAgICBzZXNzaW9uLmZpcnN0SW5wdXQgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gIH0gLy8gdG8gY29tcHV0ZSBzY2FsZSBhbmQgcm90YXRpb24gd2UgbmVlZCB0byBzdG9yZSB0aGUgbXVsdGlwbGUgdG91Y2hlc1xuXG5cbiAgaWYgKHBvaW50ZXJzTGVuZ3RoID4gMSAmJiAhc2Vzc2lvbi5maXJzdE11bHRpcGxlKSB7XG4gICAgc2Vzc2lvbi5maXJzdE11bHRpcGxlID0gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpO1xuICB9IGVsc2UgaWYgKHBvaW50ZXJzTGVuZ3RoID09PSAxKSB7XG4gICAgc2Vzc2lvbi5maXJzdE11bHRpcGxlID0gZmFsc2U7XG4gIH1cblxuICB2YXIgZmlyc3RJbnB1dCA9IHNlc3Npb24uZmlyc3RJbnB1dCxcbiAgICAgIGZpcnN0TXVsdGlwbGUgPSBzZXNzaW9uLmZpcnN0TXVsdGlwbGU7XG4gIHZhciBvZmZzZXRDZW50ZXIgPSBmaXJzdE11bHRpcGxlID8gZmlyc3RNdWx0aXBsZS5jZW50ZXIgOiBmaXJzdElucHV0LmNlbnRlcjtcbiAgdmFyIGNlbnRlciA9IGlucHV0LmNlbnRlciA9IGdldENlbnRlcihwb2ludGVycyk7XG4gIGlucHV0LnRpbWVTdGFtcCA9IG5vdygpO1xuICBpbnB1dC5kZWx0YVRpbWUgPSBpbnB1dC50aW1lU3RhbXAgLSBmaXJzdElucHV0LnRpbWVTdGFtcDtcbiAgaW5wdXQuYW5nbGUgPSBnZXRBbmdsZShvZmZzZXRDZW50ZXIsIGNlbnRlcik7XG4gIGlucHV0LmRpc3RhbmNlID0gZ2V0RGlzdGFuY2Uob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCk7XG4gIGlucHV0Lm9mZnNldERpcmVjdGlvbiA9IGdldERpcmVjdGlvbihpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG4gIHZhciBvdmVyYWxsVmVsb2NpdHkgPSBnZXRWZWxvY2l0eShpbnB1dC5kZWx0YVRpbWUsIGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5WCA9IG92ZXJhbGxWZWxvY2l0eS54O1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlZID0gb3ZlcmFsbFZlbG9jaXR5Lnk7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eSA9IGFicyhvdmVyYWxsVmVsb2NpdHkueCkgPiBhYnMob3ZlcmFsbFZlbG9jaXR5LnkpID8gb3ZlcmFsbFZlbG9jaXR5LnggOiBvdmVyYWxsVmVsb2NpdHkueTtcbiAgaW5wdXQuc2NhbGUgPSBmaXJzdE11bHRpcGxlID8gZ2V0U2NhbGUoZmlyc3RNdWx0aXBsZS5wb2ludGVycywgcG9pbnRlcnMpIDogMTtcbiAgaW5wdXQucm90YXRpb24gPSBmaXJzdE11bHRpcGxlID8gZ2V0Um90YXRpb24oZmlyc3RNdWx0aXBsZS5wb2ludGVycywgcG9pbnRlcnMpIDogMDtcbiAgaW5wdXQubWF4UG9pbnRlcnMgPSAhc2Vzc2lvbi5wcmV2SW5wdXQgPyBpbnB1dC5wb2ludGVycy5sZW5ndGggOiBpbnB1dC5wb2ludGVycy5sZW5ndGggPiBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycyA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzO1xuICBjb21wdXRlSW50ZXJ2YWxJbnB1dERhdGEoc2Vzc2lvbiwgaW5wdXQpOyAvLyBmaW5kIHRoZSBjb3JyZWN0IHRhcmdldFxuXG4gIHZhciB0YXJnZXQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG4gIHZhciBzcmNFdmVudCA9IGlucHV0LnNyY0V2ZW50O1xuICB2YXIgc3JjRXZlbnRUYXJnZXQ7XG5cbiAgaWYgKHNyY0V2ZW50LmNvbXBvc2VkUGF0aCkge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQuY29tcG9zZWRQYXRoKClbMF07XG4gIH0gZWxzZSBpZiAoc3JjRXZlbnQucGF0aCkge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQucGF0aFswXTtcbiAgfSBlbHNlIHtcbiAgICBzcmNFdmVudFRhcmdldCA9IHNyY0V2ZW50LnRhcmdldDtcbiAgfVxuXG4gIGlmIChoYXNQYXJlbnQoc3JjRXZlbnRUYXJnZXQsIHRhcmdldCkpIHtcbiAgICB0YXJnZXQgPSBzcmNFdmVudFRhcmdldDtcbiAgfVxuXG4gIGlucHV0LnRhcmdldCA9IHRhcmdldDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogaGFuZGxlIGlucHV0IGV2ZW50c1xuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRUeXBlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuXG5mdW5jdGlvbiBpbnB1dEhhbmRsZXIobWFuYWdlciwgZXZlbnRUeXBlLCBpbnB1dCkge1xuICB2YXIgcG9pbnRlcnNMZW4gPSBpbnB1dC5wb2ludGVycy5sZW5ndGg7XG4gIHZhciBjaGFuZ2VkUG9pbnRlcnNMZW4gPSBpbnB1dC5jaGFuZ2VkUG9pbnRlcnMubGVuZ3RoO1xuICB2YXIgaXNGaXJzdCA9IGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIHBvaW50ZXJzTGVuIC0gY2hhbmdlZFBvaW50ZXJzTGVuID09PSAwO1xuICB2YXIgaXNGaW5hbCA9IGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIHBvaW50ZXJzTGVuIC0gY2hhbmdlZFBvaW50ZXJzTGVuID09PSAwO1xuICBpbnB1dC5pc0ZpcnN0ID0gISFpc0ZpcnN0O1xuICBpbnB1dC5pc0ZpbmFsID0gISFpc0ZpbmFsO1xuXG4gIGlmIChpc0ZpcnN0KSB7XG4gICAgbWFuYWdlci5zZXNzaW9uID0ge307XG4gIH0gLy8gc291cmNlIGV2ZW50IGlzIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIHRoZSBkb21FdmVudHNcbiAgLy8gbGlrZSAndG91Y2hzdGFydCwgbW91c2V1cCwgcG9pbnRlcmRvd24nXG5cblxuICBpbnB1dC5ldmVudFR5cGUgPSBldmVudFR5cGU7IC8vIGNvbXB1dGUgc2NhbGUsIHJvdGF0aW9uIGV0Y1xuXG4gIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpOyAvLyBlbWl0IHNlY3JldCBldmVudFxuXG4gIG1hbmFnZXIuZW1pdCgnaGFtbWVyLmlucHV0JywgaW5wdXQpO1xuICBtYW5hZ2VyLnJlY29nbml6ZShpbnB1dCk7XG4gIG1hbmFnZXIuc2Vzc2lvbi5wcmV2SW5wdXQgPSBpbnB1dDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc3BsaXQgc3RyaW5nIG9uIHdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtBcnJheX0gd29yZHNcbiAqL1xuZnVuY3Rpb24gc3BsaXRTdHIoc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSgpLnNwbGl0KC9cXHMrL2cpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBhZGRFdmVudExpc3RlbmVyIHdpdGggbXVsdGlwbGUgZXZlbnRzIGF0IG9uY2VcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gKi9cblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcnModGFyZ2V0LCB0eXBlcywgaGFuZGxlcikge1xuICBlYWNoKHNwbGl0U3RyKHR5cGVzKSwgZnVuY3Rpb24gKHR5cGUpIHtcbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiByZW1vdmVFdmVudExpc3RlbmVyIHdpdGggbXVsdGlwbGUgZXZlbnRzIGF0IG9uY2VcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gKi9cblxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGFyZ2V0LCB0eXBlcywgaGFuZGxlcikge1xuICBlYWNoKHNwbGl0U3RyKHR5cGVzKSwgZnVuY3Rpb24gKHR5cGUpIHtcbiAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIHdpbmRvdyBvYmplY3Qgb2YgYW4gZWxlbWVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0RvY3VtZW50Vmlld3xXaW5kb3d9XG4gKi9cbmZ1bmN0aW9uIGdldFdpbmRvd0ZvckVsZW1lbnQoZWxlbWVudCkge1xuICB2YXIgZG9jID0gZWxlbWVudC5vd25lckRvY3VtZW50IHx8IGVsZW1lbnQ7XG4gIHJldHVybiBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdyB8fCB3aW5kb3c7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG52YXIgSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBJbnB1dChtYW5hZ2VyLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLmVsZW1lbnQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG4gICAgdGhpcy50YXJnZXQgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRUYXJnZXQ7IC8vIHNtYWxsZXIgd3JhcHBlciBhcm91bmQgdGhlIGhhbmRsZXIsIGZvciB0aGUgc2NvcGUgYW5kIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLFxuICAgIC8vIHNvIHdoZW4gZGlzYWJsZWQgdGhlIGlucHV0IGV2ZW50cyBhcmUgY29tcGxldGVseSBieXBhc3NlZC5cblxuICAgIHRoaXMuZG9tSGFuZGxlciA9IGZ1bmN0aW9uIChldikge1xuICAgICAgaWYgKGJvb2xPckZuKG1hbmFnZXIub3B0aW9ucy5lbmFibGUsIFttYW5hZ2VyXSkpIHtcbiAgICAgICAgc2VsZi5oYW5kbGVyKGV2KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5pbml0KCk7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNob3VsZCBoYW5kbGUgdGhlIGlucHV0RXZlbnQgZGF0YSBhbmQgdHJpZ2dlciB0aGUgY2FsbGJhY2tcbiAgICogQHZpcnR1YWxcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcigpIHt9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogYmluZCB0aGUgZXZlbnRzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmluaXQgPSBmdW5jdGlvbiBpbml0KCkge1xuICAgIHRoaXMuZXZFbCAmJiBhZGRFdmVudExpc3RlbmVycyh0aGlzLmVsZW1lbnQsIHRoaXMuZXZFbCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2VGFyZ2V0ICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMudGFyZ2V0LCB0aGlzLmV2VGFyZ2V0LCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZXaW4gJiYgYWRkRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogdW5iaW5kIHRoZSBldmVudHNcbiAgICovXG5cblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ldkVsICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZUYXJnZXQgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldldpbiAmJiByZW1vdmVFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gIH07XG5cbiAgcmV0dXJuIElucHV0O1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBmaW5kIGlmIGEgYXJyYXkgY29udGFpbnMgdGhlIG9iamVjdCB1c2luZyBpbmRleE9mIG9yIGEgc2ltcGxlIHBvbHlGaWxsXG4gKiBAcGFyYW0ge0FycmF5fSBzcmNcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcGFyYW0ge1N0cmluZ30gW2ZpbmRCeUtleV1cbiAqIEByZXR1cm4ge0Jvb2xlYW58TnVtYmVyfSBmYWxzZSB3aGVuIG5vdCBmb3VuZCwgb3IgdGhlIGluZGV4XG4gKi9cbmZ1bmN0aW9uIGluQXJyYXkoc3JjLCBmaW5kLCBmaW5kQnlLZXkpIHtcbiAgaWYgKHNyYy5pbmRleE9mICYmICFmaW5kQnlLZXkpIHtcbiAgICByZXR1cm4gc3JjLmluZGV4T2YoZmluZCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgICBpZiAoZmluZEJ5S2V5ICYmIHNyY1tpXVtmaW5kQnlLZXldID09IGZpbmQgfHwgIWZpbmRCeUtleSAmJiBzcmNbaV0gPT09IGZpbmQpIHtcbiAgICAgICAgLy8gZG8gbm90IHVzZSA9PT0gaGVyZSwgdGVzdCBmYWlsc1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiAtMTtcbiAgfVxufVxuXG52YXIgUE9JTlRFUl9JTlBVVF9NQVAgPSB7XG4gIHBvaW50ZXJkb3duOiBJTlBVVF9TVEFSVCxcbiAgcG9pbnRlcm1vdmU6IElOUFVUX01PVkUsXG4gIHBvaW50ZXJ1cDogSU5QVVRfRU5ELFxuICBwb2ludGVyY2FuY2VsOiBJTlBVVF9DQU5DRUwsXG4gIHBvaW50ZXJvdXQ6IElOUFVUX0NBTkNFTFxufTsgLy8gaW4gSUUxMCB0aGUgcG9pbnRlciB0eXBlcyBpcyBkZWZpbmVkIGFzIGFuIGVudW1cblxudmFyIElFMTBfUE9JTlRFUl9UWVBFX0VOVU0gPSB7XG4gIDI6IElOUFVUX1RZUEVfVE9VQ0gsXG4gIDM6IElOUFVUX1RZUEVfUEVOLFxuICA0OiBJTlBVVF9UWVBFX01PVVNFLFxuICA1OiBJTlBVVF9UWVBFX0tJTkVDVCAvLyBzZWUgaHR0cHM6Ly90d2l0dGVyLmNvbS9qYWNvYnJvc3NpL3N0YXR1cy80ODA1OTY0Mzg0ODk4OTA4MTZcblxufTtcbnZhciBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ3BvaW50ZXJkb3duJztcbnZhciBQT0lOVEVSX1dJTkRPV19FVkVOVFMgPSAncG9pbnRlcm1vdmUgcG9pbnRlcnVwIHBvaW50ZXJjYW5jZWwnOyAvLyBJRTEwIGhhcyBwcmVmaXhlZCBzdXBwb3J0LCBhbmQgY2FzZS1zZW5zaXRpdmVcblxuaWYgKHdpbi5NU1BvaW50ZXJFdmVudCAmJiAhd2luLlBvaW50ZXJFdmVudCkge1xuICBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ01TUG9pbnRlckRvd24nO1xuICBQT0lOVEVSX1dJTkRPV19FVkVOVFMgPSAnTVNQb2ludGVyTW92ZSBNU1BvaW50ZXJVcCBNU1BvaW50ZXJDYW5jZWwnO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUG9pbnRlciBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG5cbnZhciBQb2ludGVyRXZlbnRJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKFBvaW50ZXJFdmVudElucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIFBvaW50ZXJFdmVudElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IFBvaW50ZXJFdmVudElucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldkVsID0gUE9JTlRFUl9FTEVNRU5UX0VWRU5UUztcbiAgICBwcm90by5ldldpbiA9IFBPSU5URVJfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RvcmUgPSBfdGhpcy5tYW5hZ2VyLnNlc3Npb24ucG9pbnRlckV2ZW50cyA9IFtdO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaGFuZGxlIG1vdXNlIGV2ZW50c1xuICAgKiBAcGFyYW0ge09iamVjdH0gZXZcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciBzdG9yZSA9IHRoaXMuc3RvcmU7XG4gICAgdmFyIHJlbW92ZVBvaW50ZXIgPSBmYWxzZTtcbiAgICB2YXIgZXZlbnRUeXBlTm9ybWFsaXplZCA9IGV2LnR5cGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdtcycsICcnKTtcbiAgICB2YXIgZXZlbnRUeXBlID0gUE9JTlRFUl9JTlBVVF9NQVBbZXZlbnRUeXBlTm9ybWFsaXplZF07XG4gICAgdmFyIHBvaW50ZXJUeXBlID0gSUUxMF9QT0lOVEVSX1RZUEVfRU5VTVtldi5wb2ludGVyVHlwZV0gfHwgZXYucG9pbnRlclR5cGU7XG4gICAgdmFyIGlzVG91Y2ggPSBwb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9UT1VDSDsgLy8gZ2V0IGluZGV4IG9mIHRoZSBldmVudCBpbiB0aGUgc3RvcmVcblxuICAgIHZhciBzdG9yZUluZGV4ID0gaW5BcnJheShzdG9yZSwgZXYucG9pbnRlcklkLCAncG9pbnRlcklkJyk7IC8vIHN0YXJ0IGFuZCBtb3VzZSBtdXN0IGJlIGRvd25cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiAoZXYuYnV0dG9uID09PSAwIHx8IGlzVG91Y2gpKSB7XG4gICAgICBpZiAoc3RvcmVJbmRleCA8IDApIHtcbiAgICAgICAgc3RvcmUucHVzaChldik7XG4gICAgICAgIHN0b3JlSW5kZXggPSBzdG9yZS5sZW5ndGggLSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICAgIHJlbW92ZVBvaW50ZXIgPSB0cnVlO1xuICAgIH0gLy8gaXQgbm90IGZvdW5kLCBzbyB0aGUgcG9pbnRlciBoYXNuJ3QgYmVlbiBkb3duIChzbyBpdCdzIHByb2JhYmx5IGEgaG92ZXIpXG5cblxuICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gdXBkYXRlIHRoZSBldmVudCBpbiB0aGUgc3RvcmVcblxuXG4gICAgc3RvcmVbc3RvcmVJbmRleF0gPSBldjtcbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgZXZlbnRUeXBlLCB7XG4gICAgICBwb2ludGVyczogc3RvcmUsXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IFtldl0sXG4gICAgICBwb2ludGVyVHlwZTogcG9pbnRlclR5cGUsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcblxuICAgIGlmIChyZW1vdmVQb2ludGVyKSB7XG4gICAgICAvLyByZW1vdmUgZnJvbSB0aGUgc3RvcmVcbiAgICAgIHN0b3JlLnNwbGljZShzdG9yZUluZGV4LCAxKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBvaW50ZXJFdmVudElucHV0O1xufShJbnB1dCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNvbnZlcnQgYXJyYXktbGlrZSBvYmplY3RzIHRvIHJlYWwgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmosIDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB1bmlxdWUgYXJyYXkgd2l0aCBvYmplY3RzIGJhc2VkIG9uIGEga2V5IChsaWtlICdpZCcpIG9yIGp1c3QgYnkgdGhlIGFycmF5J3MgdmFsdWVcbiAqIEBwYXJhbSB7QXJyYXl9IHNyYyBbe2lkOjF9LHtpZDoyfSx7aWQ6MX1dXG4gKiBAcGFyYW0ge1N0cmluZ30gW2tleV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3NvcnQ9RmFsc2VdXG4gKiBAcmV0dXJucyB7QXJyYXl9IFt7aWQ6MX0se2lkOjJ9XVxuICovXG5cbmZ1bmN0aW9uIHVuaXF1ZUFycmF5KHNyYywga2V5LCBzb3J0KSB7XG4gIHZhciByZXN1bHRzID0gW107XG4gIHZhciB2YWx1ZXMgPSBbXTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgIHZhciB2YWwgPSBrZXkgPyBzcmNbaV1ba2V5XSA6IHNyY1tpXTtcblxuICAgIGlmIChpbkFycmF5KHZhbHVlcywgdmFsKSA8IDApIHtcbiAgICAgIHJlc3VsdHMucHVzaChzcmNbaV0pO1xuICAgIH1cblxuICAgIHZhbHVlc1tpXSA9IHZhbDtcbiAgICBpKys7XG4gIH1cblxuICBpZiAoc29ydCkge1xuICAgIGlmICgha2V5KSB7XG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGFba2V5XSA+IGJba2V5XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG52YXIgVE9VQ0hfSU5QVVRfTUFQID0ge1xuICB0b3VjaHN0YXJ0OiBJTlBVVF9TVEFSVCxcbiAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICB0b3VjaGNhbmNlbDogSU5QVVRfQ0FOQ0VMXG59O1xudmFyIFRPVUNIX1RBUkdFVF9FVkVOVFMgPSAndG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogTXVsdGktdXNlciB0b3VjaCBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgVG91Y2hJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRvdWNoSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gVG91Y2hJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBUb3VjaElucHV0LnByb3RvdHlwZS5ldlRhcmdldCA9IFRPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnRhcmdldElkcyA9IHt9OyAvLyB0aGlzLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUb3VjaElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgdHlwZSA9IFRPVUNIX0lOUFVUX01BUFtldi50eXBlXTtcbiAgICB2YXIgdG91Y2hlcyA9IGdldFRvdWNoZXMuY2FsbCh0aGlzLCBldiwgdHlwZSk7XG5cbiAgICBpZiAoIXRvdWNoZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBUb3VjaElucHV0O1xufShJbnB1dCk7XG5cbmZ1bmN0aW9uIGdldFRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgdmFyIGFsbFRvdWNoZXMgPSB0b0FycmF5KGV2LnRvdWNoZXMpO1xuICB2YXIgdGFyZ2V0SWRzID0gdGhpcy50YXJnZXRJZHM7IC8vIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgdG91Y2gsIHRoZSBwcm9jZXNzIGNhbiBiZSBzaW1wbGlmaWVkXG5cbiAgaWYgKHR5cGUgJiAoSU5QVVRfU1RBUlQgfCBJTlBVVF9NT1ZFKSAmJiBhbGxUb3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgIHRhcmdldElkc1thbGxUb3VjaGVzWzBdLmlkZW50aWZpZXJdID0gdHJ1ZTtcbiAgICByZXR1cm4gW2FsbFRvdWNoZXMsIGFsbFRvdWNoZXNdO1xuICB9XG5cbiAgdmFyIGk7XG4gIHZhciB0YXJnZXRUb3VjaGVzO1xuICB2YXIgY2hhbmdlZFRvdWNoZXMgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKTtcbiAgdmFyIGNoYW5nZWRUYXJnZXRUb3VjaGVzID0gW107XG4gIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDsgLy8gZ2V0IHRhcmdldCB0b3VjaGVzIGZyb20gdG91Y2hlc1xuXG4gIHRhcmdldFRvdWNoZXMgPSBhbGxUb3VjaGVzLmZpbHRlcihmdW5jdGlvbiAodG91Y2gpIHtcbiAgICByZXR1cm4gaGFzUGFyZW50KHRvdWNoLnRhcmdldCwgdGFyZ2V0KTtcbiAgfSk7IC8vIGNvbGxlY3QgdG91Y2hlc1xuXG4gIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCB0YXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgdGFyZ2V0SWRzW3RhcmdldFRvdWNoZXNbaV0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgICAgaSsrO1xuICAgIH1cbiAgfSAvLyBmaWx0ZXIgY2hhbmdlZCB0b3VjaGVzIHRvIG9ubHkgY29udGFpbiB0b3VjaGVzIHRoYXQgZXhpc3QgaW4gdGhlIGNvbGxlY3RlZCB0YXJnZXQgaWRzXG5cblxuICBpID0gMDtcblxuICB3aGlsZSAoaSA8IGNoYW5nZWRUb3VjaGVzLmxlbmd0aCkge1xuICAgIGlmICh0YXJnZXRJZHNbY2hhbmdlZFRvdWNoZXNbaV0uaWRlbnRpZmllcl0pIHtcbiAgICAgIGNoYW5nZWRUYXJnZXRUb3VjaGVzLnB1c2goY2hhbmdlZFRvdWNoZXNbaV0pO1xuICAgIH0gLy8gY2xlYW51cCByZW1vdmVkIHRvdWNoZXNcblxuXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgZGVsZXRlIHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXTtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICBpZiAoIWNoYW5nZWRUYXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBbLy8gbWVyZ2UgdGFyZ2V0VG91Y2hlcyB3aXRoIGNoYW5nZWRUYXJnZXRUb3VjaGVzIHNvIGl0IGNvbnRhaW5zIEFMTCB0b3VjaGVzLCBpbmNsdWRpbmcgJ2VuZCcgYW5kICdjYW5jZWwnXG4gIHVuaXF1ZUFycmF5KHRhcmdldFRvdWNoZXMuY29uY2F0KGNoYW5nZWRUYXJnZXRUb3VjaGVzKSwgJ2lkZW50aWZpZXInLCB0cnVlKSwgY2hhbmdlZFRhcmdldFRvdWNoZXNdO1xufVxuXG52YXIgTU9VU0VfSU5QVVRfTUFQID0ge1xuICBtb3VzZWRvd246IElOUFVUX1NUQVJULFxuICBtb3VzZW1vdmU6IElOUFVUX01PVkUsXG4gIG1vdXNldXA6IElOUFVUX0VORFxufTtcbnZhciBNT1VTRV9FTEVNRU5UX0VWRU5UUyA9ICdtb3VzZWRvd24nO1xudmFyIE1PVVNFX1dJTkRPV19FVkVOVFMgPSAnbW91c2Vtb3ZlIG1vdXNldXAnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogTW91c2UgZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIE1vdXNlSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShNb3VzZUlucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIE1vdXNlSW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gTW91c2VJbnB1dC5wcm90b3R5cGU7XG4gICAgcHJvdG8uZXZFbCA9IE1PVVNFX0VMRU1FTlRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gTU9VU0VfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMucHJlc3NlZCA9IGZhbHNlOyAvLyBtb3VzZWRvd24gc3RhdGVcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaGFuZGxlIG1vdXNlIGV2ZW50c1xuICAgKiBAcGFyYW0ge09iamVjdH0gZXZcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTW91c2VJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIGV2ZW50VHlwZSA9IE1PVVNFX0lOUFVUX01BUFtldi50eXBlXTsgLy8gb24gc3RhcnQgd2Ugd2FudCB0byBoYXZlIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBkb3duXG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgZXYuYnV0dG9uID09PSAwKSB7XG4gICAgICB0aGlzLnByZXNzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9NT1ZFICYmIGV2LndoaWNoICE9PSAxKSB7XG4gICAgICBldmVudFR5cGUgPSBJTlBVVF9FTkQ7XG4gICAgfSAvLyBtb3VzZSBtdXN0IGJlIGRvd25cblxuXG4gICAgaWYgKCF0aGlzLnByZXNzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgZXZlbnRUeXBlLCB7XG4gICAgICBwb2ludGVyczogW2V2XSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX01PVVNFLFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE1vdXNlSW5wdXQ7XG59KElucHV0KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ29tYmluZWQgdG91Y2ggYW5kIG1vdXNlIGlucHV0XG4gKlxuICogVG91Y2ggaGFzIGEgaGlnaGVyIHByaW9yaXR5IHRoZW4gbW91c2UsIGFuZCB3aGlsZSB0b3VjaGluZyBubyBtb3VzZSBldmVudHMgYXJlIGFsbG93ZWQuXG4gKiBUaGlzIGJlY2F1c2UgdG91Y2ggZGV2aWNlcyBhbHNvIGVtaXQgbW91c2UgZXZlbnRzIHdoaWxlIGRvaW5nIGEgdG91Y2guXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBERURVUF9USU1FT1VUID0gMjUwMDtcbnZhciBERURVUF9ESVNUQU5DRSA9IDI1O1xuXG5mdW5jdGlvbiBzZXRMYXN0VG91Y2goZXZlbnREYXRhKSB7XG4gIHZhciBfZXZlbnREYXRhJGNoYW5nZWRQb2kgPSBldmVudERhdGEuY2hhbmdlZFBvaW50ZXJzLFxuICAgICAgdG91Y2ggPSBfZXZlbnREYXRhJGNoYW5nZWRQb2lbMF07XG5cbiAgaWYgKHRvdWNoLmlkZW50aWZpZXIgPT09IHRoaXMucHJpbWFyeVRvdWNoKSB7XG4gICAgdmFyIGxhc3RUb3VjaCA9IHtcbiAgICAgIHg6IHRvdWNoLmNsaWVudFgsXG4gICAgICB5OiB0b3VjaC5jbGllbnRZXG4gICAgfTtcbiAgICB2YXIgbHRzID0gdGhpcy5sYXN0VG91Y2hlcztcbiAgICB0aGlzLmxhc3RUb3VjaGVzLnB1c2gobGFzdFRvdWNoKTtcblxuICAgIHZhciByZW1vdmVMYXN0VG91Y2ggPSBmdW5jdGlvbiByZW1vdmVMYXN0VG91Y2goKSB7XG4gICAgICB2YXIgaSA9IGx0cy5pbmRleE9mKGxhc3RUb3VjaCk7XG5cbiAgICAgIGlmIChpID4gLTEpIHtcbiAgICAgICAgbHRzLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2V0VGltZW91dChyZW1vdmVMYXN0VG91Y2gsIERFRFVQX1RJTUVPVVQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlY29yZFRvdWNoZXMoZXZlbnRUeXBlLCBldmVudERhdGEpIHtcbiAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUKSB7XG4gICAgdGhpcy5wcmltYXJ5VG91Y2ggPSBldmVudERhdGEuY2hhbmdlZFBvaW50ZXJzWzBdLmlkZW50aWZpZXI7XG4gICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgIHNldExhc3RUb3VjaC5jYWxsKHRoaXMsIGV2ZW50RGF0YSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTeW50aGV0aWNFdmVudChldmVudERhdGEpIHtcbiAgdmFyIHggPSBldmVudERhdGEuc3JjRXZlbnQuY2xpZW50WDtcbiAgdmFyIHkgPSBldmVudERhdGEuc3JjRXZlbnQuY2xpZW50WTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGFzdFRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdCA9IHRoaXMubGFzdFRvdWNoZXNbaV07XG4gICAgdmFyIGR4ID0gTWF0aC5hYnMoeCAtIHQueCk7XG4gICAgdmFyIGR5ID0gTWF0aC5hYnMoeSAtIHQueSk7XG5cbiAgICBpZiAoZHggPD0gREVEVVBfRElTVEFOQ0UgJiYgZHkgPD0gREVEVVBfRElTVEFOQ0UpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIFRvdWNoTW91c2VJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIHZhciBUb3VjaE1vdXNlSW5wdXQgPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShUb3VjaE1vdXNlSW5wdXQsIF9JbnB1dCk7XG5cbiAgICBmdW5jdGlvbiBUb3VjaE1vdXNlSW5wdXQoX21hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX0lucHV0LmNhbGwodGhpcywgX21hbmFnZXIsIGNhbGxiYWNrKSB8fCB0aGlzO1xuXG4gICAgICBfdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24gKG1hbmFnZXIsIGlucHV0RXZlbnQsIGlucHV0RGF0YSkge1xuICAgICAgICB2YXIgaXNUb3VjaCA9IGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9UT1VDSDtcbiAgICAgICAgdmFyIGlzTW91c2UgPSBpbnB1dERhdGEucG9pbnRlclR5cGUgPT09IElOUFVUX1RZUEVfTU9VU0U7XG5cbiAgICAgICAgaWYgKGlzTW91c2UgJiYgaW5wdXREYXRhLnNvdXJjZUNhcGFiaWxpdGllcyAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzLmZpcmVzVG91Y2hFdmVudHMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gd2hlbiB3ZSdyZSBpbiBhIHRvdWNoIGV2ZW50LCByZWNvcmQgdG91Y2hlcyB0byAgZGUtZHVwZSBzeW50aGV0aWMgbW91c2UgZXZlbnRcblxuXG4gICAgICAgIGlmIChpc1RvdWNoKSB7XG4gICAgICAgICAgcmVjb3JkVG91Y2hlcy5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTW91c2UgJiYgaXNTeW50aGV0aWNFdmVudC5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBpbnB1dERhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuY2FsbGJhY2sobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLnRvdWNoID0gbmV3IFRvdWNoSW5wdXQoX3RoaXMubWFuYWdlciwgX3RoaXMuaGFuZGxlcik7XG4gICAgICBfdGhpcy5tb3VzZSA9IG5ldyBNb3VzZUlucHV0KF90aGlzLm1hbmFnZXIsIF90aGlzLmhhbmRsZXIpO1xuICAgICAgX3RoaXMucHJpbWFyeVRvdWNoID0gbnVsbDtcbiAgICAgIF90aGlzLmxhc3RUb3VjaGVzID0gW107XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogaGFuZGxlIG1vdXNlIGFuZCB0b3VjaCBldmVudHNcbiAgICAgKiBAcGFyYW0ge0hhbW1lcn0gbWFuYWdlclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dEV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgICAqL1xuXG5cbiAgICB2YXIgX3Byb3RvID0gVG91Y2hNb3VzZUlucHV0LnByb3RvdHlwZTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogcmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lcnNcbiAgICAgKi9cbiAgICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLnRvdWNoLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMubW91c2UuZGVzdHJveSgpO1xuICAgIH07XG5cbiAgICByZXR1cm4gVG91Y2hNb3VzZUlucHV0O1xuICB9KElucHV0KTtcblxuICByZXR1cm4gVG91Y2hNb3VzZUlucHV0O1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjcmVhdGUgbmV3IGlucHV0IHR5cGUgbWFuYWdlclxuICogY2FsbGVkIGJ5IHRoZSBNYW5hZ2VyIGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0hhbW1lcn0gbWFuYWdlclxuICogQHJldHVybnMge0lucHV0fVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0SW5zdGFuY2UobWFuYWdlcikge1xuICB2YXIgVHlwZTsgLy8gbGV0IGlucHV0Q2xhc3MgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRDbGFzcztcblxuICB2YXIgaW5wdXRDbGFzcyA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dENsYXNzO1xuXG4gIGlmIChpbnB1dENsYXNzKSB7XG4gICAgVHlwZSA9IGlucHV0Q2xhc3M7XG4gIH0gZWxzZSBpZiAoU1VQUE9SVF9QT0lOVEVSX0VWRU5UUykge1xuICAgIFR5cGUgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgfSBlbHNlIGlmIChTVVBQT1JUX09OTFlfVE9VQ0gpIHtcbiAgICBUeXBlID0gVG91Y2hJbnB1dDtcbiAgfSBlbHNlIGlmICghU1VQUE9SVF9UT1VDSCkge1xuICAgIFR5cGUgPSBNb3VzZUlucHV0O1xuICB9IGVsc2Uge1xuICAgIFR5cGUgPSBUb3VjaE1vdXNlSW5wdXQ7XG4gIH1cblxuICByZXR1cm4gbmV3IFR5cGUobWFuYWdlciwgaW5wdXRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogaWYgdGhlIGFyZ3VtZW50IGlzIGFuIGFycmF5LCB3ZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZuIG9uIGVhY2ggZW50cnlcbiAqIGlmIGl0IGFpbnQgYW4gYXJyYXkgd2UgZG9uJ3Qgd2FudCB0byBkbyBhIHRoaW5nLlxuICogdGhpcyBpcyB1c2VkIGJ5IGFsbCB0aGUgbWV0aG9kcyB0aGF0IGFjY2VwdCBhIHNpbmdsZSBhbmQgYXJyYXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp8QXJyYXl9IGFyZ1xuICogQHBhcmFtIHtTdHJpbmd9IGZuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VBcnJheUFyZyhhcmcsIGZuLCBjb250ZXh0KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICBlYWNoKGFyZywgY29udGV4dFtmbl0sIGNvbnRleHQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgU1RBVEVfUE9TU0lCTEUgPSAxO1xudmFyIFNUQVRFX0JFR0FOID0gMjtcbnZhciBTVEFURV9DSEFOR0VEID0gNDtcbnZhciBTVEFURV9FTkRFRCA9IDg7XG52YXIgU1RBVEVfUkVDT0dOSVpFRCA9IFNUQVRFX0VOREVEO1xudmFyIFNUQVRFX0NBTkNFTExFRCA9IDE2O1xudmFyIFNUQVRFX0ZBSUxFRCA9IDMyO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSB1bmlxdWUgaWRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHVuaXF1ZUlkXG4gKi9cbnZhciBfdW5pcXVlSWQgPSAxO1xuZnVuY3Rpb24gdW5pcXVlSWQoKSB7XG4gIHJldHVybiBfdW5pcXVlSWQrKztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IGEgcmVjb2duaXplciBieSBuYW1lIGlmIGl0IGlzIGJvdW5kIHRvIGEgbWFuYWdlclxuICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gb3RoZXJSZWNvZ25pemVyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAqIEByZXR1cm5zIHtSZWNvZ25pemVyfVxuICovXG5mdW5jdGlvbiBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgcmVjb2duaXplcikge1xuICB2YXIgbWFuYWdlciA9IHJlY29nbml6ZXIubWFuYWdlcjtcblxuICBpZiAobWFuYWdlcikge1xuICAgIHJldHVybiBtYW5hZ2VyLmdldChvdGhlclJlY29nbml6ZXIpO1xuICB9XG5cbiAgcmV0dXJuIG90aGVyUmVjb2duaXplcjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IGEgdXNhYmxlIHN0cmluZywgdXNlZCBhcyBldmVudCBwb3N0Zml4XG4gKiBAcGFyYW0ge2NvbnN0YW50fSBzdGF0ZVxuICogQHJldHVybnMge1N0cmluZ30gc3RhdGVcbiAqL1xuXG5mdW5jdGlvbiBzdGF0ZVN0cihzdGF0ZSkge1xuICBpZiAoc3RhdGUgJiBTVEFURV9DQU5DRUxMRUQpIHtcbiAgICByZXR1cm4gJ2NhbmNlbCc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9FTkRFRCkge1xuICAgIHJldHVybiAnZW5kJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0NIQU5HRUQpIHtcbiAgICByZXR1cm4gJ21vdmUnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQkVHQU4pIHtcbiAgICByZXR1cm4gJ3N0YXJ0JztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUmVjb2duaXplciBmbG93IGV4cGxhaW5lZDsgKlxuICogQWxsIHJlY29nbml6ZXJzIGhhdmUgdGhlIGluaXRpYWwgc3RhdGUgb2YgUE9TU0lCTEUgd2hlbiBhIGlucHV0IHNlc3Npb24gc3RhcnRzLlxuICogVGhlIGRlZmluaXRpb24gb2YgYSBpbnB1dCBzZXNzaW9uIGlzIGZyb20gdGhlIGZpcnN0IGlucHV0IHVudGlsIHRoZSBsYXN0IGlucHV0LCB3aXRoIGFsbCBpdCdzIG1vdmVtZW50IGluIGl0LiAqXG4gKiBFeGFtcGxlIHNlc3Npb24gZm9yIG1vdXNlLWlucHV0OiBtb3VzZWRvd24gLT4gbW91c2Vtb3ZlIC0+IG1vdXNldXBcbiAqXG4gKiBPbiBlYWNoIHJlY29nbml6aW5nIGN5Y2xlIChzZWUgTWFuYWdlci5yZWNvZ25pemUpIHRoZSAucmVjb2duaXplKCkgbWV0aG9kIGlzIGV4ZWN1dGVkXG4gKiB3aGljaCBkZXRlcm1pbmVzIHdpdGggc3RhdGUgaXQgc2hvdWxkIGJlLlxuICpcbiAqIElmIHRoZSByZWNvZ25pemVyIGhhcyB0aGUgc3RhdGUgRkFJTEVELCBDQU5DRUxMRUQgb3IgUkVDT0dOSVpFRCAoZXF1YWxzIEVOREVEKSwgaXQgaXMgcmVzZXQgdG9cbiAqIFBPU1NJQkxFIHRvIGdpdmUgaXQgYW5vdGhlciBjaGFuZ2Ugb24gdGhlIG5leHQgY3ljbGUuXG4gKlxuICogICAgICAgICAgICAgICBQb3NzaWJsZVxuICogICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICstLS0tLSstLS0tLS0tLS0tLS0tLS0rXG4gKiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICstLS0tLSstLS0tLSsgICAgICAgICAgICAgICB8XG4gKiAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICB8XG4gKiAgIEZhaWxlZCAgICAgIENhbmNlbGxlZCAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rLS0tLS0tK1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgIFJlY29nbml6ZWQgICAgICAgQmVnYW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZGVkL1JlY29nbml6ZWRcbiAqL1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSZWNvZ25pemVyXG4gKiBFdmVyeSByZWNvZ25pemVyIG5lZWRzIHRvIGV4dGVuZCBmcm9tIHRoaXMgY2xhc3MuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKi9cblxudmFyIFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe1xuICAgICAgZW5hYmxlOiB0cnVlXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgdGhpcy5pZCA9IHVuaXF1ZUlkKCk7XG4gICAgdGhpcy5tYW5hZ2VyID0gbnVsbDsgLy8gZGVmYXVsdCBpcyBlbmFibGUgdHJ1ZVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIHRoaXMuc2ltdWx0YW5lb3VzID0ge307XG4gICAgdGhpcy5yZXF1aXJlRmFpbCA9IFtdO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtSZWNvZ25pemVyfVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICBhc3NpZ24kMSh0aGlzLm9wdGlvbnMsIG9wdGlvbnMpOyAvLyBhbHNvIHVwZGF0ZSB0aGUgdG91Y2hBY3Rpb24sIGluIGNhc2Ugc29tZXRoaW5nIGNoYW5nZWQgYWJvdXQgdGhlIGRpcmVjdGlvbnMvZW5hYmxlZCBzdGF0ZVxuXG4gICAgdGhpcy5tYW5hZ2VyICYmIHRoaXMubWFuYWdlci50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gcmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAncmVjb2duaXplV2l0aCcsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgc2ltdWx0YW5lb3VzID0gdGhpcy5zaW11bHRhbmVvdXM7XG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuXG4gICAgaWYgKCFzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSkge1xuICAgICAgc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF0gPSBvdGhlclJlY29nbml6ZXI7XG4gICAgICBvdGhlclJlY29nbml6ZXIucmVjb2duaXplV2l0aCh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGRyb3AgdGhlIHNpbXVsdGFuZW91cyBsaW5rLiBpdCBkb2VzbnQgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5kcm9wUmVjb2duaXplV2l0aCA9IGZ1bmN0aW9uIGRyb3BSZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVjb2duaXplV2l0aCcsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgZGVsZXRlIHRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZWNvZ25pemVyIGNhbiBvbmx5IHJ1biB3aGVuIGFuIG90aGVyIGlzIGZhaWxpbmdcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ucmVxdWlyZUZhaWx1cmUgPSBmdW5jdGlvbiByZXF1aXJlRmFpbHVyZShvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAncmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHJlcXVpcmVGYWlsID0gdGhpcy5yZXF1aXJlRmFpbDtcbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG5cbiAgICBpZiAoaW5BcnJheShyZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKSA9PT0gLTEpIHtcbiAgICAgIHJlcXVpcmVGYWlsLnB1c2gob3RoZXJSZWNvZ25pemVyKTtcbiAgICAgIG90aGVyUmVjb2duaXplci5yZXF1aXJlRmFpbHVyZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGRyb3AgdGhlIHJlcXVpcmVGYWlsdXJlIGxpbmsuIGl0IGRvZXMgbm90IHJlbW92ZSB0aGUgbGluayBvbiB0aGUgb3RoZXIgcmVjb2duaXplci5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8uZHJvcFJlcXVpcmVGYWlsdXJlID0gZnVuY3Rpb24gZHJvcFJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuICAgIHZhciBpbmRleCA9IGluQXJyYXkodGhpcy5yZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLnJlcXVpcmVGYWlsLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYXMgcmVxdWlyZSBmYWlsdXJlcyBib29sZWFuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5oYXNSZXF1aXJlRmFpbHVyZXMgPSBmdW5jdGlvbiBoYXNSZXF1aXJlRmFpbHVyZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoID4gMDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGlmIHRoZSByZWNvZ25pemVyIGNhbiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplclxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICovXG5cblxuICBfcHJvdG8uY2FuUmVjb2duaXplV2l0aCA9IGZ1bmN0aW9uIGNhblJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFlvdSBzaG91bGQgdXNlIGB0cnlFbWl0YCBpbnN0ZWFkIG9mIGBlbWl0YCBkaXJlY3RseSB0byBjaGVja1xuICAgKiB0aGF0IGFsbCB0aGUgbmVlZGVkIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQgYmVmb3JlIGVtaXR0aW5nLlxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTtcblxuICAgIGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICAgIHNlbGYubWFuYWdlci5lbWl0KGV2ZW50LCBpbnB1dCk7XG4gICAgfSAvLyAncGFuc3RhcnQnIGFuZCAncGFubW92ZSdcblxuXG4gICAgaWYgKHN0YXRlIDwgU1RBVEVfRU5ERUQpIHtcbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICB9XG5cbiAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCk7IC8vIHNpbXBsZSAnZXZlbnROYW1lJyBldmVudHNcblxuICAgIGlmIChpbnB1dC5hZGRpdGlvbmFsRXZlbnQpIHtcbiAgICAgIC8vIGFkZGl0aW9uYWwgZXZlbnQocGFubGVmdCwgcGFucmlnaHQsIHBpbmNoaW4sIHBpbmNob3V0Li4uKVxuICAgICAgZW1pdChpbnB1dC5hZGRpdGlvbmFsRXZlbnQpO1xuICAgIH0gLy8gcGFuZW5kIGFuZCBwYW5jYW5jZWxcblxuXG4gICAgaWYgKHN0YXRlID49IFNUQVRFX0VOREVEKSB7XG4gICAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCArIHN0YXRlU3RyKHN0YXRlKSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQ2hlY2sgdGhhdCBhbGwgdGhlIHJlcXVpcmUgZmFpbHVyZSByZWNvZ25pemVycyBoYXMgZmFpbGVkLFxuICAgKiBpZiB0cnVlLCBpdCBlbWl0cyBhIGdlc3R1cmUgZXZlbnQsXG4gICAqIG90aGVyd2lzZSwgc2V0dXAgdGhlIHN0YXRlIHRvIEZBSUxFRC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLnRyeUVtaXQgPSBmdW5jdGlvbiB0cnlFbWl0KGlucHV0KSB7XG4gICAgaWYgKHRoaXMuY2FuRW1pdCgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbWl0KGlucHV0KTtcbiAgICB9IC8vIGl0J3MgZmFpbGluZyBhbnl3YXlcblxuXG4gICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbiB3ZSBlbWl0P1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBfcHJvdG8uY2FuRW1pdCA9IGZ1bmN0aW9uIGNhbkVtaXQoKSB7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCkge1xuICAgICAgaWYgKCEodGhpcy5yZXF1aXJlRmFpbFtpXS5zdGF0ZSAmIChTVEFURV9GQUlMRUQgfCBTVEFURV9QT1NTSUJMRSkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogdXBkYXRlIHRoZSByZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgIC8vIG1ha2UgYSBuZXcgY29weSBvZiB0aGUgaW5wdXREYXRhXG4gICAgLy8gc28gd2UgY2FuIGNoYW5nZSB0aGUgaW5wdXREYXRhIHdpdGhvdXQgbWVzc2luZyB1cCB0aGUgb3RoZXIgcmVjb2duaXplcnNcbiAgICB2YXIgaW5wdXREYXRhQ2xvbmUgPSBhc3NpZ24kMSh7fSwgaW5wdXREYXRhKTsgLy8gaXMgaXMgZW5hYmxlZCBhbmQgYWxsb3cgcmVjb2duaXppbmc/XG5cbiAgICBpZiAoIWJvb2xPckZuKHRoaXMub3B0aW9ucy5lbmFibGUsIFt0aGlzLCBpbnB1dERhdGFDbG9uZV0pKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcmVzZXQgd2hlbiB3ZSd2ZSByZWFjaGVkIHRoZSBlbmRcblxuXG4gICAgaWYgKHRoaXMuc3RhdGUgJiAoU1RBVEVfUkVDT0dOSVpFRCB8IFNUQVRFX0NBTkNFTExFRCB8IFNUQVRFX0ZBSUxFRCkpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gdGhpcy5wcm9jZXNzKGlucHV0RGF0YUNsb25lKTsgLy8gdGhlIHJlY29nbml6ZXIgaGFzIHJlY29nbml6ZWQgYSBnZXN0dXJlXG4gICAgLy8gc28gdHJpZ2dlciBhbiBldmVudFxuXG4gICAgaWYgKHRoaXMuc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEIHwgU1RBVEVfRU5ERUQgfCBTVEFURV9DQU5DRUxMRUQpKSB7XG4gICAgICB0aGlzLnRyeUVtaXQoaW5wdXREYXRhQ2xvbmUpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJldHVybiB0aGUgc3RhdGUgb2YgdGhlIHJlY29nbml6ZXJcbiAgICogdGhlIGFjdHVhbCByZWNvZ25pemluZyBoYXBwZW5zIGluIHRoaXMgbWV0aG9kXG4gICAqIEB2aXJ0dWFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICogQHJldHVybnMge2NvbnN0YW50fSBTVEFURVxuICAgKi9cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5cblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXREYXRhKSB7fTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmV0dXJuIHRoZSBwcmVmZXJyZWQgdG91Y2gtYWN0aW9uXG4gICAqIEB2aXJ0dWFsXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG5cblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHt9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FsbGVkIHdoZW4gdGhlIGdlc3R1cmUgaXNuJ3QgYWxsb3dlZCB0byByZWNvZ25pemVcbiAgICogbGlrZSB3aGVuIGFub3RoZXIgaXMgYmVpbmcgcmVjb2duaXplZCBvciBpdCBpcyBkaXNhYmxlZFxuICAgKiBAdmlydHVhbFxuICAgKi9cblxuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge307XG5cbiAgcmV0dXJuIFJlY29nbml6ZXI7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEEgdGFwIGlzIHJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb2luZyBhIHNtYWxsIHRhcC9jbGljay4gTXVsdGlwbGUgdGFwcyBhcmUgcmVjb2duaXplZCBpZiB0aGV5IG9jY3VyXG4gKiBiZXR3ZWVuIHRoZSBnaXZlbiBpbnRlcnZhbCBhbmQgcG9zaXRpb24uIFRoZSBkZWxheSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcmVjb2duaXplIG11bHRpLXRhcHMgd2l0aG91dCBmaXJpbmdcbiAqIGEgc2luZ2xlIHRhcC5cbiAqXG4gKiBUaGUgZXZlbnREYXRhIGZyb20gdGhlIGVtaXR0ZWQgZXZlbnQgY29udGFpbnMgdGhlIHByb3BlcnR5IGB0YXBDb3VudGAsIHdoaWNoIGNvbnRhaW5zIHRoZSBhbW91bnQgb2ZcbiAqIG11bHRpLXRhcHMgYmVpbmcgcmVjb2duaXplZC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBUYXBSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShUYXBSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gVGFwUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3RhcCcsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIHRhcHM6IDEsXG4gICAgICBpbnRlcnZhbDogMzAwLFxuICAgICAgLy8gbWF4IHRpbWUgYmV0d2VlbiB0aGUgbXVsdGktdGFwIHRhcHNcbiAgICAgIHRpbWU6IDI1MCxcbiAgICAgIC8vIG1heCB0aW1lIG9mIHRoZSBwb2ludGVyIHRvIGJlIGRvd24gKGxpa2UgZmluZ2VyIG9uIHRoZSBzY3JlZW4pXG4gICAgICB0aHJlc2hvbGQ6IDksXG4gICAgICAvLyBhIG1pbmltYWwgbW92ZW1lbnQgaXMgb2ssIGJ1dCBrZWVwIGl0IGxvd1xuICAgICAgcG9zVGhyZXNob2xkOiAxMFxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzOyAvLyBwcmV2aW91cyB0aW1lIGFuZCBjZW50ZXIsXG4gICAgLy8gdXNlZCBmb3IgdGFwIGNvdW50aW5nXG5cbiAgICBfdGhpcy5wVGltZSA9IGZhbHNlO1xuICAgIF90aGlzLnBDZW50ZXIgPSBmYWxzZTtcbiAgICBfdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIF90aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgX3RoaXMuY291bnQgPSAwO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUYXBSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9NQU5JUFVMQVRJT05dO1xuICB9O1xuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgIHZhciB2YWxpZFRvdWNoVGltZSA9IGlucHV0LmRlbHRhVGltZSA8IG9wdGlvbnMudGltZTtcbiAgICB0aGlzLnJlc2V0KCk7XG5cbiAgICBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgdGhpcy5jb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICB9IC8vIHdlIG9ubHkgYWxsb3cgbGl0dGxlIG1vdmVtZW50XG4gICAgLy8gYW5kIHdlJ3ZlIHJlYWNoZWQgYW4gZW5kIGV2ZW50LCBzbyBhIHRhcCBpcyBwb3NzaWJsZVxuXG5cbiAgICBpZiAodmFsaWRNb3ZlbWVudCAmJiB2YWxpZFRvdWNoVGltZSAmJiB2YWxpZFBvaW50ZXJzKSB7XG4gICAgICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9PSBJTlBVVF9FTkQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbGlkSW50ZXJ2YWwgPSB0aGlzLnBUaW1lID8gaW5wdXQudGltZVN0YW1wIC0gdGhpcy5wVGltZSA8IG9wdGlvbnMuaW50ZXJ2YWwgOiB0cnVlO1xuICAgICAgdmFyIHZhbGlkTXVsdGlUYXAgPSAhdGhpcy5wQ2VudGVyIHx8IGdldERpc3RhbmNlKHRoaXMucENlbnRlciwgaW5wdXQuY2VudGVyKSA8IG9wdGlvbnMucG9zVGhyZXNob2xkO1xuICAgICAgdGhpcy5wVGltZSA9IGlucHV0LnRpbWVTdGFtcDtcbiAgICAgIHRoaXMucENlbnRlciA9IGlucHV0LmNlbnRlcjtcblxuICAgICAgaWYgKCF2YWxpZE11bHRpVGFwIHx8ICF2YWxpZEludGVydmFsKSB7XG4gICAgICAgIHRoaXMuY291bnQgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb3VudCArPSAxO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbnB1dCA9IGlucHV0OyAvLyBpZiB0YXAgY291bnQgbWF0Y2hlcyB3ZSBoYXZlIHJlY29nbml6ZWQgaXQsXG4gICAgICAvLyBlbHNlIGl0IGhhcyBiZWdhbiByZWNvZ25pemluZy4uLlxuXG4gICAgICB2YXIgdGFwQ291bnQgPSB0aGlzLmNvdW50ICUgb3B0aW9ucy50YXBzO1xuXG4gICAgICBpZiAodGFwQ291bnQgPT09IDApIHtcbiAgICAgICAgLy8gbm8gZmFpbGluZyByZXF1aXJlbWVudHMsIGltbWVkaWF0ZWx5IHRyaWdnZXIgdGhlIHRhcCBldmVudFxuICAgICAgICAvLyBvciB3YWl0IGFzIGxvbmcgYXMgdGhlIG11bHRpdGFwIGludGVydmFsIHRvIHRyaWdnZXJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1JlcXVpcmVGYWlsdXJlcygpKSB7XG4gICAgICAgICAgcmV0dXJuIFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzMi5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG5cbiAgICAgICAgICAgIF90aGlzMi50cnlFbWl0KCk7XG4gICAgICAgICAgfSwgb3B0aW9ucy5pbnRlcnZhbCk7XG4gICAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICBfcHJvdG8uZmFpbFRpbWVvdXQgPSBmdW5jdGlvbiBmYWlsVGltZW91dCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgfSwgdGhpcy5vcHRpb25zLmludGVydmFsKTtcbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICB0aGlzLl9pbnB1dC50YXBDb3VudCA9IHRoaXMuY291bnQ7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsIHRoaXMuX2lucHV0KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFRhcFJlY29nbml6ZXI7XG59KFJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUaGlzIHJlY29nbml6ZXIgaXMganVzdCB1c2VkIGFzIGEgYmFzZSBmb3IgdGhlIHNpbXBsZSBhdHRyaWJ1dGUgcmVjb2duaXplcnMuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuXG52YXIgQXR0clJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKEF0dHJSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gQXR0clJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX1JlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBwb2ludGVyczogMVxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBVc2VkIHRvIGNoZWNrIGlmIGl0IHRoZSByZWNvZ25pemVyIHJlY2VpdmVzIHZhbGlkIGlucHV0LCBsaWtlIGlucHV0LmRpc3RhbmNlID4gMTAuXG4gICAqIEBtZW1iZXJvZiBBdHRyUmVjb2duaXplclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IHJlY29nbml6ZWRcbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gQXR0clJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgdmFyIG9wdGlvblBvaW50ZXJzID0gdGhpcy5vcHRpb25zLnBvaW50ZXJzO1xuICAgIHJldHVybiBvcHRpb25Qb2ludGVycyA9PT0gMCB8fCBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvblBvaW50ZXJzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogUHJvY2VzcyB0aGUgaW5wdXQgYW5kIHJldHVybiB0aGUgc3RhdGUgZm9yIHRoZSByZWNvZ25pemVyXG4gICAqIEBtZW1iZXJvZiBBdHRyUmVjb2duaXplclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICogQHJldHVybnMgeyp9IFN0YXRlXG4gICAqL1xuXG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICB2YXIgZXZlbnRUeXBlID0gaW5wdXQuZXZlbnRUeXBlO1xuICAgIHZhciBpc1JlY29nbml6ZWQgPSBzdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQpO1xuICAgIHZhciBpc1ZhbGlkID0gdGhpcy5hdHRyVGVzdChpbnB1dCk7IC8vIG9uIGNhbmNlbCBpbnB1dCBhbmQgd2UndmUgcmVjb2duaXplZCBiZWZvcmUsIHJldHVybiBTVEFURV9DQU5DRUxMRURcblxuICAgIGlmIChpc1JlY29nbml6ZWQgJiYgKGV2ZW50VHlwZSAmIElOUFVUX0NBTkNFTCB8fCAhaXNWYWxpZCkpIHtcbiAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0NBTkNFTExFRDtcbiAgICB9IGVsc2UgaWYgKGlzUmVjb2duaXplZCB8fCBpc1ZhbGlkKSB7XG4gICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0VOREVEO1xuICAgICAgfSBlbHNlIGlmICghKHN0YXRlICYgU1RBVEVfQkVHQU4pKSB7XG4gICAgICAgIHJldHVybiBTVEFURV9CRUdBTjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0hBTkdFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIHJldHVybiBBdHRyUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGRpcmVjdGlvbiBjb25zIHRvIHN0cmluZ1xuICogQHBhcmFtIHtjb25zdGFudH0gZGlyZWN0aW9uXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGRpcmVjdGlvblN0cihkaXJlY3Rpb24pIHtcbiAgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0RPV04pIHtcbiAgICByZXR1cm4gJ2Rvd24nO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX1VQKSB7XG4gICAgcmV0dXJuICd1cCc7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fTEVGVCkge1xuICAgIHJldHVybiAnbGVmdCc7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fUklHSFQpIHtcbiAgICByZXR1cm4gJ3JpZ2h0JztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUGFuXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBhbmQgbW92ZWQgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBQYW5SZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUGFuUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBQYW5SZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3BhbicsXG4gICAgICB0aHJlc2hvbGQ6IDEwLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICBkaXJlY3Rpb246IERJUkVDVElPTl9BTExcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgICBfdGhpcy5wWCA9IG51bGw7XG4gICAgX3RoaXMucFkgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQYW5SZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcbiAgICB2YXIgYWN0aW9ucyA9IFtdO1xuXG4gICAgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICBhY3Rpb25zLnB1c2goVE9VQ0hfQUNUSU9OX1BBTl9ZKTtcbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICBhY3Rpb25zLnB1c2goVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZGlyZWN0aW9uVGVzdCA9IGZ1bmN0aW9uIGRpcmVjdGlvblRlc3QoaW5wdXQpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgaGFzTW92ZWQgPSB0cnVlO1xuICAgIHZhciBkaXN0YW5jZSA9IGlucHV0LmRpc3RhbmNlO1xuICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5kaXJlY3Rpb247XG4gICAgdmFyIHggPSBpbnB1dC5kZWx0YVg7XG4gICAgdmFyIHkgPSBpbnB1dC5kZWx0YVk7IC8vIGxvY2sgdG8gYXhpcz9cblxuICAgIGlmICghKGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uKSkge1xuICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgICAgZGlyZWN0aW9uID0geCA9PT0gMCA/IERJUkVDVElPTl9OT05FIDogeCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgICAgICAgaGFzTW92ZWQgPSB4ICE9PSB0aGlzLnBYO1xuICAgICAgICBkaXN0YW5jZSA9IE1hdGguYWJzKGlucHV0LmRlbHRhWCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXJlY3Rpb24gPSB5ID09PSAwID8gRElSRUNUSU9OX05PTkUgOiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xuICAgICAgICBoYXNNb3ZlZCA9IHkgIT09IHRoaXMucFk7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFZKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgcmV0dXJuIGhhc01vdmVkICYmIGRpc3RhbmNlID4gb3B0aW9ucy50aHJlc2hvbGQgJiYgZGlyZWN0aW9uICYgb3B0aW9ucy5kaXJlY3Rpb247XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICByZXR1cm4gQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmICggLy8gcmVwbGFjZSB3aXRoIGEgc3VwZXIgY2FsbFxuICAgIHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTiB8fCAhKHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTikgJiYgdGhpcy5kaXJlY3Rpb25UZXN0KGlucHV0KSk7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdGhpcy5wWCA9IGlucHV0LmRlbHRhWDtcbiAgICB0aGlzLnBZID0gaW5wdXQuZGVsdGFZO1xuICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25TdHIoaW5wdXQuZGlyZWN0aW9uKTtcblxuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIGlucHV0LmFkZGl0aW9uYWxFdmVudCA9IHRoaXMub3B0aW9ucy5ldmVudCArIGRpcmVjdGlvbjtcbiAgICB9XG5cbiAgICBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFBhblJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogU3dpcGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBtb3ZpbmcgZmFzdCAodmVsb2NpdHkpLCB3aXRoIGVub3VnaCBkaXN0YW5jZSBpbiB0aGUgYWxsb3dlZCBkaXJlY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFN3aXBlUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFN3aXBlUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBTd2lwZVJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdzd2lwZScsXG4gICAgICB0aHJlc2hvbGQ6IDEwLFxuICAgICAgdmVsb2NpdHk6IDAuMyxcbiAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwsXG4gICAgICBwb2ludGVyczogMVxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN3aXBlUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFBhblJlY29nbml6ZXIucHJvdG90eXBlLmdldFRvdWNoQWN0aW9uLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcbiAgICB2YXIgdmVsb2NpdHk7XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgKERJUkVDVElPTl9IT1JJWk9OVEFMIHwgRElSRUNUSU9OX1ZFUlRJQ0FMKSkge1xuICAgICAgdmVsb2NpdHkgPSBpbnB1dC5vdmVyYWxsVmVsb2NpdHk7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgdmVsb2NpdHkgPSBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgZGlyZWN0aW9uICYgaW5wdXQub2Zmc2V0RGlyZWN0aW9uICYmIGlucHV0LmRpc3RhbmNlID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCAmJiBpbnB1dC5tYXhQb2ludGVycyA9PT0gdGhpcy5vcHRpb25zLnBvaW50ZXJzICYmIGFicyh2ZWxvY2l0eSkgPiB0aGlzLm9wdGlvbnMudmVsb2NpdHkgJiYgaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25TdHIoaW5wdXQub2Zmc2V0RGlyZWN0aW9uKTtcblxuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIGRpcmVjdGlvbiwgaW5wdXQpO1xuICAgIH1cblxuICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiBTd2lwZVJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUGluY2hcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVycyBhcmUgbW92aW5nIHRvd2FyZCAoem9vbS1pbikgb3IgYXdheSBmcm9tIGVhY2ggb3RoZXIgKHpvb20tb3V0KS5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgUGluY2hSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUGluY2hSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFBpbmNoUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3BpbmNoJyxcbiAgICAgIHRocmVzaG9sZDogMCxcbiAgICAgIHBvaW50ZXJzOiAyXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUGluY2hSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIChNYXRoLmFicyhpbnB1dC5zY2FsZSAtIDEpID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCB8fCB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIGlmIChpbnB1dC5zY2FsZSAhPT0gMSkge1xuICAgICAgdmFyIGluT3V0ID0gaW5wdXQuc2NhbGUgPCAxID8gJ2luJyA6ICdvdXQnO1xuICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgaW5PdXQ7XG4gICAgfVxuXG4gICAgX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5lbWl0LmNhbGwodGhpcywgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiBQaW5jaFJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUm90YXRlXG4gKiBSZWNvZ25pemVkIHdoZW4gdHdvIG9yIG1vcmUgcG9pbnRlciBhcmUgbW92aW5nIGluIGEgY2lyY3VsYXIgbW90aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBSb3RhdGVSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUm90YXRlUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBSb3RhdGVSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncm90YXRlJyxcbiAgICAgIHRocmVzaG9sZDogMCxcbiAgICAgIHBvaW50ZXJzOiAyXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUm90YXRlUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiAoTWF0aC5hYnMoaW5wdXQucm90YXRpb24pID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCB8fCB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pO1xuICB9O1xuXG4gIHJldHVybiBSb3RhdGVSZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFByZXNzXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBmb3IgeCBtcyB3aXRob3V0IGFueSBtb3ZlbWVudC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBQcmVzc1JlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFByZXNzUmVjb2duaXplciwgX1JlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFByZXNzUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3ByZXNzJyxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgdGltZTogMjUxLFxuICAgICAgLy8gbWluaW1hbCB0aW1lIG9mIHRoZSBwb2ludGVyIHRvIGJlIHByZXNzZWRcbiAgICAgIHRocmVzaG9sZDogOVxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICAgIF90aGlzLl90aW1lciA9IG51bGw7XG4gICAgX3RoaXMuX2lucHV0ID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUHJlc3NSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9BVVRPXTtcbiAgfTtcblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgIHZhciB2YWxpZE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCBvcHRpb25zLnRocmVzaG9sZDtcbiAgICB2YXIgdmFsaWRUaW1lID0gaW5wdXQuZGVsdGFUaW1lID4gb3B0aW9ucy50aW1lO1xuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIHdlIG9ubHkgYWxsb3cgbGl0dGxlIG1vdmVtZW50XG4gICAgLy8gYW5kIHdlJ3ZlIHJlYWNoZWQgYW4gZW5kIGV2ZW50LCBzbyBhIHRhcCBpcyBwb3NzaWJsZVxuXG4gICAgaWYgKCF2YWxpZE1vdmVtZW50IHx8ICF2YWxpZFBvaW50ZXJzIHx8IGlucHV0LmV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmICF2YWxpZFRpbWUpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9IGVsc2UgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX1NUQVJUKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuc3RhdGUgPSBTVEFURV9SRUNPR05JWkVEO1xuXG4gICAgICAgIF90aGlzMi50cnlFbWl0KCk7XG4gICAgICB9LCBvcHRpb25zLnRpbWUpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQgJiYgaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQgKyBcInVwXCIsIGlucHV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsIHRoaXMuX2lucHV0KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFByZXNzUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBpZiBET00gZXZlbnRzIGFyZSBiZWluZyB0cmlnZ2VyZWQuXG4gICAqIEJ1dCB0aGlzIGlzIHNsb3dlciBhbmQgdW51c2VkIGJ5IHNpbXBsZSBpbXBsZW1lbnRhdGlvbnMsIHNvIGRpc2FibGVkIGJ5IGRlZmF1bHQuXG4gICAqIEB0eXBlIHtCb29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZG9tRXZlbnRzOiBmYWxzZSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogVGhlIHZhbHVlIGZvciB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkvZmFsbGJhY2suXG4gICAqIFdoZW4gc2V0IHRvIGBjb21wdXRlYCBpdCB3aWxsIG1hZ2ljYWxseSBzZXQgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIGFkZGVkIHJlY29nbml6ZXJzLlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKiBAZGVmYXVsdCBjb21wdXRlXG4gICAqL1xuICB0b3VjaEFjdGlvbjogVE9VQ0hfQUNUSU9OX0NPTVBVVEUsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtCb29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBlbmFibGU6IHRydWUsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEVYUEVSSU1FTlRBTCBGRUFUVVJFIC0tIGNhbiBiZSByZW1vdmVkL2NoYW5nZWRcbiAgICogQ2hhbmdlIHRoZSBwYXJlbnQgaW5wdXQgdGFyZ2V0IGVsZW1lbnQuXG4gICAqIElmIE51bGwsIHRoZW4gaXQgaXMgYmVpbmcgc2V0IHRoZSB0byBtYWluIGVsZW1lbnQuXG4gICAqIEB0eXBlIHtOdWxsfEV2ZW50VGFyZ2V0fVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBpbnB1dFRhcmdldDogbnVsbCxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZm9yY2UgYW4gaW5wdXQgY2xhc3NcbiAgICogQHR5cGUge051bGx8RnVuY3Rpb259XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGlucHV0Q2xhc3M6IG51bGwsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFNvbWUgQ1NTIHByb3BlcnRpZXMgY2FuIGJlIHVzZWQgdG8gaW1wcm92ZSB0aGUgd29ya2luZyBvZiBIYW1tZXIuXG4gICAqIEFkZCB0aGVtIHRvIHRoaXMgbWV0aG9kIGFuZCB0aGV5IHdpbGwgYmUgc2V0IHdoZW4gY3JlYXRpbmcgYSBuZXcgTWFuYWdlci5cbiAgICogQG5hbWVzcGFjZVxuICAgKi9cbiAgY3NzUHJvcHM6IHtcbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGVzIHRleHQgc2VsZWN0aW9uIHRvIGltcHJvdmUgdGhlIGRyYWdnaW5nIGdlc3R1cmUuIE1haW5seSBmb3IgZGVza3RvcCBicm93c2Vycy5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlIHRoZSBXaW5kb3dzIFBob25lIGdyaXBwZXJzIHdoZW4gcHJlc3NpbmcgYW4gZWxlbWVudC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHRvdWNoU2VsZWN0OiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZXMgdGhlIGRlZmF1bHQgY2FsbG91dCBzaG93biB3aGVuIHlvdSB0b3VjaCBhbmQgaG9sZCBhIHRvdWNoIHRhcmdldC5cbiAgICAgKiBPbiBpT1MsIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0IHN1Y2ggYXMgYSBsaW5rLCBTYWZhcmkgZGlzcGxheXNcbiAgICAgKiBhIGNhbGxvdXQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGluay4gVGhpcyBwcm9wZXJ0eSBhbGxvd3MgeW91IHRvIGRpc2FibGUgdGhhdCBjYWxsb3V0LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdG91Y2hDYWxsb3V0OiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgem9vbWluZyBpcyBlbmFibGVkLiBVc2VkIGJ5IElFMTA+XG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICBjb250ZW50Wm9vbWluZzogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIFNwZWNpZmllcyB0aGF0IGFuIGVudGlyZSBlbGVtZW50IHNob3VsZCBiZSBkcmFnZ2FibGUgaW5zdGVhZCBvZiBpdHMgY29udGVudHMuIE1haW5seSBmb3IgZGVza3RvcCBicm93c2Vycy5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHVzZXJEcmFnOiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogT3ZlcnJpZGVzIHRoZSBoaWdobGlnaHQgY29sb3Igc2hvd24gd2hlbiB0aGUgdXNlciB0YXBzIGEgbGluayBvciBhIEphdmFTY3JpcHRcbiAgICAgKiBjbGlja2FibGUgZWxlbWVudCBpbiBpT1MuIFRoaXMgcHJvcGVydHkgb2JleXMgdGhlIGFscGhhIHZhbHVlLCBpZiBzcGVjaWZpZWQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAncmdiYSgwLDAsMCwwKSdcbiAgICAgKi9cbiAgICB0YXBIaWdobGlnaHRDb2xvcjogXCJyZ2JhKDAsMCwwLDApXCJcbiAgfVxufTtcbi8qKlxuICogQHByaXZhdGVcbiAqIERlZmF1bHQgcmVjb2duaXplciBzZXR1cCB3aGVuIGNhbGxpbmcgYEhhbW1lcigpYFxuICogV2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyIHRoZXNlIHdpbGwgYmUgc2tpcHBlZC5cbiAqIFRoaXMgaXMgc2VwYXJhdGVkIHdpdGggb3RoZXIgZGVmYXVsdHMgYmVjYXVzZSBvZiB0cmVlLXNoYWtpbmcuXG4gKiBAdHlwZSB7QXJyYXl9XG4gKi9cblxudmFyIHByZXNldCA9IFtbUm90YXRlUmVjb2duaXplciwge1xuICBlbmFibGU6IGZhbHNlXG59XSwgW1BpbmNoUmVjb2duaXplciwge1xuICBlbmFibGU6IGZhbHNlXG59LCBbJ3JvdGF0ZSddXSwgW1N3aXBlUmVjb2duaXplciwge1xuICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG59XSwgW1BhblJlY29nbml6ZXIsIHtcbiAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTFxufSwgWydzd2lwZSddXSwgW1RhcFJlY29nbml6ZXJdLCBbVGFwUmVjb2duaXplciwge1xuICBldmVudDogJ2RvdWJsZXRhcCcsXG4gIHRhcHM6IDJcbn0sIFsndGFwJ11dLCBbUHJlc3NSZWNvZ25pemVyXV07XG5cbnZhciBTVE9QID0gMTtcbnZhciBGT1JDRURfU1RPUCA9IDI7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBhZGQvcmVtb3ZlIHRoZSBjc3MgcHJvcGVydGllcyBhcyBkZWZpbmVkIGluIG1hbmFnZXIub3B0aW9ucy5jc3NQcm9wc1xuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGFkZFxuICovXG5cbmZ1bmN0aW9uIHRvZ2dsZUNzc1Byb3BzKG1hbmFnZXIsIGFkZCkge1xuICB2YXIgZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcblxuICBpZiAoIWVsZW1lbnQuc3R5bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcHJvcDtcbiAgZWFjaChtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgIHByb3AgPSBwcmVmaXhlZChlbGVtZW50LnN0eWxlLCBuYW1lKTtcblxuICAgIGlmIChhZGQpIHtcbiAgICAgIG1hbmFnZXIub2xkQ3NzUHJvcHNbcHJvcF0gPSBlbGVtZW50LnN0eWxlW3Byb3BdO1xuICAgICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSB8fCBcIlwiO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKCFhZGQpIHtcbiAgICBtYW5hZ2VyLm9sZENzc1Byb3BzID0ge307XG4gIH1cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqIHRyaWdnZXIgZG9tIGV2ZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gKi9cblxuXG5mdW5jdGlvbiB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpIHtcbiAgdmFyIGdlc3R1cmVFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gIGdlc3R1cmVFdmVudC5pbml0RXZlbnQoZXZlbnQsIHRydWUsIHRydWUpO1xuICBnZXN0dXJlRXZlbnQuZ2VzdHVyZSA9IGRhdGE7XG4gIGRhdGEudGFyZ2V0LmRpc3BhdGNoRXZlbnQoZ2VzdHVyZUV2ZW50KTtcbn1cbi8qKlxuKiBAcHJpdmF0ZVxuICogTWFuYWdlclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxuXG52YXIgTWFuYWdlciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE1hbmFnZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBhc3NpZ24kMSh7fSwgZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuICAgIHRoaXMub3B0aW9ucy5pbnB1dFRhcmdldCA9IHRoaXMub3B0aW9ucy5pbnB1dFRhcmdldCB8fCBlbGVtZW50O1xuICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICB0aGlzLnNlc3Npb24gPSB7fTtcbiAgICB0aGlzLnJlY29nbml6ZXJzID0gW107XG4gICAgdGhpcy5vbGRDc3NQcm9wcyA9IHt9O1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5pbnB1dCA9IGNyZWF0ZUlucHV0SW5zdGFuY2UodGhpcyk7XG4gICAgdGhpcy50b3VjaEFjdGlvbiA9IG5ldyBUb3VjaEFjdGlvbih0aGlzLCB0aGlzLm9wdGlvbnMudG91Y2hBY3Rpb24pO1xuICAgIHRvZ2dsZUNzc1Byb3BzKHRoaXMsIHRydWUpO1xuICAgIGVhY2godGhpcy5vcHRpb25zLnJlY29nbml6ZXJzLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIHJlY29nbml6ZXIgPSBfdGhpcy5hZGQobmV3IGl0ZW1bMF0oaXRlbVsxXSkpO1xuXG4gICAgICBpdGVtWzJdICYmIHJlY29nbml6ZXIucmVjb2duaXplV2l0aChpdGVtWzJdKTtcbiAgICAgIGl0ZW1bM10gJiYgcmVjb2duaXplci5yZXF1aXJlRmFpbHVyZShpdGVtWzNdKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge01hbmFnZXJ9XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IE1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQob3B0aW9ucykge1xuICAgIGFzc2lnbiQxKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7IC8vIE9wdGlvbnMgdGhhdCBuZWVkIGEgbGl0dGxlIG1vcmUgc2V0dXBcblxuICAgIGlmIChvcHRpb25zLnRvdWNoQWN0aW9uKSB7XG4gICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmlucHV0VGFyZ2V0KSB7XG4gICAgICAvLyBDbGVhbiB1cCBleGlzdGluZyBldmVudCBsaXN0ZW5lcnMgYW5kIHJlaW5pdGlhbGl6ZVxuICAgICAgdGhpcy5pbnB1dC5kZXN0cm95KCk7XG4gICAgICB0aGlzLmlucHV0LnRhcmdldCA9IG9wdGlvbnMuaW5wdXRUYXJnZXQ7XG4gICAgICB0aGlzLmlucHV0LmluaXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHN0b3AgcmVjb2duaXppbmcgZm9yIHRoaXMgc2Vzc2lvbi5cbiAgICogVGhpcyBzZXNzaW9uIHdpbGwgYmUgZGlzY2FyZGVkLCB3aGVuIGEgbmV3IFtpbnB1dF1zdGFydCBldmVudCBpcyBmaXJlZC5cbiAgICogV2hlbiBmb3JjZWQsIHRoZSByZWNvZ25pemVyIGN5Y2xlIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHkuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2ZvcmNlXVxuICAgKi9cblxuXG4gIF9wcm90by5zdG9wID0gZnVuY3Rpb24gc3RvcChmb3JjZSkge1xuICAgIHRoaXMuc2Vzc2lvbi5zdG9wcGVkID0gZm9yY2UgPyBGT1JDRURfU1RPUCA6IFNUT1A7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBydW4gdGhlIHJlY29nbml6ZXJzIVxuICAgKiBjYWxsZWQgYnkgdGhlIGlucHV0SGFuZGxlciBmdW5jdGlvbiBvbiBldmVyeSBtb3ZlbWVudCBvZiB0aGUgcG9pbnRlcnMgKHRvdWNoZXMpXG4gICAqIGl0IHdhbGtzIHRocm91Z2ggYWxsIHRoZSByZWNvZ25pemVycyBhbmQgdHJpZXMgdG8gZGV0ZWN0IHRoZSBnZXN0dXJlIHRoYXQgaXMgYmVpbmcgbWFkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZSA9IGZ1bmN0aW9uIHJlY29nbml6ZShpbnB1dERhdGEpIHtcbiAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcblxuICAgIGlmIChzZXNzaW9uLnN0b3BwZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHJ1biB0aGUgdG91Y2gtYWN0aW9uIHBvbHlmaWxsXG5cblxuICAgIHRoaXMudG91Y2hBY3Rpb24ucHJldmVudERlZmF1bHRzKGlucHV0RGF0YSk7XG4gICAgdmFyIHJlY29nbml6ZXI7XG4gICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVyczsgLy8gdGhpcyBob2xkcyB0aGUgcmVjb2duaXplciB0aGF0IGlzIGJlaW5nIHJlY29nbml6ZWQuXG4gICAgLy8gc28gdGhlIHJlY29nbml6ZXIncyBzdGF0ZSBuZWVkcyB0byBiZSBCRUdBTiwgQ0hBTkdFRCwgRU5ERUQgb3IgUkVDT0dOSVpFRFxuICAgIC8vIGlmIG5vIHJlY29nbml6ZXIgaXMgZGV0ZWN0aW5nIGEgdGhpbmcsIGl0IGlzIHNldCB0byBgbnVsbGBcblxuICAgIHZhciBjdXJSZWNvZ25pemVyID0gc2Vzc2lvbi5jdXJSZWNvZ25pemVyOyAvLyByZXNldCB3aGVuIHRoZSBsYXN0IHJlY29nbml6ZXIgaXMgcmVjb2duaXplZFxuICAgIC8vIG9yIHdoZW4gd2UncmUgaW4gYSBuZXcgc2Vzc2lvblxuXG4gICAgaWYgKCFjdXJSZWNvZ25pemVyIHx8IGN1clJlY29nbml6ZXIgJiYgY3VyUmVjb2duaXplci5zdGF0ZSAmIFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHNlc3Npb24uY3VyUmVjb2duaXplciA9IG51bGw7XG4gICAgICBjdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHJlY29nbml6ZXJzLmxlbmd0aCkge1xuICAgICAgcmVjb2duaXplciA9IHJlY29nbml6ZXJzW2ldOyAvLyBmaW5kIG91dCBpZiB3ZSBhcmUgYWxsb3dlZCB0cnkgdG8gcmVjb2duaXplIHRoZSBpbnB1dCBmb3IgdGhpcyBvbmUuXG4gICAgICAvLyAxLiAgIGFsbG93IGlmIHRoZSBzZXNzaW9uIGlzIE5PVCBmb3JjZWQgc3RvcHBlZCAoc2VlIHRoZSAuc3RvcCgpIG1ldGhvZClcbiAgICAgIC8vIDIuICAgYWxsb3cgaWYgd2Ugc3RpbGwgaGF2ZW4ndCByZWNvZ25pemVkIGEgZ2VzdHVyZSBpbiB0aGlzIHNlc3Npb24sIG9yIHRoZSB0aGlzIHJlY29nbml6ZXIgaXMgdGhlIG9uZVxuICAgICAgLy8gICAgICB0aGF0IGlzIGJlaW5nIHJlY29nbml6ZWQuXG4gICAgICAvLyAzLiAgIGFsbG93IGlmIHRoZSByZWNvZ25pemVyIGlzIGFsbG93ZWQgdG8gcnVuIHNpbXVsdGFuZW91cyB3aXRoIHRoZSBjdXJyZW50IHJlY29nbml6ZWQgcmVjb2duaXplci5cbiAgICAgIC8vICAgICAgdGhpcyBjYW4gYmUgc2V0dXAgd2l0aCB0aGUgYHJlY29nbml6ZVdpdGgoKWAgbWV0aG9kIG9uIHRoZSByZWNvZ25pemVyLlxuXG4gICAgICBpZiAoc2Vzc2lvbi5zdG9wcGVkICE9PSBGT1JDRURfU1RPUCAmJiAoIC8vIDFcbiAgICAgICFjdXJSZWNvZ25pemVyIHx8IHJlY29nbml6ZXIgPT09IGN1clJlY29nbml6ZXIgfHwgLy8gMlxuICAgICAgcmVjb2duaXplci5jYW5SZWNvZ25pemVXaXRoKGN1clJlY29nbml6ZXIpKSkge1xuICAgICAgICAvLyAzXG4gICAgICAgIHJlY29nbml6ZXIucmVjb2duaXplKGlucHV0RGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNvZ25pemVyLnJlc2V0KCk7XG4gICAgICB9IC8vIGlmIHRoZSByZWNvZ25pemVyIGhhcyBiZWVuIHJlY29nbml6aW5nIHRoZSBpbnB1dCBhcyBhIHZhbGlkIGdlc3R1cmUsIHdlIHdhbnQgdG8gc3RvcmUgdGhpcyBvbmUgYXMgdGhlXG4gICAgICAvLyBjdXJyZW50IGFjdGl2ZSByZWNvZ25pemVyLiBidXQgb25seSBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4gYWN0aXZlIHJlY29nbml6ZXJcblxuXG4gICAgICBpZiAoIWN1clJlY29nbml6ZXIgJiYgcmVjb2duaXplci5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCkpIHtcbiAgICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgICAgY3VyUmVjb2duaXplciA9IHJlY29nbml6ZXI7XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBnZXQgYSByZWNvZ25pemVyIGJ5IGl0cyBldmVudCBuYW1lLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE51bGx9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmdldCA9IGZ1bmN0aW9uIGdldChyZWNvZ25pemVyKSB7XG4gICAgaWYgKHJlY29nbml6ZXIgaW5zdGFuY2VvZiBSZWNvZ25pemVyKSB7XG4gICAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgICB9XG5cbiAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWNvZ25pemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlY29nbml6ZXJzW2ldLm9wdGlvbnMuZXZlbnQgPT09IHJlY29nbml6ZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlY29nbml6ZXJzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgYWRkIGEgcmVjb2duaXplciB0byB0aGUgbWFuYWdlclxuICAgKiBleGlzdGluZyByZWNvZ25pemVycyB3aXRoIHRoZSBzYW1lIGV2ZW50IG5hbWUgd2lsbCBiZSByZW1vdmVkXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gcmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxNYW5hZ2VyfVxuICAgKi9cblxuXG4gIF9wcm90by5hZGQgPSBmdW5jdGlvbiBhZGQocmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhyZWNvZ25pemVyLCBcImFkZFwiLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSAvLyByZW1vdmUgZXhpc3RpbmdcblxuXG4gICAgdmFyIGV4aXN0aW5nID0gdGhpcy5nZXQocmVjb2duaXplci5vcHRpb25zLmV2ZW50KTtcblxuICAgIGlmIChleGlzdGluZykge1xuICAgICAgdGhpcy5yZW1vdmUoZXhpc3RpbmcpO1xuICAgIH1cblxuICAgIHRoaXMucmVjb2duaXplcnMucHVzaChyZWNvZ25pemVyKTtcbiAgICByZWNvZ25pemVyLm1hbmFnZXIgPSB0aGlzO1xuICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgcmV0dXJuIHJlY29nbml6ZXI7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZW1vdmUgYSByZWNvZ25pemVyIGJ5IG5hbWUgb3IgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gcmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICovXG5cblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKHJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgXCJyZW1vdmVcIiwgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRSZWNvZ25pemVyID0gdGhpcy5nZXQocmVjb2duaXplcik7IC8vIGxldCdzIG1ha2Ugc3VyZSB0aGlzIHJlY29nbml6ZXIgZXhpc3RzXG5cbiAgICBpZiAocmVjb2duaXplcikge1xuICAgICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcbiAgICAgIHZhciBpbmRleCA9IGluQXJyYXkocmVjb2duaXplcnMsIHRhcmdldFJlY29nbml6ZXIpO1xuXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHJlY29nbml6ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBiaW5kIGV2ZW50XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICAgKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLm9uID0gZnVuY3Rpb24gb24oZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkIHx8IGhhbmRsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaGFuZGxlcnNbZXZlbnRdID0gaGFuZGxlcnNbZXZlbnRdIHx8IFtdO1xuICAgICAgaGFuZGxlcnNbZXZlbnRdLnB1c2goaGFuZGxlcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSB1bmJpbmQgZXZlbnQsIGxlYXZlIGVtaXQgYmxhbmsgdG8gcmVtb3ZlIGFsbCBoYW5kbGVyc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtoYW5kbGVyXVxuICAgKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLm9mZiA9IGZ1bmN0aW9uIG9mZihldmVudHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgZWFjaChzcGxpdFN0cihldmVudHMpLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICBkZWxldGUgaGFuZGxlcnNbZXZlbnRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlcnNbZXZlbnRdICYmIGhhbmRsZXJzW2V2ZW50XS5zcGxpY2UoaW5BcnJheShoYW5kbGVyc1tldmVudF0sIGhhbmRsZXIpLCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIGVtaXQgZXZlbnQgdG8gdGhlIGxpc3RlbmVyc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICovXG5cblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGRhdGEpIHtcbiAgICAvLyB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dlciBkb20gZXZlbnRzXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kb21FdmVudHMpIHtcbiAgICAgIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSk7XG4gICAgfSAvLyBubyBoYW5kbGVycywgc28gc2tpcCBpdCBhbGxcblxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc1tldmVudF0gJiYgdGhpcy5oYW5kbGVyc1tldmVudF0uc2xpY2UoKTtcblxuICAgIGlmICghaGFuZGxlcnMgfHwgIWhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGEudHlwZSA9IGV2ZW50O1xuXG4gICAgZGF0YS5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRhdGEuc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgIGhhbmRsZXJzW2ldKGRhdGEpO1xuICAgICAgaSsrO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGRlc3Ryb3kgdGhlIG1hbmFnZXIgYW5kIHVuYmluZHMgYWxsIGV2ZW50c1xuICAgKiBpdCBkb2Vzbid0IHVuYmluZCBkb20gZXZlbnRzLCB0aGF0IGlzIHRoZSB1c2VyIG93biByZXNwb25zaWJpbGl0eVxuICAgKi9cblxuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmVsZW1lbnQgJiYgdG9nZ2xlQ3NzUHJvcHModGhpcywgZmFsc2UpO1xuICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICB0aGlzLnNlc3Npb24gPSB7fTtcbiAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICB0aGlzLmVsZW1lbnQgPSBudWxsO1xuICB9O1xuXG4gIHJldHVybiBNYW5hZ2VyO1xufSgpO1xuXG52YXIgU0lOR0xFX1RPVUNIX0lOUFVUX01BUCA9IHtcbiAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gIHRvdWNobW92ZTogSU5QVVRfTU9WRSxcbiAgdG91Y2hlbmQ6IElOUFVUX0VORCxcbiAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcbnZhciBTSU5HTEVfVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0JztcbnZhciBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBUb3VjaCBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgU2luZ2xlVG91Y2hJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKFNpbmdsZVRvdWNoSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gU2luZ2xlVG91Y2hJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBTaW5nbGVUb3VjaElucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldlRhcmdldCA9IFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gU0lOR0xFX1RPVUNIX1dJTkRPV19FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU2luZ2xlVG91Y2hJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHR5cGUgPSBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBzaG91bGQgd2UgaGFuZGxlIHRoZSB0b3VjaCBldmVudHM/XG5cbiAgICBpZiAodHlwZSA9PT0gSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdG91Y2hlcyA9IG5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMuY2FsbCh0aGlzLCBldiwgdHlwZSk7IC8vIHdoZW4gZG9uZSwgcmVzZXQgdGhlIHN0YXJ0ZWQgc3RhdGVcblxuICAgIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgdG91Y2hlc1swXS5sZW5ndGggLSB0b3VjaGVzWzFdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIHR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiB0b3VjaGVzWzFdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gU2luZ2xlVG91Y2hJbnB1dDtcbn0oSW5wdXQpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVTaW5nbGVUb3VjaGVzKGV2LCB0eXBlKSB7XG4gIHZhciBhbGwgPSB0b0FycmF5KGV2LnRvdWNoZXMpO1xuICB2YXIgY2hhbmdlZCA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpO1xuXG4gIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICBhbGwgPSB1bmlxdWVBcnJheShhbGwuY29uY2F0KGNoYW5nZWQpLCAnaWRlbnRpZmllcicsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIFthbGwsIGNoYW5nZWRdO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3cmFwIGEgbWV0aG9kIHdpdGggYSBkZXByZWNhdGlvbiB3YXJuaW5nIGFuZCBzdGFjayB0cmFjZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBuZXcgZnVuY3Rpb24gd3JhcHBpbmcgdGhlIHN1cHBsaWVkIG1ldGhvZC5cbiAqL1xuZnVuY3Rpb24gZGVwcmVjYXRlKG1ldGhvZCwgbmFtZSwgbWVzc2FnZSkge1xuICB2YXIgZGVwcmVjYXRpb25NZXNzYWdlID0gXCJERVBSRUNBVEVEIE1FVEhPRDogXCIgKyBuYW1lICsgXCJcXG5cIiArIG1lc3NhZ2UgKyBcIiBBVCBcXG5cIjtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZSA9IG5ldyBFcnJvcignZ2V0LXN0YWNrLXRyYWNlJyk7XG4gICAgdmFyIHN0YWNrID0gZSAmJiBlLnN0YWNrID8gZS5zdGFjay5yZXBsYWNlKC9eW15cXChdKz9bXFxuJF0vZ20sICcnKS5yZXBsYWNlKC9eXFxzK2F0XFxzKy9nbSwgJycpLnJlcGxhY2UoL15PYmplY3QuPGFub255bW91cz5cXHMqXFwoL2dtLCAne2Fub255bW91c30oKUAnKSA6ICdVbmtub3duIFN0YWNrIFRyYWNlJztcbiAgICB2YXIgbG9nID0gd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLndhcm4gfHwgd2luZG93LmNvbnNvbGUubG9nKTtcblxuICAgIGlmIChsb2cpIHtcbiAgICAgIGxvZy5jYWxsKHdpbmRvdy5jb25zb2xlLCBkZXByZWNhdGlvbk1lc3NhZ2UsIHN0YWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGV4dGVuZCBvYmplY3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgaW4gZGVzdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBvbmVzIGluIHNyYy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXN0XG4gKiBAcGFyYW0ge09iamVjdH0gc3JjXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFttZXJnZT1mYWxzZV1cbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xuXG52YXIgZXh0ZW5kID0gZGVwcmVjYXRlKGZ1bmN0aW9uIChkZXN0LCBzcmMsIG1lcmdlKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwga2V5cy5sZW5ndGgpIHtcbiAgICBpZiAoIW1lcmdlIHx8IG1lcmdlICYmIGRlc3Rba2V5c1tpXV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVzdFtrZXlzW2ldXSA9IHNyY1trZXlzW2ldXTtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn0sICdleHRlbmQnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBtZXJnZSB0aGUgdmFsdWVzIGZyb20gc3JjIGluIHRoZSBkZXN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIHRoYXQgZXhpc3QgaW4gZGVzdCB3aWxsIG5vdCBiZSBvdmVyd3JpdHRlbiBieSBzcmNcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXN0XG4gKiBAcGFyYW0ge09iamVjdH0gc3JjXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBkZXN0XG4gKi9cblxudmFyIG1lcmdlID0gZGVwcmVjYXRlKGZ1bmN0aW9uIChkZXN0LCBzcmMpIHtcbiAgcmV0dXJuIGV4dGVuZChkZXN0LCBzcmMsIHRydWUpO1xufSwgJ21lcmdlJywgJ1VzZSBgYXNzaWduYC4nKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc2ltcGxlIGNsYXNzIGluaGVyaXRhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGlsZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYmFzZVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXVxuICovXG5cbmZ1bmN0aW9uIGluaGVyaXQoY2hpbGQsIGJhc2UsIHByb3BlcnRpZXMpIHtcbiAgdmFyIGJhc2VQID0gYmFzZS5wcm90b3R5cGU7XG4gIHZhciBjaGlsZFA7XG4gIGNoaWxkUCA9IGNoaWxkLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYmFzZVApO1xuICBjaGlsZFAuY29uc3RydWN0b3IgPSBjaGlsZDtcbiAgY2hpbGRQLl9zdXBlciA9IGJhc2VQO1xuXG4gIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgYXNzaWduJDEoY2hpbGRQLCBwcm9wZXJ0aWVzKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzaW1wbGUgZnVuY3Rpb24gYmluZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGJpbmRGbihmbiwgY29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm91bmRGbigpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogU2ltcGxlIHdheSB0byBjcmVhdGUgYSBtYW5hZ2VyIHdpdGggYSBkZWZhdWx0IHNldCBvZiByZWNvZ25pemVycy5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBIYW1tZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICB2YXIgSGFtbWVyID1cbiAgLyoqXG4gICAgKiBAcHJpdmF0ZVxuICAgICogQGNvbnN0IHtzdHJpbmd9XG4gICAgKi9cbiAgZnVuY3Rpb24gSGFtbWVyKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNYW5hZ2VyKGVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgIHJlY29nbml6ZXJzOiBwcmVzZXQuY29uY2F0KClcbiAgICB9LCBvcHRpb25zKSk7XG4gIH07XG5cbiAgSGFtbWVyLlZFUlNJT04gPSBcIjIuMC4xNy1yY1wiO1xuICBIYW1tZXIuRElSRUNUSU9OX0FMTCA9IERJUkVDVElPTl9BTEw7XG4gIEhhbW1lci5ESVJFQ1RJT05fRE9XTiA9IERJUkVDVElPTl9ET1dOO1xuICBIYW1tZXIuRElSRUNUSU9OX0xFRlQgPSBESVJFQ1RJT05fTEVGVDtcbiAgSGFtbWVyLkRJUkVDVElPTl9SSUdIVCA9IERJUkVDVElPTl9SSUdIVDtcbiAgSGFtbWVyLkRJUkVDVElPTl9VUCA9IERJUkVDVElPTl9VUDtcbiAgSGFtbWVyLkRJUkVDVElPTl9IT1JJWk9OVEFMID0gRElSRUNUSU9OX0hPUklaT05UQUw7XG4gIEhhbW1lci5ESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVkVSVElDQUw7XG4gIEhhbW1lci5ESVJFQ1RJT05fTk9ORSA9IERJUkVDVElPTl9OT05FO1xuICBIYW1tZXIuRElSRUNUSU9OX0RPV04gPSBESVJFQ1RJT05fRE9XTjtcbiAgSGFtbWVyLklOUFVUX1NUQVJUID0gSU5QVVRfU1RBUlQ7XG4gIEhhbW1lci5JTlBVVF9NT1ZFID0gSU5QVVRfTU9WRTtcbiAgSGFtbWVyLklOUFVUX0VORCA9IElOUFVUX0VORDtcbiAgSGFtbWVyLklOUFVUX0NBTkNFTCA9IElOUFVUX0NBTkNFTDtcbiAgSGFtbWVyLlNUQVRFX1BPU1NJQkxFID0gU1RBVEVfUE9TU0lCTEU7XG4gIEhhbW1lci5TVEFURV9CRUdBTiA9IFNUQVRFX0JFR0FOO1xuICBIYW1tZXIuU1RBVEVfQ0hBTkdFRCA9IFNUQVRFX0NIQU5HRUQ7XG4gIEhhbW1lci5TVEFURV9FTkRFRCA9IFNUQVRFX0VOREVEO1xuICBIYW1tZXIuU1RBVEVfUkVDT0dOSVpFRCA9IFNUQVRFX1JFQ09HTklaRUQ7XG4gIEhhbW1lci5TVEFURV9DQU5DRUxMRUQgPSBTVEFURV9DQU5DRUxMRUQ7XG4gIEhhbW1lci5TVEFURV9GQUlMRUQgPSBTVEFURV9GQUlMRUQ7XG4gIEhhbW1lci5NYW5hZ2VyID0gTWFuYWdlcjtcbiAgSGFtbWVyLklucHV0ID0gSW5wdXQ7XG4gIEhhbW1lci5Ub3VjaEFjdGlvbiA9IFRvdWNoQWN0aW9uO1xuICBIYW1tZXIuVG91Y2hJbnB1dCA9IFRvdWNoSW5wdXQ7XG4gIEhhbW1lci5Nb3VzZUlucHV0ID0gTW91c2VJbnB1dDtcbiAgSGFtbWVyLlBvaW50ZXJFdmVudElucHV0ID0gUG9pbnRlckV2ZW50SW5wdXQ7XG4gIEhhbW1lci5Ub3VjaE1vdXNlSW5wdXQgPSBUb3VjaE1vdXNlSW5wdXQ7XG4gIEhhbW1lci5TaW5nbGVUb3VjaElucHV0ID0gU2luZ2xlVG91Y2hJbnB1dDtcbiAgSGFtbWVyLlJlY29nbml6ZXIgPSBSZWNvZ25pemVyO1xuICBIYW1tZXIuQXR0clJlY29nbml6ZXIgPSBBdHRyUmVjb2duaXplcjtcbiAgSGFtbWVyLlRhcCA9IFRhcFJlY29nbml6ZXI7XG4gIEhhbW1lci5QYW4gPSBQYW5SZWNvZ25pemVyO1xuICBIYW1tZXIuU3dpcGUgPSBTd2lwZVJlY29nbml6ZXI7XG4gIEhhbW1lci5QaW5jaCA9IFBpbmNoUmVjb2duaXplcjtcbiAgSGFtbWVyLlJvdGF0ZSA9IFJvdGF0ZVJlY29nbml6ZXI7XG4gIEhhbW1lci5QcmVzcyA9IFByZXNzUmVjb2duaXplcjtcbiAgSGFtbWVyLm9uID0gYWRkRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5vZmYgPSByZW1vdmVFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLmVhY2ggPSBlYWNoO1xuICBIYW1tZXIubWVyZ2UgPSBtZXJnZTtcbiAgSGFtbWVyLmV4dGVuZCA9IGV4dGVuZDtcbiAgSGFtbWVyLmJpbmRGbiA9IGJpbmRGbjtcbiAgSGFtbWVyLmFzc2lnbiA9IGFzc2lnbiQxO1xuICBIYW1tZXIuaW5oZXJpdCA9IGluaGVyaXQ7XG4gIEhhbW1lci5iaW5kRm4gPSBiaW5kRm47XG4gIEhhbW1lci5wcmVmaXhlZCA9IHByZWZpeGVkO1xuICBIYW1tZXIudG9BcnJheSA9IHRvQXJyYXk7XG4gIEhhbW1lci5pbkFycmF5ID0gaW5BcnJheTtcbiAgSGFtbWVyLnVuaXF1ZUFycmF5ID0gdW5pcXVlQXJyYXk7XG4gIEhhbW1lci5zcGxpdFN0ciA9IHNwbGl0U3RyO1xuICBIYW1tZXIuYm9vbE9yRm4gPSBib29sT3JGbjtcbiAgSGFtbWVyLmhhc1BhcmVudCA9IGhhc1BhcmVudDtcbiAgSGFtbWVyLmFkZEV2ZW50TGlzdGVuZXJzID0gYWRkRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5yZW1vdmVFdmVudExpc3RlbmVycyA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIuZGVmYXVsdHMgPSBhc3NpZ24kMSh7fSwgZGVmYXVsdHMsIHtcbiAgICBwcmVzZXQ6IHByZXNldFxuICB9KTtcbiAgcmV0dXJuIEhhbW1lcjtcbn0oKTtcblxuLy8gIHN0eWxlIGxvYWRlciBidXQgYnkgc2NyaXB0IHRhZywgbm90IGJ5IHRoZSBsb2FkZXIuXG5cbnZhciBkZWZhdWx0cyQxID0gSGFtbWVyLmRlZmF1bHRzO1xuXG5leHBvcnQgZGVmYXVsdCBIYW1tZXI7XG5leHBvcnQgeyBJTlBVVF9TVEFSVCwgSU5QVVRfTU9WRSwgSU5QVVRfRU5ELCBJTlBVVF9DQU5DRUwsIFNUQVRFX1BPU1NJQkxFLCBTVEFURV9CRUdBTiwgU1RBVEVfQ0hBTkdFRCwgU1RBVEVfRU5ERUQsIFNUQVRFX1JFQ09HTklaRUQsIFNUQVRFX0NBTkNFTExFRCwgU1RBVEVfRkFJTEVELCBESVJFQ1RJT05fTk9ORSwgRElSRUNUSU9OX0xFRlQsIERJUkVDVElPTl9SSUdIVCwgRElSRUNUSU9OX1VQLCBESVJFQ1RJT05fRE9XTiwgRElSRUNUSU9OX0hPUklaT05UQUwsIERJUkVDVElPTl9WRVJUSUNBTCwgRElSRUNUSU9OX0FMTCwgTWFuYWdlciwgSW5wdXQsIFRvdWNoQWN0aW9uLCBUb3VjaElucHV0LCBNb3VzZUlucHV0LCBQb2ludGVyRXZlbnRJbnB1dCwgVG91Y2hNb3VzZUlucHV0LCBTaW5nbGVUb3VjaElucHV0LCBSZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwgVGFwUmVjb2duaXplciBhcyBUYXAsIFBhblJlY29nbml6ZXIgYXMgUGFuLCBTd2lwZVJlY29nbml6ZXIgYXMgU3dpcGUsIFBpbmNoUmVjb2duaXplciBhcyBQaW5jaCwgUm90YXRlUmVjb2duaXplciBhcyBSb3RhdGUsIFByZXNzUmVjb2duaXplciBhcyBQcmVzcywgYWRkRXZlbnRMaXN0ZW5lcnMgYXMgb24sIHJlbW92ZUV2ZW50TGlzdGVuZXJzIGFzIG9mZiwgZWFjaCwgbWVyZ2UsIGV4dGVuZCwgYXNzaWduJDEgYXMgYXNzaWduLCBpbmhlcml0LCBiaW5kRm4sIHByZWZpeGVkLCB0b0FycmF5LCBpbkFycmF5LCB1bmlxdWVBcnJheSwgc3BsaXRTdHIsIGJvb2xPckZuLCBoYXNQYXJlbnQsIGFkZEV2ZW50TGlzdGVuZXJzLCByZW1vdmVFdmVudExpc3RlbmVycywgZGVmYXVsdHMkMSBhcyBkZWZhdWx0cyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFtbWVyLmVzbS5qcy5tYXBcbiIsICIvKipcbiAqIHZpcy11dGlsXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdmlzanMvdmlzLXV0aWxcbiAqXG4gKiB1dGlsaXRpZSBjb2xsZWN0aW9uIGZvciB2aXNqc1xuICpcbiAqIEB2ZXJzaW9uIDUuMC43XG4gKiBAZGF0ZSAgICAyMDIzLTExLTIwVDA5OjA2OjUxLjA2N1pcbiAqXG4gKiBAY29weXJpZ2h0IChjKSAyMDExLTIwMTcgQWxtZW5kZSBCLlYsIGh0dHA6Ly9hbG1lbmRlLmNvbVxuICogQGNvcHlyaWdodCAoYykgMjAxNy0yMDE5IHZpc2pzIGNvbnRyaWJ1dG9ycywgaHR0cHM6Ly9naXRodWIuY29tL3Zpc2pzXG4gKlxuICogQGxpY2Vuc2VcbiAqIHZpcy5qcyBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIGJvdGhcbiAqXG4gKiAgIDEuIFRoZSBBcGFjaGUgMi4wIExpY2Vuc2VcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogICBhbmRcbiAqXG4gKiAgIDIuIFRoZSBNSVQgTGljZW5zZVxuICogICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4gKlxuICogdmlzLmpzIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBlaXRoZXIgbGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgRW1pdHRlciBmcm9tICdjb21wb25lbnQtZW1pdHRlcic7XG5pbXBvcnQgUmVhbEhhbW1lciBmcm9tICdAZWdqcy9oYW1tZXJqcyc7XG5cbi8qKlxyXG4gKiBVc2UgdGhpcyBzeW1ib2wgdG8gZGVsZXRlIHByb3BlcmllcyBpbiBkZWVwT2JqZWN0QXNzaWduLlxyXG4gKi9cclxuY29uc3QgREVMRVRFID0gU3ltYm9sKFwiREVMRVRFXCIpO1xyXG4vKipcclxuICogUHVyZSB2ZXJzaW9uIG9mIGRlZXBPYmplY3RBc3NpZ24sIGl0IGRvZXNuJ3QgbW9kaWZ5IGFueSBvZiBpdCdzIGFyZ3VtZW50cy5cclxuICpcclxuICogQHBhcmFtIGJhc2UgLSBUaGUgYmFzZSBvYmplY3QgdGhhdCBmdWxsZmlscyB0aGUgd2hvbGUgaW50ZXJmYWNlIFQuXHJcbiAqIEBwYXJhbSB1cGRhdGVzIC0gVXBkYXRlcyB0aGF0IG1heSBjaGFuZ2Ugb3IgZGVsZXRlIHByb3BzLlxyXG4gKiBAcmV0dXJucyBBIGJyYW5kIG5ldyBpbnN0YW5jZSB3aXRoIGFsbCB0aGUgc3VwcGxpZWQgb2JqZWN0cyBkZWVwbHkgbWVyZ2VkLlxyXG4gKi9cclxuZnVuY3Rpb24gcHVyZURlZXBPYmplY3RBc3NpZ24oYmFzZSwgLi4udXBkYXRlcykge1xyXG4gICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ24oe30sIGJhc2UsIC4uLnVwZGF0ZXMpO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIHZlcnNpb24gb2Ygb2JqZWN0IGFzc2lnbiB3aXRoIGFkZGl0aW9uYWwgZGVsZXRpbmcgYnkgdGhlIERFTEVURSBzeW1ib2wuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3RzIHRvIGJlIGRlZXBseSBtZXJnZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBvYmplY3QgZnJvbSB2YWx1ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwT2JqZWN0QXNzaWduKC4uLnZhbHVlcykge1xyXG4gICAgY29uc3QgbWVyZ2VkID0gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KC4uLnZhbHVlcyk7XHJcbiAgICBzdHJpcERlbGV0ZShtZXJnZWQpO1xyXG4gICAgcmV0dXJuIG1lcmdlZDtcclxufVxyXG4vKipcclxuICogRGVlcCB2ZXJzaW9uIG9mIG9iamVjdCBhc3NpZ24gd2l0aCBhZGRpdGlvbmFsIGRlbGV0aW5nIGJ5IHRoZSBERUxFVEUgc3ltYm9sLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBUaGlzIGRvZXNuJ3Qgc3RyaXAgdGhlIERFTEVURSBzeW1ib2xzIHNvIHRoZXkgbWF5IGVuZCB1cCBpbiB0aGUgZmluYWwgb2JqZWN0LlxyXG4gKiBAcGFyYW0gdmFsdWVzIC0gT2JqZWN0cyB0byBiZSBkZWVwbHkgbWVyZ2VkLlxyXG4gKiBAcmV0dXJucyBUaGUgZmlyc3Qgb2JqZWN0IGZyb20gdmFsdWVzLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KC4uLnZhbHVlcykge1xyXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeShkZWVwT2JqZWN0QXNzaWduKHZhbHVlc1swXSwgdmFsdWVzWzFdKSwgLi4udmFsdWVzLnNsaWNlKDIpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGEgPSB2YWx1ZXNbMF07XHJcbiAgICBjb25zdCBiID0gdmFsdWVzWzFdO1xyXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgYS5zZXRUaW1lKGIuZ2V0VGltZSgpKTtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBSZWZsZWN0Lm93bktleXMoYikpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChiLCBwcm9wKSkgO1xyXG4gICAgICAgIGVsc2UgaWYgKGJbcHJvcF0gPT09IERFTEVURSkge1xyXG4gICAgICAgICAgICBkZWxldGUgYVtwcm9wXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYVtwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICBiW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBhW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBiW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGFbcHJvcF0pICYmXHJcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoYVtwcm9wXSwgYltwcm9wXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gY2xvbmUoYltwcm9wXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgY2xvbmUgZ2l2ZW4gb2JqZWN0IG9yIGFycmF5LiBJbiBjYXNlIG9mIHByaW1pdGl2ZSBzaW1wbHkgcmV0dXJuLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIEFueXRoaW5nLlxyXG4gKiBAcmV0dXJucyBEZWVwIGNsb25lZCBvYmplY3QvYXJyYXkgb3IgdW5jaGFuZ2VkIGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBjbG9uZShhKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xyXG4gICAgICAgIHJldHVybiBhLm1hcCgodmFsdWUpID0+IGNsb25lKHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJvYmplY3RcIiAmJiBhICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShhLmdldFRpbWUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoe30sIGEpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFN0cmlwIERFTEVURSBmcm9tIGdpdmVuIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIGEgLSBPYmplY3Qgd2hpY2ggbWF5IGNvbnRhaW4gREVMRVRFIGJ1dCB3b24ndCBhZnRlciB0aGlzIGlzIGV4ZWN1dGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gc3RyaXBEZWxldGUoYSkge1xyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5rZXlzKGEpKSB7XHJcbiAgICAgICAgaWYgKGFbcHJvcF0gPT09IERFTEVURSkge1xyXG4gICAgICAgICAgICBkZWxldGUgYVtwcm9wXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiYgYVtwcm9wXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzdHJpcERlbGV0ZShhW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuLyoqXHJcbiAqIFNlZWRhYmxlLCBmYXN0IGFuZCByZWFzb25hYmx5IGdvb2QgKG5vdCBjcnlwdG8gYnV0IG1vcmUgdGhhbiBva2F5IGZvciBvdXJcclxuICogbmVlZHMpIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBBZGFwdGVkIGZyb20ge0BsaW5rIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDExMDQyOTEwMDczNi9odHRwOi8vYmFhZ29lLmNvbTo4MC9lbi9SYW5kb21NdXNpbmdzL2phdmFzY3JpcHR9LlxyXG4gKiBPcmlnaW5hbCBhbGdvcml0aG0gY3JlYXRlZCBieSBKb2hhbm5lcyBCYWFnw7hlIFxcPGJhYWdvZVxcQGJhYWdvZS5jb21cXD4gaW4gMjAxMC5cclxuICovXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBzZWVkZWQgcHNldWRvIHJhbmRvbSBnZW5lcmF0b3IgYmFzZWQgb24gQWxlYSBieSBKb2hhbm5lcyBCYWFnw7hlLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIEFsbCBzdXBwbGllZCBhcmd1bWVudHMgd2lsbCBiZSB1c2VkIGFzIGEgc2VlZC4gSW4gY2FzZSBub3RoaW5nXHJcbiAqIGlzIHN1cHBsaWVkIHRoZSBjdXJyZW50IHRpbWUgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIGdlbmVyYXRvci5cclxuICogQHJldHVybnMgQSByZWFkeSB0byB1c2Ugc2VlZGVkIGdlbmVyYXRvci5cclxuICovXHJcbmZ1bmN0aW9uIEFsZWEoLi4uc2VlZCkge1xyXG4gICAgcmV0dXJuIEFsZWFJbXBsZW1lbnRhdGlvbihzZWVkLmxlbmd0aCA/IHNlZWQgOiBbRGF0ZS5ub3coKV0pO1xyXG59XHJcbi8qKlxyXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBbW0FsZWFdXSB3aXRob3V0IHVzZXIgaW5wdXQgdmFsaWRhdGlvbi5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBUaGUgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCB0byBzZWVkIHRoZSBnZW5lcmF0b3IuXHJcbiAqIEByZXR1cm5zIEEgcmVhZHkgdG8gdXNlIHNlZWRlZCBnZW5lcmF0b3IuXHJcbiAqL1xyXG5mdW5jdGlvbiBBbGVhSW1wbGVtZW50YXRpb24oc2VlZCkge1xyXG4gICAgbGV0IFtzMCwgczEsIHMyXSA9IG1hc2hTZWVkKHNlZWQpO1xyXG4gICAgbGV0IGMgPSAxO1xyXG4gICAgY29uc3QgcmFuZG9tID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHQgPSAyMDkxNjM5ICogczAgKyBjICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcclxuICAgICAgICBzMCA9IHMxO1xyXG4gICAgICAgIHMxID0gczI7XHJcbiAgICAgICAgcmV0dXJuIChzMiA9IHQgLSAoYyA9IHQgfCAwKSk7XHJcbiAgICB9O1xyXG4gICAgcmFuZG9tLnVpbnQzMiA9ICgpID0+IHJhbmRvbSgpICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcclxuICAgIHJhbmRvbS5mcmFjdDUzID0gKCkgPT4gcmFuZG9tKCkgKyAoKHJhbmRvbSgpICogMHgyMDAwMDApIHwgMCkgKiAxLjExMDIyMzAyNDYyNTE1NjVlLTE2OyAvLyAyXi01M1xyXG4gICAgcmFuZG9tLmFsZ29yaXRobSA9IFwiQWxlYVwiO1xyXG4gICAgcmFuZG9tLnNlZWQgPSBzZWVkO1xyXG4gICAgcmFuZG9tLnZlcnNpb24gPSBcIjAuOVwiO1xyXG4gICAgcmV0dXJuIHJhbmRvbTtcclxufVxyXG4vKipcclxuICogVHVybiBhcmJpdHJhcnkgZGF0YSBpbnRvIHZhbHVlcyBbW0FsZWFJbXBsZW1lbnRhdGlvbl1dIGNhbiB1c2UgdG8gZ2VuZXJhdGVcclxuICogcmFuZG9tIG51bWJlcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gQXJiaXRyYXJ5IGRhdGEgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlZWQuXHJcbiAqIEByZXR1cm5zIFRocmVlIG51bWJlcnMgdG8gdXNlIGFzIGluaXRpYWwgdmFsdWVzIGZvciBbW0FsZWFJbXBsZW1lbnRhdGlvbl1dLlxyXG4gKi9cclxuZnVuY3Rpb24gbWFzaFNlZWQoLi4uc2VlZCkge1xyXG4gICAgY29uc3QgbWFzaCA9IE1hc2goKTtcclxuICAgIGxldCBzMCA9IG1hc2goXCIgXCIpO1xyXG4gICAgbGV0IHMxID0gbWFzaChcIiBcIik7XHJcbiAgICBsZXQgczIgPSBtYXNoKFwiIFwiKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VlZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHMwIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMwIDwgMCkge1xyXG4gICAgICAgICAgICBzMCArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzMSAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMSA8IDApIHtcclxuICAgICAgICAgICAgczEgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgczIgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczIgPCAwKSB7XHJcbiAgICAgICAgICAgIHMyICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtzMCwgczEsIHMyXTtcclxufVxyXG4vKipcclxuICogQ3JlYXRlIGEgbmV3IG1hc2ggZnVuY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm5zIEEgbm9ucHVyZSBmdW5jdGlvbiB0aGF0IHRha2VzIGFyYml0cmFyeSBbW01hc2hhYmxlXV0gZGF0YSBhbmQgdHVybnNcclxuICogdGhlbSBpbnRvIG51bWJlcnMuXHJcbiAqL1xyXG5mdW5jdGlvbiBNYXNoKCkge1xyXG4gICAgbGV0IG4gPSAweGVmYzgyNDlkO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyaW5nID0gZGF0YS50b1N0cmluZygpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG4gKz0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgICAgIGxldCBoID0gMC4wMjUxOTYwMzI4MjQxNjkzOCAqIG47XHJcbiAgICAgICAgICAgIG4gPSBoID4+PiAwO1xyXG4gICAgICAgICAgICBoIC09IG47XHJcbiAgICAgICAgICAgIGggKj0gbjtcclxuICAgICAgICAgICAgbiA9IGggPj4+IDA7XHJcbiAgICAgICAgICAgIGggLT0gbjtcclxuICAgICAgICAgICAgbiArPSBoICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChuID4+PiAwKSAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXHJcbiAgICB9O1xyXG59XG5cbi8qKlxuICogU2V0dXAgYSBtb2NrIGhhbW1lci5qcyBvYmplY3QsIGZvciB1bml0IHRlc3RpbmcuXG4gKlxuICogSW5zcGlyYXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS91YmVyL2RlY2suZ2wvcHVsbC82NThcbiAqXG4gKiBAcmV0dXJucyB7e29uOiBub29wLCBvZmY6IG5vb3AsIGRlc3Ryb3k6IG5vb3AsIGVtaXQ6IG5vb3AsIGdldDogZ2V0fX1cbiAqL1xuZnVuY3Rpb24gaGFtbWVyTW9jaygpIHtcbiAgY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4gIHJldHVybiB7XG4gICAgb246IG5vb3AsXG4gICAgb2ZmOiBub29wLFxuICAgIGRlc3Ryb3k6IG5vb3AsXG4gICAgZW1pdDogbm9vcCxcblxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldDogbm9vcCxcbiAgICAgIH07XG4gICAgfSxcbiAgfTtcbn1cblxuY29uc3QgSGFtbWVyJDEgPVxuICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgPyB3aW5kb3cuSGFtbWVyIHx8IFJlYWxIYW1tZXJcbiAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gaGFtbWVyLmpzIGlzIG9ubHkgYXZhaWxhYmxlIGluIGEgYnJvd3Nlciwgbm90IGluIG5vZGUuanMuIFJlcGxhY2luZyBpdCB3aXRoIGEgbW9jayBvYmplY3QuXG4gICAgICAgIHJldHVybiBoYW1tZXJNb2NrKCk7XG4gICAgICB9O1xuXG4vKipcbiAqIFR1cm4gYW4gZWxlbWVudCBpbnRvIGFuIGNsaWNrVG9Vc2UgZWxlbWVudC5cbiAqIFdoZW4gbm90IGFjdGl2ZSwgdGhlIGVsZW1lbnQgaGFzIGEgdHJhbnNwYXJlbnQgb3ZlcmxheS4gV2hlbiB0aGUgb3ZlcmxheSBpc1xuICogY2xpY2tlZCwgdGhlIG1vZGUgaXMgY2hhbmdlZCB0byBhY3RpdmUuXG4gKiBXaGVuIGFjdGl2ZSwgdGhlIGVsZW1lbnQgaXMgZGlzcGxheWVkIHdpdGggYSBibHVlIGJvcmRlciBhcm91bmQgaXQsIGFuZFxuICogdGhlIGludGVyYWN0aXZlIGNvbnRlbnRzIG9mIHRoZSBlbGVtZW50IGNhbiBiZSB1c2VkLiBXaGVuIGNsaWNrZWQgb3V0c2lkZVxuICogdGhlIGVsZW1lbnQsIHRoZSBlbGVtZW50cyBtb2RlIGlzIGNoYW5nZWQgdG8gaW5hY3RpdmUuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAqIEBjbGFzcyBBY3RpdmF0b3JcbiAqL1xuZnVuY3Rpb24gQWN0aXZhdG9yJDEoY29udGFpbmVyKSB7XG4gIHRoaXMuX2NsZWFudXBRdWV1ZSA9IFtdO1xuXG4gIHRoaXMuYWN0aXZlID0gZmFsc2U7XG5cbiAgdGhpcy5fZG9tID0ge1xuICAgIGNvbnRhaW5lcixcbiAgICBvdmVybGF5OiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICB9O1xuXG4gIHRoaXMuX2RvbS5vdmVybGF5LmNsYXNzTGlzdC5hZGQoXCJ2aXMtb3ZlcmxheVwiKTtcblxuICB0aGlzLl9kb20uY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgIHRoaXMuX2RvbS5vdmVybGF5LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZG9tLm92ZXJsYXkpO1xuICB9KTtcblxuICBjb25zdCBoYW1tZXIgPSBIYW1tZXIkMSh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIGhhbW1lci5vbihcInRhcFwiLCB0aGlzLl9vblRhcE92ZXJsYXkuYmluZCh0aGlzKSk7XG4gIHRoaXMuX2NsZWFudXBRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICBoYW1tZXIuZGVzdHJveSgpO1xuICAgIC8vIEZJWE1FOiBjbGVhbmluZyB1cCBoYW1tZXIgaW5zdGFuY2VzIGRvZXNuJ3Qgd29yayAoVGltZWxpbmUgbm90IHJlbW92ZWRcbiAgICAvLyBmcm9tIG1lbW9yeSlcbiAgfSk7XG5cbiAgLy8gYmxvY2sgYWxsIHRvdWNoIGV2ZW50cyAoZXhjZXB0IHRhcClcbiAgY29uc3QgZXZlbnRzID0gW1xuICAgIFwidGFwXCIsXG4gICAgXCJkb3VibGV0YXBcIixcbiAgICBcInByZXNzXCIsXG4gICAgXCJwaW5jaFwiLFxuICAgIFwicGFuXCIsXG4gICAgXCJwYW5zdGFydFwiLFxuICAgIFwicGFubW92ZVwiLFxuICAgIFwicGFuZW5kXCIsXG4gIF07XG4gIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgIGhhbW1lci5vbihldmVudCwgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5zcmNFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gYXR0YWNoIGEgY2xpY2sgZXZlbnQgdG8gdGhlIHdpbmRvdywgaW4gb3JkZXIgdG8gZGVhY3RpdmF0ZSB3aGVuIGNsaWNraW5nIG91dHNpZGUgdGhlIHRpbWVsaW5lXG4gIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5ib2R5KSB7XG4gICAgdGhpcy5fb25DbGljayA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKCFfaGFzUGFyZW50KGV2ZW50LnRhcmdldCwgY29udGFpbmVyKSkge1xuICAgICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX29uQ2xpY2spO1xuICAgIHRoaXMuX2NsZWFudXBRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX29uQ2xpY2spO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gcHJlcGFyZSBlc2NhcGUga2V5IGxpc3RlbmVyIGZvciBkZWFjdGl2YXRpbmcgd2hlbiBhY3RpdmVcbiAgdGhpcy5fZXNjTGlzdGVuZXIgPSAoZXZlbnQpID0+IHtcbiAgICBpZiAoXG4gICAgICBcImtleVwiIGluIGV2ZW50XG4gICAgICAgID8gZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiXG4gICAgICAgIDogZXZlbnQua2V5Q29kZSA9PT0gMjcgLyogdGhlIGtleUNvZGUgaXMgZm9yIElFMTEgKi9cbiAgICApIHtcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgIH1cbiAgfTtcbn1cblxuLy8gdHVybiBpbnRvIGFuIGV2ZW50IGVtaXR0ZXJcbkVtaXR0ZXIoQWN0aXZhdG9yJDEucHJvdG90eXBlKTtcblxuLy8gVGhlIGN1cnJlbnRseSBhY3RpdmUgYWN0aXZhdG9yXG5BY3RpdmF0b3IkMS5jdXJyZW50ID0gbnVsbDtcblxuLyoqXG4gKiBEZXN0cm95IHRoZSBhY3RpdmF0b3IuIENsZWFucyB1cCBhbGwgY3JlYXRlZCBET00gYW5kIGV2ZW50IGxpc3RlbmVyc1xuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5kZWFjdGl2YXRlKCk7XG5cbiAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLl9jbGVhbnVwUXVldWUuc3BsaWNlKDApLnJldmVyc2UoKSkge1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cbn07XG5cbi8qKlxuICogQWN0aXZhdGUgdGhlIGVsZW1lbnRcbiAqIE92ZXJsYXkgaXMgaGlkZGVuLCBlbGVtZW50IGlzIGRlY29yYXRlZCB3aXRoIGEgYmx1ZSBzaGFkb3cgYm9yZGVyXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gd2UgYWxsb3cgb25seSBvbmUgYWN0aXZlIGFjdGl2YXRvciBhdCBhIHRpbWVcbiAgaWYgKEFjdGl2YXRvciQxLmN1cnJlbnQpIHtcbiAgICBBY3RpdmF0b3IkMS5jdXJyZW50LmRlYWN0aXZhdGUoKTtcbiAgfVxuICBBY3RpdmF0b3IkMS5jdXJyZW50ID0gdGhpcztcblxuICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gIHRoaXMuX2RvbS5vdmVybGF5LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgdGhpcy5fZG9tLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwidmlzLWFjdGl2ZVwiKTtcblxuICB0aGlzLmVtaXQoXCJjaGFuZ2VcIik7XG4gIHRoaXMuZW1pdChcImFjdGl2YXRlXCIpO1xuXG4gIC8vIHVnbHkgaGFjazogYmluZCBFU0MgYWZ0ZXIgZW1pdHRpbmcgdGhlIGV2ZW50cywgYXMgdGhlIE5ldHdvcmsgcmViaW5kcyBhbGxcbiAgLy8ga2V5Ym9hcmQgZXZlbnRzIG9uIGEgJ2NoYW5nZScgZXZlbnRcbiAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLl9lc2NMaXN0ZW5lcik7XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGUgdGhlIGVsZW1lbnRcbiAqIE92ZXJsYXkgaXMgZGlzcGxheWVkIG9uIHRvcCBvZiB0aGUgZWxlbWVudFxuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgdGhpcy5fZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgdGhpcy5fZG9tLmNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwidmlzLWFjdGl2ZVwiKTtcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLl9lc2NMaXN0ZW5lcik7XG5cbiAgdGhpcy5lbWl0KFwiY2hhbmdlXCIpO1xuICB0aGlzLmVtaXQoXCJkZWFjdGl2YXRlXCIpO1xufTtcblxuLyoqXG4gKiBIYW5kbGUgYSB0YXAgZXZlbnQ6IGFjdGl2YXRlIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5fb25UYXBPdmVybGF5ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIC8vIGFjdGl2YXRlIHRoZSBjb250YWluZXJcbiAgdGhpcy5hY3RpdmF0ZSgpO1xuICBldmVudC5zcmNFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn07XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyB0aGUgcmVxdWVzdGVkIHBhcmVudCBlbGVtZW50IHNvbWV3aGVyZSBpblxuICogaXRzIGNoYWluIG9mIHBhcmVudCBub2Rlcy5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYXJlbnRcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgcGFyZW50IGlzIGZvdW5kIHNvbWV3aGVyZSBpbiB0aGVcbiAqICAgICAgICAgICAgICAgICAgICBjaGFpbiBvZiBwYXJlbnQgbm9kZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xuICB3aGlsZSAoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50ID09PSBwYXJlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gdXRpbGl0eSBmdW5jdGlvbnNcclxuLy8gcGFyc2UgQVNQLk5ldCBEYXRlIHBhdHRlcm4sXHJcbi8vIGZvciBleGFtcGxlICcvRGF0ZSgxMTk4OTA4NzE3MDU2KS8nIG9yICcvRGF0ZSgxMTk4OTA4NzE3MDU2LTA3MDApLydcclxuLy8gY29kZSBmcm9tIGh0dHA6Ly9tb21lbnRqcy5jb20vXHJcbmNvbnN0IEFTUERhdGVSZWdleCA9IC9eXFwvP0RhdGVcXCgoLT9cXGQrKS9pO1xyXG4vLyBDb2xvciBSRXNcclxuY29uc3QgZnVsbEhleFJFID0gL14jPyhbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KSQvaTtcclxuY29uc3Qgc2hvcnRIZXhSRSA9IC9eIz8oW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkkL2k7XHJcbmNvbnN0IHJnYlJFID0gL15yZ2JcXCggKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKlxcKSQvaTtcclxuY29uc3QgcmdiYVJFID0gL15yZ2JhXFwoICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooWzAxXXwwP1xcLlxcZCspICpcXCkkL2k7XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgbnVtYmVyLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgbnVtYmVyLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIjtcclxufVxyXG4vKipcclxuICogUmVtb3ZlIGV2ZXJ5dGhpbmcgaW4gdGhlIERPTSBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBET01vYmplY3QgLSBOb2RlIHdob3NlIGNoaWxkIG5vZGVzIHdpbGwgYmUgcmVjdXJzaXZlbHkgZGVsZXRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHJlY3Vyc2l2ZURPTURlbGV0ZShET01vYmplY3QpIHtcclxuICAgIGlmIChET01vYmplY3QpIHtcclxuICAgICAgICB3aGlsZSAoRE9Nb2JqZWN0Lmhhc0NoaWxkTm9kZXMoKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IERPTW9iamVjdC5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZURPTURlbGV0ZShjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICBET01vYmplY3QucmVtb3ZlQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgc3RyaW5nLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIjtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIG9iamVjdCAobm90IHByaW1pdGl2ZSBvciBudWxsKS5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIG5vdCBudWxsIG9iamVjdCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGw7XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBEYXRlLCBvciBhIFN0cmluZyBjb250YWluaW5nIGEgRGF0ZS5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIERhdGUgaW5zdGFuY2Ugb3Igc3RyaW5nIGRhdGUgcmVwcmVzZW50YXRpb24sIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xyXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XHJcbiAgICAgICAgLy8gdGVzdCB3aGV0aGVyIHRoaXMgc3RyaW5nIGNvbnRhaW5zIGEgZGF0ZVxyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gQVNQRGF0ZVJlZ2V4LmV4ZWModmFsdWUpO1xyXG4gICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIWlzTmFOKERhdGUucGFyc2UodmFsdWUpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuLyoqXHJcbiAqIENvcHkgcHJvcGVydHkgZnJvbSBiIHRvIGEgaWYgcHJvcGVydHkgcHJlc2VudCBpbiBhLlxyXG4gKiBJZiBwcm9wZXJ0eSBpbiBiIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwsIGRlbGV0ZSBpdCBpZiBgYWxsb3dEZWxldGlvbmAgc2V0LlxyXG4gKlxyXG4gKiBJbnRlcm5hbCBoZWxwZXIgcm91dGluZSwgc2hvdWxkIG5vdCBiZSBleHBvcnRlZC4gTm90IGFkZGVkIHRvIGBleHBvcnRzYCBmb3IgdGhhdCByZWFzb24uXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gcHJvcCAtIE5hbWUgb2YgcHJvcGVydHkgdG8gY29weSBmcm9tIGIgdG8gYS5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydHkgaW4gYSBpZiBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbikge1xyXG4gICAgbGV0IGRvRGVsZXRpb24gPSBmYWxzZTtcclxuICAgIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlKSB7XHJcbiAgICAgICAgZG9EZWxldGlvbiA9IGJbcHJvcF0gPT09IG51bGwgJiYgYVtwcm9wXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgaWYgKGRvRGVsZXRpb24pIHtcclxuICAgICAgICBkZWxldGUgYVtwcm9wXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdOyAvLyBSZW1lbWJlciwgdGhpcyBpcyBhIHJlZmVyZW5jZSBjb3B5IVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBGaWxsIGFuIG9iamVjdCB3aXRoIGEgcG9zc2libHkgcGFydGlhbGx5IGRlZmluZWQgb3RoZXIgb2JqZWN0LlxyXG4gKlxyXG4gKiBPbmx5IGNvcGllcyB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0aWVzIGFscmVhZHkgcHJlc2VudCBpbiBhLlxyXG4gKiBUaGF0IG1lYW5zIGFuIG9iamVjdCBpcyBub3QgY3JlYXRlZCBvbiBhIHByb3BlcnR5IGlmIG9ubHkgdGhlIGIgb2JqZWN0IGhhcyBpdC5cclxuICpcclxuICogQHBhcmFtIGEgLSBUaGUgb2JqZWN0IHRoYXQgd2lsbCBoYXZlIGl0J3MgcHJvcGVydGllcyB1cGRhdGVkLlxyXG4gKiBAcGFyYW0gYiAtIFRoZSBvYmplY3Qgd2l0aCBwcm9wZXJ0eSB1cGRhdGVzLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0aWVzIGluIGEgdGhhdCBhcmUgZXhwbGljaXRseSBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKi9cclxuZnVuY3Rpb24gZmlsbElmRGVmaW5lZChhLCBiLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIC8vIE5PVEU6IGl0ZXJhdGlvbiBvZiBwcm9wZXJ0aWVzIG9mIGFcclxuICAgIC8vIE5PVEU6IHByb3RvdHlwZSBwcm9wZXJ0aWVzIGl0ZXJhdGVkIG92ZXIgYXMgd2VsbFxyXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGEpIHtcclxuICAgICAgICBpZiAoYltwcm9wXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChiW3Byb3BdID09PSBudWxsIHx8IHR5cGVvZiBiW3Byb3BdICE9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBOb3RlOiB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFQcm9wID0gYVtwcm9wXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJQcm9wID0gYltwcm9wXTtcclxuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChhUHJvcCkgJiYgaXNPYmplY3QoYlByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbElmRGVmaW5lZChhUHJvcCwgYlByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgb2YgYWxsIG9mIHRoZSBlbnVtZXJhYmxlIG93biBwcm9wZXJ0aWVzIGZyb20gb25lIG9yIG1vcmUgc291cmNlIG9iamVjdHMgdG8gYVxyXG4gKiB0YXJnZXQgb2JqZWN0LiBSZXR1cm5zIHRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIHRhcmdldCBvYmplY3QgdG8gY29weSB0by5cclxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSBzb3VyY2Ugb2JqZWN0IGZyb20gd2hpY2ggdG8gY29weSBwcm9wZXJ0aWVzLlxyXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdC5cclxuICovXHJcbmNvbnN0IGV4dGVuZCA9IE9iamVjdC5hc3NpZ247XHJcbi8qKlxyXG4gKiBFeHRlbmQgb2JqZWN0IGEgd2l0aCBzZWxlY3RlZCBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiIG9yIGEgc2VyaWVzIG9mIG9iamVjdHMuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWQgdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBwcm9wcyAtIFByb3BlcnRpZXMgdG8gYmUgY29waWVkIHRvIGEuXHJcbiAqIEBwYXJhbSBhIC0gVGhlIHRhcmdldC5cclxuICogQHBhcmFtIG90aGVycyAtIFRoZSBzb3VyY2VzLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlRXh0ZW5kKHByb3BzLCBhLCAuLi5vdGhlcnMpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wcykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBcnJheSB3aXRoIHByb3BlcnR5IG5hbWVzIGV4cGVjdGVkIGFzIGZpcnN0IGFyZ3VtZW50XCIpO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBvdGhlciBvZiBvdGhlcnMpIHtcclxuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IHByb3BzLmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1twXTtcclxuICAgICAgICAgICAgaWYgKG90aGVyICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0gPSBvdGhlcltwcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBFeHRlbmQgb2JqZWN0IGEgd2l0aCBzZWxlY3RlZCBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxyXG4gKiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBQcmV2aW91cyB2ZXJzaW9uIG9mIHRoaXMgcm91dGluZSBpbXBsaWVkIHRoYXQgbXVsdGlwbGUgc291cmNlIG9iamVjdHMgY291bGRcclxuICogYmUgdXNlZDsgaG93ZXZlciwgdGhlIGltcGxlbWVudGF0aW9uIHdhcyAqKndyb25nKiouIFNpbmNlIG11bHRpcGxlIChcXD4xKVxyXG4gKiBzb3VyY2VzIHdlcmVuJ3QgdXNlZCBhbnl3aGVyZSBpbiB0aGUgYHZpcy5qc2AgY29kZSwgdGhpcyBoYXMgYmVlbiByZW1vdmVkXHJcbiAqIEBwYXJhbSBwcm9wcyAtIE5hbWVzIG9mIGZpcnN0LWxldmVsIHByb3BlcnRpZXMgdG8gY29weSBvdmVyLlxyXG4gKiBAcGFyYW0gYSAtIFRhcmdldCBvYmplY3QuXHJcbiAqIEBwYXJhbSBiIC0gU291cmNlIG9iamVjdC5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydHkgaW4gYSBpZiBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVEZWVwRXh0ZW5kKHByb3BzLCBhLCBiLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBBcnJheXMgdG8gZGVlcEV4dGVuZFxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBwID0gMDsgcCA8IHByb3BzLmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW3BdO1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkpIHtcclxuICAgICAgICAgICAgaWYgKGJbcHJvcF0gJiYgYltwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYVtwcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSwgZmFsc2UsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBFeHRlbmQgb2JqZWN0IGBhYCB3aXRoIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGBiYCwgaWdub3JpbmcgcHJvcGVydGllcyB3aGljaFxyXG4gKiBhcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgdG8gYmUgZXhjbHVkZWQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoZSBwcm9wZXJ0aWVzIG9mIGBiYCBhcmUgY29uc2lkZXJlZCBmb3IgY29weWluZy4gUHJvcGVydGllcyB3aGljaCBhcmVcclxuICogdGhlbXNlbHZlcyBvYmplY3RzIGFyZSBhcmUgYWxzbyBleHRlbmRlZC4gT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZFxyXG4gKiB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICogQHBhcmFtIHByb3BzVG9FeGNsdWRlIC0gTmFtZXMgb2YgcHJvcGVydGllcyB3aGljaCBzaG91bGQgKm5vdCogYmUgY29waWVkLlxyXG4gKiBAcGFyYW0gYSAtIE9iamVjdCB0byBleHRlbmQuXHJcbiAqIEBwYXJhbSBiIC0gT2JqZWN0IHRvIHRha2UgcHJvcGVydGllcyBmcm9tIGZvciBleHRlbnNpb24uXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnRpZXMgaW4gYSB0aGF0IGFyZSBleHBsaWNpdGx5XHJcbiAqIHNldCB0byBudWxsIGluIGIuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kKHByb3BzVG9FeGNsdWRlLCBhLCBiLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBBcnJheXMgdG8gZGVlcEV4dGVuZFxyXG4gICAgLy8gTk9URTogYXJyYXkgcHJvcGVydGllcyBoYXZlIGFuIGVsc2UtYmVsb3c7IGFwcGFyZW50bHksIHRoZXJlIGlzIGEgcHJvYmxlbSBoZXJlLlxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYikge1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHByb3ApKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gLy8gSGFuZGxlIGxvY2FsIHByb3BlcnRpZXMgb25seVxyXG4gICAgICAgIGlmIChwcm9wc1RvRXhjbHVkZS5pbmNsdWRlcyhwcm9wKSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9IC8vIEluIGV4Y2x1c2lvbiBsaXN0LCBza2lwXHJcbiAgICAgICAgaWYgKGJbcHJvcF0gJiYgYltwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0pOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJbcHJvcF0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0ucHVzaChiW3Byb3BdW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIGV4dGVuZCBhbiBvYmplY3QgYSB3aXRoIHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRhcmdldCBvYmplY3QuXHJcbiAqIEBwYXJhbSBiIC0gU291cmNlIG9iamVjdC5cclxuICogQHBhcmFtIHByb3RvRXh0ZW5kIC0gSWYgdHJ1ZSwgdGhlIHByb3RvdHlwZSB2YWx1ZXMgd2lsbCBhbHNvIGJlIGV4dGVuZGVkLlxyXG4gKiAoVGhhdCBpcyB0aGUgb3B0aW9ucyBvYmplY3RzIHRoYXQgaW5oZXJpdCBmcm9tIG90aGVycyB3aWxsIGFsc28gZ2V0IHRoZVxyXG4gKiBpbmhlcml0ZWQgb3B0aW9ucykuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgdGhlIHZhbHVlcyBvZiBmaWVsZHMgdGhhdCBhcmUgbnVsbCB3aWxsIGJlIGRlbGV0ZWQuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwRXh0ZW5kKGEsIGIsIHByb3RvRXh0ZW5kID0gZmFsc2UsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGIpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHByb3ApIHx8IHByb3RvRXh0ZW5kID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYltwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICAgICAgYltwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGJbcHJvcF0pID09PSBPYmplY3QucHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYVtwcm9wXSA9IGRlZXBFeHRlbmQoe30sIGJbcHJvcF0sIHByb3RvRXh0ZW5kKTsgLy8gTk9URTogYWxsb3dEZWxldGlvbiBub3QgcHJvcGFnYXRlZCFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBhW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYVtwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihhW3Byb3BdKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSwgcHJvdG9FeHRlbmQpOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdLnNsaWNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGFsbCBlbGVtZW50cyBpbiB0d28gYXJyYXlzIGFyZSBlcXVhbC5cclxuICpcclxuICogQHBhcmFtIGEgLSBGaXJzdCBhcnJheS5cclxuICogQHBhcmFtIGIgLSBTZWNvbmQgYXJyYXkuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgYm90aCBhcnJheXMgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYW5kIHNhbWUgZWxlbWVudHMgKDEgPSAnMScpLlxyXG4gKi9cclxuZnVuY3Rpb24gZXF1YWxBcnJheShhLCBiKSB7XHJcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG4vKipcclxuICogR2V0IHRoZSB0eXBlIG9mIGFuIG9iamVjdCwgZm9yIGV4YW1wbGUgZXhwb3J0cy5nZXRUeXBlKFtdKSByZXR1cm5zICdBcnJheScuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIERldGVjdGVkIHR5cGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUeXBlKG9iamVjdCkge1xyXG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBvYmplY3Q7XHJcbiAgICBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQm9vbGVhbikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJCb29sZWFuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiTnVtYmVyXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiQXJyYXlcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiRGF0ZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJPYmplY3RcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiTnVtYmVyXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJCb29sZWFuXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiBcIlN0cmluZ1wiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHR5cGU7XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gZXh0ZW5kIGFuIGFycmF5IGFuZCBjb3B5IGl0LiBUaGlzIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHBhdGhzIHJlY3Vyc2l2ZWx5LlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJyIC0gRmlyc3QgcGFydC5cclxuICogQHBhcmFtIG5ld1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIGFhZGRlZCBpbnRvIHRoZSBhcnJheS5cclxuICogQHJldHVybnMgQSBuZXcgYXJyYXkgd2l0aCBhbGwgaXRlbXMgZnJvbSBhcnIgYW5kIG5ld1ZhbHVlICh3aGljaCBpcyBsYXN0KS5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlBbmRFeHRlbmRBcnJheShhcnIsIG5ld1ZhbHVlKSB7XHJcbiAgICByZXR1cm4gWy4uLmFyciwgbmV3VmFsdWVdO1xyXG59XHJcbi8qKlxyXG4gKiBVc2VkIHRvIGV4dGVuZCBhbiBhcnJheSBhbmQgY29weSBpdC4gVGhpcyBpcyB1c2VkIHRvIHByb3BhZ2F0ZSBwYXRocyByZWN1cnNpdmVseS5cclxuICpcclxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBiZSBjb3BpZWQuXHJcbiAqIEByZXR1cm5zIFNoYWxsb3cgY29weSBvZiBhcnIuXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3B5QXJyYXkoYXJyKSB7XHJcbiAgICByZXR1cm4gYXJyLnNsaWNlKCk7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSBsZWZ0IHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBsZWZ0IHBvc2l0aW9uIG9mIHRoaXMgZWxlbWVudCBpbiB0aGUgYnJvd3NlciBwYWdlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWJzb2x1dGVMZWZ0KGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSByaWdodCB2YWx1ZSBvZiBhIERPTSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIEEgZG9tIGVsZW1lbnQsIGZvciBleGFtcGxlIGEgZGl2LlxyXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcmlnaHQgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZVJpZ2h0KGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0O1xyXG59XHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgYWJzb2x1dGUgdG9wIHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSB0b3AgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZVRvcChlbGVtKSB7XHJcbiAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcbn1cclxuLyoqXHJcbiAqIEFkZCBhIGNsYXNzTmFtZSB0byB0aGUgZ2l2ZW4gZWxlbWVudHMgc3R5bGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIGNsYXNzZXMgd2lsbCBiZSBhZGRlZC5cclxuICogQHBhcmFtIGNsYXNzTmFtZXMgLSBTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkQ2xhc3NOYW1lKGVsZW0sIGNsYXNzTmFtZXMpIHtcclxuICAgIGxldCBjbGFzc2VzID0gZWxlbS5jbGFzc05hbWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgY29uc3QgbmV3Q2xhc3NlcyA9IGNsYXNzTmFtZXMuc3BsaXQoXCIgXCIpO1xyXG4gICAgY2xhc3NlcyA9IGNsYXNzZXMuY29uY2F0KG5ld0NsYXNzZXMuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcclxuICAgICAgICByZXR1cm4gIWNsYXNzZXMuaW5jbHVkZXMoY2xhc3NOYW1lKTtcclxuICAgIH0pKTtcclxuICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgY2xhc3NOYW1lIGZyb20gdGhlIGdpdmVuIGVsZW1lbnRzIHN0eWxlLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIFRoZSBlbGVtZW50IGZyb20gd2hpY2ggdGhlIGNsYXNzZXMgd2lsbCBiZSByZW1vdmVkLlxyXG4gKiBAcGFyYW0gY2xhc3NOYW1lcyAtIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiByZW1vdmVDbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lcykge1xyXG4gICAgbGV0IGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBvbGRDbGFzc2VzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIik7XHJcbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhb2xkQ2xhc3Nlcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xyXG4gICAgfSk7XHJcbiAgICBlbGVtLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbihcIiBcIik7XHJcbn1cclxuLyoqXHJcbiAqIEZvciBlYWNoIG1ldGhvZCBmb3IgYm90aCBhcnJheXMgYW5kIG9iamVjdHMuXHJcbiAqIEluIGNhc2Ugb2YgYW4gYXJyYXksIHRoZSBidWlsdC1pbiBBcnJheS5mb3JFYWNoKCkgaXMgYXBwbGllZCAoKipObywgaXQncyBub3QhKiopLlxyXG4gKiBJbiBjYXNlIG9mIGFuIE9iamVjdCwgdGhlIG1ldGhvZCBsb29wcyBvdmVyIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBBbiBPYmplY3Qgb3IgQXJyYXkgdG8gYmUgaXRlcmF0ZWQgb3Zlci5cclxuICogQHBhcmFtIGNhbGxiYWNrIC0gQXJyYXkuZm9yRWFjaC1saWtlIGNhbGxiYWNrLlxyXG4gKi9cclxuZnVuY3Rpb24gZm9yRWFjaChvYmplY3QsIGNhbGxiYWNrKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XHJcbiAgICAgICAgLy8gYXJyYXlcclxuICAgICAgICBjb25zdCBsZW4gPSBvYmplY3QubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY2FsbGJhY2sob2JqZWN0W2ldLCBpLCBvYmplY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIG9iamVjdFxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sob2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBhbiBvYmplY3QgaW50byBhbiBhcnJheTogYWxsIG9iamVjdHMgcHJvcGVydGllcyBhcmUgcHV0IGludG8gdGhlIGFycmF5LiBUaGUgcmVzdWx0aW5nIGFycmF5IGlzIHVub3JkZXJlZC5cclxuICpcclxuICogQHBhcmFtIG8gLSBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy5cclxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgdW5vcmRlcmVkIHZhbHVlcy5cclxuICovXHJcbmNvbnN0IHRvQXJyYXkgPSBPYmplY3QudmFsdWVzO1xyXG4vKipcclxuICogVXBkYXRlIGEgcHJvcGVydHkgaW4gYW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gb2JqZWN0IC0gVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSB3aWxsIGJlIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSBrZXkgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBiZSB1cGRhdGVkLlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgbmV3IHZhbHVlIHRvIGJlIGFzc2lnbmVkLlxyXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB2YWx1ZSB3YXMgdXBkYXRlZCAodHJ1ZSkgb3IgYWxyZWFkeSBzdHJpY3RseSB0aGUgc2FtZSBpbiB0aGUgb3JpZ2luYWwgb2JqZWN0IChmYWxzZSkuXHJcbiAqL1xyXG5mdW5jdGlvbiB1cGRhdGVQcm9wZXJ0eShvYmplY3QsIGtleSwgdmFsdWUpIHtcclxuICAgIGlmIChvYmplY3Rba2V5XSAhPT0gdmFsdWUpIHtcclxuICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUaHJvdHRsZSB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gYmUgb25seSBleGVjdXRlZCBvbmNlIHBlciBhbmltYXRpb24gZnJhbWUuXHJcbiAqXHJcbiAqIEBwYXJhbSBmbiAtIFRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cclxuICogQHJldHVybnMgVGhlIHRocm90dGxlZCBmdW5jdGlvbi5cclxuICovXHJcbmZ1bmN0aW9uIHRocm90dGxlKGZuKSB7XHJcbiAgICBsZXQgc2NoZWR1bGVkID0gZmFsc2U7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgIGlmICghc2NoZWR1bGVkKSB7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZuKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIENhbmNlbHMgdGhlIGV2ZW50J3MgZGVmYXVsdCBhY3Rpb24gaWYgaXQgaXMgY2FuY2VsYWJsZSwgd2l0aG91dCBzdG9wcGluZyBmdXJ0aGVyIHByb3BhZ2F0aW9uIG9mIHRoZSBldmVudC5cclxuICpcclxuICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IHdob3NlIGRlZmF1bHQgYWN0aW9uIHNob3VsZCBiZSBwcmV2ZW50ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudCkge1xyXG4gICAgaWYgKCFldmVudCkge1xyXG4gICAgICAgIGV2ZW50ID0gd2luZG93LmV2ZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCFldmVudCkgO1xyXG4gICAgZWxzZSBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBub24tSUUgYnJvd3NlcnNcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIEBUT0RPOiBJRSB0eXBlcz8gRG9lcyBhbnlvbmUgY2FyZT9cclxuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlOyAvLyBJRSBicm93c2Vyc1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBHZXQgSFRNTCBlbGVtZW50IHdoaWNoIGlzIHRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQuXHJcbiAqIEByZXR1cm5zIFRoZSBlbGVtZW50IG9yIG51bGwgaWYgbm90IG9idGFpbmFibGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUYXJnZXQoZXZlbnQgPSB3aW5kb3cuZXZlbnQpIHtcclxuICAgIC8vIGNvZGUgZnJvbSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcclxuICAgIC8vIEBUT0RPOiBFdmVudFRhcmdldCBjYW4gYmUgYWxtb3N0IGFueXRoaW5nLCBpcyBpdCBva2F5IHRvIHJldHVybiBvbmx5IEVsZW1lbnRzP1xyXG4gICAgbGV0IHRhcmdldCA9IG51bGw7XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC50YXJnZXQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC50YXJnZXQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChldmVudC5zcmNFbGVtZW50KSB7XHJcbiAgICAgICAgdGFyZ2V0ID0gZXZlbnQuc3JjRWxlbWVudDtcclxuICAgIH1cclxuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGFyZ2V0Lm5vZGVUeXBlICE9IG51bGwgJiYgdGFyZ2V0Lm5vZGVUeXBlID09IDMpIHtcclxuICAgICAgICAvLyBkZWZlYXQgU2FmYXJpIGJ1Z1xyXG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn1cclxuLyoqXHJcbiAqIENoZWNrIGlmIGdpdmVuIGVsZW1lbnQgY29udGFpbnMgZ2l2ZW4gcGFyZW50IHNvbWV3aGVyZSBpbiB0aGUgRE9NIHRyZWUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gYmUgdGVzdGVkLlxyXG4gKiBAcGFyYW0gcGFyZW50IC0gVGhlIGFuY2VzdG9yIChub3QgbmVjZXNzYXJpbHkgcGFyZW50KSBvZiB0aGUgZWxlbWVudC5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBwYXJlbnQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGVsZW1lbnQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGhhc1BhcmVudChlbGVtZW50LCBwYXJlbnQpIHtcclxuICAgIGxldCBlbGVtID0gZWxlbWVudDtcclxuICAgIHdoaWxlIChlbGVtKSB7XHJcbiAgICAgICAgaWYgKGVsZW0gPT09IHBhcmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIGVsZW0gPSBlbGVtLnBhcmVudE5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmNvbnN0IG9wdGlvbiA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBib29sZWFuLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvYm9vbGVhbiwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBib29sZWFuIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0Jvb2xlYW4odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIG51bWJlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b251bWJlciwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogbnVtYmVyIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc051bWJlcih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKSB8fCBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzdHJpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9zdHJpbmcsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIENvcnJlc3BvbmRpbmcgKipib3hlZCoqIHN0cmluZyB2YWx1ZSwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNTdHJpbmcodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgc2l6ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3NpemUsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIENvcnJlc3BvbmRpbmcgc3RyaW5nIHZhbHVlIChudW1iZXIgKyAncHgnKSwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNTaXplKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc051bWJlcih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgXCJweFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgRE9NIEVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG8gRE9NIEVsZW1lbnQsIGEgZnVuY3Rpb24gd2lsbCBiZSBleGVjdXRlZCBhcyBgKCgpID0+IHVua25vd24pYC5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBJZiB0aGUgdmFsdWUgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gPT0gbnVsbCB0aGVuIHRoaXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAqIEByZXR1cm5zIFRoZSBET00gRWxlbWVudCwgaWYgbm9uZSB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBub25lIHRoZW4gbnVsbC5cclxuICAgICAqL1xyXG4gICAgYXNFbGVtZW50KHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZSB8fCBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGhleCBjb2xvciBzdHJpbmcgaW50byBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiB7QGxpbmsgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NjIzODM4L3JnYi10by1oZXgtYW5kLWhleC10by1yZ2J9XHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nICgzIG9yIDYgZGlnaXRzLCB3aXRoIG9yIHdpdGhvdXQgIykuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBoZXhUb1JHQihoZXgpIHtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBzd2l0Y2ggKGhleC5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBzaG9ydEhleFJFLmV4ZWMoaGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdICsgcmVzdWx0WzFdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdICsgcmVzdWx0WzJdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdICsgcmVzdWx0WzNdLCAxNiksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgICAgcmVzdWx0ID0gZnVsbEhleFJFLmV4ZWMoaGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdLCAxNiksXHJcbiAgICAgICAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdLCAxNiksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgc3RyaW5nIGNvbG9yIGluIGhleCBvciBSR0IgZm9ybWF0IGFuZCBhZGRzIHRoZSBvcGFjaXR5LCBSR0JBIGlzIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZC5cclxuICpcclxuICogQHBhcmFtIGNvbG9yIC0gVGhlIGNvbG9yIHN0cmluZyAoaGV4LCBSR0IsIFJHQkEpLlxyXG4gKiBAcGFyYW0gb3BhY2l0eSAtIFRoZSBuZXcgb3BhY2l0eS5cclxuICogQHJldHVybnMgUkdCQSBzdHJpbmcsIGZvciBleGFtcGxlICdyZ2JhKDI1NSwgMCwgMTI3LCAwLjMpJy5cclxuICovXHJcbmZ1bmN0aW9uIG92ZXJyaWRlT3BhY2l0eShjb2xvciwgb3BhY2l0eSkge1xyXG4gICAgaWYgKGNvbG9yLmluY2x1ZGVzKFwicmdiYVwiKSkge1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbG9yLmluY2x1ZGVzKFwicmdiXCIpKSB7XHJcbiAgICAgICAgY29uc3QgcmdiID0gY29sb3JcclxuICAgICAgICAgICAgLnN1YnN0cihjb2xvci5pbmRleE9mKFwiKFwiKSArIDEpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiKVwiLCBcIlwiKVxyXG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIHJldHVybiBcInJnYmEoXCIgKyByZ2JbMF0gKyBcIixcIiArIHJnYlsxXSArIFwiLFwiICsgcmdiWzJdICsgXCIsXCIgKyBvcGFjaXR5ICsgXCIpXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihjb2xvcik7XHJcbiAgICAgICAgaWYgKHJnYiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcInJnYmEoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIsXCIgKyBvcGFjaXR5ICsgXCIpXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IFJHQiBcXDwwLCAyNTVcXD4gaW50byBoZXggY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVkIC0gUmVkIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBncmVlbiAtIEdyZWVuIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBibHVlIC0gQmx1ZSBjaGFubmVsLlxyXG4gKiBAcmV0dXJucyBIZXggY29sb3Igc3RyaW5nIChmb3IgZXhhbXBsZTogJyMwYWNkYzAnKS5cclxuICovXHJcbmZ1bmN0aW9uIFJHQlRvSGV4KHJlZCwgZ3JlZW4sIGJsdWUpIHtcclxuICAgIHJldHVybiAoXCIjXCIgKyAoKDEgPDwgMjQpICsgKHJlZCA8PCAxNikgKyAoZ3JlZW4gPDwgOCkgKyBibHVlKS50b1N0cmluZygxNikuc2xpY2UoMSkpO1xyXG59XHJcbi8qKlxyXG4gKiBQYXJzZSBhIGNvbG9yIHByb3BlcnR5IGludG8gYW4gb2JqZWN0IHdpdGggYm9yZGVyLCBiYWNrZ3JvdW5kLCBhbmQgaGlnaGxpZ2h0IGNvbG9ycy5cclxuICpcclxuICogQHBhcmFtIGlucHV0Q29sb3IgLSBTaG9ydGhhbmQgY29sb3Igc3RyaW5nIG9yIGlucHV0IGNvbG9yIG9iamVjdC5cclxuICogQHBhcmFtIGRlZmF1bHRDb2xvciAtIEZ1bGwgY29sb3Igb2JqZWN0IHRvIGZpbGwgaW4gbWlzc2luZyB2YWx1ZXMgaW4gaW5wdXRDb2xvci5cclxuICogQHJldHVybnMgQ29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gcGFyc2VDb2xvcihpbnB1dENvbG9yLCBkZWZhdWx0Q29sb3IpIHtcclxuICAgIGlmIChpc1N0cmluZyhpbnB1dENvbG9yKSkge1xyXG4gICAgICAgIGxldCBjb2xvclN0ciA9IGlucHV0Q29sb3I7XHJcbiAgICAgICAgaWYgKGlzVmFsaWRSR0IoY29sb3JTdHIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJnYiA9IGNvbG9yU3RyXHJcbiAgICAgICAgICAgICAgICAuc3Vic3RyKDQpXHJcbiAgICAgICAgICAgICAgICAuc3Vic3RyKDAsIGNvbG9yU3RyLmxlbmd0aCAtIDUpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCIsXCIpXHJcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbG9yU3RyID0gUkdCVG9IZXgocmdiWzBdLCByZ2JbMV0sIHJnYlsyXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1ZhbGlkSGV4KGNvbG9yU3RyKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBoc3YgPSBoZXhUb0hTVihjb2xvclN0cik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhTViA9IHtcclxuICAgICAgICAgICAgICAgIGg6IGhzdi5oLFxyXG4gICAgICAgICAgICAgICAgczogaHN2LnMgKiAwLjgsXHJcbiAgICAgICAgICAgICAgICB2OiBNYXRoLm1pbigxLCBoc3YudiAqIDEuMDIpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBkYXJrZXJDb2xvckhTViA9IHtcclxuICAgICAgICAgICAgICAgIGg6IGhzdi5oLFxyXG4gICAgICAgICAgICAgICAgczogTWF0aC5taW4oMSwgaHN2LnMgKiAxLjI1KSxcclxuICAgICAgICAgICAgICAgIHY6IGhzdi52ICogMC44LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBkYXJrZXJDb2xvckhleCA9IEhTVlRvSGV4KGRhcmtlckNvbG9ySFNWLmgsIGRhcmtlckNvbG9ySFNWLnMsIGRhcmtlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICBjb25zdCBsaWdodGVyQ29sb3JIZXggPSBIU1ZUb0hleChsaWdodGVyQ29sb3JIU1YuaCwgbGlnaHRlckNvbG9ySFNWLnMsIGxpZ2h0ZXJDb2xvckhTVi52KTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZGVmYXVsdENvbG9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5iYWNrZ3JvdW5kIHx8IGRlZmF1bHRDb2xvci5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmJvcmRlciB8fCBkZWZhdWx0Q29sb3IuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiBpc1N0cmluZyhpbnB1dENvbG9yLmhpZ2hsaWdodClcclxuICAgICAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5oaWdobGlnaHQgJiYgaW5wdXRDb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZCkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAoaW5wdXRDb2xvci5oaWdobGlnaHQgJiYgaW5wdXRDb2xvci5oaWdobGlnaHQuYm9yZGVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiBpc1N0cmluZyhpbnB1dENvbG9yLmhvdmVyKVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYm9yZGVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhvdmVyLmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhvdmVyLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBpbnB1dENvbG9yLmJvcmRlciB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGhvdmVyOiBpc1N0cmluZyhpbnB1dENvbG9yLmhvdmVyKVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaG92ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYm9yZGVyKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhvdmVyICYmIGlucHV0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCkgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIEhTViBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vd3d3LmphdmFzY3JpcHRlci5uZXQvZmFxL3JnYjJoc3YuaHRtfVxyXG4gKiBAcGFyYW0gcmVkIC0gUmVkIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBncmVlbiAtIEdyZWVuIGNoYW5uZWwuXHJcbiAqIEBwYXJhbSBibHVlIC0gQmx1ZSBjaGFubmVsLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IU1YocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmVkID0gcmVkIC8gMjU1O1xyXG4gICAgZ3JlZW4gPSBncmVlbiAvIDI1NTtcclxuICAgIGJsdWUgPSBibHVlIC8gMjU1O1xyXG4gICAgY29uc3QgbWluUkdCID0gTWF0aC5taW4ocmVkLCBNYXRoLm1pbihncmVlbiwgYmx1ZSkpO1xyXG4gICAgY29uc3QgbWF4UkdCID0gTWF0aC5tYXgocmVkLCBNYXRoLm1heChncmVlbiwgYmx1ZSkpO1xyXG4gICAgLy8gQmxhY2stZ3JheS13aGl0ZVxyXG4gICAgaWYgKG1pblJHQiA9PT0gbWF4UkdCKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgaDogMCwgczogMCwgdjogbWluUkdCIH07XHJcbiAgICB9XHJcbiAgICAvLyBDb2xvcnMgb3RoZXIgdGhhbiBibGFjay1ncmF5LXdoaXRlOlxyXG4gICAgY29uc3QgZCA9IHJlZCA9PT0gbWluUkdCID8gZ3JlZW4gLSBibHVlIDogYmx1ZSA9PT0gbWluUkdCID8gcmVkIC0gZ3JlZW4gOiBibHVlIC0gcmVkO1xyXG4gICAgY29uc3QgaCA9IHJlZCA9PT0gbWluUkdCID8gMyA6IGJsdWUgPT09IG1pblJHQiA/IDEgOiA1O1xyXG4gICAgY29uc3QgaHVlID0gKDYwICogKGggLSBkIC8gKG1heFJHQiAtIG1pblJHQikpKSAvIDM2MDtcclxuICAgIGNvbnN0IHNhdHVyYXRpb24gPSAobWF4UkdCIC0gbWluUkdCKSAvIG1heFJHQjtcclxuICAgIGNvbnN0IHZhbHVlID0gbWF4UkdCO1xyXG4gICAgcmV0dXJuIHsgaDogaHVlLCBzOiBzYXR1cmF0aW9uLCB2OiB2YWx1ZSB9O1xyXG59XHJcbi8qKlxyXG4gKiBTcGxpdCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgaW50byBhbiBvYmplY3Qgd2l0aCBrZXkvdmFsdWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIENTUyBzb3VyY2UgY29kZSB0byBzcGxpdCBpbnRvIGtleS92YWx1ZSBvYmplY3QuXHJcbiAqIEByZXR1cm5zIEtleS92YWx1ZSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB7QGxpbmsgY3NzVGV4dH0uXHJcbiAqL1xyXG5mdW5jdGlvbiBzcGxpdENTU1RleHQoY3NzVGV4dCkge1xyXG4gICAgY29uc3QgdG1wRWxsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgY29uc3Qgc3R5bGVzID0ge307XHJcbiAgICB0bXBFbGxlbWVudC5zdHlsZS5jc3NUZXh0ID0gY3NzVGV4dDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG1wRWxsZW1lbnQuc3R5bGUubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBzdHlsZXNbdG1wRWxsZW1lbnQuc3R5bGVbaV1dID0gdG1wRWxsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0bXBFbGxlbWVudC5zdHlsZVtpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGVzO1xyXG59XHJcbi8qKlxyXG4gKiBBcHBlbmQgYSBzdHJpbmcgd2l0aCBjc3Mgc3R5bGVzIHRvIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdGhhdCB3aWxsIHJlY2VpdmUgbmV3IHN0eWxlcy5cclxuICogQHBhcmFtIGNzc1RleHQgLSBUaGUgc3R5bGVzIHRvIGJlIGFwcGVuZGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgZnJvbSBhbiBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IGZyb20gd2hpY2ggc3R5bGVzIHNob3VsZCBiZSByZW1vdmVkLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgcmVtb3ZlZC5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNzc1RleHQoZWxlbWVudCwgY3NzVGV4dCkge1xyXG4gICAgY29uc3QgY3NzU3R5bGUgPSBzcGxpdENTU1RleHQoY3NzVGV4dCk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjc3NTdHlsZSkpIHtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgSFNWIFxcPDAsIDFcXD4gaW50byBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbWppamFja3Nvbi81MzExMjU2fVxyXG4gKiBAcGFyYW0gaCAtIEh1ZS5cclxuICogQHBhcmFtIHMgLSBTYXR1cmF0aW9uLlxyXG4gKiBAcGFyYW0gdiAtIFZhbHVlLlxyXG4gKiBAcmV0dXJucyBSR0IgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gSFNWVG9SR0IoaCwgcywgdikge1xyXG4gICAgbGV0IHI7XHJcbiAgICBsZXQgZztcclxuICAgIGxldCBiO1xyXG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoaCAqIDYpO1xyXG4gICAgY29uc3QgZiA9IGggKiA2IC0gaTtcclxuICAgIGNvbnN0IHAgPSB2ICogKDEgLSBzKTtcclxuICAgIGNvbnN0IHEgPSB2ICogKDEgLSBmICogcyk7XHJcbiAgICBjb25zdCB0ID0gdiAqICgxIC0gKDEgLSBmKSAqIHMpO1xyXG4gICAgc3dpdGNoIChpICUgNikge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSB0KSwgKGIgPSBwKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAociA9IHEpLCAoZyA9IHYpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIChyID0gcCksIChnID0gdiksIChiID0gdCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSBxKSwgKGIgPSB2KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAociA9IHQpLCAoZyA9IHApLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIChyID0gdiksIChnID0gcCksIChiID0gcSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByOiBNYXRoLmZsb29yKHIgKiAyNTUpLFxyXG4gICAgICAgIGc6IE1hdGguZmxvb3IoZyAqIDI1NSksXHJcbiAgICAgICAgYjogTWF0aC5mbG9vcihiICogMjU1KSxcclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgSFNWIFxcPDAsIDFcXD4gaW50byBoZXggY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gaCAtIEh1ZS5cclxuICogQHBhcmFtIHMgLSBTYXR1cmF0aW9uLlxyXG4gKiBAcGFyYW0gdiAtIFZhbHVlLlxyXG4gKiBAcmV0dXJucyBIZXggY29sb3Igc3RyaW5nLlxyXG4gKi9cclxuZnVuY3Rpb24gSFNWVG9IZXgoaCwgcywgdikge1xyXG4gICAgY29uc3QgcmdiID0gSFNWVG9SR0IoaCwgcywgdik7XHJcbiAgICByZXR1cm4gUkdCVG9IZXgocmdiLnIsIHJnYi5nLCByZ2IuYik7XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIEhTViBcXDwwLCAxXFw+LlxyXG4gKlxyXG4gKiBAcGFyYW0gaGV4IC0gSGV4IGNvbG9yIHN0cmluZy5cclxuICogQHJldHVybnMgSFNWIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvSFNWKGhleCkge1xyXG4gICAgY29uc3QgcmdiID0gaGV4VG9SR0IoaGV4KTtcclxuICAgIGlmICghcmdiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7aGV4fScgaXMgbm90IGEgdmFsaWQgY29sb3IuYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUkdCVG9IU1YocmdiLnIsIHJnYi5nLCByZ2IuYik7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBVbmtub3duIHN0cmluZyB0aGF0IG1heSBjb250YWluIGEgY29sb3IuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNWYWxpZEhleChoZXgpIHtcclxuICAgIGNvbnN0IGlzT2sgPSAvKF4jWzAtOUEtRl17Nn0kKXwoXiNbMC05QS1GXXszfSQpL2kudGVzdChoZXgpO1xyXG4gICAgcmV0dXJuIGlzT2s7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIFJHQiBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2IgLSBVbmtub3duIHN0cmluZyB0aGF0IG1heSBjb250YWluIGEgY29sb3IuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNWYWxpZFJHQihyZ2IpIHtcclxuICAgIHJldHVybiByZ2JSRS50ZXN0KHJnYik7XHJcbn1cclxuLyoqXHJcbiAqIFZhbGlkYXRlIFJHQkEgY29sb3Igc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmdiYSAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCQShyZ2JhKSB7XHJcbiAgICByZXR1cm4gcmdiYVJFLnRlc3QocmdiYSk7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gZmllbGRzIC0gTmFtZXMgb2YgcHJvcGVydGllcyB0byBiZSBicmlkZ2VkLlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgQSBuZXcgb2JqZWN0IGluaGVyaXRpbmcgZnJvbSB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlQnJpZGdlT2JqZWN0KGZpZWxkcywgcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiByZWZlcmVuY2VPYmplY3QgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAvLyAhISEgdHlwZW9mIG51bGwgPT09ICdvYmplY3QnXHJcbiAgICAgICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGZpZWxkc1tpXSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ZpZWxkc1tpXV0gPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFRvW2ZpZWxkc1tpXV0gPSBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0W2ZpZWxkc1tpXV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3RUbztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUaGlzIHJlY3Vyc2l2ZWx5IHJlZGlyZWN0cyB0aGUgcHJvdG90eXBlIG9mIEpTT04gb2JqZWN0cyB0byB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGRlZmF1bHQgb3B0aW9ucy5cclxuICpcclxuICogQHBhcmFtIHJlZmVyZW5jZU9iamVjdCAtIFRoZSBvcmlnaW5hbCBvYmplY3QuXHJcbiAqIEByZXR1cm5zIFRoZSBFbGVtZW50IGlmIHRoZSByZWZlcmVuY2VPYmplY3QgaXMgYW4gRWxlbWVudCwgb3IgYSBuZXcgb2JqZWN0IGluaGVyaXRpbmcgZnJvbSB0aGUgcmVmZXJlbmNlT2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdCkge1xyXG4gICAgaWYgKHJlZmVyZW5jZU9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVmZXJlbmNlT2JqZWN0ICE9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0IGluc3RhbmNlb2YgRWxlbWVudCkge1xyXG4gICAgICAgIC8vIEF2b2lkIGJyaWRnaW5nIERPTSBvYmplY3RzXHJcbiAgICAgICAgcmV0dXJuIHJlZmVyZW5jZU9iamVjdDtcclxuICAgIH1cclxuICAgIGNvbnN0IG9iamVjdFRvID0gT2JqZWN0LmNyZWF0ZShyZWZlcmVuY2VPYmplY3QpO1xyXG4gICAgZm9yIChjb25zdCBpIGluIHJlZmVyZW5jZU9iamVjdCkge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVmZXJlbmNlT2JqZWN0LCBpKSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlZmVyZW5jZU9iamVjdFtpXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICBvYmplY3RUb1tpXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iamVjdFRvO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHN0YWJsZSBzb3J0IGltcGxlbWVudGF0aW9uLCB2ZXJ5IGZhc3QgZm9yIHByZXNvcnRlZCBkYXRhLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBhcnJheSB0byBiZSBzb3J0ZWQgKGluLXBsYWNlKS5cclxuICogQHBhcmFtIGNvbXBhcmUgLSBBbiBvcmRlciBjb21wYXJhdG9yLlxyXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGluc2VydFNvcnQoYSwgY29tcGFyZSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGFbaV07XHJcbiAgICAgICAgbGV0IGo7XHJcbiAgICAgICAgZm9yIChqID0gaTsgaiA+IDAgJiYgY29tcGFyZShrLCBhW2ogLSAxXSkgPCAwOyBqLS0pIHtcclxuICAgICAgICAgICAgYVtqXSA9IGFbaiAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhW2pdID0gaztcclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZSBvcHRpb25zIG9mIHN1Ym9iamVjdHMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxyXG4gKlxyXG4gKiBBIHJlcXVpcmVtZW50IG9mIHRoZXNlIHN1Ym9iamVjdHMgaXMgdGhhdCB0aGV5IGhhdmUgYW4gJ2VuYWJsZWQnIGVsZW1lbnRcclxuICogd2hpY2ggaXMgb3B0aW9uYWwgZm9yIHRoZSB1c2VyIGJ1dCBtYW5kYXRvcnkgZm9yIHRoZSBwcm9ncmFtLlxyXG4gKlxyXG4gKiBUaGUgYWRkZWQgdmFsdWUgaGVyZSBvZiB0aGUgbWVyZ2UgaXMgdGhhdCBvcHRpb24gJ2VuYWJsZWQnIGlzIHNldCBhcyByZXF1aXJlZC5cclxuICpcclxuICogQHBhcmFtIG1lcmdlVGFyZ2V0IC0gRWl0aGVyIHRoaXMub3B0aW9ucyBvciB0aGUgb3B0aW9ucyB1c2VkIGZvciB0aGUgZ3JvdXBzLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXHJcbiAqIEBwYXJhbSBvcHRpb24gLSBPcHRpb24ga2V5IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50LlxyXG4gKiBAcGFyYW0gZ2xvYmFsT3B0aW9ucyAtIEdsb2JhbCBvcHRpb25zLCBwYXNzZWQgaW4gdG8gZGV0ZXJtaW5lIHZhbHVlIG9mIG9wdGlvbiAnZW5hYmxlZCcuXHJcbiAqL1xyXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbiwgZ2xvYmFsT3B0aW9ucyA9IHt9KSB7XHJcbiAgICAvLyBMb2NhbCBoZWxwZXJzXHJcbiAgICBjb25zdCBpc1ByZXNlbnQgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiBvYmogIT09IHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBjb25zdCBpc09iamVjdCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCI7XHJcbiAgICB9O1xyXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM0NDkxMjg3LzEyMjM1MzFcclxuICAgIGNvbnN0IGlzRW1wdHkgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB4IGluIG9iaikge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgeCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICAvLyBHdWFyZHNcclxuICAgIGlmICghaXNPYmplY3QobWVyZ2VUYXJnZXQpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG1lcmdlVGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciBvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc1ByZXNlbnQob3B0aW9uKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciBvcHRpb24gbXVzdCBoYXZlIGEgdmFsdWVcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KGdsb2JhbE9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIGdsb2JhbE9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gQWN0dWFsIG1lcmdlIHJvdXRpbmUsIHNlcGFyYXRlZCBmcm9tIG1haW4gbG9naWNcclxuICAgIC8vIE9ubHkgYSBzaW5nbGUgbGV2ZWwgb2Ygb3B0aW9ucyBpcyBtZXJnZWQuIERlZXBlciBsZXZlbHMgYXJlIHJlZidkLiBUaGlzIG1heSBhY3R1YWxseSBiZSBhbiBpc3N1ZS5cclxuICAgIC8vXHJcbiAgICBjb25zdCBkb01lcmdlID0gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucywgb3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFpc09iamVjdCh0YXJnZXRbb3B0aW9uXSkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3JjID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgICAgIGNvbnN0IGRzdCA9IHRhcmdldFtvcHRpb25dO1xyXG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBzcmMpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzcmMsIHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBkc3RbcHJvcF0gPSBzcmNbcHJvcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLy8gTG9jYWwgaW5pdGlhbGl6YXRpb25cclxuICAgIGNvbnN0IHNyY09wdGlvbiA9IG9wdGlvbnNbb3B0aW9uXTtcclxuICAgIGNvbnN0IGdsb2JhbFBhc3NlZCA9IGlzT2JqZWN0KGdsb2JhbE9wdGlvbnMpICYmICFpc0VtcHR5KGdsb2JhbE9wdGlvbnMpO1xyXG4gICAgY29uc3QgZ2xvYmFsT3B0aW9uID0gZ2xvYmFsUGFzc2VkID8gZ2xvYmFsT3B0aW9uc1tvcHRpb25dIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgZ2xvYmFsRW5hYmxlZCA9IGdsb2JhbE9wdGlvbiA/IGdsb2JhbE9wdGlvbi5lbmFibGVkIDogdW5kZWZpbmVkO1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIE1haW4gcm91dGluZVxyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIGlmIChzcmNPcHRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkb1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzcmNPcHRpb24gPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICBtZXJnZVRhcmdldFtvcHRpb25dID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0uZW5hYmxlZCA9IHNyY09wdGlvbjtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoc3JjT3B0aW9uID09PSBudWxsICYmICFpc09iamVjdChtZXJnZVRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgIC8vIElmIHBvc3NpYmxlLCBleHBsaWNpdCBjb3B5IGZyb20gZ2xvYmFsc1xyXG4gICAgICAgIGlmIChpc1ByZXNlbnQoZ2xvYmFsT3B0aW9uKSkge1xyXG4gICAgICAgICAgICBtZXJnZVRhcmdldFtvcHRpb25dID0gT2JqZWN0LmNyZWF0ZShnbG9iYWxPcHRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFpc09iamVjdChzcmNPcHRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy9cclxuICAgIC8vIEVuc3VyZSB0aGF0ICdlbmFibGVkJyBpcyBwcm9wZXJseSBzZXQuIEl0IGlzIHJlcXVpcmVkIGludGVybmFsbHlcclxuICAgIC8vIE5vdGUgdGhhdCB0aGUgdmFsdWUgZnJvbSBvcHRpb25zIHdpbGwgYWx3YXlzIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgdmFsdWVcclxuICAgIC8vXHJcbiAgICBsZXQgZW5hYmxlZCA9IHRydWU7IC8vIGRlZmF1bHQgdmFsdWVcclxuICAgIGlmIChzcmNPcHRpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZW5hYmxlZCA9IHNyY09wdGlvbi5lbmFibGVkO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gVGFrZSBmcm9tIGdsb2JhbHMsIGlmIHByZXNlbnRcclxuICAgICAgICBpZiAoZ2xvYmFsRW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWQgPSBnbG9iYWxPcHRpb24uZW5hYmxlZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkb01lcmdlKG1lcmdlVGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pO1xyXG4gICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gZW5hYmxlZDtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSB2aXNpYmxlIGl0ZW0gaW4gYSBzb3J0ZWQgbGlzdC4gSWYgd2UgZmluZCBhIHZpc2libGUgaXRlbSwgdGhlIGNvZGUgdGhhdCB1c2VzXHJcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCB0aGVuIGl0ZXJhdGUgaW4gYm90aCBkaXJlY3Rpb25zIG92ZXIgdGhpcyBzb3J0ZWQgbGlzdCB0byBmaW5kIGFsbCB2aXNpYmxlIGl0ZW1zLlxyXG4gKlxyXG4gKiBAcGFyYW0gb3JkZXJlZEl0ZW1zIC0gSXRlbXMgb3JkZXJlZCBieSBzdGFydC5cclxuICogQHBhcmFtIGNvbXBhcmF0b3IgLSAtMSBpcyBsb3dlciwgMCBpcyBlcXVhbCwgMSBpcyBoaWdoZXIuXHJcbiAqIEBwYXJhbSBmaWVsZCAtIFByb3BlcnR5IG5hbWUgb24gYW4gaXRlbSAoVGhhdCBpcyBpdGVtW2ZpZWxkXSkuXHJcbiAqIEBwYXJhbSBmaWVsZDIgLSBTZWNvbmQgcHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdW2ZpZWxkMl0pLlxyXG4gKiBAcmV0dXJucyBJbmRleCBvZiB0aGUgZm91bmQgaXRlbSBvciAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC5cclxuICovXHJcbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaEN1c3RvbShvcmRlcmVkSXRlbXMsIGNvbXBhcmF0b3IsIGZpZWxkLCBmaWVsZDIpIHtcclxuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDAwMDtcclxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xyXG4gICAgbGV0IGxvdyA9IDA7XHJcbiAgICBsZXQgaGlnaCA9IG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgd2hpbGUgKGxvdyA8PSBoaWdoICYmIGl0ZXJhdGlvbiA8IG1heEl0ZXJhdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBvcmRlcmVkSXRlbXNbbWlkZGxlXTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkMiA9PT0gdW5kZWZpbmVkID8gaXRlbVtmaWVsZF0gOiBpdGVtW2ZpZWxkXVtmaWVsZDJdO1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdCA9IGNvbXBhcmF0b3IodmFsdWUpO1xyXG4gICAgICAgIGlmIChzZWFyY2hSZXN1bHQgPT0gMCkge1xyXG4gICAgICAgICAgICAvLyBqaWhhYSwgZm91bmQgYSB2aXNpYmxlIGl0ZW0hXHJcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNlYXJjaFJlc3VsdCA9PSAtMSkge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICBsb3cgPSBtaWRkbGUgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXQgaXMgdG9vIGJpZyAtLT4gZGVjcmVhc2UgaGlnaFxyXG4gICAgICAgICAgICBoaWdoID0gbWlkZGxlIC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaXRlcmF0aW9uKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGJpbmFyeSBzZWFyY2ggZm9yIGEgc3BlY2lmaWMgdmFsdWUgaW4gYSBzb3J0ZWQgYXJyYXkuXHJcbiAqIElmIGl0IGRvZXMgbm90IGV4aXN0IGJ1dCBpcyBpbiBiZXR3ZWVuIG9mIHR3byB2YWx1ZXMsIHdlIHJldHVybiBlaXRoZXIgdGhlXHJcbiAqIG9uZSBiZWZvcmUgb3IgdGhlIG9uZSBhZnRlciwgZGVwZW5kaW5nIG9uIHVzZXIgaW5wdXQgSWYgaXQgaXMgZm91bmQsIHdlXHJcbiAqIHJldHVybiB0aGUgaW5kZXgsIGVsc2UgLTEuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBTb3J0ZWQgYXJyYXkuXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgc2VhcmNoZWQgdmFsdWUuXHJcbiAqIEBwYXJhbSBmaWVsZCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IGluIGl0ZW1zIHRvIGJlIHNlYXJjaGVkLlxyXG4gKiBAcGFyYW0gc2lkZVByZWZlcmVuY2UgLSBJZiB0aGUgdGFyZ2V0IGlzIGJldHdlZW4gdHdvIHZhbHVlcywgc2hvdWxkIHRoZSBpbmRleCBvZiB0aGUgYmVmb3JlIG9yIHRoZSBhZnRlciBiZSByZXR1cm5lZD9cclxuICogQHBhcmFtIGNvbXBhcmF0b3IgLSBBbiBvcHRpb25hbCBjb21wYXJhdG9yLCByZXR1cm5pbmcgLTEsIDAsIDEgZm9yIFxcPCwgPT09LCBcXD4uXHJcbiAqIEByZXR1cm5zIFRoZSBpbmRleCBvZiBmb3VuZCB2YWx1ZSBvciAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC5cclxuICovXHJcbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaFZhbHVlKG9yZGVyZWRJdGVtcywgdGFyZ2V0LCBmaWVsZCwgc2lkZVByZWZlcmVuY2UsIGNvbXBhcmF0b3IpIHtcclxuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDAwMDtcclxuICAgIGxldCBpdGVyYXRpb24gPSAwO1xyXG4gICAgbGV0IGxvdyA9IDA7XHJcbiAgICBsZXQgaGlnaCA9IG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgbGV0IHByZXZWYWx1ZTtcclxuICAgIGxldCB2YWx1ZTtcclxuICAgIGxldCBuZXh0VmFsdWU7XHJcbiAgICBsZXQgbWlkZGxlO1xyXG4gICAgY29tcGFyYXRvciA9XHJcbiAgICAgICAgY29tcGFyYXRvciAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBjb21wYXJhdG9yXHJcbiAgICAgICAgICAgIDogZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhID09IGIgPyAwIDogYSA8IGIgPyAtMSA6IDE7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIC8vIGdldCBhIG5ldyBndWVzc1xyXG4gICAgICAgIG1pZGRsZSA9IE1hdGguZmxvb3IoMC41ICogKGhpZ2ggKyBsb3cpKTtcclxuICAgICAgICBwcmV2VmFsdWUgPSBvcmRlcmVkSXRlbXNbTWF0aC5tYXgoMCwgbWlkZGxlIC0gMSldW2ZpZWxkXTtcclxuICAgICAgICB2YWx1ZSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdW2ZpZWxkXTtcclxuICAgICAgICBuZXh0VmFsdWUgPVxyXG4gICAgICAgICAgICBvcmRlcmVkSXRlbXNbTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpXVtmaWVsZF07XHJcbiAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPT0gMCkge1xyXG4gICAgICAgICAgICAvLyB3ZSBmb3VuZCB0aGUgdGFyZ2V0XHJcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmF0b3IocHJldlZhbHVlLCB0YXJnZXQpIDwgMCAmJlxyXG4gICAgICAgICAgICBjb21wYXJhdG9yKHZhbHVlLCB0YXJnZXQpID4gMCkge1xyXG4gICAgICAgICAgICAvLyB0YXJnZXQgaXMgaW4gYmV0d2VlbiBvZiB0aGUgcHJldmlvdXMgYW5kIHRoZSBjdXJyZW50XHJcbiAgICAgICAgICAgIHJldHVybiBzaWRlUHJlZmVyZW5jZSA9PSBcImJlZm9yZVwiID8gTWF0aC5tYXgoMCwgbWlkZGxlIC0gMSkgOiBtaWRkbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IobmV4dFZhbHVlLCB0YXJnZXQpID4gMCkge1xyXG4gICAgICAgICAgICAvLyB0YXJnZXQgaXMgaW4gYmV0d2VlbiBvZiB0aGUgY3VycmVudCBhbmQgdGhlIG5leHRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCJcclxuICAgICAgICAgICAgICAgID8gbWlkZGxlXHJcbiAgICAgICAgICAgICAgICA6IE1hdGgubWluKG9yZGVyZWRJdGVtcy5sZW5ndGggLSAxLCBtaWRkbGUgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGRpZG50IGZpbmQgdGhlIHRhcmdldCwgd2UgbmVlZCB0byBjaGFuZ2Ugb3VyIGJvdW5kYXJpZXMuXHJcbiAgICAgICAgICAgIGlmIChjb21wYXJhdG9yKHZhbHVlLCB0YXJnZXQpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaXQgaXMgdG9vIHNtYWxsIC0tPiBpbmNyZWFzZSBsb3dcclxuICAgICAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgICAgICBoaWdoID0gbWlkZGxlIC0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIC8vIGRpZG50IGZpbmQgYW55dGhpbmcuIFJldHVybiAtMS5cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKlxyXG4gKiBFYXNpbmcgRnVuY3Rpb25zLlxyXG4gKiBPbmx5IGNvbnNpZGVyaW5nIHRoZSB0IHZhbHVlIGZvciB0aGUgcmFuZ2UgWzAsIDFdID0+IFswLCAxXS5cclxuICpcclxuICogSW5zcGlyYXRpb246IGZyb20gaHR0cDovL2dpem1hLmNvbS9lYXNpbmcvXHJcbiAqIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2dyZS8xNjUwMjk0XHJcbiAqL1xyXG5jb25zdCBlYXNpbmdGdW5jdGlvbnMgPSB7XHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIG5vIGVhc2luZyBhbmQgbm8gYWNjZWxlcmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgbGluZWFyKHQpIHtcclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YWQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogKDIgLSB0KTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAyICogdCAqIHQgOiAtMSArICg0IC0gMiAqIHQpICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluQ3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiAtLXQgKiB0ICogdCArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJbk91dEN1YmljKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDQgKiB0ICogdCAqIHQgOiAodCAtIDEpICogKDIgKiB0IC0gMikgKiAoMiAqIHQgLSAyKSArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIGZyb20gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJblF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWFydCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAtLXQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJbk91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDggKiB0ICogdCAqIHQgKiB0IDogMSAtIDggKiAtLXQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2NlbGVyYXRlIGZyb20gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VJblF1aW50KHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiAxICsgLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gMTYgKiB0ICogdCAqIHQgKiB0ICogdCA6IDEgKyAxNiAqIC0tdCAqIHQgKiB0ICogdCAqIHQ7XHJcbiAgICB9LFxyXG59O1xyXG4vKipcclxuICogRXhwZXJpbWVudGFseSBjb21wdXRlIHRoZSB3aWR0aCBvZiB0aGUgc2Nyb2xsYmFyIGZvciB0aGlzIGJyb3dzZXIuXHJcbiAqXHJcbiAqIEByZXR1cm5zIFRoZSB3aWR0aCBpbiBwaXhlbHMuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTY3JvbGxCYXJXaWR0aCgpIHtcclxuICAgIGNvbnN0IGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICBpbm5lci5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xyXG4gICAgaW5uZXIuc3R5bGUuaGVpZ2h0ID0gXCIyMDBweFwiO1xyXG4gICAgY29uc3Qgb3V0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgb3V0ZXIuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICBvdXRlci5zdHlsZS50b3AgPSBcIjBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUubGVmdCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgIG91dGVyLnN0eWxlLndpZHRoID0gXCIyMDBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUuaGVpZ2h0ID0gXCIxNTBweFwiO1xyXG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlcik7XHJcbiAgICBjb25zdCB3MSA9IGlubmVyLm9mZnNldFdpZHRoO1xyXG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSBcInNjcm9sbFwiO1xyXG4gICAgbGV0IHcyID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBpZiAodzEgPT0gdzIpIHtcclxuICAgICAgICB3MiA9IG91dGVyLmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdXRlcik7XHJcbiAgICByZXR1cm4gdzEgLSB3MjtcclxufVxyXG4vLyBAVE9ETzogVGhpcyBkb2Vzbid0IHdvcmsgcHJvcGVybHkuXHJcbi8vIEl0IHdvcmtzIG9ubHkgZm9yIHNpbmdsZSBwcm9wZXJ0eSBvYmplY3RzLFxyXG4vLyBvdGhlcndpc2UgaXQgY29tYmluZXMgYWxsIG9mIHRoZSB0eXBlcyBpbiBhIHVuaW9uLlxyXG4vLyBleHBvcnQgZnVuY3Rpb24gdG9wTW9zdDxLMSBleHRlbmRzIHN0cmluZywgVjE+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxPltdLFxyXG4vLyAgIGFjY2Vzc29yczogSzEgfCBbSzFdXHJcbi8vICk6IHVuZGVmaW5lZCB8IFYxXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgVjEsIFYyPiAoXHJcbi8vICAgcGlsZTogUmVjb3JkPEsxLCB1bmRlZmluZWQgfCBWMSB8IFJlY29yZDxLMiwgdW5kZWZpbmVkIHwgVjI+PltdLFxyXG4vLyAgIGFjY2Vzc29yczogW0sxLCBLMl1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjEgfCBWMlxyXG4vLyBleHBvcnQgZnVuY3Rpb24gdG9wTW9zdDxLMSBleHRlbmRzIHN0cmluZywgSzIgZXh0ZW5kcyBzdHJpbmcsIEszIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjIsIFYzPiAoXHJcbi8vICAgcGlsZTogUmVjb3JkPEsxLCB1bmRlZmluZWQgfCBWMSB8IFJlY29yZDxLMiwgdW5kZWZpbmVkIHwgVjIgfCBSZWNvcmQ8SzMsIHVuZGVmaW5lZCB8IFYzPj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyLCBLM11cclxuLy8gKTogdW5kZWZpbmVkIHwgVjEgfCBWMiB8IFYzXHJcbi8qKlxyXG4gKiBHZXQgdGhlIHRvcCBtb3N0IHByb3BlcnR5IHZhbHVlIGZyb20gYSBwaWxlIG9mIG9iamVjdHMuXHJcbiAqXHJcbiAqIEBwYXJhbSBwaWxlIC0gQXJyYXkgb2Ygb2JqZWN0cywgbm8gcmVxdWlyZWQgZm9ybWF0LlxyXG4gKiBAcGFyYW0gYWNjZXNzb3JzIC0gQXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXHJcbiAqIEZvciBleGFtcGxlIGBvYmplY3RbJ2ZvbyddWydiYXInXWAg4oaSIGBbJ2ZvbycsICdiYXInXWAuXHJcbiAqIEByZXR1cm5zIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB3aXRoIGdpdmVuIGFjY2Vzc29ycyBwYXRoIGZyb20gdGhlIGZpcnN0IHBpbGUgaXRlbSB3aGVyZSBpdCdzIG5vdCB1bmRlZmluZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiB0b3BNb3N0KHBpbGUsIGFjY2Vzc29ycykge1xyXG4gICAgbGV0IGNhbmRpZGF0ZTtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShhY2Nlc3NvcnMpKSB7XHJcbiAgICAgICAgYWNjZXNzb3JzID0gW2FjY2Vzc29yc107XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBwaWxlKSB7XHJcbiAgICAgICAgaWYgKG1lbWJlcikge1xyXG4gICAgICAgICAgICBjYW5kaWRhdGUgPSBtZW1iZXJbYWNjZXNzb3JzWzBdXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhY2Nlc3NvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGVbYWNjZXNzb3JzW2ldXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbmRpZGF0ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FuZGlkYXRlO1xyXG59XG5cbmNvbnN0IGh0bWxDb2xvcnMgPSB7XG4gIGJsYWNrOiBcIiMwMDAwMDBcIixcbiAgbmF2eTogXCIjMDAwMDgwXCIsXG4gIGRhcmtibHVlOiBcIiMwMDAwOEJcIixcbiAgbWVkaXVtYmx1ZTogXCIjMDAwMENEXCIsXG4gIGJsdWU6IFwiIzAwMDBGRlwiLFxuICBkYXJrZ3JlZW46IFwiIzAwNjQwMFwiLFxuICBncmVlbjogXCIjMDA4MDAwXCIsXG4gIHRlYWw6IFwiIzAwODA4MFwiLFxuICBkYXJrY3lhbjogXCIjMDA4QjhCXCIsXG4gIGRlZXBza3libHVlOiBcIiMwMEJGRkZcIixcbiAgZGFya3R1cnF1b2lzZTogXCIjMDBDRUQxXCIsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiBcIiMwMEZBOUFcIixcbiAgbGltZTogXCIjMDBGRjAwXCIsXG4gIHNwcmluZ2dyZWVuOiBcIiMwMEZGN0ZcIixcbiAgYXF1YTogXCIjMDBGRkZGXCIsXG4gIGN5YW46IFwiIzAwRkZGRlwiLFxuICBtaWRuaWdodGJsdWU6IFwiIzE5MTk3MFwiLFxuICBkb2RnZXJibHVlOiBcIiMxRTkwRkZcIixcbiAgbGlnaHRzZWFncmVlbjogXCIjMjBCMkFBXCIsXG4gIGZvcmVzdGdyZWVuOiBcIiMyMjhCMjJcIixcbiAgc2VhZ3JlZW46IFwiIzJFOEI1N1wiLFxuICBkYXJrc2xhdGVncmF5OiBcIiMyRjRGNEZcIixcbiAgbGltZWdyZWVuOiBcIiMzMkNEMzJcIixcbiAgbWVkaXVtc2VhZ3JlZW46IFwiIzNDQjM3MVwiLFxuICB0dXJxdW9pc2U6IFwiIzQwRTBEMFwiLFxuICByb3lhbGJsdWU6IFwiIzQxNjlFMVwiLFxuICBzdGVlbGJsdWU6IFwiIzQ2ODJCNFwiLFxuICBkYXJrc2xhdGVibHVlOiBcIiM0ODNEOEJcIixcbiAgbWVkaXVtdHVycXVvaXNlOiBcIiM0OEQxQ0NcIixcbiAgaW5kaWdvOiBcIiM0QjAwODJcIixcbiAgZGFya29saXZlZ3JlZW46IFwiIzU1NkIyRlwiLFxuICBjYWRldGJsdWU6IFwiIzVGOUVBMFwiLFxuICBjb3JuZmxvd2VyYmx1ZTogXCIjNjQ5NUVEXCIsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IFwiIzY2Q0RBQVwiLFxuICBkaW1ncmF5OiBcIiM2OTY5NjlcIixcbiAgc2xhdGVibHVlOiBcIiM2QTVBQ0RcIixcbiAgb2xpdmVkcmFiOiBcIiM2QjhFMjNcIixcbiAgc2xhdGVncmF5OiBcIiM3MDgwOTBcIixcbiAgbGlnaHRzbGF0ZWdyYXk6IFwiIzc3ODg5OVwiLFxuICBtZWRpdW1zbGF0ZWJsdWU6IFwiIzdCNjhFRVwiLFxuICBsYXduZ3JlZW46IFwiIzdDRkMwMFwiLFxuICBjaGFydHJldXNlOiBcIiM3RkZGMDBcIixcbiAgYXF1YW1hcmluZTogXCIjN0ZGRkQ0XCIsXG4gIG1hcm9vbjogXCIjODAwMDAwXCIsXG4gIHB1cnBsZTogXCIjODAwMDgwXCIsXG4gIG9saXZlOiBcIiM4MDgwMDBcIixcbiAgZ3JheTogXCIjODA4MDgwXCIsXG4gIHNreWJsdWU6IFwiIzg3Q0VFQlwiLFxuICBsaWdodHNreWJsdWU6IFwiIzg3Q0VGQVwiLFxuICBibHVldmlvbGV0OiBcIiM4QTJCRTJcIixcbiAgZGFya3JlZDogXCIjOEIwMDAwXCIsXG4gIGRhcmttYWdlbnRhOiBcIiM4QjAwOEJcIixcbiAgc2FkZGxlYnJvd246IFwiIzhCNDUxM1wiLFxuICBkYXJrc2VhZ3JlZW46IFwiIzhGQkM4RlwiLFxuICBsaWdodGdyZWVuOiBcIiM5MEVFOTBcIixcbiAgbWVkaXVtcHVycGxlOiBcIiM5MzcwRDhcIixcbiAgZGFya3Zpb2xldDogXCIjOTQwMEQzXCIsXG4gIHBhbGVncmVlbjogXCIjOThGQjk4XCIsXG4gIGRhcmtvcmNoaWQ6IFwiIzk5MzJDQ1wiLFxuICB5ZWxsb3dncmVlbjogXCIjOUFDRDMyXCIsXG4gIHNpZW5uYTogXCIjQTA1MjJEXCIsXG4gIGJyb3duOiBcIiNBNTJBMkFcIixcbiAgZGFya2dyYXk6IFwiI0E5QTlBOVwiLFxuICBsaWdodGJsdWU6IFwiI0FERDhFNlwiLFxuICBncmVlbnllbGxvdzogXCIjQURGRjJGXCIsXG4gIHBhbGV0dXJxdW9pc2U6IFwiI0FGRUVFRVwiLFxuICBsaWdodHN0ZWVsYmx1ZTogXCIjQjBDNERFXCIsXG4gIHBvd2RlcmJsdWU6IFwiI0IwRTBFNlwiLFxuICBmaXJlYnJpY2s6IFwiI0IyMjIyMlwiLFxuICBkYXJrZ29sZGVucm9kOiBcIiNCODg2MEJcIixcbiAgbWVkaXVtb3JjaGlkOiBcIiNCQTU1RDNcIixcbiAgcm9zeWJyb3duOiBcIiNCQzhGOEZcIixcbiAgZGFya2toYWtpOiBcIiNCREI3NkJcIixcbiAgc2lsdmVyOiBcIiNDMEMwQzBcIixcbiAgbWVkaXVtdmlvbGV0cmVkOiBcIiNDNzE1ODVcIixcbiAgaW5kaWFucmVkOiBcIiNDRDVDNUNcIixcbiAgcGVydTogXCIjQ0Q4NTNGXCIsXG4gIGNob2NvbGF0ZTogXCIjRDI2OTFFXCIsXG4gIHRhbjogXCIjRDJCNDhDXCIsXG4gIGxpZ2h0Z3JleTogXCIjRDNEM0QzXCIsXG4gIHBhbGV2aW9sZXRyZWQ6IFwiI0Q4NzA5M1wiLFxuICB0aGlzdGxlOiBcIiNEOEJGRDhcIixcbiAgb3JjaGlkOiBcIiNEQTcwRDZcIixcbiAgZ29sZGVucm9kOiBcIiNEQUE1MjBcIixcbiAgY3JpbXNvbjogXCIjREMxNDNDXCIsXG4gIGdhaW5zYm9ybzogXCIjRENEQ0RDXCIsXG4gIHBsdW06IFwiI0REQTBERFwiLFxuICBidXJseXdvb2Q6IFwiI0RFQjg4N1wiLFxuICBsaWdodGN5YW46IFwiI0UwRkZGRlwiLFxuICBsYXZlbmRlcjogXCIjRTZFNkZBXCIsXG4gIGRhcmtzYWxtb246IFwiI0U5OTY3QVwiLFxuICB2aW9sZXQ6IFwiI0VFODJFRVwiLFxuICBwYWxlZ29sZGVucm9kOiBcIiNFRUU4QUFcIixcbiAgbGlnaHRjb3JhbDogXCIjRjA4MDgwXCIsXG4gIGtoYWtpOiBcIiNGMEU2OENcIixcbiAgYWxpY2VibHVlOiBcIiNGMEY4RkZcIixcbiAgaG9uZXlkZXc6IFwiI0YwRkZGMFwiLFxuICBhenVyZTogXCIjRjBGRkZGXCIsXG4gIHNhbmR5YnJvd246IFwiI0Y0QTQ2MFwiLFxuICB3aGVhdDogXCIjRjVERUIzXCIsXG4gIGJlaWdlOiBcIiNGNUY1RENcIixcbiAgd2hpdGVzbW9rZTogXCIjRjVGNUY1XCIsXG4gIG1pbnRjcmVhbTogXCIjRjVGRkZBXCIsXG4gIGdob3N0d2hpdGU6IFwiI0Y4RjhGRlwiLFxuICBzYWxtb246IFwiI0ZBODA3MlwiLFxuICBhbnRpcXVld2hpdGU6IFwiI0ZBRUJEN1wiLFxuICBsaW5lbjogXCIjRkFGMEU2XCIsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiBcIiNGQUZBRDJcIixcbiAgb2xkbGFjZTogXCIjRkRGNUU2XCIsXG4gIHJlZDogXCIjRkYwMDAwXCIsXG4gIGZ1Y2hzaWE6IFwiI0ZGMDBGRlwiLFxuICBtYWdlbnRhOiBcIiNGRjAwRkZcIixcbiAgZGVlcHBpbms6IFwiI0ZGMTQ5M1wiLFxuICBvcmFuZ2VyZWQ6IFwiI0ZGNDUwMFwiLFxuICB0b21hdG86IFwiI0ZGNjM0N1wiLFxuICBob3RwaW5rOiBcIiNGRjY5QjRcIixcbiAgY29yYWw6IFwiI0ZGN0Y1MFwiLFxuICBkYXJrb3JhbmdlOiBcIiNGRjhDMDBcIixcbiAgbGlnaHRzYWxtb246IFwiI0ZGQTA3QVwiLFxuICBvcmFuZ2U6IFwiI0ZGQTUwMFwiLFxuICBsaWdodHBpbms6IFwiI0ZGQjZDMVwiLFxuICBwaW5rOiBcIiNGRkMwQ0JcIixcbiAgZ29sZDogXCIjRkZENzAwXCIsXG4gIHBlYWNocHVmZjogXCIjRkZEQUI5XCIsXG4gIG5hdmFqb3doaXRlOiBcIiNGRkRFQURcIixcbiAgbW9jY2FzaW46IFwiI0ZGRTRCNVwiLFxuICBiaXNxdWU6IFwiI0ZGRTRDNFwiLFxuICBtaXN0eXJvc2U6IFwiI0ZGRTRFMVwiLFxuICBibGFuY2hlZGFsbW9uZDogXCIjRkZFQkNEXCIsXG4gIHBhcGF5YXdoaXA6IFwiI0ZGRUZENVwiLFxuICBsYXZlbmRlcmJsdXNoOiBcIiNGRkYwRjVcIixcbiAgc2Vhc2hlbGw6IFwiI0ZGRjVFRVwiLFxuICBjb3Juc2lsazogXCIjRkZGOERDXCIsXG4gIGxlbW9uY2hpZmZvbjogXCIjRkZGQUNEXCIsXG4gIGZsb3JhbHdoaXRlOiBcIiNGRkZBRjBcIixcbiAgc25vdzogXCIjRkZGQUZBXCIsXG4gIHllbGxvdzogXCIjRkZGRjAwXCIsXG4gIGxpZ2h0eWVsbG93OiBcIiNGRkZGRTBcIixcbiAgaXZvcnk6IFwiI0ZGRkZGMFwiLFxuICB3aGl0ZTogXCIjRkZGRkZGXCIsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGl4ZWxSYXRpbz0xXVxuICovXG5sZXQgQ29sb3JQaWNrZXIkMSA9IGNsYXNzIENvbG9yUGlja2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGl4ZWxSYXRpbz0xXVxuICAgKi9cbiAgY29uc3RydWN0b3IocGl4ZWxSYXRpbyA9IDEpIHtcbiAgICB0aGlzLnBpeGVsUmF0aW8gPSBwaXhlbFJhdGlvO1xuICAgIHRoaXMuZ2VuZXJhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5jZW50ZXJDb29yZGluYXRlcyA9IHsgeDogMjg5IC8gMiwgeTogMjg5IC8gMiB9O1xuICAgIHRoaXMuciA9IDI4OSAqIDAuNDk7XG4gICAgdGhpcy5jb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5odWVDaXJjbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pbml0aWFsQ29sb3IgPSB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGE6IDEuMCB9O1xuICAgIHRoaXMucHJldmlvdXNDb2xvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFwcGxpZWQgPSBmYWxzZTtcblxuICAgIC8vIGJvdW5kIGJ5XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayA9ICgpID0+IHt9O1xuICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9ICgpID0+IHt9O1xuXG4gICAgLy8gY3JlYXRlIGFsbCBET00gZWxlbWVudHNcbiAgICB0aGlzLl9jcmVhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGluc2VydHMgdGhlIGNvbG9yUGlja2VyIGludG8gYSBkaXYgZnJvbSB0aGUgRE9NXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyXG4gICAqL1xuICBpbnNlcnRUbyhjb250YWluZXIpIHtcbiAgICBpZiAodGhpcy5oYW1tZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5oYW1tZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy5oYW1tZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICAgIHRoaXMuX2JpbmRIYW1tZXIoKTtcblxuICAgIHRoaXMuX3NldFNpemUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgb24gYXBwbHkgYW5kIHNhdmUuIEJpbmQgaXQgdG8gdGhlIGFwcGxpY2F0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBzZXRVcGRhdGVDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRnVuY3Rpb24gYXR0ZW1wdGVkIHRvIHNldCBhcyBjb2xvclBpY2tlciB1cGRhdGUgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldENsb3NlQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRnVuY3Rpb24gYXR0ZW1wdGVkIHRvIHNldCBhcyBjb2xvclBpY2tlciBjbG9zaW5nIGNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pc0NvbG9yU3RyaW5nKGNvbG9yKSB7XG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGh0bWxDb2xvcnNbY29sb3JdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbG9yIG9mIHRoZSBjb2xvclBpY2tlclxuICAgKiBTdXBwb3J0ZWQgZm9ybWF0czpcbiAgICogJ3JlZCcgICAgICAgICAgICAgICAgICAgLS0+IEhUTUwgY29sb3Igc3RyaW5nXG4gICAqICcjZmZmZmZmJyAgICAgICAgICAgICAgIC0tPiBoZXggc3RyaW5nXG4gICAqICdyZ2IoMjU1LDI1NSwyNTUpJyAgICAgIC0tPiByZ2Igc3RyaW5nXG4gICAqICdyZ2JhKDI1NSwyNTUsMjU1LDEuMCknIC0tPiByZ2JhIHN0cmluZ1xuICAgKiB7cjoyNTUsZzoyNTUsYjoyNTV9ICAgICAtLT4gcmdiIG9iamVjdFxuICAgKiB7cjoyNTUsZzoyNTUsYjoyNTUsYToxLjB9IC0tPiByZ2JhIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG9iamVjdH0gY29sb3JcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2V0SW5pdGlhbD10cnVlXVxuICAgKi9cbiAgc2V0Q29sb3IoY29sb3IsIHNldEluaXRpYWwgPSB0cnVlKSB7XG4gICAgaWYgKGNvbG9yID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZ2JhO1xuXG4gICAgLy8gaWYgYSBodG1sIGNvbG9yIHNob3J0aGFuZCBpcyB1c2VkLCBjb252ZXJ0IHRvIGhleFxuICAgIGNvbnN0IGh0bWxDb2xvciA9IHRoaXMuX2lzQ29sb3JTdHJpbmcoY29sb3IpO1xuICAgIGlmIChodG1sQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29sb3IgPSBodG1sQ29sb3I7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9ybWF0XG4gICAgaWYgKGlzU3RyaW5nKGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKGlzVmFsaWRSR0IoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHJnYmFBcnJheSA9IGNvbG9yXG4gICAgICAgICAgLnN1YnN0cig0KVxuICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3IubGVuZ3RoIC0gNSlcbiAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xuICAgICAgICByZ2JhID0geyByOiByZ2JhQXJyYXlbMF0sIGc6IHJnYmFBcnJheVsxXSwgYjogcmdiYUFycmF5WzJdLCBhOiAxLjAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZFJHQkEoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHJnYmFBcnJheSA9IGNvbG9yXG4gICAgICAgICAgLnN1YnN0cig1KVxuICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3IubGVuZ3RoIC0gNilcbiAgICAgICAgICAuc3BsaXQoXCIsXCIpO1xuICAgICAgICByZ2JhID0ge1xuICAgICAgICAgIHI6IHJnYmFBcnJheVswXSxcbiAgICAgICAgICBnOiByZ2JhQXJyYXlbMV0sXG4gICAgICAgICAgYjogcmdiYUFycmF5WzJdLFxuICAgICAgICAgIGE6IHJnYmFBcnJheVszXSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZEhleChjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiT2JqID0gaGV4VG9SR0IoY29sb3IpO1xuICAgICAgICByZ2JhID0geyByOiByZ2JPYmouciwgZzogcmdiT2JqLmcsIGI6IHJnYk9iai5iLCBhOiAxLjAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbG9yIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2xvci5yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb2xvci5nICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjb2xvci5iICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgYWxwaGEgPSBjb2xvci5hICE9PSB1bmRlZmluZWQgPyBjb2xvci5hIDogXCIxLjBcIjtcbiAgICAgICAgICByZ2JhID0geyByOiBjb2xvci5yLCBnOiBjb2xvci5nLCBiOiBjb2xvci5iLCBhOiBhbHBoYSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbG9yXG4gICAgaWYgKHJnYmEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlVua25vd24gY29sb3IgcGFzc2VkIHRvIHRoZSBjb2xvclBpY2tlci4gU3VwcG9ydGVkIGFyZSBzdHJpbmdzOiByZ2IsIGhleCwgcmdiYS4gT2JqZWN0OiByZ2IgKHtyOnIsZzpnLGI6YixbYTphXX0pLiBTdXBwbGllZDogXCIgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNvbG9yKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0Q29sb3IocmdiYSwgc2V0SW5pdGlhbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgc2hvd3MgdGhlIGNvbG9yIHBpY2tlci5cbiAgICogVGhlIGh1ZSBjaXJjbGUgaXMgY29uc3RydWN0ZWQgb25jZSBhbmQgc3RvcmVkLlxuICAgKi9cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5jbG9zZUNhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICB0aGlzLl9nZW5lcmF0ZUh1ZUNpcmNsZSgpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBSSVZBVEUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuICAvKipcbiAgICogSGlkZSB0aGUgcGlja2VyLiBJcyBjYWxsZWQgYnkgdGhlIGNhbmNlbCBidXR0b24uXG4gICAqIE9wdGlvbmFsIGJvb2xlYW4gdG8gc3RvcmUgdGhlIHByZXZpb3VzIGNvbG9yIGZvciBlYXN5IGFjY2VzcyBsYXRlciBvbi5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbc3RvcmVQcmV2aW91cz10cnVlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hpZGUoc3RvcmVQcmV2aW91cyA9IHRydWUpIHtcbiAgICAvLyBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIG5leHQgdGltZTtcbiAgICBpZiAoc3RvcmVQcmV2aW91cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5wcmV2aW91c0NvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXBwbGllZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmluaXRpYWxDb2xvcik7XG4gICAgfVxuXG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cbiAgICAvLyBjYWxsIHRoZSBjbG9zaW5nIGNhbGxiYWNrLCByZXN0b3JpbmcgdGhlIG9uY2xpY2sgbWV0aG9kLlxuICAgIC8vIHRoaXMgaXMgaW4gYSBzZXRUaW1lb3V0IGJlY2F1c2UgaXQgd2lsbCB0cmlnZ2VyIHRoZSBzaG93IGFnYWluIGJlZm9yZSB0aGUgY2xpY2sgaXMgZG9uZS5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2soKTtcbiAgICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIGJvdW5kIHRvIHRoZSBzYXZlIGJ1dHRvbi4gU2F2ZXMgYW5kIGhpZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NhdmUoKSB7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLmFwcGxpZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9oaWRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQm91bmQgdG8gYXBwbHkgYnV0dG9uLiBTYXZlcyBidXQgZG9lcyBub3QgY2xvc2UuIElzIHVuZG9uZSBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hcHBseSgpIHtcbiAgICB0aGlzLmFwcGxpZWQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2sodGhpcy5jb2xvcik7XG4gICAgdGhpcy5fdXBkYXRlUGlja2VyKHRoaXMuY29sb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIGxvYWQgdGhlIGNvbG9yIGZyb20gdGhlIHByZXZpb3VzIHNlc3Npb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbG9hZExhc3QoKSB7XG4gICAgaWYgKHRoaXMucHJldmlvdXNDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldENvbG9yKHRoaXMucHJldmlvdXNDb2xvciwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGVydChcIlRoZXJlIGlzIG5vIGxhc3QgY29sb3IgdG8gbG9hZC4uLlwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBjb2xvciwgcGxhY2UgdGhlIHBpY2tlclxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0Q29sb3IocmdiYSwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICAvLyBzdG9yZSB0aGUgaW5pdGlhbCBjb2xvclxuICAgIGlmIChzZXRJbml0aWFsID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmluaXRpYWxDb2xvciA9IE9iamVjdC5hc3NpZ24oe30sIHJnYmEpO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuXG4gICAgY29uc3QgYW5nbGVDb252ZXJ0ID0gMiAqIE1hdGguUEk7XG4gICAgY29uc3QgcmFkaXVzID0gdGhpcy5yICogaHN2LnM7XG4gICAgY29uc3QgeCA9XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnggKyByYWRpdXMgKiBNYXRoLnNpbihhbmdsZUNvbnZlcnQgKiBoc3YuaCk7XG4gICAgY29uc3QgeSA9XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnkgKyByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZUNvbnZlcnQgKiBoc3YuaCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUubGVmdCA9XG4gICAgICB4IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudFdpZHRoICsgXCJweFwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS50b3AgPVxuICAgICAgeSAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG5cbiAgICB0aGlzLl91cGRhdGVQaWNrZXIocmdiYSk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gb3BhY2l0eSBjb250cm9sXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldE9wYWNpdHkodmFsdWUpIHtcbiAgICB0aGlzLmNvbG9yLmEgPSB2YWx1ZSAvIDEwMDtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gYnJpZ2h0bmVzcyBjb250cm9sXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldEJyaWdodG5lc3ModmFsdWUpIHtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVih0aGlzLmNvbG9yLnIsIHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iKTtcbiAgICBoc3YudiA9IHZhbHVlIC8gMTAwO1xuICAgIGNvbnN0IHJnYmEgPSBIU1ZUb1JHQihoc3YuaCwgaHN2LnMsIGhzdi52KTtcbiAgICByZ2JhW1wiYVwiXSA9IHRoaXMuY29sb3IuYTtcbiAgICB0aGlzLmNvbG9yID0gcmdiYTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGUgdGhlIGNvbG9yIHBpY2tlci4gQSBibGFjayBjaXJjbGUgb3ZlcmxheXMgdGhlIGh1ZSBjaXJjbGUgdG8gbWltaWMgdGhlIGJyaWdodG5lc3MgZGVjcmVhc2luZy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHJnYmFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVQaWNrZXIocmdiYSA9IHRoaXMuY29sb3IpIHtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVihyZ2JhLnIsIHJnYmEuZywgcmdiYS5iKTtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICBpZiAodGhpcy5waXhlbFJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBpeGVsUmF0aW8gPVxuICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAoY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHguYmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIDEpO1xuICAgIH1cbiAgICBjdHguc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcblxuICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICBjb25zdCB3ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBoID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRIZWlnaHQ7XG4gICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgIGN0eC5wdXRJbWFnZURhdGEodGhpcy5odWVDaXJjbGUsIDAsIDApO1xuICAgIGN0eC5maWxsU3R5bGUgPSBcInJnYmEoMCwwLDAsXCIgKyAoMSAtIGhzdi52KSArIFwiKVwiO1xuICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgY3R4LmZpbGwoKTtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gMTAwICogaHN2LnY7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UudmFsdWUgPSAxMDAgKiByZ2JhLmE7XG5cbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgXCJyZ2JhKFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5iICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gICAgdGhpcy5uZXdDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgXCJyZ2JhKFwiICtcbiAgICAgIHRoaXMuY29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5iICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB1c2VkIGJ5IGNyZWF0ZSB0byBzZXQgdGhlIHNpemUgb2YgdGhlIGNhbnZhcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRTaXplKCkge1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLnN0eWxlLmhlaWdodCA9IFwiMTAwJVwiO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy53aWR0aCA9IDI4OSAqIHRoaXMucGl4ZWxSYXRpbztcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmhlaWdodCA9IDI4OSAqIHRoaXMucGl4ZWxSYXRpbztcbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGUgYWxsIGRvbSBlbGVtZW50c1xuICAgKiBUT0RPOiBjbGVhbnVwLCBsb3RzIG9mIHNpbWlsYXIgZG9tIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlKCkge1xuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtY29sb3ItcGlja2VyXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGFzc05hbWUgPSBcInZpcy1zZWxlY3RvclwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlclNlbGVjdG9yKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckNhbnZhcyk7XG5cbiAgICBpZiAoIXRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dCkge1xuICAgICAgY29uc3Qgbm9DYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpO1xuICAgICAgbm9DYW52YXMuc3R5bGUuY29sb3IgPSBcInJlZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUucGFkZGluZyA9IFwiMTBweFwiO1xuICAgICAgbm9DYW52YXMuaW5uZXJUZXh0ID0gXCJFcnJvcjogeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTCBjYW52YXNcIjtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuYXBwZW5kQ2hpbGQobm9DYW52YXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzXG4gICAgICAgIC5nZXRDb250ZXh0KFwiMmRcIilcbiAgICAgICAgLnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5jbGFzc05hbWUgPSBcInZpcy1jb2xvclwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm9wYWNpdHlEaXYuY2xhc3NOYW1lID0gXCJ2aXMtb3BhY2l0eVwiO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuY2xhc3NOYW1lID0gXCJ2aXMtYnJpZ2h0bmVzc1wiO1xuXG4gICAgdGhpcy5hcnJvd0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcnJvd0Rpdi5jbGFzc05hbWUgPSBcInZpcy1hcnJvd1wiO1xuXG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLnR5cGUgPSBcInJhbmdlXCI7IC8vIE5vdCBzdXBwb3J0ZWQgb24gSUU5XG4gICAgICB0aGlzLm9wYWNpdHlSYW5nZS5taW4gPSBcIjBcIjtcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1heCA9IFwiMTAwXCI7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPOiBBZGQgc29tZSBlcnJvciBoYW5kbGluZy5cbiAgICB9XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UudmFsdWUgPSBcIjEwMFwiO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLmNsYXNzTmFtZSA9IFwidmlzLXJhbmdlXCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMub3BhY2l0eURpdi5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlSYW5nZSk7XG4gICAgdGhpcy5icmlnaHRuZXNzRGl2LmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc1JhbmdlKTtcblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRPcGFjaXR5KHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRPcGFjaXR5KHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fc2V0QnJpZ2h0bmVzcyh0aGlzLnZhbHVlKTtcbiAgICB9O1xuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fc2V0QnJpZ2h0bmVzcyh0aGlzLnZhbHVlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0xhYmVsLmNsYXNzTmFtZSA9IFwidmlzLWxhYmVsIHZpcy1icmlnaHRuZXNzXCI7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuaW5uZXJUZXh0ID0gXCJicmlnaHRuZXNzOlwiO1xuXG4gICAgdGhpcy5vcGFjaXR5TGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eUxhYmVsLmNsYXNzTmFtZSA9IFwidmlzLWxhYmVsIHZpcy1vcGFjaXR5XCI7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuaW5uZXJUZXh0ID0gXCJvcGFjaXR5OlwiO1xuXG4gICAgdGhpcy5uZXdDb2xvckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5uZXdDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1uZXctY29sb3JcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmlubmVyVGV4dCA9IFwibmV3XCI7XG5cbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuY2xhc3NOYW1lID0gXCJ2aXMtaW5pdGlhbC1jb2xvclwiO1xuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LmlubmVyVGV4dCA9IFwiaW5pdGlhbFwiO1xuXG4gICAgdGhpcy5jYW5jZWxCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtY2FuY2VsXCI7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uaW5uZXJUZXh0ID0gXCJjYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5faGlkZS5iaW5kKHRoaXMsIGZhbHNlKTtcblxuICAgIHRoaXMuYXBwbHlCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYXBwbHlCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1hcHBseVwiO1xuICAgIHRoaXMuYXBwbHlCdXR0b24uaW5uZXJUZXh0ID0gXCJhcHBseVwiO1xuICAgIHRoaXMuYXBwbHlCdXR0b24ub25jbGljayA9IHRoaXMuX2FwcGx5LmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnNhdmVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLXNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24uaW5uZXJUZXh0ID0gXCJzYXZlXCI7XG4gICAgdGhpcy5zYXZlQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9zYXZlLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmxvYWRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWxvYWRcIjtcbiAgICB0aGlzLmxvYWRCdXR0b24uaW5uZXJUZXh0ID0gXCJsb2FkIGxhc3RcIjtcbiAgICB0aGlzLmxvYWRCdXR0b24ub25jbGljayA9IHRoaXMuX2xvYWRMYXN0LmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY29sb3JQaWNrZXJEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5hcnJvd0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmJyaWdodG5lc3NMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmJyaWdodG5lc3NEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5vcGFjaXR5TGFiZWwpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5vcGFjaXR5RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubmV3Q29sb3JEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5pbml0aWFsQ29sb3JEaXYpO1xuXG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmNhbmNlbEJ1dHRvbik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFwcGx5QnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuc2F2ZUJ1dHRvbik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmxvYWRCdXR0b24pO1xuICB9XG5cbiAgLyoqXG4gICAqIGJpbmQgaGFtbWVyIHRvIHRoZSBjb2xvciBwaWNrZXJcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9iaW5kSGFtbWVyKCkge1xuICAgIHRoaXMuZHJhZyA9IHt9O1xuICAgIHRoaXMucGluY2ggPSB7fTtcbiAgICB0aGlzLmhhbW1lciA9IG5ldyBIYW1tZXIkMSh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcbiAgICB0aGlzLmhhbW1lci5nZXQoXCJwaW5jaFwiKS5zZXQoeyBlbmFibGU6IHRydWUgfSk7XG5cbiAgICB0aGlzLmhhbW1lci5vbihcImhhbW1lci5pbnB1dFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5pc0ZpcnN0KSB7XG4gICAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJ0YXBcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFuc3RhcnRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFubW92ZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5lbmRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9tb3ZlU2VsZWN0b3IoZXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlIHRoZSBodWUgY2lyY2xlLiBUaGlzIGlzIHJlbGF0aXZlbHkgaGVhdnkgKDIwMG1zKSBhbmQgaXMgZG9uZSBvbmx5IG9uY2Ugb24gdGhlIGZpcnN0IHRpbWUgaXQgaXMgc2hvd24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2VuZXJhdGVIdWVDaXJjbGUoKSB7XG4gICAgaWYgKHRoaXMuZ2VuZXJhdGVkID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgY3R4ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICBpZiAodGhpcy5waXhlbFJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgICAoY3R4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICBjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgICAxKTtcbiAgICAgIH1cbiAgICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgICAvLyBjbGVhciB0aGUgY2FudmFzXG4gICAgICBjb25zdCB3ID0gdGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG5cbiAgICAgIC8vIGRyYXcgaHVlIGNpcmNsZVxuICAgICAgbGV0IHgsIHksIGh1ZSwgc2F0O1xuICAgICAgdGhpcy5jZW50ZXJDb29yZGluYXRlcyA9IHsgeDogdyAqIDAuNSwgeTogaCAqIDAuNSB9O1xuICAgICAgdGhpcy5yID0gMC40OSAqIHc7XG4gICAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAoMiAqIE1hdGguUEkpIC8gMzYwO1xuICAgICAgY29uc3QgaGZhYyA9IDEgLyAzNjA7XG4gICAgICBjb25zdCBzZmFjID0gMSAvIHRoaXMucjtcbiAgICAgIGxldCByZ2I7XG4gICAgICBmb3IgKGh1ZSA9IDA7IGh1ZSA8IDM2MDsgaHVlKyspIHtcbiAgICAgICAgZm9yIChzYXQgPSAwOyBzYXQgPCB0aGlzLnI7IHNhdCsrKSB7XG4gICAgICAgICAgeCA9IHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHNhdCAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGh1ZSk7XG4gICAgICAgICAgeSA9IHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHNhdCAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGh1ZSk7XG4gICAgICAgICAgcmdiID0gSFNWVG9SR0IoaHVlICogaGZhYywgc2F0ICogc2ZhYywgMSk7XG4gICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiKFwiICsgcmdiLnIgKyBcIixcIiArIHJnYi5nICsgXCIsXCIgKyByZ2IuYiArIFwiKVwiO1xuICAgICAgICAgIGN0eC5maWxsUmVjdCh4IC0gMC41LCB5IC0gMC41LCAyLCAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCJyZ2JhKDAsMCwwLDEpXCI7XG4gICAgICBjdHguY2lyY2xlKHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCwgdGhpcy5jZW50ZXJDb29yZGluYXRlcy55LCB0aGlzLnIpO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICB0aGlzLmh1ZUNpcmNsZSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgdywgaCk7XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtb3ZlIHRoZSBzZWxlY3Rvci4gVGhpcyBpcyBjYWxsZWQgYnkgaGFtbWVyIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbW92ZVNlbGVjdG9yKGV2ZW50KSB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuY29sb3JQaWNrZXJEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbGVmdCA9IGV2ZW50LmNlbnRlci54IC0gcmVjdC5sZWZ0O1xuICAgIGNvbnN0IHRvcCA9IGV2ZW50LmNlbnRlci55IC0gcmVjdC50b3A7XG5cbiAgICBjb25zdCBjZW50ZXJZID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgY2VudGVyWCA9IDAuNSAqIHRoaXMuY29sb3JQaWNrZXJEaXYuY2xpZW50V2lkdGg7XG5cbiAgICBjb25zdCB4ID0gbGVmdCAtIGNlbnRlclg7XG4gICAgY29uc3QgeSA9IHRvcCAtIGNlbnRlclk7XG5cbiAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIoeCwgeSk7XG4gICAgY29uc3QgcmFkaXVzID0gMC45OCAqIE1hdGgubWluKE1hdGguc3FydCh4ICogeCArIHkgKiB5KSwgY2VudGVyWCk7XG5cbiAgICBjb25zdCBuZXdUb3AgPSBNYXRoLmNvcyhhbmdsZSkgKiByYWRpdXMgKyBjZW50ZXJZO1xuICAgIGNvbnN0IG5ld0xlZnQgPSBNYXRoLnNpbihhbmdsZSkgKiByYWRpdXMgKyBjZW50ZXJYO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICBuZXdUb3AgLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50SGVpZ2h0ICsgXCJweFwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIG5ld0xlZnQgLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBsZXQgaCA9IGFuZ2xlIC8gKDIgKiBNYXRoLlBJKTtcbiAgICBoID0gaCA8IDAgPyBoICsgMSA6IGg7XG4gICAgY29uc3QgcyA9IHJhZGl1cyAvIHRoaXMucjtcbiAgICBjb25zdCBoc3YgPSBSR0JUb0hTVih0aGlzLmNvbG9yLnIsIHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iKTtcbiAgICBoc3YuaCA9IGg7XG4gICAgaHN2LnMgPSBzO1xuICAgIGNvbnN0IHJnYmEgPSBIU1ZUb1JHQihoc3YuaCwgaHN2LnMsIGhzdi52KTtcbiAgICByZ2JhW1wiYVwiXSA9IHRoaXMuY29sb3IuYTtcbiAgICB0aGlzLmNvbG9yID0gcmdiYTtcblxuICAgIC8vIHVwZGF0ZSBwcmV2aWV3c1xuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG59O1xuXG4vKipcbiAqIFdyYXAgZ2l2ZW4gdGV4dCAobGFzdCBhcmd1bWVudCkgaW4gSFRNTCBlbGVtZW50cyAoYWxsIHByZWNlZGluZyBhcmd1bWVudHMpLlxuICpcbiAqIEBwYXJhbSB7Li4uYW55fSByZXN0IC0gTGlzdCBvZiB0YWcgbmFtZXMgZm9sbG93ZWQgYnkgaW5uZXIgdGV4dC5cbiAqIEByZXR1cm5zIEFuIGVsZW1lbnQgb3IgYSB0ZXh0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHdyYXBJblRhZyguLi5yZXN0KSB7XG4gIGlmIChyZXN0Lmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMuXCIpO1xuICB9IGVsc2UgaWYgKHJlc3QubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlc3RbMF0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJlc3RbMF0pO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQod3JhcEluVGFnKC4uLnJlc3Quc2xpY2UoMSkpKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB3YXkgdGhpcyB3b3JrcyBpcyBmb3IgYWxsIHByb3BlcnRpZXMgb2YgdGhpcy5wb3NzaWJsZSBvcHRpb25zLCB5b3UgY2FuIHN1cHBseSB0aGUgcHJvcGVydHkgbmFtZSBpbiBhbnkgZm9ybSB0byBsaXN0IHRoZSBvcHRpb25zLlxuICogQm9vbGVhbiBvcHRpb25zIGFyZSByZWNvZ25pc2VkIGFzIEJvb2xlYW5cbiAqIE51bWJlciBvcHRpb25zIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbZGVmYXVsdCB2YWx1ZSwgbWluIHZhbHVlLCBtYXggdmFsdWUsIHN0ZXBzaXplXVxuICogQ29sb3JzIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbJ2NvbG9yJywgJyNmZmZmZmYnXVxuICogU3RyaW5ncyB3aXRoIHNob3VsZCBiZSB3cml0dGVuIGFzIGFycmF5OiBbb3B0aW9uMSwgb3B0aW9uMiwgb3B0aW9uMywgLi5dXG4gKlxuICogVGhlIG9wdGlvbnMgYXJlIG1hdGNoZWQgd2l0aCB0aGVpciBjb3VudGVycGFydHMgaW4gZWFjaCBvZiB0aGUgbW9kdWxlcyBhbmQgdGhlIHZhbHVlcyB1c2VkIGluIHRoZSBjb25maWd1cmF0aW9uIGFyZVxuICovXG5sZXQgQ29uZmlndXJhdG9yJDEgPSBjbGFzcyBDb25maWd1cmF0b3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudE1vZHVsZSAgICAgICAgfCB0aGUgbG9jYXRpb24gd2hlcmUgcGFyZW50TW9kdWxlLnNldE9wdGlvbnMoKSBjYW4gYmUgY2FsbGVkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0Q29udGFpbmVyICAgIHwgdGhlIGRlZmF1bHQgY29udGFpbmVyIG9mIHRoZSBtb2R1bGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ3VyZU9wdGlvbnMgICAgfCB0aGUgZnVsbHkgY29uZmlndXJlZCBhbmQgcHJlZGVmaW5lZCBvcHRpb25zIHNldCBmb3VuZCBpbiBhbGxPcHRpb25zLmpzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaXhlbFJhdGlvICAgICAgICAgIHwgY2FudmFzIHBpeGVsIHJhdGlvXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhpZGVPcHRpb24gICAgICAgIHwgY3VzdG9tIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGhpZGUgb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50TW9kdWxlLFxuICAgIGRlZmF1bHRDb250YWluZXIsXG4gICAgY29uZmlndXJlT3B0aW9ucyxcbiAgICBwaXhlbFJhdGlvID0gMSxcbiAgICBoaWRlT3B0aW9uID0gKCkgPT4gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnRNb2R1bGU7XG4gICAgdGhpcy5jaGFuZ2VkT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuY29udGFpbmVyID0gZGVmYXVsdENvbnRhaW5lcjtcbiAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmhpZGVPcHRpb24gPSBoaWRlT3B0aW9uO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMucG9wdXBDb3VudGVyID0gMDtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBmaWx0ZXI6IHRydWUsXG4gICAgICBjb250YWluZXI6IHVuZGVmaW5lZCxcbiAgICAgIHNob3dCdXR0b246IHRydWUsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmNvbmZpZ3VyZU9wdGlvbnMgPSBjb25maWd1cmVPcHRpb25zO1xuICAgIHRoaXMubW9kdWxlT3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcbiAgICB0aGlzLnBvcHVwRGl2ID0ge307XG4gICAgdGhpcy5wb3B1cExpbWl0ID0gNTtcbiAgICB0aGlzLnBvcHVwSGlzdG9yeSA9IHt9O1xuICAgIHRoaXMuY29sb3JQaWNrZXIgPSBuZXcgQ29sb3JQaWNrZXIkMShwaXhlbFJhdGlvKTtcbiAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogcmVmcmVzaCBhbGwgb3B0aW9ucy5cbiAgICogQmVjYXVzZSBhbGwgbW9kdWxlcyBwYXJzZSB0aGVpciBvcHRpb25zIGJ5IHRoZW1zZWx2ZXMsIHdlIGp1c3QgdXNlIHRoZWlyIG9wdGlvbnMuIFdlIGNvcHkgdGhlbSBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmVzZXQgdGhlIHBvcHVwIGhpc3RvcnkgYmVjYXVzZSB0aGUgaW5kaWNlcyBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQuXG4gICAgICB0aGlzLnBvcHVwSGlzdG9yeSA9IHt9O1xuICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcblxuICAgICAgbGV0IGVuYWJsZWQgPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zLmpvaW4oKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb25zIGNhbm5vdCBiZSBudWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnNob3dCdXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5zaG93QnV0dG9uID0gb3B0aW9ucy5zaG93QnV0dG9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSB0cnVlO1xuICAgICAgICBlbmFibGVkID0gb3B0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucztcbiAgICAgICAgZW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgfVxuICAgIHRoaXMuX2NsZWFuKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG1vZHVsZU9wdGlvbnNcbiAgICovXG4gIHNldE1vZHVsZU9wdGlvbnMobW9kdWxlT3B0aW9ucykge1xuICAgIHRoaXMubW9kdWxlT3B0aW9ucyA9IG1vZHVsZU9wdGlvbnM7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLl9jbGVhbigpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMub3B0aW9ucy5jb250YWluZXI7XG4gICAgICB9XG4gICAgICB0aGlzLl9jcmVhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG5cbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCBjb3VudGVyID0gMDtcbiAgICBsZXQgc2hvdyA9IGZhbHNlO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIGluIHRoaXMuY29uZmlndXJlT3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnMsIG9wdGlvbikpIHtcbiAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgIHNob3cgPSBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIob3B0aW9uLCBbXSk7XG4gICAgICAgICAgc2hvdyA9XG4gICAgICAgICAgICBzaG93IHx8XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIgPT09IHRydWUgfHwgZmlsdGVyLmluZGV4T2Yob3B0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICBzaG93ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IHRydWU7XG5cbiAgICAgICAgICAvLyBsaW5lYnJlYWsgYmV0d2VlbiBjYXRlZ29yaWVzXG4gICAgICAgICAgaWYgKGNvdW50ZXIgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShbXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGEgaGVhZGVyIGZvciB0aGUgY2F0ZWdvcnlcbiAgICAgICAgICB0aGlzLl9tYWtlSGVhZGVyKG9wdGlvbik7XG5cbiAgICAgICAgICAvLyBnZXQgdGhlIHN1YiBvcHRpb25zXG4gICAgICAgICAgdGhpcy5faGFuZGxlT2JqZWN0KHRoaXMuY29uZmlndXJlT3B0aW9uc1tvcHRpb25dLCBbb3B0aW9uXSk7XG4gICAgICAgIH1cbiAgICAgICAgY291bnRlcisrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9tYWtlQnV0dG9uKCk7XG4gICAgdGhpcy5fcHVzaCgpO1xuICAgIC8vfiB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKHRoaXMuY29udGFpbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBkcmF3IGFsbCBET00gZWxlbWVudHMgb24gdGhlIHNjcmVlblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3B1c2goKSB7XG4gICAgdGhpcy53cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLndyYXBwZXIuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi13cmFwcGVyXCI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy53cmFwcGVyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zaG93UG9wdXBJZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBhbGwgRE9NIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndyYXBwZXIucmVtb3ZlQ2hpbGQodGhpcy5kb21FbGVtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud3JhcHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgICAgdGhpcy53cmFwcGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmRvbUVsZW1lbnRzID0gW107XG5cbiAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgYWN0dWFsT3B0aW9ucyBpZiBpdCBleGlzdHNcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFZhbHVlKHBhdGgpIHtcbiAgICBsZXQgYmFzZSA9IHRoaXMubW9kdWxlT3B0aW9ucztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChiYXNlW3BhdGhbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYmFzZSA9IGJhc2VbcGF0aFtpXV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cblxuICAvKipcbiAgICogYWxsIG9wdGlvbiBlbGVtZW50cyBhcmUgd3JhcHBlZCBpbiBhbiBpdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge0FycmF5LjxFbGVtZW50Pn0gZG9tRWxlbWVudHNcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlSXRlbShwYXRoLCAuLi5kb21FbGVtZW50cykge1xuICAgIGlmICh0aGlzLmFsbG93Q3JlYXRpb24gPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgaXRlbS5jbGFzc05hbWUgPVxuICAgICAgICBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctaXRlbSB2aXMtY29uZmlnLXNcIiArIHBhdGgubGVuZ3RoO1xuICAgICAgZG9tRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIGhlYWRlciBmb3IgbWFqb3Igc3ViamVjdHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlSGVhZGVyKG5hbWUpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctaGVhZGVyXCI7XG4gICAgZGl2LmlubmVyVGV4dCA9IG5hbWU7XG4gICAgdGhpcy5fbWFrZUl0ZW0oW10sIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGxhYmVsLCBpZiBpdCBpcyBhbiBvYmplY3QgbGFiZWwsIGl0IGdldHMgZGlmZmVyZW50IHN0eWxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2JqZWN0TGFiZWxcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VMYWJlbChuYW1lLCBwYXRoLCBvYmplY3RMYWJlbCA9IGZhbHNlKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkaXYuY2xhc3NOYW1lID1cbiAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1sYWJlbCB2aXMtY29uZmlnLXNcIiArIHBhdGgubGVuZ3RoO1xuICAgIGlmIChvYmplY3RMYWJlbCA9PT0gdHJ1ZSkge1xuICAgICAgd2hpbGUgKGRpdi5maXJzdENoaWxkKSB7XG4gICAgICAgIGRpdi5yZW1vdmVDaGlsZChkaXYuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICBkaXYuYXBwZW5kQ2hpbGQod3JhcEluVGFnKFwiaVwiLCBcImJcIiwgbmFtZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZSArIFwiOlwiO1xuICAgIH1cbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBkcm9wZG93biBsaXN0IGZvciBtdWx0aXBsZSBwb3NzaWJsZSBzdHJpbmcgb3B0b2luc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VEcm9wZG93bihhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKTtcbiAgICBzZWxlY3QuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXNlbGVjdFwiO1xuICAgIGxldCBzZWxlY3RlZFZhbHVlID0gMDtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGFyci5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGFyci5pbmRleE9mKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcbiAgICAgIG9wdGlvbi52YWx1ZSA9IGFycltpXTtcbiAgICAgIGlmIChpID09PSBzZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IFwic2VsZWN0ZWRcIjtcbiAgICAgIH1cbiAgICAgIG9wdGlvbi5pbm5lclRleHQgPSBhcnJbaV07XG4gICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgc2VsZWN0Lm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3VwZGF0ZSh0aGlzLnZhbHVlLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgc2VsZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgcmFuZ2Ugb2JqZWN0IGZvciBudW1lcmljIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYXJyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGFyclswXTtcbiAgICBjb25zdCBtaW4gPSBhcnJbMV07XG4gICAgY29uc3QgbWF4ID0gYXJyWzJdO1xuICAgIGNvbnN0IHN0ZXAgPSBhcnJbM107XG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgcmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlXCI7XG4gICAgdHJ5IHtcbiAgICAgIHJhbmdlLnR5cGUgPSBcInJhbmdlXCI7IC8vIG5vdCBzdXBwb3J0ZWQgb24gSUU5XG4gICAgICByYW5nZS5taW4gPSBtaW47XG4gICAgICByYW5nZS5tYXggPSBtYXg7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPOiBBZGQgc29tZSBlcnJvciBoYW5kbGluZy5cbiAgICB9XG4gICAgcmFuZ2Uuc3RlcCA9IHN0ZXA7XG5cbiAgICAvLyBzZXQgdXAgdGhlIHBvcHVwIHNldHRpbmdzIGluIGNhc2UgdGhleSBhcmUgbmVlZGVkLlxuICAgIGxldCBwb3B1cFN0cmluZyA9IFwiXCI7XG4gICAgbGV0IHBvcHVwVmFsdWUgPSAwO1xuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZhY3RvciA9IDEuMjtcbiAgICAgIGlmICh2YWx1ZSA8IDAgJiYgdmFsdWUgKiBmYWN0b3IgPCBtaW4pIHtcbiAgICAgICAgcmFuZ2UubWluID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1pbjtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAvIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgLyBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgKiBmYWN0b3IgPiBtYXggJiYgbWF4ICE9PSAxKSB7XG4gICAgICAgIHJhbmdlLm1heCA9IE1hdGguY2VpbCh2YWx1ZSAqIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5tYXg7XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIHJhbmdlLnZhbHVlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGlucHV0LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1yYW5nZWlucHV0XCI7XG4gICAgaW5wdXQudmFsdWUgPSByYW5nZS52YWx1ZTtcblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICByYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIG1lLl91cGRhdGUoTnVtYmVyKHRoaXMudmFsdWUpLCBwYXRoKTtcbiAgICB9O1xuICAgIHJhbmdlLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIHJhbmdlLCBpbnB1dCk7XG5cbiAgICAvLyBpZiBhIHBvcHVwIGlzIG5lZWRlZCBBTkQgaXQgaGFzIG5vdCBiZWVuIHNob3duIGZvciB0aGlzIHZhbHVlLCBzaG93IGl0LlxuICAgIGlmIChwb3B1cFN0cmluZyAhPT0gXCJcIiAmJiB0aGlzLnBvcHVwSGlzdG9yeVtpdGVtSW5kZXhdICE9PSBwb3B1cFZhbHVlKSB7XG4gICAgICB0aGlzLnBvcHVwSGlzdG9yeVtpdGVtSW5kZXhdID0gcG9wdXBWYWx1ZTtcbiAgICAgIHRoaXMuX3NldHVwUG9wdXAocG9wdXBTdHJpbmcsIGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBidXR0b24gb2JqZWN0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUJ1dHRvbigpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNob3dCdXR0b24gPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGdlbmVyYXRlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLmlubmVyVGV4dCA9IFwiZ2VuZXJhdGUgb3B0aW9uc1wiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24ub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcHJpbnRPcHRpb25zKCk7XG4gICAgICB9O1xuICAgICAgZ2VuZXJhdGVCdXR0b24ub25tb3VzZW92ZXIgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b24gaG92ZXJcIjtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3V0ID0gKCkgPT4ge1xuICAgICAgICBnZW5lcmF0ZUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctYnV0dG9uXCI7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5vcHRpb25zQ29udGFpbmVyLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1vcHRpb24tY29udGFpbmVyXCI7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaCh0aGlzLm9wdGlvbnNDb250YWluZXIpO1xuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKGdlbmVyYXRlQnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcHJlcGFyZSB0aGUgcG9wdXBcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXR1cFBvcHVwKHN0cmluZywgaW5kZXgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmluaXRpYWxpemVkID09PSB0cnVlICYmXG4gICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPT09IHRydWUgJiZcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyIDwgdGhpcy5wb3B1cExpbWl0XG4gICAgKSB7XG4gICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZGl2LmlkID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24tcG9wdXBcIjtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBzdHJpbmc7XG4gICAgICBkaXYub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnBvcHVwQ291bnRlciArPSAxO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHsgaHRtbDogZGl2LCBpbmRleDogaW5kZXggfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcmVtb3ZlIHRoZSBwb3B1cCBmcm9tIHRoZSBkb21cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVQb3B1cCgpIHtcbiAgICBpZiAodGhpcy5wb3B1cERpdi5odG1sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9wdXBEaXYuaHRtbCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cERpdi5kZWxldGVUaW1lb3V0KTtcbiAgICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgaWYgaXQgaXMgbmVlZGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Nob3dQb3B1cElmTmVlZGVkKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29ycmVzcG9uZGluZ0VsZW1lbnQgPSB0aGlzLmRvbUVsZW1lbnRzW3RoaXMucG9wdXBEaXYuaW5kZXhdO1xuICAgICAgY29uc3QgcmVjdCA9IGNvcnJlc3BvbmRpbmdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyBcInB4XCI7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUudG9wID0gcmVjdC50b3AgLSAzMCArIFwicHhcIjsgLy8gMzAgaXMgdGhlIGhlaWdodDtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuaGlkZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgICAgfSwgMTUwMCk7XG4gICAgICB0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlUG9wdXAoKTtcbiAgICAgIH0sIDE4MDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY2hlY2tib3ggZm9yIGJvb2xlYW4gb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNoZWNrYm94KGRlZmF1bHRWYWx1ZSwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBjaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBjaGVja2JveC50eXBlID0gXCJjaGVja2JveFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jaGVja2JveFwiO1xuICAgIGNoZWNrYm94LmNoZWNrZWQgPSBkZWZhdWx0VmFsdWU7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY2hlY2tib3gub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMuY2hlY2tlZCwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgdGV4dCBpbnB1dCBmaWVsZCBmb3Igc3RyaW5nIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWZhdWx0VmFsdWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VUZXh0SW5wdXQoZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcInRleHRcIjtcbiAgICBjaGVja2JveC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctdGV4dFwiO1xuICAgIGNoZWNrYm94LnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY2hlY2tib3gub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBjaGVja2JveCk7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGNvbG9yIGZpZWxkIHdpdGggYSBjb2xvciBwaWNrZXIgZm9yIGNvbG9yIGZpZWxkc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VDb2xvckZpZWxkKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29sb3IgPSBhcnJbMV07XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBkZWZhdWx0Q29sb3IgOiB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAhPT0gXCJub25lXCIpIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9ja1wiO1xuICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNvbG9yQmxvY2sgbm9uZVwiO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBkaXYpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgdGhlIGNvbG9yIGJ1dHRvbnMgdG8gY2FsbCB0aGUgY29sb3IgcGlja2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZGl2XG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKSB7XG4gICAgLy8gY2xlYXIgdGhlIGNhbGxiYWNrIGZyb20gdGhpcyBkaXZcbiAgICBkaXYub25jbGljayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgdGhpcy5jb2xvclBpY2tlci5pbnNlcnRUbyhkaXYpO1xuICAgIHRoaXMuY29sb3JQaWNrZXIuc2hvdygpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRDb2xvcih2YWx1ZSk7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRVcGRhdGVDYWxsYmFjaygoY29sb3IpID0+IHtcbiAgICAgIGNvbnN0IGNvbG9yU3RyaW5nID1cbiAgICAgICAgXCJyZ2JhKFwiICsgY29sb3IuciArIFwiLFwiICsgY29sb3IuZyArIFwiLFwiICsgY29sb3IuYiArIFwiLFwiICsgY29sb3IuYSArIFwiKVwiO1xuICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yU3RyaW5nO1xuICAgICAgdGhpcy5fdXBkYXRlKGNvbG9yU3RyaW5nLCBwYXRoKTtcbiAgICB9KTtcblxuICAgIC8vIG9uIGNsb3NlIG9mIHRoZSBjb2xvcnBpY2tlciwgcmVzdG9yZSB0aGUgY2FsbGJhY2suXG4gICAgdGhpcy5jb2xvclBpY2tlci5zZXRDbG9zZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHBhcnNlIGFuIG9iamVjdCBhbmQgZHJhdyB0aGUgY29ycmVjdCBpdGVtc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtwYXRoPVtdXSAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrT25seT1mYWxzZV1cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGFuZGxlT2JqZWN0KG9iaiwgcGF0aCA9IFtdLCBjaGVja09ubHkgPSBmYWxzZSkge1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5vcHRpb25zLmZpbHRlcjtcbiAgICBsZXQgdmlzaWJsZUluU2V0ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBzdWJPYmogaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgc3ViT2JqKSkge1xuICAgICAgICBzaG93ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaXRlbSA9IG9ialtzdWJPYmpdO1xuICAgICAgICBjb25zdCBuZXdQYXRoID0gY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIHN1Yk9iaik7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBzaG93ID0gZmlsdGVyKHN1Yk9iaiwgcGF0aCk7XG5cbiAgICAgICAgICAvLyBpZiBuZWVkZWQgd2UgbXVzdCBnbyBkZWVwZXIgaW50byB0aGUgb2JqZWN0LlxuICAgICAgICAgIGlmIChzaG93ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShpdGVtKSAmJlxuICAgICAgICAgICAgICB0eXBlb2YgaXRlbSAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICB0eXBlb2YgaXRlbSAhPT0gXCJib29sZWFuXCIgJiZcbiAgICAgICAgICAgICAgaXRlbSBpbnN0YW5jZW9mIE9iamVjdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICBzaG93ID0gdGhpcy5faGFuZGxlT2JqZWN0KGl0ZW0sIG5ld1BhdGgsIHRydWUpO1xuICAgICAgICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBjaGVja09ubHkgPT09IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHZpc2libGVJblNldCA9IHRydWU7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZShuZXdQYXRoKTtcblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBcnJheShpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZVRleHRJbnB1dChpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VDaGVja2JveChpdGVtLCB2YWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBza2lwIHRoZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBlbmFibGVkXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGlkZU9wdGlvbihwYXRoLCBzdWJPYmosIHRoaXMubW9kdWxlT3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgLy8gaW5pdGlhbGx5IGNvbGxhcHNlIG9wdGlvbnMgd2l0aCBhbiBkaXNhYmxlZCBlbmFibGVkIG9wdGlvbi5cbiAgICAgICAgICAgICAgaWYgKGl0ZW0uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFBhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkobmV3UGF0aCwgXCJlbmFibGVkXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuYWJsZWRWYWx1ZSA9IHRoaXMuX2dldFZhbHVlKGVuYWJsZWRQYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZFZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChzdWJPYmosIG5ld1BhdGgsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUl0ZW0obmV3UGF0aCwgbGFiZWwpO1xuICAgICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlT2JqZWN0KGl0ZW0sIG5ld1BhdGgpIHx8IHZpc2libGVJblNldDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIGVuYWJsZWRWYWx1ZSwgbmV3UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFrZUl0ZW0obmV3UGF0aCwgbGFiZWwpO1xuICAgICAgICAgICAgICAgIHZpc2libGVJblNldCA9XG4gICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJkb250IGtub3cgaG93IHRvIGhhbmRsZVwiLCBpdGVtLCBzdWJPYmosIG5ld1BhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZUluU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSB0aGUgYXJyYXkgdHlwZSBvZiBvcHRpb25cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYXJyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVBcnJheShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHR5cGVvZiBhcnJbMF0gPT09IFwic3RyaW5nXCIgJiYgYXJyWzBdID09PSBcImNvbG9yXCIpIHtcbiAgICAgIHRoaXMuX21ha2VDb2xvckZpZWxkKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclsxXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5fbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclswXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdGhpcy5fbWFrZVJhbmdlKGFyciwgdmFsdWUsIHBhdGgpO1xuICAgICAgaWYgKGFyclswXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IE51bWJlcih2YWx1ZSkgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxlZCB0byB1cGRhdGUgdGhlIG5ldHdvcmsgd2l0aCB0aGUgbmV3IHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlKHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2NvbnN0cnVjdE9wdGlvbnModmFsdWUsIHBhdGgpO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5wYXJlbnQuYm9keSAmJlxuICAgICAgdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdFxuICAgICkge1xuICAgICAgdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyLmVtaXQoXCJjb25maWdDaGFuZ2VcIiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMucGFyZW50LnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBib29sZWFufSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBwYXJhbSB7e319IG9wdGlvbnNPYmpcbiAgICogQHJldHVybnMge3t9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbnN0cnVjdE9wdGlvbnModmFsdWUsIHBhdGgsIG9wdGlvbnNPYmogPSB7fSkge1xuICAgIGxldCBwb2ludGVyID0gb3B0aW9uc09iajtcblxuICAgIC8vIHdoZW4gZHJvcGRvd24gYm94ZXMgY2FuIGJlIHN0cmluZyBvciBib29sZWFuLCB3ZSB0eXBlY2FzdCBpdCBpbnRvIGNvcnJlY3QgdHlwZXNcbiAgICB2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiA/IHRydWUgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHZhbHVlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGF0aFtpXSAhPT0gXCJnbG9iYWxcIikge1xuICAgICAgICBpZiAocG9pbnRlcltwYXRoW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcG9pbnRlcltwYXRoW2ldXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpICE9PSBwYXRoLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBwb2ludGVyID0gcG9pbnRlcltwYXRoW2ldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnNPYmo7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcmludE9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuXG4gICAgd2hpbGUgKHRoaXMub3B0aW9uc0NvbnRhaW5lci5maXJzdENoaWxkKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuYXBwZW5kQ2hpbGQoXG4gICAgICB3cmFwSW5UYWcoXCJwcmVcIiwgXCJjb25zdCBvcHRpb25zID0gXCIgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zLCBudWxsLCAyKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHt7fX0gb3B0aW9uc1xuICAgKi9cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoYW5nZWRPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLl9jb25zdHJ1Y3RPcHRpb25zKFxuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zW2ldLnZhbHVlLFxuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zW2ldLnBhdGgsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG59O1xuXG4vKipcbiAqIFBvcHVwIGlzIGEgY2xhc3MgdG8gY3JlYXRlIGEgcG9wdXAgd2luZG93IHdpdGggc29tZSB0ZXh0XG4gKi9cbmxldCBQb3B1cCQxID0gY2xhc3MgUG9wdXAge1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXIgICAgICAgVGhlIGNvbnRhaW5lciBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgb3ZlcmZsb3dNZXRob2QgIEhvdyB0aGUgcG9wdXAgc2hvdWxkIGFjdCB0byBvdmVyZmxvd2luZyAoJ2ZsaXAnIG9yICdjYXAnKVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCBvdmVyZmxvd01ldGhvZCkge1xuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMub3ZlcmZsb3dNZXRob2QgPSBvdmVyZmxvd01ldGhvZCB8fCBcImNhcFwiO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xuICAgIHRoaXMucGFkZGluZyA9IDU7XG4gICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgZnJhbWVcbiAgICB0aGlzLmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmZyYW1lLmNsYXNzTmFtZSA9IFwidmlzLXRvb2x0aXBcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCAgIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKiBAcGFyYW0ge251bWJlcn0geSAgIFZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIHNldFBvc2l0aW9uKHgsIHkpIHtcbiAgICB0aGlzLnggPSBwYXJzZUludCh4KTtcbiAgICB0aGlzLnkgPSBwYXJzZUludCh5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbnRlbnQgZm9yIHRoZSBwb3B1cCB3aW5kb3cuIFRoaXMgY2FuIGJlIEhUTUwgY29kZSBvciB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEVsZW1lbnR9IGNvbnRlbnRcbiAgICovXG4gIHNldFRleHQoY29udGVudCkge1xuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgd2hpbGUgKHRoaXMuZnJhbWUuZmlyc3RDaGlsZCkge1xuICAgICAgICB0aGlzLmZyYW1lLnJlbW92ZUNoaWxkKHRoaXMuZnJhbWUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdHJpbmcgY29udGFpbmluZyBsaXRlcmFsIHRleHQsIGVsZW1lbnQgaGFzIHRvIGJlIHVzZWQgZm9yIEhUTUwgZHVlIHRvXG4gICAgICAvLyBYU1Mgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGlubmVySFRNTCAoaS5lLiBwcmV2ZW50IFhTUyBieSBhY2NpZGVudCkuXG4gICAgICB0aGlzLmZyYW1lLmlubmVyVGV4dCA9IGNvbnRlbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIHBvcHVwIHdpbmRvd1xuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkb1Nob3ddICAgIFNob3cgb3IgaGlkZSB0aGUgd2luZG93XG4gICAqL1xuICBzaG93KGRvU2hvdykge1xuICAgIGlmIChkb1Nob3cgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZG9TaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZG9TaG93ID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmZyYW1lLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5mcmFtZS5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZnJhbWUucGFyZW50Tm9kZS5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuZnJhbWUucGFyZW50Tm9kZS5jbGllbnRXaWR0aDtcblxuICAgICAgbGV0IGxlZnQgPSAwLFxuICAgICAgICB0b3AgPSAwO1xuXG4gICAgICBpZiAodGhpcy5vdmVyZmxvd01ldGhvZCA9PSBcImZsaXBcIikge1xuICAgICAgICBsZXQgaXNMZWZ0ID0gZmFsc2UsXG4gICAgICAgICAgaXNUb3AgPSB0cnVlOyAvLyBXaGVyZSBhcm91bmQgdGhlIHBvc2l0aW9uIGl0J3MgbG9jYXRlZFxuXG4gICAgICAgIGlmICh0aGlzLnkgLSBoZWlnaHQgPCB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICBpc1RvcCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMueCArIHdpZHRoID4gbWF4V2lkdGggLSB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICBpc0xlZnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTGVmdCkge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLnggLSB3aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZWZ0ID0gdGhpcy54O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVG9wKSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55IC0gaGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvcCA9IHRoaXMueTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gdGhpcy55IC0gaGVpZ2h0O1xuICAgICAgICBpZiAodG9wICsgaGVpZ2h0ICsgdGhpcy5wYWRkaW5nID4gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgdG9wID0gbWF4SGVpZ2h0IC0gaGVpZ2h0IC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3AgPCB0aGlzLnBhZGRpbmcpIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBsZWZ0ID0gdGhpcy54O1xuICAgICAgICBpZiAobGVmdCArIHdpZHRoICsgdGhpcy5wYWRkaW5nID4gbWF4V2lkdGgpIHtcbiAgICAgICAgICBsZWZ0ID0gbWF4V2lkdGggLSB3aWR0aCAtIHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVmdCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS5sZWZ0ID0gbGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gdG9wICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG4gICAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGlkZSB0aGUgcG9wdXAgd2luZG93XG4gICAqL1xuICBoaWRlKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICB0aGlzLmZyYW1lLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5mcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZnJhbWUpOyAvLyBSZW1vdmUgZWxlbWVudCBmcm9tIERPTVxuICB9XG59O1xuXG5sZXQgZXJyb3JGb3VuZCA9IGZhbHNlO1xubGV0IGFsbE9wdGlvbnM7XG5cbmNvbnN0IFZBTElEQVRPUl9QUklOVF9TVFlMRSQxID0gXCJiYWNrZ3JvdW5kOiAjRkZlZWVlOyBjb2xvcjogI2RkMDAwMFwiO1xuXG4vKipcbiAqICBVc2VkIHRvIHZhbGlkYXRlIG9wdGlvbnMuXG4gKi9cbmxldCBWYWxpZGF0b3IkMSA9IGNsYXNzIFZhbGlkYXRvciB7XG4gIC8qKlxuICAgKiBNYWluIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gcmVmZXJlbmNlT3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gc3ViT2JqZWN0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGUob3B0aW9ucywgcmVmZXJlbmNlT3B0aW9ucywgc3ViT2JqZWN0KSB7XG4gICAgZXJyb3JGb3VuZCA9IGZhbHNlO1xuICAgIGFsbE9wdGlvbnMgPSByZWZlcmVuY2VPcHRpb25zO1xuICAgIGxldCB1c2VkT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgaWYgKHN1Yk9iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1c2VkT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnNbc3ViT2JqZWN0XTtcbiAgICB9XG4gICAgVmFsaWRhdG9yLnBhcnNlKG9wdGlvbnMsIHVzZWRPcHRpb25zLCBbXSk7XG4gICAgcmV0dXJuIGVycm9yRm91bmQ7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCB0cmF2ZXJzZSBhbiBvYmplY3QgcmVjdXJzaXZlbHkgYW5kIGNoZWNrIGV2ZXJ5IHZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcGFyc2Uob3B0aW9ucywgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCkge1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICBWYWxpZGF0b3IuY2hlY2sob3B0aW9uLCBvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZXZlcnkgdmFsdWUuIElmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QsIGNhbGwgdGhlIHBhcnNlIGZ1bmN0aW9uIG9uIHRoYXQgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgY2hlY2sob3B0aW9uLCBvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgaWYgKFxuICAgICAgcmVmZXJlbmNlT3B0aW9uc1tvcHRpb25dID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMuX19hbnlfXyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBWYWxpZGF0b3IuZ2V0U3VnZ2VzdGlvbihvcHRpb24sIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZWZlcmVuY2VPcHRpb24gPSBvcHRpb247XG4gICAgbGV0IGlzX29iamVjdCA9IHRydWU7XG5cbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgb25seSB0cmlnZ2VycyBpZiB0aGUgX19hbnlfXyBpcyBpbiB0aGUgdG9wIGxldmVsIG9mIHRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgIC8vICAgICAgIFRIQVQnUyBBIFJFQUxMWSBCQUQgUExBQ0UgVE8gQUxMT1cgSVQhISEhXG4gICAgICAvLyBUT0RPOiBFeGFtaW5lIGlmIG5lZWRlZCwgcmVtb3ZlIGlmIHBvc3NpYmxlXG5cbiAgICAgIC8vIF9fYW55X18gaXMgYSB3aWxkY2FyZC4gQW55IHZhbHVlIGlzIGFjY2VwdGVkIGFuZCB3aWxsIGJlIGZ1cnRoZXIgYW5hbHlzZWQgYnkgcmVmZXJlbmNlLlxuICAgICAgcmVmZXJlbmNlT3B0aW9uID0gXCJfX2FueV9fXCI7XG5cbiAgICAgIC8vIGlmIHRoZSBhbnktc3ViZ3JvdXAgaXMgbm90IGEgcHJlZGVmaW5lZCBvYmplY3QgaW4gdGhlIGNvbmZpZ3VyYXRvcixcbiAgICAgIC8vIHdlIGRvIG5vdCBsb29rIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICBpc19vYmplY3QgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pID09PSBcIm9iamVjdFwiO1xuICAgIH1cblxuICAgIGxldCByZWZPcHRpb25PYmogPSByZWZlcmVuY2VPcHRpb25zW3JlZmVyZW5jZU9wdGlvbl07XG4gICAgaWYgKGlzX29iamVjdCAmJiByZWZPcHRpb25PYmouX190eXBlX18gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVmT3B0aW9uT2JqID0gcmVmT3B0aW9uT2JqLl9fdHlwZV9fO1xuICAgIH1cblxuICAgIFZhbGlkYXRvci5jaGVja0ZpZWxkcyhcbiAgICAgIG9wdGlvbixcbiAgICAgIG9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb25zLFxuICAgICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgICAgcmVmT3B0aW9uT2JqLFxuICAgICAgcGF0aFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvcHRpb24gICAgICAgICAgIHwgdGhlIG9wdGlvbiBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge29iamVjdH0gIG9wdGlvbnMgICAgICAgICAgfCBUaGUgc3VwcGxpZWQgb3B0aW9ucyBvYmplY3RcbiAgICogQHBhcmFtIHtvYmplY3R9ICByZWZlcmVuY2VPcHRpb25zIHwgVGhlIHJlZmVyZW5jZSBvcHRpb25zIGNvbnRhaW5pbmcgYWxsIG9wdGlvbnMgYW5kIHRoZWlyIGFsbG93ZWQgZm9ybWF0c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZmVyZW5jZU9wdGlvbiAgfCBVc3VhbGx5IHRoaXMgaXMgdGhlIHNhbWUgYXMgb3B0aW9uLCBleGNlcHQgd2hlbiBoYW5kbGluZyBhbiBfX2FueV9fIHRhZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICByZWZPcHRpb25PYmogICAgIHwgVGhpcyBpcyB0aGUgdHlwZSBvYmplY3QgZnJvbSB0aGUgcmVmZXJlbmNlIG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gICBwYXRoICAgICAgICAgICAgIHwgd2hlcmUgaW4gdGhlIG9iamVjdCBpcyB0aGUgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVja0ZpZWxkcyhcbiAgICBvcHRpb24sXG4gICAgb3B0aW9ucyxcbiAgICByZWZlcmVuY2VPcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbixcbiAgICByZWZPcHRpb25PYmosXG4gICAgcGF0aFxuICApIHtcbiAgICBjb25zdCBsb2cgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCIlY1wiICsgbWVzc2FnZSArIFZhbGlkYXRvci5wcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiksXG4gICAgICAgIFZBTElEQVRPUl9QUklOVF9TVFlMRSQxXG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25UeXBlID0gVmFsaWRhdG9yLmdldFR5cGUob3B0aW9uc1tvcHRpb25dKTtcbiAgICBjb25zdCByZWZPcHRpb25UeXBlID0gcmVmT3B0aW9uT2JqW29wdGlvblR5cGVdO1xuXG4gICAgaWYgKHJlZk9wdGlvblR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaWYgdGhlIHR5cGUgaXMgY29ycmVjdCwgd2UgY2hlY2sgaWYgaXQgaXMgc3VwcG9zZWQgdG8gYmUgb25lIG9mIGEgZmV3IHNlbGVjdCB2YWx1ZXNcbiAgICAgIGlmIChcbiAgICAgICAgVmFsaWRhdG9yLmdldFR5cGUocmVmT3B0aW9uVHlwZSkgPT09IFwiYXJyYXlcIiAmJlxuICAgICAgICByZWZPcHRpb25UeXBlLmluZGV4T2Yob3B0aW9uc1tvcHRpb25dKSA9PT0gLTFcbiAgICAgICkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgJ0ludmFsaWQgb3B0aW9uIGRldGVjdGVkIGluIFwiJyArXG4gICAgICAgICAgICBvcHRpb24gK1xuICAgICAgICAgICAgJ1wiLicgK1xuICAgICAgICAgICAgXCIgQWxsb3dlZCB2YWx1ZXMgYXJlOlwiICtcbiAgICAgICAgICAgIFZhbGlkYXRvci5wcmludChyZWZPcHRpb25UeXBlKSArXG4gICAgICAgICAgICAnIG5vdCBcIicgK1xuICAgICAgICAgICAgb3B0aW9uc1tvcHRpb25dICtcbiAgICAgICAgICAgICdcIi4gJ1xuICAgICAgICApO1xuICAgICAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9uVHlwZSA9PT0gXCJvYmplY3RcIiAmJiByZWZlcmVuY2VPcHRpb24gIT09IFwiX19hbnlfX1wiKSB7XG4gICAgICAgIHBhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgb3B0aW9uKTtcbiAgICAgICAgVmFsaWRhdG9yLnBhcnNlKFxuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSxcbiAgICAgICAgICByZWZlcmVuY2VPcHRpb25zW3JlZmVyZW5jZU9wdGlvbl0sXG4gICAgICAgICAgcGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVmT3B0aW9uT2JqW1wiYW55XCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHR5cGUgb2YgdGhlIGZpZWxkIGlzIGluY29ycmVjdCBhbmQgdGhlIGZpZWxkIGNhbm5vdCBiZSBhbnlcbiAgICAgIGxvZyhcbiAgICAgICAgJ0ludmFsaWQgdHlwZSByZWNlaXZlZCBmb3IgXCInICtcbiAgICAgICAgICBvcHRpb24gK1xuICAgICAgICAgICdcIi4gRXhwZWN0ZWQ6ICcgK1xuICAgICAgICAgIFZhbGlkYXRvci5wcmludChPYmplY3Qua2V5cyhyZWZPcHRpb25PYmopKSArXG4gICAgICAgICAgXCIuIFJlY2VpdmVkIFtcIiArXG4gICAgICAgICAgb3B0aW9uVHlwZSArXG4gICAgICAgICAgJ10gXCInICtcbiAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICdcIidcbiAgICAgICk7XG4gICAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3QgfCBib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgQXJyYXkuPG51bWJlcj4gfCBEYXRlIHwgTm9kZSB8IE1vbWVudCB8IHVuZGVmaW5lZCB8IG51bGx9IG9iamVjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgZ2V0VHlwZShvYmplY3QpIHtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcblxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZiAob2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIFwiZGF0ZVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdC5ub2RlVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBcImRvbVwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdC5faXNBTW9tZW50T2JqZWN0ID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBcIm1vbWVudFwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwib2JqZWN0XCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcGF0aFxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgZ2V0U3VnZ2VzdGlvbihvcHRpb24sIG9wdGlvbnMsIHBhdGgpIHtcbiAgICBjb25zdCBsb2NhbFNlYXJjaCA9IFZhbGlkYXRvci5maW5kSW5PcHRpb25zKG9wdGlvbiwgb3B0aW9ucywgcGF0aCwgZmFsc2UpO1xuICAgIGNvbnN0IGdsb2JhbFNlYXJjaCA9IFZhbGlkYXRvci5maW5kSW5PcHRpb25zKG9wdGlvbiwgYWxsT3B0aW9ucywgW10sIHRydWUpO1xuXG4gICAgY29uc3QgbG9jYWxTZWFyY2hUaHJlc2hvbGQgPSA4O1xuICAgIGNvbnN0IGdsb2JhbFNlYXJjaFRocmVzaG9sZCA9IDQ7XG5cbiAgICBsZXQgbXNnO1xuICAgIGlmIChsb2NhbFNlYXJjaC5pbmRleE1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1zZyA9XG4gICAgICAgIFwiIGluIFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uLCBcIlwiKSArXG4gICAgICAgICdQZXJoYXBzIGl0IHdhcyBpbmNvbXBsZXRlPyBEaWQgeW91IG1lYW46IFwiJyArXG4gICAgICAgIGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggK1xuICAgICAgICAnXCI/XFxuXFxuJztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZ2xvYmFsU2VhcmNoLmRpc3RhbmNlIDw9IGdsb2JhbFNlYXJjaFRocmVzaG9sZCAmJlxuICAgICAgbG9jYWxTZWFyY2guZGlzdGFuY2UgPiBnbG9iYWxTZWFyY2guZGlzdGFuY2VcbiAgICApIHtcbiAgICAgIG1zZyA9XG4gICAgICAgIFwiIGluIFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uLCBcIlwiKSArXG4gICAgICAgIFwiUGVyaGFwcyBpdCB3YXMgbWlzcGxhY2VkPyBNYXRjaGluZyBvcHRpb24gZm91bmQgYXQ6IFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24oXG4gICAgICAgICAgZ2xvYmFsU2VhcmNoLnBhdGgsXG4gICAgICAgICAgZ2xvYmFsU2VhcmNoLmNsb3Nlc3RNYXRjaCxcbiAgICAgICAgICBcIlwiXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChsb2NhbFNlYXJjaC5kaXN0YW5jZSA8PSBsb2NhbFNlYXJjaFRocmVzaG9sZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgJy4gRGlkIHlvdSBtZWFuIFwiJyArXG4gICAgICAgIGxvY2FsU2VhcmNoLmNsb3Nlc3RNYXRjaCArXG4gICAgICAgICdcIj8nICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24obG9jYWxTZWFyY2gucGF0aCwgb3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIuIERpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U6IFwiICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKG9wdGlvbnMpKSArXG4gICAgICAgIFZhbGlkYXRvci5wcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbik7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICclY1Vua25vd24gb3B0aW9uIGRldGVjdGVkOiBcIicgKyBvcHRpb24gKyAnXCInICsgbXNnLFxuICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICApO1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHRyYXZlcnNlIHRoZSBvcHRpb25zIGluIHNlYXJjaCBmb3IgYSBtYXRjaC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVjdXJzaXZlPWZhbHNlXVxuICAgKiBAcmV0dXJucyB7e2Nsb3Nlc3RNYXRjaDogc3RyaW5nLCBwYXRoOiBBcnJheSwgZGlzdGFuY2U6IG51bWJlcn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBmaW5kSW5PcHRpb25zKG9wdGlvbiwgb3B0aW9ucywgcGF0aCwgcmVjdXJzaXZlID0gZmFsc2UpIHtcbiAgICBsZXQgbWluID0gMWU5O1xuICAgIGxldCBjbG9zZXN0TWF0Y2ggPSBcIlwiO1xuICAgIGxldCBjbG9zZXN0TWF0Y2hQYXRoID0gW107XG4gICAgY29uc3QgbG93ZXJDYXNlT3B0aW9uID0gb3B0aW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgbGV0IGluZGV4TWF0Y2ggPSB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBvcCBpbiBvcHRpb25zKSB7XG4gICAgICBsZXQgZGlzdGFuY2U7XG4gICAgICBpZiAob3B0aW9uc1tvcF0uX190eXBlX18gIT09IHVuZGVmaW5lZCAmJiByZWN1cnNpdmUgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMoXG4gICAgICAgICAgb3B0aW9uLFxuICAgICAgICAgIG9wdGlvbnNbb3BdLFxuICAgICAgICAgIGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pbiA+IHJlc3VsdC5kaXN0YW5jZSkge1xuICAgICAgICAgIGNsb3Nlc3RNYXRjaCA9IHJlc3VsdC5jbG9zZXN0TWF0Y2g7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoUGF0aCA9IHJlc3VsdC5wYXRoO1xuICAgICAgICAgIG1pbiA9IHJlc3VsdC5kaXN0YW5jZTtcbiAgICAgICAgICBpbmRleE1hdGNoID0gcmVzdWx0LmluZGV4TWF0Y2g7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcC50b0xvd2VyQ2FzZSgpLmluZGV4T2YobG93ZXJDYXNlT3B0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICBpbmRleE1hdGNoID0gb3A7XG4gICAgICAgIH1cbiAgICAgICAgZGlzdGFuY2UgPSBWYWxpZGF0b3IubGV2ZW5zaHRlaW5EaXN0YW5jZShvcHRpb24sIG9wKTtcbiAgICAgICAgaWYgKG1pbiA+IGRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gb3A7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoUGF0aCA9IGNvcHlBcnJheShwYXRoKTtcbiAgICAgICAgICBtaW4gPSBkaXN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY2xvc2VzdE1hdGNoOiBjbG9zZXN0TWF0Y2gsXG4gICAgICBwYXRoOiBjbG9zZXN0TWF0Y2hQYXRoLFxuICAgICAgZGlzdGFuY2U6IG1pbixcbiAgICAgIGluZGV4TWF0Y2g6IGluZGV4TWF0Y2gsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcHJpbnRMb2NhdGlvbihwYXRoLCBvcHRpb24sIHByZWZpeCA9IFwiUHJvYmxlbSB2YWx1ZSBmb3VuZCBhdDogXFxuXCIpIHtcbiAgICBsZXQgc3RyID0gXCJcXG5cXG5cIiArIHByZWZpeCArIFwib3B0aW9ucyA9IHtcXG5cIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaSArIDE7IGorKykge1xuICAgICAgICBzdHIgKz0gXCIgIFwiO1xuICAgICAgfVxuICAgICAgc3RyICs9IHBhdGhbaV0gKyBcIjoge1xcblwiO1xuICAgIH1cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhdGgubGVuZ3RoICsgMTsgaisrKSB7XG4gICAgICBzdHIgKz0gXCIgIFwiO1xuICAgIH1cbiAgICBzdHIgKz0gb3B0aW9uICsgXCJcXG5cIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoICsgMTsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhdGgubGVuZ3RoIC0gaTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gXCJ9XFxuXCI7XG4gICAgfVxuICAgIHJldHVybiBzdHIgKyBcIlxcblxcblwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludChvcHRpb25zKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXG4gICAgICAucmVwbGFjZSgvKFwiKXwoXFxbKXwoXFxdKXwoLFwiX190eXBlX19cIikvZywgXCJcIilcbiAgICAgIC5yZXBsYWNlKC8oLCkvZywgXCIsIFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQ29tcHV0ZSB0aGUgZWRpdCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gc3RyaW5nc1xuICAgKiBodHRwOi8vZW4ud2lraWJvb2tzLm9yZy93aWtpL0FsZ29yaXRobV9JbXBsZW1lbnRhdGlvbi9TdHJpbmdzL0xldmVuc2h0ZWluX2Rpc3RhbmNlI0phdmFTY3JpcHRcbiAgICpcbiAgICogQ29weXJpZ2h0IChjKSAyMDExIEFuZHJlaSBNYWNrZW56aWVcbiAgICpcbiAgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAgICpcbiAgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gICAqXG4gICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn19XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBsZXZlbnNodGVpbkRpc3RhbmNlKGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggPT09IDApIHJldHVybiBiLmxlbmd0aDtcbiAgICBpZiAoYi5sZW5ndGggPT09IDApIHJldHVybiBhLmxlbmd0aDtcblxuICAgIGNvbnN0IG1hdHJpeCA9IFtdO1xuXG4gICAgLy8gaW5jcmVtZW50IGFsb25nIHRoZSBmaXJzdCBjb2x1bW4gb2YgZWFjaCByb3dcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hdHJpeFtpXSA9IFtpXTtcbiAgICB9XG5cbiAgICAvLyBpbmNyZW1lbnQgZWFjaCBjb2x1bW4gaW4gdGhlIGZpcnN0IHJvd1xuICAgIGxldCBqO1xuICAgIGZvciAoaiA9IDA7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgbWF0cml4WzBdW2pdID0gajtcbiAgICB9XG5cbiAgICAvLyBGaWxsIGluIHRoZSByZXN0IG9mIHRoZSBtYXRyaXhcbiAgICBmb3IgKGkgPSAxOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAoaiA9IDE7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoYi5jaGFyQXQoaSAtIDEpID09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtpIC0gMV1baiAtIDFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqIC0gMV0gKyAxLCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgICBtYXRyaXhbaV1baiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgIG1hdHJpeFtpIC0gMV1bal0gKyAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTsgLy8gZGVsZXRpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRyaXhbYi5sZW5ndGhdW2EubGVuZ3RoXTtcbiAgfVxufTtcblxuY29uc3QgQWN0aXZhdG9yID0gQWN0aXZhdG9yJDE7XHJcbmNvbnN0IENvbG9yUGlja2VyID0gQ29sb3JQaWNrZXIkMTtcclxuY29uc3QgQ29uZmlndXJhdG9yID0gQ29uZmlndXJhdG9yJDE7XHJcbmNvbnN0IEhhbW1lciA9IEhhbW1lciQxO1xyXG5jb25zdCBQb3B1cCA9IFBvcHVwJDE7XHJcbmNvbnN0IFZBTElEQVRPUl9QUklOVF9TVFlMRSA9IFZBTElEQVRPUl9QUklOVF9TVFlMRSQxO1xyXG5jb25zdCBWYWxpZGF0b3IgPSBWYWxpZGF0b3IkMTtcblxuZXhwb3J0IHsgQWN0aXZhdG9yLCBBbGVhLCBDb2xvclBpY2tlciwgQ29uZmlndXJhdG9yLCBERUxFVEUsIEhTVlRvSGV4LCBIU1ZUb1JHQiwgSGFtbWVyLCBQb3B1cCwgUkdCVG9IU1YsIFJHQlRvSGV4LCBWQUxJREFUT1JfUFJJTlRfU1RZTEUsIFZhbGlkYXRvciwgYWRkQ2xhc3NOYW1lLCBhZGRDc3NUZXh0LCBiaW5hcnlTZWFyY2hDdXN0b20sIGJpbmFyeVNlYXJjaFZhbHVlLCBicmlkZ2VPYmplY3QsIGNvcHlBbmRFeHRlbmRBcnJheSwgY29weUFycmF5LCBkZWVwRXh0ZW5kLCBkZWVwT2JqZWN0QXNzaWduLCBlYXNpbmdGdW5jdGlvbnMsIGVxdWFsQXJyYXksIGV4dGVuZCwgZmlsbElmRGVmaW5lZCwgZm9yRWFjaCwgZ2V0QWJzb2x1dGVMZWZ0LCBnZXRBYnNvbHV0ZVJpZ2h0LCBnZXRBYnNvbHV0ZVRvcCwgZ2V0U2Nyb2xsQmFyV2lkdGgsIGdldFRhcmdldCwgZ2V0VHlwZSwgaGFzUGFyZW50LCBoZXhUb0hTViwgaGV4VG9SR0IsIGluc2VydFNvcnQsIGlzRGF0ZSwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1N0cmluZywgaXNWYWxpZEhleCwgaXNWYWxpZFJHQiwgaXNWYWxpZFJHQkEsIG1lcmdlT3B0aW9ucywgb3B0aW9uLCBvdmVycmlkZU9wYWNpdHksIHBhcnNlQ29sb3IsIHByZXZlbnREZWZhdWx0LCBwdXJlRGVlcE9iamVjdEFzc2lnbiwgcmVjdXJzaXZlRE9NRGVsZXRlLCByZW1vdmVDbGFzc05hbWUsIHJlbW92ZUNzc1RleHQsIHNlbGVjdGl2ZUJyaWRnZU9iamVjdCwgc2VsZWN0aXZlRGVlcEV4dGVuZCwgc2VsZWN0aXZlRXh0ZW5kLCBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kLCB0aHJvdHRsZSwgdG9BcnJheSwgdG9wTW9zdCwgdXBkYXRlUHJvcGVydHkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZpcy11dGlsLmpzLm1hcFxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIG5hdGl2ZUNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYFJlZmxlY3QuY29uc3RydWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5jb25zdHJ1Y3Rcbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKG5hdGl2ZUNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG5cbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIG5hdGl2ZUNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbnZhciBGT1JDRUQgPSBORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRztcblxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogRk9SQ0VEIH0sIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUNvbnN0cnVjdG9yKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUNvbnN0cnVjdG9yKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIG5hdGl2ZUNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgYXBwbHkocHVzaCwgJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYXBwbHkoYmluZCwgVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0UHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gYXBwbHkoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LmNvbnN0cnVjdCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUmVmbGVjdC5jb25zdHJ1Y3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEZPUkNFRCA9ICFERVNDUklQVE9SUyB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0luZGV4ZWRPYmplY3QoaXQpLCBrZXkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbn07XG5cbmlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0pIGdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBrZXksIGRlc2NyaXB0b3I7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywga2V5ID0ga2V5c1tpbmRleCsrXSk7XG4gICAgICBpZiAoZGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKS5mO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzICE9PSBkZWZpbmVQcm9wZXJ0aWVzLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0aWVzOiBkZWZpbmVQcm9wZXJ0aWVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKFQsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQsIEQpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLnNoYW0pIGRlZmluZVByb3BlcnRpZXMuc2hhbSA9IHRydWU7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3QvY3JlYXRlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBzZXRQcm90b3R5cGVPZjogc2V0UHJvdG90eXBlT2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiaW1wb3J0IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIHZhciBfY29udGV4dDtcbiAgX3NldFByb3RvdHlwZU9mID0gX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YpLmNhbGwoX2NvbnRleHQpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwgImltcG9ydCBfT2JqZWN0JGNyZWF0ZSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanNcIjtcbmltcG9ydCBfT2JqZWN0JGRlZmluZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBfT2JqZWN0JGNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuIiwgImltcG9ydCBfT2JqZWN0JHNldFByb3RvdHlwZU9mIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanNcIjtcbmltcG9ydCBfYmluZEluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9iaW5kLmpzXCI7XG5pbXBvcnQgX09iamVjdCRnZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICB2YXIgX2NvbnRleHQ7XG4gIF9nZXRQcm90b3R5cGVPZiA9IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPyBfYmluZEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBfT2JqZWN0JGdldFByb3RvdHlwZU9mKS5jYWxsKF9jb250ZXh0KSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IF9PYmplY3QkZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59IiwgInZhciBfU3ltYm9sID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIik7XG52YXIgX1N5bWJvbCRpdGVyYXRvciA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzXCIpO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gKG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBfU3ltYm9sJGl0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBfU3ltYm9sICYmIG8gIT09IF9TeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpLCBfdHlwZW9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9mb3ItZWFjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0sgJiYgdHlwZW9mIHN0YWNrID09ICdzdHJpbmcnICYmICEkRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY2xlYXJFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyJyk7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUnKTtcblxuLy8gbm9uLXN0YW5kYXJkIFY4XG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXJyb3IsIEMsIHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICBpZiAoY2FwdHVyZVN0YWNrVHJhY2UpIGNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBDKTtcbiAgICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY2xlYXJFcnJvclN0YWNrKHN0YWNrLCBkcm9wRW50cmllcykpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgUmVzdWx0UHJvdG90eXBlID0gUmVzdWx0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX1JFQ09SRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19SRUNPUkQpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX1JFQ09SRCkge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGUuaXRlcmF0b3I7XG4gIH0gZWxzZSBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXRlcmFibGUpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZXJhYmxlKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbEZuKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSwgaXRlckZuKTtcbiAgfVxuXG4gIG5leHQgPSBJU19SRUNPUkQgPyBpdGVyYWJsZS5uZXh0IDogaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxGbihzdGVwLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCAkZGVmYXVsdCkge1xuICByZXR1cm4gYXJndW1lbnQgPT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gJycgOiAkZGVmYXVsdCA6IHRvU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgaW5zdGFsbEVycm9yQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZScpO1xudmFyIGluc3RhbGxFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBub3JtYWxpemVTdHJpbmdBcmd1bWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG52YXIgJEFnZ3JlZ2F0ZUVycm9yID0gZnVuY3Rpb24gQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBtZXNzYWdlIC8qICwgb3B0aW9ucyAqLykge1xuICB2YXIgaXNJbnN0YW5jZSA9IGlzUHJvdG90eXBlT2YoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIHRoaXMpO1xuICB2YXIgdGhhdDtcbiAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgdGhhdCA9IHNldFByb3RvdHlwZU9mKG5ldyAkRXJyb3IoKSwgaXNJbnN0YW5jZSA/IGdldFByb3RvdHlwZU9mKHRoaXMpIDogQWdncmVnYXRlRXJyb3JQcm90b3R5cGUpO1xuICB9IGVsc2Uge1xuICAgIHRoYXQgPSBpc0luc3RhbmNlID8gdGhpcyA6IGNyZWF0ZShBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsIFRPX1NUUklOR19UQUcsICdFcnJvcicpO1xuICB9XG4gIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnbWVzc2FnZScsIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KG1lc3NhZ2UpKTtcbiAgaW5zdGFsbEVycm9yU3RhY2sodGhhdCwgJEFnZ3JlZ2F0ZUVycm9yLCB0aGF0LnN0YWNrLCAxKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSBpbnN0YWxsRXJyb3JDYXVzZSh0aGF0LCBhcmd1bWVudHNbMl0pO1xuICB2YXIgZXJyb3JzQXJyYXkgPSBbXTtcbiAgaXRlcmF0ZShlcnJvcnMsIHB1c2gsIHsgdGhhdDogZXJyb3JzQXJyYXkgfSk7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnZXJyb3JzJywgZXJyb3JzQXJyYXkpO1xuICByZXR1cm4gdGhhdDtcbn07XG5cbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IpO1xuZWxzZSBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKCRBZ2dyZWdhdGVFcnJvciwgJEVycm9yLCB7IG5hbWU6IHRydWUgfSk7XG5cbnZhciBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSA9ICRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoJEVycm9yLnByb3RvdHlwZSwge1xuICBjb25zdHJ1Y3RvcjogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICRBZ2dyZWdhdGVFcnJvciksXG4gIG1lc3NhZ2U6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnJyksXG4gIG5hbWU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnQWdncmVnYXRlRXJyb3InKVxufSk7XG5cbi8vIGBBZ2dyZWdhdGVFcnJvcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWdncmVnYXRlLWVycm9yLWNvbnN0cnVjdG9yXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDIgfSwge1xuICBBZ2dyZWdhdGVFcnJvcjogJEFnZ3JlZ2F0ZUVycm9yXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbnZhciBzZXQgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBGdW5jdGlvbiA9IGdsb2JhbC5GdW5jdGlvbjtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgJGxvY2F0aW9uLCBkZWZlciwgY2hhbm5lbCwgcG9ydDtcblxuZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBEZW5vIHRocm93cyBhIFJlZmVyZW5jZUVycm9yIG9uIGBsb2NhdGlvbmAgYWNjZXNzIHdpdGhvdXQgYC0tbG9jYXRpb25gIGZsYWdcbiAgJGxvY2F0aW9uID0gZ2xvYmFsLmxvY2F0aW9uO1xufSk7XG5cbnZhciBydW4gPSBmdW5jdGlvbiAoaWQpIHtcbiAgaWYgKGhhc093bihxdWV1ZSwgaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcblxudmFyIHJ1bm5lciA9IGZ1bmN0aW9uIChpZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJ1bihpZCk7XG4gIH07XG59O1xuXG52YXIgZXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4oZXZlbnQuZGF0YSk7XG59O1xuXG52YXIgZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBvbGQgZW5naW5lcyBoYXZlIG5vdCBsb2NhdGlvbi5vcmlnaW5cbiAgZ2xvYmFsLnBvc3RNZXNzYWdlKFN0cmluZyhpZCksICRsb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyAkbG9jYXRpb24uaG9zdCk7XG59O1xuXG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldCB8fCAhY2xlYXIpIHtcbiAgc2V0ID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGhhbmRsZXIpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZm4gPSBpc0NhbGxhYmxlKGhhbmRsZXIpID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpO1xuICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhciA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChJU19OT0RFKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIC8vIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjI0XG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwgJiYgIUlTX0lPUykge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGV2ZW50TGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJlxuICAgIGlzQ2FsbGFibGUoZ2xvYmFsLnBvc3RNZXNzYWdlKSAmJlxuICAgICFnbG9iYWwuaW1wb3J0U2NyaXB0cyAmJlxuICAgICRsb2NhdGlvbiAmJiAkbG9jYXRpb24ucHJvdG9jb2wgIT09ICdmaWxlOicgJiZcbiAgICAhZmFpbHMoZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlcilcbiAgKSB7XG4gICAgZGVmZXIgPSBnbG9iYWxQb3N0TWVzc2FnZURlZmVyO1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZXZlbnRMaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bihpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQocnVubmVyKGlkKSwgMCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGNsZWFyOiBjbGVhclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUHJvdG90eXBlKSB7XG4gIGlmIChpc1Byb3RvdHlwZU9mKFByb3RvdHlwZSwgaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgaXNOdWxsT3JVbmRlZmluZWQoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFDb25zdHJ1Y3RvcihTKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IC8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhlYWQgPSBudWxsO1xuICB0aGlzLnRhaWwgPSBudWxsO1xufTtcblxuUXVldWUucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdmFyIGVudHJ5ID0geyBpdGVtOiBpdGVtLCBuZXh0OiBudWxsIH07XG4gICAgdmFyIHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgaWYgKHRhaWwpIHRhaWwubmV4dCA9IGVudHJ5O1xuICAgIGVsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgdGhpcy50YWlsID0gZW50cnk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbnRyeSA9IHRoaXMuaGVhZDtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHZhciBuZXh0ID0gdGhpcy5oZWFkID0gZW50cnkubmV4dDtcbiAgICAgIGlmIChuZXh0ID09PSBudWxsKSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgcmV0dXJuIGVudHJ5Lml0ZW07XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1ZXVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcXVldWUnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX0lPU19QRUJCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUnKTtcbnZhciBJU19XRUJPU19XRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLXdlYm9zLXdlYmtpdCcpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuLy8gTm9kZS5qcyAxMSBzaG93cyBFeHBlcmltZW50YWxXYXJuaW5nIG9uIGdldHRpbmcgYHF1ZXVlTWljcm90YXNrYFxudmFyIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdxdWV1ZU1pY3JvdGFzaycpO1xudmFyIG1pY3JvdGFzayA9IHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciAmJiBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWU7XG52YXIgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIW1pY3JvdGFzaykge1xuICB2YXIgcXVldWUgPSBuZXcgUXVldWUoKTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKElTX05PREUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoZm4gPSBxdWV1ZS5nZXQoKSkgdHJ5IHtcbiAgICAgIGZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIC8vIGFsc28gZXhjZXB0IFdlYk9TIFdlYmtpdCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODk4XG4gIGlmICghSVNfSU9TICYmICFJU19OT0RFICYmICFJU19XRUJPU19XRUJLSVQgJiYgTXV0YXRpb25PYnNlcnZlciAmJiBkb2N1bWVudCkge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKCFJU19JT1NfUEVCQkxFICYmIFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgLy8gd29ya2Fyb3VuZCBvZiBXZWJLaXQgfiBpT1MgU2FmYXJpIDEwLjEgYnVnXG4gICAgcHJvbWlzZS5jb25zdHJ1Y3RvciA9IFByb21pc2U7XG4gICAgdGhlbiA9IGJpbmQocHJvbWlzZS50aGVuLCBwcm9taXNlKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBOb2RlLmpzIHdpdGhvdXQgcHJvbWlzZXNcbiAgfSBlbHNlIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnZVxuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICAvLyBgd2VicGFja2AgZGV2IHNlcnZlciBidWcgb24gSUUgZ2xvYmFsIG1ldGhvZHMgLSB1c2UgYmluZChmbiwgZ2xvYmFsKVxuICAgIG1hY3JvdGFzayA9IGJpbmQobWFjcm90YXNrLCBnbG9iYWwpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hY3JvdGFzayhmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIG1pY3JvdGFzayA9IGZ1bmN0aW9uIChmbikge1xuICAgIGlmICghcXVldWUuaGVhZCkgbm90aWZ5KCk7XG4gICAgcXVldWUuYWRkKGZuKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtaWNyb3Rhc2s7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdCh1c2VyQWdlbnQpICYmIHR5cGVvZiBQZWJibGUgIT0gJ3VuZGVmaW5lZCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC93ZWIwcyg/IS4qY2hyb21lKS9pLnRlc3QodXNlckFnZW50KTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLlByb21pc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIERlbm8gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBEZW5vID09ICdvYmplY3QnICYmIERlbm8gJiYgdHlwZW9mIERlbm8udmVyc2lvbiA9PSAnb2JqZWN0JztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfREVOTyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtZGVubycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhSVNfREVOTyAmJiAhSVNfTk9ERVxuICAmJiB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnXG4gICYmIHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfQlJPV1NFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3NlcicpO1xudmFyIElTX0RFTk8gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8nKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFNVQkNMQVNTSU5HID0gZmFsc2U7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gaXNDYWxsYWJsZShnbG9iYWwuUHJvbWlzZVJlamVjdGlvbkV2ZW50KTtcblxudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gaXNGb3JjZWQoJ1Byb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSA9IGluc3BlY3RTb3VyY2UoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSAhPT0gU3RyaW5nKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gIC8vIFdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSN7IGNhdGNoLCBmaW5hbGx5IH0gaW4gdGhlIHB1cmUgdmVyc2lvbiBmb3IgcHJldmVudGluZyBwcm90b3R5cGUgcG9sbHV0aW9uXG4gIGlmIChJU19QVVJFICYmICEoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10pKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKCFWOF9WRVJTSU9OIHx8IFY4X1ZFUlNJT04gPCA1MSB8fCAhL25hdGl2ZSBjb2RlLy50ZXN0KFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFKSkge1xuICAgIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSBuZXcgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUoMSk7IH0pO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgICB9O1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICAgIFNVQkNMQVNTSU5HID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgICBpZiAoIVNVQkNMQVNTSU5HKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICB9IHJldHVybiAhR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiAoSVNfQlJPV1NFUiB8fCBJU19ERU5PKSAmJiAhTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDT05TVFJVQ1RPUjogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsXG4gIFJFSkVDVElPTl9FVkVOVDogTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5ULFxuICBTVUJDTEFTU0lORzogU1VCQ0xBU1NJTkdcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhQ2FsbGFibGUocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUNhbGxhYmxlKHJlamVjdCk7XG59O1xuXG4vLyBgTmV3UHJvbWlzZUNhcGFiaWxpdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uZXdwcm9taXNlY2FwYWJpbGl0eVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLkNPTlNUUlVDVE9SO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5SRUpFQ1RJT05fRVZFTlQ7XG52YXIgTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uU1VCQ0xBU1NJTkc7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvciA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcjtcbnZhciBQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG52YXIgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHk7XG5cbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcblxudmFyIEludGVybmFsLCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgUHJvbWlzZVdyYXBwZXIsIG5hdGl2ZVRoZW47XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIGlzQ2FsbGFibGUodGhlbiA9IGl0LnRoZW4pID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIGNhbGxSZWFjdGlvbiA9IGZ1bmN0aW9uIChyZWFjdGlvbiwgc3RhdGUpIHtcbiAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gIHZhciBvayA9IHN0YXRlLnN0YXRlID09PSBGVUxGSUxMRUQ7XG4gIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICB0cnkge1xuICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGlmIChzdGF0ZS5yZWplY3Rpb24gPT09IFVOSEFORExFRCkgb25IYW5kbGVVbmhhbmRsZWQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gY2FuIHRocm93XG4gICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgY2FsbCh0aGVuLCByZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICByZWplY3QoZXJyb3IpO1xuICB9XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWFjdGlvbnMgPSBzdGF0ZS5yZWFjdGlvbnM7XG4gICAgdmFyIHJlYWN0aW9uO1xuICAgIHdoaWxlIChyZWFjdGlvbiA9IHJlYWN0aW9ucy5nZXQoKSkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCAmJiAoaGFuZGxlciA9IGdsb2JhbFsnb24nICsgbmFtZV0pKSBoYW5kbGVyKGV2ZW50KTtcbiAgZWxzZSBpZiAobmFtZSA9PT0gVU5IQU5ETEVEX1JFSkVDVElPTikgaG9zdFJlcG9ydEVycm9ycygnVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgcmVhc29uKTtcbn07XG5cbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAoc3RhdGUuZmFjYWRlID09PSB2YWx1ZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGwodGhlbiwgdmFsdWUsXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVzb2x2ZSwgd3JhcHBlciwgc3RhdGUpLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlamVjdCwgd3JhcHBlciwgc3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpbnRlcm5hbFJlamVjdCh3cmFwcGVyLCBlcnJvciwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHN0YXRlLnN0YXRlID0gRlVMRklMTEVEO1xuICAgICAgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGludGVybmFsUmVqZWN0KHsgZG9uZTogZmFsc2UgfSwgZXJyb3IsIHN0YXRlKTtcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmIChGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUikge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICBhQ2FsbGFibGUoZXhlY3V0b3IpO1xuICAgIGNhbGwoSW50ZXJuYWwsIHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdChzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBQcm9taXNlUHJvdG90eXBlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIHR5cGU6IFBST01JU0UsXG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZmFsc2UsXG4gICAgICByZWFjdGlvbnM6IG5ldyBRdWV1ZSgpLFxuICAgICAgcmVqZWN0aW9uOiBmYWxzZSxcbiAgICAgIHN0YXRlOiBQRU5ESU5HLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gIEludGVybmFsLnByb3RvdHlwZSA9IGRlZmluZUJ1aWx0SW4oUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgcmVhY3Rpb24ub2sgPSBpc0NhbGxhYmxlKG9uRnVsZmlsbGVkKSA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICByZWFjdGlvbi5mYWlsID0gaXNDYWxsYWJsZShvblJlamVjdGVkKSAmJiBvblJlamVjdGVkO1xuICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc3RhdGUuc3RhdGUgPT09IFBFTkRJTkcpIHN0YXRlLnJlYWN0aW9ucy5hZGQocmVhY3Rpb24pO1xuICAgIGVsc2UgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICB9KTtcblxuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHByb21pc2UpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKTtcbiAgICB0aGlzLnJlamVjdCA9IGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKTtcbiAgfTtcblxuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSBQcm9taXNlQ29uc3RydWN0b3IgfHwgQyA9PT0gUHJvbWlzZVdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcblxuICBpZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBuYXRpdmVUaGVuID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZS50aGVuO1xuXG4gICAgaWYgKCFOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORykge1xuICAgICAgLy8gbWFrZSBgUHJvbWlzZSN0aGVuYCByZXR1cm4gYSBwb2x5ZmlsbGVkIGBQcm9taXNlYCBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgY2FsbChuYXRpdmVUaGVuLCB0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NDBcbiAgICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8vIG1ha2UgYC5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIHRyeSB7XG4gICAgICBkZWxldGUgTmF0aXZlUHJvbWlzZVByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICAvLyBtYWtlIGBpbnN0YW5jZW9mIFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIHNldFByb3RvdHlwZU9mKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIFByb21pc2U6IFByb21pc2VDb25zdHJ1Y3RvclxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSwgZmFsc2UsIHRydWUpO1xuc2V0U3BlY2llcyhQUk9NSVNFKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gc2FmZVxuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSkudGhlbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwoJHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmNhdGNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsIHJlYWw6IHRydWUgfSwge1xuICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgfVxufSk7XG5cbi8vIG1ha2VzIHN1cmUgdGhhdCBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzIGBQcm9taXNlI2NhdGNoYCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2NhdGNoJ107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICE9PSBtZXRob2QpIHtcbiAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICdjYXRjaCcsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5yYWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlamVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKHRoaXMpO1xuICAgIGNhbGwoY2FwYWJpbGl0eS5yZWplY3QsIHVuZGVmaW5lZCwgcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG5cbnZhciBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID0gZ2V0QnVpbHRJbignUHJvbWlzZScpO1xudmFyIENIRUNLX1dSQVBQRVIgPSBJU19QVVJFICYmICFGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVzb2x2ZVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQ0hFQ0tfV1JBUFBFUiAmJiB0aGlzID09PSBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID8gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxTZXR0bGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxzZXR0bGVkXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGxTZXR0bGVkOiBmdW5jdGlvbiBhbGxTZXR0bGVkKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdmdWxmaWxsZWQnLCB2YWx1ZTogdmFsdWUgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAncmVqZWN0ZWQnLCByZWFzb246IGVycm9yIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxudmFyIFBST01JU0VfQU5ZX0VSUk9SID0gJ05vIG9uZSBwcm9taXNlIHJlc29sdmVkJztcblxuLy8gYFByb21pc2UuYW55YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFueTogZnVuY3Rpb24gYW55KGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBBZ2dyZWdhdGVFcnJvciA9IGdldEJ1aWx0SW4oJ0FnZ3JlZ2F0ZUVycm9yJyk7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciBlcnJvcnMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgdmFyIGFscmVhZHlSZXNvbHZlZCA9IGZhbHNlO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeVJlamVjdGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5UmVqZWN0ZWQgfHwgYWxyZWFkeVJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeVJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGVycm9yc1tpbmRleF0gPSBlcnJvcjtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZWplY3QobmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgUFJPTUlTRV9BTllfRVJST1IpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBTYWZhcmkgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4MjlcbnZhciBOT05fR0VORVJJQyA9ICEhTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdGhlbmFibGUgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddLmNhbGwoeyB0aGVuOiBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmZpbmFsbHlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogTk9OX0dFTkVSSUMgfSwge1xuICAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBnZXRCdWlsdEluKCdQcm9taXNlJykpO1xuICAgIHZhciBpc0Z1bmN0aW9uID0gaXNDYWxsYWJsZShvbkZpbmFsbHkpO1xuICAgIHJldHVybiB0aGlzLnRoZW4oXG4gICAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseSxcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICAgIH0gOiBvbkZpbmFsbHlcbiAgICApO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjZmluYWxseWAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG5pZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpKSB7XG4gIHZhciBtZXRob2QgPSBnZXRCdWlsdEluKCdQcm9taXNlJykucHJvdG90eXBlWydmaW5hbGx5J107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2ZpbmFsbHknLCBtZXRob2QsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbnknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUHJvbWlzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxuLy8gYFByb21pc2Uud2l0aFJlc29sdmVyc2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXdpdGgtcmVzb2x2ZXJzXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUgfSwge1xuICB3aXRoUmVzb2x2ZXJzOiBmdW5jdGlvbiB3aXRoUmVzb2x2ZXJzKCkge1xuICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb21pc2U6IHByb21pc2VDYXBhYmlsaXR5LnByb21pc2UsXG4gICAgICByZXNvbHZlOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlLFxuICAgICAgcmVqZWN0OiBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3RcbiAgICB9O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3Byb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnByb21pc2Uud2l0aC1yZXNvbHZlcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcblxuLy8gYFByb21pc2UudHJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gICAgKHJlc3VsdC5lcnJvciA/IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvcHJvbWlzZScpO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LmFnZ3JlZ2F0ZS1lcnJvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnByb21pc2UuYW55Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9wcm9taXNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL3JldmVyc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3JldmVyc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIF9PYmplY3QkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIik7XG52YXIgX1N5bWJvbCA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCIpO1xudmFyIF9PYmplY3QkY3JlYXRlID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzXCIpO1xudmFyIF9PYmplY3QkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvZm9yLWVhY2guanNcIik7XG52YXIgX3B1c2hJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9wdXNoLmpzXCIpO1xudmFyIF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIF9Qcm9taXNlID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9wcm9taXNlL2luZGV4LmpzXCIpO1xudmFyIF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZS5qc1wiKTtcbnZhciBfc2xpY2VJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZS5qc1wiKTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBfT2JqZWN0JGRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uICh0LCBlLCByKSB7XG4gICAgICB0W2VdID0gci52YWx1ZTtcbiAgICB9LFxuICAgIGkgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgPyBfU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHQsIGUsIHtcbiAgICAgIHZhbHVlOiByLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIHRbZV07XG4gIH1cbiAgdHJ5IHtcbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICAgIHJldHVybiB0W2VdID0gcjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdyYXAodCwgZSwgciwgbikge1xuICAgIHZhciBpID0gZSAmJiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IGUgOiBHZW5lcmF0b3IsXG4gICAgICBhID0gX09iamVjdCRjcmVhdGUoaS5wcm90b3R5cGUpLFxuICAgICAgYyA9IG5ldyBDb250ZXh0KG4gfHwgW10pO1xuICAgIHJldHVybiBvKGEsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogbWFrZUludm9rZU1ldGhvZCh0LCByLCBjKVxuICAgIH0pLCBhO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKHQsIGUsIHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICAgICAgYXJnOiB0LmNhbGwoZSwgcilcbiAgICAgIH07XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IHRcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGUud3JhcCA9IHdyYXA7XG4gIHZhciBoID0gXCJzdXNwZW5kZWRTdGFydFwiLFxuICAgIGwgPSBcInN1c3BlbmRlZFlpZWxkXCIsXG4gICAgZiA9IFwiZXhlY3V0aW5nXCIsXG4gICAgcyA9IFwiY29tcGxldGVkXCIsXG4gICAgeSA9IHt9O1xuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cbiAgdmFyIHAgPSB7fTtcbiAgZGVmaW5lKHAsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIHZhciBkID0gX09iamVjdCRnZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHApO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHModCkge1xuICAgIHZhciBfY29udGV4dDtcbiAgICBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0pLmNhbGwoX2NvbnRleHQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkZWZpbmUodCwgZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShlLCB0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IodCwgZSkge1xuICAgIGZ1bmN0aW9uIGludm9rZShyLCBvLCBpLCBhKSB7XG4gICAgICB2YXIgYyA9IHRyeUNhdGNoKHRbcl0sIHQsIG8pO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gYy50eXBlKSB7XG4gICAgICAgIHZhciB1ID0gYy5hcmcsXG4gICAgICAgICAgaCA9IHUudmFsdWU7XG4gICAgICAgIHJldHVybiBoICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZihoKSAmJiBuLmNhbGwoaCwgXCJfX2F3YWl0XCIpID8gZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pIDogZS5yZXNvbHZlKGgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICB1LnZhbHVlID0gdCwgaSh1KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYShjLmFyZyk7XG4gICAgfVxuICAgIHZhciByO1xuICAgIG8odGhpcywgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh0LCBuKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgZShmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgaW52b2tlKHQsIG4sIGUsIHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByID0gciA/IHIudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGUsIHIsIG4pIHtcbiAgICB2YXIgbyA9IGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpLCBhKSB7XG4gICAgICBpZiAobyA9PT0gZikgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIGlmIChvID09PSBzKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IGkpIHRocm93IGE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IHQsXG4gICAgICAgICAgZG9uZTogITBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZvciAobi5tZXRob2QgPSBpLCBuLmFyZyA9IGE7Oykge1xuICAgICAgICB2YXIgYyA9IG4uZGVsZWdhdGU7XG4gICAgICAgIGlmIChjKSB7XG4gICAgICAgICAgdmFyIHUgPSBtYXliZUludm9rZURlbGVnYXRlKGMsIG4pO1xuICAgICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgICBpZiAodSA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwibmV4dFwiID09PSBuLm1ldGhvZCkgbi5zZW50ID0gbi5fc2VudCA9IG4uYXJnO2Vsc2UgaWYgKFwidGhyb3dcIiA9PT0gbi5tZXRob2QpIHtcbiAgICAgICAgICBpZiAobyA9PT0gaCkgdGhyb3cgbyA9IHMsIG4uYXJnO1xuICAgICAgICAgIG4uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpO1xuICAgICAgICB9IGVsc2UgXCJyZXR1cm5cIiA9PT0gbi5tZXRob2QgJiYgbi5hYnJ1cHQoXCJyZXR1cm5cIiwgbi5hcmcpO1xuICAgICAgICBvID0gZjtcbiAgICAgICAgdmFyIHAgPSB0cnlDYXRjaChlLCByLCBuKTtcbiAgICAgICAgaWYgKFwibm9ybWFsXCIgPT09IHAudHlwZSkge1xuICAgICAgICAgIGlmIChvID0gbi5kb25lID8gcyA6IGwsIHAuYXJnID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHAuYXJnLFxuICAgICAgICAgICAgZG9uZTogbi5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcInRocm93XCIgPT09IHAudHlwZSAmJiAobyA9IHMsIG4ubWV0aG9kID0gXCJ0aHJvd1wiLCBuLmFyZyA9IHAuYXJnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgcikge1xuICAgIHZhciBuID0gci5tZXRob2QsXG4gICAgICBvID0gZS5pdGVyYXRvcltuXTtcbiAgICBpZiAobyA9PT0gdCkgcmV0dXJuIHIuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG4gJiYgZS5pdGVyYXRvcltcInJldHVyblwiXSAmJiAoci5tZXRob2QgPSBcInJldHVyblwiLCByLmFyZyA9IHQsIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgciksIFwidGhyb3dcIiA9PT0gci5tZXRob2QpIHx8IFwicmV0dXJuXCIgIT09IG4gJiYgKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG4gKyBcIicgbWV0aG9kXCIpKSwgeTtcbiAgICB2YXIgaSA9IHRyeUNhdGNoKG8sIGUuaXRlcmF0b3IsIHIuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSBpLnR5cGUpIHJldHVybiByLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBpLmFyZywgci5kZWxlZ2F0ZSA9IG51bGwsIHk7XG4gICAgdmFyIGEgPSBpLmFyZztcbiAgICByZXR1cm4gYSA/IGEuZG9uZSA/IChyW2UucmVzdWx0TmFtZV0gPSBhLnZhbHVlLCByLm5leHQgPSBlLm5leHRMb2MsIFwicmV0dXJuXCIgIT09IHIubWV0aG9kICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCByLmRlbGVnYXRlID0gbnVsbCwgeSkgOiBhIDogKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeSh0KSB7XG4gICAgdmFyIF9jb250ZXh0MjtcbiAgICB2YXIgZSA9IHtcbiAgICAgIHRyeUxvYzogdFswXVxuICAgIH07XG4gICAgMSBpbiB0ICYmIChlLmNhdGNoTG9jID0gdFsxXSksIDIgaW4gdCAmJiAoZS5maW5hbGx5TG9jID0gdFsyXSwgZS5hZnRlckxvYyA9IHRbM10pLCBfcHVzaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQyID0gdGhpcy50cnlFbnRyaWVzKS5jYWxsKF9jb250ZXh0MiwgZSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeSh0KSB7XG4gICAgdmFyIGUgPSB0LmNvbXBsZXRpb24gfHwge307XG4gICAgZS50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIGUuYXJnLCB0LmNvbXBsZXRpb24gPSBlO1xuICB9XG4gIGZ1bmN0aW9uIENvbnRleHQodCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSh0KS5jYWxsKHQsIHB1c2hUcnlFbnRyeSwgdGhpcyksIHRoaXMucmVzZXQoITApO1xuICB9XG4gIGZ1bmN0aW9uIHZhbHVlcyhlKSB7XG4gICAgaWYgKGUgfHwgXCJcIiA9PT0gZSkge1xuICAgICAgdmFyIHIgPSBlW2FdO1xuICAgICAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLm5leHQpIHJldHVybiBlO1xuICAgICAgaWYgKCFpc05hTihlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIG8gPSAtMSxcbiAgICAgICAgICBpID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIGZvciAoOyArK28gPCBlLmxlbmd0aDspIGlmIChuLmNhbGwoZSwgbykpIHJldHVybiBuZXh0LnZhbHVlID0gZVtvXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBpLm5leHQgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF90eXBlb2YoZSkgKyBcIiBpcyBub3QgaXRlcmFibGVcIik7XG4gIH1cbiAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBvKGcsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBvKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHQgJiYgdC5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFlICYmIChlID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChlLmRpc3BsYXlOYW1lIHx8IGUubmFtZSkpO1xuICB9LCBlLm1hcmsgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX09iamVjdCRzZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKGcpLCB0O1xuICB9LCBlLmF3cmFwID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogdFxuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYywgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZS5hc3luYyA9IGZ1bmN0aW9uICh0LCByLCBuLCBvLCBpKSB7XG4gICAgdm9pZCAwID09PSBpICYmIChpID0gX1Byb21pc2UpO1xuICAgIHZhciBhID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcCh0LCByLCBuLCBvKSwgaSk7XG4gICAgcmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKSA/IGEgOiBhLm5leHQoKS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5kb25lID8gdC52YWx1ZSA6IGEubmV4dCgpO1xuICAgIH0pO1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoZyksIGRlZmluZShnLCB1LCBcIkdlbmVyYXRvclwiKSwgZGVmaW5lKGcsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGRlZmluZShnLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSksIGUua2V5cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBPYmplY3QodCksXG4gICAgICByID0gW107XG4gICAgZm9yICh2YXIgbiBpbiBlKSBfcHVzaEluc3RhbmNlUHJvcGVydHkocikuY2FsbChyLCBuKTtcbiAgICByZXR1cm4gX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5KHIpLmNhbGwociksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsgci5sZW5ndGg7KSB7XG4gICAgICAgIHZhciB0ID0gci5wb3AoKTtcbiAgICAgICAgaWYgKHQgaW4gZSkgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICB9O1xuICB9LCBlLnZhbHVlcyA9IHZhbHVlcywgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGUpIHtcbiAgICAgIHZhciBfY29udGV4dDM7XG4gICAgICBpZiAodGhpcy5wcmV2ID0gMCwgdGhpcy5uZXh0ID0gMCwgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB0LCBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQzID0gdGhpcy50cnlFbnRyaWVzKS5jYWxsKF9jb250ZXh0MywgcmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtfc2xpY2VJbnN0YW5jZVByb3BlcnR5KHIpLmNhbGwociwgMSkpICYmICh0aGlzW3JdID0gdCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgdCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZSkge1xuICAgICAgaWYgKHRoaXMuZG9uZSkgdGhyb3cgZTtcbiAgICAgIHZhciByID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShuLCBvKSB7XG4gICAgICAgIHJldHVybiBhLnR5cGUgPSBcInRocm93XCIsIGEuYXJnID0gZSwgci5uZXh0ID0gbiwgbyAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgISFvO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgbyA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBvID49IDA7IC0tbykge1xuICAgICAgICB2YXIgaSA9IHRoaXMudHJ5RW50cmllc1tvXSxcbiAgICAgICAgICBhID0gaS5jb21wbGV0aW9uO1xuICAgICAgICBpZiAoXCJyb290XCIgPT09IGkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoaS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGMgPSBuLmNhbGwoaSwgXCJjYXRjaExvY1wiKSxcbiAgICAgICAgICAgIHUgPSBuLmNhbGwoaSwgXCJmaW5hbGx5TG9jXCIpO1xuICAgICAgICAgIGlmIChjICYmIHUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF1KSB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChlLCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcixcbiAgICAgICAgbmV4dExvYzogblxuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHQpLCB5O1xuICAgIH1cbiAgfSwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gRkYyNi0gYnVnOiBBcnJheUJ1ZmZlcnMgYXJlIG5vbi1leHRlbnNpYmxlLCBidXQgT2JqZWN0LmlzRXh0ZW5zaWJsZSBkb2VzIG5vdCByZXBvcnQgaXRcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShidWZmZXIpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVmZmVyLCAnYScsIHsgdmFsdWU6IDggfSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkaXNFeHRlbnNpYmxlKDEpOyB9KTtcblxuLy8gYE9iamVjdC5pc0V4dGVuc2libGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNleHRlbnNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IChGQUlMU19PTl9QUklNSVRJVkVTIHx8IEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSkgPyBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSAmJiBjbGFzc29mKGl0KSA9PT0gJ0FycmF5QnVmZmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZTtcbn0gOiAkaXNFeHRlbnNpYmxlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtcHJldmVudGV4dGVuc2lvbnMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgaXNFeHRlbnNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG5cbnZhciBSRVFVSVJFRCA9IGZhbHNlO1xudmFyIE1FVEFEQVRBID0gdWlkKCdtZXRhJyk7XG52YXIgaWQgPSAwO1xuXG52YXIgc2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgZGVmaW5lUHJvcGVydHkoaXQsIE1FVEFEQVRBLCB7IHZhbHVlOiB7XG4gICAgb2JqZWN0SUQ6ICdPJyArIGlkKyssIC8vIG9iamVjdCBJRFxuICAgIHdlYWtEYXRhOiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcblxudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gYSBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS5vYmplY3RJRDtcbn07XG5cbnZhciBnZXRXZWFrRGF0YSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gdGhlIHN0b3JlIG9mIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS53ZWFrRGF0YTtcbn07XG5cbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWklORyAmJiBSRVFVSVJFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXNPd24oaXQsIE1FVEFEQVRBKSkgc2V0TWV0YWRhdGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG52YXIgZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICBtZXRhLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiAgUkVRVUlSRUQgPSB0cnVlO1xuICB2YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZjtcbiAgdmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG4gIHZhciB0ZXN0ID0ge307XG4gIHRlc3RbTUVUQURBVEFdID0gMTtcblxuICAvLyBwcmV2ZW50IGV4cG9zaW5nIG9mIG1ldGFkYXRhIGtleVxuICBpZiAoZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0KS5sZW5ndGgpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdFtpXSA9PT0gTUVUQURBVEEpIHtcbiAgICAgICAgICBzcGxpY2UocmVzdWx0LCBpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZS5mXG4gICAgfSk7XG4gIH1cbn07XG5cbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuYWJsZTogZW5hYmxlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrRGF0YTogZ2V0V2Vha0RhdGEsXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuaGlkZGVuS2V5c1tNRVRBREFUQV0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSwgd3JhcHBlciwgY29tbW9uKSB7XG4gIHZhciBJU19NQVAgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ01hcCcpICE9PSAtMTtcbiAgdmFyIElTX1dFQUsgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ1dlYWsnKSAhPT0gLTE7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl9OQU1FXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgdmFyIGV4cG9ydGVkID0ge307XG4gIHZhciBDb25zdHJ1Y3RvcjtcblxuICBpZiAoIURFU0NSSVBUT1JTIHx8ICFpc0NhbGxhYmxlKE5hdGl2ZUNvbnN0cnVjdG9yKVxuICAgIHx8ICEoSVNfV0VBSyB8fCBOYXRpdmVQcm90b3R5cGUuZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKS5lbnRyaWVzKCkubmV4dCgpOyB9KSlcbiAgKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDb25zdHJ1Y3RvciA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB9IGVsc2Uge1xuICAgIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZShhbkluc3RhbmNlKHRhcmdldCwgUHJvdG90eXBlKSwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBjb2xsZWN0aW9uOiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGFyZ2V0W0FEREVSXSwgeyB0aGF0OiB0YXJnZXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICBmb3JFYWNoKFsnYWRkJywgJ2NsZWFyJywgJ2RlbGV0ZScsICdmb3JFYWNoJywgJ2dldCcsICdoYXMnLCAnc2V0JywgJ2tleXMnLCAndmFsdWVzJywgJ2VudHJpZXMnXSwgZnVuY3Rpb24gKEtFWSkge1xuICAgICAgdmFyIElTX0FEREVSID0gS0VZID09PSAnYWRkJyB8fCBLRVkgPT09ICdzZXQnO1xuICAgICAgaWYgKEtFWSBpbiBOYXRpdmVQcm90b3R5cGUgJiYgIShJU19XRUFLICYmIEtFWSA9PT0gJ2NsZWFyJykpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFByb3RvdHlwZSwgS0VZLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5jb2xsZWN0aW9uO1xuICAgICAgICAgIGlmICghSVNfQURERVIgJiYgSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkpIHJldHVybiBLRVkgPT09ICdnZXQnID8gdW5kZWZpbmVkIDogZmFsc2U7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGNvbGxlY3Rpb25bS0VZXShhID09PSAwID8gMCA6IGEsIGIpO1xuICAgICAgICAgIHJldHVybiBJU19BRERFUiA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgSVNfV0VBSyB8fCBkZWZpbmVQcm9wZXJ0eShQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb24uc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgZXhwb3J0ZWRbQ09OU1RSVUNUT1JfTkFNRV0gPSBDb25zdHJ1Y3RvcjtcbiAgJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIGV4cG9ydGVkKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5zYWZlICYmIHRhcmdldFtrZXldKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICB9IHJldHVybiB0YXJnZXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZmFzdEtleTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgUHJvdG90eXBlKTtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBpbmRleDogY3JlYXRlKG51bGwpLFxuICAgICAgICBmaXJzdDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWQsXG4gICAgICAgIHNpemU6IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCFERVNDUklQVE9SUykgdGhhdC5zaXplID0gMDtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0aGF0W0FEREVSXSwgeyB0aGF0OiB0aGF0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgUHJvdG90eXBlID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgdmFyIGdldEludGVybmFsU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gICAgdmFyIGRlZmluZSA9IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgIHZhciBwcmV2aW91cywgaW5kZXg7XG4gICAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUubGFzdCA9IGVudHJ5ID0ge1xuICAgICAgICAgIGluZGV4OiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgcHJldmlvdXM6IHByZXZpb3VzID0gc3RhdGUubGFzdCxcbiAgICAgICAgICBuZXh0OiB1bmRlZmluZWQsXG4gICAgICAgICAgcmVtb3ZlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdGF0ZS5maXJzdCkgc3RhdGUuZmlyc3QgPSBlbnRyeTtcbiAgICAgICAgaWYgKHByZXZpb3VzKSBwcmV2aW91cy5uZXh0ID0gZW50cnk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSsrO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSsrO1xuICAgICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHN0YXRlLmluZGV4W2luZGV4XSA9IGVudHJ5O1xuICAgICAgfSByZXR1cm4gdGhhdDtcbiAgICB9O1xuXG4gICAgdmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIC8vIGZhc3QgY2FzZVxuICAgICAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICAgICAgdmFyIGVudHJ5O1xuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiBzdGF0ZS5pbmRleFtpbmRleF07XG4gICAgICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgICAgIGZvciAoZW50cnkgPSBzdGF0ZS5maXJzdDsgZW50cnk7IGVudHJ5ID0gZW50cnkubmV4dCkge1xuICAgICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCB7XG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5jbGVhcigpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5jbGVhclxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBkYXRhID0gc3RhdGUuaW5kZXg7XG4gICAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmZpcnN0O1xuICAgICAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucHJldmlvdXMpIGVudHJ5LnByZXZpb3VzID0gZW50cnkucHJldmlvdXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmZpcnN0ID0gc3RhdGUubGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplID0gMDtcbiAgICAgICAgZWxzZSB0aGF0LnNpemUgPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmRlbGV0ZShrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubmV4dDtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5pbmRleFtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubmV4dCA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucHJldmlvdXMgPSBwcmV2O1xuICAgICAgICAgIGlmIChzdGF0ZS5maXJzdCA9PT0gZW50cnkpIHN0YXRlLmZpcnN0ID0gbmV4dDtcbiAgICAgICAgICBpZiAoc3RhdGUubGFzdCA9PT0gZW50cnkpIHN0YXRlLmxhc3QgPSBwcmV2O1xuICAgICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZS0tO1xuICAgICAgICAgIGVsc2UgdGhhdC5zaXplLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuZmlyc3QpIHtcbiAgICAgICAgICBib3VuZEZ1bmN0aW9uKGVudHJ5LnZhbHVlLCBlbnRyeS5rZXksIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXR9LnByb3RvdHlwZS5oYXMoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmhhc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmhhc1xuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIElTX01BUCA/IHtcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLmdldChrZXkpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudmFsdWU7XG4gICAgICB9LFxuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5zZXRcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmFkZFxuICAgICAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCkge1xuICAgIHZhciBJVEVSQVRPUl9OQU1FID0gQ09OU1RSVUNUT1JfTkFNRSArICcgSXRlcmF0b3InO1xuICAgIHZhciBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG4gICAgdmFyIGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoSVRFUkFUT1JfTkFNRSk7XG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUueyBrZXlzLCB2YWx1ZXMsIGVudHJpZXMsIEBAaXRlcmF0b3IgfSgpYCBtZXRob2RzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICBkZWZpbmVJdGVyYXRvcihDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgICAgdHlwZTogSVRFUkFUT1JfTkFNRSxcbiAgICAgICAgdGFyZ2V0OiBpdGVyYXRlZCxcbiAgICAgICAgc3RhdGU6IGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlKGl0ZXJhdGVkKSxcbiAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUodGhpcyk7XG4gICAgICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gICAgICB2YXIgZW50cnkgPSBzdGF0ZS5sYXN0O1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXN0YXRlLnRhcmdldCB8fCAhKHN0YXRlLmxhc3QgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLnN0YXRlLmZpcnN0KSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PT0gJ2tleXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS5rZXksIGZhbHNlKTtcbiAgICAgIGlmIChraW5kID09PSAndmFsdWVzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkudmFsdWUsIGZhbHNlKTtcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZmFsc2UpO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlW0BAc3BlY2llc11gIGFjY2Vzc29yc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LW1hcC1AQHNwZWNpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1zZXQtQEBzcGVjaWVzXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAtb2JqZWN0c1xuY29sbGVjdGlvbignTWFwJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hcCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguTWFwO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLnNvbWU7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29tZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfSwge1xuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb21lJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NvbWUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb21lJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvbWU7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNvbWUpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAna2V5cycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmtleXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmtleXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgbWVyZ2VTb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICByZXR1cm4gbGVuZ3RoIDwgOCA/IGluc2VydGlvblNvcnQoYXJyYXksIGNvbXBhcmVmbikgOiBtZXJnZShcbiAgICBhcnJheSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgMCwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBjb21wYXJlZm5cbiAgKTtcbn07XG5cbnZhciBpbnNlcnRpb25Tb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIGkgPSAxO1xuICB2YXIgZWxlbWVudCwgajtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGogPSBpO1xuICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICB9XG4gICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIChhcnJheSwgbGVmdCwgcmlnaHQsIGNvbXBhcmVmbikge1xuICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgdmFyIGxpbmRleCA9IDA7XG4gIHZhciByaW5kZXggPSAwO1xuXG4gIHdoaWxlIChsaW5kZXggPCBsbGVuZ3RoIHx8IHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICBhcnJheVtsaW5kZXggKyByaW5kZXhdID0gKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aClcbiAgICAgID8gY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdXG4gICAgICA6IGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXTtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlU29ydDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBmaXJlZm94ID0gdXNlckFnZW50Lm1hdGNoKC9maXJlZm94XFwvKFxcZCspL2kpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhZmlyZWZveCAmJiArZmlyZWZveFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVUEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciB3ZWJraXQgPSB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCspXFwuLyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISF3ZWJraXQgJiYgK3dlYmtpdFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJuYWxTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBGRiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbicpO1xudmFyIElFX09SX0VER0UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UnKTtcbnZhciBWOCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24nKTtcblxudmFyIHRlc3QgPSBbXTtcbnZhciBuYXRpdmVTb3J0ID0gdW5jdXJyeVRoaXModGVzdC5zb3J0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXModGVzdC5wdXNoKTtcblxuLy8gSUU4LVxudmFyIEZBSUxTX09OX1VOREVGSU5FRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KTtcbi8vIFY4IGJ1Z1xudmFyIEZBSUxTX09OX05VTEwgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydChudWxsKTtcbn0pO1xuLy8gT2xkIFdlYktpdFxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb3J0Jyk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGZlYXR1cmUgZGV0ZWN0aW9uIGNhbiBiZSB0b28gc2xvdywgc28gY2hlY2sgZW5naW5lcyB2ZXJzaW9uc1xuICBpZiAoVjgpIHJldHVybiBWOCA8IDcwO1xuICBpZiAoRkYgJiYgRkYgPiAzKSByZXR1cm47XG4gIGlmIChJRV9PUl9FREdFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdFQktJVCkgcmV0dXJuIFdFQktJVCA8IDYwMztcblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBjb2RlLCBjaHIsIHZhbHVlLCBpbmRleDtcblxuICAvLyBnZW5lcmF0ZSBhbiBhcnJheSB3aXRoIG1vcmUgNTEyIGVsZW1lbnRzIChDaGFrcmEgYW5kIG9sZCBWOCBmYWlscyBvbmx5IGluIHRoaXMgY2FzZSlcbiAgZm9yIChjb2RlID0gNjU7IGNvZGUgPCA3NjsgY29kZSsrKSB7XG4gICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSA2NjogY2FzZSA2OTogY2FzZSA3MDogY2FzZSA3MjogdmFsdWUgPSAzOyBicmVhaztcbiAgICAgIGNhc2UgNjg6IGNhc2UgNzE6IHZhbHVlID0gNDsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB2YWx1ZSA9IDI7XG4gICAgfVxuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDc7IGluZGV4KyspIHtcbiAgICAgIHRlc3QucHVzaCh7IGs6IGNociArIGluZGV4LCB2OiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudiAtIGEudjsgfSk7XG5cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGVzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSB0ZXN0W2luZGV4XS5rLmNoYXJBdCgwKTtcbiAgICBpZiAocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IGNocikgcmVzdWx0ICs9IGNocjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgIT09ICdER0JFRkhBQ0lKSyc7XG59KTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCAhU1RSSUNUX01FVEhPRCB8fCAhU1RBQkxFX1NPUlQ7XG5cbnZhciBnZXRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uIChjb21wYXJlZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICByZXR1cm4gdG9TdHJpbmcoeCkgPiB0b1N0cmluZyh5KSA/IDEgOiAtMTtcbiAgfTtcbn07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb3J0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG5cbiAgICB2YXIgYXJyYXkgPSB0b09iamVjdCh0aGlzKTtcblxuICAgIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkID8gbmF0aXZlU29ydChhcnJheSkgOiBuYXRpdmVTb3J0KGFycmF5LCBjb21wYXJlZm4pO1xuXG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGFycmF5TGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoYXJyYXkpO1xuICAgIHZhciBpdGVtc0xlbmd0aCwgaW5kZXg7XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGluZGV4IGluIGFycmF5KSBwdXNoKGl0ZW1zLCBhcnJheVtpbmRleF0pO1xuICAgIH1cblxuICAgIGludGVybmFsU29ydChpdGVtcywgZ2V0U29ydENvbXBhcmUoY29tcGFyZWZuKSk7XG5cbiAgICBpdGVtc0xlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZW1zKTtcbiAgICBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBpdGVtc0xlbmd0aCkgYXJyYXlbaW5kZXhdID0gaXRlbXNbaW5kZXgrK107XG4gICAgd2hpbGUgKGluZGV4IDwgYXJyYXlMZW5ndGgpIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhhcnJheSwgaW5kZXgrKyk7XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc29ydCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzb3J0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29ydCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb3J0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb3J0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3ZhbHVlcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudmFsdWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3JcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdlbnRyaWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2VudHJpZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZW50cmllcztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZW50cmllcylcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2VudHJpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG5sZXQgZ2V0UmFuZG9tVmFsdWVzO1xuY29uc3Qgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cbiAgICBnZXRSYW5kb21WYWx1ZXMgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pO1xuXG4gICAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbn0iLCAiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5cbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICByZXR1cm4gYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV07XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7IiwgImNvbnN0IHJhbmRvbVVVSUQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCAmJiBjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byk7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHJhbmRvbVVVSURcbn07IiwgImltcG9ydCBuYXRpdmUgZnJvbSAnLi9uYXRpdmUuanMnO1xuaW1wb3J0IHJuZyBmcm9tICcuL3JuZy5qcyc7XG5pbXBvcnQgeyB1bnNhZmVTdHJpbmdpZnkgfSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChuYXRpdmUucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5hdGl2ZS5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3Qgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7IC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIHJldHVybiB1bnNhZmVTdHJpbmdpZnkocm5kcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHY0OyIsICJpbXBvcnQgeyBBc3NpZ25hYmxlIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgRGF0YVNldCB9IGZyb20gXCIuL2RhdGEtc2V0XCI7XG5pbXBvcnQgeyBEYXRhU3RyZWFtIH0gZnJvbSBcIi4vZGF0YS1zdHJlYW1cIjtcblxudHlwZSBWYWx1ZU9mPFQ+ID0gVFtrZXlvZiBUXTtcblxuLyoqIFZhbGlkIGlkIHR5cGUuICovXG5leHBvcnQgdHlwZSBJZCA9IG51bWJlciB8IHN0cmluZztcbi8qKiBOdWxsYWJsZSBpZCB0eXBlLiAqL1xuZXhwb3J0IHR5cGUgT3B0SWQgPSB1bmRlZmluZWQgfCBudWxsIHwgSWQ7XG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIGEgdmFsdWUgY2FuIGJlIHVzZWQgYXMgYW4gaWQuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdmFsaWQgaWQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBJZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xufVxuXG4vKipcbiAqIE1ha2UgYW4gb2JqZWN0IGRlZXBseSBwYXJ0aWFsLlxuICovXG5leHBvcnQgdHlwZSBEZWVwUGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBhbnlbXSB8IEZ1bmN0aW9uIHwgTm9kZVxuICA/IFRcbiAgOiBUIGV4dGVuZHMgb2JqZWN0XG4gID8geyBba2V5IGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtrZXldPiB9XG4gIDogVDtcblxuLyoqXG4gKiBBbiBpdGVtIHRoYXQgbWF5ICh7QGxpbmsgSWR9KSBvciBtYXkgbm90IChhYnNlbnQsIHVuZGVmaW5lZCBvciBudWxsKSBoYXZlIGFuIGlkIHByb3BlcnR5LlxuICpcbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCB0eXBlIFBhcnRJdGVtPElkUHJvcCBleHRlbmRzIHN0cmluZz4gPSBQYXJ0aWFsPFJlY29yZDxJZFByb3AsIE9wdElkPj47XG4vKipcbiAqIEFuIGl0ZW0gdGhhdCBoYXMgYSBwcm9wZXJ0eSBjb250YWluaW5nIGFuIGlkIGFuZCBhbGwgb3RoZXIgcmVxdWlyZWQgcHJvcGVydGllcyBvZiBnaXZlbiBpdGVtIHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCB0eXBlIEZ1bGxJdGVtPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+ID0gSXRlbSAmIFJlY29yZDxJZFByb3AsIElkPjtcbi8qKlxuICogQW4gaXRlbSB0aGF0IGhhcyBhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gaWQgYW5kIG9wdGlvbmFsbHkgb3RoZXIgcHJvcGVydGllcyBvZiBnaXZlbiBpdGVtIHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCB0eXBlIFVwZGF0ZUl0ZW08XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gPSBBc3NpZ25hYmxlPEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+ICYgUmVjb3JkPElkUHJvcCwgSWQ+O1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciBhbiBpdGVtIGhhcyBhbiBpZCAoaXMgYSB7QGxpbmsgRnVsbEl0ZW19KS5cbiAqXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBpdGVtIHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSBpZFByb3AgLSBOYW1lIG9mIHRoZSBpZCBwcm9wZXJ0eS5cbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGlzIHZhbHVlIGlzIGEge0BsaW5rIEZ1bGxJdGVtfSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGdWxsSXRlbTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPihpdGVtOiBJdGVtLCBpZFByb3A6IElkUHJvcCk6IGl0ZW0gaXMgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB7XG4gIHJldHVybiBpdGVtW2lkUHJvcF0gIT0gbnVsbDtcbn1cblxuLyoqIEFkZCBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRFdmVudFBheWxvYWQge1xuICAvKiogSWRzIG9mIGFkZGVkIGl0ZW1zLiAqL1xuICBpdGVtczogSWRbXTtcbn1cbi8qKiBVcGRhdGUgZXZlbnQgcGF5bG9hZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlRXZlbnRQYXlsb2FkPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IHtcbiAgLyoqIElkcyBvZiB1cGRhdGVkIGl0ZW1zLiAqL1xuICBpdGVtczogSWRbXTtcbiAgLyoqIEl0ZW1zIGFzIHRoZXkgd2VyZSBiZWZvcmUgdGhpcyB1cGRhdGUuICovXG4gIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEl0ZW1zIGFzIHRoZXkgYXJlIG5vdy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgSnVzdCBnZXQgdGhlIGRhdGEgZnJvbSB0aGUgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LlxuICAgKi9cbiAgZGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xufVxuLyoqIFJlbW92ZSBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW1vdmVFdmVudFBheWxvYWQ8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKiogSWRzIG9mIHJlbW92ZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xuICAvKiogSXRlbXMgYXMgdGhleSB3ZXJlIGJlZm9yZSB0aGVpciByZW1vdmFsLiAqL1xuICBvbGREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG59XG5cbi8qKlxuICogTWFwIG9mIGV2ZW50IHBheWxvYWQgdHlwZXMgKGV2ZW50IG5hbWUg4oaSIHBheWxvYWQpLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50UGF5bG9hZHM8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICBhZGQ6IEFkZEV2ZW50UGF5bG9hZDtcbiAgdXBkYXRlOiBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPjtcbiAgcmVtb3ZlOiBSZW1vdmVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPjtcbn1cbi8qKlxuICogTWFwIG9mIGV2ZW50IHBheWxvYWQgdHlwZXMgaW5jbHVkaW5nIGFueSBldmVudCAoZXZlbnQgbmFtZSDihpIgcGF5bG9hZCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQYXlsb2Fkc1dpdGhBbnk8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gZXh0ZW5kcyBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD4ge1xuICBcIipcIjogVmFsdWVPZjxFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD4+O1xufVxuXG4vKipcbiAqIE1hcCBvZiBldmVudCBjYWxsYmFjayB0eXBlcyAoZXZlbnQgbmFtZSDihpIgY2FsbGJhY2spLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Q2FsbGJhY2tzPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IHtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIGFkZChuYW1lOiBcImFkZFwiLCBwYXlsb2FkOiBBZGRFdmVudFBheWxvYWQgfCBudWxsLCBzZW5kZXJJZD86IElkIHwgbnVsbCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCAoe0BsaW5rIEV2ZW50TmFtZX0pLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIERhdGEgYWJvdXQgdGhlIGl0ZW1zIGFmZmVjdGVkIGJ5IHRoaXMgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIEEgc2VuZGVySWQsIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2hpY2ggdHJpZ2dlcmVkIHRoZSBldmVudC4gSWYgc2VuZGVySWQgaXMgbm90IHByb3ZpZGVkLCB0aGUgYXJndW1lbnQgd2lsbCBiZSBgbnVsbGAuXG4gICAqL1xuICB1cGRhdGUoXG4gICAgbmFtZTogXCJ1cGRhdGVcIixcbiAgICBwYXlsb2FkOiBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPiB8IG51bGwsXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHJlbW92ZShcbiAgICBuYW1lOiBcInJlbW92ZVwiLFxuICAgIHBheWxvYWQ6IFJlbW92ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+IHwgbnVsbCxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xufVxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgY2FsbGJhY2sgdHlwZXMgaW5jbHVkaW5nIGFueSBldmVudCAoZXZlbnQgbmFtZSDihpIgY2FsbGJhY2spLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBleHRlbmRzIEV2ZW50Q2FsbGJhY2tzPEl0ZW0sIElkUHJvcD4ge1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgXCIqXCI8TiBleHRlbmRzIGtleW9mIEV2ZW50Q2FsbGJhY2tzPEl0ZW0sIElkUHJvcD4+KFxuICAgIG5hbWU6IE4sXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W05dLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG59XG5cbi8qKiBBdmFpbGFibGUgZXZlbnQgbmFtZXMuICovXG5leHBvcnQgdHlwZSBFdmVudE5hbWUgPSBrZXlvZiBFdmVudFBheWxvYWRzPG5ldmVyLCBcIlwiPjtcbi8qKiBBdmFpbGFibGUgZXZlbnQgbmFtZXMgYW5kICcqJyB0byBsaXN0ZW4gZm9yIGFsbC4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50TmFtZVdpdGhBbnkgPSBrZXlvZiBFdmVudFBheWxvYWRzV2l0aEFueTxuZXZlciwgXCJcIj47XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2Ugb3JkZXIgcGFyYW1ldGVyLlxuICogLSBBIHN0cmluZyB2YWx1ZSBkZXRlcm1pbmVzIHdoaWNoIHByb3BlcnR5IHdpbGwgYmUgdXNlZCBmb3Igc29ydGluZyAodXNpbmcgPCBhbmQgPiBvcGVyYXRvcnMgZm9yIG51bWVyaWMgY29tcGFyaXNvbikuXG4gKiAtIEEgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRoZSBzYW1lIHdheSBhcyBpbiBBcnJheS5zb3J0LlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPiA9XG4gIHwga2V5b2YgSXRlbVxuICB8ICgoYTogSXRlbSwgYjogSXRlbSkgPT4gbnVtYmVyKTtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJuIHR5cGUgaW5kZXBlbmRlbnQpLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqXG4gICAqIEFuIGFycmF5IHdpdGggZmllbGQgbmFtZXMsIG9yIGFuIG9iamVjdCB3aXRoIGN1cnJlbnQgZmllbGQgbmFtZSBhbmQgbmV3IGZpZWxkIG5hbWUgdGhhdCB0aGUgZmllbGQgaXMgcmV0dXJuZWQgYXMuIEJ5IGRlZmF1bHQsIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtcyBhcmUgZW1pdHRlZC4gV2hlbiBmaWVsZHMgaXMgZGVmaW5lZCwgb25seSB0aGUgcHJvcGVydGllcyB3aG9zZSBuYW1lIGlzIHNwZWNpZmllZCBpbiBmaWVsZHMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgaXRlbXMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFdhcm5pbmcqKjogVGhlcmUgaXMgbm8gVHlwZVNjcmlwdCBzdXBwb3J0IGZvciB0aGlzLlxuICAgKi9cbiAgZmllbGRzPzogc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogSXRlbXMgY2FuIGJlIGZpbHRlcmVkIG9uIHNwZWNpZmljIHByb3BlcnRpZXMgYnkgcHJvdmlkaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLiBBIGZpbHRlciBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgaXRlbXMgaW4gdGhlIERhdGFTZXQsIGFuZCBpcyBjYWxsZWQgd2l0aCB0aGUgaXRlbSBhcyBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIGJvb2xlYW4uIEFsbCBpdGVtcyBmb3Igd2hpY2ggdGhlIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2lsbCBiZSBlbWl0dGVkLiAqL1xuICBmaWx0ZXI/OiAoaXRlbTogSXRlbSkgPT4gYm9vbGVhbjtcbiAgLyoqIE9yZGVyIHRoZSBpdGVtcyBieSBhIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uICovXG4gIG9yZGVyPzogRGF0YUludGVyZmFjZU9yZGVyPEl0ZW0+O1xufVxuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm5zIGEgc2luZ2xlIGl0ZW0gb3IgYW4gYXJyYXkpLlxuICpcbiAqIEByZW1hcmtzXG4gKiBXaGV0aGVyIGFuIGl0ZW0gb3IgYW5kIGFycmF5IG9mIGl0ZW1zIGlzIHJldHVybmVkIGlzIGRldGVybWluZWQgYnkgdGhlIHR5cGUgb2YgdGhlIGlkKHMpIGFyZ3VtZW50LlxuICogSWYgYW4gYXJyYXkgb2YgaWRzIGlzIHJlcXVlc3RlZCBhbiBhcnJheSBvZiBpdGVtcyB3aWxsIGJlIHJldHVybmVkLlxuICogSWYgYSBzaW5nbGUgaWQgaXMgcmVxdWVzdGVkIGEgc2luZ2xlIGl0ZW0gKG9yIG51bGwgaWYgdGhlIGlkIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSkgd2lsbCBiZSByZXR1cm5lZC5cbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICBleHRlbmRzIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQmFzZTxJdGVtPiB7XG4gIC8qKiBJdGVtcyB3aWxsIGJlIHJldHVybmVkIGFzIGEgc2luZ2xlIGl0ZW0gKGlmIGludm9rZWQgd2l0aCBhbiBpZCkgb3IgYW4gYXJyYXkgb2YgaXRlbXMgKGlmIGludm9rZWQgd2l0aCBhbiBhcnJheSBvZiBpZHMpLiAqL1xuICByZXR1cm5UeXBlPzogdW5kZWZpbmVkIHwgXCJBcnJheVwiO1xufVxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJucyBhbiBvYmplY3QpLlxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgcmV0dXJuZWQgb2JqZWN0IGhhcyBpZHMgYXMga2V5cyBhbmQgaXRlbXMgYXMgdmFsdWVzIG9mIGNvcnJlc3BvbmRpbmcgaWRzLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICBleHRlbmRzIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQmFzZTxJdGVtPiB7XG4gIC8qKiBJdGVtcyB3aWxsIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBtYXAgKGlkIOKGkiBpdGVtKS4gKi9cbiAgcmV0dXJuVHlwZTogXCJPYmplY3RcIjtcbn1cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZ2V0IG9wdGlvbnMgKHJldHVybnMgc2luZ2xlIGl0ZW0sIGFuIGFycmF5IG9yIG9iamVjdCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gPVxuICB8IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgfCBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPjtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgaWRzIG9wdGlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9uczxJdGVtPiB7XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZm9yIGVhY2ggb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPiB7XG4gIC8qKiBBbiBhcnJheSB3aXRoIGZpZWxkIG5hbWVzLCBvciBhbiBvYmplY3Qgd2l0aCBjdXJyZW50IGZpZWxkIG5hbWUgYW5kIG5ldyBmaWVsZCBuYW1lIHRoYXQgdGhlIGZpZWxkIGlzIHJldHVybmVkIGFzLiBCeSBkZWZhdWx0LCBhbGwgcHJvcGVydGllcyBvZiB0aGUgaXRlbXMgYXJlIGVtaXR0ZWQuIFdoZW4gZmllbGRzIGlzIGRlZmluZWQsIG9ubHkgdGhlIHByb3BlcnRpZXMgd2hvc2UgbmFtZSBpcyBzcGVjaWZpZWQgaW4gZmllbGRzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIGl0ZW1zLiAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgbWFwIG9wcmlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBPcmlnaW5hbCAtIFRoZSBvcmlnaW5hbCBpdGVtIHR5cGUgaW4gdGhlIGRhdGEuXG4gKiBAdHlwZVBhcmFtIE1hcHBlZCAtIFRoZSB0eXBlIGFmdGVyIG1hcHBpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8T3JpZ2luYWwsIE1hcHBlZD4ge1xuICAvKiogQW4gYXJyYXkgd2l0aCBmaWVsZCBuYW1lcywgb3IgYW4gb2JqZWN0IHdpdGggY3VycmVudCBmaWVsZCBuYW1lIGFuZCBuZXcgZmllbGQgbmFtZSB0aGF0IHRoZSBmaWVsZCBpcyByZXR1cm5lZCBhcy4gQnkgZGVmYXVsdCwgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW1zIGFyZSBlbWl0dGVkLiBXaGVuIGZpZWxkcyBpcyBkZWZpbmVkLCBvbmx5IHRoZSBwcm9wZXJ0aWVzIHdob3NlIG5hbWUgaXMgc3BlY2lmaWVkIGluIGZpZWxkcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBpdGVtcy4gKi9cbiAgZmllbGRzPzogc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogSXRlbXMgY2FuIGJlIGZpbHRlcmVkIG9uIHNwZWNpZmljIHByb3BlcnRpZXMgYnkgcHJvdmlkaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLiBBIGZpbHRlciBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgaXRlbXMgaW4gdGhlIERhdGFTZXQsIGFuZCBpcyBjYWxsZWQgd2l0aCB0aGUgaXRlbSBhcyBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIGJvb2xlYW4uIEFsbCBpdGVtcyBmb3Igd2hpY2ggdGhlIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2lsbCBiZSBlbWl0dGVkLiAqL1xuICBmaWx0ZXI/OiAoaXRlbTogT3JpZ2luYWwpID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxNYXBwZWQ+O1xufVxuXG4vKipcbiAqIENvbW1vbiBpbnRlcmZhY2UgZm9yIGRhdGEgc2V0cyBhbmQgZGF0YSB2aWV3LlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQgKG1pc3NpbmcgaWRzIHdpbGwgYmUgZ2VuZXJhdGVkIHVwb24gaW5zZXJ0aW9uKS5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgb24gdGhlIEl0ZW0gdHlwZSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+IHtcbiAgLyoqIFRoZSBudW1iZXIgb2YgaXRlbXMuICovXG4gIGxlbmd0aDogbnVtYmVyO1xuXG4gIC8qKiBUaGUga2V5IG9mIGlkIHByb3BlcnR5LiAqL1xuICBpZFByb3A6IElkUHJvcDtcblxuICAvKipcbiAgICogQWRkIGEgdW5pdmVyc2FsIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYCpgIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIGFueSBvZiB0aGUgZXZlbnRzIGBhZGRgLCBgdXBkYXRlYCwgYW5kIGByZW1vdmVgIG9jY3Vycy5cbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvbihldmVudDogXCIqXCIsIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl0pOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGFuIGBhZGRgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYGFkZGAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gaXRlbSBvciBhIHNldCBvZiBpdGVtcyBpcyBhZGRlZCwgb3Igd2hlbiBhbiBpdGVtIGlzIHVwZGF0ZWQgd2hpbGUgbm90IHlldCBleGlzdGluZy5cbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvbihldmVudDogXCJhZGRcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiYWRkXCJdKTogdm9pZDtcbiAgLyoqXG4gICAqIEFkZCBhIGByZW1vdmVgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYHJlbW92ZWAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gaXRlbSBvciBhIHNldCBvZiBpdGVtcyBpcyByZW1vdmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXVxuICApOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGFuIGB1cGRhdGVgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBUaGUgYHVwZGF0ZWAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gZXhpc3RpbmcgaXRlbSBvciBhIHNldCBvZiBleGlzdGluZyBpdGVtcyBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSB1bml2ZXJzYWwgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKGV2ZW50OiBcIipcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYGFkZGAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKGV2ZW50OiBcImFkZFwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl0pOiB2b2lkO1xuICAvKipcbiAgICogUmVtb3ZlIGEgYHJlbW92ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXVxuICApOiB2b2lkO1xuICAvKipcbiAgICogUmVtb3ZlIGFuIGB1cGRhdGVgIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9mZihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl1cbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogR2V0IGFsbCB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcy5cbiAgICovXG4gIGdldCgpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgcmVxdWVzdGVkIGl0ZW1zLlxuICAgKi9cbiAgZ2V0KG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT4pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgdGhlcmUgYXJlIG5vIGl0ZW1zKS5cbiAgICovXG4gIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IGFsbCB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIHJlcXVlc3RlZCBpdGVtcyBvciBpZiByZXF1ZXN0ZWQgYW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBhcmUgbm8gaXRlbXMpLlxuICAgKi9cbiAgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0gb3IgbnVsbCBpZiB0aGUgaWQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBpdGVtLlxuICAgKi9cbiAgZ2V0KGlkOiBJZCk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKipcbiAgICogR2V0IG9uZSBpdGVtLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIGl0ZW0uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBvciBudWxsIGlmIHRoZSBpZCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGl0ZW0uXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG9uZSBpdGVtLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIGl0ZW0uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBpZiBmb3VuZCBvciBudWxsIG90aGVyd2lzZS4gSWYgcmVxdWVzdGVkIGFuIG9iamVjdCBtYXAgd2l0aCAwIHRvIDEgaXRlbXMuXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBtdWx0aXBsZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGlkcyAtIEFuIGFycmF5IG9mIHJlcXVlc3RlZCBpZHMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZvdW5kIGl0ZW1zIChpZHMgdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSBhcmUgb21pdHRlZCkuXG4gICAqL1xuICBnZXQoaWRzOiBJZFtdKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZvdW5kIGl0ZW1zIChpZHMgdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSBhcmUgb21pdHRlZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZvdW5kIGl0ZW1zIChpZHMgdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbSBhcmUgb21pdHRlZCkuXG4gICAqIElmIHJlcXVlc3RlZCBhbiBvYmplY3QgbWFwIG9mIGl0ZW1zIChtYXkgYmUgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIGl0ZW0gd2FzIGZvdW5kKS5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGlkcyAtIElkIG9yIGlkcyB0byBiZSByZXR1cm5lZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHNwZWNpZnkgaXRlcmF0aW9uIGRldGFpbHMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtcyAoZm9ybWF0IGlzIGRldGVybWluZWQgYnkgaWRzIChzaW5nbGUgb3IgYXJyYXkpIGFuZCB0aGUgb3B0aW9ucy5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkIHwgSWRbXSxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcblxuICAvKipcbiAgICogR2V0IHRoZSBEYXRhU2V0IHRvIHdoaWNoIHRoZSBpbnN0YW5jZSBpbXBsZW1lbnRpbmcgdGhpcyBpbnRlcmZhY2UgaXMgY29ubmVjdGVkLlxuICAgKiBJbiBjYXNlIHRoZXJlIGlzIGEgY2hhaW4gb2YgbXVsdGlwbGUgRGF0YVZpZXdzLCB0aGUgcm9vdCBEYXRhU2V0IG9mIHRoaXMgY2hhaW4gaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBkYXRhIHNldCB0aGF0IGFjdHVhbGx5IGNvbnRhaW5zIHRoZSBkYXRhLlxuICAgKi9cbiAgZ2V0RGF0YVNldCgpOiBEYXRhU2V0PEl0ZW0sIElkUHJvcD47XG5cbiAgLyoqXG4gICAqIEdldCBpZHMgb2YgaXRlbXMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIE5vIGd1YXJhbnRlZSBpcyBnaXZlbiBhYm91dCB0aGUgb3JkZXIgb2YgcmV0dXJuZWQgaWRzIHVubGVzcyBhbiBvcmRlcmluZyBmdW5jdGlvbiBpcyBzdXBwbGllZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHJlcXVlc3RlZCBpZHMuXG4gICAqL1xuICBnZXRJZHMob3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+KTogSWRbXTtcblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIE5vIGd1YXJhbnRlZSBpcyBnaXZlbiBhYm91dCB0aGUgb3JkZXIgb2YgaXRlcmF0aW9uIHVubGVzcyBhbiBvcmRlcmluZyBmdW5jdGlvbiBpcyBzdXBwbGllZC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gRXhlY3V0ZWQgaW4gc2ltaWxhciBmYXNoaW9uIHRvIEFycmF5LmZvckVhY2ggY2FsbGJhY2ssIGJ1dCBpbnN0ZWFkIG9mIGl0ZW0sIGluZGV4LCBhcnJheSByZWNlaXZlcyBpdGVtLCBpZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHNwZWNpZnkgaXRlcmF0aW9uIGRldGFpbHMuXG4gICAqL1xuICBmb3JFYWNoKFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiB2b2lkLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnM8SXRlbT5cbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogTWFwIGVhY2ggaXRlbSBpbnRvIGRpZmZlcmVudCBpdGVtIGFuZCByZXR1cm4gdGhlbSBhcyBhbiBhcnJheS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiBpdGVyYXRpb24gZXZlbiBpZiBvcmRlcmluZyBmdW5jdGlvbiBpcyBzdXBwbGllZCAodGhlIGl0ZW1zIGFyZSBzb3J0ZWQgYWZ0ZXIgdGhlIG1hcHBpbmcpLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBcnJheS5tYXAtbGlrZSBjYWxsYmFjaywgYnV0IG9ubHkgd2l0aCB0aGUgZmlyc3QgdHdvIHBhcmFtcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHNwZWNpZnkgaXRlcmF0aW9uIGRldGFpbHMuXG4gICAqIEByZXR1cm5zIFRoZSBtYXBwZWQgaXRlbXMuXG4gICAqL1xuICBtYXA8VD4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IFQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VNYXBPcHRpb25zPEl0ZW0sIFQ+XG4gICk6IFRbXTtcblxuICAvKipcbiAgICogU3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gSWRzIG9mIHRoZSBpdGVtcyB0byBiZSBpbmNsdWRlZCBpbiB0aGlzIHN0cmVhbSAobWlzc2luZyBhcmUgaWdub3JlZCksIGFsbCBpZiBvbWl0dGVkLlxuICAgKiBAcmV0dXJucyBUaGUgZGF0YSBzdHJlYW0gZm9yIHRoaXMgZGF0YSBzZXQuXG4gICAqL1xuICBzdHJlYW0oaWRzPzogSXRlcmFibGU8SWQ+KTogRGF0YVN0cmVhbTxJdGVtPjtcbn1cbiIsICIvKiogUXVldWUgY29uZmlndXJhdGlvbiBvYmplY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlT3B0aW9ucyB7XG4gIC8qKiBUaGUgcXVldWUgd2lsbCBiZSBmbHVzaGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgYW4gaW5hY3Rpdml0eSBvZiB0aGlzIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4gQnkgZGVmYXVsdCB0aGVyZSBpcyBubyBhdXRvbWF0aWMgZmx1c2hpbmcgKGBudWxsYCkuICovXG4gIGRlbGF5PzogbnVsbCB8IG51bWJlcjtcbiAgLyoqIFdoZW4gdGhlIHF1ZXVlIGV4Y2VlZHMgdGhlIGdpdmVuIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMsIHRoZSBxdWV1ZSBpcyBmbHVzaGVkIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQgdmFsdWUgaXMgYEluZmluaXR5YC4gKi9cbiAgbWF4PzogbnVtYmVyO1xufVxuLyoqXG4gKiBRdWV1ZSBleHRlbmRpbmcgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBtZXRob2QgbmFtZXMgdG8gYmUgcmVwbGFjZWQgYnkgcXVldWVkIHZlcnNpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlRXh0ZW5kT3B0aW9uczxUPiB7XG4gIC8qKiBBIGxpc3Qgd2l0aCBtZXRob2QgbmFtZXMgb2YgdGhlIG1ldGhvZHMgb24gdGhlIG9iamVjdCB0byBiZSByZXBsYWNlZCB3aXRoIHF1ZXVlZCBvbmVzLiAqL1xuICByZXBsYWNlOiBUW107XG4gIC8qKiBXaGVuIHByb3ZpZGVkLCB0aGUgcXVldWUgd2lsbCBiZSBmbHVzaGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgYW4gaW5hY3Rpdml0eSBvZiB0aGlzIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdCB2YWx1ZSBpcyBudWxsLiAqL1xuICBkZWxheT86IG51bWJlcjtcbiAgLyoqIFdoZW4gdGhlIHF1ZXVlIGV4Y2VlZHMgdGhlIGdpdmVuIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMsIHRoZSBxdWV1ZSBpcyBmbHVzaGVkIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQgdmFsdWUgb2YgbWF4IGlzIEluZmluaXR5LiAqL1xuICBtYXg/OiBudW1iZXI7XG59XG4vKipcbiAqIFF1ZXVlIGNhbGwgZW50cnkuXG4gKiAtIEEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQuXG4gKiAtIEFuIG9iamVjdCB3aXRoIGZ1bmN0aW9uLCBhcmdzLCBjb250ZXh0IChsaWtlIGZ1bmN0aW9uLmJpbmQoY29udGV4dCwgLi4uYXJncykpLlxuICovXG50eXBlIFF1ZXVlQ2FsbEVudHJ5ID1cbiAgfCBGdW5jdGlvblxuICB8IHtcbiAgICAgIGZuOiBGdW5jdGlvbjtcbiAgICAgIGFyZ3M6IHVua25vd25bXTtcbiAgICB9XG4gIHwge1xuICAgICAgZm46IEZ1bmN0aW9uO1xuICAgICAgYXJnczogdW5rbm93bltdO1xuICAgICAgY29udGV4dDogdW5rbm93bjtcbiAgICB9O1xuXG5pbnRlcmZhY2UgUXVldWVFeHRlbmRlZDxPPiB7XG4gIG9iamVjdDogTztcbiAgbWV0aG9kczoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBvcmlnaW5hbDogdW5rbm93bjtcbiAgfVtdO1xufVxuXG4vKipcbiAqIEEgcXVldWUuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgbWV0aG9kIG5hbWVzIHRvIGJlIHJlcGxhY2VkIGJ5IHF1ZXVlZCB2ZXJzaW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXVlPFQgPSBuZXZlcj4ge1xuICAvKiogRGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBJZiBkZWZpbmVkIHRoZSBxdWV1ZSB3aWxsIGJlIHBlcmlvZGljYWxseSBmbHVzaGVkLiAqL1xuICBwdWJsaWMgZGVsYXk6IG51bGwgfCBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBxdWV1ZSBiZWZvcmUgaXQgd2lsbCBiZSBmbHVzaGVkLiAqL1xuICBwdWJsaWMgbWF4OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcXVldWU6IHtcbiAgICBmbjogRnVuY3Rpb247XG4gICAgYXJncz86IHVua25vd25bXTtcbiAgICBjb250ZXh0PzogdW5rbm93bjtcbiAgfVtdID0gW107XG5cbiAgcHJpdmF0ZSBfdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZXh0ZW5kZWQ6IG51bGwgfCBRdWV1ZUV4dGVuZGVkPFQ+ID0gbnVsbDtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IFF1ZXVlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFF1ZXVlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9ucz86IFF1ZXVlT3B0aW9ucykge1xuICAgIC8vIG9wdGlvbnNcbiAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICB0aGlzLm1heCA9IEluZmluaXR5O1xuXG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcXVldWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUXVldWUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM/OiBRdWV1ZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5kZWxheSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5kZWxheSA9IG9wdGlvbnMuZGVsYXk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5tYXggPSBvcHRpb25zLm1heDtcbiAgICB9XG5cbiAgICB0aGlzLl9mbHVzaElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogRXh0ZW5kIGFuIG9iamVjdCB3aXRoIHF1ZXVpbmcgZnVuY3Rpb25hbGl0eS5cbiAgICogVGhlIG9iamVjdCB3aWxsIGJlIGV4dGVuZGVkIHdpdGggYSBmdW5jdGlvbiBmbHVzaCwgYW5kIHRoZSBtZXRob2RzIHByb3ZpZGVkIGluIG9wdGlvbnMucmVwbGFjZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggcXVldWVkIG9uZXMuXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgcXVldWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGV4dGVuZDxPIGV4dGVuZHMgeyBmbHVzaD86ICgpID0+IHZvaWQgfSwgSyBleHRlbmRzIHN0cmluZz4oXG4gICAgb2JqZWN0OiBPLFxuICAgIG9wdGlvbnM6IFF1ZXVlRXh0ZW5kT3B0aW9uczxLPlxuICApOiBRdWV1ZTxPPiB7XG4gICAgY29uc3QgcXVldWUgPSBuZXcgUXVldWU8Tz4ob3B0aW9ucyk7XG5cbiAgICBpZiAob2JqZWN0LmZsdXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhcmdldCBvYmplY3QgYWxyZWFkeSBoYXMgYSBwcm9wZXJ0eSBmbHVzaFwiKTtcbiAgICB9XG4gICAgb2JqZWN0LmZsdXNoID0gKCk6IHZvaWQgPT4ge1xuICAgICAgcXVldWUuZmx1c2goKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWV0aG9kczogUXVldWVFeHRlbmRlZDxPPltcIm1ldGhvZHNcIl0gPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiZmx1c2hcIixcbiAgICAgICAgb3JpZ2luYWw6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmVwbGFjZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLnJlcGxhY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IG9wdGlvbnMucmVwbGFjZVtpXTtcbiAgICAgICAgbWV0aG9kcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIC8vIEBUT0RPOiBiZXR0ZXIgc29sdXRpb24/XG4gICAgICAgICAgb3JpZ2luYWw6IChvYmplY3QgYXMgdW5rbm93biBhcyBSZWNvcmQ8SywgKCkgPT4gdm9pZD4pW25hbWVdLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgcXVldWUucmVwbGFjZShvYmplY3QgYXMgdW5rbm93biBhcyBSZWNvcmQ8SywgKCkgPT4gdm9pZD4sIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHF1ZXVlLl9leHRlbmRlZCA9IHtcbiAgICAgIG9iamVjdDogb2JqZWN0LFxuICAgICAgbWV0aG9kczogbWV0aG9kcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHF1ZXVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgdGhlIHF1ZXVlLiBUaGUgcXVldWUgd2lsbCBmaXJzdCBmbHVzaCBhbGwgcXVldWVkIGFjdGlvbnMsIGFuZCBpbiBjYXNlIGl0IGhhcyBleHRlbmRlZCBhbiBvYmplY3QsIHdpbGwgcmVzdG9yZSB0aGUgb3JpZ2luYWwgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5mbHVzaCgpO1xuXG4gICAgaWYgKHRoaXMuX2V4dGVuZGVkKSB7XG4gICAgICBjb25zdCBvYmplY3QgPSB0aGlzLl9leHRlbmRlZC5vYmplY3Q7XG4gICAgICBjb25zdCBtZXRob2RzID0gdGhpcy5fZXh0ZW5kZWQubWV0aG9kcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBtZXRob2QgPSBtZXRob2RzW2ldO1xuICAgICAgICBpZiAobWV0aG9kLm9yaWdpbmFsKSB7XG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICAob2JqZWN0IGFzIGFueSlbbWV0aG9kLm5hbWVdID0gbWV0aG9kLm9yaWdpbmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEBUT0RPOiBiZXR0ZXIgc29sdXRpb24/XG4gICAgICAgICAgZGVsZXRlIChvYmplY3QgYXMgYW55KVttZXRob2QubmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX2V4dGVuZGVkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhIG1ldGhvZCBvbiBhbiBvYmplY3Qgd2l0aCBhIHF1ZXVlZCB2ZXJzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IGhhdmluZyB0aGUgbWV0aG9kLlxuICAgKiBAcGFyYW0gbWV0aG9kIC0gVGhlIG1ldGhvZCBuYW1lLlxuICAgKi9cbiAgcHVibGljIHJlcGxhY2U8TSBleHRlbmRzIHN0cmluZz4oXG4gICAgb2JqZWN0OiBSZWNvcmQ8TSwgKCkgPT4gdm9pZD4sXG4gICAgbWV0aG9kOiBNXG4gICk6IHZvaWQge1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcyAtLSBGdW5jdGlvbiB0aGlzIGlzIG5lY2Vzc2FyeSBpbiB0aGUgZnVuY3Rpb24gYmVsbG93LCBzbyBjbGFzcyB0aGlzIGhhcyB0byBiZSBzYXZlZCBpbnRvIGEgdmFyaWFibGUgaGVyZS4gKi9cbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kXTtcbiAgICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2QgXCIgKyBtZXRob2QgKyBcIiB1bmRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgb2JqZWN0W21ldGhvZF0gPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAvLyBhZGQgdGhpcyBjYWxsIHRvIHRoZSBxdWV1ZVxuICAgICAgbWUucXVldWUoe1xuICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICBmbjogb3JpZ2luYWwsXG4gICAgICAgIGNvbnRleHQ6IHRoaXMsXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFF1ZXVlIGEgY2FsbC5cbiAgICpcbiAgICogQHBhcmFtIGVudHJ5IC0gVGhlIGZ1bmN0aW9uIG9yIGVudHJ5IHRvIGJlIHF1ZXVlZC5cbiAgICovXG4gIHB1YmxpYyBxdWV1ZShlbnRyeTogUXVldWVDYWxsRW50cnkpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goeyBmbjogZW50cnkgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goZW50cnkpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZsdXNoSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBxdWV1ZSBuZWVkcyB0byBiZSBmbHVzaGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmx1c2hJZk5lZWRlZCgpOiB2b2lkIHtcbiAgICAvLyBmbHVzaCB3aGVuIHRoZSBtYXhpbXVtIGlzIGV4Y2VlZGVkLlxuICAgIGlmICh0aGlzLl9xdWV1ZS5sZW5ndGggPiB0aGlzLm1heCkge1xuICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICAgIC8vIGZsdXNoIGFmdGVyIGEgcGVyaW9kIG9mIGluYWN0aXZpdHkgd2hlbiBhIGRlbGF5IGlzIGNvbmZpZ3VyZWRcbiAgICBpZiAodGhpcy5fdGltZW91dCAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiB0eXBlb2YgdGhpcy5kZWxheSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9LCB0aGlzLmRlbGF5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggYWxsIHF1ZXVlZCBjYWxsc1xuICAgKi9cbiAgcHVibGljIGZsdXNoKCk6IHZvaWQge1xuICAgIHRoaXMuX3F1ZXVlLnNwbGljZSgwKS5mb3JFYWNoKChlbnRyeSk6IHZvaWQgPT4ge1xuICAgICAgZW50cnkuZm4uYXBwbHkoZW50cnkuY29udGV4dCB8fCBlbnRyeS5mbiwgZW50cnkuYXJncyB8fCBbXSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBEYXRhSW50ZXJmYWNlLFxuICBFdmVudENhbGxiYWNrc1dpdGhBbnksXG4gIEV2ZW50TmFtZSxcbiAgRXZlbnROYW1lV2l0aEFueSxcbiAgRXZlbnRQYXlsb2FkcyxcbiAgSWQsXG4gIFBhcnRJdGVtLFxufSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG50eXBlIEV2ZW50U3Vic2NyaWJlcnM8SXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sIElkUHJvcCBleHRlbmRzIHN0cmluZz4gPSB7XG4gIFtOYW1lIGluIGtleW9mIEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+XTogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xufTtcblxuLyoqXG4gKiB7QGxpbmsgRGF0YVNldH0gY29kZSB0aGF0IGNhbiBiZSByZXVzZWQgaW4ge0BsaW5rIERhdGFWaWV3fSBvciBvdGhlciBzaW1pbGFyIGltcGxlbWVudGF0aW9ucyBvZiB7QGxpbmsgRGF0YUludGVyZmFjZX0uXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhU2V0UGFydDxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBpbXBsZW1lbnRzIFBpY2s8RGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+LCBcIm9uXCIgfCBcIm9mZlwiPlxue1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpYmVyczoge1xuICAgIFtOYW1lIGluIEV2ZW50TmFtZVdpdGhBbnldOiBFdmVudFN1YnNjcmliZXJzPEl0ZW0sIElkUHJvcD5bTmFtZV1bXTtcbiAgfSA9IHtcbiAgICBcIipcIjogW10sXG4gICAgYWRkOiBbXSxcbiAgICByZW1vdmU6IFtdLFxuICAgIHVwZGF0ZTogW10sXG4gIH07XG5cbiAgcHJvdGVjdGVkIF90cmlnZ2VyKFxuICAgIGV2ZW50OiBcImFkZFwiLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltcImFkZFwiXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICBwcm90ZWN0ZWQgX3RyaWdnZXIoXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG4gIHByb3RlY3RlZCBfdHJpZ2dlcihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIFRyaWdnZXIgYW4gZXZlbnRcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBFdmVudCBwYXlsb2FkLlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBJZCBvZiB0aGUgc2VuZGVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIF90cmlnZ2VyPE5hbWUgZXh0ZW5kcyBFdmVudE5hbWU+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltOYW1lXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkIHtcbiAgICBpZiAoKGV2ZW50IGFzIHN0cmluZykgPT09IFwiKlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdHJpZ2dlciBldmVudCAqXCIpO1xuICAgIH1cblxuICAgIFsuLi50aGlzLl9zdWJzY3JpYmVyc1tldmVudF0sIC4uLnRoaXMuX3N1YnNjcmliZXJzW1wiKlwiXV0uZm9yRWFjaChcbiAgICAgIChzdWJzY3JpYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIHN1YnNjcmliZXIoZXZlbnQsIHBheWxvYWQsIHNlbmRlcklkICE9IG51bGwgPyBzZW5kZXJJZCA6IG51bGwpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9uKFxuICAgIGV2ZW50OiBcIipcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwiYWRkXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiYWRkXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gYW4gZXZlbnQsIGFkZCBhbiBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHJlbWFya3MgTm9uLWZ1bmN0aW9uIGNhbGxiYWNrcyBhcmUgaWdub3JlZC5cbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgbWV0aG9kLlxuICAgKi9cbiAgcHVibGljIG9uPE5hbWUgZXh0ZW5kcyBFdmVudE5hbWVXaXRoQW55PihcbiAgICBldmVudDogTmFtZSxcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bTmFtZV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0ucHVzaChjYWxsYmFjayk7XG4gICAgfVxuICAgIC8vIEBUT0RPOiBNYXliZSB0aHJvdyBmb3IgaW52YWxpZCBjYWxsYmFja3M/XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCIqXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXVxuICApOiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCJhZGRcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvZmYoXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSBhbiBldmVudCwgcmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBJZiB0aGUgc2FtZSBjYWxsYmFjayB3YXMgc3Vic2NyaWJlZCBtb3JlIHRoYW4gb25jZSAqKmFsbCoqIG9jY3VyZW5jZXMgd2lsbCBiZSByZW1vdmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgb2ZmPE5hbWUgZXh0ZW5kcyBFdmVudE5hbWVXaXRoQW55PihcbiAgICBldmVudDogTmFtZSxcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bTmFtZV1cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaWJlcnNbZXZlbnRdID0gdGhpcy5fc3Vic2NyaWJlcnNbZXZlbnRdLmZpbHRlcihcbiAgICAgIChzdWJzY3JpYmVyKTogYm9vbGVhbiA9PiBzdWJzY3JpYmVyICE9PSBjYWxsYmFja1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9uIGluc3RlYWQgKFBTOiBEYXRhVmlldy5zdWJzY3JpYmUgPT09IERhdGFWaWV3Lm9uKS5cbiAgICovXG4gIHB1YmxpYyBzdWJzY3JpYmU6IERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5bXCJvblwiXSA9IERhdGFTZXRQYXJ0LnByb3RvdHlwZS5vbjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvZmYgaW5zdGVhZCAoUFM6IERhdGFWaWV3LnVuc3Vic2NyaWJlID09PSBEYXRhVmlldy5vZmYpLlxuICAgKi9cbiAgcHVibGljIHVuc3Vic2NyaWJlOiBEYXRhU2V0UGFydDxJdGVtLCBJZFByb3A+W1wib2ZmXCJdID1cbiAgICBEYXRhU2V0UGFydC5wcm90b3R5cGUub2ZmO1xuXG4gIC8qIGRldmVsYmxvY2s6c3RhcnQgKi9cbiAgcHVibGljIGdldCB0ZXN0TGVha1N1YnNjcmliZXJzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZXJzO1xuICB9XG4gIC8qIGRldmVsYmxvY2s6ZW5kICovXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYFNldGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LW9iamVjdHNcbmNvbGxlY3Rpb24oJ1NldCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlNldDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yO1xuIiwgImltcG9ydCB7IElkIH0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcblxuLyoqXG4gKiBEYXRhIHN0cmVhbVxuICpcbiAqIEByZW1hcmtzXG4gKiB7QGxpbmsgRGF0YVN0cmVhbX0gb2ZmZXJzIGFuIGFsd2F5cyB1cCB0byBkYXRlIHN0cmVhbSBvZiBpdGVtcyBmcm9tIGEge0BsaW5rIERhdGFTZXR9IG9yIHtAbGluayBEYXRhVmlld30uXG4gKiBUaGF0IG1lYW5zIHRoYXQgdGhlIHN0cmVhbSBpcyBldmFsdWF0ZWQgYXQgdGhlIHRpbWUgb2YgaXRlcmF0aW9uLCBjb252ZXJzaW9uIHRvIGFub3RoZXIgZGF0YSB0eXBlIG9yIHdoZW4ge0BsaW5rIGNhY2hlfSBpcyBjYWxsZWQsIG5vdCB3aGVuIHRoZSB7QGxpbmsgRGF0YVN0cmVhbX0gd2FzIGNyZWF0ZWQuXG4gKiBNdWx0aXBsZSBpbnZvY2F0aW9ucyBvZiBmb3IgZXhhbXBsZSB7QGxpbmsgdG9JdGVtQXJyYXl9IG1heSB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cyAoaWYgdGhlIGRhdGEgc291cmNlIGxpa2UgZm9yIGV4YW1wbGUge0BsaW5rIERhdGFTZXR9IGdldHMgbW9kaWZpZWQpLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gVGhlIGl0ZW0gdHlwZSB0aGlzIHN0cmVhbSBpcyBnb2luZyB0byB3b3JrIHdpdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU3RyZWFtPEl0ZW0+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+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHYgIT09IG51bGwgJiZcbiAgICBpZFByb3AgPT09IHYuaWRQcm9wICYmXG4gICAgdHlwZW9mIHYuZm9yRWFjaCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXREYXRhU2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXRJZHMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiB2Lm1hcCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYub2ZmID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuc3RyZWFtID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICBpc0RhdGFTZXRMaWtlKGlkUHJvcCwgdi5nZXREYXRhU2V0KCkpXG4gICk7XG59XG4iLCAiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbk9wdGlvbiB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvY29tYm9fYm94L3R5cGVzXCI7XG5pbXBvcnQge1xuICBFdWlDb21ib0JveCxcbiAgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0LFxuICBldWlQYWxldHRlQ29sb3JCbGluZCxcbiAgRXVpSGlnaGxpZ2h0LFxuICBFdWlIZWFsdGgsXG4gIEV1aVByb3ZpZGVyLFxuICBFdWlJY29uXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4uL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvblwiO1xuXG4vKipcbiAqIEEgUmVhY3QgY29tcG9uZW50IHRvIHByb3ZpZGUgQXV0b3N1Z2dlc3Rpb24gYmFzZWQgb24gU2VtTG9va1AuXG4gKi9cbmZ1bmN0aW9uIEF1dG9jb21wbGV0ZVdpZGdldChwcm9wczogQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgaGFzU2hvcnRTZWxlY3RlZExhYmVsLFxuICAgIGFsbG93Q3VzdG9tVGVybXMsXG4gICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LFxuICAgIHByZXNlbGVjdGVkLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHNpbmdsZVNlbGVjdGlvbixcbiAgICBzaW5nbGVTdWdnZXN0aW9uUm93LFxuICAgIHN1YlRyZWVJcmlzLFxuICAgIHRzNG5mZGlHYXRld2F5ID0gZmFsc2UsXG4gICAgc2hvd0FwaVNvdXJjZSA9IHRydWUsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHZpc0NvbG9ycyA9IGV1aVBhbGV0dGVDb2xvckJsaW5kKCk7XG4gIGNvbnN0IHZpc0NvbG9yc0JlaGluZFRleHQgPSBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQoKTtcbiAgXG4gIFxuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBzZWFyY2ggdmFsdWVcbiAgICovXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKTtcblxuICAvKipcbiAgICogVGhlIHNldCBvZiBhdmFpbGFibGUgb3B0aW9ucy5zXG4gICAqL1xuICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+Pj4oW10pO1xuXG4gIC8qKlxuICAgKiBTdG9yZSBjdXJyZW50IHNldCBvZiBzZWxlY3QgT3B0aW9ucy4gQSBzdWJzZXQgb2Ygb3B0aW9ucy5cbiAgICovXG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc10gPSB1c2VTdGF0ZTxBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+Pj4oW10pO1xuXG4gIC8qKiBcbiAgICogdXBkYXRlIHRoZSBpbnB1dCB1cmwgcGFyYW1ldGVyIGluIGNhc2UgYSBsaXN0IG9mIGlyaXMgZm9yIHN1YnRyZWUgZmlsdGVyaW5nIGlzIGdpdmVuLlxuICAgKiAqL1xuICBjb25zdCB1cGRhdGVkUGFyYW1ldGVyID0gc3ViVHJlZUlyaXMgPyAocGFyYW1ldGVyICsgYCZjaGlsZHJlbk9mPSR7c3ViVHJlZUlyaXN9YCkgOiBwYXJhbWV0ZXI7XG4gIFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCByZW5kZXJPcHRpb24gPSAob3B0aW9uLCBzZWFyY2hWYWx1ZSkgPT4ge1xuICAgIGNvbnN0IHsgbGFiZWwsIHZhbHVlIH0gPSBvcHRpb247XG4gICAgY29uc3QgZG90Q29sb3JJbmRleCA9IHZpc0NvbG9yc0JlaGluZFRleHQuaW5kZXhPZih2YWx1ZS50eXBlID09PSBcImNsYXNzXCIgPyB2aXNDb2xvcnNCZWhpbmRUZXh0WzVdIDpcbiAgICAgIHZhbHVlLnR5cGUgPT09IFwiaW5kaXZpZHVhbFwiID8gdmlzQ29sb3JzQmVoaW5kVGV4dFszXSA6XG4gICAgICAgIHZhbHVlLnR5cGUgPT09IFwicHJvcGVydHlcIiA/IHZpc0NvbG9yc0JlaGluZFRleHRbMV0gOiBcIlwiKTtcbiAgICBjb25zdCBkb3RDb2xvciA9IHZpc0NvbG9yc1tkb3RDb2xvckluZGV4XTtcblxuICAgIGlmIChhbGxvd0N1c3RvbVRlcm1zICYmIHZhbHVlLmlyaSA9PSBcIlwiKSB7Ly8gaWYgd2UgaGF2ZSBhIGN1c3RvbSB0ZXJtLCBqdXN0IHNob3cgdGhlIGxhYmVsXG4gICAgICByZXR1cm4gbGFiZWw7XG4gICAgfVxuXG4gICAgbGV0IHByZWZpeCA9ICh2YWx1ZS50eXBlID09PSBcIm9udG9sb2d5XCIpXG4gICAgICA/IFwiUHJlZml4OiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWVcbiAgICAgIDogXCJQcmVmaXggPiBTaG9ydCBmb3JtOiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWUgKyBcIiA+IFwiICsgdmFsdWUuc2hvcnRfZm9ybTtcblxuICAgIGxldCBob3ZlclRleHQgPSBgVHlwZTogJHt2YWx1ZS50eXBlfVxcblxcbkxhYmVsOiAke3ZhbHVlLmxhYmVsfVxcblxcbiR7cHJlZml4fWA7XG4gICAgaWYgKHZhbHVlLmRlc2NyaXB0aW9uICE9IHVuZGVmaW5lZCkge1xuICAgICAgaG92ZXJUZXh0ICs9IGBcXG5cXG5EZXNjcmlwdGlvbjogJHt2YWx1ZS5kZXNjcmlwdGlvbn1gO1xuICAgIH1cbiAgICBpZiAoc2hvd0FwaVNvdXJjZSAmJiB2YWx1ZS5zb3VyY2VfdXJsICYmIHZhbHVlLnNvdXJjZV91cmwgIT09IFwiXCIpe1xuICAgICAgaG92ZXJUZXh0ICs9IFwiXFxuXFxuU291cmNlOiBcIiArIHZhbHVlLnNvdXJjZTtcbiAgICAgIGhvdmVyVGV4dCArPSBcIlxcblxcblNvdXJjZSBVUkw6IFwiICsgdmFsdWUuc291cmNlX3VybDtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJPbnRvbG9neSA9ICgpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlIZWFsdGhcbiAgICAgICAgICBjb2xvcj17ZG90Q29sb3J9PlxuICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxFdWlIaWdobGlnaHQgc2VhcmNoPXtzZWFyY2hWYWx1ZX0+e3ZhbHVlLmxhYmVsfTwvRXVpSGlnaGxpZ2h0PlxuICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAge3ZhbHVlLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvRXVpSGVhbHRoPlxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyRW50aXR5V2l0aERlc2NyaXB0aW9uID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW4gdGl0bGU9e2hvdmVyVGV4dH0gc3R5bGU9e3sgaGVpZ2h0OiAyMDAgKyBcInB4XCIgfX0+XG4gICAgICAgICAgICA8RXVpSGVhbHRoXG4gICAgICAgICAgICAgIGNvbG9yPXtkb3RDb2xvcn0+XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxFdWlIaWdobGlnaHQgc2VhcmNoPXtzZWFyY2hWYWx1ZX0+e3ZhbHVlLmxhYmVsfTwvRXVpSGlnaGxpZ2h0PlxuICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XG4gICAgICAgICAgICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neU5hbWU9e3ZhbHVlLm9udG9sb2d5X25hbWV9XG4gICAgICAgICAgICAgICAgICAgIHNob3J0Rm9ybT17dmFsdWUuc2hvcnRfZm9ybX1cbiAgICAgICAgICAgICAgICAgICAgY29sb3JGaXJzdD17XCJwcmltYXJ5XCJ9XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yU2Vjb25kPXtcInN1Y2Nlc3NcIn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8RXVpSWNvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPXtcImlJbkNpcmNsZVwifVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiA1IH19XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXtob3ZlclRleHR9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgeyFzaW5nbGVTdWdnZXN0aW9uUm93ICYmIHZhbHVlLmRlc2NyaXB0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICB7dmFsdWUuZGVzY3JpcHRpb24uc3Vic3RyaW5nKDAsIDQwKSArIFwiLi4uXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9FdWlIZWFsdGg+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfTtcblxuICAgIHJldHVybiB2YWx1ZS50eXBlID09PSBcIm9udG9sb2d5XCIgPyByZW5kZXJPbnRvbG9neSgpIDogcmVuZGVyRW50aXR5V2l0aERlc2NyaXB0aW9uKCk7XG4gIH07XG5cbiAgICAvKipcbiAgICAgKiBvbiBtb3VudDogZmV0Y2hlcyB0ZXJtIGZvciBwcmVzZWxlY3RlZFxuICAgICAqIHNldHMgaXRzIGxhYmVsIG9yIHNldHMgYSBnaXZlbiBsYWJlbCBpZiBubyBpcmkgaXMgcHJvdmlkZWQvdGhlIGdpdmVuIGlyaSBjYW5ub3QgYmUgcmVzb2x2ZWRcbiAgICAgKiBvbmx5IGlmIGFsbG93Q3VzdG9tVGVybXMgaXMgdHJ1ZVxuICAgICAqL1xuICAgIGNvbnN0IHtcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdPbk1vdW50XG4gICAgfSA9IHVzZVF1ZXJ5KFxuICAgICAgICBbXG4gICAgICAgICAgICBcIm9uTW91bnRcIixcbiAgICAgICAgICAgIHByZXNlbGVjdGVkXG4gICAgICAgIF0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGxldCBwcmVzZWxlY3RlZFZhbHVlczogRXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55PltdID0gW107XG5cbiAgICAgIGxldCB1bmlxdWVWYWx1ZXMgPSBbLi4ubmV3IFNldChwcmVzZWxlY3RlZCldXG4gICAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgICAgIHJldHVybiAoYWxsb3dDdXN0b21UZXJtcyAmJiBvcHRpb24ubGFiZWwpIHx8IG9wdGlvbi5pcmk7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAodW5pcXVlVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbikgdW5pcXVlVmFsdWVzID0gW3VuaXF1ZVZhbHVlc1swXV07XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB1bmlxdWVWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbiAmJiBvcHRpb24uaXJpICYmIG9wdGlvbi5pcmkuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBvbHNBcGkuZ2V0U2VsZWN0RGF0YShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cXVlcnk6IG9wdGlvbi5pcml9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFBhcmFtZXRlcixcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzNG5mZGlHYXRld2F5XG4gICAgICAgICAgICAgICAgICAgICAgICApLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb3BlcnRpZXMubWFwKChzZWxlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5pcmkgPT09IHNlbGVjdGlvbi5nZXRJcmkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbGVjdGVkVmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsYWJlbCB0byBkaXNwbGF5IHdpdGhpbiB0aGUgY29tYm9ib3ggZWl0aGVyIHJhdyB2YWx1ZSBvciBnZW5lcmF0ZWQgb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICNyZW5kZXJPcHRpb24oKSBpcyB1c2VkIHRvIGRpc3BsYXkgZHVyaW5nIHNlbGVjdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGhhc1Nob3J0U2VsZWN0ZWRMYWJlbCA/IHNlbGVjdGlvbi5nZXRMYWJlbCgpIDogZ2VuZXJhdGVEaXNwbGF5TGFiZWwoc2VsZWN0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2V5IHRvIGRpc3Rpbmd1aXNoIHRoZSBvcHRpb25zIChlc3BlY2lhbGx5IHRob3NlIHdpdGggc2FtZSBsYWJlbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBzZWxlY3Rpb24uZ2V0SXJpKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcmk6IHNlbGVjdGlvbi5nZXRJcmkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzZWxlY3Rpb24uZ2V0TGFiZWwoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IHNlbGVjdGlvbi5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBzZWxlY3Rpb24uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZm9ybTogc2VsZWN0aW9uLmdldFNob3J0Rm9ybSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHNlbGVjdGlvbi5nZXREZXNjcmlwdGlvbigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBzZWxlY3Rpb24uZ2V0QXBpU291cmNlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3VybDogc2VsZWN0aW9uLmdldEFwaVNvdXJjZUVuZHBvaW50KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gJiYgcHJlc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID4gMSkgcHJlc2VsZWN0ZWRWYWx1ZXMgPSBbcHJlc2VsZWN0ZWRWYWx1ZXNbMF1dO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbiAmJiBvcHRpb24ubGFiZWwgJiYgYWxsb3dDdXN0b21UZXJtcykge1xuICAgICAgICAgICAgcHJlc2VsZWN0ZWRWYWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgIGxhYmVsOiBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgICAgIGtleTogb3B0aW9uLmxhYmVsLFxuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIGlyaTogXCJcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJcIixcbiAgICAgICAgICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgICAgICAgICAgc2hvcnRfZm9ybTogXCJcIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgICAgICAgICBzb3VyY2U6IFwiXCIsXG4gICAgICAgICAgICAgICAgc291cmNlX3VybDogXCJcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZXRPcHRpb25zKHByZXNlbGVjdGVkVmFsdWVzKTtcbiAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKHByZXNlbGVjdGVkVmFsdWVzKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG5cbiAgLyoqXG4gICAqIGZldGNoZXMgbmV3IG9wdGlvbnMgd2hlbiBzZWFyY2hWYWx1ZSBjaGFuZ2VzXG4gICAqL1xuICBjb25zdCB7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdUZXJtc1xuICB9ID0gdXNlUXVlcnkoXG4gICAgW1xuICAgICAgXCJvblNlYXJjaENoYW5nZVwiLFxuICAgICAgc2VhcmNoVmFsdWVcbiAgICBdLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChzZWFyY2hWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBvbHNBcGkuZ2V0U2VsZWN0RGF0YShcbiAgICAgICAgICB7IHF1ZXJ5OiBzZWFyY2hWYWx1ZSB9LFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdXBkYXRlZFBhcmFtZXRlcixcbiAgICAgICAgICB0czRuZmRpR2F0ZXdheVxuICAgICAgICApLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBzZXRPcHRpb25zKHJlc3BvbnNlLnByb3BlcnRpZXMubWFwKChzZWxlY3Rpb246IGFueSkgPT4gKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gbGFiZWwgdG8gZGlzcGxheSB3aXRoaW4gdGhlIGNvbWJvYm94IGVpdGhlciByYXcgdmFsdWUgb3IgZ2VuZXJhdGVkIG9uZVxuICAgICAgICAgICAgICAgIC8vICNyZW5kZXJPcHRpb24oKSBpcyB1c2VkIHRvIGRpc3BsYXkgZHVyaW5nIHNlbGVjdGlvbi5cbiAgICAgICAgICAgICAgICBsYWJlbDogaGFzU2hvcnRTZWxlY3RlZExhYmVsID8gc2VsZWN0aW9uLmdldExhYmVsKCkgOiBnZW5lcmF0ZURpc3BsYXlMYWJlbChzZWxlY3Rpb24pLFxuICAgICAgICAgICAgICAgIC8vIGtleSB0byBkaXN0aW5ndWlzaCB0aGUgb3B0aW9ucyAoZXNwZWNpYWxseSB0aG9zZSB3aXRoIHNhbWUgbGFiZWwpXG4gICAgICAgICAgICAgICAga2V5OiBzZWxlY3Rpb24uZ2V0SXJpKCksXG4gICAgICAgICAgICAgICAgLy8gdmFsdWVzIHRvIHBhc3MgdG8gY2xpZW50c1xuICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICBpcmk6IHNlbGVjdGlvbi5nZXRJcmkoKSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBzZWxlY3Rpb24uZ2V0TGFiZWwoKSxcbiAgICAgICAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IHNlbGVjdGlvbi5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgICAgICAgICB0eXBlOiBzZWxlY3Rpb24uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICAgICAgc2hvcnRfZm9ybTogc2VsZWN0aW9uLmdldFNob3J0Rm9ybSgpLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHNlbGVjdGlvbi5nZXREZXNjcmlwdGlvbigpLFxuICAgICAgICAgICAgICAgICAgc291cmNlOiBzZWxlY3Rpb24uZ2V0QXBpU291cmNlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgc291cmNlX3VybDogc2VsZWN0aW9uLmdldEFwaVNvdXJjZUVuZHBvaW50KClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgKTtcblxuICAvKipcbiAgICogT25jZSB0aGUgc2V0IG9mIHNlbGVjdGVkIG9wdGlvbnMgY2hhbmdlcywgcGFzcyB0aGUgZXZlbnQgYnkgaW52b2tpbmcgdGhlIHBhc3NlZCBmdW5jdGlvbi5cbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KFxuICAgICAgc2VsZWN0ZWRPcHRpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICAvLyByZXR1cm4gdGhlIHZhbHVlIG9iamVjdCB3aXRoIHRoZSByYXcgdmFsdWVzIGZyb20gT0xTIHRvIGEgY2xpZW50XG4gICAgICAgIGlmIChhbGxvd0N1c3RvbVRlcm1zICYmIHgudmFsdWUuaXJpID09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiBcIlwiLFxuICAgICAgICAgICAgbGFiZWw6IHgubGFiZWwsXG4gICAgICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgdHlwZTogXCJcIixcbiAgICAgICAgICAgIHNob3J0X2Zvcm06IHgudmFsdWUuc2hvcnRfZm9ybSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB4LnZhbHVlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgc291cmNlOiB4LnZhbHVlLnNvdXJjZVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoeC52YWx1ZS5pcmkgPT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IFwiXCIsXG4gICAgICAgICAgICBsYWJlbDogXCJcIixcbiAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IFwiXCIsXG4gICAgICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICAgICAgc2hvcnRfZm9ybTogXCJcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgICAgICAgc291cmNlOiBcIlwiXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiB4LnZhbHVlLmlyaSxcbiAgICAgICAgICAgIGxhYmVsOiB4LnZhbHVlLmxhYmVsLFxuICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogeC52YWx1ZS5vbnRvbG9neV9uYW1lLFxuICAgICAgICAgICAgdHlwZTogeC52YWx1ZS50eXBlLFxuICAgICAgICAgICAgc2hvcnRfZm9ybTogeC52YWx1ZS5zaG9ydF9mb3JtLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHgudmFsdWUuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBzb3VyY2U6IHgudmFsdWUuc291cmNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9LCBbc2VsZWN0ZWRPcHRpb25zXSk7XG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVEaXNwbGF5TGFiZWwoaXRlbTogYW55KSB7XG5cbiAgICByZXR1cm4gKFxuICAgICAgaXRlbS5nZXRMYWJlbCgpICtcbiAgICAgIFwiIChcIiArXG4gICAgICBpdGVtLmdldE9udG9sb2d5SWQoKS50b1VwcGVyQ2FzZSgpICtcbiAgICAgIFwiIFwiICtcbiAgICAgIGl0ZW0uZ2V0U2hvcnRGb3JtKCkgK1xuICAgICAgXCIpXCJcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DaGFuZ2VIYW5kbGVyKG9wdGlvbnM6IEFycmF5PGFueT4pOiB2b2lkIHtcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNyZWF0ZU9wdGlvbkhhbmRsZXIoc2VhcmNoVmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IG5ld09wdGlvbiA9IHtcbiAgICAgIGxhYmVsOiBzZWFyY2hWYWx1ZSxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGlyaTogXCJcIixcbiAgICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICAgIG9udG9sb2d5X25hbWU6IFwiXCIsXG4gICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgIHNob3J0X2Zvcm06IFwiXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgICBzb3VyY2U6IFwiXCJcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2V0T3B0aW9ucyhbLi4ub3B0aW9ucywgbmV3T3B0aW9uXSk7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zKHNpbmdsZVNlbGVjdGlvbiA/IFtuZXdPcHRpb25dIDogWy4uLnNlbGVjdGVkT3B0aW9ucywgbmV3T3B0aW9uXSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxFdWlDb21ib0JveFxuICAgICAgaXNDbGVhcmFibGVcbiAgICAgIGFyaWEtbGFiZWw9XCJzZWFyY2hCYXJcIlxuICAgICAgZnVsbFdpZHRoPXt0cnVlfVxuICAgICAgey4uLnJlc3R9IC8vIGl0ZW1zIGFib3ZlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgY2xpZW50XG4gICAgICBhc3luYz17dHJ1ZX1cbiAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nVGVybXMgfHwgaXNMb2FkaW5nT25Nb3VudH1cbiAgICAgIHNpbmdsZVNlbGVjdGlvbj17c2luZ2xlU2VsZWN0aW9uID8geyBhc1BsYWluVGV4dDogdHJ1ZSB9IDogZmFsc2V9XG4gICAgICBwbGFjZWhvbGRlcj17XG4gICAgICAgIHBsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiBcIlNlYXJjaCBmb3IgYSBDb25jZXB0XCJcbiAgICAgIH1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBzZWxlY3RlZE9wdGlvbnM9e3NlbGVjdGVkT3B0aW9uc31cbiAgICAgIG9uU2VhcmNoQ2hhbmdlPXtzZXRTZWFyY2hWYWx1ZX1cbiAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZUhhbmRsZXJ9XG4gICAgICByZW5kZXJPcHRpb249e3JlbmRlck9wdGlvbn1cbiAgICAgIG9uQ3JlYXRlT3B0aW9uPXthbGxvd0N1c3RvbVRlcm1zID8gb25DcmVhdGVPcHRpb25IYW5kbGVyIDogdW5kZWZpbmVkfVxuICAgICAgcm93SGVpZ2h0PXtzaW5nbGVTdWdnZXN0aW9uUm93ID8gMzAgOiA1MH1cbiAgICAvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBdXRvY29tcGxldGUocHJvcHM6IEF1dG9jb21wbGV0ZVdpZGdldFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRBdXRvY29tcGxldGVXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEF1dG9jb21wbGV0ZVdpZGdldChwcm9wczogQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8QXV0b2NvbXBsZXRlV2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50PXtwcm9wcy5zZWxlY3Rpb25DaGFuZ2VkRXZlbnR9XG4gICAgICAgICAgcHJlc2VsZWN0ZWQ9e3Byb3BzLnByZXNlbGVjdGVkfVxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbj17cHJvcHMuc2luZ2xlU2VsZWN0aW9uIGFzIGJvb2xlYW59XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIGhhc1Nob3J0U2VsZWN0ZWRMYWJlbD17cHJvcHMuaGFzU2hvcnRTZWxlY3RlZExhYmVsfVxuICAgICAgICAgIGFsbG93Q3VzdG9tVGVybXM9e3Byb3BzLmFsbG93Q3VzdG9tVGVybXN9XG4gICAgICAgICAgdHM0bmZkaUdhdGV3YXk9e3Byb3BzLnRzNG5mZGlHYXRld2F5fVxuICAgICAgICAgIHNpbmdsZVN1Z2dlc3Rpb25Sb3c9e3Byb3BzLnNpbmdsZVN1Z2dlc3Rpb25Sb3d9XG4gICAgICAgICAgc2hvd0FwaVNvdXJjZT17cHJvcHMuc2hvd0FwaVNvdXJjZX1cbiAgICAgICAgICBzdWJUcmVlSXJpcz17cHJvcHMuc3ViVHJlZUlyaXN9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQXV0b2NvbXBsZXRlV2lkZ2V0LCBjcmVhdGVBdXRvY29tcGxldGUgfTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn1cblxuY29uc3QgdHlwZU9mVGVzdCA9IHR5cGUgPT4gdGhpbmcgPT4gdHlwZW9mIHRoaW5nID09PSB0eXBlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiBpc0Z1bmN0aW9uKHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gdGhpbmcgPT4gdGhpbmcgPT09IHRydWUgfHwgdGhpbmcgPT09IGZhbHNlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgbGV0IGtpbmQ7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG5jb25zdCBbaXNSZWFkYWJsZVN0cmVhbSwgaXNSZXF1ZXN0LCBpc1Jlc3BvbnNlLCBpc0hlYWRlcnNdID0gWydSZWFkYWJsZVN0cmVhbScsICdSZXF1ZXN0JywgJ1Jlc3BvbnNlJywgJ0hlYWRlcnMnXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufVxuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSA9ICt2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn1cblxuY29uc3QgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonXG5cbmNvbnN0IERJR0lUID0gJzAxMjM0NTY3ODknO1xuXG5jb25zdCBBTFBIQUJFVCA9IHtcbiAgRElHSVQsXG4gIEFMUEhBLFxuICBBTFBIQV9ESUdJVDogQUxQSEEgKyBBTFBIQS50b1VwcGVyQ2FzZSgpICsgRElHSVRcbn1cblxuY29uc3QgZ2VuZXJhdGVTdHJpbmcgPSAoc2l6ZSA9IDE2LCBhbHBoYWJldCA9IEFMUEhBQkVULkFMUEhBX0RJR0lUKSA9PiB7XG4gIGxldCBzdHIgPSAnJztcbiAgY29uc3Qge2xlbmd0aH0gPSBhbHBoYWJldDtcbiAgd2hpbGUgKHNpemUtLSkge1xuICAgIHN0ciArPSBhbHBoYWJldFtNYXRoLnJhbmRvbSgpICogbGVuZ3RofDBdXG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIElmIHRoZSB0aGluZyBpcyBhIEZvcm1EYXRhIG9iamVjdCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB0aGluZyAtIFRoZSB0aGluZyB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50Rm9ybSh0aGluZykge1xuICByZXR1cm4gISEodGhpbmcgJiYgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIHRoaW5nW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiYgdGhpbmdbU3ltYm9sLml0ZXJhdG9yXSk7XG59XG5cbmNvbnN0IHRvSlNPTk9iamVjdCA9IChvYmopID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgQXJyYXkoMTApO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSwgaSkgPT4ge1xuXG4gICAgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIGlmIChzdGFjay5pbmRleE9mKHNvdXJjZSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICBzdGFja1tpXSA9IHNvdXJjZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcblxuICAgICAgICBmb3JFYWNoKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSwgaSArIDEpO1xuICAgICAgICAgICFpc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpICYmICh0YXJnZXRba2V5XSA9IHJlZHVjZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YWNrW2ldID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIHJldHVybiB2aXNpdChvYmosIDApO1xufVxuXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbi8vIG9yaWdpbmFsIGNvZGVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EaWdpdGFsQnJhaW5KUy9BeGlvc1Byb21pc2UvYmxvYi8xNmRlYWIxMzcxMGVjMDk3Nzk5MjIxMzFmM2ZhNTk1NDMyMGY4M2FiL2xpYi91dGlscy5qcyNMMTEtTDM0XG5cbmNvbnN0IF9zZXRJbW1lZGlhdGUgPSAoKHNldEltbWVkaWF0ZVN1cHBvcnRlZCwgcG9zdE1lc3NhZ2VTdXBwb3J0ZWQpID0+IHtcbiAgaWYgKHNldEltbWVkaWF0ZVN1cHBvcnRlZCkge1xuICAgIHJldHVybiBzZXRJbW1lZGlhdGU7XG4gIH1cblxuICByZXR1cm4gcG9zdE1lc3NhZ2VTdXBwb3J0ZWQgPyAoKHRva2VuLCBjYWxsYmFja3MpID0+IHtcbiAgICBfZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICh7c291cmNlLCBkYXRhfSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZSA9PT0gX2dsb2JhbCAmJiBkYXRhID09PSB0b2tlbikge1xuICAgICAgICBjYWxsYmFja3MubGVuZ3RoICYmIGNhbGxiYWNrcy5zaGlmdCgpKCk7XG4gICAgICB9XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgcmV0dXJuIChjYikgPT4ge1xuICAgICAgY2FsbGJhY2tzLnB1c2goY2IpO1xuICAgICAgX2dsb2JhbC5wb3N0TWVzc2FnZSh0b2tlbiwgXCIqXCIpO1xuICAgIH1cbiAgfSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLCBbXSkgOiAoY2IpID0+IHNldFRpbWVvdXQoY2IpO1xufSkoXG4gIHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicsXG4gIGlzRnVuY3Rpb24oX2dsb2JhbC5wb3N0TWVzc2FnZSlcbik7XG5cbmNvbnN0IGFzYXAgPSB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgIT09ICd1bmRlZmluZWQnID9cbiAgcXVldWVNaWNyb3Rhc2suYmluZChfZ2xvYmFsKSA6ICggdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MubmV4dFRpY2sgfHwgX3NldEltbWVkaWF0ZSk7XG5cbi8vICoqKioqKioqKioqKioqKioqKioqKlxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmcsXG4gIGlzTnVtYmVyLFxuICBpc0Jvb2xlYW4sXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JlYWRhYmxlU3RyZWFtLFxuICBpc1JlcXVlc3QsXG4gIGlzUmVzcG9uc2UsXG4gIGlzSGVhZGVycyxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZSxcbiAgc2V0SW1tZWRpYXRlOiBfc2V0SW1tZWRpYXRlLFxuICBhc2FwXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICBpZiAocmVzcG9uc2UpIHtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXMgPyByZXNwb25zZS5zdGF0dXMgOiBudWxsO1xuICB9XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHV0aWxzLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzXG4gICAgfTtcbiAgfVxufSk7XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zRXJyb3IucHJvdG90eXBlO1xuY29uc3QgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCcsXG4gICdFUlJfTk9UX1NVUFBPUlQnLFxuICAnRVJSX0lOVkFMSURfVVJMJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChjb2RlID0+IHtcbiAgZGVzY3JpcHRvcnNbY29kZV0gPSB7dmFsdWU6IGNvZGV9O1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF4aW9zRXJyb3IsIGRlc2NyaXB0b3JzKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUsICdpc0F4aW9zRXJyb3InLCB7dmFsdWU6IHRydWV9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbkF4aW9zRXJyb3IuZnJvbSA9IChlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpID0+IHtcbiAgY29uc3QgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcblxuICB1dGlscy50b0ZsYXRPYmplY3QoZXJyb3IsIGF4aW9zRXJyb3IsIGZ1bmN0aW9uIGZpbHRlcihvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBFcnJvci5wcm90b3R5cGU7XG4gIH0sIHByb3AgPT4ge1xuICAgIHJldHVybiBwcm9wICE9PSAnaXNBeGlvc0Vycm9yJztcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcblxuICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuXG4gIHJldHVybiBheGlvc0Vycm9yO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NFcnJvcjtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG4vLyB0ZW1wb3JhcnkgaG90Zml4IHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMgdW50aWwgQXhpb3NVUkxTZWFyY2hQYXJhbXMgaXMgcmVmYWN0b3JlZFxuaW1wb3J0IFBsYXRmb3JtRm9ybURhdGEgZnJvbSAnLi4vcGxhdGZvcm0vbm9kZS9jbGFzc2VzL0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscy5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscy5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGguY29uY2F0KGtleSkubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gIH0pLmpvaW4oZG90cyA/ICcuJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgYXJyYXkgaXMgYW4gYXJyYXkgYW5kIG5vbmUgb2YgaXRzIGVsZW1lbnRzIGFyZSB2aXNpdGFibGUsIHRoZW4gaXQncyBhIGZsYXQgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7XG4gIHJldHVybiB1dGlscy5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzLnRvRmxhdE9iamVjdCh1dGlscywge30sIG51bGwsIGZ1bmN0aW9uIGZpbHRlcihwcm9wKSB7XG4gIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy52aXNpdG9yXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tZXRhVG9rZW5zID0gdHJ1ZV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gW29wdGlvbnMuaW5kZXhlcyA9IGZhbHNlXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbi8qKlxuICogSXQgY29udmVydHMgYW4gb2JqZWN0IGludG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBmb3JtIGRhdGEuXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgLSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSwgb3B0aW9ucykge1xuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoUGxhdGZvcm1Gb3JtRGF0YSB8fCBGb3JtRGF0YSkoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0aW9ucyA9IHV0aWxzLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICBkb3RzOiBmYWxzZSxcbiAgICBpbmRleGVzOiBmYWxzZVxuICB9LCBmYWxzZSwgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGZvcm1EYXRhKTtcblxuICBpZiAoIXV0aWxzLmlzRnVuY3Rpb24odmlzaXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gbWV0YVRva2VucyA/IGtleSA6IGtleS5zbGljZSgwLCAtMik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh1dGlscy5pc0FycmF5KHZhbHVlKSAmJiBpc0ZsYXRBcnJheSh2YWx1ZSkpIHx8XG4gICAgICAgICgodXRpbHMuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSkgJiYgKGFyciA9IHV0aWxzLnRvQXJyYXkodmFsdWUpKVxuICAgICAgICApKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGF0aC5qb2luKCcuJykpO1xuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24gZWFjaChlbCwga2V5KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVyc1xuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICBidWlsZChlbCwgcGF0aCA/IHBhdGguY29uY2F0KGtleSkgOiBba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0Zvcm1EYXRhO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICAgICclMDAnOiAnXFx4MDAnXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnZlcnRlZCB0byBhIEZvcm1EYXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXIgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSk7XG4gIH0gOiBlbmNvZGU7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVycyBgOmAsIGAkYCwgYCxgLCBgK2AsIGBbYCwgYW5kIGBdYCB3aXRoIHRoZWlyXG4gKiBVUkkgZW5jb2RlZCBjb3VudGVycGFydHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/KG9iamVjdHxGdW5jdGlvbil9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgc2VyaWFsaXplOiBvcHRpb25zXG4gICAgfTtcbiAgfSBcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbFxuIiwgImltcG9ydCBVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcydcbmltcG9ydCBGb3JtRGF0YSBmcm9tICcuL2NsYXNzZXMvRm9ybURhdGEuanMnXG5pbXBvcnQgQmxvYiBmcm9tICcuL2NsYXNzZXMvQmxvYi5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGEsXG4gICAgQmxvYlxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcbiIsICJjb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuY29uc3QgX25hdmlnYXRvciA9IHR5cGVvZiBuYXZpZ2F0b3IgPT09ICdvYmplY3QnICYmIG5hdmlnYXRvciB8fCB1bmRlZmluZWQ7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSBoYXNCcm93c2VyRW52ICYmXG4gICghX25hdmlnYXRvciB8fCBbJ1JlYWN0TmF0aXZlJywgJ05hdGl2ZVNjcmlwdCcsICdOUyddLmluZGV4T2YoX25hdmlnYXRvci5wcm9kdWN0KSA8IDApO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5jb25zdCBvcmlnaW4gPSBoYXNCcm93c2VyRW52ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmIHx8ICdodHRwOi8vbG9jYWxob3N0JztcblxuZXhwb3J0IHtcbiAgaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIF9uYXZpZ2F0b3IgYXMgbmF2aWdhdG9yLFxuICBvcmlnaW5cbn1cbiIsICJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi9ub2RlL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vY29tbW9uL3V0aWxzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9ybURhdGFUb0pTT047XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHRvVVJMRW5jb2RlZEZvcm0gZnJvbSAnLi4vaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAodXRpbHMuaXNSZXNwb25zZShkYXRhKSB8fCB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgcmF3SGVhZGVycyA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICByYXdIZWFkZXJzICYmIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgIGlmICgha2V5IHx8IChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgaWYgKHBhcnNlZFtrZXldKSB7XG4gICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gW3ZhbF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGFyc2VIZWFkZXJzIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzJztcblxuY29uc3QgJGludGVybmFscyA9IFN5bWJvbCgnaW50ZXJuYWxzJyk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlciAmJiBTdHJpbmcoaGVhZGVyKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMuaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpO1xuICB9XG5cbiAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICAgIHZhbHVlID0gaGVhZGVyO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc1N0cmluZyh2YWx1ZSkpIHJldHVybjtcblxuICBpZiAodXRpbHMuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzUmVnRXhwKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLnRlc3QodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlci50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csICh3LCBjaGFyLCBzdHIpID0+IHtcbiAgICAgIHJldHVybiBjaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWNjZXNzb3JzKG9iaiwgaGVhZGVyKSB7XG4gIGNvbnN0IGFjY2Vzc29yTmFtZSA9IHV0aWxzLnRvQ2FtZWxDYXNlKCcgJyArIGhlYWRlcik7XG5cbiAgWydnZXQnLCAnc2V0JywgJ2hhcyddLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSArIGFjY2Vzc29yTmFtZSwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uY2FsbCh0aGlzLCBoZWFkZXIsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbn1cblxuY2xhc3MgQXhpb3NIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IoaGVhZGVycykge1xuICAgIGhlYWRlcnMgJiYgdGhpcy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBzZXQoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSwgcmV3cml0ZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghbEhlYWRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIChfdmFsdWUsIF9oZWFkZXIpID0+IHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSk7XG5cbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChoZWFkZXIpIHx8IGhlYWRlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIHNldEhlYWRlcnMoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSlcbiAgICB9IGVsc2UgaWYodXRpbHMuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzSGVhZGVycyhoZWFkZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBoZWFkZXIuZW50cmllcygpKSB7XG4gICAgICAgIHNldEhlYWRlcih2YWx1ZSwga2V5LCByZXdyaXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIF9oZWFkZXIpO1xuXG4gICAgICAgIGlmIChrZXkgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUoc2VsZiwgc2VsZltrZXldLCBrZXksIG1hdGNoZXIpKSkge1xuICAgICAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG5cbiAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShoZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZm9ybWF0ID8gZm9ybWF0SGVhZGVyKGhlYWRlcikgOiBTdHJpbmcoaGVhZGVyKS50cmltKCk7XG5cbiAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgIH1cblxuICAgICAgc2VsZltub3JtYWxpemVkXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgaGVhZGVyc1tub3JtYWxpemVkXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbmNhdCguLi50YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsIC4uLnRhcmdldHMpO1xuICB9XG5cbiAgdG9KU09OKGFzU3RyaW5ncykge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSkuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzLmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5mb3JFYWNoKGRlZmluZUFjY2Vzc29yKSA6IGRlZmluZUFjY2Vzc29yKGhlYWRlcik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5BeGlvc0hlYWRlcnMuYWNjZXNzb3IoWydDb250ZW50LVR5cGUnLCAnQ29udGVudC1MZW5ndGgnLCAnQWNjZXB0JywgJ0FjY2VwdC1FbmNvZGluZycsICdVc2VyLUFnZW50JywgJ0F1dGhvcml6YXRpb24nXSk7XG5cbi8vIHJlc2VydmVkIG5hbWVzIGhvdGZpeFxudXRpbHMucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHt2YWx1ZX0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG51dGlscy5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zSGVhZGVycztcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsZWRFcnJvcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vQXhpb3NFcnJvci5qcyc7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDYWxjdWxhdGUgZGF0YSBtYXhSYXRlXG4gKiBAcGFyYW0ge051bWJlcn0gW3NhbXBsZXNDb3VudD0gMTBdXG4gKiBAcGFyYW0ge051bWJlcn0gW21pbj0gMTAwMF1cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3BlZWRvbWV0ZXIoc2FtcGxlc0NvdW50LCBtaW4pIHtcbiAgc2FtcGxlc0NvdW50ID0gc2FtcGxlc0NvdW50IHx8IDEwO1xuICBjb25zdCBieXRlcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBjb25zdCB0aW1lc3RhbXBzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGxldCBoZWFkID0gMDtcbiAgbGV0IHRhaWwgPSAwO1xuICBsZXQgZmlyc3RTYW1wbGVUUztcblxuICBtaW4gPSBtaW4gIT09IHVuZGVmaW5lZCA/IG1pbiA6IDEwMDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHB1c2goY2h1bmtMZW5ndGgpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gdGltZXN0YW1wc1t0YWlsXTtcblxuICAgIGlmICghZmlyc3RTYW1wbGVUUykge1xuICAgICAgZmlyc3RTYW1wbGVUUyA9IG5vdztcbiAgICB9XG5cbiAgICBieXRlc1toZWFkXSA9IGNodW5rTGVuZ3RoO1xuICAgIHRpbWVzdGFtcHNbaGVhZF0gPSBub3c7XG5cbiAgICBsZXQgaSA9IHRhaWw7XG4gICAgbGV0IGJ5dGVzQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGkgIT09IGhlYWQpIHtcbiAgICAgIGJ5dGVzQ291bnQgKz0gYnl0ZXNbaSsrXTtcbiAgICAgIGkgPSBpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGhlYWQgPSAoaGVhZCArIDEpICUgc2FtcGxlc0NvdW50O1xuXG4gICAgaWYgKGhlYWQgPT09IHRhaWwpIHtcbiAgICAgIHRhaWwgPSAodGFpbCArIDEpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGlmIChub3cgLSBmaXJzdFNhbXBsZVRTIDwgbWluKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc2VkID0gc3RhcnRlZEF0ICYmIG5vdyAtIHN0YXJ0ZWRBdDtcblxuICAgIHJldHVybiBwYXNzZWQgPyBNYXRoLnJvdW5kKGJ5dGVzQ291bnQgKiAxMDAwIC8gcGFzc2VkKSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3BlZWRvbWV0ZXI7XG4iLCAiLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gZnJlcVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBmcmVxKSB7XG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBsZXQgdGhyZXNob2xkID0gMTAwMCAvIGZyZXE7XG4gIGxldCBsYXN0QXJncztcbiAgbGV0IHRpbWVyO1xuXG4gIGNvbnN0IGludm9rZSA9IChhcmdzLCBub3cgPSBEYXRlLm5vdygpKSA9PiB7XG4gICAgdGltZXN0YW1wID0gbm93O1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9XG5cbiAgY29uc3QgdGhyb3R0bGVkID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHBhc3NlZCA9IG5vdyAtIHRpbWVzdGFtcDtcbiAgICBpZiAoIHBhc3NlZCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIGludm9rZShhcmdzLCBub3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGludm9rZShsYXN0QXJncylcbiAgICAgICAgfSwgdGhyZXNob2xkIC0gcGFzc2VkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBmbHVzaCA9ICgpID0+IGxhc3RBcmdzICYmIGludm9rZShsYXN0QXJncyk7XG5cbiAgcmV0dXJuIFt0aHJvdHRsZWQsIGZsdXNoXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdGhyb3R0bGU7XG4iLCAiaW1wb3J0IHNwZWVkb21ldGVyIGZyb20gXCIuL3NwZWVkb21ldGVyLmpzXCI7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSBcIi4vdGhyb3R0bGUuanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNvbnN0IHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtLCBmcmVxID0gMykgPT4ge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiB0aHJvdHRsZShlID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IChsb2FkZWQgLyB0b3RhbCkgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsICYmIGluUmFuZ2UgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlLFxuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdG90YWwgIT0gbnVsbCxcbiAgICAgIFtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXTogdHJ1ZVxuICAgIH07XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59XG5cbmV4cG9ydCBjb25zdCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yID0gKHRvdGFsLCB0aHJvdHRsZWQpID0+IHtcbiAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7XG5cbiAgcmV0dXJuIFsobG9hZGVkKSA9PiB0aHJvdHRsZWRbMF0oe1xuICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgdG90YWwsXG4gICAgbG9hZGVkXG4gIH0pLCB0aHJvdHRsZWRbMV1dO1xufVxuXG5leHBvcnQgY29uc3QgYXN5bmNEZWNvcmF0b3IgPSAoZm4pID0+ICguLi5hcmdzKSA9PiB1dGlscy5hc2FwKCgpID0+IGZuKC4uLmFyZ3MpKTtcbiIsICJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgPyAoKG9yaWdpbiwgaXNNU0lFKSA9PiAodXJsKSA9PiB7XG4gIHVybCA9IG5ldyBVUkwodXJsLCBwbGF0Zm9ybS5vcmlnaW4pO1xuXG4gIHJldHVybiAoXG4gICAgb3JpZ2luLnByb3RvY29sID09PSB1cmwucHJvdG9jb2wgJiZcbiAgICBvcmlnaW4uaG9zdCA9PT0gdXJsLmhvc3QgJiZcbiAgICAoaXNNU0lFIHx8IG9yaWdpbi5wb3J0ID09PSB1cmwucG9ydClcbiAgKTtcbn0pKFxuICBuZXcgVVJMKHBsYXRmb3JtLm9yaWdpbiksXG4gIHBsYXRmb3JtLm5hdmlnYXRvciAmJiAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KHBsYXRmb3JtLm5hdmlnYXRvci51c2VyQWdlbnQpXG4pIDogKCkgPT4gdHJ1ZTtcbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICB7XG4gICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICBjb25zdCBjb29raWUgPSBbbmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSldO1xuXG4gICAgICB1dGlscy5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcoZG9tYWluKSAmJiBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuXG4gICAgICBzZWN1cmUgPT09IHRydWUgJiYgY29va2llLnB1c2goJ3NlY3VyZScpO1xuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICB9LFxuXG4gICAgcmVhZChuYW1lKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgIH0sXG5cbiAgICByZW1vdmUobmFtZSkge1xuICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICB9XG4gIH1cblxuICA6XG5cbiAgLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICB7XG4gICAgd3JpdGUoKSB7fSxcbiAgICByZWFkKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7fVxuICB9O1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBpc0Fic29sdXRlVVJMIGZyb20gJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyc7XG5pbXBvcnQgY29tYmluZVVSTHMgZnJvbSAnLi4vaGVscGVycy9jb21iaW5lVVJMcy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL0F4aW9zSGVhZGVycy5qc1wiO1xuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzID8geyAuLi50aGluZyB9IDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBwcm9wLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgcHJvcCAsIGNhc2VsZXNzKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIsIHByb3AgLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIHByb3AgLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIgLCBwcm9wKSA9PiBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLHByb3AsIHRydWUpXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwgImltcG9ydCBwbGF0Zm9ybSBmcm9tIFwiLi4vcGxhdGZvcm0vaW5kZXguanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmltcG9ydCBpc1VSTFNhbWVPcmlnaW4gZnJvbSBcIi4vaXNVUkxTYW1lT3JpZ2luLmpzXCI7XG5pbXBvcnQgY29va2llcyBmcm9tIFwiLi9jb29raWVzLmpzXCI7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tIFwiLi4vY29yZS9idWlsZEZ1bGxQYXRoLmpzXCI7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSBcIi4uL2NvcmUvbWVyZ2VDb25maWcuanNcIjtcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSBcIi4vYnVpbGRVUkwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGNvbmZpZykgPT4ge1xuICBjb25zdCBuZXdDb25maWcgPSBtZXJnZUNvbmZpZyh7fSwgY29uZmlnKTtcblxuICBsZXQge2RhdGEsIHdpdGhYU1JGVG9rZW4sIHhzcmZIZWFkZXJOYW1lLCB4c3JmQ29va2llTmFtZSwgaGVhZGVycywgYXV0aH0gPSBuZXdDb25maWc7XG5cbiAgbmV3Q29uZmlnLmhlYWRlcnMgPSBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oaGVhZGVycyk7XG5cbiAgbmV3Q29uZmlnLnVybCA9IGJ1aWxkVVJMKGJ1aWxkRnVsbFBhdGgobmV3Q29uZmlnLmJhc2VVUkwsIG5ld0NvbmZpZy51cmwpLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG5cbiAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICBpZiAoYXV0aCkge1xuICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgK1xuICAgICAgYnRvYSgoYXV0aC51c2VybmFtZSB8fCAnJykgKyAnOicgKyAoYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhdXRoLnBhc3N3b3JkKSkgOiAnJykpXG4gICAgKTtcbiAgfVxuXG4gIGxldCBjb250ZW50VHlwZTtcblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSkge1xuICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKHVuZGVmaW5lZCk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9IGVsc2UgaWYgKChjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAvLyBmaXggc2VtaWNvbG9uIGR1cGxpY2F0aW9uIGlzc3VlIGZvciBSZWFjdE5hdGl2ZSBGb3JtRGF0YSBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uc3QgW3R5cGUsIC4uLnRva2Vuc10gPSBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JykubWFwKHRva2VuID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKFt0eXBlIHx8ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgLi4udG9rZW5zXS5qb2luKCc7ICcpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG5cbiAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4obmV3Q29uZmlnKSk7XG5cbiAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICBjb25zdCB4c3JmVmFsdWUgPSB4c3JmSGVhZGVyTmFtZSAmJiB4c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoeHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0KHhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdDb25maWc7XG59XG5cbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4vLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7cHJvZ3Jlc3NFdmVudFJlZHVjZXJ9IGZyb20gJy4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMnO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSBcIi4uL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qc1wiO1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgZGVmYXVsdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oX2NvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZSwgb25VcGxvYWRQcm9ncmVzcywgb25Eb3dubG9hZFByb2dyZXNzfSA9IF9jb25maWc7XG4gICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgbGV0IHVwbG9hZFRocm90dGxlZCwgZG93bmxvYWRUaHJvdHRsZWQ7XG4gICAgbGV0IGZsdXNoVXBsb2FkLCBmbHVzaERvd25sb2FkO1xuXG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGZsdXNoVXBsb2FkICYmIGZsdXNoVXBsb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuICAgICAgZmx1c2hEb3dubG9hZCAmJiBmbHVzaERvd25sb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG5cbiAgICAgIF9jb25maWcuc2lnbmFsICYmIF9jb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub3BlbihfY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBfY29uZmlnLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IF9jb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgX2NvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IF9jb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoX2NvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgIChbZG93bmxvYWRUaHJvdHRsZWQsIGZsdXNoRG93bmxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZG93bmxvYWRUaHJvdHRsZWQpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKG9uVXBsb2FkUHJvZ3Jlc3MgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIChbdXBsb2FkVGhyb3R0bGVkLCBmbHVzaFVwbG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKSk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdXBsb2FkVGhyb3R0bGVkKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZsdXNoVXBsb2FkKTtcbiAgICB9XG5cbiAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbiB8fCBfY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgX2NvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IF9jb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKF9jb25maWcudXJsKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSBcIi4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzXCI7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIGNvbnN0IHtsZW5ndGh9ID0gKHNpZ25hbHMgPSBzaWduYWxzID8gc2lnbmFscy5maWx0ZXIoQm9vbGVhbikgOiBbXSk7XG5cbiAgaWYgKHRpbWVvdXQgfHwgbGVuZ3RoKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBsZXQgYWJvcnRlZDtcblxuICAgIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNvbnN0IGVyciA9IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uIDogdGhpcy5yZWFzb247XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvciA/IGVyciA6IG5ldyBDYW5jZWxlZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdGltZXIgPSB0aW1lb3V0ICYmIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCAke3RpbWVvdXR9IG9mIG1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKVxuICAgIH0sIHRpbWVvdXQpXG5cbiAgICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICAgIGlmIChzaWduYWxzKSB7XG4gICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgc2lnbmFscy5mb3JFYWNoKHNpZ25hbCA9PiB7XG4gICAgICAgICAgc2lnbmFsLnVuc3Vic2NyaWJlID8gc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpIDogc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzaWduYWxzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gICAgY29uc3Qge3NpZ25hbH0gPSBjb250cm9sbGVyO1xuXG4gICAgc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdXRpbHMuYXNhcCh1bnN1YnNjcmliZSk7XG5cbiAgICByZXR1cm4gc2lnbmFsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VTaWduYWxzO1xuIiwgIlxuZXhwb3J0IGNvbnN0IHN0cmVhbUNodW5rID0gZnVuY3Rpb24qIChjaHVuaywgY2h1bmtTaXplKSB7XG4gIGxldCBsZW4gPSBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gIGlmICghY2h1bmtTaXplIHx8IGxlbiA8IGNodW5rU2l6ZSkge1xuICAgIHlpZWxkIGNodW5rO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3MgPSAwO1xuICBsZXQgZW5kO1xuXG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBlbmQgPSBwb3MgKyBjaHVua1NpemU7XG4gICAgeWllbGQgY2h1bmsuc2xpY2UocG9zLCBlbmQpO1xuICAgIHBvcyA9IGVuZDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVhZEJ5dGVzID0gYXN5bmMgZnVuY3Rpb24qIChpdGVyYWJsZSwgY2h1bmtTaXplKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcmVhZFN0cmVhbShpdGVyYWJsZSkpIHtcbiAgICB5aWVsZCogc3RyZWFtQ2h1bmsoY2h1bmssIGNodW5rU2l6ZSk7XG4gIH1cbn1cblxuY29uc3QgcmVhZFN0cmVhbSA9IGFzeW5jIGZ1bmN0aW9uKiAoc3RyZWFtKSB7XG4gIGlmIChzdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgeWllbGQqIHN0cmVhbTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByZWFkZXIuY2FuY2VsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHRyYWNrU3RyZWFtID0gKHN0cmVhbSwgY2h1bmtTaXplLCBvblByb2dyZXNzLCBvbkZpbmlzaCkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IHJlYWRCeXRlcyhzdHJlYW0sIGNodW5rU2l6ZSk7XG5cbiAgbGV0IGJ5dGVzID0gMDtcbiAgbGV0IGRvbmU7XG4gIGxldCBfb25GaW5pc2ggPSAoZSkgPT4ge1xuICAgIGlmICghZG9uZSkge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBvbkZpbmlzaCAmJiBvbkZpbmlzaChlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgIF9vbkZpbmlzaCgpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICBsZXQgbG9hZGVkQnl0ZXMgPSBieXRlcyArPSBsZW47XG4gICAgICAgICAgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX29uRmluaXNoKGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgIF9vbkZpbmlzaChyZWFzb24pO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgIH1cbiAgfSwge1xuICAgIGhpZ2hXYXRlck1hcms6IDJcbiAgfSlcbn1cbiIsICJpbXBvcnQgcGxhdGZvcm0gZnJvbSBcIi4uL3BsYXRmb3JtL2luZGV4LmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5pbXBvcnQgY29tcG9zZVNpZ25hbHMgZnJvbSBcIi4uL2hlbHBlcnMvY29tcG9zZVNpZ25hbHMuanNcIjtcbmltcG9ydCB7dHJhY2tTdHJlYW19IGZyb20gXCIuLi9oZWxwZXJzL3RyYWNrU3RyZWFtLmpzXCI7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IHtwcm9ncmVzc0V2ZW50UmVkdWNlciwgcHJvZ3Jlc3NFdmVudERlY29yYXRvciwgYXN5bmNEZWNvcmF0b3J9IGZyb20gXCIuLi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzXCI7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tIFwiLi4vaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzXCI7XG5pbXBvcnQgc2V0dGxlIGZyb20gXCIuLi9jb3JlL3NldHRsZS5qc1wiO1xuXG5jb25zdCBpc0ZldGNoU3VwcG9ydGVkID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXF1ZXN0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXNwb25zZSA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSBpc0ZldGNoU3VwcG9ydGVkICYmIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJztcblxuLy8gdXNlZCBvbmx5IGluc2lkZSB0aGUgZmV0Y2ggYWRhcHRlclxuY29uc3QgZW5jb2RlVGV4dCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgKChlbmNvZGVyKSA9PiAoc3RyKSA9PiBlbmNvZGVyLmVuY29kZShzdHIpKShuZXcgVGV4dEVuY29kZXIoKSkgOlxuICAgIGFzeW5jIChzdHIpID0+IG5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShzdHIpLmFycmF5QnVmZmVyKCkpXG4pO1xuXG5jb25zdCB0ZXN0ID0gKGZuLCAuLi5hcmdzKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZm4oLi4uYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5jb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmIHRlc3QoKCkgPT4ge1xuICBsZXQgZHVwbGV4QWNjZXNzZWQgPSBmYWxzZTtcblxuICBjb25zdCBoYXNDb250ZW50VHlwZSA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgIGJvZHk6IG5ldyBSZWFkYWJsZVN0cmVhbSgpLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGdldCBkdXBsZXgoKSB7XG4gICAgICBkdXBsZXhBY2Nlc3NlZCA9IHRydWU7XG4gICAgICByZXR1cm4gJ2hhbGYnO1xuICAgIH0sXG4gIH0pLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKTtcblxuICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xufSk7XG5cbmNvbnN0IERFRkFVTFRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDtcblxuY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgdGVzdCgoKSA9PiB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSkpO1xuXG5cbmNvbnN0IHJlc29sdmVycyA9IHtcbiAgc3RyZWFtOiBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmICgocmVzKSA9PiByZXMuYm9keSlcbn07XG5cbmlzRmV0Y2hTdXBwb3J0ZWQgJiYgKCgocmVzKSA9PiB7XG4gIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2godHlwZSA9PiB7XG4gICAgIXJlc29sdmVyc1t0eXBlXSAmJiAocmVzb2x2ZXJzW3R5cGVdID0gdXRpbHMuaXNGdW5jdGlvbihyZXNbdHlwZV0pID8gKHJlcykgPT4gcmVzW3R5cGVdKCkgOlxuICAgICAgKF8sIGNvbmZpZykgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgUmVzcG9uc2UgdHlwZSAnJHt0eXBlfScgaXMgbm90IHN1cHBvcnRlZGAsIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JULCBjb25maWcpO1xuICAgICAgfSlcbiAgfSk7XG59KShuZXcgUmVzcG9uc2UpKTtcblxuY29uc3QgZ2V0Qm9keUxlbmd0aCA9IGFzeW5jIChib2R5KSA9PiB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzQmxvYihib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemU7XG4gIH1cblxuICBpZih1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7XG4gICAgY29uc3QgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keSxcbiAgICB9KTtcbiAgICByZXR1cm4gKGF3YWl0IF9yZXF1ZXN0LmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7XG4gIH1cblxuICBpZih1dGlscy5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscy5pc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG4gICAgYm9keSA9IGJvZHkgKyAnJztcbiAgfVxuXG4gIGlmKHV0aWxzLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICB9XG59XG5cbmNvbnN0IHJlc29sdmVCb2R5TGVuZ3RoID0gYXN5bmMgKGhlYWRlcnMsIGJvZHkpID0+IHtcbiAgY29uc3QgbGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKGFzeW5jIChjb25maWcpID0+IHtcbiAgbGV0IHtcbiAgICB1cmwsXG4gICAgbWV0aG9kLFxuICAgIGRhdGEsXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbFRva2VuLFxuICAgIHRpbWVvdXQsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgcmVzcG9uc2VUeXBlLFxuICAgIGhlYWRlcnMsXG4gICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICBmZXRjaE9wdGlvbnNcbiAgfSA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcblxuICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgbGV0IGNvbXBvc2VkU2lnbmFsID0gY29tcG9zZVNpZ25hbHMoW3NpZ25hbCwgY2FuY2VsVG9rZW4gJiYgY2FuY2VsVG9rZW4udG9BYm9ydFNpZ25hbCgpXSwgdGltZW91dCk7XG5cbiAgbGV0IHJlcXVlc3Q7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmUgPSBjb21wb3NlZFNpZ25hbCAmJiBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSAmJiAoKCkgPT4ge1xuICAgICAgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUoKTtcbiAgfSk7XG5cbiAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiYgbWV0aG9kICE9PSAnZ2V0JyAmJiBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgKSB7XG4gICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogXCJoYWxmXCJcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZUhlYWRlcilcbiAgICAgIH1cblxuICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgcmVxdWVzdENvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25VcGxvYWRQcm9ncmVzcykpXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YSA9IHRyYWNrU3RyZWFtKF9yZXF1ZXN0LmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgZmx1c2gpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdXRpbHMuaXNTdHJpbmcod2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ29taXQnO1xuICAgIH1cblxuICAgIC8vIENsb3VkZmxhcmUgV29ya2VycyB0aHJvd3Mgd2hlbiBjcmVkZW50aWFscyBhcmUgZGVmaW5lZFxuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2xvdWRmbGFyZS93b3JrZXJkL2lzc3Vlcy85MDJcbiAgICBjb25zdCBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID0gXCJjcmVkZW50aWFsc1wiIGluIFJlcXVlc3QucHJvdG90eXBlO1xuICAgIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgIHNpZ25hbDogY29tcG9zZWRTaWduYWwsXG4gICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycy5ub3JtYWxpemUoKS50b0pTT04oKSxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgICAgY3JlZGVudGlhbHM6IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPyB3aXRoQ3JlZGVudGlhbHMgOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3QpO1xuXG4gICAgY29uc3QgaXNTdHJlYW1SZXNwb25zZSA9IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScgfHwgcmVzcG9uc2VUeXBlID09PSAncmVzcG9uc2UnKTtcblxuICAgIGlmIChzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgKGlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUpKSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgICBbJ3N0YXR1cycsICdzdGF0dXNUZXh0JywgJ2hlYWRlcnMnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICBvcHRpb25zW3Byb3BdID0gcmVzcG9uc2VbcHJvcF07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gb25Eb3dubG9hZFByb2dyZXNzICYmIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25Eb3dubG9hZFByb2dyZXNzKSwgdHJ1ZSlcbiAgICAgICkgfHwgW107XG5cbiAgICAgIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKFxuICAgICAgICB0cmFja1N0cmVhbShyZXNwb25zZS5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsICgpID0+IHtcbiAgICAgICAgICBmbHVzaCAmJiBmbHVzaCgpO1xuICAgICAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSB8fCAndGV4dCc7XG5cbiAgICBsZXQgcmVzcG9uc2VEYXRhID0gYXdhaXQgcmVzb2x2ZXJzW3V0aWxzLmZpbmRLZXkocmVzb2x2ZXJzLCByZXNwb25zZVR5cGUpIHx8ICd0ZXh0J10ocmVzcG9uc2UsIGNvbmZpZyk7XG5cbiAgICAhaXNTdHJlYW1SZXNwb25zZSAmJiB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfSlcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gJ1R5cGVFcnJvcicgJiYgL2ZldGNoL2kudGVzdChlcnIubWVzc2FnZSkpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSxcbiAgICAgICAge1xuICAgICAgICAgIGNhdXNlOiBlcnIuY2F1c2UgfHwgZXJyXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG5cbiAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZXJyLCBlcnIgJiYgZXJyLmNvZGUsIGNvbmZpZywgcmVxdWVzdCk7XG4gIH1cbn0pO1xuXG5cbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGh0dHBBZGFwdGVyIGZyb20gJy4vaHR0cC5qcyc7XG5pbXBvcnQgeGhyQWRhcHRlciBmcm9tICcuL3hoci5qcyc7XG5pbXBvcnQgZmV0Y2hBZGFwdGVyIGZyb20gJy4vZmV0Y2guanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyLFxuICBmZXRjaDogZmV0Y2hBZGFwdGVyXG59XG5cbnV0aWxzLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzKSA9PiB7XG4gICAgYWRhcHRlcnMgPSB1dGlscy5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRyYW5zZm9ybURhdGEgZnJvbSAnLi90cmFuc2Zvcm1EYXRhLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gXCIuLi9hZGFwdGVycy9hZGFwdGVycy5qc1wiO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuIiwgImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxLjcuOFwiOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi4vZW52L2RhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbnZhbGlkYXRvcnMuc3BlbGxpbmcgPSBmdW5jdGlvbiBzcGVsbGluZyhjb3JyZWN0U3BlbGxpbmcpIHtcbiAgcmV0dXJuICh2YWx1ZSwgb3B0KSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oYCR7b3B0fSBpcyBsaWtlbHkgYSBtaXNzcGVsbGluZyBvZiAke2NvcnJlY3RTcGVsbGluZ31gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnNcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgSW50ZXJjZXB0b3JNYW5hZ2VyIGZyb20gJy4vSW50ZXJjZXB0b3JNYW5hZ2VyLmpzJztcbmltcG9ydCBkaXNwYXRjaFJlcXVlc3QgZnJvbSAnLi9kaXNwYXRjaFJlcXVlc3QuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAnLi4vaGVscGVycy92YWxpZGF0b3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teSA9IHt9O1xuXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID8gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZHVtbXkpIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCAnJykgOiAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrLnJlcGxhY2UoL14uK1xcbi4rXFxuLywgJycpKSkge1xuICAgICAgICAgICAgZXJyLnN0YWNrICs9ICdcXG4nICsgc3RhY2tcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKGNvbmZpZywge1xuICAgICAgYmFzZVVybDogdmFsaWRhdG9ycy5zcGVsbGluZygnYmFzZVVSTCcpLFxuICAgICAgd2l0aFhzcmZUb2tlbjogdmFsaWRhdG9ycy5zcGVsbGluZygnd2l0aFhTUkZUb2tlbicpXG4gICAgfSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscy5mb3JFYWNoKFxuICAgICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoLmFwcGx5KGNoYWluLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHJldHVybiBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuICB9XG59XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9DYW5jZWxlZEVycm9yLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oY2FuY2VsID0+IHtcbiAgICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgICBsZXQgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4gPSBvbmZ1bGZpbGxlZCA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICB0b0Fib3J0U2lnbmFsKCkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBjb25zdCBhYm9ydCA9IChlcnIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgY29udHJvbGxlci5zaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB0aGlzLnVuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIHJldHVybiBjb250cm9sbGVyLnNpZ25hbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbFRva2VuO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuIiwgImNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcbmltcG9ydCBBeGlvcyBmcm9tICcuL2NvcmUvQXhpb3MuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vY29yZS9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbFRva2VuIGZyb20gJy4vY2FuY2VsL0NhbmNlbFRva2VuLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4vZW52L2RhdGEuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHNwcmVhZCBmcm9tICcuL2hlbHBlcnMvc3ByZWFkLmpzJztcbmltcG9ydCBpc0F4aW9zRXJyb3IgZnJvbSAnLi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5pbXBvcnQgSHR0cFN0YXR1c0NvZGUgZnJvbSAnLi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zXG4iLCAiaW1wb3J0IGF4aW9zIGZyb20gJy4vbGliL2F4aW9zLmpzJztcblxuLy8gVGhpcyBtb2R1bGUgaXMgaW50ZW5kZWQgdG8gdW53cmFwIEF4aW9zIGRlZmF1bHQgZXhwb3J0IGFzIG5hbWVkLlxuLy8gS2VlcCB0b3AtbGV2ZWwgZXhwb3J0IHNhbWUgd2l0aCBzdGF0aWMgcHJvcGVydGllc1xuLy8gc28gdGhhdCBpdCBjYW4ga2VlcCBzYW1lIHdpdGggZXMgbW9kdWxlIG9yIGNqc1xuY29uc3Qge1xuICBBeGlvcyxcbiAgQXhpb3NFcnJvcixcbiAgQ2FuY2VsZWRFcnJvcixcbiAgaXNDYW5jZWwsXG4gIENhbmNlbFRva2VuLFxuICBWRVJTSU9OLFxuICBhbGwsXG4gIENhbmNlbCxcbiAgaXNBeGlvc0Vycm9yLFxuICBzcHJlYWQsXG4gIHRvRm9ybURhdGEsXG4gIEF4aW9zSGVhZGVycyxcbiAgSHR0cFN0YXR1c0NvZGUsXG4gIGZvcm1Ub0pTT04sXG4gIGdldEFkYXB0ZXIsXG4gIG1lcmdlQ29uZmlnXG59ID0gYXhpb3M7XG5cbmV4cG9ydCB7XG4gIGF4aW9zIGFzIGRlZmF1bHQsXG4gIEF4aW9zLFxuICBBeGlvc0Vycm9yLFxuICBDYW5jZWxlZEVycm9yLFxuICBpc0NhbmNlbCxcbiAgQ2FuY2VsVG9rZW4sXG4gIFZFUlNJT04sXG4gIGFsbCxcbiAgQ2FuY2VsLFxuICBpc0F4aW9zRXJyb3IsXG4gIHNwcmVhZCxcbiAgdG9Gb3JtRGF0YSxcbiAgQXhpb3NIZWFkZXJzLFxuICBIdHRwU3RhdHVzQ29kZSxcbiAgZm9ybVRvSlNPTixcbiAgZ2V0QWRhcHRlcixcbiAgbWVyZ2VDb25maWdcbn1cbiIsICJpbXBvcnQgeyBUaGluZywgRW50aXR5LCBDbGFzcywgUHJvcGVydHksIEluZGl2aWR1YWwsIE9udG9sb2d5IH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuXG4vLyBSRUFET05MWSBhcnJheXMgY29udGFpbmluZyB0aGUgc3RyaW5ncyBkZWZpbmluZyBhIE1vZGVsIE9iamVjdCBUeXBlXG5leHBvcnQgY29uc3QgY2xhc3NUeXBlTmFtZXMgPSBbXCJjbGFzc1wiICwgXCJ0ZXJtXCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHByb3BlcnR5VHlwZU5hbWVzID0gW1wicHJvcGVydHlcIiwgXCJhbm5vdGF0aW9uUHJvcGVydHlcIiwgXCJkYXRhUHJvcGVydHlcIiwgXCJvYmplY3RQcm9wZXJ0eVwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBpbmRpdmlkdWFsVHlwZU5hbWVzID0gW1wiaW5kaXZpZHVhbFwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBvbnRvbG9neVR5cGVOYW1lcyA9IFtcIm9udG9sb2d5XCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IGVudGl0eVR5cGVOYW1lcyA9IFsuLi5jbGFzc1R5cGVOYW1lcywgLi4uaW5kaXZpZHVhbFR5cGVOYW1lcywgLi4ucHJvcGVydHlUeXBlTmFtZXNdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHRoaW5nVHlwZU5hbWVzID0gWy4uLmVudGl0eVR5cGVOYW1lcywgLi4ub250b2xvZ3lUeXBlTmFtZXNdIGFzIGNvbnN0O1xuXG4vLyBUeXBlLWNyZWF0aW9uIG91dCBvZiBSRUFET05MWSBhcnJheXNcbmV4cG9ydCB0eXBlIENsYXNzVHlwZU5hbWUgPSB0eXBlb2YgY2xhc3NUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZU5hbWUgPSB0eXBlb2YgcHJvcGVydHlUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIEluZGl2aWR1YWxUeXBlTmFtZSA9IHR5cGVvZiBpbmRpdmlkdWFsVHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBPbnRvbG9neVR5cGVOYW1lID0gdHlwZW9mIG9udG9sb2d5VHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBFbnRpdHlUeXBlTmFtZSA9IHR5cGVvZiBlbnRpdHlUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFRoaW5nVHlwZU5hbWUgPSB0eXBlb2YgdGhpbmdUeXBlTmFtZXNbbnVtYmVyXTtcblxuLy8gRnVuY3Rpb25zIGNoZWNraW5nIHN0cmluZyBhZ2FpbnN0IHR5cGUgbmFtZXMsIHJldHVybmluZyBzdHJpbmcgYXMgdHlwZSBuYW1lIGlmIGNoZWNrIHBhc3Nlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3NUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogdHlwZSBpcyBDbGFzc1R5cGVOYW1lIHtcbiAgICByZXR1cm4gY2xhc3NUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBDbGFzc1R5cGVOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5VHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgUHJvcGVydHlUeXBlTmFtZSB7XG4gICAgcmV0dXJuIHByb3BlcnR5VHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgUHJvcGVydHlUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbmRpdmlkdWFsVHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgSW5kaXZpZHVhbFR5cGVOYW1lIHtcbiAgICByZXR1cm4gaW5kaXZpZHVhbFR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIEluZGl2aWR1YWxUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbnRvbG9neVR5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIE9udG9sb2d5VHlwZU5hbWUge1xuICAgIHJldHVybiBvbnRvbG9neVR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIE9udG9sb2d5VHlwZU5hbWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5VHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgRW50aXR5VHlwZU5hbWUge1xuICAgIHJldHVybiBlbnRpdHlUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBFbnRpdHlUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUaGluZ1R5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIFRoaW5nVHlwZU5hbWUge1xuICAgIHJldHVybiB0aGluZ1R5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIFRoaW5nVHlwZU5hbWUpO1xufVxuXG4vLyBGdW5jdGlvbnMgY2hlY2tpbmcgVGhpbmcgb2JqZWN0cyBhZ2FpbnN0IHNwZWNpZmljIHR5cGUgKHZpYSBjaGVja2luZyBnZXRUeXBlKCkgYWdhaW5zdCB0eXBlIG5hbWVzKSwgcmV0dXJuaW5nIG9iamVjdCBhcyBzcGVjaWZpYyB0eXBlIGlmIGNoZWNrIHBhc3Nlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3ModGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIENsYXNzIHtcbiAgICByZXR1cm4gaXNDbGFzc1R5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eSh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgUHJvcGVydHkge1xuICAgIHJldHVybiBpc1Byb3BlcnR5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0luZGl2aWR1YWwodGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIEluZGl2aWR1YWwge1xuICAgIHJldHVybiBpc0luZGl2aWR1YWxUeXBlTmFtZSh0aGluZy5nZXRUeXBlKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5KHRoaW5nOiBUaGluZykgOiB0aGluZyBpcyBFbnRpdHkge1xuICAgIHJldHVybiBpc0VudGl0eVR5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbnRvbG9neSh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgT250b2xvZ3kge1xuICAgIHJldHVybiBpc09udG9sb2d5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn0iLCAiaW1wb3J0IHtFdWlMaW5rQ29sb3J9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvbGluay9saW5rXCI7XG5pbXBvcnQge1xuICAgIGlzQ2xhc3NUeXBlTmFtZSxcbiAgICBpc0luZGl2aWR1YWxUeXBlTmFtZSxcbiAgICBpc09udG9sb2d5VHlwZU5hbWUsXG4gICAgaXNQcm9wZXJ0eVR5cGVOYW1lLFxuICAgIGlzVGhpbmdUeXBlTmFtZSwgVGhpbmdUeXBlTmFtZVxufSBmcm9tIFwiLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7U3RvcnlDb250ZXh0fSBmcm9tIFwiQHN0b3J5Ym9vay9yZWFjdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheTxUPihvYmo6IFQgfCBUW10pOiBUW10ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9IGVsc2UgaWYgKG9iaikge1xuICAgICAgICByZXR1cm4gW29ial07XG4gICAgfVxuICAgIHJldHVybiBbXSBhcyBUW107XG59XG5cbmNvbnN0IERFRkFVTFRfVVNFX0xFR0FDWSA9IHRydWU7XG4vKipcbiAqIFJldHVybnMgYHVzZUxlZ2FjeWAgaWYgdW5kZWZpbmVkLCBvdGhlcndpc2UgcmV0dXJucyBkZWZhdWx0IHZhbHVlIGZvciB1c2VMZWdhY3lcbiAqIEBwYXJhbSB1c2VMZWdhY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3k/OiBib29sZWFuKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodXNlTGVnYWN5ICE9PSB1bmRlZmluZWQpID8gdXNlTGVnYWN5IDogREVGQVVMVF9VU0VfTEVHQUNZO1xufVxuXG4vKipcbiAqIFJldHVybnMge0BsaW5rIHR5cGV9LiBJZiB7QGxpbmsgdHlwZX0gZXF1YWxzICd0ZXJtJywgJ2NsYXNzJyBnZXRzIHJldHVybmVkIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRpdHlUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gXCJ0ZXJtXCIgPyBcImNsYXNzXCIgOiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHI6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZUNhbWVsQ2FzZShzdHI6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBjYXBpdGFsaXplKHN0cikuc3BsaXQoLyg/PVtBLVpdW2Etel0pLykuam9pbihcIiBcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZVVuZGVyc2NvcmUoc3RyOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FwaXRhbGl6ZShzdHIpLnJlcGxhY2UoXCJfXCIsIFwiIFwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRyaW1tZWQgYXBpIChvbWl0cyAvYXBpL3YyIGF0IHRoZSBlbmQpXG4gKiBAcGFyYW0gYXBpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcm9udEVuZEFwaShhcGk6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBhcGkucmVwbGFjZSgvXFwvYXBpXFwvPyQvLCBcIi9cIik7XG59XG5cbi8qKlxuICogUmV0dXJucyBcIm9udG9sb2dpZXMve29udG9sb2d5SWR9L3tlbnRpdHlUeXBlfS97aXJpfVwiLCB3aGljaCBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggZnJvbnRlbmRBcGkgdG8gZ2V0IGZ1bGwgbGlua1xuICogQHBhcmFtIG9udG9sb2d5SWQgdGhlIGVudGl0aWVzJyBvbnRvbG9neUlkXG4gKiBAcGFyYW0gaXJpIHRoZSBlbnRpdGllcycgaXJpXG4gKiBAcGFyYW0gZW50aXR5VHlwZUFycmF5IHRoZSBlbnRpdGllcycgdHlwZSBhcnJheSAoZnJvbSBhcGkgSlNPTiBsaW5rZWRFbnRpdGllcylcbiAqIEBwYXJhbSB1c2VMZWdhY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlQXJyYXk6IHN0cmluZ1tdIHwgc3RyaW5nLCBpcmk/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pIDogc3RyaW5nIHtcbiAgICByZXR1cm4gYG9udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke3BsdXJhbGl6ZVR5cGUoYXNBcnJheShlbnRpdHlUeXBlQXJyYXkpLCB1c2VMZWdhY3kpfWAgKyAoaXJpICE9IHVuZGVmaW5lZCA/IGAvJHtlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGlyaSkpfWAgOiBcIlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBsdXJhbGl6ZVR5cGUodHlwZUFycmF5OiBzdHJpbmdbXSB8IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbikgOiBcInRlcm1zXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHwgXCJvbnRvbG9naWVzXCIge1xuICAgIGZvcihjb25zdCB0eXBlIG9mIGFzQXJyYXkodHlwZUFycmF5KSkge1xuICAgICAgICBpZihpc1RoaW5nVHlwZU5hbWUodHlwZSkpIHtcbiAgICAgICAgICAgIGlmKGlzQ2xhc3NUeXBlTmFtZSh0eXBlKSkgcmV0dXJuIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJ0ZXJtc1wiIDogXCJjbGFzc2VzXCI7XG4gICAgICAgICAgICBpZihpc1Byb3BlcnR5VHlwZU5hbWUodHlwZSkpIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgICAgICAgIGlmKGlzSW5kaXZpZHVhbFR5cGVOYW1lKHR5cGUpKSByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgICAgICAgaWYoaXNPbnRvbG9neVR5cGVOYW1lKHR5cGUpKSByZXR1cm4gXCJvbnRvbG9naWVzXCJcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0aGluZ1R5cGUgZm91bmQgdG8gcGx1cmFsaXplIGluIHByb3ZpZGVkIHR5cGVBcnJheS5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW5ndWxhcml6ZVR5cGUodHlwZUFycmF5OiBzdHJpbmdbXSB8IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFRoaW5nVHlwZU5hbWUge1xuICAgIGZvcihjb25zdCB0eXBlIG9mIGFzQXJyYXkodHlwZUFycmF5KSkge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0ZXJtc1wiOiBjYXNlIFwiY2xhc3Nlc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwidGVybVwiIDogXCJjbGFzc1wiO1xuICAgICAgICAgICAgY2FzZSBcInByb3BlcnRpZXNcIjogY2FzZSBcImRhdGFQcm9wZXJ0aWVzXCI6IGNhc2UgXCJvYmplY3RQcm9wZXJ0aWVzXCI6IGNhc2UgXCJhbm5vdGF0aW9uUHJvcGVydGllc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInByb3BlcnR5XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW5kaXZpZHVhbHNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsXCI7XG4gICAgICAgICAgICBjYXNlIFwib250b2xvZ2llc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIm9udG9sb2d5XCJcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0aGluZ1R5cGUgZm91bmQgdG8gc2luZ3VsYXJpemUgaW4gcHJvdmlkZWQgdHlwZUFycmF5LlwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIHN0cmluZyB1c2VkIG1haW5seSBmb3IgY29tcG9uZW50IGtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gICAgcmV0dXJuIChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMiwgNTQpKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hleENvbG9yKHN0cjogc3RyaW5nKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXiNbMC05QS1GXXs2fSQvaS50ZXN0KHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JnYkNvbG9yKHN0cjogc3RyaW5nKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXihyZ2J8aHNsKShhPylbKF1cXHMqKFtcXGQuXStcXHMqJT8pXFxzKixcXHMqKFtcXGQuXStcXHMqJT8pXFxzKixcXHMqKFtcXGQuXStcXHMqJT8pXFxzKig/OixcXHMqKFtcXGQuXSspXFxzKik/WyldJC9pLnRlc3Qoc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXVpTGlua0NvbG9yKHN0cjogc3RyaW5nKSA6IHN0ciBpcyBFdWlMaW5rQ29sb3Ige1xuICAgIHJldHVybiBbXCJwcmltYXJ5XCIsIFwic3ViZHVlZFwiLCBcInN1Y2Nlc3NcIiwgXCJhY2NlbnRcIiwgXCJkYW5nZXJcIiwgXCJ3YXJuaW5nXCIsIFwidGV4dFwiLCBcImdob3N0XCJdLmluY2x1ZGVzKHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V1aUJ1dHRvbkNvbG9yKHN0cjogc3RyaW5nKSA6IHN0ciBpcyBFdWlMaW5rQ29sb3Ige1xuICAgIHJldHVybiBbXCJ0ZXh0XCIsIFwiYWNjZW50XCIsIFwicHJpbWFyeVwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCJdLmluY2x1ZGVzKHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3I6IGFueSwgbWVzc2FnZVBsYWNlaG9sZGVyID0gXCJpbmZvcm1hdGlvblwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBlcnJvcl9tc2cgOiBzdHJpbmcgPSBlcnJvci5tZXNzYWdlO1xuICAgIGlmKGVycm9yX21zZyA9PT0gKFwiUmVzcG9uc2UgY29udGFpbnMgMCBlbGVtZW50c1wiKSkge1xuICAgICAgICByZXR1cm4gXCJObyBlbGVtZW50cyBmb3VuZFwiO1xuICAgIH1cbiAgICBlbHNlIHJldHVybiBgTm8gJHttZXNzYWdlUGxhY2Vob2xkZXJ9IGF2YWlsYWJsZWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZlclR5cGVGcm9tVHlwZUFycmF5KHR5cGVzOiBzdHJpbmdbXSkge1xuICAgIGxldCByZXMgPSB0eXBlcy5maWx0ZXIoKGVsZW0gOiBzdHJpbmcpID0+IGlzVGhpbmdUeXBlTmFtZShlbGVtKSk7IC8vIGZpbHRlciBub3QgbWF0Y2hpbmcgc3RyaW5nc1xuICAgIHJlcyA9IHJlcy5tYXAoaXRlbSA9PiBpdGVtID09PSBcImFubm90YXRpb25Qcm9wZXJ0eVwiIHx8IGl0ZW0gPT09IFwib2JqZWN0UHJvcGVydHlcIiB8fCBpdGVtID09PSBcImRhdGFQcm9wZXJ0eVwiID8gXCJwcm9wZXJ0eVwiIDogaXRlbSk7XG4gICAgcmVzID0gWy4uLm5ldyBTZXQ8XCJjbGFzc1wiIHwgXCJ0ZXJtXCIgfCBcImluZGl2aWR1YWxcIiB8IFwicHJvcGVydHlcIiB8IFwiYW5ub3RhdGlvblByb3BlcnR5XCIgfCBcImRhdGFQcm9wZXJ0eVwiIHwgXCJvYmplY3RQcm9wZXJ0eVwiIHwgXCJvbnRvbG9neVwiPihyZXMpXTsgLy8gcmVtb3ZlIGR1cGxpY2F0ZXNcblxuICAgIGlmKHJlcy5sZW5ndGggPT09IDEpIHJldHVybiByZXNbMF0gYXMgVGhpbmdUeXBlTmFtZTtcbiAgICBlbHNlIGlmKHJlcy5sZW5ndGggPT09IDApIHRocm93IEVycm9yKFwiRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZDogTm8gc3VpdGFibGUgdHlwZSBmb3VuZCBpbiBhcnJheS5cIik7XG4gICAgZWxzZSB0aHJvdyBFcnJvcihgRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZDogTXVsdGlwbGUgdHlwZXMgZm91bmQgaW4gYXJyYXksIG5vIGRlZmluaXRlIGNob2ljZSBwb3NzaWJsZSAtICR7SlNPTi5zdHJpbmdpZnkocmVzKX1gKTtcbn1cblxuLyogVE9ETzogcGx1cmFsaXplVHlwZSBub3QgYXZhaWxhYmxlIGluIGh0bWwgdmVyc2lvbiwgcmVwbGFjZSB3aXRoIGxvY2FsIGZ1bmN0aW9uYWxpdHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBtYW51YWxseUVtYmVkT25OYXZpZ2F0ZShjb2RlOiBzdHJpbmcsIHN0b3J5Q29udGV4dDogU3RvcnlDb250ZXh0KSB7XG4gICAgc3dpdGNoIChzdG9yeUNvbnRleHQuYXJnc1tcIm9uTmF2aWdhdGVUb0VudGl0eVwiXSkge1xuICAgICAgICBjYXNlIFwiQ29uc29sZSBtZXNzYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9vbk5hdmlnYXRlVG9FbnRpdHk9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRW50aXR5PXtcXG4gICAgKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgIGNvbnNvbGUubG9nKCdUcmlnZ2VyZWQgb25OYXZpZ2F0ZVRvRW50aXR5KCknICsgKGVudGl0eVR5cGUgPyBgIGZvciAke2VudGl0eVR5cGUgfHwgXFxcImVudGl0eVxcXCJ9YCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5sYWJlbCkgPyBgIFxcXCIke2VudGl0eS5sYWJlbH1cXFwiYCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5pcmkpID8gYCAoaXJpPVxcXCIke2VudGl0eS5pcml9XFxcIilgIDogJycpICsgJy4nKTtcXG4gICAgfVxcbiAgfVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJOYXZpZ2F0ZSB0byBFQkkgcGFnZVwiOlxuICAgICAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZShcbiAgICAgICAgICAgICAgICAvb25OYXZpZ2F0ZVRvRW50aXR5PVxceyhcXChcXCkgPT4gXFx7fXxmdW5jdGlvbiBub1JlZkNoZWNrXFwoXFwpXFx7fSl9LyxcbiAgICAgICAgICAgICAgICBcIm9uTmF2aWdhdGVUb0VudGl0eT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBpZihlbnRpdHkgJiYgZW50aXR5LmlyaSAmJiBlbnRpdHlUeXBlKSB7XFxuICAgICAgICB3aW5kb3cub3BlbignaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvb250b2xvZ2llcy8nICsgb250b2xvZ3lJZCArICcvJyArIG5ldyBNYXAoW1tcXFwidGVybVxcXCIsXFxcImNsYXNzZXNcXFwiXSxbXFxcImNsYXNzXFxcIixcXFwiY2xhc3Nlc1xcXCJdLFtcXFwiaW5kaXZpZHVhbFxcXCIsXFxcImluZGl2aWR1YWxzXFxcIl0sW1xcXCJwcm9wZXJ0eVxcXCIsXFxcInByb3BlcnRpZXNcXFwiXSxbXFxcImRhdGFQcm9wZXJ0eVxcXCIsXFxcInByb3BlcnRpZXNcXFwiXSxbXFxcIm9iamVjdFByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwiYW5ub3RhdGlvblByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdXSkuZ2V0KGVudGl0eVR5cGUpICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChlbnRpdHkuaXJpKSksIFxcXCJfdG9wXFxcIik7XFxuICAgICAgfVxcbiAgICAgIGVsc2Uge1xcbiAgICAgICAgd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L29udG9sb2dpZXMvJyArIG9udG9sb2d5SWQsIFxcXCJfdG9wXFxcIik7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XCJcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIHN3aXRjaCAoc3RvcnlDb250ZXh0LmFyZ3NbXCJvbk5hdmlnYXRlVG9PbnRvbG9neVwiXSkge1xuICAgICAgICBjYXNlIFwiQ29uc29sZSBtZXNzYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9vbk5hdmlnYXRlVG9PbnRvbG9neT1cXHsoXFwoXFwpID0+IFxce318ZnVuY3Rpb24gbm9SZWZDaGVja1xcKFxcKVxce30pfS8sXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9PbnRvbG9neT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBjb25zb2xlLmxvZygnVHJpZ2dlcmVkIG9uTmF2aWdhdGVUb09udG9sb2d5KCknICsgKGVudGl0eVR5cGUgPyBgIGZvciAke2VudGl0eVR5cGUgfHwgXFxcImVudGl0eVxcXCJ9YCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5sYWJlbCkgPyBgIFxcXCIke2VudGl0eS5sYWJlbH1cXFwiYCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5pcmkpID8gYCAoaXJpPVxcXCIke2VudGl0eS5pcml9XFxcIilgIDogJycpICsgYCBmb3Igb250b2xvZ3lJZCBcXFwiJHtvbnRvbG9neUlkfVxcXCIuYCk7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTmF2aWdhdGUgdG8gRUJJIHBhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgL29uTmF2aWdhdGVUb09udG9sb2d5PVxceyhcXChcXCkgPT4gXFx7fXxmdW5jdGlvbiBub1JlZkNoZWNrXFwoXFwpXFx7fSl9LyxcbiAgICAgICAgICAgICAgICBcIm9uTmF2aWdhdGVUb09udG9sb2d5PXtcXG4gICAgKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgIGlmKGVudGl0eSAmJiBlbnRpdHkuaXJpICYmIGVudGl0eVR5cGUpIHtcXG4gICAgICAgIHdpbmRvdy5vcGVuKCdodHRwczovL3d3dy5lYmkuYWMudWsvb2xzNC9vbnRvbG9naWVzLycgKyBvbnRvbG9neUlkICsgJy8nICsgbmV3IE1hcChbW1xcXCJ0ZXJtXFxcIixcXFwiY2xhc3Nlc1xcXCJdLFtcXFwiY2xhc3NcXFwiLFxcXCJjbGFzc2VzXFxcIl0sW1xcXCJpbmRpdmlkdWFsXFxcIixcXFwiaW5kaXZpZHVhbHNcXFwiXSxbXFxcInByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwiZGF0YVByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwib2JqZWN0UHJvcGVydHlcXFwiLFxcXCJwcm9wZXJ0aWVzXFxcIl0sW1xcXCJhbm5vdGF0aW9uUHJvcGVydHlcXFwiLFxcXCJwcm9wZXJ0aWVzXFxcIl1dKS5nZXQoZW50aXR5VHlwZSkgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eS5pcmkpKSwgXFxcIl90b3BcXFwiKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSB7XFxuICAgICAgICB3aW5kb3cub3BlbignaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvb250b2xvZ2llcy8nICsgb250b2xvZ3lJZCwgXFxcIl90b3BcXFwiKTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgc3dpdGNoIChzdG9yeUNvbnRleHQuYXJnc1tcIm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZVwiXSkge1xuICAgICAgICBjYXNlIFwiQ29uc29sZSBtZXNzYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtcXG4gICAgKGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICAgY29uc29sZS5sb2coJ1RyaWdnZXJlZCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUoKScgKyAoZW50aXR5VHlwZSA/IGAgZm9yICR7ZW50aXR5VHlwZSB8fCBcXFwiZW50aXR5XFxcIn1gIDogJycpICsgKChlbnRpdHkgJiYgZW50aXR5LmxhYmVsKSA/IGAgXFxcIiR7ZW50aXR5LmxhYmVsfVxcXCJgIDogJycpICsgKChlbnRpdHkgJiYgZW50aXR5LmlyaSkgPyBgIChpcmk9XFxcIiR7ZW50aXR5LmlyaX1cXFwiKWAgOiAnJykgKyAnLicpO1xcbiAgICB9XFxuICB9XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIk5hdmlnYXRlIHRvIEVCSSBwYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtcXG4gICAgKGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICAgd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L3NlYXJjaD9xPScgKyAoKGVudGl0eSAmJiBlbnRpdHkubGFiZWwpID8gZW50aXR5LmxhYmVsIDogXFxcIlxcXCIpICsgJyZleGFjdE1hdGNoPXRydWUmbGFuZz1lbicsIFxcXCJfdG9wXFxcIik7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBjb2RlO1xufSIsICJleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWlmaWVkPFQ+IHtcbiAgdmFsdWU6IFQ7XG4gIGF4aW9tczogYW55W10gfCBudWxsO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IFQsIGF4aW9tczogYW55W10gfCBudWxsKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuYXhpb21zID0gYXhpb21zO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbjxUPihqc29uTm9kZTogYW55KTogUmVpZmllZDxUPltdIHtcbiAgICBpZiAoIWpzb25Ob2RlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb25Ob2RlKSkge1xuICAgICAganNvbk5vZGUgPSBbanNvbk5vZGVdO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uTm9kZS5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUudHlwZSkgJiZcbiAgICAgICAgdmFsdWUudHlwZS5pbmRleE9mKFwicmVpZmljYXRpb25cIikgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWlmaWVkPFQ+KHZhbHVlLnZhbHVlLCB2YWx1ZS5heGlvbXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWlmaWVkPFQ+KHZhbHVlLCBudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGhhc01ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmF4aW9tcyAhPSBudWxsO1xuICB9XG5cbiAgLy8gQ29tYmluZSBhbGwgb2YgdGhlIGF4aW9tcyBpbnRvIG9uZSBtZXRhZGF0YSBvYmplY3QgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgLy9cbiAgLy8gbm90ZTogVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBzYW1lIHByb3BlcnR5IGlzIHJlaWZpZWQgbXVsdGlwbGUgdGltZXMgd2l0aFxuICAvLyBkaWZmZXJlbnQgbWV0YWRhdGEsIGl0IHdpbGwgYWxsIGJlIGNvbWJpbmVkIGluIHRoZSBVSS4gV2hldGhlciB0aGlzIGlzXG4gIC8vIHRoZSBkZXNpcmVkIGJlaGF2aW91ciBpcyBUQkQuXG4gIC8vXG4gIGdldE1ldGFkYXRhKCk6IGFueSB8IG51bGwge1xuICAgIGlmICghdGhpcy5heGlvbXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnRpZXM6IGFueSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBheGlvbSBvZiB0aGlzLmF4aW9tcykge1xuICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGF4aW9tKSkge1xuICAgICAgICBjb25zdCB2ID0gYXhpb21ba107XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nOiBhbnlbXSB8IHVuZGVmaW5lZCA9IHByb3BlcnRpZXNba107XG4gICAgICAgIGlmIChleGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhpc3RpbmcucHVzaCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzW2tdID0gW3ZdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cbn1cbiIsICJpbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCJcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRFbnRpdHkge1xuXHRkZWZpbmVkQnk/OnN0cmluZ1tdXG5cdGlyaT86c3RyaW5nXG5cdHVybD86c3RyaW5nXG5cdG51bUFwcGVhcnNJbjpzdHJpbmdcblx0aGFzTG9jYWxEZWZpbml0aW9uOmJvb2xlYW5cblx0bGFiZWw6c3RyaW5nfHN0cmluZ1tdXG5cdHR5cGU6c3RyaW5nW11cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlua2VkRW50aXRpZXMge1xuXG5cdGxpbmtlZEVudGl0aWVzOnsgW2tleTpzdHJpbmddOkxpbmtlZEVudGl0eSB9XG5cblx0Y29uc3RydWN0b3IobGlua2VkRW50aXRpZXM6YW55KSB7XG5cdFx0aWYobGlua2VkRW50aXRpZXMpXG5cdFx0XHR0aGlzLmxpbmtlZEVudGl0aWVzID0gey4uLmxpbmtlZEVudGl0aWVzfVxuXHRcdGVsc2Vcblx0XHRcdHRoaXMubGlua2VkRW50aXRpZXMgPSB7fVxuXHR9XG5cblx0bWVyZ2VXaXRoKGxpbmtlZEVudGl0aWVzOmFueSk6TGlua2VkRW50aXRpZXMge1xuXHRcdGlmKGxpbmtlZEVudGl0aWVzKVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMsIGxpbmtlZEVudGl0aWVzIH0pXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMgfSlcblx0fVxuXG5cdGdldExhYmVsRm9ySXJpKGlyaTpzdHJpbmcpOnN0cmluZ3x1bmRlZmluZWQge1xuXHRcdGNvbnN0IGxpbmtlZEVudGl0eSA9IHRoaXMubGlua2VkRW50aXRpZXNbaXJpXVxuXG5cdFx0aWYobGlua2VkRW50aXR5KSB7XG5cdFx0XHRjb25zdCBsYWJlbCA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXR5LmxhYmVsIClcblx0XHRcdGlmKGxhYmVsICYmIGxhYmVsLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGxhYmVsWzBdLnZhbHVlXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Z2V0KGlyaTpzdHJpbmcpOkxpbmtlZEVudGl0eXx1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmxpbmtlZEVudGl0aWVzW2lyaV1cblx0fVxufVxuIiwgImltcG9ydCB7VGhpbmd9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5cbmltcG9ydCBMaW5rZWRFbnRpdGllcyBmcm9tIFwiLi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5pbXBvcnQge1RoaW5nVHlwZU5hbWV9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHtwbHVyYWxpemVUeXBlfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzNUaGluZyBpbXBsZW1lbnRzIFRoaW5nIHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIGN1cmllIC8gb2JvX2lkIG1lYW50PyBcImlkXCIgb25seSBleGlzdHMgaW4gc3RhbmRhcmQ/IChodHRwOi8vd3d3LmViaS5hYy51ay9vbHM0L2FwaS9vbnRvbG9naWVzL2Fkby9wcm9wZXJ0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vUk9fMDAwMjE3NSlcbiAgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaWRcIl07XG4gIH1cblxuICBnZXRJcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXJpXCJdO1xuICB9XG5cbiAgLy8gc3RhbmRhcmQgcmVzcG9uc2VzIGRvbid0IGhhdmUgXCJ0eXBlXCIga2V5IC0+IGltcGxlbWVudCBzdGF0aWNhbGx5IGluIHN1YnR5cGVzXG4gIGFic3RyYWN0IGdldFR5cGUoKTogVGhpbmdUeXBlTmFtZTtcblxuICBnZXRUeXBlUGx1cmFsKCk6IFwib250b2xvZ2llc1wiIHwgXCJjbGFzc2VzXCIgfCBcInRlcm1zXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZVR5cGUodGhpcy5nZXRUeXBlKCkpO1xuICB9XG5cbiAgLy8gbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCByZXNwb25zZXNcbiAgZ2V0UmRmVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcblx0cmV0dXJuIHRoaXMuZ2V0TmFtZXMoKVswXTtcbiAgfVxuXG4gIC8vIGhhcyBhZGRpdGlvbmFsIGtleSBcInNob3J0aGFuZFwiPyAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvb250b2xvZ2llcy9hZG8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsYWJlbHMgPSBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXVxuICAgICk7XG4gICAgaWYgKGxhYmVscyAmJiBsYWJlbHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGxhYmVscy5tYXAobGFiZWwgPT4gbGFiZWwudmFsdWUpXG4gICAgfVxuICAgIHJldHVybiBbdGhpcy5nZXRJcmkoKV07XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVzY3JpcHRpb25cIl0pO1xuICAgIGlmIChkZWZpbml0aW9uICYmIGRlZmluaXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRlZmluaXRpb24ubWFwKChkZWYpID0+IGRlZi52YWx1ZSB8fCBcIlwiKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5X25hbWVcIl07XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXBwbGljYWJsZSAvIG5lY2Vzc2FyeSBpbiBzdGFuZGFyZCBhcyB0aGVyZSBhcmUgbm8gbGlua2VkIGVudGl0aWVzXG4gIGdldExhYmVsRm9ySXJpKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsaW5rZWRFbnRpdGllcyA9IHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdO1xuICAgIGlmIChsaW5rZWRFbnRpdGllcykge1xuICAgICAgY29uc3QgbGFiZWw6UmVpZmllZDxzdHJpbmc+W10gPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oIGxpbmtlZEVudGl0aWVzW2lkXT8ubGFiZWwgKTtcbiAgICAgIHJldHVybiBsYWJlbFswXT8udmFsdWUgfHwgaWRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdO1xuICBhYnN0cmFjdCBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmc7XG4gIGFic3RyYWN0IGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOlJlaWZpZWQ8YW55PltdO1xuXG4gIC8vIFRPRE86IG5vdCBhcHBsaWNhYmxlIC8gbmVjZXNzYXJ5IGluIHN0YW5kYXJkXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxuXG4gIGdldERlcGljdGlvblVybCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdICYmIHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl1bXCJkZXBpY3Rpb25cIl0pIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW1wiZGVwaWN0aW9uXCJdWzBdO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIiwgImltcG9ydCB7RW50aXR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzVGhpbmd9IGZyb20gXCIuL09MUzNUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQge2FzQXJyYXksIGRlVW5kZXJzY29yZX0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eVR5cGVOYW1lfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzNFbnRpdHkgZXh0ZW5kcyBPTFMzVGhpbmcgaW1wbGVtZW50cyBFbnRpdHl7XG4gIGFic3RyYWN0IGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuXG4gIGlzQ2Fub25pY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGRvZXMgbm90IHNlZW0gdG8gb2NjdXIgaW4gc3RhbmRhcmQgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3YyL2VudGl0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vRk9PRE9OXzAwMDA0NDc0KVxuICAvLyAgICAgICB2MiBoYXMgZGVwcmVjYXRlZCBpbmZvcm1hdGlvbiwgc3RhbmRhcmQgaGFzIG5vdFxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl0gPT09IFwidHJ1ZVwiXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIC8vIG9ubHkgc3VwcG9ydHMgRUZPIGZvciBub3dcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL29ic29sZXRlZF9pbl92ZXJzaW9uXCJdO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZWFzb24oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAwMDAyMzFcIl1cbiAgICApLmNvbmNhdChcbiAgICAgIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL3JlYXNvbl9mb3Jfb2Jzb2xlc2NlbmNlXCJdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVwbGFjZW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMTAwMDAxXCJdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGV4aXN0ZW50IGluIHN0YW5kYXJkLiBDYW4gYmUgZXh0cmFjdGVkIGZyb20gXCJsaW5rc1wiLT5cImdyYXBoXCJcbiAgLy8gICAgICAgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3Rlcm1zP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vQUdST18wMDAwMDAwMilcbiAgZ2V0UmVsYXRlZEZyb20oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wicmVsYXRlZEZyb21cIl0pO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb25Bc0FycmF5KCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCBmcm9tIFwibGlua3NcIi0+XCJjaGlsZHJlblwiXG4gIGhhc0RpcmVjdENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNEaXJlY3RDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICAvLyAvLyBUT0RPOiBub3QgZXhpc3RlbnQgaW4gc3RhbmRhcmQuIENhbiBiZSBleHRyYWN0ZWQgZnJvbSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsQ2hpbGRyZW5cIlxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl0gPT09IFwidHJ1ZVwiO1xuICB9XG5cbiAgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc19jaGlsZHJlblwiXVxuICB9XG5cbiAgLy8gVE9ETzogY291bGQgbm90IGZpbmQgZXhhbXBsZXMgb2YgYW5jZXN0b3JzIGluIG5ldyBhcGkgc28gZmFyXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogY2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsQW5jZXN0b3JzXCJcbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1zXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCB2aWEgc2VhcmNoaW5nIGZvciBlbnRpdHkgd2l0aG91dCBzcGVjaWZpYyBvbnRvbG9neSAtPiBnaXZlcyBhbGwgb2NjdXJyZW5jZXNcbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRDcm9zc1JlZmVyZW5jZXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW1wiaGFzX2RieHJlZlwiXSB8fCBbXTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gU3RhbmRhcmQgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIGlzX2RlZmluaW5nX29udG9sb2d5IGFzIHdlbGxcbiAgLy8gICAgICAgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3YyL29udG9sb2dpZXMvcm8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldERlZmluZWRCeSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbmVkQnlcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0SXNEZWZpbmluZ09udG9sb2d5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0gfHwgdW5kZWZpbmVkICkgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvYm9faWRcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRfZm9ybVwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IGFyZSB0aGUgZm9sbG93aW5nIDMgbmVlZGVkP1xuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgWyAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIl0gfHwgW10pLFxuICAgICAgICAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdIHx8IFtdKSBdXG4gICAgKTtcbiAgfVxuXG4gIGlzUHJlZGljYXRlRnJvbUluZm9ybWFsVm9jYWJ1bGFyeShwcmVkaWNhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDIvc2tvcy9jb3JlI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9zY2hlbWEub3JnL1wiKVxuICB9XG5cbiAgLyoqIENhbiBiZSBqdXN0IGZvdW5kIHVuZGVyIGBwcm9wZXJ0aWVzW1wiYW5ub3RhdGlvblwiXWAuXG4gICAqICBOb3QgcHJlc2VudCBpbiBvbHM0L2FwaSxcbiAgICogIGJ1dCBpbiBzZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9hcGkuXG4gICAqL1xuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgLyogb2xzNCBleGNsdWRlcyBcImhhcyBwcmVmZXJyZWQgcm9vdCB0ZXJtXCIsXG4gICAgICAgcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhbmQgYW55dGhpbmcgaW4gcmRmLCByZGZzIGFuZCBvd2wgbmFtZXNwYWNlcyxcbiAgICAgICBidXQgdGhpcyBpcyBub3QgcG9zc2libGUgaGVyZSBhcyB0aGUgbGFiZWxzIGFyZSBrZXlzIGhlcmUsIG5vdCB0aGUgSVJJJ3MgKi9cbiAgICByZXR1cm4gYXNBcnJheTxzdHJpbmc+KE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl0pKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlVW5kZXJzY29yZShpZCk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTpSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW2lkXSkpXG4gIH1cblxuICAvLyBUT0RPOiBDYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXG4gIGdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgLy8gVE9ETzogQ2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiZGVzY2VuZGFudHNcIlxuICBnZXROdW1EZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIC8vIFRPRE86IENhbiBiZSBpbmZlcnJlZCB2aWEgXCJsaW5rc1wiLT5cImhpZXJhcmNoaWNhbFBhcmVudHNcIlxuICBnZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhwYXJlbnRJcmk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHAgb2YgaGllcmFyY2hpY2FsUGFyZW50cykge1xuICAgICAgaWYgKHAudmFsdWUgPT09IHBhcmVudElyaSkge1xuICAgICAgICByZXR1cm4gcC5nZXRNZXRhZGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGdldFR5cGUoKTogRW50aXR5VHlwZU5hbWU7XG59XG4iLCAiaW1wb3J0IHtDbGFzc30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM0VudGl0eX0gZnJvbSBcIi4vT0xTM0VudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0NsYXNzVHlwZU5hbWV9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgT0xTM0NsYXNzIGV4dGVuZHMgT0xTM0VudGl0eSBpbXBsZW1lbnRzIENsYXNzIHtcblxuICBnZXRUeXBlKCk6IENsYXNzVHlwZU5hbWUge1xuICAgIHJldHVybiBcImNsYXNzXCJcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIFwiY2xhc3Nlc1wiXG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxQYXJlbnRzXCJcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJwYXJlbnRzXCJcbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudENsYXNzXCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFdpdGgnXSlcbiAgfVxuXG4gIC8vIFRPRE86IGNhbiB0aGlzIGJlIGluZmVycmVkP1xuICBnZXRIYXNLZXkoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXknXSlcbiAgfVxuXG4gIGdldFN1YnNldHMoKTogYW55W10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImluX3N1YnNldFwiXSkgfHwgW107XG4gIH1cbn1cbiIsICJpbXBvcnQge1Byb3BlcnR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzRW50aXR5fSBmcm9tIFwiLi9PTFMzRW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7UHJvcGVydHlUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzUHJvcGVydHkgZXh0ZW5kcyBPTFMzRW50aXR5IGltcGxlbWVudHMgUHJvcGVydHl7XG5cbiAgZ2V0VHlwZSgpOiBQcm9wZXJ0eVR5cGVOYW1lIHtcbiAgICByZXR1cm4gXCJwcm9wZXJ0eVwiO1xuICB9XG5cbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudFByb3BlcnR5XCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eURpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SW52ZXJzZU9mKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludmVyc2VPZlwiXSk7XG4gIH1cblxuICBnZXREb21haW4oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjZG9tYWluJ10pXG4gIH1cblxuICBnZXRSYW5nZSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNyYW5nZSddKVxuICB9XG5cbiAgZ2V0UHJvcGVydHlDaGFpbnMoKTpSZWlmaWVkPGFueT5bXSB7XG5cdHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG5cdFx0dGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcHJvcGVydHlDaGFpbkF4aW9tXCJdXG5cdClcbiAgfVxufVxuIiwgImltcG9ydCB7SW5kaXZpZHVhbH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM0VudGl0eX0gZnJvbSBcIi4vT0xTM0VudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0luZGl2aWR1YWxUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzSW5kaXZpZHVhbCBleHRlbmRzIE9MUzNFbnRpdHkgaW1wbGVtZW50cyBJbmRpdmlkdWFse1xuXG4gIGdldFR5cGUoKTogSW5kaXZpZHVhbFR5cGVOYW1lIHtcbiAgICByZXR1cm4gXCJpbmRpdmlkdWFsXCI7XG4gIH1cblxuICBnZXRQYXJlbnRzKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJkaXJlY3RQYXJlbnRcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFtdKVxuICB9XG5cbiAgZ2V0RGlmZmVyZW50RnJvbSgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RpZmZlcmVudEZyb21cIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0U2FtZUFzKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3NhbWVBc1wiXSk7XG4gIH1cblxuICBnZXRJbmRpdmlkdWFsVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJkZlR5cGVzOiBhbnkgPSB0aGlzLmdldFJkZlR5cGVzKCk7XG5cbiAgICBpZiAoIXJkZlR5cGVzIHx8ICFBcnJheS5pc0FycmF5KHJkZlR5cGVzKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZGZUeXBlcy5maWx0ZXIoXG4gICAgICAodDogYW55KSA9PlxuICAgICAgICB0ICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmXG5cdFx0KCAoISAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB8fCAhdC5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSkpXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7T250b2xvZ3l9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzNUaGluZ30gZnJvbSBcIi4vT0xTM1RoaW5nXCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7YXNBcnJheSwgZGVDYW1lbENhc2V9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTM09udG9sb2d5IGV4dGVuZHMgT0xTM1RoaW5nIGltcGxlbWVudHMgT250b2xvZ3l7XG5cbiAgZ2V0VHlwZSgpOiBcIm9udG9sb2d5XCIgfCBcImNsYXNzXCIgfCBcInByb3BlcnR5XCIgfCBcImluZGl2aWR1YWxcIiB7XG4gICAgcmV0dXJuIFwib250b2xvZ3lcIjtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJvbnRvbG9naWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICByZXR1cm4gXCJvbnRvbG9naWVzXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWVzID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ0aXRsZVwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKG5hbWVzWzBdICYmIG5hbWVzWzBdLnZhbHVlKSB8fCB0aGlzLmdldE9udG9sb2d5SWQoKTtcbiAgfVxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9ucyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImRlc2NyaXB0aW9uXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAoZGVzY3JpcHRpb25zWzBdICYmIGRlc2NyaXB0aW9uc1swXS52YWx1ZSkgfHwgXCJcIjtcbiAgfVxuXG4gIGdldENyZWF0b3JzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbm5vdGF0aW9uc1wiXVtcImNyZWF0b3JcIl0pO1xuICB9XG5cbiAgZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ1cGRhdGVkXCJdO1xuICB9XG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mRW50aXRpZXNcIl0pO1xuICB9XG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZUZXJtc1wiXSk7XG4gIH1cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlByb3BlcnRpZXNcIl0pO1xuICB9XG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mSW5kaXZpZHVhbHNcIl0pO1xuICB9XG4gIGdldExvZ29VUkwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wibG9nb1wiXSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyB1c2VkIGFzIElSSVxuICBnZXRPbnRvbG9neVB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiZmlsZUxvY2F0aW9uXCJdO1xuICB9XG5cbiAgZ2V0SG9tZXBhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiaG9tZXBhZ2VcIl07XG4gIH1cbiAgZ2V0TWFpbGluZ0xpc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wibWFpbGluZ0xpc3RcIl07XG4gIH1cbiAgZ2V0VHJhY2tlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ0cmFja2VyXCJdO1xuICB9XG4gIGdldFZlcnNpb25JcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1widmVyc2lvbklyaVwiXTtcbiAgfVxuICBnZXRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcInZlcnNpb25cIl07XG4gIH1cbiAgZ2V0VmVyc2lvbkZyb21JcmkoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2ZXJzaW9uSXJpID0gdGhpcy5nZXRWZXJzaW9uSXJpKCk7XG4gICAgaWYgKCF2ZXJzaW9uSXJpKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCB2ZXJzaW9uRnJvbURhdGUgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXGR7NH0tXFxkezJ9LVxcZHsyfS8pO1xuXG4gICAgaWYgKHZlcnNpb25Gcm9tRGF0ZSAmJiB2ZXJzaW9uRnJvbURhdGUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25Gcm9tRGF0ZVswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmVyc2lvbkZyb21OdW1iZXIgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXC92W2QuXS4qXFwvLyk7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21OdW1iZXJcbiAgICAgICAgPyB2ZXJzaW9uRnJvbU51bWJlclswXS5yZXBsYWNlQWxsKFwiL1wiLCBcIlwiKS5yZXBsYWNlKFwidlwiLCBcIlwiKVxuICAgICAgICA6IFwiXCI7XG4gICAgfVxuICB9XG4gIGdldExvYWRlZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsb2FkZWRcIl07XG4gIH1cblxuICAvKiogQ2FuIGJlIGp1c3QgZm91bmQgdW5kZXIgYHByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbm5vdGF0aW9uc1wiXWAuXG4gICAqICBOb3QgcHJlc2VudCBpbiBvbHM0L2FwaSxcbiAgICogIGJ1dCBpbiBzZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9hcGkuXG4gICAqL1xuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgaWYodGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdICYmIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdKSB7XG4gICAgICAvKiBvbHM0IGV4Y2x1ZGVzIFwiaGFzIHByZWZlcnJlZCByb290IHRlcm1cIixcbiAgICAgICBwcm9wZXJ0aWVzIHdpdGhvdXQgYW4gSVJJIGFuZCBhbnl0aGluZyBpbiByZGYsIHJkZnMgYW5kIG93bCBuYW1lc3BhY2VzLFxuICAgICAgIGJ1dCB0aGlzIGlzIG5vdCBwb3NzaWJsZSBoZXJlIGFzIHRoZSBsYWJlbHMgYXJlIGtleXMgaGVyZSwgbm90IHRoZSBJUkkncyAqL1xuICAgICAgcmV0dXJuIGFzQXJyYXk8c3RyaW5nPihPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbm5vdGF0aW9uc1wiXSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIFwiYW5ub3RhdGlvbnNcIiBrZXkgaXMgbm90IHByZXNlbnQgaW4gb2xzNC9hcGlcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBkZUNhbWVsQ2FzZShpZCk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTpSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbm5vdGF0aW9uc1wiXVtpZF0pXG4gICAgICAgIC5maWx0ZXIoKGVsZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIGVsZW0gIT09IFwic3RyaW5nXCIgfHwgZWxlbSAhPT0gXCJcIlxuICAgICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGdldFByZWZlcnJlZFJvb3RzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoYXNQcmVmZXJyZWRSb290XCJdKTtcbiAgfVxuICBnZXRMYW5ndWFnZXMoKTogc3RyaW5nW10ge1xuICAgIC8vIG5vdCBhdmFpbGFibGUgaW4gc2VtbG9va3AgQVBJLCBidXQgaW4gZWJpIEFQSVxuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImxhbmdcIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGF2YWlsYWJsZT9cbiAgZ2V0SW1wb3J0c0Zyb20oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBhdmFpbGFibGU/XG4gIGdldEV4cG9ydHNUbygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiZXhwb3J0c1RvXCJdKTtcbiAgfVxuICBnZXRBbGxvd0Rvd25sb2FkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFsbG93RG93bmxvYWRcIl07XG4gIH1cbn1cbiIsICJpbXBvcnQge09udG9sb2dpZXN9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzNPbnRvbG9neX0gZnJvbSBcIi4vT0xTM09udG9sb2d5XCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzT250b2xvZ2llcyBpbXBsZW1lbnRzIE9udG9sb2dpZXMge1xuICBwcm9wZXJ0aWVzOiBPTFMzT250b2xvZ3lbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBPTFMzT250b2xvZ3lbXSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRUb3RhbE9udG9sb2dpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDtcbiAgfVxuXG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5yZWR1Y2UoKHRvdGFsLCBvbnRvbG9neSkgPT4gdG90YWwgKyBvbnRvbG9neS5nZXROdW1FbnRpdGllcygpLCAwKTtcbiAgfVxuXG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZSgodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bUNsYXNzZXMoKSwgMCk7XG4gIH1cblxuICBnZXROdW1Qcm9wZXJ0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5yZWR1Y2UoKHRvdGFsLCBvbnRvbG9neSkgPT4gdG90YWwgKyBvbnRvbG9neS5nZXROdW1Qcm9wZXJ0aWVzKCksIDApO1xuICB9XG5cbiAgZ2V0TnVtSW5kaXZpZHVhbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZSgodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bUluZGl2aWR1YWxzKCksIDApO1xuICB9XG59XG4iLCAiaW1wb3J0IHtUaGluZ30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcblxuaW1wb3J0IExpbmtlZEVudGl0aWVzIGZyb20gXCIuLi9MaW5rZWRFbnRpdGllc1wiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgaXNUaGluZ1R5cGVOYW1lLCBUaGluZ1R5cGVOYW1lIH0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPTFM0VGhpbmcgaW1wbGVtZW50cyBUaGluZyB7XG4gIHByb3BlcnRpZXM6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBhbnkpIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0TGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdKVswXS52YWx1ZTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIGN1cmllIC8gb2JvX2lkIG1lYW50P1xuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpZFwiXTtcbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWUge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5wcm9wZXJ0aWVzW1widHlwZVwiXSBhcyBzdHJpbmdbXTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKFxuICAgICAgICBpc1RoaW5nVHlwZU5hbWUodHlwZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHlwZSBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcInRlcm1zXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjogY2FzZSBcImFubm90YXRpb25Qcm9wZXJ0eVwiOiBjYXNlIFwiZGF0YVByb3BlcnR5XCI6IGNhc2UgXCJvYmplY3RQcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFJkZlR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlXCJcbiAgICBdKVxuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuXHRyZXR1cm4gdGhpcy5nZXROYW1lcygpWzBdO1xuICB9XG5cbiAgZ2V0TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhYmVscyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdXG4gICAgKTtcbiAgICBpZiAobGFiZWxzICYmIGxhYmVscy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbGFiZWxzLm1hcChsYWJlbCA9PiBsYWJlbC52YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIFt0aGlzLmdldElyaSgpXTtcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdKTtcbiAgICBpZiAoZGVmaW5pdGlvbiAmJiBkZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBkZWZpbml0aW9uLm1hcCgoZGVmKSA9PiBkZWYudmFsdWUgfHwgXCJcIikuam9pbihcIiBcIik7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neUlkXCJdO1xuICB9XG5cbiAgZ2V0TGFiZWxGb3JJcmkoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmtlZEVudGl0aWVzID0gdGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl07XG4gICAgaWYgKGxpbmtlZEVudGl0aWVzKSB7XG4gICAgICBjb25zdCBsYWJlbDpSZWlmaWVkPHN0cmluZz5bXSA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXRpZXNbaWRdPy5sYWJlbCApO1xuICAgICAgcmV0dXJuIGxhYmVsWzBdPy52YWx1ZSB8fCBpZFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgYWJzdHJhY3QgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW107XG5cbiAgZ2V0QW5ub3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6UmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uKGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW2lkXSkpXG4gIH1cblxuICBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExhYmVsRm9ySXJpKGlkKTtcbiAgfVxuXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxuXG4gIGdldERlcGljdGlvblVybCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGlvblwiXSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIiwgImltcG9ydCB7RW50aXR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0VGhpbmd9IGZyb20gXCIuL09MUzRUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPTFM0RW50aXR5IGV4dGVuZHMgT0xTNFRoaW5nIGltcGxlbWVudHMgRW50aXR5e1xuICBhYnN0cmFjdCBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXTtcblxuICBpc0Nhbm9uaWNhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXNEZWZpbmluZ09udG9sb2d5XCJdXG4gIH1cblxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25WZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgLy8gb25seSBzdXBwb3J0cyBFRk8gZm9yIG5vd1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vb2Jzb2xldGVkX2luX3ZlcnNpb25cIl07XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlYXNvbigpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDIzMVwiXVxuICAgICkuY29uY2F0KFxuICAgICAgUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vcmVhc29uX2Zvcl9vYnNvbGVzY2VuY2VcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZXBsYWNlbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAxMDAwMDFcIl07XG4gIH1cblxuICBnZXRSZWxhdGVkRnJvbSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJyZWxhdGVkRnJvbVwiXSk7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbkFzQXJyYXkoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSk7XG4gIH1cblxuICBoYXNEaXJlY3RDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzRGlyZWN0Q2hpbGRyZW5cIl07XG4gIH1cblxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl07XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RDaGlsZHJlbigpIHx8IHRoaXMuaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1cIl0pO1xuICB9XG5cbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRDcm9zc1JlZmVyZW5jZXMoKTogYW55W10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaGFzRGJYcmVmXCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldERlZmluZWRCeSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbmVkQnlcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0SXNEZWZpbmluZ09udG9sb2d5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0gfHwgdW5kZWZpbmVkICkgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjdXJpZVwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydEZvcm1cIl07XG4gIH1cblxuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgWyAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIl0gfHwgW10pLFxuICAgICAgICAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdIHx8IFtdKSBdXG4gICAgKTtcbiAgfVxuXG4gIGlzUHJlZGljYXRlRnJvbUluZm9ybWFsVm9jYWJ1bGFyeShwcmVkaWNhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDIvc2tvcy9jb3JlI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9zY2hlbWEub3JnL1wiKVxuICB9XG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBkZWZpbml0aW9uUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblByb3BlcnR5XCJdKTtcbiAgICBjb25zdCBzeW5vbnltUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wic3lub255bVByb3BlcnR5XCJdKTtcbiAgICBjb25zdCBoaWVyYXJjaGljYWxQcm9wZXJ0aWVzID0gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFByb3BlcnR5XCJdXG4gICAgKTtcbiAgICBjb25zdCBhbm5vdGF0aW9uUHJlZGljYXRlcyA9IG5ldyBTZXQoKTtcblxuICAgIGZvciAoY29uc3QgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICAvLyB0aGlzIGlzIGhhbmRsZWQgZXhwbGljaXRseSBpbiBFbnRpdHlQYWdlXG4gICAgICBpZiAocHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKSkgY29udGludWU7XG5cbiAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBleHBsaWNpdGx5IGluIEVudGl0eVBhZ2VcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiKSBjb250aW51ZTtcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3Rpb25cIikgY29udGludWU7XG5cbiAgICAgIC8vIE9iamVjdCBwcm9wZXJ0aWVzIGFuZCBkYXRhIHByb3BlcnRpZXMgYXJlIG5vdCBhbm5vdGF0aW9uIHByb3BlcnRpZXMsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBpbmZvcm1hbCB2b2NhYnVsYXJpZXMuXG4gICAgICBpZiAoIXRoaXMuaXNQcmVkaWNhdGVGcm9tSW5mb3JtYWxWb2NhYnVsYXJ5KHByZWRpY2F0ZSkpIHtcbiAgICAgICAgY29uc3QgbGlua2VkRW50aXR5ID0gdGhpcy5nZXRMaW5rZWRFbnRpdGllcygpLmdldChwcmVkaWNhdGUpXG4gICAgICAgIGlmIChsaW5rZWRFbnRpdHkgIT0gdW5kZWZpbmVkICYmIGxpbmtlZEVudGl0eS50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTEpIGNvbnRpbnVlO1xuICAgICAgICBpZiAobGlua2VkRW50aXR5ICE9IHVuZGVmaW5lZCAmJiBsaW5rZWRFbnRpdHkudHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBpbnRlcnByZXRlZCBhcyBkZWZpbml0aW9uL3N5bm9ueW0vaGllcmFyY2hpY2FsLCBkb1xuICAgICAgLy8gbm90IGluY2x1ZGUgaXQgYXMgYW4gYW5ub3RhdGlvblxuICAgICAgaWYgKFxuICAgICAgICBkZWZpbml0aW9uUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xIHx8XG4gICAgICAgIHN5bm9ueW1Qcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTEgfHxcbiAgICAgICAgaGllcmFyY2hpY2FsUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFueXRoaW5nIGluIHRoZSByZGYsIHJkZnMsIG93bCBuYW1lc3BhY2VzIGFyZW4ndCBkaXNwbGF5ZWQgaW4gdGhlIGFubm90YXRpb25zIHNlY3Rpb24uLi5cbiAgICAgIGlmIChcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgKSB7XG4gICAgICAgIC8vIC4uLmFwYXJ0IGZyb20gdGhlc2Ugb25lc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNjb21tZW50XCIgJiZcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3NlZUFsc29cIiAmJlxuICAgICAgICAgIC8vIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXlcIiAmJlxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFVuaW9uT2ZcIlxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB3aGlsZSBpbiBnZW5lcmFsIG9ib0luT3dsIG5hbWVzcGFjZSBwcm9wZXJ0aWVzIGFyZSBhbm5vdGF0aW9ucywgc29tZVxuICAgICAgLy8gb2YgdGhlbSB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXlcbiAgICAgIC8vXG4gICAgICBpZiAoXG4gICAgICAgIHByZWRpY2F0ZSA9PT0gXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNpblN1YnNldFwiIHx8XG4gICAgICAgIHByZWRpY2F0ZSA9PT0gXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNpZFwiXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGFubm90YXRpb25QcmVkaWNhdGVzLmFkZChwcmVkaWNhdGUpO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKFwiQVBzXCIpO1xuICAgIC8vIGNvbnNvbGUuZGlyKEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpKTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGFubm90YXRpb25QcmVkaWNhdGVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgZ2V0TnVtRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtRGlyZWN0RGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtRGlyZWN0RGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICBnZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhwYXJlbnRJcmk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHAgb2YgaGllcmFyY2hpY2FsUGFyZW50cykge1xuICAgICAgaWYgKHAudmFsdWUgPT09IHBhcmVudElyaSkge1xuICAgICAgICByZXR1cm4gcC5nZXRNZXRhZGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7Q2xhc3N9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzRFbnRpdHl9IGZyb20gXCIuL09MUzRFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTNENsYXNzIGV4dGVuZHMgT0xTNEVudGl0eSBpbXBsZW1lbnRzIENsYXNzIHtcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRDbGFzc1wiXVxuICAgICk7XG4gIH1cblxuICBnZXREaXNqb2ludFdpdGgoKSB7XG5cdHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlzam9pbnRXaXRoJ10pO1xuICB9XG5cbiAgZ2V0SGFzS2V5KCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzS2V5J10pO1xuICB9XG5cbiAgZ2V0U3Vic2V0cygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaW5TdWJzZXRcIl0pIHx8IFtdO1xuICB9XG59XG4iLCAiaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTNEVudGl0eX0gZnJvbSBcIi4vT0xTNEVudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0UHJvcGVydHkgZXh0ZW5kcyBPTFM0RW50aXR5IGltcGxlbWVudHMgUHJvcGVydHl7XG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViUHJvcGVydHlPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRQcm9wZXJ0eVwiXVxuICAgICk7XG4gIH1cblxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eURpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SW52ZXJzZU9mKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludmVyc2VPZlwiXSk7XG4gIH1cblxuICBnZXREb21haW4oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjZG9tYWluJ10pXG4gIH1cblxuICBnZXRSYW5nZSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNyYW5nZSddKVxuICB9XG5cbiAgZ2V0UHJvcGVydHlDaGFpbnMoKTpSZWlmaWVkPGFueT5bXSB7XG5cdHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG5cdFx0dGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcHJvcGVydHlDaGFpbkF4aW9tXCJdXG5cdClcbiAgfVxuXG59XG4iLCAiaW1wb3J0IHtJbmRpdmlkdWFsfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0RW50aXR5fSBmcm9tIFwiLi9PTFM0RW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzRJbmRpdmlkdWFsIGV4dGVuZHMgT0xTNEVudGl0eSBpbXBsZW1lbnRzIEluZGl2aWR1YWx7XG4gIGdldFBhcmVudHMoKSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImRpcmVjdFBhcmVudFwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oW10pXG4gIH1cblxuICBnZXREaWZmZXJlbnRGcm9tKCkge1xuICAgIHJldHVybiBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlmZmVyZW50RnJvbVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRTYW1lQXMoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjc2FtZUFzXCJdKTtcbiAgfVxuXG4gIGdldEluZGl2aWR1YWxUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmRmVHlwZXM6IGFueSA9IHRoaXMuZ2V0UmRmVHlwZXMoKTtcblxuICAgIGlmICghcmRmVHlwZXMgfHwgIUFycmF5LmlzQXJyYXkocmRmVHlwZXMpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJkZlR5cGVzLmZpbHRlcihcbiAgICAgICh0OiBhbnkpID0+XG4gICAgICAgIHQgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjTmFtZWRJbmRpdmlkdWFsXCIgJiZcblx0XHQoICghICh0eXBlb2YgdCA9PT0gJ3N0cmluZycpIHx8ICF0LnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpKSlcbiAgICApO1xuICB9XG5cbn1cbiIsICJpbXBvcnQge09udG9sb2d5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0VGhpbmd9IGZyb20gXCIuL09MUzRUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0T250b2xvZ3kgZXh0ZW5kcyBPTFM0VGhpbmcgaW1wbGVtZW50cyBPbnRvbG9neXtcbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neUlkXCJdO1xuICB9XG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lcyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdIHx8IHRoaXMucHJvcGVydGllc1tcInRpdGxlXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAobmFtZXNbMF0gJiYgbmFtZXNbMF0udmFsdWUpIHx8IHRoaXMuZ2V0T250b2xvZ3lJZCgpO1xuICB9XG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb25zID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKGRlc2NyaXB0aW9uc1swXSAmJiBkZXNjcmlwdGlvbnNbMF0udmFsdWUpIHx8IFwiXCI7XG4gIH1cblxuICBnZXRDcmVhdG9ycygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9jcmVhdG9yXCJdKTtcbiAgfVxuXG4gIGdldFNvdXJjZUZpbGVUaW1lc3RhbXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic291cmNlRmlsZVRpbWVzdGFtcFwiXTtcbiAgfVxuICBnZXROdW1FbnRpdGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZkVudGl0aWVzXCJdKTtcbiAgfVxuICBnZXROdW1DbGFzc2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mQ2xhc3Nlc1wiXSk7XG4gIH1cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlByb3BlcnRpZXNcIl0pO1xuICB9XG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mSW5kaXZpZHVhbHNcIl0pO1xuICB9XG4gIGdldExvZ29VUkwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiZGVwaWN0ZWRfYnlcIl0gfHwgdW5kZWZpbmVkO1xuICB9XG4gIGdldE9udG9sb2d5UHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neV9wdXJsXCJdO1xuICB9XG4gIGdldEhvbWVwYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhvbWVwYWdlXCJdO1xuICB9XG4gIGdldE1haWxpbmdMaXN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm1haWxpbmdfbGlzdFwiXTtcbiAgfVxuICBnZXRUcmFja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInRyYWNrZXJcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbklyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN2ZXJzaW9uSVJJXCJdO1xuICB9XG4gIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdmVyc2lvbkluZm9cIl07XG4gIH1cbiAgZ2V0VmVyc2lvbkZyb21JcmkoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2ZXJzaW9uSXJpID0gdGhpcy5nZXRWZXJzaW9uSXJpKCk7XG4gICAgaWYgKCF2ZXJzaW9uSXJpKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCB2ZXJzaW9uRnJvbURhdGUgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXGR7NH0tXFxkezJ9LVxcZHsyfS8pO1xuXG4gICAgaWYgKHZlcnNpb25Gcm9tRGF0ZSAmJiB2ZXJzaW9uRnJvbURhdGUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25Gcm9tRGF0ZVswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmVyc2lvbkZyb21OdW1iZXIgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXC92W2QuXS4qXFwvLyk7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21OdW1iZXJcbiAgICAgICAgPyB2ZXJzaW9uRnJvbU51bWJlclswXS5yZXBsYWNlQWxsKFwiL1wiLCBcIlwiKS5yZXBsYWNlKFwidlwiLCBcIlwiKVxuICAgICAgICA6IFwiXCI7XG4gICAgfVxuICB9XG4gIGdldExvYWRlZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsb2FkZWRcIl07XG4gIH1cbiAgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChjb25zdCBwcmVkaWNhdGUgb2YgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKSkge1xuICAgICAgLy8gcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhcmUgdGhpbmdzIHRoYXQgd2VyZSBhZGRlZCBieSByZGYyanNvbiBzbyBzaG91bGQgbm90XG4gICAgICAvLyBiZSBpbmNsdWRlZCBhcyBhbm5vdGF0aW9uc1xuICAgICAgaWYgKHByZWRpY2F0ZS5pbmRleE9mKFwiOi8vXCIpID09PSAtMSkgY29udGludWU7XG5cbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMDAwNzAwXCIpIHtcbiAgICAgICAgLy8gXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhbnl0aGluZyBpbiB0aGUgcmRmLCByZGZzLCBvd2wgbmFtZXNwYWNlcyBhcmVuJ3QgY29uc2lkZXJlZCBhbm5vdGF0aW9uc1xuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSB8fFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjXCIpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBhbm5vdGF0aW9uUHJlZGljYXRlcy5hZGQocHJlZGljYXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykgYXMgc3RyaW5nW107XG4gIH1cbiAgZ2V0UHJlZmVycmVkUm9vdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhhc1ByZWZlcnJlZFJvb3RcIl0pO1xuICB9XG4gIGdldExhbmd1YWdlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wibGFuZ3VhZ2VcIl0pO1xuICB9XG4gIGdldEltcG9ydHNGcm9tKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJpbXBvcnRzRnJvbVwiXSk7XG4gIH1cbiAgZ2V0RXhwb3J0c1RvKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJleHBvcnRzVG9cIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGF2YWlsYWJsZT9cbiAgZ2V0QWxsb3dEb3dubG9hZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbGxvd0Rvd25sb2FkXCJdO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgT0xTM09udG9sb2d5LCBPTFMzQ2xhc3MsIE9MUzNQcm9wZXJ0eSwgT0xTM0luZGl2aWR1YWwgfSBmcm9tIFwiLi9vbHMzLW1vZGVsXCI7XG5pbXBvcnQgeyBPTFM0T250b2xvZ3ksIE9MUzRDbGFzcywgT0xTNFByb3BlcnR5LCBPTFM0SW5kaXZpZHVhbCB9IGZyb20gXCIuL29sczQtbW9kZWxcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgVGhpbmdUeXBlTmFtZSB9IGZyb20gXCIuL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBhc0FycmF5LCBpbmZlclR5cGVGcm9tVHlwZUFycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbE9iamVjdChyZXNwb25zZTogYW55KSB7XG4gIGxldCB1c2VMZWdhY3k6IGJvb2xlYW47XG4gIGlmIChyZXNwb25zZVtcIl9lbWJlZGRlZFwiXSAhPT0gdW5kZWZpbmVkIHx8IHJlc3BvbnNlW1wibnVtYmVyT2ZUZXJtc1wiXSAhPT0gdW5kZWZpbmVkKSB1c2VMZWdhY3kgPSB0cnVlO1xuICBlbHNlIGlmIChyZXNwb25zZVtcImVsZW1lbnRzXCJdICE9PSB1bmRlZmluZWQgfHwgcmVzcG9uc2VbXCJudW1iZXJPZkNsYXNzZXNcIl0gIT09IHVuZGVmaW5lZCkgdXNlTGVnYWN5ID0gZmFsc2U7XG4gIGVsc2UgdGhyb3cgRXJyb3IoYFJlc3BvbnNlIHN0cnVjdHVyZSBkb2VzIG5vdCBjb3JyZWxhdGUgdG8gYW55IG9mIHRoZSBmZWF0dXJlZCByZXNwb25zZSBzdHJ1Y3R1cmVzOiBcXG4gJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZSl9YCk7XG5cbiAgbGV0IGVudGl0eVR5cGU6IFRoaW5nVHlwZU5hbWUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGlmICh1c2VMZWdhY3kpIHtcbiAgICBpZiAocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW50aXR5VHlwZSA9IFwib250b2xvZ3lcIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJ0ZXJtc1wiXSAhPT0gdW5kZWZpbmVkKSBlbnRpdHlUeXBlID0gXCJ0ZXJtXCI7XG4gICAgICBlbHNlIGlmIChyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcInByb3BlcnRpZXNcIl0gIT09IHVuZGVmaW5lZCkgZW50aXR5VHlwZSA9IFwicHJvcGVydHlcIjtcbiAgICAgIGVsc2UgaWYgKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wiaW5kaXZpZHVhbHNcIl0gIT09IHVuZGVmaW5lZCkgZW50aXR5VHlwZSA9IFwiaW5kaXZpZHVhbFwiO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBpZiAocmVzcG9uc2VbXCJlbGVtZW50c1wiXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbnRpdHlUeXBlID0gXCJvbnRvbG9neVwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChyZXNwb25zZVtcImVsZW1lbnRzXCJdWzBdID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRW1wdHkgcmVzcG9uc2UuXCIpO1xuXG4gICAgICBlbnRpdHlUeXBlID0gaW5mZXJUeXBlRnJvbVR5cGVBcnJheShyZXNwb25zZVtcImVsZW1lbnRzXCJdWzBdW1widHlwZVwiXSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGVudGl0eVR5cGUgPT09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoXCJFbnRpdHkgdHlwZSBjb3VsZCBub3QgYmUgY29ycmVjdGx5IGluZmVycmVkLlwiKTtcblxuICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3RXaXRoRW50aXR5VHlwZVdpdGhVc2VMZWdhY3kocmVzcG9uc2UsIGVudGl0eVR5cGUsIHVzZUxlZ2FjeSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1vZGVsT2JqZWN0V2l0aEVudGl0eVR5cGVXaXRoVXNlTGVnYWN5KHJlc3BvbnNlOiBhbnksIGVudGl0eVR5cGU6IHN0cmluZywgdXNlTGVnYWN5OiBib29sZWFuKTogVGhpbmcge1xuICBzd2l0Y2ggKGVudGl0eVR5cGUpIHtcbiAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM09udG9sb2d5KHJlc3BvbnNlKSA6IG5ldyBPTFM0T250b2xvZ3kocmVzcG9uc2UpO1xuXG4gICAgY2FzZSBcInRlcm1cIjpcbiAgICBjYXNlIFwiY2xhc3NcIjogLy8gYWxsb3cgQk9USCwgZXZlbiBpZiBpdCBzaG91bGQgYWN0dWFsbHkgYmUgXCJ0ZXJtXCJcbiAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM0NsYXNzKGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1widGVybXNcIl0pLCB1c2VMZWdhY3kpKSA6IG5ldyBPTFM0Q2xhc3MoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSkpO1xuXG4gICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICByZXR1cm4gdXNlTGVnYWN5ID8gbmV3IE9MUzNQcm9wZXJ0eShnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oYXNBcnJheShyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcInByb3BlcnRpZXNcIl0pLCB1c2VMZWdhY3kpKSA6IG5ldyBPTFM0UHJvcGVydHkoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSkpO1xuXG4gICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM0luZGl2aWR1YWwoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJpbmRpdmlkdWFsc1wiXSksIHVzZUxlZ2FjeSkpIDogbmV3IE9MUzRJbmRpdmlkdWFsKGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiZWxlbWVudHNcIl0pLCB1c2VMZWdhY3kpKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBlbnRpdHkgdHlwZSBcIicgKyBlbnRpdHlUeXBlICsgJ1wiLiBNdXN0IGJlIG9uZSBvZiB7XCJ0ZXJtXCIsIFwiY2xhc3NcIiwgXCJvbnRvbG9neVwiLCBcInByb3BlcnR5XCIsIFwiaW5kaXZpZHVhbFwifScpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgSlNPTiBvZiB0aGUgZW50aXR5IGluIGl0cyBkZWZpbmluZyBvbnRvbG9neSwgb3IsIGlmIG5vdCBhdmFpbGFibGUsIGp1c3QgdGhlIGZpcnN0IEpTT04gaW4gdGhlIGFycmF5LlxuICogSWYgb250b2xvZ3lJZCB3YXMgcHJvdmlkZWQgaW4gdGhlIHJlc3BvbnNlIHJlcXVlc3QsIHRoZSBhcnJheSBzaG91bGQgb25seSBjb250YWluIG9uZSBlbGVtZW50LCB0aHVzIHRoZSBmdW5jdGlvbmFsaXR5IGlzIGFzIGV4cGVjdGVkIGFzIHdlbGxcbiAqIEBwYXJhbSBlbnRpdHlBcnJheVJlc3BvbnNlIHRoZSBzdWItcmVzcG9uc2Ugb2YgdGhlIGluaXRpYWwgcXVlcnkgcmVzcG9uc2UgY29udGFpbmluZyBqdXN0IHRoZSBlbnRpdHkgYXJyYXlcbiAqIEBwYXJhbSB1c2VMZWdhY3kgYXBpIHZlcnNpb24gKG5lZWRlZCBiZWNhdXNlIGtleSBnaXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgZGVmaW5pbmcgb250b2xvZ3kgaGFzIGRpZmZlcmVudCBuYW1lcyBpbiBib3RoIHZlcnNpb25zKVxuICogQHBhcmFtIG9udG9sb2d5SWQgaWYgc3BlY2lmaWVkLCByZXR1cm5zIHRoZSBlbnRpdHkgaW4gdGhpcyBvbnRvbG9neSBpZiBhdmFpbGFibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihlbnRpdHlBcnJheVJlc3BvbnNlOiBhbnlbXSwgdXNlTGVnYWN5OiBib29sZWFuLCBvbnRvbG9neUlkPzogc3RyaW5nKSB7XG4gIGlmIChvbnRvbG9neUlkKSB7XG4gICAgY29uc3QgZW50aXR5SW5PbnRvbG9neSA9IGFzQXJyYXkoZW50aXR5QXJyYXlSZXNwb25zZSkuZmlsdGVyKChlbnRpdHkpID0+ICh1c2VMZWdhY3kgPyBlbnRpdHlbXCJvbnRvbG9neV9uYW1lXCJdIDogZW50aXR5W1wib250b2xvZ3lJZFwiXSkgPT0gb250b2xvZ3lJZCk7XG4gICAgaWYgKGVudGl0eUluT250b2xvZ3kubGVuZ3RoID4gMCkgcmV0dXJuIGVudGl0eUluT250b2xvZ3lbMF07XG4gICAgZWxzZSBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG9udG9sb2d5SWQgJHtvbnRvbG9neUlkfSBmb3IgZ2l2ZW4gZW50aXR5QXJyYXlSZXNwb25zZS5gKTtcbiAgfVxuXG4gIGNvbnN0IGRlZmluaW5nT250b2xvZ3lBcnIgPSBhc0FycmF5KGVudGl0eUFycmF5UmVzcG9uc2UpLmZpbHRlcigoZW50aXR5KSA9PiB1c2VMZWdhY3kgPyBlbnRpdHlbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSA6IGVudGl0eVtcImlzRGVmaW5pbmdPbnRvbG9neVwiXSk7XG4gIGlmIChkZWZpbmluZ09udG9sb2d5QXJyLmxlbmd0aCA+IDApIHJldHVybiBkZWZpbmluZ09udG9sb2d5QXJyWzBdO1xuICBlbHNlIGlmIChlbnRpdHlBcnJheVJlc3BvbnNlLmxlbmd0aCA+IDApIHJldHVybiBlbnRpdHlBcnJheVJlc3BvbnNlWzBdO1xuICBlbHNlIHRocm93IEVycm9yKFwiRW1wdHkgcmVzcG9uc2UuXCIpO1xufVxuIiwgImltcG9ydCB7RW50aXR5VHlwZU5hbWV9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHtIaWVyYXJjaHlCdWlsZGVyfSBmcm9tIFwiLi4vLi4vYXBpL0hpZXJhcmNoeUJ1aWxkZXJcIjtcbmltcG9ydCB7RW50aXR5RGF0YX0gZnJvbSBcIi4uLy4uL2FwcC90eXBlc1wiO1xuXG5leHBvcnQgdHlwZSBQYXJlbnRDaGlsZFJlbGF0aW9uID0ge1xuICAgIGNoaWxkSXJpOiBzdHJpbmcsXG4gICAgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBUcmVlTm9kZSB7XG4gICAgZW50aXR5RGF0YTogRW50aXR5RGF0YTtcbiAgICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ/OiBzdHJpbmc7XG4gICAgbG9hZGVkQ2hpbGRyZW46IFRyZWVOb2RlW107XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgbG9hZGluZzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBlbnRpdHlEYXRhXG4gICAgICogQHBhcmFtIGNoaWxkUmVsYXRpb25Ub1BhcmVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGVudGl0eURhdGE6IEVudGl0eURhdGEsIGNoaWxkUmVsYXRpb25Ub1BhcmVudD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmVudGl0eURhdGEgPSBlbnRpdHlEYXRhO1xuICAgICAgICB0aGlzLmxvYWRlZENoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hpbGRSZWxhdGlvblRvUGFyZW50ID0gY2hpbGRSZWxhdGlvblRvUGFyZW50O1xuICAgIH1cblxuICAgIGFkZENoaWxkKGNoaWxkOiBUcmVlTm9kZSkge1xuICAgICAgICB0aGlzLmxvYWRlZENoaWxkcmVuLnB1c2goY2hpbGQpXG4gICAgfVxufVxuXG5jb25zdCBERUZBVUxUX0lOQ0xVREVfT0JTT0xFVEVfRU5USVRJRVM6IGJvb2xlYW4gPSBmYWxzZSBhcyBjb25zdDtcbmNvbnN0IERFRkFVTFRfS0VFUF9FWFBBTlNJT05fU1RBVEU6IGJvb2xlYW4gPSB0cnVlIGFzIGNvbnN0O1xuXG5leHBvcnQgY2xhc3MgSGllcmFyY2h5IHtcbiAgICBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPjtcbiAgICBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+O1xuICAgIGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz47XG4gICAgcm9vdHM6IFRyZWVOb2RlW107IC8vIHN0b3JlcyB0aGUgdHJlZSBoaWVyYXJjaHlcbiAgICBwcm90ZWN0ZWQgYXBpOiBIaWVyYXJjaHlCdWlsZGVyO1xuICAgIG9udG9sb2d5SWQ6IHN0cmluZztcblxuICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBib29sZWFuID0gREVGQVVMVF9JTkNMVURFX09CU09MRVRFX0VOVElUSUVTO1xuICAgIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlTmFtZTtcbiAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBib29sZWFuID0gREVGQVVMVF9LRUVQX0VYUEFOU0lPTl9TVEFURTtcbiAgICBwcm90ZWN0ZWQgdXNlTGVnYWN5PzogYm9vbGVhbjtcblxuICAgIG1haW5FbnRpdHlJcmk/OiBzdHJpbmc7IC8vIHRvIGhpZ2hsaWdodCBpdCBpbiB0aGUgaGllcmFyY2h5XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczoge1xuICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPixcbiAgICAgICAgZW50aXRpZXNEYXRhOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhPixcbiAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBTZXQ8c3RyaW5nPixcbiAgICAgICAgcm9vdHM6IFRyZWVOb2RlW10sXG4gICAgICAgIGFwaTogSGllcmFyY2h5QnVpbGRlcixcbiAgICAgICAgb250b2xvZ3lJZDogc3RyaW5nLFxuICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcz86IGJvb2xlYW4sXG4gICAgICAgIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlTmFtZSxcbiAgICAgICAgbWFpbkVudGl0eUlyaT86IHN0cmluZyxcbiAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlcz86IGJvb2xlYW4sXG4gICAgICAgIHVzZUxlZ2FjeT86IGJvb2xlYW4sXG4gICAgfSkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgICAgICAgIGVudGl0aWVzRGF0YSxcbiAgICAgICAgICAgIGFsbENoaWxkcmVuUHJlc2VudCxcbiAgICAgICAgICAgIHJvb3RzLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgbWFpbkVudGl0eUlyaSxcbiAgICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgICAgdXNlTGVnYWN5LFxuICAgICAgICB9ID0gcHJvcHM7XG5cbiAgICAgICAgdGhpcy5wYXJlbnRDaGlsZFJlbGF0aW9ucyA9IHBhcmVudENoaWxkUmVsYXRpb25zO1xuICAgICAgICB0aGlzLmVudGl0aWVzRGF0YSA9IGVudGl0aWVzRGF0YTtcbiAgICAgICAgdGhpcy5hbGxDaGlsZHJlblByZXNlbnQgPSBhbGxDaGlsZHJlblByZXNlbnQ7XG4gICAgICAgIHRoaXMucm9vdHMgPSByb290cztcbiAgICAgICAgaWYoaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgIT0gdW5kZWZpbmVkKSB0aGlzLmluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gaW5jbHVkZU9ic29sZXRlRW50aXRpZXM7XG4gICAgICAgIGlmKGtlZXBFeHBhbnNpb25TdGF0ZXMgIT0gdW5kZWZpbmVkKSB0aGlzLmtlZXBFeHBhbnNpb25TdGF0ZXMgPSBrZWVwRXhwYW5zaW9uU3RhdGVzO1xuICAgICAgICB0aGlzLmFwaSA9IGFwaTtcbiAgICAgICAgdGhpcy5tYWluRW50aXR5SXJpID0gbWFpbkVudGl0eUlyaTtcbiAgICAgICAgdGhpcy5lbnRpdHlUeXBlID0gZW50aXR5VHlwZTtcbiAgICAgICAgdGhpcy5vbnRvbG9neUlkID0gb250b2xvZ3lJZDtcbiAgICAgICAgaWYodXNlTGVnYWN5ICE9IHVuZGVmaW5lZCkgdGhpcy51c2VMZWdhY3kgPSB1c2VMZWdhY3k7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWVyZ2VzIHRoZSBlbnRyaWVzIG9mIGB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zKG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSlgIGludG8gYG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbmAuIEhlcmUsXG4gICAgICogb25seSBub3QgYWxyZWFkeSBwcmVzZW50IGNoaWxkcmVuIGFyZSBhZGRlZCB0byBrZWVwIHRoZSBleHBhbnNpb24gc3RhdGUgb2YgdGhlIGFscmVhZHkgbG9hZGVkIGNoaWxkcmVuLlxuICAgICAqIGBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5gIGlzIHNvcnRlZCBhbHBoYWJldGljYWxseSBieSBkaXNwbGF5ZWQgbGFiZWxzIGFmdGVyd2FyZC5cbiAgICAgKlxuICAgICAqIEFTU1VNUFRJT05TOlxuICAgICAqIDEuIGB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zLmdldChub2RlVG9FeHBhbmQpYCBpcyBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgYnkgZGlzcGxheWVkIGxhYmVsc1xuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGVUb0V4cGFuZCB0aGUgbm9kZSBpbnNpZGUgdGhlIGhpZXJhcmNoeSAoYHRoaXMucm9vdHNgKSB0byBtZXJnZSB0aGUgY2hpbGRyZW4gaW50b1xuICAgICAqL1xuICAgIHByaXZhdGUgbWVyZ2VDaGlsZHJlbkludG9Mb2FkZWRDaGlsZHJlbihub2RlVG9FeHBhbmQ6IFRyZWVOb2RlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5wYXJlbnRDaGlsZFJlbGF0aW9ucy5nZXQobm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpKTtcbiAgICAgICAgaWYoY2hpbGRyZW4gPT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihgcGFyZW50Q2hpbGRSZWxhdGlvbnMgaGFzIG5vIGVudHJ5IGZvciBrZXkgXCIke25vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaX1cIiBhbHRob3VnaCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4uYCk7XG5cbiAgICAgICAgbGV0IGlMb2FkZWRDaGlsZHJlbiA9IDA7XG4gICAgICAgIGNvbnN0IG51bUxvYWRlZENoaWxkcmVuID0gbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuLmxlbmd0aDsgLy8gaW5pdGlhbCBsZW5ndGhcbiAgICAgICAgbGV0IGlDaGlsZHJlbiA9IDA7XG5cbiAgICAgICAgd2hpbGUoaUNoaWxkcmVuIDwgY2hpbGRyZW4ubGVuZ3RoICYmIGlMb2FkZWRDaGlsZHJlbiA8IG51bUxvYWRlZENoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZihub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5baUxvYWRlZENoaWxkcmVuXS5lbnRpdHlEYXRhLmlyaSA9PSBjaGlsZHJlbltpQ2hpbGRyZW5dLmNoaWxkSXJpKSB7XG4gICAgICAgICAgICAgICAgaUxvYWRlZENoaWxkcmVuKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgIG5vZGVUb0V4cGFuZC5hZGRDaGlsZChuZXcgVHJlZU5vZGUodGhpcy5lbnRpdGllc0RhdGEuZ2V0KGNoaWxkcmVuW2lDaGlsZHJlbl0uY2hpbGRJcmkpISwgY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZFJlbGF0aW9uVG9QYXJlbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlDaGlsZHJlbisrO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlKGlDaGlsZHJlbiA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIG5vZGVUb0V4cGFuZC5hZGRDaGlsZChuZXcgVHJlZU5vZGUodGhpcy5lbnRpdGllc0RhdGEuZ2V0KGNoaWxkcmVuW2lDaGlsZHJlbl0uY2hpbGRJcmkpISwgY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZFJlbGF0aW9uVG9QYXJlbnQpKTtcbiAgICAgICAgICAgIGlDaGlsZHJlbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc29ydCBhbHJlYWR5IGxvYWRlZCBjaGlsZHJlbiBpbiBjb3JyZWN0bHlcbiAgICAgICAgZm9yKGxldCBpTG9hZGVkQ2hpbGRyZW4gPSBudW1Mb2FkZWRDaGlsZHJlbiAtIDE7IGlMb2FkZWRDaGlsZHJlbiA+PSAwOyBpTG9hZGVkQ2hpbGRyZW4tLSkge1xuICAgICAgICAgICAgZm9yKGxldCBjdXJySWR4ID0gaUxvYWRlZENoaWxkcmVuICsgMTsgY3VycklkeCA8IG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbi5sZW5ndGg7IGN1cnJJZHgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJOb2RlID0gbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuW2N1cnJJZHhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZOb2RlID0gbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuW2N1cnJJZHggLSAxXTtcblxuICAgICAgICAgICAgICAgIGlmKChjdXJyTm9kZS5lbnRpdHlEYXRhLmxhYmVsIHx8IGN1cnJOb2RlLmVudGl0eURhdGEuaXJpKS5sb2NhbGVDb21wYXJlKHByZXZOb2RlLmVudGl0eURhdGEubGFiZWwgfHwgcHJldk5vZGUuZW50aXR5RGF0YS5pcmkpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeF0gPSBwcmV2Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuW2N1cnJJZHggLSAxXSA9IGN1cnJOb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvc2VOb2RlKG5vZGVUb0Nsb3NlOiBUcmVlTm9kZSkge1xuICAgICAgICBpZighdGhpcy5rZWVwRXhwYW5zaW9uU3RhdGVzKSB7XG4gICAgICAgICAgICBub2RlVG9DbG9zZS5sb2FkZWRDaGlsZHJlbiA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIGZvciBleHBhbnNpb24gb2YgYG5vZGVUb0V4cGFuZGAgaXMgYXZhaWxhYmxlIChpLmUuIHRoZXJlIGFyZSBhbHJlYWR5IGNoaWxkcmVuIGxvYWRlZCkgYW5kIGZldGNoZXMgaXQgaWYgbm90LlxuICAgICAqIEByZXR1cm4gYm9vbGVhbiBgdHJ1ZWAgaWYgaW5mb3JtYXRpb24gaGFkIHRvIGJlIGZldGNoZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAgICovXG4gICAgYXN5bmMgZmV0Y2hJbmZvcm1hdGlvbkZvckV4cGFuc2lvbihub2RlVG9FeHBhbmQ6IFRyZWVOb2RlKSB7XG4gICAgICAgIGlmKCFub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5oYXNDaGlsZHJlbikgdGhyb3cgRXJyb3IoYE5vZGUgY29udGFpbmluZyBpcmk9XCIke25vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaX1cIiBjb3VsZCBub3QgYmUgZXhwYW5kZWQ6IEVudGl0eSBpcyBub3QgZXhwYW5kYWJsZS5gKVxuXG4gICAgICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudCA9IHRoaXMuYWxsQ2hpbGRyZW5QcmVzZW50Lmhhcyhub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICBjb25zdCBub2RlUGFyZW50Q2hpbGRSZWxhdGlvbnMgPSB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zLmdldChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpIHx8IFtdO1xuICAgICAgICBpZighYWxsQ2hpbGRyZW5QcmVzZW50IHx8IG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbi5sZW5ndGggPD0gbm9kZVBhcmVudENoaWxkUmVsYXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYoIWFsbENoaWxkcmVuUHJlc2VudCkge1xuICAgICAgICAgICAgICAgIC8vIGR5bmFtaWNhbGx5IGxvYWQgY2hpbGRyZW4gZnJvbSBhcGlcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbjogRW50aXR5RGF0YVtdID0gKGF3YWl0IHRoaXMuYXBpLmxvYWRIaWVyYXJjaHlDaGlsZHJlbih7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVUb0V4cGFuZDogbm9kZVRvRXhwYW5kLFxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlOiB0aGlzLmVudGl0eVR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ6IHRoaXMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHRoaXMuaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeTogdGhpcy51c2VMZWdhY3ksXG4gICAgICAgICAgICAgICAgfSkpLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgIChhLCBiKSA9PiAoYS5sYWJlbCB8fCBhLmlyaSkubG9jYWxlQ29tcGFyZShiLmxhYmVsIHx8IGIuaXJpKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAvLyBhZGQgY2hpbGRyZW4gdG8gcGFyZW50Q2hpbGRSZWxhdGlvbnMgZm9yIGlyaSBvZiBub2RlVG9FeHBhbmRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJDaGlsZFJlbDogUGFyZW50Q2hpbGRSZWxhdGlvbltdID0gW107XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc0RhdGEuc2V0KGNoaWxkLmlyaSwgY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQucGFyZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyUmVsYXRpb24gPSBjaGlsZC5wYXJlbnRzLmZpbHRlcigocGFyKSA9PiBwYXIudmFsdWUgPT0gbm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhckNoaWxkUmVsLnB1c2goe2NoaWxkSXJpOiBjaGlsZC5pcmksIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogcGFyUmVsYXRpb24ubGVuZ3RoID4gMCAmJiBwYXJSZWxhdGlvblswXS5nZXRNZXRhZGF0YSgpID8gcGFyUmVsYXRpb25bMF0uZ2V0TWV0YWRhdGEoKVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXSA6IHVuZGVmaW5lZH0pO1xuICAgICAgICAgICAgICAgICAgICB9IC8vIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIGVsZW1lbnRcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zLnNldChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmksIHBhckNoaWxkUmVsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5tZXJnZUNoaWxkcmVuSW50b0xvYWRlZENoaWxkcmVuKG5vZGVUb0V4cGFuZCk7XG5cbiAgICAgICAgICAgIHRoaXMuYWxsQ2hpbGRyZW5QcmVzZW50LmFkZChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gICAgfVxufSIsICJpbXBvcnQgeyBTZWxlY3QgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZWxlY3RcIjtcbmltcG9ydCB7IFNlbGVjdFJlc3VsdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlbGVjdFJlc3VsdFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTU2VsZWN0IGltcGxlbWVudHMgU2VsZWN0IHtcbiAgcHJvcGVydGllczogU2VsZWN0UmVzdWx0W107XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogU2VsZWN0UmVzdWx0W10pIHtcbiAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gIGdldFRvdGFsU2VhcmNoUmVzdWx0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1xuICB9XG5cblxuICB9IiwgImltcG9ydCB7IFNlbGVjdFJlc3VsdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlbGVjdFJlc3VsdFwiO1xuaW1wb3J0IHsgVGhpbmdUeXBlTmFtZSB9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgT0xTU2VsZWN0UmVzdWx0IGltcGxlbWVudHMgU2VsZWN0UmVzdWx0IHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5wcm9wZXJ0aWVzW1wiZGVzY3JpcHRpb25cIl07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdGlvbi5qb2luKFwiIFwiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZXNjcmlwdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cblxuICBnZXRJcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXJpXCJdO1xuICB9XG5cbiAgZ2V0TGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl07XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5X25hbWVcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWUge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ0eXBlXCJdO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcInRlcm1zXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgICAgcmV0dXJuIFwicHJvcGVydGllc1wiO1xuICAgICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgICAgcmV0dXJuIFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRTaG9ydEZvcm0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRfZm9ybVwiXTtcbiAgfVxuXG4gIGdldEFwaVNvdXJjZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldEFwaVNvdXJjZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCJcbiAgfVxufSIsICJpbXBvcnQgeyBTZWxlY3RSZXN1bHQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZWxlY3RSZXN1bHRcIjtcbmltcG9ydCB7IFRoaW5nVHlwZU5hbWUgfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGNsYXNzIFRzNG5mZGlTZWFyY2hSZXN1bHQgaW1wbGVtZW50cyBTZWxlY3RSZXN1bHQge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uLmpvaW4oXCIgXCIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWUge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ0eXBlXCJdO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcInRlcm1zXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgICAgcmV0dXJuIFwicHJvcGVydGllc1wiO1xuICAgICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgICAgcmV0dXJuIFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRTaG9ydEZvcm0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRfZm9ybVwiXTtcbiAgfVxuXG4gIGdldEFwaVNvdXJjZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic291cmNlX25hbWVcIl07XG4gIH1cblxuICBnZXRBcGlTb3VyY2VFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzb3VyY2VcIl07XG4gIH1cbn0iLCAiaW1wb3J0IGF4aW9zLCB7IEF4aW9zSW5zdGFuY2UsIEF4aW9zUmVxdWVzdENvbmZpZyB9IGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHsgYXNBcnJheSwgZ2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeCwgZ2V0VXNlTGVnYWN5LCBwbHVyYWxpemVUeXBlIH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBjcmVhdGVNb2RlbE9iamVjdCB9IGZyb20gXCIuLi9tb2RlbC9Nb2RlbE9iamVjdENyZWF0b3JcIjtcbmltcG9ydCB7IE9udG9sb2d5LCBPbnRvbG9naWVzLCBFbnRpdHksIFRoaW5nLCBJbmRpdmlkdWFsIH0gZnJvbSBcIi4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IE9MUzNPbnRvbG9naWVzLCBPTFMzT250b2xvZ3kgfSBmcm9tIFwiLi4vbW9kZWwvb2xzMy1tb2RlbFwiO1xuaW1wb3J0IHtcbiAgY2xhc3NUeXBlTmFtZXMsIGVudGl0eVR5cGVOYW1lcywgb250b2xvZ3lUeXBlTmFtZXMsIHRoaW5nVHlwZU5hbWVzLFxuICBFbnRpdHlUeXBlTmFtZSwgVGhpbmdUeXBlTmFtZSxcbiAgaXNDbGFzc1R5cGVOYW1lLCBpc0VudGl0eVR5cGVOYW1lLCBpc0luZGl2aWR1YWxUeXBlTmFtZSwgaXNPbnRvbG9neVR5cGVOYW1lXG59IGZyb20gXCIuLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgSGllcmFyY2h5LCBQYXJlbnRDaGlsZFJlbGF0aW9uLCBUcmVlTm9kZSB9IGZyb20gXCIuLi9tb2RlbC9pbnRlcmZhY2VzL0hpZXJhcmNoeVwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL21vZGVsL1JlaWZpZWRcIjtcbmltcG9ydCB7IEJ1aWxkSGllcmFyY2h5UHJvcHMsIEhpZXJhcmNoeUJ1aWxkZXIsIEhpZXJhcmNoeUlyaVByb3AsIExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzIH0gZnJvbSBcIi4vSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHsgT0xTU2VsZWN0IH0gZnJvbSBcIi4uL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3RcIjtcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gXCIuLi9tb2RlbC9pbnRlcmZhY2VzL1NlbGVjdFwiO1xuaW1wb3J0IHsgT0xTU2VsZWN0UmVzdWx0IH0gZnJvbSBcIi4uL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3RSZXN1bHRcIjtcbmltcG9ydCB7IFRzNG5mZGlTZWFyY2hSZXN1bHQgfSBmcm9tIFwiLi4vbW9kZWwvdHM0bmZkaS1tb2RlbC9UczRuZmRpU2VhcmNoUmVzdWx0XCI7XG5pbXBvcnQgeyBFbnRpdHlEYXRhIH0gZnJvbSBcIi4uL2FwcC90eXBlc1wiO1xuXG4vLyB1c2VkIHRvIGZpbHRlciBlbnRpdGllcyBub3QgYmUgc2hvd24gaW4gaGllcmFyY2h5XG5mdW5jdGlvbiBpc1RvcChpcmk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXJpID09PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1RoaW5nXCIgfHwgaXJpID09PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1RvcE9iamVjdFByb3BlcnR5XCI7XG59XG5cbmludGVyZmFjZSBQYWdpbmF0aW9uUGFyYW1zIHtcbiAgc2l6ZT86IHN0cmluZztcbiAgcGFnZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFNvcnRpbmdQYXJhbXMge1xuICBzb3J0RmllbGQ6IHN0cmluZyB8IG51bWJlcjtcbiAgc29ydERpcj86IFwiYXNjXCIgfCBcImRlc2NcIjtcbn1cblxuaW50ZXJmYWNlIENvbnRlbnRQYXJhbXMge1xuICBvbnRvbG9neUlkPzogc3RyaW5nO1xuICB0ZXJtSXJpPzogc3RyaW5nO1xuICBwcm9wZXJ0eUlyaT86IHN0cmluZztcbiAgaW5kaXZpZHVhbElyaT86IHN0cmluZztcbiAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XG5cbn1cblxuZXhwb3J0IHR5cGUgYXBpQ2FsbEZuID0gKHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbiwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxhbnk+O1xuXG5pbnRlcmZhY2UgU2VhcmNoUXVlcnlQYXJhbXMge1xuICBxdWVyeTogc3RyaW5nO1xuICBleGFjdE1hdGNoPzogYm9vbGVhbjtcbiAgc2hvd09ic29sZXRlVGVybXM/OiBib29sZWFuO1xuICB0eXBlcz86IHN0cmluZztcbiAgb250b2xvZ3k/OiBzdHJpbmc7XG4gIGdyb3VwQnlJcmk/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgU2VsZWN0UXVlcnlQYXJhbXMge1xuICBxdWVyeTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU3VnZ2VzdFF1ZXJ5UGFyYW1zIHtcbiAgcXVlcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEpzVHJlZVBhcmFtcyB7XG4gIHZpZXdNb2RlPzogc3RyaW5nO1xuICBzaWJsaW5ncz86IGJvb2xlYW47XG4gIGNoaWxkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBKU1RyZWVOb2RlID0ge1xuICBpZDogc3RyaW5nXG4gIHBhcmVudDogc3RyaW5nXG4gIGlyaTogc3RyaW5nXG4gIHRleHQ6IHN0cmluZ1xuICBzdGF0ZToge1xuICAgIG9wZW5lZDogYm9vbGVhblxuICB9XG4gIGNoaWxkcmVuOiBib29sZWFuXG4gIGFfYXR0cjoge1xuICAgIGlyaTogc3RyaW5nXG4gICAgb250b2xvZ3lfbmFtZTogc3RyaW5nXG4gICAgdGl0bGU6IHN0cmluZ1xuICAgIGNsYXNzOiBzdHJpbmdcbiAgfVxuICBvbnRvbG9neV9uYW1lOiBzdHJpbmdcbn1cblxuY29uc3QgREVGQVVMVF9TRUFSQ0hfUkVTVUxUU19QRVJfUEFHRSA9IDEwO1xuXG5leHBvcnQgY2xhc3MgT2xzQXBpIGltcGxlbWVudHMgSGllcmFyY2h5QnVpbGRlciB7XG4gIHByaXZhdGUgYXhpb3NJbnN0YW5jZTogQXhpb3NJbnN0YW5jZTtcblxuICBjb25zdHJ1Y3RvcihhcGk6IHN0cmluZykge1xuICAgIHRoaXMuYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgICBiYXNlVVJMOiBhcGksXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIENvbnRlbnRfVHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvckdldChwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcz86IFNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcpIHtcbiAgICBpZiAoc29ydGluZ1BhcmFtcykge1xuICAgICAgcmV0dXJuIHsgLi4ucGFnaW5hdGlvblBhcmFtcywgc29ydDogYCR7c29ydGluZ1BhcmFtcy5zb3J0RmllbGR9LCR7c29ydGluZ1BhcmFtcy5zb3J0RGlyfWAsIC4uLmNvbnRlbnRQYXJhbXMsIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpIH07XG4gICAgfVxuICAgIHJldHVybiB7IC4uLnBhZ2luYXRpb25QYXJhbXMsIC4uLmNvbnRlbnRQYXJhbXMsIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcykge1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgcm93czogcGFnaW5hdGlvblBhcmFtcz8uc2l6ZSxcbiAgICB9O1xuXG4gICAgaWYgKHBhZ2luYXRpb25QYXJhbXM/LnBhZ2UpIHtcbiAgICAgIGlmIChwYWdpbmF0aW9uUGFyYW1zLnNpemUpIHtcbiAgICAgICAgcGFyYW1zLnN0YXJ0ID0gKCtwYWdpbmF0aW9uUGFyYW1zLnBhZ2UgKiArcGFnaW5hdGlvblBhcmFtcy5zaXplKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLnN0YXJ0ID0gKCtwYWdpbmF0aW9uUGFyYW1zLnBhZ2UgKiBERUZBVUxUX1NFQVJDSF9SRVNVTFRTX1BFUl9QQUdFKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFyYW1zRm9yU2VhcmNoKHF1ZXJ5UGFyYW1zOiBTZWFyY2hRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHRzNG5mZGlHYXRld2F5PzogYm9vbGVhbikge1xuXG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBleGFjdDogcXVlcnlQYXJhbXMuZXhhY3RNYXRjaCxcbiAgICAgIG9ic29sZXRlczogcXVlcnlQYXJhbXMuc2hvd09ic29sZXRlVGVybXMsXG4gICAgfTtcblxuICAgIGlmICh0czRuZmRpR2F0ZXdheSkge1xuICAgICAgcGFyYW1zLnF1ZXJ5ID0gcXVlcnlQYXJhbXMucXVlcnlcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnEgPSBxdWVyeVBhcmFtcy5xdWVyeVxuICAgIH1cblxuICAgIGlmIChxdWVyeVBhcmFtcy5ncm91cEJ5SXJpKSB7XG4gICAgICBwYXJhbXMuZ3JvdXBGaWVsZCA9IHF1ZXJ5UGFyYW1zLmdyb3VwQnlJcmk7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnR5cGVzKSB7XG4gICAgICBwYXJhbXMudHlwZSA9IHF1ZXJ5UGFyYW1zLnR5cGVzO1xuICAgIH1cblxuICAgIGlmIChxdWVyeVBhcmFtcy5vbnRvbG9neSkge1xuICAgICAgcGFyYW1zLm9udG9sb2d5ID0gcXVlcnlQYXJhbXMub250b2xvZ3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCAuLi50aGlzLmJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zKSwgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcikgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiBmb3IgY3JlYXRpbmcgYW4gb2JqZWN0IGZyb20gc3RyaW5nIG9mIHBhcmFtZXRlcnMgZm9yIGF4aW9zIGlucHV0IHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAocGFyYW1ldGVyKSB7XG4gICAgICBjb25zdCBwYXJhbXNTcGxpdHRlZCA9IHBhcmFtZXRlci5zcGxpdChcIiZcIilcblxuICAgICAgcGFyYW1zU3BsaXR0ZWQuZm9yRWFjaCgocGFyYW06IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBrZXk6IHN0cmluZyA9IHBhcmFtLnNwbGl0KFwiPVwiKVswXVxuICAgICAgICBjb25zdCB2YWx1ZTogc3RyaW5nID0gcGFyYW0uc3BsaXQoXCI9XCIpWzFdXG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXJhbXNGb3JTZWxlY3QocXVlcnlQYXJhbXM6IFN1Z2dlc3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXJzPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBxOiBxdWVyeVBhcmFtcy5xdWVyeSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCAuLi50aGlzLmJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zKSwgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcnMpIH07XG4gIH1cblxuXG4gIHByaXZhdGUgYnVpbGRQYXJhbXNGb3JTdWdnZXN0KHF1ZXJ5UGFyYW1zOiBTdWdnZXN0UXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVycz86IHN0cmluZykge1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgcTogcXVlcnlQYXJhbXMucXVlcnksXG4gICAgfTtcblxuICAgIHJldHVybiB7IC4uLnBhcmFtcywgLi4udGhpcy5idWlsZFBhZ2luYXRpb25QYXJhbXMocGFnaW5hdGlvblBhcmFtcyksIC4uLmNvbnRlbnRQYXJhbXMsIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXJzKSB9O1xuICB9XG5cbiAgLy8gVE9ETzogSXMgdGhpcyB0aGUgYmVoYXZpb3Igd2Ugd2FudCAoZXNwZWNpYWxseSB0aHJvd2luZyBlcnJvciBmb3IgZW1wdHkgcmVzcG9uc2UpP1xuICBwcml2YXRlIGNoZWNrX2Zvcl9lcnJvcnMocmVzcG9uc2U6IGFueSk6IGFueSB7XG4gICAgLy8gcmVzb3VyY2Ugbm90IGZvdW5kL2lsbGVnYWwgYXJndW1lbnQgZXhjZXB0aW9uIGluIHNlbWFudGljbG9va3VwXG4gICAgaWYgKHJlc3BvbnNlW1wiZXJyb3JcIl0pIHtcbiAgICAgIHRocm93IEVycm9yKHJlc3BvbnNlW1wic3RhdHVzXCJdICsgXCIgXCIgKyByZXNwb25zZVtcImVycm9yXCJdICsgXCIgLSBcIiArIHJlc3BvbnNlW1wibWVzc2FnZVwiXSArIFwiIC0gXCIgKyByZXNwb25zZVtcImV4Y2VwdGlvblwiXSArIFwiIGF0IFwiICsgcmVzcG9uc2VbXCJwYXRoXCJdKTtcbiAgICB9XG4gICAgLy8gZW1wdHkgcmVzcG9uc2UgLSBjYW4gYmUgY2F1Z2h0IGlmIHRoaXMgaXMgZXhwZWN0ZWQsIGUuZy4gZm9yIGZldGNoaW5nIGluc3RhbmNlc1xuICAgIGlmIChyZXNwb25zZVtcInBhZ2VcIl0gIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZVtcInBhZ2VcIl1bXCJ0b3RhbEVsZW1lbnRzXCJdID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIlJlc3BvbnNlIGNvbnRhaW5zIDAgZWxlbWVudHNcIik7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbWFrZUNhbGwodXJsOiBzdHJpbmcsIGNvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnPGFueT4gfCB1bmRlZmluZWQsIHVzZUxlZ2FjeTogYm9vbGVhbikge1xuICAgIGNvbnN0IGFwaVZlcnNpb25QcmVmaXggPSBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwiXCIgOiBcInYyL1wiO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYXBpVmVyc2lvblByZWZpeCArIHVybCwgY29uZmlnKSkuZGF0YTtcbiAgICByZXR1cm4gdGhpcy5jaGVja19mb3JfZXJyb3JzKHJlc3BvbnNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPbnRvbG9naWVzOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJvbnRvbG9naWVzXCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcikgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYWxsIG9udG9sb2dpZXMuIEN1cnJlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgdXNlTGVnYWN5IHNpbmNlIHBhcmFtZXRlcnMgYXJlbid0IGFsbG93ZWQgaW4gdGhlIE9MUyB2MiBBUEkgb250b2xvZ2llcyBlbmRwb2ludFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0T250b2xvZ2llc0RhdGEocGFyYW1ldGVyPzogc3RyaW5nKTogUHJvbWlzZTxPbnRvbG9naWVzPiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGxldCBvbnRvbG9naWVzRGF0YTogT0xTM09udG9sb2d5W10gPSBbXTtcblxuICAgIGxldCBwYWdlTnVtID0gMDtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IDUwMDtcblxuICAgIGRvIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRPbnRvbG9naWVzKHsgc2l6ZTogcGFnZVNpemUudG9TdHJpbmcoKSwgcGFnZTogcGFnZU51bS50b1N0cmluZygpIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBwYXJhbWV0ZXIpOyAvLyBhc3N1bWluZyB0aGVyZSBhcmUgbm8gbW9yZSB0aGFuIDUwMCBvbnRvbG9naWVzXG4gICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZVtcIl9lbWJlZGRlZFwiXSB8fCAhcmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJvbnRvbG9naWVzXCJdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9udG9sb2dpZXMgZGF0YSBub3QgZm91bmRcIik7IC8vVE9ETyBjb25zaXN0ZW50IGVycm9yIGhhbmRsaW5nXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIG9udG9sb2dpZXNEYXRhID0gb250b2xvZ2llc0RhdGEuY29uY2F0KHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wib250b2xvZ2llc1wiXS5tYXAoKG9udG9sb2d5RGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0KG9udG9sb2d5RGF0YSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcGFnZU51bSArPSAxO1xuICAgIH0gd2hpbGUgKHBhZ2VOdW0gPCByZXNwb25zZVtcInBhZ2VcIl1bXCJ0b3RhbFBhZ2VzXCJdKTtcblxuICAgIHJldHVybiBuZXcgT0xTM09udG9sb2dpZXMob250b2xvZ2llc0RhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYWxsIHRlcm1zIGZyb20gdGhlIGFwaVxuICAgKiBAcGFyYW0gcGFnaW5hdGlvblBhcmFtc1xuICAgKiBAcGFyYW0gc29ydGluZ1BhcmFtc1xuICAgKiBAcGFyYW0gY29udGVudFBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSBgdXNlTGVnYWN5YCBEZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIGB1c2VMZWdhY3lgLCBgXCJ0ZXJtc1wiYCAoYHVzZUxlZ2FjeSA9PSB0cnVlYCkgb3IgYFwiY2xhc3Nlc1wiYCAoYHVzZUxlZ2FjeSA9PSBmYWxzZWApIHdpbGwgYmUgdXNlZCBpbiB0aGUgcXVlcnkgdXJsXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVybXM6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCB0eXBlUHJlZml4ID0gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcInRlcm1zXCIgOiBcImNsYXNzZXNcIjtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbCh0eXBlUHJlZml4LCB7IHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvckdldChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zKSB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJvcGVydGllczogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwicHJvcGVydGllc1wiLCB7IHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvckdldChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zKSB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SW5kaXZpZHVhbHM6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4pID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcImluZGl2aWR1YWxzXCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMpIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPbnRvbG9neTogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkLCBwYXJhbXMsIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGFuIGVudGl0eSBmcm9tIHRoZSAvZW50aXRpZXMgZW5kcG9pbnQgaW4gdGhlIGFwaSBpbiBvbHM0LlxuICAgKiBBbHdheXMgcmVxdWlyZXMgdGhlIHJlc3BlY3RpdmUgb2JqZWN0IElSSSBpbiBjb250ZW50UGFyYW1zIHRvIGJlIHNldFxuICAgKiBJZiBvbnRvbG9neUlkIGlzIHVuZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVlcmllZCBmcm9tIGFsbCBvbnRvbG9naWVzLCBjb250YWluaW5nIGEgbGlzdCBvZiByZXN1bHRzXG4gICAqIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3lcbiAgICovXG4gIHB1YmxpYyBnZXRFbnRpdHk6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCBxdWVyeVByZWZpeCA9IGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgPyBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkICsgXCIvXCIgOiBcIlwiXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgaXJpOiBjb250ZW50UGFyYW1zPy50ZXJtSXJpLFxuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcilcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKHF1ZXJ5UHJlZml4ICsgXCJlbnRpdGllc1wiLCB7IHBhcmFtczogcGFyYW1zIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGEgdGVybSBmcm9tIHRoZSBhcGlcbiAgICogQHBhcmFtIHBhZ2luYXRpb25QYXJhbXNcbiAgICogQHBhcmFtIHNvcnRpbmdQYXJhbXNcbiAgICogQHBhcmFtIGBjb250ZW50UGFyYW1zYCBBbHdheXMgcmVxdWlyZXMgdGhlIHJlc3BlY3RpdmUgb2JqZWN0IElSSSBpbiBgY29udGVudFBhcmFtc2AgdG8gYmUgc2V0LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiBvbnRvbG9neUlkIGlzIHVuZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVlcmllZCBmcm9tIGFsbCBvbnRvbG9naWVzLCBjb250YWluaW5nIGEgbGlzdCBvZiByZXN1bHRzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiBhbiBvbnRvbG9neUlkIGlzIHByb3ZpZGVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgb25seSBjb250YWluIHRoZSBvYmplY3QgZnJvbSB0aGF0IHNwZWNpZmljIG9udG9sb2d5LlxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSBgdXNlTGVnYWN5YCBEZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIGB1c2VMZWdhY3lgLCBgXCJ0ZXJtc1wiYCAoYHVzZUxlZ2FjeSA9PSB0cnVlYCkgb3IgYFwiY2xhc3Nlc1wiYCAoYHVzZUxlZ2FjeSA9PSBmYWxzZWApIHdpbGwgYmUgdXNlZCBpbiB0aGUgcXVlcnkgdXJsXG4gICAqIEBwYXJhbSBhYm9ydFNpZ25hbFxuICAgKi9cbiAgcHVibGljIGdldFRlcm06IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4sIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpID0+IHtcbiAgICBjb25zdCBvbnRvbG9neVByZWZpeCA9IGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgPyBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkICsgXCIvXCIgOiBcIlwiXG4gICAgY29uc3QgdHlwZVByZWZpeCA9IGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJ0ZXJtc1wiIDogXCJjbGFzc2VzXCI7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgaXJpOiBjb250ZW50UGFyYW1zPy50ZXJtSXJpLFxuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcilcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKG9udG9sb2d5UHJlZml4ICsgdHlwZVByZWZpeCwgeyBwYXJhbXM6IHBhcmFtcywgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdXNlZCB0byBmZXRjaCBhIHByb3BlcnR5IGZyb20gdGhlIGFwaSBpbiBvbHMzLlxuICAgKiBBbHdheXMgcmVxdWlyZXMgdGhlIHJlc3BlY3RpdmUgb2JqZWN0IElSSSBpbiBjb250ZW50UGFyYW1zIHRvIGJlIHNldFxuICAgKiBJZiBvbnRvbG9neUlkIGlzIHVuZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVlcmllZCBmcm9tIGFsbCBvbnRvbG9naWVzLCBjb250YWluaW5nIGEgbGlzdCBvZiByZXN1bHRzXG4gICAqIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3lcbiAgICovXG4gIHB1YmxpYyBnZXRQcm9wZXJ0eTogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbiwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCA/IFwib250b2xvZ2llcy9cIiArIGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgKyBcIi9cIiA6IFwiXCJcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LnByb3BlcnR5SXJpLFxuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcilcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKHF1ZXJ5UHJlZml4ICsgXCJwcm9wZXJ0aWVzXCIsIHsgcGFyYW1zOiBwYXJhbXMsIHNpZ25hbDogYWJvcnRTaWduYWwgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYW4gaW5kaXZpZHVhbCBmcm9tIHRoZSBhcGkgaW4gb2xzMy5cbiAgICogQWx3YXlzIHJlcXVpcmVzIHRoZSByZXNwZWN0aXZlIG9iamVjdCBJUkkgaW4gY29udGVudFBhcmFtcyB0byBiZSBzZXRcbiAgICogSWYgb250b2xvZ3lJZCBpcyB1bmRlZmluZWQgaW4gY29udGVudFBhcmFtcywgdGhlIG9iamVjdCB3aWxsIGJlIHF1ZXJpZWQgZnJvbSBhbGwgb250b2xvZ2llcywgY29udGFpbmluZyBhIGxpc3Qgb2YgcmVzdWx0c1xuICAgKiBJZiBhbiBvbnRvbG9neUlkIGlzIHByb3ZpZGVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgb25seSBjb250YWluIHRoZSBvYmplY3QgZnJvbSB0aGF0IHNwZWNpZmljIG9udG9sb2d5XG4gICAqL1xuICBwdWJsaWMgZ2V0SW5kaXZpZHVhbDogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbiwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCA/IFwib250b2xvZ2llcy9cIiArIGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgKyBcIi9cIiA6IFwiXCJcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LmluZGl2aWR1YWxJcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwocXVlcnlQcmVmaXggKyBcImluZGl2aWR1YWxzXCIsIHsgcGFyYW1zOiBwYXJhbXMsIHNpZ25hbDogYWJvcnRTaWduYWwgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaCA9IGFzeW5jIChxdWVyeVBhcmFtczogU2VhcmNoUXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM6IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwic2VhcmNoXCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yU2VhcmNoKHF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpLCBzaWduYWw6IGFib3J0U2lnbmFsIH0sIHRydWUpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdCA9IGFzeW5jIChxdWVyeVBhcmFtczogU2VsZWN0UXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcInNlbGVjdFwiLCB7IHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvclNlbGVjdChxdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSB9LCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2hUczRuZmRpR2F0ZXdheSA9IGFzeW5jIChxdWVyeVBhcmFtczogU2VsZWN0UXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nLCB0czRuZmRpR2F0ZXdheT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwic2VhcmNoXCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yU2VhcmNoKHF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHRzNG5mZGlHYXRld2F5KSB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBzZWxlY3QgZGF0YS5cbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXG4gICAqIEBwYXJhbSBwYWdpbmF0aW9uUGFyYW1zXG4gICAqIEBwYXJhbSBjb250ZW50UGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTZWxlY3REYXRhKHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHRzNG5mZGlHYXRld2F5PzogYm9vbGVhbik6IFByb21pc2U8U2VsZWN0PiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGxldCBzZWxlY3REYXRhOiBPTFNTZWxlY3RSZXN1bHRbXSA9IFtdO1xuICAgIGxldCByZXN1bHROdW0gPSAwO1xuXG4gICAgaWYgKHRzNG5mZGlHYXRld2F5KSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VhcmNoVHM0bmZkaUdhdGV3YXkoXG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgICAgICBjb250ZW50UGFyYW1zLFxuICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgIHRzNG5mZGlHYXRld2F5XG4gICAgICApO1xuICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWxlY3QgZGF0YSBub3QgZm91bmRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3REYXRhID0gc2VsZWN0RGF0YS5jb25jYXQocmVzcG9uc2UubWFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IFRzNG5mZGlTZWFyY2hSZXN1bHQoZGF0YSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VsZWN0KFxuICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgcGFnaW5hdGlvblBhcmFtcyxcbiAgICAgICAgY29udGVudFBhcmFtcyxcbiAgICAgICAgcGFyYW1ldGVyXG4gICAgICApO1xuICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcImRvY3NcIl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0IGRhdGEgbm90IGZvdW5kXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0RGF0YSA9IHNlbGVjdERhdGEuY29uY2F0KHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJkb2NzXCJdLm1hcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPTFNTZWxlY3RSZXN1bHQoZGF0YSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE9MU1NlbGVjdChzZWxlY3REYXRhKTtcbiAgfVxuXG5cblxuICBwdWJsaWMgc3VnZ2VzdCA9IGFzeW5jIChxdWVyeVBhcmFtczogU3VnZ2VzdFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZyk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJzdWdnZXN0XCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yU3VnZ2VzdChxdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRUZXJtVHJlZTpcbiAgICogVGhpcyBtZXRob2QgYWx3YXlzIHJlcXVpcmVzIGFuIG9udG9sb2d5SWQgaW4gY29udGVudFBhcmFtc1xuICAgKiAxKSBJZiBubyB0ZXJtSXJpIGlzIGRlZmluZWQgaW4gY29udGVudFBhcmFtcywgdGhlIG9udG9sb2d5IHJvb3RzIHdpbGwgYmUgcXVlcmllZFxuICAgKiAyKSBJZiBhIHRlcm1JcmkgaXMgZGVmaW5lZCBidXQgbm8gY2hpbGQgaW4ganNUcmVlUGFyYW1zLCB0aGUgaGllcmFyY2h5IGNvbnRhaW5pbmcgdGhhdCB0ZXJtIHdpbGwgYmUgcXVlcmllZFxuICAgKiAzKSBJZiBhIHRlcm1JcmkgaXMgZGVmaW5lZCBhbmQgYWxzbyBhIGNoaWxkIGluIGpzVHJlZVBhcmFtcywgdGhlIHN1YmhpZXJhcmNoeSBvZiB0aGF0IGNoaWxkIHdpbGwgYmUgcXVlcmllZFxuICAgKi9cbiAgcHVibGljIGdldFRlcm1UcmVlID0gYXN5bmMgKGNvbnRlbnRQYXJhbXM6IENvbnRlbnRQYXJhbXMsIHRyZWVQYXJhbXM6IEpzVHJlZVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zKSA9PiB7XG4gICAgbGV0IGJhc2VSZXF1ZXN0ID0gXCJvbnRvbG9naWVzL1wiICsgY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCArIFwiL3Rlcm1zXCJcbiAgICBpZiAoIWNvbnRlbnRQYXJhbXMudGVybUlyaSkgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0ICsgXCIvcm9vdHNcIikpLmRhdGE7IC8vMSlcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgYmFzZVJlcXVlc3QgPSBiYXNlUmVxdWVzdCArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChjb250ZW50UGFyYW1zPy50ZXJtSXJpKSkgKyBcIi9qc3RyZWVcIlxuICAgIGlmICh0cmVlUGFyYW1zLmNoaWxkKSByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYmFzZVJlcXVlc3QgKyBcIi9jaGlsZHJlbi9cIiArIHRyZWVQYXJhbXMuY2hpbGQpKS5kYXRhOyAvLzMpXG4gICAgZWxzZSByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYmFzZVJlcXVlc3QsIHsgcGFyYW1zOiB0cmVlUGFyYW1zIH0pKS5kYXRhOyAvLzIpXG4gIH1cblxuICBwdWJsaWMgZ2V0VGVybVJlbGF0aW9ucyA9IGFzeW5jIChjb250ZW50UGFyYW1zOiBDb250ZW50UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcz86IFNvcnRpbmdQYXJhbXMpID0+IHtcbiAgICBsZXQgYmFzZVJlcXVlc3QgPSBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkICsgXCIvdGVybXNcIlxuICAgIGlmICghY29udGVudFBhcmFtcy50ZXJtSXJpKSByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYmFzZVJlcXVlc3QgKyBcIi9yb290c1wiKSkuZGF0YTsgLy8xKVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBiYXNlUmVxdWVzdCA9IGJhc2VSZXF1ZXN0ICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnRQYXJhbXM/LnRlcm1JcmkpKSArIFwiL2dyYXBoXCI7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0KSkuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3aG9sZSBlbnRpdHkgcmVzcG9uc2UganNvbiB3aXRoIGEgY29tZm9ydGFibGUgd3JhcHBlciBoYW5kbGluZyBlbnRpdHlUeXBlLCBvbnRvbG9neUlkIGFuZCB1c2VMZWdhY3lcbiAgICogQHBhcmFtIGlyaVxuICAgKiBAcGFyYW0gZW50aXR5VHlwZSBxdWVyaWVzIHNwZWNpZmljIHJvdXRlcyBpZiBwcm92aWRlZCBhbmQgaW5mZXJzIHR5cGUgaWYgbm90XG4gICAqIEBwYXJhbSBvbnRvbG9neUlkIHF1ZXJpZXMgb250b2xvZ3kgcm91dGVzIGlmIHByb3ZpZGVkLCBvdGhlcndpc2Ugbm90XG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIHVzZUxlZ2FjeSBhZmZlY3RzIGhvdyBlbnRpdHlUeXBlIGlzIGluZmVycmVkIGlmIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEVudGl0eVJlc3BvbnNlKGlyaTogc3RyaW5nLCBlbnRpdHlUeXBlPzogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGlmICghaXJpKSB0aHJvdyBFcnJvcignTm8gSVJJIHByb3ZpZGVkJyk7XG5cbiAgICBpZiAoZW50aXR5VHlwZSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEVudGl0eVdpdGhFbnRpdHlUeXBlUHJvdmlkZWQoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRFbnRpdHlXaXRoSW5mZXJyZWRFbnRpdHlUeXBlKGlyaSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0RW50aXR5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaSB9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gRW50aXR5IG9iamVjdCAoaW1wbGVtZW50aW5nICdDbGFzcycsICdQcm9wZXJ0eScgb3IgJ0luZGl2aWR1YWwnKS5cbiAgICogSW5kaXJlY3RseSBmZXRjaGVzIHRoZSByZXNwb25zZSBKU09OIGZvciB0aGUgc3BlY2lmaWVkIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyIGFuZCBBUEkgdmVyc2lvbiAodXNlTGVnYWN5KS5cbiAgICpcbiAgICogQHBhcmFtIGVudGl0eVR5cGVcbiAgICogQHBhcmFtIGlyaVxuICAgKiBAcGFyYW0gb250b2xvZ3lJZFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB1c2VMZWdhY3lcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRFbnRpdHlPYmplY3QoaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZD86IHN0cmluZywgcGFyYW1ldGVyPzogc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuKTogUHJvbWlzZTxFbnRpdHk+IHtcbiAgICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3QoYXdhaXQgdGhpcy5nZXRFbnRpdHlSZXNwb25zZShpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KSkgYXMgRW50aXR5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gT250b2xvZ3kgb2JqZWN0LlxuICAgKiBJbmRpcmVjdGx5IGZldGNoZXMgdGhlIHJlc3BvbnNlIEpTT04gZm9yIHRoZSBzcGVjaWZpZWQgb250b2xvZ3lJZCwgcGFyYW1ldGVyIGFuZCBBUEkgdmVyc2lvbiAodXNlTGVnYWN5KS5cbiAgICpcbiAgICogQHBhcmFtIG9udG9sb2d5SWRcbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gdXNlTGVnYWN5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0T250b2xvZ3lPYmplY3Qob250b2xvZ3lJZDogc3RyaW5nLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pOiBQcm9taXNlPE9udG9sb2d5PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9udG9sb2d5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQgfSwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuXG4gICAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0KHJlc3BvbnNlKSBhcyBPbnRvbG9neTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUaGluZ09iamVjdChpcmk/OiBzdHJpbmcsIHRoaW5nVHlwZT86IFRoaW5nVHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFByb21pc2U8VGhpbmc+IHtcbiAgICBpZiAodGhpbmdUeXBlKSB7XG4gICAgICBpZiAoaXNPbnRvbG9neVR5cGVOYW1lKHRoaW5nVHlwZSkpIHtcbiAgICAgICAgaWYgKCFvbnRvbG9neUlkKSB0aHJvdyBuZXcgRXJyb3IoYG9udG9sb2d5SWQgaGFzIHRvIGJlIHByb3ZpZGVkIGlmIHRoaW5nVHlwZSBpbiB7XCIke29udG9sb2d5VHlwZU5hbWVzLmpvaW4oJ1wiLCBcIicpfVwifS5gKTtcbiAgICAgICAgZWxzZSByZXR1cm4gYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0VudGl0eVR5cGVOYW1lKHRoaW5nVHlwZSkpIHtcbiAgICAgICAgaWYgKCFpcmkpIHRocm93IG5ldyBFcnJvcihgaXJpIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaW4ge1wiJHtlbnRpdHlUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgICAgICBlbHNlIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHRoaW5nVHlwZSBcIiR7dGhpbmdUeXBlfVwiIHByb3ZpZGVkLiBNdXN0IGJlIGluIHtcIiR7dGhpbmdUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmICghaXJpICYmIG9udG9sb2d5SWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0T250b2xvZ3lPYmplY3Qob250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXJpKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYGlyaSBvciBvbnRvbG9neUlkIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaXMgbm90IHByb3ZpZGVkLmApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RW50aXR5V2l0aEVudGl0eVR5cGVQcm92aWRlZChpcmk6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgc3dpdGNoIChlbnRpdHlUeXBlKSB7XG4gICAgICBjYXNlICd0ZXJtJzogY2FzZSAnY2xhc3MnOiAvLyBhbHNvIGFsbG93IFwiY2xhc3NcIiBldmVuIGlmIGl0IHNob3VsZCBhY3R1YWxseSBiZSBcInRlcm1cIlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRUZXJtKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaSB9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG5cbiAgICAgIGNhc2UgJ3Byb3BlcnR5JzogY2FzZSAnYW5ub3RhdGlvblByb3BlcnR5JzogY2FzZSAnZGF0YVByb3BlcnR5JzogY2FzZSAnb2JqZWN0UHJvcGVydHknOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRQcm9wZXJ0eSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBwcm9wZXJ0eUlyaTogaXJpIH0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgICAgY2FzZSAnaW5kaXZpZHVhbCc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEluZGl2aWR1YWwodW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgaW5kaXZpZHVhbElyaTogaXJpIH0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgZW50aXR5IHR5cGUgXCInICsgZW50aXR5VHlwZSArIGBcIi4gTXVzdCBiZSBvbmUgb2YgeyR7ZW50aXR5VHlwZU5hbWVzLm1hcCgoZWxlbSkgPT4gYFwiJHtlbGVtfVwiYCkuam9pbihcIiwgXCIpfX0uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlXaXRoSW5mZXJyZWRFbnRpdHlUeXBlKGlyaTogc3RyaW5nLCBvbnRvbG9neUlkPzogc3RyaW5nLCBwYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIC8qXG4gICAgICAgICAgICBUZXN0IGFsbCB0eXBlcyBvZiBlbnRpdGllcyAodGVybSwgcHJvcGVydHksIGluZGl2aWR1YWwpIG1hbnVhbGx5IHdpdGggc2VwYXJhdGUgcXVlcmllcyAoYXMgL2VudGl0aWVzIGRvZXMgbm90IGV4aXN0IGZvciBsZWdhY3kgQVBJKVxuICAgICAgICAgICAgLT4gcmV0dXJuIHRoZSByZXNwb25zZSBvYmplY3Qgd2hpY2ggcmVzb2x2ZXMgd2l0aCBhIGNvbnRhaW5lZCBlbnRpdHlcbiAgICAgICAgICAgIC0+IHRocm93IGVycm9yIGlmIG5vbmUgb2YgdGhlIHR5cGVzIGNvbnRhaW5zIGFuIGVudGl0eVxuICAgICAgICAgICovXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBzaWduYWwgPSBjb250cm9sbGVyLnNpZ25hbDtcblxuICAgIGxldCByZXNwb25zZTsgLy8gc3RvcmVzIHRoZSBlbnRpdHkgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIGVuZFxuXG4gICAgZnVuY3Rpb24gc2V0QW5kU3RvcChyZXM6IGFueSkge1xuICAgICAgaWYgKHJlc1tcIl9lbWJlZGRlZFwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3BvbnNlID0gcmVzO1xuICAgICAgICBjb250cm9sbGVyLmFib3J0KCk7IC8vIGFib3J0IHF1ZXJpZXMgZm9yIG90aGVyIGVudGl0eVR5cGVzXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgW1xuICAgICAgICB0aGlzLmdldFRlcm0odW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgdGVybUlyaTogaXJpIH0sIHBhcmFtZXRlciwgdHJ1ZSwgc2lnbmFsKVxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4geyBzZXRBbmRTdG9wKHJlcykgfSksXG4gICAgICAgIHRoaXMuZ2V0UHJvcGVydHkodW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgcHJvcGVydHlJcmk6IGlyaSB9LCBwYXJhbWV0ZXIsIHRydWUsIHNpZ25hbClcbiAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHsgc2V0QW5kU3RvcChyZXMpIH0pLFxuICAgICAgICB0aGlzLmdldEluZGl2aWR1YWwodW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgaW5kaXZpZHVhbElyaTogaXJpIH0sIHBhcmFtZXRlciwgdHJ1ZSwgc2lnbmFsKVxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4geyBzZXRBbmRTdG9wKHJlcykgfSlcbiAgICAgIF1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHJldHVybiByZXNwb25zZTtcbiAgICBlbHNlIHRocm93IEVycm9yKFwiSXJpIFwiICsgaXJpICsgXCIgY291bGQgbm90IGJlIHJlc29sdmVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBbmNlc3RvcnMoaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLCBvbnRvbG9neUlkOiBzdHJpbmcsIHVzZUxlZ2FjeSA9IGZhbHNlLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IGZhbHNlKTogUHJvbWlzZTxFbnRpdHlbXT4ge1xuICAgIGxldCBhbmNlc3RvcnM6IGFueTtcbiAgICBpZiAoaXNDbGFzc1R5cGVOYW1lKGVudGl0eVR5cGUpKSB7XG4gICAgICBhbmNlc3RvcnMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgaXJpLCB1c2VMZWdhY3kpfS9oaWVyYXJjaGljYWxBbmNlc3RvcnNgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBhbmNlc3RvcnMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgaXJpLCB1c2VMZWdhY3kpfS9hbmNlc3RvcnNgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgbGV0IGxpc3RPZkFuY2VzdG9yT2JqOiBBcnJheTxFbnRpdHk+ID0gW107XG4gICAgICBsZXQgZXh0cmFjdEtleSA9IFwiXCI7XG4gICAgICBzd2l0Y2ggKGVudGl0eVR5cGUpIHtcbiAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgZXh0cmFjdEtleSA9IFwidGVybXNcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRlcm1cIjpcbiAgICAgICAgICBleHRyYWN0S2V5ID0gXCJ0ZXJtc1wiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgICAgICBleHRyYWN0S2V5ID0gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICAgICAgZXh0cmFjdEtleSA9IFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkVudGl0eSB0eXBlIGNvdWxkIG5vdCBiZSBjb3JyZWN0bHkgaW5mZXJyZWQuXCIpO1xuICAgICAgfVxuICAgICAgYW5jZXN0b3JzW1wiX2VtYmVkZGVkXCJdW2V4dHJhY3RLZXldLm1hcCgob2JqOiBhbnkpID0+IHtcbiAgICAgICAgbGlzdE9mQW5jZXN0b3JPYmoucHVzaChjcmVhdGVNb2RlbE9iamVjdCh7IF9lbWJlZGRlZDogeyBbZXh0cmFjdEtleV06IFtvYmpdIH0gfSkgYXMgRW50aXR5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGxpc3RPZkFuY2VzdG9yT2JqO1xuICAgIH1cbiAgICByZXR1cm4gYW5jZXN0b3JzW1wiZWxlbWVudHNcIl0ubWFwKChvYmo6IGFueSkgPT5cbiAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHsgZWxlbWVudHM6IFtvYmpdIH0pIGFzIEVudGl0eVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SlNUcmVlKGlyaTogc3RyaW5nLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZDogc3RyaW5nKTogUHJvbWlzZTxKU1RyZWVOb2RlW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIGlyaSwgdHJ1ZSl9L2pzdHJlZWAsIHsgcGFyYW1zOiB7IHNpemU6IFwiMTAwMFwiIH0gfSwgdHJ1ZSk7XG4gIH1cblxuICAvLyBUT0RPOiBEbyB3ZSB3YW50IHRoZSBzYW1lIGJlaGF2aW9yIGFzIEVNQkwgRUJJIChlLmcuIG5vdCBnZXR0aW5nIGluc3RhbmNlcyBmb3IgY2xhc3NlcyBpZiBlbnRpdHlUeXBlICE9IFwiaW5kaXZpZHVhbFwiKT9cbiAgcHVibGljIGFzeW5jIGdldENoaWxkcmVuKGlyaTogc3RyaW5nLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZDogc3RyaW5nLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IGZhbHNlLCB1c2VMZWdhY3kgPSBmYWxzZSk6IFByb21pc2U8RW50aXR5W10+IHtcbiAgICBsZXQgY2hpbGRyZW46IGFueTtcbiAgICBpZiAoaXNDbGFzc1R5cGVOYW1lKGVudGl0eVR5cGUpKSB7XG4gICAgICBjaGlsZHJlbiA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBjbGFzc1R5cGVOYW1lc1swXSwgaXJpLCB1c2VMZWdhY3kpfS9oaWVyYXJjaGljYWxDaGlsZHJlbmAsIHsgcGFyYW1zOiB7IHNpemU6IFwiMTAwMFwiLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgfSB9LCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSkge1xuICAgICAgLy8gZW50aXR5VHlwZSBkb2VzIE5PVCBpbmRpY2F0ZSB3aGljaCB0eXBlIHRoZSBlbnRpdHkgb2YgdGhlIHByb3ZpZGVkIGlyaSBoYXMsIGJ1dCB3aGljaCB0eXBlIG9mIGhpZXJhcmNoeSBpcyBkZXNpcmVkXG4gICAgICAvLyAtPiBcImNsYXNzXCIgaGFzIHRvIGJlIHByb3ZpZGVkIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoeSBhcyB3ZWxsLCBhcyBpbmRpdmlkdWFscyBhcmUgYWx3YXlzIGNoaWxkcmVuIG9mIGNsYXNzZXNcbiAgICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgICAgLy8gVE9ETzogRG9lcyBkZXNjZW5kYW50cyBhbHdheXMgd29yayBmb3IgdGhpcyAob3IgYXJlIHRoZXJlIGNsYXNzZXMgd2l0aCBib3RoIGluZGl2aWR1YWxzIGFuZCBjbGFzc2VzIGFzIGRlc2NlbmRhbnRzKT9cbiAgICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgY2xhc3NUeXBlTmFtZXNbMF0sIGlyaSwgdXNlTGVnYWN5KX0vZGVzY2VuZGFudHNgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiB9IH0sIHVzZUxlZ2FjeSlcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjaGlsZHJlbiA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBjbGFzc1R5cGVOYW1lc1swXSwgaXJpLCB1c2VMZWdhY3kpfS9pbnN0YW5jZXNgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjaGlsZHJlbiA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBpcmksIHVzZUxlZ2FjeSl9L2NoaWxkcmVuYCwgeyBwYXJhbXM6IHsgc2l6ZTogXCIxMDAwXCIsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyB9IH0sIHVzZUxlZ2FjeSk7XG4gICAgfVxuXG4gICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuW1wiX2VtYmVkZGVkXCJdW2lzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUpID8gcGx1cmFsaXplVHlwZShjbGFzc1R5cGVOYW1lc1swXSwgdXNlTGVnYWN5KSA6IHBsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSwgdXNlTGVnYWN5KV0ubWFwKChvYmo6IGFueSkgPT5cbiAgICAgICAgY3JlYXRlTW9kZWxPYmplY3QoeyBbXCJfZW1iZWRkZWRcIl06IHsgW2lzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUpID8gcGx1cmFsaXplVHlwZShjbGFzc1R5cGVOYW1lc1swXSwgdXNlTGVnYWN5KSA6IHBsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSldOiBbb2JqXSB9IH0pIGFzIEVudGl0eVxuICAgICAgKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gY2hpbGRyZW5bXCJlbGVtZW50c1wiXS5tYXAoKG9iajogYW55KSA9PlxuICAgICAgICBjcmVhdGVNb2RlbE9iamVjdCh7IGVsZW1lbnRzOiBbb2JqXSB9KSBhcyBFbnRpdHlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFJvb3RFbnRpdGllcyhlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZDogc3RyaW5nLCBwcmVmZXJyZWRSb290cyA9IGZhbHNlLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IGZhbHNlLCB1c2VMZWdhY3kgPSBmYWxzZSk6IFByb21pc2U8RW50aXR5W10+IHtcbiAgICBpZiAodXNlTGVnYWN5KSB7XG4gICAgICBpZiAoaXNJbmRpdmlkdWFsVHlwZU5hbWUoZW50aXR5VHlwZSkpIHtcbiAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IGJlaGF2aW91ciBmb3IgaW5kaXZpZHVhbHNcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IC9wcmVmZXJyZWRSb290cyByb3V0ZSBzaG91bGQgZXhpc3QgaW4gbGVnYWN5IGFwaSwgYnV0IGRvZXMgbm90IHdvcmtcbiAgICAgICAgY29uc3Qgcm9vdHMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgdW5kZWZpbmVkLCB1c2VMZWdhY3kpfS9yb290c2AsIHsgcGFyYW1zOiB7IHNpemU6IFwiMTAwMFwiLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgfSB9LCB1c2VMZWdhY3kpO1xuXG4gICAgICAgIHJldHVybiByb290c1tcIl9lbWJlZGRlZFwiXVtwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUsIHVzZUxlZ2FjeSldLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICAgICAgY3JlYXRlTW9kZWxPYmplY3QoeyBbXCJfZW1iZWRkZWRcIl06IHsgW3BsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSwgdXNlTGVnYWN5KV06IFtvYmpdIH0gfSkgYXMgRW50aXR5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKGlzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUpKSB7XG4gICAgICAgIC8vIFRPRE86IEltcGxlbWVudCBiZWhhdmlvdXIgZm9yIGluZGl2aWR1YWxzXG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCByb290cyA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCB1bmRlZmluZWQsIHVzZUxlZ2FjeSl9YCwgeyBwYXJhbXM6IHsgc2l6ZTogXCIxMDAwXCIsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcywgaGFzRGlyZWN0UGFyZW50czogcHJlZmVycmVkUm9vdHMgPyB1bmRlZmluZWQgOiBcImZhbHNlXCIsIGlzUHJlZmVycmVkUm9vdDogcHJlZmVycmVkUm9vdHMgPyBcInRydWVcIiA6IHVuZGVmaW5lZCB9IH0sIHVzZUxlZ2FjeSk7XG5cbiAgICAgICAgcmV0dXJuIHJvb3RzW1wiZWxlbWVudHNcIl0ubWFwKChvYmo6IGFueSkgPT5cbiAgICAgICAgICBjcmVhdGVNb2RlbE9iamVjdCh7IGVsZW1lbnRzOiBbb2JqXSB9KSBhcyBFbnRpdHlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q2xhc3NJbnN0YW5jZXMoaXJpOiBzdHJpbmcsIG9udG9sb2d5SWQ6IHN0cmluZyk6IFByb21pc2U8SW5kaXZpZHVhbFtdPiB7XG4gICAgY29uc3QgaW5zdGFuY2VzID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGNsYXNzVHlwZU5hbWVzWzBdLCBpcmksIGZhbHNlKX0vaW5kaXZpZHVhbHNgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiB9IH0sIGZhbHNlKTtcblxuICAgIHJldHVybiBpbnN0YW5jZXNbXCJlbGVtZW50c1wiXS5tYXAoKG9iajogYW55KSA9PlxuICAgICAgY3JlYXRlTW9kZWxPYmplY3QoeyBlbGVtZW50czogW29ial0gfSkgYXMgSW5kaXZpZHVhbFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYnVpbGRIaWVyYXJjaHlXaXRoSXJpKHByb3BzOiBCdWlsZEhpZXJhcmNoeVByb3BzICYgSGllcmFyY2h5SXJpUHJvcCk6IFByb21pc2U8SGllcmFyY2h5PiB7XG4gICAgY29uc3Qge1xuICAgICAgaXJpLFxuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIGVudGl0eVR5cGUsXG4gICAgICBwcmVmZXJyZWRSb290cyA9IGZhbHNlLFxuICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBmYWxzZSxcbiAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXMgPSB0cnVlLFxuICAgICAgc2hvd1NpYmxpbmdzT25Jbml0ID0gZmFsc2UsXG4gICAgICB1c2VMZWdhY3kgPSBmYWxzZSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBpZiAoaXJpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBcIlwiLCB1c2VMZWdhY3kpLnRoZW4oKGVudGl0eSkgPT4gdGhpcy5idWlsZEhpZXJhcmNoeVdpdGhFbnRpdHkoe1xuICAgICAgICBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlIHx8IGVudGl0eS5nZXRUeXBlKCkgYXMgRW50aXR5VHlwZU5hbWUsXG4gICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQgfHwgZW50aXR5LmdldE9udG9sb2d5SWQoKSxcbiAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICBwcmVmZXJyZWRSb290czogcHJlZmVycmVkUm9vdHMsXG4gICAgICAgIG1haW5FbnRpdHk6IGVudGl0eSxcbiAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlczoga2VlcEV4cGFuc2lvblN0YXRlcyxcbiAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0OiBzaG93U2libGluZ3NPbkluaXQsXG4gICAgICAgIHVzZUxlZ2FjeTogdXNlTGVnYWN5LFxuICAgICAgfSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChlbnRpdHlUeXBlID09IHVuZGVmaW5lZCB8fCBvbnRvbG9neUlkID09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoXCJFaXRoZXIgaXJpIG9yIG9udG9sb2d5SWQgYW5kIGVudGl0eVR5cGUgaGF2ZSB0byBiZSBwcm92aWRlZC5cIik7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5idWlsZFJvb3RIaWVyYXJjaHkoe1xuICAgICAgICBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxuICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgIHByZWZlcnJlZFJvb3RzOiBwcmVmZXJyZWRSb290cyxcbiAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlczoga2VlcEV4cGFuc2lvblN0YXRlcyxcbiAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0OiBzaG93U2libGluZ3NPbkluaXQsXG4gICAgICAgIHVzZUxlZ2FjeTogdXNlTGVnYWN5LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGpzVHJlZU5vZGVUb0VudGl0eURhdGEoanNUcmVlTm9kZTogSlNUcmVlTm9kZSk6IEVudGl0eURhdGEge1xuICAgIHJldHVybiB7XG4gICAgICBpcmk6IGpzVHJlZU5vZGUuaXJpLFxuICAgICAgbGFiZWw6IGpzVHJlZU5vZGUudGV4dCxcbiAgICAgIGhhc0NoaWxkcmVuOiBqc1RyZWVOb2RlLmNoaWxkcmVuIHx8IGpzVHJlZU5vZGUuc3RhdGUub3BlbmVkLFxuICAgICAgcGFyZW50czogW11cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGVudGl0eVRvRW50aXR5RGF0YShlbnRpdHk6IEVudGl0eSk6IEVudGl0eURhdGEge1xuICAgIHJldHVybiB7XG4gICAgICBpcmk6IGVudGl0eS5nZXRJcmkoKSxcbiAgICAgIGxhYmVsOiBhc0FycmF5KGVudGl0eS5nZXRMYWJlbCgpKVswXSxcbiAgICAgIGRlZmluZWRCeTogZW50aXR5LmdldERlZmluZWRCeSgpLFxuICAgICAgaGFzQ2hpbGRyZW46IGVudGl0eS5oYXNDaGlsZHJlbigpLFxuICAgICAgbnVtRGVzY2VuZGFudHM6IGVudGl0eS5nZXROdW1IaWVyYXJjaGljYWxEZXNjZW5kYW50cygpIHx8IGVudGl0eS5nZXROdW1EZXNjZW5kYW50cygpLFxuICAgICAgcGFyZW50czogZW50aXR5LmdldFBhcmVudHMoKVxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYnVpbGRSb290SGllcmFyY2h5KFxuICAgIHByb3BzOiB7XG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmcsXG4gICAgICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSxcbiAgICB9ICYgQnVpbGRIaWVyYXJjaHlQcm9wc1xuICApOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuXG4gICAgY29uc3Qge1xuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIGVudGl0eVR5cGUsXG4gICAgICBwcmVmZXJyZWRSb290cyxcbiAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgdXNlTGVnYWN5XG4gICAgfSA9IHByb3BzO1xuXG4gICAgLyogUVVFUlkgcm9vdCBlbnRpdGllcyAqL1xuICAgIGNvbnN0IHJvb3RFbnRpdGllc0RhdGEgPSAoYXdhaXQgdGhpcy5nZXRSb290RW50aXRpZXMoZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcHJlZmVycmVkUm9vdHMsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLCB1c2VMZWdhY3kpKVxuICAgICAgLm1hcCgoZW50aXR5KSA9PiB0aGlzLmVudGl0eVRvRW50aXR5RGF0YShlbnRpdHkpKVxuICAgICAgLmZpbHRlcigocm9vdCkgPT4gIWlzVG9wKHJvb3QuaXJpKSk7XG4gICAgLyogLS0tICovXG5cbiAgICAvKiBJTklUSUFMSVpFIGVudGl0aWVzRGF0YSwgcGFyZW50Q2hpbGRSZWxhdGlvbnMgKi9cbiAgICBjb25zdCBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPiA9IG5ldyBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+KCk7XG4gICAgY29uc3QgZW50aXRpZXNEYXRhOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhPiA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhPigpO1xuICAgIGZvciAoY29uc3QgZW50aXR5RGF0YSBvZiByb290RW50aXRpZXNEYXRhKSB7XG4gICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucy5zZXQoZW50aXR5RGF0YS5pcmksIFtdKTsgLy8gaW5pdGlhbGl6ZSB3aXRoIGVtcHR5IGFycmF5XG4gICAgICBlbnRpdGllc0RhdGEuc2V0KGVudGl0eURhdGEuaXJpLCBlbnRpdHlEYXRhKTtcbiAgICB9XG4gICAgLyogLS0tICovXG5cbiAgICByZXR1cm4gbmV3IEhpZXJhcmNoeSh7XG4gICAgICBwYXJlbnRDaGlsZFJlbGF0aW9uczogcGFyZW50Q2hpbGRSZWxhdGlvbnMsXG4gICAgICBlbnRpdGllc0RhdGE6IGVudGl0aWVzRGF0YSxcbiAgICAgIGFsbENoaWxkcmVuUHJlc2VudDogbmV3IFNldCgpLFxuICAgICAgcm9vdHM6IHJvb3RFbnRpdGllc0RhdGEubWFwKChyb290KSA9PiBuZXcgVHJlZU5vZGUocm9vdCkpLnNvcnQoKGEsIGIpID0+IChhLmVudGl0eURhdGEubGFiZWwgfHwgYS5lbnRpdHlEYXRhLmlyaSkubG9jYWxlQ29tcGFyZShiLmVudGl0eURhdGEubGFiZWwgfHwgYi5lbnRpdHlEYXRhLmlyaSkpLFxuICAgICAgYXBpOiBuZXcgT2xzQXBpKHRoaXMuYXhpb3NJbnN0YW5jZS5nZXRVcmkoKSksXG4gICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcbiAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IHByb3BzLmtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBidWlsZEhpZXJhcmNoeVdpdGhFbnRpdHkoXG4gICAgcHJvcHM6IHtcbiAgICAgIG1haW5FbnRpdHk6IEVudGl0eSxcbiAgICAgIG9udG9sb2d5SWQ6IHN0cmluZyxcbiAgICAgIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLFxuICAgIH0gJiBCdWlsZEhpZXJhcmNoeVByb3BzXG4gICk6IFByb21pc2U8SGllcmFyY2h5PiB7XG5cbiAgICBjb25zdCB7XG4gICAgICBtYWluRW50aXR5LFxuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIGVudGl0eVR5cGUsXG4gICAgICBwcmVmZXJyZWRSb290cyxcbiAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgdXNlTGVnYWN5XG4gICAgfSA9IHByb3BzO1xuXG4gICAgLyogTE9BRCBhbmNlc3RvcnMgKi9cbiAgICBsZXQgZW50aXRpZXM6IEVudGl0eURhdGFbXSA9IFtdO1xuXG4gICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgLy8gVE9ETzogSlNUcmVlIHNvbWV0aW1lcyByZXR1cm5zIHNtYWxsZXIgdHJlZXMgdGhhbiB3b3VsZCBiZSBwb3NzaWJsZSB2aWEgcXVlcnlpbmcgaGllcmFyY2hpY2FsIGFuY2VzdG9ycyBhbmQgYWxsIGNoaWxkcmVuIG9mIHRob3NlIChlLmcuIGh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9VQkVST05fMjAwMTc0NyAtPiBzdHJhbmdlIGFuZCBub3QgcmVhbGx5IHVzZWZ1bCBoaWVyYXJjaHkgYmVjYXVzZSBtYW55IGVudGl0aWVzIGFyZSBib3RoIHNpYmxpbmcgYW5kIGNoaWxkcmVuIG9mIG90aGVyIGVudGl0aWVzIChpcyBpdCB3cm9uZyB0byB0YWtlIGhpZXJhcmNoaWNhbFBhcmVudCBpbnN0ZWFkIG9mIGRpcmVjdFBhcmVudCBpbiBlbnRpdHlUb0VudGl0eURhdGFUb0hpZXJhcmNoeT8gRU1CTC1FQkkgZG9lcyBpdCBsaWtlIHRoYXQgYXMgd2VsbCkpXG4gICAgICAvLyAgICAgICBRdWVzdGlvbjogU2hvdWxkIHdlIHByZWZlciBjb21wbGV0ZSBoaWVyYXJjaGllcyAocXVlcnkgL2hpZXJhcmNoaWNhbEFuY2VzdG9ycyArIC9jaGlsZHJlbiBmb3IgZWFjaCkgb3Igc2xpbSBxdWVyaWVzIChxdWVyeSAvanN0cmVlKT9cbiAgICAgIGNvbnN0IGpzVHJlZSA9IGF3YWl0IHRoaXMuZ2V0SlNUcmVlKG1haW5FbnRpdHkuZ2V0SXJpKCksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQpO1xuICAgICAgY29uc3QgaWRUb0lyaTogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICBjb25zdCBwYXJlbnRzOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4gPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG5cbiAgICAgIGZvciAoY29uc3QganNUcmVlTm9kZSBvZiBqc1RyZWUpIHtcbiAgICAgICAgaWRUb0lyaS5zZXQoanNUcmVlTm9kZS5pZCwganNUcmVlTm9kZS5pcmkpO1xuICAgICAgICBwYXJlbnRzLnNldChqc1RyZWVOb2RlLmlyaSwgbmV3IFNldDxzdHJpbmc+KCkpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGpzVHJlZU5vZGUgb2YganNUcmVlKSB7XG4gICAgICAgIGNvbnN0IHBhckFyciA9IHBhcmVudHMuZ2V0KGpzVHJlZU5vZGUuaXJpKTtcbiAgICAgICAgY29uc3QgcGFySXJpID0gaWRUb0lyaS5nZXQoanNUcmVlTm9kZS5wYXJlbnQpO1xuICAgICAgICBpZiAocGFyQXJyICE9IHVuZGVmaW5lZCAmJiBwYXJJcmkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcGFyQXJyLmFkZChwYXJJcmkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVudGl0aWVzID0gW107XG4gICAgICBjb25zdCBpbkFyciA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICBmb3IgKGNvbnN0IGpzVHJlZU5vZGUgb2YganNUcmVlKSB7XG4gICAgICAgIGlmICghaW5BcnIuaGFzKGpzVHJlZU5vZGUuaXJpKSkge1xuICAgICAgICAgIGluQXJyLmFkZChqc1RyZWVOb2RlLmlyaSk7XG5cbiAgICAgICAgICBlbnRpdGllcy5wdXNoKHRoaXMuanNUcmVlTm9kZVRvRW50aXR5RGF0YShqc1RyZWVOb2RlKSk7XG4gICAgICAgICAgY29uc3QgcGFyID0gcGFyZW50cy5nZXQoanNUcmVlTm9kZS5pcmkpO1xuICAgICAgICAgIGlmIChwYXIgIT0gdW5kZWZpbmVkKSBlbnRpdGllc1tlbnRpdGllcy5sZW5ndGggLSAxXS5wYXJlbnRzID0gUmVpZmllZC5mcm9tSnNvbihBcnJheS5mcm9tKHBhci52YWx1ZXMoKSkpIHx8IFtdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgYW5jZXN0b3JzID0gYXdhaXQgdGhpcy5nZXRBbmNlc3RvcnMobWFpbkVudGl0eS5nZXRJcmkoKSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCB8fCBtYWluRW50aXR5LmdldE9udG9sb2d5SWQoKSwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMpO1xuICAgICAgZW50aXRpZXMgPSBbdGhpcy5lbnRpdHlUb0VudGl0eURhdGEobWFpbkVudGl0eSksIC4uLmFuY2VzdG9ycy5tYXAoKGVudGl0eSkgPT4gdGhpcy5lbnRpdHlUb0VudGl0eURhdGEoZW50aXR5KSldXG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIHRvcCBlbnRpdGllc1xuICAgIGVudGl0aWVzID0gZW50aXRpZXMuZmlsdGVyKChlKSA9PiAhaXNUb3AoZS5pcmkpKTtcbiAgICAvKiAtLS0gKi9cblxuICAgIC8qIEJVSUxEIHBhcmVudENoaWxkUmVsYXRpb25zICovXG4gICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPigpO1xuICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+KCk7XG5cbiAgICAvLyBpbml0aWFsaXplIHBhcmVudENoaWxkUmVsYXRpb25zICYgZW50aXRpZXNEYXRhXG4gICAgZm9yIChjb25zdCBlbnRpdHlEYXRhIG9mIGVudGl0aWVzKSB7XG4gICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucy5zZXQoZW50aXR5RGF0YS5pcmksIFtdKTsgLy8gaW5pdGlhbGl6ZSB3aXRoIGVtcHR5IGFycmF5XG4gICAgICBlbnRpdGllc0RhdGEuc2V0KGVudGl0eURhdGEuaXJpLCBlbnRpdHlEYXRhKTtcbiAgICB9XG5cbiAgICBpZiAoc2hvd1NpYmxpbmdzT25Jbml0KSB7XG4gICAgICAvLyBhZGRpdGlvbmFsbHkgbG9hZCBzaWJsaW5ncyBmcm9tIGFwaVxuICAgICAgY29uc3QgcmVhbEVudGl0eVR5cGUgPSAoZW50aXR5VHlwZSB8fCBtYWluRW50aXR5LmdldFR5cGUoKSk7XG4gICAgICBjb25zdCBlbnRpdHlUeXBlRm9yUXVlcnkgPSByZWFsRW50aXR5VHlwZSA9PSBcImluZGl2aWR1YWxcIiA/IFwiY2xhc3NcIiA6IHJlYWxFbnRpdHlUeXBlOyAvLyBUT0RPOiBvbmx5IHJlbGV2YW50IGZvciBlbnRpdHlUeXBlID09IFwiaW5kaXZpZHVhbFwiIChtYXliZSB3ZSBkb24ndCBldmVuIG5lZWQgdGhpcyBhcyBiZWhhdmlvdXIgZm9yIGluZGl2aWR1YWwgaGllcmFyY2hpZXMgaXMgbm90IHlldCBkZXRlcm1pbmVkKVxuXG4gICAgICBjb25zdCBwcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGVudGl0eURhdGEgb2YgZW50aXRpZXMpIHtcbiAgICAgICAgaWYgKGVudGl0eURhdGEuaXJpICE9IG1haW5FbnRpdHkuZ2V0SXJpKCkpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRDaGlsZHJlbihlbnRpdHlEYXRhLmlyaSwgZW50aXR5VHlwZUZvclF1ZXJ5LCBvbnRvbG9neUlkLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcywgdXNlTGVnYWN5KS50aGVuKChjaGlsZHJlbikgPT4gY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gdGhpcy5lbnRpdHlUb0VudGl0eURhdGEoY2hpbGQpKSkudGhlbigoY2hpbGRyZW4pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyQ2hpbGRSZWw6IFBhcmVudENoaWxkUmVsYXRpb25bXSA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgZW50aXRpZXNEYXRhLnNldChjaGlsZC5pcmksIGNoaWxkKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQucGFyZW50cykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyUmVsYXRpb24gPSBjaGlsZC5wYXJlbnRzLmZpbHRlcigocGFyKSA9PiBwYXIudmFsdWUgPT0gZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICAgICAgICAgICAgcGFyQ2hpbGRSZWwucHVzaCh7IGNoaWxkSXJpOiBjaGlsZC5pcmksIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogcGFyUmVsYXRpb24ubGVuZ3RoID4gMCAmJiBwYXJSZWxhdGlvblswXS5nZXRNZXRhZGF0YSgpID8gcGFyUmVsYXRpb25bMF0uZ2V0TWV0YWRhdGEoKVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXSA6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgICAgICB9IC8vIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIGVsZW1lbnRcblxuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucy5zZXQoZW50aXR5RGF0YS5pcmksIHBhckNoaWxkUmVsKTtcbiAgICAgICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50LmFkZChlbnRpdHlEYXRhLmlyaSk7XG4gICAgICAgICAgICB9KS50aGVuKHJlc29sdmUpXG4gICAgICAgICAgKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpO1xuXG4gICAgICAvLyBUT0RPOiBvbmx5IHJlbGV2YW50IGZvciBlbnRpdHlUeXBlID09IFwiaW5kaXZpZHVhbFwiIChtYXliZSB3ZSBkb24ndCBldmVuIG5lZWQgdGhpcyBhcyBiZWhhdmlvdXIgZm9yIGluZGl2aWR1YWwgaGllcmFyY2hpZXMgaXMgbm90IHlldCBkZXRlcm1pbmVkKVxuICAgICAgaWYgKHJlYWxFbnRpdHlUeXBlID09IFwiaW5kaXZpZHVhbFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGFyZW50UmVpZmllZCBvZiBtYWluRW50aXR5LmdldFBhcmVudHMoKSkge1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gKGF3YWl0IHRoaXMuZ2V0Q2hpbGRyZW4ocGFyZW50UmVpZmllZC52YWx1ZSwgcmVhbEVudGl0eVR5cGUsIG9udG9sb2d5SWQsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzKSlcbiAgICAgICAgICAgIC5tYXAoKGNoaWxkKSA9PiB0aGlzLmVudGl0eVRvRW50aXR5RGF0YShjaGlsZCkpXG5cbiAgICAgICAgICBjb25zdCBwYXJDaGlsZFJlbDogUGFyZW50Q2hpbGRSZWxhdGlvbltdID0gW107XG4gICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgcGFyQ2hpbGRSZWwucHVzaCh7IGNoaWxkSXJpOiBjaGlsZC5pcmksIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwiIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucy5zZXQocGFyZW50UmVpZmllZC52YWx1ZSwgcGFyQ2hpbGRSZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBlbnRpdHlEYXRhIG9mIGVudGl0aWVzKSB7XG4gICAgICAgIGlmIChlbnRpdHlEYXRhLnBhcmVudHMpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRzID0gZW50aXR5RGF0YS5wYXJlbnRzLmZpbHRlcigocGFyZW50UmVpZmllZDogUmVpZmllZDxzdHJpbmc+KSA9PiAhaXNUb3AocGFyZW50UmVpZmllZC52YWx1ZSkpO1xuICAgICAgICAgIGlmIChlbnRpdHlEYXRhLmlyaSA9PSBtYWluRW50aXR5Py5nZXRJcmkoKSAmJiBpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlIHx8IG1haW5FbnRpdHkuZ2V0VHlwZSgpKSkge1xuICAgICAgICAgIGZvciAoY29uc3QgcGFyZW50UmVpZmllZCBvZiBwYXJlbnRzKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50Q2hpbGRSZWxhdGlvbnMuaGFzKHBhcmVudFJlaWZpZWQudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLmdldChwYXJlbnRSZWlmaWVkLnZhbHVlKT8ucHVzaCh7IGNoaWxkSXJpOiBlbnRpdHlEYXRhLmlyaSwgY2hpbGRSZWxhdGlvblRvUGFyZW50OiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlXCIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGZvciAoY29uc3QgcGFyZW50UmVpZmllZCBvZiBwYXJlbnRzKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50Q2hpbGRSZWxhdGlvbnMuaGFzKHBhcmVudFJlaWZpZWQudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLmdldChwYXJlbnRSZWlmaWVkLnZhbHVlKT8ucHVzaCh7IGNoaWxkSXJpOiBlbnRpdHlEYXRhLmlyaSwgY2hpbGRSZWxhdGlvblRvUGFyZW50OiBwYXJlbnRSZWlmaWVkLmdldE1ldGFkYXRhKCkgPyBwYXJlbnRSZWlmaWVkLmdldE1ldGFkYXRhKClbXCJjaGlsZFJlbGF0aW9uVG9QYXJlbnRcIl0gOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzb3J0IHBhcmVudENoaWxkUmVsYXRpb25zXG4gICAgZm9yIChjb25zdCByZWwgb2YgcGFyZW50Q2hpbGRSZWxhdGlvbnMudmFsdWVzKCkpIHJlbC5zb3J0KChhLCBiKSA9PiAoZW50aXRpZXNEYXRhLmdldChhLmNoaWxkSXJpKT8ubGFiZWwgfHwgYS5jaGlsZElyaSkubG9jYWxlQ29tcGFyZShlbnRpdGllc0RhdGEuZ2V0KGIuY2hpbGRJcmkpPy5sYWJlbCB8fCBiLmNoaWxkSXJpKSk7XG4gICAgLyogLS0tICovXG5cbiAgICAvKiBCVUlMRCByb290RW50aXRpZXMgKi9cbiAgICBjb25zdCByb290RW50aXRpZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHByZWZlcnJlZFJvb3RzKSB7XG4gICAgICBjb25zdCBwcmVmZXJyZWRSb290RW50aXRpZXMgPSAoYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCB1bmRlZmluZWQsIHVzZUxlZ2FjeSkpLmdldFByZWZlcnJlZFJvb3RzKCk7XG4gICAgICBmb3IgKGNvbnN0IGUgb2YgcHJlZmVycmVkUm9vdEVudGl0aWVzKSB7XG4gICAgICAgIGlmIChlbnRpdGllc0RhdGEuaGFzKGUpKSByb290RW50aXRpZXMucHVzaChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGVudGl0eURhdGEgb2YgZW50aXRpZXMpIHtcbiAgICAgICAgaWYgKGVudGl0eURhdGEucGFyZW50cykge1xuICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSBlbnRpdHlEYXRhLnBhcmVudHMuZmlsdGVyKChwYXJlbnRSZWlmaWVkOiBSZWlmaWVkPHN0cmluZz4pID0+ICFpc1RvcChwYXJlbnRSZWlmaWVkLnZhbHVlKSk7XG4gICAgICAgICAgaWYgKHBhcmVudHMubGVuZ3RoID09IDApIHJvb3RFbnRpdGllcy5wdXNoKGVudGl0eURhdGEuaXJpKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfVxuICAgIC8qIC0tLSAqL1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlVHJlZU5vZGUoZW50aXR5RGF0YTogRW50aXR5RGF0YSwgY3ljbGVDaGVjazogU2V0PHN0cmluZz4sIGNoaWxkUmVsYXRpb25Ub1BhcmVudD86IHN0cmluZyk6IFRyZWVOb2RlIHtcbiAgICAgIGN5Y2xlQ2hlY2suYWRkKGVudGl0eURhdGEuaXJpKTsgLy8gYWRkIGN1cnJlbnQgZW50aXR5IHRvIGN5Y2xlIGNoZWNrIHNldFxuXG4gICAgICBjb25zdCBub2RlID0gbmV3IFRyZWVOb2RlKGVudGl0eURhdGEpO1xuICAgICAgbm9kZS5jaGlsZFJlbGF0aW9uVG9QYXJlbnQgPSBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkUmVsYXRpb25zLmdldChlbnRpdHlEYXRhLmlyaSkgfHwgW107XG5cbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgIC8vIGN5Y2xpYyB0cmVlLCBza2lwIGN5Y2xlXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoaWxkRGF0YSA9IGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpO1xuICAgICAgICBpZiAoY2hpbGREYXRhICE9IHVuZGVmaW5lZCkgbm9kZS5hZGRDaGlsZChjcmVhdGVUcmVlTm9kZShjaGlsZERhdGEsIGN5Y2xlQ2hlY2ssIGNoaWxkLmNoaWxkUmVsYXRpb25Ub1BhcmVudCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5sb2FkZWRDaGlsZHJlbi5sZW5ndGggPiAwKSBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcblxuICAgICAgY3ljbGVDaGVjay5kZWxldGUoZW50aXR5RGF0YS5pcmkpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgY29uc3QgY3ljbGVDaGVjazogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTsgLy8gQ29udGFpbnMgaXJpcyBvZiBhbGwgZW50aXRpZXMgdGhhdCBoYXZlIG9jY3VycmVkIHdpdGhpbiB0aGUgY3VycmVudCByZWN1cnNpb24gYnJhbmNoLiBJcyB1c2VkIHRvIGNoZWNrIGZvciBjeWNsZXMuXG5cbiAgICByZXR1cm4gbmV3IEhpZXJhcmNoeSh7XG4gICAgICBwYXJlbnRDaGlsZFJlbGF0aW9uczogcGFyZW50Q2hpbGRSZWxhdGlvbnMsXG4gICAgICBlbnRpdGllc0RhdGE6IGVudGl0aWVzRGF0YSxcbiAgICAgIGFsbENoaWxkcmVuUHJlc2VudDogYWxsQ2hpbGRyZW5QcmVzZW50LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgIHJvb3RzOiByb290RW50aXRpZXMubWFwKChyb290RW50aXR5KSA9PiBjcmVhdGVUcmVlTm9kZShlbnRpdGllc0RhdGEuZ2V0KHJvb3RFbnRpdHkpISwgY3ljbGVDaGVjaykpLnNvcnQoKGEsIGIpID0+IChhLmVudGl0eURhdGEubGFiZWwgfHwgYS5lbnRpdHlEYXRhLmlyaSkubG9jYWxlQ29tcGFyZShiLmVudGl0eURhdGEubGFiZWwgfHwgYi5lbnRpdHlEYXRhLmlyaSkpLFxuICAgICAgYXBpOiBuZXcgT2xzQXBpKHRoaXMuYXhpb3NJbnN0YW5jZS5nZXRVcmkoKSksXG4gICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcbiAgICAgIG1haW5FbnRpdHlJcmk6IG1haW5FbnRpdHk/LmdldElyaSgpLFxuICAgICAga2VlcEV4cGFuc2lvblN0YXRlczogcHJvcHMua2VlcEV4cGFuc2lvblN0YXRlcyxcbiAgICAgIHVzZUxlZ2FjeTogdXNlTGVnYWN5LFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEhpZXJhcmNoeUNoaWxkcmVuKHByb3BzOiBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wcyk6IFByb21pc2U8RW50aXR5RGF0YVtdPiB7XG4gICAgaWYgKHByb3BzLmVudGl0eVR5cGUgPT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihcIkVudGl0eVR5cGUgaGFzIHRvIGJlIHByb3ZpZGVkIHRvIGxvYWQgY2hpbGRyZW4gaW4gT0xTLlwiKTtcblxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5nZXRDaGlsZHJlbihwcm9wcy5ub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmksIHByb3BzLmVudGl0eVR5cGUsIHByb3BzLm9udG9sb2d5SWQsIHByb3BzLmluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLCBwcm9wcy51c2VMZWdhY3kpKVxuICAgICAgLm1hcCgoZW50aXR5KSA9PiB0aGlzLmVudGl0eVRvRW50aXR5RGF0YShlbnRpdHkpKVxuICB9XG59XG4iLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+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/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG4vLyBUeXBvZ3JhcGhpYyBzY2FsZSAtLSBsb29zZWx5IGJhc2VkIG9uIE1ham9yIFRoaXJkICgxLjI1MClcbmV4cG9ydCB2YXIgZm9udFNjYWxlID0ge1xuICB4eHhzOiAwLjU2MjUsXG4gIHh4czogMC42ODc1LFxuICB4czogMC43NSxcbiAgczogMC44NzUsXG4gIG06IDEsXG4gIGw6IDEuMzc1LFxuICB4bDogMS42ODc1LFxuICB4eGw6IDIuMTI1XG59O1xuXG4vLyBGYW1pbGllcyAmIGJhc2UgZm9udCBzZXR0aW5nc1xuZXhwb3J0IHZhciBmb250QmFzZSA9IHtcbiAgZmFtaWx5OiBcIidJbnRlcicsIEJsaW5rTWFjU3lzdGVtRm9udCwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxuICBmYW1pbHlDb2RlOiBcIidSb2JvdG8gTW9ubycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcbiAgZmFtaWx5U2VyaWY6ICdHZW9yZ2lhLCBUaW1lcywgVGltZXMgTmV3IFJvbWFuLCBzZXJpZicsXG4gIC8vIENhcmVmdWwgdXNpbmcgbGlnYXR1cmVzLiBDb2RlIGVkaXRvcnMgbGlrZSBBQ0Ugd2lsbCBvZnRlbiBlcnJvciBiZWNhdXNlIG9mIHdpZHRoIGNhbGN1bGF0aW9uc1xuICBmZWF0dXJlU2V0dGluZ3M6IFwiJ2NhbHQnIDEsICdrZXJuJyAxLCAnbGlnYScgMVwiLFxuICBkZWZhdWx0VW5pdHM6ICdyZW0nLFxuICBiYXNlbGluZTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgIGJhc2UgPSBfcmVmMlswXTtcbiAgICByZXR1cm4gYmFzZSAvIDQ7XG4gIH0sIFsnYmFzZSddKSxcbiAgbGluZUhlaWdodE11bHRpcGxpZXI6IDEuNVxufTtcbmV4cG9ydCB2YXIgZm9udFdlaWdodCA9IHtcbiAgbGlnaHQ6IDMwMCxcbiAgcmVndWxhcjogNDAwLFxuICBtZWRpdW06IDUwMCxcbiAgc2VtaUJvbGQ6IDYwMCxcbiAgYm9sZDogNzAwXG59O1xuZXhwb3J0IHZhciBmb250ID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBmb250QmFzZSksIHt9LCB7XG4gIHNjYWxlOiBmb250U2NhbGUsXG4gIHdlaWdodDogZm9udFdlaWdodCxcbiAgYm9keToge1xuICAgIHNjYWxlOiAncycsXG4gICAgd2VpZ2h0OiAncmVndWxhcidcbiAgfSxcbiAgdGl0bGU6IHtcbiAgICB3ZWlnaHQ6ICdib2xkJ1xuICB9XG59KTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2NvbG9yL21hbmlwdWxhdGlvbic7XG5pbXBvcnQgeyBzaXplVG9QaXhlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucy9zaXplJztcbmV4cG9ydCB2YXIgZm9jdXMgPSB7XG4gIC8vIEZvY3VzIHJpbmdcbiAgY29sb3I6ICdjdXJyZW50Q29sb3InLFxuICB3aWR0aDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4xMjUpKSxcbiAgLy8gRm9jdXMgYmFja2dyb3VuZFxuICB0cmFuc3BhcmVuY3k6IHtcbiAgICBMSUdIVDogMC4xLFxuICAgIERBUks6IDAuMlxuICB9LFxuICBiYWNrZ3JvdW5kQ29sb3I6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIGNvbG9ycyA9IF9yZWYuY29sb3JzLFxuICAgICAgZm9jdXMgPSBfcmVmLmZvY3VzO1xuICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZShjb2xvcnMucHJpbWFyeSwgZm9jdXMudHJhbnNwYXJlbmN5KTtcbiAgfSlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGJ1aWxkVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fY29sb3JzJztcbmltcG9ydCB7IGFuaW1hdGlvbiB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19hbmltYXRpb24nO1xuaW1wb3J0IHsgYnJlYWtwb2ludCB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19icmVha3BvaW50JztcbmltcG9ydCB7IGJhc2UsIHNpemUgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fc2l6ZSc7XG5pbXBvcnQgeyBib3JkZXIgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYm9yZGVycyc7XG5pbXBvcnQgeyBsZXZlbHMgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fbGV2ZWxzJztcbmltcG9ydCB7IGZvbnQgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fdHlwb2dyYXBoeSc7XG5pbXBvcnQgeyBmb2N1cyB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zdGF0ZXMnO1xuZXhwb3J0IHZhciBBTVNURVJEQU1fTkFNRV9LRVkgPSAnRVVJX1RIRU1FX0FNU1RFUkRBTSc7XG5leHBvcnQgdmFyIGV1aVRoZW1lQW1zdGVyZGFtID0ge1xuICBjb2xvcnM6IGNvbG9ycyxcbiAgYmFzZTogYmFzZSxcbiAgc2l6ZTogc2l6ZSxcbiAgYm9yZGVyOiBib3JkZXIsXG4gIGZvbnQ6IGZvbnQsXG4gIGFuaW1hdGlvbjogYW5pbWF0aW9uLFxuICBicmVha3BvaW50OiBicmVha3BvaW50LFxuICBsZXZlbHM6IGxldmVscyxcbiAgZm9jdXM6IGZvY3VzXG59O1xuZXhwb3J0IHZhciBFdWlUaGVtZUFtc3RlcmRhbSA9IGJ1aWxkVGhlbWUoZXVpVGhlbWVBbXN0ZXJkYW0sIEFNU1RFUkRBTV9OQU1FX0tFWSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbnZhciBwcm92aWRlcldhcm5pbmcgPSB1bmRlZmluZWQ7XG5leHBvcnQgdmFyIHNldEV1aURldlByb3ZpZGVyV2FybmluZyA9IGZ1bmN0aW9uIHNldEV1aURldlByb3ZpZGVyV2FybmluZyh3YXJuaW5nVHlwZSkge1xuICByZXR1cm4gcHJvdmlkZXJXYXJuaW5nID0gd2FybmluZ1R5cGU7XG59O1xuZXhwb3J0IHZhciBnZXRFdWlEZXZQcm92aWRlcldhcm5pbmcgPSBmdW5jdGlvbiBnZXRFdWlEZXZQcm92aWRlcldhcm5pbmcoKSB7XG4gIHJldHVybiBwcm92aWRlcldhcm5pbmc7XG59O1xuXG4vLyBOb3QgYSBwdWJsaWMgdG9wLWxldmVsIEVVSSBleHBvcnQsIGN1cnJlbnRseSBmb3IgaW50ZXJuYWwgdXNlXG5leHBvcnQgdmFyIGVtaXRFdWlQcm92aWRlcldhcm5pbmcgPSBmdW5jdGlvbiBlbWl0RXVpUHJvdmlkZXJXYXJuaW5nKHByb3ZpZGVyTWVzc2FnZSkge1xuICAvLyBIYW5kbGUgY2FsbGJhY2sgdHlwZXNcbiAgaWYgKHR5cGVvZiBwcm92aWRlcldhcm5pbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gcHJvdmlkZXJXYXJuaW5nKHByb3ZpZGVyTWVzc2FnZSk7XG4gIH1cbiAgLy8gSGFuZGxlIGxldmVsIHR5cGVzXG4gIHN3aXRjaCAocHJvdmlkZXJXYXJuaW5nKSB7XG4gICAgY2FzZSAnbG9nJzpcbiAgICAgIGNvbnNvbGUubG9nKHByb3ZpZGVyTWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd3YXJuJzpcbiAgICAgIGNvbnNvbGUud2Fybihwcm92aWRlck1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZXJyb3InOlxuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb3ZpZGVyTWVzc2FnZSk7XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG59OyIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCB3ZWFrTWVtb2l6ZSBmcm9tICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCByZWdpc3RlclN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5cbnZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbi8qIGltcG9ydCB7IHR5cGUgRW1vdGlvbkNhY2hlIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnICovXG52YXIgRW1vdGlvbkNhY2hlQ29udGV4dFxuLyo6IFJlYWN0LkNvbnRleHQ8RW1vdGlvbkNhY2hlIHwgbnVsbD4gKi9cbj0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCggLy8gd2UncmUgZG9pbmcgdGhpcyB0byBhdm9pZCBwcmVjb25zdHJ1Y3QncyBkZWFkIGNvZGUgZWxpbWluYXRpb24gaW4gdGhpcyBvbmUgY2FzZVxuLy8gYmVjYXVzZSB0aGlzIG1vZHVsZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlXG4vLyBidXQgaXQncyBhbHNvIHJlcXVpcmVkIGluIHJlYWN0IG5hdGl2ZSBhbmQgc2ltaWxhciBlbnZpcm9ubWVudHMgc29tZXRpbWVzXG4vLyBhbmQgd2UgY291bGQgaGF2ZSBhIHNwZWNpYWwgYnVpbGQganVzdCBmb3IgdGhhdFxuLy8gYnV0IHRoaXMgaXMgbXVjaCBlYXNpZXIgYW5kIHRoZSBuYXRpdmUgcGFja2FnZXNcbi8vIG1pZ2h0IHVzZSBhIGRpZmZlcmVudCB0aGVtZSBjb250ZXh0IGluIHRoZSBmdXR1cmUgYW55d2F5XG50eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnID8gLyogI19fUFVSRV9fICovY3JlYXRlQ2FjaGUoe1xuICBrZXk6ICdjc3MnXG59KSA6IG51bGwpO1xuXG52YXIgQ2FjaGVQcm92aWRlciA9IEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXI7XG52YXIgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gdXNlRW1vdGlvbkNhY2hlKClcbi8qOiBFbW90aW9uQ2FjaGUgfCBudWxsKi9cbntcbiAgcmV0dXJuIHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG59O1xuXG52YXIgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGVcbi8qIDxQcm9wcywgUmVmOiBSZWFjdC5SZWY8Kj4+ICovXG4oZnVuY1xuLyo6IChwcm9wczogUHJvcHMsIGNhY2hlOiBFbW90aW9uQ2FjaGUsIHJlZjogUmVmKSA9PiBSZWFjdC5Ob2RlICovXG4pXG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8UHJvcHM+ICovXG57XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHNcbiAgLyo6IFByb3BzICovXG4gICwgcmVmXG4gIC8qOiBSZWYgKi9cbiAgKSB7XG4gICAgLy8gdGhlIGNhY2hlIHdpbGwgbmV2ZXIgYmUgbnVsbCBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBjYWNoZSA9IHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG4gICAgcmV0dXJuIGZ1bmMocHJvcHMsIGNhY2hlLCByZWYpO1xuICB9KTtcbn07XG5cbnZhciBUaGVtZUNvbnRleHQgPSAvKiAjX19QVVJFX18gKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcblxudmFyIHVzZVRoZW1lID0gZnVuY3Rpb24gdXNlVGhlbWUoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG59O1xuXG52YXIgZ2V0VGhlbWUgPSBmdW5jdGlvbiBnZXRUaGVtZShvdXRlclRoZW1lXG4vKjogT2JqZWN0ICovXG4sIHRoZW1lXG4vKjogT2JqZWN0IHwgKE9iamVjdCA9PiBPYmplY3QpICovXG4pIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdXRlclRoZW1lLCB0aGVtZSk7XG59O1xuXG52YXIgY3JlYXRlQ2FjaGVXaXRoVGhlbWUgPSAvKiAjX19QVVJFX18gKi93ZWFrTWVtb2l6ZShmdW5jdGlvbiAob3V0ZXJUaGVtZSkge1xuICByZXR1cm4gd2Vha01lbW9pemUoZnVuY3Rpb24gKHRoZW1lKSB7XG4gICAgcmV0dXJuIGdldFRoZW1lKG91dGVyVGhlbWUsIHRoZW1lKTtcbiAgfSk7XG59KTtcbi8qXG50eXBlIFRoZW1lUHJvdmlkZXJQcm9wcyA9IHtcbiAgdGhlbWU6IE9iamVjdCB8IChPYmplY3QgPT4gT2JqZWN0KSxcbiAgY2hpbGRyZW46IFJlYWN0Lk5vZGVcbn1cbiovXG5cbnZhciBUaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wc1xuLyo6IFRoZW1lUHJvdmlkZXJQcm9wcyAqL1xuKSB7XG4gIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcblxuICBpZiAocHJvcHMudGhlbWUgIT09IHRoZW1lKSB7XG4gICAgdGhlbWUgPSBjcmVhdGVDYWNoZVdpdGhUaGVtZSh0aGVtZSkocHJvcHMudGhlbWUpO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRoZW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB0aGVtZVxuICB9LCBwcm9wcy5jaGlsZHJlbik7XG59O1xuZnVuY3Rpb24gd2l0aFRoZW1lXG4vKiA8Q29uZmlnOiB7fT4gKi9cbihDb21wb25lbnRcbi8qOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDxDb25maWc+ICovXG4pXG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8JERpZmY8Q29uZmlnLCB7IHRoZW1lOiBPYmplY3QgfT4+ICovXG57XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuXG4gIHZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07XG5cbiAgdmFyIFdpdGhUaGVtZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKHJlbmRlcik7XG4gIFdpdGhUaGVtZS5kaXNwbGF5TmFtZSA9IFwiV2l0aFRoZW1lKFwiICsgY29tcG9uZW50TmFtZSArIFwiKVwiO1xuICByZXR1cm4gaG9pc3ROb25SZWFjdFN0YXRpY3MoV2l0aFRoZW1lLCBDb21wb25lbnQpO1xufVxuXG52YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cbnZhciB0eXBlUHJvcE5hbWUgPSAnX19FTU9USU9OX1RZUEVfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgY3JlYXRlRW1vdGlvblByb3BzID0gZnVuY3Rpb24gY3JlYXRlRW1vdGlvblByb3BzKHR5cGVcbi8qOiBSZWFjdC5FbGVtZW50VHlwZSAqL1xuLCBwcm9wc1xuLyo6IE9iamVjdCAqL1xuKSB7XG5cbiAgdmFyIG5ld1Byb3BzXG4gIC8qOiBhbnkgKi9cbiAgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIGtleSkpIHtcbiAgICAgIG5ld1Byb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzW3R5cGVQcm9wTmFtZV0gPSB0eXBlOyAvLyBSdW50aW1lIGxhYmVsaW5nIGlzIGFuIG9wdC1pbiBmZWF0dXJlIGJlY2F1c2U6XG5cbiAgcmV0dXJuIG5ld1Byb3BzO1xufTtcblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkID0gX3JlZi5zZXJpYWxpemVkLFxuICAgICAgaXNTdHJpbmdUYWcgPSBfcmVmLmlzU3RyaW5nVGFnO1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIEVtb3Rpb24gPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKFxuLyogPGFueSwgYW55PiAqL1xuZnVuY3Rpb24gKHByb3BzLCBjYWNoZSwgcmVmKSB7XG4gIHZhciBjc3NQcm9wID0gcHJvcHMuY3NzOyAvLyBzbyB0aGF0IHVzaW5nIGBjc3NgIGZyb20gYGVtb3Rpb25gIGFuZCBwYXNzaW5nIHRoZSByZXN1bHQgdG8gdGhlIGNzcyBwcm9wIHdvcmtzXG4gIC8vIG5vdCBwYXNzaW5nIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIHNlcmlhbGl6ZVN0eWxlcyBiZWNhdXNlIGl0IHdvdWxkXG4gIC8vIG1ha2UgY2VydGFpbiBiYWJlbCBvcHRpbWlzYXRpb25zIG5vdCBwb3NzaWJsZVxuXG4gIGlmICh0eXBlb2YgY3NzUHJvcCA9PT0gJ3N0cmluZycgJiYgY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY3NzUHJvcCA9IGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF07XG4gIH1cblxuICB2YXIgV3JhcHBlZENvbXBvbmVudCA9IHByb3BzW3R5cGVQcm9wTmFtZV07XG4gIHZhciByZWdpc3RlcmVkU3R5bGVzID0gW2Nzc1Byb3BdO1xuICB2YXIgY2xhc3NOYW1lID0gJyc7XG5cbiAgaWYgKHR5cGVvZiBwcm9wcy5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgY2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhjYWNoZS5yZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBwcm9wcy5jbGFzc05hbWUpO1xuICB9IGVsc2UgaWYgKHByb3BzLmNsYXNzTmFtZSAhPSBudWxsKSB7XG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lICsgXCIgXCI7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhyZWdpc3RlcmVkU3R5bGVzLCB1bmRlZmluZWQsIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG5cbiAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIGtleSkgJiYga2V5ICE9PSAnY3NzJyAmJiBrZXkgIT09IHR5cGVQcm9wTmFtZSAmJiAoIWlzRGV2ZWxvcG1lbnQgKSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHMuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuXG4gIGlmIChyZWYpIHtcbiAgICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBzZXJpYWxpemVkOiBzZXJpYWxpemVkLFxuICAgIGlzU3RyaW5nVGFnOiB0eXBlb2YgV3JhcHBlZENvbXBvbmVudCA9PT0gJ3N0cmluZydcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIG5ld1Byb3BzKSk7XG59KTtcblxudmFyIEVtb3Rpb24kMSA9IEVtb3Rpb247XG5cbmV4cG9ydCB7IENhY2hlUHJvdmlkZXIgYXMgQywgRW1vdGlvbiQxIGFzIEUsIFRoZW1lQ29udGV4dCBhcyBULCBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUgYXMgXywgVGhlbWVQcm92aWRlciBhcyBhLCB3aXRoVGhlbWUgYXMgYiwgY3JlYXRlRW1vdGlvblByb3BzIGFzIGMsIGhhc093biBhcyBoLCBpc0RldmVsb3BtZW50IGFzIGksIHVzZVRoZW1lIGFzIHUsIHdpdGhFbW90aW9uQ2FjaGUgYXMgdyB9O1xuIiwgInZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbi8qXG5cbkJhc2VkIG9mZiBnbGFtb3IncyBTdHlsZVNoZWV0LCB0aGFua3MgU3VuaWwgXHUyNzY0XHVGRTBGXG5cbmhpZ2ggcGVyZm9ybWFuY2UgU3R5bGVTaGVldCBmb3IgY3NzLWluLWpzIHN5c3RlbXNcblxuLSB1c2VzIG11bHRpcGxlIHN0eWxlIHRhZ3MgYmVoaW5kIHRoZSBzY2VuZXMgZm9yIG1pbGxpb25zIG9mIHJ1bGVzXG4tIHVzZXMgYGluc2VydFJ1bGVgIGZvciBhcHBlbmRpbmcgaW4gcHJvZHVjdGlvbiBmb3IgKm11Y2gqIGZhc3RlciBwZXJmb3JtYW5jZVxuXG4vLyB1c2FnZVxuXG5pbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnXG5cbmxldCBzdHlsZVNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoeyBrZXk6ICcnLCBjb250YWluZXI6IGRvY3VtZW50LmhlYWQgfSlcblxuc3R5bGVTaGVldC5pbnNlcnQoJyNib3ggeyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IH0nKVxuLSBhcHBlbmRzIGEgY3NzIHJ1bGUgaW50byB0aGUgc3R5bGVzaGVldFxuXG5zdHlsZVNoZWV0LmZsdXNoKClcbi0gZW1wdGllcyB0aGUgc3R5bGVzaGVldCBvZiBhbGwgaXRzIGNvbnRlbnRzXG5cbiovXG5cbmZ1bmN0aW9uIHNoZWV0Rm9yVGFnKHRhZykge1xuICBpZiAodGFnLnNoZWV0KSB7XG4gICAgcmV0dXJuIHRhZy5zaGVldDtcbiAgfSAvLyB0aGlzIHdlaXJkbmVzcyBicm91Z2h0IHRvIHlvdSBieSBmaXJlZm94XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlID09PSB0YWcpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICB9XG4gIH0gLy8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYWx3YXlzIHJldHVybiB3aXRoIGEgdmFsdWVcbiAgLy8gVFMgY2FuJ3QgdW5kZXJzdGFuZCBpdCB0aG91Z2ggc28gd2UgbWFrZSBpdCBzdG9wIGNvbXBsYWluaW5nIGhlcmVcblxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciB0YWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBvcHRpb25zLmtleSk7XG5cbiAgaWYgKG9wdGlvbnMubm9uY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgb3B0aW9ucy5ub25jZSk7XG4gIH1cblxuICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1zJywgJycpO1xuICByZXR1cm4gdGFnO1xufVxuXG52YXIgU3R5bGVTaGVldCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIC8vIFVzaW5nIE5vZGUgaW5zdGVhZCBvZiBIVE1MRWxlbWVudCBzaW5jZSBjb250YWluZXIgbWF5IGJlIGEgU2hhZG93Um9vdFxuICBmdW5jdGlvbiBTdHlsZVNoZWV0KG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5faW5zZXJ0VGFnID0gZnVuY3Rpb24gKHRhZykge1xuICAgICAgdmFyIGJlZm9yZTtcblxuICAgICAgaWYgKF90aGlzLnRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChfdGhpcy5pbnNlcnRpb25Qb2ludCkge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmluc2VydGlvblBvaW50Lm5leHRTaWJsaW5nO1xuICAgICAgICB9IGVsc2UgaWYgKF90aGlzLnByZXBlbmQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5jb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5iZWZvcmU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJlZm9yZSA9IF90aGlzLnRhZ3NbX3RoaXMudGFncy5sZW5ndGggLSAxXS5uZXh0U2libGluZztcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY29udGFpbmVyLmluc2VydEJlZm9yZSh0YWcsIGJlZm9yZSk7XG5cbiAgICAgIF90aGlzLnRhZ3MucHVzaCh0YWcpO1xuICAgIH07XG5cbiAgICB0aGlzLmlzU3BlZWR5ID0gb3B0aW9ucy5zcGVlZHkgPT09IHVuZGVmaW5lZCA/ICFpc0RldmVsb3BtZW50IDogb3B0aW9ucy5zcGVlZHk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICAgIHRoaXMubm9uY2UgPSBvcHRpb25zLm5vbmNlOyAvLyBrZXkgaXMgdGhlIHZhbHVlIG9mIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlLCBpdCdzIHVzZWQgdG8gaWRlbnRpZnkgZGlmZmVyZW50IHNoZWV0c1xuXG4gICAgdGhpcy5rZXkgPSBvcHRpb25zLmtleTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgIHRoaXMucHJlcGVuZCA9IG9wdGlvbnMucHJlcGVuZDtcbiAgICB0aGlzLmluc2VydGlvblBvaW50ID0gb3B0aW9ucy5pbnNlcnRpb25Qb2ludDtcbiAgICB0aGlzLmJlZm9yZSA9IG51bGw7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3R5bGVTaGVldC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmh5ZHJhdGUgPSBmdW5jdGlvbiBoeWRyYXRlKG5vZGVzKSB7XG4gICAgbm9kZXMuZm9yRWFjaCh0aGlzLl9pbnNlcnRUYWcpO1xuICB9O1xuXG4gIF9wcm90by5pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgIC8vIHRoZSBtYXggbGVuZ3RoIGlzIGhvdyBtYW55IHJ1bGVzIHdlIGhhdmUgcGVyIHN0eWxlIHRhZywgaXQncyA2NTAwMCBpbiBzcGVlZHkgbW9kZVxuICAgIC8vIGl0J3MgMSBpbiBkZXYgYmVjYXVzZSB3ZSBpbnNlcnQgc291cmNlIG1hcHMgdGhhdCBtYXAgYSBzaW5nbGUgcnVsZSB0byBhIGxvY2F0aW9uXG4gICAgLy8gYW5kIHlvdSBjYW4gb25seSBoYXZlIG9uZSBzb3VyY2UgbWFwIHBlciBzdHlsZSB0YWdcbiAgICBpZiAodGhpcy5jdHIgJSAodGhpcy5pc1NwZWVkeSA/IDY1MDAwIDogMSkgPT09IDApIHtcbiAgICAgIHRoaXMuX2luc2VydFRhZyhjcmVhdGVTdHlsZUVsZW1lbnQodGhpcykpO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHRoaXMuaXNTcGVlZHkpIHtcbiAgICAgIHZhciBzaGVldCA9IHNoZWV0Rm9yVGFnKHRhZyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIHVsdHJhZmFzdCB2ZXJzaW9uLCB3b3JrcyBhY3Jvc3MgYnJvd3NlcnNcbiAgICAgICAgLy8gdGhlIGJpZyBkcmF3YmFjayBpcyB0aGF0IHRoZSBjc3Mgd29uJ3QgYmUgZWRpdGFibGUgaW4gZGV2dG9vbHNcbiAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShydWxlLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnVsZSkpO1xuICAgIH1cblxuICAgIHRoaXMuY3RyKys7XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgdGhpcy50YWdzLmZvckVhY2goZnVuY3Rpb24gKHRhZykge1xuICAgICAgdmFyIF90YWckcGFyZW50Tm9kZTtcblxuICAgICAgcmV0dXJuIChfdGFnJHBhcmVudE5vZGUgPSB0YWcucGFyZW50Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90YWckcGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0YWcpO1xuICAgIH0pO1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgfTtcblxuICByZXR1cm4gU3R5bGVTaGVldDtcbn0oKTtcblxuZXhwb3J0IHsgU3R5bGVTaGVldCB9O1xuIiwgImV4cG9ydCB2YXIgTVMgPSAnLW1zLSdcbmV4cG9ydCB2YXIgTU9aID0gJy1tb3otJ1xuZXhwb3J0IHZhciBXRUJLSVQgPSAnLXdlYmtpdC0nXG5cbmV4cG9ydCB2YXIgQ09NTUVOVCA9ICdjb21tJ1xuZXhwb3J0IHZhciBSVUxFU0VUID0gJ3J1bGUnXG5leHBvcnQgdmFyIERFQ0xBUkFUSU9OID0gJ2RlY2wnXG5cbmV4cG9ydCB2YXIgUEFHRSA9ICdAcGFnZSdcbmV4cG9ydCB2YXIgTUVESUEgPSAnQG1lZGlhJ1xuZXhwb3J0IHZhciBJTVBPUlQgPSAnQGltcG9ydCdcbmV4cG9ydCB2YXIgQ0hBUlNFVCA9ICdAY2hhcnNldCdcbmV4cG9ydCB2YXIgVklFV1BPUlQgPSAnQHZpZXdwb3J0J1xuZXhwb3J0IHZhciBTVVBQT1JUUyA9ICdAc3VwcG9ydHMnXG5leHBvcnQgdmFyIERPQ1VNRU5UID0gJ0Bkb2N1bWVudCdcbmV4cG9ydCB2YXIgTkFNRVNQQUNFID0gJ0BuYW1lc3BhY2UnXG5leHBvcnQgdmFyIEtFWUZSQU1FUyA9ICdAa2V5ZnJhbWVzJ1xuZXhwb3J0IHZhciBGT05UX0ZBQ0UgPSAnQGZvbnQtZmFjZSdcbmV4cG9ydCB2YXIgQ09VTlRFUl9TVFlMRSA9ICdAY291bnRlci1zdHlsZSdcbmV4cG9ydCB2YXIgRk9OVF9GRUFUVVJFX1ZBTFVFUyA9ICdAZm9udC1mZWF0dXJlLXZhbHVlcydcbmV4cG9ydCB2YXIgTEFZRVIgPSAnQGxheWVyJ1xuIiwgIi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnNcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IHZhciBmcm9tID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ25cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2ggKHZhbHVlLCBsZW5ndGgpIHtcblx0cmV0dXJuIGNoYXJhdCh2YWx1ZSwgMCkgXiA0NSA/ICgoKCgoKChsZW5ndGggPDwgMikgXiBjaGFyYXQodmFsdWUsIDApKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMSkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAyKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDMpIDogMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLnRyaW0oKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZz99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaCAodmFsdWUsIHBhdHRlcm4pIHtcblx0cmV0dXJuICh2YWx1ZSA9IHBhdHRlcm4uZXhlYyh2YWx1ZSkpID8gdmFsdWVbMF0gOiB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHBhdHRlcm5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZSAodmFsdWUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhvZiAodmFsdWUsIHNlYXJjaCkge1xuXHRyZXR1cm4gdmFsdWUuaW5kZXhPZihzZWFyY2gpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJhdCAodmFsdWUsIGluZGV4KSB7XG5cdHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KSB8IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyICh2YWx1ZSwgYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gdmFsdWUuc2xpY2UoYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaXplb2YgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7YW55W119IGFycmF5XG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQgKHZhbHVlLCBhcnJheSkge1xuXHRyZXR1cm4gYXJyYXkucHVzaCh2YWx1ZSksIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lIChhcnJheSwgY2FsbGJhY2spIHtcblx0cmV0dXJuIGFycmF5Lm1hcChjYWxsYmFjaykuam9pbignJylcbn1cbiIsICJpbXBvcnQge2Zyb20sIHRyaW0sIGNoYXJhdCwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgYXNzaWdufSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbmV4cG9ydCB2YXIgbGluZSA9IDFcbmV4cG9ydCB2YXIgY29sdW1uID0gMVxuZXhwb3J0IHZhciBsZW5ndGggPSAwXG5leHBvcnQgdmFyIHBvc2l0aW9uID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXIgPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlcnMgPSAnJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSByb290XG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmd9IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdFtdIHwgc3RyaW5nfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9kZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0cmV0dXJuIHt2YWx1ZTogdmFsdWUsIHJvb3Q6IHJvb3QsIHBhcmVudDogcGFyZW50LCB0eXBlOiB0eXBlLCBwcm9wczogcHJvcHMsIGNoaWxkcmVuOiBjaGlsZHJlbiwgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4sIGxlbmd0aDogbGVuZ3RoLCByZXR1cm46ICcnfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHJvb3QsIHByb3BzKSB7XG5cdHJldHVybiBhc3NpZ24obm9kZSgnJywgbnVsbCwgbnVsbCwgJycsIG51bGwsIG51bGwsIDApLCByb290LCB7bGVuZ3RoOiAtcm9vdC5sZW5ndGh9LCBwcm9wcylcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyICgpIHtcblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXYgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA+IDAgPyBjaGFyYXQoY2hhcmFjdGVycywgLS1wb3NpdGlvbikgOiAwXG5cblx0aWYgKGNvbHVtbi0tLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUtLVxuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPCBsZW5ndGggPyBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24rKykgOiAwXG5cblx0aWYgKGNvbHVtbisrLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUrK1xuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZWVrICgpIHtcblx0cmV0dXJuIGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXJldCAoKSB7XG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xpY2UgKGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHN1YnN0cihjaGFyYWN0ZXJzLCBiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbiAodHlwZSkge1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHQvLyBcXDAgXFx0IFxcbiBcXHIgXFxzIHdoaXRlc3BhY2UgdG9rZW5cblx0XHRjYXNlIDA6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdHJldHVybiA1XG5cdFx0Ly8gISArICwgLyA+IEAgfiBpc29sYXRlIHRva2VuXG5cdFx0Y2FzZSAzMzogY2FzZSA0MzogY2FzZSA0NDogY2FzZSA0NzogY2FzZSA2MjogY2FzZSA2NDogY2FzZSAxMjY6XG5cdFx0Ly8gOyB7IH0gYnJlYWtwb2ludCB0b2tlblxuXHRcdGNhc2UgNTk6IGNhc2UgMTIzOiBjYXNlIDEyNTpcblx0XHRcdHJldHVybiA0XG5cdFx0Ly8gOiBhY2NvbXBhbmllZCB0b2tlblxuXHRcdGNhc2UgNTg6XG5cdFx0XHRyZXR1cm4gM1xuXHRcdC8vIFwiICcgKCBbIG9wZW5pbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgNDA6IGNhc2UgOTE6XG5cdFx0XHRyZXR1cm4gMlxuXHRcdC8vICkgXSBjbG9zaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDQxOiBjYXNlIDkzOlxuXHRcdFx0cmV0dXJuIDFcblx0fVxuXG5cdHJldHVybiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnlbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gbGluZSA9IGNvbHVtbiA9IDEsIGxlbmd0aCA9IHN0cmxlbihjaGFyYWN0ZXJzID0gdmFsdWUpLCBwb3NpdGlvbiA9IDAsIFtdXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gY2hhcmFjdGVycyA9ICcnLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ICh0eXBlKSB7XG5cdHJldHVybiB0cmltKHNsaWNlKHBvc2l0aW9uIC0gMSwgZGVsaW1pdGVyKHR5cGUgPT09IDkxID8gdHlwZSArIDIgOiB0eXBlID09PSA0MCA/IHR5cGUgKyAxIDogdHlwZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2ModG9rZW5pemVyKGFsbG9jKHZhbHVlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoaXRlc3BhY2UgKHR5cGUpIHtcblx0d2hpbGUgKGNoYXJhY3RlciA9IHBlZWsoKSlcblx0XHRpZiAoY2hhcmFjdGVyIDwgMzMpXG5cdFx0XHRuZXh0KClcblx0XHRlbHNlXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiB0b2tlbih0eXBlKSA+IDIgfHwgdG9rZW4oY2hhcmFjdGVyKSA+IDMgPyAnJyA6ICcgJ1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplciAoY2hpbGRyZW4pIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcblx0XHRcdGNhc2UgMDogYXBwZW5kKGlkZW50aWZpZXIocG9zaXRpb24gLSAxKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlIDI6IGFwcGVuZChkZWxpbWl0KGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0ZGVmYXVsdDogYXBwZW5kKGZyb20oY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0fVxuXG5cdHJldHVybiBjaGlsZHJlblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGluZyAoaW5kZXgsIGNvdW50KSB7XG5cdHdoaWxlICgtLWNvdW50ICYmIG5leHQoKSlcblx0XHQvLyBub3QgMC05IEEtRiBhLWZcblx0XHRpZiAoY2hhcmFjdGVyIDwgNDggfHwgY2hhcmFjdGVyID4gMTAyIHx8IChjaGFyYWN0ZXIgPiA1NyAmJiBjaGFyYWN0ZXIgPCA2NSkgfHwgKGNoYXJhY3RlciA+IDcwICYmIGNoYXJhY3RlciA8IDk3KSlcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBjYXJldCgpICsgKGNvdW50IDwgNiAmJiBwZWVrKCkgPT0gMzIgJiYgbmV4dCgpID09IDMyKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdGVyICh0eXBlKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdC8vIF0gKSBcIiAnXG5cdFx0XHRjYXNlIHR5cGU6XG5cdFx0XHRcdHJldHVybiBwb3NpdGlvblxuXHRcdFx0Ly8gXCIgJ1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTpcblx0XHRcdFx0aWYgKHR5cGUgIT09IDM0ICYmIHR5cGUgIT09IDM5KVxuXHRcdFx0XHRcdGRlbGltaXRlcihjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAodHlwZSA9PT0gNDEpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKHR5cGUpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0bmV4dCgpXG5cdFx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnRlciAodHlwZSwgaW5kZXgpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHQvLyAvL1xuXHRcdGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0NyArIDEwKVxuXHRcdFx0YnJlYWtcblx0XHQvLyAvKlxuXHRcdGVsc2UgaWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQyICsgNDIgJiYgcGVlaygpID09PSA0Nylcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuICcvKicgKyBzbGljZShpbmRleCwgcG9zaXRpb24gLSAxKSArICcqJyArIGZyb20odHlwZSA9PT0gNDcgPyB0eXBlIDogbmV4dCgpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllciAoaW5kZXgpIHtcblx0d2hpbGUgKCF0b2tlbihwZWVrKCkpKVxuXHRcdG5leHQoKVxuXG5cdHJldHVybiBzbGljZShpbmRleCwgcG9zaXRpb24pXG59XG4iLCAiaW1wb3J0IHtDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHthYnMsIGNoYXJhdCwgdHJpbSwgZnJvbSwgc2l6ZW9mLCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCByZXBsYWNlLCBpbmRleG9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge25vZGUsIGNoYXIsIHByZXYsIG5leHQsIHBlZWssIGNhcmV0LCBhbGxvYywgZGVhbGxvYywgZGVsaW1pdCwgd2hpdGVzcGFjZSwgZXNjYXBpbmcsIGlkZW50aWZpZXIsIGNvbW1lbnRlcn0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtvYmplY3RbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHBhcnNlKCcnLCBudWxsLCBudWxsLCBudWxsLCBbJyddLCB2YWx1ZSA9IGFsbG9jKHZhbHVlKSwgMCwgWzBdLCB2YWx1ZSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc2V0c1xuICogQHBhcmFtIHtudW1iZXJbXX0gcHNldWRvXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGRlY2xhcmF0aW9uc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UgKHZhbHVlLCByb290LCBwYXJlbnQsIHJ1bGUsIHJ1bGVzLCBydWxlc2V0cywgcHNldWRvLCBwb2ludHMsIGRlY2xhcmF0aW9ucykge1xuXHR2YXIgaW5kZXggPSAwXG5cdHZhciBvZmZzZXQgPSAwXG5cdHZhciBsZW5ndGggPSBwc2V1ZG9cblx0dmFyIGF0cnVsZSA9IDBcblx0dmFyIHByb3BlcnR5ID0gMFxuXHR2YXIgcHJldmlvdXMgPSAwXG5cdHZhciB2YXJpYWJsZSA9IDFcblx0dmFyIHNjYW5uaW5nID0gMVxuXHR2YXIgYW1wZXJzYW5kID0gMVxuXHR2YXIgY2hhcmFjdGVyID0gMFxuXHR2YXIgdHlwZSA9ICcnXG5cdHZhciBwcm9wcyA9IHJ1bGVzXG5cdHZhciBjaGlsZHJlbiA9IHJ1bGVzZXRzXG5cdHZhciByZWZlcmVuY2UgPSBydWxlXG5cdHZhciBjaGFyYWN0ZXJzID0gdHlwZVxuXG5cdHdoaWxlIChzY2FubmluZylcblx0XHRzd2l0Y2ggKHByZXZpb3VzID0gY2hhcmFjdGVyLCBjaGFyYWN0ZXIgPSBuZXh0KCkpIHtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmIChwcmV2aW91cyAhPSAxMDggJiYgY2hhcmF0KGNoYXJhY3RlcnMsIGxlbmd0aCAtIDEpID09IDU4KSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4b2YoY2hhcmFjdGVycyArPSByZXBsYWNlKGRlbGltaXQoY2hhcmFjdGVyKSwgJyYnLCAnJlxcZicpLCAnJlxcZicpICE9IC0xKVxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gLTFcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBcIiAnIFtcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgOTE6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXHQgXFxuIFxcciBcXHNcblx0XHRcdGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSB3aGl0ZXNwYWNlKHByZXZpb3VzKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZXNjYXBpbmcoY2FyZXQoKSAtIDEsIDcpXG5cdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHQvLyAvXG5cdFx0XHRjYXNlIDQ3OlxuXHRcdFx0XHRzd2l0Y2ggKHBlZWsoKSkge1xuXHRcdFx0XHRcdGNhc2UgNDI6IGNhc2UgNDc6XG5cdFx0XHRcdFx0XHRhcHBlbmQoY29tbWVudChjb21tZW50ZXIobmV4dCgpLCBjYXJldCgpKSwgcm9vdCwgcGFyZW50KSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSAnLydcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8ge1xuXHRcdFx0Y2FzZSAxMjMgKiB2YXJpYWJsZTpcblx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gc3RybGVuKGNoYXJhY3RlcnMpICogYW1wZXJzYW5kXG5cdFx0XHQvLyB9IDsgXFwwXG5cdFx0XHRjYXNlIDEyNSAqIHZhcmlhYmxlOiBjYXNlIDU5OiBjYXNlIDA6XG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHRcdFx0Ly8gXFwwIH1cblx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgMTI1OiBzY2FubmluZyA9IDBcblx0XHRcdFx0XHQvLyA7XG5cdFx0XHRcdFx0Y2FzZSA1OSArIG9mZnNldDogaWYgKGFtcGVyc2FuZCA9PSAtMSkgY2hhcmFjdGVycyA9IHJlcGxhY2UoY2hhcmFjdGVycywgL1xcZi9nLCAnJylcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA+IDAgJiYgKHN0cmxlbihjaGFyYWN0ZXJzKSAtIGxlbmd0aCkpXG5cdFx0XHRcdFx0XHRcdGFwcGVuZChwcm9wZXJ0eSA+IDMyID8gZGVjbGFyYXRpb24oY2hhcmFjdGVycyArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAxKSA6IGRlY2xhcmF0aW9uKHJlcGxhY2UoY2hhcmFjdGVycywgJyAnLCAnJykgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMiksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQCA7XG5cdFx0XHRcdFx0Y2FzZSA1OTogY2hhcmFjdGVycyArPSAnOydcblx0XHRcdFx0XHQvLyB7IHJ1bGUvYXQtcnVsZVxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRhcHBlbmQocmVmZXJlbmNlID0gcnVsZXNldChjaGFyYWN0ZXJzLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzID0gW10sIGNoaWxkcmVuID0gW10sIGxlbmd0aCksIHJ1bGVzZXRzKVxuXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSAxMjMpXG5cdFx0XHRcdFx0XHRcdGlmIChvZmZzZXQgPT09IDApXG5cdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcm9vdCwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHByb3BzLCBydWxlc2V0cywgbGVuZ3RoLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChhdHJ1bGUgPT09IDk5ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCAzKSA9PT0gMTEwID8gMTAwIDogYXRydWxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBkIGwgbSBzXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDEwMDogY2FzZSAxMDg6IGNhc2UgMTA5OiBjYXNlIDExNTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBydWxlICYmIGFwcGVuZChydWxlc2V0KHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgMCwgMCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcnVsZXMsIHByb3BzID0gW10sIGxlbmd0aCksIGNoaWxkcmVuKSwgcnVsZXMsIGNoaWxkcmVuLCBsZW5ndGgsIHBvaW50cywgcnVsZSA/IHByb3BzIDogY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBbJyddLCBjaGlsZHJlbiwgMCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbmRleCA9IG9mZnNldCA9IHByb3BlcnR5ID0gMCwgdmFyaWFibGUgPSBhbXBlcnNhbmQgPSAxLCB0eXBlID0gY2hhcmFjdGVycyA9ICcnLCBsZW5ndGggPSBwc2V1ZG9cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIDpcblx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdGxlbmd0aCA9IDEgKyBzdHJsZW4oY2hhcmFjdGVycyksIHByb3BlcnR5ID0gcHJldmlvdXNcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh2YXJpYWJsZSA8IDEpXG5cdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PSAxMjMpXG5cdFx0XHRcdFx0XHQtLXZhcmlhYmxlXG5cdFx0XHRcdFx0ZWxzZSBpZiAoY2hhcmFjdGVyID09IDEyNSAmJiB2YXJpYWJsZSsrID09IDAgJiYgcHJldigpID09IDEyNSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXJzICs9IGZyb20oY2hhcmFjdGVyKSwgY2hhcmFjdGVyICogdmFyaWFibGUpIHtcblx0XHRcdFx0XHQvLyAmXG5cdFx0XHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IG9mZnNldCA+IDAgPyAxIDogKGNoYXJhY3RlcnMgKz0gJ1xcZicsIC0xKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAsXG5cdFx0XHRcdFx0Y2FzZSA0NDpcblx0XHRcdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IChzdHJsZW4oY2hhcmFjdGVycykgLSAxKSAqIGFtcGVyc2FuZCwgYW1wZXJzYW5kID0gMVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAXG5cdFx0XHRcdFx0Y2FzZSA2NDpcblx0XHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRcdGlmIChwZWVrKCkgPT09IDQ1KVxuXHRcdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQobmV4dCgpKVxuXG5cdFx0XHRcdFx0XHRhdHJ1bGUgPSBwZWVrKCksIG9mZnNldCA9IGxlbmd0aCA9IHN0cmxlbih0eXBlID0gY2hhcmFjdGVycyArPSBpZGVudGlmaWVyKGNhcmV0KCkpKSwgY2hhcmFjdGVyKytcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdGNhc2UgNDU6XG5cdFx0XHRcdFx0XHRpZiAocHJldmlvdXMgPT09IDQ1ICYmIHN0cmxlbihjaGFyYWN0ZXJzKSA9PSAyKVxuXHRcdFx0XHRcdFx0XHR2YXJpYWJsZSA9IDBcblx0XHRcdFx0fVxuXHRcdH1cblxuXHRyZXR1cm4gcnVsZXNldHNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2V0ICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHR2YXIgcG9zdCA9IG9mZnNldCAtIDFcblx0dmFyIHJ1bGUgPSBvZmZzZXQgPT09IDAgPyBydWxlcyA6IFsnJ11cblx0dmFyIHNpemUgPSBzaXplb2YocnVsZSlcblxuXHRmb3IgKHZhciBpID0gMCwgaiA9IDAsIGsgPSAwOyBpIDwgaW5kZXg7ICsraSlcblx0XHRmb3IgKHZhciB4ID0gMCwgeSA9IHN1YnN0cih2YWx1ZSwgcG9zdCArIDEsIHBvc3QgPSBhYnMoaiA9IHBvaW50c1tpXSkpLCB6ID0gdmFsdWU7IHggPCBzaXplOyArK3gpXG5cdFx0XHRpZiAoeiA9IHRyaW0oaiA+IDAgPyBydWxlW3hdICsgJyAnICsgeSA6IHJlcGxhY2UoeSwgLyZcXGYvZywgcnVsZVt4XSkpKVxuXHRcdFx0XHRwcm9wc1trKytdID0gelxuXG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIG9mZnNldCA9PT0gMCA/IFJVTEVTRVQgOiB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudCAodmFsdWUsIHJvb3QsIHBhcmVudCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBDT01NRU5ULCBmcm9tKGNoYXIoKSksIHN1YnN0cih2YWx1ZSwgMiwgLTIpLCAwKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiAodmFsdWUsIHJvb3QsIHBhcmVudCwgbGVuZ3RoKSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIERFQ0xBUkFUSU9OLCBzdWJzdHIodmFsdWUsIDAsIGxlbmd0aCksIHN1YnN0cih2YWx1ZSwgbGVuZ3RoICsgMSwgLTEpLCBsZW5ndGgpXG59XG4iLCAiaW1wb3J0IHtJTVBPUlQsIExBWUVSLCBDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTiwgS0VZRlJBTUVTfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge3N0cmxlbiwgc2l6ZW9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUgKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHR2YXIgb3V0cHV0ID0gJydcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjaGlsZHJlbilcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdG91dHB1dCArPSBjYWxsYmFjayhjaGlsZHJlbltpXSwgaSwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgTEFZRVI6IGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgYnJlYWtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJylcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiIsICJpbXBvcnQge01TLCBNT1osIFdFQktJVCwgUlVMRVNFVCwgS0VZRlJBTUVTLCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHttYXRjaCwgY2hhcmF0LCBzdWJzdHIsIHN0cmxlbiwgc2l6ZW9mLCByZXBsYWNlLCBjb21iaW5lfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge2NvcHksIHRva2VuaXplfSBmcm9tICcuL1Rva2VuaXplci5qcydcbmltcG9ydCB7c2VyaWFsaXplfSBmcm9tICcuL1NlcmlhbGl6ZXIuanMnXG5pbXBvcnQge3ByZWZpeH0gZnJvbSAnLi9QcmVmaXhlci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uW119IGNvbGxlY3Rpb25cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlkZGxld2FyZSAoY29sbGVjdGlvbikge1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNvbGxlY3Rpb24pXG5cblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdFx0dmFyIG91dHB1dCA9ICcnXG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0b3V0cHV0ICs9IGNvbGxlY3Rpb25baV0oZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRcdHJldHVybiBvdXRwdXRcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzaGVldCAoY2FsbGJhY2spIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0aWYgKCFlbGVtZW50LnJvb3QpXG5cdFx0XHRpZiAoZWxlbWVudCA9IGVsZW1lbnQucmV0dXJuKVxuXHRcdFx0XHRjYWxsYmFjayhlbGVtZW50KVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlciAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRpZiAoZWxlbWVudC5sZW5ndGggPiAtMSlcblx0XHRpZiAoIWVsZW1lbnQucmV0dXJuKVxuXHRcdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBERUNMQVJBVElPTjogZWxlbWVudC5yZXR1cm4gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHRjYXNlIEtFWUZSQU1FUzpcblx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHt2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVCl9KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQubGVuZ3RoKVxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnJlYWQtKG9ubHl8d3JpdGUpXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOnJlYWQtb25seSc6IGNhc2UgJzpyZWFkLXdyaXRlJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOjpwbGFjZWhvbGRlcic6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBXRUJLSVQgKyAnaW5wdXQtJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCBNUyArICdpbnB1dC0kMScpXX0pXG5cdFx0XHRcdFx0XHRcdFx0XHRdLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJldHVybiAnJ1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlIChlbGVtZW50KSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0ZWxlbWVudC5wcm9wcyA9IGVsZW1lbnQucHJvcHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gY29tYmluZSh0b2tlbml6ZSh2YWx1ZSksIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNoaWxkcmVuKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIDApKSB7XG5cdFx0XHRcdFx0XHQvLyBcXGZcblx0XHRcdFx0XHRcdGNhc2UgMTI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzdWJzdHIodmFsdWUsIDEsIHN0cmxlbih2YWx1ZSkpXG5cdFx0XHRcdFx0XHQvLyBcXDAgKCArID4gflxuXHRcdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDQwOiBjYXNlIDQzOiBjYXNlIDYyOiBjYXNlIDEyNjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHQvLyA6XG5cdFx0XHRcdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRcdFx0XHRpZiAoY2hpbGRyZW5bKytpbmRleF0gPT09ICdnbG9iYWwnKVxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuW2luZGV4XSA9ICcnLCBjaGlsZHJlblsrK2luZGV4XSA9ICdcXGYnICsgc3Vic3RyKGNoaWxkcmVuW2luZGV4XSwgaW5kZXggPSAxLCAtMSlcblx0XHRcdFx0XHRcdC8vIFxcc1xuXHRcdFx0XHRcdFx0Y2FzZSAzMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgMDogZWxlbWVudCA9IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2l6ZW9mKGNoaWxkcmVuKSA+IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBpbmRleCA9IHNpemVvZihjaGlsZHJlbikgLSAxOiBjYXNlIDI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDIgPyB2YWx1ZSArIGVsZW1lbnQgKyBlbGVtZW50IDogdmFsdWUgKyBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSlcblx0fVxufVxuIiwgInZhciB3ZWFrTWVtb2l6ZSA9IGZ1bmN0aW9uIHdlYWtNZW1vaXplKGZ1bmMpIHtcbiAgdmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGUuaGFzKGFyZykpIHtcbiAgICAgIC8vIFVzZSBub24tbnVsbCBhc3NlcnRpb24gYmVjYXVzZSB3ZSBqdXN0IGNoZWNrZWQgdGhhdCB0aGUgY2FjaGUgYGhhc2AgaXRcbiAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIHJlbW92ZSBgdW5kZWZpbmVkYCBmcm9tIHRoZSByZXR1cm4gdmFsdWVcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoYXJnKTtcbiAgICB9XG5cbiAgICB2YXIgcmV0ID0gZnVuYyhhcmcpO1xuICAgIGNhY2hlLnNldChhcmcsIHJldCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcbn07XG5cbmV4cG9ydCB7IHdlYWtNZW1vaXplIGFzIGRlZmF1bHQgfTtcbiIsICJmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59XG5cbmV4cG9ydCB7IG1lbW9pemUgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCc7XG5pbXBvcnQgeyBkZWFsbG9jLCBhbGxvYywgbmV4dCwgdG9rZW4sIGZyb20sIHBlZWssIGRlbGltaXQsIHNsaWNlLCBwb3NpdGlvbiwgUlVMRVNFVCwgY29tYmluZSwgbWF0Y2gsIHNlcmlhbGl6ZSwgY29weSwgcmVwbGFjZSwgV0VCS0lULCBNT1osIE1TLCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OLCBoYXNoLCBjaGFyYXQsIHN0cmxlbiwgaW5kZXhvZiwgc3RyaW5naWZ5LCBydWxlc2hlZXQsIG1pZGRsZXdhcmUsIGNvbXBpbGUgfSBmcm9tICdzdHlsaXMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyA9IGZ1bmN0aW9uIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhiZWdpbiwgcG9pbnRzLCBpbmRleCkge1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICB2YXIgY2hhcmFjdGVyID0gMDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHByZXZpb3VzID0gY2hhcmFjdGVyO1xuICAgIGNoYXJhY3RlciA9IHBlZWsoKTsgLy8gJlxcZlxuXG4gICAgaWYgKHByZXZpb3VzID09PSAzOCAmJiBjaGFyYWN0ZXIgPT09IDEyKSB7XG4gICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIHNsaWNlKGJlZ2luLCBwb3NpdGlvbik7XG59O1xuXG52YXIgdG9SdWxlcyA9IGZ1bmN0aW9uIHRvUnVsZXMocGFyc2VkLCBwb2ludHMpIHtcbiAgLy8gcHJldGVuZCB3ZSd2ZSBzdGFydGVkIHdpdGggYSBjb21tYVxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGNoYXJhY3RlciA9IDQ0O1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgLy8gJlxcZlxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAzOCAmJiBwZWVrKCkgPT09IDEyKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBub3QgMTAwJSBjb3JyZWN0LCB3ZSBkb24ndCBhY2NvdW50IGZvciBsaXRlcmFsIHNlcXVlbmNlcyBoZXJlIC0gbGlrZSBmb3IgZXhhbXBsZSBxdW90ZWQgc3RyaW5nc1xuICAgICAgICAgIC8vIHN0eWxpcyBpbnNlcnRzIFxcZiBhZnRlciAmIHRvIGtub3cgd2hlbiAmIHdoZXJlIGl0IHNob3VsZCByZXBsYWNlIHRoaXMgc2VxdWVuY2Ugd2l0aCB0aGUgY29udGV4dCBzZWxlY3RvclxuICAgICAgICAgIC8vIGFuZCB3aGVuIGl0IHNob3VsZCBqdXN0IGNvbmNhdGVuYXRlIHRoZSBvdXRlciBhbmQgaW5uZXIgc2VsZWN0b3JzXG4gICAgICAgICAgLy8gaXQncyB2ZXJ5IHVubGlrZWx5IGZvciB0aGlzIHNlcXVlbmNlIHRvIGFjdHVhbGx5IGFwcGVhciBpbiBhIGRpZmZlcmVudCBjb250ZXh0LCBzbyB3ZSBqdXN0IGxldmVyYWdlIHRoaXMgZmFjdCBoZXJlXG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhwb3NpdGlvbiAtIDEsIHBvaW50cywgaW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGRlbGltaXQoY2hhcmFjdGVyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgLy8gY29tbWFcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gNDQpIHtcbiAgICAgICAgICAvLyBjb2xvblxuICAgICAgICAgIHBhcnNlZFsrK2luZGV4XSA9IHBlZWsoKSA9PT0gNTggPyAnJlxcZicgOiAnJztcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gcGFyc2VkW2luZGV4XS5sZW5ndGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgLy8gZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBmcm9tKGNoYXJhY3Rlcik7XG4gICAgfVxuICB9IHdoaWxlIChjaGFyYWN0ZXIgPSBuZXh0KCkpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG52YXIgZ2V0UnVsZXMgPSBmdW5jdGlvbiBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKSB7XG4gIHJldHVybiBkZWFsbG9jKHRvUnVsZXMoYWxsb2ModmFsdWUpLCBwb2ludHMpKTtcbn07IC8vIFdlYWtTZXQgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZSwgYnV0IG9ubHkgV2Vha01hcCBpcyBzdXBwb3J0ZWQgaW4gSUUxMVxuXG5cbnZhciBmaXhlZEVsZW1lbnRzID0gLyogI19fUFVSRV9fICovbmV3IFdlYWtNYXAoKTtcbnZhciBjb21wYXQgPSBmdW5jdGlvbiBjb21wYXQoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlICE9PSAncnVsZScgfHwgIWVsZW1lbnQucGFyZW50IHx8IC8vIHBvc2l0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGNvbnRhaW5zIHBzZXVkb1xuICAvLyBuZWdhdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBoYXMgYmVlbiBhbHJlYWR5IHByZWZpeGVkXG4gIGVsZW1lbnQubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWUsXG4gICAgICBwYXJlbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgdmFyIGlzSW1wbGljaXRSdWxlID0gZWxlbWVudC5jb2x1bW4gPT09IHBhcmVudC5jb2x1bW4gJiYgZWxlbWVudC5saW5lID09PSBwYXJlbnQubGluZTtcblxuICB3aGlsZSAocGFyZW50LnR5cGUgIT09ICdydWxlJykge1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgfSAvLyBzaG9ydC1jaXJjdWl0IGZvciB0aGUgc2ltcGxlc3QgY2FzZVxuXG5cbiAgaWYgKGVsZW1lbnQucHJvcHMubGVuZ3RoID09PSAxICYmIHZhbHVlLmNoYXJDb2RlQXQoMCkgIT09IDU4XG4gIC8qIGNvbG9uICovXG4gICYmICFmaXhlZEVsZW1lbnRzLmdldChwYXJlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIGlmIHRoaXMgaXMgYW4gaW1wbGljaXRseSBpbnNlcnRlZCBydWxlICh0aGUgb25lIGVhZ2VybHkgaW5zZXJ0ZWQgYXQgdGhlIGVhY2ggbmV3IG5lc3RlZCBsZXZlbClcbiAgLy8gdGhlbiB0aGUgcHJvcHMgaGFzIGFscmVhZHkgYmVlbiBtYW5pcHVsYXRlZCBiZWZvcmVoYW5kIGFzIHRoZXkgdGhhdCBhcnJheSBpcyBzaGFyZWQgYmV0d2VlbiBpdCBhbmQgaXRzIFwicnVsZSBwYXJlbnRcIlxuXG5cbiAgaWYgKGlzSW1wbGljaXRSdWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZml4ZWRFbGVtZW50cy5zZXQoZWxlbWVudCwgdHJ1ZSk7XG4gIHZhciBwb2ludHMgPSBbXTtcbiAgdmFyIHJ1bGVzID0gZ2V0UnVsZXModmFsdWUsIHBvaW50cyk7XG4gIHZhciBwYXJlbnRSdWxlcyA9IHBhcmVudC5wcm9wcztcblxuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyZW50UnVsZXMubGVuZ3RoOyBqKyssIGsrKykge1xuICAgICAgZWxlbWVudC5wcm9wc1trXSA9IHBvaW50c1tpXSA/IHJ1bGVzW2ldLnJlcGxhY2UoLyZcXGYvZywgcGFyZW50UnVsZXNbal0pIDogcGFyZW50UnVsZXNbal0gKyBcIiBcIiArIHJ1bGVzW2ldO1xuICAgIH1cbiAgfVxufTtcbnZhciByZW1vdmVMYWJlbCA9IGZ1bmN0aW9uIHJlbW92ZUxhYmVsKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblxuICAgIGlmICggLy8gY2hhcmNvZGUgZm9yIGxcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDApID09PSAxMDggJiYgLy8gY2hhcmNvZGUgZm9yIGJcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDIpID09PSA5OCkge1xuICAgICAgLy8gdGhpcyBpZ25vcmVzIGxhYmVsXG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gJyc7XG4gICAgICBlbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICB9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1mYWxsdGhyb3VnaCAqL1xuXG5mdW5jdGlvbiBwcmVmaXgodmFsdWUsIGxlbmd0aCkge1xuICBzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcbiAgICAvLyBjb2xvci1hZGp1c3RcbiAgICBjYXNlIDUxMDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFuaW1hdGlvbiwgYW5pbWF0aW9uLShkZWxheXxkaXJlY3Rpb258ZHVyYXRpb258ZmlsbC1tb2RlfGl0ZXJhdGlvbi1jb3VudHxuYW1lfHBsYXktc3RhdGV8dGltaW5nLWZ1bmN0aW9uKVxuXG4gICAgY2FzZSA1NzM3OlxuICAgIGNhc2UgNDIwMTpcbiAgICBjYXNlIDMxNzc6XG4gICAgY2FzZSAzNDMzOlxuICAgIGNhc2UgMTY0MTpcbiAgICBjYXNlIDQ0NTc6XG4gICAgY2FzZSAyOTIxOiAvLyB0ZXh0LWRlY29yYXRpb24sIGZpbHRlciwgY2xpcC1wYXRoLCBiYWNrZmFjZS12aXNpYmlsaXR5LCBjb2x1bW4sIGJveC1kZWNvcmF0aW9uLWJyZWFrXG5cbiAgICBjYXNlIDU1NzI6XG4gICAgY2FzZSA2MzU2OlxuICAgIGNhc2UgNTg0NDpcbiAgICBjYXNlIDMxOTE6XG4gICAgY2FzZSA2NjQ1OlxuICAgIGNhc2UgMzAwNTogLy8gbWFzaywgbWFzay1pbWFnZSwgbWFzay0obW9kZXxjbGlwfHNpemUpLCBtYXNrLShyZXBlYXR8b3JpZ2luKSwgbWFzay1wb3NpdGlvbiwgbWFzay1jb21wb3NpdGUsXG5cbiAgICBjYXNlIDYzOTE6XG4gICAgY2FzZSA1ODc5OlxuICAgIGNhc2UgNTYyMzpcbiAgICBjYXNlIDYxMzU6XG4gICAgY2FzZSA0NTk5OlxuICAgIGNhc2UgNDg1NTogLy8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblxuICAgIGNhc2UgNDIxNTpcbiAgICBjYXNlIDYzODk6XG4gICAgY2FzZSA1MTA5OlxuICAgIGNhc2UgNTM2NTpcbiAgICBjYXNlIDU2MjE6XG4gICAgY2FzZSAzODI5OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXG4gICAgY2FzZSA1MzQ5OlxuICAgIGNhc2UgNDI0NjpcbiAgICBjYXNlIDQ4MTA6XG4gICAgY2FzZSA2OTY4OlxuICAgIGNhc2UgMjc1NjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1PWiArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uXG5cbiAgICBjYXNlIDY4Mjg6XG4gICAgY2FzZSA0MjY4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIG9yZGVyXG5cbiAgICBjYXNlIDYxNjU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWl0ZW1zXG5cbiAgICBjYXNlIDUxODc6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tc2VsZlxuXG4gICAgY2FzZSA1NDQzOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1jb250ZW50XG5cbiAgICBjYXNlIDQ2NzU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWxpbmUtcGFjaycgKyByZXBsYWNlKHZhbHVlLCAvYWxpZ24tY29udGVudHxmbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtc2hyaW5rXG5cbiAgICBjYXNlIDU1NDg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtYmFzaXNcblxuICAgIGNhc2UgNTI5MjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWdyb3dcblxuICAgIGNhc2UgNjA2MDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIHRyYW5zaXRpb25cblxuICAgIGNhc2UgNDU1NDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWU7XG4gICAgLy8gY3Vyc29yXG5cbiAgICBjYXNlIDYxODc6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLWltYWdlXG5cbiAgICBjYXNlIDU0OTU6XG4gICAgY2FzZSAzOTU5OlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oaW1hZ2Utc2V0XFwoW15dKikvLCBXRUJLSVQgKyAnJDEnICsgJyRgJDEnKTtcbiAgICAvLyBqdXN0aWZ5LWNvbnRlbnRcblxuICAgIGNhc2UgNDk2ODpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oLis6KShmbGV4LSk/KC4qKS8sIFdFQktJVCArICdib3gtcGFjazokMycgKyBNUyArICdmbGV4LXBhY2s6JDMnKSwgL3MuKy1iW147XSsvLCAnanVzdGlmeScpICsgV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyAobWFyZ2lufHBhZGRpbmcpLWlubGluZS0oc3RhcnR8ZW5kKVxuXG4gICAgY2FzZSA0MDk1OlxuICAgIGNhc2UgMzU4MzpcbiAgICBjYXNlIDQwNjg6XG4gICAgY2FzZSAyNTMyOlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLispLWlubGluZSguKykvLCBXRUJLSVQgKyAnJDEkMicpICsgdmFsdWU7XG4gICAgLy8gKG1pbnxtYXgpPyh3aWR0aHxoZWlnaHR8aW5saW5lLXNpemV8YmxvY2stc2l6ZSlcblxuICAgIGNhc2UgODExNjpcbiAgICBjYXNlIDcwNTk6XG4gICAgY2FzZSA1NzUzOlxuICAgIGNhc2UgNTUzNTpcbiAgICBjYXNlIDU0NDU6XG4gICAgY2FzZSA1NzAxOlxuICAgIGNhc2UgNDkzMzpcbiAgICBjYXNlIDQ2Nzc6XG4gICAgY2FzZSA1NTMzOlxuICAgIGNhc2UgNTc4OTpcbiAgICBjYXNlIDUwMjE6XG4gICAgY2FzZSA0NzY1OlxuICAgICAgLy8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuICAgICAgaWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNikgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG4gICAgICAgIC8vIChtKWF4LWNvbnRlbnQsIChtKWluLWNvbnRlbnRcbiAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgLy8gLVxuICAgICAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDQpICE9PSA0NSkgYnJlYWs7XG4gICAgICAgIC8vIChmKWlsbC1hdmFpbGFibGUsIChmKWl0LWNvbnRlbnRcblxuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKC4rKS0oW15dKykvLCAnJDEnICsgV0VCS0lUICsgJyQyLSQzJyArICckMScgKyBNT1ogKyAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAzKSA9PSAxMDggPyAnJDMnIDogJyQyLSQzJykpICsgdmFsdWU7XG4gICAgICAgIC8vIChzKXRyZXRjaFxuXG4gICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgIHJldHVybiB+aW5kZXhvZih2YWx1ZSwgJ3N0cmV0Y2gnKSA/IHByZWZpeChyZXBsYWNlKHZhbHVlLCAnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBsZW5ndGgpICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIC8vIHBvc2l0aW9uOiBzdGlja3lcblxuICAgIGNhc2UgNDk0OTpcbiAgICAgIC8vIChzKXRpY2t5P1xuICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkgIT09IDExNSkgYnJlYWs7XG4gICAgLy8gZGlzcGxheTogKGZsZXh8aW5saW5lLWZsZXgpXG5cbiAgICBjYXNlIDY0NDQ6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgc3RybGVuKHZhbHVlKSAtIDMgLSAofmluZGV4b2YodmFsdWUsICchaW1wb3J0YW50JykgJiYgMTApKSkge1xuICAgICAgICAvLyBzdGljKGspeVxuICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBXRUJLSVQpICsgdmFsdWU7XG4gICAgICAgIC8vIChpbmxpbmUtKT9mbChlKXhcblxuICAgICAgICBjYXNlIDEwMTpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKFteOyFdKykoO3whLispPy8sICckMScgKyBXRUJLSVQgKyAoY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gJ2lubGluZS0nIDogJycpICsgJ2JveCQzJyArICckMScgKyBXRUJLSVQgKyAnJDIkMycgKyAnJDEnICsgTVMgKyAnJDJib3gkMycpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIC8vIHdyaXRpbmctbW9kZVxuXG4gICAgY2FzZSA1OTM2OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDExKSkge1xuICAgICAgICAvLyB2ZXJ0aWNhbC1sKHIpXG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGInKSArIHZhbHVlO1xuICAgICAgICAvLyB2ZXJ0aWNhbC1yKGwpXG5cbiAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0Yi1ybCcpICsgdmFsdWU7XG4gICAgICAgIC8vIGhvcml6b250YWwoLSl0YlxuXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICdscicpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIHByZWZpeGVyID0gZnVuY3Rpb24gcHJlZml4ZXIoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuICBpZiAoZWxlbWVudC5sZW5ndGggPiAtMSkgaWYgKCFlbGVtZW50W1wicmV0dXJuXCJdKSBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgREVDTEFSQVRJT046XG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBLRVlGUkFNRVM6XG4gICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgdmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpXG4gICAgICB9KV0sIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgUlVMRVNFVDpcbiAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCkgcmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG4gICAgICAgICAgLy8gOnJlYWQtKG9ubHl8d3JpdGUpXG4gICAgICAgICAgY2FzZSAnOnJlYWQtb25seSc6XG4gICAgICAgICAgY2FzZSAnOnJlYWQtd3JpdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgICAgLy8gOnBsYWNlaG9sZGVyXG5cbiAgICAgICAgICBjYXNlICc6OnBsYWNlaG9sZGVyJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0pO1xuICB9XG59O1xuXG52YXIgZGVmYXVsdFN0eWxpc1BsdWdpbnMgPSBbcHJlZml4ZXJdO1xuXG52YXIgY3JlYXRlQ2FjaGUgPSBmdW5jdGlvblxuICAvKjogRW1vdGlvbkNhY2hlICovXG5jcmVhdGVDYWNoZShvcHRpb25zXG4vKjogT3B0aW9ucyAqL1xuKSB7XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleTtcblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGVcbiAgICAvKjogSFRNTFN0eWxlRWxlbWVudCAqL1xuICAgICkge1xuICAgICAgLy8gd2Ugd2FudCB0byBvbmx5IG1vdmUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhIHNwYWNlIGluIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlIHZhbHVlXG4gICAgICAvLyBiZWNhdXNlIHRoYXQgaW5kaWNhdGVzIHRoYXQgaXQgaXMgYW4gRW1vdGlvbiAxMSBzZXJ2ZXItc2lkZSByZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgICAgLy8gd2hpbGUgd2Ugd2lsbCBhbHJlYWR5IGlnbm9yZSBFbW90aW9uIDExIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBiZWNhdXNlIG9mIHRoZSA6bm90KFtkYXRhLXNdKSBwYXJ0IGluIHRoZSBzZWxlY3RvclxuICAgICAgLy8gRW1vdGlvbiAxMCBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgZGlkIG5vdCBoYXZlIGRhdGEtcyAoYnV0IGltcG9ydGFudGx5IGRpZCBub3QgaGF2ZSBhIHNwYWNlIGluIHRoZWlyIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGVzKVxuICAgICAgLy8gc28gY2hlY2tpbmcgZm9yIHRoZSBzcGFjZSBlbnN1cmVzIHRoYXQgbG9hZGluZyBFbW90aW9uIDExIGFmdGVyIEVtb3Rpb24gMTAgaGFzIGluc2VydGVkIHNvbWUgc3R5bGVzXG4gICAgICAvLyB3aWxsIG5vdCByZXN1bHQgaW4gdGhlIEVtb3Rpb24gMTAgc3R5bGVzIGJlaW5nIGRlc3Ryb3llZFxuICAgICAgdmFyIGRhdGFFbW90aW9uQXR0cmlidXRlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicpO1xuXG4gICAgICBpZiAoZGF0YUVtb3Rpb25BdHRyaWJ1dGUuaW5kZXhPZignICcpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zJywgJycpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIHN0eWxpc1BsdWdpbnMgPSBvcHRpb25zLnN0eWxpc1BsdWdpbnMgfHwgZGVmYXVsdFN0eWxpc1BsdWdpbnM7XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIC8qIDogTm9kZSAqL1xuXG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlXG4gICAgLyo6IEhUTUxTdHlsZUVsZW1lbnQgKi9cbiAgICApIHtcbiAgICAgIHZhciBhdHRyaWIgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vdGlvblwiKS5zcGxpdCgnICcpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuICAvKjogKFxuICBzZWxlY3Rvcjogc3RyaW5nLFxuICBzZXJpYWxpemVkOiBTZXJpYWxpemVkU3R5bGVzLFxuICBzaGVldDogU3R5bGVTaGVldCxcbiAgc2hvdWxkQ2FjaGU6IGJvb2xlYW5cbiAgKSA9PiBzdHJpbmcgfCB2b2lkICovXG5cblxuICB2YXIgb21uaXByZXNlbnRQbHVnaW5zID0gW2NvbXBhdCwgcmVtb3ZlTGFiZWxdO1xuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHJ1bGVzaGVldChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgY3VycmVudFNoZWV0Lmluc2VydChydWxlKTtcbiAgICB9KV07XG4gICAgdmFyIHNlcmlhbGl6ZXIgPSBtaWRkbGV3YXJlKG9tbmlwcmVzZW50UGx1Z2lucy5jb25jYXQoc3R5bGlzUGx1Z2lucywgZmluYWxpemluZ1BsdWdpbnMpKTtcblxuICAgIHZhciBzdHlsaXMgPSBmdW5jdGlvbiBzdHlsaXMoc3R5bGVzKSB7XG4gICAgICByZXR1cm4gc2VyaWFsaXplKGNvbXBpbGUoc3R5bGVzKSwgc2VyaWFsaXplcik7XG4gICAgfTtcblxuICAgIF9pbnNlcnQgPSBmdW5jdGlvblxuICAgICAgLyo6IHZvaWQgKi9cbiAgICBpbnNlcnQoc2VsZWN0b3JcbiAgICAvKjogc3RyaW5nICovXG4gICAgLCBzZXJpYWxpemVkXG4gICAgLyo6IFNlcmlhbGl6ZWRTdHlsZXMgKi9cbiAgICAsIHNoZWV0XG4gICAgLyo6IFN0eWxlU2hlZXQgKi9cbiAgICAsIHNob3VsZENhY2hlXG4gICAgLyo6IGJvb2xlYW4gKi9cbiAgICApIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBzdHlsaXMoc2VsZWN0b3IgPyBzZWxlY3RvciArIFwie1wiICsgc2VyaWFsaXplZC5zdHlsZXMgKyBcIn1cIiA6IHNlcmlhbGl6ZWQuc3R5bGVzKTtcblxuICAgICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB2YXIgY2FjaGVcbiAgLyo6IEVtb3Rpb25DYWNoZSAqL1xuICA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQ2FjaGUgYXMgZGVmYXVsdCB9O1xuIiwgImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikge1xuICAgIGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7XG4gICAgICB2YXIgdCA9IGFyZ3VtZW50c1tlXTtcbiAgICAgIGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZXhwb3J0IHsgX2V4dGVuZHMgYXMgZGVmYXVsdCB9OyIsICJ2YXIgaXNCcm93c2VyID0gdHJ1ZTtcblxuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWVzKSB7XG4gIHZhciByYXdDbGFzc05hbWUgPSAnJztcbiAgY2xhc3NOYW1lcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGlmIChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVnaXN0ZXJlZFN0eWxlcy5wdXNoKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSArIFwiO1wiKTtcbiAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgcmF3Q2xhc3NOYW1lICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByYXdDbGFzc05hbWU7XG59XG52YXIgcmVnaXN0ZXJTdHlsZXMgPSBmdW5jdGlvbiByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmICggLy8gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSByZWdpc3RlcmVkIGNhY2hlIGlmIHRoZVxuICAvLyBjbGFzcyBuYW1lIGNvdWxkIGJlIHVzZWQgZnVydGhlciBkb3duXG4gIC8vIHRoZSB0cmVlIGJ1dCBpZiBpdCdzIGEgc3RyaW5nIHRhZywgd2Uga25vdyBpdCB3b24ndFxuICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGFkZCBpdCB0byByZWdpc3RlcmVkIGNhY2hlLlxuICAvLyB0aGlzIGltcHJvdmVzIG1lbW9yeSB1c2FnZSBzaW5jZSB3ZSBjYW4gYXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgc3R5bGUgc3RyaW5nXG4gIChpc1N0cmluZ1RhZyA9PT0gZmFsc2UgfHwgLy8gd2UgbmVlZCB0byBhbHdheXMgc3RvcmUgaXQgaWYgd2UncmUgaW4gY29tcGF0IG1vZGUgYW5kXG4gIC8vIGluIG5vZGUgc2luY2UgZW1vdGlvbi1zZXJ2ZXIgcmVsaWVzIG9uIHdoZXRoZXIgYSBzdHlsZSBpcyBpblxuICAvLyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBrbm93IHdoZXRoZXIgYSBzdHlsZSBpcyBnbG9iYWwgb3Igbm90XG4gIC8vIGFsc28sIG5vdGUgdGhhdCB0aGlzIGNoZWNrIHdpbGwgYmUgZGVhZCBjb2RlIGVsaW1pbmF0ZWQgaW4gdGhlIGJyb3dzZXJcbiAgaXNCcm93c2VyID09PSBmYWxzZSApICYmIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID0gc2VyaWFsaXplZC5zdHlsZXM7XG4gIH1cbn07XG52YXIgaW5zZXJ0U3R5bGVzID0gZnVuY3Rpb24gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VyaWFsaXplZDtcblxuICAgIGRvIHtcbiAgICAgIGNhY2hlLmluc2VydChzZXJpYWxpemVkID09PSBjdXJyZW50ID8gXCIuXCIgKyBjbGFzc05hbWUgOiAnJywgY3VycmVudCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMgfTtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWFwcGxlYnkvc21oYXNoZXIvYmxvYi82MWEwNTMwZjI4Mjc3ZjJlODUwYmZjMzk2MDBjZTYxZDAyYjUxOGRlL3NyYy9NdXJtdXJIYXNoMi5jcHAjTDM3LUw4NlxuZnVuY3Rpb24gbXVybXVyMihzdHIpIHtcbiAgLy8gJ20nIGFuZCAncicgYXJlIG1peGluZyBjb25zdGFudHMgZ2VuZXJhdGVkIG9mZmxpbmUuXG4gIC8vIFRoZXkncmUgbm90IHJlYWxseSAnbWFnaWMnLCB0aGV5IGp1c3QgaGFwcGVuIHRvIHdvcmsgd2VsbC5cbiAgLy8gY29uc3QgbSA9IDB4NWJkMWU5OTU7XG4gIC8vIGNvbnN0IHIgPSAyNDtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaFxuICB2YXIgaCA9IDA7IC8vIE1peCA0IGJ5dGVzIGF0IGEgdGltZSBpbnRvIHRoZSBoYXNoXG5cbiAgdmFyIGssXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgZm9yICg7IGxlbiA+PSA0OyArK2ksIGxlbiAtPSA0KSB7XG4gICAgayA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0O1xuICAgIGsgPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICAgIGsgXj1cbiAgICAvKiBrID4+PiByOiAqL1xuICAgIGsgPj4+IDI0O1xuICAgIGggPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpIF5cbiAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBIYW5kbGUgdGhlIGxhc3QgZmV3IGJ5dGVzIG9mIHRoZSBpbnB1dCBhcnJheVxuXG5cbiAgc3dpdGNoIChsZW4pIHtcbiAgICBjYXNlIDM6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblxuICAgIGNhc2UgMjpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cbiAgICBjYXNlIDE6XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgICAgIGggPVxuICAgICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBEbyBhIGZldyBmaW5hbCBtaXhlcyBvZiB0aGUgaGFzaCB0byBlbnN1cmUgdGhlIGxhc3QgZmV3XG4gIC8vIGJ5dGVzIGFyZSB3ZWxsLWluY29ycG9yYXRlZC5cblxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPVxuICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIHJldHVybiAoKGggXiBoID4+PiAxNSkgPj4+IDApLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IHsgbXVybXVyMiBhcyBkZWZhdWx0IH07XG4iLCAidmFyIHVuaXRsZXNzS2V5cyA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IDEsXG4gIGFzcGVjdFJhdGlvOiAxLFxuICBib3JkZXJJbWFnZU91dHNldDogMSxcbiAgYm9yZGVySW1hZ2VTbGljZTogMSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogMSxcbiAgYm94RmxleDogMSxcbiAgYm94RmxleEdyb3VwOiAxLFxuICBib3hPcmRpbmFsR3JvdXA6IDEsXG4gIGNvbHVtbkNvdW50OiAxLFxuICBjb2x1bW5zOiAxLFxuICBmbGV4OiAxLFxuICBmbGV4R3JvdzogMSxcbiAgZmxleFBvc2l0aXZlOiAxLFxuICBmbGV4U2hyaW5rOiAxLFxuICBmbGV4TmVnYXRpdmU6IDEsXG4gIGZsZXhPcmRlcjogMSxcbiAgZ3JpZFJvdzogMSxcbiAgZ3JpZFJvd0VuZDogMSxcbiAgZ3JpZFJvd1NwYW46IDEsXG4gIGdyaWRSb3dTdGFydDogMSxcbiAgZ3JpZENvbHVtbjogMSxcbiAgZ3JpZENvbHVtbkVuZDogMSxcbiAgZ3JpZENvbHVtblNwYW46IDEsXG4gIGdyaWRDb2x1bW5TdGFydDogMSxcbiAgbXNHcmlkUm93OiAxLFxuICBtc0dyaWRSb3dTcGFuOiAxLFxuICBtc0dyaWRDb2x1bW46IDEsXG4gIG1zR3JpZENvbHVtblNwYW46IDEsXG4gIGZvbnRXZWlnaHQ6IDEsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG9wYWNpdHk6IDEsXG4gIG9yZGVyOiAxLFxuICBvcnBoYW5zOiAxLFxuICBzY2FsZTogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IHsgdW5pdGxlc3NLZXlzIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlzRGV2ZWxvcG1lbnQgPSBmYWxzZTtcblxudmFyIGh5cGhlbmF0ZVJlZ2V4ID0gL1tBLVpdfF5tcy9nO1xudmFyIGFuaW1hdGlvblJlZ2V4ID0gL19FTU9fKFteX10rPylfKFteXSo/KV9FTU9fL2c7XG5cbnZhciBpc0N1c3RvbVByb3BlcnR5ID0gZnVuY3Rpb24gaXNDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eSkge1xuICByZXR1cm4gcHJvcGVydHkuY2hhckNvZGVBdCgxKSA9PT0gNDU7XG59O1xuXG52YXIgaXNQcm9jZXNzYWJsZVZhbHVlID0gZnVuY3Rpb24gaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nO1xufTtcblxudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSAvKiAjX19QVVJFX18gKi9tZW1vaXplKGZ1bmN0aW9uIChzdHlsZU5hbWUpIHtcbiAgcmV0dXJuIGlzQ3VzdG9tUHJvcGVydHkoc3R5bGVOYW1lKSA/IHN0eWxlTmFtZSA6IHN0eWxlTmFtZS5yZXBsYWNlKGh5cGhlbmF0ZVJlZ2V4LCAnLSQmJykudG9Mb3dlckNhc2UoKTtcbn0pO1xuXG52YXIgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgbmFtZTogcDEsXG4gICAgICAgICAgICAgIHN0eWxlczogcDIsXG4gICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgaWYgKHVuaXRsZXNzW2tleV0gIT09IDEgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JztcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSA9ICdDb21wb25lbnQgc2VsZWN0b3JzIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAnICsgJ0BlbW90aW9uL2JhYmVsLXBsdWdpbiwgdGhlIHN3YyBFbW90aW9uIHBsdWdpbiwgb3IgYW5vdGhlciBFbW90aW9uLWF3YXJlICcgKyAnY29tcGlsZXIgdHJhbnNmb3JtLic7XG5cbmZ1bmN0aW9uIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pIHtcbiAgaWYgKGludGVycG9sYXRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHZhciBjb21wb25lbnRTZWxlY3RvciA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKGNvbXBvbmVudFNlbGVjdG9yLl9fZW1vdGlvbl9zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudFNlbGVjdG9yO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICB2YXIga2V5ZnJhbWVzID0gaW50ZXJwb2xhdGlvbjtcblxuICAgICAgICBpZiAoa2V5ZnJhbWVzLmFuaW0gPT09IDEpIHtcbiAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICBuYW1lOiBrZXlmcmFtZXMubmFtZSxcbiAgICAgICAgICAgIHN0eWxlczoga2V5ZnJhbWVzLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGtleWZyYW1lcy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlcmlhbGl6ZWRTdHlsZXMgPSBpbnRlcnBvbGF0aW9uO1xuXG4gICAgICAgIGlmIChzZXJpYWxpemVkU3R5bGVzLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBzZXJpYWxpemVkU3R5bGVzLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gc2VyaWFsaXplZFN0eWxlcy5zdHlsZXMgKyBcIjtcIjtcbiAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICBpZiAobWVyZ2VkUHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBwcmV2aW91c0N1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgY3Vyc29yID0gcHJldmlvdXNDdXJzb3I7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHJlc3VsdCk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfSAvLyBmaW5hbGl6ZSBzdHJpbmcgdmFsdWVzIChyZWd1bGFyIHN0cmluZ3MgYW5kIGZ1bmN0aW9ucyBpbnRlcnBvbGF0ZWQgaW50byBjc3MgY2FsbHMpXG5cblxuICB2YXIgYXNTdHJpbmcgPSBpbnRlcnBvbGF0aW9uO1xuXG4gIGlmIChyZWdpc3RlcmVkID09IG51bGwpIHtcbiAgICByZXR1cm4gYXNTdHJpbmc7XG4gIH1cblxuICB2YXIgY2FjaGVkID0gcmVnaXN0ZXJlZFthc1N0cmluZ107XG4gIHJldHVybiBjYWNoZWQgIT09IHVuZGVmaW5lZCA/IGNhY2hlZCA6IGFzU3RyaW5nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmopIHtcbiAgdmFyIHN0cmluZyA9ICcnO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgc3RyaW5nICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9ialtpXSkgKyBcIjtcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHZhciBhc1N0cmluZyA9IHZhbHVlO1xuXG4gICAgICAgIGlmIChyZWdpc3RlcmVkICE9IG51bGwgJiYgcmVnaXN0ZXJlZFthc1N0cmluZ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0cmluZyArPSBrZXkgKyBcIntcIiArIHJlZ2lzdGVyZWRbYXNTdHJpbmddICsgXCJ9XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKGFzU3RyaW5nKSkge1xuICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgYXNTdHJpbmcpICsgXCI7XCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InICYmIGlzRGV2ZWxvcG1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiB2YWx1ZVswXSA9PT0gJ3N0cmluZycgJiYgKHJlZ2lzdGVyZWQgPT0gbnVsbCB8fCByZWdpc3RlcmVkW3ZhbHVlWzBdXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB2YWx1ZS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWVbX2ldKSkge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShrZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlW19pXSkgKyBcIjtcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGludGVycG9sYXRlZCA9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHZhbHVlKTtcblxuICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShrZXkpICsgXCI6XCIgKyBpbnRlcnBvbGF0ZWQgKyBcIjtcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0ga2V5ICsgXCJ7XCIgKyBpbnRlcnBvbGF0ZWQgKyBcIn1cIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbnZhciBsYWJlbFBhdHRlcm4gPSAvbGFiZWw6XFxzKihbXlxcczt7XSspXFxzKig7fCQpL2c7IC8vIHRoaXMgaXMgdGhlIGN1cnNvciBmb3Iga2V5ZnJhbWVzXG4vLyBrZXlmcmFtZXMgYXJlIHN0b3JlZCBvbiB0aGUgU2VyaWFsaXplZFN0eWxlcyBvYmplY3QgYXMgYSBsaW5rZWQgbGlzdFxuXG52YXIgY3Vyc29yO1xuZnVuY3Rpb24gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIHJlZ2lzdGVyZWQsIG1lcmdlZFByb3BzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ29iamVjdCcgJiYgYXJnc1swXSAhPT0gbnVsbCAmJiBhcmdzWzBdLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFyZ3NbMF07XG4gIH1cblxuICB2YXIgc3RyaW5nTW9kZSA9IHRydWU7XG4gIHZhciBzdHlsZXMgPSAnJztcbiAgY3Vyc29yID0gdW5kZWZpbmVkO1xuICB2YXIgc3RyaW5ncyA9IGFyZ3NbMF07XG5cbiAgaWYgKHN0cmluZ3MgPT0gbnVsbCB8fCBzdHJpbmdzLnJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RyaW5nTW9kZSA9IGZhbHNlO1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBzdHJpbmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYXNUZW1wbGF0ZVN0cmluZ3NBcnIgPSBzdHJpbmdzO1xuXG4gICAgc3R5bGVzICs9IGFzVGVtcGxhdGVTdHJpbmdzQXJyWzBdO1xuICB9IC8vIHdlIHN0YXJ0IGF0IDEgc2luY2Ugd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBmaXJzdCBhcmdcblxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBhcmdzW2ldKTtcblxuICAgIGlmIChzdHJpbmdNb2RlKSB7XG4gICAgICB2YXIgdGVtcGxhdGVTdHJpbmdzQXJyID0gc3RyaW5ncztcblxuICAgICAgc3R5bGVzICs9IHRlbXBsYXRlU3RyaW5nc0FycltpXTtcbiAgICB9XG4gIH0gLy8gdXNpbmcgYSBnbG9iYWwgcmVnZXggd2l0aCAuZXhlYyBpcyBzdGF0ZWZ1bCBzbyBsYXN0SW5kZXggaGFzIHRvIGJlIHJlc2V0IGVhY2ggdGltZVxuXG5cbiAgbGFiZWxQYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHZhciBpZGVudGlmaWVyTmFtZSA9ICcnO1xuICB2YXIgbWF0Y2g7IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWI4MDljMmNmMjk0OTgwMGEwZjYxZmI1XG5cbiAgd2hpbGUgKChtYXRjaCA9IGxhYmVsUGF0dGVybi5leGVjKHN0eWxlcykpICE9PSBudWxsKSB7XG4gICAgaWRlbnRpZmllck5hbWUgKz0gJy0nICsgbWF0Y2hbMV07XG4gIH1cblxuICB2YXIgbmFtZSA9IGhhc2hTdHJpbmcoc3R5bGVzKSArIGlkZW50aWZpZXJOYW1lO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICBuZXh0OiBjdXJzb3JcbiAgfTtcbn1cblxuZXhwb3J0IHsgc2VyaWFsaXplU3R5bGVzIH07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG52YXIgc3luY0ZhbGxiYWNrID0gZnVuY3Rpb24gc3luY0ZhbGxiYWNrKGNyZWF0ZSkge1xuICByZXR1cm4gY3JlYXRlKCk7XG59O1xuXG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0ID0gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gPyBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA6IGZhbHNlO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgc3luY0ZhbGxiYWNrO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBSZWFjdC51c2VMYXlvdXRFZmZlY3Q7XG5cbmV4cG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayB9O1xuIiwgImltcG9ydCB7IGggYXMgaGFzT3duLCBFIGFzIEVtb3Rpb24sIGMgYXMgY3JlYXRlRW1vdGlvblByb3BzLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIFQgYXMgVGhlbWVDb250ZXh0LCBpIGFzIGlzRGV2ZWxvcG1lbnQgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC01NDg2YzUxYy5icm93c2VyLmVzbS5qcyc7XG5leHBvcnQgeyBDIGFzIENhY2hlUHJvdmlkZXIsIFQgYXMgVGhlbWVDb250ZXh0LCBhIGFzIFRoZW1lUHJvdmlkZXIsIF8gYXMgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlLCB1IGFzIHVzZVRoZW1lLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIGIgYXMgd2l0aFRoZW1lIH0gZnJvbSAnLi9lbW90aW9uLWVsZW1lbnQtNTQ4NmM1MWMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaW5zZXJ0U3R5bGVzLCByZWdpc3RlclN0eWxlcywgZ2V0UmVnaXN0ZXJlZFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuXG52YXIganN4XG4vKjogdHlwZW9mIFJlYWN0LmNyZWF0ZUVsZW1lbnQgKi9cbj0gZnVuY3Rpb24ganN4XG4vKjogdHlwZW9mIFJlYWN0LmNyZWF0ZUVsZW1lbnQgKi9cbih0eXBlXG4vKjogUmVhY3QuRWxlbWVudFR5cGUgKi9cbiwgcHJvcHNcbi8qOiBPYmplY3QgKi9cbikge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblxuICBpZiAocHJvcHMgPT0gbnVsbCB8fCAhaGFzT3duLmNhbGwocHJvcHMsICdjc3MnKSkge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgY3JlYXRlRWxlbWVudEFyZ0FycmF5ID0gbmV3IEFycmF5KGFyZ3NMZW5ndGgpO1xuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMF0gPSBFbW90aW9uO1xuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMV0gPSBjcmVhdGVFbW90aW9uUHJvcHModHlwZSwgcHJvcHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSB7XG4gICAgY3JlYXRlRWxlbWVudEFyZ0FycmF5W2ldID0gYXJnc1tpXTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KG51bGwsIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSk7XG59O1xuXG4vLyBpbml0aWFsIHJlbmRlciBmcm9tIGJyb3dzZXIsIGluc2VydEJlZm9yZSBjb250ZXh0LnNoZWV0LnRhZ3NbMF0gb3IgaWYgYSBzdHlsZSBoYXNuJ3QgYmVlbiBpbnNlcnRlZCB0aGVyZSB5ZXQsIGFwcGVuZENoaWxkXG4vLyBpbml0aWFsIGNsaWVudC1zaWRlIHJlbmRlciBmcm9tIFNTUiwgdXNlIHBsYWNlIG9mIGh5ZHJhdGluZyB0YWdcblxudmFyIEdsb2JhbFxuLyo6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PFxuR2xvYmFsUHJvcHNcbj4gKi9cbj0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHNcbi8qOiBHbG9iYWxQcm9wcyAqL1xuLCBjYWNoZSkge1xuXG4gIHZhciBzdHlsZXMgPSBwcm9wcy5zdHlsZXM7XG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzdHlsZXNdLCB1bmRlZmluZWQsIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG4gIC8vIGJ1dCBpdCBpcyBiYXNlZCBvbiBhIGNvbnN0YW50IHRoYXQgd2lsbCBuZXZlciBjaGFuZ2UgYXQgcnVudGltZVxuICAvLyBpdCdzIGVmZmVjdGl2ZWx5IGxpa2UgaGF2aW5nIHR3byBpbXBsZW1lbnRhdGlvbnMgYW5kIHN3aXRjaGluZyB0aGVtIG91dFxuICAvLyBzbyBpdCdzIG5vdCBhY3R1YWxseSBicmVha2luZyBhbnl0aGluZ1xuXG5cbiAgdmFyIHNoZWV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGtleSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbFwiOyAvLyB1c2UgY2FzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8yNjc1XG5cbiAgICB2YXIgc2hlZXQgPSBuZXcgY2FjaGUuc2hlZXQuY29uc3RydWN0b3Ioe1xuICAgICAga2V5OiBrZXksXG4gICAgICBub25jZTogY2FjaGUuc2hlZXQubm9uY2UsXG4gICAgICBjb250YWluZXI6IGNhY2hlLnNoZWV0LmNvbnRhaW5lcixcbiAgICAgIHNwZWVkeTogY2FjaGUuc2hlZXQuaXNTcGVlZHlcbiAgICB9KTtcbiAgICB2YXIgcmVoeWRyYXRpbmcgPSBmYWxzZTtcbiAgICB2YXIgbm9kZVxuICAgIC8qOiBIVE1MU3R5bGVFbGVtZW50IHwgbnVsbCovXG4gICAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1lbW90aW9uPVxcXCJcIiArIGtleSArIFwiIFwiICsgc2VyaWFsaXplZC5uYW1lICsgXCJcXFwiXVwiKTtcblxuICAgIGlmIChjYWNoZS5zaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgc2hlZXQuYmVmb3JlID0gY2FjaGUuc2hlZXQudGFnc1swXTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmVoeWRyYXRpbmcgPSB0cnVlOyAvLyBjbGVhciB0aGUgaGFzaCBzbyB0aGlzIG5vZGUgd29uJ3QgYmUgcmVjb2duaXphYmxlIGFzIHJlaHlkcmF0YWJsZSBieSBvdGhlciA8R2xvYmFsLz5zXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBrZXkpO1xuICAgICAgc2hlZXQuaHlkcmF0ZShbbm9kZV0pO1xuICAgIH1cblxuICAgIHNoZWV0UmVmLmN1cnJlbnQgPSBbc2hlZXQsIHJlaHlkcmF0aW5nXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9O1xuICB9LCBbY2FjaGVdKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXRSZWZDdXJyZW50ID0gc2hlZXRSZWYuY3VycmVudDtcbiAgICB2YXIgc2hlZXQgPSBzaGVldFJlZkN1cnJlbnRbMF0sXG4gICAgICAgIHJlaHlkcmF0aW5nID0gc2hlZXRSZWZDdXJyZW50WzFdO1xuXG4gICAgaWYgKHJlaHlkcmF0aW5nKSB7XG4gICAgICBzaGVldFJlZkN1cnJlbnRbMV0gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZC5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluc2VydCBrZXlmcmFtZXNcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZC5uZXh0LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIHRoaXMgZG9lc24ndCBleGlzdCB0aGVuIGl0IHdpbGwgYmUgbnVsbCBzbyB0aGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkXG4gICAgICB2YXIgZWxlbWVudCA9IHNoZWV0LnRhZ3Nbc2hlZXQudGFncy5sZW5ndGggLSAxXS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICBzaGVldC5iZWZvcmUgPSBlbGVtZW50O1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9XG5cbiAgICBjYWNoZS5pbnNlcnQoXCJcIiwgc2VyaWFsaXplZCwgc2hlZXQsIGZhbHNlKTtcbiAgfSwgW2NhY2hlLCBzZXJpYWxpemVkLm5hbWVdKTtcbiAgcmV0dXJuIG51bGw7XG59KTtcblxuLyogaW1wb3J0IHR5cGUgeyBJbnRlcnBvbGF0aW9uLCBTZXJpYWxpemVkU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnICovXG5cbmZ1bmN0aW9uIGNzcygpXG4vKjogU2VyaWFsaXplZFN0eWxlcyAqL1xue1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZVN0eWxlcyhhcmdzKTtcbn1cblxuLypcbnR5cGUgS2V5ZnJhbWVzID0ge3xcbiAgbmFtZTogc3RyaW5nLFxuICBzdHlsZXM6IHN0cmluZyxcbiAgYW5pbTogMSxcbiAgdG9TdHJpbmc6ICgpID0+IHN0cmluZ1xufH0gJiBzdHJpbmdcbiovXG5cbnZhciBrZXlmcmFtZXMgPSBmdW5jdGlvblxuICAvKjogS2V5ZnJhbWVzICovXG5rZXlmcmFtZXMoKSB7XG4gIHZhciBpbnNlcnRhYmxlID0gY3NzLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgdmFyIG5hbWUgPSBcImFuaW1hdGlvbi1cIiArIGluc2VydGFibGUubmFtZTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogXCJAa2V5ZnJhbWVzIFwiICsgbmFtZSArIFwie1wiICsgaW5zZXJ0YWJsZS5zdHlsZXMgKyBcIn1cIixcbiAgICBhbmltOiAxLFxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBcIl9FTU9fXCIgKyB0aGlzLm5hbWUgKyBcIl9cIiArIHRoaXMuc3R5bGVzICsgXCJfRU1PX1wiO1xuICAgIH1cbiAgfTtcbn07XG5cbi8qXG50eXBlIENsYXNzTmFtZUFyZyA9XG4gIHwgc3RyaW5nXG4gIHwgYm9vbGVhblxuICB8IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9XG4gIHwgQXJyYXk8Q2xhc3NOYW1lQXJnPlxuICB8IG51bGxcbiAgfCB2b2lkXG4qL1xuXG52YXIgY2xhc3NuYW1lcyA9IGZ1bmN0aW9uXG4gIC8qOiBzdHJpbmcgKi9cbmNsYXNzbmFtZXMoYXJnc1xuLyo6IEFycmF5PENsYXNzTmFtZUFyZz4gKi9cbikge1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIGNscyA9ICcnO1xuXG4gIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnID09IG51bGwpIGNvbnRpbnVlO1xuICAgIHZhciB0b0FkZCA9IHZvaWQgMDtcblxuICAgIHN3aXRjaCAodHlwZW9mIGFyZykge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgdG9BZGQgPSBjbGFzc25hbWVzKGFyZyk7XG4gICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgdG9BZGQgPSAnJztcblxuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBhcmcpIHtcbiAgICAgICAgICAgICAgaWYgKGFyZ1trXSAmJiBrKSB7XG4gICAgICAgICAgICAgICAgdG9BZGQgJiYgKHRvQWRkICs9ICcgJyk7XG4gICAgICAgICAgICAgICAgdG9BZGQgKz0gaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICB0b0FkZCA9IGFyZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b0FkZCkge1xuICAgICAgY2xzICYmIChjbHMgKz0gJyAnKTtcbiAgICAgIGNscyArPSB0b0FkZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xzO1xufTtcblxuZnVuY3Rpb24gbWVyZ2UocmVnaXN0ZXJlZFxuLyo6IE9iamVjdCAqL1xuLCBjc3Ncbi8qOiAoLi4uYXJnczogQXJyYXk8YW55PikgPT4gc3RyaW5nICovXG4sIGNsYXNzTmFtZVxuLyo6IHN0cmluZyAqL1xuKSB7XG4gIHZhciByZWdpc3RlcmVkU3R5bGVzID0gW107XG4gIHZhciByYXdDbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZSk7XG5cbiAgaWYgKHJlZ2lzdGVyZWRTdHlsZXMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICByZXR1cm4gcmF3Q2xhc3NOYW1lICsgY3NzKHJlZ2lzdGVyZWRTdHlsZXMpO1xufVxuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWRBcnIgPSBfcmVmLnNlcmlhbGl6ZWRBcnI7XG4gIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJpYWxpemVkQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWRBcnJbaV0sIGZhbHNlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcbi8qXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogKHtcbiAgICBjc3M6ICguLi5hcmdzOiBhbnkpID0+IHN0cmluZyxcbiAgICBjeDogKC4uLmFyZ3M6IEFycmF5PENsYXNzTmFtZUFyZz4pID0+IHN0cmluZyxcbiAgICB0aGVtZTogT2JqZWN0XG4gIH0pID0+IFJlYWN0Lk5vZGVcbn0gKi9cblxuXG52YXIgQ2xhc3NOYW1lc1xuLyo6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PFByb3BzPiovXG49IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSkge1xuICB2YXIgaGFzUmVuZGVyZWQgPSBmYWxzZTtcbiAgdmFyIHNlcmlhbGl6ZWRBcnIgPSBbXTtcblxuICB2YXIgY3NzID0gZnVuY3Rpb24gY3NzKCkge1xuICAgIGlmIChoYXNSZW5kZXJlZCAmJiBpc0RldmVsb3BtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NzcyBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCk7XG4gICAgc2VyaWFsaXplZEFyci5wdXNoKHNlcmlhbGl6ZWQpOyAvLyByZWdpc3RyYXRpb24gaGFzIHRvIGhhcHBlbiBoZXJlIGFzIHRoZSByZXN1bHQgb2YgdGhpcyBtaWdodCBnZXQgY29uc3VtZWQgYnkgYGN4YFxuXG4gICAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGZhbHNlKTtcbiAgICByZXR1cm4gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gIH07XG5cbiAgdmFyIGN4ID0gZnVuY3Rpb24gY3goKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIGlzRGV2ZWxvcG1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3ggY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgcmVuZGVyJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlKGNhY2hlLnJlZ2lzdGVyZWQsIGNzcywgY2xhc3NuYW1lcyhhcmdzKSk7XG4gIH07XG5cbiAgdmFyIGNvbnRlbnQgPSB7XG4gICAgY3NzOiBjc3MsXG4gICAgY3g6IGN4LFxuICAgIHRoZW1lOiBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dClcbiAgfTtcbiAgdmFyIGVsZSA9IHByb3BzLmNoaWxkcmVuKGNvbnRlbnQpO1xuICBoYXNSZW5kZXJlZCA9IHRydWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5zZXJ0aW9uLCB7XG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIHNlcmlhbGl6ZWRBcnI6IHNlcmlhbGl6ZWRBcnJcbiAgfSksIGVsZSk7XG59KTtcblxuZXhwb3J0IHsgQ2xhc3NOYW1lcywgR2xvYmFsLCBqc3ggYXMgY3JlYXRlRWxlbWVudCwgY3NzLCBqc3gsIGtleWZyYW1lcyB9O1xuIiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgdGhyb3R0bGUgPSBmdW5jdGlvbiB0aHJvdHRsZShmbikge1xuICB2YXIgd2FpdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogNTA7XG4gIHZhciB0aW1lID0gRGF0ZS5ub3coKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGltZSArIHdhaXQgLSBEYXRlLm5vdygpIDwgMCkge1xuICAgICAgZm4uYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgdGltZSA9IERhdGUubm93KCk7XG4gICAgfVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIHNvcnRNYXBCeUxhcmdlVG9TbWFsbFZhbHVlcyA9IGZ1bmN0aW9uIHNvcnRNYXBCeUxhcmdlVG9TbWFsbFZhbHVlcyhicmVha3BvaW50c01hcCkge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGJyZWFrcG9pbnRzTWFwKS5zb3J0KGZ1bmN0aW9uIChfcmVmLCBfcmVmMikge1xuICAgIHZhciBfcmVmMyA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgICAgYSA9IF9yZWYzWzFdO1xuICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYyLCAyKSxcbiAgICAgIGIgPSBfcmVmNFsxXTtcbiAgICByZXR1cm4gYiAtIGE7XG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIHNvcnRNYXBCeVNtYWxsVG9MYXJnZVZhbHVlcyA9IGZ1bmN0aW9uIHNvcnRNYXBCeVNtYWxsVG9MYXJnZVZhbHVlcyhicmVha3BvaW50c01hcCkge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGJyZWFrcG9pbnRzTWFwKS5zb3J0KGZ1bmN0aW9uIChfcmVmNSwgX3JlZjYpIHtcbiAgICB2YXIgX3JlZjcgPSBfc2xpY2VkVG9BcnJheShfcmVmNSwgMiksXG4gICAgICBhID0gX3JlZjdbMV07XG4gICAgdmFyIF9yZWY4ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjYsIDIpLFxuICAgICAgYiA9IF9yZWY4WzFdO1xuICAgIHJldHVybiBhIC0gYjtcbiAgfSkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEN1cnJlbnRFdWlCcmVha3BvaW50Q29udGV4dCB9IGZyb20gJy4vY3VycmVudF9icmVha3BvaW50JztcblxuLyoqXG4gKiBIb29rIHV0aWwgLyBzeW50YWN0aWNhbCBzdWdhciBmb3IgdXNlQ29udGV4dCgpXG4gKlxuICogVGhpcyBob29rIGlzIGluIGl0cyBvd24gc2VwYXJhdGUgZmlsZSB0byBtYWtlIG1vY2tpbmcgaXRcbiAqIGFzIGEgdGVzdGVudiBlYXN5IGZvciBKZXN0IHVuaXQgdGVzdHNcbiAqL1xuZXhwb3J0IHZhciB1c2VDdXJyZW50RXVpQnJlYWtwb2ludCA9IGZ1bmN0aW9uIHVzZUN1cnJlbnRFdWlCcmVha3BvaW50KCkge1xuICB2YXIgY3VycmVudEJyZWFrcG9pbnQgPSB1c2VDb250ZXh0KEN1cnJlbnRFdWlCcmVha3BvaW50Q29udGV4dCk7XG4gIHJldHVybiBjdXJyZW50QnJlYWtwb2ludDtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmltcG9ydCB7IGNzcyBhcyBfY3NzIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xvbmVFbGVtZW50XCIsIFwiY2xhc3NOYW1lXCJdO1xudmFyIF90ZW1wbGF0ZU9iamVjdDtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChlLCB0KSB7IHJldHVybiB0IHx8ICh0ID0gZS5zbGljZSgwKSksIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUodCkgfSB9KSk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vZW1vdGlvbic7XG5pbXBvcnQgeyBjc3MsIGN4IH0gZnJvbSAnLi4vZW1vdGlvbi9jc3MnO1xuaW1wb3J0IHsgQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciB9IGZyb20gJy4uL2JyZWFrcG9pbnQvY3VycmVudF9icmVha3BvaW50JztcbmltcG9ydCB7IEV1aVN5c3RlbUNvbnRleHQsIEV1aVRoZW1lQ29udGV4dCwgRXVpTmVzdGVkVGhlbWVDb250ZXh0LCBFdWlNb2RpZmljYXRpb25zQ29udGV4dCwgRXVpQ29sb3JNb2RlQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBFdWlFbW90aW9uVGhlbWVQcm92aWRlciB9IGZyb20gJy4vZW1vdGlvbic7XG5pbXBvcnQgeyBFdWlUaGVtZU1lbW9pemVkU3R5bGVzUHJvdmlkZXIgfSBmcm9tICcuL3N0eWxlX21lbW9pemF0aW9uJztcbmltcG9ydCB7IGJ1aWxkVGhlbWUsIGdldENvbG9yTW9kZSwgZ2V0Q29tcHV0ZWQsIG1lcmdlRGVlcCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIEV1aVRoZW1lUHJvdmlkZXIoX3JlZikge1xuICB2YXIgX3N5c3RlbSA9IF9yZWYudGhlbWUsXG4gICAgX2NvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlLFxuICAgIF9tb2RpZmljYXRpb25zID0gX3JlZi5tb2RpZnksXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIHdyYXBwZXJQcm9wcyA9IF9yZWYud3JhcHBlclByb3BzO1xuICB2YXIgX3VzZUNvbnRleHQgPSB1c2VDb250ZXh0KEV1aU5lc3RlZFRoZW1lQ29udGV4dCksXG4gICAgaXNHbG9iYWxUaGVtZSA9IF91c2VDb250ZXh0LmlzR2xvYmFsVGhlbWUsXG4gICAgYm9keUNvbG9yID0gX3VzZUNvbnRleHQuYm9keUNvbG9yLFxuICAgIGdsb2JhbENTU1ZhcmlhYmxlcyA9IF91c2VDb250ZXh0Lmdsb2JhbENTU1ZhcmlhYmxlcyxcbiAgICBzZXRHbG9iYWxDU1NWYXJpYWJsZXMgPSBfdXNlQ29udGV4dC5zZXRHbG9iYWxDU1NWYXJpYWJsZXM7XG4gIHZhciBwYXJlbnRTeXN0ZW0gPSB1c2VDb250ZXh0KEV1aVN5c3RlbUNvbnRleHQpO1xuICB2YXIgcGFyZW50TW9kaWZpY2F0aW9ucyA9IHVzZUNvbnRleHQoRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQpO1xuICB2YXIgcGFyZW50Q29sb3JNb2RlID0gdXNlQ29udGV4dChFdWlDb2xvck1vZGVDb250ZXh0KTtcbiAgdmFyIHBhcmVudFRoZW1lID0gdXNlQ29udGV4dChFdWlUaGVtZUNvbnRleHQpO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoX3N5c3RlbSB8fCBwYXJlbnRTeXN0ZW0pLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHN5c3RlbSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0U3lzdGVtID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIHByZXZTeXN0ZW1LZXkgPSB1c2VSZWYoc3lzdGVtLmtleSk7XG5cbiAgLy8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygd2luZG93IHJlc2l6ZSBsaXN0ZW5lcnMsIG9ubHkgcmVuZGVyIGFcbiAgLy8gQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciBmb3IgdGhlIHRvcCBsZXZlbCBwYXJlbnQgdGhlbWUsIG9yIGZvclxuICAvLyBuZXN0ZWQgdGhlbWVzIG9ubHkgaWYgbW9kaWZpZWQgYnJlYWtwb2ludCBvdmVycmlkZXMgYXJlIHBhc3NlZFxuICB2YXIgRXVpQ29uZGl0aW9uYWxCcmVha3BvaW50UHJvdmlkZXIgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaXNHbG9iYWxUaGVtZSB8fCBfbW9kaWZpY2F0aW9ucyAhPT0gbnVsbCAmJiBfbW9kaWZpY2F0aW9ucyAhPT0gdm9pZCAwICYmIF9tb2RpZmljYXRpb25zLmJyZWFrcG9pbnQgPyBDdXJyZW50RXVpQnJlYWtwb2ludFByb3ZpZGVyIDogRnJhZ21lbnQ7XG4gIH0sIFtpc0dsb2JhbFRoZW1lLCBfbW9kaWZpY2F0aW9uc10pO1xuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKG1lcmdlRGVlcChwYXJlbnRNb2RpZmljYXRpb25zLCBfbW9kaWZpY2F0aW9ucykpLFxuICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICBtb2RpZmljYXRpb25zID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRNb2RpZmljYXRpb25zID0gX3VzZVN0YXRlNFsxXTtcbiAgdmFyIHByZXZNb2RpZmljYXRpb25zID0gdXNlUmVmKG1vZGlmaWNhdGlvbnMpO1xuICB2YXIgX3VzZVN0YXRlNSA9IHVzZVN0YXRlKGdldENvbG9yTW9kZShfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGUpKSxcbiAgICBfdXNlU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNSwgMiksXG4gICAgY29sb3JNb2RlID0gX3VzZVN0YXRlNlswXSxcbiAgICBzZXRDb2xvck1vZGUgPSBfdXNlU3RhdGU2WzFdO1xuICB2YXIgcHJldkNvbG9yTW9kZSA9IHVzZVJlZihjb2xvck1vZGUpO1xuICB2YXIgaXNQYXJlbnRUaGVtZSA9IHVzZVJlZihwcmV2U3lzdGVtS2V5LmN1cnJlbnQgPT09IHBhcmVudFN5c3RlbS5rZXkgJiYgY29sb3JNb2RlID09PSBwYXJlbnRDb2xvck1vZGUgJiYgaXNFcXVhbChwYXJlbnRNb2RpZmljYXRpb25zLCBtb2RpZmljYXRpb25zKSk7XG4gIHZhciBfdXNlU3RhdGU3ID0gdXNlU3RhdGUoaXNQYXJlbnRUaGVtZS5jdXJyZW50ICYmIE9iamVjdC5rZXlzKHBhcmVudFRoZW1lKS5sZW5ndGggPyBfb2JqZWN0U3ByZWFkKHt9LCBwYXJlbnRUaGVtZSkgLy8gSW50ZW50aW9uYWxseSBjcmVhdGUgYSBuZXcgb2JqZWN0IHRvIGJyZWFrIHJlZmVyZW50aWFsIGVxdWFsaXR5XG4gICAgOiBnZXRDb21wdXRlZChzeXN0ZW0sIGJ1aWxkVGhlbWUobW9kaWZpY2F0aW9ucywgXCJfXCIuY29uY2F0KHN5c3RlbS5rZXkpKSwgY29sb3JNb2RlKSksXG4gICAgX3VzZVN0YXRlOCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTcsIDIpLFxuICAgIHRoZW1lID0gX3VzZVN0YXRlOFswXSxcbiAgICBzZXRUaGVtZSA9IF91c2VTdGF0ZThbMV07XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5ld1N5c3RlbSA9IF9zeXN0ZW0gfHwgcGFyZW50U3lzdGVtO1xuICAgIGlmIChwcmV2U3lzdGVtS2V5LmN1cnJlbnQgIT09IG5ld1N5c3RlbS5rZXkpIHtcbiAgICAgIHNldFN5c3RlbShuZXdTeXN0ZW0pO1xuICAgICAgcHJldlN5c3RlbUtleS5jdXJyZW50ID0gbmV3U3lzdGVtLmtleTtcbiAgICAgIGlzUGFyZW50VGhlbWUuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW19zeXN0ZW0sIHBhcmVudFN5c3RlbV0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXdNb2RpZmljYXRpb25zID0gbWVyZ2VEZWVwKHBhcmVudE1vZGlmaWNhdGlvbnMsIF9tb2RpZmljYXRpb25zKTtcbiAgICBpZiAoIWlzRXF1YWwocHJldk1vZGlmaWNhdGlvbnMuY3VycmVudCwgbmV3TW9kaWZpY2F0aW9ucykpIHtcbiAgICAgIHNldE1vZGlmaWNhdGlvbnMobmV3TW9kaWZpY2F0aW9ucyk7XG4gICAgICBwcmV2TW9kaWZpY2F0aW9ucy5jdXJyZW50ID0gbmV3TW9kaWZpY2F0aW9ucztcbiAgICAgIGlzUGFyZW50VGhlbWUuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW19tb2RpZmljYXRpb25zLCBwYXJlbnRNb2RpZmljYXRpb25zXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5ld0NvbG9yTW9kZSA9IGdldENvbG9yTW9kZShfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGUpO1xuICAgIGlmICghaXNFcXVhbChuZXdDb2xvck1vZGUsIHByZXZDb2xvck1vZGUuY3VycmVudCkpIHtcbiAgICAgIHNldENvbG9yTW9kZShuZXdDb2xvck1vZGUpO1xuICAgICAgcHJldkNvbG9yTW9kZS5jdXJyZW50ID0gbmV3Q29sb3JNb2RlO1xuICAgICAgaXNQYXJlbnRUaGVtZS5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICB9LCBbX2NvbG9yTW9kZSwgcGFyZW50Q29sb3JNb2RlXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFpc1BhcmVudFRoZW1lLmN1cnJlbnQpIHtcbiAgICAgIHNldFRoZW1lKGdldENvbXB1dGVkKHN5c3RlbSwgYnVpbGRUaGVtZShtb2RpZmljYXRpb25zLCBcIl9cIi5jb25jYXQoc3lzdGVtLmtleSkpLCBjb2xvck1vZGUpKTtcbiAgICB9XG4gIH0sIFtjb2xvck1vZGUsIHN5c3RlbSwgbW9kaWZpY2F0aW9uc10pO1xuICB2YXIgX3VzZVN0YXRlOSA9IHVzZVN0YXRlKCksXG4gICAgX3VzZVN0YXRlMTAgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU5LCAyKSxcbiAgICB0aGVtZUNTU1ZhcmlhYmxlcyA9IF91c2VTdGF0ZTEwWzBdLFxuICAgIF9zZXRUaGVtZUNTU1ZhcmlhYmxlcyA9IF91c2VTdGF0ZTEwWzFdO1xuICB2YXIgc2V0VGhlbWVDU1NWYXJpYWJsZXMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAodmFyaWFibGVzKSB7XG4gICAgcmV0dXJuIF9zZXRUaGVtZUNTU1ZhcmlhYmxlcyhmdW5jdGlvbiAocHJldmlvdXMpIHtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByZXZpb3VzKSwgdmFyaWFibGVzKTtcbiAgICB9KTtcbiAgfSwgW10pO1xuICB2YXIgbmVzdGVkVGhlbWVDb250ZXh0ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzR2xvYmFsVGhlbWU6IGZhbHNlLFxuICAgICAgLy8gVGhlIHRoZW1lIHRoYXQgZGV0ZXJtaW5lcyB0aGUgZ2xvYmFsIGJvZHkgc3R5bGVzXG4gICAgICBib2R5Q29sb3I6IGlzR2xvYmFsVGhlbWUgPyB0aGVtZS5jb2xvcnMudGV4dCA6IGJvZHlDb2xvcixcbiAgICAgIGhhc0RpZmZlcmVudENvbG9yRnJvbUdsb2JhbFRoZW1lOiBpc0dsb2JhbFRoZW1lID8gZmFsc2UgOiBib2R5Q29sb3IgIT09IHRoZW1lLmNvbG9ycy50ZXh0LFxuICAgICAgY29sb3JDbGFzc05hbWU6IGNzcyhfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgICAgICBsYWJlbDogZXVpQ29sb3JNb2RlLVwiLCBcIjtcXG4gICAgICAgIGNvbG9yOiBcIiwgXCI7XFxuICAgICAgXCJdKSksIF9jb2xvck1vZGUgfHwgY29sb3JNb2RlLCB0aGVtZS5jb2xvcnMudGV4dCksXG4gICAgICBzZXRHbG9iYWxDU1NWYXJpYWJsZXM6IGlzR2xvYmFsVGhlbWUgPyBzZXRUaGVtZUNTU1ZhcmlhYmxlcyA6IHNldEdsb2JhbENTU1ZhcmlhYmxlcyxcbiAgICAgIGdsb2JhbENTU1ZhcmlhYmxlczogaXNHbG9iYWxUaGVtZSA/IHRoZW1lQ1NTVmFyaWFibGVzIDogZ2xvYmFsQ1NTVmFyaWFibGVzLFxuICAgICAgc2V0TmVhcmVzdFRoZW1lQ1NTVmFyaWFibGVzOiBzZXRUaGVtZUNTU1ZhcmlhYmxlcyxcbiAgICAgIHRoZW1lQ1NTVmFyaWFibGVzOiB0aGVtZUNTU1ZhcmlhYmxlc1xuICAgIH07XG4gIH0sIFt0aGVtZSwgaXNHbG9iYWxUaGVtZSwgYm9keUNvbG9yLCBfY29sb3JNb2RlLCBjb2xvck1vZGUsIHNldEdsb2JhbENTU1ZhcmlhYmxlcywgZ2xvYmFsQ1NTVmFyaWFibGVzLCBzZXRUaGVtZUNTU1ZhcmlhYmxlcywgdGhlbWVDU1NWYXJpYWJsZXNdKTtcbiAgdmFyIHJlbmRlcmVkQ2hpbGRyZW4gPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNHbG9iYWxUaGVtZSkge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuOyAvLyBObyB3cmFwcGVyXG4gICAgfVxuICAgIHZhciBfcmVmMiA9IHdyYXBwZXJQcm9wcyB8fCB7fSxcbiAgICAgIGNsb25lRWxlbWVudCA9IF9yZWYyLmNsb25lRWxlbWVudCxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYyLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZCk7XG4gICAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0KSwge30sIHtcbiAgICAgIGNsYXNzTmFtZTogY3goY2xhc3NOYW1lLCBuZXN0ZWRUaGVtZUNvbnRleHQuY29sb3JDbGFzc05hbWUpXG4gICAgfSk7XG4gICAgLy8gQ29uZGl0aW9uIGF2b2lkcyByZW5kZXJpbmcgYW4gZW1wdHkgRW1vdGlvbiBzZWxlY3RvciBpZiBub1xuICAgIC8vIHRoZW1lLXNwZWNpZmljIENTUyB2YXJpYWJsZXMgaGF2ZSBiZWVuIHNldCBieSBjaGlsZCBjb21wb25lbnRzXG4gICAgaWYgKHRoZW1lQ1NTVmFyaWFibGVzKSB7XG4gICAgICBwcm9wcy5jc3MgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgbGFiZWw6ICdldWlDU1NWYXJpYWJsZXMnXG4gICAgICB9LCB0aGVtZUNTU1ZhcmlhYmxlcyk7XG4gICAgfVxuICAgIGlmIChjbG9uZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjeChjaGlsZHJlbi5wcm9wcy5jbGFzc05hbWUsIHByb3BzLmNsYXNzTmFtZSlcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICBjbGFzc05hbWU6IGN4KCdldWlUaGVtZVByb3ZpZGVyJywgcHJvcHMuY2xhc3NOYW1lKVxuICAgICAgfSksIGNoaWxkcmVuKTtcbiAgICB9XG4gIH0sIFtpc0dsb2JhbFRoZW1lLCB0aGVtZUNTU1ZhcmlhYmxlcywgbmVzdGVkVGhlbWVDb250ZXh0LCB3cmFwcGVyUHJvcHMsIGNoaWxkcmVuXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBpc0dsb2JhbFRoZW1lICYmIHRoZW1lQ1NTVmFyaWFibGVzICYmIF9fX0Vtb3Rpb25KU1goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiAvKiNfX1BVUkVfXyovX2Nzcyh7XG4gICAgICAnOnJvb3QnOiB0aGVtZUNTU1ZhcmlhYmxlc1xuICAgIH0sIFwiO2xhYmVsOkV1aVRoZW1lUHJvdmlkZXI7XCIpXG4gIH0pLCBfX19FbW90aW9uSlNYKEV1aUNvbG9yTW9kZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29sb3JNb2RlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpU3lzdGVtQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBzeXN0ZW1cbiAgfSwgX19fRW1vdGlvbkpTWChFdWlNb2RpZmljYXRpb25zQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBtb2RpZmljYXRpb25zXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpTmVzdGVkVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IG5lc3RlZFRoZW1lQ29udGV4dFxuICB9LCBfX19FbW90aW9uSlNYKEV1aVRoZW1lTWVtb2l6ZWRTdHlsZXNQcm92aWRlciwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlFbW90aW9uVGhlbWVQcm92aWRlciwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlDb25kaXRpb25hbEJyZWFrcG9pbnRQcm92aWRlciwgbnVsbCwgcmVuZGVyZWRDaGlsZHJlbikpKSkpKSkpKTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuXG4vKipcbiAqIFJlYWN0LmNsb25lRWxlbWVudCBkb2VzIG5vdCB3b3JrIGlmIHRoZSBjbG9uZWQgZWxlbWVudCBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgdGhlXG4gKiBgY3NzYCBwcm9wIC0gYXMgYSByZXN1bHQsIHdlIG5lZWQgdG8gdXNlIGBqc3goKWAgdG8gbWFudWFsbHkgY2xvbmUgdGhlIGVsZW1lbnRcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8xNDA0XG4gKi9cbmV4cG9ydCB2YXIgY2xvbmVFbGVtZW50V2l0aENzcyA9IGZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhDc3MoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIGNzc09yZGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAnYWZ0ZXInO1xuICB2YXIgY2xvbmVkRWxlbWVudCA9IGVsZW1lbnQucHJvcHMuX19FTU9USU9OX1RZUEVfUExFQVNFX0RPX05PVF9VU0VfXyB8fCBlbGVtZW50LnR5cGU7IC8vIEVNT1RJT05fVFlQRSBoYW5kbGVzIG5vbi1SZWFjdCBlbGVtZW50cyAobmF0aXZlIEpTWC9IVE1MIG5vZGVzKVxuXG4gIHZhciBjbG9uZWRQcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlbGVtZW50LmtleSA/IHtcbiAgICBrZXk6IGVsZW1lbnQua2V5XG4gIH0gOiB7fSksIHt9LCB7XG4gICAgcmVmOiBlbGVtZW50LnJlZlxuICB9LCBlbGVtZW50LnByb3BzKSwgcHJvcHMpO1xuICBpZiAocHJvcHMuY3NzIHx8IGVsZW1lbnQucHJvcHMuY3NzKSB7XG4gICAgY2xvbmVkUHJvcHMuY3NzID0gY3NzT3JkZXIgPT09ICdiZWZvcmUnID8gW3Byb3BzLmNzcywgZWxlbWVudC5wcm9wcy5jc3NdIDogW2VsZW1lbnQucHJvcHMuY3NzLCBwcm9wcy5jc3NdO1xuICB9XG4gIHJldHVybiBqc3goY2xvbmVkRWxlbWVudCwgY2xvbmVkUHJvcHMpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY2hhcmF0LCBERUNMQVJBVElPTiwgaGFzaCwgaW5kZXhvZiwgTU9aLCByZXBsYWNlLCBzdHJsZW4sIFdFQktJVCB9IGZyb20gJ3N0eWxpcyc7XG5cbi8vIFRoaXMgaXMgYSBoZWF2aWx5IG1vZGlmaWVkIHZlcnNpb24gb2YgRW1vdGlvbidzIGRlZmF1bHQgYHByZWZpeGVyYCBwbHVnaW5cbi8vIChtb3N0bHkgcmVtb3ZpbmcgdW5uZWNlc3NhcnkgcHJlZml4ZXMpLCB3aGljaCBpcyBpbiB0dXJuIGEgbW9kaWZpZWQgdmVyc2lvblxuLy8gb2Ygc3R5bGlzJ3MgZGVmYXVsdCBwcmVmaXhlci5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iL21haW4vcGFja2FnZXMvY2FjaGUvc3JjL3ByZWZpeGVyLmpzXG4vKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItdGVtcGxhdGUgKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgc3R5bGlzIHBsdWdpbiB3aGljaCBoYW5kbGVzIGF1dG8tcHJlZml4aW5nIENTUyBvdXRwdXQgYnkgRW1vdGlvbi5cbiAqXG4gKiAqUGxlYXNlIG5vdGUqOiBFVUkvRWxhc3RpYyB0YXJnZXRzIGxhdGVzdCBldmVyZ3JlZW4gYnJvd3NlcnMgZm9yIHN1cHBvcnQgb25seS5cbiAqIEBzZWUgaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9zdXBwb3J0L21hdHJpeCNtYXRyaXhfYnJvd3NlcnNcbiAqL1xuZXhwb3J0IHZhciBldWlTdHlsaXNQcmVmaXhlciA9IGZ1bmN0aW9uIGV1aVN0eWxpc1ByZWZpeGVyKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpIGlmICghZWxlbWVudC5yZXR1cm4pIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBERUNMQVJBVElPTjpcbiAgICAgIGVsZW1lbnQucmV0dXJuID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoKTtcbiAgICAgIGJyZWFrO1xuICB9XG59O1xudmFyIHByZWZpeCA9IGZ1bmN0aW9uIHByZWZpeCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuICAgIC8qKlxuICAgICAqIGAtd2Via2l0YCBwcmVmaXhlc1xuICAgICAqL1xuICAgIC8vIHVzZXItc2VsZWN0IC0gaHR0cHM6Ly9jYW5pdXNlLmNvbS9tZG4tY3NzX3Byb3BlcnRpZXNfdXNlci1zZWxlY3QgLSBuZWVkZWQgYnkgU2FmYXJpXG4gICAgY2FzZSA0MjQ2OlxuICAgIC8vIHRleHQtZGVjb3JhdGlvbiAtIGh0dHBzOi8vY2FuaXVzZS5jb20vdGV4dC1kZWNvcmF0aW9uIC0gaU9TIFNhZmFyaSBpcyB0aGUgbWFpbiBvbmUgdGhhdCBuZWVkcyB0aGlzXG4gICAgY2FzZSA1NTcyOlxuICAgIC8vIHRleHQtc2l6ZS1hZGp1c3QgLSBodHRwczovL2Nhbml1c2UuY29tL3RleHQtc2l6ZS1hZGp1c3QgLSBpT1MgU2FmYXJpXG4gICAgY2FzZSAyNzU2OlxuICAgIC8vIGJveC1kZWNvcmF0aW9uLWJyZWFrIC0gaHR0cHM6Ly9jYW5pdXNlLmNvbS9jc3MtYm94ZGVjb3JhdGlvbmJyZWFrIC0gQ2hyb21lICYgU2FmYXJpXG4gICAgY2FzZSAzMDA1OlxuICAgIC8vIG1hc2ssIG1hc2staW1hZ2UsIG1hc2stKG1vZGV8Y2xpcHxzaXplKSwgbWFzay0ocmVwZWF0fG9yaWdpbiksIG1hc2stcG9zaXRpb24sIG1hc2stY29tcG9zaXRlIC0gQ2hyb21lXG4gICAgY2FzZSA2MzkxOlxuICAgIGNhc2UgNTg3OTpcbiAgICBjYXNlIDU2MjM6XG4gICAgY2FzZSA2MTM1OlxuICAgIGNhc2UgNDU5OTpcbiAgICBjYXNlIDQ4NTU6XG4gICAgLy8gcHJpbnQtY29sb3ItYWRqdXN0IC0gaHR0cHM6Ly9jYW5pdXNlLmNvbS9jc3MtY29sb3ItYWRqdXN0IC0gQ2hyb21lXG4gICAgY2FzZSAyMjgyOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG5cbiAgICAvLyBiYWNrZ3JvdW5kLWNsaXAgLSBodHRwczovL2Nhbml1c2UuY29tL2JhY2tncm91bmQtY2xpcC10ZXh0IC0gQ2hyb21lLCBvbmx5IGZvciBgdGV4dGAgdmFsdWVcbiAgICBjYXNlIDQyMTU6XG4gICAgICBpZiAofmluZGV4b2YodmFsdWUsICd0ZXh0JykpIHtcbiAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnRyaW5zaWMvZXh0cmluc2ljIHNpemluZyB2YWx1ZSBwcmVmaXhlc1xuICAgICAqIGBzdHJldGNoYCBhbHRlcm5hdGl2ZXMgbmVlZGVkIGJ5IENocm9tZSAmIEZpcmVmb3ggLSBodHRwczovL2Nhbml1c2UuY29tL2ludHJpbnNpYy13aWR0aFxuICAgICAqL1xuICAgIC8vIChtaW58bWF4KT8od2lkdGh8aGVpZ2h0fGlubGluZS1zaXplfGJsb2NrLXNpemUpXG4gICAgY2FzZSA4MTE2OlxuICAgIGNhc2UgNzA1OTpcbiAgICBjYXNlIDU3NTM6XG4gICAgY2FzZSA1NTM1OlxuICAgIGNhc2UgNTQ0NTpcbiAgICBjYXNlIDU3MDE6XG4gICAgY2FzZSA0OTMzOlxuICAgIGNhc2UgNDY3NzpcbiAgICBjYXNlIDU1MzM6XG4gICAgY2FzZSA1Nzg5OlxuICAgIGNhc2UgNTAyMTpcbiAgICBjYXNlIDQ3NjU6XG4gICAgICAvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG4gICAgICBpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KSBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcbiAgICAgICAgLy8gKGYpaWxsLWF2YWlsYWJsZVxuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICBpZiAofmluZGV4b2YodmFsdWUsICdmaWxsLWF2YWlsYWJsZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKC4rKS0oW15dKykvLCAnJDEnICsgV0VCS0lUICsgJyQyLSQzJyArICckMScgKyBNT1ogKyAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAzKSA9PT0gMTA4ID8gJyQzJyA6ICckMi0kMycpKTtcbiAgICAgICAgICB9XG4gICAgICAgIC8vIChzKXRyZXRjaFxuICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICBpZiAofmluZGV4b2YodmFsdWUsICdzdHJldGNoJykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmVmaXgocmVwbGFjZSh2YWx1ZSwgJ3N0cmV0Y2gnLCAnZmlsbC1hdmFpbGFibGUnKSwgbGVuZ3RoKSArIHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07IiwgImltcG9ydCBjcmVhdGVDYWNoZSBmcm9tICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuXG5mdW5jdGlvbiBpbnNlcnRXaXRob3V0U2NvcGluZyhjYWNoZSwgc2VyaWFsaXplZCkge1xuICBpZiAoY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlLmluc2VydCgnJywgc2VyaWFsaXplZCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlKHJlZ2lzdGVyZWQsIGNzcywgY2xhc3NOYW1lKSB7XG4gIHZhciByZWdpc3RlcmVkU3R5bGVzID0gW107XG4gIHZhciByYXdDbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZSk7XG5cbiAgaWYgKHJlZ2lzdGVyZWRTdHlsZXMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICByZXR1cm4gcmF3Q2xhc3NOYW1lICsgY3NzKHJlZ2lzdGVyZWRTdHlsZXMpO1xufVxuXG52YXIgY3JlYXRlRW1vdGlvbiA9IGZ1bmN0aW9uIGNyZWF0ZUVtb3Rpb24ob3B0aW9ucykge1xuICB2YXIgY2FjaGUgPSBjcmVhdGVDYWNoZShvcHRpb25zKTtcblxuICBjYWNoZS5zaGVldC5zcGVlZHkgPSBmdW5jdGlvbiAodmFsdWUpIHtcblxuICAgIHRoaXMuaXNTcGVlZHkgPSB2YWx1ZTtcbiAgfTtcblxuICBjYWNoZS5jb21wYXQgPSB0cnVlO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIGNhY2hlLnJlZ2lzdGVyZWQsIHVuZGVmaW5lZCk7XG4gICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBmYWxzZSk7XG4gICAgcmV0dXJuIGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB9O1xuXG4gIHZhciBrZXlmcmFtZXMgPSBmdW5jdGlvbiBrZXlmcmFtZXMoKSB7XG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCk7XG4gICAgdmFyIGFuaW1hdGlvbiA9IFwiYW5pbWF0aW9uLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICAgIGluc2VydFdpdGhvdXRTY29waW5nKGNhY2hlLCB7XG4gICAgICBuYW1lOiBzZXJpYWxpemVkLm5hbWUsXG4gICAgICBzdHlsZXM6IFwiQGtleWZyYW1lcyBcIiArIGFuaW1hdGlvbiArIFwie1wiICsgc2VyaWFsaXplZC5zdHlsZXMgKyBcIn1cIlxuICAgIH0pO1xuICAgIHJldHVybiBhbmltYXRpb247XG4gIH07XG5cbiAgdmFyIGluamVjdEdsb2JhbCA9IGZ1bmN0aW9uIGluamVjdEdsb2JhbCgpIHtcbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIGFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBpbnNlcnRXaXRob3V0U2NvcGluZyhjYWNoZSwgc2VyaWFsaXplZCk7XG4gIH07XG5cbiAgdmFyIGN4ID0gZnVuY3Rpb24gY3goKSB7XG4gICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlKGNhY2hlLnJlZ2lzdGVyZWQsIGNzcywgY2xhc3NuYW1lcyhhcmdzKSk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgaW5qZWN0R2xvYmFsOiBpbmplY3RHbG9iYWwsXG4gICAga2V5ZnJhbWVzOiBrZXlmcmFtZXMsXG4gICAgaHlkcmF0ZTogZnVuY3Rpb24gaHlkcmF0ZShpZHMpIHtcbiAgICAgIGlkcy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRba2V5XSA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGZsdXNoOiBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICAgIGNhY2hlLnJlZ2lzdGVyZWQgPSB7fTtcbiAgICAgIGNhY2hlLmluc2VydGVkID0ge307XG4gICAgICBjYWNoZS5zaGVldC5mbHVzaCgpO1xuICAgIH0sXG4gICAgc2hlZXQ6IGNhY2hlLnNoZWV0LFxuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBnZXRSZWdpc3RlcmVkU3R5bGVzOiBnZXRSZWdpc3RlcmVkU3R5bGVzLmJpbmQobnVsbCwgY2FjaGUucmVnaXN0ZXJlZCksXG4gICAgbWVyZ2U6IG1lcmdlLmJpbmQobnVsbCwgY2FjaGUucmVnaXN0ZXJlZCwgY3NzKVxuICB9O1xufTtcblxudmFyIGNsYXNzbmFtZXMgPSBmdW5jdGlvbiBjbGFzc25hbWVzKGFyZ3MpIHtcbiAgdmFyIGNscyA9ICcnO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSAnJztcblxuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBhcmcpIHtcbiAgICAgICAgICAgICAgaWYgKGFyZ1trXSAmJiBrKSB7XG4gICAgICAgICAgICAgICAgdG9BZGQgJiYgKHRvQWRkICs9ICcgJyk7XG4gICAgICAgICAgICAgICAgdG9BZGQgKz0gaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICB0b0FkZCA9IGFyZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b0FkZCkge1xuICAgICAgY2xzICYmIChjbHMgKz0gJyAnKTtcbiAgICAgIGNscyArPSB0b0FkZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xzO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlRW1vdGlvbiBhcyBkZWZhdWx0IH07XG4iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IGNyZWF0ZUVtb3Rpb24gZnJvbSAnQGVtb3Rpb24vY3NzL2NyZWF0ZS1pbnN0YW5jZSc7XG5pbXBvcnQgeyBldWlTdHlsaXNQcmVmaXhlciB9IGZyb20gJy4vcHJlZml4ZXInO1xuXG4vKipcbiAqIFRoaXMgY3VzdG9tIGluc3RhbmNlIGlzIG5lZWRlZCBmb3IgaW50ZXJuYWwgRVVJIGNvbXBvbmVudHMgdG8gY2FsbFxuICogYEBlbW90aW9uL2Nzc2Agd2l0aCBFVUkncyBjdXN0b20gcHJlZml4ZXIgcGx1Z2luXG4gKiBAc2VlIGh0dHBzOi8vZW1vdGlvbi5zaC9kb2NzL0BlbW90aW9uL2NzcyNjdXN0b20taW5zdGFuY2VzXG4gKlxuICogTk9URTogVXNhZ2UgaXMgY3VycmVudGx5IGJlaW5nIGJldGEgdGVzdGVkIGludGVybmFsbHksXG4gKiBhbmQgaXMgbm90IHlldCBpbnRlbmRlZCB0byBiZSBhIHB1YmxpYyBleHBvcnRcbiAqL1xudmFyIF9jcmVhdGVFbW90aW9uID0gY3JlYXRlRW1vdGlvbih7XG4gICAga2V5OiAnY3NzJyxcbiAgICBzdHlsaXNQbHVnaW5zOiBbZXVpU3R5bGlzUHJlZml4ZXJdLFxuICAgIHNwZWVkeTogZmFsc2VcbiAgfSksXG4gIGNzcyA9IF9jcmVhdGVFbW90aW9uLmNzcyxcbiAgY3ggPSBfY3JlYXRlRW1vdGlvbi5jeCxcbiAgY2FjaGUgPSBfY3JlYXRlRW1vdGlvbi5jYWNoZTtcbmV4cG9ydCB7IGNzcywgY3gsIGNhY2hlIH07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUaGVtZVByb3ZpZGVyIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuL2hvb2tzJztcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW1vdGlvbi5zaC9kb2NzL3RoZW1pbmdcbiAqIFRoaXMgRW1vdGlvbiB0aGVtZSBwcm92aWRlciBpcyBhZGRlZCBmb3IgKmNvbnN1bWVyIHVzYWdlKiAmIGNvbnZlbmllbmNlIG9ubHkuXG4gKlxuICogRVVJIHNob3VsZCBzdGljayB0byB1c2luZyBvdXIgb3duIGNvbnRleHQvYHVzZUV1aVRoZW1lYCBpbnRlcm5hbGx5XG4gKiBpbnN0ZWFkIG9mIEVtb3Rpb24ncyBzaG9ydGhhbmQgYGNzcz17dGhlbWUgPT4ge319YCBBUEkuIElmIGNvbnN1bWVyc1xuICogc2V0IHRoZWlyIG93biB0aGVtZSB2aWEgPFRoZW1lUHJvdmlkZXI+OyBFVUkncyBzdHlsZXMgc2hvdWxkIGNvbnRpbnVlXG4gKiB3b3JraW5nIGFzLWlzLlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlFbW90aW9uVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIEV1aUVtb3Rpb25UaGVtZVByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFRoZW1lUHJvdmlkZXIsIHtcbiAgICB0aGVtZTogZXVpVGhlbWVDb250ZXh0XG4gIH0sIGNoaWxkcmVuKTtcbn07IiwgImZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlU3RhdGUsIHVzZU1lbW8sIHVzZUNhbGxiYWNrLCBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVXBkYXRlRWZmZWN0IH0gZnJvbSAnLi4vaG9va3MnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuL2hvb2tzJztcbmltcG9ydCB7IGVtaXRFdWlQcm92aWRlcldhcm5pbmcgfSBmcm9tICcuL3dhcm5pbmcnO1xuXG4vLyBUeXBpY2FsbHkgYW4gb2JqZWN0IG9mIHNlcmlhbGl6ZWQgY3NzYGAgc3R5bGVzLCBidXQgY2FuIGhhdmUgYW55IGFtb3VudCBvZiBuZXN0aW5nLCBzbyBpdCdzIG5vdCB3b3J0aCBpdCB0byB0cnkgYW5kIHN0cmljdGx5IHR5cGUgdGhpc1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGhlbWVNZW1vaXplZFN0eWxlc0NvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChuZXcgV2Vha01hcCgpKTtcbmV4cG9ydCB2YXIgRXVpVGhlbWVNZW1vaXplZFN0eWxlc1Byb3ZpZGVyID0gZnVuY3Rpb24gRXVpVGhlbWVNZW1vaXplZFN0eWxlc1Byb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgLy8gTm90ZTogd2UgKnNob3VsZCBub3QqIHVzZSBgdXNlTWVtb2AgaW5zdGVhZCBvZiBgdXNlU3RhdGVgIGhlcmUsIGFzIHVzZU1lbW8gaXMgbm90IGd1YXJhbnRlZWRcbiAgLy8gYW5kIGl0cyBjYWNoZSBjYW4gZ2V0IHRocm93biBhd2F5IGJ5IFJlYWN0IChodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlTWVtbyNjYXZlYXRzKVxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobmV3IFdlYWtNYXAoKSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgY29tcG9uZW50U3R5bGVzID0gX3VzZVN0YXRlMlswXSxcbiAgICByZXJlbmRlclN0eWxlcyA9IF91c2VTdGF0ZTJbMV07XG5cbiAgLy8gT24gdGhlbWUgdXBkYXRlLCB3aXBlIHRoZSBtYXAsIHdoaWNoIGNhdXNlcyB0aGUgYmVsb3cgaG9vayB0byByZWNvbXB1dGUgYWxsIHN0eWxlc1xuICB2YXIgX3VzZUV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKSxcbiAgICBldWlUaGVtZSA9IF91c2VFdWlUaGVtZS5ldWlUaGVtZTtcbiAgdXNlVXBkYXRlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZXJlbmRlclN0eWxlcyhuZXcgV2Vha01hcCgpKTtcbiAgfSwgW2V1aVRoZW1lXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRoZW1lTWVtb2l6ZWRTdHlsZXNDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbXBvbmVudFN0eWxlc1xuICB9LCBjaGlsZHJlbik7XG59O1xuXG4vKipcbiAqIEludGVybmFsIHV0aWwgcHJpbWFyaWx5IHJlc3BvbnNpYmxlIGZvciBnZXR0aW5nIHRoZSBtZW1vaXplZCBzdHlsZXMgKGlmIHRoZXkgZXhpc3QpXG4gKiBhbmQgaWYgbm90LCBnZW5lcmF0aW5nIGFuZCBzZXR0aW5nIHRoZSBzdHlsZXMuIERSWWVkIG91dCB0byBmYWNpbGl0YXRlIHVzYWdlXG4gKiBiZXR3ZWVuIGJvdGggaG9vay9mdW5jdGlvbiBjb21wb25lbnRzIGFuZCBIT0MvY2xhc3MgY29tcG9uZW50c1xuICovXG52YXIgZ2V0TWVtb2l6ZWRTdHlsZXMgPSBmdW5jdGlvbiBnZXRNZW1vaXplZFN0eWxlcyhzdHlsZXNHZW5lcmF0b3IsIHN0eWxlc01hcCwgZXVpVGhlbWVDb250ZXh0KSB7XG4gIGlmICghc3R5bGVzR2VuZXJhdG9yLm5hbWUpIHtcbiAgICBlbWl0RXVpUHJvdmlkZXJXYXJuaW5nKCdTdHlsZXMgYXJlIG1lbW9pemVkIHBlciBmdW5jdGlvbi4gWW91ciBzdHlsZSBmdW5jdGlvbnMgbXVzdCBiZSBzdGF0aWNhbGx5IGRlZmluZWQgaW4gb3JkZXIgdG8gbm90IGNyZWF0ZSBhIG5ldyBtYXAgZW50cnkgZXZlcnkgcmVyZW5kZXIuJyk7XG4gIH1cbiAgdmFyIGV4aXN0aW5nU3R5bGVzID0gc3R5bGVzTWFwLmdldChzdHlsZXNHZW5lcmF0b3IpO1xuICBpZiAoZXhpc3RpbmdTdHlsZXMpIHtcbiAgICByZXR1cm4gZXhpc3RpbmdTdHlsZXM7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGdlbmVyYXRlZFN0eWxlcyA9IHN0eWxlc0dlbmVyYXRvcihldWlUaGVtZUNvbnRleHQpO1xuICAgIHN0eWxlc01hcC5zZXQoc3R5bGVzR2VuZXJhdG9yLCBnZW5lcmF0ZWRTdHlsZXMpO1xuICAgIHJldHVybiBnZW5lcmF0ZWRTdHlsZXM7XG4gIH1cbn07XG5cbi8qKlxuICogSG9vayB0aGF0IG1lbW9pemVzIHRoZSByZXR1cm5lZCB2YWx1ZXMgb2YgY29tcG9uZW50cyBzdHlsZSBmbnMvZ2VuZXJhdG9yc1xuICogcGVyLXRoZW1lXG4gKi9cbmV4cG9ydCB2YXIgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgPSBmdW5jdGlvbiB1c2VFdWlNZW1vaXplZFN0eWxlcyhzdHlsZXNHZW5lcmF0b3IpIHtcbiAgdmFyIG1lbW9pemVkU3R5bGVzID0gdXNlQ29udGV4dChFdWlUaGVtZU1lbW9pemVkU3R5bGVzQ29udGV4dCk7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgbWVtb2l6ZWRDb21wb25lbnRTdHlsZXMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0TWVtb2l6ZWRTdHlsZXMoc3R5bGVzR2VuZXJhdG9yLCBtZW1vaXplZFN0eWxlcywgZXVpVGhlbWVDb250ZXh0KTtcbiAgfSwgW3N0eWxlc0dlbmVyYXRvciwgbWVtb2l6ZWRTdHlsZXMsIGV1aVRoZW1lQ29udGV4dF0pO1xuICByZXR1cm4gbWVtb2l6ZWRDb21wb25lbnRTdHlsZXM7XG59O1xuXG4vKipcbiAqIEhPQyBmb3IgY2xhc3MgY29tcG9uZW50c1xuICogU3ludGF4IGlzIG1vc3RseSBjb3BpZWQgZnJvbSB3aXRoRXVpVGhlbWUgSE9DXG4gKi9cblxuZXhwb3J0IHZhciB3aXRoRXVpU3R5bGVzTWVtb2l6ZXIgPSBmdW5jdGlvbiB3aXRoRXVpU3R5bGVzTWVtb2l6ZXIoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnRXaXRoU3R5bGVzTWVtb2l6ZXInO1xuICB2YXIgUmVuZGVyID0gZnVuY3Rpb24gUmVuZGVyKHByb3BzLCByZWYpIHtcbiAgICB2YXIgbWVtb2l6ZWRTdHlsZXMgPSB1c2VDb250ZXh0KEV1aVRoZW1lTWVtb2l6ZWRTdHlsZXNDb250ZXh0KTtcbiAgICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgICB2YXIgc3R5bGVzTWVtb2l6ZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoc3R5bGVzR2VuZXJhdG9yKSB7XG4gICAgICByZXR1cm4gZ2V0TWVtb2l6ZWRTdHlsZXMoc3R5bGVzR2VuZXJhdG9yLCBtZW1vaXplZFN0eWxlcywgZXVpVGhlbWVDb250ZXh0KTtcbiAgICB9LCBbbWVtb2l6ZWRTdHlsZXMsIGV1aVRoZW1lQ29udGV4dF0pO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgc3R5bGVzTWVtb2l6ZXI6IHN0eWxlc01lbW9pemVyLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcykpO1xuICB9O1xuICB2YXIgV2l0aEV1aVN0eWxlc01lbW9pemVyID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoUmVuZGVyKTtcbiAgV2l0aEV1aVN0eWxlc01lbW9pemVyLmRpc3BsYXlOYW1lID0gY29tcG9uZW50TmFtZTtcbiAgcmV0dXJuIFdpdGhFdWlTdHlsZXNNZW1vaXplcjtcbn07XG5cbi8qKlxuICogUmVuZGVyIHByb3AgYWx0ZXJuYXRpdmUgZm9yIGNvbXBsZXggY2xhc3MgY29tcG9uZW50c1xuICogTW9zdCB1c2VmdWwgZm9yIHNjZW5hcmlvcyB3aGVyZSBhIEhPQyBtYXkgaW50ZXJmZXJlIHdpdGggdHlwaW5nXG4gKi9cbmV4cG9ydCB2YXIgUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyID0gZnVuY3Rpb24gUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyKF9yZWYyKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuO1xuICB2YXIgbWVtb2l6ZWRTdHlsZXMgPSB1c2VDb250ZXh0KEV1aVRoZW1lTWVtb2l6ZWRTdHlsZXNDb250ZXh0KTtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXNNZW1vaXplciA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChzdHlsZXNHZW5lcmF0b3IpIHtcbiAgICByZXR1cm4gZ2V0TWVtb2l6ZWRTdHlsZXMoc3R5bGVzR2VuZXJhdG9yLCBtZW1vaXplZFN0eWxlcywgZXVpVGhlbWVDb250ZXh0KTtcbiAgfSwgW21lbW9pemVkU3R5bGVzLCBldWlUaGVtZUNvbnRleHRdKTtcbiAgcmV0dXJuIGNoaWxkcmVuKHN0eWxlc01lbW9pemVyKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciB1c2VVcGRhdGVFZmZlY3QgPSBmdW5jdGlvbiB1c2VVcGRhdGVFZmZlY3QoZWZmZWN0LCBkZXBzKSB7XG4gIC8vIHVzZSByZWYgaW5zdGVhZCBvZiBhIHN0YXRlIHRvIGF2b2lkIGNhdXNpbmcgYW4gdW5uZWNlc3NhcnkgcmUtcmVuZGVyXG4gIHZhciBoYXNNb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBkb24ndCBpbnZva2UgdGhlIGVmZmVjdCBvbiBpbml0aWFsIG1vdW50XG4gICAgaWYgKGhhc01vdW50ZWQuY3VycmVudCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGVmZmVjdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYXNNb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgZGVwcyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0Jztcbi8qXG4gKiBGb3IgdXNlIHdoZW4gYSBjb21wb25lbnQgbmVlZHMgdG8gc2V0IGByZWZgIG9iamVjdHMgZnJvbSBtdWx0aXBsZSBzb3VyY2VzLlxuICogRm9yIGluc3RhbmNlLCBpZiBhIGNvbXBvbmVudCBhY2NlcHRzIGEgYHJlZmAgcHJvcCBidXQgYWxzbyBuZWVkcyBpdHMgb3duXG4gKiBsb2NhbCByZWZlcmVuY2UgZm9yIGNhbGN1bGF0aW9ucywgZXRjLlxuICogVGhpcyBob29rIGhhbmRsZXMgc2V0dGluZyBtdWx0aXBsZSBgcmVmYHMgb2YgYW55IGF2YWlsYWJsZSBgcmVmYCB0eXBlXG4gKiBpbiBhIHNpbmdsZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHZhciB1c2VDb21iaW5lZFJlZnMgPSBmdW5jdGlvbiB1c2VDb21iaW5lZFJlZnMocmVmcykge1xuICByZXR1cm4gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gc2V0TXVsdGlwbGVSZWZzKHJlZnMsIG5vZGUpO1xuICB9LCBbcmVmc10pO1xufTtcblxuLyoqXG4gKiBOb24taG9vayB1dGlsIGZvciBzZXR0aW5nIG11bHRpcGxlIHJlZnMvcmVmIHR5cGVzLlxuICogVXNlZnVsIGZvciBub24tZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gKi9cbmV4cG9ydCB2YXIgc2V0TXVsdGlwbGVSZWZzID0gZnVuY3Rpb24gc2V0TXVsdGlwbGVSZWZzKHJlZnMsIG5vZGUpIHtcbiAgcmVmcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZWYobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZi5jdXJyZW50ID0gbm9kZTtcbiAgICB9XG4gIH0pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi90aGVtZSc7XG5pbXBvcnQgeyB1c2VDdXJyZW50RXVpQnJlYWtwb2ludCB9IGZyb20gJy4vY3VycmVudF9icmVha3BvaW50X2hvb2snO1xuXG4vKipcbiAqIEdpdmVuIGFuIGFycmF5IG9mIGJyZWFrcG9pbnQga2V5cywgdGhpcyBob29rIHJldHVybnMgdHJ1ZSBvciBmYWxzZVxuICogaWYgdGhlIGJyZWFrcG9pbnQgc2l6ZSBvZiB0aGUgY3VycmVudCB3aW5kb3cgd2lkdGggZmFsbHMgd2l0aGluXG4gKiBhbnkgb2YgdGhlIG5hbWVkIGJyZWFrcG9pbnRzLlxuICpcbiAqIEBwYXJhbSB7RXVpVGhlbWVCcmVha3BvaW50W119IHNpemVzIEFuIGFycmF5IG9mIG5hbWVkIEVVSSBicmVha3BvaW50c1xuICogQHBhcmFtIHtib29sZWFufSBpc1Jlc3BvbnNpdmUgU29tZSBjb21wb25lbnRzIGhhdmUgdGhlIG9wdGlvbiB0byB0dXJuIG9mZiByZXNwb25zaXZlIGJlaGF2aW9yLlxuICogICBTaW5jZSBob29rcyBjYW4ndCBiZSBjYWxsZWQgY29uZGl0aW9uYWxseSwgaXQncyBlYXNpZXIgdG8gcGFzcyB0aGUgY29uZGl0aW9uIGludG8gdGhlIGhvb2tcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBjdXJyZW50IGJyZWFrcG9pbnQgbmFtZSBpcyBpbmNsdWRlZCBpbiBgc2l6ZXNgXG4gKi9cbmV4cG9ydCB2YXIgdXNlSXNXaXRoaW5CcmVha3BvaW50cyA9IGZ1bmN0aW9uIHVzZUlzV2l0aGluQnJlYWtwb2ludHMoc2l6ZXMpIHtcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQoKTtcbiAgcmV0dXJuIGN1cnJlbnRCcmVha3BvaW50ICYmIGlzUmVzcG9uc2l2ZSA/IHNpemVzLmluY2x1ZGVzKGN1cnJlbnRCcmVha3BvaW50KSA6IGZhbHNlO1xufTtcblxuLyoqXG4gKiBHaXZlbiBhIG1heCBicmVha3BvaW50IGtleSwgdGhpcyBob29rIHJldHVybnMgdHJ1ZSBpZiB0aGUgYnJlYWtwb2ludCBzaXplXG4gKiBvZiB0aGUgY3VycmVudCB3aW5kb3cgd2lkdGggZmFsbHMgd2l0aGluIHRoZSBtYXggYnJlYWtwb2ludCBvciBhbnkgYmVsb3csXG4gKiBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG4gKlxuICogQHBhcmFtIHtFdWlUaGVtZUJyZWFrcG9pbnR9IG1heCBUaGUgbmFtZWQgbWF4IGJyZWFrcG9pbnQgdG8gY2hlY2sgYWdhaW5zdFxuICogQHJldHVybnMge2Jvb2xlYW59IFdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgaXQgY2FuJ3QgZmluZCBhIHZhbHVlIGZvciB0aGUgYG1heGAgYnJlYWtwb2ludFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSXNXaXRoaW5NYXhCcmVha3BvaW50KG1heCkge1xuICB2YXIgX3VzZUV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKSxcbiAgICBicmVha3BvaW50cyA9IF91c2VFdWlUaGVtZS5ldWlUaGVtZS5icmVha3BvaW50O1xuICB2YXIgY3VycmVudEJyZWFrcG9pbnQgPSB1c2VDdXJyZW50RXVpQnJlYWtwb2ludCgpO1xuICBpZiAoY3VycmVudEJyZWFrcG9pbnQgPT0gbnVsbCB8fCBicmVha3BvaW50c1ttYXhdID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGJyZWFrcG9pbnRzW2N1cnJlbnRCcmVha3BvaW50XSA8PSBicmVha3BvaW50c1ttYXhdO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgbWluIGJyZWFrcG9pbnQga2V5LCB0aGlzIGhvb2sgcmV0dXJucyB0cnVlIGlmIHRoZSBicmVha3BvaW50IHNpemVcbiAqIG9mIHRoZSBjdXJyZW50IHdpbmRvdyB3aWR0aCBmYWxscyB3aXRoaW4gdGhlIG1pbiBicmVha3BvaW50IG9yIGFueSBhYm92ZSxcbiAqIGFuZCBmYWxzZSBvdGhlcndpc2VcbiAqXG4gKiBAcGFyYW0ge0V1aVRoZW1lQnJlYWtwb2ludH0gbWluIFRoZSBuYW1lZCBtaW4gYnJlYWtwb2ludCB0byBjaGVjayBhZ2FpbnN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2lsbCByZXR1cm4gYGZhbHNlYCBpZiBpdCBjYW4ndCBmaW5kIGEgdmFsdWUgZm9yIHRoZSBgbWluYCBicmVha3BvaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJc1dpdGhpbk1pbkJyZWFrcG9pbnQobWluKSB7XG4gIHZhciBfdXNlRXVpVGhlbWUyID0gdXNlRXVpVGhlbWUoKSxcbiAgICBicmVha3BvaW50cyA9IF91c2VFdWlUaGVtZTIuZXVpVGhlbWUuYnJlYWtwb2ludDtcbiAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQoKTtcbiAgaWYgKGN1cnJlbnRCcmVha3BvaW50ID09IG51bGwgfHwgYnJlYWtwb2ludHNbbWluXSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBicmVha3BvaW50c1tjdXJyZW50QnJlYWtwb2ludF0gPj0gYnJlYWtwb2ludHNbbWluXTtcbn0iLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIENyZWF0ZXMgYSB0ZW1wb3JhcnkgQ2FudmFzIGVsZW1lbnQgZm9yIG1hbmlwdWxhdGluZyB0ZXh0ICYgZGV0ZXJtaW5pbmcgdGV4dCB3aWR0aC5cbiAqXG4gKiBUbyBhY2N1cmF0ZWx5IG1lYXN1cmUgdGV4dCwgY2FudmFzIHJlbmRlcmluZyByZXF1aXJlcyBlaXRoZXIgYSBjb250YWluZXIgdG9cbiAqIGNvbXB1dGUvZGVyaXZlIGZvbnQgc3R5bGVzIGZyb20sIG9yIGEgc3RhdGljIGZvbnQgc3RyaW5nICh1c2VmdWwgZm9yIHVzYWdlXG4gKiBvdXRzaWRlIHRoZSBET00pLiBQYXJ0aWN1bGFyIGNhcmUgc2hvdWxkIGJlIGFwcGxpZWQgd2hlbiBmYWxsYmFjayBmb250cyBhcmVcbiAqIHVzZWQsIGFzIG1vcmUgZmFsbGJhY2sgZm9udHMgY2FuIGxlYWQgdG8gbGVzcyBwcmVjaXNpb24uXG4gKlxuICogUGxlYXNlIG5vdGUgdGhhdCB3aGlsZSBjYW52YXMgaXMgbW9yZSBzaWduaWZpY2FudGx5IG1vcmUgcGVyZm9ybWFudCB0aGFuIERPTVxuICogbWVhc3VyZW1lbnQsIHRoZXJlIGFyZSBzdWJwaXhlbCB0byBzaW5nbGUgZGlnaXQgcGl4ZWwgZGlmZmVyZW5jZXMgYmV0d2VlblxuICogRE9NIGFuZCBjYW52YXMgbWVhc3VyZW1lbnQgZHVlIHRvIHRoZSBkaWZmZXJlbnQgcmVuZGVyaW5nIGVuZ2luZXMgdXNlZC5cbiAqL1xuZXhwb3J0IHZhciBDYW52YXNUZXh0VXRpbHMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDYW52YXNUZXh0VXRpbHMoX3JlZikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdmFyIGZvbnQgPSBfcmVmLmZvbnQsXG4gICAgICBjb250YWluZXIgPSBfcmVmLmNvbnRhaW5lcjtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2FudmFzVGV4dFV0aWxzKTtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb250ZXh0XCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY3VycmVudFRleHRcIiwgJycpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbXB1dGVGb250RnJvbUVsZW1lbnRcIiwgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIHZhciBjb21wdXRlZFN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgICAgLy8gVE9ETzogZm9udC1zdHJldGNoIGlzIG5vdCBpbmNsdWRlZCBldmVuIHRob3VnaCBpdCBwb3RlbnRpYWxseSBzaG91bGQgYmVcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZvbnQjY29uc3RpdHVlbnRfcHJvcGVydGllc1xuICAgICAgLy8gSXQgYXBwZWFycyB0byBiZSB1bnN1cHBvcnRlZCBhbmQvb3IgYnJlYWtzIGZvbnQgY29tcHV0YXRpb24gaW4gY2FudmFzXG4gICAgICByZXR1cm4gWydmb250LXN0eWxlJywgJ2ZvbnQtdmFyaWFudCcsICdmb250LXdlaWdodCcsICdmb250LXNpemUnLCAnZm9udC1mYW1pbHknXS5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIGNvbXB1dGVkU3R5bGVzLmdldFByb3BlcnR5VmFsdWUocHJvcCk7XG4gICAgICB9KS5qb2luKCcgJykudHJpbSgpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNldFRleHRUb0NoZWNrXCIsIGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICBfdGhpcy5jdXJyZW50VGV4dCA9IHRleHQ7XG4gICAgfSk7XG4gICAgdGhpcy5jb250ZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgIC8vIFNldCB0aGUgY2FudmFzIGZvbnQgdG8gZW5zdXJlIHRleHQgd2lkdGggY2FsY3VsYXRpb25zIGFyZSBjb3JyZWN0XG4gICAgaWYgKGZvbnQpIHtcbiAgICAgIHRoaXMuY29udGV4dC5mb250ID0gZm9udDtcbiAgICB9IGVsc2UgaWYgKGNvbnRhaW5lcikge1xuICAgICAgdGhpcy5jb250ZXh0LmZvbnQgPSB0aGlzLmNvbXB1dGVGb250RnJvbUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhDYW52YXNUZXh0VXRpbHMsIFt7XG4gICAga2V5OiBcInRleHRXaWR0aFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCh0aGlzLmN1cnJlbnRUZXh0KS53aWR0aDtcbiAgICB9XG4gIH1dKTtcbn0oKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBDbGlwYm9hcmQgdGV4dCBjbGVhbmluZyBsb2dpY1xuICovXG5cbi8vIFNwZWNpYWwgdmlzdWFsbHkgaGlkZGVuIHVuaWNvZGUgY2hhcmFjdGVycyB0aGF0IHdlIHVzZSB0byBtYW51YWxseSBjbGVhbiBjb250ZW50XG4vLyBhbmQgZm9yY2Ugb3VyIG93biBuZXdsaW5lcy9ob3Jpem9udGFsIHRhYnNcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIENIQVJTID0ge1xuICBORVdMSU5FOiAnXHUyMUI1JyxcbiAgVEFCOiAnXHUyMUE2JyxcbiAgLy8gVXNlIG11bHRpcGxlIGNoYXJhY3RlcnMgdG8gcmVkdWNlIHRoZSBjaGFuY2VzIG9mIGNvbnN1bWVycyBhbHNvIHVzaW5nIHRoZXNlIGNoYXJhY3RlcnNcbiAgVEFCVUxBUl9DT05URU5UX0JPVU5EOiAnXHVEODAxXHVERTAyXHVEODAxXHVERTAyJyxcbiAgTk9fQ09QWV9CT1VORDogJ1x1MjcwNFx1RDgwMVx1REUxNydcbn07XG4vLyBUaGlzIHJlZ2V4IGZpbmRzIGFsbCBjb250ZW50IGJldHdlZW4gdHdvIGJvdW5kc1xudmFyIG5vQ29weUJvdW5kc1JlZ2V4ID0gbmV3IFJlZ0V4cChcIlwiLmNvbmNhdChDSEFSUy5OT19DT1BZX0JPVU5ELCBcIlteXCIpLmNvbmNhdChDSEFSUy5OT19DT1BZX0JPVU5ELCBcIl0qXCIpLmNvbmNhdChDSEFSUy5OT19DT1BZX0JPVU5EKSwgJ2dzJyk7XG52YXIgaGFzQ2hhcnNUb1JlcGxhY2UgPSBmdW5jdGlvbiBoYXNDaGFyc1RvUmVwbGFjZSh0ZXh0KSB7XG4gIGZvciAodmFyIF9pID0gMCwgX09iamVjdCR2YWx1ZXMgPSBPYmplY3QudmFsdWVzKENIQVJTKTsgX2kgPCBfT2JqZWN0JHZhbHVlcy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgY2hhciA9IF9PYmplY3QkdmFsdWVzW19pXTtcbiAgICBpZiAodGV4dC5pbmRleE9mKGNoYXIpID49IDApIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8vIFN0cmlwIGFsbCBleGlzdGluZyBuZXdsaW5lcyBhbmQgcmVwbGFjZSBvdXIgc3BlY2lhbCBoaWRkZW4gY2hhcmFjdGVyc1xuLy8gd2l0aCB0aGUgZGVzaXJlZCBzcGFjaW5nIG5lZWRlZCB0byBwYXN0ZSBjbGVhbmx5IGludG8gYSBzcHJlYWRzaGVldFxuZXhwb3J0IHZhciBvblRhYnVsYXJDb3B5ID0gZnVuY3Rpb24gb25UYWJ1bGFyQ29weShldmVudCkge1xuICB2YXIgX3dpbmRvdyRnZXRTZWxlY3Rpb247XG4gIGlmICghZXZlbnQuY2xpcGJvYXJkRGF0YSkgcmV0dXJuO1xuICB2YXIgc2VsZWN0ZWRUZXh0ID0gKF93aW5kb3ckZ2V0U2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpKSA9PT0gbnVsbCB8fCBfd2luZG93JGdldFNlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3dpbmRvdyRnZXRTZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgaWYgKCFzZWxlY3RlZFRleHQgfHwgIWhhc0NoYXJzVG9SZXBsYWNlKHNlbGVjdGVkVGV4dCkpIHJldHVybjtcbiAgdmFyIGFtZW5kZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnNwbGl0KENIQVJTLlRBQlVMQVJfQ09OVEVOVF9CT1VORCkubWFwKGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgcmV0dXJuIGhhc0NoYXJzVG9SZXBsYWNlKHRleHQpID8gdGV4dC5yZXBsYWNlKC9cXHI/XFxuL2csICcnKSAvLyByZW1vdmUgYWxsIG90aGVyIG5ld2xpbmVzIGdlbmVyYXRlZCBieSBjb250ZW50IG9yIGJsb2NrIGRpc3BsYXlcbiAgICAucmVwbGFjZUFsbChDSEFSUy5ORVdMSU5FLCAnXFxuJykgLy8gaW5zZXJ0IG5ld2xpbmUgZm9yIGVhY2ggdGFibGUvZ3JpZCByb3dcbiAgICAucmVwbGFjZSgvXFx0L2csICcnKSAvLyByZW1vdmUgdGFicyBnZW5lcmF0ZWQgYnkgY29udGVudCBvciBhdXRvbWF0aWNhbGx5IGJ5IDx0ZD4gZWxlbWVudHNcbiAgICAucmVwbGFjZUFsbChDSEFSUy5UQUIsIFwiXFx0XCIpIC8vIGluc2VydCBob3Jpem9udGFsIHRhYiBmb3IgZWFjaCB0YWJsZS9ncmlkIGNlbGxcbiAgICAucmVwbGFjZShub0NvcHlCb3VuZHNSZWdleCwgJycpIC8vIHJlbW92ZSB0ZXh0IHRoYXQgc2hvdWxkIG5vdCBiZSBjb3BpZWQgKGUuZy4gc2NyZWVuIHJlYWRlciBpbnN0cnVjdGlvbnMpXG4gICAgOiB0ZXh0O1xuICB9KS5qb2luKCcnKTtcbiAgZXZlbnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCd0ZXh0L3BsYWluJywgYW1lbmRlZFRleHQpO1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBKU1ggdXRpbHMgZm9yIHJlbmRlcmluZyB0aGUgaGlkZGVuIG1hcmtlciBjaGFyYWN0ZXJzXG4gKi9cblxudmFyIFZpc3VhbGx5SGlkZSA9IGZ1bmN0aW9uIFZpc3VhbGx5SGlkZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICd0cnVlJyA6IF9yZWYkdHlwZTtcbiAgcmV0dXJuIChcbiAgICAvLyBIaWRlcyB0aGUgY2hhcmFjdGVycyB0byBib3RoIHNpZ2h0ZWQgdXNlciBhbmQgc2NyZWVuIHJlYWRlcnNcbiAgICAvLyBTYWRseSwgd2UgY2FuJ3QgdXNlIGBoaWRkZW5gIGFzIHRoYXQgaGlkZXMgdGhlIGNoYXJzIGZyb20gdGhlIGNsaXBib2FyZCBhcyB3ZWxsXG4gICAgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVNjcmVlblJlYWRlck9ubHlcIixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICAgIFwiZGF0YS10YWJ1bGFyLWNvcHktbWFya2VyXCI6IHR5cGVcbiAgICB9LCBjaGlsZHJlbilcbiAgKTtcbn07XG5leHBvcnQgdmFyIHRhYnVsYXJDb3B5TWFya2VycyA9IHtcbiAgaGlkZGVuVGFiOiBfX19FbW90aW9uSlNYKFZpc3VhbGx5SGlkZSwge1xuICAgIHR5cGU6IFwidGFiXCJcbiAgfSwgQ0hBUlMuVEFCKSxcbiAgaGlkZGVuTmV3bGluZTogX19fRW1vdGlvbkpTWChWaXN1YWxseUhpZGUsIHtcbiAgICB0eXBlOiBcIm5ld2xpbmVcIlxuICB9LCBDSEFSUy5ORVdMSU5FKSxcbiAgaGlkZGVuV3JhcHBlckJvdW5kYXJ5OiBfX19FbW90aW9uSlNYKFZpc3VhbGx5SGlkZSwge1xuICAgIHR5cGU6IFwiYm91bmRhcnlcIlxuICB9LCBDSEFSUy5UQUJVTEFSX0NPTlRFTlRfQk9VTkQpLFxuICBoaWRkZW5Ob0NvcHlCb3VuZGFyeTogX19fRW1vdGlvbkpTWChWaXN1YWxseUhpZGUsIHtcbiAgICB0eXBlOiBcIm5vLWNvcHlcIlxuICB9LCBDSEFSUy5OT19DT1BZX0JPVU5EKVxufTtcblxuLyoqXG4gKiBXcmFwcGVyIHNldHVwIGFyb3VuZCB0YWJsZS9ncmlkIHRhYnVsYXIgY29udGVudCB3ZSB3YW50IHRvIG92ZXJyaWRlL2NsZWFuIHVwIG9uIGNvcHlcbiAqL1xuXG5leHBvcnQgdmFyIE92ZXJyaWRlQ29waWVkVGFidWxhckNvbnRlbnQgPSBmdW5jdGlvbiBPdmVycmlkZUNvcGllZFRhYnVsYXJDb250ZW50KF9yZWYyKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIENocm9tZSBhbmQgd2Via2l0IGJyb3dzZXJzIHdvcmsgcGVyZmVjdGx5IHdoZW4gcGFzc2luZyBgb25UYWJ1bGFyQ29weWAgdG8gYSBSZWFjdFxuICAgIC8vIGBvbkNvcHlgIHByb3AsIGJ1dCBzYWRseSBGaXJlZm94IGRvZXMgbm90IGlmIGNvcHlpbmcgbW9yZSB0aGFuIGp1c3QgdGhlIHRhYmxlL2dyaWRcbiAgICAvLyAoZS5nLiBDdHJsK0EpLiBTbyB3ZSBoYXZlIHRvIHNldCB1cCBhIGdsb2JhbCB3aW5kb3cgZXZlbnQgbGlzdGVuZXJcbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29weScsIG9uVGFidWxhckNvcHkpO1xuICAgIC8vIE5vdGU6IFNpbmNlIG9uQ29weSBpcyBzdGF0aWMsIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgZHVwbGljYXRlXG4gICAgLy8gZXZlbnQgbGlzdGVuZXJzIC0gaXQncyBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgYnkgdGhlIGJyb3dzZXIuIFNlZTpcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXQvYWRkRXZlbnRMaXN0ZW5lciNNdWx0aXBsZV9pZGVudGljYWxfZXZlbnRfbGlzdGVuZXJzXG4gIH0sIFtdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHRhYnVsYXJDb3B5TWFya2Vycy5oaWRkZW5XcmFwcGVyQm91bmRhcnksIGNoaWxkcmVuLCB0YWJ1bGFyQ29weU1hcmtlcnMuaGlkZGVuV3JhcHBlckJvdW5kYXJ5KTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogQSBET00gbm9kZSwgYSBzZWxlY3RvciBzdHJpbmcgKHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvXG4gKiBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigpYCB0byBmaW5kIHRoZSBET00gbm9kZSksIG9yIGEgZnVuY3Rpb24gdGhhdFxuICogcmV0dXJucyBhIERPTSBub2RlLlxuICovXG5cbmV4cG9ydCB2YXIgZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYgPSBmdW5jdGlvbiBmaW5kRWxlbWVudEJ5U2VsZWN0b3JPclJlZihlbGVtZW50VGFyZ2V0KSB7XG4gIHZhciBub2RlID0gZWxlbWVudFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gZWxlbWVudFRhcmdldCA6IG51bGw7XG4gIGlmICh0eXBlb2YgZWxlbWVudFRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50VGFyZ2V0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudFRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG5vZGUgPSBlbGVtZW50VGFyZ2V0KCk7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5leHBvcnQgdmFyIGFsd2F5cyA9IGZ1bmN0aW9uIGFsd2F5cyhfdmFsdWUpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuZXhwb3J0IHZhciBuZXZlciA9IGZ1bmN0aW9uIG5ldmVyKF92YWx1ZSkge1xuICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IHZhciBpc1VuZGVmaW5lZCA9IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufTtcbmV4cG9ydCB2YXIgaXNOdWxsID0gZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn07XG5leHBvcnQgdmFyIGlzTmlsID0gZnVuY3Rpb24gaXNOaWwodmFsdWUpIHtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSB8fCBpc051bGwodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNNb21lbnQgPSBmdW5jdGlvbiBpc01vbWVudCh2YWx1ZSkge1xuICByZXR1cm4gbW9tZW50LmlzTW9tZW50KHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzRGF0ZSA9IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gbW9tZW50LmlzRGF0ZSh2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc0RhdGVMaWtlID0gZnVuY3Rpb24gaXNEYXRlTGlrZSh2YWx1ZSkge1xuICByZXR1cm4gaXNNb21lbnQodmFsdWUpIHx8IGlzRGF0ZSh2YWx1ZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgX2lzRnVuY3Rpb24gZnJvbSAnbG9kYXNoL2lzRnVuY3Rpb24nO1xuaW1wb3J0IF9pc0FycmF5IGZyb20gJ2xvZGFzaC9pc0FycmF5JztcbmltcG9ydCBfaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBfaXNCb29sZWFuIGZyb20gJ2xvZGFzaC9pc0Jvb2xlYW4nO1xuaW1wb3J0IF9pc051bWJlciBmcm9tICdsb2Rhc2gvaXNOdW1iZXInO1xuaW1wb3J0IF9pc05hTiBmcm9tICdsb2Rhc2gvaXNOYU4nO1xuaW1wb3J0IF9pc09iamVjdCBmcm9tICdsb2Rhc2gvaXNPYmplY3QnO1xuXG4vLyB3cmFwIHRoZSBsb2Rhc2ggZnVuY3Rpb25zIHRvIGF2b2lkIGhhdmluZyBsb2Rhc2gncyBUUyB0eXBlIGRlZmluaXRpb24gZnJvbSBiZWluZ1xuLy8gZXhwb3J0ZWQsIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIHRoZSBsb2Rhc2ggbmFtZXNwYWNlIGlmIG90aGVyIHZlcnNpb25zIGFyZSB1c2VkXG5cbmV4cG9ydCB2YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIF9pc0Z1bmN0aW9uKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KHZhbHVlKSB7XG4gIHJldHVybiBfaXNBcnJheSh2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBfaXNTdHJpbmcodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNCb29sZWFuID0gZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gIHJldHVybiBfaXNCb29sZWFuKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzTnVtYmVyID0gZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIF9pc051bWJlcih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc05hTiA9IGZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gIHJldHVybiBfaXNOYU4odmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNPYmplY3QgPSBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gX2lzT2JqZWN0KHZhbHVlKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vcHJlZGljYXRlJztcbmV4cG9ydCB2YXIgZm9ybWF0Qm9vbGVhbiA9IGZ1bmN0aW9uIGZvcm1hdEJvb2xlYW4odmFsdWUpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF9yZWYkeWVzID0gX3JlZi55ZXMsXG4gICAgeWVzID0gX3JlZiR5ZXMgPT09IHZvaWQgMCA/ICdZZXMnIDogX3JlZiR5ZXMsXG4gICAgX3JlZiRubyA9IF9yZWYubm8sXG4gICAgbm8gPSBfcmVmJG5vID09PSB2b2lkIDAgPyAnTm8nIDogX3JlZiRubyxcbiAgICBfcmVmJG5pbCA9IF9yZWYubmlsLFxuICAgIG5pbCA9IF9yZWYkbmlsID09PSB2b2lkIDAgPyAnJyA6IF9yZWYkbmlsO1xuICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgcmV0dXJuIG5pbDtcbiAgfVxuICByZXR1cm4gdmFsdWUgPyB5ZXMgOiBubztcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgaXNOaWwsIGlzRnVuY3Rpb24sIGlzU3RyaW5nIH0gZnJvbSAnLi4vcHJlZGljYXRlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbnZhciBjYWxlbmRhciA9IGZ1bmN0aW9uIGNhbGVuZGFyKHZhbHVlKSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIHJlZlRpbWUgPSBvcHRpb25zLnJlZlRpbWU7XG4gIHJldHVybiBtb21lbnQodmFsdWUpLmNhbGVuZGFyKHJlZlRpbWUsIG9wdGlvbnMpO1xufTtcbmV4cG9ydCB2YXIgZGF0ZUZvcm1hdEFsaWFzZXMgPSB7XG4gIGRhdGU6ICdEIE1NTSBZWVlZJyxcbiAgbG9uZ0RhdGU6ICdERCBNTU1NIFlZWVknLFxuICBzaG9ydERhdGU6ICdEIE1NTSBZWScsXG4gIGRhdGVUaW1lOiAnRCBNTU0gWVlZWSBISDptbScsXG4gIGxvbmdEYXRlVGltZTogJ0REIE1NTU0gWVlZWSBISDptbTpzcycsXG4gIHNob3J0RGF0ZVRpbWU6ICdEIE1NTSBZWSBISDptbScsXG4gIGRvYlNob3J0OiAnRG8gTU1NIFlZJyxcbiAgZG9iTG9uZzogJ0RvIE1NTU0gWVlZWScsXG4gIGlzbzg2MDE6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTU1onLFxuICBjYWxlbmRhcjogY2FsZW5kYXIsXG4gIGNhbGVuZGFyRGF0ZVRpbWU6IGZ1bmN0aW9uIGNhbGVuZGFyRGF0ZVRpbWUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2FsZW5kYXIodmFsdWUsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gSDptbUEnLFxuICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gSDptbUEnLFxuICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gSDptbUEnLFxuICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIEg6bW1BJyxcbiAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBIOm1tQScsXG4gICAgICBzYW1lRWxzZTogJ0RvIE1NTSBZWVlZIFthdF0gSDptbUEnXG4gICAgfSwgb3B0aW9ucykpO1xuICB9LFxuICBjYWxlbmRhckRhdGU6IGZ1bmN0aW9uIGNhbGVuZGFyRGF0ZSh2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBjYWxlbmRhcih2YWx1ZSwgX29iamVjdFNwcmVhZCh7XG4gICAgICBzYW1lRGF5OiAnW1RvZGF5XScsXG4gICAgICBuZXh0RGF5OiAnW1RvbW9ycm93XScsXG4gICAgICBuZXh0V2VlazogJ2RkZGQnLFxuICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXldJyxcbiAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQnLFxuICAgICAgc2FtZUVsc2U6ICdEbyBNTU0gWVlZWSdcbiAgICB9LCBvcHRpb25zKSk7XG4gIH1cbn07XG5mdW5jdGlvbiBpc1N0cmluZ0FEYXRlRm9ybWF0KHgpIHtcbiAgcmV0dXJuIGRhdGVGb3JtYXRBbGlhc2VzLmhhc093blByb3BlcnR5KHgpO1xufVxuZnVuY3Rpb24gaW5zdGFuY2VPZkZvcm1hdERhdGVDb25maWcoeCkge1xuICByZXR1cm4gX3R5cGVvZih4KSA9PT0gJ29iamVjdCcgJiYgKHguaGFzT3duUHJvcGVydHkoJ2Zvcm1hdCcpIHx8IHguaGFzT3duUHJvcGVydHkoJ25pbCcpIHx8IHguaGFzT3duUHJvcGVydHkoJ29wdGlvbnMnKSk7XG59XG5leHBvcnQgdmFyIGZvcm1hdERhdGUgPSBmdW5jdGlvbiBmb3JtYXREYXRlKHZhbHVlKSB7XG4gIHZhciBkYXRlRm9ybWF0S2V5T3JDb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdkYXRlVGltZSc7XG4gIGlmIChpc1N0cmluZyhkYXRlRm9ybWF0S2V5T3JDb25maWcpKSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICB2YXIgZGF0ZUZvcm1hdFN0ck9yRnVuYyA9IGlzU3RyaW5nQURhdGVGb3JtYXQoZGF0ZUZvcm1hdEtleU9yQ29uZmlnKSA/IGRhdGVGb3JtYXRBbGlhc2VzW2RhdGVGb3JtYXRLZXlPckNvbmZpZ10gOiBkYXRlRm9ybWF0S2V5T3JDb25maWc7XG4gICAgaWYgKGlzRnVuY3Rpb24oZGF0ZUZvcm1hdFN0ck9yRnVuYykpIHtcbiAgICAgIHJldHVybiBkYXRlRm9ybWF0U3RyT3JGdW5jKHZhbHVlLCB7fSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhkYXRlRm9ybWF0U3RyT3JGdW5jKSkge1xuICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSkuZm9ybWF0KGRhdGVGb3JtYXRTdHJPckZ1bmMpO1xuICAgIH1cbiAgfVxuICBpZiAoaW5zdGFuY2VPZkZvcm1hdERhdGVDb25maWcoZGF0ZUZvcm1hdEtleU9yQ29uZmlnKSkge1xuICAgIHZhciBfZGF0ZUZvcm1hdEtleU9yQ29uZmkgPSBkYXRlRm9ybWF0S2V5T3JDb25maWcuZm9ybWF0LFxuICAgICAgZm9ybWF0ID0gX2RhdGVGb3JtYXRLZXlPckNvbmZpID09PSB2b2lkIDAgPyAnZGF0ZVRpbWUnIDogX2RhdGVGb3JtYXRLZXlPckNvbmZpLFxuICAgICAgX2RhdGVGb3JtYXRLZXlPckNvbmZpMiA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5uaWwsXG4gICAgICBuaWwgPSBfZGF0ZUZvcm1hdEtleU9yQ29uZmkyID09PSB2b2lkIDAgPyAnJyA6IF9kYXRlRm9ybWF0S2V5T3JDb25maTIsXG4gICAgICBvcHRpb25zID0gZGF0ZUZvcm1hdEtleU9yQ29uZmlnLm9wdGlvbnM7XG4gICAgdmFyIGRhdGVGb3JtYXQgPSBkYXRlRm9ybWF0QWxpYXNlc1tmb3JtYXRdIHx8IGZvcm1hdDtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbmlsO1xuICAgIH1cbiAgICBpZiAoaXNGdW5jdGlvbihkYXRlRm9ybWF0KSkge1xuICAgICAgcmV0dXJuIGRhdGVGb3JtYXQodmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoaXNTdHJpbmcoZGF0ZUZvcm1hdCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQodmFsdWUpLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGZvcm1hdCB2YWx1ZSB1c2luZyBkYXRlRm9ybWF0S2V5T3JDb25maWc6IFwiLmNvbmNhdChkYXRlRm9ybWF0S2V5T3JDb25maWcpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBudW1lcmFsIGZyb20gJ251bWVyYWwnO1xuaW1wb3J0IHsgaXNOaWwsIGlzU3RyaW5nIH0gZnJvbSAnLi4vcHJlZGljYXRlJztcbnZhciBudW1iZXJGb3JtYXRBbGlhc2VzID0ge1xuICBkZWNpbWFsMTogJzAsMC4wJyxcbiAgZGVjaW1hbDI6ICcwLDAuMDAnLFxuICBkZWNpbWFsMzogJzAsMC4wMDAnLFxuICBvcmRpbmFsOiAnMG8nLFxuICBpbnRlZ2VyOiAnMCwwJ1xufTtcbmV4cG9ydCB2YXIgZm9ybWF0TnVtYmVyID0gZnVuY3Rpb24gZm9ybWF0TnVtYmVyKHZhbHVlKSB7XG4gIHZhciBudW1iZXJGb3JtYXRPckNvbmZpZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciBmb3JtYXQ7XG4gIHZhciBuaWwgPSAnJztcbiAgdmFyIHJvdW5kO1xuICBpZiAoaXNTdHJpbmcobnVtYmVyRm9ybWF0T3JDb25maWcpKSB7XG4gICAgZm9ybWF0ID0gbnVtYmVyRm9ybWF0T3JDb25maWc7XG4gIH0gZWxzZSB7XG4gICAgZm9ybWF0ID0gbnVtYmVyRm9ybWF0T3JDb25maWcuZm9ybWF0O1xuICAgIG5pbCA9IG51bWJlckZvcm1hdE9yQ29uZmlnLm5pbCB8fCAnJztcbiAgICByb3VuZCA9IG51bWJlckZvcm1hdE9yQ29uZmlnLnJvdW5kO1xuICB9XG4gIGlmICghZm9ybWF0KSB7XG4gICAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/IG5pbCA6IHZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cbiAgdmFyIHJvdW5kaW5nRnVuYyA9IHJvdW5kID8gTWF0aC5yb3VuZCA6IE1hdGguZmxvb3I7XG4gIHZhciBudW1iZXJGb3JtYXQgPSBudW1iZXJGb3JtYXRBbGlhc2VzW2Zvcm1hdF0gfHwgZm9ybWF0O1xuICByZXR1cm4gaXNOaWwodmFsdWUpID8gbmlsIDogbnVtZXJhbCh2YWx1ZSkuZm9ybWF0KG51bWJlckZvcm1hdCwgcm91bmRpbmdGdW5jKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vcHJlZGljYXRlJztcbmV4cG9ydCB2YXIgZm9ybWF0VGV4dCA9IGZ1bmN0aW9uIGZvcm1hdFRleHQodmFsdWUpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHtcbiAgICBuaWw6ICcnXG4gIH07XG4gIHJldHVybiBpc05pbCh2YWx1ZSkgPyBvcHRpb25zLm5pbCA6IHZhbHVlLnRvU3RyaW5nKCk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBpc05pbCwgaXNBcnJheSwgaXNCb29sZWFuLCBpc0RhdGUsIGlzTmFOLCBpc051bWJlciwgaXNTdHJpbmcgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgZm9ybWF0Qm9vbGVhbiB9IGZyb20gJy4vZm9ybWF0X2Jvb2xlYW4nO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJy4vZm9ybWF0X2RhdGUnO1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyIH0gZnJvbSAnLi9mb3JtYXRfbnVtYmVyJztcbmltcG9ydCB7IGZvcm1hdFRleHQgfSBmcm9tICcuL2Zvcm1hdF90ZXh0JztcbmV4cG9ydCB2YXIgZm9ybWF0QXV0byA9IGZ1bmN0aW9uIGZvcm1hdEF1dG8odmFsdWUpIHtcbiAgaWYgKGlzTmlsKHZhbHVlKSB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiBmb3JtYXRUZXh0KHZhbHVlKTtcbiAgfVxuICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBmb3JtYXREYXRlKHZhbHVlKTtcbiAgfVxuICBpZiAoaXNCb29sZWFuKHZhbHVlKSkge1xuICAgIHJldHVybiBmb3JtYXRCb29sZWFuKHZhbHVlKTtcbiAgfVxuICBpZiAoaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSk7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gZm9ybWF0QXV0byhpdGVtKTtcbiAgICB9KS5qb2luKCcsICcpIDogZm9ybWF0QXV0byh2YWx1ZSk7XG4gIH1cblxuICAvLyBUT0RPIG5vdCBzdXJlIGlmIHdlIHdhbnQgdGhhdC4uIHRoZSAoKykgaXMgdGhhdCB3ZSBzaG93IHNvbWV0aGluZywgdGhlICgtKSBpcyB0aGF0IGl0J3MgdmVyeSB0ZWNobmljYWxcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciBQT1NJVElPTlMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xudmFyIHJlbGF0ZWREaW1lbnNpb24gPSB7XG4gIHRvcDogJ2hlaWdodCcsXG4gIHJpZ2h0OiAnd2lkdGgnLFxuICBib3R0b206ICdoZWlnaHQnLFxuICBsZWZ0OiAnd2lkdGgnXG59O1xudmFyIGRpbWVuc2lvblBvc2l0aW9uQXR0cmlidXRlID0ge1xuICBoZWlnaHQ6ICd0b3AnLFxuICB3aWR0aDogJ2xlZnQnXG59O1xudmFyIHBvc2l0aW9uQ29tcGxlbWVudHMgPSB7XG4gIHRvcDogJ2JvdHRvbScsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIGxlZnQ6ICdyaWdodCdcbn07XG5cbi8vIGFsd2F5cyByZXNvbHZpbmcgdG8gdG9wL2xlZnQgaXMgdGFrZW4gYWR2YW50YWdlIG9mIGJ5IGtub3dpbmcgdGhleSBhcmUgdGhlXG4vLyBtaW5pbXVtIGVkZ2VzIG9mIHRoZSBib3VuZGluZyBib3hcbnZhciBwb3NpdGlvblN1YnN0aXR1dGVzID0ge1xuICB0b3A6ICdsZWZ0JyxcbiAgcmlnaHQ6ICd0b3AnLFxuICBib3R0b206ICdsZWZ0JyxcbiAgbGVmdDogJ3RvcCdcbn07XG52YXIgZ2V0QnVmZmVyVmFsdWVzID0gZnVuY3Rpb24gZ2V0QnVmZmVyVmFsdWVzKGJ1ZmZlcikge1xuICBpZiAoQXJyYXkuaXNBcnJheShidWZmZXIpKSB7XG4gICAgdmFyIF9idWZmZXIgPSBfc2xpY2VkVG9BcnJheShidWZmZXIsIDQpLFxuICAgICAgdG9wQnVmZmVyID0gX2J1ZmZlclswXSxcbiAgICAgIHJpZ2h0QnVmZmVyID0gX2J1ZmZlclsxXSxcbiAgICAgIGJvdHRvbUJ1ZmZlciA9IF9idWZmZXJbMl0sXG4gICAgICBsZWZ0QnVmZmVyID0gX2J1ZmZlclszXTtcbiAgICByZXR1cm4gW3RvcEJ1ZmZlciwgcmlnaHRCdWZmZXIsIGJvdHRvbUJ1ZmZlciwgbGVmdEJ1ZmZlcl07XG4gIH1cbiAgcmV0dXJuIFtidWZmZXIsIGJ1ZmZlciwgYnVmZmVyLCBidWZmZXJdO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbmluZyAocmVsYXRpdmUgdG8gZG9jdW1lbnQuYm9keSkgdG8gcGxhY2UgYSBwb3BvdmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gYW5jaG9yIHtIVE1MRWxlbWVudH0gRWxlbWVudCB0byBhbmNob3IgdGhlIHBvcG92ZXIgdG9cbiAqIEBwYXJhbSBwb3BvdmVyIHtIVE1MRWxlbWVudH0gRWxlbWVudCBjb250YWluaW5nIHRoZSBwb3BvdmVyIGNvbnRlbnRcbiAqIEBwYXJhbSBwb3NpdGlvbiB7c3RyaW5nfSBQb3NpdGlvbiB0aGUgdXNlciB3YW50cy4gT25lIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHBhcmFtIFtmb3JjZVBvc2l0aW9uXSB7Ym9vbGVhbn0gSWYgdHJ1ZSwgdXNlIG9ubHkgdGhlIHByb3ZpZGVkIGBwb3NpdGlvbmAgdmFsdWUgYW5kIGRvbid0IHRyeSBhbnkgb3RoZXIgcG9zaXRpb25cbiAqIEBwYXJhbSBbYWxpZ25dIHtzdHJpbmd9IENyb3NzLWF4aXMgYWxpZ25tZW50LiBPbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gW2J1ZmZlcj0xNl0ge251bWJlcn0gTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYm91bmRpbmcgY29udGFpbmVyXG4gKiBAcGFyYW0gW29mZnNldD0wXSB7bnVtYmVyfSBEaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYW5jaG9yXG4gKiBAcGFyYW0gW2FsbG93Q3Jvc3NBeGlzPXRydWVdIHtib29sZWFufSBXaGV0aGVyIHRvIGFsbG93IHRoZSBwb3BvdmVyIHRvIGJlIHBvc2l0aW9uZWQgb24gdGhlIGNyb3NzLWF4aXNcbiAqIEBwYXJhbSBbY29udGFpbmVyXSB7SFRNTEVsZW1lbnR9IEVsZW1lbnQgdGhlIHBvcG92ZXIgbXVzdCBiZSBjb25zdHJhaW5lZCB0byBmaXQgd2l0aGluXG4gKiBAcGFyYW0gW2Fycm93Q29uZmlnXSB7e2Fycm93V2lkdGg6IG51bWJlciwgYXJyb3dCdWZmZXI6IG51bWJlcn19IElmXG4gKiAgcHJlc2VudCwgZGVzY3JpYmVzIHRoZSBzaXplICYgY29uc3RyYWludHMgZm9yIGFuIGFycm93IGVsZW1lbnQsIGFuZCB0aGVcbiAqICBmdW5jdGlvbiByZXR1cm4gdmFsdWUgd2lsbCBpbmNsdWRlIGFuIGBhcnJvd2AgcGFyYW0gd2l0aCBwb3NpdGlvbiBkZXRhaWxzXG4gKlxuICogQHJldHVybnMge0ZpbmRQb3BvdmVyUG9zaXRpb25SZXN1bHR9IGFic29sdXRlIHBhZ2UgY29vcmRpbmF0ZXMgZm9yIHRoZVxuICogcG9wb3ZlciwgYW5kIHRoZSBwbGFjZW1lbnQncyByZWxhdGlvbiB0byB0aGUgYW5jaG9yIG9yIHVuZGVmaW5lZFxuICogdGhlcmUncyBubyByb29tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFBvcG92ZXJQb3NpdGlvbihfcmVmKSB7XG4gIHZhciBhbmNob3IgPSBfcmVmLmFuY2hvcixcbiAgICBwb3BvdmVyID0gX3JlZi5wb3BvdmVyLFxuICAgIGFsaWduID0gX3JlZi5hbGlnbixcbiAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgZm9yY2VQb3NpdGlvbiA9IF9yZWYuZm9yY2VQb3NpdGlvbixcbiAgICBfcmVmJGJ1ZmZlciA9IF9yZWYuYnVmZmVyLFxuICAgIGJ1ZmZlciA9IF9yZWYkYnVmZmVyID09PSB2b2lkIDAgPyAxNiA6IF9yZWYkYnVmZmVyLFxuICAgIF9yZWYkb2Zmc2V0ID0gX3JlZi5vZmZzZXQsXG4gICAgb2Zmc2V0ID0gX3JlZiRvZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfcmVmJG9mZnNldCxcbiAgICBfcmVmJGFsbG93Q3Jvc3NBeGlzID0gX3JlZi5hbGxvd0Nyb3NzQXhpcyxcbiAgICBhbGxvd0Nyb3NzQXhpcyA9IF9yZWYkYWxsb3dDcm9zc0F4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGFsbG93Q3Jvc3NBeGlzLFxuICAgIGNvbnRhaW5lciA9IF9yZWYuY29udGFpbmVyLFxuICAgIGFycm93Q29uZmlnID0gX3JlZi5hcnJvd0NvbmZpZyxcbiAgICByZXR1cm5Cb3VuZGluZ0JveCA9IF9yZWYucmV0dXJuQm91bmRpbmdCb3g7XG4gIC8vIGZpbmQgdGhlIHNjcmVlbi1yZWxhdGl2ZSBib3VuZGluZyBib3hlcyBvZiB0aGUgYW5jaG9yLCBwb3BvdmVyLCBhbmQgY29udGFpbmVyXG4gIHZhciBhbmNob3JCb3VuZGluZ0JveCA9IGdldEVsZW1lbnRCb3VuZGluZ0JveChhbmNob3IpO1xuICB2YXIgcG9wb3ZlckJvdW5kaW5nQm94ID0gZ2V0RWxlbWVudEJvdW5kaW5nQm94KHBvcG92ZXIpO1xuXG4gIC8vIGNhbGN1bGF0ZSB0aGUgd2luZG93J3MgYm91bmRzXG4gIC8vIHdpbmRvdy4oaW5uZXJXaWR0aHxpbm5lckhlaWdodCkgZG8gbm90IGFjY291bnQgZm9yIHNjcm9sbGJhcnNcbiAgLy8gc28gcHJlZmVyIHRoZSBjbGllbnRXaWR0aC9jbGllbnRIZWlnaHQgb2YgdGhlIERPTSBpZiBhdmFpbGFibGVcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgd2luZG93LmlubmVyV2lkdGg7XG4gIHZhciBkb2N1bWVudEhlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgd2luZG93LmlubmVySGVpZ2h0O1xuICB2YXIgd2luZG93Qm91bmRpbmdCb3ggPSB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiBkb2N1bWVudFdpZHRoLFxuICAgIGJvdHRvbTogZG9jdW1lbnRIZWlnaHQsXG4gICAgbGVmdDogMCxcbiAgICBoZWlnaHQ6IGRvY3VtZW50SGVpZ2h0LFxuICAgIHdpZHRoOiBkb2N1bWVudFdpZHRoXG4gIH07XG5cbiAgLy8gaWYgbm8gY29udGFpbmVyIGVsZW1lbnQgaXMgZ2l2ZW4gZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSB3aW5kb3cgdmlld3BvcnRcbiAgdmFyIGNvbnRhaW5lckJvdW5kaW5nQm94ID0gY29udGFpbmVyID8gZ2V0RWxlbWVudEJvdW5kaW5nQm94KGNvbnRhaW5lcikgOiB3aW5kb3dCb3VuZGluZ0JveDtcblxuICAvKipcbiAgICogYHBvc2l0aW9uYCB3YXMgc3BlY2lmaWVkIGJ5IHRoZSBmdW5jdGlvbiBjYWxsZXIgYW5kIGlzIGEgc3Ryb25nIGhpbnRcbiAgICogYXMgdG8gdGhlIHByZWZlcnJlZCBsb2NhdGlvbiBvZiB0aGUgcG9wb3ZlciByZWxhdGl2ZSB0byB0aGUgYW5jaG9yLlxuICAgKiBIb3dldmVyLCB3ZSBzdHJvbmdseSBwcmVmZXIgc2hvd2luZyBhbGwgb2YgdGhlIHBvcG92ZXIgY29udGVudCB3aXRoaW5cbiAgICogdGhlIHdpbmRvdytjb250YWluZXIgYm91bmRhcnkgYW5kIHdpbGwgaXRlcmF0ZSBvdmVyIHRoZSBmb3VyXG4gICAqIHBvc3NpYmxlIHNpZGVzIHVudGlsIGEgcGVyZmVjdCBmaXQgaXMgbG9jYXRlZC4gSWYgbm9uZSBvZiB0aGUgbG9jYXRpb25zXG4gICAqIGZ1bGx5IGNvbnRhaW4gcG9wb3ZlciwgdGhlIGxvY2F0aW9uIHdpdGggdGhlIGJlc3QgZml0IGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBUaGlzIGFwcHJvYWNoIGZpcnN0IGNoZWNrcyB0aGUgcHJlZmVycmVkIGBwb3NpdGlvbmAsIHRoZW4gaXRzIG9wcG9zaXRlXG4gICAqIGFsb25nIHRoZSBzYW1lIGF4aXMsIG5leHQgYSBsb2NhdGlvbiBvbiB0aGUgY3Jvc3MtYXhpcywgYW5kIGZpbmFsbHkgaXRcbiAgICogdGVzdHMgdGhlIHJlbWFpbmluZyBwb3NpdGlvbi5cbiAgICpcbiAgICogZS5nLlxuICAgKiBpZiBwb3NpdGlvbiA9IFwidG9wXCIgdGhlIG9yZGVyIGlzIHRvcCwgYm90dG9tLCBsZWZ0IHJpZ2h0XG4gICAqIGlmIHBvc2l0aW9uID0gXCJyaWdodFwiIHRoZSBvcmRlciBpcyByaWdodCwgbGVmdCwgdG9wLCBib3R0b21cbiAgICovXG5cbiAgLy8gVHJ5IHRoZSB1c2VyLWRlc2lyZWQgcG9zaXRpb24gZmlyc3QuXG4gIHZhciBpdGVyYXRpb25Qb3NpdGlvbnMgPSBbcG9zaXRpb25dO1xuICAvLyBrZWVwIHVzZXItZGVmaW5lZCBhbGlnbm1lbnQgaW4gdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cbiAgdmFyIGl0ZXJhdGlvbkFsaWdubWVudHMgPSBbYWxpZ25dO1xuICBpZiAoZm9yY2VQb3NpdGlvbiAhPT0gdHJ1ZSkge1xuICAgIGl0ZXJhdGlvblBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uQ29tcGxlbWVudHNbcG9zaXRpb25dKTsgLy8gVHJ5IHRoZSBjb21wbGVtZW50YXJ5IHBvc2l0aW9uLlxuICAgIGl0ZXJhdGlvbkFsaWdubWVudHMucHVzaChhbGlnbik7IC8vIGtlZXAgdXNlci1kZWZpbmVkIGFsaWdubWVudCBpbiB0aGUgY29tcGxlbWVudGFyeSBwb3NpdGlvbi5cblxuICAgIGlmIChhbGxvd0Nyb3NzQXhpcykge1xuICAgICAgaXRlcmF0aW9uUG9zaXRpb25zLnB1c2gocG9zaXRpb25TdWJzdGl0dXRlc1twb3NpdGlvbl0sXG4gICAgICAvLyBTd2l0Y2ggdG8gdGhlIGNyb3NzIGF4aXMuXG4gICAgICBwb3NpdGlvbkNvbXBsZW1lbnRzW3Bvc2l0aW9uU3Vic3RpdHV0ZXNbcG9zaXRpb25dXSAvLyBUcnkgdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24gb24gdGhlIGNyb3NzIGF4aXMuXG4gICAgICApO1xuICAgICAgaXRlcmF0aW9uQWxpZ25tZW50cy5wdXNoKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsgLy8gZGlzY2FyZCBkZXNpcmVkIGFsaWdubWVudCBvbiBjcm9zcy1heGlzXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIHBvc2l0aW9uIGlzIGZvcmNlZCwgaWYgaXQgY29uZmxpY3RzIHdpdGggdGhlIGFsaWdubWVudCB0aGVuIHJlc2V0IGFsaWduIHRvIGBudWxsYFxuICAgIC8vIGUuZy4gb3JpZ2luYWwgcGxhY2VtZW50IHJlcXVlc3QgZm9yIGBkb3duTGVmdGAgaXMgbW92ZWQgdG8gdGhlIGBsZWZ0YCBzaWRlLCBmdXR1cmUgY2FsbHNcbiAgICAvLyB3aWxsIHBvc2l0aW9uIGFuZCBhbGlnbiBgbGVmdGAsIGFuZCBgbGVmdExlZnRgIGlzIG5vdCBhIHZhbGlkIHBsYWNlbWVudFxuICAgIGlmIChwb3NpdGlvbiA9PT0gYWxpZ24gfHwgYWxpZ24gIT09IHVuZGVmaW5lZCAmJiBwb3NpdGlvbiA9PT0gcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl0pIHtcbiAgICAgIGl0ZXJhdGlvbkFsaWdubWVudHNbMF0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHZhciBiZXN0Rml0ID0gdW5kZWZpbmVkO1xuICB2YXIgYmVzdFBvc2l0aW9uID0gbnVsbDtcbiAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgaXRlcmF0aW9uUG9zaXRpb25zLmxlbmd0aDsgaWR4KyspIHtcbiAgICB2YXIgaXRlcmF0aW9uUG9zaXRpb24gPSBpdGVyYXRpb25Qb3NpdGlvbnNbaWR4XTtcblxuICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHBvc2l0aW9uIHdpdGggYSBiZXR0ZXIgZml0IHRoYW4gd2UndmUgZm91bmQgc28gZmFyLlxuICAgIHZhciBzY3JlZW5Db29yZGluYXRlcyA9IGdldFBvcG92ZXJTY3JlZW5Db29yZGluYXRlcyh7XG4gICAgICBwb3NpdGlvbjogaXRlcmF0aW9uUG9zaXRpb24sXG4gICAgICBhbGlnbjogaXRlcmF0aW9uQWxpZ25tZW50c1tpZHhdLFxuICAgICAgYW5jaG9yQm91bmRpbmdCb3g6IGFuY2hvckJvdW5kaW5nQm94LFxuICAgICAgcG9wb3ZlckJvdW5kaW5nQm94OiBwb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgICB3aW5kb3dCb3VuZGluZ0JveDogd2luZG93Qm91bmRpbmdCb3gsXG4gICAgICBjb250YWluZXJCb3VuZGluZ0JveDogY29udGFpbmVyQm91bmRpbmdCb3gsXG4gICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgIGJ1ZmZlcjogYnVmZmVyLFxuICAgICAgYXJyb3dDb25maWc6IGFycm93Q29uZmlnXG4gICAgfSk7XG4gICAgaWYgKGJlc3RGaXQgPT09IHVuZGVmaW5lZCB8fCBzY3JlZW5Db29yZGluYXRlcy5maXQgPiBiZXN0Rml0KSB7XG4gICAgICBiZXN0Rml0ID0gc2NyZWVuQ29vcmRpbmF0ZXMuZml0O1xuICAgICAgYmVzdFBvc2l0aW9uID0ge1xuICAgICAgICBmaXQ6IHNjcmVlbkNvb3JkaW5hdGVzLmZpdCxcbiAgICAgICAgcG9zaXRpb246IGl0ZXJhdGlvblBvc2l0aW9uLFxuICAgICAgICB0b3A6IHNjcmVlbkNvb3JkaW5hdGVzLnRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCxcbiAgICAgICAgbGVmdDogc2NyZWVuQ29vcmRpbmF0ZXMubGVmdCArIHdpbmRvdy5wYWdlWE9mZnNldCxcbiAgICAgICAgYXJyb3c6IHNjcmVlbkNvb3JkaW5hdGVzLmFycm93XG4gICAgICB9O1xuXG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGZvdW5kIHRoZSBpZGVhbCBmaXQsIHVzZSB0aGF0IHBvc2l0aW9uLlxuICAgICAgaWYgKGJlc3RGaXQgPT09IDEpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZW4ndCBpbXByb3ZlZCB0aGUgZml0LCB0aGVuIGNvbnRpbnVlIG9uIGFuZCB0cnkgYSBuZXcgcG9zaXRpb24uXG4gIH1cbiAgaWYgKGJlc3RQb3NpdGlvbiA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY2FsY3VsYXRlIGJlc3RQb3NpdGlvbicpO1xuICB9XG4gIGlmIChyZXR1cm5Cb3VuZGluZ0JveCkge1xuICAgIGJlc3RQb3NpdGlvbi5hbmNob3JCb3VuZGluZ0JveCA9IGFuY2hvckJvdW5kaW5nQm94O1xuICB9XG4gIHJldHVybiBiZXN0UG9zaXRpb247XG59XG4vKipcbiAqIEdpdmVuIGEgdGFyZ2V0IHBvc2l0aW9uIGFuZCB0aGUgcG9wb3ZlcidzIHN1cnJvdW5kaW5nIGNvbnRleHQsIHJldHVybnMgZWl0aGVyIGFuXG4gKiBvYmplY3Qgd2l0aCB7dG9wLCBsZWZ0fSBzY3JlZW4gY29vcmRpbmF0ZXMgb3IgYG51bGxgIGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNob3dcbiAqIGNvbnRlbnQgaW4gdGhlIHRhcmdldCBwb3NpdGlvblxuICogQHBhcmFtIHBvc2l0aW9uIHtzdHJpbmd9IHRoZSB0YXJnZXQgcG9zaXRpb24sIG9uZSBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEBwYXJhbSBhbGlnbiB7c3RyaW5nfSB0YXJnZXQgYWxpZ25tZW50IG9uIHRoZSBjcm9zcy1heGlzLCBvbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gYW5jaG9yQm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICogQHBhcmFtIHBvcG92ZXJCb3VuZGluZ0JveCB7T2JqZWN0fSBib3VuZGluZyBib3ggb2YgdGhlIHBvcG92ZXIgZWxlbWVudFxuICogQHBhcmFtIHdpbmRvd0JvdW5kaW5nQm94IHtPYmplY3R9IGJvdW5kaW5nIGJveCBvZiB0aGUgd2luZG93XG4gKiBAcGFyYW0gY29udGFpbmVyQm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSBjb250YWluZXJcbiAqIEBwYXJhbSBbYXJyb3dDb25maWddIHt7YXJyb3dXaWR0aDogbnVtYmVyLCBhcnJvd0J1ZmZlcjogbnVtYmVyfX0gSWYgcHJlc2VudCwgZGVzY3JpYmVzIHRoZSBzaXplICZcbiAqICBjb25zdHJhaW50cyBmb3IgYW4gYXJyb3cgZWxlbWVudCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUgd2lsbCBpbmNsdWRlIGFuIGBhcnJvd2AgcGFyYW1cbiAqICB3aXRoIHBvc2l0aW9uIGRldGFpbHNcbiAqIEBwYXJhbSBbb2Zmc2V0PTBdIHtudW1iZXJ9IERpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBhbmNob3JcbiAqIEBwYXJhbSBbYnVmZmVyPTBdIHtudW1iZXJ9IE1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlcidzXG4gKiAgcGxhY2VtZW50IGFuZCB0aGUgY29udGFpbmVyIGVkZ2VcbiAqXG4gKiBAcmV0dXJucyB7R2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzUmVzdWx0fVxuICogIG9iamVjdCB3aXRoIHRvcC9sZWZ0IGNvb3JkaW5hdGVzLCB0aGUgcG9wb3ZlcidzIHJlbGF0aXZlIHBvc2l0aW9uIHRvIHRoZSBhbmNob3IsIGFuZCBob3cgd2VsbCB0aGVcbiAqICBwb3BvdmVyIGZpdHMgaW4gdGhlIGxvY2F0aW9uICgwLjAgLT4gMS4wKSBjb29yZGluYXRlcyBhbmQgdGhlIHBvcG92ZXIncyByZWxhdGl2ZSBwb3NpdGlvbiwgaWZcbiAqICB0aGVyZSBpcyBubyByb29tIGluIHRoaXMgcGxhY2VtZW50IHRoZW4gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzKF9yZWYyKSB7XG4gIHZhciBwb3NpdGlvbiA9IF9yZWYyLnBvc2l0aW9uLFxuICAgIGFsaWduID0gX3JlZjIuYWxpZ24sXG4gICAgYW5jaG9yQm91bmRpbmdCb3ggPSBfcmVmMi5hbmNob3JCb3VuZGluZ0JveCxcbiAgICBwb3BvdmVyQm91bmRpbmdCb3ggPSBfcmVmMi5wb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgd2luZG93Qm91bmRpbmdCb3ggPSBfcmVmMi53aW5kb3dCb3VuZGluZ0JveCxcbiAgICBjb250YWluZXJCb3VuZGluZ0JveCA9IF9yZWYyLmNvbnRhaW5lckJvdW5kaW5nQm94LFxuICAgIGFycm93Q29uZmlnID0gX3JlZjIuYXJyb3dDb25maWcsXG4gICAgX3JlZjIkb2Zmc2V0ID0gX3JlZjIub2Zmc2V0LFxuICAgIG9mZnNldCA9IF9yZWYyJG9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9yZWYyJG9mZnNldCxcbiAgICBfcmVmMiRidWZmZXIgPSBfcmVmMi5idWZmZXIsXG4gICAgYnVmZmVyID0gX3JlZjIkYnVmZmVyID09PSB2b2lkIDAgPyAwIDogX3JlZjIkYnVmZmVyO1xuICAvKipcbiAgICogVGhlIGdvYWwgaXMgdG8gZmluZCB0aGUgYmVzdCB3YXkgdG8gYWxpZ24gdGhlIHBvcG92ZXIgY29udGVudFxuICAgKiBvbiB0aGUgZ2l2ZW4gc2lkZSBvZiB0aGUgYW5jaG9yIGVsZW1lbnQuIFRoZSBwb3BvdmVyIHByZWZlcnNcbiAgICogY2VudGVyaW5nIG9uIHRoZSBhbmNob3IgYnV0IGNhbiBzaGlmdCBhbG9uZyB0aGUgY3Jvc3MtYXhpcyBhcyBuZWVkZWQuXG4gICAqXG4gICAqIFdlIHJldHVybiB0aGUgdG9wL2xlZnQgY29vcmRpbmF0ZXMgdGhhdCBiZXN0IGZpdCB0aGUgcG9wb3ZlciBpbnNpZGVcbiAgICogdGhlIGdpdmVuIGJvdW5kYXJpZXMsIGFuZCBhbHNvIHJldHVybiB0aGUgYGZpdGAgdmFsdWUgd2hpY2ggaW5kaWNhdGVzXG4gICAqIHdoYXQgcGVyY2VudGFnZSBvZiB0aGUgcG9wb3ZlciBpcyB3aXRoaW4gdGhlIGJvdW5kcy5cbiAgICpcbiAgICogZS5nLiBmaW5kaW5nIGEgbG9jYXRpb24gd2hlbiBwb3NpdGlvbj10b3BcbiAgICogdGhlIHByZWZlcnJlZCBsb2NhdGlvbiBpcyBkaXJlY3RseSBvdmVyIHRoZSBhbmNob3JcbiAgICpcbiAgICogICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgfCAgICAgICBwb3BvdmVyICAgICAgICB8XG4gICAqICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICAgICAgICAgdlxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICB8ICAgIGFuY2hvciAgICB8XG4gICAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKlxuICAgKiBidXQgaWYgYW5jaG9yIGRvZXNuJ3QgaGF2ZSBtdWNoIChvciBhbnkpIHJvb20gb24gaXRzIHJpZGUgc2lkZVxuICAgKiB0aGUgcG9wb3ZlciB3aWxsIHNoaWZ0IHRvIHRoZSBsZWZ0XG4gICAqXG4gICAqICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICB8ICAgICAgIHBvcG92ZXIgICAgICAgIHxcbiAgICogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgICAgICAgIHZcbiAgICogICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgfCAgICBhbmNob3IgICAgfFxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICpcbiAgICovXG5cbiAgdmFyIGNyb3NzQXhpc0ZpcnN0U2lkZSA9IHBvc2l0aW9uU3Vic3RpdHV0ZXNbcG9zaXRpb25dOyAvLyBcInRvcFwiIC0+IFwibGVmdFwiXG4gIHZhciBjcm9zc0F4aXNTZWNvbmRTaWRlID0gcG9zaXRpb25Db21wbGVtZW50c1tjcm9zc0F4aXNGaXJzdFNpZGVdOyAvLyBcImxlZnRcIiAtPiBcInJpZ2h0XCJcbiAgdmFyIGNyb3NzQXhpc0RpbWVuc2lvbiA9IHJlbGF0ZWREaW1lbnNpb25bY3Jvc3NBeGlzRmlyc3RTaWRlXTsgLy8gXCJsZWZ0XCIgLT4gXCJ3aWR0aFwiXG5cbiAgdmFyIF9nZXRCdWZmZXJWYWx1ZXMgPSBnZXRCdWZmZXJWYWx1ZXMoYnVmZmVyKSxcbiAgICBfZ2V0QnVmZmVyVmFsdWVzMiA9IF9zbGljZWRUb0FycmF5KF9nZXRCdWZmZXJWYWx1ZXMsIDQpLFxuICAgIHRvcEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzBdLFxuICAgIHJpZ2h0QnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczJbMV0sXG4gICAgYm90dG9tQnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczJbMl0sXG4gICAgbGVmdEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzNdO1xuICB2YXIgX2dldENyb3NzQXhpc1Bvc2l0aW9uID0gZ2V0Q3Jvc3NBeGlzUG9zaXRpb24oe1xuICAgICAgY3Jvc3NBeGlzRmlyc3RTaWRlOiBjcm9zc0F4aXNGaXJzdFNpZGUsXG4gICAgICBjcm9zc0F4aXNTZWNvbmRTaWRlOiBjcm9zc0F4aXNTZWNvbmRTaWRlLFxuICAgICAgY3Jvc3NBeGlzRGltZW5zaW9uOiBjcm9zc0F4aXNEaW1lbnNpb24sXG4gICAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgICBhbGlnbjogYWxpZ24sXG4gICAgICBidWZmZXI6IGJ1ZmZlcixcbiAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgd2luZG93Qm91bmRpbmdCb3g6IHdpbmRvd0JvdW5kaW5nQm94LFxuICAgICAgY29udGFpbmVyQm91bmRpbmdCb3g6IGNvbnRhaW5lckJvdW5kaW5nQm94LFxuICAgICAgcG9wb3ZlckJvdW5kaW5nQm94OiBwb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgICBhbmNob3JCb3VuZGluZ0JveDogYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgICBhcnJvd0NvbmZpZzogYXJyb3dDb25maWdcbiAgICB9KSxcbiAgICBjcm9zc0F4aXNQb3NpdGlvbiA9IF9nZXRDcm9zc0F4aXNQb3NpdGlvbi5jcm9zc0F4aXNQb3NpdGlvbixcbiAgICBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uID0gX2dldENyb3NzQXhpc1Bvc2l0aW9uLmNyb3NzQXhpc0Fycm93UG9zaXRpb247XG4gIHZhciBwcmltYXJ5QXhpc0RpbWVuc2lvbiA9IHJlbGF0ZWREaW1lbnNpb25bcG9zaXRpb25dOyAvLyBcInRvcFwiIC0+IFwiaGVpZ2h0XCJcbiAgdmFyIHByaW1hcnlBeGlzUG9zaXRpb25OYW1lID0gZGltZW5zaW9uUG9zaXRpb25BdHRyaWJ1dGVbcHJpbWFyeUF4aXNEaW1lbnNpb25dOyAvLyBcImhlaWdodFwiIC0+IFwidG9wXCJcblxuICB2YXIgX2dldFByaW1hcnlBeGlzUG9zaXRpID0gZ2V0UHJpbWFyeUF4aXNQb3NpdGlvbih7XG4gICAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveDogcG9wb3ZlckJvdW5kaW5nQm94LFxuICAgICAgYW5jaG9yQm91bmRpbmdCb3g6IGFuY2hvckJvdW5kaW5nQm94LFxuICAgICAgYXJyb3dDb25maWc6IGFycm93Q29uZmlnXG4gICAgfSksXG4gICAgcHJpbWFyeUF4aXNQb3NpdGlvbiA9IF9nZXRQcmltYXJ5QXhpc1Bvc2l0aS5wcmltYXJ5QXhpc1Bvc2l0aW9uLFxuICAgIHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbiA9IF9nZXRQcmltYXJ5QXhpc1Bvc2l0aS5wcmltYXJ5QXhpc0Fycm93UG9zaXRpb247XG4gIHZhciBwb3BvdmVyUGxhY2VtZW50ID0gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgY3Jvc3NBeGlzRmlyc3RTaWRlLCBjcm9zc0F4aXNQb3NpdGlvbiksIHByaW1hcnlBeGlzUG9zaXRpb25OYW1lLCBwcmltYXJ5QXhpc1Bvc2l0aW9uKTtcblxuICAvLyBjYWxjdWxhdGUgdGhlIGZpdCBvZiB0aGUgcG9wb3ZlciBpbiB0aGlzIGxvY2F0aW9uXG4gIC8vIGZpdCBpcyBpbiByYW5nZSAwLjAgLT4gMS4wIGFuZCBpcyB0aGUgcGVyY2VudGFnZSBvZiB0aGUgcG9wb3ZlciB3aGljaCBpcyB2aXNpYmxlIGluIHRoaXMgbG9jYXRpb25cbiAgdmFyIGNvbWJpbmVkQm91bmRpbmdCb3ggPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKHdpbmRvd0JvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCk7XG5cbiAgLy8gc2hyaW5rIHRoZSB2aXNpYmxlIGJvdW5kaW5nIGJveCBieSBgYnVmZmVyYFxuICAvLyB0byBjb21wdXRlIGEgZml0IHZhbHVlXG4gIGNvbWJpbmVkQm91bmRpbmdCb3gudG9wICs9IHRvcEJ1ZmZlcjtcbiAgY29tYmluZWRCb3VuZGluZ0JveC5yaWdodCAtPSByaWdodEJ1ZmZlcjtcbiAgY29tYmluZWRCb3VuZGluZ0JveC5ib3R0b20gLT0gYm90dG9tQnVmZmVyO1xuICBjb21iaW5lZEJvdW5kaW5nQm94LmxlZnQgKz0gbGVmdEJ1ZmZlcjtcbiAgdmFyIGZpdCA9IGdldFZpc2libGVGaXQoe1xuICAgIHRvcDogcG9wb3ZlclBsYWNlbWVudC50b3AsXG4gICAgcmlnaHQ6IHBvcG92ZXJQbGFjZW1lbnQubGVmdCArIHBvcG92ZXJCb3VuZGluZ0JveC53aWR0aCxcbiAgICBib3R0b206IHBvcG92ZXJQbGFjZW1lbnQudG9wICsgcG9wb3ZlckJvdW5kaW5nQm94LmhlaWdodCxcbiAgICBsZWZ0OiBwb3BvdmVyUGxhY2VtZW50LmxlZnQsXG4gICAgd2lkdGg6IHBvcG92ZXJCb3VuZGluZ0JveC53aWR0aCxcbiAgICBoZWlnaHQ6IHBvcG92ZXJCb3VuZGluZ0JveC5oZWlnaHRcbiAgfSwgY29tYmluZWRCb3VuZGluZ0JveCk7XG4gIHZhciBhcnJvdyA9IGFycm93Q29uZmlnID8gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgY3Jvc3NBeGlzRmlyc3RTaWRlLCBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uIC0gcG9wb3ZlclBsYWNlbWVudFtjcm9zc0F4aXNGaXJzdFNpZGVdKSwgcHJpbWFyeUF4aXNQb3NpdGlvbk5hbWUsIHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbikgOiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgZml0OiBmaXQsXG4gICAgdG9wOiBwb3BvdmVyUGxhY2VtZW50LnRvcCxcbiAgICBsZWZ0OiBwb3BvdmVyUGxhY2VtZW50LmxlZnQsXG4gICAgYXJyb3c6IGFycm93ID8ge1xuICAgICAgbGVmdDogYXJyb3cubGVmdCxcbiAgICAgIHRvcDogYXJyb3cudG9wXG4gICAgfSA6IHVuZGVmaW5lZFxuICB9O1xufVxuZnVuY3Rpb24gZ2V0Q3Jvc3NBeGlzUG9zaXRpb24oX3JlZjQpIHtcbiAgdmFyIGNyb3NzQXhpc0ZpcnN0U2lkZSA9IF9yZWY0LmNyb3NzQXhpc0ZpcnN0U2lkZSxcbiAgICBjcm9zc0F4aXNTZWNvbmRTaWRlID0gX3JlZjQuY3Jvc3NBeGlzU2Vjb25kU2lkZSxcbiAgICBjcm9zc0F4aXNEaW1lbnNpb24gPSBfcmVmNC5jcm9zc0F4aXNEaW1lbnNpb24sXG4gICAgcG9zaXRpb24gPSBfcmVmNC5wb3NpdGlvbixcbiAgICBhbGlnbiA9IF9yZWY0LmFsaWduLFxuICAgIGJ1ZmZlciA9IF9yZWY0LmJ1ZmZlcixcbiAgICBvZmZzZXQgPSBfcmVmNC5vZmZzZXQsXG4gICAgd2luZG93Qm91bmRpbmdCb3ggPSBfcmVmNC53aW5kb3dCb3VuZGluZ0JveCxcbiAgICBjb250YWluZXJCb3VuZGluZ0JveCA9IF9yZWY0LmNvbnRhaW5lckJvdW5kaW5nQm94LFxuICAgIHBvcG92ZXJCb3VuZGluZ0JveCA9IF9yZWY0LnBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICBhbmNob3JCb3VuZGluZ0JveCA9IF9yZWY0LmFuY2hvckJvdW5kaW5nQm94LFxuICAgIGFycm93Q29uZmlnID0gX3JlZjQuYXJyb3dDb25maWc7XG4gIC8vIGhvdyBtdWNoIG9mIHRoZSBwb3BvdmVyIG92ZXJmbG93cyBwYXN0IGVpdGhlciBzaWRlIG9mIHRoZSBhbmNob3IgaWYgaXRzIGNlbnRlcmVkXG4gIHZhciBwb3BvdmVyU2l6ZU9uQ3Jvc3NBeGlzID0gcG9wb3ZlckJvdW5kaW5nQm94W2Nyb3NzQXhpc0RpbWVuc2lvbl07XG4gIHZhciBhbmNob3JTaXplT25Dcm9zc0F4aXMgPSBhbmNob3JCb3VuZGluZ0JveFtjcm9zc0F4aXNEaW1lbnNpb25dO1xuICB2YXIgYW5jaG9ySGFsZlNpemUgPSBhbmNob3JTaXplT25Dcm9zc0F4aXMgLyAyO1xuXG4gIC8vIHRoZSBwb3BvdmVyJ3Mgb3JpZ2luYWwgcG9zaXRpb24gb24gdGhlIGNyb3NzLWF4aXMgaXMgZGV0ZXJtaW5lZCBieTpcbiAgdmFyIGNyb3NzQXhpc1Bvc2l0aW9uT3JpZ2luYWwgPSBhbmNob3JCb3VuZGluZ0JveFtjcm9zc0F4aXNGaXJzdFNpZGVdICtcbiAgLy8gd2hlcmUgdGhlIGFuY2hvciBpcyBsb2NhdGVkXG4gIGFuY2hvckhhbGZTaXplIC1cbiAgLy8gcGx1cyBoYWxmIGFuY2hvciBkaW1lbnNpb25cbiAgcG9wb3ZlclNpemVPbkNyb3NzQXhpcyAvIDI7IC8vIGxlc3MgaGFsZiB0aGUgcG9wb3ZlciBkaW1lbnNpb25cblxuICAvLyBUbyBmaXQgdGhlIGNvbnRlbnQgd2l0aGluIGJvdGggdGhlIHdpbmRvdyBhbmQgY29udGFpbmVyLFxuICAvLyBjb21wdXRlIHRoZSBzbWFsbGVyIG9mIHRoZSB0d28gc3BhY2VzIGFsb25nIGVhY2ggZWRnZVxuICB2YXIgY29tYmluZWRCb3VuZGluZ0JveCA9IGludGVyc2VjdEJvdW5kaW5nQm94ZXMod2luZG93Qm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94KTtcbiAgdmFyIGF2YWlsYWJsZVNwYWNlID0gZ2V0QXZhaWxhYmxlU3BhY2UoYW5jaG9yQm91bmRpbmdCb3gsIGNvbWJpbmVkQm91bmRpbmdCb3gsIGJ1ZmZlciwgb2Zmc2V0LCBwb3NpdGlvbik7XG4gIHZhciBtaW5pbXVtU3BhY2UgPSBhcnJvd0NvbmZpZyA/IGFycm93Q29uZmlnLmFycm93QnVmZmVyIDogMDtcbiAgdmFyIGNvbnRlbnRPdmVyZmxvd1NpemUgPSAocG9wb3ZlclNpemVPbkNyb3NzQXhpcyAtIGFuY2hvclNpemVPbkNyb3NzQXhpcykgLyAyO1xuICB2YXIgYWxpZ25BbW91bnQgPSAwO1xuICB2YXIgYWxpZ25EaXJlY3Rpb24gPSAxO1xuICB2YXIgYW1vdW50T2ZTaGlmdE5lZWRlZCA9IDA7XG4gIHZhciBzaGlmdERpcmVjdGlvbiA9IDE7XG4gIGlmIChhbGlnbiAhPSBudWxsKSB7XG4gICAgLy8gbm8gYWxpZ25tZW50LCBmaW5kIGhvdyBtdWNoIHRoZSBjb250YWluZXIgYm91bmRhcnkgcmVxdWlyZXMgdGhlIGNvbnRlbnQgdG8gc2hpZnRcbiAgICBhbGlnbkRpcmVjdGlvbiA9IGFsaWduID09PSAndG9wJyB8fCBhbGlnbiA9PT0gJ2xlZnQnID8gMSA6IC0xO1xuICAgIGFsaWduQW1vdW50ID0gY29udGVudE92ZXJmbG93U2l6ZTtcbiAgICB2YXIgYWxpZ25lZE92ZXJmbG93QW1vdW50ID0gY29udGVudE92ZXJmbG93U2l6ZSArIGFsaWduQW1vdW50O1xuICAgIHZhciBuZWVkc1NoaWZ0ID0gYWxpZ25lZE92ZXJmbG93QW1vdW50ID4gYXZhaWxhYmxlU3BhY2VbcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl1dO1xuICAgIGFtb3VudE9mU2hpZnROZWVkZWQgPSBuZWVkc1NoaWZ0ID8gYWxpZ25lZE92ZXJmbG93QW1vdW50IC0gYXZhaWxhYmxlU3BhY2VbcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl1dIDogMDtcbiAgICBzaGlmdERpcmVjdGlvbiA9IC0xICogYWxpZ25EaXJlY3Rpb247XG4gIH0gZWxzZSB7XG4gICAgLy8gc2hpZnRpbmcgdGhlIHBvcG92ZXIgdG8gb25lIHNpZGUgbWF5IHlpZWxkIGEgYmV0dGVyIGZpdFxuICAgIHZhciBzcGFjZUF2YWlsYWJsZU9uRmlyc3RTaWRlID0gYXZhaWxhYmxlU3BhY2VbY3Jvc3NBeGlzRmlyc3RTaWRlXTtcbiAgICB2YXIgc3BhY2VBdmFpbGFibGVPblNlY29uZFNpZGUgPSBhdmFpbGFibGVTcGFjZVtjcm9zc0F4aXNTZWNvbmRTaWRlXTtcbiAgICB2YXIgaXNTaGlmdFRvd2FyZEZpcnN0U2lkZSA9IHNwYWNlQXZhaWxhYmxlT25GaXJzdFNpZGUgPiBzcGFjZUF2YWlsYWJsZU9uU2Vjb25kU2lkZTtcbiAgICBzaGlmdERpcmVjdGlvbiA9IGlzU2hpZnRUb3dhcmRGaXJzdFNpZGUgPyAtMSA6IDE7XG5cbiAgICAvLyBkZXRlcm1pbmUgd2hpY2ggZGlyZWN0aW9uIGhhcyBtb3JlIHJvb20gYW5kIHRoZSBwb3BvdmVyIHNob3VsZCBzaGlmdCB0b1xuICAgIHZhciBsZWFzdEF2YWlsYWJsZVNwYWNlID0gTWF0aC5taW4oc3BhY2VBdmFpbGFibGVPbkZpcnN0U2lkZSwgc3BhY2VBdmFpbGFibGVPblNlY29uZFNpZGUpO1xuICAgIHZhciBfbmVlZHNTaGlmdCA9IGNvbnRlbnRPdmVyZmxvd1NpemUgPiBsZWFzdEF2YWlsYWJsZVNwYWNlO1xuICAgIGFtb3VudE9mU2hpZnROZWVkZWQgPSBfbmVlZHNTaGlmdCA/IGNvbnRlbnRPdmVyZmxvd1NpemUgLSBsZWFzdEF2YWlsYWJsZVNwYWNlIDogMDtcbiAgfVxuXG4gIC8vIHNoaWZ0IG92ZXIgdGhlIHBvcG92ZXIgaWYgbmVjZXNzYXJ5XG4gIHZhciBzaGlmdEFtb3VudCA9IGFtb3VudE9mU2hpZnROZWVkZWQgKiBzaGlmdERpcmVjdGlvbjtcbiAgdmFyIGNyb3NzQXhpc1Bvc2l0aW9uID0gY3Jvc3NBeGlzUG9zaXRpb25PcmlnaW5hbCArIHNoaWZ0QW1vdW50ICsgYWxpZ25BbW91bnQgKiBhbGlnbkRpcmVjdGlvbjtcblxuICAvLyBpZiBhbiBgYXJyb3dDb25maWdgIGlzIHNwZWNpZmllZCwgZmluZCB3aGVyZSB0byBwb3NpdGlvbiB0aGUgYXJyb3dcbiAgdmFyIGNyb3NzQXhpc0Fycm93UG9zaXRpb247XG4gIGlmIChhcnJvd0NvbmZpZykge1xuICAgIHZhciBhcnJvd1dpZHRoID0gYXJyb3dDb25maWcuYXJyb3dXaWR0aDtcbiAgICBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRmlyc3RTaWRlXSArIGFuY2hvckhhbGZTaXplIC0gYXJyb3dXaWR0aCAvIDI7XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggYnVmZmVyIGFyb3VuZCB0aGUgYXJyb3dcbiAgICAvLyBieSBjYWxjdWxhdGluZyBob3cgaG93IG11Y2ggdGhlIGFycm93IHdvdWxkIG5lZWQgdG8gbW92ZVxuICAgIC8vIGJ1dCBpbnN0ZWFkIG9mIG1vdmluZyB0aGUgYXJyb3csIHNoaWZ0IHRoZSBwb3BvdmVyIGNvbnRlbnRcbiAgICBpZiAoY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiA8IGNyb3NzQXhpc1Bvc2l0aW9uICsgbWluaW11bVNwYWNlKSB7XG4gICAgICAvLyBhcnJvdyBpcyB0b28gY2xvc2UgdG8gdGhlIG1pbmltdW0gc2lkZVxuICAgICAgdmFyIGRpZmZlcmVuY2UgPSBjcm9zc0F4aXNQb3NpdGlvbiArIG1pbmltdW1TcGFjZSAtIGNyb3NzQXhpc0Fycm93UG9zaXRpb247XG4gICAgICBjcm9zc0F4aXNQb3NpdGlvbiAtPSBkaWZmZXJlbmNlO1xuICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiArIG1pbmltdW1TcGFjZSArIGFycm93V2lkdGggPiBjcm9zc0F4aXNQb3NpdGlvbiArIHBvcG92ZXJTaXplT25Dcm9zc0F4aXMpIHtcbiAgICAgIC8vIGFycm93IGlzIHRvbyBjbG9zZSB0byB0aGUgbWF4aW11bSBzaWRlXG4gICAgICB2YXIgZWRnZSA9IGNyb3NzQXhpc1Bvc2l0aW9uICsgcG9wb3ZlclNpemVPbkNyb3NzQXhpcztcbiAgICAgIHZhciBfZGlmZmVyZW5jZSA9IGNyb3NzQXhpc0Fycm93UG9zaXRpb24gLSAoZWRnZSAtIG1pbmltdW1TcGFjZSAtIGFycm93V2lkdGgpO1xuICAgICAgY3Jvc3NBeGlzUG9zaXRpb24gKz0gX2RpZmZlcmVuY2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY3Jvc3NBeGlzUG9zaXRpb246IGNyb3NzQXhpc1Bvc2l0aW9uLFxuICAgIGNyb3NzQXhpc0Fycm93UG9zaXRpb246IGNyb3NzQXhpc0Fycm93UG9zaXRpb25cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFByaW1hcnlBeGlzUG9zaXRpb24oX3JlZjUpIHtcbiAgdmFyIHBvc2l0aW9uID0gX3JlZjUucG9zaXRpb24sXG4gICAgb2Zmc2V0ID0gX3JlZjUub2Zmc2V0LFxuICAgIHBvcG92ZXJCb3VuZGluZ0JveCA9IF9yZWY1LnBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICBhbmNob3JCb3VuZGluZ0JveCA9IF9yZWY1LmFuY2hvckJvdW5kaW5nQm94LFxuICAgIGFycm93Q29uZmlnID0gX3JlZjUuYXJyb3dDb25maWc7XG4gIC8vIGlmIHBvc2l0aW9uaW5nIHRvIHRoZSB0b3Agb3IgbGVmdCwgdGhlIHRhcmdldCBwb3NpdGlvbiBkZWNyZWFzZXNcbiAgLy8gZnJvbSB0aGUgYW5jaG9yJ3MgdG9wIG9yIGxlZnQsIG90aGVyd2lzZSB0aGUgcG9zaXRpb24gYWRkcyB0byB0aGUgYW5jaG9yJ3NcbiAgdmFyIGlzT2Zmc2V0RGVjcmVhc2luZyA9IHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2xlZnQnO1xuICB2YXIgcHJpbWFyeUF4aXNEaW1lbnNpb24gPSByZWxhdGVkRGltZW5zaW9uW3Bvc2l0aW9uXTsgLy8gXCJ0b3BcIiAtPiBcImhlaWdodFwiXG4gIHZhciBwb3BvdmVyU2l6ZU9uUHJpbWFyeUF4aXMgPSBwb3BvdmVyQm91bmRpbmdCb3hbcHJpbWFyeUF4aXNEaW1lbnNpb25dO1xuXG4gIC8vIHN0YXJ0IGF0IHRoZSB0b3Agb3IgbGVmdCBlZGdlIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICB2YXIgcHJpbWFyeUF4aXNQb3NpdGlvbk5hbWUgPSBkaW1lbnNpb25Qb3NpdGlvbkF0dHJpYnV0ZVtwcmltYXJ5QXhpc0RpbWVuc2lvbl07IC8vIFwiaGVpZ2h0XCIgLT4gXCJ0b3BcIlxuICB2YXIgYW5jaG9yRWRnZU9yaWdpbiA9IGFuY2hvckJvdW5kaW5nQm94W3ByaW1hcnlBeGlzUG9zaXRpb25OYW1lXTtcblxuICAvLyBmaW5kIHRoZSBwb3BvdmVyIHBvc2l0aW9uIG9uIHRoZSBwcmltYXJ5IGF4aXNcbiAgdmFyIGFuY2hvclNpemVPblByaW1hcnlBeGlzID0gYW5jaG9yQm91bmRpbmdCb3hbcHJpbWFyeUF4aXNEaW1lbnNpb25dO1xuICB2YXIgcHJpbWFyeUF4aXNPZmZzZXQgPSBpc09mZnNldERlY3JlYXNpbmcgPyBwb3BvdmVyU2l6ZU9uUHJpbWFyeUF4aXMgOiBhbmNob3JTaXplT25QcmltYXJ5QXhpcztcbiAgdmFyIGNvbnRlbnRPZmZzZXQgPSAob2Zmc2V0ICsgcHJpbWFyeUF4aXNPZmZzZXQpICogKGlzT2Zmc2V0RGVjcmVhc2luZyA/IC0xIDogMSk7XG4gIHZhciBwcmltYXJ5QXhpc1Bvc2l0aW9uID0gYW5jaG9yRWRnZU9yaWdpbiArIGNvbnRlbnRPZmZzZXQ7XG4gIHZhciBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb247XG4gIGlmIChhcnJvd0NvbmZpZykge1xuICAgIHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbiA9IGlzT2Zmc2V0RGVjcmVhc2luZyA/IHBvcG92ZXJTaXplT25QcmltYXJ5QXhpcyA6IDA7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcmltYXJ5QXhpc1Bvc2l0aW9uOiBwcmltYXJ5QXhpc1Bvc2l0aW9uLFxuICAgIHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbjogcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uXG4gIH07XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGNsaWVudCBwaXhlbCBjb29yZGluYXRlIG9mIGVhY2ggZWRnZSBmb3IgdGhlIGVsZW1lbnQncyBib3VuZGluZyBib3gsXG4gKiBhbmQgdGhlIGJvdW5kaW5nIGJveCdzIHdpZHRoICYgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge3t0b3A6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYm90dG9tOiBudW1iZXIsIGxlZnQ6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHdpZHRoOiBudW1iZXJ9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEJvdW5kaW5nQm94KGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4ge1xuICAgIHRvcDogcmVjdC50b3AsXG4gICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICB3aWR0aDogcmVjdC53aWR0aFxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGF2YWlsYWJsZSBjb250ZW50IHNwYWNlIGJldHdlZW4gYW5jaG9yIGFuZCBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYW5jaG9yQm91bmRpbmdCb3ggQ2xpZW50IGJvdW5kaW5nIGJveCBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250YWluZXJCb3VuZGluZ0JveCBDbGllbnQgYm91bmRpbmcgYm94IG9mIHRoZSBjb250YWluZXIgZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGJ1ZmZlciBNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBib3VuZGluZyBjb250YWluZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgRGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlciBhbmQgdGhlIGFuY2hvclxuICogQHBhcmFtIHtzdHJpbmd9IG9mZnNldFNpZGUgU2lkZSB0aGUgb2Zmc2V0IG5lZWRzIHRvIGJlIGFwcGxpZWQgdG8sIG9uZVxuICogIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHJldHVybnMge3t0b3A6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYm90dG9tOiBudW1iZXIsIGxlZnQ6IG51bWJlcn19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVTcGFjZShhbmNob3JCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gsIGJ1ZmZlciwgb2Zmc2V0LCBvZmZzZXRTaWRlKSB7XG4gIHZhciBfZ2V0QnVmZmVyVmFsdWVzMyA9IGdldEJ1ZmZlclZhbHVlcyhidWZmZXIpLFxuICAgIF9nZXRCdWZmZXJWYWx1ZXM0ID0gX3NsaWNlZFRvQXJyYXkoX2dldEJ1ZmZlclZhbHVlczMsIDQpLFxuICAgIHRvcEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXM0WzBdLFxuICAgIHJpZ2h0QnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczRbMV0sXG4gICAgYm90dG9tQnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczRbMl0sXG4gICAgbGVmdEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXM0WzNdO1xuICByZXR1cm4ge1xuICAgIHRvcDogYW5jaG9yQm91bmRpbmdCb3gudG9wIC0gY29udGFpbmVyQm91bmRpbmdCb3gudG9wIC0gdG9wQnVmZmVyIC0gKG9mZnNldFNpZGUgPT09ICd0b3AnID8gb2Zmc2V0IDogMCksXG4gICAgcmlnaHQ6IGNvbnRhaW5lckJvdW5kaW5nQm94LnJpZ2h0IC0gYW5jaG9yQm91bmRpbmdCb3gucmlnaHQgLSByaWdodEJ1ZmZlciAtIChvZmZzZXRTaWRlID09PSAncmlnaHQnID8gb2Zmc2V0IDogMCksXG4gICAgYm90dG9tOiBjb250YWluZXJCb3VuZGluZ0JveC5ib3R0b20gLSBhbmNob3JCb3VuZGluZ0JveC5ib3R0b20gLSBib3R0b21CdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ2JvdHRvbScgPyBvZmZzZXQgOiAwKSxcbiAgICBsZWZ0OiBhbmNob3JCb3VuZGluZ0JveC5sZWZ0IC0gY29udGFpbmVyQm91bmRpbmdCb3gubGVmdCAtIGxlZnRCdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ2xlZnQnID8gb2Zmc2V0IDogMClcbiAgfTtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgZml0IChvdmVybGFwKSBvZiB0aGUgY29udGVudCB3aXRoaW4gdGhlIGNvbnRhaW5lciwgZml0IGlzIGluIHJhbmdlIDAuMCA9PiAxLjBcbiAqIEBwYXJhbSBjb250ZW50Qm91bmRpbmdCb3ggYm91bmRpbmcgYm94IG9mIGNvbnRlbnQgdG8gY2FsY3VsYXRlIGZpdCBmb3JcbiAqIEBwYXJhbSBjb250YWluZXJCb3VuZGluZ0JveCBib3VuZGluZyBib3ggb2YgY29udGFpbmVyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzaWJsZUZpdChjb250ZW50Qm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94KSB7XG4gIHZhciBpbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKGNvbnRlbnRCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gpO1xuICBpZiAoaW50ZXJzZWN0aW9uLmxlZnQgPiBpbnRlcnNlY3Rpb24ucmlnaHQgfHwgaW50ZXJzZWN0aW9uLnRvcCA+IGludGVyc2VjdGlvbi50b3ApIHtcbiAgICAvLyB0aGVyZSBpcyBubyBpbnRlcnNlY3Rpb24sIHRoZSBib3hlcyBhcmUgY29tcGxldGVseSBzZXBhcmF0ZWQgb24gYXQgbGVhc3Qgb25lIGF4aXNcbiAgICByZXR1cm4gMDtcbiAgfVxuICB2YXIgaW50ZXJzZWN0aW9uQXJlYSA9IChpbnRlcnNlY3Rpb24ucmlnaHQgLSBpbnRlcnNlY3Rpb24ubGVmdCkgKiAoaW50ZXJzZWN0aW9uLmJvdHRvbSAtIGludGVyc2VjdGlvbi50b3ApO1xuICB2YXIgY29udGVudEFyZWEgPSAoY29udGVudEJvdW5kaW5nQm94LnJpZ2h0IC0gY29udGVudEJvdW5kaW5nQm94LmxlZnQpICogKGNvbnRlbnRCb3VuZGluZ0JveC5ib3R0b20gLSBjb250ZW50Qm91bmRpbmdCb3gudG9wKTtcbiAgcmV0dXJuIGludGVyc2VjdGlvbkFyZWEgLyBjb250ZW50QXJlYTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBpbnRlcnNlY3Rpb24gc3BhY2UgYmV0d2VlbiB0d28gYm91bmRpbmcgYm94ZXNcbiAqXG4gKiBAcGFyYW0gZmlyc3RCb3hcbiAqIEBwYXJhbSBzZWNvbmRCb3hcbiAqIEByZXR1cm5zIHtFdWlDbGllbnRSZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJzZWN0Qm91bmRpbmdCb3hlcyhmaXJzdEJveCwgc2Vjb25kQm94KSB7XG4gIHZhciB0b3AgPSBNYXRoLm1heChmaXJzdEJveC50b3AsIHNlY29uZEJveC50b3ApO1xuICB2YXIgcmlnaHQgPSBNYXRoLm1pbihmaXJzdEJveC5yaWdodCwgc2Vjb25kQm94LnJpZ2h0KTtcbiAgdmFyIGJvdHRvbSA9IE1hdGgubWluKGZpcnN0Qm94LmJvdHRvbSwgc2Vjb25kQm94LmJvdHRvbSk7XG4gIHZhciBsZWZ0ID0gTWF0aC5tYXgoZmlyc3RCb3gubGVmdCwgc2Vjb25kQm94LmxlZnQpO1xuICB2YXIgaGVpZ2h0ID0gTWF0aC5tYXgoYm90dG9tIC0gdG9wLCAwKTtcbiAgdmFyIHdpZHRoID0gTWF0aC5tYXgocmlnaHQgLSBsZWZ0LCAwKTtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IHRvcCxcbiAgICByaWdodDogcmlnaHQsXG4gICAgYm90dG9tOiBib3R0b20sXG4gICAgbGVmdDogbGVmdCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB3aWR0aDogd2lkdGhcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0b3AtbW9zdCBkZWZpbmVkIHotaW5kZXggaW4gdGhlIGVsZW1lbnQncyBhbmNlc3RvciBoaWVyYXJjaHlcbiAqIHJlbGF0aXZlIHRvIHRoZSBgdGFyZ2V0YCBlbGVtZW50OyBpZiBubyB6LWluZGV4IGlzIGRlZmluZWQsIHJldHVybnMgMFxuICogQHBhcmFtIGVsZW1lbnQge0hUTUxFbGVtZW50fVxuICogQHBhcmFtIGNvdXNpbiB7SFRNTEVsZW1lbnR9XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudFpJbmRleChlbGVtZW50LCBjb3VzaW4pIHtcbiAgLyoqXG4gICAqIGZpbmRpbmcgdGhlIHotaW5kZXggb2YgYGVsZW1lbnRgIGlzIG5vdCB0aGUgZnVsbCBzdG9yeVxuICAgKiBpdHMgdGhlIENTUyBzdGFja2luZyBjb250ZXh0IHRoYXQgaXMgaW1wb3J0YW50XG4gICAqIHRha2UgdGhpcyBET00gZm9yIGV4YW1wbGU6XG4gICAqIGJvZHlcbiAgICogICBzZWN0aW9uW3otaW5kZXg6IDEwMDBdXG4gICAqICAgICBwW3otaW5kZXg6IDUwMF1cbiAgICogICAgICAgYnV0dG9uXG4gICAqICAgZGl2XG4gICAqXG4gICAqIHdoYXQgei1pbmRleCBkb2VzIHRoZSBgZGl2YCBuZWVkIHRvIGRpc3BsYXkgbmV4dCB0byBgYnV0dG9uYD9cbiAgICogdGhlIGBkaXZgIGFuZCBgc2VjdGlvbmAgYXJlIHdoZXJlIHRoZSBzdGFja2luZyBjb250ZXh0IHNwbGl0c1xuICAgKiBzbyBgZGl2YCBuZWVkcyB0byBjb3B5IGBzZWN0aW9uYCdzIHotaW5kZXggaW4gb3JkZXIgdG9cbiAgICogYXBwZWFyIG5leHQgdG8gLyBvdmVyIGBidXR0b25gXG4gICAqXG4gICAqIGNhbGN1bGF0ZSB0aGlzIGJ5IHN0YXJ0aW5nIGF0IGBidXR0b25gIGFuZCBmaW5kaW5nIGl0cyBvZmZzZXRQYXJlbnRzXG4gICAqIHRoZW4gd2FsayB0aGUgcGFyZW50cyBmcm9tIHRvcCAtPiBkb3duIHVudGlsIHRoZSBzdGFja2luZyBjb250ZXh0XG4gICAqIHNwbGl0IGlzIGZvdW5kLCBvciBpZiB0aGVyZSBpcyBubyBzcGxpdCB0aGVuIGEgc3BlY2lmaWMgei1pbmRleCBpcyB1bmltcG9ydGFudFxuICAgKi9cblxuICAvLyBidWlsZCB0aGUgYXJyYXkgb2YgdGhlIGVsZW1lbnQgKyBpdHMgb2Zmc2V0IHBhcmVudHNcbiAgdmFyIG5vZGVzVG9JbnNwZWN0ID0gW107XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgbm9kZXNUb0luc3BlY3QucHVzaChlbGVtZW50KTtcblxuICAgIC8vIEFGQUlDVCB0aGlzIGlzIGEgdmFsaWQgY2FzdCAtIHRoZSBsaWJkZWZzIGFwcGVhciB3cm9uZ1xuICAgIGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcblxuICAgIC8vIHN0b3AgaWYgdGhlcmUgaXMgbm8gcGFyZW50XG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gc3RvcCBpZiB0aGUgcGFyZW50IGNvbnRhaW5zIHRoZSByZWxhdGVkIGVsZW1lbnRcbiAgICAvLyBhcyB0aGlzIGlzIHRoZSB6LWluZGV4IGFuY2VzdG9yXG4gICAgaWYgKGVsZW1lbnQuY29udGFpbnMoY291c2luKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8gcmV2ZXJzZSB0aGUgbm9kZXMgdG8gd2FsayBmcm9tIHRvcCAtPiBlbGVtZW50XG4gIG5vZGVzVG9JbnNwZWN0LnJldmVyc2UoKTtcbiAgZm9yICh2YXIgX2kgPSAwLCBfbm9kZXNUb0luc3BlY3QgPSBub2Rlc1RvSW5zcGVjdDsgX2kgPCBfbm9kZXNUb0luc3BlY3QubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBfbm9kZXNUb0luc3BlY3RbX2ldO1xuICAgIC8vIGdldCB0aGlzIG5vZGUncyB6LWluZGV4IGNzcyB2YWx1ZVxuICAgIHZhciB6SW5kZXggPSB3aW5kb3cuZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCd6LWluZGV4Jyk7XG5cbiAgICAvLyBpZiB0aGUgei1pbmRleCBpcyBub3QgYSBudW1iZXIgKGUuZy4gXCJhdXRvXCIpIHJldHVybiBudWxsLCBlbHNlIHRoZSB2YWx1ZVxuICAgIHZhciBwYXJzZWRaSW5kZXggPSBwYXJzZUludCh6SW5kZXgsIDEwKTtcbiAgICBpZiAoIWlzTmFOKHBhcnNlZFpJbmRleCkpIHtcbiAgICAgIHJldHVybiBwYXJzZWRaSW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufSIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIFNlY3VyZXMgb3V0Ym91bmQgbGlua3MuIEZvciBtb3JlIGluZm86XG4gKiBodHRwczovL3d3dy5qaXRiaXQuY29tL2FsZXhibG9nLzI1Ni10YXJnZXRibGFuay0tLXRoZS1tb3N0LXVuZGVyZXN0aW1hdGVkLXZ1bG5lcmFiaWxpdHktZXZlci9cbiAqL1xuXG5leHBvcnQgdmFyIGdldFNlY3VyZVJlbEZvclRhcmdldCA9IGZ1bmN0aW9uIGdldFNlY3VyZVJlbEZvclRhcmdldChfcmVmKSB7XG4gIHZhciBfcmVmJHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIHRhcmdldCA9IF9yZWYkdGFyZ2V0ID09PSB2b2lkIDAgPyAnJyA6IF9yZWYkdGFyZ2V0LFxuICAgIHJlbCA9IF9yZWYucmVsO1xuICB2YXIgcmVsUGFydHMgPSAhIXJlbCA/IHJlbC5zcGxpdCgnICcpLmZpbHRlcihmdW5jdGlvbiAocGFydCkge1xuICAgIHJldHVybiAhIXBhcnQubGVuZ3RoICYmIHBhcnQgIT09ICdub3JlZmVycmVyJztcbiAgfSkgOiBbXTtcbiAgcmVsUGFydHMucHVzaCgnbm9yZWZlcnJlcicpO1xuICBpZiAodGFyZ2V0LmluY2x1ZGVzKCdfYmxhbmsnKSAmJiByZWxQYXJ0cy5pbmRleE9mKCdub29wZW5lcicpID09PSAtMSkge1xuICAgIHJlbFBhcnRzLnB1c2goJ25vb3BlbmVyJyk7XG4gIH1cbiAgcmV0dXJuIHJlbFBhcnRzLnNvcnQoKS5qb2luKCcgJykudHJpbSgpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBU0MgPSAnYXNjJztcbnZhciBERVNDID0gJ2Rlc2MnO1xuZXhwb3J0IHZhciBTb3J0RGlyZWN0aW9uID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEFTQzogQVNDLFxuICBERVNDOiBERVNDLFxuICBpc0FzYzogZnVuY3Rpb24gaXNBc2MoZGlyZWN0aW9uKSB7XG4gICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gQVNDO1xuICB9LFxuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKGRpcmVjdGlvbikge1xuICAgIHJldHVybiB0aGlzLmlzQXNjKGRpcmVjdGlvbikgPyBERVNDIDogQVNDO1xuICB9XG59KTtcbmV4cG9ydCB2YXIgU29ydERpcmVjdGlvblR5cGUgPSBQcm9wVHlwZXMub25lT2YoW0FTQywgREVTQ10pOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgX2dldCBmcm9tICdsb2Rhc2gvZ2V0JztcbmltcG9ydCBfb21pdCBmcm9tICdsb2Rhc2gvb21pdCc7XG5cbi8vIHdyYXAgdGhlIGxvZGFzaCBmdW5jdGlvbnMgdG8gYXZvaWQgaGF2aW5nIGxvZGFzaCdzIFRTIHR5cGUgZGVmaW5pdGlvbiBmcm9tIGJlaW5nXG4vLyBleHBvcnRlZCwgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggdGhlIGxvZGFzaCBuYW1lc3BhY2UgaWYgb3RoZXIgdmVyc2lvbnMgYXJlIHVzZWRcblxuZXhwb3J0IHZhciBnZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgcmV0dXJuIF9nZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgb21pdCA9IGZ1bmN0aW9uIG9taXQob2JqZWN0LCBwYXRocykge1xuICByZXR1cm4gX29taXQob2JqZWN0LCBwYXRocyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi9zb3J0X2RpcmVjdGlvbic7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICcuLi9vYmplY3RzJztcbmV4cG9ydCB2YXIgQ29tcGFyYXRvcnMgPSBPYmplY3QuZnJlZXplKHtcbiAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogU29ydERpcmVjdGlvbi5BU0M7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICAgIC8vIEphdmFTY3JpcHQncyBjb21wYXJpc29uIG9mIG51bGwvdW5kZWZpbmVkIChhbmQgc29tZSBvdGhlcnMgbm90IGhhbmRsZWQgaGVyZSkgdmFsdWVzIGFsd2F5cyByZXR1cm5zIGBmYWxzZWBcbiAgICAgIC8vIChodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLyNzZWMtYWJzdHJhY3QtcmVsYXRpb25hbC1jb21wYXJpc29uKVxuICAgICAgLy8gcmVzdWx0aW5nIGluIGNhc2VzIHdoZXJlIHYxIDwgdjIgYW5kIHYxID4gdjIgYXJlIGJvdGggZmFsc2UuXG4gICAgICAvLyBUaGlzIGxlYWRzIHRvIHVucHJlZGljdGFibGUgc29ydGluZyByZXN1bHRzIGluIG11bHRpcGxlIEpTIGVuZ2luZSBzb3J0aW5nIGFsZ29yaXRobXNcbiAgICAgIC8vIHdoaWNoIGNhdXNlcyB1bnByZWRpY3RhYmxlIHVzZXIgZXhwZXJpZW5jZXMuXG4gICAgICAvLyBJbnN0ZWFkOlxuICAgICAgLy8gKiAxLiBwdXNoIHVuZGVmaW5lZC9udWxsIHZhbHVlcyB0byB0aGUgZW5kIG9mIHRoZSBzb3J0ZWQgbGlzdCwgX3JlZ2FyZGxlc3Mgb2Ygc29ydCBkaXJlY3Rpb25fXG4gICAgICAvLyAgICAobm9uLXNvcnRhYmxlIHZhbHVlcyBhbHdheXMgYXBwZWFyIGF0IHRoZSBlbmQsIGFuZCBzb3J0YWJsZSB2YWx1ZXMgYXJlIHNvcnRlZCBhdCB0aGUgdG9wKVxuICAgICAgLy8gKiAyLiByZXBvcnQgdW5kZWZpbmVkL251bGwgdmFsdWVzIGFzIGVxdWFsXG4gICAgICAvLyAqIDMuIHdoZW4gYm90aCB2YWx1ZXMgYXJlIGNvbXBhcmFibGUgdGhleSBhcmUgc29ydGVkIG5vcm1hbGx5XG5cbiAgICAgIHZhciB2MUlzQ29tcGFyYWJsZSA9IHYxICE9IG51bGw7XG4gICAgICB2YXIgdjJJc0NvbXBhcmFibGUgPSB2MiAhPSBudWxsO1xuXG4gICAgICAvLyAqIDEuXG4gICAgICBpZiAodjFJc0NvbXBhcmFibGUgJiYgIXYySXNDb21wYXJhYmxlKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIGlmICghdjFJc0NvbXBhcmFibGUgJiYgdjJJc0NvbXBhcmFibGUpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIC8vICogMi5cbiAgICAgIGlmICghdjFJc0NvbXBhcmFibGUgJiYgIXYySXNDb21wYXJhYmxlKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICAvLyAqIDMuXG4gICAgICBpZiAodjEgPT09IHYyKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHYxID4gdjIgPyAxIDogLTE7XG4gICAgICByZXR1cm4gU29ydERpcmVjdGlvbi5pc0FzYyhkaXJlY3Rpb24pID8gcmVzdWx0IDogLTEgKiByZXN1bHQ7XG4gICAgfTtcbiAgfSxcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZShjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yKHYyLCB2MSk7XG4gICAgfTtcbiAgfSxcbiAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHZhbHVlQ2FsbGJhY2ssIGNvbXBhcmF0b3IpIHtcbiAgICBpZiAoIWNvbXBhcmF0b3IpIHtcbiAgICAgIGNvbXBhcmF0b3IgPSB0aGlzLmRlZmF1bHQoU29ydERpcmVjdGlvbi5BU0MpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKG8xLCBvMikge1xuICAgICAgcmV0dXJuIGNvbXBhcmF0b3IodmFsdWVDYWxsYmFjayhvMSksIHZhbHVlQ2FsbGJhY2sobzIpKTtcbiAgICB9O1xuICB9LFxuICBwcm9wZXJ0eTogZnVuY3Rpb24gcHJvcGVydHkocHJvcCwgY29tcGFyYXRvcikge1xuICAgIHJldHVybiB0aGlzLnZhbHVlKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGdldCh2YWx1ZSwgcHJvcCk7XG4gICAgfSwgY29tcGFyYXRvcik7XG4gIH1cbn0pOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG52YXIgR1JPVVBfTlVNRVJJQyA9IC9eKFtcXGQuXSspKHN8bXMpLztcbmZ1bmN0aW9uIGdldE1pbGxpc2Vjb25kcyh2YWx1ZSwgdW5pdCkge1xuICAvLyBHaXZlbiB0aGUgcmVnZXggbWF0Y2ggYW5kIGNhcHR1cmUgZ3JvdXBzLCB3ZSBjYW4gYXNzdW1lIGB1bml0YCB0byBiZSBlaXRoZXIgJ3MnIG9yICdtcydcbiAgdmFyIG11bHRpcGxpZXIgPSB1bml0ID09PSAncycgPyAxMDAwIDogMTtcbiAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpICogbXVsdGlwbGllcjtcbn1cbi8vIEZpbmQgQ1NTIGB0cmFuc2l0aW9uLWR1cmF0aW9uYCBhbmQgYHRyYW5zaXRpb24tZGVsYXlgIGludGVydmFsc1xuLy8gYW5kIHJldHVybiB0aGUgdmFsdWUgb2YgZWFjaCBjb21wdXRlZCBwcm9wZXJ0eSBpbiAnbXMnXG5leHBvcnQgdmFyIGdldFRyYW5zaXRpb25UaW1pbmdzID0gZnVuY3Rpb24gZ2V0VHJhbnNpdGlvblRpbWluZ3MoZWxlbWVudCkge1xuICB2YXIgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICB2YXIgY29tcHV0ZWREdXJhdGlvbiA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgndHJhbnNpdGlvbi1kdXJhdGlvbicpO1xuICB2YXIgZHVyYXRpb25NYXRjaEFycmF5ID0gY29tcHV0ZWREdXJhdGlvbi5tYXRjaChHUk9VUF9OVU1FUklDKTtcbiAgdmFyIGR1cmF0aW9uTWF0Y2ggPSBkdXJhdGlvbk1hdGNoQXJyYXkgPyBnZXRNaWxsaXNlY29uZHMoZHVyYXRpb25NYXRjaEFycmF5WzFdLCBkdXJhdGlvbk1hdGNoQXJyYXlbMl0pIDogMDtcbiAgdmFyIGNvbXB1dGVkRGVsYXkgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zaXRpb24tZGVsYXknKTtcbiAgdmFyIGRlbGF5TWF0Y2hBcnJheSA9IGNvbXB1dGVkRGVsYXkubWF0Y2goR1JPVVBfTlVNRVJJQyk7XG4gIHZhciBkZWxheU1hdGNoID0gZGVsYXlNYXRjaEFycmF5ID8gZ2V0TWlsbGlzZWNvbmRzKGRlbGF5TWF0Y2hBcnJheVsxXSwgZGVsYXlNYXRjaEFycmF5WzJdKSA6IDA7XG4gIHJldHVybiB7XG4gICAgZHVyYXRpb25NYXRjaDogZHVyYXRpb25NYXRjaCxcbiAgICBkZWxheU1hdGNoOiBkZWxheU1hdGNoXG4gIH07XG59O1xuZnVuY3Rpb24gaXNFbGVtZW50Tm9kZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50Lm5vZGVUeXBlID09PSBkb2N1bWVudC5FTEVNRU5UX05PREU7XG59XG4vLyBVc2VzIGBnZXRUcmFuc2l0aW9uVGltaW5nc2AgdG8gZmluZCB0aGUgdG90YWwgdHJhbnNpdGlvbiB0aW1lIGZvclxuLy8gYWxsIGVsZW1lbnRzIHRhcmdldGVkIGJ5IGEgTXV0YXRpb25PYnNlcnZlciBjYWxsYmFja1xuZXhwb3J0IHZhciBnZXRXYWl0RHVyYXRpb24gPSBmdW5jdGlvbiBnZXRXYWl0RHVyYXRpb24ocmVjb3Jkcykge1xuICByZXR1cm4gcmVjb3Jkcy5yZWR1Y2UoZnVuY3Rpb24gKHdhaXREdXJhdGlvbiwgcmVjb3JkKSB7XG4gICAgLy8gb25seSBjaGVjayBmb3IgQ1NTIHRyYW5zaXRpb24gdmFsdWVzIGZvciBFTEVNRU5UIG5vZGVzXG4gICAgaWYgKGlzRWxlbWVudE5vZGUocmVjb3JkLnRhcmdldCkpIHtcbiAgICAgIHZhciBfZ2V0VHJhbnNpdGlvblRpbWluZ3MgPSBnZXRUcmFuc2l0aW9uVGltaW5ncyhyZWNvcmQudGFyZ2V0KSxcbiAgICAgICAgZHVyYXRpb25NYXRjaCA9IF9nZXRUcmFuc2l0aW9uVGltaW5ncy5kdXJhdGlvbk1hdGNoLFxuICAgICAgICBkZWxheU1hdGNoID0gX2dldFRyYW5zaXRpb25UaW1pbmdzLmRlbGF5TWF0Y2g7XG4gICAgICB3YWl0RHVyYXRpb24gPSBNYXRoLm1heCh3YWl0RHVyYXRpb24sIGR1cmF0aW9uTWF0Y2ggKyBkZWxheU1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHdhaXREdXJhdGlvbjtcbiAgfSwgMCk7XG59O1xuXG4vLyBVc2VzIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIHRvIHBlcmZvcm0gYSBnaXZlbiBjYWxsYmFjayBhZnRlciBhIHNwZWNpZmllZCB3YWl0aW5nIHBlcmlvZFxuZXhwb3J0IHZhciBwZXJmb3JtT25GcmFtZSA9IGZ1bmN0aW9uIHBlcmZvcm1PbkZyYW1lKHdhaXREdXJhdGlvbiwgdG9QZXJmb3JtKSB7XG4gIGlmICh3YWl0RHVyYXRpb24gPiAwKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdmFyIGVuZFRpbWUgPSBzdGFydFRpbWUgKyB3YWl0RHVyYXRpb247XG4gICAgdmFyIG9uRnJhbWUgPSBmdW5jdGlvbiBvbkZyYW1lKCkge1xuICAgICAgdG9QZXJmb3JtKCk7XG4gICAgICBpZiAoZW5kVGltZSA+IERhdGUubm93KCkpIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uRnJhbWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uRnJhbWUpO1xuICB9XG59O1xuXG4vLyBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGNvbWJpbmluZyB0aGUgcmVzdWx0IG9mICdnZXRXYWl0RHVyYXRpb24nIGRpcmVjdGx5IHdpdGggJ3BlcmZvcm1PbkZyYW1lJ1xuZXhwb3J0IHZhciBnZXREdXJhdGlvbkFuZFBlcmZvcm1PbkZyYW1lID0gZnVuY3Rpb24gZ2V0RHVyYXRpb25BbmRQZXJmb3JtT25GcmFtZShyZWNvcmRzLCB0b1BlcmZvcm0pIHtcbiAgcGVyZm9ybU9uRnJhbWUoZ2V0V2FpdER1cmF0aW9uKHJlY29yZHMpLCB0b1BlcmZvcm0pO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0RGVzdHJ1Y3R1cmluZ0VtcHR5KHQpIHsgaWYgKG51bGwgPT0gdCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBkZXN0cnVjdHVyZSBcIiArIHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgR2xvYmFsLCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGV1aVNjcm9sbEJhclN0eWxlcyB9IGZyb20gJy4uL21peGlucyc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IHNoYWRlLCB0aW50LCB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbG9yJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUnO1xuaW1wb3J0IHsgcmVzZXRTdHlsZXMgYXMgcmVzZXQgfSBmcm9tICcuL3Jlc2V0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUdsb2JhbFN0eWxlcyA9IGZ1bmN0aW9uIEV1aUdsb2JhbFN0eWxlcyhfcmVmKSB7XG4gIF9vYmplY3REZXN0cnVjdHVyaW5nRW1wdHkoX3JlZik7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgdmFyIGJhc2UgPSBldWlUaGVtZS5iYXNlLFxuICAgIGNvbG9ycyA9IGV1aVRoZW1lLmNvbG9ycyxcbiAgICBmb250ID0gZXVpVGhlbWUuZm9udDtcblxuICAvKipcbiAgICogRGVjbGFyaW5nIHRoZSB0b3AgbGV2ZWwgc2Nyb2xsYmFyIGNvbG9ycyB0byBtYXRjaCB0aGUgdGhlbWUgYWxzbyByZXF1aXJlcyBzZXR0aW5nIHRoZSBzaXplcyBvbiBDaHJvbWVcbiAgICogc28gdGhhdCBpdCBrbm93cyB0byB1c2UgY3VzdG9tIHN0eWxlcy4gVGhlcmVmb3JlLCB3ZSBqdXN0IHJldXNlIHRoZSBzYW1lIHNjcm9sbGJhciBtaXhpbiB3aXRoIHRoaWNrIHNpemUuXG4gICAqL1xuICB2YXIgc2Nyb2xsYmFyU3R5bGVzID0gZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwge1xuICAgIHRyYWNrQ29sb3I6IGNvbG9yTW9kZSA9PT0gJ0xJR0hUJyA/IHNoYWRlKGNvbG9ycy5ib2R5LCAwLjAzKSA6IHRpbnQoY29sb3JzLmJvZHksIDAuMDcpLFxuICAgIHdpZHRoOiAnYXV0bydcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoaXMgZm9udCByZXNldCBzZXRzIGFsbCBvdXIgYmFzZSBmb250L3R5cG9ncmFwaHkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gICAqIHRoYXQgYXJlIG5lZWRlZCB0byBvdmVycmlkZSBicm93c2VyLXNwZWNpZmljIGVsZW1lbnQgc2V0dGluZ3MuXG4gICAqL1xuICB2YXIgZm9udEJvZHlTY2FsZSA9IGZvbnQuc2NhbGVbZm9udC5ib2R5LnNjYWxlXTtcbiAgdmFyIGZvbnRSZXNldCA9IHtcbiAgICBmb250RmFtaWx5OiBmb250LmZhbWlseSxcbiAgICBmb250U2l6ZTogXCJcIi5jb25jYXQoZm9udC5kZWZhdWx0VW5pdHMgPT09ICdweCcgPyBmb250Qm9keVNjYWxlICogYmFzZSA6IGZvbnRCb2R5U2NhbGUpLmNvbmNhdChmb250LmRlZmF1bHRVbml0cyksXG4gICAgbGluZUhlaWdodDogYmFzZSAvIChmb250Qm9keVNjYWxlICogYmFzZSksXG4gICAgZm9udFdlaWdodDogZm9udC53ZWlnaHRbZm9udC5ib2R5LndlaWdodF1cbiAgfTtcblxuICAvKipcbiAgICogRmluYWwgc3R5bGVzXG4gICAqL1xuICB2YXIgc3R5bGVzID0gLyojX19QVVJFX18qL2NzcyhyZXNldCwgXCIgaHRtbHtcIiwgc2Nyb2xsYmFyU3R5bGVzLCBcIiBcIiwgZm9udFJlc2V0LCBcIiB0ZXh0LXNpemUtYWRqdXN0OjEwMCU7Zm9udC1rZXJuaW5nOm5vcm1hbDtcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgJzEwMCUnKSwgXCIgYmFja2dyb3VuZC1jb2xvcjpcIiwgY29sb3JzLmJvZHksIFwiO2NvbG9yOlwiLCBjb2xvcnMudGV4dCwgXCI7fWNvZGUscHJlLGtiZCxzYW1we2ZvbnQtZmFtaWx5OlwiLCBmb250LmZhbWlseUNvZGUsIFwiO31pbnB1dCx0ZXh0YXJlYSxzZWxlY3R7XCIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZm9udFJlc2V0KSwge30sIHtcbiAgICBmb250U2l6ZTogJzFyZW0nIC8vIEluaGVyaXQgZnJvbSBodG1sIHJvb3RcbiAgfSksIFwiO31zZWxlY3Q6ZGlzYWJsZWR7b3BhY2l0eToxO31idXR0b257Zm9udC1mYW1pbHk6XCIsIGZvbnQuZmFtaWx5LCBcIjt9ZW17Zm9udC1zdHlsZTppdGFsaWM7fXN0cm9uZ3tmb250LXdlaWdodDpcIiwgZm9udC53ZWlnaHQuYm9sZCwgXCI7fSo6Zm9jdXN7XCIsIGV1aUZvY3VzUmluZyhldWlUaGVtZUNvbnRleHQpLCBcIjt9OjpzZWxlY3Rpb257YmFja2dyb3VuZDpcIiwgdHJhbnNwYXJlbnRpemUoY29sb3JzLnByaW1hcnksIGNvbG9yTW9kZSA9PT0gJ0xJR0hUJyA/IDAuMSA6IDAuMiksIFwiO31he2NvbG9yOlwiLCBjb2xvcnMucHJpbWFyeVRleHQsIFwiOyYsJjpob3ZlciwmOmZvY3Vze3RleHQtZGVjb3JhdGlvbjpub25lO319LmV1aUJvZHktaGFzUG9ydGFsQ29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZTt9O2xhYmVsOnN0eWxlcztcIik7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEdsb2JhbCwge1xuICAgIHN0eWxlczogc3R5bGVzXG4gIH0pO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBzaGFkZSwgdGludCwgdGludE9yU2hhZGUsIHRyYW5zcGFyZW50aXplLCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmV4cG9ydCB2YXIgQkFDS0dST1VORF9DT0xPUlMgPSBbJ3RyYW5zcGFyZW50JywgJ3BsYWluJywgJ3N1YmR1ZWQnLCAnYWNjZW50JywgJ3ByaW1hcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJywgJ2RhbmdlciddO1xuLyoqXG4gKiBAcmV0dXJucyBBIHNpbmdsZSBiYWNrZ3JvdW5kIGNvbG9yIHdpdGggb3B0aW9uYWwgYWxwaGEgdHJhbnNwYXJlbmN5XG4gKi9cbmV4cG9ydCB2YXIgZXVpQmFja2dyb3VuZENvbG9yID0gZnVuY3Rpb24gZXVpQmFja2dyb3VuZENvbG9yKF9yZWYsIGNvbG9yKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gX3JlZi5jb2xvck1vZGU7XG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgbWV0aG9kID0gX3JlZjIubWV0aG9kO1xuICBpZiAoY29sb3IgPT09ICd0cmFuc3BhcmVudCcpIHJldHVybiAndHJhbnNwYXJlbnQnO1xuICBpZiAobWV0aG9kID09PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgaWYgKGNvbG9yID09PSAncGxhaW4nKSB7XG4gICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmdob3N0LCAwLjIpO1xuICAgIH0gZWxzZSBpZiAoY29sb3IgPT09ICdzdWJkdWVkJykge1xuICAgICAgcmV0dXJuIGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUsIDAuNCkgOiB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgMC4yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9yc1tjb2xvcl0sIDAuMSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBfdGludE9yU2hhZGUgPSBmdW5jdGlvbiBfdGludE9yU2hhZGUoY29sb3IpIHtcbiAgICAgIHJldHVybiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHNoYWRlKGNvbG9yLCAwLjgpIDogdGludChjb2xvciwgMC45KTtcbiAgICB9O1xuICAgIHN3aXRjaCAoY29sb3IpIHtcbiAgICAgIGNhc2UgJ3BsYWluJzpcbiAgICAgICAgcmV0dXJuIGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlO1xuICAgICAgY2FzZSAnc3ViZHVlZCc6XG4gICAgICAgIHJldHVybiBldWlUaGVtZS5jb2xvcnMuYm9keTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBfdGludE9yU2hhZGUoZXVpVGhlbWUuY29sb3JzW2NvbG9yXSk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgY29sb3Iga2V5cyB0byBjb2xvciB2YWx1ZXMsIGNhdGVnb3JpemVkIGJ5XG4gKiBvcGFxdWUgKGRlZmF1bHQpIHZzIHRyYW5zcGFyZW5jeSAoaG92ZXIvZm9jdXMgc3RhdGVzKSBtZXRob2RzLlxuICogZS5nLiB7XG4gKiAgb3BhcXVlOiB7IGRhbmdlcjogJyMwMDAnLCBzdWNjZXNzOiAnI2ZmZicsIC4uLiB9LFxuICogIHRyYW5zcGFyZW50OiB7IGRhbmdlcjogJ3JnYmEoMCwwLDAsMC4xKScsIHN1Y2Nlc3M6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuMSknLCAuLi4gfSxcbiAqIH1cbiAqL1xudmFyIF9ldWlCYWNrZ3JvdW5kQ29sb3JNYXAgPSBmdW5jdGlvbiBfZXVpQmFja2dyb3VuZENvbG9yTWFwKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4ge1xuICAgIG9wYXF1ZTogQkFDS0dST1VORF9DT0xPUlMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGNvbG9yKSB7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhY2MpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBjb2xvciwgZXVpQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpKSk7XG4gICAgfSwge30pLFxuICAgIHRyYW5zcGFyZW50OiBCQUNLR1JPVU5EX0NPTE9SUy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgY29sb3IpIHtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFjYyksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIGNvbG9yLCBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvciwge1xuICAgICAgICBtZXRob2Q6ICd0cmFuc3BhcmVudCdcbiAgICAgIH0pKSk7XG4gICAgfSwge30pXG4gIH07XG59O1xuZXhwb3J0IHZhciB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IgPSBmdW5jdGlvbiB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoY29sb3IpIHtcbiAgdmFyIF9yZWYzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBtZXRob2QgPSBfcmVmMy5tZXRob2Q7XG4gIHZhciBiYWNrZ3JvdW5kQ29sb3JNYXAgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhfZXVpQmFja2dyb3VuZENvbG9yTWFwKTtcbiAgcmV0dXJuIGJhY2tncm91bmRDb2xvck1hcFttZXRob2QgfHwgJ29wYXF1ZSddW2NvbG9yXTtcbn07XG5cbi8qKlxuICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBjb2xvciBrZXlzIHRvIENTUyxcbiAqIGUuZy4geyBkYW5nZXI6IGNzc2BgLCBzdWNjZXNzOiBjc3NgYCwgLi4uIH1cbiAqL1xudmFyIF9ldWlCYWNrZ3JvdW5kQ29sb3JzID0gZnVuY3Rpb24gX2V1aUJhY2tncm91bmRDb2xvcnMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiBCQUNLR1JPVU5EX0NPTE9SUy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgY29sb3IpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhY2MpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBjb2xvciwgLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIGV1aUJhY2tncm91bmRDb2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKSwgXCI7bGFiZWw6XCIsIGNvbG9yLCBcIjtcIikpKTtcbiAgfSwge30pO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpQmFja2dyb3VuZENvbG9yQ1NTID0gZnVuY3Rpb24gdXNlRXVpQmFja2dyb3VuZENvbG9yQ1NTKCkge1xuICByZXR1cm4gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoX2V1aUJhY2tncm91bmRDb2xvcnMpO1xufTtcblxuLyoqXG4gKiBCb3JkZXIgY29sb3JzXG4gKi9cblxuZXhwb3J0IHZhciBldWlCb3JkZXJDb2xvciA9IGZ1bmN0aW9uIGV1aUJvcmRlckNvbG9yKF9yZWY0LCBjb2xvcikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBfcmVmNC5jb2xvck1vZGU7XG4gIHN3aXRjaCAoY29sb3IpIHtcbiAgICBjYXNlICd0cmFuc3BhcmVudCc6XG4gICAgY2FzZSAncGxhaW4nOlxuICAgIGNhc2UgJ3N1YmR1ZWQnOlxuICAgICAgcmV0dXJuIGV1aVRoZW1lLmJvcmRlci5jb2xvcjtcbiAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgIHJldHVybiB0aW50T3JTaGFkZShldWlUaGVtZS5jb2xvcnMud2FybmluZywgMC40LCBjb2xvck1vZGUpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdGludE9yU2hhZGUoZXVpVGhlbWUuY29sb3JzW2NvbG9yXSwgMC42LCBjb2xvck1vZGUpO1xuICB9XG59O1xuXG4vKipcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXAgb2YgY29sb3Iga2V5cyB0byBDU1MsXG4gKiBlLmcuIHsgZGFuZ2VyOiBjc3NgYCwgc3VjY2VzczogY3NzYGAsIC4uLiB9XG4gKi9cbnZhciBfZXVpQm9yZGVyQ29sb3JzID0gZnVuY3Rpb24gX2V1aUJvcmRlckNvbG9ycyhldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIEJBQ0tHUk9VTkRfQ09MT1JTLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjb2xvcikge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFjYyksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIGNvbG9yLCAvKiNfX1BVUkVfXyovY3NzKFwiYm9yZGVyLWNvbG9yOlwiLCBldWlCb3JkZXJDb2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKSwgXCI7bGFiZWw6XCIsIGNvbG9yLCBcIjtcIikpKTtcbiAgfSwge30pO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpQm9yZGVyQ29sb3JDU1MgPSBmdW5jdGlvbiB1c2VFdWlCb3JkZXJDb2xvckNTUygpIHtcbiAgcmV0dXJuIHVzZUV1aU1lbW9pemVkU3R5bGVzKF9ldWlCb3JkZXJDb2xvcnMpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZSc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbG9yJztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxDU1NXaXRoRmFsbGJhY2sgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuXG4vKipcbiAqIFNldCBzY3JvbGwgYmFyIGFwcGVhcmFuY2Ugb24gQ2hyb21lIChhbmQgZmlyZWZveCkuXG4gKiBBbGwgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwgYW5kIGRlZmF1bHQgdG8gc3BlY2lmaWMgZ2xvYmFsIHNldHRpbmdzLlxuICovXG5cbmV4cG9ydCB2YXIgZXVpU2Nyb2xsQmFyU3R5bGVzID0gZnVuY3Rpb24gZXVpU2Nyb2xsQmFyU3R5bGVzKF9yZWYpIHtcbiAgdmFyIF9yZWYkZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgIGNvbG9ycyA9IF9yZWYkZXVpVGhlbWUuY29sb3JzLFxuICAgIHNpemUgPSBfcmVmJGV1aVRoZW1lLnNpemU7XG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX3RodW1iQ29sb3IgPSBfcmVmMi50aHVtYkNvbG9yLFxuICAgIF9yZWYyJHRyYWNrQ29sb3IgPSBfcmVmMi50cmFja0NvbG9yLFxuICAgIHRyYWNrQ29sb3IgPSBfcmVmMiR0cmFja0NvbG9yID09PSB2b2lkIDAgPyAndHJhbnNwYXJlbnQnIDogX3JlZjIkdHJhY2tDb2xvcixcbiAgICBfcmVmMiR3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgIHdpZHRoID0gX3JlZjIkd2lkdGggPT09IHZvaWQgMCA/ICd0aGluJyA6IF9yZWYyJHdpZHRoLFxuICAgIF9zaXplID0gX3JlZjIuc2l6ZSxcbiAgICBfY29ybmVyID0gX3JlZjIuY29ybmVyO1xuICAvLyBTZXQgZGVmYXVsdHMgZnJvbSB0aGVtZVxuICB2YXIgdGh1bWJDb2xvciA9IF90aHVtYkNvbG9yIHx8IHRyYW5zcGFyZW50aXplKGNvbG9ycy5kYXJrU2hhZGUsIDAuNSk7XG4gIHZhciBzY3JvbGxCYXJTaXplID0gX3NpemUgfHwgc2l6ZS5iYXNlO1xuICB2YXIgc2Nyb2xsQmFyQ29ybmVyID0gX2Nvcm5lciB8fCB3aWR0aCA9PT0gJ3RoaW4nID8gXCJjYWxjKFwiLmNvbmNhdChzaXplLnMsIFwiICogMC43NSlcIikgOiBzaXplLnhzO1xuXG4gIC8vIEZpcmVmb3gncyBzY3JvbGxiYXIgY29sb3JpbmcgY2FzY2FkZXMsIGJ1dCB0aGUgc2l6aW5nIGRvZXMgbm90LFxuICAvLyBzbyBpdCdzIGJlaW5nIGFkZGVkIHRvIHRoaXMgbWl4aW4gZm9yIGFsbG93aW5nIHN1cHBvcnQgd2hlcmV2ZXIgY3VzdG9tIHNjcm9sbGJhcnMgYXJlXG4gIHZhciBmaXJlZm94U3VwcG9ydCA9IFwic2Nyb2xsYmFyLWNvbG9yOiBcIi5jb25jYXQodGh1bWJDb2xvciwgXCIgXCIpLmNvbmNhdCh0cmFja0NvbG9yLCBcIjtcIik7XG4gIHJldHVybiBcInNjcm9sbGJhci13aWR0aDogXCIuY29uY2F0KHdpZHRoLCBcIjtcXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCBzY3JvbGxCYXJTaXplKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsIHNjcm9sbEJhclNpemUpLCBcIlxcbiAgICB9XFxuXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KHRodW1iQ29sb3IsIFwiO1xcbiAgICAgIGJhY2tncm91bmQtY2xpcDogY29udGVudC1ib3g7XFxuICAgICAgYm9yZGVyLXJhZGl1czogXCIpLmNvbmNhdChzY3JvbGxCYXJTaXplLCBcIjtcXG4gICAgICBib3JkZXI6IFwiKS5jb25jYXQoc2Nyb2xsQmFyQ29ybmVyLCBcIiBzb2xpZCBcIikuY29uY2F0KHRyYWNrQ29sb3IsIFwiO1xcbiAgICB9XFxuXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lcixcXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQodHJhY2tDb2xvciwgXCI7XFxuICAgIH1cXG5cXG4gICAgXCIpLmNvbmNhdChmaXJlZm94U3VwcG9ydCwgXCJcXG4gIFwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVNjcm9sbEJhciA9IGZ1bmN0aW9uIHVzZUV1aVNjcm9sbEJhcihvcHRpb25zKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWUsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiAqSU5URVJOQUwqXG4gKiBPdmVyZmxvdyBzaGFkb3cgbWFza3MgZm9yIHVzZSBpbiBZU2Nyb2xsIGFuZCBYU2Nyb2xsIGhlbHBlcnNcbiAqL1xuXG52YXIgZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMgPSBmdW5jdGlvbiBldWlPdmVyZmxvd1NoYWRvd1N0eWxlcyhfcmVmMykge1xuICB2YXIgc2l6ZSA9IF9yZWYzLmV1aVRoZW1lLnNpemU7XG4gIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX2RpcmVjdGlvbiA9IF9yZWY0LmRpcmVjdGlvbixcbiAgICBfc2lkZSA9IF9yZWY0LnNpZGU7XG4gIHZhciBkaXJlY3Rpb24gPSBfZGlyZWN0aW9uIHx8ICd5JztcbiAgdmFyIHNpZGUgPSBfc2lkZSB8fCAnYm90aCc7XG4gIHZhciBoaWRlSGVpZ2h0ID0gc2l6ZS5zO1xuICB2YXIgZ3JhZGllbnRTdGFydCA9IFwiXFxuICBcIi5jb25jYXQodHJhbnNwYXJlbnRpemUoJ3JlZCcsIDAuMSksIFwiIDAlLFxcbiAgXCIpLmNvbmNhdCh0cmFuc3BhcmVudGl6ZSgncmVkJywgMSksIFwiIFwiKS5jb25jYXQoaGlkZUhlaWdodCwgXCJcXG4gIFwiKTtcbiAgdmFyIGdyYWRpZW50RW5kID0gXCJcXG4gIFwiLmNvbmNhdCh0cmFuc3BhcmVudGl6ZSgncmVkJywgMSksIFwiIGNhbGMoMTAwJSAtIFwiKS5jb25jYXQoaGlkZUhlaWdodCwgXCIpLFxcbiAgXCIpLmNvbmNhdCh0cmFuc3BhcmVudGl6ZSgncmVkJywgMC4xKSwgXCIgMTAwJVxcbiAgXCIpO1xuICB2YXIgZ3JhZGllbnQgPSAnJztcbiAgaWYgKHNpZGUpIHtcbiAgICBpZiAoc2lkZSA9PT0gJ2JvdGgnKSB7XG4gICAgICBncmFkaWVudCA9IFwiXCIuY29uY2F0KGdyYWRpZW50U3RhcnQsIFwiLCBcIikuY29uY2F0KGdyYWRpZW50RW5kKTtcbiAgICB9IGVsc2UgaWYgKHNpZGUgPT09ICdzdGFydCcpIHtcbiAgICAgIGdyYWRpZW50ID0gXCJcIi5jb25jYXQoZ3JhZGllbnRTdGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyYWRpZW50ID0gXCJcIi5jb25jYXQoZ3JhZGllbnRFbmQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENocm9tZStFZGdlIGhhcyBhIHZlcnkgYml6YXJyZSBlZGdlIGNhc2UgYnVnIHdoZXJlIGBtYXNrLWltYWdlYCBzdG9wcyB3b3JraW5nXG4gIC8vIFRoaXMgd29ya2Fyb3VuZCBmb3JjZXMgYSBzdGFja2luZyBjb250ZXh0IG9uIHRoZSBzY3JvbGxpbmcgY29udGFpbmVyLCB3aGljaFxuICAvLyBob3BlZnVsbHkgYWRkcmVzc2VzIHRoZSBidWcuIEBzZWU6XG4gIC8vIC0gaHR0cHM6Ly9pc3N1ZXMuY2hyb21pdW0ub3JnL2lzc3Vlcy80MDc3ODU0MVxuICAvLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2tpYmFuYS9pc3N1ZXMvMTgwODI4XG4gIC8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvNjM0MyNpc3N1ZWNvbW1lbnQtMTMwMjczMjAyMVxuICB2YXIgY2hyb21pdW1NYXNrV29ya2Fyb3VuZCA9ICd0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7JztcbiAgaWYgKGRpcmVjdGlvbiA9PT0gJ3knKSB7XG4gICAgcmV0dXJuIFwibWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgXCIuY29uY2F0KGdyYWRpZW50LCBcIik7IFwiKS5jb25jYXQoY2hyb21pdW1NYXNrV29ya2Fyb3VuZCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwibWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQoZ3JhZGllbnQsIFwiKTsgXCIpLmNvbmNhdChjaHJvbWl1bU1hc2tXb3JrYXJvdW5kKTtcbiAgfVxufTtcblxuLyoqXG4gKiAxLiBGb2N1cyByaW5ncyBzaG91bGRuJ3QgYmUgdmlzaWJsZSBvbiBzY3JvbGxhYmxlIHJlZ2lvbnMsIGJ1dCBhMTF5IHJlcXVpcmVzIHRoZW0gdG8gYmUgZm9jdXNhYmxlLlxuICogICAgQnJvd3NlcidzIHN1cHBvcnRpbmcgYDpmb2N1cy12aXNpYmxlYCB3aWxsIHN0aWxsIHNob3cgb3V0bGluZSBvbiBrZXlib2FyZCBmb2N1cyBvbmx5LlxuICogICAgT3RoZXJzIGxpa2UgU2FmYXJpLCB3b24ndCBzaG93IGFueXRoaW5nIGF0IGFsbC5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVlTY3JvbGwgPSBmdW5jdGlvbiBldWlZU2Nyb2xsKGV1aVRoZW1lKSB7XG4gIHZhciBfcmVmNSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgaGVpZ2h0ID0gX3JlZjUuaGVpZ2h0O1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWUpLCBcIlxcbiAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCBoZWlnaHQgfHwgJzEwMCUnKSwgXCJcXG4gIFwiKS5jb25jYXQobG9naWNhbENTU1dpdGhGYWxsYmFjaygnb3ZlcmZsb3cteScsICdhdXRvJyksIFwiXFxuICBcIikuY29uY2F0KGxvZ2ljYWxDU1NXaXRoRmFsbGJhY2soJ292ZXJmbG93LXgnLCAnaGlkZGVuJyksIFwiXFxuICAmOmZvY3VzIHtcXG4gICAgb3V0bGluZTogbm9uZTsgLyogMSAqL1xcbiAgfVxcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVlTY3JvbGwgPSBmdW5jdGlvbiB1c2VFdWlZU2Nyb2xsKCkge1xuICB2YXIgX3JlZjYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgIGhlaWdodCA9IF9yZWY2LmhlaWdodDtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVlTY3JvbGwoZXVpVGhlbWUsIHtcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9KTtcbn07XG5leHBvcnQgdmFyIGV1aVlTY3JvbGxXaXRoU2hhZG93cyA9IGZ1bmN0aW9uIGV1aVlTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSkge1xuICB2YXIgX3JlZjcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIGhlaWdodCA9IF9yZWY3LmhlaWdodCxcbiAgICBfcmVmNyRzaWRlID0gX3JlZjcuc2lkZSxcbiAgICBzaWRlID0gX3JlZjckc2lkZSA9PT0gdm9pZCAwID8gJ2JvdGgnIDogX3JlZjckc2lkZTtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpWVNjcm9sbChldWlUaGVtZSwge1xuICAgIGhlaWdodDogaGVpZ2h0XG4gIH0pLCBcIlxcbiAgXCIpLmNvbmNhdChldWlPdmVyZmxvd1NoYWRvd1N0eWxlcyhldWlUaGVtZSwge1xuICAgIGRpcmVjdGlvbjogJ3knLFxuICAgIHNpZGU6IHNpZGVcbiAgfSksIFwiXFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpWVNjcm9sbFdpdGhTaGFkb3dzID0gZnVuY3Rpb24gdXNlRXVpWVNjcm9sbFdpdGhTaGFkb3dzKCkge1xuICB2YXIgX3JlZjggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgIGhlaWdodCA9IF9yZWY4LmhlaWdodDtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVlTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSwge1xuICAgIGhlaWdodDogaGVpZ2h0XG4gIH0pO1xufTtcbmV4cG9ydCB2YXIgZXVpWFNjcm9sbCA9IGZ1bmN0aW9uIGV1aVhTY3JvbGwoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lKSwgXCJcXG4gIFwiKS5jb25jYXQobG9naWNhbENTU1dpdGhGYWxsYmFjaygnb3ZlcmZsb3cteCcsICdhdXRvJyksIFwiXFxuICAmOmZvY3VzIHtcXG4gICAgb3V0bGluZTogbm9uZTsgLyogMSAqL1xcbiAgfVxcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVhTY3JvbGwgPSBmdW5jdGlvbiB1c2VFdWlYU2Nyb2xsKCkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpWFNjcm9sbChldWlUaGVtZSk7XG59O1xuZXhwb3J0IHZhciBldWlYU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiBldWlYU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpWFNjcm9sbChldWlUaGVtZSksIFwiXFxuICBcIikuY29uY2F0KGV1aU92ZXJmbG93U2hhZG93U3R5bGVzKGV1aVRoZW1lLCB7XG4gICAgZGlyZWN0aW9uOiAneCdcbiAgfSksIFwiXFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpWFNjcm9sbFdpdGhTaGFkb3dzID0gZnVuY3Rpb24gdXNlRXVpWFNjcm9sbFdpdGhTaGFkb3dzKCkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKTtcbn07XG5leHBvcnQgdmFyIGV1aU92ZXJmbG93U2Nyb2xsID0gZnVuY3Rpb24gZXVpT3ZlcmZsb3dTY3JvbGwoZXVpVGhlbWUpIHtcbiAgdmFyIF9yZWY5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBkaXJlY3Rpb24gPSBfcmVmOS5kaXJlY3Rpb24sXG4gICAgX3JlZjkkbWFzayA9IF9yZWY5Lm1hc2ssXG4gICAgbWFzayA9IF9yZWY5JG1hc2sgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjkkbWFzaztcbiAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBtYXNrID8gZXVpWVNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKSA6IGV1aVlTY3JvbGwoZXVpVGhlbWUpO1xuICAgIGNhc2UgJ3gnOlxuICAgICAgcmV0dXJuIG1hc2sgPyBldWlYU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIDogZXVpWFNjcm9sbChldWlUaGVtZSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUud2FybignUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBkaXJlY3Rpb24gb3B0aW9uIHRvIHVzZUV1aU92ZXJmbG93U2Nyb2xsJyk7XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aU92ZXJmbG93U2Nyb2xsID0gZnVuY3Rpb24gdXNlRXVpT3ZlcmZsb3dTY3JvbGwoZGlyZWN0aW9uKSB7XG4gIHZhciBtYXNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aU92ZXJmbG93U2Nyb2xsKGV1aVRoZW1lLCB7XG4gICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgbWFzazogbWFza1xuICB9KTtcbn07XG5cbi8qKlxuICogRm9yIHF1aWNrbHkgYXBwbHlpbmcgYSBmdWxsLWhlaWdodCBlbGVtZW50IHdoZXRoZXIgdXNpbmcgZmxleCBvciBub3RcbiAqL1xuZXhwb3J0IHZhciBldWlGdWxsSGVpZ2h0ID0gZnVuY3Rpb24gZXVpRnVsbEhlaWdodCgpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0JywgJzEwMCUnKSwgXCJcXG4gIGZsZXg6IDEgMSBhdXRvO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG5cIik7XG59O1xuXG4vKipcbiAqIEEgY29uc3RhbnQgc3RvcmluZyB0aGUgc3VwcG9ydCBmb3IgdGhlIGA6aGFzKClgIHNlbGVjdG9yIHRocm91Z2ggYVxuICogbWVkaWEgcXVlcnkgdGhhdCB3aWxsIG9ubHkgYXBwbHkgdGhlIGNvbnRlbnQgaXQgaXMgc3VwcG9ydGVkLlxuICovXG5leHBvcnQgdmFyIGV1aVN1cHBvcnRzSGFzID0gJ0BzdXBwb3J0cyhzZWxlY3Rvcig6aGFzKHApKSknOyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZSc7XG5leHBvcnQgdmFyIFBBRERJTkdfU0laRVMgPSBbJ25vbmUnLCAneHMnLCAncycsICdtJywgJ2wnLCAneGwnXTtcbi8qKlxuICogR2V0IGEgc2luZ2xlIHBhZGRpbmcgc2l6ZVxuICovXG5cbmV4cG9ydCB2YXIgZXVpUGFkZGluZ1NpemUgPSBmdW5jdGlvbiBldWlQYWRkaW5nU2l6ZShfcmVmLCBzaXplKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHN3aXRjaCAoc2l6ZSkge1xuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gZXVpVGhlbWUuc2l6ZS5iYXNlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZXVpVGhlbWUuc2l6ZVtzaXplXTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgbWFwIG9mIHBhZGRpbmcgc2l6ZSBrZXlzIHRvIHBhZGRpbmcgdmFsdWVzLFxuICogZS5nLiB7IHM6ICc4cHgnLCBtOiAnMTZweCcsIC4uLiB9XG4gKi9cbnZhciBfZ2V0RXVpUGFkZGluZ1NpemUgPSBmdW5jdGlvbiBfZ2V0RXVpUGFkZGluZ1NpemUoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiBQQURESU5HX1NJWkVTLnJlZHVjZShmdW5jdGlvbiAoc3R5bGVzQWNjLCBzaXplKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgc3R5bGVzQWNjKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgc2l6ZSwgc2l6ZSA9PT0gJ25vbmUnID8gbnVsbCA6IGV1aVBhZGRpbmdTaXplKGV1aVRoZW1lQ29udGV4dCwgc2l6ZSkpKTtcbiAgfSwge30pO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpUGFkZGluZ1NpemUgPSBmdW5jdGlvbiB1c2VFdWlQYWRkaW5nU2l6ZShzaXplKSB7XG4gIHZhciBzaXplcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKF9nZXRFdWlQYWRkaW5nU2l6ZSk7XG4gIHJldHVybiBzaXplc1tzaXplXTtcbn07XG5cbi8qKlxuICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBhbGwgcGFkZGluZyBzaXplcyBmb3IgYWxsIHBhZGRpbmcgc2lkZXMgcHJvcGVydGllc1xuICogZS5nLiwge1xuICogICBwYWRkaW5nOiB7IHM6IGNzc2BwYWRkaW5nLXNpemU6IDhweGAsIC4uLiB9XG4gKiAgIGxlZnQ6IHsgczogY3NzYHBhZGRpbmctaW5saW5lLXN0YXJ0OiA4cHhgLCAuLi4gfVxuICogfVxuICovXG52YXIgX2V1aVBhZGRpbmdTaWRlc0FuZFNpemVzID0gZnVuY3Rpb24gX2V1aVBhZGRpbmdTaWRlc0FuZFNpemVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgc2l6ZXNNYXAgPSBfZ2V0RXVpUGFkZGluZ1NpemUoZXVpVGhlbWVDb250ZXh0KTtcbiAgLy8gVGhlIGBfYCBwcmVmaXggc3RvcHMgRW1vdGlvbiBmcm9tIGFwcGx5aW5nIHRoZSBmdW5jdGlvbiBuYW1lIGFzIGEgbGFiZWxcbiAgdmFyIF9nZW5lcmF0ZVNpemVTdHlsZXMgPSBmdW5jdGlvbiBfZ2VuZXJhdGVTaXplU3R5bGVzKGNzc1Byb3BlcnR5KSB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhzaXplc01hcCkubWFwKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgdmFyIF9yZWYzID0gX3NsaWNlZFRvQXJyYXkoX3JlZjIsIDIpLFxuICAgICAgICBzaXplS2V5ID0gX3JlZjNbMF0sXG4gICAgICAgIHNpemVWYWx1ZSA9IF9yZWYzWzFdO1xuICAgICAgcmV0dXJuIFtzaXplS2V5LCBzaXplVmFsdWUgPT09IG51bGwgPyBudWxsIDogLyojX19QVVJFX18qL2Nzcyhjc3NQcm9wZXJ0eSwgXCI6XCIsIHNpemVWYWx1ZSwgXCI7bGFiZWw6XCIsIHNpemVLZXksIFwiO1wiKV07XG4gICAgfSkpO1xuICB9O1xuICB2YXIgc2lkZXNNYXAgPSB7XG4gICAgcGFkZGluZzogX2dlbmVyYXRlU2l6ZVN0eWxlcygncGFkZGluZycpLFxuICAgIHZlcnRpY2FsOiBfZ2VuZXJhdGVTaXplU3R5bGVzKCdwYWRkaW5nLWJsb2NrJyksXG4gICAgdG9wOiBfZ2VuZXJhdGVTaXplU3R5bGVzKCdwYWRkaW5nLWJsb2NrLXN0YXJ0JyksXG4gICAgYm90dG9tOiBfZ2VuZXJhdGVTaXplU3R5bGVzKCdwYWRkaW5nLWJsb2NrLWVuZCcpLFxuICAgIGhvcml6b250YWw6IF9nZW5lcmF0ZVNpemVTdHlsZXMoJ3BhZGRpbmctaW5saW5lJyksXG4gICAgbGVmdDogX2dlbmVyYXRlU2l6ZVN0eWxlcygncGFkZGluZy1pbmxpbmUtc3RhcnQnKSxcbiAgICByaWdodDogX2dlbmVyYXRlU2l6ZVN0eWxlcygncGFkZGluZy1pbmxpbmUtZW5kJylcbiAgfTtcbiAgcmV0dXJuIHNpZGVzTWFwO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpUGFkZGluZ0NTUyA9IGZ1bmN0aW9uIHVzZUV1aVBhZGRpbmdDU1Moc2lkZSkge1xuICB2YXIgbWVtb2l6ZWRTaWRlTWFwID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoX2V1aVBhZGRpbmdTaWRlc0FuZFNpemVzKTtcbiAgcmV0dXJuIG1lbW9pemVkU2lkZU1hcFtzaWRlIHx8ICdwYWRkaW5nJ107XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuLyoqXG4gKiBJdCBpcyBiZXN0IHByYWN0aWNlIHRvIHV0aWxpemUgdGhlIGJyb3dzZXIncyBkZWZhdWx0IGBvdXRsaW5lYCBwcm9wZXJ0eSBmb3IgaGFuZGxpbmcgZm9jdXMgcmluZ3MuXG4gKiBIb3dldmVyLCBzb21lIGNvbXBvbmVudHMgbmVlZCB0byBiZSBmb3JjZWQgdG8gaGF2ZSB0aGUgc2FtZSBiZWhhdmlvciwgb3IgYWRqdXN0IHRoZSBkaXNwbGF5LlxuICogVGhpcyBmdW5jdGlvbiByZS1hcHBsaWVzIHRoZSBzYW1lIGRlZmF1bHQgb3V0bGluZSB3aXRoIGEgY291cGxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBldWlUaGVtZSBVc2VFdWlUaGVtZVxuICogQHBhcmFtIG9mZnNldCBBY2NlcHRzIGEgc3BlY2lmaWMgbWVhc3VyZW1lbnQgb3IgJ2luc2V0JywgJ291dHNldCcgb3IgJ2NlbnRlcicgdG8gYWRqdXN0IG91dGxpbmUgcG9zaXRpb25cbiAqIEBwYXJhbSBjb2xvciBBY2NlcHRzIGFueSBDU1MgY29sb3JcbiAqL1xuXG5leHBvcnQgdmFyIGV1aU91dGxpbmUgPSBmdW5jdGlvbiBldWlPdXRsaW5lKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgdmFyIG9mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2NlbnRlcic7XG4gIHZhciBjb2xvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICAvLyBXaWR0aCBpcyBlbmZvcmNlZCBhcyBhIGNvbnN0YW50IGF0IHRoZSBnbG9iYWwgdGhlbWUgbGF5ZXJcbiAgdmFyIG91dGxpbmVXaWR0aCA9IGV1aVRoZW1lLmZvY3VzLndpZHRoO1xuICB2YXIgb3V0bGluZUNvbG9yID0gY29sb3IgfHwgZXVpVGhlbWUuZm9jdXMuY29sb3I7XG4gIHZhciBvdXRsaW5lT2Zmc2V0ID0gb2Zmc2V0O1xuICBpZiAob2Zmc2V0ID09PSAnaW5zZXQnKSB7XG4gICAgb3V0bGluZU9mZnNldCA9IFwiLVwiLmNvbmNhdChvdXRsaW5lV2lkdGgpO1xuICB9IGVsc2UgaWYgKG9mZnNldCA9PT0gJ291dHNldCcpIHtcbiAgICBvdXRsaW5lT2Zmc2V0ID0gXCJcIi5jb25jYXQob3V0bGluZVdpZHRoKTtcbiAgfSBlbHNlIGlmIChvZmZzZXQgPT09ICdjZW50ZXInKSB7XG4gICAgb3V0bGluZU9mZnNldCA9IG1hdGhXaXRoVW5pdHMob3V0bGluZVdpZHRoLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggLyAtMjtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFRoaXMgaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiBmcm9tIGBldWlGb2N1c1JpbmdgIGJlY2F1c2Ugc29tZSBFVUkgY29tcG9uZW50c1xuICAvLyBuZWVkIHRoZSBvdXRsaW5lIHN0eWxlcyBvbmx5LCBub3QgdGhlIDpmb2N1cy12aXNpYmxlIHNldHRpbmdzIChlLmcuIC0gOmZvY3VzLXdpdGhpbiB1c2FnZSlcbiAgcmV0dXJuIFwiXFxuICAgIG91dGxpbmU6IFwiLmNvbmNhdChvdXRsaW5lV2lkdGgsIFwiIHNvbGlkIFwiKS5jb25jYXQob3V0bGluZUNvbG9yLCBcIjtcXG4gICAgb3V0bGluZS1vZmZzZXQ6IFwiKS5jb25jYXQob3V0bGluZU9mZnNldCwgXCI7XFxuICBcIik7XG59O1xuZXhwb3J0IHZhciBldWlGb2N1c1JpbmcgPSBmdW5jdGlvbiBldWlGb2N1c1JpbmcoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBvZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdjZW50ZXInO1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICAvLyBUaGlzIGZ1bmN0aW9uIHV0aWxpemVzIGBmb2N1cy12aXNpYmxlYCB0byB0dXJuIG9uIGZvY3VzIG91dGxpbmVzLlxuICAvLyBCdXQgdGhpcyBpcyBicm93c2VyLWRlcGVuZGVudDpcbiAgLy8gXHVEODNEXHVEQzQ5IFNhZmFyaSBhbmQgRmlyZWZveCBpbm5hdGVseSByZXNwZWN0IG9ubHkgc2hvd2luZyB0aGUgb3V0bGluZSB3aXRoIGtleWJvYXJkIG9ubHlcbiAgLy8gXHVEODNEXHVEQzk0IEJ1dCB0aGV5IGRvbid0IGFsbG93IGNvbG9yaW5nIG9mIHRoZSAnYXV0bycvZGVmYXVsdCBvdXRsaW5lLCBzbyBjb250cmFzdCBpcyBubyBnb29kIGluIGRhcmsgbW9kZS5cbiAgLy8gXHVEODNEXHVEQzQ5IEZvciB0aGVzZSBicm93c2VycyB3ZSB1c2UgdGhlIHNvbGlkIHR5cGUgaW4gb3JkZXIgdG8gbWF0Y2ggd2l0aCBgY3VycmVudENvbG9yYC5cbiAgLy8gXHVEODNEXHVERTI2IFdoaWNoIGRvZXMgbWVhbnMgdGhlIG91dGxpbmUgd2lsbCBiZSBzcXVhcmVcbiAgcmV0dXJuIFwiXFxuICAgIFwiLmNvbmNhdChldWlPdXRsaW5lKGV1aVRoZW1lQ29udGV4dCwgb2Zmc2V0LCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY29sb3IpLnRyaW0oKSwgXCJcXG5cXG4gICAgLy8gXFx1RDgzRFxcdURDNDAgQ2hyb21lIHJlc3BlY3RzIDpmb2N1cy12aXNpYmxlIGFuZCBhbGxvd3MgY29sb3JpbmcgdGhlIGBhdXRvYCBzdHlsZVxcbiAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgIG91dGxpbmUtc3R5bGU6IGF1dG87XFxuICAgIH1cXG5cXG4gICAgLy8gXFx1RDgzRFxcdURFNDVcXHUyMDBEXFx1MjY0MFxcdUZFMEYgQnV0IENocm9tZSBhbHNvIG5lZWRzIHRvIGhhdmUgdGhlIG91dGxpbmUgZm9yY2VmdWxseSByZW1vdmVkIGZyb20gcmVndWxhciBgOmZvY3VzYCBzdGF0ZVxcbiAgICAmOm5vdCg6Zm9jdXMtdmlzaWJsZSkge1xcbiAgICAgIG91dGxpbmU6IG5vbmU7XFxuICAgIH1cXG4gIFwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aUZvY3VzUmluZyA9IGZ1bmN0aW9uIHVzZUV1aUZvY3VzUmluZyhvZmZzZXQsIGNvbG9yKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlGb2N1c1JpbmcoZXVpVGhlbWUsIG9mZnNldCwge1xuICAgIGNvbG9yOiBjb2xvclxuICB9KTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgZXVpTGluZUhlaWdodEZyb21CYXNlbGluZSwgZXVpRm9udFNpemVGcm9tU2NhbGUgfSBmcm9tICcuLi9mdW5jdGlvbnMvdHlwb2dyYXBoeSc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcywgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZSc7XG5pbXBvcnQgeyBFdWlUaGVtZUZvbnRTY2FsZXMgfSBmcm9tICcuLi92YXJpYWJsZXMvdHlwb2dyYXBoeSc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbi8qKlxuICogUmV0dXJucyBmb250LXNpemUgYW5kIGxpbmUtaGVpZ2h0XG4gKi9cbmV4cG9ydCB2YXIgZXVpRm9udFNpemUgPSBmdW5jdGlvbiBldWlGb250U2l6ZShfcmVmLCBzY2FsZSwgb3B0aW9ucykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGZvbnRTaXplOiBldWlGb250U2l6ZUZyb21TY2FsZShzY2FsZSwgZXVpVGhlbWUsIG9wdGlvbnMpLFxuICAgIGxpbmVIZWlnaHQ6IGV1aUxpbmVIZWlnaHRGcm9tQmFzZWxpbmUoc2NhbGUsIGV1aVRoZW1lLCBvcHRpb25zKVxuICB9O1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpRm9udFNpemUgPSBmdW5jdGlvbiB1c2VFdWlGb250U2l6ZShzY2FsZSwgb3B0aW9ucykge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgbWVtb2l6ZWRGb250U2l6ZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlGb250U2l6ZXMpO1xuICByZXR1cm4gIW9wdGlvbnMgPyBtZW1vaXplZEZvbnRTaXplc1tzY2FsZV0gOiBldWlGb250U2l6ZShldWlUaGVtZSwgc2NhbGUsIG9wdGlvbnMpO1xufTtcbi8vIE1lbW9taXplIGEgYmFzaWMgc2V0IG9mIGZvbnQgc2l6ZXMuIFdlIHVuZm9ydHVuYXRlbHkgY2FuJ3Rcbi8vIG1lbW9pemUgYWxsIHBvc3NpYmxlIG9wdGlvbnMsIHRoZXJlJ3MgdG9vIG1hbnkgcGVybXV0YXRpb25zXG52YXIgZXVpRm9udFNpemVzID0gZnVuY3Rpb24gZXVpRm9udFNpemVzKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4gRXVpVGhlbWVGb250U2NhbGVzLnJlZHVjZShmdW5jdGlvbiAobWFwLCBzY2FsZSkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1hcCksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIHNjYWxlLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsIHNjYWxlKSkpO1xuICB9LCB7fSk7XG59O1xuXG4vKipcbiAqIEZvcmNlIHRleHQgdG8gd3JhcCBvbiBuYXR1cmFsIHdvcmQgYnJlYWtzIChlLmcuIHNwYWNlcyAmIGh5cGhlbnMpXG4gKiBodHRwczovL2Nzcy10cmlja3MuY29tL3NuaXBwZXRzL2Nzcy9wcmV2ZW50LWxvbmctdXJscy1mcm9tLWJyZWFraW5nLW91dC1vZi1jb250YWluZXIvXG4gKi9cbmV4cG9ydCB2YXIgZXVpVGV4dEJyZWFrV29yZCA9IGZ1bmN0aW9uIGV1aVRleHRCcmVha1dvcmQoKSB7XG4gIHJldHVybiBcIlxcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZCAhaW1wb3J0YW50OyAvLyBtYWtlcyBzdXJlIHRoZSBsb25nIHN0cmluZyB3aWxsIHdyYXAgYW5kIG5vdCBidXN0IG91dCBvZiB0aGUgY29udGFpbmVyXFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xcblwiO1xufTtcblxuLyoqXG4gKiBQcmV2ZW50IHRleHQgZnJvbSB3cmFwcGluZyBvbnRvIG11bHRpcGxlIGxpbmVzLCBhbmQgdHJ1bmNhdGUgd2l0aCBhbiBlbGxpcHNpcy5cbiAqL1xuZXhwb3J0IHZhciBldWlUZXh0VHJ1bmNhdGUgPSBmdW5jdGlvbiBldWlUZXh0VHJ1bmNhdGUoKSB7XG4gIHZhciBtYXhXaWR0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJzEwMCUnO1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBtYXhXaWR0aCkgLy8gRW5zdXJlIHRoYXQgdGhlIG5vZGUgaGFzIGEgbWF4aW11bSB3aWR0aCBhZnRlciB3aGljaCB0cnVuY2F0aW9uIGNhbiBvY2N1clxuICAsIFwiXFxuICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcyAhaW1wb3J0YW50O1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcCAhaW1wb3J0YW50O1xcblwiKTtcbn07XG5cbi8qKlxuICogRml4ZWQtd2lkdGggbnVtYmVycyBmb3IgdGFidWxhciBkYXRhXG4gKi9cbmV4cG9ydCB2YXIgZXVpTnVtYmVyRm9ybWF0ID0gZnVuY3Rpb24gZXVpTnVtYmVyRm9ybWF0KF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4gXCJcXG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCIuY29uY2F0KGV1aVRoZW1lLmZvbnQuZmVhdHVyZVNldHRpbmdzLCBcIiwgJ3RudW0nIDE7XFxuXCIpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgc29ydE1hcEJ5U21hbGxUb0xhcmdlVmFsdWVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnJlYWtwb2ludC9fc29ydGluZyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL2hvb2tzJztcbi8qKlxuICogR2VuZXJhdGVzIGEgQ1NTIG1lZGlhIHF1ZXJ5IHJ1bGUgc3RyaW5nIGJhc2VkIG9uIHRoZSBpbnB1dCBicmVha3BvaW50ICpyYW5nZXMqLlxuICogRXhhbXBsZXMgd2l0aCBkZWZhdWx0IHRoZW1lIGJyZWFrcG9pbnRzOlxuICpcbiAqIGV1aUJyZWFrcG9pbnQoWydzJ10pIGJlY29tZXMgYEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTc1cHgpIGFuZCAobWF4LXdpZHRoOiA3NjdweClgXG4gKiBldWlCcmVha3BvaW50KFsncycsICdsJ10pIGJlY29tZXMgYEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTc1cHgpIGFuZCAobWF4LXdpZHRoOiAxMTk5cHgpYFxuICpcbiAqIFVzZSB0aGUgc21hbGxlc3QgYW5kIGxhcmdlc3Qgc2l6ZXMgdG8gZ2VuZXJhdGUgbWVkaWEgcXVlcmllcyB3aXRoIG9ubHkgbWluL21heC13aWR0aC5cbiAqIEV4YW1wbGVzIHdpdGggZGVmYXVsdCB0aGVtZSBicmVha3BvaW50czpcbiAqXG4gKiBldWlCcmVha3BvaW50KFsneHMnLCAnbSddKSBiZWNvbWVzIGBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDk5MXB4KWBcbiAqIGV1aUJyZWFrcG9pbnQoWydsJywgJ3hsJ10pIGJlY29tZXMgYEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogOTkycHgpYFxuICovXG5leHBvcnQgdmFyIGV1aUJyZWFrcG9pbnQgPSBmdW5jdGlvbiBldWlCcmVha3BvaW50KF9yZWYsIHNpemVzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIC8vIEVuc3VyZSB3ZSBpbmhlcml0IGFueSB0aGVtZSBicmVha3BvaW50IG92ZXJyaWRlcyAmIHNvcnQgYnkgc21hbGwgdG8gbGFyZ2VcbiAgdmFyIG9yZGVyZWRCcmVha3BvaW50cyA9IE9iamVjdC5rZXlzKHNvcnRNYXBCeVNtYWxsVG9MYXJnZVZhbHVlcyhldWlUaGVtZS5icmVha3BvaW50KSk7XG5cbiAgLy8gRW5zdXJlIHRoZSBzaXplcyBhcnJheSBpcyBpbiB0aGUgY29ycmVjdCBhc2NlbmRpbmcgc2l6ZSBvcmRlclxuICB2YXIgb3JkZXJlZFNpemVzID0gc2l6ZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBvcmRlcmVkQnJlYWtwb2ludHMuaW5kZXhPZihhKSAtIG9yZGVyZWRCcmVha3BvaW50cy5pbmRleE9mKGIpO1xuICB9KTtcbiAgdmFyIGZpcnN0QnJlYWtwb2ludCA9IG9yZGVyZWRTaXplc1swXTtcbiAgdmFyIG1pbkJyZWFrcG9pbnRTaXplID0gZXVpVGhlbWUuYnJlYWtwb2ludFtmaXJzdEJyZWFrcG9pbnRdO1xuICB2YXIgbGFzdEJyZWFrcG9pbnQgPSBvcmRlcmVkU2l6ZXNbc2l6ZXMubGVuZ3RoIC0gMV07XG4gIHZhciBtYXhCcmVha3BvaW50U2l6ZTtcblxuICAvLyBUbyBnZXQgdGhlIGNvcnJlY3Qgc2NyZWVuIHJhbmdlLCB3ZSBzZXQgdGhlIG1heC13aWR0aCB0byB0aGUgbmV4dCBicmVha3BvaW50XG4gIC8vIHNpemUgaW4gdGhlIHNpemVzIGFycmF5ICh1bmxlc3MgdGhlIHNpemUgaXMgYWxyZWFkeSB0aGUgbGFyZ2VzdCBicmVha3BvaW50KVxuICBpZiAobGFzdEJyZWFrcG9pbnQgIT09IG9yZGVyZWRCcmVha3BvaW50c1tvcmRlcmVkQnJlYWtwb2ludHMubGVuZ3RoIC0gMV0pIHtcbiAgICB2YXIgbmV4dEJyZWFrcG9pbnQgPSBvcmRlcmVkQnJlYWtwb2ludHMuaW5kZXhPZihsYXN0QnJlYWtwb2ludCkgKyAxO1xuICAgIG1heEJyZWFrcG9pbnRTaXplID0gZXVpVGhlbWUuYnJlYWtwb2ludFtvcmRlcmVkQnJlYWtwb2ludHNbbmV4dEJyZWFrcG9pbnRdXTtcbiAgfVxuICByZXR1cm4gWydAbWVkaWEgb25seSBzY3JlZW4nLCBtaW5CcmVha3BvaW50U2l6ZSA/IFwiKG1pbi13aWR0aDogXCIuY29uY2F0KG1pbkJyZWFrcG9pbnRTaXplLCBcInB4KVwiKSA6IGZhbHNlLFxuICAvLyBJZiAwLCBkb24ndCByZW5kZXIgYSBtaW4td2lkdGhcbiAgbWF4QnJlYWtwb2ludFNpemUgPyBcIihtYXgtd2lkdGg6IFwiLmNvbmNhdChtYXhCcmVha3BvaW50U2l6ZSAtIDEsIFwicHgpXCIpIDogZmFsc2UgLy8gSWYgdW5kZWZpbmVkLCBkb24ndCByZW5kZXIgYSBtYXgtd2lkdGhcbiAgXS5maWx0ZXIoQm9vbGVhbikuam9pbignIGFuZCAnKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aUJyZWFrcG9pbnQgPSBmdW5jdGlvbiB1c2VFdWlCcmVha3BvaW50KHNpemVzKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlCcmVha3BvaW50KGV1aVRoZW1lLCBzaXplcyk7XG59O1xuXG4vKipcbiAqIE1pbi9NYXggd2lkdGggYnJlYWtwb2ludCB1dGlsaXRpZXMgdGhhdCBnZW5lcmF0ZSBvbmx5IGEgc2luZ2xlIG1pbi9tYXggcXVlcnkvYm91bmRcbiAqXG4gKiAqVW5saWtlIHRoZSBhYm92ZSBldWlCcmVha3BvaW50IHV0aWxpdHkqLCB0aGVzZSB1dGlsaXRpZXMgdHJlYXQgYnJlYWtwb2ludFxuICogc2l6ZXMgYXMgYSBvbmUtZGltZW5zaW9uYWwgcG9pbnQsIHJhdGhlciB0aGFuIGEgdHdvLWRpbWVuc2lvbmFsICpzY3JlZW4gcmFuZ2UqLlxuICogRXhhbXBsZXMgd2l0aCBkZWZhdWx0IHRoZW1lIGJyZWFrcG9pbnRzOlxuICpcbiAqIGV1aU1heEJyZWFrcG9pbnQoJ20nKSBiZWNvbWVzIGBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KWBcbiAqIGV1aU1pbkJyZWFrcG9pbnQoJ20nKSBiZWNvbWVzIGBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KWBcbiAqXG4gKiBUaGlzIGlzIHNhZmVyIGFuZCBtb3JlIGludGVudGlvbmFsIHRvIHVzZSB0aGFuIGV1aUJyZWFrcG9pbnQoWyd4cycsICdzJ10pIC8gZXVpQnJlYWtwb2ludChbJ20nLCAneGwnXSlcbiAqIGluIHRoZSBldmVudCB0aGF0IGNvbnN1bWVycyBhZGQgbGFyZ2VyIG9yIHNtYWxsZXIgY3VzdG9tIGJyZWFrcG9pbnRzIChlLmcgJ3h4cycgb3IgYHh4bGApXG4gKiBhbmQgaWYgdGhlIGludGVudGlvbiBvZiB0aGUgbWVkaWEgcXVlcnkgaXMgYWN0dWFsbHkgXCJtIGFuZCBiZWxvdy9hYm92ZVwiIHZzLiBcIm9ubHkgc2NyZWVucyBtL2wveGxcIi5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aU1pbkJyZWFrcG9pbnQgPSBmdW5jdGlvbiBldWlNaW5CcmVha3BvaW50KF9yZWYyLCBzaXplKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICB2YXIgbWluQnJlYWtwb2ludFNpemUgPSBldWlUaGVtZS5icmVha3BvaW50W3NpemVdO1xuICBpZiAobWluQnJlYWtwb2ludFNpemUpIHtcbiAgICByZXR1cm4gXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IFwiLmNvbmNhdChtaW5CcmVha3BvaW50U2l6ZSwgXCJweClcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS53YXJuKFwiSW52YWxpZCBtaW4gYnJlYWtwb2ludCBzaXplOiBcIi5jb25jYXQoc2l6ZSkpO1xuICAgIHJldHVybiAnQG1lZGlhIG9ubHkgc2NyZWVuJztcbiAgfVxufTtcbmV4cG9ydCB2YXIgdXNlRXVpTWluQnJlYWtwb2ludCA9IGZ1bmN0aW9uIHVzZUV1aU1pbkJyZWFrcG9pbnQoc2l6ZSkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpTWluQnJlYWtwb2ludChldWlUaGVtZSwgc2l6ZSk7XG59O1xuZXhwb3J0IHZhciBldWlNYXhCcmVha3BvaW50ID0gZnVuY3Rpb24gZXVpTWF4QnJlYWtwb2ludChfcmVmMywgc2l6ZSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMy5ldWlUaGVtZTtcbiAgdmFyIG1heEJyZWFrcG9pbnRTaXplID0gZXVpVGhlbWUuYnJlYWtwb2ludFtzaXplXTtcbiAgaWYgKG1heEJyZWFrcG9pbnRTaXplKSB7XG4gICAgcmV0dXJuIFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiBcIi5jb25jYXQobWF4QnJlYWtwb2ludFNpemUgLSAxLCBcInB4KVwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLndhcm4oXCJJbnZhbGlkIG1heCBicmVha3BvaW50IHNpemU6IFwiLmNvbmNhdChzaXplKSk7XG4gICAgcmV0dXJuICdAbWVkaWEgb25seSBzY3JlZW4nO1xuICB9XG59O1xuZXhwb3J0IHZhciB1c2VFdWlNYXhCcmVha3BvaW50ID0gZnVuY3Rpb24gdXNlRXVpTWF4QnJlYWtwb2ludChzaXplKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlNYXhCcmVha3BvaW50KGV1aVRoZW1lLCBzaXplKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgcmVzZXRTdHlsZXMgPSBcIlxcbi8qIC8vIEFkYXB0ZWQgZnJvbSBFcmljIE1leWVyJ3MgcmVzZXQgKGh0dHA6Ly9tZXllcndlYi5jb20vZXJpYy90b29scy9jc3MvcmVzZXQvLCB2Mi4wIHwgMjAxMTAxMjYpLiAqL1xcblxcblxcbiosICo6YmVmb3JlLCAqOmFmdGVyIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbmh0bWwsIGJvZHksIGRpdiwgc3BhbiwgYXBwbGV0LCBvYmplY3QsIGlmcmFtZSxcXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBwLCBibG9ja3F1b3RlLCBwcmUsXFxuYSwgYWJiciwgYWNyb255bSwgYWRkcmVzcywgYmlnLCBjaXRlLCBjb2RlLFxcbmRlbCwgZGZuLCBlbSwgaW1nLCBpbnMsIGtiZCwgcSwgcywgc2FtcCxcXG5zbWFsbCwgc3RyaWtlLCBzdHJvbmcsIHN1Yiwgc3VwLCB0dCwgdmFyLFxcbmIsIHUsIGksIGNlbnRlcixcXG5kbCwgZHQsIGRkLCBvbCwgdWwsIGxpLFxcbmZpZWxkc2V0LCBmb3JtLCBsYWJlbCwgbGVnZW5kLFxcbnRhYmxlLCBjYXB0aW9uLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0ciwgdGgsIHRkLFxcbmFydGljbGUsIGFzaWRlLCBjYW52YXMsIGRldGFpbHMsIGVtYmVkLFxcbmZpZ3VyZSwgZmlnY2FwdGlvbiwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCxcXG5tZW51LCBuYXYsIG91dHB1dCwgcnVieSwgc2VjdGlvbiwgc3VtbWFyeSxcXG50aW1lLCBtYXJrLCBhdWRpbywgdmlkZW8ge1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcXG59XFxuXFxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCB7XFxuICBmb250LWZhbWlseTogaW5oZXJpdDtcXG4gIGZvbnQtd2VpZ2h0OiBpbmhlcml0O1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbn1cXG5cXG4vKiBIVE1MNSBkaXNwbGF5LXJvbGUgcmVzZXQgZm9yIG9sZGVyIGJyb3dzZXJzICovXFxuYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSxcXG5mb290ZXIsIGhlYWRlciwgaGdyb3VwLCBtZW51LCBuYXYsIHNlY3Rpb24ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbmFbaHJlZl0sXFxuYnV0dG9uLFxcbltyb2xlPSdidXR0b24nXSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbmJ1dHRvbiB7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgcGFkZGluZzogMDtcXG4gIG1hcmdpbjogMDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG59XFxuXFxuaW5wdXQge1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuaW5wdXQ6ZGlzYWJsZWQge1xcbiAgb3BhY2l0eTogMTsgLyogcmVxdWlyZWQgb24gaU9TICovXFxufVxcblxcbm9sLFxcbnVsIHtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxufVxcblxcbmJsb2NrcXVvdGUsXFxucSB7XFxuICBxdW90ZXM6IG5vbmU7XFxufVxcblxcbmJsb2NrcXVvdGU6YmVmb3JlLFxcbmJsb2NrcXVvdGU6YWZ0ZXIsXFxucTpiZWZvcmUsXFxucTphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG59XFxuXFxudGFibGUge1xcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG4gIGJvcmRlci1zcGFjaW5nOiAwO1xcbn1cXG5cXG5ociB7XFxuICBtYXJnaW46IDA7XFxufVxcblxcbmZpZWxkc2V0IHtcXG4gIG1pbi1pbmxpbmUtc2l6ZTogYXV0bztcXG59XFxuXFxuLyogQ2hyb21lIGhhcyBhbiBpc3N1ZSBhcm91bmQgUlRMIGxhbmd1YWdlcyBpbiBTVkdzIHdoZW4gbGV0dGVyLXNwYWNpbmcgaXMgbmVnYXRpdmVcXG4gKiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD05NjY0ODBcXG4gKi9cXG5zdmcgdGV4dCB7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsICFpbXBvcnRhbnQ7XFxufVwiOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIEEgY29uc3RhbnQgc3RvcmluZyB0aGUgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIG1lZGlhIHF1ZXJ5XG4gKiBzbyB0aGF0IHdoZW4gaXQgaXMgdHVybmVkIG9mZiwgYW5pbWF0aW9ucyBhcmUgbm90IHJ1bi5cbiAqL1xuZXhwb3J0IHZhciBldWlDYW5BbmltYXRlID0gJ0BtZWRpYSBzY3JlZW4gYW5kIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSc7XG5cbi8qKlxuICogQSBjb25zdGFudCBzdG9yaW5nIHRoZSBgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbmAgbWVkaWEgcXVlcnkgdGhhdCB3aWxsXG4gKiBvbmx5IGFwcGx5IHRoZSBjb250ZW50IGlmIHRoZSBzZXR0aW5nIGlzIG9mZiAocmVkdWNlKS5cbiAqL1xuZXhwb3J0IHZhciBldWlDYW50QW5pbWF0ZSA9ICdAbWVkaWEgc2NyZWVuIGFuZCAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSc7XG5cbi8qKlxuICogU3BlZWRzIC8gRHVyYXRpb25zIC8gRGVsYXlzXG4gKi9cblxuZXhwb3J0IHZhciBFdWlUaGVtZUFuaW1hdGlvblNwZWVkcyA9IFsnZXh0cmFGYXN0JywgJ2Zhc3QnLCAnbm9ybWFsJywgJ3Nsb3cnLCAnZXh0cmFTbG93J107XG4vKipcbiAqIEVhc2luZ3MgLyBUaW1pbmcgZnVuY3Rpb25zXG4gKi9cblxuZXhwb3J0IHZhciBFdWlUaGVtZUFuaW1hdGlvbkVhc2luZ3MgPSBbJ2JvdW5jZScsICdyZXNpc3RhbmNlJ107IiwgInZhciBfdGVtcGxhdGVPYmplY3QsIF90ZW1wbGF0ZU9iamVjdDIsIF90ZW1wbGF0ZU9iamVjdDMsIF90ZW1wbGF0ZU9iamVjdDQ7XG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHsgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KSB9IH0pKTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuZXhwb3J0IHZhciBldWlBbmltRmFkZUluID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG5cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcblwiXSkpKTtcbmV4cG9ydCB2YXIgZXVpQW5pbVNsaWRlSW5VcCA9IGZ1bmN0aW9uIGV1aUFuaW1TbGlkZUluVXAoc2l6ZSkge1xuICByZXR1cm4ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdDIgfHwgKF90ZW1wbGF0ZU9iamVjdDIgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgIDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKFwiLCBcIik7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbiAgfVxcblwiXSkpLCBzaXplKTtcbn07XG5leHBvcnQgdmFyIGV1aUFuaW1TbGlkZVggPSBmdW5jdGlvbiBldWlBbmltU2xpZGVYKHNpemUpIHtcbiAgcmV0dXJuIGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QzIHx8IChfdGVtcGxhdGVPYmplY3QzID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIDAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKFwiLCBcIik7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xcblxcbiAgfVxcblwiXSkpLCBzaXplKTtcbn07XG5leHBvcnQgdmFyIGV1aUFuaW1TY2FsZSA9IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3Q0IHx8IChfdGVtcGxhdGVPYmplY3Q0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG5cXG4gIDElIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcXG4gIH1cXG5cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgfVxcblwiXSkpKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbFNpemVDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbi8qXG4gKiBNaXhpbiB0aGF0IGhpZGVzIGVsZW1lbnRzIG9mZnNjcmVlbiB0byBvbmx5IGJlIHJlYWQgYnkgc2NyZWVuIHJlYWRlclxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9wdWxsLzUxMzAgYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9wdWxsLzUxNTIgZm9yIG1vcmUgaW5mb1xuICovXG5leHBvcnQgdmFyIGV1aVNjcmVlblJlYWRlck9ubHkgPSBmdW5jdGlvbiBldWlTY3JlZW5SZWFkZXJPbmx5KCkge1xuICByZXR1cm4gXCJcXG4gIC8qIFRha2UgdGhlIGVsZW1lbnQgb3V0IG9mIHRoZSBsYXlvdXQgKi9cXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIC8qIEtlZXAgaXQgdmVydGljYWxseSBpbmxpbmUgKi9cXG4gIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCd0b3AnLCAnYXV0bycpLCBcIlxcbiAgLyogQ2hyb21lIHJlcXVpcmVzIGEgbGVmdCB2YWx1ZSwgYW5kIFNlbGVuaXVtICh1c2VkIGJ5IEtpYmFuYSdzIEZUUikgcmVxdWlyZXMgYW4gb2ZmLXNjcmVlbiBwb3NpdGlvbiBmb3IgaXRzIC5nZXRWaXNpYmxlVGV4dCgpIHRvIG5vdCByZWdpc3RlciBTUi1vbmx5IHRleHQgKi9cXG4gIFwiKS5jb25jYXQobG9naWNhbENTUygnbGVmdCcsICctMTAwMDBweCcpLCBcIlxcbiAgLyogVGhlIGVsZW1lbnQgbXVzdCBoYXZlIGEgc2l6ZSAoZm9yIHNvbWUgc2NyZWVuIHJlYWRlcnMpICovXFxuICBcIikuY29uY2F0KGxvZ2ljYWxTaXplQ1NTKCcxcHgnLCAnMXB4JyksIFwiXFxuICAvKiBCdXQgcmVkdWNlIHRoZSB2aXNpYmxlIHNpemUgdG8gbm90aGluZyAqL1xcbiAgY2xpcDogcmVjdCgwIDAgMCAwKTtcXG4gIGNsaXAtcGF0aDogaW5zZXQoNTAlKTtcXG4gIC8qIEFuZCBlbnN1cmUgbm8gb3ZlcmZsb3dzIG9jY3VyICovXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgLyogQ2hyb21lIHJlcXVpcmVzIHRoZSBuZWdhdGl2ZSBtYXJnaW4gdG8gbm90IGNhdXNlIG92ZXJmbG93cyBvZiBwYXJlbnQgY29udGFpbmVycyAqL1xcbiAgbWFyZ2luOiAtMXB4O1xcblwiKTtcbn07XG5cbi8qXG4gKiBTdHlsZXNcbiAqL1xuZXhwb3J0IHZhciBldWlTY3JlZW5SZWFkZXJPbmx5U3R5bGVzID0ge1xuICBldWlTY3JlZW5SZWFkZXJPbmx5OiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjcmVlblJlYWRlck9ubHkoKSwgXCI7bGFiZWw6ZXVpU2NyZWVuUmVhZGVyT25seTtcIiksXG4gICdldWlTY3JlZW5SZWFkZXJPbmx5LXNob3dPbkZvY3VzJzogLyojX19QVVJFX18qL2NzcyhcIiY6bm90KDpmb2N1cywgOmFjdGl2ZSwgOmZvY3VzLXdpdGhpbil7XCIsIGV1aVNjcmVlblJlYWRlck9ubHkoKSwgXCI7fTtsYWJlbDpldWlTY3JlZW5SZWFkZXJPbmx5LXNob3dPbkZvY3VzO1wiKVxufTsiLCAiY29uc3QgY2FuZGlkYXRlU2VsZWN0b3JzID0gW1xuICAnaW5wdXQnLFxuICAnc2VsZWN0JyxcbiAgJ3RleHRhcmVhJyxcbiAgJ2FbaHJlZl0nLFxuICAnYnV0dG9uJyxcbiAgJ1t0YWJpbmRleF06bm90KHNsb3QpJyxcbiAgJ2F1ZGlvW2NvbnRyb2xzXScsXG4gICd2aWRlb1tjb250cm9sc10nLFxuICAnW2NvbnRlbnRlZGl0YWJsZV06bm90KFtjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiXSknLFxuICAnZGV0YWlscz5zdW1tYXJ5OmZpcnN0LW9mLXR5cGUnLFxuICAnZGV0YWlscycsXG5dO1xuY29uc3QgY2FuZGlkYXRlU2VsZWN0b3IgPSAvKiAjX19QVVJFX18gKi8gY2FuZGlkYXRlU2VsZWN0b3JzLmpvaW4oJywnKTtcblxuY29uc3QgTm9FbGVtZW50ID0gdHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnO1xuXG5jb25zdCBtYXRjaGVzID0gTm9FbGVtZW50XG4gID8gZnVuY3Rpb24gKCkge31cbiAgOiBFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzIHx8XG4gICAgRWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3IgfHxcbiAgICBFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG5cbmNvbnN0IGdldFJvb3ROb2RlID1cbiAgIU5vRWxlbWVudCAmJiBFbGVtZW50LnByb3RvdHlwZS5nZXRSb290Tm9kZVxuICAgID8gKGVsZW1lbnQpID0+IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKVxuICAgIDogKGVsZW1lbnQpID0+IGVsZW1lbnQub3duZXJEb2N1bWVudDtcblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsIGNvbnRhaW5lciB0byBjaGVjayBpblxuICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlQ29udGFpbmVyIGFkZCBjb250YWluZXIgdG8gY2hlY2tcbiAqIEBwYXJhbSB7KG5vZGU6IEVsZW1lbnQpID0+IGJvb2xlYW59IGZpbHRlciBmaWx0ZXIgY2FuZGlkYXRlc1xuICogQHJldHVybnMge0VsZW1lbnRbXX1cbiAqL1xuY29uc3QgZ2V0Q2FuZGlkYXRlcyA9IGZ1bmN0aW9uIChlbCwgaW5jbHVkZUNvbnRhaW5lciwgZmlsdGVyKSB7XG4gIGxldCBjYW5kaWRhdGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KFxuICAgIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoY2FuZGlkYXRlU2VsZWN0b3IpXG4gICk7XG4gIGlmIChpbmNsdWRlQ29udGFpbmVyICYmIG1hdGNoZXMuY2FsbChlbCwgY2FuZGlkYXRlU2VsZWN0b3IpKSB7XG4gICAgY2FuZGlkYXRlcy51bnNoaWZ0KGVsKTtcbiAgfVxuICBjYW5kaWRhdGVzID0gY2FuZGlkYXRlcy5maWx0ZXIoZmlsdGVyKTtcbiAgcmV0dXJuIGNhbmRpZGF0ZXM7XG59O1xuXG4vKipcbiAqIEBjYWxsYmFjayBHZXRTaGFkb3dSb290XG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgdG8gY2hlY2sgZm9yIHNoYWRvdyByb290XG4gKiBAcmV0dXJucyB7U2hhZG93Um9vdHxib29sZWFufSBTaGFkb3dSb290IGlmIGF2YWlsYWJsZSBvciBib29sZWFuIGluZGljYXRpbmcgaWYgYSBzaGFkb3dSb290IGlzIGF0dGFjaGVkIGJ1dCBub3QgYXZhaWxhYmxlLlxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIFNoYWRvd1Jvb3RGaWx0ZXJcbiAqIEBwYXJhbSB7RWxlbWVudH0gc2hhZG93SG9zdE5vZGUgdGhlIGVsZW1lbnQgd2hpY2ggY29udGFpbnMgc2hhZG93IGNvbnRlbnRcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGEgc2hhZG93IHJvb3QgY291bGQgcG90ZW50aWFsbHkgY29udGFpbiB2YWxpZCBjYW5kaWRhdGVzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2FuZGlkYXRlc1Njb3BlXG4gKiBAcHJvcGVydHkge0VsZW1lbnR9IHNjb3BlIGNvbnRhaW5zIGlubmVyIGNhbmRpZGF0ZXNcbiAqIEBwcm9wZXJ0eSB7RWxlbWVudFtdfSBjYW5kaWRhdGVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJdGVyYXRpdmVPcHRpb25zXG4gKiBAcHJvcGVydHkge0dldFNoYWRvd1Jvb3R8Ym9vbGVhbn0gZ2V0U2hhZG93Um9vdCB0cnVlIGlmIHNoYWRvdyBzdXBwb3J0IGlzIGVuYWJsZWQ7IGZhbHN5IGlmIG5vdDtcbiAqICBpZiBhIGZ1bmN0aW9uLCBpbXBsaWVzIHNoYWRvdyBzdXBwb3J0IGlzIGVuYWJsZWQgYW5kIGVpdGhlciByZXR1cm5zIHRoZSBzaGFkb3cgcm9vdCBvZiBhbiBlbGVtZW50XG4gKiAgb3IgYSBib29sZWFuIHN0YXRpbmcgaWYgaXQgaGFzIGFuIHVuZGlzY2xvc2VkIHNoYWRvdyByb290XG4gKiBAcHJvcGVydHkgeyhub2RlOiBFbGVtZW50KSA9PiBib29sZWFufSBmaWx0ZXIgZmlsdGVyIGNhbmRpZGF0ZXNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmxhdHRlbiBpZiB0cnVlIHRoZW4gcmVzdWx0IHdpbGwgZmxhdHRlbiBhbnkgQ2FuZGlkYXRlc1Njb3BlIGludG8gdGhlIHJldHVybmVkIGxpc3RcbiAqIEBwcm9wZXJ0eSB7U2hhZG93Um9vdEZpbHRlcn0gc2hhZG93Um9vdEZpbHRlciBmaWx0ZXIgc2hhZG93IHJvb3RzO1xuICovXG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50W119IGVsZW1lbnRzIGxpc3Qgb2YgZWxlbWVudCBjb250YWluZXJzIHRvIG1hdGNoIGNhbmRpZGF0ZXMgZnJvbVxuICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlQ29udGFpbmVyIGFkZCBjb250YWluZXIgbGlzdCB0byBjaGVja1xuICogQHBhcmFtIHtJdGVyYXRpdmVPcHRpb25zfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7QXJyYXkuPEVsZW1lbnR8Q2FuZGlkYXRlc1Njb3BlPn1cbiAqL1xuY29uc3QgZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5ID0gZnVuY3Rpb24gKFxuICBlbGVtZW50cyxcbiAgaW5jbHVkZUNvbnRhaW5lcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXTtcbiAgY29uc3QgZWxlbWVudHNUb0NoZWNrID0gQXJyYXkuZnJvbShlbGVtZW50cyk7XG4gIHdoaWxlIChlbGVtZW50c1RvQ2hlY2subGVuZ3RoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzVG9DaGVjay5zaGlmdCgpO1xuICAgIGlmIChlbGVtZW50LnRhZ05hbWUgPT09ICdTTE9UJykge1xuICAgICAgLy8gYWRkIHNoYWRvdyBkb20gc2xvdCBzY29wZSAoc2xvdCBpdHNlbGYgY2Fubm90IGJlIGZvY3VzYWJsZSlcbiAgICAgIGNvbnN0IGFzc2lnbmVkID0gZWxlbWVudC5hc3NpZ25lZEVsZW1lbnRzKCk7XG4gICAgICBjb25zdCBjb250ZW50ID0gYXNzaWduZWQubGVuZ3RoID8gYXNzaWduZWQgOiBlbGVtZW50LmNoaWxkcmVuO1xuICAgICAgY29uc3QgbmVzdGVkQ2FuZGlkYXRlcyA9IGdldENhbmRpZGF0ZXNJdGVyYXRpdmVseShjb250ZW50LCB0cnVlLCBvcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLmZsYXR0ZW4pIHtcbiAgICAgICAgY2FuZGlkYXRlcy5wdXNoKC4uLm5lc3RlZENhbmRpZGF0ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FuZGlkYXRlcy5wdXNoKHtcbiAgICAgICAgICBzY29wZTogZWxlbWVudCxcbiAgICAgICAgICBjYW5kaWRhdGVzOiBuZXN0ZWRDYW5kaWRhdGVzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2hlY2sgY2FuZGlkYXRlIGVsZW1lbnRcbiAgICAgIGNvbnN0IHZhbGlkQ2FuZGlkYXRlID0gbWF0Y2hlcy5jYWxsKGVsZW1lbnQsIGNhbmRpZGF0ZVNlbGVjdG9yKTtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsaWRDYW5kaWRhdGUgJiZcbiAgICAgICAgb3B0aW9ucy5maWx0ZXIoZWxlbWVudCkgJiZcbiAgICAgICAgKGluY2x1ZGVDb250YWluZXIgfHwgIWVsZW1lbnRzLmluY2x1ZGVzKGVsZW1lbnQpKVxuICAgICAgKSB7XG4gICAgICAgIGNhbmRpZGF0ZXMucHVzaChlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgLy8gaXRlcmF0ZSBvdmVyIHNoYWRvdyBjb250ZW50IGlmIHBvc3NpYmxlXG4gICAgICBjb25zdCBzaGFkb3dSb290ID1cbiAgICAgICAgZWxlbWVudC5zaGFkb3dSb290IHx8XG4gICAgICAgIC8vIGNoZWNrIGZvciBhbiB1bmRpc2Nsb3NlZCBzaGFkb3dcbiAgICAgICAgKHR5cGVvZiBvcHRpb25zLmdldFNoYWRvd1Jvb3QgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICBvcHRpb25zLmdldFNoYWRvd1Jvb3QoZWxlbWVudCkpO1xuXG4gICAgICBjb25zdCB2YWxpZFNoYWRvd1Jvb3QgPVxuICAgICAgICAhb3B0aW9ucy5zaGFkb3dSb290RmlsdGVyIHx8IG9wdGlvbnMuc2hhZG93Um9vdEZpbHRlcihlbGVtZW50KTtcblxuICAgICAgaWYgKHNoYWRvd1Jvb3QgJiYgdmFsaWRTaGFkb3dSb290KSB7XG4gICAgICAgIC8vIGFkZCBzaGFkb3cgZG9tIHNjb3BlIElJRiBhIHNoYWRvdyByb290IG5vZGUgd2FzIGdpdmVuOyBvdGhlcndpc2UsIGFuIHVuZGlzY2xvc2VkXG4gICAgICAgIC8vICBzaGFkb3cgZXhpc3RzLCBzbyBsb29rIGF0IGxpZ2h0IGRvbSBjaGlsZHJlbiBhcyBmYWxsYmFjayBCVVQgY3JlYXRlIGEgc2NvcGUgZm9yIGFueVxuICAgICAgICAvLyAgY2hpbGQgY2FuZGlkYXRlcyBmb3VuZCBiZWNhdXNlIHRoZXkncmUgbGlrZWx5IHNsb3R0ZWQgZWxlbWVudHMgKGVsZW1lbnRzIHRoYXQgYXJlXG4gICAgICAgIC8vICBjaGlsZHJlbiBvZiB0aGUgd2ViIGNvbXBvbmVudCBlbGVtZW50ICh3aGljaCBoYXMgdGhlIHNoYWRvdyksIGluIHRoZSBsaWdodCBkb20sIGJ1dFxuICAgICAgICAvLyAgc2xvdHRlZCBzb21ld2hlcmUgX2luc2lkZV8gdGhlIHVuZGlzY2xvc2VkIHNoYWRvdykgLS0gdGhlIHNjb3BlIGlzIGNyZWF0ZWQgYmVsb3csXG4gICAgICAgIC8vICBfYWZ0ZXJfIHdlIHJldHVybiBmcm9tIHRoaXMgcmVjdXJzaXZlIGNhbGxcbiAgICAgICAgY29uc3QgbmVzdGVkQ2FuZGlkYXRlcyA9IGdldENhbmRpZGF0ZXNJdGVyYXRpdmVseShcbiAgICAgICAgICBzaGFkb3dSb290ID09PSB0cnVlID8gZWxlbWVudC5jaGlsZHJlbiA6IHNoYWRvd1Jvb3QuY2hpbGRyZW4sXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmxhdHRlbikge1xuICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaCguLi5uZXN0ZWRDYW5kaWRhdGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICAgICAgc2NvcGU6IGVsZW1lbnQsXG4gICAgICAgICAgICBjYW5kaWRhdGVzOiBuZXN0ZWRDYW5kaWRhdGVzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGVyZSdzIG5vdCBzaGFkb3cgc28ganVzdCBkaWcgaW50byB0aGUgZWxlbWVudCdzIChsaWdodCBkb20pIGNoaWxkcmVuXG4gICAgICAgIC8vICBfX3dpdGhvdXRfXyBnaXZpbmcgdGhlIGVsZW1lbnQgc3BlY2lhbCBzY29wZSB0cmVhdG1lbnRcbiAgICAgICAgZWxlbWVudHNUb0NoZWNrLnVuc2hpZnQoLi4uZWxlbWVudC5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjYW5kaWRhdGVzO1xufTtcblxuY29uc3QgZ2V0VGFiaW5kZXggPSBmdW5jdGlvbiAobm9kZSwgaXNTY29wZSkge1xuICBpZiAobm9kZS50YWJJbmRleCA8IDApIHtcbiAgICAvLyBpbiBDaHJvbWUsIDxkZXRhaWxzLz4sIDxhdWRpbyBjb250cm9scy8+IGFuZCA8dmlkZW8gY29udHJvbHMvPiBlbGVtZW50cyBnZXQgYSBkZWZhdWx0XG4gICAgLy8gYHRhYkluZGV4YCBvZiAtMSB3aGVuIHRoZSAndGFiaW5kZXgnIGF0dHJpYnV0ZSBpc24ndCBzcGVjaWZpZWQgaW4gdGhlIERPTSxcbiAgICAvLyB5ZXQgdGhleSBhcmUgc3RpbGwgcGFydCBvZiB0aGUgcmVndWxhciB0YWIgb3JkZXI7IGluIEZGLCB0aGV5IGdldCBhIGRlZmF1bHRcbiAgICAvLyBgdGFiSW5kZXhgIG9mIDA7IHNpbmNlIENocm9tZSBzdGlsbCBwdXRzIHRob3NlIGVsZW1lbnRzIGluIHRoZSByZWd1bGFyIHRhYlxuICAgIC8vIG9yZGVyLCBjb25zaWRlciB0aGVpciB0YWIgaW5kZXggdG8gYmUgMC5cbiAgICAvLyBBbHNvIGJyb3dzZXJzIGRvIG5vdCByZXR1cm4gYHRhYkluZGV4YCBjb3JyZWN0bHkgZm9yIGNvbnRlbnRFZGl0YWJsZSBub2RlcztcbiAgICAvLyBzbyBpZiB0aGV5IGRvbid0IGhhdmUgYSB0YWJpbmRleCBhdHRyaWJ1dGUgc3BlY2lmaWNhbGx5IHNldCwgYXNzdW1lIGl0J3MgMC5cbiAgICAvL1xuICAgIC8vIGlzU2NvcGUgaXMgcG9zaXRpdmUgZm9yIGN1c3RvbSBlbGVtZW50IHdpdGggc2hhZG93IHJvb3Qgb3Igc2xvdCB0aGF0IGJ5IGRlZmF1bHRcbiAgICAvLyBoYXZlIHRhYkluZGV4IC0xLCBidXQgbmVlZCB0byBiZSBzb3J0ZWQgYnkgZG9jdW1lbnQgb3JkZXIgaW4gb3JkZXIgZm9yIHRoZWlyXG4gICAgLy8gY29udGVudCB0byBiZSBpbnNlcnRlZCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvblxuICAgIGlmIChcbiAgICAgIChpc1Njb3BlIHx8XG4gICAgICAgIC9eKEFVRElPfFZJREVPfERFVEFJTFMpJC8udGVzdChub2RlLnRhZ05hbWUpIHx8XG4gICAgICAgIG5vZGUuaXNDb250ZW50RWRpdGFibGUpICYmXG4gICAgICBpc05hTihwYXJzZUludChub2RlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSwgMTApKVxuICAgICkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGUudGFiSW5kZXg7XG59O1xuXG5jb25zdCBzb3J0T3JkZXJlZFRhYmJhYmxlcyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHJldHVybiBhLnRhYkluZGV4ID09PSBiLnRhYkluZGV4XG4gICAgPyBhLmRvY3VtZW50T3JkZXIgLSBiLmRvY3VtZW50T3JkZXJcbiAgICA6IGEudGFiSW5kZXggLSBiLnRhYkluZGV4O1xufTtcblxuY29uc3QgaXNJbnB1dCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdJTlBVVCc7XG59O1xuXG5jb25zdCBpc0hpZGRlbklucHV0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIGlzSW5wdXQobm9kZSkgJiYgbm9kZS50eXBlID09PSAnaGlkZGVuJztcbn07XG5cbmNvbnN0IGlzRGV0YWlsc1dpdGhTdW1tYXJ5ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgY29uc3QgciA9XG4gICAgbm9kZS50YWdOYW1lID09PSAnREVUQUlMUycgJiZcbiAgICBBcnJheS5wcm90b3R5cGUuc2xpY2VcbiAgICAgIC5hcHBseShub2RlLmNoaWxkcmVuKVxuICAgICAgLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC50YWdOYW1lID09PSAnU1VNTUFSWScpO1xuICByZXR1cm4gcjtcbn07XG5cbmNvbnN0IGdldENoZWNrZWRSYWRpbyA9IGZ1bmN0aW9uIChub2RlcywgZm9ybSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG5vZGVzW2ldLmNoZWNrZWQgJiYgbm9kZXNbaV0uZm9ybSA9PT0gZm9ybSkge1xuICAgICAgcmV0dXJuIG5vZGVzW2ldO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgaXNUYWJiYWJsZVJhZGlvID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgaWYgKCFub2RlLm5hbWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCByYWRpb1Njb3BlID0gbm9kZS5mb3JtIHx8IGdldFJvb3ROb2RlKG5vZGUpO1xuICBjb25zdCBxdWVyeVJhZGlvcyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHJhZGlvU2NvcGUucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICdpbnB1dFt0eXBlPVwicmFkaW9cIl1bbmFtZT1cIicgKyBuYW1lICsgJ1wiXSdcbiAgICApO1xuICB9O1xuXG4gIGxldCByYWRpb1NldDtcbiAgaWYgKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIHdpbmRvdy5DU1MgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIHdpbmRvdy5DU1MuZXNjYXBlID09PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHJhZGlvU2V0ID0gcXVlcnlSYWRpb3Mod2luZG93LkNTUy5lc2NhcGUobm9kZS5uYW1lKSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHJhZGlvU2V0ID0gcXVlcnlSYWRpb3Mobm9kZS5uYW1lKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnTG9va3MgbGlrZSB5b3UgaGF2ZSBhIHJhZGlvIGJ1dHRvbiB3aXRoIGEgbmFtZSBhdHRyaWJ1dGUgY29udGFpbmluZyBpbnZhbGlkIENTUyBzZWxlY3RvciBjaGFyYWN0ZXJzIGFuZCBuZWVkIHRoZSBDU1MuZXNjYXBlIHBvbHlmaWxsOiAlcycsXG4gICAgICAgIGVyci5tZXNzYWdlXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNoZWNrZWQgPSBnZXRDaGVja2VkUmFkaW8ocmFkaW9TZXQsIG5vZGUuZm9ybSk7XG4gIHJldHVybiAhY2hlY2tlZCB8fCBjaGVja2VkID09PSBub2RlO1xufTtcblxuY29uc3QgaXNSYWRpbyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHJldHVybiBpc0lucHV0KG5vZGUpICYmIG5vZGUudHlwZSA9PT0gJ3JhZGlvJztcbn07XG5cbmNvbnN0IGlzTm9uVGFiYmFibGVSYWRpbyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHJldHVybiBpc1JhZGlvKG5vZGUpICYmICFpc1RhYmJhYmxlUmFkaW8obm9kZSk7XG59O1xuXG5jb25zdCBpc1plcm9BcmVhID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4gd2lkdGggPT09IDAgJiYgaGVpZ2h0ID09PSAwO1xufTtcbmNvbnN0IGlzSGlkZGVuID0gZnVuY3Rpb24gKG5vZGUsIHsgZGlzcGxheUNoZWNrLCBnZXRTaGFkb3dSb290IH0pIHtcbiAgLy8gTk9URTogdmlzaWJpbGl0eSB3aWxsIGJlIGB1bmRlZmluZWRgIGlmIG5vZGUgaXMgZGV0YWNoZWQgZnJvbSB0aGUgZG9jdW1lbnRcbiAgLy8gIChzZWUgbm90ZXMgYWJvdXQgdGhpcyBmdXJ0aGVyIGRvd24pLCB3aGljaCBtZWFucyB3ZSB3aWxsIGNvbnNpZGVyIGl0IHZpc2libGVcbiAgLy8gICh0aGlzIGlzIGxlZ2FjeSBiZWhhdmlvciBmcm9tIGEgdmVyeSBsb25nIHdheSBiYWNrKVxuICAvLyBOT1RFOiB3ZSBjaGVjayB0aGlzIHJlZ2FyZGxlc3Mgb2YgYGRpc3BsYXlDaGVjaz1cIm5vbmVcImAgYmVjYXVzZSB0aGlzIGlzIGFcbiAgLy8gIF92aXNpYmlsaXR5XyBjaGVjaywgbm90IGEgX2Rpc3BsYXlfIGNoZWNrXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKG5vZGUpLnZpc2liaWxpdHkgPT09ICdoaWRkZW4nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBpc0RpcmVjdFN1bW1hcnkgPSBtYXRjaGVzLmNhbGwobm9kZSwgJ2RldGFpbHM+c3VtbWFyeTpmaXJzdC1vZi10eXBlJyk7XG4gIGNvbnN0IG5vZGVVbmRlckRldGFpbHMgPSBpc0RpcmVjdFN1bW1hcnkgPyBub2RlLnBhcmVudEVsZW1lbnQgOiBub2RlO1xuICBpZiAobWF0Y2hlcy5jYWxsKG5vZGVVbmRlckRldGFpbHMsICdkZXRhaWxzOm5vdChbb3Blbl0pIConKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gVGhlIHJvb3Qgbm9kZSBpcyB0aGUgc2hhZG93IHJvb3QgaWYgdGhlIG5vZGUgaXMgaW4gYSBzaGFkb3cgRE9NOyBzb21lIGRvY3VtZW50IG90aGVyd2lzZVxuICAvLyAgKGJ1dCBOT1QgX3RoZV8gZG9jdW1lbnQ7IHNlZSBzZWNvbmQgJ0lmJyBjb21tZW50IGJlbG93IGZvciBtb3JlKS5cbiAgLy8gSWYgcm9vdE5vZGUgaXMgc2hhZG93IHJvb3QsIGl0J2xsIGhhdmUgYSBob3N0LCB3aGljaCBpcyB0aGUgZWxlbWVudCB0byB3aGljaCB0aGUgc2hhZG93XG4gIC8vICBpcyBhdHRhY2hlZCwgYW5kIHRoZSBvbmUgd2UgbmVlZCB0byBjaGVjayBpZiBpdCdzIGluIHRoZSBkb2N1bWVudCBvciBub3QgKGJlY2F1c2UgdGhlXG4gIC8vICBzaGFkb3csIGFuZCBhbGwgbm9kZXMgaXQgY29udGFpbnMsIGlzIG5ldmVyIGNvbnNpZGVyZWQgaW4gdGhlIGRvY3VtZW50IHNpbmNlIHNoYWRvd3NcbiAgLy8gIGJlaGF2ZSBsaWtlIHNlbGYtY29udGFpbmVkIERPTXM7IGJ1dCBpZiB0aGUgc2hhZG93J3MgSE9TVCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgZG9jdW1lbnQsXG4gIC8vICBpcyBoaWRkZW4sIG9yIGlzIG5vdCBpbiB0aGUgZG9jdW1lbnQgaXRzZWxmIGJ1dCBpcyBkZXRhY2hlZCwgaXQgd2lsbCBhZmZlY3QgdGhlIHNoYWRvdydzXG4gIC8vICB2aXNpYmlsaXR5LCBpbmNsdWRpbmcgYWxsIHRoZSBub2RlcyBpdCBjb250YWlucykuIFRoZSBob3N0IGNvdWxkIGJlIGFueSBub3JtYWwgbm9kZSxcbiAgLy8gIG9yIGEgY3VzdG9tIGVsZW1lbnQgKGkuZS4gd2ViIGNvbXBvbmVudCkuIEVpdGhlciB3YXksIHRoYXQncyB0aGUgb25lIHRoYXQgaXMgY29uc2lkZXJlZFxuICAvLyAgcGFydCBvZiB0aGUgZG9jdW1lbnQsIG5vdCB0aGUgc2hhZG93IHJvb3QsIG5vciBhbnkgb2YgaXRzIGNoaWxkcmVuIChpLmUuIHRoZSBub2RlIGJlaW5nXG4gIC8vICB0ZXN0ZWQpLlxuICAvLyBJZiByb290Tm9kZSBpcyBub3QgYSBzaGFkb3cgcm9vdCwgaXQgd29uJ3QgaGF2ZSBhIGhvc3QsIGFuZCBzbyByb290Tm9kZSBzaG91bGQgYmUgdGhlXG4gIC8vICBkb2N1bWVudCAocGVyIHRoZSBkb2NzKSBhbmQgd2hpbGUgaXQncyBhIERvY3VtZW50LXR5cGUgb2JqZWN0LCB0aGF0IGRvY3VtZW50IGRvZXMgbm90XG4gIC8vICBhcHBlYXIgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG5vZGUncyBgb3duZXJEb2N1bWVudGAgZm9yIHNvbWUgcmVhc29uLCBzbyBpdCdzIHNhZmVyXG4gIC8vICB0byBpZ25vcmUgdGhlIHJvb3ROb2RlIGF0IHRoaXMgcG9pbnQsIGFuZCB1c2UgYG5vZGUub3duZXJEb2N1bWVudGAuIE90aGVyd2lzZSxcbiAgLy8gIHVzaW5nIGByb290Tm9kZS5jb250YWlucyhub2RlKWAgd2lsbCBfYWx3YXlzXyBiZSB0cnVlIHdlJ2xsIGdldCBmYWxzZS1wb3NpdGl2ZXMgd2hlblxuICAvLyAgbm9kZSBpcyBhY3R1YWxseSBkZXRhY2hlZC5cbiAgY29uc3Qgbm9kZVJvb3RIb3N0ID0gZ2V0Um9vdE5vZGUobm9kZSkuaG9zdDtcbiAgY29uc3Qgbm9kZUlzQXR0YWNoZWQgPVxuICAgIG5vZGVSb290SG9zdD8ub3duZXJEb2N1bWVudC5jb250YWlucyhub2RlUm9vdEhvc3QpIHx8XG4gICAgbm9kZS5vd25lckRvY3VtZW50LmNvbnRhaW5zKG5vZGUpO1xuXG4gIGlmICghZGlzcGxheUNoZWNrIHx8IGRpc3BsYXlDaGVjayA9PT0gJ2Z1bGwnKSB7XG4gICAgaWYgKHR5cGVvZiBnZXRTaGFkb3dSb290ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBmaWd1cmUgb3V0IGlmIHdlIHNob3VsZCBjb25zaWRlciB0aGUgbm9kZSB0byBiZSBpbiBhbiB1bmRpc2Nsb3NlZCBzaGFkb3cgYW5kIHVzZSB0aGVcbiAgICAgIC8vICAnbm9uLXplcm8tYXJlYScgZmFsbGJhY2tcbiAgICAgIGNvbnN0IG9yaWdpbmFsTm9kZSA9IG5vZGU7XG4gICAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gbm9kZS5wYXJlbnRFbGVtZW50O1xuICAgICAgICBjb25zdCByb290Tm9kZSA9IGdldFJvb3ROb2RlKG5vZGUpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcGFyZW50RWxlbWVudCAmJlxuICAgICAgICAgICFwYXJlbnRFbGVtZW50LnNoYWRvd1Jvb3QgJiZcbiAgICAgICAgICBnZXRTaGFkb3dSb290KHBhcmVudEVsZW1lbnQpID09PSB0cnVlIC8vIGNoZWNrIGlmIHRoZXJlJ3MgYW4gdW5kaXNjbG9zZWQgc2hhZG93XG4gICAgICAgICkge1xuICAgICAgICAgIC8vIG5vZGUgaGFzIGFuIHVuZGlzY2xvc2VkIHNoYWRvdyB3aGljaCBtZWFucyB3ZSBjYW4gb25seSB0cmVhdCBpdCBhcyBhIGJsYWNrIGJveCwgc28gd2VcbiAgICAgICAgICAvLyAgZmFsbCBiYWNrIHRvIGEgbm9uLXplcm8tYXJlYSB0ZXN0XG4gICAgICAgICAgcmV0dXJuIGlzWmVyb0FyZWEobm9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5hc3NpZ25lZFNsb3QpIHtcbiAgICAgICAgICAvLyBpdGVyYXRlIHVwIHNsb3RcbiAgICAgICAgICBub2RlID0gbm9kZS5hc3NpZ25lZFNsb3Q7XG4gICAgICAgIH0gZWxzZSBpZiAoIXBhcmVudEVsZW1lbnQgJiYgcm9vdE5vZGUgIT09IG5vZGUub3duZXJEb2N1bWVudCkge1xuICAgICAgICAgIC8vIGNyb3NzIHNoYWRvdyBib3VuZGFyeVxuICAgICAgICAgIG5vZGUgPSByb290Tm9kZS5ob3N0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGl0ZXJhdGUgdXAgbm9ybWFsIGRvbVxuICAgICAgICAgIG5vZGUgPSBwYXJlbnRFbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBvcmlnaW5hbE5vZGU7XG4gICAgfVxuICAgIC8vIGVsc2UsIGBnZXRTaGFkb3dSb290YCBtaWdodCBiZSB0cnVlLCBidXQgYWxsIHRoYXQgZG9lcyBpcyBlbmFibGUgc2hhZG93IERPTSBzdXBwb3J0XG4gICAgLy8gIChpLmUuIGl0IGRvZXMgbm90IGFsc28gcHJlc3VtZSB0aGF0IGFsbCBub2RlcyBtaWdodCBoYXZlIHVuZGlzY2xvc2VkIHNoYWRvd3MpOyBvclxuICAgIC8vICBpdCBtaWdodCBiZSBhIGZhbHN5IHZhbHVlLCB3aGljaCBtZWFucyBzaGFkb3cgRE9NIHN1cHBvcnQgaXMgZGlzYWJsZWRcblxuICAgIC8vIFNpbmNlIHdlIGRpZG4ndCBmaW5kIGl0IHNpdHRpbmcgaW4gYW4gdW5kaXNjbG9zZWQgc2hhZG93IChvciBzaGFkb3dzIGFyZSBkaXNhYmxlZClcbiAgICAvLyAgbm93IHdlIGNhbiBqdXN0IHRlc3QgdG8gc2VlIGlmIGl0IHdvdWxkIG5vcm1hbGx5IGJlIHZpc2libGUgb3Igbm90LCBwcm92aWRlZCBpdCdzXG4gICAgLy8gIGF0dGFjaGVkIHRvIHRoZSBtYWluIGRvY3VtZW50LlxuICAgIC8vIE5PVEU6IFdlIG11c3QgY29uc2lkZXIgY2FzZSB3aGVyZSBub2RlIGlzIGluc2lkZSBhIHNoYWRvdyBET00gYW5kIGdpdmVuIGRpcmVjdGx5IHRvXG4gICAgLy8gIGBpc1RhYmJhYmxlKClgIG9yIGBpc0ZvY3VzYWJsZSgpYCAtLSByZWdhcmRsZXNzIG9mIGBnZXRTaGFkb3dSb290YCBvcHRpb24gc2V0dGluZy5cblxuICAgIGlmIChub2RlSXNBdHRhY2hlZCkge1xuICAgICAgLy8gdGhpcyB3b3JrcyB3aGVyZXZlciB0aGUgbm9kZSBpczogaWYgdGhlcmUncyBhdCBsZWFzdCBvbmUgY2xpZW50IHJlY3QsIGl0J3NcbiAgICAgIC8vICBzb21laG93IGRpc3BsYXllZDsgaXQgYWxzbyBjb3ZlcnMgdGhlIENTUyAnZGlzcGxheTogY29udGVudHMnIGNhc2Ugd2hlcmUgdGhlXG4gICAgICAvLyAgbm9kZSBpdHNlbGYgaXMgaGlkZGVuIGluIHBsYWNlIG9mIGl0cyBjb250ZW50czsgYW5kIHRoZXJlJ3Mgbm8gbmVlZCB0byBzZWFyY2hcbiAgICAgIC8vICB1cCB0aGUgaGllcmFyY2h5IGVpdGhlclxuICAgICAgcmV0dXJuICFub2RlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIHRoZSBub2RlIGlzbid0IGF0dGFjaGVkIHRvIHRoZSBkb2N1bWVudCwgd2hpY2ggbWVhbnMgdGhlIGBnZXRDbGllbnRSZWN0cygpYFxuICAgIC8vICBBUEkgd2lsbCBfX2Fsd2F5c19fIHJldHVybiB6ZXJvIHJlY3RzICh0aGlzIGNhbiBoYXBwZW4sIGZvciBleGFtcGxlLCBpZiBSZWFjdFxuICAgIC8vICBpcyB1c2VkIHRvIHJlbmRlciBub2RlcyBvbnRvIGEgZGV0YWNoZWQgdHJlZSwgYXMgY29uZmlybWVkIGluIHRoaXMgdGhyZWFkOlxuICAgIC8vICBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzkxMTcjaXNzdWVjb21tZW50LTI4NDIyODg3MClcbiAgICAvL1xuICAgIC8vIEl0IGFsc28gbWVhbnMgdGhhdCBldmVuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpLmRpc3BsYXkgd2lsbCByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAvLyAgYmVjYXVzZSBzdHlsZXMgYXJlIG9ubHkgY29tcHV0ZWQgZm9yIG5vZGVzIHRoYXQgYXJlIGluIHRoZSBkb2N1bWVudC5cbiAgICAvL1xuICAgIC8vIE5PVEU6IFRISVMgSEFTIEJFRU4gVEhFIENBU0UgRk9SIFlFQVJTLiBJdCBpcyBub3QgbmV3LCBub3IgaXMgaXQgY2F1c2VkIGJ5IHRhYmJhYmxlXG4gICAgLy8gIHNvbWVob3cuIFRob3VnaCBpdCB3YXMgbmV2ZXIgc3RhdGVkIG9mZmljaWFsbHksIGFueW9uZSB3aG8gaGFzIGV2ZXIgdXNlZCB0YWJiYWJsZVxuICAgIC8vICBBUElzIG9uIG5vZGVzIGluIGRldGFjaGVkIGNvbnRhaW5lcnMgaGFzIGFjdHVhbGx5IGltcGxpY2l0bHkgdXNlZCB0YWJiYWJsZSBpbiB3aGF0XG4gICAgLy8gIHdhcyBsYXRlciAoYXMgb2YgdjUuMi4wIG9uIEFwciA5LCAyMDIxKSBjYWxsZWQgYGRpc3BsYXlDaGVjaz1cIm5vbmVcImAgbW9kZSAtLSBlc3NlbnRpYWxseVxuICAgIC8vICBjb25zaWRlcmluZyBfX2V2ZXJ5dGhpbmdfXyB0byBiZSB2aXNpYmxlIGJlY2F1c2Ugb2YgdGhlIGlubmFiaWxpdHkgdG8gZGV0ZXJtaW5lIHN0eWxlcy5cbiAgfSBlbHNlIGlmIChkaXNwbGF5Q2hlY2sgPT09ICdub24temVyby1hcmVhJykge1xuICAgIC8vIE5PVEU6IEV2ZW4gdGhvdWdoIHRoaXMgdGVzdHMgdGhhdCB0aGUgbm9kZSdzIGNsaWVudCByZWN0IGlzIG5vbi16ZXJvIHRvIGRldGVybWluZVxuICAgIC8vICB3aGV0aGVyIGl0J3MgZGlzcGxheWVkLCBhbmQgdGhhdCBhIGRldGFjaGVkIG5vZGUgd2lsbCBfX2Fsd2F5c19fIGhhdmUgYSB6ZXJvLWFyZWFcbiAgICAvLyAgY2xpZW50IHJlY3QsIHdlIGRvbid0IHNwZWNpYWwtY2FzZSBmb3Igd2hldGhlciB0aGUgbm9kZSBpcyBhdHRhY2hlZCBvciBub3QuIEluXG4gICAgLy8gIHRoaXMgbW9kZSwgd2UgZG8gd2FudCB0byBjb25zaWRlciBub2RlcyB0aGF0IGhhdmUgYSB6ZXJvIGFyZWEgdG8gYmUgaGlkZGVuIGF0IGFsbFxuICAgIC8vICB0aW1lcywgYW5kIHRoYXQgaW5jbHVkZXMgYXR0YWNoZWQgb3Igbm90LlxuICAgIHJldHVybiBpc1plcm9BcmVhKG5vZGUpO1xuICB9XG5cbiAgLy8gdmlzaWJsZSwgYXMgZmFyIGFzIHdlIGNhbiB0ZWxsLCBvciBwZXIgY3VycmVudCBgZGlzcGxheUNoZWNrYCBtb2RlXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8vIGZvcm0gZmllbGRzIChuZXN0ZWQpIGluc2lkZSBhIGRpc2FibGVkIGZpZWxkc2V0IGFyZSBub3QgZm9jdXNhYmxlL3RhYmJhYmxlXG4vLyAgdW5sZXNzIHRoZXkgYXJlIGluIHRoZSBfZmlyc3RfIDxsZWdlbmQ+IGVsZW1lbnQgb2YgdGhlIHRvcC1tb3N0IGRpc2FibGVkXG4vLyAgZmllbGRzZXRcbmNvbnN0IGlzRGlzYWJsZWRGcm9tRmllbGRzZXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAoL14oSU5QVVR8QlVUVE9OfFNFTEVDVHxURVhUQVJFQSkkLy50ZXN0KG5vZGUudGFnTmFtZSkpIHtcbiAgICBsZXQgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50RWxlbWVudDtcbiAgICAvLyBjaGVjayBpZiBgbm9kZWAgaXMgY29udGFpbmVkIGluIGEgZGlzYWJsZWQgPGZpZWxkc2V0PlxuICAgIHdoaWxlIChwYXJlbnROb2RlKSB7XG4gICAgICBpZiAocGFyZW50Tm9kZS50YWdOYW1lID09PSAnRklFTERTRVQnICYmIHBhcmVudE5vZGUuZGlzYWJsZWQpIHtcbiAgICAgICAgLy8gbG9vayBmb3IgdGhlIGZpcnN0IDxsZWdlbmQ+IGFtb25nIHRoZSBjaGlsZHJlbiBvZiB0aGUgZGlzYWJsZWQgPGZpZWxkc2V0PlxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudE5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjaGlsZCA9IHBhcmVudE5vZGUuY2hpbGRyZW4uaXRlbShpKTtcbiAgICAgICAgICAvLyB3aGVuIHRoZSBmaXJzdCA8bGVnZW5kPiAoaW4gZG9jdW1lbnQgb3JkZXIpIGlzIGZvdW5kXG4gICAgICAgICAgaWYgKGNoaWxkLnRhZ05hbWUgPT09ICdMRUdFTkQnKSB7XG4gICAgICAgICAgICAvLyBpZiBpdHMgcGFyZW50IDxmaWVsZHNldD4gaXMgbm90IG5lc3RlZCBpbiBhbm90aGVyIGRpc2FibGVkIDxmaWVsZHNldD4sXG4gICAgICAgICAgICAvLyByZXR1cm4gd2hldGhlciBgbm9kZWAgaXMgYSBkZXNjZW5kYW50IG9mIGl0cyBmaXJzdCA8bGVnZW5kPlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMuY2FsbChwYXJlbnROb2RlLCAnZmllbGRzZXRbZGlzYWJsZWRdIConKVxuICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgOiAhY2hpbGQuY29udGFpbnMobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHRoZSBkaXNhYmxlZCA8ZmllbGRzZXQ+IGNvbnRhaW5pbmcgYG5vZGVgIGhhcyBubyA8bGVnZW5kPlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgLy8gZWxzZSwgbm9kZSdzIHRhYmJhYmxlL2ZvY3VzYWJsZSBzdGF0ZSBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IGEgZmllbGRzZXQnc1xuICAvLyAgZW5hYmxlZC9kaXNhYmxlZCBzdGF0ZVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlID0gZnVuY3Rpb24gKG9wdGlvbnMsIG5vZGUpIHtcbiAgaWYgKFxuICAgIG5vZGUuZGlzYWJsZWQgfHxcbiAgICBpc0hpZGRlbklucHV0KG5vZGUpIHx8XG4gICAgaXNIaWRkZW4obm9kZSwgb3B0aW9ucykgfHxcbiAgICAvLyBGb3IgYSBkZXRhaWxzIGVsZW1lbnQgd2l0aCBhIHN1bW1hcnksIHRoZSBzdW1tYXJ5IGVsZW1lbnQgZ2V0cyB0aGUgZm9jdXNcbiAgICBpc0RldGFpbHNXaXRoU3VtbWFyeShub2RlKSB8fFxuICAgIGlzRGlzYWJsZWRGcm9tRmllbGRzZXQobm9kZSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlID0gZnVuY3Rpb24gKG9wdGlvbnMsIG5vZGUpIHtcbiAgaWYgKFxuICAgIGlzTm9uVGFiYmFibGVSYWRpbyhub2RlKSB8fFxuICAgIGdldFRhYmluZGV4KG5vZGUpIDwgMCB8fFxuICAgICFpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlKG9wdGlvbnMsIG5vZGUpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGlzVmFsaWRTaGFkb3dSb290VGFiYmFibGUgPSBmdW5jdGlvbiAoc2hhZG93SG9zdE5vZGUpIHtcbiAgY29uc3QgdGFiSW5kZXggPSBwYXJzZUludChzaGFkb3dIb3N0Tm9kZS5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JyksIDEwKTtcbiAgaWYgKGlzTmFOKHRhYkluZGV4KSB8fCB0YWJJbmRleCA+PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gSWYgYSBjdXN0b20gZWxlbWVudCBoYXMgYW4gZXhwbGljaXQgbmVnYXRpdmUgdGFiaW5kZXgsXG4gIC8vIGJyb3dzZXJzIHdpbGwgbm90IGFsbG93IHRhYiB0YXJnZXRpbmcgc2FpZCBlbGVtZW50J3MgY2hpbGRyZW4uXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheS48RWxlbWVudHxDYW5kaWRhdGVzU2NvcGU+fSBjYW5kaWRhdGVzXG4gKiBAcmV0dXJucyBFbGVtZW50W11cbiAqL1xuY29uc3Qgc29ydEJ5T3JkZXIgPSBmdW5jdGlvbiAoY2FuZGlkYXRlcykge1xuICBjb25zdCByZWd1bGFyVGFiYmFibGVzID0gW107XG4gIGNvbnN0IG9yZGVyZWRUYWJiYWJsZXMgPSBbXTtcbiAgY2FuZGlkYXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpKSB7XG4gICAgY29uc3QgaXNTY29wZSA9ICEhaXRlbS5zY29wZTtcbiAgICBjb25zdCBlbGVtZW50ID0gaXNTY29wZSA/IGl0ZW0uc2NvcGUgOiBpdGVtO1xuICAgIGNvbnN0IGNhbmRpZGF0ZVRhYmluZGV4ID0gZ2V0VGFiaW5kZXgoZWxlbWVudCwgaXNTY29wZSk7XG4gICAgY29uc3QgZWxlbWVudHMgPSBpc1Njb3BlID8gc29ydEJ5T3JkZXIoaXRlbS5jYW5kaWRhdGVzKSA6IGVsZW1lbnQ7XG4gICAgaWYgKGNhbmRpZGF0ZVRhYmluZGV4ID09PSAwKSB7XG4gICAgICBpc1Njb3BlXG4gICAgICAgID8gcmVndWxhclRhYmJhYmxlcy5wdXNoKC4uLmVsZW1lbnRzKVxuICAgICAgICA6IHJlZ3VsYXJUYWJiYWJsZXMucHVzaChlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3JkZXJlZFRhYmJhYmxlcy5wdXNoKHtcbiAgICAgICAgZG9jdW1lbnRPcmRlcjogaSxcbiAgICAgICAgdGFiSW5kZXg6IGNhbmRpZGF0ZVRhYmluZGV4LFxuICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICBpc1Njb3BlOiBpc1Njb3BlLFxuICAgICAgICBjb250ZW50OiBlbGVtZW50cyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG9yZGVyZWRUYWJiYWJsZXNcbiAgICAuc29ydChzb3J0T3JkZXJlZFRhYmJhYmxlcylcbiAgICAucmVkdWNlKChhY2MsIHNvcnRhYmxlKSA9PiB7XG4gICAgICBzb3J0YWJsZS5pc1Njb3BlXG4gICAgICAgID8gYWNjLnB1c2goLi4uc29ydGFibGUuY29udGVudClcbiAgICAgICAgOiBhY2MucHVzaChzb3J0YWJsZS5jb250ZW50KTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pXG4gICAgLmNvbmNhdChyZWd1bGFyVGFiYmFibGVzKTtcbn07XG5cbmNvbnN0IHRhYmJhYmxlID0gZnVuY3Rpb24gKGVsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGxldCBjYW5kaWRhdGVzO1xuICBpZiAob3B0aW9ucy5nZXRTaGFkb3dSb290KSB7XG4gICAgY2FuZGlkYXRlcyA9IGdldENhbmRpZGF0ZXNJdGVyYXRpdmVseShbZWxdLCBvcHRpb25zLmluY2x1ZGVDb250YWluZXIsIHtcbiAgICAgIGZpbHRlcjogaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlLmJpbmQobnVsbCwgb3B0aW9ucyksXG4gICAgICBmbGF0dGVuOiBmYWxzZSxcbiAgICAgIGdldFNoYWRvd1Jvb3Q6IG9wdGlvbnMuZ2V0U2hhZG93Um9vdCxcbiAgICAgIHNoYWRvd1Jvb3RGaWx0ZXI6IGlzVmFsaWRTaGFkb3dSb290VGFiYmFibGUsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY2FuZGlkYXRlcyA9IGdldENhbmRpZGF0ZXMoXG4gICAgICBlbCxcbiAgICAgIG9wdGlvbnMuaW5jbHVkZUNvbnRhaW5lcixcbiAgICAgIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZS5iaW5kKG51bGwsIG9wdGlvbnMpXG4gICAgKTtcbiAgfVxuICByZXR1cm4gc29ydEJ5T3JkZXIoY2FuZGlkYXRlcyk7XG59O1xuXG5jb25zdCBmb2N1c2FibGUgPSBmdW5jdGlvbiAoZWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgbGV0IGNhbmRpZGF0ZXM7XG4gIGlmIChvcHRpb25zLmdldFNoYWRvd1Jvb3QpIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KFtlbF0sIG9wdGlvbnMuaW5jbHVkZUNvbnRhaW5lciwge1xuICAgICAgZmlsdGVyOiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlLmJpbmQobnVsbCwgb3B0aW9ucyksXG4gICAgICBmbGF0dGVuOiB0cnVlLFxuICAgICAgZ2V0U2hhZG93Um9vdDogb3B0aW9ucy5nZXRTaGFkb3dSb290LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzKFxuICAgICAgZWwsXG4gICAgICBvcHRpb25zLmluY2x1ZGVDb250YWluZXIsXG4gICAgICBpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlLmJpbmQobnVsbCwgb3B0aW9ucylcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNhbmRpZGF0ZXM7XG59O1xuXG5jb25zdCBpc1RhYmJhYmxlID0gZnVuY3Rpb24gKG5vZGUsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmICghbm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gbm9kZSBwcm92aWRlZCcpO1xuICB9XG4gIGlmIChtYXRjaGVzLmNhbGwobm9kZSwgY2FuZGlkYXRlU2VsZWN0b3IpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlKG9wdGlvbnMsIG5vZGUpO1xufTtcblxuY29uc3QgZm9jdXNhYmxlQ2FuZGlkYXRlU2VsZWN0b3IgPSAvKiAjX19QVVJFX18gKi8gY2FuZGlkYXRlU2VsZWN0b3JzXG4gIC5jb25jYXQoJ2lmcmFtZScpXG4gIC5qb2luKCcsJyk7XG5cbmNvbnN0IGlzRm9jdXNhYmxlID0gZnVuY3Rpb24gKG5vZGUsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmICghbm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gbm9kZSBwcm92aWRlZCcpO1xuICB9XG4gIGlmIChtYXRjaGVzLmNhbGwobm9kZSwgZm9jdXNhYmxlQ2FuZGlkYXRlU2VsZWN0b3IpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZShvcHRpb25zLCBub2RlKTtcbn07XG5cbmV4cG9ydCB7IHRhYmJhYmxlLCBmb2N1c2FibGUsIGlzVGFiYmFibGUsIGlzRm9jdXNhYmxlIH07XG4iLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImJ1dHRvblJlZlwiLCBcInNpemVcIiwgXCJjb2xvclwiLCBcImZpbGxcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEJVVFRPTl9DT0xPUlMsIHVzZUV1aUJ1dHRvbkNvbG9yQ1NTLCB1c2VFdWlCdXR0b25Gb2N1c0NTUyB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlCdXR0b25EaXNwbGF5LCBpc0J1dHRvbkRpc2FibGVkIH0gZnJvbSAnLi9idXR0b25fZGlzcGxheS9fYnV0dG9uX2Rpc3BsYXknO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ09MT1JTID0gQlVUVE9OX0NPTE9SUztcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ3MnLCAnbSddO1xuXG4vLyBGb3Igc29tZSByZWFzb24sIFN0b3J5Ym9vayBkb2Vzbid0IHBhcnNlIGBFdWlCdXR0b25EaXNwbGF5Q29tbW9uUHJvcHNgIHVubGVzcyB3ZSBpbmNsdWRlIGl0IGhlcmVcblxuLyoqXG4gKiBFdWlCdXR0b24gaXMgbGFyZ2VseSByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIHJlbGV2YW50IHByb3BzXG4gKiBhbmQgdGhlIGxvZ2ljIGZvciBlbGVtZW50LXNwZWNpZmljIGF0dHJpYnV0ZXNcbiAqL1xuZXhwb3J0IHZhciBFdWlCdXR0b24gPSBmdW5jdGlvbiBFdWlCdXR0b24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdwcmltYXJ5JyA6IF9yZWYkY29sb3IsXG4gICAgZmlsbCA9IF9yZWYuZmlsbCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc0Rpc2FibGVkID0gaXNCdXR0b25EaXNhYmxlZCh7XG4gICAgaHJlZjogcmVzdC5ocmVmLFxuICAgIGlzRGlzYWJsZWQ6IHJlc3QuaXNEaXNhYmxlZCB8fCByZXN0LmRpc2FibGVkLFxuICAgIGlzTG9hZGluZzogcmVzdC5pc0xvYWRpbmdcbiAgfSk7XG4gIHZhciBidXR0b25Db2xvclN0eWxlcyA9IHVzZUV1aUJ1dHRvbkNvbG9yQ1NTKHtcbiAgICBkaXNwbGF5OiBmaWxsID8gJ2ZpbGwnIDogJ2Jhc2UnXG4gIH0pW2lzRGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogY29sb3JdO1xuICB2YXIgYnV0dG9uRm9jdXNTdHlsZSA9IHVzZUV1aUJ1dHRvbkZvY3VzQ1NTKCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uJywgY2xhc3NOYW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtidXR0b25Db2xvclN0eWxlcywgYnV0dG9uRm9jdXNTdHlsZV07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkRpc3BsYXksIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgcmVmOiBidXR0b25SZWYsXG4gICAgc2l6ZTogc2l6ZVxuICB9LCByZXN0KSk7XG59O1xuRXVpQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogTWFrZSBidXR0b24gYSBzb2xpZCBjb2xvciBmb3IgcHJvbWluZW5jZVxuICAgICAqL1xuICAvKipcbiAgICAgKiBNYWtlIGJ1dHRvbiBhIHNvbGlkIGNvbG9yIGZvciBwcm9taW5lbmNlXG4gICAgICovXG4gIGZpbGw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBBbnkgb2YgdGhlIG5hbWVkIGNvbG9yIHBhbGV0dGUgb3B0aW9ucy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgKi9cbiAgLyoqXG4gICAgICogVXNlIHNpemUgYHNgIGluIGNvbmZpbmVkIHNwYWNlc1xuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImFcIiwgXCJidXR0b25cIiwgXCJzcGFuXCJdKSxcbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWluaW11bSB3aWR0aFxuICAgICAqL1xuICBtaW5XaWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgc3R5bGU6IFByb3BUeXBlcy5hbnksXG4gIHR5cGU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFt1bmRlZmluZWRdKV0pLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBgPHNwYW4+YCB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQvY2hpbGRyZW4gb25seSAobm90IGljb24pXG4gICAgICpcbiAgICAgKiBUaGlzIHNwYW4gd3JhcHBlciBjYW4gYmUgcmVtb3ZlZCBieSBwYXNzaW5nIGB0ZXh0UHJvcHM9e2ZhbHNlfWAuXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHsgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KSB9IH0pKTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcywga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpQmFja2dyb3VuZENvbG9yLCBldWlDYW5BbmltYXRlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgaGV4VG9SZ2IsIGlzQ29sb3JEYXJrLCBtYWtlSGlnaENvbnRyYXN0Q29sb3IsIHNoYWRlLCB0aW50LCB0cmFuc3BhcmVudGl6ZSwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcyc7XG5leHBvcnQgdmFyIEJVVFRPTl9DT0xPUlMgPSBbJ3RleHQnLCAnYWNjZW50JywgJ3ByaW1hcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJywgJ2RhbmdlciddO1xuZXhwb3J0IHZhciBCVVRUT05fRElTUExBWVMgPSBbJ2Jhc2UnLCAnZmlsbCcsICdlbXB0eSddO1xuLyoqXG4gKiBDcmVhdGVzIHRoZSBgYmFzZWAgdmVyc2lvbiBvZiBidXR0b24gc3R5bGVzIHdpdGggcHJvcGVyIHRleHQgY29udHJhc3QuXG4gKiBAcGFyYW0gZXVpVGhlbWVDb250ZXh0XG4gKiBAcGFyYW0gY29sb3IgT25lIG9mIHRoZSBuYW1lZCBidXR0b24gY29sb3JzIG9yICdkaXNhYmxlZCdcbiAqIEByZXR1cm5zIFN0eWxlIG9iamVjdCBgeyBiYWNrZ3JvdW5kQ29sb3IsIGNvbG9yIH1gXG4gKi9cbmV4cG9ydCB2YXIgZXVpQnV0dG9uQ29sb3IgPSBmdW5jdGlvbiBldWlCdXR0b25Db2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICBmdW5jdGlvbiB0aW50T3JTaGFkZShjb2xvcikge1xuICAgIHJldHVybiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHNoYWRlKGNvbG9yLCAwLjcpIDogdGludChjb2xvciwgMC44KTtcbiAgfVxuICB2YXIgZm9yZWdyb3VuZDtcbiAgdmFyIGJhY2tncm91bmQ7XG4gIHN3aXRjaCAoY29sb3IpIHtcbiAgICBjYXNlICdkaXNhYmxlZCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkVGV4dCxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgMC4xNSlcbiAgICAgIH07XG4gICAgY2FzZSAndGV4dCc6XG4gICAgICBmb3JlZ3JvdW5kID0gZXVpVGhlbWUuY29sb3JzW2NvbG9yXTtcbiAgICAgIGJhY2tncm91bmQgPSBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHNoYWRlKGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjIpIDogdGludChldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgMC41KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBmb3JlZ3JvdW5kID0gZXVpVGhlbWUuY29sb3JzW1wiXCIuY29uY2F0KGNvbG9yLCBcIlRleHRcIildO1xuICAgICAgYmFja2dyb3VuZCA9IHRpbnRPclNoYWRlKGV1aVRoZW1lLmNvbG9yc1tjb2xvcl0pO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjb2xvcjogbWFrZUhpZ2hDb250cmFzdENvbG9yKGZvcmVncm91bmQpKGJhY2tncm91bmQpLFxuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZFxuICB9O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBgZmlsbGAgdmVyc2lvbiBvZiBidXR0b25zIHN0eWxlcyB3aXRoIHByb3BlciB0ZXh0IGNvbnRyYXN0LlxuICogQHBhcmFtIGV1aVRoZW1lQ29udGV4dFxuICogQHBhcmFtIGNvbG9yIE9uZSBvZiB0aGUgbmFtZWQgYnV0dG9uIGNvbG9ycyBvciAnZGlzYWJsZWQnXG4gKiBAcmV0dXJucyBTdHlsZSBvYmplY3QgYHsgYmFja2dyb3VuZENvbG9yLCBjb2xvciB9YFxuICovXG5leHBvcnQgdmFyIGV1aUJ1dHRvbkZpbGxDb2xvciA9IGZ1bmN0aW9uIGV1aUJ1dHRvbkZpbGxDb2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICB2YXIgZ2V0Rm9yZWdyb3VuZENvbG9yID0gZnVuY3Rpb24gZ2V0Rm9yZWdyb3VuZENvbG9yKGJhY2tncm91bmQpIHtcbiAgICByZXR1cm4gaXNDb2xvckRhcmsuYXBwbHkodm9pZCAwLCBfdG9Db25zdW1hYmxlQXJyYXkoaGV4VG9SZ2IoYmFja2dyb3VuZCkpKSA/IGV1aVRoZW1lLmNvbG9ycy5naG9zdCA6IGV1aVRoZW1lLmNvbG9ycy5pbms7XG4gIH07XG4gIHZhciBiYWNrZ3JvdW5kO1xuICB2YXIgZm9yZWdyb3VuZDtcbiAgc3dpdGNoIChjb2xvcikge1xuICAgIGNhc2UgJ2Rpc2FibGVkJzpcbiAgICAgIGJhY2tncm91bmQgPSBldWlCdXR0b25Db2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICBmb3JlZ3JvdW5kID0gZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikuY29sb3I7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0ZXh0JzpcbiAgICAgIGJhY2tncm91bmQgPSBjb2xvck1vZGUgPT09ICdEQVJLJyA/IGV1aVRoZW1lLmNvbG9ycy50ZXh0IDogZXVpVGhlbWUuY29sb3JzLmRhcmtTaGFkZTtcbiAgICAgIGZvcmVncm91bmQgPSBnZXRGb3JlZ3JvdW5kQ29sb3IoYmFja2dyb3VuZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzdWNjZXNzJzpcbiAgICBjYXNlICdhY2NlbnQnOlxuICAgICAgLy8gU3VjY2VzcyAvIGFjY2VudCBmaWxscyBhcmUgaGFyZCB0byByZWFkIG9uIGxpZ2h0IG1vZGUgZXZlbiB0aG91Z2ggdGhleSBwYXNzIGNvbG9yIGNvbnRyYXN0IHJhdGlvc1xuICAgICAgLy8gVE9ETzogSWYgV0NBRyAzIGdldHMgYWRvcHRlZCAod2hpY2ggd291bGQgY2FsY3VsYXRlcyBsdW1pbm9zaXR5ICYgd291bGQgYWxsb3cgdXMgdG8gdXNlIHdoaXRlIHRleHQgaW5zdGVhZCksXG4gICAgICAvLyB3ZSBjYW4gZ2V0IHJpZCBvZiB0aGlzIGNhc2UgKGh0dHBzOi8vYmxvZy5kYXRhd3JhcHBlci5kZS9jb2xvci1jb250cmFzdC1jaGVjay1kYXRhLXZpcy13Y2FnLWFwY2EvKVxuICAgICAgYmFja2dyb3VuZCA9IGNvbG9yTW9kZSA9PT0gJ0xJR0hUJyA/IHRpbnQoZXVpVGhlbWUuY29sb3JzW2NvbG9yXSwgMC4zKSA6IGV1aVRoZW1lLmNvbG9yc1tjb2xvcl07XG4gICAgICBmb3JlZ3JvdW5kID0gZ2V0Rm9yZWdyb3VuZENvbG9yKGJhY2tncm91bmQpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGJhY2tncm91bmQgPSBldWlUaGVtZS5jb2xvcnNbY29sb3JdO1xuICAgICAgZm9yZWdyb3VuZCA9IGdldEZvcmVncm91bmRDb2xvcihiYWNrZ3JvdW5kKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiB7XG4gICAgY29sb3I6IGZvcmVncm91bmQsXG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kXG4gIH07XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGBlbXB0eWAgdmVyc2lvbiBvZiBidXR0b24gc3R5bGVzIHVzaW5nIHRoZSB0ZXh0LXZhcmlhbnQgYW5kIGFkZGluZyBpbnRlcmFjdGl2ZSBzdHlsZXMuXG4gKiBAcGFyYW0gZXVpVGhlbWVDb250ZXh0XG4gKiBAcGFyYW0gY29sb3IgT25lIG9mIHRoZSBuYW1lZCBidXR0b24gY29sb3JzIG9yICdkaXNhYmxlZCdcbiAqIEByZXR1cm5zIFN0eWxlIG9iamVjdCBgeyBiYWNrZ3JvdW5kQ29sb3IsIGNvbG9yIH1gIHdoZXJlIGBiYWNrZ3JvdW5kYCBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgaW50ZXJhY3RpdmUgc3RhdGVzXG4gKi9cbmV4cG9ydCB2YXIgZXVpQnV0dG9uRW1wdHlDb2xvciA9IGZ1bmN0aW9uIGV1aUJ1dHRvbkVtcHR5Q29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikge1xuICB2YXIgZm9yZWdyb3VuZDtcbiAgdmFyIGJhY2tncm91bmQ7XG4gIHN3aXRjaCAoY29sb3IpIHtcbiAgICBjYXNlICdkaXNhYmxlZCc6XG4gICAgICBmb3JlZ3JvdW5kID0gZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikuY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kID0gJ3RyYW5zcGFyZW50JztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RleHQnOlxuICAgICAgZm9yZWdyb3VuZCA9IGV1aUJ1dHRvbkNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLmNvbG9yO1xuICAgICAgYmFja2dyb3VuZCA9IGV1aUJhY2tncm91bmRDb2xvcihldWlUaGVtZUNvbnRleHQsICdzdWJkdWVkJywge1xuICAgICAgICBtZXRob2Q6ICd0cmFuc3BhcmVudCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGZvcmVncm91bmQgPSBldWlCdXR0b25Db2xvcihldWlUaGVtZUNvbnRleHQsIGNvbG9yKS5jb2xvcjtcbiAgICAgIGJhY2tncm91bmQgPSBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvciwge1xuICAgICAgICBtZXRob2Q6ICd0cmFuc3BhcmVudCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjb2xvcjogZm9yZWdyb3VuZCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRcbiAgfTtcbn07XG5cbi8qKlxuICogR2l2ZW4gdGhlIGJ1dHRvbiBkaXNwbGF5IHR5cGUsIHJldHVybnMgdGhlIEVtb3Rpb24gYmFzZWQgY29sb3Iga2V5cy5cbiAqIEBwYXJhbSBvcHRpb25zIEJ1dHRvbiBkaXNwbGF5IHR5cGVcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBvZiBgX0V1aUJ1dHRvbkNvbG9yYCBrZXlzIGluY2x1ZGluZyBgZGlzYWJsZWRgXG4gKi9cbmV4cG9ydCB2YXIgdXNlRXVpQnV0dG9uQ29sb3JDU1MgPSBmdW5jdGlvbiB1c2VFdWlCdXR0b25Db2xvckNTUygpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgX29wdGlvbnMkZGlzcGxheSA9IG9wdGlvbnMuZGlzcGxheSxcbiAgICBkaXNwbGF5ID0gX29wdGlvbnMkZGlzcGxheSA9PT0gdm9pZCAwID8gJ2Jhc2UnIDogX29wdGlvbnMkZGlzcGxheTtcbiAgdmFyIGNvbG9yc0Rpc3BsYXlzTWFwID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpQnV0dG9uRGlzcGxheXNDb2xvcnMpO1xuICByZXR1cm4gY29sb3JzRGlzcGxheXNNYXBbZGlzcGxheV07XG59O1xudmFyIGV1aUJ1dHRvbkRpc3BsYXlzQ29sb3JzID0gZnVuY3Rpb24gZXVpQnV0dG9uRGlzcGxheXNDb2xvcnMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBDT0xPUlMgPSBbXS5jb25jYXQoQlVUVE9OX0NPTE9SUywgWydkaXNhYmxlZCddKTtcbiAgdmFyIGRpc3BsYXlzQ29sb3JzTWFwID0ge307XG4gIEJVVFRPTl9ESVNQTEFZUy5mb3JFYWNoKGZ1bmN0aW9uIChkaXNwbGF5KSB7XG4gICAgZGlzcGxheXNDb2xvcnNNYXBbZGlzcGxheV0gPSB7fTtcbiAgICBDT0xPUlMuZm9yRWFjaChmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgIHN3aXRjaCAoZGlzcGxheSkge1xuICAgICAgICBjYXNlICdiYXNlJzpcbiAgICAgICAgICBkaXNwbGF5c0NvbG9yc01hcFtkaXNwbGF5XVtjb2xvcl0gPSAvKiNfX1BVUkVfXyovY3NzKGV1aUJ1dHRvbkNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLCBcIjs7bGFiZWw6ZGlzcGxheXNDb2xvcnNNYXAtZGlzcGxheS1jb2xvcjtcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ZpbGwnOlxuICAgICAgICAgIGRpc3BsYXlzQ29sb3JzTWFwW2Rpc3BsYXldW2NvbG9yXSA9IC8qI19fUFVSRV9fKi9jc3MoZXVpQnV0dG9uRmlsbENvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLCBcIm91dGxpbmUtY29sb3I6XCIsIGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGUgPT09ICdEQVJLJyAmJiBjb2xvciA9PT0gJ3RleHQnID8gJ2N1cnJlbnRDb2xvcicgOiBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUuY29sb3JzLmZ1bGxTaGFkZSwgXCI7O2xhYmVsOmRpc3BsYXlzQ29sb3JzTWFwLWRpc3BsYXktY29sb3I7XCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbXB0eSc6XG4gICAgICAgICAgZGlzcGxheXNDb2xvcnNNYXBbZGlzcGxheV1bY29sb3JdID0gLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlCdXR0b25FbXB0eUNvbG9yKGV1aVRoZW1lQ29udGV4dCwgY29sb3IpLmNvbG9yLCBcIjsmOmZvY3VzLCY6YWN0aXZle2JhY2tncm91bmQtY29sb3I6XCIsIGV1aUJ1dHRvbkVtcHR5Q29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikuYmFja2dyb3VuZENvbG9yLCBcIjt9O2xhYmVsOmRpc3BsYXlzQ29sb3JzTWFwLWRpc3BsYXktY29sb3I7XCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBUd2VhayBhdXRvLWdlbmVyYXRlZCBFbW90aW9uIGxhYmVsL2NsYXNzTmFtZSBvdXRwdXRcbiAgICAgIHZhciBlbW90aW9uT3V0cHV0ID0gZGlzcGxheXNDb2xvcnNNYXBbZGlzcGxheV1bY29sb3JdO1xuICAgICAgZW1vdGlvbk91dHB1dC5zdHlsZXMgPSBlbW90aW9uT3V0cHV0LnN0eWxlcy5yZXBsYWNlKCdsYWJlbDpkaXNwbGF5c0NvbG9yc01hcC1kaXNwbGF5LWNvbG9yOycsIFwibGFiZWw6XCIuY29uY2F0KGRpc3BsYXksIFwiLVwiKS5jb25jYXQoY29sb3IsIFwiO1wiKSk7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZGlzcGxheXNDb2xvcnNNYXA7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHRyYW5zbGF0ZSBhbmltYXRpb24gd2hlbiBidXR0b24gaXMgaW4gZm9jdXMuXG4gKiBAcmV0dXJucyBzdHJpbmdcbiAqL1xuZXhwb3J0IHZhciB1c2VFdWlCdXR0b25Gb2N1c0NTUyA9IGZ1bmN0aW9uIHVzZUV1aUJ1dHRvbkZvY3VzQ1NTKCkge1xuICByZXR1cm4gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpQnV0dG9uRm9jdXNDU1MpO1xufTtcbnZhciBldWlCdXR0b25Gb2N1c0FuaW1hdGlvbiA9IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICA1MCUge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTtcXG4gIH1cXG5cIl0pKSk7XG52YXIgZXVpQnV0dG9uRm9jdXNDU1MgPSBmdW5jdGlvbiBldWlCdXR0b25Gb2N1c0NTUyhfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHZhciBmb2N1c0NTUyA9IC8qI19fUFVSRV9fKi9jc3MoZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ub3JtYWwsIFwiIGVhc2UtaW4tb3V0LGJhY2tncm91bmQtY29sb3IgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ub3JtYWwsIFwiIGVhc2UtaW4tb3V0OyY6aG92ZXI6bm90KDpkaXNhYmxlZCl7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTFweCk7fSY6Zm9jdXN7YW5pbWF0aW9uOlwiLCBldWlCdXR0b25Gb2N1c0FuaW1hdGlvbiwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ub3JtYWwsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24uYm91bmNlLCBcIjt9JjphY3RpdmU6bm90KDpkaXNhYmxlZCl7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMXB4KTt9fTtsYWJlbDpmb2N1c0NTUztcIik7XG4gIC8vIFJlbW92ZSB0aGUgYXV0by1nZW5lcmF0ZWQgbGFiZWwuXG4gIC8vIFdlIGNvdWxkIHR5cGljYWxseSBhdm9pZCBhIGxhYmVsIGJ5IHVzaW5nIGEgcGxhaW4gc3RyaW5nIGBgIGluc3RlYWQgb2YgY3NzYGAsXG4gIC8vIGJ1dCB3ZSBuZWVkIGNzc2BgIGZvciBrZXlmcmFtZXNgYCB0byB3b3JrIGZvciB0aGUgZm9jdXMgYW5pbWF0aW9uXG4gIGZvY3VzQ1NTLnN0eWxlcyA9IGZvY3VzQ1NTLnN0eWxlcy5yZXBsYWNlKCdsYWJlbDpmb2N1c0NTUzsnLCAnJyk7XG4gIHJldHVybiBmb2N1c0NTUztcbn07XG5cbi8qKlxuICogTWFwIG9mIGBzaXplYCBwcm9wcyB0byB2YXJpb3VzIHNpemluZ3Mvc2NhbGVzXG4gKiB0aGF0IHNob3VsZCByZW1haW4gY29uc2lzdGVudCBhY3Jvc3MgYWxsIGJ1dHRvbnNcbiAqL1xuZXhwb3J0IHZhciBldWlCdXR0b25TaXplTWFwID0gZnVuY3Rpb24gZXVpQnV0dG9uU2l6ZU1hcChfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICB4czoge1xuICAgICAgaGVpZ2h0OiBldWlUaGVtZS5zaXplLmwsXG4gICAgICByYWRpdXM6IGV1aVRoZW1lLmJvcmRlci5yYWRpdXMuc21hbGwsXG4gICAgICBmb250U2NhbGU6ICd4cydcbiAgICB9LFxuICAgIHM6IHtcbiAgICAgIGhlaWdodDogZXVpVGhlbWUuc2l6ZS54bCxcbiAgICAgIHJhZGl1czogZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCxcbiAgICAgIGZvbnRTY2FsZTogJ3MnXG4gICAgfSxcbiAgICBtOiB7XG4gICAgICBoZWlnaHQ6IGV1aVRoZW1lLnNpemUueHhsLFxuICAgICAgcmFkaXVzOiBldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSxcbiAgICAgIGZvbnRTY2FsZTogJ3MnXG4gICAgfVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImVsZW1lbnRcIiwgXCJ0eXBlXCIsIFwiY2hpbGRyZW5cIiwgXCJpY29uVHlwZVwiLCBcImljb25TaWRlXCIsIFwiaWNvblNpemVcIiwgXCJzaXplXCIsIFwiaXNEaXNhYmxlZFwiLCBcImRpc2FibGVkXCIsIFwiaXNMb2FkaW5nXCIsIFwiaXNTZWxlY3RlZFwiLCBcImZ1bGxXaWR0aFwiLCBcIm1pbldpZHRoXCIsIFwiY29udGVudFByb3BzXCIsIFwidGV4dFByb3BzXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInN0eWxlXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuXG4vLyBAdHMtaWdub3JlIG1vZHVsZSBkb2Vzbid0IGV4cG9ydCBgY3JlYXRlRWxlbWVudGBcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpQnV0dG9uRGlzcGxheVN0eWxlcyB9IGZyb20gJy4vX2J1dHRvbl9kaXNwbGF5LnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25EaXNwbGF5Q29udGVudCB9IGZyb20gJy4vX2J1dHRvbl9kaXNwbGF5X2NvbnRlbnQnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBTSVpFUyA9IFsneHMnLCAncycsICdtJ107XG5cbi8qKlxuICogRXh0ZW5kcyBFdWlCdXR0b25EaXNwbGF5Q29udGVudFByb3BzIHdoaWNoIHByb3ZpZGVzXG4gKiBgaWNvblR5cGVgLCBgaWNvblNpZGVgLCBhbmQgYHRleHRQcm9wc2BcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNCdXR0b25EaXNhYmxlZChfcmVmKSB7XG4gIHZhciBocmVmID0gX3JlZi5ocmVmLFxuICAgIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmc7XG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgcmV0dXJuIGlzTG9hZGluZyB8fCBpc0Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbn1cblxuLyoqXG4gKiBFdWlCdXR0b25EaXNwbGF5IGlzIGFuIGludGVybmFsLW9ubHkgY29tcG9uZW50IHVzZWQgZm9yIGRpc3BsYXlpbmdcbiAqIGFueSBlbGVtZW50IGFzIGEgYnV0dG9uLlxuICovXG5leHBvcnQgdmFyIEV1aUJ1dHRvbkRpc3BsYXkgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZjIsIHJlZikge1xuICB2YXIgX3JlZjIkZWxlbWVudCA9IF9yZWYyLmVsZW1lbnQsXG4gICAgX2VsZW1lbnQgPSBfcmVmMiRlbGVtZW50ID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYyJGVsZW1lbnQsXG4gICAgX3JlZjIkdHlwZSA9IF9yZWYyLnR5cGUsXG4gICAgdHlwZSA9IF9yZWYyJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZjIkdHlwZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgIGljb25UeXBlID0gX3JlZjIuaWNvblR5cGUsXG4gICAgX3JlZjIkaWNvblNpZGUgPSBfcmVmMi5pY29uU2lkZSxcbiAgICBpY29uU2lkZSA9IF9yZWYyJGljb25TaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmMiRpY29uU2lkZSxcbiAgICBpY29uU2l6ZSA9IF9yZWYyLmljb25TaXplLFxuICAgIF9yZWYyJHNpemUgPSBfcmVmMi5zaXplLFxuICAgIHNpemUgPSBfcmVmMiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmMiRzaXplLFxuICAgIGlzRGlzYWJsZWQgPSBfcmVmMi5pc0Rpc2FibGVkLFxuICAgIGRpc2FibGVkID0gX3JlZjIuZGlzYWJsZWQsXG4gICAgaXNMb2FkaW5nID0gX3JlZjIuaXNMb2FkaW5nLFxuICAgIGlzU2VsZWN0ZWQgPSBfcmVmMi5pc1NlbGVjdGVkLFxuICAgIGZ1bGxXaWR0aCA9IF9yZWYyLmZ1bGxXaWR0aCxcbiAgICBtaW5XaWR0aCA9IF9yZWYyLm1pbldpZHRoLFxuICAgIGNvbnRlbnRQcm9wcyA9IF9yZWYyLmNvbnRlbnRQcm9wcyxcbiAgICB0ZXh0UHJvcHMgPSBfcmVmMi50ZXh0UHJvcHMsXG4gICAgaHJlZiA9IF9yZWYyLmhyZWYsXG4gICAgdGFyZ2V0ID0gX3JlZjIudGFyZ2V0LFxuICAgIHJlbCA9IF9yZWYyLnJlbCxcbiAgICBzdHlsZSA9IF9yZWYyLnN0eWxlLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZCk7XG4gIHZhciBidXR0b25Jc0Rpc2FibGVkID0gaXNCdXR0b25EaXNhYmxlZCh7XG4gICAgaHJlZjogaHJlZixcbiAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkIHx8IGRpc2FibGVkLFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nXG4gIH0pO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpQnV0dG9uRGlzcGxheVN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUJ1dHRvbkRpc3BsYXksIHN0eWxlc1tzaXplXSwgZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgsIG1pbldpZHRoID09IG51bGwgJiYgc3R5bGVzLmRlZmF1bHRNaW5XaWR0aCwgYnV0dG9uSXNEaXNhYmxlZCAmJiBzdHlsZXMuaXNEaXNhYmxlZF07XG4gIHZhciBpbm5lck5vZGUgPSBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkRpc3BsYXlDb250ZW50LCBfZXh0ZW5kcyh7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaXNEaXNhYmxlZDogYnV0dG9uSXNEaXNhYmxlZCxcbiAgICBpY29uVHlwZTogaWNvblR5cGUsXG4gICAgaWNvblNpZGU6IGljb25TaWRlLFxuICAgIGljb25TaXplOiBpY29uU2l6ZSxcbiAgICB0ZXh0UHJvcHM6IHRleHRQcm9wc1xuICB9LCBjb250ZW50UHJvcHMpLCBjaGlsZHJlbik7XG4gIHZhciBlbGVtZW50ID0gYnV0dG9uSXNEaXNhYmxlZCA/ICdidXR0b24nIDogaHJlZiA/ICdhJyA6IF9lbGVtZW50O1xuICB2YXIgZWxlbWVudFByb3BzID0ge307XG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgYXR0cmlidXRlc1xuICBpZiAoZWxlbWVudCA9PT0gJ2J1dHRvbicpIHtcbiAgICBlbGVtZW50UHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVsZW1lbnRQcm9wcyksIHt9LCB7XG4gICAgICBkaXNhYmxlZDogYnV0dG9uSXNEaXNhYmxlZCxcbiAgICAgICdhcmlhLXByZXNzZWQnOiBpc1NlbGVjdGVkXG4gICAgfSk7XG4gIH1cbiAgdmFyIHJlbE9iaiA9IHt9O1xuICBpZiAoaHJlZiAmJiAhYnV0dG9uSXNEaXNhYmxlZCkge1xuICAgIHJlbE9iai5ocmVmID0gaHJlZjtcbiAgICByZWxPYmoucmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmVsT2JqLnRhcmdldCA9IHRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICByZWxPYmoudHlwZSA9IHR5cGU7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoZWxlbWVudCwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIHN0eWxlOiBtaW5XaWR0aCA/IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgc3R5bGUpLCB7fSwge1xuICAgICAgbWluSW5saW5lU2l6ZTogbWluV2lkdGhcbiAgICB9KSA6IHN0eWxlLFxuICAgIHJlZjogcmVmXG4gIH0sIGVsZW1lbnRQcm9wcyksIHJlbE9iaiksIHJlc3QpLCBpbm5lck5vZGUpO1xufSk7XG5FdWlCdXR0b25EaXNwbGF5LnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIGVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJhXCIsIFwiYnV0dG9uXCIsIFwic3BhblwiXSksXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBFeHRlbmRzIHRoZSBidXR0b24gdG8gMTAwJSB3aWR0aFxuICAgICAqL1xuICAvKipcbiAgICAgKiBFeHRlbmRzIHRoZSBidXR0b24gdG8gMTAwJSB3aWR0aFxuICAgICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBtaW5pbXVtIHdpZHRoXG4gICAgICovXG4gIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1pbmltdW0gd2lkdGhcbiAgICAgKi9cbiAgbWluV2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcbiAgdHlwZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW3VuZGVmaW5lZF0pXSksXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dC9jaGlsZHJlbiBvbmx5IChub3QgaWNvbilcbiAgICAgKlxuICAgICAqIFRoaXMgc3BhbiB3cmFwcGVyIGNhbiBiZSByZW1vdmVkIGJ5IHBhc3NpbmcgYHRleHRQcm9wcz17ZmFsc2V9YC5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnlcbn07XG5FdWlCdXR0b25EaXNwbGF5LmRpc3BsYXlOYW1lID0gJ0V1aUJ1dHRvbkRpc3BsYXknOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBDT0xPUl9NT0RFU19TVEFOREFSRCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3R5cGVzJztcblxuLy8gQ3JlYXRlIGEgQ1NTIGNvbG9yIHZhbHVlIHVzaW5nIHdob3NlIG9wYWNpdHkgaXMgZGV0ZXJtaW5lZCBiYXNlZFxuLy8gb24gZWl0aGVyIGEgbGlnaHQgb3IgZGFyayB0aGVtZS4gV2UgdXNlIGEgbXVsdGlwbGllclxuLy8gb2YgMSBmb3IgbGlnaHQgdGhlbWVzIGFuZCAyLjUgZm9yIGRhcmsgdGhlbWVzXG5leHBvcnQgdmFyIGdldFNoYWRvd0NvbG9yID0gZnVuY3Rpb24gZ2V0U2hhZG93Q29sb3IoY29sb3IsIG9wYWNpdHksIGNvbG9yTW9kZSkge1xuICB2YXIgdGhlbWVPcGFjaXR5ID0gY29sb3JNb2RlID09PSBDT0xPUl9NT0RFU19TVEFOREFSRC5kYXJrID8gb3BhY2l0eSAqIDMuNSA6IG9wYWNpdHkgKiAxO1xuICByZXR1cm4gY2hyb21hKGNvbG9yKS5hbHBoYSh0aGVtZU9wYWNpdHkpLmNzcygpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZSc7XG5pbXBvcnQgeyBnZXRTaGFkb3dDb2xvciB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG4vKipcbiAqIGV1aVNsaWdodFNoYWRvd1xuICovXG5leHBvcnQgdmFyIGV1aVNoYWRvd1hTbWFsbCA9IGZ1bmN0aW9uIGV1aVNoYWRvd1hTbWFsbChfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gX3JlZi5jb2xvck1vZGU7XG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX2NvbG9yID0gX3JlZjIuY29sb3I7XG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAuOHB4IC44cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMi4zcHggMnB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDMsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG5cbi8qKlxuICogYm90dG9tU2hhZG93U21hbGxcbiAqL1xuZXhwb3J0IHZhciBldWlTaGFkb3dTbWFsbCA9IGZ1bmN0aW9uIGV1aVNoYWRvd1NtYWxsKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYzLmNvbG9yTW9kZTtcbiAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBfY29sb3IgPSBfcmVmNC5jb2xvcjtcbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIC43cHggMS40cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA3LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMS45cHggNHB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDUsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCA0LjVweCAxMHB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDUsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG5cbi8qKlxuICogYm90dG9tU2hhZG93TWVkaXVtXG4gKi9cbmV4cG9ydCB2YXIgZXVpU2hhZG93TWVkaXVtID0gZnVuY3Rpb24gZXVpU2hhZG93TWVkaXVtKF9yZWY1KSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY1LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWY1LmNvbG9yTW9kZTtcbiAgdmFyIF9yZWY2ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBfY29sb3IgPSBfcmVmNi5jb2xvcixcbiAgICBwcm9wZXJ0eSA9IF9yZWY2LnByb3BlcnR5O1xuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgaWYgKHByb3BlcnR5ID09PSAnZmlsdGVyJykge1xuICAgIC8vIFVzaW5nIG9ubHkgb25lIGRyb3Atc2hhZG93IGZpbHRlciBpbnN0ZWFkIG9mIG11bHRpcGxlIGlzIG1vcmUgcGVyZm9ybWFudCAmIHByZXZlbnRzIFNhZmFyaSBidWdzXG4gICAgcmV0dXJuIFwiZmlsdGVyOiBkcm9wLXNoYWRvdygwIDUuN3B4IDlweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMiwgY29sb3JNb2RlKSwgXCIpO1wiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJib3gtc2hhZG93OlxcbiAgICAgIDAgLjlweCA0cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA4LCBjb2xvck1vZGUpLCBcIixcXG4gICAgICAwIDIuNnB4IDhweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA2LCBjb2xvck1vZGUpLCBcIixcXG4gICAgICAwIDUuN3B4IDEycHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCIsXFxuICAgICAgMCAxNXB4IDE1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNCwgY29sb3JNb2RlKSwgXCI7XCIpO1xuICB9XG59O1xuXG4vKipcbiAqIGJvdHRvbVNoYWRvd1xuICovXG5leHBvcnQgdmFyIGV1aVNoYWRvd0xhcmdlID0gZnVuY3Rpb24gZXVpU2hhZG93TGFyZ2UoX3JlZjcpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjcuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gX3JlZjcuY29sb3JNb2RlO1xuICB2YXIgX3JlZjggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgIF9jb2xvciA9IF9yZWY4LmNvbG9yO1xuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgMXB4IDVweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMSwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDMuNnB4IDEzcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNywgY29sb3JNb2RlKSwgXCIsXFxuICAwIDguNHB4IDIzcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNiwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDIzcHggMzVweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA1LCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuXG4vKipcbiAqIGJvdHRvbVNoYWRvd0xhcmdlXG4gKi9cblxuZXhwb3J0IHZhciBldWlTaGFkb3dYTGFyZ2UgPSBmdW5jdGlvbiBldWlTaGFkb3dYTGFyZ2UoX3JlZjkpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjkuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gX3JlZjkuY29sb3JNb2RlO1xuICB2YXIgX3JlZjEwID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBfY29sb3IgPSBfcmVmMTAuY29sb3IsXG4gICAgcmV2ZXJzZSA9IF9yZWYxMC5yZXZlcnNlO1xuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgXCIuY29uY2F0KHJldmVyc2UgPyAnLScgOiAnJywgXCIyLjdweCA5cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4xMywgY29sb3JNb2RlKSwgXCIsXFxuICAwIFwiKS5jb25jYXQocmV2ZXJzZSA/ICctJyA6ICcnLCBcIjkuNHB4IDI0cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wOSwgY29sb3JNb2RlKSwgXCIsXFxuICAwIFwiKS5jb25jYXQocmV2ZXJzZSA/ICctJyA6ICcnLCBcIjIxLjhweCA0M3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDgsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG5cbi8qKlxuICogc2xpZ2h0U2hhZG93SG92ZXJcbiAqL1xuZXhwb3J0IHZhciBldWlTbGlnaHRTaGFkb3dIb3ZlciA9IGZ1bmN0aW9uIGV1aVNsaWdodFNoYWRvd0hvdmVyKF9yZWYxMSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMTEuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gX3JlZjExLmNvbG9yTW9kZTtcbiAgdmFyIF9yZWYxMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX2NvbG9yID0gX3JlZjEyLmNvbG9yO1xuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgMXB4IDVweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMSwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDMuNnB4IDEzcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNywgY29sb3JNb2RlKSwgXCIsXFxuICAwIDguNHB4IDIzcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNiwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDIzcHggMzVweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA1LCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlTbGlnaHRTaGFkb3dIb3ZlciA9IGZ1bmN0aW9uIHVzZUV1aVNsaWdodFNoYWRvd0hvdmVyKGNvbG9yKSB7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpU2xpZ2h0U2hhZG93SG92ZXIoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTtcblxuLyoqXG4gKiBib3R0b21TaGFkb3dGbGF0XG4gKlxuICogU2ltaWxhciB0byBzaGFkb3cgbWVkaXVtIGJ1dCB3aXRob3V0IHRoZSBib3R0b20gZGVwdGguXG4gKiBVc2VmdWwgZm9yIHBvcG92ZXJzIHRoYXQgZHJvcCBVUCByYXRoZXIgdGhhbiBET1dOLlxuICovXG5leHBvcnQgdmFyIGV1aVNoYWRvd0ZsYXQgPSBmdW5jdGlvbiBldWlTaGFkb3dGbGF0KF9yZWYxMykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMTMuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gX3JlZjEzLmNvbG9yTW9kZTtcbiAgdmFyIF9yZWYxNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgX2NvbG9yID0gX3JlZjE0LmNvbG9yO1xuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgMCAuOHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNiwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDAgMnB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDQsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAwIDVweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMCAxN3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDMsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVNoYWRvd0ZsYXQgPSBmdW5jdGlvbiB1c2VFdWlTaGFkb3dGbGF0KGNvbG9yKSB7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpU2hhZG93RmxhdChldWlUaGVtZUNvbnRleHQsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59O1xuZXhwb3J0IHZhciBldWlTaGFkb3cgPSBmdW5jdGlvbiBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBzaXplID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnbCc7XG4gIHZhciBfcmVmMTUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgIGNvbG9yID0gX3JlZjE1LmNvbG9yO1xuICBzd2l0Y2ggKHNpemUpIHtcbiAgICBjYXNlICd4cyc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93WFNtYWxsKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd1NtYWxsKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd01lZGl1bShldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcbiAgICBjYXNlICdsJzpcbiAgICAgIHJldHVybiBldWlTaGFkb3dMYXJnZShldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcbiAgICBjYXNlICd4bCc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93WExhcmdlKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb25zb2xlLndhcm4oJ1BsZWFzZSBwcm92aWRlIGEgdmFsaWQgc2l6ZSBvcHRpb24gdG8gdXNlRXVpU2hhZG93Jyk7XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aVNoYWRvdyA9IGZ1bmN0aW9uIHVzZUV1aVNoYWRvdygpIHtcbiAgdmFyIHNpemUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdsJztcbiAgdmFyIGNvbG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgc2l6ZSwge1xuICAgIGNvbG9yOiBjb2xvclxuICB9KTtcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSwgbG9naWNhbENTUywgbG9naWNhbFNob3J0aGFuZENTUywgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aUJ1dHRvblNpemVNYXAgfSBmcm9tICcuLi8uLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG4vLyBQcm92aWRlcyBhIHNvbGlkIHJlc2V0IGFuZCBiYXNlIGZvciBoYW5kbGluZyBzaXppbmcgbGF5b3V0XG4vLyBEb2VzIG5vdCBpbmNsdWRlIGFueSB2aXN1YWwgc3R5bGVzXG5leHBvcnQgdmFyIGV1aUJ1dHRvbkJhc2VDU1MgPSBmdW5jdGlvbiBldWlCdXR0b25CYXNlQ1NTKCkge1xuICByZXR1cm4gXCJcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICBhcHBlYXJhbmNlOiBub25lO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIFwiLmNvbmNhdChsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCI7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCI7XFxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBcIik7XG59O1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiODU5NXA5LWlzRGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImN1cnNvcjpub3QtYWxsb3dlZDtsYWJlbDppc0Rpc2FibGVkO1wiXG59IDoge1xuICBuYW1lOiBcIjg1OTVwOS1pc0Rpc2FibGVkXCIsXG4gIHN0eWxlczogXCJjdXJzb3I6bm90LWFsbG93ZWQ7bGFiZWw6aXNEaXNhYmxlZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlCdXR0b25EaXNwbGF5U3R5bGVzID0gZnVuY3Rpb24gZXVpQnV0dG9uRGlzcGxheVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgc2l6ZXMgPSBldWlCdXR0b25TaXplTWFwKGV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBfYnV0dG9uU2l6ZSA9IGZ1bmN0aW9uIF9idXR0b25TaXplKHNpemVLZXkpIHtcbiAgICB2YXIgc2l6ZSA9IHNpemVzW3NpemVLZXldO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2hlaWdodCcsIHNpemUuaGVpZ2h0KSwgXCIgbGluZS1oZWlnaHQ6XCIsIHNpemUuaGVpZ2h0LCBcIjtcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCBzaXplLmZvbnRTY2FsZSksIFwiIGJvcmRlci1yYWRpdXM6XCIsIHNpemUucmFkaXVzLCBcIjtcIik7XG4gIH07XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUJ1dHRvbkRpc3BsYXk6IC8qI19fUFVSRV9fKi9jc3MoZXVpQnV0dG9uQmFzZUNTUygpLCBcIiBmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQubWVkaXVtLCBcIjtcIiwgbG9naWNhbFNob3J0aGFuZENTUygncGFkZGluZycsIFwiMCBcIi5jb25jYXQoZXVpVGhlbWUuc2l6ZS5tKSksIFwiICY6aG92ZXI6bm90KDpkaXNhYmxlZCksJjpmb2N1c3t0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO307bGFiZWw6ZXVpQnV0dG9uRGlzcGxheTtcIiksXG4gICAgLy8gU3RhdGVzXG4gICAgaXNEaXNhYmxlZDogX3JlZixcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmJsb2NrO1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpLFxuICAgIGRlZmF1bHRNaW5XaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCBcIlwiLmNvbmNhdChldWlUaGVtZS5iYXNlICogNywgXCJweFwiKSksIFwiOztsYWJlbDpkZWZhdWx0TWluV2lkdGg7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MoX2J1dHRvblNpemUoJ3hzJyksIFwiO2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKF9idXR0b25TaXplKCdzJyksIFwiO2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoX2J1dHRvblNpemUoJ20nKSwgXCI7bGFiZWw6bTtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcInRleHRQcm9wc1wiLCBcImlzTG9hZGluZ1wiLCBcImlzRGlzYWJsZWRcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaXplXCIsIFwiaWNvblNpZGVcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBldWlCdXR0b25EaXNwbGF5Q29udGVudFN0eWxlcyB9IGZyb20gJy4vX2J1dHRvbl9kaXNwbGF5X2NvbnRlbnQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIElDT05fU0laRVMgPSBbJ3MnLCAnbSddO1xuZXhwb3J0IHZhciBJQ09OX1NJREVTID0gWydsZWZ0JywgJ3JpZ2h0J107XG5cbi8qKlxuICogKklOVEVSTkFMIE9OTFkqXG4gKiBUaGlzIGNvbXBvbmVudCBpcyBzaW1wbHkgYSBoZWxwZXIgY29tcG9uZW50IGZvciByZXVzZSB3aXRoaW4gb3RoZXIgYnV0dG9uIGNvbXBvbmVudHMuXG4gKi9cblxuZXhwb3J0IHZhciBFdWlCdXR0b25EaXNwbGF5Q29udGVudCA9IGZ1bmN0aW9uIEV1aUJ1dHRvbkRpc3BsYXlDb250ZW50KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICB0ZXh0UHJvcHMgPSBfcmVmLnRleHRQcm9wcyxcbiAgICBfcmVmJGlzTG9hZGluZyA9IF9yZWYuaXNMb2FkaW5nLFxuICAgIGlzTG9hZGluZyA9IF9yZWYkaXNMb2FkaW5nID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNMb2FkaW5nLFxuICAgIF9yZWYkaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBpc0Rpc2FibGVkID0gX3JlZiRpc0Rpc2FibGVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNEaXNhYmxlZCxcbiAgICBpY29uVHlwZSA9IF9yZWYuaWNvblR5cGUsXG4gICAgX3JlZiRpY29uU2l6ZSA9IF9yZWYuaWNvblNpemUsXG4gICAgaWNvblNpemUgPSBfcmVmJGljb25TaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJGljb25TaXplLFxuICAgIF9yZWYkaWNvblNpZGUgPSBfcmVmLmljb25TaWRlLFxuICAgIGljb25TaWRlID0gX3JlZiRpY29uU2lkZSA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZiRpY29uU2lkZSxcbiAgICBjb250ZW50UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUJ1dHRvbkRpc3BsYXlDb250ZW50U3R5bGVzKTtcblxuICAvLyBBZGQgYW4gaWNvbiB0byB0aGUgYnV0dG9uIGlmIG9uZSBleGlzdHMuXG4gIHZhciBpY29uID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgLy8gV2hlbiB0aGUgYnV0dG9uIGlzIGRpc2FibGVkIHRoZSB0ZXh0IGdldHMgZ3JheVxuICAgICAgLy8gYW5kIGluIHNvbWUgYnV0dG9ucyB0aGUgYmFja2dyb3VuZCBnZXRzIGEgbGlnaHQgZ3JheVxuICAgICAgLy8gZm9yIGJldHRlciBjb250cmFzdCB3ZSB3YW50IHRvIGNoYW5nZSB0aGUgYm9yZGVyIG9mIHRoZSBzcGlubmVyXG4gICAgICAvLyB0byBoYXZlIHRoZSBzYW1lIGNvbG9yIG9mIHRoZSB0ZXh0LiBUaGlzIHdheSB3ZSBlbnN1cmUgdGhlIGJvcmRlcnNcbiAgICAgIC8vIGFyZSBhbHdheXMgdmlzaWJsZS4gVGhlIGRlZmF1bHQgc3Bpbm5lciBjb2xvciBjb3VsZCBiZSB2ZXJ5IGxpZ2h0LlxuICAgICAgdmFyIGxvYWRpbmdTcGlubmVyQ29sb3IgPSBpc0Rpc2FibGVkID8ge1xuICAgICAgICBib3JkZXI6ICdjdXJyZW50Y29sb3InXG4gICAgICB9IDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpTG9hZGluZ1NwaW5uZXIsIHtcbiAgICAgICAgc2l6ZTogaWNvblNpemUsXG4gICAgICAgIGNvbG9yOiBsb2FkaW5nU3Bpbm5lckNvbG9yXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGljb25UeXBlKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgICBzaXplOiBpY29uU2l6ZSxcbiAgICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2ljb25UeXBlLCBpY29uU2l6ZSwgaXNMb2FkaW5nLCBpc0Rpc2FibGVkXSk7XG4gIHZhciBpc1RleHQgPSB0eXBlb2YgY2hpbGRyZW4gPT09ICdzdHJpbmcnO1xuICB2YXIgZG9Ob3RSZW5kZXJUZXh0V3JhcHBlciA9IHRleHRQcm9wcyA9PT0gZmFsc2U7XG4gIHZhciByZW5kZXJUZXh0V3JhcHBlciA9IChpc1RleHQgfHwgdGV4dFByb3BzKSAmJiAhZG9Ob3RSZW5kZXJUZXh0V3JhcHBlcjtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IHN0eWxlcy5ldWlCdXR0b25EaXNwbGF5Q29udGVudFxuICB9LCBjb250ZW50UHJvcHMpLCBpY29uU2lkZSA9PT0gJ2xlZnQnICYmIGljb24sIHJlbmRlclRleHRXcmFwcGVyID8gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe30sIHRleHRQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpLXRleHRUcnVuY2F0ZScsIHRleHRQcm9wcyA9PT0gbnVsbCB8fCB0ZXh0UHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRQcm9wcy5jbGFzc05hbWUpXG4gIH0pLCBjaGlsZHJlbikgOiBjaGlsZHJlbiwgaWNvblNpZGUgPT09ICdyaWdodCcgJiYgaWNvbik7XG59O1xuRXVpQnV0dG9uRGlzcGxheUNvbnRlbnQucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbdW5kZWZpbmVkXSldKSxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgYDxzcGFuPmAgd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0L2NoaWxkcmVuIG9ubHkgKG5vdCBpY29uKVxuICAgICAqXG4gICAgICogVGhpcyBzcGFuIHdyYXBwZXIgY2FuIGJlIHJlbW92ZWQgYnkgcGFzc2luZyBgdGV4dFByb3BzPXtmYWxzZX1gLlxuICAgICAqL1xuICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMuYW55LFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQWNjZXNzaWJpbGl0eSA9IGZ1bmN0aW9uIEV1aUljb25BY2Nlc3NpYmlsaXR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAwYTggOCAwIDEgMSAwIDE2QTggOCAwIDAgMSA4IDBabTAgMWE3IDcgMCAxIDAgMCAxNEE3IDcgMCAwIDAgOCAxWm0zLjk3NCA0LjM0MmEuNS41IDAgMCAxLS4yMzMuNTk2bC0uMDgzLjAzNkw5IDYuODZ2Mi41NTlsLjk3NCAyLjkyM2EuNS41IDAgMCAxLS4yMzMuNTk2bC0uMDgzLjAzNmEuNS41IDAgMCAxLS41OTYtLjIzM2wtLjAzNi0uMDgzLTEtM0w4IDkuNWwtLjAyNi4xNTgtMSAzYS41LjUgMCAwIDEtLjk3LS4yMjhsLjAyMi0uMDg4TDcgOS40MTZWNi44NmwtMi42NTgtLjg4NmEuNS41IDAgMCAxIC4yMjgtLjk3bC4wODguMDIyTDcuNTgzIDZoLjgzM2wyLjkyNi0uOTc0YS41LjUgMCAwIDEgLjYzMi4zMTZaTTggM2ExIDEgMCAxIDEgMCAyIDEgMSAwIDAgMSAwLTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BY2Nlc3NpYmlsaXR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFnZ3JlZ2F0ZSA9IGZ1bmN0aW9uIEV1aUljb25BZ2dyZWdhdGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi41IDJhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTF6bTAtMWExLjUgMS41IDAgMCAxIDEuNDE1IDFoMS45MDhhMS41IDEuNSAwIDAgMSAxLjM5My45NDNMOC44MzkgN0gxMi41YS41LjUgMCAwIDEgMCAxSDguODM5bC0xLjYyMyA0LjA1N0ExLjUgMS41IDAgMCAxIDUuODIzIDEzSDMuOTE1YTEuNSAxLjUgMCAxIDEgMC0xaDEuOTA4YS41LjUgMCAwIDAgLjQ2NC0uMzE0TDcuNzYxIDhIMy45MTVhMS41IDEuNSAwIDEgMSAwLTFINy43Nkw2LjI4NyAzLjMxNEEuNS41IDAgMCAwIDUuODIzIDNIMy45MTVBMS41IDEuNSAwIDEgMSAyLjUgMXptMCAxMWEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMXpNMyA3LjVhLjUuNSAwIDEgMC0xIDAgLjUuNSAwIDAgMCAxIDB6bTkuMzU0LTMuMzU0YS41LjUgMCAwIDAtLjcwOC43MDhMMTMuNzkzIDdhLjcwNy43MDcgMCAwIDEgMCAxbC0yLjE0NyAyLjE0NmEuNS41IDAgMCAwIC43MDguNzA4TDE0LjUgOC43MDdhMS43MDcgMS43MDcgMCAwIDAgMC0yLjQxNGwtMi4xNDYtMi4xNDd6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BZ2dyZWdhdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQWxlcnQgPSBmdW5jdGlvbiBFdWlJY29uQWxlcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjU1IDkuNTAybC4zNS0zLjUwN2EuOTA1LjkwNSAwIDEwLTEuOCAwbC4zNSAzLjUwN2EuNTUyLjU1MiAwIDAwMS4xIDB6TTkgMTJhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC44NjQgMS40OTZhMSAxIDAgMDAtMS43MjggMGwtNyAxMkExIDEgMCAwMDEgMTVoMTRhMSAxIDAgMDAuODY0LTEuNTA0bC03LTEyek0xIDE0TDggMmw3IDEySDF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BbGVydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BbmFseXplRXZlbnQgPSBmdW5jdGlvbiBFdWlJY29uQW5hbHl6ZUV2ZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggOS4xNjkgMiA1LjI1djYuMTdsNiAzLjQyOCA2LTMuNDI4VjUuMjVMOCA5LjE3Wk0xNSA0djhsLTcgNC03LTRWNGw3LTQgNyA0Wm0tMS40MjguMzM2TDggMS4xNTIgMi40MjggNC4zMzYgOCA3Ljk3NGw1LjU3Mi0zLjYzOFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BbmFseXplRXZlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQW5hbHl6ZUV2ZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFuYWx5emVFdmVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTQsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy45MjQgNC4wMTNhLjYwNS42MDUgMCAwMC0uMjI4LS4yMzZMNy4zMDQuMDgyYS42MDcuNjA3IDAgMDAtLjYwOCAwTC4zMDQgMy43NzdBLjYyLjYyIDAgMDAwIDQuMzA0djcuMzkyYzAgLjIxNy4xMTYuNDE4LjMwNC41MjdsNi4zOTIgMy42OTVjLjE4OC4xMS40Mi4xMS42MDggMGw2LjM5Mi0zLjY5NWEuNjA5LjYwOSAwIDAwLjMwNC0uNTI3VjQuMzA0YS42MDcuNjA3IDAgMDAtLjA3Ni0uMjkxek0xIDUuMDc5djYuMzkxbDYgMy40NyA2LTMuNDdWNS4wOEw3LjI1MiA4LjQzMiA3IDguNTc5bC0uMjUyLS4xNDdMMSA1LjA3OXptMTEuNDc2LS44NTJMNyAxLjA2IDEuNTI0IDQuMjI3IDcgNy40Mmw1LjQ3Ni0zLjE5NHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFuYWx5emVFdmVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Bbm5vdGF0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkFubm90YXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDYuNWE0LjUgNC41IDAgMSAxIDUgNC40NzNWMTZIN3YtNS4wMjdBNC41IDQuNSAwIDAgMSAzIDYuNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFubm90YXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQW5vbWFseUNoYXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkFub21hbHlDaGFydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjUgMTRIMlYxLjVhLjUuNSAwIDAgMC0xIDB2MTNhLjUuNSAwIDAgMCAuNS41aDEzYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC40MiA1YS41LjUgMCAwIDEgLjUwNS40M0w5Ljg2NCAxMmguODczbC45NTctLjg3YS41LjUgMCAwIDEgLjY3MiAwbDEuMSAxYS41LjUgMCAwIDEtLjY3Mi43NGwtLjc2NC0uNjk0LS43NjQuNjk0YS41LjUgMCAwIDEtLjMzNi4xM2gtMS41YS41LjUgMCAwIDEtLjQ5NS0uNDNsLS40MjktMy0uMzEyIDIuOTgyYS41LjUgMCAwIDEtLjgzNC4zMThsLS42ODktLjYyNi0uNDA0LjU1MmEuNS41IDAgMCAxLS40MDQuMjA0aC0uNTNhLjUuNSAwIDAgMS0uNDAzLS4yMDRsLS40MDUtLjU1Mi0uNjg5LjYyNmEuNS41IDAgMSAxLS42NzItLjc0bDEuMS0xYS41LjUgMCAwIDEgLjc0LjA3NGwuNTgzLjc5NmguMDIzbC41ODMtLjc5NmEuNS41IDAgMCAxIC43NC0uMDc0bC4zNy4zMzYuNjMtNi4wMThBLjUuNSAwIDAgMSA4LjQyIDVabS4wOC0zLjAxYS41LjUgMCAxIDAgMCAxLjAwMi41LjUgMCAwIDAgMC0xLjAwMlpNOC41IDRBMS41MDMgMS41MDMgMCAwIDEgNyAyLjQ5M2ExLjUgMS41IDAgMCAxIC40NC0xLjA2NmMuNTY2LS41NyAxLjU1NC0uNTcgMi4xMjEgMCAuMjgzLjI4NS40MzkuNjYzLjQzOSAxLjA2NkExLjUwMiAxLjUwMiAwIDAgMSA4LjUgNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFub21hbHlDaGFydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Bbm9tYWx5U3dpbUxhbmUgPSBmdW5jdGlvbiBFdWlJY29uQW5vbWFseVN3aW1MYW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSA1VjFoNHY0SDFabTMtMVYySDJ2MmgyWm03IDFWMWg0djRoLTRabTEtMWgyVjJoLTJ2MlpNMSAxMFY2aDR2NEgxWm0zLTFWN0gydjJoMlptMiA2di00aDR2NEg2Wm0xLTFoMnYtMkg3djJabTQgMXYtNGg0djRoLTRabTEtMWgydi0yaC0ydjJabS0xLThoNHY0aC00VjZaTTYgNmg0djRINlY2Wm0tNSA1aDR2NEgxdi00Wk02IDFoNHY0SDZWMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFub21hbHlTd2ltTGFuZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcG1UcmFjZSA9IGZ1bmN0aW9uIEV1aUljb25BcG1UcmFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMGgxMmEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMlptMCAxYTEgMSAwIDAgMC0xIDF2MTJhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xVjJhMSAxIDAgMCAwLTEtMUgyWm0uNSAyaDEwYS41LjUgMCAxIDEgMCAxaC0xMGEuNS41IDAgMCAxIDAtMVptMSAzaDZhLjUuNSAwIDAgMSAwIDFoLTZhLjUuNSAwIDAgMSAwLTFabTIgM2g0YS41LjUgMCAwIDEgMCAxaC00YS41LjUgMCAwIDEgMC0xWm0zIDNoNWEuNS41IDAgMSAxIDAgMWgtNWEuNS41IDAgMSAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwbVRyYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEFkZERhdGEgPSBmdW5jdGlvbiBFdWlJY29uQXBwQWRkRGF0YShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMyIDMwSDBWM2gxMi41N2wzIDVIMzJ2MjJaTTIgMjhoMjhWMTBIMTQuNDNsLTMtNUgydjIzWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMThoLTR2LTRoLTJ2NGgtNHYyaDR2NGgydi00aDR6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFkZERhdGE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwQWR2YW5jZWRTZXR0aW5ncyA9IGZ1bmN0aW9uIEV1aUljb25BcHBBZHZhbmNlZFNldHRpbmdzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi45MDkgMjYuMTgyaDEuOTM5djQuODQ4SDIuOTA5elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00Ljg0OCAxNi42MlYwSDIuOTF2MTYuNjJhMy44NzkgMy44NzkgMCAxIDAgMS45NCAwWm0tLjk3IDUuNjgzYTEuOTQgMS45NCAwIDEgMSAwLTMuODc5IDEuOTQgMS45NCAwIDAgMSAwIDMuODc5WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNTQ1IDE2LjQ4NWgxLjkzOVYzMS4wM2gtMS45Mzl6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjQ4NSA2LjkyNFYwaC0xLjk0djYuOTI0YTMuODc5IDMuODc5IDAgMSAwIDEuOTQgMFptLS45NyA1LjY4MmExLjk0IDEuOTQgMCAxIDEgMC0zLjg3OSAxLjk0IDEuOTQgMCAwIDEgMCAzLjg4WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjYuMTgyIDI2LjE4MmgxLjkzOXY0Ljg0OGgtMS45Mzl6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4LjEyMSAxNi42MlYwaC0xLjk0djE2LjYyYTMuODc5IDMuODc5IDAgMSAwIDEuOTQgMFptLS45NyA1LjY4M2ExLjk0IDEuOTQgMCAxIDEgMC0zLjg3OSAxLjk0IDEuOTQgMCAwIDEgMCAzLjg3OVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFkdmFuY2VkU2V0dGluZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwQWdlbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwQWdlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjk5NiAxOC42MzYgMCAyMC40MzR2Ni4xMzJsNiAzLjYgNS0zIDUgMyA1LTMgNSAzIDYtMy42di02LjEzMmwtNS0zdi01bC01LTN2LTVsLTYtMy42LTYgMy42djIuODMybDIgLjAzM1Y1LjU2Nmw0LTIuNCA0IDIuNHYzLjg2OGwtMS45OTYgMS4xOTcgMSAxLjczM0wyMSAxMS4xNjZsNCAyLjR2My44NjhsLTQgMi40LTIuMjU3LTEuMzU0LS45NzEgMS43NUwyMCAyMS41NjV2My44NjhsLTQgMi40LTQtMi40di0xLjdsLTItLjAzM3YxLjczM2wtNCAyLjQtNC0yLjR2LTMuODY4bDEuOTk2LTEuMTk3LTEtMS43MzNaTTIyIDI1LjQzNHYtMy44NjhsNC0yLjQgNCAyLjR2My44NjhsLTQgMi40LTQtMi40WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTEgMjIuMTY2LTYtMy42di02LjEzMmw2LTMuNiA2IDMuNnY2LjEzMmwtNiAzLjZabTQtNC43MzJ2LTMuODY4bC00LTIuNC00IDIuNHYzLjg2OGw0IDIuNCA0LTIuNFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQWdlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwQXBtID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFwbShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTBoNHYySDFWMWgzMHY2aC0yVjNIM3Y3em0yNiAxOXYtNmgydjhIMTh2LThoMnY2aDl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMSAxMEg5djExaDEyYzUuNTIzIDAgMTAtNC40NzcgMTAtMTB2LTF6bS0xMCA5SDExdi03aDE3LjkzOEE4LjAwMSA4LjAwMSAwIDAgMSAyMSAxOXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQXBtOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEFwcFNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25BcHBBcHBTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTUuNSAxMS45MTUgMjcgNS4yNzkgMTkuNS45MzhhNy4wMDIgNy4wMDIgMCAwIDAtNyAwbC04IDQuNjJBNyA3IDAgMCAwIDEgMTEuNjJ2OS4yMzdhNyA3IDAgMCAwIDMuNSA2LjA2MWw3LjUgNC4zM1YxNy45OGE3IDcgMCAwIDEgMy41LTYuMDYzWk0xMCAyNy43ODV2LTkuODA4YTkgOSAwIDAgMSA0LjUtNy43OTNsOC41MDMtNC45MUwxOC41IDIuNjcyYTUuMDAzIDUuMDAzIDAgMCAwLTUgMGwtOCA0LjYxOUE1IDUgMCAwIDAgMyAxMS42MnY5LjIzOGE1IDUgMCAwIDAgMi41IDQuMzNsNC41IDIuNTk4WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE4LjQwOSAxMy41NWE3LjA4OSA3LjA4OSAwIDAgMSAxLjAzNSAxLjcxMUE2LjkzIDYuOTMgMCAwIDEgMjAgMTcuOTh2MTMuMjdsNy41LTQuMzNhNyA3IDAgMCAwIDMuNS02LjA2MXYtOS4yMzlhNi45OTIgNi45OTIgMCAwIDAtMS41ODctNC40MjFMMTguNDA5IDEzLjU1Wm0yLjc3Ny43MDVBOC45MzMgOC45MzMgMCAwIDEgMjIgMTcuOTc5djkuODA3bDQuNS0yLjU5OGE1IDUgMCAwIDAgMi41LTQuMzNWMTEuNjJjMC0uNTg4LS4xMDYtMS4xNjEtLjMwMy0xLjdsLTcuNTExIDQuMzM1WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBcHBTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwQXVkaXRiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEF1ZGl0YmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1IDBoMnYzMmgtMnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAzMmgxM3YtMkgyVjJoMTFWMEgwek0xOSAwdjJoMTF2MjhIMTl2MmgxM1YwelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQXVkaXRiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcENhbnZhcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBDYW52YXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDE3aDJ2N0g3ek0xMiAxNGgydjEwaC0yek0xNyAxNmgydjhoLTJ6TTIyIDE0aDN2MmgtM3pNMjIgMThoM3YyaC0zek0yMiAyMmgzdjJoLTN6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjczIDI0YTYuNDcgNi40NyAwIDAgMSAuNDUtMi4xOWMuMzM3LS45LjUyLTEuODUuNTQtMi44MWE4LjU1IDguNTUgMCAwIDAtLjU0LTIuODEgNi40NyA2LjQ3IDAgMCAxLS40NS0yLjE5IDkuMiA5LjIgMCAwIDEgLjYyLTIuNDljLjUzLTEuNTcgMS4wOC0zLjE5LjA4LTQuMi0xLTEuMDEtMi40MS0uNDQtMy41Mi4wNWE1LjU5IDUuNTkgMCAwIDEtMi4wOS42NCA1LjMgNS4zIDAgMCAxLS41OSAwTDE2IC4yOCA2Ljc3IDhhNS4zIDUuMyAwIDAgMS0uNTkgMCA1LjU5IDUuNTkgMCAwIDEtMi4wOS0uNjVDMyA2Ljg3IDEuNiA2LjI1LjU3IDcuMzFjLTEuMDMgMS4wNi0uNDUgMi42My4wOCA0LjJBOS4yIDkuMiAwIDAgMSAxLjI3IDE0YTYuNDcgNi40NyAwIDAgMS0uNDUgMi4xOUE4LjU1IDguNTUgMCAwIDAgLjI4IDE5Yy4wMi45Ni4yMDMgMS45MS41NCAyLjgxQTYuNDcgNi40NyAwIDAgMSAxLjI3IDI0YTkuMiA5LjIgMCAwIDEtLjYyIDIuNDljLS41MyAxLjU3LTEuMDggMy4xOS0uMDggNC4yLjM1My4zOC44NTIuNTkgMS4zNy41OGE1LjY3IDUuNjcgMCAwIDAgMi4xNS0uNjNBNS41OSA1LjU5IDAgMCAxIDYuMTggMzBhNy4xMyA3LjEzIDAgMCAxIDIuMjkuNDcgOCA4IDAgMCAwIDIuNjIuNTMgNy4zNyA3LjM3IDAgMCAwIDIuNDctLjUxQTcuMTQgNy4xNCAwIDAgMSAxNiAzMGE2LjI0IDYuMjQgMCAwIDEgMi4xNC40NSA4IDggMCAwIDAgMi43Ny41NSA4LjA4IDguMDggMCAwIDAgMi43Ny0uNTUgNi4yNCA2LjI0IDAgMCAxIDIuMTQtLjQ1IDUuNTkgNS41OSAwIDAgMSAyLjA5LjY1YzEuMTEuNDkgMi40OSAxLjExIDMuNTIuMDUgMS4wMy0xLjA2LjQ1LTIuNjMtLjA4LTQuMmE5LjIgOS4yIDAgMCAxLS42Mi0yLjVaTTIxLjE3IDdoLS4yNmE4IDggMCAwIDAtMi43Ny41NUE2LjI0IDYuMjQgMCAwIDEgMTYgOGE2LjI0IDYuMjQgMCAwIDEtMi4xNC0uNDVBOCA4IDAgMCAwIDExLjA5IDdoLS4yNkwxNiAyLjcyIDIxLjE3IDdabTguODkgMjIuMjdhNC40MiA0LjQyIDAgMCAxLTEuMzQtLjQ2IDcuMDggNy4wOCAwIDAgMC0yLjktLjgyIDguMTQgOC4xNCAwIDAgMC0yLjc4LjU1IDYuMTMgNi4xMyAwIDAgMS0yLjEzLjQ1IDYuMjQgNi4yNCAwIDAgMS0yLjE0LS40NUE4IDggMCAwIDAgMTYgMjhhOSA5IDAgMCAwLTMuMDguNiA1Ljc0IDUuNzQgMCAwIDEtMS44My40IDYuMzYgNi4zNiAwIDAgMS0yLS40M0E4LjcyIDguNzIgMCAwIDAgNi4xOCAyOGE3LjA4IDcuMDggMCAwIDAtMi45LjgyIDkuNjUgOS42NSAwIDAgMS0xLjI4LjUyIDYuMDggNi4wOCAwIDAgMSAuNTItMi4yMWMuNDAzLTEgLjY1LTIuMDU1LjczLTMuMTNhOC41NSA4LjU1IDAgMCAwLS41NC0yLjgxQTYuNDcgNi40NyAwIDAgMSAyLjI3IDE5YTYuNDcgNi40NyAwIDAgMSAuNDQtMi4xOWMuMzM3LS45LjUyLTEuODUuNTQtMi44MWExMC40OCAxMC40OCAwIDAgMC0uNzItMy4xMyA5IDkgMCAwIDEtLjU5LTIuMTZIMmMuNDQ3LjEuODguMjU1IDEuMjkuNDZhNy4wOCA3LjA4IDAgMCAwIDIuOS44MkE4LjE0IDguMTQgMCAwIDAgOSA5LjQ0IDYuMTMgNi4xMyAwIDAgMSAxMS4wOSA5YTYuMTMgNi4xMyAwIDAgMSAyLjEzLjQ1QTguMTQgOC4xNCAwIDAgMCAxNiAxMGE4LjE0IDguMTQgMCAwIDAgMi43OC0uNTVBNi4xMyA2LjEzIDAgMCAxIDIwLjkxIDlhNi4xMyA2LjEzIDAgMCAxIDIuMDkuNDQgOC4xNCA4LjE0IDAgMCAwIDIuNzguNTUgNy4wOCA3LjA4IDAgMCAwIDIuOS0uODJBOS42NSA5LjY1IDAgMCAxIDMwIDguNjZhNi4wOCA2LjA4IDAgMCAxLS41MiAyLjIxYy0uNDAzIDEtLjY1IDIuMDU1LS43MyAzLjEzLjAyLjk2LjIwMyAxLjkxLjU0IDIuODFhNi40NyA2LjQ3IDAgMCAxIC40NCAyLjE5IDYuNDcgNi40NyAwIDAgMS0uNDQgMi4xOSA4LjU1IDguNTUgMCAwIDAtLjU0IDIuODFjLjA3OCAxLjA3NC4zMiAyLjEzLjcyIDMuMTNhOSA5IDAgMCAxIC41OSAyLjE2di0uMDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDYW52YXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwQ2FzZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwQ2FzZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDZoMjJ2N2gtMlY4SDZ2MTlINFY2WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCAxMkg3di0yaDN2MlptMSAwaDEydi0ySDExdjJaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0IDFIMHYyNmgxbC0xIC4wMDF2LjAyNmEyLjI1NiAyLjI1NiAwIDAgMCAuMDEuMTg1IDQuMzE4IDQuMzE4IDAgMCAwIC41NjMgMS43OTJDMS4xOTQgMzAuMDY0IDIuMzk5IDMxIDQuNSAzMUgxN3YtMkg4LjQyOWE0LjMyIDQuMzIgMCAwIDAgLjU3LTEuOTI3di0uMDYyTDkgMjcuMDA1di0uMDAzUzkgMjcgOCAyN2gxVjE2aDIxdjNoMnYtNUg3djEyLjk5NWwtLjAwMy4wNWEyLjMyIDIuMzIgMCAwIDEtLjI5OC45NUM2LjQ0MiAyOC40MzYgNS44OTggMjkgNC41IDI5Yy0xLjM5OCAwLTEuOTQyLS41NjQtMi4xOTktMS4wMDRhMi4zMiAyLjMyIDAgMCAxLS4zLTEuMDAxTDIgMjYuOTkyVjNoMjB2M2gyVjFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMyAyMXYzaC0zdjJoM3YzaDJ2LTNoM3YtMmgtM3YtM2gtMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yNCAzMmE3IDcgMCAxIDAgMC0xNCA3IDcgMCAwIDAgMCAxNFptMC0yYTUgNSAwIDEgMCAwLTEwIDUgNSAwIDAgMCAwIDEwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ2FzZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwQ29kZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBDb2RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTEuMjc2IDI5IC41OTQgMkgwbDcuNjIxLTE0LjI5LjgxMSAyLjczTDMuMzMzIDI5aDcuOTQzWk0yOC45MiAzMWwtNC45ODctMTYuNTk4QTE2IDE2IDAgMCAwIDguNjg4IDNsMS44IDZIOC40TDYgMWgyLjYwN2ExOCAxOCAwIDAgMSAxNy4yNDEgMTIuODI4TDMxIDMxaC0yLjA4WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuMDM3IDE0LjAyIDE2LjQ5MiAyOWg2LjgyN2wtMi4zMzMtNy44NDlhMTAgMTAgMCAwIDAtOC45NDktNy4xM1pNOS4zNSAxMmgyLjA1YTEyIDEyIDAgMCAxIDExLjUwMyA4LjU4MUwyNiAzMUgxNUw5LjM1IDEyWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDb2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcENvbnNvbGUgPSBmdW5jdGlvbiBFdWlJY29uQXBwQ29uc29sZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDlIM2EzIDMgMCAwIDEtMy0zVjNhMyAzIDAgMCAxIDMtM2gyNmEzIDMgMCAwIDEgMyAzdjNhMyAzIDAgMCAxLTMgM1pNMyAyYTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxaDI2YTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xSDNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSAzMkgzYTMgMyAwIDAgMS0zLTNWMTRhMyAzIDAgMCAxIDMtM2gyNmEzIDMgMCAwIDEgMyAzdjE1YTMgMyAwIDAgMS0zIDNaTTMgMTNhMSAxIDAgMCAwLTEgMXYxNWExIDEgMCAwIDAgMSAxaDI2YTEgMSAwIDAgMCAxLTFWMTRhMSAxIDAgMCAwLTEtMUgzWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm03LjI5IDE3LjcxIDMuMyAzLjI5LTMuMyAzLjI5IDEuNDIgMS40MiA0LjctNC43MS00LjctNC43MXpNMTUgMjRoOXYyaC05elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ29uc29sZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBDcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25BcHBDcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMHYxNmg4LjdsNS4zLTZWMEgwem0yIDJoMTB2N0g3djVIMlYyem04LjQ1IDlMOSAxMi42NFYxMWgxLjQ1ek0xOCAxNnYxNmg4LjdsNS4zLTZWMTZIMTh6bTIgMmgxMHY3aC01djVoLTVWMTh6bTguNDUgOUwyNyAyOC42NFYyN2gxLjQ1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxOEgzYzAgNi4wNzUgNC45MjUgMTEgMTEgMTFoMnYtMmgtMmE5IDkgMCAwIDEtOS05ek0xOCAzaC0ydjJoMmE5IDkgMCAwIDEgOSA5aDJjMC02LjA3NS00LjkyNS0xMS0xMS0xMXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwRGFzaGJvYXJkID0gZnVuY3Rpb24gRXVpSWNvbkFwcERhc2hib2FyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDlIM2EzIDMgMCAwIDEtMy0zVjNhMyAzIDAgMCAxIDMtM2gyNmEzIDMgMCAwIDEgMyAzdjNhMyAzIDAgMCAxLTMgM1pNMyAyYTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxaDI2YTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xSDNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAyMEgzYTMgMyAwIDAgMS0zLTN2LTNhMyAzIDAgMCAxIDMtM2g5YTMgMyAwIDAgMSAzIDN2M2EzIDMgMCAwIDEtMyAzWm0tOS03YTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxaDlhMSAxIDAgMCAwIDEtMXYtM2ExIDEgMCAwIDAtMS0xSDNaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDMxSDNhMyAzIDAgMCAxLTMtM3YtM2EzIDMgMCAwIDEgMy0zaDlhMyAzIDAgMCAxIDMgM3YzYTMgMyAwIDAgMS0zIDNabS05LTdhMSAxIDAgMCAwLTEgMXYzYTEgMSAwIDAgMCAxIDFoOWExIDEgMCAwIDAgMS0xdi0zYTEgMSAwIDAgMC0xLTFIM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDMxaC05YTMgMyAwIDAgMS0zLTNWMTRhMyAzIDAgMCAxIDMtM2g5YTMgMyAwIDAgMSAzIDN2MTRhMyAzIDAgMCAxLTMgM1ptLTktMThhMSAxIDAgMCAwLTEgMXYxNGExIDEgMCAwIDAgMSAxaDlhMSAxIDAgMCAwIDEtMVYxNGExIDEgMCAwIDAtMS0xaC05WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBEYXNoYm9hcmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwRGV2dG9vbHMgPSBmdW5jdGlvbiBFdWlJY29uQXBwRGV2dG9vbHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAyOGgtMnYtOC40OWwuNi0uMjZBOSA5IDAgMCAwIDIxIDMuNTJWMTFIMTFWMy41MmE5IDkgMCAwIDAgMS40IDE1LjczbC42LjI2VjI4aC0ydi03LjIxQTExIDExIDAgMCAxIDExLjYuOTJMMTMgLjMxVjloNlYuMzFsMS40LjYxYTExIDExIDAgMCAxIC42IDE5Ljg3VjI4WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgMzBoMTB2MkgxMXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRGV2dG9vbHM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwRGlzY292ZXIgPSBmdW5jdGlvbiBFdWlJY29uQXBwRGlzY292ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm04LjMzIDIzLjY3IDQuNzktMTAuNTUgMTAuNTUtNC43OS00Ljc5IDEwLjU1LTEwLjU1IDQuNzlabTYuMy05LTIuMjggNSA1LTIuMjggMi4yOC01LTUgMi4yOFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMEM3LjE2MyAwIDAgNy4xNjMgMCAxNnM3LjE2MyAxNiAxNiAxNiAxNi03LjE2MyAxNi0xNkExNiAxNiAwIDAgMCAxNiAwWm0xIDI5Ljk1VjI4aC0ydjEuOTVBMTQgMTQgMCAwIDEgMi4wNSAxN0g0di0ySDIuMDVBMTQgMTQgMCAwIDEgMTUgMi4wNVY0aDJWMi4wNUExNCAxNCAwIDAgMSAyOS45NSAxNUgyOHYyaDEuOTVBMTQgMTQgMCAwIDEgMTcgMjkuOTVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBEaXNjb3ZlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBFbXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwRW1zKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAyMmgzdjJIMVYxaDIzdjVoLTJWM0gzelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4yMjggMjljMS40OTItMS42NzggMS4zNTMtMi44NTkuMDA5LTUuNjU0LS4wNDktLjEtLjA0OS0uMS0uMDk3LS4yMDMtMS4zNjktMi44NTUtMS42MjYtNC40OTEtLjMyNS02LjU4MiAyLjc5Ni00LjQ5OCA5LjUxNC0yLjY0MiAxNC4xODUgMi4zMTdWMTBIMTB2MTloNS4yMjhabTIuNDcgMEgyOXYtNi45ODNjLTMuODgtNS40MDYtMTAuMzc2LTcuNzk1LTEyLjQ4Ny00LjQtLjgzIDEuMzM2LS42NjkgMi4zNy40MyA0LjY2MmwuMDk3LjJjMS4zNTIgMi44MTQgMS43MzEgNC42My42NTkgNi41MjFaTTMxIDh2MjNIOFY4aDIzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRW1zOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEZpbGViZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEZpbGViZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxOGgxNnYySDh6TTggMTNoOXYySDh6TTggMjNoMTZ2Mkg4elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS40MSAwSDVhMyAzIDAgMCAwLTMgM3YyNmEzIDMgMCAwIDAgMyAzaDIyYTMgMyAwIDAgMCAzLTNWOC41OUwyMS40MSAwWk0yMiAzLjQxIDI2LjU5IDhIMjJWMy40MVpNMjcgMzBINWExIDEgMCAwIDEtMS0xVjNhMSAxIDAgMCAxIDEtMWgxNXY4aDh2MTlhMSAxIDAgMCAxLTEgMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEZpbGViZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEZsZWV0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEZsZWV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMi44MiAxNiAuMDM4IDExIDIuODJ2Mi4yODlsNS0yLjc4MiA1IDIuNzgydi0yLjI5WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSA3LjI4MiAxNiA0LjVsLTUgMi43ODJWOS41N2w1LTIuNzgxIDUgMi43ODFWNy4yODJaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgNS4wNDUgMiA3LjgyN3YxNS41NzdsMTQgNy43ODggMTQtNy43ODhWNy44MjdsLTUtMi43ODJ2Mi4yODlsMyAxLjY2OXYxMy4yMjVsLTEyIDYuNjc2LTEyLTYuNjc2VjkuMDAzbDMtMS42NjlWNS4wNDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjIgMTIuNSAxNiA5bC02IDMuNXY3bDYgMy41IDYtMy41di03Wm0tOS45NzQgMS4yMDVMMTYgMTEuMzg3bDMuOTc0IDIuMzE4djQuNTlMMTYgMjAuNjEzbC0zLjk3NC0yLjMxOHYtNC41OVpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEZsZWV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEdpcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBHaXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0yOS4wMTQgMjMuODkgMi4yOTYgMS4xNDVMMTYgMzIuMTAxLjUzIDI0Ljk2MWwyLjQ5LTEuMDU2IDIuNDUzIDEuMTMyLS4wMDMuMDAyTDE2IDI5Ljg5OWwxMC42OS00LjkzNC0uMDAzLS4wMDEgMi4zMjctMS4wNzRabS00Ljk3Mi03LjQ4MiA3LjI2OCAzLjYyN0wxNiAyNy4xMDEuNTMgMTkuOTYxbDcuNjY4LTMuMjUyYy4zOTIuNDg2LjgzOCAxLjAyIDEuMzQgMS42MDRMNS40NyAyMC4wMzkgMTYgMjQuODk5bDEwLjY5LTQuOTM0LTMuOTU0LTEuOTczYy40OTMtLjU4LjkyOC0xLjEwNyAxLjMwNi0xLjU4NFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggOWEyIDIgMCAxIDAtNCAwIDIgMiAwIDAgMCA0IDBabTIgMGE0IDQgMCAxIDEtOCAwIDQgNCAwIDAgMSA4IDBabS0zLjI2OCAxMi42ODEtLjczMi43ODctLjczMi0uNzg3Yy0zLjU1Ny0zLjgyNC01LjgxNy02LjQ2Mi02LjgxLTcuOTZBOC43NDYgOC43NDYgMCAwIDEgNyA4Ljg3NUM3IDMuOTcgMTEuMDMzIDAgMTYgMHM5IDMuOTcgOSA4Ljg3NWE4Ljc0NiA4Ljc0NiAwIDAgMS0xLjQ1OSA0Ljg0NmMtLjk5MiAxLjQ5OC0zLjI1MiA0LjEzNi02LjgwOSA3Ljk2Wm01LjE0Mi05LjA2NEE2Ljc0NyA2Ljc0NyAwIDAgMCAyMyA4Ljg3NUMyMyA1LjA4MSAxOS44NyAyIDE2IDJTOSA1LjA4MSA5IDguODc1YzAgMS4zNDkuMzk0IDIuNjM2IDEuMTI2IDMuNzQyLjg0NiAxLjI3NyAyLjgxMiAzLjU5MyA1Ljg3NCA2LjkxMiAzLjA2Mi0zLjMyIDUuMDI4LTUuNjM1IDUuODc0LTYuOTEyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwR2lzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEdyYXBoID0gZnVuY3Rpb24gRXVpSWNvbkFwcEdyYXBoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjQgMjBhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4em0wLTZhMiAyIDAgMSAwIDAgNCAyIDIgMCAwIDAgMC00em0tOC4yLTUuNjJBNCA0IDAgMSAxIDE4IDEuMDZhNCA0IDAgMCAxLTIuMiA3LjMyem0wLTZhMiAyIDAgMSAwIC4wMSAwaC0uMDF6bS4wMSAyOS4yNGE0IDQgMCAxIDEtLjA4My04IDQgNCAwIDAgMSAuMDgzIDh6bTAtNmEyIDIgMCAxIDAgLjM5IDAgMiAyIDAgMCAwLS40IDBoLjAxelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCAxN3YtMmgtNi4xNGE0IDQgMCAwIDAtLjg2LTEuNjRsMi4zMS0zLjQ0LTEuNjgtMS4xMi0yLjMxIDMuNDRBNCA0IDAgMCAwIDggMTJhNCA0IDAgMSAwIDAgOCA0IDQgMCAwIDAgMS4zMi0uMjRsMi4zMSAzLjQ0IDEuNjYtMS4xMkwxMSAxOC42NGE0IDQgMCAwIDAgLjg2LTEuNjRIMThaTTYgMTZhMiAyIDAgMSAxIDQgMCAyIDIgMCAwIDEtNCAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwR3JhcGg7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwR3JvayA9IGZ1bmN0aW9uIEV1aUljb25BcHBHcm9rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS43MjcgMi45MVYuOTdjLTEuMzU3IDAtNC4xOCAwLTUuODE4IDEuOTQtLjk3IDEuMTgyLTEuMzI4IDIuOTA4LS45NyA0Ljk4My41NjMgMy4zMDcuOTcgNi4zMzIuMzAxIDcuMTU3LS4zLjMxLS45Ny40NjUtMi4yNC40NjV2MS45NGMxLjI3IDAgMS45NC4xNTUgMi4yNS40OTQuNjk4LjgyNC4yNjIgMy44NzktLjMgNy4xNTYtLjM1IDIuMTI0LS4wMSAzLjgwMi45NiA0Ljk1NkM1LjUyNyAzMiA4LjM1IDMyIDkuNzI2IDMydi0xLjk0Yy0xLjE0NCAwLTMuMjg3IDAtNC4zMTUtMS4yMjFhNC4xMTIgNC4xMTIgMCAwIDEtLjUzMy0zLjQxNGMuODQzLTUuMDQyLjk3LTcuMzctLjEzNi04LjcyNy0uMDY4LS4wNzctLjE0NS0uMTM2LS4yMTMtLjIwMy0uMDY4LS4wNjguMTQ1LS4xMjcuMjEzLS4yMDQgMS4xNDQtMS4zNjcuOTctMy42OTUuMTM2LTguNzI3YTQuMTEyIDQuMTEyIDAgMCAxIC41NDMtMy40MTRDNi40NCAyLjkxIDguNTgzIDIuOTEgOS43MjcgMi45MXpNMzIuMDMgMTcuNDU0di0xLjk0Yy0xLjI3IDAtMS45NC0uMTU1LTIuMjUtLjQ5NC0uNjk4LS44MjUtLjI2MS0zLjg4LjMwMS03LjE1Ny4zNS0yLjEyMyAwLTMuODAxLS45Ny00Ljk4NEMyNy40OTMuOTQgMjQuNjcyLjk0IDIzLjI5NC45NHYxLjk3YzEuMTQ1IDAgMy4yODggMCA0LjMxNSAxLjIyYTQuMTEyIDQuMTEyIDAgMCAxIC41NDQgMy40MTRjLS44NDQgNS4wNDMtLjk3IDcuMzcuMTM1IDguNzI4LjA2OC4wNzcuMTQ2LjEzNS4yMTQuMjAzLjA2Ny4wNjgtLjE0Ni4xMjYtLjIxNC4yMDQtMS4xNDQgMS4zNjctLjk3IDMuNjk0LS4xMzUgOC43MjcuMzI5IDEuMTYyLjEzIDIuNDEtLjU0NCAzLjQxMy0xLjAxOCAxLjI0Mi0zLjE2IDEuMjQyLTQuMzA1IDEuMjQyVjMyYzEuMzU4IDAgNC4xOCAwIDUuODE4LTEuOTQuOTctMS4xODIgMS4zMjktMi45MDguOTctNC45ODQtLjU2My0zLjMwNi0uOTctNi4zMzItLjMtNy4xNTYuMy0uMzEuOTY5LS40NjUgMi4yNC0uNDY1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjYuMjEyIDE1LjUxNWgtMi4wMDdhNy43NTggNy43NTggMCAwIDAtNi43Mi02LjcyVjYuNzg4aC0xLjk0djIuMDA3YTcuNzU4IDcuNzU4IDAgMCAwLTYuNzIgNi43Mkg2LjgxOHYxLjk0aDIuMDA3YTcuNzU4IDcuNzU4IDAgMCAwIDYuNzIgNi43MnYyLjAwN2gxLjk0di0yLjAwN2E3Ljc1OCA3Ljc1OCAwIDAgMCA2LjcyLTYuNzJoMi4wMDd2LTEuOTRabS04LjcyNyA2Ljd2LTEuODUxaC0xLjk0djEuODUyYTUuODE4IDUuODE4IDAgMCAxLTQuNzYtNC43NjFoMS44NTF2LTEuOTRoLTEuODUyYTUuODE4IDUuODE4IDAgMCAxIDQuNzYxLTQuNzYxdjEuODUyaDEuOTR2LTEuODUyYTUuODE4IDUuODE4IDAgMCAxIDQuNzYxIDQuNzYxaC0xLjg1MnYxLjk0aDEuODUyYTUuODE4IDUuODE4IDAgMCAxLTQuNzYxIDQuNzZaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEdyb2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwSGVhcnRiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEhlYXJ0YmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuMTQgMTUuMzlhOC4wNTggOC4wNTggMCAwIDEtMi4yLTQuMDQzQTYuNzg4IDYuNzg4IDAgMCAxIDQuMTk4IDUuNDdhNi43MyA2LjczIDAgMCAxIDguNzI3LS4yMTNsMS4yNi0xLjQ2NGE4LjY1IDguNjUgMCAwIDAtMTEuMjc3LjIzMkE4LjcyNyA4LjcyNyAwIDAgMCAuMDY4IDExLjZhMTAuMTcyIDEwLjE3MiAwIDAgMCAyLjc5MyA1LjI3NWwxLjI4LTEuNDg0WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS41MTUgMzEuMjc0IDQuNTQ4IDE4LjQ1NCAxNS44NTUgNC43NjNhOC42NyA4LjY3IDAgMCAxIDEyLjI2Ni0uNzQ2IDguNzI3IDguNzI3IDAgMCAxIDIuOTEgNy4yMDVjLS4yNDMgMi42OTUtMi4wMzcgNC43MzItMy40ODIgNi4zN0wxNS41MTUgMzEuMjc1Wm0tOC40MjctMTIuODIgOC40MjcgOS44NjIgMTAuNTUtMTEuOTk1YzEuMzItMS41MDMgMi44MjItMy4yMSAzLjAwNy01LjI2NWE2Ljc4OCA2Ljc4OCAwIDAgMC0yLjI0LTUuNTg2IDYuNzMgNi43MyAwIDAgMC05LjUwNC41NjNMNy4wODggMTguNDU1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSGVhcnRiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcEluZGV4TWFuYWdlbWVudCA9IGZ1bmN0aW9uIEV1aUljb25BcHBJbmRleE1hbmFnZW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNyAxOHYtMmgtMnYySDN2Nmgydi00aDEwdjRoMnYtNGgxMHY0aDJ2LTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDMyYTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNnptMC00YTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMnptMTIgNGEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZ6bTAtNGExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJ6bTEyIDRhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2em0wLTRhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yek0yMyA4VjZoLTIuMWE1IDUgMCAwIDAtLjczLTEuNzVsMS40OS0xLjQ5LTEuNDItMS40Mi0xLjQ5IDEuNDlBNSA1IDAgMCAwIDE3IDIuMVYwaC0ydjIuMWE1IDUgMCAwIDAtMS43NS43M2wtMS40OS0xLjQ5LTEuNDIgMS40MiAxLjQ5IDEuNDlBNSA1IDAgMCAwIDExLjEgNkg5djJoMi4xYTUgNSAwIDAgMCAuNzMgMS43NWwtMS40OSAxLjQ5IDEuNDEgMS40MSAxLjQ5LTEuNDlhNSA1IDAgMCAwIDEuNzYuNzRWMTRoMnYtMi4xYTUgNSAwIDAgMCAxLjc1LS43M2wxLjQ5IDEuNDkgMS40MS0xLjQxLTEuNDgtMS41QTUgNSAwIDAgMCAyMC45IDhIMjN6bS03IDJhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiA4YTEgMSAwIDAgMS0xLTEgMS4zOSAxLjM5IDAgMCAxIDAtLjIuNjUuNjUgMCAwIDEgLjA2LS4xOC43NC43NCAwIDAgMSAuMDktLjE4IDEuNjEgMS42MSAwIDAgMSAuMTItLjE1LjkzLjkzIDAgMCAxIC4zMy0uMjEgMSAxIDAgMCAxIDEuMDkuMjFsLjEyLjE1YS43OC43OCAwIDAgMSAuMDkuMTguNjIuNjIgMCAwIDEgLjEuMTggMS4yNyAxLjI3IDAgMCAxIDAgLjIgMSAxIDAgMCAxLTEgMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEluZGV4TWFuYWdlbWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBJbmRleFBhdHRlcm4gPSBmdW5jdGlvbiBFdWlJY29uQXBwSW5kZXhQYXR0ZXJuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMTRoLThhMyAzIDAgMCAxLTMtM1YzYTMgMyAwIDAgMSAzLTNoOGEzIDMgMCAwIDEgMyAzdjhhMyAzIDAgMCAxLTMgM1pNMTIgMmExIDEgMCAwIDAtMSAxdjhhMSAxIDAgMCAwIDEgMWg4YTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xaC04Wk0xNyAxOHYtMmgtMnYySDN2Nmgydi00aDEwdjRoMnYtNGgxMHY0aDJ2LTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDMyYTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNnptMC00YTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMnptMTIgNGEzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZ6bTAtNGExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJ6bTEyIDRhMyAzIDAgMSAxIDAtNiAzIDMgMCAwIDEgMCA2em0wLTRhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yek0xMyA0aDZ2MmgtNnpNMTMgOGg2djJoLTZ6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEluZGV4UGF0dGVybjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBJbmRleFJvbGx1cCA9IGZ1bmN0aW9uIEV1aUljb25BcHBJbmRleFJvbGx1cChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMyIDI2di0yaC0yLjFhNSA1IDAgMCAwLS43My0xLjc1bDEuNDktMS40OS0xLjQxLTEuNDEtMS40OSAxLjQ5QTUgNSAwIDAgMCAyNiAyMC4xVjE4aC0ydjIuMWE1IDUgMCAwIDAtMS43NS43M2wtMS40OS0xLjQ5LTEuNDEgMS40MSAxLjQ5IDEuNDlBNSA1IDAgMCAwIDIwLjEgMjRIMTh2MmgyLjFhNSA1IDAgMCAwIC43MyAxLjc1bC0xLjQ5IDEuNDkgMS40MSAxLjQxIDEuNDktMS40OWE1IDUgMCAwIDAgMS43Ni43NFYzMmgydi0yLjFhNSA1IDAgMCAwIDEuNzUtLjczbDEuNDkgMS40OSAxLjQxLTEuNDEtMS40OS0xLjQ5QTUgNSAwIDAgMCAyOS45IDI2SDMyWm0tNyAyYTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI1LjcxIDI0LjI5YTEgMSAwIDAgMC0xLjA5LS4yMSAxLjE1IDEuMTUgMCAwIDAtLjMzLjIxLjkzLjkzIDAgMCAwLS4yMS4zMyAxIDEgMCAwIDAgMS4zIDEuMyAxLjE1IDEuMTUgMCAwIDAgLjMzLS4yMSAxIDEgMCAwIDAgLjIxLTEuMDkuOTQuOTQgMCAwIDAtLjIxLS4zM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgNmgxNnYySDV6TTUgMTJoMTZ2Mkg1ek01IDE4aDEwdjJINXpNNSAyNGg4djJINXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMzJIM2EzIDMgMCAwIDEtMy0zVjNhMyAzIDAgMCAxIDMtM2gyMGEzIDMgMCAwIDEgMyAzdjEzaC0yVjNhMSAxIDAgMCAwLTEtMUgzYTEgMSAwIDAgMC0xIDF2MjZhMSAxIDAgMCAwIDEgMWgxM3YyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSW5kZXhSb2xsdXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwTGVucyA9IGZ1bmN0aW9uIEV1aUljb25BcHBMZW5zKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMjMuNzkzIDE0LjI5MyAxLjQxNCAxLjQxNC02LjQwOCA2LjQwOS0zLjc1LTMuMjUtNC4zNDIgNC4zNDEtMS40MTQtMS40MTQgNS42NTgtNS42NTkgMy43NSAzLjI1IDUuMDkyLTUuMDkxWk0xMiAxMXY1bC0yIDJ2LTdoMlptMTAtNnY4bC0yIDJWNWgyWm0tNSAzdjdsLTItMlY4aDJaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3IDBjOC4yODQgMCAxNSA2LjcxNiAxNSAxNSAwIDguMjg0LTYuNzE2IDE1LTE1IDE1LTMuNzgyIDAtNy4yMzgtMS40LTkuODc2LTMuNzFsLTUuNDE3IDUuNDE3LTEuNDE0LTEuNDE0IDUuNDE3LTUuNDE3QTE0Ljk0MyAxNC45NDMgMCAwIDEgMiAxNWMwLTEuMDUuMTA4LTIuMDc0LjMxMy0zLjA2MmwxLjkwNi42NzJDNC4wNzUgMTMuMzg1IDQgMTQuMTg0IDQgMTVjMCA3LjE4IDUuODIgMTMgMTMgMTNzMTMtNS44MiAxMy0xM1MyNC4xOCAyIDE3IDJjLTEuMDAyIDAtMS45NzguMTEzLTIuOTE1LjMyOGwtLjc1LTEuODc3QTE1LjAzMSAxNS4wMzEgMCAwIDEgMTcgMFpNOS42MjEgMS45MzdsLjc1IDEuODc3YTEzLjA2MiAxMy4wNjIgMCAwIDAtNC44MiA1LjAyNGwtMS45MDctLjY3M2ExNS4wNjggMTUuMDY4IDAgMCAxIDUuOTc3LTYuMjI4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTGVuczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBMb2dzID0gZnVuY3Rpb24gRXVpSWNvbkFwcExvZ3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDhjMy45ODMgMCA3LjczMiAxLjAxMyAxMS4wMDEgMi43OTd2Mi4zMTJBMjAuODg3IDIwLjg4NyAwIDAgMCAyIDEwLjAyM3YxMS4wMjVjNC44NS40NjIgOS4yNyA0LjE4MyA5Ljk1NSA4LjY5MWwuMDM1LjI2MUgxMnYyaC0xLjkzOGwtLjAxOC0xLjIzNmMtLjExNi00LjAxNS00LjMzNi03LjYzMS04Ljc5My03Ljc2TDAgMjIuOTg2VjhoMXptMTMtOGgxYzkuMjggMCAxNi44MjUgNy40MzcgMTYuOTk3IDE2LjY3N0wzMiAxN3YxNWgtMlYxN2MwLTcuODQtNi4wMTQtMTQuMjc0LTEzLjY4LTE0Ljk0M0wxNiAyLjAzM3Y3LjY4MWwtMi0xLjE0M1YwaDEtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI2Ljk5NyAzMC42MzYgMjcuMDA5IDMySDE0VjExLjMwNWwxLjQ4My44MmM2Ljk5NCAzLjg2MSAxMS4zODIgMTAuNzM1IDExLjUxNCAxOC41MXptLTIuMDQ4LTEuMDRDMjQuNTA1IDIzLjU1NiAyMS4yMDUgMTguMiAxNiAxNC43NzFWMzBoOC45NzRsLS4wMjUtLjQwNHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTG9nczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBNYW5hZ2VtZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1hbmFnZW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAyMWE1IDUgMCAxIDEgMC0xMCA1IDUgMCAwIDEgMCAxMFptMC04YTMgMyAwIDEgMCAwIDYgMyAzIDAgMCAwIDAtNlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMzJoLTh2LTQuMDZhMSAxIDAgMCAwLTEuNjEtLjY3bC0yLjg4IDIuODctNS42NS01LjY1IDIuODctMi44N2EuOTIuOTIgMCAwIDAgLjItMSAuOTMuOTMgMCAwIDAtLjg2LS42SDBWMTJoNC4wNmEuOTIuOTIgMCAwIDAgLjg1LS41OC45NC45NCAwIDAgMC0uMTktMUwxLjg2IDcuNTFsNS42NS01LjY1IDIuODcgMi44N0ExIDEgMCAwIDAgMTIgNC4wNlYwaDh2NC4wNmExIDEgMCAwIDAgMS42MS42N2wyLjg3LTIuODcgNS42NiA1LjY2LTIuODcgMi44N2EuOTIuOTIgMCAwIDAtLjIgMSAuOTMuOTMgMCAwIDAgLjg2LjZIMzJ2OGgtNC4wNmEuOTIuOTIgMCAwIDAtLjg1LjU4Ljk0Ljk0IDAgMCAwIC4xOSAxbDIuODcgMi44Ny01LjY2IDUuNjYtMi44Ny0yLjg3YTEgMSAwIDAgMC0xLjYxLjY3TDIwIDMyWm0tNi0yaDR2LTIuMDZhMyAzIDAgMCAxIDUtMi4wOGwxLjQ2IDEuNDYgMi44My0yLjgzTDI1Ljg2IDIzYTMgMyAwIDAgMSAyLjA4LTVIMzB2LTRoLTIuMDZhMyAzIDAgMCAxLTIuMDgtNWwxLjQ2LTEuNDYtMi44My0yLjg1TDIzIDYuMTRhMyAzIDAgMCAxLTUtMi4wOFYyaC00djIuMDZhMyAzIDAgMCAxLTUgMi4wOEw3LjUxIDQuNjkgNC42OSA3LjUxIDYuMTQgOWEzIDMgMCAwIDEtMi4wOCA1SDJ2NGgyLjA2YTMgMyAwIDAgMSAyLjA4IDVsLTEuNDUgMS40OSAyLjgzIDIuODNMOSAyNS44NmEzIDMgMCAwIDEgNSAyLjA4VjMwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTWFuYWdlbWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBNZXRyaWNiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1ldHJpY2JlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAgMS0xNiAxNlptMC0zMEM4LjI2OCAyIDIgOC4yNjggMiAxNnM2LjI2OCAxNCAxNCAxNCAxNC02LjI2OCAxNC0xNEExNCAxNCAwIDAgMCAxNiAyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjggMTZoLTJjMC01LjUyMy00LjQ3Ny0xMC0xMC0xMFM2IDEwLjQ3NyA2IDE2SDRDNCA5LjM3MyA5LjM3MyA0IDE2IDRzMTIgNS4zNzMgMTIgMTJaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjcxIDExLjcxIDIwLjMgMTAuMyAxOCAxMi41N2E0IDQgMCAwIDAtMi0uNTcgNCA0IDAgMSAwIDQgNCA0IDQgMCAwIDAtLjU3LTJsMi4yOC0yLjI5Wk0xNiAxOGEyIDIgMCAxIDEgMC00IDIgMiAwIDAgMSAwIDRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNZXRyaWNiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcE1ldHJpY3MgPSBmdW5jdGlvbiBFdWlJY29uQXBwTWV0cmljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwIDE5LjA5MnYxMi44OEgydi01LjM4Nmw2Ljc0Ny02Ljc0Ny43MDguNzA4Yy4yMzYuMjM2LjQ4LjQ2My43MzMuNjhMNCAyNy40MTR2Mi41NThoMjR2LTguOTFjLjE4Ni0uMTY2LjM2OS0uMzM5LjU0Ni0uNTE2TDMwIDE5LjA5MnptLTIwLjg1LTMuMTlBMTAuOTU1IDEwLjk1NSAwIDAgMSA4IDExQzggNC45MjUgMTIuOTI1IDAgMTkgMHMxMSA0LjkyNSAxMSAxMWMwIDEuNzYtLjQxNCAzLjQyNS0xLjE1IDQuOWwtMS41MS0xLjUxQTguOTczIDguOTczIDAgMCAwIDI4IDExYTkgOSAwIDEgMC0xNy4zNCAzLjM5MWwtMS41MSAxLjUxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkgMjBhOC45NiA4Ljk2IDAgMCAwIDUuNjE4LTEuOTY4bC00LjIwMi00LjIwNGEyIDIgMCAwIDAtMi44MjggMGwtNC4yMDUgNC4yMDVBOC45NiA4Ljk2IDAgMCAwIDE5IDIwem0tMi44MjYtNy41ODZhNCA0IDAgMCAxIDUuNjU2IDBsNS42NTYgNS42NTctLjcwNy43MDdBMTAuOTY3IDEwLjk2NyAwIDAgMSAxOSAyMmExMC45NjcgMTAuOTY3IDAgMCAxLTcuNzc4LTMuMjIxbC0uNzA3LS43MDcgNS42NTktNS42NTh6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1ldHJpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwTWwgPSBmdW5jdGlvbiBFdWlJY29uQXBwTWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCAxOHYuNTZhMSAxIDAgMCAxLS42OC45NUwzIDIxLjYxVjEwYTEgMSAwIDAgMSAuNC0uOGwzLjItMi40LTEuMi0xLjYtMy4yIDIuNEEzIDMgMCAwIDAgMSAxMHYxMmEzIDMgMCAwIDAgMS4yIDIuNGwzLjIgMi40IDEuMi0xLjYtMi40Ny0xLjg1IDUuODItMS45NUEzIDMgMCAwIDAgMTIgMTguNTZWMThoLTJ6TTI5LjggNy42bC0zLjItMi40LTEuMiAxLjYgMy4yIDIuNGExIDEgMCAwIDEgLjQuOHYxMS42MWwtNi4zMi0yLjExYTEgMSAwIDAgMS0uNjgtLjk1VjE4aC0ydi41NmEzIDMgMCAwIDAgMi4wNSAyLjg1bDUuODIgMS45NC0yLjQ3IDEuODUgMS4yIDEuNiAzLjItMi40QTMgMyAwIDAgMCAzMSAyMlYxMGEzIDMgMCAwIDAtMS4yLTIuNHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgNkEzIDMgMCAwIDEgOC44OC44OGEzLjA3IDMuMDcgMCAwIDEgNC4yNCAwQTMgMyAwIDAgMSAxMSA2em0wLTRhMSAxIDAgMSAwLS4wMTIgMkExIDEgMCAwIDAgMTEgMnptMCAzMGEzIDMgMCAwIDEtMi4xMi01LjEyIDMuMDcgMy4wNyAwIDAgMSA0LjI0IDBBMyAzIDAgMCAxIDExIDMyem0wLTRhMSAxIDAgMSAwLS4wMTIgMkExIDEgMCAwIDAgMTEgMjh6bTAtMTJhMyAzIDAgMCAxLTIuMTItNS4xMiAzLjA3IDMuMDcgMCAwIDEgNC4yNCAwQTMgMyAwIDAgMSAxMSAxNnptMC00YTEgMSAwIDEgMC0uMDEyIDJBMSAxIDAgMCAwIDExIDEyem0xMC02QTMgMyAwIDAgMSAxOC44OC44OGEzLjA3IDMuMDcgMCAwIDEgNC4yNCAwQTMgMyAwIDAgMSAyMSA2em0wLTRhMSAxIDAgMSAwLS4wMTIgMkExIDEgMCAwIDAgMjEgMnptMCAzMGEzIDMgMCAwIDEtMi4xMi01LjEyIDMuMDcgMy4wNyAwIDAgMSA0LjI0IDBBMyAzIDAgMCAxIDIxIDMyem0wLTRhMSAxIDAgMSAwLS4wMTIgMkExIDEgMCAwIDAgMjEgMjh6bTAtMTJhMyAzIDAgMCAxLTIuMTItNS4xMiAzLjA3IDMuMDcgMCAwIDEgNC4yNCAwQTMgMyAwIDAgMSAyMSAxNnptMC00YTEgMSAwIDEgMC0uMDEyIDJBMSAxIDAgMCAwIDIxIDEyelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwTW9uaXRvcmluZyA9IGZ1bmN0aW9uIEV1aUljb25BcHBNb25pdG9yaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS44MSAxNS4xOUE4Ljk0IDguOTQgMCAwIDEgMTUuNjIgMy44NmwuMzguNDIuMzgtLjQyYTguOTQgOC45NCAwIDAgMSAxNC4yNiAxMC42OGwtMS43LTEuMDdhNi45NCA2Ljk0IDAgMCAwLTExLjA3LTguMjhMMTYgNy4yOWwtMS44Ny0yLjFBNi45NCA2Ljk0IDAgMCAwIDMuNDEgMTRsLTEuNiAxLjE5Wk0xNiAzMS4xOGwtNy43NC04LjUxIDEuNDgtMS4zNEwxNiAyOC4yMWw2LjI2LTYuODggMS40OCAxLjM0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTYuMTYgMjMuMjktNC4xLTcuMTdMMTAuNjIgMTlIMHYtMmg5LjM4bDIuNTYtNS4xMiAzLjkgNi44MyA0LjEzLTEwLjMyTDIzLjY2IDE3SDMydjJoLTkuNjZsLTIuMzEtNS4zOXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTW9uaXRvcmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBOb3RlYm9vayA9IGZ1bmN0aW9uIEV1aUljb25BcHBOb3RlYm9vayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI1IDJoLTVWMGgtMnYyaC0zVjBoLTJ2MmgtM1YwSDh2MkgzdjI2aDIyVjJabS0yIDI0SDVWNGgzdjJoMlY0aDN2MmgyVjRoM3YyaDJWNGgzdjIyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcgN3YyM0g4djJoMjFWN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTJoMTJ2Mkg4ek04IDE3aDEydjJIOHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTm90ZWJvb2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwUGFja2V0YmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBQYWNrZXRiZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjBhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4Wm0wLTZhMiAyIDAgMSAwIDAgNCAyIDIgMCAwIDAgMC00WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRhNCA0IDAgMSAwLTQgNCA0IDQgMCAwIDAgMi0uNTdsNS4yNyA1LjI3IDEuNDEtMS40MUw3LjQzIDZBNCA0IDAgMCAwIDggNHpNNCA2YTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNHptMTYuNzEgNi43MUwyNiA3LjQzQTQgNCAwIDAgMCAyOCA4YTQgNCAwIDEgMC00LTQgNCA0IDAgMCAwIC41NyAybC01LjI3IDUuMjcgMS40MSAxLjQ0ek0yOCAyYTIgMiAwIDEgMSAwIDQgMiAyIDAgMCAxIDAtNHpNMTEuMjkgMTkuMjkgNiAyNC41N0E0IDQgMCAwIDAgNCAyNGE0IDQgMCAxIDAgNCA0IDQgNCAwIDAgMC0uNTctMmw1LjI3LTUuMjctMS40MS0xLjQ0ek00IDMwYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNHptMjQtNmE0IDQgMCAwIDAtMiAuNTdsLTUuMjctNS4yNy0xLjQxIDEuNDFMMjQuNTcgMjZhNCA0IDAgMCAwLS41NyAyIDQgNCAwIDEgMCA0LTR6bTAgNmEyIDIgMCAxIDEgMC00IDIgMiAwIDAgMSAwIDR6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBQYWNrZXRiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFBpcGVsaW5lID0gZnVuY3Rpb24gRXVpSWNvbkFwcFBpcGVsaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgMTJhMyAzIDAgMCAwLTMgM2gtNGEzIDMgMCAwIDAtMy0zaC02YTMgMyAwIDAgMC0zIDNINmEzIDMgMCAwIDAtMy0zSDB2MTRoM2EzIDMgMCAwIDAgMy0zaDRhMyAzIDAgMCAwIDMgM2g2YTMgMyAwIDAgMCAzLTNoNGEzIDMgMCAwIDAgMyAzaDNWMTJoLTNaTTMgMjRIMlYxNGgxYTEgMSAwIDAgMSAxIDF2OGExIDEgMCAwIDEtMSAxWm0xNy0zdjJhMSAxIDAgMCAxLTEgMWgtNmExIDEgMCAwIDEtMS0xdi0ySDZ2LTRoNnYtMmExIDEgMCAwIDEgMS0xaDZhMSAxIDAgMCAxIDEgMXYyaDZ2NGgtNlptMTAgM2gtMWExIDEgMCAwIDEtMS0xdi04YTEgMSAwIDAgMSAxLTFoMXYxMFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDZIMTB2Mmg1djJoMlY4aDV6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFBpcGVsaW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFJlY2VudGx5Vmlld2VkID0gZnVuY3Rpb24gRXVpSWNvbkFwcFJlY2VudGx5Vmlld2VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMzJDNy4xNjMgMzIgMCAyNC44MzcgMCAxNlM3LjE2MyAwIDE2IDBzMTYgNy4xNjMgMTYgMTZhMTYgMTYgMCAwIDEtMTYgMTZabTAtMzBDOC4yNjggMiAyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTQgMTQtNi4yNjggMTQtMTRBMTQgMTQgMCAwIDAgMTYgMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1IDRoMnY5LjE3QTMuMDA5IDMuMDA5IDAgMCAxIDE4LjgzIDE1SDI2djJoLTcuMTdBMy4wMDEgMy4wMDEgMCAxIDEgMTUgMTMuMTdWNFptMSAxM2ExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFJlY2VudGx5Vmlld2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFJlcG9ydGluZyA9IGZ1bmN0aW9uIEV1aUljb25BcHBSZXBvcnRpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNSA1aC0uMTd2MkgyNWExIDEgMCAwIDEgMSAxdjIwYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xVjhhMSAxIDAgMCAxIDEtMWguMTdWNUg3YTMgMyAwIDAgMC0zIDN2MjBhMyAzIDAgMCAwIDMgM2gxOGEzIDMgMCAwIDAgMy0zVjhhMyAzIDAgMCAwLTMtM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzIDNoLTNWMGgtOHYzSDl2NmgxNFYzWm0tMiA0SDExVjVoM1YyaDR2M2gzdjJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCAxM2gxMnYySDEwek0xMCAxOGgxMnYySDEwek0xMCAyM2gxMnYySDEwelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBSZXBvcnRpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwU2F2ZWRPYmplY3RzID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNhdmVkT2JqZWN0cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjM4IDcuMDAxIDE3IDkuNjE5VjBoLTJ2OS42MTlsLTMuMzctMi42MTgtMS4yNSAxLjUxM0wxNiAxMi44NzhsNS42My00LjM2NHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMjEuMDYuMTY1LTEuMTEgMS42MSA5LjI1IDUuOTgzTDE2IDE2LjI5IDIuOCA3Ljc1OGw5LjI1LTUuOTgzLTEuMS0xLjYxTDAgNy4yMzR2MTMuNjUzbDE2IDEwLjMzNyAxNi0xMC4zMzdWNy4yMzRMMjEuMDYuMTY0Wk0yIDkuNTdsMTMgOC40MDd2MTAuMjc5TDIgMTkuODRWOS41N1ptMTUgMTguNjc2VjE3Ljk3OGwxMy04LjQwN1YxOS44NWwtMTMgOC4zOTdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBTYXZlZE9iamVjdHM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXIgPSBmdW5jdGlvbiBFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS42MyA4aDcuMzh2MmgtNy4zOHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyA4aDMuMTl2Mkg3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxNmg3LjM4djJIN3pcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuODEgMTZIMTl2MmgtMy4xOXpNNyAxMmg5djJIN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDBDNS44MiAwIDAgNS44MiAwIDEzczUuODIgMTMgMTMgMTMgMTMtNS44MiAxMy0xM0ExMyAxMyAwIDAgMCAxMyAwWm0wIDI0QzYuOTI1IDI0IDIgMTkuMDc1IDIgMTNTNi45MjUgMiAxMyAyczExIDQuOTI1IDExIDExLTQuOTI1IDExLTExIDExWk0yMi41ODEgMjMuOTkzbDEuNDE0LTEuNDE0IDcuNzA4IDcuNzA4LTEuNDE0IDEuNDE0elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwU2VjdXJpdHkgPSBmdW5jdGlvbiBFdWlJY29uQXBwU2VjdXJpdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xNCAzMi0uMzYtLjE0QTIxLjA3IDIxLjA3IDAgMCAxIDAgMTIuMDdWNS40NEwxNCAuMDZsMTQgNS4zOHY2LjYzYTIxLjA3IDIxLjA3IDAgMCAxLTEzLjY0IDE5Ljc4TDE0IDMyWk0yIDYuODJ2NS4yNWExOS4wOCAxOS4wOCAwIDAgMCAxMiAxNy43NyAxOS4wOCAxOS4wOCAwIDAgMCAxMi0xNy43N1Y2LjgyTDE0IDIuMiAyIDYuODJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDE3LjgzaDJWMjNIOXpNMTEgMTAuMThWN0g5djMuMThhMyAzIDAgMSAwIDIgMFpNMTAgMTRhMSAxIDAgMSAxIDAtMiAxIDEgMCAwIDEgMCAyWk0xNyA3aDJ2NS4xN2gtMnpNMjEgMTdhMyAzIDAgMSAwLTQgMi44MlYyM2gydi0zLjE4QTMgMyAwIDAgMCAyMSAxN1ptLTMgMWExIDEgMCAxIDEgMC0yIDEgMSAwIDAgMSAwIDJaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlY3VyaXR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFNlY3VyaXR5QW5hbHl0aWNzID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNlY3VyaXR5QW5hbHl0aWNzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxMGg0djJINXY3LjkyOGMwIDEuMjk5LjgwOCAyLjc5NSAyLjg4IDQuNDggMS44MyAxLjQ4OSA0LjUyNCAzLjAyIDguMTIgNC41ODRWMjZoMnY1Ljk5MmwtMS4zOC0uNTY3Yy00LjM3Mi0xLjc5Ny03LjcyNC0zLjYxMy0xMC01LjQ2NUM0LjM1OCAyNC4xMjIgMyAyMi4xMTQgMyAxOS45MjhWMTB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDEwaDl2MTRsLTEuMjcyLS40NThjLTEuMzY3LS40OTQtMy4yMy0xLjMxNC00Ljc2OC0yLjM5QzEwLjQ4NCAyMC4xMTggOSAxOC42MzYgOSAxNi43NjFWMTB6bTEuODk1IDEuODc2djQuODg3YzAgLjg3Ny43NDQgMS44NjcgMi4xNTggMi44NTYuOTM3LjY1NiAyLjAzOCAxLjIxOSAzLjA1MiAxLjY1N3YtOS40aC01LjIxelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSAxSDl2N2gyVjIuOTY2aDE2VjE2LjczYzAgLjU1OC0uMjQ1IDEuMTI4LS43NTYgMS43Mi0uNTE1LjU5Ni0xLjI1NiAxLjE1OC0yLjEyIDEuNjY4LTEuMzgxLjgxOC0yLjk2MSAxLjQzNC00LjEyNCAxLjgxN1YyNGMxLjI2LS4zNzggMy4zMzQtMS4xMiA1LjE1NS0yLjE5Ny45NjUtLjU3IDEuOTA1LTEuMjYxIDIuNjEyLTIuMDguNzEyLS44MjIgMS4yMzMtMS44MjcgMS4yMzMtMi45OTJWMXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlY3VyaXR5QW5hbHl0aWNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFNwYWNlcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBTcGFjZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDRoNnYySDR6TTIyIDRoNnYyaC02ek00IDIyaDZ2Mkg0elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDE0aDE0VjBIMHYxNHpNMiAyaDEwdjEwSDJWMnptMTYtMnYxNGgxNFYwSDE4em0xMiAxMkgyMFYyaDEwdjEwek0wIDMyaDE0VjE4SDB2MTR6bTItMTJoMTB2MTBIMlYyMHptMTYgMTJoMTRWMThIMTh2MTR6bTItMTJoMTB2MTBIMjBWMjB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAyMmg2djJoLTZ6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNwYWNlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBTcWwgPSBmdW5jdGlvbiBFdWlJY29uQXBwU3FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggNmg5djJoLTl6TTUgNmg5djJINXpNNSAxMmg5djJINXpNMTggMTJoOXYyaC05ek01IDE4aDl2Mkg1ek0xOCAxOGg5djJoLTl6TTE4IDI0aDl2MmgtOXpNNSAyNGg5djJINXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgMzJIM2EzIDMgMCAwIDEtMy0zVjNhMyAzIDAgMCAxIDMtM2gyNmEzIDMgMCAwIDEgMyAzdjI2YTMgMyAwIDAgMS0zIDNaTTMgMmExIDEgMCAwIDAtMSAxdjI2YTEgMSAwIDAgMCAxIDFoMjZhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFIM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBUaW1lbGlvbiA9IGZ1bmN0aW9uIEV1aUljb25BcHBUaW1lbGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNHYyMC4zNEwxNiAzMmwxMi03LjY0VjRINFptMjIgMnY0aC00YTMgMyAwIDAgMC0zIDN2NWgtNnYtNWEzIDMgMCAwIDAtMy0zSDZWNmgyMFptLTcuODcgMTRMMTYgMjIuNTIgMTMuODcgMjBoNC4yNlpNNiAxMmg0YTEgMSAwIDAgMSAxIDF2Ni43bDMuNjkgNC4zNy0yLjU4IDMuMDZMNiAyMy4yNFYxMlptNy44MSAxNi4yMiAyLjE5LTIuNiAyLjE5IDIuNkwxNiAyOS42MWwtMi4xOS0xLjM5Wm02LjA4LTEuMDktMi41OC0zLjA2TDIxIDE5LjdWMTNhMSAxIDAgMCAxIDEtMWg0djExLjI0bC02LjExIDMuODlaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDBoMjR2Mkg0elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBUaW1lbGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50ID0gZnVuY3Rpb24gRXVpSWNvbkFwcFVwZ3JhZGVBc3Npc3RhbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAyMWE1IDUgMCAxIDEgMC0xMCA1IDUgMCAwIDEgMCAxMFptMC04YTMgMyAwIDEgMCAwIDYgMyAzIDAgMCAwIDAtNlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcuNDIgMTkuNjlhMTIgMTIgMCAwIDEtMjMuMTEtMWwyLjI3LS40NS00LjMyLTQuNDdMMCAxOS41NWwyLjM5LS40N2ExNCAxNCAwIDAgMCAyNyAxLjIzbC0xLjk3LS42MnptMi4yMy02Ljc3YTE0IDE0IDAgMCAwLTI3LTEuMjNsMS45LjYyYTEyIDEyIDAgMCAxIDIzLjExIDFsLTIuMjcuNDUgNC4zMiA0LjQ2TDMyIDEyLjQ1bC0yLjM1LjQ3elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVXBncmFkZUFzc2lzdGFudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBVcHRpbWUgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXB0aW1lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4yMTYgMTIuMzc3QTEwLjk0OCAxMC45NDggMCAwIDAgMi4xODEgMTdILjE1M2ExMi45NDEgMTIuOTQxIDAgMCAxIDIuNjkzLTYuMTE4bDEuMzcgMS40OTVabTIuOTQ4LTIuNzAzLTEuMzctMS40OTVBMTIuOTQgMTIuOTQgMCAwIDEgMTMgNnYyYy0yLjE0NCAwLTQuMTQ0LjYxMy01LjgzNiAxLjY3NFpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjYgNC40MTRWMTljMCA3LjE4LTUuODIgMTMtMTMgMTNDNi41IDMyIDEuMTE1IDI3LjIzLjE1MyAyMUgyLjE4Yy45NCA1LjEyIDUuNDI3IDkgMTAuODE5IDkgNi4wNzUgMCAxMS00LjkyNSAxMS0xMVY0LjQxNGwtNC4yOTMgNC4yOTMtMS40MTQtMS40MTRMMjUgLjU4Nmw2LjcwNyA2LjcwNy0xLjQxNCAxLjQxNEwyNiA0LjQxNFptLTcuODM2IDkuOTA5IDEuNDcyIDEuMzU0LTcuNTc3IDguMjM1LTQuODM1LTQuNDQyIDEuMzUzLTEuNDczIDMuMzY0IDMuMDkgNi4yMjMtNi43NjRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBVcHRpbWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwVXNlcnNSb2xlcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBVc2Vyc1JvbGVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkuMzA3IDMuMjFhMi45MSAyLjkxIDAgMSAwLS4yMjMgMS45NCAxMS42MzYgMTEuNjM2IDAgMCAxIDguMjMyIDcuMDQ5bDEuNzc1LS42OThhMTMuNTc2IDEzLjU3NiAwIDAgMC05Ljc4NC04LjI5MXptLTIuODIyIDEuNjM4YS45Ny45NyAwIDEgMSAwLTEuOTM5Ljk3Ljk3IDAgMCAxIDAgMS45NHptLTQuMjY3LjgwNS0uNzE3LTEuNzc0YTEzLjU3NiAxMy41NzYgMCAwIDAtOC4yOTEgOS43ODQgMi45MSAyLjkxIDAgMSAwIDEuOTQuMjIzIDExLjYzNiAxMS42MzYgMCAwIDEgNy4wNjgtOC4yMzN6bS04LjM0IDExLjgwMmEuOTcuOTcgMCAxIDEgMC0xLjk0Ljk3Ljk3IDAgMCAxIDAgMS45NHptMTIuNjA3IDguNzI3YTIuOTEgMi45MSAwIDAgMC0yLjU5OSAxLjYyIDExLjYzNiAxMS42MzYgMCAwIDEtOC4yMzMtNy4wNWwtMS43NzQuNzE3YTEzLjU3NiAxMy41NzYgMCAwIDAgOS44MTMgOC4yOTEgMi45MSAyLjkxIDAgMSAwIDIuNzkzLTMuNTc4em0wIDMuODc5YS45Ny45NyAwIDEgMSAwLTEuOTQuOTcuOTcgMCAwIDEgMCAxLjk0ek0zMiAxNi40ODVhMi45MSAyLjkxIDAgMSAwLTQuMTk5IDIuNTk5IDExLjYzNiAxMS42MzYgMCAwIDEtNy4wNSA4LjIzMmwuNzE4IDEuNzc1YTEzLjU3NiAxMy41NzYgMCAwIDAgOC4yOTEtOS44MTNBMi45MSAyLjkxIDAgMCAwIDMyIDE2LjQ4NXptLTIuOTEuOTdhLjk3Ljk3IDAgMSAxIDAtMS45NC45Ny45NyAwIDAgMSAwIDEuOTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOS4xOSAxNi4zNWEzLjg3OSAzLjg3OSAwIDEgMC01LjQyIDAgNC44NDggNC44NDggMCAwIDAtMi4xMzQgNC4wMTR2MS45MzloOS42OTd2LTEuOTRhNC44NDggNC44NDggMCAwIDAtMi4xNDMtNC4wMTRabS00LjY0NS0yLjc3NGExLjk0IDEuOTQgMCAxIDEgMy44OCAwIDEuOTQgMS45NCAwIDAgMS0zLjg4IDBabS0uOTcgNi43ODhhMi45MSAyLjkxIDAgMSAxIDUuODE5IDBoLTUuODE4WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBVc2Vyc1JvbGVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFZpc3VhbGl6ZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBWaXN1YWxpemUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMiAzMkg0YTQgNCAwIDAgMS00LTRWMGgydjI4YTIgMiAwIDAgMCAyIDJoMjh2MlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiAyMGgydjdINnpNMTYgMTJoMnYxNWgtMnpNMjYgMTdoMnYxMGgtMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI3IDZhMyAzIDAgMCAwLTIuMDguODRMMjAgNC4zNkEyLjIgMi4yIDAgMCAwIDIwIDRhMyAzIDAgMCAwLTYgMGMuMDAxLjM0MS4wNjIuNjguMTggMWwtNS42IDQuNDZBMyAzIDAgMCAwIDcgOWEzIDMgMCAxIDAgMyAzIDIuOTMgMi45MyAwIDAgMC0uMTgtMWw1LjYtNC40OEEzIDMgMCAwIDAgMTcgN2EzIDMgMCAwIDAgMi4wOC0uODRsNSAyLjQ4QTIuMiAyLjIgMCAwIDAgMjQgOWEzIDMgMCAxIDAgMy0zWk03IDEzYTEgMSAwIDEgMSAwLTIgMSAxIDAgMCAxIDAgMlptMTAtOGExIDEgMCAxIDEgMC0yIDEgMSAwIDAgMSAwIDJabTEwIDVhMSAxIDAgMSAxIDAtMiAxIDEgMCAwIDEgMCAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVmlzdWFsaXplOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFwcFZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFwcFZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4zOTQgNi4xOTIgMTEuMDUuNTM2IDE2IDUuNDg2bDQuOTUtNC45NSA1LjY1NyA1LjY1NkwxNiAxNi44IDUuMzk0IDYuMTkyWm0yLjgyOCAwTDE2IDEzLjk3MWw3Ljc3OC03Ljc3OS0yLjgyOC0yLjgyOEwxNiA4LjMxNGwtNC45NS00Ljk1LTIuODI4IDIuODI4WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMC45NDEgNC42ODYgMTkuNjI3QTguMDA0IDguMDA0IDAgMCAxIDMuNDUgOS45MDVhOC4wMTEgOC4wMTEgMCAwIDEgMS4yMzYtMS41OTFMMTYgMTkuNTM5IDI3LjMxMyA4LjMxNGwuMDQ1LjA0NWE4LjAwMyA4LjAwMyAwIDAgMS0uMDQ1IDExLjI2OEwxNiAzMC45NDJabTAtMi44MjggOS44OTktOS45YTYuMDAyIDYuMDAyIDAgMCAwIDEuMTY5LTYuODM4TDE2IDIyLjM1NyA0LjkzMiAxMS4zNzVBNi4wMDMgNi4wMDMgMCAwIDAgNi4xIDE4LjIxM2w5LjkgOS45WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwV2F0Y2hlcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBXYXRjaGVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOS43NCA3LjczLTEuNS0xLjMyYTEzIDEzIDAgMCAwIDAgMTcuMTlsMS41LTEuMzJhMTEgMTEgMCAwIDEgMC0xNC41NHYtLjAxWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41MSAzLjY2IDUgMi4zNGMtNi4zNzcgNy4yNC02LjM3NyAxOC4wOSAwIDI1LjMzbDEuNS0xLjMyQy43OTIgMTkuODY3Ljc5MiAxMC4xNTMgNi41IDMuNjdsLjAxLS4wMXptMTcuMjUgMi43NS0xLjUgMS4zMmExMSAxMSAwIDAgMSAwIDE0LjU0bDEuNSAxLjMyYTEzIDEzIDAgMCAwIDAtMTcuMTl2LjAxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMjcgMi4zNC0xLjUgMS4zMmM1LjcwOCA2LjQ4MyA1LjcwOCAxNi4xOTcgMCAyMi42OGwxLjUgMS4zM2M2LjM3Ny03LjI0IDYuMzc3LTE4LjA5IDAtMjUuMzNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxNWE1IDUgMCAxIDAtNiA0LjlWMzFoMlYxOS45YTUgNSAwIDAgMCA0LTQuOVptLTUgM2EzIDMgMCAxIDEgMC02IDMgMyAwIDAgMSAwIDZaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFdhdGNoZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXBwV29ya3BsYWNlU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjgxIDFIMnYzMGg1LjgxNWMxLjcwNSAwIDMuMzQzLS43ODMgNC4zOC0yLjA5NGwzLjE4Mi00LjAyMy4wMDYuMDA2IDIuNjA3LTMuMTM3LjAxLS4wMTRhOS40MiA5LjQyIDAgMCAwIDEuOTUzLTQuODI2IDkuMTEyIDkuMTEyIDAgMCAwLTEuODkxLTYuNTIybC0uMDEtLjAxMi0yLjYwMy0zLjE1NkwxMi4xOTcgMy4xQzExLjE2IDEuNzg2IDkuNTIgMSA3LjgxIDFabTYuMTE4IDcuNTIzLTMuMzEtNC4xOTVDOS45NjggMy41MTIgOC45MTcgMyA3LjgxIDNINHYyNmgzLjgxNWMxLjEgMCAyLjE1LS41MDggMi44LTEuMzJsMy4zMy00LjIxLTEuNzk2LTEuNzctLjAyNy0uMDMzYy0yLjg0LTMuMzE3LTIuODMtOC4xOTUuMDI4LTExLjI4N2wuMDA0LS4wMDRhOTguODkzIDk4Ljg5MyAwIDAgMSAxLjc3NC0xLjg1M1ptNC4wNDMgOC4wOTljLS4xMiAxLjI3OS0uNjE2IDIuNTM3LTEuNDkgMy42NGwtMS4yODggMS42My0xLjU3OC0xLjU1NmMtMi4xOS0yLjU5LTIuMTE4LTYuMy4wMDEtOC41OTYuNi0uNjQgMS4xMTktMS4xODMgMS41NjEtMS42MzVsMS4yOTMgMS42Mzh2LjAwMmwuMDE0LjAxNmMuOTQyIDEuMTkyIDEuNDQ2IDIuNTY0IDEuNTEgMy45NDlhNy4wOSA3LjA5IDAgMCAxLS4wMjMuOTEyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIzLjgwMSAzYy0uMzgyIDAtMS4wNTIuMjMxLTEuOTI1LjgxMi0uNjM2LjQyMi0xLjIyOC45MjgtMS42NzcgMS4zNTdsMS43NzEgMi4yNDUuMDA1LjAwNy4wMjQuMDMuMDA4LjAxYzQuMDAzIDUuMDk5IDMuOTkgMTIuMDU3LS4wMzUgMTcuMTQ1bC0xLjc5MyAyLjI2N2E4LjIwNiA4LjIwNiAwIDAgMCAxLjc2OSAxLjQ5OGMuNjk4LjQyNyAxLjMzNy42MjkgMS44NTIuNjI5SDI4VjNoLTQuMTk5Wm0tNi4xNDggMjMuODQyLjc2NSAxLjA1My4wMjMuMDI3Yy43MTcuODUxIDEuNTY2IDEuNjA3IDIuNDY0IDIuMTU2Ljg5LjU0NCAxLjg5LjkyMiAyLjg5NS45MjJIMzBWMWgtNi4xOTljLS45ODcgMC0yLjA2Ni41MDUtMy4wMzIgMS4xNDZhMTQuOTM0IDE0LjkzNCAwIDAgMC0yLjM1MiAxLjk3NGwtLjI3Ni4yODgtLjU5NS42MjggMi44NTUgMy42MTkuMDA2LjAwNmMzLjQ1OSA0LjM3NSAzLjQ1NyAxMC4zMjktLjAwNCAxNC43MDRsLTIuNzUgMy40NzdaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcHBzID0gZnVuY3Rpb24gRXVpSWNvbkFwcHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDRWMmgydjJIMlptNSAwVjJoMnYySDdabTUgMFYyaDJ2MmgtMlpNMiA5VjdoMnYySDJabTUgMFY3aDJ2Mkg3Wm01IDBWN2gydjJoLTJaTTIgMTR2LTJoMnYySDJabTUgMHYtMmgydjJIN1ptNSAwdi0yaDJ2MmgtMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcHM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXJyb3dFbmQgPSBmdW5jdGlvbiBFdWlJY29uQXJyb3dFbmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi44NTcgMTQuMDQzYS43NS43NSAwIDAgMS0uMDI1LTEuMDZsNC41OTEtNC44MWEuMjUuMjUgMCAwIDAgMC0uMzQ2bC00LjU5LTQuODFhLjc1Ljc1IDAgMCAxIDEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwIDEgMCAyLjQxNmwtNC41OSA0LjgxYS43NS43NSAwIDAgMS0xLjA2LjAyNFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC41IDIuNzVhLjc1Ljc1IDAgMCAxIDEuNSAwdjEwLjVhLjc1Ljc1IDAgMCAxLTEuNSAwVjIuNzVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd0VuZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcnJvd1N0YXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkFycm93U3RhcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDIuNzVhLjc1Ljc1IDAgMCAxIDEuNSAwdjEwLjVhLjc1Ljc1IDAgMCAxLTEuNSAwVjIuNzVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuMTM1IDE0LjA0M2EuNzUuNzUgMCAwIDAgLjAyNS0xLjA2bC00LjU5LTQuODFhLjI1LjI1IDAgMCAxIDAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMCAwLTEuMDg1LTEuMDM1bC00LjU5IDQuODFhMS43NSAxLjc1IDAgMCAwIDAgMi40MTZsNC41OSA0LjgxYy4yODYuMy43Ni4zMSAxLjA2LjAyNFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd1N0YXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFycm93RG93biA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd0Rvd24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMS45NTcgNC45ODJhLjc1Ljc1IDAgMCAxIDEuMDYtLjAyNWw0LjgxIDQuNTkxYS4yNS4yNSAwIDAgMCAuMzQ2IDBsNC44MS00LjU5YS43NS43NSAwIDAgMSAxLjAzNSAxLjA4NWwtNC44MSA0LjU5YTEuNzUgMS43NSAwIDAgMS0yLjQxNiAwbC00LjgxLTQuNTlhLjc1Ljc1IDAgMCAxLS4wMjUtMS4wNlpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd0Rvd247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXJyb3dMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkFycm93TGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS4wMTggMTQuMDQzYS43NS43NSAwIDAgMCAuMDI0LTEuMDZsLTQuNTktNC44MWEuMjUuMjUgMCAwIDEgMC0uMzQ2bDQuNTktNC44MWEuNzUuNzUgMCAxIDAtMS4wODUtMS4wMzVsLTQuNTkgNC44MWExLjc1IDEuNzUgMCAwIDAgMCAyLjQxNmw0LjU5IDQuODFjLjI4Ni4zLjc2MS4zMSAxLjA2LjAyNFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd0xlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXJyb3dSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1JpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuOTgyIDE0LjA0M2EuNzUuNzUgMCAwIDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMCAwIDAtLjM0NmwtNC41OS00LjgxYS43NS43NSAwIDAgMSAxLjA4NS0xLjAzNWw0LjU5IDQuODFhMS43NSAxLjc1IDAgMCAxIDAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwIDEtMS4wNi4wMjRaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25BcnJvd1VwID0gZnVuY3Rpb24gRXVpSWNvbkFycm93VXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMS45NTcgMTEuMDE4Yy4yODYuMy43NjEuMzEgMS4wNi4wMjRsNC44MS00LjU5YS4yNS4yNSAwIDAgMSAuMzQ2IDBsNC44MSA0LjU5YS43NS43NSAwIDAgMCAxLjAzNS0xLjA4NWwtNC44MS00LjU5YTEuNzUgMS43NSAwIDAgMC0yLjQxNiAwbC00LjgxIDQuNTlhLjc1Ljc1IDAgMCAwLS4wMjUgMS4wNlpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd1VwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFydGljbGUgPSBmdW5jdGlvbiBFdWlJY29uQXJ0aWNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxMGEuNS41IDAgMCAwIDAgMWg0YS41LjUgMCAwIDAgMC0xaC00Wk04IDYuNWEuNS41IDAgMCAxIC41LS41aDRhLjUuNSAwIDAgMSAwIDFoLTRhLjUuNSAwIDAgMS0uNS0uNVpNMy41IDJhLjUuNSAwIDAgMCAwIDFoNWEuNS41IDAgMCAwIDAtMWgtNVpNOCA4LjVhLjUuNSAwIDAgMSAuNS0uNWg0YS41LjUgMCAwIDEgMCAxaC00YS41LjUgMCAwIDEtLjUtLjVaTTMuNSA0YS41LjUgMCAwIDAgMCAxaDVhLjUuNSAwIDAgMCAwLTFoLTVaTTMgMTIuNWEuNS41IDAgMCAxIC41LS41aDlhLjUuNSAwIDAgMSAwIDFoLTlhLjUuNSAwIDAgMS0uNS0uNVpNNyA2SDN2NWg0VjZaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuNTI2LjMxMkExLjAwMiAxLjAwMiAwIDAgMCAxMC44IDBIMmExIDEgMCAwIDAtMSAxdjE0YTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMVY0LjQyOWMwLS4yNTYtLjA5OC0uNTAzLS4yNzQtLjY4OWwtMy4yLTMuNDI4Wk0xMC41IDVIMTR2MTBIMlYxaDh2My41YS41LjUgMCAwIDAgLjUuNVpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnRpY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkFzdGVyaXNrID0gZnVuY3Rpb24gRXVpSWNvbkFzdGVyaXNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi45MjggOC40NjggNCA3LjYxOGwuNDQ2LTEuNDI3TDcuMzc1IDcuMjUgNy4yODcgNGgxLjQ4NGwtLjA5NyAzLjI5NiAyLjg4LTEuMDM5TDEyIDcuNjkzbC0yLjk3Ny44NiAxLjkyIDIuNTZMOS43NDEgMTIgNy45MzcgOS4yOGwtMS43NDUgMi42NTQtMS4yMTMtLjg2elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXN0ZXJpc2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQXQgPSBmdW5jdGlvbiBFdWlJY29uQXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyA4YTUgNSAwIDEgMSA5LjgxMiAxLjM2NC43OC43OCAwIDAgMS0uMzQxLjQ3NmMtLjE2LjEtLjM4Mi4xNi0uNjU5LjE2LS41MDcgMC0uNjY4LS4xOC0uNzMtLjI3NGEuNTMuNTMgMCAwIDEtLjA4Mi0uMjNWNWgtMXYuNzY0YTMgMyAwIDEgMCAuMTQ2IDQuMzMzYy4wMjguMDU3LjA2LjExNy4xLjE3Ny4yNjcuNDA3Ljc2MS43MjYgMS41NjYuNzI2LjQxMiAwIC44My0uMDg4IDEuMTg5LS4zMTEuMzY3LS4yMy42NC0uNTgzLjc3My0xLjA1M2E2IDYgMCAxIDAtMi41MDEgMy4zOTNsLS41NDYtLjgzN0E1IDUgMCAwIDEgMyA4Wm03IDBhMiAyIDAgMSAwLTQgMCAyIDIgMCAwIDAgNCAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQmVha2VyID0gZnVuY3Rpb24gRXVpSWNvbkJlYWtlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMjc3IDEwLjA4OGMuMDIuMDE0LjA0LjAzLjA1Ny4wNDcuNTgyLjU1IDEuMTM0LjgxMiAxLjY2Ni44MTIuNTg2IDAgMS44NC0uMjkzIDMuNzEzLS44OEw5IDYuMjEyVjJIN3Y0LjIxMmwtMS43MjMgMy44NzZabS0uNDM4Ljk4N0wzLjUzOSAxNGg4LjkyMmwtMS4zMi0yLjk2OUM5LjA5NiAxMS42NzcgNy43MzMgMTIgNyAxMmMtLjc0IDAtMS40NjMtLjMxNS0yLjE2MS0uOTI1Wk02IDJINVYxaDZ2MWgtMXY0bDMuMzc1IDcuNTk0QTEgMSAwIDAgMSAxMi40NjEgMTVIMy41NGExIDEgMCAwIDEtLjkxNC0xLjQwNkw2IDZWMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJlYWtlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25CZWxsID0gZnVuY3Rpb24gRXVpSWNvbkJlbGwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi4zMTYgMTJoMTAuMzY4Yy0uMTg4LS43MDQtLjI4LTEuNjkxLS4zNDgtMy4wMzctLjA3LTEuMzgyLS4xMDMtMS44ODgtLjE5LTIuNjEyLS4wMjgtLjIzNi0uMDYtLjQ2Mi0uMDk2LS42OC0uMzEtMS44OTItMS41MDYtMi45MjMtMy43MDgtMy4xMzFhMSAxIDAgMSAwLTEuNjg0IDBjLTIuMjAyLjIwOC0zLjM5NyAxLjI0LTMuNzA4IDMuMTNhMTYuMDEgMTYuMDEgMCAwIDAtLjA5Ni42OGMtLjA4Ny43MjUtLjEyIDEuMjMtLjE5IDIuNjEzLS4wNjggMS4zNDYtLjE2IDIuMzMzLS4zNDggMy4wMzdabTEwLjg0MyAxSDEuODRjLS4zMDguMzUzLS43MzcuNS0xLjM0MS41YS41LjUgMCAxIDEgMC0xYy43ODYgMCAxLjAyNC0uNzgzIDEuMTY2LTMuNTg3LjA3LTEuNDA3LjEwNS0xLjkyNi4xOTYtMi42ODEuMDMtLjI1LjA2My0uNDkuMTAyLS43MjQuMzM0LTIuMDQxIDEuNTQ2LTMuMzEzIDMuNTU2LTMuNzkyYTIgMiAwIDAgMSAzLjk2IDBjMi4wMS40NzkgMy4yMjIgMS43NSAzLjU1NyAzLjc5MmExNyAxNyAwIDAgMSAuMTAyLjcyNGMuMDkuNzU1LjEyNSAxLjI3NC4xOTYgMi42ODEuMTQgMi44MDQuMzc5IDMuNTg3IDEuMTY1IDMuNTg3YS41LjUgMCAxIDEgMCAxYy0uNjA0IDAtMS4wMzMtLjE0Ny0xLjM0MS0uNVpNNS41IDE0aDRhMiAyIDAgMSAxLTQgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJlbGw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQmVsbFNsYXNoID0gZnVuY3Rpb24gRXVpSWNvbkJlbGxTbGFzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTkuNSAxNC0uMDA1LjE1YTIgMiAwIDAgMS0zLjk3Mi4xNTNsLS4wMTgtLjE1NEw1LjUgMTRoNFptNS4zOC0xMi44MjVhLjUuNSAwIDAgMSAuMDA4LjY0bC0uMDYzLjA2NS0xNCAxMmEuNS41IDAgMCAxLS43MTMtLjY5NWwuMDYzLS4wNjUgMTQtMTJhLjUuNSAwIDAgMSAuNzA1LjA1NVpNMTMuMDM2IDUuNTFsLjA1NS4zNTMuMDQ4LjM2OGMuMDY2LjU1NC4xMDMuOTguMTQ1IDEuNzI0bC4wOCAxLjQ5MWMuMTQ2IDIuMzcxLjQwMiAzLjA1MyAxLjEzNiAzLjA1M2EuNS41IDAgMSAxIDAgMWMtLjYwMyAwLTEuMDMxLS4xNDYtMS4zNC0uNDk5SDQuMTg1bDEuMTgyLTFoNy4zMTdjLS4xNzItLjY0NC0uMjY0LTEuNTI4LS4zMy0yLjcwOGwtLjA5LTEuNjM4Yy0uMDMzLS41MTQtLjA2Ni0uODctLjExOC0xLjMwNGwtLjAxMS0uMDc3LjkwMS0uNzYzWk03LjUgMGEyIDIgMCAwIDEgMS45OCAxLjcxN2MuNDc2LjExMy45MDcuMjcgMS4yOTIuNDcybC0uODM4LjcxYTUuNzI4IDUuNzI4IDAgMCAwLTEuNTkxLS4zNiAxIDEgMCAxIDAtMS42ODQgMEM0LjQ1NSAyLjc1IDMuMjYgMy43OCAyLjk1IDUuNjcxbC0uMDUuMzM0LS4wNDYuMzQ3Yy0uMDguNjc2LS4xMTUgMS4xNjEtLjE3NiAyLjM0N2wtLjAxNC4yNjUtLjAwNS4wOS0xLjA1OC44OTdjLjAxOC0uMjM0LjAzNS0uNDg4LjA1LS43NjNsLjA3Ny0xLjQyN2MuMDM4LS42MjYuMDczLTEuMDI1LjEzNC0xLjUyOC4wMy0uMjUuMDYzLS40OS4xMDItLjcyNC4zMzQtMi4wNCAxLjU0Ni0zLjMxMyAzLjU1NS0zLjc5MmwuMDA0LS4wMTlBMiAyIDAgMCAxIDcuNSAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQmVsbFNsYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJldGEgPSBmdW5jdGlvbiBFdWlJY29uQmV0YShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNi4zOTRoMS4wM2MuNzIgMCAxLjI4My4xNTMgMS42ODguNDU5YTIuMiAyLjIgMCAwIDEgLjgxMyAxLjE2M2MuMTM4LjQ3LjE2NS45NTIuMDgzIDEuNDQ3LS4xLjU5Ny0uMzMgMS4xMzUtLjY5IDEuNjE2YTMuOTUgMy45NSAwIDAgMS0xLjMzMyAxLjEzNyAzLjY4OSAzLjY4OSAwIDAgMS0xLjczNS40MThjLS4zODEgMC0uNzQ3LS4wNy0xLjA5Ny0uMjEyLS4zNS0uMTQ0LS42MzYtLjQxNy0uODYtLjgxOGwtLjA4Mi4wNDEuMzMtMi4wMThjLS4wNTUuMzM3LS4wMjQuNjQ3LjA5Mi45MzIuMTIuMjg1LjMyLjUxMy41OTguNjg1LjI4MS4xNzEuNjM0LjI1NyAxLjA2LjI1N2EyLjU0IDIuNTQgMCAwIDAgMi4wNzUtMS4wM2MuMjI2LS4zMDguMzY5LS42NDUuNDI3LTEuMDA4YTEuOTI5IDEuOTI5IDAgMCAwLS4wNzItLjk3MyAxLjUyNCAxLjUyNCAwIDAgMC0uNTM2LS43NTJjLS4yNS0uMTk2LS41Ny0uMjkzLS45NTctLjI5M0g3LjgyNUw4IDYuMzk1Wm0xLjM1OS00LjU5MWMuNDkgMCAuOTEzLjA3OSAxLjI2Ni4yMzdhMi4yNTggMi4yNTggMCAwIDEgMS4zMDMgMS41MjhjLjA4Mi4zMy4wOTQuNjY4LjAzNiAxLjAxNC0uMDY5LjQzMy0uMjUuODY0LS41NCAxLjI5My0uMjkuNDI1LS42ODQuNzgtMS4xODUgMS4wNjUtLjQ5Ny4yODItMS4wOTYuNDIyLTEuNzk2LjQyMmgtLjU5N2wuMTc1LTEuMDVoLjU3NmEyLjE4MiAyLjE4MiAwIDAgMCAxLjgxMi0uODljLjE5Mi0uMjY1LjMxMi0uNTQ0LjM2LS44NC4wOC0uNDczLS4wMzYtLjg2Ni0uMzQ0LTEuMTc4LS4zMS0uMzEzLS43MjYtLjQ2OS0xLjI1MS0uNDY5LS4zNSAwLS42ODMuMDcyLS45OTkuMjE2YTIuMjU2IDIuMjU2IDAgMCAwLS43OTMuNjAzIDEuODUyIDEuODUyIDAgMCAwLS40MTIuODlsLTEuNzggMTAuODFIMy45NzNsMS43ODItMTAuODFhMy4xNyAzLjE3IDAgMCAxIC42NDgtMS40NTdjLjM0LS40MjkuNzY1LS43NjcgMS4yNzctMS4wMTRhMy44MjcgMy44MjcgMCAwIDEgMS42NzgtLjM3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQmV0YTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Cb2x0ID0gZnVuY3Rpb24gRXVpSWNvbkJvbHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjA0IDEzLjI3NGEuNS41IDAgMSAwIC44OTIuNDUzbDMuMDE0LTUuOTMxYS41LjUgMCAwIDAtLjQ0NS0uNzI3SDUuMzE2TDguMDMgMS43MjdhLjUuNSAwIDEgMC0uODkyLS40NTNMNC4wNTUgNy4zNDNhLjUuNSAwIDAgMCAuNDQ2LjcyNmg1LjE4NUw3LjA0IDEzLjI3NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJvbHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQm94ZXNIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkJveGVzSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgNmg0djRIMFY2Wm0xIDF2MmgyVjdIMVptNS0xaDR2NEg2VjZabTEgMXYyaDJWN0g3Wm01LTFoNHY0aC00VjZabTEgM2gyVjdoLTJ2MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJveGVzSG9yaXpvbnRhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Cb3hlc1ZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkJveGVzVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDF2MmgyVjFIN1pNNiAwaDR2NEg2VjBabTAgNmg0djRINlY2Wm0xIDF2MmgyVjdIN1ptLTEgNWg0djRINnYtNFptMSAxdjJoMnYtMkg3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQm94ZXNWZXJ0aWNhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25CcmFuY2ggPSBmdW5jdGlvbiBFdWlJY29uQnJhbmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMC4wMzhhMy40OSAzLjQ5IDAgMCAxIDIuNS0xLjA1aDJhMi41IDIuNSAwIDAgMCAyLjQ2Mi0yLjA2MSAyIDIgMCAxIDEgMS4wMDguMDE3QTMuNSAzLjUgMCAwIDEgOS41IDkuOTg3aC0yYTIuNSAyLjUgMCAwIDAtMi40NjYgMi4wODVBMiAyIDAgMSAxIDQgMTIuMDYzVjMuOTM3YTIgMiAwIDEgMSAxIDB2Ni4xWk00LjUgM2ExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTAgMTJhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm04LTlhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJhbmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJyYW5jaFVzZXIgPSBmdW5jdGlvbiBFdWlJY29uQnJhbmNoVXNlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDcuOTg3YTMuNDkgMy40OSAwIDAgMC0yLjUgMS4wNXYtNC4xYTIgMiAwIDEgMC0xIDB2Ni4xMjZhMiAyIDAgMSAwIDEuMDM0LjAxQTIuNSAyLjUgMCAwIDEgNiA4Ljk4NmgxYTMuNSAzLjUgMCAwIDAgMy40Ny0zLjA0MyAyIDIgMCAxIDAtMS4wMDktLjAxN0EyLjUgMi41IDAgMCAxIDcgNy45ODdINnpNNCAzYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMHptMCAxMGExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDB6bTctOWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDB6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNSAxMC41YTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwek05IDE1Yy4yODQtMS4yMjMgMS41MTktMi4xNDMgMy0yLjE0M3MyLjcxNi45MiAzIDIuMTQzSDl6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CcmFuY2hVc2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJyb29tID0gZnVuY3Rpb24gRXVpSWNvbkJyb29tKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMy43MzIgMTMuMDk2LS4xOTctLjE5NyAyLjgzLTIuODI4LjcwNi43MDctMi44MjkgMi44MjguNzA4LjcwOCAyLjgyOC0yLjgyOGExIDEgMCAwIDAgMC0xLjQxNEw1LjY1OCA3Ljk1YS45OTMuOTkzIDAgMCAwLS43MDgtLjI5My45OTQuOTk0IDAgMCAwLS43MDguMjkzbC0yLjgyOCAyLjgyOS43MDcuNzA3IDIuODI5LTIuODMuNzA3LjcwOC0yLjgyOSAyLjgyOS45MDQuOTAzWm0xLjIxOC02LjQ0Yy41MTIgMCAxLjAyMy4xOTYgMS40MTQuNTg3bDIuMTIxIDIuMTJhMiAyIDAgMCAxIDAgMi44M0w0Ljk1IDE1LjcyOCAwIDEwLjc3OGwzLjUzNS0zLjUzNWExLjk5MyAxLjk5MyAwIDAgMSAxLjQxNS0uNTg2Wk0xNC4wMiAxbC43MDguNzA3LTYuOTUgNi45NS0uNzA3LS43MDdMMTQuMDIxIDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ccm9vbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25CcnVzaCA9IGZ1bmN0aW9uIEV1aUljb25CcnVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjk5MyA4LjE3YzAgLjgzLS42NzMgMS41MDctMS40OTkgMS41MDdINS40OThBMS41MDUgMS41MDUgMCAwIDEgMy45OTkgOC4xN1Y2LjY2Mmg3Ljk5NFY4LjE3Wm0tMi45OTggNS45OThjMCAuNDU1LS40NDguODI3LS45OTkuODI3LS41NSAwLTEtLjM3Mi0xLS44Mjd2LTMuNDg2aDJ2My40ODZaTTQgNS42NThWMS4wMDVoMS4yNjJ2NC42NTNINFptMi4yNjEgMFYxLjAwNWgxLjI0NHY0LjY1M0g2LjI2Wm0yLjI0NCAwVjEuMDA1aDEuMjM1djQuNjUzSDguNTA0Wm0yLjIzNCAwVjEuMDA1aDEuMjU0djQuNjUzaC0xLjI1NFpNMy4wMDggMCAzIDguMTdhMi41MDkgMi41MDkgMCAwIDAgMi40OTggMi41MTJoLjV2My40ODZjMCAxLjAxLjg5NiAxLjgzMiAxLjk5OCAxLjgzMiAxLjEwMiAwIDEuOTk4LS44MjIgMS45OTgtMS44MzJ2LTMuNDg2aC41YTIuNTA5IDIuNTA5IDAgMCAwIDIuNDk4LTIuNTEyTDEzIDBIMy4wMDhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CcnVzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25CdWcgPSBmdW5jdGlvbiBFdWlJY29uQnVnKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTAuNjUxIDUuMTI2LjkyMi0uNDU1Ljg4NC0yLjM0M2EuNS41IDAgMCAxIC45MzkuMzQ0TDEyLjM3NCA1LjM5bC0xLjQ1LjcxN0E1LjMgNS4zIDAgMCAxIDExIDdoMS4wNDNsMi4zIDIuMTk4YS41LjUgMCAwIDEtLjY5Mi43MjNMMTEuNjQyIDhoLS43MzdjLS4wOS40NjYtLjI0Ljg5OS0uNDQxIDEuMjgzbC44OTIuNDkgMS4yNzggMy41NTRhLjUuNSAwIDAgMS0uOTQuMzQybC0xLjE1LTMuMi0uNjU1LS4zNkM5LjM3MyAxMC42NjUgOC43MTYgMTEgOCAxMXMtMS4zNzQtLjMzNS0xLjg5LS44OTNsLS42NTguMzYxLTEuMTUgMy4yMDFhLjUuNSAwIDEgMS0uOTQtLjM0MmwxLjI3OS0zLjU1NC44OTUtLjQ5MUE0LjcgNC43IDAgMCAxIDUuMDk1IDhoLS43NGwtMi4wMSAxLjkyYS41LjUgMCAwIDEtLjY5LS43MjJMMy45NTIgN0g1YTUuMyA1LjMgMCAwIDEgLjA3NS0uODkyTDMuNjIzIDUuMzkgMi42IDIuNjcyYS41LjUgMCAxIDEgLjkzOS0uMzQ0bC44ODQgMi4zNDMuOTI0LjQ1N2MuMTctLjQyOC4zOTctLjgxLjY2OC0xLjEyOGguNTdhMS41IDEuNSAwIDEgMSAyLjgzIDBoLjU2OGMuMjcuMzE4LjQ5Ny42OTkuNjY3IDEuMTI2Wk04IDRhLjUuNSAwIDEgMCAwLTEgLjUuNSAwIDAgMCAwIDFabTEuNzUxIDEuNTcxQTMuMzI2IDMuMzI2IDAgMCAwIDkuNDc2IDVINi41MjRjLS4xMDcuMTc1LS4yLjM2Ny0uMjc2LjU3My0uMTEuMjk1LS4xODYuNjE4LS4yMjMuOTU3YTQuMzU0IDQuMzU0IDAgMCAwIC4wOSAxLjQ2NWMuMDcxLjI5NC4xNzIuNTY1LjI5NS44MDYuMTY4LjMyOC4zOC42MDEuNjE2LjgwMy4yOTUuMjUzLjYzMS4zOTYuOTc0LjM5Ni4zNDIgMCAuNjc4LS4xNDIuOTczLS4zOTQuMjM3LS4yMDMuNDQ4LS40NzYuNjE2LS44MDNhMy42MiAzLjYyIDAgMCAwIC4yOTYtLjgwNyA0LjI2MyA0LjI2MyAwIDAgMCAuMDktMS40NjYgMy45ODggMy45ODggMCAwIDAtLjIyNC0uOTU5WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnVnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkJ1bGxzZXllID0gZnVuY3Rpb24gRXVpSWNvbkJ1bGxzZXllKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNEE2IDYgMCAxIDAgOCAyYTYgNiAwIDAgMCAwIDEyWm0wIDFBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNFptMC0zYTQgNCAwIDEgMCAwLTggNCA0IDAgMCAwIDAgOFptMC0xYTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNlptMC0yYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJ1bGxzZXllOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNhbGVuZGFyID0gZnVuY3Rpb24gRXVpSWNvbkNhbGVuZGFyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDR2LS45OTRDMTQgMi40NSAxMy41NSAyIDEyLjk5NCAySDExdjFoLTFWMkg2djFINVYySDMuMDA2QzIuNDUgMiAyIDIuNDUgMiAzLjAwNnY5Ljk4OEMyIDEzLjU1IDIuNDUgMTQgMy4wMDYgMTRoOS45ODhDMTMuNTUgMTQgMTQgMTMuNTUgMTQgMTIuOTk0VjVIMlY0aDEyem0tMy0zaDEuOTk0QzE0LjEwMiAxIDE1IDEuODk3IDE1IDMuMDA2djkuOTg4QTIuMDA1IDIuMDA1IDAgMCAxIDEyLjk5NCAxNUgzLjAwNkEyLjAwNSAyLjAwNSAwIDAgMSAxIDEyLjk5NFYzLjAwNkMxIDEuODk4IDEuODk3IDEgMy4wMDYgMUg1VjBoMXYxaDRWMGgxdjF6TTQgN2gydjFINFY3em0zIDBoMnYxSDdWN3ptMyAwaDJ2MWgtMlY3ek00IDloMnYxSDRWOXptMyAwaDJ2MUg3Vjl6bTMgMGgydjFoLTJWOXptLTYgMmgydjFINHYtMXptMyAwaDJ2MUg3di0xem0zIDBoMnYxaC0ydi0xelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2FsZW5kYXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2hhbmdlUG9pbnREZXRlY3Rpb24gPSBmdW5jdGlvbiBFdWlJY29uQ2hhbmdlUG9pbnREZXRlY3Rpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDE0aDEyLjVhLjUuNSAwIDAgMSAwIDFoLTEzYS41LjUgMCAwIDEtLjUtLjV2LTEzYS41LjUgMCAwIDEgMSAwVjE0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUgNi41YS41LjUgMCAwIDAtLjUtLjVoLTZhLjUuNSAwIDAgMC0uNS41VjEySDMuNWEuNS41IDAgMCAwIDAgMWg1YS41LjUgMCAwIDAgLjUtLjVWN2g1LjVhLjUuNSAwIDAgMCAuNS0uNVpNNy4wMjMgMy4yMDZBLjMwMS4zMDEgMCAwIDEgNy4zIDNoMi40Yy4xMjEgMCAuMjMuMDgxLjI3Ny4yMDZhLjM2LjM2IDAgMCAxLS4wNjUuMzYzbC0xLjIgMS4zMzNhLjI4LjI4IDAgMCAxLS40MjQgMGwtMS4yLTEuMzMzYS4zNi4zNiAwIDAgMS0uMDY1LS4zNjNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DaGFuZ2VQb2ludERldGVjdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DaGVjayA9IGZ1bmN0aW9uIEV1aUljb25DaGVjayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02LjUgMTJhLjUwMi41MDIgMCAwIDEtLjM1NC0uMTQ2bC00LTRhLjUwMi41MDIgMCAwIDEgLjcwOC0uNzA4TDYuNSAxMC43OTNsNi42NDYtNi42NDdhLjUwMi41MDIgMCAwIDEgLjcwOC43MDhsLTcgN0EuNTAyLjUwMiAwIDAgMSA2LjUgMTJcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uQ2hlY2tJbkNpcmNsZUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDE2QTggOCAwIDEgMSA4IDBhOCA4IDAgMCAxIDAgMTZabTMuNjUtMTAuODU3TDYuOTEgOS44IDQuMzUgNy4yODZhLjUuNSAwIDAgMC0uNy43MTRsMi45MDkgMi44NTdhLjUuNSAwIDAgMCAuNyAwbDUuMDkxLTVhLjUuNSAwIDEgMC0uNy0uNzE0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2hlY2tJbkNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DaGVlciA9IGZ1bmN0aW9uIEV1aUljb25DaGVlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuOTM0IDMuMDYzYTEuNSAxLjUgMCAwIDEgLjU0Ny4zMjFsLjExMi4xMTUgNi4wNyA2LjkxNWExLjUgMS41IDAgMCAxLS42NDYgMi40MWwtLjE0Mi4wNC05LjAzMSAyLjA5N0ExLjUgMS41IDAgMCAxIC4wMzcgMTMuMTlsLjA0My0uMTU5TDMuMDQgNC4wMmExLjUgMS41IDAgMCAxIDEuODkzLS45NTdaTTQuMDI3IDQuMjVsLS4wMzYuMDgzLTIuOTYxIDkuMDExYS41LjUgMCAwIDAgLjQ5OC42NTZsLjA5LS4wMTMgMi45MzctLjY4MS0xLjM5OS0xLjUwOGEuNS41IDAgMCAxIC42NjYtLjc0bC4wNjcuMDYgMS43ODggMS45MjcgMi42MzQtLjYxMS0zLjE5OC0zLjYwMWEuNS41IDAgMCAxIC42ODItLjcyNmwuMDY2LjA2MiAzLjU1OSA0LjAwNyAxLjIyOS0uMjg0YS41LjUgMCAwIDAgLjE1LS4wNjNsLjA2Ny0uMDQ5YS41LjUgMCAwIDAgLjA5OS0uNjMybC0uMDUzLS4wNzMtNi4wNy02LjkxNmEuNS41IDAgMCAwLS4xMzgtLjExbC0uMDgyLS4wMzUtLjA4OC0uMDJhLjUuNSAwIDAgMC0uNTA3LjI1NlptMTEuNjYgNS4wMzlhMi41IDIuNSAwIDAgMS0uOTc1IDMuMzk5LjUuNSAwIDAgMS0uNDg1LS44NzUgMS41IDEuNSAwIDAgMC0xLjQ1NC0yLjYyNC41LjUgMCAwIDEtLjQ4NS0uODc1IDIuNSAyLjUgMCAwIDEgMy4zOTkuOTc1Wm0tNS4wMy02LjIwNmEuNS41IDAgMCAxIC4zMzguNTQ0bC0uMDIuMDg4LS42NzcgMi4wMzUgMi4wNjgtLjcyMWEuNS41IDAgMCAxIC42LjIyNWwuMDM2LjA4MmEuNS41IDAgMCAxLS4yMjUuNmwtLjA4Mi4wMzdMOS42NyA3LjAyOGEuNS41IDAgMCAxLS42NTktLjU1bC4wMi0uMDguOTk1LTNhLjUuNSAwIDAgMSAuNjMyLS4zMTZaTTE0LjUgNGEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVpNNy44NjIuNDAzYTIuNSAyLjUgMCAwIDEgLjczNSAzLjQ1OS41LjUgMCAwIDEtLjgzOS0uNTQ1IDEuNSAxLjUgMCAxIDAtMi41MTYtMS42MzQuNS41IDAgMCAxLS44MzktLjU0NUEyLjUgMi41IDAgMCAxIDcuODYyLjQwM1pNMTMuNSAyYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm0tMy0xYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm00LTFhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DaGVlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DbGlja0xlZnQgPSBmdW5jdGlvbiBFdWlJY29uQ2xpY2tMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAuNWEuNS41IDAgMCAwLTEgMHYxYS41LjUgMCAwIDAgMSAwdi0xWm0tMy4xNDYuNjQ2YS41LjUgMCAxIDAtLjcwOC43MDhsMSAxYS41LjUgMCAxIDAgLjcwOC0uNzA4bC0xLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgN0E1IDUgMCAwIDAgMyA3djRhNSA1IDAgMCAwIDEwIDBWN1ptLTEgMGE0IDQgMCAwIDAtNC00djVhMSAxIDAgMCAxLTEgMUg0djJhNCA0IDAgMCAwIDggMFY3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCA0LjVBLjUuNSAwIDAgMSAuNSA0aDFhLjUuNSAwIDAgMSAwIDFoLTFhLjUuNSAwIDAgMS0uNS0uNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNsaWNrTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DbGlja1JpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkNsaWNrUmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSAuNWEuNS41IDAgMCAxIDEgMHYxYS41LjUgMCAwIDEtMSAwdi0xWm0zLjE0Ni42NDZhLjUuNSAwIDAgMSAuNzA4LjcwOGwtMSAxYS41LjUgMCAwIDEtLjcwOC0uNzA4bDEtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zIDdhNSA1IDAgMCAxIDEwIDB2NGE1IDUgMCAwIDEtMTAgMFY3Wm0xIDBhNCA0IDAgMCAxIDQtNHY1YTEgMSAwIDAgMCAxIDFoM3YyYTQgNCAwIDAgMS04IDBWN1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDQuNWEuNS41IDAgMCAwLS41LS41aC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAuNS0uNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNsaWNrUmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2xvY2sgPSBmdW5jdGlvbiBFdWlJY29uQ2xvY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy41IDEzQTUuNTA2IDUuNTA2IDAgMCAxIDIgNy41QzIgNC40NjcgNC40NjcgMiA3LjUgMlMxMyA0LjQ2NyAxMyA3LjUgMTAuNTMzIDEzIDcuNSAxM20wLTEyYTYuNSA2LjUgMCAxIDAgMCAxMyA2LjUgNi41IDAgMCAwIDAtMTNtMyA2SDhWMy41YS41LjUgMCAwIDAtMSAwdjRhLjUuNSAwIDAgMCAuNS41aDNhLjUuNSAwIDAgMCAwLTFcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNsb2NrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNsb2NrQ291bnRlciA9IGZ1bmN0aW9uIEV1aUljb25DbG9ja0NvdW50ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4zOSAzLjYxYTUuNSA1LjUgMCAwIDAtNy43OCA3Ljc4bC41NjIuNTZ2LTEuNjIyYS41LjUgMCAwIDEgMSAwdjIuODI5YS41LjUgMCAwIDEtLjUuNUgxLjg0M2EuNS41IDAgMCAxIDAtMWgxLjYyMWwtLjU2LS41NkE2LjUgNi41IDAgMSAxIDcuNSAxNGEuNS41IDAgMCAxIDAtMSA1LjUgNS41IDAgMCAwIDMuODktOS4zOVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNSAzYS41LjUgMCAwIDEgLjUuNVY3aDIuNWEuNS41IDAgMCAxIDAgMWgtM2EuNS41IDAgMCAxLS41LS41di00YS41LjUgMCAwIDEgLjUtLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG9ja0NvdW50ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2xvdWREcml6emxlID0gZnVuY3Rpb24gRXVpSWNvbkNsb3VkRHJpenpsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMzQ4IDMuNzYxQTMuOTk1IDMuOTk1IDAgMCAxIDggN2EuNS41IDAgMCAxLTEgMCAzIDMgMCAxIDAtNC44NzggMi4zNC41LjUgMCAwIDEtLjYyNy43NzkgNCA0IDAgMCAxIDMuOTczLTYuODQgNS41MDIgNS41MDIgMCAwIDEgMTAuMDk2IDQuMzcuNS41IDAgMSAxLS45Mi0uMzkgNC41IDQuNSAwIDEgMC04LjI5Ni0zLjQ5N1ptLTEuNjEgNC45MzVhLjUuNSAwIDEgMSAuNzc1LjYzM2wtMS40NjYgMS43OTJhLjUuNSAwIDEgMS0uNzc0LS42MzNsMS40NjYtMS43OTJabS0zLjEyIDMuNjQ3YS41LjUgMCAwIDEgLjc3NC42MzRsLTEuNTA1IDEuODRhLjUuNSAwIDAgMS0uNzc0LS42MzRsMS41MDUtMS44NFptNy42Mi0zLjY0N2EuNS41IDAgMCAxIC43NzUuNjMzbC0xLjQ2NiAxLjc5MmEuNS41IDAgMSAxLS43NzQtLjYzM2wxLjQ2Ni0xLjc5MlptLTMuMTIgMy42NDdhLjUuNSAwIDAgMSAuNzc0LjYzNGwtMS41MDUgMS44NGEuNS41IDAgMCAxLS43NzQtLjYzNGwxLjUwNS0xLjg0Wm03LjYyLTMuNjQ3YS41LjUgMCAxIDEgLjc3NS42MzNsLTEuNDY2IDEuNzkyYS41LjUgMCAxIDEtLjc3NC0uNjMzbDEuNDY2LTEuNzkyWm0tMy4xMiAzLjY0N2EuNS41IDAgMCAxIC43NzQuNjM0bC0xLjUwNSAxLjg0YS41LjUgMCAwIDEtLjc3NC0uNjM0bDEuNTA1LTEuODRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG91ZERyaXp6bGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2xvdWRTdG9ybXkgPSBmdW5jdGlvbiBFdWlJY29uQ2xvdWRTdG9ybXkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjQyMSA0LjkzYS41LjUgMCAxIDEtLjg3LjQ5IDMgMyAwIDEgMC00LjQzIDMuOTE4LjUuNSAwIDAgMS0uNjI2Ljc4IDQgNCAwIDAgMSAzLjk3My02Ljg0bC4wMzIuMDE4VjMuMjhhNS41IDUuNSAwIDEgMSA3LjAwMyA3LjM1Ny41LjUgMCAxIDEtLjM2LS45MzQgNC41IDQuNSAwIDEgMC01Ljc3LTUuOTIzYy40Mi4zMS43NzguNzAxIDEuMDUgMS4xNWgtLjAwMlpNOS42IDExYy42NjkuMDAyLjc5NC42Ny4zNiAxLjAwM2wtNC42OCAzLjg4MmMtLjQ1Ny4zNzgtMS4wNTMtLjI2LS42NDMtLjY4OWwzLjA4LTMuMTkzQTU0MTEuNyA1NDExLjcgMCAwIDEgNS4xMTMgMTJjLS42NjgtLjAwMS0uNzkzLS42NjktLjM2LTEuMDAzbDQuNjgtMy44ODFjLjQ1OC0uMzc5IDEuMDUzLjI2LjY0My42ODhsLTMuMDggMy4xOTNMOS42IDExWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvdWRTdG9ybXk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ2xvdWRTdW5ueSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZFN1bm55KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNzQ2IDUuMDA1QTUuNSA1LjUgMCAwIDEgMTAuNSAxNkg0YTQgNCAwIDAgMS0xLjYxLTcuNjYzQTQuNDczIDQuNDczIDAgMCAxIDIuMDI5IDdILjVhLjUuNSAwIDAgMSAwLTFoMS41MjdhNC40NzkgNC40NzkgMCAwIDEgLjk1Ny0yLjMwOUwxLjY0NiAyLjM1NGEuNS41IDAgMSAxIC43MDgtLjcwOEwzLjY5IDIuOTg0QTQuNDc5IDQuNDc5IDAgMCAxIDYgMi4wMjdWLjVhLjUuNSAwIDAgMSAxIDB2MS41MjhhNC40OTMgNC40OTMgMCAwIDEgMi4zMDkuOTU2bDEuMzM3LTEuMzM4YS41LjUgMCAwIDEgLjcwOC43MDhMMTAuMDE2IDMuNjljLjMxMS4zODguNTYuODMxLjczIDEuMzE0Wk00IDE1aDYuNWE0LjUgNC41IDAgMSAwLTQuMTUyLTYuMjM5QTMuOTk1IDMuOTk1IDAgMCAxIDggMTJhLjUuNSAwIDEgMS0xIDAgMyAzIDAgMSAwLTMgM1ptNS42OTEtOS45NGEzLjUgMy41IDAgMSAwLTYuMzMgMi45OTEgNC4wMjkgNC4wMjkgMCAwIDEgMi4xMDYuMjI3IDUuNTA1IDUuNTA1IDAgMCAxIDQuMjI0LTMuMjE5WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvdWRTdW5ueTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DbHVzdGVyID0gZnVuY3Rpb24gRXVpSWNvbkNsdXN0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC41IDdhMi41IDIuNSAwIDEgMCAwLTUgMi41IDIuNSAwIDAgMCAwIDV6bTAtNmEzLjUgMy41IDAgMCAxIDMuNDY1IDNoMy4xMmExLjUgMS41IDAgMSAxIDAgMWgtMy4xMmEzLjQ4MiAzLjQ4MiAwIDAgMS0uNjYyIDEuNTk2bDIuMSAyLjFBMy41IDMuNSAwIDEgMSA4LjAzNiAxMmgtMy4xMmExLjUgMS41IDAgMSAxIDAtLjk5OWgzLjEyYTMuNDgyIDMuNDgyIDAgMCAxIC42NjItMS41OTZsLTIuMS0yLjFBMy41IDMuNSAwIDEgMSA0LjUgMXpNMTIgNC41YS41LjUgMCAxIDAgMSAwIC41LjUgMCAwIDAtMSAwem0tLjUgOS41YTIuNSAyLjUgMCAxIDEgMC01IDIuNSAyLjUgMCAwIDEgMCA1ek00IDExLjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDAgMSAxIDB6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2x1c3RlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db2xvciA9IGZ1bmN0aW9uIEV1aUljb25Db2xvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDExYzEuMzM0IDEuMzkzIDIgMi40MzUgMiAzLjEyNUMxNSAxNS4xNjEgMTQuMTA1IDE2IDEzIDE2Yy0xLjEwNCAwLTItLjg0LTItMS44NzUgMC0uNjkuNjY3LTEuNzMyIDItMy4xMjV6TTUuODU3LjE1bDYuMzQgNi40NS4wMTYuMDIuMzI0LjMyMWExLjUgMS41IDAgMCAxIC4xMSAyLjAwNmwtLjEwMy4xMTQtNC40NzQgNC41MTNhMS41IDEuNSAwIDAgMS0yLjEyMy4wMDhMMS40NjQgOS4wNmExLjUgMS41IDAgMCAxIC4wMDctMi4xMmw0LjQ3Mi00LjQ1Yy4xNDUtLjE0Ni4zMTMtLjI1NC40OTItLjMyN0w1LjE0NC44NWEuNS41IDAgMCAxIC43MTMtLjd6bTEuNDk2IDMuMDQ5YS41LjUgMCAwIDAtLjcwNSAwTDIuMTc3IDcuNjVhLjQ5OC40OTggMCAwIDAtLjE0OC4zNWg5Ljk1YS40OTguNDk4IDAgMCAwLS4xNDgtLjM1TDcuMzUzIDMuMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbG9yOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvbXB1dGUgPSBmdW5jdGlvbiBFdWlJY29uQ29tcHV0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgM2ExIDEgMCAwIDAtMSAxdjhhMSAxIDAgMCAwIDEgMWg4YTEgMSAwIDAgMCAxLTFWNGExIDEgMCAwIDAtMS0xSDRabTEwIDh2MWEyIDIgMCAwIDEtMiAyaC0xdjJoLTF2LTJIOC41djJoLTF2LTJINnYySDV2LTJINGEyIDIgMCAwIDEtMi0ydi0xSDB2LTFoMlY4LjVIMHYtMWgyVjZIMFY1aDJWNGEyIDIgMCAwIDEgMi0yaDFWMGgxdjJoMS41VjBoMXYySDEwVjBoMXYyaDFhMiAyIDAgMCAxIDIgMnYxaDJ2MWgtMnYxLjVoMnYxaC0yVjEwaDJ2MWgtMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiA2LFxuICAgIGhlaWdodDogNixcbiAgICB4OiA1LFxuICAgIHk6IDUsXG4gICAgcng6IDFcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db21wdXRlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvbnNvbGUgPSBmdW5jdGlvbiBFdWlJY29uQ29uc29sZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMTU3IDEyLjIyNCA1Ljc2OCA4LjMyYS40MDQuNDA0IDAgMCAwIDAtLjY0bC00LjYxLTMuOTA0YS40MDcuNDA3IDAgMCAxIDAtLjY0My42MDguNjA4IDAgMCAxIC43NTkgMGw0LjYxIDMuOTA0Yy42MzEuNTM0LjYzIDEuMzkzIDAgMS45MjZsLTQuNjEgMy45MDRhLjYwOC42MDggMCAwIDEtLjc2IDAgLjQwNy40MDcgMCAwIDEgMC0uNjQzWk05IDEyaDZ2MUg5di0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29uc29sZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db250YWluZXIgPSBmdW5jdGlvbiBFdWlJY29uQ29udGFpbmVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTAgMi41QS41LjUgMCAwIDEgLjUgMmgxNWEuNS41IDAgMCAxIDAgMUgxNXYxMGguNWEuNS41IDAgMCAxIDAgMUguNWEuNS41IDAgMCAxIDAtMUgxVjNILjVhLjUuNSAwIDAgMS0uNS0uNXpNMiAzaDEydjEwSDJWM3ptMyAyYS41LjUgMCAwIDAtLjUuNXY1YS41LjUgMCAwIDAgMSAwdi01QS41LjUgMCAwIDAgNSA1em01LjUuNWEuNS41IDAgMCAxIDEgMHY1YS41LjUgMCAwIDEtMSAwdi01ek04IDVhLjUuNSAwIDAgMC0uNS41djVhLjUuNSAwIDAgMCAxIDB2LTVBLjUuNSAwIDAgMCA4IDV6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGFpbmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvbnRpbnVpdHlBYm92ZSA9IGZ1bmN0aW9uIEV1aUljb25Db250aW51aXR5QWJvdmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjUgM2EuNS41IDAgMCAwLS41LjV2OWEuNS41IDAgMCAwIDEgMHYtOWEuNS41IDAgMCAwLS41LS41em0zIDBhLjUuNSAwIDAgMC0uNS41djlhLjUuNSAwIDAgMCAxIDBWOWg2djEuNWEuNS41IDAgMCAwIC44Mi4zODRsMy0yLjVhLjUuNSAwIDAgMCAwLS43NjhsLTMtMi41QS41LjUgMCAwIDAgMTEgNS41VjdINVYzLjVhLjUuNSAwIDAgMC0uNS0uNXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRpbnVpdHlBYm92ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdyA9IGZ1bmN0aW9uIEV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSAzYS41LjUgMCAwIDEgLjUuNXY5YS41LjUgMCAwIDEtMSAwVjlINHYxLjVhLjUuNSAwIDAgMS0uODIuMzg0bC0zLTIuNWEuNS41IDAgMCAxIDAtLjc2OGwzLTIuNUEuNS41IDAgMCAxIDQgNS41VjdoMlYzLjVhLjUuNSAwIDAgMSAuNS0uNXptMyAwYS41LjUgMCAwIDAtLjUuNXY5YS41LjUgMCAwIDAgMSAwVjloMnYxLjVhLjUuNSAwIDAgMCAuODIuMzg0bDMtMi41YS41LjUgMCAwIDAgMC0uNzY4bC0zLTIuNUEuNS41IDAgMCAwIDEyIDUuNVY3aC0yVjMuNWEuNS41IDAgMCAwLS41LS41elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUFib3ZlQmVsb3c7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29udGludWl0eUJlbG93ID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlCZWxvdyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjUgM2EuNS41IDAgMCAxIC41LjV2OWEuNS41IDAgMCAxLTEgMFY5SDV2MS41YS41LjUgMCAwIDEtLjgyLjM4NGwtMy0yLjVhLjUuNSAwIDAgMSAwLS43NjhsMy0yLjVBLjUuNSAwIDAgMSA1IDUuNVY3aDZWMy41YS41LjUgMCAwIDEgLjUtLjV6bTMgMGEuNS41IDAgMCAxIC41LjV2OWEuNS41IDAgMCAxLTEgMHYtOWEuNS41IDAgMCAxIC41LS41elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUJlbG93OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkNvbnRpbnVpdHlXaXRoaW4gPSBmdW5jdGlvbiBFdWlJY29uQ29udGludWl0eVdpdGhpbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDNhLjUuNSAwIDAgMC0uNS41djlhLjUuNSAwIDAgMCAxIDB2LTlBLjUuNSAwIDAgMCAuNSAzem0xNC41LjVhLjUuNSAwIDAgMSAxIDB2OWEuNS41IDAgMCAxLTEgMHYtOXptLTQuNzEyIDEuNTQ3YS41LjUgMCAwIDEgLjUzMi4wNjlsMyAyLjVhLjUuNSAwIDAgMSAwIC43NjhsLTMgMi41QS41LjUgMCAwIDEgMTAgMTAuNVY5SDZ2MS41YS41LjUgMCAwIDEtLjgyLjM4NGwtMy0yLjVhLjUuNSAwIDAgMSAwLS43NjhsMy0yLjVBLjUuNSAwIDAgMSA2IDUuNVY3aDRWNS41YS41LjUgMCAwIDEgLjI4OC0uNDUzelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eVdpdGhpbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db250cm9sc0hvcml6b250YWwgPSBmdW5jdGlvbiBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguMDUgMTBhMi41IDIuNSAwIDAgMSA0LjkgMGgxLjU1YS41LjUgMCAxIDEgMCAxaC0xLjU1YTIuNSAyLjUgMCAwIDEtNC45IDBIMS41YS41LjUgMCAxIDEgMC0xaDYuNTVabS0uMS00YTIuNSAyLjUgMCAwIDEtNC45IDBIMS41YS41LjUgMCAwIDEgMC0xaDEuNTVhMi41IDIuNSAwIDAgMSA0LjkgMGg2LjU1YS41LjUgMCAxIDEgMCAxSDcuOTVaTTQgNS41YTEuNSAxLjUgMCAxIDAgMyAwIDEuNSAxLjUgMCAwIDAtMyAwWm04IDVhMS41IDEuNSAwIDEgMC0zIDAgMS41IDEuNSAwIDAgMCAzIDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250cm9sc0hvcml6b250YWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29udHJvbHNWZXJ0aWNhbCA9IGZ1bmN0aW9uIEV1aUljb25Db250cm9sc1ZlcnRpY2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEwIDcuOTVhMi41IDIuNSAwIDAgMSAwLTQuOVYxLjVhLjUuNSAwIDEgMSAxIDB2MS41NWEyLjUgMi41IDAgMCAxIDAgNC45djYuNTVhLjUuNSAwIDEgMS0xIDBWNy45NVptLTQgLjFhMi41IDIuNSAwIDAgMSAwIDQuOXYxLjU1YS41LjUgMCAxIDEtMSAwdi0xLjU1YTIuNSAyLjUgMCAwIDEgMC00LjlWMS41YS41LjUgMCAwIDEgMSAwdjYuNTVaTTUuNSAxMmExLjUgMS41IDAgMSAwIDAtMyAxLjUgMS41IDAgMCAwIDAgM1ptNS04YTEuNSAxLjUgMCAxIDAgMCAzIDEuNSAxLjUgMCAwIDAgMC0zWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udHJvbHNWZXJ0aWNhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Db3B5ID0gZnVuY3Rpb24gRXVpSWNvbkNvcHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS40IDBjLjIzNSAwIC40Ni4wOTkuNjIyLjI3M2wyLjc0MyAzYy4xNTEuMTYyLjIzNS4zNzguMjM1LjYwMnY5LjI1YS44NjcuODY3IDAgMCAxLS44NTcuODc1SDMuODU3QS44NjcuODY3IDAgMCAxIDMgMTMuMTI1Vi44NzVDMyAuMzkyIDMuMzg0IDAgMy44NTcgMEgxMS40Wk0xNCA0aC0yLjZhLjQuNCAwIDAgMS0uNC0uNFYxSDR2MTJoMTBWNFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMUgyYTEgMSAwIDAgMC0xIDF2MTNhMSAxIDAgMCAwIDEgMWgxMGExIDEgMCAwIDAgMS0xdi0xaC0xdjFIMlYyaDFWMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvcHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ29weUNsaXBib2FyZCA9IGZ1bmN0aW9uIEV1aUljb25Db3B5Q2xpcGJvYXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAyLjcyOVYyYTEgMSAwIDAgMSAxLTFoMnYxSDN2MTJoNHYxSDNhMSAxIDAgMCAxLTEtMVYyLjcyOXpNMTQgNVYyYTEgMSAwIDAgMC0xLTFoLTJ2MWgydjNoMXptLTEgMWgydjlIOFY2aDVWNUg4YTEgMSAwIDAgMC0xIDF2OWExIDEgMCAwIDAgMSAxaDdhMSAxIDAgMCAwIDEtMVY2YTEgMSAwIDAgMC0xLTFoLTJ2MXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTBoNVY5SDl2MXptMC0yaDVWN0g5djF6bTAgNGg1di0xSDl2MXptMCAyaDV2LTFIOXYxem0yLTEyVjFhMSAxIDAgMCAwLTEtMUg2YTEgMSAwIDAgMC0xIDF2MWgxVjFoNHYxaDF6TTUgM2g2VjJINXYxelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29weUNsaXBib2FyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Dcm9zcyA9IGZ1bmN0aW9uIEV1aUljb25Dcm9zcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMjkzIDggMy4xNDYgMy44NTRhLjUuNSAwIDEgMSAuNzA4LS43MDhMOCA3LjI5M2w0LjE0Ni00LjE0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsNC4xNDcgNC4xNDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC00LjE0NiA0LjE0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3Jvc3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ3Jvc3NJbkNpcmNsZSA9IGZ1bmN0aW9uIEV1aUljb25Dcm9zc0luQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdjcm9zc0luQ2lyY2xlJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgY2xpcFBhdGg6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTguNzU1IDggMi42NCAyLjY0MWEuNTM0LjUzNCAwIDEgMS0uNzU0Ljc1NUw4IDguNzU1bC0yLjY0MSAyLjY0YS41MzQuNTM0IDAgMSAxLS43NTUtLjc1NEw3LjI0NSA4bC0yLjY0LTIuNjQxYS41MzQuNTM0IDAgMSAxIC43NTQtLjc1NUw4IDcuMjQ1bDIuNjQxLTIuNjRhLjUzNC41MzQgMCAxIDEgLjc1NS43NTRMOC43NTUgOFptNC45MDQtNS42NmMzLjEyMSAzLjEyMSAzLjEyMSA4LjE5OSAwIDExLjMyLTMuMTIgMy4xMi04LjE5OCAzLjEyLTExLjMxOCAwQy0uNzggMTAuNTM4LS43OCA1LjQ2IDIuMzQgMi4zNGMzLjEyLTMuMTIgOC4xOTgtMy4xMiAxMS4zMTkgMFptLS42NjUuNjY2YTcuMDYyIDcuMDYyIDAgMSAwLTkuOTg4IDkuOTg4IDcuMDYyIDcuMDYyIDAgMCAwIDkuOTg4LTkuOTg4WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJjbGlwUGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjZmZmXCIsXG4gICAgZDogXCJNMCAwaDE2djE2SDB6XCJcbiAgfSkpKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNyb3NzSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ3Jvc3NJbkNpcmNsZSA9IGZ1bmN0aW9uIEV1aUljb25Dcm9zc0luQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE2IDhBOCA4IDAgMSAxIDAgOGE4IDggMCAwIDEgMTYgMFptLTEgMEE3IDcgMCAxIDEgMSA4YTcgNyAwIDAgMSAxNCAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3Jvc3NJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Dcm9zc2hhaXJzID0gZnVuY3Rpb24gRXVpSWNvbkNyb3NzaGFpcnMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjgyMiAxLjg3NGEuNS41IDAgMSAxIC4zMzUuOTQyIDUuNTE3IDUuNTE3IDAgMCAwLTMuMzQgMy4zNDEuNS41IDAgMSAxLS45NDMtLjMzNSA2LjUxNyA2LjUxNyAwIDAgMSAzLjk0OC0zLjk0OFpNMS44NjQgMTAuMTVhLjUuNSAwIDEgMSAuOTQ0LS4zMyA1LjUxNyA1LjUxNyAwIDAgMCAzLjM2NSAzLjM3LjUuNSAwIDAgMS0uMzMzLjk0MyA2LjUxNyA2LjUxNyAwIDAgMS0zLjk3Ni0zLjk4M1ptOC4zMDIgMy45ODFhLjUuNSAwIDEgMS0uMzMzLS45NDMgNS41MTcgNS41MTcgMCAwIDAgMy4zNDctMy4zMzIuNS41IDAgMSAxIC45NDEuMzM3IDYuNTE3IDYuNTE3IDAgMCAxLTMuOTU1IDMuOTM4Wm0zLjk2OC04LjI4NWEuNS41IDAgMSAxLS45NDMuMzMxQTUuNTE3IDUuNTE3IDAgMCAwIDkuODUgMi44MmEuNS41IDAgMCAxIC4zMzctLjk0MiA2LjUxNyA2LjUxNyAwIDAgMSAzLjk0NiAzLjk2OFpNOC41IDMuNWEuNS41IDAgMCAxLTEgMFYuOTk3YS41LjUgMCAwIDEgMSAwVjMuNVptLTQuOTk3IDRhLjUuNSAwIDAgMSAwIDFIMWEuNS41IDAgMCAxIDAtMWgyLjUwM1pNNy41IDEyLjQ5N2EuNS41IDAgMCAxIDEgMFYxNWEuNS41IDAgMSAxLTEgMHYtMi41MDNaTTEyLjQ5NyA4LjVhLjUuNSAwIDAgMSAwLTFIMTVhLjUuNSAwIDEgMSAwIDFoLTIuNTAzWk04IDlhMSAxIDAgMSAxIDAtMiAxIDEgMCAwIDEgMCAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3Jvc3NoYWlyczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25DdXJyZW5jeSA9IGZ1bmN0aW9uIEV1aUljb25DdXJyZW5jeShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTEyLjk1IDEuNjM2IDEuNDE0IDEuNDE0LTIuMTkyIDIuMTkzQzEyLjY5NSA2LjAzMyAxMyA2Ljk4IDEzIDhjMCAxLjAyLS4zMDUgMS45NjctLjgyOCAyLjc1N2wyLjE5MiAyLjE5My0xLjQxNCAxLjQxNC0yLjE5My0yLjE5MkE0Ljk3NyA0Ljk3NyAwIDAgMSA4IDEzYTQuOTc3IDQuOTc3IDAgMCAxLTIuNzU3LS44MjhMMy4wNSAxNC4zNjQgMS42MzYgMTIuOTVsMi4xOTItMi4xOTNBNC45NzcgNC45NzcgMCAwIDEgMyA4YzAtMS4wMi4zMDUtMS45NjcuODI4LTIuNzU3TDEuNjM2IDMuMDUgMy4wNSAxLjYzNmwyLjE5MyAyLjE5MkE0Ljk3NyA0Ljk3NyAwIDAgMSA4IDNjMS4wMiAwIDEuOTY3LjMwNSAyLjc1Ny44MjhsMi4xOTMtMi4xOTJaTTggNWEyLjk5IDIuOTkgMCAwIDAtMS4xNjguMjM2bC0uMTI2LjA1Ny0uMjE4LjExNi0uMTMyLjA4MS0uMDczLjA1YTMuMDEzIDMuMDEzIDAgMCAwLS4yNDEuMTg3bC0uMTEzLjEwMy0uMTQ3LjE1Yy0uMDUuMDU0LS4wOTcuMTEtLjE0Mi4xNjhsLS4xLjEzNS0uMDUuMDczLS4wNi4wOTdjLS4wNS4wODItLjA5Ni4xNjYtLjEzNy4yNTNsLS4wNTcuMTI2QTIuOTkgMi45OSAwIDAgMCA1IDhjMCAuNDE0LjA4NC44MDkuMjM2IDEuMTY4bC4wNTcuMTI2LjExNi4yMTguMDgxLjEzMmMuMDU5LjA4OS4xMjEuMTc1LjE4OS4yNTdsLjE1LjE3LjE1MS4xNDdjLjA1Ni4wNTEuMTE0LjEuMTc0LjE0N2wuMTQyLjEwNWMuMDU0LjAzNy4xMDkuMDcyLjE2NS4xMDZsLS4xMjQtLjA3OS4wOTIuMDYuMDk0LjA1NWMuNDM2LjI0Ny45NC4zODggMS40NzcuMzg4YTIuOTkgMi45OSAwIDAgMCAxLjE2OC0uMjM2bC4xMjUtLjA1Ni4yMTMtLjExMy4xNTEtLjA5NC4wNS0uMDM0YTMuMDExIDMuMDExIDAgMCAwIC4zMjMtLjI1OGwtLjE1LjEyOS4wOS0uMDc1LjE2OC0uMTU5LjA4LS4wODRjLjA1MS0uMDU2LjEtLjExNC4xNDctLjE3NGwuMTA1LS4xNDIuMTA2LS4xNjVjLjA0Ny0uMDguMDkxLS4xNjEuMTMxLS4yNDVsLjA1Ny0uMTI2QTIuOTkgMi45OSAwIDAgMCAxMSA4YTIuOTkgMi45OSAwIDAgMC0uMjM2LTEuMTY4bC0uMDU2LS4xMjUtLjExMi0uMjExLS4wOTYtLjE1NS0uMDMzLS4wNDlhMy4wMTEgMy4wMTEgMCAwIDAtLjI1OC0uMzIybC4xMjkuMTUtLjA3NS0uMDktLjE1OS0uMTY4LS4wODQtLjA4YTMuMDE1IDMuMDE1IDAgMCAwLS4xNzQtLjE0N2wtLjE4My0uMTMyLS4xMjQtLjA3OWEyLjk5MyAyLjk5MyAwIDAgMC0uMjQ1LS4xMzFsLS4xMjYtLjA1N0EyLjk5IDIuOTkgMCAwIDAgOCA1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3VycmVuY3k7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uQ3V0ID0gZnVuY3Rpb24gRXVpSWNvbkN1dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm01LjE0MiAxMS4wNzQtMS45MTIuNTQ4YTIuNTMyIDIuNTMyIDAgMSAxLTEuMzk1LTQuODY3bDEuOTQ3LS41NTlhMi41MzIgMi41MzIgMCAwIDEgMi41NTUuNzEzbDEuNTMtNS4zMzVjLjEzOS0uNDg1LjYtLjg5NyAxLjE1OS0xLjIzOC4yNy0uMTY0LjUyLS4yNzguNzc5LS4zMi44MTQtLjEzMiAxLjUwMy41NTggMS4yNjEgMS40MjJMOS41NzQgNi42NDNsNC45ODgtMS40M2MuODY0LS4yNDIgMS41NTQuNDQ3IDEuNDIyIDEuMjYtLjA0Mi4yNi0uMTU2LjUxLS4zMi43OC0uMzQxLjU2LS43NTMgMS4wMi0xLjIzOCAxLjE2TDkuNTIzIDkuODE3YTIuNTMgMi41MyAwIDAgMSAuNTYgMi40bC0uNTYgMS45NDdhMi41MzIgMi41MzIgMCAxIDEtNC44NjctMS4zOTVsLjQ4Ni0xLjY5NlptLjMzLTEuMTQ4LjQ4LTEuNjczYTEuNTIgMS41MiAwIDAgMC0xLjg5LTEuMDgzbC0xLjk0OC41NThhMS41MiAxLjUyIDAgMCAwIC44MzcgMi45MmwyLjUyLS43MjJabTMuNzczLTIuMTM1LS4zMyAxLjE0OCA1LjIzMi0xLjVjLjMyNC0uMDkzIDEuMTgyLTEuMzkuNjk0LTEuMjUzTDkuMjQ1IDcuNzkxWk01LjYzIDEzLjA0OWExLjUyIDEuNTIgMCAwIDAgMi45Mi44MzdsLjU1OS0xLjk0N2ExLjUyIDEuNTIgMCAwIDAtMS41NTMtMS45MzVsMi41MzctOC44NDVjLjEzNi0uNDg4LTEuMTYuMzctMS4yNTMuNjk0TDUuNjMgMTMuMDVabS45NzMuMjc5LjU1OS0xLjk0N2EuNTA2LjUwNiAwIDEgMSAuOTczLjI3OWwtLjU1OCAxLjk0N2EuNTA2LjUwNiAwIDEgMS0uOTc0LS4yOFptLTMuOTMtMy42NTNhLjUwNi41MDYgMCAxIDEtLjI4LS45NzNsMS45NDctLjU1OGEuNTA2LjUwNiAwIDAgMSAuMjguOTczbC0xLjk0OC41NThaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRGF0YWJhc2UgPSBmdW5jdGlvbiBFdWlJY29uRGF0YWJhc2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDEyaDEydi0xLjk3Yy0xLjIyNS41ODItMy40NTQuOTctNiAuOTdzLTQuNzc1LS4zODgtNi0uOTdWMTJabS0xIDBWM2MwLTEuMTA1IDMuMTM0LTIgNy0yczcgLjg5NSA3IDJ2OWMwIDEuMTA1LTMuMTM0IDItNyAycy03LS44OTUtNy0yWm0xLTNoMTJWNy4wM2MtMS4yMjUuNTgyLTMuNDU0Ljk3LTYgLjk3cy00Ljc3NS0uMzg4LTYtLjk3VjlabTAtNC45N1Y2aDEyVjQuMDNjLTEuMjI1LjU4Mi0zLjQ1NC45Ny02IC45N3MtNC43NzUtLjM4OC02LS45N1ptMTAuNjc1LTEuNDgzQzExLjQ2NyAyLjIwMiA5Ljc5NSAyIDggMmMtMS43OTQgMC0zLjQ2Ny4yMDItNC42NzUuNTQ3LS40OTIuMTQtLjg4LjI5OC0xLjEzNi40NTMuMjU2LjE1NS42NDQuMzEyIDEuMTM2LjQ1M0M0LjUzMyAzLjc5OCA2LjIwNSA0IDggNGMxLjc5NCAwIDMuNDY3LS4yMDIgNC42NzUtLjU0Ny40OTItLjE0Ljg4LS4yOTggMS4xMzYtLjQ1My0uMjU2LS4xNTUtLjY0NC0uMzEyLTEuMTM2LS40NTNaTTIgNmMuMjU3LjE1NS44MzMuMzEyIDEuMzI1LjQ1M0M0LjUzMyA2Ljc5OCA2LjIwNSA3IDggN2MxLjc5NCAwIDMuNDY3LS4yMDIgNC42NzUtLjU0Ny40OTItLjE0IDEuMDctLjI5OCAxLjMyNy0uNDUzSDJabTAgM2MuMjU3LjE1NS44MzMuMzEyIDEuMzI1LjQ1M0M0LjUzMyA5Ljc5OCA2LjIwNSAxMCA4IDEwYzEuNzk0IDAgMy40NjctLjIwMiA0LjY3NS0uNTQ3LjQ5Mi0uMTQgMS4wNy0uMjk4IDEuMzI3LS40NTNIMlptMCAzYy4yNTcuMTU1LjgzMy4zMTIgMS4zMjUuNDUzQzQuNTMzIDEyLjc5OCA2LjIwNSAxMyA4IDEzYzEuNzk0IDAgMy40NjctLjIwMiA0LjY3NS0uNTQ3LjQ5Mi0uMTQgMS4wNy0uMjk4IDEuMzI3LS40NTNIMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRhdGFiYXNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRlc2t0b3AgPSBmdW5jdGlvbiBFdWlJY29uRGVza3RvcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yIDJhMSAxIDAgMCAwLTEgMXY3YTEgMSAwIDAgMCAxIDFoNGwtMSAzSDMuNWEuNS41IDAgMCAwIDAgMWg5YS41LjUgMCAwIDAgMC0xSDExbC0xLTNoNGExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMUgyem0wIDhWM2gxMnY3SDJ6bTUgMWgybDEgM0g2bDEtM3pcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjUgNmEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xaC0xem0zIDBhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMWgtMXptMi41LjVhLjUuNSAwIDAgMSAuNS0uNWgxYS41LjUgMCAwIDEgMCAxaC0xYS41LjUgMCAwIDEtLjUtLjV6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25EZXNrdG9wOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRpZmYgPSBmdW5jdGlvbiBFdWlJY29uRGlmZihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMS41YS41LjUgMCAwIDAtMSAwVjRIMS41YS41LjUgMCAwIDAgMCAxSDR2Mi41YS41LjUgMCAwIDAgMSAwVjVoMi41YS41LjUgMCAwIDAgMC0xSDVWMS41Wm0zIDEwYS41LjUgMCAwIDEgLjUtLjVoNmEuNS41IDAgMCAxIDAgMWgtNmEuNS41IDAgMCAxLS41LS41Wm00Ljg1NC03LjY0NmEuNS41IDAgMCAwLS43MDgtLjcwOGwtOSA5YS41LjUgMCAwIDAgLjcwOC43MDhsOS05WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRGlmZjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25EaXNjdXNzID0gZnVuY3Rpb24gRXVpSWNvbkRpc2N1c3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00Ljk2NyAxMC44NjRjLjMzMi43ODcgMS4wODUgMS4zMzcgMS45NjIgMS4zMzdoMy42NzNsMi43NTUgMi44di0yLjhjMS4xODQgMCAyLjE0My0xLjAwMyAyLjE0My0yLjI0VjYuNjA0YzAtMS4yMzctLjk2LTIuMjQtMi4xNDMtMi4yNGgtMS4wNzF2NC4zMzRjMCAxLjE5Ny0uODk2IDIuMTY3LTIgMi4xNjdoLTUuMzJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjkwNSA4LjcxOGg0LjE2NmMuNTkyIDAgMS4wNzItLjUwMiAxLjA3Mi0xLjEyVjQuMjRjMC0uNjE4LS40OC0xLjEyLTEuMDcyLTEuMTJIMi42NDNjLS41OTIgMC0xLjA3Mi41MDItMS4wNzIgMS4xMlY3LjZjMCAuNjE3LjQ4IDEuMTE5IDEuMDcyIDEuMTE5aDEuMDcxdjEuNDUybDEuMTkxLTEuNDUyWm0uNDkzIDEuMTItMi43NTUgMi43OThWOS44MzdDMS40NTkgOS44MzcuNSA4LjgzNS41IDcuNTk4VjQuMjRDLjUgMy4wMDMgMS40NiAyIDIuNjQzIDJIOS4wN2MxLjE4NCAwIDIuMTQzIDEuMDAzIDIuMTQzIDIuMjR2My4zNThjMCAxLjIzNy0uOTYgMi4yNC0yLjE0MyAyLjI0SDUuMzk4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRGlzY3VzczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Eb2N1bWVudCA9IGZ1bmN0aW9uIEV1aUljb25Eb2N1bWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjggMGMuMjc0IDAgLjUzNy4xMTMuNzI2LjMxMmwzLjIgMy40MjhjLjE3Ni4xODYuMjc0LjQzMy4yNzQuNjg5VjE1YTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjFhMSAxIDAgMCAxIDEtMWg4LjhaTTE0IDVoLTMuNWEuNS41IDAgMCAxLS41LS41VjFIMnYxNGgxMlY1Wm0tOC41IDdhLjUuNSAwIDEgMSAwLTFoNWEuNS41IDAgMSAxIDAgMWgtNVptMC0zYS41LjUgMCAwIDEgMC0xaDVhLjUuNSAwIDEgMSAwIDFoLTVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb2N1bWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Eb2N1bWVudEVkaXQgPSBmdW5jdGlvbiBFdWlJY29uRG9jdW1lbnRFZGl0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOC41MDUgOC45OTUgNi40NTMtNi40NC0xLjUtMS41LTYuNDUzIDYuNDQgMS41IDEuNVpNMTIuOTY4LjE5Yy4yNTgtLjIzOC42NTctLjI2LjkxIDBsMS45MjggMS45MjlhLjY0Mi42NDIgMCAwIDEgMCAuOTA5bC02Ljc4IDYuNzg0QS42NDEuNjQxIDAgMCAxIDguNTcgMTBINi42NDNBLjY0My42NDMgMCAwIDEgNiA5LjM1N1Y3LjQzYzAtLjE3LjA2Ny0uMzM1LjE4OC0uNDU1TDEyLjk2OC4xOVpNNC41IDEzYS41LjUgMCAxIDEgMC0xaDdhLjUuNSAwIDEgMSAwIDFoLTdabTQtMTJhLjUuNSAwIDAgMSAwIDFIMnYxM2gxMlY3LjVhLjUuNSAwIDEgMSAxIDBWMTVhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xaDYuNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50RWRpdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Eb2N1bWVudGF0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50YXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDMuNWEuNS41IDAgMSAxLTEgMCAuNS41IDAgMCAxIDEgMHpNOSA1djNoMXYxSDhWNkg3VjVoMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjg1NSAxNC4xNDdhMS4zNCAxLjM0IDAgMCAxLS4xNTgtLjI0NkExLjk5OCAxLjk5OCAwIDAgMSAxMy41IDEzYzAtLjQxNC4xMDMtLjcxMy4xOTctLjkwMWExLjM0IDEuMzQgMCAwIDEgLjE1OC0uMjQ2bC4wMDMtLjAwNUEuNS41IDAgMCAwIDE0IDExLjVWLjVhLjUuNSAwIDAgMC0uNS0uNUgzLjQ2MWwtLjA4My4wMDVhMi45NTcgMi45NTcgMCAwIDAtMS4xMDIuMjk4IDIuMjU3IDIuMjU3IDAgMCAwLS44OC43NjNDMS4xNDggMS40NCAxIDEuOTEzIDEgMi41VjEzYzAgLjQ2My4xMTcuODQzLjMxOCAxLjE0NS4yLjI5OC40NjIuNDkxLjcwOC42MTVhMi4zNDQgMi4zNDQgMCAwIDAgLjk0LjI0SDN2LTFjLS4wMDUgMC0uMDE1IDAtLjAyOS0uMDAyYTEuMzQ0IDEuMzQ0IDAgMCAxLS40OTgtLjEzMy44MTcuODE3IDAgMCAxLS4zMjMtLjI3NUMyLjA3IDEzLjQ3IDIgMTMuMjg3IDIgMTNzLjA3LS40Ny4xNS0uNTlhLjgxNy44MTcgMCAwIDEgLjMyNC0uMjc1QTEuMzQ0IDEuMzQ0IDAgMCAxIDMgMTJoOS42NThjLS4wOTEuMjctLjE1OC42MDUtLjE1OCAxcy4wNjcuNzMuMTU4IDFIOHYxaDUuNWEuNS41IDAgMCAwIC4zNTktLjg0OGwtLjAwNC0uMDA1em0tLjAwMSAwIC4wMDIuMDAyLS4wMDItLjAwMnpNMi43MjQgMS4xOTdjLjA5Mi0uMDQ2LjE4Ni0uMDgyLjI3Ni0uMTFDMyAyLjkxOCAzLjAwMSAxMSAyLjk5OSAxMWgtLjAzM2ExLjk3NyAxLjk3NyAwIDAgMC0uMjgzLjAzIDIuMzQ0IDIuMzQ0IDAgMCAwLS42NTcuMjFMMiAxMS4yNTRWMi41YzAtLjQxMy4xMDItLjY4OS4yMjktLjg3OS4xMjgtLjE5My4zMDQtLjMyOC40OTUtLjQyNHpNNCAxMVYxaDl2MTBINHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTNINHYyLjVhLjUuNSAwIDAgMCAuODU0LjM1NGwuNjQ2LS42NDcuNjQ2LjY0N0EuNS41IDAgMCAwIDcgMTUuNVYxM3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50YXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRG9jdW1lbnRzID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguOCAwYy4yNzQgMCAuNTM3LjExMy43MjYuMzEybDMuMiAzLjQyOGMuMTc2LjE4Ni4yNzQuNDMzLjI3NC42ODlWMTNhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTFWMWExIDEgMCAwIDEgMS0xaDYuOFpNMTIgNUg4LjVhLjUuNSAwIDAgMS0uNS0uNVYxSDJ2MTJoMTBWNVptLTcuNSA2YS41LjUgMCAxIDEgMC0xaDVhLjUuNSAwIDEgMSAwIDFoLTVabTAtM2EuNS41IDAgMCAxIDAtMWg1YS41LjUgMCAxIDEgMCAxaC01Wm0xIDhhLjUuNSAwIDEgMSAwLTFIMTRWNi41YS41LjUgMCAxIDEgMSAwVjE1YTEgMSAwIDAgMS0xIDFINS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG9jdW1lbnRzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRvdCA9IGZ1bmN0aW9uIEV1aUljb25Eb3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJjaXJjbGVcIiwge1xuICAgIGN4OiA4LFxuICAgIGN5OiA4LFxuICAgIHI6IDRcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRG90SW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uRG90SW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAuNWM0LjEzNiAwIDcuNSAzLjM2NCA3LjUgNy41cy0zLjM2NCA3LjUtNy41IDcuNVMuNSAxMi4xMzYuNSA4IDMuODY0LjUgOCAuNVptMCAuODgyYTYuNjE4IDYuNjE4IDAgMSAwIDAgMTMuMjM2QTYuNjE4IDYuNjE4IDAgMCAwIDggMS4zODJaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSA4YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvdEluQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRvdWJsZUFycm93TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25Eb3VibGVBcnJvd0xlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC4xMzUgMTQuMDQzYS43NS43NSAwIDAgMCAuMDI1LTEuMDZsLTQuNTkxLTQuODFhLjI1LjI1IDAgMCAxIDAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMSAwLTEuMDg0LTEuMDM1bC00LjU5MSA0LjgxYTEuNzUgMS43NSAwIDAgMCAwIDIuNDE2bDQuNTkgNC44MWMuMjg3LjMuNzYxLjMxIDEuMDYxLjAyNFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQuMTM1IDE0LjA0M2EuNzUuNzUgMCAwIDAgLjAyNS0xLjA2bC00LjU5MS00LjgxYS4yNS4yNSAwIDAgMSAwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDEgMC0xLjA4NC0xLjAzNWwtNC41OTEgNC44MWExLjc1IDEuNzUgMCAwIDAgMCAyLjQxNmw0LjU5IDQuODFjLjI4Ny4zLjc2MS4zMSAxLjA2MS4wMjRaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG91YmxlQXJyb3dMZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkRvdWJsZUFycm93UmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRG91YmxlQXJyb3dSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjIzMiAxNC4wNDNhLjc1Ljc1IDAgMCAxLS4wMjUtMS4wNmw0LjU5MS00LjgxYS4yNS4yNSAwIDAgMCAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwIDEgMS4wODUtMS4wMzVsNC41OSA0LjgxYTEuNzUgMS43NSAwIDAgMSAwIDIuNDE2bC00LjU5IDQuODFhLjc1Ljc1IDAgMCAxLTEuMDYuMDI0WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjIzMiAxNC4wNDNhLjc1Ljc1IDAgMCAxLS4wMjUtMS4wNmw0LjU5MS00LjgxYS4yNS4yNSAwIDAgMCAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwIDEgMS4wODUtMS4wMzVsNC41OSA0LjgxYTEuNzUgMS43NSAwIDAgMSAwIDIuNDE2bC00LjU5IDQuODFhLjc1Ljc1IDAgMCAxLTEuMDYuMDI0WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvdWJsZUFycm93UmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRG93bmxvYWQgPSBmdW5jdGlvbiBFdWlJY29uRG93bmxvYWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm05IDkuMTE0IDEuODUtMS45NDNhLjUyLjUyIDAgMCAxIC43NyAwYy4yMTQuMjI4LjIxNC42IDAgLjgyOWwtMS45NSAyLjA1YTEuNTUyIDEuNTUyIDAgMCAxLTIuMzEgMEw1LjQxIDhhLjYxNy42MTcgMCAwIDEgMC0uODI5LjUyLjUyIDAgMCAxIC43NyAwTDggOS4wODJWLjU1NkM4IC4yNDkgOC4yMjQgMCA4LjUgMHMuNS4yNDkuNS41NTZ2OC41NTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAxMy4wMDZWMTBoLTF2My4wMDZhLjk5NS45OTUgMCAwIDEtLjk5NC45OTRIMy4wMWEuOTk1Ljk5NSAwIDAgMS0uOTk0LS45OTRWMTBoLTF2My4wMDZjMCAxLjEuODkyIDEuOTk0IDEuOTk0IDEuOTk0aDEwLjk5NmMxLjEgMCAxLjk5NC0uODkzIDEuOTk0LTEuOTk0elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG93bmxvYWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDJoMmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yWk0xLjUgMWEuNS41IDAgMCAxIC41LjV2MTNhLjUuNSAwIDEgMS0xIDB2LTEzYS41LjUgMCAwIDEgLjUtLjVabTEzIDBhLjUuNSAwIDAgMSAuNS41djEzYS41LjUgMCAxIDEtMSAwdi0xM2EuNS41IDAgMCAxIC41LS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNWg4YTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY3YTIgMiAwIDAgMSAyLTJaTTEuNSAxaDEzYS41LjUgMCAxIDEgMCAxaC0xM2EuNS41IDAgMCAxIDAtMVptMCAxM2gxM2EuNS41IDAgMSAxIDAgMWgtMTNhLjUuNSAwIDEgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JEaXN0cmlidXRlVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduQm90dG9tID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMWgyYTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlYzYTIgMiAwIDAgMSAyLTJaTTEuNSAxNGgxM2EuNS41IDAgMSAxIDAgMWgtMTNhLjUuNSAwIDEgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25Cb3R0b207IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkNlbnRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNEg3VjEuNWEuNS41IDAgMCAxIDEgMFY0Wm0wIDh2Mi41YS41LjUgMCAxIDEtMSAwVjEyaDFaTTMgNWg5YTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlY3YTIgMiAwIDAgMSAyLTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25DZW50ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25MZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA1aDhhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMlpNMS41IDFhLjUuNSAwIDAgMSAuNS41djEzYS41LjUgMCAxIDEtMSAwdi0xM2EuNS41IDAgMCAxIC41LS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25NaWRkbGUgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA3djFIMS41YS41LjUgMCAwIDEgMC0xSDRabTggMGgyLjVhLjUuNSAwIDEgMSAwIDFIMTJWN1pNNyAxaDJhMiAyIDAgMCAxIDIgMnY5YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjNhMiAyIDAgMCAxIDItMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbk1pZGRsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNWg4YTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlY3YTIgMiAwIDAgMSAyLTJabTExLjUtNGEuNS41IDAgMCAxIC41LjV2MTNhLjUuNSAwIDEgMS0xIDB2LTEzYS41LjUgMCAwIDEgLjUtLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25Ub3AgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRlbUFsaWduVG9wKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAzaDJhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMlpNMS41IDFoMTNhLjUuNSAwIDEgMSAwIDFoLTEzYS41LjUgMCAwIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduVG9wOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDhoNWExIDEgMCAwIDEgMSAxdjVIM2ExIDEgMCAwIDEtMS0xVjhabTEtN2gxMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJIM2EyIDIgMCAwIDEtMi0yVjNhMiAyIDAgMCAxIDItMlptMCAxYTEgMSAwIDAgMC0xIDF2MTBhMSAxIDAgMCAwIDEgMWgxMGExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMUgzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgOGg1djVhMSAxIDAgMCAxLTEgMUg4VjlhMSAxIDAgMCAxIDEtMVpNMyAxaDEwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWM2EyIDIgMCAwIDEgMi0yWm0wIDFhMSAxIDAgMCAwLTEgMXYxMGExIDEgMCAwIDAgMSAxaDEwYTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xSDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDJoNXY1YTEgMSAwIDAgMS0xIDFIMlYzYTEgMSAwIDAgMSAxLTFabTAtMWgxMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJIM2EyIDIgMCAwIDEtMi0yVjNhMiAyIDAgMCAxIDItMlptMCAxYTEgMSAwIDAgMC0xIDF2MTBhMSAxIDAgMCAwIDEgMWgxMGExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMUgzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BMZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMmg1YTEgMSAwIDAgMSAxIDF2NUg5YTEgMSAwIDAgMS0xLTFWMlpNMyAxaDEwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWM2EyIDIgMCAwIDEgMi0yWm0wIDFhMSAxIDAgMCAwLTEgMXYxMGExIDEgMCAwIDAgMSAxaDEwYTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xSDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JQb3NpdGlvblRvcFJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA0VjNoNnYxSDVaTTMgN1Y2aDEwdjFIM1ptMiAzVjloNnYxSDVabS0yIDN2LTFoMTB2MUgzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQWxpZ25DZW50ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yQWxpZ25MZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckFsaWduTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgNFYzaDZ2MUgyWm0wIDNWNmgxMHYxSDJabTAgM1Y5aDZ2MUgyWm0wIDN2LTFoMTB2MUgyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQWxpZ25MZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckFsaWduUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQWxpZ25SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNFYzaDZ2MUg4Wk00IDdWNmgxMHYxSDRabTQgM1Y5aDZ2MUg4Wm0tNCAzdi0xaDEwdjFINFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckFsaWduUmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yQm9sZCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JCb2xkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xOTMgMTNINFYzaDQuMTUxYzEuODE2IDAgMi45ODcuOTc3IDIuOTg3IDIuNDk1IDAgMS4wNzQtLjc5NyAyLjAxLTEuODIzIDIuMTc2di4wNTVjMS4zNTkuMTMyIDIuMzA4IDEuMTEgMi4zMDggMi40MzMgMCAxLjc2LTEuMjk2IDIuODQxLTMuNDMgMi44NDFaTTUuNzg4IDQuMzkzdjIuODJoMS42MzVjMS4yNDggMCAxLjk0OC0uNTI2IDEuOTQ4LTEuNDU1IDAtLjg3My0uNjAzLTEuMzY1LTEuNjctMS4zNjVINS43ODhabTAgNy4yMTRoMS45OTZjMS4zMTYgMCAyLjAxNi0uNTQ3IDIuMDE2LTEuNTczIDAtMS4wMTktLjcyLTEuNTUyLTIuMDkyLTEuNTUyaC0xLjkydjMuMTI1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQm9sZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JDaGVja2xpc3QgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ2hlY2tsaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41OTcgM2EuNDExLjQxMSAwIDAgMC0uMjk5LjEzMmwtMS44NSAxLjk5My0uNzU2LS43YS40MTIuNDEyIDAgMCAwLS4yOC0uMTI0LjQyLjQyIDAgMCAwLS4yOTIuMDk4LjMzMy4zMzMgMCAwIDAtLjEyLjI1Ny4zMzUuMzM1IDAgMCAwIC4xMjcuMjU0bDEuMDY0Ljk4MkEuNDE4LjQxOCAwIDAgMCAyLjQ4OCA2YS40MTEuNDExIDAgMCAwIC4yODgtLjEyNkw0LjkwNCAzLjU4YS4zMjguMzI4IDAgMCAwIC4wOTUtLjI1LjMzNy4zMzcgMCAwIDAtLjEyNi0uMjM4QS40MjEuNDIxIDAgMCAwIDQuNTk3IDN6bS0uMjk5IDQuMTMyQS40MTEuNDExIDAgMCAxIDQuNTk3IDdhLjQyMS40MjEgMCAwIDEgLjI3Ni4wOTNjLjA3Ni4wNjIuMTIuMTQ3LjEyNi4yMzhhLjMyOC4zMjggMCAwIDEtLjA5NS4yNUwyLjc3NiA5Ljg3NGEuNDExLjQxMSAwIDAgMS0uMjg4LjEyNi40MTguNDE4IDAgMCAxLS4yOTctLjEwOEwxLjEyNyA4LjkxQS4zMzUuMzM1IDAgMCAxIDEgOC42NTZhLjMzMy4zMzMgMCAwIDEgLjEyLS4yNTcuNDIuNDIgMCAwIDEgLjI5Mi0uMDk4Yy4xMDguMDA1LjIxLjA1LjI4LjEyM2wuNzU3LjcwMSAxLjg0OS0xLjk5M3pNNC41OTcgMTFhLjQxMS40MTEgMCAwIDAtLjI5OS4xMzJsLTEuODUgMS45OTMtLjc1Ni0uN2EuNDEyLjQxMiAwIDAgMC0uMjgtLjEyNC40MjEuNDIxIDAgMCAwLS4yOTIuMDk4LjMzMy4zMzMgMCAwIDAtLjEyLjI1Ny4zMzUuMzM1IDAgMCAwIC4xMjcuMjU0bDEuMDY0Ljk4MmEuNDE4LjQxOCAwIDAgMCAuMjk3LjEwOC40MTEuNDExIDAgMCAwIC4yODgtLjEyNmwyLjEyOC0yLjI5M2EuMzI4LjMyOCAwIDAgMCAuMDk1LS4yNS4zMzcuMzM3IDAgMCAwLS4xMjYtLjIzOC40MjEuNDIxIDAgMCAwLS4yNzYtLjA5M3pNNi41IDRhLjUuNSAwIDAgMCAwIDFoN2EuNS41IDAgMCAwIDAtMWgtN3pNNiA4LjVhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03YS41LjUgMCAwIDEtLjUtLjV6bS41IDMuNWEuNS41IDAgMCAwIDAgMWg3YS41LjUgMCAwIDAgMC0xaC03elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQ2hlY2tsaXN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckNvZGVCbG9jayA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JDb2RlQmxvY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjQxNCA4LjAzNiA0Ljg5IDEwLjUxYS41LjUgMCAwIDEtLjcwNy43MDhMMS4zNTQgOC4zODlhLjUuNSAwIDAgMSAwLS43MDdsMi44MjgtMi44MjhhLjUuNSAwIDEgMSAuNzA3LjcwN0wyLjQxNCA4LjAzNlptOC43NjggMi40NzQgMi40NzUtMi40NzQtMi40NzUtMi40NzVhLjUuNSAwIDAgMSAuNzA3LS43MDdsMi44MjkgMi44MjhhLjUuNSAwIDAgMSAwIC43MDdsLTIuODI5IDIuODI5YS41LjUgMCAxIDEtLjcwNy0uNzA4Wk04LjU1OSAyLjUwNmEuNS41IDAgMCAxIC45ODEuMTlMNy40NDEgMTMuNDk0YS41LjUgMCAwIDEtLjk4MS0uMTlMOC41NTkgMi41MDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JDb2RlQmxvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yQ29tbWVudCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JDb21tZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4xMTEgMTBIMTJhMSAxIDAgMCAwIDEtMVY1YTEgMSAwIDAgMC0xLTFINGExIDEgMCAwIDAtMSAxdjRhMSAxIDAgMCAwIDEgMWgxdjEuMjk3TDYuMTExIDEwWm0uNDYgMUw0IDE0di0zYTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDhhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJINi41NzFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JDb21tZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvckhlYWRpbmcgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySGVhZGluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgMTFhMSAxIDAgMCAxIDAgMkg0YTEgMSAwIDAgMSAwLTJWNWExIDEgMCAxIDEgMC0yaDJhMSAxIDAgMSAxIDAgMnYyaDRWNWExIDEgMCAxIDEgMC0yaDJhMSAxIDAgMCAxIDAgMnY2YTEgMSAwIDAgMSAwIDJoLTJhMSAxIDAgMCAxIDAtMlY5SDZ2MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckhlYWRpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9ySXRhbGljID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0YWxpYyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMTYgMTJIOS41YS41LjUgMCAxIDEgMCAxaC00YS41LjUgMCAxIDEgMC0xaDEuNjM5bDEuNy04SDcuNWEuNS41IDAgMCAxIDAtMWg0YS41LjUgMCAxIDEgMCAxSDkuODYxbC0xLjcgOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0YWxpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JMaW5rID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1NiA1LjA1MWEuNDUuNDUgMCAwIDAgLjYzNy42MzdsMS41MDMtMS41MDRjLjQzMi0uNDMxIDEuMjc4LS4zODIgMS44OS4yMy42MTIuNjEyLjY2MiAxLjQ1OC4yMyAxLjg5TDkuNTE5IDguNmMtLjQzMi40MzItMS4yNzguMzgzLTEuODktLjIzYS40NS40NSAwIDEgMC0uNjM2LjYzN2MuOTE0LjkxNCAyLjMzIDEuMDYzIDMuMTYyLjIzbDIuMjk3LTIuMjk3Yy44MzMtLjgzMy42ODQtMi4yNDgtLjIzLTMuMTYyLS45MTQtLjkxNS0yLjMzLTEuMDYzLTMuMTYyLS4yM0w3LjU1NiA1LjA1MXptLjg4OCA1LjI2MWEuNDUuNDUgMCAwIDAtLjYzNyAwbC0xLjUwMyAxLjUwNGMtLjQzMi40MzEtMS4yNzguMzgyLTEuODktLjIzLS42MTItLjYxMi0uNjYxLTEuNDU4LS4yMy0xLjg5TDYuNDgxIDcuNGMuNDMyLS40MzIgMS4yNzgtLjM4MyAxLjg5LjIzYS40NS40NSAwIDAgMCAuNjM2LS42MzdjLS45MTQtLjkxNC0yLjMzLTEuMDYzLTMuMTYyLS4yM0wzLjU0OCA5LjA2Yy0uODMzLjgzMy0uNjg1IDIuMjQ4LjIzIDMuMTYyLjkxNC45MTUgMi4zMyAxLjA2MyAzLjE2Mi4yM2wxLjUwNC0xLjUwM2EuNDUuNDUgMCAwIDAgMC0uNjM3ek03Ljg3NyA1Ljc2YS4zOS4zOSAwIDAgMCAuMjc0LS4xMTRsMS41MDMtMS41MDQtMS41MDMgMS41MDRhLjM5LjM5IDAgMCAxLS4yNzQuMTE0em0uOTEyIDMuMTgzYy0uNC4wMDMtLjg0My0uMTcyLTEuMjAyLS41My4zNTkuMzU4LjgwMi41MzMgMS4yMDIuNTN6TTEyLjE4IDMuODJjLS41MDItLjUwMy0xLjE1NS0uNzY2LTEuNzczLS43Ni42MTgtLjAwNiAxLjI3LjI1NyAxLjc3My43Ni44OTguODk4IDEuMDM0IDIuMjc1LjIzIDMuMDc4bC0yLjI5NyAyLjI5NyAyLjI5Ny0yLjI5N2MuODA0LS44MDMuNjY4LTIuMTgtLjIzLTMuMDc4em0tNC4wNjIgNi40MmEuMzkuMzkgMCAwIDEgLjI4NC42NjdMNi44OTggMTIuNDFsMS41MDQtMS41MDNhLjM5LjM5IDAgMCAwLS4yODQtLjY2N3ptLS45MjYtMy45NjVjLjYxOC0uMDA2IDEuMjcuMjU3IDEuNzczLjc2LS41MDItLjUwMy0xLjE1NS0uNzY2LTEuNzczLS43NnpNNS40MTQgMTIuMTVhMS43NjIgMS43NjIgMCAwIDEtMS4wNDItLjUyMmMtLjYyNi0uNjI3LS42OTItMS41MTEtLjIzLTEuOTc0TDYuNDQgNy4zNTggNC4xNDIgOS42NTRjLS40NjIuNDYzLS4zOTYgMS4zNDguMjMgMS45NzQuMzExLjMxMS42ODcuNDg0IDEuMDQyLjUyMnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yT3JkZXJlZExpc3QgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yT3JkZXJlZExpc3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDh2MWgxdjFIMVY5aDFWOEgxVjdoM3YxSDNabTEgNHYySDF2LTFoMXYtMUgxdi0xaDN2MVpNMyA1aDF2MUgxVjVoMVY0SDFWM2gydjJabTIuNS0xaDhhLjUuNSAwIDEgMSAwIDFoLThhLjUuNSAwIDAgMSAwLTFabTAgNGg4YS41LjUgMCAxIDEgMCAxaC04YS41LjUgMCAwIDEgMC0xWm0wIDRoOGEuNS41IDAgMSAxIDAgMWgtOGEuNS41IDAgMSAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvclJlZG8gPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUmVkbyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDZINUMzLjA1NyA2IDIgNy4wNTcgMiA5czEuMDU3IDMgMyAzaDEuNXYtMUg1Yy0xLjM5IDAtMi0uNjEtMi0yIDAtMS4zOS42MS0yIDItMmg1djNsMy41LTMuNUwxMCAzdjNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JSZWRvOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvclN0cmlrZSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JTdHJpa2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4wMjMgMTBoMS4yNzRjLjAwNi4wOC4wMS4xNjQuMDEuMjVhMi41NTcgMi41NTcgMCAwIDEtLjg4MyAxLjk0OWMtLjI4NC4yNS0uNjI3LjQ0Ni0xLjAzLjU4OEE0LjA4NyA0LjA4NyAwIDAgMSA4LjAyOCAxM2E0LjYxNiA0LjYxNiAwIDAgMS0zLjM4Mi0xLjQyNmMtLjE5My0uMjU5LS4xOTMtLjUgMC0uNzI0LjE5My0uMjIzLjQzOC0uMjY2LjczNS0uMTMuMzQzLjM2My43NDguNjU1IDEuMjEzLjg3Ni40NjYuMjIuOTQ5LjMzIDEuNDQ5LjMzLjYzNyAwIDEuMTMyLS4xNDQgMS40ODUtLjQzMy4zNTMtLjI5LjUzLS42Ny41My0xLjE0YTEuNzIgMS43MiAwIDAgMC0uMDM0LS4zNTNaTTUuNTg2IDdhMi40OSAyLjQ5IDAgMCAxLS4yOTQtLjUwNyAyLjMxNiAyLjMxNiAwIDAgMS0uMTc3LS45MzRjMC0uMzYzLjA3Ni0uNzAxLjIyOC0xLjAxNS4xNTItLjMxNC4zNjMtLjU4Ni42MzMtLjgxNi4yNy0uMjMuNTg4LS40MS45NTUtLjUzN0EzLjY4MyAzLjY4MyAwIDAgMSA4LjE0NSAzYy41NzggMCAxLjExMi4xMSAxLjYwMy4zMy40OS4yMjEuOTA3LjUwOCAxLjI1Ljg2MS4xNi4yODIuMTYuNTEyIDAgLjY5Mi0uMTYuMTgtLjM4LjIxNC0uNjYyLjEwMmEzLjQzOCAzLjQzOCAwIDAgMC0uOTc4LS42NjkgMi45MTQgMi45MTQgMCAwIDAtMS4yMTMtLjI0MmMtLjU0IDAtLjk3My4xMjUtMS4zMDIuMzc1LS4zMjguMjUtLjQ5Mi41OTUtLjQ5MiAxLjAzNiAwIC4yMzYuMDQ2LjQzNC4xNC41OTYuMDkyLjE2Mi4yMTcuMzA0LjM3NC40MjYuMTU3LjEyMy4zMjkuMjMuNTE1LjMyNC4xMTkuMDYuMjQuMTE2LjM2Mi4xNjlINS41ODZaTTIuNSA4aDExYS41LjUgMCAxIDEgMCAxaC0xMWEuNS41IDAgMCAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclN0cmlrZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FZGl0b3JUYWJsZSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JUYWJsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDN2MkgyVjN2MTBoMTJWM1pNMiAyaDEyYy41NTIgMCAxIC40MTMgMSAuOTIzdjEwLjE1NGMwIC41MS0uNDQ4LjkyMy0xIC45MjNIMmMtLjU1MiAwLTEtLjQxMy0xLS45MjNWMi45MjNDMSAyLjQxMyAxLjQ0OCAyIDIgMlptMCA1aDEydjFIMlY3Wm0wIDNoMTJ2MUgydi0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVGFibGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yVW5kZXJsaW5lID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclVuZGVybGluZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMy41MzZWNy44YzAgMS42MjggMS4yMjQgMi42IDMgMi42IDEuNzgzIDAgMy0uOTcyIDMtMi42VjMuNTM2YzAtLjM1Ny4xNjctLjUzNi41LS41MzYuMzMzIDAgLjUuMTc5LjUuNTM2djQuMzE4YzAgMi4wOTMtMS42NjUgMy41NDYtNCAzLjU0NlM0IDkuODkzIDQgNy44VjMuNTM2QzQgMy4xNzkgNC4xNjcgMyA0LjUgM2MuMzMzIDAgLjUuMTc5LjUuNTM2Wk0yLjUgMTNoMTFhLjUuNSAwIDEgMSAwIDFoLTExYS41LjUgMCAxIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVW5kZXJsaW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVkaXRvclVuZG8gPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yVW5kbyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuNSA2aDVjMS45NDMgMCAzIDEuMDU3IDMgM3MtMS4wNTcgMy0zIDNIOXYtMWgxLjVjMS4zOSAwIDItLjYxIDItMiAwLTEuMzktLjYxLTItMi0yaC01djNMMiA2LjUgNS41IDN2M1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclVuZG87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRWRpdG9yVW5vcmRlcmVkTGlzdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JVbm9yZGVyZWRMaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS41IDRoOGEuNS41IDAgMSAxIDAgMWgtOGEuNS41IDAgMCAxIDAtMVptMCA0aDhhLjUuNSAwIDEgMSAwIDFoLThhLjUuNSAwIDAgMSAwLTFabTAgNGg4YS41LjUgMCAxIDEgMCAxaC04YS41LjUgMCAxIDEgMC0xWm0tMy03YS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm0wIDRhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFabTAgNGEuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclVub3JkZXJlZExpc3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRW1haWwgPSBmdW5jdGlvbiBFdWlJY29uRW1haWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQuOTUgMy42ODQgOC42MzcgOC45MTJhMSAxIDAgMCAxLTEuMjc2IDBMMS4wNTEgMy42ODRBLjk5OS45OTkgMCAwIDAgMSA0djhhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xVjRhLjk5OS45OTkgMCAwIDAtLjA1LS4zMTZaTTIgMmgxMmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yWm0tLjIxIDEgNS41NzYgNC42MDNhMSAxIDAgMCAwIDEuMjcuMDAzTDE0LjI2OCAzSDEuNzlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FbWFpbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FbXB0eSA9IGZ1bmN0aW9uIEV1aUljb25FbXB0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRW1wdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRW5kcG9pbnQgPSBmdW5jdGlvbiBFdWlJY29uRW5kcG9pbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjQwNiAxMy40NTRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuODYgNi4wOWEyLjU0NSAyLjU0NSAwIDEgMSAyLjQ5Ny0zLjA0NWguMzY4YTIuNzI3IDIuNzI3IDAgMSAxIDAgNS40NTVINi41NDNhMS43MjcgMS43MjcgMCAxIDAgMCAzLjQ1NGguMzY3YTIuNTQ2IDIuNTQ2IDAgMSAxIDAgMWgtLjM2N2EyLjcyNyAyLjcyNyAwIDEgMSAwLTUuNDU0aDMuMTgyYTEuNzI3IDEuNzI3IDAgMSAwIDAtMy40NTVoLS4zNjhhMi41NDYgMi41NDYgMCAwIDEtMi40OTYgMi4wNDZMNi44NiA2LjA5Wm0wLTFhMS41NDUgMS41NDUgMCAxIDEgMC0zLjA5IDEuNTQ1IDEuNTQ1IDAgMCAxIDAgMy4wOVpNOS40MDcgMTRhMS41NDUgMS41NDUgMCAxIDEgMC0zLjA5IDEuNTQ1IDEuNTQ1IDAgMCAxIDAgMy4wOVpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FbmRwb2ludDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FcWwgPSBmdW5jdGlvbiBFdWlJY29uRXFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuODYyIDE0LjE4di4wMDFhLjQ4Mi40ODIgMCAwIDEgLjEuNTIxLjUuNSAwIDAgMS0uNDQ3LjI5OWgtMy4xNDljLS4wNyAwLS4xMzYgMC0uMi0uMDAzYS42NjQuNjY0IDAgMCAxLS40MTQtLjE0Yy0uMzUtLjMxLS42ODQtLjYzNy0xLjAwMS0uOTgxbC0xLjc3Mi0xLjczOGE1Ljk0MSA1Ljk0MSAwIDAgMS0zLjgwMi4xNGwtLjA0NS0uMDEyYTUuODkgNS44OSAwIDAgMS0yLjY4Mi0xLjcxMkE1LjcxNSA1LjcxNSAwIDAgMSAxLjA4IDcuNzJhNS42NiA1LjY2IDAgMCAxIC4zNDgtMy4xMThBNS43OCA1Ljc4IDAgMCAxIDMuMzkgMi4xMjRhNS45NzkgNS45NzkgMCAwIDEgNi4xMzYtLjUwNSA1LjgzNiA1LjgzNiAwIDAgMSAyLjM1NiAyLjEyMyA1LjY3IDUuNjcgMCAwIDEgLjg3MyAzLjAxN2wuMDAxLjAwM2MwIC4xMjgtLjA1MS4yNS0uMTQzLjM0YS40OTUuNDk1IDAgMCAxLS42OTQgMCAuNDc2LjQ3NiAwIDAgMS0uMTQzLS4zNGMwLS45NS0uMjg4LTEuODc4LS44MjYtMi42NjhhNC44OCA0Ljg4IDAgMCAwLTIuMTk4LTEuNzY5IDQuOTkgNC45OSAwIDAgMC0yLjgzLS4yNzMgNC45MyA0LjkzIDAgMCAwLTIuNTA5IDEuMzE0IDQuNzc0IDQuNzc0IDAgMCAwLTEuMzQgMi40NkE0LjcxNSA0LjcxNSAwIDAgMCAyLjM1MiA4LjZhNC44MiA0LjgyIDAgMCAwIDEuODA0IDIuMTU1Yy44MDUuNTI4IDEuNzUyLjgxIDIuNzIxLjgxYTQuODk5IDQuODk5IDAgMCAwIDEuMjk2LS4xOTRsLjAzMi0uMDA5LjcxNy0uMjExYS41MDYuNTA2IDAgMCAxIC40ODMuMTExbDEuMTEgMS4wMjYgMS43ODggMS43NTJoMi4wM2wtMy42NTctMy41ODNhLjQ3NS40NzUgMCAwIDEgLjAxNC0uNjY2LjQ5NS40OTUgMCAwIDEgLjY3OS0uMDEzbDQuNDkzIDQuNDAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4wOTcgMy40NjggOS42NzkgNC45M2EuNDMzLjQzMyAwIDAgMSAuMjE4LjM3djIuOTI0YS40MjIuNDIyIDAgMCAxLS4yMTguMzdsLTIuNTgyIDEuNDYxYS40MzguNDM4IDAgMCAxLS40MzcgMEw0LjA3NyA4LjU5NGEuNDMzLjQzMyAwIDAgMS0uMjE4LS4zN1Y1LjNhLjQyMi40MjIgMCAwIDEgLjIxOC0uMzdMNi42NiAzLjQ2N2EuNDQ2LjQ0NiAwIDAgMSAuNDM3IDB6bTEuODQ1IDQuMjdWNS43ODRhLjMyOC4zMjggMCAwIDAtLjE3LS4yODdMNy4wNDcgNC41MmEuMzQyLjM0MiAwIDAgMC0uMzM4IDBsLTEuNzI2Ljk3N2EuMzM2LjMzNiAwIDAgMC0uMTY4LjI4N3YxLjk1M2EuMzI2LjMyNiAwIDAgMCAuMTcuMjg3bDEuNzI0Ljk3N2EuMzQyLjM0MiAwIDAgMCAuMzM4IDBsMS43MjYtLjk3OGEuMzM0LjMzNCAwIDAgMCAuMTY5LS4yODd6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FcWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRXJhc2VyID0gZnVuY3Rpb24gRXVpSWNvbkVyYXNlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTIuNjQ4IDkuOTM3IDcuMjktNy4yODhhMi4yMSAyLjIxIDAgMCAxIDMuMTI0IDBsMi4yOSAyLjI4OGEyLjIxIDIuMjEgMCAwIDEgMCAzLjEyNkwxMC40MTMgMTNIMTIuNWEuNS41IDAgMCAxIDAgMUg0LjUwMWEyLjIxIDIuMjEgMCAwIDEtMS41NjMtLjY0N2wuNzA3LS43MDdjLjIyNy4yMjYuNTM1LjM1NC44NTYuMzU0aDQuMDA1YTEuMjEgMS4yMSAwIDAgMCAuODQ4LS4zNTRsMS4yOTItMS4yOTMtNC00LTMuMjkgMy4yOTFhMS4yMSAxLjIxIDAgMCAwIDAgMS43MTJsLjI5LjI5LS43MDguNzA3LS4yOS0uMjlhMi4yMSAyLjIxIDAgMCAxIDAtMy4xMjZ6TTggNmg2Ljg5YTEuMjA4IDEuMjA4IDAgMCAwLS4yNDYtLjM1NkwxNCA1SDlMOCA2em0yLTJoM2wtLjY0NS0uNjQ0YTEuMjEgMS4yMSAwIDAgMC0xLjcxIDBMMTAgNHptNC44OSAzSDcuNzA4bDEgMUgxNGwuNjQ0LS42NDRBMS4yMiAxLjIyIDAgMCAwIDE0Ljg5MSA3ek05LjcwOCA5bDEuNjQ2IDEuNjQ2TDEzIDlIOS43MDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAxMS41YS41LjUgMCAxIDEtMSAwIC41LjUgMCAwIDEgMSAwem0xLjUtLjVhLjUuNSAwIDEgMCAwLTEgLjUuNSAwIDAgMCAwIDF6bS0xIDJhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMWgtMXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVyYXNlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25FcnJvciA9IGZ1bmN0aW9uIEV1aUljb25FcnJvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuODU0IDUuMTQ2YS41LjUgMCAxIDAtLjcwOC43MDhMNi43OTMgOC41bC0yLjY0NyAyLjY0NmEuNS41IDAgMCAwIC43MDguNzA4TDcuNSA5LjIwN2wyLjY0NiAyLjY0N2EuNS41IDAgMCAwIC43MDgtLjcwOEw4LjIwNyA4LjVsMi42NDctMi42NDZhLjUuNSAwIDAgMC0uNzA4LS43MDhMNy41IDcuNzkzIDQuODU0IDUuMTQ2WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUgMWExIDEgMCAwIDAtLjcwNy4yOTNsLTQgNEExIDEgMCAwIDAgMCA2djVhMSAxIDAgMCAwIC4yOTMuNzA3bDQgNEExIDEgMCAwIDAgNSAxNmg1YTEgMSAwIDAgMCAuNzA3LS4yOTNsNC00QTEgMSAwIDAgMCAxNSAxMVY2YTEgMSAwIDAgMC0uMjkzLS43MDdsLTQtNEExIDEgMCAwIDAgMTAgMUg1Wm01IDFINUwxIDZ2NWw0IDRoNWw0LTRWNmwtNC00WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXJyb3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRXJyb3JGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uRXJyb3JGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAgMWExIDEgMCAwIDEgLjcwNy4yOTNsNCA0QTEgMSAwIDAgMSAxNSA2djVhMSAxIDAgMCAxLS4yOTMuNzA3bC00IDRBMSAxIDAgMCAxIDEwIDE2SDVhMSAxIDAgMCAxLS43MDctLjI5M2wtNC00QTEgMSAwIDAgMSAwIDExVjZhMSAxIDAgMCAxIC4yOTMtLjcwN2w0LTRBMSAxIDAgMCAxIDUgMWg1Wk00LjE0NiA1LjE0NmEuNS41IDAgMCAxIC43MDggMEw3LjUgNy43OTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjIwNyA4LjVsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw3LjUgOS4yMDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDYuNzkzIDguNSA0LjE0NiA1Ljg1NGEuNS41IDAgMCAxIDAtLjcwOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVycm9yRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkVzcWxWaXMgPSBmdW5jdGlvbiBFdWlJY29uRXNxbFZpcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMi41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41Wk0yLjUgNGEuNS41IDAgMCAwIDAgMWgyYS41LjUgMCAwIDAgMC0xaC0yWk0yIDYuNWEuNS41IDAgMCAxIC41LS41aDJhLjUuNSAwIDAgMSAwIDFoLTJhLjUuNSAwIDAgMS0uNS0uNVpNMi41IDhhLjUuNSAwIDAgMCAwIDFoMmEuNS41IDAgMCAwIDAtMWgtMlpNMiAxMC41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIC41LjV2MmEuNS41IDAgMCAxLS41LjVoLTJhLjUuNSAwIDAgMS0uNS0uNXYtMlpNNi41IDJhLjUuNSAwIDAgMCAwIDFoMmEuNS41IDAgMCAwIDAtMWgtMlpNNiA0LjVhLjUuNSAwIDAgMSAuNS0uNWgyYS41LjUgMCAwIDEgMCAxaC0yYS41LjUgMCAwIDEtLjUtLjVaTTYuNSA2YS41LjUgMCAwIDAtLjUuNXY2YS41LjUgMCAwIDAgLjUuNWgyYS41LjUgMCAwIDAgLjUtLjV2LTZhLjUuNSAwIDAgMC0uNS0uNWgtMlpNMTAgMi41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41Wm0uNSAxLjVhLjUuNSAwIDAgMCAwIDFoMmEuNS41IDAgMCAwIDAtMWgtMlpNMTAgNi41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41Wm0uNSAxLjVhLjUuNSAwIDAgMC0uNS41djRhLjUuNSAwIDAgMCAuNS41aDJhLjUuNSAwIDAgMCAuNS0uNXYtNGEuNS41IDAgMCAwLS41LS41aC0yWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAwaDExYTIgMiAwIDAgMSAyIDJ2MTFhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yWm0wIDFhMSAxIDAgMCAwLTEgMXYxMWExIDEgMCAwIDAgMSAxaDExYTEgMSAwIDAgMCAxLTFWMmExIDEgMCAwIDAtMS0xSDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Fc3FsVmlzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkV4aXQgPSBmdW5jdGlvbiBFdWlJY29uRXhpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi41MzUgMTIuNDkzYS40Ny40NyAwIDAgMSAuNDY4LjQ2OHYyLjU2NGEuNDczLjQ3MyAwIDAgMS0uNDY2LjQ3NUgzVjBIMTIuNTk1YS40NS40NSAwIDAgMSAuMzk4LjQ2M3YyLjU2NWEuNDY5LjQ2OSAwIDAgMS0uNDY4LjQ2N2gtLjA2NWEuNDY4LjQ2OCAwIDAgMS0uNDY3LS40NjdWMUg0djE0aDguMDFsLS4wMDctMi4wNGMwLS4yNTcuMjEtLjQ2Ny40NjctLjQ2N2guMDY1Wm0tMS4wOTYtNy41OSAyLjEyMSAyLjEyMmExLjUgMS41IDAgMCAxIDAgMi4xMjFsLTIuMTIgMi4xMjJhLjUuNSAwIDEgMS0uNzA4LS43MDhsMi4xMjEtMi4xMmEuNS41IDAgMCAwIDAtLjcwOGwtMi4xMjEtMi4xMjFhLjUuNSAwIDAgMSAuNzA3LS43MDdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FeGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkV4cGFuZCA9IGZ1bmN0aW9uIEV1aUljb25FeHBhbmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJtNC4zNTQgMTIuMzU0IDgtOGEuNS41IDAgMCAwLS43MDgtLjcwOGwtOCA4YS41LjUgMCAwIDAgLjcwOC43MDhaTTEgMTAuNWEuNS41IDAgMSAxIDEgMHYzYS41LjUgMCAwIDAgLjUuNWgzYS41LjUgMCAxIDEgMCAxaC0zQTEuNSAxLjUgMCAwIDEgMSAxMy41di0zWm0xNC01YS41LjUgMCAxIDEtMSAwdi0zYS41LjUgMCAwIDAtLjUtLjVoLTNhLjUuNSAwIDEgMSAwLTFoM0ExLjUgMS41IDAgMCAxIDE1IDIuNXYzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhwYW5kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkV4cGFuZE1pbmkgPSBmdW5jdGlvbiBFdWlJY29uRXhwYW5kTWluaShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02LjcwNyAxMCAxMCA2LjcwN0EuNS41IDAgMCAwIDkuMjkzIDZMNiA5LjI5M2EuNS41IDAgMSAwIC43MDcuNzA3Wk00IDkuNWEuNS41IDAgMCAxIDEgMHYxYS41LjUgMCAwIDAgLjUuNWgxYS41LjUgMCAxIDEgMCAxaC0xQTEuNSAxLjUgMCAwIDEgNCAxMC41di0xWm04LTNhLjUuNSAwIDEgMS0xIDB2LTFhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAxIDAtMWgxQTEuNSAxLjUgMCAwIDEgMTIgNS41djFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FeHBhbmRNaW5pOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkV4cG9ydCA9IGZ1bmN0aW9uIEV1aUljb25FeHBvcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUwNSAxYy40MjItLjAwMy44NDQuMTcgMS4xNjYuNTE2bDEuOTUgMi4wNWMuMjEzLjIyOC4yMTMuNiAwIC44MjhhLjUyLjUyIDAgMCAxLS43NzEgMEw5IDIuNDUxdjcuOTkzYzAgLjMwNy0uMjI0LjU1Ni0uNS41NTZzLS41LS4yNDktLjUtLjU1NnYtNy45NmwtMS44MiAxLjkxYS41Mi41MiAwIDAgMS0uNzcgMCAuNjE3LjYxNyAwIDAgMSAwLS44MjlsMS45NS0yLjA1QTEuNTc1IDEuNTc1IDAgMCAxIDguNSAxaC4wMDVaTTQuMTggN2MtLjQ3MyAwLS44OC4yOTQtLjk3Mi43MDNsLTEuMTg5IDUuMjVhLjc3Ni43NzYgMCAwIDAtLjAxOS4xNzJjMCAuNDgzLjQ0NC44NzUuOTkuODc1SDE0LjAxYy4wNjUgMCAuMTMtLjAwNi4xOTQtLjAxNy41MzctLjA5NS44ODUtLjU1Ni43NzgtMS4wM2wtMS4xOS01LjI1QzEzLjcgNy4yOTQgMTMuMjkzIDcgMTIuODIyIDdINC4xOFpNNiA2djFoNVY2aDEuODI1Yy45NDYgMCAxLjc2LjYwNiAxLjk0NiAxLjQ0N2wxLjE5IDUuNGMuMjE1Ljk3NS0uNDgyIDEuOTIzLTEuNTU2IDIuMTE4YTIuMTggMi4xOCAwIDAgMS0uMzkuMDM1SDIuOTg1QzEuODg4IDE1IDEgMTQuMTk0IDEgMTMuMmMwLS4xMTkuMDEzLS4yMzcuMDM5LS4zNTNsMS4xOS01LjRDMi40MTQgNi42MDYgMy4yMjkgNiA0LjE3NCA2SDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FeHBvcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRXllID0gZnVuY3Rpb24gRXVpSWNvbkV5ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1Ljk4IDcuODczYy4wMTMuMDMuMDIuMDY0LjAyLjA5OHYuMDZhLjI0LjI0IDAgMCAxLS4wMi4wOTdDMTUuOTUyIDguMTg4IDEzLjI5MSAxNCA4IDE0Uy4wNDcgOC4xODguMDIgOC4xMjhBLjI0LjI0IDAgMCAxIDAgOC4wM3YtLjA1OWMwLS4wMzQuMDA3LS4wNjguMDItLjA5OEMuMDQ4IDcuODEzIDIuNzA5IDIgOCAyczcuOTUzIDUuODEzIDcuOTggNS44NzNabS0xLjM3LS40MjRhMTIuMDk3IDEyLjA5NyAwIDAgMC0xLjM4NS0xLjg2MkMxMS43MzkgMy45NTYgOS45OTkgMyA4IDNjLTIgMC0zLjc0Ljk1Ni01LjIyNSAyLjU4N2ExMi4wOTggMTIuMDk4IDAgMCAwLTEuNzAxIDIuNDE0IDEyLjA5NSAxMi4wOTUgMCAwIDAgMS43IDIuNDEzQzQuMjYgMTIuMDQzIDYuMDAyIDEzIDggMTNzMy43NC0uOTU2IDUuMjI1LTIuNTg3QTEyLjA5NyAxMi4wOTcgMCAwIDAgMTQuOTI2IDhjLS4wOC0uMTUtLjE4OS0uMzQzLS4zMTUtLjU1MVpNOCA0Ljc1QTMuMjUzIDMuMjUzIDAgMCAxIDExLjI1IDggMy4yNTQgMy4yNTQgMCAwIDEgOCAxMS4yNSAzLjI1MyAzLjI1MyAwIDAgMSA0Ljc1IDggMy4yNTIgMy4yNTIgMCAwIDEgOCA0Ljc1Wm0wIDFDNi43NiA1Ljc1IDUuNzUgNi43NiA1Ljc1IDhTNi43NiAxMC4yNSA4IDEwLjI1IDEwLjI1IDkuMjQgMTAuMjUgOCA5LjI0IDUuNzUgOCA1Ljc1Wm0wIDEuNWEuNzUuNzUgMCAxIDAgMCAxLjUuNzUuNzUgMCAwIDAgMC0xLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FeWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRXllQ2xvc2VkID0gZnVuY3Rpb24gRXVpSWNvbkV5ZUNsb3NlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTUuMzE4IDEzLjQ3Ljc3Ni0uNzc2QTYuMDQgNi4wNCAwIDAgMCA4IDEzYzEuOTk5IDAgMy43NC0uOTU2IDUuMjI1LTIuNTg3QTEyLjA5NyAxMi4wOTcgMCAwIDAgMTQuOTI2IDhhMTIuMDk3IDEyLjA5NyAwIDAgMC0xLjcwMS0yLjQxM2wtLjAxMS0uMDEyLjcwNy0uNzA4YzEuMzU5IDEuNDc2IDIuMDQ1IDIuOTc2IDIuMDU4IDMuMDA2LjAxNC4wMy4wMjEuMDY0LjAyMS4wOTh2LjA2YS4yNC4yNCAwIDAgMS0uMDIuMDk3QzE1Ljk1MiA4LjE4OCAxMy4yOTEgMTQgOCAxNGE3LjAzIDcuMDMgMCAwIDEtMi42ODItLjUzWk0yLjA0IDExLjA5MkMuNzA3IDkuNjI5LjAzNCA4LjE1OC4wMiA4LjEyOEEuMjQuMjQgMCAwIDEgMCA4LjAzdi0uMDU5YzAtLjAzNC4wMDctLjA2OC4wMi0uMDk4Qy4wNDggNy44MTMgMi43MDkgMiA4IDJjLjk2MiAwIDEuODM3LjE5MiAyLjYyNS41MDdsLS43OC43OEE2LjAzOSA2LjAzOSAwIDAgMCA4IDNjLTIgMC0zLjc0Ljk1Ni01LjIyNSAyLjU4N2ExMi4wOTggMTIuMDk4IDAgMCAwLTEuNzAxIDIuNDE0IDEyLjExIDEyLjExIDAgMCAwIDEuNjc0IDIuMzgzbC0uNzA4LjcwOFpNOC4zNjIgNC43NyA3LjI1NSA1Ljg3N2EyLjI2MiAyLjI2MiAwIDAgMC0xLjM3OCAxLjM3OEw0Ljc3IDguMzYyQTMuMjUyIDMuMjUyIDAgMCAxIDguMzYyIDQuNzdabTIuODYgMi43OTdhMy4yNTQgMy4yNTQgMCAwIDEtMy42NTQgMy42NTRsMS4wNi0xLjA2YTIuMjYyIDIuMjYyIDAgMCAwIDEuNTMzLTEuNTMzbDEuMDYtMS4wNlptLTkuMzY4IDcuMjg3YS41LjUgMCAwIDEtLjcwOC0uNzA4bDEzLTEzYS41LjUgMCAwIDEgLjcwOC43MDhsLTEzIDEzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXllQ2xvc2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZhY2VIYXBweSA9IGZ1bmN0aW9uIEV1aUljb25GYWNlSGFwcHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE2QTggOCAwIDEgMSA4IDBhOCA4IDAgMCAxIDAgMTZabTAtMS4wNjdBNi45MzMgNi45MzMgMCAxIDAgOCAxLjA2N2E2LjkzMyA2LjkzMyAwIDAgMCAwIDEzLjg2NlpNNS4zMzMgNi40YTEuMDY3IDEuMDY3IDAgMSAxIDAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwIDEgMCAyLjEzM1ptNS4zMzQgMGExLjA2NyAxLjA2NyAwIDEgMSAwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMCAxIDAgMi4xMzNaTTIuNzM5IDguODAyYS41MzMuNTMzIDAgMCAxIC45MjItLjUzN0M0LjgxNSAxMC4yNDUgNi4yNDkgMTEuMiA4IDExLjJjMS43NSAwIDMuMTg1LS45NTYgNC4zNC0yLjkzNWEuNTMzLjUzMyAwIDAgMSAuOTIuNTM3Yy0xLjMzMyAyLjI4Ny0zLjEgMy40NjUtNS4yNiAzLjQ2NS0yLjE2IDAtMy45MjctMS4xNzgtNS4yNi0zLjQ2NVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZhY2VIYXBweTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GYWNlTmV1dHJhbCA9IGZ1bmN0aW9uIEV1aUljb25GYWNlTmV1dHJhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDE2QTggOCAwIDEgMSA4IDBhOCA4IDAgMCAxIDAgMTZ6bTAtMS4wNjdBNi45MzMgNi45MzMgMCAxIDAgOCAxLjA2N2E2LjkzMyA2LjkzMyAwIDAgMCAwIDEzLjg2NnpNNS4zMzMgNi40YTEuMDY3IDEuMDY3IDAgMSAxIDAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwIDEgMCAyLjEzM3ptNS4zMzQgMGExLjA2NyAxLjA2NyAwIDEgMSAwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMCAxIDAgMi4xMzN6TTMuMiAxMC42NjdhLjUzMy41MzMgMCAwIDEgMC0xLjA2N2g5LjZhLjUzMy41MzMgMCAxIDEgMCAxLjA2N0gzLjJ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GYWNlTmV1dHJhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GYWNlU2FkID0gZnVuY3Rpb24gRXVpSWNvbkZhY2VTYWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE2QTggOCAwIDEgMSA4IDBhOCA4IDAgMCAxIDAgMTZabTAtMS4wNjdBNi45MzMgNi45MzMgMCAxIDAgOCAxLjA2N2E2LjkzMyA2LjkzMyAwIDAgMCAwIDEzLjg2NlpNNS4zMzMgNi40YTEuMDY3IDEuMDY3IDAgMSAxIDAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwIDEgMCAyLjEzM1ptNS4zMzQgMGExLjA2NyAxLjA2NyAwIDEgMSAwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMCAxIDAgMi4xMzNabTIuNDg3IDMuODY4YS41MzMuNTMzIDAgMSAxLS43MDguNzk3QzEwLjkzNiA5LjcyNSA5LjQ1OCA5LjA2NyA4IDkuMDY3Yy0xLjQ1OCAwLTIuOTM3LjY1Ny00LjQ0NiAxLjk5OGEuNTMzLjUzMyAwIDEgMS0uNzA4LS43OTdDNC41MzYgOC43NjUgNi4yNTggOCA4IDhzMy40NjMuNzY1IDUuMTU0IDIuMjY4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmFjZVNhZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GaWVsZFN0YXRpc3RpY3MgPSBmdW5jdGlvbiBFdWlJY29uRmllbGRTdGF0aXN0aWNzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxaDEwYTIgMiAwIDAgMSAyIDJ2NC4zMzdhNS41MzMgNS41MzMgMCAwIDAtMS0xLjA4VjNhMSAxIDAgMCAwLTEtMUgzYTEgMSAwIDAgMC0xIDF2MTBhMSAxIDAgMCAwIDEgMWgzLjI1N2MuMzE0LjM4LjY3Ny43MTYgMS4wOCAxSDNhMiAyIDAgMCAxLTItMlYzYTIgMiAwIDAgMSAyLTJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjUgNmgzLjgzN2E1LjU0IDUuNTQgMCAwIDAtMS4wOCAxSDMuNWEuNS41IDAgMCAxIDAtMVptMCA2aDEuNzA3Yy4wOTguMzQ1LjIyOC42NzcuMzg4Ljk5MUEuNTA1LjUwNSAwIDAgMSA1LjUgMTNoLTJhLjUuNSAwIDAgMSAwLTFabTAtOGEuNS41IDAgMCAxIDAtMWg5YS41LjUgMCAwIDEgMCAxaC05Wk0zIDkuNWEuNS41IDAgMCAwIC41LjVoMWEuNS41IDAgMCAwIDAtMWgtMWEuNS41IDAgMCAwLS41LjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTUgMTAuNWE0LjUgNC41IDAgMSAxLTkgMCA0LjUgNC41IDAgMCAxIDkgMFptLTIuMTQ2LTIuMzU0YS41LjUgMCAwIDEgMCAuNzA4bC00IDRhLjUuNSAwIDAgMS0uNzA4LS43MDhsNC00YS41LjUgMCAwIDEgLjcwOCAwWk05IDEwYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptNCAyYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZpZWxkU3RhdGlzdGljczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GaWx0ZXIgPSBmdW5jdGlvbiBFdWlJY29uRmlsdGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA1LjVhLjUuNSAwIDAgMSAuNS0uNWg5YS41LjUgMCAwIDEgMCAxaC05YS41LjUgMCAwIDEtLjUtLjVabTIgM2EuNS41IDAgMCAxIC41LS41aDVhLjUuNSAwIDAgMSAwIDFoLTVhLjUuNSAwIDAgMS0uNS0uNVpNNy41IDExYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFoLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GaWx0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmlsdGVyRXhjbHVkZSA9IGZ1bmN0aW9uIEV1aUljb25GaWx0ZXJFeGNsdWRlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNLjUgMWEuNS41IDAgMCAwIDAgMWg5YS41LjUgMCAwIDAgMC0xaC05WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE2IDExLjVhNC41IDQuNSAwIDEgMS05IDAgNC41IDQuNSAwIDAgMSA5IDBabS04IDBhLjUuNSAwIDAgMSAuNS0uNWg2YS41LjUgMCAwIDEgMCAxaC02YS41LjUgMCAwIDEtLjUtLjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDQuNWEuNS41IDAgMCAxIC41LS41aDVhLjUuNSAwIDAgMSAwIDFoLTVhLjUuNSAwIDAgMS0uNS0uNVpNNC41IDdhLjUuNSAwIDAgMCAwIDFoMWEuNS41IDAgMCAwIDAtMWgtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZpbHRlckV4Y2x1ZGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmlsdGVySWdub3JlID0gZnVuY3Rpb24gRXVpSWNvbkZpbHRlcklnbm9yZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDFhLjUuNSAwIDAgMCAwIDFoOWEuNS41IDAgMCAwIDAtMWgtOVpNMiA0LjVhLjUuNSAwIDAgMSAuNS0uNWg1YS41LjUgMCAwIDEgMCAxaC01YS41LjUgMCAwIDEtLjUtLjVabTIgM2EuNS41IDAgMCAxIC41LS41aDFhLjUuNSAwIDAgMSAwIDFoLTFhLjUuNSAwIDAgMS0uNS0uNVpNMTYgMTEuNWE0LjUgNC41IDAgMSAxLTkgMCA0LjUgNC41IDAgMCAxIDkgMFptLTQuNS0uNzA3TDkuODU0IDkuMTQ2YS41LjUgMCAxIDAtLjcwOC43MDhsMS42NDcgMS42NDYtMS42NDcgMS42NDZhLjUuNSAwIDAgMCAuNzA4LjcwOGwxLjY0Ni0xLjY0NyAxLjY0NiAxLjY0N2EuNS41IDAgMCAwIC43MDgtLjcwOEwxMi4yMDcgMTEuNWwxLjY0Ny0xLjY0NmEuNS41IDAgMCAwLS43MDgtLjcwOEwxMS41IDEwLjc5M1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZpbHRlcklnbm9yZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GaWx0ZXJJbkNpcmNsZSA9IGZ1bmN0aW9uIEV1aUljb25GaWx0ZXJJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03Ljk5OSAxNS45OTlhOCA4IDAgMSAxIDAtMTYgOCA4IDAgMCAxIDAgMTZaTTggMTVBNyA3IDAgMSAwIDggMWE3IDcgMCAwIDAgMCAxNFpNMy41IDVoOWEuNS41IDAgMSAxIDAgMWgtOWEuNS41IDAgMCAxIDAtMVptMiAzaDVhLjUuNSAwIDEgMSAwIDFoLTVhLjUuNSAwIDAgMSAwLTFabTIgM2gxYS41LjUgMCAxIDEgMCAxaC0xYS41LjUgMCAxIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmlsdGVySW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRmlsdGVySW5jbHVkZSA9IGZ1bmN0aW9uIEV1aUljb25GaWx0ZXJJbmNsdWRlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNLjUgMWEuNS41IDAgMCAwIDAgMWg5YS41LjUgMCAwIDAgMC0xaC05Wk0xNiAxMS41YTQuNSA0LjUgMCAxIDEtOSAwIDQuNSA0LjUgMCAwIDEgOSAwWm0tNC0zYS41LjUgMCAwIDAtMSAwVjExSDguNWEuNS41IDAgMCAwIDAgMUgxMXYyLjVhLjUuNSAwIDAgMCAxIDBWMTJoMi41YS41LjUgMCAwIDAgMC0xSDEyVjguNVpNMiA0LjVhLjUuNSAwIDAgMSAuNS0uNWg1YS41LjUgMCAwIDEgMCAxaC01YS41LjUgMCAwIDEtLjUtLjVaTTQuNSA3YS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFoLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GaWx0ZXJJbmNsdWRlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZsYWcgPSBmdW5jdGlvbiBFdWlJY29uRmxhZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNjg2IDguNDY0YzEuNTQ3LS42MTkgMy4wOC0uNjE5IDQuNjI4IDBBLjUuNSAwIDAgMCAxMyA4VjJhLjUuNSAwIDAgMC0uMjc2LS40NDdDMTEuMjU5LjgyIDkuNDU4LjgyIDcuMzQyIDEuNTI2Yy0xLjg4NC42MjgtMy40MTcuNjI4LTQuNjE4LjAyN0EuNS41IDAgMCAwIDIgMnYxMi41YS41LjUgMCAxIDAgMSAwVjguNTUzYzEuNDExLjYyNyAyLjk4My41OTIgNC42ODYtLjA4OVpNMyAyLjc0MWMxLjMyMi40MiAyLjg3OC4zMjcgNC42NTgtLjI2N0M5LjQgMS44OTQgMTAuODQzIDEuODUgMTIgMi4zMjJ2NC45NzVjLTEuNTYtLjQ2NC0zLjEyOC0uMzg0LTQuNjg2LjIzOS0xLjU0LjYxNi0yLjg5Mi42MTYtNC4wOS4wMTdBLjQ5OC40OTggMCAwIDAgMyA3LjVWMi43NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZsYWc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRm9sZCA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4xNC4xOTIgNy41MyAyLjQ5YS42Ny42NyAwIDAgMCAuOTQyIDBMMTAuODYuMTkyYS42NzcuNjc3IDAgMCAxIC45NDQgMCAuNjUuNjUgMCAwIDEgMCAuOTNsLTIuMzg4IDIuM2EyLjAyIDIuMDIgMCAwIDEtMi44MzIgMGwtMi4zODgtMi4zYS42NS42NSAwIDAgMSAwLS45My42NzcuNjc3IDAgMCAxIC45NDQgMHptMCAxNS42MTYgMi4zOS0yLjI5OGEuNjcuNjcgMCAwIDEgLjk0MiAwbDIuMzg5IDIuMjk4Yy4yNi4yNTYuNjg1LjI1Ni45NDQgMGEuNjUuNjUgMCAwIDAgMC0uOTNsLTIuMzg4LTIuM2EyLjAyIDIuMDIgMCAwIDAtMi44MzIgMGwtMi4zODggMi4zYS42NS42NSAwIDAgMCAwIC45M2MuMjYuMjU2LjY4My4yNTYuOTQ0IDB6TTE2IDZIMHY0aDE2VjZ6TTEgOVY3aDE0djJIMXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRm9sZGVyQ2hlY2sgPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyQ2hlY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAySDF2MTFoNi4xYy4wNy4zNDguMTc3LjY4Mi4zMTYgMUgxYTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xaDUuMjVhLjc1Ljc1IDAgMCAxIC43NS43NXYxLjEyNWMwIC4wNjkuMDU2LjEyNS4xMjUuMTI1SDEzYTEgMSAwIDAgMSAxIDF2My40MTZhNC45NjIgNC45NjIgMCAwIDAtMS0uMzE2VjRINy4xMjVBMS4xMjUgMS4xMjUgMCAwIDEgNiAyLjg3NVYyem0xMCAxMGE0IDQgMCAxIDEtOCAwIDQgNCAwIDAgMSA4IDB6bS0xLjY0Ni0xLjM1NGEuNS41IDAgMCAxIDAgLjcwOGwtMi41IDIuNWEuNS41IDAgMCAxLS43MDggMGwtMS0xYS41LjUgMCAwIDEgLjcwOC0uNzA4bC42NDYuNjQ3IDIuMTQ2LTIuMTQ3YS41LjUgMCAwIDEgLjcwOCAwelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyQ2hlY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRm9sZGVyQ2xvc2VkID0gZnVuY3Rpb24gRXVpSWNvbkZvbGRlckNsb3NlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMkgydjExaDEyVjRIOC4xMjVBMS4xMjUgMS4xMjUgMCAwIDEgNyAyLjg3NVYyem0uMjUtMWEuNzUuNzUgMCAwIDEgLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTRhMSAxIDAgMCAxIDEgMXY5YTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjJhMSAxIDAgMCAxIDEtMWg1LjI1elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyQ2xvc2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZvbGRlckV4Y2xhbWF0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkZvbGRlckV4Y2xhbWF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwibTEgOS41LjgyNi0zLjcxN0ExIDEgMCAwIDEgMi44MDIgNUgxM1Y0SDcuMTI1QTEuMTI1IDEuMTI1IDAgMCAxIDYgMi44NzVWMkgxdjcuNXptLjI0NyAzLjVINy4xYy4wNy4zNDguMTc3LjY4Mi4zMTYgMUgxYTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xaDUuMjVhLjc1Ljc1IDAgMCAxIC43NS43NXYxLjEyNWMwIC4wNjkuMDU2LjEyNS4xMjUuMTI1SDEzYTEgMSAwIDAgMSAxIDF2MWguNzUzYTEgMSAwIDAgMSAuOTc3IDEuMjE3bC0uNDQ3IDIuMDExYTUuMDE1IDUuMDE1IDAgMCAwLS44ODctLjYxOEwxNC43NTMgNkgyLjgwM2wtMS41NTYgN3pNMTYgMTJhNCA0IDAgMSAxLTggMCA0IDQgMCAwIDEgOCAwem0tNCAuNWEuNTc3LjU3NyAwIDAgMS0uNTctLjQ5NWwtLjI5LTIuMDE1YS44NjcuODY3IDAgMSAxIDEuNzE4IDBsLS4yODggMi4wMTVhLjU3Ny41NzcgMCAwIDEtLjU3LjQ5NXptMCAyLjVhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyRXhjbGFtYXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRm9sZGVyT3BlbiA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkZXJPcGVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMSA5LjUuODI2LTMuNzE3QTEgMSAwIDAgMSAyLjgwMiA1SDEzVjRINy4xMjVBMS4xMjUgMS4xMjUgMCAwIDEgNiAyLjg3NVYySDF2Ny41em0uMjQ3IDMuNWgxMS45NWwxLjU1Ni03SDIuODAzbC0xLjU1NiA3ek0xMyAxNEgxYTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xaDUuMjVhLjc1Ljc1IDAgMCAxIC43NS43NXYxLjEyNWMwIC4wNjkuMDU2LjEyNS4xMjUuMTI1SDEzYTEgMSAwIDAgMSAxIDF2MWguNzUzYTEgMSAwIDAgMSAuOTc3IDEuMjE3bC0xLjU1NiA3YTEgMSAwIDAgMS0uOTc2Ljc4M0gxM3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGRlck9wZW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRnJhbWVOZXh0ID0gZnVuY3Rpb24gRXVpSWNvbkZyYW1lTmV4dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMmExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDEgMCAyIDBWM2ExIDEgMCAwIDAtMS0xem01LjE0Ni4yMiA3LjIgNC41ODFhMS40MjUgMS40MjUgMCAwIDEgMCAyLjM5OGwtNy4yIDQuNTgxQzcuMjEgMTQuMzc1IDYgMTMuNjkyIDYgMTIuNTgxVjMuNDJjMC0xLjExMiAxLjIxLTEuNzk1IDIuMTQ2LTEuMnpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GcmFtZU5leHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uRnJhbWVQcmV2aW91cyA9IGZ1bmN0aW9uIEV1aUljb25GcmFtZVByZXZpb3VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgMmExIDEgMCAwIDEgMSAxdjEwYTEgMSAwIDEgMS0yIDBWM2ExIDEgMCAwIDEgMS0xem0tNS4xNDYuMjItNy4yIDQuNTgxYTEuNDI1IDEuNDI1IDAgMCAwIDAgMi4zOThsNy4yIDQuNTgxYy45MzYuNTk1IDIuMTQ2LS4wODggMi4xNDYtMS4xOTlWMy40MmMwLTEuMTExLTEuMjEtMS43OTQtMi4xNDYtMS4xOTl6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnJhbWVQcmV2aW91czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GdWxsU2NyZWVuRXhpdCA9IGZ1bmN0aW9uIEV1aUljb25GdWxsU2NyZWVuRXhpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgN1YzaDF2M2gzdjFIOXpNNyA3SDNWNmgzVjNoMXY0em0yIDJoNHYxaC0zdjNIOVY5ek03IDl2NEg2di0zSDNWOWg0ek0wIDEuOTk0QzAgLjg5My44OTUgMCAxLjk5NCAwaDEyLjAxMkMxNS4xMDcgMCAxNiAuODk1IDE2IDEuOTk0djEyLjAxMkExLjk5NSAxLjk5NSAwIDAgMSAxNC4wMDYgMTZIMS45OTRBMS45OTUgMS45OTUgMCAwIDEgMCAxNC4wMDZWMS45OTR6bTEgMHYxMi4wMTJjMCAuNTQ4LjQ0Ni45OTQuOTk0Ljk5NGgxMi4wMTJhLjk5NS45OTUgMCAwIDAgLjk5NC0uOTk0VjEuOTk0QS45OTUuOTk1IDAgMCAwIDE0LjAwNiAxSDEuOTk0QS45OTUuOTk1IDAgMCAwIDEgMS45OTR6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GdWxsU2NyZWVuRXhpdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25GdWxsU2NyZWVuID0gZnVuY3Rpb24gRXVpSWNvbkZ1bGxTY3JlZW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgM3Y0aC0xVjRIOVYzaDRaTTMgM2g0djFINHYzSDNWM1ptMTAgMTBIOXYtMWgzVjloMXY0Wk0zIDEzVjloMXYzaDN2MUgzWk0wIDEuOTk0QzAgLjg5My44OTUgMCAxLjk5NCAwaDEyLjAxMkMxNS4xMDcgMCAxNiAuODk1IDE2IDEuOTk0djEyLjAxMkExLjk5NSAxLjk5NSAwIDAgMSAxNC4wMDYgMTZIMS45OTRBMS45OTUgMS45OTUgMCAwIDEgMCAxNC4wMDZWMS45OTRabTEgMHYxMi4wMTJjMCAuNTQ4LjQ0Ni45OTQuOTk0Ljk5NGgxMi4wMTJhLjk5NS45OTUgMCAwIDAgLjk5NC0uOTk0VjEuOTk0QS45OTUuOTk1IDAgMCAwIDE0LjAwNiAxSDEuOTk0QS45OTUuOTk1IDAgMCAwIDEgMS45OTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GdWxsU2NyZWVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkZ1bmN0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkZ1bmN0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgMi4yMjZ2Mi4yMThjLS4zNTktLjE0My0uODQ1LS4yMTgtMS4zMTUtLjIxOC0xLjA1OSAwLTEuNjMxLjUxOS0xLjgwMiAxLjU2NWwtLjE2OC45MzdoMi43OTh2Mi4xNTlIOS40MWwtLjMxMyAxLjY3NEM4LjY5NiAxMi45ODcgNy4yNjEgMTQgNC43ODUgMTRjLS43MTggMC0xLjM1LS4wOTItMS43ODUtLjI1MXYtMi4yNDNjLjQxOC4xNzYuOTA1LjI2OCAxLjM4My4yNjggMS4wMDggMCAxLjU0Ni0uNDM1IDEuNzI1LTEuNTIzbC4yNC0xLjM2NEgzLjc4N1Y2LjcyOGgyLjgxMmwuMjg4LTEuMjY0QzcuMjg2IDMuMDcxIDguNjYyIDIgMTEuMzUyIDJjLjU5OCAwIDEuMzA2LjEgMS42NDguMjI2elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uR2VhciA9IGZ1bmN0aW9uIEV1aUljb25HZWFyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNLjE2NCAxMC4zMjkgMS44NyA4IC4xNjMgNS42N2MuMTgtLjYwMS40My0xLjE5Ljc1OC0xLjc1N2E4LjE5NyA4LjE5NyAwIDAgMSAxLjE0Mi0xLjUzNWwyLjg3Mi4zMTNMNi4wOTkuMDVhOC4xNjYgOC4xNjYgMCAwIDEgMy44LS4wMDNsMS4xNjYgMi42NDQgMi44NzItLjMxM2E4LjE2NiA4LjE2NiAwIDAgMSAxLjg5OSAzLjI5M0wxNC4xMyA4bDEuNzA2IDIuMzNjLS4xOC42MDEtLjQzIDEuMTktLjc1OCAxLjc1N2E4LjE5NyA4LjE5NyAwIDAgMS0xLjE0MiAxLjUzNWwtMi44NzItLjMxMy0xLjE2NCAyLjY0MWE4LjE2NiA4LjE2NiAwIDAgMS0zLjguMDAzbC0xLjE2Ni0yLjY0NC0yLjg3Mi4zMTNhOC4xNjYgOC4xNjYgMCAwIDEtMS44OTktMy4yOTNabTQuNjYzIDEuOTg2YTEgMSAwIDAgMSAxLjAyMy41OTFsLjk1NyAyLjE3Yy43OS4xMzQgMS41OTcuMTMyIDIuMzg3LS4wMDFsLjk1Ni0yLjE2OWExIDEgMCAwIDEgMS4wMjMtLjU5bDIuMzU4LjI1NmE3LjIzIDcuMjMgMCAwIDAgMS4xOTQtMi4wNjhsLTEuNDAxLTEuOTEzYTEgMSAwIDAgMSAwLTEuMTgybDEuNC0xLjkxMmE3LjE2NSA3LjE2NSAwIDAgMC0xLjE5Mi0yLjA2OWwtMi4zNTkuMjU3YTEgMSAwIDAgMS0xLjAyMy0uNTkxTDkuMTkzLjkyNGE3LjE2NSA3LjE2NSAwIDAgMC0yLjM4Ny4wMDFMNS44NSAzLjA5NGExIDEgMCAwIDEtMS4wMjMuNTlsLTIuMzU4LS4yNTZhNy4yMyA3LjIzIDAgMCAwLTEuMTk0IDIuMDY4bDEuNDAxIDEuOTEzYTEgMSAwIDAgMSAwIDEuMTgybC0xLjQgMS45MTJjLjI4Ljc1MS42ODEgMS40NSAxLjE5MiAyLjA2OWwyLjM1OS0uMjU3Wk04IDExYTMgMyAwIDEgMSAwLTYgMyAzIDAgMCAxIDAgNlptMC0xYTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdlYXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uR2xhc3NlcyA9IGZ1bmN0aW9uIEV1aUljb25HbGFzc2VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4wMzUgOUEzLjUgMy41IDAgMCAxIDE1IDcuMDVWNC41YzAtMS4wNzItLjY0OC0xLjcyLTIuMDk4LTIuMDFhLjUuNSAwIDAgMSAuMTk2LS45OEMxNC45ODEgMS44ODYgMTYgMi45MDUgMTYgNC41djQuMjVjMCAuMDcyLS4wMTUuMTQtLjA0My4yMDJBMy41IDMuNSAwIDEgMSA5LjAzNSAxMGgtMi4wN0EzLjUgMy41IDAgMSAxIC4wNDMgOC45NTIuNDk4LjQ5OCAwIDAgMSAwIDguNzVWNC41YzAtMS41OTUgMS4wMTktMi42MTQgMi45MDItMi45OWEuNS41IDAgMCAxIC4xOTYuOThDMS42NDggMi43OCAxIDMuNDI4IDEgNC41djIuNTVBMy41IDMuNSAwIDAgMSA2Ljk2NSA5aDIuMDdaTTMuNSAxMmEyLjUgMi41IDAgMSAwIDAtNSAyLjUgMi41IDAgMCAwIDAgNVptOSAwYTIuNSAyLjUgMCAxIDAgMC01IDIuNSAyLjUgMCAwIDAgMCA1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR2xhc3NlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25HbG9iZSA9IGZ1bmN0aW9uIEV1aUljb25HbG9iZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMDE5IDhhNi40NjIgNi40NjIgMCAwIDAgMS4wMDMgM2gyLjM4MmExNC40NjkgMTQuNDY5IDAgMCAxLS4zOTYtM2gtMi45OVptMC0xaDIuOTg5Yy4wMzMtMS4wNzguMTcyLTIuMDk0LjM5Ni0zSDIuMDIyYTYuNDYyIDYuNDYyIDAgMCAwLTEuMDAzIDNaTTEzLjk4IDhoLTIuOTg5YTE0LjQ2OSAxNC40NjkgMCAwIDEtLjM5NiAzaDIuMzgyYTYuNDYyIDYuNDYyIDAgMCAwIDEuMDAzLTNabTAtMWE2LjQ2MiA2LjQ2MiAwIDAgMC0xLjAwMy0zaC0yLjM4MmMuMjI0LjkwNi4zNjMgMS45MjIuMzk2IDNoMi45OVpNNS4wMDggOGMuMDM3IDEuMTA3LjE5NSAyLjEyNy40MjkgM2g0LjEyNmMuMjM0LS44NzMuMzkyLTEuODkzLjQyOS0zSDUuMDA4Wm0wLTFoNC45ODRhMTMuNDIyIDEzLjQyMiAwIDAgMC0uNDI5LTNINS40MzdhMTMuNDIyIDEzLjQyMiAwIDAgMC0uNDI5IDNaTS4wMTYgOEgwVjdoLjAxNmE3LjUgNy41IDAgMCAxIDE0Ljk2OCAwSDE1djFoLS4wMTZBNy41IDcuNSAwIDAgMSAuMDE2IDhabTIuNzk0IDRhNi41MDEgNi41MDEgMCAwIDAgMi43MTcgMS42OTVBNy4zMTUgNy4zMTUgMCAwIDEgNC43IDEySDIuODFabTkuMzggMEgxMC4zYy0uMjMuNjU3LS41MSAxLjIzLS44MjcgMS42OTVBNi41MDEgNi41MDEgMCAwIDAgMTIuMTkgMTJabS02LjQyOCAwYy40ODQgMS4yNCAxLjEzMiAyIDEuNzM4IDIgLjYwNiAwIDEuMjU0LS43NiAxLjczOC0ySDUuNzYyWk0yLjgxIDNINC43Yy4yMy0uNjU3LjUxLTEuMjMuODI3LTEuNjk1QTYuNTAxIDYuNTAxIDAgMCAwIDIuODEgM1ptOS4zOCAwYTYuNTAxIDYuNTAxIDAgMCAwLTIuNzE3LTEuNjk1Yy4zMTcuNDY1LjU5NyAxLjAzOC44MjcgMS42OTVoMS44OVpNNS43NjIgM2gzLjQ3NkM4Ljc1NCAxLjc2IDguMTA2IDEgNy41IDFjLS42MDYgMC0xLjI1NC43Ni0xLjczOCAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR2xvYmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uR3JhYiA9IGZ1bmN0aW9uIEV1aUljb25HcmFiKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjUgNmMuMjc2IDAgLjUuMjMyLjUuNSAwIC4yNzYtLjIyOS41LS41LjVoLTExYS41MDUuNTA1IDAgMCAxLS41LS41YzAtLjI3Ni4yMjktLjUuNS0uNWgxMVptMCAzYy4yNzYgMCAuNS4yMzIuNS41IDAgLjI3Ni0uMjI5LjUtLjUuNWgtMTFhLjUwNS41MDUgMCAwIDEtLjUtLjVjMC0uMjc2LjIyOS0uNS41LS41aDExWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR3JhYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25HcmFiT21uaWRpcmVjdGlvbmFsID0gZnVuY3Rpb24gRXVpSWNvbkdyYWJPbW5pZGlyZWN0aW9uYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDVhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm00IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWk03IDhhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWm0zIDFhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm0tMyAzYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFptMyAxYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyYWJPbW5pZGlyZWN0aW9uYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uR3JhYkhvcml6b250YWwgPSBmdW5jdGlvbiBFdWlJY29uR3JhYkhvcml6b250YWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyLjVjMC0uMjc2LjIzMi0uNS41LS41LjI3NiAwIC41LjIyOS41LjV2MTFjMCAuMjc2LS4yMzIuNS0uNS41YS41MDMuNTAzIDAgMCAxLS41LS41di0xMVptMyAwYzAtLjI3Ni4yMzItLjUuNS0uNS4yNzYgMCAuNS4yMjkuNS41djExYzAgLjI3Ni0uMjMyLjUtLjUuNWEuNTAzLjUwMyAwIDAgMS0uNS0uNXYtMTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HcmFiSG9yaXpvbnRhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25HcmFkaWVudCA9IGZ1bmN0aW9uIEV1aUljb25HcmFkaWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDJhMSAxIDAgMCAxIDEtMWgxMmExIDEgMCAwIDEgMSAxdjEyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjJabTQgMGgxdjEySDVWMlptMyAxMlYyaDJ2MTJIOFptMyAwaDNWMmgtM3YxMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyYWRpZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkdyaWQgPSBmdW5jdGlvbiBFdWlJY29uR3JpZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEgNVYxaDR2NEgxWm0zLTFWMkgydjJoMlptMiAxVjFoNHY0SDZabTMtMVYySDd2MmgyWm0yIDFWMWg0djRoLTRabTEtMWgyVjJoLTJ2MlpNMSAxMFY2aDR2NEgxWm0zLTFWN0gydjJoMlptMiAxVjZoNHY0SDZabTMtMVY3SDd2MmgyWm0yIDFWNmg0djRoLTRabTMtMVY3aC0ydjJoMlpNMSAxNXYtNGg0djRIMVptMS0xaDJ2LTJIMnYyWm00IDF2LTRoNHY0SDZabTEtMWgydi0ySDd2MlptNCAxdi00aDR2NGgtNFptMS0xaDJ2LTJoLTJ2MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyaWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSGVhcnQgPSBmdW5jdGlvbiBFdWlJY29uSGVhcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjQwMiAzLjA5OGEzLjc1IDMuNzUgMCAwIDAtNS4zMDQgNS4zMDRsNS41NTggNS4yN0w4IDE0bDUuODkyLTUuNTg4YTMuNzUgMy43NSAwIDEgMC01LjI5NC01LjMxM0w4IDMuNjk3bC0uNTk4LS41OTlaTTIuNzk2IDcuNjg1YTIuNzQ3IDIuNzQ3IDAgMCAxIC4wMS0zLjg4IDIuNzUgMi43NSAwIDAgMSAzLjg4OSAwTDggNS4xMTFsMS4zMDUtMS4zMDZhMi43NSAyLjc1IDAgMSAxIDMuODkgMy44OUw4IDEyLjYyIDIuNzk2IDcuNjg1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSGVhcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSGVhdG1hcCA9IGZ1bmN0aW9uIEV1aUljb25IZWF0bWFwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgOWEzIDMgMCAxIDEgMCA2IDMgMyAwIDAgMSAwLTZabTAgMWEyIDIgMCAxIDAgMCA0IDIgMiAwIDAgMCAwLTRaTTQgMmEyIDIgMCAxIDEgMCA0IDIgMiAwIDAgMSAwLTRabTAgMWExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJabTAgNWE0IDQgMCAxIDEgMCA4IDQgNCAwIDAgMSAwLThabTAgMWEzIDMgMCAxIDAgMCA2IDMgMyAwIDAgMCAwLTZabTgtOWE0IDQgMCAxIDEgMCA4IDQgNCAwIDAgMSAwLThabTAgMWEzIDMgMCAxIDAgMCA2IDMgMyAwIDAgMCAwLTZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25IZWF0bWFwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkhlbHAgPSBmdW5jdGlvbiBFdWlJY29uSGVscChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm0xMy42IDEyLjE4Ni0xLjM1Ny0xLjM1OGMtLjAyNS0uMDI1LS4wNTgtLjAzNC0uMDg0LS4wNTYuNTMtLjc5NC44NC0xLjc0Ni44NC0yLjc3M2E0Ljk3NyA0Ljk3NyAwIDAgMC0uODQtMi43NzJjLjAyNi0uMDIuMDU5LS4wMy4wODQtLjA1NkwxMy42IDMuODEzYTYuOTYgNi45NiAwIDAgMSAwIDguMzczWk04IDE1QTYuOTU2IDYuOTU2IDAgMCAxIDMuODE0IDEzLjZsMS4zNTgtMS4zNThjLjAyNS0uMDI1LjAzNC0uMDU3LjA1NS0uMDg0QzYuMDIgMTIuNjg4IDYuOTc0IDEzIDggMTNhNC45NzggNC45NzggMCAwIDAgMi43NzMtLjg0Yy4wMi4wMjYuMDMuMDU4LjA1Ni4wODNsMS4zNTcgMS4zNThBNi45NTYgNi45NTYgMCAwIDEgOCAxNVptLTUuNjAxLTIuODEzYTYuOTYzIDYuOTYzIDAgMCAxIDAtOC4zNzNsMS4zNTkgMS4zNThjLjAyNC4wMjUuMDU3LjAzNS4wODQuMDU2QTQuOTcgNC45NyAwIDAgMCAzIDhjMCAxLjAyNy4zMSAxLjk4Ljg0MiAyLjc3My0uMDI3LjAyMi0uMDYuMDMxLS4wODQuMDU2bC0xLjM2IDEuMzU4Wm01LjYtLjE4N0E0IDQgMCAxIDEgOCA0YTQgNCAwIDAgMSAwIDhaTTggMWMxLjU3MyAwIDMuMDE5LjUyNSA0LjE4NyAxLjRsLTEuMzU3IDEuMzU4Yy0uMDI1LjAyNS0uMDM1LjA1Ny0uMDU2LjA4NEE0Ljk3OSA0Ljk3OSAwIDAgMCA4IDNhNC45NzkgNC45NzkgMCAwIDAtMi43NzMuODQyYy0uMDIxLS4wMjctLjAzLS4wNTktLjA1NS0uMDg0TDMuODE0IDIuNEE2Ljk1NyA2Ljk1NyAwIDAgMSA4IDFabTAtMWE4LjAwMSA4LjAwMSAwIDEgMCAuMDAzIDE2LjAwMkE4LjAwMSA4LjAwMSAwIDAgMCA4IDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25IZWxwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkhvbWUgPSBmdW5jdGlvbiBFdWlJY29uSG9tZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTguMTMgMS4yMjkgNS41IDQuNDdhMSAxIDAgMCAxIC4zNy43NzdWMTRhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTFWNi40NzZhMSAxIDAgMCAxIC4zNy0uNzc2bDUuNS00LjQ3MWExIDEgMCAwIDEgMS4yNiAwWk0xMyA2LjQ3NiA3LjUgMi4wMDUgMiA2LjQ3NVYxNGgxMVY2LjQ3NlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkhvbWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSUluQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvbklJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMTEuNTA4IDcuNDY4IDhINi4yNVY3aDIuNDAxbC4wMyAzLjUwOEg5Ljh2MUg3LjVabS0uMjUtNi4yMDJhLjgzLjgzIDAgMCAxIC4yMDctLjU3N2MuMTM3LS4xNTMuMzM0LS4yMjkuNTktLjIyOS4yNTYgMCAuNDU0LjA3Ni41OTQuMjMuMTQuMTUyLjIwOS4zNDUuMjA5LjU3NiAwIC4yMjgtLjA3LjQxNy0uMjEuNTY4LS4xNC4xNS0uMzM3LjIyNi0uNTkzLjIyNi0uMjU2IDAtLjQ1My0uMDc1LS41OS0uMjI2YS44MS44MSAwIDAgMS0uMjA3LS41NjhaTTggMTNBNSA1IDAgMSAwIDggM2E1IDUgMCAwIDAgMCAxMFptMCAxQTYgNiAwIDEgMSA4IDJhNiA2IDAgMCAxIDAgMTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW1hZ2UgPSBmdW5jdGlvbiBFdWlJY29uSW1hZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDVhMiAyIDAgMSAxLTQgMCAyIDIgMCAwIDEgNCAwem05LTRhMSAxIDAgMCAxIDEgMXYxMmExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMVYyYTEgMSAwIDAgMSAxLTF6bS0zLjQ0OCA2LjEzNC0zLjc2IDIuNzY5YS41LjUgMCAwIDEtLjQzNi4wNzdsLS4wODctLjAzNC0xLjcxMy0uODdMMSAxMS44VjE0aDE0VjkuNzUxbC0zLjQ0OC0yLjYxN3pNMTUgMkgxdjguNjM1bDQuMjgtMi41NThhLjUuNSAwIDAgMSAuMzg5LS4wNTRsLjA5NC4wMzcgMS42ODQuODU1IDMuODEzLTIuODA3YS41LjUgMCAwIDEgLjUyLS4wNDVsLjA3OS4wNUwxNSA4LjQ5NVYyelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW1hZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW1wb3J0ID0gZnVuY3Rpb24gRXVpSWNvbkltcG9ydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTkgMTAuMTE0IDEuODUtMS45NDNhLjUyLjUyIDAgMCAxIC43NyAwYy4yMTQuMjI4LjIxNC42IDAgLjgyOWwtMS45NSAyLjA1YTEuNTUyIDEuNTUyIDAgMCAxLTIuMzEgMEw1LjQxIDlhLjYxNy42MTcgMCAwIDEgMC0uODI5LjUyLjUyIDAgMCAxIC43NyAwTDggMTAuMDgyVjEuNTU2QzggMS4yNDkgOC4yMjQgMSA4LjUgMXMuNS4yNDkuNS41NTZ2OC41NThaTTQuMTggNmEuOTkzLjk5MyAwIDAgMC0uOTcyLjgwNGwtMS4xODkgNkEuOTk1Ljk5NSAwIDAgMCAyLjk5MSAxNGgxMS4wMThhMSAxIDAgMCAwIC45NzItMS4xOTZsLTEuMTktNmEuOTkzLjk5MyAwIDAgMC0uOTctLjgwNEg0LjE4Wk02IDV2MWg1VjVoMS44MjVjLjk0NiAwIDEuNzYuNjczIDEuOTQ2IDEuNjA4bDEuMTkgNkEyIDIgMCAwIDEgMTQuMDE2IDE1SDIuOTg0YTEuOTkyIDEuOTkyIDAgMCAxLTEuOTQ1LTIuMzkybDEuMTktNkMyLjQxNCA1LjY3MyAzLjIyOSA1IDQuMTc0IDVINlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkltcG9ydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25JbmRleCA9IGZ1bmN0aW9uIEV1aUljb25JbmRleChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDJIM3YxMWgxMXYxSDJWMWgxMnYxMmgtMVYyWk02IDVoNS45OTlWNEg2djFaTTQgNVY0aDF2MUg0Wm0yIDNWN2g2djFINlpNNCA4VjdoMXYxSDRabTIgM3YtMWg2djFINlptLTIgMHYtMWgxdjFINFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluZGV4VGVtcG9yYXJ5ID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4VGVtcG9yYXJ5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxM1YyaDExVjFIMnYxM2gydi0xSDNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS45OTkgNUg2VjRoNS45OTl2MVpNNCA0djFoMVY0SDRabTIgM3YxaDRWN0g2Wk00IDd2MWgxVjdINFptMiAzdjFoMnYtMUg2Wm0tMiAwdjFoMXYtMUg0Wm0xMC03aC0xdjFoMVYzWm0tMSAyaDF2MWgtMVY1Wm0xIDJoLTF2MWgxVjdabS0xIDJoMXYxaC0xVjlabTEgMmgtMXYxaDF2LTFabS0xIDJoMXYxaC0xdi0xWm0tNyAwSDV2MWgxdi0xWm0xIDBoMXYxSDd2LTFabTMgMEg5djFoMXYtMVptMSAwaDF2MWgtMXYtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4VGVtcG9yYXJ5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluZGV4Q2xvc2UgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhDbG9zZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjZoLTFWMlpNNSA1aDUuOTk5VjRINXYxWk0zIDVWNGgxdjFIM1ptMiAzVjdoM3YxSDVaTTMgOFY3aDF2MUgzWm0yIDN2LTFoMnYxSDVabTUuNS0xLjIwN0w5LjA4NiA4LjM3OWwtLjcwNy43MDdMOS43OTMgMTAuNWwtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNC0xLjQxNCAxLjQxNCAxLjQxNC43MDctLjcwNy0xLjQxNC0xLjQxNCAxLjQxNC0xLjQxNC0uNzA3LS43MDdMMTAuNSA5Ljc5M1pNMyAxMXYtMWgxdjFIM1ptNy41LTVhNC41IDQuNSAwIDEgMSAwIDkgNC41IDQuNSAwIDAgMSAwLTlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleENsb3NlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluZGV4RWRpdCA9IGZ1bmN0aW9uIEV1aUljb25JbmRleEVkaXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAySDJ2MTFoNHYxSDFWMWgxMnY1aC0xVjJaTTUgNWg1Ljk5OVY0SDV2MVpNMyA1VjRoMXYxSDNabTIgM1Y3aDZ2MUg1Wk0zIDhWN2gxdjFIM1ptMiAzdi0xaDN2MUg1Wm0tMiAwdi0xaDF2MUgzWm00LjUwMiAxLjQxTDEyLjkxMyA3IDE1IDkuMDg3bC01LjQxIDUuNDFMNyAxNWwuNTAyLTIuNTlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleEVkaXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW5kZXhGbHVzaCA9IGZ1bmN0aW9uIEV1aUljb25JbmRleEZsdXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0LjUxNiA5SDEwLjVhLjUuNSAwIDAgMSAwLTFoNC4wMTZMMTMuMTEgNS45NDhjLS4xNzEtLjI1Mi0uMTM3LS42Mi4wNzktLjgyMS4yMTctLjIuNTMxLS4xNTkuNzAzLjA5MmwyIDIuOTE2YS42NDguNjQ4IDAgMCAxIC4xMDguMzk3LjY0My42NDMgMCAwIDEtLjEwOC4zMzJsLTIgMi45MThBLjQ3OC40NzggMCAwIDEgMTMuNSAxMmEuNDU3LjQ1NyAwIDAgMS0uMzEyLS4xMjdjLS4yMTYtLjIwMi0uMjUtLjU3LS4wNzktLjgyTDE0LjUxNiA5Wk0zIDE1SDFhMSAxIDAgMCAxLTEtMVYyYTEgMSAwIDAgMSAxLTFoNy44Yy4yNzQgMCAuNTM3LjExMy43MjYuMzEybDIuMiAyLjQyOGMuMTc2LjE4Ni4yNzQuNDMzLjI3NC42ODlWN2gtMVY1SDguNWEuNS41IDAgMCAxLS41LS41VjJIM3YxMmg4di00aDF2NGExIDEgMCAwIDEtMSAxSDNabS0xLTFWMkgxdjEyaDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleEZsdXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluZGV4TWFwcGluZyA9IGZ1bmN0aW9uIEV1aUljb25JbmRleE1hcHBpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDhINC45MTVhMS41IDEuNSAwIDEgMSAwLTFIOFYyLjVBMS41IDEuNSAwIDAgMSA5LjUgMWgyLjU4NWExLjUgMS41IDAgMSAxIDAgMUg5LjVhLjUuNSAwIDAgMC0uNS41djEwYS41LjUgMCAwIDAgLjUuNWgyLjU4NWExLjUgMS41IDAgMSAxIDAgMUg5LjVBMS41IDEuNSAwIDAgMSA4IDEyLjVWOFpNMy41IDNhMS41IDEuNSAwIDEgMSAwLTMgMS41IDEuNSAwIDAgMSAwIDNabTAgMTJhMS41IDEuNSAwIDEgMSAwLTMgMS41IDEuNSAwIDAgMSAwIDNabTEwLTZhMS41IDEuNSAwIDEgMSAwLTMgMS41IDEuNSAwIDAgMSAwIDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleE1hcHBpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW5kZXhPcGVuID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4T3BlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjZoLTFWMlpNNSA1aDUuOTk5VjRINXYxWk0zIDVWNGgxdjFIM1ptMiAzVjdoM3YxSDVaTTMgOFY3aDF2MUgzWm0yIDN2LTFoMnYxSDVabTUtMUg4djFoMnYyaDF2LTJoMnYtMWgtMlY4aC0xdjJabS03IDF2LTFoMXYxSDNabTcuNS01YTQuNSA0LjUgMCAxIDEgMCA5IDQuNSA0LjUgMCAwIDEgMC05WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhPcGVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluZGV4UnVudGltZSA9IGZ1bmN0aW9uIEV1aUljb25JbmRleFJ1bnRpbWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAySDJ2MTFoNnYxSDFWMWgxMnY2LjgzOWwtMS0uNzA3VjJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDExdi0xSDV2MWgzem0wLTMuMDU1YzAtLjM0Mi4wODItLjY2NC4yMy0uOTQ1SDV2MWgzdi0uMDU1ek01IDVoNS45OTlWNEg1djF6TTMgNHYxaDFWNEgzem0wIDN2MWgxVjdIM3ptMCAzdjFoMXYtMUgzem0xMS42MDcuMi00LjMyLTMuMDU1QzkuNzI3IDYuNzUgOSA3LjIwNCA5IDcuOTQ1djYuMTA4YzAgLjc0LjcyNiAxLjE5NiAxLjI4Ny44bDQuMzItMy4wNTVjLjUyNC0uMzcuNTI0LTEuMjI4IDAtMS41OTh6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleFJ1bnRpbWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW5kZXhTZXR0aW5ncyA9IGZ1bmN0aW9uIEV1aUljb25JbmRleFNldHRpbmdzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA1aDUuOTk5VjRINXYxWk0zIDVoMVY0SDN2MVptMCAzaDFWN0gzdjFabTYuMDIyLTEtLjE1LjMzMy0uNzM3LS4wNzgtLjQ2Ny0uMDUtLjMzLjM0MkE1LjEzIDUuMTMgMCAwIDAgNi45NDggOEg1VjdoNC4wMjJabS0zLjAwNSAzTDYgMTAuMDU2bC4zMDYuNDExLjM5OS41MzNINXYtMWgxLjAxN1pNMyAxMWgxdi0xSDN2MVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTEzIDcuMDUtLjE2Mi0uMzU5LS4yLS40NDctLjQ3LS4xMUE1LjAxOSA1LjAxOSAwIDAgMCAxMiA2LjA5OFYySDJ2MTFoNC4zNmMuMTU3LjM1NC4zNTUuNjkuNTkgMUgxVjFoMTJ2Ni4wNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjAwNCA3Yy4zMjIgMCAuNjQ2LjAzNi45NjYuMTA5bC41OTUgMS4yOTMgMS40NjUtLjE1MmMuNDU3LjQ2Mi43ODYgMS4wMTYuOTY5IDEuNjFsLS44NyAxLjE0Ljg3MSAxLjE0MWEzLjk0IDMuOTQgMCAwIDEtLjM4Ny44NTkgNC4wNTggNC4wNTggMCAwIDEtLjU4My43NWwtMS40NjUtLjE1Mi0uNTk0IDEuMjkyYTQuMzcgNC4zNyAwIDAgMS0xLjk0MS4wMDFsLS41OTQtMS4yOTMtMS40NjYuMTUyYTMuOTU0IDMuOTU0IDAgMCAxLS45NjktMS42MWwuODctMS4xNEw3IDkuODZhMy45NDcgMy45NDcgMCAwIDEgLjk3LTEuNjFsMS40NjYuMTUyLjU5My0xLjI5MmE0LjM3IDQuMzcgMCAwIDEgLjk3NS0uMTFaTTExIDEyYTEgMSAwIDEgMCAuMDAyLTEuOTk4QTEgMSAwIDAgMCAxMSAxMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4U2V0dGluZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW5maW5pdHkgPSBmdW5jdGlvbiBFdWlJY29uSW5maW5pdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjM3IDkuNDU3QTEuOTk0IDEuOTk0IDAgMCAxIDMuOTkzIDEwYTIgMiAwIDEgMSAxLjQwMy0zLjQzM2wuNjAxLjY3OSAxLjMzNi0xLjUwOC0uNDYyLS41MjJhNCA0IDAgMSAwLS4wNDEgNS42MTNsLjAyMS0uMDIyIDMuNzc3LTQuMjY1LjAwMi4wMDFhMiAyIDAgMSAxLS4wMjQgMi44OWwtLjYwMS0uNjc5LTEuMzM2IDEuNTA4LjQ2Mi41MjJhNCA0IDAgMSAwIDAtNS41NjlsLTMuNzQgNC4yMjNhMS45OTEgMS45OTEgMCAwIDEtLjAyLjAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5maW5pdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSW5wdXRPdXRwdXQgPSBmdW5jdGlvbiBFdWlJY29uSW5wdXRPdXRwdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCAxMy45OTl2LTIuOTloMVYxNUgwVjFoMTF2My45OTloLTFWMi4wMDFIMXYxMS45OTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjUgMTBWOUgxMXYxek0xMyA5LjVsMy0zLTMtM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuNSA2LjV2NmwtMy0zek03IDdWNmg2LjV2MXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklucHV0T3V0cHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkluc3BlY3QgPSBmdW5jdGlvbiBFdWlJY29uSW5zcGVjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjM2MyAxNC42NThhLjUuNSAwIDEgMS0uNzEzLjdsLTIuOTctMy4wMjNhLjUuNSAwIDAgMSAuMDAxLS43QTMuOSAzLjkgMCAxIDAgOC45IDEyLjhhLjUuNSAwIDEgMSAwIC45OTkgNC45IDQuOSAwIDEgMSAzLjgyMS0xLjgzM2wyLjY0MiAyLjY5MVpNMy4wOTQgMTNhLjUuNSAwIDEgMSAwIDFIMi41QTIuNSAyLjUgMCAwIDEgMCAxMS41di05QTIuNSAyLjUgMCAwIDEgMi41IDBoOUEyLjUgMi41IDAgMCAxIDE0IDIuNXYuNTk5YS41LjUgMCAxIDEtMSAwVjIuNUExLjUgMS41IDAgMCAwIDExLjUgMWgtOUExLjUgMS41IDAgMCAwIDEgMi41djlBMS41IDEuNSAwIDAgMCAyLjUgMTNoLjU5NFpNMi41IDNhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFabTIgMGEuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptMiAwYS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm0tNCAyYS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm0yIDBhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFabS0yIDFhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabTAgM2EuNS41IDAgMSAxIDAtMSAuNS41IDAgMCAxIDAgMVptNi02YS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm0yIDBhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFabS04IDhhLjUuNSAwIDEgMSAwLTEgLjUuNSAwIDAgMSAwIDFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbnNwZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkludmVydCA9IGZ1bmN0aW9uIEV1aUljb25JbnZlcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDEzLjI1YTUuMjUgNS4yNSAwIDEgMCAwLTEwLjUgNS4yNSA1LjI1IDAgMCAwIDAgMTAuNVpNOCAxNEE2IDYgMCAxIDEgOCAyYTYgNiAwIDAgMSAwIDEyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAyYTYgNiAwIDEgMCAwIDEyVjJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbnZlcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSXAgPSBmdW5jdGlvbiBFdWlJY29uSXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAyYTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOFptLTIgM0g4djZoMVY5LjAxNGgxYy4yOTgtLjAxMyAyIDAgMi0yLjAxOCAwLTEuNzQtMS4zMTQtMS45NTItMS44MjUtMS45ODdMMTAgNVpNNiA1SDV2NmgxVjVabTQgLjk4NGMuNjY3IDAgMSAuMzM2IDEgMS4wMDhDMTEgNy42NjQgMTAuNjY3IDggMTAgOEg5VjUuOTg0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uSXNzdWUgPSBmdW5jdGlvbiBFdWlJY29uSXNzdWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2lzc3VlJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgY2xpcFBhdGg6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZmlsbDogXCIjMzQzNzQxXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAuNWM0LjEzNiAwIDcuNSAzLjM2NCA3LjUgNy41cy0zLjM2NCA3LjUtNy41IDcuNVMuNSAxMi4xMzYuNSA4IDMuODY0LjUgOCAuNXptMCAuODgyYTYuNjE4IDYuNjE4IDAgMTAwIDEzLjIzNkE2LjYxOCA2LjYxOCAwIDAwOCAxLjM4MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgOGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiY2xpcFBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJylcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMGgxNnYxNkgwelwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklzc3VlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbktleSA9IGZ1bmN0aW9uIEV1aUljb25LZXkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQgNWEyIDIgMCAxIDEtNCAwIDIgMiAwIDAgMSA0IDBabS0xIDBhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA2YTUgNSAwIDEgMSAzLjA4NiA0LjYybC0xLjIzMiAxLjIzNEEuNS41IDAgMCAxIDcuNSAxMkg2djEuNWEuNS41IDAgMCAxLS41LjVINHYxLjVhLjUuNSAwIDAgMS0uNS41aC0zYS41LjUgMCAwIDEtLjUtLjV2LTNhLjUuNSAwIDAgMSAuMTc1LS4zOGw1LjkzMi01LjA4NUE1LjAxOSA1LjAxOSAwIDAgMSA2IDZabTUtNGE0IDQgMCAwIDAtMy44NTMgNS4wOC41LjUgMCAwIDEtLjE1Ni41MTVMMSAxMi43M1YxNWgydi0xLjVhLjUuNSAwIDAgMSAuNS0uNUg1di0xLjVhLjUuNSAwIDAgMSAuNS0uNWgxLjc5M2wuODc3LS44NzdhNS4wMzMgNS4wMzMgMCAwIDEtLjUwMy0uMzk2LjUuNSAwIDEgMSAuNjY2LS43NDVBMy45ODMgMy45ODMgMCAwIDAgMTEgMTBoLjAwNUE0IDQgMCAwIDAgMTEgMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktleTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25LZXlib2FyZCA9IGZ1bmN0aW9uIEV1aUljb25LZXlib2FyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wIDNoMTZ2MTFIMFYzWm0xNSAxMFY0SDF2OWgxNFpNMiA1aDJ2MUgyVjVabTIgN3YtMUgydjFoMlptMTAtMXYxaC0ydi0xaDJabS0zIDF2LTFINXYxaDZaTTUgNWgxdjFINVY1Wk0zIDdIMnYxaDFWN1ptMyAwaDF2MUg2VjdaTTMgOUgydjFoMVY5Wm0zIDBoMXYxSDZWOVptMi00SDd2MWgxVjVaTTQgN2gxdjFINFY3Wm01IDBIOHYxaDFWN1ptMSAwaDF2MWgtMVY3Wk01IDlINHYxaDFWOVptMyAwaDF2MUg4VjlabTMgMGgtMXYxaDFWOVpNOSA1aDF2MUg5VjVabTMgMGgtMXYxaDFWNVptMSAwaDF2MWgtMVY1Wm0xIDJoLTJ2M2gyVjdaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS2V5Ym9hcmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uS3FsRmllbGQgPSBmdW5jdGlvbiBFdWlJY29uS3FsRmllbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTAsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTBcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDlhNSA1IDAgMSAxIDAtOCA1IDUgMCAxIDEgMCA4Wm0uNzUtLjY5MmE0IDQgMCAxIDAgMC02LjYxNUE0Ljk4MSA0Ljk4MSAwIDAgMSAxMCA1YTQuOTgxIDQuOTgxIDAgMCAxLTEuMjUgMy4zMDhaTTQuMTMzIDhWNS41NTloMi40OTZ2LS42MjVINC4xMzNWMi45OTZoMi43MTl2LS42MzNIMy40M1Y4aC43MDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LcWxGaWVsZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25LcWxGdW5jdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25LcWxGdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgN0gzdjJoNHYybDMtMy0zLTN2MlpNNiA2VjVhMSAxIDAgMCAxIDEuNzA3LS43MDdsMyAzYTEgMSAwIDAgMSAwIDEuNDE0bC0zIDNBMSAxIDAgMCAxIDYgMTF2LTFIM2ExIDEgMCAwIDEtMS0xVjdhMSAxIDAgMCAxIDEtMWgzWm03LjUtM2EuNS41IDAgMCAxIC41LjV2OWEuNS41IDAgMSAxLTEgMHYtOWEuNS41IDAgMCAxIC41LS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uS3FsT3BlcmFuZCA9IGZ1bmN0aW9uIEV1aUljb25LcWxPcGVyYW5kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTEuMTkyIDEwLjE0NSAyLjI5OC0xLjc5MmMuMjU5LS4xOTYuMjU5LS41MDkgMC0uNzA2bC0yLjI5OC0xLjc5MmMtLjI1Ni0uMTk2LS4yNTYtLjUxMyAwLS43MDhhLjgxLjgxIDAgMCAxIC45MyAwbDIuMyAxLjc5MWMuNzcyLjU5Ljc3IDEuNTM3IDAgMi4xMjRsLTIuMyAxLjc5MWEuODEuODEgMCAwIDEtLjkzIDBjLS4yNTYtLjE5NS0uMjU2LS41MTIgMC0uNzA4Wm0tNi4zODQtNC4yOUwyLjUxIDcuNjQ3Yy0uMjU5LjE5Ni0uMjU5LjUwOSAwIC43MDZsMi4yOTggMS43OTJjLjI1Ni4xOTYuMjU2LjUxMyAwIC43MDhhLjgxLjgxIDAgMCAxLS45MyAwbC0yLjMtMS43OTFjLS43NzItLjU5LS43Ny0xLjUzNyAwLTIuMTI0bDIuMy0xLjc5MWEuODEuODEgMCAwIDEgLjkzIDBjLjI1Ni4xOTUuMjU2LjUxMiAwIC43MDhaTTYuNSA2aDNhLjUuNSAwIDAgMSAwIDFoLTNhLjUuNSAwIDAgMSAwLTFabTAgM2gzYS41LjUgMCAwIDEgMCAxaC0zYS41LjUgMCAwIDEgMC0xWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsT3BlcmFuZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25LcWxTZWxlY3RvciA9IGZ1bmN0aW9uIEV1aUljb25LcWxTZWxlY3RvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTJhNCA0IDAgMSAwIDAtOCA0IDQgMCAwIDAgMCA4Wm0wIDFBNSA1IDAgMSAxIDUgM2E1IDUgMCAwIDEgMCAxMFptNi0xYTQgNCAwIDEgMCAwLTggNCA0IDAgMCAwIDAgOFptMCAxYTUgNSAwIDEgMSAwLTEwIDUgNSAwIDAgMSAwIDEwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsU2VsZWN0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uS3FsVmFsdWUgPSBmdW5jdGlvbiBFdWlJY29uS3FsVmFsdWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRhNSA1IDAgMSAxIDAgOCA1IDUgMCAxIDEgMC04Wm0tLjc1LjY5MmE0IDQgMCAxIDAgMCA2LjYxNUE0Ljk4MSA0Ljk4MSAwIDAgMSA2IDhjMC0xLjI2OC40NzItMi40MjYgMS4yNS0zLjMwOFpNMTEuMzQ4IDExbDIuMDc4LTUuNjM3aC0uNzM5bC0xLjY1NiA0LjcyN2gtLjA2Mkw5LjMxMyA1LjM2M2gtLjczOUwxMC42NTIgMTFoLjY5NlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbFZhbHVlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkt1YmVybmV0ZXNOb2RlID0gZnVuY3Rpb24gRXVpSWNvbkt1YmVybmV0ZXNOb2RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDExLjQyVjQuNThMOCAxLjE1MiAyIDQuNTh2Ni44NGw2IDMuNDI4IDYtMy40Mjh6TTggMTZsNy00VjRMOCAwIDEgNHY4bDcgNHpNOCA0LjYwN2wzIDEuNzE0VjkuNjhsLTMgMS43MTQtMy0xLjcxNFY2LjMybDMtMS43MTR6bTQgMS4xMzR2NC41MThsLTQgMi4yODYtNC0yLjI4NlY1Ljc0MWw0LTIuMjg2IDQgMi4yODZ6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3ViZXJuZXRlc05vZGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uS3ViZXJuZXRlc1BvZCA9IGZ1bmN0aW9uIEV1aUljb25LdWJlcm5ldGVzUG9kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDUuMTUxdjYuMjY5bC01LjUgMy4xNDJWOC4yOUwxNCA1LjE1MXptLS41MDgtLjg2MUw4IDEuMTUyIDIuNTA4IDQuMjkgOCA3LjQyNGw1LjQ5Mi0zLjEzNHpNMiA1LjE1MWw1LjUgMy4xNHY2LjI3MkwyIDExLjQyVjUuMTV6TTE1IDEybC03IDQtNy00VjRsNy00IDcgNHY4elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkt1YmVybmV0ZXNQb2Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTGF1bmNoID0gZnVuY3Rpb24gRXVpSWNvbkxhdW5jaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMCA0YTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNFpNOSA2YTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgMFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi42NzkgMTIuOTY3Yy4zNTMtLjEzNi42OTctLjMgMS4wMzMtLjQ3NWwxLjM2IDIuMjY1YS41LjUgMCAwIDAgLjgyOC4wNDNsMy00YS41LjUgMCAwIDAtLjA0Ni0uNjU0bC0uODg2LS44ODZDMTMuNjA0IDcuNDU2IDE1IDQuOTEzIDE1IDEuNWEuNS41IDAgMCAwLS41LS41Yy0zLjQxMyAwLTUuOTU2IDEuMzk1LTcuNzYgMy4wMzNsLS44ODYtLjg4N0EuNS41IDAgMCAwIDUuMiAzLjFsLTQgM2EuNS41IDAgMCAwIC4wNDMuODI5bDIuMjY0IDEuMzU4YTkuNTkgOS41OSAwIDAgMC0uNDc1IDEuMDM2di4wMDFhLjUuNSAwIDAgMCAuMTE0LjUzbDMgM2MuMTM5LjEzOC4zNS4xODIuNTMzLjExM1pNNC4wOSA5LjM4NGwyLjUyNSAyLjUyNWExNC42MTYgMTQuNjE2IDAgMCAwIDMuNTU1LTIuMjg1YzEuODQxLTEuNjEyIDMuNjU3LTQuMDc2IDMuODE4LTcuNjEyLTMuNTM3LjE2LTYuMDAxIDEuOTc2LTcuNjEzIDMuODE3QTE0LjYxNyAxNC42MTcgMCAwIDAgNC4wOSA5LjM4NFptLS4wOTYtMS45N2ExNS42MTYgMTUuNjE2IDAgMCAxIDIuMDMtMi42ODJsLS41NzItLjU3Mi0zLjA1OCAyLjI5NCAxLjYuOTZabTUuNTUxIDYuMTkxLS45Ni0xLjZhMTUuNjE3IDE1LjYxNyAwIDAgMCAyLjY4Mi0yLjAzbC41NzIuNTcyLTIuMjk0IDMuMDU4WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMuODU0IDEyLjE0NmEuNS41IDAgMCAxIDAgLjcwOGwtMiAyYS41LjUgMCAwIDEtLjcwOC0uNzA4bDItMmEuNS41IDAgMCAxIC43MDggMFptMiAxLjcwOGEuNS41IDAgMCAwLS43MDgtLjcwOGwtMSAxYS41LjUgMCAwIDAgLjcwOC43MDhsMS0xWm0tMy0zLjcwOGEuNS41IDAgMCAxIDAgLjcwOGwtMSAxYS41LjUgMCAwIDEtLjcwOC0uNzA4bDEtMWEuNS41IDAgMCAxIC43MDggMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxhdW5jaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25MYXllcnMgPSBmdW5jdGlvbiBFdWlJY29uTGF5ZXJzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yNzYgMS4wNTNhLjUuNSAwIDAgMSAuNDQ4IDBsNiAzYS41LjUgMCAwIDEgMCAuODk0bC02IDNhLjUuNSAwIDAgMS0uNDQ4IDBsLTYtM2EuNS41IDAgMCAxIDAtLjg5NGw2LTN6TTIuNjE4IDQuNSA3LjUgNi45NDEgMTIuMzgyIDQuNSA3LjUgMi4wNTkgMi42MTggNC41elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS4wNTMgNy4yNzZhLjUuNSAwIDAgMSAuNjctLjIyM0w3LjUgOS45NGw1Ljc3Ni0yLjg4OGEuNS41IDAgMSAxIC40NDguODk0bC02IDNhLjUuNSAwIDAgMS0uNDQ4IDBsLTYtM2EuNS41IDAgMCAxLS4yMjMtLjY3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS43MjQgMTAuMDUzYS41LjUgMCAxIDAtLjQ0OC44OTRsNiAzYS41LjUgMCAwIDAgLjQ0OCAwbDYtM2EuNS41IDAgMSAwLS40NDgtLjg5NEw3LjUgMTIuOTRsLTUuNzc2LTIuODg4elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGF5ZXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxldHRlcmluZyA9IGZ1bmN0aW9uIEV1aUljb25MZXR0ZXJpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJtNSAzIDMgOUg3TDYgOUgzbC0xIDNIMWwzLTloMXptLS41IDEuNUw1LjY2NyA4SDMuMzMzTDQuNSA0LjV6bTcuOTkgMS42NDdDMTIuMTYgNi4wMDUgMTEuNzYgNiAxMS41IDZjLS4zNTkgMC0xLjAyMi4xNzUtMS42MzIuODM4bC0uNzM2LS42NzZDOS45MjkgNS4yOTQgMTAuODU5IDUgMTEuNSA1aC4wMTZjLjI1IDAgLjgzNiAwIDEuMzY5LjIyOC4yODEuMTIuNTY4LjMxMy43ODIuNjE3LjIxNi4zMDcuMzMzLjY5My4zMzMgMS4xNTV2NWgtMXYtLjM1NGEyLjEwMSAyLjEwMSAwIDAgMS0uMDY0LjAzOGMtLjU1NC4zMTctMS4xNjYuMzE2LTEuNDIuMzE2aC0uMDMyYy0uMjUgMC0uODM2IDAtMS4zNjgtLjIyOGExLjgxIDEuODEgMCAwIDEtLjc4My0uNjE3QzkuMTE3IDEwLjg0OCA5IDEwLjQ2MiA5IDEwYzAtLjQ2Mi4xMTctLjg0OC4zMzMtMS4xNTUuMjE0LS4zMDQuNS0uNDk2Ljc4My0uNjE3QzEwLjY0OCA4IDExLjIzMyA4IDExLjQ4NCA4aC4wMTZjLjI1OCAwIC42OS0uMDAzIDEuMDUtLjEwNmEuODg5Ljg4OSAwIDAgMCAuMzY0LS4xNzljLjA1My0uMDUuMDg2LS4xMDguMDg2LS4yMTVWN2MwLS4yODgtLjA3LS40NjUtLjE1MS0uNThhLjgxNC44MTQgMCAwIDAtLjM1OC0uMjczek0xMyA4LjhjLS4wNi4wMjItLjExOC4wNC0uMTc1LjA1N0MxMi4zMiA5IDExLjc2MiA5IDExLjUxMyA5SDExLjVjLS4yNTkgMC0uNjYuMDA1LS45OS4xNDdhLjgxNC44MTQgMCAwIDAtLjM1OS4yNzRjLS4wOC4xMTQtLjE1MS4yOTEtLjE1MS41NzlzLjA3LjQ2NS4xNTEuNThhLjgxMy44MTMgMCAwIDAgLjM1OC4yNzNjLjMzMS4xNDIuNzMyLjE0Ny45OTEuMTQ3LjI1NyAwIC42My0uMDA4Ljk0LS4xODQuMjU1LS4xNDYuNTYtLjQ2My41Ni0xLjMxNnYtLjcwMXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxldHRlcmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25MaW5lRGFzaGVkID0gZnVuY3Rpb24gRXVpSWNvbkxpbmVEYXNoZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi43MDcgNC43MDdhMSAxIDAgMSAxLTEuNDE0LTEuNDE0bDItMmExIDEgMCAxIDEgMS40MTQgMS40MTRsLTIgMnptLTYuNDE0IDVhMSAxIDAgMCAwIDEuNDE0IDBsMi0yYTEgMSAwIDEgMC0xLjQxNC0xLjQxNGwtMiAyYTEgMSAwIDAgMCAwIDEuNDE0em0tNSA1YTEgMSAwIDAgMCAxLjQxNCAwbDItMmExIDEgMCAxIDAtMS40MTQtMS40MTRsLTIgMmExIDEgMCAwIDAgMCAxLjQxNHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVEYXNoZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTGluZURvdHRlZCA9IGZ1bmN0aW9uIEV1aUljb25MaW5lRG90dGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNSAzYTEuNSAxLjUgMCAxIDAgMC0zIDEuNSAxLjUgMCAwIDAgMCAzek0xMSA1LjVhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDB6TTUuNSAxMWExLjUgMS41IDAgMSAwIDAtMyAxLjUgMS41IDAgMCAwIDAgM3ptLTQgNGExLjUgMS41IDAgMSAwIDAtMyAxLjUgMS41IDAgMCAwIDAgM3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVEb3R0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTGluZVNvbGlkID0gZnVuY3Rpb24gRXVpSWNvbkxpbmVTb2xpZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMjkzIDE0LjcwN2ExIDEgMCAwIDAgMS40MTQgMGwxMi0xMmExIDEgMCAxIDAtMS40MTQtMS40MTRsLTEyIDEyYTEgMSAwIDAgMCAwIDEuNDE0elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGluZVNvbGlkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxpbmsgPSBmdW5jdGlvbiBFdWlJY29uTGluayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNjYgMy44MDNhLjUuNSAwIDEgMS0uNzA2LS43MDdMOS4yNjguNzhjMS4xODctMS4xODcgMy4yNDItMSA0LjU5Ni4zNTRzMS41NCAzLjQwOS4zNTQgNC41OTZsLTMuNTM2IDMuNTM2Yy0xLjE4NyAxLjE4Ny0zLjI0MiAxLTQuNTk2LS4zNTRhLjUuNSAwIDEgMSAuNzA3LS43MDdjLjk5Ljk5IDIuNDE3IDEuMTE5IDMuMTgyLjM1NGwzLjUzNi0zLjUzNmMuNzY1LS43NjUuNjM1LTIuMTkzLS4zNTQtMy4xODItLjk5LS45OS0yLjQxNy0xLjExOS0zLjE4Mi0uMzU0TDcuNjYxIDMuODAzWm0tLjMyIDcuMzkyYS41LjUgMCAxIDEgLjcwNy43MDdsLTIuMzE1IDIuMzE0Yy0xLjE4NyAxLjE4OC0zLjI0MiAxLTQuNTk2LS4zNTMtMS4zNTQtMS4zNTQtMS41NC0zLjQxLS4zNTMtNC41OTZMNC4zMTggNS43M2MxLjE4Ny0xLjE4NyAzLjI0Mi0xIDQuNTk2LjM1NGEuNS41IDAgMCAxLS43MDcuNzA3Yy0uOTg5LS45OS0yLjQxNi0xLjEyLTMuMTgyLS4zNTRMMS40OSA5Ljk3NGMtLjc2Ni43NjUtLjYzNiAyLjE5My4zNTMgMy4xODIuOTkuOTg5IDIuNDE3IDEuMTE5IDMuMTgyLjM1M2wyLjMxNS0yLjMxNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTGlzdCA9IGZ1bmN0aW9uIEV1aUljb25MaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA0VjNoMnYxSDJabTQgMFYzaDh2MUg2Wm0wIDNWNmg4djFINlptMCAzVjloOHYxSDZaTTIgN1Y2aDJ2MUgyWm0wIDNWOWgydjFIMlptNCAzdi0xaDh2MUg2Wm0tNCAwdi0xaDJ2MUgyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25MaXN0QWRkID0gZnVuY3Rpb24gRXVpSWNvbkxpc3RBZGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSAxMUg5djFoMnYyaDF2LTJoMnYtMWgtMlY5aC0xdjJaTTcuNzU4IDlhNC41IDQuNSAwIDEgMS0uNTAyIDRINnYtMWgxLjAyN2E0LjU0OCA0LjU0OCAwIDAgMSAuMjMtMkg2VjloMS43NThaTTIgNFYzaDJ2MUgyWm00IDBWM2g4djFINlptMCAzVjZoOHYxSDZaTTIgN1Y2aDJ2MUgyWm0wIDNWOWgydjFIMlptMCAzdi0xaDJ2MUgyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGlzdEFkZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2NrID0gZnVuY3Rpb24gRXVpSWNvbkxvY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDV2LS44QzQgMS44OCA1Ljc5IDAgOCAwczQgMS44OCA0IDQuMlY1aDEuMTQzYy40NzMgMCAuODU3LjQ0OC44NTcgMXY5YzAgLjU1Mi0uMzg0IDEtLjg1NyAxSDIuODU3QzIuMzg0IDE2IDIgMTUuNTUyIDIgMTVWNmMwLS41NTIuMzg0LTEgLjg1Ny0xSDRaTTMgMTVoMTBWNkgzdjlabTUuOTk4LTMuNzA2TDkuNSAxMi41aC0zbC41MDItMS4yMDZBMS42NDQgMS42NDQgMCAwIDEgNi41IDEwLjFjMC0uODgzLjY3Mi0xLjYgMS41LTEuNnMxLjUuNzE3IDEuNSAxLjZjMCAuNDc1LS4xOTQuOTAxLS41MDIgMS4xOTRaTTExIDQuMzZDMTEgMi41MDQgOS42NTcgMSA4IDFTNSAyLjUwNCA1IDQuMzZWNWg2di0uNjRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2NrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvY2tPcGVuID0gZnVuY3Rpb24gRXVpSWNvbkxvY2tPcGVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMTQzIDVjLjQ3MyAwIC44NTcuNDQ4Ljg1NyAxdjljMCAuNTUyLS4zODQgMS0uODU3IDFILjg1N0MuMzg0IDE2IDAgMTUuNTUyIDAgMTVWNmMwLS41NTIuMzg0LTEgLjg1Ny0xSDh2LS44QzggMS44OCA5Ljc5IDAgMTIgMHM0IDEuODggNCA0LjJWNWgtMXYtLjY0QzE1IDIuNTA0IDEzLjY1NyAxIDEyIDFTOSAyLjUwNCA5IDQuMzZWNWgyLjE0M1pNMSAxNWgxMFY2SDF2OVptNS45OTgtMy43MDZMNy41IDEyLjVoLTNsLjUwMi0xLjIwNkExLjY0NCAxLjY0NCAwIDAgMSA0LjUgMTAuMWMwLS44ODMuNjcyLTEuNiAxLjUtMS42czEuNS43MTcgMS41IDEuNmMwIC40NzUtLjE5NC45MDEtLjUwMiAxLjE5NFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvY2tPcGVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ1BhdHRlcm5BbmFseXNpcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dQYXR0ZXJuQW5hbHlzaXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDFoMTBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlYzYTIgMiAwIDAgMSAyLTJabTAgMWExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDAgMCAxIDFoMTBhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFIM1ptLjUgMWg0YS41LjUgMCAwIDEgMCAxaC00YS41LjUgMCAwIDEgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDNhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDNhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWm0wIDNoLTRhLjUuNSAwIDAgMCAwIDFoNGEuNS41IDAgMCAwIDAtMVptLTggMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWm0yIDBhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjUgNmgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWm0yIDBhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTYgNmgtNGEuNS41IDAgMCAwIDAgMWg0YS41LjUgMCAwIDAgMC0xWm0tOCAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFabTIgMGEuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNSAxMmgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWm0yIDBhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMtOWEuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgM2EuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgM2EuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgM2EuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgM2EuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgM2EuNS41IDAgMSAwIDAgMSAuNS41IDAgMCAwIDAtMVptMyAwaC0xYS41LjUgMCAwIDAgMCAxaDFhLjUuNSAwIDAgMCAwLTFabS0zIDZhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDlhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDlhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDlhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDlhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDlhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDlhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDlhLjUuNSAwIDEgMCAwIDEgLjUuNSAwIDAgMCAwLTFabTMgMGgtMWEuNS41IDAgMCAwIDAgMWgxYS41LjUgMCAwIDAgMC0xWm0tNSAwaC00YS41LjUgMCAwIDAgMCAxaDRhLjUuNSAwIDAgMCAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dQYXR0ZXJuQW5hbHlzaXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nUmF0ZUFuYWx5c2lzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ1JhdGVBbmFseXNpcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSAxM2EuNS41IDAgMCAxLS41LS41VjExSDd2MS41YS41LjUgMCAwIDEtMSAwVjlINHYzLjVhLjUuNSAwIDAgMS0xIDB2LTRhLjUuNSAwIDAgMSAuNS0uNWgzYS41LjUgMCAwIDEgLjUuNVYxMGgyVjEuNWEuNS41IDAgMCAxIC41LS41aDNhLjUuNSAwIDAgMSAuNS41djExYS41LjUgMCAwIDEtLjUuNWgtM1ptLTggMmEuNS41IDAgMCAxIDAtMWgxM2EuNS41IDAgMCAxIDAgMWgtMTNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dSYXRlQW5hbHlzaXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0Flcm9zcGlrZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQWVyb3NwaWtlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0M0MzczQVwiLFxuICAgIGQ6IFwiTTAgMzEuODA2aDMyVi43NzZIMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwibTE5LjQ0OCAxMi41MDgtOC45ODYgMy44NiA4Ljk4NiAzLjg4M3YtNy43NDNabS0xMS4zMDQgNC43My0yLjA5NC0uODYzIDIuMDk0LS45MzEgMTcuNzQ5LTcuNzQxdjIuMDYybC00LjY1NCAxLjk5djkuMjVsNC42NTQgMi4wMXYxLjk2OEw4LjE0MyAxNy4yNFpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQWVyb3NwaWtlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29BcGFjaGUgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0FwYWNoZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19hcGFjaGUnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICB4MTogXCIyMS45MDIlXCIsXG4gICAgeDI6IFwiMTQxLjg3OSVcIixcbiAgICB5MTogXCI2My45MDUlXCIsXG4gICAgeTI6IFwiMjAuMjEzJVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0Y2OTkyM1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMxLjIzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRjc5QTIzXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiODMuODMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICB4MTogXCItMjE3LjY1MSVcIixcbiAgICB4MjogXCI3NC43NDMlXCIsXG4gICAgeTE6IFwiMTc3LjEyNyVcIixcbiAgICB5MjogXCIzNi42NjUlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMi4zMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlFMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjYzLjAyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzkyMDM3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUuMTQlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIzMzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICB4MTogXCItODAuMDQ0JVwiLFxuICAgIHgyOiBcIjE0Ni4yNCVcIixcbiAgICB5MTogXCI3My41NzQlXCIsXG4gICAgeTI6IFwiMzEuNTM5JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgeDE6IFwiLTE4LjMxNiVcIixcbiAgICB4MjogXCIxNjUuMDAyJVwiLFxuICAgIHkxOiBcIjUyLjQ5NyVcIixcbiAgICB5MjogXCI0MS42NTYlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMjgyNjYyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiOS41NDglXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2NjJFOERcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3OC44MiVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlGMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjk0Ljg3JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMDMyXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdlJyksXG4gICAgeDE6IFwiLTEwOS43MDElXCIsXG4gICAgeDI6IFwiNjQuNjE3JVwiLFxuICAgIHkxOiBcIjQ2My43MTUlXCIsXG4gICAgeTI6IFwiMTcuMTklXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMi4zMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlFMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjYzLjAyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzkyMDM3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUuMTQlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIzMzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2YnKSxcbiAgICB4MTogXCItMzQuODglXCIsXG4gICAgeDI6IFwiMTEwLjU5OSVcIixcbiAgICB5MTogXCIxMzAuNTIyJVwiLFxuICAgIHkyOiBcIi05LjExOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMyLjMzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUUyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNjMuMDIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDOTIwMzdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3NS4xNCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjMzNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0U5NzgyNlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZycpLFxuICAgIHgxOiBcIi0xMy42NzMlXCIsXG4gICAgeDI6IFwiMTE3Ljg1OCVcIixcbiAgICB5MTogXCIxOTIuNTY0JVwiLFxuICAgIHkyOiBcIi0xMzYuOTA2JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzI4MjY2MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjkuNTQ4JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNjYyRThEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzguODIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RjIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5NC44NyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjAzMlwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xMy42MjguMThjLS40OTguMjkzLTEuMzMyIDEuMTM0LTIuMzI4IDIuMzQ4di4wNzRsLjg3MSAxLjYxMy4wNDQuMDNjLjY0MS0uOTE0IDEuMjg5LTEuNzQyIDEuOTQ4LTIuNDQ2LjA1LS4wNTYuMDc1LS4wOC4wNzUtLjA4LS4wMjUuMDI0LS4wNS4wNTUtLjA3NS4wOC0uMjExLjIzNy0uODU5Ljk4NC0xLjgzIDIuNDc4bC4xMTIuMDI1czIuMjczLS4yMjQgMy4zNjgtLjQxbC4wNjItLjA1N2MuMzUtMS45NTUtLjM0Mi0yLjg1MS0uMzQyLTIuODUxUzE0LjY2MS0uNDIzIDEzLjYyOC4xOFpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTkuNTI1IDguNjk3Yy4yOC0uNTE2LjU2LTEuMDI3Ljg0LTEuNTE5LjI5My0uNTEuNTkyLTEuMDA4Ljg5Ny0xLjQ4OGEuMzk3LjM5NyAwIDAgMCAuMDUtLjA4N2MuMjk5LS40NzMuNTk4LS45MjEuOTAzLTEuMzU3TDExLjMgMi41MmMtLjA2OS4wODEtLjEzNy4xNjgtLjIwNi4yNTYtLjI2MS4zMy0uNTM1LjY3OC0uODE1IDEuMDUyYTUxLjc4MyA1MS43ODMgMCAwIDAtMS44OTMgMi43MDhjLS4yNjEuNDA1LS41My44MTYtLjc5IDEuMjQ1bC0uMDMyLjA1VjcuOWwxLjE0IDIuMjYuMDUuMDE5Yy4yNTUtLjQ5OC41MS0uOTk2Ljc3MS0xLjQ4MlpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTQuNTYzIDE5Ljc2Yy4yMDYtLjUzNS40MjQtMS4wNzcuNjQyLTEuNjI1LjIxMS0uNTIzLjQyMy0xLjA1Mi42NDctMS41OC4yMTgtLjUzLjQ0OC0xLjA2LjY3OS0xLjU5NS4yMzYtLjU0MS40NzMtMS4wODMuNzE2LTEuNjE4LjI0Mi0uNTMuNDg1LTEuMDU5LjczNC0xLjU4Mi4wODctLjE4Ni4xOC0uMzguMjc0LS41NjYuMTU2LS4zMjQuMzE4LS42NDguNDczLS45NjUuMDA3LS4wMTkuMDItLjAzMS4wMjUtLjA1TDcuNTY0IDcuODMybC0uMDU2LjA5M2MtLjI3NC40NTUtLjU1NC45MTUtLjgyMiAxLjM4OWE1NC41MzUgNTQuNTM1IDAgMCAwLTEuNDUgMi43MTRjLS4wNDQuMDg3LS4wODEuMTY4LS4xMjUuMjU1YTMyLjE1IDMyLjE1IDAgMCAwLS43MDMgMS41NDRjLS4yMzcuNTYtLjQ0OCAxLjA5Ni0uNjM1IDEuNjA2LS4xMjUuMzM3LS4yMy42NTQtLjMzNi45NjUtLjA4MS4yNjItLjE2Mi41My0uMjM3Ljc5MS0uMTguNjIzLS4zMyAxLjIzOS0uNDU0IDEuODYybC4wMTguMDc0IDEuMTQgMi4yNjYuMDM3LjAyYy4xNTUtLjQyNC4zMTctLjg0OC40ODUtMS4yODMuMDQ0LS4xMjUuMDk0LS4yNDMuMTM3LS4zNjhaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJyksIFwiKVwiKSxcbiAgICBkOiBcIk0yLjczMyAxOS4xMzJhMTguODQgMTguODQgMCAwIDAtLjMxMSAyLjI1M2MwIC4wMjUtLjAwNi4wNS0uMDA2LjA4MS0uMzc0LS41OTgtMS4zNy0xLjE3Ny0xLjM3LTEuMTc3LjcxNiAxLjAzNCAxLjI1OCAyLjA2MSAxLjMzOCAzLjA3LS4zOC4wOC0uOTAyLS4wMzgtMS41MTItLjI1NS42MjguNTc4IDEuMTAyLjc0IDEuMjg4Ljc4NC0uNTc5LjAzNy0xLjE4My40MzYtMS43OTMuODkuODktLjM2IDEuNjA3LS41MDQgMi4xMjMtLjM5Mi0uODE1IDIuMzEtMS42MyA0Ljg2Mi0yLjQ1MyA3LjU2NC4yNS0uMDc1LjM5OS0uMjQzLjQ4Ni0uNDczLjE0My0uNDkyIDEuMTE0LTMuNzA0IDIuNjI3LTcuOTMxLjA0NC0uMTE5LjA4Ny0uMjQzLjEzLS4zNjIuMDEzLS4wMy4wMjYtLjA2OC4wMzgtLjEuMTYyLS40NDEuMzI0LS44OTYuNDk4LTEuMzU2LjAzOC0uMTA2LjA4MS0uMjEyLjExOS0uMzE4di0uMDA2bC0xLjE5LTIuMzUzYzAgLjAzLS4wMDYuMDU2LS4wMTIuMDhaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdlJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xMi4zMzMgNC4yODNjLS4yNjguNDExLS41Ni44NzgtLjg3OCAxLjQwNy0uMDE4LjAyNS0uMDMuMDU2LS4wNS4wODFhNjIuNTM4IDYyLjUzOCAwIDAgMC0xLjY4NyAzLjA1Yy0uMjQ5LjQ4LS41MDQuOTg0LS43NjUgMS41MjZsLjA1Ni4wMjUgMi44OTUtLjMxMS4wNjgtLjA1Yy44NzgtLjQwNSAxLjI3LS43NzIgMS42NS0xLjMwMS4xLS4xNDMuMjA1LS4zLjMwNS0uNDU1LjMxMS0uNDg1LjYxNi0xLjAxNS44ODQtMS41NDQuMjYxLS41MS40OTItMS4wMi42NzItMS40NzVhNi41NiA2LjU2IDAgMCAwIC4zOTgtMS4zOTVjLTEuMTcuMjA2LTIuNjA4LjM5OS0zLjU0OC40NDJaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdmJyksIFwiKVwiKSxcbiAgICBkOiBcIk04Ljg0IDEwLjU5Yy0uMS4yMTItLjIwNS40My0uMzEuNjQ3LS4xMTMuMjM3LS4yMzEuNDg2LS4zNDMuNzM1LS4wNTYuMTI0LS4xMTkuMjU1LS4xNzUuMzgtLjE4LjM4Ni0uMzU0Ljc4NC0uNTQxIDEuMTk1YTEwNy4wMzUgMTA3LjAzNSAwIDAgMC0xLjM1NyAzLjE5NGMtLjIxOC41MjktLjQzNiAxLjA3Ny0uNjU0IDEuNjM3LS4yLjUwNC0uMzk5IDEuMDE1LS41OTggMS41NS0uMDEyLjAyNS0uMDE4LjA1LS4wMy4wNzUtLjIuNTMtLjM5NCAxLjA2OC0uNiAxLjYyMi0uMDA2LjAxMi0uMDE3LjA0NS0uMDIzLjA1N2wuMDQzLjAxLjg2Ni0uMDk0LjA0OC0uMDJjLS4wMTgtLjAwNi0uMDMtLjAzLS4wNDgtLjAzNyAxLjE0NS0uMTQzIDIuNjctMS4wMDIgMy42Ni0yLjA2LjQ1NS0uNDg2Ljg2Ni0xLjA2NSAxLjI1Mi0xLjczOC4yODYtLjUwNC41NDctMS4wNTguODAzLTEuNjc1LjIyNC0uNTM1LjQzNS0xLjEyLjY0LTEuNzQ5YTMuNDU3IDMuNDU3IDAgMCAxLS44OTYuMzExIDguOTc3IDguOTc3IDAgMCAxLS4xOC4wMzhjLS4wNjIuMDEyLS4xMjUuMDE4LS4xOC4wMyAxLjA3LS40MSAxLjc0My0xLjIwNyAyLjIzNC0yLjE3OC0uMjguMTkzLS43NC40NDItMS4yODguNTY2YTIuNTIgMi41MiAwIDAgMS0uMjMuMDQ0Yy0uMDIgMC0uMDM4LjAwNi0uMDU3LjAwNi4zNzQtLjE1NS42ODUtLjMzLjk1OS0uNTM1LjA1Ni0uMDQ0LjExMi0uMDg3LjE2OC0uMTM3LjA4MS0uMDc1LjE2Mi0uMTUuMjM3LS4yMjQuMDUtLjA1LjA5My0uMS4xNDMtLjE1Ni4xMDYtLjEyNC4yMDUtLjI2MS4yOTktLjQxLjAzLS4wNDQuMDU2LS4wOTQuMDg3LS4xMzguMDM3LS4wNjguMDY4LS4xMzcuMS0uMjA1LjE0OS0uMy4yNjctLjU2Ny4zNi0uODAzLjA1LS4xMTkuMDg4LS4yMjQuMTI1LS4zMy4wMTMtLjAzOC4wMjUtLjA4MS4wNDQtLjExOS4wMzctLjExMi4wNjgtLjIxMS4wOTMtLjMwNS4wMzctLjEzLjA1Ni0uMjM2LjA2OS0uMzExYTEuMDc3IDEuMDc3IDAgMCAxLS4xMjUuMDg3Yy0uMzI0LjE5My0uODc4LjM2OC0xLjMyNi40NDhsLjg4NC0uMS0uODg0LjFjLS4wNjIuMDEzLS4xMDYuMDItLjE1Ni4wMzIuMDA0LS4wMDUtLjk5NC4xMDEtMi45OTUuMzE2YTIuMzEzIDIuMzEzIDAgMCAwLS4xMTguMjQ0WlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZycpLCBcIilcIiksXG4gICAgZDogXCJNNC4xMTUgMjEuOTE0Yy0uMTU1LjQzLS4zMTcuODcyLS40NzMgMS4zMiAwIC4wMDYtLjAwNi4wMTMtLjAwNi4wMTktLjAyNS4wNjItLjA0NC4xMjQtLjA2OS4xOTMtLjEwNi4zMDUtLjE5OS41NzMtLjQxIDEuMTk1LjM0OC4xNjIuNjI4LjU4Ljg5NiAxLjA1OWExLjg3NiAxLjg3NiAwIDAgMC0uNjIzLTEuMzE0YzEuNzI1LjA3NSAzLjIxMy0uMzYxIDMuOTc5LTEuNjE5LjA2OC0uMTEyLjEzLS4yMy4xODYtLjM1NS0uMzQ4LjQ0Mi0uNzg0LjYzLTEuNTkzLjU4NmgtLjAwNy4wMDdjMS4yMDEtLjUzNiAxLjc5OS0xLjA1MiAyLjMzNC0xLjkwNS4xMjUtLjIwNi4yNS0uNDI0LjM3NC0uNjY3LTEuMDUyIDEuMDc4LTIuMjY2IDEuMzgzLTMuNTQzIDEuMTUybC0uOTU4LjEwNmMtLjAzMi4wNjktLjA2My4xNS0uMDk0LjIzWlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXBhY2hlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29BcHBTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0FwcFNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwODBENVwiLFxuICAgIGQ6IFwiTTE5LjUuOTM4YTcuMDAyIDcuMDAyIDAgMCAwLTcgMGwtOCA0LjYxOUE3IDcgMCAwIDAgMSAxMS42MnY5LjIzN2E3IDcgMCAwIDAgMy41IDYuMDYybDcuNSA0LjMzVjE3Ljk3OWE3IDcgMCAwIDEgMy41LTYuMDYyTDI3IDUuMjc2IDE5LjUuOTM5WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkuNS45MzhhNy4wMDIgNy4wMDIgMCAwIDAtNyAwTDUgNS4yNzdsMTEgNi4zNSAxMS02LjM1LTcuNS00LjM0WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwibTI4LjQzNSA3Ljc2LTEwLjAyNiA1Ljc5YTYuOTk0IDYuOTk0IDAgMCAxIDEuNTkgNC40Mjh2MTMuMjdsNy41LTQuMzNhNyA3IDAgMCAwIDMuNS02LjA2MXYtOS4yMzhhNi45OTIgNi45OTIgMCAwIDAtMS41ODYtNC40MjJsLS45NzguNTY0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0FwcFNlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQXdzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Bd3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMDE5IDEzLjg3OGMwIC4zOS4wNDIuNzA1LjExNy45MzYuMDg1LjIzMi4xOTEuNDg0LjM0Ljc1OGEuNDU0LjQ1NCAwIDAgMSAuMDc1LjI0MmMwIC4xMDUtLjA2NC4yMS0uMjAyLjMxNWwtLjY3LjQ0MmEuNTE0LjUxNCAwIDAgMS0uMjc3LjA5NWMtLjEwNyAwLS4yMTMtLjA1My0uMzItLjE0OGEzLjI1OCAzLjI1OCAwIDAgMS0uMzgzLS40OTQgOC4xMDkgOC4xMDkgMCAwIDEtLjMzLS42MmMtLjgzLjk2Ny0xLjg3MyAxLjQ1LTMuMTI4IDEuNDUtLjg5NCAwLTEuNjA3LS4yNTItMi4xMjktLjc1Ni0uNTIxLS41MDUtLjc4Ny0xLjE3OC0uNzg3LTIuMDIgMC0uODk0LjMxOS0xLjYyLjk2OC0yLjE2Ni42NS0uNTQ3IDEuNTExLS44MiAyLjYwNy0uODIuMzYyIDAgLjczNS4wMyAxLjEyOC4wODMuMzk0LjA1My43OTkuMTM3IDEuMjI0LjIzMnYtLjc2OGMwLS44LS4xNy0xLjM1Ny0uNS0xLjY4My0uMzQtLjMyNi0uOTE1LS40ODQtMS43MzUtLjQ4NC0uMzcyIDAtLjc1NS4wNDMtMS4xNDkuMTM3LS4zOTQuMDk1LS43NzcuMjEtMS4xNS4zNTgtLjE3LjA3My0uMjk3LjExNS0uMzcyLjEzNmEuNjYuNjYgMCAwIDEtLjE3LjAzMmMtLjE0OSAwLS4yMjMtLjEwNS0uMjIzLS4zMjZ2LS41MTVjMC0uMTY5LjAyLS4yOTUuMDc0LS4zNjhhLjc5Ni43OTYgMCAwIDEgLjI5OC0uMjIxYy4zNzMtLjE5LjgyLS4zNDcgMS4zNC0uNDc0YTYuNTI0IDYuNTI0IDAgMCAxIDEuNjYxLS4yYzEuMjY2IDAgMi4xOTIuMjg1IDIuNzg4Ljg1Mi41ODYuNTY4Ljg4NCAxLjQzLjg4NCAyLjU4OHYzLjQwN2guMDJabS00LjMyIDEuNmMuMzUgMCAuNzEyLS4wNjQgMS4wOTUtLjE5YTIuMzczIDIuMzczIDAgMCAwIDEuMDExLS42NzNjLjE3LS4yLjI5OC0uNDIxLjM2Mi0uNjczLjA2NC0uMjUzLjEwNy0uNTU4LjEwNy0uOTE2di0uNDQxYTguOTgyIDguOTgyIDAgMCAwLS45OC0uMTc5IDguMTEzIDguMTEzIDAgMCAwLTEtLjA2M2MtLjcxMyAwLTEuMjM0LjEzNy0xLjU4Ni40Mi0uMzUuMjg1LS41MjEuNjg0LS41MjEgMS4yMSAwIC40OTQuMTI4Ljg2Mi4zOTQgMS4xMTUuMjU1LjI2My42MjguMzkgMS4xMTcuMzlabTguNTQ1IDEuMTM1Yy0uMTkyIDAtLjMyLS4wMzItLjQwNS0uMTA1LS4wODUtLjA2My0uMTYtLjIxLS4yMjMtLjQxbC0yLjUwMS04LjEzYy0uMDY0LS4yMS0uMDk2LS4zNDctLjA5Ni0uNDIxIDAtLjE2OC4wODUtLjI2My4yNTYtLjI2M2gxLjA0M2MuMjAyIDAgLjM0LjAzMi40MTUuMTA1LjA4NS4wNjMuMTQ5LjIxLjIxMi40MWwxLjc4OCA2Ljk2MyAxLjY2LTYuOTYzYy4wNTQtLjIxLjExNy0uMzQ3LjIwMy0uNDEuMDg1LS4wNjMuMjM0LS4xMDUuNDI1LS4xMDVoLjg1MmMuMjAyIDAgLjM0LjAzMi40MjUuMTA1LjA4NS4wNjMuMTYuMjEuMjAzLjQxbDEuNjgxIDcuMDQ3IDEuODQxLTcuMDQ3Yy4wNjQtLjIxLjEzOC0uMzQ3LjIxMy0uNDEuMDg1LS4wNjMuMjIzLS4xMDUuNDE1LS4xMDVoLjk5Yy4xNyAwIC4yNjYuMDg0LjI2Ni4yNjMgMCAuMDUyLS4wMTEuMTA1LS4wMjIuMTY4LS4wMS4wNjMtLjAzMi4xNDctLjA3NC4yNjNsLTIuNTY1IDguMTNjLS4wNjQuMjEtLjEzOC4zNDctLjIyMy40MS0uMDg1LjA2My0uMjI0LjEwNS0uNDA1LjEwNWgtLjkxNWMtLjIwMiAwLS4zNC0uMDMxLS40MjYtLjEwNS0uMDg1LS4wNzMtLjE2LS4yMS0uMjAyLS40MmwtMS42NS02Ljc4NC0xLjYzOCA2Ljc3M2MtLjA1My4yMS0uMTE3LjM0Ny0uMjAyLjQyLS4wODYuMDc0LS4yMzUuMTA2LS40MjYuMTA2aC0uOTE1Wm0xMy42NzUuMjg0YTcuMTIyIDcuMTIyIDAgMCAxLTEuNjQtLjE5Yy0uNTMxLS4xMjYtLjk0Ni0uMjYyLTEuMjIzLS40Mi0uMTctLjA5NS0uMjg3LS4yLS4zMy0uMjk1YS43MzUuNzM1IDAgMCAxLS4wNjQtLjI5NHYtLjUzNmMwLS4yMjEuMDg1LS4zMjcuMjQ1LS4zMjdhLjYxLjYxIDAgMCAxIC4xOTIuMDMyYy4wNjMuMDIxLjE2LjA2My4yNjYuMTA1LjM2MS4xNTguNzU1LjI4NCAxLjE3LjM2OC40MjYuMDg0Ljg0LjEyNyAxLjI2Ny4xMjcuNjcgMCAxLjE5Mi0uMTE2IDEuNTUzLS4zNDhhMS4xMyAxLjEzIDAgMCAwIC41NTQtLjk5OWMwLS4yOTQtLjA5Ni0uNTM2LS4yODgtLjczNi0uMTkxLS4yLS41NTMtLjM3OS0xLjA3NC0uNTQ3bC0xLjU0NC0uNDczYy0uNzc2LS4yNDItMS4zNTEtLjYtMS43MDItMS4wNzNhMi40ODcgMi40ODcgMCAwIDEtLjUzMi0xLjUyNWMwLS40NDIuMDk1LS44My4yODctMS4xNjcuMTkyLS4zMzcuNDQ3LS42MzEuNzY2LS44NjMuMzItLjI0Mi42ODEtLjQyIDEuMTA3LS41NDdhNC42OSA0LjY5IDAgMCAxIDEuMzQtLjE3OGMuMjM1IDAgLjQ4LjAxLjcxNC4wNDIuMjQ1LjAzMS40NjguMDczLjY5Mi4xMTUuMjEyLjA1My40MTUuMTA1LjYwNi4xNjkuMTkyLjA2My4zNC4xMjYuNDQ3LjE4OWEuOTE4LjkxOCAwIDAgMSAuMzIuMjYzYy4wNjMuMDg0LjA5NS4yLjA5NS4zNDd2LjQ5NGMwIC4yMjEtLjA4NS4zMzctLjI0NS4zMzctLjA4NSAwLS4yMjMtLjA0Mi0uNDA0LS4xMjYtLjYwNy0uMjc0LTEuMjg4LS40MS0yLjA0My0uNDEtLjYwNyAwLTEuMDg2LjA5NC0xLjQxNi4yOTQtLjMzLjItLjUuNTA1LS41LjkzNiAwIC4yOTQuMTA3LjU0Ny4zMi43NDcuMjEyLjIuNjA2LjQgMS4xNy41NzhsMS41MTEuNDczYy43NjYuMjQyIDEuMzIuNTc5IDEuNjUgMS4wMS4zMy40MzEuNDkuOTI2LjQ5IDEuNDczIDAgLjQ1Mi0uMDk2Ljg2Mi0uMjc3IDEuMjJhMi44MzYgMi44MzYgMCAwIDEtLjc3Ny45MjVjLS4zMy4yNjMtLjcyNC40NTItMS4xODIuNTktLjQ3OC4xNDYtLjk3OS4yMi0xLjUyMS4yMlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIiNGOTBcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjguOTMgMjIuMDA5Yy0zLjUwMSAyLjU1Ni04LjU4OCAzLjkxMi0xMi45NjIgMy45MTItNi4xMyAwLTExLjY1My0yLjI0LTE1LjgyNS01Ljk2My0uMzMtLjI5NS0uMDMyLS42OTQuMzYyLS40NjMgNC41MTIgMi41ODcgMTAuMDc4IDQuMTU1IDE1LjgzNiA0LjE1NSAzLjg4NCAwIDguMTUxLS44IDEyLjA3OC0yLjQ0LjU4Ni0uMjYzIDEuMDg2LjM3OC41MTEuNzk5WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuMzg4IDIwLjM2OGMtLjQ0Ny0uNTY4LTIuOTU4LS4yNzMtNC4wOTctLjEzNy0uMzQuMDQyLS4zOTQtLjI1Mi0uMDg1LS40NzMgMi0xLjM4OCA1LjI4OS0uOTg5IDUuNjcyLS41MjYuMzgzLjQ3NC0uMTA3IDMuNzIzLTEuOTggNS4yOC0uMjg3LjI0Mi0uNTY0LjExNi0uNDM2LS4yLjQyNi0xLjA0MSAxLjM3My0zLjM4Ni45MjYtMy45NDRaXCJcbiAgfSkpKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Bd3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0F3c01vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0F3c01vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk05LjAxOSAxMy44NzhjMCAuMzkuMDQyLjcwNS4xMTcuOTM2LjA4NS4yMzIuMTkxLjQ4NC4zNC43NThhLjQ1NC40NTQgMCAwIDEgLjA3NS4yNDJjMCAuMTA1LS4wNjQuMjEtLjIwMi4zMTVsLS42Ny40NDJhLjUxNC41MTQgMCAwIDEtLjI3Ny4wOTVjLS4xMDcgMC0uMjEzLS4wNTMtLjMyLS4xNDhhMy4yNTggMy4yNTggMCAwIDEtLjM4My0uNDk0IDguMTA5IDguMTA5IDAgMCAxLS4zMy0uNjJjLS44My45NjctMS44NzMgMS40NS0zLjEyOCAxLjQ1LS44OTQgMC0xLjYwNy0uMjUyLTIuMTI5LS43NTYtLjUyMS0uNTA1LS43ODctMS4xNzgtLjc4Ny0yLjAyIDAtLjg5NC4zMTktMS42Mi45NjgtMi4xNjYuNjUtLjU0NyAxLjUxMS0uODIgMi42MDctLjgyLjM2MiAwIC43MzUuMDMgMS4xMjguMDgzLjM5NC4wNTMuNzk5LjEzNyAxLjIyNC4yMzJ2LS43NjhjMC0uOC0uMTctMS4zNTctLjUtMS42ODMtLjM0LS4zMjYtLjkxNS0uNDg0LTEuNzM1LS40ODQtLjM3MiAwLS43NTUuMDQzLTEuMTQ5LjEzNy0uMzk0LjA5NS0uNzc3LjIxLTEuMTUuMzU4LS4xNy4wNzMtLjI5Ny4xMTUtLjM3Mi4xMzZhLjY2LjY2IDAgMCAxLS4xNy4wMzJjLS4xNDkgMC0uMjIzLS4xMDUtLjIyMy0uMzI2di0uNTE1YzAtLjE2OS4wMi0uMjk1LjA3NC0uMzY4YS43OTYuNzk2IDAgMCAxIC4yOTgtLjIyMWMuMzczLS4xOS44Mi0uMzQ3IDEuMzQtLjQ3NGE2LjUyNCA2LjUyNCAwIDAgMSAxLjY2MS0uMmMxLjI2NiAwIDIuMTkyLjI4NSAyLjc4OC44NTIuNTg2LjU2OC44ODQgMS40My44ODQgMi41ODh2My40MDdoLjAyWm0tNC4zMiAxLjZjLjM1IDAgLjcxMi0uMDY0IDEuMDk1LS4xOWEyLjM3MyAyLjM3MyAwIDAgMCAxLjAxMS0uNjczYy4xNy0uMi4yOTgtLjQyMS4zNjItLjY3My4wNjQtLjI1My4xMDctLjU1OC4xMDctLjkxNnYtLjQ0MWE4Ljk4MiA4Ljk4MiAwIDAgMC0uOTgtLjE3OSA4LjExMyA4LjExMyAwIDAgMC0xLS4wNjNjLS43MTMgMC0xLjIzNC4xMzctMS41ODYuNDItLjM1LjI4NS0uNTIxLjY4NC0uNTIxIDEuMjEgMCAuNDk0LjEyOC44NjIuMzk0IDEuMTE1LjI1NS4yNjMuNjI4LjM5IDEuMTE3LjM5Wm04LjU0NSAxLjEzNWMtLjE5MiAwLS4zMi0uMDMyLS40MDUtLjEwNS0uMDg1LS4wNjMtLjE2LS4yMS0uMjIzLS40MWwtMi41MDEtOC4xM2MtLjA2NC0uMjEtLjA5Ni0uMzQ3LS4wOTYtLjQyMSAwLS4xNjguMDg1LS4yNjMuMjU2LS4yNjNoMS4wNDNjLjIwMiAwIC4zNC4wMzIuNDE1LjEwNS4wODUuMDYzLjE0OS4yMS4yMTIuNDFsMS43ODggNi45NjMgMS42Ni02Ljk2M2MuMDU0LS4yMS4xMTctLjM0Ny4yMDMtLjQxLjA4NS0uMDYzLjIzNC0uMTA1LjQyNS0uMTA1aC44NTJjLjIwMiAwIC4zNC4wMzIuNDI1LjEwNS4wODUuMDYzLjE2LjIxLjIwMy40MWwxLjY4MSA3LjA0NyAxLjg0MS03LjA0N2MuMDY0LS4yMS4xMzgtLjM0Ny4yMTMtLjQxLjA4NS0uMDYzLjIyMy0uMTA1LjQxNS0uMTA1aC45OWMuMTcgMCAuMjY2LjA4NC4yNjYuMjYzIDAgLjA1Mi0uMDExLjEwNS0uMDIyLjE2OC0uMDEuMDYzLS4wMzIuMTQ3LS4wNzQuMjYzbC0yLjU2NSA4LjEzYy0uMDY0LjIxLS4xMzguMzQ3LS4yMjMuNDEtLjA4NS4wNjMtLjIyNC4xMDUtLjQwNS4xMDVoLS45MTVjLS4yMDIgMC0uMzQtLjAzMS0uNDI2LS4xMDUtLjA4NS0uMDczLS4xNi0uMjEtLjIwMi0uNDJsLTEuNjUtNi43ODQtMS42MzggNi43NzNjLS4wNTMuMjEtLjExNy4zNDctLjIwMi40Mi0uMDg2LjA3NC0uMjM1LjEwNi0uNDI2LjEwNmgtLjkxNVptMTMuNjc1LjI4NGE3LjEyMiA3LjEyMiAwIDAgMS0xLjY0LS4xOWMtLjUzMS0uMTI2LS45NDYtLjI2Mi0xLjIyMy0uNDItLjE3LS4wOTUtLjI4Ny0uMi0uMzMtLjI5NWEuNzM1LjczNSAwIDAgMS0uMDY0LS4yOTR2LS41MzZjMC0uMjIxLjA4NS0uMzI3LjI0NS0uMzI3YS42MS42MSAwIDAgMSAuMTkyLjAzMmMuMDYzLjAyMS4xNi4wNjMuMjY2LjEwNS4zNjEuMTU4Ljc1NS4yODQgMS4xNy4zNjguNDI2LjA4NC44NC4xMjcgMS4yNjcuMTI3LjY3IDAgMS4xOTItLjExNiAxLjU1My0uMzQ4YTEuMTMgMS4xMyAwIDAgMCAuNTU0LS45OTljMC0uMjk0LS4wOTYtLjUzNi0uMjg4LS43MzYtLjE5MS0uMi0uNTUzLS4zNzktMS4wNzQtLjU0N2wtMS41NDQtLjQ3M2MtLjc3Ni0uMjQyLTEuMzUxLS42LTEuNzAyLTEuMDczYTIuNDg3IDIuNDg3IDAgMCAxLS41MzItMS41MjVjMC0uNDQyLjA5NS0uODMuMjg3LTEuMTY3LjE5Mi0uMzM3LjQ0Ny0uNjMxLjc2Ni0uODYzLjMyLS4yNDIuNjgxLS40MiAxLjEwNy0uNTQ3YTQuNjkgNC42OSAwIDAgMSAxLjM0LS4xNzhjLjIzNSAwIC40OC4wMS43MTQuMDQyLjI0NS4wMzEuNDY4LjA3My42OTIuMTE1LjIxMi4wNTMuNDE1LjEwNS42MDYuMTY5LjE5Mi4wNjMuMzQuMTI2LjQ0Ny4xODlhLjkxOC45MTggMCAwIDEgLjMyLjI2M2MuMDYzLjA4NC4wOTUuMi4wOTUuMzQ3di40OTRjMCAuMjIxLS4wODUuMzM3LS4yNDUuMzM3LS4wODUgMC0uMjIzLS4wNDItLjQwNC0uMTI2LS42MDctLjI3NC0xLjI4OC0uNDEtMi4wNDMtLjQxLS42MDcgMC0xLjA4Ni4wOTQtMS40MTYuMjk0LS4zMy4yLS41LjUwNS0uNS45MzYgMCAuMjk0LjEwNy41NDcuMzIuNzQ3LjIxMi4yLjYwNi40IDEuMTcuNTc4bDEuNTExLjQ3M2MuNzY2LjI0MiAxLjMyLjU3OSAxLjY1IDEuMDEuMzMuNDMxLjQ5LjkyNi40OSAxLjQ3MyAwIC40NTItLjA5Ni44NjItLjI3NyAxLjIyYTIuODM2IDIuODM2IDAgMCAxLS43NzcuOTI1Yy0uMzMuMjYzLS43MjQuNDUyLTEuMTgyLjU5LS40NzguMTQ2LS45NzkuMjItMS41MjEuMjJaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOC45MyAyMi4wMDljLTMuNTAxIDIuNTU2LTguNTg4IDMuOTEyLTEyLjk2MiAzLjkxMi02LjEzIDAtMTEuNjUzLTIuMjQtMTUuODI1LTUuOTYzLS4zMy0uMjk1LS4wMzItLjY5NC4zNjItLjQ2MyA0LjUxMiAyLjU4NyAxMC4wNzggNC4xNTUgMTUuODM2IDQuMTU1IDMuODg0IDAgOC4xNTEtLjggMTIuMDc4LTIuNDQuNTg2LS4yNjMgMS4wODYuMzc4LjUxMS43OTlaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC4zODggMjAuMzY4Yy0uNDQ3LS41NjgtMi45NTgtLjI3My00LjA5Ny0uMTM3LS4zNC4wNDItLjM5NC0uMjUyLS4wODUtLjQ3MyAyLTEuMzg4IDUuMjg5LS45ODkgNS42NzItLjUyNi4zODMuNDc0LS4xMDcgMy43MjMtMS45OCA1LjI4LS4yODcuMjQyLS41NjQuMTE2LS40MzYtLjIuNDI2LTEuMDQxIDEuMzczLTMuMzg2LjkyNi0zLjk0NFpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXdzTW9ubzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQXp1cmUgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0F6dXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA3MkM2XCIsXG4gICAgZDogXCJtMTcuNDQ4IDQtOS40MTQgOC4wMUwwIDI2LjE1N2g3LjI0M0wxNy40NDggNFpNMTguNyA1Ljg3NGwtNC4wMTggMTEuMTEgNy43MDQgOS40OTdMNy40NDEgMjloMjQuNDk0TDE4LjcgNS44NzRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXp1cmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0F6dXJlTW9ubyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXp1cmVNb25vKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTcuNDQ4IDQtOS40MTQgOC4wMUwwIDI2LjE1N2g3LjI0M0wxNy40NDggNFpNMTguNyA1Ljg3NGwtNC4wMTggMTEuMTEgNy43MDQgOS40OTdMNy40NDEgMjloMjQuNDk0TDE4LjcgNS44NzRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXp1cmVNb25vOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29CZWF0cyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQmVhdHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xNSAyMEg0VjBoMTFjNS41MjIgMCAxMCA0LjQ3OCAxMCAxMHMtNC40NzggMTAtMTAgMTBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQzJCM1wiLFxuICAgIGQ6IFwiTTI2LjcwMiAxNS42MjRDMjQuNiAxOS45NzkgMjAuMTUyIDIzIDE1IDIzSDR2OWgxNWM1LjUyMiAwIDEwLTQuNDc4IDEwLTEwYTkuOTUyIDkuOTUyIDAgMCAwLTIuMjk4LTYuMzc2XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNC4zMzggMTMuNTU0QTkuOTQyIDkuOTQyIDAgMCAwIDE5IDEySDR2OGgxMWM0LjI3IDAgNy45MDMtMi42OCA5LjMzOC02LjQ0NlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29CZWF0czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQnVzaW5lc3NBbmFseXRpY3MgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0J1c2luZXNzQW5hbHl0aWNzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0wIDIyYzAgNS41MjIgNC40NzggMTAgMTAgMTBWMTJDNC40NzggMTIgMCAxNi40NzggMCAyMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMTJ2MTBoMTBjMC01LjUyMi00LjQ3OC0xMC0xMC0xMFwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTEwIDB2OWM3LjE2OCAwIDEzIDUuODMyIDEzIDEzaDlDMzIgOS44NSAyMi4xNSAwIDEwIDBcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQnVzaW5lc3NBbmFseXRpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0NlcGggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0NlcGgoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDVDNTZcIixcbiAgICBkOiBcIk0yNS40NzEgMjcuNTZjLTEuMDYtLjU2Ny0xLjY3Ni0xLjIwNi0xLjgxMS0xLjkwMi0uMTMtLjY3My4xNy0xLjQyMS45MTgtMi4yODhhMTEuMjkgMTEuMjkgMCAwIDAgMi43NzMtNy40MkExMS4zMjQgMTEuMzI0IDAgMCAwIDE2LjA0MiA0LjY0bC0uMDUuMDAxaC0uMDVBMTEuMzI0IDExLjMyNCAwIDAgMCA0LjYzMiAxNS45NDlhMTEuMjkxIDExLjI5MSAwIDAgMCAyLjc3NCA3LjQyMmMuNzUzLjg3MiAxLjA0NyAxLjU5MS45MjggMi4yNTctLjEzLjY5NC0uNzQgMS4zNDItMS44MTcgMS45My0xLjY1Ny0xLjM3NS0zLjExNi0zLjIxMi00LjAxLTUuMDU2YTE0Ljk0MyAxNC45NDMgMCAwIDEtMS4xMTctMy4xMzlBMTQuOTk3IDE0Ljk5NyAwIDAgMSAxIDE1Ljk1YTE0LjkwMSAxNC45MDEgMCAwIDEgNC4zNzgtMTAuNTcgMTQuOTI0IDE0LjkyNCAwIDAgMSA0Ljc1Mi0zLjIwNEMxMS45NyAxLjM5NSAxMy45NS45OTYgMTUuOTQ4IDFoLjEwMWExNC44ODggMTQuODg4IDAgMCAxIDEwLjU3IDQuMzc4IDE0LjkxMiAxNC45MTIgMCAwIDEgMy45ODIgMTMuOTg1IDE0Ljg3MSAxNC44NzEgMCAwIDEtMS4xMTggMy4xNGMtLjkgMS44NDMtMi4zNTggMy42ODEtNC4wMSA1LjA1N2gtLjAwM1ptLTUuNTIzIDIuNzk4Yy0uMTczLS4xMS0uNzY3LS41NS0xLjM0NS0xLjM1M2E2LjEyMiA2LjEyMiAwIDAgMS0xLjE3NC0zLjczOCA4LjI2IDguMjYgMCAwIDEgLjYxMS0yLjk2NCA4LjQyIDguNDIgMCAwIDEgMS42MjctMi41NGwuMDA0LS4wMDguMTU0LS4xNzhjLjI2My0uMzA1LjUzNi0uNjIyLjc1My0uOTkuMjY4LS40NTQuNDYyLS45MzEuNTc4LTEuNDIuMTc4LS43NTguMTg4LTEuNTQ3LjAyOS0yLjMxYTUuMyA1LjMgMCAwIDAtLjg1OC0xLjk1NiA1LjI2NCA1LjI2NCAwIDAgMC00LjI5LTIuMjE3aC0uMTA4YTUuMjUgNS4yNSAwIDAgMC00LjI5IDIuMjE2IDUuMzEgNS4zMSAwIDAgMC0uODU2IDEuOTU2Yy0uMTYuNzYzLS4xNSAxLjU1Mi4wMyAyLjMxMS4xMTUuNDg4LjMxLjk2NS41NzYgMS40MTkuMjE5LjM3LjQ5LjY4NC43NTMuOTlsLjE1NS4xNzkuMDAzLjAwN2E4LjM4NCA4LjM4NCAwIDAgMSAxLjYyOCAyLjU0IDguMjQgOC4yNCAwIDAgMSAuNjEgMi45NjQgNi4xMjMgNi4xMjMgMCAwIDEtMS4xNzMgMy43MzhjLS41OC43OTUtMS4xNzQgMS4yNDMtMS4zNDYgMS4zNTJsLS44NjctLjI2YTE1LjQzNCAxNS40MzQgMCAwIDEtMi40OS0xLjA5OCA0LjI0NSA0LjI0NSAwIDAgMCAyLjIzNC0zLjczNmMwLTEuMDM0LS40MDMtMi4wMjgtMS4xOTUtMi45NWwtLjAzNC0uMDM0LS4yMzctLjI2LS42MzYtLjc0NmE4LjkyNCA4LjkyNCAwIDAgMS0xLjUyNS0zLjI2IDguOTgzIDguOTgzIDAgMCAxLS4wNS0zLjkwNSA4LjkwNiA4LjkwNiAwIDAgMSAxLjQ2LTMuMzEzQTguOTkzIDguOTkzIDAgMCAxIDExLjIzIDguMzlhOC45MzcgOC45MzcgMCAwIDEgNC43MDItMS4zNDRoLjExMmMuNDIgMCAuODQuMDI5IDEuMjU1LjA4OGE4LjkzOCA4LjkzOCAwIDAgMSAzLjQ0OCAxLjI1NiA5LjAwMyA5LjAwMyAwIDAgMSAyLjU1NCAyLjQwNCA5LjA5MyA5LjA5MyAwIDAgMSAxLjQ1OSAzLjMxMyA5LjA0MyA5LjA0MyAwIDAgMS0uMDUgMy45MTIgOC45MjUgOC45MjUgMCAwIDEtMS41MjYgMy4yNmMtLjIuMjY1LS40MDkuNDk1LS42MzcuNzQ1bC0uMjMuMjU0Yy0uMDE3LjAxNi0uMDMuMDI3LS4wNC4wNDMtLjgwNC45NjEtMS4xOTUgMS45MjctMS4xOTUgMi45NDhhNC4yNSA0LjI1IDAgMCAwIDIuMjM3IDMuNzM1Yy0uNzk1LjQ0MS0xLjYzLjgwOS0yLjQ5MSAxLjA5OGwtLjg2Mi4yNi0uMDE4LS4wMDRabS0zLjk1Ni0xMS4zMTRhMi45NTcgMi45NTcgMCAwIDEtMi45NTItMi45NTIgMi45NTcgMi45NTcgMCAwIDEgMi45NTItMi45NTIgMi45NTYgMi45NTYgMCAwIDEgMi45NSAyLjk1MiAyLjk1NyAyLjk1NyAwIDAgMS0yLjk1IDIuOTUyXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ2VwaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvQ2xvdWQgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Nsb3VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4zNyAxOC4zNTJjLjAzMi0uMDEuMDY2LS4wMTQuMS0uMDIzQTYgNiAwIDAgMSAxOCAxMFYwQzkuMTYzIDAgMiA3LjE2NCAyIDE2YzAgMi43OTMuNzIgNS40MTcgMS45NzYgNy43MDJhMTguOTQ3IDE4Ljk0NyAwIDAgMSA4LjM5My01LjM0OVwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwODBENVwiLFxuICAgIGQ6IFwiTTE4IDBBMTUuOTU5IDE1Ljk1OSAwIDAgMCA1LjcxNyA1Ljc1YTE2LjAwNiAxNi4wMDYgMCAwIDAgNy41NDEgNS4wMzJjLjcxLjIyIDEuNDc3LjEzNSAyLjE0Ni0uMTg4QTUuOTQgNS45NCAwIDAgMSAxOCAxMGE1Ljk0IDUuOTQgMCAwIDEgMi41OTYuNTk0Yy42NjkuMzIzIDEuNDM2LjQwOCAyLjE0Ni4xODhhMTYuMDEgMTYuMDEgMCAwIDAgNy41NDEtNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAgMCAxOCAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0yMi43NDIgMjEuMjE4Yy0uNzEtLjIyLTEuNDc4LS4xMzUtMi4xNDYuMTg4QTUuOTQ3IDUuOTQ3IDAgMCAxIDE4IDIyYTUuOTQgNS45NCAwIDAgMS0yLjU5Ni0uNTk0Yy0uNjY5LS4zMjMtMS40MzYtLjQwOC0yLjE0Ni0uMTg4YTE2LjAwNiAxNi4wMDYgMCAwIDAtNy41NCA1LjAzMkExNS45NTkgMTUuOTU5IDAgMCAwIDE4IDMyYzQuOTM2IDAgOS4zNDgtMi4yMzYgMTIuMjgzLTUuNzVhMTYuMDE2IDE2LjAxNiAwIDAgMC03LjU0LTUuMDMyXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0Nsb3VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29DbG91ZEVjZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ2xvdWRFY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCAwdjEwYTYgNiAwIDAgMC01LjUzIDguMzNjLS4wMzQuMDA5LS4wNjguMDEyLS4xLjAyM0ExOC45NDcgMTguOTQ3IDAgMCAwIDMuOTc1IDIzLjcgMTUuOTM0IDE1LjkzNCAwIDAgMSAyIDE2QzIgNy4xNjQgOS4xNjMgMCAxOCAwWm0wIDEzYTMgMyAwIDEgMSAwIDYgMyAzIDAgMCAxIDAtNlpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEFFRkFcIixcbiAgICBkOiBcIk0yMi43NDIgMjEuMjE4Yy0uNzEtLjIyLTEuNDc4LS4xMzUtMi4xNDYuMTg4QTUuOTQ3IDUuOTQ3IDAgMCAxIDE4IDIyYTUuOTQgNS45NCAwIDAgMS0yLjU5Ni0uNTk0Yy0uNjY5LS4zMjMtMS40MzYtLjQwOC0yLjE0Ni0uMTg4YTE2LjAwNiAxNi4wMDYgMCAwIDAtNy41NCA1LjAzMkExNS45NTkgMTUuOTU5IDAgMCAwIDE4IDMyYzQuOTM2IDAgOS4zNDgtMi4yMzYgMTIuMjgzLTUuNzVhMTYuMDE2IDE2LjAxNiAwIDAgMC03LjU0LTUuMDMyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xOCAwQTE1Ljk1OSAxNS45NTkgMCAwIDAgNS43MTcgNS43NWExNi4wMDYgMTYuMDA2IDAgMCAwIDcuNTQxIDUuMDMyYy43MS4yMiAxLjQ3Ny4xMzUgMi4xNDYtLjE4OEE1Ljk0IDUuOTQgMCAwIDEgMTggMTBhNS45NCA1Ljk0IDAgMCAxIDIuNTk2LjU5NGMuNjY5LjMyMyAxLjQzNi40MDggMi4xNDYuMTg4YTE2LjAxIDE2LjAxIDAgMCAwIDcuNTQxLTUuMDMyQTE1Ljk1OSAxNS45NTkgMCAwIDAgMTggMFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0Nsb3VkRWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Db2RlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Db2RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS43NSAxMiAxNiAzMmgxMGwtMy40LTEwLjg4QTEzIDEzIDAgMCAwIDEwLjE5IDEyaC0uNDRaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMjJBN0YzXCIsXG4gICAgZDogXCJNMjUuNzI1IDExLjkzQTE3IDE3IDAgMCAwIDkuNSAwSDZsMy43NSAxMmguNDRhMTMgMTMgMCAwIDEgMTIuNDEgOS4xMkwyNiAzMmg2bC02LjI3NS0yMC4wN1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAzNzdDQVwiLFxuICAgIGQ6IFwiTTcuOTEgMTYuMTc1IDAgMzJoMTIuODU1elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0NvZGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0NvZGVzYW5kYm94ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Db2Rlc2FuZGJveChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjczOCAyOC4wNDRWMTYuNjgxTDMuMTcyIDEwLjkxOXY2LjQ2bDUuMzIgMi42N3Y0Ljg4OWw2LjI0NiAzLjEwNlptMi4zNDQuMDY2IDYuMzU3LTMuMTd2LTUuMDAybDUuMzUzLTIuNjg2VjEwLjg3bC0xMS43MSA1Ljg1NFYyOC4xMVpNMjcuMzA2IDguOTkzbC02LjAwMy0zLjAxMi01LjI4NiAyLjY1Ni01LjMyNS0yLjY1OUw0LjYzNyA5LjAzbDExLjMxNyA1LjYzOCAxMS4zNTItNS42NzVaTS44MjggMjMuNzQ0VjguMzI0TDE1Ljk4MS42ODlsMTUuMTU1IDcuNjA0VjIzLjcyTDE1Ljk4IDMxLjI4LjgyOCAyMy43NDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ29kZXNhbmRib3g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0NvdWNoYmFzZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ291Y2hiYXNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUQyMjI2XCIsXG4gICAgZDogXCJNMTYuMDcyLjAyNEM3LjI5LjAyNC4xNDQgNy4xNDYuMTQ0IDE1Ljk1MmMwIDguNzgyIDcuMTIyIDE1LjkyOCAxNS45MjggMTUuOTI4QzI0Ljg1NCAzMS44OCAzMiAyNC43NTggMzIgMTUuOTUyIDMyIDcuMTQ2IDI0Ljg1NC4wMjQgMTYuMDcyLjAyNFptMTAuNzU1IDE4LjcxOWMwIC45NjItLjU1MyAxLjgwNC0xLjYzNiAxLjk5Ny0xLjg3Ny4zMzYtNS44MjMuNTMtOS4xMTkuNTMtMy4yOTYgMC03LjI0Mi0uMTk0LTkuMTE5LS41My0xLjA4Mi0uMTkzLTEuNjM2LTEuMDM1LTEuNjM2LTEuOTk3di02LjIwOGMwLS45NjIuNzQ2LTEuODUyIDEuNjM2LTEuOTk3LjU1NC0uMDk2IDEuODUzLS4xOTIgMi44NjQtLjE5Mi4zODUgMCAuNjk3LjI4OS42OTcuNzQ2djQuMzU1bDUuNTgyLS4xMiA1LjU4Mi4xMnYtNC4zNTVjMC0uNDU3LjMxMy0uNzQ2LjY5OC0uNzQ2IDEuMDEgMCAyLjMxLjA5NiAyLjg2My4xOTIuOTE0LjE0NSAxLjYzNiAxLjAzNSAxLjYzNiAxLjk5Ny0uMDQ4IDIuMDQ1LS4wNDggNC4xMzktLjA0OCA2LjIwOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Db3VjaGJhc2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0RvY2tlciA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRG9ja2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMTM2RUEzXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE4LjA5OSAxNS4xMDhoMy4zMDR2LTIuOTczSDE4LjF2Mi45NzN6bS0zLjkwNSAwaDMuMzA0di0yLjk3M2gtMy4zMDR2Mi45NzN6bS0zLjkwNSAwaDMuMzA0di0yLjk3M0gxMC4yOXYyLjk3M3ptLTMuOTA1IDBIOS42OXYtMi45NzNINi4zODR2Mi45NzN6bS0zLjkwNCAwaDMuMzA0di0yLjk3M0gyLjQ4djIuOTczem0zLjkwNC0zLjU2OEg5LjY5VjguNTY4SDYuMzg0djIuOTcyem0zLjkwNSAwaDMuMzA0VjguNTY4SDEwLjI5djIuOTcyem0zLjkwNSAwaDMuMzA0VjguNTY4aC0zLjMwNHYyLjk3MnptMC0zLjU2N2gzLjMwNFY1aC0zLjMwNHYyLjk3M3ptMTcuMTM5IDUuNDAyYy0uNzIyLS40NzgtMi4zOC0uNjUzLTMuNjU2LS40MTUtLjE2NC0xLjE5LS44MzQtMi4yMjEtMi4wNTItMy4xNTNsLS43LS40NjMtLjQ2OC42OTRjLS41OTguODkzLS44OTcgMi4xMy0uOCAzLjMxNy4wNDUuNDE4LjE4MyAxLjE2NC42MTcgMS44Mi0uNDMzLjIzMS0xLjI5LjU0OS0yLjQyLjUyOEguMTI0bC0uMDQzLjI0N2MtLjIwNCAxLjE5My0uMiA0LjkxNCAyLjI0IDcuNzc0QzQuMTc4IDI1Ljg5OCA2Ljk2IDI3IDEwLjU5IDI3YzcuODcgMCAxMy42OTMtMy41ODYgMTYuNDItMTAuMTA0IDEuMDczLjAyIDMuMzgxLjAwNiA0LjU2Ny0yLjIzNy4wMzEtLjA1MS4xMDItLjE4Ni4zMS0uNjFsLjExMy0uMjM0LS42NjctLjQ0elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0RvY2tlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvRHJvcHdpemFyZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRHJvcHdpemFyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19kcm9wd2l6YXJkJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKSxcbiAgICBkOiBcIk04IDI5LjYxczkuNTUgNC43NCAxNi44NTYtLjg5M2MtMS45MDUtNS4xMTQtNS4yNS0xOS44NjctNy4yMjYtMjYuMzgzLS40MjItMS4zODktLjQ5LTEuNTI3LS42NjMtMS45MDktLjk2NC0yLjEzNC0xLjk3OCA0LjE0Mi0zLjYyOCAxMC40NTlDMTIuNzQ5IDEzLjE0OCA4IDI5LjYxIDggMjkuNjFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIiksXG4gICAgZDogXCJNOS45MjYgMjguNTYzczguMTcgNC43OTQgMTQuOTMuMTU0Yy0uMTgtLjgwNy0uNjQyLTIuMTAzLS45NTUtMy4zMTEtMS42NjQtNi40MTYtNC42NzYtMTcuMjQ4LTYuMTQ0LTIyLjYyNi0xLjU5LTUuODIyLTIuMTA1Ljk4Ni0zLjk2MSA4LjIzLS41NjQgMi4yMDQtMy44NyAxNy41NTMtMy44NyAxNy41NTNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y5QTcyQlwiLFxuICAgIGQ6IFwibTEyLjE0IDI0LjQxLjg1LTEuNDY2Ljc5MyAxLjU0NC0uOTA4IDEuOTktLjczNS0yLjA2OVptNi45MzQtNS41NDUuODUtMS40NjUuNzkzIDEuNTQzLS45MDggMS45OS0uNzM1LTIuMDY4Wm0tNC43NDctNS44NTEuODUtMS40NjUuNzkyIDEuNTQzLS45MDggMS45OS0uNzM0LTIuMDY4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkYyMDBcIixcbiAgICBkOiBcIm0xMi4xNCAyNC40MS44NS0xLjcxNi43OTMgMS43OTQtLjkwNyAxLjQ2OC0uNzM2LTEuNTQ2Wm02LjkzNC01LjU0NS44NTEtMS43MTYuNzkyIDEuNzk0LS45MDYgMS40NjgtLjczNy0xLjU0NlptLTQuNzQ3LTUuODUxLjg1LTEuNzE2Ljc5MiAxLjc5NC0uOTA2IDEuNDY4LS43MzYtMS41NDZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzI0MjY1RFwiLFxuICAgIGQ6IFwiTTEyLjk4NyAyOC40MjJzNi4wODIgMS4wMTUgMTAuMDg2LTEuNTQ5Yy0uNTAyIDEuNTUtNC45OTEgMy4zMTQtMTAuMDg2IDEuNTVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIHgxOiAzMy40NzMsXG4gICAgeDI6IDcuNzUxLFxuICAgIHkxOiA3LjY3NCxcbiAgICB5MjogMjEuMzMxLFxuICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgc3RvcENvbG9yOiBcIiMzODcxQzFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC41MTUsXG4gICAgc3RvcENvbG9yOiBcIiMyQzM3OTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC44NjUsXG4gICAgc3RvcENvbG9yOiBcIiMyNDI2NURcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMSxcbiAgICBzdG9wQ29sb3I6IFwiIzI1Mjc2MVwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIHgxOiAyMS4wMjgsXG4gICAgeDI6IDYuMDE3LFxuICAgIHkxOiAxNC45MjgsXG4gICAgeTI6IDE4Ljg0NCxcbiAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIHN0b3BDb2xvcjogXCIjMzg3MUMxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDAuNTE1LFxuICAgIHN0b3BDb2xvcjogXCIjMkMzNzkyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDAuODY1LFxuICAgIHN0b3BDb2xvcjogXCIjMjQyNjVEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDEsXG4gICAgc3RvcENvbG9yOiBcIiMyNTI3NjFcIlxuICB9KSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0Ryb3B3aXphcmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0VsYXN0aWMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0VsYXN0aWMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgXCJkYXRhLXR5cGVcIjogXCJsb2dvRWxhc3RpY1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjZmZmXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMwLjg2IDEzLjEyOUE2LjMzMyA2LjMzMyAwIDAgMSAzMiAxNi43N2E2LjQxOSA2LjQxOSAwIDAgMS0xLjE2MiAzLjY1MiA2LjM4MiA2LjM4MiAwIDAgMS0zLjAzMiAyLjMzMSA0LjgzMyA0LjgzMyAwIDAgMS0xLjY3MiA1LjU0MiA0Ljc4OSA0Ljc4OSAwIDAgMS01Ljc3LS4wNzQgOS4wMTYgOS4wMTYgMCAwIDEtNC41IDMuMzIyIDguOTgyIDguOTgyIDAgMCAxLTUuNTg3LjAyMyA5LjAxNCA5LjAxNCAwIDAgMS00LjUyNi0zLjI4NyA5LjA2NyA5LjA2NyAwIDAgMS0xLjcyNy01LjMzM2MwLS41NzkuMDUzLTEuMTU2LjE2LTEuNzI1QTYuMzA1IDYuMzA1IDAgMCAxIDEuMTQ1IDE4LjkgNi4zNDEgNi4zNDEgMCAwIDEgMCAxNS4yNDJhNi40MiA2LjQyIDAgMCAxIDEuMTYzLTMuNjUyIDYuMzg0IDYuMzg0IDAgMCAxIDMuMDM1LTIuMzMgNC44MzMgNC44MzMgMCAwIDEgMS42NTgtNS41NTcgNC43ODkgNC43ODkgMCAwIDEgNS43OC4wNyA5LjAzNyA5LjAzNyAwIDAgMSA0LjkzLTMuNDQ2IDkuMDA3IDkuMDA3IDAgMCAxIDUuOTk0LjQxOSA5LjA1IDkuMDUgMCAwIDEgNC40MDcgNC4wOTggOS4wOTcgOS4wOTcgMCAwIDEgLjg3MyA1Ljk2NSA2LjI5OCA2LjI5OCAwIDAgMSAzLjAyIDIuMzJabS0xOC4yOC42NTggNy4wMDIgMy4yMTEgNy4wNjYtNi4yMTNhNy44NSA3Ljg1IDAgMCAwIC4xNTItMS41NTdjMC0xLjY5Mi0uNTM5LTMuMzQtMS41NC00LjcwNGE3Ljg5NyA3Ljg5NyAwIDAgMC00LjAyLTIuODY5IDcuODcgNy44NyAwIDAgMC00LjkzMi4wODYgNy45IDcuOSAwIDAgMC0zLjkyIDMuMDA3bC0xLjE3NCA2LjExOCAxLjM2NyAyLjkyLS4wMDEuMDAxWm0tNy4yNDcgNy40NDFBNy45NjQgNy45NjQgMCAwIDAgNi43MiAyNy41M2E3LjkxOCA3LjkxOCAwIDAgMCA0LjA0IDIuODc0IDcuODkgNy44OSAwIDAgMCA0Ljk1LS4wOTcgNy45MiA3LjkyIDAgMCAwIDMuOTI2LTMuMDNsMS4xNjYtNi4xMDItMS41NTUtMi45ODUtNy4wMy0zLjIxMS02Ljg4NSA2LjI0OC4wMDEuMDAxWm00Ljc1NS0xMS4wMjQtNC44LTEuMTM3LjAwMi0uMDAyYTMuODIgMy44MiAwIDAgMSAxLjMxMi00LjM1OCAzLjc4NSAzLjc4NSAwIDAgMSA0LjUzOC4wMjNsLTEuMDUyIDUuNDc0Wm0tNS4yMTYuMDFhNS4yOTQgNS4yOTQgMCAwIDAtMi41OTUgMS44ODIgNS4zMjQgNS4zMjQgMCAwIDAtLjE0MiA2LjEyNCA1LjI4NyA1LjI4NyAwIDAgMCAyLjUwNSAybDYuNzMzLTYuMTAxLTEuMjM1LTIuNjUtNS4yNjYtMS4yNTVabTE4LjI4NiAxNy44NDhhMy43MzcgMy43MzcgMCAwIDEtMi4yODUtLjc4NWwxLjAzNy01LjQ1NCA0LjggMS4xMjVhMy44MTIgMy44MTIgMCAwIDEtMS44MDEgNC42OGMtLjU0LjI4My0xLjE0LjQzMi0xLjc1MS40MzRabS0xLjMxLTcuNDk5IDUuMjggMS4yMzhhNS4zNCA1LjM0IDAgMCAwIDIuNjIyLTEuOTM4IDUuMzcgNS4zNyAwIDAgMCAxLjAxMy0zLjEwNiA1LjMxMSA1LjMxMSAwIDAgMC0uOTM2LTMuMDEgNS4yODIgNS4yODIgMCAwIDAtMi40NzUtMS45NDRsLTYuOTA0IDYuMDcgMS40IDIuNjlaXCIsXG4gICAgY2xhc3NOYW1lOiBcIm91dGxpbmVcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIm0xMi41OCAxMy43ODcgNy4wMDIgMy4yMTEgNy4wNjYtNi4yMTNhNy44NDkgNy44NDkgMCAwIDAgLjE1Mi0xLjU1N2MwLTEuNjkyLS41MzktMy4zNC0xLjU0LTQuNzA0YTcuODk3IDcuODk3IDAgMCAwLTQuMDItMi44NjkgNy44NyA3Ljg3IDAgMCAwLTQuOTMyLjA4NiA3LjkgNy45IDAgMCAwLTMuOTIgMy4wMDdsLTEuMTc0IDYuMTE4IDEuMzY3IDIuOTItLjAwMS4wMDFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk01LjMzMyAyMS4yMjhBNy45NjQgNy45NjQgMCAwIDAgNi43MiAyNy41M2E3LjkxOCA3LjkxOCAwIDAgMCA0LjA0IDIuODc0IDcuODkgNy44OSAwIDAgMCA0Ljk1LS4wOTcgNy45MiA3LjkyIDAgMCAwIDMuOTI2LTMuMDNsMS4xNjYtNi4xMDItMS41NTUtMi45ODUtNy4wMy0zLjIxMS02Ljg4NSA2LjI0OC4wMDEuMDAxWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA0RTk4XCIsXG4gICAgZDogXCJtNS4yODggOS4wNjcgNC44IDEuMTM3TDExLjE0IDQuNzNhMy43ODUgMy43ODUgMCAwIDAtNS45MTQgMS45NCAzLjgyIDMuODIgMCAwIDAgLjA2NCAyLjM5NVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMUJBOUY1XCIsXG4gICAgZDogXCJNNC44NzIgMTAuMjE0YTUuMjk0IDUuMjk0IDAgMCAwLTIuNTk1IDEuODgyIDUuMzI0IDUuMzI0IDAgMCAwLS4xNDIgNi4xMjQgNS4yODcgNS4yODcgMCAwIDAgMi41MDUgMmw2LjczMy02LjEwMS0xLjIzNS0yLjY1LTUuMjY2LTEuMjU1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjOTNDOTBFXCIsXG4gICAgZDogXCJNMjAuODczIDI3LjI3N2EzLjczNiAzLjczNiAwIDAgMCAyLjI4NS43ODUgMy43ODMgMy43ODMgMCAwIDAgMy4xMDEtMS42MyAzLjgxMiAzLjgxMiAwIDAgMCAuNDUxLTMuNDg0bC00LjgtMS4xMjUtMS4wMzcgNS40NTRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwN0NcIixcbiAgICBkOiBcIm0yMS44NDggMjAuNTYzIDUuMjggMS4yMzhhNS4zNCA1LjM0IDAgMCAwIDIuNjIyLTEuOTM4IDUuMzcgNS4zNyAwIDAgMCAxLjAxMy0zLjEwNiA1LjMxMiA1LjMxMiAwIDAgMC0uOTM2LTMuMDEgNS4yODMgNS4yODMgMCAwIDAtMi40NzUtMS45NDRsLTYuOTA0IDYuMDcgMS40IDIuNjlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRWxhc3RpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvRWxhc3RpY1N0YWNrID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FbGFzdGljU3RhY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk0wIDIuMzdBMi4zNyAyLjM3IDAgMCAxIDIuMzcgMGgyNy4yNkEyLjM3IDIuMzcgMCAwIDEgMzIgMi4zN3Y2LjUySDBWMi4zN1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTAgMjAuMTQ4aDMydi04LjI5NkgwdjguMjk2WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDdDXCIsXG4gICAgZDogXCJNMCAyMy4xMTFoMzJ2Ni41MTlBMi4zNyAyLjM3IDAgMCAxIDI5LjYzIDMySDIuMzdBMi4zNyAyLjM3IDAgMCAxIDAgMjkuNjN2LTYuNTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRWxhc3RpY1N0YWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29FbGFzdGljc2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FbGFzdGljc2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDE2YzAgMS4zODQuMTk0IDIuNzIuNTI0IDRIMjJhNCA0IDAgMCAwIDAtOEgyLjUyNEExNS45ODQgMTUuOTg0IDAgMCAwIDIgMTZcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIk0yOC45MjQgNy42NjJBMTUuMzgxIDE1LjM4MSAwIDAgMCAzMC40OCA2QzI3LjU0NyAyLjM0NiAyMy4wNSAwIDE4IDAgMTEuNjc5IDAgNi4yMzkgMy42NzggMy42NDQgOUgyNS41MWE1LjAzOSA1LjAzOSAwIDAgMCAzLjQxMy0xLjMzOFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMjUuNTEgMjNIMy42NDVDNi4yNCAyOC4zMjMgMTEuNjc5IDMyIDE4IDMyYzUuMDUgMCA5LjU0Ny0yLjM0NiAxMi40OC02YTE1LjM4MSAxNS4zODEgMCAwIDAtMS41NTYtMS42NjJBNS4wMzQgNS4wMzQgMCAwIDAgMjUuNTEgMjNcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvRW50ZXJwcmlzZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRW50ZXJwcmlzZVNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNiAwYy0yLjkxOCAwLTUuNjQ1Ljc5NC04IDIuMTU4IDQuNzc3IDIuNzY4IDggNy45MjMgOCAxMy44NDIgMCA1LjkxOS0zLjIyMyAxMS4wNzQtOCAxMy44NDJBMTUuOTA3IDE1LjkwNyAwIDAgMCAxNiAzMmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2UzI0LjgzNyAwIDE2IDB6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMjRoMi4yMjJBMTIuOTk2IDEyLjk5NiAwIDAgMCAxMyAxNmMwLTIuOTM1LTEuMDEyLTUuNzQ0LTIuNzc4LThIOGE4IDggMCAwIDAgMCAxNnpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTYgOGgtMi4xNTJBMTUuODc3IDE1Ljg3NyAwIDAgMSAxNiAxNmMwIDIuOTE4LS43ODYgNS42NDctMi4xNTIgOEgxNmE4IDggMCAwIDAgMC0xNnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0V0Y2QgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0V0Y2QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIiM0MTlFREFcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNjUgMTQuMTY0YzAgMS4xODktLjkzMyAyLjE1LTIuMDgzIDIuMTUtMS4xNTIgMC0yLjA4Mi0uOTYxLTIuMDgyLTIuMTUgMC0xLjE4NS45My0yLjE1IDIuMDgyLTIuMTUgMS4xNSAwIDIuMDgzLjk2NSAyLjA4MyAyLjE1em0yLjY5MyAwYzAgMS4xODkuOTM0IDIuMTUgMi4wODQgMi4xNXMyLjA4My0uOTYxIDIuMDgzLTIuMTVjMC0xLjE4NS0uOTMzLTIuMTUtMi4wODMtMi4xNS0xLjE1IDAtMi4wODQuOTY1LTIuMDg0IDIuMTV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMS41MjIgMTYuNDk1YTUuODQ1IDUuODQ1IDAgMCAxLTMuMTA1LS42MThjLjI3Mi0xLjYwMy4zODctMy4yMTguMzU3LTQuODI3YTI0Ljg5NiAyNC44OTYgMCAwIDAtMy4wMjctMy43MDMgNi4xMzcgNi4xMzcgMCAwIDEgMi4xMzMtMi4zNmwuMzkxLS4yNS0uMzA0LS4zNTRjLTEuNTctMS44MjUtMy40NDQtMy4yMzUtNS41NjgtNC4xOTNMMjEuOTc1IDBsLS4xMDcuNDYyYTYuMjQ4IDYuMjQ4IDAgMCAxLTEuNTEgMi44MjkgMjMuNzcgMjMuNzcgMCAwIDAtNC4zNjItMS44NTUgMjMuNzkgMjMuNzkgMCAwIDAtNC4zNTUgMS44NTFBNi4yNDYgNi4yNDYgMCAwIDEgMTAuMTM3LjQ2NWwtLjEwOC0uNDYyLS40MjMuMTg5Yy0yLjA5Ny45NDMtNC4wMjIgMi4zOTItNS41NjYgNC4xOWwtLjMwNi4zNTUuMzkuMjVhNi4xMjUgNi4xMjUgMCAwIDEgMi4xMjkgMi4zNDcgMjUuMDAxIDI1LjAwMSAwIDAgMC0zLjAyMiAzLjY4OSAyNi4wNjggMjYuMDY4IDAgMCAwIC4zNDcgNC44NiA1LjgzMiA1LjgzMiAwIDAgMS0zLjA5LjYxMkwuMDMgMTYuNDZsLjA0My40NzNhMTYuNzIzIDE2LjcyMyAwIDAgMCAyLjE0IDYuNzY1bC4yMzQuNDEuMzUtLjMwOGE1LjkxNCA1LjkxNCAwIDAgMSAyLjgzNy0xLjM3MiAyNS4yNTUgMjUuMjU1IDAgMCAwIDIuNDI5IDQuMDgzYzEuNDc1LjUzMyAzLjAxMy45MyA0LjYwMSAxLjE2N2E2LjM1OSA2LjM1OSAwIDAgMS0uMzgzIDMuMjQzbC0uMTc1LjQzOS40NS4xMDJjMS4xNS4yNjEgMi4zMS4zOTQgMy40NDcuMzk0bDMuNDQ3LS4zOTQuNDUtLjEwMi0uMTc1LS40NGE2LjM3NiA2LjM3NiAwIDAgMS0uMzgzLTMuMjQ0IDIzLjkwNSAyMy45MDUgMCAwIDAgNC41ODUtMS4xNjUgMjUuMjg2IDI1LjI4NiAwIDAgMCAyLjQzLTQuMDg2IDUuOTQgNS45NCAwIDAgMSAyLjg1MSAxLjM3M2wuMzUuMzA2LjIzMy0uNDA4YTE2LjY2MSAxNi42NjEgMCAwIDAgMi4xNC02Ljc2NGwuMDQyLS40NzItLjQ1LjAzNlpNMjAuOTMgMjIuMjc4Yy0xLjYzLjQ1OC0zLjI4Ny42ODktNC45MzMuNjg5LTEuNjUgMC0zLjMwNC0uMjMxLTQuOTM2LS42OWEyMC4wMjggMjAuMDI4IDAgMCAxLTIuMTEzLTQuNTk0IDIwLjA3MiAyMC4wNzIgMCAwIDEtLjg5LTUuMDQgMTkuMDc2IDE5LjA3NiAwIDAgMSAzLjU3Ni0zLjUxNiAxOC44NjcgMTguODY3IDAgMCAxIDQuMzYzLTIuNDQ4IDE4Ljk0NCAxOC45NDQgMCAwIDEgNC4zNTUgMi40NDMgMTkuMTkgMTkuMTkgMCAwIDEgMy41OTIgMy41MzhjLS4wOSAxLjczLS4zOSAzLjQxLS44OTkgNS4wMTlhMTkuOTY1IDE5Ljk2NSAwIDAgMS0yLjExNSA0LjU5OVpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRXRjZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvR2NwID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29HY3AoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fZ2NwJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHhtbG5zWGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICBkOiBcIk0uMDg1LjFoNC41NDl2Ni4yOTFILjA4NXpcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0RCNDQzN1wiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0yMi41NyAyOS45ODJoLTUuNzQ5Yy41MjcgMCAuOTg3LS4yODIgMS4yMzMtLjdMMjUuODU3IDE2IDIwLjkzIDcuNjFsNS43NDguMDAxYy40OTIgMCAuOTcuMjUxIDEuMjMyLjdsMy42OTggNi4yOTFjLjQ5LjgzNy41MjYgMS45IDAgMi43OTdsLTYuNTcyIDExLjE4NWEyLjg1MyAyLjg1MyAwIDAgMS0yLjQ2NCAxLjM5OFptLS43MS0yLjc5NmMwIC4zODYuMzE4LjcuNzEuN2EuNzA1LjcwNSAwIDAgMCAuNzEyLS43YzAtLjM4Ni0uMzE4LS43LS43MTEtLjdhLjcwNS43MDUgMCAwIDAtLjcxMi43Wm02LjkyNy0xMC41OGMuMzQuMTkzLjc3NS4wNzguOTcxLS4yNTZhLjY5Mi42OTIgMCAwIDAtLjI2LS45NTUuNzE4LjcxOCAwIDAgMC0uOTcyLjI1Ni42OTIuNjkyIDAgMCAwIC4yNi45NTVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0Mjg1RjRcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJtMjUuMDM2IDMuNDE2IDIuODczIDQuODk0YTEuNDI3IDEuNDI3IDAgMCAwLTEuMjMyLS42OTlIMTEuMDcxbC00LjkyOCA4LjM4OC0yLjg3NC00Ljg5MmExLjM3NyAxLjM3NyAwIDAgMSAwLTEuMzk5bDMuNjk2LTYuMjkyYTIuODUzIDIuODUzIDAgMCAxIDIuNDY0LTEuMzk4aDEzLjE0M2MuOTgyIDAgMS45MzcuNTAyIDIuNDY0IDEuMzk4Wk0xMC4xNCA0LjgxNGMwLS4zODYtLjMxOC0uNy0uNzEtLjdhLjcwNS43MDUgMCAwIDAtLjcxMi43YzAgLjM4Ni4zMTguNy43MTEuN2EuNzA1LjcwNSAwIDAgMCAuNzExLS43Wm0xMi43ODcuNjA2YS42OTIuNjkyIDAgMCAwIC4yNi0uOTU1LjcxOC43MTggMCAwIDAtLjk3MS0uMjU2LjY5Mi42OTIgMCAwIDAtLjI2Ljk1NS43MTguNzE4IDAgMCAwIC45NzEuMjU2WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjRCNDAwXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwibS4zOTQgMTQuNjAxIDIuODc1LTQuODkzYy0uMjYzLjQ0OS0uMjQ1Ljk4IDAgMS4zOTlMMTEuMDcgMjQuMzloOS44NTdsLTIuODc0IDQuODkyYy0uMjQ2LjQxOC0uNzA2LjctMS4yMzMuN0g5LjQyOGEyLjg1NCAyLjg1NCAwIDAgMS0yLjQ2NC0xLjM5OEwuMzk0IDE3LjM5OGEyLjc1NCAyLjc1NCAwIDAgMSAwLTIuNzk3Wm0yLjgyLjc5M2EuNzE4LjcxOCAwIDAgMC0uOTcyLjI1Ni42OTMuNjkzIDAgMCAwIC4yNi45NTVjLjM0LjE5My43NzUuMDc4Ljk3MS0uMjU2YS42OTIuNjkyIDAgMCAwLS4yNi0uOTU1Wk05LjA3MiAyNi41OGEuNjkyLjY5MiAwIDAgMC0uMjYuOTU1LjcxOC43MTggMCAwIDAgLjk3MS4yNTYuNjkyLjY5MiAwIDAgMCAuMjYtLjk1NS43MTguNzE4IDAgMCAwLS45NzEtLjI1NlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwibTE4LjA1NCAyOS4yODIgMi44NzUtNC44OTJIMTcuOTZsLTEuMTM4IDUuNTkxYy41MjYgMCAuOTg2LS4yOCAxLjIzMi0uNjk5TTI2LjY3OCA3LjYxMWgtNS43NDlsMS40ODQgMi41MjdMMjcuOTEgOC4zMWExLjQyNyAxLjQyNyAwIDAgMC0xLjIzMi0uN1wiLFxuICAgIG9wYWNpdHk6IDAuMVxuICB9KSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIG9wYWNpdHk6IDAuMSxcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDIuOTk0IDkuNjA5KVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNLjI3NSAxLjQ5OCAzLjE1IDYuMzkxbDEuNDg1LTIuNTI3TC4yNzUuMWMtLjI2My40NDgtLjI0NS45OCAwIDEuMzk4XCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNDQ0NcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMTEuMDcxIDI0LjM5IDYuMTQzIDE2bDQuOTI4LTguMzloOS44NThMMjUuODU3IDE2bC00LjkyOCA4LjM5SDExLjA3Wk0yMC4yNjggMTZjMC0yLjMxNy0xLjkxLTQuMTk0LTQuMjY4LTQuMTk0LTIuMzU3IDAtNC4yNjggMS44NzctNC4yNjggNC4xOTQgMCAyLjMxNiAxLjkxIDQuMTk0IDQuMjY4IDQuMTk0IDIuMzU3IDAgNC4yNjgtMS44NzggNC4yNjgtNC4xOTRaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0djcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvR2NwTW9ubyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR2NwTW9ubyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjI1NiAxNS45ODJjMC0yLjMxNi0xLjkxLTQuMTk0LTQuMjY4LTQuMTk0LTIuMzU3IDAtNC4yNjggMS44NzgtNC4yNjggNC4xOTQgMCAyLjMxNyAxLjkxMSA0LjE5NSA0LjI2OCA0LjE5NSAyLjM1NyAwIDQuMjY4LTEuODc4IDQuMjY4LTQuMTk1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOS44NyAxNi41NDNhLjg2Mi44NjIgMCAwIDEtMS4xNjcuMzA4LjgzMi44MzIgMCAwIDEtLjMxMi0xLjE0Ny44NjIuODYyIDAgMCAxIDEuMTY3LS4zMDguODMyLjgzMiAwIDAgMSAuMzEyIDEuMTQ3TTIyLjU2IDI4LjE1YS44NDcuODQ3IDAgMCAxLS44NTUtLjg0YzAtLjQ2NC4zODMtLjg0Ljg1NS0uODRzLjg1NC4zNzYuODU0Ljg0YzAgLjQ2NC0uMzgyLjg0LS44NTQuODRtLTEyLjcxNS0uMTEzYS44NjMuODYzIDAgMCAxLTEuMTY3LS4zMDguODMyLjgzMiAwIDAgMSAuMzEyLTEuMTQ3Ljg2Mi44NjIgMCAwIDEgMS4xNjcuMzA4LjgzMi44MzIgMCAwIDEtLjMxMiAxLjE0N00zLjU4NiAxNi41NDJhLjg2My44NjMgMCAwIDEtMS4xNjcuMzA4LjgzMi44MzIgMCAwIDEtLjMxMy0xLjE0Ny44NjIuODYyIDAgMCAxIDEuMTY3LS4zMDguODMyLjgzMiAwIDAgMSAuMzEzIDEuMTQ3TTIyLjk4NyA1LjY2NWEuODYyLjg2MiAwIDAgMS0xLjE2Ny0uMzA4LjgzMi44MzIgMCAwIDEgLjMxMi0xLjE0Ny44NjMuODYzIDAgMCAxIDEuMTY4LjMwOC44MzIuODMyIDAgMCAxLS4zMTMgMS4xNDdtLTEzLjU3LjExMmEuODQ3Ljg0NyAwIDAgMS0uODU0LS44NGMwLS40NjQuMzgyLS44NC44NTQtLjg0cy44NTUuMzc2Ljg1NS44NGMwIC40NjQtLjM4My44NC0uODU1Ljg0bTIyLjE3OCA4Ljc5Ny0zLjY5Ny02LjI5MmMtLjAxNC0uMDIzLS4wMy0uMDQzLS4wNDUtLjA2NWwtMi44My00LjgxOEEyLjg1NCAyLjg1NCAwIDAgMCAyMi41NiAySDkuNDE3YTIuODUzIDIuODUzIDAgMCAwLTIuNDY0IDEuMzk4TDMuMjU3IDkuNjlsMy4yODQgNS41OSA0LjUxOS03LjY5aDE1LjYwNWMuNDkxIDAgLjk2OS4yNTEgMS4yMzIuNjk5aC02LjU2NWw0LjUxMyA3LjY4Mi00LjkzNSA4LjQtMi44NyA0Ljg4M2ExLjQyNiAxLjQyNiAwIDAgMS0xLjIzLjY5OWwzLjI3OS01LjU4MmgtOS4wM2wtNC41NDQtNy43MzgtLjM4NC0uNjUzLTIuODc0LTQuODkzYTEuMzc3IDEuMzc3IDAgMCAxLS4wMDMtMS4zOTFMLjM4MiAxNC41ODRhMi43NTQgMi43NTQgMCAwIDAgMCAyLjc5Nmw2LjU3IDExLjE4NmEyLjg1NCAyLjg1NCAwIDAgMCAyLjQ2NSAxLjM5OGg3LjM5MmMuMDU0IDAgLjEwNy0uMDA1LjE2LS4wMTFoNS41OWEyLjg1MyAyLjg1MyAwIDAgMCAyLjQ2NC0xLjM5N2w2LjU3Mi0xMS4xODZjLjUyNi0uODk2LjQ5LTEuOTYgMC0yLjc5NlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0djcE1vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0dpdGh1YiA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR2l0aHViKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMEM3LjE2NCAwIDAgNy4zNDMgMCAxNi40YzAgNy4yNDggNC41ODQgMTMuMzk0IDEwLjk0MiAxNS41NjIuOC4xNSAxLjA5Mi0uMzU2IDEuMDkyLS43ODkgMC0uMzktLjAxNC0xLjY4NC0uMDIyLTMuMDUzLTQuNDUuOTkxLTUuMzktMS45MzQtNS4zOS0xLjkzNC0uNzI4LTEuODk0LTEuNzc2LTIuMzk4LTEuNzc2LTIuMzk4LTEuNDU0LTEuMDE3LjExLS45OTcuMTEtLjk5NyAxLjYwNi4xMTQgMi40NTIgMS42OSAyLjQ1MiAxLjY5IDEuNDI4IDIuNTA2IDMuNzQ2IDEuNzgxIDQuNjU2IDEuMzYuMTQ2LTEuMDU2LjU2LTEuNzggMS4wMTYtMi4xOS0zLjU1Mi0uNDE0LTcuMjg4LTEuODIxLTcuMjg4LTguMTA1IDAtMS43OTIuNjI0LTMuMjU0IDEuNjQ2LTQuNDAyLS4xNjQtLjQxNi0uNzE0LTIuMDg1LjE1OC00LjM0MiAwIDAgMS4zNDEtLjQ0IDQuNCAxLjY4MUExNC44ODIgMTQuODgyIDAgMCAxIDE2IDcuOTMyYzEuMzYuMDA2IDIuNzI4LjE4OCA0LjAwNi41NTMgMy4wNTMtMi4xMjQgNC4zOTYtMS42ODEgNC4zOTYtMS42ODEuODc1IDIuMjU5LjMyNSAzLjkyNi4xNiA0LjM0IDEuMDI2IDEuMTQ4IDEuNjQ1IDIuNjEgMS42NDUgNC40MDIgMCA2LjMtMy43NDIgNy42ODctNy4zMDcgOC4wOTQuNTc3LjUwOCAxLjA4NiAxLjUwNSAxLjA4NiAzLjAzNSAwIDIuMTkyLS4wMjEgMy45Ni0uMDIxIDQuNSAwIC40MzcuMjkuOTQ3IDEuMTAxLjc4N0MyNy40MiAyOS43OSAzMiAyMy42NDQgMzIgMTYuNCAzMiA3LjM0MyAyNC44MzYgMCAxNiAwWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0dpdGh1YjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvR21haWwgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0dtYWlsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0U2NUE0RFwiLFxuICAgIGQ6IFwiTTI5LjE2MiA0LjE0OWMuMjktLjE3NS41ODgtLjA3OC44NzMgMGEyLjYxNiAyLjYxNiAwIDAgMSAxLjkwNyAyLjQ3NmMuMDA2LjI5LS4wMDcuNTgxLS4wMDcuODY2LS4wODQgMC0uMTM1LjA1Mi0uMi4wOTctLjgxNS41ODItMS42NDIgMS4xNjQtMi40NSAxLjc1Mi0uMzMuMjM5LS42OTIuNDI2LS45Ny43My0uMTE2IDAtLjIuMDc4LS4yODQuMTM2LTIuNjkgMS44NTUtNS4zNzkgMy43MDQtOC4wNjIgNS41Ni0xLjMzMS45MTgtMi42NjMgMS44NDktMy45OTUgMi43NzNoLS4xMWMtLjA1OC0uMDQ1LS4xMS0uMTAzLS4xNjgtLjE0Mkw1Ljg2MyAxMS41NWMtLjY3Mi0uNDY2LTEuMzQ0LS45MzgtMi4wMTctMS40MDMtLjA3Ny0uMDUyLS4xNDgtLjE2Mi0uMjQ1LS4xMDQtLjA5LjA1Mi0uMDMzLjE3NS0uMDQ1LjI3Mi0uMDA3LjAzMiAwIC4wNjUgMCAuMDk3djE2LjE5NGMwIC4xMTYuMDA2LjI0LjAxMi4zNTUgMCAuMDY1LS4wMDYuMTIzLS4wMDYuMTg4LTEuMjI4LjE0OS0yLjM0Ny0uMDItMy4xMTYtMS4xMzFhMi4zODEgMi4zODEgMCAwIDEtLjQ0LTEuMzY0YzAtNi4wMzItLjAwNi0xMi4wNTcuMDA3LTE4LjA4OSAwLTEuMjI4Ljk5NS0yLjMxNCAyLjIxNy0yLjQ4OC4xOTQtLjAyNi4zODgtLjA1Mi41NTYuMDc3LjA0LjAzOS4wNzEuMDc4LjExNy4xMSA0LjI3MyAzLjE2OCA4LjU0NiA2LjMzNSAxMi44MTkgOS41MS4xNjguMTIyLjI3OC4xMTYuNDQ2LS4wMDcgMy40MTMtMi41MjEgNi44MzMtNS4wMzYgMTAuMjQ3LTcuNTUuOTA1LS42OTIgMS44MjMtMS4zODQgMi43NDctMi4wN1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y2RjRFQ1wiLFxuICAgIGQ6IFwiTTI5LjE2MiA0LjE0OWMtLjkyNC42ODUtMS44NDIgMS4zNzctMi43NjcgMi4wNjItMy40MTMgMi41MjEtNi44MzMgNS4wMy0xMC4yNDYgNy41NS0uMTY4LjEyMy0uMjcyLjEzLS40NDYuMDA3LTQuMjY3LTMuMTc0LTguNTQtNi4zMzUtMTIuODEzLTkuNTEtLjA0Ni0uMDMyLS4wNzgtLjA3LS4xMTctLjExLjA3OC0uMTI5LjIxNC0uMDgzLjMyNC0uMDgzaDI1Ljc0MmMuMTEgMCAuMjM5LS4wNDYuMzIzLjA4NFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0U2RTNENlwiLFxuICAgIGQ6IFwiTTMuNTU2IDI2Ljk1YTYuNTMzIDYuNTMzIDAgMCAxLS4wMTMtLjM1NlYxMC40YzAtLjAzMi0uMDA3LS4wNjUgMC0uMDk3LjAxMy0uMDktLjA0Ni0uMjEzLjA0NS0uMjcxLjA5Ny0uMDU5LjE3NC4wNTEuMjQ2LjEwMy42NzIuNDY1IDEuMzQ0LjkzNyAyLjAxNyAxLjQwM2w5LjgzMiA2Ljg0NmMuMDU4LjA0NS4xMTcuMDk3LjE2OC4xNDItLjAyNi4wMjYtLjA1OC4wNDUtLjA4NC4wNzFsLS4wNjQuMDY1Yy0uMDUyIDAtLjEwNC4wMTMtLjEzLjA2NGwtLjA2NC4wNjVjLS4wMDcuMDEzLS4wMi4wMi0uMDI2LjAzMi4wMTMtLjAwNi4wMi0uMDE5LjAzMi0uMDI1bC4wNjUtLjA2NWMuMDUyIDAgLjEwMy0uMDEzLjEzLS4wNjUuMDE4LS4wMi4wNDQtLjA0NS4wNjQtLjA2NC4wNjQgMCAuMTI5LS4wMDcuMTk0LS4wMDcuODk4LjYyNyAxLjgwMyAxLjI0OCAyLjcwMiAxLjg3NSAyLjY3NiAxLjg1NSA1LjM1MyAzLjcwNCA4LjAyMyA1LjU3Mi40NzguMzM3IDEuMDAyLjYyOCAxLjQyOCAxLjAzNS0uMTE2LjExLS4yNTguMDM5LS4zODguMDU4LjAwNy0uMTQ5LS4xMjItLjE4OC0uMjItLjI1Mi0uNDktLjM0My0uOTk1LS42NzItMS40NzMtMS4wMjgtLjgwMi0uNTg4LTEuNjE3LTEuMTUtMi40MzEtMS43Mi0uNjc5LS40NzItMS4zNTEtLjk2My0yLjA1LTEuNDA5LS42MDctLjM4OC0xLjE3LS44NTMtMS43NzctMS4yNDgtLjY4NS0uNDQtMS4zMzItLjkzLTIuMDEtMS4zNzctLjU2My0uMzY4LTEuMTEzLS43NjItMS42NjItMS4xNS0uMTEtLjA3OC0uMjA3LS4xMS0uMzIzLS4wMzMtLjIzMy4xNjgtLjUzLjI3OC0uNzI0LjQ2LS41NTYuNTEtMS4yMzUuODQtMS44MTcgMS4zMDUtLjc0My41ODktMS41NDUgMS4xMTItMi4zNCAxLjYzNi0xLjMxOS44NzMtMi41OTkgMS44MTYtMy45MTEgMi42OTZhNDMuNjk3IDQzLjY5NyAwIDAgMC0yLjMwOCAxLjYyOWMtLjIwNy4xNTUtLjQ4NS4yMjYtLjYxNC40ODUtLjEzLS4wMTMtLjI3Mi4wMzgtLjM5NS0uMDQ2IDIuMzE1LTEuNjE2IDQuNjMtMy4yMjYgNi45MzctNC44NDIuMzA0LS4yMTMuNjQ2LS4zODEuODk5LS42NjYuMDQ1LS4wMTMuMTAzLS4wMTkuMDk3LS4wODQgMC0uMDA2LS4wMTMtLjAyLS4wMi0uMDItLjA2NS0uMDA2LS4wNzcuMDQ2LS4wOS4wOTEtLjIzMy4wMTMtLjM3NS4xOTQtLjU1LjMxLTIuNDYzIDEuNy00LjkzMiAzLjM4OC03LjM5NSA1LjA3NVptMTEuMTE5LTcuNTY0LjA2NC0uMDY1Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NGwuMDY0LS4wNjVjLjA1MiAwIC4xMDQtLjAxMy4xMy0uMDY1LjAwNi0uMDEzLjAxOS0uMDIuMDI1LS4wMzItLjAxMi4wMDYtLjAxOS4wMi0uMDMyLjAyNi0uMDUyIDAtLjEwMy4wMTMtLjEzLjA2NGwtLjA2NC4wNjVjLS4wNTEgMC0uMTAzLjAxMy0uMTMuMDY1LS4wMTguMDI2LS4wMzguMDQ1LS4wNTcuMDctLjAxMy4wMDctLjAyNi4wMTQtLjAzMy4wMjcuMDEzLS4wMDcuMDI2LS4wMTMuMDMzLS4wMjZabS0uODQuNTc1Yy0uMDUyIDAtLjEwNC4wMTMtLjEzLjA2NS0uMDM5LjAwNi0uMDkuMDA2LS4wOTcuMDY1IDAgLjAxMi4wMjYuMDM4LjAzOS4wMzguMDUyLS4wMDYuMDU4LS4wNTEuMDY1LS4wOS4wNTEtLjAwNy4wOTYtLjAxMy4xMjItLjA3OGEuMzExLjMxMSAwIDAgMCAuMDcxLS4wNThjLjA1MiAwIC4xMDQtLjAxMy4xMy0uMDY1bC4wNjQtLjA2NGMuMDUyIDAgLjEwNC0uMDEzLjEzLS4wNjUuMDA2LS4wMTMuMDItLjAyLjAyNi0uMDMyLS4wMTMuMDA2LS4wMi4wMi0uMDMzLjAyNi0uMDUxIDAtLjEwMy4wMTMtLjEzLjA2NC0uMDE4LjAyLS4wNDQuMDQ2LS4wNjQuMDY1LS4wNTEgMC0uMTAzLjAxMy0uMTI5LjA2NWwtLjA2NS4wNjRabS0uODQxLjU4OGMtLjA1MiAwLS4xMDMuMDEzLS4xMy4wNjUtLjA1MS4wMDctLjEwMy4wMTMtLjA5Ni4wODQgMCAuMDA3LjAxMy4wMi4wMi4wMi4wNy4wMDYuMDc3LS4wNDYuMDgzLS4wOTcuMDUyLS4wMDcuMDk3LS4wMi4xMjMtLjA3Mi4wMjYtLjAxMi4wNDUtLjAzOC4wNzEtLjA1OC4wNTIgMCAuMTAzLS4wMTMuMTMtLjA2NGwuMDY0LS4wNjVjLjA1MiAwIC4xMDMtLjAxMy4xMy0uMDY1LjAwNi0uMDEzLjAxOS0uMDE5LjAyNS0uMDMyLS4wMTMuMDA3LS4wMi4wMi0uMDMyLjAyNi0uMDUyIDAtLjEwNC4wMTMtLjEzLjA2NWwtLjA2NC4wNjRjLS4wNTIgMC0uMTA0LjAxMy0uMTMuMDY1YS4zMDYuMzA2IDAgMCAwLS4wNjQuMDY0Wm0tLjY0Ny40NmMuMDUyLS4wMDcuMTA0LS4wMTMuMDk3LS4wODUgMC0uMDA2LS4wMTItLjAxOS0uMDE5LS4wMTktLjA3MS0uMDA2LS4wNzguMDQ1LS4wODQuMDk3LS4wNTIgMC0uMDk3LjAxMy0uMTMuMDY1YS4yMjMuMjIzIDAgMCAwLS4xOTMuMTI5Yy0uMDQ1LjAxMy0uMTA0LjAxMy0uMDk3LjA4NCAwIC4wMDYuMDEzLjAyLjAyLjAyLjA2NC4wMDYuMDc3LS4wNDYuMDgzLS4wOTguMDkgMCAuMTgxLS4wMDYuMTk0LS4xMjkuMDU4LS4wMDYuMTA0LS4wMi4xMy0uMDY1Wm0yLjEyOC0xLjUzM2MtLjAwOC4wMjctLjAyNS4wNTQtLjAzMy4wNzIuMDI1LjAwOS4wNS4wMzUuMDY3LjAyNy4wMTYtLjAxLjAyNS0uMDQ1LjAzMy0uMDcyYS41NS41NSAwIDAgMS0uMDY3LS4wMjdabS0xLjgxIDEuMzVjLS4wMDgtLjAyNC0uMDE1LS4wNTYtLjAzLS4wNTYtLjAxNS0uMDA4LS4wNTIuMDA4LS4wNi4wMjQtLjAyMi4wMzMtLjAwNy4wNzQuMDMuMDc0LjAyMiAwIC4wMzctLjAyNS4wNi0uMDQxWk0xNS4zNTUgMTlhLjE4NS4xODUgMCAwIDEgLjAzNC0uMDcyYy0uMDI1LS4wMDktLjA1LS4wMzUtLjA2Ny0uMDI2LS4wMTYuMDA4LS4wMjUuMDQ0LS4wMzMuMDcuMDE3LjAxLjA0Mi4wMTkuMDY3LjAyOFptLTMuNTI2IDIuNDAyYy0uMDE2LS4wMjQtLjAzMS0uMDUtLjA0LS4wNTctLjAxNSAwLS4wNTUuMDE2LS4wNTUuMDMzLS4wMTYuMDQuMDA4LjA3NC4wNDguMDY1LjAxNiAwIC4wMzEtLjAyNC4wNDctLjA0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQjZCNUFDXCIsXG4gICAgZDogXCJNMjguMTIxIDI3LjA4NWMtLjQyNi0uNDEzLS45NDQtLjY5OC0xLjQyOC0xLjAzNC0yLjY3LTEuODYyLTUuMzQ3LTMuNzE3LTguMDIzLTUuNTczLS44OTktLjYyNy0xLjgwNC0xLjI0Ny0yLjcwMi0xLjg3NCAwLS4wMi0uMDA3LS4wNDYtLjAwNy0uMDY1bDMuOTk1LTIuNzczYzIuNjktMS44NTYgNS4zNzktMy43MDUgOC4wNjItNS41Ni4wODQtLjA1OC4xNjgtLjEzNi4yODQtLjEzNnYxNy4wNzNjLS4wNTEtLjAxOS0uMTE2LS4wMzgtLjE4LS4wNThaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNkUzRDZcIixcbiAgICBkOiBcIk00LjA3MyAyNy4xNDNjLjEyMy0uMjU4LjQwNy0uMzMuNjE0LS40ODRhNDcuODQ1IDQ3Ljg0NSAwIDAgMSAyLjMwOC0xLjYzYzEuMzEyLS44ODUgMi41OTItMS44MjMgMy45MS0yLjY5NS43OTYtLjUyNCAxLjU5OC0xLjA0OCAyLjM0MS0xLjYzNi41ODgtLjQ2NSAxLjI2LS43OTUgMS44MTctMS4zMDYuMi0uMTguNDktLjI5LjcyNC0uNDU5LjExLS4wODQuMjA3LS4wNTEuMzIzLjAzMy41NS4zODggMS4wOTkuNzgyIDEuNjYxIDEuMTUuNjguNDQ2IDEuMzI2Ljk0NCAyLjAxIDEuMzc3LjYwOC4zODggMS4xNy44NTQgMS43NzkgMS4yNDguNjk4LjQ0NiAxLjM3LjkzNyAyLjA0OSAxLjQxLjgxNC41NjggMS42MzUgMS4xMyAyLjQzIDEuNzE5LjQ4NS4zNTUuOTgzLjY4NSAxLjQ3NSAxLjAyOC4wOS4wNjQuMjI2LjEwMy4yMi4yNTItNy44ODgtLjAwNy0xNS43NzQtLjAwNy0yMy42NjEtLjAwN1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0IxMzkyRlwiLFxuICAgIGQ6IFwiTTI4LjMxNSAyNy4xNDNWMTAuMDdjLjI3OC0uMzA0LjY0LS40OTEuOTctLjczLjgxNC0uNTk1IDEuNjM1LTEuMTcgMi40NS0xLjc1Mi4wNTgtLjA0NS4xMTYtLjA5Ny4yLS4wOTcuMDA3LjExLjAxMy4yMTMuMDEzLjMyMyAwIDUuNTAyIDAgMTEuMDEuMDA3IDE2LjUxIDAgLjM3Ni0uMDEzLjc1LS4xMDQgMS4xMjYtLjE2MS42OTEtLjU3NSAxLjE3LTEuMjQ3IDEuNDA5LS43NDQuMjU5LTEuNTEzLjMzLTIuMjg5LjI4NFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0JFQkRCM1wiLFxuICAgIGQ6IFwiTTExLjUxNCAyMS41OWMtLjI1My4yODUtLjU5NS40NTMtLjkuNjY2YTI2NTAuMDc4IDI2NTAuMDc4IDAgMCAxLTYuOTM2IDQuODQybC0uMTI5LjAzOWMwLS4wNjUuMDA3LS4xMjMuMDA3LS4xODggMi40Ny0xLjY4NyA0LjkzMi0zLjM3NCA3LjQwMi01LjA2MS4xNzQtLjExNy4zMS0uMzA0LjU1LS4zMWwuMDA2LjAxMlpcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR21haWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0dvbGFuZyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR29sYW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjZEMkEyXCIsXG4gICAgZDogXCJNNC4zMTUgMTcuMzAxYy4wNDUuOTQ2IDEgLjUgMS40MTYuMjEuNDE1LS4yOS41LS4wNDUuNTYtLjZhOS4wNyA5LjA3IDAgMCAwIC4wNDUtMS4wOSAyLjY3NiAyLjY3NiAwIDAgMC0xLjc4Ni40NTVjLS4yNi4xOS0uNzQ1Ljc5LS4yNCAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk00LjgwNSAxNy45ODdhLjYuNiAwIDAgMS0uMjctLjA2LjYyLjYyIDAgMCAxLS4zMS0uNTVBLjQxLjQxIDAgMCAxIDQgMTcuMDVhMS4xNSAxLjE1IDAgMCAxIC41LS44MyAyLjc1MiAyLjc1MiAwIDAgMSAxLjg0Ni0uNDdoLjA3NXYuMDc0Yy4wMS4yODYuMDAzLjU3Mi0uMDI1Ljg1NnYuMjVjLS4wMjUuMzktLjEuNDUtLjMuNWExLjExOCAxLjExOCAwIDAgMC0uMy4xNDVjLS4yODguMjIzLS42My4zNjQtLjk5LjQxWm0xLjI3MS0yLjA2N2EyLjUwMiAyLjUwMiAwIDAgMC0xLjQ3LjQ1IDEgMSAwIDAgMC0uNDIuNjcxLjI1LjI1IDAgMCAwIC4xNy4yMDVoLjA1di4wNTVhLjUuNSAwIDAgMCAuMjEuNDUgMS4zMSAxLjMxIDAgMCAwIDEuMDY1LS4zMSAxLjI5IDEuMjkgMCAwIDEgLjM0LS4xN2MuMTMtLjA0NS4xNi0uMDU1LjE4LS4zNjV2LS4yNWMuMDI0LS4yNS4wMzQtLjUuMDMtLjc1aC0uMTU1di4wMTRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNDN0IxOTlcIixcbiAgICBkOiBcIk00LjMxNSAxNy4zYS43NDUuNzQ1IDAgMCAwIC4zNzYtLjIxWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNNC4zMTUgMTcuMzkxYS4wOTIuMDkyIDAgMSAxLS4wNTUtLjE3NWguMDZhLjU0LjU0IDAgMCAwIC4yNzUtLjE2LjA5Mi4wOTIgMCAwIDEgLjA2LS4wMzUuMDkuMDkgMCAwIDEgLjA2OC4wMTcuMDkuMDkgMCAwIDEgLjAzNS4wNi4wOTEuMDkxIDAgMCAxLS4wMTguMDY4LjcuNyAwIDAgMS0uMzYuMjJoLS4wNjV2LjAwNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzc0Q0RERFwiLFxuICAgIGQ6IFwiTTYuNDk2IDYuMDVDMi44OCA1LjA0OSA1LjU3MS40MyA4LjQ5OCAyLjMyMkw2LjQ5NiA2LjA1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNNi41NDEgNi4xNTRoLS4wN2MtMS4wMy0uMjktMS42NjYtLjktMS43ODYtMS43MTZhMi4zOTYgMi4zOTYgMCAwIDEgMS4xMTYtMi4yNiAyLjQyMSAyLjQyMSAwIDAgMSAyLjcyMi4wOWwuMDcuMDQ0TDYuNTQgNi4xNTRabS41LTQuMTkyYy0uNDEgMC0uODExLjEyLTEuMTU1LjM0NUEyLjIxMSAyLjIxMSAwIDAgMCA0Ljg1IDQuMzkzYy4xMS43MjYuNjcgMS4yNzYgMS41ODYgMS41NTFsMS45MDEtMy41ODdhMi41MDEgMi41MDEgMCAwIDAtMS4yOC0uMzhsLS4wMTUtLjAxNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzc0Q0RERFwiLFxuICAgIGQ6IFwiTTIyLjU2NiAxLjk3N2MyLjg2Mi0yLjAwMSA1LjQ0OCAyLjUwMiAyLjEyMSAzLjY2N2wtMi4xMjEtMy42NjdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIm0yNC42NDcgNS43NTQtMi4yMDEtMy44MDIuMDY1LS4wNDVhMi4zNjIgMi4zNjIgMCAwIDEgMi42MjYtLjIyIDIuNDI3IDIuNDI3IDAgMCAxIDEuMTk2IDIuMjQxYy0uMDUuNS0uMzIgMS4zNTYtMS42MTYgMS44MDFsLS4wNy4wMjVabS0xLjk2MS0zLjc1MiAyLjA0MSAzLjUzMmExLjk1NiAxLjk1NiAwIDAgMCAxLjQyNi0xLjYyIDIuMjQgMi4yNCAwIDAgMC0xLjEwNi0yLjA3NyAyLjEyNiAyLjEyNiAwIDAgMC0yLjM2MS4xNjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNkQyQTJcIixcbiAgICBkOiBcIk0yMy4xODEgMjguOTI4Yy43MjYuNDUgMi4wNTYgMS44MTEuOTY2IDIuNDcxLTEuMDQ2Ljk2MS0xLjYzNi0xLjA1NS0yLjU1Ny0xLjMzYTIuNTQ5IDIuNTQ5IDAgMCAxIDEuNTkxLTEuMTQxWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMjMuNTkyIDMxLjc0NWgtLjA0Yy0uNDE2LS4wMjUtLjc1Ni0uNDMtMS4wODYtLjgxNmEyLjMzIDIuMzMgMCAwIDAtLjktLjc3NWwtLjEyLS4wMzUuMDc0LS4xMjVhMi42NTYgMi42NTYgMCAwIDEgMS42NDYtMS4xNzZoLjA2NWMuNDY2LjI5IDEuNDI2IDEuMTMgMS40MjEgMS44OTFhLjgzNS44MzUgMCAwIDEtLjQ1LjcyNS45MDUuOTA1IDAgMCAxLS42MS4zMVptLTEuODYxLTEuNzIxYy4zMzkuMi42MzMuNDY3Ljg2NS43ODUuMjE5LjM2LjU2LjYyOC45Ni43NTVhLjcxNi43MTYgMCAwIDAgLjUtLjIzNS42NjEuNjYxIDAgMCAwIC4zNzEtLjU4YzAtLjYxLS43Ny0xLjM3Ni0xLjMwNi0xLjcyMWEyLjM1MSAyLjM1MSAwIDAgMC0xLjM4Ni45OTZoLS4wMDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk0yNC4xNDcgMzEuNDk0YS4wOS4wOSAwIDAgMS0uMDgtLjA1Yy0uMDUzLS4xMS0uMS0uMjI0LS4xNC0uMzRhMS41IDEuNSAwIDAgMC0uMzMtLjYxLjA5MS4wOTEgMCAwIDEtLjAyMi0uMDk4LjA5LjA5IDAgMCAxIC4xNDctLjAzMmMuMTcyLjE4OC4zLjQxNC4zNy42Ni4wMzkuMTEuMDg0LjIxNi4xMzUuMzJhLjA5LjA5IDAgMCAxLS4wNC4xMmwtLjA0LjAzWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjZEMkEyXCIsXG4gICAgZDogXCJNMTAuMTg5IDMwLjQ2NGMtLjg1Ni4xMy0xLjMzNi45LTIuMDQ2IDEuMjlhLjYyLjYyIDAgMCAxLTEuMDAxLS4yMzUuMzI1LjMyNSAwIDAgMS0uMjYtLjEyYy0uNjItMSAuNjQ1LTEuNjk2IDEuMzEtMi4xODYuOTM2LS4xOCAxLjUxMS42MTUgMS45OTcgMS4yNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTcuNjkyIDMxLjk5NWEuNjEzLjYxMyAwIDAgMS0uMTYgMCAuNzQuNzQgMCAwIDEtLjQzNS0uMzc1LjMwMS4zMDEgMCAwIDEtLjI0NS0uMTNjLS42LS45NDYuNDItMS42NjIgMS4wOTYtMi4xMzdsLjIzNS0uMTdjLjk0NS0uMTkgMS41NDYuNTkgMi4wMjYgMS4yMmwuMTM1LjE4MWgtLjE1YTIuNTg2IDIuNTg2IDAgMCAwLTEuMjY2LjcyNWMtLjIzLjIxMi0uNDgyLjQtLjc1LjU2YTEuMDAxIDEuMDAxIDAgMCAxLS40ODYuMTI2Wm0tLjYtLjU4YS4yNDUuMjQ1IDAgMCAxIC4xMDUgMGguMDI1bC4wNC4wOGEuNTguNTggMCAwIDAgLjMzNS4zMDUuNjg2LjY4NiAwIDAgMCAuNS0uMTJjLjI2LS4xNTUuNTAzLS4zMzcuNzI2LS41NGEzIDMgMCAwIDEgMS4yMDYtLjczNmMtLjQ2LS42LTEtMS4yNS0xLjc4Ni0xLjFsLS4yMjUuMTZjLS42OS41LTEuNTQ2IDEuMDktMS4wNTEgMS44ODVhLjE0Ni4xNDYgMCAwIDAgLjEwNS4wN2wuMDItLjAwNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTcuMTU3IDMxLjYxNGEuMDkuMDkgMCAwIDEtLjA5LS4xMmMuMDM3LS4yNC4xMzctLjQ2Ni4yOS0uNjU1LjA3Mi0uMS4xMzYtLjIwNS4xOS0uMzE1YS4wOS4wOSAwIDEgMSAuMTY1LjA3NWMtLjA1OC4xMi0uMTI3LjIzNi0uMjA1LjM0NS0uMTMyLjE3LS4yMTcuMzcyLS4yNDUuNTg1YS4wOS4wOSAwIDAgMS0uMDY3LjA4NC4wOS4wOSAwIDAgMS0uMDM4LjAwMlpNNi42NDcgNC43OGMtLjUtLjI1LS44MjYtLjU5Ni0uNTM2LTEuMTQ2LjI5LS41NS43Ny0uNDU1IDEuMjUxLS4yMDVsLS43MTUgMS4zNVptMTcuMjg1LS40OGMuNS0uMjUuODI1LS41OTYuNTM1LTEuMTQ2LS4yOS0uNTUtLjc3LS40NTYtMS4yNS0uMjA1bC43MTUgMS4zNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y2RDJBMlwiLFxuICAgIGQ6IFwiTTI3LjIxOSAxNy4xODFjLS4wNDUuOTQ2LTEuMDAxLjUtMS40MTYuMjEtLjQxNi0uMjktLjUtLjA0NS0uNTYtLjZhOS4wNjggOS4wNjggMCAwIDEtLjA0Ni0xLjA5IDIuNjc3IDIuNjc3IDAgMCAxIDEuNzg3LjQ1NGMuMjYuMTkuNzQ1Ljc5LjI0IDEuMDAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk0yNi43MjggMTcuODQ2YTIuMDQ2IDIuMDQ2IDAgMCAxLS45NTUtLjM2IDEuMTE3IDEuMTE3IDAgMCAwLS4zLS4xNDVjLS4yLS4wNy0uMjc1LS4xMy0uMy0uNXYtLjI1YTYuNTE2IDYuNTE2IDAgMCAxLS4wMjYtLjg1NnYtLjEyaC4wNzZhMi43NTEgMi43NTEgMCAwIDEgMS44NDYuNDcgMS4xNSAxLjE1IDAgMCAxIC41LjgzLjQxMi40MTIgMCAwIDEtLjIyNS4zMjYuNjIuNjIgMCAwIDEtLjMxLjU1LjYwNS42MDUgMCAwIDEtLjMwNi4wNTVabS0xLjQ1Ni0yLjA2Yy0uMDAzLjI1LjAwNy41LjAzLjc1di4yNWMwIC4zMDUuMDQ2LjMxNS4xOC4zNjUuMTIyLjA0LjIzNi4wOTcuMzQuMTdhMS4zMDcgMS4zMDcgMCAwIDAgMS4wNjcuMzEuNTAyLjUwMiAwIDAgMCAuMjEtLjQ1di0uMDZoLjA1YS4yNS4yNSAwIDAgMCAuMTctLjIwNSAxLjAwMiAxLjAwMiAwIDAgMC0uNDItLjY3IDIuNTUyIDIuNTUyIDAgMCAwLTEuNjI3LS40NlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0M3QjE5OVwiLFxuICAgIGQ6IFwiTTI3LjIxOCAxNy4xODFhLjc0Ni43NDYgMCAwIDEtLjM3NS0uMTk1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMjcuMjE5IDE3LjI3MWgtLjA5NWEuNy43IDAgMCAxLS4zNS0uMjUuMDkuMDkgMCAwIDEtLjAwNy0uMTAxLjA5MS4wOTEgMCAwIDEgLjE1Mi0uMDEuNTQuNTQgMCAwIDAgLjI3NS4xNmguMDZhLjEwMS4xMDEgMCAxIDEtLjAzNS4yMDFaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM3NENERERcIixcbiAgICBkOiBcIk0xNS40MDcuMDY2YzMuNjIyIDAgNy4wMDQuNSA4Ljc4NSA0LjAwMiAxLjU4NiAzLjg5OCAxIDguMTA1IDEuMjY2IDEyLjIyMy4yMSAzLjUzNy42NyA3LjYyNC0uOTcgMTAuOTA2LTEuNzE3IDMuNDQyLTYuMDUgNC4yOTctOS42MDEgNC4xODItMi43OTItLjEtNi4xNjQtMS03Ljc0LTMuNTYyLTEuODUxLTMuMDAyLS45NzYtNy40NDQtLjg0LTEwLjc3MS4xNi0zLjk0Mi0xLjA3MS03LjkuMjI1LTExLjc2MkM3Ljg3NyAxLjI4MiAxMS41LjM3NiAxNS40MDIuMDY2XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk0xNS41MDIgMzEuNDk0aC0uNjJhMTMuMjAyIDEzLjIwMiAwIDAgMS00LjM1OC0uODcgNi45NjkgNi45NjkgMCAwIDEtMy40NTctMi43MzdjLTEuNTAxLTIuNDIxLTEuMjMtNS43NjMtMS04LjcxNS4wNi0uNzQuMTE0LTEuNDQ2LjE0LTIuMTA2LjAyNi0xLjQtLjAzNC0yLjgtLjE4LTQuMTkyLS4yMTEtMi41MDItLjQzMS01LjA4OS40MS03LjU5NWE2LjY0NCA2LjY0NCAwIDAgMSAzLjUwMS00LjA0N0MxMS4yOS41NzIgMTIuOTQuMTkgMTUuMzY3IDBjMy41NzItLjAyNSA3LjA5NC40NzUgOC45MDUgNC4wMjIgMS4xNiAyLjg1MiAxLjE3NiA1LjkxNCAxLjE5NiA4Ljg3NiAwIDEuMTEgMCAyLjI1Ni4wOCAzLjM3NyAwIC4zNC4wNC42ODUuMDY1IDEuMDMuMjEgMy4yNDcuNDUgNi45MzQtMS4wNDYgOS45MTYtMS44NzEgMy43MzItNi41NzQgNC4yNzItOS4wNjUgNC4yNzJaTTE1LjQwNy4xNTZjLTMuNzY4LjMyLTcuNDQgMS4xMy04Ljc5IDUuMTU4LS44MzEgMi40NzEtLjYxIDUuMDM4LS40MDYgNy41MDQuMTQ3IDEuNC4yMDcgMi44MDYuMTggNC4yMTMtLjAyNS42NjUtLjA4NSAxLjM3LS4xNCAyLjExNi0uMjMgMi45MjItLjUgNi4yMzkuOTY2IDguNjA1LjYxNSAxIDIuNTk2IDMuMzM3IDcuNjcgMy41MDIgMi4xOTYuMDggNy41MDQtLjE3IDkuNTA1LTQuMTQyIDEuNDctMi45NDIgMS4yMzYtNi41OTkgMS4wMjYtOS44MjYgMC0uMzUtLjA0NS0uNjk1LS4wNjUtMS4wM2E2Ny40NTEgNjcuNDUxIDAgMCAxLS4wOC0zLjM1M2MwLTIuOTQxLS4wMy02LjAwMy0xLjE4MS04LjgwNUE2LjQzOCA2LjQzOCAwIDAgMCAyMC40NDUuODQxYTE0Ljk2IDE0Ljk2IDAgMCAwLTUuMDM4LS42ODVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNmZmZcIixcbiAgICBkOiBcIk0xNi4wNDIgNC45MjRjLjY1IDMuNzc3IDYuODI0IDIuNzgxIDUuOTM4LTEuMDMtLjc5NS0zLjQxOC02LjE1My0yLjQ3Mi01LjkzOCAxLjAzWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMTguOTc5IDcuMzlhMy40NTcgMy40NTcgMCAwIDEtMS4xMy0uMTg1IDIuNzk3IDIuNzk3IDAgMCAxLTEuODkyLTIuMjY2IDIuODgyIDIuODgyIDAgMCAxIC43OC0yLjIyMiAzLjQwNyAzLjQwNyAwIDAgMSAyLjAwMi0xIDMuMjAyIDMuMjAyIDAgMCAxIDIuMDMxLjM1IDIuNzI3IDIuNzI3IDAgMCAxIDEuMjk2IDEuODA2IDIuNjQzIDIuNjQzIDAgMCAxLS43NyAyLjY4MiAzLjUwMiAzLjUwMiAwIDAgMS0yLjMxNy44MzVabS0yLjg0Ny0yLjQ3NmEyLjYyNiAyLjYyNiAwIDAgMCAxLjc3NiAyLjEyNiAzLjQxNyAzLjQxNyAwIDAgMCAzLjI3Ny0uNjIgMi41MDIgMi41MDIgMCAwIDAgLjcxNi0yLjUwMiAyLjY3MiAyLjY3MiAwIDAgMC0zLjEzMi0yLjAzMSAyLjg4NyAyLjg4NyAwIDAgMC0yLjYzNyAzLjAyN1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI2ZmZlwiLFxuICAgIGQ6IFwiTTguNjYzIDUuNTM5Yy44NCAzLjI4NyA2LjEwMyAyLjQ0MSA1LjkwOC0uODU1LS4yMzUtMy45NTMtNi43MTQtMy4yMDctNS45MDguODU1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMTEuNDc0IDcuNzA1YTMuMjMyIDMuMjMyIDAgMCAxLTEuNTM2LS4zNzUgMi43MjcgMi43MjcgMCAwIDEtMS4zNTUtMS43NzYgMi43NTcgMi43NTcgMCAwIDEgLjk0LTIuODI3IDMuNTUyIDMuNTUyIDAgMCAxIDMuNTMyLS40NSAyLjY3MiAyLjY3MiAwIDAgMSAxLjYwMSAyLjQwMmMuMTA1IDEuNzUtMS4yODYgMi43NzEtMi42MTcgMy4wMDFhMy42NTcgMy42NTcgMCAwIDEtLjU2NS4wMjVaTTguNzYzIDUuNTJBMi43MzIgMi43MzIgMCAwIDAgMTIuMDMgNy41MmMxLjI2LS4yIDIuNTc2LTEuMTYgMi40NzYtMi44MDZhMi41MDEgMi41MDEgMCAwIDAtMS41LTIuMjYyIDMuMzc3IDMuMzc3IDAgMCAwLTMuMzU4LjQzIDIuNTk3IDIuNTk3IDAgMCAwLS44ODUgMi42MzdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNmZmZcIixcbiAgICBkOiBcIk0xNi43NjcgOS40ODFjLjA0OS41MjEuMDQ5IDEuMDQ2IDAgMS41NjZhMSAxIDAgMCAxLS41ODUuMzYuODYxLjg2MSAwIDAgMS0uNjU1LS41Yy0uMDMyLS41OS0uMDE3LTEuMTgzLjA0NS0xLjc3bDEuMTk1LjM0NFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAxMDEwMVwiLFxuICAgIGQ6IFwiTTE2LjIzNyAxMS40ODNoLS4wMjVhLjk0NC45NDQgMCAwIDEtLjcyNS0uNTY2IDUuOTUgNS45NSAwIDAgMSAwLTEuMjE1YzAtLjE4NS4wMy0uMzguMDM1LS41N3YtLjE1bDEuMzUuNDE0di4wODVjMCAuMTYgMCAuMzMuMDI2LjUuMDQ1LjM1OC4wNDUuNzIgMCAxLjA3NnYuMDI1YS43NS43NSAwIDAgMS0uNDc2LjM0bC0uMTU1LjA2aC0uMDNabS0uNTgtLjYzYS43NjYuNzY2IDAgMCAwIC41Ni40NDVsLjE0LS4wNTZhLjYuNiAwIDAgMCAuMzY2LS4yNmMuMDQtLjMzMi4wNC0uNjY4IDAtMSAwLS4xNTUgMC0uMzA1LS4wMjYtLjQ1NWwtMS0uMzA2YzAgLjE1NSAwIC4zMS0uMDMuNDYtLjA0NC4zODgtLjA1Ljc3OC0uMDE1IDEuMTY2bC4wMDUuMDA1Wk0xMC4xMTQgNS45NjRjLjQ5MSAwIC44OS0uNDMyLjg5LS45NjUgMC0uNTM0LS4zOTktLjk2Ni0uODktLjk2Ni0uNDkyIDAtLjg5LjQzMi0uODkuOTY2IDAgLjUzMy4zOTguOTY1Ljg5Ljk2NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI2ZmZlwiLFxuICAgIGQ6IFwiTTEwLjUxOSA1LjQ2NGMuMTE2IDAgLjIxLS4xMS4yMS0uMjQ1cy0uMDk0LS4yNDUtLjIxLS4yNDVjLS4xMTYgMC0uMjEuMTEtLjIxLjI0NXMuMDk0LjI0NS4yMS4yNDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMTAxMDFcIixcbiAgICBkOiBcIk0xNy41NjggNS43MjRjLjQ4MyAwIC44NzUtLjQzMi44NzUtLjk2NSAwLS41MzMtLjM5Mi0uOTY2LS44NzUtLjk2Ni0uNDg0IDAtLjg3Ni40MzMtLjg3Ni45NjYgMCAuNTMzLjM5Mi45NjUuODc2Ljk2NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI2ZmZlwiLFxuICAgIGQ6IFwiTTE3Ljk2MyA1LjIyNGMuMTE0IDAgLjIwNi0uMTEuMjA2LS4yNDUgMC0uMTM2LS4wOTItLjI0NS0uMjA2LS4yNDUtLjExMyAwLS4yMDUuMTEtLjIwNS4yNDVzLjA5Mi4yNDUuMjA1LjI0NVpNMTQuMjY2IDkuNDA2Yy0uMzkuOTQxLjIxNSAyLjgyMiAxLjI3IDEuNDM2YTExLjEyIDExLjEyIDAgMCAxIC4wNDYtMS43N2wtMS4zMTYuMzM0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMTQuODEyIDExLjQyOGEuNS41IDAgMCAxLS4yNi0uMDdjLS40MjYtLjI0Ni0uNjkxLTEuMjUxLS4zOS0yLjAwMnYtLjA0bDEuNS0uMzh2LjEyYzAgLjE5NSAwIC4zOS0uMDM1LjU3NWE1LjcxIDUuNzEgMCAwIDAgMCAxLjE4MXYuMDY1YTEuMDU2IDEuMDU2IDAgMCAxLS44MTUuNTVabS0uNDk2LTEuOTQ3Yy0uMjE1LjU4Ni0uMDQ1IDEuNTAxLjMzIDEuNzE2LjI3LjE1NS41Ny0uMTE1Ljc4LS4zODVhNi4xMjggNi4xMjggMCAwIDEgMC0xLjE4YzAtLjE0NiAwLS4zLjAzMS0uNDVsLTEuMTQuM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y2RDJBMlwiLFxuICAgIGQ6IFwiTTE0LjM4IDcuNTk1YTEuMTQ2IDEuMTQ2IDAgMCAwLS45NCAxLjYwMWMuNS45IDEuNjExLS4wOCAyLjMwMiAwIC43OTUgMCAxLjQ1Ljg0IDIuMDkuMTUuNzExLS43Ny0uMzA0LTEuNS0xLjEtMS44NTZsLTIuMzUxLjEwNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzIzMUYyMFwiLFxuICAgIGQ6IFwiTTE3LjI2OCA5LjcyN2EyIDIgMCAwIDEtLjczLS4yMDYgMi4yMDcgMi4yMDcgMCAwIDAtLjc5MS0uMjJjLS4yODcgMC0uNTcuMDYyLS44My4xOC0uNTYxLjE5NS0xLjE5Ni40MTYtMS41NTctLjIzYTEuMDggMS4wOCAwIDAgMSAwLTEuMDUgMS4yODEgMS4yODEgMCAwIDEgMS4wMDEtLjY4NmwyLjQwNi0uMTA1Yy41OS4yNSAxLjI2Ni43MDYgMS4zODEgMS4yMzZhLjk1NS45NTUgMCAwIDEtLjg4IDEuMDhabS0xLjUwMS0uNjA2Yy4yOTYuMDI0LjU4NC4xMDQuODUuMjM1LjQ1LjE5LjgwNi4zMzUgMS4xNjYtLjA1NWEuNjY0LjY2NCAwIDAgMCAuMjA1LS42MDVjLS4xLS40Ni0uNzM1LS44OC0xLjI1Ni0xLjFsLTIuMzI2LjA5NGExLjExIDEuMTEgMCAwIDAtLjg1LjU5LjkwNi45MDYgMCAwIDAgMCAuODc2Yy4yODUuNS43OTUuMzM1IDEuMzQuMTUuMjc0LS4xMjIuNTctLjE4NS44Ny0uMTg1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDEwMTAxXCIsXG4gICAgZDogXCJNMTQuMjY2IDcuNTZjLS4wNTUtMS4yNSAyLjMzNi0xLjQxIDIuNjE3LS4zNi4yOCAxLjA1LTIuNTAyIDEuMjktMi42MTcuMzZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR29sYW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Hb29nbGVHID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Hb29nbGVHKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2dvb2dsZV9nJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHhtbG5zWGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICBkOiBcIk0xNS4zMTkgMy4yNzhjMC0xLjEzMS0uMTAyLTIuMjItLjI5LTMuMjY0SDB2Ni4xNzJoOC41ODdjLS4zNyAxLjk5NS0xLjQ5NCAzLjY4NS0zLjE4NCA0LjgxNnY0LjAwNGg1LjE1N2MzLjAxNy0yLjc3OCA0Ljc1OC02Ljg2OSA0Ljc1OC0xMS43Mjh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIGQ6IFwiTTE0LjM0MyAxMi45NTZjNC4zMDggMCA3LjkyLTEuNDMgMTAuNTYtMy44NjZsLTUuMTU3LTQuMDA0Yy0xLjQyOS45NTgtMy4yNTYgMS41MjMtNS40MDMgMS41MjMtNC4xNTYgMC03LjY3NC0yLjgwNi04LjkyOC02LjU3OEguMDg0djQuMTM0YzIuNjI1IDUuMjE1IDguMDIxIDguNzkgMTQuMjU5IDguNzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIGQ6IFwiTTcuMDI4IDEwLjI1YTkuNTkgOS41OSAwIDAgMS0uNS0zLjAzMiA5LjU5IDkuNTkgMCAwIDEgLjUtMy4wMzJWLjA1MmgtNS4zM0ExNS45NSAxNS45NSAwIDAgMCAwIDcuMjE4YzAgMi41NzUuNjE3IDUuMDEyIDEuNjk3IDcuMTY2bDUuMzMxLTQuMTM0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2cnKSxcbiAgICBkOiBcIk0xNC4zNDMgNi4zOTJjMi4zNDIgMCA0LjQ0Ni44MDUgNi4xIDIuMzg2bDQuNTc2LTQuNTc2QzIyLjI1NiAxLjYyNyAxOC42NDQuMDQ2IDE0LjM0My4wNDYgOC4xMDUuMDQ2IDIuNzA5IDMuNjIyLjA4MyA4LjgzNmw1LjMzMiA0LjEzNGMxLjI1NC0zLjc3IDQuNzcyLTYuNTc4IDguOTI4LTYuNTc4elwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxNS45NTUgMTMuMDg3KVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNDI4NUY0XCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTS4wMDEgMTUuMDA2aDE1LjMxOFYuMDE0SC4wMDF6XCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDEuNjEzIDE5LjAwMylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdjJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzM0QTg1M1wiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0uMDg0IDEyLjk1NmgyNC44MTlWLjAzMUguMDg0elwiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIilcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDguNzg0KVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZicpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2UnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkJCQzA0XCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTAgMTQuMzg0aDcuMDI4Vi4wNTJIMHpcIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2YnKSwgXCIpXCIpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMS42MTMpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdoJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZycpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFQTQzMzVcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNLjA4NCAxMi45N2gyNC45MzVWLjA0NkguMDg0elwiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnaCcpLCBcIilcIilcbiAgfSkpKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Hb29nbGVHOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29IYXByb3h5ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29IYXByb3h5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2hhcHJveHknKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBjbGlwUGF0aDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgc3Ryb2tlOiBcIiMwNTQ4NkRcIixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMCxcbiAgICBzdHJva2VXaWR0aDogMC4xMixcbiAgICBkOiBcIm0xNi4wNSAxMy4yMzctMy4xMS0zLjYxMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgc3Ryb2tlOiBcIiMwNTQ4NkRcIixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMCxcbiAgICBzdHJva2VXaWR0aDogMC4wNixcbiAgICBkOiBcIm02LjExNyAxMC41MjggMi41MDkgMy41MTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIHN0cm9rZTogXCIjMDU0ODZEXCIsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTAsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMTIsXG4gICAgZDogXCJtMTYuMDUgMTMuMjM3IDMuMTEtMy42MTJNMTkuODYzIDE3LjE1bDMuNzEyLTMuMTFNMTkuODYzIDE3LjE1bDMuNzEyIDMuMzExTTE5LjE2IDI0LjU3NWwtMy4xMS0zLjUxMU0xMi45NCAyNC41NzVsMy4xMS0zLjUxMU04LjYyNSAyMC4yNmwzLjUxMi0zLjExTTguNjI1IDE0LjA0bDMuNTEyIDMuMTFNMTYuMDUgMTMuMjM4bC03LjQyNS44MDJNMTYuMDUgMTMuMjM4bDcuNTI1LjgwMk0xOS44NjMgMTcuMTVsLS43MDItNy41MjVNMTkuODYzIDE3LjE1bC0uNzAyIDcuNDI1TTIzLjU3NSAyMC40NjFsLTcuNTI1LjYwMk04LjYyNSAyMC4yNjFsNy40MjUuODAzTTEyLjk0IDI0LjU3NWwtLjgwMy03LjQyNU0xMi45NCA5LjYyNWwtLjgwMyA3LjUyNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgc3Ryb2tlOiBcIiMwNTQ4NkRcIixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMCxcbiAgICBzdHJva2VXaWR0aDogMC4wNixcbiAgICBkOiBcIm01LjExNCAxNS4wNDMgMy41MTEtMS4wMDNNOS4zMjggNy4xMTdsMy42MTIgMi41MDlNMTMuNzQzIDUuNTEybC0uODAzIDQuMTEzTTEzLjc0MyA1LjUxMmw1LjQxOCA0LjExM00xOC4zNTggNS41MTJsLjgwMyA0LjExM00yMi43NzMgNy4xMTcgMTkuMTYgOS42MjZNMjUuOTgzIDEwLjUyOGwtNi44MjItLjkwM00yMy41NzUgMTQuMDRsMi40MDgtMy41MTJNMjMuNTc1IDE0LjA0bDMuNDEyIDEuMDAzTTIzLjU3NSAxNC4wNGwzLjQxMiA1LjIxN00xOC4zNTggNS41MTIgMTIuOTQgOS42MjVNMjMuNTc2IDE0LjA0bC0uODAzLTYuOTIzTTIzLjU3NSAyMC40NjJsMy40MTItMS4yMDRNMjMuNTc1IDIwLjQ2MmwzLjQxMi01LjQxOE0yMy41NzUgMjAuNDYxbDIuNDA4IDMuMzEyTTIzLjU3NiAyMC40NjFsLS44MDMgNi43MjNNMTkuMTYgMjQuNTc1bDMuNjEzIDIuNjA5TTE5LjE2IDI0LjU3NWw2LjgyMy0uODAyTTE5LjE2IDI0LjU3NWwtLjgwMiA0LjIxNE0xOS4xNiAyNC41NzVsLTUuNDE3IDQuMjE0TTEyLjk0IDI0LjU3NWwuODAzIDQuMjE0TTEyLjk0IDI0LjU3NWw1LjQxOCA0LjIxNE0xMi45NCAyNC41NzVsLTMuNjEyIDIuNjA5TTEyLjk0IDI0LjU3NWwtNi44MjMtLjgwMk04LjYyNiAyMC4yNjFsLTIuNTA5IDMuNTEyTTguNjI1IDIwLjI2MWwuNzAzIDYuOTIzTTguNjI1IDIwLjI2bC0zLjUxMS0xLjAwMk04LjYyNSAxNC4wNGwtMy41MTEgNS4yMTdNOC42MjUgMjAuMjZsLTMuNTExLTUuMjE3TTkuMzI4IDcuMTE3bC0uNzAzIDYuOTIzTTYuMTE3IDEwLjUyOGw2LjgyMy0uOTAzXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBzdHJva2U6IFwiIzA4M0Q1RlwiLFxuICAgIHN0cm9rZU1pdGVybGltaXQ6IDEwLFxuICAgIHN0cm9rZVdpZHRoOiAwLjA1LFxuICAgIGQ6IFwiTTkuMzI3IDcuMTE3IDYuNzIgNS44MTNNOS4zMjggNy4xMTdsLS4yMDEtMi45MU0xMy43NDIgNS41MTIgOS4xMjcgNC4yMDdNMTMuNzQyIDUuNTEybC0yLjAwNi0yLjUwOU0xMy43NDMgNS41MTJsLjgwMi0yLjkxTTkuMzI4IDcuMTE3bDIuNDA4LTQuMTE0TTE4LjM1OCA1LjUxMmwtMy44MTMtMi45MU0xOC4zNTggNS41MTJsLS44MDMtMy4wMU0xMy43NDMgNS41MTJsMy44MTItMy4wMU0xOC4zNTggNS41MTJsMi4wMDctMi41MDlNMjIuNzczIDcuMTE3bC0yLjQwOC00LjExNE0yMi43NzMgNy4xMTdsLjMwMS0yLjkxTTE4LjM1OCA1LjUxMmw0LjcxNi0xLjMwNU0yMi43NzMgNy4xMTdsMi43MDktMS40MDVNMjIuNzczIDcuMTE3bDQuNzE2LjcwM00yNS45ODMgMTAuNTI4bDEuNTA1LTIuNzA5TTI1Ljk4NCAxMC41MjhsLS41MDItNC44MTZNMjUuOTgzIDEwLjUyOGwzLjExLS4zTTI1Ljk4MyAxMC41MjhsNC4yMTQgMi4zMDhNMjYuOTg3IDE1LjA0NGwyLjEwNy00LjgxN00yNi45ODcgMTUuMDQzbDMuMjEtMi4yMDdNMjYuOTg3IDE1LjA0M2wzLjYxMi43MDNNMjYuOTg3IDE5LjI1OGwzLjYxMi0zLjUxMk0yNi45ODcgMTkuMjU4bDMuNzEyLS43MDNNMjYuOTg3IDE1LjA0M2wzLjcxMiAzLjUxMk0yNi45ODcgMTkuMjU4bDMuMTEgMi4xMDdNMjUuOTgzIDIzLjc3M2w0LjExNC0yLjQwOU0yNS45ODMgMjMuNzczbDMuMTEuM00yNi45ODcgMTkuMjU4bDIuMTA3IDQuODE2TTI1Ljk4MyAyMy43NzNsMS41MDUgMi43MDlNMjUuOTg0IDIzLjc3M2wtLjUwMiA0LjcxNU0yNS40ODIgMjguNDg4bC0yLjcxLTEuMzA0TTIyLjc3MyAyNy4xODRsLjIgMi45MU0yMi43NzMgMjcuMTg0bDQuNzE2LS43MDNNMjIuNzczIDI3LjE4NGwtMi40MDggNC4xMTRNMTguMzU4IDI4Ljc5bDIuMDA3IDIuNTA4TTE4LjM1OCAyOC43OWw0LjYxNSAxLjMwNE0xOC4zNTggMjguNzlsLS44MDMgMy4wMU0xOC4zNTggMjguNzlsLTMuODEzIDMuMDFNMTMuNzQzIDI4Ljc5bC44MDIgMy4wMU0xMy43NDMgMjguNzlsMy44MTIgMy4wMU0xMy43NDIgMjguNzlsLTIuMDA2IDIuNTA4TTkuMzI4IDI3LjE4NGwyLjQwOCA0LjExNE0xMy43NDIgMjguNzlsLTQuNjE1IDEuNDA0TTkuMzI4IDI3LjE4NGwtLjIwMSAzLjAxTTkuMzI4IDI3LjE4NGwtMi43MSAxLjQwNE02LjExNyAyMy43NzNsLjUwMiA0LjgxNk05LjMyOCAyNy4xODRsLTQuNzE2LS43MDNNNi4xMTcgMjMuNzczbC0xLjUwNSAyLjcwOU02LjExNyAyMy43NzNsLTMuMTEuM002LjExNyAyMy43NzNsLTQuMjE0LTIuNDA5TTUuMTE0IDE5LjI1OGwtMy4yMSAyLjEwN001LjExNCAxOS4yNTggMS40IDE4LjU1NU01LjExNCAxOS4yNThsLTIuMTA3IDQuODE2TTUuMTE0IDE1LjA0MyAxLjQgMTguNTU1TTUuMTE0IDE5LjI1OCAxLjQgMTUuNzQ2TTUuMTE0IDE1LjA0M2wtMy4xMS0yLjEwNk01LjExNCAxNS4wNDNsLTMuNzEzLjcwM001LjExNCAxNS4wNDRsLTIuMDA3LTQuODE3TTYuMTE3IDEwLjUyOGwtMy4wMS0uM002LjExNyAxMC41MjhsLTQuMTE0IDIuNDA4TTYuMTE3IDEwLjUyOCA0LjcxMiA3LjkyTTYuMTE3IDEwLjUyOGwuNjAyLTQuNzE1TTkuMzI4IDcuMTE3bC00LjYxNi44MDNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwNkRBOFwiLFxuICAgIGQ6IFwiTTEzLjk0MyAxNS4yNDRoLTMuNjEydjMuNTkyaDMuNjEydi0zLjU5MlpNMTcuNzU2IDExLjMzMWgtMy42MTJ2My41OTJoMy42MTJ2LTMuNTkyWk0xNy43NTYgMTkuMTU3aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJaTTIxLjY2OSAxNS4yNDRoLTMuNjEydjMuNTkyaDMuNjEydi0zLjU5MlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzJGNzdCQ1wiLFxuICAgIGQ6IFwiTTIwLjM2NSA4LjQyMWgtMi41MDlWMTAuOWgyLjUwOVY4LjQyWk0xNC4xNDQgOC4zMjFoLTIuNTA5djIuNDc4aDIuNTA5VjguMzIxWk05LjgzIDEyLjgzNkg3LjMydjIuNDc4SDkuODN2LTIuNDc4Wk05LjgzIDE4Ljk1Nkg3LjMydjIuNDc5SDkuODN2LTIuNDc5Wk0yNC42NzkgMTguOTU2SDIyLjE3djIuNDc5aDIuNTA5di0yLjQ3OVpNMjQuNjc5IDEyLjczNkgyMi4xN3YyLjQ3OGgyLjUwOXYtMi40NzhaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMxMzlCRDdcIixcbiAgICBkOiBcIk02LjkyIDkuNjI1SDUuMzE0djEuNjc2SDYuOTJWOS42MjVaTTEwLjEzIDYuMjE0SDguNTI2djEuNjc1aDEuNjA2VjYuMjE0Wk0xNC40NDUgNC42MDloLTEuNjA2djEuNjc1aDEuNjA2VjQuNjFaTTUuOTE2IDE0LjE0SDQuMzExdjEuNjc2aDEuNjA1VjE0LjE0Wk0yNi43ODYgOS44MjZIMjUuMDh2MS42NDZoMS43MDZWOS44MjZaTTIzLjU3NSA2LjQxNUgyMS44N1Y4LjA2aDEuNzA1VjYuNDE1Wk0xOS4yNiA0LjgxaC0xLjcwNXYxLjY0NWgxLjcwNlY0LjgwOVpNMjcuNjg5IDE0LjQ0MWgtMS42MDV2MS42NDZoMS42MDVWMTQuNDRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMyRjc3QkNcIixcbiAgICBkOiBcIk0xNC4xNDQgMjMuMjdoLTIuNTA5djIuNDc5aDIuNTA5di0yLjQ3OFpNMjAuMjY0IDIzLjI3aC0yLjUwOHYyLjQ3OWgyLjUwOHYtMi40NzhaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMxMzlCRDdcIixcbiAgICBkOiBcIk0yNi42ODUgMjIuNzdIMjUuMDh2MS42NzVoMS42MDV2LTEuNjc2Wk0yMy4zNzUgMjYuMDhIMjEuNzd2MS42NzZoMS42MDVWMjYuMDhaTTE5LjA2IDI3LjY4NmgtMS42MDV2MS42NzVoMS42MDV2LTEuNjc1Wk0yNy41ODkgMTguMjU0aC0xLjYwNnYxLjY3NmgxLjYwNnYtMS42NzZaTTYuOTIgMjIuOTdINS4yMTR2MS42NDZINi45MlYyMi45N1pNMTAuMDMgMjYuMzgxSDguMzI1djEuNjQ2aDEuNzA1VjI2LjM4Wk0xNC40NDUgMjcuOTg3aC0xLjcwNnYxLjY0NWgxLjcwNnYtMS42NDVaTTUuODE2IDE4LjM1NUg0LjIxVjIwaDEuNjA2di0xLjY0NVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAzQTlEQVwiLFxuICAgIGQ6IFwiTTcuMTIgNS4zMTFoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0xLjkwMyAxNS4yNDRIMXYuOTMzaC45MDN2LS45MzNaTTI1Ljc4MiA1LjIxaC0uOTAzdi45MzRoLjkwM1Y1LjIxWk0yLjUwNSAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0Wk0xMi4xMzcgMi41MDJoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0zLjUwOCA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTUuMTEzIDcuMzE4SDQuMjF2LjkzM2guOTAzdi0uOTMzWk05LjYyOSAzLjgwNmgtLjkwM3YuOTAzaC45MDN2LS45MDNaTTE1LjA0NyAyLjFoLS45MDN2LjkwM2guOTAzVjIuMVpNMjMuMzc0IDMuNjA1aC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMjkuMjk1IDkuNzI2aC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMzAuNDk4IDEyLjMzNWgtLjkwM3YuOTMzaC45MDN2LS45MzRaTTI3LjY5IDcuMzE4aC0uOTA0di45MzNoLjkwM3YtLjkzM1pNMzAuOSAxNS4xNDRoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0xNy44NTYgMmgtLjkwM3YuOTMzaC45MDNWMlpNMjAuNjY1IDIuNjAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAzQTlEQVwiLFxuICAgIGQ6IFwiTTcuMTIgNS4zMTFoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0xLjkwMyAxNS4yNDRIMXYuOTMzaC45MDN2LS45MzNaTTI1Ljc4MiA1LjIxaC0uOTAzdi45MzRoLjkwM1Y1LjIxWk0yLjUwNSAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0Wk0xMi4xMzcgMi41MDJoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0zLjUwOCA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTUuMTEzIDcuMzE4SDQuMjF2LjkzM2guOTAzdi0uOTMzWk05LjYyOSAzLjgwNmgtLjkwM3YuOTAzaC45MDN2LS45MDNaTTE1LjA0NyAyLjFoLS45MDN2LjkwM2guOTAzVjIuMVpNMjMuMzc0IDMuNjA1aC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMjkuMjk1IDkuNzI2aC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMzAuNDk4IDEyLjMzNWgtLjkwM3YuOTMzaC45MDN2LS45MzRaTTI3LjY5IDcuMzE4aC0uOTA0di45MzNoLjkwM3YtLjkzM1pNMzAuOSAxNS4xNDRoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0xNy44NTYgMmgtLjkwM3YuOTMzaC45MDNWMlpNMjAuNjY1IDIuNjAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMjUuNjgyIDI3Ljg4NmgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTMxIDE3Ljk1M2gtLjkwM3YuOTMzSDMxdi0uOTMzWk03LjEyIDI3Ljk4N2gtLjkwM3YuOTMzaC45MDN2LS45MzNaTTMwLjM5OCAyMC43NjNoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0yMC42NjUgMzAuNTk2aC0uOTAzdi45MzNoLjkwM3YtLjkzM1pNMjkuMjk1IDIzLjM3MWgtLjkwM3YuOTMzaC45MDN2LS45MzNaTTI3LjY5IDI1Ljc4aC0uOTA0di45MzJoLjkwM3YtLjkzM1pNMjMuMjc0IDI5Ljc5M2gtLjkwM3YuOTAyaC45MDN2LS45MDJaTTE3Ljc1NiAzMS40OThoLS45MDN2LjkwM2guOTAzdi0uOTAzWk05LjQyOCAyOS40OTJoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0zLjUwOCAyMy40NzJoLS45MDN2LjkzM2guOTAzdi0uOTMzWk0yLjMwNCAyMC44NjNoLS45MDN2LjkzM2guOTAzdi0uOTMzWk01LjAxMyAyNS44OEg0LjExdi45MzNoLjkwM3YtLjkzM1pNMS45MDMgMTcuOTUzSDF2LjkzM2guOTAzdi0uOTMzWk0xNC45NDcgMzEuNDk4aC0uOTAzdi45MzNoLjkwMnYtLjkzM1pNMTIuMTM3IDMwLjU5NmgtLjkwM3YuOTMzaC45MDN2LS45MzNaXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwiY2xpcFBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJylcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI2ZmZlwiLFxuICAgIGQ6IFwiTTAgMGgzMnYzMkgwVjBaXCJcbiAgfSkpKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29IYXByb3h5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29JYm0gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0libShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19pYm0nKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICB4MTogXCI4LjAwNSVcIixcbiAgICB4MjogXCI1My4zMyVcIixcbiAgICB5MTogXCI3OS4zMjMlXCIsXG4gICAgeTI6IFwiNzkuMzI0JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzNCREFERVwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMwLjQ3NiVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzM2Q0VFMVwiLFxuICAgIHN0b3BPcGFjaXR5OiAwLjM4M1xuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyMUEyRUZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICB4MTogXCIxOS40OTYlXCIsXG4gICAgeDI6IFwiNzEuMzA5JVwiLFxuICAgIHkxOiBcIjgzLjM0NCVcIixcbiAgICB5MjogXCIxNy42MzglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMjA3RkZBXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNkVBRkYxXCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgeDE6IFwiMjEuOTA5JVwiLFxuICAgIHgyOiBcIjIxLjkwOSVcIixcbiAgICB5MTogXCI5Ni4zMTQlXCIsXG4gICAgeTI6IFwiMjkuNDU0JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzQyQzFFNlwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjU3LjA3NiVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzZGQjlFRlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjg2LjcxNiVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzYwQ0JFN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzVDQ0ZFNVwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIHgxOiBcIjk2LjIwNSVcIixcbiAgICB4MjogXCItMS4xNzIlXCIsXG4gICAgeTE6IFwiMTIuNjY3JVwiLFxuICAgIHkyOiBcIi0yMi4yNTIlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNkZCOUVGXCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMjIuNDI3JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMzhEMkUwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiOTEuMjAzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNkFCRkVDXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNUNDRkU1XCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdlJyksXG4gICAgeDE6IFwiOS40MDglXCIsXG4gICAgeDI6IFwiODAuNTg5JVwiLFxuICAgIHkxOiBcIjg3Ljc2NCVcIixcbiAgICB5MjogXCI4My4xMzglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMTI2Q0ZEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMjFBMUVGXCJcbiAgfSkpKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzhEMkUwXCIsXG4gICAgZDogXCJNNC4yNjIgMTMuMTIyYS42MDQuNjA0IDAgMCAxLS4zLS4wOGwtMi44NDQtMS42MjVhLjYxNy42MTcgMCAwIDEtLjI5NS0uNzM0LjYwOC42MDggMCAwIDEgLjg2OC0uMzE1bDIuODQzIDEuNjI1Yy4yOS4xNTkuNDA1LjUxNC4yNjEuODFhLjYwMy42MDMgMCAwIDEtLjUzMy4zMlptNC45MTQtNC44NjRhLjYwMy42MDMgMCAwIDEtLjUyMi0uMjk4TDcuMDEyIDUuMTQ0YS42MTUuNjE1IDAgMCAxIC4xMTUtLjc4Mi42MDYuNjA2IDAgMCAxIC45MS4xNTdsMS42NCAyLjgxM2EuNjE3LjYxNyAwIDAgMS0uMTU4LjgxOWMtLjEuMDctLjIyLjEwNy0uMzQzLjEwN1ptNi4xMDctMi40MTZWMi42MzVhLjYyNC42MjQgMCAwIDEgLjU3NS0uNjM0LjYwNS42MDUgMCAwIDEgLjQ0My4xNjQuNTkzLjU5MyAwIDAgMSAuMTg2LjQzMXYzLjI4NWEuNTkzLjU5MyAwIDAgMS0uMTg2LjQzLjYwNS42MDUgMCAwIDEtLjQ0My4xNjUuNjI0LjYyNCAwIDAgMS0uNTc1LS42MzRabTcuMzEyIDIuNDE2YS42MDQuNjA0IDAgMCAxLS4zNDMtLjEwNy42MTcuNjE3IDAgMCAxLS4xNTktLjgybDEuNjQtMi44MTJhLjYwMi42MDIgMCAwIDEgLjkxMS0uMTU3Yy4yMjMuMi4yNzEuNTI4LjExNS43ODJMMjMuMTE3IDcuOTZhLjYwMy42MDMgMCAwIDEtLjUyMi4yOThabTQuOTE0IDQuODY0YS42MDIuNjAyIDAgMCAxLS41MzQtLjMxOS42MTYuNjE2IDAgMCAxIC4yNjItLjgxbDIuODE4LTEuNjExYS42MjYuNjI2IDAgMCAxIC43ODMuMTEyLjU5Mi41OTIgMCAwIDEtLjE1Ni45MDZsLTIuODczIDEuNjQzYS42MDQuNjA0IDAgMCAxLS4zLjA4WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKSxcbiAgICBkOiBcIm0xNi41MzYgMTkuNjQ1LTEuMjA0LS4wMDljLjAyNi0zLjM3NyAyLjE0Ni02LjM5MSA1LjMzNy03LjU4NWE4LjMwOCA4LjMwOCAwIDAgMSA5LjA2OCAyLjE5N2wtLjg5Ny43OTVhNy4wOTcgNy4wOTcgMCAwIDAtNy43NDUtMS44NzZjLTIuNzI2IDEuMDE5LTQuNTM3IDMuNTkzLTQuNTU5IDYuNDc4WlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAyKVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk0uMDI5IDIwLjkwOWMuMDIyLTMuMzU0IDIuNDc1LTYuMjA4IDUuODE1LTYuNzY0bC4yMDEgMS4xNzZjLTIuNzY0LjQ2LTQuNzk0IDIuODItNC44MTIgNS41OTZMLjAyOSAyMC45MVpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpLCBcIilcIiksXG4gICAgZDogXCJNOC4yNDYgMjQuNzM3YTEwLjYyNSAxMC42MjUgMCAwIDEgMC0xNS4xMzFjNC4yMTktNC4xNzggMTEuMDYtNC4xNzggMTUuMjc5IDBhMTAuODkgMTAuODkgMCAwIDEgMS4zODQgMS42NzhsLTEuMDA0LjY1N2E5LjUxNyA5LjUxNyAwIDAgMC0xLjIzMS0xLjQ5MmMtMy43NS0zLjcxMy05LjgyOC0zLjcxMy0xMy41NzcgMGE5LjQ0MiA5LjQ0MiAwIDAgMCAwIDEzLjQ0NWwtLjg1MS44NDNaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTUuODM2IDEzLjIzNGMuNDA0LTEuMzMyIDEuMzMtMi41NiAyLjQxLTMuNjI4IDQuMjE5LTQuMTc4IDExLjA2LTQuMTc4IDE1LjI3OSAwYTEwLjg5IDEwLjg5IDAgMCAxIDEuMzg0IDEuNjc4bC0xLjAwNC42NTdhOS41MTcgOS41MTcgMCAwIDAtMS4yMzEtMS40OTJjLTMuNzUtMy43MTMtOS44MjgtMy43MTMtMTMuNTc3IDBhOS40NzQgOS40NzQgMCAwIDAtMi4wNzQgMy4wNmMtMS40NTIgMy40NS0yLjM1OCAzLjU5My0xLjE4Ny0uMjc1WlwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAyKVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdlJyksIFwiKVwiKSxcbiAgICBkOiBcIk0yMy41MjQgMjcuODdINi45NmE3LjAxMiA3LjAxMiAwIDAgMS00LjkyMi0yLjA1OUE2Ljg3NiA2Ljg3NiAwIDAgMSAuMDI5IDIwLjkxbDEuMjA0LjAwOWE1LjY5IDUuNjkgMCAwIDAgMS42NiA0LjA1NSA1LjgwMiA1LjgwMiAwIDAgMCA0LjA3MSAxLjcwNWgxNi42MThjMi43OC4wMDIgNS4zMDItMS42MTYgNi40MzgtNC4xM2E2LjkyOSA2LjkyOSAwIDAgMC0xLjE4LTcuNTA1bC44OTctLjc5NWE4LjExMiA4LjExMiAwIDAgMSAxLjM4NCA4Ljc4NWMtMS4zMjkgMi45NDMtNC4yNzkgNC44MzctNy41MzQgNC44MzhoLS4wNjNaXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0libTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvSWJtTW9ubyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvSWJtTW9ubyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIm0uMDQ3IDIyLjkwOSAxLjE4Ni4wMDlhNS42OSA1LjY5IDAgMCAwIDEuNjYgNC4wNTUgNS44MDIgNS44MDIgMCAwIDAgNC4wNzEgMS43MDVoMTYuNjE4YzIuNzguMDAyIDUuMzAyLTEuNjE2IDYuNDM4LTQuMTNhNi45MjkgNi45MjkgMCAwIDAtMS4xOC03LjUwNWwuODk3LS43OTVhOC4xMTIgOC4xMTIgMCAwIDEgMS4zODQgOC43ODVjLTEuMzI5IDIuOTQzLTQuMjc5IDQuODM3LTcuNTM0IDQuODM4SDYuOTZhNy4wMTIgNy4wMTIgMCAwIDEtNC45MjItMi4wNkE2Ljg3NiA2Ljg3NiAwIDAgMSAuMDI5IDIyLjkxaC4wMTgtLjAxOGMuMDE3LTIuNzEgMS42Mi01LjA5MSAzLjk5Ny02LjIuMTE0LS4wNTQuMzIuMjkuNjE5IDEuMDNhNS43MSA1LjcxIDAgMCAwLTMuNDEyIDUuMThsLTEuMTg2LS4wMVptNC4yMTUtOS43ODdhLjYwNC42MDQgMCAwIDEtLjMtLjA4bC0yLjg0NC0xLjYyNWEuNjE3LjYxNyAwIDAgMS0uMjk1LS43MzQuNjA4LjYwOCAwIDAgMSAuODY4LS4zMTVsMi44NDMgMS42MjVjLjI5LjE1OS40MDUuNTE0LjI2MS44MWEuNjAzLjYwMyAwIDAgMS0uNTMzLjMyWm00LjkxNC00Ljg2NGEuNjAzLjYwMyAwIDAgMS0uNTIyLS4yOThMNy4wMTIgNS4xNDRhLjYxNS42MTUgMCAwIDEgLjExNS0uNzgyLjYwNi42MDYgMCAwIDEgLjkxLjE1N2wxLjY0IDIuODEzYS42MTcuNjE3IDAgMCAxLS4xNTguODE5Yy0uMS4wNy0uMjIuMTA3LS4zNDMuMTA3Wm02LjEwNy0yLjQxNlYyLjYzNWEuNjI0LjYyNCAwIDAgMSAuNTc1LS42MzQuNjA1LjYwNSAwIDAgMSAuNDQzLjE2NC41OTMuNTkzIDAgMCAxIC4xODYuNDMxdjMuMjg1YS41OTMuNTkzIDAgMCAxLS4xODYuNDMuNjA1LjYwNSAwIDAgMS0uNDQzLjE2NS42MjQuNjI0IDAgMCAxLS41NzUtLjYzNFptNy4zMTIgMi40MTZhLjYwNC42MDQgMCAwIDEtLjM0My0uMTA3LjYxNy42MTcgMCAwIDEtLjE1OS0uODJsMS42NC0yLjgxMmEuNjAyLjYwMiAwIDAgMSAuOTExLS4xNTdjLjIyMy4yLjI3MS41MjguMTE1Ljc4MkwyMy4xMTcgNy45NmEuNjAzLjYwMyAwIDAgMS0uNTIyLjI5OFptNC45MTQgNC44NjRhLjYwMi42MDIgMCAwIDEtLjUzNC0uMzE5LjYxNi42MTYgMCAwIDEgLjI2Mi0uODFsMi44MTgtMS42MTFhLjYyNi42MjYgMCAwIDEgLjc4My4xMTIuNTkyLjU5MiAwIDAgMS0uMTU2LjkwNmwtMi44NzMgMS42NDNhLjYwNC42MDQgMCAwIDEtLjMuMDhaTTE2LjM2NiAxOS43OEgxNmEyLjMyMiAyLjMyMiAwIDAgMS0uMzAyIDBjLS4wOS0uMDExLS4xNTIuMDUtLjA4Ni0uMTk2YTguMjA0IDguMjA0IDAgMCAxIDUuMDU3LTUuNTMzIDguMzA4IDguMzA4IDAgMCAxIDkuMDY4IDIuMTk3bC0uODk3Ljc5NWE3LjA5NyA3LjA5NyAwIDAgMC03Ljc0NS0xLjg3NiA3LjAwOSA3LjAwOSAwIDAgMC00LjI4OCA0LjYxM2MtLjExNS4zOTktLjExNS4zOTkgMCAwaC0uNDRaTTYuMTU0IDIzLjgyNmExMC42MjYgMTAuNjI2IDAgMCAxIDIuMDkyLTEyLjIyYzQuMjE5LTQuMTc4IDExLjA2LTQuMTc4IDE1LjI3OSAwbC0uODUxLjg0M2MtMy43NS0zLjcxMy05LjgyOC0zLjcxMy0xMy41NzcgMEE5LjQ0MiA5LjQ0MiAwIDAgMCA3LjI2NCAyMy4zNmE2Ljk5IDYuOTkgMCAwIDAtLjQxOC4xNzJsLS4yMTIuMDk0LS4xNjIuMDc3LS4wOTQuMDMtLjA5LjAzOWMuNjQ4LS4yODIuOTY1LS40Mi45NS0uNDEyLS4wMjYuMDE1LTEuMDczLjQ4OS0xLjA4NC40NjZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvSWJtTW9ubzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvS2Fma2EgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0thZmthKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuNTY1IDE3LjYyM2MtMS4xNzMgMC0yLjIyNS41Mi0yLjk0NSAxLjMzN2wtMS44NDUtMS4zMDZjLjE5Ni0uNTQuMzA5LTEuMTE4LjMwOS0xLjcyNCAwLS41OTYtLjEwOS0xLjE2NS0uMjk4LTEuNjk2bDEuODQtMS4yOTNhMy45MTQgMy45MTQgMCAwIDAgMi45MzkgMS4zMzEgMy45MyAzLjkzIDAgMCAwIDMuOTI2LTMuOTI2IDMuOTMgMy45MyAwIDAgMC0zLjkyNi0zLjkyNiAzLjkzIDMuOTMgMCAwIDAtMy45MjYgMy45MjZjMCAuMzg3LjA1OC43NjEuMTYzIDEuMTE1bC0xLjg0MiAxLjI5M2E1LjA2OCA1LjA2OCAwIDAgMC0zLjE0LTEuODI1VjguNzFhMy45MzIgMy45MzIgMCAwIDAgMy4xMTktMy44NDJBMy45MyAzLjkzIDAgMCAwIDEyLjAxMi45NDFhMy45MyAzLjkzIDAgMCAwLTMuOTI2IDMuOTI2IDMuOTMgMy45MyAwIDAgMCAzLjA0OCAzLjgyNHYyLjI0OWE1LjA3NSA1LjA3NSAwIDAgMC00LjE5MyA0Ljk5IDUuMDc1IDUuMDc1IDAgMCAwIDQuMjI5IDQuOTk1VjIzLjNhMy45MzEgMy45MzEgMCAwIDAtMy4wODQgMy44MzMgMy45MyAzLjkzIDAgMCAwIDMuOTI2IDMuOTI2IDMuOTMgMy45MyAwIDAgMCAzLjkyNy0zLjkyNiAzLjkzMSAzLjkzMSAwIDAgMC0zLjA4NC0zLjgzM3YtMi4zNzVhNS4wNyA1LjA3IDAgMCAwIDMuMDg3LTEuNzk1bDEuODU3IDEuMzE0Yy0uMTAzLjM1MS0uMTYuNzIxLS4xNiAxLjEwNWEzLjkzIDMuOTMgMCAwIDAgMy45MjYgMy45MjYgMy45MyAzLjkzIDAgMCAwIDMuOTI2LTMuOTI2IDMuOTMgMy45MyAwIDAgMC0zLjkyNi0zLjkyNlptMC05LjE4YzEuMDUgMCAxLjkwMy44NTMgMS45MDMgMS45MDNzLS44NTQgMS45MDMtMS45MDMgMS45MDNhMS45MDYgMS45MDYgMCAwIDEtMS45MDQtMS45MDNjMC0xLjA1Ljg1NC0xLjkwNCAxLjkwNC0xLjkwNFpNMTAuMTA5IDQuODY2YzAtMS4wNS44NTQtMS45MDMgMS45MDMtMS45MDMgMS4wNSAwIDEuOTA0Ljg1NCAxLjkwNCAxLjkwMyAwIDEuMDUtLjg1NCAxLjkwNC0xLjkwNCAxLjkwNGExLjkwNiAxLjkwNiAwIDAgMS0xLjkwMy0xLjkwNFptMy44MDcgMjIuMjY2YzAgMS4wNS0uODU0IDEuOTAzLTEuOTA0IDEuOTAzYTEuOTA2IDEuOTA2IDAgMCAxLTEuOTAzLTEuOTAzYzAtMS4wNS44NTQtMS45MDQgMS45MDMtMS45MDQgMS4wNSAwIDEuOTA0Ljg1NCAxLjkwNCAxLjkwNFptLTEuOTA0LTguNTQ4YTIuNjU4IDIuNjU4IDAgMCAxLTIuNjU1LTIuNjU1IDIuNjU4IDIuNjU4IDAgMCAxIDIuNjU1LTIuNjU1IDIuNjU4IDIuNjU4IDAgMCAxIDIuNjU1IDIuNjU1IDIuNjU4IDIuNjU4IDAgMCAxLTIuNjU1IDIuNjU1Wm05LjU1MyA0Ljg2N2ExLjkwNiAxLjkwNiAwIDAgMS0xLjkwNC0xLjkwM2MwLTEuMDUuODU0LTEuOTA0IDEuOTA0LTEuOTA0IDEuMDUgMCAxLjkwMy44NTQgMS45MDMgMS45MDQgMCAxLjA1LS44NTQgMS45MDMtMS45MDMgMS45MDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvS2Fma2E7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb0tpYmFuYSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvS2liYW5hKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk00IDB2MjguNzg5TDI4LjkzNS4wMTd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDEydjE2Ljc4OWwxMS45MDYtMTMuNzM4QTI0LjcyMSAyNC43MjEgMCAwIDAgNCAxMlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTE4LjQ3OSAxNi42NjQgNi4yNjggMzAuNzU0bC0xLjA3NCAxLjIzN2gyMy4xOTJjLTEuMjUyLTYuMjkyLTQuODgzLTExLjcxOS05LjkwNy0xNS4zMjdcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvS2liYW5hOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29LdWJlcm5ldGVzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29LdWJlcm5ldGVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzI2Q0U1XCIsXG4gICAgZDogXCJNMTUuODkuMDAzYTIuMTQgMi4xNCAwIDAgMSAxLjAzLjIwNmwxMS4xMjcgNS4zMDRhMi4xMSAyLjExIDAgMCAxIDEuMTUgMS40MjlsMi43NSAxMS45MjFhMi4wOSAyLjA5IDAgMCAxLS40MTIgMS43ODNsLTcuNjk3IDkuNTZjLS40MDQuNS0xLjAxNi43OTItMS42NjMuNzkxTDkuODI3IDMxYy0uNjQ4IDAtMS4yNi0uMjkyLTEuNjY0LS43OTNsLTcuNy05LjU1OGEyLjEwNyAyLjEwNyAwIDAgMS0uNDEtMS43ODNMMi43OTggNi45NDVhMi4xMSAyLjExIDAgMCAxIDEuMTUxLTEuNDNMMTUuMDc0LjIxYy4yNTUtLjEyMi41MzItLjE5Mi44MTUtLjIwNnpNMTYgNC4wNmMtLjM2OCAwLS42NjcuMzMtLjY2Ny43MzhsLjAwMi4wMTljMCAuMDU1LS4wMDMuMTIyLS4wMDIuMTcuMDEuMjM2LjA2LjQxNi4wOTEuNjMyLjA1Ny40NjQuMTAzLjg0OS4wNzQgMS4yMDYtLjAyOC4xMzUtLjEyNy4yNTgtLjIxNi4zNDRsLS4wMTUuMjgxYTguNTY5IDguNTY5IDAgMCAwLTUuNTU1IDIuNjY2IDkuOTggOS45OCAwIDAgMS0uMjQtLjE3Yy0uMTIuMDE2LS4yNC4wNTMtLjM5Ni0uMDM4LS4yOTgtLjItLjU3LS40NzctLjg5OC0uODEtLjE1LS4xNi0uMjYtLjMxLS40MzgtLjQ2NC0uMDQtLjAzNS0uMTAzLS4wODItLjE0OC0uMTE4YS43OTMuNzkzIDAgMCAwLS40NjQtLjE3NS42NDIuNjQyIDAgMCAwLS41My4yMzRjLS4yMy4yODgtLjE1Ni43MjYuMTYzLjk4bC4wMS4wMDhjLjA0NC4wMzUuMDk4LjA4LjEzOC4xMS4xOS4xNC4zNjMuMjEyLjU1Mi4zMjMuMzk4LjI0Ni43MjkuNDUuOTkuNjk1LjEwMy4xMDguMTIuMy4xMzQuMzgzbC4yMTQuMTlhOC41OTIgOC41OTIgMCAwIDAtMS4zNiA1Ljk5OGwtLjI3OC4wOGMtLjA3NC4wOTYtLjE3Ny4yNDUtLjI4Ni4yOS0uMzQzLjEwNy0uNzI4LjE0Ny0xLjE5NC4xOTUtLjIxOC4wMTgtLjQwNy4wMDgtLjYzOS4wNTEtLjA1LjAxLS4xMjIuMDI5LS4xNzcuMDQybC0uMDA2LjAwMS0uMDEuMDAzYy0uMzkzLjA5NS0uNjQ1LjQ1NS0uNTY0LjgxLjA4Mi4zNTUuNDY1LjU3Ljg2LjQ4NWwuMDEtLjAwMS4wMTMtLjAwNGMuMDU1LS4wMTIuMTI0LS4wMjYuMTcyLS4wMzkuMjI4LS4wNi4zOTMtLjE1LjU5Ny0uMjI4LjQ0LS4xNTguODA2LS4yOSAxLjE2MS0uMzQxLjE0OS0uMDEyLjMwNS4wOTEuMzgzLjEzNWwuMjktLjA1YTguNjU0IDguNjU0IDAgMCAwIDMuODQgNC43ODdsLS4xMi4yOWMuMDQzLjExMy4wOTEuMjY1LjA1OS4zNzYtLjEzLjMzNC0uMzUuNjg4LS42MDMgMS4wODEtLjEyMi4xODItLjI0Ny4zMjQtLjM1Ny41MzItLjAyNi4wNS0uMDYuMTI2LS4wODYuMTc5LS4xNy4zNjUtLjA0NS43ODYuMjg0Ljk0NC4zMy4xNi43NDEtLjAwOC45MTktLjM3NWwuMDAxLS4wMDF2LS4wMDJjLjAyNS0uMDUxLjA2MS0uMTIuMDgzLS4xNjkuMDk0LS4yMTUuMTI1LS40LjE5Mi0uNjA5LjE3Ni0uNDQyLjI3My0uOTA1LjUxNS0xLjE5NC4wNjctLjA4LjE3NS0uMTEuMjg3LS4xNGwuMTUxLS4yNzNhOC42MTYgOC42MTYgMCAwIDAgNi4xNDUuMDE2bC4xNDIuMjU2Yy4xMTQuMDM3LjIzOS4wNTYuMzQuMjA2LjE4Mi4zMS4zMDYuNjc1LjQ1NyAxLjExOC4wNjYuMjA4LjEuMzkzLjE5NC42MS4wMjEuMDQ4LjA1Ny4xMTcuMDgyLjE3LjE3Ny4zNjcuNTkuNTM1LjkyLjM3Ni4zMy0uMTU4LjQ1NS0uNTguMjg0LS45NDUtLjAyNi0uMDUyLS4wNi0uMTI5LS4wODctLjE3OS0uMTEtLjIwOC0uMjM1LS4zNDgtLjM1Ny0uNTMtLjI1Mi0uMzkzLS40NjEtLjcyLS41OS0xLjA1NS0uMDU1LS4xNzMuMDA5LS4yOC4wNS0uMzkyLS4wMjUtLjAyOS0uMDc5LS4xOTItLjExLS4yNjhhOC42NTQgOC42NTQgMCAwIDAgMy44MzgtNC44MjJjLjA4Ni4wMTQuMjM2LjA0LjI4NS4wNS4xLS4wNjYuMTkyLS4xNTIuMzczLS4xMzguMzU1LjA1Mi43Mi4xODMgMS4xNi4zNDEuMjA1LjA3OC4zNy4xNy41OTguMjMuMDQ4LjAxMy4xMTcuMDI1LjE3Mi4wMzdsLjAxMy4wMDQuMDEuMDAyYy4zOTUuMDg1Ljc3OC0uMTMxLjg2LS40ODYuMDgtLjM1NS0uMTcxLS43MTUtLjU2NC0uODEtLjA1Ny0uMDEzLS4xMzgtLjAzNS0uMTkzLS4wNDUtLjIzMi0uMDQ0LS40Mi0uMDMzLS42NC0uMDUxLS40NjUtLjA0OS0uODUtLjA4OS0xLjE5My0uMTk2LS4xNC0uMDU0LS4yMzktLjIyLS4yODctLjI4OWwtLjI3LS4wNzhhOC41NzIgOC41NzIgMCAwIDAtLjEzOS0zLjEwNCA4LjU5OSA4LjU5OSAwIDAgMC0xLjI0Ny0yLjg4Yy4wNjgtLjA2Mi4xOTktLjE3Ny4yMzYtLjIxLjAxLS4xMi4wMDEtLjI0NS4xMjUtLjM3Ny4yNjItLjI0Ni41OTItLjQ1Ljk5LS42OTUuMTktLjExLjM2NC0uMTgyLjU1NC0uMzIyLjA0My0uMDMyLjEwMS0uMDgyLjE0Ni0uMTE4LjMyLS4yNTUuMzkzLS42OTMuMTY0LS45OC0uMjMtLjI4Ny0uNjc0LS4zMTQtLjk5My0uMDYtLjA0Ni4wMzYtLjEwNy4wODMtLjE0OC4xMTgtLjE3OS4xNTMtLjI5LjMwNS0uNDQuNDY0LS4zMjguMzMzLS42LjYxMS0uODk4LjgxMi0uMTI5LjA3NS0uMzE4LjA0OS0uNDA0LjA0NGwtLjI1My4xOGE4LjczMiA4LjczMiAwIDAgMC01LjUyOC0yLjY2NiAxNi4wMzYgMTYuMDM2IDAgMCAxLS4wMTUtLjI5N2MtLjA4Ny0uMDgzLS4xOTItLjE1NC0uMjE4LS4zMzMtLjAyOS0uMzU3LjAyLS43NDIuMDc2LTEuMjA2LjAzLS4yMTYuMDgyLS4zOTYuMDktLjYzMi4wMDMtLjA1MyAwLS4xMyAwLS4xODkgMC0uNDA4LS4yOTktLjczOC0uNjY3LS43Mzh6bS0uODM0IDUuMTU2LS4xOTggMy40ODgtLjAxNC4wMDdhLjU4Ny41ODcgMCAwIDEtLjkzMi40NDlsLS4wMDYuMDAyLTIuODY0LTIuMDI3YTYuODYyIDYuODYyIDAgMCAxIDQuMDE0LTEuOTE5em0xLjY2OCAwYTYuOTIyIDYuOTIyIDAgMCAxIDMuOTkgMS45MmwtMi44NDYgMi4wMTUtLjAxLS4wMDRhLjU4OC41ODggMCAwIDEtLjkzMy0uNDQ4bC0uMDAzLS4wMDEtLjE5OC0zLjQ4MnptLTYuNzIgMy4yMjIgMi42MTQgMi4zMzUtLjAwMy4wMTRhLjU4NS41ODUgMCAwIDEtLjIzIDEuMDA4bC0uMDAzLjAxLTMuMzUyLjk2N2E2LjgzOCA2LjgzOCAwIDAgMSAuOTczLTQuMzM0em0xMS43NTMuMDAxYy4zODguNjMuNjgzIDEuMzMxLjg1OCAyLjA5M2E2LjkxIDYuOTEgMCAwIDEgLjE0NSAyLjIyOWwtMy4zNy0uOTctLjAwMi0uMDEzYS41ODYuNTg2IDAgMCAxLS4yMy0xLjAwOGwtLjAwMi0uMDA3IDIuNi0yLjMyNHptLTYuNDA0IDIuNTE1aDEuMDcxbC42NjYuODMtLjIzOSAxLjAzOC0uOTYyLjQ2MS0uOTY0LS40NjMtLjI0LTEuMDM3LjY2OC0uODN6bTMuNDM1IDIuODQ0YS41ODUuNTg1IDAgMCAxIC4xMzUuMDFsLjAwNS0uMDA4IDMuNDY4LjU4NmE2Ljg1OCA2Ljg1OCAwIDAgMS0yLjc3NiAzLjQ4MWwtMS4zNDYtMy4yNDYuMDA0LS4wMDVhLjU4Ni41ODYgMCAwIDEgLjUxLS44MTh6bS01LjgyNC4wMTRhLjU4Ny41ODcgMCAwIDEgLjUzLjgxN2wuMDEuMDEyLTEuMzMxIDMuMjE0YTYuODg2IDYuODg2IDAgMCAxLTIuNzY3LTMuNDU4bDMuNDM3LS41ODIuMDA2LjAwN2EuNTk1LjU5NSAwIDAgMSAuMTE1LS4wMXptMi45MDQgMS40MDdhLjU4Mi41ODIgMCAwIDEgLjI3NS4wNTkuNTgzLjU4MyAwIDAgMSAuMjYzLjI1aC4wMTNsMS42OTQgMy4wNTdjLS4yMi4wNzMtLjQ0Ni4xMzYtLjY3Ny4xODlhNi44OTYgNi44OTYgMCAwIDEtMy43NTgtLjE5NGwxLjY5LTMuMDVoLjAwM2EuNTg4LjU4OCAwIDAgMSAuNDk3LS4zMXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29LdWJlcm5ldGVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Mb2dnaW5nID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Mb2dnaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMiAxMHYxM2E5IDkgMCAwIDEgOSA5aDEzYzAtMTIuMTUtOS44NS0yMi0yMi0yMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMTMuNTY1VjMyaDEwYzAtNy43MjItMy45ODEtMTQuNTEtMTAtMTguNDM2XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMTQgMHYxMC4yMjZDMjEuNjY2IDE0LjQ2OCAyNi44NjkgMjIuNjM2IDI2Ljg2OSAzMkgzMFYxNmMwLTguODM3LTcuMTYzLTE2LTE2LTE2XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTG9nZ2luZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvTG9nc3Rhc2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0xvZ3N0YXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjM0VCRUIwXCIsXG4gICAgZDogXCJNMTkgMzJoMTFWMjBIMTl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIk00IDBIM3YyMGgxM3YtOEMxNiA1LjM3MyAxMC42MjcgMCA0IDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMjBjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgxVjIwSDNaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0xvZ3N0YXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29NYXBzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29NYXBzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMjJBN0YzXCIsXG4gICAgZDogXCJNMjUuNSA5LjVjMCA2LjY1LTkuNSAxMS40MjUtOS41IDExLjQyNVM2LjUgMTYuMTUgNi41IDkuNUE5LjUgOS41IDAgMCAxIDE2IDBhOS41IDkuNSAwIDAgMSA5LjUgOS41XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAyMC45MjVzNC4zMjYtMi4xODMgNy4xNDEtNS42NDVsLTIuNTA1LTEuODc4YTcuNzI1IDcuNzI1IDAgMCAwLTkuMjcyIDBMOC44NTkgMTUuMjhDMTEuNjc0IDE4Ljc0MiAxNiAyMC45MjUgMTYgMjAuOTI1XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkE3NDRFXCIsXG4gICAgZDogXCJNMjUuNTMgMTcuMDczYTIxLjEyNCAyMS4xMjQgMCAwIDEtMi44MzQgMi45MTZjLTIuNjIgMi4yMzUtNS4yMzkgMy41NjEtNS4zNDkgMy42MTZMMTYgMjQuMjgybC0xLjM0OC0uNjc3Yy0uMTA5LS4wNTUtMi43MjgtMS4zODEtNS4zNDktMy42MTZhMjEuMTgyIDIxLjE4MiAwIDAgMS0yLjgzNC0yLjkxNkwwIDIxLjkyNWwxMS4zNjQgOC41MjNhNy43MjQgNy43MjQgMCAwIDAgOS4yNzEgMEwzMiAyMS45MjVsLTYuNDctNC44NTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTWFwczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvTWVtY2FjaGVkID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29NZW1jYWNoZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fbWVtY2FjaGVkJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwicmFkaWFsR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgY3g6IFwiNDEuNDA2JVwiLFxuICAgIGN5OiBcIjQyLjcwOCVcIixcbiAgICByOiBcIjAlXCIsXG4gICAgZng6IFwiNDEuNDA2JVwiLFxuICAgIGZ5OiBcIjQyLjcwOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNEQjdDN0NcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDODM3MzdcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJyYWRpYWxHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICBjeDogXCI0NC4yNzElXCIsXG4gICAgY3k6IFwiNDIuNzA4JVwiLFxuICAgIHI6IFwiMCVcIixcbiAgICBmeDogXCI0NC4yNzElXCIsXG4gICAgZnk6IFwiNDIuNzA4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0RCN0M3Q1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M4MzczN1wiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIHgxOiBcIjUwJVwiLFxuICAgIHgyOiBcIjUwJVwiLFxuICAgIHkxOiBcIjEwMCVcIixcbiAgICB5MjogXCIwJVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzU3NEM0QVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzgwNzE2RFwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIHgxOiBcIjg4Ljc3OCVcIixcbiAgICB4MjogXCIzMC4xNDklXCIsXG4gICAgeTE6IFwiOTguMzQyJVwiLFxuICAgIHkyOiBcIi04LjY4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzI2OEQ4M1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzJFQTE5RVwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKSxcbiAgICBkOiBcIk0wIDIxLjU2N1YxMC4zNTJDMCAxLjI5NCAxLjI5MyAwIDEwLjM0MiAwaDExLjIzNmM5LjA0OSAwIDEwLjM0MSAxLjI5NCAxMC4zNDEgMTAuMzUydjExLjIxNWMwIDkuMDU5LTEuMjkyIDEwLjM1Mi0xMC4zNDEgMTAuMzUySDEwLjM0MkMxLjI5MiAzMS45MiAwIDMwLjYyNiAwIDIxLjU2N1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIiksXG4gICAgZDogXCJNNi44ODkgNi4wMTZDNS4zMiAxNS45NiA2LjE0IDI1LjI3IDYuMTQgMjUuMjdoNC45MDRjLS40NjYtMi40ODMtMi4xNC0xMy44MjQtLjc0OC0xMy44NjEuNzQ2LjExOCA0LjE1NiA5LjYyMSA0LjE1NiA5LjYyMXMuNzUxLS4wOTMgMS41MDctLjA5M2MuNzU1IDAgMS41MDYuMDkzIDEuNTA2LjA5M3MzLjQxLTkuNTAzIDQuMTU3LTkuNjIxYzEuMzkyLjAzNy0uMjgyIDExLjM3OC0uNzQ4IDEzLjg2aDQuOTA0cy44Mi05LjMxLS43NDgtMTkuMjUzaC00LjU0Yy0uODY1LjAxLTQuMTUzIDUuNzc3LTQuNTMxIDUuNzc3LS4zNzggMC0zLjY2Ni01Ljc2Ny00LjUzLTUuNzc3SDYuODg5WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdjJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xNC45OTMgMjQuMTA5YTEuMTYgMS4xNiAwIDEgMS0yLjMyMiAwIDEuMTYgMS4xNiAwIDAgMSAyLjMyMiAwWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xOS4yNDkgMjQuMTA5YTEuMTYgMS4xNiAwIDEgMS0yLjMyMiAwIDEuMTYgMS4xNiAwIDAgMSAyLjMyMiAwWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNMjQuOCA2LjM0NWMuNzA3IDQuNzkuODczIDkuMzg4Ljg2IDEyLjgxMy0uMDEzIDMuNTAzLS4yMTQgNS43OC0uMjE0IDUuNzhoLTQuMTI4bC0uNDQzLjMzMmg0LjkwNHMuODItOS4zMS0uNzQ4LTE5LjI1NGwtLjIzMi4zMjlabS0xMi45OTYtLjEyMWMxLjI4OCAxLjQzMyAzLjUxNiA1LjIzNyAzLjgyMyA1LjIzNy0uODE3LTEuMDQ1LTIuODIzLTQuMzc4LTMuODIzLTUuMjM3Wm0tMS44NCA0Ljg1MmMtMS4zOTIuMDM4LjI4MiAxMS4zNzkuNzQ5IDEzLjg2MUg2LjQzbC0uMjkuMzMzaDQuOTA0Yy0uNDY0LTIuNDctMi4xMjMtMTMuNzEtLjc2OS0xMy44NjEtLjEyNi0uMTktLjIzNS0uMzItLjMxMS0uMzMzWm0xMS4zMjYgMGMtLjc0Ni4xMTktNC4xNTYgOS42MjItNC4xNTYgOS42MjJzLS43NTEtLjA5NC0xLjUwNy0uMDk0Yy0uNDQ3IDAtLjgzMi4wMjgtMS4wOTIuMDUybC0uMDgyLjM3NHMuNzUxLS4wOTMgMS41MDctLjA5M2MuNzU1IDAgMS41MDYuMDkzIDEuNTA2LjA5M3MzLjM4NS05LjQ0IDQuMTQ2LTkuNjIxYy0uMDgyLS4yMDgtLjE4My0uMzMtLjMyMi0uMzMzWlwiLFxuICAgIG9wYWNpdHk6IDAuMVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTYuODg5IDYuMDE2QzUuMzIgMTUuOTYgNi4xNCAyNS4yNyA2LjE0IDI1LjI3bC4yODktLjMyNWMtLjE0OC0yLjE5Ny0uNTQzLTEwLjE0Ljc5MS0xOC41OTdoNC41NDFjLjA5Ni4wMDIuMjI1LjA4LjM3NC4yMDgtLjI5Ny0uMzMtLjU0NC0uNTM4LS43MDYtLjU0SDYuODg5Wm0xMy42MDEgMGMtLjg2NC4wMS00LjE1MiA1Ljc3Ny00LjUzIDUuNzc3LjE1NC4xOTcuMjc5LjMzMy4zMzIuMzMzLjM3OCAwIDMuNjY2LTUuNzY3IDQuNTMtNS43NzdoNC4wMDhsLjItLjMzM2gtNC41NFptLTkuODgxIDUuNzI1YzEuMTAzIDEuNjU3IDMuODQ0IDkuMjkgMy44NDQgOS4yOWwuMDgtLjM3M2MtLjY3Ni0xLjg1Ni0zLjI1Ni04LjgxNC0zLjkwMy04LjkxN2gtLjAyMVptMTEuMzQ2IDBjLjc0IDEuODg3LS42NiAxMS4yOTUtMS4wOCAxMy41MjlsLjQ0NC0uMzQ4Yy41NjgtMy4zMzEgMS45MzYtMTMuMTQ2LjYzNi0xMy4xOFpcIixcbiAgICBvcGFjaXR5OiAwLjNcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01lbWNhY2hlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvTWV0cmljcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWV0cmljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA0RTk4XCIsXG4gICAgZDogXCJNMiAzMmgyOFYyMGwtNi40NjUtNi40NjVhNSA1IDAgMCAwLTcuMDcgMEwyIDI4djRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xNi40NjUgMTMuNTM1LTMuNTM2IDMuNTM2YTkuOTY1IDkuOTY1IDAgMCAwIDcuMDcgMi45MyA5Ljk2NSA5Ljk2NSAwIDAgMCA3LjA3Mi0yLjkzbC0zLjUzNi0zLjUzNmE1IDUgMCAwIDAtNy4wNyAwXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZDogXCJNMTQuMzQzIDExLjQxNEE3Ljk1MSA3Ljk1MSAwIDAgMSAyMCA5LjA3MWMyLjEzNyAwIDQuMTQ2LjgzMiA1LjY1NyAyLjM0M2wzLjIwNyAzLjIwN0E5Ljk1NSA5Ljk1NSAwIDAgMCAzMCAxMC4wMDFjMC01LjUyNC00LjQ3Ny0xMC0xMC0xMC01LjUyMiAwLTEwIDQuNDc2LTEwIDEwIDAgMS42NjcuNDE0IDMuMjM3IDEuMTM3IDQuNjJsMy4yMDYtMy4yMDdaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01ldHJpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb01vbmdvZGIgPSBmdW5jdGlvbiBFdWlJY29uTG9nb01vbmdvZGIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJtMTYuODQ0IDMxLjg0Ny0uODQ3LS4yOXMuMTA0LTQuMzE1LTEuNDQ1LTQuNjI1Yy0xLjAzMi0xLjE5OC4xNjUtNTAuOCAzLjg4Mi0uMTY1IDAgMC0xLjI4LjY0LTEuNTA3IDEuNzM1LS4yNDggMS4wNzQtLjA4MyAzLjM0NS0uMDgzIDMuMzQ1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTZBMzg1XCIsXG4gICAgZDogXCJtMTYuODQ0IDMxLjg0Ny0uODQ3LS4yOXMuMTA0LTQuMzE1LTEuNDQ1LTQuNjI1Yy0xLjAzMi0xLjE5OC4xNjUtNTAuOCAzLjg4Mi0uMTY1IDAgMC0xLjI4LjY0LTEuNTA3IDEuNzM1LS4yNDggMS4wNzQtLjA4MyAzLjM0NS0uMDgzIDMuMzQ1WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTcuMjk5IDI3LjY3NnM3LjQxMy00Ljg3NCA1LjY3OC0xNS4wMTNjLTEuNjcyLTcuMzcyLTUuNjE2LTkuNzg4LTYuMDUtMTAuNzE4LS40NzUtLjY2LS45My0xLjgxNy0uOTMtMS44MTdsLjMxIDIwLjUwNmMwIC4wMi0uNjQgNi4yNzguOTkyIDcuMDQyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0OTlENEFcIixcbiAgICBkOiBcIk0xNy4yOTkgMjcuNjc2czcuNDEzLTQuODc0IDUuNjc4LTE1LjAxM2MtMS42NzItNy4zNzItNS42MTYtOS43ODgtNi4wNS0xMC43MTgtLjQ3NS0uNjYtLjkzLTEuODE3LS45My0xLjgxN2wuMzEgMjAuNTA2YzAgLjAyLS42NCA2LjI3OC45OTIgNy4wNDJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE1LjU2NCAyNy45NDRzLTYuOTYtNC43NS02LjU0Ni0xMy4xMTNjLjM5Mi04LjM2MyA1LjMwNy0xMi40NzMgNi4yNTctMTMuMjE2LjYyLS42Ni42NC0uOTA5LjY4MS0xLjU3LjQzNC45My4zNTEgMTMuODk4LjQxMyAxNS40MjYuMTg2IDUuODg2LS4zMyAxMS4zNTgtLjgwNSAxMi40NzNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM1OEFBNTBcIixcbiAgICBkOiBcIk0xNS41NjQgMjcuOTQ0cy02Ljk2LTQuNzUtNi41NDYtMTMuMTEzYy4zOTItOC4zNjMgNS4zMDctMTIuNDczIDYuMjU3LTEzLjIxNi42Mi0uNjYuNjQtLjkwOS42ODEtMS41Ny40MzQuOTMuMzUxIDEzLjg5OC40MTMgMTUuNDI2LjE4NiA1Ljg4Ni0uMzMgMTEuMzU4LS44MDUgMTIuNDczWlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Nb25nb2RiOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29NeXNxbCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTXlzcWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIiMwMDU0NkJcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkuNDU2IDI0LjI3NmMtMS43NC0uMDQzLTMuMDg4LjEzMS00LjIxOS42MS0uMzI2LjEzLS44NDguMTMtLjg5Mi41NDMuMTc0LjE3NC4xOTYuNDU3LjM0OC42OTYuMjYxLjQzNS43MTggMS4wMjIgMS4xMzEgMS4zMjcuNDU3LjM0OC45MTQuNjk2IDEuMzkyIDEgLjg0OC41MjIgMS44MDUuODI3IDIuNjMxIDEuMzQ5LjQ4LjMwNC45NTcuNjk1IDEuNDM2IDEuMDIyLjI0LjE3My4zOTEuNDU2LjY5Ni41NjV2LS4wNjVjLS4xNTMtLjE5Ni0uMTk2LS40NzktLjM0OC0uNjk2LS4yMTgtLjIxOC0uNDM1LS40MTMtLjY1My0uNjNhMTAuMzE2IDEwLjMxNiAwIDAgMC0yLjI2MS0yLjE5N2MtLjY5Ni0uNDc5LTIuMjE5LTEuMTMxLTIuNTAxLTEuOTM2bC0uMDQ0LS4wNDNjLjQ3OS0uMDQ0IDEuMDQ0LS4yMTggMS41LS4zNDguNzQtLjE5NiAxLjQxNC0uMTUzIDIuMTc1LS4zNDguMzQ4LS4wODcuNjk2LS4xOTYgMS4wNDQtLjMwNXYtLjE5NWMtLjM5MS0uMzkyLS42NzQtLjkxNC0xLjA4Ny0xLjI4NC0xLjExLS45NTctMi4zMjctMS44OTItMy41ODgtMi42NzQtLjY3NS0uNDM1LTEuNTQ1LS43MTgtMi4yNjItMS4wODgtLjI2MS0uMTMtLjY5Ni0uMTk2LS44NDgtLjQxMy0uMzkyLS40NzktLjYxLTEuMTEtLjg5Mi0xLjY3NWE1NC45MjIgNTQuOTIyIDAgMCAxLTEuNzgzLTMuNzg0Yy0uMzkyLS44NDgtLjYzLTEuNjk2LTEuMTEtMi40NzktMi4yNC0zLjY5Ny00LjY3NS01LjkzNy04LjQxNi04LjEzNC0uODA0LS40NTYtMS43NjEtLjY1Mi0yLjc4My0uODkxLS41NDQtLjAyMi0xLjA4OC0uMDY1LTEuNjMxLS4wODctLjM0OC0uMTUyLS42OTYtLjU2Ni0xLS43NjEtMS4yNC0uNzgzLTQuNDM3LTIuNDgtNS4zNS0uMjQtLjU4OCAxLjQxNC44NyAyLjgwNiAxLjM3IDMuNTI0LjM3LjUuODQ4IDEuMDY1IDEuMTA5IDEuNjMuMTUyLjM3LjE5NS43NjIuMzQ3IDEuMTUzLjM0OC45NTcuNjc1IDIuMDIzIDEuMTMxIDIuOTE0LjI0LjQ1Ny41LjkzNi44MDUgMS4zNDkuMTc0LjIzOS40NzguMzQ4LjU0NC43NC0uMzA1LjQzNC0uMzI3IDEuMDg3LS41IDEuNjMtLjc4MyAyLjQ1OC0uNDc5IDUuNTAyLjYzIDcuMzA3LjM0OC41NDQgMS4xNzUgMS43NCAyLjI4NCAxLjI4NC45NzgtLjM5Mi43Ni0xLjYzMiAxLjA0My0yLjcxOS4wNjYtLjI2MS4wMjItLjQzNS4xNTMtLjYwOXYuMDQ0Yy4zMDQuNjA5LjYwOSAxLjE5Ni44OTEgMS44MDUuNjc1IDEuMDY1IDEuODQ5IDIuMTc0IDIuODI4IDIuOTE0LjUyMi4zOTEuOTM1IDEuMDY1IDEuNTg3IDEuMzA1di0uMDY2aC0uMDQzYy0uMTMtLjE5NS0uMzI3LS4yODItLjUtLjQzNS0uMzkyLS4zOS0uODI3LS44Ny0xLjEzMS0xLjMwNC0uOTE0LTEuMjE4LTEuNzE5LTIuNTY3LTIuNDM2LTMuOTU4LS4zNDgtLjY3NS0uNjUzLTEuNDE0LS45MzUtMi4wODgtLjEzLS4yNjEtLjEzLS42NTMtLjM0OC0uNzgzLS4zMjcuNDc4LS44MDUuODkyLTEuMDQ0IDEuNDc5LS40MTMuOTM1LS40NTcgMi4wODgtLjYxIDMuMjg0LS4wODYuMDIxLS4wNDMgMC0uMDg2LjA0My0uNjk2LS4xNzQtLjkzNS0uODkxLTEuMTk2LTEuNS0uNjUzLTEuNTQ1LS43NjEtNC4wMjQtLjE5Ni01LjgwNy4xNTItLjQ1Ny44MDUtMS44OTIuNTQ0LTIuMzI3LS4xMy0uNDEzLS41NjYtLjY1Mi0uODA1LS45NzlhOC43NjQgOC43NjQgMCAwIDEtLjc4My0xLjM5MmMtLjUyMi0xLjIxNy0uNzgzLTIuNTY2LTEuMzQ4LTMuNzg0LS4yNjEtLjU2NS0uNzE4LTEuMTUyLTEuMDg3LTEuNjc0LS40MTQtLjU4Ny0uODctMS0xLjE5Ny0xLjY5Ny0uMTA4LS4yMzktLjI2LS42My0uMDg3LS44OTEuMDQ0LS4xNzQuMTMtLjI0LjMwNS0uMjgzLjI4My0uMjQgMS4wODcuMDY1IDEuMzcuMTk2LjgwNS4zMjYgMS40NzkuNjMgMi4xNTMgMS4wODcuMzA0LjIxOC42My42MzEgMS4wMjIuNzRoLjQ1N2MuNjk2LjE1MiAxLjQ3OS4wNDMgMi4xMzEuMjM5IDEuMTUzLjM3IDIuMTk2LjkxMyAzLjEzMiAxLjVhMTkuMjk0IDE5LjI5NCAwIDAgMSA2Ljc4NSA3LjQzOGMuMjYxLjUuMzcuOTU3LjYwOSAxLjQ3OS40NTcgMS4wNjYgMS4wMjIgMi4xNTMgMS40NzkgMy4xOTcuNDU2IDEuMDIyLjg5MSAyLjA2NiAxLjU0NCAyLjkxNC4zMjYuNDU3IDEuNjMuNjk2IDIuMjE4LjkzNS40MzUuMTk2IDEuMTEuMzcgMS41LjYxLjc0LjQ1NiAxLjQ4Ljk3OCAyLjE3NSAxLjQ3OC4zNDguMjYgMS40MzYuODA1IDEuNTAxIDEuMjRaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjI3MyA1LjM3OGMtLjM3IDAtLjYzLjA0My0uODkxLjEwOXYuMDQzaC4wNDNjLjE3NC4zNDguNDc5LjU4Ny42OTYuODkyLjE3NC4zNDguMzI2LjY5Ni41IDEuMDQ0bC4wNDQtLjA0NGMuMzA0LS4yMTcuNDU3LS41NjUuNDU3LTEuMDg3LS4xMzEtLjE1Mi0uMTUzLS4zMDUtLjI2MS0uNDU3LS4xMy0uMjE4LS40MTQtLjMyNi0uNTg4LS41WlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29NeXNxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvTmdpbnggPSBmdW5jdGlvbiBFdWlJY29uTG9nb05naW54KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMxMTk2MzlcIixcbiAgICBkOiBcIm0xNiAwIDEzLjg1NiA4djE2TDE2IDMyIDIuMTQ0IDI0Vjh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMTEuMTcgMTMuNTEydjguMzc2YTEuNjA3IDEuNjA3IDAgMSAxLTMuMjE1IDBWOS42MzJjMC0xLjQzMiAxLjczMS0yLjE0OSAyLjc0NC0xLjEzNmw5LjUxIDkuNTEyVjkuNjMyYTEuNjA3IDEuNjA3IDAgMCAxIDMuMjE1IDB2MTIuMjU2YzAgMS40MzItMS43MzEgMi4xNDktMi43NDQgMS4xMzZsLTkuNTEtOS41MTJaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb05naW54OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29PYnNlcnZhYmlsaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29PYnNlcnZhYmlsaXR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA0RTk4XCIsXG4gICAgZDogXCJNMTAgMzJINy4yMzhDMy43OTMgMzIgMSAyOC44NjUgMSAyNC45OThWMTVoOXYxN1pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDMyaDlWOGgtOXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwN0NcIixcbiAgICBkOiBcIk0zMSAzMmgtOVYwbDEuOTczLjAyNEMyNy44NjYuMDcyIDMxIDMuNzMxIDMxIDguMjI4VjMyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb09ic2VydmFiaWxpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb09zcXVlcnkgPSBmdW5jdGlvbiBFdWlJY29uTG9nb09zcXVlcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNMzEuOTA3LjAzMnY3Ljk2OWwtNy45NTIgNy45NTFWNy45NjdMMzEuOTA3LjAzMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzMzXCIsXG4gICAgZDogXCJNMTYuMDAzLjAzMnY3Ljk2OWw3Ljk1MiA3Ljk1MVY3Ljk2N0wxNi4wMDMuMDMyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBNTk2RkZcIixcbiAgICBkOiBcIk0zMS45MjMgMzEuODU1aC03Ljk2OGwtNy45NTItNy45NTFoNy45ODVsNy45MzUgNy45NTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTTMxLjkyMyAxNS45NTJoLTcuOTY4bC03Ljk1MiA3Ljk1Mmg3Ljk4NWw3LjkzNS03Ljk1MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNLjEgMzEuODcydi03Ljk2OGw3Ljk1Mi03Ljk1MnY3Ljk4NUwuMSAzMS44NzJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTTE2LjAwNCAzMS44NzJ2LTcuOTY4bC03Ljk1Mi03Ljk1MnY3Ljk4NWw3Ljk1MiA3LjkzNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNLjA4NC4wNDhoNy45NjhMMTYuMDA0IDhIOC4wMTlMLjA4NC4wNDhcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTS4wODQgMTUuOTUyaDcuOTY4TDE2LjAwNCA4SDguMDE5TC4wODQgMTUuOTUyXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb09zcXVlcnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1BocCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvUGhwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX3BocCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNLjAyOCA3Ljg1NEMuMDI4IDMuNTM0IDYuNjg4LjAzIDE0LjkwMi4wM3MxNC44NzQgMy41MDMgMTQuODc0IDcuODI0YzAgNC4zMjItNi42NiA3LjgyNS0xNC44NzQgNy44MjUtOC4yMTUgMC0xNC44NzQtMy41MDMtMTQuODc0LTcuODI1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIGQ6IFwiTTAgMTcuNDNoMzAuOTg3VjBIMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdmJyksXG4gICAgZDogXCJNMCAxNy40M2gzMC45ODdWMEgwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicmFkaWFsR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgY3g6IFwiMzAuMDIlXCIsXG4gICAgY3k6IFwiODIuNDIyJVwiLFxuICAgIHI6IFwiMTI0LjgxNCVcIixcbiAgICBmeDogXCIzMC4wMiVcIixcbiAgICBmeTogXCI4Mi40MjIlXCIsXG4gICAgZ3JhZGllbnRUcmFuc2Zvcm06IFwibWF0cml4KC41MjYwNCAwIDAgMSAuMTQyIDApXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQUVCMkQ1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNBRUIyRDVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3NSVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzQ4NEM4OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzQ4NEM4OVwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgdHJhbnNmb3JtOiBcIm1hdHJpeCgxIDAgMCAtMSAuMDI2IDI1LjQxMylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSguNTkyIC44NilcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIiksXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS4wMjggNy44NTRDLjAyOCAzLjUzNCA2LjY4OC4wMyAxNC45MDIuMDNzMTQuODc0IDMuNTAzIDE0Ljg3NCA3LjgyNGMwIDQuMzIyLTYuNjYgNy44MjUtMTQuODc0IDcuODI1LTguMjE1IDAtMTQuODc0LTMuNTAzLTE0Ljg3NC03LjgyNVwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdlJyksIFwiKVwiKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNzc3QkIzXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTE1LjQ5NCAxLjQ3MmM3Ljg5NCAwIDE0LjI5MyAzLjI0MyAxNC4yOTMgNy4yNDNzLTYuNCA3LjI0NC0xNC4yOTMgNy4yNDRjLTcuODk0IDAtMTQuMjkzLTMuMjQzLTE0LjI5My03LjI0NCAwLTQgNi40LTcuMjQzIDE0LjI5My03LjI0M1wiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdnJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZicpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdnJyksIFwiKVwiKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNOC43MDEgNy44MTdjLjY1IDAgMS4xMzQuMTIgMS40NC4zNTYuMzA0LjIzMy41MTMuNjM4LjYyMyAxLjIwMi4xMDMuNTI4LjA2NC44OTYtLjExNiAxLjA5NS0uMTgzLjIwMy0uNTguMzA2LTEuMTc3LjMwNkg4LjQzM2wtLjU3NS0yLjk1OWguODQzWk01LjMxIDQuMTcyYS4xNjEuMTYxIDAgMCAwLS4xNTkuMTkzbDEuNTI0IDcuODRjLjAxNS4wNzYuMDgyLjEzMS4xNTkuMTMxaDMuMjg0YzEuMDMzIDAgMS44MDEtLjI4IDIuMjg0LS44MzMuNDg1LS41NTYuNjM1LTEuMzMzLjQ0Ni0yLjMwOWEzLjY4NiAzLjY4NiAwIDAgMC0uMzk1LTEuMDk4IDMuNjc2IDMuNjc2IDAgMCAwLS43MjctLjkxIDMuMTg5IDMuMTg5IDAgMCAwLTEuMTk3LS43MThjLS40My0uMTQtLjk4My0uMjEtMS42NDMtLjIxaC0xLjMzbC0uMzgtMS45NTVhLjE2MS4xNjEgMCAwIDAtLjE1OC0uMTNINS4zMDlaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk04LjU2NiAxMC42MTVoLjkwNWMuNzIyIDAgLjk3Mi0uMTU4IDEuMDU4LS4yNTMuMTQxLS4xNTcuMTY4LS40ODcuMDc3LS45NTYtLjEwMi0uNTI0LS4yOTEtLjg5Ni0uNTYzLTEuMTA1LS4yNzctLjIxNC0uNzI5LS4zMjItMS4zNDEtLjMyMmgtLjY0OGwuNTEyIDIuNjM2Wm0xLjU1MSAxLjg4M0g2LjgzM2EuMzIzLjMyMyAwIDAgMS0uMzE3LS4yNjFMNC45OTIgNC4zOTZhLjMyMy4zMjMgMCAwIDEgLjMxNy0uMzg1aDEuNzA4Yy4xNTUgMCAuMjg3LjExLjMxNy4yNjJsLjM1NCAxLjgyM2gxLjE5N2MuNjc3IDAgMS4yNDcuMDc0IDEuNjk0LjIyLjQ2LjE0OS44ODIuNDAyIDEuMjU2Ljc1Mi4zMS4yODQuNTY0LjYwNC43NTguOTUuMTkzLjM0NS4zMzEuNzMxLjQxMiAxLjE0Ni4yIDEuMDI3LjAzOCAxLjg1LS40ODIgMi40NDYtLjUxNS41OS0xLjMyNS44ODgtMi40MDYuODg4Wk03LjY2MyA3LjY1NmgxLjAzOWMuNjg4IDAgMS4yMDEuMTMgMS41MzguMzkuMzM3LjI1OS41NjUuNjkyLjY4MyAxLjI5OS4xMTMuNTgzLjA2MS45OTQtLjE1NSAxLjIzMy0uMjE2LjI0LS42NDguMzYtMS4yOTcuMzZIOC4zbC0uNjM4LTMuMjgyWm0yLjQ1NCA0LjUyYy45ODkgMCAxLjcxLS4yNiAyLjE2Mi0uNzc5LjQ1My0uNTE4LjU5LTEuMjQyLjQxLTIuMTcyYTMuNTEgMy41MSAwIDAgMC0uMzc4LTEuMDUgMy41MDIgMy41MDIgMCAwIDAtLjY5NS0uODcgMy4wMTcgMy4wMTcgMCAwIDAtMS4xMzctLjY4M2MtLjQxNy0uMTM1LS45NDgtLjIwMy0xLjU5NC0uMjAzSDcuNDIybC0uNDA1LTIuMDg1SDUuMzA5bDEuNTI0IDcuODQxaDMuMjg0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNMTYuNzYzIDYuMjU3YS4xNjEuMTYxIDAgMCAwLS4xNTkuMTkybC42NzQgMy40N2MuMDY0LjMzLjA0OS41NjYtLjA0NC42NjYtLjA1Ny4wNjEtLjIyOC4xNjQtLjczMi4xNjRIMTUuMjhsLS44NDctNC4zNjFhLjE2MS4xNjEgMCAwIDAtLjE1OS0uMTMxSDEyLjU4YS4xNjEuMTYxIDAgMCAwLS4xNTkuMTkybDEuNTI0IDcuODQxYy4wMTUuMDc2LjA4Mi4xMy4xNTkuMTNoMS42OTRhLjE2MS4xNjEgMCAwIDAgLjE1OS0uMTkxbC0uMzY4LTEuODkzaDEuMzE0YzEgMCAxLjY4LS4xNzYgMi4wNzUtLjU0LjQwMy0uMzcuNTI5LS45NjIuMzc0LTEuNzZsLS43MS0zLjY0OGEuMTYxLjE2MSAwIDAgMC0uMTU4LS4xMzFoLTEuNzIxWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTUuNzk5IDE0LjU4MmgtMS42OTVhLjMyMy4zMjMgMCAwIDEtLjMxNy0uMjYxTDEyLjI2MyA2LjQ4YS4zMjMuMzIzIDAgMCAxIC4zMTctLjM4NWgxLjY5NWMuMTU0IDAgLjI4Ny4xMS4zMTcuMjYybC44MjIgNC4yM2gxLjA4OGMuNTA0IDAgLjYxLS4xMDcuNjE0LS4xMTIuMDMtLjAzMy4wNy0uMTg1LjAwNC0uNTI2bC0uNjc0LTMuNDdhLjMyMy4zMjMgMCAwIDEgLjMxNy0uMzg0aDEuNzIxYy4xNTUgMCAuMjg4LjExLjMxNy4yNjJsLjcxIDMuNjQ4Yy4xNjYuODU3LjAyMyAxLjUtLjQyNCAxLjkxLS40MjYuMzkyLTEuMTQuNTgyLTIuMTg0LjU4MmgtMS4xMThsLjMzIDEuN2EuMzIzLjMyMyAwIDAgMS0uMzE2LjM4NW0wLS4zMjMtLjQwNi0yLjA4NGgxLjUxYy45NSAwIDEuNjA1LS4xNjYgMS45NjYtLjQ5Ny4zNi0uMzMyLjQ2OC0uODY5LjMyNC0xLjYxMWwtLjcwOS0zLjY0OWgtMS43MjFsLjY3NCAzLjQ3Yy4wNzcuMzk0LjA0OC42NjMtLjA4NS44MDctLjEzMy4xNDMtLjQxNi4yMTUtLjg1LjIxNWgtMS4zNTRsLS44NzMtNC40OTJIMTIuNThsMS41MjQgNy44NDFoMS42OTVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTIyLjAzMyA3LjgxN2MuNjUgMCAxLjEzNC4xMiAxLjQ0LjM1Ni4zMDQuMjMzLjUxMy42MzguNjIzIDEuMjAyLjEwMy41MjguMDY0Ljg5Ni0uMTE2IDEuMDk1LS4xODMuMjAzLS41OC4zMDYtMS4xNzcuMzA2aC0xLjAzOGwtLjU3NS0yLjk1OWguODQzWm0tMy4zOTItMy42NDVhLjE2MS4xNjEgMCAwIDAtLjE1OS4xOTNsMS41MjQgNy44NGMuMDE1LjA3Ni4wODIuMTMxLjE1OS4xMzFoMy4yODRjMS4wMzMgMCAxLjgwMS0uMjggMi4yODQtLjgzMy40ODUtLjU1Ni42MzUtMS4zMzMuNDQ2LTIuMzA5YTMuNjg5IDMuNjg5IDAgMCAwLS4zOTUtMS4wOTggMy42NzYgMy42NzYgMCAwIDAtLjcyNy0uOTEgMy4xODkgMy4xODkgMCAwIDAtMS4xOTctLjcxOGMtLjQzLS4xNC0uOTgzLS4yMS0xLjY0My0uMjFoLTEuMzNsLS4zOC0xLjk1NWEuMTYxLjE2MSAwIDAgMC0uMTU4LS4xM0gxOC42NFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTIxLjg5OCAxMC42MTVoLjkwNWMuNzIyIDAgLjk3Mi0uMTU4IDEuMDU4LS4yNTMuMTQxLS4xNTcuMTY4LS40ODcuMDc3LS45NTYtLjEwMi0uNTI0LS4yOTItLjg5Ni0uNTYzLTEuMTA1LS4yNzctLjIxNC0uNzI5LS4zMjItMS4zNDEtLjMyMmgtLjY0OGwuNTEyIDIuNjM2Wm0xLjU1MSAxLjg4M2gtMy4yODRhLjMyMy4zMjMgMCAwIDEtLjMxNy0uMjYxbC0xLjUyNC03Ljg0MWEuMzIzLjMyMyAwIDAgMSAuMzE3LS4zODVoMS43MDhjLjE1NSAwIC4yODcuMTEuMzE3LjI2MmwuMzU0IDEuODIzaDEuMTk3Yy42NzcgMCAxLjI0Ny4wNzQgMS42OTQuMjIuNDYuMTQ5Ljg4Mi40MDIgMS4yNTYuNzUyLjMxLjI4NC41NjQuNjA0Ljc1OC45NS4xOTMuMzQ1LjMzMS43MzEuNDEyIDEuMTQ2LjIgMS4wMjcuMDM4IDEuODUtLjQ4MiAyLjQ0Ni0uNTE1LjU5LTEuMzI1Ljg4OC0yLjQwNi44ODhabS0yLjQ1NC00Ljg0MmgxLjAzOWMuNjg4IDAgMS4yMDEuMTMgMS41MzguMzkuMzM3LjI1OS41NjUuNjkyLjY4MyAxLjI5OS4xMTMuNTgzLjA2MS45OTQtLjE1NSAxLjIzMy0uMjE2LjI0LS42NDguMzYtMS4yOTcuMzZoLTEuMTdsLS42MzgtMy4yODJabTIuNDU0IDQuNTJjLjk4OSAwIDEuNzEtLjI2IDIuMTYyLS43NzkuNDU0LS41MTguNTktMS4yNDIuNDEtMi4xNzJhMy41MSAzLjUxIDAgMCAwLS4zNzgtMS4wNSAzLjUwMiAzLjUwMiAwIDAgMC0uNjk1LS44NyAzLjAxNyAzLjAxNyAwIDAgMC0xLjEzNy0uNjgzYy0uNDE3LS4xMzUtLjk0OC0uMjAzLTEuNTk0LS4yMDNoLTEuNDYzbC0uNDA1LTIuMDg1aC0xLjcwOGwxLjUyNCA3Ljg0MWgzLjI4NFpcIlxuICB9KSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1BocDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvUG9zdGdyZXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1Bvc3RncmVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTMxLjg3NiAxOS4xNjJjLS4xOTItLjU2NC0uNjk1LS45NTYtMS4zNDUtMS4wNS0uMzA2LS4wNDUtLjY1Ny0uMDI2LTEuMDcyLjA1Ny0uNzI0LjE0NS0xLjI2MS4yLTEuNjU0LjIxMSAxLjQ4LTIuNDIyIDIuNjgzLTUuMTg1IDMuMzc2LTcuNzg1IDEuMTItNC4yMDUuNTIxLTYuMTItLjE3OC02Ljk4Ny0xLjg1LTIuMjkzLTQuNTUxLTMuNTI1LTcuODA5LTMuNTYzYTE0LjIzOSAxNC4yMzkgMCAwIDAtNC4wNi41NTEgMTUuNTczIDE1LjU3MyAwIDAgMC0yLjM3My0uMjFjLTEuNTY3LS4wMjQtMi45NTIuMzA3LTQuMTM1Ljk4OGExOS4zMzQgMTkuMzM0IDAgMCAwLTIuOTItLjcxMUM2Ljg1LjIwOCA0LjU0OS41NjMgMi44NjYgMS43MTYuODI4IDMuMTEyLS4xMTcgNS41MzcuMDU4IDguOTI2LjExMyAxMCAuNzM0IDEzLjI3MyAxLjcxIDE2LjM3NmMuNTYxIDEuNzg0IDEuMTYgMy4yNjYgMS43OCA0LjQwNC44NzggMS42MTQgMS44MTggMi41NjQgMi44NzMgMi45MDYuNTkxLjE5IDEuNjY2LjMyNSAyLjc5Ni0uNTg4LjE0My4xNjguMzM0LjMzNS41ODguNDkuMzIyLjE5OC43MTYuMzU5IDEuMTA5LjQ1NCAxLjQxOC4zNDQgMi43NDUuMjU4IDMuODc4LS4yMjQuMDA3LjE5NS4wMTMuMzgyLjAxNy41NDMuMDA4LjI2Mi4wMTUuNTE4LjAyNS43NTguMDY3IDEuNjIuMTgxIDIuODgxLjUxOCAzLjc2M2wuMDcuMjAxYy4xNjguNS40NDkgMS4zMzUgMS4xNjQgMS45OS43NC42NzcgMS42MzcuODg1IDIuNDU3Ljg4NS40MTIgMCAuODA0LS4wNTIgMS4xNDktLjEyNCAxLjIyNy0uMjU1IDIuNjIxLS42NDMgMy42My0yLjAzNi45NTMtMS4zMTYgMS40MTctMy4yOTkgMS41LTYuNDIzbC4wMzEtLjI1My4wMi0uMTY1LjIyNS4wMTkuMDU4LjAwNGMxLjI1LjA1NSAyLjc3OS0uMjAyIDMuNzE4LS42MjUuNzQxLS4zMzQgMy4xMTktMS41NSAyLjU1OS0zLjE5NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzM2NzkxXCIsXG4gICAgZDogXCJNMjkuNzM4IDE5LjQ4MWMtMy43MTcuNzQ0LTMuOTczLS40NzYtMy45NzMtLjQ3NiAzLjkyNS01LjY0OCA1LjU2Ni0xMi44MTcgNC4xNS0xNC41NzFDMjYuMDUyLS4zNTIgMTkuMzY1IDEuOTEgMTkuMjU0IDEuOTdsLS4wMzYuMDA2YTEzLjY1NyAxMy42NTcgMCAwIDAtMi40OC0uMjVjLTEuNjgyLS4wMjctMi45NTguNDI3LTMuOTI3IDEuMTQgMCAwLTExLjkyOC00Ljc2Ni0xMS4zNzQgNS45OTIuMTE4IDIuMjg5IDMuMzgzIDE3LjMxOCA3LjI3OCAxMi43NzlhNzAuNDQzIDcwLjQ0MyAwIDAgMSAyLjc5OC0zLjA2NGMuNjgzLjQ0IDEuNTAxLjY2NSAyLjM1OC41ODRsLjA2Ny0uMDU1Yy0uMDIuMjA2LS4wMTEuNDA4LjAyNy42NDctMS4wMDQgMS4wODctLjcwOSAxLjI3Ny0yLjcxNCAxLjY3OC0yLjAzLjQwNS0uODM3IDEuMTI3LS4wNiAxLjMxNi45NDQuMjI5IDMuMTI3LjU1MyA0LjYwMi0xLjQ1bC0uMDU4LjIzYy4zOTMuMzA0LjY2OSAxLjk4NS42MjMgMy41MDgtLjA0NyAxLjUyNC0uMDc4IDIuNTcuMjMyIDMuMzg3LjMxLjgxNy42MTkgMi42NTUgMy4yNTUgMi4xMDcgMi4yMDMtLjQ1OCAzLjM0NS0xLjY0NCAzLjUwMy0zLjYyMy4xMTMtMS40MDcuMzY4LTEuMTk5LjM4NC0yLjQ1N2wuMjA1LS41OTVjLjIzNi0xLjkwNy4wMzctMi41MjIgMS4zOTQtMi4yMzZsLjMzLjAyOGMxIC4wNDQgMi4zMDctLjE1NiAzLjA3NC0uNTAyIDEuNjUyLS43NDMgMi42MzItMS45ODUgMS4wMDMtMS42NTlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTEzLjUxIDkuODgyYy0uMzM1LS4wNDUtLjYzOS0uMDA0LS43OTIuMTFhLjI4LjI4IDAgMCAwLS4xMi4xODdjLS4wMi4xMzMuMDc3LjI4Mi4xMzYuMzU4LjE2OS4yMTYuNDE0LjM2NS42NTguMzk4LjAzNS4wMDQuMDcuMDA3LjEwNS4wMDcuNDA1IDAgLjc3NC0uMzA3LjgwNy0uNTMzLjA0LS4yODMtLjM4My0uNDcyLS43OTUtLjUyN20xMS4wOTkuMDA5Yy0uMDMyLS4yMjItLjQ0LS4yODUtLjgyNi0uMjMzLS4zODYuMDUyLS43Ni4yMi0uNzMuNDQzLjAyNi4xNzMuMzQ4LjQ2OC43My40NjhhLjcxOC43MTggMCAwIDAgLjA5Ny0uMDA2Ljk0Ny45NDcgMCAwIDAgLjUzLS4yODFjLjEzNS0uMTM4LjIxMy0uMjkxLjE5OS0uMzkxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0zMC45NzUgMTkuMzk3Yy0uMTQyLS40MTYtLjU5OC0uNTUtMS4zNTYtLjM5OC0yLjI1LjQ1LTMuMDU2LjEzOS0zLjMyMS0uMDUgMS43NS0yLjU4NCAzLjE4OS01LjcwOCAzLjk2NS04LjYyMy4zNjgtMS4zOC41Ny0yLjY2My41ODctMy43MDguMDE5LTEuMTQ3LS4xODMtMS45OS0uNTk4LTIuNTA1LTEuNjc1LTIuMDc1LTQuMTM0LTMuMTg5LTcuMTEtMy4yMi0yLjA0Ny0uMDIyLTMuNzc1LjQ4Ni00LjExLjYyOWExMC41NDkgMTAuNTQ5IDAgMCAwLTIuMzEzLS4yODhjLTEuNTM2LS4wMjQtMi44NjQuMzMyLTMuOTYzIDEuMDZhMTguMTMxIDE4LjEzMSAwIDAgMC0zLjIyLS44MmMtMi42MS0uNDA3LTQuNjgzLS4wOTgtNi4xNjMuOTE4QzEuNjA4IDMuNjA1Ljc5MyA1Ljc3My45NTEgOC44MzZjLjA1MyAxLjAzLjY1OCA0LjIgMS42MTQgNy4yMzYgMS4yNTggMy45OTYgMi42MjUgNi4yNTcgNC4wNjMgNi43MjMuMTY5LjA1NC4zNjMuMDkyLjU3Ny4wOTIuNTI1IDAgMS4xNjgtLjIzIDEuODM4LTEuMDFhNjQuODk0IDY0Ljg5NCAwIDAgMSAyLjUzMi0yLjc3OCA0LjE4IDQuMTggMCAwIDAgMS44MjIuNDc1bC4wMDUuMDQ4Yy0uMTEuMTI3LS4yMTcuMjU1LS4zMjEuMzg1LS40NC41NDItLjUzMi42NTUtMS45NS45MzgtLjQwMy4wOC0xLjQ3My4yOTQtMS40ODkgMS4wMjItLjAxNy43OTUgMS4yNjYgMS4xMyAxLjQxMiAxLjE2NS41MDkuMTIzIDEgLjE4NCAxLjQ2Ny4xODQgMS4xMzggMCAyLjE0LS4zNjMgMi45NC0xLjA2NC0uMDI1IDIuODM0LjA5NyA1LjYyOC40NDggNi40NzkuMjg4LjY5Ni45OSAyLjQgMy4yMDggMi4zOTlhNS4zIDUuMyAwIDAgMCAxLjA3OC0uMTE5YzIuMzE1LS40OCAzLjMyLTEuNDczIDMuNzEtMy42Ni4yMDgtMS4xNy41NjUtMy45NjEuNzMzLTUuNDU5LjM1NC4xMDcuODEuMTU2IDEuMzA0LjE1NiAxLjAyOSAwIDIuMjE2LS4yMTIgMi45NjEtLjU0Ny44MzctLjM3NyAyLjM0Ni0xLjMgMi4wNzItMi4xMDRaTTI1LjQ2MiA5LjI3OGMtLjAwOC40NDItLjA3Ljg0NC0uMTM3IDEuMjYyLS4wNzIuNDUxLS4xNDUuOTE3LS4xNjQgMS40ODItLjAxOS41NS4wNTIgMS4xMjMuMTIgMS42NzYuMTQgMS4xMTguMjgyIDIuMjY4LS4yNjkgMy40MDNhNC4zNyA0LjM3IDAgMCAxLS4yNDMtLjQ4NWMtLjA2OS0uMTYxLS4yMTctLjQyLS40MjMtLjc3Ny0uOC0xLjM5LTIuNjczLTQuNjQ4LTEuNzE0LTUuOTc3LjI4Ni0uMzk2IDEuMDEtLjgwMyAyLjgzLS41ODRabS0yLjIwNi03LjQ5YzIuNjY3LjA1OCA0Ljc3NyAxLjAyNSA2LjI3IDIuODc2IDEuMTQ2IDEuNDItLjExNiA3Ljg3OS0zLjc2NyAxMy40NWwtLjExMS0uMTM1LS4wNDYtLjA1NmMuOTQzLTEuNTEuNzU5LTMuMDA2LjU5NS00LjMzMS0uMDY4LS41NDQtLjEzMi0xLjA1OC0uMTE1LTEuNTQxLjAxNi0uNTExLjA4Ni0uOTUuMTU0LTEuMzc1LjA4Mi0uNTIyLjE2Ny0xLjA2My4xNDQtMS43MDFhLjY4NC42ODQgMCAwIDAgLjAxNS0uMjRjLS4wNi0uNjExLS43OC0yLjQ0MS0yLjI0Ny00LjA5OGExMC4wOTQgMTAuMDk0IDAgMCAwLTMuNTcyLTIuNjA0IDEyLjQwNyAxMi40MDcgMCAwIDEgMi42OC0uMjQ0Wk04LjMzNCAyMS4zMDdjLS43MzcuODYtMS4yNDYuNjk1LTEuNDE0LjY0MS0xLjA5MS0uMzUzLTIuMzU3LTIuNTktMy40NzQtNi4xMzYtLjk2Ni0zLjA2OS0xLjUzLTYuMTU1LTEuNTc1LTcuMDItLjE0MS0yLjczNy41NDMtNC42NDQgMi4wMzMtNS42NjkgMi40MjYtMS42NjggNi40MTQtLjY3IDguMDE2LS4xNjMtLjAyMy4wMjItLjA0Ny4wNDItLjA3LjA2NS0yLjYzIDIuNTc1LTIuNTY3IDYuOTc0LTIuNTYgNy4yNDMgMCAuMTA0LjAwOC4yNTEuMDIuNDUzLjA0Ni43NC4xMyAyLjExNy0uMDk1IDMuNjc3LS4yMDkgMS40NS4yNTIgMi44NjggMS4yNjQgMy44OTIuMTA0LjEwNS4yMTMuMjA1LjMyNy4zLS40NS40NjctMS40MyAxLjUwMi0yLjQ3MiAyLjcxN1ptMi44MS0zLjYzNWMtLjgxNi0uODI2LTEuMTg2LTEuOTc0LTEuMDE3LTMuMTUuMjM4LTEuNjQ4LjE1LTMuMDgzLjEwMy0zLjg1NGwtLjAxNi0uMjc3Yy4zODQtLjMzIDIuMTY1LTEuMjU1IDMuNDM0LS45NzMuNTguMTI5LjkzMi41MTEgMS4wOCAxLjE3Ljc1OSAzLjQwNi4xIDQuODI1LS40MyA1Ljk2Ni0uMTA5LjIzNS0uMjEyLjQ1OC0uMy42ODdsLS4wNjguMTc4Yy0uMTczLjQ1LS4zMzQuODY3LS40MzQgMS4yNjRhMy4zMjUgMy4zMjUgMCAwIDEtMi4zNTItMS4wMTFabS4xMzMgNC41OTRhMi4wNyAyLjA3IDAgMCAxLS42MTQtLjI1NmMuMTExLS4wNTEuMzEtLjEyLjY1NC0uMTkgMS42NjgtLjMzMiAxLjkyNS0uNTY3IDIuNDg3LTEuMjYuMTMtLjE1OC4yNzUtLjMzOC40NzgtLjU1Ny4zMDEtLjMyOC40NC0uMjcyLjY5LS4xNzIuMjAyLjA4Mi40LjMyOC40OC41OTkuMDM3LjEyOC4wOC4zNy0uMDYuNTYtMS4xNzQgMS41OTUtMi44ODYgMS41NzQtNC4xMTUgMS4yNzZabTguNzI1IDcuODczYy0yLjA0LjQyNC0yLjc2MS0uNTg2LTMuMjM3LTEuNzQtLjMwOC0uNzQ0LS40NTktNC4xMDItLjM1MS03LjgxYS40MzQuNDM0IDAgMCAwLS4wMi0uMTQzIDEuODIzIDEuODIzIDAgMCAwLS4wNTctLjI2MmMtLjE2LS41NC0uNTQ4LS45OS0xLjAxMy0xLjE3OC0uMTg1LS4wNzQtLjUyNS0uMjEtLjkzMy0uMTEuMDg3LS4zNDcuMjM4LS43NC40MDItMS4xNjVsLjA2OC0uMTc4Yy4wNzgtLjIwMi4xNzUtLjQxLjI3Ny0uNjMyLjU1NC0xLjE5NCAxLjMxMy0yLjgyOS40OS02LjUyMi0uMzA5LTEuMzg0LTEuMzQtMi4wNi0yLjkwMS0xLjkwMy0uOTM2LjA5NC0xLjc5My40Ni0yLjIyLjY3YTcuMjU1IDcuMjU1IDAgMCAwLS4yNTUuMTMyYy4xMi0xLjM5NC41Ny00IDIuMjU1LTUuNjQ3IDEuMDYyLTEuMDM4IDIuNDc1LTEuNTUgNC4xOTYtMS41MjMgMy4zOTMuMDU0IDUuNTY5IDEuNzQyIDYuNzk2IDMuMTUgMS4wNTggMS4yMTEgMS42MzEgMi40MzMgMS44NiAzLjA5MS0xLjcyLS4xNy0yLjg4OS4xNi0zLjQ4Mi45ODItMS4yOSAxLjc4Ny43MDYgNS4yNTcgMS42NjUgNi45MjQuMTc1LjMwNi4zMjcuNTcuMzc1LjY4Mi4zMTIuNzM0LjcxNiAxLjIyNCAxLjAxMiAxLjU4Mi4wOS4xMS4xNzguMjE1LjI0NS4zMDgtLjUyMS4xNDYtMS40NTYuNDgyLTEuMzcxIDIuMTY0LS4wNjkuODQzLS41NTggNC43OTMtLjgwNiA2LjE4OS0uMzI4IDEuODQzLTEuMDI4IDIuNTMtMi45OTUgMi45MzlabTguNTEzLTkuNDQ3Yy0uNTMyLjI0LTEuNDI0LjQyLTIuMjcuNDU4LS45MzUuMDQzLTEuNDExLS4xMDEtMS41MjMtLjE5LS4wNTMtMS4wNDguMzUtMS4xNTcuNzc1LTEuMjczYTMuMzUgMy4zNSAwIDAgMCAuMTk1LS4wNThjLjA0LjAzMS4wODIuMDYyLjEzLjA5Mi43NS40ODEgMi4wOTEuNTMzIDMuOTg0LjE1NGwuMDItLjAwNGMtLjI1NS4yMzItLjY5Mi41NDItMS4zMS44MjFaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1Bvc3RncmVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Qcm9tZXRoZXVzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Qcm9tZXRoZXVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTY1MjJDXCIsXG4gICAgZDogXCJNMTUuOTA3LjE4N0M3LjEyMi4xODcgMCA3LjMwOCAwIDE2LjA5M1M3LjEyMiAzMiAxNS45MDcgMzJjOC43ODQgMCAxNS45MDYtNy4xMjEgMTUuOTA2LTE1LjkwNlMyNC42OS4xODcgMTUuOTA3LjE4N1ptMCAyOS43N2MtMi41IDAtNC41MjYtMS42Ny00LjUyNi0zLjcyOWg5LjA1MWMwIDIuMDYtMi4wMjYgMy43My00LjUyNSAzLjczWm03LjQ3NS00Ljk2M0g4LjQzdi0yLjcxMWgxNC45NXYyLjcxWm0tLjA1NC00LjEwN0g4LjQ3M2MtLjA1LS4wNTctLjEtLjExMy0uMTQ3LS4xNy0xLjUzLTEuODU5LTEuODkxLTIuODI5LTIuMjQxLTMuODE4LS4wMDYtLjAzMiAxLjg1NS4zOCAzLjE3Ni42NzggMCAwIC42NzkuMTU3IDEuNjcyLjMzOC0uOTUzLTEuMTE4LTEuNTItMi41MzktMS41Mi0zLjk5MSAwLTMuMTg5IDIuNDQ2LTUuOTc1IDEuNTY0LTguMjI3Ljg1OC4wNyAxLjc3NyAxLjgxMiAxLjgzOSA0LjUzNy45MTMtMS4yNjIgMS4yOTUtMy41NjYgMS4yOTUtNC45NzggMC0xLjQ2My45NjMtMy4xNjEgMS45MjctMy4yMi0uODYgMS40MTcuMjIzIDIuNjMgMS4xODQgNS42NDIuMzYxIDEuMTMyLjMxNSAzLjAzNS41OTQgNC4yNDMuMDkyLTIuNTA4LjUyMy02LjE2NyAyLjExNC03LjQzLS43MDIgMS41OTEuMTA0IDMuNTgxLjY1NSA0LjUzOC44ODkgMS41NDQgMS40MjggMi43MTQgMS40MjggNC45MjYgMCAxLjQ4My0uNTQ4IDIuODgtMS40NzIgMy45NzEgMS4wNS0uMTk3IDEuNzc2LS4zNzQgMS43NzYtLjM3NGwzLjQxMS0uNjY2cy0uNDk1IDIuMDM4LTIuNCA0LjAwMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Qcm9tZXRoZXVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29SYWJiaXRtcSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvUmFiYml0bXEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNjBcIixcbiAgICBkOiBcIk0zMC4wODMgMTMuMTk3aC05Ljg3OGMtLjc5LS4wODgtMS4zOTEtLjc0LTEuMzkxLTEuNTA4VjEuOTdjMC0uODMtLjcxOC0xLjQ5NS0xLjU5NS0xLjQ5NWgtMy40NTZjLS44ODUgMC0xLjU5NS42NzItMS41OTUgMS40OTV2OS44MmMtLjA0My43NC0uNjk2IDEuMzM4LTEuNDc4IDEuNDA2SDguMTAyYy0uNzYtLjA4OC0xLjM0OC0uNjg2LTEuMzk4LTEuNDA2VjEuOTdjMC0uODMtLjcxOC0xLjQ5NS0xLjU5NS0xLjQ5NUgxLjY1MkMuNzY4LjQ3Ni4wNTggMS4xNDguMDU4IDEuOTd2MjguMzU4YzAgLjgzLjcxNyAxLjQ5NSAxLjU5NCAxLjQ5NWgyOC40MzljLjg4NCAwIDEuNTk0LS42NzMgMS41OTQtMS40OTVWMTQuNjkyYy0uMDA3LS44MjktLjcxOC0xLjQ5NS0xLjYwMi0xLjQ5NVptLTQuNTUgMTAuNzI0YzAgLjgyOS0uNzE4IDEuNDk1LTEuNTk1IDEuNDk1SDIwLjQ4Yy0uODg0IDAtMS41OTUtLjY3My0xLjU5NS0xLjQ5NXYtMy4wNThjMC0uODMuNzE4LTEuNDk1IDEuNTk1LTEuNDk1aDMuNDU3Yy44ODQgMCAxLjU5NC42NzIgMS41OTQgMS40OTV2My4wNThaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUmFiYml0bXE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1JlZGlzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29SZWRpcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAzKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBNDFFMTFcIixcbiAgICBkOiBcIk0zMC41OTQgMjAuNzkxYy0xLjY4OS44NzUtMTAuNDM4IDQuNDUxLTEyLjMgNS40MTYtMS44NjMuOTY2LTIuODk4Ljk1Ni00LjM3LjI1Ny0xLjQ3MS0uNjk5LTEwLjc4Mi00LjQzNy0xMi40Ni01LjIzNC0uODM4LS4zOTktMS4yNzgtLjczNS0xLjI3OC0xLjA1MnYtMy4xOHMxMi4xMjEtMi42MjMgMTQuMDc4LTMuMzJjMS45NTctLjY5OSAyLjYzNi0uNzI0IDQuMzAxLS4xMTggMS42NjYuNjA3IDExLjYyMyAyLjM5MyAxMy4yNyAyLjk5MmwtLjAwMSAzLjEzNWMwIC4zMTQtLjM4LjY1OS0xLjI0IDEuMTA0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRDgyQzIwXCIsXG4gICAgZDogXCJNMzAuNTk0IDE3LjYxYy0xLjY4OS44NzUtMTAuNDM4IDQuNDUxLTEyLjMgNS40MTctMS44NjMuOTY1LTIuODk4Ljk1Ni00LjM3LjI1Ni0xLjQ3MS0uNjk4LTEwLjc4Mi00LjQzOC0xMi40Ni01LjIzNC0xLjY3Ni0uNzk3LTEuNzEyLTEuMzQ1LS4wNjQtMS45ODcgMS42NDctLjY0MSAxMC45MDctNC4yNTIgMTIuODY0LTQuOTUgMS45NTctLjY5OCAyLjYzNi0uNzIzIDQuMzAxLS4xMTcgMS42NjYuNjA3IDEwLjM2MyA0LjA0OCAxMi4wMDkgNC42NDcgMS42NDYuNiAxLjcxIDEuMDkzLjAyIDEuOTY4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTQxRTExXCIsXG4gICAgZDogXCJNMzAuNTk0IDE1LjYwNmMtMS42ODkuODc1LTEwLjQzOCA0LjQ1LTEyLjMgNS40MTYtMS44NjMuOTY1LTIuODk4Ljk1Ni00LjM3LjI1Ny0xLjQ3MS0uNy0xMC43ODItNC40MzgtMTIuNDYtNS4yMzUtLjgzOC0uMzk4LTEuMjc4LS43MzQtMS4yNzgtMS4wNTF2LTMuMThTMTIuMzA3IDkuMTkgMTQuMjY0IDguNDkyYzEuOTU3LS42OTggMi42MzYtLjcyMyA0LjMwMS0uMTE3IDEuNjY2LjYwNiAxMS42MjMgMi4zOTIgMTMuMjcgMi45OTFsLS4wMDEgMy4xMzVjMCAuMzE1LS4zOC42Ni0xLjI0IDEuMTA1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRDgyQzIwXCIsXG4gICAgZDogXCJNMzAuNTk0IDEyLjQyNWMtMS42ODkuODc1LTEwLjQzOCA0LjQ1LTEyLjMgNS40MTYtMS44NjMuOTY2LTIuODk4Ljk1Ni00LjM3LjI1Ny0xLjQ3MS0uNjk5LTEwLjc4Mi00LjQzOC0xMi40Ni01LjIzNS0xLjY3Ni0uNzk2LTEuNzEyLTEuMzQ1LS4wNjQtMS45ODYgMS42NDctLjY0MSAxMC45MDctNC4yNTMgMTIuODY0LTQuOTUgMS45NTctLjY5OCAyLjYzNi0uNzI0IDQuMzAxLS4xMTcgMS42NjYuNjA2IDEwLjM2MyA0LjA0NyAxMi4wMDkgNC42NDYgMS42NDYuNiAxLjcxIDEuMDk0LjAyIDEuOTY5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTQxRTExXCIsXG4gICAgZDogXCJNMzAuNTk0IDEwLjIyOGMtMS42ODkuODc1LTEwLjQzOCA0LjQ1MS0xMi4zIDUuNDE3LTEuODYzLjk2NS0yLjg5OC45NTUtNC4zNy4yNTYtMS40NzEtLjY5OS0xMC43ODItNC40MzgtMTIuNDYtNS4yMzRDLjYyNyAxMC4yNjguMTg3IDkuOTMyLjE4NyA5LjYxNXYtMy4xOHMxMi4xMjEtMi42MjMgMTQuMDc4LTMuMzJjMS45NTctLjY5OSAyLjYzNi0uNzI0IDQuMzAxLS4xMTcgMS42NjYuNjA2IDExLjYyMyAyLjM5MSAxMy4yNyAyLjk5bC0uMDAxIDMuMTM2YzAgLjMxNC0uMzguNjU5LTEuMjQgMS4xMDR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNEODJDMjBcIixcbiAgICBkOiBcIk0zMC41OTQgNy4wNDdjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNy0xLjg2My45NjUtMi44OTguOTU1LTQuMzcuMjU2LTEuNDcxLS42OTktMTAuNzgyLTQuNDM3LTEyLjQ2LTUuMjM0Qy0uMjExIDYuNjg5LS4yNDcgNi4xNCAxLjQgNS40OTlTMTIuMzA3IDEuMjQ3IDE0LjI2NC41NWMxLjk1Ny0uNyAyLjYzNi0uNzI0IDQuMzAxLS4xMTggMS42NjYuNjA3IDEwLjM2MyA0LjA0OCAxMi4wMDkgNC42NDcgMS42NDYuNiAxLjcxIDEuMDkzLjAyIDEuOTY4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJtMjAuMTU3IDMuOTg1LTIuNzQyLjI4My0uNjE0IDEuNDY4LS45OTItMS42MzgtMy4xNjYtLjI4MyAyLjM2Mi0uODQ3LS43MDgtMS4zIDIuMjEyLjg2IDIuMDg1LS42OC0uNTYzIDEuMzQ1em0tMy41MiA3LjEyMy01LjExOC0yLjExIDcuMzM0LTEuMTE5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZWxsaXBzZVwiLCB7XG4gICAgY3g6IDkuNTQxLFxuICAgIGN5OiA2LjMxMSxcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICByeDogMy45MixcbiAgICByeTogMS41MVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzdBMEMwMFwiLFxuICAgIGQ6IFwibTIzLjM5OCA0LjM4NiA0LjM0IDEuNzA1LTQuMzM2IDEuNzAzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQUQyMTE1XCIsXG4gICAgZDogXCJtMTguNTk2IDYuMjc0IDQuODAyLTEuODg4LjAwNCAzLjQwOC0uNDcxLjE4M3pcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUmVkaXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1NlY3VyaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29TZWN1cml0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwiTTkgNy4wMDhWMGgyMHYxNi43NDRjMCAzLjkxMy02LjM3OCA2LjQ3Ny05LjAxNSA3LjI1NlY3LjAwOEg5WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMURCQUIwXCIsXG4gICAgZDogXCJNMyAyMC4wNzNWMTBoMTR2MjJDNy42NjcgMjcuOTggMyAyNC4wMDQgMyAyMC4wNzNaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDEwaDh2MTRjLTIuOTgzLTEuMTQtOC0zLjc1Ni04LTcuMDQzVjEwWlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29TZWN1cml0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvU2l0ZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvU2l0ZVNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkE3NDRFXCIsXG4gICAgZDogXCJNMjcuMDUgMTBoLTcuMzRsLTExIDIyczE1LjY5Ni00Ljk2IDIxLjg1NS0xNi4wNzZDMzIuMDM3IDEzLjI2NiAzMC4wODggMTAgMjcuMDUgMTBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTIxLjM1NSAwSDcuNTMzTC40MjcgMTQuMjExQy0uOTAzIDE2Ljg3MSAxLjAzMiAyMCA0LjAwNCAyMGg3LjM1MWwxMC0yMFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuNTMzIDEwIC40MjggMTQuMjExQy0uOTAzIDE2Ljg3MSAxLjAzMiAyMCA0LjAwNSAyMGg3LjM1bDUtMTBIMi41MzNaXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29TaXRlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbkxvZ29Ta2V0Y2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NrZXRjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkFFMDBcIixcbiAgICBkOiBcIk0xNiAzMiAwIDExLjQ1NGw2LjkzMS0xMC4zOEwxNiAwbDkuMDY5IDEuMDc0TDMyIDExLjQ1NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0VDNkMwMFwiLFxuICAgIGQ6IFwiTTE2IDMyIDAgMTEuNDU0aDMyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZBRTAwXCIsXG4gICAgZDogXCJNMTYgMzIgNi40NzcgMTEuNDU0aDE5LjA0NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRUZCNFwiLFxuICAgIGQ6IFwiTTE2IDAgNi40NzcgMTEuNDU0aDE5LjA0NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGQUUwMFwiLFxuICAgIGQ6IFwiTTYuOTMyIDEuMDc0IDMuMzY5IDYuMy4wMDEgMTEuNDU0aDYuNTQyek0yNS4wNjkgMS4wNzQgMjguNjMyIDYuMyAzMiAxMS40NTRoLTYuNTQyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVEMzA1XCIsXG4gICAgZDogXCJtNi45MzEgMS4wNzQtLjQ1MyAxMC4zOEwxNiAwek0yNS4wNjkgMS4wNzRsLjQ1MyAxMC4zOEwxNiAwelwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Ta2V0Y2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1NsYWNrID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29TbGFjayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFMDFFNUFcIixcbiAgICBkOiBcIk02LjgxMyAyMC4xOGEzLjMzNyAzLjMzNyAwIDAgMS0zLjMzIDMuMzMgMy4zMzcgMy4zMzcgMCAwIDEtMy4zMjgtMy4zMyAzLjMzNyAzLjMzNyAwIDAgMSAzLjMyOS0zLjMyOWgzLjMyOXYzLjMzem0xLjY3NyAwYTMuMzM3IDMuMzM3IDAgMCAxIDMuMzMtMy4zMjkgMy4zMzcgMy4zMzcgMCAwIDEgMy4zMjggMy4zM3Y4LjMzNWEzLjMzNyAzLjMzNyAwIDAgMS0zLjMyOSAzLjMyOSAzLjMzNyAzLjMzNyAwIDAgMS0zLjMyOS0zLjMzVjIwLjE4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzZDNUYwXCIsXG4gICAgZDogXCJNMTEuODIgNi44MTNhMy4zMzcgMy4zMzcgMCAwIDEtMy4zMy0zLjMzQTMuMzM3IDMuMzM3IDAgMCAxIDExLjgyLjE1NmEzLjMzNyAzLjMzNyAwIDAgMSAzLjMyOCAzLjMyOXYzLjMyOUgxMS44MnptMCAxLjY3N2EzLjMzNyAzLjMzNyAwIDAgMSAzLjMyOCAzLjMzIDMuMzM3IDMuMzM3IDAgMCAxLTMuMzI5IDMuMzI4SDMuNDg0YTMuMzM3IDMuMzM3IDAgMCAxLTMuMzMtMy4zMjkgMy4zMzcgMy4zMzcgMCAwIDEgMy4zMy0zLjMyOWg4LjMzNXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzJFQjY3RFwiLFxuICAgIGQ6IFwiTTI1LjE4NyAxMS44MmEzLjMzNyAzLjMzNyAwIDAgMSAzLjMyOS0zLjMzIDMuMzM3IDMuMzM3IDAgMCAxIDMuMzI5IDMuMzMgMy4zMzcgMy4zMzcgMCAwIDEtMy4zMyAzLjMyOGgtMy4zMjhWMTEuODJ6bS0xLjY3OCAwYTMuMzM3IDMuMzM3IDAgMCAxLTMuMzI5IDMuMzI4IDMuMzM3IDMuMzM3IDAgMCAxLTMuMzI5LTMuMzI5VjMuNDg0YTMuMzM3IDMuMzM3IDAgMCAxIDMuMzMtMy4zMyAzLjMzNyAzLjMzNyAwIDAgMSAzLjMyOCAzLjMzdjguMzM1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUNCMjJFXCIsXG4gICAgZDogXCJNMjAuMTggMjUuMTg3YTMuMzM3IDMuMzM3IDAgMCAxIDMuMzMgMy4zMjkgMy4zMzcgMy4zMzcgMCAwIDEtMy4zMyAzLjMyOSAzLjMzNyAzLjMzNyAwIDAgMS0zLjMyOS0zLjMzdi0zLjMyOGgzLjMzem0wLTEuNjc4YTMuMzM3IDMuMzM3IDAgMCAxLTMuMzI5LTMuMzI5IDMuMzM3IDMuMzM3IDAgMCAxIDMuMzMtMy4zMjloOC4zMzVhMy4zMzcgMy4zMzcgMCAwIDEgMy4zMjkgMy4zMyAzLjMzNyAzLjMzNyAwIDAgMS0zLjMzIDMuMzI4SDIwLjE4elwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29TbGFjazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvVXB0aW1lID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29VcHRpbWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzRUJFQjBcIixcbiAgICBkOiBcIk0xOSAxNWMwIDcuMDYyLTQuODg4IDEyLjk2OS0xMS40NiAxNC41NjNBMTUuOTE0IDE1LjkxNCAwIDAgMCAxNiAzMmM4LjgzNiAwIDE2LTcuMTYzIDE2LTE2di0zbC02LjUtNi02LjUgNnYyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDdDXCIsXG4gICAgZDogXCJNNi44MzMgMjYuNjQ2YTExLjk1NCAxMS45NTQgMCAwIDAgOC41NDQtNy44MzRBMTIuNDMgMTIuNDMgMCAwIDEgMTMgMTEuNVYuMjkyQzUuNiAxLjY5NiAwIDguMTkgMCAxNi4wMDJjMCA0LjM1OCAxLjc1IDguMzA2IDQuNTc3IDExLjE5MmwyLjI1Ni0uNTQ3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuMzYyIDIzLjAyYy0xLjQ5NC42My0zLjEzNy45OC00Ljg2MS45OGExMi40NDMgMTIuNDQzIDAgMCAxLTcuODUyLTIuNzggMTUuMDQyIDE1LjA0MiAwIDAgMS0xMC4xMSA4LjM0M0ExNS45MSAxNS45MSAwIDAgMCAxNi4wMDIgMzJjNi4zMTQgMCAxMS43NTgtMy42NjkgMTQuMzYtOC45OFwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29VcHRpbWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTExLjA1IDEuOTUgNi44MDggNi4xOTIgMTYgMTUuMzg1bDkuMTkyLTkuMTkzTDIwLjk1IDEuOTUgMTYgNi45bC00Ljk1LTQuOTVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIk00LjY4NiAxOS42MjdhOCA4IDAgMCAxIDAtMTEuMzEzTDE2IDE5LjYyN3YxMS4zMTRMNC42ODYgMTkuNjI3WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzQzNzQxXCIsXG4gICAgZDogXCJNMjcuMzE0IDguMzE0YTggOCAwIDAgMSAwIDExLjMxM0wxNiAzMC45NDFWMTkuNjI3TDI3LjMxNCA4LjMxNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvV2ViaG9vayA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvV2ViaG9vayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNDNzNBNjNcIixcbiAgICBkOiBcIk0xNC45NDMgMTMuNTYzYy0xLjMyNyAyLjIzLTIuNTk3IDQuMzg4LTMuODk0IDYuNTMxLS4zMzQuNTUtLjQ5OC45OTgtLjIzMiAxLjY5OC43MzQgMS45MzEtLjMwMiAzLjgxMS0yLjI1IDQuMzIxLTEuODM3LjQ4Mi0zLjYyNy0uNzI2LTMuOTkyLTIuNjkyLS4zMjMtMS43NDEgMS4wMjgtMy40NDggMi45NDgtMy43Mi4xNi0uMDIzLjMyNS0uMDI2LjU5NS0uMDQ2bDIuOTItNC44OTZDOS4yIDEyLjkzMyA4LjEwOCAxMC44IDguMzUgOC4xNTRjLjE3MS0xLjg3LjkwNy0zLjQ4NiAyLjI1LTQuODFhNy42MzkgNy42MzkgMCAwIDEgOS41MzEtMWMyLjkxIDEuODcgNC4yNDQgNS41MTIgMy4xMDcgOC42MjlsLTIuNjY4LS43MjRjLjM1Ny0xLjczMy4wOTMtMy4yOS0xLjA3Ni00LjYyMy0uNzcyLS44OC0xLjc2My0xLjM0MS0yLjg5LTEuNTExLTIuMjU4LS4zNDEtNC40NzYgMS4xMS01LjEzNCAzLjMyNy0uNzQ4IDIuNTE2LjM4MyA0LjU3MiAzLjQ3MyA2LjEyMVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzRCNEI0QlwiLFxuICAgIGQ6IFwibTE4LjczIDEwLjkyNiAyLjgyMyA0Ljk4YzQuNzUzLTEuNDcgOC4zMzYgMS4xNiA5LjYyMiAzLjk3NyAxLjU1MiAzLjQwMi40OTEgNy40MzItMi41NTggOS41MzEtMy4xMyAyLjE1NS03LjA4OSAxLjc4Ny05Ljg2Mi0uOTgxbDIuMTc2LTEuODIxYzIuNzM5IDEuNzc0IDUuMTM1IDEuNjkgNi45MTMtLjQxYTQuNzY2IDQuNzY2IDAgMCAwLS4wNzctNi4yMTljLTEuOC0yLjAyNS00LjIxMy0yLjA4Ni03LjEzLS4xNDMtMS4yMDktMi4xNDYtMi40NC00LjI3NS0zLjYxLTYuNDM2LS4zOTYtLjcyOS0uODMyLTEuMTUyLTEuNzIyLTEuMzA2LTEuNDg3LS4yNTctMi40NDYtMS41MzQtMi41MDQtMi45NjRhMy4yNTggMy4yNTggMCAwIDEgMi4wOC0zLjE5MiAzLjI0MyAzLjI0MyAwIDAgMSAzLjY3MSAxLjAwMmMuNzEuODk2LjkzNSAxLjkwNS41NjIgMy4wMS0uMTA0LjMwOS0uMjM4LjYwNy0uMzg0Ljk3MlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzRBNEE0QVwiLFxuICAgIGQ6IFwiTTIwLjk2MyAyNC40MDFoLTUuNzJjLS41NSAyLjI1Ni0xLjczNCA0LjA3Ny0zLjc3NSA1LjIzNS0xLjU4Ni45LTMuMjk2IDEuMjA1LTUuMTE2LjkxMUMzIDMwLjAwNy4yNiAyNi45OS4wMTkgMjMuNTkzYy0uMjczLTMuODQ4IDIuMzcyLTcuMjY4IDUuODk4LTguMDM2bC43MzIgMi42NThjLTMuMjM0IDEuNjUtNC4zNTMgMy43My0zLjQ0OCA2LjMzLjc5NyAyLjI4NyAzLjA2IDMuNTQxIDUuNTE4IDMuMDU2IDIuNTEtLjQ5NSAzLjc3Ni0yLjU4MSAzLjYyMS01LjkyOSAyLjM4IDAgNC43NjEtLjAyNCA3LjE0LjAxMi45My4wMTUgMS42NDgtLjA4MSAyLjM0OC0uOSAxLjE1Mi0xLjM0OSAzLjI3My0xLjIyNyA0LjUxNS4wNDYgMS4yNjggMS4zMDEgMS4yMDcgMy4zOTUtLjEzNSA0LjY0MWEzLjIzNiAzLjIzNiAwIDAgMS00LjU1My0uMTU3Yy0uMjQ5LS4yNjctLjQ0NS0uNTg1LS42OTItLjkxM1pcIlxuICB9KSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvV2ViaG9vazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dvV2luZG93cyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvV2luZG93cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQURFRlwiLFxuICAgIGQ6IFwibTAgNC41MSAxMi45NzctMS43NjguMDA2IDEyLjUxOC0xMi45NzEuMDc0TDAgNC41MVptMTIuOTcgMTIuMTkyLjAxMSAxMi41MjktMTIuOTctMS43ODQtLjAwMi0xMC44MjkgMTIuOTYyLjA4NFptMS41NzQtMTQuMTlMMzEuNzUxIDB2MTUuMWwtMTcuMjA3LjEzN1YyLjUxMVptMTcuMjEgMTQuMzA4LS4wMDMgMTUuMDMzLTE3LjIwNy0yLjQyOS0uMDI0LTEyLjYzMiAxNy4yMzUuMDI4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1dpbmRvd3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nb1dvcmtwbGFjZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZDogXCJNMTcuNTU3IDUuMDVjLjE3LS4yMDIuNDU3LS41MTIuODYtLjkzQzE5LjQ4MyAzLjAxNyAyMS44MjggMSAyMy44MDEgMUgzMHYzMGgtNi4yYy0xLjk3MiAwLTMuOTk1LTEuNDQ5LTUuMzgzLTMuMTA2bC0uNzY0LTEuMDUyIDIuNzUtMy40NzdjMy40NjItNC4zNzYgMy40NjMtMTAuMzMyLjAwMS0xNC43MDdMMTcuNTU3IDUuMDVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk0yIDMxVjFoNS44MWMxLjcxIDAgMy4zNS43ODYgNC4zODcgMi4xbDUuODU1IDcuNDJjMi41OTggMy4yODMgMi41OTggNy42OTgtLjAwMiAxMC45ODNsLTUuODU1IDcuNDAzQzExLjE1OCAzMC4yMTcgOS41MiAzMSA3LjgxNSAzMUgyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuMzg0IDI0Ljg5IDEyLjE1IDIxLjdjLTIuODY4LTMuMzE4LTIuODY4LTguMjIuMDAyLTExLjMyMiAxLjUzNS0xLjYzOSAyLjYxMS0yLjcxOCAzLjIzLTMuMjM4bDIuNjcgMy4yMzhjMi42MzcgMy4zODUgMi41NzUgNy45ODctLjA2MiAxMS4zNzRsLTIuNjA3IDMuMTM3WlwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTG9nc3Rhc2hGaWx0ZXIgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hGaWx0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjkxNCAxYy0zLjYgMC01Ljg5NyAxLjExMS01Ljg5NyAxLjg3NiAwIC43NjYgMi4yOTcgMS44NzcgNS44OTcgMS44NzdzNS44OTctMS4xMTEgNS44OTctMS44NzdDMTMuODExIDIuMTExIDExLjUxNCAxIDcuOTE0IDFtMy45OCA3Ljk4OGMtMS4xODcuMzMxLTIuNjAxLjUwMi0zLjk4LjUwMi0xLjM4MyAwLTIuODAxLS4xNzItMy45OTEtLjUwNWwyLjg2MyAzLjI0MnYyLjUxNWMuMTM2LjA4LjUxNS4yMTQgMS4xMjguMjE0LjYxIDAgLjk4OS0uMTMzIDEuMTI2LS4yMTN2LTIuNTE1bDIuODU0LTMuMjRabTIuMzk0LTEuMjA2LTQuMjQ4IDQuODIzdjIuMjQ2aC4wMDRjMCAuNzYzLTEuMDY5IDEuMTA1LTIuMTMgMS4xMDUtMS4wNiAwLTIuMTMtLjM0Mi0yLjEzLTEuMTA1aC4wMDJ2LTIuMjQ1TDEuMzIxIDcuNTVsLjAxLS4wMDhBMS41MyAxLjUzIDAgMCAxIDEgNi42MDdWMi43OGguMDJDMS4xNC45NzMgNC42MjcgMCA3LjkxMyAwYzMuMjg2IDAgNi43NzQuOTczIDYuODk0IDIuNzhoLjAydjMuODI3YzAgLjM0My0uMTIuNjU3LS4zMzUuOTQxbC0uMDAzLjAwNGMtLjA2LjA3OS0uMTI4LjE1NS0uMjAyLjIzWm0tLjU3OC0uODU2YS41Ni41NiAwIDAgMCAuMTE4LS4zMTlWNC40MTFjLTEuMjg4Ljg3OS0zLjY0OSAxLjM0Mi01LjkxNCAxLjM0MkM1LjY1IDUuNzUzIDMuMjg4IDUuMjkgMiA0LjQxMXYyLjE5NkMyIDcuMzc1IDQuMzA0IDguNDkgNy45MTQgOC40OWMyLjg3OSAwIDQuOTI3LS43MDkgNS42MzktMS4zODVsLjE1Ny0uMThaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dzdGFzaEZpbHRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dzdGFzaElmID0gZnVuY3Rpb24gRXVpSWNvbkxvZ3N0YXNoSWYoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm02LjkxOCA5Ljc5OS00LjgyIDQuODE5IDIuODgtLjQzLjE0OC45ODdMMCAxNS45NDNsLjc2OC01LjEyNi45ODguMTQ4LS40NTMgMy4wMzMgNC45MzYtNC45MzVhMi4wMDMgMi4wMDMgMCAwIDEgMS4yNjUtMi44ODVWMGgxdjYuMTc4YTIuMDAzIDIuMDAzIDAgMCAxIDEuMjYzIDIuODg0bDQuODY1IDQuODY2LS40NDMtMi45NjMuOTg4LS4xNDcuNzY4IDUuMTI2LTUuMTI3LS43NjkuMTUtLjk4OCAyLjk1LjQ0MS00LjgzLTQuODNjLS4zMTIuMjAzLS42ODUuMzItMS4wODUuMzItLjQgMC0uNzczLS4xMTctMS4wODUtLjMyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hJZjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dzdGFzaElucHV0ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ3N0YXNoSW5wdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjc0NyAxMC45OTJoMTMuMWEuMTIzLjEyMyAwIDAgMCAuMTIyLS4xMjNWOC41MWEuMTIyLjEyMiAwIDAgMC0uMTIyLS4xMjJIMS4xMjJBLjEyMi4xMjIgMCAwIDAgMSA4LjUxdjIuMzZjMCAuMDY2LjA1NS4xMjIuMTIyLjEyMmguNjI1Wm0xMi4wMTEgMUgyLjIxVjE2aC0xdi00LjAwOGgtLjA4OEExLjEyNCAxLjEyNCAwIDAgMSAwIDEwLjg3VjguNTFjMC0uNjIuNTAzLTEuMTIyIDEuMTIyLTEuMTIyaDEzLjcyNWMuNjIgMCAxLjEyMi41MDIgMS4xMjIgMS4xMjJ2Mi4zNmMwIC42MTgtLjUwMyAxLjEyMi0xLjEyMiAxLjEyMmgtLjA4OVYxNmgtMXYtNC4wMDhabS02LjI3LTcuNDg3VjBoMXY0LjUyOWwyLjQwNy0yLjI2Mi42ODUuNzNMOCA2LjM1NiA0LjQyIDIuOTk1bC42ODUtLjcyOSAyLjM4MyAyLjI0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hJbnB1dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dzdGFzaE91dHB1dCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaE91dHB1dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuMjEgNC4wMDhIMTMuNzZWMGgxdjQuMDA4aC4wODhjLjYxOSAwIDEuMTIyLjUwNCAxLjEyMiAxLjEyM1Y3LjQ5YzAgLjYyLS41MDMgMS4xMjItMS4xMjIgMS4xMjJIMS4xMjJBMS4xMjIgMS4xMjIgMCAwIDEgMCA3LjQ5VjUuMTNjMC0uNjE4LjUwMy0xLjEyMiAxLjEyMi0xLjEyMmguMDg5VjBoMXY0LjAwOFptMTEuNTQ5IDFIMS4xMkEuMTIzLjEyMyAwIDAgMCAxIDUuMTNWNy40OWMwIC4wNjguMDU1LjEyMi4xMjIuMTIyaDEzLjcyNWEuMTIyLjEyMiAwIDAgMCAuMTIyLS4xMjJWNS4xM2EuMTIzLjEyMyAwIDAgMC0uMTIyLS4xMjJoLTEuMDg4Wm0tNS4zMDEgOS4wOTcgMi40MDUtMi4yNi42ODYuNzI4LTMuNTggMy4zNjMtMy41OC0zLjM2My42ODYtLjcyOCAyLjM4MyAyLjI0VjkuNTc3aDF2NC41MjhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dzdGFzaE91dHB1dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Mb2dzdGFzaFF1ZXVlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ3N0YXNoUXVldWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4zMzkgMTUuNDY0SDQuNzdhMy4yNDggMy4yNDggMCAwIDEtMy4yNDUtMy4yNDRWNC41NDlIMHYtMWgyLjUyNnY4LjY3YTIuMjQ3IDIuMjQ3IDAgMCAwIDIuMjQ1IDIuMjQ1aDYuNTY4YTIuMjQ3IDIuMjQ3IDAgMCAwIDIuMjQ0LTIuMjQ0VjMuNTQ5aDIuNDU1djFoLTEuNDU1djcuNjdhMy4yNDcgMy4yNDcgMCAwIDEtMy4yNDQgMy4yNDVabS41MTMtNS45NjJ2MS4wOTVsLTMuODQ4IDEuNzItMy44NS0xLjcyVjkuNTAybDMuODUgMS43MiAzLjg0OC0xLjcyWm0wLTQuMjUxdjEuMDk1bC0zLjg0OCAxLjcyLTMuODUtMS43MlY1LjI1bDMuODUgMS43MiAzLjg0OC0xLjcyWm0wLTQuMjUxdjEuMDk1bC0zLjg0OCAxLjcyLTMuODUtMS43MlYxbDMuODUgMS43MkwxMS44NTIgMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoUXVldWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWFnbmV0ID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25ldChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNTUyIDEwLjcxYTMuMDA4IDMuMDA4IDAgMCAwIDQuMTkuNzM4bDEuNjQyLTEuMTUgMS4xNSAxLjY0Mi0xLjY0MyAxLjE1YTUuMDEzIDUuMDEzIDAgMSAxLTUuNzUtOC4yMTJsMS42NDItMS4xNSAxLjE1IDEuNjQzLTEuNjQyIDEuMTVhMy4wMDcgMy4wMDcgMCAwIDAtLjczOSA0LjE4OVptOC4yOTYtMi4xMzcgMS4xNSAxLjY0My0xLjY0MyAxLjE0OS0xLjE1LTEuNjQyIDEuNjQzLTEuMTVabS00LjYtNi41NzEgMS4xNSAxLjY0My0xLjY0MyAxLjE1LTEuMTUtMS42NDIgMS42NDItMS4xNTFabTEuOTcgMS4wNjhMOS4wNyAxLjQyOGExLjAwMyAxLjAwMyAwIDAgMC0xLjM5Ny0uMjQ2TDMuNTY2IDQuMDU3QTUuOTk1IDUuOTk1IDAgMCAwIDEuMDkyIDcuOTRhNS45OTMgNS45OTMgMCAwIDAgLjk5NiA0LjQ5NSA1Ljk5IDUuOTkgMCAwIDAgMy44ODMgMi40NzMgNS45OTEgNS45OTEgMCAwIDAgNC40OTUtLjk5Nmw0LjEwNy0yLjg3NWMuNDU0LS4zMTguNTYzLS45NDMuMjQ2LTEuMzk2bC0xLjE1LTEuNjQzYTEuMDAyIDEuMDAyIDAgMCAwLTEuMzk2LS4yNDZsLTQuMTA3IDIuODc1YTIuMDAyIDIuMDAyIDAgMCAxLTEuNDk4LjMzMiAyIDIgMCAwIDEtMS42MjctMi4zMjNjLjA5LS41MDUuMzcxLS45NzYuODI0LTEuMjk0bDQuMTA3LTIuODc2Yy40NTQtLjMxNy41NjQtLjk0Mi4yNDYtMS4zOTZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduZXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWFnbmlmeVdpdGhFeGNsYW1hdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTUuMTQzIDE1Ljg1LTMuODcyLTMuODcyYS41LjUgMCAwIDEtLjAzNC0uNzM4IDYuMDEgNi4wMSAwIDAgMCAwLTguNDg2IDYuMDA0IDYuMDA0IDAgMCAwLTguNDg0IDAgNi4wMSA2LjAxIDAgMCAwIDAgOC40ODYgNS45NiA1Ljk2IDAgMCAwIDQuMjQyIDEuNzU3LjUuNSAwIDAgMSAwIDEgNi45NTUgNi45NTUgMCAwIDEtNC45NDktMi4wNWMtMi43MjgtMi43My0yLjcyOC03LjE3MSAwLTkuOSAyLjcyOC0yLjczIDcuMTY4LTIuNzMgOS44OTggMCAyLjYwOSAyLjYxIDIuNzIzIDYuNzg1LjM0MiA5LjUzMmwzLjU2NSAzLjU2NGEuNTAyLjUwMiAwIDAgMS0uNzA4LjcwOFpNNi4yNTQgM2wuMjc3IDUuMDYzaC45MzVMNy43NTQgM2gtMS41Wm0uMjIyIDcuNTQ4YS43MjcuNzI3IDAgMCAwIC41MzMuMjIyLjcxNy43MTcgMCAwIDAgLjUyLS4yMi43MTUuNzE1IDAgMCAwIC4yMjUtLjUzLjcxNi43MTYgMCAwIDAtLjIyMi0uNTM0LjcyNC43MjQgMCAwIDAtLjUyMy0uMjE2LjczMS43MzEgMCAwIDAtLjUzMy4yMTkuNzE5LjcxOSAwIDAgMC0uMjIyLjUzYzAgLjIwNS4wNzQuMzguMjIyLjUyOVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWFnbmlmeVdpdGhNaW51cyA9IGZ1bmN0aW9uIEV1aUljb25NYWduaWZ5V2l0aE1pbnVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDZhLjUuNSAwIDAgMSAwIDFoLTZhLjUuNSAwIDAgMSAwLTFoNlptLjc0IDQuNzRjMC0uMTE3LjA0LS4yMjUuMTA3LS4zMUE1LjQ3OCA1LjQ3OCAwIDAgMCAxMiA2LjUgNS41IDUuNSAwIDEgMCA2LjUgMTJhLjUuNSAwIDEgMSAwIDEgNi41IDYuNSAwIDEgMSA0LjkzNi0yLjI3bDQuNDE5IDQuNDE4YS41LjUgMCAwIDEtLjcwNy43MDdsLTQuNzY4LTQuNzY4YS40OTkuNDk5IDAgMCAxLS4xNC0uMzQ3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFnbmlmeVdpdGhNaW51czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NYWduaWZ5V2l0aFBsdXMgPSBmdW5jdGlvbiBFdWlJY29uTWFnbmlmeVdpdGhQbHVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyA2aDIuNWEuNS41IDAgMCAxIDAgMUg3djIuNWEuNS41IDAgMCAxLTEgMFY3SDMuNWEuNS41IDAgMCAxIDAtMUg2VjMuNWEuNS41IDAgMCAxIDEgMFY2Wm0zLjI0IDQuNzRjMC0uMTE3LjA0LS4yMjUuMTA3LS4zMUE1LjQ3OCA1LjQ3OCAwIDAgMCAxMiA2LjUgNS41IDUuNSAwIDEgMCA2LjUgMTJhLjUuNSAwIDEgMSAwIDEgNi41IDYuNSAwIDEgMSA0LjkzNi0yLjI3bDQuNDE5IDQuNDE4YS41LjUgMCAwIDEtLjcwNy43MDdsLTQuNzY4LTQuNzY4YS40OTkuNDk5IDAgMCAxLS4xNC0uMzQ3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFnbmlmeVdpdGhQbHVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1hcE1hcmtlciA9IGZ1bmN0aW9uIEV1aUljb25NYXBNYXJrZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1IDE0LjIyNGEuNTAyLjUwMiAwIDAgMCAuODk3IDBsNC04YS41LjUgMCAwIDAgLjA1My0uMjM1IDQuNjcyIDQuNjcyIDAgMCAwLS4wODQtLjcwNSA1LjUzOCA1LjUzOCAwIDAgMC0uNTA1LTEuNTEyQzExLjE4OSAyLjM2MiA5LjkwNiAxLjUgOCAxLjVjLTEuOTA2IDAtMy4xOS44NjItMy45MSAyLjI3Mi0uMjQ4LjQ4NS0uNDEuOTk4LS41MDYgMS41MTItLjA1OC4zMS0uMDguNTU0LS4wODQuNzA1YS41LjUgMCAwIDAgLjA1My4yMzVsMy45OTcgOFpNOCA1YTEgMSAwIDEgMCAwIDIgMSAxIDAgMCAwIDAtMlptLTMuNDkzLjg5NWMuMDA5LS4xMDYuMDI3LS4yNTMuMDYtLjQyOS4wNzktLjQyNC4yMTMtLjg0OC40MTMtMS4yMzhDNS41MzcgMy4xMzggNi40ODcgMi41IDggMi41YzEuNTEzIDAgMi40NjMuNjM4IDMuMDIgMS43MjguMi4zOS4zMzQuODE0LjQxMyAxLjIzOC4wMzMuMTc2LjA1MS4zMjMuMDYuNDNMOCAxMi44ODEgNC41MDcgNS44OTVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYXBNYXJrZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWVtb3J5ID0gZnVuY3Rpb24gRXVpSWNvbk1lbW9yeShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTBoMlY2SDd6TTMgMTBoMlY2SDN6TTExLjAyNSAxMGgyVjZoLTJ6TTMuNSAxMy43NWgxdi0yLjRoLTF6TTYuMTc1IDEzLjc1aDEuMDAxdi0yLjRINi4xNzV6TTguODUgMTMuNzVoMXYtMi40aC0xek0xMS41MjUgMTMuNzVoMXYtMi40aC0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAzdjcuMDVoMXYzLjY5OGgxdi0zLjY5OWgxMnYzLjY5OWgxdi0zLjY5OWgxVjNIMFptMSA2aDE0VjRIMXY1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVtb3J5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1lbnUgPSBmdW5jdGlvbiBFdWlJY29uTWVudShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMmgxNnYySDBWMlptMCA1aDE2djJIMFY3Wm0xNiA1SDB2MmgxNnYtMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWVudURvd24gPSBmdW5jdGlvbiBFdWlJY29uTWVudURvd24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDcuNWMwIC4yNzYtLjIxNi41LS40OTUuNWgtMi4wMWEuNTAzLjUwMyAwIDAgMS0uNDg3LS40MTJMMyA3LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMkw2IDcuNVpNMy41MSA0YS41MTMuNTEzIDAgMCAxLS41MDItLjQxMkwzIDMuNWMwLS4yNzYuMjI4LS41LjUxLS41aDguOThjLjI1IDAgLjQ1OS4xODMuNTAyLjQxMkwxMyAzLjVjMCAuMjc2LS4yMjguNS0uNTEuNUg4LjQ5M3Y3Ljc5MmwyLjA2LTIuMDZhLjUuNSAwIDEgMSAuNzA3LjcwN0w5LjE0IDEyLjU2QTEuNDk2IDEuNDk2IDAgMCAxIDguMDI2IDEzTDcuOTkzIDEzYS41MDEuNTAxIDAgMCAxLS4xMTgtLjAxNCAxLjQ5MyAxLjQ5MyAwIDAgMS0uODU3LS40MjZsLTIuMTIyLTIuMTJhLjUuNSAwIDAgMSAuNzA4LS43MDhsMS44ODkgMS44OVY0SDMuNTFaTTEzIDcuNWMwIC4yNzYtLjIxNi41LS40OTUuNWgtMi4wMWEuNTAzLjUwMyAwIDAgMS0uNDg3LS40MTJMMTAgNy41YzAtLjI3Ni4yMTYtLjUuNDk1LS41aDIuMDFjLjI0MyAwIC40NDUuMTgzLjQ4Ny40MTJMMTMgNy41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudURvd247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWVudUxlZnQgPSBmdW5jdGlvbiBFdWlJY29uTWVudUxlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjAxNCA3LjM4MmEuNTAxLjUwMSAwIDAgMC0uMDEzLjE1MmMtLjAxNC40LjEzMy44MDYuNDM5IDEuMTEybDIuMTIgMi4xMjJhLjUuNSAwIDEgMCAuNzA4LS43MDhMMi4yMDggOEgxNC41YS41LjUgMCAwIDAgMC0xSDIuMzc5bDEuODg5LTEuODlhLjUuNSAwIDAgMC0uNzA3LS43MDZMMS40NCA2LjUyNGMtLjI0MS4yNDItLjM4My41NDQtLjQyNi44NThaTTE0LjUgM2gtN2EuNS41IDAgMCAwIDAgMWg3YS41LjUgMCAwIDAgMC0xWm0wIDhoLTdhLjUuNSAwIDEgMCAwIDFoN2EuNS41IDAgMSAwIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVMZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1lbnVSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25NZW51UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC45ODYgNy4zODJhLjUwMS41MDEgMCAwIDEgLjAxMy4xNTJjLjAxNC40LS4xMzMuODA2LS40MzkgMS4xMTJsLTIuMTIgMi4xMjJhLjUuNSAwIDEgMS0uNzA4LS43MDhMMTMuNzkyIDhIMS41YS41LjUgMCAwIDEgMC0xaDEyLjEyMWwtMS44ODktMS44OWEuNS41IDAgMCAxIC43MDctLjcwNmwyLjEyMSAyLjEyYy4yNDEuMjQyLjM4My41NDQuNDI2Ljg1OFpNMS41IDNoN2EuNS41IDAgMCAxIDAgMWgtN2EuNS41IDAgMCAxIDAtMVptMCA4aDdhLjUuNSAwIDEgMSAwIDFoLTdhLjUuNSAwIDEgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZW51UmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWVudVVwID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVVcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjAxIDguNWMwLS4yNzYuMjE2LS41LjQ5NS0uNWgyLjAxYy4yNDMgMCAuNDQ1LjE4My40ODcuNDEybC4wMDguMDg4YzAgLjI3Ni0uMjE2LjUtLjQ5NS41aC0yLjAxYS41MDMuNTAzIDAgMCAxLS40ODctLjQxMkwxMC4wMSA4LjVaTTEyLjUgMTJjLjI1IDAgLjQ1OS4xODMuNTAyLjQxMmwuMDA4LjA4OGMwIC4yNzYtLjIyOC41LS41MS41SDMuNTJhLjUxMy41MTMgMCAwIDEtLjUwMi0uNDEyTDMuMDEgMTIuNWMwLS4yNzYuMjI4LS41LjUxLS41aDMuOTg3VjQuMjA4bC0yLjA2IDIuMDZhLjUuNSAwIDEgMS0uNzA3LS43MDdMNi44NiAzLjQ0QTEuNDk2IDEuNDk2IDAgMCAxIDcuOTc0IDNMOC4wMDcgM2MuMDQgMCAuMDguMDA1LjExOC4wMTQuMzE0LjA0My42MTYuMTg1Ljg1Ny40MjZsMi4xMjIgMi4xMmEuNS41IDAgMCAxLS43MDguNzA4bC0xLjg4OS0xLjg5VjEySDEyLjVaTTMgOC41YzAtLjI3Ni4yMTYtLjUuNDk1LS41aDIuMDFjLjI0MyAwIC40NDUuMTgzLjQ4Ny40MTJMNiA4LjVjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwIDEtLjQ4Ny0uNDEyTDMgOC41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudVVwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1lcmdlID0gZnVuY3Rpb24gRXVpSWNvbk1lcmdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4zNTIgNkgyLjVhLjUuNSAwIDAgMSAwLTFoNC44NTJMNS4xMiAyLjcyMWMtLjE4LS4xODMtLjE1NS0uNDYuMDU1LS42MTZhLjU1MS41NTEgMCAwIDEgLjcwNS4wNDhsMyAzLjA2MmMuMTYuMTY0LjE2LjQwNSAwIC41N2wtMyAzLjA2MkEuNTMyLjUzMiAwIDAgMSA1LjUgOWEuNTQuNTQgMCAwIDEtLjMyNS0uMTA2Yy0uMjEtLjE1Ny0uMjM1LS40MzMtLjA1NS0uNjE2TDcuMzUyIDZabTEuMjk2IDRIMTMuNWEuNS41IDAgMCAxIDAgMUg4LjY0OGwyLjIzMiAyLjI3OGMuMTguMTgzLjE1NS40Ni0uMDU1LjYxN0EuNTQuNTQgMCAwIDEgMTAuNSAxNGEuNTMyLjUzMiAwIDAgMS0uMzgtLjE1M2wtMy0zLjA2M2EuMzk3LjM5NyAwIDAgMSAwLS41NjhsMy0zLjA2M2EuNTUxLjU1MSAwIDAgMSAuNzA1LS4wNDdjLjIxLjE1Ni4yMzUuNDMzLjA1NS42MTZMOC42NDggMTBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZXJnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NaW5pbWl6ZSA9IGZ1bmN0aW9uIEV1aUljb25NaW5pbWl6ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTEuMTQ2IDE0LjE0NiA0LTRhLjUuNSAwIDAgMSAuNzY1LjYzOGwtLjA1Ny4wNy00IDRhLjUuNSAwIDAgMS0uNzY1LS42MzhsLjA1Ny0uMDcgNC00LTQgNFpNNi41IDhBMS41IDEuNSAwIDAgMSA4IDkuNXYzYS41LjUgMCAxIDEtMSAwdi0zYS41LjUgMCAwIDAtLjUtLjVoLTNhLjUuNSAwIDAgMSAwLTFoM1ptMi01YS41LjUgMCAwIDEgLjUuNXYzYS41LjUgMCAwIDAgLjUuNWgzYS41LjUgMCAxIDEgMCAxaC0zQTEuNSAxLjUgMCAwIDEgOCA2LjV2LTNhLjUuNSAwIDAgMSAuNS0uNVptMS42NTEgMi4xNDYgNC00YS41LjUgMCAwIDEgLjc2NS42MzhsLS4wNTcuMDctNCA0YS41LjUgMCAwIDEtLjc2NS0uNjM4bC4wNTctLjA3IDQtNC00IDRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NaW5pbWl6ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NaW51cyA9IGZ1bmN0aW9uIEV1aUljb25NaW51cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiAxMCxcbiAgICBoZWlnaHQ6IDEuNSxcbiAgICB4OiAzLFxuICAgIHk6IDcuMjUsXG4gICAgcng6IDAuNVxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1pbnVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1pbnVzSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uTWludXNJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMEMxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwWm0wIC44ODJhNi42MTggNi42MTggMCAxIDAgMCAxMy4yMzZBNi42MTggNi42MTggMCAwIDAgNy41Ljg4MlpNMy41IDdoOGEuNS41IDAgMSAxIDAgMWgtOGEuNS41IDAgMCAxIDAtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1pbnVzSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25NaW51c0luQ2lyY2xlRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSAwQzExLjYzNiAwIDE1IDMuMzY0IDE1IDcuNVMxMS42MzYgMTUgNy41IDE1IDAgMTEuNjM2IDAgNy41IDMuMzY0IDAgNy41IDBabS00IDdhLjUuNSAwIDAgMCAwIDFoOGEuNS41IDAgMSAwIDAtMWgtOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1pbnVzSW5DaXJjbGVGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWludXNJblNxdWFyZSA9IGZ1bmN0aW9uIEV1aUljb25NaW51c0luU3F1YXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNjExIDdINC4zOWMtLjIxNiAwLS4zOS4yMjQtLjM5LjVzLjE3NC41LjM4OS41aDYuMjIyYy4yMTUgMCAuMzg5LS4yMjQuMzg5LS41cy0uMTc0LS41LS4zODktLjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMSAzYTIgMiAwIDAgMSAyLTJoOWEyIDIgMCAwIDEgMiAydjlhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWM1ptMi0xaDlhMSAxIDAgMCAxIDEgMXY5YTEgMSAwIDAgMS0xIDFIM2ExIDEgMCAwIDEtMS0xVjNhMSAxIDAgMCAxIDEtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1pbnVzSW5TcXVhcmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENsYXNzaWZpY2F0aW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxNnY1aDIuMDM4YTEzLjE3OSAxMy4xNzkgMCAwIDAgMCAySDd2NUg1di01SDB2LTJoNXYtNWgyek03IDB2NWg1djJIN3Y1SDVWN0gwVjVoNVYwaDJ6bTE2IDB2NWg1djJoLTV2Mi4wMzhhMTMuMTc5IDEzLjE3OSAwIDAgMC0yIDBWN2gtNVY1aDVWMGgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMTBjMy4wNzMgMCA1Ljg3NyAxLjE1NSA4IDMuMDU2djMuMjUyQTkuODIgOS44MiAwIDEgMCAxNi4zMDcgMzBoLTMuMjUxQTExLjk1NSAxMS45NTUgMCAwIDEgMTAgMjJjMC02LjYyNyA1LjM3My0xMiAxMi0xMnptMSA4djNoM3YyaC0zdjNoLTJ2LTNoLTN2LTJoM3YtM2gyelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbENsYXNzaWZpY2F0aW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1sQ3JlYXRlQWR2YW5jZWRKb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDcmVhdGVBZHZhbmNlZEpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMyQzcuMTYzIDMyIDAgMjQuODM3IDAgMTZTNy4xNjMgMCAxNiAwczE2IDcuMTYzIDE2IDE2aC0yYzAtNy43MzItNi4yNjgtMTQtMTQtMTRTMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0djJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNyAyMHYxMmgtMlYyMGgyem0tNSA0djhoLTJ2LThoMnptMTAtMnYxMGgtMlYyMmgyek0xNyA5djZoNnYyaC02djZoLTJ2LTZIOXYtMmg2VjloMnpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVBZHZhbmNlZEpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NbENyZWF0ZU11bHRpTWV0cmljSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ3JlYXRlTXVsdGlNZXRyaWNKb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDI0YTQgNCAwIDEgMSAwIDggNCA0IDAgMCAxIDAtOHptMjQgMGE0IDQgMCAxIDEgMCA4IDQgNCAwIDAgMSAwLTh6TTQgMjZhMiAyIDAgMSAwIDAgNCAyIDIgMCAwIDAgMC00em0yNCAwYTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNHpNMTcgOXY2aDZ2MmgtNnY2aC0ydi02SDl2LTJoNlY5aDJ6TTQgMGE0IDQgMCAxIDEgMCA4IDQgNCAwIDAgMSAwLTh6bTI0IDBhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04em0wIDJhMiAyIDAgMSAwIDAgNCAyIDIgMCAwIDAgMC00ek00IDJhMiAyIDAgMSAwIDAgNCAyIDIgMCAwIDAgMC00elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS4wNzggMjkuMDVjLjEwMi42NzcuMyAxLjMyMi41ODIgMS45MkExNS45NjMgMTUuOTYzIDAgMCAxIDE2IDMyYy0xLjk5MyAwLTMuOS0uMzY0LTUuNjYtMS4wMy4yODEtLjU5OC40OC0xLjI0My41ODItMS45MiAxLjU3NC42MTQgMy4yODcuOTUgNS4wNzguOTUgMS43OTEgMCAzLjUwNC0uMzM2IDUuMDc4LS45NXptOS44OTItMTguNzFBMTUuOTYzIDE1Ljk2MyAwIDAgMSAzMiAxNmMwIDEuOTkzLS4zNjQgMy45LTEuMDMgNS42NmE2Ljk0OCA2Ljk0OCAwIDAgMC0xLjkyLS41ODJjLjYxNC0xLjU3NC45NS0zLjI4Ny45NS01LjA3OCAwLTEuNzkxLS4zMzYtMy41MDQtLjk1LTUuMDc4YTYuOTQ4IDYuOTQ4IDAgMCAwIDEuOTItLjU4MnptLTI5Ljk0IDBjLjU5OC4yODEgMS4yNDMuNDggMS45Mi41ODJBMTMuOTY1IDEzLjk2NSAwIDAgMCAyIDE2YzAgMS43OTEuMzM2IDMuNTA0Ljk1IDUuMDc4LS42NzcuMTAyLTEuMzIyLjMtMS45Mi41ODJBMTUuOTY0IDE1Ljk2NCAwIDAgMSAwIDE2YzAtMS45OTMuMzY0LTMuOSAxLjAzLTUuNjZ6TTE2IDBjMS45OTMgMCAzLjkuMzY0IDUuNjYgMS4wM2E2Ljk0OCA2Ljk0OCAwIDAgMC0uNTgyIDEuOTJBMTMuOTY1IDEzLjk2NSAwIDAgMCAxNiAyYy0xLjc5MSAwLTMuNTA0LjMzNi01LjA3OC45NWE2Ljk0OCA2Ljk0OCAwIDAgMC0uNTgyLTEuOTJBMTUuOTY0IDE1Ljk2NCAwIDAgMSAxNiAwelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NbENyZWF0ZVBvcHVsYXRpb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMGM1LjUyMyAwIDEwIDQuNDc3IDEwIDEwcy00LjQ3NyAxMC0xMCAxMFM2IDE1LjUyMyA2IDEwIDEwLjQ3NyAwIDE2IDB6bTAgMmE4IDggMCAxIDAgMCAxNiA4IDggMCAwIDAgMC0xNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNCAxOS4yODhjLjQ5Mi40MDIgMS4wMTUuNzY2IDEuNTY2IDEuMDg3TDcuMjYgMjMuNjgyYTQgNCAwIDEgMS0xLjQzNy0xLjI0M2wyLjU3OC0zLjE1MXptMTUuMiAwIDIuNTc3IDMuMTVhNCA0IDAgMSAxLTEuNDM3IDEuMjQzbC0yLjcwNi0zLjMwNmExMi4wMzIgMTIuMDMyIDAgMCAwIDEuNTY1LTEuMDg3ek00IDI0YTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNHptMjQgMGEyIDIgMCAxIDAgMCA0IDIgMiAwIDAgMCAwLTR6TTE3IDZ2M2gzdjJoLTN2M2gtMnYtM2gtM1Y5aDNWNmgyelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbENyZWF0ZVBvcHVsYXRpb25Kb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAgMS0xNiAxNlptMC0zMEM4LjI2OCAyIDIgOC4yNjggMiAxNnM2LjI2OCAxNCAxNCAxNCAxNC02LjI2OCAxNC0xNEExNCAxNCAwIDAgMCAxNiAyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMgMTVoLTZWOWgtMnY2SDl2Mmg2djZoMnYtNmg2elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbENyZWF0ZVNpbmdsZU1ldHJpY0pvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25NbERhdGFWaXN1YWxpemVyID0gZnVuY3Rpb24gRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDIwdjEwaDEwdjJIMFYyMGgyem0zMCAwdjEySDIwdi0yaDEwVjIwaDJ6TTEyIDRhOCA4IDAgMSAxIDAgMTYgOCA4IDAgMCAxIDAtMTZ6bTAgMmE2IDYgMCAxIDAgMCAxMiA2IDYgMCAwIDAgMC0xMnptMC02djJIMnYxMEgwVjBoMTJ6bTIwIDB2MTJoLTJWMkgyMFYwaDEyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuOTk3IDEyLjI1MWMtLjAxNy42ODktLjEwNCAxLjM2LS4yNTMgMi4wMDZhNiA2IDAgMSAxLTcuNDg3IDcuNDg3Yy0uNjQ2LjE1LTEuMzE3LjIzNi0yLjAwNi4yNTNhOCA4IDAgMSAwIDkuNzQ2LTkuNzQ2elwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbERhdGFWaXN1YWxpemVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1sT3V0bGllckRldGVjdGlvbkpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbE91dGxpZXJEZXRlY3Rpb25Kb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDEydjZoNnYySDB2LThoMnptMTggMHY4aC04di0yaDZ2LTZoMnpNOCAwdjJIMnY2SDBWMGg4em0xMiAwdjhoLTJWMmgtNlYwaDh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAyNGE0IDQgMCAxIDEgMCA4IDQgNCAwIDAgMSAwLTh6bTEyIDBhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04em0tMTIgMS43NWEyLjI1IDIuMjUgMCAxIDAgMCA0LjUgMi4yNSAyLjI1IDAgMCAwIDAtNC41em0xMiAwYTIuMjUgMi4yNSAwIDEgMCAwIDQuNSAyLjI1IDIuMjUgMCAwIDAgMC00LjV6TTI4IDEyYTQgNCAwIDEgMSAwIDggNCA0IDAgMCAxIDAtOHptMCAxLjc1YTIuMjUgMi4yNSAwIDEgMCAwIDQuNSAyLjI1IDIuMjUgMCAwIDAgMC00LjV6TTEwIDZhNCA0IDAgMSAxIDAgOCA0IDQgMCAwIDEgMC04em0wIDEuNzVhMi4yNSAyLjI1IDAgMSAwIDAgNC41IDIuMjUgMi4yNSAwIDAgMCAwLTQuNXpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxPdXRsaWVyRGV0ZWN0aW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1sUmVncmVzc2lvbkpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbFJlZ3Jlc3Npb25Kb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNCAwYTggOCAwIDEgMS00LjkwNiAxNC4zMmwtNC43NzQgNC43NzRhOCA4IDAgMSAxLTEuNDE0LTEuNDE0bDQuNzc0LTQuNzc0QTggOCAwIDAgMSAyNCAwek04IDE4YTYgNiAwIDEgMCAwIDEyIDYgNiAwIDAgMCAwLTEyek0yNCAyYTYgNiAwIDEgMCAwIDEyIDYgNiAwIDAgMCAwLTEyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzIgMjB2MTJIMjBWMjBoMTJ6bS0yIDJoLTh2OGg4di04ek0xMiAwdjEySDBWMGgxMnptLTIgMkgydjhoOFYyelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbFJlZ3Jlc3Npb25Kb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTW9iaWxlID0gZnVuY3Rpb24gRXVpSWNvbk1vYmlsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgMi41YS41LjUgMCAwIDEgLjUtLjVoM2EuNS41IDAgMCAxIDAgMWgtM2EuNS41IDAgMCAxLS41LS41WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuNSAwQTEuNSAxLjUgMCAwIDAgMyAxLjV2MTNBMS41IDEuNSAwIDAgMCA0LjUgMTZoN2ExLjUgMS41IDAgMCAwIDEuNS0xLjV2LTEzQTEuNSAxLjUgMCAwIDAgMTEuNSAwaC03Wk00IDEuNWEuNS41IDAgMCAxIC41LS41aDdhLjUuNSAwIDAgMSAuNS41VjRINFYxLjVaTTQgMTN2MS41YS41LjUgMCAwIDAgLjUuNWg3YS41LjUgMCAwIDAgLjUtLjVWMTNINFptMC0xaDhWNUg0djdaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTW9iaWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk1vb24gPSBmdW5jdGlvbiBFdWlJY29uTW9vbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNzk2IDkuMDQ4Yy0xLjU1Mi0yLjIzOC0xLjE5OS01LjMyMy42MS04LjEtMy40Ny0uMTItNi42IDIuMjMyLTcuMjY5IDUuNjcyLS43NDIgMy44MiAxLjgzIDcuNTMzIDUuNzQ5IDguMjk0YTcuMjI2IDcuMjI2IDAgMCAwIDcuNTI2LTMuMjE4Yy0yLjc5NC4xNzctNS4yNy0uNzExLTYuNjE2LTIuNjQ4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTW9vbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Nb3ZlID0gZnVuY3Rpb24gRXVpSWNvbk1vdmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC44ODMgNy42NDRhLjUuNSAwIDAgMSAuMDA2LjcwN2wtMS45ODQgMi4wMTZhLjUuNSAwIDAgMS0uODU2LS4zNDdsLS4wMDktMS4wMDQtMy4wMjQuMDI0VjEyaDFhLjUuNSAwIDAgMSAuMzU0Ljg1NGwtMiAyYS41LjUgMCAwIDEtLjcwNyAwbC0yLTJBLjUuNSAwIDAgMSA2LjAxNiAxMmgxVjkuMDU3bC0zLjAwOC4wMjQuMDA4Ljk5NWEuNS41IDAgMCAxLS44NS4zNkwxLjE0OCA4LjQ1NGEuNS41IDAgMCAxLS4wMDUtLjcwN0wzLjEyNyA1LjczYS41LjUgMCAwIDEgLjg1Ny4zNDdsLjAwOCAxLjAwNCAzLjAyNC0uMDI1VjRoLTFhLjUuNSAwIDAgMS0uMzUzLS44NTRsMi0yYS41LjUgMCAwIDEgLjcwNyAwbDIgMmEuNS41IDAgMCAxLS4zNTQuODU0aC0xdjMuMDRsMy4wMDgtLjAyNC0uMDA4LS45OTZhLjUuNSAwIDAgMSAuODUtLjM2bDIuMDE3IDEuOTg0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTW92ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25OYW1lc3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uTmFtZXNwYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgMWgxNHYxNEgxVjF6bTEzIDEydjFIMlYyaDEydjExek02IDZoNHY0SDZWNnptLTEgNVY1aDZ2Nkg1elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk5hbWVzcGFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25OZXN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uTmVzdGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS41IDFhLjUuNSAwIDAgMSAwIDFIMy4wMDZDMi40NSAyIDIgMi40NSAyIDMuMDA2djkuOTg4QzIgMTMuNTUgMi40NSAxNCAzLjAwNiAxNEg1LjVhLjUuNSAwIDEgMSAwIDFIMy4wMDZBMi4wMDUgMi4wMDUgMCAwIDEgMSAxMi45OTRWMy4wMDZDMSAxLjg5OCAxLjg5NyAxIDMuMDA2IDFINS41Wm03LjQ5NCAwYzEuMDU5IDAgMS45MjQuODE4IDIgMS44NTZsLjAwNi4xNXY5Ljk4OGEyLjAwNSAyLjAwNSAwIDAgMS0xLjg1NiAybC0uMTUuMDA2SDEwLjVhLjUuNSAwIDAgMS0uMDktLjk5MkwxMC41IDE0aDIuNDk0Yy41MTYgMCAuOTQxLS4zODggMS0uODg4bC4wMDYtLjExOFYzLjAwNmMwLS41MTYtLjM4OC0uOTQxLS44ODgtMUwxMi45OTQgMkgxMC41YS41LjUgMCAwIDEtLjA5LS45OTJMMTAuNSAxaDIuNDk0Wk01IDdhMSAxIDAgMSAxIDAgMiAxIDEgMCAwIDEgMC0yWm0zIDBhMSAxIDAgMSAxIDAgMiAxIDEgMCAwIDEgMC0yWm0zIDBhMSAxIDAgMSAxIDAgMiAxIDEgMCAwIDEgMC0yWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTmVzdGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk5ld0NoYXQgPSBmdW5jdGlvbiBFdWlJY29uTmV3Q2hhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNGEuNS41IDAgMCAxIC41LjVWNkgxMGEuNS41IDAgMCAxIDAgMUg4LjV2MS41YS41LjUgMCAwIDEtMSAwVjdINmEuNS41IDAgMCAxIDAtMWgxLjVWNC41QS41LjUgMCAwIDEgOCA0WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgNGEyLjUgMi41IDAgMCAxIDIuNS0yLjVoOUEyLjUgMi41IDAgMCAxIDE1IDR2NWEyLjUgMi41IDAgMCAxLTIuNSAyLjVINy43MDdMNC41IDE0LjcwN1YxMS41aC0xQTIuNSAyLjUgMCAwIDEgMSA5VjRabTIuNS0xLjVBMS41IDEuNSAwIDAgMCAyIDR2NWExLjUgMS41IDAgMCAwIDEuNSAxLjVoMnYxLjc5M0w3LjI5MyAxMC41SDEyLjVBMS41IDEuNSAwIDAgMCAxNCA5VjRhMS41IDEuNSAwIDAgMC0xLjUtMS41aC05WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk5ld0NoYXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTm9kZSA9IGZ1bmN0aW9uIEV1aUljb25Ob2RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41IDEuNDQzYTEgMSAwIDAgMC0xIDBMMi41NzIgNC4yOWExIDEgMCAwIDAtLjUuODY2djUuNjlhMSAxIDAgMCAwIC41Ljg2Nkw3LjUgMTQuNTU3YTEgMSAwIDAgMCAxIDBsNC45MjgtMi44NDZhMSAxIDAgMCAwIC41LS44NjZ2LTUuNjlhMSAxIDAgMCAwLS41LS44NjZMOC41IDEuNDQzWk05IC41NzdsNC45MjggMi44NDZhMiAyIDAgMCAxIDEgMS43MzJ2NS42OWEyIDIgMCAwIDEtMSAxLjczMkw5IDE1LjQyM2EyIDIgMCAwIDEtMiAwbC00LjkyOC0yLjg0NmEyIDIgMCAwIDEtMS0xLjczMnYtNS42OWEyIDIgMCAwIDEgMS0xLjczMkw3IC41NzdhMiAyIDAgMCAxIDIgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk5vZGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uTnVtYmVyID0gZnVuY3Rpb24gRXVpSWNvbk51bWJlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjgwOCAxMC4xOTdINi43OTZMNS44NTkgMTNINC40ODVsLjkzNy0yLjgwM0gzLjk2NmwuMjE5LTEuMjVoMS42NDdsLjYwOC0xLjgwNUg0Ljk5MWwuMjI2LTEuMjUxaDEuNjRsLjk1LTIuODQ0aDEuMzY4bC0uOTUgMi44NDRoMS4wMThsLjk1LTIuODQ0aDEuMzc0bC0uOTUgMi44NDRoMS41MWwtLjIxOCAxLjI1aC0xLjcwMmwtLjYwOCAxLjgwNWgxLjQ5N2wtLjIxOSAxLjI1MUg5LjE4Mkw4LjI1MiAxM0g2Ljg3OGwuOTMtMi44MDN6bS0uNjAyLTEuMjVoMS4wMTJsLjYxNS0xLjgwNUg3LjgxNGwtLjYwOCAxLjgwNHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk51bWJlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25PZmZsaW5lID0gZnVuY3Rpb24gRXVpSWNvbk9mZmxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm02LjUxNyAxMi4yNzEgMS4yNTQtMS4yNTRhMS41IDEuNSAwIDEgMS0xLjI1NCAxLjI1NFptMi45NDUtMi45NDQuNzQtLjc0Yy4zNjEuMjA4LjY5NC40NjcuOTg3Ljc3MmEuNS41IDAgMCAxLS43MjEuNjkzIDMuNDI0IDMuNDI0IDAgMCAwLTEuMDA2LS43MjVabTIuMTYyLTIuMTYzLjcxNi0uNzE1Yy4zMDguMjMyLjU5OS40OS44Ny43NzJhLjUuNSAwIDEgMS0uNzIyLjY5MiA2LjI2IDYuMjYgMCAwIDAtLjg2NC0uNzQ5Wk03LjA2MSA2LjA3QTYuMTk4IDYuMTk4IDAgMCAwIDMuNTQgNy44ODVhLjUuNSAwIDAgMS0uNzE3LS42OTcgNy4xOTkgNy4xOTkgMCAwIDEgNS4zMDktMi4xODdsLTEuMDcgMS4wN1ptNi42NzItMS4wMTQuNzEtLjcxYy4yNzQuMjMuNTM2LjQ3Ni43ODYuNzM2YS41LjUgMCAwIDEtLjcyMS42OTIgOS4xIDkuMSAwIDAgMC0uNzc1LS43MThabS0zLjgwNy0xLjg1QTkuMDYgOS4wNiAwIDAgMCA4IDNhOC45OSA4Ljk5IDAgMCAwLTYuNDY5IDIuNzM0LjUuNSAwIDEgMS0uNzE3LS42OTdBOS45OSA5Ljk5IDAgMCAxIDggMmMuOTQ0IDAgMS44NjguMTMxIDIuNzUuMzgybC0uODI0LjgyNFpNOCAxM2EuNS41IDAgMSAwIDAtMSAuNS41IDAgMCAwIDAgMVptLTUuNDI0IDFhLjUuNSAwIDAgMS0uNzA3LS43MDdMMTQuMTQ2IDEuMTQ2YS41LjUgMCAwIDEgLjcwOC43MDhMMi41NzYgMTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25PZmZsaW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbk9ubGluZSA9IGZ1bmN0aW9uIEV1aUljb25PbmxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE0YTEuNSAxLjUgMCAxIDEgMC0zIDEuNSAxLjUgMCAwIDEgMCAzWm0wLTFhLjUuNSAwIDEgMCAwLTEgLjUuNSAwIDAgMCAwIDFabTMuMTg5LTMuNjRhLjUuNSAwIDAgMS0uNzIxLjY5MkEzLjQwOCAzLjQwOCAwIDAgMCA4IDljLS45MzcgMC0xLjgxMy4zNzgtMi40NTMgMS4wMzdhLjUuNSAwIDAgMS0uNzE3LS42OTdBNC40MDggNC40MDggMCAwIDEgOCA4YzEuMjIgMCAyLjM2MS40OTcgMy4xODkgMS4zNlptMi4wMi0yLjE0YS41LjUgMCAxIDEtLjcyMS42OTNBNi4yIDYuMiAwIDAgMCA4IDZhNi4xOTkgNi4xOTkgMCAwIDAtNC40NiAxLjg4NS41LjUgMCAwIDEtLjcxOC0uNjk3QTcuMTk5IDcuMTk5IDAgMCAxIDggNWE3LjIgNy4yIDAgMCAxIDUuMjEgMi4yMlptMi4wMi0yLjEzOGEuNS41IDAgMCAxLS43MjEuNjkyQTguOTkgOC45OSAwIDAgMCA4IDNhOC45OSA4Ljk5IDAgMCAwLTYuNDY5IDIuNzM0LjUuNSAwIDEgMS0uNzE3LS42OTdBOS45OSA5Ljk5IDAgMCAxIDggMmE5Ljk5IDkuOTkgMCAwIDEgNy4yMyAzLjA4MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk9ubGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QYWNrYWdlID0gZnVuY3Rpb24gRXVpSWNvblBhY2thZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xNC40NDcgMy43MjQtNi0zYTEgMSAwIDAgMC0uODk0IDBsLTYgM0ExIDEgMCAwIDAgMSA0LjYxOHY2Ljc2NGExIDEgMCAwIDAgLjU1My44OTRsNiAzYTEgMSAwIDAgMCAuODk0IDBsNi0zYTEgMSAwIDAgMCAuNTUzLS44OTRWNC42MThhMSAxIDAgMCAwLS41NTMtLjg5NFpNNS44NzEgNS44OTdsNS4zNDMtMi42NzIgMi4xNTggMS4wNzlMOCA2Ljk0M1pNOCAxLjYxOGwyLjA5NiAxLjA0OC01LjM1MyAyLjY3Ny0yLjExNS0xLjAzOVpNMiA1LjExbDIuMjUgMS4xMDVWOWEuNS41IDAgMCAwIDEgMFY2LjcwNkw3LjUgNy44MTF2Ni4zMjFMMiAxMS4zODJabTYuNSA5LjAyMnYtNi4zMkwxNCA1LjExdjYuMjcyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFja2FnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QYWdlU2VsZWN0ID0gZnVuY3Rpb24gRXVpSWNvblBhZ2VTZWxlY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyAxYTEgMSAwIDAgMC0xIDF2MTJhMSAxIDAgMCAwIDEgMWg1YTQuOTk1IDQuOTk1IDAgMCAxLS41ODQtMUgzVjJoN3YyYTEgMSAwIDAgMCAxIDFoMnYyLjFjLjM0OC4wNy42ODIuMTc3IDEgLjMxNlY0YTEgMSAwIDAgMC0uMjkzLS43MDdsLTItMkExIDEgMCAwIDAgMTEgMUgzem0xMyAxMWE0IDQgMCAxIDEtOCAwIDQgNCAwIDAgMSA4IDB6bS0xLjY0Ni0xLjM1NGEuNS41IDAgMCAxIDAgLjcwOGwtMi41IDIuNWEuNS41IDAgMCAxLS43MDggMGwtMS0xYS41LjUgMCAwIDEgLjcwOC0uNzA4bC42NDYuNjQ3IDIuMTQ2LTIuMTQ3YS41LjUgMCAwIDEgLjcwOCAwelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFnZVNlbGVjdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QYWdlc1NlbGVjdCA9IGZ1bmN0aW9uIEV1aUljb25QYWdlc1NlbGVjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zIDFhMSAxIDAgMCAxIDEtMWg4YTEgMSAwIDAgMSAuNzA3LjI5M2wyIDJBMSAxIDAgMCAxIDE1IDN2NWE0Ljk5NSA0Ljk5NSAwIDAgMC0xLS41ODRWNGgtMmExIDEgMCAwIDEtMS0xVjFINHYxMmgzLjFjLjA3LjM0OC4xNzcuNjgyLjMxNiAxSDRhMSAxIDAgMCAxLTEtMVYxem01IDE0SDJWMmExIDEgMCAwIDAtMSAxdjEyYTEgMSAwIDAgMCAxIDFoN2E1LjAyOSA1LjAyOSAwIDAgMS0xLTF6bTgtM2E0IDQgMCAxIDEtOCAwIDQgNCAwIDAgMSA4IDB6bS0xLjY0Ni0xLjM1NGEuNS41IDAgMCAxIDAgLjcwOGwtMi41IDIuNWEuNS41IDAgMCAxLS43MDggMGwtMS0xYS41LjUgMCAwIDEgLjcwOC0uNzA4bC42NDYuNjQ3IDIuMTQ2LTIuMTQ3YS41LjUgMCAwIDEgLjcwOCAwelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFnZXNTZWxlY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGFpbnQgPSBmdW5jdGlvbiBFdWlJY29uUGFpbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS45OTMgOC4xN2MwIC44My0uNjczIDEuNTA3LTEuNDk5IDEuNTA3SDUuNDk4QTEuNTA1IDEuNTA1IDAgMCAxIDMuOTk5IDguMTdWNi42NjJoNy45OTRWOC4xN1ptLTIuOTk4IDUuOTk4YzAgLjQ1NS0uNDQ4LjgyNy0uOTk5LjgyNy0uNTUgMC0xLS4zNzItMS0uODI3di0zLjQ4NmgydjMuNDg2Wk00IDUuNjU4aDEuMjYyVjEuMDA1SDR2NC42NTNabTIuMjYxIDBoMS4yNDRWMS4wMDVINi4yNnY0LjY1M1ptMi4yNDQgMGgxLjIzNVYxLjAwNUg4LjUwNHY0LjY1M1ptMi4yMzQgMGgxLjI1NFYxLjAwNWgtMS4yNTR2NC42NTNaTTMuMDA4IDAgMyA4LjE3YTIuNTA5IDIuNTA5IDAgMCAwIDIuNDk4IDIuNTEyaC41djMuNDg2YzAgMS4wMS44OTYgMS44MzIgMS45OTggMS44MzIgMS4xMDIgMCAxLjk5OC0uODIyIDEuOTk4LTEuODMydi0zLjQ4NmguNWEyLjUwOSAyLjUwOSAwIDAgMCAyLjQ5OC0yLjUxMkwxMyAwSDMuMDA4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFpbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGFsZXR0ZSA9IGZ1bmN0aW9uIEV1aUljb25QYWxldHRlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA5YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptMiAyYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFpNNSA2YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptNC0yYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFptMiAyYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMWE3IDcgMCAwIDAgMCAxNGgyYTIgMiAwIDEgMCAwLTQgMSAxIDAgMSAxIDAtMmgzLjk4QzE0LjUxNSA5IDE1IDguNTgzIDE1IDhhNyA3IDAgMCAwLTctN1pNMiA4YTYgNiAwIDAgMSAxMi0uMDA1LjAzNS4wMzUgMCAwIDEtLjAyLjAwNUgxMGEyIDIgMCAxIDAgMCA0IDEgMSAwIDEgMSAwIDJIOGE2IDYgMCAwIDEtNi02WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFsZXR0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QYXBlckNsaXAgPSBmdW5jdGlvbiBFdWlJY29uUGFwZXJDbGlwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44NCAyLjAxOSAzLjA0NiA4LjU3Yy0uOTg3Ljk1Mi0xLjEzMyAyLjUxNy0uMTk5IDMuNTE2Ljk1MSAxLjAyMSAyLjU4IDEuMTA2IDMuNjQuMTkuMDM0LS4wMy4wNjgtLjA2MS4xLS4wOTJsNS42NTUtNS40NTJhLjQ4NC40ODQgMCAwIDAgMC0uNzAzLjUzLjUzIDAgMCAwLS43MjkgMEw1LjkyIDExLjQyMWMtLjU3Mi41NTEtMS41MDUuNjU3LTIuMTMxLjE2M2ExLjQ1NSAxLjQ1NSAwIDAgMS0uMTE4LTIuMjExbDYuODk5LTYuNjUxYTIuNjQ2IDIuNjQ2IDAgMCAxIDMuNjQ0IDAgMi40MjIgMi40MjIgMCAwIDEgMCAzLjUxM0w3LjMgMTIuOTAxYy0xLjMzMyAxLjI4NS0zLjQ5NyAxLjQ5My00Ljk1LjMzNi0xLjU0LTEuMjItMS43NjQtMy40MTEtLjUtNC44OTdhMy4zMyAzLjMzIDAgMCAxIC4yMzgtLjI1Mmw1Ljc4LTUuNTcyYS40ODQuNDg0IDAgMCAwIDAtLjcwMy41My41MyAwIDAgMC0uNzMgMGwtNS43OCA1LjU3MmE0LjM2IDQuMzYgMCAwIDAgMCA2LjMyNGMyLjE4OCAyLjEwOSA1LjIwMiAxLjMxIDYuNjYtLjA5NWw2LjkyNS02LjY3NmEzLjM5IDMuMzkgMCAwIDAgMC00LjkyQzEzLjUzNC42NiAxMS4yNS42NiA5Ljg0MSAyLjAxOXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhcGVyQ2xpcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QYXJ0aWFsID0gZnVuY3Rpb24gRXVpSWNvblBhcnRpYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjY2NCAxNC44NzFhNyA3IDAgMCAxLTIuNDItMTIuNzc4LjUuNSAwIDAgMSAuNjEyLjA2Yy40NTYuNDMxIDguMjE2IDguMjEyIDguOTggOS4wMDJhLjUuNSAwIDAgMSAuMDYzLjYxOCA3LjAwMiA3LjAwMiAwIDAgMS03LjIzNSAzLjA5OFptNi4xNjgtMy4zMTJhMTk2MS43MzMgMTk2MS43MzMgMCAwIDAtOC4zNzctOC40IDYgNiAwIDEgMCA4LjM3OCA4LjRabTIuMDk1LTIuNTQ4YS41LjUgMCAxIDEtLjk5LS4xNDRjLjAxLS4wNjYuMDEtLjA2Ni4wMTgtLjEzM2E2LjAwNyA2LjAwNyAwIDAgMC0uMDM0LTEuNzE0LjUuNSAwIDEgMSAuOTg3LS4xNjNjLjEwOC42NTUuMTIyIDEuMzI2LjA0IDEuOTk5bC0uMDIxLjE1NVptLTEuMjczLTUuMTM4YS41LjUgMCAxIDEtLjgwOC41OSA2LjAyNiA2LjAyNiAwIDAgMC0xLjMwNC0xLjMwOC41LjUgMCAwIDEgLjU5LS44MDYgNy4wMjYgNy4wMjYgMCAwIDEgMS41MjIgMS41MjRaTTkuMTY5IDEuMDk4YS41LjUgMCAxIDEtLjE2Ni45ODYgNi4xMDUgNi4xMDUgMCAwIDAtMS44NDktLjAyNi41LjUgMCAwIDEtLjE0LS45OSA3LjAyIDcuMDIgMCAwIDEgMi4xNTUuMDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYXJ0aWFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBhdXNlID0gZnVuY3Rpb24gRXVpSWNvblBhdXNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAyYTEgMSAwIDAgMC0xIDF2MTBhMSAxIDAgMSAwIDIgMFYzYTEgMSAwIDAgMC0xLTF6bTYgMGExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDEgMCAyIDBWM2ExIDEgMCAwIDAtMS0xelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGF1c2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGF5bWVudCA9IGZ1bmN0aW9uIEV1aUljb25QYXltZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNLjU4NiAyLjU4NkEyIDIgMCAwIDAgMCA0aDFhMSAxIDAgMCAxIDEtMVYyYTIgMiAwIDAgMC0xLjQxNC41ODZaTTIgMmgxMC41YS41LjUgMCAwIDEgMCAxSDJWMlpNMCA0aDF2Ni41YS41LjUgMCAwIDEtMSAwVjRabTIuNTg2LjU4NkEyIDIgMCAwIDAgMiA2aDFhMSAxIDAgMCAxIDEtMVY0YTIgMiAwIDAgMC0xLjQxNC41ODZabTAgOC44MjhBMiAyIDAgMCAxIDIgMTJoMWExIDEgMCAwIDAgMSAxdjFhMiAyIDAgMCAxLTEuNDE0LS41ODZabTEyLjgyOC04LjgyOEEyIDIgMCAwIDEgMTYgNmgtMWExIDEgMCAwIDAtMS0xVjRhMiAyIDAgMCAxIDEuNDE0LjU4NlptMCA4LjgyOEEyIDIgMCAwIDAgMTYgMTJoLTFhMSAxIDAgMCAxLTEgMXYxYTIgMiAwIDAgMCAxLjQxNC0uNTg2Wk00IDRoMTB2MUg0ek0zIDdoMTJ2MUgzem0xIDZoMTB2MUg0ek0yIDZoMXY2SDJ6bTEzIDBoMXY2aC0xem0tNS41IDRhLjUuNSAwIDAgMSAwIDFINy40OTZhLjUuNSAwIDAgMSAwLTFIOS41Wm00IDBhLjUuNSAwIDAgMSAwIDFoLTIuMDA0YS41LjUgMCAwIDEgMC0xSDEzLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYXltZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBlbmNpbCA9IGZ1bmN0aW9uIEV1aUljb25QZW5jaWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4xNDggMy4xNDggMTEgMmwtOSA5djNoM2w5LTktMS4xNDQtMS4xNDQtOC4wMDIgNy45OThhLjUwMi41MDIgMCAwIDEtLjcwOCAwIC41MDIuNTAyIDAgMCAxIDAtLjcwOGw4LjAwMi03Ljk5OFpNMTEgMWMuMjU2IDAgLjUxMi4wOTguNzA3LjI5M2wzIDNhLjk5OS45OTkgMCAwIDEgMCAxLjQxNGwtOSA5QS45OTcuOTk3IDAgMCAxIDUgMTVIMmExIDEgMCAwIDEtMS0xdi0zYzAtLjI2NS4xMDUtLjUyLjI5My0uNzA3bDktOUEuOTk3Ljk5NyAwIDAgMSAxMSAxWk01IDE0SDJ2LTNsMyAzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGVuY2lsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBlcmNlbnQgPSBmdW5jdGlvbiBFdWlJY29uUGVyY2VudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01IDhjMS4xMDUgMCAyLTEuMTIgMi0yLjVTNi4xMDUgMyA1IDMgMyA0LjEyIDMgNS41IDMuODk1IDggNSA4em0wLTFjLjM1NiAwIDEtLjQ1MiAxLTEuNVM1LjM1NiA0IDUgNHMtMSAuNDUyLTEgMS41UzQuNjQ0IDcgNSA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNSAzSDEyTDUuNSAxM0g0bDYuNS0xMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMyAxMC41YzAgMS4zOC0uODk1IDIuNS0yIDIuNXMtMi0xLjEyLTItMi41UzkuODk1IDggMTEgOHMyIDEuMTIgMiAyLjV6bS0xIDBjMCAxLjA0OC0uNjQ0IDEuNS0xIDEuNXMtMS0uNDUyLTEtMS41LjY0NC0xLjUgMS0xLjUgMSAuNDUyIDEgMS41elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGVyY2VudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QaW4gPSBmdW5jdGlvbiBFdWlJY29uUGluKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMTFoNC41YS41LjUgMCAxIDAgMC0xaC0xMGEuNS41IDAgMCAwIDAgMUg3djQuMjVjMCAuNDE0LjIyNC43NS41Ljc1cy41LS4zMzYuNS0uNzVWMTFaTTQgNGgxdjZINFY0Wm02IDBoMXY2aC0xVjRaTTQuMjg2IDJDNC4wOCAyIDQgMi4wNjMgNCAydjFjMC0uMDYzLjA4IDAgLjI4NiAwaDYuNDI4QzEwLjkyIDMgMTEgMi45MzcgMTEgM1YyYzAgLjA2My0uMDggMC0uMjg2IDBINC4yODZabTAtMWg2LjQyOEMxMS40MjQgMSAxMiAxLjQ0OCAxMiAydjFjMCAuNTUyLS41NzYgMS0xLjI4NiAxSDQuMjg2QzMuNTc2IDQgMyAzLjU1MiAzIDNWMmMwLS41NTIuNTc2LTEgMS4yODYtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBpbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QaW5GaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uUGluRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMWg0LjVhLjUuNSAwIDEgMCAwLTFoLTEwYS41LjUgMCAxIDAgMCAxSDh2NC4yNWMwIC40MTQuMjI0Ljc1LjUuNzVzLjUtLjMzNi41LS43NVYxMVpNNSA0aDd2Nkg1VjRabS4yODYtM2g2LjQyOEMxMi40MjQgMSAxMyAxLjQ0OCAxMyAydjFjMCAuNTUyLS41NzYgMS0xLjI4NiAxSDUuMjg2QzQuNTc2IDQgNCAzLjU1MiA0IDNWMmMwLS41NTIuNTc2LTEgMS4yODYtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBpbkZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QaXBlQnJlYWtzID0gZnVuY3Rpb24gRXVpSWNvblBpcGVCcmVha3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDNoOS41YTIuNSAyLjUgMCAwIDEgMCA1SDZ2MUw0IDcuNSA2IDZ2MWg1LjVhMS41IDEuNSAwIDAgMCAwLTNIMlYzWm0xIDNIMnYzaDFWNlptMCA0SDJ2M2gxdi0zWm0zIDAtMiAxLjVMNiAxM3YtMWg1LjVhMi41IDIuNSAwIDAgMCAyLjE2NS0zLjc1IDMuNDk3IDMuNDk3IDAgMCAxLS44NjUuNUExLjUgMS41IDAgMCAxIDExLjUgMTFINnYtMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBpcGVCcmVha3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGlwZU5vQnJlYWtzID0gZnVuY3Rpb24gRXVpSWNvblBpcGVOb0JyZWFrcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMkg3djNoMVY0aDNWM0g4VjJabS01IDhIMnYzaDF2LTFoM3YtMUgzdi0xWm00IDBoMXYxaDN2MUg4djFIN3YtM1ptNiAwaC0xdjNoMXYtMWgxdi0xaC0xdi0xWk01IDZoMXYxaDN2MUg2djFINVY2Wm02IDBoLTF2M2gxVjhoM1Y3aC0zVjZabTEtNGgxdjFoMXYxaC0xdjFoLTFWMlpNNiAzSDJ2MWg0VjNaTTIgN2gydjFIMlY3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGlwZU5vQnJlYWtzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBpdm90ID0gZnVuY3Rpb24gRXVpSWNvblBpdm90KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuODkgMTMuODQ3IDExLjIzOSA1LjVhLjUyMi41MjIgMCAwIDAtLjczNy0uNzM3TDIuMTU0IDEzLjExYS41MjIuNTIyIDAgMCAwIC43MzguNzM4Wk0xNCA2LjY5NmEuNTIyLjUyMiAwIDEgMS0xLjA0MyAwdi0zLjEzYS41MjIuNTIyIDAgMCAwLS41MjItLjUyM2gtMy4xM2EuNTIyLjUyMiAwIDEgMSAwLTEuMDQzaDMuMTNDMTMuMjk5IDIgMTQgMi43IDE0IDMuNTY1djMuMTNaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGl2b3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGxheSA9IGZ1bmN0aW9uIEV1aUljb25QbGF5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC42MDggMy4wNjNDNC4zNDUgMi44OTUgNCAzLjA4OSA0IDMuNDE4djkuMTY3YzAgLjMyOS4zNDUuNTIzLjYwOC4zNTZsNy4yLTQuNTg0YS40MjYuNDI2IDAgMCAwIDAtLjcxMWwtNy4yLTQuNTgzWm0uNTM4LS44NDQgNy4yIDQuNTgzYTEuNDI2IDEuNDI2IDAgMCAxIDAgMi4zOTlsLTcuMiA0LjU4M0M0LjIxIDE0LjM4IDMgMTMuNjk2IDMgMTIuNTg1VjMuNDE4QzMgMi4zMDcgNC4yMSAxLjYyNCA1LjE0NiAyLjIyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGxheTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25QbGF5RmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblBsYXlGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0xMi4zNDUgNi44MDEtNy4yLTQuNTgxQzQuMjEgMS42MjUgMyAyLjMwOCAzIDMuNDE5djkuMTYyYzAgMS4xMTEgMS4yMSAxLjc5NCAyLjE0NiAxLjE5OWw3LjItNC41ODFhMS40MjUgMS40MjUgMCAwIDAgMC0yLjM5OHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsYXlGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGx1cyA9IGZ1bmN0aW9uIEV1aUljb25QbHVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4yNSAzYS41LjUgMCAwIDEgLjUuNXYzLjc1aDMuNzVhLjUuNSAwIDAgMSAuNS41di41YS41LjUgMCAwIDEtLjUuNUg4Ljc1djMuNzVhLjUuNSAwIDAgMS0uNS41aC0uNWEuNS41IDAgMCAxLS41LS41VjguNzVIMy41YS41LjUgMCAwIDEtLjUtLjV2LS41YS41LjUgMCAwIDEgLjUtLjVoMy43NVYzLjVhLjUuNSAwIDAgMSAuNS0uNWguNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsdXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGx1c0luQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvblBsdXNJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDdoMy41YS41LjUgMCAxIDEgMCAxSDh2My41YS41LjUgMCAxIDEtMSAwVjhIMy41YS41LjUgMCAwIDEgMC0xSDdWMy41YS41LjUgMCAwIDEgMSAwVjdabS0uNS03QzExLjYzNiAwIDE1IDMuMzY0IDE1IDcuNVMxMS42MzYgMTUgNy41IDE1IDAgMTEuNjM2IDAgNy41IDMuMzY0IDAgNy41IDBabTAgLjg4MmE2LjYxOCA2LjYxOCAwIDEgMCAwIDEzLjIzNkE2LjYxOCA2LjYxOCAwIDAgMCA3LjUuODgyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGx1c0luQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDdWMy41YS41LjUgMCAwIDAtMSAwVjdIMy41YS41LjUgMCAwIDAgMCAxSDd2My41YS41LjUgMCAxIDAgMSAwVjhoMy41YS41LjUgMCAxIDAgMC0xSDhabS0uNSA4YTcuNSA3LjUgMCAxIDEgMC0xNSA3LjUgNy41IDAgMCAxIDAgMTVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUGx1c0luU3F1YXJlID0gZnVuY3Rpb24gRXVpSWNvblBsdXNJblNxdWFyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNC4zODlWN2gyLjYxMWMuMjE1IDAgLjM4OS4yMjQuMzg5LjVzLS4xNzQuNS0uMzg5LjVIOHYyLjYxMWMwIC4yMTUtLjIyNC4zODktLjUuMzg5cy0uNS0uMTc0LS41LS4zODlWOEg0LjM4OUM0LjE3NCA4IDQgNy43NzYgNCA3LjVzLjE3NC0uNS4zODktLjVIN1Y0LjM4OUM3IDQuMTc0IDcuMjI0IDQgNy41IDRzLjUuMTc0LjUuMzg5WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgM2EyIDIgMCAwIDEgMi0yaDlhMiAyIDAgMCAxIDIgMnY5YTIgMiAwIDAgMS0yIDJIM2EyIDIgMCAwIDEtMi0yVjNabTItMWg5YTEgMSAwIDAgMSAxIDF2OWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVYzYTEgMSAwIDAgMSAxLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzSW5TcXVhcmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUG9wb3V0ID0gZnVuY3Rpb24gRXVpSWNvblBvcG91dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDguNWEuNS41IDAgMSAxIDEgMFYxMmEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoMy41YS41LjUgMCAwIDEgMCAxSDRhMSAxIDAgMCAwLTEgMXY4YTEgMSAwIDAgMCAxIDFoOGExIDEgMCAwIDAgMS0xVjguNVptLTUuMTIuMzM5YS41LjUgMCAxIDEtLjcwNi0uNzA3TDEzLjMwNSAySDEwLjVhLjUuNSAwIDEgMSAwLTFIMTRhMSAxIDAgMCAxIDEgMXYzLjVhLjUuNSAwIDEgMS0xIDBWMi43Mkw3Ljg4IDguODM4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUG9wb3V0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblB1c2ggPSBmdW5jdGlvbiBFdWlJY29uUHVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMTcxIDUuMTUgMTAuMTE0IDdIMS41NTZDMS4yNDkgNyAxIDcuMjI0IDEgNy41cy4yNDkuNS41NTYuNWg4LjUyNmwtMS45MSAxLjgyYS41Mi41MiAwIDAgMCAwIC43N2MuMjI3LjIxMy42LjIxMy44MjggMGwyLjA1LTEuOTVhMS41NTIgMS41NTIgMCAwIDAgMC0yLjMxTDkgNC4zOGEuNjE3LjYxNyAwIDAgMC0uODI5IDAgLjUyLjUyIDAgMCAwIDAgLjc3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi44MDQgMTIuNzkyQS45OTMuOTkzIDAgMCAxIDYgMTEuODJWMTBINXYxLjgyNmMwIC45NDUuNjczIDEuNzYgMS42MDggMS45NDVsNiAxLjE5QTEuOTkyIDEuOTkyIDAgMCAwIDE1IDEzLjAxNlYxLjk4NEEyIDIgMCAwIDAgMTIuNjA4LjA0bC02IDEuMTlDNS42NzMgMS40MTUgNSAyLjIzIDUgMy4xNzVWNWgxVjMuMThjMC0uNDcyLjMzNi0uODc5LjgwNC0uOTcybDYtMS4xODlBMSAxIDAgMCAxIDE0IDEuOTkxdjExLjAxOGEuOTk1Ljk5NSAwIDAgMS0xLjE5Ni45NzJsLTYtMS4xOXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblB1c2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUXVlc3Rpb25JbkNpcmNsZSA9IGZ1bmN0aW9uIEV1aUljb25RdWVzdGlvbkluQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNEE2IDYgMCAxIDEgOCAyYTYgNiAwIDAgMSAwIDEyWm0wLTFBNSA1IDAgMSAwIDggM2E1IDUgMCAwIDAgMCAxMFptLS4xODYtMS4wNjVBLjc4NS43ODUgMCAwIDEgNyAxMS4xMmMwLS40OC4zNC0uODIuODE0LS44Mi40NzUgMCAuODA5LjM0LjgwOS44MiAwIC40NzUtLjMzNC44MTUtLjgwOS44MTVaTTUuOSA2LjMxN0M1Ljk2IDUuMTY4IDYuNzU1IDQuNCA4LjA0OCA0LjRjMS4yMTggMCAyLjA5MS43NTkgMi4wOTEgMS44IDAgLjczNi0uMzYgMS4zMDQtMS4wMyAxLjcwNy0uNTYuMzMtLjcxNy41Ni0uNzE3IDEuMDIydi4zMDVsLS4xLjFINy40N2wtLjEtLjF2LS40MzFjLS4wMDUtLjY0Ni4zMDItMS4xMDQuOTg3LTEuNTE0LjUyNy0uMzIyLjcwOC0uNTkuNzA4LTEuMDQ3IDAtLjUzNi0uNDE2LS45MS0xLjA1LS45MS0uNjUyIDAtMS4wNjQuMzc0LTEuMTEyLjk5OGwtLjEuMDkySDZsLS4xLS4xMDVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25RdWVzdGlvbkluQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblF1b3RlID0gZnVuY3Rpb24gRXVpSWNvblF1b3RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi44NDggMi40N2ExIDEgMCAwIDEtLjMxOCAxLjM3OEE3LjI4NCA3LjI4NCAwIDAgMCAzLjc1IDcuMDEgMyAzIDAgMSAxIDEgMTB2LS4wMjdhMy41MjEgMy41MjEgMCAwIDEgLjAxLS4yMzJjLjAwOS0uMTUuMDI3LS4zNi4wNjItLjYxOC4wNy0uNTEzLjIwNy0xLjIyLjQ4NC0yLjAxNC41NTItMS41OSAxLjY3LTMuNTU1IDMuOTE0LTQuOTU3YTEgMSAwIDAgMSAxLjM3OC4zMTh6bTcgMGExIDEgMCAwIDEtLjMxOCAxLjM3OCA3LjI4MyA3LjI4MyAwIDAgMC0yLjc4IDMuMTYyQTMgMyAwIDEgMSA4IDEwdi0uMDI3YTMuNTIxIDMuNTIxIDAgMCAxIC4wMS0uMjMyYy4wMDktLjE1LjAyNy0uMzYuMDYyLS42MTguMDctLjUxMy4yMDctMS4yMi40ODQtMi4wMTQuNTUyLTEuNTkgMS42Ny0zLjU1NSAzLjkxNC00Ljk1N2ExIDEgMCAwIDEgMS4zNzguMzE4elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUXVvdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uUmVmcmVzaCA9IGZ1bmN0aW9uIEV1aUljb25SZWZyZXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMjI4IDIuOTQyYS41LjUgMCAxIDEtLjUzOC44NDJBNSA1IDAgMSAwIDEzIDhhLjUuNSAwIDEgMSAxIDAgNiA2IDAgMSAxLTIuNzcyLTUuMDU4Wk0xNCAxLjV2M0ExLjUgMS41IDAgMCAxIDEyLjUgNmgtM2EuNS41IDAgMCAxIDAtMWgzYS41LjUgMCAwIDAgLjUtLjV2LTNhLjUuNSAwIDEgMSAxIDBaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25SZWZyZXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblJlcG9ydGVyID0gZnVuY3Rpb24gRXVpSWNvblJlcG9ydGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNjg0Ljg5NSA2LjA3NC4zNThhMSAxIDAgMCAwLTEuMjk2Ljc1M0w0LjIgNEgyLjVhLjUuNSAwIDAgMCAwIDFoMS42MjZhNC4wMDcgNC4wMDcgMCAwIDAgLjExIDIuMzU5bC0yLjA3Mi0uMzQ1QTEgMSAwIDAgMCAxIDh2MWMuMzY0IDAgLjcwNi4wOTcgMSAuMjY4VjhsMSAuMTY3IDEuODU5LjMxIDIuMTYzLjM2LjQ3OC4wOHY2TDIgMTR2LTEuMjY4QTEuOTkgMS45OSAwIDAgMSAxIDEzdjFhMSAxIDAgMCAwIC44MzYuOTg2bDYgMWMuMTA4LjAxOC4yMi4wMTguMzI4IDBsNi0xQTEgMSAwIDAgMCAxNSAxNHYtMWExLjk5IDEuOTkgMCAwIDEtMS0uMjY4VjE0bC01LjUuOTE3di02bC40NzgtLjA4IDIuMTYzLS4zNkwxMyA4LjE2NiAxNCA4djEuMjY4QTEuOTkgMS45OSAwIDAgMSAxNSA5VjhhMSAxIDAgMCAwLTEuMTY0LS45ODZsLTIuMDczLjM0NUEzLjk5MSAzLjk5MSAwIDAgMCAxMS44NzQgNUgxMy41YS41LjUgMCAwIDAgMC0xaC0xLjdsLS41NzgtMi44OUExIDEgMCAwIDAgOS45MjUuMzU5TDguMzE2Ljg5NWExIDEgMCAwIDEtLjYzMiAwem0yLjg4IDYuNjY0QTMuMDEzIDMuMDEzIDAgMCAwIDEwLjgzIDVINS4xN2EzLjAxMyAzLjAxMyAwIDAgMCAuMjY2IDIuNTU5TDggNy45ODZsMi41NjQtLjQyN3pNMTAuOCA0SDkuMkw5IDNsMS41LS41LjMgMS41ek0xIDEyYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMnptMTQgMGExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25SZXBvcnRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25SZXR1cm5LZXkgPSBmdW5jdGlvbiBFdWlJY29uUmV0dXJuS2V5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTk0IDRjMS4wNTkgMCAxLjkyNC44MTggMiAxLjg1NmwuMDA2LjE1djEuOTg4YTIuMDA1IDIuMDA1IDAgMCAxLTEuODU2IDJMMTIgMTBIMy40ODRsMS45MSAxLjgyYS41Mi41MiAwIDAgMSAwIC43Ny42MTYuNjE2IDAgMCAxLS44MjkgMGwtMi4wNS0xLjk1YTEuNTUxIDEuNTUxIDAgMCAxIDAtMi4zMWwyLjA1LTEuOTVhLjYxNy42MTcgMCAwIDEgLjgzIDAgLjUyLjUyIDAgMCAxIDAgLjc3TDMuNDUgOUgxMmMuNTE0LS4wMDMuOTM1LS4zOS45OTMtLjg4OEwxMyA3Ljk5NFY2LjAwNmMwLS41MTYtLjM4OC0uOTQxLS44ODgtMUwxMS45OTQgNUg5LjVhLjUuNSAwIDAgMS0uMDktLjk5Mkw5LjUgNGgyLjQ5NHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJldHVybktleTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TYXZlID0gZnVuY3Rpb24gRXVpSWNvblNhdmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjAwOCAySDIuMjgyYy0uMTgxIDAtLjI0NS4wMDItLjI3NS4wMDctLjAwNS4wMy0uMDA3LjA5NC0uMDA3LjI3NXYxMS40MzZjMCAuMTgxLjAwMi4yNDUuMDA3LjI3NS4wMy4wMDUuMDk0LjAwNy4yNzUuMDA3aDExLjQzNmMuMTgxIDAgLjI0NS0uMDAyLjI3NS0uMDA3LjAwNS0uMDMuMDA3LS4wOTQuMDA3LS4yNzVWNC42MmMwLS4xMy0uMDAxLS4xOC0uMDA0LS4yMDRhMi42NTQgMi42NTQgMCAwIDAtLjE0MS0uMTQ3TDExLjczIDIuMTQ1YTIuNjU0IDIuNjU0IDAgMCAwLS4xNDctLjE0MUEyLjY1NCAyLjY1NCAwIDAgMCAxMS4zOCAyaC0uMzg4Yy4wMDUuMDguMDA4LjE3Mi4wMDguMjgydjIuNDM2YzAgLjQ0Ni0uMDQ2LjYwNy0uMTM0Ljc3YS45MDkuOTA5IDAgMCAxLS4zNzguMzc4Yy0uMTYzLjA4OC0uMzI0LjEzNC0uNzcuMTM0SDYuMjgyYy0uNDQ2IDAtLjYwNy0uMDQ2LS43Ny0uMTM0YS45MDkuOTA5IDAgMCAxLS4zNzgtLjM3OEM1LjA0NiA1LjMyNSA1IDUuMTY0IDUgNC43MThWMi4yODJjMC0uMTEuMDAzLS4yMDIuMDA4LS4yODJaTTIuMjgyIDFoOS4wOThjLjI1OSAwIC4zNDguMDEuNDQ3LjAzMmEuODcuODcgMCAwIDEgLjI3My4xMTNjLjA4Ni4wNTQuMTU2LjExLjMzOC4yOTNsMi4xMjQgMi4xMjRjLjE4Mi4xODIuMjM5LjI1Mi4yOTMuMzM4YS44Ny44NyAwIDAgMSAuMTEzLjI3M2MuMDIzLjEuMDMyLjE4OC4wMzIuNDQ3djkuMDk4YzAgLjQ0Ni0uMDQ2LjYwNy0uMTM0Ljc3YS45MDkuOTA5IDAgMCAxLS4zNzguMzc4Yy0uMTYzLjA4OC0uMzI0LjEzNC0uNzcuMTM0SDIuMjgyYy0uNDQ2IDAtLjYwNy0uMDQ2LS43Ny0uMTM0YS45MDkuOTA5IDAgMCAxLS4zNzgtLjM3OGMtLjA4OC0uMTYzLS4xMzQtLjMyNC0uMTM0LS43N1YyLjI4MmMwLS40NDYuMDQ2LS42MDcuMTM0LS43N2EuOTA5LjkwOSAwIDAgMSAuMzc4LS4zNzhjLjE2My0uMDg4LjMyNC0uMTM0Ljc3LS4xMzRaTTYgMi4yODJ2Mi40MzZjMCAuMTgxLjAwMi4yNDUuMDA3LjI3NS4wMy4wMDUuMDk0LjAwNy4yNzUuMDA3aDMuNDM2Yy4xODEgMCAuMjQ1LS4wMDIuMjc1LS4wMDcuMDA1LS4wMy4wMDctLjA5NC4wMDctLjI3NVYyLjI4MmMwLS4xODEtLjAwMi0uMjQ1LS4wMDctLjI3NUEyLjI0OCAyLjI0OCAwIDAgMCA5LjcxOCAySDYuMjgyYy0uMTgxIDAtLjI0NS4wMDItLjI3NS4wMDctLjAwNS4wMy0uMDA3LjA5NC0uMDA3LjI3NVpNOCAxMmEyIDIgMCAxIDEgMC00IDIgMiAwIDAgMSAwIDRabTAtMWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TYXZlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNjYWxlID0gZnVuY3Rpb24gRXVpSWNvblNjYWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyLjUgMTJhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabS0yIDBhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabS0yIDBhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabTQtMmEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptLTIgMGEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptMi0xYS41LjUgMCAxIDEgMC0xIC41LjUgMCAwIDEgMCAxWm0wLTNhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabS0yIDJhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabS0yIDBhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabTAgMmEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptLTIgMmEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptLTIgMGEuNS41IDAgMSAxIDAgMSAuNS41IDAgMCAxIDAtMVptMi0yYS41LjUgMCAxIDEgMCAxIC41LjUgMCAwIDEgMC0xWm02LTZhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFabS0yIDJhLjUuNSAwIDEgMSAwIDEgLjUuNSAwIDAgMSAwLTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TY2FsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTEuMjcxIDExLjk3OCAzLjg3MiAzLjg3M2EuNTAyLjUwMiAwIDAgMCAuNzA4IDAgLjUwMi41MDIgMCAwIDAgMC0uNzA4bC0zLjU2NS0zLjU2NGMyLjM4LTIuNzQ3IDIuMjY3LTYuOTIzLS4zNDItOS41MzItMi43My0yLjczLTcuMTctMi43My05Ljg5OCAwLTIuNzI4IDIuNzI5LTIuNzI4IDcuMTcgMCA5LjlhNi45NTUgNi45NTUgMCAwIDAgNC45NDkgMi4wNS41LjUgMCAwIDAgMC0xIDUuOTYgNS45NiAwIDAgMS00LjI0Mi0xLjc1NyA2LjAxIDYuMDEgMCAwIDEgMC04LjQ4NmMyLjMzNy0yLjM0IDYuMTQzLTIuMzQgOC40ODQgMGE2LjAxIDYuMDEgMCAwIDEgMCA4LjQ4Ni41LjUgMCAwIDAgLjAzNC43MzhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2VjdXJpdHlTaWduYWwgPSBmdW5jdGlvbiBFdWlJY29uU2VjdXJpdHlTaWduYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuODc1IDMuNDE4YTYgNiAwIDEgMCAuNzA3LjcwN2wtMi40NiAyLjQ2LTEuMTU2IDEuMTU2YTEgMSAwIDEgMS0uNzA3LS43MDdsLjc1Ny0uNzU3YTIgMiAwIDAgMC0yLjQzIDMuMTM3LjUuNSAwIDEgMS0uNzA3LjcwNyAzIDMgMCAwIDEgMy44Ni00LjU2N2wuNzE0LS43MTRBNCA0IDAgMSAwIDggMTJhLjUuNSAwIDEgMSAwIDEgNSA1IDAgMSAxIDMuMTY0LTguODcxbC43MS0uNzF6bS43MDktLjcwOWE3IDcgMCAxIDAgLjcwNy43MDdsLjM2Ni0uMzY2YS41LjUgMCAxIDAtLjcwNy0uNzA3bC0uMzY2LjM2NnpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNlY3VyaXR5U2lnbmFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uU2VjdXJpdHlTaWduYWxEZXRlY3RlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy42NTcgMy4wNWEuNS41IDAgMCAwLS43MDctLjcwN2wtLjM2Ni4zNjZBNyA3IDAgMSAwIDggMTVhNC45OTQgNC45OTQgMCAwIDEtLjU5Ny0xLjAzIDYgNiAwIDEgMSA0LjQ3MS0xMC41NTJsLS43MS43MWE1IDUgMCAxIDAtNC4wOCA4Ljc4OCA1LjAyNyA1LjAyNyAwIDAgMS0uMDgyLTEuMDQyQTQuMDAyIDQuMDAyIDAgMCAxIDggNGEzLjk4IDMuOTggMCAwIDEgMi40NTMuODRsLS43MTUuNzE0YTMgMyAwIDAgMC0zLjg2IDQuNTY3LjUuNSAwIDEgMCAuNzA4LS43MDcgMiAyIDAgMCAxIDIuNDMtMy4xMzdsLS43NTcuNzU3YTEgMSAwIDEgMCAuNzA3LjcwN2wxLjE1NS0xLjE1NSAyLjQ2LTIuNDZhNS45NzIgNS45NzIgMCAwIDEgMS4zOSAzLjI3N2MuMzY3LjE1OC43MTMuMzYgMS4wMjkuNTk3IDAtMS42MzYtLjU3LTMuMjcxLTEuNzEtNC41ODRsLjM2Ny0uMzY2ek0xNiAxMmE0IDQgMCAxIDEtOCAwIDQgNCAwIDAgMSA4IDB6bS00IC41YS41NzcuNTc3IDAgMCAxLS41Ny0uNDk1bC0uMjktMi4wMTVhLjg2Ny44NjcgMCAxIDEgMS43MTggMGwtLjI4OCAyLjAxNWEuNTc3LjU3NyAwIDAgMS0uNTcuNDk1em0wIDIuNWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQgPSBmdW5jdGlvbiBFdWlJY29uU2VjdXJpdHlTaWduYWxSZXNvbHZlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy42NTcgMy4wNWEuNS41IDAgMSAwLS43MDctLjcwN2wtLjM2Ni4zNjZBNyA3IDAgMSAwIDggMTVhNC45OTQgNC45OTQgMCAwIDEtLjU5Ny0xLjAzIDYgNiAwIDEgMSA0LjQ3MS0xMC41NTJsLS43MS43MWE1IDUgMCAxIDAtNC4wOCA4Ljc4OCA1LjAyOCA1LjAyOCAwIDAgMS0uMDgyLTEuMDQyQTQuMDAyIDQuMDAyIDAgMCAxIDggNGEzLjk4IDMuOTggMCAwIDEgMi40NTMuODRsLS43MTUuNzE0YTMgMyAwIDAgMC0zLjg2IDQuNTY3LjUuNSAwIDEgMCAuNzA4LS43MDcgMiAyIDAgMCAxIDIuNDMtMy4xMzdsLS43NTcuNzU3YTEgMSAwIDEgMCAuNzA3LjcwN2wxLjE1NS0xLjE1NSAyLjQ2LTIuNDZhNS45NzIgNS45NzIgMCAwIDEgMS4zOSAzLjI3N2MuMzY3LjE1OC43MTMuMzYgMS4wMjkuNTk3IDAtMS42MzYtLjU3LTMuMjcxLTEuNzEtNC41ODRsLjM2Ny0uMzY2ek0xNiAxMmE0IDQgMCAxIDEtOCAwIDQgNCAwIDAgMSA4IDB6bS0xLjY0Ni0xLjM1NGEuNS41IDAgMCAxIDAgLjcwN2wtMi41IDIuNWEuNS41IDAgMCAxLS43MDggMGwtMS0xYS41LjUgMCAwIDEgLjcwOC0uNzA3bC42NDYuNjQ3IDIuMTQ2LTIuMTQ3YS41LjUgMCAwIDEgLjcwOCAwelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2VjdXJpdHlTaWduYWxSZXNvbHZlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TZXNzaW9uVmlld2VyID0gZnVuY3Rpb24gRXVpSWNvblNlc3Npb25WaWV3ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDZoMXYxSDRWNnptMiAySDVWN2gxdjF6bTAgMVY4aDF2MUg2em0tMSAxVjloMXYxSDV6bTAgMHYxSDR2LTFoMXptMiAwaDR2MUg3di0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgM2ExIDEgMCAwIDEgMS0xaDEyYTEgMSAwIDAgMSAxIDF2MTBhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTFWM3ptMSAxaDEydjlIMlY0elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNlc3Npb25WaWV3ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU2hhcmQgPSBmdW5jdGlvbiBFdWlJY29uU2hhcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjEzNCA3LjAzMSA4IDEyLjc2NGwyLjg2Ni01LjczM0w4IDIuMDE2IDUuMTM0IDcuMDNaTTggMGw0IDctNCA4LTQtOCA0LTdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TaGFyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TaGFyZSA9IGZ1bmN0aW9uIEV1aUljb25TaGFyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNi44MXY2LjM4YzAgLjQ5My40NDguOS45OTIuOWg3LjAxNmMuNTQzIDAgLjk5Mi0uNDA2Ljk5Mi0uOVY2LjgxYzAtLjQ5My0uNDQ4LS45LS45OTItLjlIMy45OTJjLS41NDMgMC0uOTkyLjQwNi0uOTkyLjlaTTYgNXYuOTFoM1Y1aDIuMDA4QzEyLjEwOCA1IDEzIDUuODE4IDEzIDYuODF2Ni4zOGMwIDEtLjkgMS44MS0xLjk5MiAxLjgxSDMuOTkyQzIuODkyIDE1IDIgMTQuMTgyIDIgMTMuMTlWNi44MUMyIDUuODEgMi45IDUgMy45OTIgNUg2Wm0xLjk5Ny0zLjU1MkEuNTA2LjUwNiAwIDAgMSA4IDEuNXY4YS41LjUgMCAwIDEtMSAwdi04YS41MS41MSAwIDAgMSAwLS4wMTdMNS4xOCAzLjM5NGEuNTIuNTIgMCAwIDEtLjc3IDAgLjYxNy42MTcgMCAwIDEgMC0uODI5TDYuMzYuNTE1YTEuNTUyIDEuNTUyIDAgMCAxIDIuMzEgMGwxLjk1IDIuMDVjLjIxNC4yMjkuMjE0LjYwMSAwIC44M2EuNTIuNTIgMCAwIDEtLjc3IDBMNy45OTcgMS40NDdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TaGFyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TaW5nbGVNZXRyaWNWaWV3ZXIgPSBmdW5jdGlvbiBFdWlJY29uU2luZ2xlTWV0cmljVmlld2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS41IDFhLjUuNSAwIDAgMSAuNS41VjE0aDEyLjVhLjUuNSAwIDAgMSAwIDFoLTEzYS41LjUgMCAwIDEtLjUtLjV2LTEzYS41LjUgMCAwIDEgLjUtLjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi45MzUgNi42NTJhLjYuNiAwIDAgMC0uOTUxLS4wNjJMOSAxMGwtMi43NDctLjkxNmEuNi42IDAgMCAwLS40ODUuMDQ3TDMgMTAuNjl2MS44MWEuNS41IDAgMCAwIC41LjVoMTFhLjUuNSAwIDAgMCAuNS0uNVY5Ljc1bC0yLjA2NS0zLjA5OFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjAyMyAyLjc1OGEuNi42IDAgMCAwLS45ODctLjA3N0w4LjM4OCA3LjIwM2wtMi4wOTMtLjgzYS42LjYgMCAwIDAtLjU1Mi4wNThMMy4yMjEgOC4wOThhLjQ5LjQ5IDAgMCAwLS4xMzguNjgzLjUuNSAwIDAgMCAuNjg5LjEzNmwyLjM0OS0xLjU1MiAyLjU4MiAxLjAyNCAzLjc0Ni00LjY0MyAxLjYyMyAyLjgxN2MuMTM2LjIzNy40NC4zMTkuNjc4LjE4NGEuNDkuNDkgMCAwIDAgLjE4NC0uNjcybC0xLjkxLTMuMzE3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2luZ2xlTWV0cmljVmlld2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNub3dmbGFrZSA9IGZ1bmN0aW9uIEV1aUljb25Tbm93Zmxha2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy4wMDcuNWEuNS41IDAgMCAxIDEgMHYyLjAyNGEuOTk5Ljk5OSAwIDAgMCAuMjY4LS4yMjdsMS4wMjctMS4yMzNhLjUuNSAwIDAgMSAuNzY5LjY0TDguMjc1IDMuODZhLjk5OS45OTkgMCAwIDEtLjI2OC4yMjd2Mi41NDhsMi4yMDctMS4yNzRjMC0uMTE0LjAyLS4yMzEuMDYyLS4zNDZsLjk2OC0yLjYzMmEuNS41IDAgMSAxIC45MzguMzQ1bC0uNTU0IDEuNTA2YS45OTguOTk4IDAgMCAwLS4wNjIuMzQ2bDEuNzUzLTEuMDEyYS41LjUgMCAxIDEgLjUuODY2bC0xLjc1MyAxLjAxMmMuMS4wNTcuMjEuMDk4LjMzLjExOWwxLjU4Mi4yNzNhLjUuNSAwIDEgMS0uMTcuOTg2bC0yLjc2NC0uNDc4YTEgMSAwIDAgMS0uMzMtLjEyTDguNTA2IDcuNWwyLjIwNyAxLjI3NGExIDEgMCAwIDEgLjMzLS4xMTlsMi43NjQtLjQ3OGEuNS41IDAgMSAxIC4xNy45ODZsLTEuNTgyLjI3M2EuOTk5Ljk5OSAwIDAgMC0uMzMuMTJsMS43NTMgMS4wMTFhLjUuNSAwIDEgMS0uNS44NjZsLTEuNzUzLTEuMDEyYzAgLjExNS4wMi4yMzEuMDYyLjM0NmwuNTU0IDEuNTA2YS41LjUgMCAwIDEtLjkzOC4zNDVsLS45NjgtMi42MzJhLjk5OS45OTkgMCAwIDEtLjA2Mi0uMzQ2TDguMDA3IDguMzY2djIuNTQ4Yy4wOTguMDU4LjE5LjEzMy4yNjguMjI3bDEuNzk2IDIuMTU1YS41LjUgMCAwIDEtLjc2OS42NGwtMS4wMjctMS4yMzNhLjk5OS45OTkgMCAwIDAtLjI2OC0uMjI2VjE0LjVhLjUuNSAwIDAgMS0xIDB2LTIuMDI0YS45OTkuOTk5IDAgMCAwLS4yNjkuMjI3bC0xLjAyNyAxLjIzM2EuNS41IDAgMCAxLS43NjgtLjY0bDEuNzk1LTIuMTU1YS45OTkuOTk5IDAgMCAxIC4yNjktLjIyN1Y4LjM2Nkw0LjggOS42NGMwIC4xMTQtLjAyLjIzMS0uMDYyLjM0NmwtLjk2OSAyLjYzMmEuNS41IDAgMSAxLS45MzgtLjM0NWwuNTU0LTEuNTA2YTEgMSAwIDAgMCAuMDYyLS4zNDZsLTEuNzUzIDEuMDEyYS41LjUgMCAwIDEtLjUtLjg2NmwxLjc1My0xLjAxMmEuOTk5Ljk5OSAwIDAgMC0uMzMtLjExOWwtMS41ODItLjI3M2EuNS41IDAgMCAxIC4xNy0uOTg2bDIuNzY0LjQ3OGMuMTIuMDIuMjMyLjA2Mi4zMy4xMkw2LjUwOCA3LjUgNC4zIDYuMjI2YS45OTkuOTk5IDAgMCAxLS4zMy4xMTlsLTIuNzY1LjQ3OGEuNS41IDAgMSAxLS4xNy0uOTg2bDEuNTgyLS4yNzNhLjk5OS45OTkgMCAwIDAgLjMzLS4xMkwxLjE5NCA0LjQzNGEuNS41IDAgMSAxIC41LS44NjZsMS43NTMgMS4wMTJjMC0uMTE0LS4wMi0uMjMxLS4wNjItLjM0NkwyLjgzIDIuNzI3YS41LjUgMCAxIDEgLjkzOC0uMzQ1bC45NjkgMi42MzJhLjk5OS45OTkgMCAwIDEgLjA2Mi4zNDZsMi4yMDcgMS4yNzRWNC4wODZhMSAxIDAgMCAxLS4yNjktLjIyN0w0Ljk0MyAxLjcwNGEuNS41IDAgMCAxIC43NjgtLjY0bDEuMDI3IDEuMjMzYy4wNzkuMDk0LjE3LjE3LjI2OS4yMjdWLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tbm93Zmxha2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU29ydEFzY2VuZGluZyA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0QXNjZW5kaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy44NTQgMy4xNDZhLjUuNSAwIDAgMC0uNzA4IDBsLTIgMmEuNS41IDAgMSAwIC43MDguNzA4TDMgNC43MDdWMTEuNWEuNS41IDAgMCAwIDEgMFY0LjcwN2wxLjE0NiAxLjE0N2EuNS41IDAgMSAwIC43MDgtLjcwOGwtMi0yWk04IDQuNWEuNS41IDAgMCAxIC41LS41aDZhLjUuNSAwIDAgMSAwIDFoLTZhLjUuNSAwIDAgMS0uNS0uNVpNOC41IDdhLjUuNSAwIDAgMCAwIDFoNGEuNS41IDAgMCAwIDAtMWgtNFpNOCAxMC41YS41LjUgMCAwIDEgLjUtLjVoMmEuNS41IDAgMCAxIDAgMWgtMmEuNS41IDAgMCAxLS41LS41WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydEFzY2VuZGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Tb3J0RGVzY2VuZGluZyA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0RGVzY2VuZGluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMTAuMjkzVjMuNWEuNS41IDAgMCAwLTEgMHY2Ljc5M0wxLjg1NCA5LjE0NmEuNS41IDAgMSAwLS43MDguNzA4bDIgMmEuNS41IDAgMCAwIC43MDggMGwyLTJhLjUuNSAwIDEgMC0uNzA4LS43MDhMNCAxMC4yOTNaTTggNC41YS41LjUgMCAwIDEgLjUtLjVoNmEuNS41IDAgMCAxIDAgMWgtNmEuNS41IDAgMCAxLS41LS41Wk04LjUgN2EuNS41IDAgMCAwIDAgMWg0YS41LjUgMCAwIDAgMC0xaC00Wk04IDEwLjVhLjUuNSAwIDAgMSAuNS0uNWgyYS41LjUgMCAwIDEgMCAxaC0yYS41LjUgMCAwIDEtLjUtLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0RGVzY2VuZGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Tb3J0TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0TGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjMwOCA3aDguMTM2Yy4zMDcgMCAuNTU2LjIyNC41NTYuNXMtLjI0OS41LS41NTYuNUg0LjMwOGw0LjA5NiA0LjA5NmEuNS41IDAgMCAxLS43MDcuNzA3TDMuNDU0IDguNTYxYTEuNDk0IDEuNDk0IDAgMCAxLS40MzMtLjkyNS40NTQuNDU0IDAgMCAxIDAtLjI3MmMuMDMtLjMzOC4xNzUtLjY2Ni40MzMtLjkyNWw0LjI0My00LjI0MmEuNS41IDAgMSAxIC43MDcuNzA3TDQuMzA4IDdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Tb3J0UmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uU29ydFJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNjkyIDdIMy41NTZDMy4yNDkgNyAzIDcuMjI0IDMgNy41cy4yNDkuNS41NTYuNWg4LjEzNmwtNC4wOTYgNC4wOTZhLjUuNSAwIDAgMCAuNzA3LjcwN2w0LjI0My00LjI0MmMuMjU4LS4yNTkuNDAzLS41ODcuNDMzLS45MjVhLjQ1NC40NTQgMCAwIDAgMC0uMjcyIDEuNDk0IDEuNDk0IDAgMCAwLS40MzMtLjkyNUw4LjMwMyAyLjE5N2EuNS41IDAgMSAwLS43MDcuNzA3TDExLjY5MiA3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydFJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNvcnREb3duID0gZnVuY3Rpb24gRXVpSWNvblNvcnREb3duKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxMS42OTJWMy41NTZDNyAzLjI0OSA3LjIyNCAzIDcuNSAzcy41LjI0OS41LjU1NnY4LjEzNmw0LjA5Ni00LjA5NmEuNS41IDAgMCAxIC43MDcuNzA3bC00LjI0MiA0LjI0M2ExLjQ5NCAxLjQ5NCAwIDAgMS0uOTI1LjQzMy40NTQuNDU0IDAgMCAxLS4yNzIgMCAxLjQ5NCAxLjQ5NCAwIDAgMS0uOTI1LS40MzNMMi4xOTcgOC4zMDNhLjUuNSAwIDEgMSAuNzA3LS43MDdMNyAxMS42OTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0RG93bjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Tb3J0VXAgPSBmdW5jdGlvbiBFdWlJY29uU29ydFVwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0LjIwN3Y4LjIzN2MwIC4zMDctLjIyNC41NTYtLjUuNTU2cy0uNS0uMjQ5LS41LS41NTZWNC4yMDdMMi45MDQgOC4zMDNhLjUuNSAwIDAgMS0uNzA3LS43MDdsNC4yNDItNC4yNDJhMS41IDEuNSAwIDAgMSAyLjEyMiAwbDQuMjQyIDQuMjQyYS41LjUgMCAxIDEtLjcwNy43MDdMOCA0LjIwN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRVcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Tb3J0YWJsZSA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0YWJsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTIuNzg2VjMuMkwzLjYwNCA2LjU5NmEuNS41IDAgMCAxLS43MDgtLjcwN2wzLjUzNi0zLjUzNWExLjUgMS41IDAgMCAxIDIuMTIxIDBsMy41MzYgMy41MzVhLjUuNSAwIDAgMS0uNzA3LjcwN0w4IDMuMjE0djkuNTU3bDMuMzgyLTMuMzgyYS41LjUgMCAwIDEgLjcwNy43MDdsLTMuNTM2IDMuNTM2YTEuNSAxLjUgMCAwIDEtMi4xMjEgMGwtMy41MzYtMy41MzZhLjUuNSAwIDAgMSAuNzA4LS43MDdMNyAxMi43ODZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0YWJsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TcGFjZXMgPSBmdW5jdGlvbiBFdWlJY29uU3BhY2VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgM0gzdjNoM1YzWk0zIDJhMSAxIDAgMCAwLTEgMXYzYTEgMSAwIDAgMCAxIDFoM2ExIDEgMCAwIDAgMS0xVjNhMSAxIDAgMCAwLTEtMUgzWm0zIDhIM3YzaDN2LTNaTTMgOWExIDEgMCAwIDAtMSAxdjNhMSAxIDAgMCAwIDEgMWgzYTEgMSAwIDAgMCAxLTF2LTNhMSAxIDAgMCAwLTEtMUgzWm0xMC02aC0zdjNoM1YzWm0tMy0xYTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxaDNhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFoLTNabTMgOGgtM3YzaDN2LTNabS0zLTFhMSAxIDAgMCAwLTEgMXYzYTEgMSAwIDAgMCAxIDFoM2ExIDEgMCAwIDAgMS0xdi0zYTEgMSAwIDAgMC0xLTFoLTNaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3BhY2VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblNwYXJrbGVzID0gZnVuY3Rpb24gRXVpSWNvblNwYXJrbGVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwibTUuMDE2IDQuMzgzLjAzNS0uMDkzYS40OTIuNDkyIDAgMCAxIC44OTggMGwuMDM1LjA5M2MuMDQ4LjEyOC4wNzIuMTkyLjA5Ny4yNTNhNS45IDUuOSAwIDAgMCAzLjUzNiAzLjM4bC4wOTMuMDM1YS40OTIuNDkyIDAgMCAxIDAgLjg5OGwtLjA5My4wMzVhNS45IDUuOSAwIDAgMC0zLjUzNiAzLjM4Yy0uMDI1LjA2LS4wNDkuMTI1LS4wOTcuMjUzbC0uMDM1LjA5M2EuNDkyLjQ5MiAwIDAgMS0uODk4IDBsLS4wMzUtLjA5M2MtLjA0OC0uMTI4LS4wNzItLjE5Mi0uMDk3LS4yNTNhNS45IDUuOSAwIDAgMC0zLjUzNi0zLjM4IDIuMTc1IDIuMTc1IDAgMCAxLS4wOTMtLjAzNS40OTIuNDkyIDAgMCAxIDAtLjg5OGwuMDkzLS4wMzVjLjEyOC0uMDQ4LjE5Mi0uMDcyLjI1My0uMDk3YTUuOSA1LjkgMCAwIDAgMy4zOC0zLjUzNlptNi43NjktMi4yMTNhLjk2OC45NjggMCAwIDEgLjAxNi0uMDQxLjIxOS4yMTkgMCAwIDEgLjM5OCAwIDIuNjIyIDIuNjIyIDAgMCAwIDEuNTE4IDEuNjEzbC4xMTMuMDQzYS4yNzIuMjcyIDAgMCAxIC4wNC4wMTYuMjE5LjIxOSAwIDAgMSAwIC4zOTguMjcyLjI3MiAwIDAgMS0uMDQuMDE2bC0uMTEzLjA0M2EyLjYyMiAyLjYyMiAwIDAgMC0xLjUwMiAxLjU3Mi45NjguOTY4IDAgMCAxLS4wMTYuMDQuMjE5LjIxOSAwIDAgMS0uMzk4IDAgMi42MjIgMi42MjIgMCAwIDAtMS41MTgtMS42MTNsLS4xMTMtLjA0MmEuMjcyLjI3MiAwIDAgMS0uMDQtLjAxNi4yMTkuMjE5IDAgMCAxIDAtLjM5OC4yNzIuMjcyIDAgMCAxIC4wNC0uMDE2bC4xMTMtLjA0M2EyLjYyMiAyLjYyMiAwIDAgMCAxLjUwMi0xLjU3MlptLS41NTUgOC4wNDMuMDItLjA1MmEuMjczLjI3MyAwIDAgMSAuNSAwbC4wMi4wNTIuMDUzLjE0YTMuMjc1IDMuMjc1IDAgMCAwIDEuODI0IDEuODI0bC4xNC4wNTRjLjAzLjAxLjA0NC4wMTYuMDUyLjAyYS4yNzMuMjczIDAgMCAxIDAgLjQ5OCAxLjI0OCAxLjI0OCAwIDAgMS0uMDUyLjAyYy0uMDcuMDI3LS4xMDcuMDQtLjE0LjA1NGEzLjI3OSAzLjI3OSAwIDAgMC0xLjgyNCAxLjgyNGwtLjA1NC4xNGEuNDA5LjQwOSAwIDAgMS0uMDIuMDUyLjI3My4yNzMgMCAwIDEtLjQ5OCAwIDEuMjQ4IDEuMjQ4IDAgMCAxLS4wMi0uMDUyYy0uMDI3LS4wNy0uMDQtLjEwNy0uMDU0LS4xNGEzLjI3OSAzLjI3OSAwIDAgMC0xLjgyNC0xLjgyNGwtLjE0LS4wNTRhMS4yNCAxLjI0IDAgMCAxLS4wNTItLjAyLjI3My4yNzMgMCAwIDEgMC0uNDk4IDEuMjQgMS4yNCAwIDAgMSAuMDUyLS4wMmwuMTQtLjA1NGEzLjI3OSAzLjI3OSAwIDAgMCAxLjgyNC0xLjgyNGwuMDU0LS4xNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNwYXJrbGVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0YXJQbHVzRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uU3RhclBsdXNFbXB0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJhLjg2Ljg2IDAgMCAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMCAwIDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMCAwIC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMCAwIDYgMm04IDhoMnYxaC0ydjJoLTF2LTJoLTJ2LTFoMlY4aDF2MlpNNiAzYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMCAxLS4wMjkuMTI2TDguNzYyIDkuMTIxbC0uMjU5LjI2MS4wNjMuMzYyLjUzNSAzLjExMmMuMDA3LjA0IDAgLjA3LS4wMjMuMDk4YS4xMjcuMTI3IDAgMCAxLS4wOTEuMDQ2LjEwNi4xMDYgMCAwIDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw2IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwIDEtLjA1NC4wMTYuMTI3LjEyNyAwIDAgMS0uMDkxLS4wNDZjLS4wMjMtLjAyOC0uMDMtLjA1OC0uMDI0LS4wOThsLjUzNi0zLjExMi4wNjMtLjM2Mi0uMjU5LS4yNjEtMi4yMDItMi4yMjZhLjExNi4xMTYgMCAwIDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwIDEgLjA5NC0uMDhsMi45OC0uNDI1LjM4Ni0uMDU1LjE2Mi0uMzU2IDEuMjY3LTIuNzg2QzUuOTA1IDMuMDUgNS45MjcgMyA2IDNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyUGx1c0VtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0YXJQbHVzRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblN0YXJQbHVzRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDEwaDJ2MWgtMnYyaC0xdi0yaC0ydi0xaDJWOGgxdjJaTTYgMmEuODYuODYgMCAwIDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwIDAgMi44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw2IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwIDAgLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwIDAgNiAyXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyUGx1c0ZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdGFyRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uU3RhckVtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMmEuODYuODYgMCAwIDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwIDAgNC44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw4IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwIDAgLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwIDAgOCAybTAgMWMuMDczIDAgLjA5NS4wNDkuMTA0LjA3bDEuMjY3IDIuNzgzLjE2Mi4zNTYuMzg3LjA1NSAyLjk3OC40MjVjLjAxNy4wMDIuMDcxLjAxLjA5NS4wOGEuMTE2LjExNiAwIDAgMS0uMDI5LjEyNmwtMi4yMDIgMi4yMjYtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAgMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMCAxLS4wNTUtLjAxNmwtMi41NzgtMS40NjlMOCAxMS4zMTRsLS4zNTQuMjAxLTIuNTc5IDEuNDY5YS4xMDMuMTAzIDAgMCAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwIDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMCAxLS4wMjktLjEyNi4xMDguMTA4IDAgMCAxIC4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM3LjkwNSAzLjA1IDcuOTI3IDMgOCAzXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyRW1wdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3RhckVtcHR5U3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uU3RhckVtcHR5U3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAgMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAgMCAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAgMCAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAgMCA2IDJtMCAxYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMCAxLS4wMjkuMTI2TDguNzYyIDkuMTIxbC0uMjU5LjI2MS4wNjMuMzYyLjUzNSAzLjExMmMuMDA3LjA0IDAgLjA3LS4wMjMuMDk4YS4xMjcuMTI3IDAgMCAxLS4wOTEuMDQ2LjEwNi4xMDYgMCAwIDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw2IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwIDEtLjA1NC4wMTYuMTI3LjEyNyAwIDAgMS0uMDkxLS4wNDZjLS4wMjMtLjAyOC0uMDMtLjA1OC0uMDI0LS4wOThsLjUzNi0zLjExMi4wNjMtLjM2Mi0uMjU5LS4yNjEtMi4yMDItMi4yMjZhLjExNi4xMTYgMCAwIDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwIDEgLjA5NC0uMDhsMi45OC0uNDI1LjM4Ni0uMDU1LjE2Mi0uMzU2IDEuMjY3LTIuNzg2QzUuOTA1IDMuMDUgNS45MjcgMyA2IDNcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJFbXB0eVNwYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0YXJGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uU3RhckZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDJhLjg2Ljg2IDAgMCAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMCAwIDQuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMOCAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMCAwIC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMCAwIDggMlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhckZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TdGFyRmlsbGVkU3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uU3RhckZpbGxlZFNwYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMmEuODYuODYgMCAwIDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwIDAgMi44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw2IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwIDAgLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwIDAgNiAyXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyRmlsbGVkU3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3Rhck1pbnVzRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uU3Rhck1pbnVzRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAgMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAgMCAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAgMCAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAgMCA2IDJtMCAxYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMCAxLS4wMjkuMTI2TDguNzYyIDkuMTIxbC0uMjU5LjI2MS4wNjMuMzYyLjUzNSAzLjExMmMuMDA3LjA0IDAgLjA3LS4wMjMuMDk4YS4xMjcuMTI3IDAgMCAxLS4wOTEuMDQ2LjEwNi4xMDYgMCAwIDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw2IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwIDEtLjA1NC4wMTYuMTI3LjEyNyAwIDAgMS0uMDkxLS4wNDZjLS4wMjMtLjAyOC0uMDMtLjA1OC0uMDI0LS4wOThsLjUzNi0zLjExMi4wNjMtLjM2Mi0uMjU5LS4yNjEtMi4yMDItMi4yMjZhLjExNi4xMTYgMCAwIDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwIDEgLjA5NC0uMDhsMi45OC0uNDI1LjM4Ni0uMDU1LjE2Mi0uMzU2IDEuMjY3LTIuNzg2QzUuOTA1IDMuMDUgNS45MjcgMyA2IDNabTEwIDd2MWgtNXYtMWg1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3Rhck1pbnVzRW1wdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3Rhck1pbnVzRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblN0YXJNaW51c0ZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJhLjg2Ljg2IDAgMCAxIC43OTIuNTExbDEuMzMgMi45MjQgMy4xMjguNDQ2Yy43MS4xMDIgMS4wMDEuOTc2LjQ5NiAxLjQ4N0w5LjQzMyA5LjcwNGwuNTYzIDMuMjY4QS44NzcuODc3IDAgMCAxIDkuMTM2IDE0YS44NjIuODYyIDAgMCAxLS40MjktLjExNkw2IDEyLjM0MmwtMi43MDcgMS41NDJhLjg2Mi44NjIgMCAwIDEtLjQzLjExNi44NzcuODc3IDAgMCAxLS44NTktMS4wMjdsLjU2My0zLjI2OUwuMjU0IDcuMzY4Qy0uMjUgNi44NTcuMDQgNS45ODMuNzUgNS44OGwzLjEyOC0uNDQ2IDEuMzMtMi45MjNBLjg2Ljg2IDAgMCAxIDYgMlptMTAgOHYxaC01di0xaDVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyTWludXNGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3RhdHMgPSBmdW5jdGlvbiBFdWlJY29uU3RhdHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxNHYtNGgxdjRoNVY1aDF2OWExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXYtMmgxdjJoNlptNC44NTMtMTAuMTQ2LTIuOTk5IDNhMS41IDEuNSAwIDAgMS0yLjUzOCAxLjU2OGwtMi43MTQuOTA0TDQgOS41MjdhMS41IDEuNSAwIDEgMS0uMzE2LS45NDhMNyA3LjQ3M2ExLjUgMS41IDAgMCAxIDIuMTQ2LTEuMzI3bDMtM2ExLjUgMS41IDAgMSAxIC43MDcuNzA3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhdHM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3RvcCA9IGZ1bmN0aW9uIEV1aUljb25TdG9wKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQgMmg4YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJabTAgMWExIDEgMCAwIDAtMSAxdjhhMSAxIDAgMCAwIDEgMWg4YTEgMSAwIDAgMCAxLTFWNGExIDEgMCAwIDAtMS0xSDRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdG9wOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0b3BGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uU3RvcEZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiAxMixcbiAgICBoZWlnaHQ6IDEyLFxuICAgIHg6IDIsXG4gICAgeTogMixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgcng6IDJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdG9wRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN0b3BTbGFzaCA9IGZ1bmN0aW9uIEV1aUljb25TdG9wU2xhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4yNTkgMy4wMzRBMS4wMDEgMS4wMDEgMCAwIDAgMTIgM0g0YTEgMSAwIDAgMC0xIDF2OGMwIC4wOS4wMTIuMTc2LjAzNC4yNTlsOS4yMjUtOS4yMjVabS43MDcuNzA3LTkuMjI1IDkuMjI1Yy4wODMuMDIyLjE3LjAzNC4yNTkuMDM0aDhhMSAxIDAgMCAwIDEtMVY0YzAtLjA5LS4wMTItLjE3Ni0uMDM0LS4yNTlaTTQgMmg4YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdG9wU2xhc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3RvcmFnZSA9IGZ1bmN0aW9uIEV1aUljb25TdG9yYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAyKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMiA2YTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xaDEyYTEgMSAwIDAgMSAxIDF2M2ExIDEgMCAwIDEtMSAxSDJabTEzIDJ2M2ExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVY4YTEgMSAwIDAgMSAxLTFoMTJhMSAxIDAgMCAxIDEgMVptMS0zVjJhMiAyIDAgMCAwLTItMkgyYTIgMiAwIDAgMC0yIDJ2M2MwIC42MDEuMjcxIDEuMTMzLjY5IDEuNUMuMjcxIDYuODY3IDAgNy4zOTkgMCA4djNhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjhjMC0uNjAxLS4yNzEtMS4xMzMtLjY4OS0xLjUuNDE4LS4zNjcuNjg5LS44OTkuNjg5LTEuNVpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcImNpcmNsZVwiLCB7XG4gICAgY3g6IDQuNSxcbiAgICBjeTogOS41LFxuICAgIHI6IDEuNVxuICB9KSwgX19fRW1vdGlvbkpTWChcImNpcmNsZVwiLCB7XG4gICAgY3g6IDQuNSxcbiAgICBjeTogMy41LFxuICAgIHI6IDEuNVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDhoMXYzaC0xek0xMCA4aDF2M2gtMXpNMTIgMmgxdjNoLTF6TTEwIDJoMXYzaC0xelwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0b3JhZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3RyaW5nID0gZnVuY3Rpb24gRXVpSWNvblN0cmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk05LjI5NyAzIDguOTMgNS4xMDJoMS4zNTFsLS4zMiAxLjgyOEg4LjYwOWwtLjY1NiAzLjg4M2MtLjAzNi4yNjUtLjAyLjQ2Ni4wNS42MDEuMDcxLjEzNS4yNDcuMjA4LjUyOC4yMTkuMTEuMDA1LjMzNC0uMDA4LjY3Mi0uMDRMOS4wMTYgMTMuNWE0LjE2IDQuMTYgMCAwIDEtMS4zODMuMTk1Yy0uNzk3LS4wMS0xLjM5My0uMjQ0LTEuNzktLjcwMy0uMzk1LS40NTgtLjU1Ny0xLjA4LS40ODQtMS44NjdsLjY4OC00LjE5NUg1bC4zMTMtMS44MjhoMS4wNDZMNi43MjcgM2gyLjU3elwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RyaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN1Ym1vZHVsZSA9IGZ1bmN0aW9uIEV1aUljb25TdWJtb2R1bGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAySDF2MTJoM1Y3YTEgMSAwIDAgMSAxLTFoNWExIDEgMCAwIDEgMSAxdjFoNFY0SDdjLS42MjEgMC0xLS4zNzktMS0xVjJabTEwIDZ2NmExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMVYyYTEgMSAwIDAgMSAxLTFoNS4yNWEuNzUuNzUgMCAwIDEgLjc1Ljc1bC0uMDA0LjIwNkM2Ljk5IDIuMzE3IDYuOTc0IDMgNyAzaDhhMSAxIDAgMCAxIDEgMXY0Wm0tMSAxaC00YTEgMSAwIDAgMS0xLTFWN0g1djdoMTBWOVpNMiA0LjVhLjUuNSAwIDAgMSAuNS0uNWgyYS41LjUgMCAwIDEgMCAxaC0yYS41LjUgMCAwIDEtLjUtLjVaTTYuNSA5YS41LjUgMCAwIDAgMCAxaDJhLjUuNSAwIDAgMCAwLTFoLTJaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3VibW9kdWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblN1biA9IGZ1bmN0aW9uIEV1aUljb25TdW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA4YTQgNCAwIDEgMS04IDAgNCA0IDAgMCAxIDggMFpNNy4yNS43NWEuNzUuNzUgMCAwIDEgMS41IDB2MS41YS43NS43NSAwIDEgMS0xLjUgMFYuNzVabTAgMTNhLjc1Ljc1IDAgMCAxIDEuNSAwdjEuNWEuNzUuNzUgMCAwIDEtMS41IDB2LTEuNVptNS4zNDYtMTEuNDA3YS43NS43NSAwIDAgMSAxLjA2IDEuMDZsLTEuMDYgMS4wNjFhLjc1Ljc1IDAgMCAxLTEuMDYtMS4wNmwxLjA2LTEuMDZabS05LjE5MiA5LjE5M2EuNzUuNzUgMCAxIDEgMS4wNiAxLjA2bC0xLjA2IDEuMDZhLjc1Ljc1IDAgMCAxLTEuMDYtMS4wNmwxLjA2LTEuMDZaTS43NSA4Ljc1YS43NS43NSAwIDAgMSAwLTEuNWgxLjVhLjc1Ljc1IDAgMSAxIDAgMS41SC43NVptMTMgMGEuNzUuNzUgMCAwIDEgMC0xLjVoMS41YS43NS43NSAwIDAgMSAwIDEuNWgtMS41Wk0yLjM0MyAzLjQwNGEuNzUuNzUgMCAxIDEgMS4wNi0xLjA2bDEuMDYxIDEuMDZhLjc1Ljc1IDAgMCAxLTEuMDYgMS4wNmwtMS4wNi0xLjA2Wm05LjE5MyA5LjE5MmEuNzUuNzUgMCAwIDEgMS4wNi0xLjA2bDEuMDYgMS4wNmEuNzUuNzUgMCAwIDEtMS4wNiAxLjA2bC0xLjA2LTEuMDZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uU3dhdGNoSW5wdXQgPSBmdW5jdGlvbiBFdWlJY29uU3dhdGNoSW5wdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJyZWN0XCIsIHtcbiAgICB3aWR0aDogMTIsXG4gICAgaGVpZ2h0OiAxMixcbiAgICB4OiAyLFxuICAgIHk6IDIsXG4gICAgcng6IDNcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJyZWN0XCIsIHtcbiAgICB3aWR0aDogMTEsXG4gICAgaGVpZ2h0OiAxMSxcbiAgICB4OiAyLjUsXG4gICAgeTogMi41LFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2F0Y2hJbnB1dF9fc3Ryb2tlXCIsXG4gICAgcng6IDJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Td2F0Y2hJbnB1dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25TeW1saW5rID0gZnVuY3Rpb24gRXVpSWNvblN5bWxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAuOCAwSDJhMSAxIDAgMCAwLTEgMXY4bDEtMVYxaDh2My41YS41LjUgMCAwIDAgLjUuNUgxNHYxMEgydi0xYTMuNSAzLjUgMCAwIDEgMy41LTMuNUg4VjEzbDMtMy0zLTN2Mi41SDUuNUE0LjUgNC41IDAgMCAwIDEgMTR2MWExIDEgMCAwIDAgMSAxaDEyYTEgMSAwIDAgMCAxLTFWNC40MjljMC0uMjU2LS4wOTgtLjUwMy0uMjc0LS42ODlsLTMuMi0zLjQyOEExLjAwMiAxLjAwMiAwIDAgMCAxMC44IDBaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3ltbGluazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UYWJsZU9mQ29udGVudHMgPSBmdW5jdGlvbiBFdWlJY29uVGFibGVPZkNvbnRlbnRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSAxdjE0aDE0VjFIMXpNMCAwaDE2djE2SDBWMHptOSAxdjE0aDFWMUg5ek0zIDMuNWg0di0xSDN2MXptMCAzaDR2LTFIM3Yxem0wIDNoNHYtMUgzdjF6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWJsZU9mQ29udGVudHM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVGFibGVEZW5zaXR5Q29tcGFjdCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnYxWm0tMSAwVjJhMSAxIDAgMCAwLTEtMUgyYTEgMSAwIDAgMC0xIDF2MWgxNFptMCAxSDF2MTBhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xVjRaTTQuNDk2IDdhLjUuNSAwIDAgMSAwIDFIMi40OTVhLjUuNSAwIDAgMSAwLTFoMi4wMDFabTUuMjE4IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDggNiA3Ljc3NiA2IDcuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOFpNNC40OTYgNWEuNS41IDAgMCAxIDAgMUgyLjQ5NWEuNS41IDAgMCAxIDAtMWgyLjAwMVptNS4yMTggMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggNiA2IDUuNzc2IDYgNS41cy4xMjgtLjUuMjg2LS41aDMuNDI4Wk00LjQ5NiA5YS41LjUgMCAwIDEgMCAxSDIuNDk1YS41LjUgMCAwIDEgMC0xaDIuMDAxWm01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxMCA2IDkuNzc2IDYgOS41cy4xMjgtLjUuMjg2LS41aDMuNDI4Wm0tNS4yMTggMmEuNS41IDAgMCAxIDAgMUgyLjQ5NWEuNS41IDAgMCAxIDAtMWgyLjAwMVptNS4yMTggMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTIgNiAxMS43NzYgNiAxMS41cy4xMjgtLjUuMjg2LS41aDMuNDI4Wm0tNS4yMTggMmEuNS41IDAgMCAxIDAgMUgyLjQ5NWEuNS41IDAgMCAxIDAtMWgyLjAwMVptOS02YS41LjUgMCAwIDEgMCAxaC0yLjAwMWEuNS41IDAgMCAxIDAtMWgyLjAwMVptMC0yYS41LjUgMCAwIDEgMCAxaC0yLjAwMWEuNS41IDAgMCAxIDAtMWgyLjAwMVptMCA0YS41LjUgMCAwIDEgMCAxaC0yLjAwMWEuNS41IDAgMCAxIDAtMWgyLjAwMVptMCAyYS41LjUgMCAwIDEgMCAxaC0yLjAwMWEuNS41IDAgMCAxIDAtMWgyLjAwMVptMCAyYS41LjUgMCAwIDEgMCAxaC0yLjAwMWEuNS41IDAgMCAxIDAtMWgyLjAwMVptLTMuNzgyIDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDE0IDYgMTMuNzc2IDYgMTMuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRhYmxlRGVuc2l0eUNvbXBhY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVGFibGVEZW5zaXR5RXhwYW5kZWQgPSBmdW5jdGlvbiBFdWlJY29uVGFibGVEZW5zaXR5RXhwYW5kZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzdjExYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjFabS0xIDBWMmExIDEgMCAwIDAtMS0xSDJhMSAxIDAgMCAwLTEgMXYxaDE0Wm0wIDFIMXYxMGExIDEgMCAwIDAgMSAxaDEyYTEgMSAwIDAgMCAxLTFWNFpNNC41IDdhLjUuNSAwIDAgMSAwIDFIMi40OTZhLjUuNSAwIDEgMSAwLTFINC41Wm05IDBhLjUuNSAwIDEgMSAwIDFoLTZhLjUuNSAwIDAgMSAwLTFoNlptLTkgNGEuNS41IDAgMSAxIDAgMUgyLjQ5NmEuNS41IDAgMSAxIDAtMUg0LjVabTkgMGEuNS41IDAgMSAxIDAgMWgtNmEuNS41IDAgMSAxIDAtMWg2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVEZW5zaXR5RXhwYW5kZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVGFibGVEZW5zaXR5Tm9ybWFsID0gZnVuY3Rpb24gRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDN2MTFhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MVptLTEgMFYyYTEgMSAwIDAgMC0xLTFIMmExIDEgMCAwIDAtMSAxdjFoMTRabTAgMUgxdjEwYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMVY0Wk00LjUgNmEuNS41IDAgMCAxIDAgMUgyLjQ5NmEuNS41IDAgMSAxIDAtMUg0LjVabTUuMjE0IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDcgNiA2Ljc3NiA2IDYuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOFpNNC41IDlhLjUuNSAwIDAgMSAwIDFIMi40OTZhLjUuNSAwIDEgMSAwLTFINC41Wm01LjIxNCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxMCA2IDkuNzc2IDYgOS41cy4xMjgtLjUuMjg2LS41aDMuNDI4Wk00LjUgMTJhLjUuNSAwIDEgMSAwIDFIMi40OTZhLjUuNSAwIDEgMSAwLTFINC41Wm05LTZhLjUuNSAwIDEgMSAwIDFoLTIuMDA0YS41LjUgMCAwIDEgMC0xSDEzLjVabTAgM2EuNS41IDAgMSAxIDAgMWgtMi4wMDRhLjUuNSAwIDAgMSAwLTFIMTMuNVptMCAzYS41LjUgMCAxIDEgMCAxaC0yLjAwNGEuNS41IDAgMCAxIDAtMUgxMy41Wm0tMy43ODYgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTMgNiAxMi43NzYgNiAxMi41cy4xMjgtLjUuMjg2LS41aDMuNDI4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVEZW5zaXR5Tm9ybWFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRhZyA9IGZ1bmN0aW9uIEV1aUljb25UYWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjI1NCAxNC45Ny45OTYgOS43MTJjLS4zMTUtLjMxNi0uMzk3LS40NjMtLjQ1LS42NGEuOTA5LjkwOSAwIDAgMSAwLS41MzRjLjA1My0uMTc3LjEzNS0uMzI0LjQ1LS42NEw3LjQzIDEuNDY2Yy4xODItLjE4My4yNTItLjI0LjMzOC0uMjkzYS44Ny44NyAwIDAgMSAuMjczLS4xMTNjLjA5OS0uMDIzLjE4OC0uMDMyLjQ0Ni0uMDMyaDUuMTczYy40NDUgMCAuNjA3LjA0Ni43Ny4xMzMuMTYyLjA4Ny4yOS4yMTQuMzc3LjM3Ny4wODguMTYyLjEzNC4zMjQuMTM2Ljc2OWwuMDE1IDUuMTVjMCAuMjU5LS4wMDkuMzQ4LS4wMzIuNDQ4YS44Ny44NyAwIDAgMS0uMTEyLjI3M2MtLjA1NC4wODctLjExMS4xNTctLjI5NC4zNEw4LjA2NyAxNC45N2MtLjMxNS4zMTUtLjQ2Mi4zOTYtLjYzOS40NWEuOTA5LjkwOSAwIDAgMS0uNTM1IDBjLS4xNzYtLjA1NC0uMzI0LS4xMzUtLjYzOS0uNDVabTEuMTA2LS43MDcgNi40NTMtNi40NTNjLjA5Mi0uMDkyLjEyNi0uMTI4LjE0MS0uMTQ3LjAwMy0uMDI1LjAwNC0uMDc0LjAwNC0uMjA0bC0uMDE1LTUuMTVjMC0uMTgxLS4wMDMtLjI0NS0uMDA5LS4yNzVhMi4yNDcgMi4yNDcgMCAwIDAtLjI3NC0uMDA3SDguNDg3Yy0uMTMgMC0uMTc5LjAwMS0uMjAzLjAwNC0uMDIuMDE1LS4wNTUuMDUtLjE0Ny4xNDFMMS43MDMgOC42MDZhMi4yNDggMi4yNDggMCAwIDAtLjE4OS4yYy4wMTcuMDI0LjA2MS4wNy4xOS4xOThsNS4yNTcgNS4yNTljLjEyOC4xMjguMTc1LjE3MS4yLjE4OC4wMjQtLjAxNy4wNzEtLjA2LjItLjE4OFptNC45NzItMTAuNjA3YTIgMiAwIDEgMS0yLjgyOCAyLjgyOCAyIDIgMCAwIDEgMi44MjgtMi44MjhabS0uNzA3LjcwN2ExIDEgMCAxIDAtMS40MTQgMS40MTQgMSAxIDAgMCAwIDEuNDE0LTEuNDE0Wk02LjgwNyAxMS4yOCA0LjY4NiA5LjE1OWEuNS41IDAgMSAxIC43MDctLjcwN2wyLjEyMSAyLjEyYS41LjUgMCAxIDEtLjcwNy43MDhabTEuNDE0LTEuNDE0LTIuMTItMi4xMjJhLjUuNSAwIDEgMSAuNzA2LS43MDdMOC45MjggOS4xNmEuNS41IDAgMSAxLS43MDcuNzA3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRlYXIgPSBmdW5jdGlvbiBFdWlJY29uVGVhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNTUzIDEuNzc2YS41LjUgMCAwIDEgLjg5NCAwbDQgOGEuNS41IDAgMCAxIC4wNTMuMjM1Yy0uMDA0LjE1LS4wMjYuMzk2LS4wODQuNzA1YTUuNTM4IDUuNTM4IDAgMCAxLS41MDUgMS41MTJDMTEuMTg5IDEzLjYzOCA5LjkwNiAxNC41IDggMTQuNWMtMS45MDYgMC0zLjE5LS44NjItMy45MS0yLjI3MmE1LjUzOCA1LjUzOCAwIDAgMS0uNTA2LTEuNTEyIDQuNjcyIDQuNjcyIDAgMCAxLS4wODQtLjcwNS41LjUgMCAwIDEgLjA1My0uMjM1bDQtOFptLTMuMDQ2IDguMzI5Yy4wMDkuMTA2LjAyNy4yNTMuMDYuNDI5LjA3OS40MjQuMjEzLjg0OC40MTMgMS4yMzhDNS41MzcgMTIuODYyIDYuNDg3IDEzLjUgOCAxMy41YzEuNTEzIDAgMi40NjMtLjYzOCAzLjAyLTEuNzI4LjItLjM5LjMzNC0uODE0LjQxMy0xLjIzOC4wMzMtLjE3Ni4wNTEtLjMyMy4wNi0uNDNMOCAzLjExOWwtMy40OTMgNi45ODdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UZWFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRlbXBlcmF0dXJlID0gZnVuY3Rpb24gRXVpSWNvblRlbXBlcmF0dXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41IDE1YTMuNSAzLjUgMCAwIDEtMS43NS02LjUzMkw3IDguMzI0VjIuNUExLjQ5NiAxLjQ5NiAwIDAgMSA5LjkwOCAySDguNXYxSDEwdjFIOC41djFIMTB2MUg4LjV2MUgxMHYxLjMyNGwuMjUuMTQ0QTMuNSAzLjUgMCAwIDEgOC41IDE1TTExIDcuNzU4VjIuNWEyLjUgMi41IDAgMSAwLTUgMHY1LjI1OGE0LjUgNC41IDAgMSAwIDUgMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41IDlhMi41IDIuNSAwIDEgMSAwIDUgMi41IDIuNSAwIDAgMSAwLTVcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRlbXBlcmF0dXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRpbWVSZWZyZXNoID0gZnVuY3Rpb24gRXVpSWNvblRpbWVSZWZyZXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyLjgwOSA4LjgwN2E0LjUgNC41IDAgMCAxLTUuNTcyLTUuNzVBNSA1IDAgMCAwIDMuMDQgOS4zMWEuNS41IDAgMCAxLS45NjYuMjU5IDYgNiAwIDAgMSA1LjY3Mi03LjU1MyA0LjUgNC41IDAgMSAxIDYuMTE3IDYuMzEzIDYuMDAyIDYuMDAyIDAgMCAxLTcuODAzIDUuNDA5LjUuNSAwIDEgMSAuMzAzLS45NTQgNS4wMDEgNS4wMDEgMCAwIDAgNi40NDUtMy45NzlaTTExLjg1OSA1SDEzLjVhLjUuNSAwIDAgMCAwLTFIMTJWMS41YS41LjUgMCAwIDAtMSAwdjNhLjUuNSAwIDAgMCAuNS41aC4zNlpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm0zLjc1NyAxNS44NDgtLjc3Ni0yLjg5N2ExLjUgMS41IDAgMCAxIDEuMDYtMS44MzhsMi44OTgtLjc3NmEuNS41IDAgMSAxIC4yNTkuOTY2bC0yLjg5OC43NzZhLjUuNSAwIDAgMC0uMzUzLjYxM2wuNzc2IDIuODk4YS41LjUgMCAwIDEtLjk2Ni4yNThaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lUmVmcmVzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UaW1lbGluZSA9IGZ1bmN0aW9uIEV1aUljb25UaW1lbGluZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03IDQuNWEuNS41IDAgMCAwIDEgMFY0aDFhMSAxIDAgMCAwIDEtMVYxYTEgMSAwIDAgMC0xLTFINmExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMWgxdi41ek05IDFINnYyaDNWMXpNMiA3LjVhLjUuNSAwIDEgMSAxIDAgLjUuNSAwIDAgMS0xIDB6TTIuNSA5YTEuNSAxLjUgMCAwIDEtMS40MTUtMUguNWEuNS41IDAgMCAxIDAtMWguNTg1YTEuNSAxLjUgMCAwIDEgMi44MyAwaDIuMTdhMS41IDEuNSAwIDAgMSAyLjgzIDBoMi4xN2ExLjUgMS41IDAgMCAxIDIuODMgMGguNTg1YS41LjUgMCAwIDEgMCAxaC0uNTg1YTEuNSAxLjUgMCAwIDEtMi44MyAwaC0yLjE3YTEuNSAxLjUgMCAwIDEtMi44MyAwaC0yLjE3QTEuNSAxLjUgMCAwIDEgMi41IDl6TTEzIDcuNWEuNS41IDAgMSAwLTEgMCAuNS41IDAgMCAwIDEgMHptLTUgMGEuNS41IDAgMSAwLTEgMCAuNS41IDAgMCAwIDEgMHpNMi41IDEwYS41LjUgMCAwIDAtLjUuNXYuNUgxYTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxaDNhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xSDN2LS41YS41LjUgMCAwIDAtLjUtLjV6TTQgMTR2LTJIMXYyaDN6bTgtMy41YS41LjUgMCAwIDEgMSAwdi41aDFhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTNhMSAxIDAgMCAxLTEtMXYtMmExIDEgMCAwIDEgMS0xaDF2LS41em0yIDIuNXYxaC0zdi0yaDN2MXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRpbWVsaW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRpbWVsaW5lV2l0aEFycm93ID0gZnVuY3Rpb24gRXVpSWNvblRpbWVsaW5lV2l0aEFycm93KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuODU0IDQuODU0QS41LjUgMCAwIDEgNyA0LjVWNEg2YTEgMSAwIDAgMS0xLTFWMWExIDEgMCAwIDEgMS0xaDNhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIOHYuNWEuNS41IDAgMCAxLS4xNDYuMzU0Wk02IDNWMWgzdjJINlpNMi4xNDYgOS4xNDZBLjUuNSAwIDAgMCAyIDkuNXYuNUgxYTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxaDNhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xSDN2LS41YS41LjUgMCAwIDAtLjg1NC0uMzU0Wk00IDEzdi0ySDF2MmgzWk0xMS41IDE1YTQuNSA0LjUgMCAxIDAgMC05IDQuNSA0LjUgMCAwIDAgMCA5Wm0uMzU0LTYuODU0IDIgMmEuNS41IDAgMCAxIDAgLjcwOGwtMiAyYS41LjUgMCAwIDEtLjcwNy0uNzA4TDEyLjI5MyAxMUg5LjVhLjUuNSAwIDAgMSAwLTFoMi43OTNsLTEuMTQ2LTEuMTQ2YS41LjUgMCAxIDEgLjcwNy0uNzA4Wk04LjMzNyA2SDMuOTE1YTEuNSAxLjUgMCAwIDAtMi44MyAwSC41YS41LjUgMCAwIDAgMCAxaC41ODVhMS41IDEuNSAwIDAgMCAyLjgzIDBoMy4zNDJjLjMxNC0uMzguNjc3LS43MTYgMS4wOC0xWk0yIDYuNWEuNS41IDAgMSAxIDEgMCAuNS41IDAgMCAxLTEgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRpbWVsaW5lV2l0aEFycm93OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRpbWVzbGlkZXIgPSBmdW5jdGlvbiBFdWlJY29uVGltZXNsaWRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjkyMyA4QTUuOTMgNS45MyAwIDAgMCA4IDIuMDc3IDUuOTMgNS45MyAwIDAgMCAyLjA3NyA4YTUuOTMgNS45MyAwIDAgMCA2LjI5NiA1LjkxMmMuMzI4LS4wMjEuNjI1LjIyNy42MjUuNTU2YS41MDQuNTA0IDAgMCAxLS40NTguNTExIDcgNyAwIDEgMSA2LjQzLTYuMzMzYy0uMDM2LjM5OC0uNDg3LjU4LS44MTcuMzU0YS41OTUuNTk1IDAgMCAxLS4yNDgtLjU0Yy4wMTItLjE1Mi4wMTgtLjMwNS4wMTgtLjQ2em0xLjY4NCAzLjItNC4zMi0zLjA1NWMtLjU2LS4zOTYtMS4yODcuMDU5LTEuMjg3Ljh2Ni4xMDhjMCAuNzQuNzI2IDEuMTk2IDEuMjg3LjhsNC4zMi0zLjA1NWMuNTI0LS4zNy41MjQtMS4yMjggMC0xLjU5OHpNNy40NjIgNy40NjJINC43NjlhLjUzOS41MzkgMCAwIDAgMCAxLjA3Nkg4QS41MzkuNTM5IDAgMCAwIDguNTM4IDhWMy42OTJhLjUzOS41MzkgMCAwIDAtMS4wNzYgMHYzLjc3elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRpbWVzbGlkZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5BbGlhcyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkFsaWFzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuMDc1IDYuOTUzYS41LjUgMCAxIDEtLjcwNy43MDcgMS41IDEuNSAwIDAgMC0yLjEyMiAwTDQuMTI1IDkuNzgyYTEuNSAxLjUgMCAxIDAgMi4xMjEgMi4xMjFsMS4xNDUtMS4xNDRhLjUuNSAwIDAgMSAuNzA3LjcwN0w2Ljk1MyAxMi42MWEyLjUgMi41IDAgMSAxLTMuNTM1LTMuNTM1bDIuMTIxLTIuMTIyYTIuNSAyLjUgMCAwIDEgMy41MzYgMFptMy41MzUtMy41MzVhMi41IDIuNSAwIDAgMSAwIDMuNTM1TDEwLjQ5IDkuMDc1YTIuNSAyLjUgMCAwIDEtMy41MzYgMCAuNS41IDAgMSAxIC43MDctLjcwOCAxLjUgMS41IDAgMCAwIDIuMTIyIDBsMi4xMjEtMi4xMmExLjUgMS41IDAgMSAwLTIuMTIxLTIuMTIyTDguNjM3IDUuMjY5YS41LjUgMCAxIDEtLjcwNy0uNzA3bDEuMTQ1LTEuMTQ0YTIuNSAyLjUgMCAwIDEgMy41MzUgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQWxpYXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5Bbm5vdGF0aW9uID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQW5ub3RhdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjE1IDMuMzkyYzIuNzk3IDAgNC41MjQgMS42NDQgNC41MTcgNC4yODkuMDA3IDEuODE2LS43MDggMi44OTMtMi4yMSAzLjAwNC0uOTA4LjA3Ni0xLjA4MS0uMjg3LTEuMTU3LS43MjVoLS4wNDFjLS4xNjMuNDItLjk2NC43MzItMS43NDQuNjgzLTEuMDUzLS4wNjUtMi4wODItLjg0Mi0yLjA5LTIuNTcyLjAwOC0xLjcyIDEuMDcxLTIuNDQxIDEuOTU5LTIuNTg2LjgwNC0uMTM1IDEuNTk4LjE1OCAxLjcyMy40NjJoLjA1MXYtLjM4NmgxLjE5NXYzLjQ1MmMuMDA3LjMuMTI4LjQyNS4zMDQuNDI1LjQgMCAuNjc3LS41ODMuNjczLTEuODYxLjAwNC0yLjM3Ni0xLjcwNS0yLjkxNC0zLjE4Ny0yLjkxNC0yLjM0IDAtMy40MTUgMS41MjItMy40MjIgMy4zODcuMDA3IDIuMTI3IDEuMjIgMy4yNzcgMy40MzMgMy4yNzcuODA4IDAgMS41OTgtLjE3NiAyLjAwNi0uMzQ5bC4zOTMgMS4xMjJjLS40MzUuMjctMS40MTkuNTA4LTIuNDkzLjUwOC0yLjk4IDAtNC43MjMtMS42Ni00LjcyNy00LjQ5Ni4wMDQtMi44MDQgMS43NDgtNC43MiA0LjgxNy00LjcyWk03Ljk2NCA2Ljc5Yy0uNzYgMC0xLjE4NS40NTktMS4xODggMS4yNC4wMDMuNjgzLjMgMS4zMzIgMS4yMDIgMS4zMzIuODIxIDAgMS4wOTQtLjQ3MyAxLjA3Ny0xLjM0My0uMDA0LS43MTgtLjIwNC0xLjIzLTEuMDkxLTEuMjNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkFubm90YXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5BcnJheSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkFycmF5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuMzkyIDEyVjRoMi43MTN2MS4xNGgtMS4yMXY1LjcyaDEuMjFWMTJINC4zOTJabTcuNjkyLTh2OEg5LjM3di0xLjE0aDEuMjA5VjUuMTRIOS4zN1Y0aDIuNzE0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5BcnJheTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkJpbmFyeSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkJpbmFyeShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMiA0SDR2OGg4VjRaTTguNSA1LjVoLTN2NWgzdi01WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5CaW5hcnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5Cb29sZWFuID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQm9vbGVhbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDEzQTUgNSAwIDEgMSA4IDNhNSA1IDAgMCAxIDAgMTBabS0yLjgyOC0yLjE3MmE0IDQgMCAwIDEgNS42NTYtNS42NTZjLjAwNC4wMTMtNS42NDUgNS42NzQtNS42NTYgNS42NTZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkJvb2xlYW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5DbGFzcyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkNsYXNzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjMzMyA3LjAyN0g5LjM3NWMtLjA1Ni0uNzA4LS40OC0xLjE4Ny0xLjIyMi0xLjE4Ny0uOTcyIDAtMS41LjgwNi0xLjUgMi4xNiAwIDEuNDMuNTQ1IDIuMTYgMS40ODYgMi4xNi43MDggMCAxLjEzOS0uNDE1IDEuMjM2LTEuMDhsMS45NTguMDE1QzExLjIzNiAxMC40MTggMTAuMTgxIDEyIDguMDk3IDEyYy0xLjk1OCAwLTMuNDMtMS40MS0zLjQzLTQgMC0yLjYgMS41MTQtNCAzLjQzLTQgMS43OTIgMCAzLjA4NCAxLjA5NSAzLjIzNiAzLjAyN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQ2xhc3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zIDRhMSAxIDAgMCAxIDEtMWg4YTEgMSAwIDAgMSAxIDF2NS45OTZhMSAxIDAgMCAxLTEgMWgtMS42NjFMNy40IDEzLjJBLjI1LjI1IDAgMCAxIDcgMTN2LTIuMDA0SDRhMSAxIDAgMCAxLTEtMVY0em0xLjUgMWEuNS41IDAgMCAxIC41LS41aDZhLjUuNSAwIDAgMSAuNS41djRhLjUuNSAwIDAgMS0uNS41aC0uOUw4IDExVjkuNUg1YS41LjUgMCAwIDEtLjUtLjVWNXpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02Ljc1IDZhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yem0yLjUgMGExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkNvbXBsZXRpb25TdWdnZXN0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5Db25zdGFudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkNvbnN0YW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwibTkuNDE0IDMuNzU3IDIuODI5IDIuODI5YTIgMiAwIDAgMSAwIDIuODI4bC0yLjgyOSAyLjgyOWEyIDIgMCAwIDEtMi44MjggMEwzLjc1NyA5LjQxNGEyIDIgMCAwIDEgMC0yLjgyOGwyLjgyOS0yLjgyOWEyIDIgMCAwIDEgMi44MjggMFptLTEuNzQ3IDIuOTFhMSAxIDAgMCAwLTEgMXYuNjY2YTEgMSAwIDAgMCAxIDFoLjY2NmExIDEgMCAwIDAgMS0xdi0uNjY2YTEgMSAwIDAgMC0xLTFoLS42NjZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkNvbnN0YW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuRGF0ZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkRhdGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgMTEuNTY3QzEzIDEyLjM2IDEyLjM2IDEzIDExLjU2NyAxM0g0LjQzM0MzLjY0IDEzIDMgMTIuMzYgMyAxMS41NjdWNC40MzNDMyAzLjY0IDMuNjQgMyA0LjQzMyAzSDZ2LS40OTVhLjUxLjUxIDAgMCAxIC40MTItLjQ5N0w2LjUgMmMuMjc2IDAgLjUuMjE0LjUuNTA1VjNoMnYtLjQ5NWEuNTEuNTEgMCAwIDEgLjQxMi0uNDk3TDkuNSAyYy4yNzYgMCAuNS4yMTQuNS41MDVWM2gxLjU2N0MxMi4zNiAzIDEzIDMuNjQgMTMgNC40MzN2Ny4xMzRaTTQgNnY1LjMzYzAgLjM3LjMuNjcuNjcuNjdoNi42NmMuMzcgMCAuNjctLjMuNjctLjY3VjZINFptMS41IDRjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw2IDEwLjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMNS41IDExYS41MDUuNTA1IDAgMCAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDUuNSAxMFpNOCAxMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEybC4wMDguMDg4YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDggMTFhLjUwNS41MDUgMCAwIDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMOCAxMFptMi41IDBjLjI0NSAwIC40NS4xODMuNDkyLjQxMkwxMSAxMC41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDEwLjUgMTFhLjUwNS41MDUgMCAwIDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMMTAuNSAxMFptLTUtMS41Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMNiA5YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDUuNSA5LjVBLjUwNS41MDUgMCAwIDEgNSA5YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDUuNSA4LjVabTIuNSAwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMOC41IDljMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMOCA5LjVhLjUwNS41MDUgMCAwIDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMOCA4LjVabTIuNSAwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMMTEgOWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5MkwxMC41IDkuNUEuNTA1LjUwNSAwIDAgMSAxMCA5YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDEwLjUgOC41Wk01LjUgN2MuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDYgNy41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDUuNSA4YS41MDUuNTA1IDAgMCAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDUuNSA3Wk04IDdjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw4LjUgNy41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDggOGEuNTA1LjUwNSAwIDAgMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw4IDdabTIuNSAwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMMTEgNy41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDEwLjUgOGEuNTA1LjUwNSAwIDAgMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5MkwxMC41IDdaTTQgNWg4di0uMzNjMC0uMzctLjMtLjY3LS42Ny0uNjdINC42N0M0LjMgNCA0IDQuMyA0IDQuNjdWNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRGF0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkRpbWVuc2lvbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkRpbWVuc2lvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDEwLjVhLjUuNSAwIDAgMC0xIDB2MWEuNS41IDAgMCAwIC41LjVoMWEuNS41IDAgMCAwIDAtMUgxMnYtLjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyAxMmgzLjA3OGMuNzI4IDAgMS4zNy0uMTI3IDEuOTI0LS4zODNhMy41IDMuNSAwIDEgMCAyLjA1My0zLjMwNmMuMDA1LS4xMDEuMDA4LS4yMDUuMDA4LS4zMTEgMC0uODMzLS4xNjUtMS41NDgtLjQ5My0yLjE0NUEzLjMwOSAzLjMwOSAwIDAgMCA4LjE4IDQuNDhDNy41OCA0LjE2IDYuODcgNCA2LjA0NyA0SDN2OFptNi43ODctMi4zMjFBMi41IDIuNSAwIDAgMCAxMS41IDE0YTIuNSAyLjUgMCAxIDAtMS43MTMtNC4zMjFaTTYgMTAuMTU2aC0uODI4VjUuODQ0aC43NjZjLjQxNiAwIC43NjguMDY0IDEuMDU0LjE5MS4yOS4xMjguNTA4LjM0OC42NTYuNjYuMTUxLjMxMy4yMjcuNzQ4LjIyNyAxLjMwNSAwIC41NTctLjA3NC45OTItLjIyMyAxLjMwNWExLjI5IDEuMjkgMCAwIDEtLjY0LjY2Yy0uMjc5LjEyNy0uNjE2LjE5MS0xLjAxMi4xOTFaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkRpbWVuc2lvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkVsZW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5FbGVtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwibTcuMzkgOS43MzYtMS4wNDEuOTRMMy4yNTggOGwzLjA5LTIuNjc3IDEuMDQxLjk0LTIuMDMyIDEuNzIydi4wM2wyLjAzMiAxLjcyMVptMi43NzcuOTQtMS4wNC0uOTQgMi4wMzItMS43MjF2LS4wM0w5LjEyNiA2LjI2NGwxLjA0LS45NEwxMy4yNTkgOGwtMy4wOTEgMi42NzdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkVsZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5FbnVtID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRW51bShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjIxMSAxMlY0aDUuNTc4djEuNTdINy4xNDV2MS42NDFoMy4zNTl2MS41NzRINy4xNDV2MS42NDVoMy42NDRWMTJ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkVudW07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5FbnVtTWVtYmVyID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRW51bU1lbWJlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjY4MiAxMlY5LjI0N2wxLjAyMy0uODYxYS41LjUgMCAwIDAtLjAwMy0uNzY4bC0xLjAyLS44NDRWNGg1LjU3OHYxLjU3SDkuNjE1djEuNjRoMy4zNnYxLjU3NWgtMy4zNnYxLjY0NWgzLjY0NVYxMkg3LjY4MlptLjc0My00LjEwM2EuMTM4LjEzOCAwIDAgMSAwIC4yMDZMNi4xNTggOS45N2EuMTMzLjEzMyAwIDAgMS0uMjE4LS4xMDN2LS45MzRIMi44NzNBLjEzMy4xMzMgMCAwIDEgMi43NCA4LjhWNy4yYzAtLjA3NC4wNi0uMTMzLjEzMy0uMTMzSDUuOTR2LS45MzRhLjEzMy4xMzMgMCAwIDEgLjIxOC0uMTAzbDIuMjY3IDEuODY3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5FbnVtTWVtYmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuRXZlbnQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5FdmVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS4yMjUgNS42NTZjMCAuNDIzLS4xMDYuNzktLjMxOCAxLjEwMi0uMjExLjMxMS0uNTEuNTctLjg5OC43NzVhNS40MzUgNS40MzUgMCAwIDEtMS4zOTIuNDg1Yy0uNTQuMTE3LTEuMTQuMTkzLTEuNzk4LjIyOWE2LjA0NyA2LjA0NyAwIDAgMC0uMDM1LjY3YzAgLjI1OC4wMi41MS4wNjIuNzU3LjA0LjI0Ny4xMTQuNDY0LjIyLjY1MnMuMjUuMzQuNDMyLjQ1OC40MTQuMTc2LjY5Ni4xNzZjLjIxMSAwIC40NjctLjA0NC43NjYtLjEzMi4zLS4wODguNjItLjI0NC45Ni0uNDY3LjEwNi0uMDcuMTkyLS4xMjkuMjU2LS4xNzZhLjM2NS4zNjUgMCAwIDEgLjIyLS4wN2MuMTE4IDAgLjE5Ny4wNjEuMjM4LjE4NWEuOTkuOTkgMCAwIDEgLjA2Mi4yNTUgNy4xIDcuMSAwIDAgMS0uNTczLjQ2NyA0LjkzIDQuOTMgMCAwIDEtLjc3NS40NjdjLS4yODguMTQxLS42LjI2MS0uOTM0LjM2MS0uMzM1LjEtLjY3OC4xNS0xLjAzLjE1LS41NDEgMC0uOTgyLS4wODgtMS4zMjItLjI2NGEyLjA3MiAyLjA3MiAwIDAgMS0uNzkzLS42ODggMi42MjYgMi42MjYgMCAwIDEtLjM4OC0uOTMzIDQuOTQ5IDQuOTQ5IDAgMCAxLS4xMDYtMS4wMDVjMC0uNjM0LjEwMy0xLjI1Ny4zMDktMS44NjguMjA1LS42MS40OTktMS4xNTcuODgtMS42MzguMzgzLS40ODIuODM4LS44NyAxLjM2Ni0xLjE2M0EzLjU2NyAzLjU2NyAwIDAgMSA5LjA5MyA0Yy41OTkgMCAxLjEwNC4xMjYgMS41MTUuMzc5LjQxMS4yNTIuNjE3LjY3OC42MTcgMS4yNzdabS0yLjQ2Ny0uOTUxYy0uMjIzIDAtLjQzNS4wOC0uNjM1LjIzOC0uMi4xNTgtLjM4MS4zNzMtLjU0Ni42NDMtLjE2NC4yNy0uMzA1LjU3OC0uNDIzLjkyNWE2LjQyIDYuNDIgMCAwIDAtLjI2NCAxLjEwMWMuNDctLjA0Ny44NjMtLjEzNSAxLjE4LS4yNjQuMzE4LS4xMy41Ny0uMjg1Ljc1OC0uNDY3LjE4OC0uMTgyLjMyMy0uMzg4LjQwNS0uNjE3LjA4My0uMjI5LjEyNC0uNDY3LjEyNC0uNzEzIDAtLjI3LS4wNTYtLjQ3OS0uMTY4LS42MjZhLjUxOS41MTkgMCAwIDAtLjQzMS0uMjJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkV2ZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuRXhjZXB0aW9uID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRXhjZXB0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy40NjEgNy4zMWgzLjA1NWEuNzQuNzQgMCAwIDEgLjY2IDEuMDc0bC0yLjE0MSA0LjIxMWEuNzQuNzQgMCAxIDEtMS4zMTktLjY3TDkuMzEgOC43OUg2LjI1NmEuNzQuNzQgMCAwIDEtLjY2LTEuMDc1bDIuMTktNC4zMWEuNzQuNzQgMCAwIDEgMS4zMTkuNjdMNy40NjEgNy4zMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRXhjZXB0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuRmllbGQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5GaWVsZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjI3IDEyVjRoNS40NnYxLjU3SDcuMjAzdjEuNjQxaDMuMTh2MS41NzRoLTMuMThWMTJ6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkZpZWxkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuRmlsZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkZpbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05Ljg2NyAyLjY2N0g0YS42NjcuNjY3IDAgMCAwLS42NjcuNjY2djkuMzM0YzAgLjM2OC4yOTkuNjY2LjY2Ny42NjZoOGEuNjY3LjY2NyAwIDAgMCAuNjY3LS42NjZWNS42MTlhLjY2OS42NjkgMCAwIDAtLjE4My0uNDU5bC0yLjEzMy0yLjI4NWEuNjY4LjY2OCAwIDAgMC0uNDg0LS4yMDhtMS40NjYgNFYxMkg0LjY2N1Y0aDR2Mi4zMzNjMCAuMTg0LjE0OS4zMzQuMzMzLjMzNGgyLjMzM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRmlsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkZsYXR0ZW5lZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkZsYXR0ZW5lZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMuMjUgM2EuMjUuMjUgMCAwIDAtLjI1LjI1djJjMCAuMTM4LjExMi4yNS4yNS4yNWg5LjVhLjI1LjI1IDAgMCAwIC4yNS0uMjV2LTJhLjI1LjI1IDAgMCAwLS4yNS0uMjVoLTkuNXptMCAzLjc1QS4yNS4yNSAwIDAgMCAzIDd2MmMwIC4xMzguMTEyLjI1LjI1LjI1SDUuNUEuMjUuMjUgMCAwIDAgNS43NSA5VjdhLjI1LjI1IDAgMCAwLS4yNS0uMjVIMy4yNXptLS4yNSA0YS4yNS4yNSAwIDAgMSAuMjUtLjI1SDUuNWEuMjUuMjUgMCAwIDEgLjI1LjI1djJhLjI1LjI1IDAgMCAxLS4yNS4yNUgzLjI1YS4yNS4yNSAwIDAgMS0uMjUtLjI1di0yem0zLjMxLS43MjdjLS4wODItLjA3My0uMDgyLS4yMjQgMC0uMjk2bDMuMDU0LTIuNjgzYS4xNy4xNyAwIDAgMSAuMTktLjAyNmMuMDY0LjAzMi4xMDQuMS4xMDQuMTc0djEuMzQxbDMuMTYxLS4wMTZjLjEgMCAuMTguMDg2LjE4LjE5MnYyLjNjMCAuMTA1LS4wOC4xOTEtLjE4LjE5MWwtMy4xNjEuMDE3djEuMzQxYzAgLjA3NC0uMDQuMTQyLS4xMDMuMTc0YS4xNy4xNyAwIDAgMS0uMTktLjAyNUw2LjMxIDEwLjAyM3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRmxhdHRlbmVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuRnVuY3Rpb24gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5GdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS4yNjYgNC4xNVY1LjYzYTIuNDEgMi40MSAwIDAgMC0uODU5LS4xNDVjLS42OTIgMC0xLjA2NS4zNDYtMS4xNzcgMS4wNDNsLS4xMS42MjVoMS44Mjh2MS40NEg4LjkyMWwtLjIwNCAxLjExNUM4LjQ1NSAxMS4zMjUgNy41MTcgMTIgNS45IDEyYy0uNDY5IDAtLjg4Mi0uMDYxLTEuMTY2LS4xNjd2LTEuNDk1Yy4yNzMuMTE3LjU5MS4xNzguOTAzLjE3OC42NTkgMCAxLjAxLS4yOSAxLjEyNy0xLjAxNWwuMTU3LS45MUg1LjI0N1Y3LjE1MmgxLjgzN2wuMTg4LS44NDJDNy41MzQgNC43MTQgOC40MzIgNCAxMC4xOSA0Yy4zOSAwIC44NTMuMDY3IDEuMDc2LjE1WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GdW5jdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkdlbyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkdlbyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDNjMS42MzYgMCAzLjA4OC43ODUgNCAyIC42MjguODM2IDEgMS44NzUgMSAzYTQuOTc4IDQuOTc4IDAgMCAxLS45OTkgM0gxMmE0Ljk5MiA0Ljk5MiAwIDAgMS00IDIgNC45OTIgNC45OTIgMCAwIDEtNC0xLjk5OVYxMWE1IDUgMCAwIDEgNC04Wm0uOTQ4IDhINy4wNTJjLjI3Ny42MjYuNjIzIDEgLjk0OCAxIC4zMjUgMCAuNjctLjM3NC45NDgtMVpNNiAxMWwtLjY0NS4wMDFjLjI3NC4yNDIuNTgxLjQ0Ni45MTQuNjA2QTUuNDQ1IDUuNDQ1IDAgMCAxIDYgMTEuMDAxWm00LjY0NS4wMDFIMTBhNS41MSA1LjUxIDAgMCAxLS4yNjkuNjA2Yy4zMzMtLjE2LjY0LS4zNjQuOTE0LS42MDZabS01LjEzMy0yLjVINC4wMzFjLjA2OC41NC4yNDMgMS4wNDguNTA1IDEuNWgxLjE3MmE5LjE4NiA5LjE4NiAwIDAgMS0uMTk2LTEuNVptMy45NzUgMEg2LjUxM2MuMDMuNTQ0LjEwNCAxLjA1LjIxIDEuNWgyLjU1M2MuMTA3LS40NS4xODItLjk1Ni4yMS0xLjVabTIuNDgyIDBoLTEuNDgxYTkuMTg2IDkuMTg2IDAgMCAxLS4xOTYgMS41aDEuMTcyYy4yNjItLjQ1Mi40MzctLjk2LjUwNS0xLjVaTTUuNzA4IDYgNC41MzUgNmMtLjI2MS40NTItLjQzNy45Ni0uNTA0IDEuNWgxLjQ4MUE5LjE4NyA5LjE4NyAwIDAgMSA1LjcwOCA2Wm0zLjU2OCAwSDYuNzI0Yy0uMTA3LjQ0OS0uMTgyLjk1NS0uMjEgMS40OTloMi45NzNhOC40NzkgOC40NzkgMCAwIDAtLjIxLTEuNVpNMTEuNDY1IDZoLTEuMTczYy4xMDIuNDY3LjE3Ljk3Mi4xOTYgMS41aDEuNDgxYTMuOTc0IDMuOTc0IDAgMCAwLS41MDQtMS41Wk02LjI2OSA0LjM5M2wtLjEyNC4wNjJjLS4yODYuMTUtLjU1MS4zMzMtLjc5LjU0NUg2YTUuNTEgNS41MSAwIDAgMSAuMjY5LS42MDdaTTggNGMtLjMyNiAwLS42NzEuMzc1LS45NDggMWgxLjg5NkM4LjY3MSA0LjM3NiA4LjMyNiA0IDggNFptMS43My4zOTMuMDM4LjA3MWMuMDgzLjE2OC4xNjEuMzQ3LjIzMi41MzZoLjY0NmE0LjAwNiA0LjAwNiAwIDAgMC0uOTE1LS42MDdaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkdlbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbkhpc3RvZ3JhbSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkhpc3RvZ3JhbShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgM2g0djVoMlY1LjVoNFYxM0gzLjAwMXYtMUgzVjN6bTEgOWgyVjRINHY4em0zIDBoMlY5SDd2M3ptMyAwaDJWNi41aC0yVjEyelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5IaXN0b2dyYW07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5JUCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbklQKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExIDNhMiAyIDAgMCAxIDIgMnY2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg2Wm0tMSAySDh2NmgxVjkuMDE0aDFjLjI5OC0uMDEzIDIgMCAyLTIuMDE4IDAtMS43NC0xLjMxNC0xLjk1Mi0xLjgyNS0xLjk4N0wxMCA1Wk02IDVINXY2aDFWNVptNCAuOTg0Yy42NjcgMCAxIC4zMzYgMSAxLjAwOEMxMSA3LjY2NCAxMC42NjcgOCAxMCA4SDlWNS45ODRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbklQOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuSW50ZXJmYWNlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuSW50ZXJmYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguOTY3IDEwLjY1M2gxLjcyN1YxMkg1LjMwNnYtMS4zNDdoMS43MjdWNS4zNDdINS4zMDZWNGg1LjM4OHYxLjM0N0g4Ljk2N3Y1LjMwNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuSW50ZXJmYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuSm9pbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkpvaW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy41IDQuNXYxLjAyNWMwIDEuMjY5LTEuMTg1IDEuOTA4LTIuMTEyIDEuNzM3YS43NS43NSAwIDEgMCAwIDEuNDc1Yy45MjctLjE3IDIuMTEyLjQ3IDIuMTEyIDEuNzM5djEuMDIzaDR2LTEuMDA1YTIuNSAyLjUgMCAwIDEgMC00Ljk4OFY0LjVoLTRaTTEzIDRhMSAxIDAgMCAwLTEtMUg3YTEgMSAwIDAgMC0xIDF2MS41MjVjMCAuMTcyLS4xNzIuMjkzLS4zNDEuMjYyYTIuMjUgMi4yNSAwIDEgMCAwIDQuNDI2Yy4xNy0uMDMxLjM0MS4wOS4zNDEuMjYyVjEyYTEgMSAwIDAgMCAxIDFoNWExIDEgMCAwIDAgMS0xVjkuMDA0YS4xNi4xNiAwIDAgMC0uMDQtLjEwNWMtLjEwOS0uMTI1LS41OTQtLjE2LS43MzItLjA2OGExIDEgMCAxIDEgMC0xLjY2MmMuMTM4LjA5Mi42MjMuMDU3LjczMi0uMDY4YS4xNi4xNiAwIDAgMCAuMDQtLjEwNVY0WlwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuSm9pbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbktleSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbktleShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi42NjcgNi41NDJBMy4yMDggMy4yMDggMCAwIDEgOC44NiA5LjY5NGwtLjQzOC40OTJhLjQzNy40MzcgMCAwIDEtLjMyNy4xNDdoLS42Nzh2LjczYS40MzcuNDM3IDAgMCAxLS40MzguNDM3SDYuMjV2LjczYS40MzcuNDM3IDAgMCAxLS40MzguNDM3SDMuNzcyYS40MzcuNDM3IDAgMCAxLS40MzgtLjQzOHYtMS40MjNjMC0uMTE2LjA0Ni0uMjI3LjEyOC0uMzFsMi45NS0yLjk0OWEzLjIwOCAzLjIwOCAwIDAgMSAzLjA0Ny00LjIxNCAzLjIwMiAzLjIwMiAwIDAgMSAzLjIwOSAzLjIwOVptLTMuMjA5LS44NzVhLjg3NS44NzUgMCAxIDAgMS43NSAwIC44NzUuODc1IDAgMCAwLTEuNzUgMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuS2V5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuS2V5d29yZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbktleXdvcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4zMyAxMC4yOGMtLjEyLjA0LS4yOS4wNy0uNDIuMDctLjIzIDAtLjQzLS4wOC0uNTMtLjNsLS42My0xLjM0IDIuMzItMi44MUg5LjNMNy43NiA3LjkzaC0uMDlMOC4yMiA0SDYuNTlsLTEuMDUgNy41aDEuNjNsLjI3LTEuOTRoLjFsLjQzIDEuMTJjLjI3LjcxLjc0LjkyIDEuMzMuOTIuMjMgMCAuNi0uMDQuODYtLjExbC4xNy0xLjIxelwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5LZXl3b3JkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuTWV0aG9kID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTWV0aG9kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMuMzMzIDExLjAyN1Y1LjA1aDIuMDU5djEuMTM2aC4wNjNjLjI1LS43NDcuODkxLTEuMjE0IDEuNzI4LTEuMjE0Ljg0OCAwIDEuNTI0LjQ4MyAxLjY1IDEuMjE0aC4wNjNjLjIwNC0uNzMxLjkyNy0xLjIxNCAxLjgyMi0xLjIxNCAxLjE1NSAwIDEuOTQ5Ljc5OCAxLjk0OSAyLjAyM3Y0LjAzaC0yLjE2OVY3LjU0MmMwLS41MjEtLjI5LS44NC0uNzM4LS44NHMtLjcyMy4zMTktLjcyMy44NHYzLjQ4Nkg2Ljk2M1Y3LjU0YzAtLjUyMS0uMjktLjg0LS43MzktLjg0LS40NDcgMC0uNzIyLjMxOS0uNzIyLjg0djMuNDg2SDMuMzMzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRob2Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5NZXRyaWNDb3VudGVyID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTWV0cmljQ291bnRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDEwLjVhLjUuNSAwIDAgMC0xIDB2MWEuNS41IDAgMCAwIC41LjVoMWEuNS41IDAgMCAwIDAtMUgxMnYtLjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAzaDR2NS4wMzVBMy41IDMuNSAwIDEgMSA4LjMzNyAxM0gyVjloM1Y2aDNWM1ptMS4wNSA5YTIuNSAyLjUgMCAxIDEgNC45MDItMSAyLjUgMi41IDAgMCAxLTQuOTAyIDFaTTExIDguMDM1YTMuNDkgMy40OSAwIDAgMC0yIDEuMDE2VjRoMnY0LjAzNVpNOCAxMkg2VjdoMnY1Wm0tMyAwdi0ySDN2MmgyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRyaWNDb3VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuTWV0cmljR2F1Z2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5NZXRyaWNHYXVnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDEwLjVhLjUuNSAwIDAgMC0xIDB2MWEuNS41IDAgMCAwIC41LjVoMWEuNS41IDAgMCAwIDAtMUgxMnYtLjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAzSDJ2MTBoNi4zMzdBMy41IDMuNSAwIDEgMCAxMiA4LjAzNVY1SDh2Mkg2VjNabTUgNS4wMzVWNkg5djMuMDVhMy40OSAzLjQ5IDAgMCAxIDItMS4wMTVaTTkgMTEuNWEyLjUgMi41IDAgMSAxIDUuMDAyIDBBMi41IDIuNSAwIDAgMSA5IDExLjVaTTggOEg2djRoMlY4Wk01IDRIM3Y4aDJWNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTWV0cmljR2F1Z2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5Nb2R1bGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Nb2R1bGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm04IDIgNS4xOTYgM3YuMTc4bC0uODY2LjQ2OFY1LjVMOCAzIDMuNjcgNS41djVMOCAxM2w0LjMzLTIuNVY1Ljc3bC44NjYtLjQ3NFYxMUw4IDE0bC01LjE5Ni0zVjVMOCAyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4yNDMgNC40MjkgOS41OTcgNy4wNCA4IDcuOTI4IDMuNzQzIDUuNTYzYS41LjUgMCAxIDAtLjQ4Ni44NzRMNy41IDguNzk0VjEzLjVoMVY4Ljc5NGw0LjI0My0yLjM1N2EuNTA4LjUwOCAwIDAgMCAuMDYtLjA0bC4zOTItLjIwMlY1LjA0N2wtLjkxNy41MDVhLjU3My41NzMgMCAwIDAtLjAyLjAxbC0uMTA2LjA2LS4xOTEuMTA1LTEuMzU1Ljc1My00Ljg0OS0yLjkwOS0uNTE0Ljg1OFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTW9kdWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuTmFtZXNwYWNlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTmFtZXNwYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtNy41NTYgOC40MTYtLjgwNC0xLjY4aC0uMDM2djUuNjRINVY0aDEuOTkybDIuMjkyIDMuOTYuODA0IDEuNjhoLjAzNlY0aDEuNzE2djguMzc2SDkuODQ4bC0yLjI5Mi0zLjk2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5OYW1lc3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5OZXN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OZXN0ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDNjMS4wNDQgMCAxLjkxMy43NTcgMS45OTQgMS43MzZsLjAwNi4xNDl2Ni4yM2MwIDEtLjgyIDEuODA1LTEuODQ1IDEuODhMMTEgMTNIOS41MDFhLjUuNSAwIDAgMS0uMDktLjk5MmwuMDktLjAwOEgxMWMuNTIgMCAuOTM3LS4zNS45OTMtLjc4M2wuMDA3LS4xMDJ2LTYuMjNjMC0uNDQ1LS4zNzktLjgyNy0uODgyLS44NzlMMTEgNEg5LjVhLjUuNSAwIDAgMS0uMDktLjk5Mkw5LjUgM0gxMVpNNi41IDNhLjUuNSAwIDAgMSAuMDkuOTkyTDYuNSA0SDVjLS41MiAwLS45MzcuMzUtLjk5My43ODNMNCA0Ljg4NXY2LjIzYzAgLjQ0NS4zNzkuODI3Ljg4Mi44NzlMNSAxMmgxLjVhLjUuNSAwIDAgMSAuMDkuOTkyTDYuNSAxM0g1Yy0xLjA0NCAwLTEuOTEzLS43NTctMS45OTQtMS43MzZMMyAxMS4xMTV2LTYuMjNjMC0xIC44Mi0xLjgwNSAxLjg0NS0xLjg4TDUgM2gxLjVaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01Ljg2NCA3LjI1YS43MTQuNzE0IDAgMSAxIDAgMS40MjkuNzE0LjcxNCAwIDAgMSAwLTEuNDI5Wm0yLjE0MyAwYS43MTQuNzE0IDAgMSAxIDAgMS40MjkuNzE0LjcxNCAwIDAgMSAwLTEuNDI5Wm0yLjE0MyAwYS43MTQuNzE0IDAgMSAxIDAgMS40MjkuNzE0LjcxNCAwIDAgMSAwLTEuNDI5WlwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTmVzdGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuTnVsbCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk51bGwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm01LjAwMiAxMi40MTItLjk2Mi45NjJhMSAxIDAgMCAxLTEuNDE0LTEuNDE0bC45NjItLjk2MmE1LjMzMyA1LjMzMyAwIDAgMSA3LjQxLTcuNDFsLjk2Mi0uOTYyYTEgMSAwIDEgMSAxLjQxNCAxLjQxNGwtLjk2Mi45NjJhNS4zMzMgNS4zMzMgMCAwIDEtNy40MSA3LjQxWm0uOTY2LS45NjZhNCA0IDAgMCAwIDUuNDc4LTUuNDc4bC01LjQ3OCA1LjQ3OFptLTEuNDE0LTEuNDE0IDUuNDc4LTUuNDc4YTQgNCAwIDAgMC01LjQ3OCA1LjQ3OFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTnVsbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlbk51bWJlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk51bWJlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuOCA5LjgxMmgtLjg0MmwtLjc4IDIuMzM1SDUuMDMxbC43OC0yLjMzNUg0LjZsLjE4Mi0xLjA0M2gxLjM3M2wuNTA3LTEuNTA0SDUuNDU0bC4xODgtMS4wNDJoMS4zNjdsLjc5Mi0yLjM3SDguOTRsLS43OTIgMi4zN2guODQ5bC43OTItMi4zN2gxLjE0NWwtLjc5MiAyLjM3SDExLjRsLS4xODIgMS4wNDJIOS44TDkuMjkzIDguNzdoMS4yNDhsLS4xODMgMS4wNDNIOC45NDZsLS43NzUgMi4zMzVINy4wMjZMNy44IDkuODEyWm0tLjUtMS4wNDNoLjg0MmwuNTEzLTEuNTA0aC0uODQ5TDcuMyA4Ljc3WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5OdW1iZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5PYmplY3QgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5PYmplY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi42MyAxMmMtMS4yOTQgMC0yLjM4My0uMTA1LTIuMzgzLTEuODAyVjkuNmMwLS42MzgtLjI0Ny0uOTE0LS45OC0uOTE0di0xLjM3Yy43MzMgMCAuOTgtLjI4Ljk4LS45MTV2LS42QzQuMjQ3IDQuMTA1IDUuMzM2IDQgNi42MzEgNHYxLjE0Yy0uNzU5IDAtLjg4Ni4yNzItLjg4Ni44NDN2LjgxM2MwIC40NzktLjIyNS45MzYtMS4yMTIgMS4xMzN2LjE0MmMuOTg3LjE5NyAxLjIxMi42NTQgMS4yMTIgMS4xMzN2LjgxM2MwIC41Ny4xMjcuODQ0Ljg4Ni44NDRWMTJabTIuMjY2LThjMS4yOTUgMCAyLjM4NC4xMDUgMi4zODQgMS44MDJWNi40YzAgLjYzOC4yNDcuOTE0Ljk4LjkxNHYxLjM3Yy0uNzMzIDAtLjk4LjI4LS45OC45MTV2LjZDMTEuMjggMTEuODk1IDEwLjE5IDEyIDguODk2IDEydi0xLjE0Yy43NTkgMCAuODg2LS4yNzIuODg2LS44NDN2LS44MTNjMC0uNDc5LjIyNS0uOTM2IDEuMjEyLTEuMTMzVjcuOTNjLS45ODctLjE5Ny0xLjIxMi0uNjU0LTEuMjEyLTEuMTMzdi0uODEzYzAtLjU3LS4xMjctLjg0NC0uODg2LS44NDRWNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuT2JqZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuT3BlcmF0b3IgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5PcGVyYXRvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjY2NyA4LjAwMmMwLTEuNS4zOTQtMi43NDMgMS4yNDgtMy44MjJoMS40MzdjLS42NTIuOC0xLjE0IDIuMzg4LTEuMTQgMy44MjIgMCAxLjQzLjQ4OCAzLjAxOCAxLjE0IDMuODE4SDMuOTE1Yy0uODU0LTEuMDgtMS4yNDgtMi4zMjItMS4yNDgtMy44MThaTTYuNzcgOS45OThsLS44MTgtLjgwMyAxLjIzLTEuMTk3LTEuMjMtMS4yMDMuODMtLjc5MyAxLjIyMSAxLjE5M0w5LjIzIDYuMDAybC44MTguNzkzLTEuMjI3IDEuMiAxLjIyNyAxLjItLjgxOC44MDNMOCA4Ljc5NSA2Ljc3IDkuOTk4Wm02LjU2My0yYzAgMS41LS4zOTQgMi43NDMtMS4yNDggMy44MjJoLTEuNDM3Yy42NTItLjggMS4xNC0yLjM4OCAxLjE0LTMuODIyIDAtMS40My0uNDg4LTMuMDE4LTEuMTQtMy44MThoMS40MzdjLjg1NCAxLjA4IDEuMjQ4IDIuMzIyIDEuMjQ4IDMuODE4WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5PcGVyYXRvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblBhY2thZ2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5QYWNrYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwibTguMDQ5IDMuNzg1IDMuODUyIDEuMDA2LTQuMDQ5IDEuMTAzTDQgNC43OTFsMy45NTEtMS4wMDZhLjE5LjE5IDAgMCAxIC4wOTggMFptLjA3MyAyLjY1NCA0LjU0NS0xLjMwNnY1LjQ1bC0uMTMxLjE4NC00LjQxNCAxLjQ1NVY2LjQzOVptLTQuNzg5IDQuMTQ1VjUuMTg4TDcuNDk4IDYuNDF2NS44MWwtNC4wMzQtMS40NTMtLjEzLS4xODNaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblBhY2thZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5QYXJhbWV0ZXIgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5QYXJhbWV0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC44ODkgMTJWNGgzLjMwNGMxLjc5NyAwIDIuOTIyIDEuMTE3IDIuOTE4IDIuNzcuMDA0IDEuNjUyLTEuMTQ0IDIuNzQ2LTIuOTc2IDIuNzQ2SDYuODIyVjEySDQuODlabTEuOTMzLTQuMDA4aC45NTNjLjg2OCAwIDEuMzM2LS40NzIgMS4zMzItMS4yMjIuMDA0LS43My0uNDY0LTEuMjExLTEuMzMyLTEuMjExaC0uOTUzdjIuNDMzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5QYXJhbWV0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5QZXJjb2xhdG9yID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUGVyY29sYXRvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjUgN2ExLjUgMS41IDAgMSAwIDAtMyAxLjUgMS41IDAgMCAwIDAgM1ptMCAxYTIuNSAyLjUgMCAxIDAgMC01IDIuNSAyLjUgMCAwIDAgMCA1Wk0xMSA5YTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptMCAxYTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNFptLTIuNSAxLjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDAgMSAxIDBabTEgMGExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMFpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblBlcmNvbGF0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5Qcm9wZXJ0eSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblByb3BlcnR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuODg5IDEyVjRoMy4zMDRjMS43OTcgMCAyLjkyMiAxLjExNyAyLjkxOCAyLjc3LjAwNCAxLjY1Mi0xLjE0NCAyLjc0Ni0yLjk3NiAyLjc0Nkg2LjgyMlYxMkg0Ljg5Wm0xLjkzMy00LjAwOGguOTUzYy44NjggMCAxLjMzNi0uNDcyIDEuMzMyLTEuMjIyLjAwNC0uNzMtLjQ2NC0xLjIxMS0xLjMzMi0xLjIxMWgtLjk1M3YyLjQzM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUHJvcGVydHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5SYW5nZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblJhbmdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjgyIDUuMTE2YS41LjUgMCAwIDAtLjcwNC43MDRsLjA2NC4wNjRMMTEuNzE5IDhsLTIuNTQgMi4xMTZhLjUuNSAwIDAgMC0uMTE0LjYzbC4wNS4wNzRhLjUuNSAwIDAgMCAuNjMuMTE1bC4wNzUtLjA1IDMtMi41YS41LjUgMCAwIDAgLjA3MS0uNjk3bC0uMDctLjA3Mi0zLTIuNVpNNi4xOCA1LjExNmEuNS41IDAgMCAxIC43MDQuNzA0bC0uMDY0LjA2NEw0LjI4MSA4bDIuNTQgMi4xMTZhLjUuNSAwIDAgMSAuMTE0LjYzbC0uMDUuMDc0YS41LjUgMCAwIDEtLjYzLjExNWwtLjA3NS0uMDUtMy0yLjVhLjUuNSAwIDAgMS0uMDcxLS42OTdsLjA3LS4wNzIgMy0yLjVaXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5SYW5nZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblJhbmtGZWF0dXJlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUmFua0ZlYXR1cmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA0djhoLTJWNkg5djRINXYySDNWOGg0VjRoNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmFua0ZlYXR1cmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZXMgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA0djhoLTJWNkg5djRINXYySDNWOGg0VjRoNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuUmVwbyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblJlcG8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC41MzMgOS4wNjdjLTEuNzkyIDAtMi4zNzguNzItMi41NyAxLjE5NGExLjYwMSAxLjYwMSAwIDEgMS0xLjE2My0uMDM3VjUuNzc2YTEuNTk1IDEuNTk1IDAgMCAxLTEuMDY3LTEuNTFjMC0uODg1LjcxNS0xLjYgMS42LTEuNi44ODYgMCAxLjYuNzE1IDEuNiAxLjYgMCAuNy0uNDQyIDEuMjkxLTEuMDY2IDEuNTF2Mi44MjFDNi4zMzYgOC4yNTEgNy4wMTkgOCA4IDhjMS40MjQgMCAxLjg5OS0uNzE1IDIuMDUzLTEuMTlhMS42MDMgMS42MDMgMCAwIDEtLjk4Ni0xLjQ3N2MwLS44ODUuNzE0LTEuNiAxLjYtMS42Ljg4NSAwIDEuNi43MTUgMS42IDEuNmExLjU5IDEuNTkgMCAwIDEtMS4xMTUgMS41MjZjLS4xMzkuNzYyLS42NTYgMi4yMDgtMi42MTkgMi4yMDhabS0zLjIgMi4xMzNhLjUzNS41MzUgMCAwIDAtLjUzMy41MzNjMCAuMjk0LjI0LjUzNC41MzMuNTM0YS41MzUuNTM1IDAgMCAwIDAtMS4wNjdabTAtNy40NjdhLjUzNS41MzUgMCAwIDAtLjUzMy41MzRjMCAuMjkzLjI0LjUzMy41MzMuNTMzLjI5NCAwIC41MzQtLjI0LjUzNC0uNTMzYS41MzUuNTM1IDAgMCAwLS41MzQtLjUzNFpNMTAuNjY3IDQuOGEuNTM1LjUzNSAwIDAgMC0uNTM0LjUzMy41MzUuNTM1IDAgMCAwIDEuMDY3IDAgLjUzNS41MzUgMCAwIDAtLjUzMy0uNTMzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5SZXBvOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuU2VhcmNoVHlwZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblNlYXJjaFR5cGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjI3IDcuNWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBaTTguNzcgNy41YTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgMFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS43MDIgMTAuNjgyYTQuNTAxIDQuNTAxIDAgMCAxLTUuNzk2LjQ4Mkw0LjI4IDEyLjc4OWEuNzUuNzUgMCAwIDEtMS4wNi0xLjA2TDQuODQ3IDEwLjFhNC41MDEgNC41MDEgMCAxIDEgNi44NTUuNTgxWm0tNS4zMDQtMS4wNmEzIDMgMCAxIDAgNC4yNDMtNC4yNDNBMyAzIDAgMCAwIDYuMzk4IDkuNjJaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TZWFyY2hUeXBlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuU2VtYW50aWNUZXh0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU2VtYW50aWNUZXh0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAyLjVhLjUuNSAwIDAgMSAuNS0uNWgyYS41LjUgMCAwIDEgMCAxSDN2MTBoMS41YS41LjUgMCAwIDEgMCAxaC0yYS41LjUgMCAwIDEtLjUtLjV2LTExWk0xMy41IDJhLjUuNSAwIDAgMSAuNS41djExYS41LjUgMCAwIDEtLjUuNWgtMmEuNS41IDAgMCAxIDAtMUgxM1YzaC0xLjVhLjUuNSAwIDAgMSAwLTFoMlpNOS4wOTggNC41bC0uMjQ0IDEuMzkzaC44OTZsLS4yMTIgMS4yMTFoLS44OTZsLS40MzUgMi41NzRjLS4wMjQuMTc2LS4wMTMuMzA4LjAzNC4zOTguMDQ2LjA5LjE2My4xMzguMzUuMTQ1LjA3Mi4wMDQuMjItLjAwNS40NDUtLjAyNkw4LjkxIDExLjQ2YTIuNzUgMi43NSAwIDAgMS0uOTE2LjEyOWMtLjUyOC0uMDA3LS45MjMtLjE2Mi0xLjE4Ni0uNDY2LS4yNjItLjMwNC0uMzctLjcxNi0uMzItMS4yMzdsLjQ1NS0yLjc4SDYuMjVsLjIwNy0xLjIxMmguNjk0TDcuMzk0IDQuNWgxLjcwNFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuU2VtYW50aWNUZXh0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuU2hhcGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5TaGFwZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMyAxMHYzaC0zdi0xSDZ2MUgzdi0zaDFWNkgzVjNoM3YxaDRWM2gzdjNoLTF2NGgxWm0tOCAxSDR2MWgxdi0xWm03IDBoLTF2MWgxdi0xWk01IDRINHYxaDFWNFptNyAwaC0xdjFoMVY0Wm0tMSAyaC0xVjVINnYxSDV2NGgxdjFoNHYtMWgxVjZaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblNoYXBlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuU3RyaW5nID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU3RyaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOS4xNDcgNC4yOTctLjI1NSAxLjQ1NWguOTM2bC0uMjIyIDEuMjY2aC0uOTM1bC0uNDU1IDIuNjg4Yy0uMDI1LjE4NC0uMDEzLjMyMy4wMzYuNDE3LjA0OC4wOTMuMTcuMTQ0LjM2NS4xNTEuMDc1LjAwNC4yMy0uMDA1LjQ2NS0uMDI3bC0uMTMgMS4zMmMtLjMuMDk3LS42MTguMTQyLS45NTcuMTM1LS41NTItLjAwNy0uOTY1LS4xNy0xLjIzOS0uNDg3LS4yNzQtLjMxNy0uMzg2LS43NDgtLjMzNS0xLjI5M2wuNDc2LTIuOTA0aC0uNzI1bC4yMTYtMS4yNjZoLjcyNWwuMjU0LTEuNDU1aDEuNzhaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblN0cmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblN0cnVjdCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblN0cnVjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjY2NyA0LjY2N2gyLjY2NnYyLjY2Nkg0LjY2N1Y0LjY2N1ptMCA0aDIuNjY2djIuNjY2SDQuNjY3VjguNjY3Wm00LTRoMi42NjZ2Mi42NjZIOC42NjdWNC42NjdabTAgNGgyLjY2NnYyLjY2Nkg4LjY2N1Y4LjY2N1pNMy4zMzMgMy4zMzN2OS4zMzRoOS4zMzRWMy4zMzNIMy4zMzNabTAtMS4zMzNoOS4zMzRDMTMuNDAzIDIgMTQgMi41OTcgMTQgMy4zMzN2OS4zMzRjMCAuNzM2LS41OTcgMS4zMzMtMS4zMzMgMS4zMzNIMy4zMzNBMS4zMzMgMS4zMzMgMCAwIDEgMiAxMi42NjdWMy4zMzNDMiAyLjU5NyAyLjU5NyAyIDMuMzMzIDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblN0cnVjdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblN5bWJvbCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblN5bWJvbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMzE2IDE0YTYgNiAwIDEgMSAwLTEyIDYgNiAwIDAgMSAwIDEyWm0wLTEuMzMzYTQuNjY3IDQuNjY3IDAgMSAwIDAtOS4zMzQgNC42NjcgNC42NjcgMCAwIDAgMCA5LjMzNFptMi4xOS01LjcyaDEuMTQzYy4wMTkgMS40NDgtLjc5MyAyLjMzOC0xLjkyMiAyLjMzOC0uNjMyIDAtMS4xOTQtLjI2Ny0xLjcwNi0uODExLS4zNi0uMzk3LS42MzYtLjU3Ni0xLS41NzYtLjUxNyAwLS44NDkuMzU1LS44ODUgMS4wODNINC45ODNjLjAxNC0xLjQ3Ljg1OC0yLjMxNCAxLjk1LTIuMzE0LjU5NSAwIDEuMTI1LjI0OSAxLjY3OC44MDIuMzkyLjM4Mi42NDEuNTk1IDEuMDM4LjU5NS40ODQgMCAuODU3LS4zMjMuODU3LTEuMTE2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TeW1ib2w7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5UYWcgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5UYWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCA4YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00IDRhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoNi45ODlhMSAxIDAgMCAwIC44MjUtLjQzNmwyLjA1LTNhMSAxIDAgMCAwIDAtMS4xMjhsLTIuMDUtM0ExIDEgMCAwIDAgMTAuOTkgNEg0Wm0uNzUgMS4yNWEuNS41IDAgMCAwLS41LjV2NC41YS41LjUgMCAwIDAgLjUuNWg1Ljc0NWEuNS41IDAgMCAwIC40MDUtLjIwNmwxLjYzNi0yLjI1YS41LjUgMCAwIDAgMC0uNTg4TDEwLjkgNS40NTZhLjUuNSAwIDAgMC0uNDA1LS4yMDZINC43NVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuVGFnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuVGV4dCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblRleHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIm05LjE0NyA0LjI5Ny0uMjU1IDEuNDU1aC45MzZsLS4yMjIgMS4yNjZoLS45MzVsLS40NTUgMi42ODhjLS4wMjUuMTg0LS4wMTMuMzIzLjAzNi40MTcuMDQ4LjA5My4xNy4xNDQuMzY1LjE1MS4wNzUuMDA0LjIzLS4wMDUuNDY1LS4wMjdsLS4xMyAxLjMyYy0uMy4wOTctLjYxOC4xNDItLjk1Ny4xMzUtLjU1Mi0uMDA3LS45NjUtLjE3LTEuMjM5LS40ODctLjI3NC0uMzE3LS4zODYtLjc0OC0uMzM1LTEuMjkzbC40NzYtMi45MDRoLS43MjVsLjIxNi0xLjI2NmguNzI1bC4yNTQtMS40NTVoMS43OFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuVGV4dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Ub2tlblRva2VuQ291bnQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Ub2tlbkNvdW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0SDN2M2g1VjRaTTEzIDlIOHYzaDVWOVpNMTAgNGgzdjNoLTNWNFpNNiA5SDN2M2gzVjlaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblRva2VuQ291bnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5WYXJpYWJsZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblZhcmlhYmxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwibTYuNjQ5IDQuNjY3IDEuMzI2IDQuN2guMDVsMS4zMjYtNC43aDEuOTgybC0yLjEzNCA2LjY2Nkg2LjgwMUw0LjY2NyA0LjY2N3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuVmFyaWFibGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVG9rZW5WZWN0b3JEZW5zZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblZlY3RvckRlbnNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAyLjVhLjUuNSAwIDAgMSAuNS0uNWgyYS41LjUgMCAwIDEgMCAxSDN2MTBoMS41YS41LjUgMCAwIDEgMCAxaC0yYS41LjUgMCAwIDEtLjUtLjV2LTExWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA1YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFptMCAzYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFptLTEgNGExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTQtN2ExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBaTTggOWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTEgMmExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBabTItNWExIDEgMCAxIDAgMC0yIDEgMSAwIDAgMCAwIDJabTEgMmExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDBabS0xIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNSAyYS41LjUgMCAwIDEgLjUuNXYxMWEuNS41IDAgMCAxLS41LjVoLTJhLjUuNSAwIDAgMSAwLTFIMTNWM2gtMS41YS41LjUgMCAwIDEgMC0xaDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblZlY3RvckRlbnNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRva2VuVmVjdG9yU3BhcnNlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVmVjdG9yU3BhcnNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAyLjVhLjUuNSAwIDAgMSAuNS0uNWgyYS41LjUgMCAwIDEgMCAxSDN2MTBoMS41YS41LjUgMCAwIDEgMCAxaC0yYS41LjUgMCAwIDEtLjUtLjV2LTExWk04IDZhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWm0wIDZhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA4YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMFptNSAxYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjUgMmEuNS41IDAgMCAxIC41LjV2MTFhLjUuNSAwIDAgMS0uNS41aC0yYS41LjUgMCAwIDEgMC0xSDEzVjNoLTEuNWEuNS41IDAgMCAxIDAtMWgyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5WZWN0b3JTcGFyc2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVHJhaW5pbmcgPSBmdW5jdGlvbiBFdWlJY29uVHJhaW5pbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4zODYgOS44MzZhMi41IDIuNSAwIDEgMSAzLjYxMS42NjdDMTUuMjEyIDExLjE3MyAxNiAxMi40NiAxNiAxNHYxLjVhLjUuNSAwIDEgMS0xIDBWMTRjMC0xLjcyNC0xLjI3Ni0zLTMtMy0uOTEgMC0xLjI5OC0uMDItMS44MDUtLjEyMi0xLjI1LS4yNTQtMi4zMzMtMS0zLjU4NS0yLjU2NmEuNS41IDAgMSAxIC43OC0uNjI0Yy45IDEuMTI0IDEuNjUzIDEuNzQgMi40MzQgMi4wNDMuMTU1LjA1Mi4zNDUuMDgzLjU2Mi4xMDVabTEuNzg1LjEyOGMuMDgzLjAxLjE2Ny4wMjEuMjUxLjAzNEwxMi41IDEwYTEuNSAxLjUgMCAxIDAtLjMzLS4wMzZaTTkuNzggMTEuOTdhLjUuNSAwIDAgMSAuNS41YzAgLjA3Ni0uMDQ3LjIyNi0uMDUuMjMxLS4xNzkuMzgtLjIzLjc3NC0uMjMgMS4zMDJ2MS41YS41LjUgMCAxIDEtMSAwdi0xLjVjMC0uNjU3LjA3Mi0xLjE4Ni4zMDctMS42OTZhLjUuNSAwIDAgMSAuNDczLS4zMzdaTTUuOTU4IDUuNzcyYS41LjUgMCAwIDEtLjc4LjYyNUwzLjExIDMuODEyYS41LjUgMCAxIDEgLjc4LS42MjRsMi4wNjggMi41ODRaTTEgMTFoNS41YS41LjUgMCAxIDEgMCAxaC02YS41LjUgMCAwIDEtLjUtLjVWLjVBLjUuNSAwIDAgMSAuNSAwaDEyYS41LjUgMCAwIDEgLjUuNXYzYS41LjUgMCAxIDEtMSAwVjFIMXYxMFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRyYWluaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblRyYW5zaXRpb25MZWZ0SW4gPSBmdW5jdGlvbiBFdWlJY29uVHJhbnNpdGlvbkxlZnRJbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjE0NiA1Ljg1NGEuNS41IDAgMCAxIC43MDgtLjcwOGwyIDJhLjUuNSAwIDAgMSAwIC43MDhsLTIgMmEuNS41IDAgMCAxLS43MDgtLjcwOEwxMS4yOTMgOEg3LjVhLjUuNSAwIDAgMSAwLTFoMy43OTNsLTEuMTQ3LTEuMTQ2WlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIgMGgxMWEyIDIgMCAwIDEgMiAydjExYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMlptMi43MDcgMUg1djEuMjkzbC00IDRWNC43MDdMNC43MDcgMVpNNiAxNFYxaDdhMSAxIDAgMCAxIDEgMXYxMWExIDEgMCAwIDEtMSAxSDZabS0xLTEuMjkzVjE0SDMuNzA3TDUgMTIuNzA3Wm0wLTN2MS41ODZMMi4yOTMgMTRIMmExIDEgMCAwIDEtLjgzOC0uNDU0TDUgOS43MDdabTAtM3YxLjU4NmwtNCA0di0xLjU4Nmw0LTRabTAtM3YxLjU4NmwtNCA0VjcuNzA3bDQtNFpNMy4yOTMgMUgyYTEgMSAwIDAgMC0xIDF2MS4yOTNMMy4yOTMgMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRyYW5zaXRpb25MZWZ0SW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVHJhbnNpdGlvbkxlZnRPdXQgPSBmdW5jdGlvbiBFdWlJY29uVHJhbnNpdGlvbkxlZnRPdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05Ljg1NCA1Ljg1NGEuNS41IDAgMCAwLS43MDgtLjcwOGwtMiAyYS41LjUgMCAwIDAgMCAuNzA4bDIgMmEuNS41IDAgMCAwIC43MDgtLjcwOEw4LjcwNyA4SDEyLjVhLjUuNSAwIDAgMCAwLTFIOC43MDdsMS4xNDctMS4xNDZaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMiAwaDExYTIgMiAwIDAgMSAyIDJ2MTFhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yWm0yLjcwNyAxSDV2MS4yOTNsLTQgNFY0LjcwN0w0LjcwNyAxWk02IDE0VjFoN2ExIDEgMCAwIDEgMSAxdjExYTEgMSAwIDAgMS0xIDFINlptLTEtMS4yOTNWMTRIMy43MDdMNSAxMi43MDdabTAtM3YxLjU4NkwyLjI5MyAxNEgyYTEgMSAwIDAgMS0uODM4LS40NTRMNSA5LjcwN1ptMC0zdjEuNTg2bC00IDR2LTEuNTg2bDQtNFptMC0zdjEuNTg2bC00IDRWNy43MDdsNC00Wk0zLjI5MyAxSDJhMSAxIDAgMCAwLTEgMXYxLjI5M0wzLjI5MyAxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVHJhbnNpdGlvbkxlZnRPdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVHJhbnNpdGlvblRvcEluID0gZnVuY3Rpb24gRXVpSWNvblRyYW5zaXRpb25Ub3BJbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMTQ2IDEwLjE0NmEuNS41IDAgMCAxIC43MDguNzA4bC0yIDJhLjUuNSAwIDAgMS0uNzA4IDBsLTItMmEuNS41IDAgMCAxIC43MDgtLjcwOEw3IDExLjI5M1Y3LjVhLjUuNSAwIDAgMSAxIDB2My43OTNsMS4xNDYtMS4xNDdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTUgMnYxMWEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJoMTFhMiAyIDAgMCAxIDIgMlptLTEgMi43MDdWNWgtMS4yOTNsLTQtNGgxLjU4NkwxNCA0LjcwN1pNMSA2aDEzdjdhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTFWNlptMS4yOTMtMUgxVjMuNzA3TDIuMjkzIDVabTMgMEgzLjcwN0wxIDIuMjkzVjJhMSAxIDAgMCAxIC40NTUtLjgzOEw1LjI5MyA1Wm0zIDBINi43MDdsLTQtNGgxLjU4Nmw0IDRabTMgMEg5LjcwN2wtNC00aDEuNTg2bDQgNFpNMTQgMy4yOTNWMmExIDEgMCAwIDAtMS0xaC0xLjI5M0wxNCAzLjI5M1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRyYW5zaXRpb25Ub3BJbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25UcmFuc2l0aW9uVG9wT3V0ID0gZnVuY3Rpb24gRXVpSWNvblRyYW5zaXRpb25Ub3BPdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjE0NiA5Ljg1NGEuNS41IDAgMCAwIC43MDgtLjcwOGwtMi0yYS41LjUgMCAwIDAtLjcwOCAwbC0yIDJhLjUuNSAwIDEgMCAuNzA4LjcwOEw3IDguNzA3VjEyLjVhLjUuNSAwIDAgMCAxIDBWOC43MDdsMS4xNDYgMS4xNDdaXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTUgMnYxMWEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJoMTFhMiAyIDAgMCAxIDIgMlptLTEgMi43MDdWNWgtMS4yOTNsLTQtNGgxLjU4NkwxNCA0LjcwN1pNMSA2aDEzdjdhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTFWNlptMS4yOTMtMUgxVjMuNzA3TDIuMjkzIDVabTMgMEgzLjcwN0wxIDIuMjkzVjJhMSAxIDAgMCAxIC40NTUtLjgzOEw1LjI5MyA1Wm0zIDBINi43MDdsLTQtNGgxLjU4Nmw0IDRabTMgMEg5LjcwN2wtNC00aDEuNTg2bDQgNFpNMTQgMy4yOTNWMmExIDEgMCAwIDAtMS0xaC0xLjI5M0wxNCAzLjI5M1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRyYW5zaXRpb25Ub3BPdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVHJhc2ggPSBmdW5jdGlvbiBFdWlJY29uVHJhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSAzaDV2MUgwVjNoNVYxYTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxdjJabS03LjA1NiA4SDd2MUg0LjFsLjM5MiAyLjUxOWMuMDQyLjI2OS4yNTQuNDU4LjQ5My40NThoNi4wM2MuMjM5IDAgLjQ1MS0uMTg5LjQ5My0uNDU4bDEuNDk4LTkuNTc2SDE0bC0xLjUwNCA5LjczYy0uMTE2Ljc0Ny0uNzQgMS4zMDQtMS40ODEgMS4zMDRoLTYuMDNjLS43NDEgMC0xLjM2NS0uNTU3LTEuNDgxLTEuMzA0bC0xLjUxMS05LjczSDlWNS45NUgzLjE1N0wzLjQ3NiA4SDh2MUgzLjYzMmwuMzEyIDJaTTYgM2g0VjFINnYyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVHJhc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVW5mb2xkID0gZnVuY3Rpb24gRXVpSWNvblVuZm9sZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMTQgMy44MDggNy41MyAxLjUxYS42Ny42NyAwIDAgMSAuOTQyIDBsMi4zODkgMi4yOThjLjI2LjI1Ni42ODUuMjU2Ljk0NCAwYS42NS42NSAwIDAgMCAwLS45M0w5LjQxNi41NzhhMi4wMiAyLjAyIDAgMCAwLTIuODMyIDBsLTIuMzg4IDIuM2EuNjUuNjUgMCAwIDAgMCAuOTNjLjI2LjI1Ni42ODMuMjU2Ljk0NCAwem0wIDguMzg0IDIuMzkgMi4yOThhLjY3LjY3IDAgMCAwIC45NDIgMGwyLjM4OS0yLjI5OGEuNjc3LjY3NyAwIDAgMSAuOTQ0IDAgLjY1LjY1IDAgMCAxIDAgLjkzbC0yLjM4OCAyLjNhMi4wMiAyLjAyIDAgMCAxLTIuODMyIDBsLTIuMzg4LTIuM2EuNjUuNjUgMCAwIDEgMC0uOTMuNjc3LjY3NyAwIDAgMSAuOTQ0IDB6TTE2IDZIMHY0aDE2VjZ6TTEgOVY3aDE0djJIMXpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVuZm9sZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25VbmxpbmsgPSBmdW5jdGlvbiBFdWlJY29uVW5saW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41NjUgMTAuODNhLjUuNSAwIDEgMSAuODE5LjU3M2wtMS44NzcgMi42OGMtLjk2MyAxLjM3Ni0zLjAyIDEuNTUtNC41ODguNDVDLjM1IDEzLjQzNi0uMTkxIDExLjQ0NS43NzMgMTAuMDdMMy42NCA1Ljk3M2MuOTYzLTEuMzc1IDMuMDE5LTEuNTQ4IDQuNTg3LS40NWEuNS41IDAgMSAxLS41NzMuODJDNi41MDkgNS41NCA1LjA4IDUuNjYgNC40NiA2LjU0NmwtMi44NjggNC4wOTVjLS42MjEuODg3LS4yNDUgMi4yNy45IDMuMDczIDEuMTQ2LjgwMiAyLjU3NS42ODIgMy4xOTYtLjIwNWwxLjg3Ny0yLjY4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy44OTIgMy40M2EuNS41IDAgMSAxLS41NzQtLjgxOUwxMCAuNzM0YzEuMzc2LS45NjMgMy4zNjctLjQyMiA0LjQ2NSAxLjE0NiAxLjA5OCAxLjU2OS45MjYgMy42MjUtLjQ1IDQuNTg4TDkuOTE4IDkuMzM2Yy0xLjM3NS45NjMtMy4zNjYuNDIyLTQuNDY0LTEuMTQ2YS41LjUgMCAxIDEgLjgxOS0uNTc0Yy44MDIgMS4xNDYgMi4xODUgMS41MjIgMy4wNzIuOUwxMy40NCA1LjY1Yy44ODYtLjYyMSAxLjAwNi0yLjA1LjIwNC0zLjE5NS0uODAyLTEuMTQ2LTIuMTg2LTEuNTIyLTMuMDcyLS45TDcuODkyIDMuNDN6TTYgLjV2M2EuNS41IDAgMCAxLTEgMHYtM2EuNS41IDAgMCAxIDEgMHpNMS4wNTggMi4yM2wyLjQ1OCAxLjcyYS41LjUgMCAwIDEtLjU3NC44MkwuNDg0IDMuMDVhLjUuNSAwIDEgMSAuNTc0LS44MnptMTIgNy4wOTMgMi40NTcgMS43MmEuNS41IDAgMSAxLS41NzMuODJsLTIuNDU3LTEuNzJhLjUuNSAwIDEgMSAuNTczLS44MnptLTIuMDk5IDEuMTgxdjNhLjUuNSAwIDEgMS0xIDB2LTNhLjUuNSAwIDEgMSAxIDB6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vbmxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVXNlciA9IGZ1bmN0aW9uIEV1aUljb25Vc2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggOWE0IDQgMCAxIDAgMC04IDQgNCAwIDAgMCAwIDhabTAtMWEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZaXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUgMTQuMjkxQTkuMDUzIDkuMDUzIDAgMCAwIDggMTFhOS4wNTMgOS4wNTMgMCAwIDAtNyAzLjI5MWwuNzE1LjcxQTguMDQ3IDguMDQ3IDAgMCAxIDggMTEuOTk2IDguMDQ3IDguMDQ3IDAgMCAxIDE0LjI4NiAxNWwuNzE0LS43MVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVzZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVXNlckF2YXRhciA9IGZ1bmN0aW9uIEV1aUljb25Vc2VyQXZhdGFyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxOCxcbiAgICBoZWlnaHQ6IDE4LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE4IDE4XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy42ODkgMTEuMTMyYzEuMTU1IDEuMjIyIDEuOTUzIDIuODc5IDIuMTgzIDQuNzQ4YTEuMDA3IDEuMDA3IDAgMCAxLTEgMS4xMkgzLjAwN2ExLjAwNSAxLjAwNSAwIDAgMS0xLTEuMTJjLjIzLTEuODcgMS4wMjgtMy41MjYgMi4xODMtNC43NDguMjQ3LjIyOC41MDUuNDQyLjc4Mi42MzMtMS4wMzggMS4wNjktMS43NjUgMi41NS0xLjk3MiA0LjIzN0wxNC44NzIgMTZjLS4yMDQtMS42ODYtLjkzLTMuMTY2LTEuOTY2LTQuMjM1YTcuMDEgNy4wMSAwIDAgMCAuNzgzLS42MzNaTTguOTM5IDFjMS45IDAgMyAyIDQuMzggMi42MzNhMi40ODMgMi40ODMgMCAwIDEtMS44OC44NjdjLS4yOTggMC0uNTc5LS4wNi0uODQ0LS4xNTdBMy43MjYgMy43MjYgMCAwIDEgNy42OSA1Ljc1Yy0xLjM5NSAwLTMuNzUuMjUtMy4yNDUtMS45MDNDNS45NCAzIDYuOTUyIDEgOC45NCAxWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC45NCAyYzIuMjA1IDAgNCAxLjc5NCA0IDRzLTEuNzk1IDQtNCA0Yy0yLjIwNyAwLTQtMS43OTQtNC00czEuNzkzLTQgNC00bTAgOUE1IDUgMCAxIDAgOC45MzcuOTk5IDUgNSAwIDAgMCA4Ljk0IDExXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVXNlckF2YXRhcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Vc2VycyA9IGZ1bmN0aW9uIEV1aUljb25Vc2VycyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjQ4MiA0LjM0NGEyIDIgMCAxIDAtMi45NjMgMGMtLjA4LjA0Mi0uMTU2LjA4Ny0uMjMuMTM2LS40NTcuMzA1LS43NS43MDQtLjkzMyAxLjA3M0EzLjQ1NyAzLjQ1NyAwIDAgMCAxIDYuOTc4VjlhMSAxIDAgMCAwIDEgMWgyLjVhMy42OSAzLjY5IDAgMCAxIC42ODQtLjk2Mkw1LjE3MSA5SDJWN3MwLTIgMi0yYzEuMDA3IDAgMS41MDcuNTA3IDEuNzU1IDEuMDEuMjI1LS4yNTQuNDkzLS40Ny43OTMtLjYzNmEyLjcxNyAyLjcxNyAwIDAgMC0xLjA2Ni0xLjAzek00IDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyem0xMCA2aC0yLjVhMy42ODQgMy42ODQgMCAwIDAtLjY4NC0uOTYyTDEwLjgyOSA5SDE0VjdzMC0yLTItMmMtMS4wMDcgMC0xLjUwNy41MDctMS43NTUgMS4wMWEzLjAxMiAzLjAxMiAwIDAgMC0uNzkzLS42MzYgMi43MTYgMi43MTYgMCAwIDEgMS4wNjYtMS4wMyAyIDIgMCAxIDEgMi45NjMgMGMuMDguMDQyLjE1Ni4wODcuMjMuMTM2LjQ1Ny4zMDUuNzUuNzA0LjkzMyAxLjA3M0EzLjQ1MyAzLjQ1MyAwIDAgMSAxNSA2Ljk0NFY5YTEgMSAwIDAgMS0xIDF6bS0yLTZhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEwIDhjMCAuNTE3LS4xOTYuOTg5LS41MTggMS4zNDRhMi43NTUgMi43NTUgMCAwIDEgMS4xNjMgMS4yMUEzLjQ1MyAzLjQ1MyAwIDAgMSAxMSAxMS45NzdWMTRhMSAxIDAgMCAxLTEgMUg2YTEgMSAwIDAgMS0xLTF2LTIuMDIyYTIuMDA1IDIuMDA1IDAgMCAxIC4wMDYtLjEzNSAzLjQ1NiAzLjQ1NiAwIDAgMSAuMzUtMS4yOSAyLjc1NSAyLjc1NSAwIDAgMSAxLjE2Mi0xLjIxQTIgMiAwIDEgMSAxMCA4em0tNCA0djJoNHYtMnMwLTItMi0yLTIgMi0yIDJ6bTMtNGExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDB6XCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vc2VyczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WZWN0b3IgPSBmdW5jdGlvbiBFdWlJY29uVmVjdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuNSAxMVY1SDExVjMuNUg1VjVIMy41djZINXYxLjVoNlYxMWgxLjVabTEgMEgxNXY0aC00di0xLjVINVYxNUgxdi00aDEuNVY1SDFWMWg0djEuNWg2VjFoNHY0aC0xLjV2NlpNNCA0VjJIMnYyaDJabTggMGgyVjJoLTJ2MlpNMiAxNGgydi0ySDJ2MlptMTAgMGgydi0yaC0ydjJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WZWN0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlkZW9QbGF5ZXIgPSBmdW5jdGlvbiBFdWlJY29uVmlkZW9QbGF5ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDEuOTk0QzAgLjg5My44OTUgMCAxLjk5NCAwaDEyLjAxMkMxNS4xMDcgMCAxNiAuODk1IDE2IDEuOTk0djEyLjAxMkExLjk5NSAxLjk5NSAwIDAgMSAxNC4wMDYgMTZIMS45OTRBMS45OTUgMS45OTUgMCAwIDEgMCAxNC4wMDZWMS45OTRabTEgMHYxMi4wMTJjMCAuNTQ4LjQ0Ni45OTQuOTk0Ljk5NGgxMi4wMTJhLjk5NS45OTUgMCAwIDAgLjk5NC0uOTk0VjEuOTk0QS45OTUuOTk1IDAgMCAwIDE0LjAwNiAxSDEuOTk0QS45OTUuOTk1IDAgMCAwIDEgMS45OTRaTTEgNGgxNHYxSDFWNFptMS41LTFhLjUuNSAwIDAgMSAwLTFoMWEuNS41IDAgMCAxIDAgMWgtMVptMyAwYS41LjUgMCAwIDEgMC0xaDFhLjUuNSAwIDAgMSAwIDFoLTFabTQuOTQ3IDYuMTA2YTEgMSAwIDAgMSAwIDEuNzg4bC0zIDJBMSAxIDAgMCAxIDYgMTJWOGExIDEgMCAwIDEgMS40NDctLjg5NGwzIDJaTTEwIDEwIDcgOHY0bDMtMlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpZGVvUGxheWVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc0FyZWEgPSBmdW5jdGlvbiBFdWlJY29uVmlzQXJlYShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTNoMTBWOS45MTNsLTIuNTcxLTIuODI2TDguNTYgOC43NTNhLjUuNSAwIDAgMS0uNzI4LS4wNjdMNC40NDggNC4zMTcgMyA2LjE5MVYxM1ptNS4yOTUtNS4zNSAxLjgzNy0xLjY0YS41LjUgMCAwIDEgLjcwMy4wMzdsMy4wMzUgMy4zMzZhLjUuNSAwIDAgMSAuMTMuMzM3djMuNzhhLjUuNSAwIDAgMS0uNS41aC0xMWEuNS41IDAgMCAxLS41LS41VjYuMDJhLjUuNSAwIDAgMSAuMTA0LS4zMDVsMS45NDctMi41MmEuNS41IDAgMCAxIC43OTEtLjAwMUw4LjI5NSA3LjY1Wk0xIDE1aDEzLjVhLjUuNSAwIDEgMSAwIDFILjVhLjUuNSAwIDAgMS0uNS0uNXYtMTRhLjUuNSAwIDAgMSAxIDBWMTVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNBcmVhOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc0FyZWFTdGFja2VkID0gZnVuY3Rpb24gRXVpSWNvblZpc0FyZWFTdGFja2VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNLjUgMWEuNS41IDAgMCAxIC41LjVWMTVoMTMuNWEuNS41IDAgMSAxIDAgMUguNWEuNS41IDAgMCAxLS41LS41di0xNEEuNS41IDAgMCAxIC41IDFabTQuMzQyIDIuMTk0TDguMjk1IDcuNjVsMS44MzctMS42NGEuNS41IDAgMCAxIC43MDMuMDM3bDMuMDM1IDMuMzM2YS41LjUgMCAwIDEgLjEzLjMzN3YzLjc4YS41LjUgMCAwIDEtLjUuNWgtMTFhLjUuNSAwIDAgMS0uNS0uNVY2LjAyYS41LjUgMCAwIDEgLjEwNC0uMzA1bDEuOTQ3LTIuNTJhLjUuNSAwIDAgMSAuNzkxLS4wMDFabS0uMzk0IDEuMTIzTDMgNi4xOTF2NC4xMDFsMS4xNDYtMS4xNDZhLjUuNSAwIDAgMSAuNDkzLS4xMjZsLjA4NS4wMzNMOC41IDEwLjk0bDEuNzc2LS44ODhhLjUuNSAwIDAgMSAuMzYtLjAzNGwuMDg4LjAzNEwxMyAxMS4xOVY5LjkxM2wtMi41NzEtMi44MjZMOC41NiA4Ljc1M2EuNS41IDAgMCAxLS43MjgtLjA2N0w0LjQ0OCA0LjMxN1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0FyZWFTdGFja2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc0Jhckhvcml6b250YWwgPSBmdW5jdGlvbiBFdWlJY29uVmlzQmFySG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxMGgtNmEuNS41IDAgMCAxIDAtMUg4VjZIMi41YS41LjUgMCAwIDEgMC0xSDEzVjJIMi41YS41LjUgMCAwIDEgMC0xaDExYS41LjUgMCAwIDEgLjUuNXY0YS41LjUgMCAwIDEtLjUuNUg5djNoMi41YS41LjUgMCAwIDEgLjUuNXY0YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMSAxIDAtMUgxMXYtM0g4LjVaTTAgLjVhLjUuNSAwIDEgMSAxIDB2MTRhLjUuNSAwIDEgMS0xIDBWLjVaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNCYXJIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc0Jhckhvcml6b250YWxTdGFja2VkID0gZnVuY3Rpb24gRXVpSWNvblZpc0Jhckhvcml6b250YWxTdGFja2VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNLjUgMGEuNS41IDAgMCAxIC41LjV2MTRhLjUuNSAwIDEgMS0xIDBWLjVBLjUuNSAwIDAgMSAuNSAwWm0xMyAxYS41LjUgMCAwIDEgLjUuNXY0YS41LjUgMCAwIDEtLjUuNUg5djNoMi41YS41LjUgMCAwIDEgLjUuNXY0YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMSAxIDAtMUg5di0zSDIuNWEuNS41IDAgMCAxIDAtMUg2VjZIMi41YS41LjUgMCAwIDEgMC0xSDEwVjJIMi41YS41LjUgMCAwIDEgMC0xaDExWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzQmFyVmVydGljYWwgPSBmdW5jdGlvbiBFdWlJY29uVmlzQmFyVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCA3LjV2NmEuNS41IDAgMSAxLTEgMFY4SDZ2NS41YS41LjUgMCAxIDEtMSAwVjNIMnYxMC41YS41LjUgMCAxIDEtMSAwdi0xMWEuNS41IDAgMCAxIC41LS41aDRhLjUuNSAwIDAgMSAuNS41VjdoM1Y0LjVhLjUuNSAwIDAgMSAuNS0uNWg0YS41LjUgMCAwIDEgLjUuNXY5YS41LjUgMCAxIDEtMSAwVjVoLTN2Mi41Wk0uNSAxNmEuNS41IDAgMSAxIDAtMWgxNGEuNS41IDAgMSAxIDAgMUguNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0JhclZlcnRpY2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNCYXJWZXJ0aWNhbFN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC41IDE1YS41LjUgMCAxIDEgMCAxSC41YS41LjUgMCAxIDEgMC0xaDE0Wm0tOS0xM2EuNS41IDAgMCAxIC41LjVMNS45OTkgN0g5VjQuNWEuNS41IDAgMCAxIC41LS41aDRhLjUuNSAwIDAgMSAuNS41djlhLjUuNSAwIDEgMS0xIDBWN2gtM3Y2LjVhLjUuNSAwIDAgMS0uNDEuNDkyTDkuNSAxNGEuNS41IDAgMCAxLS41LS41VjEwSDZ2My41YS41LjUgMCAwIDEtLjk5Mi4wOUw1IDEzLjVWNkgydjcuNWEuNS41IDAgMSAxLTEgMHYtMTFhLjUuNSAwIDAgMSAuNS0uNWg0WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFyVmVydGljYWxTdGFja2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc0dhdWdlID0gZnVuY3Rpb24gRXVpSWNvblZpc0dhdWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtMTIuODc3IDUuODQ3LTEuMDIgMS4wMmEuNS41IDAgMCAxLS43MDgtLjcwN2wxLjEtMS4wOTljLS4wNS0uMDUzLS4xLS4xMDYtLjE1Mi0uMTU3QTYuNDcxIDYuNDcxIDAgMCAwIDggMy4wMTlWNC41YS41LjUgMCAwIDEtMSAwVjMuMDE5YTYuNDcgNi40NyAwIDAgMC00LjI2MSAyLjA1NWwxLjA3IDEuMDcxYS41LjUgMCAwIDEtLjcwNi43MDdsLS45OS0uOTlBNi40NiA2LjQ2IDAgMCAwIDEuMDE4IDEwSDIuNWEuNS41IDAgMSAxIDAgMUgxLjE3NGMuMDgzLjM1My4xOTYuNjk3LjMzNyAxLjAzYS41LjUgMCAxIDEtLjkyMi4zOUE3LjQ4NyA3LjQ4NyAwIDAgMSAwIDkuNWE3LjQ4MyA3LjQ4MyAwIDAgMSAyLjE5Ny01LjMwNEE3LjQ4NyA3LjQ4NyAwIDAgMSA3LjUgMmE3LjQ4NyA3LjQ4NyAwIDAgMSA1LjMwNCAyLjE5N0E3LjQ4MyA3LjQ4MyAwIDAgMSAxNSA5LjVhNy40ODcgNy40ODcgMCAwIDEtLjU5IDIuOTIuNS41IDAgMCAxLS45Mi0uMzljLjE0LS4zMzMuMjUzLS42NzcuMzM2LTEuMDNIMTIuNWEuNS41IDAgMSAxIDAtMWgxLjQ4MWE2LjQ4MyA2LjQ4MyAwIDAgMC0xLjEwNC00LjE1M1ptLTYuMDQxIDUuMzE3YS45OTMuOTkzIDAgMCAxLS4wMS0xLjQwNGMuMzg0LS4zODUgMi44ODItMi4wMDIgMy4xNDktMS43MzUuMjY3LjI2Ny0xLjM1IDIuNzY1LTEuNzM1IDMuMTVhLjk5My45OTMgMCAwIDEtMS40MDQtLjAxWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzR2F1Z2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzR29hbCA9IGZ1bmN0aW9uIEV1aUljb25WaXNHb2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNzI1IDMuNjUzYTYgNiAwIDAgMSAyLjg0NyA3LjU3Ni41LjUgMCAwIDEtLjkyOC0uMzcyIDUgNSAwIDEgMC05LjI5My0uMDE0LjUuNSAwIDAgMS0uMjE4LjYxOUwxLjM5IDEyLjQ3YS41LjUgMCAwIDEtLjcwOC0uMjNBNy45OSA3Ljk5IDAgMCAxIDAgOWE4IDggMCAwIDEgMTEuMjEyLTcuMzI5LjUuNSAwIDAgMSAuMjM0LjcwNGwtLjcyMSAxLjI3OFptLS45MzMtLjM4LjUtLjg4OWE3IDcgMCAwIDAtOC45MDIgOC45M2wuODg2LS41MTFhNiA2IDAgMCAxIDcuNTE2LTcuNTNaTTYuNzMgOS40NjdhMS43NSAxLjc1IDAgMSAxIDIuNTM5IDAgMiAyIDAgMSAxLTIuNTM5IDBaTTggMTIuMDEzYTEgMSAwIDEgMCAwLTIgMSAxIDAgMCAwIDAgMlptMC0zYS43NS43NSAwIDEgMCAwLTEuNS43NS43NSAwIDAgMCAwIDEuNVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0dvYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzTGluZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNMaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuNjU0IDMuNDhjLjI0OC4yMjUuNTUyLjM4OS44ODguNDY3TDExLjI0IDkuNDNhMS45OSAxLjk5IDAgMCAwLS45MTUtLjQwNGwyLjMzLTUuNTQ3Wk05LjE0NiA5LjE5YTIuMDA4IDIuMDA4IDAgMCAwLS43NjkuNjRsLTEuNTcyLTJjLjMxMS0uMTM2LjU4MS0uMzUuNzg1LS42MThsMS41NTYgMS45NzhaTTUuNTgxIDcuOTU2bC0yLjEzNCA0LjI2OGEuNS41IDAgMCAxLS44OTQtLjQ0OGwyLjEzNC00LjI2OGMuMjUuMjIuNTU3LjM3Ni44OTQuNDQ4Wk0xIDE1aDEzLjVhLjUuNSAwIDEgMSAwIDFILjVhLjUuNSAwIDAgMS0uNS0uNXYtMTRhLjUuNSAwIDAgMSAxIDBWMTVabTUtOGExIDEgMCAxIDEgMC0yIDEgMSAwIDAgMSAwIDJabTQgNWExIDEgMCAxIDEgMC0yIDEgMSAwIDAgMSAwIDJabTQtOWExIDEgMCAxIDEgMC0yIDEgMSAwIDAgMSAwIDJaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNMaW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc01hcENvb3JkaW5hdGUgPSBmdW5jdGlvbiBFdWlJY29uVmlzTWFwQ29vcmRpbmF0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNSAxNUM1Ljc3IDE1IDIgOS45NyAyIDYuNTk1IDIgMy41MDcgNC40NiAxIDcuNSAxUzEzIDMuNTA3IDEzIDYuNTk1QzEzIDkuOTcgOS4yMyAxNSA3LjUgMTVabTAtMWMuMjg2IDAgMS40OC0xLjA0NCAyLjQ1OS0yLjM1QzExLjIxOSA5Ljk2OSAxMiA4LjE1MyAxMiA2LjU5NiAxMiA0LjA1NSA5Ljk4MyAyIDcuNSAyUzMgNC4wNTUgMyA2LjU5NWMwIDEuNTU3Ljc4IDMuMzczIDIuMDQxIDUuMDU2QzYuMDIgMTIuOTU2IDcuMjE0IDE0IDcuNSAxNFptMC00Ljk5NmEyLjUgMi41IDAgMSAxIDAtNSAyLjUgMi41IDAgMCAxIDAgNVptMC0xYTEuNSAxLjUgMCAxIDAgMC0zIDEuNSAxLjUgMCAwIDAgMCAzWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzTWFwQ29vcmRpbmF0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNNYXBSZWdpb24gPSBmdW5jdGlvbiBFdWlJY29uVmlzTWFwUmVnaW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41IDIuMzA5djguNjlhLjQ5OS40OTkgMCAwIDEtLjAzMi4xNzZMOS41IDEyLjY5MVYzLjgwOWwtMy0xLjVabS0xLS4wNEwyIDMuODI1djguOTA2bDMuNTI3LTEuNTY4YS41LjUgMCAwIDEtLjAyNy0uMTY0VjIuMjdabS4yNzQtMS4yMTZhLjQ5OC40OTggMCAwIDEgLjQ3MS4wMWwzLjc2OCAxLjg4NCA0LjI4NC0xLjkwNEEuNS41IDAgMCAxIDE1IDEuNXYxMGEuNS41IDAgMCAxLS4yOTcuNDU3bC00LjUgMmEuNS41IDAgMCAxLS40MjctLjAxbC0zLjc4OS0xLjg5NC00LjI4MyAxLjkwNGEuNS41IDAgMCAxLS43MDMtLjQ1N3YtMTBhLjUuNSAwIDAgMSAuMjk3LS40NTdsNC40NzYtMS45OVpNMTAuNSAzLjgyNXY4LjkwNmwzLjUtMS41NTZWMi4yN2wtMy41IDEuNTU2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzTWFwUmVnaW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc01ldHJpYyA9IGZ1bmN0aW9uIEV1aUljb25WaXNNZXRyaWMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUzMiA3LjM0YTIuMTYxIDIuMTYxIDAgMSAxIDIuOTM2IDAgMi43NDYgMi43NDYgMCAxIDEtMi45MzYgMFpNMiAwaDEyYTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMkgyYTIgMiAwIDAgMS0yLTJWMmEyIDIgMCAwIDEgMi0yWm0wIDFhMSAxIDAgMCAwLTEgMXYxMmExIDEgMCAwIDAgMSAxaDEyYTEgMSAwIDAgMCAxLTFWMmExIDEgMCAwIDAtMS0xSDJabTYgNS45MTVhMS4xNjEgMS4xNjEgMCAxIDAgMC0yLjMyMiAxLjE2MSAxLjE2MSAwIDAgMCAwIDIuMzIyWm0wIDQuNDkyYTEuNzQ2IDEuNzQ2IDAgMSAwIDAtMy40OTIgMS43NDYgMS43NDYgMCAwIDAgMCAzLjQ5MlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01ldHJpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25WaXNQaWUgPSBmdW5jdGlvbiBFdWlJY29uVmlzUGllKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41IDlhLjUuNSAwIDAgMS0uNS0uNVYzLjAyM0E1LjUgNS41IDAgMSAwIDExLjk3OCA5SDYuNVpNNyA4aDUuNWEuNS41IDAgMCAxIC41LjVBNi41IDYuNSAwIDEgMSA2LjUgMmEuNS41IDAgMCAxIC41LjVWOFptMi02Ljk3MlY2aDQuOTcyQzEzLjY5NiAzLjU1MiAxMS40NDggMS4zMDQgOSAxLjAyOFpNMTQuNSA3aC02YS41LjUgMCAwIDEtLjUtLjV2LTZhLjUuNSAwIDAgMSAuNS0uNUMxMS44NTMgMCAxNSAzLjE0NyAxNSA2LjVhLjUuNSAwIDAgMS0uNS41Wk02LjE0NiA4Ljg1NGEuNS41IDAgMSAxIC43MDgtLjcwOGw0IDRhLjUuNSAwIDAgMS0uNzA4LjcwOGwtNC00WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzUGllOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc1RhYmxlID0gZnVuY3Rpb24gRXVpSWNvblZpc1RhYmxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnYxWm0tMSAwVjJhMSAxIDAgMCAwLTEtMUgyYTEgMSAwIDAgMC0xIDF2MWgxNFptMCAxSDF2MTBhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xVjRaTTQuNSA2YS41LjUgMCAwIDEgMCAxSDIuNDk2YS41LjUgMCAxIDEgMC0xSDQuNVptOSAwYS41LjUgMCAxIDEgMCAxaC02YS41LjUgMCAwIDEgMC0xaDZabS05IDNhLjUuNSAwIDAgMSAwIDFIMi40OTZhLjUuNSAwIDEgMSAwLTFINC41Wm05IDBhLjUuNSAwIDEgMSAwIDFoLTZhLjUuNSAwIDAgMSAwLTFoNlptLTkgM2EuNS41IDAgMSAxIDAgMUgyLjQ5NmEuNS41IDAgMSAxIDAtMUg0LjVabTkgMGEuNS41IDAgMSAxIDAgMWgtNmEuNS41IDAgMSAxIDAtMWg2WlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVGFibGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzVGFnQ2xvdWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzVGFnQ2xvdWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjUgOS4wNDdhLjUuNSAwIDEgMCAwIDFoMTNhLjUuNSAwIDAgMCAwLTFoLTEzWm0wLTFoMTNhMS41IDEuNSAwIDAgMSAwIDNoLTEzYTEuNSAxLjUgMCAwIDEgMC0zWk0xMCAxM2EuNS41IDAgMSAxIDAgMUg0YS41LjUgMCAxIDEgMC0xaDZaTTguMDAxIDIuMDE1YS41LjUgMCAxIDEtLjAwMiAxbC01LS4wMTVhLjUuNSAwIDEgMSAuMDAzLTFsNSAuMDE1Wk0xNCA1YS41LjUgMCAxIDEgMCAxSDZhLjUuNSAwIDAgMSAwLTFoOFpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1RhZ0Nsb3VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc1RleHQgPSBmdW5jdGlvbiBFdWlJY29uVmlzVGV4dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSA1djZoMmEuNS41IDAgMSAxIDAgMWgtNWEuNS41IDAgMSAxIDAtMWgyVjVINXYuNWEuNS41IDAgMCAxLTEgMHYtMWEuNS41IDAgMCAxIC41LS41aDdhLjUuNSAwIDAgMSAuNS41MWwtLjAyMSAxYS41LjUgMCAxIDEtMS0uMDJsLjAxLS40OUg4LjVaTTEgMTVoMS41YS41LjUgMCAxIDEgMCAxaC0yYS41LjUgMCAwIDEtLjUtLjV2LTEuOTk2YS41LjUgMCAwIDEgMSAwVjE1Wk0xIDF2MS40OTdhLjUuNSAwIDEgMS0xIDBWLjVBLjUuNSAwIDAgMSAuNSAwaDJhLjUuNSAwIDAgMSAwIDFIMVptMTQgMGgtMS40OTVhLjUuNSAwIDAgMSAwLTFIMTUuNWEuNS41IDAgMCAxIC41LjV2MmEuNS41IDAgMSAxLTEgMFYxWm0wIDE0di0xLjVhLjUuNSAwIDEgMSAxIDB2MmEuNS41IDAgMCAxLS41LjVoLTJhLjUuNSAwIDEgMSAwLTFIMTVaTTAgNi41YS41LjUgMCAwIDEgMSAwdjNhLjUuNSAwIDAgMS0xIDB2LTNaTTkuNSAwYS41LjUgMCAwIDEgMCAxaC0zYS41LjUgMCAwIDEgMC0xaDNaTTE1IDYuNWEuNS41IDAgMSAxIDEgMHYzYS41LjUgMCAxIDEtMSAwdi0zWk05LjUgMTVhLjUuNSAwIDEgMSAwIDFoLTNhLjUuNSAwIDEgMSAwLTFoM1pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1RleHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzVGltZWxpb24gPSBmdW5jdGlvbiBFdWlJY29uVmlzVGltZWxpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC44ODQgMS44MDJjMS4xNzEtLjMwOSAyLjIyLS4yNCAzLjEwMy4wNy4yOTUuMTA0LjUwNy4yMTIuNjMxLjI5MmwuMTY0LjEwNi4wNDguMTg4Yy4yNzggMS4wNjYuMiAyLjE3NS0uMDkxIDMuMjNhNi43MjggNi43MjggMCAwIDEtLjE5NC41OThjLjAzNS4xMi4wNzQuMjczLjExMi40NTQuMjI3IDEuMDY1LjI0NyAyLjE5My0uMDggMy4yNjdhNC44NTUgNC44NTUgMCAwIDEtLjUzNCAxLjE3NWMtLjMyNC41MTQtLjcuOTU0LTEuMTE3IDEuMzIzLS44MDYuNzEyLTEuNjE2IDEuMDcxLTIuMjM1IDEuMjA2LS4xNC4xNzktLjM0Ni4zODEtLjYyOS41NzgtLjY0My40NDctMS40OTMuNzExLTIuNTYxLjcxMS0xLjA3IDAtMS45Mi0uMjY0LTIuNTYzLS43MTFhMi44NzQgMi44NzQgMCAwIDEtLjYyOS0uNTc4Yy0uNjE4LS4xMzQtMS40MjgtLjQ5My0yLjIzMi0xLjIwMy0uNDE5LS4zNy0uNzk2LS44MS0xLjEyLTEuMzI2YTQuODU1IDQuODU1IDAgMCAxLS41MzQtMS4xNzVDLjA5NiA4LjkzMy4xMTYgNy44MDUuMzQzIDYuNzRhNi43NCA2Ljc0IDAgMCAxIC4xMTItLjQ1NCA2LjcyOCA2LjcyOCAwIDAgMS0uMTk0LS41OThDLS4wMyA0LjYzMy0uMTA4IDMuNTI0LjE3IDIuNDU4bC4wNDgtLjE4OC4xNjQtLjEwNmMuMTI0LS4wOC4zMzYtLjE4OC42My0uMjkxLjg4NS0uMzEgMS45MzMtLjM4IDMuMTA0LS4wNy4xODQtLjEwOC40MzQtLjIzLjc0OC0uMzQ4QzUuNjE2IDEuMTcgNi40OTcgMSA3LjUwMSAxYzEuMDAyIDAgMS44ODMuMTcgMi42MzQuNDU1LjMxNS4xMTkuNTY1LjI0Ljc1LjM0N1ptMy4wMjcgMS4xMTZhMy4xMyAzLjEzIDAgMCAwLS4yNTUtLjEwMmMtLjc0OS0uMjYzLTEuNjYtLjMwOS0yLjcwOC4wMDdsLS4yMzguMDcyLS4yMDEtLjE0N2MtLjExLS4wOC0uMzU0LS4yMTctLjcyOC0uMzU4QzkuMTQgMi4xNDcgOC4zOCAyIDcuNTAxIDJjLS44OCAwLTEuNjQxLjE0Ny0yLjI4My4zOS0uMzczLjE0MS0uNjE3LjI3OC0uNzI3LjM1OGwtLjIuMTQ3LS4yNC0uMDcyYy0xLjA0OC0uMzE2LTEuOTU4LS4yNy0yLjcwNy0uMDA3YTMuMTMgMy4xMyAwIDAgMC0uMjU1LjEwMmMtLjE2Ny44MTItLjA5NCAxLjY3NC4xMzYgMi41MDMuMDg0LjMwMy4xNjYuNTI0LjIxNy42MzdsLjA4Mi4xODItLjA2Ni4xOWMtLjAzMi4wOS0uMDg0LjI3LS4xMzcuNTE4LS4xOTUuOTE0LS4yMTIgMS44OC4wNTkgMi43NjcuMS4zMzMuMjQxLjY0NS40MjMuOTM1LjI3My40MzQuNTg4LjgwMS45MzYgMS4xMDguNDM0LjM4My44OTguNjU1IDEuMzYuODM0LjI3LjEwNS40NzQuMTU1LjU3NS4xN2wuMjQ4LjAzNC4xMi4yMmMuMDUxLjA5MS4xOTkuMjY2LjQ2Ni40NTIuNDc2LjMzIDEuMTI3LjUzMiAxLjk5My41MzIuODY1IDAgMS41MTYtLjIwMiAxLjk5LS41MzIuMjY4LS4xODYuNDE2LS4zNi40NjYtLjQ1MmwuMTIxLS4yMi4yNDgtLjAzNGMuMTAxLS4wMTUuMzA1LS4wNjUuNTc2LS4xNy40NjItLjE4LjkyNy0uNDUyIDEuMzYyLS44MzYuMzQ3LS4zMDcuNjYtLjY3NC45MzMtMS4xMDcuMTgyLS4yOS4zMjItLjYwMS40MjMtLjkzNC4yNzEtLjg4Ny4yNTQtMS44NTMuMDYtMi43NjdhNC41OTcgNC41OTcgMCAwIDAtLjEzOC0uNTE5bC0uMDY2LS4xODkuMDgyLS4xODJjLjA1LS4xMTMuMTMzLS4zMzQuMjE3LS42MzcuMjMtLjgyOS4zMDMtMS42OTEuMTM2LTIuNTAzWk01IDUuMDA4Yy4wMDQuMTgxLS4wNDguMzY0LS4yNjQuNjE2LS40MjguNDk4LS45ODUuNDg4LTEuNDMxLjA0OS0uMzI2LS4zMjEtLjMyNS0uNzMyLS4yOS0xLjA0Ny4wODUtLjc2Ljc0OC0uNzIyIDEuMjYyLS40NC40ODYuMjcuNzE3LjYxNi43MjMuODIzWm01IDBjLjAwNi0uMjA2LjIzNy0uNTUzLjcyNC0uODIxLjUxNC0uMjgzIDEuMTc2LS4zMjEgMS4yNi40NC4wMzYuMzE0LjAzOC43MjUtLjI4OCAxLjA0Ni0uNDQ2LjQ0LTEuMDA1LjQ0OS0xLjQzMy0uMDUtLjIxNy0uMjUtLjI2Ny0uNDM0LS4yNjMtLjYxNFpNNy41IDhjLS41MDMgMC0uOTc2LS4yNC0xLjM3NS0uNjcyLS4zOTgtLjQzMi0uNTkyLTEuMTI2IDAtMS41MjguMzg0LS4yNTkgMS4wODItLjMgMS4zNzUtLjMuMjk0IDAgLjk5MS4wNDEgMS4zNzUuMy41OTMuNDAyLjM5NyAxLjA5NiAwIDEuNTI4QzguNDc3IDcuNzYgOC4wMDIgOCA3LjUgOFptMCAxYy44MDggMCAyLjY1Ni45OTQgMi40OSAyLjA3NC0uMTUzLjk5My0yLjExNC45MjUtMi40OS45MjUtLjM3NCAwLTIuMzM2LjA2OC0yLjQ5LS45MjVDNC44NDUgOS45OTQgNi42OTMgOSA3LjUgOVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1RpbWVsaW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvblZpc1ZlZ2EgPSBmdW5jdGlvbiBFdWlJY29uVmlzVmVnYShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuNDE0IDguMDM2IDQuODkgMTAuNTFhLjUuNSAwIDAgMS0uNzA3LjcwOEwxLjM1NCA4LjM4OWEuNS41IDAgMCAxIDAtLjcwN2wyLjgyOC0yLjgyOGEuNS41IDAgMSAxIC43MDcuNzA3TDIuNDE0IDguMDM2Wm04Ljc2OCAyLjQ3NCAyLjQ3NS0yLjQ3NC0yLjQ3NS0yLjQ3NWEuNS41IDAgMCAxIC43MDctLjcwN2wyLjgyOSAyLjgyOGEuNS41IDAgMCAxIDAgLjcwN2wtMi44MjkgMi44MjlhLjUuNSAwIDEgMS0uNzA3LS43MDhaTTguNTU5IDIuNTA2YS41LjUgMCAwIDEgLjk4MS4xOUw3LjQ0MSAxMy40OTRhLjUuNSAwIDAgMS0uOTgxLS4xOUw4LjU1OSAyLjUwNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1ZlZ2E7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uVmlzVmlzdWFsQnVpbGRlciA9IGZ1bmN0aW9uIEV1aUljb25WaXNWaXN1YWxCdWlsZGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44MzcgN2MuMTEuOTMuMTY1IDEuODg2LjE2NSAyLjg2OVYxMy41YS41LjUgMCAxIDEtMSAwVjkuODY5QTIzLjMgMjMuMyAwIDAgMCA4LjgzIDdINy4yOWMtLjE5NSAxLjA0LS4yOTIgMS45ODUtLjI5MiAyLjgzNVYxMy41YS41LjUgMCAxIDEtMSAwVjkuODM1YzAtLjg2NC4wOTItMS44MDkuMjc2LTIuODM1SDIuNWEuNS41IDAgMCAxLS40OTUtLjU3Yy4yODUtMi4wMjMgMS42MjYtMy4zNTggMy45MzEtMy45NiAxLjk2Ny0uNTE0IDQuMjItLjYwNiA2Ljc1Ni0uMjc4QTEuNSAxLjUgMCAwIDEgMTQgMy42NzlWNS41QTEuNSAxLjUgMCAwIDEgMTIuNSA3SDkuODM3Wm0tLjU2OS0xSDEyLjVhLjUuNSAwIDAgMCAuNS0uNVYzLjY4YS41LjUgMCAwIDAtLjQzNi0uNDk3Yy0yLjQxNi0uMzExLTQuNTQtLjIyNS02LjM3NS4yNTRDNC40OTQgMy44OCAzLjQ5MSA0LjcyNCAzLjExNyA2SDkuMjY4Wk0yIDEwdjMuNWEuNS41IDAgMSAxLTEgMHYtNGEuNS41IDAgMCAxIC41LS41aDNhLjUuNSAwIDAgMSAuNS41djRhLjUuNSAwIDEgMS0xIDBWMTBIMlptMTAgMy41YS41LjUgMCAxIDEtMSAwdi0yYS41LjUgMCAwIDEgLjUtLjVoM2EuNS41IDAgMCAxIC41LjV2MmEuNS41IDAgMSAxLTEgMFYxMmgtMnYxLjVaTTEuMDE2IDE2LjAyNmEuNS41IDAgMCAxIDAtMUgxNWEuNS41IDAgMSAxIDAgMUgxLjAxNlpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1Zpc3VhbEJ1aWxkZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uV2FybmluZyA9IGZ1bmN0aW9uIEV1aUljb25XYXJuaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJtOC41NSA5LjUwMi4zNS0zLjUwN2EuOTA1LjkwNSAwIDEgMC0xLjggMGwuMzUgMy41MDdhLjU1Mi41NTIgMCAwIDAgMS4xIDBaTTkgMTJhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC44NjQgMS40OTZhMSAxIDAgMCAwLTEuNzI4IDBsLTcgMTJBMSAxIDAgMCAwIDEgMTVoMTRhMSAxIDAgMCAwIC44NjQtMS41MDRsLTctMTJaTTEgMTQgOCAybDcgMTJIMVpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbldhcm5pbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uV2FybmluZ0ZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25XYXJuaW5nRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMWExIDEgMCAwIDEgLjg2NC40OTZsNyAxMkExIDEgMCAwIDEgMTUgMTVIMWExIDEgMCAwIDEtLjg2NC0xLjUwNGw3LTEyQTEgMSAwIDAgMSA4IDFabS45IDQuOTk1LS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMEw3LjEgNS45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBaTTggMTNhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyWlwiXG4gIH0pKTtcbn07XG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uV2FybmluZ0ZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aUljb25Xb3JkV3JhcCA9IGZ1bmN0aW9uIEV1aUljb25Xb3JkV3JhcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgM2gxMnYxSDJWM3ptMCA4aDZ2MUgydi0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA3aDkuNXYuNVY3aC4wMzlsLjA4My4wMDVhMi45NTggMi45NTggMCAwIDEgMS4xMDIuMjk4Yy4zMDkuMTU0LjYzMy4zOTQuODguNzYzLjI0OC4zNzMuMzk2Ljg0Ny4zOTYgMS40MzQgMCAuNTg4LS4xNDggMS4wNjEtLjM5NiAxLjQzNGEyLjI1NyAyLjI1NyAwIDAgMS0uODguNzYzIDIuOTU3IDIuOTU3IDAgMCAxLTEuMTg1LjMwMmgtLjAyNWwtLjAwOS4wMDFoLS4wMDNzLS4wMDIgMC0uMDAyLS41di41SDExdjFsLTItMS41IDItMS41djFoLjUwNmwuMDQ0LS4wMDNhMS45NTkgMS45NTkgMCAwIDAgLjcyNi0uMTk1Yy4xOTEtLjA5NS4zNjctLjIzLjQ5NS0uNDIzLjEyNy0uMTkuMjI5LS40NjYuMjI5LS44NzlzLS4xMDItLjY4OS0uMjI5LS44NzlhMS4yNTYgMS4yNTYgMCAwIDAtLjQ5NS0uNDI0IDEuOTU4IDEuOTU4IDAgMCAwLS43Ny0uMTk3SDJWN3pcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbldvcmRXcmFwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpSWNvbldvcmRXcmFwRGlzYWJsZWQgPSBmdW5jdGlvbiBFdWlJY29uV29yZFdyYXBEaXNhYmxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDMuNSAxMiAydjFIMnYxaDEwdjFsMi0xLjV6TTEyIDlWOEgyVjdoMTBWNmwyIDEuNUwxMiA5em0wIDN2MWwyLTEuNS0yLTEuNXYxSDJ2MWgxMHpcIlxuICB9KSk7XG59O1xuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbldvcmRXcmFwRGlzYWJsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlJY29uV3JlbmNoID0gZnVuY3Rpb24gRXVpSWNvbldyZW5jaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwibTYuOTE4IDkuNzQ2IDQuNTM3IDQuNTM3YTIgMiAwIDEgMCAyLjgyOC0yLjgyOWwtMy4xNTctMy4xNTZhLjUuNSAwIDAgMSAuNzA4LS43MDhsMy4xNTYgMy4xNTdhMyAzIDAgMSAxLTQuMjQzIDQuMjQzbC00Ljk0OS00Ljk1YTUuMDAxIDUuMDAxIDAgMCAxLTUuMjItNy4xMDYuNS41IDAgMCAxIC44MDUtLjEzOEwzLjY3NiA1LjA5YTEgMSAwIDEgMCAxLjQxNS0xLjQxNEwyLjc5NyAxLjM4MmEuNS41IDAgMCAxIC4xMzgtLjgwNSA1LjAwMSA1LjAwMSAwIDEgMSAzLjk4MyA5LjE2OVpNMS4yMjYgNC4wNTRhNC4wMDIgNC4wMDIgMCAwIDAgNi42OTMgMy44NjUgNCA0IDAgMCAwLTMuODY1LTYuNjkzbDEuNzQ0IDEuNzQzYTIgMiAwIDEgMS0yLjgyOSAyLjgyOEwxLjIyNiA0LjA1NFptMTAuMjI5IDguODE0YTEgMSAwIDEgMSAxLjQxNC0xLjQxNCAxIDEgMCAwIDEtMS40MTQgMS40MTRaXCJcbiAgfSkpO1xufTtcbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25XcmVuY2g7IiwgImltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMCBmcm9tICcuL2Fzc2V0cy9hY2Nlc3NpYmlsaXR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMSBmcm9tICcuL2Fzc2V0cy9hZ2dyZWdhdGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyIGZyb20gJy4vYXNzZXRzL2FsZXJ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMyBmcm9tICcuL2Fzc2V0cy9hbmFseXplRXZlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0IGZyb20gJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1IGZyb20gJy4vYXNzZXRzL2Fubm90YXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2IGZyb20gJy4vYXNzZXRzL2Fub21hbHlfY2hhcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3IGZyb20gJy4vYXNzZXRzL2Fub21hbHlfc3dpbV9sYW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOCBmcm9tICcuL2Fzc2V0cy9hcG1fdHJhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5IGZyb20gJy4vYXNzZXRzL2FwcF9hZGRfZGF0YS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwIGZyb20gJy4vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExIGZyb20gJy4vYXNzZXRzL2FwcF9hZ2VudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyIGZyb20gJy4vYXNzZXRzL2FwcF9hcG0uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMyBmcm9tICcuL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0IGZyb20gJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNSBmcm9tICcuL2Fzc2V0cy9hcHBfY2FudmFzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYgZnJvbSAnLi9hc3NldHMvYXBwX2Nhc2VzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTcgZnJvbSAnLi9hc3NldHMvYXBwX2NvZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOCBmcm9tICcuL2Fzc2V0cy9hcHBfY29uc29sZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5IGZyb20gJy4vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAgZnJvbSAnLi9hc3NldHMvYXBwX2Rhc2hib2FyZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxIGZyb20gJy4vYXNzZXRzL2FwcF9kZXZ0b29scy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyIGZyb20gJy4vYXNzZXRzL2FwcF9kaXNjb3Zlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzIGZyb20gJy4vYXNzZXRzL2FwcF9lbXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNCBmcm9tICcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNSBmcm9tICcuL2Fzc2V0cy9hcHBfZmxlZXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNiBmcm9tICcuL2Fzc2V0cy9hcHBfZ2lzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcgZnJvbSAnLi9hc3NldHMvYXBwX2dyYXBoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjggZnJvbSAnLi9hc3NldHMvYXBwX2dyb2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOSBmcm9tICcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAgZnJvbSAnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMSBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMyBmcm9tICcuL2Fzc2V0cy9hcHBfbGVucy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0IGZyb20gJy4vYXNzZXRzL2FwcF9sb2dzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzUgZnJvbSAnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNiBmcm9tICcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3IGZyb20gJy4vYXNzZXRzL2FwcF9tZXRyaWNzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzggZnJvbSAnLi9hc3NldHMvYXBwX21sLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkgZnJvbSAnLi9hc3NldHMvYXBwX21vbml0b3JpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MCBmcm9tICcuL2Fzc2V0cy9hcHBfbm90ZWJvb2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MSBmcm9tICcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyIGZyb20gJy4vYXNzZXRzL2FwcF9waXBlbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzIGZyb20gJy4vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NCBmcm9tICcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDUgZnJvbSAnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NiBmcm9tICcuL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDcgZnJvbSAnLi9hc3NldHMvYXBwX3NlY3VyaXR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDggZnJvbSAnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5IGZyb20gJy4vYXNzZXRzL2FwcF9zcGFjZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MCBmcm9tICcuL2Fzc2V0cy9hcHBfc3FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTEgZnJvbSAnLi9hc3NldHMvYXBwX3RpbWVsaW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIgZnJvbSAnLi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMgZnJvbSAnLi9hc3NldHMvYXBwX3VwdGltZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0IGZyb20gJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1IGZyb20gJy4vYXNzZXRzL2FwcF92aXN1YWxpemUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NiBmcm9tICcuL2Fzc2V0cy9hcHBfdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTcgZnJvbSAnLi9hc3NldHMvYXBwX3dhdGNoZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OCBmcm9tICcuL2Fzc2V0cy9hcHBfd29ya3BsYWNlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5IGZyb20gJy4vYXNzZXRzL2FwcHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MCBmcm9tICcuL2Fzc2V0cy9hcnJvd0VuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxIGZyb20gJy4vYXNzZXRzL2Fycm93U3RhcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MiBmcm9tICcuL2Fzc2V0cy9hcnJvd19kb3duLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjMgZnJvbSAnLi9hc3NldHMvYXJyb3dfbGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0IGZyb20gJy4vYXNzZXRzL2Fycm93X3JpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUgZnJvbSAnLi9hc3NldHMvYXJyb3dfdXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NiBmcm9tICcuL2Fzc2V0cy9hcnRpY2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjcgZnJvbSAnLi9hc3NldHMvYXN0ZXJpc2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OCBmcm9tICcuL2Fzc2V0cy9hdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5IGZyb20gJy4vYXNzZXRzL2JlYWtlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwIGZyb20gJy4vYXNzZXRzL2JlbGwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MSBmcm9tICcuL2Fzc2V0cy9iZWxsU2xhc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MiBmcm9tICcuL2Fzc2V0cy9iZXRhLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzMgZnJvbSAnLi9hc3NldHMvYm9sdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0IGZyb20gJy4vYXNzZXRzL2JveGVzX2hvcml6b250YWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NSBmcm9tICcuL2Fzc2V0cy9ib3hlc192ZXJ0aWNhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2IGZyb20gJy4vYXNzZXRzL2JyYW5jaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3IGZyb20gJy4vYXNzZXRzL2JyYW5jaFVzZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OCBmcm9tICcuL2Fzc2V0cy9icm9vbS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5IGZyb20gJy4vYXNzZXRzL2JydXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAgZnJvbSAnLi9hc3NldHMvYnVnLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEgZnJvbSAnLi9hc3NldHMvYnVsbHNleWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MiBmcm9tICcuL2Fzc2V0cy9jYWxlbmRhci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzIGZyb20gJy4vYXNzZXRzL2NoYW5nZV9wb2ludF9kZXRlY3Rpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NCBmcm9tICcuL2Fzc2V0cy9jaGVjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1IGZyb20gJy4vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NiBmcm9tICcuL2Fzc2V0cy9jaGVlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3IGZyb20gJy4vYXNzZXRzL2NsaWNrTGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4IGZyb20gJy4vYXNzZXRzL2NsaWNrUmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OSBmcm9tICcuL2Fzc2V0cy9jbG9jay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwIGZyb20gJy4vYXNzZXRzL2Nsb2NrQ291bnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxIGZyb20gJy4vYXNzZXRzL2Nsb3VkRHJpenpsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyIGZyb20gJy4vYXNzZXRzL2Nsb3VkU3Rvcm15LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTMgZnJvbSAnLi9hc3NldHMvY2xvdWRTdW5ueS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0IGZyb20gJy4vYXNzZXRzL2NsdXN0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NSBmcm9tICcuL2Fzc2V0cy9jb2xvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2IGZyb20gJy4vYXNzZXRzL2NvbXB1dGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NyBmcm9tICcuL2Fzc2V0cy9jb25zb2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTggZnJvbSAnLi9hc3NldHMvY29udGFpbmVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTkgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAwIGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZUJlbG93LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAxIGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMiBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5V2l0aGluLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAzIGZyb20gJy4vYXNzZXRzL2NvbnRyb2xzX2hvcml6b250YWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDQgZnJvbSAnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDUgZnJvbSAnLi9hc3NldHMvY29weS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwNiBmcm9tICcuL2Fzc2V0cy9jb3B5X2NsaXBib2FyZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwNyBmcm9tICcuL2Fzc2V0cy9jcm9zcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwOCBmcm9tICcuL2Fzc2V0cy9jcm9zc0luQ2lyY2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA5IGZyb20gJy4vYXNzZXRzL2Nyb3NzX2luX2NpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMCBmcm9tICcuL2Fzc2V0cy9jcm9zc2hhaXJzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTExIGZyb20gJy4vYXNzZXRzL2N1cnJlbmN5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTEyIGZyb20gJy4vYXNzZXRzL2N1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMyBmcm9tICcuL2Fzc2V0cy9kYXRhYmFzZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExNCBmcm9tICcuL2Fzc2V0cy9kZXNrdG9wLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE1IGZyb20gJy4vYXNzZXRzL2RpZmYuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTYgZnJvbSAnLi9hc3NldHMvZGlzY3Vzcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExNyBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExOCBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudEVkaXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTkgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRhdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyMCBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjEgZnJvbSAnLi9hc3NldHMvZG90LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTIyIGZyb20gJy4vYXNzZXRzL2RvdEluQ2lyY2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTIzIGZyb20gJy4vYXNzZXRzL2RvdWJsZUFycm93TGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNCBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTI1IGZyb20gJy4vYXNzZXRzL2Rvd25sb2FkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTI2IGZyb20gJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTI3IGZyb20gJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyOCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjkgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQ2VudGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMwIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzEgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMyIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblJpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMzIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzNCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzUgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzcgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzOCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fY2VudGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM5IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQwIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYm9sZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQzIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ0IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9jb21tZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ1IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9oZWFkaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ2IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDcgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2xpbmsuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDggZnJvbSAnLi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0OSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfcmVkby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3Jfc3RyaWtlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUxIGZyb20gJy4vYXNzZXRzL2VkaXRvcl90YWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUzIGZyb20gJy4vYXNzZXRzL2VkaXRvcl91bmRvLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU0IGZyb20gJy4vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NSBmcm9tICcuL2Fzc2V0cy9lbWFpbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NiBmcm9tICcuL2Fzc2V0cy9lbXB0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NyBmcm9tICcuL2Fzc2V0cy9lbmRwb2ludC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1OCBmcm9tICcuL2Fzc2V0cy9lcWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTkgZnJvbSAnLi9hc3NldHMvZXJhc2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYwIGZyb20gJy4vYXNzZXRzL2Vycm9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYxIGZyb20gJy4vYXNzZXRzL2Vycm9yRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYyIGZyb20gJy4vYXNzZXRzL2VzcWxWaXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjMgZnJvbSAnLi9hc3NldHMvZXhpdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NCBmcm9tICcuL2Fzc2V0cy9leHBhbmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjUgZnJvbSAnLi9hc3NldHMvZXhwYW5kTWluaS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NiBmcm9tICcuL2Fzc2V0cy9leHBvcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjcgZnJvbSAnLi9hc3NldHMvZXllLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY4IGZyb20gJy4vYXNzZXRzL2V5ZV9jbG9zZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjkgZnJvbSAnLi9hc3NldHMvZmFjZV9oYXBweS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MCBmcm9tICcuL2Fzc2V0cy9mYWNlX25ldXRyYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzEgZnJvbSAnLi9hc3NldHMvZmFjZV9zYWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzIgZnJvbSAnLi9hc3NldHMvZmllbGRfc3RhdGlzdGljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MyBmcm9tICcuL2Fzc2V0cy9maWx0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzQgZnJvbSAnLi9hc3NldHMvZmlsdGVyRXhjbHVkZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3NSBmcm9tICcuL2Fzc2V0cy9maWx0ZXJJZ25vcmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzYgZnJvbSAnLi9hc3NldHMvZmlsdGVySW5DaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzcgZnJvbSAnLi9hc3NldHMvZmlsdGVySW5jbHVkZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3OCBmcm9tICcuL2Fzc2V0cy9mbGFnLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc5IGZyb20gJy4vYXNzZXRzL2ZvbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODAgZnJvbSAnLi9hc3NldHMvZm9sZGVyX2NoZWNrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTgxIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jbG9zZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODIgZnJvbSAnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTgzIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9vcGVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTg0IGZyb20gJy4vYXNzZXRzL2ZyYW1lTmV4dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4NSBmcm9tICcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTg2IGZyb20gJy4vYXNzZXRzL2Z1bGxTY3JlZW5FeGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTg3IGZyb20gJy4vYXNzZXRzL2Z1bGxfc2NyZWVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTg4IGZyb20gJy4vYXNzZXRzL2Z1bmN0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTg5IGZyb20gJy4vYXNzZXRzL2dlYXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTAgZnJvbSAnLi9hc3NldHMvZ2xhc3Nlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5MSBmcm9tICcuL2Fzc2V0cy9nbG9iZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5MiBmcm9tICcuL2Fzc2V0cy9ncmFiLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTkzIGZyb20gJy4vYXNzZXRzL2dyYWJPbW5pZGlyZWN0aW9uYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTQgZnJvbSAnLi9hc3NldHMvZ3JhYl9ob3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk1IGZyb20gJy4vYXNzZXRzL2dyYWRpZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk2IGZyb20gJy4vYXNzZXRzL2dyaWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTcgZnJvbSAnLi9hc3NldHMvaGVhcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTggZnJvbSAnLi9hc3NldHMvaGVhdG1hcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5OSBmcm9tICcuL2Fzc2V0cy9oZWxwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAwIGZyb20gJy4vYXNzZXRzL2hvbWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDEgZnJvbSAnLi9hc3NldHMvaUluQ2lyY2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAyIGZyb20gJy4vYXNzZXRzL2ltYWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAzIGZyb20gJy4vYXNzZXRzL2ltcG9ydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwNCBmcm9tICcuL2Fzc2V0cy9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwNSBmcm9tICcuL2Fzc2V0cy9pbmRleFRlbXBvcmFyeS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwNiBmcm9tICcuL2Fzc2V0cy9pbmRleF9jbG9zZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwNyBmcm9tICcuL2Fzc2V0cy9pbmRleF9lZGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA4IGZyb20gJy4vYXNzZXRzL2luZGV4X2ZsdXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA5IGZyb20gJy4vYXNzZXRzL2luZGV4X21hcHBpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTAgZnJvbSAnLi9hc3NldHMvaW5kZXhfb3Blbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxMSBmcm9tICcuL2Fzc2V0cy9pbmRleF9ydW50aW1lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEyIGZyb20gJy4vYXNzZXRzL2luZGV4X3NldHRpbmdzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEzIGZyb20gJy4vYXNzZXRzL2luZmluaXR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE0IGZyb20gJy4vYXNzZXRzL2lucHV0T3V0cHV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE1IGZyb20gJy4vYXNzZXRzL2luc3BlY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTYgZnJvbSAnLi9hc3NldHMvaW52ZXJ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE3IGZyb20gJy4vYXNzZXRzL2lwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE4IGZyb20gJy4vYXNzZXRzL2lzc3VlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE5IGZyb20gJy4vYXNzZXRzL2tleS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyMCBmcm9tICcuL2Fzc2V0cy9rZXlib2FyZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyMSBmcm9tICcuL2Fzc2V0cy9rcWxfZmllbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjIgZnJvbSAnLi9hc3NldHMva3FsX2Z1bmN0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjIzIGZyb20gJy4vYXNzZXRzL2txbF9vcGVyYW5kLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI0IGZyb20gJy4vYXNzZXRzL2txbF9zZWxlY3Rvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyNSBmcm9tICcuL2Fzc2V0cy9rcWxfdmFsdWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjYgZnJvbSAnLi9hc3NldHMva3ViZXJuZXRlc05vZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjcgZnJvbSAnLi9hc3NldHMva3ViZXJuZXRlc1BvZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyOCBmcm9tICcuL2Fzc2V0cy9sYXVuY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjkgZnJvbSAnLi9hc3NldHMvbGF5ZXJzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMwIGZyb20gJy4vYXNzZXRzL2xldHRlcmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzMSBmcm9tICcuL2Fzc2V0cy9saW5lRGFzaGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMyIGZyb20gJy4vYXNzZXRzL2xpbmVEb3R0ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzMgZnJvbSAnLi9hc3NldHMvbGluZVNvbGlkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM0IGZyb20gJy4vYXNzZXRzL2xpbmsuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzUgZnJvbSAnLi9hc3NldHMvbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNiBmcm9tICcuL2Fzc2V0cy9saXN0X2FkZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNyBmcm9tICcuL2Fzc2V0cy9sb2NrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM4IGZyb20gJy4vYXNzZXRzL2xvY2tPcGVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM5IGZyb20gJy4vYXNzZXRzL2xvZ19wYXR0ZXJuX2FuYWx5c2lzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQwIGZyb20gJy4vYXNzZXRzL2xvZ19yYXRlX2FuYWx5c2lzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQxIGZyb20gJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQyIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBhY2hlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQzIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBwX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3c19tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ2IGZyb20gJy4vYXNzZXRzL2xvZ29fYXp1cmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDcgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZV9tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ4IGZyb20gJy4vYXNzZXRzL2xvZ29fYmVhdHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDkgZnJvbSAnLi9hc3NldHMvbG9nb19idXNpbmVzc19hbmFseXRpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTAgZnJvbSAnLi9hc3NldHMvbG9nb19jZXBoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUxIGZyb20gJy4vYXNzZXRzL2xvZ29fY2xvdWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTIgZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZF9lY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTMgZnJvbSAnLi9hc3NldHMvbG9nb19jb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU0IGZyb20gJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTUgZnJvbSAnLi9hc3NldHMvbG9nb19jb3VjaGJhc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTYgZnJvbSAnLi9hc3NldHMvbG9nb19kb2NrZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTcgZnJvbSAnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU4IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpYy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1OSBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjAgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjYxIGZyb20gJy4vYXNzZXRzL2xvZ29fZW50ZXJwcmlzZV9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjIgZnJvbSAnLi9hc3NldHMvbG9nb19ldGNkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjYzIGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY0IGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwX21vbm8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjUgZnJvbSAnLi9hc3NldHMvbG9nb19naXRodWIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjYgZnJvbSAnLi9hc3NldHMvbG9nb19nbWFpbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2NyBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvbGFuZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2OCBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY5IGZyb20gJy4vYXNzZXRzL2xvZ29faGFwcm94eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2libS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2libV9tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcyIGZyb20gJy4vYXNzZXRzL2xvZ29fa2Fma2EuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzMgZnJvbSAnLi9hc3NldHMvbG9nb19raWJhbmEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzQgZnJvbSAnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc1IGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nZ2luZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2xvZ3N0YXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc3IGZyb20gJy4vYXNzZXRzL2xvZ29fbWFwcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3OCBmcm9tICcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3OSBmcm9tICcuL2Fzc2V0cy9sb2dvX21ldHJpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODAgZnJvbSAnLi9hc3NldHMvbG9nb19tb25nb2RiLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgxIGZyb20gJy4vYXNzZXRzL2xvZ29fbXlzcWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODIgZnJvbSAnLi9hc3NldHMvbG9nb19uZ2lueC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MyBmcm9tICcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODQgZnJvbSAnLi9hc3NldHMvbG9nb19vc3F1ZXJ5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg1IGZyb20gJy4vYXNzZXRzL2xvZ29fcGhwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg2IGZyb20gJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODcgZnJvbSAnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg4IGZyb20gJy4vYXNzZXRzL2xvZ29fcmFiYml0bXEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODkgZnJvbSAnLi9hc3NldHMvbG9nb19yZWRpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5MCBmcm9tICcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkxIGZyb20gJy4vYXNzZXRzL2xvZ29fc2l0ZV9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTIgZnJvbSAnLi9hc3NldHMvbG9nb19za2V0Y2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTMgZnJvbSAnLi9hc3NldHMvbG9nb19zbGFjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5NCBmcm9tICcuL2Fzc2V0cy9sb2dvX3VwdGltZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5NSBmcm9tICcuL2Fzc2V0cy9sb2dvX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5NiBmcm9tICcuL2Fzc2V0cy9sb2dvX3dlYmhvb2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTcgZnJvbSAnLi9hc3NldHMvbG9nb193aW5kb3dzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk4IGZyb20gJy4vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5OSBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDAgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaWYuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDEgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDIgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAzIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA0IGZyb20gJy4vYXNzZXRzL21hZ25ldC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNSBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA2IGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDcgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA4IGZyb20gJy4vYXNzZXRzL21hcF9tYXJrZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDkgZnJvbSAnLi9hc3NldHMvbWVtb3J5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEwIGZyb20gJy4vYXNzZXRzL21lbnUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTEgZnJvbSAnLi9hc3NldHMvbWVudURvd24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTIgZnJvbSAnLi9hc3NldHMvbWVudUxlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTMgZnJvbSAnLi9hc3NldHMvbWVudVJpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE0IGZyb20gJy4vYXNzZXRzL21lbnVVcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxNSBmcm9tICcuL2Fzc2V0cy9tZXJnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxNiBmcm9tICcuL2Fzc2V0cy9taW5pbWl6ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxNyBmcm9tICcuL2Fzc2V0cy9taW51cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxOCBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTkgZnJvbSAnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMCBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9zcXVhcmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjEgZnJvbSAnLi9hc3NldHMvbWxfY2xhc3NpZmljYXRpb25fam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIyIGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9hZHZhbmNlZF9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjMgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjQgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI1IGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9zaW5nbGVfbWV0cmljX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyNiBmcm9tICcuL2Fzc2V0cy9tbF9kYXRhX3Zpc3VhbGl6ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjcgZnJvbSAnLi9hc3NldHMvbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI4IGZyb20gJy4vYXNzZXRzL21sX3JlZ3Jlc3Npb25fam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI5IGZyb20gJy4vYXNzZXRzL21vYmlsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzMCBmcm9tICcuL2Fzc2V0cy9tb29uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMxIGZyb20gJy4vYXNzZXRzL21vdmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzIgZnJvbSAnLi9hc3NldHMvbmFtZXNwYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMzIGZyb20gJy4vYXNzZXRzL25lc3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzNCBmcm9tICcuL2Fzc2V0cy9uZXdfY2hhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzNSBmcm9tICcuL2Fzc2V0cy9ub2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM2IGZyb20gJy4vYXNzZXRzL251bWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzNyBmcm9tICcuL2Fzc2V0cy9vZmZsaW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM4IGZyb20gJy4vYXNzZXRzL29ubGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzOSBmcm9tICcuL2Fzc2V0cy9wYWNrYWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQwIGZyb20gJy4vYXNzZXRzL3BhZ2VTZWxlY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDEgZnJvbSAnLi9hc3NldHMvcGFnZXNTZWxlY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDIgZnJvbSAnLi9hc3NldHMvcGFpbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDMgZnJvbSAnLi9hc3NldHMvcGFsZXR0ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NCBmcm9tICcuL2Fzc2V0cy9wYXBlcl9jbGlwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ1IGZyb20gJy4vYXNzZXRzL3BhcnRpYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDYgZnJvbSAnLi9hc3NldHMvcGF1c2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDcgZnJvbSAnLi9hc3NldHMvcGF5bWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0OCBmcm9tICcuL2Fzc2V0cy9wZW5jaWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDkgZnJvbSAnLi9hc3NldHMvcGVyY2VudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1MCBmcm9tICcuL2Fzc2V0cy9waW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTEgZnJvbSAnLi9hc3NldHMvcGluX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1MiBmcm9tICcuL2Fzc2V0cy9waXBlQnJlYWtzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzUzIGZyb20gJy4vYXNzZXRzL3BpcGVOb0JyZWFrcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1NCBmcm9tICcuL2Fzc2V0cy9waXZvdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1NSBmcm9tICcuL2Fzc2V0cy9wbGF5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU2IGZyb20gJy4vYXNzZXRzL3BsYXlGaWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTcgZnJvbSAnLi9hc3NldHMvcGx1cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1OCBmcm9tICcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1OSBmcm9tICcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjAgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9zcXVhcmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjEgZnJvbSAnLi9hc3NldHMvcG9wb3V0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYyIGZyb20gJy4vYXNzZXRzL3B1c2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjMgZnJvbSAnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY0IGZyb20gJy4vYXNzZXRzL3F1b3RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY1IGZyb20gJy4vYXNzZXRzL3JlZnJlc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjYgZnJvbSAnLi9hc3NldHMvcmVwb3J0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjcgZnJvbSAnLi9hc3NldHMvcmV0dXJuX2tleS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2OCBmcm9tICcuL2Fzc2V0cy9zYXZlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY5IGZyb20gJy4vYXNzZXRzL3NjYWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzcwIGZyb20gJy4vYXNzZXRzL3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3MSBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3MiBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzczIGZyb20gJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzQgZnJvbSAnLi9hc3NldHMvc2Vzc2lvblZpZXdlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3NSBmcm9tICcuL2Fzc2V0cy9zaGFyZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3NiBmcm9tICcuL2Fzc2V0cy9zaGFyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3NyBmcm9tICcuL2Fzc2V0cy9zaW5nbGVfbWV0cmljX3ZpZXdlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3OCBmcm9tICcuL2Fzc2V0cy9zbm93Zmxha2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzkgZnJvbSAnLi9hc3NldHMvc29ydEFzY2VuZGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4MCBmcm9tICcuL2Fzc2V0cy9zb3J0RGVzY2VuZGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4MSBmcm9tICcuL2Fzc2V0cy9zb3J0TGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4MiBmcm9tICcuL2Fzc2V0cy9zb3J0UmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODMgZnJvbSAnLi9hc3NldHMvc29ydF9kb3duLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg0IGZyb20gJy4vYXNzZXRzL3NvcnRfdXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODUgZnJvbSAnLi9hc3NldHMvc29ydGFibGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODYgZnJvbSAnLi9hc3NldHMvc3BhY2VzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg3IGZyb20gJy4vYXNzZXRzL3NwYXJrbGVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg4IGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODkgZnJvbSAnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTAgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5MSBmcm9tICcuL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkyIGZyb20gJy4vYXNzZXRzL3N0YXJfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkzIGZyb20gJy4vYXNzZXRzL3N0YXJfZmlsbGVkX3NwYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk0IGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTUgZnJvbSAnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTYgZnJvbSAnLi9hc3NldHMvc3RhdHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTcgZnJvbSAnLi9hc3NldHMvc3RvcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5OCBmcm9tICcuL2Fzc2V0cy9zdG9wX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5OSBmcm9tICcuL2Fzc2V0cy9zdG9wX3NsYXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDAwIGZyb20gJy4vYXNzZXRzL3N0b3JhZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDEgZnJvbSAnLi9hc3NldHMvc3RyaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDAyIGZyb20gJy4vYXNzZXRzL3N1Ym1vZHVsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMyBmcm9tICcuL2Fzc2V0cy9zdW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDQgZnJvbSAnLi9hc3NldHMvc3dhdGNoX2lucHV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDA1IGZyb20gJy4vYXNzZXRzL3N5bWxpbmsuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDYgZnJvbSAnLi9hc3NldHMvdGFibGVPZkNvbnRlbnRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDA3IGZyb20gJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwOCBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2V4cGFuZGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDA5IGZyb20gJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDEwIGZyb20gJy4vYXNzZXRzL3RhZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMSBmcm9tICcuL2Fzc2V0cy90ZWFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDEyIGZyb20gJy4vYXNzZXRzL3RlbXBlcmF0dXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDEzIGZyb20gJy4vYXNzZXRzL3RpbWVSZWZyZXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE0IGZyb20gJy4vYXNzZXRzL3RpbWVsaW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE1IGZyb20gJy4vYXNzZXRzL3RpbWVsaW5lV2l0aEFycm93LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE2IGZyb20gJy4vYXNzZXRzL3RpbWVzbGlkZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTcgZnJvbSAnLi9hc3NldHMvdG9rZW5BbGlhcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxOCBmcm9tICcuL2Fzc2V0cy90b2tlbkFubm90YXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTkgZnJvbSAnLi9hc3NldHMvdG9rZW5BcnJheS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyMCBmcm9tICcuL2Fzc2V0cy90b2tlbkJpbmFyeS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyMSBmcm9tICcuL2Fzc2V0cy90b2tlbkJvb2xlYW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjIgZnJvbSAnLi9hc3NldHMvdG9rZW5DbGFzcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyMyBmcm9tICcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjQgZnJvbSAnLi9hc3NldHMvdG9rZW5Db25zdGFudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyNSBmcm9tICcuL2Fzc2V0cy90b2tlbkRhdGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjYgZnJvbSAnLi9hc3NldHMvdG9rZW5EaW1lbnNpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjcgZnJvbSAnLi9hc3NldHMvdG9rZW5FbGVtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI4IGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyOSBmcm9tICcuL2Fzc2V0cy90b2tlbkVudW1NZW1iZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzAgZnJvbSAnLi9hc3NldHMvdG9rZW5FdmVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzMSBmcm9tICcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzMiBmcm9tICcuL2Fzc2V0cy90b2tlbkZpZWxkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMzIGZyb20gJy4vYXNzZXRzL3Rva2VuRmlsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzNCBmcm9tICcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzNSBmcm9tICcuL2Fzc2V0cy90b2tlbkZ1bmN0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM2IGZyb20gJy4vYXNzZXRzL3Rva2VuR2VvLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM3IGZyb20gJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM4IGZyb20gJy4vYXNzZXRzL3Rva2VuSVAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzkgZnJvbSAnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDAgZnJvbSAnLi9hc3NldHMvdG9rZW5Kb2luLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQxIGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQyIGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5d29yZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MyBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldGhvZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NCBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0NvdW50ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDUgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NiBmcm9tICcuL2Fzc2V0cy90b2tlbk1vZHVsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NyBmcm9tICcuL2Fzc2V0cy90b2tlbk5hbWVzcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0OCBmcm9tICcuL2Fzc2V0cy90b2tlbk5lc3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0OSBmcm9tICcuL2Fzc2V0cy90b2tlbk51bGwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTAgZnJvbSAnLi9hc3NldHMvdG9rZW5OdW1iZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTEgZnJvbSAnLi9hc3NldHMvdG9rZW5PYmplY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTIgZnJvbSAnLi9hc3NldHMvdG9rZW5PcGVyYXRvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MyBmcm9tICcuL2Fzc2V0cy90b2tlblBhY2thZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTQgZnJvbSAnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTUgZnJvbSAnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU2IGZyb20gJy4vYXNzZXRzL3Rva2VuUHJvcGVydHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTcgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5nZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OCBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU5IGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYwIGZyb20gJy4vYXNzZXRzL3Rva2VuUmVwby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MSBmcm9tICcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjIgZnJvbSAnLi9hc3NldHMvdG9rZW5TZW1hbnRpY1RleHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjMgZnJvbSAnLi9hc3NldHMvdG9rZW5TaGFwZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NCBmcm9tICcuL2Fzc2V0cy90b2tlblN0cmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NSBmcm9tICcuL2Fzc2V0cy90b2tlblN0cnVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NiBmcm9tICcuL2Fzc2V0cy90b2tlblN5bWJvbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NyBmcm9tICcuL2Fzc2V0cy90b2tlblRhZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2OCBmcm9tICcuL2Fzc2V0cy90b2tlblRleHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjkgZnJvbSAnLi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDcwIGZyb20gJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzEgZnJvbSAnLi9hc3NldHMvdG9rZW5WZWN0b3JEZW5zZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MiBmcm9tICcuL2Fzc2V0cy90b2tlblZlY3RvclNwYXJzZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MyBmcm9tICcuL2Fzc2V0cy90cmFpbmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NCBmcm9tICcuL2Fzc2V0cy90cmFuc2l0aW9uTGVmdEluLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc1IGZyb20gJy4vYXNzZXRzL3RyYW5zaXRpb25MZWZ0T3V0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc2IGZyb20gJy4vYXNzZXRzL3RyYW5zaXRpb25Ub3BJbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NyBmcm9tICcuL2Fzc2V0cy90cmFuc2l0aW9uVG9wT3V0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc4IGZyb20gJy4vYXNzZXRzL3RyYXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc5IGZyb20gJy4vYXNzZXRzL3VuZm9sZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MCBmcm9tICcuL2Fzc2V0cy91bmxpbmsuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODEgZnJvbSAnLi9hc3NldHMvdXNlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MiBmcm9tICcuL2Fzc2V0cy91c2VyQXZhdGFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDgzIGZyb20gJy4vYXNzZXRzL3VzZXJzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg0IGZyb20gJy4vYXNzZXRzL3ZlY3Rvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NSBmcm9tICcuL2Fzc2V0cy92aWRlb1BsYXllci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NiBmcm9tICcuL2Fzc2V0cy92aXNfYXJlYS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NyBmcm9tICcuL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg4IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4OSBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWxfc3RhY2tlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MCBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDkxIGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MiBmcm9tICcuL2Fzc2V0cy92aXNfZ2F1Z2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTMgZnJvbSAnLi9hc3NldHMvdmlzX2dvYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTQgZnJvbSAnLi9hc3NldHMvdmlzX2xpbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTUgZnJvbSAnLi9hc3NldHMvdmlzX21hcF9jb29yZGluYXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk2IGZyb20gJy4vYXNzZXRzL3Zpc19tYXBfcmVnaW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk3IGZyb20gJy4vYXNzZXRzL3Zpc19tZXRyaWMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTggZnJvbSAnLi9hc3NldHMvdmlzX3BpZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OSBmcm9tICcuL2Fzc2V0cy92aXNfdGFibGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDAgZnJvbSAnLi9hc3NldHMvdmlzX3RhZ19jbG91ZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwMSBmcm9tICcuL2Fzc2V0cy92aXNfdGV4dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwMiBmcm9tICcuL2Fzc2V0cy92aXNfdGltZWxpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDMgZnJvbSAnLi9hc3NldHMvdmlzX3ZlZ2EuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDQgZnJvbSAnLi9hc3NldHMvdmlzX3Zpc3VhbF9idWlsZGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA1IGZyb20gJy4vYXNzZXRzL3dhcm5pbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDYgZnJvbSAnLi9hc3NldHMvd2FybmluZ0ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwNyBmcm9tICcuL2Fzc2V0cy93b3JkV3JhcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwOCBmcm9tICcuL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA5IGZyb20gJy4vYXNzZXRzL3dyZW5jaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMCBmcm9tICcuL2Fzc2V0cy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTExIGZyb20gJy4vYXNzZXRzL2FnZ3JlZ2F0ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMiBmcm9tICcuL2Fzc2V0cy9hbGVydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMyBmcm9tICcuL2Fzc2V0cy9hbmFseXplRXZlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTQgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZV9ldmVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNSBmcm9tICcuL2Fzc2V0cy9hbm5vdGF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE2IGZyb20gJy4vYXNzZXRzL2Fub21hbHlfY2hhcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTcgZnJvbSAnLi9hc3NldHMvYW5vbWFseV9zd2ltX2xhbmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTggZnJvbSAnLi9hc3NldHMvYXBtX3RyYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE5IGZyb20gJy4vYXNzZXRzL2FwcF9hZGRfZGF0YSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyMCBmcm9tICcuL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjEgZnJvbSAnLi9hc3NldHMvYXBwX2FnZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIyIGZyb20gJy4vYXNzZXRzL2FwcF9hcG0nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjMgZnJvbSAnLi9hc3NldHMvYXBwX2FwcF9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjQgZnJvbSAnLi9hc3NldHMvYXBwX2F1ZGl0YmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyNSBmcm9tICcuL2Fzc2V0cy9hcHBfY2FudmFzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI2IGZyb20gJy4vYXNzZXRzL2FwcF9jYXNlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyNyBmcm9tICcuL2Fzc2V0cy9hcHBfY29kZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyOCBmcm9tICcuL2Fzc2V0cy9hcHBfY29uc29sZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyOSBmcm9tICcuL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzMCBmcm9tICcuL2Fzc2V0cy9hcHBfZGFzaGJvYXJkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMxIGZyb20gJy4vYXNzZXRzL2FwcF9kZXZ0b29scyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzMiBmcm9tICcuL2Fzc2V0cy9hcHBfZGlzY292ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzMgZnJvbSAnLi9hc3NldHMvYXBwX2Vtcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzNCBmcm9tICcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzUgZnJvbSAnLi9hc3NldHMvYXBwX2ZsZWV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM2IGZyb20gJy4vYXNzZXRzL2FwcF9naXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzcgZnJvbSAnLi9hc3NldHMvYXBwX2dyYXBoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM4IGZyb20gJy4vYXNzZXRzL2FwcF9ncm9rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM5IGZyb20gJy4vYXNzZXRzL2FwcF9oZWFydGJlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDAgZnJvbSAnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDEgZnJvbSAnLi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDIgZnJvbSAnLi9hc3NldHMvYXBwX2luZGV4X3JvbGx1cCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0MyBmcm9tICcuL2Fzc2V0cy9hcHBfbGVucyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0NCBmcm9tICcuL2Fzc2V0cy9hcHBfbG9ncyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0NSBmcm9tICcuL2Fzc2V0cy9hcHBfbWFuYWdlbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0NiBmcm9tICcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0NyBmcm9tICcuL2Fzc2V0cy9hcHBfbWV0cmljcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0OCBmcm9tICcuL2Fzc2V0cy9hcHBfbWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDkgZnJvbSAnLi9hc3NldHMvYXBwX21vbml0b3JpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTAgZnJvbSAnLi9hc3NldHMvYXBwX25vdGVib29rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUxIGZyb20gJy4vYXNzZXRzL2FwcF9wYWNrZXRiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUyIGZyb20gJy4vYXNzZXRzL2FwcF9waXBlbGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1MyBmcm9tICcuL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU0IGZyb20gJy4vYXNzZXRzL2FwcF9yZXBvcnRpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTUgZnJvbSAnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTYgZnJvbSAnLi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1NyBmcm9tICcuL2Fzc2V0cy9hcHBfc2VjdXJpdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTggZnJvbSAnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1OSBmcm9tICcuL2Fzc2V0cy9hcHBfc3BhY2VzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYwIGZyb20gJy4vYXNzZXRzL2FwcF9zcWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjEgZnJvbSAnLi9hc3NldHMvYXBwX3RpbWVsaW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYyIGZyb20gJy4vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2MyBmcm9tICcuL2Fzc2V0cy9hcHBfdXB0aW1lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY0IGZyb20gJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NSBmcm9tICcuL2Fzc2V0cy9hcHBfdmlzdWFsaXplJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY2IGZyb20gJy4vYXNzZXRzL2FwcF92dWxuZXJhYmlsaXR5X21hbmFnZW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjcgZnJvbSAnLi9hc3NldHMvYXBwX3dhdGNoZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjggZnJvbSAnLi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjkgZnJvbSAnLi9hc3NldHMvYXBwcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MCBmcm9tICcuL2Fzc2V0cy9hcnJvd0VuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MSBmcm9tICcuL2Fzc2V0cy9hcnJvd1N0YXJ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTcyIGZyb20gJy4vYXNzZXRzL2Fycm93X2Rvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzMgZnJvbSAnLi9hc3NldHMvYXJyb3dfbGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3NCBmcm9tICcuL2Fzc2V0cy9hcnJvd19yaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3NSBmcm9tICcuL2Fzc2V0cy9hcnJvd191cCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3NiBmcm9tICcuL2Fzc2V0cy9hcnRpY2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc3IGZyb20gJy4vYXNzZXRzL2FzdGVyaXNrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc4IGZyb20gJy4vYXNzZXRzL2F0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc5IGZyb20gJy4vYXNzZXRzL2JlYWtlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MCBmcm9tICcuL2Fzc2V0cy9iZWxsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTgxIGZyb20gJy4vYXNzZXRzL2JlbGxTbGFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MiBmcm9tICcuL2Fzc2V0cy9iZXRhJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTgzIGZyb20gJy4vYXNzZXRzL2JvbHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODQgZnJvbSAnLi9hc3NldHMvYm94ZXNfaG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4NSBmcm9tICcuL2Fzc2V0cy9ib3hlc192ZXJ0aWNhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4NiBmcm9tICcuL2Fzc2V0cy9icmFuY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODcgZnJvbSAnLi9hc3NldHMvYnJhbmNoVXNlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4OCBmcm9tICcuL2Fzc2V0cy9icm9vbSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4OSBmcm9tICcuL2Fzc2V0cy9icnVzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MCBmcm9tICcuL2Fzc2V0cy9idWcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTEgZnJvbSAnLi9hc3NldHMvYnVsbHNleWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTIgZnJvbSAnLi9hc3NldHMvY2FsZW5kYXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTMgZnJvbSAnLi9hc3NldHMvY2hhbmdlX3BvaW50X2RldGVjdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5NCBmcm9tICcuL2Fzc2V0cy9jaGVjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5NSBmcm9tICcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk2IGZyb20gJy4vYXNzZXRzL2NoZWVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk3IGZyb20gJy4vYXNzZXRzL2NsaWNrTGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5OCBmcm9tICcuL2Fzc2V0cy9jbGlja1JpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk5IGZyb20gJy4vYXNzZXRzL2Nsb2NrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAwIGZyb20gJy4vYXNzZXRzL2Nsb2NrQ291bnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMSBmcm9tICcuL2Fzc2V0cy9jbG91ZERyaXp6bGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDIgZnJvbSAnLi9hc3NldHMvY2xvdWRTdG9ybXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDMgZnJvbSAnLi9hc3NldHMvY2xvdWRTdW5ueSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNCBmcm9tICcuL2Fzc2V0cy9jbHVzdGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA1IGZyb20gJy4vYXNzZXRzL2NvbG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA2IGZyb20gJy4vYXNzZXRzL2NvbXB1dGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDcgZnJvbSAnLi9hc3NldHMvY29uc29sZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwOCBmcm9tICcuL2Fzc2V0cy9jb250YWluZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDkgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEwIGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZUJlbG93JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjExIGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMiBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5V2l0aGluJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEzIGZyb20gJy4vYXNzZXRzL2NvbnRyb2xzX2hvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTQgZnJvbSAnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTUgZnJvbSAnLi9hc3NldHMvY29weSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNiBmcm9tICcuL2Fzc2V0cy9jb3B5X2NsaXBib2FyZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNyBmcm9tICcuL2Fzc2V0cy9jcm9zcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxOCBmcm9tICcuL2Fzc2V0cy9jcm9zc0luQ2lyY2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE5IGZyb20gJy4vYXNzZXRzL2Nyb3NzX2luX2NpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyMCBmcm9tICcuL2Fzc2V0cy9jcm9zc2hhaXJzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIxIGZyb20gJy4vYXNzZXRzL2N1cnJlbmN5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIyIGZyb20gJy4vYXNzZXRzL2N1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyMyBmcm9tICcuL2Fzc2V0cy9kYXRhYmFzZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNCBmcm9tICcuL2Fzc2V0cy9kZXNrdG9wJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI1IGZyb20gJy4vYXNzZXRzL2RpZmYnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjYgZnJvbSAnLi9hc3NldHMvZGlzY3Vzcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNyBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyOCBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudEVkaXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjkgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRhdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzMCBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzEgZnJvbSAnLi9hc3NldHMvZG90JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjMyIGZyb20gJy4vYXNzZXRzL2RvdEluQ2lyY2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjMzIGZyb20gJy4vYXNzZXRzL2RvdWJsZUFycm93TGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNCBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjM1IGZyb20gJy4vYXNzZXRzL2Rvd25sb2FkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjM2IGZyb20gJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjM3IGZyb20gJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzOCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzkgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQ2VudGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQwIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDEgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQyIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblJpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQzIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0NCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDUgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0NiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDcgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0OCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fY2VudGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ5IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUwIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYm9sZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUzIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU0IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9jb21tZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU1IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9oZWFkaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU2IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTcgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2xpbmsnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTggZnJvbSAnLi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1OSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfcmVkbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3Jfc3RyaWtlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYxIGZyb20gJy4vYXNzZXRzL2VkaXRvcl90YWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYzIGZyb20gJy4vYXNzZXRzL2VkaXRvcl91bmRvJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY0IGZyb20gJy4vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NSBmcm9tICcuL2Fzc2V0cy9lbWFpbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NiBmcm9tICcuL2Fzc2V0cy9lbXB0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NyBmcm9tICcuL2Fzc2V0cy9lbmRwb2ludCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2OCBmcm9tICcuL2Fzc2V0cy9lcWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjkgZnJvbSAnLi9hc3NldHMvZXJhc2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjcwIGZyb20gJy4vYXNzZXRzL2Vycm9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjcxIGZyb20gJy4vYXNzZXRzL2Vycm9yRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjcyIGZyb20gJy4vYXNzZXRzL2VzcWxWaXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzMgZnJvbSAnLi9hc3NldHMvZXhpdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3NCBmcm9tICcuL2Fzc2V0cy9leHBhbmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzUgZnJvbSAnLi9hc3NldHMvZXhwYW5kTWluaSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3NiBmcm9tICcuL2Fzc2V0cy9leHBvcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzcgZnJvbSAnLi9hc3NldHMvZXllJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc4IGZyb20gJy4vYXNzZXRzL2V5ZV9jbG9zZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzkgZnJvbSAnLi9hc3NldHMvZmFjZV9oYXBweSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4MCBmcm9tICcuL2Fzc2V0cy9mYWNlX25ldXRyYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODEgZnJvbSAnLi9hc3NldHMvZmFjZV9zYWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODIgZnJvbSAnLi9hc3NldHMvZmllbGRfc3RhdGlzdGljcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4MyBmcm9tICcuL2Fzc2V0cy9maWx0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODQgZnJvbSAnLi9hc3NldHMvZmlsdGVyRXhjbHVkZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4NSBmcm9tICcuL2Fzc2V0cy9maWx0ZXJJZ25vcmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODYgZnJvbSAnLi9hc3NldHMvZmlsdGVySW5DaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODcgZnJvbSAnLi9hc3NldHMvZmlsdGVySW5jbHVkZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4OCBmcm9tICcuL2Fzc2V0cy9mbGFnJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg5IGZyb20gJy4vYXNzZXRzL2ZvbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTAgZnJvbSAnLi9hc3NldHMvZm9sZGVyX2NoZWNrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkxIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jbG9zZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTIgZnJvbSAnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkzIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9vcGVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk0IGZyb20gJy4vYXNzZXRzL2ZyYW1lTmV4dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5NSBmcm9tICcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk2IGZyb20gJy4vYXNzZXRzL2Z1bGxTY3JlZW5FeGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk3IGZyb20gJy4vYXNzZXRzL2Z1bGxfc2NyZWVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk4IGZyb20gJy4vYXNzZXRzL2Z1bmN0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk5IGZyb20gJy4vYXNzZXRzL2dlYXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDAgZnJvbSAnLi9hc3NldHMvZ2xhc3Nlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwMSBmcm9tICcuL2Fzc2V0cy9nbG9iZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwMiBmcm9tICcuL2Fzc2V0cy9ncmFiJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAzIGZyb20gJy4vYXNzZXRzL2dyYWJPbW5pZGlyZWN0aW9uYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDQgZnJvbSAnLi9hc3NldHMvZ3JhYl9ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA1IGZyb20gJy4vYXNzZXRzL2dyYWRpZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA2IGZyb20gJy4vYXNzZXRzL2dyaWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDcgZnJvbSAnLi9hc3NldHMvaGVhcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDggZnJvbSAnLi9hc3NldHMvaGVhdG1hcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwOSBmcm9tICcuL2Fzc2V0cy9oZWxwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzEwIGZyb20gJy4vYXNzZXRzL2hvbWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTEgZnJvbSAnLi9hc3NldHMvaUluQ2lyY2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzEyIGZyb20gJy4vYXNzZXRzL2ltYWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzEzIGZyb20gJy4vYXNzZXRzL2ltcG9ydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxNCBmcm9tICcuL2Fzc2V0cy9pbmRleCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxNSBmcm9tICcuL2Fzc2V0cy9pbmRleFRlbXBvcmFyeSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxNiBmcm9tICcuL2Fzc2V0cy9pbmRleF9jbG9zZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxNyBmcm9tICcuL2Fzc2V0cy9pbmRleF9lZGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE4IGZyb20gJy4vYXNzZXRzL2luZGV4X2ZsdXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE5IGZyb20gJy4vYXNzZXRzL2luZGV4X21hcHBpbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjAgZnJvbSAnLi9hc3NldHMvaW5kZXhfb3Blbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyMSBmcm9tICcuL2Fzc2V0cy9pbmRleF9ydW50aW1lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIyIGZyb20gJy4vYXNzZXRzL2luZGV4X3NldHRpbmdzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIzIGZyb20gJy4vYXNzZXRzL2luZmluaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI0IGZyb20gJy4vYXNzZXRzL2lucHV0T3V0cHV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI1IGZyb20gJy4vYXNzZXRzL2luc3BlY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjYgZnJvbSAnLi9hc3NldHMvaW52ZXJ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI3IGZyb20gJy4vYXNzZXRzL2lwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI4IGZyb20gJy4vYXNzZXRzL2lzc3VlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI5IGZyb20gJy4vYXNzZXRzL2tleSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczMCBmcm9tICcuL2Fzc2V0cy9rZXlib2FyZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczMSBmcm9tICcuL2Fzc2V0cy9rcWxfZmllbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzIgZnJvbSAnLi9hc3NldHMva3FsX2Z1bmN0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzMzIGZyb20gJy4vYXNzZXRzL2txbF9vcGVyYW5kJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM0IGZyb20gJy4vYXNzZXRzL2txbF9zZWxlY3Rvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNSBmcm9tICcuL2Fzc2V0cy9rcWxfdmFsdWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzYgZnJvbSAnLi9hc3NldHMva3ViZXJuZXRlc05vZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzcgZnJvbSAnLi9hc3NldHMva3ViZXJuZXRlc1BvZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczOCBmcm9tICcuL2Fzc2V0cy9sYXVuY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzkgZnJvbSAnLi9hc3NldHMvbGF5ZXJzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQwIGZyb20gJy4vYXNzZXRzL2xldHRlcmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MSBmcm9tICcuL2Fzc2V0cy9saW5lRGFzaGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQyIGZyb20gJy4vYXNzZXRzL2xpbmVEb3R0ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDMgZnJvbSAnLi9hc3NldHMvbGluZVNvbGlkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ0IGZyb20gJy4vYXNzZXRzL2xpbmsnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDUgZnJvbSAnLi9hc3NldHMvbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0NiBmcm9tICcuL2Fzc2V0cy9saXN0X2FkZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0NyBmcm9tICcuL2Fzc2V0cy9sb2NrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ4IGZyb20gJy4vYXNzZXRzL2xvY2tPcGVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ5IGZyb20gJy4vYXNzZXRzL2xvZ19wYXR0ZXJuX2FuYWx5c2lzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUwIGZyb20gJy4vYXNzZXRzL2xvZ19yYXRlX2FuYWx5c2lzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUxIGZyb20gJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUyIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBhY2hlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUzIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBwX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3c19tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU2IGZyb20gJy4vYXNzZXRzL2xvZ29fYXp1cmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTcgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZV9tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU4IGZyb20gJy4vYXNzZXRzL2xvZ29fYmVhdHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTkgZnJvbSAnLi9hc3NldHMvbG9nb19idXNpbmVzc19hbmFseXRpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjAgZnJvbSAnLi9hc3NldHMvbG9nb19jZXBoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYxIGZyb20gJy4vYXNzZXRzL2xvZ29fY2xvdWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjIgZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZF9lY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjMgZnJvbSAnLi9hc3NldHMvbG9nb19jb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY0IGZyb20gJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjUgZnJvbSAnLi9hc3NldHMvbG9nb19jb3VjaGJhc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjYgZnJvbSAnLi9hc3NldHMvbG9nb19kb2NrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjcgZnJvbSAnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY4IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpYyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2OSBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzAgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzcxIGZyb20gJy4vYXNzZXRzL2xvZ29fZW50ZXJwcmlzZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzIgZnJvbSAnLi9hc3NldHMvbG9nb19ldGNkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzczIGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc0IGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwX21vbm8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzUgZnJvbSAnLi9hc3NldHMvbG9nb19naXRodWInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzYgZnJvbSAnLi9hc3NldHMvbG9nb19nbWFpbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3NyBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvbGFuZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3OCBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc5IGZyb20gJy4vYXNzZXRzL2xvZ29faGFwcm94eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2libSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2libV9tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzgyIGZyb20gJy4vYXNzZXRzL2xvZ29fa2Fma2EnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODMgZnJvbSAnLi9hc3NldHMvbG9nb19raWJhbmEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODQgZnJvbSAnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg1IGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nZ2luZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2xvZ3N0YXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg3IGZyb20gJy4vYXNzZXRzL2xvZ29fbWFwcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4OCBmcm9tICcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4OSBmcm9tICcuL2Fzc2V0cy9sb2dvX21ldHJpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTAgZnJvbSAnLi9hc3NldHMvbG9nb19tb25nb2RiJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkxIGZyb20gJy4vYXNzZXRzL2xvZ29fbXlzcWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTIgZnJvbSAnLi9hc3NldHMvbG9nb19uZ2lueCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MyBmcm9tICcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTQgZnJvbSAnLi9hc3NldHMvbG9nb19vc3F1ZXJ5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk1IGZyb20gJy4vYXNzZXRzL2xvZ29fcGhwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk2IGZyb20gJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTcgZnJvbSAnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk4IGZyb20gJy4vYXNzZXRzL2xvZ29fcmFiYml0bXEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTkgZnJvbSAnLi9hc3NldHMvbG9nb19yZWRpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwMCBmcm9tICcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAxIGZyb20gJy4vYXNzZXRzL2xvZ29fc2l0ZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDIgZnJvbSAnLi9hc3NldHMvbG9nb19za2V0Y2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDMgZnJvbSAnLi9hc3NldHMvbG9nb19zbGFjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwNCBmcm9tICcuL2Fzc2V0cy9sb2dvX3VwdGltZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwNSBmcm9tICcuL2Fzc2V0cy9sb2dvX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwNiBmcm9tICcuL2Fzc2V0cy9sb2dvX3dlYmhvb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDcgZnJvbSAnLi9hc3NldHMvbG9nb193aW5kb3dzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA4IGZyb20gJy4vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwOSBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTAgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaWYnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTEgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTIgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEzIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE0IGZyb20gJy4vYXNzZXRzL21hZ25ldCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNSBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE2IGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTcgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE4IGZyb20gJy4vYXNzZXRzL21hcF9tYXJrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTkgZnJvbSAnLi9hc3NldHMvbWVtb3J5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIwIGZyb20gJy4vYXNzZXRzL21lbnUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjEgZnJvbSAnLi9hc3NldHMvbWVudURvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjIgZnJvbSAnLi9hc3NldHMvbWVudUxlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjMgZnJvbSAnLi9hc3NldHMvbWVudVJpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI0IGZyb20gJy4vYXNzZXRzL21lbnVVcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyNSBmcm9tICcuL2Fzc2V0cy9tZXJnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyNiBmcm9tICcuL2Fzc2V0cy9taW5pbWl6ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyNyBmcm9tICcuL2Fzc2V0cy9taW51cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyOCBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjkgZnJvbSAnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzMCBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9zcXVhcmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzEgZnJvbSAnLi9hc3NldHMvbWxfY2xhc3NpZmljYXRpb25fam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMyIGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9hZHZhbmNlZF9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzMgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzQgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM1IGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9zaW5nbGVfbWV0cmljX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNiBmcm9tICcuL2Fzc2V0cy9tbF9kYXRhX3Zpc3VhbGl6ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzcgZnJvbSAnLi9hc3NldHMvbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM4IGZyb20gJy4vYXNzZXRzL21sX3JlZ3Jlc3Npb25fam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM5IGZyb20gJy4vYXNzZXRzL21vYmlsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0MCBmcm9tICcuL2Fzc2V0cy9tb29uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQxIGZyb20gJy4vYXNzZXRzL21vdmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDIgZnJvbSAnLi9hc3NldHMvbmFtZXNwYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQzIGZyb20gJy4vYXNzZXRzL25lc3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0NCBmcm9tICcuL2Fzc2V0cy9uZXdfY2hhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0NSBmcm9tICcuL2Fzc2V0cy9ub2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ2IGZyb20gJy4vYXNzZXRzL251bWJlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0NyBmcm9tICcuL2Fzc2V0cy9vZmZsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ4IGZyb20gJy4vYXNzZXRzL29ubGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0OSBmcm9tICcuL2Fzc2V0cy9wYWNrYWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODUwIGZyb20gJy4vYXNzZXRzL3BhZ2VTZWxlY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTEgZnJvbSAnLi9hc3NldHMvcGFnZXNTZWxlY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTIgZnJvbSAnLi9hc3NldHMvcGFpbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTMgZnJvbSAnLi9hc3NldHMvcGFsZXR0ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NCBmcm9tICcuL2Fzc2V0cy9wYXBlcl9jbGlwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODU1IGZyb20gJy4vYXNzZXRzL3BhcnRpYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTYgZnJvbSAnLi9hc3NldHMvcGF1c2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTcgZnJvbSAnLi9hc3NldHMvcGF5bWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1OCBmcm9tICcuL2Fzc2V0cy9wZW5jaWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTkgZnJvbSAnLi9hc3NldHMvcGVyY2VudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2MCBmcm9tICcuL2Fzc2V0cy9waW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjEgZnJvbSAnLi9hc3NldHMvcGluX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2MiBmcm9tICcuL2Fzc2V0cy9waXBlQnJlYWtzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYzIGZyb20gJy4vYXNzZXRzL3BpcGVOb0JyZWFrcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2NCBmcm9tICcuL2Fzc2V0cy9waXZvdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2NSBmcm9tICcuL2Fzc2V0cy9wbGF5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY2IGZyb20gJy4vYXNzZXRzL3BsYXlGaWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjcgZnJvbSAnLi9hc3NldHMvcGx1cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2OCBmcm9tICcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2OSBmcm9tICcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzAgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9zcXVhcmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzEgZnJvbSAnLi9hc3NldHMvcG9wb3V0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODcyIGZyb20gJy4vYXNzZXRzL3B1c2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzMgZnJvbSAnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc0IGZyb20gJy4vYXNzZXRzL3F1b3RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc1IGZyb20gJy4vYXNzZXRzL3JlZnJlc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzYgZnJvbSAnLi9hc3NldHMvcmVwb3J0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzcgZnJvbSAnLi9hc3NldHMvcmV0dXJuX2tleSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3OCBmcm9tICcuL2Fzc2V0cy9zYXZlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc5IGZyb20gJy4vYXNzZXRzL3NjYWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODgwIGZyb20gJy4vYXNzZXRzL3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4MSBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4MiBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODgzIGZyb20gJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODQgZnJvbSAnLi9hc3NldHMvc2Vzc2lvblZpZXdlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4NSBmcm9tICcuL2Fzc2V0cy9zaGFyZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4NiBmcm9tICcuL2Fzc2V0cy9zaGFyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4NyBmcm9tICcuL2Fzc2V0cy9zaW5nbGVfbWV0cmljX3ZpZXdlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4OCBmcm9tICcuL2Fzc2V0cy9zbm93Zmxha2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODkgZnJvbSAnLi9hc3NldHMvc29ydEFzY2VuZGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MCBmcm9tICcuL2Fzc2V0cy9zb3J0RGVzY2VuZGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MSBmcm9tICcuL2Fzc2V0cy9zb3J0TGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MiBmcm9tICcuL2Fzc2V0cy9zb3J0UmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTMgZnJvbSAnLi9hc3NldHMvc29ydF9kb3duJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk0IGZyb20gJy4vYXNzZXRzL3NvcnRfdXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTUgZnJvbSAnLi9hc3NldHMvc29ydGFibGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTYgZnJvbSAnLi9hc3NldHMvc3BhY2VzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk3IGZyb20gJy4vYXNzZXRzL3NwYXJrbGVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk4IGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTkgZnJvbSAnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDAgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMSBmcm9tICcuL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAyIGZyb20gJy4vYXNzZXRzL3N0YXJfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAzIGZyb20gJy4vYXNzZXRzL3N0YXJfZmlsbGVkX3NwYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTA0IGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDUgZnJvbSAnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDYgZnJvbSAnLi9hc3NldHMvc3RhdHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDcgZnJvbSAnLi9hc3NldHMvc3RvcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwOCBmcm9tICcuL2Fzc2V0cy9zdG9wX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwOSBmcm9tICcuL2Fzc2V0cy9zdG9wX3NsYXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTEwIGZyb20gJy4vYXNzZXRzL3N0b3JhZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MTEgZnJvbSAnLi9hc3NldHMvc3RyaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTEyIGZyb20gJy4vYXNzZXRzL3N1Ym1vZHVsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxMyBmcm9tICcuL2Fzc2V0cy9zdW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MTQgZnJvbSAnLi9hc3NldHMvc3dhdGNoX2lucHV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTE1IGZyb20gJy4vYXNzZXRzL3N5bWxpbmsnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MTYgZnJvbSAnLi9hc3NldHMvdGFibGVPZkNvbnRlbnRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTE3IGZyb20gJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxOCBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2V4cGFuZGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTE5IGZyb20gJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTIwIGZyb20gJy4vYXNzZXRzL3RhZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyMSBmcm9tICcuL2Fzc2V0cy90ZWFyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTIyIGZyb20gJy4vYXNzZXRzL3RlbXBlcmF0dXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTIzIGZyb20gJy4vYXNzZXRzL3RpbWVSZWZyZXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTI0IGZyb20gJy4vYXNzZXRzL3RpbWVsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTI1IGZyb20gJy4vYXNzZXRzL3RpbWVsaW5lV2l0aEFycm93JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTI2IGZyb20gJy4vYXNzZXRzL3RpbWVzbGlkZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MjcgZnJvbSAnLi9hc3NldHMvdG9rZW5BbGlhcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyOCBmcm9tICcuL2Fzc2V0cy90b2tlbkFubm90YXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MjkgZnJvbSAnLi9hc3NldHMvdG9rZW5BcnJheSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkzMCBmcm9tICcuL2Fzc2V0cy90b2tlbkJpbmFyeSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkzMSBmcm9tICcuL2Fzc2V0cy90b2tlbkJvb2xlYW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzIgZnJvbSAnLi9hc3NldHMvdG9rZW5DbGFzcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkzMyBmcm9tICcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzQgZnJvbSAnLi9hc3NldHMvdG9rZW5Db25zdGFudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkzNSBmcm9tICcuL2Fzc2V0cy90b2tlbkRhdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzYgZnJvbSAnLi9hc3NldHMvdG9rZW5EaW1lbnNpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MzcgZnJvbSAnLi9hc3NldHMvdG9rZW5FbGVtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTM4IGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkzOSBmcm9tICcuL2Fzc2V0cy90b2tlbkVudW1NZW1iZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NDAgZnJvbSAnLi9hc3NldHMvdG9rZW5FdmVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0MSBmcm9tICcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0MiBmcm9tICcuL2Fzc2V0cy90b2tlbkZpZWxkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQzIGZyb20gJy4vYXNzZXRzL3Rva2VuRmlsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0NCBmcm9tICcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0NSBmcm9tICcuL2Fzc2V0cy90b2tlbkZ1bmN0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQ2IGZyb20gJy4vYXNzZXRzL3Rva2VuR2VvJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQ3IGZyb20gJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQ4IGZyb20gJy4vYXNzZXRzL3Rva2VuSVAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NDkgZnJvbSAnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTAgZnJvbSAnLi9hc3NldHMvdG9rZW5Kb2luJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTUxIGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTUyIGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5d29yZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk1MyBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldGhvZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk1NCBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0NvdW50ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NTUgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk1NiBmcm9tICcuL2Fzc2V0cy90b2tlbk1vZHVsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk1NyBmcm9tICcuL2Fzc2V0cy90b2tlbk5hbWVzcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk1OCBmcm9tICcuL2Fzc2V0cy90b2tlbk5lc3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk1OSBmcm9tICcuL2Fzc2V0cy90b2tlbk51bGwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NjAgZnJvbSAnLi9hc3NldHMvdG9rZW5OdW1iZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NjEgZnJvbSAnLi9hc3NldHMvdG9rZW5PYmplY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NjIgZnJvbSAnLi9hc3NldHMvdG9rZW5PcGVyYXRvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2MyBmcm9tICcuL2Fzc2V0cy90b2tlblBhY2thZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NjQgZnJvbSAnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NjUgZnJvbSAnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTY2IGZyb20gJy4vYXNzZXRzL3Rva2VuUHJvcGVydHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NjcgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5nZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2OCBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTY5IGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTcwIGZyb20gJy4vYXNzZXRzL3Rva2VuUmVwbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk3MSBmcm9tICcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzIgZnJvbSAnLi9hc3NldHMvdG9rZW5TZW1hbnRpY1RleHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzMgZnJvbSAnLi9hc3NldHMvdG9rZW5TaGFwZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk3NCBmcm9tICcuL2Fzc2V0cy90b2tlblN0cmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk3NSBmcm9tICcuL2Fzc2V0cy90b2tlblN0cnVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk3NiBmcm9tICcuL2Fzc2V0cy90b2tlblN5bWJvbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk3NyBmcm9tICcuL2Fzc2V0cy90b2tlblRhZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk3OCBmcm9tICcuL2Fzc2V0cy90b2tlblRleHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NzkgZnJvbSAnLi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTgwIGZyb20gJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5ODEgZnJvbSAnLi9hc3NldHMvdG9rZW5WZWN0b3JEZW5zZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4MiBmcm9tICcuL2Fzc2V0cy90b2tlblZlY3RvclNwYXJzZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4MyBmcm9tICcuL2Fzc2V0cy90cmFpbmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4NCBmcm9tICcuL2Fzc2V0cy90cmFuc2l0aW9uTGVmdEluJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTg1IGZyb20gJy4vYXNzZXRzL3RyYW5zaXRpb25MZWZ0T3V0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTg2IGZyb20gJy4vYXNzZXRzL3RyYW5zaXRpb25Ub3BJbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4NyBmcm9tICcuL2Fzc2V0cy90cmFuc2l0aW9uVG9wT3V0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTg4IGZyb20gJy4vYXNzZXRzL3RyYXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTg5IGZyb20gJy4vYXNzZXRzL3VuZm9sZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5MCBmcm9tICcuL2Fzc2V0cy91bmxpbmsnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OTEgZnJvbSAnLi9hc3NldHMvdXNlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5MiBmcm9tICcuL2Fzc2V0cy91c2VyQXZhdGFyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTkzIGZyb20gJy4vYXNzZXRzL3VzZXJzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTk0IGZyb20gJy4vYXNzZXRzL3ZlY3Rvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5NSBmcm9tICcuL2Fzc2V0cy92aWRlb1BsYXllcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5NiBmcm9tICcuL2Fzc2V0cy92aXNfYXJlYSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5NyBmcm9tICcuL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTk4IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5OSBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWxfc3RhY2tlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDAgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDEgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAwMiBmcm9tICcuL2Fzc2V0cy92aXNfZ2F1Z2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAzIGZyb20gJy4vYXNzZXRzL3Zpc19nb2FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAwNCBmcm9tICcuL2Fzc2V0cy92aXNfbGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDUgZnJvbSAnLi9hc3NldHMvdmlzX21hcF9jb29yZGluYXRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAwNiBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDcgZnJvbSAnLi9hc3NldHMvdmlzX21ldHJpYyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDggZnJvbSAnLi9hc3NldHMvdmlzX3BpZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDkgZnJvbSAnLi9hc3NldHMvdmlzX3RhYmxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAxMCBmcm9tICcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAxMSBmcm9tICcuL2Fzc2V0cy92aXNfdGV4dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTIgZnJvbSAnLi9hc3NldHMvdmlzX3RpbWVsaW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAxMyBmcm9tICcuL2Fzc2V0cy92aXNfdmVnYSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTQgZnJvbSAnLi9hc3NldHMvdmlzX3Zpc3VhbF9idWlsZGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAxNSBmcm9tICcuL2Fzc2V0cy93YXJuaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAxNiBmcm9tICcuL2Fzc2V0cy93YXJuaW5nRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAxNyBmcm9tICcuL2Fzc2V0cy93b3JkV3JhcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTggZnJvbSAnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTkgZnJvbSAnLi9hc3NldHMvd3JlbmNoJztcbmNvbnN0IF9EeW5hbWljSW1wb3J0TW9kdWxlTWFwID0geycuL2Fzc2V0cy9hY2Nlc3NpYmlsaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTAsJy4vYXNzZXRzL2FnZ3JlZ2F0ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxLCcuL2Fzc2V0cy9hbGVydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyLCcuL2Fzc2V0cy9hbmFseXplRXZlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMywnLi9hc3NldHMvYW5hbHl6ZV9ldmVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0LCcuL2Fzc2V0cy9hbm5vdGF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUsJy4vYXNzZXRzL2Fub21hbHlfY2hhcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNiwnLi9hc3NldHMvYW5vbWFseV9zd2ltX2xhbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNywnLi9hc3NldHMvYXBtX3RyYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgsJy4vYXNzZXRzL2FwcF9hZGRfZGF0YS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5LCcuL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAsJy4vYXNzZXRzL2FwcF9hZ2VudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMSwnLi9hc3NldHMvYXBwX2FwbS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMiwnLi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMsJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQsJy4vYXNzZXRzL2FwcF9jYW52YXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTUsJy4vYXNzZXRzL2FwcF9jYXNlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNiwnLi9hc3NldHMvYXBwX2NvZGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcsJy4vYXNzZXRzL2FwcF9jb25zb2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4LCcuL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOSwnLi9hc3NldHMvYXBwX2Rhc2hib2FyZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMCwnLi9hc3NldHMvYXBwX2RldnRvb2xzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxLCcuL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIsJy4vYXNzZXRzL2FwcF9lbXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjMsJy4vYXNzZXRzL2FwcF9maWxlYmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNCwnLi9hc3NldHMvYXBwX2ZsZWV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1LCcuL2Fzc2V0cy9hcHBfZ2lzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2LCcuL2Fzc2V0cy9hcHBfZ3JhcGguanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjcsJy4vYXNzZXRzL2FwcF9ncm9rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4LCcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5LCcuL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMCwnLi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzEsJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIsJy4vYXNzZXRzL2FwcF9sZW5zLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzLCcuL2Fzc2V0cy9hcHBfbG9ncy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNCwnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUsJy4vYXNzZXRzL2FwcF9tZXRyaWNiZWF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2LCcuL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNywnLi9hc3NldHMvYXBwX21sLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4LCcuL2Fzc2V0cy9hcHBfbW9uaXRvcmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOSwnLi9hc3NldHMvYXBwX25vdGVib29rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwLCcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MSwnLi9hc3NldHMvYXBwX3BpcGVsaW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyLCcuL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzLCcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0LCcuL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NSwnLi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NiwnLi9hc3NldHMvYXBwX3NlY3VyaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3LCcuL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4LCcuL2Fzc2V0cy9hcHBfc3BhY2VzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5LCcuL2Fzc2V0cy9hcHBfc3FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwLCcuL2Fzc2V0cy9hcHBfdGltZWxpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEsJy4vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MiwnLi9hc3NldHMvYXBwX3VwdGltZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MywnLi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0LCcuL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1LCcuL2Fzc2V0cy9hcHBfdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2LCcuL2Fzc2V0cy9hcHBfd2F0Y2hlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NywnLi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTgsJy4vYXNzZXRzL2FwcHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTksJy4vYXNzZXRzL2Fycm93RW5kLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwLCcuL2Fzc2V0cy9hcnJvd1N0YXJ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxLCcuL2Fzc2V0cy9hcnJvd19kb3duLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyLCcuL2Fzc2V0cy9hcnJvd19sZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzLCcuL2Fzc2V0cy9hcnJvd19yaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NCwnLi9hc3NldHMvYXJyb3dfdXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUsJy4vYXNzZXRzL2FydGljbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYsJy4vYXNzZXRzL2FzdGVyaXNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3LCcuL2Fzc2V0cy9hdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OCwnLi9hc3NldHMvYmVha2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5LCcuL2Fzc2V0cy9iZWxsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwLCcuL2Fzc2V0cy9iZWxsU2xhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzEsJy4vYXNzZXRzL2JldGEuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzIsJy4vYXNzZXRzL2JvbHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMsJy4vYXNzZXRzL2JveGVzX2hvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQsJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1LCcuL2Fzc2V0cy9icmFuY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzYsJy4vYXNzZXRzL2JyYW5jaFVzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcsJy4vYXNzZXRzL2Jyb29tLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4LCcuL2Fzc2V0cy9icnVzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OSwnLi9hc3NldHMvYnVnLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwLCcuL2Fzc2V0cy9idWxsc2V5ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MSwnLi9hc3NldHMvY2FsZW5kYXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODIsJy4vYXNzZXRzL2NoYW5nZV9wb2ludF9kZXRlY3Rpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODMsJy4vYXNzZXRzL2NoZWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0LCcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1LCcuL2Fzc2V0cy9jaGVlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NiwnLi9hc3NldHMvY2xpY2tMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3LCcuL2Fzc2V0cy9jbGlja1JpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4LCcuL2Fzc2V0cy9jbG9jay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OSwnLi9hc3NldHMvY2xvY2tDb3VudGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwLCcuL2Fzc2V0cy9jbG91ZERyaXp6bGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTEsJy4vYXNzZXRzL2Nsb3VkU3Rvcm15LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyLCcuL2Fzc2V0cy9jbG91ZFN1bm55LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzLCcuL2Fzc2V0cy9jbHVzdGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk0LCcuL2Fzc2V0cy9jb2xvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NSwnLi9hc3NldHMvY29tcHV0ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NiwnLi9hc3NldHMvY29uc29sZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NywnLi9hc3NldHMvY29udGFpbmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk4LCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTksJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZUJlbG93LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMCwnLi9hc3NldHMvY29udGludWl0eUJlbG93LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMSwnLi9hc3NldHMvY29udGludWl0eVdpdGhpbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDIsJy4vYXNzZXRzL2NvbnRyb2xzX2hvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAzLCcuL2Fzc2V0cy9jb250cm9sc192ZXJ0aWNhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDQsJy4vYXNzZXRzL2NvcHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA1LCcuL2Fzc2V0cy9jb3B5X2NsaXBib2FyZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDYsJy4vYXNzZXRzL2Nyb3NzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwNywnLi9hc3NldHMvY3Jvc3NJbkNpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDgsJy4vYXNzZXRzL2Nyb3NzX2luX2NpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDksJy4vYXNzZXRzL2Nyb3NzaGFpcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEwLCcuL2Fzc2V0cy9jdXJyZW5jeS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTEsJy4vYXNzZXRzL2N1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTIsJy4vYXNzZXRzL2RhdGFiYXNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExMywnLi9hc3NldHMvZGVza3RvcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTQsJy4vYXNzZXRzL2RpZmYuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE1LCcuL2Fzc2V0cy9kaXNjdXNzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExNiwnLi9hc3NldHMvZG9jdW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE3LCcuL2Fzc2V0cy9kb2N1bWVudEVkaXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE4LCcuL2Fzc2V0cy9kb2N1bWVudGF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExOSwnLi9hc3NldHMvZG9jdW1lbnRzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMCwnLi9hc3NldHMvZG90LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMSwnLi9hc3NldHMvZG90SW5DaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIyLCcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIzLCcuL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyNCwnLi9hc3NldHMvZG93bmxvYWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI1LCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjYsJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjcsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkJvdHRvbS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjgsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjksJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMwLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25NaWRkbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMxLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzIsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzMsJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tTGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzQsJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM1LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM2LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcFJpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzNywnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzgsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzOSwnLi9hc3NldHMvZWRpdG9yX2FsaWduX3JpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MCwnLi9hc3NldHMvZWRpdG9yX2JvbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQxLCcuL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MiwnLi9hc3NldHMvZWRpdG9yX2NvZGVfYmxvY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQzLCcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDQsJy4vYXNzZXRzL2VkaXRvcl9oZWFkaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0NSwnLi9hc3NldHMvZWRpdG9yX2l0YWxpYy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDYsJy4vYXNzZXRzL2VkaXRvcl9saW5rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0NywnLi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDgsJy4vYXNzZXRzL2VkaXRvcl9yZWRvLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0OSwnLi9hc3NldHMvZWRpdG9yX3N0cmlrZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTAsJy4vYXNzZXRzL2VkaXRvcl90YWJsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTEsJy4vYXNzZXRzL2VkaXRvcl91bmRlcmxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTUyLCcuL2Fzc2V0cy9lZGl0b3JfdW5kby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTMsJy4vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTQsJy4vYXNzZXRzL2VtYWlsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1NSwnLi9hc3NldHMvZW1wdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU2LCcuL2Fzc2V0cy9lbmRwb2ludC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTcsJy4vYXNzZXRzL2VxbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTgsJy4vYXNzZXRzL2VyYXNlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTksJy4vYXNzZXRzL2Vycm9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2MCwnLi9hc3NldHMvZXJyb3JGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYxLCcuL2Fzc2V0cy9lc3FsVmlzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2MiwnLi9hc3NldHMvZXhpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjMsJy4vYXNzZXRzL2V4cGFuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjQsJy4vYXNzZXRzL2V4cGFuZE1pbmkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY1LCcuL2Fzc2V0cy9leHBvcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY2LCcuL2Fzc2V0cy9leWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY3LCcuL2Fzc2V0cy9leWVfY2xvc2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2OCwnLi9hc3NldHMvZmFjZV9oYXBweS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjksJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzAsJy4vYXNzZXRzL2ZhY2Vfc2FkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3MSwnLi9hc3NldHMvZmllbGRfc3RhdGlzdGljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzIsJy4vYXNzZXRzL2ZpbHRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzMsJy4vYXNzZXRzL2ZpbHRlckV4Y2x1ZGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc0LCcuL2Fzc2V0cy9maWx0ZXJJZ25vcmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc1LCcuL2Fzc2V0cy9maWx0ZXJJbkNpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzYsJy4vYXNzZXRzL2ZpbHRlckluY2x1ZGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc3LCcuL2Fzc2V0cy9mbGFnLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3OCwnLi9hc3NldHMvZm9sZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzksJy4vYXNzZXRzL2ZvbGRlcl9jaGVjay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODAsJy4vYXNzZXRzL2ZvbGRlcl9jbG9zZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgxLCcuL2Fzc2V0cy9mb2xkZXJfZXhjbGFtYXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgyLCcuL2Fzc2V0cy9mb2xkZXJfb3Blbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODMsJy4vYXNzZXRzL2ZyYW1lTmV4dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODQsJy4vYXNzZXRzL2ZyYW1lUHJldmlvdXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg1LCcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODYsJy4vYXNzZXRzL2Z1bGxfc2NyZWVuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4NywnLi9hc3NldHMvZnVuY3Rpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg4LCcuL2Fzc2V0cy9nZWFyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4OSwnLi9hc3NldHMvZ2xhc3Nlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTAsJy4vYXNzZXRzL2dsb2JlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MSwnLi9hc3NldHMvZ3JhYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTIsJy4vYXNzZXRzL2dyYWJPbW5pZGlyZWN0aW9uYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkzLCcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk0LCcuL2Fzc2V0cy9ncmFkaWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTUsJy4vYXNzZXRzL2dyaWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk2LCcuL2Fzc2V0cy9oZWFydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTcsJy4vYXNzZXRzL2hlYXRtYXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk4LCcuL2Fzc2V0cy9oZWxwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5OSwnLi9hc3NldHMvaG9tZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDAsJy4vYXNzZXRzL2lJbkNpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDEsJy4vYXNzZXRzL2ltYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwMiwnLi9hc3NldHMvaW1wb3J0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwMywnLi9hc3NldHMvaW5kZXguanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA0LCcuL2Fzc2V0cy9pbmRleFRlbXBvcmFyeS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDUsJy4vYXNzZXRzL2luZGV4X2Nsb3NlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwNiwnLi9hc3NldHMvaW5kZXhfZWRpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDcsJy4vYXNzZXRzL2luZGV4X2ZsdXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwOCwnLi9hc3NldHMvaW5kZXhfbWFwcGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDksJy4vYXNzZXRzL2luZGV4X29wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjEwLCcuL2Fzc2V0cy9pbmRleF9ydW50aW1lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMSwnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjEyLCcuL2Fzc2V0cy9pbmZpbml0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTMsJy4vYXNzZXRzL2lucHV0T3V0cHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxNCwnLi9hc3NldHMvaW5zcGVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTUsJy4vYXNzZXRzL2ludmVydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTYsJy4vYXNzZXRzL2lwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxNywnLi9hc3NldHMvaXNzdWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE4LCcuL2Fzc2V0cy9rZXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE5LCcuL2Fzc2V0cy9rZXlib2FyZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjAsJy4vYXNzZXRzL2txbF9maWVsZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjEsJy4vYXNzZXRzL2txbF9mdW5jdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjIsJy4vYXNzZXRzL2txbF9vcGVyYW5kLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyMywnLi9hc3NldHMva3FsX3NlbGVjdG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNCwnLi9hc3NldHMva3FsX3ZhbHVlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNSwnLi9hc3NldHMva3ViZXJuZXRlc05vZGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjI2LCcuL2Fzc2V0cy9rdWJlcm5ldGVzUG9kLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNywnLi9hc3NldHMvbGF1bmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyOCwnLi9hc3NldHMvbGF5ZXJzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyOSwnLi9hc3NldHMvbGV0dGVyaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMCwnLi9hc3NldHMvbGluZURhc2hlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzEsJy4vYXNzZXRzL2xpbmVEb3R0ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjMyLCcuL2Fzc2V0cy9saW5lU29saWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjMzLCcuL2Fzc2V0cy9saW5rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNCwnLi9hc3NldHMvbGlzdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzUsJy4vYXNzZXRzL2xpc3RfYWRkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNiwnLi9hc3NldHMvbG9jay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzcsJy4vYXNzZXRzL2xvY2tPcGVuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzOCwnLi9hc3NldHMvbG9nX3BhdHRlcm5fYW5hbHlzaXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM5LCcuL2Fzc2V0cy9sb2dfcmF0ZV9hbmFseXNpcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDAsJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0MSwnLi9hc3NldHMvbG9nb19hcGFjaGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQyLCcuL2Fzc2V0cy9sb2dvX2FwcF9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQzLCcuL2Fzc2V0cy9sb2dvX2F3cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDQsJy4vYXNzZXRzL2xvZ29fYXdzX21vbm8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ1LCcuL2Fzc2V0cy9sb2dvX2F6dXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0NiwnLi9hc3NldHMvbG9nb19henVyZV9tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0NywnLi9hc3NldHMvbG9nb19iZWF0cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDgsJy4vYXNzZXRzL2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0OSwnLi9hc3NldHMvbG9nb19jZXBoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MCwnLi9hc3NldHMvbG9nb19jbG91ZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTEsJy4vYXNzZXRzL2xvZ29fY2xvdWRfZWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MiwnLi9hc3NldHMvbG9nb19jb2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MywnLi9hc3NldHMvbG9nb19jb2Rlc2FuZGJveC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTQsJy4vYXNzZXRzL2xvZ29fY291Y2hiYXNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NSwnLi9hc3NldHMvbG9nb19kb2NrZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU2LCcuL2Fzc2V0cy9sb2dvX2Ryb3B3aXphcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU3LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU4LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU5LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNzZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjYwLCcuL2Fzc2V0cy9sb2dvX2VudGVycHJpc2Vfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MSwnLi9hc3NldHMvbG9nb19ldGNkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MiwnLi9hc3NldHMvbG9nb19nY3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjYzLCcuL2Fzc2V0cy9sb2dvX2djcF9tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NCwnLi9hc3NldHMvbG9nb19naXRodWIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY1LCcuL2Fzc2V0cy9sb2dvX2dtYWlsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NiwnLi9hc3NldHMvbG9nb19nb2xhbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY3LCcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2OCwnLi9hc3NldHMvbG9nb19oYXByb3h5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2OSwnLi9hc3NldHMvbG9nb19pYm0uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjcwLCcuL2Fzc2V0cy9sb2dvX2libV9tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3MSwnLi9hc3NldHMvbG9nb19rYWZrYS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzIsJy4vYXNzZXRzL2xvZ29fa2liYW5hLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3MywnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NCwnLi9hc3NldHMvbG9nb19sb2dnaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NSwnLi9hc3NldHMvbG9nb19sb2dzdGFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzYsJy4vYXNzZXRzL2xvZ29fbWFwcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzcsJy4vYXNzZXRzL2xvZ29fbWVtY2FjaGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3OCwnLi9hc3NldHMvbG9nb19tZXRyaWNzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3OSwnLi9hc3NldHMvbG9nb19tb25nb2RiLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4MCwnLi9hc3NldHMvbG9nb19teXNxbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODEsJy4vYXNzZXRzL2xvZ29fbmdpbnguanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgyLCcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgzLCcuL2Fzc2V0cy9sb2dvX29zcXVlcnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg0LCcuL2Fzc2V0cy9sb2dvX3BocC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODUsJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg2LCcuL2Fzc2V0cy9sb2dvX3Byb21ldGhldXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg3LCcuL2Fzc2V0cy9sb2dvX3JhYmJpdG1xLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4OCwnLi9hc3NldHMvbG9nb19yZWRpcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODksJy4vYXNzZXRzL2xvZ29fc2VjdXJpdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjkwLCcuL2Fzc2V0cy9sb2dvX3NpdGVfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MSwnLi9hc3NldHMvbG9nb19za2V0Y2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjkyLCcuL2Fzc2V0cy9sb2dvX3NsYWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MywnLi9hc3NldHMvbG9nb191cHRpbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk0LCcuL2Fzc2V0cy9sb2dvX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTUsJy4vYXNzZXRzL2xvZ29fd2ViaG9vay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTYsJy4vYXNzZXRzL2xvZ29fd2luZG93cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTcsJy4vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTgsJy4vYXNzZXRzL2xvZ3N0YXNoX2ZpbHRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTksJy4vYXNzZXRzL2xvZ3N0YXNoX2lmLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwMCwnLi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAxLCcuL2Fzc2V0cy9sb2dzdGFzaF9vdXRwdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAyLCcuL2Fzc2V0cy9sb2dzdGFzaF9xdWV1ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDMsJy4vYXNzZXRzL21hZ25ldC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDQsJy4vYXNzZXRzL21hZ25pZnlXaXRoRXhjbGFtYXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA1LCcuL2Fzc2V0cy9tYWduaWZ5V2l0aE1pbnVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNiwnLi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNywnLi9hc3NldHMvbWFwX21hcmtlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDgsJy4vYXNzZXRzL21lbW9yeS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDksJy4vYXNzZXRzL21lbnUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzEwLCcuL2Fzc2V0cy9tZW51RG93bi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTEsJy4vYXNzZXRzL21lbnVMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxMiwnLi9hc3NldHMvbWVudVJpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxMywnLi9hc3NldHMvbWVudVVwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxNCwnLi9hc3NldHMvbWVyZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE1LCcuL2Fzc2V0cy9taW5pbWl6ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTYsJy4vYXNzZXRzL21pbnVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxNywnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxOCwnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTksJy4vYXNzZXRzL21pbnVzX2luX3NxdWFyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjAsJy4vYXNzZXRzL21sX2NsYXNzaWZpY2F0aW9uX2pvYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjEsJy4vYXNzZXRzL21sX2NyZWF0ZV9hZHZhbmNlZF9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIyLCcuL2Fzc2V0cy9tbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjMsJy4vYXNzZXRzL21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjQsJy4vYXNzZXRzL21sX2NyZWF0ZV9zaW5nbGVfbWV0cmljX2pvYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjUsJy4vYXNzZXRzL21sX2RhdGFfdmlzdWFsaXplci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjYsJy4vYXNzZXRzL21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjcsJy4vYXNzZXRzL21sX3JlZ3Jlc3Npb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyOCwnLi9hc3NldHMvbW9iaWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyOSwnLi9hc3NldHMvbW9vbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzAsJy4vYXNzZXRzL21vdmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzMxLCcuL2Fzc2V0cy9uYW1lc3BhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzMyLCcuL2Fzc2V0cy9uZXN0ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzMzLCcuL2Fzc2V0cy9uZXdfY2hhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzQsJy4vYXNzZXRzL25vZGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM1LCcuL2Fzc2V0cy9udW1iZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM2LCcuL2Fzc2V0cy9vZmZsaW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzNywnLi9hc3NldHMvb25saW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzOCwnLi9hc3NldHMvcGFja2FnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzksJy4vYXNzZXRzL3BhZ2VTZWxlY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQwLCcuL2Fzc2V0cy9wYWdlc1NlbGVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDEsJy4vYXNzZXRzL3BhaW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0MiwnLi9hc3NldHMvcGFsZXR0ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDMsJy4vYXNzZXRzL3BhcGVyX2NsaXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ0LCcuL2Fzc2V0cy9wYXJ0aWFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NSwnLi9hc3NldHMvcGF1c2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ2LCcuL2Fzc2V0cy9wYXltZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NywnLi9hc3NldHMvcGVuY2lsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0OCwnLi9hc3NldHMvcGVyY2VudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDksJy4vYXNzZXRzL3Bpbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTAsJy4vYXNzZXRzL3Bpbl9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUxLCcuL2Fzc2V0cy9waXBlQnJlYWtzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1MiwnLi9hc3NldHMvcGlwZU5vQnJlYWtzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1MywnLi9hc3NldHMvcGl2b3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU0LCcuL2Fzc2V0cy9wbGF5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NSwnLi9hc3NldHMvcGxheUZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTYsJy4vYXNzZXRzL3BsdXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU3LCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTgsJy4vYXNzZXRzL3BsdXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTksJy4vYXNzZXRzL3BsdXNfaW5fc3F1YXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2MCwnLi9hc3NldHMvcG9wb3V0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2MSwnLi9hc3NldHMvcHVzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjIsJy4vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjMsJy4vYXNzZXRzL3F1b3RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2NCwnLi9hc3NldHMvcmVmcmVzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjUsJy4vYXNzZXRzL3JlcG9ydGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2NiwnLi9hc3NldHMvcmV0dXJuX2tleS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjcsJy4vYXNzZXRzL3NhdmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY4LCcuL2Fzc2V0cy9zY2FsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjksJy4vYXNzZXRzL3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzAsJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3MSwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzIsJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzczLCcuL2Fzc2V0cy9zZXNzaW9uVmlld2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3NCwnLi9hc3NldHMvc2hhcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc1LCcuL2Fzc2V0cy9zaGFyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzYsJy4vYXNzZXRzL3NpbmdsZV9tZXRyaWNfdmlld2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3NywnLi9hc3NldHMvc25vd2ZsYWtlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3OCwnLi9hc3NldHMvc29ydEFzY2VuZGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzksJy4vYXNzZXRzL3NvcnREZXNjZW5kaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4MCwnLi9hc3NldHMvc29ydExlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzgxLCcuL2Fzc2V0cy9zb3J0UmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzgyLCcuL2Fzc2V0cy9zb3J0X2Rvd24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzgzLCcuL2Fzc2V0cy9zb3J0X3VwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4NCwnLi9hc3NldHMvc29ydGFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg1LCcuL2Fzc2V0cy9zcGFjZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg2LCcuL2Fzc2V0cy9zcGFya2xlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODcsJy4vYXNzZXRzL3N0YXJQbHVzRW1wdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg4LCcuL2Fzc2V0cy9zdGFyUGx1c0ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODksJy4vYXNzZXRzL3N0YXJfZW1wdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzkwLCcuL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MSwnLi9hc3NldHMvc3Rhcl9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzkyLCcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTMsJy4vYXNzZXRzL3N0YXJfbWludXNfZW1wdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk0LCcuL2Fzc2V0cy9zdGFyX21pbnVzX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTUsJy4vYXNzZXRzL3N0YXRzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5NiwnLi9hc3NldHMvc3RvcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTcsJy4vYXNzZXRzL3N0b3BfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5OCwnLi9hc3NldHMvc3RvcF9zbGFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTksJy4vYXNzZXRzL3N0b3JhZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAwLCcuL2Fzc2V0cy9zdHJpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAxLCcuL2Fzc2V0cy9zdWJtb2R1bGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAyLCcuL2Fzc2V0cy9zdW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAzLCcuL2Fzc2V0cy9zd2F0Y2hfaW5wdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA0LCcuL2Fzc2V0cy9zeW1saW5rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNSwnLi9hc3NldHMvdGFibGVPZkNvbnRlbnRzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNiwnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9jb21wYWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNywnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDgsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwOSwnLi9hc3NldHMvdGFnLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxMCwnLi9hc3NldHMvdGVhci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTEsJy4vYXNzZXRzL3RlbXBlcmF0dXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxMiwnLi9hc3NldHMvdGltZVJlZnJlc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEzLCcuL2Fzc2V0cy90aW1lbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTQsJy4vYXNzZXRzL3RpbWVsaW5lV2l0aEFycm93LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNSwnLi9hc3NldHMvdGltZXNsaWRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTYsJy4vYXNzZXRzL3Rva2VuQWxpYXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE3LCcuL2Fzc2V0cy90b2tlbkFubm90YXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE4LCcuL2Fzc2V0cy90b2tlbkFycmF5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxOSwnLi9hc3NldHMvdG9rZW5CaW5hcnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIwLCcuL2Fzc2V0cy90b2tlbkJvb2xlYW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIxLCcuL2Fzc2V0cy90b2tlbkNsYXNzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyMiwnLi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyMywnLi9hc3NldHMvdG9rZW5Db25zdGFudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjQsJy4vYXNzZXRzL3Rva2VuRGF0ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjUsJy4vYXNzZXRzL3Rva2VuRGltZW5zaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyNiwnLi9hc3NldHMvdG9rZW5FbGVtZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyNywnLi9hc3NldHMvdG9rZW5FbnVtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyOCwnLi9hc3NldHMvdG9rZW5FbnVtTWVtYmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyOSwnLi9hc3NldHMvdG9rZW5FdmVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzAsJy4vYXNzZXRzL3Rva2VuRXhjZXB0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzMSwnLi9hc3NldHMvdG9rZW5GaWVsZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzIsJy4vYXNzZXRzL3Rva2VuRmlsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzMsJy4vYXNzZXRzL3Rva2VuRmxhdHRlbmVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNCwnLi9hc3NldHMvdG9rZW5GdW5jdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzUsJy4vYXNzZXRzL3Rva2VuR2VvLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNiwnLi9hc3NldHMvdG9rZW5IaXN0b2dyYW0uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM3LCcuL2Fzc2V0cy90b2tlbklQLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzOCwnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM5LCcuL2Fzc2V0cy90b2tlbkpvaW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQwLCcuL2Fzc2V0cy90b2tlbktleS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDEsJy4vYXNzZXRzL3Rva2VuS2V5d29yZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDIsJy4vYXNzZXRzL3Rva2VuTWV0aG9kLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MywnLi9hc3NldHMvdG9rZW5NZXRyaWNDb3VudGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NCwnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDUsJy4vYXNzZXRzL3Rva2VuTW9kdWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NiwnLi9hc3NldHMvdG9rZW5OYW1lc3BhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ3LCcuL2Fzc2V0cy90b2tlbk5lc3RlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDgsJy4vYXNzZXRzL3Rva2VuTnVsbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDksJy4vYXNzZXRzL3Rva2VuTnVtYmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MCwnLi9hc3NldHMvdG9rZW5PYmplY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUxLCcuL2Fzc2V0cy90b2tlbk9wZXJhdG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MiwnLi9hc3NldHMvdG9rZW5QYWNrYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MywnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU0LCcuL2Fzc2V0cy90b2tlblBlcmNvbGF0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU1LCcuL2Fzc2V0cy90b2tlblByb3BlcnR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NiwnLi9hc3NldHMvdG9rZW5SYW5nZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTcsJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU4LCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTksJy4vYXNzZXRzL3Rva2VuUmVwby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjAsJy4vYXNzZXRzL3Rva2VuU2VhcmNoVHlwZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjEsJy4vYXNzZXRzL3Rva2VuU2VtYW50aWNUZXh0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MiwnLi9hc3NldHMvdG9rZW5TaGFwZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjMsJy4vYXNzZXRzL3Rva2VuU3RyaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NCwnLi9hc3NldHMvdG9rZW5TdHJ1Y3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY1LCcuL2Fzc2V0cy90b2tlblN5bWJvbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjYsJy4vYXNzZXRzL3Rva2VuVGFnLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NywnLi9hc3NldHMvdG9rZW5UZXh0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2OCwnLi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2OSwnLi9hc3NldHMvdG9rZW5WYXJpYWJsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzAsJy4vYXNzZXRzL3Rva2VuVmVjdG9yRGVuc2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDcxLCcuL2Fzc2V0cy90b2tlblZlY3RvclNwYXJzZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzIsJy4vYXNzZXRzL3RyYWluaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MywnLi9hc3NldHMvdHJhbnNpdGlvbkxlZnRJbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzQsJy4vYXNzZXRzL3RyYW5zaXRpb25MZWZ0T3V0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NSwnLi9hc3NldHMvdHJhbnNpdGlvblRvcEluLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NiwnLi9hc3NldHMvdHJhbnNpdGlvblRvcE91dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzcsJy4vYXNzZXRzL3RyYXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OCwnLi9hc3NldHMvdW5mb2xkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OSwnLi9hc3NldHMvdW5saW5rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MCwnLi9hc3NldHMvdXNlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODEsJy4vYXNzZXRzL3VzZXJBdmF0YXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgyLCcuL2Fzc2V0cy91c2Vycy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODMsJy4vYXNzZXRzL3ZlY3Rvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODQsJy4vYXNzZXRzL3ZpZGVvUGxheWVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NSwnLi9hc3NldHMvdmlzX2FyZWEuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg2LCcuL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NywnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4OCwnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg5LCcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MCwnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MSwnLi9hc3NldHMvdmlzX2dhdWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MiwnLi9hc3NldHMvdmlzX2dvYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDkzLCcuL2Fzc2V0cy92aXNfbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTQsJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTUsJy4vYXNzZXRzL3Zpc19tYXBfcmVnaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NiwnLi9hc3NldHMvdmlzX21ldHJpYy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTcsJy4vYXNzZXRzL3Zpc19waWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk4LCcuL2Fzc2V0cy92aXNfdGFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk5LCcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMCwnLi9hc3NldHMvdmlzX3RleHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAxLCcuL2Fzc2V0cy92aXNfdGltZWxpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAyLCcuL2Fzc2V0cy92aXNfdmVnYS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDMsJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDQsJy4vYXNzZXRzL3dhcm5pbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTA1LCcuL2Fzc2V0cy93YXJuaW5nRmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwNiwnLi9hc3NldHMvd29yZFdyYXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTA3LCcuL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwOCwnLi9hc3NldHMvd3JlbmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwOSwnLi9hc3NldHMvYWNjZXNzaWJpbGl0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTAsJy4vYXNzZXRzL2FnZ3JlZ2F0ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTEsJy4vYXNzZXRzL2FsZXJ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxMiwnLi9hc3NldHMvYW5hbHl6ZUV2ZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxMywnLi9hc3NldHMvYW5hbHl6ZV9ldmVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTQsJy4vYXNzZXRzL2Fubm90YXRpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE1LCcuL2Fzc2V0cy9hbm9tYWx5X2NoYXJ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNiwnLi9hc3NldHMvYW5vbWFseV9zd2ltX2xhbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE3LCcuL2Fzc2V0cy9hcG1fdHJhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE4LCcuL2Fzc2V0cy9hcHBfYWRkX2RhdGEnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE5LCcuL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIwLCcuL2Fzc2V0cy9hcHBfYWdlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIxLCcuL2Fzc2V0cy9hcHBfYXBtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyMiwnLi9hc3NldHMvYXBwX2FwcF9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIzLCcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyNCwnLi9hc3NldHMvYXBwX2NhbnZhcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjUsJy4vYXNzZXRzL2FwcF9jYXNlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjYsJy4vYXNzZXRzL2FwcF9jb2RlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyNywnLi9hc3NldHMvYXBwX2NvbnNvbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI4LCcuL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjksJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTMwLCcuL2Fzc2V0cy9hcHBfZGV2dG9vbHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTMxLCcuL2Fzc2V0cy9hcHBfZGlzY292ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTMyLCcuL2Fzc2V0cy9hcHBfZW1zJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMywnLi9hc3NldHMvYXBwX2ZpbGViZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzNCwnLi9hc3NldHMvYXBwX2ZsZWV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzNSwnLi9hc3NldHMvYXBwX2dpcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzYsJy4vYXNzZXRzL2FwcF9ncmFwaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzcsJy4vYXNzZXRzL2FwcF9ncm9rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzOCwnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzksJy4vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0MCwnLi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQxLCcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0MiwnLi9hc3NldHMvYXBwX2xlbnMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQzLCcuL2Fzc2V0cy9hcHBfbG9ncyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDQsJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0NSwnLi9hc3NldHMvYXBwX21ldHJpY2JlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ2LCcuL2Fzc2V0cy9hcHBfbWV0cmljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDcsJy4vYXNzZXRzL2FwcF9tbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDgsJy4vYXNzZXRzL2FwcF9tb25pdG9yaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0OSwnLi9hc3NldHMvYXBwX25vdGVib29rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MCwnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTUxLCcuL2Fzc2V0cy9hcHBfcGlwZWxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTUyLCcuL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MywnLi9hc3NldHMvYXBwX3JlcG9ydGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTQsJy4vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1NSwnLi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTYsJy4vYXNzZXRzL2FwcF9zZWN1cml0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTcsJy4vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU4LCcuL2Fzc2V0cy9hcHBfc3BhY2VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1OSwnLi9hc3NldHMvYXBwX3NxbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjAsJy4vYXNzZXRzL2FwcF90aW1lbGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjEsJy4vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjIsJy4vYXNzZXRzL2FwcF91cHRpbWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYzLCcuL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY0LCcuL2Fzc2V0cy9hcHBfdmlzdWFsaXplJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2NSwnLi9hc3NldHMvYXBwX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjYsJy4vYXNzZXRzL2FwcF93YXRjaGVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2NywnLi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY4LCcuL2Fzc2V0cy9hcHBzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2OSwnLi9hc3NldHMvYXJyb3dFbmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcwLCcuL2Fzc2V0cy9hcnJvd1N0YXJ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3MSwnLi9hc3NldHMvYXJyb3dfZG93bic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzIsJy4vYXNzZXRzL2Fycm93X2xlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTczLCcuL2Fzc2V0cy9hcnJvd19yaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzQsJy4vYXNzZXRzL2Fycm93X3VwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3NSwnLi9hc3NldHMvYXJ0aWNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzYsJy4vYXNzZXRzL2FzdGVyaXNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3NywnLi9hc3NldHMvYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc4LCcuL2Fzc2V0cy9iZWFrZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc5LCcuL2Fzc2V0cy9iZWxsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MCwnLi9hc3NldHMvYmVsbFNsYXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MSwnLi9hc3NldHMvYmV0YSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODIsJy4vYXNzZXRzL2JvbHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTgzLCcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4NCwnLi9hc3NldHMvYm94ZXNfdmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg1LCcuL2Fzc2V0cy9icmFuY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg2LCcuL2Fzc2V0cy9icmFuY2hVc2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4NywnLi9hc3NldHMvYnJvb20nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg4LCcuL2Fzc2V0cy9icnVzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODksJy4vYXNzZXRzL2J1Zyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTAsJy4vYXNzZXRzL2J1bGxzZXllJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5MSwnLi9hc3NldHMvY2FsZW5kYXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkyLCcuL2Fzc2V0cy9jaGFuZ2VfcG9pbnRfZGV0ZWN0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5MywnLi9hc3NldHMvY2hlY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNTk0LCcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NSwnLi9hc3NldHMvY2hlZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTk2LCcuL2Fzc2V0cy9jbGlja0xlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTk3LCcuL2Fzc2V0cy9jbGlja1JpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5OCwnLi9hc3NldHMvY2xvY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNTk5LCcuL2Fzc2V0cy9jbG9ja0NvdW50ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAwLCcuL2Fzc2V0cy9jbG91ZERyaXp6bGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAxLCcuL2Fzc2V0cy9jbG91ZFN0b3JteSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDIsJy4vYXNzZXRzL2Nsb3VkU3VubnknOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAzLCcuL2Fzc2V0cy9jbHVzdGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNCwnLi9hc3NldHMvY29sb3InOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA1LCcuL2Fzc2V0cy9jb21wdXRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNiwnLi9hc3NldHMvY29uc29sZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDcsJy4vYXNzZXRzL2NvbnRhaW5lcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDgsJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDksJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZUJlbG93JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxMCwnLi9hc3NldHMvY29udGludWl0eUJlbG93JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxMSwnLi9hc3NldHMvY29udGludWl0eVdpdGhpbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTIsJy4vYXNzZXRzL2NvbnRyb2xzX2hvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEzLCcuL2Fzc2V0cy9jb250cm9sc192ZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTQsJy4vYXNzZXRzL2NvcHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE1LCcuL2Fzc2V0cy9jb3B5X2NsaXBib2FyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTYsJy4vYXNzZXRzL2Nyb3NzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxNywnLi9hc3NldHMvY3Jvc3NJbkNpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTgsJy4vYXNzZXRzL2Nyb3NzX2luX2NpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTksJy4vYXNzZXRzL2Nyb3NzaGFpcnMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIwLCcuL2Fzc2V0cy9jdXJyZW5jeSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjEsJy4vYXNzZXRzL2N1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjIsJy4vYXNzZXRzL2RhdGFiYXNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyMywnLi9hc3NldHMvZGVza3RvcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjQsJy4vYXNzZXRzL2RpZmYnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI1LCcuL2Fzc2V0cy9kaXNjdXNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNiwnLi9hc3NldHMvZG9jdW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI3LCcuL2Fzc2V0cy9kb2N1bWVudEVkaXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI4LCcuL2Fzc2V0cy9kb2N1bWVudGF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyOSwnLi9hc3NldHMvZG9jdW1lbnRzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMCwnLi9hc3NldHMvZG90JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMSwnLi9hc3NldHMvZG90SW5DaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjMyLCcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjMzLCcuL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNCwnLi9hc3NldHMvZG93bmxvYWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM1LCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzYsJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzcsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkJvdHRvbSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzgsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzksJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQwLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25NaWRkbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQxLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDIsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDMsJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tTGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDQsJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ1LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ2LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcFJpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0NywnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDgsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0OSwnLi9hc3NldHMvZWRpdG9yX2FsaWduX3JpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1MCwnLi9hc3NldHMvZWRpdG9yX2JvbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUxLCcuL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1MiwnLi9hc3NldHMvZWRpdG9yX2NvZGVfYmxvY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUzLCcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTQsJy4vYXNzZXRzL2VkaXRvcl9oZWFkaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1NSwnLi9hc3NldHMvZWRpdG9yX2l0YWxpYyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTYsJy4vYXNzZXRzL2VkaXRvcl9saW5rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1NywnLi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTgsJy4vYXNzZXRzL2VkaXRvcl9yZWRvJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1OSwnLi9hc3NldHMvZWRpdG9yX3N0cmlrZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjAsJy4vYXNzZXRzL2VkaXRvcl90YWJsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjEsJy4vYXNzZXRzL2VkaXRvcl91bmRlcmxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYyLCcuL2Fzc2V0cy9lZGl0b3JfdW5kbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjMsJy4vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjQsJy4vYXNzZXRzL2VtYWlsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2NSwnLi9hc3NldHMvZW1wdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY2LCcuL2Fzc2V0cy9lbmRwb2ludCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjcsJy4vYXNzZXRzL2VxbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjgsJy4vYXNzZXRzL2VyYXNlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjksJy4vYXNzZXRzL2Vycm9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3MCwnLi9hc3NldHMvZXJyb3JGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjcxLCcuL2Fzc2V0cy9lc3FsVmlzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3MiwnLi9hc3NldHMvZXhpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzMsJy4vYXNzZXRzL2V4cGFuZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzQsJy4vYXNzZXRzL2V4cGFuZE1pbmknOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc1LCcuL2Fzc2V0cy9leHBvcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc2LCcuL2Fzc2V0cy9leWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc3LCcuL2Fzc2V0cy9leWVfY2xvc2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3OCwnLi9hc3NldHMvZmFjZV9oYXBweSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzksJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODAsJy4vYXNzZXRzL2ZhY2Vfc2FkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MSwnLi9hc3NldHMvZmllbGRfc3RhdGlzdGljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODIsJy4vYXNzZXRzL2ZpbHRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODMsJy4vYXNzZXRzL2ZpbHRlckV4Y2x1ZGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjg0LCcuL2Fzc2V0cy9maWx0ZXJJZ25vcmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjg1LCcuL2Fzc2V0cy9maWx0ZXJJbkNpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODYsJy4vYXNzZXRzL2ZpbHRlckluY2x1ZGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjg3LCcuL2Fzc2V0cy9mbGFnJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4OCwnLi9hc3NldHMvZm9sZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODksJy4vYXNzZXRzL2ZvbGRlcl9jaGVjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTAsJy4vYXNzZXRzL2ZvbGRlcl9jbG9zZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjkxLCcuL2Fzc2V0cy9mb2xkZXJfZXhjbGFtYXRpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjkyLCcuL2Fzc2V0cy9mb2xkZXJfb3Blbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTMsJy4vYXNzZXRzL2ZyYW1lTmV4dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTQsJy4vYXNzZXRzL2ZyYW1lUHJldmlvdXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk1LCcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTYsJy4vYXNzZXRzL2Z1bGxfc2NyZWVuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5NywnLi9hc3NldHMvZnVuY3Rpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk4LCcuL2Fzc2V0cy9nZWFyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5OSwnLi9hc3NldHMvZ2xhc3Nlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDAsJy4vYXNzZXRzL2dsb2JlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMSwnLi9hc3NldHMvZ3JhYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDIsJy4vYXNzZXRzL2dyYWJPbW5pZGlyZWN0aW9uYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAzLCcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA0LCcuL2Fzc2V0cy9ncmFkaWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDUsJy4vYXNzZXRzL2dyaWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA2LCcuL2Fzc2V0cy9oZWFydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDcsJy4vYXNzZXRzL2hlYXRtYXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA4LCcuL2Fzc2V0cy9oZWxwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwOSwnLi9hc3NldHMvaG9tZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTAsJy4vYXNzZXRzL2lJbkNpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTEsJy4vYXNzZXRzL2ltYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMiwnLi9hc3NldHMvaW1wb3J0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMywnLi9hc3NldHMvaW5kZXgnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE0LCcuL2Fzc2V0cy9pbmRleFRlbXBvcmFyeSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTUsJy4vYXNzZXRzL2luZGV4X2Nsb3NlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNiwnLi9hc3NldHMvaW5kZXhfZWRpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTcsJy4vYXNzZXRzL2luZGV4X2ZsdXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxOCwnLi9hc3NldHMvaW5kZXhfbWFwcGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTksJy4vYXNzZXRzL2luZGV4X29wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzIwLCcuL2Fzc2V0cy9pbmRleF9ydW50aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMSwnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzIyLCcuL2Fzc2V0cy9pbmZpbml0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjMsJy4vYXNzZXRzL2lucHV0T3V0cHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyNCwnLi9hc3NldHMvaW5zcGVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjUsJy4vYXNzZXRzL2ludmVydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjYsJy4vYXNzZXRzL2lwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyNywnLi9hc3NldHMvaXNzdWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI4LCcuL2Fzc2V0cy9rZXknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI5LCcuL2Fzc2V0cy9rZXlib2FyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzAsJy4vYXNzZXRzL2txbF9maWVsZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzEsJy4vYXNzZXRzL2txbF9mdW5jdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzIsJy4vYXNzZXRzL2txbF9vcGVyYW5kJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczMywnLi9hc3NldHMva3FsX3NlbGVjdG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczNCwnLi9hc3NldHMva3FsX3ZhbHVlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczNSwnLi9hc3NldHMva3ViZXJuZXRlc05vZGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM2LCcuL2Fzc2V0cy9rdWJlcm5ldGVzUG9kJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczNywnLi9hc3NldHMvbGF1bmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczOCwnLi9hc3NldHMvbGF5ZXJzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczOSwnLi9hc3NldHMvbGV0dGVyaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MCwnLi9hc3NldHMvbGluZURhc2hlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDEsJy4vYXNzZXRzL2xpbmVEb3R0ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQyLCcuL2Fzc2V0cy9saW5lU29saWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQzLCcuL2Fzc2V0cy9saW5rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0NCwnLi9hc3NldHMvbGlzdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDUsJy4vYXNzZXRzL2xpc3RfYWRkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0NiwnLi9hc3NldHMvbG9jayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDcsJy4vYXNzZXRzL2xvY2tPcGVuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0OCwnLi9hc3NldHMvbG9nX3BhdHRlcm5fYW5hbHlzaXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ5LCcuL2Fzc2V0cy9sb2dfcmF0ZV9hbmFseXNpcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTAsJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1MSwnLi9hc3NldHMvbG9nb19hcGFjaGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzUyLCcuL2Fzc2V0cy9sb2dvX2FwcF9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzUzLCcuL2Fzc2V0cy9sb2dvX2F3cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTQsJy4vYXNzZXRzL2xvZ29fYXdzX21vbm8nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU1LCcuL2Fzc2V0cy9sb2dvX2F6dXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NiwnLi9hc3NldHMvbG9nb19henVyZV9tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NywnLi9hc3NldHMvbG9nb19iZWF0cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTgsJy4vYXNzZXRzL2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1OSwnLi9hc3NldHMvbG9nb19jZXBoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2MCwnLi9hc3NldHMvbG9nb19jbG91ZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjEsJy4vYXNzZXRzL2xvZ29fY2xvdWRfZWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2MiwnLi9hc3NldHMvbG9nb19jb2RlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2MywnLi9hc3NldHMvbG9nb19jb2Rlc2FuZGJveCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjQsJy4vYXNzZXRzL2xvZ29fY291Y2hiYXNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2NSwnLi9hc3NldHMvbG9nb19kb2NrZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY2LCcuL2Fzc2V0cy9sb2dvX2Ryb3B3aXphcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY3LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY4LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY5LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNzZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcwLCcuL2Fzc2V0cy9sb2dvX2VudGVycHJpc2Vfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3MSwnLi9hc3NldHMvbG9nb19ldGNkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3MiwnLi9hc3NldHMvbG9nb19nY3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzczLCcuL2Fzc2V0cy9sb2dvX2djcF9tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3NCwnLi9hc3NldHMvbG9nb19naXRodWInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc1LCcuL2Fzc2V0cy9sb2dvX2dtYWlsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3NiwnLi9hc3NldHMvbG9nb19nb2xhbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc3LCcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3OCwnLi9hc3NldHMvbG9nb19oYXByb3h5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3OSwnLi9hc3NldHMvbG9nb19pYm0nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgwLCcuL2Fzc2V0cy9sb2dvX2libV9tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MSwnLi9hc3NldHMvbG9nb19rYWZrYSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODIsJy4vYXNzZXRzL2xvZ29fa2liYW5hJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MywnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4NCwnLi9hc3NldHMvbG9nb19sb2dnaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4NSwnLi9hc3NldHMvbG9nb19sb2dzdGFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODYsJy4vYXNzZXRzL2xvZ29fbWFwcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODcsJy4vYXNzZXRzL2xvZ29fbWVtY2FjaGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4OCwnLi9hc3NldHMvbG9nb19tZXRyaWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4OSwnLi9hc3NldHMvbG9nb19tb25nb2RiJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5MCwnLi9hc3NldHMvbG9nb19teXNxbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTEsJy4vYXNzZXRzL2xvZ29fbmdpbngnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkyLCcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkzLCcuL2Fzc2V0cy9sb2dvX29zcXVlcnknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk0LCcuL2Fzc2V0cy9sb2dvX3BocCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTUsJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk2LCcuL2Fzc2V0cy9sb2dvX3Byb21ldGhldXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk3LCcuL2Fzc2V0cy9sb2dvX3JhYmJpdG1xJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5OCwnLi9hc3NldHMvbG9nb19yZWRpcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTksJy4vYXNzZXRzL2xvZ29fc2VjdXJpdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlODAwLCcuL2Fzc2V0cy9sb2dvX3NpdGVfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwMSwnLi9hc3NldHMvbG9nb19za2V0Y2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAyLCcuL2Fzc2V0cy9sb2dvX3NsYWNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwMywnLi9hc3NldHMvbG9nb191cHRpbWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA0LCcuL2Fzc2V0cy9sb2dvX3Z1bG5lcmFiaWxpdHlfbWFuYWdlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDUsJy4vYXNzZXRzL2xvZ29fd2ViaG9vayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDYsJy4vYXNzZXRzL2xvZ29fd2luZG93cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDcsJy4vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDgsJy4vYXNzZXRzL2xvZ3N0YXNoX2ZpbHRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDksJy4vYXNzZXRzL2xvZ3N0YXNoX2lmJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMCwnLi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODExLCcuL2Fzc2V0cy9sb2dzdGFzaF9vdXRwdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODEyLCcuL2Fzc2V0cy9sb2dzdGFzaF9xdWV1ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTMsJy4vYXNzZXRzL21hZ25ldCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTQsJy4vYXNzZXRzL21hZ25pZnlXaXRoRXhjbGFtYXRpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlODE1LCcuL2Fzc2V0cy9tYWduaWZ5V2l0aE1pbnVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxNiwnLi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxNywnLi9hc3NldHMvbWFwX21hcmtlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTgsJy4vYXNzZXRzL21lbW9yeSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTksJy4vYXNzZXRzL21lbnUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODIwLCcuL2Fzc2V0cy9tZW51RG93bic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjEsJy4vYXNzZXRzL21lbnVMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyMiwnLi9hc3NldHMvbWVudVJpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyMywnLi9hc3NldHMvbWVudVVwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyNCwnLi9hc3NldHMvbWVyZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODI1LCcuL2Fzc2V0cy9taW5pbWl6ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjYsJy4vYXNzZXRzL21pbnVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyNywnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyOCwnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjksJy4vYXNzZXRzL21pbnVzX2luX3NxdWFyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzAsJy4vYXNzZXRzL21sX2NsYXNzaWZpY2F0aW9uX2pvYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzEsJy4vYXNzZXRzL21sX2NyZWF0ZV9hZHZhbmNlZF9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlODMyLCcuL2Fzc2V0cy9tbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzMsJy4vYXNzZXRzL21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzQsJy4vYXNzZXRzL21sX2NyZWF0ZV9zaW5nbGVfbWV0cmljX2pvYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzUsJy4vYXNzZXRzL21sX2RhdGFfdmlzdWFsaXplcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzYsJy4vYXNzZXRzL21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzcsJy4vYXNzZXRzL21sX3JlZ3Jlc3Npb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzOCwnLi9hc3NldHMvbW9iaWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzOSwnLi9hc3NldHMvbW9vbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDAsJy4vYXNzZXRzL21vdmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQxLCcuL2Fzc2V0cy9uYW1lc3BhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQyLCcuL2Fzc2V0cy9uZXN0ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQzLCcuL2Fzc2V0cy9uZXdfY2hhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDQsJy4vYXNzZXRzL25vZGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ1LCcuL2Fzc2V0cy9udW1iZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ2LCcuL2Fzc2V0cy9vZmZsaW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0NywnLi9hc3NldHMvb25saW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0OCwnLi9hc3NldHMvcGFja2FnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDksJy4vYXNzZXRzL3BhZ2VTZWxlY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUwLCcuL2Fzc2V0cy9wYWdlc1NlbGVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTEsJy4vYXNzZXRzL3BhaW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1MiwnLi9hc3NldHMvcGFsZXR0ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTMsJy4vYXNzZXRzL3BhcGVyX2NsaXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlODU0LCcuL2Fzc2V0cy9wYXJ0aWFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1NSwnLi9hc3NldHMvcGF1c2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODU2LCcuL2Fzc2V0cy9wYXltZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1NywnLi9hc3NldHMvcGVuY2lsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1OCwnLi9hc3NldHMvcGVyY2VudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTksJy4vYXNzZXRzL3Bpbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjAsJy4vYXNzZXRzL3Bpbl9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODYxLCcuL2Fzc2V0cy9waXBlQnJlYWtzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MiwnLi9hc3NldHMvcGlwZU5vQnJlYWtzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MywnLi9hc3NldHMvcGl2b3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY0LCcuL2Fzc2V0cy9wbGF5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2NSwnLi9hc3NldHMvcGxheUZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjYsJy4vYXNzZXRzL3BsdXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY3LCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjgsJy4vYXNzZXRzL3BsdXNfaW5fY2lyY2xlX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjksJy4vYXNzZXRzL3BsdXNfaW5fc3F1YXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3MCwnLi9hc3NldHMvcG9wb3V0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3MSwnLi9hc3NldHMvcHVzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzIsJy4vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzMsJy4vYXNzZXRzL3F1b3RlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3NCwnLi9hc3NldHMvcmVmcmVzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzUsJy4vYXNzZXRzL3JlcG9ydGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3NiwnLi9hc3NldHMvcmV0dXJuX2tleSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzcsJy4vYXNzZXRzL3NhdmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODc4LCcuL2Fzc2V0cy9zY2FsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzksJy4vYXNzZXRzL3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODAsJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4MSwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODIsJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgzLCcuL2Fzc2V0cy9zZXNzaW9uVmlld2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NCwnLi9hc3NldHMvc2hhcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODg1LCcuL2Fzc2V0cy9zaGFyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODYsJy4vYXNzZXRzL3NpbmdsZV9tZXRyaWNfdmlld2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NywnLi9hc3NldHMvc25vd2ZsYWtlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4OCwnLi9hc3NldHMvc29ydEFzY2VuZGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODksJy4vYXNzZXRzL3NvcnREZXNjZW5kaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5MCwnLi9hc3NldHMvc29ydExlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODkxLCcuL2Fzc2V0cy9zb3J0UmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODkyLCcuL2Fzc2V0cy9zb3J0X2Rvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlODkzLCcuL2Fzc2V0cy9zb3J0X3VwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NCwnLi9hc3NldHMvc29ydGFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk1LCcuL2Fzc2V0cy9zcGFjZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk2LCcuL2Fzc2V0cy9zcGFya2xlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTcsJy4vYXNzZXRzL3N0YXJQbHVzRW1wdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlODk4LCcuL2Fzc2V0cy9zdGFyUGx1c0ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTksJy4vYXNzZXRzL3N0YXJfZW1wdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAwLCcuL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwMSwnLi9hc3NldHMvc3Rhcl9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAyLCcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDMsJy4vYXNzZXRzL3N0YXJfbWludXNfZW1wdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA0LCcuL2Fzc2V0cy9zdGFyX21pbnVzX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDUsJy4vYXNzZXRzL3N0YXRzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwNiwnLi9hc3NldHMvc3RvcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDcsJy4vYXNzZXRzL3N0b3BfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwOCwnLi9hc3NldHMvc3RvcF9zbGFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDksJy4vYXNzZXRzL3N0b3JhZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTEwLCcuL2Fzc2V0cy9zdHJpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTExLCcuL2Fzc2V0cy9zdWJtb2R1bGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTEyLCcuL2Fzc2V0cy9zdW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTEzLCcuL2Fzc2V0cy9zd2F0Y2hfaW5wdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTE0LCcuL2Fzc2V0cy9zeW1saW5rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxNSwnLi9hc3NldHMvdGFibGVPZkNvbnRlbnRzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxNiwnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9jb21wYWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxNywnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MTgsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxOSwnLi9hc3NldHMvdGFnJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyMCwnLi9hc3NldHMvdGVhcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MjEsJy4vYXNzZXRzL3RlbXBlcmF0dXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyMiwnLi9hc3NldHMvdGltZVJlZnJlc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTIzLCcuL2Fzc2V0cy90aW1lbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MjQsJy4vYXNzZXRzL3RpbWVsaW5lV2l0aEFycm93JzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyNSwnLi9hc3NldHMvdGltZXNsaWRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MjYsJy4vYXNzZXRzL3Rva2VuQWxpYXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTI3LCcuL2Fzc2V0cy90b2tlbkFubm90YXRpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTI4LCcuL2Fzc2V0cy90b2tlbkFycmF5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyOSwnLi9hc3NldHMvdG9rZW5CaW5hcnknOl9EeW5hbWljSW1wb3J0TW9kdWxlOTMwLCcuL2Fzc2V0cy90b2tlbkJvb2xlYW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTMxLCcuL2Fzc2V0cy90b2tlbkNsYXNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzMiwnLi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzMywnLi9hc3NldHMvdG9rZW5Db25zdGFudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzQsJy4vYXNzZXRzL3Rva2VuRGF0ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MzUsJy4vYXNzZXRzL3Rva2VuRGltZW5zaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzNiwnLi9hc3NldHMvdG9rZW5FbGVtZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzNywnLi9hc3NldHMvdG9rZW5FbnVtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzOCwnLi9hc3NldHMvdG9rZW5FbnVtTWVtYmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzOSwnLi9hc3NldHMvdG9rZW5FdmVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NDAsJy4vYXNzZXRzL3Rva2VuRXhjZXB0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk0MSwnLi9hc3NldHMvdG9rZW5GaWVsZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NDIsJy4vYXNzZXRzL3Rva2VuRmlsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NDMsJy4vYXNzZXRzL3Rva2VuRmxhdHRlbmVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk0NCwnLi9hc3NldHMvdG9rZW5GdW5jdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NDUsJy4vYXNzZXRzL3Rva2VuR2VvJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk0NiwnLi9hc3NldHMvdG9rZW5IaXN0b2dyYW0nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQ3LCcuL2Fzc2V0cy90b2tlbklQJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk0OCwnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQ5LCcuL2Fzc2V0cy90b2tlbkpvaW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTUwLCcuL2Fzc2V0cy90b2tlbktleSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NTEsJy4vYXNzZXRzL3Rva2VuS2V5d29yZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NTIsJy4vYXNzZXRzL3Rva2VuTWV0aG9kJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk1MywnLi9hc3NldHMvdG9rZW5NZXRyaWNDb3VudGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk1NCwnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NTUsJy4vYXNzZXRzL3Rva2VuTW9kdWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk1NiwnLi9hc3NldHMvdG9rZW5OYW1lc3BhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTU3LCcuL2Fzc2V0cy90b2tlbk5lc3RlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NTgsJy4vYXNzZXRzL3Rva2VuTnVsbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NTksJy4vYXNzZXRzL3Rva2VuTnVtYmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2MCwnLi9hc3NldHMvdG9rZW5PYmplY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTYxLCcuL2Fzc2V0cy90b2tlbk9wZXJhdG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2MiwnLi9hc3NldHMvdG9rZW5QYWNrYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2MywnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTY0LCcuL2Fzc2V0cy90b2tlblBlcmNvbGF0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlOTY1LCcuL2Fzc2V0cy90b2tlblByb3BlcnR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2NiwnLi9hc3NldHMvdG9rZW5SYW5nZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NjcsJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTY4LCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NjksJy4vYXNzZXRzL3Rva2VuUmVwbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzAsJy4vYXNzZXRzL3Rva2VuU2VhcmNoVHlwZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzEsJy4vYXNzZXRzL3Rva2VuU2VtYW50aWNUZXh0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTk3MiwnLi9hc3NldHMvdG9rZW5TaGFwZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzMsJy4vYXNzZXRzL3Rva2VuU3RyaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk3NCwnLi9hc3NldHMvdG9rZW5TdHJ1Y3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTc1LCcuL2Fzc2V0cy90b2tlblN5bWJvbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NzYsJy4vYXNzZXRzL3Rva2VuVGFnJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk3NywnLi9hc3NldHMvdG9rZW5UZXh0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTk3OCwnLi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTk3OSwnLi9hc3NldHMvdG9rZW5WYXJpYWJsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODAsJy4vYXNzZXRzL3Rva2VuVmVjdG9yRGVuc2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTgxLCcuL2Fzc2V0cy90b2tlblZlY3RvclNwYXJzZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODIsJy4vYXNzZXRzL3RyYWluaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk4MywnLi9hc3NldHMvdHJhbnNpdGlvbkxlZnRJbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODQsJy4vYXNzZXRzL3RyYW5zaXRpb25MZWZ0T3V0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTk4NSwnLi9hc3NldHMvdHJhbnNpdGlvblRvcEluJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk4NiwnLi9hc3NldHMvdHJhbnNpdGlvblRvcE91dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5ODcsJy4vYXNzZXRzL3RyYXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk4OCwnLi9hc3NldHMvdW5mb2xkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk4OSwnLi9hc3NldHMvdW5saW5rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5MCwnLi9hc3NldHMvdXNlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OTEsJy4vYXNzZXRzL3VzZXJBdmF0YXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTkyLCcuL2Fzc2V0cy91c2Vycyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OTMsJy4vYXNzZXRzL3ZlY3Rvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OTQsJy4vYXNzZXRzL3ZpZGVvUGxheWVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5NSwnLi9hc3NldHMvdmlzX2FyZWEnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTk2LCcuL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5NywnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk5OCwnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTk5LCcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDAsJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAxLCcuL2Fzc2V0cy92aXNfZ2F1Z2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwMiwnLi9hc3NldHMvdmlzX2dvYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwMywnLi9hc3NldHMvdmlzX2xpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwNCwnLi9hc3NldHMvdmlzX21hcF9jb29yZGluYXRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDUsJy4vYXNzZXRzL3Zpc19tYXBfcmVnaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMDYsJy4vYXNzZXRzL3Zpc19tZXRyaWMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwNywnLi9hc3NldHMvdmlzX3BpZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDA4LCcuL2Fzc2V0cy92aXNfdGFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwOSwnLi9hc3NldHMvdmlzX3RhZ19jbG91ZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDEwLCcuL2Fzc2V0cy92aXNfdGV4dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDExLCcuL2Fzc2V0cy92aXNfdGltZWxpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxMiwnLi9hc3NldHMvdmlzX3ZlZ2EnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxMywnLi9hc3NldHMvdmlzX3Zpc3VhbF9idWlsZGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTQsJy4vYXNzZXRzL3dhcm5pbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxNSwnLi9hc3NldHMvd2FybmluZ0ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE2LCcuL2Fzc2V0cy93b3JkV3JhcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE3LCcuL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMTgsJy4vYXNzZXRzL3dyZW5jaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDE5fTtcbmZ1bmN0aW9uIF9EeW5hbWljSW1wb3J0KHBhdGgpIHtjb25zdCBtb2Q9X0R5bmFtaWNJbXBvcnRNb2R1bGVNYXBbcGF0aF07aWYobW9kKSB7bW9kW1N5bWJvbC50b1N0cmluZ1RhZ109J01vZHVsZSc7fXJldHVybiBQcm9taXNlLnJlc29sdmUobW9kKTt9XG52YXIgX2V4Y2x1ZGVkID0gW1widHlwZVwiLCBcInNpemVcIiwgXCJjb2xvclwiLCBcImNsYXNzTmFtZVwiLCBcInRhYkluZGV4XCIsIFwidGl0bGVcIiwgXCJvbkljb25Mb2FkXCIsIFwic3R5bGVcIiwgXCJzdHlsZXNNZW1vaXplclwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB0eXBlVG9QYXRoTWFwIH0gZnJvbSAnLi9pY29uX21hcCc7XG5pbXBvcnQgeyBpY29uIGFzIGVtcHR5IH0gZnJvbSAnLi9hc3NldHMvZW1wdHknO1xuaW1wb3J0IHsgZW5xdWV1ZVN0YXRlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yLCB3aXRoRXVpU3R5bGVzTWVtb2l6ZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5leHBvcnQgeyBDT0xPUlMgfSBmcm9tICcuL25hbWVkX2NvbG9ycyc7XG5pbXBvcnQgeyBpc05hbWVkQ29sb3IgfSBmcm9tICcuL25hbWVkX2NvbG9ycyc7XG5pbXBvcnQgeyBldWlJY29uU3R5bGVzIH0gZnJvbSAnLi9pY29uLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGdldElzQXBwSWNvbiA9IGZ1bmN0aW9uIGdldElzQXBwSWNvbihpY29uVHlwZSkge1xuICBpZiAodHlwZW9mIGljb25UeXBlICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICBpZiAoaWNvblR5cGUgPT09ICdkYXRhVmlzdWFsaXplcicpIHJldHVybiB0cnVlOyAvLyBTcGVjaWFsIGNhc2VcbiAgaWYgKGljb25UeXBlLmluZGV4T2YoJ2RhdGE6JykgPT09IDApIHJldHVybiBmYWxzZTsgLy8gSW5saW5lIGRhdGEgVVJJcyBzaG91bGQgYmUgc2hvcnQtY2lyY3VpdGVkIGZvciBwZXJmb3JtYW5jZVxuICByZXR1cm4gaWNvblR5cGUuZW5kc1dpdGgoJ0FwcCcpIHx8IGljb25UeXBlLmVuZHNXaXRoKCdKb2InKTtcbn07XG5leHBvcnQgdmFyIFRZUEVTID0ga2V5c09mKHR5cGVUb1BhdGhNYXApO1xuXG4vLyBXZSBhY2NlcHQgYXJiaXRyYXJ5IGNvbG9yIHN0cmluZ3MsIHdoaWNoIGFyZSBpbXBvc3NpYmxlIHRvIHR5cGUuXG5cbmV4cG9ydCB2YXIgU0laRVMgPSBbJ29yaWdpbmFsJywgJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCddO1xuZnVuY3Rpb24gaXNFdWlJY29uVHlwZSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ3N0cmluZycgJiYgdHlwZVRvUGF0aE1hcC5oYXNPd25Qcm9wZXJ0eSh4KTtcbn1cbmZ1bmN0aW9uIGdldEluaXRpYWxJY29uKGljb24pIHtcbiAgaWYgKGljb24gPT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGlzRXVpSWNvblR5cGUoaWNvbikpIHtcbiAgICBpZiAoaWNvbkNvbXBvbmVudENhY2hlLmhhc093blByb3BlcnR5KGljb24pKSB7XG4gICAgICByZXR1cm4gaWNvbkNvbXBvbmVudENhY2hlW2ljb25dO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBpY29uO1xufVxudmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoKTtcbnZhciBpY29uQ29tcG9uZW50Q2FjaGUgPSB7fTtcbmV4cG9ydCB2YXIgY2xlYXJJY29uQ29tcG9uZW50Q2FjaGUgPSBmdW5jdGlvbiBjbGVhckljb25Db21wb25lbnRDYWNoZShpY29uVHlwZSkge1xuICBpZiAoaWNvblR5cGUgIT0gbnVsbCkge1xuICAgIGRlbGV0ZSBpY29uQ29tcG9uZW50Q2FjaGVbaWNvblR5cGVdO1xuICB9IGVsc2Uge1xuICAgIGljb25Db21wb25lbnRDYWNoZSA9IHt9O1xuICB9XG59O1xuZXhwb3J0IHZhciBhcHBlbmRJY29uQ29tcG9uZW50Q2FjaGUgPSBmdW5jdGlvbiBhcHBlbmRJY29uQ29tcG9uZW50Q2FjaGUoaWNvblR5cGVUb0ljb25Db21wb25lbnRNYXApIHtcbiAgZm9yICh2YXIgaWNvblR5cGUgaW4gaWNvblR5cGVUb0ljb25Db21wb25lbnRNYXApIHtcbiAgICBpZiAoaWNvblR5cGVUb0ljb25Db21wb25lbnRNYXAuaGFzT3duUHJvcGVydHkoaWNvblR5cGUpKSB7XG4gICAgICBpY29uQ29tcG9uZW50Q2FjaGVbaWNvblR5cGVdID0gaWNvblR5cGVUb0ljb25Db21wb25lbnRNYXBbaWNvblR5cGVdO1xuICAgIH1cbiAgfVxufTtcbmV4cG9ydCB2YXIgRXVpSWNvbkNsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlJY29uQ2xhc3MocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUljb25DbGFzcyk7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aUljb25DbGFzcywgW3Byb3BzXSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImlzTW91bnRlZFwiLCBmYWxzZSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImxvYWRJY29uQ29tcG9uZW50XCIsIGZ1bmN0aW9uIChpY29uVHlwZSkge1xuICAgICAgaWYgKGljb25Db21wb25lbnRDYWNoZS5oYXNPd25Qcm9wZXJ0eShpY29uVHlwZSkpIHtcbiAgICAgICAgLy8gZXhpc3RzIGluIGNhY2hlXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIG5lZWRlZExvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGljb246IGljb25Db21wb25lbnRDYWNoZVtpY29uVHlwZV1cbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLm9uSWNvbkxvYWQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX0R5bmFtaWNJbXBvcnQoYC4vYXNzZXRzLyR7dHlwZVRvUGF0aE1hcFtpY29uVHlwZV19YCkudGhlbihmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgaWNvbiA9IF9yZWYuaWNvbjtcbiAgICAgICAgaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXSA9IGljb247XG4gICAgICAgIGVucXVldWVTdGF0ZUNoYW5nZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKF90aGlzLmlzTW91bnRlZCAmJiBfdGhpcy5wcm9wcy50eXBlID09PSBpY29uVHlwZSkge1xuICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBpY29uOiBpY29uLFxuICAgICAgICAgICAgICBpY29uVGl0bGU6IGljb25UeXBlLFxuICAgICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgICAgICB9LCBfdGhpcy5vbkljb25Mb2FkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uSWNvbkxvYWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9uSWNvbkxvYWQgPSBfdGhpcy5wcm9wcy5vbkljb25Mb2FkO1xuICAgICAgaWYgKG9uSWNvbkxvYWQpIHtcbiAgICAgICAgb25JY29uTG9hZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciB0eXBlID0gcHJvcHMudHlwZTtcbiAgICB2YXIgaW5pdGlhbEljb24gPSBnZXRJbml0aWFsSWNvbih0eXBlKTtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGljb246IGluaXRpYWxJY29uLFxuICAgICAgaWNvblRpdGxlOiB1bmRlZmluZWQsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgbmVlZGVkTG9hZGluZzogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpSWNvbkNsYXNzLCBfUHVyZUNvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpSWNvbkNsYXNzLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuaXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIHZhciB0eXBlID0gdGhpcy5wcm9wcy50eXBlO1xuICAgICAgaWYgKGlzRXVpSWNvblR5cGUodHlwZSkgJiYgdGhpcy5zdGF0ZS5pY29uID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbmVlZGVkTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubG9hZEljb25Db21wb25lbnQodHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uSWNvbkxvYWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciB0eXBlID0gdGhpcy5wcm9wcy50eXBlO1xuICAgICAgaWYgKHR5cGUgIT09IHByZXZQcm9wcy50eXBlKSB7XG4gICAgICAgIGlmIChpc0V1aUljb25UeXBlKHR5cGUpKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBuZWVkZWRMb2FkaW5nOiBpY29uQ29tcG9uZW50Q2FjaGUuaGFzT3duUHJvcGVydHkodHlwZSksXG4gICAgICAgICAgICBpc0xvYWRpbmc6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmxvYWRJY29uQ29tcG9uZW50KHR5cGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaWNvbjogdHlwZSxcbiAgICAgICAgICAgIG5lZWRlZExvYWRpbmc6IHRydWUsXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmlzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgdHlwZSA9IF90aGlzJHByb3BzLnR5cGUsXG4gICAgICAgIF90aGlzJHByb3BzJHNpemUgPSBfdGhpcyRwcm9wcy5zaXplLFxuICAgICAgICBzaXplID0gX3RoaXMkcHJvcHMkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3RoaXMkcHJvcHMkc2l6ZSxcbiAgICAgICAgY29sb3IgPSBfdGhpcyRwcm9wcy5jb2xvcixcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICB0YWJJbmRleCA9IF90aGlzJHByb3BzLnRhYkluZGV4LFxuICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzLnRpdGxlLFxuICAgICAgICBvbkljb25Mb2FkID0gX3RoaXMkcHJvcHMub25JY29uTG9hZCxcbiAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wcy5zdHlsZSxcbiAgICAgICAgc3R5bGVzTWVtb2l6ZXIgPSBfdGhpcyRwcm9wcy5zdHlsZXNNZW1vaXplcixcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHN0YXRlLmlzTG9hZGluZyxcbiAgICAgICAgbmVlZGVkTG9hZGluZyA9IF90aGlzJHN0YXRlLm5lZWRlZExvYWRpbmcsXG4gICAgICAgIGljb25UaXRsZSA9IF90aGlzJHN0YXRlLmljb25UaXRsZTtcbiAgICAgIHZhciBpc0xvYWRlZCA9ICFpc0xvYWRpbmcgJiYgbmVlZGVkTG9hZGluZztcbiAgICAgIHZhciBpc0N1c3RvbUNvbG9yID0gY29sb3IgJiYgIWlzTmFtZWRDb2xvcihjb2xvcik7XG4gICAgICB2YXIgb3B0aW9uYWxDdXN0b21TdHlsZXMgPSBpc0N1c3RvbUNvbG9yID8gX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSwgc3R5bGUpIDogc3R5bGU7XG5cbiAgICAgIC8vIFRoZXNlIGljb25zIGFyZSBhIGxpdHRsZSBzcGVjaWFsIGFuZCBnZXQgc29tZSBleHRyYSBDU1MgZmxleGliaWxpdHlcbiAgICAgIHZhciBpc0FwcEljb24gPSBnZXRJc0FwcEljb24odHlwZSk7XG4gICAgICAvLyBBcHAgY29sb3Igc3R5bGVzIGFyZSBvbmx5IGFwcGxpZWQgaWYgbm8gY29sb3IgaXMgcGFzc2VkIG9yIGlmIGNvbG9yPVwiZGVmYXVsdFwiIGlzIHBhc3NlZFxuICAgICAgdmFyIGFwcEljb25IYXNDb2xvciA9IGNvbG9yICYmIGNvbG9yICE9PSAnZGVmYXVsdCc7XG5cbiAgICAgIC8vIFRoZSBFbGFzdGljIGxvZ28gc2hvdWxkIGJlIGFuIG91dGxpbmUgaW4gdGV4dCBhbmQgZ2hvc3QgbW9kZVxuICAgICAgdmFyIGlzRWxhc3RpY0xvZ29PdXRsaW5lID0gdHlwZSA9PT0gJ2xvZ29FbGFzdGljJyAmJiAoY29sb3IgPT09ICdnaG9zdCcgfHwgY29sb3IgPT09ICd0ZXh0Jyk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUljb24nLCBjbGFzc05hbWUpO1xuXG4gICAgICAvLyBFbW90aW9uIHN0eWxlc1xuICAgICAgdmFyIHN0eWxlcyA9IHN0eWxlc01lbW9pemVyKGV1aUljb25TdHlsZXMpO1xuICAgICAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSWNvbiwgc3R5bGVzW3NpemVdLCBjb2xvciAmJiBpc05hbWVkQ29sb3IoY29sb3IpICYmIHN0eWxlc1tjb2xvcl0sIGlzQ3VzdG9tQ29sb3IgJiYgc3R5bGVzLmN1c3RvbUNvbG9yLCBpc0VsYXN0aWNMb2dvT3V0bGluZSAmJiBzdHlsZXMubG9nb0VsYXN0aWNPdXRsaW5lLCBpc0FwcEljb24gJiYgIWFwcEljb25IYXNDb2xvciAmJiBzdHlsZXMuYXBwLCBpc0xvYWRpbmcgJiYgc3R5bGVzLmlzTG9hZGluZywgIWlzTG9hZGluZyAmJiBuZWVkZWRMb2FkaW5nICYmIHN0eWxlcy5pc0xvYWRlZF07XG4gICAgICB2YXIgaWNvbiA9IHRoaXMuc3RhdGUuaWNvbiB8fCBlbXB0eTtcbiAgICAgIGlmICh0eXBlb2YgaWNvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJpbWdcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGFsdDogdGl0bGUgPyB0aXRsZSA6ICcnLFxuICAgICAgICAgIHNyYzogaWNvbixcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICAgIHRhYkluZGV4OiB0YWJJbmRleFxuICAgICAgICB9LCByZXN0KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgU3ZnID0gaWNvbjtcblxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBhcmlhLWxhYmVsLCBhcmlhLWxhYmVsbGVkYnksIG9yIHRpdGxlIGl0IGdldHMgYXJpYS1oaWRkZW4gdHJ1ZVxuICAgICAgICB2YXIgaXNBcmlhSGlkZGVuID0gISh0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10gfHwgdGhpcy5wcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10gfHwgdGhpcy5wcm9wcy50aXRsZSk7XG5cbiAgICAgICAgLy8gSWYgbm8gYXJpYS1sYWJlbCBvciBhcmlhLWxhYmVsbGVkYnkgaXMgcHJvdmlkZWQgYnV0IHRoZXJlJ3MgYSB0aXRsZSwgYSB0aXRsZUlkIGlzIGdlbmVyYXRlZFxuICAgICAgICAvLyAgVGhlIHN2ZyBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlIGdldHMgdGhpcyB0aXRsZUlkXG4gICAgICAgIC8vICBUaGUgc3ZnIHRpdGxlIGVsZW1lbnQgZ2V0cyB0aGlzIHRpdGxlSWQgYXMgYW4gaWRcbiAgICAgICAgdmFyIHRpdGxlSWQgPSAhdGhpcy5wcm9wc1snYXJpYS1sYWJlbCddICYmICF0aGlzLnByb3BzWydhcmlhLWxhYmVsbGVkYnknXSAmJiB0aXRsZSA/IHtcbiAgICAgICAgICB0aXRsZUlkOiBnZW5lcmF0ZUlkKClcbiAgICAgICAgfSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goU3ZnLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlcyxcbiAgICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICAgICAgcm9sZTogXCJpbWdcIixcbiAgICAgICAgICB0aXRsZTogdGl0bGVcbiAgICAgICAgfSwgdGl0bGVJZCwge1xuICAgICAgICAgIFwiZGF0YS1pY29uLXR5cGVcIjogaWNvblRpdGxlLFxuICAgICAgICAgIFwiZGF0YS1pcy1sb2FkZWRcIjogaXNMb2FkZWQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIFwiZGF0YS1pcy1sb2FkaW5nXCI6IGlzTG9hZGluZyB8fCB1bmRlZmluZWRcbiAgICAgICAgfSwgcmVzdCwge1xuICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogaXNBcmlhSGlkZGVuIHx8IHJlc3RbJ2FyaWEtaGlkZGVuJ11cbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xufShQdXJlQ29tcG9uZW50KTtcbkV1aUljb25DbGFzcy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIGBFbnVtYCBpcyBhbnkgb2YgdGhlIG5hbWVkIGljb25zIGxpc3RlZCBpbiB0aGUgZG9jcywgYHN0cmluZ2AgaXMgdXN1YWxseSBhIFVSTCB0byBhbiBTVkcgZmlsZSwgYW5kIGBlbGVtZW50VHlwZWAgaXMgYW55IFJlYWN0IFNWRyBjb21wb25lbnRcbiAgICAgICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAgICogT25lIG9mIEVVSSdzIGNvbG9yIHBhbGV0dGUgb3IgYSB2YWxpZCBDU1MgY29sb3IgdmFsdWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yX3ZhbHVlLlxuICAgICAgICogTm90ZSB0aGF0IGNvbG9yaW5nIG9ubHkgd29ya3MgaWYgeW91ciBTVkcgaXMgcmVtb3ZlZCBvZiBmaWxsIGF0dHJpYnV0ZXMuXG4gICAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogTm90ZSB0aGF0IGV2ZXJ5IHNpemUgb3RoZXIgdGhhbiBgb3JpZ2luYWxgIGFzc3VtZXMgdGhlIHByb3ZpZGVkIFNWRyBzaXRzIG9uIGEgc3F1YXJlIHZpZXdib3guXG4gICAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBEZXNjcmlwdGl2ZSB0aXRsZSBmb3IgbmFtaW5nIHRoZSBpY29uIGJhc2VkIG9uIGl0cyB1c2VcbiAgICAgICAqL1xuICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgdGl0bGUgZWxlbWVudFxuICAgICAgICovXG4gIHRpdGxlSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAgICogSXRzIHZhbHVlIHNob3VsZCBiZSBvbmUgb3IgbW9yZSBlbGVtZW50IElEc1xuICAgICAgICovXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAgICogQ2FsbGJhY2sgd2hlbiB0aGUgaWNvbiBoYXMgYmVlbiBsb2FkZWQgJiByZW5kZXJlZFxuICAgICAgICovXG4gIG9uSWNvbkxvYWQ6IFByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0IHZhciBFdWlJY29uID0gd2l0aEV1aVN0eWxlc01lbW9pemVyKEV1aUljb25DbGFzcyk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgdHlwZVRvUGF0aE1hcCA9IHtcbiAgYWNjZXNzaWJpbGl0eTogJ2FjY2Vzc2liaWxpdHknLFxuICBhZGREYXRhQXBwOiAnYXBwX2FkZF9kYXRhJyxcbiAgYWR2YW5jZWRTZXR0aW5nc0FwcDogJ2FwcF9hZHZhbmNlZF9zZXR0aW5ncycsXG4gIGFnZW50QXBwOiAnYXBwX2ZsZWV0JyxcbiAgYWdncmVnYXRlOiAnYWdncmVnYXRlJyxcbiAgYW5hbHl6ZUV2ZW50OiAnYW5hbHl6ZUV2ZW50JyxcbiAgYW5ub3RhdGlvbjogJ2Fubm90YXRpb24nLFxuICBhbm9tYWx5Q2hhcnQ6ICdhbm9tYWx5X2NoYXJ0JyxcbiAgYW5vbWFseVN3aW1MYW5lOiAnYW5vbWFseV9zd2ltX2xhbmUnLFxuICBhcG1BcHA6ICdhcHBfYXBtJyxcbiAgYXBtVHJhY2U6ICdhcG1fdHJhY2UnLFxuICBhcHBTZWFyY2hBcHA6ICdhcHBfYXBwX3NlYXJjaCcsXG4gIGFwcHM6ICdhcHBzJyxcbiAgYXJyb3dEb3duOiAnYXJyb3dfZG93bicsXG4gIGFycm93TGVmdDogJ2Fycm93X2xlZnQnLFxuICBhcnJvd1JpZ2h0OiAnYXJyb3dfcmlnaHQnLFxuICBhcnJvd1VwOiAnYXJyb3dfdXAnLFxuICBhcnJvd1N0YXJ0OiAnYXJyb3dTdGFydCcsXG4gIGFycm93RW5kOiAnYXJyb3dFbmQnLFxuICBhcnRpY2xlOiAnYXJ0aWNsZScsXG4gIGFzdGVyaXNrOiAnYXN0ZXJpc2snLFxuICBhdDogJ2F0JyxcbiAgYXVkaXRiZWF0QXBwOiAnYXBwX2F1ZGl0YmVhdCcsXG4gIGJlYWtlcjogJ2JlYWtlcicsXG4gIGJlbGw6ICdiZWxsJyxcbiAgYmVsbFNsYXNoOiAnYmVsbFNsYXNoJyxcbiAgYmV0YTogJ2JldGEnLFxuICBib2x0OiAnYm9sdCcsXG4gIGJveGVzSG9yaXpvbnRhbDogJ2JveGVzX2hvcml6b250YWwnLFxuICBib3hlc1ZlcnRpY2FsOiAnYm94ZXNfdmVydGljYWwnLFxuICBicmFuY2g6ICdicmFuY2gnLFxuICBicmFuY2hVc2VyOiAnYnJhbmNoVXNlcicsXG4gIGJyb29tOiAnYnJvb20nLFxuICBicnVzaDogJ2JydXNoJyxcbiAgYnVnOiAnYnVnJyxcbiAgYnVsbHNleWU6ICdidWxsc2V5ZScsXG4gIGNhbGVuZGFyOiAnY2FsZW5kYXInLFxuICBjYW52YXNBcHA6ICdhcHBfY2FudmFzJyxcbiAgY2FzZXNBcHA6ICdhcHBfY2FzZXMnLFxuICBjaGFuZ2VQb2ludERldGVjdGlvbjogJ2NoYW5nZV9wb2ludF9kZXRlY3Rpb24nLFxuICBjaGVjazogJ2NoZWNrJyxcbiAgY2hlY2tJbkNpcmNsZUZpbGxlZDogJ2NoZWNrSW5DaXJjbGVGaWxsZWQnLFxuICBjaGVlcjogJ2NoZWVyJyxcbiAgY2xhc3NpZmljYXRpb25Kb2I6ICdtbF9jbGFzc2lmaWNhdGlvbl9qb2InLFxuICBjbGlja0xlZnQ6ICdjbGlja0xlZnQnLFxuICBjbGlja1JpZ2h0OiAnY2xpY2tSaWdodCcsXG4gIGNsb2NrOiAnY2xvY2snLFxuICBjbG9ja0NvdW50ZXI6ICdjbG9ja0NvdW50ZXInLFxuICBjbG91ZERyaXp6bGU6ICdjbG91ZERyaXp6bGUnLFxuICBjbG91ZFN0b3JteTogJ2Nsb3VkU3Rvcm15JyxcbiAgY2xvdWRTdW5ueTogJ2Nsb3VkU3VubnknLFxuICBjbHVzdGVyOiAnY2x1c3RlcicsXG4gIGNvZGVBcHA6ICdhcHBfY29kZScsXG4gIGNvbG9yOiAnY29sb3InLFxuICBjb21wdXRlOiAnY29tcHV0ZScsXG4gIGNvbnNvbGU6ICdjb25zb2xlJyxcbiAgY29uc29sZUFwcDogJ2FwcF9jb25zb2xlJyxcbiAgY29udGFpbmVyOiAnY29udGFpbmVyJyxcbiAgY29udGludWl0eUFib3ZlOiAnY29udGludWl0eUFib3ZlJyxcbiAgY29udGludWl0eUFib3ZlQmVsb3c6ICdjb250aW51aXR5QWJvdmVCZWxvdycsXG4gIGNvbnRpbnVpdHlCZWxvdzogJ2NvbnRpbnVpdHlCZWxvdycsXG4gIGNvbnRpbnVpdHlXaXRoaW46ICdjb250aW51aXR5V2l0aGluJyxcbiAgY29udHJvbHNIb3Jpem9udGFsOiAnY29udHJvbHNfaG9yaXpvbnRhbCcsXG4gIGNvbnRyb2xzVmVydGljYWw6ICdjb250cm9sc192ZXJ0aWNhbCcsXG4gIGNvcHk6ICdjb3B5JyxcbiAgY29weUNsaXBib2FyZDogJ2NvcHlfY2xpcGJvYXJkJyxcbiAgY3JlYXRlQWR2YW5jZWRKb2I6ICdtbF9jcmVhdGVfYWR2YW5jZWRfam9iJyxcbiAgY3JlYXRlTXVsdGlNZXRyaWNKb2I6ICdtbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYicsXG4gIGNyZWF0ZVBvcHVsYXRpb25Kb2I6ICdtbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2InLFxuICBjcmVhdGVTaW5nbGVNZXRyaWNKb2I6ICdtbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2InLFxuICBjcm9zczogJ2Nyb3NzJyxcbiAgY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHA6ICdhcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbicsXG4gIGNyb3NzSW5DaXJjbGU6ICdjcm9zc19pbl9jaXJjbGUnLFxuICBjcm9zc2hhaXJzOiAnY3Jvc3NoYWlycycsXG4gIGN1cnJlbmN5OiAnY3VycmVuY3knLFxuICBjdXQ6ICdjdXQnLFxuICBkYXNoYm9hcmRBcHA6ICdhcHBfZGFzaGJvYXJkJyxcbiAgZGF0YVZpc3VhbGl6ZXI6ICdtbF9kYXRhX3Zpc3VhbGl6ZXInLFxuICBkYXRhYmFzZTogJ2RhdGFiYXNlJyxcbiAgZGVza3RvcDogJ2Rlc2t0b3AnLFxuICBkZXZUb29sc0FwcDogJ2FwcF9kZXZ0b29scycsXG4gIGRpZmY6ICdkaWZmJyxcbiAgZGlzY292ZXJBcHA6ICdhcHBfZGlzY292ZXInLFxuICBkaXNjdXNzOiAnZGlzY3VzcycsXG4gIGRvY3VtZW50OiAnZG9jdW1lbnQnLFxuICBkb2N1bWVudEVkaXQ6ICdkb2N1bWVudEVkaXQnLFxuICBkb2N1bWVudGF0aW9uOiAnZG9jdW1lbnRhdGlvbicsXG4gIGRvY3VtZW50czogJ2RvY3VtZW50cycsXG4gIGRvdDogJ2RvdCcsXG4gIGRvdEluQ2lyY2xlOiAnZG90SW5DaXJjbGUnLFxuICBkb3VibGVBcnJvd0xlZnQ6ICdkb3VibGVBcnJvd0xlZnQnLFxuICBkb3VibGVBcnJvd1JpZ2h0OiAnZG91YmxlQXJyb3dSaWdodCcsXG4gIGRvd25sb2FkOiAnZG93bmxvYWQnLFxuICBlZGl0b3JBbGlnbkNlbnRlcjogJ2VkaXRvcl9hbGlnbl9jZW50ZXInLFxuICBlZGl0b3JBbGlnbkxlZnQ6ICdlZGl0b3JfYWxpZ25fbGVmdCcsXG4gIGVkaXRvckFsaWduUmlnaHQ6ICdlZGl0b3JfYWxpZ25fcmlnaHQnLFxuICBlZGl0b3JCb2xkOiAnZWRpdG9yX2JvbGQnLFxuICBlZGl0b3JDaGVja2xpc3Q6ICdlZGl0b3JfY2hlY2tsaXN0JyxcbiAgZWRpdG9yQ29kZUJsb2NrOiAnZWRpdG9yX2NvZGVfYmxvY2snLFxuICBlZGl0b3JDb21tZW50OiAnZWRpdG9yX2NvbW1lbnQnLFxuICBlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbDogJ2VkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsJyxcbiAgZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsOiAnZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsJyxcbiAgZWRpdG9ySGVhZGluZzogJ2VkaXRvcl9oZWFkaW5nJyxcbiAgZWRpdG9ySXRhbGljOiAnZWRpdG9yX2l0YWxpYycsXG4gIGVkaXRvckl0ZW1BbGlnbkJvdHRvbTogJ2VkaXRvckl0ZW1BbGlnbkJvdHRvbScsXG4gIGVkaXRvckl0ZW1BbGlnbkNlbnRlcjogJ2VkaXRvckl0ZW1BbGlnbkNlbnRlcicsXG4gIGVkaXRvckl0ZW1BbGlnbkxlZnQ6ICdlZGl0b3JJdGVtQWxpZ25MZWZ0JyxcbiAgZWRpdG9ySXRlbUFsaWduTWlkZGxlOiAnZWRpdG9ySXRlbUFsaWduTWlkZGxlJyxcbiAgZWRpdG9ySXRlbUFsaWduUmlnaHQ6ICdlZGl0b3JJdGVtQWxpZ25SaWdodCcsXG4gIGVkaXRvckl0ZW1BbGlnblRvcDogJ2VkaXRvckl0ZW1BbGlnblRvcCcsXG4gIGVkaXRvckxpbms6ICdlZGl0b3JfbGluaycsXG4gIGVkaXRvck9yZGVyZWRMaXN0OiAnZWRpdG9yX29yZGVyZWRfbGlzdCcsXG4gIGVkaXRvclBvc2l0aW9uQm90dG9tTGVmdDogJ2VkaXRvclBvc2l0aW9uQm90dG9tTGVmdCcsXG4gIGVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQ6ICdlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0JyxcbiAgZWRpdG9yUG9zaXRpb25Ub3BMZWZ0OiAnZWRpdG9yUG9zaXRpb25Ub3BMZWZ0JyxcbiAgZWRpdG9yUG9zaXRpb25Ub3BSaWdodDogJ2VkaXRvclBvc2l0aW9uVG9wUmlnaHQnLFxuICBlZGl0b3JSZWRvOiAnZWRpdG9yX3JlZG8nLFxuICBlZGl0b3JTdHJpa2U6ICdlZGl0b3Jfc3RyaWtlJyxcbiAgZWRpdG9yVGFibGU6ICdlZGl0b3JfdGFibGUnLFxuICBlZGl0b3JVbmRlcmxpbmU6ICdlZGl0b3JfdW5kZXJsaW5lJyxcbiAgZWRpdG9yVW5kbzogJ2VkaXRvcl91bmRvJyxcbiAgZWRpdG9yVW5vcmRlcmVkTGlzdDogJ2VkaXRvcl91bm9yZGVyZWRfbGlzdCcsXG4gIGVtYWlsOiAnZW1haWwnLFxuICBlbXB0eTogJ2VtcHR5JyxcbiAgZW1zQXBwOiAnYXBwX2VtcycsXG4gIGVuZHBvaW50OiAnZW5kcG9pbnQnLFxuICBlcWw6ICdlcWwnLFxuICBlcmFzZXI6ICdlcmFzZXInLFxuICBlcnJvcjogJ2Vycm9yJyxcbiAgZXJyb3JGaWxsZWQ6ICdlcnJvckZpbGxlZCcsXG4gIGVzcWxWaXM6ICdlc3FsVmlzJyxcbiAgZXhpdDogJ2V4aXQnLFxuICBleHBhbmQ6ICdleHBhbmQnLFxuICBleHBhbmRNaW5pOiAnZXhwYW5kTWluaScsXG4gIGV4cG9ydEFjdGlvbjogJ2V4cG9ydCcsXG4gIGV5ZTogJ2V5ZScsXG4gIGV5ZUNsb3NlZDogJ2V5ZV9jbG9zZWQnLFxuICBmYWNlSGFwcHk6ICdmYWNlX2hhcHB5JyxcbiAgZmFjZU5ldXRyYWw6ICdmYWNlX25ldXRyYWwnLFxuICBmYWNlU2FkOiAnZmFjZV9zYWQnLFxuICBmaWVsZFN0YXRpc3RpY3M6ICdmaWVsZF9zdGF0aXN0aWNzJyxcbiAgZmlsZWJlYXRBcHA6ICdhcHBfZmlsZWJlYXQnLFxuICBmaWx0ZXI6ICdmaWx0ZXInLFxuICBmaWx0ZXJFeGNsdWRlOiAnZmlsdGVyRXhjbHVkZScsXG4gIGZpbHRlcklnbm9yZTogJ2ZpbHRlcklnbm9yZScsXG4gIGZpbHRlckluY2x1ZGU6ICdmaWx0ZXJJbmNsdWRlJyxcbiAgZmlsdGVySW5DaXJjbGU6ICdmaWx0ZXJJbkNpcmNsZScsXG4gIGZsYWc6ICdmbGFnJyxcbiAgZmxlZXRBcHA6ICdhcHBfYWdlbnQnLFxuICBmb2xkOiAnZm9sZCcsXG4gIGZvbGRlckNoZWNrOiAnZm9sZGVyX2NoZWNrJyxcbiAgZm9sZGVyQ2xvc2VkOiAnZm9sZGVyX2Nsb3NlZCcsXG4gIGZvbGRlckV4Y2xhbWF0aW9uOiAnZm9sZGVyX2V4Y2xhbWF0aW9uJyxcbiAgZm9sZGVyT3BlbjogJ2ZvbGRlcl9vcGVuJyxcbiAgZnJhbWVOZXh0OiAnZnJhbWVOZXh0JyxcbiAgZnJhbWVQcmV2aW91czogJ2ZyYW1lUHJldmlvdXMnLFxuICBmdWxsU2NyZWVuOiAnZnVsbF9zY3JlZW4nLFxuICBmdWxsU2NyZWVuRXhpdDogJ2Z1bGxTY3JlZW5FeGl0JyxcbiAgZnVuY3Rpb246ICdmdW5jdGlvbicsXG4gIGdlYXI6ICdnZWFyJyxcbiAgZ2lzQXBwOiAnYXBwX2dpcycsXG4gIGdsYXNzZXM6ICdnbGFzc2VzJyxcbiAgZ2xvYmU6ICdnbG9iZScsXG4gIGdyYWI6ICdncmFiJyxcbiAgZ3JhYkhvcml6b250YWw6ICdncmFiX2hvcml6b250YWwnLFxuICBncmFiT21uaWRpcmVjdGlvbmFsOiAnZ3JhYk9tbmlkaXJlY3Rpb25hbCcsXG4gIGdyYWRpZW50OiAnZ3JhZGllbnQnLFxuICBncmFwaEFwcDogJ2FwcF9ncmFwaCcsXG4gIGdyaWQ6ICdncmlkJyxcbiAgZ3Jva0FwcDogJ2FwcF9ncm9rJyxcbiAgaGVhcnQ6ICdoZWFydCcsXG4gIGhlYXJ0YmVhdEFwcDogJ2FwcF9oZWFydGJlYXQnLFxuICBoZWF0bWFwOiAnaGVhdG1hcCcsXG4gIGhlbHA6ICdoZWxwJyxcbiAgaG9tZTogJ2hvbWUnLFxuICBpSW5DaXJjbGU6ICdpSW5DaXJjbGUnLFxuICBpbWFnZTogJ2ltYWdlJyxcbiAgaW1wb3J0QWN0aW9uOiAnaW1wb3J0JyxcbiAgaW5kZXg6ICdpbmRleCcsXG4gIGluZGV4Q2xvc2U6ICdpbmRleF9jbG9zZScsXG4gIGluZGV4RWRpdDogJ2luZGV4X2VkaXQnLFxuICBpbmRleEZsdXNoOiAnaW5kZXhfZmx1c2gnLFxuICBpbmRleE1hbmFnZW1lbnRBcHA6ICdhcHBfaW5kZXhfbWFuYWdlbWVudCcsXG4gIGluZGV4TWFwcGluZzogJ2luZGV4X21hcHBpbmcnLFxuICBpbmRleE9wZW46ICdpbmRleF9vcGVuJyxcbiAgaW5kZXhQYXR0ZXJuQXBwOiAnYXBwX2luZGV4X3BhdHRlcm4nLFxuICBpbmRleFJvbGx1cEFwcDogJ2FwcF9pbmRleF9yb2xsdXAnLFxuICBpbmRleFJ1bnRpbWU6ICdpbmRleF9ydW50aW1lJyxcbiAgaW5kZXhTZXR0aW5nczogJ2luZGV4X3NldHRpbmdzJyxcbiAgaW5kZXhUZW1wb3Jhcnk6ICdpbmRleFRlbXBvcmFyeScsXG4gIGluZmluaXR5OiAnaW5maW5pdHknLFxuICBpbnB1dE91dHB1dDogJ2lucHV0T3V0cHV0JyxcbiAgaW5zcGVjdDogJ2luc3BlY3QnLFxuICBpbnZlcnQ6ICdpbnZlcnQnLFxuICBpcDogJ2lwJyxcbiAga2V5OiAna2V5JyxcbiAga2V5Ym9hcmQ6ICdrZXlib2FyZCcsXG4gIGtxbEZpZWxkOiAna3FsX2ZpZWxkJyxcbiAga3FsRnVuY3Rpb246ICdrcWxfZnVuY3Rpb24nLFxuICBrcWxPcGVyYW5kOiAna3FsX29wZXJhbmQnLFxuICBrcWxTZWxlY3RvcjogJ2txbF9zZWxlY3RvcicsXG4gIGtxbFZhbHVlOiAna3FsX3ZhbHVlJyxcbiAga3ViZXJuZXRlc05vZGU6ICdrdWJlcm5ldGVzTm9kZScsXG4gIGt1YmVybmV0ZXNQb2Q6ICdrdWJlcm5ldGVzUG9kJyxcbiAgbGF1bmNoOiAnbGF1bmNoJyxcbiAgbGF5ZXJzOiAnbGF5ZXJzJyxcbiAgbGVuc0FwcDogJ2FwcF9sZW5zJyxcbiAgbGV0dGVyaW5nOiAnbGV0dGVyaW5nJyxcbiAgbGluZURhc2hlZDogJ2xpbmVEYXNoZWQnLFxuICBsaW5lRG90dGVkOiAnbGluZURvdHRlZCcsXG4gIGxpbmVTb2xpZDogJ2xpbmVTb2xpZCcsXG4gIGxpbms6ICdsaW5rJyxcbiAgbGlzdDogJ2xpc3QnLFxuICBsaXN0QWRkOiAnbGlzdF9hZGQnLFxuICBsb2NrOiAnbG9jaycsXG4gIGxvY2tPcGVuOiAnbG9ja09wZW4nLFxuICBsb2dQYXR0ZXJuQW5hbHlzaXM6ICdsb2dfcGF0dGVybl9hbmFseXNpcycsXG4gIGxvZ1JhdGVBbmFseXNpczogJ2xvZ19yYXRlX2FuYWx5c2lzJyxcbiAgbG9nb0FXUzogJ2xvZ29fYXdzJyxcbiAgbG9nb0FXU01vbm86ICdsb2dvX2F3c19tb25vJyxcbiAgbG9nb0Flcm9zcGlrZTogJ2xvZ29fYWVyb3NwaWtlJyxcbiAgbG9nb0FwYWNoZTogJ2xvZ29fYXBhY2hlJyxcbiAgbG9nb0FwcFNlYXJjaDogJ2xvZ29fYXBwX3NlYXJjaCcsXG4gIGxvZ29BenVyZTogJ2xvZ29fYXp1cmUnLFxuICBsb2dvQXp1cmVNb25vOiAnbG9nb19henVyZV9tb25vJyxcbiAgbG9nb0JlYXRzOiAnbG9nb19iZWF0cycsXG4gIGxvZ29CdXNpbmVzc0FuYWx5dGljczogJ2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzJyxcbiAgbG9nb0NlcGg6ICdsb2dvX2NlcGgnLFxuICBsb2dvQ2xvdWQ6ICdsb2dvX2Nsb3VkJyxcbiAgbG9nb0Nsb3VkRW50ZXJwcmlzZTogJ2xvZ29fY2xvdWRfZWNlJyxcbiAgbG9nb0NvZGU6ICdsb2dvX2NvZGUnLFxuICBsb2dvQ29kZXNhbmRib3g6ICdsb2dvX2NvZGVzYW5kYm94JyxcbiAgbG9nb0NvdWNoYmFzZTogJ2xvZ29fY291Y2hiYXNlJyxcbiAgbG9nb0RvY2tlcjogJ2xvZ29fZG9ja2VyJyxcbiAgbG9nb0Ryb3B3aXphcmQ6ICdsb2dvX2Ryb3B3aXphcmQnLFxuICBsb2dvRWxhc3RpYzogJ2xvZ29fZWxhc3RpYycsXG4gIGxvZ29FbGFzdGljU3RhY2s6ICdsb2dvX2VsYXN0aWNfc3RhY2snLFxuICBsb2dvRWxhc3RpY3NlYXJjaDogJ2xvZ29fZWxhc3RpY3NlYXJjaCcsXG4gIGxvZ29FbnRlcnByaXNlU2VhcmNoOiAnbG9nb19lbnRlcnByaXNlX3NlYXJjaCcsXG4gIGxvZ29FdGNkOiAnbG9nb19ldGNkJyxcbiAgbG9nb0dDUDogJ2xvZ29fZ2NwJyxcbiAgbG9nb0dDUE1vbm86ICdsb2dvX2djcF9tb25vJyxcbiAgbG9nb0dpdGh1YjogJ2xvZ29fZ2l0aHViJyxcbiAgbG9nb0dtYWlsOiAnbG9nb19nbWFpbCcsXG4gIGxvZ29Hb2xhbmc6ICdsb2dvX2dvbGFuZycsXG4gIGxvZ29Hb29nbGVHOiAnbG9nb19nb29nbGVfZycsXG4gIGxvZ29IQXByb3h5OiAnbG9nb19oYXByb3h5JyxcbiAgbG9nb0lCTTogJ2xvZ29faWJtJyxcbiAgbG9nb0lCTU1vbm86ICdsb2dvX2libV9tb25vJyxcbiAgbG9nb0thZmthOiAnbG9nb19rYWZrYScsXG4gIGxvZ29LaWJhbmE6ICdsb2dvX2tpYmFuYScsXG4gIGxvZ29LdWJlcm5ldGVzOiAnbG9nb19rdWJlcm5ldGVzJyxcbiAgbG9nb0xvZ2dpbmc6ICdsb2dvX2xvZ2dpbmcnLFxuICBsb2dvTG9nc3Rhc2g6ICdsb2dvX2xvZ3N0YXNoJyxcbiAgbG9nb01hcHM6ICdsb2dvX21hcHMnLFxuICBsb2dvTWVtY2FjaGVkOiAnbG9nb19tZW1jYWNoZWQnLFxuICBsb2dvTWV0cmljczogJ2xvZ29fbWV0cmljcycsXG4gIGxvZ29Nb25nb2RiOiAnbG9nb19tb25nb2RiJyxcbiAgbG9nb015U1FMOiAnbG9nb19teXNxbCcsXG4gIGxvZ29OZ2lueDogJ2xvZ29fbmdpbngnLFxuICBsb2dvT2JzZXJ2YWJpbGl0eTogJ2xvZ29fb2JzZXJ2YWJpbGl0eScsXG4gIGxvZ29Pc3F1ZXJ5OiAnbG9nb19vc3F1ZXJ5JyxcbiAgbG9nb1BocDogJ2xvZ29fcGhwJyxcbiAgbG9nb1Bvc3RncmVzOiAnbG9nb19wb3N0Z3JlcycsXG4gIGxvZ29Qcm9tZXRoZXVzOiAnbG9nb19wcm9tZXRoZXVzJyxcbiAgbG9nb1JhYmJpdG1xOiAnbG9nb19yYWJiaXRtcScsXG4gIGxvZ29SZWRpczogJ2xvZ29fcmVkaXMnLFxuICBsb2dvU2VjdXJpdHk6ICdsb2dvX3NlY3VyaXR5JyxcbiAgbG9nb1NpdGVTZWFyY2g6ICdsb2dvX3NpdGVfc2VhcmNoJyxcbiAgbG9nb1NrZXRjaDogJ2xvZ29fc2tldGNoJyxcbiAgbG9nb1NsYWNrOiAnbG9nb19zbGFjaycsXG4gIGxvZ29VcHRpbWU6ICdsb2dvX3VwdGltZScsXG4gIGxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudDogJ2xvZ29fdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50JyxcbiAgbG9nb1dlYmhvb2s6ICdsb2dvX3dlYmhvb2snLFxuICBsb2dvV2luZG93czogJ2xvZ29fd2luZG93cycsXG4gIGxvZ29Xb3JrcGxhY2VTZWFyY2g6ICdsb2dvX3dvcmtwbGFjZV9zZWFyY2gnLFxuICBsb2dzQXBwOiAnYXBwX2xvZ3MnLFxuICBsb2dzdGFzaEZpbHRlcjogJ2xvZ3N0YXNoX2ZpbHRlcicsXG4gIGxvZ3N0YXNoSWY6ICdsb2dzdGFzaF9pZicsXG4gIGxvZ3N0YXNoSW5wdXQ6ICdsb2dzdGFzaF9pbnB1dCcsXG4gIGxvZ3N0YXNoT3V0cHV0OiAnbG9nc3Rhc2hfb3V0cHV0JyxcbiAgbG9nc3Rhc2hRdWV1ZTogJ2xvZ3N0YXNoX3F1ZXVlJyxcbiAgbWFjaGluZUxlYXJuaW5nQXBwOiAnYXBwX21sJyxcbiAgbWFnbmV0OiAnbWFnbmV0JyxcbiAgbWFnbmlmeVdpdGhFeGNsYW1hdGlvbjogJ21hZ25pZnlXaXRoRXhjbGFtYXRpb24nLFxuICBtYWduaWZ5V2l0aE1pbnVzOiAnbWFnbmlmeVdpdGhNaW51cycsXG4gIG1hZ25pZnlXaXRoUGx1czogJ21hZ25pZnlXaXRoUGx1cycsXG4gIG1hbmFnZW1lbnRBcHA6ICdhcHBfbWFuYWdlbWVudCcsXG4gIG1hcE1hcmtlcjogJ21hcF9tYXJrZXInLFxuICBtZW1vcnk6ICdtZW1vcnknLFxuICBtZW51OiAnbWVudScsXG4gIG1lbnVEb3duOiAnbWVudURvd24nLFxuICBtZW51TGVmdDogJ21lbnVMZWZ0JyxcbiAgbWVudVJpZ2h0OiAnbWVudVJpZ2h0JyxcbiAgbWVudVVwOiAnbWVudVVwJyxcbiAgbWVyZ2U6ICdtZXJnZScsXG4gIG1ldHJpY2JlYXRBcHA6ICdhcHBfbWV0cmljYmVhdCcsXG4gIG1ldHJpY3NBcHA6ICdhcHBfbWV0cmljcycsXG4gIG1pbmltaXplOiAnbWluaW1pemUnLFxuICBtaW51czogJ21pbnVzJyxcbiAgbWludXNJbkNpcmNsZTogJ21pbnVzX2luX2NpcmNsZScsXG4gIG1pbnVzSW5DaXJjbGVGaWxsZWQ6ICdtaW51c19pbl9jaXJjbGVfZmlsbGVkJyxcbiAgbWludXNJblNxdWFyZTogJ21pbnVzX2luX3NxdWFyZScsXG4gIG1vYmlsZTogJ21vYmlsZScsXG4gIG1vbml0b3JpbmdBcHA6ICdhcHBfbW9uaXRvcmluZycsXG4gIG1vb246ICdtb29uJyxcbiAgbW92ZTogJ21vdmUnLFxuICBuYW1lc3BhY2U6ICduYW1lc3BhY2UnLFxuICBuZXN0ZWQ6ICduZXN0ZWQnLFxuICBuZXdDaGF0OiAnbmV3X2NoYXQnLFxuICBub2RlOiAnbm9kZScsXG4gIG5vdGVib29rQXBwOiAnYXBwX25vdGVib29rJyxcbiAgbnVtYmVyOiAnbnVtYmVyJyxcbiAgb2ZmbGluZTogJ29mZmxpbmUnLFxuICBvbmxpbmU6ICdvbmxpbmUnLFxuICBvdXRsaWVyRGV0ZWN0aW9uSm9iOiAnbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iJyxcbiAgcGFja2FnZTogJ3BhY2thZ2UnLFxuICBwYWNrZXRiZWF0QXBwOiAnYXBwX3BhY2tldGJlYXQnLFxuICBwYWdlU2VsZWN0OiAncGFnZVNlbGVjdCcsXG4gIHBhZ2VzU2VsZWN0OiAncGFnZXNTZWxlY3QnLFxuICBwYWxldHRlOiAncGFsZXR0ZScsXG4gIHBhcGVyQ2xpcDogJ3BhcGVyX2NsaXAnLFxuICBwYXJ0aWFsOiAncGFydGlhbCcsXG4gIHBhdXNlOiAncGF1c2UnLFxuICBwYXltZW50OiAncGF5bWVudCcsXG4gIHBlbmNpbDogJ3BlbmNpbCcsXG4gIHBlcmNlbnQ6ICdwZXJjZW50JyxcbiAgcGluOiAncGluJyxcbiAgcGluRmlsbGVkOiAncGluX2ZpbGxlZCcsXG4gIHBpcGVCcmVha3M6ICdwaXBlQnJlYWtzJyxcbiAgcGlwZWxpbmVBcHA6ICdhcHBfcGlwZWxpbmUnLFxuICBwaXBlTm9CcmVha3M6ICdwaXBlTm9CcmVha3MnLFxuICBwaXZvdDogJ3Bpdm90JyxcbiAgcGxheTogJ3BsYXknLFxuICBwbGF5RmlsbGVkOiAncGxheUZpbGxlZCcsXG4gIHBsdXM6ICdwbHVzJyxcbiAgcGx1c0luQ2lyY2xlOiAncGx1c19pbl9jaXJjbGUnLFxuICBwbHVzSW5DaXJjbGVGaWxsZWQ6ICdwbHVzX2luX2NpcmNsZV9maWxsZWQnLFxuICBwbHVzSW5TcXVhcmU6ICdwbHVzX2luX3NxdWFyZScsXG4gIHBvcG91dDogJ3BvcG91dCcsXG4gIHB1c2g6ICdwdXNoJyxcbiAgcXVlc3Rpb25JbkNpcmNsZTogJ3F1ZXN0aW9uX2luX2NpcmNsZScsXG4gIHF1b3RlOiAncXVvdGUnLFxuICByZWNlbnRseVZpZXdlZEFwcDogJ2FwcF9yZWNlbnRseV92aWV3ZWQnLFxuICByZWZyZXNoOiAncmVmcmVzaCcsXG4gIHJlZ3Jlc3Npb25Kb2I6ICdtbF9yZWdyZXNzaW9uX2pvYicsXG4gIHJlcG9ydGVyOiAncmVwb3J0ZXInLFxuICByZXBvcnRpbmdBcHA6ICdhcHBfcmVwb3J0aW5nJyxcbiAgcmV0dXJuS2V5OiAncmV0dXJuX2tleScsXG4gIHNhdmU6ICdzYXZlJyxcbiAgc2F2ZWRPYmplY3RzQXBwOiAnYXBwX3NhdmVkX29iamVjdHMnLFxuICBzY2FsZTogJ3NjYWxlJyxcbiAgc2VhcmNoOiAnc2VhcmNoJyxcbiAgc2VhcmNoUHJvZmlsZXJBcHA6ICdhcHBfc2VhcmNoX3Byb2ZpbGVyJyxcbiAgc2VjdXJpdHlBbmFseXRpY3NBcHA6ICdhcHBfc2VjdXJpdHlfYW5hbHl0aWNzJyxcbiAgc2VjdXJpdHlBcHA6ICdhcHBfc2VjdXJpdHknLFxuICBzZWN1cml0eVNpZ25hbDogJ3NlY3VyaXR5U2lnbmFsJyxcbiAgc2VjdXJpdHlTaWduYWxEZXRlY3RlZDogJ3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQnLFxuICBzZWN1cml0eVNpZ25hbFJlc29sdmVkOiAnc2VjdXJpdHlTaWduYWxSZXNvbHZlZCcsXG4gIHNlc3Npb25WaWV3ZXI6ICdzZXNzaW9uVmlld2VyJyxcbiAgc2hhcmQ6ICdzaGFyZCcsXG4gIHNoYXJlOiAnc2hhcmUnLFxuICBzaW5nbGVNZXRyaWNWaWV3ZXI6ICdzaW5nbGVfbWV0cmljX3ZpZXdlcicsXG4gIHNub3dmbGFrZTogJ3Nub3dmbGFrZScsXG4gIHNvcnRBc2NlbmRpbmc6ICdzb3J0QXNjZW5kaW5nJyxcbiAgc29ydERlc2NlbmRpbmc6ICdzb3J0RGVzY2VuZGluZycsXG4gIHNvcnREb3duOiAnc29ydF9kb3duJyxcbiAgc29ydExlZnQ6ICdzb3J0TGVmdCcsXG4gIHNvcnRSaWdodDogJ3NvcnRSaWdodCcsXG4gIHNvcnRVcDogJ3NvcnRfdXAnLFxuICBzb3J0YWJsZTogJ3NvcnRhYmxlJyxcbiAgc3BhY2VzOiAnc3BhY2VzJyxcbiAgc3BhY2VzQXBwOiAnYXBwX3NwYWNlcycsXG4gIHNwYXJrbGVzOiAnc3BhcmtsZXMnLFxuICBzcWxBcHA6ICdhcHBfc3FsJyxcbiAgc3RhckVtcHR5OiAnc3Rhcl9lbXB0eScsXG4gIHN0YXJFbXB0eVNwYWNlOiAnc3Rhcl9lbXB0eV9zcGFjZScsXG4gIHN0YXJGaWxsZWQ6ICdzdGFyX2ZpbGxlZCcsXG4gIHN0YXJGaWxsZWRTcGFjZTogJ3N0YXJfZmlsbGVkX3NwYWNlJyxcbiAgc3Rhck1pbnVzRW1wdHk6ICdzdGFyX21pbnVzX2VtcHR5JyxcbiAgc3Rhck1pbnVzRmlsbGVkOiAnc3Rhcl9taW51c19maWxsZWQnLFxuICBzdGFyUGx1c0VtcHR5OiAnc3RhclBsdXNFbXB0eScsXG4gIHN0YXJQbHVzRmlsbGVkOiAnc3RhclBsdXNGaWxsZWQnLFxuICBzdGF0czogJ3N0YXRzJyxcbiAgc3RvcDogJ3N0b3AnLFxuICBzdG9wRmlsbGVkOiAnc3RvcF9maWxsZWQnLFxuICBzdG9wU2xhc2g6ICdzdG9wX3NsYXNoJyxcbiAgc3RvcmFnZTogJ3N0b3JhZ2UnLFxuICBzdHJpbmc6ICdzdHJpbmcnLFxuICBzdWJtb2R1bGU6ICdzdWJtb2R1bGUnLFxuICBzdW46ICdzdW4nLFxuICBzd2F0Y2hJbnB1dDogJ3N3YXRjaF9pbnB1dCcsXG4gIC8vIFVuZG9jdW1lbnRlZCBvbiBwdXJwb3NlLiBIYXMgYW4gZXh0cmEgc3Ryb2tlIGZvciBFdWlDb2xvclBpY2tlclxuICBzeW1saW5rOiAnc3ltbGluaycsXG4gIHRhYmxlRGVuc2l0eUNvbXBhY3Q6ICd0YWJsZV9kZW5zaXR5X2NvbXBhY3QnLFxuICB0YWJsZURlbnNpdHlFeHBhbmRlZDogJ3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQnLFxuICB0YWJsZURlbnNpdHlOb3JtYWw6ICd0YWJsZV9kZW5zaXR5X25vcm1hbCcsXG4gIHRhYmxlT2ZDb250ZW50czogJ3RhYmxlT2ZDb250ZW50cycsXG4gIHRhZzogJ3RhZycsXG4gIHRlYXI6ICd0ZWFyJyxcbiAgdGVtcGVyYXR1cmU6ICd0ZW1wZXJhdHVyZScsXG4gIHRpbWVsaW5lOiAndGltZWxpbmUnLFxuICB0aW1lbGluZVdpdGhBcnJvdzogJ3RpbWVsaW5lV2l0aEFycm93JyxcbiAgdGltZWxpb25BcHA6ICdhcHBfdGltZWxpb24nLFxuICB0aW1lUmVmcmVzaDogJ3RpbWVSZWZyZXNoJyxcbiAgdGltZXNsaWRlcjogJ3RpbWVzbGlkZXInLFxuICB0cmFpbmluZzogJ3RyYWluaW5nJyxcbiAgdHJhbnNpdGlvbkxlZnRJbjogJ3RyYW5zaXRpb25MZWZ0SW4nLFxuICB0cmFuc2l0aW9uTGVmdE91dDogJ3RyYW5zaXRpb25MZWZ0T3V0JyxcbiAgdHJhbnNpdGlvblRvcEluOiAndHJhbnNpdGlvblRvcEluJyxcbiAgdHJhbnNpdGlvblRvcE91dDogJ3RyYW5zaXRpb25Ub3BPdXQnLFxuICB0cmFzaDogJ3RyYXNoJyxcbiAgdW5mb2xkOiAndW5mb2xkJyxcbiAgdW5saW5rOiAndW5saW5rJyxcbiAgdXBncmFkZUFzc2lzdGFudEFwcDogJ2FwcF91cGdyYWRlX2Fzc2lzdGFudCcsXG4gIHVwdGltZUFwcDogJ2FwcF91cHRpbWUnLFxuICB1c2VyOiAndXNlcicsXG4gIHVzZXJBdmF0YXI6ICd1c2VyQXZhdGFyJyxcbiAgdXNlcnM6ICd1c2VycycsXG4gIHVzZXJzUm9sZXNBcHA6ICdhcHBfdXNlcnNfcm9sZXMnLFxuICB2ZWN0b3I6ICd2ZWN0b3InLFxuICB2aWRlb1BsYXllcjogJ3ZpZGVvUGxheWVyJyxcbiAgdmlzQXJlYTogJ3Zpc19hcmVhJyxcbiAgdmlzQXJlYVN0YWNrZWQ6ICd2aXNfYXJlYV9zdGFja2VkJyxcbiAgdmlzQmFySG9yaXpvbnRhbDogJ3Zpc19iYXJfaG9yaXpvbnRhbCcsXG4gIHZpc0Jhckhvcml6b250YWxTdGFja2VkOiAndmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQnLFxuICB2aXNCYXJWZXJ0aWNhbDogJ3Zpc19iYXJfdmVydGljYWwnLFxuICB2aXNCYXJWZXJ0aWNhbFN0YWNrZWQ6ICd2aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQnLFxuICB2aXNHYXVnZTogJ3Zpc19nYXVnZScsXG4gIHZpc0dvYWw6ICd2aXNfZ29hbCcsXG4gIHZpc0xpbmU6ICd2aXNfbGluZScsXG4gIHZpc01hcENvb3JkaW5hdGU6ICd2aXNfbWFwX2Nvb3JkaW5hdGUnLFxuICB2aXNNYXBSZWdpb246ICd2aXNfbWFwX3JlZ2lvbicsXG4gIHZpc01ldHJpYzogJ3Zpc19tZXRyaWMnLFxuICB2aXNQaWU6ICd2aXNfcGllJyxcbiAgdmlzVGFibGU6ICd2aXNfdGFibGUnLFxuICB2aXNUYWdDbG91ZDogJ3Zpc190YWdfY2xvdWQnLFxuICB2aXNUZXh0OiAndmlzX3RleHQnLFxuICB2aXNUaW1lbGlvbjogJ3Zpc190aW1lbGlvbicsXG4gIHZpc1ZlZ2E6ICd2aXNfdmVnYScsXG4gIHZpc1Zpc3VhbEJ1aWxkZXI6ICd2aXNfdmlzdWFsX2J1aWxkZXInLFxuICB2aXN1YWxpemVBcHA6ICdhcHBfdmlzdWFsaXplJyxcbiAgdnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHA6ICdhcHBfdnVsbmVyYWJpbGl0eV9tYW5hZ2VtZW50JyxcbiAgd2FybmluZzogJ3dhcm5pbmcnLFxuICB3YXJuaW5nRmlsbGVkOiAnd2FybmluZ0ZpbGxlZCcsXG4gIGFsZXJ0OiAnd2FybmluZycsXG4gIC8vIE5PVEU6IFRoaXMgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzIGZvciBgd2FybmluZ2AsIGFkZGVkIGZvciBsZWdhY3kgY29tcGF0YWJpbGl0eSB3aXRoIEVsYXN0aWMgQ2hhcnRzXG4gIHdhdGNoZXNBcHA6ICdhcHBfd2F0Y2hlcycsXG4gIHdvcmRXcmFwOiAnd29yZFdyYXAnLFxuICB3b3JkV3JhcERpc2FibGVkOiAnd29yZFdyYXBEaXNhYmxlZCcsXG4gIHdvcmtwbGFjZVNlYXJjaEFwcDogJ2FwcF93b3JrcGxhY2Vfc2VhcmNoJyxcbiAgd3JlbmNoOiAnd3JlbmNoJyxcbiAgLy8gVG9rZW4gSWNvbiBJbXBvcnRzXG4gIHRva2VuQWxpYXM6ICd0b2tlbkFsaWFzJyxcbiAgdG9rZW5Bbm5vdGF0aW9uOiAndG9rZW5Bbm5vdGF0aW9uJyxcbiAgdG9rZW5BcnJheTogJ3Rva2VuQXJyYXknLFxuICB0b2tlbkJpbmFyeTogJ3Rva2VuQmluYXJ5JyxcbiAgdG9rZW5Cb29sZWFuOiAndG9rZW5Cb29sZWFuJyxcbiAgdG9rZW5DbGFzczogJ3Rva2VuQ2xhc3MnLFxuICB0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXI6ICd0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXInLFxuICB0b2tlbkNvbnN0YW50OiAndG9rZW5Db25zdGFudCcsXG4gIHRva2VuRGF0ZTogJ3Rva2VuRGF0ZScsXG4gIHRva2VuRGltZW5zaW9uOiAndG9rZW5EaW1lbnNpb24nLFxuICB0b2tlbkVsZW1lbnQ6ICd0b2tlbkVsZW1lbnQnLFxuICB0b2tlbkVudW06ICd0b2tlbkVudW0nLFxuICB0b2tlbkVudW1NZW1iZXI6ICd0b2tlbkVudW1NZW1iZXInLFxuICB0b2tlbkV2ZW50OiAndG9rZW5FdmVudCcsXG4gIHRva2VuRXhjZXB0aW9uOiAndG9rZW5FeGNlcHRpb24nLFxuICB0b2tlbkZpZWxkOiAndG9rZW5GaWVsZCcsXG4gIHRva2VuRmlsZTogJ3Rva2VuRmlsZScsXG4gIHRva2VuRmxhdHRlbmVkOiAndG9rZW5GbGF0dGVuZWQnLFxuICB0b2tlbkZ1bmN0aW9uOiAndG9rZW5GdW5jdGlvbicsXG4gIHRva2VuR2VvOiAndG9rZW5HZW8nLFxuICB0b2tlbkhpc3RvZ3JhbTogJ3Rva2VuSGlzdG9ncmFtJyxcbiAgdG9rZW5JbnRlcmZhY2U6ICd0b2tlbkludGVyZmFjZScsXG4gIHRva2VuSVA6ICd0b2tlbklQJyxcbiAgdG9rZW5Kb2luOiAndG9rZW5Kb2luJyxcbiAgdG9rZW5LZXk6ICd0b2tlbktleScsXG4gIHRva2VuS2V5d29yZDogJ3Rva2VuS2V5d29yZCcsXG4gIHRva2VuTWV0aG9kOiAndG9rZW5NZXRob2QnLFxuICB0b2tlbk1ldHJpY0NvdW50ZXI6ICd0b2tlbk1ldHJpY0NvdW50ZXInLFxuICB0b2tlbk1ldHJpY0dhdWdlOiAndG9rZW5NZXRyaWNHYXVnZScsXG4gIHRva2VuTW9kdWxlOiAndG9rZW5Nb2R1bGUnLFxuICB0b2tlbk5hbWVzcGFjZTogJ3Rva2VuTmFtZXNwYWNlJyxcbiAgdG9rZW5OZXN0ZWQ6ICd0b2tlbk5lc3RlZCcsXG4gIHRva2VuTnVsbDogJ3Rva2VuTnVsbCcsXG4gIHRva2VuTnVtYmVyOiAndG9rZW5OdW1iZXInLFxuICB0b2tlbk9iamVjdDogJ3Rva2VuT2JqZWN0JyxcbiAgdG9rZW5PcGVyYXRvcjogJ3Rva2VuT3BlcmF0b3InLFxuICB0b2tlblBhY2thZ2U6ICd0b2tlblBhY2thZ2UnLFxuICB0b2tlblBhcmFtZXRlcjogJ3Rva2VuUGFyYW1ldGVyJyxcbiAgdG9rZW5QZXJjb2xhdG9yOiAndG9rZW5QZXJjb2xhdG9yJyxcbiAgdG9rZW5Qcm9wZXJ0eTogJ3Rva2VuUHJvcGVydHknLFxuICB0b2tlblJhbmdlOiAndG9rZW5SYW5nZScsXG4gIHRva2VuUmFua0ZlYXR1cmU6ICd0b2tlblJhbmtGZWF0dXJlJyxcbiAgdG9rZW5SYW5rRmVhdHVyZXM6ICd0b2tlblJhbmtGZWF0dXJlcycsXG4gIHRva2VuUmVwbzogJ3Rva2VuUmVwbycsXG4gIHRva2VuU2VhcmNoVHlwZTogJ3Rva2VuU2VhcmNoVHlwZScsXG4gIHRva2VuU2VtYW50aWNUZXh0OiAndG9rZW5TZW1hbnRpY1RleHQnLFxuICB0b2tlblNoYXBlOiAndG9rZW5TaGFwZScsXG4gIHRva2VuU3RyaW5nOiAndG9rZW5TdHJpbmcnLFxuICB0b2tlblN0cnVjdDogJ3Rva2VuU3RydWN0JyxcbiAgdG9rZW5TeW1ib2w6ICd0b2tlblN5bWJvbCcsXG4gIHRva2VuVGFnOiAndG9rZW5UYWcnLFxuICB0b2tlblRleHQ6ICd0b2tlblRleHQnLFxuICB0b2tlblRva2VuQ291bnQ6ICd0b2tlblRva2VuQ291bnQnLFxuICB0b2tlblZhcmlhYmxlOiAndG9rZW5WYXJpYWJsZScsXG4gIHRva2VuVmVjdG9yRGVuc2U6ICd0b2tlblZlY3RvckRlbnNlJyxcbiAgdG9rZW5EZW5zZVZlY3RvcjogJ3Rva2VuVmVjdG9yRGVuc2UnLFxuICAvLyBOT1RFOiBUaGlzIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcyBmb3IgYHRva2VuVmVjdG9yRGVuc2VgLCBhZGRlZCBmb3IgbGVnYWN5IGNvbXBhdGFiaWxpdHlcbiAgdG9rZW5WZWN0b3JTcGFyc2U6ICd0b2tlblZlY3RvclNwYXJzZSdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIH0gZnJvbSAncmVhY3QtZG9tJztcbnZhciBfcXVldWUgPSBbXTtcbmZ1bmN0aW9uIHByb2Nlc3NRdWV1ZSgpIHtcbiAgLy8gdGhlIHF1ZXVlZCBmdW5jdGlvbnMgdHJpZ2dlciByZWFjdCBzZXRTdGF0ZXMgd2hpY2gsIGlmIHVuYmF0Y2hlZCxcbiAgLy8gZWFjaCBjYXVzZSBhIGZ1bGwgdXBkYXRlLT5yZW5kZXItPmRvbSBwYXNzIF9wZXIgZnVuY3Rpb25fXG4gIC8vIGluc3RlYWQsIHRlbGwgUmVhY3QgdG8gd2FpdCB1bnRpbCBhbGwgdXBkYXRlcyBhcmUgZmluaXNoZWQgYmVmb3JlIHJlLXJlbmRlcmluZ1xuICB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIF9xdWV1ZVtpXSgpO1xuICAgIH1cbiAgICBfcXVldWUubGVuZ3RoID0gMDtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZW5xdWV1ZVN0YXRlQ2hhbmdlKGZuKSB7XG4gIGlmIChfcXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgc2V0VGltZW91dChwcm9jZXNzUXVldWUpO1xuICB9XG4gIF9xdWV1ZS5wdXNoKGZuKTtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuZXhwb3J0IHZhciBDT0xPUlMgPSBbJ2RlZmF1bHQnLCAncHJpbWFyeScsICdzdWNjZXNzJywgJ2FjY2VudCcsICd3YXJuaW5nJywgJ2RhbmdlcicsICd0ZXh0JywgJ3N1YmR1ZWQnLCAnZ2hvc3QnLCAnaW5oZXJpdCddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmFtZWRDb2xvcihuYW1lKSB7XG4gIHJldHVybiBDT0xPUlMuaW5jbHVkZXMobmFtZSk7XG59IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHsgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KSB9IH0pKTsgfVxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsU2l6ZUNTUywgZXVpQ2FuQW5pbWF0ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgaWNvbkxvYWRpbmdPcGFjaXR5ID0gMC4wNTtcbnZhciBpY29uTG9hZGluZyA9IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IFwiLCBcIjtcXG4gIH1cXG5cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcblwiXSkpLCBpY29uTG9hZGluZ09wYWNpdHkpO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibmpkNzQ5LWxvZ29FbGFzdGljT3V0bGluZVwiLFxuICBzdHlsZXM6IFwiKltmaWxsXXtmaWxsOm5vbmUhaW1wb3J0YW50O30ub3V0bGluZXtmaWxsOmN1cnJlbnRDb2xvciFpbXBvcnRhbnQ7fTtsYWJlbDpsb2dvRWxhc3RpY091dGxpbmU7XCJcbn0gOiB7XG4gIG5hbWU6IFwibmpkNzQ5LWxvZ29FbGFzdGljT3V0bGluZVwiLFxuICBzdHlsZXM6IFwiKltmaWxsXXtmaWxsOm5vbmUhaW1wb3J0YW50O30ub3V0bGluZXtmaWxsOmN1cnJlbnRDb2xvciFpbXBvcnRhbnQ7fTtsYWJlbDpsb2dvRWxhc3RpY091dGxpbmU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJ1YWNqYzUtaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiY29sb3I6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiXG59IDoge1xuICBuYW1lOiBcInVhY2pjNS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJjb2xvcjppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpSWNvblN0eWxlcyA9IGZ1bmN0aW9uIGV1aUljb25TdHlsZXMoX3JlZjMpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjMuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUljb246IC8qI19fUFVSRV9fKi9jc3MoXCJmbGV4LXNocmluazowO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmaWxsOmN1cnJlbnRDb2xvcjt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsIDApOy5ldWlJY29uX19maWxsTmVnYXRpdmV7ZmlsbDpcIiwgZXVpVGhlbWUuY29sb3JzLmRhcmtlc3RTaGFkZSwgXCI7fTtsYWJlbDpldWlJY29uO1wiKSxcbiAgICAvLyBDb2xvcnNcbiAgICBhY2NlbnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmFjY2VudFRleHQsIFwiOztsYWJlbDphY2NlbnQ7XCIpLFxuICAgIGRhbmdlcjogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGFuZ2VyVGV4dCwgXCI7O2xhYmVsOmRhbmdlcjtcIiksXG4gICAgZ2hvc3Q6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmdob3N0LCBcIjsqW2ZpbGxdLC5ldWlJY29uX19maWxsTmVnYXRpdmV7ZmlsbDpjdXJyZW50Q29sb3IhaW1wb3J0YW50O307bGFiZWw6Z2hvc3Q7XCIpLFxuICAgIHByaW1hcnk6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnlUZXh0LCBcIjs7bGFiZWw6cHJpbWFyeTtcIiksXG4gICAgc3VjY2VzczogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQsIFwiOztsYWJlbDpzdWNjZXNzO1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWJkdWVkVGV4dCwgXCI7O2xhYmVsOnN1YmR1ZWQ7XCIpLFxuICAgIHRleHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRpdGxlLCBcIjsqW2ZpbGxdLC5ldWlJY29uX19maWxsTmVnYXRpdmV7ZmlsbDpjdXJyZW50Q29sb3IhaW1wb3J0YW50O307bGFiZWw6dGV4dDtcIiksXG4gICAgd2FybmluZzogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMud2FybmluZ1RleHQsIFwiOztsYWJlbDp3YXJuaW5nO1wiKSxcbiAgICBpbmhlcml0OiBfcmVmMixcbiAgICBkZWZhdWx0OiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmRlZmF1bHQ7XCIpLFxuICAgIGN1c3RvbUNvbG9yOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmN1c3RvbUNvbG9yO1wiKSxcbiAgICBsb2dvRWxhc3RpY091dGxpbmU6IF9yZWYsXG4gICAgLy8gU2l6ZXNcbiAgICBvcmlnaW5hbDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpvcmlnaW5hbDtcIiksXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhldWlUaGVtZS5zaXplLm0pLCBcIjtsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemUuYmFzZSksIFwiO2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MoZXVpVGhlbWUuc2l6ZS5sKSwgXCI7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MoZXVpVGhlbWUuc2l6ZS54bCksIFwiO2xhYmVsOnhsO1wiKSxcbiAgICB4eGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MoZXVpVGhlbWUuc2l6ZS54eGwpLCBcIjtsYWJlbDp4eGw7XCIpLFxuICAgIC8vIFZhcmlhbnRzXG4gICAgLy8gQXBwIGljb25zIGFyZSB0d28tdG9uZWQuIFRoaXMgcHJvdmlkZXMgdGhlIGJhc2UgY29sb3IuXG4gICAgYXBwOiAvKiNfX1BVUkVfXyovY3NzKFwiZmlsbDpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiOy5ldWlJY29uX19maWxsU2Vjb25kYXJ5e2ZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWNjZXNzVGV4dCwgXCI7fTtsYWJlbDphcHA7XCIpLFxuICAgIGxvZ286IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6bG9nbztcIiksXG4gICAgLy8gTG9hZGluZyBzdGF0ZXNcbiAgICBpc0xvYWRpbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJvcGFjaXR5OlwiLCBpY29uTG9hZGluZ09wYWNpdHksIFwiO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yO2JvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMuc21hbGwsIFwiOztsYWJlbDppc0xvYWRpbmc7XCIpLFxuICAgIGlzTG9hZGVkOiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgaWNvbkxvYWRpbmcsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ubm9ybWFsLCBcIiBlYXNlLWluIDBzIDEgZm9yd2FyZHM7fTtsYWJlbDppc0xvYWRlZDtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpSTE4bkNvbnN1bWVyIH0gZnJvbSAnLi4vY29udGV4dCc7XG5pbXBvcnQgeyBJMThuQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvY29udGV4dCc7XG5pbXBvcnQgeyBwcm9jZXNzU3RyaW5nVG9DaGlsZHJlbiB9IGZyb20gJy4vaTE4bl91dGlsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5mdW5jdGlvbiBlcnJvck9uTWlzc2luZ1ZhbHVlcyh0b2tlbikge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJJMThuIG1hcHBpbmcgZm9yIHRva2VuIFxcXCJcIi5jb25jYXQodG9rZW4sIFwiXFxcIiBpcyBhIGZvcm1hdHRpbmcgZnVuY3Rpb24gYnV0IG5vIHZhbHVlcyB3ZXJlIHByb3ZpZGVkLlwiKSk7XG59XG5mdW5jdGlvbiBsb29rdXBUb2tlbihvcHRpb25zKSB7XG4gIHZhciB0b2tlbiA9IG9wdGlvbnMudG9rZW4sXG4gICAgaTE4bk1hcHBpbmcgPSBvcHRpb25zLmkxOG5NYXBwaW5nLFxuICAgIHZhbHVlRGVmYXVsdCA9IG9wdGlvbnMudmFsdWVEZWZhdWx0LFxuICAgIGkxOG5NYXBwaW5nRnVuYyA9IG9wdGlvbnMuaTE4bk1hcHBpbmdGdW5jLFxuICAgIHZhbHVlcyA9IG9wdGlvbnMudmFsdWVzLFxuICAgIHJlbmRlciA9IG9wdGlvbnMucmVuZGVyO1xuICB2YXIgcmVuZGVyYWJsZSA9IGkxOG5NYXBwaW5nICYmIGkxOG5NYXBwaW5nW3Rva2VuXSB8fCB2YWx1ZURlZmF1bHQ7XG4gIGlmICh0eXBlb2YgcmVuZGVyYWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVycm9yT25NaXNzaW5nVmFsdWVzKHRva2VuKTtcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZSBUeXBlU2NyaXB0IGNvbXBsYWlucyB0aGF0IGBERUZBVUxUYCBkb2Vzbid0IGhhdmUgYSBjYWxsIHNpZ25hdHVyZSBidXQgd2UgdmVyaWZpZWQgYHJlbmRlcmFibGVgIGlzIGEgZnVuY3Rpb25cbiAgICB2YXIgcmVuZGVyZWQgPSByZW5kZXJhYmxlKHZhbHVlcyk7XG4gICAgcmV0dXJuIGkxOG5NYXBwaW5nRnVuYyAmJiB0eXBlb2YgcmVuZGVyZWQgPT09ICdzdHJpbmcnID8gaTE4bk1hcHBpbmdGdW5jKHJlbmRlcmVkKSA6IHJlbmRlcmVkO1xuICB9IGVsc2UgaWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiByZW5kZXJhYmxlICE9PSAnc3RyaW5nJykge1xuICAgIGlmIChpMThuTWFwcGluZ0Z1bmMgJiYgdHlwZW9mIHZhbHVlRGVmYXVsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlbmRlcmFibGUgPSBpMThuTWFwcGluZ0Z1bmModmFsdWVEZWZhdWx0KTtcbiAgICB9XG4gICAgLy8gdGhlcmUncyBhIGhvbGUgaW4gdGhlIHR5cGluZ3MgaGVyZSBhcyB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBpMThuTWFwcGluZ0Z1bmNcbiAgICAvLyByZXR1cm5lZCB0aGUgc2FtZSB0eXBlIG9mIHRoZSBkZWZhdWx0IHZhbHVlLCBidXQgd2UgbmVlZCB0byBrZWVwIHRoYXQgYXNzdW1wdGlvblxuICAgIHJldHVybiByZW5kZXJhYmxlO1xuICB9XG4gIHZhciBjaGlsZHJlbiA9IHByb2Nlc3NTdHJpbmdUb0NoaWxkcmVuKHJlbmRlcmFibGUsIHZhbHVlcywgaTE4bk1hcHBpbmdGdW5jKTtcbiAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBsaWtld2lzZSwgYHByb2Nlc3NTdHJpbmdUb0NoaWxkcmVuYCByZXR1cm5zIGEgc3RyaW5nIG9yIFJlYWN0Q2hpbGRbXSBkZXBlbmRpbmcgb25cbiAgICAvLyB0aGUgdHlwZSBvZiBgdmFsdWVzYCwgc28gd2Ugd2lsbCBtYWtlIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGRlZmF1bHQgdmFsdWUgaXMgY29ycmVjdC5cbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgdmFyIENvbXBvbmVudCA9IHJlbmRlciA/IHJlbmRlcihjaGlsZHJlbikgOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGNoaWxkcmVuKTtcbiAgfTtcblxuICAvLyBzYW1lIHJlYXNvbnMgYXMgYWJvdmUsIHdlIGNhbid0IHByb21pc2UgdGhlIHRyYW5zZm9ybXMgbWF0Y2ggdGhlIGRlZmF1bHQncyB0eXBlXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHZhbHVlcyk7XG59XG5mdW5jdGlvbiBpc0kxOG5Ub2tlbnNTaGFwZSh4KSB7XG4gIHJldHVybiB4LnRva2VucyAhPSBudWxsO1xufVxuXG4vLyBNdXN0IHVzZSB0aGUgZ2VuZXJpY3MgPFQgZXh0ZW5kcyB7fT5cbi8vIElmIGluc3RlYWQgdHlwZWQgd2l0aCBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudCB0aGVyZSBpc24ndCBmZWVkYmFjayBnaXZlbiBiYWNrIHRvIHRoZSBkZXZcbi8vIHdoZW4gdXNpbmcgYSBgdmFsdWVzYCBvYmplY3Qgd2l0aCBhIHJlbmRlcmVyIGNhbGxiYWNrLlxudmFyIEV1aUkxOG4gPSBmdW5jdGlvbiBFdWlJMThuKHByb3BzKSB7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKGkxOG5Db25maWcpIHtcbiAgICB2YXIgbWFwcGluZyA9IGkxOG5Db25maWcubWFwcGluZyxcbiAgICAgIG1hcHBpbmdGdW5jID0gaTE4bkNvbmZpZy5tYXBwaW5nRnVuYyxcbiAgICAgIHJlbmRlciA9IGkxOG5Db25maWcucmVuZGVyO1xuICAgIGlmIChpc0kxOG5Ub2tlbnNTaGFwZShwcm9wcykpIHtcbiAgICAgIHJldHVybiBwcm9wcy5jaGlsZHJlbihwcm9wcy50b2tlbnMubWFwKGZ1bmN0aW9uICh0b2tlbiwgaWR4KSB7XG4gICAgICAgIHJldHVybiBsb29rdXBUb2tlbih7XG4gICAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICAgIGkxOG5NYXBwaW5nOiBtYXBwaW5nLFxuICAgICAgICAgIGkxOG5NYXBwaW5nRnVuYzogbWFwcGluZ0Z1bmMsXG4gICAgICAgICAgdmFsdWVEZWZhdWx0OiBwcm9wcy5kZWZhdWx0c1tpZHhdLFxuICAgICAgICAgIHZhbHVlczogcHJvcHMudmFsdWVzLFxuICAgICAgICAgIHJlbmRlcjogcmVuZGVyXG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICB2YXIgdG9rZW5WYWx1ZSA9IGxvb2t1cFRva2VuKHtcbiAgICAgIHRva2VuOiBwcm9wcy50b2tlbixcbiAgICAgIGkxOG5NYXBwaW5nOiBtYXBwaW5nLFxuICAgICAgdmFsdWVEZWZhdWx0OiBwcm9wcy5kZWZhdWx0LFxuICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgIHZhbHVlczogcHJvcHMudmFsdWVzLFxuICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICB9KTtcbiAgICBpZiAocHJvcHMuY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBwcm9wcy5jaGlsZHJlbih0b2tlblZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRva2VuVmFsdWU7XG4gICAgfVxuICB9KTtcbn07XG5cbi8vIEEgc2luZ2xlIGRlZmF1bHQgY291bGQgYmUgYSBzdHJpbmcsIHJlYWN0IGNoaWxkLCBvciByZW5kZXIgZnVuY3Rpb25cblxuLy8gQW4gYXJyYXkgd2l0aCBtdWx0aXBsZSBkZWZhdWx0cyBjYW4gb25seSBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIG9yIGVsZW1lbnRzXG5cbmZ1bmN0aW9uIHVzZUV1aUkxOG4oKSB7XG4gIHZhciBpMThuQ29uZmlnID0gdXNlQ29udGV4dChJMThuQ29udGV4dCk7XG4gIHZhciBtYXBwaW5nID0gaTE4bkNvbmZpZy5tYXBwaW5nLFxuICAgIG1hcHBpbmdGdW5jID0gaTE4bkNvbmZpZy5tYXBwaW5nRnVuYyxcbiAgICByZW5kZXIgPSBpMThuQ29uZmlnLnJlbmRlcjtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHByb3BzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHByb3BzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG4gIGlmICh0eXBlb2YgcHJvcHNbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIF90b2tlbiA9IHByb3BzWzBdLFxuICAgICAgX2RlZmF1bHRWYWx1ZSA9IHByb3BzWzFdLFxuICAgICAgX3ZhbHVlcyA9IHByb3BzWzJdO1xuICAgIHJldHVybiBsb29rdXBUb2tlbih7XG4gICAgICB0b2tlbjogX3Rva2VuLFxuICAgICAgaTE4bk1hcHBpbmc6IG1hcHBpbmcsXG4gICAgICB2YWx1ZURlZmF1bHQ6IF9kZWZhdWx0VmFsdWUsXG4gICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgdmFsdWVzOiBfdmFsdWVzLFxuICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX3JlZiA9IHByb3BzLFxuICAgICAgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSxcbiAgICAgIF90b2tlbnMgPSBfcmVmMlswXSxcbiAgICAgIF9kZWZhdWx0VmFsdWVzID0gX3JlZjJbMV07XG4gICAgcmV0dXJuIF90b2tlbnMubWFwKGZ1bmN0aW9uICh0b2tlbiwgaWR4KSB7XG4gICAgICByZXR1cm4gbG9va3VwVG9rZW4oe1xuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGkxOG5NYXBwaW5nOiBtYXBwaW5nLFxuICAgICAgICB2YWx1ZURlZmF1bHQ6IF9kZWZhdWx0VmFsdWVzW2lkeF0sXG4gICAgICAgIGkxOG5NYXBwaW5nRnVuYzogbWFwcGluZ0Z1bmMsXG4gICAgICAgIHJlbmRlcjogcmVuZGVyXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuZXhwb3J0IHsgRXVpSTE4biwgdXNlRXVpSTE4biB9OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgSTE4bkNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh7fSk7XG52YXIgRXVpSTE4blByb3ZpZGVyID0gSTE4bkNvbnRleHQuUHJvdmlkZXIsXG4gIEV1aUkxOG5Db25zdW1lciA9IEkxOG5Db250ZXh0LkNvbnN1bWVyO1xudmFyIEV1aUNvbnRleHQgPSBmdW5jdGlvbiBFdWlDb250ZXh0KF9yZWYpIHtcbiAgdmFyIF9yZWYkaTE4biA9IF9yZWYuaTE4bixcbiAgICBpMThuID0gX3JlZiRpMThuID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkaTE4bixcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBpMThuXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5FdWlDb250ZXh0LnByb3BUeXBlcyA9IHtcbiAgaTE4bjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtYXBwaW5nOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuICAgIG1hcHBpbmdGdW5jOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIFNvbWUgYnJvd3NlcnMnIHRyYW5zbGF0aW9uIGZlYXR1cmVzIGRvbid0IHdvcmsgd2l0aCBhIHJlbmRlcmVkIGA8RnJhZ21lbnQ+YCBjb21wb25lbnQuXG4gICAgICAgKiBUaGUgYHJlbmRlcmAgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBwYXNzIGluIGFub3RoZXIgY29tcG9uZW50IGluc3RlYWQsIGUuZy4gYDxkaXY+YFxuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmb3JtYXROdW1iZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZvcm1hdERhdGVUaW1lOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBsb2NhbGU6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRcbn07XG5leHBvcnQgeyBFdWlDb250ZXh0LCBFdWlJMThuQ29uc3VtZXIsIEkxOG5Db250ZXh0IH07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNsb25lRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzQm9vbGVhbiwgaXNTdHJpbmcsIGlzTnVtYmVyLCBpc1VuZGVmaW5lZCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZWRpY2F0ZSc7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICByZXR1cm4gaXNCb29sZWFuKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpIHx8IGlzVW5kZWZpbmVkKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGhhc1Byb3BOYW1lKGNoaWxkKSB7XG4gIHJldHVybiBjaGlsZCA/IF90eXBlb2YoY2hpbGQpID09PSAnb2JqZWN0JyAmJiBjaGlsZC5oYXNPd25Qcm9wZXJ0eSgncHJvcE5hbWUnKSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIHBsYWNlaG9sZGVyIHZhbHVlcyBpbiBgaW5wdXRgIHdpdGggdGhlaXIgbWF0Y2hpbmcgdmFsdWUgaW4gYHZhbHVlc2BcbiAqIGUuZy4gaW5wdXQ6J0hlbGxvLCB7bmFtZX0nIHdpbGwgcmVwbGFjZSBge25hbWV9YCB3aXRoIGB2YWx1ZXNbbmFtZV1gXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7UmVuZGVyYWJsZVZhbHVlc30gdmFsdWVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpMThuTWFwcGluZ0Z1bmNcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBSZWFjdC5SZWFjdENoaWxkW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU3RyaW5nVG9DaGlsZHJlbihpbnB1dCwgdmFsdWVzLCBpMThuTWFwcGluZ0Z1bmMpIHtcbiAgdmFyIGNoaWxkcmVuID0gW107XG4gIHZhciBjaGlsZDtcbiAgZnVuY3Rpb24gYXBwZW5kQ2hhclRvQ2hpbGQoY2hhcikge1xuICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzdGFydGluZyBhIG5ldyBzdHJpbmcgbGl0ZXJhbFxuICAgICAgY2hpbGQgPSBjaGFyO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZXhpc3Rpbmcgc3RyaW5nIGxpdGVyYWxcbiAgICAgIGNoaWxkID0gY2hpbGQgKyBjaGFyO1xuICAgIH0gZWxzZSBpZiAoaGFzUHJvcE5hbWUoY2hpbGQpKSB7XG4gICAgICAvLyBhZGRpbmcgdG8gdGhlIHByb3BOYW1lIG9mIGEgdmFsdWVzIGxvb2t1cFxuICAgICAgY2hpbGQucHJvcE5hbWUgPSBjaGlsZC5wcm9wTmFtZSArIGNoYXI7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGFwcGVuZFZhbHVlVG9DaGlsZHJlbih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChpc0VsZW1lbnQodmFsdWUpKSB7XG4gICAgICAvLyBhbiBhcnJheSB3aXRoIGFueSBSZWFjdEVsZW1lbnRzIHdpbGwgYmUga2VwdCBhcyBhbiBhcnJheVxuICAgICAgLy8gc28gdGhleSBuZWVkIHRvIGJlIGFzc2lnbmVkIGEga2V5XG4gICAgICBjaGlsZHJlbi5wdXNoKCAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KHZhbHVlLCB7XG4gICAgICAgIGtleTogY2hpbGRyZW4ubGVuZ3RoXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIGlmIChoYXNQcm9wTmFtZSh2YWx1ZSkpIHtcbiAgICAgIC8vIHRoaXMgd29uJ3QgYmUgY2FsbGVkLCBwcm9wTmFtZSBjaGlsZHJlbiBhcmUgY29udmVydGVkIHRvIGEgUmVhY3RDaGlsZCBiZWZvcmUgY2FsbGluZyB0aGlzXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBjYW4gZ28gc3RyYWlnaHQgaW5cbiAgICAgIGlmIChpMThuTWFwcGluZ0Z1bmMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlID0gaTE4bk1hcHBpbmdGdW5jKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNoaWxkcmVuLnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHdlIGRvbid0IGVuY291bnRlciBhIG5vbi1wcmltaXRpdmVcbiAgLy8gdGhlbiBgY2hpbGRyZW5gIGNhbiBiZSBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgYXQgdGhlIGVuZFxuICB2YXIgZW5jb3VudGVyZWROb25QcmltaXRpdmUgPSBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaGFyID0gaW5wdXRbaV07XG4gICAgaWYgKGNoYXIgPT09ICdcXFxcJykge1xuICAgICAgLy8gcGVlayBhdCB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8ga25vdyBpZiB0aGlzIGlzIGFuIGVzY2FwZVxuICAgICAgdmFyIG5leHRDaGFyID0gaW5wdXRbaSArIDFdO1xuICAgICAgdmFyIGNoYXJUb0FkZCA9IGNoYXI7IC8vIGlmIHRoaXMgaXNuJ3QgYW4gZXNjYXBlIHNlcXVlbmNlIHRoZW4gd2Ugd2lsbCBhZGQgdGhlIGJhY2tzbGFzaFxuXG4gICAgICBpZiAobmV4dENoYXIgPT09ICd7JyB8fCBuZXh0Q2hhciA9PT0gJ30nKSB7XG4gICAgICAgIC8vIGVzY2FwaW5nIGEgYnJhY2VcbiAgICAgICAgaSArPSAxOyAvLyBhZHZhbmNlIHBhc3NlZCB0aGUgYnJhY2VcbiAgICAgICAgY2hhclRvQWRkID0gaW5wdXRbaV07XG4gICAgICB9XG4gICAgICBhcHBlbmRDaGFyVG9DaGlsZChjaGFyVG9BZGQpO1xuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJ3snKSB7XG4gICAgICBhcHBlbmRWYWx1ZVRvQ2hpbGRyZW4oY2hpbGQpO1xuICAgICAgY2hpbGQgPSB7XG4gICAgICAgIHByb3BOYW1lOiAnJ1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICd9Jykge1xuICAgICAgdmFyIHByb3BOYW1lID0gY2hpbGQucHJvcE5hbWU7XG4gICAgICBpZiAoIXZhbHVlcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiS2V5IFxcXCJcIi5jb25jYXQocHJvcE5hbWUsIFwiXFxcIiBub3QgZm91bmQgaW4gXCIpLmNvbmNhdChKU09OLnN0cmluZ2lmeSh2YWx1ZXMsIG51bGwsIDIpKSk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gdmFsdWVzW3Byb3BOYW1lXTtcbiAgICAgIGVuY291bnRlcmVkTm9uUHJpbWl0aXZlID0gZW5jb3VudGVyZWROb25QcmltaXRpdmUgfHwgIWlzUHJpbWl0aXZlKHByb3BWYWx1ZSk7XG4gICAgICBhcHBlbmRWYWx1ZVRvQ2hpbGRyZW4ocHJvcFZhbHVlKTtcbiAgICAgIGNoaWxkID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRDaGFyVG9DaGlsZChjaGFyKTtcbiAgICB9XG4gIH1cblxuICAvLyBpbmNsdWRlIGFueSByZW1haW5pbmcgY2hpbGQgdmFsdWVcbiAgYXBwZW5kVmFsdWVUb0NoaWxkcmVuKGNoaWxkKTtcbiAgcmV0dXJuIGVuY291bnRlcmVkTm9uUHJpbWl0aXZlID8gY2hpbGRyZW4gOiBjaGlsZHJlbi5qb2luKCcnKTtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuZXhwb3J0IHZhciB1c2VMb2FkaW5nQXJpYUxhYmVsID0gZnVuY3Rpb24gdXNlTG9hZGluZ0FyaWFMYWJlbCgpIHtcbiAgcmV0dXJuIHVzZUV1aUkxOG4oJ2V1aUxvYWRpbmdTdHJpbmdzLmFyaWFMYWJlbCcsICdMb2FkaW5nJyk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wic2l6ZVwiLCBcImNsYXNzTmFtZVwiLCBcImFyaWEtbGFiZWxcIiwgXCJjb2xvclwiLCBcInN0eWxlXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lLCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUxvYWRpbmdBcmlhTGFiZWwgfSBmcm9tICcuL19sb2FkaW5nX3N0cmluZ3MnO1xuaW1wb3J0IHsgZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMsIGV1aVNwaW5uZXJCb3JkZXJDb2xvcnNDU1MgfSBmcm9tICcuL2xvYWRpbmdfc3Bpbm5lci5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCddO1xuZXhwb3J0IHZhciBFdWlMb2FkaW5nU3Bpbm5lciA9IGZ1bmN0aW9uIEV1aUxvYWRpbmdTcGlubmVyKF9yZWYpIHtcbiAgdmFyIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgYXJpYUxhYmVsID0gX3JlZlsnYXJpYS1sYWJlbCddLFxuICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUxvYWRpbmdTcGlubmVyJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpTG9hZGluZ1NwaW5uZXIsIHN0eWxlc1tzaXplXV07XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBjdXN0b21Db2xvclN0eWxlID0gY29sb3IgPyBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKSwge30sIHtcbiAgICBib3JkZXJDb2xvcjogZXVpU3Bpbm5lckJvcmRlckNvbG9yc0NTUyhldWlUaGVtZSwgY29sb3IpXG4gIH0pIDogc3R5bGU7XG4gIHZhciBkZWZhdWx0TGFiZWwgPSB1c2VMb2FkaW5nQXJpYUxhYmVsKCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIHN0eWxlOiBjdXN0b21Db2xvclN0eWxlLFxuICAgIHJvbGU6IFwicHJvZ3Jlc3NiYXJcIixcbiAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsIHx8IGRlZmF1bHRMYWJlbFxuICB9LCByZXN0KSk7XG59O1xuRXVpTG9hZGluZ1NwaW5uZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgYm9yZGVyIGFuZCBoaWdobGlnaHQuXG4gICAgICAgKiBFYWNoIGtleSBhY2NlcHRzIGFueSB2YWxpZCBDU1MgY29sb3IgdmFsdWUgYXMgYSBgc3RyaW5nYFxuICAgICAgICogU2VlICNFdWlMb2FkaW5nU3Bpbm5lckNvbG9yXG4gICAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYm9yZGVyOiBQcm9wVHlwZXMuYW55LFxuICAgIGhpZ2hsaWdodDogUHJvcFR5cGVzLmFueVxuICB9KVxufTsiLCAidmFyIF90ZW1wbGF0ZU9iamVjdDtcbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoZSwgdCkgeyByZXR1cm4gdCB8fCAodCA9IGUuc2xpY2UoMCkpLCBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHQpIH0gfSkpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlLCBsb2dpY2FsU2l6ZUNTUywgbG9naWNhbFNob3J0aGFuZENTUywgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfbG9hZGluZ1NwaW5uZXIgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgZnJvbSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcbiAgfVxcblxcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xcbiAgfVxcblwiXSkpKTtcbnZhciBzcGlubmVyU2l6ZXMgPSB7XG4gIHM6ICdtJyxcbiAgbTogJ2Jhc2UnLFxuICBsOiAnbCcsXG4gIHhsOiAneGwnLFxuICB4eGw6ICd4eGwnXG59O1xuZXhwb3J0IHZhciBldWlTcGlubmVyQm9yZGVyQ29sb3JzQ1NTID0gZnVuY3Rpb24gZXVpU3Bpbm5lckJvcmRlckNvbG9yc0NTUyhfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHZhciBjb2xvcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgX2NvbG9ycyRib3JkZXIgPSBjb2xvcnMuYm9yZGVyLFxuICAgIGJvcmRlciA9IF9jb2xvcnMkYm9yZGVyID09PSB2b2lkIDAgPyBldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSA6IF9jb2xvcnMkYm9yZGVyLFxuICAgIF9jb2xvcnMkaGlnaGxpZ2h0ID0gY29sb3JzLmhpZ2hsaWdodCxcbiAgICBoaWdobGlnaHQgPSBfY29sb3JzJGhpZ2hsaWdodCA9PT0gdm9pZCAwID8gZXVpVGhlbWUuY29sb3JzLnByaW1hcnkgOiBfY29sb3JzJGhpZ2hsaWdodDtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KGhpZ2hsaWdodCwgXCIgXCIpLmNvbmNhdChib3JkZXIsIFwiIFwiKS5jb25jYXQoYm9yZGVyLCBcIiBcIikuY29uY2F0KGJvcmRlcik7XG59O1xuZXhwb3J0IHZhciBldWlMb2FkaW5nU3Bpbm5lclN0eWxlcyA9IGZ1bmN0aW9uIGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpTG9hZGluZ1NwaW5uZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJmbGV4LXNocmluazowO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLnRoaWNrLCBcIjtcIiwgbG9naWNhbFNob3J0aGFuZENTUygnYm9yZGVyLWNvbG9yJywgZXVpU3Bpbm5lckJvcmRlckNvbG9yc0NTUyhldWlUaGVtZUNvbnRleHQpKSwgXCIgXCIsIGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgX2xvYWRpbmdTcGlubmVyLCBcIiAwLjZzIGluZmluaXRlIGxpbmVhcjt9O2xhYmVsOmV1aUxvYWRpbmdTcGlubmVyO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MoZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMuc10sIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnNdKSwgXCIgYm9yZGVyLXdpZHRoOlwiLCBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggKiAxLjU7XG4gICAgfSksIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLm1dLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5tXSksIFwiIGJvcmRlci13aWR0aDpcIiwgbWF0aFdpdGhVbml0cyhldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICogMS41O1xuICAgIH0pLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5sXSwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMubF0pLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MoZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMueGxdLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy54bF0pLCBcIjs7bGFiZWw6eGw7XCIpLFxuICAgIHh4bDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsU2l6ZUNTUyhldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy54eGxdLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy54eGxdKSwgXCI7O2xhYmVsOnh4bDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlCdXR0b25EaXNwbGF5Q29udGVudFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUJ1dHRvbkRpc3BsYXlDb250ZW50U3R5bGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpQnV0dG9uRGlzcGxheUNvbnRlbnQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnaGVpZ2h0JywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtnYXA6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7O2xhYmVsOmV1aUJ1dHRvbkRpc3BsYXlDb250ZW50O1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFVSTCBmcm9tICd1cmwtcGFyc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSHJlZihocmVmKSB7XG4gIC8vIGNoZWNrIGhyZWYgYW5kIHRyZWF0IGl0IGFzIGludmFsaWQgaWYgaXQgdXNlcyB0aGUgamF2YXNjcmlwdDogcHJvdG9jb2xcbiAgdmFyIHBhcnRzID0gbmV3IFVSTChocmVmKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNjcmlwdC11cmxcbiAgcmV0dXJuIHBhcnRzLnByb3RvY29sICE9PSAnamF2YXNjcmlwdDonO1xufSIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaWRlXCIsIFwiaWNvblNpemVcIiwgXCJjb2xvclwiLCBcInNpemVcIiwgXCJmbHVzaFwiLCBcImlzRGlzYWJsZWRcIiwgXCJkaXNhYmxlZFwiLCBcImlzTG9hZGluZ1wiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJ0eXBlXCIsIFwiYnV0dG9uUmVmXCIsIFwiY29udGVudFByb3BzXCIsIFwidGV4dFByb3BzXCIsIFwiaXNTZWxlY3RlZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcywgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uRGlzcGxheUNvbnRlbnQgfSBmcm9tICcuLi9idXR0b25fZGlzcGxheS9fYnV0dG9uX2Rpc3BsYXlfY29udGVudCc7XG5pbXBvcnQgeyB1c2VFdWlCdXR0b25Db2xvckNTUyB9IGZyb20gJy4uLy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL2J1dHRvbic7XG5pbXBvcnQgeyBpc0J1dHRvbkRpc2FibGVkIH0gZnJvbSAnLi4vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5JztcbmltcG9ydCB7IGV1aUJ1dHRvbkVtcHR5U3R5bGVzIH0gZnJvbSAnLi9idXR0b25fZW1wdHkuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWyd4cycsICdzJywgJ20nXTtcbmV4cG9ydCB2YXIgRkxVU0hfVFlQRVMgPSBbJ2xlZnQnLCAncmlnaHQnLCAnYm90aCddO1xuXG4vKipcbiAqIEV4dGVuZHMgRXVpQnV0dG9uQ29udGVudFByb3BzIHdoaWNoIHByb3ZpZGVzXG4gKiBgaWNvblR5cGVgLCBgaWNvblNpZGVgLCBhbmQgYHRleHRQcm9wc2BcbiAqL1xuXG5leHBvcnQgdmFyIEV1aUJ1dHRvbkVtcHR5ID0gZnVuY3Rpb24gRXVpQnV0dG9uRW1wdHkoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICBfcmVmJGljb25TaWRlID0gX3JlZi5pY29uU2lkZSxcbiAgICBpY29uU2lkZSA9IF9yZWYkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkaWNvblNpZGUsXG4gICAgX3JlZiRpY29uU2l6ZSA9IF9yZWYuaWNvblNpemUsXG4gICAgaWNvblNpemUgPSBfcmVmJGljb25TaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJGljb25TaXplLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3ByaW1hcnknIDogX3JlZiRjb2xvcixcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIGZsdXNoID0gX3JlZi5mbHVzaCxcbiAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICByZWwgPSBfcmVmLnJlbCxcbiAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgY29udGVudFByb3BzID0gX3JlZi5jb250ZW50UHJvcHMsXG4gICAgdGV4dFByb3BzID0gX3JlZi50ZXh0UHJvcHMsXG4gICAgaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc0Rpc2FibGVkID0gaXNCdXR0b25EaXNhYmxlZCh7XG4gICAgaXNEaXNhYmxlZDogX2lzRGlzYWJsZWQgfHwgZGlzYWJsZWQsXG4gICAgaHJlZjogaHJlZixcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ1xuICB9KTtcbiAgdmFyIGJ1dHRvbkNvbG9yU3R5bGVzID0gdXNlRXVpQnV0dG9uQ29sb3JDU1Moe1xuICAgIGRpc3BsYXk6ICdlbXB0eSdcbiAgfSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlCdXR0b25FbXB0eVN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUJ1dHRvbkVtcHR5LCBzdHlsZXNbc2l6ZV0sIGJ1dHRvbkNvbG9yU3R5bGVzW2lzRGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogY29sb3JdLCBmbHVzaCAmJiBzdHlsZXMuZmx1c2gsIGZsdXNoICYmIHN0eWxlc1tmbHVzaF0sIGlzRGlzYWJsZWQgJiYgc3R5bGVzLmlzRGlzYWJsZWRdO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkVtcHR5JywgY2xhc3NOYW1lKTtcbiAgdmFyIGNvbnRlbnRDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uRW1wdHlfX2NvbnRlbnQnLCBjb250ZW50UHJvcHMgPT09IG51bGwgfHwgY29udGVudFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb250ZW50UHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHRleHRDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uRW1wdHlfX3RleHQnLCB0ZXh0UHJvcHMgJiYgdGV4dFByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciBpbm5lck5vZGUgPSBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkRpc3BsYXlDb250ZW50LCBfZXh0ZW5kcyh7XG4gICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICBpY29uVHlwZTogaWNvblR5cGUsXG4gICAgaWNvblNpZGU6IGljb25TaWRlLFxuICAgIGljb25TaXplOiBzaXplID09PSAneHMnID8gJ3MnIDogaWNvblNpemUsXG4gICAgdGV4dFByb3BzOiB0ZXh0UHJvcHMgPT09IGZhbHNlID8gZmFsc2UgOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRleHRQcm9wcyksIHt9LCB7XG4gICAgICBjbGFzc05hbWU6IHRleHRDbGFzc05hbWVzXG4gICAgfSlcbiAgfSwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb250ZW50UHJvcHMpLCB7fSwge1xuICAgIGNsYXNzTmFtZTogY29udGVudENsYXNzTmFtZXNcbiAgfSkpLCBjaGlsZHJlbik7XG5cbiAgLy8gPGE+IGVsZW1lbnRzIGRvbid0IHJlc3BlY3QgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLiBTbyBpZiB3ZSdyZSBkaXNhYmxlZCwgd2UnbGwganVzdCBwcmV0ZW5kXG4gIC8vIHRoaXMgaXMgYSBidXR0b24gYW5kIHBpZ2d5YmFjayBvZmYgaXRzIGRpc2FibGVkIHN0eWxlcy5cbiAgaWYgKGhyZWYgJiYgIWlzRGlzYWJsZWQpIHtcbiAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiBzZWN1cmVSZWwsXG4gICAgICByZWY6IGJ1dHRvblJlZlxuICAgIH0sIHJlc3QpLCBpbm5lck5vZGUpO1xuICB9XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgdHlwZTogdHlwZSxcbiAgICByZWY6IGJ1dHRvblJlZixcbiAgICBcImFyaWEtcHJlc3NlZFwiOiBpc1NlbGVjdGVkXG4gIH0sIHJlc3QpLCBpbm5lck5vZGUpO1xufTtcbkV1aUJ1dHRvbkVtcHR5LnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIEFueSBvZiB0aGUgbmFtZWQgY29sb3IgcGFsZXR0ZSBvcHRpb25zLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG4gIGZsdXNoOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5hbnksXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgYDxzcGFuPmAgd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgYDxzcGFuPmAgd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICAvKipcbiAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbdW5kZWZpbmVkXSldKSxcbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgYDxzcGFuPmAgd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0L2NoaWxkcmVuIG9ubHkgKG5vdCBpY29uKVxuICAgICAqXG4gICAgICogVGhpcyBzcGFuIHdyYXBwZXIgY2FuIGJlIHJlbW92ZWQgYnkgcGFzc2luZyBgdGV4dFByb3BzPXtmYWxzZX1gLlxuICAgICAqL1xuICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbFNob3J0aGFuZENTUywgZXVpQ2FuQW5pbWF0ZSB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aUJ1dHRvbkRpc3BsYXlTdHlsZXMgfSBmcm9tICcuLi9idXR0b25fZGlzcGxheS9fYnV0dG9uX2Rpc3BsYXkuc3R5bGVzJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFseXdiaWQtZmx1c2hcIixcbiAgc3R5bGVzOiBcInBhZGRpbmctaW5saW5lOjA7bGFiZWw6Zmx1c2g7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWx5d2JpZC1mbHVzaFwiLFxuICBzdHlsZXM6IFwicGFkZGluZy1pbmxpbmU6MDtsYWJlbDpmbHVzaDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlCdXR0b25FbXB0eVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUJ1dHRvbkVtcHR5U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG5cbiAgLy8gRXVpQnV0dG9uRW1wdHkgdXNlcyB0aGUgc2FtZSBzaXplL2ZvbnQgc3R5bGluZyBhcyBFdWlCdXR0b25EaXNwbGF5LFxuICAvLyBidXQgZG9lcyBub3Qgc2hhcmUgZW5vdWdoIG9mIHRoZSBzYW1lIGNvbG9ycy9wcm9wcyB0byB0aGUgcG9pbnRcbiAgLy8gb2YgdXNpbmcgdGhlIGFjdHVhbCBjb21wb25lbnQgLSBzbyB3ZSdsbCByZXVzZSBpdHMgc3R5bGVzIGluc3RlYWRcbiAgdmFyIGRpc3BsYXlTdHlsZXMgPSBldWlCdXR0b25EaXNwbGF5U3R5bGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHJldHVybiB7XG4gICAgZXVpQnV0dG9uRW1wdHk6IC8qI19fUFVSRV9fKi9jc3MoZGlzcGxheVN0eWxlcy5ldWlCdXR0b25EaXNwbGF5LCBcIiBcIiwgbG9naWNhbFNob3J0aGFuZENTUygncGFkZGluZycsIFwiMCBcIi5jb25jYXQoZXVpVGhlbWUuc2l6ZS5zKSksIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW47dHJhbnNpdGlvbi1kdXJhdGlvbjpcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiO307bGFiZWw6ZXVpQnV0dG9uRW1wdHk7XCIpLFxuICAgIGlzRGlzYWJsZWQ6IGRpc3BsYXlTdHlsZXMuaXNEaXNhYmxlZCxcbiAgICAvLyBTaXplc1xuICAgIHhzOiBkaXNwbGF5U3R5bGVzLnhzLFxuICAgIHM6IGRpc3BsYXlTdHlsZXMucyxcbiAgICBtOiBkaXNwbGF5U3R5bGVzLm0sXG4gICAgLy8gRmx1c2ggc2lkZXNcbiAgICBmbHVzaDogX3JlZixcbiAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21hcmdpbi1yaWdodCcsIGV1aVRoZW1lLnNpemUucyksIFwiOztsYWJlbDpsZWZ0O1wiKSxcbiAgICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXJnaW4tbGVmdCcsIGV1aVRoZW1lLnNpemUucyksIFwiOztsYWJlbDpyaWdodDtcIiksXG4gICAgYm90aDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpib3RoO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpemVcIiwgXCJjb2xvclwiLCBcImlzRGlzYWJsZWRcIiwgXCJkaXNhYmxlZFwiLCBcImhyZWZcIiwgXCJ0eXBlXCIsIFwiZGlzcGxheVwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInNpemVcIiwgXCJidXR0b25SZWZcIiwgXCJpc1NlbGVjdGVkXCIsIFwiaXNMb2FkaW5nXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuLi8uLi9sb2FkaW5nJztcbmltcG9ydCB7IHVzZUV1aUJ1dHRvbkNvbG9yQ1NTLCB1c2VFdWlCdXR0b25Gb2N1c0NTUyB9IGZyb20gJy4uLy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL2J1dHRvbic7XG5pbXBvcnQgeyBpc0J1dHRvbkRpc2FibGVkIH0gZnJvbSAnLi4vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5JztcbmltcG9ydCB7IGV1aUJ1dHRvbkljb25TdHlsZXMsIF9lbXB0eUhvdmVyU3R5bGVzIH0gZnJvbSAnLi9idXR0b25faWNvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ3hzJywgJ3MnLCAnbSddO1xuZXhwb3J0IHZhciBESVNQTEFZUyA9IFsnYmFzZScsICdlbXB0eScsICdmaWxsJ107XG5leHBvcnQgdmFyIEV1aUJ1dHRvbkljb24gPSBmdW5jdGlvbiBFdWlCdXR0b25JY29uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICBfcmVmJGljb25TaXplID0gX3JlZi5pY29uU2l6ZSxcbiAgICBpY29uU2l6ZSA9IF9yZWYkaWNvblNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkaWNvblNpemUsXG4gICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGNvbG9yLFxuICAgIF9pc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYkdHlwZSxcbiAgICBfcmVmJGRpc3BsYXkgPSBfcmVmLmRpc3BsYXksXG4gICAgZGlzcGxheSA9IF9yZWYkZGlzcGxheSA9PT0gdm9pZCAwID8gJ2VtcHR5JyA6IF9yZWYkZGlzcGxheSxcbiAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICByZWwgPSBfcmVmLnJlbCxcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ3hzJyA6IF9yZWYkc2l6ZSxcbiAgICBidXR0b25SZWYgPSBfcmVmLmJ1dHRvblJlZixcbiAgICBpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgIGlzTG9hZGluZyA9IF9yZWYuaXNMb2FkaW5nLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzRGlzYWJsZWQgPSBpc0J1dHRvbkRpc2FibGVkKHtcbiAgICBpc0Rpc2FibGVkOiBfaXNEaXNhYmxlZCB8fCBkaXNhYmxlZCxcbiAgICBocmVmOiBocmVmLFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nXG4gIH0pO1xuICB2YXIgYXJpYUhpZGRlbiA9IHJlc3RbJ2FyaWEtaGlkZGVuJ107XG4gIHZhciBpc0FyaWFIaWRkZW4gPSBhcmlhSGlkZGVuID09PSAndHJ1ZScgfHwgYXJpYUhpZGRlbiA9PT0gdHJ1ZTtcbiAgaWYgKCFyZXN0WydhcmlhLWxhYmVsJ10gJiYgIXJlc3RbJ2FyaWEtbGFiZWxsZWRieSddICYmICFpc0FyaWFIaWRkZW4pIHtcbiAgICBjb25zb2xlLndhcm4oXCJFdWlCdXR0b25JY29uIHJlcXVpcmVzIGFyaWEtbGFiZWwgb3IgYXJpYS1sYWJlbGxlZGJ5IHRvIGJlIHNwZWNpZmllZCBiZWNhdXNlIGljb24tb25seVxcbiAgICAgIGJ1dHRvbnMgYXJlIHNjcmVlbi1yZWFkZXItaW5hY2Nlc3NpYmxlIHdpdGhvdXQgdGhlbS5cIik7XG4gIH1cbiAgdmFyIGJ1dHRvbkNvbG9yU3R5bGVzID0gdXNlRXVpQnV0dG9uQ29sb3JDU1Moe1xuICAgIGRpc3BsYXk6IGRpc3BsYXlcbiAgfSk7XG4gIHZhciBidXR0b25Gb2N1c1N0eWxlID0gdXNlRXVpQnV0dG9uRm9jdXNDU1MoKTtcbiAgdmFyIGVtcHR5SG92ZXJTdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhfZW1wdHlIb3ZlclN0eWxlcyk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlCdXR0b25JY29uU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpQnV0dG9uSWNvbiwgc3R5bGVzW3NpemVdLCBidXR0b25Db2xvclN0eWxlc1tpc0Rpc2FibGVkID8gJ2Rpc2FibGVkJyA6IGNvbG9yXSwgYnV0dG9uRm9jdXNTdHlsZSwgZGlzcGxheSA9PT0gJ2VtcHR5JyAmJiAhaXNEaXNhYmxlZCAmJiBlbXB0eUhvdmVyU3R5bGVzW2NvbG9yXSwgaXNEaXNhYmxlZCAmJiBzdHlsZXMuaXNEaXNhYmxlZF07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uSWNvbicsIGNsYXNzTmFtZSk7XG5cbiAgLy8gQWRkIGFuIGljb24gdG8gdGhlIGJ1dHRvbiBpZiBvbmUgZXhpc3RzLlxuICB2YXIgYnV0dG9uSWNvbjtcbiAgaWYgKGljb25UeXBlICYmICFpc0xvYWRpbmcpIHtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQnV0dG9uSWNvbl9faWNvblwiLFxuICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICBzaXplOiBpY29uU2l6ZSxcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuICAgIH0pO1xuICB9XG4gIGlmIChpY29uVHlwZSAmJiBpc0xvYWRpbmcpIHtcbiAgICAvLyBgb3JpZ2luYWxgIHNpemUgZG9lc24ndCBleGlzdCBpbiBgRXVpTG9hZGluZ1NwaW5uZXJgXG4gICAgLy8gd2hlbiB0aGUgYGljb25TaXplYCBpcyBgb3JpZ2luYWxgIHdlIGRvbid0IHBhc3MgYW55IHNpemUgdG8gdGhlIGBFdWlMb2FkaW5nU3Bpbm5lcmBcbiAgICAvLyBzbyBpdCBnZXRzIHRoZSBkZWZhdWx0IHNpemVcbiAgICB2YXIgbG9hZGluZ1NpemUgPSBpY29uU2l6ZSA9PT0gJ29yaWdpbmFsJyA/IHVuZGVmaW5lZCA6IGljb25TaXplO1xuXG4gICAgLy8gV2hlbiB0aGUgYnV0dG9uIGlzIGRpc2FibGVkIHRoZSB0ZXh0IGdldHMgZ3JheVxuICAgIC8vIGFuZCBpbiBzb21lIGJ1dHRvbnMgdGhlIGJhY2tncm91bmQgZ2V0cyBhIGxpZ2h0IGdyYXlcbiAgICAvLyBmb3IgYmV0dGVyIGNvbnRyYXN0IHdlIHdhbnQgdG8gY2hhbmdlIHRoZSBib3JkZXIgb2YgdGhlIHNwaW5uZXJcbiAgICAvLyB0byBoYXZlIHRoZSBzYW1lIGNvbG9yIG9mIHRoZSB0ZXh0LiBUaGlzIHdheSB3ZSBlbnN1cmUgdGhlIGJvcmRlcnNcbiAgICAvLyBhcmUgYWx3YXlzIHZpc2libGUuIFRoZSBkZWZhdWx0IHNwaW5uZXIgY29sb3IgY291bGQgYmUgdmVyeSBsaWdodC5cbiAgICB2YXIgbG9hZGluZ1NwaW5uZXJDb2xvciA9IGlzRGlzYWJsZWQgPyB7XG4gICAgICBib3JkZXI6ICdjdXJyZW50Y29sb3InXG4gICAgfSA6IHVuZGVmaW5lZDtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgc2l6ZTogbG9hZGluZ1NpemUsXG4gICAgICBjb2xvcjogbG9hZGluZ1NwaW5uZXJDb2xvclxuICAgIH0pO1xuICB9XG5cbiAgLy8gPGE+IGVsZW1lbnRzIGRvbid0IHJlc3BlY3QgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLiBTbyBpZiB3ZSdyZSBkaXNhYmxlZCwgd2UnbGwganVzdCBwcmV0ZW5kXG4gIC8vIHRoaXMgaXMgYSBidXR0b24gYW5kIHBpZ2d5YmFjayBvZmYgaXRzIGRpc2FibGVkIHN0eWxlcy5cbiAgaWYgKGhyZWYgJiYgIWlzRGlzYWJsZWQpIHtcbiAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgdGFiSW5kZXg6IGlzQXJpYUhpZGRlbiA/IC0xIDogdW5kZWZpbmVkLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiBzZWN1cmVSZWwsXG4gICAgICByZWY6IGJ1dHRvblJlZlxuICAgIH0sIHJlc3QpLCBidXR0b25JY29uKTtcbiAgfVxuICB2YXIgYnV0dG9uVHlwZTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIHRhYkluZGV4OiBpc0FyaWFIaWRkZW4gPyAtMSA6IHVuZGVmaW5lZCxcbiAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgXCJhcmlhLXByZXNzZWRcIjogaXNTZWxlY3RlZCxcbiAgICB0eXBlOiB0eXBlLFxuICAgIHJlZjogYnV0dG9uUmVmXG4gIH0sIHJlc3QpLCBidXR0b25JY29uKTtcbn07XG5FdWlCdXR0b25JY29uLnByb3BUeXBlcyA9IHtcbiAgdHlwZTogUHJvcFR5cGVzLmFueSxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIEFueSBvZiB0aGUgbmFtZWQgY29sb3IgcGFsZXR0ZSBvcHRpb25zLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBPdmVyYWxsIHNpemUgb2YgYnV0dG9uLlxuICAgICAqIE1hdGNoZXMgdGhlIHNpemVzIG9mIG90aGVyIEV1aUJ1dHRvbnNcbiAgICAgKi9cbiAgLyoqXG4gICAgICogT3ZlcmFsbCBzaXplIG9mIGJ1dHRvbi5cbiAgICAgKiBNYXRjaGVzIHRoZSBzaXplcyBvZiBvdGhlciBFdWlCdXR0b25zXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFNpemUgb2YgdGhlIGljb24gb25seS5cbiAgICAgKiBUaGlzIHdpbGwgbm90IGFmZmVjdCB0aGUgb3ZlcmFsbCBzaXplIG9mIHRoZSBidXR0b25cbiAgICAgKi9cbiAgaWNvblNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzcGxheSBzdHlsZSBmb3IgbWF0Y2hpbmcgb3RoZXIgRXVpQnV0dG9uIHR5cGVzLlxuICAgICAqIGBiYXNlYCBpcyBlcXVpdmFsZW50IHRvIGEgdHlwaWNhbCBFdWlCdXR0b25cbiAgICAgKiBgZmlsbGAgaXMgZXF1aXZhbGVudCB0byBhIGZpbGxlZCBFdWlCdXR0b25cbiAgICAgKiBgZW1wdHlgIChkZWZhdWx0KSBpcyBlcXVpdmFsZW50IHRvIGFuIEV1aUJ1dHRvbkVtcHR5XG4gICAgICovXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3BsYXkgc3R5bGUgZm9yIG1hdGNoaW5nIG90aGVyIEV1aUJ1dHRvbiB0eXBlcy5cbiAgICAgKiBgYmFzZWAgaXMgZXF1aXZhbGVudCB0byBhIHR5cGljYWwgRXVpQnV0dG9uXG4gICAgICogYGZpbGxgIGlzIGVxdWl2YWxlbnQgdG8gYSBmaWxsZWQgRXVpQnV0dG9uXG4gICAgICogYGVtcHR5YCAoZGVmYXVsdCkgaXMgZXF1aXZhbGVudCB0byBhbiBFdWlCdXR0b25FbXB0eVxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxTaXplQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgQlVUVE9OX0NPTE9SUywgZXVpQnV0dG9uRW1wdHlDb2xvciwgZXVpQnV0dG9uU2l6ZU1hcCB9IGZyb20gJy4uLy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL2J1dHRvbic7XG5pbXBvcnQgeyBldWlCdXR0b25CYXNlQ1NTIH0gZnJvbSAnLi4vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5LnN0eWxlcyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI4NTk1cDktaXNEaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiY3Vyc29yOm5vdC1hbGxvd2VkO2xhYmVsOmlzRGlzYWJsZWQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiODU5NXA5LWlzRGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImN1cnNvcjpub3QtYWxsb3dlZDtsYWJlbDppc0Rpc2FibGVkO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUJ1dHRvbkljb25TdHlsZXMgPSBmdW5jdGlvbiBldWlCdXR0b25JY29uU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgc2l6ZXMgPSBldWlCdXR0b25TaXplTWFwKGV1aVRoZW1lQ29udGV4dCk7XG4gIHJldHVybiB7XG4gICAgZXVpQnV0dG9uSWNvbjogLyojX19QVVJFX18qL2NzcyhldWlCdXR0b25CYXNlQ1NTKCksIFwiZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDsmPnN2Z3twb2ludGVyLWV2ZW50czpub25lO307bGFiZWw6ZXVpQnV0dG9uSWNvbjtcIiksXG4gICAgaXNEaXNhYmxlZDogX3JlZixcbiAgICAvLyBTaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKHNpemVzLnhzLmhlaWdodCksIFwiIGJvcmRlci1yYWRpdXM6XCIsIHNpemVzLnhzLnJhZGl1cywgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKHNpemVzLnMuaGVpZ2h0KSwgXCIgYm9yZGVyLXJhZGl1czpcIiwgc2l6ZXMucy5yYWRpdXMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxTaXplQ1NTKHNpemVzLm0uaGVpZ2h0KSwgXCIgYm9yZGVyLXJhZGl1czpcIiwgc2l6ZXMubS5yYWRpdXMsIFwiOztsYWJlbDptO1wiKVxuICB9O1xufTtcbmV4cG9ydCB2YXIgX2VtcHR5SG92ZXJTdHlsZXMgPSBmdW5jdGlvbiBfZW1wdHlIb3ZlclN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIEJVVFRPTl9DT0xPUlMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZXMsIGNvbG9yKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgc3R5bGVzKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgY29sb3IsIC8qI19fUFVSRV9fKi9jc3MoXCImOmhvdmVye2JhY2tncm91bmQtY29sb3I6XCIsIGV1aUJ1dHRvbkVtcHR5Q29sb3IoZXVpVGhlbWVDb250ZXh0LCBjb2xvcikuYmFja2dyb3VuZENvbG9yLCBcIjt9XCIpKSk7XG4gIH0sIHt9KTtcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgZnVuY3Rpb24gdXNlSW5uZXJUZXh0KGlubmVyVGV4dEZhbGxiYWNrKSB7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICByZWYgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldFJlZiA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoaW5uZXJUZXh0RmFsbGJhY2spLFxuICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICBpbm5lclRleHQgPSBfdXNlU3RhdGU0WzBdLFxuICAgIHNldElubmVyVGV4dCA9IF91c2VTdGF0ZTRbMV07XG4gIHZhciB1cGRhdGVJbm5lclRleHQgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmICghbm9kZSkgcmV0dXJuO1xuICAgIHNldElubmVyVGV4dChcbiAgICAvLyBDaGVjayBmb3IgYGlubmVyVGV4dGAgaW1wbGVtZW50YXRpb24gcmF0aGVyIHRoYW4gYSBzaW1wbGUgT1IgY2hlY2tcbiAgICAvLyBiZWNhdXNlIGluIHJlYWwgY2FzZXMgdGhlIHJlc3VsdCBvZiBgaW5uZXJUZXh0YCBjb3VsZCBjb3JyZWN0bHkgYmUgYG51bGxgXG4gICAgLy8gd2hpbGUgdGhlIHJlc3VsdCBvZiBgdGV4dENvbnRlbnRgIGNvdWxkIGNvcnJlY3RseSBiZSBub24tYG51bGxgIGR1ZSB0b1xuICAgIC8vIGRpZmZlcmluZyByZWxpYW5jZSBvbiBicm93c2VyIGxheW91dCBjYWxjdWxhdGlvbnMuXG4gICAgLy8gV2UgcHJlZmVyIHRoZSByZXN1bHQgb2YgYGlubmVyVGV4dGAsIGlmIGF2YWlsYWJsZS5cbiAgICAnaW5uZXJUZXh0JyBpbiBub2RlID8gbm9kZS5pbm5lclRleHQgOiBub2RlLnRleHRDb250ZW50IHx8IGlubmVyVGV4dEZhbGxiYWNrKTtcbiAgfSwgW2lubmVyVGV4dEZhbGxiYWNrXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9uc0xpc3QpIHtcbiAgICAgIGlmIChtdXRhdGlvbnNMaXN0Lmxlbmd0aCkgdXBkYXRlSW5uZXJUZXh0KHJlZik7XG4gICAgfSk7XG4gICAgaWYgKHJlZikge1xuICAgICAgdXBkYXRlSW5uZXJUZXh0KHJlZik7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHJlZiwge1xuICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgICAgICBjaGlsZExpc3Q6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH07XG4gIH0sIFtyZWYsIHVwZGF0ZUlubmVyVGV4dF0pO1xuICByZXR1cm4gW3NldFJlZiwgaW5uZXJUZXh0XTtcbn1cbmV4cG9ydCB2YXIgRXVpSW5uZXJUZXh0ID0gZnVuY3Rpb24gRXVpSW5uZXJUZXh0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBmYWxsYmFjayA9IF9yZWYuZmFsbGJhY2s7XG4gIHZhciBfdXNlSW5uZXJUZXh0ID0gdXNlSW5uZXJUZXh0KGZhbGxiYWNrKSxcbiAgICBfdXNlSW5uZXJUZXh0MiA9IF9zbGljZWRUb0FycmF5KF91c2VJbm5lclRleHQsIDIpLFxuICAgIHJlZiA9IF91c2VJbm5lclRleHQyWzBdLFxuICAgIGlubmVyVGV4dCA9IF91c2VJbm5lclRleHQyWzFdO1xuICByZXR1cm4gY2hpbGRyZW4ocmVmLCBpbm5lclRleHQpO1xufTtcbkV1aUlubmVyVGV4dC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBmYWxsYmFjazogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBzaGFkZSwgdGludCwgZGFya2VuLCB0cmFuc3BhcmVudGl6ZSwgbWFrZUhpZ2hDb250cmFzdENvbG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbWF0aFdpdGhVbml0cywgZXVpQ2FuQW5pbWF0ZSwgZXVpRm9udFNpemUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlCdXR0b25Db2xvciB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcblxuLy8gVGhlcmUgYXJlIG11bHRpcGxlIGNvbXBvbmVudHMgdGhhdCBvbmx5IG5lZWQgdGhlIGZvcm0gbWF4LXdpZHRoIHNpemUgJlxuLy8gZG9uJ3QgbmVlZCB0aGUgZXh0cmEgb3ZlcmhlYWQvY29sb3IgY29tcHV0aW5nIGV4cGVuc2Ugb2YgZXZlcnkgZm9ybSB2YXIuXG4vLyBGb3IgbWljcm9wZXJmLCB3ZSdyZSBtYWtpbmcgdGhpcyBpdHMgb3duIHV0aWxcbmV4cG9ydCB2YXIgZXVpRm9ybU1heFdpZHRoID0gZnVuY3Rpb24gZXVpRm9ybU1heFdpZHRoKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuc2l6ZS5iYXNlLCBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB4ICogMjU7XG4gIH0pO1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybVZhcmlhYmxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICB2YXIgaXNDb2xvckRhcmsgPSBjb2xvck1vZGUgPT09ICdEQVJLJztcbiAgdmFyIGJhY2tncm91bmRDb2xvciA9IGlzQ29sb3JEYXJrID8gc2hhZGUoZXVpVGhlbWUuY29sb3JzLmxpZ2h0ZXN0U2hhZGUsIDAuNCkgOiB0aW50KGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlLCAwLjYpO1xuICB2YXIgY29udHJvbEhlaWdodCA9IGV1aVRoZW1lLnNpemUueHhsO1xuICB2YXIgY29udHJvbENvbXByZXNzZWRIZWlnaHQgPSBldWlUaGVtZS5zaXplLnhsO1xuICB2YXIgc2l6ZXMgPSB7XG4gICAgbWF4V2lkdGg6IGV1aUZvcm1NYXhXaWR0aChldWlUaGVtZUNvbnRleHQpLFxuICAgIGNvbnRyb2xIZWlnaHQ6IGNvbnRyb2xIZWlnaHQsXG4gICAgY29udHJvbENvbXByZXNzZWRIZWlnaHQ6IGNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0LFxuICAgIGNvbnRyb2xQYWRkaW5nOiBldWlUaGVtZS5zaXplLm0sXG4gICAgY29udHJvbENvbXByZXNzZWRQYWRkaW5nOiBldWlUaGVtZS5zaXplLnMsXG4gICAgY29udHJvbEJvcmRlclJhZGl1czogZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sXG4gICAgY29udHJvbENvbXByZXNzZWRCb3JkZXJSYWRpdXM6IGV1aVRoZW1lLmJvcmRlci5yYWRpdXMuc21hbGwsXG4gICAgaWNvbkFmZm9yZGFuY2U6IG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuc2l6ZS5iYXNlLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggKiAxLjU7XG4gICAgfSksXG4gICAgaWNvbkNvbXByZXNzZWRBZmZvcmRhbmNlOiBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUubSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICogMS41O1xuICAgIH0pXG4gIH07XG4gIHZhciBjb2xvcnMgPSB7XG4gICAgdGV4dENvbG9yOiBldWlUaGVtZS5jb2xvcnMudGV4dCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICBiYWNrZ3JvdW5kRGlzYWJsZWRDb2xvcjogZGFya2VuKGV1aVRoZW1lLmNvbG9ycy5saWdodGVzdFNoYWRlLCAwLjA1KSxcbiAgICBiYWNrZ3JvdW5kUmVhZE9ubHlDb2xvcjogZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsXG4gICAgYm9yZGVyQ29sb3I6IHRyYW5zcGFyZW50aXplKGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gZXVpVGhlbWUuY29sb3JzLmdob3N0IDogZGFya2VuKGV1aVRoZW1lLmJvcmRlci5jb2xvciwgNCksIDAuMSksXG4gICAgY29udHJvbERpc2FibGVkQ29sb3I6IGV1aVRoZW1lLmNvbG9ycy5tZWRpdW1TaGFkZSxcbiAgICBjb250cm9sQm94U2hhZG93OiAnMCAwIHRyYW5zcGFyZW50JyxcbiAgICBjb250cm9sUGxhY2Vob2xkZXJUZXh0OiBtYWtlSGlnaENvbnRyYXN0Q29sb3IoZXVpVGhlbWUuY29sb3JzLnN1YmR1ZWRUZXh0KShiYWNrZ3JvdW5kQ29sb3IpLFxuICAgIGFwcGVuZFByZXBlbmRCYWNrZ3JvdW5kOiBpc0NvbG9yRGFyayA/IHNoYWRlKGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjE1KSA6IHRpbnQoZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUsIDAuNSlcbiAgfTtcbiAgdmFyIGNvbnRyb2xMYXlvdXQgPSB7XG4gICAgY29udHJvbExheW91dEdyb3VwSW5wdXRIZWlnaHQ6IG1hdGhXaXRoVW5pdHMoY29udHJvbEhlaWdodCwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4IC0gMjtcbiAgICB9KSxcbiAgICBjb250cm9sTGF5b3V0R3JvdXBJbnB1dENvbXByZXNzZWRIZWlnaHQ6IG1hdGhXaXRoVW5pdHMoY29udHJvbENvbXByZXNzZWRIZWlnaHQsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAtIDI7XG4gICAgfSksXG4gICAgY29udHJvbExheW91dEdyb3VwSW5wdXRDb21wcmVzc2VkQm9yZGVyUmFkaXVzOiBldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsXG4gIH07XG4gIHZhciBpY29uU2l6ZXMgPSB7XG4gICAgY29udHJvbEljb25TaXplOiB7XG4gICAgICBzOiBldWlUaGVtZS5zaXplLm0sXG4gICAgICBtOiBldWlUaGVtZS5zaXplLmJhc2UsXG4gICAgICBsOiBldWlUaGVtZS5zaXplLmwsXG4gICAgICB4bDogZXVpVGhlbWUuc2l6ZS54bCxcbiAgICAgIHh4bDogZXVpVGhlbWUuc2l6ZS54eGxcbiAgICB9XG4gIH07XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHNpemVzKSwgY29sb3JzKSwgaWNvblNpemVzKSwgY29udHJvbExheW91dCksIHt9LCB7XG4gICAgYW5pbWF0aW9uVGltaW5nOiBcIlwiLmNvbmNhdChldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCIgZWFzZS1pblwiKVxuICB9KTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sU3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUNvbnRyb2xTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBmb3JtID0gZXVpRm9ybVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIHNoYXJlZDogXCJcXG4gICAgICBcIi5jb25jYXQoZXVpRm9ybUNvbnRyb2xUZXh0KGV1aVRoZW1lQ29udGV4dCksIFwiXFxuICAgICAgXCIpLmNvbmNhdChldWlGb3JtQ29udHJvbERlZmF1bHRTaGFkb3coZXVpVGhlbWVDb250ZXh0KSwgXCJcXG4gICAgXCIpLFxuICAgIC8vIFNpemVzXG4gICAgdW5jb21wcmVzc2VkOiBcIlxcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCBmb3JtLmNvbnRyb2xIZWlnaHQpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygncGFkZGluZy12ZXJ0aWNhbCcsIGZvcm0uY29udHJvbFBhZGRpbmcpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgXCJjYWxjKFwiLmNvbmNhdChmb3JtLmNvbnRyb2xQYWRkaW5nLCBcIiArIChcIikuY29uY2F0KGZvcm0uaWNvbkFmZm9yZGFuY2UsIFwiICogdmFyKC0tZXVpRm9ybUNvbnRyb2xMZWZ0SWNvbnNDb3VudCwgMCkpKVwiKSksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLXJpZ2h0JywgXCJjYWxjKFwiLmNvbmNhdChmb3JtLmNvbnRyb2xQYWRkaW5nLCBcIiArIChcIikuY29uY2F0KGZvcm0uaWNvbkFmZm9yZGFuY2UsIFwiICogdmFyKC0tZXVpRm9ybUNvbnRyb2xSaWdodEljb25zQ291bnQsIDApKSlcIikpLCBcIlxcbiAgICAgIGJvcmRlci1yYWRpdXM6IFwiKS5jb25jYXQoZm9ybS5jb250cm9sQm9yZGVyUmFkaXVzLCBcIjtcXG4gICAgXCIpLFxuICAgIGNvbXByZXNzZWQ6IFwiXFxuICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGZvcm0uY29udHJvbENvbXByZXNzZWRIZWlnaHQpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygncGFkZGluZy12ZXJ0aWNhbCcsIGZvcm0uY29udHJvbENvbXByZXNzZWRQYWRkaW5nKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIFwiY2FsYyhcIi5jb25jYXQoZm9ybS5jb250cm9sQ29tcHJlc3NlZFBhZGRpbmcsIFwiICsgKFwiKS5jb25jYXQoZm9ybS5pY29uQ29tcHJlc3NlZEFmZm9yZGFuY2UsIFwiICogdmFyKC0tZXVpRm9ybUNvbnRyb2xMZWZ0SWNvbnNDb3VudCwgMCkpKVwiKSksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLXJpZ2h0JywgXCJjYWxjKFwiLmNvbmNhdChmb3JtLmNvbnRyb2xDb21wcmVzc2VkUGFkZGluZywgXCIgKyAoXCIpLmNvbmNhdChmb3JtLmljb25Db21wcmVzc2VkQWZmb3JkYW5jZSwgXCIgKiB2YXIoLS1ldWlGb3JtQ29udHJvbFJpZ2h0SWNvbnNDb3VudCwgMCkpKVwiKSksIFwiXFxuICAgICAgYm9yZGVyLXJhZGl1czogXCIpLmNvbmNhdChmb3JtLmNvbnRyb2xDb21wcmVzc2VkQm9yZGVyUmFkaXVzLCBcIjtcXG4gICAgXCIpLFxuICAgIC8vIEluIGdyb3VwXG4gICAgaW5Hcm91cDogXCJcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0JywgJzEwMCUnKSwgXCJcXG4gICAgICBib3gtc2hhZG93OiBub25lO1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XFxuICAgIFwiKSxcbiAgICAvLyBXaWR0aHNcbiAgICBmb3JtV2lkdGg6IFwiXFxuICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsIGZvcm0ubWF4V2lkdGgpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIlxcbiAgICBcIiksXG4gICAgZnVsbFdpZHRoOiBcIlxcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIlxcbiAgICBcIiksXG4gICAgLy8gU3RhdGVzXG4gICAgaW52YWxpZDogZXVpRm9ybUNvbnRyb2xJbnZhbGlkU3R5bGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgZm9jdXM6IGV1aUZvcm1Db250cm9sRm9jdXNTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBkaXNhYmxlZDogZXVpRm9ybUNvbnRyb2xEaXNhYmxlZFN0eWxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIHJlYWRPbmx5OiBldWlGb3JtQ29udHJvbFJlYWRPbmx5U3R5bGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgYXV0b0ZpbGw6IGV1aUZvcm1Db250cm9sQXV0b0ZpbGxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KVxuICB9O1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUNvbnRyb2xUZXh0ID0gZnVuY3Rpb24gZXVpRm9ybUNvbnRyb2xUZXh0KGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBfZXVpRm9udFNpemUgPSBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJyksXG4gICAgZm9udFNpemUgPSBfZXVpRm9udFNpemUuZm9udFNpemU7XG4gIHZhciBmb3JtID0gZXVpRm9ybVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4gXCJcXG4gICAgZm9udC1mYW1pbHk6IFwiLmNvbmNhdChldWlUaGVtZS5mb250LmZhbWlseSwgXCI7XFxuICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChmb250U2l6ZSwgXCI7XFxuICAgIGNvbG9yOiBcIikuY29uY2F0KGZvcm0udGV4dENvbG9yLCBcIjtcXG5cXG4gICAgXCIpLmNvbmNhdChldWlQbGFjZWhvbGRlclBlckJyb3dzZXIoXCJcXG4gICAgICBjb2xvcjogXCIuY29uY2F0KGZvcm0uY29udHJvbFBsYWNlaG9sZGVyVGV4dCwgXCI7XFxuICAgICAgb3BhY2l0eTogMTtcXG4gICAgXCIpKSwgXCJcXG4gIFwiKTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sRGVmYXVsdFNoYWRvdyA9IGZ1bmN0aW9uIGV1aUZvcm1Db250cm9sRGVmYXVsdFNoYWRvdyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICBfcmVmMiR3aXRoQm9yZGVyID0gX3JlZjIud2l0aEJvcmRlcixcbiAgICB3aXRoQm9yZGVyID0gX3JlZjIkd2l0aEJvcmRlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJHdpdGhCb3JkZXIsXG4gICAgX3JlZjIkd2l0aEJhY2tncm91bmQgPSBfcmVmMi53aXRoQmFja2dyb3VuZCxcbiAgICB3aXRoQmFja2dyb3VuZCA9IF9yZWYyJHdpdGhCYWNrZ3JvdW5kID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkd2l0aEJhY2tncm91bmQsXG4gICAgX3JlZjIkd2l0aEJhY2tncm91bmRDID0gX3JlZjIud2l0aEJhY2tncm91bmRDb2xvcixcbiAgICB3aXRoQmFja2dyb3VuZENvbG9yID0gX3JlZjIkd2l0aEJhY2tncm91bmRDID09PSB2b2lkIDAgPyB3aXRoQmFja2dyb3VuZCA6IF9yZWYyJHdpdGhCYWNrZ3JvdW5kQyxcbiAgICBfcmVmMiR3aXRoQmFja2dyb3VuZEEgPSBfcmVmMi53aXRoQmFja2dyb3VuZEFuaW1hdGlvbixcbiAgICB3aXRoQmFja2dyb3VuZEFuaW1hdGlvbiA9IF9yZWYyJHdpdGhCYWNrZ3JvdW5kQSA9PT0gdm9pZCAwID8gd2l0aEJhY2tncm91bmQgOiBfcmVmMiR3aXRoQmFja2dyb3VuZEE7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIGZvcm0gPSBldWlGb3JtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCk7XG5cbiAgLy8gV2UgdXNlIGluc2V0IGJveC1zaGFkb3cgaW5zdGVhZCBvZiBib3JkZXIgdG8gc2tpcCBleHRyYSBoZWlnaHQgY2FsY3VsYXRpb25zXG4gIHZhciBib3JkZXIgPSBcIlxcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIFwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgXCIpLmNvbmNhdChmb3JtLmJvcmRlckNvbG9yLCBcIjtcXG4gIFwiKS50cmltKCk7XG4gIHZhciBiYWNrZ3JvdW5kQ29sb3IgPSBcIlxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIi5jb25jYXQoZm9ybS5iYWNrZ3JvdW5kQ29sb3IsIFwiO1xcbiAgXCIpLnRyaW0oKTtcbiAgdmFyIGJhY2tncm91bmRHcmFkaWVudCA9IFwiXFxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICAgIGJhY2tncm91bmQtc2l6ZTogMCUgMTAwJTtcXG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHRvcCxcXG4gICAgICB2YXIoLS1ldWlGb3JtQ29udHJvbFN0YXRlQ29sb3IpLFxcbiAgICAgIHZhcigtLWV1aUZvcm1Db250cm9sU3RhdGVDb2xvcikgXCIuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGljaywgXCIsXFxuICAgICAgdHJhbnNwYXJlbnQgXCIpLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2ssIFwiLFxcbiAgICAgIHRyYW5zcGFyZW50IDEwMCVcXG4gICAgKTtcXG4gIFwiKS50cmltKCk7XG4gIHZhciBiYWNrZ3JvdW5kQW5pbWF0aW9uID0gXCJcXG4gICAgXCIuY29uY2F0KGV1aUNhbkFuaW1hdGUsIFwiIHtcXG4gICAgICB0cmFuc2l0aW9uOlxcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZSBcIikuY29uY2F0KGZvcm0uYW5pbWF0aW9uVGltaW5nLCBcIixcXG4gICAgICAgIGJhY2tncm91bmQtc2l6ZSBcIikuY29uY2F0KGZvcm0uYW5pbWF0aW9uVGltaW5nLCBcIixcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3IgXCIpLmNvbmNhdChmb3JtLmFuaW1hdGlvblRpbWluZywgXCI7XFxuICAgIH1cXG4gIFwiKS50cmltKCk7XG4gIHJldHVybiBcIlxcbiAgICBcIi5jb25jYXQod2l0aEJvcmRlciA/IGJvcmRlciA6ICcnLCBcIlxcbiAgICBcIikuY29uY2F0KHdpdGhCYWNrZ3JvdW5kQ29sb3IgPyBiYWNrZ3JvdW5kQ29sb3IgOiAnJywgXCJcXG4gICAgXCIpLmNvbmNhdCh3aXRoQmFja2dyb3VuZCA/IGJhY2tncm91bmRHcmFkaWVudCA6ICcnLCBcIlxcbiAgICBcIikuY29uY2F0KHdpdGhCYWNrZ3JvdW5kQW5pbWF0aW9uID8gYmFja2dyb3VuZEFuaW1hdGlvbiA6ICcnLCBcIlxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUNvbnRyb2xGb2N1c1N0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1Db250cm9sRm9jdXNTdHlsZXMoX3JlZjMpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjMuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gX3JlZjMuY29sb3JNb2RlO1xuICByZXR1cm4gXCJcXG4gIC0tZXVpRm9ybUNvbnRyb2xTdGF0ZUNvbG9yOiBcIi5jb25jYXQoZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIFwiO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdChjb2xvck1vZGUgPT09ICdEQVJLJyA/IHNoYWRlKGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLCAwLjQpIDogZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsIFwiO1xcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7XFxuICBvdXRsaW5lOiBub25lOyAvKiBSZW1vdmUgYWxsIG91dGxpbmVzIGFuZCByZWx5IG9uIG91ciBvd24gYm90dG9tIGJvcmRlciBncmFkaWVudCAqL1xcblwiKTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sSW52YWxpZFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1Db250cm9sSW52YWxpZFN0eWxlcyhfcmVmNCkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNC5ldWlUaGVtZTtcbiAgcmV0dXJuIFwiXFxuICAtLWV1aUZvcm1Db250cm9sU3RhdGVDb2xvcjogXCIuY29uY2F0KGV1aVRoZW1lLmNvbG9ycy5kYW5nZXIsIFwiO1xcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7XFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUNvbnRyb2xEaXNhYmxlZFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1Db250cm9sRGlzYWJsZWRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBmb3JtID0gZXVpRm9ybVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4gXCJcXG4gICAgY29sb3I6IFwiLmNvbmNhdChmb3JtLmNvbnRyb2xEaXNhYmxlZENvbG9yLCBcIjtcXG4gICAgLyogUmVxdWlyZWQgZm9yIFNhZmFyaSAqL1xcbiAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogXCIpLmNvbmNhdChmb3JtLmNvbnRyb2xEaXNhYmxlZENvbG9yLCBcIjtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdChmb3JtLmJhY2tncm91bmREaXNhYmxlZENvbG9yLCBcIjtcXG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gICAgLS1ldWlGb3JtQ29udHJvbFN0YXRlQ29sb3I6IHRyYW5zcGFyZW50O1xcblxcbiAgICBcIikuY29uY2F0KGV1aVBsYWNlaG9sZGVyUGVyQnJvd3NlcihcIlxcbiAgICAgIGNvbG9yOiBcIi5jb25jYXQoZm9ybS5jb250cm9sRGlzYWJsZWRDb2xvciwgXCI7XFxuICAgICAgb3BhY2l0eTogMTtcXG4gICAgXCIpKSwgXCJcXG4gIFwiKTtcbn07XG5leHBvcnQgdmFyIGV1aUZvcm1Db250cm9sUmVhZE9ubHlTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ29udHJvbFJlYWRPbmx5U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZm9ybSA9IGV1aUZvcm1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIFwiXFxuICAgIGN1cnNvcjogZGVmYXVsdDtcXG4gICAgY29sb3I6IFwiLmNvbmNhdChmb3JtLnRleHRDb2xvciwgXCI7XFxuICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiBcIikuY29uY2F0KGZvcm0udGV4dENvbG9yLCBcIjsgLyogUmVxdWlyZWQgZm9yIFNhZmFyaSAqL1xcblxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KGZvcm0uYmFja2dyb3VuZFJlYWRPbmx5Q29sb3IsIFwiO1xcbiAgICAtLWV1aUZvcm1Db250cm9sU3RhdGVDb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBcIik7XG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbEF1dG9GaWxsU3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUNvbnRyb2xBdXRvRmlsbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG5cbiAgLy8gTWFrZSB0aGUgdGV4dCBjb2xvciBzbGlnaHRseSBsZXNzIHByb21pbmVudCB0aGFuIHRoZSBkZWZhdWx0IGNvbG9ycy50ZXh0XG4gIHZhciB0ZXh0Q29sb3IgPSBldWlUaGVtZS5jb2xvcnMuZGFya2VzdFNoYWRlO1xuICB2YXIgX2V1aUJ1dHRvbkNvbG9yID0gZXVpQnV0dG9uQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAncHJpbWFyeScpLFxuICAgIGJhY2tncm91bmRDb2xvciA9IF9ldWlCdXR0b25Db2xvci5iYWNrZ3JvdW5kQ29sb3I7XG4gIHZhciB0aW50ZWRCYWNrZ3JvdW5kQ29sb3IgPSBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHNoYWRlKGJhY2tncm91bmRDb2xvciwgMC41KSA6IHRpbnQoYmFja2dyb3VuZENvbG9yLCAwLjcpO1xuICAvLyBIYWNreSB3b3JrYXJvdW5kIHRvIGJhY2tncm91bmQtY29sb3IsIHNpbmNlIENocm9tZSBkb2Vzbid0IG5vcm1hbGx5IGFsbG93IG92ZXJyaWRpbmcgaXRzIHN0eWxlc1xuICAvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy86YXV0b2ZpbGwjc2VjdDFcbiAgdmFyIGJhY2tncm91bmRTaGFkb3cgPSBcImluc2V0IDAgMCAwIDEwMHZ3IFwiLmNvbmNhdCh0aW50ZWRCYWNrZ3JvdW5kQ29sb3IpO1xuXG4gIC8vIFJlLWNyZWF0ZSB0aGUgYm9yZGVyLCBzaW5jZSB0aGUgYWJvdmUgd2Via2l0IGJveCBzaGFkb3cgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGJvcmRlciBib3gtc2hhZG93XG4gIC8vICsgY2hhbmdlIHRoZSBib3JkZXIgY29sb3IgdG8gbWF0Y2ggc3RhdGVzLCBzaW5jZSB0aGUgdW5kZXJsaW5lIGJhY2tncm91bmQgZ3JhZGllbnQgbm8gbG9uZ2VyIHdvcmtzXG4gIHZhciBib3JkZXJDb2xvciA9IHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCwgMC4yKTtcbiAgdmFyIGludmFsaWRCb3JkZXIgPSBldWlUaGVtZS5jb2xvcnMuZGFuZ2VyO1xuICB2YXIgYm9yZGVyU2hhZG93ID0gZnVuY3Rpb24gYm9yZGVyU2hhZG93KGNvbG9yKSB7XG4gICAgcmV0dXJuIFwiaW5zZXQgMCAwIDAgXCIuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBcIikuY29uY2F0KGNvbG9yKTtcbiAgfTtcblxuICAvLyBUaGVzZSBzdHlsZXMgb25seSBhcHBseS9vdmVycmlkZSBDaHJvbWUvd2Via2l0IGJyb3dzZXJzIC0gRmlyZWZveCBkb2VzIG5vdCBzZXQgYXV0b2ZpbGwgc3R5bGVzXG4gIHJldHVybiBcIlxcbiAgICAmOi13ZWJraXQtYXV0b2ZpbGwge1xcbiAgICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiBcIi5jb25jYXQodGV4dENvbG9yLCBcIjtcXG4gICAgICAtd2Via2l0LWJveC1zaGFkb3c6IFwiKS5jb25jYXQoYm9yZGVyU2hhZG93KGJvcmRlckNvbG9yKSwgXCIsIFwiKS5jb25jYXQoYmFja2dyb3VuZFNoYWRvdywgXCI7XFxuXFxuICAgICAgJjppbnZhbGlkIHtcXG4gICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogXCIpLmNvbmNhdChib3JkZXJTaGFkb3coaW52YWxpZEJvcmRlciksIFwiLCBcIikuY29uY2F0KGJhY2tncm91bmRTaGFkb3csIFwiO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgXCIpO1xufTtcbnZhciBldWlQbGFjZWhvbGRlclBlckJyb3dzZXIgPSBmdW5jdGlvbiBldWlQbGFjZWhvbGRlclBlckJyb3dzZXIoY29udGVudCkge1xuICByZXR1cm4gXCJcXG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgeyBcIi5jb25jYXQoY29udGVudCwgXCIgfVxcbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7IFwiKS5jb25jYXQoY29udGVudCwgXCIgfVxcbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIgeyBcIikuY29uY2F0KGNvbnRlbnQsIFwiIH1cXG4gICY6LW1vei1wbGFjZWhvbGRlciB7IFwiKS5jb25jYXQoY29udGVudCwgXCIgfVxcbiAgJjo6cGxhY2Vob2xkZXIgeyBcIikuY29uY2F0KGNvbnRlbnQsIFwiIH1cXG5cIik7XG59O1xuXG4vKipcbiAqIFNlbGVjdGlvbiBjdXN0b20gY29udHJvbHMgLSBjaGVja2JveGVzLCByYWRpb3MsIGFuZCBzd2l0Y2hlc1xuICovXG5cbmV4cG9ydCB2YXIgZXVpRm9ybUN1c3RvbUNvbnRyb2xWYXJpYWJsZXMgPSBmdW5jdGlvbiBldWlGb3JtQ3VzdG9tQ29udHJvbFZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG4gIHZhciBzaXplcyA9IHtcbiAgICBjb250cm9sOiBldWlUaGVtZS5zaXplLmJhc2UsXG4gICAgbGluZUhlaWdodDogZXVpVGhlbWUuc2l6ZS5sLFxuICAgIGxhYmVsR2FwOiBldWlUaGVtZS5zaXplLnNcbiAgfTtcbiAgdmFyIGNvbG9ycyA9IHtcbiAgICB1bnNlbGVjdGVkOiBldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSxcbiAgICB1bnNlbGVjdGVkQm9yZGVyOiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHRpbnQoZXVpVGhlbWUuY29sb3JzLmxpZ2h0ZXN0U2hhZGUsIDAuMzEpIC8vIFdDQUcgQUEgcmVxdWlyZW1lbnRzXG4gICAgOiBzaGFkZShldWlUaGVtZS5jb2xvcnMubGlnaHRlc3RTaGFkZSwgMC40KSxcbiAgICBzZWxlY3RlZDogZXVpVGhlbWUuY29sb3JzLnByaW1hcnksXG4gICAgc2VsZWN0ZWRJY29uOiBldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSxcbiAgICBkaXNhYmxlZDogZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUsXG4gICAgZGlzYWJsZWRJY29uOiBldWlUaGVtZS5jb2xvcnMuZGFya1NoYWRlLFxuICAgIGRpc2FibGVkTGFiZWw6IGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZFRleHQgLy8gTGlnaHRlciB0aGFuIGZvcm1WYXJzLmRpc2FibGVkQ29sb3IgYmVjYXVzZSBpdCB0eXBpY2FsbHkgZG9lc24ndCBoYXZlIGFzIGRhcmsgYSBiYWNrZ3JvdW5kXG4gIH07XG4gIHZhciBhbmltYXRpb24gPSB7XG4gICAgc3BlZWQ6IGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LFxuICAgIGVhc2luZzogJ2Vhc2UtaW4nXG4gIH07XG4gIHJldHVybiB7XG4gICAgc2l6ZXM6IHNpemVzLFxuICAgIGNvbG9yczogY29sb3JzLFxuICAgIGFuaW1hdGlvbjogYW5pbWF0aW9uXG4gIH07XG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ3VzdG9tQ29udHJvbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1DdXN0b21Db250cm9sU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBjb250cm9sVmFycyA9IGV1aUZvcm1DdXN0b21Db250cm9sVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBjZW50ZXJXaXRoTGFiZWwgPSBtYXRoV2l0aFVuaXRzKFtjb250cm9sVmFycy5zaXplcy5saW5lSGVpZ2h0LCBjb250cm9sVmFycy5zaXplcy5jb250cm9sXSwgZnVuY3Rpb24gKHgsIHkpIHtcbiAgICByZXR1cm4gKHggLSB5KSAvIDI7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHdyYXBwZXI6IFwiXFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gICAgXCIsXG4gICAgaW5wdXQ6IHtcbiAgICAgIGZhdXhJbnB1dDogXCJcXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCBjb250cm9sVmFycy5zaXplcy5jb250cm9sKSwgXCJcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCBjb250cm9sVmFycy5zaXplcy5jb250cm9sKSwgXCJcXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFxuICAgICAgICAmOmhhcyhpbnB1dDpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgICAgIG91dGxpbmU6IFwiKS5jb25jYXQoZXVpVGhlbWUuZm9jdXMud2lkdGgsIFwiIHNvbGlkIFwiKS5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLnNlbGVjdGVkLCBcIjtcXG4gICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IFwiKS5jb25jYXQoZXVpVGhlbWUuZm9jdXMud2lkdGgsIFwiO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgXCIpLmNvbmNhdChldWlDYW5BbmltYXRlLCBcIiB7XFxuICAgICAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGNvbG9yO1xcbiAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiBcIikuY29uY2F0KGNvbnRyb2xWYXJzLmFuaW1hdGlvbi5zcGVlZCwgXCI7XFxuICAgICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBcIikuY29uY2F0KGNvbnRyb2xWYXJzLmFuaW1hdGlvbi5lYXNpbmcsIFwiO1xcbiAgICAgICAgfVxcbiAgICAgIFwiKSxcbiAgICAgIC8vIFRPRE86IFJldmVydCBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC83OTgxXG4gICAgICAvLyBvbmNlIGh0dHBzOi8vZ2l0aHViLmNvbS9kcGVyaW5pL253c2FwaS9pc3N1ZXMvMTIzXG4gICAgICAvLyBoYXMgYmVlbiBmaXhlZCwgYW5kIHJlc3RvcmUgYCY6aGFzKCsgbGFiZWwpYCBzZWxlY3RvclxuICAgICAgaGFzTGFiZWw6IFwiXFxuICAgICAgICBcIi5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGNlbnRlcldpdGhMYWJlbCksIFwiXFxuICAgICAgXCIpLFxuICAgICAgZW5hYmxlZDoge1xuICAgICAgICBzZWxlY3RlZDogXCJcXG4gICAgICAgICAgY29sb3I6IFwiLmNvbmNhdChjb250cm9sVmFycy5jb2xvcnMuc2VsZWN0ZWRJY29uLCBcIjtcXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdChjb250cm9sVmFycy5jb2xvcnMuc2VsZWN0ZWQsIFwiO1xcbiAgICAgICAgXCIpLFxuICAgICAgICB1bnNlbGVjdGVkOiBcIlxcbiAgICAgICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IFwiLmNvbmNhdChjb250cm9sVmFycy5jb2xvcnMudW5zZWxlY3RlZCwgXCI7XFxuICAgICAgICAgIGJvcmRlcjogXCIpLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgc29saWQgXCIpLmNvbmNhdChjb250cm9sVmFycy5jb2xvcnMudW5zZWxlY3RlZEJvcmRlciwgXCI7XFxuXFxuICAgICAgICAgICY6aGFzKGlucHV0OmZvY3VzKSB7XFxuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBcIikuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy5zZWxlY3RlZCwgXCI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIFwiKVxuICAgICAgfSxcbiAgICAgIGRpc2FibGVkOiB7XG4gICAgICAgIHNlbGVjdGVkOiBcIlxcbiAgICAgICAgICBsYWJlbDogZGlzYWJsZWQ7XFxuICAgICAgICAgIGNvbG9yOiBcIi5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLmRpc2FibGVkSWNvbiwgXCI7XFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLmRpc2FibGVkLCBcIjtcXG4gICAgICAgIFwiKSxcbiAgICAgICAgdW5zZWxlY3RlZDogXCJcXG4gICAgICAgICAgbGFiZWw6IGRpc2FibGVkO1xcbiAgICAgICAgICBjb2xvcjogXCIuY29uY2F0KGNvbnRyb2xWYXJzLmNvbG9ycy5kaXNhYmxlZCwgXCI7XFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLmRpc2FibGVkLCBcIjtcXG4gICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gICAgICAgIFwiKVxuICAgICAgfSxcbiAgICAgIC8vIExvb2tzIGJldHRlciBjZW50ZXJlZCBhdCBkaWZmZXJlbnQgem9vbSBsZXZlbHMgdGhhbiBqdXN0IDxFdWlJY29uIHNpemU9XCJzXCIgLz5cbiAgICAgIGljb246IFwiXFxuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNzUpO1xcbiAgICAgIFwiLFxuICAgICAgLy8gSGlkZGVuIGlucHV0IHNpdHMgb24gdG9wIG9mIHRoZSB2aXNpYmxlIGVsZW1lbnRcbiAgICAgIGhpZGRlbklucHV0OiBcIlxcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgaW5zZXQ6IDA7XFxuICAgICAgICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XFxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuXFxuICAgICAgICAmOmRpc2FibGVkIHtcXG4gICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gICAgICAgIH1cXG4gICAgICBcIlxuICAgIH0sXG4gICAgbGFiZWw6IHtcbiAgICAgIGxhYmVsOiBcIlxcbiAgICAgICAgLyogTmVlZHMgdG8gdXNlIHBhZGRpbmcgYW5kIG5vdCBmbGV4IGdhcCBmb3IgZXh0cmEgbW91c2UgY2xpY2sgYXJlYSAqL1xcbiAgICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIGNvbnRyb2xWYXJzLnNpemVzLmxhYmVsR2FwKSwgXCJcXG4gICAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGNvbnRyb2xWYXJzLnNpemVzLmxpbmVIZWlnaHQsIFwiO1xcbiAgICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKS5mb250U2l6ZSwgXCI7XFxuICAgICAgXCIpLFxuICAgICAgZW5hYmxlZDogXCJcXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICBcIixcbiAgICAgIGRpc2FibGVkOiBcIlxcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gICAgICAgIGNvbG9yOiBcIi5jb25jYXQoY29udHJvbFZhcnMuY29sb3JzLmRpc2FibGVkTGFiZWwsIFwiO1xcbiAgICAgIFwiKVxuICAgIH1cbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImFuY2hvckNsYXNzTmFtZVwiLCBcImFuY2hvclByb3BzXCIsIFwiY29udGVudFwiLCBcInRpdGxlXCIsIFwiZGVsYXlcIiwgXCJkaXNwbGF5XCIsIFwicmVwb3NpdGlvbk9uU2Nyb2xsXCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZmluZFBvcG92ZXJQb3NpdGlvbiwgaHRtbElkR2VuZXJhdG9yLCBrZXlzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZW5xdWV1ZVN0YXRlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVhY3QnO1xuaW1wb3J0IHsgRXVpUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXInO1xuaW1wb3J0IHsgRXVpUG9ydGFsIH0gZnJvbSAnLi4vcG9ydGFsJztcbmltcG9ydCB7IEV1aVRvb2xUaXBQb3BvdmVyIH0gZnJvbSAnLi90b29sX3RpcF9wb3BvdmVyJztcbmltcG9ydCB7IEV1aVRvb2xUaXBBbmNob3IgfSBmcm9tICcuL3Rvb2xfdGlwX2FuY2hvcic7XG5pbXBvcnQgeyBFdWlUb29sVGlwQXJyb3cgfSBmcm9tICcuL3Rvb2xfdGlwX2Fycm93JztcbmltcG9ydCB7IHRvb2xUaXBNYW5hZ2VyIH0gZnJvbSAnLi90b29sX3RpcF9tYW5hZ2VyJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFBPU0lUSU9OUyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XG52YXIgRElTUExBWVMgPSBbJ2lubGluZUJsb2NrJywgJ2Jsb2NrJ107XG52YXIgZGVsYXlUb01zTWFwID0ge1xuICByZWd1bGFyOiAyNTAsXG4gIGxvbmc6IDI1MCAqIDVcbn07XG52YXIgREVGQVVMVF9UT09MVElQX1NUWUxFUyA9IHtcbiAgLy8gcG9zaXRpb24gdGhlIHRvb2x0aXAgY29udGVudCBuZWFyIHRoZSB0b3AtbGVmdFxuICAvLyBjb3JuZXIgb2YgdGhlIHdpbmRvdyBzbyBpdCBjYW4ndCBjcmVhdGUgc2Nyb2xsYmFyc1xuICAvLyA1MCw1MCBiZWNhdXNlIHdobyBrbm93cyB3aGF0IG5lZ2F0aXZlIG1hcmdpbnMsIHBhZGRpbmcsIGV0Y1xuICB0b3A6IDUwLFxuICBsZWZ0OiA1MCxcbiAgLy8ganVzdCBpbiBjYXNlLCBhdm9pZCBhbnkgcG90ZW50aWFsIGZsaWNrZXIgYnkgaGlkaW5nXG4gIC8vIHRoZSB0b29sdGlwIGJlZm9yZSBpdCBpcyBwb3NpdGlvbmVkXG4gIG9wYWNpdHk6IDAsXG4gIC8vIHByZXZlbnQgYWNjaWRlbnRhbCBtb3VzZSBpbnRlcmFjdGlvbiB3aGlsZSBwb3NpdGlvbmluZ1xuICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xufTtcbmV4cG9ydCB2YXIgRXVpVG9vbFRpcCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlUb29sVGlwKCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpVG9vbFRpcCk7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpVG9vbFRpcCwgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiX2lzTW91bnRlZFwiLCBmYWxzZSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImFuY2hvclwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicG9wb3ZlclwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidGltZW91dElkXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0YXRlXCIsIHtcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgICAgY2FsY3VsYXRlZFBvc2l0aW9uOiBfdGhpcy5wcm9wcy5wb3NpdGlvbixcbiAgICAgIHRvb2xUaXBTdHlsZXM6IERFRkFVTFRfVE9PTFRJUF9TVFlMRVMsXG4gICAgICBhcnJvd1N0eWxlczogdW5kZWZpbmVkLFxuICAgICAgaWQ6IF90aGlzLnByb3BzLmlkIHx8IGh0bWxJZEdlbmVyYXRvcigpKClcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2xlYXJBbmltYXRpb25UaW1lb3V0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy50aW1lb3V0SWQpIHtcbiAgICAgICAgX3RoaXMudGltZW91dElkID0gY2xlYXJUaW1lb3V0KF90aGlzLnRpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRlc3RBbmNob3JcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gd2hlbiB0aGUgdG9vbHRpcCBpcyB2aXNpYmxlLCB0aGlzIGNoZWNrcyBpZiB0aGUgYW5jaG9yIGlzIHN0aWxsIHBhcnQgb2YgZG9jdW1lbnRcbiAgICAgIC8vIHRoaXMgZml4ZXMgd2hlbiB0aGUgcmVhY3Qgcm9vdCBpcyByZW1vdmVkIGZyb20gdGhlIGRvbSB3aXRob3V0IHVubW91bnRpbmdcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvMTEwNVxuICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnMoX3RoaXMuYW5jaG9yKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gdGhlIGFuY2hvciBpcyBubyBsb25nZXIgcGFydCBvZiBgZG9jdW1lbnRgXG4gICAgICAgIF90aGlzLmhpZGVUb29sVGlwKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoX3RoaXMuc3RhdGUudmlzaWJsZSkge1xuICAgICAgICAgIC8vIGlmIHN0aWxsIHZpc2libGUsIGtlZXAgY2hlY2tpbmdcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMudGVzdEFuY2hvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2V0QW5jaG9yUmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIHJldHVybiBfdGhpcy5hbmNob3IgPSByZWY7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNldFBvcG92ZXJSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgcmV0dXJuIF90aGlzLnBvcG92ZXIgPSByZWY7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNob3dUb29sVGlwXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMudGltZW91dElkKSB7XG4gICAgICAgIF90aGlzLnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVucXVldWVTdGF0ZUNoYW5nZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIHZpc2libGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG9vbFRpcE1hbmFnZXIucmVnaXN0ZXJUb29sdGlwKF90aGlzLmhpZGVUb29sVGlwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZGVsYXlUb01zTWFwW190aGlzLnByb3BzLmRlbGF5XSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInBvc2l0aW9uVG9vbFRpcFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcmVxdWVzdGVkUG9zaXRpb24gPSBfdGhpcy5wcm9wcy5wb3NpdGlvbjtcbiAgICAgIGlmICghX3RoaXMuYW5jaG9yIHx8ICFfdGhpcy5wb3BvdmVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBfZmluZFBvcG92ZXJQb3NpdGlvbiA9IGZpbmRQb3BvdmVyUG9zaXRpb24oe1xuICAgICAgICAgIGFuY2hvcjogX3RoaXMuYW5jaG9yLFxuICAgICAgICAgIHBvcG92ZXI6IF90aGlzLnBvcG92ZXIsXG4gICAgICAgICAgcG9zaXRpb246IHJlcXVlc3RlZFBvc2l0aW9uLFxuICAgICAgICAgIG9mZnNldDogMTYsXG4gICAgICAgICAgLy8gb2Zmc2V0IHBvcG92ZXIgMTZweCBmcm9tIHRoZSBhbmNob3JcbiAgICAgICAgICBhcnJvd0NvbmZpZzoge1xuICAgICAgICAgICAgYXJyb3dXaWR0aDogMTIsXG4gICAgICAgICAgICBhcnJvd0J1ZmZlcjogNFxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHBvc2l0aW9uID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24ucG9zaXRpb24sXG4gICAgICAgIGxlZnQgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5sZWZ0LFxuICAgICAgICB0b3AgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi50b3AsXG4gICAgICAgIGFycm93ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24uYXJyb3c7XG5cbiAgICAgIC8vIElmIGVuY3JvYWNoaW5nIHRoZSByaWdodCBlZGdlIG9mIHRoZSB3aW5kb3c6XG4gICAgICAvLyBXaGVuIGBwcm9wcy5jb250ZW50YCBjaGFuZ2VzIGFuZCBpcyBsb25nZXIgdGhhbiBgcHJldlByb3BzLmNvbnRlbnRgLCB0aGUgdG9vbHRpcCB3aWR0aCByZW1haW5zIGFuZFxuICAgICAgLy8gdGhlIHJlc2l6ZU9ic2VydmVyIGNhbGxiYWNrIHdpbGwgZmlyZSB0d2ljZSAob25jZSBmb3IgdmVydGljYWwgcmVzaXplIGNhdXNlZCBieSB0ZXh0IGxpbmUgd3JhcHBpbmcsXG4gICAgICAvLyBvbmNlIGZvciBhIHN1YnNlcXVlbnQgcG9zaXRpb24gY29ycmVjdGlvbikgYW5kIGNhdXNlIGEgZmxhc2ggcmVyZW5kZXIgYW5kIHJlcG9zaXRpb24uXG4gICAgICAvLyBUbyBwcmV2ZW50IHRoaXMsIHdlIGNhbiBvcmllbnQgZnJvbSB0aGUgcmlnaHQgc28gdGhhdCB0ZXh0IGxpbmUgd3JhcHBpbmcgZG9lcyBub3Qgb2NjdXIsIG5lZ2F0aW5nXG4gICAgICAvLyB0aGUgc2Vjb25kIHJlc2l6ZU9ic2VydmVyIGNhbGxiYWNrIGNhbGwuXG4gICAgICB2YXIgd2luZG93V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgICB2YXIgdXNlUmlnaHRWYWx1ZSA9IHdpbmRvd1dpZHRoIC8gMiA8IGxlZnQ7XG4gICAgICB2YXIgdG9vbFRpcFN0eWxlcyA9IHtcbiAgICAgICAgdG9wOiB0b3AsXG4gICAgICAgIGxlZnQ6IHVzZVJpZ2h0VmFsdWUgPyAnYXV0bycgOiBsZWZ0LFxuICAgICAgICByaWdodDogdXNlUmlnaHRWYWx1ZSA/IHdpbmRvd1dpZHRoIC0gbGVmdCAtIF90aGlzLnBvcG92ZXIub2Zmc2V0V2lkdGggOiAnYXV0bydcbiAgICAgIH07XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgIGNhbGN1bGF0ZWRQb3NpdGlvbjogcG9zaXRpb24sXG4gICAgICAgIHRvb2xUaXBTdHlsZXM6IHRvb2xUaXBTdHlsZXMsXG4gICAgICAgIGFycm93U3R5bGVzOiBhcnJvd1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImhpZGVUb29sVGlwXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmNsZWFyQW5pbWF0aW9uVGltZW91dCgpO1xuICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl9pc01vdW50ZWQpIHtcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHRvb2xUaXBTdHlsZXM6IERFRkFVTFRfVE9PTFRJUF9TVFlMRVMsXG4gICAgICAgICAgICBhcnJvd1N0eWxlczogdW5kZWZpbmVkXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdG9vbFRpcE1hbmFnZXIuZGVyZWdpc3RlclRvb2xUaXAoX3RoaXMuaGlkZVRvb2xUaXApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIF90aGlzLnNob3dUb29sVGlwKCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQmx1clwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBfdGhpcy5oaWRlVG9vbFRpcCgpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkVzY2FwZUtleVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuRVNDQVBFKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoYXNGb2N1czogZmFsc2VcbiAgICAgICAgfSk7IC8vIEFsbG93cyBtb3VzaW5nIG92ZXIgYmFjayBpbnRvIHRoZSB0b29sdGlwIHRvIHdvcmsgY29ycmVjdGx5XG4gICAgICAgIF90aGlzLmhpZGVUb29sVGlwKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uTW91c2VPdXRcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IG1vdXNpbmcgb3ZlciBjaGlsZHJlbiBmcm9tIGhpZGluZyB0aGUgdG9vbHRpcCBieSB0ZXN0aW5nIGZvciB3aGV0aGVyIHRoZSBtb3VzZSBoYXNcbiAgICAgIC8vIGxlZnQgdGhlIGFuY2hvciBmb3IgYSBub24tY2hpbGQuXG4gICAgICBpZiAoX3RoaXMuYW5jaG9yID09PSBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IF90aGlzLmFuY2hvciAhPSBudWxsICYmICFfdGhpcy5hbmNob3IuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5oYXNGb2N1cykge1xuICAgICAgICAgIF90aGlzLmhpZGVUb29sVGlwKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbk1vdXNlT3V0KSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uTW91c2VPdXQoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpVG9vbFRpcCwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpVG9vbFRpcCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uVG9vbFRpcCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhckFuaW1hdGlvblRpbWVvdXQoKTtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Ub29sVGlwLCB0cnVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS52aXNpYmxlID09PSBmYWxzZSAmJiB0aGlzLnN0YXRlLnZpc2libGUgPT09IHRydWUpIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudGVzdEFuY2hvcik7XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSBzY3JvbGwgbGlzdGVuZXJcbiAgICAgIGlmIChwcmV2UHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsICE9PSB0aGlzLnByb3BzLnJlcG9zaXRpb25PblNjcm9sbCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwpIHtcbiAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblRvb2xUaXAsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uVG9vbFRpcCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgYW5jaG9yQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuYW5jaG9yQ2xhc3NOYW1lLFxuICAgICAgICBhbmNob3JQcm9wcyA9IF90aGlzJHByb3BzLmFuY2hvclByb3BzLFxuICAgICAgICBjb250ZW50ID0gX3RoaXMkcHJvcHMuY29udGVudCxcbiAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wcy50aXRsZSxcbiAgICAgICAgZGVsYXkgPSBfdGhpcyRwcm9wcy5kZWxheSxcbiAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgIHJlcG9zaXRpb25PblNjcm9sbCA9IF90aGlzJHByb3BzLnJlcG9zaXRpb25PblNjcm9sbCxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgIGFycm93U3R5bGVzID0gX3RoaXMkc3RhdGUuYXJyb3dTdHlsZXMsXG4gICAgICAgIGlkID0gX3RoaXMkc3RhdGUuaWQsXG4gICAgICAgIHRvb2xUaXBTdHlsZXMgPSBfdGhpcyRzdGF0ZS50b29sVGlwU3R5bGVzLFxuICAgICAgICB2aXNpYmxlID0gX3RoaXMkc3RhdGUudmlzaWJsZSxcbiAgICAgICAgY2FsY3VsYXRlZFBvc2l0aW9uID0gX3RoaXMkc3RhdGUuY2FsY3VsYXRlZFBvc2l0aW9uO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUb29sVGlwJywgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBhbmNob3JDbGFzc2VzID0gY2xhc3NOYW1lcyhhbmNob3JDbGFzc05hbWUsIGFuY2hvclByb3BzID09PSBudWxsIHx8IGFuY2hvclByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhbmNob3JQcm9wcy5jbGFzc05hbWUpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcEFuY2hvciwgX2V4dGVuZHMoe30sIGFuY2hvclByb3BzLCB7XG4gICAgICAgIHJlZjogdGhpcy5zZXRBbmNob3JSZWYsXG4gICAgICAgIG9uQmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uRXNjYXBlS2V5LFxuICAgICAgICBvbk1vdXNlT3ZlcjogdGhpcy5zaG93VG9vbFRpcCxcbiAgICAgICAgb25Nb3VzZU91dDogdGhpcy5vbk1vdXNlT3V0LFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGNsYXNzTmFtZTogYW5jaG9yQ2xhc3NlcyxcbiAgICAgICAgZGlzcGxheTogZGlzcGxheSxcbiAgICAgICAgaXNWaXNpYmxlOiB2aXNpYmxlXG4gICAgICB9KSwgY2hpbGRyZW4pLCB2aXNpYmxlICYmIChjb250ZW50IHx8IHRpdGxlKSAmJiBfX19FbW90aW9uSlNYKEV1aVBvcnRhbCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUb29sVGlwUG9wb3ZlciwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHN0eWxlOiB0b29sVGlwU3R5bGVzLFxuICAgICAgICBwb3NpdGlvblRvb2xUaXA6IHRoaXMucG9zaXRpb25Ub29sVGlwLFxuICAgICAgICBwb3BvdmVyUmVmOiB0aGlzLnNldFBvcG92ZXJSZWYsXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICByb2xlOiBcInRvb2x0aXBcIixcbiAgICAgICAgY2FsY3VsYXRlZFBvc2l0aW9uOiBjYWxjdWxhdGVkUG9zaXRpb25cbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXBBcnJvdywge1xuICAgICAgICBzdHlsZTogYXJyb3dTdHlsZXMsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlUb29sVGlwX19hcnJvd1wiLFxuICAgICAgICBwb3NpdGlvbjogY2FsY3VsYXRlZFBvc2l0aW9uXG4gICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlSZXNpemVPYnNlcnZlciwge1xuICAgICAgICBvblJlc2l6ZTogdGhpcy5wb3NpdGlvblRvb2xUaXBcbiAgICAgIH0sIGZ1bmN0aW9uIChyZXNpemVSZWYpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIHJlZjogcmVzaXplUmVmXG4gICAgICAgIH0sIGNvbnRlbnQpO1xuICAgICAgfSkpKSk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpVG9vbFRpcCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBwb3NpdGlvbjogJ3RvcCcsXG4gIGRlbGF5OiAncmVndWxhcicsXG4gIGRpc3BsYXk6ICdpbmxpbmVCbG9jaydcbn0pO1xuRXVpVG9vbFRpcC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSBzcGFuIHdyYXBwaW5nIHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBhbmNob3JDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSBzcGFuIHdyYXBwaW5nIHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBhbmNob3JQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgLyoqXG4gICAgICogVGhlIGluLXZpZXcgdHJpZ2dlciBmb3IgeW91ciB0b29sdGlwLlxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHRvb2x0aXAgaXRzZWxmLCBub3QgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogVGhlIG1haW4gY29udGVudCBvZiB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBDb21tb24gZGlzcGxheSBhbHRlcm5hdGl2ZXMgZm9yIHRoZSBhbmNob3Igd3JhcHBlclxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBEZWxheSBiZWZvcmUgc2hvd2luZyB0b29sdGlwLiBHb29kIGZvciByZXBlYXRhYmxlIGl0ZW1zLlxuICAgICAqL1xuICBkZWxheTogUHJvcFR5cGVzLm9uZU9mKFtcInJlZ3VsYXJcIiwgXCJsb25nXCJdKS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCB0aXRsZSBmb3IgeW91ciB0b29sdGlwLlxuICAgICAqL1xuICB0aXRsZTogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIFVubGVzcyB5b3UgcHJvdmlkZSBvbmUsIHRoaXMgd2lsbCBiZSByYW5kb21seSBnZW5lcmF0ZWQuXG4gICAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBTdWdnZXN0ZWQgcG9zaXRpb24uIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSBmb3IgaXQgdGhpcyB3aWxsIGJlIGNoYW5nZWQuXG4gICAgICovXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCwgdGhlIHRvb2x0aXAncyBwb3NpdGlvbiBpcyByZS1jYWxjdWxhdGVkIHdoZW4gdGhlIHVzZXJcbiAgICAgKiBzY3JvbGxzLiBUaGlzIHN1cHBvcnRzIGhhdmluZyBmaXhlZC1wb3NpdGlvbiB0b29sdGlwIGFuY2hvcnMuXG4gICAgICpcbiAgICAgKiBXaGVuIG5lc3RpbmcgYW4gYEV1aVRvb2x0aXBgIGluIGEgc2Nyb2xsYWJsZSBjb250YWluZXIsIGByZXBvc2l0aW9uT25TY3JvbGxgIHNob3VsZCBiZSBgdHJ1ZWBcbiAgICAgKi9cbiAgcmVwb3NpdGlvbk9uU2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSWYgc3VwcGxpZWQsIGNhbGxlZCB3aGVuIG1vdXNlIG1vdmVtZW50IGNhdXNlcyB0aGUgdG9vbCB0aXAgdG8gYmVcbiAgICAgKiBoaWRkZW4uXG4gICAgICovXG4gIG9uTW91c2VPdXQ6IFByb3BUeXBlcy5mdW5jLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyJztcbmV4cG9ydCB2YXIgaGFzUmVzaXplT2JzZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LlJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcbmV4cG9ydCB2YXIgRXVpUmVzaXplT2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9FdWlPYnNlcnZlcikge1xuICBmdW5jdGlvbiBFdWlSZXNpemVPYnNlcnZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVJlc2l6ZU9ic2VydmVyKTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlSZXNpemVPYnNlcnZlciwgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibmFtZVwiLCAnRXVpUmVzaXplT2JzZXJ2ZXInKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RhdGVcIiwge1xuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgd2lkdGg6IDBcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25SZXNpemVcIiwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDEpLFxuICAgICAgICBlbnRyeSA9IF9yZWYyWzBdO1xuICAgICAgdmFyIF9lbnRyeSRib3JkZXJCb3hTaXplJCA9IGVudHJ5LmJvcmRlckJveFNpemVbMF0sXG4gICAgICAgIHdpZHRoID0gX2VudHJ5JGJvcmRlckJveFNpemUkLmlubGluZVNpemUsXG4gICAgICAgIGhlaWdodCA9IF9lbnRyeSRib3JkZXJCb3hTaXplJC5ibG9ja1NpemU7XG5cbiAgICAgIC8vIENoZWNrIGZvciBhY3R1YWwgcmVzaXplIGV2ZW50XG4gICAgICBpZiAoX3RoaXMuc3RhdGUuaGVpZ2h0ID09PSBoZWlnaHQgJiYgX3RoaXMuc3RhdGUud2lkdGggPT09IHdpZHRoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF90aGlzLnByb3BzLm9uUmVzaXplKHtcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHdpZHRoOiB3aWR0aFxuICAgICAgfSk7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICB3aWR0aDogd2lkdGhcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJiZWdpbk9ic2VydmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhlIHN1cGVyY2xhc3MgY2hlY2tzIHRoYXQgY2hpbGROb2RlIGlzIG5vdCBudWxsIGJlZm9yZSBpbnZva2luZ1xuICAgICAgLy8gYmVnaW5PYnNlcnZlKClcbiAgICAgIHZhciBjaGlsZE5vZGUgPSBfdGhpcy5jaGlsZE5vZGU7XG4gICAgICBfdGhpcy5vYnNlcnZlciA9IG1ha2VSZXNpemVPYnNlcnZlcihjaGlsZE5vZGUsIF90aGlzLm9uUmVzaXplKTtcbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aVJlc2l6ZU9ic2VydmVyLCBfRXVpT2JzZXJ2ZXIpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aVJlc2l6ZU9ic2VydmVyKTtcbn0oRXVpT2JzZXJ2ZXIpO1xudmFyIG1ha2VSZXNpemVPYnNlcnZlciA9IGZ1bmN0aW9uIG1ha2VSZXNpemVPYnNlcnZlcihub2RlLCBjYWxsYmFjaykge1xuICB2YXIgb2JzZXJ2ZXI7XG4gIGlmIChoYXNSZXNpemVPYnNlcnZlcikge1xuICAgIG9ic2VydmVyID0gbmV3IHdpbmRvdy5SZXNpemVPYnNlcnZlcihjYWxsYmFjayk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlKTtcbiAgfVxuICByZXR1cm4gb2JzZXJ2ZXI7XG59O1xuZXhwb3J0IHZhciB1c2VSZXNpemVPYnNlcnZlciA9IGZ1bmN0aW9uIHVzZVJlc2l6ZU9ic2VydmVyKGNvbnRhaW5lciwgZGltZW5zaW9uKSB7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZSh7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH0pLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHNpemUgPSBfdXNlU3RhdGUyWzBdLFxuICAgIF9zZXRTaXplID0gX3VzZVN0YXRlMlsxXTtcblxuICAvLyBfY3VycmVudERpbWVuc2lvbnMgYW5kIF9zZXRTaXplIGFyZSB1c2VkIHRvIG9ubHkgc3RvcmUgdGhlXG4gIC8vIG5ldyBzdGF0ZSAoYW5kIHRyaWdnZXIgYSByZS1yZW5kZXIpIHdoZW4gdGhlIG5ldyBkaW1lbnNpb25zIGFjdHVhbGx5IGRpZmZlclxuICB2YXIgX2N1cnJlbnREaW1lbnNpb25zID0gdXNlUmVmKHNpemUpO1xuICB2YXIgc2V0U2l6ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChkaW1lbnNpb25zKSB7XG4gICAgdmFyIGRvZXNXaWR0aE1hdHRlciA9IGRpbWVuc2lvbiAhPT0gJ2hlaWdodCc7XG4gICAgdmFyIGRvZXNIZWlnaHRNYXR0ZXIgPSBkaW1lbnNpb24gIT09ICd3aWR0aCc7XG4gICAgaWYgKGRvZXNXaWR0aE1hdHRlciAmJiBfY3VycmVudERpbWVuc2lvbnMuY3VycmVudC53aWR0aCAhPT0gZGltZW5zaW9ucy53aWR0aCB8fCBkb2VzSGVpZ2h0TWF0dGVyICYmIF9jdXJyZW50RGltZW5zaW9ucy5jdXJyZW50LmhlaWdodCAhPT0gZGltZW5zaW9ucy5oZWlnaHQpIHtcbiAgICAgIF9jdXJyZW50RGltZW5zaW9ucy5jdXJyZW50ID0gZGltZW5zaW9ucztcbiAgICAgIF9zZXRTaXplKGRpbWVuc2lvbnMpO1xuICAgIH1cbiAgfSwgW2RpbWVuc2lvbl0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjb250YWluZXIgIT0gbnVsbCkge1xuICAgICAgdmFyIG9ic2VydmVyID0gbWFrZVJlc2l6ZU9ic2VydmVyKGNvbnRhaW5lciwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAxKSxcbiAgICAgICAgICBlbnRyeSA9IF9yZWY0WzBdO1xuICAgICAgICB2YXIgX2VudHJ5JGJvcmRlckJveFNpemUkMiA9IGVudHJ5LmJvcmRlckJveFNpemVbMF0sXG4gICAgICAgICAgaW5saW5lU2l6ZSA9IF9lbnRyeSRib3JkZXJCb3hTaXplJDIuaW5saW5lU2l6ZSxcbiAgICAgICAgICBibG9ja1NpemUgPSBfZW50cnkkYm9yZGVyQm94U2l6ZSQyLmJsb2NrU2l6ZTtcbiAgICAgICAgc2V0U2l6ZSh7XG4gICAgICAgICAgd2lkdGg6IGlubGluZVNpemUsXG4gICAgICAgICAgaGVpZ2h0OiBibG9ja1NpemVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZlciAmJiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTaXplKHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMFxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbY29udGFpbmVyLCBzZXRTaXplXSk7XG4gIHJldHVybiBzaXplO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgRXVpT2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpT2JzZXJ2ZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlPYnNlcnZlcik7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpT2JzZXJ2ZXIsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm5hbWVcIiwgJ0V1aU9ic2VydmVyJyk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNoaWxkTm9kZVwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib2JzZXJ2ZXJcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInVwZGF0ZUNoaWxkTm9kZVwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBpZiAoX3RoaXMuY2hpbGROb2RlID09PSByZWYpIHJldHVybjsgLy8gbm9kZSBoYXNuJ3QgY2hhbmdlZFxuXG4gICAgICAvLyBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIG9ic2VydmVyIGRpc2Nvbm5lY3QgaXRcbiAgICAgIGlmIChfdGhpcy5vYnNlcnZlciAhPSBudWxsKSB7XG4gICAgICAgIF90aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgX3RoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgX3RoaXMuY2hpbGROb2RlID0gcmVmO1xuICAgICAgaWYgKF90aGlzLmNoaWxkTm9kZSAhPSBudWxsKSB7XG4gICAgICAgIF90aGlzLmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJiZWdpbk9ic2VydmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdWlPYnNlcnZlciBoYXMgbm8gZGVmYXVsdCBvYnNlcnZhdGlvbiBtZXRob2QnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aU9ic2VydmVyLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlPYnNlcnZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5jaGlsZE5vZGUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJcIi5jb25jYXQodGhpcy5uYW1lLCBcIiBkaWQgbm90IHJlY2VpdmUgYSByZWZcIikpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLm9ic2VydmVyICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIHByb3BzLmNoaWxkcmVuKHRoaXMudXBkYXRlQ2hpbGROb2RlKTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogTk9URTogV2UgY2FuJ3QgdGVzdCB0aGlzIGNvbXBvbmVudCBiZWNhdXNlIEVuenltZSBkb2Vzbid0IHN1cHBvcnQgcmVuZGVyaW5nXG4gKiBpbnRvIHBvcnRhbHMuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBFdWlOZXN0ZWRUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VQcm9wc1dpdGhDb21wb25lbnREZWZhdWx0cyB9IGZyb20gJy4uL3Byb3ZpZGVyL2NvbXBvbmVudF9kZWZhdWx0cyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIElOU0VSVF9QT1NJVElPTlMgPSBbJ2FmdGVyJywgJ2JlZm9yZSddO1xudmFyIGluc2VydFBvc2l0aW9ucyA9IHtcbiAgYWZ0ZXI6ICdhZnRlcmVuZCcsXG4gIGJlZm9yZTogJ2JlZm9yZWJlZ2luJ1xufTtcbmV4cG9ydCB2YXIgRXVpUG9ydGFsID0gZnVuY3Rpb24gRXVpUG9ydGFsKHByb3BzKSB7XG4gIHZhciBwcm9wc1dpdGhEZWZhdWx0cyA9IHVzZVByb3BzV2l0aENvbXBvbmVudERlZmF1bHRzKCdFdWlQb3J0YWwnLCBwcm9wcyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBvcnRhbENsYXNzLCBwcm9wc1dpdGhEZWZhdWx0cyk7XG59O1xuRXVpUG9ydGFsLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIElmIG5vdCBzcGVjaWZpZWQsIGBFdWlQb3J0YWxgIHdpbGwgaW5zZXJ0IGl0c2VsZlxuICAgICAqIGludG8gdGhlIGVuZCBvZiB0aGUgYGRvY3VtZW50LmJvZHlgIGJ5IGRlZmF1bHRcbiAgICAgKi9cbiAgaW5zZXJ0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHNpYmxpbmc6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICBwb3NpdGlvbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICAgKiBPcHRpb25hbCByZWYgY2FsbGJhY2tcbiAgICAgKi9cbiAgcG9ydGFsUmVmOiBQcm9wVHlwZXMuZnVuY1xufTtcbmV4cG9ydCB2YXIgRXVpUG9ydGFsQ2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpUG9ydGFsQ2xhc3MocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVBvcnRhbENsYXNzKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpUG9ydGFsQ2xhc3MsIFtwcm9wc10pO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgcG9ydGFsTm9kZTogbnVsbFxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlQb3J0YWxDbGFzcywgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpUG9ydGFsQ2xhc3MsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIGluc2VydCA9IHRoaXMucHJvcHMuaW5zZXJ0O1xuICAgICAgdmFyIHBvcnRhbE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHBvcnRhbE5vZGUuZGF0YXNldC5ldWlwb3J0YWwgPSAndHJ1ZSc7XG4gICAgICBpZiAoaW5zZXJ0ID09IG51bGwpIHtcbiAgICAgICAgLy8gbm8gaW5zZXJ0aW9uIGRlZmluZWQsIGFwcGVuZCB0byBib2R5XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocG9ydGFsTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpbnNlcnRpbmcgYmVmb3JlIG9yIGFmdGVyIGFuIGVsZW1lbnRcbiAgICAgICAgdmFyIHNpYmxpbmcgPSBpbnNlcnQuc2libGluZyxcbiAgICAgICAgICBwb3NpdGlvbiA9IGluc2VydC5wb3NpdGlvbjtcbiAgICAgICAgc2libGluZy5pbnNlcnRBZGphY2VudEVsZW1lbnQoaW5zZXJ0UG9zaXRpb25zW3Bvc2l0aW9uXSwgcG9ydGFsTm9kZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFRoZW1lQ29sb3IocG9ydGFsTm9kZSk7XG4gICAgICB0aGlzLnVwZGF0ZVBvcnRhbFJlZihwb3J0YWxOb2RlKTtcblxuICAgICAgLy8gVXBkYXRlIHN0YXRlIHdpdGggcG9ydGFsTm9kZSB0byBpbnRlbnRpb25hbGx5IHRyaWdnZXIgY29tcG9uZW50IHJlcmVuZGVyXG4gICAgICAvLyBhbmQgY2FsbCBjcmVhdGVQb3J0YWwgd2l0aCBjb3JyZWN0IHJvb3QgZWxlbWVudCBpbiByZW5kZXIoKVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHBvcnRhbE5vZGU6IHBvcnRhbE5vZGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHZhciBwb3J0YWxOb2RlID0gdGhpcy5zdGF0ZS5wb3J0YWxOb2RlO1xuICAgICAgaWYgKHBvcnRhbE5vZGUgIT09IG51bGwgJiYgcG9ydGFsTm9kZSAhPT0gdm9pZCAwICYmIHBvcnRhbE5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBwb3J0YWxOb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocG9ydGFsTm9kZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVBvcnRhbFJlZihudWxsKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGluaGVyaXRlZCBjb2xvciBvZiB0aGUgcG9ydGFsIGJhc2VkIG9uIHRoZSB3cmFwcGluZyBFdWlUaGVtZVByb3ZpZGVyXG4gIH0sIHtcbiAgICBrZXk6IFwic2V0VGhlbWVDb2xvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRUaGVtZUNvbG9yKHBvcnRhbE5vZGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgdmFyIF90aGlzJGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXG4gICAgICAgICAgaGFzRGlmZmVyZW50Q29sb3JGcm9tR2xvYmFsVGhlbWUgPSBfdGhpcyRjb250ZXh0Lmhhc0RpZmZlcmVudENvbG9yRnJvbUdsb2JhbFRoZW1lLFxuICAgICAgICAgIGNvbG9yQ2xhc3NOYW1lID0gX3RoaXMkY29udGV4dC5jb2xvckNsYXNzTmFtZTtcbiAgICAgICAgaWYgKGhhc0RpZmZlcmVudENvbG9yRnJvbUdsb2JhbFRoZW1lICYmIHRoaXMucHJvcHMuaW5zZXJ0ID09IG51bGwpIHtcbiAgICAgICAgICBwb3J0YWxOb2RlLmNsYXNzTGlzdC5hZGQoY29sb3JDbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVwZGF0ZVBvcnRhbFJlZlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVQb3J0YWxSZWYocmVmKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5wb3J0YWxSZWYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5wb3J0YWxSZWYocmVmKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBwb3J0YWxOb2RlID0gdGhpcy5zdGF0ZS5wb3J0YWxOb2RlO1xuICAgICAgaWYgKCFwb3J0YWxOb2RlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jcmVhdGVQb3J0YWwodGhpcy5wcm9wcy5jaGlsZHJlbiwgcG9ydGFsTm9kZSk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpUG9ydGFsQ2xhc3MsIFwiY29udGV4dFR5cGVcIiwgRXVpTmVzdGVkVGhlbWVDb250ZXh0KTtcbkV1aVBvcnRhbENsYXNzLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIElmIG5vdCBzcGVjaWZpZWQsIGBFdWlQb3J0YWxgIHdpbGwgaW5zZXJ0IGl0c2VsZlxuICAgICAqIGludG8gdGhlIGVuZCBvZiB0aGUgYGRvY3VtZW50LmJvZHlgIGJ5IGRlZmF1bHRcbiAgICAgKi9cbiAgaW5zZXJ0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHNpYmxpbmc6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICBwb3NpdGlvbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICAgKiBPcHRpb25hbCByZWYgY2FsbGJhY2tcbiAgICAgKi9cbiAgcG9ydGFsUmVmOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG4vLyBEZWNsYXJpbmcgYXMgYSBzdGF0aWMgY29uc3QgZm9yIHJlZmVyZW5jZSBpbnRlZ3JpdHkvcmVkdWNpbmcgcmVyZW5kZXJzXG52YXIgZW1wdHlEZWZhdWx0cyA9IHt9O1xuXG4vKlxuICogQ29udGV4dFxuICovXG5leHBvcnQgdmFyIEV1aUNvbXBvbmVudERlZmF1bHRzQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KGVtcHR5RGVmYXVsdHMpO1xuXG4vKlxuICogQ29tcG9uZW50XG4gKi9cblxuZXhwb3J0IHZhciBFdWlDb21wb25lbnREZWZhdWx0c1Byb3ZpZGVyID0gZnVuY3Rpb24gRXVpQ29tcG9uZW50RGVmYXVsdHNQcm92aWRlcihfcmVmKSB7XG4gIHZhciBfcmVmJGNvbXBvbmVudERlZmF1bHQgPSBfcmVmLmNvbXBvbmVudERlZmF1bHRzLFxuICAgIGNvbXBvbmVudERlZmF1bHRzID0gX3JlZiRjb21wb25lbnREZWZhdWx0ID09PSB2b2lkIDAgPyBlbXB0eURlZmF1bHRzIDogX3JlZiRjb21wb25lbnREZWZhdWx0LFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29tcG9uZW50RGVmYXVsdHNDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbXBvbmVudERlZmF1bHRzXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5cbi8qXG4gKiBIb29rc1xuICovXG5FdWlDb21wb25lbnREZWZhdWx0c1Byb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgY29tcG9uZW50RGVmYXVsdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBQcm92aWRlIGEgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZm9yIEV1aVBvcnRhbCdzIGRlZmF1bHQgaW5zZXJ0aW9uIHBvc2l0aW9uLlxuICAgICAgICovXG4gICAgRXVpUG9ydGFsOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogUHJvdmlkZSBhIGdsb2JhbCBjb25maWd1cmF0aW9uIGZvciBFdWlGb2N1c1RyYXAncyBgZ2FwTW9kZWAgYW5kIGBjcm9zc0ZyYW1lYCBwcm9wc1xuICAgICAgICovXG4gICAgRXVpRm9jdXNUcmFwOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogUHJvdmlkZSBnbG9iYWwgc2V0dGluZ3MgZm9yIEV1aVRhYmxlUGFnaW5hdGlvbidzIHByb3BzIHRoYXQgYWZmZWN0IHBhZ2Ugc2l6ZVxuICAgICAgICogLyB0aGUgcm93cyBwZXIgcGFnZSBzZWxlY3Rpb24uXG4gICAgICAgKlxuICAgICAgICogVGhlc2UgZGVmYXVsdHMgd2lsbCBiZSBpbmhlcml0ZWQgYWxsIHRhYmxlIGFuZCBncmlkIGNvbXBvbmVudHMgdGhhdCB1dGlsaXplIEV1aVRhYmxlUGFnaW5hdGlvbi5cbiAgICAgICAqL1xuICAgIEV1aVRhYmxlUGFnaW5hdGlvbjogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFByb3ZpZGUgYSBnbG9iYWwgY29uZmlndXJhdGlvbiBmb3IgRXVpVGFibGUncyBgcmVzcG9uc2l2ZUJyZWFrcG9pbnRgIHByb3AuIERlZmF1bHRzIHRvIGAncydgLlxuICAgICAgICpcbiAgICAgICAqIERlZmF1bHRzIHdpbGwgYmUgaW5oZXJpdGVkIGJ5IGFsbCBgRXVpQmFzaWNUYWJsZWBzIGFuZCBgRXVpSW5NZW1vcnlUYWJsZWBzLlxuICAgICAgICovXG4gICAgRXVpVGFibGU6IFByb3BUeXBlcy5hbnlcbiAgfSlcbn07XG5leHBvcnQgdmFyIHVzZUNvbXBvbmVudERlZmF1bHRzID0gZnVuY3Rpb24gdXNlQ29tcG9uZW50RGVmYXVsdHMoKSB7XG4gIHJldHVybiB1c2VDb250ZXh0KEV1aUNvbXBvbmVudERlZmF1bHRzQ29udGV4dCk7XG59O1xuXG4vLyBNZXJnZSBpbmRpdmlkdWFsIGNvbXBvbmVudCBwcm9wcyB3aXRoIGNvbXBvbmVudCBkZWZhdWx0c1xuZXhwb3J0IHZhciB1c2VQcm9wc1dpdGhDb21wb25lbnREZWZhdWx0cyA9IGZ1bmN0aW9uIHVzZVByb3BzV2l0aENvbXBvbmVudERlZmF1bHRzKGNvbXBvbmVudE5hbWUsIHByb3BzKSB7XG4gIHZhciBfY29udGV4dCRjb21wb25lbnROYW07XG4gIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChFdWlDb21wb25lbnREZWZhdWx0c0NvbnRleHQpO1xuICB2YXIgY29tcG9uZW50RGVmYXVsdHMgPSAoX2NvbnRleHQkY29tcG9uZW50TmFtID0gY29udGV4dFtjb21wb25lbnROYW1lXSkgIT09IG51bGwgJiYgX2NvbnRleHQkY29tcG9uZW50TmFtICE9PSB2b2lkIDAgPyBfY29udGV4dCRjb21wb25lbnROYW0gOiBlbXB0eURlZmF1bHRzO1xuICByZXR1cm4gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY29tcG9uZW50RGVmYXVsdHMpLCBwcm9wcyk7XG4gIH0sIFtjb21wb25lbnREZWZhdWx0cywgcHJvcHNdKTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcInRpdGxlXCIsIFwiY2xhc3NOYW1lXCIsIFwicG9zaXRpb25Ub29sVGlwXCIsIFwicG9wb3ZlclJlZlwiLCBcImNhbGN1bGF0ZWRQb3NpdGlvblwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlUb29sVGlwU3R5bGVzIH0gZnJvbSAnLi90b29sX3RpcC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVG9vbFRpcFBvcG92ZXIgPSBmdW5jdGlvbiBFdWlUb29sVGlwUG9wb3ZlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHBvc2l0aW9uVG9vbFRpcCA9IF9yZWYucG9zaXRpb25Ub29sVGlwLFxuICAgIHBvcG92ZXJSZWYgPSBfcmVmLnBvcG92ZXJSZWYsXG4gICAgY2FsY3VsYXRlZFBvc2l0aW9uID0gX3JlZi5jYWxjdWxhdGVkUG9zaXRpb24sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgcG9wb3ZlciA9IHVzZVJlZigpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpVG9vbFRpcFN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRvb2xUaXAsIGNhbGN1bGF0ZWRQb3NpdGlvbiAmJiBzdHlsZXNbY2FsY3VsYXRlZFBvc2l0aW9uXV07XG4gIHZhciB1cGRhdGVEaW1lbnNpb25zID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBCZWNhdXNlIG9mIHRoaXMgZGVsYXksIHNvbWV0aW1lcyBgcG9zaXRpb25Ub29sVGlwYCBiZWNvbWVzIHVuYXZhaWxhYmxlLlxuICAgICAgaWYgKHBvcG92ZXIuY3VycmVudCkge1xuICAgICAgICBwb3NpdGlvblRvb2xUaXAoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW3Bvc2l0aW9uVG9vbFRpcF0pO1xuICB2YXIgc2V0UG9wb3ZlclJlZiA9IGZ1bmN0aW9uIHNldFBvcG92ZXJSZWYocmVmKSB7XG4gICAgaWYgKHBvcG92ZXJSZWYpIHtcbiAgICAgIHBvcG92ZXJSZWYocmVmKTtcbiAgICB9XG4gIH07XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdldWlCb2R5LWhhc1BvcnRhbENvbnRlbnQnKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlRGltZW5zaW9ucyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnZXVpQm9keS1oYXNQb3J0YWxDb250ZW50Jyk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlRGltZW5zaW9ucyk7XG4gICAgfTtcbiAgfSwgW3VwZGF0ZURpbWVuc2lvbnNdKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUb29sVGlwUG9wb3ZlcicsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgcmVmOiBzZXRQb3BvdmVyUmVmLFxuICAgIFwiZGF0YS1wb3NpdGlvblwiOiBjYWxjdWxhdGVkUG9zaXRpb25cbiAgfSwgcmVzdCksIHRpdGxlICYmIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNzczogc3R5bGVzLmV1aVRvb2xUaXBfX3RpdGxlLFxuICAgIGNsYXNzTmFtZTogXCJldWlUb29sVGlwX190aXRsZVwiXG4gIH0sIHRpdGxlKSwgY2hpbGRyZW4pO1xufTtcbkV1aVRvb2xUaXBQb3BvdmVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHBvc2l0aW9uVG9vbFRpcDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICB0aXRsZTogUHJvcFR5cGVzLm5vZGUsXG4gIHBvcG92ZXJSZWY6IFByb3BUeXBlcy5mdW5jLFxuICBjYWxjdWxhdGVkUG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0pXG59OyIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0LCBfdGVtcGxhdGVPYmplY3QyO1xuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChlLCB0KSB7IHJldHVybiB0IHx8ICh0ID0gZS5zbGljZSgwKSksIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUodCkgfSB9KSk7IH1cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcywga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbFNpemVDU1MsIGV1aUZvbnRTaXplLCBldWlDYW5BbmltYXRlLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgQ09MT1JfTU9ERVNfU1RBTkRBUkQsIHRpbnQsIHNoYWRlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpU2hhZG93IH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbSc7XG5leHBvcnQgdmFyIGV1aVRvb2xUaXBCYWNrZ3JvdW5kQ29sb3IgPSBmdW5jdGlvbiBldWlUb29sVGlwQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lLCBjb2xvck1vZGUpIHtcbiAgcmV0dXJuIGNvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayA/IHNoYWRlKGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlLCAxKSA6IHRpbnQoZXVpVGhlbWUuY29sb3JzLmZ1bGxTaGFkZSwgMC4yNSk7XG59O1xuZXhwb3J0IHZhciBldWlUb29sVGlwQm9yZGVyQ29sb3IgPSBmdW5jdGlvbiBldWlUb29sVGlwQm9yZGVyQ29sb3IoZXVpVGhlbWUsIGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSBDT0xPUl9NT0RFU19TVEFOREFSRC5kYXJrID8gc2hhZGUoZXVpVGhlbWUuY29sb3JzLmZ1bGxTaGFkZSwgMC44KSA6IHRpbnQoZXVpVGhlbWUuY29sb3JzLmZ1bGxTaGFkZSwgMC4zNSk7XG59O1xudmFyIGV1aVRvb2xUaXBBbmltYXRpb25WZXJ0aWNhbCA9IGZ1bmN0aW9uIGV1aVRvb2xUaXBBbmltYXRpb25WZXJ0aWNhbChzaXplKSB7XG4gIHJldHVybiBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICAwJSB7XFxuICAgICAgICBvcGFjaXR5OiAwO1xcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKFwiLCBcIik7XFxuICAgIH1cXG5cXG4gICAgMTAwJSB7XFxuICAgICAgICBvcGFjaXR5OiAxO1xcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbiAgICB9XFxuXCJdKSksIHNpemUpO1xufTtcbnZhciBldWlUb29sVGlwQW5pbWF0aW9uSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIGV1aVRvb2xUaXBBbmltYXRpb25Ib3Jpem9udGFsKHNpemUpIHtcbiAgcmV0dXJuIGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QyIHx8IChfdGVtcGxhdGVPYmplY3QyID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgMCUge1xcbiAgICAgICAgb3BhY2l0eTogMDtcXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChcIiwgXCIpO1xcbiAgICB9XFxuXFxuICAgIDEwMCUge1xcbiAgICAgICAgb3BhY2l0eTogMTtcXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcXG4gICAgfVxcblwiXSkpLCBzaXplKTtcbn07XG5leHBvcnQgdmFyIGV1aVRvb2xUaXBTdHlsZXMgPSBmdW5jdGlvbiBldWlUb29sVGlwU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgdmFyIGFuaW1hdGlvblRpbWluZyA9IFwiXCIuY29uY2F0KGV1aVRoZW1lLmFuaW1hdGlvbi5zbG93LCBcIiBlYXNlLW91dCAwcyBmb3J3YXJkc1wiKTtcbiAgLy8gU2hpZnQgYXJyb3cgMXB4IG1vcmUgdGhhbiBoYWxmIGl0cyBzaXplIHRvIGFjY291bnQgZm9yIGJvcmRlciByYWRpdXNcbiAgdmFyIGFycm93U2l6ZSA9IGV1aVRoZW1lLnNpemUubTtcbiAgdmFyIGFycm93UGx1c1NpemUgPSBtYXRoV2l0aFVuaXRzKGFycm93U2l6ZSwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gKHggLyAyICsgMSkgKiAtMTtcbiAgfSk7XG4gIHZhciBhcnJvd01pbnVzU2l6ZSA9IG1hdGhXaXRoVW5pdHMoYXJyb3dTaXplLCBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiAoeCAvIDIgLSAxKSAqIC0xO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpVG9vbFRpcDogLyojX19QVVJFX18qL2NzcyhldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0KSwgXCIgYm9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiO2JhY2tncm91bmQtY29sb3I6XCIsIGV1aVRvb2xUaXBCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWUsIGNvbG9yTW9kZSksIFwiO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZ2hvc3QsIFwiO3otaW5kZXg6XCIsIGV1aVRoZW1lLmxldmVscy50b2FzdCwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcyNTZweCcpLCBcIiBvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7cGFkZGluZzpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjtcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIiBwb3NpdGlvbjphYnNvbHV0ZTtbY2xhc3MqPSdldWlIb3Jpem9udGFsUnVsZSdde2JhY2tncm91bmQtY29sb3I6XCIsIGV1aVRvb2xUaXBCb3JkZXJDb2xvcihldWlUaGVtZSwgY29sb3JNb2RlKSwgXCI7fTtsYWJlbDpldWlUb29sVGlwO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIC8vIFBvc2l0aW9uc1xuICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInthbmltYXRpb246XCIsIGV1aVRvb2xUaXBBbmltYXRpb25WZXJ0aWNhbChcIi1cIi5jb25jYXQoZXVpVGhlbWUuc2l6ZS5iYXNlKSksIFwiIFwiLCBhbmltYXRpb25UaW1pbmcsIFwiO307bGFiZWw6dG9wO1wiKSxcbiAgICBib3R0b206IC8qI19fUFVSRV9fKi9jc3MoZXVpQ2FuQW5pbWF0ZSwgXCJ7YW5pbWF0aW9uOlwiLCBldWlUb29sVGlwQW5pbWF0aW9uVmVydGljYWwoZXVpVGhlbWUuc2l6ZS5iYXNlKSwgXCIgXCIsIGFuaW1hdGlvblRpbWluZywgXCI7fTtsYWJlbDpib3R0b207XCIpLFxuICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpQ2FuQW5pbWF0ZSwgXCJ7YW5pbWF0aW9uOlwiLCBldWlUb29sVGlwQW5pbWF0aW9uSG9yaXpvbnRhbChcIi1cIi5jb25jYXQoZXVpVGhlbWUuc2l6ZS5iYXNlKSksIFwiIFwiLCBhbmltYXRpb25UaW1pbmcsIFwiO307bGFiZWw6bGVmdDtcIiksXG4gICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpQ2FuQW5pbWF0ZSwgXCJ7YW5pbWF0aW9uOlwiLCBldWlUb29sVGlwQW5pbWF0aW9uSG9yaXpvbnRhbChldWlUaGVtZS5zaXplLmJhc2UpLCBcIiBcIiwgYW5pbWF0aW9uVGltaW5nLCBcIjt9O2xhYmVsOnJpZ2h0O1wiKSxcbiAgICAvLyBBcnJvd1xuICAgIGV1aVRvb2xUaXBfX2Fycm93OiAvKiNfX1BVUkVfXyovY3NzKFwiY29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjtib3JkZXItcmFkaXVzOlwiLCBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLmJvcmRlci5yYWRpdXMuc21hbGwsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAvIDI7XG4gICAgfSksIFwiO2JhY2tncm91bmQtY29sb3I6XCIsIGV1aVRvb2xUaXBCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWUsIGNvbG9yTW9kZSksIFwiO1wiLCBsb2dpY2FsU2l6ZUNTUyhhcnJvd1NpemUsIGFycm93U2l6ZSksIFwiOztsYWJlbDpldWlUb29sVGlwX19hcnJvdztcIiksXG4gICAgYXJyb3dQb3NpdGlvbnM6IHtcbiAgICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVZKFwiLCBhcnJvd1BsdXNTaXplLCBcIikgcm90YXRlWig0NWRlZyk7O2xhYmVsOnRvcDtcIiksXG4gICAgICBib3R0b206IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWShcIiwgYXJyb3dNaW51c1NpemUsIFwiKSByb3RhdGVaKDQ1ZGVnKTs7bGFiZWw6Ym90dG9tO1wiKSxcbiAgICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWChcIiwgYXJyb3dQbHVzU2l6ZSwgXCIpIHJvdGF0ZVooNDVkZWcpOztsYWJlbDpsZWZ0O1wiKSxcbiAgICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVgoXCIsIGFycm93TWludXNTaXplLCBcIikgcm90YXRlWig0NWRlZyk7O2xhYmVsOnJpZ2h0O1wiKVxuICAgIH0sXG4gICAgLy8gVGl0bGVcbiAgICBldWlUb29sVGlwX190aXRsZTogLyojX19QVVJFX18qL2NzcyhcImZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5ib2xkLCBcIjtcIiwgbG9naWNhbENTUygnYm9yZGVyLWJvdHRvbScsIFwic29saWQgXCIuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBcIikuY29uY2F0KGV1aVRvb2xUaXBCb3JkZXJDb2xvcihldWlUaGVtZSwgY29sb3JNb2RlKSkpLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy1ib3R0b20nLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7O2xhYmVsOmV1aVRvb2xUaXBfX3RpdGxlO1wiKVxuICB9O1xufTtcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImZ6aWxuay1pbmxpbmVCbG9ja1wiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7bGFiZWw6aW5saW5lQmxvY2s7XCJcbn0gOiB7XG4gIG5hbWU6IFwiZnppbG5rLWlubGluZUJsb2NrXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmlubGluZS1ibG9jaztsYWJlbDppbmxpbmVCbG9jaztcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE0YWNldXktYmxvY2tcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6YmxvY2s7bGFiZWw6YmxvY2s7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTRhY2V1eS1ibG9ja1wiLFxuICBzdHlsZXM6IFwiZGlzcGxheTpibG9jaztsYWJlbDpibG9jaztcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFzM2kzcDUtZXVpVG9vbFRpcEFuY2hvclwiLFxuICBzdHlsZXM6IFwiKltkaXNhYmxlZF17cG9pbnRlci1ldmVudHM6bm9uZTt9O2xhYmVsOmV1aVRvb2xUaXBBbmNob3I7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXMzaTNwNS1ldWlUb29sVGlwQW5jaG9yXCIsXG4gIHN0eWxlczogXCIqW2Rpc2FibGVkXXtwb2ludGVyLWV2ZW50czpub25lO307bGFiZWw6ZXVpVG9vbFRpcEFuY2hvcjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlUb29sVGlwQW5jaG9yU3R5bGVzID0gZnVuY3Rpb24gZXVpVG9vbFRpcEFuY2hvclN0eWxlcygpIHtcbiAgcmV0dXJuIHtcbiAgICAvLyBFbGVtZW50c1xuICAgIGV1aVRvb2xUaXBBbmNob3I6IF9yZWYzLFxuICAgIC8vIFZhcmlhbnRzXG4gICAgYmxvY2s6IF9yZWYyLFxuICAgIGlubGluZUJsb2NrOiBfcmVmXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wib25CbHVyXCIsIFwib25Gb2N1c1wiLCBcIm9uTW91c2VPdmVyXCIsIFwib25Nb3VzZU91dFwiLCBcImlkXCIsIFwiY2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIiwgXCJkaXNwbGF5XCIsIFwiaXNWaXNpYmxlXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBldWlUb29sVGlwQW5jaG9yU3R5bGVzIH0gZnJvbSAnLi90b29sX3RpcC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVG9vbFRpcEFuY2hvciA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9vbkJsdXIgPSBfcmVmLm9uQmx1cixcbiAgICBfb25Gb2N1cyA9IF9yZWYub25Gb2N1cyxcbiAgICBvbk1vdXNlT3ZlciA9IF9yZWYub25Nb3VzZU92ZXIsXG4gICAgb25Nb3VzZU91dCA9IF9yZWYub25Nb3VzZU91dCxcbiAgICBpZCA9IF9yZWYuaWQsXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGRpc3BsYXkgPSBfcmVmLmRpc3BsYXksXG4gICAgaXNWaXNpYmxlID0gX3JlZi5pc1Zpc2libGUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgYW5jaG9yQ3NzID0gZXVpVG9vbFRpcEFuY2hvclN0eWxlcygpO1xuICB2YXIgY3NzU3R5bGVzID0gW2FuY2hvckNzcy5ldWlUb29sVGlwQW5jaG9yLCBhbmNob3JDc3NbZGlzcGxheV1dO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXBBbmNob3InLCBjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9tb3VzZS1ldmVudHMtaGF2ZS1rZXktZXZlbnRzXG4gICAgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiByZWYsXG4gICAgICBjc3M6IGNzc1N0eWxlc1xuICAgIH0sIHJlc3QsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIG9uTW91c2VPdmVyOiBvbk1vdXNlT3ZlcixcbiAgICAgIG9uTW91c2VPdXQ6IG9uTW91c2VPdXRcbiAgICB9KSwgLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgb25Gb2N1czogZnVuY3Rpb24gb25Gb2N1cyhlKSB7XG4gICAgICAgIF9vbkZvY3VzKCk7XG4gICAgICAgIGNoaWxkcmVuLnByb3BzLm9uRm9jdXMgJiYgY2hpbGRyZW4ucHJvcHMub25Gb2N1cyhlKTtcbiAgICAgIH0sXG4gICAgICBvbkJsdXI6IGZ1bmN0aW9uIG9uQmx1cihlKSB7XG4gICAgICAgIF9vbkJsdXIoKTtcbiAgICAgICAgY2hpbGRyZW4ucHJvcHMub25CbHVyICYmIGNoaWxkcmVuLnByb3BzLm9uQmx1cihlKTtcbiAgICAgIH0sXG4gICAgICAnYXJpYS1kZXNjcmliZWRieSc6IGlzVmlzaWJsZSA/IGNsYXNzTmFtZXMoaWQsIGNoaWxkcmVuLnByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J10pIDogY2hpbGRyZW4ucHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXVxuICAgIH0pKVxuICApO1xufSk7XG5FdWlUb29sVGlwQW5jaG9yLnByb3BUeXBlcyA9IHtcbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBpc1Zpc2libGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWRcbn07XG5FdWlUb29sVGlwQW5jaG9yLmRpc3BsYXlOYW1lID0gJ0V1aVRvb2xUaXBBbmNob3InOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wicG9zaXRpb25cIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRvb2xUaXBTdHlsZXMgfSBmcm9tICcuL3Rvb2xfdGlwLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUb29sVGlwQXJyb3cgPSBmdW5jdGlvbiBFdWlUb29sVGlwQXJyb3coX3JlZikge1xuICB2YXIgcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlUb29sVGlwU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVG9vbFRpcF9fYXJyb3csIHN0eWxlcy5hcnJvd1Bvc2l0aW9uc1twb3NpdGlvbl1dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcHJvcHMpKTtcbn07XG5FdWlUb29sVGlwQXJyb3cucHJvcFR5cGVzID0ge1xuICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSkuaXNSZXF1aXJlZFxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLyoqXG4gKiBNYW5hZ2VyIHV0aWxpdHkgdGhhdCBlbnN1cmVzIG9ubHkgb25lIHRvb2x0aXAgaXMgdmlzaWJsZSBhdCBhIHRpbWVcbiAqXG4gKiBVWCByYXRpb25hbGUgKHByaW1hcmlseSBmb3IgbW91c2Utb25seSB1c2Vycyk6XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2tpYmFuYS9pc3N1ZXMvMTQ0NDgyXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvNTg4M1xuICovXG52YXIgVG9vbFRpcE1hbmFnZXIgPSAvKiNfX1BVUkVfXyovX2NyZWF0ZUNsYXNzKGZ1bmN0aW9uIFRvb2xUaXBNYW5hZ2VyKCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVG9vbFRpcE1hbmFnZXIpO1xuICAvLyBXZSB1c2UgYSBzZXQgaW5zdGVhZCBvZiBhIHNpbmdsZSB2YXIganVzdCBpbiBjYXNlXG4gIC8vIG11bHRpcGxlIHRvb2x0aXBzIGFyZSByZWdpc3RlcmVkIHZpYSBhc3luYyBzaGVuYW5pZ2Fuc1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ0b29sVGlwc1RvSGlkZVwiLCBuZXcgU2V0KCkpO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJyZWdpc3RlclRvb2x0aXBcIiwgZnVuY3Rpb24gKGhpZGVDYWxsYmFjaykge1xuICAgIF90aGlzLnRvb2xUaXBzVG9IaWRlLmZvckVhY2goZnVuY3Rpb24gKGhpZGUpIHtcbiAgICAgIHJldHVybiBoaWRlKCk7XG4gICAgfSk7XG4gICAgX3RoaXMudG9vbFRpcHNUb0hpZGUuY2xlYXIoKTtcbiAgICBfdGhpcy50b29sVGlwc1RvSGlkZS5hZGQoaGlkZUNhbGxiYWNrKTtcbiAgfSk7XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImRlcmVnaXN0ZXJUb29sVGlwXCIsIGZ1bmN0aW9uIChoaWRlQ2FsbGJhY2spIHtcbiAgICBfdGhpcy50b29sVGlwc1RvSGlkZS5kZWxldGUoaGlkZUNhbGxiYWNrKTtcbiAgfSk7XG59KTtcbmV4cG9ydCB2YXIgdG9vbFRpcE1hbmFnZXIgPSBuZXcgVG9vbFRpcE1hbmFnZXIoKTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJhcmlhLWxhYmVsXCIsIFwiY29sb3JcIiwgXCJzaXplXCIsIFwiaWNvblByb3BzXCIsIFwicG9zaXRpb25cIiwgXCJkZWxheVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuL3Rvb2xfdGlwJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUljb25UaXAgPSBmdW5jdGlvbiBFdWlJY29uVGlwKF9yZWYpIHtcbiAgdmFyIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAncXVlc3Rpb25JbkNpcmNsZScgOiBfcmVmJHR5cGUsXG4gICAgYXJpYUxhYmVsID0gX3JlZlsnYXJpYS1sYWJlbCddLFxuICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBzaXplID0gX3JlZi5zaXplLFxuICAgIGljb25Qcm9wcyA9IF9yZWYuaWNvblByb3BzLFxuICAgIF9yZWYkcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgIHBvc2l0aW9uID0gX3JlZiRwb3NpdGlvbiA9PT0gdm9pZCAwID8gJ3RvcCcgOiBfcmVmJHBvc2l0aW9uLFxuICAgIF9yZWYkZGVsYXkgPSBfcmVmLmRlbGF5LFxuICAgIGRlbGF5ID0gX3JlZiRkZWxheSA9PT0gdm9pZCAwID8gJ3JlZ3VsYXInIDogX3JlZiRkZWxheSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBkZWZhdWx0QXJpYUxhYmVsID0gdXNlRXVpSTE4bignZXVpSWNvblRpcC5kZWZhdWx0QXJpYUxhYmVsJywgJ0luZm8nKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwgX2V4dGVuZHMoe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBkZWxheTogZGVsYXlcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwgX2V4dGVuZHMoe1xuICAgIHRhYkluZGV4OiAwLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgY29sb3I6IGNvbG9yLFxuICAgIHNpemU6IHNpemUsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCB8fCBkZWZhdWx0QXJpYUxhYmVsXG4gIH0sIGljb25Qcm9wcykpKTtcbn07XG5FdWlJY29uVGlwLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHNwYW4gd3JhcHBpbmcgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGFuY2hvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHNwYW4gd3JhcHBpbmcgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGFuY2hvclByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgdG9vbHRpcCBpdHNlbGYsIG5vdCB0aGUgdHJpZ2dlci5cbiAgICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBUaGUgbWFpbiBjb250ZW50IG9mIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgY29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIENvbW1vbiBkaXNwbGF5IGFsdGVybmF0aXZlcyBmb3IgdGhlIGFuY2hvciB3cmFwcGVyXG4gICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIHRpdGxlIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogVW5sZXNzIHlvdSBwcm92aWRlIG9uZSwgdGhpcyB3aWxsIGJlIHJhbmRvbWx5IGdlbmVyYXRlZC5cbiAgICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFdoZW4gYHRydWVgLCB0aGUgdG9vbHRpcCdzIHBvc2l0aW9uIGlzIHJlLWNhbGN1bGF0ZWQgd2hlbiB0aGUgdXNlclxuICAgICAqIHNjcm9sbHMuIFRoaXMgc3VwcG9ydHMgaGF2aW5nIGZpeGVkLXBvc2l0aW9uIHRvb2x0aXAgYW5jaG9ycy5cbiAgICAgKlxuICAgICAqIFdoZW4gbmVzdGluZyBhbiBgRXVpVG9vbHRpcGAgaW4gYSBzY3JvbGxhYmxlIGNvbnRhaW5lciwgYHJlcG9zaXRpb25PblNjcm9sbGAgc2hvdWxkIGJlIGB0cnVlYFxuICAgICAqL1xuICByZXBvc2l0aW9uT25TY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBJZiBzdXBwbGllZCwgY2FsbGVkIHdoZW4gbW91c2UgbW92ZW1lbnQgY2F1c2VzIHRoZSB0b29sIHRpcCB0byBiZVxuICAgICAqIGhpZGRlbi5cbiAgICAgKi9cbiAgb25Nb3VzZU91dDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIEV4cGxhaW4gd2hhdCB0aGlzIGljb24gbWVhbnMgZm9yIHNjcmVlbiByZWFkZXJzLlxuICAgICAqL1xuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFRoZSBpY29uIGNvbG9yLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogVGhlIGljb24gdHlwZS5cbiAgICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogVGhlIGljb24gc2l6ZS5cbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogUGFzcyBjZXJ0YWluIHByb3BzIGRvd24gdG8gYEV1aUljb25gXG4gICAgICovXG4gIC8vIEV1aUljb25UaXAncyBgdHlwZWAgaXMgcGFzc2VkIHRvIEV1aUljb24sIHNvIHdlIHdhbnQgdG8gZXhjbHVkZSBgdHlwZWAgZnJvbVxuICAvLyBpY29uUHJvcHM7IGhvd2V2ZXIsIGR1ZSB0byBUUydzIGJpdmFyaWFudCBmdW5jdGlvbiBhcmd1bWVudHMgYHR5cGVgIGNvdWxkIGJlXG4gIC8vIHBhc3NlZCB3aXRob3V0IGFueSBlcnJvci9mZWVkYmFjayBzbyB3ZSBleHBsaWNpdGx5IHNldCBpdCB0byBgbmV2ZXJgIHR5cGVcbiAgaWNvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAvLyBUaGlzIGFyZSBjb3BpZWQgZnJvbSBFdWlUb29sVGlwUHJvcHMsIGJ1dCBtYWRlIG9wdGlvbmFsLiBEZWZhdWx0c1xuICAvLyBhcmUgYXBwbGllZCBiZWxvdy5cbiAgZGVsYXk6IFByb3BUeXBlcy5hbnksXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY29tcG9uZW50XCIsIFwic2l6ZVwiLCBcImNvbG9yXCIsIFwiZ3Jvd1wiLCBcInRleHRBbGlnblwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVRleHRDb2xvciB9IGZyb20gJy4vdGV4dF9jb2xvcic7XG5pbXBvcnQgeyBFdWlUZXh0QWxpZ24gfSBmcm9tICcuL3RleHRfYWxpZ24nO1xuaW1wb3J0IHsgZXVpVGV4dFN0eWxlcyB9IGZyb20gJy4vdGV4dC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgVEVYVF9TSVpFUyA9IFsneHMnLCAncycsICdtJywgJ3JlbGF0aXZlJ107XG5leHBvcnQgdmFyIEV1aVRleHQgPSBmdW5jdGlvbiBFdWlUZXh0KF9yZWYpIHtcbiAgdmFyIF9yZWYkY29tcG9uZW50ID0gX3JlZi5jb21wb25lbnQsXG4gICAgY29tcG9uZW50ID0gX3JlZiRjb21wb25lbnQgPT09IHZvaWQgMCA/ICdkaXYnIDogX3JlZiRjb21wb25lbnQsXG4gICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgX3JlZiRncm93ID0gX3JlZi5ncm93LFxuICAgIGdyb3cgPSBfcmVmJGdyb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGdyb3csXG4gICAgdGV4dEFsaWduID0gX3JlZi50ZXh0QWxpZ24sXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRleHRTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUZXh0LCAhZ3JvdyA/IHN0eWxlcy5jb25zdHJhaW5lZFdpZHRoIDogdW5kZWZpbmVkLCBzdHlsZXNbc2l6ZV1dO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRleHQnLCBjbGFzc05hbWUpO1xuICB2YXIgQ29tcG9uZW50ID0gY29tcG9uZW50O1xuICB2YXIgdGV4dCA9IF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIGlmIChjb2xvcikge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aVRleHRDb2xvciwge1xuICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgICBjb2xvcjogY29sb3IsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBjbG9uZUVsZW1lbnQ6IHRydWVcbiAgICB9LCB0ZXh0KTtcbiAgfVxuICBpZiAodGV4dEFsaWduKSB7XG4gICAgdGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpVGV4dEFsaWduLCB7XG4gICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICAgIHRleHRBbGlnbjogdGV4dEFsaWduLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY2xvbmVFbGVtZW50OiB0cnVlXG4gICAgfSwgdGV4dCk7XG4gIH1cbiAgcmV0dXJuIHRleHQ7XG59O1xuRXVpVGV4dC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFRoZSBIVE1MIGVsZW1lbnQvdGFnIHRvIHJlbmRlci5cbiAgICAgICAqIFVzZSB3aXRoIGNhcmUgd2hlbiBuZXN0aW5nIG11bHRpcGxlIGNvbXBvbmVudHMgdG8gZW5zdXJlIHZhbGlkIFhIVE1MOlxuICAgICAgICogLSBgPGRpdj5gIGFuZCBvdGhlciBibG9jayB0YWdzIGFyZSBub3QgdmFsaWQgdG8gdXNlIGluc2lkZSBgPHA+YC4gSWYgdXNpbmcgdGhlIGA8cD5gIHRhZywgd2UgcmVjb21tZW5kIHBhc3Npbmcgc3RyaW5ncy90ZXh0IG9ubHkuXG4gICAgICAgKiAtIGA8c3Bhbj5gIGlzIHZhbGlkIHRvIGJlIG5lc3RlZCBpbiBhbnkgdGFnLCBhbmQgY2FuIGhhdmUgYW55IHRhZyBuZXN0ZWQgd2l0aGluIGl0LlxuICAgICAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLm9uZU9mKFtcImRpdlwiLCBcInNwYW5cIiwgXCJwXCJdKSxcbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMgb3IgYSBgaGV4YCwgYHJnYmAgb3IgYHJnYmFgIHZhbHVlLlxuICAgICAqIEBkZWZhdWx0IGluaGVyaXRcbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgaG9yaXpvbnRhbCB0ZXh0IGFsaWdubWVudFxuICAgICAqIEBkZWZhdWx0IGxlZnRcbiAgICAgKi9cbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIERldGVybWluZXMgdGhlIHRleHQgc2l6ZS4gQ2hvb3NlIGByZWxhdGl2ZWAgdG8gY29udHJvbCB0aGUgYGZvbnQtc2l6ZWAgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGEgcGFyZW50IGNvbnRhaW5lci5cbiAgICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICBncm93OiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJjbG9uZUVsZW1lbnRcIiwgXCJzdHlsZVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMsIGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlUZXh0Q29sb3JTdHlsZXMgfSBmcm9tICcuL3RleHRfY29sb3Iuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIENPTE9SUyA9IFsnZGVmYXVsdCcsICdzdWJkdWVkJywgJ3N1Y2Nlc3MnLCAnYWNjZW50JywgJ2RhbmdlcicsICd3YXJuaW5nJywgJ2dob3N0JywgJ2luaGVyaXQnXTtcbmV4cG9ydCB2YXIgX2lzTmFtZWRDb2xvciA9IGZ1bmN0aW9uIF9pc05hbWVkQ29sb3IoY29sb3IpIHtcbiAgcmV0dXJuIENPTE9SUy5pbmNsdWRlcyhjb2xvcik7XG59O1xuZXhwb3J0IHZhciBFdWlUZXh0Q29sb3IgPSBmdW5jdGlvbiBFdWlUZXh0Q29sb3IoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2RlZmF1bHQnIDogX3JlZiRjb2xvcixcbiAgICBfcmVmJGNvbXBvbmVudCA9IF9yZWYuY29tcG9uZW50LFxuICAgIENvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnc3BhbicgOiBfcmVmJGNvbXBvbmVudCxcbiAgICBfcmVmJGNsb25lRWxlbWVudCA9IF9yZWYuY2xvbmVFbGVtZW50LFxuICAgIGNsb25lRWxlbWVudCA9IF9yZWYkY2xvbmVFbGVtZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2xvbmVFbGVtZW50LFxuICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc05hbWVkQ29sb3IgPSBfaXNOYW1lZENvbG9yKGNvbG9yKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRleHRDb2xvclN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRleHRDb2xvciwgaXNOYW1lZENvbG9yID8gc3R5bGVzW2NvbG9yXSA6IHN0eWxlcy5jdXN0b21Db2xvcl07XG5cbiAgLy8gV2UncmUgY2hlY2tpbmcgaWYgaXMgYSBjdXN0b20gY29sb3IuXG4gIC8vIElmIGl0IGlzIGEgY3VzdG9tIGNvbG9yIHdlIHNldCB0aGUgYGNvbG9yYCBvZiB0aGUgYC5ldWlUZXh0Q29sb3JgIGRpdiB0byB0aGF0IGN1c3RvbSBjb2xvci5cbiAgLy8gVGhpcyB3YXkgdGhlIGNoaWxkcmVuIHRleHQgZWxlbWVudHMgY2FuIGBpbmhlcml0YCB0aGF0IGNvbG9yIGFuZCBib3JkZXIgYW5kIGJhY2tncm91bmRzIGNhbiBnZXQgdGhhdCBgY3VycmVudENvbG9yYC5cbiAgdmFyIGV1aVRleHRTdHlsZSA9ICFpc05hbWVkQ29sb3IgPyBfb2JqZWN0U3ByZWFkKHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSwgc3R5bGUpIDogX29iamVjdFNwcmVhZCh7fSwgc3R5bGUpO1xuICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBzdHlsZTogZXVpVGV4dFN0eWxlXG4gIH0sIHJlc3QpO1xuICBpZiAoIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiYgY2xvbmVFbGVtZW50KSB7XG4gICAgdmFyIGNoaWxkcmVuU3R5bGUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNoaWxkcmVuLnByb3BzLnN0eWxlKSwgZXVpVGV4dFN0eWxlKTtcbiAgICByZXR1cm4gY2xvbmVFbGVtZW50V2l0aENzcyhjaGlsZHJlbiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICBzdHlsZTogY2hpbGRyZW5TdHlsZVxuICAgIH0pKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbik7XG4gIH1cbn07XG5FdWlUZXh0Q29sb3IucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBUaGUgSFRNTCBlbGVtZW50L3RhZyB0byByZW5kZXIuXG4gICAgICAgKiBVc2Ugd2l0aCBjYXJlIHdoZW4gbmVzdGluZyBtdWx0aXBsZSBjb21wb25lbnRzIHRvIGVuc3VyZSB2YWxpZCBYSFRNTDpcbiAgICAgICAqIC0gYDxkaXY+YCBhbmQgb3RoZXIgYmxvY2sgdGFncyBhcmUgbm90IHZhbGlkIHRvIHVzZSBpbnNpZGUgYDxwPmAuIElmIHVzaW5nIHRoZSBgPHA+YCB0YWcsIHdlIHJlY29tbWVuZCBwYXNzaW5nIHN0cmluZ3MvdGV4dCBvbmx5LlxuICAgICAgICogLSBgPHNwYW4+YCBpcyB2YWxpZCB0byBiZSBuZXN0ZWQgaW4gYW55IHRhZywgYW5kIGNhbiBoYXZlIGFueSB0YWcgbmVzdGVkIHdpdGhpbiBpdC5cbiAgICAgICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIiwgXCJzcGFuXCIsIFwicFwiXSksXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGV4dCBzdHlsaW5nIHRvIHRoZSBjaGlsZCBlbGVtZW50IGluc3RlYWQgb2YgcmVuZGVyaW5nIGEgcGFyZW50IHdyYXBwZXIuXG4gICAgICogQ2FuIG9ubHkgYmUgdXNlZCB3aGVuIHdyYXBwaW5nIGEgKnNpbmdsZSogY2hpbGQgZWxlbWVudC90YWcsIGFuZCBub3QgcmF3IHRleHQuXG4gICAgICovXG4gIGNsb25lRWxlbWVudDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzIG9yIGEgYGhleGAsIGByZ2JgIG9yIGByZ2JhYCB2YWx1ZS5cbiAgICAgKiBAZGVmYXVsdCBpbmhlcml0XG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJ1YWNqYzUtaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiY29sb3I6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiXG59IDoge1xuICBuYW1lOiBcInVhY2pjNS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJjb2xvcjppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpVGV4dENvbG9yU3R5bGVzID0gZnVuY3Rpb24gZXVpVGV4dENvbG9yU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVRleHRDb2xvcjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlUZXh0Q29sb3I7XCIpLFxuICAgIGRlZmF1bHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiOztsYWJlbDpkZWZhdWx0O1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWJkdWVkVGV4dCwgXCI7O2xhYmVsOnN1YmR1ZWQ7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0LCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0LCBcIjs7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhbmdlclRleHQsIFwiOztsYWJlbDpkYW5nZXI7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLndhcm5pbmdUZXh0LCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgZ2hvc3Q6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmdob3N0LCBcIiFpbXBvcnRhbnQ7O2xhYmVsOmdob3N0O1wiKSxcbiAgICBpbmhlcml0OiBfcmVmLFxuICAgIGN1c3RvbUNvbG9yOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmN1c3RvbUNvbG9yO1wiKSAvLyBIYW5kbGVkIGJ5IGBzdHlsZWAgdGFnIC0gdGhpcyBpcyBqdXN0IGhlcmUgZm9yIGEgY2xhc3NOYW1lIGhvb2tcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbXBvbmVudFwiLCBcInRleHRBbGlnblwiLCBcImNsb25lRWxlbWVudFwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRleHRBbGlnblN0eWxlcyBhcyBzdHlsZXMgfSBmcm9tICcuL3RleHRfYWxpZ24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEFMSUdOTUVOVFMgPSBbJ2xlZnQnLCAncmlnaHQnLCAnY2VudGVyJ107XG5leHBvcnQgdmFyIEV1aVRleHRBbGlnbiA9IGZ1bmN0aW9uIEV1aVRleHRBbGlnbihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICBDb21wb25lbnQgPSBfcmVmJGNvbXBvbmVudCA9PT0gdm9pZCAwID8gJ2RpdicgOiBfcmVmJGNvbXBvbmVudCxcbiAgICBfcmVmJHRleHRBbGlnbiA9IF9yZWYudGV4dEFsaWduLFxuICAgIHRleHRBbGlnbiA9IF9yZWYkdGV4dEFsaWduID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmJHRleHRBbGlnbixcbiAgICBfcmVmJGNsb25lRWxlbWVudCA9IF9yZWYuY2xvbmVFbGVtZW50LFxuICAgIGNsb25lRWxlbWVudCA9IF9yZWYkY2xvbmVFbGVtZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2xvbmVFbGVtZW50LFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dEFsaWduLCBzdHlsZXNbdGV4dEFsaWduXV07XG4gIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpO1xuICBpZiAoIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiYgY2xvbmVFbGVtZW50KSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudFdpdGhDc3MoY2hpbGRyZW4sIHByb3BzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbik7XG4gIH1cbn07XG5FdWlUZXh0QWxpZ24ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBUaGUgSFRNTCBlbGVtZW50L3RhZyB0byByZW5kZXIuXG4gICAgICAgKiBVc2Ugd2l0aCBjYXJlIHdoZW4gbmVzdGluZyBtdWx0aXBsZSBjb21wb25lbnRzIHRvIGVuc3VyZSB2YWxpZCBYSFRNTDpcbiAgICAgICAqIC0gYDxkaXY+YCBhbmQgb3RoZXIgYmxvY2sgdGFncyBhcmUgbm90IHZhbGlkIHRvIHVzZSBpbnNpZGUgYDxwPmAuIElmIHVzaW5nIHRoZSBgPHA+YCB0YWcsIHdlIHJlY29tbWVuZCBwYXNzaW5nIHN0cmluZ3MvdGV4dCBvbmx5LlxuICAgICAgICogLSBgPHNwYW4+YCBpcyB2YWxpZCB0byBiZSBuZXN0ZWQgaW4gYW55IHRhZywgYW5kIGNhbiBoYXZlIGFueSB0YWcgbmVzdGVkIHdpdGhpbiBpdC5cbiAgICAgICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIiwgXCJzcGFuXCIsIFwicFwiXSksXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGV4dCBzdHlsaW5nIHRvIHRoZSBjaGlsZCBlbGVtZW50IGluc3RlYWQgb2YgcmVuZGVyaW5nIGEgcGFyZW50IHdyYXBwZXIuXG4gICAgICogQ2FuIG9ubHkgYmUgdXNlZCB3aGVuIHdyYXBwaW5nIGEgKnNpbmdsZSogY2hpbGQgZWxlbWVudC90YWcsIGFuZCBub3QgcmF3IHRleHQuXG4gICAgICovXG4gIGNsb25lRWxlbWVudDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgaG9yaXpvbnRhbCB0ZXh0IGFsaWdubWVudFxuICAgICAqIEBkZWZhdWx0IGxlZnRcbiAgICAgKi9cbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMuYW55XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlUZXh0QWxpZ25TdHlsZXMgPSB7XG4gIGV1aVRleHRBbGlnbjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlUZXh0QWxpZ247XCIpLFxuICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCI7O2xhYmVsOmxlZnQ7XCIpLFxuICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdyaWdodCcpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpLFxuICBjZW50ZXI6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiOztsYWJlbDpjZW50ZXI7XCIpXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUxpbmtDU1MgPSBmdW5jdGlvbiBldWlMaW5rQ1NTKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiBcIlxcbiAgICBmb250LXdlaWdodDogXCIuY29uY2F0KGV1aVRoZW1lLmZvbnQud2VpZ2h0Lm1lZGl1bSwgXCI7XFxuICAgIFwiKS5jb25jYXQobG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIlxcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG4gICAgfVxcblxcbiAgICAmOmZvY3VzIHtcXG4gICAgICBcIikuY29uY2F0KGV1aUZvY3VzUmluZyhldWlUaGVtZUNvbnRleHQsICdvdXRzZXQnKSwgXCJcXG4gICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG4gICAgICB0ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzOiBcIikuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGljaywgXCI7XFxuICAgIH1cXG4gIFwiKTtcbn07XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI5bmpiaTUtZGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImZvbnQtd2VpZ2h0OmluaGVyaXQ7Jjpob3ZlcntjdXJzb3I6YXV0bzt9Jjpob3ZlciwmOmZvY3VzLCY6dGFyZ2V0e3RleHQtZGVjb3JhdGlvbjpub25lO307bGFiZWw6ZGlzYWJsZWQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiOW5qYmk1LWRpc2FibGVkXCIsXG4gIHN0eWxlczogXCJmb250LXdlaWdodDppbmhlcml0OyY6aG92ZXJ7Y3Vyc29yOmF1dG87fSY6aG92ZXIsJjpmb2N1cywmOnRhcmdldHt0ZXh0LWRlY29yYXRpb246bm9uZTt9O2xhYmVsOmRpc2FibGVkO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUxpbmtTdHlsZXMgPSBmdW5jdGlvbiBldWlMaW5rU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpTGluazogLyojX19QVVJFX18qL2NzcyhldWlMaW5rQ1NTKGV1aVRoZW1lQ29udGV4dCksIFwiIHVzZXItc2VsZWN0OnRleHQ7Jlt0YXJnZXQ9J19ibGFuaydde3Bvc2l0aW9uOnJlbGF0aXZlO307bGFiZWw6ZXVpTGluaztcIiksXG4gICAgZGlzYWJsZWQ6IF9yZWYsXG4gICAgLy8gQ29sb3Igc3R5bGVzXG4gICAgcHJpbWFyeTogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLnByaW1hcnlUZXh0KSwgXCI7bGFiZWw6cHJpbWFyeTtcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLnN1YmR1ZWRUZXh0KSwgXCI7bGFiZWw6c3ViZHVlZDtcIiksXG4gICAgc3VjY2VzczogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0KSwgXCI7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuYWNjZW50VGV4dCksIFwiO2xhYmVsOmFjY2VudDtcIiksXG4gICAgZGFuZ2VyOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuZGFuZ2VyVGV4dCksIFwiO2xhYmVsOmRhbmdlcjtcIiksXG4gICAgd2FybmluZzogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLndhcm5pbmdUZXh0KSwgXCI7bGFiZWw6d2FybmluZztcIiksXG4gICAgZ2hvc3Q6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5naG9zdCksIFwiO2xhYmVsOmdob3N0O1wiKSxcbiAgICB0ZXh0OiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMudGV4dCksIFwiO2xhYmVsOnRleHQ7XCIpXG4gIH07XG59O1xudmFyIF9jb2xvckNTUyA9IGZ1bmN0aW9uIF9jb2xvckNTUyhjb2xvcikge1xuICByZXR1cm4gXCJcXG4gICAgY29sb3I6IFwiLmNvbmNhdChjb2xvciwgXCI7XFxuXFxuICAgICY6dGFyZ2V0IHtcXG4gICAgICBjb2xvcjogZGFya2VuKFwiKS5jb25jYXQoY29sb3IsIFwiLCAxMCUpO1xcbiAgICB9XFxuICBcIik7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aVRleHRCcmVha1dvcmQsIGV1aUZvbnRTaXplLCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG4vKipcbiAqIE1peGluXG4gKi9cblxuZXhwb3J0IHZhciBldWlUaXRsZSA9IGZ1bmN0aW9uIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgc2NhbGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdtJztcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgdGl0bGVTY2FsZVRvRm9udFNpemVTY2FsZU1hcCA9IHtcbiAgICB4eHhzOiAneHMnLFxuICAgIHh4czogJ3MnLFxuICAgIHhzOiAnbScsXG4gICAgczogJ2wnLFxuICAgIG06ICd4bCcsXG4gICAgbDogJ3h4bCdcbiAgfTtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCB0aXRsZVNjYWxlVG9Gb250U2l6ZVNjYWxlTWFwW3NjYWxlXSwgb3B0aW9ucykpLCB7fSwge1xuICAgIGZvbnRXZWlnaHQ6IGV1aVRoZW1lLmZvbnQud2VpZ2h0W2V1aVRoZW1lLmZvbnQudGl0bGUud2VpZ2h0XSxcbiAgICBjb2xvcjogZXVpVGhlbWUuY29sb3JzLnRpdGxlXG4gIH0pO1xufTtcblxuLyoqXG4gKiBTdHlsZXNcbiAqL1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXgycXNiMS11cHBlcmNhc2VcIixcbiAgc3R5bGVzOiBcInRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsYWJlbDp1cHBlcmNhc2U7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXgycXNiMS11cHBlcmNhc2VcIixcbiAgc3R5bGVzOiBcInRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsYWJlbDp1cHBlcmNhc2U7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpVGl0bGVTdHlsZXMgPSBmdW5jdGlvbiBldWlUaXRsZVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIHtcbiAgICBldWlUaXRsZTogLyojX19QVVJFX18qL2NzcyhldWlUZXh0QnJlYWtXb3JkKCksIFwiICYrJntcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZS5zaXplLmwpLCBcIjt9O2xhYmVsOmV1aVRpdGxlO1wiKSxcbiAgICB1cHBlcmNhc2U6IF9yZWYsXG4gICAgLy8gU2l6ZXNcbiAgICB4eHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4eHMnKSwgXCI7O2xhYmVsOnh4eHM7XCIpLFxuICAgIHh4czogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHMnKSwgXCI7O2xhYmVsOnh4cztcIiksXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdsJyksIFwiOztsYWJlbDpsO1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbFNob3J0aGFuZENTUywgbG9naWNhbFRleHRBbGlnbkNTUywgZXVpRm9udFNpemUsIGV1aUJhY2tncm91bmRDb2xvciwgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aUxpbmtDU1MgfSBmcm9tICcuLi9saW5rL2xpbmsuc3R5bGVzJztcbmltcG9ydCB7IGV1aVRpdGxlIH0gZnJvbSAnLi4vdGl0bGUvdGl0bGUuc3R5bGVzJztcblxuLyoqXG4gKiBUT0RPOiBNYWtlIHRoaXMgYSBnbG9iYWwgdmFsdWUgc28gaXQgY2FuIGJlIHNldCBieSB0aGVtZT9cbiAqL1xuZXhwb3J0IHZhciBldWlUZXh0Q29uc3RyYWluZWRNYXhXaWR0aCA9ICdtYXgoNjRjaCwgNzUlKSc7XG5cbi8qKlxuICogTWl4aW5zXG4gKi9cbmV4cG9ydCB2YXIgZXVpVGV4dCA9IGZ1bmN0aW9uIGV1aVRleHQoZXVpVGhlbWUpIHtcbiAgdmFyIGluaGVyaXRDb2xvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gIHJldHVybiB7XG4gICAgY29sb3I6IGluaGVyaXRDb2xvciA/ICdpbmhlcml0JyA6IGV1aVRoZW1lLmNvbG9ycy50ZXh0LFxuICAgIGZvbnRXZWlnaHQ6IGV1aVRoZW1lLmZvbnQud2VpZ2h0LnJlZ3VsYXJcbiAgfTtcbn07XG5cbi8vIEludGVybmFsIHV0aWxpdHkgZm9yIEV1aVRleHQgc2NhbGVzL3NpemVzXG52YXIgZXVpU2NhbGVUZXh0ID0gZnVuY3Rpb24gZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwgb3B0aW9ucykge1xuICB2YXIgX2V1aUZvbnRTaXplID0gZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAnbScsIG9wdGlvbnMpLFxuICAgIGZvbnRTaXplID0gX2V1aUZvbnRTaXplLmZvbnRTaXplLFxuICAgIGxpbmVIZWlnaHQgPSBfZXVpRm9udFNpemUubGluZUhlaWdodDtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgdW5pdCA9IG9wdGlvbnMudW5pdCxcbiAgICBfY3VzdG9tU2NhbGUgPSBvcHRpb25zLmN1c3RvbVNjYWxlO1xuICB2YXIgbGluZUhlaWdodFNpemUgPSB1bml0ID09PSAnZW0nID8gXCJcIi5jb25jYXQobGluZUhlaWdodCwgXCJlbVwiKSA6IGxpbmVIZWlnaHQ7XG4gIHZhciBoZWFkaW5ncyA9IHtcbiAgICBoMTogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcsIG9wdGlvbnMpLFxuICAgIGgyOiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdtJywgb3B0aW9ucyksXG4gICAgaDM6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3MnLCBvcHRpb25zKSxcbiAgICBoNDogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHMnLCBvcHRpb25zKSxcbiAgICBoNTogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJywgb3B0aW9ucyksXG4gICAgaDY6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4eHMnLCBvcHRpb25zKVxuICB9O1xuICAvLyBHZW5lcmF0ZSBtYXJnaW5zIGZvciBoZWFkaW5ncyBiYXNlZCBvbiBjdXN0b21TY2FsZSAobm90IG9uIGhlYWRpbmcgbGV2ZWwpXG4gIHZhciBjdXN0b21TY2FsZSA9IF9jdXN0b21TY2FsZSA9PT0gJ3h4eHMnID8gJ3h4cycgOiBfY3VzdG9tU2NhbGUgfHwgJ20nO1xuICB2YXIgbWFyZ2luU2l6ZSA9IGV1aVRoZW1lLnNpemVbY3VzdG9tU2NhbGVdO1xuICB2YXIgaGVhZGluZ01hcmdpblRvcCA9IG1hdGhXaXRoVW5pdHMobWFyZ2luU2l6ZSwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4geCAqIDI7XG4gIH0pO1xuICB2YXIgaGVhZGluZ01hcmdpbkJvdHRvbSA9IG1hcmdpblNpemU7XG4gIHZhciBibG9ja1F1b3RlQm9yZGVyV2lkdGggPSBtYXRoV2l0aFVuaXRzKGZvbnRTaXplLCBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB4IC8gNDtcbiAgfSk7XG4gIHJldHVybiBcIlxcbiAgICBmb250LXNpemU6IFwiLmNvbmNhdChmb250U2l6ZSwgXCI7XFxuICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICBoMSB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmgxLmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oMS5saW5lSGVpZ2h0LCBcIjtcXG4gICAgfVxcbiAgICBoMTpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgfVxcblxcbiAgICBoMiB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmgyLmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oMi5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGgzIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDMuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmgzLmxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGVhZGluZ01hcmdpblRvcCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgaDQge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oNC5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDQubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoNSB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmg1LmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oNS5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGg2IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDYuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmg2LmxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGVhZGluZ01hcmdpblRvcCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgcCxcXG4gICAgZGwsXFxuICAgIGJsb2NrcXVvdGUsXFxuICAgIHByZSxcXG4gICAgPiB1bCxcXG4gICAgPiBvbCB7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgbGluZUhlaWdodFNpemUpLCBcIlxcbiAgICB9XFxuXFxuICAgIHVsLFxcbiAgICBvbCB7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tbGVmdCcsIGxpbmVIZWlnaHRTaXplKSwgXCJcXG4gICAgfVxcblxcbiAgICAvKiBUaGUgc3R5bGVzIG9mIHRoZSBuZXN0ZWQgb3JkZXJlZCBsaXN0cyBmb2xsb3cgdGhlIHN0eWxlIG9mIEdpdEh1YlxcbiAgICAgICB3aGljaCBpcyBjb21tb25seSB1c2VkIGluIE1hcmtkb3duIG9yIE1EWCBmb3JtYXR0aW5nLiAqL1xcbiAgICBvbCBvbCxcXG4gICAgdWwgb2wge1xcbiAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbG93ZXItcm9tYW47XFxuICAgIH1cXG5cXG4gICAgdWwgdWwgb2wsXFxuICAgIHVsIG9sIG9sLFxcbiAgICBvbCB1bCBvbCxcXG4gICAgb2wgb2wgb2wge1xcbiAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbG93ZXItYWxwaGE7XFxuICAgIH1cXG4gIFxcbiAgICBibG9ja3F1b3RlIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbFNob3J0aGFuZENTUygncGFkZGluZycsIFwiMCBcIi5jb25jYXQoZm9udFNpemUpKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2JvcmRlci1sZWZ0LXdpZHRoJywgYmxvY2tRdW90ZUJvcmRlcldpZHRoKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBmb250U2l6ZSksIFwiXFxuICAgIH1cXG5cXG4gICAgZGQgKyBkdCB7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgZm9udFNpemUpLCBcIlxcbiAgICB9XFxuXFxuICAgIGR0LFxcbiAgICAuZXVpLWRlZmluaXRpb25MaXN0UmV2ZXJzZSBkZCB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChsaW5lSGVpZ2h0LCBcIjtcXG4gICAgfVxcblxcbiAgICAuZXVpLWRlZmluaXRpb25MaXN0UmV2ZXJzZSBkdCB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJywgb3B0aW9ucykuZm9udFNpemUsIFwiO1xcbiAgICAgIGNvbG9yOiBcIikuY29uY2F0KGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjtcXG4gICAgfVxcblxcbiAgICBzbWFsbCB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnLCBvcHRpb25zKS5mb250U2l6ZSwgXCI7XFxuICAgIH1cXG5cXG4gICAgcHJlOm5vdCguZXVpQ29kZUJsb2NrX19wcmUpIHtcXG4gICAgICBwYWRkaW5nOiBcIikuY29uY2F0KGxpbmVIZWlnaHRTaXplLCBcIjtcXG4gICAgfVxcblxcbiAgICBjb2RlOm5vdCguZXVpQ29kZSk6bm90KC5ldWlDb2RlQmxvY2tfX2NvZGUpICB7XFxuICAgICAgZm9udC1zaXplOiAuOWVtOyAvKiA5MCUgb2YgcGFyZW50IGZvbnQgc2l6ZSAqL1xcbiAgICB9XFxuICAgIFwiKS5jb25jYXQoXG4gIC8vIHdoZW4gdGV4dFNpemUgaXMgJ20nLCB0aGUgJ2tiZCcgZWxlbWVudCBnZXRzIGEgbGluZSBiZXR3ZWVuIHRoZSB0ZXh0IGFuZCB0aGUgYm9yZGVyLWJvdHRvbVxuICBfY3VzdG9tU2NhbGUgPT09ICdtJyA/IFwiXFxuICAgIGtiZCB7XFxuICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctYm90dG9tJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiXFxuICAgICAgLyogRW5zdXJlcyB0aGUgc2hhcGUgc3RpbGwgbG9va3MgbGlrZSBhIHNxdWFyZSB3aGVuIG9ubHkgb25lIGNoYXJhY3RlciAqL1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWluLXdpZHRoJywgZXVpVGhlbWUuc2l6ZS5sKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIlxcbiAgICB9XFxuICAgIFxcbiAgICBrYmQ6OmFmdGVyIHtcXG4gICAgICBjb250ZW50OiAnJztcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2JvcmRlci1ib3R0b20nLCBcIlwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgc29saWQgXCIpLmNvbmNhdChldWlUaGVtZS5jb2xvcnMudGV4dCkpLCBcIlxcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2JvdHRvbScsIGV1aVRoZW1lLnNpemUueHhzKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2xlZnQnLCAwKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCJcXG4gICAgfVwiKSA6ICcnLCBcIlxcbiAgXCIpO1xufTtcblxuLyoqXG4gKiBTdHlsZXNcbiAqL1xuZXhwb3J0IHZhciBldWlUZXh0U3R5bGVzID0gZnVuY3Rpb24gZXVpVGV4dFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVRleHQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dChldWlUaGVtZSwgdHJ1ZSksIFwiY2xlYXI6Ym90aDthOm5vdChbY2xhc3NdKXtcIiwgZXVpTGlua0NTUyhldWlUaGVtZUNvbnRleHQpLCBcIjt9dWx7bGlzdC1zdHlsZTpkaXNjO31vbHtsaXN0LXN0eWxlOmRlY2ltYWw7fWJsb2NrcXVvdGV7Ym9yZGVyLWlubGluZS1zdGFydC1jb2xvcjpcIiwgZXVpVGhlbWUuYm9yZGVyLmNvbG9yLCBcIjtib3JkZXItaW5saW5lLXN0YXJ0LXN0eWxlOnNvbGlkO31ibG9ja3F1b3RlOm5vdCguZXVpTWFya2Rvd25Gb3JtYXRfX2Jsb2NrcXVvdGUpe2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQsIFwiO31oMXtcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIjt9aDJ7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7fWgze1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiO31oNCxkdHtcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSwgXCI7fWg1e1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHMnKSwgXCI7fWg2e1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJyksIFwiIHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt9aDEsaDIsaDMsaDQsaDUsaDYsZHR7Y29sb3I6aW5oZXJpdDt9cHJlOm5vdCguZXVpQ29kZUJsb2NrX19wcmUpe3doaXRlLXNwYWNlOnByZS13cmFwO2JhY2tncm91bmQ6XCIsIGV1aUJhY2tncm91bmRDb2xvcihldWlUaGVtZUNvbnRleHQsICdzdWJkdWVkJyksIFwiO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7fXByZTpub3QoLmV1aUNvZGVCbG9ja19fcHJlKSxwcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSkgY29kZXtkaXNwbGF5OmJsb2NrO30+Omxhc3QtY2hpbGR7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCAnMCAhaW1wb3J0YW50JyksIFwiO31rYmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBldWlUaGVtZS5zaXplLnh4cyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgbGluZS1oZWlnaHQ6MTtib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO2JvcmRlci1yYWRpdXM6XCIsIG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4IC8gMjtcbiAgICB9KSwgXCI7fTtsYWJlbDpldWlUZXh0O1wiKSxcbiAgICBjb25zdHJhaW5lZFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsIGV1aVRleHRDb25zdHJhaW5lZE1heFdpZHRoKSwgXCI7O2xhYmVsOmNvbnN0cmFpbmVkV2lkdGg7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICBjdXN0b21TY2FsZTogJ20nXG4gICAgfSksIFwiOztsYWJlbDptO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgIGN1c3RvbVNjYWxlOiAncydcbiAgICB9KSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgIGN1c3RvbVNjYWxlOiAneHMnXG4gICAgfSksIFwiOztsYWJlbDp4cztcIiksXG4gICAgcmVsYXRpdmU6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgdW5pdDogJ2VtJ1xuICAgIH0pLCBcIjs7bGFiZWw6cmVsYXRpdmU7XCIpXG4gIH07XG59OyIsICJpbXBvcnQgeyBDb21wb25lbnQsIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogRGV0ZWN0IEVsZW1lbnQgUmVzaXplLlxuICogaHR0cHM6Ly9naXRodWIuY29tL3NkZWNpbWEvamF2YXNjcmlwdC1kZXRlY3QtZWxlbWVudC1yZXNpemVcbiAqIFNlYmFzdGlhbiBEZWNpbWFcbiAqXG4gKiBGb3JrZWQgZnJvbSB2ZXJzaW9uIDAuNS4zOyBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnM6XG4gKiAxKSBHdWFyZCBhZ2FpbnN0IHVuc2FmZSAnd2luZG93JyBhbmQgJ2RvY3VtZW50JyByZWZlcmVuY2VzICh0byBzdXBwb3J0IFNTUikuXG4gKiAyKSBEZWZlciBpbml0aWFsaXphdGlvbiBjb2RlIHZpYSBhIHRvcC1sZXZlbCBmdW5jdGlvbiB3cmFwcGVyICh0byBzdXBwb3J0IFNTUikuXG4gKiAzKSBBdm9pZCB1bm5lY2Vzc2FyeSByZWZsb3dzIGJ5IG5vdCBtZWFzdXJpbmcgc2l6ZSBmb3Igc2Nyb2xsIGV2ZW50cyBidWJibGluZyBmcm9tIGNoaWxkcmVuLlxuICogNCkgQWRkIG5vbmNlIGZvciBzdHlsZSBlbGVtZW50LlxuICogNSkgVXNlICdleHBvcnQnIHN0YXRlbWVudCBvdmVyICdtb2R1bGUuZXhwb3J0cycgYXNzaWdubWVudFxuICoqL1xuXG4vLyBDaGVjayBgZG9jdW1lbnRgIGFuZCBgd2luZG93YCBpbiBjYXNlIG9mIHNlcnZlci1zaWRlIHJlbmRlcmluZ1xubGV0IHdpbmRvd09iamVjdDtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIHdpbmRvd09iamVjdCA9IHdpbmRvdztcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG59IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgd2luZG93T2JqZWN0ID0gc2VsZjtcbn0gZWxzZSB7XG4gIHdpbmRvd09iamVjdCA9IGdsb2JhbDtcbn1cbmxldCBjYW5jZWxGcmFtZSA9IG51bGw7XG5sZXQgcmVxdWVzdEZyYW1lID0gbnVsbDtcbmNvbnN0IFRJTUVPVVRfRFVSQVRJT04gPSAyMDtcbmNvbnN0IGNsZWFyVGltZW91dEZuID0gd2luZG93T2JqZWN0LmNsZWFyVGltZW91dDtcbmNvbnN0IHNldFRpbWVvdXRGbiA9IHdpbmRvd09iamVjdC5zZXRUaW1lb3V0O1xuY29uc3QgY2FuY2VsQW5pbWF0aW9uRnJhbWVGbiA9IHdpbmRvd09iamVjdC5jYW5jZWxBbmltYXRpb25GcmFtZSB8fCB3aW5kb3dPYmplY3QubW96Q2FuY2VsQW5pbWF0aW9uRnJhbWUgfHwgd2luZG93T2JqZWN0LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lO1xuY29uc3QgcmVxdWVzdEFuaW1hdGlvbkZyYW1lRm4gPSB3aW5kb3dPYmplY3QucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgd2luZG93T2JqZWN0LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZTtcbmlmIChjYW5jZWxBbmltYXRpb25GcmFtZUZuID09IG51bGwgfHwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lRm4gPT0gbnVsbCkge1xuICAvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBhbmltYXRpb24gZnJhbWUsXG4gIC8vIGZhbGxiYWNrIHRvIGEgc2V0VGltZW91dCBiYXNlZCBhcHByb2FjaC5cbiAgY2FuY2VsRnJhbWUgPSBjbGVhclRpbWVvdXRGbjtcbiAgcmVxdWVzdEZyYW1lID0gZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lVmlhU2V0VGltZW91dChjYWxsYmFjaykge1xuICAgIHJldHVybiBzZXRUaW1lb3V0Rm4oY2FsbGJhY2ssIFRJTUVPVVRfRFVSQVRJT04pO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gQ291bnRlciBpbnR1aXRpdmVseSwgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBhbmltYXRpb24gZnJhbWVzIGNhbiBiZSB0cmlja2llci5cbiAgLy8gQ2hyb21lJ3MgXCJUaHJvdHRsZSBub24tdmlzaWJsZSBjcm9zcy1vcmlnaW4gaWZyYW1lc1wiIGZsYWcgY2FuIHByZXZlbnQgckFGcyBmcm9tIGJlaW5nIGNhbGxlZC5cbiAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgZmFsbGJhY2sgdG8gYSBzZXRUaW1lb3V0KCkgaW1wbGVtZW50YXRpb24uXG4gIGNhbmNlbEZyYW1lID0gZnVuY3Rpb24gY2FuY2VsRnJhbWUoW2FuaW1hdGlvbkZyYW1lSUQsIHRpbWVvdXRJRF0pIHtcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZUZuKGFuaW1hdGlvbkZyYW1lSUQpO1xuICAgIGNsZWFyVGltZW91dEZuKHRpbWVvdXRJRCk7XG4gIH07XG4gIHJlcXVlc3RGcmFtZSA9IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZVdpdGhTZXRUaW1lb3V0RmFsbGJhY2soY2FsbGJhY2spIHtcbiAgICBjb25zdCBhbmltYXRpb25GcmFtZUlEID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lRm4oZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWVDYWxsYmFjaygpIHtcbiAgICAgIGNsZWFyVGltZW91dEZuKHRpbWVvdXRJRCk7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0pO1xuICAgIGNvbnN0IHRpbWVvdXRJRCA9IHNldFRpbWVvdXRGbihmdW5jdGlvbiB0aW1lb3V0Q2FsbGJhY2soKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZUZuKGFuaW1hdGlvbkZyYW1lSUQpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9LCBUSU1FT1VUX0RVUkFUSU9OKTtcbiAgICByZXR1cm4gW2FuaW1hdGlvbkZyYW1lSUQsIHRpbWVvdXRJRF07XG4gIH07XG59XG5mdW5jdGlvbiBjcmVhdGVEZXRlY3RFbGVtZW50UmVzaXplKG5vbmNlKSB7XG4gIGxldCBhbmltYXRpb25LZXlmcmFtZXM7XG4gIGxldCBhbmltYXRpb25OYW1lO1xuICBsZXQgYW5pbWF0aW9uU3RhcnRFdmVudDtcbiAgbGV0IGFuaW1hdGlvblN0eWxlO1xuICBsZXQgY2hlY2tUcmlnZ2VycztcbiAgbGV0IHJlc2V0VHJpZ2dlcnM7XG4gIGxldCBzY3JvbGxMaXN0ZW5lcjtcbiAgY29uc3QgYXR0YWNoRXZlbnQgPSB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuYXR0YWNoRXZlbnQ7XG4gIGlmICghYXR0YWNoRXZlbnQpIHtcbiAgICByZXNldFRyaWdnZXJzID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHRyaWdnZXJzID0gZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18sXG4gICAgICAgIGV4cGFuZCA9IHRyaWdnZXJzLmZpcnN0RWxlbWVudENoaWxkLFxuICAgICAgICBjb250cmFjdCA9IHRyaWdnZXJzLmxhc3RFbGVtZW50Q2hpbGQsXG4gICAgICAgIGV4cGFuZENoaWxkID0gZXhwYW5kLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgY29udHJhY3Quc2Nyb2xsTGVmdCA9IGNvbnRyYWN0LnNjcm9sbFdpZHRoO1xuICAgICAgY29udHJhY3Quc2Nyb2xsVG9wID0gY29udHJhY3Quc2Nyb2xsSGVpZ2h0O1xuICAgICAgZXhwYW5kQ2hpbGQuc3R5bGUud2lkdGggPSBleHBhbmQub2Zmc2V0V2lkdGggKyAxICsgXCJweFwiO1xuICAgICAgZXhwYW5kQ2hpbGQuc3R5bGUuaGVpZ2h0ID0gZXhwYW5kLm9mZnNldEhlaWdodCArIDEgKyBcInB4XCI7XG4gICAgICBleHBhbmQuc2Nyb2xsTGVmdCA9IGV4cGFuZC5zY3JvbGxXaWR0aDtcbiAgICAgIGV4cGFuZC5zY3JvbGxUb3AgPSBleHBhbmQuc2Nyb2xsSGVpZ2h0O1xuICAgIH07XG4gICAgY2hlY2tUcmlnZ2VycyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRXaWR0aCAhPT0gZWxlbWVudC5fX3Jlc2l6ZUxhc3RfXy53aWR0aCB8fCBlbGVtZW50Lm9mZnNldEhlaWdodCAhPT0gZWxlbWVudC5fX3Jlc2l6ZUxhc3RfXy5oZWlnaHQ7XG4gICAgfTtcbiAgICBzY3JvbGxMaXN0ZW5lciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAvLyBEb24ndCBtZWFzdXJlICh3aGljaCBmb3JjZXMpIHJlZmxvdyBmb3Igc2Nyb2xscyB0aGF0IGhhcHBlbiBpbnNpZGUgb2YgY2hpbGRyZW4hXG4gICAgICBpZiAoZS50YXJnZXQuY2xhc3NOYW1lICYmIHR5cGVvZiBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZiA9PT0gXCJmdW5jdGlvblwiICYmIGUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKFwiY29udHJhY3QtdHJpZ2dlclwiKSA8IDAgJiYgZS50YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoXCJleHBhbmQtdHJpZ2dlclwiKSA8IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXM7XG4gICAgICByZXNldFRyaWdnZXJzKHRoaXMpO1xuICAgICAgaWYgKHRoaXMuX19yZXNpemVSQUZfXykge1xuICAgICAgICBjYW5jZWxGcmFtZSh0aGlzLl9fcmVzaXplUkFGX18pO1xuICAgICAgfVxuICAgICAgdGhpcy5fX3Jlc2l6ZVJBRl9fID0gcmVxdWVzdEZyYW1lKGZ1bmN0aW9uIGFuaW1hdGlvbkZyYW1lKCkge1xuICAgICAgICBpZiAoY2hlY2tUcmlnZ2VycyhlbGVtZW50KSkge1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVMYXN0X18ud2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVMYXN0X18uaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmZvckVhY2goZnVuY3Rpb24gZm9yRWFjaFJlc2l6ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBmbi5jYWxsKGVsZW1lbnQsIGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyogRGV0ZWN0IENTUyBBbmltYXRpb25zIHN1cHBvcnQgdG8gZGV0ZWN0IGVsZW1lbnQgZGlzcGxheS9yZS1hdHRhY2ggKi9cbiAgICBsZXQgYW5pbWF0aW9uID0gZmFsc2U7XG4gICAgbGV0IGtleWZyYW1lcHJlZml4ID0gXCJcIjtcbiAgICBhbmltYXRpb25TdGFydEV2ZW50ID0gXCJhbmltYXRpb25zdGFydFwiO1xuICAgIGNvbnN0IGRvbVByZWZpeGVzID0gXCJXZWJraXQgTW96IE8gbXNcIi5zcGxpdChcIiBcIik7XG4gICAgbGV0IHN0YXJ0RXZlbnRzID0gXCJ3ZWJraXRBbmltYXRpb25TdGFydCBhbmltYXRpb25zdGFydCBvQW5pbWF0aW9uU3RhcnQgTVNBbmltYXRpb25TdGFydFwiLnNwbGl0KFwiIFwiKTtcbiAgICBsZXQgcGZ4ID0gXCJcIjtcbiAgICB7XG4gICAgICBjb25zdCBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmFrZWVsZW1lbnRcIik7XG4gICAgICBpZiAoZWxtLnN0eWxlLmFuaW1hdGlvbk5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbmltYXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGFuaW1hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb21QcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlbG0uc3R5bGVbZG9tUHJlZml4ZXNbaV0gKyBcIkFuaW1hdGlvbk5hbWVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGZ4ID0gZG9tUHJlZml4ZXNbaV07XG4gICAgICAgICAgICBrZXlmcmFtZXByZWZpeCA9IFwiLVwiICsgcGZ4LnRvTG93ZXJDYXNlKCkgKyBcIi1cIjtcbiAgICAgICAgICAgIGFuaW1hdGlvblN0YXJ0RXZlbnQgPSBzdGFydEV2ZW50c1tpXTtcbiAgICAgICAgICAgIGFuaW1hdGlvbiA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYW5pbWF0aW9uTmFtZSA9IFwicmVzaXplYW5pbVwiO1xuICAgIGFuaW1hdGlvbktleWZyYW1lcyA9IFwiQFwiICsga2V5ZnJhbWVwcmVmaXggKyBcImtleWZyYW1lcyBcIiArIGFuaW1hdGlvbk5hbWUgKyBcIiB7IGZyb20geyBvcGFjaXR5OiAwOyB9IHRvIHsgb3BhY2l0eTogMDsgfSB9IFwiO1xuICAgIGFuaW1hdGlvblN0eWxlID0ga2V5ZnJhbWVwcmVmaXggKyBcImFuaW1hdGlvbjogMW1zIFwiICsgYW5pbWF0aW9uTmFtZSArIFwiOyBcIjtcbiAgfVxuICBjb25zdCBjcmVhdGVTdHlsZXMgPSBmdW5jdGlvbiAoZG9jKSB7XG4gICAgaWYgKCFkb2MuZ2V0RWxlbWVudEJ5SWQoXCJkZXRlY3RFbGVtZW50UmVzaXplXCIpKSB7XG4gICAgICAvL29wYWNpdHk6MCB3b3JrcyBhcm91bmQgYSBjaHJvbWUgYnVnIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yODYzNjBcbiAgICAgIGNvbnN0IGNzcyA9IChhbmltYXRpb25LZXlmcmFtZXMgPyBhbmltYXRpb25LZXlmcmFtZXMgOiBcIlwiKSArIFwiLnJlc2l6ZS10cmlnZ2VycyB7IFwiICsgKGFuaW1hdGlvblN0eWxlID8gYW5pbWF0aW9uU3R5bGUgOiBcIlwiKSArIFwidmlzaWJpbGl0eTogaGlkZGVuOyBvcGFjaXR5OiAwOyB9IFwiICsgJy5yZXNpemUtdHJpZ2dlcnMsIC5yZXNpemUtdHJpZ2dlcnMgPiBkaXYsIC5jb250cmFjdC10cmlnZ2VyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiIFwiOyBkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IHotaW5kZXg6IC0xOyB9IC5yZXNpemUtdHJpZ2dlcnMgPiBkaXYgeyBiYWNrZ3JvdW5kOiAjZWVlOyBvdmVyZmxvdzogYXV0bzsgfSAuY29udHJhY3QtdHJpZ2dlcjpiZWZvcmUgeyB3aWR0aDogMjAwJTsgaGVpZ2h0OiAyMDAlOyB9JyxcbiAgICAgICAgaGVhZCA9IGRvYy5oZWFkIHx8IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0sXG4gICAgICAgIHN0eWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgIHN0eWxlLmlkID0gXCJkZXRlY3RFbGVtZW50UmVzaXplXCI7XG4gICAgICBzdHlsZS50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuICAgICAgaWYgKG5vbmNlICE9IG51bGwpIHtcbiAgICAgICAgc3R5bGUuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICAgICAgfVxuICAgICAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICAgICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICAgICAgfVxuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBhZGRSZXNpemVMaXN0ZW5lciA9IGZ1bmN0aW9uIChlbGVtZW50LCBmbikge1xuICAgIGlmIChhdHRhY2hFdmVudCkge1xuICAgICAgZWxlbWVudC5hdHRhY2hFdmVudChcIm9ucmVzaXplXCIsIGZuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXykge1xuICAgICAgICBjb25zdCBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHdpbmRvd09iamVjdC5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgICAgICBpZiAoZWxlbWVudFN0eWxlICYmIGVsZW1lbnRTdHlsZS5wb3NpdGlvbiA9PT0gXCJzdGF0aWNcIikge1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlU3R5bGVzKGRvYyk7XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVMYXN0X18gPSB7fTtcbiAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fID0gW107XG4gICAgICAgIChlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5jbGFzc05hbWUgPSBcInJlc2l6ZS10cmlnZ2Vyc1wiO1xuICAgICAgICBjb25zdCBleHBhbmRUcmlnZ2VyID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGV4cGFuZFRyaWdnZXIuY2xhc3NOYW1lID0gXCJleHBhbmQtdHJpZ2dlclwiO1xuICAgICAgICBleHBhbmRUcmlnZ2VyLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgICAgICAgY29uc3QgY29udHJhY3RUcmlnZ2VyID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGNvbnRyYWN0VHJpZ2dlci5jbGFzc05hbWUgPSBcImNvbnRyYWN0LXRyaWdnZXJcIjtcbiAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uYXBwZW5kQ2hpbGQoZXhwYW5kVHJpZ2dlcik7XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLmFwcGVuZENoaWxkKGNvbnRyYWN0VHJpZ2dlcik7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18pO1xuICAgICAgICByZXNldFRyaWdnZXJzKGVsZW1lbnQpO1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgc2Nyb2xsTGlzdGVuZXIsIHRydWUpO1xuXG4gICAgICAgIC8qIExpc3RlbiBmb3IgYSBjc3MgYW5pbWF0aW9uIHRvIGRldGVjdCBlbGVtZW50IGRpc3BsYXkvcmUtYXR0YWNoICovXG4gICAgICAgIGlmIChhbmltYXRpb25TdGFydEV2ZW50KSB7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fID0gZnVuY3Rpb24gYW5pbWF0aW9uTGlzdGVuZXIoZSkge1xuICAgICAgICAgICAgaWYgKGUuYW5pbWF0aW9uTmFtZSA9PT0gYW5pbWF0aW9uTmFtZSkge1xuICAgICAgICAgICAgICByZXNldFRyaWdnZXJzKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uYWRkRXZlbnRMaXN0ZW5lcihhbmltYXRpb25TdGFydEV2ZW50LCBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18ucHVzaChmbik7XG4gICAgfVxuICB9O1xuICBjb25zdCByZW1vdmVSZXNpemVMaXN0ZW5lciA9IGZ1bmN0aW9uIChlbGVtZW50LCBmbikge1xuICAgIGlmIChhdHRhY2hFdmVudCkge1xuICAgICAgZWxlbWVudC5kZXRhY2hFdmVudChcIm9ucmVzaXplXCIsIGZuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLnNwbGljZShlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18uaW5kZXhPZihmbiksIDEpO1xuICAgICAgaWYgKCFlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18ubGVuZ3RoKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBzY3JvbGxMaXN0ZW5lciwgdHJ1ZSk7XG4gICAgICAgIGlmIChlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18pIHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5yZW1vdmVFdmVudExpc3RlbmVyKGFuaW1hdGlvblN0YXJ0RXZlbnQsIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyk7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fID0gIWVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gUHJlYWN0IGNvbXBhdDsgc2VlIGRldmVsb3BpdC9wcmVhY3QtY29tcGF0L2lzc3Vlcy8yMjhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBhZGRSZXNpemVMaXN0ZW5lcixcbiAgICByZW1vdmVSZXNpemVMaXN0ZW5lclxuICB9O1xufVxuXG5jbGFzcyBBdXRvU2l6ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgc3VwZXIoLi4uYXJncyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGhlaWdodDogdGhpcy5wcm9wcy5kZWZhdWx0SGVpZ2h0IHx8IDAsXG4gICAgICBzY2FsZWRIZWlnaHQ6IHRoaXMucHJvcHMuZGVmYXVsdEhlaWdodCB8fCAwLFxuICAgICAgc2NhbGVkV2lkdGg6IHRoaXMucHJvcHMuZGVmYXVsdFdpZHRoIHx8IDAsXG4gICAgICB3aWR0aDogdGhpcy5wcm9wcy5kZWZhdWx0V2lkdGggfHwgMFxuICAgIH07XG4gICAgdGhpcy5fYXV0b1NpemVyID0gbnVsbDtcbiAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplID0gbnVsbDtcbiAgICB0aGlzLl9wYXJlbnROb2RlID0gbnVsbDtcbiAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgdGhpcy5fdGltZW91dElkID0gbnVsbDtcbiAgICB0aGlzLl9vblJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3RpbWVvdXRJZCA9IG51bGw7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRpc2FibGVIZWlnaHQsXG4gICAgICAgIGRpc2FibGVXaWR0aCxcbiAgICAgICAgb25SZXNpemVcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKHRoaXMuX3BhcmVudE5vZGUpIHtcbiAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCBBdXRvU2l6ZXIgY29tcG9uZW50IGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgRE9NIGltbWVkaWF0ZWx5IGFmdGVyIGJlaW5nIGFkZGVkLlxuICAgICAgICAvLyBUaGlzIGNhbiByZXN1bHQgaW4gaW52YWxpZCBzdHlsZSB2YWx1ZXMgd2hpY2ggY2FuIHJlc3VsdCBpbiBOYU4gdmFsdWVzIGlmIHdlIGRvbid0IGhhbmRsZSB0aGVtLlxuICAgICAgICAvLyBTZWUgaXNzdWUgIzE1MCBmb3IgbW9yZSBjb250ZXh0LlxuXG4gICAgICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fcGFyZW50Tm9kZSkgfHwge307XG4gICAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0ID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nTGVmdCB8fCBcIjBcIik7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1JpZ2h0IHx8IFwiMFwiKTtcbiAgICAgICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1RvcCB8fCBcIjBcIik7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdCb3R0b20gfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5fcGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgc2NhbGVkSGVpZ2h0ID0gcmVjdC5oZWlnaHQgLSBwYWRkaW5nVG9wIC0gcGFkZGluZ0JvdHRvbTtcbiAgICAgICAgY29uc3Qgc2NhbGVkV2lkdGggPSByZWN0LndpZHRoIC0gcGFkZGluZ0xlZnQgLSBwYWRkaW5nUmlnaHQ7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuX3BhcmVudE5vZGUub2Zmc2V0SGVpZ2h0IC0gcGFkZGluZ1RvcCAtIHBhZGRpbmdCb3R0b207XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5fcGFyZW50Tm9kZS5vZmZzZXRXaWR0aCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0O1xuICAgICAgICBpZiAoIWRpc2FibGVIZWlnaHQgJiYgKHRoaXMuc3RhdGUuaGVpZ2h0ICE9PSBoZWlnaHQgfHwgdGhpcy5zdGF0ZS5zY2FsZWRIZWlnaHQgIT09IHNjYWxlZEhlaWdodCkgfHwgIWRpc2FibGVXaWR0aCAmJiAodGhpcy5zdGF0ZS53aWR0aCAhPT0gd2lkdGggfHwgdGhpcy5zdGF0ZS5zY2FsZWRXaWR0aCAhPT0gc2NhbGVkV2lkdGgpKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIHNjYWxlZEhlaWdodCxcbiAgICAgICAgICAgIHNjYWxlZFdpZHRoXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBvblJlc2l6ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBvblJlc2l6ZSh7XG4gICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgc2NhbGVkSGVpZ2h0LFxuICAgICAgICAgICAgICBzY2FsZWRXaWR0aCxcbiAgICAgICAgICAgICAgd2lkdGhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5fc2V0UmVmID0gYXV0b1NpemVyID0+IHtcbiAgICAgIHRoaXMuX2F1dG9TaXplciA9IGF1dG9TaXplcjtcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG5vbmNlXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX2F1dG9TaXplciA/IHRoaXMuX2F1dG9TaXplci5wYXJlbnROb2RlIDogbnVsbDtcbiAgICBpZiAocGFyZW50Tm9kZSAhPSBudWxsICYmIHBhcmVudE5vZGUub3duZXJEb2N1bWVudCAmJiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgJiYgcGFyZW50Tm9kZSBpbnN0YW5jZW9mIHBhcmVudE5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5IVE1MRWxlbWVudCkge1xuICAgICAgLy8gRGVsYXkgYWNjZXNzIG9mIHBhcmVudE5vZGUgdW50aWwgbW91bnQuXG4gICAgICAvLyBUaGlzIGhhbmRsZXMgZWRnZS1jYXNlcyB3aGVyZSB0aGUgY29tcG9uZW50IGhhcyBhbHJlYWR5IGJlZW4gdW5tb3VudGVkIGJlZm9yZSBpdHMgcmVmIGhhcyBiZWVuIHNldCxcbiAgICAgIC8vIEFzIHdlbGwgYXMgbGlicmFyaWVzIGxpa2UgcmVhY3QtbGl0ZSB3aGljaCBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGxpZmVjeWNsZS5cbiAgICAgIHRoaXMuX3BhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuXG4gICAgICAvLyBVc2UgUmVzaXplT2JzZXJ2ZXIgZnJvbSB0aGUgc2FtZSBjb250ZXh0IHdoZXJlIHBhcmVudE5vZGUgKHdoaWNoIHdlIHdpbGwgb2JzZXJ2ZSkgd2FzIGRlZmluZWRcbiAgICAgIC8vIFVzaW5nIGp1c3QgZ2xvYmFsIGNhbiByZXN1bHQgaW50byBvblJlc2l6ZSBldmVudHMgbm90IGJlaW5nIGVtaXR0ZWQgaW4gY2FzZXMgd2l0aCBtdWx0aXBsZSByZWFsbXNcbiAgICAgIGNvbnN0IFJlc2l6ZU9ic2VydmVySW5zdGFuY2UgPSBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuUmVzaXplT2JzZXJ2ZXI7XG4gICAgICBpZiAoUmVzaXplT2JzZXJ2ZXJJbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVySW5zdGFuY2UoKCkgPT4ge1xuICAgICAgICAgIC8vIEd1YXJkIGFnYWluc3QgXCJSZXNpemVPYnNlcnZlciBsb29wIGxpbWl0IGV4Y2VlZGVkXCIgZXJyb3I7XG4gICAgICAgICAgLy8gY291bGQgYmUgdHJpZ2dlcmVkIGlmIHRoZSBzdGF0ZSB1cGRhdGUgY2F1c2VzIHRoZSBSZXNpemVPYnNlcnZlciBoYW5kbGVyIHRvIHJ1biBsb25nLlxuICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyL2lzc3Vlcy81NVxuICAgICAgICAgIHRoaXMuX3RpbWVvdXRJZCA9IHNldFRpbWVvdXQodGhpcy5fb25SZXNpemUsIDApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShwYXJlbnROb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERlZmVyIHJlcXVpcmluZyByZXNpemUgaGFuZGxlciBpbiBvcmRlciB0byBzdXBwb3J0IHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICAgICAgLy8gU2VlIGlzc3VlICM0MVxuICAgICAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplID0gY3JlYXRlRGV0ZWN0RWxlbWVudFJlc2l6ZShub25jZSk7XG4gICAgICAgIHRoaXMuX2RldGVjdEVsZW1lbnRSZXNpemUuYWRkUmVzaXplTGlzdGVuZXIocGFyZW50Tm9kZSwgdGhpcy5fb25SZXNpemUpO1xuICAgICAgfVxuICAgICAgdGhpcy5fb25SZXNpemUoKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMuX3BhcmVudE5vZGUpIHtcbiAgICAgIGlmICh0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplKSB7XG4gICAgICAgIHRoaXMuX2RldGVjdEVsZW1lbnRSZXNpemUucmVtb3ZlUmVzaXplTGlzdGVuZXIodGhpcy5fcGFyZW50Tm9kZSwgdGhpcy5fb25SZXNpemUpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9yZXNpemVPYnNlcnZlcikge1xuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGRlZmF1bHRIZWlnaHQsXG4gICAgICBkZWZhdWx0V2lkdGgsXG4gICAgICBkaXNhYmxlSGVpZ2h0ID0gZmFsc2UsXG4gICAgICBkaXNhYmxlV2lkdGggPSBmYWxzZSxcbiAgICAgIGRvTm90QmFpbE91dE9uRW1wdHlDaGlsZHJlbiA9IGZhbHNlLFxuICAgICAgbm9uY2UsXG4gICAgICBvblJlc2l6ZSxcbiAgICAgIHN0eWxlID0ge30sXG4gICAgICB0YWdOYW1lID0gXCJkaXZcIixcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7XG4gICAgICBoZWlnaHQsXG4gICAgICBzY2FsZWRIZWlnaHQsXG4gICAgICBzY2FsZWRXaWR0aCxcbiAgICAgIHdpZHRoXG4gICAgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAvLyBPdXRlciBkaXYgc2hvdWxkIG5vdCBmb3JjZSB3aWR0aC9oZWlnaHQgc2luY2UgdGhhdCBtYXkgcHJldmVudCBjb250YWluZXJzIGZyb20gc2hyaW5raW5nLlxuICAgIC8vIElubmVyIGNvbXBvbmVudCBzaG91bGQgb3ZlcmZsb3cgYW5kIHVzZSBjYWxjdWxhdGVkIHdpZHRoL2hlaWdodC5cbiAgICAvLyBTZWUgaXNzdWUgIzY4IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgIGNvbnN0IG91dGVyU3R5bGUgPSB7XG4gICAgICBvdmVyZmxvdzogXCJ2aXNpYmxlXCJcbiAgICB9O1xuICAgIGNvbnN0IGNoaWxkUGFyYW1zID0ge307XG5cbiAgICAvLyBBdm9pZCByZW5kZXJpbmcgY2hpbGRyZW4gYmVmb3JlIHRoZSBpbml0aWFsIG1lYXN1cmVtZW50cyBoYXZlIGJlZW4gY29sbGVjdGVkLlxuICAgIC8vIEF0IGJlc3QgdGhpcyB3b3VsZCBqdXN0IGJlIHdhc3RpbmcgY3ljbGVzLlxuICAgIGxldCBiYWlsb3V0T25DaGlsZHJlbiA9IGZhbHNlO1xuICAgIGlmICghZGlzYWJsZUhlaWdodCkge1xuICAgICAgaWYgKGhlaWdodCA9PT0gMCkge1xuICAgICAgICBiYWlsb3V0T25DaGlsZHJlbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBvdXRlclN0eWxlLmhlaWdodCA9IDA7XG4gICAgICBjaGlsZFBhcmFtcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICBjaGlsZFBhcmFtcy5zY2FsZWRIZWlnaHQgPSBzY2FsZWRIZWlnaHQ7XG4gICAgfVxuICAgIGlmICghZGlzYWJsZVdpZHRoKSB7XG4gICAgICBpZiAod2lkdGggPT09IDApIHtcbiAgICAgICAgYmFpbG91dE9uQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgb3V0ZXJTdHlsZS53aWR0aCA9IDA7XG4gICAgICBjaGlsZFBhcmFtcy53aWR0aCA9IHdpZHRoO1xuICAgICAgY2hpbGRQYXJhbXMuc2NhbGVkV2lkdGggPSBzY2FsZWRXaWR0aDtcbiAgICB9XG4gICAgaWYgKGRvTm90QmFpbE91dE9uRW1wdHlDaGlsZHJlbikge1xuICAgICAgYmFpbG91dE9uQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodGFnTmFtZSwge1xuICAgICAgcmVmOiB0aGlzLl9zZXRSZWYsXG4gICAgICBzdHlsZToge1xuICAgICAgICAuLi5vdXRlclN0eWxlLFxuICAgICAgICAuLi5zdHlsZVxuICAgICAgfSxcbiAgICAgIC4uLnJlc3RcbiAgICB9LCAhYmFpbG91dE9uQ2hpbGRyZW4gJiYgY2hpbGRyZW4oY2hpbGRQYXJhbXMpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0hlaWdodEFuZFdpZHRoUHJvcHMocHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzICYmIHByb3BzLmRpc2FibGVIZWlnaHQgIT09IHRydWUgJiYgcHJvcHMuZGlzYWJsZVdpZHRoICE9PSB0cnVlO1xufVxuZnVuY3Rpb24gaXNIZWlnaHRPbmx5UHJvcHMocHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzICYmIHByb3BzLmRpc2FibGVIZWlnaHQgIT09IHRydWUgJiYgcHJvcHMuZGlzYWJsZVdpZHRoID09PSB0cnVlO1xufVxuZnVuY3Rpb24gaXNXaWR0aE9ubHlQcm9wcyhwcm9wcykge1xuICByZXR1cm4gcHJvcHMgJiYgcHJvcHMuZGlzYWJsZUhlaWdodCA9PT0gdHJ1ZSAmJiBwcm9wcy5kaXNhYmxlV2lkdGggIT09IHRydWU7XG59XG5cbmV4cG9ydCB7IEF1dG9TaXplciBhcyBkZWZhdWx0LCBpc0hlaWdodEFuZFdpZHRoUHJvcHMsIGlzSGVpZ2h0T25seVByb3BzLCBpc1dpZHRoT25seVByb3BzIH07XG4iLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgQXV0b1NpemVyIGZyb20gJ3JlYWN0LXZpcnR1YWxpemVkLWF1dG8tc2l6ZXInO1xuZXhwb3J0IHZhciBFdWlBdXRvU2l6ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9BdXRvU2l6ZXIpIHtcbiAgZnVuY3Rpb24gRXVpQXV0b1NpemVyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlBdXRvU2l6ZXIpO1xuICAgIHJldHVybiBfY2FsbFN1cGVyKHRoaXMsIEV1aUF1dG9TaXplciwgYXJndW1lbnRzKTtcbiAgfVxuICBfaW5oZXJpdHMoRXVpQXV0b1NpemVyLCBfQXV0b1NpemVyKTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlBdXRvU2l6ZXIpO1xufShBdXRvU2l6ZXIpOyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpZGVcIiwgXCJjbGFzc05hbWVcIiwgXCJpc0Rpc2FibGVkXCIsIFwib25DbGlja1wiLCBcImljb25PbkNsaWNrXCIsIFwib25DbGlja0FyaWFMYWJlbFwiLCBcImljb25PbkNsaWNrQXJpYUxhYmVsXCIsIFwiY2xvc2VCdXR0b25Qcm9wc1wiLCBcImhyZWZcIiwgXCJyZWxcIiwgXCJ0YXJnZXRcIiwgXCJzdHlsZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lLCB1c2VFdWlNZW1vaXplZFN0eWxlcywgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB3Y2FnQ29udHJhc3RNaW4gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBFdWlJbm5lclRleHQgfSBmcm9tICcuLi9pbm5lcl90ZXh0JztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IGdldFRleHRDb2xvciwgZ2V0Q29sb3JDb250cmFzdCwgZ2V0SXNWYWxpZENvbG9yIH0gZnJvbSAnLi9jb2xvcl91dGlscyc7XG5pbXBvcnQgeyBldWlCYWRnZVN0eWxlcyB9IGZyb20gJy4vYmFkZ2Uuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIElDT05fU0lERVMgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbmV4cG9ydCB2YXIgQ09MT1JTID0gWydkZWZhdWx0JywgJ2hvbGxvdycsICdwcmltYXJ5JywgJ3N1Y2Nlc3MnLCAnYWNjZW50JywgJ3dhcm5pbmcnLCAnZGFuZ2VyJ107XG5leHBvcnQgdmFyIEV1aUJhZGdlID0gZnVuY3Rpb24gRXVpQmFkZ2UoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2RlZmF1bHQnIDogX3JlZiRjb2xvcixcbiAgICBpY29uVHlwZSA9IF9yZWYuaWNvblR5cGUsXG4gICAgX3JlZiRpY29uU2lkZSA9IF9yZWYuaWNvblNpZGUsXG4gICAgaWNvblNpZGUgPSBfcmVmJGljb25TaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmJGljb25TaWRlLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9pc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgaWNvbk9uQ2xpY2sgPSBfcmVmLmljb25PbkNsaWNrLFxuICAgIG9uQ2xpY2tBcmlhTGFiZWwgPSBfcmVmLm9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgaWNvbk9uQ2xpY2tBcmlhTGFiZWwgPSBfcmVmLmljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgIGNsb3NlQnV0dG9uUHJvcHMgPSBfcmVmLmNsb3NlQnV0dG9uUHJvcHMsXG4gICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICByZWwgPSBfcmVmLnJlbCxcbiAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgaXNOYW1lZENvbG9yID0gQ09MT1JTLmluY2x1ZGVzKGNvbG9yKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIGN1c3RvbUNvbG9yU3R5bGVzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gRGlzYWJsZWQgYmFkZ2VzIHNob3VsZCBub3QgaGF2ZSBjdXN0b20gY29sb3JzXG4gICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiBzdHlsZTtcbiAgICAvLyBOYW1lZCBjb2xvcnMgc2V0IHRoZWlyIHN0eWxlcyB2aWEgRW1vdGlvbiBDU1MgYW5kIG5vdCBpbmxpbmUgc3R5bGVzXG4gICAgaWYgKGlzTmFtZWRDb2xvcikgcmV0dXJuIHN0eWxlO1xuXG4gICAgLy8gRG8gb3VyIGJlc3QgdG8gZW5zdXJlIGN1c3RvbSBjb2xvcnMgcHJvdmlkZSBzdWZmaWNpZW50IGNvbnRyYXN0XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNldCBkYXJrIG9yIGxpZ2h0IHRleHQgY29sb3IgYmFzZWQgdXBvbiBiZXN0IGNvbnRyYXN0XG4gICAgICB2YXIgdGV4dENvbG9yID0gZ2V0VGV4dENvbG9yKGV1aVRoZW1lLCBjb2xvcik7XG5cbiAgICAgIC8vIENoZWNrIHRoZSBjb250cmFzdCByYXRpby4gSWYgaXQncyBsb3cgY29udHJhc3QsIGVtaXQgYSBjb25zb2xlIGF3cm5pbmdcbiAgICAgIHZhciBjb250cmFzdFJhdGlvID0gZ2V0Q29sb3JDb250cmFzdCh0ZXh0Q29sb3IsIGNvbG9yKTtcbiAgICAgIGlmIChjb250cmFzdFJhdGlvIDwgd2NhZ0NvbnRyYXN0TWluKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIldhcm5pbmc6IFwiLmNvbmNhdChjb2xvciwgXCIgYmFkZ2UgaGFzIGEgbG93IGNvbnRyYXN0IG9mIFwiKS5jb25jYXQoY29udHJhc3RSYXRpby50b0ZpeGVkKDIpLCBcIi4gU2hvdWxkIGJlIGFib3ZlIFwiKS5jb25jYXQod2NhZ0NvbnRyYXN0TWluLCBcIi5cIikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAnLS1ldWlCYWRnZUJhY2tncm91bmRDb2xvcic6IGNvbG9yLFxuICAgICAgICAnLS1ldWlCYWRnZVRleHRDb2xvcic6IHRleHRDb2xvclxuICAgICAgfSwgc3R5bGUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCFnZXRJc1ZhbGlkQ29sb3IoY29sb3IpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRXVpQmFkZ2UgZXhwZWN0cyBhIHZhbGlkIGNvbG9yLiBUaGlzIGNhbiBlaXRoZXIgYmUgYSB0aHJlZSBvciBzaXggJyArIFwiY2hhcmFjdGVyIGhleCB2YWx1ZSwgcmdiKGEpIHZhbHVlLCBoc3YgdmFsdWUsIGhvbGxvdywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmc6IFwiLmNvbmNhdChDT0xPUlMsIFwiLiBcIikgKyBcIkluc3RlYWQgZ290IFwiLmNvbmNhdChjb2xvciwgXCIuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtjb2xvciwgaXNOYW1lZENvbG9yLCBpc0Rpc2FibGVkLCBzdHlsZSwgZXVpVGhlbWVdKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUJhZGdlU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpQmFkZ2VdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoaXNEaXNhYmxlZCA/IFtzdHlsZXMuZGlzYWJsZWRdIDogW2lzTmFtZWRDb2xvciAmJiBzdHlsZXNbY29sb3JdLCAhaWNvbk9uQ2xpY2sgJiYgKG9uQ2xpY2sgfHwgaHJlZikgJiYgc3R5bGVzLmNsaWNrYWJsZV0pKTtcbiAgdmFyIHRleHRDc3NTdHlsZXMgPSBbc3R5bGVzLnRleHQuZXVpQmFkZ2VfX3RleHQsIChvbkNsaWNrIHx8IGhyZWYpICYmICFpc0Rpc2FibGVkICYmIHN0eWxlcy50ZXh0LmNsaWNrYWJsZV07XG4gIHZhciBpY29uQ3NzU3R5bGVzID0gW3N0eWxlcy5pY29uLmV1aUJhZGdlX19pY29uLCBzdHlsZXMuaWNvbltpY29uU2lkZV1dO1xuICB2YXIgaWNvbkJ1dHRvbkNzc1N0eWxlcyA9IFtzdHlsZXMuaWNvbkJ1dHRvbi5ldWlCYWRnZV9faWNvbkJ1dHRvbiwgc3R5bGVzLmljb25CdXR0b25baWNvblNpZGVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCYWRnZScsIGNsYXNzTmFtZSk7XG4gIHZhciBjbG9zZUNsYXNzTmFtZXMgPSBjbGFzc05hbWVzKCdldWlCYWRnZV9faWNvbicsIGNsb3NlQnV0dG9uUHJvcHMgPT09IG51bGwgfHwgY2xvc2VCdXR0b25Qcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xvc2VCdXR0b25Qcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgRWxlbWVudCA9IGhyZWYgJiYgIWlzRGlzYWJsZWQgPyAnYScgOiAnYnV0dG9uJztcbiAgdmFyIHJlbE9iaiA9IHt9O1xuICBpZiAoaHJlZiAmJiAhaXNEaXNhYmxlZCkge1xuICAgIHJlbE9iai5ocmVmID0gaHJlZjtcbiAgICByZWxPYmoudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHJlbE9iai5yZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgfVxuICBpZiAob25DbGljaykge1xuICAgIHJlbE9iai5vbkNsaWNrID0gb25DbGljaztcbiAgfVxuICB2YXIgb3B0aW9uYWxJY29uID0gbnVsbDtcbiAgaWYgKGljb25UeXBlKSB7XG4gICAgaWYgKGljb25PbkNsaWNrKSB7XG4gICAgICBpZiAoIWljb25PbkNsaWNrQXJpYUxhYmVsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignV2hlbiBwYXNzaW5nIHRoZSBpY29uT25DbGljayBwcm9wcyB0byBFdWlCYWRnZSwgeW91IG11c3QgYWxzbyBwcm92aWRlIGljb25PbkNsaWNrQXJpYUxhYmVsJyk7XG4gICAgICB9XG4gICAgICBvcHRpb25hbEljb24gPSBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX19pY29uQnV0dG9uXCIsXG4gICAgICAgIGNzczogaWNvbkJ1dHRvbkNzc1N0eWxlcyxcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgdGl0bGU6IGljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICBvbkNsaWNrOiBpY29uT25DbGlja1xuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCBfZXh0ZW5kcyh7XG4gICAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgICBzaXplOiBcInNcIixcbiAgICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcbiAgICAgIH0sIGNsb3NlQnV0dG9uUHJvcHMsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbG9zZUNsYXNzTmFtZXMsXG4gICAgICAgIGNzczogW10uY29uY2F0KGljb25Dc3NTdHlsZXMsIFtjbG9zZUJ1dHRvblByb3BzID09PSBudWxsIHx8IGNsb3NlQnV0dG9uUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsb3NlQnV0dG9uUHJvcHMuY3NzXSlcbiAgICAgIH0pKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbmFsSWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgICAgc2l6ZTogY2hpbGRyZW4gPyAncycgOiAnbScsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9faWNvblwiLFxuICAgICAgICBjc3M6IGljb25Dc3NTdHlsZXMsXG4gICAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKG9uQ2xpY2sgJiYgIW9uQ2xpY2tBcmlhTGFiZWwpIHtcbiAgICBjb25zb2xlLndhcm4oJ1doZW4gcGFzc2luZyBvbkNsaWNrIHRvIEV1aUJhZGdlLCB5b3UgbXVzdCBhbHNvIHByb3ZpZGUgb25DbGlja0FyaWFMYWJlbCcpO1xuICB9XG4gIHZhciBjb250ZW50ID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fY29udGVudFwiLFxuICAgIGNzczogc3R5bGVzLmV1aUJhZGdlX19jb250ZW50XG4gIH0sIGljb25TaWRlID09PSAnbGVmdCcgJiYgb3B0aW9uYWxJY29uLCBjaGlsZHJlbiAmJiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX190ZXh0XCIsXG4gICAgY3NzOiB0ZXh0Q3NzU3R5bGVzXG4gIH0sIGNoaWxkcmVuKSwgaWNvblNpZGUgPT09ICdyaWdodCcgJiYgb3B0aW9uYWxJY29uKTtcbiAgaWYgKGljb25PbkNsaWNrKSB7XG4gICAgcmV0dXJuIG9uQ2xpY2sgfHwgaHJlZiA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgc3R5bGU6IGN1c3RvbUNvbG9yU3R5bGVzXG4gICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX19jb250ZW50XCIsXG4gICAgICBjc3M6IHN0eWxlcy5ldWlCYWRnZV9fY29udGVudFxuICAgIH0sIGljb25TaWRlID09PSAnbGVmdCcgJiYgb3B0aW9uYWxJY29uLCBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fY2hpbGRCdXR0b25cIixcbiAgICAgICAgY3NzOiBzdHlsZXMuZXVpQmFkZ2VfX2NoaWxkQnV0dG9uLFxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IG9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICB0aXRsZTogaW5uZXJUZXh0XG4gICAgICB9LCByZWxPYmosIHJlc3QpLCBjaGlsZHJlbik7XG4gICAgfSksIGljb25TaWRlID09PSAncmlnaHQnICYmIG9wdGlvbmFsSWNvbikpIDogX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgc3R5bGU6IGN1c3RvbUNvbG9yU3R5bGVzLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVzdCksIGNvbnRlbnQpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9uQ2xpY2sgfHwgaHJlZikge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogb25DbGlja0FyaWFMYWJlbCxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgc3R5bGU6IGN1c3RvbUNvbG9yU3R5bGVzLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVsT2JqLCByZXN0KSwgY29udGVudCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCBudWxsLCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgIHN0eWxlOiBjdXN0b21Db2xvclN0eWxlcyxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlc3QpLCBjb250ZW50KTtcbiAgICB9KTtcbiAgfVxufTtcbkV1aUJhZGdlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogQWNjZXB0cyBhbnkgc3RyaW5nIGZyb20gb3VyIGljb24gbGlicmFyeVxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogVGhlIHNpZGUgb2YgdGhlIGJhZGdlIHRoZSBpY29uIHNob3VsZCBzaXRcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEFjY2VwdHMgZWl0aGVyIG91ciBwYWxldHRlIGNvbG9ycyAocHJpbWFyeSwgc3VjY2VzcyAuLmV0Yykgb3IgYSBoZXggdmFsdWUgYCNGRkZGRkZgLCBgIzAwMGAuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBXaWxsIG92ZXJyaWRlIGFueSBjb2xvciBwYXNzZWQgdGhyb3VnaCB0aGUgYGNvbG9yYCBwcm9wLlxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogUHJvcHMgcGFzc2VkIHRvIHRoZSBjbG9zZSBidXR0b24uXG4gICAgICovXG4gIGNsb3NlQnV0dG9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gaWNvbiB3aXRoaW4gdGhlIGJhZGdlXG4gICAgICovXG4gIGljb25PbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBpY29uT25DbGljayBidXR0b25cbiAgICAgKi9cbiAgaWNvbk9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICovXG4gIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5leHBvcnQgdmFyIGdldEV2ZW50UG9zaXRpb24gPSBmdW5jdGlvbiBnZXRFdmVudFBvc2l0aW9uKGxvY2F0aW9uLCBjb250YWluZXIpIHtcbiAgdmFyIHggPSBsb2NhdGlvbi54LFxuICAgIHkgPSBsb2NhdGlvbi55O1xuICB2YXIgX2NvbnRhaW5lciRnZXRCb3VuZGluID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgIHdpZHRoID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLndpZHRoLFxuICAgIGhlaWdodCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi5oZWlnaHQsXG4gICAgbGVmdCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi5sZWZ0LFxuICAgIHRvcCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi50b3A7XG4gIHZhciBsZWZ0UG9zID0geCAtIChsZWZ0ICsgd2luZG93LnBhZ2VYT2Zmc2V0KTtcbiAgdmFyIHRvcFBvcyA9IHkgLSAodG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0KTtcbiAgaWYgKGxlZnRQb3MgPCAwKSB7XG4gICAgbGVmdFBvcyA9IDA7XG4gIH0gZWxzZSBpZiAobGVmdFBvcyA+IHdpZHRoKSB7XG4gICAgbGVmdFBvcyA9IHdpZHRoO1xuICB9XG4gIGlmICh0b3BQb3MgPCAwKSB7XG4gICAgdG9wUG9zID0gMDtcbiAgfSBlbHNlIGlmICh0b3BQb3MgPiBoZWlnaHQpIHtcbiAgICB0b3BQb3MgPSBoZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiBsZWZ0UG9zLFxuICAgIHRvcDogdG9wUG9zLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufTtcbmV4cG9ydCB2YXIgSEVYX0ZBTExCQUNLID0gJyc7XG5leHBvcnQgdmFyIEhTVl9GQUxMQkFDSyA9IFswLCAwLCAwXTtcbmV4cG9ydCB2YXIgUkdCX0ZBTExCQUNLID0gW05hTiwgTmFOLCBOYU4sIDFdO1xuZXhwb3J0IHZhciBSR0JfSk9JTiA9ICcsICc7XG5cbi8vIEdpdmVuIGEgc3RyaW5nLCB0aGlzIGF0dGVtcHRzIHRvIHJldHVybiBhIGZvcm1hdCB0aGF0IGNhbiBiZSBjb25zdW1lZCBieSBjaHJvbWEtanNcbmV4cG9ydCB2YXIgcGFyc2VDb2xvciA9IGZ1bmN0aW9uIHBhcnNlQ29sb3IoaW5wdXQpIHtcbiAgdmFyIHBhcnNlZDtcbiAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG4gIGlmIChpbnB1dC5pbmRleE9mKCcsJykgPiAwKSB7XG4gICAgaWYgKCEvXltcXHMsLjAtOV0qJC8udGVzdChpbnB1dCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgcmdiID0gaW5wdXQudHJpbSgpLnNwbGl0KCcsJykuZmlsdGVyKGZ1bmN0aW9uIChuKSB7XG4gICAgICByZXR1cm4gbiAhPT0gJyc7XG4gICAgfSkubWFwKE51bWJlcik7XG4gICAgcGFyc2VkID0gcmdiLmxlbmd0aCA+IDIgJiYgcmdiLmxlbmd0aCA8IDUgPyByZ2IgOiBIRVhfRkFMTEJBQ0s7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbi8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gaW5wdXQgd2lsbCByZXR1cm4gYSB2YWxpZCBjaHJvbWEtanMgb2JqZWN0IHdoZW4gZGVzaWduYXRlZCBhcyBvbmUgb2Zcbi8vIHRoZSBhY2NlcHRhYmxlIGZvcm1hdHM6IGhleCwgcmdiLCByZ2JhXG5leHBvcnQgdmFyIGNocm9tYVZhbGlkID0gZnVuY3Rpb24gY2hyb21hVmFsaWQoY29sb3IpIHtcbiAgdmFyIHBhcnNlZCA9IGNvbG9yO1xuICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xuICAgIHBhcnNlZCA9IHBhcnNlQ29sb3IoY29sb3IpO1xuICB9XG4gIGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG4gIGlmIChfdHlwZW9mKHBhcnNlZCkgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGNocm9tYS52YWxpZChwYXJzZWQsICdyZ2InKSB8fCBjaHJvbWEudmFsaWQocGFyc2VkLCAncmdiYScpO1xuICB9XG4gIHJldHVybiBjaHJvbWEudmFsaWQoY29sb3IsICdoZXgnKTtcbn07XG5cbi8vIEdpdmVuIGFuIGlucHV0IGFuZCBvcGFjaXR5IGNvbmZpZ3VyYXRpb24sIHRoaXMgcmV0dXJucyBhIHZhbGlkIGNocm9tYS1qcyBvYmplY3RcbmV4cG9ydCB2YXIgZ2V0Q2hyb21hQ29sb3IgPSBmdW5jdGlvbiBnZXRDaHJvbWFDb2xvcihpbnB1dCkge1xuICB2YXIgYWxsb3dPcGFjaXR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgdmFyIHBhcnNlZCA9IHBhcnNlQ29sb3IoaW5wdXQpO1xuICBpZiAocGFyc2VkICYmIGNocm9tYVZhbGlkKHBhcnNlZCkpIHtcbiAgICAvLyB0eXBlIGd1YXJkIGZvciB0aGUgZnVuY3Rpb24gb3ZlcmxvYWRcbiAgICB2YXIgY2hyb21hQ29sb3IgPSBfdHlwZW9mKHBhcnNlZCkgPT09ICdvYmplY3QnID8gY2hyb21hKHBhcnNlZCkgOiBjaHJvbWEocGFyc2VkKTtcbiAgICBpZiAoIWFsbG93T3BhY2l0eSAmJiBjaHJvbWFDb2xvci5hbHBoYSgpIDwgMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjaHJvbWFDb2xvcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbi8vIEdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBrZXkgdmFsdWUgcGFpcnMgc3RvcC9jb2xvciByZXR1cm5zIGEgY3NzIGxpbmVhci1ncmFkaWVudFxuLy8gT3IgZ2l2ZW4gYW4gYXJyYXkgb2YgaGV4IGNvbG9ycyByZXR1cm5zIGEgY3NzIGxpbmVhci1ncmFkaWVudFxuZXhwb3J0IHZhciBnZXRMaW5lYXJHcmFkaWVudCA9IGZ1bmN0aW9uIGdldExpbmVhckdyYWRpZW50KHBhbGV0dGUpIHtcbiAgdmFyIGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uID0gcGFsZXR0ZS5sZW5ndGggLSAxO1xuICB2YXIgbGluZWFyR3JhZGllbnQ7XG4gIHZhciBwYWxldHRlSGFzU3RvcHMgPSBwYWxldHRlLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICByZXR1cm4gX3R5cGVvZihpdGVtKSA9PT0gJ29iamVjdCc7XG4gIH0pO1xuICBpZiAocGFsZXR0ZUhhc1N0b3BzKSB7XG4gICAgdmFyIHBhbGV0dGVDb2xvclN0b3AgPSBwYWxldHRlO1xuICAgIGxpbmVhckdyYWRpZW50ID0gXCJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIFwiLmNvbmNhdChwYWxldHRlQ29sb3JTdG9wWzBdLmNvbG9yLCBcIiAwJSxcIik7XG4gICAgdmFyIGxhc3RDb2xvclN0b3BEZWNpbWFsID0gMTAwIC8gcGFsZXR0ZUNvbG9yU3RvcFtsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbl0uc3RvcDtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uOyBpKyspIHtcbiAgICAgIGxpbmVhckdyYWRpZW50ID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZUNvbG9yU3RvcFtpXS5jb2xvciwgXCIgXCIpLmNvbmNhdChNYXRoLmZsb29yKHBhbGV0dGVDb2xvclN0b3BbaV0uc3RvcCAqIGxhc3RDb2xvclN0b3BEZWNpbWFsKSwgXCIlLFwiKTtcbiAgICB9XG4gICAgdmFyIGxpbmVhckdyYWRpZW50U3R5bGUgPSBcIlwiLmNvbmNhdChsaW5lYXJHcmFkaWVudCwgXCIgXCIpLmNvbmNhdChwYWxldHRlQ29sb3JTdG9wW2xhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uXS5jb2xvciwgXCIgMTAwJSlcIik7XG4gICAgcmV0dXJuIGxpbmVhckdyYWRpZW50U3R5bGU7XG4gIH0gZWxzZSB7XG4gICAgbGluZWFyR3JhZGllbnQgPSBcImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgXCIuY29uY2F0KHBhbGV0dGVbMF0sIFwiIDAlLFwiKTtcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb247IF9pKyspIHtcbiAgICAgIGxpbmVhckdyYWRpZW50ID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZVtfaV0sIFwiIFwiKS5jb25jYXQoTWF0aC5mbG9vcigxMDAgKiBfaSAvIGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uKSwgXCIlLFwiKTtcbiAgICB9XG4gICAgdmFyIF9saW5lYXJHcmFkaWVudFN0eWxlID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZVtsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbl0sIFwiIDEwMCUpXCIpO1xuICAgIHJldHVybiBfbGluZWFyR3JhZGllbnRTdHlsZTtcbiAgfVxufTtcblxuLy8gR2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGtleSB2YWx1ZSBwYWlycyBzdG9wL2NvbG9yIG9yIGFuIGFycmF5IG9mIGhleCBjb2xvcnNcbi8vIHJldHVybnMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGtleSB2YWx1ZSBwYWlycyBjb2xvci93aWR0aFxuZXhwb3J0IHZhciBnZXRGaXhlZExpbmVhckdyYWRpZW50ID0gZnVuY3Rpb24gZ2V0Rml4ZWRMaW5lYXJHcmFkaWVudChwYWxldHRlKSB7XG4gIHZhciBwYWxldHRlSGFzU3RvcHMgPSBwYWxldHRlLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICByZXR1cm4gX3R5cGVvZihpdGVtKSA9PT0gJ29iamVjdCc7XG4gIH0pO1xuICBpZiAocGFsZXR0ZUhhc1N0b3BzKSB7XG4gICAgdmFyIHBhbGV0dGVDb2xvclN0b3AgPSBwYWxldHRlO1xuICAgIHZhciBmaXhlZExpbmVhckdyYWRpZW50V2l0aFN0b3BzID0gcGFsZXR0ZUNvbG9yU3RvcC5tYXAoZnVuY3Rpb24gKGNvbG9yU3RvcCwgaW5kZXgpIHtcbiAgICAgIHZhciBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbiA9IHBhbGV0dGUubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0Q29sb3JTdG9wRGVjaW1hbCA9IDEwMCAvIHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLnN0b3A7XG4gICAgICB2YXIgaXNGaXJzdENvbG9yU3RvcCA9IGluZGV4ID09PSAwO1xuICAgICAgdmFyIHByZXZpb3VzQ29sb3JTdG9wV2lkdGg7XG4gICAgICBpZiAoaXNGaXJzdENvbG9yU3RvcCkge1xuICAgICAgICBwcmV2aW91c0NvbG9yU3RvcFdpZHRoID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZXZpb3VzQ29sb3JTdG9wV2lkdGggPSBNYXRoLmZsb29yKHBhbGV0dGVDb2xvclN0b3BbaW5kZXggLSAxXS5zdG9wICogbGFzdENvbG9yU3RvcERlY2ltYWwpO1xuICAgICAgfVxuICAgICAgdmFyIGN1cnJlbnRDb2xvclN0b3BXaWR0aCA9IE1hdGguZmxvb3IoY29sb3JTdG9wLnN0b3AgKiBsYXN0Q29sb3JTdG9wRGVjaW1hbCk7XG4gICAgICB2YXIgY29sb3JTdG9wV2lkdGggPSBjdXJyZW50Q29sb3JTdG9wV2lkdGggLSBwcmV2aW91c0NvbG9yU3RvcFdpZHRoO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6IGNvbG9yU3RvcC5jb2xvcixcbiAgICAgICAgd2lkdGg6IFwiXCIuY29uY2F0KGNvbG9yU3RvcFdpZHRoLCBcIiVcIilcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpeGVkTGluZWFyR3JhZGllbnRXaXRoU3RvcHM7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9wYWxldHRlQ29sb3JTdG9wID0gcGFsZXR0ZTtcbiAgICB2YXIgcGFsZXR0ZVdpZHRoID0gMTAwIC8gcGFsZXR0ZS5sZW5ndGg7XG4gICAgdmFyIGZpeGVkTGluZWFyR3JhZGllbnRXaWR0aEF1dG8gPSBfcGFsZXR0ZUNvbG9yU3RvcC5tYXAoZnVuY3Rpb24gKGhleENvZGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBoZXhDb2RlLFxuICAgICAgICB3aWR0aDogXCJcIi5jb25jYXQocGFsZXR0ZVdpZHRoLCBcIiVcIilcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpeGVkTGluZWFyR3JhZGllbnRXaWR0aEF1dG87XG4gIH1cbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IGlzQ29sb3JEYXJrLCB0aW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpQnV0dG9uQ29sb3IsIGV1aUJ1dHRvbkZpbGxDb2xvciB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbmltcG9ydCB7IGNocm9tYVZhbGlkLCBwYXJzZUNvbG9yIH0gZnJvbSAnLi4vY29sb3JfcGlja2VyL3V0aWxzJztcbmV4cG9ydCB2YXIgZXVpQmFkZ2VDb2xvcnMgPSBmdW5jdGlvbiBldWlCYWRnZUNvbG9ycyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG4gIHJldHVybiB7XG4gICAgLy8gQ29sb3JzIHNoYXJlZCBiZXR3ZWVuIGJ1dHRvbnMgYW5kIGJhZGdlc1xuICAgIHByaW1hcnk6IGV1aUJ1dHRvbkZpbGxDb2xvcihldWlUaGVtZUNvbnRleHQsICdwcmltYXJ5JyksXG4gICAgc3VjY2VzczogZXVpQnV0dG9uRmlsbENvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ3N1Y2Nlc3MnKSxcbiAgICB3YXJuaW5nOiBldWlCdXR0b25GaWxsQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAnd2FybmluZycpLFxuICAgIGRhbmdlcjogZXVpQnV0dG9uRmlsbENvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ2RhbmdlcicpLFxuICAgIGFjY2VudDogZXVpQnV0dG9uRmlsbENvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ2FjY2VudCcpLFxuICAgIGRpc2FibGVkOiBldWlCdXR0b25Db2xvcihldWlUaGVtZUNvbnRleHQsICdkaXNhYmxlZCcpLFxuICAgIC8vIENvbG9ycyB1bmlxdWUgdG8gYmFkZ2VzXG4gICAgZGVmYXVsdDogZ2V0QmFkZ2VDb2xvcnMoZXVpVGhlbWVDb250ZXh0LCBldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSksXG4gICAgLy8gSG9sbG93IGhhcyBhIGJvcmRlciBhbmQgaXMgdXNlZCBmb3IgYXV0b2NvbXBsZXRlcnMgYW5kIGJldGEgYmFkZ2VzXG4gICAgaG9sbG93OiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGdldEJhZGdlQ29sb3JzKGV1aVRoZW1lQ29udGV4dCwgZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUpKSwge30sIHtcbiAgICAgIGJvcmRlckNvbG9yOiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHRpbnQoZXVpVGhlbWUuYm9yZGVyLmNvbG9yLCAwLjE1KSA6IGV1aVRoZW1lLmJvcmRlci5jb2xvclxuICAgIH0pLFxuICAgIC8vIENvbG9ycyB1c2VkIGJ5IGJldGEgYW5kIG5vdGlmaWNhdGlvbiBiYWRnZXNcbiAgICBzdWJkdWVkOiBnZXRCYWRnZUNvbG9ycyhldWlUaGVtZUNvbnRleHQsIHRpbnQoZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUsIDAuMykpLFxuICAgIGFjY2VudFRleHQ6IGdldEJhZGdlQ29sb3JzKGV1aVRoZW1lQ29udGV4dCwgZXVpVGhlbWUuY29sb3JzLmFjY2VudFRleHQpXG4gIH07XG59O1xuZXhwb3J0IHZhciBnZXRCYWRnZUNvbG9ycyA9IGZ1bmN0aW9uIGdldEJhZGdlQ29sb3JzKGV1aVRoZW1lQ29udGV4dCwgYmFja2dyb3VuZENvbG9yKSB7XG4gIHZhciBjb2xvciA9IGdldFRleHRDb2xvcihldWlUaGVtZUNvbnRleHQsIGJhY2tncm91bmRDb2xvcik7XG4gIHJldHVybiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgY29sb3I6IGNvbG9yXG4gIH07XG59O1xuZXhwb3J0IHZhciBnZXRUZXh0Q29sb3IgPSBmdW5jdGlvbiBnZXRUZXh0Q29sb3IoX3JlZiwgYmdDb2xvcikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICB2YXIgdGV4dENvbG9yID0gaXNDb2xvckRhcmsuYXBwbHkodm9pZCAwLCBfdG9Db25zdW1hYmxlQXJyYXkoY2hyb21hKGJnQ29sb3IpLnJnYigpKSkgPyBldWlUaGVtZS5jb2xvcnMuZ2hvc3QgOiBldWlUaGVtZS5jb2xvcnMuaW5rO1xuICByZXR1cm4gdGV4dENvbG9yO1xufTtcbmV4cG9ydCB2YXIgZ2V0Q29sb3JDb250cmFzdCA9IGZ1bmN0aW9uIGdldENvbG9yQ29udHJhc3QodGV4dENvbG9yLCBjb2xvcikge1xuICByZXR1cm4gY2hyb21hLmNvbnRyYXN0KHRleHRDb2xvciwgY29sb3IpO1xufTtcbmV4cG9ydCB2YXIgZ2V0SXNWYWxpZENvbG9yID0gZnVuY3Rpb24gZ2V0SXNWYWxpZENvbG9yKGNvbG9yKSB7XG4gIHJldHVybiBjaHJvbWFWYWxpZChwYXJzZUNvbG9yKGNvbG9yIHx8ICcnKSB8fCAnJyk7XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSwgZXVpRm9jdXNSaW5nLCBldWlUZXh0VHJ1bmNhdGUsIGxvZ2ljYWxDU1MsIGxvZ2ljYWxTaG9ydGhhbmRDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MsIG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUJhZGdlQ29sb3JzIH0gZnJvbSAnLi9jb2xvcl91dGlscyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxaHc1dmM0LWNsaWNrYWJsZVwiLFxuICBzdHlsZXM6IFwiY3Vyc29yOnBvaW50ZXI7bGFiZWw6Y2xpY2thYmxlO1wiXG59IDoge1xuICBuYW1lOiBcIjFodzV2YzQtY2xpY2thYmxlXCIsXG4gIHN0eWxlczogXCJjdXJzb3I6cG9pbnRlcjtsYWJlbDpjbGlja2FibGU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQmFkZ2VTdHlsZXMgPSBmdW5jdGlvbiBldWlCYWRnZVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgYmFkZ2VDb2xvcnMgPSBldWlCYWRnZUNvbG9ycyhldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgc2V0QmFkZ2VDb2xvclZhcnMgPSBmdW5jdGlvbiBzZXRCYWRnZUNvbG9yVmFycyhjb2xvcnMpIHtcbiAgICByZXR1cm4gXCJcXG4gICAgLS1ldWlCYWRnZVRleHRDb2xvcjogXCIuY29uY2F0KGNvbG9ycy5jb2xvciwgXCI7XFxuICAgIC0tZXVpQmFkZ2VCYWNrZ3JvdW5kQ29sb3I6IFwiKS5jb25jYXQoY29sb3JzLmJhY2tncm91bmRDb2xvciwgXCI7XFxuICBcIik7XG4gIH07XG4gIHJldHVybiB7XG4gICAgZXVpQmFkZ2U6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7XCIsIGxvZ2ljYWxTaG9ydGhhbmRDU1MoJ3BhZGRpbmcnLCBcIjAgXCIuY29uY2F0KGV1aVRoZW1lLnNpemUucykpLCBcIiBcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCIgZm9udC1zaXplOlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICd4cycpLmZvbnRTaXplLCBcIjtsaW5lLWhlaWdodDpcIiwgbWF0aFdpdGhVbml0cyhcbiAgICAvLyBBY2NvdW50IGZvciB0aGUgYm9yZGVyXG4gICAgW2V1aVRoZW1lLnNpemUuYmFzZSwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW5dLCBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgcmV0dXJuIHggKyB5ICogMjtcbiAgICB9KSwgXCI7Zm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0Lm1lZGl1bSwgXCI7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpkZWZhdWx0O2JvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6XCIsIG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAvIDI7XG4gICAgfSksIFwiO1wiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiY29sb3I6dmFyKC0tZXVpQmFkZ2VUZXh0Q29sb3IsIFwiLCBiYWRnZUNvbG9ycy5kZWZhdWx0LmNvbG9yLCBcIik7YmFja2dyb3VuZC1jb2xvcjp2YXIoXFxuICAgICAgICAtLWV1aUJhZGdlQmFja2dyb3VuZENvbG9yLFxcbiAgICAgICAgXCIsIGJhZGdlQ29sb3JzLmRlZmF1bHQuYmFja2dyb3VuZENvbG9yLCBcIlxcbiAgICAgICk7Kjo6c2VsZWN0aW9ue2NvbG9yOnZhcihcXG4gICAgICAgICAgLS1ldWlCYWRnZUJhY2tncm91bmRDb2xvcixcXG4gICAgICAgICAgXCIsIGJhZGdlQ29sb3JzLmRlZmF1bHQuYmFja2dyb3VuZENvbG9yLCBcIlxcbiAgICAgICAgKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcihcXG4gICAgICAgICAgLS1ldWlCYWRnZVRleHRDb2xvcixcXG4gICAgICAgICAgXCIsIGJhZGdlQ29sb3JzLmRlZmF1bHQuY29sb3IsIFwiXFxuICAgICAgICApO30mOmZvY3VzLXdpdGhpbntcIiwgZXVpRm9jdXNSaW5nKGV1aVRoZW1lQ29udGV4dCksIFwiO30mKy5ldWlCYWRnZXtcIiwgbG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7fTtsYWJlbDpldWlCYWRnZTtcIiksXG4gICAgY2xpY2thYmxlOiAvKiNfX1BVUkVfXyovY3NzKFwiJjpub3QoOmRpc2FibGVkKXsmOmhvdmVyLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9fSY6Zm9jdXN7XCIsIGV1aUZvY3VzUmluZyhldWlUaGVtZUNvbnRleHQpLCBcIjt9JjpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7fTtsYWJlbDpjbGlja2FibGU7XCIpLFxuICAgIC8vIENvbG9yc1xuICAgIGRlZmF1bHQ6IC8qI19fUFVSRV9fKi9jc3Moc2V0QmFkZ2VDb2xvclZhcnMoYmFkZ2VDb2xvcnMuZGVmYXVsdCksIFwiO2xhYmVsOmRlZmF1bHQ7XCIpLFxuICAgIGhvbGxvdzogLyojX19QVVJFX18qL2NzcyhzZXRCYWRnZUNvbG9yVmFycyhiYWRnZUNvbG9ycy5ob2xsb3cpLCBcIiBib3JkZXItY29sb3I6XCIsIGJhZGdlQ29sb3JzLmhvbGxvdy5ib3JkZXJDb2xvciwgXCI7O2xhYmVsOmhvbGxvdztcIiksXG4gICAgcHJpbWFyeTogLyojX19QVVJFX18qL2NzcyhzZXRCYWRnZUNvbG9yVmFycyhiYWRnZUNvbG9ycy5wcmltYXJ5KSwgXCI7bGFiZWw6cHJpbWFyeTtcIiksXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKHNldEJhZGdlQ29sb3JWYXJzKGJhZGdlQ29sb3JzLmFjY2VudCksIFwiO2xhYmVsOmFjY2VudDtcIiksXG4gICAgd2FybmluZzogLyojX19QVVJFX18qL2NzcyhzZXRCYWRnZUNvbG9yVmFycyhiYWRnZUNvbG9ycy53YXJuaW5nKSwgXCI7bGFiZWw6d2FybmluZztcIiksXG4gICAgZGFuZ2VyOiAvKiNfX1BVUkVfXyovY3NzKHNldEJhZGdlQ29sb3JWYXJzKGJhZGdlQ29sb3JzLmRhbmdlciksIFwiO2xhYmVsOmRhbmdlcjtcIiksXG4gICAgc3VjY2VzczogLyojX19QVVJFX18qL2NzcyhzZXRCYWRnZUNvbG9yVmFycyhiYWRnZUNvbG9ycy5zdWNjZXNzKSwgXCI7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgZGlzYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3Moc2V0QmFkZ2VDb2xvclZhcnMoYmFkZ2VDb2xvcnMuZGlzYWJsZWQpLCBcIio6OnNlbGVjdGlvbntjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsIFwiO307bGFiZWw6ZGlzYWJsZWQ7XCIpLFxuICAgIC8vIENvbnRlbnQgd3JhcHBlclxuICAgIGV1aUJhZGdlX19jb250ZW50OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoXG4gICAgLy8gRW5zdXJlIHByb3BlciBoZWlnaHQgaW4gY2FzZSBvZiBqdXN0IGRpc3BsYXlpbmcgYW4gaWNvblxuICAgICdtaW4taGVpZ2h0JywgXCJcIi5jb25jYXQobWF0aFdpdGhVbml0cyhldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBldWlUaGVtZS5iYXNlICsgeCAqIDI7XG4gICAgfSkpKSwgXCIgZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtvdmVyZmxvdzpoaWRkZW47O2xhYmVsOmV1aUJhZGdlX19jb250ZW50O1wiKSxcbiAgICAvLyBUZXh0XG4gICAgdGV4dDoge1xuICAgICAgZXVpQmFkZ2VfX3RleHQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dFRydW5jYXRlKCksIFwiIGN1cnNvcjppbmhlcml0OztsYWJlbDpldWlCYWRnZV9fdGV4dDtcIiksXG4gICAgICBjbGlja2FibGU6IF9yZWZcbiAgICB9LFxuICAgIC8vIEljb25cbiAgICBpY29uOiB7XG4gICAgICBldWlCYWRnZV9faWNvbjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlCYWRnZV9faWNvbjtcIiksXG4gICAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhcIiY6bm90KDpvbmx5LWNoaWxkKXtcIiwgbG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7fTtsYWJlbDpyaWdodDtcIiksXG4gICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwiJjpub3QoOm9ubHktY2hpbGQpe1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tcmlnaHQnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7fTtsYWJlbDpsZWZ0O1wiKVxuICAgIH0sXG4gICAgLy8gQ2xpY2thYmxlIGljb25zIChpY29uT25DbGljaylcbiAgICBpY29uQnV0dG9uOiB7XG4gICAgICBldWlCYWRnZV9faWNvbkJ1dHRvbjogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTowOyY6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpcIiwgdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmdob3N0LCAwLjgpLCBcIjtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmluaywgXCI7Ym9yZGVyLXJhZGl1czpcIiwgbWF0aFdpdGhVbml0cyhldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAvIDI7XG4gICAgICB9KSwgXCI7fSY6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO30uZXVpQmFkZ2VfX2ljb257bWFyZ2luOjAhaW1wb3J0YW50O307bGFiZWw6ZXVpQmFkZ2VfX2ljb25CdXR0b247XCIpLFxuICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7O2xhYmVsOnJpZ2h0O1wiKSxcbiAgICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLXJpZ2h0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiOztsYWJlbDpsZWZ0O1wiKVxuICAgIH0sXG4gICAgLy8gVXNlZCBpbiBiYWRnZXMgd2l0aCBib3RoIG9uQ2xpY2sgJiBpY29uT25DbGlja1xuICAgIGV1aUJhZGdlX19jaGlsZEJ1dHRvbjogLyojX19QVVJFX18qL2NzcyhldWlUZXh0VHJ1bmNhdGUoKSwgXCIgdGV4dC1hbGlnbjppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDtjb2xvcjppbmhlcml0OyY6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO30mOm5vdCg6ZGlzYWJsZWQpeyY6aG92ZXIsJjpmb2N1c3t0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO319O2xhYmVsOmV1aUJhZGdlX19jaGlsZEJ1dHRvbjtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJsYWJlbFwiLCBcImNvbG9yXCIsIFwidG9vbHRpcENvbnRlbnRcIiwgXCJ0b29sdGlwUG9zaXRpb25cIiwgXCJhbmNob3JQcm9wc1wiLCBcInRpdGxlXCIsIFwiaWNvblR5cGVcIiwgXCJvbkNsaWNrXCIsIFwib25DbGlja0FyaWFMYWJlbFwiLCBcImhyZWZcIiwgXCJyZWxcIiwgXCJ0YXJnZXRcIiwgXCJzaXplXCIsIFwiYWxpZ25tZW50XCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uLy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IGV1aUJldGFCYWRnZVN0eWxlcyB9IGZyb20gJy4vYmV0YV9iYWRnZS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ09MT1JTID0gWydhY2NlbnQnLCAnc3ViZHVlZCcsICdob2xsb3cnXTtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ3MnLCAnbSddO1xuZXhwb3J0IHZhciBBTElHTk1FTlRTID0gWydiYXNlbGluZScsICdtaWRkbGUnXTtcblxuLy8gYGxhYmVsYCBwcm9wIGNhbiBiZSBhIGBSZWFjdE5vZGVgIG9ubHkgaWYgYHRpdGxlYCBvciBgdG9vbHRpcENvbnRlbnRgIGlzIHByb3ZpZGVkXG5cbi8vIE11c3QgYmUgYHR5cGVgIGluc3RlYWQgb2YgYGludGVyZmFjZWBcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvNjA4NVxuXG5leHBvcnQgdmFyIEV1aUJldGFCYWRnZSA9IGZ1bmN0aW9uIEV1aUJldGFCYWRnZShfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnaG9sbG93JyA6IF9yZWYkY29sb3IsXG4gICAgdG9vbHRpcENvbnRlbnQgPSBfcmVmLnRvb2x0aXBDb250ZW50LFxuICAgIF9yZWYkdG9vbHRpcFBvc2l0aW9uID0gX3JlZi50b29sdGlwUG9zaXRpb24sXG4gICAgdG9vbHRpcFBvc2l0aW9uID0gX3JlZiR0b29sdGlwUG9zaXRpb24gPT09IHZvaWQgMCA/ICd0b3AnIDogX3JlZiR0b29sdGlwUG9zaXRpb24sXG4gICAgYW5jaG9yUHJvcHMgPSBfcmVmLmFuY2hvclByb3BzLFxuICAgIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICBpY29uVHlwZSA9IF9yZWYuaWNvblR5cGUsXG4gICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICBvbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgcmVsID0gX3JlZi5yZWwsXG4gICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICBfcmVmJGFsaWdubWVudCA9IF9yZWYuYWxpZ25tZW50LFxuICAgIGFsaWdubWVudCA9IF9yZWYkYWxpZ25tZW50ID09PSB2b2lkIDAgPyAnYmFzZWxpbmUnIDogX3JlZiRhbGlnbm1lbnQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc2luZ2xlTGV0dGVyID0gISEodHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyAmJiBsYWJlbC5sZW5ndGggPT09IDEpO1xuICB2YXIgaXNDaXJjdWxhciA9IGljb25UeXBlIHx8IHNpbmdsZUxldHRlcjtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCZXRhQmFkZ2UnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpQmV0YUJhZGdlU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpQmV0YUJhZGdlLCBzdHlsZXNbY29sb3JdLCBzdHlsZXNbc2l6ZV0sIHN0eWxlc1thbGlnbm1lbnRdLCBpc0NpcmN1bGFyID8gc3R5bGVzLmJhZGdlU2l6ZXMuY2lyY2xlW3NpemVdIDogc3R5bGVzLmJhZGdlU2l6ZXMuZGVmYXVsdFtzaXplXV07XG4gIHZhciBpY29uO1xuICBpZiAoaWNvblR5cGUpIHtcbiAgICBpY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjc3M6IHN0eWxlcy5ldWlCZXRhQmFkZ2VfX2ljb24sXG4gICAgICBjbGFzc05hbWU6IFwiZXVpQmV0YUJhZGdlX19pY29uXCIsXG4gICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgIHNpemU6IHNpemUgPT09ICdtJyA/ICdtJyA6ICdzJyxcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuICAgIH0pO1xuICB9XG4gIHZhciBFbGVtZW50ID0gaHJlZiA/ICdhJyA6ICdidXR0b24nO1xuICB2YXIgcmVsT2JqID0ge307XG4gIGlmIChocmVmKSB7XG4gICAgcmVsT2JqLmhyZWYgPSBocmVmO1xuICAgIHJlbE9iai50YXJnZXQgPSB0YXJnZXQ7XG4gICAgcmVsT2JqLnJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICB9XG4gIGlmIChvbkNsaWNrKSB7XG4gICAgcmVsT2JqLm9uQ2xpY2sgPSBvbkNsaWNrO1xuICB9XG4gIHZhciBjb250ZW50O1xuICBpZiAob25DbGljayB8fCBocmVmKSB7XG4gICAgY29udGVudCA9IF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWxhYmVsXCI6IG9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIHRpdGxlOiB0eXBlb2YgbGFiZWwgPT09ICdzdHJpbmcnID8gbGFiZWwgOiB0aXRsZVxuICAgIH0sIHJlbE9iaiwgcmVzdCksIGljb24gfHwgbGFiZWwpO1xuICAgIGlmICh0b29sdGlwQ29udGVudCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgICAgICBwb3NpdGlvbjogdG9vbHRpcFBvc2l0aW9uLFxuICAgICAgICBjb250ZW50OiB0b29sdGlwQ29udGVudCxcbiAgICAgICAgdGl0bGU6IHRpdGxlIHx8IGxhYmVsLFxuICAgICAgICBhbmNob3JQcm9wczogYW5jaG9yUHJvcHNcbiAgICAgIH0sIGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgYW5jaG9yUHJvcHMsIGNvbnRlbnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodG9vbHRpcENvbnRlbnQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIHtcbiAgICAgICAgcG9zaXRpb246IHRvb2x0aXBQb3NpdGlvbixcbiAgICAgICAgY29udGVudDogdG9vbHRpcENvbnRlbnQsXG4gICAgICAgIHRpdGxlOiB0aXRsZSB8fCBsYWJlbCxcbiAgICAgICAgYW5jaG9yUHJvcHM6IGFuY2hvclByb3BzXG4gICAgICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICB9LCByZXN0KSwgaWNvbiB8fCBsYWJlbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3BhblRpdGxlID0gdGl0bGUgfHwgbGFiZWw7XG4gICAgICBpZiAoc3BhblRpdGxlICYmIHR5cGVvZiBzcGFuVGl0bGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIk9ubHkgc3RyaW5nIHRpdGxlcyBhcmUgcGVybWl0dGVkIG9uIGJhZGdlcyB0aGF0IGRvIG5vdCB1c2UgdG9vbHRpcHMuIEZvdW5kOiBcIi5jb25jYXQoX3R5cGVvZihzcGFuVGl0bGUpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgYW5jaG9yUHJvcHMsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICB0aXRsZTogc3BhblRpdGxlLFxuICAgICAgICBjc3M6IGNzc1N0eWxlc1xuICAgICAgfSwgcmVzdCksIGljb24gfHwgbGFiZWwpKTtcbiAgICB9XG4gIH1cbn07XG5FdWlCZXRhQmFkZ2UucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgb25DbGljayBidXR0b25cbiAgICAgKi9cbiAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFN1cHBseSBhbiBpY29uIHR5cGUgaWYgdGhlIGJhZGdlIHNob3VsZCBqdXN0IGJlIGFuIGljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIE9uZSB3b3JkIGxhYmVsIGxpa2UgXCJCZXRhXCIgb3IgXCJMYWJcIlxuICAgICAqL1xuICAvKipcbiAgICAgKiBPbmUgd29yZCBsYWJlbCBsaWtlIFwiQmV0YVwiIG9yIFwiTGFiXCJcbiAgICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBDb250ZW50IGZvciB0aGUgdG9vbHRpcFxuICAgICAqL1xuICB0b29sdGlwQ29udGVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXSldKSxcbiAgLyoqXG4gICAgICogQ3VzdG9tIHBvc2l0aW9uIG9mIHRoZSB0b29sdGlwXG4gICAgICovXG4gIHRvb2x0aXBQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSksXG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSBzcGFuIHdyYXBwaW5nIHRoZSBiYWRnZVxuICAgICAqL1xuICBhbmNob3JQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgLyoqXG4gICAgICogT3B0aW9uYWwgdGl0bGUgd2lsbCBiZSBzdXBwbGllZCBhcyB0b29sdGlwIHRpdGxlIG9yIHRpdGxlIGF0dHJpYnV0ZVxuICAgICAqIG90aGVyd2lzZSB0aGUgbGFiZWwgd2lsbCBiZSB1c2VkXG4gICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmddKV0pLFxuICAvKipcbiAgICAgKiBBY2NlcHRzIGFjY2VudCwgc3ViZHVlZCBhbmQgaG9sbG93LlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogU2V0cyB0aGUgYHZlcnRpY2FsLWFsaWduYCBDU1MgcHJvcGVydHlcbiAgICAgKi9cbiAgYWxpZ25tZW50OiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBldWlGb2N1c1JpbmcsIGV1aUZvbnRTaXplRnJvbVNjYWxlLCBldWlUZXh0VHJ1bmNhdGUsIG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlCYWRnZUNvbG9ycyB9IGZyb20gJy4uL2NvbG9yX3V0aWxzJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImwxbm1lNy1taWRkbGVcIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOm1pZGRsZTtsYWJlbDptaWRkbGU7XCJcbn0gOiB7XG4gIG5hbWU6IFwibDFubWU3LW1pZGRsZVwiLFxuICBzdHlsZXM6IFwidmVydGljYWwtYWxpZ246bWlkZGxlO2xhYmVsOm1pZGRsZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE5aGV4aHktYmFzZWxpbmVcIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2xhYmVsOmJhc2VsaW5lO1wiXG59IDoge1xuICBuYW1lOiBcIjE5aGV4aHktYmFzZWxpbmVcIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2xhYmVsOmJhc2VsaW5lO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwicHpwcXFnLWV1aUJldGFCYWRnZV9faWNvblwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLCAtMXB4KTtsYWJlbDpldWlCZXRhQmFkZ2VfX2ljb247XCJcbn0gOiB7XG4gIG5hbWU6IFwicHpwcXFnLWV1aUJldGFCYWRnZV9faWNvblwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLCAtMXB4KTtsYWJlbDpldWlCZXRhQmFkZ2VfX2ljb247XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQmV0YUJhZGdlU3R5bGVzID0gZnVuY3Rpb24gZXVpQmV0YUJhZGdlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgdmFyIGJhZGdlQ29sb3JzID0gZXVpQmFkZ2VDb2xvcnMoZXVpVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuIHtcbiAgICBldWlCZXRhQmFkZ2U6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5zaXplLmwsIFwiO2N1cnNvcjpkZWZhdWx0O2ZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5ib2xkLCBcIjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6MC4wNWVtO3RleHQtYWxpZ246Y2VudGVyO1wiLCBldWlUZXh0VHJ1bmNhdGUoKSwgXCIgJjpmb2N1c3tcIiwgZXVpRm9jdXNSaW5nKGV1aVRoZW1lQ29udGV4dCwgJ291dHNldCcsIHtcbiAgICAgIGNvbG9yOiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IGV1aVRoZW1lLmNvbG9ycy5naG9zdCA6IGV1aVRoZW1lLmNvbG9ycy5pbmtcbiAgICB9KSwgXCI7fTtsYWJlbDpldWlCZXRhQmFkZ2U7XCIpLFxuICAgIC8vIENvbG9yc1xuICAgIGFjY2VudDogLyojX19QVVJFX18qL2NzcyhiYWRnZUNvbG9ycy5hY2NlbnRUZXh0LCBcIjtsYWJlbDphY2NlbnQ7XCIpLFxuICAgIHN1YmR1ZWQ6IC8qI19fUFVSRV9fKi9jc3MoYmFkZ2VDb2xvcnMuc3ViZHVlZCwgXCI7bGFiZWw6c3ViZHVlZDtcIiksXG4gICAgaG9sbG93OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGJhZGdlQ29sb3JzLmhvbGxvdy5jb2xvciwgXCI7YmFja2dyb3VuZC1jb2xvcjpcIiwgYmFkZ2VDb2xvcnMuaG9sbG93LmJhY2tncm91bmRDb2xvciwgXCI7Ym94LXNoYWRvdzppbnNldCAwIDAgMCBcIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIFwiLCBiYWRnZUNvbG9ycy5ob2xsb3cuYm9yZGVyQ29sb3IsIFwiOztsYWJlbDpob2xsb3c7XCIpLFxuICAgIC8vIEZvbnQgc2l6ZXNcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC1zaXplOlwiLCBldWlGb250U2l6ZUZyb21TY2FsZSgneHMnLCBldWlUaGVtZSksIFwiO2xpbmUtaGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplLmwsIFwiOztsYWJlbDptO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC1zaXplOjAuNjI1cmVtO2xpbmUtaGVpZ2h0OlwiLCBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUueHMsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCArIGV1aVRoZW1lLmJhc2U7XG4gICAgfSksIFwiOztsYWJlbDpzO1wiKSxcbiAgICAvLyBQYWRkaW5nL3dpZHRoIHNpemVzXG4gICAgYmFkZ2VTaXplczoge1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBtOiBcIlxcbiAgICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUuYmFzZSkpLFxuICAgICAgICBzOiBcIlxcbiAgICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUubSkpXG4gICAgICB9LFxuICAgICAgLy8gV2hlbiBpdCdzIGp1c3QgYW4gaWNvbiBvciBhIHNpbmdsZSBsZXR0ZXIsIG1ha2UgdGhlIGJhZGdlIGEgY2lyY2xlXG4gICAgICBjaXJjbGU6IHtcbiAgICAgICAgbTogXCJcXG4gICAgICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgZXVpVGhlbWUuc2l6ZS5sKSwgXCJcXG4gICAgICAgIFwiKSxcbiAgICAgICAgczogXCJcXG4gICAgICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLnhzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgIHJldHVybiB4ICsgZXVpVGhlbWUuYmFzZTtcbiAgICAgICAgfSkpLCBcIlxcbiAgICAgICAgXCIpXG4gICAgICB9XG4gICAgfSxcbiAgICBldWlCZXRhQmFkZ2VfX2ljb246IF9yZWYzLFxuICAgIC8vIEFsaWdubWVudHNcbiAgICBiYXNlbGluZTogX3JlZjIsXG4gICAgbWlkZGxlOiBfcmVmXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImNsYXNzTmFtZVwiLCBcImhyZWZcIiwgXCJleHRlcm5hbFwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInR5cGVcIiwgXCJvbkNsaWNrXCIsIFwiZGlzYWJsZWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCwgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBFdWlFeHRlcm5hbExpbmtJY29uIH0gZnJvbSAnLi9leHRlcm5hbF9saW5rX2ljb24nO1xuaW1wb3J0IHsgZXVpTGlua1N0eWxlcyB9IGZyb20gJy4vbGluay5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ09MT1JTID0gWydwcmltYXJ5JywgJ3N1YmR1ZWQnLCAnc3VjY2VzcycsICdhY2NlbnQnLCAnZGFuZ2VyJywgJ3dhcm5pbmcnLCAndGV4dCcsICdnaG9zdCddO1xudmFyIEV1aUxpbmsgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGNvbG9yLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgZXh0ZXJuYWwgPSBfcmVmLmV4dGVybmFsLFxuICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIHJlbCA9IF9yZWYucmVsLFxuICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYkdHlwZSxcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgIF9kaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpTGlua1N0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUxpbmtdO1xuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIGlmIChocmVmID09PSB1bmRlZmluZWQgfHwgIWlzSHJlZlZhbGlkKSB7XG4gICAgdmFyIGJ1dHRvblByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aUxpbmsnLCBjbGFzc05hbWUpLFxuICAgICAgY3NzOiBbY3NzU3R5bGVzLCBkaXNhYmxlZCA/IFtzdHlsZXMuZGlzYWJsZWRdIDogc3R5bGVzW2NvbG9yXV0sXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICAgIH0sIHJlc3QpO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgYnV0dG9uUHJvcHMpLCBjaGlsZHJlbik7XG4gIH1cbiAgdmFyIHNlY3VyZVJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgaHJlZjogaHJlZixcbiAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICByZWw6IHJlbFxuICB9KTtcbiAgdmFyIGFuY2hvclByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlMaW5rJywgY2xhc3NOYW1lKSxcbiAgICBjc3M6IFtjc3NTdHlsZXMsIHN0eWxlc1tjb2xvcl1dLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgcmVsOiBzZWN1cmVSZWwsXG4gICAgb25DbGljazogb25DbGlja1xuICB9LCByZXN0KTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZlxuICB9LCBhbmNob3JQcm9wcyksIGNoaWxkcmVuLCBfX19FbW90aW9uSlNYKEV1aUV4dGVybmFsTGlua0ljb24sIHtcbiAgICBleHRlcm5hbDogZXh0ZXJuYWwsXG4gICAgdGFyZ2V0OiB0YXJnZXRcbiAgfSkpO1xufSk7XG5FdWlMaW5rLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIiwgXCJyZXNldFwiLCBcInN1Ym1pdFwiXSksXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSB0byBzaG93IGFuIGljb24gaW5kaWNhdGluZyB0aGF0IGl0IGlzIGFuIGV4dGVybmFsIGxpbms7XG4gICAgICogRGVmYXVsdHMgdG8gdHJ1ZSBpZiBgdGFyZ2V0PVwiX2JsYW5rXCJgXG4gICAgICovXG4gIGV4dGVybmFsOiBQcm9wVHlwZXMuYm9vbFxufTtcbkV1aUxpbmsuZGlzcGxheU5hbWUgPSAnRXVpTGluayc7XG5leHBvcnQgeyBFdWlMaW5rIH07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0YXJnZXRcIiwgXCJleHRlcm5hbFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgbG9naWNhbFN0eWxlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuXG4vKipcbiAqIERSWSB1dGlsIGZvciBpbmRpY2F0aW5nIGV4dGVybmFsIGxpbmtzIGJvdGggdmlhIGljb24gYW5kIHRvXG4gKiBzY3JlZW4gcmVhZGVycy4gVXNlZCBpbnRlcm5hbGx5IGJ5IGF0IEV1aUxpbmsgYW5kIEV1aUxpc3RHcm91cEl0ZW1cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBpY29uU3R5bGUgPSBmdW5jdGlvbiBpY29uU3R5bGUoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICByZXR1cm4gbG9naWNhbFN0eWxlKCdtYXJnaW4tbGVmdCcsIGV1aVRoZW1lLnNpemUueHMpO1xufTtcbmV4cG9ydCB2YXIgRXVpRXh0ZXJuYWxMaW5rSWNvbiA9IGZ1bmN0aW9uIEV1aUV4dGVybmFsTGlua0ljb24oX3JlZjIpIHtcbiAgdmFyIHRhcmdldCA9IF9yZWYyLnRhcmdldCxcbiAgICBleHRlcm5hbCA9IF9yZWYyLmV4dGVybmFsLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZCk7XG4gIHZhciBpY29uQ3NzU3R5bGUgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhpY29uU3R5bGUpO1xuICB2YXIgc2hvd0V4dGVybmFsTGlua0ljb24gPSB0YXJnZXQgPT09ICdfYmxhbmsnICYmIGV4dGVybmFsICE9PSBmYWxzZSB8fCBleHRlcm5hbCA9PT0gdHJ1ZTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHNob3dFeHRlcm5hbExpbmtJY29uICYmIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwgX2V4dGVuZHMoe1xuICAgIGNzczogaWNvbkNzc1N0eWxlLFxuICAgIHNpemU6IFwic1wiLFxuICAgIHR5cGU6IFwicG9wb3V0XCIsXG4gICAgcm9sZTogXCJwcmVzZW50YXRpb25cIlxuICB9LCByZXN0KSksIHRhcmdldCA9PT0gJ19ibGFuaycgPyBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aUV4dGVybmFsTGlua0ljb24ubmV3VGFyZ2V0LnNjcmVlblJlYWRlck9ubHlUZXh0XCIsXG4gICAgZGVmYXVsdDogXCIoZXh0ZXJuYWwsIG9wZW5zIGluIGEgbmV3IHRhYiBvciB3aW5kb3cpXCJcbiAgfSkpKSA6IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpRXh0ZXJuYWxMaW5rSWNvbi5leHRlcm5hbFRhcmdldC5zY3JlZW5SZWFkZXJPbmx5VGV4dFwiLFxuICAgIGRlZmF1bHQ6IFwiKGV4dGVybmFsKVwiXG4gIH0pKSkpKSk7XG59O1xuRXVpRXh0ZXJuYWxMaW5rSWNvbi5wcm9wVHlwZXMgPSB7XG4gIHRhcmdldDogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gc2hvdyBhbiBpY29uIGluZGljYXRpbmcgdGhhdCBpdCBpcyBhbiBleHRlcm5hbCBsaW5rO1xuICAgICAqIERlZmF1bHRzIHRvIHRydWUgaWYgYHRhcmdldD1cIl9ibGFua1wiYFxuICAgICAqL1xuICBleHRlcm5hbDogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNsb3NlUG9wb3ZlclwiLCBcImFuY2hvclBvc2l0aW9uXCIsIFwiYXR0YWNoVG9BbmNob3JcIiwgXCJyZXBvc2l0aW9uVG9Dcm9zc0F4aXNcIiwgXCJkaXNwbGF5XCIsIFwicGFuZWxQYWRkaW5nU2l6ZVwiLCBcImNsb3NlT25TY3JvbGxcIiwgXCJvd25Gb2N1c1wiLCBcImRpc2FibGVGb2N1c1RyYXBcIiwgXCJmb2N1c1RyYXBQcm9wc1wiLCBcImlucHV0XCIsIFwiZnVsbFdpZHRoXCIsIFwicGFuZWxNaW5XaWR0aFwiLCBcIm9uUGFuZWxSZXNpemVcIiwgXCJpbnB1dFJlZlwiLCBcInBhbmVsUmVmXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VSZWYsIGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHRhYmJhYmxlIH0gZnJvbSAndGFiYmFibGUnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGtleXMsIHVzZUNvbWJpbmVkUmVmcywgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VSZXNpemVPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyL3Jlc2l6ZV9vYnNlcnZlcic7XG5pbXBvcnQgeyBFdWlGb2N1c1RyYXAgfSBmcm9tICcuLi9mb2N1c190cmFwJztcbmltcG9ydCB7IGV1aUZvcm1NYXhXaWR0aCB9IGZyb20gJy4uL2Zvcm0vZm9ybS5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpUG9wb3ZlciB9IGZyb20gJy4vcG9wb3Zlcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLy8gVXNlZCBieSBjaGlsZCBjb21wb25lbnRzIHRoYXQgd2FudCB0byBrbm93IHRoZSBwYXJlbnQgcG9wb3ZlciB3aWR0aFxuZXhwb3J0IHZhciBFdWlJbnB1dFBvcG92ZXJXaWR0aENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCgwKTtcbmV4cG9ydCB2YXIgRXVpSW5wdXRQb3BvdmVyID0gZnVuY3Rpb24gRXVpSW5wdXRQb3BvdmVyKF9yZWYpIHtcbiAgdmFyIF9wcm9wcyRwYW5lbFByb3BzO1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGNsb3NlUG9wb3ZlciA9IF9yZWYuY2xvc2VQb3BvdmVyLFxuICAgIF9yZWYkYW5jaG9yUG9zaXRpb24gPSBfcmVmLmFuY2hvclBvc2l0aW9uLFxuICAgIGFuY2hvclBvc2l0aW9uID0gX3JlZiRhbmNob3JQb3NpdGlvbiA9PT0gdm9pZCAwID8gJ2Rvd25MZWZ0JyA6IF9yZWYkYW5jaG9yUG9zaXRpb24sXG4gICAgX3JlZiRhdHRhY2hUb0FuY2hvciA9IF9yZWYuYXR0YWNoVG9BbmNob3IsXG4gICAgYXR0YWNoVG9BbmNob3IgPSBfcmVmJGF0dGFjaFRvQW5jaG9yID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRhdHRhY2hUb0FuY2hvcixcbiAgICBfcmVmJHJlcG9zaXRpb25Ub0Nyb3MgPSBfcmVmLnJlcG9zaXRpb25Ub0Nyb3NzQXhpcyxcbiAgICByZXBvc2l0aW9uVG9Dcm9zc0F4aXMgPSBfcmVmJHJlcG9zaXRpb25Ub0Nyb3MgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRyZXBvc2l0aW9uVG9Dcm9zLFxuICAgIF9yZWYkZGlzcGxheSA9IF9yZWYuZGlzcGxheSxcbiAgICBkaXNwbGF5ID0gX3JlZiRkaXNwbGF5ID09PSB2b2lkIDAgPyAnYmxvY2snIDogX3JlZiRkaXNwbGF5LFxuICAgIF9yZWYkcGFuZWxQYWRkaW5nU2l6ZSA9IF9yZWYucGFuZWxQYWRkaW5nU2l6ZSxcbiAgICBwYW5lbFBhZGRpbmdTaXplID0gX3JlZiRwYW5lbFBhZGRpbmdTaXplID09PSB2b2lkIDAgPyAncycgOiBfcmVmJHBhbmVsUGFkZGluZ1NpemUsXG4gICAgX3JlZiRjbG9zZU9uU2Nyb2xsID0gX3JlZi5jbG9zZU9uU2Nyb2xsLFxuICAgIGNsb3NlT25TY3JvbGwgPSBfcmVmJGNsb3NlT25TY3JvbGwgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRjbG9zZU9uU2Nyb2xsLFxuICAgIF9yZWYkb3duRm9jdXMgPSBfcmVmLm93bkZvY3VzLFxuICAgIG93bkZvY3VzID0gX3JlZiRvd25Gb2N1cyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJG93bkZvY3VzLFxuICAgIF9yZWYkZGlzYWJsZUZvY3VzVHJhcCA9IF9yZWYuZGlzYWJsZUZvY3VzVHJhcCxcbiAgICBkaXNhYmxlRm9jdXNUcmFwID0gX3JlZiRkaXNhYmxlRm9jdXNUcmFwID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkZGlzYWJsZUZvY3VzVHJhcCxcbiAgICBmb2N1c1RyYXBQcm9wcyA9IF9yZWYuZm9jdXNUcmFwUHJvcHMsXG4gICAgaW5wdXQgPSBfcmVmLmlucHV0LFxuICAgIF9yZWYkZnVsbFdpZHRoID0gX3JlZi5mdWxsV2lkdGgsXG4gICAgZnVsbFdpZHRoID0gX3JlZiRmdWxsV2lkdGggPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRmdWxsV2lkdGgsXG4gICAgX3JlZiRwYW5lbE1pbldpZHRoID0gX3JlZi5wYW5lbE1pbldpZHRoLFxuICAgIHBhbmVsTWluV2lkdGggPSBfcmVmJHBhbmVsTWluV2lkdGggPT09IHZvaWQgMCA/IDAgOiBfcmVmJHBhbmVsTWluV2lkdGgsXG4gICAgb25QYW5lbFJlc2l6ZSA9IF9yZWYub25QYW5lbFJlc2l6ZSxcbiAgICBfaW5wdXRSZWYgPSBfcmVmLmlucHV0UmVmLFxuICAgIF9wYW5lbFJlZiA9IF9yZWYucGFuZWxSZWYsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc25hbWVzKCdldWlJbnB1dFBvcG92ZXInLCBjbGFzc05hbWUpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgZm9ybU1heFdpZHRoID0gZXVpRm9ybU1heFdpZHRoKGV1aVRoZW1lKTtcblxuICAvKipcbiAgICogUmVmIHNldHVwXG4gICAqL1xuXG4gIHZhciBwb3BvdmVyQ2xhc3NSZWYgPSB1c2VSZWYobnVsbCk7XG4gIC8vIFRoZSBpbnB1dEVsIHN0YXRlIGVuc3VyZXMgdGhhdCB3aWR0aCBpcyBjb3JyZWN0bHkgdHJhY2tlZCBvbiBpbml0aWFsIGxvYWRcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG51bGwpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGlucHV0RWwgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldElucHV0RWwgPSBfdXNlU3RhdGUyWzFdO1xuICAvLyBUaGUgcGFuZWxFbCBzdGF0ZSBlbnN1cmVzIHRoYXQgd2lkdGggaXMgY29ycmVjdGx5IHNldCBldmVyeSB0aW1lIHRoZSBwb3BvdmVyIG9wZW5zXG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIHBhbmVsRWwgPSBfdXNlU3RhdGU0WzBdLFxuICAgIHNldFBhbmVsRWwgPSBfdXNlU3RhdGU0WzFdO1xuICB2YXIgaW5wdXRSZWYgPSB1c2VDb21iaW5lZFJlZnMoW3NldElucHV0RWwsIF9pbnB1dFJlZl0pO1xuICB2YXIgcGFuZWxSZWYgPSB1c2VDb21iaW5lZFJlZnMoW3NldFBhbmVsRWwsIF9wYW5lbFJlZl0pO1xuXG4gIC8qKlxuICAgKiBTaXppbmcvd2lkdGggbG9naWNcbiAgICovXG5cbiAgdmFyIGlucHV0V2lkdGggPSB1c2VSZXNpemVPYnNlcnZlcihpbnB1dEVsLCAnd2lkdGgnKS53aWR0aDtcbiAgdmFyIHBhbmVsV2lkdGggPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5wdXRXaWR0aCA8IHBhbmVsTWluV2lkdGggPyBwYW5lbE1pbldpZHRoIDogaW5wdXRXaWR0aDtcbiAgfSwgW3BhbmVsTWluV2lkdGgsIGlucHV0V2lkdGhdKTtcblxuICAvLyBSZXNpemUgY2FsbGJhY2tcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBvblBhbmVsUmVzaXplID09PSBudWxsIHx8IG9uUGFuZWxSZXNpemUgPT09IHZvaWQgMCB8fCBvblBhbmVsUmVzaXplKHBhbmVsV2lkdGgpO1xuICB9LCBbcGFuZWxXaWR0aCwgb25QYW5lbFJlc2l6ZV0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChwYW5lbEVsKSB7XG4gICAgICAvLyBXZSBoYXZlIHRvIG1vZGlmeSB0aGUgcG9wb3ZlciBwYW5lbCBET00gbm9kZSBkaXJlY3RseSBpbnN0ZWFkIG9mIHVzaW5nXG4gICAgICAvLyBgcGFuZWxTdHlsZWAsIGFzIHRoZXJlJ3Mgc29tZSB3ZWlyZCBwb3NpdGlvbmluZyBidWdzIG9uIHJlc2l6ZSBvdGhlcndpc2VcbiAgICAgIHBhbmVsRWwuc3R5bGUuaW5saW5lU2l6ZSA9IFwiXCIuY29uY2F0KHBhbmVsV2lkdGgsIFwicHhcIik7XG4gICAgfVxuICB9LCBbcGFuZWxFbCwgcGFuZWxXaWR0aF0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoaXMgZmlyZXMgb24gYWxsIGlucHV0IHdpZHRoIGNoYW5nZXMgcmVnYXJkbGVzcyBvZiBtaW5pbXVtIHNpemUsIGJlY2F1c2Ugb25cbiAgICAvLyByaWdodC9jZW50ZXIgYW5jaG9yZWQgcG9wb3ZlcnMsIHRoZSBpbnB1dCB3aWR0aCBhZmZlY3RzIHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wb3ZlclxuICAgIGlmIChwYW5lbEVsKSB7XG4gICAgICB2YXIgX3BvcG92ZXJDbGFzc1JlZiRjdXJyO1xuICAgICAgKF9wb3BvdmVyQ2xhc3NSZWYkY3VyciA9IHBvcG92ZXJDbGFzc1JlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfcG9wb3ZlckNsYXNzUmVmJGN1cnIgPT09IHZvaWQgMCB8fCBfcG9wb3ZlckNsYXNzUmVmJGN1cnIucG9zaXRpb25Qb3BvdmVyRmx1aWQoKTtcbiAgICB9XG4gIH0sIFtpbnB1dFdpZHRoLCBwYW5lbEVsXSk7XG5cbiAgLyoqXG4gICAqIFBvcG92ZXIgdGFiIHRvIGNsb3NlIGxvZ2ljXG4gICAqL1xuXG4gIHZhciBwYW5lbFByb3BzT25LZXlEb3duID0gKF9wcm9wcyRwYW5lbFByb3BzID0gcHJvcHMucGFuZWxQcm9wcykgPT09IG51bGwgfHwgX3Byb3BzJHBhbmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wcm9wcyRwYW5lbFByb3BzLm9uS2V5RG93bjtcbiAgdmFyIG9uS2V5RG93biA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIHBhbmVsUHJvcHNPbktleURvd24gPT09IG51bGwgfHwgcGFuZWxQcm9wc09uS2V5RG93biA9PT0gdm9pZCAwIHx8IHBhbmVsUHJvcHNPbktleURvd24oZXZlbnQpO1xuICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuVEFCKSB7XG4gICAgICBpZiAoZGlzYWJsZUZvY3VzVHJhcCkge1xuICAgICAgICBpZiAoIW93bkZvY3VzKSB7XG4gICAgICAgICAgY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB0YWJiYWJsZUl0ZW1zID0gdGFiYmFibGUoZXZlbnQuY3VycmVudFRhcmdldCkuZmlsdGVyKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgIHJldHVybiAhZWwuaGFzQXR0cmlidXRlKCdkYXRhLWZvY3VzLWd1YXJkJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRhYmJhYmxlSXRlbXMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHZhciB0YWJiaW5nRnJvbUxhc3RJdGVtSW5Qb3BvdmVyID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGFiYmFibGVJdGVtc1t0YWJiYWJsZUl0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGFiYmluZ0Zyb21MYXN0SXRlbUluUG9wb3Zlcikge1xuICAgICAgICAgIGNsb3NlUG9wb3ZlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCBbZGlzYWJsZUZvY3VzVHJhcCwgb3duRm9jdXMsIGNsb3NlUG9wb3ZlciwgcGFuZWxQcm9wc09uS2V5RG93bl0pO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjbG9zZSBvbiBzY3JvbGwgYmVoYXZpb3JcbiAgICovXG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaGVuIHRoZSBwb3BvdmVyIG9wZW5zLCBhZGQgYSBzY3JvbGwgbGlzdGVuZXIgdG8gdGhlIHBhZ2UgKCYgcmVtb3ZlIGl0IGFmdGVyKVxuICAgIGlmIChjbG9zZU9uU2Nyb2xsICYmIHBhbmVsRWwpIHtcbiAgICAgIHZhciBjbG9zZVBvcG92ZXJPblNjcm9sbCA9IGZ1bmN0aW9uIGNsb3NlUG9wb3Zlck9uU2Nyb2xsKGV2ZW50KSB7XG4gICAgICAgIHZhciBzY3JvbGxUYXJnZXQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgLy8gQmFzaWMgZXhpc3RlbmNlIGNoZWNrXG4gICAgICAgIGlmICghcGFuZWxFbCB8fCAhaW5wdXRFbCB8fCAhc2Nyb2xsVGFyZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERvIG5vdCBjbG9zZSB0aGUgcG9wb3ZlciBpZiB0aGUgaW5wdXQgb3IgcG9wb3ZlciBpdHNlbGYgd2FzIHNjcm9sbGVkXG4gICAgICAgIGlmIChwYW5lbEVsLmNvbnRhaW5zKHNjcm9sbFRhcmdldCkgfHwgaW5wdXRFbC5jb250YWlucyhzY3JvbGxUYXJnZXQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpcmVmb3ggd2lsbCB0cmlnZ2VyIGEgc2Nyb2xsIGV2ZW50IGluIG1hbnkgY29tbW9uIHNpdHVhdGlvbnMgKGUuZy4gZG9jcyBzaWRlIG5hdilcbiAgICAgICAgLy8gd2hlbiB0aGUgb3B0aW9ucyBsaXN0IGRpdiBpcyBhcHBlbmRlZCB0byB0aGUgRE9NLiBUbyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBzaG91bGRcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGVsZW1lbnQgdGhhdCBzY3JvbGxlZCBhY3R1YWxseSBjb250YWlucy93aWxsIGFmZmVjdCB0aGUgaW5wdXRcbiAgICAgICAgaWYgKCFzY3JvbGxUYXJnZXQuY29udGFpbnMoaW5wdXRFbCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2xvc2VQb3BvdmVyKCk7XG4gICAgICB9O1xuXG4gICAgICAvLyBLaWJhbmEgQ3lwcmVzcyB0ZXN0cyB0cmlnZ2VyIGEgc2Nyb2xsIGV2ZW50IGluIG1hbnkgY29tbW9uIHNpdHVhdGlvbnMgd2hlbiB0aGUgb3B0aW9ucyBsaXN0IGRpdiBpcyBhcHBlbmRlZFxuICAgICAgLy8gdG8gdGhlIERPTTsgaW4gdGVzdGluZyBpdCB3YXMgYWx3YXlzIHdpdGhpbiAxMDBtcywgYnV0IHNldHRpbmcgYSB0aW1lb3V0IGhlcmUgZm9yIDUwMG1zIHRvIGJlIHNhZmVcbiAgICAgIHZhciB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNsb3NlUG9wb3Zlck9uU2Nyb2xsLCB7XG4gICAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAvLyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIGFzIHdlIHdvbid0IGNhbGwgcHJldmVudERlZmF1bHRcbiAgICAgICAgICBjYXB0dXJlOiB0cnVlIC8vIHNjcm9sbCBldmVudHMgZG9uJ3QgYnViYmxlLCB0aGV5IG11c3QgYmUgY2FwdHVyZWQgaW5zdGVhZFxuICAgICAgICB9KTtcbiAgICAgIH0sIDUwMCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2xvc2VQb3BvdmVyT25TY3JvbGwsIHtcbiAgICAgICAgICBjYXB0dXJlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbY2xvc2VPblNjcm9sbCwgY2xvc2VQb3BvdmVyLCBwYW5lbEVsLCBpbnB1dEVsXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiAvKiNfX1BVUkVfXyovY3NzKGZ1bGxXaWR0aCA/IHVuZGVmaW5lZCA6IGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsIGZvcm1NYXhXaWR0aCksIFwiO2xhYmVsOkV1aUlucHV0UG9wb3ZlcjtcIiksXG4gICAgZGlzcGxheTogZGlzcGxheSxcbiAgICBidXR0b246IGlucHV0LFxuICAgIHBvcG92ZXJSZWY6IGlucHV0UmVmLFxuICAgIHBhbmVsUmVmOiBwYW5lbFJlZixcbiAgICByZWY6IHBvcG92ZXJDbGFzc1JlZixcbiAgICBjbG9zZVBvcG92ZXI6IGNsb3NlUG9wb3ZlcixcbiAgICBhbmNob3JQb3NpdGlvbjogYW5jaG9yUG9zaXRpb24sXG4gICAgYXR0YWNoVG9BbmNob3I6IGF0dGFjaFRvQW5jaG9yLFxuICAgIHJlcG9zaXRpb25Ub0Nyb3NzQXhpczogcmVwb3NpdGlvblRvQ3Jvc3NBeGlzLFxuICAgIHBhbmVsUGFkZGluZ1NpemU6IHBhbmVsUGFkZGluZ1NpemUsXG4gICAgb3duRm9jdXM6IG93bkZvY3VzXG4gIH0sIHByb3BzLCB7XG4gICAgcGFuZWxQcm9wczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcy5wYW5lbFByb3BzKSwge30sIHtcbiAgICAgIG9uS2V5RG93bjogb25LZXlEb3duXG4gICAgfSlcbiAgfSksIF9fX0Vtb3Rpb25KU1goRXVpRm9jdXNUcmFwLCBfZXh0ZW5kcyh7XG4gICAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IHRydWUsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVGb2N1c1RyYXBcbiAgfSwgZm9jdXNUcmFwUHJvcHMpLCBfX19FbW90aW9uSlNYKEV1aUlucHV0UG9wb3ZlcldpZHRoQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBwYW5lbFdpZHRoXG4gIH0sIGNoaWxkcmVuKSkpO1xufTtcbkV1aUlucHV0UG9wb3Zlci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBbGlnbm1lbnQgb2YgdGhlIHBvcG92ZXIgcmVsYXRpdmUgdG8gdGhlIGlucHV0XG4gICAgICovXG4gIGFuY2hvclBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiZG93bkxlZnRcIiwgXCJkb3duUmlnaHRcIiwgXCJkb3duQ2VudGVyXCJdKSxcbiAgZGlzYWJsZUZvY3VzVHJhcDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEFsbG93cyBhdXRvbWF0aWNhbGx5IGNsb3NpbmcgdGhlIGlucHV0IHBvcG92ZXIgb24gcGFnZSBzY3JvbGxcbiAgICAgKi9cbiAgY2xvc2VPblNjcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIGlucHV0OiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuYW55LFxuICBvblBhbmVsUmVzaXplOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgKipFdWlJbnB1dFBvcG92ZXJzKiogaW5oZXJpdCB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgcGFzc2VkIGlucHV0IGVsZW1lbnQuXG4gICAgICogSG93ZXZlciwgaWYgdGhlIGlucHV0IHdpZHRoIGlzIHRvbyBzbWFsbCwgeW91IGNhbiBwYXNzIGEgbWluaW11bSBwYW5lbCB3aWR0aFxuICAgICAqICh0aGF0IHNob3VsZCBiZSBiYXNlZCBvbiB0aGUgcG9wb3ZlciBjb250ZW50KS5cbiAgICAgKi9cbiAgcGFuZWxNaW5XaWR0aDogUHJvcFR5cGVzLm51bWJlclxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xpY2tPdXRzaWRlRGlzYWJsZXNcIiwgXCJkaXNhYmxlZFwiLCBcInJldHVybkZvY3VzXCIsIFwibm9Jc29sYXRpb25cIiwgXCJzY3JvbGxMb2NrXCIsIFwiZ2FwTW9kZVwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBGb2N1c09uIH0gZnJvbSAncmVhY3QtZm9jdXMtb24nO1xuaW1wb3J0IHsgUmVtb3ZlU2Nyb2xsQmFyIH0gZnJvbSAncmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXInO1xuaW1wb3J0IHsgZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VQcm9wc1dpdGhDb21wb25lbnREZWZhdWx0cyB9IGZyb20gJy4uL3Byb3ZpZGVyL2NvbXBvbmVudF9kZWZhdWx0cyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb2N1c1RyYXAgPSBmdW5jdGlvbiBFdWlGb2N1c1RyYXAocHJvcHMpIHtcbiAgdmFyIHByb3BzV2l0aERlZmF1bHRzID0gdXNlUHJvcHNXaXRoQ29tcG9uZW50RGVmYXVsdHMoJ0V1aUZvY3VzVHJhcCcsIHByb3BzKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9jdXNUcmFwQ2xhc3MsIHByb3BzV2l0aERlZmF1bHRzKTtcbn07XG5FdWlGb2N1c1RyYXAucHJvcFR5cGVzID0ge1xuICAvLyBGb3Igc29tZSByZWFzb24sIFN0b3J5Ym9vayBkb2Vzbid0IHJlZ2lzdGVyIHRoZXNlIHByb3BzIGlmIHRoZXkncmUgUGljazw+J2RcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFdoZXRoZXIgYG9uQ2xpY2tPdXRzaWRlYCBzaG91bGQgYmUgY2FsbGVkIG9uIG1vdXNldXAgaW5zdGVhZCBvZiBtb3VzZWRvd24uXG4gICAgICogVGhpcyBmbGFnIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgY29uZmxpY3RzIHdpdGggb3V0c2lkZSB0b2dnbGUgYnV0dG9ucyBieSBkZWxheWluZyB0aGUgY2xvc2luZyBjbGljayBjYWxsYmFjay5cbiAgICAgKi9cbiAgY2xvc2VPbk1vdXNldXA6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBDbGlja2luZyBvdXRzaWRlIHRoZSB0cmFwIGFyZWEgd2lsbCBkaXNhYmxlIHRoZSB0cmFwXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gZWxlbWVudCB0aGF0IHdpbGwgZ2V0IGZvY3VzIHdoZW4gdGhlIHRyYXAgaXMgaW5pdGlhdGVkXG4gICAgICovXG4gIGluaXRpYWxGb2N1czogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogaWYgYHNjcm9sbExvY2tgIGlzIHNldCB0byB0cnVlLCB0aGUgYm9keSdzIHNjcm9sbGJhciB3aWR0aCB3aWxsIGJlIHByZXNlcnZlZCBvbiBsb2NrXG4gICAgICogdmlhIHRoZSBgZ2FwTW9kZWAgQ1NTIHByb3BlcnR5LiBEZXBlbmRpbmcgb24geW91ciBjdXN0b20gQ1NTLCB5b3UgbWF5IHByZWZlciB0byB1c2VcbiAgICAgKiBgbWFyZ2luYCBpbnN0ZWFkIG9mIGBwYWRkaW5nYC5cbiAgICAgKiBAZGVmYXVsdCBwYWRkaW5nXG4gICAgICovXG4gIGdhcE1vZGU6IFByb3BUeXBlcy5vbmVPZihbXCJwYWRkaW5nXCIsIFwibWFyZ2luXCJdKSxcbiAgLyoqXG4gICAgICogQ29uZmlndXJlcyBmb2N1cyB0cmFwcGluZyBiZXR3ZWVuIGlmcmFtZXMuXG4gICAgICogQnkgZGVmYXVsdCwgRXVpRm9jdXNUcmFwIGFsbG93cyBmb2N1cyB0byBsZWF2ZSBpZnJhbWVzIGFuZCBtb3ZlIHRvIGVsZW1lbnRzIG91dHNpZGUgb2YgaXQuXG4gICAgICogU2V0IHRvIGB0cnVlYCBpZiB5b3Ugd2FudCBmb2N1cyB0byByZW1haW4gdHJhcHBlZCB3aXRoaW4gdGhlIGlmcmFtZS5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICBjcm9zc0ZyYW1lOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICBzY3JvbGxMb2NrOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gIG5vSXNvbGF0aW9uOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gIHJldHVybkZvY3VzOiBQcm9wVHlwZXMuYW55XG59O1xudmFyIEV1aUZvY3VzVHJhcENsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aUZvY3VzVHJhcENsYXNzKCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRm9jdXNUcmFwQ2xhc3MpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aUZvY3VzVHJhcENsYXNzLCBbXS5jb25jYXQoYXJncykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzdGF0ZVwiLCB7XG4gICAgICBoYXNCZWVuRGlzYWJsZWRCeUNsaWNrOiBmYWxzZVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJsYXN0SW50ZXJjZXB0ZWRFdmVudFwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicHJldmVudEZvY3VzRXhpdFwiLCBmYWxzZSk7XG4gICAgLy8gUHJvZ3JhbW1hdGljYWxseSBzZXRzIGZvY3VzIG9uIGEgbmVzdGVkIERPTSBub2RlOyBvcHRpb25hbFxuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZXRJbml0aWFsRm9jdXNcIiwgZnVuY3Rpb24gKGluaXRpYWxGb2N1cykge1xuICAgICAgaWYgKCFpbml0aWFsRm9jdXMpIHJldHVybjtcbiAgICAgIHZhciBub2RlID0gZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYoaW5pdGlhbEZvY3VzKTtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuO1xuICAgICAgLy8gYGRhdGEtYXV0b2ZvY3VzYCBpcyBwYXJ0IG9mIHRoZSAncmVhY3QtZm9jdXMtb24nIEFQSVxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtYXV0b2ZvY3VzJywgJ3RydWUnKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Nb3VzZXVwT3V0c2lkZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgX3RoaXMucmVtb3ZlTW91c2V1cExpc3RlbmVyKCk7XG4gICAgICAvLyBUaW1lb3V0IGdpdmVzIHByZWNlZGVuY2UgdG8gdGhlIGNvbnN1bWVyIHRvIGluaXRpYXRlIGNsb3NlIGlmIGl0IGhhcyB0b2dnbGUgYmVoYXZpb3IuXG4gICAgICAvLyBPdGhlcndpc2UgdGhpcyBldmVudCBtYXkgb2NjdXIgZmlyc3QgYW5kIHRoZSBjb25zdW1lciB0b2dnbGUgd2lsbCByZW9wZW4gdGhlIGZseW91dC5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25DbGlja091LCBfdGhpcyRwcm9wcztcbiAgICAgICAgcmV0dXJuIChfdGhpcyRwcm9wcyRvbkNsaWNrT3UgPSAoX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcykub25DbGlja091dHNpZGUpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uQ2xpY2tPdSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25DbGlja091LmNhbGwoX3RoaXMkcHJvcHMsIGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImFkZE1vdXNldXBMaXN0ZW5lclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgX3RoaXMub25Nb3VzZXVwT3V0c2lkZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZW1vdmVNb3VzZXVwTGlzdGVuZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaGFuZGxlT3V0c2lkZUNsaWNrXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICBvbkNsaWNrT3V0c2lkZSA9IF90aGlzJHByb3BzMi5vbkNsaWNrT3V0c2lkZSxcbiAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXMgPSBfdGhpcyRwcm9wczIuY2xpY2tPdXRzaWRlRGlzYWJsZXMsXG4gICAgICAgIGNsb3NlT25Nb3VzZXVwID0gX3RoaXMkcHJvcHMyLmNsb3NlT25Nb3VzZXVwO1xuICAgICAgaWYgKGNsaWNrT3V0c2lkZURpc2FibGVzKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoYXNCZWVuRGlzYWJsZWRCeUNsaWNrOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG9uQ2xpY2tPdXRzaWRlKSB7XG4gICAgICAgIGNsb3NlT25Nb3VzZXVwID8gX3RoaXMuYWRkTW91c2V1cExpc3RlbmVyKCkgOiBvbkNsaWNrT3V0c2lkZShldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlGb2N1c1RyYXBDbGFzcywgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpRm9jdXNUcmFwQ2xhc3MsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5zZXRJbml0aWFsRm9jdXModGhpcy5wcm9wcy5pbml0aWFsRm9jdXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKHByZXZQcm9wcy5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiB0aGlzLnByb3BzLmRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoYXNCZWVuRGlzYWJsZWRCeUNsaWNrOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLnJlbW92ZU1vdXNldXBMaXN0ZW5lcigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMzLmNoaWxkcmVuLFxuICAgICAgICBjbGlja091dHNpZGVEaXNhYmxlcyA9IF90aGlzJHByb3BzMy5jbGlja091dHNpZGVEaXNhYmxlcyxcbiAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wczMuZGlzYWJsZWQsXG4gICAgICAgIHJldHVybkZvY3VzID0gX3RoaXMkcHJvcHMzLnJldHVybkZvY3VzLFxuICAgICAgICBub0lzb2xhdGlvbiA9IF90aGlzJHByb3BzMy5ub0lzb2xhdGlvbixcbiAgICAgICAgc2Nyb2xsTG9jayA9IF90aGlzJHByb3BzMy5zY3JvbGxMb2NrLFxuICAgICAgICBnYXBNb2RlID0gX3RoaXMkcHJvcHMzLmdhcE1vZGUsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMzLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIGlzRGlzYWJsZWQgPSBkaXNhYmxlZCB8fCB0aGlzLnN0YXRlLmhhc0JlZW5EaXNhYmxlZEJ5Q2xpY2s7XG4gICAgICB2YXIgZm9jdXNPblByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgcmV0dXJuRm9jdXM6IHJldHVybkZvY3VzLFxuICAgICAgICBub0lzb2xhdGlvbjogbm9Jc29sYXRpb24sXG4gICAgICAgIGVuYWJsZWQ6ICFpc0Rpc2FibGVkXG4gICAgICB9LCByZXN0KSwge30sIHtcbiAgICAgICAgb25DbGlja091dHNpZGU6IHRoaXMuaGFuZGxlT3V0c2lkZUNsaWNrLFxuICAgICAgICAvKipcbiAgICAgICAgICogYHNjcm9sbExvY2tgIHNob3VsZCBhbHdheXMgYmUgdW5zZXQgb24gRm9jdXNPbiwgYXMgaXQgY2FuIHByZXZlbnQgc2Nyb2xsaW5nIG9uXG4gICAgICAgICAqIHBvcnRhbHMgKGkuZS4gcG9wb3ZlcnMsIGNvbWJvYm94ZXMsIGRyb3Bkb3duIG1lbnVzLCBldGMuKSB3aXRoaW4gbW9kYWxzICYgZmx5b3V0c1xuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvcmVhY3QtZm9jdXMtb24vaXNzdWVzLzQ5XG4gICAgICAgICAqL1xuICAgICAgICBzY3JvbGxMb2NrOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChGb2N1c09uLCBmb2N1c09uUHJvcHMsIGNoaWxkcmVuLCAhaXNEaXNhYmxlZCAmJiBzY3JvbGxMb2NrICYmIF9fX0Vtb3Rpb25KU1goUmVtb3ZlU2Nyb2xsQmFyLCB7XG4gICAgICAgIGdhcE1vZGU6IGdhcE1vZGVcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlGb2N1c1RyYXBDbGFzcywgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBjbGlja091dHNpZGVEaXNhYmxlczogZmFsc2UsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgcmV0dXJuRm9jdXM6IHRydWUsXG4gIG5vSXNvbGF0aW9uOiB0cnVlLFxuICBzY3JvbGxMb2NrOiBmYWxzZSxcbiAgY3Jvc3NGcmFtZTogZmFsc2UsXG4gIGdhcE1vZGU6ICdwYWRkaW5nJyAvLyBFVUkgZGVmYXVsdHMgdG8gcGFkZGluZyBiZWNhdXNlIEtpYmFuYSdzIGJvZHkvbGF5b3V0IENTUyBpZ25vcmVzIGBtYXJnaW5gXG59KTtcbkV1aUZvY3VzVHJhcENsYXNzLnByb3BUeXBlcyA9IHtcbiAgLy8gRm9yIHNvbWUgcmVhc29uLCBTdG9yeWJvb2sgZG9lc24ndCByZWdpc3RlciB0aGVzZSBwcm9wcyBpZiB0aGV5J3JlIFBpY2s8PidkXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBXaGV0aGVyIGBvbkNsaWNrT3V0c2lkZWAgc2hvdWxkIGJlIGNhbGxlZCBvbiBtb3VzZXVwIGluc3RlYWQgb2YgbW91c2Vkb3duLlxuICAgICAqIFRoaXMgZmxhZyBjYW4gYmUgdXNlZCB0byBwcmV2ZW50IGNvbmZsaWN0cyB3aXRoIG91dHNpZGUgdG9nZ2xlIGJ1dHRvbnMgYnkgZGVsYXlpbmcgdGhlIGNsb3NpbmcgY2xpY2sgY2FsbGJhY2suXG4gICAgICovXG4gIGNsb3NlT25Nb3VzZXVwOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQ2xpY2tpbmcgb3V0c2lkZSB0aGUgdHJhcCBhcmVhIHdpbGwgZGlzYWJsZSB0aGUgdHJhcFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIGNsaWNrT3V0c2lkZURpc2FibGVzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIGVsZW1lbnQgdGhhdCB3aWxsIGdldCBmb2N1cyB3aGVuIHRoZSB0cmFwIGlzIGluaXRpYXRlZFxuICAgICAqL1xuICBpbml0aWFsRm9jdXM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIGlmIGBzY3JvbGxMb2NrYCBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGJvZHkncyBzY3JvbGxiYXIgd2lkdGggd2lsbCBiZSBwcmVzZXJ2ZWQgb24gbG9ja1xuICAgICAqIHZpYSB0aGUgYGdhcE1vZGVgIENTUyBwcm9wZXJ0eS4gRGVwZW5kaW5nIG9uIHlvdXIgY3VzdG9tIENTUywgeW91IG1heSBwcmVmZXIgdG8gdXNlXG4gICAgICogYG1hcmdpbmAgaW5zdGVhZCBvZiBgcGFkZGluZ2AuXG4gICAgICogQGRlZmF1bHQgcGFkZGluZ1xuICAgICAqL1xuICBnYXBNb2RlOiBQcm9wVHlwZXMub25lT2YoW1wicGFkZGluZ1wiLCBcIm1hcmdpblwiXSksXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgZm9jdXMgdHJhcHBpbmcgYmV0d2VlbiBpZnJhbWVzLlxuICAgICAqIEJ5IGRlZmF1bHQsIEV1aUZvY3VzVHJhcCBhbGxvd3MgZm9jdXMgdG8gbGVhdmUgaWZyYW1lcyBhbmQgbW92ZSB0byBlbGVtZW50cyBvdXRzaWRlIG9mIGl0LlxuICAgICAqIFNldCB0byBgdHJ1ZWAgaWYgeW91IHdhbnQgZm9jdXMgdG8gcmVtYWluIHRyYXBwZWQgd2l0aGluIHRoZSBpZnJhbWUuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgY3Jvc3NGcmFtZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgc2Nyb2xsTG9jazogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICBub0lzb2xhdGlvbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICByZXR1cm5Gb2N1czogUHJvcFR5cGVzLmFueVxufTsiLCAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gIH1cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgIHRbcF0gPSBzW3BdO1xuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgIH1cbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xuICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cbiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XG4gIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xuICB2YXIgXywgZG9uZSA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XG4gICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xuICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XG4gICAgICB9XG4gIH1cbiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xuICBkb25lID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XG4gIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xuICB9XG4gIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xuICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbnZhciBvd25LZXlzID0gZnVuY3Rpb24obykge1xuICBvd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICB2YXIgYXIgPSBbXTtcbiAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgIHJldHVybiBhcjtcbiAgfTtcbiAgcmV0dXJuIG93bktleXMobyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IG93bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XG4gIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcbiAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XG4gIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZShlbnYsIHZhbHVlLCBhc3luYykge1xuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWQuXCIpO1xuICAgIHZhciBkaXNwb3NlLCBpbm5lcjtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7XG4gICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcbiAgICAgIGlmIChhc3luYykgaW5uZXIgPSBkaXNwb3NlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XG4gICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7IHRyeSB7IGlubmVyLmNhbGwodGhpcyk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpOyB9IH07XG4gICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcbiAgfVxuICBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52KSB7XG4gIGZ1bmN0aW9uIGZhaWwoZSkge1xuICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcbiAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xuICB9XG4gIHZhciByLCBzID0gMDtcbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICB3aGlsZSAociA9IGVudi5zdGFjay5wb3AoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFyLmFzeW5jICYmIHMgPT09IDEpIHJldHVybiBzID0gMCwgZW52LnN0YWNrLnB1c2gociksIFByb21pc2UucmVzb2x2ZSgpLnRoZW4obmV4dCk7XG4gICAgICAgIGlmIChyLmRpc3Bvc2UpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gci5kaXNwb3NlLmNhbGwoci52YWx1ZSk7XG4gICAgICAgICAgaWYgKHIuYXN5bmMpIHJldHVybiBzIHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHMgfD0gMTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGZhaWwoZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzID09PSAxKSByZXR1cm4gZW52Lmhhc0Vycm9yID8gUHJvbWlzZS5yZWplY3QoZW52LmVycm9yKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGlmIChlbnYuaGFzRXJyb3IpIHRocm93IGVudi5lcnJvcjtcbiAgfVxuICByZXR1cm4gbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24ocGF0aCwgcHJlc2VydmVKc3gpIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiICYmIC9eXFwuXFwuP1xcLy8udGVzdChwYXRoKSkge1xuICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFwuKHRzeCkkfCgoPzpcXC5kKT8pKCg/OlxcLlteLi9dKz8pPylcXC4oW2NtXT8pdHMkL2ksIGZ1bmN0aW9uIChtLCB0c3gsIGQsIGV4dCwgY20pIHtcbiAgICAgICAgICByZXR1cm4gdHN4ID8gcHJlc2VydmVKc3ggPyBcIi5qc3hcIiA6IFwiLmpzXCIgOiBkICYmICghZXh0IHx8ICFjbSkgPyBtIDogKGQgKyBleHQgKyBcIi5cIiArIGNtLnRvTG93ZXJDYXNlKCkgKyBcImpzXCIpO1xuICAgICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19leHRlbmRzLFxuICBfX2Fzc2lnbixcbiAgX19yZXN0LFxuICBfX2RlY29yYXRlLFxuICBfX3BhcmFtLFxuICBfX2VzRGVjb3JhdGUsXG4gIF9fcnVuSW5pdGlhbGl6ZXJzLFxuICBfX3Byb3BLZXksXG4gIF9fc2V0RnVuY3Rpb25OYW1lLFxuICBfX21ldGFkYXRhLFxuICBfX2F3YWl0ZXIsXG4gIF9fZ2VuZXJhdG9yLFxuICBfX2NyZWF0ZUJpbmRpbmcsXG4gIF9fZXhwb3J0U3RhcixcbiAgX192YWx1ZXMsXG4gIF9fcmVhZCxcbiAgX19zcHJlYWQsXG4gIF9fc3ByZWFkQXJyYXlzLFxuICBfX3NwcmVhZEFycmF5LFxuICBfX2F3YWl0LFxuICBfX2FzeW5jR2VuZXJhdG9yLFxuICBfX2FzeW5jRGVsZWdhdG9yLFxuICBfX2FzeW5jVmFsdWVzLFxuICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcbiAgX19pbXBvcnRTdGFyLFxuICBfX2ltcG9ydERlZmF1bHQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRJbixcbiAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXG4gIF9fZGlzcG9zZVJlc291cmNlcyxcbiAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24sXG59O1xuIiwgImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb2N1c09uIGFzIFJlYWN0Rm9jdXNPbiB9IGZyb20gJy4vVUknO1xuaW1wb3J0IFNpZGVDYXIgZnJvbSAnLi9zaWRlY2FyJztcbnZhciBSZXF1aXJlU2lkZUNhciA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGVDYXIsIF9fYXNzaWduKHt9LCBwcm9wcykpO1xufTtcbmV4cG9ydCB2YXIgRm9jdXNPbiA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHsgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3RGb2N1c09uLCBfX2Fzc2lnbih7fSwgcHJvcHMsIHsgcmVmOiByZWYsIHNpZGVDYXI6IFJlcXVpcmVTaWRlQ2FyIH0pKTsgfSk7XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24sIF9fcmVzdCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVtb3ZlU2Nyb2xsIH0gZnJvbSAncmVhY3QtcmVtb3ZlLXNjcm9sbC9VSSc7XG5pbXBvcnQgUmVhY3RGb2N1c0xvY2sgZnJvbSAncmVhY3QtZm9jdXMtbG9jay9VSSc7XG5pbXBvcnQgeyBlZmZlY3RDYXIgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgUFJFVkVOVF9TQ1JPTEwgPSB7IHByZXZlbnRTY3JvbGw6IHRydWUgfTtcbmV4cG9ydCB2YXIgRm9jdXNPbiA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCBwYXJlbnRSZWYpIHtcbiAgICB2YXIgX2EgPSBSZWFjdC51c2VTdGF0ZShmYWxzZSksIGxvY2tQcm9wcyA9IF9hWzBdLCBzZXRMb2NrUHJvcHMgPSBfYVsxXTtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgYXV0b0ZvY3VzID0gcHJvcHMuYXV0b0ZvY3VzLCBzaGFyZHMgPSBwcm9wcy5zaGFyZHMsIGNyb3NzRnJhbWUgPSBwcm9wcy5jcm9zc0ZyYW1lLCBfYiA9IHByb3BzLmVuYWJsZWQsIGVuYWJsZWQgPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iLCBfYyA9IHByb3BzLnNjcm9sbExvY2ssIHNjcm9sbExvY2sgPSBfYyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9jLCBfZCA9IHByb3BzLmZvY3VzTG9jaywgZm9jdXNMb2NrID0gX2QgPT09IHZvaWQgMCA/IHRydWUgOiBfZCwgX2UgPSBwcm9wcy5yZXR1cm5Gb2N1cywgcmV0dXJuRm9jdXMgPSBfZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9lLCBpbmVydCA9IHByb3BzLmluZXJ0LCBhbGxvd1BpbmNoWm9vbSA9IHByb3BzLmFsbG93UGluY2hab29tLCBzaWRlQ2FyID0gcHJvcHMuc2lkZUNhciwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCBzaG91bGRJZ25vcmUgPSBwcm9wcy5zaG91bGRJZ25vcmUsIHByZXZlbnRTY3JvbGxPbkZvY3VzID0gcHJvcHMucHJldmVudFNjcm9sbE9uRm9jdXMsIHN0eWxlID0gcHJvcHMuc3R5bGUsIGFzID0gcHJvcHMuYXMsIGdhcE1vZGUgPSBwcm9wcy5nYXBNb2RlLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImF1dG9Gb2N1c1wiLCBcInNoYXJkc1wiLCBcImNyb3NzRnJhbWVcIiwgXCJlbmFibGVkXCIsIFwic2Nyb2xsTG9ja1wiLCBcImZvY3VzTG9ja1wiLCBcInJldHVybkZvY3VzXCIsIFwiaW5lcnRcIiwgXCJhbGxvd1BpbmNoWm9vbVwiLCBcInNpZGVDYXJcIiwgXCJjbGFzc05hbWVcIiwgXCJzaG91bGRJZ25vcmVcIiwgXCJwcmV2ZW50U2Nyb2xsT25Gb2N1c1wiLCBcInN0eWxlXCIsIFwiYXNcIiwgXCJnYXBNb2RlXCJdKTtcbiAgICB2YXIgU2lkZUNhciA9IHNpZGVDYXI7XG4gICAgdmFyIG9uQWN0aXZhdGlvbiA9IGxvY2tQcm9wcy5vbkFjdGl2YXRpb24sIG9uRGVhY3RpdmF0aW9uID0gbG9ja1Byb3BzLm9uRGVhY3RpdmF0aW9uLCByZXN0UHJvcHMgPSBfX3Jlc3QobG9ja1Byb3BzLCBbXCJvbkFjdGl2YXRpb25cIiwgXCJvbkRlYWN0aXZhdGlvblwiXSk7XG4gICAgdmFyIGFwcGxpZWRMb2NrUHJvcHMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVzdFByb3BzKSwgeyBhczogYXMsXG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgc2lkZUNhcjogc2lkZUNhcixcbiAgICAgICAgc2hhcmRzOiBzaGFyZHMsXG4gICAgICAgIGFsbG93UGluY2hab29tOiBhbGxvd1BpbmNoWm9vbSxcbiAgICAgICAgZ2FwTW9kZTogZ2FwTW9kZSxcbiAgICAgICAgaW5lcnQ6IGluZXJ0LCBlbmFibGVkOiBlbmFibGVkICYmIHNjcm9sbExvY2sgfSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0Rm9jdXNMb2NrLCB7IHJlZjogcGFyZW50UmVmLCBzaWRlQ2FyOiBzaWRlQ2FyLCBkaXNhYmxlZDogIShsb2NrUHJvcHMgJiYgZW5hYmxlZCAmJiBmb2N1c0xvY2spLCByZXR1cm5Gb2N1czogcmV0dXJuRm9jdXMsIGF1dG9Gb2N1czogYXV0b0ZvY3VzLCBzaGFyZHM6IHNoYXJkcywgY3Jvc3NGcmFtZTogY3Jvc3NGcmFtZSwgb25BY3RpdmF0aW9uOiBvbkFjdGl2YXRpb24sIG9uRGVhY3RpdmF0aW9uOiBvbkRlYWN0aXZhdGlvbiwgY2xhc3NOYW1lOiBjbGFzc05hbWUsIHdoaXRlTGlzdDogc2hvdWxkSWdub3JlLCBsb2NrUHJvcHM6IGFwcGxpZWRMb2NrUHJvcHMsIGZvY3VzT3B0aW9uczogcHJldmVudFNjcm9sbE9uRm9jdXMgPyBQUkVWRU5UX1NDUk9MTCA6IHVuZGVmaW5lZCwgYXM6IFJlbW92ZVNjcm9sbCB9LCBjaGlsZHJlbiksXG4gICAgICAgIGVuYWJsZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwgX19hc3NpZ24oe30sIHJlc3QsIHsgc2lkZUNhcjogZWZmZWN0Q2FyLCBzZXRMb2NrUHJvcHM6IHNldExvY2tQcm9wcywgc2hhcmRzOiBzaGFyZHMgfSkpKSkpO1xufSk7XG5leHBvcnQgKiBmcm9tICcuL3JlRXhwb3J0cyc7XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24sIF9fcmVzdCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZnVsbFdpZHRoQ2xhc3NOYW1lLCB6ZXJvUmlnaHRDbGFzc05hbWUgfSBmcm9tICdyZWFjdC1yZW1vdmUtc2Nyb2xsLWJhci9jb25zdGFudHMnO1xuaW1wb3J0IHsgdXNlTWVyZ2VSZWZzIH0gZnJvbSAndXNlLWNhbGxiYWNrLXJlZic7XG5pbXBvcnQgeyBlZmZlY3RDYXIgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgbm90aGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm47XG59O1xuLyoqXG4gKiBSZW1vdmVzIHNjcm9sbGJhciBmcm9tIHRoZSBwYWdlIGFuZCBjb250YWluIHRoZSBzY3JvbGwgd2l0aGluIHRoZSBMb2NrXG4gKi9cbnZhciBSZW1vdmVTY3JvbGwgPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcGFyZW50UmVmKSB7XG4gICAgdmFyIHJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICB2YXIgX2EgPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgICAgIG9uU2Nyb2xsQ2FwdHVyZTogbm90aGluZyxcbiAgICAgICAgb25XaGVlbENhcHR1cmU6IG5vdGhpbmcsXG4gICAgICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZTogbm90aGluZyxcbiAgICB9KSwgY2FsbGJhY2tzID0gX2FbMF0sIHNldENhbGxiYWNrcyA9IF9hWzFdO1xuICAgIHZhciBmb3J3YXJkUHJvcHMgPSBwcm9wcy5mb3J3YXJkUHJvcHMsIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgcmVtb3ZlU2Nyb2xsQmFyID0gcHJvcHMucmVtb3ZlU2Nyb2xsQmFyLCBlbmFibGVkID0gcHJvcHMuZW5hYmxlZCwgc2hhcmRzID0gcHJvcHMuc2hhcmRzLCBzaWRlQ2FyID0gcHJvcHMuc2lkZUNhciwgbm9Jc29sYXRpb24gPSBwcm9wcy5ub0lzb2xhdGlvbiwgaW5lcnQgPSBwcm9wcy5pbmVydCwgYWxsb3dQaW5jaFpvb20gPSBwcm9wcy5hbGxvd1BpbmNoWm9vbSwgX2IgPSBwcm9wcy5hcywgQ29udGFpbmVyID0gX2IgPT09IHZvaWQgMCA/ICdkaXYnIDogX2IsIGdhcE1vZGUgPSBwcm9wcy5nYXBNb2RlLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJmb3J3YXJkUHJvcHNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInJlbW92ZVNjcm9sbEJhclwiLCBcImVuYWJsZWRcIiwgXCJzaGFyZHNcIiwgXCJzaWRlQ2FyXCIsIFwibm9Jc29sYXRpb25cIiwgXCJpbmVydFwiLCBcImFsbG93UGluY2hab29tXCIsIFwiYXNcIiwgXCJnYXBNb2RlXCJdKTtcbiAgICB2YXIgU2lkZUNhciA9IHNpZGVDYXI7XG4gICAgdmFyIGNvbnRhaW5lclJlZiA9IHVzZU1lcmdlUmVmcyhbcmVmLCBwYXJlbnRSZWZdKTtcbiAgICB2YXIgY29udGFpbmVyUHJvcHMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVzdCksIGNhbGxiYWNrcyk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBlbmFibGVkICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGVDYXIsIHsgc2lkZUNhcjogZWZmZWN0Q2FyLCByZW1vdmVTY3JvbGxCYXI6IHJlbW92ZVNjcm9sbEJhciwgc2hhcmRzOiBzaGFyZHMsIG5vSXNvbGF0aW9uOiBub0lzb2xhdGlvbiwgaW5lcnQ6IGluZXJ0LCBzZXRDYWxsYmFja3M6IHNldENhbGxiYWNrcywgYWxsb3dQaW5jaFpvb206ICEhYWxsb3dQaW5jaFpvb20sIGxvY2tSZWY6IHJlZiwgZ2FwTW9kZTogZ2FwTW9kZSB9KSksXG4gICAgICAgIGZvcndhcmRQcm9wcyA/IChSZWFjdC5jbG9uZUVsZW1lbnQoUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbiksIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb250YWluZXJQcm9wcyksIHsgcmVmOiBjb250YWluZXJSZWYgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENvbnRhaW5lciwgX19hc3NpZ24oe30sIGNvbnRhaW5lclByb3BzLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lLCByZWY6IGNvbnRhaW5lclJlZiB9KSwgY2hpbGRyZW4pKSkpO1xufSk7XG5SZW1vdmVTY3JvbGwuZGVmYXVsdFByb3BzID0ge1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgcmVtb3ZlU2Nyb2xsQmFyOiB0cnVlLFxuICAgIGluZXJ0OiBmYWxzZSxcbn07XG5SZW1vdmVTY3JvbGwuY2xhc3NOYW1lcyA9IHtcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aENsYXNzTmFtZSxcbiAgICB6ZXJvUmlnaHQ6IHplcm9SaWdodENsYXNzTmFtZSxcbn07XG5leHBvcnQgeyBSZW1vdmVTY3JvbGwgfTtcbiIsICJleHBvcnQgdmFyIHplcm9SaWdodENsYXNzTmFtZSA9ICdyaWdodC1zY3JvbGwtYmFyLXBvc2l0aW9uJztcbmV4cG9ydCB2YXIgZnVsbFdpZHRoQ2xhc3NOYW1lID0gJ3dpZHRoLWJlZm9yZS1zY3JvbGwtYmFyJztcbmV4cG9ydCB2YXIgbm9TY3JvbGxiYXJzQ2xhc3NOYW1lID0gJ3dpdGgtc2Nyb2xsLWJhcnMtaGlkZGVuJztcbi8qKlxuICogTmFtZSBvZiBhIENTUyB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBhbW91bnQgb2YgXCJoaWRkZW5cIiBzY3JvbGxiYXJcbiAqICEgbWlnaHQgYmUgdW5kZWZpbmVkICEgdXNlIHdpbGwgZmFsbGJhY2shXG4gKi9cbmV4cG9ydCB2YXIgcmVtb3ZlZEJhclNpemVWYXJpYWJsZSA9ICctLXJlbW92ZWQtYm9keS1zY3JvbGwtYmFyLXNpemUnO1xuIiwgIi8qKlxuICogQXNzaWducyBhIHZhbHVlIGZvciBhIGdpdmVuIHJlZiwgbm8gbWF0dGVyIG9mIHRoZSByZWYgZm9ybWF0XG4gKiBAcGFyYW0ge1JlZk9iamVjdH0gcmVmIC0gYSBjYWxsYmFjayBmdW5jdGlvbiBvciByZWYgb2JqZWN0XG4gKiBAcGFyYW0gdmFsdWUgLSBhIG5ldyB2YWx1ZVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI2Fzc2lnbnJlZlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHJlZk9iamVjdCA9IHVzZVJlZigpO1xuICogY29uc3QgcmVmRm4gPSAocmVmKSA9PiB7Li4uLn1cbiAqXG4gKiBhc3NpZ25SZWYocmVmT2JqZWN0LCBcInJlZlZhbHVlXCIpO1xuICogYXNzaWduUmVmKHJlZkZuLCBcInJlZlZhbHVlXCIpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduUmVmKHJlZiwgdmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZWYodmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZjtcbn1cbiIsICJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogY3JlYXRlcyBhIE11dGFibGVSZWYgd2l0aCByZWYgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gaW5pdGlhbCByZWYgdmFsdWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gYSBjYWxsYmFjayB0byBydW4gd2hlbiB2YWx1ZSBjaGFuZ2VzXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHJlZiA9IHVzZUNhbGxiYWNrUmVmKDAsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IGNvbnNvbGUubG9nKG9sZFZhbHVlLCAnLT4nLCBuZXdWYWx1ZSk7XG4gKiByZWYuY3VycmVudCA9IDE7XG4gKiAvLyBwcmludHMgMCAtPiAxXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvaG9va3MtcmVmZXJlbmNlLmh0bWwjdXNlcmVmXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvdXNlLWNhbGxiYWNrLXJlZiN1c2VjYWxsYmFja3JlZi0tLXRvLXJlcGxhY2UtcmVhY3R1c2VyZWZcbiAqIEByZXR1cm5zIHtNdXRhYmxlUmVmT2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ2FsbGJhY2tSZWYoaW5pdGlhbFZhbHVlLCBjYWxsYmFjaykge1xuICAgIHZhciByZWYgPSB1c2VTdGF0ZShmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgICAgICAvLyB2YWx1ZVxuICAgICAgICB2YWx1ZTogaW5pdGlhbFZhbHVlLFxuICAgICAgICAvLyBsYXN0IGNhbGxiYWNrXG4gICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICAgICAgLy8gXCJtZW1vaXplZFwiIHB1YmxpYyBpbnRlcmZhY2VcbiAgICAgICAgZmFjYWRlOiB7XG4gICAgICAgICAgICBnZXQgY3VycmVudCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmLnZhbHVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBjdXJyZW50KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3QgPSByZWYudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGxhc3QgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZWYuY2FsbGJhY2sodmFsdWUsIGxhc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSk7IH0pWzBdO1xuICAgIC8vIHVwZGF0ZSBjYWxsYmFja1xuICAgIHJlZi5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHJldHVybiByZWYuZmFjYWRlO1xufVxuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGFzc2lnblJlZiB9IGZyb20gJy4vYXNzaWduUmVmJztcbmltcG9ydCB7IHVzZUNhbGxiYWNrUmVmIH0gZnJvbSAnLi91c2VSZWYnO1xudmFyIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IFJlYWN0LnVzZUxheW91dEVmZmVjdCA6IFJlYWN0LnVzZUVmZmVjdDtcbnZhciBjdXJyZW50VmFsdWVzID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogTWVyZ2VzIHR3byBvciBtb3JlIHJlZnMgdG9nZXRoZXIgcHJvdmlkaW5nIGEgc2luZ2xlIGludGVyZmFjZSB0byBzZXQgdGhlaXIgdmFsdWVcbiAqIEBwYXJhbSB7UmVmT2JqZWN0fFJlZn0gcmVmc1xuICogQHJldHVybnMge011dGFibGVSZWZPYmplY3R9IC0gYSBuZXcgcmVmLCB3aGljaCB0cmFuc2xhdGVzIGFsbCBjaGFuZ2VzIHRvIHtyZWZzfVxuICpcbiAqIEBzZWUge0BsaW5rIG1lcmdlUmVmc30gYSB2ZXJzaW9uIHdpdGhvdXQgYnVpdC1pbiBtZW1vaXphdGlvblxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L3VzZS1jYWxsYmFjay1yZWYjdXNlbWVyZ2VyZWZzXG4gKiBAZXhhbXBsZVxuICogY29uc3QgQ29tcG9uZW50ID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICogICBjb25zdCBvd25SZWYgPSB1c2VSZWYoKTtcbiAqICAgY29uc3QgZG9tUmVmID0gdXNlTWVyZ2VSZWZzKFtyZWYsIG93blJlZl0pOyAvLyBcdUQ4M0RcdURDNDggbWVyZ2UgdG9nZXRoZXJcbiAqICAgcmV0dXJuIDxkaXYgcmVmPXtkb21SZWZ9Pi4uLjwvZGl2PlxuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTWVyZ2VSZWZzKHJlZnMsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciBjYWxsYmFja1JlZiA9IHVzZUNhbGxiYWNrUmVmKGRlZmF1bHRWYWx1ZSB8fCBudWxsLCBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHJlZnMuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7IHJldHVybiBhc3NpZ25SZWYocmVmLCBuZXdWYWx1ZSk7IH0pO1xuICAgIH0pO1xuICAgIC8vIGhhbmRsZSByZWZzIGNoYW5nZXMgLSBhZGRlZCBvciByZW1vdmVkXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IGN1cnJlbnRWYWx1ZXMuZ2V0KGNhbGxiYWNrUmVmKTtcbiAgICAgICAgaWYgKG9sZFZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcHJldlJlZnNfMSA9IG5ldyBTZXQob2xkVmFsdWUpO1xuICAgICAgICAgICAgdmFyIG5leHRSZWZzXzEgPSBuZXcgU2V0KHJlZnMpO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRfMSA9IGNhbGxiYWNrUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICBwcmV2UmVmc18xLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgIGlmICghbmV4dFJlZnNfMS5oYXMocmVmKSkge1xuICAgICAgICAgICAgICAgICAgICBhc3NpZ25SZWYocmVmLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5leHRSZWZzXzEuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcmV2UmVmc18xLmhhcyhyZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblJlZihyZWYsIGN1cnJlbnRfMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudFZhbHVlcy5zZXQoY2FsbGJhY2tSZWYsIHJlZnMpO1xuICAgIH0sIFtyZWZzXSk7XG4gICAgcmV0dXJuIGNhbGxiYWNrUmVmO1xufVxuIiwgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcbiAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICB9XG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICB0W3BdID0gc1twXTtcbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICB9XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcbiAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XG4gIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XG4gIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xuICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcbiAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xuICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcbiAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xuICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xuICAgICAgfVxuICB9XG4gIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcbiAgZG9uZSA9IHRydWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xuICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcbiAgfVxuICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG52YXIgb3duS2V5cyA9IGZ1bmN0aW9uKG8pIHtcbiAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgdmFyIGFyID0gW107XG4gICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICByZXR1cm4gYXI7XG4gIH07XG4gIHJldHVybiBvd25LZXlzKG8pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcbiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBvd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XG4gICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uKCkgeyB0cnkgeyBpbm5lci5jYWxsKHRoaXMpOyB9IGNhdGNoIChlKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgfSB9O1xuICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XG4gIH1cbiAgZWxzZSBpZiAoYXN5bmMpIHtcbiAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xuICBmdW5jdGlvbiBmYWlsKGUpIHtcbiAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XG4gICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcbiAgfVxuICB2YXIgciwgcyA9IDA7XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKHIgPSBlbnYuc3RhY2sucG9wKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xuICAgICAgICBpZiAoci5kaXNwb3NlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xuICAgICAgICAgIGlmIChyLmFzeW5jKSByZXR1cm4gcyB8PSAyLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBzIHw9IDE7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocyA9PT0gMSkgcmV0dXJuIGVudi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uKHBhdGgsIHByZXNlcnZlSnN4KSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcLlxcLj9cXC8vLnRlc3QocGF0aCkpIHtcbiAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLih0c3gpJHwoKD86XFwuZCk/KSgoPzpcXC5bXi4vXSs/KT8pXFwuKFtjbV0/KXRzJC9pLCBmdW5jdGlvbiAobSwgdHN4LCBkLCBleHQsIGNtKSB7XG4gICAgICAgICAgcmV0dXJuIHRzeCA/IHByZXNlcnZlSnN4ID8gXCIuanN4XCIgOiBcIi5qc1wiIDogZCAmJiAoIWV4dCB8fCAhY20pID8gbSA6IChkICsgZXh0ICsgXCIuXCIgKyBjbS50b0xvd2VyQ2FzZSgpICsgXCJqc1wiKTtcbiAgICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZXh0ZW5kcyxcbiAgX19hc3NpZ24sXG4gIF9fcmVzdCxcbiAgX19kZWNvcmF0ZSxcbiAgX19wYXJhbSxcbiAgX19lc0RlY29yYXRlLFxuICBfX3J1bkluaXRpYWxpemVycyxcbiAgX19wcm9wS2V5LFxuICBfX3NldEZ1bmN0aW9uTmFtZSxcbiAgX19tZXRhZGF0YSxcbiAgX19hd2FpdGVyLFxuICBfX2dlbmVyYXRvcixcbiAgX19jcmVhdGVCaW5kaW5nLFxuICBfX2V4cG9ydFN0YXIsXG4gIF9fdmFsdWVzLFxuICBfX3JlYWQsXG4gIF9fc3ByZWFkLFxuICBfX3NwcmVhZEFycmF5cyxcbiAgX19zcHJlYWRBcnJheSxcbiAgX19hd2FpdCxcbiAgX19hc3luY0dlbmVyYXRvcixcbiAgX19hc3luY0RlbGVnYXRvcixcbiAgX19hc3luY1ZhbHVlcyxcbiAgX19tYWtlVGVtcGxhdGVPYmplY3QsXG4gIF9faW1wb3J0U3RhcixcbiAgX19pbXBvcnREZWZhdWx0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4sXG4gIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxuICBfX2Rpc3Bvc2VSZXNvdXJjZXMsXG4gIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uLFxufTtcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gXCJ0c2xpYlwiO1xuZnVuY3Rpb24gSXRvSShhKSB7XG4gICAgcmV0dXJuIGE7XG59XG5mdW5jdGlvbiBpbm5lckNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSkge1xuICAgIGlmIChtaWRkbGV3YXJlID09PSB2b2lkIDApIHsgbWlkZGxld2FyZSA9IEl0b0k7IH1cbiAgICB2YXIgYnVmZmVyID0gW107XG4gICAgdmFyIGFzc2lnbmVkID0gZmFsc2U7XG4gICAgdmFyIG1lZGl1bSA9IHtcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGFzc2lnbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlY2FyOiBjb3VsZCBub3QgYHJlYWRgIGZyb20gYW4gYGFzc2lnbmVkYCBtZWRpdW0uIGByZWFkYCBjb3VsZCBiZSB1c2VkIG9ubHkgd2l0aCBgdXNlTWVkaXVtYC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZU1lZGl1bTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gbWlkZGxld2FyZShkYXRhLCBhc3NpZ25lZCk7XG4gICAgICAgICAgICBidWZmZXIucHVzaChpdGVtKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAhPT0gaXRlbTsgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBhc3NpZ25TeW5jTWVkaXVtOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGFzc2lnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHdoaWxlIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSB7XG4gICAgICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIGNiKHgpOyB9LFxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnVmZmVyOyB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgYXNzaWduTWVkaXVtOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGFzc2lnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBwZW5kaW5nUXVldWUgPSBbXTtcbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICAgICAgcGVuZGluZ1F1ZXVlID0gYnVmZmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGV4ZWN1dGVRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2JzID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IFtdO1xuICAgICAgICAgICAgICAgIGNicy5mb3JFYWNoKGNiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgY3ljbGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGV4ZWN1dGVRdWV1ZSk7IH07XG4gICAgICAgICAgICBjeWNsZSgpO1xuICAgICAgICAgICAgYnVmZmVyID0ge1xuICAgICAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZS5wdXNoKHgpO1xuICAgICAgICAgICAgICAgICAgICBjeWNsZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IHBlbmRpbmdRdWV1ZS5maWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBtZWRpdW07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVkaXVtKGRlZmF1bHRzLCBtaWRkbGV3YXJlKSB7XG4gICAgaWYgKG1pZGRsZXdhcmUgPT09IHZvaWQgMCkgeyBtaWRkbGV3YXJlID0gSXRvSTsgfVxuICAgIHJldHVybiBpbm5lckNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSk7XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpZGVjYXJNZWRpdW0ob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIG1lZGl1bSA9IGlubmVyQ3JlYXRlTWVkaXVtKG51bGwpO1xuICAgIG1lZGl1bS5vcHRpb25zID0gX19hc3NpZ24oeyBhc3luYzogdHJ1ZSwgc3NyOiBmYWxzZSB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gbWVkaXVtO1xufVxuIiwgImltcG9ydCB7IF9fYXNzaWduLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBTaWRlQ2FyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNpZGVDYXIgPSBfYS5zaWRlQ2FyLCByZXN0ID0gX19yZXN0KF9hLCBbXCJzaWRlQ2FyXCJdKTtcbiAgICBpZiAoIXNpZGVDYXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlY2FyOiBwbGVhc2UgcHJvdmlkZSBgc2lkZUNhcmAgcHJvcGVydHkgdG8gaW1wb3J0IHRoZSByaWdodCBjYXInKTtcbiAgICB9XG4gICAgdmFyIFRhcmdldCA9IHNpZGVDYXIucmVhZCgpO1xuICAgIGlmICghVGFyZ2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhciBtZWRpdW0gbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhcmdldCwgX19hc3NpZ24oe30sIHJlc3QpKTtcbn07XG5TaWRlQ2FyLmlzU2lkZUNhckV4cG9ydCA9IHRydWU7XG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0U2lkZWNhcihtZWRpdW0sIGV4cG9ydGVkKSB7XG4gICAgbWVkaXVtLnVzZU1lZGl1bShleHBvcnRlZCk7XG4gICAgcmV0dXJuIFNpZGVDYXI7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lkZWNhck1lZGl1bSB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmV4cG9ydCB2YXIgZWZmZWN0Q2FyID0gY3JlYXRlU2lkZWNhck1lZGl1bSgpO1xuIiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbm9kZSwgYm9vbCwgc3RyaW5nLCBhbnksIGFycmF5T2YsIG9uZU9mVHlwZSwgb2JqZWN0LCBmdW5jIH0gZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnZm9jdXMtbG9jay9jb25zdGFudHMnO1xuaW1wb3J0IHsgdXNlTWVyZ2VSZWZzIH0gZnJvbSAndXNlLWNhbGxiYWNrLXJlZic7XG5pbXBvcnQgeyBoaWRkZW5HdWFyZCB9IGZyb20gJy4vRm9jdXNHdWFyZCc7XG5pbXBvcnQgeyBtZWRpdW1Gb2N1cywgbWVkaXVtQmx1ciwgbWVkaXVtU2lkZWNhciB9IGZyb20gJy4vbWVkaXVtJztcbmltcG9ydCB7IGZvY3VzU2NvcGUgfSBmcm9tICcuL3Njb3BlJztcbnZhciBlbXB0eUFycmF5ID0gW107XG52YXIgRm9jdXNMb2NrID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9jdXNMb2NrVUkocHJvcHMsIHBhcmVudFJlZikge1xuICB2YXIgX2V4dGVuZHMyO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoKSxcbiAgICByZWFsT2JzZXJ2ZWQgPSBfUmVhY3QkdXNlU3RhdGVbMF0sXG4gICAgc2V0T2JzZXJ2ZWQgPSBfUmVhY3QkdXNlU3RhdGVbMV07XG4gIHZhciBvYnNlcnZlZCA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgaXNBY3RpdmUgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICB2YXIgb3JpZ2luYWxGb2N1c2VkRWxlbWVudCA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTIgPSBSZWFjdC51c2VTdGF0ZSh7fSksXG4gICAgdXBkYXRlID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgX3Byb3BzJGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQsXG4gICAgZGlzYWJsZWQgPSBfcHJvcHMkZGlzYWJsZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJGRpc2FibGVkLFxuICAgIF9wcm9wcyRub0ZvY3VzR3VhcmRzID0gcHJvcHMubm9Gb2N1c0d1YXJkcyxcbiAgICBub0ZvY3VzR3VhcmRzID0gX3Byb3BzJG5vRm9jdXNHdWFyZHMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJG5vRm9jdXNHdWFyZHMsXG4gICAgX3Byb3BzJHBlcnNpc3RlbnRGb2N1ID0gcHJvcHMucGVyc2lzdGVudEZvY3VzLFxuICAgIHBlcnNpc3RlbnRGb2N1cyA9IF9wcm9wcyRwZXJzaXN0ZW50Rm9jdSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcHJvcHMkcGVyc2lzdGVudEZvY3UsXG4gICAgX3Byb3BzJGNyb3NzRnJhbWUgPSBwcm9wcy5jcm9zc0ZyYW1lLFxuICAgIGNyb3NzRnJhbWUgPSBfcHJvcHMkY3Jvc3NGcmFtZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRjcm9zc0ZyYW1lLFxuICAgIF9wcm9wcyRhdXRvRm9jdXMgPSBwcm9wcy5hdXRvRm9jdXMsXG4gICAgYXV0b0ZvY3VzID0gX3Byb3BzJGF1dG9Gb2N1cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRhdXRvRm9jdXMsXG4gICAgYWxsb3dUZXh0U2VsZWN0aW9uID0gcHJvcHMuYWxsb3dUZXh0U2VsZWN0aW9uLFxuICAgIGdyb3VwID0gcHJvcHMuZ3JvdXAsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIHdoaXRlTGlzdCA9IHByb3BzLndoaXRlTGlzdCxcbiAgICBoYXNQb3NpdGl2ZUluZGljZXMgPSBwcm9wcy5oYXNQb3NpdGl2ZUluZGljZXMsXG4gICAgX3Byb3BzJHNoYXJkcyA9IHByb3BzLnNoYXJkcyxcbiAgICBzaGFyZHMgPSBfcHJvcHMkc2hhcmRzID09PSB2b2lkIDAgPyBlbXB0eUFycmF5IDogX3Byb3BzJHNoYXJkcyxcbiAgICBfcHJvcHMkYXMgPSBwcm9wcy5hcyxcbiAgICBDb250YWluZXIgPSBfcHJvcHMkYXMgPT09IHZvaWQgMCA/ICdkaXYnIDogX3Byb3BzJGFzLFxuICAgIF9wcm9wcyRsb2NrUHJvcHMgPSBwcm9wcy5sb2NrUHJvcHMsXG4gICAgY29udGFpbmVyUHJvcHMgPSBfcHJvcHMkbG9ja1Byb3BzID09PSB2b2lkIDAgPyB7fSA6IF9wcm9wcyRsb2NrUHJvcHMsXG4gICAgU2lkZUNhciA9IHByb3BzLnNpZGVDYXIsXG4gICAgX3Byb3BzJHJldHVybkZvY3VzID0gcHJvcHMucmV0dXJuRm9jdXMsXG4gICAgc2hvdWxkUmV0dXJuRm9jdXMgPSBfcHJvcHMkcmV0dXJuRm9jdXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJHJldHVybkZvY3VzLFxuICAgIGZvY3VzT3B0aW9ucyA9IHByb3BzLmZvY3VzT3B0aW9ucyxcbiAgICBvbkFjdGl2YXRpb25DYWxsYmFjayA9IHByb3BzLm9uQWN0aXZhdGlvbixcbiAgICBvbkRlYWN0aXZhdGlvbkNhbGxiYWNrID0gcHJvcHMub25EZWFjdGl2YXRpb247XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUzID0gUmVhY3QudXNlU3RhdGUoe30pLFxuICAgIGlkID0gX1JlYWN0JHVzZVN0YXRlM1swXTtcbiAgdmFyIG9uQWN0aXZhdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIGNhcHR1cmVGb2N1c1Jlc3RvcmUgPSBfcmVmLmNhcHR1cmVGb2N1c1Jlc3RvcmU7XG4gICAgaWYgKCFvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQpIHtcbiAgICAgIHZhciBfZG9jdW1lbnQ7XG4gICAgICB2YXIgYWN0aXZlRWxlbWVudCA9IChfZG9jdW1lbnQgPSBkb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50ID0gYWN0aXZlRWxlbWVudDtcbiAgICAgIGlmIChhY3RpdmVFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudCA9IGNhcHR1cmVGb2N1c1Jlc3RvcmUoYWN0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvYnNlcnZlZC5jdXJyZW50ICYmIG9uQWN0aXZhdGlvbkNhbGxiYWNrKSB7XG4gICAgICBvbkFjdGl2YXRpb25DYWxsYmFjayhvYnNlcnZlZC5jdXJyZW50KTtcbiAgICB9XG4gICAgaXNBY3RpdmUuY3VycmVudCA9IHRydWU7XG4gICAgdXBkYXRlKCk7XG4gIH0sIFtvbkFjdGl2YXRpb25DYWxsYmFja10pO1xuICB2YXIgb25EZWFjdGl2YXRpb24gPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaXNBY3RpdmUuY3VycmVudCA9IGZhbHNlO1xuICAgIGlmIChvbkRlYWN0aXZhdGlvbkNhbGxiYWNrKSB7XG4gICAgICBvbkRlYWN0aXZhdGlvbkNhbGxiYWNrKG9ic2VydmVkLmN1cnJlbnQpO1xuICAgIH1cbiAgICB1cGRhdGUoKTtcbiAgfSwgW29uRGVhY3RpdmF0aW9uQ2FsbGJhY2tdKTtcbiAgdmFyIHJldHVybkZvY3VzID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGFsbG93RGVmZXIpIHtcbiAgICB2YXIgZm9jdXNSZXN0b3JlID0gb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50O1xuICAgIGlmIChmb2N1c1Jlc3RvcmUpIHtcbiAgICAgIHZhciByZXR1cm5Gb2N1c1RvID0gKHR5cGVvZiBmb2N1c1Jlc3RvcmUgPT09ICdmdW5jdGlvbicgPyBmb2N1c1Jlc3RvcmUoKSA6IGZvY3VzUmVzdG9yZSkgfHwgZG9jdW1lbnQuYm9keTtcbiAgICAgIHZhciBob3dUb1JldHVybkZvY3VzID0gdHlwZW9mIHNob3VsZFJldHVybkZvY3VzID09PSAnZnVuY3Rpb24nID8gc2hvdWxkUmV0dXJuRm9jdXMocmV0dXJuRm9jdXNUbykgOiBzaG91bGRSZXR1cm5Gb2N1cztcbiAgICAgIGlmIChob3dUb1JldHVybkZvY3VzKSB7XG4gICAgICAgIHZhciByZXR1cm5Gb2N1c09wdGlvbnMgPSB0eXBlb2YgaG93VG9SZXR1cm5Gb2N1cyA9PT0gJ29iamVjdCcgPyBob3dUb1JldHVybkZvY3VzIDogdW5kZWZpbmVkO1xuICAgICAgICBvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBpZiAoYWxsb3dEZWZlcikge1xuICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybkZvY3VzVG8uZm9jdXMocmV0dXJuRm9jdXNPcHRpb25zKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm5Gb2N1c1RvLmZvY3VzKHJldHVybkZvY3VzT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzaG91bGRSZXR1cm5Gb2N1c10pO1xuICB2YXIgb25Gb2N1cyA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChpc0FjdGl2ZS5jdXJyZW50KSB7XG4gICAgICBtZWRpdW1Gb2N1cy51c2VNZWRpdW0oZXZlbnQpO1xuICAgIH1cbiAgfSwgW10pO1xuICB2YXIgb25CbHVyID0gbWVkaXVtQmx1ci51c2VNZWRpdW07XG4gIHZhciBzZXRPYnNlcnZlTm9kZSA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdPYnNlcnZlZCkge1xuICAgIGlmIChvYnNlcnZlZC5jdXJyZW50ICE9PSBuZXdPYnNlcnZlZCkge1xuICAgICAgb2JzZXJ2ZWQuY3VycmVudCA9IG5ld09ic2VydmVkO1xuICAgICAgc2V0T2JzZXJ2ZWQobmV3T2JzZXJ2ZWQpO1xuICAgIH1cbiAgfSwgW10pO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2YgYWxsb3dUZXh0U2VsZWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS53YXJuKCdSZWFjdC1Gb2N1cy1Mb2NrOiBhbGxvd1RleHRTZWxlY3Rpb24gaXMgZGVwcmVjYXRlZCBhbmQgZW5hYmxlZCBieSBkZWZhdWx0Jyk7XG4gICAgfVxuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIW9ic2VydmVkLmN1cnJlbnQgJiYgdHlwZW9mIENvbnRhaW5lciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRm9jdXNMb2NrOiBjb3VsZCBub3Qgb2J0YWluIHJlZiB0byBpbnRlcm5hbCBub2RlJyk7XG4gICAgICB9XG4gICAgfSwgW10pO1xuICB9XG4gIHZhciBsb2NrUHJvcHMgPSBfZXh0ZW5kcygoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltjb25zdGFudHMuRk9DVVNfRElTQUJMRURdID0gZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgX2V4dGVuZHMyW2NvbnN0YW50cy5GT0NVU19HUk9VUF0gPSBncm91cCwgX2V4dGVuZHMyKSwgY29udGFpbmVyUHJvcHMpO1xuICB2YXIgaGFzTGVhZGluZ0d1YXJkcyA9IG5vRm9jdXNHdWFyZHMgIT09IHRydWU7XG4gIHZhciBoYXNUYWlsaW5nR3VhcmRzID0gaGFzTGVhZGluZ0d1YXJkcyAmJiBub0ZvY3VzR3VhcmRzICE9PSAndGFpbCc7XG4gIHZhciBtZXJnZWRSZWYgPSB1c2VNZXJnZVJlZnMoW3BhcmVudFJlZiwgc2V0T2JzZXJ2ZU5vZGVdKTtcbiAgdmFyIGZvY3VzU2NvcGVWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvYnNlcnZlZDogb2JzZXJ2ZWQsXG4gICAgICBzaGFyZHM6IHNoYXJkcyxcbiAgICAgIGVuYWJsZWQ6ICFkaXNhYmxlZCxcbiAgICAgIGFjdGl2ZTogaXNBY3RpdmUuY3VycmVudFxuICAgIH07XG4gIH0sIFtkaXNhYmxlZCwgaXNBY3RpdmUuY3VycmVudCwgc2hhcmRzLCByZWFsT2JzZXJ2ZWRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBoYXNMZWFkaW5nR3VhcmRzICYmIFtcbiAgLyojX19QVVJFX18qL1xuICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwiZ3VhcmQtZmlyc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IDAsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pLCBoYXNQb3NpdGl2ZUluZGljZXMgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLW5lYXJlc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IDEsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pIDogbnVsbF0sICFkaXNhYmxlZCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCB7XG4gICAgaWQ6IGlkLFxuICAgIHNpZGVDYXI6IG1lZGl1bVNpZGVjYXIsXG4gICAgb2JzZXJ2ZWQ6IHJlYWxPYnNlcnZlZCxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgcGVyc2lzdGVudEZvY3VzOiBwZXJzaXN0ZW50Rm9jdXMsXG4gICAgY3Jvc3NGcmFtZTogY3Jvc3NGcmFtZSxcbiAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICB3aGl0ZUxpc3Q6IHdoaXRlTGlzdCxcbiAgICBzaGFyZHM6IHNoYXJkcyxcbiAgICBvbkFjdGl2YXRpb246IG9uQWN0aXZhdGlvbixcbiAgICBvbkRlYWN0aXZhdGlvbjogb25EZWFjdGl2YXRpb24sXG4gICAgcmV0dXJuRm9jdXM6IHJldHVybkZvY3VzLFxuICAgIGZvY3VzT3B0aW9uczogZm9jdXNPcHRpb25zLFxuICAgIG5vRm9jdXNHdWFyZHM6IG5vRm9jdXNHdWFyZHNcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRhaW5lciwgX2V4dGVuZHMoe1xuICAgIHJlZjogbWVyZ2VkUmVmXG4gIH0sIGxvY2tQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIG9uQmx1cjogb25CbHVyLFxuICAgIG9uRm9jdXM6IG9uRm9jdXNcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGZvY3VzU2NvcGUuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogZm9jdXNTY29wZVZhbHVlXG4gIH0sIGNoaWxkcmVuKSksIGhhc1RhaWxpbmdHdWFyZHMgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIFwiZGF0YS1mb2N1cy1ndWFyZFwiOiB0cnVlLFxuICAgIHRhYkluZGV4OiBkaXNhYmxlZCA/IC0xIDogMCxcbiAgICBzdHlsZTogaGlkZGVuR3VhcmRcbiAgfSkpO1xufSk7XG5Gb2N1c0xvY2sucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBjaGlsZHJlbjogbm9kZSxcbiAgZGlzYWJsZWQ6IGJvb2wsXG4gIHJldHVybkZvY3VzOiBvbmVPZlR5cGUoW2Jvb2wsIG9iamVjdCwgZnVuY10pLFxuICBmb2N1c09wdGlvbnM6IG9iamVjdCxcbiAgbm9Gb2N1c0d1YXJkczogYm9vbCxcbiAgaGFzUG9zaXRpdmVJbmRpY2VzOiBib29sLFxuICBhbGxvd1RleHRTZWxlY3Rpb246IGJvb2wsXG4gIGF1dG9Gb2N1czogYm9vbCxcbiAgcGVyc2lzdGVudEZvY3VzOiBib29sLFxuICBjcm9zc0ZyYW1lOiBib29sLFxuICBncm91cDogc3RyaW5nLFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgd2hpdGVMaXN0OiBmdW5jLFxuICBzaGFyZHM6IGFycmF5T2YoYW55KSxcbiAgYXM6IG9uZU9mVHlwZShbc3RyaW5nLCBmdW5jLCBvYmplY3RdKSxcbiAgbG9ja1Byb3BzOiBvYmplY3QsXG4gIG9uQWN0aXZhdGlvbjogZnVuYyxcbiAgb25EZWFjdGl2YXRpb246IGZ1bmMsXG4gIHNpZGVDYXI6IGFueS5pc1JlcXVpcmVkXG59IDoge307XG5leHBvcnQgZGVmYXVsdCBGb2N1c0xvY2s7IiwgIi8qKlxuICogZGVmaW5lcyBhIGZvY3VzIGdyb3VwXG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfR1JPVVAgPSAnZGF0YS1mb2N1cy1sb2NrJztcbi8qKlxuICogZGlzYWJsZXMgZWxlbWVudCBkaXNjb3ZlcnkgaW5zaWRlIGEgZ3JvdXAgbWFya2VkIGJ5IGtleVxuICovXG5leHBvcnQgdmFyIEZPQ1VTX0RJU0FCTEVEID0gJ2RhdGEtZm9jdXMtbG9jay1kaXNhYmxlZCc7XG4vKipcbiAqIGFsbG93cyB1bmNvbnRyb2xsZWQgZm9jdXMgd2l0aGluIHRoZSBtYXJrZWQgYXJlYSwgZWZmZWN0aXZlbHkgZGlzYWJsaW5nIGZvY3VzIGxvY2sgZm9yIGl0J3MgY29udGVudFxuICovXG5leHBvcnQgdmFyIEZPQ1VTX0FMTE9XID0gJ2RhdGEtbm8tZm9jdXMtbG9jayc7XG4vKipcbiAqIGluc3RydWN0cyBhdXRvZm9jdXMgZW5naW5lIHRvIHBpY2sgZGVmYXVsdCBhdXRvZm9jdXMgaW5zaWRlIGEgZ2l2ZW4gbm9kZVxuICogY2FuIGJlIHNldCBvbiB0aGUgZWxlbWVudCBvciBjb250YWluZXJcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19BVVRPID0gJ2RhdGEtYXV0b2ZvY3VzLWluc2lkZSc7XG4vKipcbiAqIGluc3RydWN0cyBhdXRvZm9jdXMgdG8gaWdub3JlIGVsZW1lbnRzIHdpdGhpbiBhIGdpdmVuIG5vZGVcbiAqIGNhbiBiZSBzZXQgb24gdGhlIGVsZW1lbnQgb3IgY29udGFpbmVyXG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfTk9fQVVUT0ZPQ1VTID0gJ2RhdGEtbm8tYXV0b2ZvY3VzJztcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuZXhwb3J0IHZhciBoaWRkZW5HdWFyZCA9IHtcbiAgd2lkdGg6ICcxcHgnLFxuICBoZWlnaHQ6ICcwcHgnLFxuICBwYWRkaW5nOiAwLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHBvc2l0aW9uOiAnZml4ZWQnLFxuICB0b3A6ICcxcHgnLFxuICBsZWZ0OiAnMXB4J1xufTtcbnZhciBJbkZvY3VzR3VhcmQgPSBmdW5jdGlvbiBJbkZvY3VzR3VhcmQoX3JlZikge1xuICB2YXIgX3JlZiRjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2hpbGRyZW4gPSBfcmVmJGNoaWxkcmVuID09PSB2b2lkIDAgPyBudWxsIDogX3JlZiRjaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLWZpcnN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgXCJkYXRhLWZvY3VzLWF1dG8tZ3VhcmRcIjogdHJ1ZSxcbiAgICBzdHlsZTogaGlkZGVuR3VhcmRcbiAgfSksIGNoaWxkcmVuLCBjaGlsZHJlbiAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLWxhc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICBcImRhdGEtZm9jdXMtYXV0by1ndWFyZFwiOiB0cnVlLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSk7XG59O1xuSW5Gb2N1c0d1YXJkLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59IDoge307XG5leHBvcnQgZGVmYXVsdCBJbkZvY3VzR3VhcmQ7IiwgImltcG9ydCB7IGNyZWF0ZU1lZGl1bSwgY3JlYXRlU2lkZWNhck1lZGl1bSB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmV4cG9ydCB2YXIgbWVkaXVtRm9jdXMgPSBjcmVhdGVNZWRpdW0oe30sIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICBjdXJyZW50VGFyZ2V0ID0gX3JlZi5jdXJyZW50VGFyZ2V0O1xuICByZXR1cm4ge1xuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgfTtcbn0pO1xuZXhwb3J0IHZhciBtZWRpdW1CbHVyID0gY3JlYXRlTWVkaXVtKCk7XG5leHBvcnQgdmFyIG1lZGl1bUVmZmVjdCA9IGNyZWF0ZU1lZGl1bSgpO1xuZXhwb3J0IHZhciBtZWRpdW1TaWRlY2FyID0gY3JlYXRlU2lkZWNhck1lZGl1bSh7XG4gIGFzeW5jOiB0cnVlLFxuICBzc3I6IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbn0pOyIsICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBmb2N1c1Njb3BlID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTsiLCAiZXhwb3J0IGZ1bmN0aW9uIGRlZmVyQWN0aW9uKGFjdGlvbikge1xuICBzZXRUaW1lb3V0KGFjdGlvbiwgMSk7XG59XG5leHBvcnQgdmFyIGlubGluZVByb3AgPSBmdW5jdGlvbiBpbmxpbmVQcm9wKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBvYmogPSB7fTtcbiAgb2JqW25hbWVdID0gdmFsdWU7XG4gIHJldHVybiBvYmo7XG59O1xuZXhwb3J0IHZhciBleHRyYWN0UmVmID0gZnVuY3Rpb24gZXh0cmFjdFJlZihyZWYpIHtcbiAgcmV0dXJuIHJlZiAmJiAnY3VycmVudCcgaW4gcmVmID8gcmVmLmN1cnJlbnQgOiByZWY7XG59OyIsICJpbXBvcnQgRm9jdXNMb2NrVUkgZnJvbSAnLi9Mb2NrJztcbmltcG9ydCBBdXRvRm9jdXNJbnNpZGUgZnJvbSAnLi9BdXRvRm9jdXNJbnNpZGUnO1xuaW1wb3J0IE1vdmVGb2N1c0luc2lkZSwgeyB1c2VGb2N1c0luc2lkZSB9IGZyb20gJy4vTW92ZUZvY3VzSW5zaWRlJztcbmltcG9ydCBGcmVlRm9jdXNJbnNpZGUgZnJvbSAnLi9GcmVlRm9jdXNJbnNpZGUnO1xuaW1wb3J0IEluRm9jdXNHdWFyZCBmcm9tICcuL0ZvY3VzR3VhcmQnO1xuaW1wb3J0IHsgdXNlRm9jdXNDb250cm9sbGVyLCB1c2VGb2N1c1Njb3BlIH0gZnJvbSAnLi91c2UtZm9jdXMtc2NvcGUnO1xuaW1wb3J0IHsgdXNlRm9jdXNTdGF0ZSB9IGZyb20gJy4vdXNlLWZvY3VzLXN0YXRlJztcbmV4cG9ydCB7IEF1dG9Gb2N1c0luc2lkZSwgTW92ZUZvY3VzSW5zaWRlLCBGcmVlRm9jdXNJbnNpZGUsIEluRm9jdXNHdWFyZCwgRm9jdXNMb2NrVUksIHVzZUZvY3VzSW5zaWRlLCB1c2VGb2N1c0NvbnRyb2xsZXIsIHVzZUZvY3VzU2NvcGUsIHVzZUZvY3VzU3RhdGUgfTtcbmV4cG9ydCBkZWZhdWx0IEZvY3VzTG9ja1VJOyIsICJpbXBvcnQgeyBjcmVhdGVTaWRlY2FyTWVkaXVtIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuZXhwb3J0IHZhciBlZmZlY3RDYXIgPSBjcmVhdGVTaWRlY2FyTWVkaXVtKCk7XG5leHBvcnQgdmFyIGZvY3VzSGlkZGVuTWFya2VyID0gJ2RhdGEtZm9jdXMtb24taGlkZGVuJztcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHdpdGhTaWRlRWZmZWN0IGZyb20gJ3JlYWN0LWNsaWVudHNpZGUtZWZmZWN0JztcbmltcG9ydCB7IG1vdmVGb2N1c0luc2lkZSwgZm9jdXNJbnNpZGUsIGZvY3VzSXNIaWRkZW4sIGV4cGFuZEZvY3VzYWJsZU5vZGVzLCBnZXRGb2N1c2FibGVOb2RlcywgZm9jdXNOZXh0RWxlbWVudCwgZm9jdXNQcmV2RWxlbWVudCwgZm9jdXNGaXJzdEVsZW1lbnQsIGZvY3VzTGFzdEVsZW1lbnQsIGNhcHR1cmVGb2N1c1Jlc3RvcmUgfSBmcm9tICdmb2N1cy1sb2NrJztcbmltcG9ydCB7IGRlZmVyQWN0aW9uLCBleHRyYWN0UmVmIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IG1lZGl1bUZvY3VzLCBtZWRpdW1CbHVyLCBtZWRpdW1FZmZlY3QgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgZm9jdXNPbkJvZHkgPSBmdW5jdGlvbiBmb2N1c09uQm9keSgpIHtcbiAgcmV0dXJuIGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHk7XG59O1xudmFyIGlzRnJlZUZvY3VzID0gZnVuY3Rpb24gaXNGcmVlRm9jdXMoKSB7XG4gIHJldHVybiBmb2N1c09uQm9keSgpIHx8IGZvY3VzSXNIaWRkZW4oKTtcbn07XG52YXIgbGFzdEFjdGl2ZVRyYXAgPSBudWxsO1xudmFyIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG52YXIgdHJ5UmVzdG9yZUZvY3VzID0gZnVuY3Rpb24gdHJ5UmVzdG9yZUZvY3VzKCkge1xuICByZXR1cm4gbnVsbDtcbn07XG52YXIgbGFzdFBvcnRhbGVkRWxlbWVudCA9IG51bGw7XG52YXIgZm9jdXNXYXNPdXRzaWRlV2luZG93ID0gZmFsc2U7XG52YXIgd2luZG93Rm9jdXNlZCA9IGZhbHNlO1xudmFyIGRlZmF1bHRXaGl0ZWxpc3QgPSBmdW5jdGlvbiBkZWZhdWx0V2hpdGVsaXN0KCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgZm9jdXNXaGl0ZWxpc3RlZCA9IGZ1bmN0aW9uIGZvY3VzV2hpdGVsaXN0ZWQoYWN0aXZlRWxlbWVudCkge1xuICByZXR1cm4gKGxhc3RBY3RpdmVUcmFwLndoaXRlTGlzdCB8fCBkZWZhdWx0V2hpdGVsaXN0KShhY3RpdmVFbGVtZW50KTtcbn07XG52YXIgcmVjb3JkUG9ydGFsID0gZnVuY3Rpb24gcmVjb3JkUG9ydGFsKG9ic2VydmVyTm9kZSwgcG9ydGFsZWRFbGVtZW50KSB7XG4gIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSB7XG4gICAgb2JzZXJ2ZXJOb2RlOiBvYnNlcnZlck5vZGUsXG4gICAgcG9ydGFsZWRFbGVtZW50OiBwb3J0YWxlZEVsZW1lbnRcbiAgfTtcbn07XG52YXIgZm9jdXNJc1BvcnRhbGVkUGFpciA9IGZ1bmN0aW9uIGZvY3VzSXNQb3J0YWxlZFBhaXIoZWxlbWVudCkge1xuICByZXR1cm4gbGFzdFBvcnRhbGVkRWxlbWVudCAmJiBsYXN0UG9ydGFsZWRFbGVtZW50LnBvcnRhbGVkRWxlbWVudCA9PT0gZWxlbWVudDtcbn07XG5mdW5jdGlvbiBhdXRvR3VhcmQoc3RhcnRJbmRleCwgZW5kLCBzdGVwLCBhbGxOb2Rlcykge1xuICB2YXIgbGFzdEd1YXJkID0gbnVsbDtcbiAgdmFyIGkgPSBzdGFydEluZGV4O1xuICBkbyB7XG4gICAgdmFyIGl0ZW0gPSBhbGxOb2Rlc1tpXTtcbiAgICBpZiAoaXRlbS5ndWFyZCkge1xuICAgICAgaWYgKGl0ZW0ubm9kZS5kYXRhc2V0LmZvY3VzQXV0b0d1YXJkKSB7XG4gICAgICAgIGxhc3RHdWFyZCA9IGl0ZW07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpdGVtLmxvY2tJdGVtKSB7XG4gICAgICBpZiAoaSAhPT0gc3RhcnRJbmRleCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsYXN0R3VhcmQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0gd2hpbGUgKChpICs9IHN0ZXApICE9PSBlbmQpO1xuICBpZiAobGFzdEd1YXJkKSB7XG4gICAgbGFzdEd1YXJkLm5vZGUudGFiSW5kZXggPSAwO1xuICB9XG59XG52YXIgZm9jdXNXYXNPdXRzaWRlID0gZnVuY3Rpb24gZm9jdXNXYXNPdXRzaWRlKGNyb3NzRnJhbWVPcHRpb24pIHtcbiAgaWYgKGNyb3NzRnJhbWVPcHRpb24pIHtcbiAgICByZXR1cm4gQm9vbGVhbihmb2N1c1dhc091dHNpZGVXaW5kb3cpO1xuICB9XG4gIHJldHVybiBmb2N1c1dhc091dHNpZGVXaW5kb3cgPT09ICdtZWFud2hpbGUnO1xufTtcbnZhciBjaGVja0luSG9zdCA9IGZ1bmN0aW9uIGNoZWNrSW5Ib3N0KGNoZWNrLCBlbCwgYm91bmRhcnkpIHtcbiAgcmV0dXJuIGVsICYmIChlbC5ob3N0ID09PSBjaGVjayAmJiAoIWVsLmFjdGl2ZUVsZW1lbnQgfHwgYm91bmRhcnkuY29udGFpbnMoZWwuYWN0aXZlRWxlbWVudCkpIHx8IGVsLnBhcmVudE5vZGUgJiYgY2hlY2tJbkhvc3QoY2hlY2ssIGVsLnBhcmVudE5vZGUsIGJvdW5kYXJ5KSk7XG59O1xudmFyIHdpdGhpbkhvc3QgPSBmdW5jdGlvbiB3aXRoaW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdBcmVhKSB7XG4gIHJldHVybiB3b3JraW5nQXJlYS5zb21lKGZ1bmN0aW9uIChhcmVhKSB7XG4gICAgcmV0dXJuIGNoZWNrSW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIGFyZWEsIGFyZWEpO1xuICB9KTtcbn07XG52YXIgZ2V0Tm9kZUZvY3VzYWJsZXMgPSBmdW5jdGlvbiBnZXROb2RlRm9jdXNhYmxlcyhub2Rlcykge1xuICByZXR1cm4gZ2V0Rm9jdXNhYmxlTm9kZXMobm9kZXMsIG5ldyBNYXAoKSk7XG59O1xudmFyIGlzTm90Rm9jdXNhYmxlID0gZnVuY3Rpb24gaXNOb3RGb2N1c2FibGUobm9kZSkge1xuICByZXR1cm4gIWdldE5vZGVGb2N1c2FibGVzKFtub2RlLnBhcmVudE5vZGVdKS5zb21lKGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBlbC5ub2RlID09PSBub2RlO1xuICB9KTtcbn07XG52YXIgYWN0aXZhdGVUcmFwID0gZnVuY3Rpb24gYWN0aXZhdGVUcmFwKCkge1xuICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gIGlmIChsYXN0QWN0aXZlVHJhcCkge1xuICAgIHZhciBfbGFzdEFjdGl2ZVRyYXAgPSBsYXN0QWN0aXZlVHJhcCxcbiAgICAgIG9ic2VydmVkID0gX2xhc3RBY3RpdmVUcmFwLm9ic2VydmVkLFxuICAgICAgcGVyc2lzdGVudEZvY3VzID0gX2xhc3RBY3RpdmVUcmFwLnBlcnNpc3RlbnRGb2N1cyxcbiAgICAgIGF1dG9Gb2N1cyA9IF9sYXN0QWN0aXZlVHJhcC5hdXRvRm9jdXMsXG4gICAgICBzaGFyZHMgPSBfbGFzdEFjdGl2ZVRyYXAuc2hhcmRzLFxuICAgICAgY3Jvc3NGcmFtZSA9IF9sYXN0QWN0aXZlVHJhcC5jcm9zc0ZyYW1lLFxuICAgICAgZm9jdXNPcHRpb25zID0gX2xhc3RBY3RpdmVUcmFwLmZvY3VzT3B0aW9ucyxcbiAgICAgIG5vRm9jdXNHdWFyZHMgPSBfbGFzdEFjdGl2ZVRyYXAubm9Gb2N1c0d1YXJkcztcbiAgICB2YXIgd29ya2luZ05vZGUgPSBvYnNlcnZlZCB8fCBsYXN0UG9ydGFsZWRFbGVtZW50ICYmIGxhc3RQb3J0YWxlZEVsZW1lbnQucG9ydGFsZWRFbGVtZW50O1xuICAgIGlmIChmb2N1c09uQm9keSgpICYmIGxhc3RBY3RpdmVGb2N1cykge1xuICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGxhc3RBY3RpdmVGb2N1cykgfHwgaXNOb3RGb2N1c2FibGUobGFzdEFjdGl2ZUZvY3VzKSkge1xuICAgICAgICBsYXN0QWN0aXZlRm9jdXMgPSBudWxsO1xuICAgICAgICB2YXIgbmV3VGFyZ2V0ID0gdHJ5UmVzdG9yZUZvY3VzKCk7XG4gICAgICAgIGlmIChuZXdUYXJnZXQpIHtcbiAgICAgICAgICBuZXdUYXJnZXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKHdvcmtpbmdOb2RlKSB7XG4gICAgICB2YXIgd29ya2luZ0FyZWEgPSBbd29ya2luZ05vZGVdLmNvbmNhdChzaGFyZHMubWFwKGV4dHJhY3RSZWYpLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICB2YXIgc2hvdWxkRm9yY2VSZXN0b3JlRm9jdXMgPSBmdW5jdGlvbiBzaG91bGRGb3JjZVJlc3RvcmVGb2N1cygpIHtcbiAgICAgICAgaWYgKCFmb2N1c1dhc091dHNpZGUoY3Jvc3NGcmFtZSkgfHwgIW5vRm9jdXNHdWFyZHMgfHwgIWxhc3RBY3RpdmVGb2N1cyB8fCB3aW5kb3dGb2N1c2VkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBub2RlcyA9IGdldE5vZGVGb2N1c2FibGVzKHdvcmtpbmdBcmVhKTtcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IG5vZGVzLmZpbmRJbmRleChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgIHZhciBub2RlID0gX3JlZi5ub2RlO1xuICAgICAgICAgIHJldHVybiBub2RlID09PSBsYXN0QWN0aXZlRm9jdXM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbGFzdEluZGV4ID09PSAwIHx8IGxhc3RJbmRleCA9PT0gbm9kZXMubGVuZ3RoIC0gMTtcbiAgICAgIH07XG4gICAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgZm9jdXNXaGl0ZWxpc3RlZChhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBpZiAocGVyc2lzdGVudEZvY3VzIHx8IHNob3VsZEZvcmNlUmVzdG9yZUZvY3VzKCkgfHwgIWlzRnJlZUZvY3VzKCkgfHwgIWxhc3RBY3RpdmVGb2N1cyAmJiBhdXRvRm9jdXMpIHtcbiAgICAgICAgICBpZiAod29ya2luZ05vZGUgJiYgIShmb2N1c0luc2lkZSh3b3JraW5nQXJlYSkgfHwgYWN0aXZlRWxlbWVudCAmJiB3aXRoaW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdBcmVhKSB8fCBmb2N1c0lzUG9ydGFsZWRQYWlyKGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdOb2RlKSkpIHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudCAmJiAhbGFzdEFjdGl2ZUZvY3VzICYmIGFjdGl2ZUVsZW1lbnQgJiYgIWF1dG9Gb2N1cykge1xuICAgICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudC5ibHVyKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzdWx0ID0gbW92ZUZvY3VzSW5zaWRlKHdvcmtpbmdBcmVhLCBsYXN0QWN0aXZlRm9jdXMsIHtcbiAgICAgICAgICAgICAgICBmb2N1c09wdGlvbnM6IGZvY3VzT3B0aW9uc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgbGFzdFBvcnRhbGVkRWxlbWVudCA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb2N1c1dhc091dHNpZGVXaW5kb3cgPSBmYWxzZTtcbiAgICAgICAgICBsYXN0QWN0aXZlRm9jdXMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgIHRyeVJlc3RvcmVGb2N1cyA9IGNhcHR1cmVGb2N1c1Jlc3RvcmUobGFzdEFjdGl2ZUZvY3VzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRvY3VtZW50ICYmIGFjdGl2ZUVsZW1lbnQgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZm9jdXMtYXV0by1ndWFyZF0nKSkge1xuICAgICAgICB2YXIgbmV3QWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHZhciBhbGxOb2RlcyA9IGV4cGFuZEZvY3VzYWJsZU5vZGVzKHdvcmtpbmdBcmVhKTtcbiAgICAgICAgdmFyIGZvY3VzZWRJbmRleCA9IGFsbE5vZGVzLm1hcChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IF9yZWYyLm5vZGU7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0pLmluZGV4T2YobmV3QWN0aXZlRWxlbWVudCk7XG4gICAgICAgIGlmIChmb2N1c2VkSW5kZXggPiAtMSkge1xuICAgICAgICAgIGFsbE5vZGVzLmZpbHRlcihmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgICAgIHZhciBndWFyZCA9IF9yZWYzLmd1YXJkLFxuICAgICAgICAgICAgICBub2RlID0gX3JlZjMubm9kZTtcbiAgICAgICAgICAgIHJldHVybiBndWFyZCAmJiBub2RlLmRhdGFzZXQuZm9jdXNBdXRvR3VhcmQ7XG4gICAgICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gX3JlZjQubm9kZTtcbiAgICAgICAgICAgIHJldHVybiBub2RlLnJlbW92ZUF0dHJpYnV0ZSgndGFiSW5kZXgnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhdXRvR3VhcmQoZm9jdXNlZEluZGV4LCBhbGxOb2Rlcy5sZW5ndGgsICsxLCBhbGxOb2Rlcyk7XG4gICAgICAgICAgYXV0b0d1YXJkKGZvY3VzZWRJbmRleCwgLTEsIC0xLCBhbGxOb2Rlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgb25UcmFwID0gZnVuY3Rpb24gb25UcmFwKGV2ZW50KSB7XG4gIGlmIChhY3RpdmF0ZVRyYXAoKSAmJiBldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn07XG52YXIgb25CbHVyID0gZnVuY3Rpb24gb25CbHVyKCkge1xuICByZXR1cm4gZGVmZXJBY3Rpb24oYWN0aXZhdGVUcmFwKTtcbn07XG52YXIgb25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoZXZlbnQpIHtcbiAgdmFyIHNvdXJjZSA9IGV2ZW50LnRhcmdldDtcbiAgdmFyIGN1cnJlbnROb2RlID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgaWYgKCFjdXJyZW50Tm9kZS5jb250YWlucyhzb3VyY2UpKSB7XG4gICAgcmVjb3JkUG9ydGFsKGN1cnJlbnROb2RlLCBzb3VyY2UpO1xuICB9XG59O1xudmFyIEZvY3VzV2F0Y2hlciA9IGZ1bmN0aW9uIEZvY3VzV2F0Y2hlcigpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xudmFyIEZvY3VzVHJhcCA9IGZ1bmN0aW9uIEZvY3VzVHJhcChfcmVmNSkge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmNS5jaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBvbkJsdXI6IG9uQmx1cixcbiAgICBvbkZvY3VzOiBvbkZvY3VzXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5Gb2N1c1RyYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZFxufSA6IHt9O1xudmFyIG9uV2luZG93Rm9jdXMgPSBmdW5jdGlvbiBvbldpbmRvd0ZvY3VzKCkge1xuICB3aW5kb3dGb2N1c2VkID0gdHJ1ZTtcbn07XG52YXIgb25XaW5kb3dCbHVyID0gZnVuY3Rpb24gb25XaW5kb3dCbHVyKCkge1xuICB3aW5kb3dGb2N1c2VkID0gZmFsc2U7XG4gIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdqdXN0JztcbiAgZGVmZXJBY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdtZWFud2hpbGUnO1xuICB9KTtcbn07XG52YXIgYXR0YWNoSGFuZGxlciA9IGZ1bmN0aW9uIGF0dGFjaEhhbmRsZXIoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBvblRyYXApO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIG9uQmx1cik7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIG9uV2luZG93Rm9jdXMpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uV2luZG93Qmx1cik7XG59O1xudmFyIGRldGFjaEhhbmRsZXIgPSBmdW5jdGlvbiBkZXRhY2hIYW5kbGVyKCkge1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJywgb25UcmFwKTtcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBvbkJsdXIpO1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbldpbmRvd0ZvY3VzKTtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbldpbmRvd0JsdXIpO1xufTtcbmZ1bmN0aW9uIHJlZHVjZVByb3BzVG9TdGF0ZShwcm9wc0xpc3QpIHtcbiAgcmV0dXJuIHByb3BzTGlzdC5maWx0ZXIoZnVuY3Rpb24gKF9yZWY2KSB7XG4gICAgdmFyIGRpc2FibGVkID0gX3JlZjYuZGlzYWJsZWQ7XG4gICAgcmV0dXJuICFkaXNhYmxlZDtcbiAgfSk7XG59XG52YXIgZm9jdXNMb2NrQVBJID0ge1xuICBtb3ZlRm9jdXNJbnNpZGU6IG1vdmVGb2N1c0luc2lkZSxcbiAgZm9jdXNJbnNpZGU6IGZvY3VzSW5zaWRlLFxuICBmb2N1c05leHRFbGVtZW50OiBmb2N1c05leHRFbGVtZW50LFxuICBmb2N1c1ByZXZFbGVtZW50OiBmb2N1c1ByZXZFbGVtZW50LFxuICBmb2N1c0ZpcnN0RWxlbWVudDogZm9jdXNGaXJzdEVsZW1lbnQsXG4gIGZvY3VzTGFzdEVsZW1lbnQ6IGZvY3VzTGFzdEVsZW1lbnQsXG4gIGNhcHR1cmVGb2N1c1Jlc3RvcmU6IGNhcHR1cmVGb2N1c1Jlc3RvcmVcbn07XG5mdW5jdGlvbiBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KHRyYXBzKSB7XG4gIHZhciB0cmFwID0gdHJhcHMuc2xpY2UoLTEpWzBdO1xuICBpZiAodHJhcCAmJiAhbGFzdEFjdGl2ZVRyYXApIHtcbiAgICBhdHRhY2hIYW5kbGVyKCk7XG4gIH1cbiAgdmFyIGxhc3RUcmFwID0gbGFzdEFjdGl2ZVRyYXA7XG4gIHZhciBzYW1lVHJhcCA9IGxhc3RUcmFwICYmIHRyYXAgJiYgdHJhcC5pZCA9PT0gbGFzdFRyYXAuaWQ7XG4gIGxhc3RBY3RpdmVUcmFwID0gdHJhcDtcbiAgaWYgKGxhc3RUcmFwICYmICFzYW1lVHJhcCkge1xuICAgIGxhc3RUcmFwLm9uRGVhY3RpdmF0aW9uKCk7XG4gICAgaWYgKCF0cmFwcy5maWx0ZXIoZnVuY3Rpb24gKF9yZWY3KSB7XG4gICAgICB2YXIgaWQgPSBfcmVmNy5pZDtcbiAgICAgIHJldHVybiBpZCA9PT0gbGFzdFRyYXAuaWQ7XG4gICAgfSkubGVuZ3RoKSB7XG4gICAgICBsYXN0VHJhcC5yZXR1cm5Gb2N1cyghdHJhcCk7XG4gICAgfVxuICB9XG4gIGlmICh0cmFwKSB7XG4gICAgbGFzdEFjdGl2ZUZvY3VzID0gbnVsbDtcbiAgICBpZiAoIXNhbWVUcmFwIHx8IGxhc3RUcmFwLm9ic2VydmVkICE9PSB0cmFwLm9ic2VydmVkKSB7XG4gICAgICB0cmFwLm9uQWN0aXZhdGlvbihmb2N1c0xvY2tBUEkpO1xuICAgIH1cbiAgICBhY3RpdmF0ZVRyYXAodHJ1ZSk7XG4gICAgZGVmZXJBY3Rpb24oYWN0aXZhdGVUcmFwKTtcbiAgfSBlbHNlIHtcbiAgICBkZXRhY2hIYW5kbGVyKCk7XG4gICAgbGFzdEFjdGl2ZUZvY3VzID0gbnVsbDtcbiAgfVxufVxubWVkaXVtRm9jdXMuYXNzaWduU3luY01lZGl1bShvbkZvY3VzKTtcbm1lZGl1bUJsdXIuYXNzaWduTWVkaXVtKG9uQmx1cik7XG5tZWRpdW1FZmZlY3QuYXNzaWduTWVkaXVtKGZ1bmN0aW9uIChjYikge1xuICByZXR1cm4gY2IoZm9jdXNMb2NrQVBJKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgd2l0aFNpZGVFZmZlY3QocmVkdWNlUHJvcHNUb1N0YXRlLCBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KShGb2N1c1dhdGNoZXIpOyIsICJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkge1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX3NldFByb3RvdHlwZU9mIGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZSh0LCBvKSB7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdCwgc2V0UHJvdG90eXBlT2YodCwgbyk7XG59XG5leHBvcnQgeyBfaW5oZXJpdHNMb29zZSBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxuZXhwb3J0IHsgdG9QcmltaXRpdmUgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlJztcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIHdpdGhTaWRlRWZmZWN0KHJlZHVjZVByb3BzVG9TdGF0ZSwgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKHR5cGVvZiByZWR1Y2VQcm9wc1RvU3RhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcmVkdWNlUHJvcHNUb1N0YXRlIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShXcmFwcGVkQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoV3JhcHBlZENvbXBvbmVudCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlb2YgV3JhcHBlZENvbXBvbmVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFdyYXBwZWRDb21wb25lbnQgdG8gYmUgYSBSZWFjdCBjb21wb25lbnQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1vdW50ZWRJbnN0YW5jZXMgPSBbXTtcbiAgICB2YXIgc3RhdGU7XG5cbiAgICBmdW5jdGlvbiBlbWl0Q2hhbmdlKCkge1xuICAgICAgc3RhdGUgPSByZWR1Y2VQcm9wc1RvU3RhdGUobW91bnRlZEluc3RhbmNlcy5tYXAoZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5wcm9wcztcbiAgICAgIH0pKTtcbiAgICAgIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQoc3RhdGUpO1xuICAgIH1cblxuICAgIHZhciBTaWRlRWZmZWN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICAgICAgX2luaGVyaXRzTG9vc2UoU2lkZUVmZmVjdCwgX1B1cmVDb21wb25lbnQpO1xuXG4gICAgICBmdW5jdGlvbiBTaWRlRWZmZWN0KCkge1xuICAgICAgICByZXR1cm4gX1B1cmVDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgdG8gdXNlIGRpc3BsYXlOYW1lIG9mIHdyYXBwZWQgY29tcG9uZW50XG4gICAgICBTaWRlRWZmZWN0LnBlZWsgPSBmdW5jdGlvbiBwZWVrKCkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9O1xuXG4gICAgICB2YXIgX3Byb3RvID0gU2lkZUVmZmVjdC5wcm90b3R5cGU7XG5cbiAgICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBtb3VudGVkSW5zdGFuY2VzLnB1c2godGhpcyk7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICB2YXIgaW5kZXggPSBtb3VudGVkSW5zdGFuY2VzLmluZGV4T2YodGhpcyk7XG4gICAgICAgIG1vdW50ZWRJbnN0YW5jZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgZW1pdENoYW5nZSgpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIHRoaXMucHJvcHMpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFNpZGVFZmZlY3Q7XG4gICAgfShQdXJlQ29tcG9uZW50KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShTaWRlRWZmZWN0LCBcImRpc3BsYXlOYW1lXCIsIFwiU2lkZUVmZmVjdChcIiArIGdldERpc3BsYXlOYW1lKFdyYXBwZWRDb21wb25lbnQpICsgXCIpXCIpO1xuXG4gICAgcmV0dXJuIFNpZGVFZmZlY3Q7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTaWRlRWZmZWN0O1xuIiwgIi8qXG5JRTExIHN1cHBvcnRcbiAqL1xuZXhwb3J0IHZhciB0b0FycmF5ID0gZnVuY3Rpb24gKGEpIHtcbiAgICB2YXIgcmV0ID0gQXJyYXkoYS5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkge1xuICAgICAgICByZXRbaV0gPSBhW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufTtcbmV4cG9ydCB2YXIgYXNBcnJheSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiAoQXJyYXkuaXNBcnJheShhKSA/IGEgOiBbYV0pOyB9O1xuZXhwb3J0IHZhciBnZXRGaXJzdCA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiAoQXJyYXkuaXNBcnJheShhKSA/IGFbMF0gOiBhKTsgfTtcbiIsICJpbXBvcnQgeyBGT0NVU19OT19BVVRPRk9DVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xudmFyIGlzRWxlbWVudEhpZGRlbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gd2UgY2FuIG1lYXN1cmUgb25seSBcImVsZW1lbnRzXCJcbiAgICAvLyBjb25zaWRlciBvdGhlcnMgYXMgXCJ2aXNpYmxlXCJcbiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpO1xuICAgIGlmICghY29tcHV0ZWRTdHlsZSB8fCAhY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnIHx8IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAnaGlkZGVuJyk7XG59O1xudmFyIGdldFBhcmVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgY2FuIGFsc28gcG9pbnQgb24gU2hhZG93Um9vdC4gSW4gdGhpcyBjYXNlIC5ob3N0IHdpbGwgcG9pbnQgb24gdGhlIG5leHQgbm9kZVxuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREVcbiAgICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLmhvc3RcbiAgICAgICAgOiBub2RlLnBhcmVudE5vZGU7XG59O1xudmFyIGlzVG9wTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBub2RlID09PSBkb2N1bWVudCB8fCAobm9kZSAmJiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpO1xufTtcbnZhciBpc0luZXJ0ID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUuaGFzQXR0cmlidXRlKCdpbmVydCcpOyB9O1xuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvamVzdC1kb20vYmxvYi9tYWluL3NyYy90by1iZS12aXNpYmxlLmpzXG4gKi9cbnZhciBpc1Zpc2libGVVbmNhY2hlZCA9IGZ1bmN0aW9uIChub2RlLCBjaGVja1BhcmVudCkge1xuICAgIHJldHVybiAhbm9kZSB8fCBpc1RvcE5vZGUobm9kZSkgfHwgKCFpc0VsZW1lbnRIaWRkZW4obm9kZSkgJiYgIWlzSW5lcnQobm9kZSkgJiYgY2hlY2tQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSkpO1xufTtcbmV4cG9ydCB2YXIgaXNWaXNpYmxlQ2FjaGVkID0gZnVuY3Rpb24gKHZpc2liaWxpdHlDYWNoZSwgbm9kZSkge1xuICAgIHZhciBjYWNoZWQgPSB2aXNpYmlsaXR5Q2FjaGUuZ2V0KG5vZGUpO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gaXNWaXNpYmxlVW5jYWNoZWQobm9kZSwgaXNWaXNpYmxlQ2FjaGVkLmJpbmQodW5kZWZpbmVkLCB2aXNpYmlsaXR5Q2FjaGUpKTtcbiAgICB2aXNpYmlsaXR5Q2FjaGUuc2V0KG5vZGUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgaXNBdXRvRm9jdXNBbGxvd2VkVW5jYWNoZWQgPSBmdW5jdGlvbiAobm9kZSwgY2hlY2tQYXJlbnQpIHtcbiAgICByZXR1cm4gbm9kZSAmJiAhaXNUb3BOb2RlKG5vZGUpID8gKGlzQXV0b0ZvY3VzQWxsb3dlZChub2RlKSA/IGNoZWNrUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpIDogZmFsc2UpIDogdHJ1ZTtcbn07XG5leHBvcnQgdmFyIGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZCA9IGZ1bmN0aW9uIChjYWNoZSwgbm9kZSkge1xuICAgIHZhciBjYWNoZWQgPSBjYWNoZS5nZXQobm9kZSk7XG4gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBpc0F1dG9Gb2N1c0FsbG93ZWRVbmNhY2hlZChub2RlLCBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQuYmluZCh1bmRlZmluZWQsIGNhY2hlKSk7XG4gICAgY2FjaGUuc2V0KG5vZGUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgdmFyIGdldERhdGFzZXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbm9kZS5kYXRhc2V0O1xufTtcbmV4cG9ydCB2YXIgaXNIVE1MQnV0dG9uRWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdCVVRUT04nOyB9O1xuZXhwb3J0IHZhciBpc0hUTUxJbnB1dEVsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZS50YWdOYW1lID09PSAnSU5QVVQnOyB9O1xuZXhwb3J0IHZhciBpc1JhZGlvRWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIGlzSFRNTElucHV0RWxlbWVudChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdyYWRpbyc7XG59O1xuZXhwb3J0IHZhciBub3RIaWRkZW5JbnB1dCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuICEoKGlzSFRNTElucHV0RWxlbWVudChub2RlKSB8fCBpc0hUTUxCdXR0b25FbGVtZW50KG5vZGUpKSAmJiAobm9kZS50eXBlID09PSAnaGlkZGVuJyB8fCBub2RlLmRpc2FibGVkKSk7XG59O1xuZXhwb3J0IHZhciBpc0F1dG9Gb2N1c0FsbG93ZWQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBhdHRyaWJ1dGUgPSBub2RlLmdldEF0dHJpYnV0ZShGT0NVU19OT19BVVRPRk9DVVMpO1xuICAgIHJldHVybiAhW3RydWUsICd0cnVlJywgJyddLmluY2x1ZGVzKGF0dHJpYnV0ZSk7XG59O1xuZXhwb3J0IHZhciBpc0d1YXJkID0gZnVuY3Rpb24gKG5vZGUpIHsgdmFyIF9hOyByZXR1cm4gQm9vbGVhbihub2RlICYmICgoX2EgPSBnZXREYXRhc2V0KG5vZGUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXNHdWFyZCkpOyB9O1xuZXhwb3J0IHZhciBpc05vdEFHdWFyZCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiAhaXNHdWFyZChub2RlKTsgfTtcbmV4cG9ydCB2YXIgaXNEZWZpbmVkID0gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIEJvb2xlYW4oeCk7IH07XG4iLCAiaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuZXhwb3J0IHZhciB0YWJTb3J0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgYVRhYiA9IE1hdGgubWF4KDAsIGEudGFiSW5kZXgpO1xuICAgIHZhciBiVGFiID0gTWF0aC5tYXgoMCwgYi50YWJJbmRleCk7XG4gICAgdmFyIHRhYkRpZmYgPSBhVGFiIC0gYlRhYjtcbiAgICB2YXIgaW5kZXhEaWZmID0gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgaWYgKHRhYkRpZmYpIHtcbiAgICAgICAgaWYgKCFhVGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJUYWIpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFiRGlmZiB8fCBpbmRleERpZmY7XG59O1xudmFyIGdldFRhYkluZGV4ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAobm9kZS50YWJJbmRleCA8IDApIHtcbiAgICAgICAgLy8gYWxsIFwiZm9jdXNhYmxlXCIgZWxlbWVudHMgYXJlIGFscmVhZHkgcHJlc2VsZWN0ZWRcbiAgICAgICAgLy8gYnV0IHNvbWUgbWlnaHQgaGF2ZSBpbXBsaWNpdCBuZWdhdGl2ZSB0YWJJbmRleFxuICAgICAgICAvLyByZXR1cm4gMCBmb3IgPGF1ZGlvIHdpdGhvdXQgdGFiSW5kZXggYXR0cmlidXRlIC0gaXQgaXMgXCJ0YWJiYWJsZVwiXG4gICAgICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2RlLnRhYkluZGV4O1xufTtcbmV4cG9ydCB2YXIgb3JkZXJCeVRhYkluZGV4ID0gZnVuY3Rpb24gKG5vZGVzLCBmaWx0ZXJOZWdhdGl2ZSwga2VlcEd1YXJkcykge1xuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSBnZXRUYWJJbmRleChub2RlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICB0YWJJbmRleDoga2VlcEd1YXJkcyAmJiB0YWJJbmRleCA9PT0gLTEgPyAoKG5vZGUuZGF0YXNldCB8fCB7fSkuZm9jdXNHdWFyZCA/IDAgOiAtMSkgOiB0YWJJbmRleCxcbiAgICAgICAgfTtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiAhZmlsdGVyTmVnYXRpdmUgfHwgZGF0YS50YWJJbmRleCA+PSAwOyB9KVxuICAgICAgICAuc29ydCh0YWJTb3J0KTtcbn07XG4iLCAiLyoqXG4gKiBsaXN0IG9mIHRoZSBvYmplY3QgdG8gYmUgY29uc2lkZXJlZCBhcyBmb2N1c2FibGVcbiAqL1xuZXhwb3J0IHZhciB0YWJiYWJsZXMgPSBbXG4gICAgJ2J1dHRvbjplbmFibGVkJyxcbiAgICAnc2VsZWN0OmVuYWJsZWQnLFxuICAgICd0ZXh0YXJlYTplbmFibGVkJyxcbiAgICAnaW5wdXQ6ZW5hYmxlZCcsXG4gICAgLy8gZWxlbWVudHMgd2l0aCBleHBsaWNpdCByb2xlcyB3aWxsIGFsc28gdXNlIGV4cGxpY2l0IHRhYmluZGV4XG4gICAgLy8gJ1tyb2xlPVwiYnV0dG9uXCJdJyxcbiAgICAnYVtocmVmXScsXG4gICAgJ2FyZWFbaHJlZl0nLFxuICAgICdzdW1tYXJ5JyxcbiAgICAnaWZyYW1lJyxcbiAgICAnb2JqZWN0JyxcbiAgICAnZW1iZWQnLFxuICAgICdhdWRpb1tjb250cm9sc10nLFxuICAgICd2aWRlb1tjb250cm9sc10nLFxuICAgICdbdGFiaW5kZXhdJyxcbiAgICAnW2NvbnRlbnRlZGl0YWJsZV0nLFxuICAgICdbYXV0b2ZvY3VzXScsXG5dO1xuIiwgImltcG9ydCB7IEZPQ1VTX0FVVE8gfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuaW1wb3J0IHsgdGFiYmFibGVzIH0gZnJvbSAnLi90YWJiYWJsZXMnO1xudmFyIHF1ZXJ5VGFiYmFibGVzID0gdGFiYmFibGVzLmpvaW4oJywnKTtcbnZhciBxdWVyeUd1YXJkVGFiYmFibGVzID0gXCJcIi5jb25jYXQocXVlcnlUYWJiYWJsZXMsIFwiLCBbZGF0YS1mb2N1cy1ndWFyZF1cIik7XG52YXIgZ2V0Rm9jdXNhYmxlc1dpdGhTaGFkb3dEb20gPSBmdW5jdGlvbiAocGFyZW50LCB3aXRoR3VhcmRzKSB7XG4gICAgcmV0dXJuIHRvQXJyYXkoKHBhcmVudC5zaGFkb3dSb290IHx8IHBhcmVudCkuY2hpbGRyZW4pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjaGlsZCkge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChjaGlsZC5tYXRjaGVzKHdpdGhHdWFyZHMgPyBxdWVyeUd1YXJkVGFiYmFibGVzIDogcXVlcnlUYWJiYWJsZXMpID8gW2NoaWxkXSA6IFtdLCBnZXRGb2N1c2FibGVzV2l0aFNoYWRvd0RvbShjaGlsZCkpO1xuICAgIH0sIFtdKTtcbn07XG52YXIgZ2V0Rm9jdXNhYmxlc1dpdGhJRnJhbWUgPSBmdW5jdGlvbiAocGFyZW50LCB3aXRoR3VhcmRzKSB7XG4gICAgdmFyIF9hO1xuICAgIC8vIGNvbnRlbnREb2N1bWVudCBvZiBpZnJhbWUgd2lsbCBiZSBudWxsIGlmIGN1cnJlbnQgb3JpZ2luIGNhbm5vdCBhY2Nlc3MgaXRcbiAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgJiYgKChfYSA9IHBhcmVudC5jb250ZW50RG9jdW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ib2R5KSkge1xuICAgICAgICByZXR1cm4gZ2V0Rm9jdXNhYmxlcyhbcGFyZW50LmNvbnRlbnREb2N1bWVudC5ib2R5XSwgd2l0aEd1YXJkcyk7XG4gICAgfVxuICAgIHJldHVybiBbcGFyZW50XTtcbn07XG5leHBvcnQgdmFyIGdldEZvY3VzYWJsZXMgPSBmdW5jdGlvbiAocGFyZW50cywgd2l0aEd1YXJkcykge1xuICAgIHJldHVybiBwYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgZm9jdXNhYmxlV2l0aFNoYWRvd0RvbSA9IGdldEZvY3VzYWJsZXNXaXRoU2hhZG93RG9tKHBhcmVudCwgd2l0aEd1YXJkcyk7XG4gICAgICAgIHZhciBmb2N1c2FibGVXaXRoSWZyYW1lcyA9IChfYSA9IFtdKS5jb25jYXQuYXBwbHkoX2EsIGZvY3VzYWJsZVdpdGhTaGFkb3dEb20ubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBnZXRGb2N1c2FibGVzV2l0aElGcmFtZShub2RlLCB3aXRoR3VhcmRzKTsgfSkpO1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChcbiAgICAgICAgLy8gYWRkIGFsbCB0YWJiYWJsZXMgaW5zaWRlIGFuZCB3aXRoaW4gc2hhZG93IERPTXMgaW4gRE9NIG9yZGVyXG4gICAgICAgIGZvY3VzYWJsZVdpdGhJZnJhbWVzLCBcbiAgICAgICAgLy8gYWRkIGlmIG5vZGUgaXMgdGFiYmFibGUgaXRzZWxmXG4gICAgICAgIHBhcmVudC5wYXJlbnROb2RlXG4gICAgICAgICAgICA/IHRvQXJyYXkocGFyZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeVRhYmJhYmxlcykpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZSA9PT0gcGFyZW50OyB9KVxuICAgICAgICAgICAgOiBbXSk7XG4gICAgfSwgW10pO1xufTtcbi8qKlxuICogcmV0dXJuIGEgbGlzdCBvZiBmb2N1c2FibGUgbm9kZXMgd2l0aGluIGFuIGFyZWEgbWFya2VkIGFzIFwiYXV0by1mb2N1c2FibGVcIlxuICogQHBhcmFtIHBhcmVudFxuICovXG5leHBvcnQgdmFyIGdldFBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgIHZhciBwYXJlbnRGb2N1cyA9IHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW1wiLmNvbmNhdChGT0NVU19BVVRPLCBcIl1cIikpO1xuICAgIHJldHVybiB0b0FycmF5KHBhcmVudEZvY3VzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBnZXRGb2N1c2FibGVzKFtub2RlXSk7IH0pXG4gICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbm9kZXMpIHsgcmV0dXJuIGFjYy5jb25jYXQobm9kZXMpOyB9LCBbXSk7XG59O1xuIiwgImltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmltcG9ydCB7IGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZCwgaXNWaXNpYmxlQ2FjaGVkLCBub3RIaWRkZW5JbnB1dCB9IGZyb20gJy4vaXMnO1xuaW1wb3J0IHsgb3JkZXJCeVRhYkluZGV4IH0gZnJvbSAnLi90YWJPcmRlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVzLCBnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyB9IGZyb20gJy4vdGFiVXRpbHMnO1xuLyoqXG4gKiBnaXZlbiBsaXN0IG9mIGZvY3VzYWJsZSBlbGVtZW50cyBrZWVwcyB0aGUgb25lcyB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoXG4gKiBAcGFyYW0gbm9kZXNcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGVcbiAqL1xuZXhwb3J0IHZhciBmaWx0ZXJGb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBpc1Zpc2libGVDYWNoZWQodmlzaWJpbGl0eUNhY2hlLCBub2RlKTsgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm90SGlkZGVuSW5wdXQobm9kZSk7IH0pO1xufTtcbmV4cG9ydCB2YXIgZmlsdGVyQXV0b0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2RlcywgY2FjaGUpIHtcbiAgICBpZiAoY2FjaGUgPT09IHZvaWQgMCkgeyBjYWNoZSA9IG5ldyBNYXAoKTsgfVxuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZChjYWNoZSwgbm9kZSk7IH0pO1xufTtcbi8qKlxuICogIV9fV0FSTklOR19fISBMb3cgbGV2ZWwgQVBJLlxuICogQHJldHVybnMgYWxsIHRhYmJhYmxlIG5vZGVzXG4gKlxuICogQHNlZSB7QGxpbmsgZ2V0Rm9jdXNhYmxlTm9kZXN9IHRvIGdldCBhbnkgZm9jdXNhYmxlIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gdG9wTm9kZXMgLSBhcnJheSBvZiB0b3AgbGV2ZWwgSFRNTEVsZW1lbnRzIHRvIHNlYXJjaCBpbnNpZGVcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGUgLSBhbiBjYWNoZSB0byBzdG9yZSBpbnRlcm1lZGlhdGUgbWVhc3VyZW1lbnRzLiBFeHBlY3RlZCB0byBiZSBhIGZyZXNoIGBuZXcgTWFwYCBvbiBldmVyeSBjYWxsXG4gKi9cbmV4cG9ydCB2YXIgZ2V0VGFiYmFibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlcywgdmlzaWJpbGl0eUNhY2hlLCB3aXRoR3VhcmRzKSB7XG4gICAgcmV0dXJuIG9yZGVyQnlUYWJJbmRleChmaWx0ZXJGb2N1c2FibGUoZ2V0Rm9jdXNhYmxlcyh0b3BOb2Rlcywgd2l0aEd1YXJkcyksIHZpc2liaWxpdHlDYWNoZSksIHRydWUsIHdpdGhHdWFyZHMpO1xufTtcbi8qKlxuICogIV9fV0FSTklOR19fISBMb3cgbGV2ZWwgQVBJLlxuICpcbiAqIEByZXR1cm5zIGFueXRoaW5nIFwiZm9jdXNhYmxlXCIsIG5vdCBvbmx5IHRhYmJhYmxlLiBUaGUgZGlmZmVyZW5jZSBpcyBpbiBgdGFiSW5kZXg9LTFgXG4gKiAod2l0aG91dCBndWFyZHMsIGFzIGxvbmcgYXMgdGhleSBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIGV2ZXIgZm9jdXNlZClcbiAqXG4gKiBAc2VlIHtAbGluayBnZXRUYWJiYWJsZU5vZGVzfSB0byBnZXQgb25seSB0YWJibGUgbm9kZXMgZWxlbWVudFxuICpcbiAqIEBwYXJhbSB0b3BOb2RlcyAtIGFycmF5IG9mIHRvcCBsZXZlbCBIVE1MRWxlbWVudHMgdG8gc2VhcmNoIGluc2lkZVxuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZSAtIGFuIGNhY2hlIHRvIHN0b3JlIGludGVybWVkaWF0ZSBtZWFzdXJlbWVudHMuIEV4cGVjdGVkIHRvIGJlIGEgZnJlc2ggYG5ldyBNYXBgIG9uIGV2ZXJ5IGNhbGxcbiAqL1xuZXhwb3J0IHZhciBnZXRGb2N1c2FibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlcywgdmlzaWJpbGl0eUNhY2hlKSB7XG4gICAgcmV0dXJuIG9yZGVyQnlUYWJJbmRleChmaWx0ZXJGb2N1c2FibGUoZ2V0Rm9jdXNhYmxlcyh0b3BOb2RlcyksIHZpc2liaWxpdHlDYWNoZSksIGZhbHNlKTtcbn07XG4vKipcbiAqIHJldHVybiBsaXN0IG9mIG5vZGVzIHdoaWNoIGFyZSBleHBlY3RlZCB0byBiZSBhdXRvLWZvY3VzZWRcbiAqIEBwYXJhbSB0b3BOb2RlXG4gKiBAcGFyYW0gdmlzaWJpbGl0eUNhY2hlXG4gKi9cbmV4cG9ydCB2YXIgcGFyZW50QXV0b2ZvY3VzYWJsZXMgPSBmdW5jdGlvbiAodG9wTm9kZSwgdmlzaWJpbGl0eUNhY2hlKSB7XG4gICAgcmV0dXJuIGZpbHRlckZvY3VzYWJsZShnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyh0b3BOb2RlKSwgdmlzaWJpbGl0eUNhY2hlKTtcbn07XG4vKlxuICogRGV0ZXJtaW5lcyBpZiBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbiBzY29wZSwgaW5jbHVkaW5nIG5lc3RlZCBzaGFkb3cgRE9Nc1xuICovXG5leHBvcnQgdmFyIGNvbnRhaW5zID0gZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50KSB7XG4gICAgaWYgKHNjb3BlLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zKHNjb3BlLnNoYWRvd1Jvb3QsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzY29wZSkuY29udGFpbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHNjb3BlKS5jb250YWlucy5jYWxsKHNjb3BlLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvQXJyYXkoc2NvcGUuY2hpbGRyZW4pLnNvbWUoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHZhciBpZnJhbWVCb2R5ID0gKF9hID0gY2hpbGQuY29udGVudERvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYm9keTtcbiAgICAgICAgICAgICAgICBpZiAoaWZyYW1lQm9keSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbnMoaWZyYW1lQm9keSwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWlucyhjaGlsZCwgZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHsgRk9DVVNfRElTQUJMRUQsIEZPQ1VTX0dST1VQIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFzQXJyYXksIHRvQXJyYXkgfSBmcm9tICcuL2FycmF5Jztcbi8qKlxuICogaW4gY2FzZSBvZiBtdWx0aXBsZSBub2RlcyBuZXN0ZWQgaW5zaWRlIGVhY2ggb3RoZXJcbiAqIGtlZXBzIG9ubHkgdG9wIG9uZXNcbiAqIHRoaXMgaXMgTyhubG9nbilcbiAqIEBwYXJhbSBub2Rlc1xuICogQHJldHVybnMgeyp9XG4gKi9cbnZhciBmaWx0ZXJOZXN0ZWQgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICB2YXIgY29udGFpbmVkID0gbmV3IFNldCgpO1xuICAgIHZhciBsID0gbm9kZXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSArPSAxKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IGw7IGogKz0gMSkge1xuICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gbm9kZXNbaV0uY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZXNbal0pO1xuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuICAgICAgICAgICAgaWYgKChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb250YWluZWQuYWRkKGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMpID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lZC5hZGQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzLmZpbHRlcihmdW5jdGlvbiAoXywgaW5kZXgpIHsgcmV0dXJuICFjb250YWluZWQuaGFzKGluZGV4KTsgfSk7XG59O1xuLyoqXG4gKiBmaW5kcyB0b3AgbW9zdCBwYXJlbnQgZm9yIGEgbm9kZVxuICogQHBhcmFtIG5vZGVcbiAqIEByZXR1cm5zIHsqfVxuICovXG52YXIgZ2V0VG9wUGFyZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlID8gZ2V0VG9wUGFyZW50KG5vZGUucGFyZW50Tm9kZSkgOiBub2RlO1xufTtcbi8qKlxuICogcmV0dXJucyBhbGwgXCJmb2N1cyBjb250YWluZXJzXCIgaW5zaWRlIGEgZ2l2ZW4gbm9kZVxuICogQHBhcmFtIG5vZGUgLSBub2RlIG9yIG5vZGVzIHRvIGxvb2sgaW5zaWRlXG4gKiBAcmV0dXJucyBFbGVtZW50W11cbiAqL1xuZXhwb3J0IHZhciBnZXRBbGxBZmZlY3RlZE5vZGVzID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgbm9kZXMgPSBhc0FycmF5KG5vZGUpO1xuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoQm9vbGVhbikucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGN1cnJlbnROb2RlKSB7XG4gICAgICAgIHZhciBncm91cCA9IGN1cnJlbnROb2RlLmdldEF0dHJpYnV0ZShGT0NVU19HUk9VUCk7XG4gICAgICAgIGFjYy5wdXNoLmFwcGx5KGFjYywgKGdyb3VwXG4gICAgICAgICAgICA/IGZpbHRlck5lc3RlZCh0b0FycmF5KGdldFRvcFBhcmVudChjdXJyZW50Tm9kZSkucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfR1JPVVAsIFwiPVxcXCJcIikuY29uY2F0KGdyb3VwLCBcIlxcXCJdOm5vdChbXCIpLmNvbmNhdChGT0NVU19ESVNBQkxFRCwgXCI9XFxcImRpc2FibGVkXFxcIl0pXCIpKSkpXG4gICAgICAgICAgICA6IFtjdXJyZW50Tm9kZV0pKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG59O1xuIiwgImV4cG9ydCB2YXIgc2FmZVByb2JlID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufTtcbiIsICIvKipcbiAqIHJldHVybnMgYWN0aXZlIGVsZW1lbnQgZnJvbSBkb2N1bWVudCBvciBmcm9tIG5lc3RlZCBzaGFkb3dkb21zXG4gKi9cbmltcG9ydCB7IHNhZmVQcm9iZSB9IGZyb20gJy4vc2FmZSc7XG4vKipcbiAqIHJldHVybnMgY3VycmVudCBhY3RpdmUgZWxlbWVudC4gSWYgdGhlIGFjdGl2ZSBlbGVtZW50IGlzIGEgXCJjb250YWluZXJcIiBpdHNlbGYoc2hhZG93Um9vdCBvciBpZnJhbWUpIHJldHVybnMgYWN0aXZlIGVsZW1lbnQgaW5zaWRlIGl0XG4gKiBAcGFyYW0gW2luRG9jdW1lbnRdXG4gKi9cbmV4cG9ydCB2YXIgZ2V0QWN0aXZlRWxlbWVudCA9IGZ1bmN0aW9uIChpbkRvY3VtZW50KSB7XG4gICAgaWYgKGluRG9jdW1lbnQgPT09IHZvaWQgMCkgeyBpbkRvY3VtZW50ID0gZG9jdW1lbnQ7IH1cbiAgICBpZiAoIWluRG9jdW1lbnQgfHwgIWluRG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGluRG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICByZXR1cm4gKGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdFxuICAgICAgICA/IGdldEFjdGl2ZUVsZW1lbnQoYWN0aXZlRWxlbWVudC5zaGFkb3dSb290KVxuICAgICAgICA6IGFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCAmJiBzYWZlUHJvYmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gYWN0aXZlRWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50OyB9KVxuICAgICAgICAgICAgPyBnZXRBY3RpdmVFbGVtZW50KGFjdGl2ZUVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudClcbiAgICAgICAgICAgIDogYWN0aXZlRWxlbWVudCk7XG59O1xuIiwgImltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi91dGlscy9ET011dGlscyc7XG5pbXBvcnQgeyBnZXRBbGxBZmZlY3RlZE5vZGVzIH0gZnJvbSAnLi91dGlscy9hbGwtYWZmZWN0ZWQnO1xuaW1wb3J0IHsgZ2V0Rmlyc3QsIHRvQXJyYXkgfSBmcm9tICcuL3V0aWxzL2FycmF5JztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xudmFyIGZvY3VzSW5GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZSwgYWN0aXZlRWxlbWVudCkgeyByZXR1cm4gZnJhbWUgPT09IGFjdGl2ZUVsZW1lbnQ7IH07XG52YXIgZm9jdXNJbnNpZGVJZnJhbWUgPSBmdW5jdGlvbiAodG9wTm9kZSwgYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybiBCb29sZWFuKHRvQXJyYXkodG9wTm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKSkuc29tZShmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZm9jdXNJbkZyYW1lKG5vZGUsIGFjdGl2ZUVsZW1lbnQpOyB9KSk7XG59O1xuLyoqXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSwgaWYgdGhlIGN1cnJlbnQgZm9jdXMgaXMgaW5zaWRlIGdpdmVuIG5vZGUgb3Igbm9kZXMuXG4gKiBTdXBwb3J0cyBub2RlcyBoaWRkZW4gaW5zaWRlIHNoYWRvd0RvbVxuICovXG5leHBvcnQgdmFyIGZvY3VzSW5zaWRlID0gZnVuY3Rpb24gKHRvcE5vZGUsIGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAvLyBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQgJiYgZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIGlmIChhY3RpdmVFbGVtZW50ID09PSB2b2lkIDApIHsgYWN0aXZlRWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoZ2V0Rmlyc3QodG9wTm9kZSkub3duZXJEb2N1bWVudCk7IH1cbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgKGFjdGl2ZUVsZW1lbnQuZGF0YXNldCAmJiBhY3RpdmVFbGVtZW50LmRhdGFzZXQuZm9jdXNHdWFyZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5zb21lKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHJldHVybiBjb250YWlucyhub2RlLCBhY3RpdmVFbGVtZW50KSB8fCBmb2N1c0luc2lkZUlmcmFtZShub2RlLCBhY3RpdmVFbGVtZW50KTtcbiAgICB9KTtcbn07XG4iLCAiaW1wb3J0IHsgRk9DVVNfQUxMT1cgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb250YWlucyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgZ2V0QWN0aXZlRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvZ2V0QWN0aXZlRWxlbWVudCc7XG4vKipcbiAqIGNoZWNrcyBpZiBmb2N1cyBpcyBoaWRkZW4gRlJPTSB0aGUgZm9jdXMtbG9ja1xuICogaWUgY29udGFpbmVkIGluc2lkZSBhIG5vZGUgZm9jdXMtbG9jayBzaGFsbCBpZ25vcmVcbiAqXG4gKiBUaGlzIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBjb3VwbGVkIHdpdGgge0BsaW5rIEZPQ1VTX0FMTE9XfSBjb25zdGFudFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBmb2N1cyBpcyBjdXJyZW50bHkgaXMgaW4gXCJhbGxvd1wiIGFyZWFcbiAqL1xuZXhwb3J0IHZhciBmb2N1c0lzSGlkZGVuID0gZnVuY3Rpb24gKGluRG9jdW1lbnQpIHtcbiAgICBpZiAoaW5Eb2N1bWVudCA9PT0gdm9pZCAwKSB7IGluRG9jdW1lbnQgPSBkb2N1bWVudDsgfVxuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChpbkRvY3VtZW50KTtcbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyB0aGlzIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBGT0NVU19BTExPVyB3aXRoaW4gc2hhZG93IGRvbVxuICAgIHJldHVybiB0b0FycmF5KGluRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfQUxMT1csIFwiXVwiKSkpLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGNvbnRhaW5zKG5vZGUsIGFjdGl2ZUVsZW1lbnQpOyB9KTtcbn07XG4iLCAiaW1wb3J0IHsgaXNSYWRpb0VsZW1lbnQgfSBmcm9tICcuL2lzJztcbnZhciBmaW5kU2VsZWN0ZWRSYWRpbyA9IGZ1bmN0aW9uIChub2RlLCBub2Rlcykge1xuICAgIHJldHVybiBub2Rlc1xuICAgICAgICAuZmlsdGVyKGlzUmFkaW9FbGVtZW50KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwubmFtZSA9PT0gbm9kZS5uYW1lOyB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuY2hlY2tlZDsgfSlbMF0gfHwgbm9kZTtcbn07XG5leHBvcnQgdmFyIGNvcnJlY3ROb2RlID0gZnVuY3Rpb24gKG5vZGUsIG5vZGVzKSB7XG4gICAgaWYgKGlzUmFkaW9FbGVtZW50KG5vZGUpICYmIG5vZGUubmFtZSkge1xuICAgICAgICByZXR1cm4gZmluZFNlbGVjdGVkUmFkaW8obm9kZSwgbm9kZXMpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn07XG4vKipcbiAqIGdpdmluZyBhIHNldCBvZiByYWRpbyBpbnB1dHMga2VlcHMgb25seSBzZWxlY3RlZCAodGFiYmFibGUpIG9uZXNcbiAqIEBwYXJhbSBub2Rlc1xuICovXG5leHBvcnQgdmFyIGNvcnJlY3ROb2RlcyA9IGZ1bmN0aW9uIChub2Rlcykge1xuICAgIC8vIElFMTEgaGFzIG5vIFNldChhcnJheSkgY29uc3RydWN0b3JcbiAgICB2YXIgcmVzdWx0U2V0ID0gbmV3IFNldCgpO1xuICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlc3VsdFNldC5hZGQoY29ycmVjdE5vZGUobm9kZSwgbm9kZXMpKTsgfSk7XG4gICAgLy8gdXNpbmcgZmlsdGVyIHRvIHN1cHBvcnQgSUUxMVxuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlc3VsdFNldC5oYXMobm9kZSk7IH0pO1xufTtcbiIsICJpbXBvcnQgeyBjb3JyZWN0Tm9kZSB9IGZyb20gJy4vY29ycmVjdEZvY3VzJztcbmV4cG9ydCB2YXIgcGlja0ZpcnN0Rm9jdXMgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICBpZiAobm9kZXNbMF0gJiYgbm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gY29ycmVjdE5vZGUobm9kZXNbMF0sIG5vZGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzWzBdO1xufTtcbmV4cG9ydCB2YXIgcGlja0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2Rlcywgbm9kZSkge1xuICAgIHJldHVybiBub2Rlcy5pbmRleE9mKGNvcnJlY3ROb2RlKG5vZGUsIG5vZGVzKSk7XG59O1xuIiwgImltcG9ydCB7IGNvcnJlY3ROb2RlcyB9IGZyb20gJy4vdXRpbHMvY29ycmVjdEZvY3VzJztcbmltcG9ydCB7IHBpY2tGb2N1c2FibGUgfSBmcm9tICcuL3V0aWxzL2ZpcnN0Rm9jdXMnO1xuaW1wb3J0IHsgaXNHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuZXhwb3J0IHZhciBORVdfRk9DVVMgPSAnTkVXX0ZPQ1VTJztcbi8qKlxuICogTWFpbiBzb2x2ZXIgZm9yIHRoZSBcImZpbmQgbmV4dCBmb2N1c1wiIHF1ZXN0aW9uXG4gKiBAcGFyYW0gaW5uZXJOb2RlcyAtIHVzZWQgdG8gY29udHJvbCBcInJldHVybiBmb2N1c1wiXG4gKiBAcGFyYW0gaW5uZXJUYWJiYWJsZXMgLSB1c2VkIHRvIGNvbnRyb2wgXCJhdXRvZm9jdXNcIlxuICogQHBhcmFtIG91dGVyTm9kZXNcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50XG4gKiBAcGFyYW0gbGFzdE5vZGVcbiAqIEByZXR1cm5zIHtudW1iZXJ8c3RyaW5nfHVuZGVmaW5lZHwqfVxuICovXG5leHBvcnQgdmFyIG5ld0ZvY3VzID0gZnVuY3Rpb24gKGlubmVyTm9kZXMsIGlubmVyVGFiYmFibGVzLCBvdXRlck5vZGVzLCBhY3RpdmVFbGVtZW50LCBsYXN0Tm9kZSkge1xuICAgIHZhciBjbnQgPSBpbm5lck5vZGVzLmxlbmd0aDtcbiAgICB2YXIgZmlyc3RGb2N1cyA9IGlubmVyTm9kZXNbMF07XG4gICAgdmFyIGxhc3RGb2N1cyA9IGlubmVyTm9kZXNbY250IC0gMV07XG4gICAgdmFyIGlzT25HdWFyZCA9IGlzR3VhcmQoYWN0aXZlRWxlbWVudCk7XG4gICAgLy8gZm9jdXMgaXMgaW5zaWRlXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQgJiYgaW5uZXJOb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gYWN0aXZlRWxlbWVudCAhPT0gdW5kZWZpbmVkID8gb3V0ZXJOb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpIDogLTE7XG4gICAgdmFyIGxhc3RJbmRleCA9IGxhc3ROb2RlID8gb3V0ZXJOb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IGFjdGl2ZUluZGV4O1xuICAgIHZhciBsYXN0Tm9kZUluc2lkZSA9IGxhc3ROb2RlID8gaW5uZXJOb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IC0xO1xuICAgIC8vIG5vIGFjdGl2ZSBmb2N1cyAob3IgZm9jdXMgaXMgb24gdGhlIGJvZHkpXG4gICAgaWYgKGFjdGl2ZUluZGV4ID09PSAtMSkge1xuICAgICAgICAvLyBrbm93biBmYWxsYmFja1xuICAgICAgICBpZiAobGFzdE5vZGVJbnNpZGUgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5FV19GT0NVUztcbiAgICB9XG4gICAgLy8gbmV3IGZvY3VzLCBub3RoaW5nIHRvIGNhbGN1bGF0ZVxuICAgIGlmIChsYXN0Tm9kZUluc2lkZSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIE5FV19GT0NVUztcbiAgICB9XG4gICAgdmFyIGluZGV4RGlmZiA9IGFjdGl2ZUluZGV4IC0gbGFzdEluZGV4O1xuICAgIHZhciBmaXJzdE5vZGVJbmRleCA9IG91dGVyTm9kZXMuaW5kZXhPZihmaXJzdEZvY3VzKTtcbiAgICB2YXIgbGFzdE5vZGVJbmRleCA9IG91dGVyTm9kZXMuaW5kZXhPZihsYXN0Rm9jdXMpO1xuICAgIHZhciBjb3JyZWN0ZWROb2RlcyA9IGNvcnJlY3ROb2RlcyhvdXRlck5vZGVzKTtcbiAgICB2YXIgY29ycmVjdGVkSW5kZXggPSBhY3RpdmVFbGVtZW50ICE9PSB1bmRlZmluZWQgPyBjb3JyZWN0ZWROb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpIDogLTE7XG4gICAgdmFyIGNvcnJlY3RlZEluZGV4RGlmZiA9IGNvcnJlY3RlZEluZGV4IC0gKGxhc3ROb2RlID8gY29ycmVjdGVkTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiBhY3RpdmVJbmRleCk7XG4gICAgLy8gb2xkIGZvY3VzXG4gICAgaWYgKCFpbmRleERpZmYgJiYgbGFzdE5vZGVJbnNpZGUgPj0gMCkge1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIC8vIG5vIHRhYmJhYmxlIGVsZW1lbnRzLCBhdXRvZm9jdXMgaXMgbm90IHBvc3NpYmxlXG4gICAgaWYgKGlubmVyVGFiYmFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBhbiBlZGdlIGNhc2Ugd2l0aCBubyB0YWJiYWJsZSBlbGVtZW50c1xuICAgICAgICAvLyByZXR1cm4gdGhlIGxhc3QgZm9jdXNhYmxlIG9uZVxuICAgICAgICAvLyB3aXRoIHNvbWUgcHJvYmFiaWxpdHkgdGhpcyB3aWxsIHByZXZlbnQgZm9jdXMgZnJvbSBjeWNsaW5nIGFjcm9zcyB0aGUgbG9jaywgYnV0IHRoZXJlIGlzIG5vIHRhYmJhbGUgZWxlbWVudHMgdG8gY3ljbGUgdG9cbiAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgIH1cbiAgICB2YXIgcmV0dXJuRmlyc3ROb2RlID0gcGlja0ZvY3VzYWJsZShpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlc1swXSk7XG4gICAgdmFyIHJldHVybkxhc3ROb2RlID0gcGlja0ZvY3VzYWJsZShpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlc1tpbm5lclRhYmJhYmxlcy5sZW5ndGggLSAxXSk7XG4gICAgLy8gZmlyc3QgZWxlbWVudFxuICAgIGlmIChhY3RpdmVJbmRleCA8PSBmaXJzdE5vZGVJbmRleCAmJiBpc09uR3VhcmQgJiYgTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkxhc3ROb2RlO1xuICAgIH1cbiAgICAvLyBsYXN0IGVsZW1lbnRcbiAgICBpZiAoYWN0aXZlSW5kZXggPj0gbGFzdE5vZGVJbmRleCAmJiBpc09uR3VhcmQgJiYgTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkZpcnN0Tm9kZTtcbiAgICB9XG4gICAgLy8ganVtcCBvdXQsIGJ1dCBub3Qgb24gdGhlIGd1YXJkXG4gICAgaWYgKGluZGV4RGlmZiAmJiBNYXRoLmFicyhjb3JyZWN0ZWRJbmRleERpZmYpID4gMSkge1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIC8vIGZvY3VzIGFib3ZlIGxvY2tcbiAgICBpZiAoYWN0aXZlSW5kZXggPD0gZmlyc3ROb2RlSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkxhc3ROb2RlO1xuICAgIH1cbiAgICAvLyBmb2N1cyBiZWxvdyBsb2NrXG4gICAgaWYgKGFjdGl2ZUluZGV4ID4gbGFzdE5vZGVJbmRleCkge1xuICAgICAgICByZXR1cm4gcmV0dXJuRmlyc3ROb2RlO1xuICAgIH1cbiAgICAvLyBpbmRleCBpcyBpbnNpZGUgdGFiIG9yZGVyLCBidXQgb3V0c2lkZSBMb2NrXG4gICAgaWYgKGluZGV4RGlmZikge1xuICAgICAgICBpZiAoTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0Tm9kZUluc2lkZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGNudCArIGxhc3ROb2RlSW5zaWRlICsgaW5kZXhEaWZmKSAlIGNudDtcbiAgICB9XG4gICAgLy8gZG8gbm90aGluZ1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgImltcG9ydCB7IGZpbHRlckF1dG9Gb2N1c2FibGUgfSBmcm9tICcuL0RPTXV0aWxzJztcbmltcG9ydCB7IHBpY2tGaXJzdEZvY3VzIH0gZnJvbSAnLi9maXJzdEZvY3VzJztcbmltcG9ydCB7IGdldERhdGFzZXQgfSBmcm9tICcuL2lzJztcbnZhciBmaW5kQXV0b0ZvY3VzZWQgPSBmdW5jdGlvbiAoYXV0b0ZvY3VzYWJsZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgYXV0b2ZvY3VzID0gKF9hID0gZ2V0RGF0YXNldChub2RlKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmF1dG9mb2N1cztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBub2RlLmF1dG9mb2N1cyB8fFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIChhdXRvZm9jdXMgIT09IHVuZGVmaW5lZCAmJiBhdXRvZm9jdXMgIT09ICdmYWxzZScpIHx8XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgYXV0b0ZvY3VzYWJsZXMuaW5kZXhPZihub2RlKSA+PSAwKTtcbiAgICB9O1xufTtcbmV4cG9ydCB2YXIgcGlja0F1dG9mb2N1cyA9IGZ1bmN0aW9uIChub2Rlc0luZGV4ZXMsIG9yZGVyZWROb2RlcywgZ3JvdXBzKSB7XG4gICAgdmFyIG5vZGVzID0gbm9kZXNJbmRleGVzLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgYXV0b0ZvY3VzYWJsZSA9IGZpbHRlckF1dG9Gb2N1c2FibGUobm9kZXMuZmlsdGVyKGZpbmRBdXRvRm9jdXNlZChncm91cHMpKSk7XG4gICAgaWYgKGF1dG9Gb2N1c2FibGUgJiYgYXV0b0ZvY3VzYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHBpY2tGaXJzdEZvY3VzKGF1dG9Gb2N1c2FibGUpO1xuICAgIH1cbiAgICByZXR1cm4gcGlja0ZpcnN0Rm9jdXMoZmlsdGVyQXV0b0ZvY3VzYWJsZShvcmRlcmVkTm9kZXMpKTtcbn07XG4iLCAiaW1wb3J0IHsgcGFyZW50QXV0b2ZvY3VzYWJsZXMgfSBmcm9tICcuL0RPTXV0aWxzJztcbmltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi9ET011dGlscyc7XG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG52YXIgZ2V0UGFyZW50cyA9IGZ1bmN0aW9uIChub2RlLCBwYXJlbnRzKSB7XG4gICAgaWYgKHBhcmVudHMgPT09IHZvaWQgMCkgeyBwYXJlbnRzID0gW107IH1cbiAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBnZXRQYXJlbnRzKG5vZGUucGFyZW50Tm9kZS5ob3N0IHx8IG5vZGUucGFyZW50Tm9kZSwgcGFyZW50cyk7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRzO1xufTtcbi8qKlxuICogZmluZHMgYSBwYXJlbnQgZm9yIGJvdGggbm9kZUEgYW5kIG5vZGVCXG4gKiBAcGFyYW0gbm9kZUFcbiAqIEBwYXJhbSBub2RlQlxuICogQHJldHVybnMge2Jvb2xlYW58Kn1cbiAqL1xuZXhwb3J0IHZhciBnZXRDb21tb25QYXJlbnQgPSBmdW5jdGlvbiAobm9kZUEsIG5vZGVCKSB7XG4gICAgdmFyIHBhcmVudHNBID0gZ2V0UGFyZW50cyhub2RlQSk7XG4gICAgdmFyIHBhcmVudHNCID0gZ2V0UGFyZW50cyhub2RlQik7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudHNBLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBjdXJyZW50UGFyZW50ID0gcGFyZW50c0FbaV07XG4gICAgICAgIGlmIChwYXJlbnRzQi5pbmRleE9mKGN1cnJlbnRQYXJlbnQpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnQgdmFyIGdldFRvcENvbW1vblBhcmVudCA9IGZ1bmN0aW9uIChiYXNlQWN0aXZlRWxlbWVudCwgbGVmdEVudHJ5LCByaWdodEVudHJpZXMpIHtcbiAgICB2YXIgYWN0aXZlRWxlbWVudHMgPSBhc0FycmF5KGJhc2VBY3RpdmVFbGVtZW50KTtcbiAgICB2YXIgbGVmdEVudHJpZXMgPSBhc0FycmF5KGxlZnRFbnRyeSk7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBhY3RpdmVFbGVtZW50c1swXTtcbiAgICB2YXIgdG9wQ29tbW9uID0gZmFsc2U7XG4gICAgbGVmdEVudHJpZXMuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIHRvcENvbW1vbiA9IGdldENvbW1vblBhcmVudCh0b3BDb21tb24gfHwgZW50cnksIGVudHJ5KSB8fCB0b3BDb21tb247XG4gICAgICAgIHJpZ2h0RW50cmllcy5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoc3ViRW50cnkpIHtcbiAgICAgICAgICAgIHZhciBjb21tb24gPSBnZXRDb21tb25QYXJlbnQoYWN0aXZlRWxlbWVudCwgc3ViRW50cnkpO1xuICAgICAgICAgICAgaWYgKGNvbW1vbikge1xuICAgICAgICAgICAgICAgIGlmICghdG9wQ29tbW9uIHx8IGNvbnRhaW5zKGNvbW1vbiwgdG9wQ29tbW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0b3BDb21tb24gPSBjb21tb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b3BDb21tb24gPSBnZXRDb21tb25QYXJlbnQoY29tbW9uLCB0b3BDb21tb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gVE9ETzogYWRkIGFzc2VydCBoZXJlP1xuICAgIHJldHVybiB0b3BDb21tb247XG59O1xuLyoqXG4gKiByZXR1cm4gbGlzdCBvZiBub2RlcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gYmUgYXV0b2ZvY3VzZWQgaW5zaWRlIGEgZ2l2ZW4gdG9wIG5vZGVzXG4gKiBAcGFyYW0gZW50cmllc1xuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZVxuICovXG5leHBvcnQgdmFyIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiBlbnRyaWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBub2RlKSB7IHJldHVybiBhY2MuY29uY2F0KHBhcmVudEF1dG9mb2N1c2FibGVzKG5vZGUsIHZpc2liaWxpdHlDYWNoZSkpOyB9LCBbXSk7XG59O1xuIiwgImltcG9ydCB7IE5FV19GT0NVUywgbmV3Rm9jdXMgfSBmcm9tICcuL3NvbHZlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGFzQXJyYXksIGdldEZpcnN0IH0gZnJvbSAnLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBwaWNrQXV0b2ZvY3VzIH0gZnJvbSAnLi91dGlscy9hdXRvLWZvY3VzJztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xuaW1wb3J0IHsgaXNEZWZpbmVkLCBpc05vdEFHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgYWxsUGFyZW50QXV0b2ZvY3VzYWJsZXMsIGdldFRvcENvbW1vblBhcmVudCB9IGZyb20gJy4vdXRpbHMvcGFyZW50aW5nJztcbnZhciByZW9yZGVyTm9kZXMgPSBmdW5jdGlvbiAoc3JjTm9kZXMsIGRzdE5vZGVzKSB7XG4gICAgdmFyIHJlbWFwID0gbmV3IE1hcCgpO1xuICAgIC8vIG5vIFNldChkc3ROb2RlcykgZm9yIElFMTEgOihcbiAgICBkc3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRpdHkpIHsgcmV0dXJuIHJlbWFwLnNldChlbnRpdHkubm9kZSwgZW50aXR5KTsgfSk7XG4gICAgLy8gcmVtYXAgdG8gZHN0Tm9kZXNcbiAgICByZXR1cm4gc3JjTm9kZXMubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiByZW1hcC5nZXQobm9kZSk7IH0pLmZpbHRlcihpc0RlZmluZWQpO1xufTtcbi8qKlxuICogY29udGFpbnMgdGhlIG1haW4gbG9naWMgb2YgdGhlIGBmb2N1cy1sb2NrYCBwYWNrYWdlLlxuICpcbiAqICEgeW91IHByb2JhYmx5IGRvbnQgbmVlZCB0aGlzIGZ1bmN0aW9uICFcbiAqXG4gKiBnaXZlbiB0b3Agbm9kZShzKSBhbmQgdGhlIGxhc3QgYWN0aXZlIGVsZW1lbnQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBiZSBmb2N1c2VkIG5leHRcbiAqIEByZXR1cm5zIGVsZW1lbnQgd2hpY2ggc2hvdWxkIGJlIGZvY3VzZWQgdG8gbW92ZSBmb2N1cyBpbnNpZGVcbiAqIEBwYXJhbSB0b3BOb2RlXG4gKiBAcGFyYW0gbGFzdE5vZGVcbiAqL1xuZXhwb3J0IHZhciBmb2N1c1NvbHZlciA9IGZ1bmN0aW9uICh0b3BOb2RlLCBsYXN0Tm9kZSkge1xuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChhc0FycmF5KHRvcE5vZGUpLmxlbmd0aCA+IDAgPyBkb2N1bWVudCA6IGdldEZpcnN0KHRvcE5vZGUpLm93bmVyRG9jdW1lbnQpO1xuICAgIHZhciBlbnRyaWVzID0gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5maWx0ZXIoaXNOb3RBR3VhcmQpO1xuICAgIHZhciBjb21tb25QYXJlbnQgPSBnZXRUb3BDb21tb25QYXJlbnQoYWN0aXZlRWxlbWVudCB8fCB0b3BOb2RlLCB0b3BOb2RlLCBlbnRyaWVzKTtcbiAgICB2YXIgdmlzaWJpbGl0eUNhY2hlID0gbmV3IE1hcCgpO1xuICAgIHZhciBhbnlGb2N1c2FibGUgPSBnZXRGb2N1c2FibGVOb2RlcyhlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpO1xuICAgIHZhciBpbm5lckVsZW1lbnRzID0gYW55Rm9jdXNhYmxlLmZpbHRlcihmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gaXNOb3RBR3VhcmQobm9kZSk7XG4gICAgfSk7XG4gICAgaWYgKCFpbm5lckVsZW1lbnRzWzBdKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBvdXRlck5vZGVzID0gZ2V0Rm9jdXNhYmxlTm9kZXMoW2NvbW1vblBhcmVudF0sIHZpc2liaWxpdHlDYWNoZSkubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBvcmRlcmVkSW5uZXJFbGVtZW50cyA9IHJlb3JkZXJOb2RlcyhvdXRlck5vZGVzLCBpbm5lckVsZW1lbnRzKTtcbiAgICAvLyBjb2xsZWN0IGlubmVyIGZvY3VzYWJsZSBhbmQgc2VwYXJhdGVseSB0YWJiYWJsZXNcbiAgICB2YXIgaW5uZXJGb2N1c2FibGVzID0gb3JkZXJlZElubmVyRWxlbWVudHMubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBpbm5lclRhYmJhYmxlID0gb3JkZXJlZElubmVyRWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSBfYS50YWJJbmRleDtcbiAgICAgICAgcmV0dXJuIHRhYkluZGV4ID49IDA7XG4gICAgfSkubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBuZXdJZCA9IG5ld0ZvY3VzKGlubmVyRm9jdXNhYmxlcywgaW5uZXJUYWJiYWJsZSwgb3V0ZXJOb2RlcywgYWN0aXZlRWxlbWVudCwgbGFzdE5vZGUpO1xuICAgIGlmIChuZXdJZCA9PT0gTkVXX0ZPQ1VTKSB7XG4gICAgICAgIHZhciBmb2N1c05vZGUgPSBcbiAgICAgICAgLy8gZmlyc3QgdHJ5IG9ubHkgdGFiYmFibGUsIGFuZCB0aGUgZmFsbGJhY2sgdG8gYWxsIGZvY3VzYWJsZSwgYXMgbG9uZyBhcyBhdCBsZWFzdCBvbmUgZWxlbWVudCBzaG91bGQgYmUgcGlja2VkIGZvciBmb2N1c1xuICAgICAgICBwaWNrQXV0b2ZvY3VzKGFueUZvY3VzYWJsZSwgaW5uZXJUYWJiYWJsZSwgYWxsUGFyZW50QXV0b2ZvY3VzYWJsZXMoZW50cmllcywgdmlzaWJpbGl0eUNhY2hlKSkgfHxcbiAgICAgICAgICAgIHBpY2tBdXRvZm9jdXMoYW55Rm9jdXNhYmxlLCBpbm5lckZvY3VzYWJsZXMsIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkpO1xuICAgICAgICBpZiAoZm9jdXNOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBmb2N1c05vZGUgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZm9jdXMtbG9jazogY2Fubm90IGZpbmQgYW55IG5vZGUgdG8gbW92ZSBmb2N1cyBpbnRvJyk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChuZXdJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuZXdJZDtcbiAgICB9XG4gICAgcmV0dXJuIG9yZGVyZWRJbm5lckVsZW1lbnRzW25ld0lkXTtcbn07XG4iLCAiaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGlzR3VhcmQsIGlzTm90QUd1YXJkIH0gZnJvbSAnLi91dGlscy9pcyc7XG5pbXBvcnQgeyBnZXRUb3BDb21tb25QYXJlbnQgfSBmcm9tICcuL3V0aWxzL3BhcmVudGluZyc7XG5pbXBvcnQgeyBvcmRlckJ5VGFiSW5kZXggfSBmcm9tICcuL3V0aWxzL3RhYk9yZGVyJztcbmltcG9ydCB7IGdldEZvY3VzYWJsZXMgfSBmcm9tICcuL3V0aWxzL3RhYlV0aWxzJztcbi8qKlxuICogdHJhdmVyc2VzIGFsbCByZWxhdGVkIG5vZGVzIChpbmNsdWRpbmcgZ3JvdXBzKSByZXR1cm5pbmcgYSBsaXN0IG9mIGFsbCBub2RlcyhvdXRlciBhbmQgaW50ZXJuYWwpIHdpdGggbWV0YSBpbmZvcm1hdGlvblxuICogVGhpcyBpcyBsb3ctbGV2ZWwgQVBJIVxuICogQHJldHVybnMgbGlzdCBvZiBmb2N1c2FibGUgZWxlbWVudHMgaW5zaWRlIGEgZ2l2ZW4gdG9wKCEpIG5vZGUuXG4gKiBAc2VlIHtAbGluayBnZXRGb2N1c2FibGVOb2Rlc30gcHJvdmlkaW5nIGEgc2ltcGxlciBBUElcbiAqL1xuZXhwb3J0IHZhciBleHBhbmRGb2N1c2FibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRBbGxBZmZlY3RlZE5vZGVzKHRvcE5vZGUpLmZpbHRlcihpc05vdEFHdWFyZCk7XG4gICAgdmFyIGNvbW1vblBhcmVudCA9IGdldFRvcENvbW1vblBhcmVudCh0b3BOb2RlLCB0b3BOb2RlLCBlbnRyaWVzKTtcbiAgICB2YXIgb3V0ZXJOb2RlcyA9IG9yZGVyQnlUYWJJbmRleChnZXRGb2N1c2FibGVzKFtjb21tb25QYXJlbnRdLCB0cnVlKSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgdmFyIGlubmVyRWxlbWVudHMgPSBnZXRGb2N1c2FibGVzKGVudHJpZXMsIGZhbHNlKTtcbiAgICByZXR1cm4gb3V0ZXJOb2Rlcy5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZSwgaW5kZXggPSBfYS5pbmRleDtcbiAgICAgICAgcmV0dXJuICh7XG4gICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgbG9ja0l0ZW06IGlubmVyRWxlbWVudHMuaW5kZXhPZihub2RlKSA+PSAwLFxuICAgICAgICAgICAgZ3VhcmQ6IGlzR3VhcmQobm9kZSksXG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbiIsICJleHBvcnQgdmFyIGZvY3VzT24gPSBmdW5jdGlvbiAodGFyZ2V0LCBmb2N1c09wdGlvbnMpIHtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAvLyBub3QgY2xlYXIgaG93LCBidXQgaXMgcG9zc2libGUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS9mb2N1cy1sb2NrL2lzc3Vlcy81M1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgnZm9jdXMnIGluIHRhcmdldCkge1xuICAgICAgICB0YXJnZXQuZm9jdXMoZm9jdXNPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCdjb250ZW50V2luZG93JyBpbiB0YXJnZXQgJiYgdGFyZ2V0LmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgdGFyZ2V0LmNvbnRlbnRXaW5kb3cuZm9jdXMoKTtcbiAgICB9XG59O1xuIiwgImltcG9ydCB7IGZvY3VzT24gfSBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IGZvY3VzU29sdmVyIH0gZnJvbSAnLi9mb2N1c1NvbHZlcic7XG52YXIgZ3VhcmRDb3VudCA9IDA7XG52YXIgbG9ja0Rpc2FibGVkID0gZmFsc2U7XG4vKipcbiAqIFRoZSBtYWluIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGZvY3VzLWxvY2sgcGFja2FnZVxuICpcbiAqIENvbnRhaW5zIGZvY3VzIGF0IGEgZ2l2ZW4gbm9kZS5cbiAqIFRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aWxsIGhlbHAgdG8gZGV0ZXJtaW5lIHdoaWNoIGVsZW1lbnQoZmlyc3Qgb3IgbGFzdCkgc2hvdWxkIGJlIGZvY3VzZWQuXG4gKiBUaGUgZm91bmQgZWxlbWVudCB3aWxsIGJlIGZvY3VzZWQuXG4gKlxuICogVGhpcyBpcyBvbmUgdGltZSBhY3Rpb24gKG1vdmUpLCBub3QgYSBwZXJzaXN0ZW50IGZvY3VzLWxvY2tcbiAqXG4gKiBIVE1MIG1hcmtlcnMgKHNlZSB7QGxpbmsgaW1wb3J0KCcuL2NvbnN0YW50cycpLkZPQ1VTX0FVVE99IGNvbnN0YW50cykgY2FuIGNvbnRyb2wgYXV0b2ZvY3VzXG4gKiBAc2VlIHtAbGluayBmb2N1c1NvbHZlcn0gZm9yIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBhdXRvZm9jdXNcbiAqL1xuZXhwb3J0IHZhciBtb3ZlRm9jdXNJbnNpZGUgPSBmdW5jdGlvbiAodG9wTm9kZSwgbGFzdE5vZGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBmb2N1c2FibGUgPSBmb2N1c1NvbHZlcih0b3BOb2RlLCBsYXN0Tm9kZSk7XG4gICAgLy8gZ2xvYmFsIGxvY2FsIHNpZGUgZWZmZWN0IHRvIGNvdW50YWluIHJlY3Vyc2l2ZSBsb2NrIGFjdGl2YXRpb24gYW5kIHJlc29sdmUgZm9jdXMtZmlnaHRpbmdcbiAgICBpZiAobG9ja0Rpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZvY3VzYWJsZSkge1xuICAgICAgICAvKiogK0ZPQ1VTLUZJR0hUSU5HIHByZXZlbnRpb24gKiovXG4gICAgICAgIGlmIChndWFyZENvdW50ID4gMikge1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSByZWN1cnNpdmUgZW50ZXJlZCBiYWNrIHRoZSBsb2NrIGFjdGl2YXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZvY3VzTG9jazogZm9jdXMtZmlnaHRpbmcgZGV0ZWN0ZWQuIE9ubHkgb25lIGZvY3VzIG1hbmFnZW1lbnQgc3lzdGVtIGNvdWxkIGJlIGFjdGl2ZS4gJyArXG4gICAgICAgICAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L2ZvY3VzLWxvY2svI2ZvY3VzLWZpZ2h0aW5nJyk7XG4gICAgICAgICAgICBsb2NrRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbG9ja0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBndWFyZENvdW50Kys7XG4gICAgICAgIGZvY3VzT24oZm9jdXNhYmxlLm5vZGUsIG9wdGlvbnMuZm9jdXNPcHRpb25zKTtcbiAgICAgICAgZ3VhcmRDb3VudC0tO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHsgZ2V0VGFiYmFibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuZnVuY3Rpb24gd2Vha1JlZih2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICM2OCBTYWZhcmkgMTQuMSBkb250IGhhdmUgaXQgeWV0XG4gICAgLy8gRklYTUU6IHJlbW92ZSBpbiAyMDI1XG4gICAgaWYgKHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWUgfHwgbnVsbDsgfTtcbiAgICB9XG4gICAgdmFyIHcgPSB2YWx1ZSA/IG5ldyBXZWFrUmVmKHZhbHVlKSA6IG51bGw7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuICh3ID09PSBudWxsIHx8IHcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHcuZGVyZWYoKSkgfHwgbnVsbDsgfTtcbn1cbmV4cG9ydCB2YXIgcmVjb3JkRWxlbWVudExvY2F0aW9uID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgd2hpbGUgKGN1cnJlbnRFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgY3VycmVudDogd2Vha1JlZihjdXJyZW50RWxlbWVudCksXG4gICAgICAgICAgICBwYXJlbnQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudCksXG4gICAgICAgICAgICBsZWZ0OiB3ZWFrUmVmKGN1cnJlbnRFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpLFxuICAgICAgICAgICAgcmlnaHQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudDogd2Vha1JlZihlbGVtZW50KSxcbiAgICAgICAgc3RhY2s6IHN0YWNrLFxuICAgICAgICBvd25lckRvY3VtZW50OiBlbGVtZW50Lm93bmVyRG9jdW1lbnQsXG4gICAgfTtcbn07XG52YXIgcmVzdG9yZUZvY3VzVG8gPSBmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIHN0YWNrID0gbG9jYXRpb24uc3RhY2ssIG93bmVyRG9jdW1lbnQgPSBsb2NhdGlvbi5vd25lckRvY3VtZW50O1xuICAgIHZhciB2aXNpYmlsaXR5Q2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgZm9yICh2YXIgX2kgPSAwLCBzdGFja18xID0gc3RhY2s7IF9pIDwgc3RhY2tfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIGxpbmUgPSBzdGFja18xW19pXTtcbiAgICAgICAgdmFyIHBhcmVudF8xID0gKF9hID0gbGluZS5wYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGxpbmUpO1xuICAgICAgICAvLyBpcyBpdCBzdGlsbCBoZXJlP1xuICAgICAgICBpZiAocGFyZW50XzEgJiYgb3duZXJEb2N1bWVudC5jb250YWlucyhwYXJlbnRfMSkpIHtcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gKF9iID0gbGluZS5sZWZ0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChsaW5lKTtcbiAgICAgICAgICAgIHZhciBzYXZlZEN1cnJlbnQgPSBsaW5lLmN1cnJlbnQoKTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gcGFyZW50XzEuY29udGFpbnMoc2F2ZWRDdXJyZW50KSA/IHNhdmVkQ3VycmVudCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHZhciByaWdodCA9IChfYyA9IGxpbmUucmlnaHQpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYWxsKGxpbmUpO1xuICAgICAgICAgICAgdmFyIGZvY3VzYWJsZXMgPSBnZXRUYWJiYWJsZU5vZGVzKFtwYXJlbnRfMV0sIHZpc2liaWxpdHlDYWNoZSk7XG4gICAgICAgICAgICB2YXIgYWltID0gXG4gICAgICAgICAgICAvLyB0aGF0IGlzIGVsZW1lbnQgaXRzZWxmXG4gICAgICAgICAgICAoX2UgPSAoX2QgPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQgIT09IHZvaWQgMCA/IGN1cnJlbnQgOiBcbiAgICAgICAgICAgIC8vIG9yIHNvbWV0aGluZyBpbiBpdCdzIHBsYWNlXG4gICAgICAgICAgICBsZWZ0ID09PSBudWxsIHx8IGxlZnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxlZnQubmV4dEVsZW1lbnRTaWJsaW5nKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBcbiAgICAgICAgICAgIC8vIG9yIHNvbWVib2R5IHRvIHRoZSByaWdodCwgc3RpbGwgY2xvc2UgZW5vdWdoXG4gICAgICAgICAgICByaWdodCkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogXG4gICAgICAgICAgICAvLyBvciBzb21lYm9keSB0byB0aGUgbGVmdCwgc29tZXRoaW5nP1xuICAgICAgICAgICAgbGVmdDtcbiAgICAgICAgICAgIHdoaWxlIChhaW0pIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZiA9IDAsIGZvY3VzYWJsZXNfMSA9IGZvY3VzYWJsZXM7IF9mIDwgZm9jdXNhYmxlc18xLmxlbmd0aDsgX2YrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9jdXNhYmxlID0gZm9jdXNhYmxlc18xW19mXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFpbSA9PT0gbnVsbCB8fCBhaW0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFpbS5jb250YWlucyhmb2N1c2FibGUubm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGUubm9kZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhaW0gPSBhaW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvY3VzYWJsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgcGFyZW50IGNvbnRhaW5zIGEgZm9jdXNhYmxlIC0gbW92ZSB0aGVyZVxuICAgICAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGVzWzBdLm5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbm90aGluZyBtYXRjaGVkXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4vKipcbiAqIENhcHR1cmVzIHRoZSBjdXJyZW50IGZvY3VzZWQgZWxlbWVudCB0byByZXN0b3JlIGZvY3VzIGFzIGNsb3NlIGFzIHBvc3NpYmxlIGluIHRoZSBmdXR1cmVcbiAqIEhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSB0aGUgZm9jdXNlZCBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIG5vIGxvbmdlciBmb2N1c2FibGVcbiAqIG1vdmluZyBmb2N1cyB0byB0aGUgY2xvc2VzdCBmb2N1c2FibGUgZWxlbWVudFxuICogQHBhcmFtIHRhcmdldEVsZW1lbnQgLSBlbGVtZW50IHdoZXJlIGZvY3VzIHNob3VsZCBiZSByZXN0b3JlZFxuICogQHJldHVybnMgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBuZXcgZWxlbWVudCB0byBmb2N1c1xuICovXG5leHBvcnQgdmFyIGNhcHR1cmVGb2N1c1Jlc3RvcmUgPSBmdW5jdGlvbiAodGFyZ2V0RWxlbWVudCkge1xuICAgIHZhciBsb2NhdGlvbiA9IHJlY29yZEVsZW1lbnRMb2NhdGlvbih0YXJnZXRFbGVtZW50KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVzdG9yZUZvY3VzVG8obG9jYXRpb24pO1xuICAgIH07XG59O1xuIiwgImltcG9ydCB7IGZvY3VzT24gfSBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IGdldFRhYmJhYmxlTm9kZXMsIGNvbnRhaW5zLCBnZXRGb2N1c2FibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuLyoqXG4gKiBmb3IgYSBnaXZlbiBgZWxlbWVudGAgaW4gYSBnaXZlbiBgc2NvcGVgIHJldHVybnMgZm9jdXNhYmxlIHNpYmxpbmdzXG4gKiBAcGFyYW0gZWxlbWVudCAtIGJhc2UgZWxlbWVudFxuICogQHBhcmFtIHNjb3BlIC0gY29tbW9uIHBhcmVudC4gQ2FuIGJlIGRvY3VtZW50LCBidXQgYmV0dGVyIHRvIG5hcnJvdyBpdCBkb3duIGZvciBwZXJmb3JtYW5jZSByZWFzb25zXG4gKiBAcmV0dXJucyB7cHJldixuZXh0fSAtIHJlZmVyZW5jZXMgdG8gYSBmb2N1c2FibGUgZWxlbWVudCBiZWZvcmUgYW5kIGFmdGVyXG4gKiBAcmV0dXJucyB1bmRlZmluZWQgLSBpZiBvcGVyYXRpb24gaXMgbm90IGFwcGxpY2FibGVcbiAqL1xuZXhwb3J0IHZhciBnZXRSZWxhdGl2ZUZvY3VzYWJsZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBzY29wZSwgdXNlVGFiYmFibGVzKSB7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFzY29wZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdubyBlbGVtZW50IG9yIHNjb3BlIGdpdmVuJyk7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgdmFyIHNoYXJkcyA9IGFzQXJyYXkoc2NvcGUpO1xuICAgIGlmIChzaGFyZHMuZXZlcnkoZnVuY3Rpb24gKHNoYXJkKSB7IHJldHVybiAhY29udGFpbnMoc2hhcmQsIGVsZW1lbnQpOyB9KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmUgZWxlbWVudCBpcyBub3QgY29udGFpbmVkIGluIHRoZSBzY29wZScpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHZhciBmb2N1c2FibGVzID0gdXNlVGFiYmFibGVzXG4gICAgICAgID8gZ2V0VGFiYmFibGVOb2RlcyhzaGFyZHMsIG5ldyBNYXAoKSlcbiAgICAgICAgOiBnZXRGb2N1c2FibGVOb2RlcyhzaGFyZHMsIG5ldyBNYXAoKSk7XG4gICAgdmFyIGN1cnJlbnQgPSBmb2N1c2FibGVzLmZpbmRJbmRleChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZSA9PT0gZWxlbWVudDtcbiAgICB9KTtcbiAgICBpZiAoY3VycmVudCA9PT0gLTEpIHtcbiAgICAgICAgLy8gYW4gZWRnZSBjYXNlLCB3aGVuIGFuY2hvciBlbGVtZW50IGlzIG5vdCBmb3VuZFxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwcmV2OiBmb2N1c2FibGVzW2N1cnJlbnQgLSAxXSxcbiAgICAgICAgbmV4dDogZm9jdXNhYmxlc1tjdXJyZW50ICsgMV0sXG4gICAgICAgIGZpcnN0OiBmb2N1c2FibGVzWzBdLFxuICAgICAgICBsYXN0OiBmb2N1c2FibGVzW2ZvY3VzYWJsZXMubGVuZ3RoIC0gMV0sXG4gICAgfTtcbn07XG52YXIgZ2V0Qm91bmRhcnkgPSBmdW5jdGlvbiAoc2hhcmRzLCB1c2VUYWJiYWJsZXMpIHtcbiAgICB2YXIgc2V0ID0gdXNlVGFiYmFibGVzXG4gICAgICAgID8gZ2V0VGFiYmFibGVOb2Rlcyhhc0FycmF5KHNoYXJkcyksIG5ldyBNYXAoKSlcbiAgICAgICAgOiBnZXRGb2N1c2FibGVOb2Rlcyhhc0FycmF5KHNoYXJkcyksIG5ldyBNYXAoKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmlyc3Q6IHNldFswXSxcbiAgICAgICAgbGFzdDogc2V0W3NldC5sZW5ndGggLSAxXSxcbiAgICB9O1xufTtcbnZhciBkZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBzY29wZTogZG9jdW1lbnQuYm9keSxcbiAgICAgICAgY3ljbGU6IHRydWUsXG4gICAgICAgIG9ubHlUYWJiYWJsZTogdHJ1ZSxcbiAgICB9LCBvcHRpb25zKTtcbn07XG52YXIgbW92ZUZvY3VzID0gZnVuY3Rpb24gKGZyb21FbGVtZW50LCBvcHRpb25zLCBjYikge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIG5ld09wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB2YXIgc29sdXRpb24gPSBnZXRSZWxhdGl2ZUZvY3VzYWJsZShmcm9tRWxlbWVudCwgbmV3T3B0aW9ucy5zY29wZSwgbmV3T3B0aW9ucy5vbmx5VGFiYmFibGUpO1xuICAgIGlmICghc29sdXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGFyZ2V0ID0gY2Ioc29sdXRpb24sIG5ld09wdGlvbnMuY3ljbGUpO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgZm9jdXNPbih0YXJnZXQubm9kZSwgbmV3T3B0aW9ucy5mb2N1c09wdGlvbnMpO1xuICAgIH1cbn07XG4vKipcbiAqIGZvY3VzZXMgbmV4dCBlbGVtZW50IGluIHRoZSB0YWItb3JkZXJcbiAqIEBwYXJhbSBmcm9tRWxlbWVudCAtIGNvbW1vbiBwYXJlbnQgdG8gc2NvcGUgYWN0aXZlIGVsZW1lbnQgc2VhcmNoIG9yIHRhYiBjeWNsZSBvcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBbb3B0aW9uc10gLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNOZXh0RWxlbWVudCA9IGZ1bmN0aW9uIChmcm9tRWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgbW92ZUZvY3VzKGZyb21FbGVtZW50LCBvcHRpb25zLCBmdW5jdGlvbiAoX2EsIGN5Y2xlKSB7XG4gICAgICAgIHZhciBuZXh0ID0gX2EubmV4dCwgZmlyc3QgPSBfYS5maXJzdDtcbiAgICAgICAgcmV0dXJuIG5leHQgfHwgKGN5Y2xlICYmIGZpcnN0KTtcbiAgICB9KTtcbn07XG4vKipcbiAqIGZvY3VzZXMgcHJldiBlbGVtZW50IGluIHRoZSB0YWIgb3JkZXJcbiAqIEBwYXJhbSBmcm9tRWxlbWVudCAtIGNvbW1vbiBwYXJlbnQgdG8gc2NvcGUgYWN0aXZlIGVsZW1lbnQgc2VhcmNoIG9yIHRhYiBjeWNsZSBvcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBbb3B0aW9uc10gLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNQcmV2RWxlbWVudCA9IGZ1bmN0aW9uIChmcm9tRWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgbW92ZUZvY3VzKGZyb21FbGVtZW50LCBvcHRpb25zLCBmdW5jdGlvbiAoX2EsIGN5Y2xlKSB7XG4gICAgICAgIHZhciBwcmV2ID0gX2EucHJldiwgbGFzdCA9IF9hLmxhc3Q7XG4gICAgICAgIHJldHVybiBwcmV2IHx8IChjeWNsZSAmJiBsYXN0KTtcbiAgICB9KTtcbn07XG52YXIgcGlja0JvdW5kYXJ5ID0gZnVuY3Rpb24gKHNjb3BlLCBvcHRpb25zLCB3aGF0KSB7XG4gICAgdmFyIF9hO1xuICAgIHZhciBib3VuZGFyeSA9IGdldEJvdW5kYXJ5KHNjb3BlLCAoX2EgPSBvcHRpb25zLm9ubHlUYWJiYWJsZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZSk7XG4gICAgdmFyIG5vZGUgPSBib3VuZGFyeVt3aGF0XTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgICBmb2N1c09uKG5vZGUubm9kZSwgb3B0aW9ucy5mb2N1c09wdGlvbnMpO1xuICAgIH1cbn07XG4vKipcbiAqIGZvY3VzZXMgZmlyc3QgZWxlbWVudCBpbiB0aGUgdGFiLW9yZGVyXG4gKiBAcGFyYW0ge0ZvY3VzTmV4dE9wdGlvbnN9IG9wdGlvbnMgLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNGaXJzdEVsZW1lbnQgPSBmdW5jdGlvbiAoc2NvcGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHBpY2tCb3VuZGFyeShzY29wZSwgb3B0aW9ucywgJ2ZpcnN0Jyk7XG59O1xuLyoqXG4gKiBmb2N1c2VzIGxhc3QgZWxlbWVudCBpbiB0aGUgdGFiIG9yZGVyXG4gKiBAcGFyYW0ge0ZvY3VzTmV4dE9wdGlvbnN9IG9wdGlvbnMgLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNMYXN0RWxlbWVudCA9IGZ1bmN0aW9uIChzY29wZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcGlja0JvdW5kYXJ5KHNjb3BlLCBvcHRpb25zLCAnbGFzdCcpO1xufTtcbiIsICJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuL1RyYXAnO1xuaW1wb3J0IHsgbWVkaXVtU2lkZWNhciB9IGZyb20gJy4vbWVkaXVtJztcbmV4cG9ydCBkZWZhdWx0IGV4cG9ydFNpZGVjYXIobWVkaXVtU2lkZWNhciwgRm9jdXNUcmFwKTsiLCAiaW1wb3J0IHsgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVtb3ZlU2Nyb2xsQmFyIH0gZnJvbSAncmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXInO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgbm9uUGFzc2l2ZSB9IGZyb20gJy4vYWdncmVzaXZlQ2FwdHVyZSc7XG5pbXBvcnQgeyBoYW5kbGVTY3JvbGwsIGxvY2F0aW9uQ291bGRCZVNjcm9sbGVkIH0gZnJvbSAnLi9oYW5kbGVTY3JvbGwnO1xuZXhwb3J0IHZhciBnZXRUb3VjaFhZID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdjaGFuZ2VkVG91Y2hlcycgaW4gZXZlbnQgPyBbZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WCwgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WV0gOiBbMCwgMF07XG59O1xuZXhwb3J0IHZhciBnZXREZWx0YVhZID0gZnVuY3Rpb24gKGV2ZW50KSB7IHJldHVybiBbZXZlbnQuZGVsdGFYLCBldmVudC5kZWx0YVldOyB9O1xudmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgcmV0dXJuIHJlZiAmJiAnY3VycmVudCcgaW4gcmVmID8gcmVmLmN1cnJlbnQgOiByZWY7XG59O1xudmFyIGRlbHRhQ29tcGFyZSA9IGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiB4WzBdID09PSB5WzBdICYmIHhbMV0gPT09IHlbMV07IH07XG52YXIgZ2VuZXJhdGVTdHlsZSA9IGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gXCJcXG4gIC5ibG9jay1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCwgXCIge3BvaW50ZXItZXZlbnRzOiBub25lO31cXG4gIC5hbGxvdy1pbnRlcmFjdGl2aXR5LVwiKS5jb25jYXQoaWQsIFwiIHtwb2ludGVyLWV2ZW50czogYWxsO31cXG5cIik7IH07XG52YXIgaWRDb3VudGVyID0gMDtcbnZhciBsb2NrU3RhY2sgPSBbXTtcbmV4cG9ydCBmdW5jdGlvbiBSZW1vdmVTY3JvbGxTaWRlQ2FyKHByb3BzKSB7XG4gICAgdmFyIHNob3VsZFByZXZlbnRRdWV1ZSA9IFJlYWN0LnVzZVJlZihbXSk7XG4gICAgdmFyIHRvdWNoU3RhcnRSZWYgPSBSZWFjdC51c2VSZWYoWzAsIDBdKTtcbiAgICB2YXIgYWN0aXZlQXhpcyA9IFJlYWN0LnVzZVJlZigpO1xuICAgIHZhciBpZCA9IFJlYWN0LnVzZVN0YXRlKGlkQ291bnRlcisrKVswXTtcbiAgICB2YXIgU3R5bGUgPSBSZWFjdC51c2VTdGF0ZShzdHlsZVNpbmdsZXRvbilbMF07XG4gICAgdmFyIGxhc3RQcm9wcyA9IFJlYWN0LnVzZVJlZihwcm9wcyk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGFzdFByb3BzLmN1cnJlbnQgPSBwcm9wcztcbiAgICB9LCBbcHJvcHNdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocHJvcHMuaW5lcnQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImJsb2NrLWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7XG4gICAgICAgICAgICB2YXIgYWxsb3dfMSA9IF9fc3ByZWFkQXJyYXkoW3Byb3BzLmxvY2tSZWYuY3VycmVudF0sIChwcm9wcy5zaGFyZHMgfHwgW10pLm1hcChleHRyYWN0UmVmKSwgdHJ1ZSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICAgICAgYWxsb3dfMS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuY2xhc3NMaXN0LmFkZChcImFsbG93LWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7IH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJibG9jay1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpO1xuICAgICAgICAgICAgICAgIGFsbG93XzEuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoXCJhbGxvdy1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpOyB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH0sIFtwcm9wcy5pbmVydCwgcHJvcHMubG9ja1JlZi5jdXJyZW50LCBwcm9wcy5zaGFyZHNdKTtcbiAgICB2YXIgc2hvdWxkQ2FuY2VsRXZlbnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQsIHBhcmVudCkge1xuICAgICAgICBpZiAoKCd0b3VjaGVzJyBpbiBldmVudCAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA9PT0gMikgfHwgKGV2ZW50LnR5cGUgPT09ICd3aGVlbCcgJiYgZXZlbnQuY3RybEtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiAhbGFzdFByb3BzLmN1cnJlbnQuYWxsb3dQaW5jaFpvb207XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRvdWNoID0gZ2V0VG91Y2hYWShldmVudCk7XG4gICAgICAgIHZhciB0b3VjaFN0YXJ0ID0gdG91Y2hTdGFydFJlZi5jdXJyZW50O1xuICAgICAgICB2YXIgZGVsdGFYID0gJ2RlbHRhWCcgaW4gZXZlbnQgPyBldmVudC5kZWx0YVggOiB0b3VjaFN0YXJ0WzBdIC0gdG91Y2hbMF07XG4gICAgICAgIHZhciBkZWx0YVkgPSAnZGVsdGFZJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWSA6IHRvdWNoU3RhcnRbMV0gLSB0b3VjaFsxXTtcbiAgICAgICAgdmFyIGN1cnJlbnRBeGlzO1xuICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICB2YXIgbW92ZURpcmVjdGlvbiA9IE1hdGguYWJzKGRlbHRhWCkgPiBNYXRoLmFicyhkZWx0YVkpID8gJ2gnIDogJ3YnO1xuICAgICAgICAvLyBhbGxvdyBob3Jpem9udGFsIHRvdWNoIG1vdmUgb24gUmFuZ2UgaW5wdXRzLiBUaGV5IHdpbGwgbm90IGNhdXNlIGFueSBzY3JvbGxcbiAgICAgICAgaWYgKCd0b3VjaGVzJyBpbiBldmVudCAmJiBtb3ZlRGlyZWN0aW9uID09PSAnaCcgJiYgdGFyZ2V0LnR5cGUgPT09ICdyYW5nZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbiA9IGxvY2F0aW9uQ291bGRCZVNjcm9sbGVkKG1vdmVEaXJlY3Rpb24sIHRhcmdldCk7XG4gICAgICAgIGlmICghY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGN1cnJlbnRBeGlzID0gbW92ZURpcmVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRBeGlzID0gbW92ZURpcmVjdGlvbiA9PT0gJ3YnID8gJ2gnIDogJ3YnO1xuICAgICAgICAgICAgY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbiA9IGxvY2F0aW9uQ291bGRCZVNjcm9sbGVkKG1vdmVEaXJlY3Rpb24sIHRhcmdldCk7XG4gICAgICAgICAgICAvLyBvdGhlciBheGlzIG1pZ2h0IGJlIG5vdCBzY3JvbGxhYmxlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhY3RpdmVBeGlzLmN1cnJlbnQgJiYgJ2NoYW5nZWRUb3VjaGVzJyBpbiBldmVudCAmJiAoZGVsdGFYIHx8IGRlbHRhWSkpIHtcbiAgICAgICAgICAgIGFjdGl2ZUF4aXMuY3VycmVudCA9IGN1cnJlbnRBeGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3VycmVudEF4aXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjYW5jZWxpbmdBeGlzID0gYWN0aXZlQXhpcy5jdXJyZW50IHx8IGN1cnJlbnRBeGlzO1xuICAgICAgICByZXR1cm4gaGFuZGxlU2Nyb2xsKGNhbmNlbGluZ0F4aXMsIHBhcmVudCwgZXZlbnQsIGNhbmNlbGluZ0F4aXMgPT09ICdoJyA/IGRlbHRhWCA6IGRlbHRhWSwgdHJ1ZSk7XG4gICAgfSwgW10pO1xuICAgIHZhciBzaG91bGRQcmV2ZW50ID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKF9ldmVudCkge1xuICAgICAgICB2YXIgZXZlbnQgPSBfZXZlbnQ7XG4gICAgICAgIGlmICghbG9ja1N0YWNrLmxlbmd0aCB8fCBsb2NrU3RhY2tbbG9ja1N0YWNrLmxlbmd0aCAtIDFdICE9PSBTdHlsZSkge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBsYXN0IGFjdGl2ZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWx0YSA9ICdkZWx0YVknIGluIGV2ZW50ID8gZ2V0RGVsdGFYWShldmVudCkgOiBnZXRUb3VjaFhZKGV2ZW50KTtcbiAgICAgICAgdmFyIHNvdXJjZUV2ZW50ID0gc2hvdWxkUHJldmVudFF1ZXVlLmN1cnJlbnQuZmlsdGVyKGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLm5hbWUgPT09IGV2ZW50LnR5cGUgJiYgKGUudGFyZ2V0ID09PSBldmVudC50YXJnZXQgfHwgZXZlbnQudGFyZ2V0ID09PSBlLnNoYWRvd1BhcmVudCkgJiYgZGVsdGFDb21wYXJlKGUuZGVsdGEsIGRlbHRhKTsgfSlbMF07XG4gICAgICAgIC8vIHNlbGYgZXZlbnQsIGFuZCBzaG91bGQgYmUgY2FuY2VsZWRcbiAgICAgICAgaWYgKHNvdXJjZUV2ZW50ICYmIHNvdXJjZUV2ZW50LnNob3VsZCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIG91dHNpZGUgb3Igc2hhcmQgZXZlbnRcbiAgICAgICAgaWYgKCFzb3VyY2VFdmVudCkge1xuICAgICAgICAgICAgdmFyIHNoYXJkTm9kZXMgPSAobGFzdFByb3BzLmN1cnJlbnQuc2hhcmRzIHx8IFtdKVxuICAgICAgICAgICAgICAgIC5tYXAoZXh0cmFjdFJlZilcbiAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZS5jb250YWlucyhldmVudC50YXJnZXQpOyB9KTtcbiAgICAgICAgICAgIHZhciBzaG91bGRTdG9wID0gc2hhcmROb2Rlcy5sZW5ndGggPiAwID8gc2hvdWxkQ2FuY2VsRXZlbnQoZXZlbnQsIHNoYXJkTm9kZXNbMF0pIDogIWxhc3RQcm9wcy5jdXJyZW50Lm5vSXNvbGF0aW9uO1xuICAgICAgICAgICAgaWYgKHNob3VsZFN0b3ApIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICB2YXIgc2hvdWxkQ2FuY2VsID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5hbWUsIGRlbHRhLCB0YXJnZXQsIHNob3VsZCkge1xuICAgICAgICB2YXIgZXZlbnQgPSB7IG5hbWU6IG5hbWUsIGRlbHRhOiBkZWx0YSwgdGFyZ2V0OiB0YXJnZXQsIHNob3VsZDogc2hvdWxkLCBzaGFkb3dQYXJlbnQ6IGdldE91dGVybW9zdFNoYWRvd1BhcmVudCh0YXJnZXQpIH07XG4gICAgICAgIHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LnB1c2goZXZlbnQpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50ID0gc2hvdWxkUHJldmVudFF1ZXVlLmN1cnJlbnQuZmlsdGVyKGZ1bmN0aW9uIChlKSB7IHJldHVybiBlICE9PSBldmVudDsgfSk7XG4gICAgICAgIH0sIDEpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2Nyb2xsVG91Y2hTdGFydCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB0b3VjaFN0YXJ0UmVmLmN1cnJlbnQgPSBnZXRUb3VjaFhZKGV2ZW50KTtcbiAgICAgICAgYWN0aXZlQXhpcy5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2Nyb2xsV2hlZWwgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsKGV2ZW50LnR5cGUsIGdldERlbHRhWFkoZXZlbnQpLCBldmVudC50YXJnZXQsIHNob3VsZENhbmNlbEV2ZW50KGV2ZW50LCBwcm9wcy5sb2NrUmVmLmN1cnJlbnQpKTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNjcm9sbFRvdWNoTW92ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBzaG91bGRDYW5jZWwoZXZlbnQudHlwZSwgZ2V0VG91Y2hYWShldmVudCksIGV2ZW50LnRhcmdldCwgc2hvdWxkQ2FuY2VsRXZlbnQoZXZlbnQsIHByb3BzLmxvY2tSZWYuY3VycmVudCkpO1xuICAgIH0sIFtdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBsb2NrU3RhY2sucHVzaChTdHlsZSk7XG4gICAgICAgIHByb3BzLnNldENhbGxiYWNrcyh7XG4gICAgICAgICAgICBvblNjcm9sbENhcHR1cmU6IHNjcm9sbFdoZWVsLFxuICAgICAgICAgICAgb25XaGVlbENhcHR1cmU6IHNjcm9sbFdoZWVsLFxuICAgICAgICAgICAgb25Ub3VjaE1vdmVDYXB0dXJlOiBzY3JvbGxUb3VjaE1vdmUsXG4gICAgICAgIH0pO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIHNob3VsZFByZXZlbnQsIG5vblBhc3NpdmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBzaG91bGRQcmV2ZW50LCBub25QYXNzaXZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHNjcm9sbFRvdWNoU3RhcnQsIG5vblBhc3NpdmUpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbG9ja1N0YWNrID0gbG9ja1N0YWNrLmZpbHRlcihmdW5jdGlvbiAoaW5zdCkgeyByZXR1cm4gaW5zdCAhPT0gU3R5bGU7IH0pO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBzaG91bGRQcmV2ZW50LCBub25QYXNzaXZlKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHNob3VsZFByZXZlbnQsIG5vblBhc3NpdmUpO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHNjcm9sbFRvdWNoU3RhcnQsIG5vblBhc3NpdmUpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICB2YXIgcmVtb3ZlU2Nyb2xsQmFyID0gcHJvcHMucmVtb3ZlU2Nyb2xsQmFyLCBpbmVydCA9IHByb3BzLmluZXJ0O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgaW5lcnQgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlLCB7IHN0eWxlczogZ2VuZXJhdGVTdHlsZShpZCkgfSkgOiBudWxsLFxuICAgICAgICByZW1vdmVTY3JvbGxCYXIgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFJlbW92ZVNjcm9sbEJhciwgeyBnYXBNb2RlOiBwcm9wcy5nYXBNb2RlIH0pIDogbnVsbCkpO1xufVxuZnVuY3Rpb24gZ2V0T3V0ZXJtb3N0U2hhZG93UGFyZW50KG5vZGUpIHtcbiAgICB2YXIgc2hhZG93UGFyZW50ID0gbnVsbDtcbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIHNoYWRvd1BhcmVudCA9IG5vZGUuaG9zdDtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLmhvc3Q7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIHNoYWRvd1BhcmVudDtcbn1cbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZVNpbmdsZXRvbiB9IGZyb20gJ3JlYWN0LXN0eWxlLXNpbmdsZXRvbic7XG5pbXBvcnQgeyBmdWxsV2lkdGhDbGFzc05hbWUsIHplcm9SaWdodENsYXNzTmFtZSwgbm9TY3JvbGxiYXJzQ2xhc3NOYW1lLCByZW1vdmVkQmFyU2l6ZVZhcmlhYmxlIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0R2FwV2lkdGggfSBmcm9tICcuL3V0aWxzJztcbnZhciBTdHlsZSA9IHN0eWxlU2luZ2xldG9uKCk7XG5leHBvcnQgdmFyIGxvY2tBdHRyaWJ1dGUgPSAnZGF0YS1zY3JvbGwtbG9ja2VkJztcbi8vIGltcG9ydGFudCB0aXAgLSBvbmNlIHdlIG1lYXN1cmUgc2Nyb2xsQmFyIHdpZHRoIGFuZCByZW1vdmUgdGhlbVxuLy8gd2UgY291bGQgbm90IHJlcGVhdCB0aGlzIG9wZXJhdGlvblxuLy8gdGh1cyB3ZSBhcmUgdXNpbmcgc3R5bGUtc2luZ2xldG9uIC0gb25seSB0aGUgZmlyc3QgXCJ5ZXQgY29ycmVjdFwiIHN0eWxlIHdpbGwgYmUgYXBwbGllZC5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiAoX2EsIGFsbG93UmVsYXRpdmUsIGdhcE1vZGUsIGltcG9ydGFudCkge1xuICAgIHZhciBsZWZ0ID0gX2EubGVmdCwgdG9wID0gX2EudG9wLCByaWdodCA9IF9hLnJpZ2h0LCBnYXAgPSBfYS5nYXA7XG4gICAgaWYgKGdhcE1vZGUgPT09IHZvaWQgMCkgeyBnYXBNb2RlID0gJ21hcmdpbic7IH1cbiAgICByZXR1cm4gXCJcXG4gIC5cIi5jb25jYXQobm9TY3JvbGxiYXJzQ2xhc3NOYW1lLCBcIiB7XFxuICAgb3ZlcmZsb3c6IGhpZGRlbiBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICAgcGFkZGluZy1yaWdodDogXCIpLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgYm9keVtcIikuY29uY2F0KGxvY2tBdHRyaWJ1dGUsIFwiXSB7XFxuICAgIG92ZXJmbG93OiBoaWRkZW4gXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluO1xcbiAgICBcIikuY29uY2F0KFtcbiAgICAgICAgYWxsb3dSZWxhdGl2ZSAmJiBcInBvc2l0aW9uOiByZWxhdGl2ZSBcIi5jb25jYXQoaW1wb3J0YW50LCBcIjtcIiksXG4gICAgICAgIGdhcE1vZGUgPT09ICdtYXJnaW4nICYmXG4gICAgICAgICAgICBcIlxcbiAgICBwYWRkaW5nLWxlZnQ6IFwiLmNvbmNhdChsZWZ0LCBcInB4O1xcbiAgICBwYWRkaW5nLXRvcDogXCIpLmNvbmNhdCh0b3AsIFwicHg7XFxuICAgIHBhZGRpbmctcmlnaHQ6IFwiKS5jb25jYXQocmlnaHQsIFwicHg7XFxuICAgIG1hcmdpbi1sZWZ0OjA7XFxuICAgIG1hcmdpbi10b3A6MDtcXG4gICAgbWFyZ2luLXJpZ2h0OiBcIikuY29uY2F0KGdhcCwgXCJweCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICAgIFwiKSxcbiAgICAgICAgZ2FwTW9kZSA9PT0gJ3BhZGRpbmcnICYmIFwicGFkZGluZy1yaWdodDogXCIuY29uY2F0KGdhcCwgXCJweCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XCIpLFxuICAgIF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignJyksIFwiXFxuICB9XFxuICBcXG4gIC5cIikuY29uY2F0KHplcm9SaWdodENsYXNzTmFtZSwgXCIge1xcbiAgICByaWdodDogXCIpLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdChmdWxsV2lkdGhDbGFzc05hbWUsIFwiIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiBcIikuY29uY2F0KGdhcCwgXCJweCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIC5cIikuY29uY2F0KHplcm9SaWdodENsYXNzTmFtZSwgXCIgLlwiKS5jb25jYXQoemVyb1JpZ2h0Q2xhc3NOYW1lLCBcIiB7XFxuICAgIHJpZ2h0OiAwIFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoZnVsbFdpZHRoQ2xhc3NOYW1lLCBcIiAuXCIpLmNvbmNhdChmdWxsV2lkdGhDbGFzc05hbWUsIFwiIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwIFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIFxcbiAgYm9keVtcIikuY29uY2F0KGxvY2tBdHRyaWJ1dGUsIFwiXSB7XFxuICAgIFwiKS5jb25jYXQocmVtb3ZlZEJhclNpemVWYXJpYWJsZSwgXCI6IFwiKS5jb25jYXQoZ2FwLCBcInB4O1xcbiAgfVxcblwiKTtcbn07XG52YXIgZ2V0Q3VycmVudFVzZUNvdW50ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvdW50ZXIgPSBwYXJzZUludChkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZShsb2NrQXR0cmlidXRlKSB8fCAnMCcsIDEwKTtcbiAgICByZXR1cm4gaXNGaW5pdGUoY291bnRlcikgPyBjb3VudGVyIDogMDtcbn07XG5leHBvcnQgdmFyIHVzZUxvY2tBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUobG9ja0F0dHJpYnV0ZSwgKGdldEN1cnJlbnRVc2VDb3VudGVyKCkgKyAxKS50b1N0cmluZygpKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBuZXdDb3VudGVyID0gZ2V0Q3VycmVudFVzZUNvdW50ZXIoKSAtIDE7XG4gICAgICAgICAgICBpZiAobmV3Q291bnRlciA8PSAwKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUobG9ja0F0dHJpYnV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZShsb2NrQXR0cmlidXRlLCBuZXdDb3VudGVyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbn07XG4vKipcbiAqIFJlbW92ZXMgcGFnZSBzY3JvbGxiYXIgYW5kIGJsb2NrcyBwYWdlIHNjcm9sbCB3aGVuIG1vdW50ZWRcbiAqL1xuZXhwb3J0IHZhciBSZW1vdmVTY3JvbGxCYXIgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgbm9SZWxhdGl2ZSA9IF9hLm5vUmVsYXRpdmUsIG5vSW1wb3J0YW50ID0gX2Eubm9JbXBvcnRhbnQsIF9iID0gX2EuZ2FwTW9kZSwgZ2FwTW9kZSA9IF9iID09PSB2b2lkIDAgPyAnbWFyZ2luJyA6IF9iO1xuICAgIHVzZUxvY2tBdHRyaWJ1dGUoKTtcbiAgICAvKlxuICAgICBnYXAgd2lsbCBiZSBtZWFzdXJlZCBvbiBldmVyeSBjb21wb25lbnQgbW91bnRcbiAgICAgaG93ZXZlciBpdCB3aWxsIGJlIHVzZWQgb25seSBieSB0aGUgXCJmaXJzdFwiIGludm9jYXRpb25cbiAgICAgZHVlIHRvIHNpbmdsZXRvbiBuYXR1cmUgb2YgPFN0eWxlXG4gICAgICovXG4gICAgdmFyIGdhcCA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2V0R2FwV2lkdGgoZ2FwTW9kZSk7IH0sIFtnYXBNb2RlXSk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGUsIHsgc3R5bGVzOiBnZXRTdHlsZXMoZ2FwLCAhbm9SZWxhdGl2ZSwgZ2FwTW9kZSwgIW5vSW1wb3J0YW50ID8gJyFpbXBvcnRhbnQnIDogJycpIH0pO1xufTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZXNoZWV0U2luZ2xldG9uIH0gZnJvbSAnLi9zaW5nbGV0b24nO1xuLyoqXG4gKiBjcmVhdGVzIGEgaG9vayB0byBjb250cm9sIHN0eWxlIHNpbmdsZXRvblxuICogQHNlZSB7QGxpbmsgc3R5bGVTaW5nbGV0b259IGZvciBhIHNhZmVyIGNvbXBvbmVudCB2ZXJzaW9uXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB1c2VTdHlsZSA9IHN0eWxlSG9va1NpbmdsZXRvbigpO1xuICogLy8vXG4gKiB1c2VTdHlsZSgnYm9keSB7IG92ZXJmbG93OiBoaWRkZW59Jyk7XG4gKi9cbmV4cG9ydCB2YXIgc3R5bGVIb29rU2luZ2xldG9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzaGVldCA9IHN0eWxlc2hlZXRTaW5nbGV0b24oKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0eWxlcywgaXNEeW5hbWljKSB7XG4gICAgICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzaGVldC5hZGQoc3R5bGVzKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2hlZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCBbc3R5bGVzICYmIGlzRHluYW1pY10pO1xuICAgIH07XG59O1xuIiwgInZhciBjdXJyZW50Tm9uY2U7XG5leHBvcnQgdmFyIHNldE5vbmNlID0gZnVuY3Rpb24gKG5vbmNlKSB7XG4gICAgY3VycmVudE5vbmNlID0gbm9uY2U7XG59O1xuZXhwb3J0IHZhciBnZXROb25jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY3VycmVudE5vbmNlKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9uY2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBfX3dlYnBhY2tfbm9uY2VfXztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCAiaW1wb3J0IHsgZ2V0Tm9uY2UgfSBmcm9tICdnZXQtbm9uY2UnO1xuZnVuY3Rpb24gbWFrZVN0eWxlVGFnKCkge1xuICAgIGlmICghZG9jdW1lbnQpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHZhciB0YWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHRhZy50eXBlID0gJ3RleHQvY3NzJztcbiAgICB2YXIgbm9uY2UgPSBnZXROb25jZSgpO1xuICAgIGlmIChub25jZSkge1xuICAgICAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG5vbmNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhZztcbn1cbmZ1bmN0aW9uIGluamVjdFN0eWxlcyh0YWcsIGNzcykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodGFnLnN0eWxlU2hlZXQpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0YWcuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluc2VydFN0eWxlVGFnKHRhZykge1xuICAgIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQodGFnKTtcbn1cbmV4cG9ydCB2YXIgc3R5bGVzaGVldFNpbmdsZXRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY291bnRlciA9IDA7XG4gICAgdmFyIHN0eWxlc2hlZXQgPSBudWxsO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFkZDogZnVuY3Rpb24gKHN0eWxlKSB7XG4gICAgICAgICAgICBpZiAoY291bnRlciA9PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKChzdHlsZXNoZWV0ID0gbWFrZVN0eWxlVGFnKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGluamVjdFN0eWxlcyhzdHlsZXNoZWV0LCBzdHlsZSk7XG4gICAgICAgICAgICAgICAgICAgIGluc2VydFN0eWxlVGFnKHN0eWxlc2hlZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgfSxcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb3VudGVyLS07XG4gICAgICAgICAgICBpZiAoIWNvdW50ZXIgJiYgc3R5bGVzaGVldCkge1xuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQucGFyZW50Tm9kZSAmJiBzdHlsZXNoZWV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVzaGVldCk7XG4gICAgICAgICAgICAgICAgc3R5bGVzaGVldCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcbn07XG4iLCAiaW1wb3J0IHsgc3R5bGVIb29rU2luZ2xldG9uIH0gZnJvbSAnLi9ob29rJztcbi8qKlxuICogY3JlYXRlIGEgQ29tcG9uZW50IHRvIGFkZCBzdHlsZXMgb24gZGVtYW5kXG4gKiAtIHN0eWxlcyBhcmUgYWRkZWQgd2hlbiBmaXJzdCBpbnN0YW5jZSBpcyBtb3VudGVkXG4gKiAtIHN0eWxlcyBhcmUgcmVtb3ZlZCB3aGVuIHRoZSBsYXN0IGluc3RhbmNlIGlzIHVubW91bnRlZFxuICogLSBjaGFuZ2luZyBzdHlsZXMgaW4gcnVudGltZSBkb2VzIG5vdGhpbmcgdW5sZXNzIGR5bmFtaWMgaXMgc2V0LiBCdXQgd2l0aCBtdWx0aXBsZSBjb21wb25lbnRzIHRoYXQgY2FuIGxlYWQgdG8gdGhlIHVuZGVmaW5lZCBiZWhhdmlvclxuICovXG5leHBvcnQgdmFyIHN0eWxlU2luZ2xldG9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB1c2VTdHlsZSA9IHN0eWxlSG9va1NpbmdsZXRvbigpO1xuICAgIHZhciBTaGVldCA9IGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgc3R5bGVzID0gX2Euc3R5bGVzLCBkeW5hbWljID0gX2EuZHluYW1pYztcbiAgICAgICAgdXNlU3R5bGUoc3R5bGVzLCBkeW5hbWljKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gU2hlZXQ7XG59O1xuIiwgImV4cG9ydCB2YXIgemVyb0dhcCA9IHtcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBnYXA6IDAsXG59O1xudmFyIHBhcnNlID0gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHBhcnNlSW50KHggfHwgJycsIDEwKSB8fCAwOyB9O1xudmFyIGdldE9mZnNldCA9IGZ1bmN0aW9uIChnYXBNb2RlKSB7XG4gICAgdmFyIGNzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSk7XG4gICAgdmFyIGxlZnQgPSBjc1tnYXBNb2RlID09PSAncGFkZGluZycgPyAncGFkZGluZ0xlZnQnIDogJ21hcmdpbkxlZnQnXTtcbiAgICB2YXIgdG9wID0gY3NbZ2FwTW9kZSA9PT0gJ3BhZGRpbmcnID8gJ3BhZGRpbmdUb3AnIDogJ21hcmdpblRvcCddO1xuICAgIHZhciByaWdodCA9IGNzW2dhcE1vZGUgPT09ICdwYWRkaW5nJyA/ICdwYWRkaW5nUmlnaHQnIDogJ21hcmdpblJpZ2h0J107XG4gICAgcmV0dXJuIFtwYXJzZShsZWZ0KSwgcGFyc2UodG9wKSwgcGFyc2UocmlnaHQpXTtcbn07XG5leHBvcnQgdmFyIGdldEdhcFdpZHRoID0gZnVuY3Rpb24gKGdhcE1vZGUpIHtcbiAgICBpZiAoZ2FwTW9kZSA9PT0gdm9pZCAwKSB7IGdhcE1vZGUgPSAnbWFyZ2luJzsgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gemVyb0dhcDtcbiAgICB9XG4gICAgdmFyIG9mZnNldHMgPSBnZXRPZmZzZXQoZ2FwTW9kZSk7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgdmFyIHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogb2Zmc2V0c1swXSxcbiAgICAgICAgdG9wOiBvZmZzZXRzWzFdLFxuICAgICAgICByaWdodDogb2Zmc2V0c1syXSxcbiAgICAgICAgZ2FwOiBNYXRoLm1heCgwLCB3aW5kb3dXaWR0aCAtIGRvY3VtZW50V2lkdGggKyBvZmZzZXRzWzJdIC0gb2Zmc2V0c1swXSksXG4gICAgfTtcbn07XG4iLCAidmFyIHBhc3NpdmVTdXBwb3J0ZWQgPSBmYWxzZTtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHBhc3NpdmVTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHBhc3NpdmVTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICB9XG59XG5leHBvcnQgdmFyIG5vblBhc3NpdmUgPSBwYXNzaXZlU3VwcG9ydGVkID8geyBwYXNzaXZlOiBmYWxzZSB9IDogZmFsc2U7XG4iLCAidmFyIGFsd2F5c0NvbnRhaW5zU2Nyb2xsID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAvLyB0ZXh0YXJlYSB3aWxsIGFsd2F5cyBfY29udGFpbl8gc2Nyb2xsIGluc2lkZSBzZWxmLiBJdCBvbmx5IGNhbiBiZSBoaWRkZW5cbiAgICByZXR1cm4gbm9kZS50YWdOYW1lID09PSAnVEVYVEFSRUEnO1xufTtcbnZhciBlbGVtZW50Q2FuQmVTY3JvbGxlZCA9IGZ1bmN0aW9uIChub2RlLCBvdmVyZmxvdykge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcbiAgICByZXR1cm4gKFxuICAgIC8vIG5vdC1ub3Qtc2Nyb2xsYWJsZVxuICAgIHN0eWxlc1tvdmVyZmxvd10gIT09ICdoaWRkZW4nICYmXG4gICAgICAgIC8vIGNvbnRhaW5zIHNjcm9sbCBpbnNpZGUgc2VsZlxuICAgICAgICAhKHN0eWxlcy5vdmVyZmxvd1kgPT09IHN0eWxlcy5vdmVyZmxvd1ggJiYgIWFsd2F5c0NvbnRhaW5zU2Nyb2xsKG5vZGUpICYmIHN0eWxlc1tvdmVyZmxvd10gPT09ICd2aXNpYmxlJykpO1xufTtcbnZhciBlbGVtZW50Q291bGRCZVZTY3JvbGxlZCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBlbGVtZW50Q2FuQmVTY3JvbGxlZChub2RlLCAnb3ZlcmZsb3dZJyk7IH07XG52YXIgZWxlbWVudENvdWxkQmVIU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZWxlbWVudENhbkJlU2Nyb2xsZWQobm9kZSwgJ292ZXJmbG93WCcpOyB9O1xuZXhwb3J0IHZhciBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZCA9IGZ1bmN0aW9uIChheGlzLCBub2RlKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgdmFyIGN1cnJlbnQgPSBub2RlO1xuICAgIGRvIHtcbiAgICAgICAgLy8gU2tpcCBvdmVyIHNoYWRvdyByb290XG4gICAgICAgIGlmICh0eXBlb2YgU2hhZG93Um9vdCAhPT0gJ3VuZGVmaW5lZCcgJiYgY3VycmVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lmhvc3Q7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlzU2Nyb2xsYWJsZSA9IGVsZW1lbnRDb3VsZEJlU2Nyb2xsZWQoYXhpcywgY3VycmVudCk7XG4gICAgICAgIGlmIChpc1Njcm9sbGFibGUpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IGdldFNjcm9sbFZhcmlhYmxlcyhheGlzLCBjdXJyZW50KSwgc2Nyb2xsSGVpZ2h0ID0gX2FbMV0sIGNsaWVudEhlaWdodCA9IF9hWzJdO1xuICAgICAgICAgICAgaWYgKHNjcm9sbEhlaWdodCA+IGNsaWVudEhlaWdodCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7XG4gICAgfSB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50ICE9PSBvd25lckRvY3VtZW50LmJvZHkpO1xuICAgIHJldHVybiBmYWxzZTtcbn07XG52YXIgZ2V0VlNjcm9sbFZhcmlhYmxlcyA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzY3JvbGxUb3AgPSBfYS5zY3JvbGxUb3AsIHNjcm9sbEhlaWdodCA9IF9hLnNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0ID0gX2EuY2xpZW50SGVpZ2h0O1xuICAgIHJldHVybiBbXG4gICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBjbGllbnRIZWlnaHQsXG4gICAgXTtcbn07XG52YXIgZ2V0SFNjcm9sbFZhcmlhYmxlcyA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzY3JvbGxMZWZ0ID0gX2Euc2Nyb2xsTGVmdCwgc2Nyb2xsV2lkdGggPSBfYS5zY3JvbGxXaWR0aCwgY2xpZW50V2lkdGggPSBfYS5jbGllbnRXaWR0aDtcbiAgICByZXR1cm4gW1xuICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxXaWR0aCxcbiAgICAgICAgY2xpZW50V2lkdGgsXG4gICAgXTtcbn07XG52YXIgZWxlbWVudENvdWxkQmVTY3JvbGxlZCA9IGZ1bmN0aW9uIChheGlzLCBub2RlKSB7XG4gICAgcmV0dXJuIGF4aXMgPT09ICd2JyA/IGVsZW1lbnRDb3VsZEJlVlNjcm9sbGVkKG5vZGUpIDogZWxlbWVudENvdWxkQmVIU2Nyb2xsZWQobm9kZSk7XG59O1xudmFyIGdldFNjcm9sbFZhcmlhYmxlcyA9IGZ1bmN0aW9uIChheGlzLCBub2RlKSB7XG4gICAgcmV0dXJuIGF4aXMgPT09ICd2JyA/IGdldFZTY3JvbGxWYXJpYWJsZXMobm9kZSkgOiBnZXRIU2Nyb2xsVmFyaWFibGVzKG5vZGUpO1xufTtcbnZhciBnZXREaXJlY3Rpb25GYWN0b3IgPSBmdW5jdGlvbiAoYXhpcywgZGlyZWN0aW9uKSB7XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGVsZW1lbnQncyBkaXJlY3Rpb24gaXMgcnRsIChyaWdodC10by1sZWZ0KSwgdGhlbiBzY3JvbGxMZWZ0IGlzIDAgd2hlbiB0aGUgc2Nyb2xsYmFyIGlzIGF0IGl0cyByaWdodG1vc3QgcG9zaXRpb24sXG4gICAgICogYW5kIHRoZW4gaW5jcmVhc2luZ2x5IG5lZ2F0aXZlIGFzIHlvdSBzY3JvbGwgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBjb250ZW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvc2Nyb2xsTGVmdFxuICAgICAqL1xuICAgIHJldHVybiBheGlzID09PSAnaCcgJiYgZGlyZWN0aW9uID09PSAncnRsJyA/IC0xIDogMTtcbn07XG5leHBvcnQgdmFyIGhhbmRsZVNjcm9sbCA9IGZ1bmN0aW9uIChheGlzLCBlbmRUYXJnZXQsIGV2ZW50LCBzb3VyY2VEZWx0YSwgbm9PdmVyc2Nyb2xsKSB7XG4gICAgdmFyIGRpcmVjdGlvbkZhY3RvciA9IGdldERpcmVjdGlvbkZhY3RvcihheGlzLCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbmRUYXJnZXQpLmRpcmVjdGlvbik7XG4gICAgdmFyIGRlbHRhID0gZGlyZWN0aW9uRmFjdG9yICogc291cmNlRGVsdGE7XG4gICAgLy8gZmluZCBzY3JvbGxhYmxlIHRhcmdldFxuICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgdmFyIHRhcmdldEluTG9jayA9IGVuZFRhcmdldC5jb250YWlucyh0YXJnZXQpO1xuICAgIHZhciBzaG91bGRDYW5jZWxTY3JvbGwgPSBmYWxzZTtcbiAgICB2YXIgaXNEZWx0YVBvc2l0aXZlID0gZGVsdGEgPiAwO1xuICAgIHZhciBhdmFpbGFibGVTY3JvbGwgPSAwO1xuICAgIHZhciBhdmFpbGFibGVTY3JvbGxUb3AgPSAwO1xuICAgIGRvIHtcbiAgICAgICAgdmFyIF9hID0gZ2V0U2Nyb2xsVmFyaWFibGVzKGF4aXMsIHRhcmdldCksIHBvc2l0aW9uID0gX2FbMF0sIHNjcm9sbF8xID0gX2FbMV0sIGNhcGFjaXR5ID0gX2FbMl07XG4gICAgICAgIHZhciBlbGVtZW50U2Nyb2xsID0gc2Nyb2xsXzEgLSBjYXBhY2l0eSAtIGRpcmVjdGlvbkZhY3RvciAqIHBvc2l0aW9uO1xuICAgICAgICBpZiAocG9zaXRpb24gfHwgZWxlbWVudFNjcm9sbCkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRDb3VsZEJlU2Nyb2xsZWQoYXhpcywgdGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZVNjcm9sbCArPSBlbGVtZW50U2Nyb2xsO1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZVNjcm9sbFRvcCArPSBwb3NpdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0Lmhvc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKFxuICAgIC8vIHBvcnRhbGVkIGNvbnRlbnRcbiAgICAoIXRhcmdldEluTG9jayAmJiB0YXJnZXQgIT09IGRvY3VtZW50LmJvZHkpIHx8XG4gICAgICAgIC8vIHNlbGYgY29udGVudFxuICAgICAgICAodGFyZ2V0SW5Mb2NrICYmIChlbmRUYXJnZXQuY29udGFpbnModGFyZ2V0KSB8fCBlbmRUYXJnZXQgPT09IHRhcmdldCkpKTtcbiAgICAvLyBoYW5kbGUgZXBzaWxvbiBhcm91bmQgMCAobm9uIHN0YW5kYXJkIHpvb20gbGV2ZWxzKVxuICAgIGlmIChpc0RlbHRhUG9zaXRpdmUgJiZcbiAgICAgICAgKChub092ZXJzY3JvbGwgJiYgTWF0aC5hYnMoYXZhaWxhYmxlU2Nyb2xsKSA8IDEpIHx8ICghbm9PdmVyc2Nyb2xsICYmIGRlbHRhID4gYXZhaWxhYmxlU2Nyb2xsKSkpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWlzRGVsdGFQb3NpdGl2ZSAmJlxuICAgICAgICAoKG5vT3ZlcnNjcm9sbCAmJiBNYXRoLmFicyhhdmFpbGFibGVTY3JvbGxUb3ApIDwgMSkgfHwgKCFub092ZXJzY3JvbGwgJiYgLWRlbHRhID4gYXZhaWxhYmxlU2Nyb2xsVG9wKSkpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHNob3VsZENhbmNlbFNjcm9sbDtcbn07XG4iLCAiaW1wb3J0IHsgZXhwb3J0U2lkZWNhciB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbFNpZGVDYXIgfSBmcm9tICcuL1NpZGVFZmZlY3QnO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xuZXhwb3J0IGRlZmF1bHQgZXhwb3J0U2lkZWNhcihlZmZlY3RDYXIsIFJlbW92ZVNjcm9sbFNpZGVDYXIpO1xuIiwgImltcG9ydCB7IF9fc3ByZWFkQXJyYXlzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBoaWRlT3RoZXJzIH0gZnJvbSAnYXJpYS1oaWRkZW4nO1xuaW1wb3J0IHsgSW50ZXJhY3Rpdml0eURpc2FibGVyIH0gZnJvbSAnLi9JbnRlcmFjdGl2aXR5RGlzYWJsZXInO1xuaW1wb3J0IHsgZm9jdXNIaWRkZW5NYXJrZXIgfSBmcm9tICcuL21lZGl1bSc7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG52YXIgZXh0cmFjdFJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICByZXR1cm4gJ2N1cnJlbnQnIGluIHJlZiA/IHJlZi5jdXJyZW50IDogcmVmO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBFZmZlY3QoX2EpIHtcbiAgICB2YXIgc2V0TG9ja1Byb3BzID0gX2Euc2V0TG9ja1Byb3BzLCBvbkVzY2FwZUtleSA9IF9hLm9uRXNjYXBlS2V5LCBvbkNsaWNrT3V0c2lkZSA9IF9hLm9uQ2xpY2tPdXRzaWRlLCBzaGFyZHMgPSBfYS5zaGFyZHMsIG9uQWN0aXZhdGlvbiA9IF9hLm9uQWN0aXZhdGlvbiwgb25EZWFjdGl2YXRpb24gPSBfYS5vbkRlYWN0aXZhdGlvbiwgbm9Jc29sYXRpb24gPSBfYS5ub0lzb2xhdGlvbjtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZSh1bmRlZmluZWQpLCBhY3RpdmVOb2RlID0gX2JbMF0sIHNldEFjdGl2ZU5vZGUgPSBfYlsxXTtcbiAgICB2YXIgbGFzdEV2ZW50VGFyZ2V0ID0gdXNlUmVmKG51bGwpO1xuICAgIHZhciBtb3VzZVRvdWNoZXMgPSB1c2VSZWYoMCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKChldmVudC5jb2RlID09PSAnRXNjYXBlJyB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudC5rZXkgPT09ICdFc2NhcGUnIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleUNvZGUgPT09IDI3KSAmJlxuICAgICAgICAgICAgICAgICAgICBvbkVzY2FwZUtleSkge1xuICAgICAgICAgICAgICAgICAgICBvbkVzY2FwZUtleShldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgb25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkIHx8XG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0ID09PSBsYXN0RXZlbnRUYXJnZXQuY3VycmVudCB8fFxuICAgICAgICAgICAgICAgIChldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQgJiYgZXZlbnQuYnV0dG9uICE9PSAwKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaGFyZHMgJiZcbiAgICAgICAgICAgICAgICBzaGFyZHNcbiAgICAgICAgICAgICAgICAgICAgLm1hcChleHRyYWN0UmVmKVxuICAgICAgICAgICAgICAgICAgICAuc29tZShmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5vZGUgJiYgbm9kZS5jb250YWlucyhldmVudC50YXJnZXQpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9PT0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uQ2xpY2tPdXRzaWRlKSB7XG4gICAgICAgICAgICAgICAgb25DbGlja091dHNpZGUoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgb25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBvbk1vdXNlRG93bihldmVudCk7XG4gICAgICAgICAgICBtb3VzZVRvdWNoZXMuY3VycmVudCA9IGV2ZW50LnRvdWNoZXMubGVuZ3RoO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgbW91c2VUb3VjaGVzLmN1cnJlbnQgPSBldmVudC50b3VjaGVzLmxlbmd0aDtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Nb3VzZURvd24pO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIG9uVG91Y2hFbmQpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbk1vdXNlRG93bik7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LCBbYWN0aXZlTm9kZSwgb25DbGlja091dHNpZGUsIG9uRXNjYXBlS2V5XSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGFjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgIGlmIChvbkFjdGl2YXRpb24pIHtcbiAgICAgICAgICAgICAgICBvbkFjdGl2YXRpb24oYWN0aXZlTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChvbkRlYWN0aXZhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBvbkRlYWN0aXZhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LCBbISFhY3RpdmVOb2RlXSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF91bmRvID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfTtcbiAgICAgICAgdmFyIHVubW91bnRlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgb25Ob2RlQWN0aXZhdGlvbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBpZiAoIW5vSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgX3VuZG8gPSBoaWRlT3RoZXJzKF9fc3ByZWFkQXJyYXlzKFtub2RlXSwgKHNoYXJkcyB8fCBbXSkubWFwKGV4dHJhY3RSZWYpKSwgZG9jdW1lbnQuYm9keSwgZm9jdXNIaWRkZW5NYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0QWN0aXZlTm9kZShmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlOyB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uTm9kZURlYWN0aXZhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF91bmRvKCk7XG4gICAgICAgICAgICBpZiAoIXVubW91bnRlZCkge1xuICAgICAgICAgICAgICAgIHNldEFjdGl2ZU5vZGUobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHNldExvY2tQcm9wcyh7XG4gICAgICAgICAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBsYXN0RXZlbnRUYXJnZXQuY3VycmVudCA9IGUudGFyZ2V0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uVG91Y2hTdGFydDogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBsYXN0RXZlbnRUYXJnZXQuY3VycmVudCA9IGUudGFyZ2V0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQWN0aXZhdGlvbjogb25Ob2RlQWN0aXZhdGlvbixcbiAgICAgICAgICAgIG9uRGVhY3RpdmF0aW9uOiBvbk5vZGVEZWFjdGl2YXRpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB1bm1vdW50ZWQgPSB0cnVlO1xuICAgICAgICAgICAgc2V0TG9ja1Byb3BzKGZhbHNlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW50ZXJhY3Rpdml0eURpc2FibGVyLCBudWxsKTtcbn1cbiIsICJ2YXIgZ2V0RGVmYXVsdFBhcmVudCA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgc2FtcGxlVGFyZ2V0ID0gQXJyYXkuaXNBcnJheShvcmlnaW5hbFRhcmdldCkgPyBvcmlnaW5hbFRhcmdldFswXSA6IG9yaWdpbmFsVGFyZ2V0O1xuICAgIHJldHVybiBzYW1wbGVUYXJnZXQub3duZXJEb2N1bWVudC5ib2R5O1xufTtcbnZhciBjb3VudGVyTWFwID0gbmV3IFdlYWtNYXAoKTtcbnZhciB1bmNvbnRyb2xsZWROb2RlcyA9IG5ldyBXZWFrTWFwKCk7XG52YXIgbWFya2VyTWFwID0ge307XG52YXIgbG9ja0NvdW50ID0gMDtcbnZhciB1bndyYXBIb3N0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZSAmJiAobm9kZS5ob3N0IHx8IHVud3JhcEhvc3Qobm9kZS5wYXJlbnROb2RlKSk7XG59O1xudmFyIGNvcnJlY3RUYXJnZXRzID0gZnVuY3Rpb24gKHBhcmVudCwgdGFyZ2V0cykge1xuICAgIHJldHVybiB0YXJnZXRzXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICBpZiAocGFyZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvcnJlY3RlZFRhcmdldCA9IHVud3JhcEhvc3QodGFyZ2V0KTtcbiAgICAgICAgaWYgKGNvcnJlY3RlZFRhcmdldCAmJiBwYXJlbnQuY29udGFpbnMoY29ycmVjdGVkVGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcnJlY3RlZFRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmVycm9yKCdhcmlhLWhpZGRlbicsIHRhcmdldCwgJ2luIG5vdCBjb250YWluZWQgaW5zaWRlJywgcGFyZW50LCAnLiBEb2luZyBub3RoaW5nJyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIEJvb2xlYW4oeCk7IH0pO1xufTtcbi8qKlxuICogTWFya3MgZXZlcnl0aGluZyBleGNlcHQgZ2l2ZW4gbm9kZShvciBub2RlcykgYXMgYXJpYS1oaWRkZW5cbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHBhcmFtIHtTdHJpbmd9IFtjb250cm9sQXR0cmlidXRlXSAtIGh0bWwgQXR0cmlidXRlIHRvIGNvbnRyb2xcbiAqIEByZXR1cm4ge1VuZG99IHVuZG8gY29tbWFuZFxuICovXG52YXIgYXBwbHlBdHRyaWJ1dGVUb090aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSwgY29udHJvbEF0dHJpYnV0ZSkge1xuICAgIHZhciB0YXJnZXRzID0gY29ycmVjdFRhcmdldHMocGFyZW50Tm9kZSwgQXJyYXkuaXNBcnJheShvcmlnaW5hbFRhcmdldCkgPyBvcmlnaW5hbFRhcmdldCA6IFtvcmlnaW5hbFRhcmdldF0pO1xuICAgIGlmICghbWFya2VyTWFwW21hcmtlck5hbWVdKSB7XG4gICAgICAgIG1hcmtlck1hcFttYXJrZXJOYW1lXSA9IG5ldyBXZWFrTWFwKCk7XG4gICAgfVxuICAgIHZhciBtYXJrZXJDb3VudGVyID0gbWFya2VyTWFwW21hcmtlck5hbWVdO1xuICAgIHZhciBoaWRkZW5Ob2RlcyA9IFtdO1xuICAgIHZhciBlbGVtZW50c1RvS2VlcCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZWxlbWVudHNUb1N0b3AgPSBuZXcgU2V0KHRhcmdldHMpO1xuICAgIHZhciBrZWVwID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIGlmICghZWwgfHwgZWxlbWVudHNUb0tlZXAuaGFzKGVsKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzVG9LZWVwLmFkZChlbCk7XG4gICAgICAgIGtlZXAoZWwucGFyZW50Tm9kZSk7XG4gICAgfTtcbiAgICB0YXJnZXRzLmZvckVhY2goa2VlcCk7XG4gICAgdmFyIGRlZXAgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIGlmICghcGFyZW50IHx8IGVsZW1lbnRzVG9TdG9wLmhhcyhwYXJlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChwYXJlbnQuY2hpbGRyZW4sIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudHNUb0tlZXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgZGVlcChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyID0gbm9kZS5nZXRBdHRyaWJ1dGUoY29udHJvbEF0dHJpYnV0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhbHJlYWR5SGlkZGVuID0gYXR0ciAhPT0gbnVsbCAmJiBhdHRyICE9PSAnZmFsc2UnO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY291bnRlclZhbHVlID0gKGNvdW50ZXJNYXAuZ2V0KG5vZGUpIHx8IDApICsgMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlclZhbHVlID0gKG1hcmtlckNvdW50ZXIuZ2V0KG5vZGUpIHx8IDApICsgMTtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlck1hcC5zZXQobm9kZSwgY291bnRlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ291bnRlci5zZXQobm9kZSwgbWFya2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBoaWRkZW5Ob2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlclZhbHVlID09PSAxICYmIGFscmVhZHlIaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuY29udHJvbGxlZE5vZGVzLnNldChub2RlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobWFya2VyVmFsdWUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG1hcmtlck5hbWUsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbHJlYWR5SGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShjb250cm9sQXR0cmlidXRlLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2FyaWEtaGlkZGVuOiBjYW5ub3Qgb3BlcmF0ZSBvbiAnLCBub2RlLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgZGVlcChwYXJlbnROb2RlKTtcbiAgICBlbGVtZW50c1RvS2VlcC5jbGVhcigpO1xuICAgIGxvY2tDb3VudCsrO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhpZGRlbk5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIHZhciBjb3VudGVyVmFsdWUgPSBjb3VudGVyTWFwLmdldChub2RlKSAtIDE7XG4gICAgICAgICAgICB2YXIgbWFya2VyVmFsdWUgPSBtYXJrZXJDb3VudGVyLmdldChub2RlKSAtIDE7XG4gICAgICAgICAgICBjb3VudGVyTWFwLnNldChub2RlLCBjb3VudGVyVmFsdWUpO1xuICAgICAgICAgICAgbWFya2VyQ291bnRlci5zZXQobm9kZSwgbWFya2VyVmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFjb3VudGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXVuY29udHJvbGxlZE5vZGVzLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShjb250cm9sQXR0cmlidXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdW5jb250cm9sbGVkTm9kZXMuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFtYXJrZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG1hcmtlck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9ja0NvdW50LS07XG4gICAgICAgIGlmICghbG9ja0NvdW50KSB7XG4gICAgICAgICAgICAvLyBjbGVhclxuICAgICAgICAgICAgY291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICBjb3VudGVyTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgICAgIHVuY29udHJvbGxlZE5vZGVzID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgICAgIG1hcmtlck1hcCA9IHt9O1xuICAgICAgICB9XG4gICAgfTtcbn07XG4vKipcbiAqIE1hcmtzIGV2ZXJ5dGhpbmcgZXhjZXB0IGdpdmVuIG5vZGUob3Igbm9kZXMpIGFzIGFyaWEtaGlkZGVuXG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEByZXR1cm4ge1VuZG99IHVuZG8gY29tbWFuZFxuICovXG5leHBvcnQgdmFyIGhpZGVPdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpIHtcbiAgICBpZiAobWFya2VyTmFtZSA9PT0gdm9pZCAwKSB7IG1hcmtlck5hbWUgPSAnZGF0YS1hcmlhLWhpZGRlbic7IH1cbiAgICB2YXIgdGFyZ2V0cyA9IEFycmF5LmZyb20oQXJyYXkuaXNBcnJheShvcmlnaW5hbFRhcmdldCkgPyBvcmlnaW5hbFRhcmdldCA6IFtvcmlnaW5hbFRhcmdldF0pO1xuICAgIHZhciBhY3RpdmVQYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCBnZXREZWZhdWx0UGFyZW50KG9yaWdpbmFsVGFyZ2V0KTtcbiAgICBpZiAoIWFjdGl2ZVBhcmVudE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH07XG4gICAgfVxuICAgIC8vIHdlIHNob3VsZCBub3QgaGlkZSBhcmlhTGl2ZSBlbGVtZW50cyAtIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvYXJpYS1oaWRkZW4vaXNzdWVzLzEwXG4gICAgdGFyZ2V0cy5wdXNoLmFwcGx5KHRhcmdldHMsIEFycmF5LmZyb20oYWN0aXZlUGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdbYXJpYS1saXZlXScpKSk7XG4gICAgcmV0dXJuIGFwcGx5QXR0cmlidXRlVG9PdGhlcnModGFyZ2V0cywgYWN0aXZlUGFyZW50Tm9kZSwgbWFya2VyTmFtZSwgJ2FyaWEtaGlkZGVuJyk7XG59O1xuLyoqXG4gKiBNYXJrcyBldmVyeXRoaW5nIGV4Y2VwdCBnaXZlbiBub2RlKG9yIG5vZGVzKSBhcyBpbmVydFxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xuZXhwb3J0IHZhciBpbmVydE90aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSkge1xuICAgIGlmIChtYXJrZXJOYW1lID09PSB2b2lkIDApIHsgbWFya2VyTmFtZSA9ICdkYXRhLWluZXJ0LWVkJzsgfVxuICAgIHZhciBhY3RpdmVQYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCBnZXREZWZhdWx0UGFyZW50KG9yaWdpbmFsVGFyZ2V0KTtcbiAgICBpZiAoIWFjdGl2ZVBhcmVudE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH07XG4gICAgfVxuICAgIHJldHVybiBhcHBseUF0dHJpYnV0ZVRvT3RoZXJzKG9yaWdpbmFsVGFyZ2V0LCBhY3RpdmVQYXJlbnROb2RlLCBtYXJrZXJOYW1lLCAnaW5lcnQnKTtcbn07XG4vKipcbiAqIEByZXR1cm5zIGlmIGN1cnJlbnQgYnJvd3NlciBzdXBwb3J0cyBpbmVydFxuICovXG5leHBvcnQgdmFyIHN1cHBvcnRzSW5lcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgSFRNTEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCdpbmVydCcpO1xufTtcbi8qKlxuICogQXV0b21hdGljIGZ1bmN0aW9uIHRvIFwic3VwcHJlc3NcIiBET00gZWxlbWVudHMgLSBfaGlkZV8gb3IgX2luZXJ0XyBpbiB0aGUgYmVzdCBwb3NzaWJsZSB3YXlcbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbmV4cG9ydCB2YXIgc3VwcHJlc3NPdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpIHtcbiAgICBpZiAobWFya2VyTmFtZSA9PT0gdm9pZCAwKSB7IG1hcmtlck5hbWUgPSAnZGF0YS1zdXBwcmVzc2VkJzsgfVxuICAgIHJldHVybiAoc3VwcG9ydHNJbmVydCgpID8gaW5lcnRPdGhlcnMgOiBoaWRlT3RoZXJzKShvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSk7XG59O1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlU2luZ2xldG9uIH0gZnJvbSAncmVhY3Qtc3R5bGUtc2luZ2xldG9uJztcbmltcG9ydCB7IGZvY3VzSGlkZGVuTWFya2VyIH0gZnJvbSAnLi9tZWRpdW0nO1xudmFyIFN0eWxlID0gc3R5bGVTaW5nbGV0b24oKTtcbnZhciBzdHlsZXMgPSBcIlxcbiBbXCIgKyBmb2N1c0hpZGRlbk1hcmtlciArIFwiXSB7XFxuICAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcXG4gfVxcblwiO1xuZXhwb3J0IHZhciBJbnRlcmFjdGl2aXR5RGlzYWJsZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlLCB7IHN0eWxlczogc3R5bGVzIH0pOyB9O1xuIiwgImltcG9ydCB7IGV4cG9ydFNpZGVjYXIgfSBmcm9tICd1c2Utc2lkZWNhcic7XG5pbXBvcnQgJ3JlYWN0LWZvY3VzLWxvY2svc2lkZWNhcic7XG5pbXBvcnQgJ3JlYWN0LXJlbW92ZS1zY3JvbGwvc2lkZWNhcic7XG5pbXBvcnQgeyBFZmZlY3QgfSBmcm9tICcuL0VmZmVjdCc7XG5pbXBvcnQgeyBlZmZlY3RDYXIgfSBmcm9tICcuL21lZGl1bSc7XG5leHBvcnQgZGVmYXVsdCBleHBvcnRTaWRlY2FyKGVmZmVjdENhciwgRWZmZWN0KTtcbiIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiYW5jaG9yUG9zaXRpb25cIiwgXCJidXR0b25cIiwgXCJpbnNlcnRcIiwgXCJpc09wZW5cIiwgXCJvd25Gb2N1c1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY2xvc2VQb3BvdmVyXCIsIFwicGFuZWxDbGFzc05hbWVcIiwgXCJwYW5lbFBhZGRpbmdTaXplXCIsIFwicGFuZWxQcm9wc1wiLCBcInBhbmVsUmVmXCIsIFwicGFuZWxTdHlsZVwiLCBcInBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0XCIsIFwicG9wb3ZlclJlZlwiLCBcImhhc0Fycm93XCIsIFwiYXJyb3dDaGlsZHJlblwiLCBcInJlcG9zaXRpb25PblNjcm9sbFwiLCBcInJlcG9zaXRpb25Ub0Nyb3NzQXhpc1wiLCBcImhhc0RyYWdEcm9wXCIsIFwiekluZGV4XCIsIFwiYXR0YWNoVG9BbmNob3JcIiwgXCJkaXNwbGF5XCIsIFwib2Zmc2V0XCIsIFwib25Qb3NpdGlvbkNoYW5nZVwiLCBcImJ1ZmZlclwiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJjb250YWluZXJcIiwgXCJmb2N1c1RyYXBQcm9wc1wiLCBcImluaXRpYWxGb2N1c1wiLCBcInRhYkluZGV4XCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBmb2N1c2FibGUgfSBmcm9tICd0YWJiYWJsZSc7XG5pbXBvcnQgeyBFdWlGb2N1c1RyYXAgfSBmcm9tICcuLi9mb2N1c190cmFwJztcbmltcG9ydCB7IGtleXMsIGdldFRyYW5zaXRpb25UaW1pbmdzLCBnZXRXYWl0RHVyYXRpb24sIHBlcmZvcm1PbkZyYW1lLCBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBzZXRNdWx0aXBsZVJlZnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ob29rcy91c2VDb21iaW5lZFJlZnMnO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpUG9ydGFsIH0gZnJvbSAnLi4vcG9ydGFsJztcbmltcG9ydCB7IEV1aU11dGF0aW9uT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlci9tdXRhdGlvbl9vYnNlcnZlcic7XG5pbXBvcnQgeyBmaW5kUG9wb3ZlclBvc2l0aW9uLCBnZXRFbGVtZW50WkluZGV4IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciB9IGZyb20gJy4uL291dHNpZGVfY2xpY2tfZGV0ZWN0b3InO1xuaW1wb3J0IHsgRXVpUG9wb3ZlckFycm93IH0gZnJvbSAnLi9wb3BvdmVyX2Fycm93JztcbmltcG9ydCB7IGV1aVBvcG92ZXJTdHlsZXMgfSBmcm9tICcuL3BvcG92ZXIuc3R5bGVzJztcbmltcG9ydCB7IEV1aVBvcG92ZXJQYW5lbCB9IGZyb20gJy4vcG9wb3Zlcl9wYW5lbCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBwb3BvdmVyQW5jaG9yUG9zaXRpb24gPSBbJ3VwQ2VudGVyJywgJ3VwTGVmdCcsICd1cFJpZ2h0JywgJ2Rvd25DZW50ZXInLCAnZG93bkxlZnQnLCAnZG93blJpZ2h0JywgJ2xlZnRDZW50ZXInLCAnbGVmdFVwJywgJ2xlZnREb3duJywgJ3JpZ2h0Q2VudGVyJywgJ3JpZ2h0VXAnLCAncmlnaHREb3duJ107XG52YXIgYW5jaG9yUG9zaXRpb25Ub1BvcG92ZXJQb3NpdGlvbk1hcCA9IHtcbiAgdXA6ICd0b3AnLFxuICByaWdodDogJ3JpZ2h0JyxcbiAgZG93bjogJ2JvdHRvbScsXG4gIGxlZnQ6ICdsZWZ0J1xufTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3BvdmVyUG9zaXRpb25Gcm9tQW5jaG9yUG9zaXRpb24oYW5jaG9yUG9zaXRpb24pIHtcbiAgLy8gbWFwcyB0aGUgYW5jaG9yIHBvc2l0aW9uIHRvIHRoZSBtYXRjaGluZyBwb3BvdmVyIHBvc2l0aW9uXG4gIC8vIGUuZy4gXCJ1cExlZnRcIiAtPiBcInRvcFwiLCBcImRvd25SaWdodFwiIC0+IFwiYm90dG9tXCJcblxuICAvLyBleHRyYWN0IHRoZSBmaXJzdCBwb3NpdGlvbmFsIHdvcmQgZnJvbSBhbmNob3JQb3NpdGlvbjpcbiAgLy8gc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcgKFwiIF4gXCIpIG9mIGFuY2hvclBvc2l0aW9uIGFuZFxuICAvLyBjYXB0dXJlcyBhbGwgb2YgdGhlIGNoYXJhY3RlcnMgKFwiICguKj8pIFwiKSB1bnRpbCB0aGVcbiAgLy8gZmlyc3QgY2FwaXRhbCBsZXR0ZXIgKFwiIFtBLVpdIFwiKSBpcyBlbmNvdW50ZXJlZFxuICB2YXIgX3JlZiA9IGFuY2hvclBvc2l0aW9uLm1hdGNoKC9eKC4qPylbQS1aXS8pLFxuICAgIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgcHJpbWFyeVBvc2l0aW9uID0gX3JlZjJbMV07XG4gIHJldHVybiBhbmNob3JQb3NpdGlvblRvUG9wb3ZlclBvc2l0aW9uTWFwW3ByaW1hcnlQb3NpdGlvbl07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlckFsaWduRnJvbUFuY2hvclBvc2l0aW9uKGFuY2hvclBvc2l0aW9uKSB7XG4gIC8vIG1hcHMgdGhlIGdyYXZpdHkgdG8gdGhlIG1hdGNoaW5nIHBvcG92ZXIgcG9zaXRpb25cbiAgLy8gZS5nLiBcInVwTGVmdFwiIC0+IFwibGVmdFwiLCBcInJpZ2h0RG93blwiIC0+IFwiYm90dG9tXCJcblxuICAvLyBleHRyYWN0IHRoZSBzZWNvbmQgcG9zaXRpb25hbCB3b3JkIGZyb20gYW5jaG9yUG9zaXRpb246XG4gIC8vIHN0YXJ0cyBhIGNhcHR1cmUgZ3JvdXAgYXQgdGhlIGZpcnN0IGNhcGl0YWwgbGV0dGVyXG4gIC8vIGFuZCBpbmNsdWRlcyBldmVyeXRoaW5nIGFmdGVyIGl0XG4gIHZhciBfcmVmMyA9IGFuY2hvclBvc2l0aW9uLm1hdGNoKC8oW0EtWl0uKikvKSxcbiAgICBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAyKSxcbiAgICBhbGlnbiA9IF9yZWY0WzFdO1xuXG4gIC8vIHRoaXMgcGVyZm9ybXMgdHdvIHRhc2tzOlxuICAvLyAxLiBub3JtYWxpemVzIHRoZSBhbGlnbiBwb3NpdGlvbiBieSBsb3dlcmNhc2luZyBpdFxuICAvLyAyLiBgY2VudGVyYCBkb2Vzbid0IGV4aXN0IGluIHRoZSBsb29rdXAgbWFwIHdoaWNoIGNvbnZlcnRzIGl0IHRvIGB1bmRlZmluZWRgIG1lYW5pbmcgbm8gYWxpZ25cbiAgcmV0dXJuIGFuY2hvclBvc2l0aW9uVG9Qb3BvdmVyUG9zaXRpb25NYXBbYWxpZ24udG9Mb3dlckNhc2UoKV07XG59XG52YXIgREVGQVVMVF9QT1BPVkVSX1NUWUxFUyA9IHtcbiAgdG9wOiA1MCxcbiAgbGVmdDogNTBcbn07XG52YXIgcmV0dXJuRm9jdXNDb25maWcgPSB7XG4gIHByZXZlbnRTY3JvbGw6IHRydWVcbn07XG52YXIgY2xvc2luZ1RyYW5zaXRpb25UaW1lID0gMjUwOyAvLyBUT0RPOiBEUlkgb3V0IHZhciB3aGVuIGNvbnZlcnRpbmcgdG8gQ1NTLWluLUpTXG5cbmV4cG9ydCB2YXIgRXVpUG9wb3ZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlQb3BvdmVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlQb3BvdmVyKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpUG9wb3ZlciwgW3Byb3BzXSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlc3Bvc2l0aW9uVGltZW91dFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzdHJhbmRlZEZvY3VzVGltZW91dFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjbG9zaW5nVHJhbnNpdGlvblRpbWVvdXRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2xvc2luZ1RyYW5zaXRpb25BbmltYXRpb25GcmFtZVwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJidXR0b25cIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInBhbmVsXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJkZXNjcmlwdGlvbklkXCIsIGh0bWxJZEdlbmVyYXRvcigpKCkpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjbG9zZVBvcG92ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLmlzT3Blbikge1xuICAgICAgICBfdGhpcy5wcm9wcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25Fc2NhcGVLZXlcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBfdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgX3RoaXMuaGFuZGxlU3RyYW5kZWRGb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJoYW5kbGVTdHJhbmRlZEZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnN0cmFuZGVkRm9jdXNUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBJZiBgcmV0dXJuRm9jdXNgIGZhaWxlZCBhbmQgZm9jdXMgd2FzIHN0cmFuZGVkLFxuICAgICAgICAvLyBhdHRlbXB0IHRvIG1hbnVhbGx5IHJlc3RvcmUgZm9jdXMgdG8gdGhlIHRvZ2dsZSBidXR0b24uXG4gICAgICAgIC8vIFRoZSBzdHJhbmRlZCBmb2N1cyBpcyBlaXRoZXIgaW4gbW9zdCBjYXNlcyBvbiBib2R5IGJ1dFxuICAgICAgICAvLyBpdCB3aWxsIGJlIG9uIHRoZSBwYW5lbCBpbnN0ZWFkIG9uIG1vdW50IHdoZW4gaXNPcGVuPXRydWVcbiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gX3RoaXMucGFuZWwpIHtcbiAgICAgICAgICBpZiAoIV90aGlzLmJ1dHRvbikgcmV0dXJuO1xuICAgICAgICAgIHZhciBmb2N1c2FibGVJdGVtcyA9IGZvY3VzYWJsZShfdGhpcy5idXR0b24pO1xuICAgICAgICAgIGlmICghZm9jdXNhYmxlSXRlbXMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgdmFyIHRvZ2dsZUJ1dHRvbiA9IGZvY3VzYWJsZUl0ZW1zWzBdO1xuICAgICAgICAgIHRvZ2dsZUJ1dHRvbi5mb2N1cyhyZXR1cm5Gb2N1c0NvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgIH0sIGNsb3NpbmdUcmFuc2l0aW9uVGltZSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuRVNDQVBFKSB7XG4gICAgICAgIF90aGlzLm9uRXNjYXBlS2V5KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25DbGlja091dHNpZGVcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBvbmx5IGNsb3NlIHRoZSBwb3BvdmVyIGlmIHRoZSBldmVudCBzb3VyY2UgaXNuJ3QgdGhlIGFuY2hvciBidXR0b25cbiAgICAgIC8vIG90aGVyd2lzZSwgaXQgaXMgdXAgdG8gdGhlIGFuY2hvciB0byB0b2dnbGUgdGhlIHBvcG92ZXIncyBvcGVuIHN0YXR1c1xuICAgICAgaWYgKF90aGlzLmJ1dHRvbiAmJiBfdGhpcy5idXR0b24uY29udGFpbnMoZXZlbnQudGFyZ2V0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgX3RoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uT3BlblBvcG92ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnN0cmFuZGVkRm9jdXNUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dChfdGhpcy5jbG9zaW5nVHJhbnNpdGlvblRpbWVvdXQpO1xuICAgICAgaWYgKF90aGlzLmNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoX3RoaXMuY2xvc2luZ1RyYW5zaXRpb25BbmltYXRpb25GcmFtZSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGlzIHN0YXRlIGEgYmVhdCBhZnRlciB0aGUgcmVuZGVyIHRha2VzIHBsYWNlLCBzbyB0aGF0IHRoZSBDU1NcbiAgICAgIC8vIHRyYW5zaXRpb24gY2FuIHRha2UgZWZmZWN0LlxuICAgICAgX3RoaXMuY2xvc2luZ1RyYW5zaXRpb25BbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNPcGVuaW5nOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGZvciBlYWNoIGNoaWxkIGVsZW1lbnQgb2YgYHRoaXMucGFuZWxgLCBmaW5kIGFueSB0cmFuc2l0aW9uIGR1cmF0aW9uIHdlIHNob3VsZCB3YWl0IGZvciBiZWZvcmUgc3RhYmlsaXppbmdcbiAgICAgIHZhciBfQXJyYXkkcHJvdG90eXBlJHNsaWMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChfdGhpcy5wYW5lbCA/IFtfdGhpcy5wYW5lbF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShBcnJheS5mcm9tKF90aGlzLnBhbmVsLmNoaWxkcmVuKSkpIDogW10pLnJlZHVjZShmdW5jdGlvbiAoX3JlZjUsIGVsZW1lbnQpIHtcbiAgICAgICAgICB2YXIgZHVyYXRpb25NYXRjaCA9IF9yZWY1LmR1cmF0aW9uTWF0Y2gsXG4gICAgICAgICAgICBkZWxheU1hdGNoID0gX3JlZjUuZGVsYXlNYXRjaDtcbiAgICAgICAgICB2YXIgdHJhbnNpdGlvblRpbWluZ3MgPSBnZXRUcmFuc2l0aW9uVGltaW5ncyhlbGVtZW50KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZHVyYXRpb25NYXRjaDogTWF0aC5tYXgoZHVyYXRpb25NYXRjaCwgdHJhbnNpdGlvblRpbWluZ3MuZHVyYXRpb25NYXRjaCksXG4gICAgICAgICAgICBkZWxheU1hdGNoOiBNYXRoLm1heChkZWxheU1hdGNoLCB0cmFuc2l0aW9uVGltaW5ncy5kZWxheU1hdGNoKVxuICAgICAgICAgIH07XG4gICAgICAgIH0sIHtcbiAgICAgICAgICBkdXJhdGlvbk1hdGNoOiAwLFxuICAgICAgICAgIGRlbGF5TWF0Y2g6IDBcbiAgICAgICAgfSksXG4gICAgICAgIGR1cmF0aW9uTWF0Y2ggPSBfQXJyYXkkcHJvdG90eXBlJHNsaWMuZHVyYXRpb25NYXRjaCxcbiAgICAgICAgZGVsYXlNYXRjaCA9IF9BcnJheSRwcm90b3R5cGUkc2xpYy5kZWxheU1hdGNoO1xuICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnJlc3Bvc2l0aW9uVGltZW91dCk7XG4gICAgICBfdGhpcy5yZXNwb3NpdGlvblRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc09wZW5TdGFibGU6IHRydWVcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgZHVyYXRpb25NYXRjaCArIGRlbGF5TWF0Y2gpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk11dGF0aW9uXCIsIGZ1bmN0aW9uIChyZWNvcmRzKSB7XG4gICAgICB2YXIgd2FpdER1cmF0aW9uID0gZ2V0V2FpdER1cmF0aW9uKHJlY29yZHMpO1xuICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQoKTtcbiAgICAgIHBlcmZvcm1PbkZyYW1lKHdhaXREdXJhdGlvbiwgX3RoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwb3NpdGlvblBvcG92ZXJcIiwgZnVuY3Rpb24gKGFsbG93RW5mb3JjZVBvc2l0aW9uKSB7XG4gICAgICBpZiAoX3RoaXMuYnV0dG9uID09IG51bGwgfHwgX3RoaXMucGFuZWwgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgdmFyIF9yZWY2ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGFuY2hvclBvc2l0aW9uID0gX3JlZjYuYW5jaG9yUG9zaXRpb24sXG4gICAgICAgIF9yZWY2JG9mZnNldCA9IF9yZWY2Lm9mZnNldCxcbiAgICAgICAgb2Zmc2V0ID0gX3JlZjYkb2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX3JlZjYkb2Zmc2V0O1xuICAgICAgdmFyIHBvc2l0aW9uID0gZ2V0UG9wb3ZlclBvc2l0aW9uRnJvbUFuY2hvclBvc2l0aW9uKGFuY2hvclBvc2l0aW9uKTtcbiAgICAgIHZhciBmb3JjZVBvc2l0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGFsbG93RW5mb3JjZVBvc2l0aW9uICYmIF90aGlzLnN0YXRlLmlzT3BlblN0YWJsZSAmJiBfdGhpcy5zdGF0ZS5vcGVuUG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICBwb3NpdGlvbiA9IF90aGlzLnN0YXRlLm9wZW5Qb3NpdGlvbjtcbiAgICAgICAgZm9yY2VQb3NpdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgICB2YXIgX2ZpbmRQb3BvdmVyUG9zaXRpb24gPSBmaW5kUG9wb3ZlclBvc2l0aW9uKHtcbiAgICAgICAgICBjb250YWluZXI6IF90aGlzLnByb3BzLmNvbnRhaW5lcixcbiAgICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgICAgICAgZm9yY2VQb3NpdGlvbjogZm9yY2VQb3NpdGlvbixcbiAgICAgICAgICBhbGlnbjogZ2V0UG9wb3ZlckFsaWduRnJvbUFuY2hvclBvc2l0aW9uKGFuY2hvclBvc2l0aW9uKSxcbiAgICAgICAgICBhbmNob3I6IF90aGlzLmJ1dHRvbixcbiAgICAgICAgICBwb3BvdmVyOiBfdGhpcy5wYW5lbCxcbiAgICAgICAgICBvZmZzZXQ6IF90aGlzLnByb3BzLmF0dGFjaFRvQW5jaG9yID8gb2Zmc2V0IDogX3RoaXMucHJvcHMuaGFzQXJyb3cgPyAxNiArIG9mZnNldCA6IDggKyBvZmZzZXQsXG4gICAgICAgICAgYXJyb3dDb25maWc6IF90aGlzLnByb3BzLmhhc0Fycm93ID8ge1xuICAgICAgICAgICAgYXJyb3dXaWR0aDogMjQsXG4gICAgICAgICAgICBhcnJvd0J1ZmZlcjogMTBcbiAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgYXJyb3dXaWR0aDogMCxcbiAgICAgICAgICAgIGFycm93QnVmZmVyOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXR1cm5Cb3VuZGluZ0JveDogX3RoaXMucHJvcHMuYXR0YWNoVG9BbmNob3IsXG4gICAgICAgICAgYWxsb3dDcm9zc0F4aXM6IF90aGlzLnByb3BzLnJlcG9zaXRpb25Ub0Nyb3NzQXhpcyxcbiAgICAgICAgICBidWZmZXI6IF90aGlzLnByb3BzLmJ1ZmZlclxuICAgICAgICB9KSxcbiAgICAgICAgdG9wID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24udG9wLFxuICAgICAgICBsZWZ0ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24ubGVmdCxcbiAgICAgICAgZm91bmRQb3NpdGlvbiA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLnBvc2l0aW9uLFxuICAgICAgICBhcnJvdyA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLmFycm93O1xuXG4gICAgICAvLyB0aGUgcG9wb3ZlcidzIHotaW5kZXggbXVzdCBpbmhlcml0IGZyb20gdGhlIGJ1dHRvblxuICAgICAgLy8gdGhpcyBrZWVwcyBhIGJ1dHRvbidzIHBvcG92ZXIgdW5kZXIgYSBmbHlvdXQgdGhhdCB3b3VsZCBjb3ZlciB0aGUgYnV0dG9uXG4gICAgICAvLyBidXQgYSBwb3BvdmVyIHRyaWdnZXJlZCBpbnNpZGUgYSBmbHlvdXQgd2lsbCBhcHBlYXIgb3ZlciB0aGF0IGZseW91dFxuICAgICAgdmFyIHpJbmRleFByb3AgPSBfdGhpcy5wcm9wcy56SW5kZXg7XG4gICAgICB2YXIgekluZGV4ID0gekluZGV4UHJvcCA9PSBudWxsID8gZ2V0RWxlbWVudFpJbmRleChfdGhpcy5idXR0b24sIF90aGlzLnBhbmVsKSArIDIwMDAgOiB6SW5kZXhQcm9wO1xuICAgICAgdmFyIHBvcG92ZXJTdHlsZXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIF90aGlzLnByb3BzLnBhbmVsU3R5bGUpLCB7fSwge1xuICAgICAgICB0b3A6IHRvcCxcbiAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgekluZGV4OiB6SW5kZXhcbiAgICAgIH0pO1xuICAgICAgdmFyIHdpbGxSZW5kZXJBcnJvdyA9ICFfdGhpcy5wcm9wcy5hdHRhY2hUb0FuY2hvciAmJiBfdGhpcy5wcm9wcy5oYXNBcnJvdztcbiAgICAgIHZhciBhcnJvd1N0eWxlcyA9IHdpbGxSZW5kZXJBcnJvdyA/IGFycm93IDogdW5kZWZpbmVkO1xuICAgICAgdmFyIGFycm93UG9zaXRpb24gPSBmb3VuZFBvc2l0aW9uO1xuICAgICAgX3RoaXMucHJvcHMub25Qb3NpdGlvbkNoYW5nZSAmJiBfdGhpcy5wcm9wcy5vblBvc2l0aW9uQ2hhbmdlKGFycm93UG9zaXRpb24pO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwb3BvdmVyU3R5bGVzOiBwb3BvdmVyU3R5bGVzLFxuICAgICAgICBhcnJvd1N0eWxlczogYXJyb3dTdHlsZXMsXG4gICAgICAgIGFycm93UG9zaXRpb246IGFycm93UG9zaXRpb24sXG4gICAgICAgIG9wZW5Qb3NpdGlvbjogZm91bmRQb3NpdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInBvc2l0aW9uUG9wb3ZlckZpeGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3Zlcih0cnVlKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicG9zaXRpb25Qb3BvdmVyRmx1aWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyKGZhbHNlKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicGFuZWxSZWZcIiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIF90aGlzLnBhbmVsID0gbm9kZTtcbiAgICAgIF90aGlzLnByb3BzLnBhbmVsUmVmICYmIF90aGlzLnByb3BzLnBhbmVsUmVmKG5vZGUpO1xuICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAvLyBwYW5lbCBoYXMgdW5tb3VudGVkLCByZXN0b3JlIHRoZSBzdGF0ZSBkZWZhdWx0c1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgcG9wb3ZlclN0eWxlczogREVGQVVMVF9QT1BPVkVSX1NUWUxFUyxcbiAgICAgICAgICBhcnJvd1N0eWxlczoge30sXG4gICAgICAgICAgYXJyb3dQb3NpdGlvbjogbnVsbCxcbiAgICAgICAgICBvcGVuUG9zaXRpb246IG51bGwsXG4gICAgICAgICAgaXNPcGVuU3RhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZsdWlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHBhbmVsIGlzIGNvbWluZyBpbnRvIGV4aXN0ZW5jZVxuICAgICAgICBfdGhpcy5wb3NpdGlvblBvcG92ZXJGbHVpZCgpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgX3RoaXMucG9zaXRpb25Qb3BvdmVyRmx1aWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwb3BvdmVyUmVmXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5idXR0b24gPSBub2RlO1xuICAgICAgc2V0TXVsdGlwbGVSZWZzKFtfdGhpcy5wcm9wcy5wb3BvdmVyUmVmXSwgbm9kZSk7XG4gICAgfSk7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBwcmV2UHJvcHM6IHtcbiAgICAgICAgaXNPcGVuOiBwcm9wcy5pc09wZW5cbiAgICAgIH0sXG4gICAgICBzdXBwcmVzc2luZ1BvcG92ZXI6IHByb3BzLmlzT3BlbixcbiAgICAgIC8vIG9ubHkgc3VwcHJlc3MgaWYgY3JlYXRlZCB3aXRoIGlzT3Blbj10cnVlXG4gICAgICBpc0Nsb3Npbmc6IGZhbHNlLFxuICAgICAgaXNPcGVuaW5nOiBmYWxzZSxcbiAgICAgIHBvcG92ZXJTdHlsZXM6IERFRkFVTFRfUE9QT1ZFUl9TVFlMRVMsXG4gICAgICBhcnJvd1N0eWxlczoge30sXG4gICAgICBhcnJvd1Bvc2l0aW9uOiBudWxsLFxuICAgICAgb3BlblBvc2l0aW9uOiBudWxsLFxuICAgICAgLy8gb25jZSBhIHN0YWJsZSBwb3NpdGlvbiBoYXMgYmVlbiBmb3VuZCwga2VlcCB0aGUgY29udGVudHMgb24gdGhhdCBzaWRlXG4gICAgICBpc09wZW5TdGFibGU6IGZhbHNlIC8vIHdhaXQgZm9yIGFueSBpbml0aWFsIG9wZW5pbmcgdHJhbnNpdGlvbnMgdG8gZmluaXNoIGJlZm9yZSBtYXJraW5nIGFzIHN0YWJsZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlQb3BvdmVyLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlQb3BvdmVyLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgaWYgKHRoaXMuc3RhdGUuc3VwcHJlc3NpbmdQb3BvdmVyKSB7XG4gICAgICAgIC8vIGNvbXBvbmVudCB3YXMgY3JlYXRlZCB3aXRoIGlzT3Blbj10cnVlOyBub3cgdGhhdCBpdCdzIG1vdW50ZWRcbiAgICAgICAgLy8gc3RvcCBzdXBwcmVzc2luZyBhbmQgc3RhcnQgb3BlbmluZ1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzdXBwcmVzc2luZ1BvcG92ZXI6IGZhbHNlLFxuICAgICAgICAgIGlzT3BlbmluZzogdHJ1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLm9uT3BlblBvcG92ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICAvLyBUaGUgcG9wb3ZlciBpcyBiZWluZyBvcGVuZWQuXG4gICAgICBpZiAoIXByZXZQcm9wcy5pc09wZW4gJiYgdGhpcy5wcm9wcy5pc09wZW4pIHtcbiAgICAgICAgdGhpcy5vbk9wZW5Qb3BvdmVyKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGVuc3VyZSByZWNhbGN1bGF0aW9uIG9mIHBhbmVsIHBvc2l0aW9uIG9uIHByb3AgdXBkYXRlc1xuICAgICAgaWYgKHRoaXMucHJvcHMuaXNPcGVuICYmIChwcmV2UHJvcHMuYW5jaG9yUG9zaXRpb24gIT09IHRoaXMucHJvcHMuYW5jaG9yUG9zaXRpb24gfHwgcHJldlByb3BzLmJ1ZmZlciAhPT0gdGhpcy5wcm9wcy5idWZmZXIgfHwgcHJldlByb3BzLm9mZnNldCAhPT0gdGhpcy5wcm9wcy5vZmZzZXQgfHwgcHJldlByb3BzLnBhbmVsUGFkZGluZ1NpemUgIT09IHRoaXMucHJvcHMucGFuZWxQYWRkaW5nU2l6ZSkpIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvblBvcG92ZXJGbHVpZCgpO1xuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgc2Nyb2xsIGxpc3RlbmVyXG4gICAgICBpZiAocHJldlByb3BzLnJlcG9zaXRpb25PblNjcm9sbCAhPT0gdGhpcy5wcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgcG9wb3ZlciBpcyBiZWluZyBjbG9zZWQuXG4gICAgICBpZiAocHJldlByb3BzLmlzT3BlbiAmJiAhdGhpcy5wcm9wcy5pc09wZW4pIHtcbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgaGFzIGp1c3QgY2xvc2VkIHRoZSBwb3BvdmVyLCBxdWV1ZSB1cCB0aGUgcmVtb3ZhbCBvZiB0aGUgY29udGVudCBhZnRlciB0aGVcbiAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBjb21wbGV0ZS5cbiAgICAgICAgdGhpcy5jbG9zaW5nVHJhbnNpdGlvblRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGlzQ2xvc2luZzogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2xvc2luZ1RyYW5zaXRpb25UaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCwgdHJ1ZSk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNwb3NpdGlvblRpbWVvdXQpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RyYW5kZWRGb2N1c1RpbWVvdXQpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2luZ1RyYW5zaXRpb25UaW1lb3V0KTtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuY2xvc2luZ1RyYW5zaXRpb25BbmltYXRpb25GcmFtZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3BhbmVsUHJvcHMkdGFiSW5kZXgsXG4gICAgICAgIF90aGlzNCA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBhbmNob3JQb3NpdGlvbiA9IF90aGlzJHByb3BzLmFuY2hvclBvc2l0aW9uLFxuICAgICAgICBidXR0b24gPSBfdGhpcyRwcm9wcy5idXR0b24sXG4gICAgICAgIGluc2VydCA9IF90aGlzJHByb3BzLmluc2VydCxcbiAgICAgICAgaXNPcGVuID0gX3RoaXMkcHJvcHMuaXNPcGVuLFxuICAgICAgICBvd25Gb2N1cyA9IF90aGlzJHByb3BzLm93bkZvY3VzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIGNsb3NlUG9wb3ZlciA9IF90aGlzJHByb3BzLmNsb3NlUG9wb3ZlcixcbiAgICAgICAgcGFuZWxDbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5wYW5lbENsYXNzTmFtZSxcbiAgICAgICAgcGFuZWxQYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzLnBhbmVsUGFkZGluZ1NpemUsXG4gICAgICAgIHBhbmVsUHJvcHMgPSBfdGhpcyRwcm9wcy5wYW5lbFByb3BzLFxuICAgICAgICBwYW5lbFJlZiA9IF90aGlzJHByb3BzLnBhbmVsUmVmLFxuICAgICAgICBwYW5lbFN0eWxlID0gX3RoaXMkcHJvcHMucGFuZWxTdHlsZSxcbiAgICAgICAgcG9wb3ZlclNjcmVlblJlYWRlclRleHQgPSBfdGhpcyRwcm9wcy5wb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCxcbiAgICAgICAgcG9wb3ZlclJlZiA9IF90aGlzJHByb3BzLnBvcG92ZXJSZWYsXG4gICAgICAgIGhhc0Fycm93ID0gX3RoaXMkcHJvcHMuaGFzQXJyb3csXG4gICAgICAgIGFycm93Q2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5hcnJvd0NoaWxkcmVuLFxuICAgICAgICByZXBvc2l0aW9uT25TY3JvbGwgPSBfdGhpcyRwcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwsXG4gICAgICAgIHJlcG9zaXRpb25Ub0Nyb3NzQXhpcyA9IF90aGlzJHByb3BzLnJlcG9zaXRpb25Ub0Nyb3NzQXhpcyxcbiAgICAgICAgaGFzRHJhZ0Ryb3AgPSBfdGhpcyRwcm9wcy5oYXNEcmFnRHJvcCxcbiAgICAgICAgekluZGV4ID0gX3RoaXMkcHJvcHMuekluZGV4LFxuICAgICAgICBhdHRhY2hUb0FuY2hvciA9IF90aGlzJHByb3BzLmF0dGFjaFRvQW5jaG9yLFxuICAgICAgICBkaXNwbGF5ID0gX3RoaXMkcHJvcHMuZGlzcGxheSxcbiAgICAgICAgb2Zmc2V0ID0gX3RoaXMkcHJvcHMub2Zmc2V0LFxuICAgICAgICBvblBvc2l0aW9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25Qb3NpdGlvbkNoYW5nZSxcbiAgICAgICAgYnVmZmVyID0gX3RoaXMkcHJvcHMuYnVmZmVyLFxuICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbCddLFxuICAgICAgICBhcmlhTGFiZWxsZWRCeSA9IF90aGlzJHByb3BzWydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgICAgY29udGFpbmVyID0gX3RoaXMkcHJvcHMuY29udGFpbmVyLFxuICAgICAgICBmb2N1c1RyYXBQcm9wcyA9IF90aGlzJHByb3BzLmZvY3VzVHJhcFByb3BzLFxuICAgICAgICBpbml0aWFsRm9jdXNQcm9wID0gX3RoaXMkcHJvcHMuaW5pdGlhbEZvY3VzLFxuICAgICAgICBfdGFiSW5kZXhQcm9wID0gX3RoaXMkcHJvcHMudGFiSW5kZXgsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgdGFiSW5kZXhQcm9wID0gKF9wYW5lbFByb3BzJHRhYkluZGV4ID0gcGFuZWxQcm9wcyA9PT0gbnVsbCB8fCBwYW5lbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYW5lbFByb3BzLnRhYkluZGV4KSAhPT0gbnVsbCAmJiBfcGFuZWxQcm9wcyR0YWJJbmRleCAhPT0gdm9pZCAwID8gX3BhbmVsUHJvcHMkdGFiSW5kZXggOiBfdGFiSW5kZXhQcm9wO1xuICAgICAgdmFyIHN0eWxlcyA9IGV1aVBvcG92ZXJTdHlsZXMoKTtcbiAgICAgIHZhciBwb3BvdmVyU3R5bGVzID0gW3N0eWxlcy5ldWlQb3BvdmVyLCB7XG4gICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXG4gICAgICAgIGxhYmVsOiBkaXNwbGF5XG4gICAgICB9XTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUG9wb3ZlcicsIHtcbiAgICAgICAgJ2V1aVBvcG92ZXItaXNPcGVuJzogdGhpcy5zdGF0ZS5pc09wZW5pbmdcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgc2hvd0Fycm93ID0gaGFzQXJyb3cgJiYgIWF0dGFjaFRvQW5jaG9yO1xuICAgICAgdmFyIHBhbmVsO1xuICAgICAgaWYgKCF0aGlzLnN0YXRlLnN1cHByZXNzaW5nUG9wb3ZlciAmJiAoaXNPcGVuIHx8IHRoaXMuc3RhdGUuaXNDbG9zaW5nKSkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSB0YWJJbmRleFByb3A7XG4gICAgICAgIHZhciBpbml0aWFsRm9jdXMgPSBpbml0aWFsRm9jdXNQcm9wO1xuICAgICAgICB2YXIgYXJpYURlc2NyaWJlZGJ5O1xuICAgICAgICB2YXIgYXJpYUxpdmU7XG4gICAgICAgIHZhciBwYW5lbEFyaWFNb2RhbCA9IHBhbmVsUHJvcHMgIT09IG51bGwgJiYgcGFuZWxQcm9wcyAhPT0gdm9pZCAwICYmIHBhbmVsUHJvcHMuaGFzT3duUHJvcGVydHkoJ2FyaWEtbW9kYWwnKSA/IHBhbmVsUHJvcHNbJ2FyaWEtbW9kYWwnXSA6ICd0cnVlJztcbiAgICAgICAgdmFyIHBhbmVsUm9sZSA9IHBhbmVsUHJvcHMgIT09IG51bGwgJiYgcGFuZWxQcm9wcyAhPT0gdm9pZCAwICYmIHBhbmVsUHJvcHMuaGFzT3duUHJvcGVydHkoJ3JvbGUnKSA/IHBhbmVsUHJvcHMucm9sZSA6ICdkaWFsb2cnO1xuICAgICAgICBpZiAob3duRm9jdXMgfHwgcGFuZWxBcmlhTW9kYWwgIT09ICd0cnVlJykge1xuICAgICAgICAgIHRhYkluZGV4ID0gdGFiSW5kZXhQcm9wICE9PSBudWxsICYmIHRhYkluZGV4UHJvcCAhPT0gdm9pZCAwID8gdGFiSW5kZXhQcm9wIDogMDtcbiAgICAgICAgICBhcmlhTGl2ZSA9ICdvZmYnO1xuICAgICAgICAgIGlmICghaW5pdGlhbEZvY3VzKSB7XG4gICAgICAgICAgICBpbml0aWFsRm9jdXMgPSBmdW5jdGlvbiBpbml0aWFsRm9jdXMoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczQucGFuZWw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcmlhTGl2ZSA9ICdhc3NlcnRpdmUnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmb2N1c1RyYXBTY3JlZW5SZWFkZXJUZXh0O1xuICAgICAgICBpZiAob3duRm9jdXMgfHwgcG9wb3ZlclNjcmVlblJlYWRlclRleHQpIHtcbiAgICAgICAgICBhcmlhRGVzY3JpYmVkYnkgPSB0aGlzLmRlc2NyaXB0aW9uSWQ7XG4gICAgICAgICAgZm9jdXNUcmFwU2NyZWVuUmVhZGVyVGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgaWQ6IHRoaXMuZGVzY3JpcHRpb25JZFxuICAgICAgICAgIH0sIG93bkZvY3VzICYmIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpUG9wb3Zlci5zY3JlZW5SZWFkZXJBbm5vdW5jZW1lbnRcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiWW91IGFyZSBpbiBhIGRpYWxvZy4gUHJlc3MgRXNjYXBlLCBvciB0YXAvY2xpY2sgb3V0c2lkZSB0aGUgZGlhbG9nIHRvIGNsb3NlLlwiXG4gICAgICAgICAgfSksIHBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0KSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJldHVybkZvY3VzID0gdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgPyByZXR1cm5Gb2N1c0NvbmZpZyA6IGZhbHNlO1xuICAgICAgICBwYW5lbCA9IF9fX0Vtb3Rpb25KU1goRXVpUG9ydGFsLCBpbnNlcnQgJiYge1xuICAgICAgICAgIGluc2VydDogaW5zZXJ0XG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpRm9jdXNUcmFwLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IHRydWUsXG4gICAgICAgICAgb25DbGlja091dHNpZGU6IHRoaXMub25DbGlja091dHNpZGUsXG4gICAgICAgICAgcmV0dXJuRm9jdXM6IHJldHVybkZvY3VzIC8vIElnbm9yZSB0ZW1wb3Jhcnkgc3RhdGUgb2YgaW5kZWNpc2l2ZSBmb2N1c1xuICAgICAgICAgICxcbiAgICAgICAgICBpbml0aWFsRm9jdXM6IGluaXRpYWxGb2N1cyxcbiAgICAgICAgICBvbkVzY2FwZUtleTogdGhpcy5vbkVzY2FwZUtleSxcbiAgICAgICAgICBkaXNhYmxlZDogIW93bkZvY3VzIHx8ICF0aGlzLnN0YXRlLmlzT3BlblN0YWJsZSB8fCB0aGlzLnN0YXRlLmlzQ2xvc2luZ1xuICAgICAgICB9LCBmb2N1c1RyYXBQcm9wcyksIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlclBhbmVsLCBfZXh0ZW5kcyh7fSwgcGFuZWxQcm9wcywge1xuICAgICAgICAgIHBhbmVsUmVmOiB0aGlzLnBhbmVsUmVmLFxuICAgICAgICAgIGlzT3BlbjogdGhpcy5zdGF0ZS5pc09wZW5pbmcsXG4gICAgICAgICAgcG9zaXRpb246IHRoaXMuc3RhdGUuYXJyb3dQb3NpdGlvbixcbiAgICAgICAgICBpc0F0dGFjaGVkOiBhdHRhY2hUb0FuY2hvcixcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMocGFuZWxDbGFzc05hbWUsIHBhbmVsUHJvcHMgPT09IG51bGwgfHwgcGFuZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFuZWxQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgICAgIGhhc0RyYWdEcm9wOiBoYXNEcmFnRHJvcCxcbiAgICAgICAgICBoYXNTaGFkb3c6IGZhbHNlLFxuICAgICAgICAgIHBhZGRpbmdTaXplOiBwYW5lbFBhZGRpbmdTaXplLFxuICAgICAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgICAgICBcImFyaWEtbGl2ZVwiOiBhcmlhTGl2ZSxcbiAgICAgICAgICByb2xlOiBwYW5lbFJvbGUsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcmlhTGFiZWxsZWRCeSxcbiAgICAgICAgICBcImFyaWEtbW9kYWxcIjogcGFuZWxBcmlhTW9kYWwsXG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgICAgICBzdHlsZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0aGlzLnN0YXRlLnBvcG92ZXJTdHlsZXMpLCB7fSwge1xuICAgICAgICAgICAgLy8gQWRkaW5nIGB3aWxsLWNoYW5nZWAgdG8gcmVkdWNlIHJpc2sgb2YgYSBibHVycnkgYW5pbWF0aW9uIGluIENocm9tZSA4NitcbiAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICF0aGlzLnN0YXRlLmlzT3BlblN0YWJsZSA/ICd0cmFuc2Zvcm0sIG9wYWNpdHknIDogdW5kZWZpbmVkXG4gICAgICAgICAgfSlcbiAgICAgICAgfSksIHNob3dBcnJvdyAmJiB0aGlzLnN0YXRlLmFycm93UG9zaXRpb24gJiYgX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyQXJyb3csIHtcbiAgICAgICAgICBwb3NpdGlvbjogdGhpcy5zdGF0ZS5hcnJvd1Bvc2l0aW9uLFxuICAgICAgICAgIHN0eWxlOiB0aGlzLnN0YXRlLmFycm93U3R5bGVzXG4gICAgICAgIH0sIGFycm93Q2hpbGRyZW4pLCBmb2N1c1RyYXBTY3JlZW5SZWFkZXJUZXh0LCBfX19FbW90aW9uSlNYKEV1aU11dGF0aW9uT2JzZXJ2ZXIsIHtcbiAgICAgICAgICBvYnNlcnZlck9wdGlvbnM6IHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgICAgICAvLyBlbGVtZW50IGF0dHJpYnV0ZSBjaGFuZ2VzXG4gICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgICAgICAvLyBhZGRlZC9yZW1vdmVkIGVsZW1lbnRzXG4gICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgICAgICAgLy8gdGV4dCBjaGFuZ2VzXG4gICAgICAgICAgICBzdWJ0cmVlOiB0cnVlIC8vIHdhdGNoIGFsbCBjaGlsZCBlbGVtZW50c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25NdXRhdGlvbjogdGhpcy5vbk11dGF0aW9uXG4gICAgICAgIH0sIGZ1bmN0aW9uIChtdXRhdGlvblJlZikge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIHJlZjogbXV0YXRpb25SZWZcbiAgICAgICAgICB9LCBjaGlsZHJlbik7XG4gICAgICAgIH0pKSkpO1xuICAgICAgfVxuXG4gICAgICAvLyByZWFjdC1mb2N1cy1vbiBhbmQgcmVsYXRlZCBkbyBub3QgcmVnaXN0ZXIgb3V0c2lkZSBjbGljayBkZXRlY3Rpb25cbiAgICAgIC8vIHdoZW4gZGlzYWJsZWQsIHNvIHdlIHN0aWxsIG5lZWQgdG8gY29uZGl0aW9uYWxseSBjaGVjayBmb3IgdGhhdCBvdXJzZWx2ZXNcbiAgICAgIGlmIChvd25Gb2N1cykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY3NzOiBwb3BvdmVyU3R5bGVzLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICByZWY6IHRoaXMucG9wb3ZlclJlZlxuICAgICAgICB9LCByZXN0KSwgYnV0dG9uIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBudWxsIDogYnV0dG9uLCBwYW5lbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvciwge1xuICAgICAgICAgIG9uT3V0c2lkZUNsaWNrOiB0aGlzLmNsb3NlUG9wb3ZlclxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjc3M6IHBvcG92ZXJTdHlsZXMsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHJlZjogdGhpcy5wb3BvdmVyUmVmLFxuICAgICAgICAgIG9uS2V5RG93bjogdGhpcy5vbktleURvd25cbiAgICAgICAgfSwgcmVzdCksIGJ1dHRvbiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gbnVsbCA6IGJ1dHRvbiwgcGFuZWwpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLnByZXZQcm9wcy5pc09wZW4gJiYgIW5leHRQcm9wcy5pc09wZW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcmV2UHJvcHM6IHtcbiAgICAgICAgICAgIGlzT3BlbjogbmV4dFByb3BzLmlzT3BlblxuICAgICAgICAgIH0sXG4gICAgICAgICAgaXNDbG9zaW5nOiB0cnVlLFxuICAgICAgICAgIGlzT3BlbmluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmV2U3RhdGUucHJldlByb3BzLmlzT3BlbiAhPT0gbmV4dFByb3BzLmlzT3Blbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByZXZQcm9wczoge1xuICAgICAgICAgICAgaXNPcGVuOiBuZXh0UHJvcHMuaXNPcGVuXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpUG9wb3ZlciwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBpc09wZW46IGZhbHNlLFxuICBvd25Gb2N1czogdHJ1ZSxcbiAgcmVwb3NpdGlvblRvQ3Jvc3NBeGlzOiB0cnVlLFxuICBhbmNob3JQb3NpdGlvbjogJ2Rvd25DZW50ZXInLFxuICBwYW5lbFBhZGRpbmdTaXplOiAnbScsXG4gIGhhc0Fycm93OiB0cnVlLFxuICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ1xufSk7XG5FdWlQb3BvdmVyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogQWxpZ25tZW50IG9mIHRoZSBwb3BvdmVyIGFuZCBhcnJvdyByZWxhdGl2ZSB0byB0aGUgYnV0dG9uXG4gICAgICovXG4gIGFuY2hvclBvc2l0aW9uOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBTdHlsZSBhbmQgcG9zaXRpb24gYWx0ZXJhdGlvbiBmb3IgYXJyb3ctbGVzcyBhdHRhY2htZW50LlxuICAgICAqIEludGVuZGVkIGZvciB1c2Ugd2l0aCBpbnB1dHMgYXMgYW5jaG9ycywgZS5nLiBFdWlJbnB1dFBvcG92ZXJcbiAgICAgKi9cbiAgYXR0YWNoVG9BbmNob3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBUcmlnZ2VyaW5nIGVsZW1lbnQgZm9yIHdoaWNoIHRvIGFsaWduIHRoZSBwb3BvdmVyIHRvXG4gICAgICovXG4gIGJ1dHRvbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBoYW5kbGUgaGlkaW5nIG9mIHRoZSBwb3BvdmVyXG4gICAgICovXG4gIGNsb3NlUG9wb3ZlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogUmVzdHJpY3QgdGhlIHBvcG92ZXIncyBwb3NpdGlvbiB3aXRoaW4gdGhpcyBlbGVtZW50XG4gICAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQ1NTIGRpc3BsYXkgdHlwZSBmb3IgYm90aCB0aGUgcG9wb3ZlciBhbmQgYW5jaG9yXG4gICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gRXVpRm9jdXNUcmFwXG4gICAgICovXG4gIGZvY3VzVHJhcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBTaG93IGFycm93IGluZGljYXRpbmcgdG8gb3JpZ2luYXRpbmcgYnV0dG9uXG4gICAgICovXG4gIGhhc0Fycm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoYXQgZWxlbWVudCBzaG91bGQgaW5pdGlhbGx5IGhhdmUgZm9jdXM7IENhbiBiZSBhIERPTVxuICAgICAqIG5vZGUsIG9yIGEgc2VsZWN0b3Igc3RyaW5nICh3aGljaCB3aWxsIGJlIHBhc3NlZCB0b1xuICAgICAqIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoKSB0byBmaW5kIHRoZSBET00gbm9kZSksIG9yIGEgZnVuY3Rpb24gdGhhdFxuICAgICAqIHJldHVybnMgYSBET00gbm9kZS5cbiAgICAgKlxuICAgICAqIElmIG5vdCBwYXNzZWQsIGluaXRpYWwgZm9jdXMgZGVmYXVsdHMgdG8gdGhlIHBvcG92ZXIgcGFuZWwuXG4gICAgICovXG4gIGluaXRpYWxGb2N1czogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogUGFzc2VkIGRpcmVjdGx5IHRvIEV1aVBvcnRhbCBmb3IgRE9NIHBvc2l0aW9uaW5nLiBCb3RoIHByb3BlcnRpZXMgYXJlXG4gICAgICogcmVxdWlyZWQgaWYgcHJvcCBpcyBzcGVjaWZpZWRcbiAgICAgKi9cbiAgaW5zZXJ0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHNpYmxpbmc6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcImJlZm9yZVwiLCBcImFmdGVyXCJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICAgKiBWaXNpYmlsaXR5IHN0YXRlIG9mIHRoZSBwb3BvdmVyXG4gICAgICovXG4gIGlzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFRyYXBzIHRhYiBmb2N1cyB3aXRoaW4gdGhlIHBvcG92ZXIgY29udGVudHNcbiAgICAgKi9cbiAgb3duRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBDdXN0b20gY2xhc3MgYWRkZWQgdG8gdGhlIEV1aVBhbmVsIGNvbnRhaW5pbmcgdGhlIHBvcG92ZXIgY29udGVudHNcbiAgICAgKi9cbiAgcGFuZWxDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIEV1aVBhbmVsIHBhZGRpbmcgb24gYWxsIHNpZGVzXG4gICAgICovXG4gIHBhbmVsUGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFN0YW5kYXJkIERPTSBgc3R5bGVgIGF0dHJpYnV0ZS4gUGFzc2VkIHRvIHRoZSBFdWlQYW5lbFxuICAgICAqL1xuICBwYW5lbFN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIEV1aVBhbmVsLiBTZWUgI0V1aVBvcG92ZXJQYW5lbFByb3BzXG4gICAgICovXG4gIHBhbmVsUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImRpdlwiXSksXG4gICAgLyoqXG4gICAgICAgKiBQYWRkaW5nIGZvciBhbGwgZm91ciBzaWRlc1xuICAgICAgICovXG4gICAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBDb3JuZXIgYm9yZGVyIHJhZGl1c1xuICAgICAgICovXG4gICAgYm9yZGVyUmFkaXVzOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogV2hlbiB0cnVlIHRoZSBwYW5lbCB3aWxsIGdyb3cgaW4gaGVpZ2h0IHRvIG1hdGNoIGBFdWlGbGV4SXRlbWBcbiAgICAgICAqL1xuICAgIGdyb3c6IFByb3BUeXBlcy5ib29sLFxuICAgIHBhbmVsUmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICBwYW5lbFJlZjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogT3B0aW9uYWwgc2NyZWVuIHJlYWRlciBpbnN0cnVjdGlvbnMgdG8gYW5ub3VuY2UgdXBvbiBwb3BvdmVyIG9wZW4sXG4gICAgICogaW4gYWRkaXRpb24gdG8gRVVJJ3MgZGVmYXVsdCBwb3BvdmVyIGluc3RydWN0aW9ucyBmb3IgRXNjYXBlIG9uIGNsb3NlLlxuICAgICAqIFVzZWZ1bCBmb3IgcG9wb3ZlcnMgdGhhdCBtYXkgaGF2ZSBhZGRpdGlvbmFsIGtleWJvYXJkIGNhcGFiaWxpdGllcyBzdWNoIGFzXG4gICAgICogYXJyb3cgbmF2aWdhdGlvbi5cbiAgICAgKi9cbiAgcG9wb3ZlclNjcmVlblJlYWRlclRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZF0pLFxuICBwb3BvdmVyUmVmOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCwgdGhlIHBvcG92ZXIncyBwb3NpdGlvbiBpcyByZS1jYWxjdWxhdGVkIHdoZW4gdGhlIHVzZXJcbiAgICAgKiBzY3JvbGxzLCB0aGlzIHN1cHBvcnRzIGhhdmluZyBmaXhlZC1wb3NpdGlvbiBwb3BvdmVyIGFuY2hvcnMuIFdoZW4gbmVzdGluZ1xuICAgICAqIGFuIGBFdWlQb3BvdmVyYCBpbiBhIHNjcm9sbGFibGUgY29udGFpbmVyLCBgcmVwb3NpdGlvbk9uU2Nyb2xsYCBzaG91bGQgYmUgYHRydWVgXG4gICAgICovXG4gIHJlcG9zaXRpb25PblNjcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHBvcG92ZXJzIHdpbGwgYXR0ZW1wdCB0byBwb3NpdGlvbiB0aGVtc2VsdmVzIGFsb25nIHRoZSBpbml0aWFsXG4gICAgICogYXhpcyBzcGVjaWZpZWQuIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSBlaXRoZXIgdmVydGljYWxseSBvciBob3Jpem9udGFsbHlcbiAgICAgKiBob3dldmVyLCB0aGUgcG9wb3ZlciB3aWxsIGF0dGVtcHQgdG8gcmVwb3NpdGlvbiBpdHNlbGYgYWxvbmcgdGhlIHNlY29uZGFyeVxuICAgICAqIGNyb3NzIGF4aXMgaWYgdGhlcmUgaXMgcm9vbSB0aGVyZSBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogSWYgeW91IGRvIG5vdCBub3Qgd2FudCB0aGlzIHJlcG9zaXRpb25pbmcgdG8gb2NjdXIgKGFuZCBpdCBpcyBhY2NlcHRhYmxlIGZvclxuICAgICAqIHRoZSBwb3BvdmVyIHRvIGFwcGVhciBvZmZzY3JlZW4pLCBzZXQgdGhpcyB0byBmYWxzZSB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3IuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gIHJlcG9zaXRpb25Ub0Nyb3NzQXhpczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE11c3QgYmUgc2V0IHRvIHRydWUgaWYgdXNpbmcgYEV1aURyYWdEcm9wQ29udGV4dGAgd2l0aGluIGEgcG9wb3ZlcixcbiAgICAgKiBvdGhlcndpc2UgeW91ciBuZXN0ZWQgZHJhZyAmIGRyb3Agd2lsbCBoYXZlIGluY29ycmVjdCBwb3NpdGlvbmluZ1xuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQgLSB1c2UgYHVzZVBvcnRhbGAgcHJvcCBvbiBjaGlsZHJlbiBgRXVpRHJhZ2dhYmxlYCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgICovXG4gIGhhc0RyYWdEcm9wOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgcG9wb3ZlciBjb250ZW50IGluaGVyaXRzIHRoZSB6LWluZGV4IG9mIHRoZSBhbmNob3JcbiAgICAgKiBjb21wb25lbnQ7IHBhc3MgYHpJbmRleGAgdG8gb3ZlcnJpZGVcbiAgICAgKi9cbiAgekluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICAgKiBEaXN0YW5jZSBhd2F5IGZyb20gdGhlIGFuY2hvciB0aGF0IHRoZSBwb3BvdmVyIHdpbGwgcmVuZGVyXG4gICAgICovXG4gIG9mZnNldDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICogTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYm91bmRpbmcgY29udGFpbmVyO1xuICAgICAqIFBhc3MgYW4gYXJyYXkgb2YgNCB2YWx1ZXMgdG8gYWRqdXN0IGVhY2ggc2lkZSBkaWZmZXJlbnRseTogYFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdYFxuICAgICAqIEBkZWZhdWx0IDE2XG4gICAgICovXG4gIGJ1ZmZlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogRWxlbWVudCB0byBwYXNzIGFzIHRoZSBjaGlsZCBlbGVtZW50IG9mIHRoZSBhcnJvdztcbiAgICAgKiBVc2UgY2FzZSBpcyB0eXBpY2FsbHkgbGltaXRlZCB0byBhbiBhY2NvbXBhbnlpbmcgYEV1aUJlYWNvbmBcbiAgICAgKi9cbiAgYXJyb3dDaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIFByb3ZpZGUgYSBuYW1lIHRvIHRoZSBwb3BvdmVyIHBhbmVsXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBBbHRlcm5hdGl2ZSBvcHRpb24gdG8gYGFyaWEtbGFiZWxgIHRoYXQgdGFrZXMgYW4gYGlkYC5cbiAgICAgKiBVc3VhbGx5IHRha2VzIHRoZSBgaWRgIG9mIHRoZSBwb3BvdmVyIHRpdGxlXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIEZ1bmN0aW9uIGNhbGxiYWNrIGZvciB3aGVuIHRoZSBwb3BvdmVyIHBvc2l0b24gY2hhbmdlc1xuICAgICAqL1xuICBvblBvc2l0aW9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlcic7XG5leHBvcnQgdmFyIEV1aU11dGF0aW9uT2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9FdWlPYnNlcnZlcikge1xuICBmdW5jdGlvbiBFdWlNdXRhdGlvbk9ic2VydmVyKCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpTXV0YXRpb25PYnNlcnZlcik7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpTXV0YXRpb25PYnNlcnZlciwgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibmFtZVwiLCAnRXVpTXV0YXRpb25PYnNlcnZlcicpO1xuICAgIC8vIHRoZSBgb25NdXRhdGlvbmAgcHJvcCBtYXkgY2hhbmdlIHdoaWxlIHRoZSBvYnNlcnZlciBpcyBib3VuZCwgYWJzdHJhY3RpbmdcbiAgICAvLyBpdCBvdXQgaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uIG1lYW5zIHRoZSBjdXJyZW50IGBvbk11dGF0aW9uYCB2YWx1ZSBpcyB1c2VkXG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uTXV0YXRpb25cIiwgZnVuY3Rpb24gKHJlY29yZHMsIG9ic2VydmVyKSB7XG4gICAgICBfdGhpcy5wcm9wcy5vbk11dGF0aW9uKHJlY29yZHMsIG9ic2VydmVyKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYmVnaW5PYnNlcnZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjaGlsZE5vZGUgPSBfdGhpcy5jaGlsZE5vZGU7XG4gICAgICBfdGhpcy5vYnNlcnZlciA9IG1ha2VNdXRhdGlvbk9ic2VydmVyKGNoaWxkTm9kZSwgX3RoaXMucHJvcHMub2JzZXJ2ZXJPcHRpb25zLCBfdGhpcy5vbk11dGF0aW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aU11dGF0aW9uT2JzZXJ2ZXIsIF9FdWlPYnNlcnZlcik7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpTXV0YXRpb25PYnNlcnZlcik7XG59KEV1aU9ic2VydmVyKTtcbnZhciBtYWtlTXV0YXRpb25PYnNlcnZlciA9IGZ1bmN0aW9uIG1ha2VNdXRhdGlvbk9ic2VydmVyKG5vZGUsIF9vYnNlcnZlck9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIC8vIFRoZSBNdXRhdGlvbk9ic2VydmVyIHBvbHlmaWxsIHVzZWQgaW4gS2liYW5hIChmb3IgSmVzdCkgaW1wbGVtZW50c1xuICAvLyBhbiBvbGRlciBzcGVjIGluIHdoaWNoIHNwZWNpZnlpbmcgYGF0dHJpYnV0ZU9sZFZhbHVlYCBvciBgYXR0cmlidXRlRmlsdGVyYFxuICAvLyB3aXRob3V0IHNwZWNpZnlpbmcgYGF0dHJpYnV0ZXNgIHJlc3VsdHMgaW4gYSBgU3ludGF4RXJyb3JgLlxuICAvLyBUaGUgZm9sbG93aW5nIGxvZ2ljIHBhdGNoZXMgdGhlIG5ld2VyIHNwZWMgaW4gd2hpY2ggYGF0dHJpYnV0ZXM6IHRydWVgIGNhbiBiZVxuICAvLyBpbXBsaWVkIHdoZW4gYXBwcm9wcmlhdGUgKGBhdHRyaWJ1dGVPbGRWYWx1ZWAgb3IgYGF0dHJpYnV0ZUZpbHRlcmAgaXMgc3BlY2lmaWVkKS5cbiAgdmFyIG9ic2VydmVyT3B0aW9ucyA9IF9vYmplY3RTcHJlYWQoe30sIF9vYnNlcnZlck9wdGlvbnMpO1xuICB2YXIgbmVlZHNBdHRyaWJ1dGVzID0gb2JzZXJ2ZXJPcHRpb25zLmhhc093blByb3BlcnR5KCdhdHRyaWJ1dGVPbGRWYWx1ZScpIHx8IG9ic2VydmVyT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRlRmlsdGVyJyk7XG4gIGlmIChuZWVkc0F0dHJpYnV0ZXMgJiYgIW9ic2VydmVyT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRlcycpKSB7XG4gICAgb2JzZXJ2ZXJPcHRpb25zLmF0dHJpYnV0ZXMgPSB0cnVlO1xuICB9XG4gIHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCBvYnNlcnZlck9wdGlvbnMpO1xuICByZXR1cm4gb2JzZXJ2ZXI7XG59O1xuZXhwb3J0IHZhciB1c2VNdXRhdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcihjb250YWluZXIsIGNhbGxiYWNrLCBvYnNlcnZlck9wdGlvbnMpIHtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IG1ha2VNdXRhdGlvbk9ic2VydmVyKGNvbnRhaW5lciwgb2JzZXJ2ZXJPcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sXG4gIC8vIGlnbm9yZSBjaGFuZ2luZyBvYnNlcnZlck9wdGlvbnNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIFtjb250YWluZXIsIGNhbGxiYWNrXSk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmV4cG9ydCB2YXIgRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aU91dHNpZGVDbGlja0RldGVjdG9yKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IsIFtwcm9wc10pO1xuXG4gICAgLy8gdGhlIGlkIGlzIHVzZWQgdG8gaWRlbnRpZnkgd2hpY2ggRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3JcbiAgICAvLyBpcyB0aGUgc291cmNlIG9mIGEgY2xpY2sgZXZlbnQ7IGFzIHRoZSBjbGljayBldmVudCBidWJibGVzXG4gICAgLy8gdXAgYW5kIHJlYWNoZXMgdGhlIGNsaWNrIGRldGVjdG9yJ3MgY2hpbGQgY29tcG9uZW50IHRoZVxuICAgIC8vIGlkIHZhbHVlIGlzIHN0YW1wZWQgb24gdGhlIGV2ZW50LiBUaGlzIGlkIGlzIGluc3BlY3RlZFxuICAgIC8vIGluIHRoZSBkb2N1bWVudCdzIGNsaWNrIGhhbmRsZXIsIGFuZCBpZiB0aGUgaWQgZG9lc24ndFxuICAgIC8vIGV4aXN0IG9yIGRvZXNuJ3QgbWF0Y2ggdGhpcyBkZXRlY3RvcidzIGlkLCB0aGVuIHRyaWdnZXJcbiAgICAvLyB0aGUgb3V0c2lkZUNsaWNrIGNhbGxiYWNrLlxuICAgIC8vXG4gICAgLy8gVGFraW5nIHRoaXMgYXBwcm9hY2ggaW5zdGVhZCBvZiBjaGVja2luZyBpZiB0aGUgZXZlbnQnc1xuICAgIC8vIHRhcmdldCBlbGVtZW50IGV4aXN0cyBpbiB0aGlzIGNvbXBvbmVudCdzIERPTSBzdWItdHJlZSBpc1xuICAgIC8vIG5lY2Vzc2FyeSBmb3IgaGFuZGxpbmcgY2xpY2tzIG9yaWdpbmF0aW5nIGZyb20gY2hpbGRyZW5cbiAgICAvLyByZW5kZXJlZCB0aHJvdWdoIFJlYWN0J3MgcG9ydGFscyAoRXVpUG9ydGFsKS4gVGhlIGlkIHRyYWNraW5nXG4gICAgLy8gd29ya3MgYmVjYXVzZSBSZWFjdCBndWFyYW50ZWVzIHRoZSBldmVudCBidWJibGVzIHRocm91Z2ggdGhlXG4gICAgLy8gdmlydHVhbCBET00gYW5kIGV4ZWN1dGVzIEV1aUNsaWNrRGV0ZWN0b3IncyBvbkNsaWNrIGhhbmRsZXIsXG4gICAgLy8gc3RhbXBpbmcgdGhlIGlkIGV2ZW4gdGhvdWdoIHRoZSBldmVudCBvcmlnaW5hdGVzIG91dHNpZGVcbiAgICAvLyB0aGlzIGNvbXBvbmVudCdzIHJlaWZpZWQgRE9NIHRyZWUuXG4gICAgLy8gV2UgYXJlIHdvcmtpbmcgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IGEgY2xpY2sgZXZlbnQgaXNcbiAgICAvLyBlcXVpdmFsZW50IHRvIGEgc2VxdWVudGlhbCwgY29tcG91bmQgcHJlc3MgYW5kIHJlbGVhc2Ugb2ZcbiAgICAvLyB0aGUgcG9pbnRpbmcgZGV2aWNlIChtb3VzZSwgZmluZ2VyLCBzdHlsdXMsIGV0Yy4pLlxuICAgIC8vIEEgY2xpY2sgZXZlbnQncyB0YXJnZXQgY2FuIGJlIGltcHJlY2lzZSwgYXMgdGhlIHZhbHVlIHdpbGwgYmVcbiAgICAvLyB0aGUgY2xvc2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHByZXNzIChtb3VzZWRvd24sIHRvdWNoc3RhcnQpXG4gICAgLy8gYW5kIHJlbGVhc2UgKG1vdXNldXAsIHRvdWNoZW5kKSBldmVudHMgKG9mdGVuIDxib2R5IC8+KSBpZlxuICAgIC8vIHRoZSB0aGUgdGFyZ2V0IG9mIGVhY2ggZXZlbnQgZGlmZmVycy5cbiAgICAvLyBXZSBuZWVkIHRoZSBhY3R1YWwgZXZlbnQgdGFyZ2V0cyB0byBtYWtlIHRoZSBjb3JyZWN0IGRlY2lzaW9uc1xuICAgIC8vIGFib3V0IHVzZXIgaW50ZW50aW9uLiBTbywgY29uc2lkZXIgdGhlIGRvd24vc3RhcnQgYW5kIHVwL2VuZFxuICAgIC8vIGl0ZW1zIGJlbG93IGFzIHRoZSBkZWNvbnN0cnVjdGlvbiBvZiBhIGNsaWNrIGV2ZW50LlxuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpZFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjYXB0dXJlZERvd25JZHNcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25DbGlja091dHNpZGVcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgICAgb25PdXRzaWRlQ2xpY2sgPSBfdGhpcyRwcm9wcy5vbk91dHNpZGVDbGljaztcbiAgICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IFtdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgZXZlbnQgPSBlO1xuICAgICAgaWYgKGV2ZW50LmV1aUdlbmVyYXRlZEJ5ICYmIGV2ZW50LmV1aUdlbmVyYXRlZEJ5LmluY2x1ZGVzKF90aGlzLmlkKSB8fCBfdGhpcy5jYXB0dXJlZERvd25JZHMuaW5jbHVkZXMoX3RoaXMuaWQpKSB7XG4gICAgICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IFtdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBbXTtcbiAgICAgIHJldHVybiBvbk91dHNpZGVDbGljayhldmVudCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQ2hpbGRDbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQsIGNiKSB7XG4gICAgICAvLyB0byBzdXBwb3J0IG5lc3RlZCBjbGljayBkZXRlY3RvcnMsIGJ1aWxkIGFuIGFycmF5XG4gICAgICAvLyBvZiBkZXRlY3RvciBpZHMgdGhhdCBoYXZlIGJlZW4gZW5jb3VudGVyZWQ7XG4gICAgICBpZiAoZXZlbnQubmF0aXZlRXZlbnQuaGFzT3duUHJvcGVydHkoJ2V1aUdlbmVyYXRlZEJ5JykpIHtcbiAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuZXVpR2VuZXJhdGVkQnkucHVzaChfdGhpcy5pZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5uYXRpdmVFdmVudC5ldWlHZW5lcmF0ZWRCeSA9IFtfdGhpcy5pZF07XG4gICAgICB9XG4gICAgICBpZiAoY2IpIGNiKGV2ZW50KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25DaGlsZE1vdXNlRG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLm9uQ2hpbGRDbGljayhldmVudCwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIG5hdGl2ZUV2ZW50ID0gZS5uYXRpdmVFdmVudDtcbiAgICAgICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gbmF0aXZlRXZlbnQuZXVpR2VuZXJhdGVkQnk7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vbk1vdXNlRG93bikgX3RoaXMucHJvcHMub25Nb3VzZURvd24oZSk7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vblRvdWNoU3RhcnQpIF90aGlzLnByb3BzLm9uVG91Y2hTdGFydChlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkNoaWxkTW91c2VVcFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLm9uQ2hpbGRDbGljayhldmVudCwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uTW91c2VVcCkgX3RoaXMucHJvcHMub25Nb3VzZVVwKGUpO1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Ub3VjaEVuZCkgX3RoaXMucHJvcHMub25Ub3VjaEVuZChlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF90aGlzLmlkID0gaHRtbElkR2VuZXJhdG9yKCkoKTtcbiAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBbXTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aU91dHNpZGVDbGlja0RldGVjdG9yLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkNsaWNrT3V0c2lkZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25DbGlja091dHNpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uQ2xpY2tPdXRzaWRlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vbkNsaWNrT3V0c2lkZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRoaXMucHJvcHMuY2hpbGRyZW4ucHJvcHMpLCB7XG4gICAgICAgIG9uTW91c2VEb3duOiB0aGlzLm9uQ2hpbGRNb3VzZURvd24sXG4gICAgICAgIG9uVG91Y2hTdGFydDogdGhpcy5vbkNoaWxkTW91c2VEb3duLFxuICAgICAgICBvbk1vdXNlVXA6IHRoaXMub25DaGlsZE1vdXNlVXAsXG4gICAgICAgIG9uVG91Y2hFbmQ6IHRoaXMub25DaGlsZE1vdXNlVXBcbiAgICAgIH0pO1xuICAgICAgdmFyIGNoaWxkID0gQ2hpbGRyZW4ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGNoaWxkLCBwcm9wcyk7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5FdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICBvbk91dHNpZGVDbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uTW91c2VEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Nb3VzZVVwOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Ub3VjaFN0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Ub3VjaEVuZDogUHJvcFR5cGVzLmZ1bmNcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcInBvc2l0aW9uXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgZXVpUG9wb3ZlckFycm93U3R5bGVzIH0gZnJvbSAnLi9fcG9wb3Zlcl9hcnJvdy5zdHlsZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBQT1NJVElPTlMgPSBbJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0JywgJ2JvdHRvbSddO1xuZXhwb3J0IHZhciBFdWlQb3BvdmVyQXJyb3cgPSBmdW5jdGlvbiBFdWlQb3BvdmVyQXJyb3coX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlQb3BvdmVyQXJyb3dTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlQb3BvdmVyQXJyb3csIHN0eWxlc1twb3NpdGlvbl1dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBcImV1aVBvcG92ZXJfX2Fycm93XCIsXG4gICAgXCJkYXRhLXBvcG92ZXItYXJyb3dcIjogcG9zaXRpb24sXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlQb3BvdmVyQXJyb3cucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgcG9zaXRpb246IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbHMsIGxvZ2ljYWxTaXplQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBwb3BvdmVyQXJyb3dTaXplID0gJ20nO1xuZXhwb3J0IHZhciBldWlQb3BvdmVyQXJyb3dTdHlsZXMgPSBmdW5jdGlvbiBldWlQb3BvdmVyQXJyb3dTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIGJvcmRlckNvbG9yID0gJ3ZhcigtLWV1aVBvcG92ZXJCYWNrZ3JvdW5kQ29sb3IpJztcbiAgdmFyIGFycm93U2l6ZSA9IGV1aVRoZW1lLnNpemVbcG9wb3ZlckFycm93U2l6ZV07XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBvcG92ZXJBcnJvdzogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsU2l6ZUNTUygwLCAwKSwgXCImOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbFNpemVDU1MoMCwgMCksIFwiO307bGFiZWw6ZXVpUG9wb3ZlckFycm93O1wiKSxcbiAgICAvLyBQT1NJVElPTlNcbiAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoXCImOjpiZWZvcmV7XCIsIGxvZ2ljYWxzLmJvdHRvbSwgXCI6LVwiLCBhcnJvd1NpemUsIFwiO1wiLCBsb2dpY2Fsc1snYm9yZGVyLWxlZnQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItcmlnaHQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItdG9wJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIFwiLCBib3JkZXJDb2xvciwgXCI7fTtsYWJlbDp0b3A7XCIpLFxuICAgIGJvdHRvbTogLyojX19QVVJFX18qL2NzcyhcIiY6OmJlZm9yZXtcIiwgbG9naWNhbHMudG9wLCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItbGVmdCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1yaWdodCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1ib3R0b20nXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgXCIsIGJvcmRlckNvbG9yLCBcIjt9O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcIiY6OmJlZm9yZXtcIiwgbG9naWNhbHMudG9wLCBcIjo1MCU7XCIsIGxvZ2ljYWxzLnJpZ2h0LCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItdG9wJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLWJvdHRvbSddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1sZWZ0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIFwiLCBib3JkZXJDb2xvciwgXCI7fTtsYWJlbDpsZWZ0O1wiKSxcbiAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhcIiY6OmJlZm9yZXtcIiwgbG9naWNhbHMudG9wLCBcIjo1MCU7XCIsIGxvZ2ljYWxzLmxlZnQsIFwiOi1cIiwgYXJyb3dTaXplLCBcIjtcIiwgbG9naWNhbHNbJ2JvcmRlci10b3AnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItYm90dG9tJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLXJpZ2h0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIFwiLCBib3JkZXJDb2xvciwgXCI7fTtsYWJlbDpyaWdodDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aVBvcG92ZXJTdHlsZXMgPSBmdW5jdGlvbiBldWlQb3BvdmVyU3R5bGVzKCkge1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2UgYW5jaG9yIHdyYXBwZXJcbiAgICBldWlQb3BvdmVyOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZXVpUG9wb3ZlcjtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImlzT3BlblwiLCBcImlzQXR0YWNoZWRcIiwgXCJoYXNEcmFnRHJvcFwiLCBcInBvc2l0aW9uXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlQYW5lbCB9IGZyb20gJy4uLy4uL3BhbmVsL3BhbmVsJztcbmltcG9ydCB7IGV1aVBvcG92ZXJQYW5lbFN0eWxlcyB9IGZyb20gJy4vX3BvcG92ZXJfcGFuZWwuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgREVGQVVMVF9QQU5FTF9QQURESU5HX1NJWkUgPSAnbCc7XG5leHBvcnQgdmFyIEV1aVBvcG92ZXJQYW5lbENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh7XG4gIHBhZGRpbmdTaXplOiBERUZBVUxUX1BBTkVMX1BBRERJTkdfU0laRVxufSk7XG4vKipcbiAqICpJTlRFUk5BTCBPTkxZKlxuICogUHVyZWx5IGZvciByZS11c2Ugb2Ygc3R5bGluZ1xuICovXG5leHBvcnQgdmFyIEV1aVBvcG92ZXJQYW5lbCA9IGZ1bmN0aW9uIEV1aVBvcG92ZXJQYW5lbChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgaXNPcGVuID0gX3JlZi5pc09wZW4sXG4gICAgaXNBdHRhY2hlZCA9IF9yZWYuaXNBdHRhY2hlZCxcbiAgICBoYXNEcmFnRHJvcCA9IF9yZWYuaGFzRHJhZ0Ryb3AsXG4gICAgcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQb3BvdmVyX19wYW5lbCcsIGNsYXNzTmFtZSk7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgY3NzU3R5bGVzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0eWxlcyA9IGV1aVBvcG92ZXJQYW5lbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpO1xuICAgIHZhciBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHNoYXJlZFN0eWxlcyA9IFtzdHlsZXMuZXVpUG9wb3Zlcl9fcGFuZWwsIHN0eWxlc1tjb2xvck1vZGVdLCBpc09wZW4gJiYgc3R5bGVzLmlzT3Blbl07XG4gICAgaWYgKGhhc0RyYWdEcm9wKSB7XG4gICAgICByZXR1cm4gW10uY29uY2F0KHNoYXJlZFN0eWxlcywgW3N0eWxlcy5oYXNEcmFnRHJvcC5oYXNEcmFnRHJvcCwgcG9zaXRpb24gJiYgc3R5bGVzLmhhc0RyYWdEcm9wW3Bvc2l0aW9uXV0pO1xuICAgIH1cbiAgICBpZiAoaXNBdHRhY2hlZCkge1xuICAgICAgcmV0dXJuIFtdLmNvbmNhdChzaGFyZWRTdHlsZXMsIFtzdHlsZXMuaXNBdHRhY2hlZC5pc0F0dGFjaGVkLCBwb3NpdGlvbiAmJiBzdHlsZXMuaXNBdHRhY2hlZFtwb3NpdGlvbl1dKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdLmNvbmNhdChzaGFyZWRTdHlsZXMsIFtzdHlsZXMuaGFzVHJhbnNmb3JtLmhhc1RyYW5zZm9ybSwgaXNPcGVuICYmIHBvc2l0aW9uICYmIHN0eWxlcy5oYXNUcmFuc2Zvcm1bcG9zaXRpb25dXSk7XG4gIH0sIFtldWlUaGVtZUNvbnRleHQsIGlzT3BlbiwgcG9zaXRpb24sIGlzQXR0YWNoZWQsIGhhc0RyYWdEcm9wXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXJQYW5lbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZToge1xuICAgICAgcGFkZGluZ1NpemU6IHJlc3QucGFkZGluZ1NpemUgfHwgREVGQVVMVF9QQU5FTF9QQURESU5HX1NJWkVcbiAgICB9XG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpUGFuZWwsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgXCJkYXRhLXBvcG92ZXItcGFuZWxcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9wb3Zlci1vcGVuXCI6IGlzT3BlbiB8fCB1bmRlZmluZWRcbiAgfSwgcmVzdCksIGNoaWxkcmVuKSk7XG59O1xuRXVpUG9wb3ZlclBhbmVsLnByb3BUeXBlcyA9IHtcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImRpdlwiXSksXG4gIC8qKlxuICAgICAqIFBhZGRpbmcgZm9yIGFsbCBmb3VyIHNpZGVzXG4gICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBDb3JuZXIgYm9yZGVyIHJhZGl1c1xuICAgICAqL1xuICBib3JkZXJSYWRpdXM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSB0aGUgcGFuZWwgd2lsbCBncm93IGluIGhlaWdodCB0byBtYXRjaCBgRXVpRmxleEl0ZW1gXG4gICAgICovXG4gIGdyb3c6IFByb3BUeXBlcy5ib29sLFxuICBwYW5lbFJlZjogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGlzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIGlzQXR0YWNoZWQ6IFByb3BUeXBlcy5ib29sLFxuICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW251bGxdKV0pLFxuICBoYXNEcmFnRHJvcDogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInBhZGRpbmdTaXplXCIsIFwiYm9yZGVyUmFkaXVzXCIsIFwiY29sb3JcIiwgXCJoYXNTaGFkb3dcIiwgXCJoYXNCb3JkZXJcIiwgXCJncm93XCIsIFwicGFuZWxSZWZcIiwgXCJlbGVtZW50XCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUV1aUJhY2tncm91bmRDb2xvckNTUywgdXNlRXVpUGFkZGluZ0NTUywgQkFDS0dST1VORF9DT0xPUlMsIFBBRERJTkdfU0laRVMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZXVpUGFuZWxTdHlsZXMgfSBmcm9tICcuL3BhbmVsLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFBBRERJTkdfU0laRVM7XG5cbi8vIEV4cG9ydGVkIHBhZGRpbmcgc2l6ZXMgYW5kIGNsYXNzIG5hbWVzIG5lY2Vzc2FyeSBmb3IgRXVpUG9wb3ZlciBhbmQgRXVpQ2FyZC5cbi8vIFdoaWNoIGN1cnJlbnRseSB3aWxsIG9ubHkgbWFpbnRhaW4gc3VwcG9ydCBmb3IgdGhlIG9yaWdpbmFsIHZhbHVlcyB1bnRpbCBjb252ZXJzaW9uLlxudmFyIHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXAgPSB7XG4gIG5vbmU6IG51bGwsXG4gIHM6ICdwYWRkaW5nU21hbGwnLFxuICBtOiAncGFkZGluZ01lZGl1bScsXG4gIGw6ICdwYWRkaW5nTGFyZ2UnXG59O1xudmFyIF9TSVpFUyA9IGtleXNPZihwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgQk9SREVSX1JBRElJID0gWydub25lJywgJ20nXTtcbmV4cG9ydCB2YXIgQ09MT1JTID0gQkFDS0dST1VORF9DT0xPUlM7XG5leHBvcnQgdmFyIEV1aVBhbmVsID0gZnVuY3Rpb24gRXVpUGFuZWwoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkcGFkZGluZ1NpemUgPSBfcmVmLnBhZGRpbmdTaXplLFxuICAgIHBhZGRpbmdTaXplID0gX3JlZiRwYWRkaW5nU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRwYWRkaW5nU2l6ZSxcbiAgICBfcmVmJGJvcmRlclJhZGl1cyA9IF9yZWYuYm9yZGVyUmFkaXVzLFxuICAgIGJvcmRlclJhZGl1cyA9IF9yZWYkYm9yZGVyUmFkaXVzID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJGJvcmRlclJhZGl1cyxcbiAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdwbGFpbicgOiBfcmVmJGNvbG9yLFxuICAgIF9yZWYkaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgaGFzU2hhZG93ID0gX3JlZiRoYXNTaGFkb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGhhc1NoYWRvdyxcbiAgICBfcmVmJGhhc0JvcmRlciA9IF9yZWYuaGFzQm9yZGVyLFxuICAgIGhhc0JvcmRlciA9IF9yZWYkaGFzQm9yZGVyID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaGFzQm9yZGVyLFxuICAgIF9yZWYkZ3JvdyA9IF9yZWYuZ3JvdyxcbiAgICBncm93ID0gX3JlZiRncm93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRncm93LFxuICAgIHBhbmVsUmVmID0gX3JlZi5wYW5lbFJlZixcbiAgICBlbGVtZW50ID0gX3JlZi5lbGVtZW50LFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgLy8gU2hhZG93cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gdGhlcmUncyBhIHdoaXRlIGJhY2tncm91bmQgKHBsYWluKVxuICB2YXIgY2FuSGF2ZVNoYWRvdyA9ICFoYXNCb3JkZXIgJiYgY29sb3IgPT09ICdwbGFpbic7XG4gIHZhciBjYW5IYXZlQm9yZGVyID0gY29sb3IgPT09ICdwbGFpbicgfHwgY29sb3IgPT09ICd0cmFuc3BhcmVudCc7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlQYW5lbFN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVBhbmVsLCBncm93ICYmIHN0eWxlcy5ncm93LCBzdHlsZXMucmFkaXVzW2JvcmRlclJhZGl1c10sIHVzZUV1aVBhZGRpbmdDU1MoKVtwYWRkaW5nU2l6ZV0sIHVzZUV1aUJhY2tncm91bmRDb2xvckNTUygpW2NvbG9yXSwgY2FuSGF2ZVNoYWRvdyAmJiBoYXNTaGFkb3cgPT09IHRydWUgJiYgc3R5bGVzLmhhc1NoYWRvdywgY2FuSGF2ZUJvcmRlciAmJiBoYXNCb3JkZXIgPT09IHRydWUgJiYgc3R5bGVzLmhhc0JvcmRlciwgcmVzdC5vbkNsaWNrICYmIHN0eWxlcy5pc0NsaWNrYWJsZV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUGFuZWwnLCBcImV1aVBhbmVsLS1cIi5jb25jYXQoY29sb3IpLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiZXVpUGFuZWwtLVwiLmNvbmNhdChwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwW3BhZGRpbmdTaXplXSksIHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXBbcGFkZGluZ1NpemVdKSwgY2xhc3NOYW1lKTtcbiAgaWYgKHJlc3Qub25DbGljayAmJiBlbGVtZW50ICE9PSAnZGl2Jykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogcGFuZWxSZWYsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBjc3M6IGNzc1N0eWxlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH1cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcGFuZWxSZWYsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpUGFuZWwucHJvcFR5cGVzID0ge1xuICBlbGVtZW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCJdKSwgUHJvcFR5cGVzLm9uZU9mKFtcImRpdlwiXSldKSxcbiAgLyoqXG4gICAgICogQWRkcyBhIG1lZGl1bSBzaGFkb3cgdG8gdGhlIHBhbmVsO1xuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpblwiYFxuICAgICAqL1xuICAvKipcbiAgICAgKiBBZGRzIGEgbWVkaXVtIHNoYWRvdyB0byB0aGUgcGFuZWw7XG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluXCJgXG4gICAgICovXG4gIGhhc1NoYWRvdzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEFkZHMgYSBzbGlnaHQgMXB4IGJvcmRlciBvbiBhbGwgZWRnZXMuXG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluIHwgdHJhbnNwYXJlbnRcImBcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQWRkcyBhIHNsaWdodCAxcHggYm9yZGVyIG9uIGFsbCBlZGdlcy5cbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW4gfCB0cmFuc3BhcmVudFwiYFxuICAgICAqL1xuICBoYXNCb3JkZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBQYWRkaW5nIGZvciBhbGwgZm91ciBzaWRlc1xuICAgICAqL1xuICAvKipcbiAgICAgKiBQYWRkaW5nIGZvciBhbGwgZm91ciBzaWRlc1xuICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQ29ybmVyIGJvcmRlciByYWRpdXNcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQ29ybmVyIGJvcmRlciByYWRpdXNcbiAgICAgKi9cbiAgYm9yZGVyUmFkaXVzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBXaGVuIHRydWUgdGhlIHBhbmVsIHdpbGwgZ3JvdyBpbiBoZWlnaHQgdG8gbWF0Y2ggYEV1aUZsZXhJdGVtYFxuICAgICAqL1xuICAvKipcbiAgICAgKiBXaGVuIHRydWUgdGhlIHBhbmVsIHdpbGwgZ3JvdyBpbiBoZWlnaHQgdG8gbWF0Y2ggYEV1aUZsZXhJdGVtYFxuICAgICAqL1xuICBncm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgcGFuZWxSZWY6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIHBhbmVsO1xuICAgICAqIFVzdWFsbHkgYSBsaWdodGVuZWQgZm9ybSBvZiB0aGUgYnJhbmQgY29sb3JzXG4gICAgICovXG4gIC8qKlxuICAgICAqIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIHBhbmVsO1xuICAgICAqIFVzdWFsbHkgYSBsaWdodGVuZWQgZm9ybSBvZiB0aGUgYnJhbmQgY29sb3JzXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpU2hhZG93IH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgbG9naWNhbENTUywgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjEyMmx3MGUtZ3Jvd1wiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6Z3JvdztcIlxufSA6IHtcbiAgbmFtZTogXCIxMjJsdzBlLWdyb3dcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOmdyb3c7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxa2s3b2RpLWV1aVBhbmVsXCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MDtsYWJlbDpldWlQYW5lbDtcIlxufSA6IHtcbiAgbmFtZTogXCIxa2s3b2RpLWV1aVBhbmVsXCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MDtsYWJlbDpldWlQYW5lbDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlQYW5lbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVBhbmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBhbmVsOiBfcmVmMixcbiAgICBncm93OiBfcmVmLFxuICAgIGhhc1NoYWRvdzogLyojX19QVVJFX18qL2NzcyhldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIjs7bGFiZWw6aGFzU2hhZG93O1wiKSxcbiAgICBoYXNCb3JkZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci50aGluLCBcIjs7bGFiZWw6aGFzQm9yZGVyO1wiKSxcbiAgICByYWRpdXM6IHtcbiAgICAgIG5vbmU6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6bm9uZTtcIiksXG4gICAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwiYm9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiOztsYWJlbDptO1wiKVxuICAgIH0sXG4gICAgLy8gU2V0dXAgaW50ZXJhY3RpdmUgYmVoYXZpb3JcbiAgICBpc0NsaWNrYWJsZTogLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOmJveC1zaGFkb3cgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiLHRyYW5zZm9ybSBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCI7fSY6ZW5hYmxlZHtkaXNwbGF5OmJsb2NrO1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIFwiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiO30mOmhvdmVyLCY6Zm9jdXN7XCIsIGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdsJyksIFwiIHRyYW5zZm9ybTp0cmFuc2xhdGVZKC0ycHgpO2N1cnNvcjpwb2ludGVyO307bGFiZWw6aXNDbGlja2FibGU7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlTaGFkb3csIGV1aVNoYWRvd0ZsYXQsIGV1aVNoYWRvd01lZGl1bSB9IGZyb20gJy4uLy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbmltcG9ydCB7IGdldFNoYWRvd0NvbG9yIH0gZnJvbSAnLi4vLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgdGludCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUNhbkFuaW1hdGUsIGxvZ2ljYWxDU1MsIG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIG9wZW5BbmltYXRpb25UaW1pbmcgPSAnc2xvdyc7XG5cbi8qKlxuICogMS4gQ2FuIGV4cGFuZCBmdXJ0aGVyLCBidXQgaXQgbG9va3Mgd2VpcmQgaWYgaXQncyBzbWFsbGVyIHRoYW4gdGhlIG9yaWdpbmF0aW5nIGJ1dHRvbi5cbiAqIDIuIEFuaW1hdGlvbiBoYXBwZW5zIG9uIHRoZSBwYW5lbC4gQnV0IGRvbid0IGFuaW1hdGUgcG9zaXRpb24gd2hlbiB1c2luZyB0aGUgYXR0YWNoZWQgbW9kZSBsaWtlIGZvciBpbnB1dHNcbiAqIDMuIE1ha2Ugc3VyZSB0aGUgcGFuZWwgc3RheXMgd2l0aGluIHRoZSB3aW5kb3cuXG4gKiA0LiBNYWtlIHRoZSBwb3BvdmVyIGxpZ2h0ZXIgb24gZGFyayBtb2RlICh0b28gaGFyZCB0byBkaXN0aW5ndWlzaCBmcm9tIHBsYWluIGJncyBvdGhlcndpc2UpLCBhbmQgc2V0IGEgQ1NTIHZhciBmb3IgdGhlIGFycm93IHRvIHVzZVxuICovXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJqNXk2eXgtaXNPcGVuXCIsXG4gIHN0eWxlczogXCJvcGFjaXR5OjE7cG9pbnRlci1ldmVudHM6YXV0bztsYWJlbDppc09wZW47XCJcbn0gOiB7XG4gIG5hbWU6IFwiajV5Nnl4LWlzT3BlblwiLFxuICBzdHlsZXM6IFwib3BhY2l0eToxO3BvaW50ZXItZXZlbnRzOmF1dG87bGFiZWw6aXNPcGVuO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVBvcG92ZXJQYW5lbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVBvcG92ZXJQYW5lbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG4gIHZhciB0cmFuc2xhdGVEaXN0YW5jZSA9IGV1aVRoZW1lLnNpemUucztcbiAgdmFyIGFuaW1hdGlvblNwZWVkID0gZXVpVGhlbWUuYW5pbWF0aW9uW29wZW5BbmltYXRpb25UaW1pbmddO1xuICB2YXIgb3BhY2l0eVRyYW5zaXRpb24gPSBcIm9wYWNpdHkgXCIuY29uY2F0KGV1aVRoZW1lLmFuaW1hdGlvbi5ib3VuY2UsIFwiIFwiKS5jb25jYXQoYW5pbWF0aW9uU3BlZWQpO1xuICB2YXIgdHJhbnNmb3JtVHJhbnNpdGlvbiA9IFwidHJhbnNmb3JtIFwiLmNvbmNhdChldWlUaGVtZS5hbmltYXRpb24uYm91bmNlLCBcIiBcIikuY29uY2F0KG1hdGhXaXRoVW5pdHMoYW5pbWF0aW9uU3BlZWQsIGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHggKyAxMDA7XG4gIH0pKTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpUG9wb3Zlcl9fcGFuZWw6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygnbWluLXdpZHRoJywgXCJcIi5jb25jYXQoZXVpVGhlbWUuYmFzZSAqIDcsIFwicHhcIikpLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBcImNhbGMoMTAwdncgLSBcIi5jb25jYXQoZXVpVGhlbWUuc2l6ZS54bCwgXCIpXCIpKSwgXCJiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWV1aVBvcG92ZXJCYWNrZ3JvdW5kQ29sb3IpO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOlwiLCBvcGFjaXR5VHJhbnNpdGlvbiwgXCIsXCIsIHRyYW5zZm9ybVRyYW5zaXRpb24sIFwiO30mOmZvY3Vze291dGxpbmUtb2Zmc2V0OjA7fTtsYWJlbDpldWlQb3BvdmVyX19wYW5lbDtcIiksXG4gICAgaXNPcGVuOiBfcmVmLFxuICAgIC8qIDQgKi9cbiAgICBsaWdodDogLyojX19QVVJFX18qL2NzcyhcIi0tZXVpUG9wb3ZlckJhY2tncm91bmRDb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGUsIFwiOztsYWJlbDpsaWdodDtcIiksXG4gICAgZGFyazogLyojX19QVVJFX18qL2NzcyhcIi0tZXVpUG9wb3ZlckJhY2tncm91bmRDb2xvcjpcIiwgdGludChldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSwgMC4wMjUpLCBcIjs7bGFiZWw6ZGFyaztcIiksXG4gICAgLy8gUmVndWxhciBwb3BvdmVyIHdpdGggYW4gYXJyb3csIGEgdHJhbnNmb3JtIGFuaW1hdGlvbi90cmFuc2l0aW9uLCBhbmQgYVxuICAgIC8vIGRyb3Agc2hhZG93IHZpYSBgZmlsdGVyYCAod2hpY2ggYXV0b21hdGljYWxseSBoYW5kbGVzIHRoZSBhcnJvdylcbiAgICBoYXNUcmFuc2Zvcm06IHtcbiAgICAgIGhhc1RyYW5zZm9ybTogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVZKDApIHRyYW5zbGF0ZVgoMCkgdHJhbnNsYXRlWigwKTtcIiwgZXVpU2hhZG93TWVkaXVtKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBwcm9wZXJ0eTogJ2ZpbHRlcidcbiAgICAgIH0pLCBcIiBcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpcIiwgb3BhY2l0eVRyYW5zaXRpb24sIFwiLFwiLCB0cmFuc2Zvcm1UcmFuc2l0aW9uLCBcIjt9O2xhYmVsOmhhc1RyYW5zZm9ybTtcIiksXG4gICAgICAvLyBQb3NpdGlvbnNcbiAgICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVZKFwiLCB0cmFuc2xhdGVEaXN0YW5jZSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOnRvcDtcIiksXG4gICAgICBib3R0b206IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWSgtXCIsIHRyYW5zbGF0ZURpc3RhbmNlLCBcIikgdHJhbnNsYXRlWigwKTs7bGFiZWw6Ym90dG9tO1wiKSxcbiAgICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWChcIiwgdHJhbnNsYXRlRGlzdGFuY2UsIFwiKSB0cmFuc2xhdGVaKDApOztsYWJlbDpsZWZ0O1wiKSxcbiAgICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVgoLVwiLCB0cmFuc2xhdGVEaXN0YW5jZSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOnJpZ2h0O1wiKVxuICAgIH0sXG4gICAgLy8gTm8gYXJyb3csIHRyYW5zZm9ybSwgb3IgZmlsdGVyc1xuICAgIGlzQXR0YWNoZWQ6IHtcbiAgICAgIGlzQXR0YWNoZWQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpcIiwgb3BhY2l0eVRyYW5zaXRpb24sIFwiO307bGFiZWw6aXNBdHRhY2hlZDtcIiksXG4gICAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2hhZG93RmxhdChldWlUaGVtZUNvbnRleHQpLCBcIjs7bGFiZWw6dG9wO1wiKSxcbiAgICAgIGJvdHRvbTogLyojX19QVVJFX18qL2NzcyhldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIjs7bGFiZWw6Ym90dG9tO1wiKSxcbiAgICAgIGdldCBsZWZ0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib3R0b207XG4gICAgICB9LFxuICAgICAgZ2V0IHJpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib3R0b207XG4gICAgICB9XG4gICAgfSxcbiAgICAvLyBIYXMgYW4gYXJyb3csIGJ1dCBjYW5ub3QgaGF2ZSB0cmFuc2Zvcm0gb3IgZmlsdGVyIENTUyAtIHRoZXkgY3JlYXRlIGFcbiAgICAvLyBzdGFja2luZyBjb250ZXh0IHRoYXQgbWVzc2VzIHVwIHRoZSBkcmFnL2Ryb3AgZml4ZWQgcG9zaXRpb25pbmdcbiAgICBoYXNEcmFnRHJvcDoge1xuICAgICAgaGFzRHJhZ0Ryb3A6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2hhZG93TWVkaXVtKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBwcm9wZXJ0eTogJ2JveC1zaGFkb3cnXG4gICAgICB9KSwgXCIgXCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246XCIsIG9wYWNpdHlUcmFuc2l0aW9uLCBcIjt9O2xhYmVsOmhhc0RyYWdEcm9wO1wiKSxcbiAgICAgIC8vIFRoZSBvZmZzZXQgdHJhbnNmb3JtcyBtdXN0IGJlIHJlY3JlYXRlZCBpbiBtYXJnaW5zXG4gICAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2stc3RhcnQ6XCIsIHRyYW5zbGF0ZURpc3RhbmNlLCBcIjs7bGFiZWw6dG9wO1wiKSxcbiAgICAgIGJvdHRvbTogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jay1zdGFydDotXCIsIHRyYW5zbGF0ZURpc3RhbmNlLCBcIjsuZXVpUG9wb3Zlcl9fYXJyb3d7ZmlsdGVyOmRyb3Atc2hhZG93KFxcbiAgICAgICAgICAgIDAgLTZweCA2cHggXCIsIGdldFNoYWRvd0NvbG9yKGV1aVRoZW1lLmNvbG9ycy5zaGFkb3csIDAuMTIsIGNvbG9yTW9kZSksIFwiXFxuICAgICAgICAgICk7fTtsYWJlbDpib3R0b207XCIpLFxuICAgICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1pbmxpbmUtc3RhcnQ6XCIsIHRyYW5zbGF0ZURpc3RhbmNlLCBcIjsuZXVpUG9wb3Zlcl9fYXJyb3d7ZmlsdGVyOmRyb3Atc2hhZG93KFxcbiAgICAgICAgICAgIDZweCAwIDZweCBcIiwgZ2V0U2hhZG93Q29sb3IoZXVpVGhlbWUuY29sb3JzLnNoYWRvdywgMC4xMiwgY29sb3JNb2RlKSwgXCJcXG4gICAgICAgICAgKTt9O2xhYmVsOmxlZnQ7XCIpLFxuICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4taW5saW5lLXN0YXJ0Oi1cIiwgdHJhbnNsYXRlRGlzdGFuY2UsIFwiOy5ldWlQb3BvdmVyX19hcnJvd3tmaWx0ZXI6ZHJvcC1zaGFkb3coXFxuICAgICAgICAgICAgLTZweCAwIDZweCBcIiwgZ2V0U2hhZG93Q29sb3IoZXVpVGhlbWUuY29sb3JzLnNoYWRvdywgMC4xMiwgY29sb3JNb2RlKSwgXCJcXG4gICAgICAgICAgKTt9O2xhYmVsOnJpZ2h0O1wiKVxuICAgIH1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJzaXplXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVNwYWNlclN0eWxlcyB9IGZyb20gJy4vc3BhY2VyLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsneHMnLCAncycsICdtJywgJ2wnLCAneGwnLCAneHhsJ107XG5leHBvcnQgdmFyIEV1aVNwYWNlciA9IGZ1bmN0aW9uIEV1aVNwYWNlcihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ2wnIDogX3JlZiRzaXplLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVNwYWNlclN0eWxlcyk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU3BhY2VyJywgX2RlZmluZVByb3BlcnR5KHt9LCBcImV1aVNwYWNlci0tXCIuY29uY2F0KHNpemUpLCBzaXplKSwgY2xhc3NOYW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpU3BhY2VyLCBzdHlsZXNbc2l6ZV1dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpKTtcbn07XG5FdWlTcGFjZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbHMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxOTF4aTFuLWV1aVNwYWNlclwiLFxuICBzdHlsZXM6IFwiZmxleC1zaHJpbms6MDtsYWJlbDpldWlTcGFjZXI7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTkxeGkxbi1ldWlTcGFjZXJcIixcbiAgc3R5bGVzOiBcImZsZXgtc2hyaW5rOjA7bGFiZWw6ZXVpU3BhY2VyO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVNwYWNlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNwYWNlclN0eWxlcyhfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlTcGFjZXI6IF9yZWYsXG4gICAgLy8gU2l6ZXNcbiAgICB4czogLyojX19QVVJFX18qL2Nzcyhsb2dpY2Fscy5oZWlnaHQsIFwiOlwiLCBldWlUaGVtZS5zaXplLnhzLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2Fscy5oZWlnaHQsIFwiOlwiLCBldWlUaGVtZS5zaXplLmJhc2UsIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUubCwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUueGwsIFwiOztsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUueHhsLCBcIjs7bGFiZWw6eHhsO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcInNpemVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInRleHRUcmFuc2Zvcm1cIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMsIGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlUaXRsZVN0eWxlcyB9IGZyb20gJy4vdGl0bGUuc3R5bGVzJztcbmV4cG9ydCB2YXIgVElUTEVfU0laRVMgPSBbJ3h4eHMnLCAneHhzJywgJ3hzJywgJ3MnLCAnbScsICdsJ107XG5leHBvcnQgdmFyIFRFWFRfVFJBTlNGT1JNID0gWyd1cHBlcmNhc2UnXTtcbmV4cG9ydCB2YXIgRXVpVGl0bGUgPSBmdW5jdGlvbiBFdWlUaXRsZShfcmVmKSB7XG4gIHZhciBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICB0ZXh0VHJhbnNmb3JtID0gX3JlZi50ZXh0VHJhbnNmb3JtLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRpdGxlU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGl0bGUsIHRleHRUcmFuc2Zvcm0gPyBzdHlsZXNbdGV4dFRyYW5zZm9ybV0gOiB1bmRlZmluZWQsIHN0eWxlc1tzaXplXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGl0bGUnLCBjbGFzc05hbWUsIGNoaWxkcmVuLnByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KTtcbiAgcmV0dXJuIGNsb25lRWxlbWVudFdpdGhDc3MoY2hpbGRyZW4sIHByb3BzKTtcbn07XG5FdWlUaXRsZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBSZWFjdEVsZW1lbnQgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgdGV4dFRyYW5zZm9ybTogUHJvcFR5cGVzLmFueSxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJkZXNjcmlwdGlvblwiLCBcImlzRGlzYWJsZWRcIiwgXCJ0aXRsZVwiLCBcInRpdGxlRWxlbWVudFwiLCBcInRpdGxlU2l6ZVwiLCBcImljb25cIiwgXCJpbWFnZVwiLCBcImNoaWxkcmVuXCIsIFwiZm9vdGVyXCIsIFwib25DbGlja1wiLCBcImhyZWZcIiwgXCJyZWxcIiwgXCJ0YXJnZXRcIiwgXCJ0ZXh0QWxpZ25cIiwgXCJiZXRhQmFkZ2VQcm9wc1wiLCBcImxheW91dFwiLCBcInNlbGVjdGFibGVcIiwgXCJkaXNwbGF5XCIsIFwicGFkZGluZ1NpemVcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJhbmNob3JQcm9wc1wiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCwgdXNlRXVpVGhlbWUsIGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VHZW5lcmF0ZWRIdG1sSWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi90ZXh0JztcbmltcG9ydCB7IEV1aVRpdGxlIH0gZnJvbSAnLi4vdGl0bGUnO1xuaW1wb3J0IHsgRXVpQmV0YUJhZGdlIH0gZnJvbSAnLi4vYmFkZ2UvYmV0YV9iYWRnZSc7XG5pbXBvcnQgeyBFdWlQYW5lbCB9IGZyb20gJy4uL3BhbmVsJztcbmltcG9ydCB7IEV1aVNwYWNlciB9IGZyb20gJy4uL3NwYWNlcic7XG5pbXBvcnQgeyBFdWlDYXJkU2VsZWN0IH0gZnJvbSAnLi9jYXJkX3NlbGVjdCc7XG5pbXBvcnQgeyBldWlDYXJkQmV0YUJhZGdlU3R5bGVzLCBldWlDYXJkU3R5bGVzLCBldWlDYXJkVGV4dFN0eWxlcyB9IGZyb20gJy4vY2FyZC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQUxJR05NRU5UUyA9IFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnXTtcblxuLyoqXG4gKiBDZXJ0YWluIHByb3BzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiB0aGUgbGF5b3V0IGlzIHZlcnRpY2FsXG4gKi9cblxuZXhwb3J0IHZhciBFdWlDYXJkID0gZnVuY3Rpb24gRXVpQ2FyZChfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBkZXNjcmlwdGlvbiA9IF9yZWYuZGVzY3JpcHRpb24sXG4gICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgIF9yZWYkdGl0bGVFbGVtZW50ID0gX3JlZi50aXRsZUVsZW1lbnQsXG4gICAgdGl0bGVFbGVtZW50ID0gX3JlZiR0aXRsZUVsZW1lbnQgPT09IHZvaWQgMCA/ICdwJyA6IF9yZWYkdGl0bGVFbGVtZW50LFxuICAgIF9yZWYkdGl0bGVTaXplID0gX3JlZi50aXRsZVNpemUsXG4gICAgdGl0bGVTaXplID0gX3JlZiR0aXRsZVNpemUgPT09IHZvaWQgMCA/ICdzJyA6IF9yZWYkdGl0bGVTaXplLFxuICAgIGljb24gPSBfcmVmLmljb24sXG4gICAgaW1hZ2UgPSBfcmVmLmltYWdlLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBmb290ZXIgPSBfcmVmLmZvb3RlcixcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgcmVsID0gX3JlZi5yZWwsXG4gICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgX3JlZiR0ZXh0QWxpZ24gPSBfcmVmLnRleHRBbGlnbixcbiAgICB0ZXh0QWxpZ24gPSBfcmVmJHRleHRBbGlnbiA9PT0gdm9pZCAwID8gJ2NlbnRlcicgOiBfcmVmJHRleHRBbGlnbixcbiAgICBiZXRhQmFkZ2VQcm9wcyA9IF9yZWYuYmV0YUJhZGdlUHJvcHMsXG4gICAgX3JlZiRsYXlvdXQgPSBfcmVmLmxheW91dCxcbiAgICBsYXlvdXQgPSBfcmVmJGxheW91dCA9PT0gdm9pZCAwID8gJ3ZlcnRpY2FsJyA6IF9yZWYkbGF5b3V0LFxuICAgIHNlbGVjdGFibGUgPSBfcmVmLnNlbGVjdGFibGUsXG4gICAgZGlzcGxheSA9IF9yZWYuZGlzcGxheSxcbiAgICBfcmVmJHBhZGRpbmdTaXplID0gX3JlZi5wYWRkaW5nU2l6ZSxcbiAgICBwYWRkaW5nU2l6ZSA9IF9yZWYkcGFkZGluZ1NpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkcGFkZGluZ1NpemUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgaXNDbGlja2FibGUgPSAhaXNEaXNhYmxlZCAmJiAob25DbGljayB8fCBocmVmIHx8IHNlbGVjdGFibGUgJiYgIXNlbGVjdGFibGUuaXNEaXNhYmxlZCk7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpQ2FyZFN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHBhZGRpbmdTaXplKTtcbiAgdmFyIGNhcmRTdHlsZXMgPSBbc3R5bGVzLmNhcmQuZXVpQ2FyZCxcbiAgLy8gVGV4dCBhbGlnbm1lbnQgc2hvdWxkIGFsd2F5cyBiZSBsZWZ0IHdoZW4gaG9yaXpvbnRhbFxuICBzdHlsZXMuY2FyZC5hbGlnbmVkW2xheW91dCA9PT0gJ2hvcml6b250YWwnID8gJ2xlZnQnIDogdGV4dEFsaWduXSwgaXNEaXNhYmxlZCAmJiBzdHlsZXMuY2FyZC5kaXNhYmxlZF07XG4gIHZhciBjb250ZW50U3R5bGVzID0gW3N0eWxlcy5jb250ZW50LmV1aUNhcmRfX2NvbnRlbnQsIHN0eWxlcy5jb250ZW50LmxheW91dFtsYXlvdXRdXTtcbiAgdmFyIG1haW5TdHlsZXMgPSBbc3R5bGVzLm1haW4uZXVpQ2FyZF9fbWFpbiwgc3R5bGVzLm1haW4ubGF5b3V0W2xheW91dF1dO1xuICB2YXIgdGV4dFN0eWxlcyA9IGV1aUNhcmRUZXh0U3R5bGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciB0ZXh0Q1NTID0gW3RleHRTdHlsZXMuZXVpQ2FyZF9fdGV4dCxcbiAgLy8gVGV4dCBhbGlnbm1lbnQgc2hvdWxkIGFsd2F5cyBiZSBsZWZ0IHdoZW4gaG9yaXpvbnRhbFxuICB0ZXh0U3R5bGVzLmFsaWduZWRbbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcgPyAnbGVmdCcgOiB0ZXh0QWxpZ25dLCBpc0NsaWNrYWJsZSAmJiB0ZXh0U3R5bGVzLmludGVyYWN0aXZlLCBpc0Rpc2FibGVkICYmIHRleHRTdHlsZXMuZGlzYWJsZWRdO1xuXG4gIC8qKlxuICAgKiBGb3IgYTExeSwgd2Ugc2ltdWxhdGUgdGhlIHNhbWUgY2xpY2sgdGhhdCdzIHByb3ZpZGVkIG9uIHRoZSB0aXRsZSB3aGVuIGNsaWNraW5nIHRoZSB3aG9sZSBjYXJkXG4gICAqIHdpdGhvdXQgaGF2aW5nIHRvIG1ha2UgdGhlIHdob2xlIGNhcmQgYSBidXR0b24gb3IgYW5jaG9yIHRhZy5cbiAgICogKkNhcmQgQWNjZXNzaWJpbGl0eTogVGhlIHJlZHVuZGFudCBjbGljayBldmVudCBodHRwczovL2luY2x1c2l2ZS1jb21wb25lbnRzLmRlc2lnbi9jYXJkcy8qXG4gICAqL1xuICB2YXIgbGluayA9IG51bGw7XG4gIHZhciBvdXRlck9uQ2xpY2sgPSBmdW5jdGlvbiBvdXRlck9uQ2xpY2soZSkge1xuICAgIGlmIChsaW5rICYmIGxpbmsgIT09IGUudGFyZ2V0ICYmICFsaW5rLmNvbnRhaW5zKGUudGFyZ2V0KSkge1xuICAgICAgbGluay5jbGljaygpO1xuICAgIH1cbiAgfTtcbiAgaWYgKGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgaWYgKGltYWdlIHx8IGZvb3RlciB8fCB0ZXh0QWxpZ24gIT09ICdjZW50ZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V1aUNhcmQ6IGBsYXlvdXQ9XCJob3Jpem9udGFsXCJgIGNhbm5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYGltYWdlYCwgYGZvb3RlcmAsIG9yIGB0ZXh0QWxpZ25gLicpO1xuICAgIH1cbiAgfVxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNhcmQnLCBjbGFzc05hbWUpO1xuICB2YXIgYXJpYUlkID0gdXNlR2VuZXJhdGVkSHRtbElkKCk7XG4gIHZhciBhcmlhRGVzYyA9IGRlc2NyaXB0aW9uID8gXCJcIi5jb25jYXQoYXJpYUlkLCBcIkRlc2NyaXB0aW9uXCIpIDogJyc7XG5cbiAgLyoqXG4gICAqIFRvcCBhcmVhIGNvbnRhaW5pbmcgaW1hZ2UsIGljb24gb3IgYm90aFxuICAgKi9cblxuICB2YXIgaW1hZ2VOb2RlO1xuICBpZiAoaW1hZ2UgJiYgbGF5b3V0ID09PSAndmVydGljYWwnKSB7XG4gICAgaWYgKCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoaW1hZ2UpIHx8IHR5cGVvZiBpbWFnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBpbWFnZVN0eWxlcyA9IFtzdHlsZXMuaW1hZ2UuZXVpQ2FyZF9faW1hZ2UsIGRpc3BsYXkgPT09ICd0cmFuc3BhcmVudCcgJiYgc3R5bGVzLmltYWdlLnRyYW5zcGFyZW50XTtcbiAgICAgIGltYWdlTm9kZSA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9faW1hZ2VcIixcbiAgICAgICAgY3NzOiBpbWFnZVN0eWxlc1xuICAgICAgfSwgLyojX19QVVJFX18qL2lzVmFsaWRFbGVtZW50KGltYWdlKSA/IGltYWdlIDogX19fRW1vdGlvbkpTWChcImltZ1wiLCB7XG4gICAgICAgIHNyYzogaW1hZ2UsXG4gICAgICAgIGFsdDogXCJcIlxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbWFnZU5vZGUgPSBudWxsO1xuICAgIH1cbiAgfVxuICB2YXIgaWNvbk5vZGU7XG4gIGlmIChpY29uKSB7XG4gICAgdmFyIGljb25TdHlsZXMgPSBbc3R5bGVzLmljb24uZXVpQ2FyZF9faWNvbiwgc3R5bGVzLmljb24ubGF5b3V0W2xheW91dF0sIGltYWdlTm9kZSAmJiBzdHlsZXMuaWNvbi53aXRoSW1hZ2VdO1xuICAgIGljb25Ob2RlID0gY2xvbmVFbGVtZW50V2l0aENzcyhpY29uLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoaWNvbi5wcm9wcy5jbGFzc05hbWUsICdldWlDYXJkX19pY29uJyksXG4gICAgICBjc3M6IGljb25TdHlsZXNcbiAgICB9KTtcbiAgfVxuICB2YXIgb3B0aW9uYWxDYXJkVG9wO1xuICBpZiAoaW1hZ2VOb2RlIHx8IGljb25Ob2RlKSB7XG4gICAgdmFyIHRvcFN0eWxlcyA9IFtzdHlsZXMudG9wLmV1aUNhcmRfX3RvcCwgc3R5bGVzLnRvcC5sYXlvdXRbbGF5b3V0XSwgaXNEaXNhYmxlZCAmJiBzdHlsZXMudG9wLmRpc2FibGVkXTtcbiAgICBvcHRpb25hbENhcmRUb3AgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX190b3BcIixcbiAgICAgIGNzczogdG9wU3R5bGVzXG4gICAgfSwgaW1hZ2VOb2RlLCBpY29uTm9kZSk7XG4gIH1cblxuICAvKipcbiAgICogT3B0aW9uYWwgRXVpQmV0YUJhZGdlXG4gICAqL1xuXG4gIHZhciBvcHRpb25hbEJldGFCYWRnZTtcbiAgdmFyIG9wdGlvbmFsQmV0YUJhZGdlSUQgPSAnJztcbiAgdmFyIG9wdGlvbmFsQmV0YUNTUztcbiAgaWYgKGJldGFCYWRnZVByb3BzICE9PSBudWxsICYmIGJldGFCYWRnZVByb3BzICE9PSB2b2lkIDAgJiYgYmV0YUJhZGdlUHJvcHMubGFiZWwpIHtcbiAgICB2YXIgYmV0YVN0eWxlcyA9IGV1aUNhcmRCZXRhQmFkZ2VTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBwYWRkaW5nU2l6ZSk7XG4gICAgb3B0aW9uYWxCZXRhQ1NTID0gYmV0YVN0eWxlcy5oYXNCZXRhQmFkZ2U7XG4gICAgdmFyIGFuY2hvclByb3BzID0gYmV0YUJhZGdlUHJvcHMuYW5jaG9yUHJvcHMsXG4gICAgICBjbGVhbmVkQmV0YUJhZGdlUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoYmV0YUJhZGdlUHJvcHMsIF9leGNsdWRlZDIpO1xuICAgIHZhciBhbmNob3JDU1MgPSBbYmV0YVN0eWxlcy5ldWlDYXJkX19iZXRhQmFkZ2VBbmNob3IsIGFuY2hvclByb3BzID09PSBudWxsIHx8IGFuY2hvclByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhbmNob3JQcm9wcy5jc3NdO1xuICAgIHZhciBiYWRnZUNTUyA9IFtiZXRhU3R5bGVzLmV1aUNhcmRfX2JldGFCYWRnZSwgYmV0YUJhZGdlUHJvcHMgPT09IG51bGwgfHwgYmV0YUJhZGdlUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJldGFCYWRnZVByb3BzLmNzc107XG4gICAgb3B0aW9uYWxCZXRhQmFkZ2VJRCA9IFwiXCIuY29uY2F0KGFyaWFJZCwgXCJCZXRhQmFkZ2VcIik7XG4gICAgb3B0aW9uYWxCZXRhQmFkZ2UgPSBfX19FbW90aW9uSlNYKEV1aUJldGFCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgY29sb3I6IGlzRGlzYWJsZWQgJiYgIWJldGFCYWRnZVByb3BzLm9uQ2xpY2sgJiYgIWJldGFCYWRnZVByb3BzLmhyZWYgPyAnc3ViZHVlZCcgOiAnaG9sbG93J1xuICAgIH0sIGNsZWFuZWRCZXRhQmFkZ2VQcm9wcywge1xuICAgICAgY3NzOiBiYWRnZUNTUyxcbiAgICAgIGFuY2hvclByb3BzOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFuY2hvclByb3BzKSwge30sIHtcbiAgICAgICAgY3NzOiBhbmNob3JDU1NcbiAgICAgIH0pLFxuICAgICAgaWQ6IG9wdGlvbmFsQmV0YUJhZGdlSURcbiAgICB9KSk7XG5cbiAgICAvLyBJbmNyZWFzZSBwYWRkaW5nIHNpemUgd2hlbiB0aGVyZSBpcyBhIGJldGEgYmFkZ2UgdW5sZXNzIGl0J3MgYWxyZWFkeSBkZXRlcm1pbmVkXG4gICAgLy8gcGFkZGluZ1NpemUgPSBwYWRkaW5nU2l6ZSB8fCAnbCc7XG4gIH1cblxuICAvKipcbiAgICogT3B0aW9uYWwgc2VsZWN0YWJsZSBidXR0b25cbiAgICovXG5cbiAgaWYgKHNlbGVjdGFibGUgJiYgaXNEaXNhYmxlZCAmJiBzZWxlY3RhYmxlLmlzRGlzYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHNlbGVjdGFibGUuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cbiAgdmFyIG9wdGlvbmFsU2VsZWN0QnV0dG9uO1xuICBpZiAoc2VsZWN0YWJsZSkge1xuICAgIG9wdGlvbmFsU2VsZWN0QnV0dG9uID0gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgcGFkZGluZ1NpemUgIT09ICdub25lJyAmJiBfX19FbW90aW9uSlNYKEV1aVNwYWNlciwge1xuICAgICAgc2l6ZTogcGFkZGluZ1NpemUgfHwgJ20nXG4gICAgfSksIF9fX0Vtb3Rpb25KU1goRXVpQ2FyZFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IFwiXCIuY29uY2F0KGFyaWFJZCwgXCJUaXRsZSBcIikuY29uY2F0KGFyaWFEZXNjKVxuICAgIH0sIHNlbGVjdGFibGUsIHtcbiAgICAgIGJ1dHRvblJlZjogZnVuY3Rpb24gYnV0dG9uUmVmKG5vZGUpIHtcbiAgICAgICAgbGluayA9IG5vZGU7XG4gICAgICB9XG4gICAgfSkpKTtcbiAgfVxuICB2YXIgVGl0bGVFbGVtZW50ID0gdGl0bGVFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBXcmFwcyB0aGUgdGl0bGUgd2l0aCB0aGUgbGluayAoPGE+KSBvciBidXR0b24uXG4gICAqIFRoaXMgbWFrZXMgdGhlIHRpdGxlIGVsZW1lbnQgYTExeSBmcmllbmRseSBhbmQgZ2V0cyBkZXNjcmliZWQgYnkgaXRzIGNvbnRlbnQgaWYgaXRzIGludGVyYWN0YWJsZS5cbiAgICovXG5cbiAgdmFyIHRoZVRpdGxlO1xuICBpZiAoIWlzRGlzYWJsZWQgJiYgaHJlZikge1xuICAgIHRoZVRpdGxlID0gX19fRW1vdGlvbkpTWChcImFcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX3RpdGxlQW5jaG9yXCIsXG4gICAgICBjc3M6IHRleHRDU1MsXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGFyaWFEZXNjLFxuICAgICAgcmVsOiBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgcmVsOiByZWxcbiAgICAgIH0pLFxuICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICBsaW5rID0gbm9kZTtcbiAgICAgIH1cbiAgICB9LCB0aXRsZSk7XG4gIH0gZWxzZSBpZiAoaXNEaXNhYmxlZCB8fCBvbkNsaWNrKSB7XG4gICAgdGhlVGl0bGUgPSBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX190aXRsZUJ1dHRvblwiLFxuICAgICAgY3NzOiB0ZXh0Q1NTLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IFwiXCIuY29uY2F0KG9wdGlvbmFsQmV0YUJhZGdlSUQsIFwiIFwiKS5jb25jYXQoYXJpYURlc2MpLFxuICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICBsaW5rID0gbm9kZTtcbiAgICAgIH1cbiAgICB9LCB0aXRsZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhlVGl0bGUgPSBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICBjc3M6IHRleHRDU1NcbiAgICB9LCB0aXRsZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hpbGRyZW4gYW5kL29yIERlc2NyaXB0aW9uIGNvbnRlbnRcbiAgICovXG4gIHZhciBvcHRpb25hbENoaWxkcmVuO1xuICBpZiAoY2hpbGRyZW4pIHtcbiAgICB2YXIgY2hpbGRyZW5TdHlsZXMgPSBbc3R5bGVzLmV1aUNhcmRfX2NoaWxkcmVuXTtcbiAgICBvcHRpb25hbENoaWxkcmVuID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICBjc3M6IGNoaWxkcmVuU3R5bGVzXG4gICAgfSwgY2hpbGRyZW4pO1xuICB9XG4gIHZhciBvcHRpb25hbERlc2NyaXB0aW9uO1xuICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICB2YXIgZGVzY3JpcHRpb25TdHlsZXMgPSBbc3R5bGVzLmV1aUNhcmRfX2Rlc2NyaXB0aW9uXTtcbiAgICBvcHRpb25hbERlc2NyaXB0aW9uID0gX19fRW1vdGlvbkpTWChFdWlUZXh0LCB7XG4gICAgICBpZDogYXJpYURlc2MsXG4gICAgICBzaXplOiBcInNcIixcbiAgICAgIGNzczogZGVzY3JpcHRpb25TdHlsZXNcbiAgICB9LCBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBkZXNjcmlwdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvb3RlciBjb250ZW50XG4gICAqL1xuICB2YXIgb3B0aW9uYWxGb290ZXI7XG4gIGlmIChsYXlvdXQgPT09ICd2ZXJ0aWNhbCcgJiYgZm9vdGVyKSB7XG4gICAgdmFyIGZvb3RlclN0eWxlcyA9IFtzdHlsZXMuZXVpQ2FyZF9fZm9vdGVyXTtcbiAgICBvcHRpb25hbEZvb3RlciA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY3NzOiBmb290ZXJTdHlsZXNcbiAgICB9LCBmb290ZXIpO1xuICB9XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBhbmVsLCBfZXh0ZW5kcyh7XG4gICAgZWxlbWVudDogXCJkaXZcIixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBbXS5jb25jYXQoY2FyZFN0eWxlcywgW29wdGlvbmFsQmV0YUNTU10pLFxuICAgIG9uQ2xpY2s6IGlzQ2xpY2thYmxlID8gb3V0ZXJPbkNsaWNrIDogdW5kZWZpbmVkLFxuICAgIGNvbG9yOiBpc0Rpc2FibGVkID8gJ3N1YmR1ZWQnIDogZGlzcGxheSxcbiAgICBoYXNTaGFkb3c6IGlzRGlzYWJsZWQgfHwgZGlzcGxheSA/IGZhbHNlIDogdHJ1ZSxcbiAgICBoYXNCb3JkZXI6IGRpc3BsYXkgPyBmYWxzZSA6IHVuZGVmaW5lZCxcbiAgICBwYWRkaW5nU2l6ZTogcGFkZGluZ1NpemVcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19tYWluXCIsXG4gICAgY3NzOiBtYWluU3R5bGVzXG4gIH0sIG9wdGlvbmFsQ2FyZFRvcCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2NvbnRlbnRcIixcbiAgICBjc3M6IGNvbnRlbnRTdHlsZXNcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlUaXRsZSwge1xuICAgIGlkOiBcIlwiLmNvbmNhdChhcmlhSWQsIFwiVGl0bGVcIiksXG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX3RpdGxlXCIsXG4gICAgc2l6ZTogdGl0bGVTaXplXG4gIH0sIF9fX0Vtb3Rpb25KU1goVGl0bGVFbGVtZW50LCBudWxsLCB0aGVUaXRsZSkpLCBvcHRpb25hbERlc2NyaXB0aW9uLCBvcHRpb25hbENoaWxkcmVuKSwgb3B0aW9uYWxCZXRhQmFkZ2UsIG9wdGlvbmFsRm9vdGVyKSwgb3B0aW9uYWxTZWxlY3RCdXR0b24pO1xufTtcbkV1aUNhcmQucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgICAqIENoYW5nZSB0byBcImhvcml6b250YWxcIiBpZiB5b3UgbmVlZCB0aGUgaWNvbiB0byBiZSBsZWZ0IG9mIHRoZSBjb250ZW50LlxuICAgICAgICogSG9yaXpvbnRhbCBsYXlvdXRzIGNhbm5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYGltYWdlYCwgYGZvb3RlcmAsIG9yIGB0ZXh0QWxpZ25gLlxuICAgICAgICovXG4gIGxheW91dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcInZlcnRpY2FsXCJdKSwgUHJvcFR5cGVzLm9uZU9mKFtcImhvcml6b250YWxcIl0pLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBDaGFuZ2VzIGFsaWdubWVudCBvZiB0aGUgdGl0bGUgYW5kIGRlc2NyaXB0aW9uXG4gICAgICAgKi9cbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW55IGNvbWJpbmF0aW9uIG9mIGVsZW1lbnRzXG4gICAgICAgKi9cbiAgZm9vdGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGEgdXJsIGluIHN0cmluZyBmb3JtIG9yIFJlYWN0RWxlbWVudCBmb3IgYSBjdXN0b20gaW1hZ2UgY29tcG9uZW50XG4gICAgICAgKi9cbiAgaW1hZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIENhcmRzIGFyZSByZXF1aXJlZCB0byBoYXZlIGF0IGxlYXN0IGEgdGl0bGUgYW5kIGEgZGVzY3JpcHRpb24gYW5kL29yIGNoaWxkcmVuXG4gICAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmVzIHRoZSB0aXRsZSdzIGhlYWRpbmcgZWxlbWVudFxuICAgICAgICovXG4gIHRpdGxlRWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJzcGFuXCIsIFwicFwiXSksXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgdGl0bGUncyBzaXplLCBtYXRjaGluZyB0aGF0IG9mIEV1aVRpdGxlLlxuICAgICAgICogVGhvdWdoLCBjYXJkIHRpdGxlcyBjYW4ndCBiZSB0b28gbGFyZ2Ugb3Igc21hbGwgcmVsYXRpdmUgdG8gdGhlIGRlc2NyaXB0aW9uIHRleHQuXG4gICAgICAgKi9cbiAgdGl0bGVTaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcInhzXCJdKSxcbiAgLyoqXG4gICAgICAgKiBQbGFjZWQgd2l0aGluIGEgc21hbGwgRXVpVGV4dCBgPHA+YCB0YWdcbiAgICAgICAqL1xuICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGFuIGA8RXVpSWNvbj5gIG5vZGUgb3IgYG51bGxgXG4gICAgICAgKi9cbiAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtudWxsXSldKSxcbiAgLyoqXG4gICAgICAgKiBDdXN0b20gY2hpbGRyZW5cbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAgICogVXNlIG9ubHkgaWYgeW91IHdhbnQgdG8gZm9yZWdvIGEgYnV0dG9uIGluIHRoZSBmb290ZXIgYW5kIG1ha2UgdGhlIHdob2xlIGNhcmQgY2xpY2thYmxlXG4gICAgICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAgICogQWRkcyBhIGJhZGdlIHRvIHRvcCBvZiB0aGUgY2FyZCB0byBsYWJlbCBpdCBhcyBcIkJldGFcIiBvciBvdGhlciBub24tR0Egc3RhdGUuXG4gICAgICAgKiBBY2NlcHRzIGFsbCB0aGUgcHJvcHMgb2YgW0V1aUJldGFCYWRnZV0oIy9kaXNwbGF5L2JhZGdlI2JldGEtYmFkZ2UtdHlwZSksIHdoZXJlIGBsYWJlbGAgaXMgcmVxdWlyZWQuXG4gICAgICAgKi9cbiAgYmV0YUJhZGdlUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAgICovXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBvbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvKipcbiAgICAgICAqIFN1cHBseSBhbiBpY29uIHR5cGUgaWYgdGhlIGJhZGdlIHNob3VsZCBqdXN0IGJlIGFuIGljb25cbiAgICAgICAqL1xuICAgIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAgIC8qKlxuICAgICAgICogT25lIHdvcmQgbGFiZWwgbGlrZSBcIkJldGFcIiBvciBcIkxhYlwiXG4gICAgICAgKi9cbiAgICAvKipcbiAgICAgICAqIE9uZSB3b3JkIGxhYmVsIGxpa2UgXCJCZXRhXCIgb3IgXCJMYWJcIlxuICAgICAgICovXG4gICAgbGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgIC8qKlxuICAgICAgICogQ29udGVudCBmb3IgdGhlIHRvb2x0aXBcbiAgICAgICAqL1xuICAgIHRvb2x0aXBDb250ZW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRdKV0pLFxuICAgIC8qKlxuICAgICAgICogQ3VzdG9tIHBvc2l0aW9uIG9mIHRoZSB0b29sdGlwXG4gICAgICAgKi9cbiAgICB0b29sdGlwUG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0pLFxuICAgIC8qKlxuICAgICAgICogUGFzc2VzIG9udG8gdGhlIHNwYW4gd3JhcHBpbmcgdGhlIGJhZGdlXG4gICAgICAgKi9cbiAgICBhbmNob3JQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gICAgfSksXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCB0aXRsZSB3aWxsIGJlIHN1cHBsaWVkIGFzIHRvb2x0aXAgdGl0bGUgb3IgdGl0bGUgYXR0cmlidXRlXG4gICAgICAgKiBvdGhlcndpc2UgdGhlIGxhYmVsIHdpbGwgYmUgdXNlZFxuICAgICAgICovXG4gICAgdGl0bGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZ10pXSksXG4gICAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGFjY2VudCwgc3ViZHVlZCBhbmQgaG9sbG93LlxuICAgICAgICovXG4gICAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gICAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFNldHMgdGhlIGB2ZXJ0aWNhbC1hbGlnbmAgQ1NTIHByb3BlcnR5XG4gICAgICAgKi9cbiAgICBhbGlnbm1lbnQ6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIC8qKlxuICAgICAgICogTWF0Y2hlcyB0byB0aGUgY29sb3IgcHJvcGVydHkgb2YgRXVpUGFuZWwuIElmIGRlZmluZWQsIHJlbW92ZXMgYW55IGJvcmRlciAmIHNoYWRvdy5cbiAgICAgICAqIExlYXZlIGFzIGB1bmRlZmluZWRgIHRvIGRpc3BsYXkgYXMgYSBkZWZhdWx0IHBhbmVsLlxuICAgICAgICogU2VsZWN0YWJsZSBjYXJkcyB3aWxsIGFsd2F5cyBkaXNwbGF5IGFzIGEgZGVmYXVsdCBwYW5lbC5cbiAgICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFBhZGRpbmcgYXBwbGllZCBhcm91bmQgdGhlIGNvbnRlbnQgb2YgdGhlIGNhcmRcbiAgICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBBZGRzIGEgYnV0dG9uIHRvIHRoZSBib3R0b20gb2YgdGhlIGNhcmQgdG8gYWxsb3cgZm9yIGluLXBsYWNlIHNlbGVjdGlvblxuICAgICAgICovXG4gIHNlbGVjdGFibGU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICAgKiBNYWtlIGJ1dHRvbiBhIHNvbGlkIGNvbG9yIGZvciBwcm9taW5lbmNlXG4gICAgICAgKi9cbiAgICAvKipcbiAgICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgICAqL1xuICAgIGZpbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAgICogQW55IG9mIHRoZSBuYW1lZCBjb2xvciBwYWxldHRlIG9wdGlvbnMuXG4gICAgICAgKi9cbiAgICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgICAqL1xuICAgIC8qKlxuICAgICAgICogVXNlIHNpemUgYHNgIGluIGNvbmZpbmVkIHNwYWNlc1xuICAgICAgICovXG4gICAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICAgKi9cbiAgICAvKipcbiAgICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICAgKi9cbiAgICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG4gICAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImFcIiwgXCJidXR0b25cIiwgXCJzcGFuXCJdKSxcbiAgICAvKipcbiAgICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAgICovXG4gICAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBFeHRlbmRzIHRoZSBidXR0b24gdG8gMTAwJSB3aWR0aFxuICAgICAgICovXG4gICAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1pbmltdW0gd2lkdGhcbiAgICAgICAqL1xuICAgIG1pbldpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAgIC8qKlxuICAgICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICovXG4gICAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgICAqL1xuICAgIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gICAgfSksXG4gICAgc3R5bGU6IFByb3BUeXBlcy5hbnksXG4gICAgdHlwZTogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAgICovXG4gICAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gICAgLyoqXG4gICAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAgICovXG4gICAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFt1bmRlZmluZWRdKV0pLFxuICAgIC8qKlxuICAgICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgYDxzcGFuPmAgd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0L2NoaWxkcmVuIG9ubHkgKG5vdCBpY29uKVxuICAgICAgICpcbiAgICAgICAqIFRoaXMgc3BhbiB3cmFwcGVyIGNhbiBiZSByZW1vdmVkIGJ5IHBhc3NpbmcgYHRleHRQcm9wcz17ZmFsc2V9YC5cbiAgICAgICAqL1xuICAgIHRleHRQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAgIGljb25TaXplOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICAvKipcbiAgICAgICAqIFVzZSBhIGJvcmRlciBzdHlsZSBvZiBjYXJkIGluc3RlYWQgb2Ygc2hhZG93XG4gICAgICAgKi9cbiAgaGFzQm9yZGVyOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImlzU2VsZWN0ZWRcIiwgXCJpc0Rpc2FibGVkXCIsIFwiZGlzYWJsZWRcIiwgXCJjb2xvclwiLCBcImNoaWxkcmVuXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpQnV0dG9uIH0gZnJvbSAnLi4vLi4vYnV0dG9uL2J1dHRvbic7XG5pbXBvcnQgeyBldWlDYXJkU2VsZWN0U3R5bGVzIH0gZnJvbSAnLi9jYXJkX3NlbGVjdC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ2FyZFNlbGVjdCA9IGZ1bmN0aW9uIEV1aUNhcmRTZWxlY3QoX3JlZikge1xuICB2YXIgX3JlZiRpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgIGlzU2VsZWN0ZWQgPSBfcmVmJGlzU2VsZWN0ZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpc1NlbGVjdGVkLFxuICAgIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc3R5bGVzID0gZXVpQ2FyZFNlbGVjdFN0eWxlcygpO1xuICB2YXIgYmFzZUNTUyA9IFtzdHlsZXMuZXVpQ2FyZFNlbGVjdF07XG4gIHZhciBjaGlsZCA9IGV1aUNhcmRTZWxlY3RhYmxlVGV4dChpc1NlbGVjdGVkLCBpc0Rpc2FibGVkIHx8IGRpc2FibGVkLCBjaGlsZHJlbik7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbiwgX2V4dGVuZHMoe1xuICAgIGNzczogYmFzZUNTUyxcbiAgICBjb2xvcjogZXVpQ2FyZFNlbGVjdGFibGVDb2xvcihjb2xvciwgaXNTZWxlY3RlZCksXG4gICAgc2l6ZTogXCJtXCIsXG4gICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCB8fCBkaXNhYmxlZCxcbiAgICBpY29uVHlwZTogaXNTZWxlY3RlZCA/ICdjaGVjaycgOiB1bmRlZmluZWQsXG4gICAgcm9sZTogXCJzd2l0Y2hcIixcbiAgICBcImFyaWEtY2hlY2tlZFwiOiBpc1NlbGVjdGVkLFxuICAgIGZ1bGxXaWR0aDogdHJ1ZVxuICB9LCByZXN0KSwgY2hpbGQpO1xufTtcbkV1aUNhcmRTZWxlY3QucHJvcFR5cGVzID0ge1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBNYWtlIGJ1dHRvbiBhIHNvbGlkIGNvbG9yIGZvciBwcm9taW5lbmNlXG4gICAgICovXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cbiAgZmlsbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEFueSBvZiB0aGUgbmFtZWQgY29sb3IgcGFsZXR0ZSBvcHRpb25zLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogVXNlIHNpemUgYHNgIGluIGNvbmZpbmVkIHNwYWNlc1xuICAgICAqL1xuICAvKipcbiAgICAgKiBVc2Ugc2l6ZSBgc2AgaW4gY29uZmluZWQgc3BhY2VzXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuICBlbGVtZW50OiBQcm9wVHlwZXMub25lT2YoW1wiYVwiLCBcImJ1dHRvblwiLCBcInNwYW5cIl0pLFxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBFeHRlbmRzIHRoZSBidXR0b24gdG8gMTAwJSB3aWR0aFxuICAgICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBtaW5pbXVtIHdpZHRoXG4gICAgICovXG4gIG1pbldpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcbiAgdHlwZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW3VuZGVmaW5lZF0pXSksXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dC9jaGlsZHJlbiBvbmx5IChub3QgaWNvbilcbiAgICAgKlxuICAgICAqIFRoaXMgc3BhbiB3cmFwcGVyIGNhbiBiZSByZW1vdmVkIGJ5IHBhc3NpbmcgYHRleHRQcm9wcz17ZmFsc2V9YC5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueVxufTtcbmZ1bmN0aW9uIGV1aUNhcmRTZWxlY3RhYmxlVGV4dChpc1NlbGVjdGVkLCBpc0Rpc2FibGVkLCBjaGlsZHJlbikge1xuICBpZiAoY2hpbGRyZW4pIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgdmFyIHRleHQ7XG4gIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgdGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpQ2FyZFNlbGVjdC5zZWxlY3RlZFwiLFxuICAgICAgZGVmYXVsdDogXCJTZWxlY3RlZFwiXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNEaXNhYmxlZCkge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aUNhcmRTZWxlY3QudW5hdmFpbGFibGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiVW5hdmFpbGFibGVcIlxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aUNhcmRTZWxlY3Quc2VsZWN0XCIsXG4gICAgICBkZWZhdWx0OiBcIlNlbGVjdFwiXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHRleHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZXVpQ2FyZFNlbGVjdGFibGVDb2xvcihjb2xvciwgaXNTZWxlY3RlZCkge1xuICB2YXIgY2FsY3VsYXRlZENvbG9yO1xuICBpZiAoY29sb3IpIHtcbiAgICBjYWxjdWxhdGVkQ29sb3IgPSBjb2xvcjtcbiAgfSBlbHNlIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgY2FsY3VsYXRlZENvbG9yID0gJ3N1Y2Nlc3MnO1xuICB9IGVsc2Uge1xuICAgIGNhbGN1bGF0ZWRDb2xvciA9ICd0ZXh0JztcbiAgfVxuICByZXR1cm4gY2FsY3VsYXRlZENvbG9yO1xufSIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJhb2dsNC1ldWlDYXJkU2VsZWN0XCIsXG4gIHN0eWxlczogXCJ0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7YWxpZ24tc2VsZjpmbGV4LWVuZDtsYWJlbDpldWlDYXJkU2VsZWN0O1wiXG59IDoge1xuICBuYW1lOiBcImFvZ2w0LWV1aUNhcmRTZWxlY3RcIixcbiAgc3R5bGVzOiBcInRyYW5zZm9ybTpub25lIWltcG9ydGFudDthbGlnbi1zZWxmOmZsZXgtZW5kO2xhYmVsOmV1aUNhcmRTZWxlY3Q7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpQ2FyZFNlbGVjdFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNhcmRTZWxlY3RTdHlsZXMoKSB7XG4gIHJldHVybiB7XG4gICAgZXVpQ2FyZFNlbGVjdDogX3JlZlxuICB9O1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpUGFkZGluZ1NpemUsIGV1aVN1cHBvcnRzSGFzLCBsb2dpY2FsQ1NTLCBsb2dpY2FscywgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aUJ1dHRvbkNvbG9yIH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xudmFyIHBhZGRpbmdLZXkgPSAnbSc7XG52YXIgaGFsZlBhZGRpbmdLZXkgPSAncyc7XG5cbi8qKlxuICogMS4gRm9vdGVyIGlzIGFsd2F5cyBhdCB0aGUgYm90dG9tLlxuICogMy4gSG9yaXpvbnRhbCBsYXlvdXRzIHNob3VsZCBhbHdheXMgdG9wIGxlZnQgYWxpZ24gbm8gbWF0dGVyIHRoZSB0ZXh0QWxpZ24gcHJvcFxuICogNC4gRW5zdXJlcyB0aGUgY29udGVudHMgYWx3YXlzIHN0cmV0Y2ggbm8gbWF0dGVyIHRoZSBmbGV4IGxheW91dFxuICovXG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwicmV5bXVuLWRpc2FibGVkXCIsXG4gIHN0eWxlczogXCJmaWx0ZXI6Z3JheXNjYWxlKDEwMCUpO2xhYmVsOmRpc2FibGVkO1wiXG59IDoge1xuICBuYW1lOiBcInJleW11bi1kaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiZmlsdGVyOmdyYXlzY2FsZSgxMDAlKTtsYWJlbDpkaXNhYmxlZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImNyM3d6Ny1ldWlDYXJkX19jb250ZW50XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpldWlDYXJkX19jb250ZW50O1wiXG59IDoge1xuICBuYW1lOiBcImNyM3d6Ny1ldWlDYXJkX19jb250ZW50XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpldWlDYXJkX19jb250ZW50O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWt3MHl4bi1ob3Jpem9udGFsXCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtsYWJlbDpob3Jpem9udGFsO1wiXG59IDoge1xuICBuYW1lOiBcIjFrdzB5eG4taG9yaXpvbnRhbFwiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bGFiZWw6aG9yaXpvbnRhbDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY1ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIm9tbmsybC12ZXJ0aWNhbFwiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246Y29sdW1uO2xhYmVsOnZlcnRpY2FsO1wiXG59IDoge1xuICBuYW1lOiBcIm9tbmsybC12ZXJ0aWNhbFwiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246Y29sdW1uO2xhYmVsOnZlcnRpY2FsO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWx5dmRwZi1ldWlDYXJkX19tYWluXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7aW5saW5lLXNpemU6MTAwJTtmbGV4LWdyb3c6MTtsYWJlbDpldWlDYXJkX19tYWluO1wiXG59IDoge1xuICBuYW1lOiBcIjFseXZkcGYtZXVpQ2FyZF9fbWFpblwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2lubGluZS1zaXplOjEwMCU7ZmxleC1ncm93OjE7bGFiZWw6ZXVpQ2FyZF9fbWFpbjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlDYXJkU3R5bGVzID0gZnVuY3Rpb24gZXVpQ2FyZFN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHBhZGRpbmdTaXplKSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIHBhZGRpbmdBbW91bnQgPSBldWlQYWRkaW5nU2l6ZShldWlUaGVtZUNvbnRleHQsIHBhZGRpbmdTaXplKTtcbiAgdmFyIHNwYWNpbmcgPSBldWlQYWRkaW5nU2l6ZShldWlUaGVtZUNvbnRleHQsIHBhZGRpbmdLZXkpO1xuICB2YXIgaGFsZlNwYWNpbmcgPSBldWlQYWRkaW5nU2l6ZShldWlUaGVtZUNvbnRleHQsIGhhbGZQYWRkaW5nS2V5KTtcbiAgcmV0dXJuIHtcbiAgICBjYXJkOiB7XG4gICAgICBldWlDYXJkOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOyY6aGFzKFxcbiAgICAgICAgICAgIFtjbGFzcyo9J2V1aUNhcmRfX3RleHQnXVtjbGFzcyo9Jy1pbnRlcmFjdGl2ZSddOmZvY3VzOmZvY3VzLXZpc2libGVcXG4gICAgICAgICAgKXtvdXRsaW5lOlwiLCBldWlUaGVtZS5mb2N1cy53aWR0aCwgXCIgc29saWQgY3VycmVudENvbG9yO307bGFiZWw6ZXVpQ2FyZDtcIiksXG4gICAgICBhbGlnbmVkOiB7XG4gICAgICAgIGNlbnRlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCIgYWxpZ24taXRlbXM6Y2VudGVyOztsYWJlbDpjZW50ZXI7XCIpLFxuICAgICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCIgYWxpZ24taXRlbXM6ZmxleC1zdGFydDs7bGFiZWw6bGVmdDtcIiksXG4gICAgICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ3JpZ2h0JyksIFwiIGFsaWduLWl0ZW1zOmZsZXgtZW5kOztsYWJlbDpyaWdodDtcIilcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2NzcyhcImN1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlCdXR0b25Db2xvcihldWlUaGVtZUNvbnRleHQsICdkaXNhYmxlZCcpLCBcIjtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkVGV4dCwgXCI7O2xhYmVsOmRpc2FibGVkO1wiKVxuICAgIH0sXG4gICAgbWFpbjoge1xuICAgICAgZXVpQ2FyZF9fbWFpbjogX3JlZjYsXG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgdmVydGljYWw6IF9yZWY1LFxuICAgICAgICBob3Jpem9udGFsOiBfcmVmNFxuICAgICAgfVxuICAgIH0sXG4gICAgY29udGVudDoge1xuICAgICAgZXVpQ2FyZF9fY29udGVudDogX3JlZjMsXG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgdmVydGljYWw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6dmVydGljYWw7XCIpLFxuICAgICAgICBob3Jpem9udGFsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJ2F1dG8nKSwgXCI7O2xhYmVsOmhvcml6b250YWw7XCIpXG4gICAgICB9XG4gICAgfSxcbiAgICBldWlDYXJkX19jaGlsZHJlbjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGFsZlNwYWNpbmcpLCBcIjs7bGFiZWw6ZXVpQ2FyZF9fY2hpbGRyZW47XCIpLFxuICAgIGV1aUNhcmRfX2Rlc2NyaXB0aW9uOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoYWxmU3BhY2luZyksIFwiOztsYWJlbDpldWlDYXJkX19kZXNjcmlwdGlvbjtcIiksXG4gICAgZXVpQ2FyZF9fZm9vdGVyOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1ncm93OjA7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsIHNwYWNpbmcpLCBcIjs7bGFiZWw6ZXVpQ2FyZF9fZm9vdGVyO1wiKSxcbiAgICB0b3A6IHtcbiAgICAgIGV1aUNhcmRfX3RvcDogLyojX19QVVJFX18qL2NzcyhcImZsZXgtZ3JvdzowO2ZvbnQtc2l6ZTowO3Bvc2l0aW9uOnJlbGF0aXZlO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgc3BhY2luZyksIFwiOztsYWJlbDpldWlDYXJkX190b3A7XCIpLFxuICAgICAgbGF5b3V0OiB7XG4gICAgICAgIHZlcnRpY2FsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOnZlcnRpY2FsO1wiKSxcbiAgICAgICAgaG9yaXpvbnRhbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICdhdXRvJyksIFwiOztsYWJlbDpob3Jpem9udGFsO1wiKVxuICAgICAgfSxcbiAgICAgIGRpc2FibGVkOiBfcmVmMlxuICAgIH0sXG4gICAgaW1hZ2U6IHtcbiAgICAgIGV1aUNhcmRfX2ltYWdlOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsIFwiY2FsYygxMDAlICsgKFwiLmNvbmNhdChwYWRkaW5nQW1vdW50LCBcIiAqIDIpKVwiKSksIFwiIFwiLCBsb2dpY2FsQ1NTKCdsZWZ0JywgXCItXCIuY29uY2F0KHBhZGRpbmdBbW91bnQpKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3RvcCcsIFwiLVwiLmNvbmNhdChwYWRkaW5nQW1vdW50KSksIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBcIi1cIi5jb25jYXQocGFkZGluZ0Ftb3VudCkpLCBsb2dpY2FsQ1NTKCdib3JkZXItdG9wLWxlZnQtcmFkaXVzJywgXCJjYWxjKFwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSwgXCIgLSBcIikuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIilcIikpLCBcIiBcIiwgbG9naWNhbHNbJ2JvcmRlci10b3AtcmlnaHQtcmFkaXVzJ10sIFwiOmNhbGMoXCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBcIiAtIFwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIpO2ltZ3tcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjt9O2xhYmVsOmV1aUNhcmRfX2ltYWdlO1wiKSxcbiAgICAgIHRyYW5zcGFyZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiYm9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiOztsYWJlbDp0cmFuc3BhcmVudDtcIilcbiAgICB9LFxuICAgIGljb246IHtcbiAgICAgIGV1aUNhcmRfX2ljb246IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpQ2FyZF9faWNvbjtcIiksXG4gICAgICB3aXRoSW1hZ2U6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygndG9wJywgJzUwJScpLCBcIiBcIiwgbG9naWNhbENTUygnbGVmdCcsICc1MCUnKSwgXCJ0cmFuc2Zvcm06dHJhbnNsYXRlKFxcbiAgICAgICAgICAtNTAlLFxcbiAgICAgICAgICBjYWxjKC01MCUgKyAtXCIsIHBhZGRpbmdBbW91bnQsIFwiKVxcbiAgICAgICAgKSFpbXBvcnRhbnQ7O2xhYmVsOndpdGhJbWFnZTtcIiksXG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgdmVydGljYWw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhhbGZTcGFjaW5nKSwgXCI7O2xhYmVsOnZlcnRpY2FsO1wiKSxcbiAgICAgICAgaG9yaXpvbnRhbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXJnaW4tcmlnaHQnLCBzcGFjaW5nKSwgXCI7O2xhYmVsOmhvcml6b250YWw7XCIpXG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInI4YWd6Zy1ldWlDYXJkX190ZXh0XCIsXG4gIHN0eWxlczogXCJmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtjdXJzb3I6aW5oZXJpdDtsYWJlbDpldWlDYXJkX190ZXh0O1wiXG59IDoge1xuICBuYW1lOiBcInI4YWd6Zy1ldWlDYXJkX190ZXh0XCIsXG4gIHN0eWxlczogXCJmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtjdXJzb3I6aW5oZXJpdDtsYWJlbDpldWlDYXJkX190ZXh0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUNhcmRUZXh0U3R5bGVzID0gZnVuY3Rpb24gZXVpQ2FyZFRleHRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlDYXJkX190ZXh0OiBfcmVmLFxuICAgIGludGVyYWN0aXZlOiAvKiNfX1BVUkVfXyovY3NzKFwib3V0bGluZS1vZmZzZXQ6XCIsIGV1aVRoZW1lLnNpemUueHhzLCBcIjsuZXVpQ2FyZDpob3ZlciAmLC5ldWlDYXJkOmZvY3VzICYsJjpob3ZlciwmOmZvY3Vze3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fVwiLCBldWlTdXBwb3J0c0hhcywgXCJ7b3V0bGluZTpub25lIWltcG9ydGFudDt9O2xhYmVsOmludGVyYWN0aXZlO1wiKSxcbiAgICBhbGlnbmVkOiB7XG4gICAgICBjZW50ZXI6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiOztsYWJlbDpjZW50ZXI7XCIpLFxuICAgICAgbGVmdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiOztsYWJlbDpsZWZ0O1wiKSxcbiAgICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ3JpZ2h0JyksIFwiOztsYWJlbDpyaWdodDtcIilcbiAgICB9LFxuICAgIGRpc2FibGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZFRleHQsIFwiOztsYWJlbDpkaXNhYmxlZDtcIilcbiAgfTtcbn07XG5leHBvcnQgdmFyIGV1aUNhcmRCZXRhQmFkZ2VTdHlsZXMgPSBmdW5jdGlvbiBldWlDYXJkQmV0YUJhZGdlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwgcGFkZGluZ1NpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgcGFkZGluZyA9IGV1aVBhZGRpbmdTaXplKGV1aVRoZW1lQ29udGV4dCwgcGFkZGluZ1NpemUpO1xuICByZXR1cm4ge1xuICAgIGhhc0JldGFCYWRnZTogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OnZpc2libGU7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctdG9wJywgXCJjYWxjKFwiLmNvbmNhdChwYWRkaW5nLCBcIiArIFwiKS5jb25jYXQoZXVpVGhlbWUuc2l6ZS5zLCBcIilcIikpLCBcIjs7bGFiZWw6aGFzQmV0YUJhZGdlO1wiKSxcbiAgICBldWlDYXJkX19iZXRhQmFkZ2VBbmNob3I6IC8qI19fUFVSRV9fKi9jc3MoXCJsaW5lLWhlaWdodDowO3Bvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCAnMCcpLCBcIiBcIiwgbG9naWNhbENTUygnbGVmdCcsICc1MCUnKSwgXCIgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNTAlKTt6LWluZGV4OjM7XCIsIGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsICdtaW4oMzAlLCAxMTJweCknKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsIFwiY2FsYygxMDAlIC0gKFwiLmNvbmNhdChwYWRkaW5nLCBcIiAqIDIpKVwiKSksIFwiOztsYWJlbDpldWlDYXJkX19iZXRhQmFkZ2VBbmNob3I7XCIpLFxuICAgIGV1aUNhcmRfX2JldGFCYWRnZTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpldWlDYXJkX19iZXRhQmFkZ2U7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiaWRcIiwgXCJjaGVja2VkXCIsIFwibGFiZWxcIiwgXCJvbkNoYW5nZVwiLCBcInR5cGVcIiwgXCJkaXNhYmxlZFwiLCBcInJlYWRPbmx5XCIsIFwiaW5kZXRlcm1pbmF0ZVwiLCBcImlucHV0UmVmXCIsIFwibGFiZWxQcm9wc1wiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VDb21iaW5lZFJlZnMsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgZXVpQ2hlY2tib3hTdHlsZXMgfSBmcm9tICcuL2NoZWNrYm94LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDaGVja2JveCA9IGZ1bmN0aW9uIEV1aUNoZWNrYm94KF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGlkID0gX3JlZi5pZCxcbiAgICBfcmVmJGNoZWNrZWQgPSBfcmVmLmNoZWNrZWQsXG4gICAgY2hlY2tlZCA9IF9yZWYkY2hlY2tlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNoZWNrZWQsXG4gICAgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgIG9uQ2hhbmdlID0gX3JlZi5vbkNoYW5nZSxcbiAgICB0eXBlID0gX3JlZi50eXBlLFxuICAgIF9yZWYkZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIGRpc2FibGVkID0gX3JlZiRkaXNhYmxlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGRpc2FibGVkLFxuICAgIF9yZWYkcmVhZE9ubHkgPSBfcmVmLnJlYWRPbmx5LFxuICAgIHJlYWRPbmx5ID0gX3JlZiRyZWFkT25seSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHJlYWRPbmx5LFxuICAgIF9yZWYkaW5kZXRlcm1pbmF0ZSA9IF9yZWYuaW5kZXRlcm1pbmF0ZSxcbiAgICBpbmRldGVybWluYXRlID0gX3JlZiRpbmRldGVybWluYXRlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaW5kZXRlcm1pbmF0ZSxcbiAgICBpbnB1dFJlZiA9IF9yZWYuaW5wdXRSZWYsXG4gICAgbGFiZWxQcm9wcyA9IF9yZWYubGFiZWxQcm9wcyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ2hlY2tib3gnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpQ2hlY2tib3hTdHlsZXMpO1xuICB2YXIgaW5wdXRTdHlsZXMgPSBbc3R5bGVzLmlucHV0LmV1aUNoZWNrYm94X19zcXVhcmUsICEhbGFiZWwgJiYgc3R5bGVzLmlucHV0Lmhhc0xhYmVsLCBkaXNhYmxlZCA/IGNoZWNrZWQgfHwgaW5kZXRlcm1pbmF0ZSA/IHN0eWxlcy5pbnB1dC5kaXNhYmxlZC5zZWxlY3RlZCA6IHN0eWxlcy5pbnB1dC5kaXNhYmxlZC51bnNlbGVjdGVkIDogY2hlY2tlZCB8fCBpbmRldGVybWluYXRlID8gc3R5bGVzLmlucHV0LmVuYWJsZWQuc2VsZWN0ZWQgOiBzdHlsZXMuaW5wdXQuZW5hYmxlZC51bnNlbGVjdGVkLCByZWFkT25seSAmJiBzdHlsZXMuaW5wdXQucmVhZE9ubHldO1xuICB2YXIgbGFiZWxDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ2hlY2tib3hfX2xhYmVsJywgbGFiZWxQcm9wcyA9PT0gbnVsbCB8fCBsYWJlbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYWJlbFByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciBsYWJlbFN0eWxlcyA9IFtzdHlsZXMubGFiZWwuZXVpQ2hlY2tib3hfX2xhYmVsLCBkaXNhYmxlZCA/IHN0eWxlcy5sYWJlbC5kaXNhYmxlZCA6IHN0eWxlcy5sYWJlbC5lbmFibGVkLCByZWFkT25seSAmJiBzdHlsZXMubGFiZWwucmVhZE9ubHksIGxhYmVsUHJvcHMgPT09IG51bGwgfHwgbGFiZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFiZWxQcm9wcy5jc3NdO1xuICB2YXIgaWNvblN0eWxlcyA9IFtzdHlsZXMuaW5wdXQuaWNvbi5ldWlDaGVja2JveF9faWNvbiwgaW5kZXRlcm1pbmF0ZSA/IHN0eWxlcy5pbnB1dC5pY29uLmluZGV0ZXJtaW5hdGUgOiBzdHlsZXMuaW5wdXQuaWNvbi5jaGVja107XG5cbiAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQvY2hlY2tib3gjaW5kZXRlcm1pbmF0ZV9zdGF0ZV9jaGVja2JveGVzXG4gIHZhciBzZXRJbmRldGVybWluYXRlU3RhdGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQpIGlucHV0LmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICB9LCBbaW5kZXRlcm1pbmF0ZV0pO1xuICB2YXIgcmVmcyA9IHVzZUNvbWJpbmVkUmVmcyhbaW5wdXRSZWYsIHNldEluZGV0ZXJtaW5hdGVTdGF0ZV0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY3NzOiBzdHlsZXMuZXVpQ2hlY2tib3gsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNzczogaW5wdXRTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBcImV1aUNoZWNrYm94X19zcXVhcmVcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICBjc3M6IGljb25TdHlsZXMsXG4gICAgdHlwZTogaW5kZXRlcm1pbmF0ZSA/ICdzdG9wRmlsbGVkJyA6IGNoZWNrZWQgPyAnY2hlY2snIDogJ2VtcHR5J1xuICB9KSwgX19fRW1vdGlvbkpTWChcImlucHV0XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IHN0eWxlcy5pbnB1dC5ldWlDaGVja2JveF9faW5wdXQsXG4gICAgY2xhc3NOYW1lOiBcImV1aUNoZWNrYm94X19pbnB1dFwiLFxuICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICBpZDogaWQsXG4gICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIHJlYWRPbmx5OiByZWFkT25seSxcbiAgICByZWY6IHJlZnNcbiAgfSwgcmVzdCkpKSwgbGFiZWwgJiYgX19fRW1vdGlvbkpTWChcImxhYmVsXCIsIF9leHRlbmRzKHt9LCBsYWJlbFByb3BzLCB7XG4gICAgY3NzOiBsYWJlbFN0eWxlcyxcbiAgICBjbGFzc05hbWU6IGxhYmVsQ2xhc3NlcyxcbiAgICBodG1sRm9yOiBpZFxuICB9KSwgbGFiZWwpKTtcbn07XG5FdWlDaGVja2JveC5wcm9wVHlwZXMgPSB7XG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAvLyBvdmVycmlkaW5nIHRvIG1ha2UgaXQgcmVxdWlyZWRcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5mdW5jLFxuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaW5kZXRlcm1pbmF0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxsYWJlbC8+XG4gICAgICovXG4gIGxhYmVsUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb3JtQ3VzdG9tQ29udHJvbFN0eWxlcywgZXVpRm9ybUN1c3RvbUNvbnRyb2xWYXJpYWJsZXMgfSBmcm9tICcuLi9mb3JtLnN0eWxlcyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxbThvYjliLXJlYWRPbmx5XCIsXG4gIHN0eWxlczogXCJjdXJzb3I6ZGVmYXVsdDtsYWJlbDpyZWFkT25seTtcIlxufSA6IHtcbiAgbmFtZTogXCIxbThvYjliLXJlYWRPbmx5XCIsXG4gIHN0eWxlczogXCJjdXJzb3I6ZGVmYXVsdDtsYWJlbDpyZWFkT25seTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInU1NGdsdi1pbmRldGVybWluYXRlXCIsXG4gIHN0eWxlczogXCJ0cmFuc2Zvcm06c2NhbGUoMC41KTtsYWJlbDppbmRldGVybWluYXRlO1wiXG59IDoge1xuICBuYW1lOiBcInU1NGdsdi1pbmRldGVybWluYXRlXCIsXG4gIHN0eWxlczogXCJ0cmFuc2Zvcm06c2NhbGUoMC41KTtsYWJlbDppbmRldGVybWluYXRlO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUNoZWNrYm94U3R5bGVzID0gZnVuY3Rpb24gZXVpQ2hlY2tib3hTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIGNvbnRyb2xTdHlsZXMgPSBldWlGb3JtQ3VzdG9tQ29udHJvbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgX2V1aUZvcm1DdXN0b21Db250cm9sID0gZXVpRm9ybUN1c3RvbUNvbnRyb2xWYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICB1bnNlbGVjdGVkQm9yZGVyID0gX2V1aUZvcm1DdXN0b21Db250cm9sLmNvbG9ycy51bnNlbGVjdGVkQm9yZGVyO1xuICByZXR1cm4ge1xuICAgIGV1aUNoZWNrYm94OiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMud3JhcHBlciwgXCI7bGFiZWw6ZXVpQ2hlY2tib3g7XCIpLFxuICAgIGlucHV0OiB7XG4gICAgICBldWlDaGVja2JveF9fc3F1YXJlOiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMuaW5wdXQuZmF1eElucHV0LCBcIiBib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLCBcIjs7bGFiZWw6ZXVpQ2hlY2tib3hfX3NxdWFyZTtcIiksXG4gICAgICBoYXNMYWJlbDogY29udHJvbFN0eWxlcy5pbnB1dC5oYXNMYWJlbCxcbiAgICAgIC8vIFNraXAgY3NzYGAgY2xhc3NOYW1lIGdlbmVyYXRpb25cbiAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgc2VsZWN0ZWQ6IC8qI19fUFVSRV9fKi9jc3MoY29udHJvbFN0eWxlcy5pbnB1dC5lbmFibGVkLnNlbGVjdGVkLCBcIjtsYWJlbDpzZWxlY3RlZDtcIiksXG4gICAgICAgIHVuc2VsZWN0ZWQ6IC8qI19fUFVSRV9fKi9jc3MoY29udHJvbFN0eWxlcy5pbnB1dC5lbmFibGVkLnVuc2VsZWN0ZWQsIFwiO2xhYmVsOnVuc2VsZWN0ZWQ7XCIpXG4gICAgICB9LFxuICAgICAgZGlzYWJsZWQ6IHtcbiAgICAgICAgc2VsZWN0ZWQ6IC8qI19fUFVSRV9fKi9jc3MoY29udHJvbFN0eWxlcy5pbnB1dC5kaXNhYmxlZC5zZWxlY3RlZCwgXCI7bGFiZWw6c2VsZWN0ZWQ7XCIpLFxuICAgICAgICB1bnNlbGVjdGVkOiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMuaW5wdXQuZGlzYWJsZWQudW5zZWxlY3RlZCwgXCI7bGFiZWw6dW5zZWxlY3RlZDtcIilcbiAgICAgIH0sXG4gICAgICAvLyBSZWFkb25seSBjaGVja2JveGVzIGFyZSB1c2VkIGJ5IEV1aU1hcmtkb3duRWRpdG9yXG4gICAgICAvLyBNYWludGFpbiB0aGUgaW5pdGlhbCBjb2xvciB0byBlbmZvcmNlIHRoYXQgY2xpY2tzIGFyZSBub3QgZG9pbmcgYW55dGhpbmdcbiAgICAgIHJlYWRPbmx5OiAvKiNfX1BVUkVfXyovY3NzKFwiJjpoYXMoaW5wdXQ6Zm9jdXMtdmlzaWJsZSl7b3V0bGluZTpcIiwgZXVpVGhlbWUuZm9jdXMud2lkdGgsIFwiIHNvbGlkIFwiLCB1bnNlbGVjdGVkQm9yZGVyLCBcIjt9JjpoYXMoaW5wdXQ6Zm9jdXMpe2JvcmRlci1jb2xvcjpcIiwgdW5zZWxlY3RlZEJvcmRlciwgXCI7fTtsYWJlbDpyZWFkT25seTtcIiksXG4gICAgICBpY29uOiB7XG4gICAgICAgIGV1aUNoZWNrYm94X19pY29uOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmV1aUNoZWNrYm94X19pY29uO1wiKSxcbiAgICAgICAgY2hlY2s6IC8qI19fUFVSRV9fKi9jc3MoY29udHJvbFN0eWxlcy5pbnB1dC5pY29uLCBcIiBzdHJva2U6Y3VycmVudENvbG9yOztsYWJlbDpjaGVjaztcIiksXG4gICAgICAgIGluZGV0ZXJtaW5hdGU6IF9yZWYyXG4gICAgICB9LFxuICAgICAgZXVpQ2hlY2tib3hfX2lucHV0OiAvKiNfX1BVUkVfXyovY3NzKGNvbnRyb2xTdHlsZXMuaW5wdXQuaGlkZGVuSW5wdXQsIFwiICZbcmVhZG9ubHlde2N1cnNvcjpkZWZhdWx0O307bGFiZWw6ZXVpQ2hlY2tib3hfX2lucHV0O1wiKVxuICAgIH0sXG4gICAgbGFiZWw6IHtcbiAgICAgIGV1aUNoZWNrYm94X19sYWJlbDogLyojX19QVVJFX18qL2Nzcyhjb250cm9sU3R5bGVzLmxhYmVsLmxhYmVsLCBcIjtsYWJlbDpldWlDaGVja2JveF9fbGFiZWw7XCIpLFxuICAgICAgZW5hYmxlZDogY29udHJvbFN0eWxlcy5sYWJlbC5lbmFibGVkLFxuICAgICAgZGlzYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3MoY29udHJvbFN0eWxlcy5sYWJlbC5kaXNhYmxlZCwgXCI7bGFiZWw6ZGlzYWJsZWQ7XCIpLFxuICAgICAgcmVhZE9ubHk6IF9yZWZcbiAgICB9XG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiZm9udFdlaWdodFwiXTtcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlLCBldWlUZXh0QnJlYWtXb3JkIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpVGl0bGUgfSBmcm9tICcuLi8uLi90aXRsZS90aXRsZS5zdHlsZXMnO1xuZXhwb3J0IHZhciBldWlGb3JtTGFiZWwgPSBmdW5jdGlvbiBldWlGb3JtTGFiZWwoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgLy8gRXhjbHVkZSB0aGUgZm9udFdlaWdodCBmcm9tIHRoZSB0aXRsZSwgc2luY2Ugd2UncmUgc2V0dGluZyBvdXIgb3duIGxhdGVyXG4gIHZhciBfZXVpVGl0bGUgPSBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJyksXG4gICAgXyA9IF9ldWlUaXRsZS5mb250V2VpZ2h0LFxuICAgIF90aXRsZVN0eWxlcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfZXVpVGl0bGUsIF9leGNsdWRlZCk7XG4gIC8vIFNpbmNlIHdlJ3JlIG5vdCByZXR1cm5pbmcgYSBjc3NgYCBzdHJpbmcgKHRvIGF2b2lkIGdlbmVyYXRpbmcgYW4gZXh0cmEgRW1vdGlvblxuICAvLyBjbGFzc05hbWUpLCB3ZSBuZWVkIHRvIG1hbnVhbGx5IHNlcmlhbGl6ZSB0aGUgc3R5bGUgb2JqZWN0IGludG8gYSBzdHJpbmdcbiAgdmFyIHRpdGxlU3R5bGVzID0gc2VyaWFsaXplU3R5bGVzKFtfdGl0bGVTdHlsZXNdKS5zdHlsZXM7XG4gIHJldHVybiBcIlxcbiAgICBcIi5jb25jYXQodGl0bGVTdHlsZXMsIFwiXFxuICAgIGZvbnQtd2VpZ2h0OiBcIikuY29uY2F0KGV1aVRoZW1lLmZvbnQud2VpZ2h0LnNlbWlCb2xkLCBcIjtcXG4gICAgXCIpLmNvbmNhdChldWlUZXh0QnJlYWtXb3JkKCksIFwiXFxuICBcIik7XG59O1xuZXhwb3J0IHZhciBldWlGb3JtTGFiZWxTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtTGFiZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlGb3JtTGFiZWw6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9ybUxhYmVsKGV1aVRoZW1lQ29udGV4dCksIFwiIGRpc3BsYXk6aW5saW5lLWJsb2NrO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOmNvbG9yIFwiLCBldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIjt9O2xhYmVsOmV1aUZvcm1MYWJlbDtcIiksXG4gICAgLy8gU2tpcCBjc3NgYCB0byBhdm9pZCBnZW5lcmF0aW5nIGFuIGV4dHJhIEVtb3Rpb24gY2xhc3NOYW1lXG4gICAgLy8gVXNlIDp3aGVyZSB0byByZWR1Y2Ugc3BlY2lmaWNpdHkgJiBtYWtlIHRoZSBDU1MgZWFzaWVyIHRvIG92ZXJyaWRlIGJ5IHByZXBlbmQvYXBwZW5kIG5vZGVzXG4gICAgbm90RGlzYWJsZWQ6IFwiXFxuICAgICAgJjp3aGVyZShbZm9yXSkge1xcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgIH1cXG4gICAgXCIsXG4gICAgaW52YWxpZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGFuZ2VyLCBcIjs7bGFiZWw6aW52YWxpZDtcIiksXG4gICAgLy8gRm9jdXNlZCBzdGF0ZSBzaG91bGQgb3ZlcnJpZGUgaW52YWxpZCBzdGF0ZVxuICAgIGZvY3VzZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIFwiOztsYWJlbDpmb2N1c2VkO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImd1dHRlclNpemVcIiwgXCJhbGlnbkl0ZW1zXCIsIFwicmVzcG9uc2l2ZVwiLCBcImp1c3RpZnlDb250ZW50XCIsIFwiZGlyZWN0aW9uXCIsIFwid3JhcFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpRmxleEdyb3VwU3R5bGVzIH0gZnJvbSAnLi9mbGV4X2dyb3VwLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBHVVRURVJfU0laRVMgPSBbJ25vbmUnLCAneHMnLCAncycsICdtJywgJ2wnLCAneGwnXTtcbmV4cG9ydCB2YXIgQUxJR05fSVRFTVMgPSBbJ3N0cmV0Y2gnLCAnZmxleFN0YXJ0JywgJ2ZsZXhFbmQnLCAnY2VudGVyJywgJ2Jhc2VsaW5lJ107XG5leHBvcnQgdmFyIEpVU1RJRllfQ09OVEVOVFMgPSBbJ2ZsZXhTdGFydCcsICdmbGV4RW5kJywgJ2NlbnRlcicsICdzcGFjZUJldHdlZW4nLCAnc3BhY2VBcm91bmQnLCAnc3BhY2VFdmVubHknXTtcbmV4cG9ydCB2YXIgRElSRUNUSU9OUyA9IFsncm93JywgJ3Jvd1JldmVyc2UnLCAnY29sdW1uJywgJ2NvbHVtblJldmVyc2UnXTtcbnZhciBFdWlGbGV4R3JvdXBJbnRlcm5hbCA9IGZ1bmN0aW9uIEV1aUZsZXhHcm91cEludGVybmFsKF9yZWYsIHJlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICBjb21wb25lbnQgPSBfcmVmJGNvbXBvbmVudCA9PT0gdm9pZCAwID8gJ2RpdicgOiBfcmVmJGNvbXBvbmVudCxcbiAgICBfcmVmJGd1dHRlclNpemUgPSBfcmVmLmd1dHRlclNpemUsXG4gICAgZ3V0dGVyU2l6ZSA9IF9yZWYkZ3V0dGVyU2l6ZSA9PT0gdm9pZCAwID8gJ2wnIDogX3JlZiRndXR0ZXJTaXplLFxuICAgIF9yZWYkYWxpZ25JdGVtcyA9IF9yZWYuYWxpZ25JdGVtcyxcbiAgICBhbGlnbkl0ZW1zID0gX3JlZiRhbGlnbkl0ZW1zID09PSB2b2lkIDAgPyAnc3RyZXRjaCcgOiBfcmVmJGFsaWduSXRlbXMsXG4gICAgX3JlZiRyZXNwb25zaXZlID0gX3JlZi5yZXNwb25zaXZlLFxuICAgIHJlc3BvbnNpdmUgPSBfcmVmJHJlc3BvbnNpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHJlc3BvbnNpdmUsXG4gICAgX3JlZiRqdXN0aWZ5Q29udGVudCA9IF9yZWYuanVzdGlmeUNvbnRlbnQsXG4gICAganVzdGlmeUNvbnRlbnQgPSBfcmVmJGp1c3RpZnlDb250ZW50ID09PSB2b2lkIDAgPyAnZmxleFN0YXJ0JyA6IF9yZWYkanVzdGlmeUNvbnRlbnQsXG4gICAgX3JlZiRkaXJlY3Rpb24gPSBfcmVmLmRpcmVjdGlvbixcbiAgICBkaXJlY3Rpb24gPSBfcmVmJGRpcmVjdGlvbiA9PT0gdm9pZCAwID8gJ3JvdycgOiBfcmVmJGRpcmVjdGlvbixcbiAgICBfcmVmJHdyYXAgPSBfcmVmLndyYXAsXG4gICAgd3JhcCA9IF9yZWYkd3JhcCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHdyYXAsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpRmxleEdyb3VwU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRmxleEdyb3VwLCByZXNwb25zaXZlICYmICFkaXJlY3Rpb24uaW5jbHVkZXMoJ2NvbHVtbicpICYmIHN0eWxlcy5yZXNwb25zaXZlLCB3cmFwICYmIHN0eWxlcy53cmFwLCBzdHlsZXMuZ3V0dGVyU2l6ZXNbZ3V0dGVyU2l6ZV0sIHN0eWxlcy5qdXN0aWZ5Q29udGVudFtqdXN0aWZ5Q29udGVudF0sIHN0eWxlcy5hbGlnbkl0ZW1zW2FsaWduSXRlbXNdLCBzdHlsZXMuZGlyZWN0aW9uW2RpcmVjdGlvbl1dO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZsZXhHcm91cCcsIGNsYXNzTmFtZSk7XG5cbiAgLy8gQ2FzdCBgY29tcG9uZW50YCB0byBGdW5jdGlvbkNvbXBvbmVudCB0byBzaW1wbGlmeSBpdHMgdHlwZS5cbiAgLy8gTm90ZSB0aGF0IEZ1bmN0aW9uQ29tcG9uZW50IHR5cGUgaXMgdXNlZCBoZXJlIGZvciBwdXJlbHkgdHlwaW5nXG4gIC8vIGNvbnZlbmllbmNlIHNpbmNlIHdlIHNwZWNpZnkgdGhlIHJldHVybiB0eXBlIGFib3ZlLCBhbmQgZnVuY3Rpb25cbiAgLy8gY29tcG9uZW50cyBkb24ndCBzdXBwb3J0IGByZWZgcywgYnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIgaW4gdGhpcyBjYXNlLlxuICB2YXIgQ29tcG9uZW50ID0gY29tcG9uZW50O1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChDb21wb25lbnQsIF9leHRlbmRzKHt9LCByZXN0LCB7XG4gICAgcmVmOiByZWYsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0pKTtcbn07XG5cbi8vIENhc3QgZm9yd2FyZFJlZiByZXR1cm4gdHlwZSB0byB3b3JrIHdpdGggdGhlIGdlbmVyaWMgVENvbXBvbmVudCB0eXBlXG4vLyBhbmQgbm90IGZhbGxiYWNrIHRvIGltcGxpY2l0IGFueSB0eXBpbmdcbmV4cG9ydCB2YXIgRXVpRmxleEdyb3VwID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoRXVpRmxleEdyb3VwSW50ZXJuYWwpO1xuRXVpRmxleEdyb3VwLmRpc3BsYXlOYW1lID0gJ0V1aUZsZXhHcm91cCc7IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aU1heEJyZWFrcG9pbnQsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJuNGhka2ctY29sdW1uUmV2ZXJzZVwiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2U7bGFiZWw6Y29sdW1uUmV2ZXJzZTtcIlxufSA6IHtcbiAgbmFtZTogXCJuNGhka2ctY29sdW1uUmV2ZXJzZVwiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2U7bGFiZWw6Y29sdW1uUmV2ZXJzZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImxsOGttcS1jb2x1bW5cIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsYWJlbDpjb2x1bW47XCJcbn0gOiB7XG4gIG5hbWU6IFwibGw4a21xLWNvbHVtblwiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246Y29sdW1uO2xhYmVsOmNvbHVtbjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjF2bml6bzEtcm93UmV2ZXJzZVwiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7bGFiZWw6cm93UmV2ZXJzZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxdm5pem8xLXJvd1JldmVyc2VcIixcbiAgc3R5bGVzOiBcImZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2xhYmVsOnJvd1JldmVyc2U7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxNW12am1vLXJvd1wiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246cm93O2xhYmVsOnJvdztcIlxufSA6IHtcbiAgbmFtZTogXCIxNW12am1vLXJvd1wiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246cm93O2xhYmVsOnJvdztcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY1ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIm5xNWo5dS1iYXNlbGluZVwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6YmFzZWxpbmU7bGFiZWw6YmFzZWxpbmU7XCJcbn0gOiB7XG4gIG5hbWU6IFwibnE1ajl1LWJhc2VsaW5lXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpiYXNlbGluZTtsYWJlbDpiYXNlbGluZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY2ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjgzOTFkYi1jZW50ZXJcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmNlbnRlcjtsYWJlbDpjZW50ZXI7XCJcbn0gOiB7XG4gIG5hbWU6IFwiODM5MWRiLWNlbnRlclwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6Y2VudGVyO2xhYmVsOmNlbnRlcjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWY3ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE0ajZlcjQtZmxleEVuZFwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6ZmxleC1lbmQ7bGFiZWw6ZmxleEVuZDtcIlxufSA6IHtcbiAgbmFtZTogXCIxNGo2ZXI0LWZsZXhFbmRcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmZsZXgtZW5kO2xhYmVsOmZsZXhFbmQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmOCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxbW10anZiLWZsZXhTdGFydFwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6ZmxleC1zdGFydDtsYWJlbDpmbGV4U3RhcnQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMW1tdGp2Yi1mbGV4U3RhcnRcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bGFiZWw6ZmxleFN0YXJ0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjkgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXV3YzRvai1zdHJldGNoXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpzdHJldGNoO2xhYmVsOnN0cmV0Y2g7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXV3YzRvai1zdHJldGNoXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpzdHJldGNoO2xhYmVsOnN0cmV0Y2g7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMTAgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMW0xYnlxLWNlbnRlclwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OmNlbnRlcjtsYWJlbDpjZW50ZXI7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMW0xYnlxLWNlbnRlclwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OmNlbnRlcjtsYWJlbDpjZW50ZXI7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMTEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTZsa3U1NC1zcGFjZUFyb3VuZFwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDtsYWJlbDpzcGFjZUFyb3VuZDtcIlxufSA6IHtcbiAgbmFtZTogXCIxNmxrdTU0LXNwYWNlQXJvdW5kXCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kO2xhYmVsOnNwYWNlQXJvdW5kO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjEyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFoMTZiZ3Itc3BhY2VCZXR3ZWVuXCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsYWJlbDpzcGFjZUJldHdlZW47XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWgxNmJnci1zcGFjZUJldHdlZW5cIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xhYmVsOnNwYWNlQmV0d2VlbjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYxMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJqeWt3c2ktc3BhY2VFdmVubHlcIixcbiAgc3R5bGVzOiBcImp1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHk7bGFiZWw6c3BhY2VFdmVubHk7XCJcbn0gOiB7XG4gIG5hbWU6IFwianlrd3NpLXNwYWNlRXZlbmx5XCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtZXZlbmx5O2xhYmVsOnNwYWNlRXZlbmx5O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjE0ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFuZnVxd3ctZmxleEVuZFwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2xhYmVsOmZsZXhFbmQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMW5mdXF3dy1mbGV4RW5kXCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bGFiZWw6ZmxleEVuZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYxNSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJlOW1paXYtZmxleFN0YXJ0XCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtsYWJlbDpmbGV4U3RhcnQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiZTltaWl2LWZsZXhTdGFydFwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bGFiZWw6ZmxleFN0YXJ0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjE2ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInFnNXljOS13cmFwXCIsXG4gIHN0eWxlczogXCJmbGV4LXdyYXA6d3JhcDtsYWJlbDp3cmFwO1wiXG59IDoge1xuICBuYW1lOiBcInFnNXljOS13cmFwXCIsXG4gIHN0eWxlczogXCJmbGV4LXdyYXA6d3JhcDtsYWJlbDp3cmFwO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjE3ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjRxdXhtNC1ldWlGbGV4R3JvdXBcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpzdHJldGNoO2ZsZXgtZ3JvdzoxO2xhYmVsOmV1aUZsZXhHcm91cDtcIlxufSA6IHtcbiAgbmFtZTogXCI0cXV4bTQtZXVpRmxleEdyb3VwXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6c3RyZXRjaDtmbGV4LWdyb3c6MTtsYWJlbDpldWlGbGV4R3JvdXA7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpRmxleEdyb3VwU3R5bGVzID0gZnVuY3Rpb24gZXVpRmxleEdyb3VwU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpRmxleEdyb3VwOiBfcmVmMTcsXG4gICAgcmVzcG9uc2l2ZTogLyojX19QVVJFX18qL2NzcyhldWlNYXhCcmVha3BvaW50KGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCJ7ZmxleC13cmFwOndyYXA7Jj4uZXVpRmxleEl0ZW17XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgZmxleC1iYXNpczoxMDAlO319O2xhYmVsOnJlc3BvbnNpdmU7XCIpLFxuICAgIHdyYXA6IF9yZWYxNixcbiAgICBndXR0ZXJTaXplczoge1xuICAgICAgbm9uZTogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpub25lO1wiKSxcbiAgICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLnhzLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgICAgczogLyojX19QVVJFX18qL2NzcyhcImdhcDpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6cztcIiksXG4gICAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwiZ2FwOlwiLCBldWlUaGVtZS5zaXplLmJhc2UsIFwiOztsYWJlbDptO1wiKSxcbiAgICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUubCwgXCI7O2xhYmVsOmw7XCIpLFxuICAgICAgeGw6IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUueHhsLCBcIjs7bGFiZWw6eGw7XCIpXG4gICAgfSxcbiAgICBqdXN0aWZ5Q29udGVudDoge1xuICAgICAgZmxleFN0YXJ0OiBfcmVmMTUsXG4gICAgICBmbGV4RW5kOiBfcmVmMTQsXG4gICAgICBzcGFjZUV2ZW5seTogX3JlZjEzLFxuICAgICAgc3BhY2VCZXR3ZWVuOiBfcmVmMTIsXG4gICAgICBzcGFjZUFyb3VuZDogX3JlZjExLFxuICAgICAgY2VudGVyOiBfcmVmMTBcbiAgICB9LFxuICAgIGFsaWduSXRlbXM6IHtcbiAgICAgIHN0cmV0Y2g6IF9yZWY5LFxuICAgICAgZmxleFN0YXJ0OiBfcmVmOCxcbiAgICAgIGZsZXhFbmQ6IF9yZWY3LFxuICAgICAgY2VudGVyOiBfcmVmNixcbiAgICAgIGJhc2VsaW5lOiBfcmVmNVxuICAgIH0sXG4gICAgZGlyZWN0aW9uOiB7XG4gICAgICByb3c6IF9yZWY0LFxuICAgICAgcm93UmV2ZXJzZTogX3JlZjMsXG4gICAgICBjb2x1bW46IF9yZWYyLFxuICAgICAgY29sdW1uUmV2ZXJzZTogX3JlZlxuICAgIH1cbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImdyb3dcIiwgXCJjb21wb25lbnRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGV1aUZsZXhJdGVtU3R5bGVzIGFzIHN0eWxlcyB9IGZyb20gJy4vZmxleF9pdGVtLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIFZBTElEX0dST1dfVkFMVUVTID0gW251bGwsIHVuZGVmaW5lZCwgdHJ1ZSwgZmFsc2UsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXTtcbnZhciBFdWlGbGV4SXRlbUludGVybmFsID0gZnVuY3Rpb24gRXVpRmxleEl0ZW1JbnRlcm5hbChfcmVmLCByZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJGdyb3cgPSBfcmVmLmdyb3csXG4gICAgZ3JvdyA9IF9yZWYkZ3JvdyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkZ3JvdyxcbiAgICBfcmVmJGNvbXBvbmVudCA9IF9yZWYuY29tcG9uZW50LFxuICAgIGNvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYkY29tcG9uZW50LFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoVkFMSURfR1JPV19WQUxVRVMuaW5kZXhPZihncm93KSA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb3AgYGdyb3dgIHBhc3NlZCB0byBgRXVpRmxleEl0ZW1gIG11c3QgYmUgYSBib29sZWFuIG9yIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAxMCwgcmVjZWl2ZWQgYFwiLmNvbmNhdChncm93LCBcImBcIikpO1xuICAgIH1cbiAgfSwgW2dyb3ddKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRmxleEl0ZW0sICFncm93ID8gc3R5bGVzLmdyb3daZXJvIDogc3R5bGVzLmdyb3csIGdyb3cgJiYgKHR5cGVvZiBncm93ID09PSAnbnVtYmVyJyA/IHN0eWxlcy5ncm93U2l6ZXNbZ3Jvd10gOiBzdHlsZXMuZ3Jvd1NpemVzWycxJ10pXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGbGV4SXRlbScsIGNsYXNzTmFtZSk7XG5cbiAgLy8gQ2FzdCBgY29tcG9uZW50YCB0byBGdW5jdGlvbkNvbXBvbmVudCB0byBzaW1wbGlmeSBpdHMgdHlwZS5cbiAgLy8gTm90ZSB0aGF0IEZ1bmN0aW9uQ29tcG9uZW50IHR5cGUgaXMgdXNlZCBoZXJlIGZvciBwdXJlbHkgdHlwaW5nXG4gIC8vIGNvbnZlbmllbmNlIHNpbmNlIHdlIHNwZWNpZnkgdGhlIHJldHVybiB0eXBlIGFib3ZlLCBhbmQgZnVuY3Rpb25cbiAgLy8gY29tcG9uZW50cyBkb24ndCBzdXBwb3J0IGByZWZgcywgYnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIgaW4gdGhpcyBjYXNlLlxuICB2YXIgQ29tcG9uZW50ID0gY29tcG9uZW50O1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChDb21wb25lbnQsIF9leHRlbmRzKHt9LCByZXN0LCB7XG4gICAgcmVmOiByZWYsXG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0pLCBjaGlsZHJlbik7XG59O1xuXG4vLyBDYXN0IGZvcndhcmRSZWYgcmV0dXJuIHR5cGUgdG8gd29yayB3aXRoIHRoZSBnZW5lcmljIFRDb21wb25lbnQgdHlwZVxuLy8gYW5kIG5vdCBmYWxsYmFjayB0byBpbXBsaWNpdCBhbnkgdHlwaW5nXG5leHBvcnQgdmFyIEV1aUZsZXhJdGVtID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoRXVpRmxleEl0ZW1JbnRlcm5hbCk7XG5FdWlGbGV4SXRlbS5kaXNwbGF5TmFtZSA9ICdFdWlGbGV4SXRlbSc7IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB2YXIgZXVpRmxleEl0ZW1TdHlsZXMgPSB7XG4gIC8vIDEuIEFsbG93IEV1aVBhbmVscyB0byBleHBhbmQgdG8gZmlsbCB0aGUgaXRlbS5cbiAgZXVpRmxleEl0ZW06IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICBuYW1lOiBcIjE5aGY0NG4tZXVpRmxleEl0ZW1cIixcbiAgICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsYWJlbDpldWlGbGV4SXRlbTtcIlxuICB9IDoge1xuICAgIG5hbWU6IFwiMTloZjQ0bi1ldWlGbGV4SXRlbVwiLFxuICAgIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2xhYmVsOmV1aUZsZXhJdGVtO1wiLFxuICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICB9LFxuICBncm93WmVybzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgIG5hbWU6IFwiMXBhdDduMC1ncm93WmVyb1wiLFxuICAgIHN0eWxlczogXCJmbGV4LWdyb3c6MDtmbGV4LWJhc2lzOmF1dG87bGFiZWw6Z3Jvd1plcm87XCJcbiAgfSA6IHtcbiAgICBuYW1lOiBcIjFwYXQ3bjAtZ3Jvd1plcm9cIixcbiAgICBzdHlsZXM6IFwiZmxleC1ncm93OjA7ZmxleC1iYXNpczphdXRvO2xhYmVsOmdyb3daZXJvO1wiLFxuICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICB9LFxuICBncm93OiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgbmFtZTogXCJ0cjR3ZXItZ3Jvd1wiLFxuICAgIHN0eWxlczogXCJmbGV4LWJhc2lzOjAlO2xhYmVsOmdyb3c7XCJcbiAgfSA6IHtcbiAgICBuYW1lOiBcInRyNHdlci1ncm93XCIsXG4gICAgc3R5bGVzOiBcImZsZXgtYmFzaXM6MCU7bGFiZWw6Z3JvdztcIixcbiAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgfSxcbiAgZ3Jvd1NpemVzOiB7XG4gICAgJzEnOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgICBuYW1lOiBcIjF2NnV5b2otMVwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOjE7XCJcbiAgICB9IDoge1xuICAgICAgbmFtZTogXCIxdjZ1eW9qLTFcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDoxO1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfSxcbiAgICAnMic6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwiMWw4Nnh4aC0yXCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjI7bGFiZWw6MjtcIlxuICAgIH0gOiB7XG4gICAgICBuYW1lOiBcIjFsODZ4eGgtMlwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3JvdzoyO2xhYmVsOjI7XCIsXG4gICAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgICB9LFxuICAgICczJzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgICAgbmFtZTogXCIxc2w3OWF5LTNcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6MztsYWJlbDozO1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwiMXNsNzlheS0zXCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjM7bGFiZWw6MztcIixcbiAgICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICAgIH0sXG4gICAgJzQnOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgICBuYW1lOiBcIms0cG5zZy00XCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjQ7bGFiZWw6NDtcIlxuICAgIH0gOiB7XG4gICAgICBuYW1lOiBcIms0cG5zZy00XCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjQ7bGFiZWw6NDtcIixcbiAgICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICAgIH0sXG4gICAgJzUnOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgICBuYW1lOiBcIjFjeDVmeHMtNVwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo1O2xhYmVsOjU7XCJcbiAgICB9IDoge1xuICAgICAgbmFtZTogXCIxY3g1ZnhzLTVcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6NTtsYWJlbDo1O1wiLFxuICAgICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gICAgfSxcbiAgICAnNic6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICAgIG5hbWU6IFwiMWluOWlpeS02XCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93OjY7bGFiZWw6NjtcIlxuICAgIH0gOiB7XG4gICAgICBuYW1lOiBcIjFpbjlpaXktNlwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo2O2xhYmVsOjY7XCIsXG4gICAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgICB9LFxuICAgICc3JzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgICAgbmFtZTogXCJmdmgzbnotN1wiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo3O2xhYmVsOjc7XCJcbiAgICB9IDoge1xuICAgICAgbmFtZTogXCJmdmgzbnotN1wiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo3O2xhYmVsOjc7XCIsXG4gICAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgICB9LFxuICAgICc4JzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgICAgbmFtZTogXCJmamRnemMtOFwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo4O2xhYmVsOjg7XCJcbiAgICB9IDoge1xuICAgICAgbmFtZTogXCJmamRnemMtOFwiLFxuICAgICAgc3R5bGVzOiBcImZsZXgtZ3Jvdzo4O2xhYmVsOjg7XCIsXG4gICAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgICB9LFxuICAgICc5JzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgICAgbmFtZTogXCIxdHlyOHA2LTlcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6OTtsYWJlbDo5O1wiXG4gICAgfSA6IHtcbiAgICAgIG5hbWU6IFwiMXR5cjhwNi05XCIsXG4gICAgICBzdHlsZXM6IFwiZmxleC1ncm93Ojk7bGFiZWw6OTtcIixcbiAgICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICAgIH0sXG4gICAgJzEwJzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgICAgbmFtZTogXCJuN3BvbGYtMTBcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6MTA7bGFiZWw6MTA7XCJcbiAgICB9IDoge1xuICAgICAgbmFtZTogXCJuN3BvbGYtMTBcIixcbiAgICAgIHN0eWxlczogXCJmbGV4LWdyb3c6MTA7bGFiZWw6MTA7XCIsXG4gICAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgICB9XG4gIH1cbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIEZvcm1Db250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe1xuICBkZWZhdWx0RnVsbFdpZHRoOiBmYWxzZVxufSk7XG5leHBvcnQgZnVuY3Rpb24gdXNlRm9ybUNvbnRleHQoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KEZvcm1Db250ZXh0KTtcbn0iLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmZ1bmN0aW9uIGlzTXV0YWJsZVJlZihyZWYpIHtcbiAgcmV0dXJuIHJlZiAhPSBudWxsICYmIHJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpO1xufVxuXG4vKipcbiAqIFRoZSBgRXVpVmFsaWRhdGFibGVDb250cm9sYCBjb21wb25lbnQgc2hvdWxkIGJlIHVzZWQgaW4gc2NlbmFyaW9zIHdoZXJlXG4gKiB3ZSBjYW4gcmVuZGVyIHRoZSB2YWxpZGF0ZWQgYDxpbnB1dD5gIGFzIGl0cyBkaXJlY3QgY2hpbGQuXG4gKi9cblxuZXhwb3J0IHZhciBFdWlWYWxpZGF0YWJsZUNvbnRyb2wgPSBmdW5jdGlvbiBFdWlWYWxpZGF0YWJsZUNvbnRyb2woX3JlZikge1xuICB2YXIgaXNJbnZhbGlkID0gX3JlZi5pc0ludmFsaWQsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICAvLyBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlIHN0YXRlIGFuZCBub3QgYSByZWYgdG8gY2F1c2UgYSByZXJlbmRlci9zZXQgaW52YWxpZCBzdGF0ZSBvbiBpbml0aWFsIG1vdW50XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBjb250cm9sID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRDb250cm9sID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIGNoaWxkID0gQ2hpbGRyZW4ub25seShjaGlsZHJlbik7XG4gIHZhciBjaGlsZFJlZiA9IGNoaWxkLnJlZjtcbiAgdmFyIHJlcGxhY2VkUmVmID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICBzZXRDb250cm9sKGVsZW1lbnQpO1xuXG4gICAgLy8gQ2FsbCB0aGUgb3JpZ2luYWwgcmVmLCBpZiBhbnlcbiAgICBpZiAodHlwZW9mIGNoaWxkUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjaGlsZFJlZihlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKGlzTXV0YWJsZVJlZihjaGlsZFJlZikpIHtcbiAgICAgIGNoaWxkUmVmLmN1cnJlbnQgPSBlbGVtZW50O1xuICAgIH1cbiAgfSwgW2NoaWxkUmVmXSk7XG4gIHVzZVNldENvbnRyb2xWYWxpZGl0eSh7XG4gICAgY29udHJvbEVsOiBjb250cm9sLFxuICAgIGlzSW52YWxpZDogaXNJbnZhbGlkXG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZCwge1xuICAgIHJlZjogcmVwbGFjZWRSZWYsXG4gICAgJ2FyaWEtaW52YWxpZCc6IGlzSW52YWxpZCB8fCBjaGlsZC5wcm9wc1snYXJpYS1pbnZhbGlkJ11cbiAgfSk7XG59O1xuXG4vKipcbiAqIFRoZSBgVXNlRXVpVmFsaWRhdGFibGVDb250cm9sYCBob29rIHNob3VsZCBiZSB1c2VkIGluIHNjZW5hcmlvcyB3aGVyZVxuICogd2UgKmNhbm5vdCogY29udHJvbCB3aGVyZSB0aGUgdmFsaWRhdGVkIGA8aW5wdXQ+YCBpcyByZW5kZXJlZCAoZS5nLiwgUmVhY3REYXRlUGlja2VyKVxuICogYW5kIGluc3RlYWQgbmVlZCB0byBhY2Nlc3MgdGhlIGlucHV0IHZpYSBhIHJlZiBhbmQgcGFzcyB0aGUgZWxlbWVudCBpbiBkaXJlY3RseVxuICovXG5FdWlWYWxpZGF0YWJsZUNvbnRyb2wucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcmVmOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWRcbn07XG5leHBvcnQgdmFyIHVzZUV1aVZhbGlkYXRhYmxlQ29udHJvbCA9IGZ1bmN0aW9uIHVzZUV1aVZhbGlkYXRhYmxlQ29udHJvbChfcmVmMikge1xuICB2YXIgaXNJbnZhbGlkID0gX3JlZjIuaXNJbnZhbGlkLFxuICAgIGNvbnRyb2xFbCA9IF9yZWYyLmNvbnRyb2xFbDtcbiAgdXNlU2V0Q29udHJvbFZhbGlkaXR5KHtcbiAgICBjb250cm9sRWw6IGNvbnRyb2xFbCxcbiAgICBpc0ludmFsaWQ6IGlzSW52YWxpZFxuICB9KTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWNvbnRyb2xFbCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgaXNJbnZhbGlkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGNvbnRyb2xFbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsIFN0cmluZyhpc0ludmFsaWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udHJvbEVsLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJyk7XG4gICAgfVxuICB9LCBbaXNJbnZhbGlkLCBjb250cm9sRWxdKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgYHNldEN1c3RvbVZhbGlkaXR5YCBoZWxwZXJcbiAqL1xudmFyIHVzZVNldENvbnRyb2xWYWxpZGl0eSA9IGZ1bmN0aW9uIHVzZVNldENvbnRyb2xWYWxpZGl0eShfcmVmMykge1xuICB2YXIgY29udHJvbEVsID0gX3JlZjMuY29udHJvbEVsLFxuICAgIGlzSW52YWxpZCA9IF9yZWYzLmlzSW52YWxpZDtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udHJvbEVsID09IG51bGwgfHwgdHlwZW9mIGNvbnRyb2xFbC5zZXRDdXN0b21WYWxpZGl0eSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNJbnZhbGlkKSB7XG4gICAgICBjb250cm9sRWwuc2V0Q3VzdG9tVmFsaWRpdHkoJ0ludmFsaWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udHJvbEVsLnNldEN1c3RvbVZhbGlkaXR5KCcnKTtcbiAgICB9XG4gIH0sIFtpc0ludmFsaWQsIGNvbnRyb2xFbF0pO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImlucHV0SWRcIiwgXCJjbGFzc05hbWVcIiwgXCJjaGlsZHJlblwiLCBcImljb25cIiwgXCJpY29uc1Bvc2l0aW9uXCIsIFwiY2xlYXJcIiwgXCJpc0Ryb3Bkb3duXCIsIFwiaXNMb2FkaW5nXCIsIFwiaXNJbnZhbGlkXCIsIFwiaXNEaXNhYmxlZFwiLCBcInJlYWRPbmx5XCIsIFwiY29tcHJlc3NlZFwiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIiwgXCJpc0RlbGltaXRlZFwiLCBcIndyYXBwZXJQcm9wc1wiLCBcImZ1bGxXaWR0aFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpRm9ybUxhYmVsIH0gZnJvbSAnLi4vZm9ybV9sYWJlbCc7XG5pbXBvcnQgeyB1c2VGb3JtQ29udGV4dCB9IGZyb20gJy4uL2V1aV9mb3JtX2NvbnRleHQnO1xuaW1wb3J0IHsgZ2V0SWNvbkFmZm9yZGFuY2VTdHlsZXMsIGlzUmlnaHRTaWRlSWNvbiB9IGZyb20gJy4vX251bV9pY29ucyc7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dEljb25zIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2ljb25zJztcbmltcG9ydCB7IGV1aUZvcm1Db250cm9sTGF5b3V0U3R5bGVzLCBldWlGb3JtQ29udHJvbExheW91dFNpZGVOb2RlU3R5bGVzIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtQ29udHJvbExheW91dCA9IGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0KHByb3BzKSB7XG4gIHZhciBfdXNlRm9ybUNvbnRleHQgPSB1c2VGb3JtQ29udGV4dCgpLFxuICAgIGRlZmF1bHRGdWxsV2lkdGggPSBfdXNlRm9ybUNvbnRleHQuZGVmYXVsdEZ1bGxXaWR0aDtcbiAgdmFyIGlucHV0SWQgPSBwcm9wcy5pbnB1dElkLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGljb24gPSBwcm9wcy5pY29uLFxuICAgIF9wcm9wcyRpY29uc1Bvc2l0aW9uID0gcHJvcHMuaWNvbnNQb3NpdGlvbixcbiAgICBpY29uc1Bvc2l0aW9uID0gX3Byb3BzJGljb25zUG9zaXRpb24gPT09IHZvaWQgMCA/ICdhYnNvbHV0ZScgOiBfcHJvcHMkaWNvbnNQb3NpdGlvbixcbiAgICBjbGVhciA9IHByb3BzLmNsZWFyLFxuICAgIGlzRHJvcGRvd24gPSBwcm9wcy5pc0Ryb3Bkb3duLFxuICAgIGlzTG9hZGluZyA9IHByb3BzLmlzTG9hZGluZyxcbiAgICBpc0ludmFsaWQgPSBwcm9wcy5pc0ludmFsaWQsXG4gICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgcmVhZE9ubHkgPSBwcm9wcy5yZWFkT25seSxcbiAgICBjb21wcmVzc2VkID0gcHJvcHMuY29tcHJlc3NlZCxcbiAgICBwcmVwZW5kID0gcHJvcHMucHJlcGVuZCxcbiAgICBhcHBlbmQgPSBwcm9wcy5hcHBlbmQsXG4gICAgaXNEZWxpbWl0ZWQgPSBwcm9wcy5pc0RlbGltaXRlZCxcbiAgICB3cmFwcGVyUHJvcHMgPSBwcm9wcy53cmFwcGVyUHJvcHMsXG4gICAgX3Byb3BzJGZ1bGxXaWR0aCA9IHByb3BzLmZ1bGxXaWR0aCxcbiAgICBmdWxsV2lkdGggPSBfcHJvcHMkZnVsbFdpZHRoID09PSB2b2lkIDAgPyBkZWZhdWx0RnVsbFdpZHRoIDogX3Byb3BzJGZ1bGxXaWR0aCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNHcm91cCA9ICEhKHByZXBlbmQgfHwgYXBwZW5kIHx8IGlzRGVsaW1pdGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtQ29udHJvbExheW91dCcsIHtcbiAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtLWdyb3VwJzogaXNHcm91cCAmJiAhaXNEZWxpbWl0ZWQsXG4gICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkLFxuICAgICdldWlGb3JtQ29udHJvbExheW91dC1yZWFkT25seSc6IHJlYWRPbmx5XG4gIH0sIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlGb3JtQ29udHJvbExheW91dFN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUZvcm1Db250cm9sTGF5b3V0LCBjb21wcmVzc2VkID8gc3R5bGVzLmNvbXByZXNzZWQgOiBzdHlsZXMudW5jb21wcmVzc2VkLCBmdWxsV2lkdGggPyBzdHlsZXMuZnVsbFdpZHRoIDogc3R5bGVzLmZvcm1XaWR0aF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShpc0dyb3VwID8gW3N0eWxlcy5ncm91cC5ncm91cCwgY29tcHJlc3NlZCA/IHN0eWxlcy5ncm91cC5jb21wcmVzc2VkIDogc3R5bGVzLmdyb3VwLnVuY29tcHJlc3NlZF0gOiBbXSkpO1xuICB2YXIgY2hpbGRyZW5XcmFwcGVyU3R5bGVzID0gW3N0eWxlcy5jaGlsZHJlbi5ldWlGb3JtQ29udHJvbExheW91dF9fY2hpbGRyZW5XcmFwcGVyLCBpc0dyb3VwICYmIHN0eWxlcy5jaGlsZHJlbi5pbkdyb3VwLCBpc0dyb3VwICYmICFhcHBlbmQgJiYgc3R5bGVzLmNoaWxkcmVuLnByZXBlbmRPbmx5LCBpc0dyb3VwICYmICFwcmVwZW5kICYmIHN0eWxlcy5jaGlsZHJlbi5hcHBlbmRPbmx5LCB3cmFwcGVyUHJvcHMgPT09IG51bGwgfHwgd3JhcHBlclByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3cmFwcGVyUHJvcHMuY3NzXTtcbiAgdmFyIGhhc0Ryb3Bkb3duSWNvbiA9ICFyZWFkT25seSAmJiAhaXNEaXNhYmxlZCAmJiBpc0Ryb3Bkb3duO1xuICB2YXIgaGFzUmlnaHRJY29uID0gaXNSaWdodFNpZGVJY29uKGljb24pO1xuICB2YXIgaGFzTGVmdEljb24gPSBpY29uICYmICFoYXNSaWdodEljb247XG4gIHZhciBoYXNSaWdodEljb25zID0gaGFzUmlnaHRJY29uIHx8IGNsZWFyIHx8IGlzTG9hZGluZyB8fCBpc0ludmFsaWQgfHwgaGFzRHJvcGRvd25JY29uO1xuICB2YXIgaWNvbkFmZm9yZGFuY2VTdHlsZXMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaWNvbnNQb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHJldHVybjsgLy8gU3RhdGljIGljb25zIGRvbid0IG5lZWQgcGFkZGluZyBhZmZvcmRhbmNlXG5cbiAgICByZXR1cm4gZ2V0SWNvbkFmZm9yZGFuY2VTdHlsZXMoe1xuICAgICAgaWNvbjogaWNvbixcbiAgICAgIGNsZWFyOiBjbGVhcixcbiAgICAgIGlzSW52YWxpZDogaXNJbnZhbGlkLFxuICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICBpc0Ryb3Bkb3duOiBoYXNEcm9wZG93bkljb25cbiAgICB9KTtcbiAgfSwgW2ljb25zUG9zaXRpb24sIGljb24sIGNsZWFyLCBpc0ludmFsaWQsIGlzTG9hZGluZywgaGFzRHJvcGRvd25JY29uXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZXMsIHtcbiAgICBzaWRlOiBcInByZXBlbmRcIixcbiAgICBub2RlczogcHJlcGVuZCxcbiAgICBpbnB1dElkOiBpbnB1dElkLFxuICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWRcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe30sIHdyYXBwZXJQcm9wcywge1xuICAgIGNzczogY2hpbGRyZW5XcmFwcGVyU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlcicsIHdyYXBwZXJQcm9wcyA9PT0gbnVsbCB8fCB3cmFwcGVyUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdyYXBwZXJQcm9wcy5jbGFzc05hbWUpLFxuICAgIHN0eWxlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGljb25BZmZvcmRhbmNlU3R5bGVzKSwgd3JhcHBlclByb3BzID09PSBudWxsIHx8IHdyYXBwZXJQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd3JhcHBlclByb3BzLnN0eWxlKVxuICB9KSwgaGFzTGVmdEljb24gJiYgX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dEljb25zLCB7XG4gICAgc2lkZTogXCJsZWZ0XCIsXG4gICAgaWNvbjogaWNvbixcbiAgICBpY29uc1Bvc2l0aW9uOiBpY29uc1Bvc2l0aW9uLFxuICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZFxuICB9KSwgY2hpbGRyZW4sIGhhc1JpZ2h0SWNvbnMgJiYgX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dEljb25zLCB7XG4gICAgc2lkZTogXCJyaWdodFwiLFxuICAgIGljb246IGhhc1JpZ2h0SWNvbiA/IGljb24gOiB1bmRlZmluZWQsXG4gICAgaWNvbnNQb3NpdGlvbjogaWNvbnNQb3NpdGlvbixcbiAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgIGNsZWFyOiBjbGVhcixcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICBpc0ludmFsaWQ6IGlzSW52YWxpZCxcbiAgICBpc0Ryb3Bkb3duOiBoYXNEcm9wZG93bkljb24sXG4gICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZFxuICB9KSksIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZXMsIHtcbiAgICBzaWRlOiBcImFwcGVuZFwiLFxuICAgIG5vZGVzOiBhcHBlbmQsXG4gICAgaW5wdXRJZDogaW5wdXRJZCxcbiAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkXG4gIH0pKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgc3ViY29tcG9uZW50IHV0aWxpdHkgZm9yIHByZXBlbmQvYXBwZW5kIG5vZGVzXG4gKi9cbkV1aUZvcm1Db250cm9sTGF5b3V0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGJlZm9yZSBjaGlsZHJlbi5cbiAgICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGFmdGVyIGNoaWxkcmVuLlxuICAgICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgc2lkZTogUHJvcFR5cGVzLmFueSxcbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgICByZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgaWNvbnMgYXJlIGFic29sdXRlbHkgb3Igc3RhdGljYWxseSByZW5kZXJlZC4gRm9yIHNpbmdsZSBpbnB1dHMsXG4gICAgICAgKiBhYnNvbHV0ZSByZW5kZXJpbmcgaXMgdHlwaWNhbGx5IHByZWZlcnJlZC5cbiAgICAgICAqIEBkZWZhdWx0IGFic29sdXRlXG4gICAgICAgKi9cbiAgaWNvbnNQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcImFic29sdXRlXCIsIFwic3RhdGljXCJdKSxcbiAgY2xlYXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKVxuICB9KSxcbiAgLyoqXG4gICAgICAgKiBFeHBhbmQgdG8gZmlsbCAxMDAlIG9mIHRoZSBwYXJlbnQuXG4gICAgICAgKiBEZWZhdWx0cyB0byBgZnVsbFdpZHRoYCBwcm9wIG9mIGA8RXVpRm9ybT5gLlxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBDb250cm9scyB0aGUgYWRkaW5nIG9mIGFuZCB2aXNpYmlsaXR5IG9mIGEgZG93biBhcnJvdyBpY29uXG4gICAgICAgKi9cbiAgaXNEcm9wZG93bjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogQ29ubmVjdHMgdGhlIHByZXBlbmQgYW5kIGFwcGVuZCBsYWJlbHMgdG8gdGhlIGlucHV0XG4gICAgICAgKi9cbiAgaW5wdXRJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICAgKiBBbGxvd3MgcGFzc2luZyBvcHRpb25hbCBhZGRpdGlvbmFsIHByb3BzIHRvIGAuZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlcmBcbiAgICAgICAqL1xuICB3cmFwcGVyUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIC8vIEludGVybmFsIHByb3AgdXNlZCBieSBFdWlGb3JtQ29udHJvbExheW91dERlbGltaXRlZFxuICBpc0RlbGltaXRlZDogUHJvcFR5cGVzLmJvb2xcbn07XG52YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZXMgPSBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dFNpZGVOb2RlcyhfcmVmKSB7XG4gIHZhciBzaWRlID0gX3JlZi5zaWRlLFxuICAgIG5vZGVzID0gX3JlZi5ub2RlcyxcbiAgICBpbnB1dElkID0gX3JlZi5pbnB1dElkLFxuICAgIGNvbXByZXNzZWQgPSBfcmVmLmNvbXByZXNzZWQ7XG4gIHZhciBjbGFzc05hbWUgPSBcImV1aUZvcm1Db250cm9sTGF5b3V0X19cIi5jb25jYXQoc2lkZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlGb3JtQ29udHJvbExheW91dFNpZGVOb2RlU3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpRm9ybUNvbnRyb2xMYXlvdXRfX3NpZGUsIHN0eWxlc1tzaWRlXSwgY29tcHJlc3NlZCA/IHN0eWxlcy5jb21wcmVzc2VkIDogc3R5bGVzLnVuY29tcHJlc3NlZF07XG4gIGlmICghbm9kZXMpIHJldHVybiBudWxsO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgUmVhY3QuQ2hpbGRyZW4ubWFwKG5vZGVzLCBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiB0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgPyBfX19FbW90aW9uSlNYKEV1aUZvcm1MYWJlbCwge1xuICAgICAgaHRtbEZvcjogaW5wdXRJZFxuICAgIH0sIG5vZGUpIDogbm9kZTtcbiAgfSkpO1xufTtcbkV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVzLnByb3BUeXBlcyA9IHtcbiAgc2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImFwcGVuZFwiLCBcInByZXBlbmRcIl0pLmlzUmVxdWlyZWQsXG4gIG5vZGVzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIC8vIEZvciBzb21lIGJpemFycmUgcmVhc29uIGlmIHlvdSBtYWtlIHRoaXMgdGhlIGBjaGlsZHJlbmAgcHJvcCBpbnN0ZWFkLCBSZWFjdCBkb2Vzbid0IHByb3Blcmx5IG92ZXJyaWRlIGNsb25lZCBrZXlzIDp8XG4gIGlucHV0SWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widHlwZVwiLCBcImlzRm9jdXNlZFwiLCBcImlzSW52YWxpZFwiLCBcImlzRGlzYWJsZWRcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlGb3JtTGFiZWxTdHlsZXMgfSBmcm9tICcuL2Zvcm1fbGFiZWwuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1MYWJlbCA9IGZ1bmN0aW9uIEV1aUZvcm1MYWJlbChfcmVmKSB7XG4gIHZhciBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2xhYmVsJyA6IF9yZWYkdHlwZSxcbiAgICBpc0ZvY3VzZWQgPSBfcmVmLmlzRm9jdXNlZCxcbiAgICBpc0ludmFsaWQgPSBfcmVmLmlzSW52YWxpZCxcbiAgICBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlGb3JtTGFiZWxTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlGb3JtTGFiZWwsICFpc0Rpc2FibGVkICYmIHN0eWxlcy5ub3REaXNhYmxlZCwgaXNJbnZhbGlkICYmIHN0eWxlcy5pbnZhbGlkLCBpc0ZvY3VzZWQgJiYgc3R5bGVzLmZvY3VzZWRdO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1MYWJlbCcsIGNsYXNzTmFtZSwge1xuICAgICdldWlGb3JtTGFiZWwtaXNGb2N1c2VkJzogaXNGb2N1c2VkLFxuICAgICdldWlGb3JtTGFiZWwtaXNJbnZhbGlkJzogaXNJbnZhbGlkLFxuICAgICdldWlGb3JtTGFiZWwtaXNEaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgfSk7XG4gIGlmICh0eXBlID09PSAnbGVnZW5kJykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGVnZW5kXCIsIF9leHRlbmRzKHtcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxhYmVsXCIsIF9leHRlbmRzKHtcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgfVxufTtcbkV1aUZvcm1MYWJlbC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIERlZmF1bHQgdHlwZSBpcyBhIGBsYWJlbGAgYnV0IGNhbiBiZSBjaGFuZ2VkIHRvIGEgYGxlZ2VuZGBcbiAgICAgKiBpZiB1c2luZyBpbnNpZGUgYSBgZmllbGRzZXRgLlxuICAgICAqL1xuICAvKipcbiAgICAgKiBEZWZhdWx0IHR5cGUgaXMgYSBgbGFiZWxgIGJ1dCBjYW4gYmUgY2hhbmdlZCB0byBhIGBsZWdlbmRgXG4gICAgICogaWYgdXNpbmcgaW5zaWRlIGEgYGZpZWxkc2V0YC5cbiAgICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImxhYmVsXCJdKSwgUHJvcFR5cGVzLm9uZU9mKFtcImxhYmVsXCIsIFwibGVnZW5kXCJdKV0pLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wibGVnZW5kXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW1wibGFiZWxcIiwgXCJsZWdlbmRcIl0pXSldKSxcbiAgaXNGb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQ2hhbmdlcyBgY3Vyc29yYCB0byBgZGVmYXVsdGAuXG4gICAgICovXG4gIC8qKlxuICAgICAqIENoYW5nZXMgYGN1cnNvcmAgdG8gYGRlZmF1bHRgLlxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJyZWZcIiwgXCJzaWRlXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuLi8uLi9sb2FkaW5nJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24gfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfY2xlYXJfYnV0dG9uJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9jdXN0b21faWNvbic7XG5pbXBvcnQgeyBldWlGb3JtQ29udHJvbExheW91dEljb25zU3R5bGVzIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2ljb25zLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBJQ09OX1NJREVTID0gWydsZWZ0JywgJ3JpZ2h0J107XG5leHBvcnQgdmFyIGlzSWNvblNoYXBlID0gZnVuY3Rpb24gaXNJY29uU2hhcGUoaWNvbikge1xuICByZXR1cm4gISFpY29uICYmIGljb24uaGFzT3duUHJvcGVydHkoJ3R5cGUnKTtcbn07XG5leHBvcnQgdmFyIEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyk7XG4gICAgcmV0dXJuIF9jYWxsU3VwZXIodGhpcywgRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywgYXJndW1lbnRzKTtcbiAgfVxuICBfaW5oZXJpdHMoRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzJHNpZGUgPSBfdGhpcyRwcm9wcy5zaWRlLFxuICAgICAgICBzaWRlID0gX3RoaXMkcHJvcHMkc2lkZSA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3RoaXMkcHJvcHMkc2lkZSxcbiAgICAgICAgX3RoaXMkcHJvcHMkaWNvbnNQb3NpID0gX3RoaXMkcHJvcHMuaWNvbnNQb3NpdGlvbixcbiAgICAgICAgaWNvbnNQb3NpdGlvbiA9IF90aGlzJHByb3BzJGljb25zUG9zaSA9PT0gdm9pZCAwID8gJ2Fic29sdXRlJyA6IF90aGlzJHByb3BzJGljb25zUG9zaSxcbiAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzLmNvbXByZXNzZWQsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5pc0Rpc2FibGVkO1xuICAgICAgdmFyIGN1c3RvbUljb24gPSB0aGlzLnJlbmRlckN1c3RvbUljb24oKTtcbiAgICAgIHZhciBsb2FkaW5nU3Bpbm5lciA9IHRoaXMucmVuZGVyTG9hZGluZ1NwaW5uZXIoKTtcbiAgICAgIHZhciBjbGVhckJ1dHRvbiA9IHRoaXMucmVuZGVyQ2xlYXJCdXR0b24oKTtcbiAgICAgIHZhciBpbnZhbGlkSWNvbiA9IHRoaXMucmVuZGVySW52YWxpZEljb24oKTtcbiAgICAgIHZhciBkcm9wZG93bkljb24gPSB0aGlzLnJlbmRlckRyb3Bkb3duSWNvbigpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyLCBudWxsLCBmdW5jdGlvbiAoc3R5bGVzTWVtb2l6ZXIpIHtcbiAgICAgICAgdmFyIHN0eWxlcyA9IHN0eWxlc01lbW9pemVyKGV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnNTdHlsZXMpO1xuICAgICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlGb3JtQ29udHJvbExheW91dEljb25zLCBjb21wcmVzc2VkID8gc3R5bGVzLmNvbXByZXNzZWQgOiBzdHlsZXMudW5jb21wcmVzc2VkXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGljb25zUG9zaXRpb24gPT09ICdhYnNvbHV0ZScgPyBbc3R5bGVzLnBvc2l0aW9uLmFic29sdXRlLmFic29sdXRlLCBjb21wcmVzc2VkID8gc3R5bGVzLnBvc2l0aW9uLmFic29sdXRlLmNvbXByZXNzZWRbc2lkZV0gOiBzdHlsZXMucG9zaXRpb24uYWJzb2x1dGUudW5jb21wcmVzc2VkW3NpZGVdXSA6IFtzdHlsZXMucG9zaXRpb24uc3RhdGljLnN0YXRpYywgY29tcHJlc3NlZCA/IHN0eWxlcy5wb3NpdGlvbi5zdGF0aWMuY29tcHJlc3NlZCA6IHN0eWxlcy5wb3NpdGlvbi5zdGF0aWMudW5jb21wcmVzc2VkXSksIFtpc0Rpc2FibGVkICYmIHN0eWxlcy5kaXNhYmxlZF0pO1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnNcIlxuICAgICAgICB9LCBjbGVhckJ1dHRvbiwgbG9hZGluZ1NwaW5uZXIsIGludmFsaWRJY29uLCBjdXN0b21JY29uLCBkcm9wZG93bkljb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckN1c3RvbUljb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQ3VzdG9tSWNvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBpY29uID0gX3RoaXMkcHJvcHMyLmljb24sXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczIuY29tcHJlc3NlZCxcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMi5pc0Rpc2FibGVkO1xuICAgICAgaWYgKCFpY29uKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBOb3JtYWxpemUgdGhlIGljb24gdG8gYW4gb2JqZWN0IGlmIGl0J3MgYSBzdHJpbmcuXG4gICAgICB2YXIgaWNvblByb3BzID0gaXNJY29uU2hhcGUoaWNvbikgPyBpY29uIDoge1xuICAgICAgICB0eXBlOiBpY29uXG4gICAgICB9O1xuICAgICAgdmFyIGljb25SZWYgPSBpY29uUHJvcHMucmVmLFxuICAgICAgICBzaWRlID0gaWNvblByb3BzLnNpZGUsXG4gICAgICAgIGljb25SZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGljb25Qcm9wcywgX2V4Y2x1ZGVkKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiwgX2V4dGVuZHMoe1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nLFxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaWNvblJlZjogaWNvblJlZlxuICAgICAgfSwgaWNvblJlc3QpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRHJvcGRvd25JY29uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckRyb3Bkb3duSWNvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICBpc0Ryb3Bkb3duID0gX3RoaXMkcHJvcHMzLmlzRHJvcGRvd24sXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczMuY29tcHJlc3NlZCxcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMy5pc0Rpc2FibGVkO1xuICAgICAgaWYgKCFpc0Ryb3Bkb3duKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLCB7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbScsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICB0eXBlOiBcImFycm93RG93blwiXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTG9hZGluZ1NwaW5uZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyTG9hZGluZ1NwaW5uZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHM0LmlzTG9hZGluZyxcbiAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzNC5jb21wcmVzc2VkO1xuICAgICAgaWYgKCFpc0xvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyQ2xlYXJCdXR0b25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQ2xlYXJCdXR0b24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2xlYXIgPSBfdGhpcyRwcm9wczUuY2xlYXIsXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczUuY29tcHJlc3NlZCxcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzNS5pc0Rpc2FibGVkO1xuICAgICAgaWYgKCFjbGVhcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24sIF9leHRlbmRzKHtcbiAgICAgICAgc2l6ZTogY29tcHJlc3NlZCA/ICdzJyA6ICdtJyxcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgICAgIH0sIGNsZWFyKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckludmFsaWRJY29uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckludmFsaWRJY29uKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzSW52YWxpZCA9IF90aGlzJHByb3BzNi5pc0ludmFsaWQsXG4gICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczYuY29tcHJlc3NlZDtcbiAgICAgIGlmICghaXNJbnZhbGlkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nLFxuICAgICAgICBjb2xvcjogXCJkYW5nZXJcIixcbiAgICAgICAgdHlwZTogXCJ3YXJuaW5nXCJcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucy5wcm9wVHlwZXMgPSB7XG4gIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgc2lkZTogUHJvcFR5cGVzLmFueSxcbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgICByZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgc2lkZTogUHJvcFR5cGVzLmFueSxcbiAgaWNvbnNQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcImFic29sdXRlXCIsIFwic3RhdGljXCJdKSxcbiAgY2xlYXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKVxuICB9KSxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNEcm9wZG93bjogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcIm9uQ2xpY2tcIiwgXCJzaXplXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b25TdHlsZXMgfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfY2xlYXJfYnV0dG9uLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uID0gZnVuY3Rpb24gRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24nLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvblN0eWxlcyk7XG4gIHZhciBpY29uU3R5bGVzID0gW3N0eWxlcy5ldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uX19pY29uLCBzdHlsZXMuc2l6ZVtzaXplXV07XG4gIHZhciBhcmlhTGFiZWwgPSB1c2VFdWlJMThuKCdldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uLmxhYmVsJywgJ0NsZWFyIGlucHV0Jyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIGNzczogc3R5bGVzLmV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24sXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbFxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY3NzOiBpY29uU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uX19pY29uXCIsXG4gICAgdHlwZTogXCJjcm9zc1wiLFxuICAgIHNpemU6IHNpemVcbiAgfSkpO1xufTtcbkV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuZXhwb3J0IHZhciBFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uU3R5bGVzID0gZnVuY3Rpb24gRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvblN0eWxlcyhfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gX3JlZi5jb2xvck1vZGU7XG4gIHZhciBiYWNrZ3JvdW5kQ29sb3IgPSBjb2xvck1vZGUgPT09ICdEQVJLJyA/IGV1aVRoZW1lLmNvbG9ycy5kYXJrU2hhZGUgOiBldWlUaGVtZS5jb2xvcnMubWVkaXVtU2hhZGU7XG4gIHJldHVybiB7XG4gICAgZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbjogLyojX19QVVJFX18qL2NzcyhcInBvaW50ZXItZXZlbnRzOmFsbDtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBiYWNrZ3JvdW5kQ29sb3IsIFwiO2JvcmRlci1yYWRpdXM6NTAlO2xpbmUtaGVpZ2h0OjA7JjpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkLCBcIjt9O2xhYmVsOmV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b247XCIpLFxuICAgIGV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b25fX2ljb246IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06c2NhbGUoMC41KTtmaWxsOlwiLCBldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSwgXCI7c3Ryb2tlOlwiLCBldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSwgXCI7O2xhYmVsOmV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b25fX2ljb247XCIpLFxuICAgIHNpemU6IHtcbiAgICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJzdHJva2Utd2lkdGg6XCIsIGV1aVRoZW1lLnNpemUueHMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJzdHJva2Utd2lkdGg6XCIsIGV1aVRoZW1lLnNpemUueHhzLCBcIjs7bGFiZWw6bTtcIilcbiAgICB9XG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwib25DbGlja1wiLCBcInR5cGVcIiwgXCJpY29uUmVmXCIsIFwic2l6ZVwiLCBcImNvbG9yXCIsIFwiZGlzYWJsZWRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiA9IGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgaWNvblJlZiA9IF9yZWYuaWNvblJlZixcbiAgICBzaXplID0gX3JlZi5zaXplLFxuICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbicsIGNsYXNzTmFtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiwgb25DbGljayA/IHN0eWxlcy5jbGlja2FibGUgOiBzdHlsZXMudW5jbGlja2FibGVdO1xuICBpZiAob25DbGljaykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICByZWY6IGljb25SZWZcbiAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uX19pY29uXCIsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBjb2xvcjogY29sb3JcbiAgICB9KSk7XG4gIH1cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgcmVmOiBpY29uUmVmXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uX19pY29uXCIsXG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICBzaXplOiBzaXplLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgY29sb3I6IGNvbG9yXG4gIH0pKTtcbn07XG5FdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFub21hbHlDaGFydFwiLCBcImFub21hbHlTd2ltTGFuZVwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXJ0aWNsZVwiLCBcImFzdGVyaXNrXCIsIFwiYXRcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYmV0YVwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGFuZ2VQb2ludERldGVjdGlvblwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbGlja0xlZnRcIiwgXCJjbGlja1JpZ2h0XCIsIFwiY2xvY2tcIiwgXCJjbG9ja0NvdW50ZXJcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkNpcmNsZVwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaWZmXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkaXNjdXNzXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG90SW5DaXJjbGVcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZW5kcG9pbnRcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJlcnJvclwiLCBcImVycm9yRmlsbGVkXCIsIFwiZXNxbFZpc1wiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmllbGRTdGF0aXN0aWNzXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJFeGNsdWRlXCIsIFwiZmlsdGVySWdub3JlXCIsIFwiZmlsdGVySW5jbHVkZVwiLCBcImZpbHRlckluQ2lyY2xlXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYWJPbW5pZGlyZWN0aW9uYWxcIiwgXCJncmFkaWVudFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhcIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImluZGV4VGVtcG9yYXJ5XCIsIFwiaW5maW5pdHlcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleVwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF1bmNoXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nUGF0dGVybkFuYWx5c2lzXCIsIFwibG9nUmF0ZUFuYWx5c2lzXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50XCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1pbnVzSW5TcXVhcmVcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm1vdmVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJuZXdDaGF0XCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhbGV0dGVcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVCcmVha3NcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBpcGVOb0JyZWFrc1wiLCBcInBpdm90XCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicGx1c0luU3F1YXJlXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNpbmdsZU1ldHJpY1ZpZXdlclwiLCBcInNub3dmbGFrZVwiLCBcInNvcnRBc2NlbmRpbmdcIiwgXCJzb3J0RGVzY2VuZGluZ1wiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc1wiLCBcInNwYWNlc0FwcFwiLCBcInNwYXJrbGVzXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpbmVXaXRoQXJyb3dcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhbnNpdGlvbkxlZnRJblwiLCBcInRyYW5zaXRpb25MZWZ0T3V0XCIsIFwidHJhbnNpdGlvblRvcEluXCIsIFwidHJhbnNpdGlvblRvcE91dFwiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwidnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRBcHBcIiwgXCJ3YXJuaW5nXCIsIFwid2FybmluZ0ZpbGxlZFwiLCBcImFsZXJ0XCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGltZW5zaW9uXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2VtYW50aWNUZXh0XCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiLCBcInRva2VuVmVjdG9yRGVuc2VcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5WZWN0b3JTcGFyc2VcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICBpY29uUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxufTtcbnZhciBzdHlsZXMgPSB7XG4gIGV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgIG5hbWU6IFwiN2QxbWE4LWV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvblwiLFxuICAgIHN0eWxlczogXCJmb250LXNpemU6MDtsYWJlbDpldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb247XCJcbiAgfSA6IHtcbiAgICBuYW1lOiBcIjdkMW1hOC1ldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb25cIixcbiAgICBzdHlsZXM6IFwiZm9udC1zaXplOjA7bGFiZWw6ZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uO1wiLFxuICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICB9LFxuICAvLyBTa2lwIGNzc2BgIGhlcmUgdG8gYXZvaWQgZ2VuZXJhdGluZyBhbiBFbW90aW9uIGNsYXNzTmFtZVxuICB1bmNsaWNrYWJsZTogXCJcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBcIixcbiAgY2xpY2thYmxlOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgbmFtZTogXCIxajh3Z3hqLWNsaWNrYWJsZVwiLFxuICAgIHN0eWxlczogXCJwb2ludGVyLWV2ZW50czphbGw7JjpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6Y3VycmVudENvbG9yO307bGFiZWw6Y2xpY2thYmxlO1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCIxajh3Z3hqLWNsaWNrYWJsZVwiLFxuICAgIHN0eWxlczogXCJwb2ludGVyLWV2ZW50czphbGw7JjpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6Y3VycmVudENvbG9yO307bGFiZWw6Y2xpY2thYmxlO1wiLFxuICAgIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xuICB9XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpRm9ybVZhcmlhYmxlcyB9IGZyb20gJy4uL2Zvcm0uc3R5bGVzJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjNsZjljNC1ldWlGb3JtQ29udHJvbExheW91dEljb25zXCIsXG4gIHN0eWxlczogXCJwb2ludGVyLWV2ZW50czpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bGFiZWw6ZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucztcIlxufSA6IHtcbiAgbmFtZTogXCIzbGY5YzQtZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29uc1wiLFxuICBzdHlsZXM6IFwicG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2xhYmVsOmV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnM7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29uc1N0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnNTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBfZXVpRm9ybVZhcmlhYmxlcyA9IGV1aUZvcm1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBjb250cm9sUGFkZGluZyA9IF9ldWlGb3JtVmFyaWFibGVzLmNvbnRyb2xQYWRkaW5nLFxuICAgIGNvbnRyb2xDb21wcmVzc2VkUGFkZGluZyA9IF9ldWlGb3JtVmFyaWFibGVzLmNvbnRyb2xDb21wcmVzc2VkUGFkZGluZyxcbiAgICBjb250cm9sRGlzYWJsZWRDb2xvciA9IF9ldWlGb3JtVmFyaWFibGVzLmNvbnRyb2xEaXNhYmxlZENvbG9yO1xuICByZXR1cm4ge1xuICAgIGV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnM6IF9yZWYsXG4gICAgdW5jb21wcmVzc2VkOiBcIlxcbiAgICAgIGdhcDogXCIuY29uY2F0KG1hdGhXaXRoVW5pdHMoY29udHJvbFBhZGRpbmcsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAvIDI7XG4gICAgfSksIFwiO1xcbiAgICBcIiksXG4gICAgY29tcHJlc3NlZDogLyojX19QVVJFX18qL2NzcyhcImdhcDpcIiwgbWF0aFdpdGhVbml0cyhjb250cm9sQ29tcHJlc3NlZFBhZGRpbmcsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAvIDI7XG4gICAgfSksIFwiOztsYWJlbDpjb21wcmVzc2VkO1wiKSxcbiAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2NzcyhcImN1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjpcIiwgY29udHJvbERpc2FibGVkQ29sb3IsIFwiOztsYWJlbDpkaXNhYmxlZDtcIiksXG4gICAgcG9zaXRpb246IHtcbiAgICAgIGFic29sdXRlOiB7XG4gICAgICAgIGFic29sdXRlOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxDU1MoJ3ZlcnRpY2FsJywgMCksIFwiOztsYWJlbDphYnNvbHV0ZTtcIiksXG4gICAgICAgIHVuY29tcHJlc3NlZDoge1xuICAgICAgICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJ6LWluZGV4OjE7XCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCBjb250cm9sUGFkZGluZyksIFwiOztsYWJlbDpsZWZ0O1wiKSxcbiAgICAgICAgICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdyaWdodCcsIGNvbnRyb2xQYWRkaW5nKSwgXCI7O2xhYmVsOnJpZ2h0O1wiKVxuICAgICAgICB9LFxuICAgICAgICBjb21wcmVzc2VkOiB7XG4gICAgICAgICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcInotaW5kZXg6MTtcIiwgbG9naWNhbENTUygnbGVmdCcsIGNvbnRyb2xDb21wcmVzc2VkUGFkZGluZyksIFwiOztsYWJlbDpsZWZ0O1wiKSxcbiAgICAgICAgICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdyaWdodCcsIGNvbnRyb2xDb21wcmVzc2VkUGFkZGluZyksIFwiOztsYWJlbDpyaWdodDtcIilcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHN0YXRpYzoge1xuICAgICAgICBzdGF0aWM6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpzdGF0aWM7XCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsICcxMDAlJyksIFwiIGFsaWduLXNlbGY6c3RyZXRjaDtmbGV4LWdyb3c6MDtcIiwgbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgJzEwMCUnKSwgXCI7O2xhYmVsOnN0YXRpYztcIiksXG4gICAgICAgIHVuY29tcHJlc3NlZDogbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgY29udHJvbFBhZGRpbmcpLFxuICAgICAgICBjb21wcmVzc2VkOiBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBjb250cm9sQ29tcHJlc3NlZFBhZGRpbmcpXG4gICAgICB9XG4gICAgfVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBpc0ljb25TaGFwZSB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9pY29ucyc7XG5leHBvcnQgdmFyIGlzUmlnaHRTaWRlSWNvbiA9IGZ1bmN0aW9uIGlzUmlnaHRTaWRlSWNvbihpY29uKSB7XG4gIHJldHVybiAhIWljb24gJiYgaXNJY29uU2hhcGUoaWNvbikgJiYgaWNvbi5zaWRlID09PSAncmlnaHQnO1xufTtcbmV4cG9ydCB2YXIgZ2V0SWNvbkFmZm9yZGFuY2VTdHlsZXMgPSBmdW5jdGlvbiBnZXRJY29uQWZmb3JkYW5jZVN0eWxlcyhfcmVmKSB7XG4gIHZhciBpY29uID0gX3JlZi5pY29uLFxuICAgIGNsZWFyID0gX3JlZi5jbGVhcixcbiAgICBpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICBpc0ludmFsaWQgPSBfcmVmLmlzSW52YWxpZCxcbiAgICBpc0Ryb3Bkb3duID0gX3JlZi5pc0Ryb3Bkb3duO1xuICB2YXIgY3NzVmFyaWFibGVzID0ge1xuICAgICctLWV1aUZvcm1Db250cm9sTGVmdEljb25zQ291bnQnOiAwLFxuICAgICctLWV1aUZvcm1Db250cm9sUmlnaHRJY29uc0NvdW50JzogMFxuICB9O1xuICBpZiAoaWNvbikge1xuICAgIGlmIChpc1JpZ2h0U2lkZUljb24oaWNvbikpIHtcbiAgICAgIGNzc1ZhcmlhYmxlc1snLS1ldWlGb3JtQ29udHJvbFJpZ2h0SWNvbnNDb3VudCddKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNzc1ZhcmlhYmxlc1snLS1ldWlGb3JtQ29udHJvbExlZnRJY29uc0NvdW50J10rKztcbiAgICB9XG4gIH1cbiAgaWYgKGNsZWFyKSBjc3NWYXJpYWJsZXNbJy0tZXVpRm9ybUNvbnRyb2xSaWdodEljb25zQ291bnQnXSsrO1xuICBpZiAoaXNMb2FkaW5nKSBjc3NWYXJpYWJsZXNbJy0tZXVpRm9ybUNvbnRyb2xSaWdodEljb25zQ291bnQnXSsrO1xuICBpZiAoaXNJbnZhbGlkKSBjc3NWYXJpYWJsZXNbJy0tZXVpRm9ybUNvbnRyb2xSaWdodEljb25zQ291bnQnXSsrO1xuICBpZiAoaXNEcm9wZG93bikgY3NzVmFyaWFibGVzWyctLWV1aUZvcm1Db250cm9sUmlnaHRJY29uc0NvdW50J10rKztcbiAgdmFyIGZpbHRlcmVkID0gT2JqZWN0LmVudHJpZXMoY3NzVmFyaWFibGVzKS5maWx0ZXIoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyIF9yZWYzID0gX3NsaWNlZFRvQXJyYXkoX3JlZjIsIDIpLFxuICAgICAgY291bnQgPSBfcmVmM1sxXTtcbiAgICByZXR1cm4gY291bnQgPiAwO1xuICB9KTtcbiAgcmV0dXJuIGZpbHRlcmVkLmxlbmd0aCA/IE9iamVjdC5mcm9tRW50cmllcyhmaWx0ZXJlZCkgOiB1bmRlZmluZWQ7XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlUZXh0VHJ1bmNhdGUsIGxvZ2ljYWxDU1MsIG1hdGhXaXRoVW5pdHMgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlGb3JtVmFyaWFibGVzIH0gZnJvbSAnLi4vZm9ybS5zdHlsZXMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXcxMG4xbS1pbkdyb3VwXCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47bGFiZWw6aW5Hcm91cDtcIlxufSA6IHtcbiAgbmFtZTogXCIxdzEwbjFtLWluR3JvdXBcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjtsYWJlbDppbkdyb3VwO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWxiZmE2bS1ldWlGb3JtQ29udHJvbExheW91dF9fY2hpbGRyZW5XcmFwcGVyXCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpyZWxhdGl2ZTtsYWJlbDpldWlGb3JtQ29udHJvbExheW91dF9fY2hpbGRyZW5XcmFwcGVyO1wiXG59IDoge1xuICBuYW1lOiBcIjFsYmZhNm0tZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlclwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7bGFiZWw6ZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlcjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlGb3JtQ29udHJvbExheW91dFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1Db250cm9sTGF5b3V0U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBmb3JtID0gZXVpRm9ybVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIGV1aUZvcm1Db250cm9sTGF5b3V0OiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmV1aUZvcm1Db250cm9sTGF5b3V0O1wiKSxcbiAgICAvLyBTa2lwIHRoZSBjc3NgYCBvbiB0aGUgZGVmYXVsdCBoZWlnaHQgdG8gYXZvaWQgZ2VuZXJhdGluZyBhIGNsYXNzTmFtZVxuICAgIHVuY29tcHJlc3NlZDogXCJcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0JywgZm9ybS5jb250cm9sSGVpZ2h0KSwgXCJcXG4gICAgXCIpLFxuICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnaGVpZ2h0JywgZm9ybS5jb250cm9sQ29tcHJlc3NlZEhlaWdodCksIFwiOztsYWJlbDpjb21wcmVzc2VkO1wiKSxcbiAgICAvLyBTa2lwIHRoZSBjc3NgYCBvbiB0aGUgZGVmYXVsdCB3aWR0aCB0byBhdm9pZCBnZW5lcmF0aW5nIGEgY2xhc3NOYW1lXG4gICAgZm9ybVdpZHRoOiBcIlxcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBmb3JtLm1heFdpZHRoKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCJcXG4gICAgXCIpLFxuICAgIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIiBcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKSxcbiAgICBncm91cDoge1xuICAgICAgZ3JvdXA6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6c3RyZXRjaDtib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIiwgZm9ybS5ib3JkZXJDb2xvciwgXCI7YmFja2dyb3VuZC1jb2xvcjpcIiwgZm9ybS5iYWNrZ3JvdW5kQ29sb3IsIFwiO292ZXJmbG93OmhpZGRlbjs+KntcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgJzEwMCUnKSwgXCI7fTtsYWJlbDpncm91cDtcIiksXG4gICAgICAvLyBTa2lwcGluZyBjc3NgYCB0byBhdm9pZCByZXBlYXRlZCBjb21wcmVzc2VkL3VuY29tcHJlc3NlZCBjbGFzc05hbWVzXG4gICAgICB1bmNvbXByZXNzZWQ6IFwiXFxuICAgICAgICBib3JkZXItcmFkaXVzOiBcIi5jb25jYXQoZm9ybS5jb250cm9sQm9yZGVyUmFkaXVzLCBcIjtcXG4gICAgICBcIiksXG4gICAgICBjb21wcmVzc2VkOiBcIlxcbiAgICAgICAgYm9yZGVyLXJhZGl1czogXCIuY29uY2F0KGZvcm0uY29udHJvbENvbXByZXNzZWRCb3JkZXJSYWRpdXMsIFwiO1xcbiAgICAgIFwiKVxuICAgIH0sXG4gICAgY2hpbGRyZW46IHtcbiAgICAgIGV1aUZvcm1Db250cm9sTGF5b3V0X19jaGlsZHJlbldyYXBwZXI6IF9yZWYyLFxuICAgICAgaW5Hcm91cDogX3JlZixcbiAgICAgIHByZXBlbmRPbmx5OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2JvcmRlci10b3AtcmlnaHQtcmFkaXVzJywgJ2luaGVyaXQnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzJywgJ2luaGVyaXQnKSwgXCI7O2xhYmVsOnByZXBlbmRPbmx5O1wiKSxcbiAgICAgIGFwcGVuZE9ubHk6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cycsICdpbmhlcml0JyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJywgJ2luaGVyaXQnKSwgXCI7O2xhYmVsOmFwcGVuZE9ubHk7XCIpXG4gICAgfVxuICB9O1xufTtcbmV4cG9ydCB2YXIgZXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIGZvcm0gPSBldWlGb3JtVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciB1bmNvbXByZXNzZWRIZWlnaHQgPSBtYXRoV2l0aFVuaXRzKFtmb3JtLmNvbnRyb2xIZWlnaHQsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluXSwgZnVuY3Rpb24gKHgsIHkpIHtcbiAgICByZXR1cm4geCAtIHkgKiAyO1xuICB9KTtcbiAgdmFyIGNvbXByZXNzZWRIZWlnaHQgPSBtYXRoV2l0aFVuaXRzKFtmb3JtLmNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0LCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbl0sIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgcmV0dXJuIHggLSB5ICogMjtcbiAgfSk7XG4gIHZhciBidXR0b25zID0gJyo6aXMoLmV1aUJ1dHRvbiwgLmV1aUJ1dHRvbkVtcHR5LCAuZXVpQnV0dG9uSWNvbiknO1xuICB2YXIgdGV4dCA9ICcqOmlzKC5ldWlGb3JtTGFiZWwsIC5ldWlUZXh0KSc7XG4gIHJldHVybiB7XG4gICAgZXVpRm9ybUNvbnRyb2xMYXlvdXRfX3NpZGU6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnaGVpZ2h0JywgJzEwMCUnKSwgXCIgXCIsIGV1aVRleHRUcnVuY2F0ZSgnNTAlJyksIFwiIGZsZXgtc2hyaW5rOjA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6XCIsIGV1aVRoZW1lLnNpemUueHMsIFwiO2JhY2tncm91bmQtY29sb3I6XCIsIGZvcm0uYXBwZW5kUHJlcGVuZEJhY2tncm91bmQsIFwiO1wiLCBidXR0b25zLCBcInt0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7Jjpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0Oi1cIiwgZXVpVGhlbWUuZm9jdXMud2lkdGgsIFwiO319XCIsIHRleHQsIFwie2N1cnNvcjpkZWZhdWx0O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO30mOm5vdCg6aGFzKD4gXCIsIGJ1dHRvbnMsIFwiOmZpcnN0LWNoaWxkLCA+ICo6Zmlyc3QtY2hpbGQgPiBcIiwgYnV0dG9ucywgXCIpKXtcIiwgbG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgZXVpVGhlbWUuc2l6ZS5zKSwgXCI7fSY6bm90KDpoYXMoPiBcIiwgYnV0dG9ucywgXCI6bGFzdC1jaGlsZCwgPiAqOmxhc3QtY2hpbGQgPiBcIiwgYnV0dG9ucywgXCIpKXtcIiwgbG9naWNhbENTUygncGFkZGluZy1yaWdodCcsIGV1aVRoZW1lLnNpemUucyksIFwiO307bGFiZWw6ZXVpRm9ybUNvbnRyb2xMYXlvdXRfX3NpZGU7XCIpLFxuICAgIGFwcGVuZDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDphcHBlbmQ7XCIpLFxuICAgIHByZXBlbmQ6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6cHJlcGVuZDtcIiksXG4gICAgdW5jb21wcmVzc2VkOiBcIlxcbiAgICAgIFwiLmNvbmNhdCh0ZXh0LCBcIiB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIlxcbiAgICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQodW5jb21wcmVzc2VkSGVpZ2h0LCBcIjtcXG4gICAgICB9XFxuXFxuICAgICAgXCIpLmNvbmNhdChidXR0b25zLCBcIiB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsIHVuY29tcHJlc3NlZEhlaWdodCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgIC5ldWlCdXR0b25JY29uIHtcXG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsIGV1aVRoZW1lLnNpemUueGwpLCBcIlxcbiAgICAgIH1cXG4gICAgXCIpLFxuICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3ModGV4dCwgXCJ7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUueHhzKSwgXCIgbGluZS1oZWlnaHQ6XCIsIGNvbXByZXNzZWRIZWlnaHQsIFwiO31cIiwgYnV0dG9ucywgXCJ7XCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGNvbXByZXNzZWRIZWlnaHQpLCBcIjt9LmV1aUJ1dHRvbkljb257ZmxleC1zaHJpbms6MDtcIiwgbG9naWNhbENTUygnd2lkdGgnLCBldWlUaGVtZS5zaXplLnhsKSwgXCI7fTtsYWJlbDpjb21wcmVzc2VkO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInN0eWxlc01lbW9pemVyXCIsIFwiY2xhc3NOYW1lXCIsIFwiaWRcIiwgXCJuYW1lXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJpc0ludmFsaWRcIiwgXCJkaXNhYmxlZFwiLCBcImZ1bGxXaWR0aFwiLCBcImlzTG9hZGluZ1wiLCBcImlucHV0UmVmXCIsIFwiaW5jcmVtZW50YWxcIiwgXCJjb21wcmVzc2VkXCIsIFwib25TZWFyY2hcIiwgXCJpc0NsZWFyYWJsZVwiLCBcImFwcGVuZFwiLCBcInByZXBlbmRcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzLCB3aXRoRXVpU3R5bGVzTWVtb2l6ZXIgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBCcm93c2VyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYnJvd3Nlcic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dCB9IGZyb20gJy4uL2Zvcm1fY29udHJvbF9sYXlvdXQnO1xuaW1wb3J0IHsgRXVpVmFsaWRhdGFibGVDb250cm9sIH0gZnJvbSAnLi4vdmFsaWRhdGFibGVfY29udHJvbCc7XG5pbXBvcnQgeyBGb3JtQ29udGV4dCB9IGZyb20gJy4uL2V1aV9mb3JtX2NvbnRleHQnO1xuaW1wb3J0IHsgZXVpRmllbGRTZWFyY2hTdHlsZXMgfSBmcm9tICcuL2ZpZWxkX3NlYXJjaC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBpc1NlYXJjaFN1cHBvcnRlZCA9IGZhbHNlO1xuZXhwb3J0IHZhciBFdWlGaWVsZFNlYXJjaENsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aUZpZWxkU2VhcmNoQ2xhc3MoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGaWVsZFNlYXJjaENsYXNzKTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlGaWVsZFNlYXJjaENsYXNzLCBbXS5jb25jYXQoYXJncykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzdGF0ZVwiLCB7XG4gICAgICB2YWx1ZTogX3RoaXMucHJvcHMudmFsdWUgfHwgU3RyaW5nKF90aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSB8fCAnJylcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaW5wdXRFbGVtZW50XCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjbGVhbnVwc1wiLCBbXSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQ2xlYXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gY2xlYXIgdGhlIGZpZWxkJ3MgdmFsdWVcblxuICAgICAgLy8gMS4gUmVhY3QgZG9lc24ndCBsaXN0ZW4gZm9yIGBjaGFuZ2VgIGV2ZW50cywgaW5zdGVhZCBpdCBtYXBzIGBpbnB1dGAgZXZlbnRzIHRvIGBjaGFuZ2VgXG4gICAgICAvLyAyLiBSZWFjdCBvbmx5IGZpcmVzIHRoZSBtYXBwZWQgYGNoYW5nZWAgZXZlbnQgaWYgdGhlIGVsZW1lbnQncyB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgICAgLy8gMy4gQW4gaW5wdXQncyB2YWx1ZSBpcywgaW4gYWRkaXRpb24gdG8gb3RoZXIgbWV0aG9kcywgdHJhY2tlZCBieSBpbnRlcmNlcHRpbmcgZWxlbWVudC52YWx1ZSA9ICcuLi4nXG4gICAgICAvL1xuICAgICAgLy8gU28gd2UgaGF2ZSB0byBnbyBiZWxvdyB0aGUgZWxlbWVudCdzIHZhbHVlIHNldHRlciB0byBhdm9pZCBSZWFjdCBpbnRlcmNlcHRpbmcgaXQsXG4gICAgICAvLyBvbmx5IHRoZW4gd2lsbCBSZWFjdCB0cmVhdCB0aGUgdmFsdWUgYXMgZGlmZmVyZW50IGFuZCBmaXJlIGl0cyBgY2hhbmdlYCBldmVudFxuICAgICAgLy9cbiAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIzODkyNTQ3L3doYXQtaXMtdGhlLWJlc3Qtd2F5LXRvLXRyaWdnZXItb25jaGFuZ2UtZXZlbnQtaW4tcmVhY3QtanNcbiAgICAgIHZhciBuYXRpdmVJbnB1dFZhbHVlID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgJ3ZhbHVlJyk7XG4gICAgICB2YXIgbmF0aXZlSW5wdXRWYWx1ZVNldHRlciA9IG5hdGl2ZUlucHV0VmFsdWUgPyBuYXRpdmVJbnB1dFZhbHVlLnNldCA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChuYXRpdmVJbnB1dFZhbHVlU2V0dGVyKSB7XG4gICAgICAgIG5hdGl2ZUlucHV0VmFsdWVTZXR0ZXIuY2FsbChfdGhpcy5pbnB1dEVsZW1lbnQsICcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gZGlzcGF0Y2ggaW5wdXQgZXZlbnRcbiAgICAgIHZhciBldmVudCA9IG5ldyBFdmVudCgnaW5wdXQnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIGlmIChfdGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgICAvLyBzZXQgZm9jdXMgb24gdGhlIHNlYXJjaCBmaWVsZFxuICAgICAgICBfdGhpcy5pbnB1dEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnKSk7XG4gICAgICB9XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSk7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgaW5jcmVtZW50YWwgPSBfdGhpcyRwcm9wcy5pbmNyZW1lbnRhbCxcbiAgICAgICAgb25TZWFyY2ggPSBfdGhpcyRwcm9wcy5vblNlYXJjaDtcbiAgICAgIGlmIChvblNlYXJjaCAmJiBpbmNyZW1lbnRhbCkge1xuICAgICAgICBvblNlYXJjaCgnJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNldFJlZlwiLCBmdW5jdGlvbiAoaW5wdXRFbGVtZW50KSB7XG4gICAgICBfdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaW5wdXRSZWYpIHtcbiAgICAgICAgX3RoaXMucHJvcHMuaW5wdXRSZWYoaW5wdXRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25LZXlVcFwiLCBmdW5jdGlvbiAoZXZlbnQsIGluY3JlbWVudGFsLCBvblNlYXJjaCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2YWx1ZTogZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICB9KTtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbktleVVwKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uS2V5VXAoZXZlbnQpO1xuICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG9uU2VhcmNoICYmIChldmVudC5rZXkgIT09IGtleXMuRU5URVIgJiYgaW5jcmVtZW50YWwgfHwgZXZlbnQua2V5ID09PSBrZXlzLkVOVEVSICYmICFpc1NlYXJjaFN1cHBvcnRlZCkpIHtcbiAgICAgICAgb25TZWFyY2goZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUZpZWxkU2VhcmNoQ2xhc3MsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUZpZWxkU2VhcmNoQ2xhc3MsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICBpZiAoIXRoaXMuaW5wdXRFbGVtZW50KSByZXR1cm47XG4gICAgICBpc1NlYXJjaFN1cHBvcnRlZCA9IEJyb3dzZXIuaXNFdmVudFN1cHBvcnRlZCgnc2VhcmNoJywgdGhpcy5pbnB1dEVsZW1lbnQpO1xuICAgICAgaWYgKGlzU2VhcmNoU3VwcG9ydGVkKSB7XG4gICAgICAgIHZhciBvblNlYXJjaCA9IGZ1bmN0aW9uIG9uU2VhcmNoKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKF90aGlzMi5wcm9wcy5vblNlYXJjaCkge1xuICAgICAgICAgICAgaWYgKCFldmVudCB8fCAhZXZlbnQudGFyZ2V0IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICAgICAgICAgIF90aGlzMi5wcm9wcy5vblNlYXJjaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VhcmNoJywgb25TZWFyY2gpO1xuICAgICAgICB0aGlzLmNsZWFudXBzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghX3RoaXMyLmlucHV0RWxlbWVudCkgcmV0dXJuO1xuICAgICAgICAgIF90aGlzMi5pbnB1dEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2VhcmNoJywgb25TZWFyY2gpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LnZhbHVlICE9PSBfdGhpczIuc3RhdGUudmFsdWUpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChfdGhpczIucHJvcHMub25TZWFyY2gpIHtcbiAgICAgICAgICAgIF90aGlzMi5wcm9wcy5vblNlYXJjaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG9uQ2hhbmdlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmNsZWFudXBzLmZvckVhY2goZnVuY3Rpb24gKGNsZWFudXApIHtcbiAgICAgICAgcmV0dXJuIGNsZWFudXAoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICB2YXIgX3JlZiA9IHRoaXMuY29udGV4dCxcbiAgICAgICAgZGVmYXVsdEZ1bGxXaWR0aCA9IF9yZWYuZGVmYXVsdEZ1bGxXaWR0aDtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBzdHlsZXNNZW1vaXplciA9IF90aGlzJHByb3BzMi5zdHlsZXNNZW1vaXplcixcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczIuaWQsXG4gICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wczIubmFtZSxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczIucGxhY2Vob2xkZXIsXG4gICAgICAgIGlzSW52YWxpZCA9IF90aGlzJHByb3BzMi5pc0ludmFsaWQsXG4gICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMyLmRpc2FibGVkLFxuICAgICAgICBfdGhpcyRwcm9wczIkZnVsbFdpZHQgPSBfdGhpcyRwcm9wczIuZnVsbFdpZHRoLFxuICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wczIkZnVsbFdpZHQgPT09IHZvaWQgMCA/IGRlZmF1bHRGdWxsV2lkdGggOiBfdGhpcyRwcm9wczIkZnVsbFdpZHQsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMi5pc0xvYWRpbmcsXG4gICAgICAgIGlucHV0UmVmID0gX3RoaXMkcHJvcHMyLmlucHV0UmVmLFxuICAgICAgICBpbmNyZW1lbnRhbCA9IF90aGlzJHByb3BzMi5pbmNyZW1lbnRhbCxcbiAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMi5jb21wcmVzc2VkLFxuICAgICAgICBvblNlYXJjaCA9IF90aGlzJHByb3BzMi5vblNlYXJjaCxcbiAgICAgICAgX2lzQ2xlYXJhYmxlID0gX3RoaXMkcHJvcHMyLmlzQ2xlYXJhYmxlLFxuICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wczIuYXBwZW5kLFxuICAgICAgICBwcmVwZW5kID0gX3RoaXMkcHJvcHMyLnByZXBlbmQsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZTtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy52YWx1ZSAhPT0gJ3N0cmluZycpIHZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcblxuICAgICAgLy8gU2V0IGFjdHVhbCB2YWx1ZSBvZiBpc0NsZWFyYWJsZSBpZiB2YWx1ZSBleGlzdHMgYXMgd2VsbFxuICAgICAgdmFyIGlzQ2xlYXJhYmxlID0gQm9vbGVhbihfaXNDbGVhcmFibGUgJiYgdmFsdWUgJiYgIXJlc3QucmVhZE9ubHkgJiYgIWRpc2FibGVkKTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRmllbGRTZWFyY2gnLCB7XG4gICAgICAgICdldWlGaWVsZFNlYXJjaC1pc0xvYWRpbmcnOiBpc0xvYWRpbmcsXG4gICAgICAgICdldWlGaWVsZFNlYXJjaC1pc0NsZWFyYWJsZSc6IGlzQ2xlYXJhYmxlLFxuICAgICAgICAnZXVpRmllbGRTZWFyY2gtaXNJbnZhbGlkJzogaXNJbnZhbGlkXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIHN0eWxlcyA9IHN0eWxlc01lbW9pemVyKGV1aUZpZWxkU2VhcmNoU3R5bGVzKTtcbiAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUZpZWxkU2VhcmNoLCBjb21wcmVzc2VkID8gc3R5bGVzLmNvbXByZXNzZWQgOiBzdHlsZXMudW5jb21wcmVzc2VkLCBmdWxsV2lkdGggPyBzdHlsZXMuZnVsbFdpZHRoIDogc3R5bGVzLmZvcm1XaWR0aCwgKHByZXBlbmQgfHwgYXBwZW5kKSAmJiBzdHlsZXMuaW5Hcm91cF07XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aUZpZWxkU2VhcmNoLmNsZWFyU2VhcmNoQnV0dG9uTGFiZWxcIixcbiAgICAgICAgZGVmYXVsdDogXCJDbGVhciBzZWFyY2ggaW5wdXRcIlxuICAgICAgfSwgZnVuY3Rpb24gKGNsZWFyU2VhcmNoQnV0dG9uTGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXQsIHtcbiAgICAgICAgICBpY29uOiBcInNlYXJjaFwiLFxuICAgICAgICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICAgIGlzSW52YWxpZDogaXNJbnZhbGlkLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgIGNsZWFyOiBpc0NsZWFyYWJsZSA/IHtcbiAgICAgICAgICAgIG9uQ2xpY2s6IF90aGlzMy5vbkNsZWFyLFxuICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiBjbGVhclNlYXJjaEJ1dHRvbkxhYmVsLFxuICAgICAgICAgICAgJ2RhdGEtdGVzdC1zdWJqJzogJ2NsZWFyU2VhcmNoQnV0dG9uJ1xuICAgICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICAgICAgICBhcHBlbmQ6IGFwcGVuZCxcbiAgICAgICAgICBwcmVwZW5kOiBwcmVwZW5kXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpVmFsaWRhdGFibGVDb250cm9sLCB7XG4gICAgICAgICAgaXNJbnZhbGlkOiBpc0ludmFsaWRcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcImlucHV0XCIsIF9leHRlbmRzKHtcbiAgICAgICAgICB0eXBlOiBcInNlYXJjaFwiLFxuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgICAgb25LZXlVcDogZnVuY3Rpb24gb25LZXlVcChlKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMzLm9uS2V5VXAoZSwgaW5jcmVtZW50YWwsIG9uU2VhcmNoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICByZWY6IF90aGlzMy5zZXRSZWZcbiAgICAgICAgfSwgcmVzdCkpKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlGaWVsZFNlYXJjaENsYXNzLCBcImNvbnRleHRUeXBlXCIsIEZvcm1Db250ZXh0KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlGaWVsZFNlYXJjaENsYXNzLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIGluY3JlbWVudGFsOiBmYWxzZSxcbiAgY29tcHJlc3NlZDogZmFsc2UsXG4gIGlzQ2xlYXJhYmxlOiB0cnVlXG59KTtcbkV1aUZpZWxkU2VhcmNoQ2xhc3MucHJvcFR5cGVzID0ge1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBFeHBhbmQgdG8gZmlsbCAxMDAlIG9mIHRoZSBwYXJlbnQuXG4gICAgICogRGVmYXVsdHMgdG8gYGZ1bGxXaWR0aGAgcHJvcCBvZiBgPEV1aUZvcm0+YC5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIFtFbnRlcl0gT1Igb24gY2hhbmdlIGlmIHRoZSBpbmNyZW1lbnRhbCBwcm9wIGlzIGB0cnVlYC5cbiAgICAgKiBJZiB5b3UgZG9uJ3QgbmVlZCB0aGUgb25bRW50ZXJdIGZ1bmN0aW9uYWxpdHksIHByZWZlciB1c2luZyBvbkNoYW5nZVxuICAgICAqL1xuICBvblNlYXJjaDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIFdoZW4gYHRydWVgIHRoZSBzZWFyY2ggd2lsbCBiZSBleGVjdXRlZCAodGhhdCBpcywgdGhlIGBvblNlYXJjaGAgd2lsbCBiZSBjYWxsZWQpIGFzIHRoZVxuICAgICAqIHVzZXIgdHlwZXMuXG4gICAgICovXG4gIGluY3JlbWVudGFsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogd2hlbiBgdHJ1ZWAgY3JlYXRlcyBhIHNob3J0ZXIgaGVpZ2h0IGlucHV0XG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIFNob3dzIGEgYnV0dG9uIHRoYXQgcXVpY2tseSBjbGVhcnMgYW55IGlucHV0XG4gICAgICovXG4gIGlzQ2xlYXJhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGJlZm9yZSBpbnB1dFxuICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgKi9cbiAgcHJlcGVuZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYWZ0ZXIgaW5wdXQuXG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07XG5leHBvcnQgdmFyIEV1aUZpZWxkU2VhcmNoID0gd2l0aEV1aVN0eWxlc01lbW9pemVyKEV1aUZpZWxkU2VhcmNoQ2xhc3MpOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vLyBXZSBkb24ndCBub3JtYWxseSB1c2UgJ0knIHByZWZpeGVzLCB0aGlzIGZpbGUgaXMgYW4gZXhjZXB0aW9uXG5cbnZhciBCcm93c2VySW1wbCA9IHtcbiAgaXNFdmVudFN1cHBvcnRlZDogZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChuYW1lLCBlbGVtZW50KSB7XG4gICAgcmV0dXJuIFwib25cIi5jb25jYXQobmFtZSkgaW4gZWxlbWVudDtcbiAgfVxufTtcbmV4cG9ydCB2YXIgQnJvd3NlciA9IE9iamVjdC5mcmVlemUoQnJvd3NlckltcGwpOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb3JtQ29udHJvbFN0eWxlcyB9IGZyb20gJy4uL2Zvcm0uc3R5bGVzJztcbmV4cG9ydCB2YXIgZXVpRmllbGRTZWFyY2hTdHlsZXMgPSBmdW5jdGlvbiBldWlGaWVsZFNlYXJjaFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGZvcm1TdHlsZXMgPSBldWlGb3JtQ29udHJvbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIGV1aUZpZWxkU2VhcmNoOiAvKiNfX1BVUkVfXyovY3NzKFwiLXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDsmOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLCY6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7fVwiLCBmb3JtU3R5bGVzLnNoYXJlZCwgXCIgJjppbnZhbGlke1wiLCBmb3JtU3R5bGVzLmludmFsaWQsIFwiO30mOmZvY3Vze1wiLCBmb3JtU3R5bGVzLmZvY3VzLCBcIjt9JjpkaXNhYmxlZHtcIiwgZm9ybVN0eWxlcy5kaXNhYmxlZCwgXCI7fSZbcmVhZE9ubHlde1wiLCBmb3JtU3R5bGVzLnJlYWRPbmx5LCBcIjt9JjphdXRvZmlsbHtcIiwgZm9ybVN0eWxlcy5hdXRvRmlsbCwgXCI7fTtsYWJlbDpldWlGaWVsZFNlYXJjaDtcIiksXG4gICAgLy8gU2tpcCB0aGUgY3NzKCkgb24gdGhlIGRlZmF1bHQgaGVpZ2h0IHRvIGF2b2lkIGdlbmVyYXRpbmcgYSBjbGFzc05hbWVcbiAgICB1bmNvbXByZXNzZWQ6IGZvcm1TdHlsZXMudW5jb21wcmVzc2VkLFxuICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoZm9ybVN0eWxlcy5jb21wcmVzc2VkLCBcIjtsYWJlbDpjb21wcmVzc2VkO1wiKSxcbiAgICAvLyBTa2lwIHRoZSBjc3MoKSBvbiB0aGUgZGVmYXVsdCB3aWR0aCB0byBhdm9pZCBnZW5lcmF0aW5nIGEgY2xhc3NOYW1lXG4gICAgZm9ybVdpZHRoOiBmb3JtU3R5bGVzLmZvcm1XaWR0aCxcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MoZm9ybVN0eWxlcy5mdWxsV2lkdGgsIFwiO2xhYmVsOmZ1bGxXaWR0aDtcIiksXG4gICAgLy8gTGF5b3V0IG1vZGlmaWVyc1xuICAgIGluR3JvdXA6IC8qI19fUFVSRV9fKi9jc3MoZm9ybVN0eWxlcy5pbkdyb3VwLCBcIjtsYWJlbDppbkdyb3VwO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUZvcm1FcnJvclRleHRTdHlsZXMgfSBmcm9tICcuL2Zvcm1fZXJyb3JfdGV4dC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUVycm9yVGV4dCA9IGZ1bmN0aW9uIEV1aUZvcm1FcnJvclRleHQoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtRXJyb3JUZXh0JywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUZvcm1FcnJvclRleHRTdHlsZXMpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBzdHlsZXMuZXVpRm9ybUVycm9yVGV4dCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIlxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aUZvcm1FcnJvclRleHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUZvcm1FcnJvclRleHRTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtRXJyb3JUZXh0U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpRm9ybUVycm9yVGV4dDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdwYWRkaW5nLXRvcCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIiBcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSwgXCIgY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYW5nZXIsIFwiOztsYWJlbDpldWlGb3JtRXJyb3JUZXh0O1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUZvcm1IZWxwVGV4dFN0eWxlcyB9IGZyb20gJy4vZm9ybV9oZWxwX3RleHQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1IZWxwVGV4dCA9IGZ1bmN0aW9uIEV1aUZvcm1IZWxwVGV4dChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1IZWxwVGV4dCcsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlGb3JtSGVscFRleHRTdHlsZXMpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBzdHlsZXMuZXVpRm9ybUhlbHBUZXh0LFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aUZvcm1IZWxwVGV4dC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpRm9ybUhlbHBUZXh0U3R5bGVzID0gZnVuY3Rpb24gZXVpRm9ybUhlbHBUZXh0U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpRm9ybUhlbHBUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3BhZGRpbmctdG9wJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiIFwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICd4cycpLCBcIiBjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhcmtTaGFkZSwgXCI7O2xhYmVsOmV1aUZvcm1IZWxwVGV4dDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjaGlsZHJlblwiLCBcImhlbHBUZXh0XCIsIFwiaXNJbnZhbGlkXCIsIFwiZXJyb3JcIiwgXCJsYWJlbFwiLCBcImxhYmVsVHlwZVwiLCBcImxhYmVsQXBwZW5kXCIsIFwiaGFzRW1wdHlMYWJlbFNwYWNlXCIsIFwiZnVsbFdpZHRoXCIsIFwiZGVzY3JpYmVkQnlJZHNcIiwgXCJkaXNwbGF5XCIsIFwiaGFzQ2hpbGRMYWJlbFwiLCBcImlkXCIsIFwiaXNEaXNhYmxlZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgQ2hpbGRyZW4sIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlR2VuZXJhdGVkSHRtbElkLCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVNwYWNlciB9IGZyb20gJy4uLy4uL3NwYWNlcic7XG5pbXBvcnQgeyBFdWlGb3JtSGVscFRleHQgfSBmcm9tICcuLi9mb3JtX2hlbHBfdGV4dCc7XG5pbXBvcnQgeyBFdWlGb3JtRXJyb3JUZXh0IH0gZnJvbSAnLi4vZm9ybV9lcnJvcl90ZXh0JztcbmltcG9ydCB7IEV1aUZvcm1MYWJlbCB9IGZyb20gJy4uL2Zvcm1fbGFiZWwnO1xuaW1wb3J0IHsgdXNlRm9ybUNvbnRleHQgfSBmcm9tICcuLi9ldWlfZm9ybV9jb250ZXh0JztcbmltcG9ydCB7IGV1aUZvcm1Sb3dTdHlsZXMgfSBmcm9tICcuL2Zvcm1fcm93LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBESVNQTEFZUyA9IFsncm93JywgJ2NvbHVtbkNvbXByZXNzZWQnLCAnY2VudGVyJywgJ2NlbnRlckNvbXByZXNzZWQnLFxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICovXG4nY29sdW1uQ29tcHJlc3NlZFN3aXRjaCcsXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKi9cbidyb3dDb21wcmVzc2VkJ107XG5leHBvcnQgdmFyIEV1aUZvcm1Sb3cgPSBmdW5jdGlvbiBFdWlGb3JtUm93KF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBoZWxwVGV4dCA9IF9yZWYuaGVscFRleHQsXG4gICAgaXNJbnZhbGlkID0gX3JlZi5pc0ludmFsaWQsXG4gICAgZXJyb3IgPSBfcmVmLmVycm9yLFxuICAgIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICBfcmVmJGxhYmVsVHlwZSA9IF9yZWYubGFiZWxUeXBlLFxuICAgIGxhYmVsVHlwZSA9IF9yZWYkbGFiZWxUeXBlID09PSB2b2lkIDAgPyAnbGFiZWwnIDogX3JlZiRsYWJlbFR5cGUsXG4gICAgbGFiZWxBcHBlbmQgPSBfcmVmLmxhYmVsQXBwZW5kLFxuICAgIF9yZWYkaGFzRW1wdHlMYWJlbFNwYSA9IF9yZWYuaGFzRW1wdHlMYWJlbFNwYWNlLFxuICAgIGhhc0VtcHR5TGFiZWxTcGFjZSA9IF9yZWYkaGFzRW1wdHlMYWJlbFNwYSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGhhc0VtcHR5TGFiZWxTcGEsXG4gICAgX2Z1bGxXaWR0aCA9IF9yZWYuZnVsbFdpZHRoLFxuICAgIGRlc2NyaWJlZEJ5SWRzID0gX3JlZi5kZXNjcmliZWRCeUlkcyxcbiAgICBfcmVmJGRpc3BsYXkgPSBfcmVmLmRpc3BsYXksXG4gICAgZGlzcGxheSA9IF9yZWYkZGlzcGxheSA9PT0gdm9pZCAwID8gJ3JvdycgOiBfcmVmJGRpc3BsYXksXG4gICAgX3JlZiRoYXNDaGlsZExhYmVsID0gX3JlZi5oYXNDaGlsZExhYmVsLFxuICAgIGhhc0NoaWxkTGFiZWwgPSBfcmVmJGhhc0NoaWxkTGFiZWwgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGhhc0NoaWxkTGFiZWwsXG4gICAgcHJvcHNJZCA9IF9yZWYuaWQsXG4gICAgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlRm9ybUNvbnRleHQgPSB1c2VGb3JtQ29udGV4dCgpLFxuICAgIGRlZmF1bHRGdWxsV2lkdGggPSBfdXNlRm9ybUNvbnRleHQuZGVmYXVsdEZ1bGxXaWR0aDtcbiAgdmFyIGZ1bGxXaWR0aCA9IF9mdWxsV2lkdGggIT09IG51bGwgJiYgX2Z1bGxXaWR0aCAhPT0gdm9pZCAwID8gX2Z1bGxXaWR0aCA6IGRlZmF1bHRGdWxsV2lkdGg7XG4gIHZhciBpZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCh7XG4gICAgY29uZGl0aW9uYWxJZDogcHJvcHNJZFxuICB9KTtcbiAgdmFyIGhhc0xhYmVsID0gbGFiZWwgfHwgbGFiZWxBcHBlbmQ7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgaXNGb2N1c2VkID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRJc0ZvY3VzZWQgPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgb25Gb2N1c1dpdGhpbiA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc2V0SXNGb2N1c2VkKHRydWUpO1xuICB9LCBbXSk7XG4gIHZhciBvbkJsdXJXaXRoaW4gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNldElzRm9jdXNlZChmYWxzZSk7XG4gIH0sIFtdKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtUm93Jywge1xuICAgICdldWlGb3JtUm93LS1oYXNFbXB0eUxhYmVsU3BhY2UnOiBoYXNFbXB0eUxhYmVsU3BhY2UsXG4gICAgJ2V1aUZvcm1Sb3ctLWhhc0xhYmVsJzogaGFzTGFiZWxcbiAgfSwgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUZvcm1Sb3dTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlGb3JtUm93LCBmdWxsV2lkdGggPyBzdHlsZXMuZnVsbFdpZHRoIDogc3R5bGVzLmZvcm1XaWR0aCwgc3R5bGVzW2Rpc3BsYXldXTtcbiAgdmFyIG9wdGlvbmFsSGVscFRleHRzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFoZWxwVGV4dCkgcmV0dXJuO1xuICAgIHZhciBoZWxwVGV4dHMgPSBBcnJheS5pc0FycmF5KGhlbHBUZXh0KSA/IGhlbHBUZXh0IDogW2hlbHBUZXh0XTtcbiAgICByZXR1cm4gaGVscFRleHRzLm1hcChmdW5jdGlvbiAoaGVscFRleHQsIGkpIHtcbiAgICAgIHZhciBrZXkgPSB0eXBlb2YgaGVscFRleHQgPT09ICdzdHJpbmcnID8gaGVscFRleHQgOiBpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUhlbHBUZXh0LCB7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBpZDogXCJcIi5jb25jYXQoaWQsIFwiLWhlbHAtXCIpLmNvbmNhdChpKSxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX3RleHRcIlxuICAgICAgfSwgaGVscFRleHQpO1xuICAgIH0pO1xuICB9LCBbaGVscFRleHQsIGlkXSk7XG4gIHZhciBvcHRpb25hbEVycm9ycyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmICghKGVycm9yICYmIGlzSW52YWxpZCkpIHJldHVybjtcbiAgICB2YXIgZXJyb3JUZXh0cyA9IEFycmF5LmlzQXJyYXkoZXJyb3IpID8gZXJyb3IgOiBbZXJyb3JdO1xuICAgIHJldHVybiBlcnJvclRleHRzLm1hcChmdW5jdGlvbiAoZXJyb3IsIGkpIHtcbiAgICAgIHZhciBrZXkgPSB0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnID8gZXJyb3IgOiBpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUVycm9yVGV4dCwge1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgaWQ6IFwiXCIuY29uY2F0KGlkLCBcIi1lcnJvci1cIikuY29uY2F0KGkpLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fdGV4dFwiXG4gICAgICB9LCBlcnJvcik7XG4gICAgfSk7XG4gIH0sIFtlcnJvciwgaXNJbnZhbGlkLCBpZF0pO1xuICB2YXIgYXJpYURlc2NyaWJlZEJ5ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRlc2NyaWJpbmdJZHMgPSBfdG9Db25zdW1hYmxlQXJyYXkoZGVzY3JpYmVkQnlJZHMgfHwgW10pO1xuICAgIGlmIChvcHRpb25hbEhlbHBUZXh0cyAhPT0gbnVsbCAmJiBvcHRpb25hbEhlbHBUZXh0cyAhPT0gdm9pZCAwICYmIG9wdGlvbmFsSGVscFRleHRzLmxlbmd0aCkge1xuICAgICAgb3B0aW9uYWxIZWxwVGV4dHMuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uYWxIZWxwVGV4dCkge1xuICAgICAgICByZXR1cm4gZGVzY3JpYmluZ0lkcy5wdXNoKG9wdGlvbmFsSGVscFRleHQucHJvcHMuaWQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25hbEVycm9ycyAhPT0gbnVsbCAmJiBvcHRpb25hbEVycm9ycyAhPT0gdm9pZCAwICYmIG9wdGlvbmFsRXJyb3JzLmxlbmd0aCkge1xuICAgICAgb3B0aW9uYWxFcnJvcnMuZm9yRWFjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJpbmdJZHMucHVzaChlcnJvci5wcm9wcy5pZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGRlc2NyaWJpbmdJZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZGVzY3JpYmluZ0lkcy5qb2luKCcgJyk7XG4gICAgfVxuICB9LCBbZGVzY3JpYmVkQnlJZHMsIG9wdGlvbmFsSGVscFRleHRzLCBvcHRpb25hbEVycm9yc10pO1xuICB2YXIgZmllbGQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3JlZjIsIF9jaGlsZCRwcm9wcyRkaXNhYmxlZDtcbiAgICB2YXIgY2hpbGQgPSBDaGlsZHJlbi5vbmx5KGNoaWxkcmVuKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgaWQ6IGlkLFxuICAgICAgLy8gQWxsb3cgdGhlIGNoaWxkJ3MgZGlzYWJsZWQgb3IgaXNEaXNhYmxlZCBwcm9wIHRvIHN1cGVyY2VkZSB0aGUgYGlzRGlzYWJsZWRgXG4gICAgICBkaXNhYmxlZDogKF9yZWYyID0gKF9jaGlsZCRwcm9wcyRkaXNhYmxlZCA9IGNoaWxkLnByb3BzLmRpc2FibGVkKSAhPT0gbnVsbCAmJiBfY2hpbGQkcHJvcHMkZGlzYWJsZWQgIT09IHZvaWQgMCA/IF9jaGlsZCRwcm9wcyRkaXNhYmxlZCA6IGNoaWxkLnByb3BzLmlzRGlzYWJsZWQpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IGlzRGlzYWJsZWQsXG4gICAgICAnYXJpYS1kZXNjcmliZWRieSc6IGFyaWFEZXNjcmliZWRCeVxuICAgIH0pO1xuICB9LCBbY2hpbGRyZW4sIGlkLCBpc0Rpc2FibGVkLCBhcmlhRGVzY3JpYmVkQnldKTtcbiAgdmFyIEVsZW1lbnQgPSBsYWJlbFR5cGUgPT09ICdsZWdlbmQnID8gJ2ZpZWxkc2V0JyA6ICdkaXYnO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGlkOiBcIlwiLmNvbmNhdChpZCwgXCItcm93XCIpXG4gIH0sIHJlc3QpLCBoYXNMYWJlbCA/IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlGb3JtUm93X19sYWJlbFdyYXBwZXJcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUZvcm1MYWJlbCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogXCJldWlGb3JtUm93X19sYWJlbFwiLFxuICAgIFwiYXJpYS1pbnZhbGlkXCI6IGlzSW52YWxpZCxcbiAgICBpc0ludmFsaWQ6IGlzSW52YWxpZCxcbiAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkICYmICFpc0Rpc2FibGVkLFxuICAgIGlkOiBcIlwiLmNvbmNhdChpZCwgXCItbGFiZWxcIilcbiAgICAvLyBFeGNsdXNpdmVVbmlvbiBzaGVuYW5pZ2Fuc1xuICB9LCBsYWJlbFR5cGUgPT09ICdsZWdlbmQnID8ge1xuICAgIHR5cGU6IGxhYmVsVHlwZVxuICB9IDoge1xuICAgIHR5cGU6IGxhYmVsVHlwZSxcbiAgICBodG1sRm9yOiBoYXNDaGlsZExhYmVsID8gaWQgOiB1bmRlZmluZWRcbiAgfSksIGxhYmVsKSwgbGFiZWxBcHBlbmQgJiYgJyAnLCBsYWJlbEFwcGVuZCkgOiBoYXNFbXB0eUxhYmVsU3BhY2UgJiYgX19fRW1vdGlvbkpTWChFdWlTcGFjZXIsIHtcbiAgICBzaXplOiBcIm1cIixcbiAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fbGFiZWxXcmFwcGVyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlGb3JtUm93X19maWVsZFdyYXBwZXJcIixcbiAgICBvbkZvY3VzOiBvbkZvY3VzV2l0aGluLFxuICAgIG9uQmx1cjogb25CbHVyV2l0aGluXG4gIH0sIGZpZWxkLCBvcHRpb25hbEVycm9ycywgb3B0aW9uYWxIZWxwVGV4dHMpKTtcbn07XG5FdWlGb3JtUm93LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogRGVmYXVsdHMgdG8gcmVuZGVyaW5nIGEgYDxsYWJlbD5gIGJ1dCBpZiBwYXNzZWQgYCdsZWdlbmQnYCBmb3IgbGFiZWxUeXBlLFxuICAgICAqIHdpbGwgcmVuZGVyIGJvdGggYSBgPGxlZ2VuZD5gIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGFpbmVyIGFzIGEgYDxmaWVsZHNldD5gXG4gICAgICovXG4gIGxhYmVsVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImxhYmVsXCJdKSwgUHJvcFR5cGVzLm9uZU9mKFtcImxlZ2VuZFwiXSldKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIC0gYGNvbHVtbkNvbXByZXNzZWRgIGNyZWF0ZXMgYSBjb21wcmVzc2VkIGFuZCBob3Jpem9udGFsIGxheW91dFxuICAgICAqIC0gYGNvbHVtbkNvbXByZXNzZWRTd2l0Y2hgIC0gKipkZXByZWNhdGVkKiosIHVzZSBgY29sdW1uQ29tcHJlc3NlZGAgaW5zdGVhZFxuICAgICAqIC0gYGNlbnRlcmAvYGNlbnRlckNvbXByZXNzZWRgIGhlbHBzIGFsaWduIG5vbi1pbnB1dCBjb250ZW50IGJldHRlciB3aXRoIGlubGluZSBmb3JtIGxheW91dHNcbiAgICAgKiAtIGByb3dDb21wcmVzc2VkYCAtICoqZGVwcmVjYXRlZCoqLCBkb2VzIG5vdCBjdXJyZW50bHkgYWZmZWN0IHN0eWxpbmdcbiAgICAgKi9cbiAgLyoqXG4gICAgICogLSBgY29sdW1uQ29tcHJlc3NlZGAgY3JlYXRlcyBhIGNvbXByZXNzZWQgYW5kIGhvcml6b250YWwgbGF5b3V0XG4gICAgICogLSBgY29sdW1uQ29tcHJlc3NlZFN3aXRjaGAgLSAqKmRlcHJlY2F0ZWQqKiwgdXNlIGBjb2x1bW5Db21wcmVzc2VkYCBpbnN0ZWFkXG4gICAgICogLSBgY2VudGVyYC9gY2VudGVyQ29tcHJlc3NlZGAgaGVscHMgYWxpZ24gbm9uLWlucHV0IGNvbnRlbnQgYmV0dGVyIHdpdGggaW5saW5lIGZvcm0gbGF5b3V0c1xuICAgICAqIC0gYHJvd0NvbXByZXNzZWRgIC0gKipkZXByZWNhdGVkKiosIGRvZXMgbm90IGN1cnJlbnRseSBhZmZlY3Qgc3R5bGluZ1xuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBVc2VmdWwgZm9yIGlubGluZSBmb3JtIGxheW91dHMsIHByaW1hcmlseSBmb3IgY29udGVudCB0aGF0XG4gICAgICogbmVlZHMgdG8gYmUgYWxpZ25lZCB3aXRoIGlucHV0cyBidXQgZG9lcyBub3QgbmVlZCBhIGxhYmVsXG4gICAgICovXG4gIC8qKlxuICAgICAqIFVzZWZ1bCBmb3IgaW5saW5lIGZvcm0gbGF5b3V0cywgcHJpbWFyaWx5IGZvciBjb250ZW50IHRoYXRcbiAgICAgKiBuZWVkcyB0byBiZSBhbGlnbmVkIHdpdGggaW5wdXRzIGJ1dCBkb2VzIG5vdCBuZWVkIGEgbGFiZWxcbiAgICAgKi9cbiAgaGFzRW1wdHlMYWJlbFNwYWNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogRXhwYW5kIHRvIGZpbGwgMTAwJSBvZiB0aGUgcGFyZW50LlxuICAgICAqIERlZmF1bHRzIHRvIGBmdWxsV2lkdGhgIHByb3Agb2YgYDxFdWlGb3JtPmAuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRXhwYW5kIHRvIGZpbGwgMTAwJSBvZiB0aGUgcGFyZW50LlxuICAgICAqIERlZmF1bHRzIHRvIGBmdWxsV2lkdGhgIHByb3Agb2YgYDxFdWlGb3JtPmAuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSURzIG9mIGFkZGl0aW9uYWwgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgcGFydCBvZiBjaGlsZHJlbidzIGBhcmlhLWRlc2NyaWJlZGJ5YFxuICAgICAqL1xuICAvKipcbiAgICAgKiBJRHMgb2YgYWRkaXRpb25hbCBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSBwYXJ0IG9mIGNoaWxkcmVuJ3MgYGFyaWEtZGVzY3JpYmVkYnlgXG4gICAgICovXG4gIGRlc2NyaWJlZEJ5SWRzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQpLFxuICAvKipcbiAgICAgKiBFc2NhcGUgaGF0Y2ggdG8gbm90IHJlbmRlciBkdXBsaWNhdGUgbGFiZWxzIGlmIHRoZSBjaGlsZCBhbHNvIHJlbmRlcnMgYSBsYWJlbFxuICAgICAqL1xuICAvKipcbiAgICAgKiBFc2NhcGUgaGF0Y2ggdG8gbm90IHJlbmRlciBkdXBsaWNhdGUgbGFiZWxzIGlmIHRoZSBjaGlsZCBhbHNvIHJlbmRlcnMgYSBsYWJlbFxuICAgICAqL1xuICBoYXNDaGlsZExhYmVsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogUmVhY3RFbGVtZW50IHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgLyoqXG4gICAgICogUmVhY3RFbGVtZW50IHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogQWRkcyBhbiBleHRyYSBub2RlIHRvIHRoZSByaWdodCBvZiB0aGUgZm9ybSBsYWJlbCB3aXRob3V0XG4gICAgICogYmVpbmcgY29udGFpbmVkIGluc2lkZSB0aGUgZm9ybSBsYWJlbC4gR29vZCBmb3IgdGhpbmdzXG4gICAgICogbGlrZSBkb2N1bWVudGF0aW9uIGxpbmtzLlxuICAgICAqL1xuICAvKipcbiAgICAgKiBBZGRzIGFuIGV4dHJhIG5vZGUgdG8gdGhlIHJpZ2h0IG9mIHRoZSBmb3JtIGxhYmVsIHdpdGhvdXRcbiAgICAgKiBiZWluZyBjb250YWluZWQgaW5zaWRlIHRoZSBmb3JtIGxhYmVsLiBHb29kIGZvciB0aGluZ3NcbiAgICAgKiBsaWtlIGRvY3VtZW50YXRpb24gbGlua3MuXG4gICAgICovXG4gIGxhYmVsQXBwZW5kOiBQcm9wVHlwZXMuYW55LFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcbiAgZXJyb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogIEFkZHMgYSBzaW5nbGUgbm9kZS9zdHJpbmcgb3IgYW4gYXJyYXkgb2Ygbm9kZXMvc3RyaW5ncyBiZWxvdyB0aGUgaW5wdXRcbiAgICAgKi9cbiAgLyoqXG4gICAgICogIEFkZHMgYSBzaW5nbGUgbm9kZS9zdHJpbmcgb3IgYW4gYXJyYXkgb2Ygbm9kZXMvc3RyaW5ncyBiZWxvdyB0aGUgaW5wdXRcbiAgICAgKi9cbiAgaGVscFRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogIFBhc3NlZCBhbG9uZyB0byB0aGUgbGFiZWwgZWxlbWVudDsgYW5kIHRvIHRoZSBjaGlsZCBmaWVsZCBlbGVtZW50IHdoZW4gYGRpc2FibGVkYCBkb2Vzbid0IGFscmVhZHkgZXhpc3Qgb24gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQuXG4gICAgICovXG4gIC8qKlxuICAgICAqICBQYXNzZWQgYWxvbmcgdG8gdGhlIGxhYmVsIGVsZW1lbnQ7IGFuZCB0byB0aGUgY2hpbGQgZmllbGQgZWxlbWVudCB3aGVuIGBkaXNhYmxlZGAgZG9lc24ndCBhbHJlYWR5IGV4aXN0IG9uIHRoZSBjaGlsZCBmaWVsZCBlbGVtZW50LlxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aUZvcm1WYXJpYWJsZXMgfSBmcm9tICcuLi9mb3JtLnN0eWxlcyc7XG5leHBvcnQgdmFyIGV1aUZvcm1Sb3dTdHlsZXMgPSBmdW5jdGlvbiBldWlGb3JtUm93U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBfZXVpRm9ybVZhcmlhYmxlcyA9IGV1aUZvcm1WYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBtYXhXaWR0aCA9IF9ldWlGb3JtVmFyaWFibGVzLm1heFdpZHRoLFxuICAgIGNvbnRyb2xIZWlnaHQgPSBfZXVpRm9ybVZhcmlhYmxlcy5jb250cm9sSGVpZ2h0LFxuICAgIGNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0ID0gX2V1aUZvcm1WYXJpYWJsZXMuY29udHJvbENvbXByZXNzZWRIZWlnaHQ7XG4gIHJldHVybiB7XG4gICAgZXVpRm9ybVJvdzogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6ZmxleDsrLmV1aUJ1dHRvbntcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGV1aVRoZW1lLnNpemUuYmFzZSksIFwiO307bGFiZWw6ZXVpRm9ybVJvdztcIiksXG4gICAgLy8gU2tpcCBjc3NgYCB0byBhdm9pZCBnZW5lcmF0aW5nIGFuIEVtb3Rpb24gY2xhc3NOYW1lXG4gICAgZm9ybVdpZHRoOiBcIlxcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBtYXhXaWR0aCksIFwiXFxuICAgIFwiKSxcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIiksXG4gICAgLy8gU2tpcCBjc3NgYCB0byBhdm9pZCBnZW5lcmF0aW5nIGFuIGV4dHJhIGNsYXNzTmFtZVxuICAgIHJvdzogXCJcXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICAgIHJvdy1nYXA6IFwiLmNvbmNhdChldWlUaGVtZS5zaXplLnhzLCBcIjtcXG5cXG4gICAgICAuZXVpRm9ybVJvd19fbGFiZWxXcmFwcGVyIHtcXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XFxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgICAgfVxcblxcbiAgICAgICsgLmV1aUZvcm1Sb3cge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgZXVpVGhlbWUuc2l6ZS5iYXNlKSwgXCJcXG4gICAgICB9XFxuICAgIFwiKSxcbiAgICAvLyBObyBkaWZmZXJlbmNlIGZyb20gdGhlIHVuY29tcHJlc3NlZCByb3cgZm9yIHRoaXMgY3VycmVudCB0aGVtZSBBRkFJQ1RcbiAgICAvLyBUT0RPOiBEZXByZWNhdGUgcHJvcFxuICAgIGdldCByb3dDb21wcmVzc2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm93O1xuICAgIH0sXG4gICAgY29sdW1uQ29tcHJlc3NlZDogLyojX19QVVJFX18qL2NzcyhcImZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpzdHJldGNoO2NvbHVtbi1nYXA6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7LmV1aUZvcm1Sb3dfX2xhYmVse2h5cGhlbnM6YXV0bzt9LmV1aUZvcm1Sb3dfX2xhYmVsV3JhcHBlcntmbGV4LWJhc2lzOmNhbGMoMzMlIC0gXCIsIGV1aVRoZW1lLnNpemUucywgXCIpO1wiLCBsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCAwKSwgXCIgbGluZS1oZWlnaHQ6XCIsIGNvbnRyb2xDb21wcmVzc2VkSGVpZ2h0LCBcIjt9LmV1aUZvcm1Sb3dfX2ZpZWxkV3JhcHBlcntmbGV4LWJhc2lzOjY3JTtcIiwgbG9naWNhbENTUygnbWluLXdpZHRoJywgMCksIFwiO30rLmV1aUZvcm1Sb3d7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBldWlUaGVtZS5zaXplLnMpLCBcIjt9JjpoYXMoLmV1aVN3aXRjaCl7Jjpub3QoOmZpcnN0LWNoaWxkKXtcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGV1aVRoZW1lLnNpemUubSksIFwiO30mOm5vdCg6bGFzdC1jaGlsZCl7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBldWlUaGVtZS5zaXplLm0pLCBcIjt9LmV1aUZvcm1Sb3dfX2xhYmVsV3JhcHBlcntsaW5lLWhlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZS5iYXNlLCBcIjt9fTtsYWJlbDpjb2x1bW5Db21wcmVzc2VkO1wiKSxcbiAgICAvLyBIYW5kbGVkIGJ5IDpoYXMgQ1NTIG5vdyByYXRoZXIgdGhhbiBhIHNlcGFyYXRlIG1vZGlmaWVyL3Byb3BcbiAgICAvLyBUT0RPOiBEZXByZWNhdGUgcHJvcFxuICAgIGdldCBjb2x1bW5Db21wcmVzc2VkU3dpdGNoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sdW1uQ29tcHJlc3NlZDtcbiAgICB9LFxuICAgIC8vIENlbnRlciBkaXNwbGF5IGlzIHByaW1hcmlseSBmb3IgaW5saW5lIGZvcm0gcm93cywgd2hpY2ggbWF5IGhhdmUgaGF2ZVxuICAgIC8vIGZpZWxkIGNvbnRlbnQgdGhhdCBpcyBzaG9ydGVyIHRoYW4gZm9ybSBjb250cm9scyAoZS5nLiBzd2l0Y2hlcywgdGV4dCksXG4gICAgLy8gYW5kIHNob3VsZCB2ZXJ0aWNhbGx5IGNlbnRlciBzYWlkIGNvbnRlbnRcbiAgICBjZW50ZXJEaXNwbGF5Q3NzOiBmdW5jdGlvbiBjZW50ZXJEaXNwbGF5Q3NzKGNvbXByZXNzZWQpIHtcbiAgICAgIHJldHVybiBcIlxcbiAgICAgIC5ldWlGb3JtUm93X19maWVsZFdyYXBwZXIge1xcbiAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICBcIi5jb25jYXQobG9naWNhbENTUygnbWluLWhlaWdodCcsIGNvbXByZXNzZWQgPyBjb250cm9sQ29tcHJlc3NlZEhlaWdodCA6IGNvbnRyb2xIZWlnaHQpLCBcIlxcbiAgICAgIH1cXG4gICAgXCIpO1xuICAgIH0sXG4gICAgZ2V0IGNlbnRlcigpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKHRoaXMucm93LCBcIiBcIiwgdGhpcy5jZW50ZXJEaXNwbGF5Q3NzKGZhbHNlKSwgXCI7O2xhYmVsOmNlbnRlcjtcIik7XG4gICAgfSxcbiAgICBnZXQgY2VudGVyQ29tcHJlc3NlZCgpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKHRoaXMucm93LCBcIiBcIiwgdGhpcy5jZW50ZXJEaXNwbGF5Q3NzKHRydWUpLCBcIjs7bGFiZWw6Y2VudGVyQ29tcHJlc3NlZDtcIik7XG4gICAgfVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInNpemVcIiwgXCJtYXJnaW5cIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpSG9yaXpvbnRhbFJ1bGVTdHlsZXMgfSBmcm9tICcuL2hvcml6b250YWxfcnVsZS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ2Z1bGwnLCAnaGFsZicsICdxdWFydGVyJ107XG5leHBvcnQgdmFyIE1BUkdJTlMgPSBbJ25vbmUnLCAneHMnLCAncycsICdtJywgJ2wnLCAneGwnLCAneHhsJ107XG5leHBvcnQgdmFyIEV1aUhvcml6b250YWxSdWxlID0gZnVuY3Rpb24gRXVpSG9yaXpvbnRhbFJ1bGUoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdmdWxsJyA6IF9yZWYkc2l6ZSxcbiAgICBfcmVmJG1hcmdpbiA9IF9yZWYubWFyZ2luLFxuICAgIG1hcmdpbiA9IF9yZWYkbWFyZ2luID09PSB2b2lkIDAgPyAnbCcgOiBfcmVmJG1hcmdpbixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSG9yaXpvbnRhbFJ1bGUnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpSG9yaXpvbnRhbFJ1bGVTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlIb3Jpem9udGFsUnVsZSwgc3R5bGVzW3NpemVdLCBzdHlsZXNbbWFyZ2luXV07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiaHJcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSk7XG59O1xuRXVpSG9yaXpvbnRhbFJ1bGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgSFIuXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIG1hcmdpbjogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUhvcml6b250YWxSdWxlU3R5bGVzID0gZnVuY3Rpb24gZXVpSG9yaXpvbnRhbFJ1bGVTdHlsZXMoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUhvcml6b250YWxSdWxlOiAvKiNfX1BVUkVfXyovY3NzKFwiYm9yZGVyOm5vbmU7XCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluKSwgXCIgYmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVGhlbWUuYm9yZGVyLmNvbG9yLCBcIjtmbGV4LXNocmluazowO2ZsZXgtZ3JvdzowOztsYWJlbDpldWlIb3Jpem9udGFsUnVsZTtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBmdWxsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGw7XCIpLFxuICAgIGhhbGY6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnNTAlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXJnaW4taG9yaXpvbnRhbCcsICdhdXRvJyksIFwiOztsYWJlbDpoYWxmO1wiKSxcbiAgICBxdWFydGVyOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzI1JScpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLWhvcml6b250YWwnLCAnYXV0bycpLCBcIjs7bGFiZWw6cXVhcnRlcjtcIiksXG4gICAgLy8gTWFyZ2luc1xuICAgIG5vbmU6ICcnLFxuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS5tLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS5iYXNlLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUueGwsIFwiOztsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLnh4bCwgXCI7O2xhYmVsOnh4bDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJzdHlsZXNNZW1vaXplclwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwib25DbG9zZVwiLCBcInRpdGxlXCIsIFwib25IZWlnaHRDaGFuZ2VcIiwgXCJ0cmFuc2l0aW9uVHlwZVwiLCBcInRyYW5zaXRpb25EaXJlY3Rpb25cIiwgXCJvblRyYW5zaXRpb25Db21wbGV0ZVwiLCBcIm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlXCIsIFwiaXRlbXNcIiwgXCJpbml0aWFsRm9jdXNlZEl0ZW1JbmRleFwiLCBcInNob3dOZXh0UGFuZWxcIiwgXCJzaG93UHJldmlvdXNQYW5lbFwiLCBcInNpemVcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHRhYmJhYmxlIH0gZnJvbSAndGFiYmFibGUnO1xuaW1wb3J0IHsgd2l0aEV1aVN0eWxlc01lbW9pemVyLCBrZXlzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXInO1xuaW1wb3J0IHsgRXVpQ29udGV4dE1lbnVJdGVtIH0gZnJvbSAnLi9jb250ZXh0X21lbnVfaXRlbSc7XG5pbXBvcnQgeyBldWlDb250ZXh0TWVudVBhbmVsU3R5bGVzIH0gZnJvbSAnLi9jb250ZXh0X21lbnVfcGFuZWwuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nXTtcbmV4cG9ydCB2YXIgRXVpQ29udGV4dE1lbnVQYW5lbENsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aUNvbnRleHRNZW51UGFuZWxDbGFzcyhwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29udGV4dE1lbnVQYW5lbENsYXNzKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpQ29udGV4dE1lbnVQYW5lbENsYXNzLCBbcHJvcHNdKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiX2lzTW91bnRlZFwiLCBmYWxzZSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImJhY2tCdXR0b25cIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInBhbmVsXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpbml0aWFsUG9wb3ZlclBhcmVudFwiLCBudWxsKTtcbiAgICAvLyBGaW5kIGFsbCB0YWJiYWJsZSBtZW51IGl0ZW1zIG9uIGJvdGggcGFuZWwgaW5pdCBhbmRcbiAgICAvLyB3aGVuZXZlciBgbWVudUl0ZW1zYCByZXNldHMgd2hlbiBgcHJvcHMuaXRlbXNgIGNoYW5nZXNcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZmluZE1lbnVJdGVtc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkaXRlbXM7XG4gICAgICBpZiAoIV90aGlzLnBhbmVsKSByZXR1cm47XG4gICAgICBpZiAoISgoX3RoaXMkcHJvcHMkaXRlbXMgPSBfdGhpcy5wcm9wcy5pdGVtcykgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkaXRlbXMgIT09IHZvaWQgMCAmJiBfdGhpcyRwcm9wcyRpdGVtcy5sZW5ndGgpKSByZXR1cm47IC8vIFdlIG9ubHkgbmVlZCBtZW51IGl0ZW1zL2Fycm93IGtleSBuYXZpZ2F0aW9uIGZvciB0aGUgYGl0ZW1zYCBBUElcbiAgICAgIGlmIChfdGhpcy5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoKSByZXR1cm47IC8vIElmIHdlIGFscmVhZHkgaGF2ZSBtZW51IGl0ZW1zLCBubyBuZWVkIHRvIGNvbnRpbnVlXG5cbiAgICAgIHZhciB0YWJiYWJsZUl0ZW1zID0gdGFiYmFibGUoX3RoaXMucGFuZWwpO1xuICAgICAgaWYgKHRhYmJhYmxlSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBtZW51SXRlbXM6IHRhYmJhYmxlSXRlbXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImZvY3VzTWVudUl0ZW1cIiwgZnVuY3Rpb24gKGRpcmVjdGlvbikge1xuICAgICAgdmFyIF90aGlzJHN0YXRlJG1lbnVJdGVtcztcbiAgICAgIHZhciBpbmRleE9mZnNldCA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IC0xIDogMTtcbiAgICAgIHZhciBuZXh0Rm9jdXNlZEl0ZW1JbmRleDtcbiAgICAgIGlmIChfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1c2VyJ3Mga2V5Ym9hcmQgbmF2aWdhdGlvbiBvZiB0aGUgbWVudSwgdGhlbiB3ZSdsbCBmb2N1c1xuICAgICAgICAvLyBlaXRoZXIgdGhlIGZpcnN0IG9yIGxhc3QgaXRlbS5cbiAgICAgICAgbmV4dEZvY3VzZWRJdGVtSW5kZXggPSBkaXJlY3Rpb24gPT09ICd1cCcgPyBfdGhpcy5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0Rm9jdXNlZEl0ZW1JbmRleCA9IF90aGlzLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggKyBpbmRleE9mZnNldDtcbiAgICAgICAgaWYgKG5leHRGb2N1c2VkSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dEZvY3VzZWRJdGVtSW5kZXggPT09IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICBuZXh0Rm9jdXNlZEl0ZW1JbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZm9jdXNlZEl0ZW1JbmRleDogbmV4dEZvY3VzZWRJdGVtSW5kZXhcbiAgICAgIH0pO1xuICAgICAgKF90aGlzJHN0YXRlJG1lbnVJdGVtcyA9IF90aGlzLnN0YXRlLm1lbnVJdGVtc1tuZXh0Rm9jdXNlZEl0ZW1JbmRleF0pID09PSBudWxsIHx8IF90aGlzJHN0YXRlJG1lbnVJdGVtcyA9PT0gdm9pZCAwIHx8IF90aGlzJHN0YXRlJG1lbnVJdGVtcy5mb2N1cygpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBJZiB0aGlzIHBhbmVsIGNvbnRhaW5zIGl0ZW1zIHlvdSBjYW4gdXNlIHRoZSBsZWZ0IGFycm93IGtleSB0byBnbyBiYWNrIGF0IGFueSB0aW1lLlxuICAgICAgLy8gQnV0IGlmIGl0IGRvZXNuJ3QgY29udGFpbiBpdGVtcywgdGhlbiB5b3UgaGF2ZSB0byBmb2N1cyBvbiB0aGUgYmFjayBidXR0b24gc3BlY2lmaWNhbGx5LFxuICAgICAgLy8gc2luY2UgdGhlcmUgY291bGQgYmUgY29udGVudCBpbnNpZGUgdGhlIHBhbmVsIHdoaWNoIHJlcXVpcmVzIHVzZSBvZiB0aGUgbGVmdCBhcnJvdyBrZXksXG4gICAgICAvLyBlLmcuIHRleHQgaW5wdXRzLlxuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMuaXRlbXMsXG4gICAgICAgIG9uQ2xvc2UgPSBfdGhpcyRwcm9wcy5vbkNsb3NlLFxuICAgICAgICBzaG93UHJldmlvdXNQYW5lbCA9IF90aGlzJHByb3BzLnNob3dQcmV2aW91c1BhbmVsO1xuICAgICAgaWYgKG9uQ2xvc2UgJiYgKGl0ZW1zICE9PSBudWxsICYmIGl0ZW1zICE9PSB2b2lkIDAgJiYgaXRlbXMubGVuZ3RoIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IF90aGlzLmJhY2tCdXR0b24gfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gX3RoaXMucGFuZWwpKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuQVJST1dfTEVGVCkge1xuICAgICAgICAgIGlmIChzaG93UHJldmlvdXNQYW5lbCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgc2hvd1ByZXZpb3VzUGFuZWwoKTtcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGl0ZW1zICE9PSBudWxsICYmIGl0ZW1zICE9PSB2b2lkIDAgJiYgaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgY2FzZSBrZXlzLlRBQjpcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIE5PVEU6IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaXMgc3RhbGUgaWYgbm90IHdyYXBwZWQgaW4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICAgICAgICAgIHZhciBmb2N1c2VkSXRlbUluZGV4ID0gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmluZGV4T2YoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzeW5jIG91ciBpbnRlcm5hbCBzdGF0ZSB3aXRoIHRoZSB1c2VyIHRhYmJpbmcgdGhyb3VnaCBpdGVtc1xuICAgICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZm9jdXNlZEl0ZW1JbmRleDogZm9jdXNlZEl0ZW1JbmRleCA+PSAwICYmIGZvY3VzZWRJdGVtSW5kZXggPCBfdGhpcy5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoID8gZm9jdXNlZEl0ZW1JbmRleCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBrZXlzLkFSUk9XX1VQOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIF90aGlzLmZvY3VzTWVudUl0ZW0oJ3VwJyk7XG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2Uga2V5cy5BUlJPV19ET1dOOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIF90aGlzLmZvY3VzTWVudUl0ZW0oJ2Rvd24nKTtcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBrZXlzLkFSUk9XX1JJR0hUOlxuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLnNob3dOZXh0UGFuZWwpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMuc2hvd05leHRQYW5lbChvbkNsb3NlICYmIF90aGlzLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggPyBfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4IC0gMSAvLyBBY2NvdW50IGZvciBwYW5lbCB0aXRsZSBiYWNrIGJ1dHRvblxuICAgICAgICAgICAgICA6IF90aGlzLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXgpO1xuICAgICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVjbGFpbVBvcG92ZXJGb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHdhaXRpbmdGb3JJbml0aWFsUG9wb3ZlcjogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgX3RoaXMudGFrZUluaXRpYWxGb2N1cygpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvblRyYW5zaXRpb25Db21wbGV0ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMub25UcmFuc2l0aW9uQ29tcGxldGUpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25UcmFuc2l0aW9uQ29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicGFuZWxSZWZcIiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIF90aGlzLnBhbmVsID0gbm9kZTtcbiAgICAgIF90aGlzLnVwZGF0ZUhlaWdodCgpO1xuICAgICAgX3RoaXMuZ2V0SW5pdGlhbFBvcG92ZXJQYXJlbnQoKTtcbiAgICAgIF90aGlzLmZpbmRNZW51SXRlbXMoKTtcbiAgICB9KTtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHByZXZQcm9wczoge1xuICAgICAgICBpdGVtczogX3RoaXMucHJvcHMuaXRlbXNcbiAgICAgIH0sXG4gICAgICBtZW51SXRlbXM6IFtdLFxuICAgICAgZm9jdXNlZEl0ZW1JbmRleDogcHJvcHMub25DbG9zZSAmJiBwcm9wcy5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCAhPSBudWxsICYmIHByb3BzLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4ICE9PSAtMSA/IHByb3BzLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4ICsgMSAvLyBBY2NvdW50IGZvciBwYW5lbCB0aXRsZSBiYWNrIGJ1dHRvblxuICAgICAgOiBwcm9wcy5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCxcbiAgICAgIGN1cnJlbnRIZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgIHdhaXRpbmdGb3JJbml0aWFsUG9wb3ZlcjogZmFsc2UsXG4gICAgICB0b29rSW5pdGlhbEZvY3VzOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlDb250ZXh0TWVudVBhbmVsQ2xhc3MsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUNvbnRleHRNZW51UGFuZWxDbGFzcywgW3tcbiAgICBrZXk6IFwidGFrZUluaXRpYWxGb2N1c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0YWtlSW5pdGlhbEZvY3VzKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICAvLyBHaXZlIHBvc2l0aW9uaW5nIHRpbWUgdG8gcmVuZGVyIGJlZm9yZSBmb2N1cyBpcyBhcHBsaWVkLiBPdGhlcndpc2UgcGFnZSBqdW1wcy5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMyLl9pc01vdW50ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEb24ndCB0YWtlIGZvY3VzIHlldCBpZiBFdWlDb250ZXh0TWVudSBpcyBpbiBhIHBvcG92ZXJcbiAgICAgICAgLy8gYW5kIHRoZSBwb3BvdmVyIGlzIGluaXRpYWxseSBvcGVuaW5nL3RyYW5zaXRpb25pbmcgaW5cbiAgICAgICAgaWYgKF90aGlzMi5pbml0aWFsUG9wb3ZlclBhcmVudCAmJiBfdGhpczIuc3RhdGUud2FpdGluZ0ZvckluaXRpYWxQb3BvdmVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0dGluZyBmb2N1cyB3aGlsZSB0cmFuc2l0aW9uaW5nIGNhdXNlcyB0aGUgYW5pbWF0aW9uIHRvIGdsaXRjaCwgc28gd2UgaGF2ZSB0byB3YWl0XG4gICAgICAgIC8vIHVudGlsIGl0J3MgZmluaXNoZWQgYmVmb3JlIHdlIGZvY3VzIGFueXRoaW5nLlxuICAgICAgICBpZiAoX3RoaXMyLnByb3BzLnRyYW5zaXRpb25UeXBlKSB7XG4gICAgICAgICAgdmFyIF90aGlzMiRwYW5lbDtcbiAgICAgICAgICAvLyBJZiB0aGUgcGFuZWwgaXMgdHJhbnNpdGlvbmluZywgc2V0IGZvY3VzIHRvIHRoZSBwYW5lbCBzbyB0aGF0IHVzZXJzIHVzaW5nXG4gICAgICAgICAgLy8gYXJyb3cga2V5cyB0aGF0IGFyZSBmYXN0IGNsaWNrZXJzIGRvbid0IGFjY2lkZW50YWxseSBnZXQgc3RyYW5kZWQgZm9jdXNcbiAgICAgICAgICAvLyBvciB0cmlnZ2VyIGtleXN0cm9rZXMgd2hlbiBpdCBzaG91bGRuJ3RcbiAgICAgICAgICAoX3RoaXMyJHBhbmVsID0gX3RoaXMyLnBhbmVsKSA9PT0gbnVsbCB8fCBfdGhpczIkcGFuZWwgPT09IHZvaWQgMCB8fCBfdGhpczIkcGFuZWwuZm9jdXMoe1xuICAgICAgICAgICAgcHJldmVudFNjcm9sbDogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluaXRpYWwgZm9jdXMgaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLCBubyBuZWVkIHRvIGNvbnRpbnVlIGFuZCBwb3RlbnRpYWxseSBoaWphY2svZm9jdXMgZmlnaHRcbiAgICAgICAgaWYgKF90aGlzMi5zdGF0ZS50b29rSW5pdGlhbEZvY3VzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYGluaXRpYWxGb2N1c2VkSXRlbUluZGV4PXstMX1gIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBwcmV2ZW50aW5nIGluaXRpYWwgaXRlbSBmb2N1cyBpcyBkZXNpcmVkXG4gICAgICAgIGlmIChfdGhpczIuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAvLyBSZXNldHRpbmcgdGhlIGZvY3VzZWRJdGVtSW5kZXggdG8gMCBhbGxvd3Mga2V5Ym9hcmQgdXAvZG93biBiZWhhdmlvciB0b1xuICAgICAgICAgIC8vIHN0aWxsIHdvcmsgY29ycmVjdGx5IGxhdGVyIGlmIHRoZSBwYW5lbCBpcyBtYW51YWxseSB0YWJiZWQgaW50b1xuICAgICAgICAgIHJldHVybiBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdG9va0luaXRpYWxGb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIGZvY3VzZWRJdGVtSW5kZXg6IDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGFuIGl0ZW0gc2hvdWxkIGJlIGZvY3VzZWQsIGZvY3VzIGl0IChpZiBpdCBleGlzdHMpXG4gICAgICAgIGlmIChfdGhpczIuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCAhPSBudWxsICYmIF90aGlzMi5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGZvY3VzZWRJdGVtID0gX3RoaXMyLnN0YXRlLm1lbnVJdGVtc1tfdGhpczIuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleF07XG4gICAgICAgICAgaWYgKGZvY3VzZWRJdGVtKSB7XG4gICAgICAgICAgICBmb2N1c2VkSXRlbS5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIHRvb2tJbml0aWFsRm9jdXM6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlIGJhY2sgYnV0dG9uIHBhbmVsIHRpdGxlIGlzIHByZXNlbnQsIGZvY3VzIGl0XG4gICAgICAgIGlmIChfdGhpczIuYmFja0J1dHRvbikge1xuICAgICAgICAgIC8vIEZvY3VzIHRoZSBiYWNrIGJ1dHRvbiBmb3IgYm90aCBgaXRlbXNgIGFuZCBgY2hpbGRyZW5gIEFQSXNcbiAgICAgICAgICBfdGhpczIuYmFja0J1dHRvbi5mb2N1cygpO1xuICAgICAgICAgIC8vIElmIGBpdGVtc2AsIGVuc3VyZSBvdXIgZm9jdXNlZCBpdGVtIGluZGV4IGlzIGNvcnJlY3RcbiAgICAgICAgICBpZiAoX3RoaXMyLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGZvY3VzZWRJdGVtSW5kZXg6IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHRvb2tJbml0aWFsRm9jdXM6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZvY3VzIG9uIHRoZSBwYW5lbCBhcyBhIGxhc3QgcmVzb3J0LlxuICAgICAgICBpZiAoX3RoaXMyLnBhbmVsICYmICFfdGhpczIucGFuZWwuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICBfdGhpczIucGFuZWwuZm9jdXMoKTtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdG9va0luaXRpYWxGb2N1czogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShfLCBwcmV2U3RhdGUpIHtcbiAgICAgIGlmIChwcmV2U3RhdGUubWVudUl0ZW1zICE9PSB0aGlzLnN0YXRlLm1lbnVJdGVtcykge1xuICAgICAgICB0aGlzLmZpbmRNZW51SXRlbXMoKTtcbiAgICAgIH1cbiAgICAgIC8vIEZvY3VzIGlzbid0IGFsd2F5cyByZWFkeSB0byBiZSB0YWtlbiBvbiBtb3VudCwgc28gd2UgbmVlZCB0byBjYWxsIGl0XG4gICAgICAvLyBvbiB1cGRhdGUgYXMgd2VsbCBqdXN0IGluIGNhc2VcbiAgICAgIHRoaXMudGFrZUluaXRpYWxGb2N1cygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIC8vIElmIEV1aUNvbnRleHRNZW51IGlzIHVzZWQgd2l0aGluIGFuIEV1aVBvcG92ZXIsIHdlIG5lZWQgdG8gd2FpdCBmb3IgRXVpUG9wb3ZlciB0bzpcbiAgICAgIC8vIDEuIENvcnJlY3RseSBzZXQgaXRzIGByZXR1cm5Gb2N1c2AgdG8gdGhlIHRvZ2dsaW5nIGJ1dHRvbixcbiAgICAgIC8vICAgIHNvIGZvY3VzIGlzIGNvcnJlY3RseSByZXN0b3JlZCB0byB0aGUgcG9wb3ZlciB0b2dnbGUgb24gY2xvc2VcbiAgICAgIC8vIDIuIEZpbmlzaCBpdHMgcmVhY3QtZm9jdXMtb24gYGF1dG9Gb2N1c2AgYmVoYXZpb3IgYWZ0ZXIgdHJhbnNpdGlvbmluZyBpbixcbiAgICAgIC8vICAgIHNvIHRoZSBwYW5lbCBjYW4gaGFuZGxlIGl0cyBvd24gZm9jdXMgd2l0aG91dCBmb2N1cyBmaWdodGluZ1xuICAgICAgaWYgKHRoaXMuaW5pdGlhbFBvcG92ZXJQYXJlbnQpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsUG9wb3ZlclBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMucmVjbGFpbVBvcG92ZXJGb2N1cywge1xuICAgICAgICAgIG9uY2U6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRha2VJbml0aWFsRm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJGluaXRpYWxQb3BvdmVyUDtcbiAgICAgIChfdGhpcyRpbml0aWFsUG9wb3ZlclAgPSB0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50KSA9PT0gbnVsbCB8fCBfdGhpcyRpbml0aWFsUG9wb3ZlclAgPT09IHZvaWQgMCB8fCBfdGhpcyRpbml0aWFsUG9wb3ZlclAucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLnJlY2xhaW1Qb3BvdmVyRm9jdXMpO1xuICAgICAgdGhpcy5faXNNb3VudGVkID0gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVwZGF0ZUhlaWdodFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVIZWlnaHQoKSB7XG4gICAgICB2YXIgY3VycmVudEhlaWdodCA9IHRoaXMucGFuZWwgPyB0aGlzLnBhbmVsLmNsaWVudEhlaWdodCA6IDA7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5oZWlnaHQgIT09IGN1cnJlbnRIZWlnaHQpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25IZWlnaHRDaGFuZ2UpIHtcbiAgICAgICAgICB0aGlzLnByb3BzLm9uSGVpZ2h0Q2hhbmdlKGN1cnJlbnRIZWlnaHQpO1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaGVpZ2h0OiBjdXJyZW50SGVpZ2h0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0SW5pdGlhbFBvcG92ZXJQYXJlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW5pdGlhbFBvcG92ZXJQYXJlbnQoKSB7XG4gICAgICB2YXIgX3BhcmVudCRwYXJlbnROb2RlO1xuICAgICAgLy8gSWYgYHRyYW5zaXRpb25UeXBlYCBleGlzdHMsIHRoYXQgbWVhbnMgd2UncmUgbmF2aWdhdGluZyBiZXR3ZWVuIHBhbmVsc1xuICAgICAgLy8gYW5kIHRoZSBpbml0aWFsIHBvcG92ZXIgaGFzIGFscmVhZHkgbG9hZGVkLCBzbyB3ZSBzaG91bGRuJ3QgbmVlZCB0aGlzIGxvZ2ljXG4gICAgICBpZiAodGhpcy5wcm9wcy50cmFuc2l0aW9uVHlwZSkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLnBhbmVsKSByZXR1cm47XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYW5lbC5wYXJlbnROb2RlO1xuICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgICAgIHZhciBoYXNFdWlDb250ZXh0TWVudVBhcmVudCA9IHBhcmVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aUNvbnRleHRNZW51Jyk7XG5cbiAgICAgIC8vIEl0J3MgcG9zc2libGUgdG8gdXNlIGFuIEV1aUNvbnRleHRNZW51UGFuZWwgZGlyZWN0bHkgaW4gYSBwb3BvdmVyIHdpdGhvdXRcbiAgICAgIC8vIGFuIEV1aUNvbnRleHRNZW51LCBzbyB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIHRoYXQgd2hlbiBzZWFyY2hpbmcgcGFyZW50IG5vZGVzXG4gICAgICB2YXIgcG9wb3ZlclBhcmVudCA9IGhhc0V1aUNvbnRleHRNZW51UGFyZW50ID8gcGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwIHx8IChfcGFyZW50JHBhcmVudE5vZGUgPSBwYXJlbnQucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX3BhcmVudCRwYXJlbnROb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcGFyZW50JHBhcmVudE5vZGUucGFyZW50Tm9kZSA6IHBhcmVudCA9PT0gbnVsbCB8fCBwYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudC5wYXJlbnROb2RlO1xuICAgICAgaWYgKCFwb3BvdmVyUGFyZW50KSByZXR1cm47XG4gICAgICB2YXIgaGFzUG9wb3ZlclBhcmVudCA9ICEhcG9wb3ZlclBhcmVudC5kYXRhc2V0LnBvcG92ZXJQYW5lbDtcbiAgICAgIGlmICghaGFzUG9wb3ZlclBhcmVudCkgcmV0dXJuO1xuICAgICAgdGhpcy5pbml0aWFsUG9wb3ZlclBhcmVudCA9IHBvcG92ZXJQYXJlbnQ7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgd2FpdGluZ0ZvckluaXRpYWxQb3BvdmVyOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIHN0eWxlc01lbW9pemVyID0gX3RoaXMkcHJvcHMyLnN0eWxlc01lbW9pemVyLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMi5jaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgb25DbG9zZSA9IF90aGlzJHByb3BzMi5vbkNsb3NlLFxuICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzMi50aXRsZSxcbiAgICAgICAgb25IZWlnaHRDaGFuZ2UgPSBfdGhpcyRwcm9wczIub25IZWlnaHRDaGFuZ2UsXG4gICAgICAgIHRyYW5zaXRpb25UeXBlID0gX3RoaXMkcHJvcHMyLnRyYW5zaXRpb25UeXBlLFxuICAgICAgICB0cmFuc2l0aW9uRGlyZWN0aW9uID0gX3RoaXMkcHJvcHMyLnRyYW5zaXRpb25EaXJlY3Rpb24sXG4gICAgICAgIG9uVHJhbnNpdGlvbkNvbXBsZXRlID0gX3RoaXMkcHJvcHMyLm9uVHJhbnNpdGlvbkNvbXBsZXRlLFxuICAgICAgICBvblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSA9IF90aGlzJHByb3BzMi5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSxcbiAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wczIuaXRlbXMsXG4gICAgICAgIGluaXRpYWxGb2N1c2VkSXRlbUluZGV4ID0gX3RoaXMkcHJvcHMyLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4LFxuICAgICAgICBzaG93TmV4dFBhbmVsID0gX3RoaXMkcHJvcHMyLnNob3dOZXh0UGFuZWwsXG4gICAgICAgIHNob3dQcmV2aW91c1BhbmVsID0gX3RoaXMkcHJvcHMyLnNob3dQcmV2aW91c1BhbmVsLFxuICAgICAgICBzaXplID0gX3RoaXMkcHJvcHMyLnNpemUsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb250ZXh0TWVudVBhbmVsJywgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBzdHlsZXMgPSBzdHlsZXNNZW1vaXplcihldWlDb250ZXh0TWVudVBhbmVsU3R5bGVzKTtcbiAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUNvbnRleHRNZW51UGFuZWwsIHRyYW5zaXRpb25EaXJlY3Rpb24gJiYgdHJhbnNpdGlvblR5cGUgJiYgc3R5bGVzW3RyYW5zaXRpb25EaXJlY3Rpb25dW3RyYW5zaXRpb25UeXBlXV07XG4gICAgICB2YXIgcGFuZWxUaXRsZSA9IHRpdGxlICYmIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVJdGVtLCB7XG4gICAgICAgIGNzczogc3R5bGVzLmV1aUNvbnRleHRNZW51UGFuZWxfX3RpdGxlLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVQYW5lbF9fdGl0bGVcIixcbiAgICAgICAgb25DbGljazogb25DbG9zZSxcbiAgICAgICAgYnV0dG9uUmVmOiBmdW5jdGlvbiBidXR0b25SZWYobm9kZSkge1xuICAgICAgICAgIGlmIChvbkNsb3NlKSBfdGhpczMuYmFja0J1dHRvbiA9IG5vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogb25DbG9zZSA/ICdjb250ZXh0TWVudVBhbmVsVGl0bGVCdXR0b24nIDogJ2NvbnRleHRNZW51UGFuZWxUaXRsZScsXG4gICAgICAgIGljb246IG9uQ2xvc2UgJiYgJ2Fycm93TGVmdCdcbiAgICAgIH0sIHRpdGxlKTtcbiAgICAgIHZhciBjb250ZW50ID0gaXRlbXMgJiYgaXRlbXMubGVuZ3RoID8gaXRlbXMubWFwKGZ1bmN0aW9uIChNZW51SXRlbSkge1xuICAgICAgICB2YXIgY2xvbmVQcm9wcyA9IHt9O1xuICAgICAgICBpZiAoc2l6ZSkge1xuICAgICAgICAgIGNsb25lUHJvcHMuc2l6ZSA9IHNpemU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1lbnVJdGVtLnR5cGUgPT09IEV1aUNvbnRleHRNZW51SXRlbSA/IC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoTWVudUl0ZW0sIGNsb25lUHJvcHMpIDogTWVudUl0ZW07XG4gICAgICB9KSA6IGNoaWxkcmVuO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IHRoaXMucGFuZWxSZWYsXG4gICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5vbktleURvd24sXG4gICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgb25BbmltYXRpb25FbmQ6IHRoaXMub25UcmFuc2l0aW9uQ29tcGxldGVcbiAgICAgIH0sIHJlc3QpLCBwYW5lbFRpdGxlLCBfX19FbW90aW9uSlNYKEV1aVJlc2l6ZU9ic2VydmVyLCB7XG4gICAgICAgIG9uUmVzaXplOiBmdW5jdGlvbiBvblJlc2l6ZSgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMzLnVwZGF0ZUhlaWdodCgpO1xuICAgICAgICB9XG4gICAgICB9LCBmdW5jdGlvbiAocmVzaXplUmVmKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICByZWY6IHJlc2l6ZVJlZlxuICAgICAgICB9LCBjb250ZW50KTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YXIgbmVlZHNVcGRhdGUgPSBmYWxzZTtcbiAgICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcblxuICAgICAgLy8gQ2xlYXIgcmVmcyB0byBtZW51SXRlbXMgaWYgd2UncmUgZ2V0dGluZyBuZXcgb25lcy5cbiAgICAgIGlmIChuZXh0UHJvcHMuaXRlbXMgIT09IHByZXZTdGF0ZS5wcmV2UHJvcHMuaXRlbXMpIHtcbiAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlO1xuICAgICAgICBuZXh0U3RhdGUubWVudUl0ZW1zID0gW107XG4gICAgICAgIG5leHRTdGF0ZS5wcmV2UHJvcHMgPSB7XG4gICAgICAgICAgaXRlbXM6IG5leHRQcm9wcy5pdGVtc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRzVXBkYXRlKSB7XG4gICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlDb250ZXh0TWVudVBhbmVsQ2xhc3MsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgaXRlbXM6IFtdXG59KTtcbkV1aUNvbnRleHRNZW51UGFuZWxDbGFzcy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIERldGVybWluZXMgdGhlIGluaXRpYWxseSBmb2N1c2VkIG1lbnUgaXRlbSBmb3Iga2V5Ym9hcmQgYW5kIHNjcmVlbiByZWFkZXIgdXNlcnMuXG4gICAgICAgKlxuICAgICAgICogQ2FuIGJlIHNldCB0byBgLTFgIHRvIHByZXZlbnQgYXV0b2ZvY3VzIChhbiB1bmNvbW1vbiBjYXNlIHRoYXQgbXVzdCBoYXZlXG4gICAgICAgKiBrZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGFjY291bnRlZCBmb3IgbWFudWFsbHkgaWYgdXNlZClcbiAgICAgICAqL1xuICBpbml0aWFsRm9jdXNlZEl0ZW1JbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQpLFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25IZWlnaHRDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblRyYW5zaXRpb25Db21wbGV0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2hvd05leHRQYW5lbDogUHJvcFR5cGVzLmZ1bmMsXG4gIHNob3dQcmV2aW91c1BhbmVsOiBQcm9wVHlwZXMuZnVuYyxcbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICB0cmFuc2l0aW9uRGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wibmV4dFwiLCBcInByZXZpb3VzXCJdKSxcbiAgdHJhbnNpdGlvblR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJpblwiLCBcIm91dFwiXSksXG4gIC8qKlxuICAgICAgICogQWx0ZXJzIHRoZSBzaXplIG9mIHRoZSBpdGVtcyBhbmQgdGhlIHRpdGxlXG4gICAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueVxufTtcbmV4cG9ydCB2YXIgRXVpQ29udGV4dE1lbnVQYW5lbCA9IHdpdGhFdWlTdHlsZXNNZW1vaXplcihFdWlDb250ZXh0TWVudVBhbmVsQ2xhc3MpOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJoYXNQYW5lbFwiLCBcImljb25cIiwgXCJidXR0b25SZWZcIiwgXCJkaXNhYmxlZFwiLCBcImxheW91dEFsaWduXCIsIFwidG9vbFRpcENvbnRlbnRcIiwgXCJ0b29sVGlwUHJvcHNcIiwgXCJocmVmXCIsIFwidGFyZ2V0XCIsIFwicmVsXCIsIFwic2l6ZVwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMsIGdldFNlY3VyZVJlbEZvclRhcmdldCwgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgZXVpQ29udGV4dE1lbnVJdGVtU3R5bGVzIH0gZnJvbSAnLi9jb250ZXh0X21lbnVfaXRlbS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ3MnLCAnbSddO1xudmFyIGxheW91dEFsaWduVG9DbGFzc05hbWVzID0ge1xuICBjZW50ZXI6IG51bGwsXG4gIHRvcDogJ2V1aUNvbnRleHRNZW51X19pdGVtTGF5b3V0LS10b3AnLFxuICBib3R0b206ICdldWlDb250ZXh0TWVudV9faXRlbUxheW91dC0tYm90dG9tJ1xufTtcbmV4cG9ydCB2YXIgTEFZT1VUX0FMSUdOID0ga2V5c09mKGxheW91dEFsaWduVG9DbGFzc05hbWVzKTtcbmV4cG9ydCB2YXIgRXVpQ29udGV4dE1lbnVJdGVtID0gZnVuY3Rpb24gRXVpQ29udGV4dE1lbnVJdGVtKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBoYXNQYW5lbCA9IF9yZWYuaGFzUGFuZWwsXG4gICAgaWNvbiA9IF9yZWYuaWNvbixcbiAgICBidXR0b25SZWYgPSBfcmVmLmJ1dHRvblJlZixcbiAgICBfZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIF9yZWYkbGF5b3V0QWxpZ24gPSBfcmVmLmxheW91dEFsaWduLFxuICAgIGxheW91dEFsaWduID0gX3JlZiRsYXlvdXRBbGlnbiA9PT0gdm9pZCAwID8gJ2NlbnRlcicgOiBfcmVmJGxheW91dEFsaWduLFxuICAgIHRvb2xUaXBDb250ZW50ID0gX3JlZi50b29sVGlwQ29udGVudCxcbiAgICB0b29sVGlwUHJvcHMgPSBfcmVmLnRvb2xUaXBQcm9wcyxcbiAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIHJlbCA9IF9yZWYucmVsLFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29udGV4dE1lbnVJdGVtJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aUNvbnRleHRNZW51SXRlbVN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUNvbnRleHRNZW51SXRlbSwgc3R5bGVzLnNpemVzW3NpemVdLCBzdHlsZXMubGF5b3V0QWxpZ25bbGF5b3V0QWxpZ25dLCBkaXNhYmxlZCAmJiBzdHlsZXMuZGlzYWJsZWRdO1xuICB2YXIgaWNvbkluc3RhbmNlID0gaWNvbiAmJiAodHlwZW9mIGljb24gPT09ICdzdHJpbmcnID8gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogaWNvbixcbiAgICBzaXplOiBcIm1cIixcbiAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVfX2ljb25cIixcbiAgICBjc3M6IHN0eWxlcy5ldWlDb250ZXh0TWVudV9faWNvbixcbiAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuICB9KSA6XG4gIC8vIEFzc3VtZSBpdCdzIGFscmVhZHkgYW4gaW5zdGFuY2Ugb2YgYW4gaWNvbi5cbiAgY2xvbmVFbGVtZW50V2l0aENzcyhpY29uLCB7XG4gICAgY3NzOiBzdHlsZXMuZXVpQ29udGV4dE1lbnVfX2ljb25cbiAgfSkpO1xuICB2YXIgYXJyb3cgPSBoYXNQYW5lbCAmJiBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICB0eXBlOiBcImFycm93UmlnaHRcIixcbiAgICBzaXplOiBcIm1cIixcbiAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVfX2Fycm93XCIsXG4gICAgY3NzOiBzdHlsZXMuZXVpQ29udGV4dE1lbnVJdGVtX19hcnJvd1xuICB9KTtcbiAgdmFyIHRleHRTdHlsZXMgPSBbc3R5bGVzLnRleHQuZXVpQ29udGV4dE1lbnVJdGVtX190ZXh0LCBzaXplID09PSAncycgJiYgc3R5bGVzLnRleHQuc107XG4gIHZhciBidXR0b25Db250ZW50ID0gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgaWNvbkluc3RhbmNlLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51SXRlbV9fdGV4dFwiLFxuICAgIGNzczogdGV4dFN0eWxlc1xuICB9LCBjaGlsZHJlbiksIGFycm93KTtcbiAgdmFyIGJ1dHRvbjtcbiAgLy8gPGE+IGVsZW1lbnRzIGRvbid0IHJlc3BlY3QgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLiBTbyBpZiB3ZSdyZSBkaXNhYmxlZCwgd2UnbGwganVzdCBwcmV0ZW5kXG4gIC8vIHRoaXMgaXMgYSBidXR0b24gYW5kIHBpZ2d5YmFjayBvZmYgaXRzIGRpc2FibGVkIHN0eWxlcy5cbiAgaWYgKGhyZWYgJiYgIWRpc2FibGVkKSB7XG4gICAgdmFyIHNlY3VyZVJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiBzZWN1cmVSZWwsXG4gICAgICByZWY6IGJ1dHRvblJlZlxuICAgIH0sIHJlc3QpLCBidXR0b25Db250ZW50KTtcbiAgfSBlbHNlIGlmIChocmVmIHx8IHJlc3Qub25DbGljayB8fCB0b29sVGlwQ29udGVudCkge1xuICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgYnV0dG9uQ29udGVudCk7XG4gIH0gZWxzZSB7XG4gICAgYnV0dG9uID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIHJlZjogYnV0dG9uUmVmXG4gICAgfSwgcmVzdCksIGJ1dHRvbkNvbnRlbnQpO1xuICB9XG4gIGlmICh0b29sVGlwQ29udGVudCkge1xuICAgIHZhciBhbmNob3JDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpLWRpc3BsYXlCbG9jaycsIHRvb2xUaXBQcm9wcyA9PT0gbnVsbCB8fCB0b29sVGlwUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRvb2xUaXBQcm9wcy5hbmNob3JDbGFzc05hbWUpO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIF9leHRlbmRzKHtcbiAgICAgIHBvc2l0aW9uOiBcInJpZ2h0XCJcbiAgICB9LCB0b29sVGlwUHJvcHMsIHtcbiAgICAgIGFuY2hvckNsYXNzTmFtZTogYW5jaG9yQ2xhc3NlcyxcbiAgICAgIGNvbnRlbnQ6IHRvb2xUaXBDb250ZW50XG4gICAgfSksIGJ1dHRvbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJ1dHRvbjtcbiAgfVxufTtcbkV1aUNvbnRleHRNZW51SXRlbS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICBoYXNQYW5lbDogUHJvcFR5cGVzLmJvb2wsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogUmVxdWlyZWQgaWYgdXNpbmcgYSB0b29sdGlwLiBBZGQgYW4gb3B0aW9uYWwgdG9vbHRpcCBvbiBob3ZlclxuICAgICAqL1xuICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyBbRXVpVG9vbFRpcF0oLyMvZGlzcGxheS90b29sdGlwKS5cbiAgICAgKiBBY2NlcHRzIGFueSBwcm9wIHRoYXQgRXVpVG9vbFRpcCBkb2VzLCBleGNlcHQgZm9yIGBjb250ZW50YCBhbmQgYGNoaWxkcmVuYC5cbiAgICAgKi9cbiAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogSG93IHRvIGFsaWduIGljb24gd2l0aCBjb250ZW50IG9mIGJ1dHRvblxuICAgICAqL1xuICBsYXlvdXRBbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImNlbnRlclwiLCBcInRvcFwiLCBcImJvdHRvbVwiXSksXG4gIC8qKlxuICAgICAqIFJlZHVjZSB0aGUgc2l6ZSB0byBgc2Agd2hlbiBpbiBuZWVkIG9mIGEgbW9yZSBjb21wcmVzc2VkIG1lbnVcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbFRleHRBbGlnbkNTUywgZXVpRm9udFNpemUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI0YWs0czgtZXVpQ29udGV4dE1lbnVJdGVtX19hcnJvd1wiLFxuICBzdHlsZXM6IFwiYWxpZ24tc2VsZjpmbGV4LWVuZDtsYWJlbDpldWlDb250ZXh0TWVudUl0ZW1fX2Fycm93O1wiXG59IDoge1xuICBuYW1lOiBcIjRhazRzOC1ldWlDb250ZXh0TWVudUl0ZW1fX2Fycm93XCIsXG4gIHN0eWxlczogXCJhbGlnbi1zZWxmOmZsZXgtZW5kO2xhYmVsOmV1aUNvbnRleHRNZW51SXRlbV9fYXJyb3c7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJvMWdnMjItZXVpQ29udGV4dE1lbnVJdGVtX190ZXh0XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47bGFiZWw6ZXVpQ29udGV4dE1lbnVJdGVtX190ZXh0O1wiXG59IDoge1xuICBuYW1lOiBcIm8xZ2cyMi1ldWlDb250ZXh0TWVudUl0ZW1fX3RleHRcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjtsYWJlbDpldWlDb250ZXh0TWVudUl0ZW1fX3RleHQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxbHpvaGNzLWV1aUNvbnRleHRNZW51X19pY29uXCIsXG4gIHN0eWxlczogXCJmbGV4LXNocmluazowO2xhYmVsOmV1aUNvbnRleHRNZW51X19pY29uO1wiXG59IDoge1xuICBuYW1lOiBcIjFsem9oY3MtZXVpQ29udGV4dE1lbnVfX2ljb25cIixcbiAgc3R5bGVzOiBcImZsZXgtc2hyaW5rOjA7bGFiZWw6ZXVpQ29udGV4dE1lbnVfX2ljb247XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxbXNhZXQyLWJvdHRvbVwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6ZmxleC1lbmQ7bGFiZWw6Ym90dG9tO1wiXG59IDoge1xuICBuYW1lOiBcIjFtc2FldDItYm90dG9tXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpmbGV4LWVuZDtsYWJlbDpib3R0b207XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxZ253YnZkLXRvcFwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6ZmxleC1zdGFydDtsYWJlbDp0b3A7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWdud2J2ZC10b3BcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bGFiZWw6dG9wO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiODM5MWRiLWNlbnRlclwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6Y2VudGVyO2xhYmVsOmNlbnRlcjtcIlxufSA6IHtcbiAgbmFtZTogXCI4MzkxZGItY2VudGVyXCIsXG4gIHN0eWxlczogXCJhbGlnbi1pdGVtczpjZW50ZXI7bGFiZWw6Y2VudGVyO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aUNvbnRleHRNZW51SXRlbVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUNvbnRleHRNZW51SXRlbVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUNvbnRleHRNZW51SXRlbTogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6ZmxleDtnYXA6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCIgY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjtvdXRsaW5lLW9mZnNldDotXCIsIGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIjsmOndoZXJlKGEsIGJ1dHRvbik6bm90KDpkaXNhYmxlZCl7Jjpob3ZlciwmOmZvY3Vze3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fSY6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVGhlbWUuZm9jdXMuYmFja2dyb3VuZENvbG9yLCBcIjt9fTtsYWJlbDpldWlDb250ZXh0TWVudUl0ZW07XCIpLFxuICAgIGRpc2FibGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZFRleHQsIFwiO2N1cnNvcjpkZWZhdWx0OztsYWJlbDpkaXNhYmxlZDtcIiksXG4gICAgbGF5b3V0QWxpZ246IHtcbiAgICAgIGNlbnRlcjogX3JlZjYsXG4gICAgICB0b3A6IF9yZWY1LFxuICAgICAgYm90dG9tOiBfcmVmNFxuICAgIH0sXG4gICAgc2l6ZXM6IHtcbiAgICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJwYWRkaW5nOlwiLCBldWlUaGVtZS5zaXplLm0sIFwiOztsYWJlbDptO1wiKSxcbiAgICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJwYWRkaW5nOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKVxuICAgIH0sXG4gICAgLy8gQ2hpbGRyZW5cbiAgICBldWlDb250ZXh0TWVudV9faWNvbjogX3JlZjMsXG4gICAgdGV4dDoge1xuICAgICAgZXVpQ29udGV4dE1lbnVJdGVtX190ZXh0OiBfcmVmMixcbiAgICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIjs7bGFiZWw6cztcIilcbiAgICB9LFxuICAgIGV1aUNvbnRleHRNZW51SXRlbV9fYXJyb3c6IF9yZWZcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIG1hdGhXaXRoVW5pdHMsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUNvbnRleHRNZW51VmFyaWFibGVzID0gZnVuY3Rpb24gZXVpQ29udGV4dE1lbnVWYXJpYWJsZXMoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIHBhbmVsV2lkdGg6IG1hdGhXaXRoVW5pdHMoZXVpVGhlbWUuc2l6ZS5iYXNlLCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggKiAxNjtcbiAgICB9KVxuICB9O1xufTtcbmV4cG9ydCB2YXIgZXVpQ29udGV4dE1lbnVTdHlsZXMgPSBmdW5jdGlvbiBldWlDb250ZXh0TWVudVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgX2V1aUNvbnRleHRNZW51VmFyaWFiID0gZXVpQ29udGV4dE1lbnVWYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBwYW5lbFdpZHRoID0gX2V1aUNvbnRleHRNZW51VmFyaWFiLnBhbmVsV2lkdGg7XG4gIHJldHVybiB7XG4gICAgZXVpQ29udGV4dE1lbnU6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCBwYW5lbFdpZHRoKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiIHBvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSwgXCI7XCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246aGVpZ2h0IFwiLCBldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIjt9O2xhYmVsOmV1aUNvbnRleHRNZW51O1wiKVxuICB9O1xufTsiLCAidmFyIF90ZW1wbGF0ZU9iamVjdCwgX3RlbXBsYXRlT2JqZWN0MiwgX3RlbXBsYXRlT2JqZWN0MywgX3RlbXBsYXRlT2JqZWN0NDtcbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoZSwgdCkgeyByZXR1cm4gdCB8fCAodCA9IGUuc2xpY2UoMCkpLCBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHQpIH0gfSkpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGV1aUNhbnRBbmltYXRlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZS90aXRsZS5zdHlsZXMnO1xuaW1wb3J0IHsgZXVpQ29udGV4dE1lbnVWYXJpYWJsZXMgfSBmcm9tICcuL2NvbnRleHRfbWVudS5zdHlsZXMnO1xuZXhwb3J0IHZhciBldWlDb250ZXh0TWVudVBhbmVsU3R5bGVzID0gZnVuY3Rpb24gZXVpQ29udGV4dE1lbnVQYW5lbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgX2V1aUNvbnRleHRNZW51VmFyaWFiID0gZXVpQ29udGV4dE1lbnVWYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBwYW5lbFdpZHRoID0gX2V1aUNvbnRleHRNZW51VmFyaWFiLnBhbmVsV2lkdGg7XG4gIHZhciBhbmltYXRpb25zID0ge1xuICAgIHRyYW5zaXRpb25pbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJwb2ludGVyLWV2ZW50czpub25lO2FuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHM7YW5pbWF0aW9uLWR1cmF0aW9uOlwiLCBldWlUaGVtZS5hbmltYXRpb24ubm9ybWFsLCBcIjthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOlwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCI7XCIsIGV1aUNhbnRBbmltYXRlLCBcInthbmltYXRpb24tZHVyYXRpb246MHM7fTtsYWJlbDp0cmFuc2l0aW9uaW5nO1wiKSxcbiAgICBpbkxlZnQ6IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgICAgMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoXCIsIFwiKTsgfVxcbiAgICAgIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH1cXG4gICAgXCJdKSksIHBhbmVsV2lkdGgpLFxuICAgIG91dExlZnQ6IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QyIHx8IChfdGVtcGxhdGVPYmplY3QyID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgICAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsgfVxcbiAgICAgIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLVwiLCBcIik7IH1cXG4gICAgXCJdKSksIHBhbmVsV2lkdGgpLFxuICAgIGluUmlnaHQ6IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QzIHx8IChfdGVtcGxhdGVPYmplY3QzID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgICAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtXCIsIFwiKTsgfVxcbiAgICAgIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH1cXG4gICAgXCJdKSksIHBhbmVsV2lkdGgpLFxuICAgIG91dFJpZ2h0OiBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0NCB8fCAoX3RlbXBsYXRlT2JqZWN0NCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgICAgMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH1cXG4gICAgICAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKFwiLCBcIik7IH1cXG4gICAgXCJdKSksIHBhbmVsV2lkdGgpXG4gIH07XG4gIHJldHVybiB7XG4gICAgZXVpQ29udGV4dE1lbnVQYW5lbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIHZpc2liaWxpdHk6dmlzaWJsZTtvdXRsaW5lLW9mZnNldDotXCIsIGV1aVRoZW1lLmZvY3VzLndpZHRoLCBcIjsmOmZvY3Vze291dGxpbmU6bm9uZTt9O2xhYmVsOmV1aUNvbnRleHRNZW51UGFuZWw7XCIpLFxuICAgIC8vIFBhbmVsIGFuaW1hdGlvbnNcbiAgICBuZXh0OiB7XG4gICAgICBpbjogLyojX19QVVJFX18qL2NzcyhhbmltYXRpb25zLnRyYW5zaXRpb25pbmcsIFwiIGFuaW1hdGlvbi1uYW1lOlwiLCBhbmltYXRpb25zLmluTGVmdCwgXCI7O2xhYmVsOmluO1wiKSxcbiAgICAgIG91dDogLyojX19QVVJFX18qL2NzcyhhbmltYXRpb25zLnRyYW5zaXRpb25pbmcsIFwiIGFuaW1hdGlvbi1uYW1lOlwiLCBhbmltYXRpb25zLm91dExlZnQsIFwiOztsYWJlbDpvdXQ7XCIpXG4gICAgfSxcbiAgICBwcmV2aW91czoge1xuICAgICAgaW46IC8qI19fUFVSRV9fKi9jc3MoYW5pbWF0aW9ucy50cmFuc2l0aW9uaW5nLCBcIiBhbmltYXRpb24tbmFtZTpcIiwgYW5pbWF0aW9ucy5pblJpZ2h0LCBcIjs7bGFiZWw6aW47XCIpLFxuICAgICAgb3V0OiAvKiNfX1BVUkVfXyovY3NzKGFuaW1hdGlvbnMudHJhbnNpdGlvbmluZywgXCIgYW5pbWF0aW9uLW5hbWU6XCIsIGFuaW1hdGlvbnMub3V0UmlnaHQsIFwiOztsYWJlbDpvdXQ7XCIpXG4gICAgfSxcbiAgICAvLyBDaGlsZHJlblxuICAgIGV1aUNvbnRleHRNZW51UGFuZWxfX3RpdGxlOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4cycpLCBcIiBcIiwgbG9naWNhbENTUygnYm9yZGVyLWJvdHRvbScsIGV1aVRoZW1lLmJvcmRlci50aGluKSwgXCIgJjplbmFibGVkOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dW5zZXQ7fTtsYWJlbDpldWlDb250ZXh0TWVudVBhbmVsX190aXRsZTtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJsYWJlbFwiLCBcImlkXCIsIFwiY2hlY2tlZFwiLCBcImRpc2FibGVkXCIsIFwiY29tcHJlc3NlZFwiLCBcIm1pbmlcIiwgXCJvbkNoYW5nZVwiLCBcImNsYXNzTmFtZVwiLCBcInNob3dMYWJlbFwiLCBcInR5cGVcIiwgXCJsYWJlbFByb3BzXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VHZW5lcmF0ZWRIdG1sSWQsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgZXVpU3dpdGNoU3R5bGVzIH0gZnJvbSAnLi9zd2l0Y2guc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVN3aXRjaCA9IGZ1bmN0aW9uIEV1aVN3aXRjaChfcmVmKSB7XG4gIHZhciBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgaWQgPSBfcmVmLmlkLFxuICAgIGNoZWNrZWQgPSBfcmVmLmNoZWNrZWQsXG4gICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIGNvbXByZXNzZWQgPSBfcmVmLmNvbXByZXNzZWQsXG4gICAgbWluaSA9IF9yZWYubWluaSxcbiAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRzaG93TGFiZWwgPSBfcmVmLnNob3dMYWJlbCxcbiAgICBzaG93TGFiZWwgPSBfcmVmJHNob3dMYWJlbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkc2hvd0xhYmVsLFxuICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYkdHlwZSxcbiAgICBsYWJlbFByb3BzID0gX3JlZi5sYWJlbFByb3BzLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHN3aXRjaElkID0gdXNlR2VuZXJhdGVkSHRtbElkKHtcbiAgICBjb25kaXRpb25hbElkOiBpZFxuICB9KTtcbiAgdmFyIGxhYmVsSWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoe1xuICAgIGNvbmRpdGlvbmFsSWQ6IGxhYmVsUHJvcHMgPT09IG51bGwgfHwgbGFiZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFiZWxQcm9wcy5pZFxuICB9KTtcbiAgdmFyIG9uQ2xpY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZSkge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXZlbnQgPSBlO1xuICAgIGV2ZW50LnRhcmdldC5jaGVja2VkID0gIWNoZWNrZWQ7XG4gICAgb25DaGFuZ2UoZXZlbnQpO1xuICB9LCBbY2hlY2tlZCwgZGlzYWJsZWQsIG9uQ2hhbmdlXSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU3dpdGNoJywgY2xhc3NOYW1lKTtcbiAgdmFyIGxhYmVsQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVN3aXRjaF9fbGFiZWwnLCBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuY2xhc3NOYW1lKTtcbiAgaWYgKHNob3dMYWJlbCA9PT0gZmFsc2UgJiYgdHlwZW9mIGxhYmVsICE9PSAnc3RyaW5nJykge1xuICAgIGNvbnNvbGUud2FybignRXVpU3dpdGNoIGBsYWJlbGAgbXVzdCBiZSBhIHN0cmluZyB3aGVuIGBzaG93TGFiZWxgIGlzIGZhbHNlLicpO1xuICB9XG4gIHZhciBzaXplID0gbWluaSA/ICdtaW5pJyA6IGNvbXByZXNzZWQgPyAnY29tcHJlc3NlZCcgOiAndW5jb21wcmVzc2VkJztcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVN3aXRjaFN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVN3aXRjaCwgZGlzYWJsZWQgPyBzdHlsZXMuZGlzYWJsZWQgOiBzdHlsZXMuZW5hYmxlZF07XG4gIHZhciBidXR0b25TdHlsZXMgPSBbc3R5bGVzLmJ1dHRvbi5ldWlTd2l0Y2hfX2J1dHRvbiwgc3R5bGVzLmJ1dHRvbltzaXplXV07XG4gIHZhciBib2R5U3R5bGVzID0gW3N0eWxlcy5ib2R5LmV1aVN3aXRjaF9fYm9keSwgZGlzYWJsZWQgPyBzdHlsZXMuYm9keS5kaXNhYmxlZFtzaXplXSA6IGNoZWNrZWQgPyBzdHlsZXMuYm9keS5vbiA6IHN0eWxlcy5ib2R5Lm9mZl07XG4gIHZhciBpY29uc1N0eWxlcyA9IFtzdHlsZXMuaWNvbnMuZXVpU3dpdGNoX19pY29ucywgY2hlY2tlZCA/IHN0eWxlcy5pY29ucy5vbiA6IHN0eWxlcy5pY29ucy5vZmYsIGRpc2FibGVkID8gc3R5bGVzLmljb25zLmRpc2FibGVkIDogc3R5bGVzLmljb25zLmVuYWJsZWRdO1xuICB2YXIgdGh1bWJTdHlsZXMgPSBbc3R5bGVzLnRodW1iLmV1aVN3aXRjaF9fdGh1bWIsIGNoZWNrZWQgPyBzdHlsZXMudGh1bWIub25bc2l6ZV0gOiBzdHlsZXMudGh1bWIub2ZmXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGRpc2FibGVkID8gW3N0eWxlcy50aHVtYi5kaXNhYmxlZC5kaXNhYmxlZCwgc3R5bGVzLnRodW1iLmRpc2FibGVkW3NpemVdXSA6IFtzdHlsZXMudGh1bWIuZW5hYmxlZC5lbmFibGVkLCBzdHlsZXMudGh1bWIuZW5hYmxlZFtzaXplXV0pKTtcbiAgdmFyIGxhYmVsU3R5bGVzID0gW3N0eWxlcy5sYWJlbC5ldWlTd2l0Y2hfX2xhYmVsLCBzdHlsZXMubGFiZWxbc2l6ZV0sIGRpc2FibGVkICYmIHN0eWxlcy5sYWJlbC5kaXNhYmxlZCwgbGFiZWxQcm9wcyA9PT0gbnVsbCB8fCBsYWJlbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYWJlbFByb3BzLmNzc107XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgaWQ6IHN3aXRjaElkLFxuICAgIFwiYXJpYS1jaGVja2VkXCI6IGNoZWNrZWQgfHwgZmFsc2UsXG4gICAgY3NzOiBidXR0b25TdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBcImV1aVN3aXRjaF9fYnV0dG9uXCIsXG4gICAgcm9sZTogXCJzd2l0Y2hcIixcbiAgICB0eXBlOiB0eXBlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBzaG93TGFiZWwgPyB1bmRlZmluZWQgOiBsYWJlbCxcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBzaG93TGFiZWwgPyBsYWJlbElkIDogdW5kZWZpbmVkXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY3NzOiBib2R5U3R5bGVzLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2JvZHlcIlxuICB9LCAhKGNvbXByZXNzZWQgfHwgbWluaSkgJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNzczogaWNvbnNTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBcImV1aVN3aXRjaF9faWNvbnNcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICB0eXBlOiBcImNoZWNrXCIsXG4gICAgc2l6ZTogXCJtXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiY3Jvc3NcIixcbiAgICBzaXplOiBcIm1cIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY3NzOiB0aHVtYlN0eWxlcyxcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dpdGNoX190aHVtYlwiXG4gIH0pKSwgc2hvd0xhYmVsICYmXG4gIC8vIDxidXR0b24+ICsgPGxhYmVsPiBoYXMgcG9vciBzY3JlZW4gcmVhZGVyIHN1cHBvcnQuXG4gIC8vIENsaWNrIGhhbmRsZXIgYWRkZWQgdG8gc2ltdWxhdGUgbmF0dXJhbCwgc2Vjb25kYXJ5IDxsYWJlbD4gaW50ZXJhY3Rpdml0eS5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLWVsZW1lbnQtaW50ZXJhY3Rpb25zXG4gIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHt9LCBsYWJlbFByb3BzLCB7XG4gICAgY3NzOiBsYWJlbFN0eWxlcyxcbiAgICBjbGFzc05hbWU6IGxhYmVsQ2xhc3NlcyxcbiAgICBpZDogbGFiZWxJZCxcbiAgICBvbkNsaWNrOiBvbkNsaWNrXG4gIH0pLCBsYWJlbCkpO1xufTtcbkV1aVN3aXRjaC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSB0ZXh0IGxhYmVsXG4gICAgICAgKi9cbiAgc2hvd0xhYmVsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBNdXN0IGJlIGEgc3RyaW5nIGlmIGBzaG93TGFiZWxgIHByb3AgaXMgZmFsc2VcbiAgICAgICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBDb21wcmVzc2VkIHN3aXRjaGVzIGFyZSBzbWFsbGVyIGFuZCBjb250YWluIG5vIGljb24gc2lnbmlmaWVyc1xuICAgICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGxhYmVsJ3MgYDxzcGFuIC8+YFxuICAgICAgICovXG4gIGxhYmVsUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIC8qKlxuICAgICAgICogTWluaSBzdHlsaW5nIGlzIHNpbWlsYXIgdG8gY29tcHJlc3NlZCwgYnV0IGV2ZW4gc21hbGxlci5cbiAgICAgICAqIEl0J3MgdW5kb2N1bWVudGVkIGJlY2F1c2UgaXQgaGFzIHZlcnkgc3BlY2lmaWMgdXNlcy5cbiAgICAgICAqL1xuICBtaW5pOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdGludCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUNhbkFuaW1hdGUsIGV1aUZvY3VzUmluZywgZXVpRm9udFNpemUsIGxvZ2ljYWxDU1MsIGxvZ2ljYWxTaXplQ1NTLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpRm9ybUN1c3RvbUNvbnRyb2xWYXJpYWJsZXMgfSBmcm9tICcuLi9mb3JtLnN0eWxlcyc7XG52YXIgZXVpU3dpdGNoVmFycyA9IGZ1bmN0aW9uIGV1aVN3aXRjaFZhcnMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIGZvcm1WYXJzID0gZXVpRm9ybUN1c3RvbUNvbnRyb2xWYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIGNvbG9ycyA9IHtcbiAgICBvbjogZm9ybVZhcnMuY29sb3JzLnNlbGVjdGVkLFxuICAgIG9mZjogZm9ybVZhcnMuY29sb3JzLnVuc2VsZWN0ZWRCb3JkZXIsXG4gICAgZGlzYWJsZWQ6IGZvcm1WYXJzLmNvbG9ycy5kaXNhYmxlZCxcbiAgICB0aHVtYjogZm9ybVZhcnMuY29sb3JzLnNlbGVjdGVkSWNvbixcbiAgICB0aHVtYkJvcmRlcjogZm9ybVZhcnMuY29sb3JzLnVuc2VsZWN0ZWRCb3JkZXIsXG4gICAgdGh1bWJCb3JkZXJEaXNhYmxlZDogZm9ybVZhcnMuY29sb3JzLnVuc2VsZWN0ZWRCb3JkZXJcbiAgfTtcbiAgdmFyIHNpemVzID0ge1xuICAgIHVuY29tcHJlc3NlZDoge1xuICAgICAgaGVpZ2h0OiBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUuYmFzZSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggKiAxLjI1O1xuICAgICAgfSksXG4gICAgICB3aWR0aDogbWF0aFdpdGhVbml0cyhbZXVpVGhlbWUuc2l6ZS54eGwsIGV1aVRoZW1lLnNpemUueHNdLCBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICByZXR1cm4geCArIHk7XG4gICAgICB9KSxcbiAgICAgIHRodW1iU2NhbGVzOiB7XG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICAgIGhvdmVyOiAxLjA1LFxuICAgICAgICBhY3RpdmU6IDAuOVxuICAgICAgfVxuICAgIH0sXG4gICAgY29tcHJlc3NlZDoge1xuICAgICAgaGVpZ2h0OiBldWlUaGVtZS5zaXplLmJhc2UsXG4gICAgICB3aWR0aDogbWF0aFdpdGhVbml0cyhldWlUaGVtZS5zaXplLmJhc2UsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICogMS43NTtcbiAgICAgIH0pLFxuICAgICAgdGh1bWJTY2FsZXM6IHtcbiAgICAgICAgZGVmYXVsdDogMC45LFxuICAgICAgICBob3ZlcjogMC45NSxcbiAgICAgICAgYWN0aXZlOiAwLjhcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldCBtaW5pKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiBtYXRoV2l0aFVuaXRzKHRoaXMudW5jb21wcmVzc2VkLmhlaWdodCwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4geCAvIDI7XG4gICAgICAgIH0pLFxuICAgICAgICB3aWR0aDogbWF0aFdpdGhVbml0cyh0aGlzLnVuY29tcHJlc3NlZC53aWR0aCwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4geCAvIDI7XG4gICAgICAgIH0pLFxuICAgICAgICB0aHVtYlNjYWxlczoge1xuICAgICAgICAgIGRlZmF1bHQ6IDAuOCxcbiAgICAgICAgICBob3ZlcjogdW5kZWZpbmVkLFxuICAgICAgICAgIGFjdGl2ZTogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xuICB2YXIgYW5pbWF0aW9uID0ge1xuICAgIHNwZWVkOiBldWlUaGVtZS5hbmltYXRpb24ubm9ybWFsLFxuICAgIGVhc2luZzogZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZVxuICB9O1xuICB2YXIgbGFiZWwgPSB7XG4gICAgZGlzYWJsZWQ6IGZvcm1WYXJzLmNvbG9ycy5kaXNhYmxlZExhYmVsLFxuICAgIGdhcDogZm9ybVZhcnMuc2l6ZXMubGFiZWxHYXBcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBzaXplczogc2l6ZXMsXG4gICAgY29sb3JzOiBjb2xvcnMsXG4gICAgYW5pbWF0aW9uOiBhbmltYXRpb24sXG4gICAgbGFiZWw6IGxhYmVsXG4gIH07XG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImI4NnBudy1kaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiY3Vyc29yOm5vdC1hbGxvd2VkO2xhYmVsOmRpc2FibGVkO1wiXG59IDoge1xuICBuYW1lOiBcImI4NnBudy1kaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiY3Vyc29yOm5vdC1hbGxvd2VkO2xhYmVsOmRpc2FibGVkO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiZWc2OHBwLWV1aVN3aXRjaFwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0Oy8qIFJlcXVpcmVkIGZvciBpbmxpbmUtZmxleCBDU1MgdG8gbm90IHJlbmRlciBhbiBleHRyYSAyLTNweCBvZiBzdHJ1dCBoZWlnaHRcXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNzUzNjQ2MS80Mjk0NDYyICovdmVydGljYWwtYWxpZ246bWlkZGxlO2xhYmVsOmV1aVN3aXRjaDtcIlxufSA6IHtcbiAgbmFtZTogXCJlZzY4cHAtZXVpU3dpdGNoXCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7LyogUmVxdWlyZWQgZm9yIGlubGluZS1mbGV4IENTUyB0byBub3QgcmVuZGVyIGFuIGV4dHJhIDItM3B4IG9mIHN0cnV0IGhlaWdodFxcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI3NTM2NDYxLzQyOTQ0NjIgKi92ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGFiZWw6ZXVpU3dpdGNoO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVN3aXRjaFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVN3aXRjaFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIHN3aXRjaFZhcnMgPSBldWlTd2l0Y2hWYXJzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHJldHVybiB7XG4gICAgZXVpU3dpdGNoOiBfcmVmMyxcbiAgICAvLyBTa2lwIGNzc2BgIHRvIGF2b2lkIGdlbmVyYXRpbmcgYW4gZXh0cmEgRW1vdGlvbiBjbGFzc05hbWVcbiAgICBlbmFibGVkOiBcIlxcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgXCIsXG4gICAgZGlzYWJsZWQ6IF9yZWYyLFxuICAgIGJ1dHRvbjogYnV0dG9uU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwgc3dpdGNoVmFycyksXG4gICAgLy8gVGhlIHRyYWNrIGJvZHkgbXVzdCBiZSBzZXBhcmF0ZSBmcm9tIHRoZSBidXR0b24gd3JhcHBlciwgYmVjYXVzZSB0aGVcbiAgICAvLyBpY29ucyBoYXZlIHRoZWlyIG92ZXJmbG93IGhpZGRlbiBvdXRzaWRlIHRoZSBidXR0b24sIGJ1dCB0aGUgdGh1bWIgZG9lc24ndFxuICAgIGJvZHk6IGJvZHlTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCBzd2l0Y2hWYXJzKSxcbiAgICBpY29uczogaWNvblN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHN3aXRjaFZhcnMpLFxuICAgIHRodW1iOiB0aHVtYlN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHN3aXRjaFZhcnMpLFxuICAgIGxhYmVsOiBsYWJlbFN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHN3aXRjaFZhcnMpXG4gIH07XG59O1xudmFyIGJ1dHRvblN0eWxlcyA9IGZ1bmN0aW9uIGJ1dHRvblN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHN3aXRjaFZhcnMpIHtcbiAgdmFyIF9zd2l0Y2hWYXJzJHNpemVzID0gc3dpdGNoVmFycy5zaXplcyxcbiAgICB1bmNvbXByZXNzZWQgPSBfc3dpdGNoVmFycyRzaXplcy51bmNvbXByZXNzZWQsXG4gICAgY29tcHJlc3NlZCA9IF9zd2l0Y2hWYXJzJHNpemVzLmNvbXByZXNzZWQsXG4gICAgbWluaSA9IF9zd2l0Y2hWYXJzJHNpemVzLm1pbmk7XG4gIHJldHVybiB7XG4gICAgZXVpU3dpdGNoX19idXR0b246IC8qI19fUFVSRV9fKi9jc3MoXCJmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOmluaGVyaXQ7XCIsIGV1aUZvY3VzUmluZyhldWlUaGVtZUNvbnRleHQsICdvdXRzZXQnKSwgXCI7O2xhYmVsOmV1aVN3aXRjaF9fYnV0dG9uO1wiKSxcbiAgICAvLyBTa2lwIGNzc2BgIHRvIGF2b2lkIGdlbmVyYXRpbmcgYW4gRW1vdGlvbiBjbGFzc05hbWVcbiAgICB1bmNvbXByZXNzZWQ6IFwiXFxuICAgICAgXCIuY29uY2F0KGxvZ2ljYWxTaXplQ1NTKHVuY29tcHJlc3NlZC53aWR0aCwgdW5jb21wcmVzc2VkLmhlaWdodCksIFwiXFxuICAgICAgYm9yZGVyLXJhZGl1czogXCIpLmNvbmNhdCh1bmNvbXByZXNzZWQuaGVpZ2h0LCBcIjtcXG4gICAgXCIpLFxuICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MoY29tcHJlc3NlZC53aWR0aCwgY29tcHJlc3NlZC5oZWlnaHQpLCBcIiBib3JkZXItcmFkaXVzOlwiLCBjb21wcmVzc2VkLmhlaWdodCwgXCI7O2xhYmVsOmNvbXByZXNzZWQ7XCIpLFxuICAgIG1pbmk6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFNpemVDU1MobWluaS53aWR0aCwgbWluaS5oZWlnaHQpLCBcIiBib3JkZXItcmFkaXVzOlwiLCBtaW5pLmhlaWdodCwgXCI7O2xhYmVsOm1pbmk7XCIpXG4gIH07XG59O1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTljd3U2di1ldWlTd2l0Y2hfX2JvZHlcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO2xhYmVsOmV1aVN3aXRjaF9fYm9keTtcIlxufSA6IHtcbiAgbmFtZTogXCIxOWN3dTZ2LWV1aVN3aXRjaF9fYm9keVwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7bGFiZWw6ZXVpU3dpdGNoX19ib2R5O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgYm9keVN0eWxlcyA9IGZ1bmN0aW9uIGJvZHlTdHlsZXMoX3JlZjQsIF9yZWY1KSB7XG4gIHZhciBjb2xvck1vZGUgPSBfcmVmNC5jb2xvck1vZGU7XG4gIHZhciBjb2xvcnMgPSBfcmVmNS5jb2xvcnM7XG4gIC8vIFRoaXMgaXMgcHJvYmFibHkgdmVyeSBleHRyYSwgYnV0IHRoZSB2aXN1YWwgd2VpZ2h0IG9mIHRoZSBkZWZhdWx0XG4gIC8vIGRpc2FibGVkIGN1c3RvbSBjb250cm9sIGZlZWxzIGRpZmZlcmVudCBpbiBsaWdodCBtb2RlIGRlcGVuZGluZ1xuICAvLyBvbiB0aGUgc2l6ZSBvZiB0aGUgc3dpdGNoLCBzbyBJJ20gdGludGluZyBpdCBiYXNlZCBvbiB0aGF0LlxuICAvLyBHb3R0YSBqdXN0aWZ5IG15IHN0dXBpZGx5IGV4cGVuc2l2ZSBhcnQgZGVncmVlIVxuICB2YXIgX2NhbGN1bGF0ZURpc2FibGVkQ29sb3IgPSBmdW5jdGlvbiBfY2FsY3VsYXRlRGlzYWJsZWRDb2xvcih0aW50QW1vdW50KSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jc3MoXCJsYWJlbDpkaXNhYmxlZDtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBjb2xvck1vZGUgPT09ICdEQVJLJyA/IGNvbG9ycy5kaXNhYmxlZCA6IHRpbnQoY29sb3JzLmRpc2FibGVkLCB0aW50QW1vdW50KSwgXCI7XCIpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGV1aVN3aXRjaF9fYm9keTogX3JlZixcbiAgICBvbjogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIGNvbG9ycy5vbiwgXCI7O2xhYmVsOm9uO1wiKSxcbiAgICBvZmY6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCBjb2xvcnMub2ZmLCBcIjs7bGFiZWw6b2ZmO1wiKSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdW5jb21wcmVzc2VkOiBfY2FsY3VsYXRlRGlzYWJsZWRDb2xvcigwLjUpLFxuICAgICAgY29tcHJlc3NlZDogX2NhbGN1bGF0ZURpc2FibGVkQ29sb3IoMC4yNSksXG4gICAgICBtaW5pOiBfY2FsY3VsYXRlRGlzYWJsZWRDb2xvcigwKVxuICAgIH1cbiAgfTtcbn07XG52YXIgaWNvblN0eWxlcyA9IGZ1bmN0aW9uIGljb25TdHlsZXMoX3JlZjYsIF9yZWY3KSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY2LmV1aVRoZW1lO1xuICB2YXIgY29sb3JzID0gX3JlZjcuY29sb3JzLFxuICAgIGFuaW1hdGlvbiA9IF9yZWY3LmFuaW1hdGlvbjtcbiAgcmV0dXJuIHtcbiAgICBldWlTd2l0Y2hfX2ljb25zOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxDU1MoJ3ZlcnRpY2FsJywgMCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdsZWZ0JywgJy01MCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzIwMCUnKSwgXCIgZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7YWxpZ24taXRlbXM6Y2VudGVyO1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgXCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb24tcHJvcGVydHk6aW5zZXQtaW5saW5lLXN0YXJ0O3RyYW5zaXRpb24tZHVyYXRpb246XCIsIGFuaW1hdGlvbi5zcGVlZCwgXCI7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246XCIsIGFuaW1hdGlvbi5lYXNpbmcsIFwiO307bGFiZWw6ZXVpU3dpdGNoX19pY29ucztcIiksXG4gICAgb246IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbGVmdCcsICctMjUlJyksIFwiOztsYWJlbDpvbjtcIiksXG4gICAgb2ZmOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2xlZnQnLCAnLTc1JScpLCBcIjs7bGFiZWw6b2ZmO1wiKSxcbiAgICBlbmFibGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGNvbG9ycy50aHVtYiwgXCI7O2xhYmVsOmVuYWJsZWQ7XCIpLFxuICAgIGRpc2FibGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGNvbG9ycy50aHVtYkJvcmRlckRpc2FibGVkLCBcIjs7bGFiZWw6ZGlzYWJsZWQ7XCIpXG4gIH07XG59O1xudmFyIHRodW1iU3R5bGVzID0gZnVuY3Rpb24gdGh1bWJTdHlsZXMoX3JlZjgsIHN3aXRjaFZhcnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjguZXVpVGhlbWU7XG4gIHZhciBzaXplcyA9IHN3aXRjaFZhcnMuc2l6ZXMsXG4gICAgY29sb3JzID0gc3dpdGNoVmFycy5jb2xvcnMsXG4gICAgYW5pbWF0aW9uID0gc3dpdGNoVmFycy5hbmltYXRpb247XG4gIHZhciB1bmNvbXByZXNzZWQgPSBzaXplcy51bmNvbXByZXNzZWQsXG4gICAgY29tcHJlc3NlZCA9IHNpemVzLmNvbXByZXNzZWQsXG4gICAgbWluaSA9IHNpemVzLm1pbmk7XG4gIHZhciBfY2FsY3VsYXRlU2NhbGUgPSBmdW5jdGlvbiBfY2FsY3VsYXRlU2NhbGUoc2l6ZSwgaG92ZXJBY3RpdmVTdGF0ZXMpIHtcbiAgICB2YXIgYmFzZVNjYWxlID0gXCJ0cmFuc2Zvcm06IHNjYWxlKFwiLmNvbmNhdChzaXplc1tzaXplXS50aHVtYlNjYWxlcy5kZWZhdWx0LCBcIik7XCIpO1xuICAgIHZhciBzdGF0ZXMgPSBob3ZlckFjdGl2ZVN0YXRlcyA/IFwiXFxuICAgICAgLmV1aVN3aXRjaDpob3ZlciAmIHtcXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoXCIuY29uY2F0KHNpemVzW3NpemVdLnRodW1iU2NhbGVzLmhvdmVyLCBcIik7XFxuICAgICAgfVxcbiAgICAgIC5ldWlTd2l0Y2g6YWN0aXZlICYge1xcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZShcIikuY29uY2F0KHNpemVzW3NpemVdLnRodW1iU2NhbGVzLmFjdGl2ZSwgXCIpO1xcbiAgICAgIH1cIikgOiAnJztcbiAgICByZXR1cm4gXCJcIi5jb25jYXQoYmFzZVNjYWxlKS5jb25jYXQoc3RhdGVzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBldWlTd2l0Y2hfX3RodW1iOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxDU1MoJ3ZlcnRpY2FsJywgMCksIFwiIGFzcGVjdC1yYXRpbzoxO1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICdmaXQtY29udGVudCcpLCBcIiBcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgJzEwMCUnKSwgXCIgYm9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbi1wcm9wZXJ0eTppbnNldC1pbmxpbmUtc3RhcnQsdHJhbnNmb3JtLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yO3RyYW5zaXRpb24tZHVyYXRpb246XCIsIGFuaW1hdGlvbi5zcGVlZCwgXCI7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246XCIsIGFuaW1hdGlvbi5lYXNpbmcsIFwiO307bGFiZWw6ZXVpU3dpdGNoX190aHVtYjtcIiksXG4gICAgb2ZmOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2xlZnQnLCAwKSwgXCI7O2xhYmVsOm9mZjtcIiksXG4gICAgZ2V0IG9uKCkge1xuICAgICAgLy8gcmlnaHQ6IDAgd29ya3MgYnV0IGRvZXNuJ3QgdHJhbnNpdGlvbi9hbmltYXRlLCBzbyB3ZSBuZWVkIHRvXG4gICAgICAvLyBtYW51YWxseSBjYWxjdWxhdGUgdGhlIGxlZnQgcG9zaXRpb24gcGVyIHN3aXRjaCBzaXplXG4gICAgICB2YXIgX2NhbGN1bGF0ZUxlZnQgPSBmdW5jdGlvbiBfY2FsY3VsYXRlTGVmdChib2R5V2lkdGgsIHRodW1iV2lkdGgpIHtcbiAgICAgICAgdmFyIGxlZnRQb3NpdGlvbiA9IG1hdGhXaXRoVW5pdHMoW2JvZHlXaWR0aCwgdGh1bWJXaWR0aF0sIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgICAgICAgcmV0dXJuIHggLSB5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jc3MoXCJsYWJlbDpvbjtcIiwgbG9naWNhbENTUygnbGVmdCcsIGxlZnRQb3NpdGlvbiksIFwiO1wiKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1bmNvbXByZXNzZWQ6IF9jYWxjdWxhdGVMZWZ0KHVuY29tcHJlc3NlZC53aWR0aCwgdW5jb21wcmVzc2VkLmhlaWdodCksXG4gICAgICAgIGNvbXByZXNzZWQ6IF9jYWxjdWxhdGVMZWZ0KGNvbXByZXNzZWQud2lkdGgsIGNvbXByZXNzZWQuaGVpZ2h0KSxcbiAgICAgICAgbWluaTogX2NhbGN1bGF0ZUxlZnQobWluaS53aWR0aCwgbWluaS5oZWlnaHQpXG4gICAgICB9O1xuICAgIH0sXG4gICAgZW5hYmxlZDoge1xuICAgICAgZW5hYmxlZDogXCJcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IFwiLmNvbmNhdChjb2xvcnMudGh1bWIsIFwiO1xcbiAgICAgICAgYm9yZGVyOiBcIikuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIikuY29uY2F0KGNvbG9ycy50aHVtYkJvcmRlciwgXCI7XFxuICAgICAgXCIpLFxuICAgICAgdW5jb21wcmVzc2VkOiBfY2FsY3VsYXRlU2NhbGUoJ3VuY29tcHJlc3NlZCcsIHRydWUpLFxuICAgICAgY29tcHJlc3NlZDogX2NhbGN1bGF0ZVNjYWxlKCdjb21wcmVzc2VkJywgdHJ1ZSksXG4gICAgICBtaW5pOiBfY2FsY3VsYXRlU2NhbGUoJ21pbmknLCBmYWxzZSlcbiAgICB9LFxuICAgIGRpc2FibGVkOiB7XG4gICAgICBkaXNhYmxlZDogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgc29saWQgXCIsIGNvbG9ycy50aHVtYkJvcmRlckRpc2FibGVkLCBcIjs7bGFiZWw6ZGlzYWJsZWQ7XCIpLFxuICAgICAgdW5jb21wcmVzc2VkOiBfY2FsY3VsYXRlU2NhbGUoJ3VuY29tcHJlc3NlZCcsIGZhbHNlKSxcbiAgICAgIGNvbXByZXNzZWQ6IF9jYWxjdWxhdGVTY2FsZSgnY29tcHJlc3NlZCcsIGZhbHNlKSxcbiAgICAgIG1pbmk6IF9jYWxjdWxhdGVTY2FsZSgnbWluaScsIGZhbHNlKVxuICAgIH1cbiAgfTtcbn07XG52YXIgbGFiZWxTdHlsZXMgPSBmdW5jdGlvbiBsYWJlbFN0eWxlcyhldWlUaGVtZUNvbnRleHQsIF9yZWY5KSB7XG4gIHZhciBzaXplcyA9IF9yZWY5LnNpemVzLFxuICAgIGxhYmVsID0gX3JlZjkubGFiZWw7XG4gIHZhciB1bmNvbXByZXNzZWQgPSBzaXplcy51bmNvbXByZXNzZWQsXG4gICAgY29tcHJlc3NlZCA9IHNpemVzLmNvbXByZXNzZWQsXG4gICAgbWluaSA9IHNpemVzLm1pbmk7XG4gIHJldHVybiB7XG4gICAgZXVpU3dpdGNoX19sYWJlbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBsYWJlbC5nYXApLCBcIjs7bGFiZWw6ZXVpU3dpdGNoX19sYWJlbDtcIiksXG4gICAgLy8gU2tpcCBjc3NgYCB0byBhdm9pZCBnZW5lcmF0aW5nIGFuIEVtb3Rpb24gY2xhc3NOYW1lXG4gICAgdW5jb21wcmVzc2VkOiBcIlxcbiAgICAgIGZvbnQtc2l6ZTogXCIuY29uY2F0KGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKS5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQodW5jb21wcmVzc2VkLmhlaWdodCwgXCI7XFxuICAgIFwiKSxcbiAgICBjb21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC1zaXplOlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJykuZm9udFNpemUsIFwiO2xpbmUtaGVpZ2h0OlwiLCBjb21wcmVzc2VkLmhlaWdodCwgXCI7O2xhYmVsOmNvbXByZXNzZWQ7XCIpLFxuICAgIG1pbmk6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJykuZm9udFNpemUsIFwiO2xpbmUtaGVpZ2h0OlwiLCBtaW5pLmhlaWdodCwgXCI7O2xhYmVsOm1pbmk7XCIpLFxuICAgIGRpc2FibGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGxhYmVsLmRpc2FibGVkLCBcIjs7bGFiZWw6ZGlzYWJsZWQ7XCIpXG4gIH07XG59OyIsICJpbXBvcnQgY3JlYXRlRW1vdGlvbiBmcm9tICcuLi9jcmVhdGUtaW5zdGFuY2UvZGlzdC9lbW90aW9uLWNzcy1jcmVhdGUtaW5zdGFuY2UuZXNtLmpzJztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0ICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0ICdAZW1vdGlvbi91dGlscyc7XG5cbnZhciBfY3JlYXRlRW1vdGlvbiA9IGNyZWF0ZUVtb3Rpb24oe1xuICBrZXk6ICdjc3MnXG59KSxcbiAgICBmbHVzaCA9IF9jcmVhdGVFbW90aW9uLmZsdXNoLFxuICAgIGh5ZHJhdGUgPSBfY3JlYXRlRW1vdGlvbi5oeWRyYXRlLFxuICAgIGN4ID0gX2NyZWF0ZUVtb3Rpb24uY3gsXG4gICAgbWVyZ2UgPSBfY3JlYXRlRW1vdGlvbi5tZXJnZSxcbiAgICBnZXRSZWdpc3RlcmVkU3R5bGVzID0gX2NyZWF0ZUVtb3Rpb24uZ2V0UmVnaXN0ZXJlZFN0eWxlcyxcbiAgICBpbmplY3RHbG9iYWwgPSBfY3JlYXRlRW1vdGlvbi5pbmplY3RHbG9iYWwsXG4gICAga2V5ZnJhbWVzID0gX2NyZWF0ZUVtb3Rpb24ua2V5ZnJhbWVzLFxuICAgIGNzcyA9IF9jcmVhdGVFbW90aW9uLmNzcyxcbiAgICBzaGVldCA9IF9jcmVhdGVFbW90aW9uLnNoZWV0LFxuICAgIGNhY2hlID0gX2NyZWF0ZUVtb3Rpb24uY2FjaGU7XG5cbmV4cG9ydCB7IGNhY2hlLCBjc3MsIGN4LCBmbHVzaCwgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaHlkcmF0ZSwgaW5qZWN0R2xvYmFsLCBrZXlmcmFtZXMsIG1lcmdlLCBzaGVldCB9O1xuIiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjaGlsZHJlblwiLCBcImhlYWRlclppbmRleExvY2F0aW9uXCIsIFwibWFza1JlZlwiXTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY3ggfSBmcm9tICdAZW1vdGlvbi9jc3MnO1xuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IHVzZUNvbWJpbmVkUmVmcywgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlQb3J0YWwgfSBmcm9tICcuLi9wb3J0YWwnO1xuaW1wb3J0IHsgZXVpT3ZlcmxheU1hc2tTdHlsZXMgfSBmcm9tICcuL292ZXJsYXlfbWFzay5zdHlsZXMnO1xuaW1wb3J0IHsgZXVpT3ZlcmxheU1hc2tCb2R5U3R5bGVzIH0gZnJvbSAnLi9vdmVybGF5X21hc2tfYm9keS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpT3ZlcmxheU1hc2sgPSBmdW5jdGlvbiBFdWlPdmVybGF5TWFzayhfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgX3JlZiRoZWFkZXJaaW5kZXhMb2NhID0gX3JlZi5oZWFkZXJaaW5kZXhMb2NhdGlvbixcbiAgICBoZWFkZXJaaW5kZXhMb2NhdGlvbiA9IF9yZWYkaGVhZGVyWmluZGV4TG9jYSA9PT0gdm9pZCAwID8gJ2Fib3ZlJyA6IF9yZWYkaGVhZGVyWmluZGV4TG9jYSxcbiAgICBtYXNrUmVmID0gX3JlZi5tYXNrUmVmLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG51bGwpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIG92ZXJsYXlNYXNrTm9kZSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0T3ZlcmxheU1hc2tOb2RlID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIGNvbWJpbmVkTWFza1JlZiA9IHVzZUNvbWJpbmVkUmVmcyhbc2V0T3ZlcmxheU1hc2tOb2RlLCBtYXNrUmVmXSk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlPdmVybGF5TWFza1N0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBjeChbc3R5bGVzLmV1aU92ZXJsYXlNYXNrLCBzdHlsZXNbXCJcIi5jb25jYXQoaGVhZGVyWmluZGV4TG9jYXRpb24sIFwiSGVhZGVyXCIpXV0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghb3ZlcmxheU1hc2tOb2RlKSByZXR1cm47XG4gICAga2V5c09mKHJlc3QpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKHR5cGVvZiByZXN0W2tleV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBwcm9wZXJ0eSB0eXBlLiBFdWlPdmVybGF5TWFzayBwcm9wZXJ0eSBcIi5jb25jYXQoa2V5LCBcIiBpcyBub3QgYSBzdHJpbmcuXCIpKTtcbiAgICAgIH1cbiAgICAgIGlmIChvdmVybGF5TWFza05vZGUpIHtcbiAgICAgICAgb3ZlcmxheU1hc2tOb2RlLnNldEF0dHJpYnV0ZShrZXksIHJlc3Rba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtvdmVybGF5TWFza05vZGVdKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcblxuICAvLyBOb3RlOiBVc2UgYGNsYXNzTGlzdC5hZGQvcmVtb3ZlYCBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIGVudGlyZSBgY2xhc3NOYW1lYFxuICAvLyBzbyBhcyBub3QgdG8gb3ZlcnJpZGUgYW55IGV4aXN0aW5nIGNsYXNzZXMgc2V0IGJ5IGBFdWlQb3J0YWxgXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG92ZXJsYXlNYXNrTm9kZSkge1xuICAgICAgb3ZlcmxheU1hc2tOb2RlLmNsYXNzTGlzdC5hZGQoJ2V1aU92ZXJsYXlNYXNrJywgY3NzU3R5bGVzKTtcbiAgICAgIG92ZXJsYXlNYXNrTm9kZS5kYXRhc2V0LnJlbGF0aXZlVG9IZWFkZXIgPSBoZWFkZXJaaW5kZXhMb2NhdGlvbjtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvdmVybGF5TWFza05vZGUuY2xhc3NMaXN0LnJlbW92ZShjc3NTdHlsZXMpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtvdmVybGF5TWFza05vZGUsIGNzc1N0eWxlcywgaGVhZGVyWmluZGV4TG9jYXRpb25dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2xhc3NOYW1lICYmIG92ZXJsYXlNYXNrTm9kZSkge1xuICAgICAgdmFyIF9vdmVybGF5TWFza05vZGUkY2xhcztcbiAgICAgIHZhciBjbGFzc05hbWVBcmdzID0gY2xhc3NOYW1lLnNwbGl0KCcgJyk7IC8vIFRoZSBgY2xhc3NMaXN0YCBBUEkgZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIGNsYXNzZXMgaW4gdGhlIHNhbWUgc3RyaW5nXG4gICAgICAoX292ZXJsYXlNYXNrTm9kZSRjbGFzID0gb3ZlcmxheU1hc2tOb2RlLmNsYXNzTGlzdCkuYWRkLmFwcGx5KF9vdmVybGF5TWFza05vZGUkY2xhcywgX3RvQ29uc3VtYWJsZUFycmF5KGNsYXNzTmFtZUFyZ3MpKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfb3ZlcmxheU1hc2tOb2RlJGNsYXMyO1xuICAgICAgICByZXR1cm4gKF9vdmVybGF5TWFza05vZGUkY2xhczIgPSBvdmVybGF5TWFza05vZGUuY2xhc3NMaXN0KS5yZW1vdmUuYXBwbHkoX292ZXJsYXlNYXNrTm9kZSRjbGFzMiwgX3RvQ29uc3VtYWJsZUFycmF5KGNsYXNzTmFtZUFyZ3MpKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbb3ZlcmxheU1hc2tOb2RlLCBjbGFzc05hbWVdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUG9ydGFsLCB7XG4gICAgcG9ydGFsUmVmOiBjb21iaW5lZE1hc2tSZWZcbiAgfSwgX19fRW1vdGlvbkpTWChHbG9iYWwsIHtcbiAgICBzdHlsZXM6IGV1aU92ZXJsYXlNYXNrQm9keVN0eWxlc1xuICB9KSwgY2hpbGRyZW4pO1xufTtcbkV1aU92ZXJsYXlNYXNrLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgKiBTaG91bGQgdGhlIG1hc2sgdmlzdWFsbHkgc2l0IGFib3ZlIG9yIGJlbG93IHRoZSBFdWlIZWFkZXIgKGNvbnRyb2xsZWQgYnkgei1pbmRleClcbiAgICAgKi9cbiAgaGVhZGVyWmluZGV4TG9jYXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJhYm92ZVwiLCBcImJlbG93XCJdKSxcbiAgLyoqXG4gICAgICogUmVhY3QgcmVmIHRvIGJlIHBhc3NlZCB0byB0aGUgd3JhcHBpbmcgY29udGFpbmVyXG4gICAgICovXG4gIG1hc2tSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBldWlBbmltRmFkZUluIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5leHBvcnQgdmFyIGV1aU92ZXJsYXlNYXNrU3R5bGVzID0gZnVuY3Rpb24gZXVpT3ZlcmxheU1hc2tTdHlsZXMoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aU92ZXJsYXlNYXNrOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246Zml4ZWQ7XCIsIGxvZ2ljYWxDU1MoJ3RvcCcsIDApLCBcIiBcIiwgbG9naWNhbENTUygnbGVmdCcsIDApLCBcIiBcIiwgbG9naWNhbENTUygncmlnaHQnLCAwKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2JvdHRvbScsIDApLCBcIiBkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctYm90dG9tJywgJzEwdmgnKSwgXCIgYW5pbWF0aW9uOlwiLCBldWlBbmltRmFkZUluLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIGVhc2UtaW47YmFja2dyb3VuZDpcIiwgdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmluaywgMC41KSwgXCI7O2xhYmVsOmV1aU92ZXJsYXlNYXNrO1wiKSxcbiAgICBhYm92ZUhlYWRlcjogLyojX19QVVJFX18qL2NzcyhcInotaW5kZXg6XCIsIGV1aVRoZW1lLmxldmVscy5tYXNrLCBcIjs7bGFiZWw6YWJvdmVIZWFkZXI7XCIpLFxuICAgIGJlbG93SGVhZGVyOiAvKiNfX1BVUkVfXyovY3NzKFwiei1pbmRleDpcIiwgZXVpVGhlbWUubGV2ZWxzLm1hc2tCZWxvd0hlYWRlciwgXCI7XCIsIGxvZ2ljYWxDU1MoJ3RvcCcsICd2YXIoLS1ldWlGaXhlZEhlYWRlcnNPZmZzZXQsIDApJyksIFwiOztsYWJlbDpiZWxvd0hlYWRlcjtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB2YXIgZXVpT3ZlcmxheU1hc2tCb2R5U3R5bGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjEzMTE2MC1ldWlPdmVybGF5TWFza0JvZHlTdHlsZXNcIixcbiAgc3R5bGVzOiBcImJvZHl7b3ZlcmZsb3c6aGlkZGVuO307bGFiZWw6ZXVpT3ZlcmxheU1hc2tCb2R5U3R5bGVzO1wiXG59IDoge1xuICBuYW1lOiBcIjEzMTE2MC1ldWlPdmVybGF5TWFza0JvZHlTdHlsZXNcIixcbiAgc3R5bGVzOiBcImJvZHl7b3ZlcmZsb3c6aGlkZGVuO307bGFiZWw6ZXVpT3ZlcmxheU1hc2tCb2R5U3R5bGVzO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07IiwgImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkge1xuICBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxuZXhwb3J0IHsgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBhcyBkZWZhdWx0IH07IiwgInZhciBzYWZlSXNOYU4gPSBOdW1iZXIuaXNOYU4gfHxcbiAgICBmdW5jdGlvbiBwb255ZmlsbCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gdmFsdWU7XG4gICAgfTtcbmZ1bmN0aW9uIGlzRXF1YWwoZmlyc3QsIHNlY29uZCkge1xuICAgIGlmIChmaXJzdCA9PT0gc2Vjb25kKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoc2FmZUlzTmFOKGZpcnN0KSAmJiBzYWZlSXNOYU4oc2Vjb25kKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gYXJlSW5wdXRzRXF1YWwobmV3SW5wdXRzLCBsYXN0SW5wdXRzKSB7XG4gICAgaWYgKG5ld0lucHV0cy5sZW5ndGggIT09IGxhc3RJbnB1dHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdJbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpc0VxdWFsKG5ld0lucHV0c1tpXSwgbGFzdElucHV0c1tpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWVtb2l6ZU9uZShyZXN1bHRGbiwgaXNFcXVhbCkge1xuICAgIGlmIChpc0VxdWFsID09PSB2b2lkIDApIHsgaXNFcXVhbCA9IGFyZUlucHV0c0VxdWFsOyB9XG4gICAgdmFyIGxhc3RUaGlzO1xuICAgIHZhciBsYXN0QXJncyA9IFtdO1xuICAgIHZhciBsYXN0UmVzdWx0O1xuICAgIHZhciBjYWxsZWRPbmNlID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gbWVtb2l6ZWQoKSB7XG4gICAgICAgIHZhciBuZXdBcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBuZXdBcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxlZE9uY2UgJiYgbGFzdFRoaXMgPT09IHRoaXMgJiYgaXNFcXVhbChuZXdBcmdzLCBsYXN0QXJncykpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxhc3RSZXN1bHQgPSByZXN1bHRGbi5hcHBseSh0aGlzLCBuZXdBcmdzKTtcbiAgICAgICAgY2FsbGVkT25jZSA9IHRydWU7XG4gICAgICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICAgICAgbGFzdEFyZ3MgPSBuZXdBcmdzO1xuICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vaXplT25lO1xuIiwgImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHtcbiAgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9O1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7XG4gICAgaWYgKGUuaW5jbHVkZXMobikpIGNvbnRpbnVlO1xuICAgIHRbbl0gPSByW25dO1xuICB9XG4gIHJldHVybiB0O1xufVxuZXhwb3J0IHsgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgYXMgZGVmYXVsdCB9OyIsICIvLyBAZmxvd1xuXG4vLyBBbmltYXRpb24gZnJhbWUgYmFzZWQgaW1wbGVtZW50YXRpb24gb2Ygc2V0VGltZW91dC5cbi8vIEluc3BpcmVkIGJ5IEpvZSBMYW1iZXJ0LCBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qb2VsYW1iZXJ0LzEwMDIxMTYjZmlsZS1yZXF1ZXN0dGltZW91dC1qc1xuXG5jb25zdCBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyA9XG4gIHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJztcblxuY29uc3Qgbm93ID0gaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3dcbiAgPyAoKSA9PiBwZXJmb3JtYW5jZS5ub3coKVxuICA6ICgpID0+IERhdGUubm93KCk7XG5cbmV4cG9ydCB0eXBlIFRpbWVvdXRJRCA9IHt8XG4gIGlkOiBBbmltYXRpb25GcmFtZUlELFxufH07XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5jZWxUaW1lb3V0KHRpbWVvdXRJRDogVGltZW91dElEKSB7XG4gIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRpbWVvdXRJRC5pZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0VGltZW91dChjYWxsYmFjazogRnVuY3Rpb24sIGRlbGF5OiBudW1iZXIpOiBUaW1lb3V0SUQge1xuICBjb25zdCBzdGFydCA9IG5vdygpO1xuXG4gIGZ1bmN0aW9uIHRpY2soKSB7XG4gICAgaWYgKG5vdygpIC0gc3RhcnQgPj0gZGVsYXkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVvdXRJRC5pZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0aW1lb3V0SUQ6IFRpbWVvdXRJRCA9IHtcbiAgICBpZDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spLFxuICB9O1xuXG4gIHJldHVybiB0aW1lb3V0SUQ7XG59XG4iLCAiLy8gQGZsb3dcblxubGV0IHNpemU6IG51bWJlciA9IC0xO1xuXG4vLyBUaGlzIHV0aWxpdHkgY29waWVkIGZyb20gXCJkb20taGVscGVyc1wiIHBhY2thZ2UuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyU2l6ZShyZWNhbGN1bGF0ZT86IGJvb2xlYW4gPSBmYWxzZSk6IG51bWJlciB7XG4gIGlmIChzaXplID09PSAtMSB8fCByZWNhbGN1bGF0ZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IHN0eWxlID0gZGl2LnN0eWxlO1xuICAgIHN0eWxlLndpZHRoID0gJzUwcHgnO1xuICAgIHN0eWxlLmhlaWdodCA9ICc1MHB4JztcbiAgICBzdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xuXG4gICAgKChkb2N1bWVudC5ib2R5OiBhbnkpOiBIVE1MQm9keUVsZW1lbnQpLmFwcGVuZENoaWxkKGRpdik7XG5cbiAgICBzaXplID0gZGl2Lm9mZnNldFdpZHRoIC0gZGl2LmNsaWVudFdpZHRoO1xuXG4gICAgKChkb2N1bWVudC5ib2R5OiBhbnkpOiBIVE1MQm9keUVsZW1lbnQpLnJlbW92ZUNoaWxkKGRpdik7XG4gIH1cblxuICByZXR1cm4gc2l6ZTtcbn1cblxuZXhwb3J0IHR5cGUgUlRMT2Zmc2V0VHlwZSA9XG4gIHwgJ25lZ2F0aXZlJ1xuICB8ICdwb3NpdGl2ZS1kZXNjZW5kaW5nJ1xuICB8ICdwb3NpdGl2ZS1hc2NlbmRpbmcnO1xuXG5sZXQgY2FjaGVkUlRMUmVzdWx0OiBSVExPZmZzZXRUeXBlIHwgbnVsbCA9IG51bGw7XG5cbi8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbi8vIENocm9tZSBkb2VzIG5vdCBzZWVtIHRvIGFkaGVyZTsgaXRzIHNjcm9sbExlZnQgdmFsdWVzIGFyZSBwb3NpdGl2ZSAobWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuLy8gU2FmYXJpJ3MgZWxhc3RpYyBib3VuY2UgbWFrZXMgZGV0ZWN0aW5nIHRoaXMgZXZlbiBtb3JlIGNvbXBsaWNhdGVkIHdydCBwb3RlbnRpYWwgZmFsc2UgcG9zaXRpdmVzLlxuLy8gVGhlIHNhZmVzdCB3YXkgdG8gY2hlY2sgdGhpcyBpcyB0byBpbnRlbnRpb25hbGx5IHNldCBhIG5lZ2F0aXZlIG9mZnNldCxcbi8vIGFuZCB0aGVuIHZlcmlmeSB0aGF0IHRoZSBzdWJzZXF1ZW50IFwic2Nyb2xsXCIgZXZlbnQgbWF0Y2hlcyB0aGUgbmVnYXRpdmUgb2Zmc2V0LlxuLy8gSWYgaXQgZG9lcyBub3QgbWF0Y2gsIHRoZW4gd2UgY2FuIGFzc3VtZSBhIG5vbi1zdGFuZGFyZCBSVEwgc2Nyb2xsIGltcGxlbWVudGF0aW9uLlxuZXhwb3J0IGZ1bmN0aW9uIGdldFJUTE9mZnNldFR5cGUocmVjYWxjdWxhdGU/OiBib29sZWFuID0gZmFsc2UpOiBSVExPZmZzZXRUeXBlIHtcbiAgaWYgKGNhY2hlZFJUTFJlc3VsdCA9PT0gbnVsbCB8fCByZWNhbGN1bGF0ZSkge1xuICAgIGNvbnN0IG91dGVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3Qgb3V0ZXJTdHlsZSA9IG91dGVyRGl2LnN0eWxlO1xuICAgIG91dGVyU3R5bGUud2lkdGggPSAnNTBweCc7XG4gICAgb3V0ZXJTdHlsZS5oZWlnaHQgPSAnNTBweCc7XG4gICAgb3V0ZXJTdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xuICAgIG91dGVyU3R5bGUuZGlyZWN0aW9uID0gJ3J0bCc7XG5cbiAgICBjb25zdCBpbm5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IGlubmVyU3R5bGUgPSBpbm5lckRpdi5zdHlsZTtcbiAgICBpbm5lclN0eWxlLndpZHRoID0gJzEwMHB4JztcbiAgICBpbm5lclN0eWxlLmhlaWdodCA9ICcxMDBweCc7XG5cbiAgICBvdXRlckRpdi5hcHBlbmRDaGlsZChpbm5lckRpdik7XG5cbiAgICAoKGRvY3VtZW50LmJvZHk6IGFueSk6IEhUTUxCb2R5RWxlbWVudCkuYXBwZW5kQ2hpbGQob3V0ZXJEaXYpO1xuXG4gICAgaWYgKG91dGVyRGl2LnNjcm9sbExlZnQgPiAwKSB7XG4gICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtZGVzY2VuZGluZyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dGVyRGl2LnNjcm9sbExlZnQgPSAxO1xuICAgICAgaWYgKG91dGVyRGl2LnNjcm9sbExlZnQgPT09IDApIHtcbiAgICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ25lZ2F0aXZlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICdwb3NpdGl2ZS1hc2NlbmRpbmcnO1xuICAgICAgfVxuICAgIH1cblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5yZW1vdmVDaGlsZChvdXRlckRpdik7XG5cbiAgICByZXR1cm4gY2FjaGVkUlRMUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbn1cbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgbWVtb2l6ZU9uZSBmcm9tICdtZW1vaXplLW9uZSc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY2FuY2VsVGltZW91dCwgcmVxdWVzdFRpbWVvdXQgfSBmcm9tICcuL3RpbWVyJztcbmltcG9ydCB7IGdldFNjcm9sbGJhclNpemUsIGdldFJUTE9mZnNldFR5cGUgfSBmcm9tICcuL2RvbUhlbHBlcnMnO1xuXG5pbXBvcnQgdHlwZSB7IFRpbWVvdXRJRCB9IGZyb20gJy4vdGltZXInO1xuXG50eXBlIERpcmVjdGlvbiA9ICdsdHInIHwgJ3J0bCc7XG5leHBvcnQgdHlwZSBTY3JvbGxUb0FsaWduID0gJ2F1dG8nIHwgJ3NtYXJ0JyB8ICdjZW50ZXInIHwgJ3N0YXJ0JyB8ICdlbmQnO1xuXG50eXBlIGl0ZW1TaXplID0gbnVtYmVyIHwgKChpbmRleDogbnVtYmVyKSA9PiBudW1iZXIpO1xuXG50eXBlIFJlbmRlckNvbXBvbmVudFByb3BzPFQ+ID0ge3xcbiAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgZGF0YTogVCxcbiAgaXNTY3JvbGxpbmc/OiBib29sZWFuLFxuICByb3dJbmRleDogbnVtYmVyLFxuICBzdHlsZTogT2JqZWN0LFxufH07XG5leHBvcnQgdHlwZSBSZW5kZXJDb21wb25lbnQ8VD4gPSBSZWFjdCRDb21wb25lbnRUeXBlPFxuICAkU2hhcGU8UmVuZGVyQ29tcG9uZW50UHJvcHM8VD4+XG4+O1xuXG50eXBlIFNjcm9sbERpcmVjdGlvbiA9ICdmb3J3YXJkJyB8ICdiYWNrd2FyZCc7XG5cbnR5cGUgT25JdGVtc1JlbmRlcmVkQ2FsbGJhY2sgPSAoe1xuICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXg6IG51bWJlcixcbiAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuUm93U3RvcEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVDb2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVDb2x1bW5TdG9wSW5kZXg6IG51bWJlcixcbiAgdmlzaWJsZVJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgdmlzaWJsZVJvd1N0b3BJbmRleDogbnVtYmVyLFxufSkgPT4gdm9pZDtcbnR5cGUgT25TY3JvbGxDYWxsYmFjayA9ICh7XG4gIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICBzY3JvbGxUb3A6IG51bWJlcixcbiAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuLFxuICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxufSkgPT4gdm9pZDtcblxudHlwZSBTY3JvbGxFdmVudCA9IFN5bnRoZXRpY0V2ZW50PEhUTUxEaXZFbGVtZW50PjtcbnR5cGUgSXRlbVN0eWxlQ2FjaGUgPSB7IFtrZXk6IHN0cmluZ106IE9iamVjdCB9O1xuXG50eXBlIE91dGVyUHJvcHMgPSB7fFxuICBjaGlsZHJlbjogUmVhY3QkTm9kZSxcbiAgY2xhc3NOYW1lOiBzdHJpbmcgfCB2b2lkLFxuICBvblNjcm9sbDogU2Nyb2xsRXZlbnQgPT4gdm9pZCxcbiAgc3R5bGU6IHtcbiAgICBbc3RyaW5nXTogbWl4ZWQsXG4gIH0sXG58fTtcblxudHlwZSBJbm5lclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbmV4cG9ydCB0eXBlIFByb3BzPFQ+ID0ge3xcbiAgY2hpbGRyZW46IFJlbmRlckNvbXBvbmVudDxUPixcbiAgY2xhc3NOYW1lPzogc3RyaW5nLFxuICBjb2x1bW5Db3VudDogbnVtYmVyLFxuICBjb2x1bW5XaWR0aDogaXRlbVNpemUsXG4gIGRpcmVjdGlvbjogRGlyZWN0aW9uLFxuICBoZWlnaHQ6IG51bWJlcixcbiAgaW5pdGlhbFNjcm9sbExlZnQ/OiBudW1iZXIsXG4gIGluaXRpYWxTY3JvbGxUb3A/OiBudW1iZXIsXG4gIGlubmVyUmVmPzogYW55LFxuICBpbm5lckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8SW5uZXJQcm9wcywgYW55PixcbiAgaW5uZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIGl0ZW1EYXRhOiBULFxuICBpdGVtS2V5PzogKHBhcmFtczoge3xcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIGRhdGE6IFQsXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgfH0pID0+IGFueSxcbiAgb25JdGVtc1JlbmRlcmVkPzogT25JdGVtc1JlbmRlcmVkQ2FsbGJhY2ssXG4gIG9uU2Nyb2xsPzogT25TY3JvbGxDYWxsYmFjayxcbiAgb3V0ZXJSZWY/OiBhbnksXG4gIG91dGVyRWxlbWVudFR5cGU/OiBzdHJpbmcgfCBSZWFjdCRBYnN0cmFjdENvbXBvbmVudDxPdXRlclByb3BzLCBhbnk+LFxuICBvdXRlclRhZ05hbWU/OiBzdHJpbmcsIC8vIGRlcHJlY2F0ZWRcbiAgb3ZlcnNjYW5Db2x1bW5Db3VudD86IG51bWJlcixcbiAgb3ZlcnNjYW5Db2x1bW5zQ291bnQ/OiBudW1iZXIsIC8vIGRlcHJlY2F0ZWRcbiAgb3ZlcnNjYW5Db3VudD86IG51bWJlciwgLy8gZGVwcmVjYXRlZFxuICBvdmVyc2NhblJvd0NvdW50PzogbnVtYmVyLFxuICBvdmVyc2NhblJvd3NDb3VudD86IG51bWJlciwgLy8gZGVwcmVjYXRlZFxuICByb3dDb3VudDogbnVtYmVyLFxuICByb3dIZWlnaHQ6IGl0ZW1TaXplLFxuICBzdHlsZT86IE9iamVjdCxcbiAgdXNlSXNTY3JvbGxpbmc6IGJvb2xlYW4sXG4gIHdpZHRoOiBudW1iZXIsXG58fTtcblxudHlwZSBTdGF0ZSA9IHt8XG4gIGluc3RhbmNlOiBhbnksXG4gIGlzU2Nyb2xsaW5nOiBib29sZWFuLFxuICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhbixcbiAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbnx9O1xuXG50eXBlIGdldEl0ZW1PZmZzZXQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBnZXRJdGVtU2l6ZSA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIGdldEVzdGltYXRlZFRvdGFsU2l6ZSA9IChwcm9wczogUHJvcHM8YW55PiwgaW5zdGFuY2VQcm9wczogYW55KSA9PiBudW1iZXI7XG50eXBlIEdldE9mZnNldEZvckl0ZW1BbmRBbGlnbm1lbnQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueSxcbiAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RhcnRJbmRleEZvck9mZnNldCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIG9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgc3RhcnRJbmRleDogbnVtYmVyLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgSW5pdEluc3RhbmNlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlOiBhbnkpID0+IGFueTtcbnR5cGUgVmFsaWRhdGVQcm9wcyA9IChwcm9wczogUHJvcHM8YW55PikgPT4gdm9pZDtcblxuY29uc3QgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMID0gMTUwO1xuXG5jb25zdCBkZWZhdWx0SXRlbUtleSA9ICh7IGNvbHVtbkluZGV4LCBkYXRhLCByb3dJbmRleCB9KSA9PlxuICBgJHtyb3dJbmRleH06JHtjb2x1bW5JbmRleH1gO1xuXG4vLyBJbiBERVYgbW9kZSwgdGhpcyBTZXQgaGVscHMgdXMgb25seSBsb2cgYSB3YXJuaW5nIG9uY2UgcGVyIGNvbXBvbmVudCBpbnN0YW5jZS5cbi8vIFRoaXMgYXZvaWRzIHNwYW1taW5nIHRoZSBjb25zb2xlIGV2ZXJ5IHRpbWUgYSByZW5kZXIgaGFwcGVucy5cbmxldCBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgPSBudWxsO1xubGV0IGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ID0gbnVsbDtcbmxldCBkZXZXYXJuaW5nc1RhZ05hbWUgPSBudWxsO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuV2Vha1NldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgPSBuZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ID0gbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc1RhZ05hbWUgPSBuZXcgV2Vha1NldCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUdyaWRDb21wb25lbnQoe1xuICBnZXRDb2x1bW5PZmZzZXQsXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGdldENvbHVtbldpZHRoLFxuICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCxcbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50LFxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQsXG4gIGdldFJvd0hlaWdodCxcbiAgZ2V0Um93T2Zmc2V0LFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBpbml0SW5zdGFuY2VQcm9wcyxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSxcbiAgdmFsaWRhdGVQcm9wcyxcbn06IHt8XG4gIGdldENvbHVtbk9mZnNldDogZ2V0SXRlbU9mZnNldCxcbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldDogR2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgZ2V0Q29sdW1uV2lkdGg6IGdldEl0ZW1TaXplLFxuICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodDogZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoOiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudDogR2V0T2Zmc2V0Rm9ySXRlbUFuZEFsaWdubWVudCxcbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50OiBHZXRPZmZzZXRGb3JJdGVtQW5kQWxpZ25tZW50LFxuICBnZXRSb3dPZmZzZXQ6IGdldEl0ZW1PZmZzZXQsXG4gIGdldFJvd0hlaWdodDogZ2V0SXRlbVNpemUsXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IEdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGluaXRJbnN0YW5jZVByb3BzOiBJbml0SW5zdGFuY2VQcm9wcyxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogYm9vbGVhbixcbiAgdmFsaWRhdGVQcm9wczogVmFsaWRhdGVQcm9wcyxcbnx9KSB7XG4gIHJldHVybiBjbGFzcyBHcmlkPFQ+IGV4dGVuZHMgUHVyZUNvbXBvbmVudDxQcm9wczxUPiwgU3RhdGU+IHtcbiAgICBfaW5zdGFuY2VQcm9wczogYW55ID0gaW5pdEluc3RhbmNlUHJvcHModGhpcy5wcm9wcywgdGhpcyk7XG4gICAgX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQ6IFRpbWVvdXRJRCB8IG51bGwgPSBudWxsO1xuICAgIF9vdXRlclJlZjogP0hUTUxEaXZFbGVtZW50O1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgICBpdGVtRGF0YTogdW5kZWZpbmVkLFxuICAgICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgIH07XG5cbiAgICBzdGF0ZTogU3RhdGUgPSB7XG4gICAgICBpbnN0YW5jZTogdGhpcyxcbiAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICAgIHNjcm9sbExlZnQ6XG4gICAgICAgIHR5cGVvZiB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxMZWZ0ID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdFxuICAgICAgICAgIDogMCxcbiAgICAgIHNjcm9sbFRvcDpcbiAgICAgICAgdHlwZW9mIHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbFRvcCA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbFRvcFxuICAgICAgICAgIDogMCxcbiAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgIH07XG5cbiAgICAvLyBBbHdheXMgdXNlIGV4cGxpY2l0IGNvbnN0cnVjdG9yIGZvciBSZWFjdCBjb21wb25lbnRzLlxuICAgIC8vIEl0IHByb2R1Y2VzIGxlc3MgY29kZSBhZnRlciB0cmFuc3BpbGF0aW9uLiAoIzI2KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gICAgY29uc3RydWN0b3IocHJvcHM6IFByb3BzPFQ+KSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgIG5leHRQcm9wczogUHJvcHM8VD4sXG4gICAgICBwcmV2U3RhdGU6IFN0YXRlXG4gICAgKTogJFNoYXBlPFN0YXRlPiB8IG51bGwge1xuICAgICAgdmFsaWRhdGVTaGFyZWRQcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICB2YWxpZGF0ZVByb3BzKG5leHRQcm9wcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzY3JvbGxUbyh7XG4gICAgICBzY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wLFxuICAgIH06IHtcbiAgICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgIH0pOiB2b2lkIHtcbiAgICAgIGlmIChzY3JvbGxMZWZ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHNjcm9sbExlZnQpO1xuICAgICAgfVxuICAgICAgaWYgKHNjcm9sbFRvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHNjcm9sbExlZnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcm9sbExlZnQgPSBwcmV2U3RhdGUuc2Nyb2xsTGVmdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Nyb2xsVG9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3JvbGxUb3AgPSBwcmV2U3RhdGUuc2Nyb2xsVG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxMZWZ0ID09PSBzY3JvbGxMZWZ0ICYmXG4gICAgICAgICAgcHJldlN0YXRlLnNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbExlZnQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogdHJ1ZSxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPCBzY3JvbGxUb3AgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9JdGVtKHtcbiAgICAgIGFsaWduID0gJ2F1dG8nLFxuICAgICAgY29sdW1uSW5kZXgsXG4gICAgICByb3dJbmRleCxcbiAgICB9OiB7XG4gICAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICAgIGNvbHVtbkluZGV4PzogbnVtYmVyLFxuICAgICAgcm93SW5kZXg/OiBudW1iZXIsXG4gICAgfSk6IHZvaWQge1xuICAgICAgY29uc3QgeyBjb2x1bW5Db3VudCwgaGVpZ2h0LCByb3dDb3VudCwgd2lkdGggfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNjcm9sbExlZnQsIHNjcm9sbFRvcCB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGNvbnN0IHNjcm9sbGJhclNpemUgPSBnZXRTY3JvbGxiYXJTaXplKCk7XG5cbiAgICAgIGlmIChjb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbHVtbkluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uSW5kZXgsIGNvbHVtbkNvdW50IC0gMSkpO1xuICAgICAgfVxuICAgICAgaWYgKHJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcm93SW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dJbmRleCwgcm93Q291bnQgLSAxKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcblxuICAgICAgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LFxuICAgICAgLy8gdG8gZW5zdXJlIGl0J3MgZnVsbHkgdmlzaWJsZS5cbiAgICAgIC8vIEJ1dCB3ZSBvbmx5IG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIHNpemUgd2hlbiBpdCdzIGFjdHVhbGx5IHZpc2libGUuXG4gICAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgIGVzdGltYXRlZFRvdGFsV2lkdGggPiB3aWR0aCA/IHNjcm9sbGJhclNpemUgOiAwO1xuICAgICAgY29uc3QgdmVydGljYWxTY3JvbGxiYXJTaXplID1cbiAgICAgICAgZXN0aW1hdGVkVG90YWxIZWlnaHQgPiBoZWlnaHQgPyBzY3JvbGxiYXJTaXplIDogMDtcblxuICAgICAgdGhpcy5zY3JvbGxUbyh7XG4gICAgICAgIHNjcm9sbExlZnQ6XG4gICAgICAgICAgY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQoXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICBhbGlnbixcbiAgICAgICAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHMsXG4gICAgICAgICAgICAgICAgdmVydGljYWxTY3JvbGxiYXJTaXplXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsVG9wOlxuICAgICAgICAgIHJvd0luZGV4ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50KFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgYWxpZ24sXG4gICAgICAgICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHMsXG4gICAgICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhclNpemVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBzY3JvbGxUb3AsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGNvbnN0IHsgaW5pdGlhbFNjcm9sbExlZnQsIGluaXRpYWxTY3JvbGxUb3AgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGlmICh0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuICAgICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxMZWZ0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBpbml0aWFsU2Nyb2xsTGVmdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gaW5pdGlhbFNjcm9sbFRvcDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wLCBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGlmIChzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIG1pbWljIGl0LlxuICAgICAgICBjb25zdCBvdXRlclJlZiA9ICgodGhpcy5fb3V0ZXJSZWY6IGFueSk6IEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtYXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY29uc3QgeyBjbGllbnRXaWR0aCwgc2Nyb2xsV2lkdGggfSA9IG91dGVyUmVmO1xuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsTGVmdCk7XG4gICAgICAgIH1cblxuICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBjb2x1bW5Db3VudCxcbiAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGlubmVyUmVmLFxuICAgICAgICBpbm5lckVsZW1lbnRUeXBlLFxuICAgICAgICBpbm5lclRhZ05hbWUsXG4gICAgICAgIGl0ZW1EYXRhLFxuICAgICAgICBpdGVtS2V5ID0gZGVmYXVsdEl0ZW1LZXksXG4gICAgICAgIG91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgIG91dGVyVGFnTmFtZSxcbiAgICAgICAgcm93Q291bnQsXG4gICAgICAgIHN0eWxlLFxuICAgICAgICB1c2VJc1Njcm9sbGluZyxcbiAgICAgICAgd2lkdGgsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaXNTY3JvbGxpbmcgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGNvbnN0IFtcbiAgICAgICAgY29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgY29sdW1uU3RvcEluZGV4LFxuICAgICAgXSA9IHRoaXMuX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyKCk7XG4gICAgICBjb25zdCBbcm93U3RhcnRJbmRleCwgcm93U3RvcEluZGV4XSA9IHRoaXMuX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpO1xuXG4gICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgaWYgKGNvbHVtbkNvdW50ID4gMCAmJiByb3dDb3VudCkge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIGxldCByb3dJbmRleCA9IHJvd1N0YXJ0SW5kZXg7XG4gICAgICAgICAgcm93SW5kZXggPD0gcm93U3RvcEluZGV4O1xuICAgICAgICAgIHJvd0luZGV4KytcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIGxldCBjb2x1bW5JbmRleCA9IGNvbHVtblN0YXJ0SW5kZXg7XG4gICAgICAgICAgICBjb2x1bW5JbmRleCA8PSBjb2x1bW5TdG9wSW5kZXg7XG4gICAgICAgICAgICBjb2x1bW5JbmRleCsrXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAga2V5OiBpdGVtS2V5KHsgY29sdW1uSW5kZXgsIGRhdGE6IGl0ZW1EYXRhLCByb3dJbmRleCB9KSxcbiAgICAgICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgICAgICBzdHlsZTogdGhpcy5fZ2V0SXRlbVN0eWxlKHJvd0luZGV4LCBjb2x1bW5JbmRleCksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWFkIHRoaXMgdmFsdWUgQUZURVIgaXRlbXMgaGF2ZSBiZWVuIGNyZWF0ZWQsXG4gICAgICAvLyBTbyB0aGVpciBhY3R1YWwgc2l6ZXMgKGlmIHZhcmlhYmxlKSBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxIZWlnaHQgPSBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsV2lkdGggPSBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSB8fCBvdXRlclRhZ05hbWUgfHwgJ2RpdicsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgb25TY3JvbGw6IHRoaXMuX29uU2Nyb2xsLFxuICAgICAgICAgIHJlZjogdGhpcy5fb3V0ZXJSZWZTZXR0ZXIsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCcsXG4gICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtJyxcbiAgICAgICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoaW5uZXJFbGVtZW50VHlwZSB8fCBpbm5lclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgICBjaGlsZHJlbjogaXRlbXMsXG4gICAgICAgICAgcmVmOiBpbm5lclJlZixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgaGVpZ2h0OiBlc3RpbWF0ZWRUb3RhbEhlaWdodCxcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IGlzU2Nyb2xsaW5nID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgd2lkdGg6IGVzdGltYXRlZFRvdGFsV2lkdGgsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgX2NhbGxPbkl0ZW1zUmVuZGVyZWQ6IChcbiAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleDogbnVtYmVyXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShcbiAgICAgIChcbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVSb3dTdG9wSW5kZXg6IG51bWJlclxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkOiBhbnkpOiBPbkl0ZW1zUmVuZGVyZWRDYWxsYmFjaykoe1xuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4LFxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBfY2FsbE9uU2Nyb2xsOiAoXG4gICAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW5cbiAgICApID0+IHZvaWQ7XG4gICAgX2NhbGxPblNjcm9sbCA9IG1lbW9pemVPbmUoXG4gICAgICAoXG4gICAgICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICAgICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuXG4gICAgICApID0+XG4gICAgICAgICgodGhpcy5wcm9wcy5vblNjcm9sbDogYW55KTogT25TY3JvbGxDYWxsYmFjaykoe1xuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkLFxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBfY2FsbFByb3BzQ2FsbGJhY2tzKCkge1xuICAgICAgY29uc3QgeyBjb2x1bW5Db3VudCwgb25JdGVtc1JlbmRlcmVkLCBvblNjcm9sbCwgcm93Q291bnQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGlmICh0eXBlb2Ygb25JdGVtc1JlbmRlcmVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChjb2x1bW5Db3VudCA+IDAgJiYgcm93Q291bnQgPiAwKSB7XG4gICAgICAgICAgY29uc3QgW1xuICAgICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgXSA9IHRoaXMuX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyKCk7XG4gICAgICAgICAgY29uc3QgW1xuICAgICAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVSb3dTdG9wSW5kZXgsXG4gICAgICAgICAgXSA9IHRoaXMuX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpO1xuICAgICAgICAgIHRoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQoXG4gICAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9uU2Nyb2xsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIHRoaXMuX2NhbGxPblNjcm9sbChcbiAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExhemlseSBjcmVhdGUgYW5kIGNhY2hlIGl0ZW0gc3R5bGVzIHdoaWxlIHNjcm9sbGluZyxcbiAgICAvLyBTbyB0aGF0IHB1cmUgY29tcG9uZW50IHNDVSB3aWxsIHByZXZlbnQgcmUtcmVuZGVycy5cbiAgICAvLyBXZSBtYWludGFpbiB0aGlzIGNhY2hlLCBhbmQgcGFzcyBhIHN0eWxlIHByb3AgcmF0aGVyIHRoYW4gaW5kZXgsXG4gICAgLy8gU28gdGhhdCBMaXN0IGNhbiBjbGVhciBjYWNoZWQgc3R5bGVzIGFuZCBmb3JjZSBpdGVtIHJlLXJlbmRlciBpZiBuZWNlc3NhcnkuXG4gICAgX2dldEl0ZW1TdHlsZTogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpID0+IE9iamVjdDtcbiAgICBfZ2V0SXRlbVN0eWxlID0gKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpOiBPYmplY3QgPT4ge1xuICAgICAgY29uc3QgeyBjb2x1bW5XaWR0aCwgZGlyZWN0aW9uLCByb3dIZWlnaHQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IGl0ZW1TdHlsZUNhY2hlID0gdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoXG4gICAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgY29sdW1uV2lkdGgsXG4gICAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgZGlyZWN0aW9uLFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIHJvd0hlaWdodFxuICAgICAgKTtcblxuICAgICAgY29uc3Qga2V5ID0gYCR7cm93SW5kZXh9OiR7Y29sdW1uSW5kZXh9YDtcblxuICAgICAgbGV0IHN0eWxlO1xuICAgICAgaWYgKGl0ZW1TdHlsZUNhY2hlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0Q29sdW1uT2Zmc2V0KFxuICAgICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICAgIGl0ZW1TdHlsZUNhY2hlW2tleV0gPSBzdHlsZSA9IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IG9mZnNldCxcbiAgICAgICAgICByaWdodDogaXNSdGwgPyBvZmZzZXQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdG9wOiBnZXRSb3dPZmZzZXQodGhpcy5wcm9wcywgcm93SW5kZXgsIHRoaXMuX2luc3RhbmNlUHJvcHMpLFxuICAgICAgICAgIGhlaWdodDogZ2V0Um93SGVpZ2h0KHRoaXMucHJvcHMsIHJvd0luZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICB3aWR0aDogZ2V0Q29sdW1uV2lkdGgodGhpcy5wcm9wcywgY29sdW1uSW5kZXgsIHRoaXMuX2luc3RhbmNlUHJvcHMpLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfTtcblxuICAgIF9nZXRJdGVtU3R5bGVDYWNoZTogKF86IGFueSwgX186IGFueSwgX19fOiBhbnkpID0+IEl0ZW1TdHlsZUNhY2hlO1xuICAgIF9nZXRJdGVtU3R5bGVDYWNoZSA9IG1lbW9pemVPbmUoKF86IGFueSwgX186IGFueSwgX19fOiBhbnkpID0+ICh7fSkpO1xuXG4gICAgX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyKCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgIG92ZXJzY2FuQ29sdW1uQ291bnQsXG4gICAgICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50LFxuICAgICAgICBvdmVyc2NhbkNvdW50LFxuICAgICAgICByb3dDb3VudCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLCBpc1Njcm9sbGluZywgc2Nyb2xsTGVmdCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgY29uc3Qgb3ZlcnNjYW5Db3VudFJlc29sdmVkOiBudW1iZXIgPVxuICAgICAgICBvdmVyc2NhbkNvbHVtbkNvdW50IHx8IG92ZXJzY2FuQ29sdW1uc0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RvcEluZGV4ID0gZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcblxuICAgICAgLy8gT3ZlcnNjYW4gYnkgb25lIGl0ZW0gaW4gZWFjaCBkaXJlY3Rpb24gc28gdGhhdCB0YWIvZm9jdXMgd29ya3MuXG4gICAgICAvLyBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZXh0cmEgaXRlbSwgdGFiIGxvb3BzIGJhY2sgYXJvdW5kLlxuICAgICAgY29uc3Qgb3ZlcnNjYW5CYWNrd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpXG4gICAgICAgICAgOiAxO1xuICAgICAgY29uc3Qgb3ZlcnNjYW5Gb3J3YXJkID1cbiAgICAgICAgIWlzU2Nyb2xsaW5nIHx8IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKVxuICAgICAgICAgIDogMTtcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLFxuICAgICAgICBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5Db3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzdG9wSW5kZXgsXG4gICAgICBdO1xuICAgIH1cblxuICAgIF9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb2x1bW5Db3VudCxcbiAgICAgICAgb3ZlcnNjYW5Db3VudCxcbiAgICAgICAgb3ZlcnNjYW5Sb3dDb3VudCxcbiAgICAgICAgb3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgICAgIHJvd0NvdW50LFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGlzU2Nyb2xsaW5nLCB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsVG9wIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBjb25zdCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQ6IG51bWJlciA9XG4gICAgICAgIG92ZXJzY2FuUm93Q291bnQgfHwgb3ZlcnNjYW5Sb3dzQ291bnQgfHwgb3ZlcnNjYW5Db3VudCB8fCAxO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPT09IDAgfHwgcm93Q291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0b3BJbmRleCA9IGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcblxuICAgICAgLy8gT3ZlcnNjYW4gYnkgb25lIGl0ZW0gaW4gZWFjaCBkaXJlY3Rpb24gc28gdGhhdCB0YWIvZm9jdXMgd29ya3MuXG4gICAgICAvLyBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZXh0cmEgaXRlbSwgdGFiIGxvb3BzIGJhY2sgYXJvdW5kLlxuICAgICAgY29uc3Qgb3ZlcnNjYW5CYWNrd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKVxuICAgICAgICAgIDogMTtcbiAgICAgIGNvbnN0IG92ZXJzY2FuRm9yd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpXG4gICAgICAgICAgOiAxO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICBNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksXG4gICAgICAgIE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHN0b3BJbmRleCxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgX29uU2Nyb2xsID0gKGV2ZW50OiBTY3JvbGxFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjbGllbnRIZWlnaHQsXG4gICAgICAgIGNsaWVudFdpZHRoLFxuICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgICAgc2Nyb2xsV2lkdGgsXG4gICAgICB9ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxMZWZ0ID09PSBzY3JvbGxMZWZ0ICYmXG4gICAgICAgICAgcHJldlN0YXRlLnNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRpcmVjdGlvbiB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAvLyBJdCdzIGFsc28gZWFzaWVyIGZvciB0aGlzIGNvbXBvbmVudCBpZiB3ZSBjb252ZXJ0IG9mZnNldHMgdG8gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZXkgd291bGQgYmUgaW4gZm9yIGx0ci5cbiAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG4gICAgICAgIGxldCBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1kZXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG4gICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihjYWxjdWxhdGVkU2Nyb2xsTGVmdCwgc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2FsY3VsYXRlZFNjcm9sbFRvcCA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbExlZnQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxMZWZ0OiBjYWxjdWxhdGVkU2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3A6IGNhbGN1bGF0ZWRTY3JvbGxUb3AsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsVG9wIDwgc2Nyb2xsVG9wID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9vdXRlclJlZlNldHRlciA9IChyZWY6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgeyBvdXRlclJlZiB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgdGhpcy5fb3V0ZXJSZWYgPSAoKHJlZjogYW55KTogSFRNTERpdkVsZW1lbnQpO1xuXG4gICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG91dGVyUmVmKHJlZik7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBvdXRlclJlZiAhPSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKVxuICAgICAgKSB7XG4gICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IHJlcXVlc3RUaW1lb3V0KFxuICAgICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nLFxuICAgICAgICBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF9yZXNldElzU2Nyb2xsaW5nID0gKCkgPT4ge1xuICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpc1Njcm9sbGluZzogZmFsc2UgfSwgKCkgPT4ge1xuICAgICAgICAvLyBDbGVhciBzdHlsZSBjYWNoZSBhZnRlciBzdGF0ZSB1cGRhdGUgaGFzIGJlZW4gY29tbWl0dGVkLlxuICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgIHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG59XG5cbmNvbnN0IHZhbGlkYXRlU2hhcmVkUHJvcHMgPSAoXG4gIHtcbiAgICBjaGlsZHJlbixcbiAgICBkaXJlY3Rpb24sXG4gICAgaGVpZ2h0LFxuICAgIGlubmVyVGFnTmFtZSxcbiAgICBvdXRlclRhZ05hbWUsXG4gICAgb3ZlcnNjYW5Db2x1bW5zQ291bnQsXG4gICAgb3ZlcnNjYW5Db3VudCxcbiAgICBvdmVyc2NhblJvd3NDb3VudCxcbiAgICB3aWR0aCxcbiAgfTogUHJvcHM8YW55PixcbiAgeyBpbnN0YW5jZSB9OiBTdGF0ZVxuKTogdm9pZCA9PiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBvdmVyc2NhbkNvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCAmJiAhZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50LmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50LmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIG92ZXJzY2FuQ291bnQgcHJvcCBoYXMgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBvdmVyc2NhbkNvbHVtbnNDb3VudCA9PT0gJ251bWJlcicgfHxcbiAgICAgIHR5cGVvZiBvdmVyc2NhblJvd3NDb3VudCA9PT0gJ251bWJlcidcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgJiZcbiAgICAgICAgIWRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50LmhhcyhpbnN0YW5jZSlcbiAgICAgICkge1xuICAgICAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudC5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBvdmVyc2NhbkNvbHVtbnNDb3VudCBhbmQgb3ZlcnNjYW5Sb3dzQ291bnQgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICcgK1xuICAgICAgICAgICAgJ1BsZWFzZSB1c2UgdGhlIG92ZXJzY2FuQ29sdW1uQ291bnQgYW5kIG92ZXJzY2FuUm93Q291bnQgcHJvcHMgaW5zdGVhZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlubmVyVGFnTmFtZSAhPSBudWxsIHx8IG91dGVyVGFnTmFtZSAhPSBudWxsKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NUYWdOYW1lICYmICFkZXZXYXJuaW5nc1RhZ05hbWUuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc1RhZ05hbWUuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgaW5uZXJUYWdOYW1lIGFuZCBvdXRlclRhZ05hbWUgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICcgK1xuICAgICAgICAgICAgJ1BsZWFzZSB1c2UgdGhlIGlubmVyRWxlbWVudFR5cGUgYW5kIG91dGVyRWxlbWVudFR5cGUgcHJvcHMgaW5zdGVhZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQW4gaW52YWxpZCBcImNoaWxkcmVuXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBSZWFjdCBjb21wb25lbnQuICcgK1xuICAgICAgICAgIGBcIiR7Y2hpbGRyZW4gPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY2hpbGRyZW59XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdsdHInOlxuICAgICAgY2FzZSAncnRsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJkaXJlY3Rpb25cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIG9yIFwicnRsXCIuICcgK1xuICAgICAgICAgICAgYFwiJHtkaXJlY3Rpb259XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdHcmlkcyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIHdpZHRoLiAnICtcbiAgICAgICAgICBgXCIke3dpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHdpZHRofVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQW4gaW52YWxpZCBcImhlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnR3JpZHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciBoZWlnaHQuICcgK1xuICAgICAgICAgIGBcIiR7aGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGhlaWdodH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG59O1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBjcmVhdGVHcmlkQ29tcG9uZW50IGZyb20gJy4vY3JlYXRlR3JpZENvbXBvbmVudCc7XG5cbmltcG9ydCB0eXBlIHsgUHJvcHMsIFNjcm9sbFRvQWxpZ24gfSBmcm9tICcuL2NyZWF0ZUdyaWRDb21wb25lbnQnO1xuXG5jb25zdCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUgPSA1MDtcblxudHlwZSBWYXJpYWJsZVNpemVQcm9wcyA9IHt8XG4gIGVzdGltYXRlZENvbHVtbldpZHRoOiBudW1iZXIsXG4gIGVzdGltYXRlZFJvd0hlaWdodDogbnVtYmVyLFxuICAuLi5Qcm9wczxhbnk+LFxufH07XG5cbnR5cGUgaXRlbVNpemVHZXR0ZXIgPSAoaW5kZXg6IG51bWJlcikgPT4gbnVtYmVyO1xudHlwZSBJdGVtVHlwZSA9ICdjb2x1bW4nIHwgJ3Jvdyc7XG5cbnR5cGUgSXRlbU1ldGFkYXRhID0ge3xcbiAgb2Zmc2V0OiBudW1iZXIsXG4gIHNpemU6IG51bWJlcixcbnx9O1xudHlwZSBJdGVtTWV0YWRhdGFNYXAgPSB7IFtpbmRleDogbnVtYmVyXTogSXRlbU1ldGFkYXRhIH07XG50eXBlIEluc3RhbmNlUHJvcHMgPSB7fFxuICBjb2x1bW5NZXRhZGF0YU1hcDogSXRlbU1ldGFkYXRhTWFwLFxuICBlc3RpbWF0ZWRDb2x1bW5XaWR0aDogbnVtYmVyLFxuICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IG51bWJlcixcbiAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg6IG51bWJlcixcbiAgbGFzdE1lYXN1cmVkUm93SW5kZXg6IG51bWJlcixcbiAgcm93TWV0YWRhdGFNYXA6IEl0ZW1NZXRhZGF0YU1hcCxcbnx9O1xuXG5jb25zdCBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCA9IChcbiAgeyByb3dDb3VudCB9OiBQcm9wczxhbnk+LFxuICB7IHJvd01ldGFkYXRhTWFwLCBlc3RpbWF0ZWRSb3dIZWlnaHQsIGxhc3RNZWFzdXJlZFJvd0luZGV4IH06IEluc3RhbmNlUHJvcHNcbikgPT4ge1xuICBsZXQgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwO1xuXG4gIC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSByb3dDb3VudCkge1xuICAgIGxhc3RNZWFzdXJlZFJvd0luZGV4ID0gcm93Q291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZFJvd0luZGV4ID49IDApIHtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSByb3dNZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRSb3dJbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICBjb25zdCBudW1Vbm1lYXN1cmVkSXRlbXMgPSByb3dDb3VudCAtIGxhc3RNZWFzdXJlZFJvd0luZGV4IC0gMTtcbiAgY29uc3QgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRSb3dIZWlnaHQ7XG5cbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG5jb25zdCBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoID0gKFxuICB7IGNvbHVtbkNvdW50IH06IFByb3BzPGFueT4sXG4gIHtcbiAgICBjb2x1bW5NZXRhZGF0YU1hcCxcbiAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCxcbiAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCxcbiAgfTogSW5zdGFuY2VQcm9wc1xuKSA9PiB7XG4gIGxldCB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IDA7XG5cbiAgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcbiAgaWYgKGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID49IGNvbHVtbkNvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBjb2x1bW5Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPj0gMCkge1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGNvbHVtbk1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZENvbHVtbkluZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIGNvbnN0IG51bVVubWVhc3VyZWRJdGVtcyA9IGNvbHVtbkNvdW50IC0gbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggLSAxO1xuICBjb25zdCB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZENvbHVtbldpZHRoO1xuXG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxuY29uc3QgZ2V0SXRlbU1ldGFkYXRhID0gKFxuICBpdGVtVHlwZTogSXRlbVR5cGUsXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4pOiBJdGVtTWV0YWRhdGEgPT4ge1xuICBsZXQgaXRlbU1ldGFkYXRhTWFwLCBpdGVtU2l6ZSwgbGFzdE1lYXN1cmVkSW5kZXg7XG4gIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwO1xuICAgIGl0ZW1TaXplID0gKChwcm9wcy5jb2x1bW5XaWR0aDogYW55KTogaXRlbVNpemVHZXR0ZXIpO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGl0ZW1TaXplID0gKChwcm9wcy5yb3dIZWlnaHQ6IGFueSk6IGl0ZW1TaXplR2V0dGVyKTtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIH1cblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgbGV0IHNpemUgPSBpdGVtU2l6ZShpKTtcblxuICAgICAgaXRlbU1ldGFkYXRhTWFwW2ldID0ge1xuICAgICAgICBvZmZzZXQsXG4gICAgICAgIHNpemUsXG4gICAgICB9O1xuXG4gICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gaW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXggPSBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlbU1ldGFkYXRhTWFwW2luZGV4XTtcbn07XG5cbmNvbnN0IGZpbmROZWFyZXN0SXRlbSA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgb2Zmc2V0OiBudW1iZXJcbikgPT4ge1xuICBsZXQgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleDtcbiAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXA7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4O1xuICB9IGVsc2Uge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXA7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB9XG5cbiAgY29uc3QgbGFzdE1lYXN1cmVkSXRlbU9mZnNldCA9XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPiAwID8gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XS5vZmZzZXQgOiAwO1xuXG4gIGlmIChsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID49IG9mZnNldCkge1xuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgbWVhc3VyZWQgaXRlbXMgd2l0aGluIHRoaXMgcmFuZ2UganVzdCB1c2UgYSBiaW5hcnkgc2VhcmNoIGFzIGl0J3MgZmFzdGVyLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goXG4gICAgICBpdGVtVHlwZSxcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4LFxuICAgICAgMCxcbiAgICAgIG9mZnNldFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goXG4gICAgICBpdGVtVHlwZSxcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIE1hdGgubWF4KDAsIGxhc3RNZWFzdXJlZEluZGV4KSxcbiAgICAgIG9mZnNldFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgaGlnaDogbnVtYmVyLFxuICBsb3c6IG51bWJlcixcbiAgb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgIGNvbnN0IG1pZGRsZSA9IGxvdyArIE1hdGguZmxvb3IoKGhpZ2ggLSBsb3cpIC8gMik7XG4gICAgY29uc3QgY3VycmVudE9mZnNldCA9IGdldEl0ZW1NZXRhZGF0YShcbiAgICAgIGl0ZW1UeXBlLFxuICAgICAgcHJvcHMsXG4gICAgICBtaWRkbGUsXG4gICAgICBpbnN0YW5jZVByb3BzXG4gICAgKS5vZmZzZXQ7XG5cbiAgICBpZiAoY3VycmVudE9mZnNldCA9PT0gb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbWlkZGxlO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA8IG9mZnNldCkge1xuICAgICAgbG93ID0gbWlkZGxlICsgMTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPiBvZmZzZXQpIHtcbiAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsb3cgPiAwKSB7XG4gICAgcmV0dXJuIGxvdyAtIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbmNvbnN0IGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoID0gKFxuICBpdGVtVHlwZTogSXRlbVR5cGUsXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBpbmRleDogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgY29uc3QgaXRlbUNvdW50ID0gaXRlbVR5cGUgPT09ICdjb2x1bW4nID8gcHJvcHMuY29sdW1uQ291bnQgOiBwcm9wcy5yb3dDb3VudDtcbiAgbGV0IGludGVydmFsID0gMTtcblxuICB3aGlsZSAoXG4gICAgaW5kZXggPCBpdGVtQ291bnQgJiZcbiAgICBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0IDwgb2Zmc2V0XG4gICkge1xuICAgIGluZGV4ICs9IGludGVydmFsO1xuICAgIGludGVydmFsICo9IDI7XG4gIH1cblxuICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKFxuICAgIGl0ZW1UeXBlLFxuICAgIHByb3BzLFxuICAgIGluc3RhbmNlUHJvcHMsXG4gICAgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpLFxuICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKSxcbiAgICBvZmZzZXRcbiAgKTtcbn07XG5cbmNvbnN0IGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50ID0gKFxuICBpdGVtVHlwZTogSXRlbVR5cGUsXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIHNjcm9sbGJhclNpemU6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgY29uc3Qgc2l6ZSA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLndpZHRoIDogcHJvcHMuaGVpZ2h0O1xuICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcyk7XG5cbiAgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgLy8gVG8gZW5zdXJlIGl0IHJlZmxlY3RzIGFjdHVhbCBtZWFzdXJlbWVudHMgaW5zdGVhZCBvZiBqdXN0IGVzdGltYXRlcy5cbiAgY29uc3QgZXN0aW1hdGVkVG90YWxTaXplID1cbiAgICBpdGVtVHlwZSA9PT0gJ2NvbHVtbidcbiAgICAgID8gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChwcm9wcywgaW5zdGFuY2VQcm9wcylcbiAgICAgIDogZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQocHJvcHMsIGluc3RhbmNlUHJvcHMpO1xuXG4gIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWF4KFxuICAgIDAsXG4gICAgTWF0aC5taW4oZXN0aW1hdGVkVG90YWxTaXplIC0gc2l6ZSwgaXRlbU1ldGFkYXRhLm9mZnNldClcbiAgKTtcbiAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgMCxcbiAgICBpdGVtTWV0YWRhdGEub2Zmc2V0IC0gc2l6ZSArIHNjcm9sbGJhclNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZVxuICApO1xuXG4gIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZSkge1xuICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoIChhbGlnbikge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgY2FzZSAnZW5kJzpcbiAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG4gICAgY2FzZSAnYXV0byc6XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgIC8vIEJlY2F1c2Ugd2Ugb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgc2Nyb2xsYmFyIHNpemUgd2hlbiBjYWxjdWxhdGluZyBtaW5PZmZzZXRcbiAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICB9XG4gIH1cbn07XG5cbmNvbnN0IFZhcmlhYmxlU2l6ZUdyaWQgPSBjcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBnZXRJdGVtTWV0YWRhdGEoJ2NvbHVtbicsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0LFxuXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZmluZE5lYXJlc3RJdGVtKCdjb2x1bW4nLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgc2Nyb2xsTGVmdCksXG5cbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHsgY29sdW1uQ291bnQsIHdpZHRoIH0gPSBwcm9wcztcblxuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShcbiAgICAgICdjb2x1bW4nLFxuICAgICAgcHJvcHMsXG4gICAgICBzdGFydEluZGV4LFxuICAgICAgaW5zdGFuY2VQcm9wc1xuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gc2Nyb2xsTGVmdCArIHdpZHRoO1xuXG4gICAgbGV0IG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICBsZXQgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCBjb2x1bW5Db3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEoJ2NvbHVtbicsIHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcblxuICBnZXRDb2x1bW5XaWR0aDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZSxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCxcblxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PlxuICAgIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KFxuICAgICAgJ2NvbHVtbicsXG4gICAgICBwcm9wcyxcbiAgICAgIGluZGV4LFxuICAgICAgYWxpZ24sXG4gICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICBpbnN0YW5jZVByb3BzLFxuICAgICAgc2Nyb2xsYmFyU2l6ZVxuICAgICksXG5cbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChcbiAgICAgICdyb3cnLFxuICAgICAgcHJvcHMsXG4gICAgICBpbmRleCxcbiAgICAgIGFsaWduLFxuICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIHNjcm9sbGJhclNpemVcbiAgICApLFxuXG4gIGdldFJvd09mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCxcblxuICBnZXRSb3dIZWlnaHQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXBbaW5kZXhdLnNpemUsXG5cbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGZpbmROZWFyZXN0SXRlbSgncm93JywgcHJvcHMsIGluc3RhbmNlUHJvcHMsIHNjcm9sbFRvcCksXG5cbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgeyByb3dDb3VudCwgaGVpZ2h0IH0gPSBwcm9wcztcblxuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShcbiAgICAgICdyb3cnLFxuICAgICAgcHJvcHMsXG4gICAgICBzdGFydEluZGV4LFxuICAgICAgaW5zdGFuY2VQcm9wc1xuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gc2Nyb2xsVG9wICsgaGVpZ2h0O1xuXG4gICAgbGV0IG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICBsZXQgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCByb3dDb3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcblxuICBpbml0SW5zdGFuY2VQcm9wcyhwcm9wczogUHJvcHM8YW55PiwgaW5zdGFuY2U6IGFueSk6IEluc3RhbmNlUHJvcHMge1xuICAgIGNvbnN0IHtcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoLFxuICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0LFxuICAgIH0gPSAoKHByb3BzOiBhbnkpOiBWYXJpYWJsZVNpemVQcm9wcyk7XG5cbiAgICBjb25zdCBpbnN0YW5jZVByb3BzID0ge1xuICAgICAgY29sdW1uTWV0YWRhdGFNYXA6IHt9LFxuICAgICAgZXN0aW1hdGVkQ29sdW1uV2lkdGg6IGVzdGltYXRlZENvbHVtbldpZHRoIHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSxcbiAgICAgIGVzdGltYXRlZFJvd0hlaWdodDogZXN0aW1hdGVkUm93SGVpZ2h0IHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSxcbiAgICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4OiAtMSxcbiAgICAgIGxhc3RNZWFzdXJlZFJvd0luZGV4OiAtMSxcbiAgICAgIHJvd01ldGFkYXRhTWFwOiB7fSxcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckNvbHVtbkluZGV4ID0gKFxuICAgICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICAgIHNob3VsZEZvcmNlVXBkYXRlPzogYm9vbGVhbiA9IHRydWVcbiAgICApID0+IHtcbiAgICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzKHsgY29sdW1uSW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlIH0pO1xuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVyUm93SW5kZXggPSAoXG4gICAgICByb3dJbmRleDogbnVtYmVyLFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGU/OiBib29sZWFuID0gdHJ1ZVxuICAgICkgPT4ge1xuICAgICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMoeyByb3dJbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUgfSk7XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzID0gKHtcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgcm93SW5kZXgsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZSA9IHRydWUsXG4gICAgfToge1xuICAgICAgY29sdW1uSW5kZXg/OiBudW1iZXIsXG4gICAgICByb3dJbmRleD86IG51bWJlcixcbiAgICAgIHNob3VsZEZvcmNlVXBkYXRlOiBib29sZWFuLFxuICAgIH0pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uSW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4LFxuICAgICAgICAgIGNvbHVtbkluZGV4IC0gMVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiByb3dJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCA9IE1hdGgubWluKFxuICAgICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXgsXG4gICAgICAgICAgcm93SW5kZXggLSAxXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGZhbHNlLFxuXG4gIHZhbGlkYXRlUHJvcHM6ICh7IGNvbHVtbldpZHRoLCByb3dIZWlnaHQgfTogUHJvcHM8YW55Pik6IHZvaWQgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbldpZHRoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiY29sdW1uV2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgK1xuICAgICAgICAgICAgYFwiJHtcbiAgICAgICAgICAgICAgY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGhcbiAgICAgICAgICAgIH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJvd0hlaWdodCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcInJvd0hlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArXG4gICAgICAgICAgICBgXCIke3Jvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFZhcmlhYmxlU2l6ZUdyaWQ7XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNhbmNlbFRpbWVvdXQsIHJlcXVlc3RUaW1lb3V0IH0gZnJvbSAnLi90aW1lcic7XG5pbXBvcnQgeyBnZXRTY3JvbGxiYXJTaXplLCBnZXRSVExPZmZzZXRUeXBlIH0gZnJvbSAnLi9kb21IZWxwZXJzJztcblxuaW1wb3J0IHR5cGUgeyBUaW1lb3V0SUQgfSBmcm9tICcuL3RpbWVyJztcblxuZXhwb3J0IHR5cGUgU2Nyb2xsVG9BbGlnbiA9ICdhdXRvJyB8ICdzbWFydCcgfCAnY2VudGVyJyB8ICdzdGFydCcgfCAnZW5kJztcblxudHlwZSBpdGVtU2l6ZSA9IG51bWJlciB8ICgoaW5kZXg6IG51bWJlcikgPT4gbnVtYmVyKTtcbi8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbnMgXCJob3Jpem9udGFsXCIgYW5kIFwidmVydGljYWxcIlxudHlwZSBEaXJlY3Rpb24gPSAnbHRyJyB8ICdydGwnIHwgJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcbnR5cGUgTGF5b3V0ID0gJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcblxudHlwZSBSZW5kZXJDb21wb25lbnRQcm9wczxUPiA9IHt8XG4gIGRhdGE6IFQsXG4gIGluZGV4OiBudW1iZXIsXG4gIGlzU2Nyb2xsaW5nPzogYm9vbGVhbixcbiAgc3R5bGU6IE9iamVjdCxcbnx9O1xudHlwZSBSZW5kZXJDb21wb25lbnQ8VD4gPSBSZWFjdCRDb21wb25lbnRUeXBlPCRTaGFwZTxSZW5kZXJDb21wb25lbnRQcm9wczxUPj4+O1xuXG50eXBlIFNjcm9sbERpcmVjdGlvbiA9ICdmb3J3YXJkJyB8ICdiYWNrd2FyZCc7XG5cbnR5cGUgb25JdGVtc1JlbmRlcmVkQ2FsbGJhY2sgPSAoe1xuICBvdmVyc2NhblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgb3ZlcnNjYW5TdG9wSW5kZXg6IG51bWJlcixcbiAgdmlzaWJsZVN0YXJ0SW5kZXg6IG51bWJlcixcbiAgdmlzaWJsZVN0b3BJbmRleDogbnVtYmVyLFxufSkgPT4gdm9pZDtcbnR5cGUgb25TY3JvbGxDYWxsYmFjayA9ICh7XG4gIHNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuLFxufSkgPT4gdm9pZDtcblxudHlwZSBTY3JvbGxFdmVudCA9IFN5bnRoZXRpY0V2ZW50PEhUTUxEaXZFbGVtZW50PjtcbnR5cGUgSXRlbVN0eWxlQ2FjaGUgPSB7IFtpbmRleDogbnVtYmVyXTogT2JqZWN0IH07XG5cbnR5cGUgT3V0ZXJQcm9wcyA9IHt8XG4gIGNoaWxkcmVuOiBSZWFjdCROb2RlLFxuICBjbGFzc05hbWU6IHN0cmluZyB8IHZvaWQsXG4gIG9uU2Nyb2xsOiBTY3JvbGxFdmVudCA9PiB2b2lkLFxuICBzdHlsZToge1xuICAgIFtzdHJpbmddOiBtaXhlZCxcbiAgfSxcbnx9O1xuXG50eXBlIElubmVyUHJvcHMgPSB7fFxuICBjaGlsZHJlbjogUmVhY3QkTm9kZSxcbiAgc3R5bGU6IHtcbiAgICBbc3RyaW5nXTogbWl4ZWQsXG4gIH0sXG58fTtcblxuZXhwb3J0IHR5cGUgUHJvcHM8VD4gPSB7fFxuICBjaGlsZHJlbjogUmVuZGVyQ29tcG9uZW50PFQ+LFxuICBjbGFzc05hbWU/OiBzdHJpbmcsXG4gIGRpcmVjdGlvbjogRGlyZWN0aW9uLFxuICBoZWlnaHQ6IG51bWJlciB8IHN0cmluZyxcbiAgaW5pdGlhbFNjcm9sbE9mZnNldD86IG51bWJlcixcbiAgaW5uZXJSZWY/OiBhbnksXG4gIGlubmVyRWxlbWVudFR5cGU/OiBzdHJpbmcgfCBSZWFjdCRBYnN0cmFjdENvbXBvbmVudDxJbm5lclByb3BzLCBhbnk+LFxuICBpbm5lclRhZ05hbWU/OiBzdHJpbmcsIC8vIGRlcHJlY2F0ZWRcbiAgaXRlbUNvdW50OiBudW1iZXIsXG4gIGl0ZW1EYXRhOiBULFxuICBpdGVtS2V5PzogKGluZGV4OiBudW1iZXIsIGRhdGE6IFQpID0+IGFueSxcbiAgaXRlbVNpemU6IGl0ZW1TaXplLFxuICBsYXlvdXQ6IExheW91dCxcbiAgb25JdGVtc1JlbmRlcmVkPzogb25JdGVtc1JlbmRlcmVkQ2FsbGJhY2ssXG4gIG9uU2Nyb2xsPzogb25TY3JvbGxDYWxsYmFjayxcbiAgb3V0ZXJSZWY/OiBhbnksXG4gIG91dGVyRWxlbWVudFR5cGU/OiBzdHJpbmcgfCBSZWFjdCRBYnN0cmFjdENvbXBvbmVudDxPdXRlclByb3BzLCBhbnk+LFxuICBvdXRlclRhZ05hbWU/OiBzdHJpbmcsIC8vIGRlcHJlY2F0ZWRcbiAgb3ZlcnNjYW5Db3VudDogbnVtYmVyLFxuICBzdHlsZT86IE9iamVjdCxcbiAgdXNlSXNTY3JvbGxpbmc6IGJvb2xlYW4sXG4gIHdpZHRoOiBudW1iZXIgfCBzdHJpbmcsXG58fTtcblxudHlwZSBTdGF0ZSA9IHt8XG4gIGluc3RhbmNlOiBhbnksXG4gIGlzU2Nyb2xsaW5nOiBib29sZWFuLFxuICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhbixcbnx9O1xuXG50eXBlIEdldEl0ZW1PZmZzZXQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRJdGVtU2l6ZSA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEdldEVzdGltYXRlZFRvdGFsU2l6ZSA9IChwcm9wczogUHJvcHM8YW55PiwgaW5zdGFuY2VQcm9wczogYW55KSA9PiBudW1iZXI7XG50eXBlIEdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRTdGFydEluZGV4Rm9yT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgb2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBzdGFydEluZGV4OiBudW1iZXIsXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBJbml0SW5zdGFuY2VQcm9wcyA9IChwcm9wczogUHJvcHM8YW55PiwgaW5zdGFuY2U6IGFueSkgPT4gYW55O1xudHlwZSBWYWxpZGF0ZVByb3BzID0gKHByb3BzOiBQcm9wczxhbnk+KSA9PiB2b2lkO1xuXG5jb25zdCBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwgPSAxNTA7XG5cbmNvbnN0IGRlZmF1bHRJdGVtS2V5ID0gKGluZGV4OiBudW1iZXIsIGRhdGE6IGFueSkgPT4gaW5kZXg7XG5cbi8vIEluIERFViBtb2RlLCB0aGlzIFNldCBoZWxwcyB1cyBvbmx5IGxvZyBhIHdhcm5pbmcgb25jZSBwZXIgY29tcG9uZW50IGluc3RhbmNlLlxuLy8gVGhpcyBhdm9pZHMgc3BhbW1pbmcgdGhlIGNvbnNvbGUgZXZlcnkgdGltZSBhIHJlbmRlciBoYXBwZW5zLlxubGV0IGRldldhcm5pbmdzRGlyZWN0aW9uID0gbnVsbDtcbmxldCBkZXZXYXJuaW5nc1RhZ05hbWUgPSBudWxsO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuV2Vha1NldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkZXZXYXJuaW5nc0RpcmVjdGlvbiA9IG5ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lID0gbmV3IFdlYWtTZXQoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldCxcbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRJdGVtU2l6ZSxcbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQsXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGluaXRJbnN0YW5jZVByb3BzLFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlLFxuICB2YWxpZGF0ZVByb3BzLFxufToge3xcbiAgZ2V0SXRlbU9mZnNldDogR2V0SXRlbU9mZnNldCxcbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplOiBHZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gIGdldEl0ZW1TaXplOiBHZXRJdGVtU2l6ZSxcbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IEdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiBHZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBpbml0SW5zdGFuY2VQcm9wczogSW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGJvb2xlYW4sXG4gIHZhbGlkYXRlUHJvcHM6IFZhbGlkYXRlUHJvcHMsXG58fSkge1xuICByZXR1cm4gY2xhc3MgTGlzdDxUPiBleHRlbmRzIFB1cmVDb21wb25lbnQ8UHJvcHM8VD4sIFN0YXRlPiB7XG4gICAgX2luc3RhbmNlUHJvcHM6IGFueSA9IGluaXRJbnN0YW5jZVByb3BzKHRoaXMucHJvcHMsIHRoaXMpO1xuICAgIF9vdXRlclJlZjogP0hUTUxEaXZFbGVtZW50O1xuICAgIF9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkOiBUaW1lb3V0SUQgfCBudWxsID0gbnVsbDtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICAgIGxheW91dDogJ3ZlcnRpY2FsJyxcbiAgICAgIG92ZXJzY2FuQ291bnQ6IDIsXG4gICAgICB1c2VJc1Njcm9sbGluZzogZmFsc2UsXG4gICAgfTtcblxuICAgIHN0YXRlOiBTdGF0ZSA9IHtcbiAgICAgIGluc3RhbmNlOiB0aGlzLFxuICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgICAgc2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICBzY3JvbGxPZmZzZXQ6XG4gICAgICAgIHR5cGVvZiB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInXG4gICAgICAgICAgPyB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxPZmZzZXRcbiAgICAgICAgICA6IDAsXG4gICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgIH07XG5cbiAgICAvLyBBbHdheXMgdXNlIGV4cGxpY2l0IGNvbnN0cnVjdG9yIGZvciBSZWFjdCBjb21wb25lbnRzLlxuICAgIC8vIEl0IHByb2R1Y2VzIGxlc3MgY29kZSBhZnRlciB0cmFuc3BpbGF0aW9uLiAoIzI2KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gICAgY29uc3RydWN0b3IocHJvcHM6IFByb3BzPFQ+KSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgIG5leHRQcm9wczogUHJvcHM8VD4sXG4gICAgICBwcmV2U3RhdGU6IFN0YXRlXG4gICAgKTogJFNoYXBlPFN0YXRlPiB8IG51bGwge1xuICAgICAgdmFsaWRhdGVTaGFyZWRQcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICB2YWxpZGF0ZVByb3BzKG5leHRQcm9wcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzY3JvbGxUbyhzY3JvbGxPZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsT2Zmc2V0KTtcblxuICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9XG5cbiAgICBzY3JvbGxUb0l0ZW0oaW5kZXg6IG51bWJlciwgYWxpZ246IFNjcm9sbFRvQWxpZ24gPSAnYXV0bycpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHsgaXRlbUNvdW50LCBsYXlvdXQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNjcm9sbE9mZnNldCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSkpO1xuXG4gICAgICAvLyBUaGUgc2Nyb2xsYmFyIHNpemUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBzY3JvbGxpbmcgYW4gaXRlbSBpbnRvIHZpZXcsIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuICAgICAgLy8gVGhpcyBpcyBhbiBlZGdlIGNhc2UgZm9yIGxpc3RzOyBub3JtYWxseSB0aGV5IG9ubHkgc2Nyb2xsIGluIHRoZSBkb21pbmFudCBkaXJlY3Rpb24uXG4gICAgICBsZXQgc2Nyb2xsYmFyU2l6ZSA9IDA7XG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChsYXlvdXQgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID1cbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFdpZHRoID4gb3V0ZXJSZWYuY2xpZW50V2lkdGhcbiAgICAgICAgICAgICAgPyBnZXRTY3JvbGxiYXJTaXplKClcbiAgICAgICAgICAgICAgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjcm9sbGJhclNpemUgPVxuICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsSGVpZ2h0ID4gb3V0ZXJSZWYuY2xpZW50SGVpZ2h0XG4gICAgICAgICAgICAgID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNjcm9sbFRvKFxuICAgICAgICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChcbiAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGFsaWduLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzLFxuICAgICAgICAgIHNjcm9sbGJhclNpemVcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBpbml0aWFsU2Nyb2xsT2Zmc2V0LCBsYXlvdXQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbE9mZnNldCA9PT0gJ251bWJlcicgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBvdXRlclJlZiA9ICgodGhpcy5fb3V0ZXJSZWY6IGFueSk6IEhUTUxFbGVtZW50KTtcbiAgICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IGluaXRpYWxTY3JvbGxPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgY29uc3QgeyBkaXJlY3Rpb24sIGxheW91dCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgc2Nyb2xsT2Zmc2V0LCBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGlmIChzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBvdXRlclJlZiA9ICgodGhpcy5fb3V0ZXJSZWY6IGFueSk6IEhUTUxFbGVtZW50KTtcblxuICAgICAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgICAgLy8gU28gd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBtaW1pYyBpdC5cbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gLXNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtYXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50V2lkdGgsIHNjcm9sbFdpZHRoIH0gPSBvdXRlclJlZjtcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBpbm5lclJlZixcbiAgICAgICAgaW5uZXJFbGVtZW50VHlwZSxcbiAgICAgICAgaW5uZXJUYWdOYW1lLFxuICAgICAgICBpdGVtQ291bnQsXG4gICAgICAgIGl0ZW1EYXRhLFxuICAgICAgICBpdGVtS2V5ID0gZGVmYXVsdEl0ZW1LZXksXG4gICAgICAgIGxheW91dCxcbiAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSxcbiAgICAgICAgb3V0ZXJUYWdOYW1lLFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgdXNlSXNTY3JvbGxpbmcsXG4gICAgICAgIHdpZHRoLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGlzU2Nyb2xsaW5nIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9XG4gICAgICAgIGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgICBjb25zdCBvblNjcm9sbCA9IGlzSG9yaXpvbnRhbFxuICAgICAgICA/IHRoaXMuX29uU2Nyb2xsSG9yaXpvbnRhbFxuICAgICAgICA6IHRoaXMuX29uU2Nyb2xsVmVydGljYWw7XG5cbiAgICAgIGNvbnN0IFtzdGFydEluZGV4LCBzdG9wSW5kZXhdID0gdGhpcy5fZ2V0UmFuZ2VUb1JlbmRlcigpO1xuXG4gICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgaWYgKGl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSBzdGFydEluZGV4OyBpbmRleCA8PSBzdG9wSW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAga2V5OiBpdGVtS2V5KGluZGV4LCBpdGVtRGF0YSksXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICBpc1Njcm9sbGluZzogdXNlSXNTY3JvbGxpbmcgPyBpc1Njcm9sbGluZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShpbmRleCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cbiAgICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZShcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIG9uU2Nyb2xsLFxuICAgICAgICAgIHJlZjogdGhpcy5fb3V0ZXJSZWZTZXR0ZXIsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCcsXG4gICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtJyxcbiAgICAgICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoaW5uZXJFbGVtZW50VHlwZSB8fCBpbm5lclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgICBjaGlsZHJlbjogaXRlbXMsXG4gICAgICAgICAgcmVmOiBpbm5lclJlZixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgaGVpZ2h0OiBpc0hvcml6b250YWwgPyAnMTAwJScgOiBlc3RpbWF0ZWRUb3RhbFNpemUsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBpc1Njcm9sbGluZyA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHdpZHRoOiBpc0hvcml6b250YWwgPyBlc3RpbWF0ZWRUb3RhbFNpemUgOiAnMTAwJScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgX2NhbGxPbkl0ZW1zUmVuZGVyZWQ6IChcbiAgICAgIG92ZXJzY2FuU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgb3ZlcnNjYW5TdG9wSW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlU3RvcEluZGV4OiBudW1iZXJcbiAgICApID0+IHZvaWQ7XG4gICAgX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBvdmVyc2NhblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZVN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZVN0b3BJbmRleDogbnVtYmVyXG4gICAgICApID0+XG4gICAgICAgICgodGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQ6IGFueSk6IG9uSXRlbXNSZW5kZXJlZENhbGxiYWNrKSh7XG4gICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuU3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdG9wSW5kZXgsXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIF9jYWxsT25TY3JvbGw6IChcbiAgICAgIHNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW5cbiAgICApID0+IHZvaWQ7XG4gICAgX2NhbGxPblNjcm9sbCA9IG1lbW9pemVPbmUoXG4gICAgICAoXG4gICAgICAgIHNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuXG4gICAgICApID0+XG4gICAgICAgICgodGhpcy5wcm9wcy5vblNjcm9sbDogYW55KTogb25TY3JvbGxDYWxsYmFjaykoe1xuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkLFxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBfY2FsbFByb3BzQ2FsbGJhY2tzKCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCB7IGl0ZW1Db3VudCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKGl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgICBjb25zdCBbXG4gICAgICAgICAgICBvdmVyc2NhblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblN0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVN0b3BJbmRleCxcbiAgICAgICAgICBdID0gdGhpcy5fZ2V0UmFuZ2VUb1JlbmRlcigpO1xuICAgICAgICAgIHRoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQoXG4gICAgICAgICAgICBvdmVyc2NhblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblN0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVN0b3BJbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uU2Nyb2xsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIHRoaXMuX2NhbGxPblNjcm9sbChcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExhemlseSBjcmVhdGUgYW5kIGNhY2hlIGl0ZW0gc3R5bGVzIHdoaWxlIHNjcm9sbGluZyxcbiAgICAvLyBTbyB0aGF0IHB1cmUgY29tcG9uZW50IHNDVSB3aWxsIHByZXZlbnQgcmUtcmVuZGVycy5cbiAgICAvLyBXZSBtYWludGFpbiB0aGlzIGNhY2hlLCBhbmQgcGFzcyBhIHN0eWxlIHByb3AgcmF0aGVyIHRoYW4gaW5kZXgsXG4gICAgLy8gU28gdGhhdCBMaXN0IGNhbiBjbGVhciBjYWNoZWQgc3R5bGVzIGFuZCBmb3JjZSBpdGVtIHJlLXJlbmRlciBpZiBuZWNlc3NhcnkuXG4gICAgX2dldEl0ZW1TdHlsZTogKGluZGV4OiBudW1iZXIpID0+IE9iamVjdDtcbiAgICBfZ2V0SXRlbVN0eWxlID0gKGluZGV4OiBudW1iZXIpOiBPYmplY3QgPT4ge1xuICAgICAgY29uc3QgeyBkaXJlY3Rpb24sIGl0ZW1TaXplLCBsYXlvdXQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IGl0ZW1TdHlsZUNhY2hlID0gdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoXG4gICAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgaXRlbVNpemUsXG4gICAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgbGF5b3V0LFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvblxuICAgICAgKTtcblxuICAgICAgbGV0IHN0eWxlO1xuICAgICAgaWYgKGl0ZW1TdHlsZUNhY2hlLmhhc093blByb3BlcnR5KGluZGV4KSkge1xuICAgICAgICBzdHlsZSA9IGl0ZW1TdHlsZUNhY2hlW2luZGV4XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGdldEl0ZW1PZmZzZXQodGhpcy5wcm9wcywgaW5kZXgsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgICBjb25zdCBzaXplID0gZ2V0SXRlbVNpemUodGhpcy5wcm9wcywgaW5kZXgsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuXG4gICAgICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPVxuICAgICAgICAgIGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgICAgIGNvbnN0IGlzUnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICAgICAgY29uc3Qgb2Zmc2V0SG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbCA/IG9mZnNldCA6IDA7XG4gICAgICAgIGl0ZW1TdHlsZUNhY2hlW2luZGV4XSA9IHN0eWxlID0ge1xuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgIGxlZnQ6IGlzUnRsID8gdW5kZWZpbmVkIDogb2Zmc2V0SG9yaXpvbnRhbCxcbiAgICAgICAgICByaWdodDogaXNSdGwgPyBvZmZzZXRIb3Jpem9udGFsIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHRvcDogIWlzSG9yaXpvbnRhbCA/IG9mZnNldCA6IDAsXG4gICAgICAgICAgaGVpZ2h0OiAhaXNIb3Jpem9udGFsID8gc2l6ZSA6ICcxMDAlJyxcbiAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gc2l6ZSA6ICcxMDAlJyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH07XG5cbiAgICBfZ2V0SXRlbVN0eWxlQ2FjaGU6IChfOiBhbnksIF9fOiBhbnksIF9fXzogYW55KSA9PiBJdGVtU3R5bGVDYWNoZTtcbiAgICBfZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKChfOiBhbnksIF9fOiBhbnksIF9fXzogYW55KSA9PiAoe30pKTtcblxuICAgIF9nZXRSYW5nZVRvUmVuZGVyKCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgIGNvbnN0IHsgaXRlbUNvdW50LCBvdmVyc2NhbkNvdW50IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZywgc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxPZmZzZXQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGlmIChpdGVtQ291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0b3BJbmRleCA9IGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcblxuICAgICAgLy8gT3ZlcnNjYW4gYnkgb25lIGl0ZW0gaW4gZWFjaCBkaXJlY3Rpb24gc28gdGhhdCB0YWIvZm9jdXMgd29ya3MuXG4gICAgICAvLyBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZXh0cmEgaXRlbSwgdGFiIGxvb3BzIGJhY2sgYXJvdW5kLlxuICAgICAgY29uc3Qgb3ZlcnNjYW5CYWNrd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnQpXG4gICAgICAgICAgOiAxO1xuICAgICAgY29uc3Qgb3ZlcnNjYW5Gb3J3YXJkID1cbiAgICAgICAgIWlzU2Nyb2xsaW5nIHx8IHNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KVxuICAgICAgICAgIDogMTtcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLFxuICAgICAgICBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc3RvcEluZGV4LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBfb25TY3JvbGxIb3Jpem9udGFsID0gKGV2ZW50OiBTY3JvbGxFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgeyBjbGllbnRXaWR0aCwgc2Nyb2xsTGVmdCwgc2Nyb2xsV2lkdGggfSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgZGlyZWN0aW9uIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGxldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAvLyBJdCdzIGFsc28gZWFzaWVyIGZvciB0aGlzIGNvbXBvbmVudCBpZiB3ZSBjb252ZXJ0IG9mZnNldHMgdG8gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZXkgd291bGQgYmUgaW4gZm9yIGx0ci5cbiAgICAgICAgICAvLyBTbyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgY29udmVydCBiYXNlZCBvbiBpdC5cbiAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1kZXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuICAgICAgICBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKHNjcm9sbE9mZnNldCwgc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9vblNjcm9sbFZlcnRpY2FsID0gKGV2ZW50OiBTY3JvbGxFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgeyBjbGllbnRIZWlnaHQsIHNjcm9sbEhlaWdodCwgc2Nyb2xsVG9wIH0gPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuICAgICAgICBjb25zdCBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX291dGVyUmVmU2V0dGVyID0gKHJlZjogYW55KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7IG91dGVyUmVmIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICB0aGlzLl9vdXRlclJlZiA9ICgocmVmOiBhbnkpOiBIVE1MRGl2RWxlbWVudCk7XG5cbiAgICAgIGlmICh0eXBlb2Ygb3V0ZXJSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3V0ZXJSZWYocmVmKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIG91dGVyUmVmICE9IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIG91dGVyUmVmID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBvdXRlclJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpXG4gICAgICApIHtcbiAgICAgICAgb3V0ZXJSZWYuY3VycmVudCA9IHJlZjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gcmVxdWVzdFRpbWVvdXQoXG4gICAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmcsXG4gICAgICAgIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgX3Jlc2V0SXNTY3JvbGxpbmcgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlzU2Nyb2xsaW5nOiBmYWxzZSB9LCAoKSA9PiB7XG4gICAgICAgIC8vIENsZWFyIHN0eWxlIGNhY2hlIGFmdGVyIHN0YXRlIHVwZGF0ZSBoYXMgYmVlbiBjb21taXR0ZWQuXG4gICAgICAgIC8vIFRoaXMgd2F5IHdlIGRvbid0IGJyZWFrIHB1cmUgc0NVIGZvciBpdGVtcyB0aGF0IGRvbid0IHVzZSBpc1Njcm9sbGluZyBwYXJhbS5cbiAgICAgICAgdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEsIG51bGwpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn1cblxuLy8gTk9URTogSSBjb25zaWRlcmVkIGZ1cnRoZXIgd3JhcHBpbmcgaW5kaXZpZHVhbCBpdGVtcyB3aXRoIGEgcHVyZSBMaXN0SXRlbSBjb21wb25lbnQuXG4vLyBUaGlzIHdvdWxkIGF2b2lkIGV2ZXIgY2FsbGluZyB0aGUgcmVuZGVyIGZ1bmN0aW9uIGZvciB0aGUgc2FtZSBpbmRleCBtb3JlIHRoYW4gb25jZSxcbi8vIEJ1dCBpdCB3b3VsZCBhbHNvIGFkZCB0aGUgb3ZlcmhlYWQgb2YgYSBsb3Qgb2YgY29tcG9uZW50cy9maWJlcnMuXG4vLyBJIGFzc3VtZSBwZW9wbGUgYWxyZWFkeSBkbyB0aGlzIChyZW5kZXIgZnVuY3Rpb24gcmV0dXJuaW5nIGEgY2xhc3MgY29tcG9uZW50KSxcbi8vIFNvIG15IGRvaW5nIGl0IHdvdWxkIGp1c3QgdW5uZWNlc3NhcmlseSBkb3VibGUgdGhlIHdyYXBwZXJzLlxuXG5jb25zdCB2YWxpZGF0ZVNoYXJlZFByb3BzID0gKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgZGlyZWN0aW9uLFxuICAgIGhlaWdodCxcbiAgICBsYXlvdXQsXG4gICAgaW5uZXJUYWdOYW1lLFxuICAgIG91dGVyVGFnTmFtZSxcbiAgICB3aWR0aCxcbiAgfTogUHJvcHM8YW55PixcbiAgeyBpbnN0YW5jZSB9OiBTdGF0ZVxuKTogdm9pZCA9PiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGlubmVyVGFnTmFtZSAhPSBudWxsIHx8IG91dGVyVGFnTmFtZSAhPSBudWxsKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NUYWdOYW1lICYmICFkZXZXYXJuaW5nc1RhZ05hbWUuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc1RhZ05hbWUuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgaW5uZXJUYWdOYW1lIGFuZCBvdXRlclRhZ05hbWUgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICcgK1xuICAgICAgICAgICAgJ1BsZWFzZSB1c2UgdGhlIGlubmVyRWxlbWVudFR5cGUgYW5kIG91dGVyRWxlbWVudFR5cGUgcHJvcHMgaW5zdGVhZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIGlmIChkZXZXYXJuaW5nc0RpcmVjdGlvbiAmJiAhZGV2V2FybmluZ3NEaXJlY3Rpb24uaGFzKGluc3RhbmNlKSkge1xuICAgICAgICAgIGRldldhcm5pbmdzRGlyZWN0aW9uLmFkZChpbnN0YW5jZSk7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgJ1RoZSBkaXJlY3Rpb24gcHJvcCBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgKGRlZmF1bHQpIG9yIFwicnRsXCIuICcgK1xuICAgICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgbGF5b3V0IHByb3AgdG8gc3BlY2lmeSBcInZlcnRpY2FsXCIgKGRlZmF1bHQpIG9yIFwiaG9yaXpvbnRhbFwiIG9yaWVudGF0aW9uLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiBvciBcInJ0bFwiLiAnICtcbiAgICAgICAgICAgIGBcIiR7ZGlyZWN0aW9ufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHN3aXRjaCAobGF5b3V0KSB7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJsYXlvdXRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImhvcml6b250YWxcIiBvciBcInZlcnRpY2FsXCIuICcgK1xuICAgICAgICAgICAgYFwiJHtsYXlvdXR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQW4gaW52YWxpZCBcImNoaWxkcmVuXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBSZWFjdCBjb21wb25lbnQuICcgK1xuICAgICAgICAgIGBcIiR7Y2hpbGRyZW4gPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY2hpbGRyZW59XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpc0hvcml6b250YWwgJiYgdHlwZW9mIHdpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwid2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ0hvcml6b250YWwgbGlzdHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArXG4gICAgICAgICAgYFwiJHt3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghaXNIb3Jpem9udGFsICYmIHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ1ZlcnRpY2FsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICtcbiAgICAgICAgICBgXCIke2hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH1cbiAgfVxufTtcbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgY3JlYXRlTGlzdENvbXBvbmVudCBmcm9tICcuL2NyZWF0ZUxpc3RDb21wb25lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFByb3BzLCBTY3JvbGxUb0FsaWduIH0gZnJvbSAnLi9jcmVhdGVMaXN0Q29tcG9uZW50JztcblxuY29uc3QgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFID0gNTA7XG5cbnR5cGUgVmFyaWFibGVTaXplUHJvcHMgPSB7fFxuICBlc3RpbWF0ZWRJdGVtU2l6ZTogbnVtYmVyLFxuICAuLi5Qcm9wczxhbnk+LFxufH07XG5cbnR5cGUgaXRlbVNpemVHZXR0ZXIgPSAoaW5kZXg6IG51bWJlcikgPT4gbnVtYmVyO1xuXG50eXBlIEl0ZW1NZXRhZGF0YSA9IHt8XG4gIG9mZnNldDogbnVtYmVyLFxuICBzaXplOiBudW1iZXIsXG58fTtcbnR5cGUgSW5zdGFuY2VQcm9wcyA9IHt8XG4gIGl0ZW1NZXRhZGF0YU1hcDogeyBbaW5kZXg6IG51bWJlcl06IEl0ZW1NZXRhZGF0YSB9LFxuICBlc3RpbWF0ZWRJdGVtU2l6ZTogbnVtYmVyLFxuICBsYXN0TWVhc3VyZWRJbmRleDogbnVtYmVyLFxufH07XG5cbmNvbnN0IGdldEl0ZW1NZXRhZGF0YSA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbik6IEl0ZW1NZXRhZGF0YSA9PiB7XG4gIGNvbnN0IHsgaXRlbVNpemUgfSA9ICgocHJvcHM6IGFueSk6IFZhcmlhYmxlU2l6ZVByb3BzKTtcbiAgY29uc3QgeyBpdGVtTWV0YWRhdGFNYXAsIGxhc3RNZWFzdXJlZEluZGV4IH0gPSBpbnN0YW5jZVByb3BzO1xuXG4gIGlmIChpbmRleCA+IGxhc3RNZWFzdXJlZEluZGV4KSB7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgICBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IGxhc3RNZWFzdXJlZEluZGV4ICsgMTsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICBsZXQgc2l6ZSA9ICgoaXRlbVNpemU6IGFueSk6IGl0ZW1TaXplR2V0dGVyKShpKTtcblxuICAgICAgaXRlbU1ldGFkYXRhTWFwW2ldID0ge1xuICAgICAgICBvZmZzZXQsXG4gICAgICAgIHNpemUsXG4gICAgICB9O1xuXG4gICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4ID0gaW5kZXg7XG4gIH1cblxuICByZXR1cm4gaXRlbU1ldGFkYXRhTWFwW2luZGV4XTtcbn07XG5cbmNvbnN0IGZpbmROZWFyZXN0SXRlbSA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIG9mZnNldDogbnVtYmVyXG4pID0+IHtcbiAgY29uc3QgeyBpdGVtTWV0YWRhdGFNYXAsIGxhc3RNZWFzdXJlZEluZGV4IH0gPSBpbnN0YW5jZVByb3BzO1xuXG4gIGNvbnN0IGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPVxuICAgIGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKFxuICAgICAgcHJvcHMsXG4gICAgICBpbnN0YW5jZVByb3BzLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXgsXG4gICAgICAwLFxuICAgICAgb2Zmc2V0XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB3ZSBoYXZlbid0IHlldCBtZWFzdXJlZCB0aGlzIGhpZ2gsIGZhbGxiYWNrIHRvIGFuIGV4cG9uZW50aWFsIHNlYXJjaCB3aXRoIGFuIGlubmVyIGJpbmFyeSBzZWFyY2guXG4gICAgLy8gVGhlIGV4cG9uZW50aWFsIHNlYXJjaCBhdm9pZHMgcHJlLWNvbXB1dGluZyBzaXplcyBmb3IgdGhlIGZ1bGwgc2V0IG9mIGl0ZW1zIGFzIGEgYmluYXJ5IHNlYXJjaCB3b3VsZC5cbiAgICAvLyBUaGUgb3ZlcmFsbCBjb21wbGV4aXR5IGZvciB0aGlzIGFwcHJvYWNoIGlzIE8obG9nIG4pLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIE1hdGgubWF4KDAsIGxhc3RNZWFzdXJlZEluZGV4KSxcbiAgICAgIG9mZnNldFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIGhpZ2g6IG51bWJlcixcbiAgbG93OiBudW1iZXIsXG4gIG9mZnNldDogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBsb3cgKyBNYXRoLmZsb29yKChoaWdoIC0gbG93KSAvIDIpO1xuICAgIGNvbnN0IGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIG1pZGRsZSwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIGluZGV4OiBudW1iZXIsXG4gIG9mZnNldDogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICBjb25zdCB7IGl0ZW1Db3VudCB9ID0gcHJvcHM7XG4gIGxldCBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKFxuICAgIGluZGV4IDwgaXRlbUNvdW50ICYmXG4gICAgZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0IDwgb2Zmc2V0XG4gICkge1xuICAgIGluZGV4ICs9IGludGVydmFsO1xuICAgIGludGVydmFsICo9IDI7XG4gIH1cblxuICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKFxuICAgIHByb3BzLFxuICAgIGluc3RhbmNlUHJvcHMsXG4gICAgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpLFxuICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKSxcbiAgICBvZmZzZXRcbiAgKTtcbn07XG5cbmNvbnN0IGdldEVzdGltYXRlZFRvdGFsU2l6ZSA9IChcbiAgeyBpdGVtQ291bnQgfTogUHJvcHM8YW55PixcbiAgeyBpdGVtTWV0YWRhdGFNYXAsIGVzdGltYXRlZEl0ZW1TaXplLCBsYXN0TWVhc3VyZWRJbmRleCB9OiBJbnN0YW5jZVByb3BzXG4pID0+IHtcbiAgbGV0IHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyA9IDA7XG5cbiAgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcbiAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IGl0ZW1Db3VudCkge1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaXRlbUNvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICBjb25zdCBudW1Vbm1lYXN1cmVkSXRlbXMgPSBpdGVtQ291bnQgLSBsYXN0TWVhc3VyZWRJbmRleCAtIDE7XG4gIGNvbnN0IHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkSXRlbVNpemU7XG5cbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxuY29uc3QgVmFyaWFibGVTaXplTGlzdCA9IGNyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQsXG5cbiAgZ2V0SXRlbVNpemU6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGluc3RhbmNlUHJvcHMuaXRlbU1ldGFkYXRhTWFwW2luZGV4XS5zaXplLFxuXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcblxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IGRpcmVjdGlvbiwgaGVpZ2h0LCBsYXlvdXQsIHdpZHRoIH0gPSBwcm9wcztcblxuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIGNvbnN0IHNpemUgPSAoKChpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodCk6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcyk7XG5cbiAgICAvLyBHZXQgZXN0aW1hdGVkIHRvdGFsIHNpemUgYWZ0ZXIgSXRlbU1ldGFkYXRhIGlzIGNvbXB1dGVkLFxuICAgIC8vIFRvIGVuc3VyZSBpdCByZWZsZWN0cyBhY3R1YWwgbWVhc3VyZW1lbnRzIGluc3RlYWQgb2YganVzdCBlc3RpbWF0ZXMuXG4gICAgY29uc3QgZXN0aW1hdGVkVG90YWxTaXplID0gZ2V0RXN0aW1hdGVkVG90YWxTaXplKHByb3BzLCBpbnN0YW5jZVByb3BzKTtcblxuICAgIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpXG4gICAgKTtcbiAgICBjb25zdCBtaW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBpdGVtTWV0YWRhdGEub2Zmc2V0IC0gc2l6ZSArIGl0ZW1NZXRhZGF0YS5zaXplICsgc2Nyb2xsYmFyU2l6ZVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiZcbiAgICAgICAgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemVcbiAgICAgICkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZmluZE5lYXJlc3RJdGVtKHByb3BzLCBpbnN0YW5jZVByb3BzLCBvZmZzZXQpLFxuXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBoZWlnaHQsIGl0ZW1Db3VudCwgbGF5b3V0LCB3aWR0aCB9ID0gcHJvcHM7XG5cbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICBjb25zdCBzaXplID0gKCgoaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQpOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShwcm9wcywgc3RhcnRJbmRleCwgaW5zdGFuY2VQcm9wcyk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0ICsgc2l6ZTtcblxuICAgIGxldCBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgbGV0IHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgaXRlbUNvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YShwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG5cbiAgaW5pdEluc3RhbmNlUHJvcHMocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlOiBhbnkpOiBJbnN0YW5jZVByb3BzIHtcbiAgICBjb25zdCB7IGVzdGltYXRlZEl0ZW1TaXplIH0gPSAoKHByb3BzOiBhbnkpOiBWYXJpYWJsZVNpemVQcm9wcyk7XG5cbiAgICBjb25zdCBpbnN0YW5jZVByb3BzID0ge1xuICAgICAgaXRlbU1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZEl0ZW1TaXplOiBlc3RpbWF0ZWRJdGVtU2l6ZSB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleDogLTEsXG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRleCA9IChcbiAgICAgIGluZGV4OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZT86IGJvb2xlYW4gPSB0cnVlXG4gICAgKSA9PiB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4ID0gTWF0aC5taW4oXG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXgsXG4gICAgICAgIGluZGV4IC0gMVxuICAgICAgKTtcblxuICAgICAgLy8gV2UgY291bGQgcG90ZW50aWFsbHkgb3B0aW1pemUgZnVydGhlciBieSBvbmx5IGV2aWN0aW5nIHN0eWxlcyBhZnRlciB0aGlzIGluZGV4LFxuICAgICAgLy8gQnV0IHNpbmNlIHN0eWxlcyBhcmUgb25seSBjYWNoZWQgd2hpbGUgc2Nyb2xsaW5nIGlzIGluIHByb2dyZXNzLVxuICAgICAgLy8gSXQgc2VlbXMgYW4gdW5uZWNlc3Nhcnkgb3B0aW1pemF0aW9uLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGF0IHJlc2V0QWZ0ZXJJbmRleCgpIHdpbGwgYmUgY2FsbGVkIHdoaWxlIGEgdXNlciBpcyBzY3JvbGxpbmcuXG4gICAgICBpbnN0YW5jZS5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuXG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHM7XG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogZmFsc2UsXG5cbiAgdmFsaWRhdGVQcm9wczogKHsgaXRlbVNpemUgfTogUHJvcHM8YW55Pik6IHZvaWQgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW1TaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgK1xuICAgICAgICAgICAgYFwiJHtpdGVtU2l6ZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBpdGVtU2l6ZX1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVmFyaWFibGVTaXplTGlzdDtcbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgY3JlYXRlR3JpZENvbXBvbmVudCBmcm9tICcuL2NyZWF0ZUdyaWRDb21wb25lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFByb3BzLCBTY3JvbGxUb0FsaWduIH0gZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuY29uc3QgRml4ZWRTaXplR3JpZCA9IGNyZWF0ZUdyaWRDb21wb25lbnQoe1xuICBnZXRDb2x1bW5PZmZzZXQ6ICh7IGNvbHVtbldpZHRoIH06IFByb3BzPGFueT4sIGluZGV4OiBudW1iZXIpOiBudW1iZXIgPT5cbiAgICBpbmRleCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0Q29sdW1uV2lkdGg6ICh7IGNvbHVtbldpZHRoIH06IFByb3BzPGFueT4sIGluZGV4OiBudW1iZXIpOiBudW1iZXIgPT5cbiAgICAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldFJvd09mZnNldDogKHsgcm93SGVpZ2h0IH06IFByb3BzPGFueT4sIGluZGV4OiBudW1iZXIpOiBudW1iZXIgPT5cbiAgICBpbmRleCAqICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldFJvd0hlaWdodDogKHsgcm93SGVpZ2h0IH06IFByb3BzPGFueT4sIGluZGV4OiBudW1iZXIpOiBudW1iZXIgPT5cbiAgICAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodDogKHsgcm93Q291bnQsIHJvd0hlaWdodCB9OiBQcm9wczxhbnk+KSA9PlxuICAgICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpICogcm93Q291bnQsXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogKHsgY29sdW1uQ291bnQsIGNvbHVtbldpZHRoIH06IFByb3BzPGFueT4pID0+XG4gICAgKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSAqIGNvbHVtbkNvdW50LFxuXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudDogKFxuICAgIHsgY29sdW1uQ291bnQsIGNvbHVtbldpZHRoLCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IHR5cGVvZiB1bmRlZmluZWQsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgbGFzdENvbHVtbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGNvbHVtbkNvdW50ICogKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSAtIHdpZHRoXG4gICAgKTtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1pbihcbiAgICAgIGxhc3RDb2x1bW5PZmZzZXQsXG4gICAgICBjb2x1bW5JbmRleCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGNvbHVtbkluZGV4ICogKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSAtXG4gICAgICAgIHdpZHRoICtcbiAgICAgICAgc2Nyb2xsYmFyU2l6ZSArXG4gICAgICAgICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcilcbiAgICApO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgLSB3aWR0aCAmJiBzY3JvbGxMZWZ0IDw9IG1heE9mZnNldCArIHdpZHRoKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICBjb25zdCBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMlxuICAgICAgICApO1xuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdENvbHVtbk9mZnNldCArIE1hdGguZmxvb3Iod2lkdGggLyAyKSkge1xuICAgICAgICAgIHJldHVybiBsYXN0Q29sdW1uT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxMZWZ0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxMZWZ0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxMZWZ0O1xuICAgICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAgIC8vIEJlY2F1c2Ugd2Ugb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgc2Nyb2xsYmFyIHNpemUgd2hlbiBjYWxjdWxhdGluZyBtaW5PZmZzZXRcbiAgICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxMZWZ0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogKFxuICAgIHsgcm93SGVpZ2h0LCBoZWlnaHQsIHJvd0NvdW50IH06IFByb3BzPGFueT4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiB0eXBlb2YgdW5kZWZpbmVkLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGxhc3RSb3dPZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICByb3dDb3VudCAqICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpIC0gaGVpZ2h0XG4gICAgKTtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1pbihcbiAgICAgIGxhc3RSb3dPZmZzZXQsXG4gICAgICByb3dJbmRleCAqICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICBjb25zdCBtaW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICByb3dJbmRleCAqICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpIC1cbiAgICAgICAgaGVpZ2h0ICtcbiAgICAgICAgc2Nyb2xsYmFyU2l6ZSArXG4gICAgICAgICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpXG4gICAgKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbFRvcCA+PSBtaW5PZmZzZXQgLSBoZWlnaHQgJiYgc2Nyb2xsVG9wIDw9IG1heE9mZnNldCArIGhlaWdodCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgY29uc3QgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbChoZWlnaHQgLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0Um93T2Zmc2V0ICsgTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkge1xuICAgICAgICAgIHJldHVybiBsYXN0Um93T2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsVG9wO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAgIC8vIEJlY2F1c2Ugd2Ugb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgc2Nyb2xsYmFyIHNpemUgd2hlbiBjYWxjdWxhdGluZyBtaW5PZmZzZXRcbiAgICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxUb3AgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHsgY29sdW1uV2lkdGgsIGNvbHVtbkNvdW50IH06IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyXG4gICk6IG51bWJlciA9PlxuICAgIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKFxuICAgICAgICBjb2x1bW5Db3VudCAtIDEsXG4gICAgICAgIE1hdGguZmxvb3Ioc2Nyb2xsTGVmdCAvICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikpXG4gICAgICApXG4gICAgKSxcblxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgeyBjb2x1bW5XaWR0aCwgY29sdW1uQ291bnQsIHdpZHRoIH06IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbExlZnQ6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGxlZnQgPSBzdGFydEluZGV4ICogKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBudW1WaXNpYmxlQ29sdW1ucyA9IE1hdGguY2VpbChcbiAgICAgICh3aWR0aCArIHNjcm9sbExlZnQgLSBsZWZ0KSAvICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgY29sdW1uQ291bnQgLSAxLFxuICAgICAgICBzdGFydEluZGV4ICsgbnVtVmlzaWJsZUNvbHVtbnMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICAgIClcbiAgICApO1xuICB9LFxuXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICB7IHJvd0hlaWdodCwgcm93Q291bnQgfTogUHJvcHM8YW55PixcbiAgICBzY3JvbGxUb3A6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihyb3dDb3VudCAtIDEsIE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcikpKVxuICAgICksXG5cbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogKFxuICAgIHsgcm93SGVpZ2h0LCByb3dDb3VudCwgaGVpZ2h0IH06IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbFRvcDogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgdG9wID0gc3RhcnRJbmRleCAqICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IG51bVZpc2libGVSb3dzID0gTWF0aC5jZWlsKFxuICAgICAgKGhlaWdodCArIHNjcm9sbFRvcCAtIHRvcCkgLyAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKFxuICAgICAgICByb3dDb3VudCAtIDEsXG4gICAgICAgIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlUm93cyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICAgKVxuICAgICk7XG4gIH0sXG5cbiAgaW5pdEluc3RhbmNlUHJvcHMocHJvcHM6IFByb3BzPGFueT4pOiBhbnkge1xuICAgIC8vIE5vb3BcbiAgfSxcblxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiB0cnVlLFxuXG4gIHZhbGlkYXRlUHJvcHM6ICh7IGNvbHVtbldpZHRoLCByb3dIZWlnaHQgfTogUHJvcHM8YW55Pik6IHZvaWQgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbldpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArXG4gICAgICAgICAgICBgXCIke1xuICAgICAgICAgICAgICBjb2x1bW5XaWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjb2x1bW5XaWR0aFxuICAgICAgICAgICAgfVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJvd0hlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICtcbiAgICAgICAgICAgIGBcIiR7cm93SGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJvd0hlaWdodH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgRml4ZWRTaXplR3JpZDtcbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgY3JlYXRlTGlzdENvbXBvbmVudCBmcm9tICcuL2NyZWF0ZUxpc3RDb21wb25lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFByb3BzLCBTY3JvbGxUb0FsaWduIH0gZnJvbSAnLi9jcmVhdGVMaXN0Q29tcG9uZW50JztcblxudHlwZSBJbnN0YW5jZVByb3BzID0gYW55O1xuXG5jb25zdCBGaXhlZFNpemVMaXN0ID0gY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQ6ICh7IGl0ZW1TaXplIH06IFByb3BzPGFueT4sIGluZGV4OiBudW1iZXIpOiBudW1iZXIgPT5cbiAgICBpbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0SXRlbVNpemU6ICh7IGl0ZW1TaXplIH06IFByb3BzPGFueT4sIGluZGV4OiBudW1iZXIpOiBudW1iZXIgPT5cbiAgICAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogKHsgaXRlbUNvdW50LCBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+KSA9PlxuICAgICgoaXRlbVNpemU6IGFueSk6IG51bWJlcikgKiBpdGVtQ291bnQsXG5cbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IChcbiAgICB7IGRpcmVjdGlvbiwgaGVpZ2h0LCBpdGVtQ291bnQsIGl0ZW1TaXplLCBsYXlvdXQsIHdpZHRoIH06IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIGNvbnN0IHNpemUgPSAoKChpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodCk6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgbGFzdEl0ZW1PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBpdGVtQ291bnQgKiAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpIC0gc2l6ZVxuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICBsYXN0SXRlbU9mZnNldCxcbiAgICAgIGluZGV4ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgaW5kZXggKiAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpIC1cbiAgICAgICAgc2l6ZSArXG4gICAgICAgICgoaXRlbVNpemU6IGFueSk6IG51bWJlcikgK1xuICAgICAgICBzY3JvbGxiYXJTaXplXG4gICAgKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKFxuICAgICAgICBzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJlxuICAgICAgICBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZVxuICAgICAgKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgY2FzZSAnY2VudGVyJzoge1xuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIGNvbnN0IG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgbWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RJdGVtT2Zmc2V0ICsgTWF0aC5mbG9vcihzaXplIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdEl0ZW1PZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICB7IGl0ZW1Db3VudCwgaXRlbVNpemUgfTogUHJvcHM8YW55PixcbiAgICBvZmZzZXQ6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBNYXRoLmZsb29yKG9mZnNldCAvICgoaXRlbVNpemU6IGFueSk6IG51bWJlcikpKVxuICAgICksXG5cbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogKFxuICAgIHsgZGlyZWN0aW9uLCBoZWlnaHQsIGl0ZW1Db3VudCwgaXRlbVNpemUsIGxheW91dCwgd2lkdGggfTogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICBjb25zdCBvZmZzZXQgPSBzdGFydEluZGV4ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBzaXplID0gKCgoaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQpOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IG51bVZpc2libGVJdGVtcyA9IE1hdGguY2VpbChcbiAgICAgIChzaXplICsgc2Nyb2xsT2Zmc2V0IC0gb2Zmc2V0KSAvICgoaXRlbVNpemU6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgaXRlbUNvdW50IC0gMSxcbiAgICAgICAgc3RhcnRJbmRleCArIG51bVZpc2libGVJdGVtcyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICAgKVxuICAgICk7XG4gIH0sXG5cbiAgaW5pdEluc3RhbmNlUHJvcHMocHJvcHM6IFByb3BzPGFueT4pOiBhbnkge1xuICAgIC8vIE5vb3BcbiAgfSxcblxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiB0cnVlLFxuXG4gIHZhbGlkYXRlUHJvcHM6ICh7IGl0ZW1TaXplIH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJpdGVtU2l6ZVwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgK1xuICAgICAgICAgICAgYFwiJHtpdGVtU2l6ZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBpdGVtU2l6ZX1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgRml4ZWRTaXplTGlzdDtcbiIsICIvLyBAZmxvd1xuXG4vLyBQdWxsZWQgZnJvbSByZWFjdC1jb21wYXRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXZlbG9waXQvcHJlYWN0LWNvbXBhdC9ibG9iLzdjNWRlMDBlN2M4NWUyZmZkMDExYmYzYWYwMjg5OWI2M2Y2OTlkM2Evc3JjL2luZGV4LmpzI0wzNDlcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYWxsb3dEaWZmZXJzKHByZXY6IE9iamVjdCwgbmV4dDogT2JqZWN0KTogYm9vbGVhbiB7XG4gIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBwcmV2KSB7XG4gICAgaWYgKCEoYXR0cmlidXRlIGluIG5leHQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgYXR0cmlidXRlIGluIG5leHQpIHtcbiAgICBpZiAocHJldlthdHRyaWJ1dGVdICE9PSBuZXh0W2F0dHJpYnV0ZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IHNoYWxsb3dEaWZmZXJzIGZyb20gJy4vc2hhbGxvd0RpZmZlcnMnO1xuXG4vLyBDdXN0b20gY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgUmVhY3QubWVtbygpLlxuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdG1lbW9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFyZUVxdWFsKFxuICBwcmV2UHJvcHM6IE9iamVjdCxcbiAgbmV4dFByb3BzOiBPYmplY3Rcbik6IGJvb2xlYW4ge1xuICBjb25zdCB7IHN0eWxlOiBwcmV2U3R5bGUsIC4uLnByZXZSZXN0IH0gPSBwcmV2UHJvcHM7XG4gIGNvbnN0IHsgc3R5bGU6IG5leHRTdHlsZSwgLi4ubmV4dFJlc3QgfSA9IG5leHRQcm9wcztcblxuICByZXR1cm4gKFxuICAgICFzaGFsbG93RGlmZmVycyhwcmV2U3R5bGUsIG5leHRTdHlsZSkgJiYgIXNoYWxsb3dEaWZmZXJzKHByZXZSZXN0LCBuZXh0UmVzdClcbiAgKTtcbn1cbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgYXJlRXF1YWwgZnJvbSAnLi9hcmVFcXVhbCc7XG5pbXBvcnQgc2hhbGxvd0RpZmZlcnMgZnJvbSAnLi9zaGFsbG93RGlmZmVycyc7XG5cbi8vIEN1c3RvbSBzaG91bGRDb21wb25lbnRVcGRhdGUgZm9yIGNsYXNzIGNvbXBvbmVudHMuXG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWNvbXBvbmVudC5odG1sI3Nob3VsZGNvbXBvbmVudHVwZGF0ZVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICBuZXh0UHJvcHM6IE9iamVjdCxcbiAgbmV4dFN0YXRlOiBPYmplY3Rcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgICFhcmVFcXVhbCh0aGlzLnByb3BzLCBuZXh0UHJvcHMpIHx8IHNoYWxsb3dEaWZmZXJzKHRoaXMuc3RhdGUsIG5leHRTdGF0ZSlcbiAgKTtcbn1cbiIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiZGF0YS10ZXN0LXN1YmpcIiwgXCJhc3luY1wiLCBcImNsYXNzTmFtZVwiLCBcImNvbXByZXNzZWRcIiwgXCJjdXN0b21PcHRpb25UZXh0XCIsIFwiZnVsbFdpZHRoXCIsIFwiaWRcIiwgXCJpbnB1dFJlZlwiLCBcImlzQ2FzZVNlbnNpdGl2ZVwiLCBcImlzQ2xlYXJhYmxlXCIsIFwiaXNEaXNhYmxlZFwiLCBcImlzSW52YWxpZFwiLCBcImlzTG9hZGluZ1wiLCBcIm5vU3VnZ2VzdGlvbnNcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVwiLCBcIm9uQ3JlYXRlT3B0aW9uXCIsIFwib25TZWFyY2hDaGFuZ2VcIiwgXCJvcHRpb25zXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJyZW5kZXJPcHRpb25cIiwgXCJyb3dIZWlnaHRcIiwgXCJzZWxlY3RlZE9wdGlvbnNcIiwgXCJzaW5nbGVTZWxlY3Rpb25cIiwgXCJwcmVwZW5kXCIsIFwic29ydE1hdGNoZXNCeVwiLCBcImRlbGltaXRlclwiLCBcImFwcGVuZFwiLCBcImF1dG9Gb2N1c1wiLCBcInRydW5jYXRpb25Qcm9wc1wiLCBcImlucHV0UG9wb3ZlclByb3BzXCIsIFwib3B0aW9uTWF0Y2hlclwiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogRWxlbWVudHMgd2l0aGluIEV1aUNvbWJvQm94IHdoaWNoIHdvdWxkIG5vcm1hbGx5IGJlIHRhYmJhYmxlIChpbnB1dHMsIGJ1dHRvbnMpIGhhdmUgYmVlbiByZW1vdmVkXG4gKiBmcm9tIHRoZSB0YWIgb3JkZXIgd2l0aCB0YWJpbmRleD17LTF9IHNvIHRoYXQgd2UgY2FuIGNvbnRyb2wgdGhlIGtleWJvYXJkIG5hdmlnYXRpb24gaW50ZXJmYWNlLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBSZW5kZXJXaXRoRXVpVGhlbWUsIGh0bWxJZEdlbmVyYXRvciwga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGxvZ2ljYWxTdHlsZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IEV1aUlucHV0UG9wb3ZlciB9IGZyb20gJy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgZXVpRm9ybU1heFdpZHRoIH0gZnJvbSAnLi4vZm9ybS9mb3JtLnN0eWxlcyc7XG5pbXBvcnQgeyBnZXRNYXRjaGluZ09wdGlvbnMsIGZsYXR0ZW5PcHRpb25Hcm91cHMsIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUsIHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eSwgY3JlYXRlUGFydGlhbFN0cmluZ0VxdWFsaXR5T3B0aW9uTWF0Y2hlciB9IGZyb20gJy4vbWF0Y2hpbmdfb3B0aW9ucyc7XG5pbXBvcnQgeyBFdWlDb21ib0JveElucHV0IH0gZnJvbSAnLi9jb21ib19ib3hfaW5wdXQvY29tYm9fYm94X2lucHV0JztcbmltcG9ydCB7IEV1aUNvbWJvQm94T3B0aW9uc0xpc3QgfSBmcm9tICcuL2NvbWJvX2JveF9vcHRpb25zX2xpc3QnO1xuaW1wb3J0IHsgZXVpQ29tYm9Cb3hTdHlsZXMgYXMgc3R5bGVzIH0gZnJvbSAnLi9jb21ib19ib3guc3R5bGVzJztcblxuLyoqXG4gKiBCZWNhdXNlIG9mIGhvdyBUeXBlU2NyaXB0J3MgTGlicmFyeU1hbmFnZWRBdHRyaWJ1dGVzIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSBkZWZhdWx0UHJvcHMgKGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL3JlbGVhc2Utbm90ZXMvdHlwZXNjcmlwdC0zLTAuaHRtbCNzdXBwb3J0LWZvci1kZWZhdWx0cHJvcHMtaW4tanN4KVxuICogd2UgY2FuJ3QgZGlyZWN0bHkgZXhwb3J0IHRoZSBhYm92ZSBQcm9wcyBkZWZpbml0aW9ucywgYXMgdGhlIGRlZmF1bHRlZCB2YWx1ZXMgYXJlIG5vdCBtYWRlIG9wdGlvbmFsXG4gKiBhcyBpdCBpc24ndCBwcm9jZXNzZWQgYnkgTGlicmFyeU1hbmFnZWRBdHRyaWJ1dGVzLiBUbyBnZXQgYXJvdW5kIHRoaXMsIHdlOlxuICogLSByZW1vdmUgdGhlIHByb3BzIHdoaWNoIGhhdmUgZGVmYXVsdCB2YWx1ZXMgYXBwbGllZFxuICogICAtIGFkZGl0aW9uYWxseSByZS1kZWZpbmUgYG9wdGlvbnNgIGFuZCBgc2VsZWN0ZWRPcHRpb25zYCBkZWZhdWx0cywgbmVjZXNzYXJ5IGFzIHN0YXRpYyBtZW1iZXJzIGNhbid0IGFjY2VzcyBnZW5lcmljcyBhbmQgYmVjb21lIG5ldmVyW11cbiAqIC0gZXhwb3J0IChQcm9wcyAtIERlZmF1bHRzKSAmIFBhcnRpYWw8RGVmYXVsdHM+XG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaW5pdGlhbFNlYXJjaFZhbHVlID0gJyc7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aUNvbWJvQm94KCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29tYm9Cb3gpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aUNvbWJvQm94LCBbXS5jb25jYXQoYXJncykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzdGF0ZVwiLCB7XG4gICAgICBhY3RpdmVPcHRpb25JbmRleDogLTEsXG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgICBpc0xpc3RPcGVuOiBmYWxzZSxcbiAgICAgIG1hdGNoaW5nT3B0aW9uczogZ2V0TWF0Y2hpbmdPcHRpb25zKHtcbiAgICAgICAgb3B0aW9uczogX3RoaXMucHJvcHMub3B0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIHNlYXJjaFZhbHVlOiBpbml0aWFsU2VhcmNoVmFsdWUsXG4gICAgICAgIG9wdGlvbk1hdGNoZXI6IF90aGlzLnByb3BzLm9wdGlvbk1hdGNoZXIsXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZTogX3RoaXMucHJvcHMuaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgICBpc1ByZUZpbHRlcmVkOiBfdGhpcy5wcm9wcy5hc3luYyxcbiAgICAgICAgc2hvd1ByZXZTZWxlY3RlZDogQm9vbGVhbihfdGhpcy5wcm9wcy5zaW5nbGVTZWxlY3Rpb24pLFxuICAgICAgICBzb3J0TWF0Y2hlc0J5OiBfdGhpcy5wcm9wcy5zb3J0TWF0Y2hlc0J5XG4gICAgICB9KSxcbiAgICAgIHNlYXJjaFZhbHVlOiBpbml0aWFsU2VhcmNoVmFsdWVcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicm9vdElkXCIsIGh0bWxJZEdlbmVyYXRvcigpKTtcbiAgICAvLyBSZWZzXG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNvbWJvQm94UmVmSW5zdGFuY2VcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNvbWJvQm94UmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSA9IHJlZjtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2VhcmNoSW5wdXRSZWZJbnN0YW5jZVwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2VhcmNoSW5wdXRSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkaW5wdXRSZWYsIF90aGlzJHByb3BzO1xuICAgICAgX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSA9IHJlZjtcbiAgICAgIChfdGhpcyRwcm9wcyRpbnB1dFJlZiA9IChfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzKS5pbnB1dFJlZikgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkaW5wdXRSZWYgPT09IHZvaWQgMCB8fCBfdGhpcyRwcm9wcyRpbnB1dFJlZi5jYWxsKF90aGlzJHByb3BzLCByZWYpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJsaXN0UmVmSW5zdGFuY2VcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImxpc3RSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5saXN0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9wZW5MaXN0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNMaXN0T3BlbjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNsb3NlTGlzdFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0xpc3RPcGVuOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4XCIsIGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBvcHRpb25zIGF2YWlsYWJsZSwgZG8gbm90aGluZy5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBfcmVmLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IF9yZWYubWF0Y2hpbmdPcHRpb25zO1xuICAgICAgICB2YXIgbmV4dEFjdGl2ZU9wdGlvbkluZGV4O1xuICAgICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1c2VyJ3Mga2V5Ym9hcmQgbmF2aWdhdGlvbiBvZiB0aGUgbWVudSwgdGhlbiB3ZSdsbCBmb2N1c1xuICAgICAgICAgIC8vIGVpdGhlciB0aGUgZmlyc3Qgb3IgbGFzdCBpdGVtLlxuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFtb3VudCA8IDAgPyBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYWN0aXZlT3B0aW9uSW5kZXggKyBhbW91bnQ7XG4gICAgICAgICAgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4ID09PSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdyb3VwIHRpdGxlcyBhcmUgaW5jbHVkZWQgaW4gb3B0aW9uIGxpc3QgYnV0IGFyZSBub3Qgc2VsZWN0YWJsZVxuICAgICAgICAvLyBTa2lwIGdyb3VwIHRpdGxlIG9wdGlvbnNcbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGFtb3VudCA+IDAgPyAxIDogLTE7XG4gICAgICAgIHdoaWxlIChtYXRjaGluZ09wdGlvbnNbbmV4dEFjdGl2ZU9wdGlvbkluZGV4XS5pc0dyb3VwTGFiZWxPcHRpb24pIHtcbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBuZXh0QWN0aXZlT3B0aW9uSW5kZXggKyBkaXJlY3Rpb247XG4gICAgICAgICAgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4ID09PSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBuZXh0QWN0aXZlT3B0aW9uSW5kZXhcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJoYXNBY3RpdmVPcHRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ID4gLTEgJiYgX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggPCBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnMubGVuZ3RoO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjbGVhckFjdGl2ZU9wdGlvblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiAtMVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNsZWFyU2VhcmNoVmFsdWVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMub25TZWFyY2hDaGFuZ2UoJycpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJhZGRDdXN0b21PcHRpb25cIiwgZnVuY3Rpb24gKGlzQ29udGFpbmVyQmx1ciwgc2VhcmNoVmFsdWUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlID0gX3RoaXMkcHJvcHMyLmlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgb25DcmVhdGVPcHRpb24gPSBfdGhpcyRwcm9wczIub25DcmVhdGVPcHRpb24sXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczIub3B0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMyLnNpbmdsZVNlbGVjdGlvbjtcbiAgICAgIHZhciBtYXRjaGVkT3B0aW9uID0gX3RoaXMuZG9lc1NlYXJjaE1hdGNoT25seU9wdGlvbigpO1xuICAgICAgaWYgKG1hdGNoZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9uQWRkT3B0aW9uKG1hdGNoZWRPcHRpb24sIGlzQ29udGFpbmVyQmx1cik7XG4gICAgICB9XG4gICAgICBpZiAoIW9uQ3JlYXRlT3B0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRG9uJ3QgYm90aGVyIHRyeWluZyB0byBjcmVhdGUgYW4gb3B0aW9uIGlmIHRoZSB1c2VyIGhhc24ndCB0eXBlZCBhbnl0aGluZy5cbiAgICAgIGlmICghc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBEb24ndCBjcmVhdGUgdGhlIHZhbHVlIGlmIGl0J3MgYWxyZWFkeSBiZWVuIHNlbGVjdGVkLlxuICAgICAgaWYgKGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoe1xuICAgICAgICBpc0Nhc2VTZW5zaXRpdmU6IGlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9uc1xuICAgICAgfSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgbmV3IGN1c3RvbSBwaWxsIGlmIHRoaXMgaXMgY3VzdG9tIGlucHV0LCBldmVuIGlmIGl0IHBhcnRpYWxseSBtYXRjaGVzIGFuIG9wdGlvbi5cbiAgICAgIHZhciBpc09wdGlvbkNyZWF0ZWQgPSBvbkNyZWF0ZU9wdGlvbihzZWFyY2hWYWx1ZSwgZmxhdHRlbk9wdGlvbkdyb3VwcyhvcHRpb25zKSk7XG5cbiAgICAgIC8vIEV4cGVjdCB0aGUgY29uc3VtZXIgdG8gYmUgZXhwbGljaXQgaW4gcmVqZWN0aW5nIGEgY3VzdG9tIG9wdGlvbi5cbiAgICAgIGlmIChpc09wdGlvbkNyZWF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF90aGlzLmNsZWFyU2VhcmNoVmFsdWUoKTtcbiAgICAgIGlmIChCb29sZWFuKHNpbmdsZVNlbGVjdGlvbikpIHtcbiAgICAgICAgLy8gQWRkaW5nIGEgY3VzdG9tIG9wdGlvbiB0byBhIHNpbmdsZSBzZWxlY3QgdGhhdCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9uc1xuICAgICAgICBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZG9lc1NlYXJjaE1hdGNoT25seU9wdGlvblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaXNDYXNlU2Vuc2l0aXZlID0gX3RoaXMucHJvcHMuaXNDYXNlU2Vuc2l0aXZlO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gX3RoaXMuc3RhdGUsXG4gICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IF90aGlzJHN0YXRlLm1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRzdGF0ZS5zZWFyY2hWYWx1ZTtcbiAgICAgIGlmICghbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgdmFyIGlzTWF0Y2hXaXRoR3JvdXAgPSBtYXRjaGluZ09wdGlvbnNbMF0uaXNHcm91cExhYmVsT3B0aW9uO1xuICAgICAgdmFyIGlzT25seU9wdGlvbiA9IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggPT09IChpc01hdGNoV2l0aEdyb3VwID8gMiA6IDEpO1xuICAgICAgaWYgKCFpc09ubHlPcHRpb24pIHJldHVybjtcbiAgICAgIHZhciBtYXRjaGVkT3B0aW9uID0gbWF0Y2hpbmdPcHRpb25zW2lzTWF0Y2hXaXRoR3JvdXAgPyAxIDogMF07XG4gICAgICB2YXIgbm9ybWFsaXplZFNlYXJjaFN1YmplY3QgPSB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkobWF0Y2hlZE9wdGlvbi5sYWJlbCwgaXNDYXNlU2Vuc2l0aXZlKTtcbiAgICAgIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkoc2VhcmNoVmFsdWUsIGlzQ2FzZVNlbnNpdGl2ZSk7XG4gICAgICBpZiAobm9ybWFsaXplZFNlYXJjaFN1YmplY3QgPT09IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlZE9wdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYXJlQWxsT3B0aW9uc1NlbGVjdGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMy5vcHRpb25zLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBhc3luYyA9IF90aGlzJHByb3BzMy5hc3luYyxcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlID0gX3RoaXMkcHJvcHMzLmlzQ2FzZVNlbnNpdGl2ZTtcbiAgICAgIC8vIEFzc3VtZSBpZiB0aGlzIGlzIGFzeW5jIHRoZW4gdGhlcmUgY291bGQgYmUgaW5maW5pdGUgb3B0aW9ucy5cbiAgICAgIGlmIChhc3luYykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgZmxhdHRlbk9wdGlvbnMgPSBmbGF0dGVuT3B0aW9uR3JvdXBzKG9wdGlvbnMpLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbiksIHt9LCB7XG4gICAgICAgICAgbGFiZWw6IHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eShvcHRpb24ubGFiZWwudHJpbSgpLCBpc0Nhc2VTZW5zaXRpdmUpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB2YXIgbnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnMgPSAwO1xuICAgICAgc2VsZWN0ZWRPcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBsYWJlbCA9IF9yZWYyLmxhYmVsO1xuICAgICAgICB2YXIgdHJpbW1lZExhYmVsID0gdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5KGxhYmVsLnRyaW0oKSwgaXNDYXNlU2Vuc2l0aXZlKTtcbiAgICAgICAgaWYgKGZsYXR0ZW5PcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbi5sYWJlbCA9PT0gdHJpbW1lZExhYmVsO1xuICAgICAgICB9KSAhPT0gLTEpIG51bWJlck9mU2VsZWN0ZWRPcHRpb25zICs9IDE7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmbGF0dGVuT3B0aW9ucy5sZW5ndGggPT09IG51bWJlck9mU2VsZWN0ZWRPcHRpb25zO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkNvbWJvQm94Rm9jdXNcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkb25Gb2N1cywgX3RoaXMkcHJvcHM0O1xuICAgICAgKF90aGlzJHByb3BzJG9uRm9jdXMgPSAoX3RoaXMkcHJvcHM0ID0gX3RoaXMucHJvcHMpLm9uRm9jdXMpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uRm9jdXMgPT09IHZvaWQgMCB8fCBfdGhpcyRwcm9wcyRvbkZvY3VzLmNhbGwoX3RoaXMkcHJvcHM0LCBldmVudCk7XG4gICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNldEN1c3RvbU9wdGlvbnNcIiwgZnVuY3Rpb24gKGlzQ29udGFpbmVyQmx1cikge1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gX3RoaXMuc3RhdGUuc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgZGVsaW1pdGVyID0gX3RoaXMucHJvcHMuZGVsaW1pdGVyO1xuICAgICAgaWYgKGRlbGltaXRlcikge1xuICAgICAgICBzZWFyY2hWYWx1ZS5zcGxpdChkZWxpbWl0ZXIpLmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgIGlmIChvcHRpb24ubGVuZ3RoID4gMCkgX3RoaXMuYWRkQ3VzdG9tT3B0aW9uKGlzQ29udGFpbmVyQmx1ciwgb3B0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5hZGRDdXN0b21PcHRpb24oaXNDb250YWluZXJCbHVyLCBzZWFyY2hWYWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQ29udGFpbmVyQmx1clwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIGNsb3NlIHRoZSBvcHRpb25zIGxpc3QsIHVubGVzcyB0aGUgdXNlciBjbGlja2VkIG9uIGFuIG9wdGlvblxuICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgICAgdmFyIGZvY3VzZWRJbk9wdGlvbnNMaXN0ID0gcmVsYXRlZFRhcmdldCAmJiBfdGhpcy5saXN0UmVmSW5zdGFuY2UgJiYgX3RoaXMubGlzdFJlZkluc3RhbmNlLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpO1xuICAgICAgdmFyIGZvY3VzZWRJbklucHV0ID0gcmVsYXRlZFRhcmdldCAmJiBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlICYmIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UuY29udGFpbnMocmVsYXRlZFRhcmdldCk7XG4gICAgICBpZiAoIWZvY3VzZWRJbk9wdGlvbnNMaXN0ICYmICFmb2N1c2VkSW5JbnB1dCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25CbHVyLCBfdGhpcyRwcm9wczU7XG4gICAgICAgIChfdGhpcyRwcm9wcyRvbkJsdXIgPSAoX3RoaXMkcHJvcHM1ID0gX3RoaXMucHJvcHMpLm9uQmx1cikgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25CbHVyID09PSB2b2lkIDAgfHwgX3RoaXMkcHJvcHMkb25CbHVyLmNhbGwoX3RoaXMkcHJvcHM1LCBldmVudCk7XG4gICAgICAgIF90aGlzLmNsb3NlTGlzdCgpO1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIElmIHRoZSB1c2VyIHRhYnMgYXdheSBvciBjaGFuZ2VzIGZvY3VzIHRvIGFub3RoZXIgZWxlbWVudCwgdGFrZSB3aGF0ZXZlciBpbnB1dCB0aGV5J3ZlXG4gICAgICAgIC8vIHR5cGVkIGFuZCBjb252ZXJ0IGl0IGludG8gYSBwaWxsLCB0byBwcmV2ZW50IHRoZSBjb21ibyBib3ggZnJvbSBsb29raW5nIGxpa2UgYSB0ZXh0IGlucHV0LlxuICAgICAgICBpZiAoIV90aGlzLmhhc0FjdGl2ZU9wdGlvbigpKSB7XG4gICAgICAgICAgX3RoaXMuc2V0Q3VzdG9tT3B0aW9ucyh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmb2N1c2VkSW5PcHRpb25zTGlzdCkge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzUxNzlcbiAgICAgICAgLy8gbmVlZCB0byByZXN0b3JlIGZvY3VzIHRvIHRoZSBpbnB1dCBib3ggd2hlbiBjbGlja2luZyBub24taW50ZXJhY3RpdmUgZWxlbWVudHNcblxuICAgICAgICAvLyBmaXJlZm94IGRvZXNuJ3Qgc3VwcG9ydCBjYWxsaW5nIC5mb2N1cygpIGR1cmluZyBhIGJsdXIgZXZlbnRcbiAgICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM1NzlcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkc2VhcmNoSW5wdXRSZWZJO1xuICAgICAgICAgIChfdGhpcyRzZWFyY2hJbnB1dFJlZkkgPSBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSA9PT0gbnVsbCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkkgPT09IHZvaWQgMCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkkuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRvbktleURvd24sIF90aGlzJHByb3BzNjtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pc0Rpc2FibGVkKSByZXR1cm47XG4gICAgICBldmVudC5wZXJzaXN0KCk7IC8vIFRPRE86IFJlbW92ZSBvbmNlIFJlYWN0IDE2IHN1cHBvcnQgaXMgZHJvcHBlZFxuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX1VQOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgaWYgKF90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLmluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4KC0xKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19ET1dOOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgaWYgKF90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLmluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4KDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBrZXlzLkVTQ0FQRTpcbiAgICAgICAgICBpZiAoX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgX3RoaXMuY2xvc2VMaXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGtleXMuRU5URVI6XG4gICAgICAgICAgLy8gRG8gbm90IGJsb2NrIGVudGVyIGtleXByZXNzZXMgZm9yIHRoZSBjbGVhciBidXR0b24gb3IgZGVsZXRlIHNlbGVjdGlvbiBidXR0b25zXG4gICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgaWYgKF90aGlzLmhhc0FjdGl2ZU9wdGlvbigpKSB7XG4gICAgICAgICAgICAgIF90aGlzLm9uQWRkT3B0aW9uKF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9uc1tfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgX3RoaXMuc2V0Q3VzdG9tT3B0aW9ucyhmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGtleXMuVEFCOlxuICAgICAgICAgIC8vIERpc2FsbG93IHRhYmJpbmcgd2hlbiB0aGUgdXNlciBpcyBuYXZpZ2F0aW5nIHRoZSBvcHRpb25zLlxuICAgICAgICAgIGlmIChfdGhpcy5oYXNBY3RpdmVPcHRpb24oKSAmJiBfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIChfdGhpcyRwcm9wcyRvbktleURvd24gPSAoX3RoaXMkcHJvcHM2ID0gX3RoaXMucHJvcHMpLm9uS2V5RG93bikgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25LZXlEb3duID09PSB2b2lkIDAgfHwgX3RoaXMkcHJvcHMkb25LZXlEb3duLmNhbGwoX3RoaXMkcHJvcHM2LCBldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uT3B0aW9uRW50ZXJLZXlcIiwgZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgX3RoaXMub25BZGRPcHRpb24ob3B0aW9uKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25PcHRpb25DbGlja1wiLCBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICBfdGhpcy5vbkFkZE9wdGlvbihvcHRpb24pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkFkZE9wdGlvblwiLCBmdW5jdGlvbiAoYWRkZWRPcHRpb24sIGlzQ29udGFpbmVyQmx1cikge1xuICAgICAgaWYgKGFkZGVkT3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczcub25DaGFuZ2UsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzNy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvblByb3AgPSBfdGhpcyRwcm9wczcuc2luZ2xlU2VsZWN0aW9uO1xuICAgICAgdmFyIHNpbmdsZVNlbGVjdGlvbiA9IEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uUHJvcCk7XG4gICAgICB2YXIgY2hhbmdlT3B0aW9ucyA9IHNpbmdsZVNlbGVjdGlvbiA/IFthZGRlZE9wdGlvbl0gOiBzZWxlY3RlZE9wdGlvbnMuY29uY2F0KGFkZGVkT3B0aW9uKTtcbiAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgfHwgb25DaGFuZ2UoY2hhbmdlT3B0aW9ucyk7XG4gICAgICBfdGhpcy5jbGVhclNlYXJjaFZhbHVlKCk7XG4gICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuICAgICAgaWYgKCFpc0NvbnRhaW5lckJsdXIpIHtcbiAgICAgICAgdmFyIF90aGlzJHNlYXJjaElucHV0UmVmSTI7XG4gICAgICAgIChfdGhpcyRzZWFyY2hJbnB1dFJlZkkyID0gX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkgPT09IG51bGwgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJMiA9PT0gdm9pZCAwIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSTIuZm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuY2xvc2VMaXN0KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnMuaW5kZXhPZihhZGRlZE9wdGlvbilcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uUmVtb3ZlT3B0aW9uXCIsIGZ1bmN0aW9uIChyZW1vdmVkT3B0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM4ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHM4Lm9uQ2hhbmdlLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczguc2VsZWN0ZWRPcHRpb25zO1xuICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCB8fCBvbkNoYW5nZShzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbiAhPT0gcmVtb3ZlZE9wdGlvbjtcbiAgICAgIH0pKTtcbiAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNsZWFyU2VsZWN0ZWRPcHRpb25zXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkNoYW5nZSwgX3RoaXMkcHJvcHM5LCBfdGhpcyRzZWFyY2hJbnB1dFJlZkkzO1xuICAgICAgKF90aGlzJHByb3BzJG9uQ2hhbmdlID0gKF90aGlzJHByb3BzOSA9IF90aGlzLnByb3BzKS5vbkNoYW5nZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DaGFuZ2UgPT09IHZvaWQgMCB8fCBfdGhpcyRwcm9wcyRvbkNoYW5nZS5jYWxsKF90aGlzJHByb3BzOSwgW10pO1xuXG4gICAgICAvLyBDbGlja2luZyB0aGUgY2xlYXIgYnV0dG9uIHdpbGwgYWxzbyBjYXVzZSBpdCB0byBkaXNhcHBlYXIuIFRoaXMgd291bGQgcmVzdWx0IGluIGZvY3VzXG4gICAgICAvLyBzaGlmdGluZyB1bmV4cGVjdGVkbHkgdG8gdGhlIGJvZHkgZWxlbWVudCBzbyB3ZSBzZXQgaXQgdG8gdGhlIGlucHV0IHdoaWNoIGlzIG1vcmUgcmVhc29uYWJsZSxcbiAgICAgIChfdGhpcyRzZWFyY2hJbnB1dFJlZkkzID0gX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkgPT09IG51bGwgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJMyA9PT0gdm9pZCAwIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSTMuZm9jdXMoKTtcbiAgICAgIGlmICghX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkNvbWJvQm94Q2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHNlYXJjaElucHV0UmVmSTQ7XG4gICAgICAvLyBXaGVuIHRoZSB1c2VyIGNsaWNrcyBhbnl3aGVyZSBvbiB0aGUgYm94LCBlbnRlciB0aGUgaW50ZXJhY3Rpb24gc3RhdGUuXG4gICAgICAoX3RoaXMkc2VhcmNoSW5wdXRSZWZJNCA9IF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpID09PSBudWxsIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSTQgPT09IHZvaWQgMCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkk0LmZvY3VzKCk7XG5cbiAgICAgIC8vIElmIHRoZSB1c2VyIGRvZXMgdGhpcyBmcm9tIGEgc3RhdGUgaW4gd2hpY2ggYW4gb3B0aW9uIGhhcyBmb2N1cywgdGhlbiB3ZSBuZWVkIHRvIHJlc2V0IGl0IG9yIGNsZWFyIGl0LlxuICAgICAgaWYgKEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSAmJiBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZE9wdGlvbkluZGV4ID0gX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbi5sYWJlbCA9PT0gX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zWzBdLmxhYmVsICYmIG9wdGlvbi5rZXkgPT09IF90aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9uc1swXS5rZXk7XG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IHNlbGVjdGVkT3B0aW9uSW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk9wZW5MaXN0Q2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHNlYXJjaElucHV0UmVmSTU7XG4gICAgICAoX3RoaXMkc2VhcmNoSW5wdXRSZWZJNSA9IF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpID09PSBudWxsIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSTUgPT09IHZvaWQgMCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkk1LmZvY3VzKCk7XG4gICAgICBpZiAoIV90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25PcHRpb25MaXN0U2Nyb2xsXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRzZWFyY2hJbnB1dFJlZkk2O1xuICAgICAgKF90aGlzJHNlYXJjaElucHV0UmVmSTYgPSBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSA9PT0gbnVsbCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkk2ID09PSB2b2lkIDAgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJNi5mb2N1cygpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvblNlYXJjaENoYW5nZVwiLCBmdW5jdGlvbiAoc2VhcmNoVmFsdWUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczEwID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9uU2VhcmNoQ2hhbmdlID0gX3RoaXMkcHJvcHMxMC5vblNlYXJjaENoYW5nZSxcbiAgICAgICAgZGVsaW1pdGVyID0gX3RoaXMkcHJvcHMxMC5kZWxpbWl0ZXI7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZVxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoc2VhcmNoVmFsdWUgJiYgX3RoaXMuc3RhdGUuaXNMaXN0T3BlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvblNlYXJjaENoYW5nZSkge1xuICAgICAgICAgIHZhciBoYXNNYXRjaGluZ09wdGlvbnMgPSBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnMubGVuZ3RoID4gMDtcbiAgICAgICAgICBvblNlYXJjaENoYW5nZShzZWFyY2hWYWx1ZSwgaGFzTWF0Y2hpbmdPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoZGVsaW1pdGVyICYmIHNlYXJjaFZhbHVlLmVuZHNXaXRoKGRlbGltaXRlcikpIHtcbiAgICAgICAgX3RoaXMuc2V0Q3VzdG9tT3B0aW9ucyhmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlDb21ib0JveCwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpQ29tYm9Cb3gsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczExID0gdGhpcy5wcm9wcyxcbiAgICAgICAgZGF0YVRlc3RTdWJqID0gX3RoaXMkcHJvcHMxMVsnZGF0YS10ZXN0LXN1YmonXSxcbiAgICAgICAgYXN5bmMgPSBfdGhpcyRwcm9wczExLmFzeW5jLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczExLmNsYXNzTmFtZSxcbiAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMTEuY29tcHJlc3NlZCxcbiAgICAgICAgY3VzdG9tT3B0aW9uVGV4dCA9IF90aGlzJHByb3BzMTEuY3VzdG9tT3B0aW9uVGV4dCxcbiAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMxMS5mdWxsV2lkdGgsXG4gICAgICAgIGlkID0gX3RoaXMkcHJvcHMxMS5pZCxcbiAgICAgICAgaW5wdXRSZWYgPSBfdGhpcyRwcm9wczExLmlucHV0UmVmLFxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmUgPSBfdGhpcyRwcm9wczExLmlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgaXNDbGVhcmFibGUgPSBfdGhpcyRwcm9wczExLmlzQ2xlYXJhYmxlLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMxMS5pc0Rpc2FibGVkLFxuICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wczExLmlzSW52YWxpZCxcbiAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMxMS5pc0xvYWRpbmcsXG4gICAgICAgIG5vU3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczExLm5vU3VnZ2VzdGlvbnMsXG4gICAgICAgIG9uQmx1ciA9IF90aGlzJHByb3BzMTEub25CbHVyLFxuICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMTEub25DaGFuZ2UsXG4gICAgICAgIG9uQ3JlYXRlT3B0aW9uID0gX3RoaXMkcHJvcHMxMS5vbkNyZWF0ZU9wdGlvbixcbiAgICAgICAgb25TZWFyY2hDaGFuZ2UgPSBfdGhpcyRwcm9wczExLm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMxMS5vcHRpb25zLFxuICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzMTEucGxhY2Vob2xkZXIsXG4gICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzMTEucmVuZGVyT3B0aW9uLFxuICAgICAgICByb3dIZWlnaHQgPSBfdGhpcyRwcm9wczExLnJvd0hlaWdodCxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMxMS5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzMTEuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICBwcmVwZW5kID0gX3RoaXMkcHJvcHMxMS5wcmVwZW5kLFxuICAgICAgICBzb3J0TWF0Y2hlc0J5ID0gX3RoaXMkcHJvcHMxMS5zb3J0TWF0Y2hlc0J5LFxuICAgICAgICBkZWxpbWl0ZXIgPSBfdGhpcyRwcm9wczExLmRlbGltaXRlcixcbiAgICAgICAgYXBwZW5kID0gX3RoaXMkcHJvcHMxMS5hcHBlbmQsXG4gICAgICAgIGF1dG9Gb2N1cyA9IF90aGlzJHByb3BzMTEuYXV0b0ZvY3VzLFxuICAgICAgICB0cnVuY2F0aW9uUHJvcHMgPSBfdGhpcyRwcm9wczExLnRydW5jYXRpb25Qcm9wcyxcbiAgICAgICAgaW5wdXRQb3BvdmVyUHJvcHMgPSBfdGhpcyRwcm9wczExLmlucHV0UG9wb3ZlclByb3BzLFxuICAgICAgICBvcHRpb25NYXRjaGVyID0gX3RoaXMkcHJvcHMxMS5vcHRpb25NYXRjaGVyLFxuICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wczExWydhcmlhLWxhYmVsJ10sXG4gICAgICAgIGFyaWFMYWJlbGxlZGJ5ID0gX3RoaXMkcHJvcHMxMVsnYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMxMSwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTIgPSB0aGlzLnN0YXRlLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHN0YXRlMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgaGFzRm9jdXMgPSBfdGhpcyRzdGF0ZTIuaGFzRm9jdXMsXG4gICAgICAgIGlzTGlzdE9wZW4gPSBfdGhpcyRzdGF0ZTIuaXNMaXN0T3BlbixcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRzdGF0ZTIuc2VhcmNoVmFsdWUsXG4gICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IF90aGlzJHN0YXRlMi5tYXRjaGluZ09wdGlvbnM7XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgdmFsaWQgSUQgaWYgdXNlcnMgZG9uJ3QgcGFzcyBvbmUgYXMgYSBwcm9wXG4gICAgICB2YXIgaW5wdXRJZCA9IGlkICE9PSBudWxsICYmIGlkICE9PSB2b2lkIDAgPyBpZCA6IHRoaXMucm9vdElkKCdfZXVpLWNvbWJvYm94LWlkJyk7XG5cbiAgICAgIC8vIFZpc3VhbGx5IGluZGljYXRlIHRoZSBjb21ib2JveCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlIGlmIGl0IGhhcyBsb3N0IGZvY3VzIGJ1dCB0aGVyZSBpcyB0ZXh0IGVudGVyZWQgaW4gdGhlIGlucHV0LlxuICAgICAgLy8gV2hlbiBjdXN0b20gb3B0aW9ucyBhcmUgZGlzYWJsZWQgYW5kIHRoZSB1c2VyIGxlYXZlcyB0aGUgY29tYm8gYm94IGFmdGVyIGVudGVyaW5nIHRleHQgdGhhdCBkb2VzIG5vdCBtYXRjaCBhbnlcbiAgICAgIC8vIG9wdGlvbnMsIHRoaXMgdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGV5J3ZlIGVudGVyZWQgaW52YWxpZCBpbnB1dC5cbiAgICAgIHZhciBtYXJrQXNJbnZhbGlkID0gISEoaXNJbnZhbGlkIHx8IChoYXNGb2N1cyA9PT0gZmFsc2UgfHwgaXNMaXN0T3BlbiA9PT0gZmFsc2UpICYmIHNlYXJjaFZhbHVlKTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29tYm9Cb3gnLCBjbGFzc05hbWUsIHtcbiAgICAgICAgJ2V1aUNvbWJvQm94LWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkLFxuICAgICAgICAnZXVpQ29tYm9Cb3gtaXNJbnZhbGlkJzogbWFya0FzSW52YWxpZCxcbiAgICAgICAgJ2V1aUNvbWJvQm94LWlzT3Blbic6IGlzTGlzdE9wZW5cbiAgICAgIH0pO1xuICAgICAgdmFyIHZhbHVlID0gc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbiAoc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9uLmxhYmVsO1xuICAgICAgfSkuam9pbignLCAnKTtcbiAgICAgIHZhciBvcHRpb25zTGlzdDtcbiAgICAgIGlmICghbm9TdWdnZXN0aW9ucyAmJiBpc0xpc3RPcGVuKSB7XG4gICAgICAgIHZhciBvcHRpb25zTGlzdERhdGFUZXN0U3ViaiA9IGRhdGFUZXN0U3ViaiA/IFwiXCIuY29uY2F0KGRhdGFUZXN0U3ViaiwgXCItb3B0aW9uc0xpc3RcIikgOiB1bmRlZmluZWQ7XG4gICAgICAgIG9wdGlvbnNMaXN0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3gubGlzdGJveEFyaWFMYWJlbFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiQ2hvb3NlIGZyb20gdGhlIGZvbGxvd2luZyBvcHRpb25zXCJcbiAgICAgICAgfSwgZnVuY3Rpb24gKGxpc3Rib3hBcmlhTGFiZWwpIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb21ib0JveE9wdGlvbnNMaXN0LCB7XG4gICAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogX3RoaXMyLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgICAgYXJlQWxsT3B0aW9uc1NlbGVjdGVkOiBfdGhpczIuYXJlQWxsT3B0aW9uc1NlbGVjdGVkKCksXG4gICAgICAgICAgICBjdXN0b21PcHRpb25UZXh0OiBjdXN0b21PcHRpb25UZXh0LFxuICAgICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBvcHRpb25zTGlzdERhdGFUZXN0U3ViaixcbiAgICAgICAgICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgICAgICAgICAgaXNDYXNlU2Vuc2l0aXZlOiBpc0Nhc2VTZW5zaXRpdmUsXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICAgIGxpc3RSZWY6IF90aGlzMi5saXN0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgICBtYXRjaGluZ09wdGlvbnM6IG1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIG9uQ2xvc2VMaXN0OiBfdGhpczIuY2xvc2VMaXN0LFxuICAgICAgICAgICAgb25DcmVhdGVPcHRpb246IG9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICAgICAgb25PcHRpb25DbGljazogX3RoaXMyLm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgICBvbk9wdGlvbkVudGVyS2V5OiBfdGhpczIub25PcHRpb25FbnRlcktleSxcbiAgICAgICAgICAgIG9uU2Nyb2xsOiBfdGhpczIub25PcHRpb25MaXN0U2Nyb2xsLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbjogc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgICAgcmVuZGVyT3B0aW9uOiByZW5kZXJPcHRpb24sXG4gICAgICAgICAgICByb290SWQ6IF90aGlzMi5yb290SWQsXG4gICAgICAgICAgICByb3dIZWlnaHQ6IHJvd0hlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbFRvSW5kZXg6IGFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgICBkZWxpbWl0ZXI6IGRlbGltaXRlcixcbiAgICAgICAgICAgIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWU6IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUsXG4gICAgICAgICAgICBsaXN0Ym94QXJpYUxhYmVsOiBsaXN0Ym94QXJpYUxhYmVsLFxuICAgICAgICAgICAgdHJ1bmNhdGlvblByb3BzOiB0cnVuY2F0aW9uUHJvcHNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvKipcbiAgICAgICAgICogRXVpQ29tYm9Cb3ggZm9sbG93cyB0aGUgV0FJLUFSSUEgMS4yIHNwZWMgZm9yIGVkaXRhYmxlIGNvbWJvYm94ZXNcbiAgICAgICAgICogd2l0aCBsaXN0IGF1dG9jb21wbGV0ZS4gVGhpcyBwYXR0ZXJuIGlzIGFuIGltcHJvdmVtZW50IG9uIHRoZSB1c2VyXG4gICAgICAgICAqIGV4cGVyaWVuY2UgZm9yIHNjcmVlbiByZWFkZXJzIG92ZXIgdGhlIFdBSS1BUklBIDEuMSBwYXR0ZXJuLlxuICAgICAgICAgKlxuICAgICAgICAgKiBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLTEuMi9leGFtcGxlcy9jb21ib2JveC9jb21ib2JveC1hdXRvY29tcGxldGUtbGlzdC5odG1sXG4gICAgICAgICAqL1xuICAgICAgICBfX19FbW90aW9uSlNYKFJlbmRlcldpdGhFdWlUaGVtZSwgbnVsbCwgZnVuY3Rpb24gKGV1aVRoZW1lKSB7XG4gICAgICAgICAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpQ29tYm9Cb3gsIGZ1bGxXaWR0aCA/IHN0eWxlcy5mdWxsV2lkdGggOiBsb2dpY2FsU3R5bGUoJ21heC13aWR0aCcsIGV1aUZvcm1NYXhXaWR0aChldWlUaGVtZSkpXTtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBjc3M6IGNzc1N0eWxlc1xuICAgICAgICAgIH0sIHJlc3QsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogZGF0YVRlc3RTdWJqLFxuICAgICAgICAgICAgb25LZXlEb3duOiBfdGhpczIub25LZXlEb3duLFxuICAgICAgICAgICAgb25CbHVyOiBfdGhpczIub25Db250YWluZXJCbHVyLFxuICAgICAgICAgICAgcmVmOiBfdGhpczIuY29tYm9Cb3hSZWZDYWxsYmFja1xuICAgICAgICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aUlucHV0UG9wb3ZlciwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgICAgICBwYW5lbFBhZGRpbmdTaXplOiBcIm5vbmVcIixcbiAgICAgICAgICAgIGRpc2FibGVGb2N1c1RyYXA6IHRydWUsXG4gICAgICAgICAgICBjbG9zZU9uU2Nyb2xsOiB0cnVlXG4gICAgICAgICAgfSwgaW5wdXRQb3BvdmVyUHJvcHMsIHtcbiAgICAgICAgICAgIGlzT3BlbjogaXNMaXN0T3BlbixcbiAgICAgICAgICAgIGNsb3NlUG9wb3ZlcjogX3RoaXMyLmNsb3NlTGlzdCxcbiAgICAgICAgICAgIGlucHV0OiBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94SW5wdXQsIHtcbiAgICAgICAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICAgICAgICAgICAgZm9jdXNlZE9wdGlvbklkOiBfdGhpczIuaGFzQWN0aXZlT3B0aW9uKCkgPyBfdGhpczIucm9vdElkKFwiX29wdGlvbi1cIi5jb25jYXQoX3RoaXMyLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4KSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgICAgICAgICAgICBoYXNTZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgICBpZDogaW5wdXRJZCxcbiAgICAgICAgICAgICAgaW5wdXRSZWY6IF90aGlzMi5zZWFyY2hJbnB1dFJlZkNhbGxiYWNrLFxuICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgICAgICBpc0xpc3RPcGVuOiBpc0xpc3RPcGVuLFxuICAgICAgICAgICAgICBub0ljb246ICEhbm9TdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAgb25DaGFuZ2U6IF90aGlzMi5vblNlYXJjaENoYW5nZSxcbiAgICAgICAgICAgICAgb25DbGVhcjogaXNDbGVhcmFibGUgJiYgIWlzRGlzYWJsZWQgPyBfdGhpczIuY2xlYXJTZWxlY3RlZE9wdGlvbnMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIG9uQ2xpY2s6IF90aGlzMi5vbkNvbWJvQm94Q2xpY2ssXG4gICAgICAgICAgICAgIG9uQ2xvc2VMaXN0Q2xpY2s6IF90aGlzMi5jbG9zZUxpc3QsXG4gICAgICAgICAgICAgIG9uRm9jdXM6IF90aGlzMi5vbkNvbWJvQm94Rm9jdXMsXG4gICAgICAgICAgICAgIG9uT3Blbkxpc3RDbGljazogX3RoaXMyLm9uT3Blbkxpc3RDbGljayxcbiAgICAgICAgICAgICAgb25SZW1vdmVPcHRpb246IF90aGlzMi5vblJlbW92ZU9wdGlvbixcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICByb290SWQ6IF90aGlzMi5yb290SWQsXG4gICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbjogc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgIGFwcGVuZDogc2luZ2xlU2VsZWN0aW9uID8gYXBwZW5kIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBwcmVwZW5kOiBzaW5nbGVTZWxlY3Rpb24gPyBwcmVwZW5kIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICAgICAgaXNJbnZhbGlkOiBtYXJrQXNJbnZhbGlkLFxuICAgICAgICAgICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkYnlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSksIG9wdGlvbnNMaXN0KSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhciBhc3luYyA9IG5leHRQcm9wcy5hc3luYyxcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlID0gbmV4dFByb3BzLmlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgb3B0aW9ucyA9IG5leHRQcm9wcy5vcHRpb25zLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBuZXh0UHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBuZXh0UHJvcHMuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICBzb3J0TWF0Y2hlc0J5ID0gbmV4dFByb3BzLnNvcnRNYXRjaGVzQnksXG4gICAgICAgIG9wdGlvbk1hdGNoZXIgPSBuZXh0UHJvcHMub3B0aW9uTWF0Y2hlcjtcbiAgICAgIHZhciBhY3RpdmVPcHRpb25JbmRleCA9IHByZXZTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBwcmV2U3RhdGUuc2VhcmNoVmFsdWU7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSBhbmQgY2FjaGUgdGhlIG9wdGlvbnMgd2hpY2ggbWF0Y2ggdGhlIHNlYXJjaFZhbHVlLCBiZWNhdXNlIHdlIHVzZSB0aGlzIGluZm9ybWF0aW9uXG4gICAgICAvLyBpbiBtdWx0aXBsZSBwbGFjZXMgYW5kIGl0IHdvdWxkIGJlIGV4cGVuc2l2ZSB0byBjYWxjdWxhdGUgcmVwZWF0ZWRseS5cbiAgICAgIHZhciBtYXRjaGluZ09wdGlvbnMgPSBnZXRNYXRjaGluZ09wdGlvbnMoe1xuICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmU6IGlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgaXNQcmVGaWx0ZXJlZDogYXN5bmMsXG4gICAgICAgIHNob3dQcmV2U2VsZWN0ZWQ6IEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSxcbiAgICAgICAgc29ydE1hdGNoZXNCeTogc29ydE1hdGNoZXNCeSxcbiAgICAgICAgb3B0aW9uTWF0Y2hlcjogb3B0aW9uTWF0Y2hlclxuICAgICAgfSk7XG4gICAgICB2YXIgc3RhdGVVcGRhdGUgPSB7XG4gICAgICAgIG1hdGNoaW5nT3B0aW9uczogbWF0Y2hpbmdPcHRpb25zXG4gICAgICB9O1xuICAgICAgaWYgKGFjdGl2ZU9wdGlvbkluZGV4ID49IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGVVcGRhdGUuYWN0aXZlT3B0aW9uSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZVVwZGF0ZTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlDb21ib0JveCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBhc3luYzogZmFsc2UsXG4gIGNvbXByZXNzZWQ6IGZhbHNlLFxuICBmdWxsV2lkdGg6IGZhbHNlLFxuICBpc0NsZWFyYWJsZTogdHJ1ZSxcbiAgb3B0aW9uczogW10sXG4gIHNlbGVjdGVkT3B0aW9uczogW10sXG4gIHNpbmdsZVNlbGVjdGlvbjogZmFsc2UsXG4gIHByZXBlbmQ6IHVuZGVmaW5lZCxcbiAgYXBwZW5kOiB1bmRlZmluZWQsXG4gIHNvcnRNYXRjaGVzQnk6ICdub25lJyxcbiAgb3B0aW9uTWF0Y2hlcjogY3JlYXRlUGFydGlhbFN0cmluZ0VxdWFsaXR5T3B0aW9uTWF0Y2hlcigpXG59KTtcbkV1aUNvbWJvQm94LnByb3BUeXBlcyA9IHtcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIG9wdGlvbnMgYXN5bmNocm9ub3VzbHlcbiAgICAgKi9cbiAgYXN5bmM6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgY3JlYXRlcyBhIHNob3J0ZXIgaGVpZ2h0IGlucHV0XG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIFdoZW4gYHRydWVgIGV4cGFuZHMgdG8gdGhlIGVudGlyZSB3aWR0aCBhdmFpbGFibGVcbiAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIFNob3dzIGEgYnV0dG9uIHRoYXQgcXVpY2tseSBjbGVhcnMgYW55IGlucHV0XG4gICAgICovXG4gIGlzQ2xlYXJhYmxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgaW5wdXRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIFN3YXBzIHRoZSBkcm9wZG93biBvcHRpb25zIGZvciBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBEb2Vzbid0IHNob3cgdGhlIHN1Z2dlc3Rpb25zIGxpc3QvZHJvcGRvd25cbiAgICAgKi9cbiAgbm9TdWdnZXN0aW9uczogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQ2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIHF1ZXJ5IGluIHRoZSBjb21ibyBib3ggaXMgcGFyc2VkXG4gICAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmFueSxcbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgdGV4dCBxdWVyeSBpbiB0aGUgc2VhcmNoIGJveCBpcyBwYXJzZWRcbiAgICAgKi9cbiAgb25TZWFyY2hDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBwbGFjZWhvbGRlciBvZiB0aGUgaW5wdXRcbiAgICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIEV2ZXJ5IG9wdGlvbiBtdXN0IGJlIHRoZSBzYW1lIGhlaWdodCBhbmQgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBpZiB1c2luZyBhIGN1c3RvbSByZW5kZXJcbiAgICAgKi9cbiAgcm93SGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCBvbmx5IGFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QgYSBzaW5nbGUgb3B0aW9uLiBTZXQgdG8gYHsgYXNQbGFpblRleHQ6IHRydWUgfWAgdG8gbm90IHJlbmRlciBpbnB1dCBzZWxlY3Rpb24gYXMgcGlsbHNcbiAgICAgKi9cbiAgc2luZ2xlU2VsZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFzUGxhaW5UZXh0OiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogRGlzcGxheSBtYXRjaGluZyBvcHRpb25zIGJ5OlxuICAgICAqIGBzdGFydHNXaXRoYDogbW92ZXMgaXRlbXMgdGhhdCBzdGFydCB3aXRoIHNlYXJjaCB2YWx1ZSB0byB0b3Agb2YgdGhlIGxpc3Q7XG4gICAgICogYG5vbmVgOiBkb24ndCBjaGFuZ2UgdGhlIHNvcnQgb3JkZXIgb2YgaW5pdGlhbCBvYmplY3RcbiAgICAgKi9cbiAgc29ydE1hdGNoZXNCeTogUHJvcFR5cGVzLm9uZU9mKFtcIm5vbmVcIiwgXCJzdGFydHNXaXRoXCJdKS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIG1hdGNoIG9wdGlvbnMgd2l0aCBjYXNlIHNlbnNpdGl2aXR5LlxuICAgICAqL1xuICBpc0Nhc2VTZW5zaXRpdmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBPcHRpb25hbCBjdXN0b20gb3B0aW9uIG1hdGNoZXIgZnVuY3Rpb25cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3QgZXhhY3RFcXVhbGl0eU1hdGNoZXI6IEV1aUNvbWJvQm94T3B0aW9uTWF0Y2hlciA9ICh7IG9wdGlvbiwgc2VhcmNoVmFsdWUgfSkgPT4ge1xuICAgICAqICAgcmV0dXJuIG9wdGlvbi5sYWJlbCA9PT0gc2VhcmNoVmFsdWU7XG4gICAgICogfVxuICAgICAqL1xuICBvcHRpb25NYXRjaGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGJlZm9yZSBpbnB1dC4gSXQgd29uJ3Qgc2hvdyBpZiBgc2luZ2xlU2VsZWN0aW9uYCBpcyBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBhZnRlciBpbnB1dC4gSXQgd29uJ3Qgc2hvdyBpZiBgc2luZ2xlU2VsZWN0aW9uYCBpcyBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQSBzcGVjaWFsIGNoYXJhY3RlciB0byB1c2UgYXMgYSB2YWx1ZSBzZXBhcmF0b3IuIFR5cGljYWxseSBhIGNvbW1hIGAsYFxuICAgICAqL1xuICBkZWxpbWl0ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGF0IHRoZSBpbnB1dCBzaG91bGQgaGF2ZSBmb2N1cyB3aGVuIHRoZSBjb21wb25lbnQgbG9hZHNcbiAgICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogUmVxdWlyZWQgd2hlbiByZW5kZXJpbmcgd2l0aG91dCBhIHZpc2libGUgbGFiZWwgZnJvbSBbRXVpRm9ybVJvd10oLyMvZm9ybXMvZm9ybS1sYXlvdXRzKS5cbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIFJlZmVyZW5jZSBJRCBvZiBhIHRleHQgZWxlbWVudCBjb250YWluaW5nIHRoZSB2aXNpYmxlIGxhYmVsIGZvciB0aGUgY29tYm8gYm94IHdoZW4gbm90XG4gICAgICogc3VwcGxpZWQgYnkgYGFyaWEtbGFiZWxgIG9yIGZyb20gW0V1aUZvcm1Sb3ddKC8jL2Zvcm1zL2Zvcm0tbGF5b3V0cykuXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIEV1aUNvbWJvQm94IHdpbGwgdHJ1bmNhdGUgb3B0aW9uIGxhYmVscyBhdCB0aGUgZW5kIG9mXG4gICAgICogdGhlIHN0cmluZy4gWW91IGNhbiB1c2UgcGFzcyBpbiBhIGN1c3RvbSB0cnVuY2F0aW9uIGNvbmZpZ3VyYXRpb24gdGhhdFxuICAgICAqIGFjY2VwdHMgYW55IFtFdWlUZXh0VHJ1bmNhdGVdKC8jL3V0aWxpdGllcy90ZXh0LXRydW5jYXRpb24pIHByb3AsXG4gICAgICogZXhjZXB0IGZvciBgdGV4dGAgYW5kIGBjaGlsZHJlbmAuXG4gICAgICpcbiAgICAgKiBOb3RlOiB3aGVuIHNlYXJjaGluZywgY3VzdG9tIHRydW5jYXRpb24gcHJvcHMgYXJlIGlnbm9yZWQuIFRoZSBoaWdobGlnaHRlZCBzZWFyY2hcbiAgICAgKiB0ZXh0IHdpbGwgYWx3YXlzIHRha2UgcHJlY2VkZW5jZS5cbiAgICAgKi9cbiAgdHJ1bmNhdGlvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBBbGxvd3MgY3VzdG9taXppbmcgdGhlIHVuZGVybHlpbmcgRXVpSW5wdXRQb3BvdmVyIGNvbXBvbmVudFxuICAgICAqIChleGNlcHQgZm9yIHByb3BzIHRoYXQgY29udHJvbCBzdGF0ZSkuXG4gICAgICovXG4gIGlucHV0UG9wb3ZlclByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eSA9IGZ1bmN0aW9uIHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eShzdHJpbmcsIGlzQ2FzZVNlbnNpdGl2ZSkge1xuICByZXR1cm4gaXNDYXNlU2Vuc2l0aXZlID8gc3RyaW5nIDogc3RyaW5nLnRvTG93ZXJDYXNlKCk7XG59O1xuZXhwb3J0IHZhciBmbGF0dGVuT3B0aW9uR3JvdXBzID0gZnVuY3Rpb24gZmxhdHRlbk9wdGlvbkdyb3VwcyhvcHRpb25zT3JHcm91cHMpIHtcbiAgcmV0dXJuIG9wdGlvbnNPckdyb3Vwcy5yZWR1Y2UoZnVuY3Rpb24gKG9wdGlvbnMsIG9wdGlvbk9yR3JvdXApIHtcbiAgICBpZiAob3B0aW9uT3JHcm91cC5vcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucy5jb25jYXQob3B0aW9uT3JHcm91cC5vcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5wdXNoKG9wdGlvbk9yR3JvdXApO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfSwgW10pO1xufTtcbmV4cG9ydCB2YXIgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSA9IGZ1bmN0aW9uIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoX3JlZikge1xuICB2YXIgaXNDYXNlU2Vuc2l0aXZlID0gX3JlZi5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgc2VhcmNoVmFsdWUgPSBfcmVmLnNlYXJjaFZhbHVlLFxuICAgIHNlbGVjdGVkT3B0aW9ucyA9IF9yZWYuc2VsZWN0ZWRPcHRpb25zLFxuICAgIG9wdGlvbktleSA9IF9yZWYub3B0aW9uS2V5O1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5KHNlYXJjaFZhbHVlLCBpc0Nhc2VTZW5zaXRpdmUpO1xuICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmZpbmQoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIHZhciBub3JtYWxpemVkT3B0aW9uID0gdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5KG9wdGlvbi5sYWJlbCwgaXNDYXNlU2Vuc2l0aXZlKTtcbiAgICByZXR1cm4gbm9ybWFsaXplZE9wdGlvbiA9PT0gbm9ybWFsaXplZFNlYXJjaFZhbHVlICYmICghb3B0aW9uS2V5IHx8IG9wdGlvbi5rZXkgPT09IG9wdGlvbktleSk7XG4gIH0pO1xufTtcbnZhciBjb2xsZWN0TWF0Y2hpbmdPcHRpb24gPSBmdW5jdGlvbiBjb2xsZWN0TWF0Y2hpbmdPcHRpb24oX3JlZjIpIHtcbiAgdmFyIGFjY3VtdWxhdG9yID0gX3JlZjIuYWNjdW11bGF0b3IsXG4gICAgb3B0aW9uID0gX3JlZjIub3B0aW9uLFxuICAgIHNlbGVjdGVkT3B0aW9ucyA9IF9yZWYyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICBzZWFyY2hWYWx1ZSA9IF9yZWYyLnNlYXJjaFZhbHVlLFxuICAgIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IF9yZWYyLm5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSxcbiAgICBpc0Nhc2VTZW5zaXRpdmUgPSBfcmVmMi5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgaXNQcmVGaWx0ZXJlZCA9IF9yZWYyLmlzUHJlRmlsdGVyZWQsXG4gICAgc2hvd1ByZXZTZWxlY3RlZCA9IF9yZWYyLnNob3dQcmV2U2VsZWN0ZWQsXG4gICAgb3B0aW9uTWF0Y2hlciA9IF9yZWYyLm9wdGlvbk1hdGNoZXI7XG4gIC8vIE9ubHkgc2hvdyBvcHRpb25zIHdoaWNoIGhhdmVuJ3QgeWV0IGJlZW4gc2VsZWN0ZWQgdW5sZXNzIHJlcXVlc3RlZC5cbiAgdmFyIHNlbGVjdGVkT3B0aW9uID0gZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSh7XG4gICAgaXNDYXNlU2Vuc2l0aXZlOiBpc0Nhc2VTZW5zaXRpdmUsXG4gICAgc2VhcmNoVmFsdWU6IG9wdGlvbi5sYWJlbCxcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9ucyxcbiAgICBvcHRpb25LZXk6IG9wdGlvbi5rZXlcbiAgfSk7XG4gIGlmIChzZWxlY3RlZE9wdGlvbiAmJiAhc2hvd1ByZXZTZWxlY3RlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIElmIHRoZSBvcHRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIHByZS1maWx0ZXJlZCB0aGVuIHdlIGNhbiBza2lwIGZpbHRlcmluZyBhZ2FpbnN0IHRoZSBzZWFyY2ggdmFsdWUuXG4gIGlmIChpc1ByZUZpbHRlcmVkKSB7XG4gICAgYWNjdW11bGF0b3IucHVzaChvcHRpb24pO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIW5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGlzTWF0Y2hpbmcgPSBvcHRpb25NYXRjaGVyKHtcbiAgICBvcHRpb246IG9wdGlvbixcbiAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgbm9ybWFsaXplZFNlYXJjaFZhbHVlOiBub3JtYWxpemVkU2VhcmNoVmFsdWUsXG4gICAgaXNDYXNlU2Vuc2l0aXZlOiBpc0Nhc2VTZW5zaXRpdmUgIT09IG51bGwgJiYgaXNDYXNlU2Vuc2l0aXZlICE9PSB2b2lkIDAgPyBpc0Nhc2VTZW5zaXRpdmUgOiB0cnVlXG4gIH0pO1xuICBpZiAoaXNNYXRjaGluZykge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgfVxufTtcbmV4cG9ydCB2YXIgZ2V0TWF0Y2hpbmdPcHRpb25zID0gZnVuY3Rpb24gZ2V0TWF0Y2hpbmdPcHRpb25zKF9yZWYzKSB7XG4gIHZhciBvcHRpb25zID0gX3JlZjMub3B0aW9ucyxcbiAgICBzZWxlY3RlZE9wdGlvbnMgPSBfcmVmMy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgc2VhcmNoVmFsdWUgPSBfcmVmMy5zZWFyY2hWYWx1ZSxcbiAgICBvcHRpb25NYXRjaGVyID0gX3JlZjMub3B0aW9uTWF0Y2hlcixcbiAgICBfcmVmMyRpc0Nhc2VTZW5zaXRpdmUgPSBfcmVmMy5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgaXNDYXNlU2Vuc2l0aXZlID0gX3JlZjMkaXNDYXNlU2Vuc2l0aXZlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYzJGlzQ2FzZVNlbnNpdGl2ZSxcbiAgICBfcmVmMyRpc1ByZUZpbHRlcmVkID0gX3JlZjMuaXNQcmVGaWx0ZXJlZCxcbiAgICBpc1ByZUZpbHRlcmVkID0gX3JlZjMkaXNQcmVGaWx0ZXJlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMyRpc1ByZUZpbHRlcmVkLFxuICAgIF9yZWYzJHNob3dQcmV2U2VsZWN0ZSA9IF9yZWYzLnNob3dQcmV2U2VsZWN0ZWQsXG4gICAgc2hvd1ByZXZTZWxlY3RlZCA9IF9yZWYzJHNob3dQcmV2U2VsZWN0ZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMyRzaG93UHJldlNlbGVjdGUsXG4gICAgX3JlZjMkc29ydE1hdGNoZXNCeSA9IF9yZWYzLnNvcnRNYXRjaGVzQnksXG4gICAgc29ydE1hdGNoZXNCeSA9IF9yZWYzJHNvcnRNYXRjaGVzQnkgPT09IHZvaWQgMCA/ICdub25lJyA6IF9yZWYzJHNvcnRNYXRjaGVzQnk7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSB0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkoc2VhcmNoVmFsdWUudHJpbSgpLCBpc0Nhc2VTZW5zaXRpdmUpO1xuICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gW107XG4gIG9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgaWYgKG9wdGlvbi5vcHRpb25zKSB7XG4gICAgICB2YXIgbWF0Y2hpbmdPcHRpb25zRm9yR3JvdXAgPSBbXTtcbiAgICAgIG9wdGlvbi5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwT3B0aW9uKSB7XG4gICAgICAgIGNvbGxlY3RNYXRjaGluZ09wdGlvbih7XG4gICAgICAgICAgYWNjdW11bGF0b3I6IG1hdGNoaW5nT3B0aW9uc0Zvckdyb3VwLFxuICAgICAgICAgIG9wdGlvbjogZ3JvdXBPcHRpb24sXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZTogbm9ybWFsaXplZFNlYXJjaFZhbHVlLFxuICAgICAgICAgIGlzQ2FzZVNlbnNpdGl2ZTogaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgICAgIGlzUHJlRmlsdGVyZWQ6IGlzUHJlRmlsdGVyZWQsXG4gICAgICAgICAgc2hvd1ByZXZTZWxlY3RlZDogc2hvd1ByZXZTZWxlY3RlZCxcbiAgICAgICAgICBvcHRpb25NYXRjaGVyOiBvcHRpb25NYXRjaGVyXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBpZiAobWF0Y2hpbmdPcHRpb25zRm9yR3JvdXAubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBBZGQgb3B0aW9uIGZvciBncm91cCBsYWJlbFxuICAgICAgICBtYXRjaGluZ09wdGlvbnMucHVzaCh7XG4gICAgICAgICAga2V5OiBvcHRpb24ua2V5LFxuICAgICAgICAgIGxhYmVsOiBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiB0cnVlLFxuICAgICAgICAgIGFwcGVuZDogb3B0aW9uLmFwcGVuZCxcbiAgICAgICAgICBwcmVwZW5kOiBvcHRpb24ucHJlcGVuZFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQWRkIG1hdGNoaW5nIG9wdGlvbnMgZm9yIGdyb3VwXG4gICAgICAgIC8vIHVzZSBjb25jYXQgb3ZlciBzcHJlYWRpbmcgdG8gc3VwcG9ydCBsYXJnZSBhcnJheXMgLSBodHRwczovL21hdGhpYXNieW5lbnMuYmUvZGVtby9qYXZhc2NyaXB0LWFyZ3VtZW50LWNvdW50XG4gICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IG1hdGNoaW5nT3B0aW9ucy5jb25jYXQobWF0Y2hpbmdPcHRpb25zRm9yR3JvdXApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2xsZWN0TWF0Y2hpbmdPcHRpb24oe1xuICAgICAgICBhY2N1bXVsYXRvcjogbWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICBvcHRpb246IG9wdGlvbixcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgbm9ybWFsaXplZFNlYXJjaFZhbHVlOiBub3JtYWxpemVkU2VhcmNoVmFsdWUsXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZTogaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgICBpc1ByZUZpbHRlcmVkOiBpc1ByZUZpbHRlcmVkLFxuICAgICAgICBzaG93UHJldlNlbGVjdGVkOiBzaG93UHJldlNlbGVjdGVkLFxuICAgICAgICBvcHRpb25NYXRjaGVyOiBvcHRpb25NYXRjaGVyXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICBpZiAoc29ydE1hdGNoZXNCeSA9PT0gJ3N0YXJ0c1dpdGgnKSB7XG4gICAgdmFyIHJlZk9iaiA9IHtcbiAgICAgIHN0YXJ0V2l0aDogW10sXG4gICAgICBvdGhlcnM6IFtdXG4gICAgfTtcbiAgICBtYXRjaGluZ09wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICB2YXIgbm9ybWFsaXplZExhYmVsID0gdHJhbnNmb3JtRm9yQ2FzZVNlbnNpdGl2aXR5KG9iamVjdC5sYWJlbCwgaXNDYXNlU2Vuc2l0aXZlKTtcbiAgICAgIGlmIChub3JtYWxpemVkTGFiZWwuc3RhcnRzV2l0aChub3JtYWxpemVkU2VhcmNoVmFsdWUpKSB7XG4gICAgICAgIHJlZk9iai5zdGFydFdpdGgucHVzaChvYmplY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVmT2JqLm90aGVycy5wdXNoKG9iamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocmVmT2JqLnN0YXJ0V2l0aCksIF90b0NvbnN1bWFibGVBcnJheShyZWZPYmoub3RoZXJzKSk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoaW5nT3B0aW9ucztcbn07XG5cbi8qKlxuICogUGFydGlhbCBzdHJpbmcgZXF1YWxpdHkgb3B0aW9uIG1hdGNoZXIgZm9yIEV1aUNvbWJvQm94LlxuICogSXQgbWF0Y2hlcyBhbGwgb3B0aW9ucyB3aXRoIGxhYmVscyBpbmNsdWRpbmcgdGhlIHNlYXJjaGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IHZhciBjcmVhdGVQYXJ0aWFsU3RyaW5nRXF1YWxpdHlPcHRpb25NYXRjaGVyID0gZnVuY3Rpb24gY3JlYXRlUGFydGlhbFN0cmluZ0VxdWFsaXR5T3B0aW9uTWF0Y2hlcigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChfcmVmNCkge1xuICAgIHZhciBvcHRpb24gPSBfcmVmNC5vcHRpb24sXG4gICAgICBpc0Nhc2VTZW5zaXRpdmUgPSBfcmVmNC5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgICBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBfcmVmNC5ub3JtYWxpemVkU2VhcmNoVmFsdWU7XG4gICAgaWYgKCFub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgbm9ybWFsaXplZE9wdGlvbiA9IHRyYW5zZm9ybUZvckNhc2VTZW5zaXRpdml0eShvcHRpb24ubGFiZWwudHJpbSgpLCBpc0Nhc2VTZW5zaXRpdmUpO1xuICAgIHJldHVybiBub3JtYWxpemVkT3B0aW9uLmluY2x1ZGVzKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSk7XG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wia2V5XCIsIFwibGFiZWxcIiwgXCJjb2xvclwiLCBcIm9uQ2xpY2tcIiwgXCJhcHBlbmRcIiwgXCJwcmVwZW5kXCIsIFwidHJ1bmNhdGlvblByb3BzXCIsIFwidG9vbFRpcENvbnRlbnRcIiwgXCJ0b29sVGlwUHJvcHNcIl07XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5cywgQ2FudmFzVGV4dFV0aWxzLCBSZW5kZXJXaXRoRXVpU3R5bGVzTWVtb2l6ZXIgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dCB9IGZyb20gJy4uLy4uL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dCc7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBFdWlDb21ib0JveFBpbGwgfSBmcm9tICcuL2NvbWJvX2JveF9waWxsJztcbmltcG9ydCB7IGV1aUNvbWJvQm94SW5wdXRTdHlsZXMgfSBmcm9tICcuL2NvbWJvX2JveF9pbnB1dC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3hJbnB1dCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlDb21ib0JveElucHV0KCkge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29tYm9Cb3hJbnB1dCk7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpQ29tYm9Cb3hJbnB1dCwgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RhdGVcIiwge1xuICAgICAgaW5wdXRXaWR0aDogMixcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ3aWR0aFV0aWxzXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImlucHV0UmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkaW5wdXRSZWYsIF90aGlzJHByb3BzO1xuICAgICAgX3RoaXMud2lkdGhVdGlscyA9IG5ldyBDYW52YXNUZXh0VXRpbHMoe1xuICAgICAgICBjb250YWluZXI6IGVsXG4gICAgICB9KTtcbiAgICAgIChfdGhpcyRwcm9wcyRpbnB1dFJlZiA9IChfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzKS5pbnB1dFJlZikgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkaW5wdXRSZWYgPT09IHZvaWQgMCB8fCBfdGhpcyRwcm9wcyRpbnB1dFJlZi5jYWxsKF90aGlzJHByb3BzLCBlbCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInVwZGF0ZUlucHV0U2l6ZVwiLCBmdW5jdGlvbiAoaW5wdXRWYWx1ZSkge1xuICAgICAgaWYgKCFfdGhpcy53aWR0aFV0aWxzKSByZXR1cm47XG4gICAgICBpZiAoX3RoaXMuYXNQbGFpblRleHQpIHJldHVybjtcbiAgICAgIF90aGlzLndpZHRoVXRpbHMuc2V0VGV4dFRvQ2hlY2soaW5wdXRWYWx1ZSk7XG4gICAgICAvLyBDYW52YXMgaGFzIG1pbnV0ZSBzdWJwaXhlbCBkaWZmZXJlbmNlcyBpbiByZW5kZXJpbmcgY29tcGFyZWQgdG8gRE9NXG4gICAgICAvLyBXZSdsbCBidWZmZXIgdGhlIGlucHV0IGJ5IH4ycHgganVzdCB0byBlbnN1cmUgc3VmZmljaWVudCB3aWR0aFxuICAgICAgdmFyIGlucHV0V2lkdGggPSBNYXRoLmNlaWwoX3RoaXMud2lkdGhVdGlscy50ZXh0V2lkdGgpICsgMjtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaW5wdXRXaWR0aDogaW5wdXRXaWR0aFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uRm9jdXNcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5wcm9wcy5vbkZvY3VzKGV2ZW50KTtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkJsdXJcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMub25CbHVyKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uQmx1cihldmVudCk7XG4gICAgICB9XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuc2VhcmNoVmFsdWUsXG4gICAgICAgIGhhc1NlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMi5oYXNTZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMi5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIG9uUmVtb3ZlT3B0aW9uID0gX3RoaXMkcHJvcHMyLm9uUmVtb3ZlT3B0aW9uLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczIuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICBpc0xpc3RPcGVuID0gX3RoaXMkcHJvcHMyLmlzTGlzdE9wZW4sXG4gICAgICAgIG9uT3Blbkxpc3RDbGljayA9IF90aGlzJHByb3BzMi5vbk9wZW5MaXN0Q2xpY2ssXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMyLm9uQ2hhbmdlO1xuICAgICAgdmFyIHNlYXJjaElzRW1wdHkgPSAhc2VhcmNoVmFsdWUubGVuZ3RoO1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0ga2V5cy5CQUNLU1BBQ0UpIHtcbiAgICAgICAgLy8gV2hlbiBiYWNrc3BhY2luZyBpbiBhIHBsYWluIHRleHQgY29tYm9ib3gsIGNoYW5nZSBub3JtYWxseSBhbmQgcmVtb3ZlIHRoZSBzZWxlY3Rpb25cbiAgICAgICAgaWYgKF90aGlzLmFzUGxhaW5UZXh0KSB7XG4gICAgICAgICAgb25DaGFuZ2UoZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgaWYgKGhhc1NlbGVjdGVkT3B0aW9ucykge1xuICAgICAgICAgICAgb25SZW1vdmVPcHRpb24oc2VsZWN0ZWRPcHRpb25zW3NlbGVjdGVkT3B0aW9ucy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdoZW4gYmFja3NwYWNpbmcgZnJvbSBhbiBlbXB0eSBpbnB1dCwgZGVsZXRlIHRoZSBsYXN0IHBpbGwgb3B0aW9uIGluIHRoZSBsaXN0XG4gICAgICAgIGVsc2UgaWYgKHNlYXJjaElzRW1wdHkgJiYgaGFzU2VsZWN0ZWRPcHRpb25zKSB7XG4gICAgICAgICAgb25SZW1vdmVPcHRpb24oc2VsZWN0ZWRPcHRpb25zW3NlbGVjdGVkT3B0aW9ucy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgaWYgKCEhc2luZ2xlU2VsZWN0aW9uICYmICFpc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBvbk9wZW5MaXN0Q2xpY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVuZGVyUGlsbHNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gRG9uJ3QgcmVuZGVyIGEgcGlsbCBmb3IgcGxhaW4gdGV4dCBjb21ib2JveGVzIC0gdXNlIHRoZSBpbnB1dCBpbnN0ZWFkXG4gICAgICBpZiAoX3RoaXMuYXNQbGFpblRleHQpIHJldHVybiBudWxsO1xuICAgICAgLy8gRG9uJ3QgcmVuZGVyIHRoZSBzaW5nbGUgcGlsbCBzZWxlY3Rpb24gd2hpbGUgc2VhcmNoaW5nXG4gICAgICBpZiAoX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uICYmIF90aGlzLnByb3BzLnNlYXJjaFZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMzLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMy5pc0Rpc2FibGVkLFxuICAgICAgICBvblJlbW92ZU9wdGlvbiA9IF90aGlzJHByb3BzMy5vblJlbW92ZU9wdGlvbjtcbiAgICAgIGlmICghc2VsZWN0ZWRPcHRpb25zIHx8ICFzZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIGtleSA9IG9wdGlvbi5rZXksXG4gICAgICAgICAgbGFiZWwgPSBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgY29sb3IgPSBvcHRpb24uY29sb3IsXG4gICAgICAgICAgb25DbGljayA9IG9wdGlvbi5vbkNsaWNrLFxuICAgICAgICAgIGFwcGVuZCA9IG9wdGlvbi5hcHBlbmQsXG4gICAgICAgICAgcHJlcGVuZCA9IG9wdGlvbi5wcmVwZW5kLFxuICAgICAgICAgIHRydW5jYXRpb25Qcm9wcyA9IG9wdGlvbi50cnVuY2F0aW9uUHJvcHMsXG4gICAgICAgICAgdG9vbFRpcENvbnRlbnQgPSBvcHRpb24udG9vbFRpcENvbnRlbnQsXG4gICAgICAgICAgdG9vbFRpcFByb3BzID0gb3B0aW9uLnRvb2xUaXBQcm9wcyxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9wdGlvbiwgX2V4Y2x1ZGVkKTtcbiAgICAgICAgdmFyIHBpbGxPbkNsb3NlID0gaXNEaXNhYmxlZCB8fCBfdGhpcy5wcm9wcy5zaW5nbGVTZWxlY3Rpb24gfHwgb25DbGljayA/IHVuZGVmaW5lZCA6IG9uUmVtb3ZlT3B0aW9uO1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb21ib0JveFBpbGwsIF9leHRlbmRzKHtcbiAgICAgICAgICBvcHRpb246IG9wdGlvbixcbiAgICAgICAgICBvbkNsb3NlOiBwaWxsT25DbG9zZSxcbiAgICAgICAgICBrZXk6IGtleSAhPT0gbnVsbCAmJiBrZXkgIT09IHZvaWQgMCA/IGtleSA6IGxhYmVsLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICAgICAgb25DbGlja0FyaWFMYWJlbDogb25DbGljayA/ICdDaGFuZ2UnIDogdW5kZWZpbmVkXG4gICAgICAgIH0sIHJlc3QpLCBsYWJlbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUNvbWJvQm94SW5wdXQsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUNvbWJvQm94SW5wdXQsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICBpZiAocHJldlByb3BzLnNlYXJjaFZhbHVlICE9PSB0aGlzLnByb3BzLnNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXRTaXplKHRoaXMucHJvcHMuc2VhcmNoVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhc1BsYWluVGV4dFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIHNpbmdsZVNlbGVjdGlvbiA9IHRoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uO1xuICAgICAgdmFyIGlzU2luZ2xlU2VsZWN0aW9uQ29uZmlnID0gc2luZ2xlU2VsZWN0aW9uICYmIF90eXBlb2Yoc2luZ2xlU2VsZWN0aW9uKSA9PT0gJ29iamVjdCc7XG4gICAgICByZXR1cm4gISEoaXNTaW5nbGVTZWxlY3Rpb25Db25maWcgJiYgc2luZ2xlU2VsZWN0aW9uLmFzUGxhaW5UZXh0KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2VhcmNoVmFsdWVcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzNC5zZWFyY2hWYWx1ZSxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM0LnNlbGVjdGVkT3B0aW9ucztcbiAgICAgIGlmICh0aGlzLmFzUGxhaW5UZXh0KSB7XG4gICAgICAgIHZhciBfc2VsZWN0ZWRPcHRpb25zJDtcbiAgICAgICAgcmV0dXJuIHNlYXJjaFZhbHVlIHx8IChzZWxlY3RlZE9wdGlvbnMgPT09IG51bGwgfHwgc2VsZWN0ZWRPcHRpb25zID09PSB2b2lkIDAgfHwgKF9zZWxlY3RlZE9wdGlvbnMkID0gc2VsZWN0ZWRPcHRpb25zWzBdKSA9PT0gbnVsbCB8fCBfc2VsZWN0ZWRPcHRpb25zJCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3NlbGVjdGVkT3B0aW9ucyQubGFiZWwpIHx8ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNlYXJjaFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzNS5jb21wcmVzc2VkLFxuICAgICAgICBmb2N1c2VkT3B0aW9uSWQgPSBfdGhpcyRwcm9wczUuZm9jdXNlZE9wdGlvbklkLFxuICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wczUuZnVsbFdpZHRoLFxuICAgICAgICBoYXNTZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczUuaGFzU2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBpZCA9IF90aGlzJHByb3BzNS5pZCxcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzNS5pc0Rpc2FibGVkLFxuICAgICAgICBpc0xpc3RPcGVuID0gX3RoaXMkcHJvcHM1LmlzTGlzdE9wZW4sXG4gICAgICAgIG5vSWNvbiA9IF90aGlzJHByb3BzNS5ub0ljb24sXG4gICAgICAgIF9vbkNoYW5nZSA9IF90aGlzJHByb3BzNS5vbkNoYW5nZSxcbiAgICAgICAgb25DbGVhciA9IF90aGlzJHByb3BzNS5vbkNsZWFyLFxuICAgICAgICBvbkNsaWNrID0gX3RoaXMkcHJvcHM1Lm9uQ2xpY2ssXG4gICAgICAgIG9uRm9jdXMgPSBfdGhpcyRwcm9wczUub25Gb2N1cyxcbiAgICAgICAgb25DbG9zZUxpc3RDbGljayA9IF90aGlzJHByb3BzNS5vbkNsb3NlTGlzdENsaWNrLFxuICAgICAgICBvbk9wZW5MaXN0Q2xpY2sgPSBfdGhpcyRwcm9wczUub25PcGVuTGlzdENsaWNrLFxuICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzNS5wbGFjZWhvbGRlcixcbiAgICAgICAgcm9vdElkID0gX3RoaXMkcHJvcHM1LnJvb3RJZCxcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczUuc2VhcmNoVmFsdWUsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzNS5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzNS5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIHZhbHVlID0gX3RoaXMkcHJvcHM1LnZhbHVlLFxuICAgICAgICBwcmVwZW5kID0gX3RoaXMkcHJvcHM1LnByZXBlbmQsXG4gICAgICAgIGFwcGVuZCA9IF90aGlzJHByb3BzNS5hcHBlbmQsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzNS5pc0xvYWRpbmcsXG4gICAgICAgIGlzSW52YWxpZCA9IF90aGlzJHByb3BzNS5pc0ludmFsaWQsXG4gICAgICAgIGF1dG9Gb2N1cyA9IF90aGlzJHByb3BzNS5hdXRvRm9jdXMsXG4gICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzNVsnYXJpYS1sYWJlbCddLFxuICAgICAgICBhcmlhTGFiZWxsZWRieSA9IF90aGlzJHByb3BzNVsnYXJpYS1sYWJlbGxlZGJ5J107XG4gICAgICB2YXIgcmVtb3ZlT3B0aW9uTWVzc2FnZTtcbiAgICAgIHZhciByZW1vdmVPcHRpb25NZXNzYWdlSWQ7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5oYXNGb2N1cykge1xuICAgICAgICB2YXIgcmVhZFBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIgPyBcIlwiLmNvbmNhdChwbGFjZWhvbGRlciwgXCIuXCIpIDogJyc7XG4gICAgICAgIHZhciByZW1vdmVPcHRpb25NZXNzYWdlQ29udGVudCA9IFwiQ29tYm8gYm94LiBTZWxlY3RlZC4gXCIuY29uY2F0KHNlYXJjaFZhbHVlID8gXCJcIi5jb25jYXQoc2VhcmNoVmFsdWUsIFwiLiBTZWxlY3RlZC4gXCIpIDogJycpLmNvbmNhdChzZWxlY3RlZE9wdGlvbnMgJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDAgPyBcIlwiLmNvbmNhdCh2YWx1ZSwgXCIuIFByZXNzIEJhY2tzcGFjZSB0byBkZWxldGUgXCIpLmNvbmNhdChzZWxlY3RlZE9wdGlvbnNbc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAtIDFdLmxhYmVsLCBcIi4gXCIpIDogJycsIFwiQ29tYm8gYm94IGlucHV0LiBcIikuY29uY2F0KHJlYWRQbGFjZWhvbGRlciwgXCIgVHlwZSBzb21lIHRleHQgb3IsIHRvIGRpc3BsYXkgYSBsaXN0IG9mIGNob2ljZXMsIHByZXNzIERvd24gQXJyb3cuIFwiKSArICdUbyBleGl0IHRoZSBsaXN0IG9mIGNob2ljZXMsIHByZXNzIEVzY2FwZS4nO1xuICAgICAgICByZW1vdmVPcHRpb25NZXNzYWdlSWQgPSByb290SWQoJ3JlbW92ZU9wdGlvbk1lc3NhZ2UnKTtcblxuICAgICAgICAvLyBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIiB3aWxsIHJlYWQgdGhpcyBtZXNzYWdlIGFsb3VkIGltbWVkaWF0ZWx5IG9uY2UgaXQgZW50ZXJzIHRoZSBET00uXG4gICAgICAgIC8vIFdlJ2xsIHJlbmRlciB0byB0aGUgRE9NIHdoZW4gdGhlIGlucHV0IGdhaW5zIGZvY3VzIGFuZCByZW1vdmUgaXQgd2hlbiB0aGUgaW5wdXQgbG9zZXMgZm9jdXMuXG4gICAgICAgIC8vIFdlJ2xsIHVzZSBhcmlhLWhpZGRlbiB0byBwcmV2ZW50IGRlZmF1bHQgYXJpYSBpbmZvcm1hdGlvbiBmcm9tIGJlaW5nIHJlYWQgYnkgdGhlIHNjcmVlblxuICAgICAgICAvLyByZWFkZXIuXG4gICAgICAgIHJlbW92ZU9wdGlvbk1lc3NhZ2UgPSBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICBcImFyaWEtbGl2ZVwiOiBcInBvbGl0ZVwiLFxuICAgICAgICAgIGlkOiByZW1vdmVPcHRpb25NZXNzYWdlSWRcbiAgICAgICAgfSwgcmVtb3ZlT3B0aW9uTWVzc2FnZUNvbnRlbnQpKTtcbiAgICAgIH1cbiAgICAgIHZhciBpc0luR3JvdXAgPSBzaW5nbGVTZWxlY3Rpb24gJiYgKHByZXBlbmQgfHwgYXBwZW5kKTtcbiAgICAgIHZhciBzaG93UGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlciAmJiAhKHNlbGVjdGVkT3B0aW9ucyAhPT0gbnVsbCAmJiBzZWxlY3RlZE9wdGlvbnMgIT09IHZvaWQgMCAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSAmJiAhc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgY2xpY2tQcm9wcyA9IHt9O1xuICAgICAgaWYgKCFpc0Rpc2FibGVkICYmIG9uQ2xlYXIgJiYgaGFzU2VsZWN0ZWRPcHRpb25zKSB7XG4gICAgICAgIGNsaWNrUHJvcHMuY2xlYXIgPSB7XG4gICAgICAgICAgJ2RhdGEtdGVzdC1zdWJqJzogJ2NvbWJvQm94Q2xlYXJCdXR0b24nLFxuICAgICAgICAgIG9uQ2xpY2s6IG9uQ2xlYXJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciBpY29uO1xuICAgICAgaWYgKCFub0ljb24gJiYgIWlzRGlzYWJsZWQpIHtcbiAgICAgICAgaWNvbiA9IHtcbiAgICAgICAgICAnYXJpYS1sYWJlbCc6IGlzTGlzdE9wZW4gPyAnQ2xvc2UgbGlzdCBvZiBvcHRpb25zJyA6ICdPcGVuIGxpc3Qgb2Ygb3B0aW9ucycsXG4gICAgICAgICAgJ2RhdGEtdGVzdC1zdWJqJzogJ2NvbWJvQm94VG9nZ2xlTGlzdEJ1dHRvbicsXG4gICAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgb25DbGljazogaXNMaXN0T3BlbiAmJiAhaXNEaXNhYmxlZCA/IG9uQ2xvc2VMaXN0Q2xpY2sgOiBvbk9wZW5MaXN0Q2xpY2ssXG4gICAgICAgICAgc2lkZTogJ3JpZ2h0JyxcbiAgICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgICAgdHlwZTogJ2Fycm93RG93bidcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciB3cmFwQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbWJvQm94X19pbnB1dFdyYXAnLCB7XG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLS1wbGFpblRleHQnOiB0aGlzLmFzUGxhaW5UZXh0XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciwgbnVsbCwgZnVuY3Rpb24gKHN0eWxlc01lbW9pemVyKSB7XG4gICAgICAgIHZhciBzdHlsZXMgPSBzdHlsZXNNZW1vaXplcihldWlDb21ib0JveElucHV0U3R5bGVzKTtcbiAgICAgICAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpQ29tYm9Cb3hJbnB1dFdyYXBwZXIsICFzaW5nbGVTZWxlY3Rpb24gJiYgc3R5bGVzLm11bHRpU2VsZWN0LCBjb21wcmVzc2VkID8gc3R5bGVzLmNvbXByZXNzZWQgOiBzdHlsZXMudW5jb21wcmVzc2VkXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KF90aGlzMi5hc1BsYWluVGV4dCB8fCBzaG93UGxhY2Vob2xkZXIgPyBbc3R5bGVzLnBsYWluVGV4dC5wbGFpblRleHQsIGNvbXByZXNzZWQgPyBzdHlsZXMucGxhaW5UZXh0LmNvbXByZXNzZWQgOiBzdHlsZXMucGxhaW5UZXh0LnVuY29tcHJlc3NlZF0gOiBbXSksIFtpc0Rpc2FibGVkID8gc3R5bGVzLmRpc2FibGVkIDogaXNJbnZhbGlkID8gc3R5bGVzLmludmFsaWQgOiBpc0xpc3RPcGVuID8gc3R5bGVzLm9wZW4gOiB1bmRlZmluZWQsIGlzSW5Hcm91cCAmJiBzdHlsZXMuaW5Hcm91cF0pO1xuICAgICAgICB2YXIgZm9ybUxheW91dFN0eWxlcyA9IFtzdHlsZXMuZm9ybUxheW91dC5ldWlDb21ib0JveF9fZm9ybUNvbnRyb2xMYXlvdXQsICFzaW5nbGVTZWxlY3Rpb24gJiYgc3R5bGVzLmZvcm1MYXlvdXQubXVsdGlTZWxlY3RdO1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dCwgX2V4dGVuZHMoe1xuICAgICAgICAgIGljb246IGljb25cbiAgICAgICAgfSwgY2xpY2tQcm9wcywge1xuICAgICAgICAgIGlucHV0SWQ6IGlkLFxuICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICAgIGlzSW52YWxpZDogaXNJbnZhbGlkLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgICBwcmVwZW5kOiBwcmVwZW5kLFxuICAgICAgICAgIGFwcGVuZDogYXBwZW5kLFxuICAgICAgICAgIGNzczogZm9ybUxheW91dFN0eWxlc1xuICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgICAgY2xhc3NOYW1lOiB3cmFwQ2xhc3NlcyxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiY29tYm9Cb3hJbnB1dFwiLFxuICAgICAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICAgICAgdGFiSW5kZXg6IC0xIC8vIGJlY29tZXMgb25CbHVyIGV2ZW50J3MgcmVsYXRlZFRhcmdldCwgb3RoZXJ3aXNlIHJlbGF0ZWRUYXJnZXQgaXMgbnVsbCB3aGVuIGNsaWNraW5nIG9uIHRoaXMgZGl2XG4gICAgICAgIH0sIF90aGlzMi5yZW5kZXJQaWxscygpLCBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZCwge1xuICAgICAgICAgIG9wdGlvbjogX3RoaXMyLmFzUGxhaW5UZXh0ID8gc2VsZWN0ZWRPcHRpb25zID09PSBudWxsIHx8IHNlbGVjdGVkT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRPcHRpb25zWzBdIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGNsYXNzTmFtZVByZWZpeDogXCJldWlDb21ib0JveFBsYWluVGV4dFNlbGVjdGlvblwiLFxuICAgICAgICAgIG1hcmdpblNpemU6IFwieHhzXCJcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcImlucHV0XCIsIHtcbiAgICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBmb2N1c2VkT3B0aW9uSWQsXG4gICAgICAgICAgXCJhcmlhLWF1dG9jb21wbGV0ZVwiOiBcImxpc3RcIixcbiAgICAgICAgICBcImFyaWEtY29udHJvbHNcIjogaXNMaXN0T3BlbiA/IHJvb3RJZCgnbGlzdGJveCcpIDogJycsXG4gICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IGlzTGlzdE9wZW4sXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcmlhTGFiZWxsZWRieSxcbiAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBpc0ludmFsaWQsXG4gICAgICAgICAgY3NzOiBzdHlsZXMuZXVpQ29tYm9Cb3hJbnB1dCxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hfX2lucHV0XCIsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNvbWJvQm94U2VhcmNoSW5wdXRcIixcbiAgICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgb25CbHVyOiBfdGhpczIub25CbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF9vbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Gb2N1czogX3RoaXMyLm9uRm9jdXMsXG4gICAgICAgICAgb25LZXlEb3duOiBfdGhpczIub25LZXlEb3duLFxuICAgICAgICAgIHJlZjogX3RoaXMyLmlucHV0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBpbmxpbmVTaXplOiBfdGhpczIuYXNQbGFpblRleHQgfHwgc2hvd1BsYWNlaG9sZGVyID8gJzEwMCUnIDogX3RoaXMyLnN0YXRlLmlucHV0V2lkdGhcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBzaG93UGxhY2Vob2xkZXIgPyBwbGFjZWhvbGRlciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB2YWx1ZTogX3RoaXMyLnNlYXJjaFZhbHVlLFxuICAgICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgICAgIGF1dG9Db21wbGV0ZTogXCJvZmZcIlxuICAgICAgICAgIC8vIEZvcmNlIHRoZSBtZW51IHRvIHJlLW9wZW4gb24gZXZlcnkgaW5wdXQgY2xpY2sgLSBvbmx5IG5lY2Vzc2FyeSB3aGVuIHBsYWluIHRleHRcbiAgICAgICAgICAsXG4gICAgICAgICAgb25DbGljazogX3RoaXMyLmFzUGxhaW5UZXh0ID8gb25Gb2N1cyA6IHVuZGVmaW5lZCAvLyBUeXBlIHNoZW5hbmlnYW5zIC0gZXZlbnQgc2hvdWxkIGJlIG1vc3RseSB0aGUgc2FtZVxuICAgICAgICB9KSksIHJlbW92ZU9wdGlvbk1lc3NhZ2UpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuRXVpQ29tYm9Cb3hJbnB1dC5wcm9wVHlwZXMgPSB7XG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGZvY3VzZWRPcHRpb25JZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaGFzU2VsZWN0ZWRPcHRpb25zOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5hbnksXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0xpc3RPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBub0ljb246IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmFueSxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNsb3NlTGlzdENsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIG9uT3Blbkxpc3RDbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25SZW1vdmVPcHRpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICByb290SWQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2VsZWN0ZWRPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgdHJ1bmNhdGlvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgICAgLyoqXG4gICAgICAgICAqIE9wdGlvbmFsIGN1c3RvbSB0b29sdGlwIGNvbnRlbnQgZm9yIHRoZSBidXR0b25cbiAgICAgICAgICovXG4gICAgICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICAvKipcbiAgICAgICAgICogT3B0aW9uYWwgcHJvcHMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyAqKltFdWlUb29sVGlwXSgvIy9kaXNwbGF5L3Rvb2x0aXApKipcbiAgICAgICAgICovXG4gICAgICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGNzczogUHJvcFR5cGVzLmFueVxuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgdHJ1bmNhdGlvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgY3VzdG9tIHRvb2x0aXAgY29udGVudCBmb3IgdGhlIGJ1dHRvblxuICAgICAgICovXG4gICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgcHJvcHMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyAqKltFdWlUb29sVGlwXSgvIy9kaXNwbGF5L3Rvb2x0aXApKipcbiAgICAgICAqL1xuICAgIHRvb2xUaXBQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXNQbGFpblRleHQ6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgdG9nZ2xlQnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgcHJlcGVuZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICBhcHBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmltcG9ydCB7IGNzcyBhcyBfY3NzIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGxvZ2ljYWxTdHlsZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG4vKipcbiAqIERSWSB1dGlsIGZvciByZW5kZXJpbmcgYW4gb3B0aW9uIHdpdGggaXRzIHByZXBlbmQgYW5kIGFwcGVuZCBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3hPcHRpb25BcHBlbmRQcmVwZW5kID0gZnVuY3Rpb24gRXVpQ29tYm9Cb3hPcHRpb25BcHBlbmRQcmVwZW5kKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBvcHRpb24gPSBfcmVmLm9wdGlvbixcbiAgICBjbGFzc05hbWVQcmVmaXggPSBfcmVmLmNsYXNzTmFtZVByZWZpeCxcbiAgICBfcmVmJG1hcmdpblNpemUgPSBfcmVmLm1hcmdpblNpemUsXG4gICAgbWFyZ2luU2l6ZSA9IF9yZWYkbWFyZ2luU2l6ZSA9PT0gdm9pZCAwID8gJ3hzJyA6IF9yZWYkbWFyZ2luU2l6ZTtcbiAgdmFyIF91c2VFdWlUaGVtZSA9IHVzZUV1aVRoZW1lKCksXG4gICAgZXVpVGhlbWUgPSBfdXNlRXVpVGhlbWUuZXVpVGhlbWU7XG4gIHZhciBtYXJnaW4gPSBldWlUaGVtZS5zaXplW21hcmdpblNpemVdO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgKG9wdGlvbiA9PT0gbnVsbCB8fCBvcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbi5wcmVwZW5kKSAmJiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChjbGFzc05hbWVQcmVmaXgsIFwiX19wcmVwZW5kXCIpLFxuICAgIGNzczogLyojX19QVVJFX18qL19jc3MoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBsb2dpY2FsU3R5bGUoJ21hcmdpbi1yaWdodCcsIG1hcmdpbikpLCBjZW50ZXJJY29ucyksIFwiO2xhYmVsOkV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZDtcIilcbiAgfSwgb3B0aW9uLnByZXBlbmQpLCBjaGlsZHJlbiwgKG9wdGlvbiA9PT0gbnVsbCB8fCBvcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbi5hcHBlbmQpICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KGNsYXNzTmFtZVByZWZpeCwgXCJfX2FwcGVuZFwiKSxcbiAgICBjc3M6IC8qI19fUFVSRV9fKi9fY3NzKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbG9naWNhbFN0eWxlKCdtYXJnaW4tbGVmdCcsIG1hcmdpbikpLCBjZW50ZXJJY29ucyksIFwiO2xhYmVsOkV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZDtcIilcbiAgfSwgb3B0aW9uLmFwcGVuZCkpO1xufTtcblxuLy8gRml4IHZlcnRpY2FsIGFsaWdubWVudCBvZiBFdWlJY29ucyBpbiBwcmVwZW5kL2FwcGVuZCBub2Rlc1xudmFyIGNlbnRlckljb25zID0ge1xuICAnLmV1aUljb24nOiB7XG4gICAgZGlzcGxheTogJ2Jsb2NrJ1xuICB9XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcIm9uQ2xpY2tcIiwgXCJvbkNsaWNrQXJpYUxhYmVsXCIsIFwib25DbG9zZVwiLCBcIm9wdGlvblwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlCYWRnZSB9IGZyb20gJy4uLy4uL2JhZGdlJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IEV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGV1aUNvbWJvQm94UGlsbFN0eWxlcyB9IGZyb20gJy4vY29tYm9fYm94X3BpbGwuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94UGlsbCA9IGZ1bmN0aW9uIEV1aUNvbWJvQm94UGlsbChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnaG9sbG93JyA6IF9yZWYkY29sb3IsXG4gICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICBvbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgIG9uQ2xvc2UgPSBfcmVmLm9uQ2xvc2UsXG4gICAgb3B0aW9uID0gX3JlZi5vcHRpb24sXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbWJvQm94UGlsbCcsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlDb21ib0JveFBpbGxTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gc3R5bGVzLmV1aUNvbWJvQm94UGlsbDtcbiAgdmFyIG9uQ2xpY2tQcm9wcyA9IG9uQ2xpY2sgJiYgb25DbGlja0FyaWFMYWJlbCA/IHtcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uQ2xpY2tBcmlhTGFiZWw6IG9uQ2xpY2tBcmlhTGFiZWxcbiAgfSA6IHt9O1xuICB2YXIgY29udGVudCA9IF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hPcHRpb25BcHBlbmRQcmVwZW5kLCB7XG4gICAgb3B0aW9uOiBvcHRpb24sXG4gICAgY2xhc3NOYW1lUHJlZml4OiBcImV1aUNvbWJvQm94UGlsbFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpLXRleHRUcnVuY2F0ZVwiXG4gIH0sIGNoaWxkcmVuKSk7XG4gIGlmIChvbkNsb3NlKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hQaWxsLnJlbW92ZVNlbGVjdGlvblwiLFxuICAgICAgZGVmYXVsdDogXCJSZW1vdmUge2NoaWxkcmVufSBmcm9tIHNlbGVjdGlvbiBpbiB0aGlzIGdyb3VwXCIsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHJlbW92ZVNlbGVjdGlvbikge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQmFkZ2UsIF9leHRlbmRzKHtcbiAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpQ29tYm9Cb3hQaWxsXCIsXG4gICAgICAgIGljb25PbkNsaWNrOiBmdW5jdGlvbiBpY29uT25DbGljaygpIHtcbiAgICAgICAgICByZXR1cm4gb25DbG9zZShvcHRpb24pO1xuICAgICAgICB9LFxuICAgICAgICBpY29uT25DbGlja0FyaWFMYWJlbDogcmVtb3ZlU2VsZWN0aW9uLFxuICAgICAgICBpY29uU2lkZTogXCJyaWdodFwiLFxuICAgICAgICBpY29uVHlwZTogXCJjcm9zc1wiLFxuICAgICAgICB0aXRsZTogY2hpbGRyZW5cbiAgICAgIH0sIG9uQ2xpY2tQcm9wcywgcmVzdCksIGNvbnRlbnQpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNvbG9yOiBjb2xvcixcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpQ29tYm9Cb3hQaWxsXCIsXG4gICAgdGl0bGU6IGNoaWxkcmVuXG4gIH0sIHJlc3QsIG9uQ2xpY2tQcm9wcyksIGNvbnRlbnQpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbWF0aFdpdGhVbml0cyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpQ29tYm9Cb3hQaWxsU3R5bGVzID0gZnVuY3Rpb24gZXVpQ29tYm9Cb3hQaWxsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG5cbiAgLy8gRW5zdXJlIHRoZSBpbnB1dCBkb2Vzbid0IGRyb3AgdG8gdGhlIG5leHQgbGluZSB3aGVuIHRoZSBFdWlCYWRnZSBoYXMgYSB2ZXJ5IGxvbmcgdGV4dFxuICB2YXIgcGlsbE1heFdpZHRoID0gXCJjYWxjKDEwMCUgLSBcIi5jb25jYXQoZXVpVGhlbWUuc2l6ZS54eHMsIFwiIC0gXCIpLmNvbmNhdChldWlUaGVtZS5zaXplLmJhc2UsIFwiKVwiKTtcbiAgdmFyIHBpbGxIZWlnaHQgPSBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUubCwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4geCAtIDI7XG4gIH0pO1xuICB2YXIgcGlsbExpbmVIZWlnaHQgPSBtYXRoV2l0aFVuaXRzKHBpbGxIZWlnaHQsIGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHggLSAyO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBldWlDb21ib0JveFBpbGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWF4LXdpZHRoJywgcGlsbE1heFdpZHRoKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsIHBpbGxIZWlnaHQpLCBcIiBsaW5lLWhlaWdodDpcIiwgcGlsbExpbmVIZWlnaHQsIFwiO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tdmVydGljYWwnLCAnMXB4JyksIFwiJisuZXVpQmFkZ2V7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgMCksIFwiO30uZXVpQmFkZ2VfX3RleHR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjsuZXVpSWNvbntkaXNwbGF5OmJsb2NrO319O2xhYmVsOmV1aUNvbWJvQm94UGlsbDtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlGb3JtQ29udHJvbFN0eWxlcywgZXVpRm9ybUNvbnRyb2xEZWZhdWx0U2hhZG93LCBldWlGb3JtQ29udHJvbFRleHQgfSBmcm9tICcuLi8uLi9mb3JtL2Zvcm0uc3R5bGVzJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImtlZHUxaC1wbGFpblRleHRcIixcbiAgc3R5bGVzOiBcImFsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6dGV4dDtsYWJlbDpwbGFpblRleHQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwia2VkdTFoLXBsYWluVGV4dFwiLFxuICBzdHlsZXM6IFwiYWxpZ24taXRlbXM6Y2VudGVyO2N1cnNvcjp0ZXh0O2xhYmVsOnBsYWluVGV4dDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImRrenIxZy1tdWx0aVNlbGVjdFwiLFxuICBzdHlsZXM6IFwiZmxleC13cmFwOndyYXA7bGFiZWw6bXVsdGlTZWxlY3Q7XCJcbn0gOiB7XG4gIG5hbWU6IFwiZGt6cjFnLW11bHRpU2VsZWN0XCIsXG4gIHN0eWxlczogXCJmbGV4LXdyYXA6d3JhcDtsYWJlbDptdWx0aVNlbGVjdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlDb21ib0JveElucHV0U3R5bGVzID0gZnVuY3Rpb24gZXVpQ29tYm9Cb3hJbnB1dFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgZm9ybVN0eWxlcyA9IGV1aUZvcm1Db250cm9sU3R5bGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHJldHVybiB7XG4gICAgLy8gV3JhcHBlciB3aGljaCB2aXN1YWxseSBtaW1pY3MgYSBmb3JtIGNvbnRyb2xcbiAgICBldWlDb21ib0JveElucHV0V3JhcHBlcjogLyojX19QVVJFX18qL2NzcyhldWlGb3JtQ29udHJvbERlZmF1bHRTaGFkb3coZXVpVGhlbWVDb250ZXh0KSwgXCIgZGlzcGxheTpmbGV4OztsYWJlbDpldWlDb21ib0JveElucHV0V3JhcHBlcjtcIiksXG4gICAgbXVsdGlTZWxlY3Q6IF9yZWYyLFxuICAgIHVuY29tcHJlc3NlZDogXCJcXG4gICAgICBcIi5jb25jYXQoZm9ybVN0eWxlcy51bmNvbXByZXNzZWQsIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCAnYXV0bycpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygncGFkZGluZy12ZXJ0aWNhbCcsIGV1aVRoZW1lLnNpemUucyksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBldWlUaGVtZS5zaXplLnMpLCBcIlxcbiAgICAgIGNvbHVtbi1nYXA6IFwiKS5jb25jYXQoZXVpVGhlbWUuc2l6ZS5zLCBcIjtcXG4gICAgICByb3ctZ2FwOiBcIikuY29uY2F0KGV1aVRoZW1lLnNpemUueHMsIFwiO1xcbiAgICBcIiksXG4gICAgY29tcHJlc3NlZDogLyojX19QVVJFX18qL2Nzcyhmb3JtU3R5bGVzLmNvbXByZXNzZWQsIFwiIFwiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCAnYXV0bycpLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy12ZXJ0aWNhbCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy1sZWZ0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiIGNvbHVtbi1nYXA6XCIsIGV1aVRoZW1lLnNpemUueHMsIFwiO3Jvdy1nYXA6XCIsIGV1aVRoZW1lLnNpemUueHhzLCBcIjs7bGFiZWw6Y29tcHJlc3NlZDtcIiksXG4gICAgcGxhaW5UZXh0OiB7XG4gICAgICBwbGFpblRleHQ6IF9yZWYsXG4gICAgICBjb21wcmVzc2VkOiBcIlxcbiAgICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIGV1aVRoZW1lLnNpemUucyksIFwiXFxuICAgICAgXCIpLFxuICAgICAgdW5jb21wcmVzc2VkOiBcIlxcbiAgICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctbGVmdCcsIGV1aVRoZW1lLnNpemUubSksIFwiXFxuICAgICAgXCIpXG4gICAgfSxcbiAgICBpbnZhbGlkOiAvKiNfX1BVUkVfXyovY3NzKGZvcm1TdHlsZXMuaW52YWxpZCwgXCI7bGFiZWw6aW52YWxpZDtcIiksXG4gICAgZGlzYWJsZWQ6IC8qI19fUFVSRV9fKi9jc3MoZm9ybVN0eWxlcy5kaXNhYmxlZCwgXCI7bGFiZWw6ZGlzYWJsZWQ7XCIpLFxuICAgIG9wZW46IC8qI19fUFVSRV9fKi9jc3MoZm9ybVN0eWxlcy5mb2N1cywgXCI7bGFiZWw6b3BlbjtcIiksXG4gICAgaW5Hcm91cDogLyojX19QVVJFX18qL2Nzcyhmb3JtU3R5bGVzLmluR3JvdXAsIFwiO2xhYmVsOmluR3JvdXA7XCIpLFxuICAgIC8vIEFjdHVhbCBpbnB1dCBlbGVtZW50LCB3aGljaCBoYXMgdmFyaWFibGUgd2lkdGggZGVwZW5kaW5nIG9uIGl0cyB2YWx1ZVxuICAgIGV1aUNvbWJvQm94SW5wdXQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnaGVpZ2h0JywgZXVpVGhlbWUuc2l6ZS5sKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsICcycHgnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIGV1aUZvcm1Db250cm9sVGV4dChldWlUaGVtZUNvbnRleHQpLCBcIiBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50OyY6ZGlzYWJsZWR7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZFRleHQsIFwiO31hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50O2JvcmRlcjpub25lIWltcG9ydGFudDtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50O291dGxpbmU6bm9uZSFpbXBvcnRhbnQ7O2xhYmVsOmV1aUNvbWJvQm94SW5wdXQ7XCIpLFxuICAgIC8vIEV1aUZvcm1Db250cm9sTGF5b3V0IG92ZXJyaWRlc1xuICAgIGZvcm1MYXlvdXQ6IHtcbiAgICAgIGV1aUNvbWJvQm94X19mb3JtQ29udHJvbExheW91dDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlDb21ib0JveF9fZm9ybUNvbnRyb2xMYXlvdXQ7XCIpLFxuICAgICAgLy8gQWxsb3cgdGhlIGZvcm0gY29udHJvbCB0byBleHBhbmQgdG8gYW55IGhlaWdodCB0byBhY2NvbW1vZGF0ZSBtdWx0aXBsZSByb3dzIG9mIHBpbGxzXG4gICAgICBtdWx0aVNlbGVjdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdoZWlnaHQnLCAnYXV0bycpLCBcIjs7bGFiZWw6bXVsdGlTZWxlY3Q7XCIpXG4gICAgfVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCJdLFxuICBfZXhjbHVkZWQyID0gW1wia2V5XCIsIFwiaXNHcm91cExhYmVsT3B0aW9uXCIsIFwibGFiZWxcIiwgXCJ2YWx1ZVwiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIiwgXCJ0cnVuY2F0aW9uUHJvcHNcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJkYXRhLXRlc3Qtc3VialwiLCBcImFjdGl2ZU9wdGlvbkluZGV4XCIsIFwiYXJlQWxsT3B0aW9uc1NlbGVjdGVkXCIsIFwiY3VzdG9tT3B0aW9uVGV4dFwiLCBcImZ1bGxXaWR0aFwiLCBcImdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWVcIiwgXCJpc0Nhc2VTZW5zaXRpdmVcIiwgXCJpc0xvYWRpbmdcIiwgXCJsaXN0UmVmXCIsIFwibWF0Y2hpbmdPcHRpb25zXCIsIFwib25DbG9zZUxpc3RcIiwgXCJvbkNyZWF0ZU9wdGlvblwiLCBcIm9uT3B0aW9uQ2xpY2tcIiwgXCJvbk9wdGlvbkVudGVyS2V5XCIsIFwib25TY3JvbGxcIiwgXCJvcHRpb25zXCIsIFwicmVuZGVyT3B0aW9uXCIsIFwicm9vdElkXCIsIFwicm93SGVpZ2h0XCIsIFwic2Nyb2xsVG9JbmRleFwiLCBcInNlYXJjaFZhbHVlXCIsIFwic2VsZWN0ZWRPcHRpb25zXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwiZGVsaW1pdGVyXCIsIFwidHJ1bmNhdGlvblByb3BzXCIsIFwibGlzdGJveEFyaWFMYWJlbFwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRml4ZWRTaXplTGlzdCB9IGZyb20gJ3JlYWN0LXdpbmRvdyc7XG5pbXBvcnQgeyBSZW5kZXJXaXRoRXVpU3R5bGVzTWVtb2l6ZXIgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtIH0gZnJvbSAnLi4vLi4vZmxleCc7XG5pbXBvcnQgeyBFdWlIaWdobGlnaHQgfSBmcm9tICcuLi8uLi9oaWdobGlnaHQnO1xuaW1wb3J0IHsgRXVpTWFyayB9IGZyb20gJy4uLy4uL21hcmsnO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gJy4uLy4uL3RleHQnO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuLi8uLi9sb2FkaW5nJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IEV1aUZpbHRlclNlbGVjdEl0ZW0gfSBmcm9tICcuLi8uLi9maWx0ZXJfZ3JvdXAvZmlsdGVyX3NlbGVjdF9pdGVtJztcbmltcG9ydCB7IEV1aUJhZGdlIH0gZnJvbSAnLi4vLi4vYmFkZ2UnO1xuaW1wb3J0IHsgRXVpVGV4dFRydW5jYXRlIH0gZnJvbSAnLi4vLi4vdGV4dF90cnVuY2F0ZSc7XG5pbXBvcnQgeyBFdWlJbnB1dFBvcG92ZXJXaWR0aENvbnRleHQgfSBmcm9tICcuLi8uLi9wb3BvdmVyL2lucHV0X3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hPcHRpb25BcHBlbmRQcmVwZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hUaXRsZSB9IGZyb20gJy4vY29tYm9fYm94X3RpdGxlJztcbmltcG9ydCB7IGV1aUNvbWJvQm94T3B0aW9uTGlzdFN0eWxlcywgTElTVF9NQVhfSEVJR0hUIH0gZnJvbSAnLi9jb21ib19ib3hfb3B0aW9uc19saXN0LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGhpdEVudGVyQmFkZ2UgPSBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCB7XG4gIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW50ZXJCYWRnZVwiLFxuICBjb2xvcjogXCJob2xsb3dcIixcbiAgaWNvblR5cGU6IFwicmV0dXJuS2V5XCIsXG4gIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCJcbn0pO1xuZXhwb3J0IHZhciBFdWlDb21ib0JveE9wdGlvbnNMaXN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aUNvbWJvQm94T3B0aW9uc0xpc3QoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlDb21ib0JveE9wdGlvbnNMaXN0KTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlDb21ib0JveE9wdGlvbnNMaXN0LCBbXS5jb25jYXQoYXJncykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJsaXN0UmVmXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZXRMaXN0UmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RSZWYgPSByZWY7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIkxpc3RJbm5lckVsZW1lbnRcIiwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHt9LCByZXN0LCB7XG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdGhpcy5wcm9wcy5saXN0Ym94QXJpYUxhYmVsLFxuICAgICAgICBpZDogX3RoaXMucHJvcHMucm9vdElkKCdsaXN0Ym94JyksXG4gICAgICAgIHJvbGU6IFwibGlzdGJveFwiLFxuICAgICAgICB0YWJJbmRleDogXCIwXCJcbiAgICAgIH0pLCBjaGlsZHJlbik7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIkxpc3RSb3dcIiwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgX29wdGlvbiRrZXk7XG4gICAgICB2YXIgZGF0YSA9IF9yZWYyLmRhdGEsXG4gICAgICAgIGluZGV4ID0gX3JlZjIuaW5kZXgsXG4gICAgICAgIHN0eWxlID0gX3JlZjIuc3R5bGU7XG4gICAgICB2YXIgb3B0aW9uID0gZGF0YVtpbmRleF07XG4gICAgICB2YXIga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgICAgaXNHcm91cExhYmVsT3B0aW9uID0gb3B0aW9uLmlzR3JvdXBMYWJlbE9wdGlvbixcbiAgICAgICAgbGFiZWwgPSBvcHRpb24ubGFiZWwsXG4gICAgICAgIHZhbHVlID0gb3B0aW9uLnZhbHVlLFxuICAgICAgICBwcmVwZW5kID0gb3B0aW9uLnByZXBlbmQsXG4gICAgICAgIGFwcGVuZCA9IG9wdGlvbi5hcHBlbmQsXG4gICAgICAgIF90cnVuY2F0aW9uUHJvcHMgPSBvcHRpb24udHJ1bmNhdGlvblByb3BzLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9wdGlvbiwgX2V4Y2x1ZGVkMik7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wcy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wcy5vbk9wdGlvbkNsaWNrLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wcy5yZW5kZXJPcHRpb24sXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMuc2VhcmNoVmFsdWUsXG4gICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzLnJvb3RJZDtcbiAgICAgIHZhciBoYXNUcnVuY2F0aW9uUHJvcHMgPSBfdGhpcy5wcm9wcy50cnVuY2F0aW9uUHJvcHMgfHwgX3RydW5jYXRpb25Qcm9wcztcbiAgICAgIHZhciB0cnVuY2F0aW9uUHJvcHMgPSBoYXNUcnVuY2F0aW9uUHJvcHMgPyAvLyBJbmRpdmlkdWFsIHRydW5jYXRpb24gc2V0dGluZ3Mgc2hvdWxkIG92ZXJyaWRlIGNvbXBvbmVudCBwcm9wXG4gICAgICBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIF90aGlzLnByb3BzLnRydW5jYXRpb25Qcm9wcyksIF90cnVuY2F0aW9uUHJvcHMpIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGlzR3JvdXBMYWJlbE9wdGlvbikge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAga2V5OiBrZXkgIT09IG51bGwgJiYga2V5ICE9PSB2b2lkIDAgPyBrZXkgOiBsYWJlbCxcbiAgICAgICAgICBzdHlsZTogc3R5bGVcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlDb21ib0JveFRpdGxlLCBudWxsLCBwcmVwZW5kLCBsYWJlbCwgYXBwZW5kKSk7XG4gICAgICB9XG4gICAgICB2YXIgY2hlY2tlZCA9IHVuZGVmaW5lZDtcbiAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAmJiBzZWxlY3RlZE9wdGlvbnNbMF0ubGFiZWwgPT09IGxhYmVsICYmIHNlbGVjdGVkT3B0aW9uc1swXS5rZXkgPT09IGtleSkge1xuICAgICAgICBjaGVja2VkID0gJ29uJztcbiAgICAgIH1cbiAgICAgIHZhciBvcHRpb25Jc0ZvY3VzZWQgPSBhY3RpdmVPcHRpb25JbmRleCA9PT0gaW5kZXg7XG4gICAgICB2YXIgb3B0aW9uSXNEaXNhYmxlZCA9IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSAmJiBvcHRpb24uZGlzYWJsZWQgPT09IHRydWU7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGaWx0ZXJTZWxlY3RJdGVtLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAga2V5OiAoX29wdGlvbiRrZXkgPSBvcHRpb24ua2V5KSAhPT0gbnVsbCAmJiBfb3B0aW9uJGtleSAhPT0gdm9pZCAwID8gX29wdGlvbiRrZXkgOiBvcHRpb24ubGFiZWwsXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgaWYgKG9uT3B0aW9uQ2xpY2spIHtcbiAgICAgICAgICAgIG9uT3B0aW9uQ2xpY2sob3B0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGlzRm9jdXNlZDogb3B0aW9uSXNGb2N1c2VkLFxuICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICBzaG93SWNvbnM6IHNpbmdsZVNlbGVjdGlvbiA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgaWQ6IHJvb3RJZChcIl9vcHRpb24tXCIuY29uY2F0KGluZGV4KSksXG4gICAgICAgIHRpdGxlOiBsYWJlbFxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19jb250ZW50V3JhcHBlclwiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94T3B0aW9uQXBwZW5kUHJlcGVuZCwge1xuICAgICAgICBvcHRpb246IG9wdGlvbixcbiAgICAgICAgY2xhc3NOYW1lUHJlZml4OiBcImV1aUNvbWJvQm94T3B0aW9uXCIsXG4gICAgICAgIG1hcmdpblNpemU6IFwic1wiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFwiXG4gICAgICB9LCByZW5kZXJPcHRpb24gPyByZW5kZXJPcHRpb24ob3B0aW9uLCBzZWFyY2hWYWx1ZSwgJ2V1aUNvbWJvQm94T3B0aW9uX19yZW5kZXJPcHRpb24nKSA6IF90aGlzLnJlbmRlclRydW5jYXRlZE9wdGlvbihsYWJlbCwgdHJ1bmNhdGlvblByb3BzKSkpLCBvcHRpb25Jc0ZvY3VzZWQgJiYgIW9wdGlvbklzRGlzYWJsZWQgPyBoaXRFbnRlckJhZGdlIDogbnVsbCkpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvcHRpb25XaWR0aFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZXRPcHRpb25XaWR0aFwiLCBmdW5jdGlvbiAod2lkdGgpIHtcbiAgICAgIF90aGlzLm9wdGlvbldpZHRoID0gd2lkdGg7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlbmRlclRydW5jYXRlZE9wdGlvblwiLCBmdW5jdGlvbiAodGV4dCwgdHJ1bmNhdGlvblByb3BzKSB7XG4gICAgICB2YXIgc2VhcmNoVmFsdWUgPSBfdGhpcy5wcm9wcy5zZWFyY2hWYWx1ZS50cmltKCk7XG4gICAgICBpZiAoIXRydW5jYXRpb25Qcm9wcyAmJiAhc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgLy8gRGVmYXVsdCB0byBDU1MgdGV4dC1vdmVyZmxvd1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgIH1cbiAgICAgIGlmICghc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGV4dFRydW5jYXRlLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgd2lkdGg6IF90aGlzLm9wdGlvbldpZHRoLFxuICAgICAgICAgIG9uUmVzaXplOiBfdGhpcy5zZXRPcHRpb25XaWR0aFxuICAgICAgICB9LCB0cnVuY2F0aW9uUHJvcHMsIHtcbiAgICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICAgIH0pLCBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHZhciBzZWFyY2hQb3NpdGlvblN0YXJ0ID0gX3RoaXMucHJvcHMuaXNDYXNlU2Vuc2l0aXZlID8gdGV4dC5pbmRleE9mKHNlYXJjaFZhbHVlKSA6IHRleHQudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgdmFyIHNlYXJjaFBvc2l0aW9uQ2VudGVyID0gc2VhcmNoUG9zaXRpb25TdGFydCArIE1hdGguZmxvb3Ioc2VhcmNoVmFsdWUubGVuZ3RoIC8gMik7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUZXh0VHJ1bmNhdGUsIF9leHRlbmRzKHtcbiAgICAgICAgd2lkdGg6IF90aGlzLm9wdGlvbldpZHRoLFxuICAgICAgICBvblJlc2l6ZTogX3RoaXMuc2V0T3B0aW9uV2lkdGhcbiAgICAgIH0sIHRydW5jYXRpb25Qcm9wcywge1xuICAgICAgICAvLyBXaGVuIHNlYXJjaGluZywgZG9uJ3QgYWxsb3cgb3ZlcnJpZGluZyB0aGUgdHJ1bmNhdGlvbiBzZXR0aW5nc1xuICAgICAgICB0cnVuY2F0aW9uOiBcInN0YXJ0RW5kXCIsXG4gICAgICAgIHRydW5jYXRpb25Qb3NpdGlvbjogc2VhcmNoUG9zaXRpb25DZW50ZXIsXG4gICAgICAgIHRleHQ6IHRleHRcbiAgICAgIH0pLCBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgdGV4dC5sZW5ndGggPj0gc2VhcmNoVmFsdWUubGVuZ3RoID8gX19fRW1vdGlvbkpTWChFdWlIaWdobGlnaHQsIHtcbiAgICAgICAgICBzZWFyY2g6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgIHN0cmljdDogX3RoaXMucHJvcHMuaXNDYXNlU2Vuc2l0aXZlXG4gICAgICAgIH0sIHRleHQpIDpcbiAgICAgICAgLy8gSWYgdGhlIGF2YWlsYWJsZSB0cnVuY2F0ZWQgdGV4dCBpcyBzaG9ydGVyIHRoYW4gdGhlIGZ1bGwgc2VhcmNoIHN0cmluZyxcbiAgICAgICAgLy8ganVzdCBoaWdobGlnaHQgdGhlIGVudGlyZSB0cnVuY2F0ZWQgdGV4dFxuICAgICAgICBfX19FbW90aW9uSlNYKEV1aU1hcmssIG51bGwsIHRleHQpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmICh0aGlzLmxpc3RSZWYgJiYgdHlwZW9mIHRoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXggIT09ICd1bmRlZmluZWQnICYmIHRoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXggIT09IHByZXZQcm9wcy5hY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgICB0aGlzLmxpc3RSZWYuc2Nyb2xsVG9JdGVtKHRoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgsICdhdXRvJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBkYXRhVGVzdFN1YmogPSBfdGhpcyRwcm9wczJbJ2RhdGEtdGVzdC1zdWJqJ10sXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMyLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICBhcmVBbGxPcHRpb25zU2VsZWN0ZWQgPSBfdGhpcyRwcm9wczIuYXJlQWxsT3B0aW9uc1NlbGVjdGVkLFxuICAgICAgICBjdXN0b21PcHRpb25UZXh0ID0gX3RoaXMkcHJvcHMyLmN1c3RvbU9wdGlvblRleHQsXG4gICAgICAgIGZ1bGxXaWR0aCA9IF90aGlzJHByb3BzMi5mdWxsV2lkdGgsXG4gICAgICAgIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSxcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlID0gX3RoaXMkcHJvcHMyLmlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMyLmlzTG9hZGluZyxcbiAgICAgICAgbGlzdFJlZiA9IF90aGlzJHByb3BzMi5saXN0UmVmLFxuICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRwcm9wczIubWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICBvbkNsb3NlTGlzdCA9IF90aGlzJHByb3BzMi5vbkNsb3NlTGlzdCxcbiAgICAgICAgb25DcmVhdGVPcHRpb24gPSBfdGhpcyRwcm9wczIub25DcmVhdGVPcHRpb24sXG4gICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczIub25PcHRpb25DbGljayxcbiAgICAgICAgb25PcHRpb25FbnRlcktleSA9IF90aGlzJHByb3BzMi5vbk9wdGlvbkVudGVyS2V5LFxuICAgICAgICBvblNjcm9sbCA9IF90aGlzJHByb3BzMi5vblNjcm9sbCxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMi5vcHRpb25zLFxuICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczIucmVuZGVyT3B0aW9uLFxuICAgICAgICByb290SWQgPSBfdGhpcyRwcm9wczIucm9vdElkLFxuICAgICAgICByb3dIZWlnaHQgPSBfdGhpcyRwcm9wczIucm93SGVpZ2h0LFxuICAgICAgICBzY3JvbGxUb0luZGV4ID0gX3RoaXMkcHJvcHMyLnNjcm9sbFRvSW5kZXgsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMyLnNlYXJjaFZhbHVlLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczIuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICBkZWxpbWl0ZXIgPSBfdGhpcyRwcm9wczIuZGVsaW1pdGVyLFxuICAgICAgICB0cnVuY2F0aW9uUHJvcHMgPSBfdGhpcyRwcm9wczIudHJ1bmNhdGlvblByb3BzLFxuICAgICAgICBsaXN0Ym94QXJpYUxhYmVsID0gX3RoaXMkcHJvcHMyLmxpc3Rib3hBcmlhTGFiZWwsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQzKTtcbiAgICAgIHZhciBlbXB0eVN0YXRlQ29udGVudDtcbiAgICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgICAgICAgIGd1dHRlclNpemU6IFwic1wiLFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgIHJlc3BvbnNpdmU6IGZhbHNlXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgICBncm93OiBmYWxzZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgICAgc2l6ZTogXCJtXCJcbiAgICAgICAgfSkpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5sb2FkaW5nT3B0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiTG9hZGluZyBvcHRpb25zXCJcbiAgICAgICAgfSkpKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVmFsdWUgJiYgbWF0Y2hpbmdPcHRpb25zICYmIG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKG9uQ3JlYXRlT3B0aW9uICYmIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICBpZiAoZGVsaW1pdGVyICYmIHNlYXJjaFZhbHVlLmluY2x1ZGVzKGRlbGltaXRlcikpIHtcbiAgICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2VtcHR5U3RhdGVUZXh0XCJcbiAgICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmRlbGltaXRlck1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgZGVmYXVsdDogXCJBZGQgZWFjaCBpdGVtIHNlcGFyYXRlZCBieSB7ZGVsaW1pdGVyfVwiLFxuICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICBkZWxpbWl0ZXI6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgZGVsaW1pdGVyKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSksIGhpdEVudGVyQmFkZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb25Gb3JWYWx1ZSA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoe1xuICAgICAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmU6IGlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9uc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb25Gb3JWYWx1ZSkge1xuICAgICAgICAgICAgICAvLyBEaXNhbGxvdyBkdXBsaWNhdGUgY3VzdG9tIG9wdGlvbnMuXG4gICAgICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5hbHJlYWR5QWRkZWRcIixcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBcIntsYWJlbH0gaGFzIGFscmVhZHkgYmVlbiBhZGRlZFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgc2VsZWN0ZWRPcHRpb25Gb3JWYWx1ZS5sYWJlbClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBoaWdobGlnaHRTZWFyY2hWYWx1ZSA9IGZ1bmN0aW9uIGhpZ2hsaWdodFNlYXJjaFZhbHVlKHRleHQsIHNlYXJjaFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoLyhcXHtzZWFyY2hWYWx1ZX0pLywgJ2dpJyk7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnRzID0gdGV4dC5zcGxpdChyZWcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2VtcHR5U3RhdGVUZXh0XCJcbiAgICAgICAgICAgICAgICB9LCBwYXJ0cy5tYXAoZnVuY3Rpb24gKHBhcnQsIGlkeCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQubWF0Y2gocmVnKSA/IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGlkeFxuICAgICAgICAgICAgICAgICAgfSwgc2VhcmNoVmFsdWUpIDogcGFydDtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19jb250ZW50V3JhcHBlclwiXG4gICAgICAgICAgICAgIH0sIGN1c3RvbU9wdGlvblRleHQgPyBoaWdobGlnaHRTZWFyY2hWYWx1ZShjdXN0b21PcHRpb25UZXh0LCBzZWFyY2hWYWx1ZSkgOiBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19lbXB0eVN0YXRlVGV4dFwiXG4gICAgICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3QuY3JlYXRlQ3VzdG9tT3B0aW9uXCIsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXCJBZGQge3NlYXJjaFZhbHVlfSBhcyBhIGN1c3RvbSBvcHRpb25cIixcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIHNlYXJjaFZhbHVlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpLCBoaXRFbnRlckJhZGdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3Qubm9NYXRjaGluZ09wdGlvbnNcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwie3NlYXJjaFZhbHVlfSBkb2Vzbid0IG1hdGNoIGFueSBvcHRpb25zXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVmFsdWU6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgc2VhcmNoVmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3Qubm9BdmFpbGFibGVPcHRpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUaGVyZSBhcmVuJ3QgYW55IG9wdGlvbnMgYXZhaWxhYmxlXCJcbiAgICAgICAgfSkpO1xuICAgICAgfSBlbHNlIGlmIChhcmVBbGxPcHRpb25zU2VsZWN0ZWQpIHtcbiAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmFsbE9wdGlvbnNTZWxlY3RlZFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiWW91J3ZlIHNlbGVjdGVkIGFsbCBhdmFpbGFibGUgb3B0aW9uc1wiXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIHZhciBudW1WaXNpYmxlT3B0aW9ucyA9IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggPCA3ID8gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCA6IDc7XG4gICAgICB2YXIgaGVpZ2h0ID0gbnVtVmlzaWJsZU9wdGlvbnMgKiAocm93SGVpZ2h0ICsgMSk7IC8vIEFkZCBvbmUgZm9yIHRoZSBib3JkZXJcblxuICAgICAgLy8gYm91bmRlZCBieSBtYXgtaGVpZ2h0IG9mIC5ldWlDb21ib0JveE9wdGlvbnNMaXN0XG4gICAgICB2YXIgYm91bmRlZEhlaWdodCA9IGhlaWdodCA+IExJU1RfTUFYX0hFSUdIVCA/IExJU1RfTUFYX0hFSUdIVCA6IGhlaWdodDtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlbmRlcldpdGhFdWlTdHlsZXNNZW1vaXplciwgbnVsbCwgZnVuY3Rpb24gKHN0eWxlc01lbW9pemVyKSB7XG4gICAgICAgIHZhciBzdHlsZXMgPSBzdHlsZXNNZW1vaXplcihldWlDb21ib0JveE9wdGlvbkxpc3RTdHlsZXMpO1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY3NzOiBzdHlsZXMuZXVpQ29tYm9Cb3hPcHRpb25MaXN0LFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0XCIsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBjbGFzc05hbWVzKCdjb21ib0JveE9wdGlvbnNMaXN0JywgZGF0YVRlc3RTdWJqKSxcbiAgICAgICAgICByZWY6IGxpc3RSZWZcbiAgICAgICAgfSwgcmVzdCksIGVtcHR5U3RhdGVDb250ZW50ID8gX19fRW1vdGlvbkpTWChFdWlUZXh0LCB7XG4gICAgICAgICAgc2l6ZTogXCJ4c1wiLFxuICAgICAgICAgIGNzczogc3R5bGVzLmV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX2VtcHR5LFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0X19lbXB0eVwiXG4gICAgICAgIH0sIGVtcHR5U3RhdGVDb250ZW50KSA6IF9fX0Vtb3Rpb25KU1goRml4ZWRTaXplTGlzdCwge1xuICAgICAgICAgIGNzczogc3R5bGVzLmV1aUNvbWJvQm94T3B0aW9uTGlzdF9fdmlydHVhbGl6YXRpb24sXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX3ZpcnR1YWxpemF0aW9uXCIsXG4gICAgICAgICAgaGVpZ2h0OiBib3VuZGVkSGVpZ2h0LFxuICAgICAgICAgIG9uU2Nyb2xsOiBvblNjcm9sbCxcbiAgICAgICAgICBpdGVtQ291bnQ6IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgaXRlbVNpemU6IHJvd0hlaWdodCxcbiAgICAgICAgICBpdGVtRGF0YTogbWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICAgIHJlZjogX3RoaXMyLnNldExpc3RSZWYsXG4gICAgICAgICAgaW5uZXJFbGVtZW50VHlwZTogX3RoaXMyLkxpc3RJbm5lckVsZW1lbnQsXG4gICAgICAgICAgd2lkdGg6IF90aGlzMi5jb250ZXh0XG4gICAgICAgIH0sIF90aGlzMi5MaXN0Um93KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShFdWlDb21ib0JveE9wdGlvbnNMaXN0LCBcImNvbnRleHRUeXBlXCIsIEV1aUlucHV0UG9wb3ZlcldpZHRoQ29udGV4dCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICAnZGF0YS10ZXN0LXN1YmonOiAnJyxcbiAgcm93SGVpZ2h0OiAyOSxcbiAgLy8gcm93IGhlaWdodCBvZiBkZWZhdWx0IG9wdGlvbiByZW5kZXJlclxuICBpc0Nhc2VTZW5zaXRpdmU6IGZhbHNlXG59KTtcbkV1aUNvbWJvQm94T3B0aW9uc0xpc3QucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgYWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGFyZUFsbE9wdGlvbnNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGxpc3Rib3hBcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGN1c3RvbSB0ZXh0IG9wdGlvbi4gWW91IGNhbiB1c2UgYHtzZWFyY2hWYWx1ZX1gIGluc2lkZSB5b3VyIHN0cmluZyB0byBiZXR0ZXIgY3VzdG9taXplIHlvdXIgdGV4dC5cbiAgICAgKiBJdCB3b24ndCBzaG93IGlmIHRoZXJlJ3Mgbm8gb25DcmVhdGVPcHRpb24uXG4gICAgICovXG4gIGN1c3RvbU9wdGlvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuICBpc0Nhc2VTZW5zaXRpdmU6IFByb3BUeXBlcy5ib29sLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBsaXN0UmVmOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIG1hdGNoaW5nT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAgIC8qKlxuICAgICAgICAgKiBPcHRpb25hbCBjdXN0b20gdG9vbHRpcCBjb250ZW50IGZvciB0aGUgYnV0dG9uXG4gICAgICAgICAqL1xuICAgICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgLyoqXG4gICAgICAgICAqIE9wdGlvbmFsIHByb3BzIHRvIHBhc3MgdG8gdGhlIHVuZGVybHlpbmcgKipbRXVpVG9vbFRpcF0oLyMvZGlzcGxheS90b29sdGlwKSoqXG4gICAgICAgICAqL1xuICAgICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIGN1c3RvbSB0b29sdGlwIGNvbnRlbnQgZm9yIHRoZSBidXR0b25cbiAgICAgICAqL1xuICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIHByb3BzIHRvIHBhc3MgdG8gdGhlIHVuZGVybHlpbmcgKipbRXVpVG9vbFRpcF0oLyMvZGlzcGxheS90b29sdGlwKSoqXG4gICAgICAgKi9cbiAgICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgb25DbG9zZUxpc3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uQ3JlYXRlT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25PcHRpb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uT3B0aW9uRW50ZXJLZXk6IFByb3BUeXBlcy5mdW5jLFxuICBvblNjcm9sbDogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogQXJyYXkgb2YgRXVpQ29tYm9Cb3hPcHRpb25PcHRpb24gb2JqZWN0cy4gU2VlICNFdWlDb21ib0JveE9wdGlvbk9wdGlvblxuICAgICAqL1xuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgdHJ1bmNhdGlvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIHJlbmRlck9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIHJvb3RJZDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICByb3dIZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgc2Nyb2xsVG9JbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2VsZWN0ZWRPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgdHJ1bmNhdGlvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgICAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhc1BsYWluVGV4dDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICBkZWxpbWl0ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic2VhcmNoXCIsIFwic3RyaWN0XCIsIFwiaGlnaGxpZ2h0QWxsXCIsIFwiaGFzU2NyZWVuUmVhZGVySGVscFRleHRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpTWFyayB9IGZyb20gJy4uL21hcmsnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0QWxsIH0gZnJvbSAnLi9faGlnaGxpZ2h0X2FsbCc7XG5pbXBvcnQgeyBIaWdobGlnaHRGaXJzdCB9IGZyb20gJy4vX2hpZ2hsaWdodF9maXJzdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlIaWdobGlnaHQgPSBmdW5jdGlvbiBFdWlIaWdobGlnaHQoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHNlYXJjaCA9IF9yZWYuc2VhcmNoLFxuICAgIF9yZWYkc3RyaWN0ID0gX3JlZi5zdHJpY3QsXG4gICAgc3RyaWN0ID0gX3JlZiRzdHJpY3QgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRzdHJpY3QsXG4gICAgX3JlZiRoaWdobGlnaHRBbGwgPSBfcmVmLmhpZ2hsaWdodEFsbCxcbiAgICBoaWdobGlnaHRBbGwgPSBfcmVmJGhpZ2hsaWdodEFsbCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGhpZ2hsaWdodEFsbCxcbiAgICBfcmVmJGhhc1NjcmVlblJlYWRlckggPSBfcmVmLmhhc1NjcmVlblJlYWRlckhlbHBUZXh0LFxuICAgIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ID0gX3JlZiRoYXNTY3JlZW5SZWFkZXJIID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRoYXNTY3JlZW5SZWFkZXJILFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGhhc1NlYXJjaCA9IHNlYXJjaCAmJiBzZWFyY2gubGVuZ3RoID4gMDtcbiAgdmFyIEhpZ2hsaWdodENvbXBvbmVudCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBDb21wb25lbnQgPSBmdW5jdGlvbiBDb21wb25lbnQoX3JlZjIpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpTWFyaywge1xuICAgICAgICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDogaGFzU2NyZWVuUmVhZGVySGVscFRleHRcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9O1xuICAgIENvbXBvbmVudC5wcm9wVHlwZXMgPSB7XG4gICAgICBjaGlsZHJlbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG4gICAgfTtcbiAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSAnX0hpZ2hsaWdodENvbXBvbmVudCc7XG4gICAgcmV0dXJuIENvbXBvbmVudDtcbiAgfSwgW2hhc1NjcmVlblJlYWRlckhlbHBUZXh0XSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgcmVzdCksIGNoaWxkcmVuICYmIGhhc1NlYXJjaCA/IGhpZ2hsaWdodEFsbCA/IF9fX0Vtb3Rpb25KU1goSGlnaGxpZ2h0QWxsLCB7XG4gICAgc2VhcmNoVmFsdWU6IHNlYXJjaCxcbiAgICBzZWFyY2hTdWJqZWN0OiBjaGlsZHJlbixcbiAgICBpc1N0cmljdDogc3RyaWN0LFxuICAgIGhpZ2hsaWdodENvbXBvbmVudDogSGlnaGxpZ2h0Q29tcG9uZW50XG4gIH0pIDogX19fRW1vdGlvbkpTWChIaWdobGlnaHRGaXJzdCwge1xuICAgIHNlYXJjaFZhbHVlOiBzZWFyY2gsXG4gICAgc2VhcmNoU3ViamVjdDogY2hpbGRyZW4sXG4gICAgaXNTdHJpY3Q6IHN0cmljdCxcbiAgICBoaWdobGlnaHRDb21wb25lbnQ6IEhpZ2hsaWdodENvbXBvbmVudFxuICB9KSA6IGNoaWxkcmVuKTtcbn07XG5FdWlIaWdobGlnaHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBzdHJpbmcgdG8gaGlnaGxpZ2h0IGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAgICogV2hhdCB0byBzZWFyY2ggZm9yLlxuICAgICAgICpcbiAgICAgICAqIEFsbG93cyBwYXNzaW5nIGFuIGFycmF5IG9mIHN0cmluZ3MgKHNlYXJjaGluZyBieSBtdWx0aXBsZSBzZXBhcmF0ZVxuICAgICAgICogd29yZHMgb3IgcGhyYXNlcykgKipvbmx5KiogaWYgYGhpZ2hsaWdodEFsbGAgaXMgYWxzbyBzZXQgdG8gYHRydWVgLlxuICAgICAgICovXG4gIHNlYXJjaDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICAgICAqIFNob3VsZCB0aGUgc2VhcmNoIGJlIHN0cmljdCBvciBub3RcbiAgICAgICAqL1xuICBzdHJpY3Q6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIFNob3VsZCBoaWdobGlnaHQgYWxsIG1hdGNoZXNcbiAgICAgICAqL1xuICBoaWdobGlnaHRBbGw6IFByb3BUeXBlcy5ib29sXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpTWFya1N0eWxlcywgZXVpTWFya1NjcmVlblJlYWRlclN0eWxlcyB9IGZyb20gJy4vbWFyay5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpTWFyayA9IGZ1bmN0aW9uIEV1aU1hcmsoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkaGFzU2NyZWVuUmVhZGVySCA9IF9yZWYuaGFzU2NyZWVuUmVhZGVySGVscFRleHQsXG4gICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQgPSBfcmVmJGhhc1NjcmVlblJlYWRlckggPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGhhc1NjcmVlblJlYWRlckgsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aU1hcmsnLCBjbGFzc05hbWUpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpTWFya1N0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBoaWdobGlnaHRTdGFydCA9IHVzZUV1aUkxOG4oJ2V1aU1hcmsuaGlnaGxpZ2h0U3RhcnQnLCAnaGlnaGxpZ2h0IHN0YXJ0Jyk7XG4gIHZhciBoaWdobGlnaHRFbmQgPSB1c2VFdWlJMThuKCdldWlNYXJrLmhpZ2hsaWdodEVuZCcsICdoaWdobGlnaHQgZW5kJyk7XG4gIHZhciBzY3JlZW5SZWFkZXJTdHlsZXMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZXVpTWFya1NjcmVlblJlYWRlclN0eWxlcyhoaWdobGlnaHRTdGFydCwgaGlnaGxpZ2h0RW5kKTtcbiAgfSwgW2hpZ2hsaWdodFN0YXJ0LCBoaWdobGlnaHRFbmRdKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpTWFyaywgaGFzU2NyZWVuUmVhZGVySGVscFRleHQgJiYgc2NyZWVuUmVhZGVyU3R5bGVzLmhhc1NjcmVlblJlYWRlckhlbHBUZXh0XTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJtYXJrXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlNYXJrLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogU2V0IHRvIGBmYWxzZWAgdG8gcmVtb3ZlIHRoZSBDU1MgOmJlZm9yZSBhbmQgOmFmdGVyXG4gICAgICAgKiBzY3JlZW4gcmVhZGVyIGhlbHBlciB0ZXh0XG4gICAgICAgKi9cbiAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuZXhwb3J0IHZhciBldWlNYXJrU3R5bGVzID0gZnVuY3Rpb24gZXVpTWFya1N0eWxlcyhfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWUsXG4gICAgY29sb3JNb2RlID0gX3JlZi5jb2xvck1vZGU7XG4gIC8vIFRPRE86IFdhcyAkZXVpRm9jdXNCYWNrZ3JvdW5kQ29sb3JcbiAgdmFyIHRyYW5zcGFyZW5jeSA9IHtcbiAgICBMSUdIVDogMC4xLFxuICAgIERBUks6IDAuM1xuICB9O1xuICByZXR1cm4ge1xuICAgIGV1aU1hcms6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgdHJhbnNwYXJlbmN5W2NvbG9yTW9kZV0pLCBcIjtmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQuYm9sZCwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjs7bGFiZWw6ZXVpTWFyaztcIilcbiAgfTtcbn07XG5leHBvcnQgdmFyIGV1aU1hcmtTY3JlZW5SZWFkZXJTdHlsZXMgPSBmdW5jdGlvbiBldWlNYXJrU2NyZWVuUmVhZGVyU3R5bGVzKGhpZ2hsaWdodFN0YXJ0LCBoaWdobGlnaHRFbmQpIHtcbiAgcmV0dXJuIHtcbiAgICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDogLyojX19QVVJFX18qL2NzcyhcIiY6OmJlZm9yZSwmOjphZnRlcntcIiwgZXVpU2NyZWVuUmVhZGVyT25seSgpLCBcIjt9Jjo6YmVmb3Jle2NvbnRlbnQ6JyBbXCIsIGhpZ2hsaWdodFN0YXJ0LCBcIl0gJzt9Jjo6YWZ0ZXJ7Y29udGVudDonIFtcIiwgaGlnaGxpZ2h0RW5kLCBcIl0gJzt9O2xhYmVsOmhhc1NjcmVlblJlYWRlckhlbHBUZXh0O1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5KHIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7IGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGVzY2FwZVJlZ0V4cCBmcm9tICdsb2Rhc2gvZXNjYXBlUmVnRXhwJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG4vKipcbiAqIEludGVybmFsIHN1YmNvbXBvbmVudCB3aXRoIGxvZ2ljIGZvciBoaWdobGlnaHRpbmcgYWxsIG9jY3VycmVuY2VzXG4gKiBvZiBhIHNlYXJjaCB2YWx1ZSB3aXRoaW4gYSBzdWJqZWN0XG4gKlxuICogVXNlcyByZWdleCByYXRoZXIgdGhhbiBpbmRleE9mL3doaWxlIGxvb3BzIGZvciBlYXNpZXIgZGV2IG1haW50YWluYWJpbGl0eVxuICovXG5leHBvcnQgdmFyIEhpZ2hsaWdodEFsbCA9IGZ1bmN0aW9uIEhpZ2hsaWdodEFsbChfcmVmKSB7XG4gIHZhciBzZWFyY2hTdWJqZWN0ID0gX3JlZi5zZWFyY2hTdWJqZWN0LFxuICAgIF9zZWFyY2hWYWx1ZSA9IF9yZWYuc2VhcmNoVmFsdWUsXG4gICAgaXNTdHJpY3QgPSBfcmVmLmlzU3RyaWN0LFxuICAgIF9yZWYkaGlnaGxpZ2h0Q29tcG9uZSA9IF9yZWYuaGlnaGxpZ2h0Q29tcG9uZW50LFxuICAgIEhpZ2hsaWdodENvbXBvbmVudCA9IF9yZWYkaGlnaGxpZ2h0Q29tcG9uZSA9PT0gdm9pZCAwID8gJ21hcmsnIDogX3JlZiRoaWdobGlnaHRDb21wb25lO1xuICB2YXIgc2VhcmNoVmFsdWUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShfc2VhcmNoVmFsdWUpID8gX3NlYXJjaFZhbHVlLm1hcChlc2NhcGVSZWdFeHApLmpvaW4oJ3wnKSA6IGVzY2FwZVJlZ0V4cChfc2VhcmNoVmFsdWUpO1xuICB9LCBbX3NlYXJjaFZhbHVlXSk7XG4gIHZhciBjaHVua3MgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKHNlYXJjaFZhbHVlLCBpc1N0cmljdCA/ICdnJyA6ICdnaScpO1xuICAgIHZhciBtYXRjaGVzID0gX3RvQ29uc3VtYWJsZUFycmF5KHNlYXJjaFN1YmplY3QubWF0Y2hBbGwocmVnZXgpKS5tYXAoZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogbWF0Y2guaW5kZXggfHwgMCxcbiAgICAgICAgZW5kOiAobWF0Y2guaW5kZXggfHwgMCkgKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbGxJbkNodW5rcyhtYXRjaGVzLCBzZWFyY2hTdWJqZWN0Lmxlbmd0aCk7XG4gIH0sIFtzZWFyY2hWYWx1ZSwgc2VhcmNoU3ViamVjdCwgaXNTdHJpY3RdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIGNodW5rcy5tYXAoZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgdmFyIGVuZCA9IGNodW5rLmVuZCxcbiAgICAgIGhpZ2hsaWdodCA9IGNodW5rLmhpZ2hsaWdodCxcbiAgICAgIHN0YXJ0ID0gY2h1bmsuc3RhcnQ7XG4gICAgdmFyIHZhbHVlID0gc2VhcmNoU3ViamVjdC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG4gICAgcmV0dXJuIGhpZ2hsaWdodCA/IF9fX0Vtb3Rpb25KU1goSGlnaGxpZ2h0Q29tcG9uZW50LCB7XG4gICAgICBrZXk6IHN0YXJ0XG4gICAgfSwgdmFsdWUpIDogdmFsdWU7XG4gIH0pKTtcbn07XG5cbi8qKlxuICogQ2h1bmsgdXRpbGl0eVxuICovXG5IaWdobGlnaHRBbGwucHJvcFR5cGVzID0ge1xuICBzZWFyY2hWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICBzZWFyY2hTdWJqZWN0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlzU3RyaWN0OiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBoaWdobGlnaHRDb21wb25lbnQ6IFByb3BUeXBlcy5hbnlcbn07XG52YXIgZmlsbEluQ2h1bmtzID0gZnVuY3Rpb24gZmlsbEluQ2h1bmtzKGNodW5rc1RvSGlnaGxpZ2h0LCB0b3RhbExlbmd0aCkge1xuICB2YXIgYWxsQ2h1bmtzID0gW107XG4gIHZhciBhcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQoc3RhcnQsIGVuZCwgaGlnaGxpZ2h0KSB7XG4gICAgaWYgKGVuZCAtIHN0YXJ0ID4gMCkge1xuICAgICAgYWxsQ2h1bmtzLnB1c2goe1xuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIGVuZDogZW5kLFxuICAgICAgICBoaWdobGlnaHQ6IGhpZ2hsaWdodFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICBpZiAoY2h1bmtzVG9IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgYXBwZW5kKDAsIHRvdGFsTGVuZ3RoLCBmYWxzZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxhc3RJbmRleCA9IDA7XG4gICAgY2h1bmtzVG9IaWdobGlnaHQuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIGFwcGVuZChsYXN0SW5kZXgsIGNodW5rLnN0YXJ0LCBmYWxzZSk7XG4gICAgICBhcHBlbmQoY2h1bmsuc3RhcnQsIGNodW5rLmVuZCwgdHJ1ZSk7XG4gICAgICBsYXN0SW5kZXggPSBjaHVuay5lbmQ7XG4gICAgfSk7XG4gICAgYXBwZW5kKGxhc3RJbmRleCwgdG90YWxMZW5ndGgsIGZhbHNlKTtcbiAgfVxuICByZXR1cm4gYWxsQ2h1bmtzO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG4vKipcbiAqIEludGVybmFsIHN1YmNvbXBvbmVudCB3aXRoIGxvZ2ljIGZvciBoaWdobGlnaHRpbmcgb25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZVxuICogb2YgYSBzZWFyY2ggdmFsdWUgd2l0aGluIGEgc3ViamVjdFxuICpcbiAqIFVzZXMgaW5kZXhPZiBmb3IgcGVyZm9ybWFuY2UgKHdoaWNoIGRvZXMgbWF0dGVyIGZvciwgZS5nLiBFdWlTZWxlY3RhYmxlIHNlYXJjaGluZylcbiAqL1xuZXhwb3J0IHZhciBIaWdobGlnaHRGaXJzdCA9IGZ1bmN0aW9uIEhpZ2hsaWdodEZpcnN0KF9yZWYpIHtcbiAgdmFyIHNlYXJjaFN1YmplY3QgPSBfcmVmLnNlYXJjaFN1YmplY3QsXG4gICAgc2VhcmNoVmFsdWUgPSBfcmVmLnNlYXJjaFZhbHVlLFxuICAgIGlzU3RyaWN0ID0gX3JlZi5pc1N0cmljdCxcbiAgICBfcmVmJGhpZ2hsaWdodENvbXBvbmUgPSBfcmVmLmhpZ2hsaWdodENvbXBvbmVudCxcbiAgICBIaWdobGlnaHRDb21wb25lbnQgPSBfcmVmJGhpZ2hsaWdodENvbXBvbmUgPT09IHZvaWQgMCA/ICdtYXJrJyA6IF9yZWYkaGlnaGxpZ2h0Q29tcG9uZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2VhcmNoVmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGFyc2UgbXVsdGlwbGUgc2VhcmNoIHN0cmluZ3Mgd2l0aG91dCBgaGlnaGxpZ2h0QWxsYCBlbmFibGVkJyk7XG4gIH1cbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hTdWJqZWN0ID0gaXNTdHJpY3QgPyBzZWFyY2hTdWJqZWN0IDogc2VhcmNoU3ViamVjdC50b0xvd2VyQ2FzZSgpO1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gaXNTdHJpY3QgPyBzZWFyY2hWYWx1ZSA6IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBpbmRleE9mTWF0Y2ggPSBub3JtYWxpemVkU2VhcmNoU3ViamVjdC5pbmRleE9mKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSk7XG4gIGlmIChpbmRleE9mTWF0Y2ggPT09IC0xKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHNlYXJjaFN1YmplY3QpO1xuICB9XG4gIHZhciBwcmVNYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyaW5nKDAsIGluZGV4T2ZNYXRjaCk7XG4gIHZhciBtYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyaW5nKGluZGV4T2ZNYXRjaCwgaW5kZXhPZk1hdGNoICsgc2VhcmNoVmFsdWUubGVuZ3RoKTtcbiAgdmFyIHBvc3RNYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyaW5nKGluZGV4T2ZNYXRjaCArIHNlYXJjaFZhbHVlLmxlbmd0aCk7XG4gIHJldHVybiAoXG4gICAgLy8gTm90ZTogUmVhY3QgMTYvMTcgd2lsbCByZW5kZXIgZW1wdHkgc3RyaW5ncyBpbiB0aGUgRE9NLiBUaGVcbiAgICAvLyBgfHwgdW5kZWZpbmVkYCBwcmV2ZW50cyB0aGlzICYga2VlcHMgc25hcHNob3RzIHRoZSBzYW1lIGZvciBhbGwgdmVyc2lvbnNcbiAgICBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBwcmVNYXRjaCB8fCB1bmRlZmluZWQsIF9fX0Vtb3Rpb25KU1goSGlnaGxpZ2h0Q29tcG9uZW50LCBudWxsLCBtYXRjaCksIHBvc3RNYXRjaCB8fCB1bmRlZmluZWQpXG4gICk7XG59O1xuSGlnaGxpZ2h0Rmlyc3QucHJvcFR5cGVzID0ge1xuICBzZWFyY2hWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICBzZWFyY2hTdWJqZWN0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlzU3RyaWN0OiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBoaWdobGlnaHRDb21wb25lbnQ6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aGVtZVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJjaGVja2VkXCIsIFwiaXNGb2N1c2VkXCIsIFwic2hvd0ljb25zXCIsIFwidG9vbFRpcENvbnRlbnRcIiwgXCJ0b29sVGlwUHJvcHNcIiwgXCJzdHlsZVwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgY3JlYXRlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB3aXRoRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtIH0gZnJvbSAnLi4vZmxleCc7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgZXVpRmlsdGVyU2VsZWN0SXRlbVN0eWxlcyB9IGZyb20gJy4vZmlsdGVyX3NlbGVjdF9pdGVtLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHJlc29sdmVJY29uQW5kQ29sb3IgPSBmdW5jdGlvbiByZXNvbHZlSWNvbkFuZENvbG9yKGNoZWNrZWQpIHtcbiAgaWYgKCFjaGVja2VkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGljb246ICdlbXB0eSdcbiAgICB9O1xuICB9XG4gIHJldHVybiBjaGVja2VkID09PSAnb24nID8ge1xuICAgIGljb246ICdjaGVjaycsXG4gICAgY29sb3I6ICd0ZXh0J1xuICB9IDoge1xuICAgIGljb246ICdjcm9zcycsXG4gICAgY29sb3I6ICd0ZXh0J1xuICB9O1xufTtcblxuLyoqXG4gKiBUT0RPOiBUaGlzIGNvbXBvbmVudCBzaG91bGQgcmVtb3ZlZCBpbiBmYXZvciBvZiBFdWlTZWxlY3RhYmxlIHVzYWdlXG4gKiBvbmNlIEV1aUNvbWJvQm94IGhhcyBiZWVuIGNvbnZlcnRlZCB0byBkb2dmb29kIEV1aVNlbGVjdGFibGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgLSBVc2UgRXVpU2VsZWN0YWJsZSBpbnN0ZWFkXG4gKi9cbmV4cG9ydCB2YXIgRXVpRmlsdGVyU2VsZWN0SXRlbUNsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aUZpbHRlclNlbGVjdEl0ZW1DbGFzcygpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZpbHRlclNlbGVjdEl0ZW1DbGFzcyk7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRXVpRmlsdGVyU2VsZWN0SXRlbUNsYXNzLCBbXS5jb25jYXQoYXJncykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJidXR0b25SZWZcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRvb2x0aXBSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RhdGVcIiwge1xuICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5idXR0b25SZWYpIHtcbiAgICAgICAgX3RoaXMuYnV0dG9uUmVmLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRvZ2dsZVRvb2xUaXBcIiwgZnVuY3Rpb24gKGlzRm9jdXNlZCkge1xuICAgICAgaWYgKGlzRm9jdXNlZCkge1xuICAgICAgICB2YXIgX3RoaXMkdG9vbHRpcFJlZjtcbiAgICAgICAgKF90aGlzJHRvb2x0aXBSZWYgPSBfdGhpcy50b29sdGlwUmVmKSA9PT0gbnVsbCB8fCBfdGhpcyR0b29sdGlwUmVmID09PSB2b2lkIDAgfHwgKF90aGlzJHRvb2x0aXBSZWYgPSBfdGhpcyR0b29sdGlwUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90aGlzJHRvb2x0aXBSZWYgPT09IHZvaWQgMCB8fCBfdGhpcyR0b29sdGlwUmVmLnNob3dUb29sVGlwKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX3RoaXMkdG9vbHRpcFJlZjI7XG4gICAgICAgIChfdGhpcyR0b29sdGlwUmVmMiA9IF90aGlzLnRvb2x0aXBSZWYpID09PSBudWxsIHx8IF90aGlzJHRvb2x0aXBSZWYyID09PSB2b2lkIDAgfHwgKF90aGlzJHRvb2x0aXBSZWYyID0gX3RoaXMkdG9vbHRpcFJlZjIuY3VycmVudCkgPT09IG51bGwgfHwgX3RoaXMkdG9vbHRpcFJlZjIgPT09IHZvaWQgMCB8fCBfdGhpcyR0b29sdGlwUmVmMi5oaWRlVG9vbFRpcCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJoYXNGb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc3RhdGUuaGFzRm9jdXM7XG4gICAgfSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlGaWx0ZXJTZWxlY3RJdGVtQ2xhc3MsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUZpbHRlclNlbGVjdEl0ZW1DbGFzcywgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgdGhlbWUgPSBfdGhpcyRwcm9wcy50aGVtZSxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzLmRpc2FibGVkLFxuICAgICAgICBjaGVja2VkID0gX3RoaXMkcHJvcHMuY2hlY2tlZCxcbiAgICAgICAgaXNGb2N1c2VkID0gX3RoaXMkcHJvcHMuaXNGb2N1c2VkLFxuICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wcy5zaG93SWNvbnMsXG4gICAgICAgIHRvb2xUaXBDb250ZW50ID0gX3RoaXMkcHJvcHMudG9vbFRpcENvbnRlbnQsXG4gICAgICAgIHRvb2xUaXBQcm9wcyA9IF90aGlzJHByb3BzLnRvb2xUaXBQcm9wcyxcbiAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wcy5zdHlsZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBzdHlsZXMgPSBldWlGaWx0ZXJTZWxlY3RJdGVtU3R5bGVzKHRoZW1lKTtcbiAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUZpbHRlclNlbGVjdEl0ZW0sIGlzRm9jdXNlZCAmJiBzdHlsZXMuaXNGb2N1c2VkXTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRmlsdGVyU2VsZWN0SXRlbScsIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgaGFzVG9vbFRpcCA9XG4gICAgICAvLyB3ZSdyZSB1c2luZyBpc1ZhbGlkRWxlbWVudCBoZXJlIGFzIEV1aVRvb2xUaXBBbmNob3IgdXNlc1xuICAgICAgLy8gY2xvbmVFbGVtZW50IHRvIGVuaGFuY2UgdGhlIGVsZW1lbnQgd2l0aCByZXF1aXJlZCBhdHRyaWJ1dGVzXG4gICAgICAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmICFkaXNhYmxlZCAmJiB0b29sVGlwQ29udGVudDtcbiAgICAgIHZhciBhbmNob3JQcm9wcyA9IHVuZGVmaW5lZDtcbiAgICAgIGlmIChoYXNUb29sVGlwKSB7XG4gICAgICAgIHZhciBfdG9vbFRpcFByb3BzJGFuY2hvclAsIF90b29sVGlwUHJvcHMkYW5jaG9yUDI7XG4gICAgICAgIHZhciBhbmNob3JTdHlsZXMgPSB0b29sVGlwUHJvcHMgIT09IG51bGwgJiYgdG9vbFRpcFByb3BzICE9PSB2b2lkIDAgJiYgKF90b29sVGlwUHJvcHMkYW5jaG9yUCA9IHRvb2xUaXBQcm9wcy5hbmNob3JQcm9wcykgIT09IG51bGwgJiYgX3Rvb2xUaXBQcm9wcyRhbmNob3JQICE9PSB2b2lkIDAgJiYgX3Rvb2xUaXBQcm9wcyRhbmNob3JQLnN0eWxlID8gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0b29sVGlwUHJvcHMgPT09IG51bGwgfHwgdG9vbFRpcFByb3BzID09PSB2b2lkIDAgfHwgKF90b29sVGlwUHJvcHMkYW5jaG9yUDIgPSB0b29sVGlwUHJvcHMuYW5jaG9yUHJvcHMpID09PSBudWxsIHx8IF90b29sVGlwUHJvcHMkYW5jaG9yUDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90b29sVGlwUHJvcHMkYW5jaG9yUDIuc3R5bGUpLCBzdHlsZSkgOiBzdHlsZTtcbiAgICAgICAgYW5jaG9yUHJvcHMgPSB0b29sVGlwUHJvcHMgIT09IG51bGwgJiYgdG9vbFRpcFByb3BzICE9PSB2b2lkIDAgJiYgdG9vbFRpcFByb3BzLmFuY2hvclByb3BzID8gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0b29sVGlwUHJvcHMuYW5jaG9yUHJvcHMpLCB7fSwge1xuICAgICAgICAgIHN0eWxlOiBhbmNob3JTdHlsZXNcbiAgICAgICAgfSkgOiB7XG4gICAgICAgICAgc3R5bGU6IHN0eWxlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudG9nZ2xlVG9vbFRpcChpc0ZvY3VzZWQgIT09IG51bGwgJiYgaXNGb2N1c2VkICE9PSB2b2lkIDAgPyBpc0ZvY3VzZWQgOiBmYWxzZSk7XG4gICAgICB9XG4gICAgICB2YXIgaWNvbk5vZGU7XG4gICAgICBpZiAoc2hvd0ljb25zKSB7XG4gICAgICAgIHZhciBfcmVzb2x2ZUljb25BbmRDb2xvciA9IHJlc29sdmVJY29uQW5kQ29sb3IoY2hlY2tlZCksXG4gICAgICAgICAgaWNvbiA9IF9yZXNvbHZlSWNvbkFuZENvbG9yLmljb24sXG4gICAgICAgICAgY29sb3IgPSBfcmVzb2x2ZUljb25BbmRDb2xvci5jb2xvcjtcbiAgICAgICAgaWNvbk5vZGUgPSBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICAgIHR5cGU6IGljb25cbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgdmFyIG9wdGlvbkl0ZW0gPSBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYoX3JlZikge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuYnV0dG9uUmVmID0gX3JlZjtcbiAgICAgICAgfSxcbiAgICAgICAgcm9sZTogXCJvcHRpb25cIixcbiAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6IGlzRm9jdXNlZCxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICBcImFyaWEtZGlzYWJsZWRcIjogZGlzYWJsZWQsXG4gICAgICAgIHN0eWxlOiAhaGFzVG9vbFRpcCA/IHN0eWxlIDogdW5kZWZpbmVkXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlGbGV4R3JvdXAsIHtcbiAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgZ3V0dGVyU2l6ZTogXCJzXCIsXG4gICAgICAgIGNvbXBvbmVudDogXCJzcGFuXCIsXG4gICAgICAgIHJlc3BvbnNpdmU6IGZhbHNlXG4gICAgICB9LCBpY29uTm9kZSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpRmlsdGVyU2VsZWN0SXRlbV9fY29udGVudCBldWktdGV4dFRydW5jYXRlXCIsXG4gICAgICAgIGNvbXBvbmVudDogXCJzcGFuXCJcbiAgICAgIH0sIGNoaWxkcmVuKSkpO1xuICAgICAgcmV0dXJuIGhhc1Rvb2xUaXAgPyBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIF9leHRlbmRzKHtcbiAgICAgICAgcmVmOiB0aGlzLnRvb2x0aXBSZWYsXG4gICAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIixcbiAgICAgICAgY29udGVudDogdG9vbFRpcENvbnRlbnQsXG4gICAgICAgIHBvc2l0aW9uOiBcImxlZnRcIlxuICAgICAgfSwgdG9vbFRpcFByb3BzLCB7XG4gICAgICAgIGFuY2hvclByb3BzOiBhbmNob3JQcm9wc1xuICAgICAgfSksIG9wdGlvbkl0ZW0pIDogb3B0aW9uSXRlbTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCAtIFVzZSBFdWlTZWxlY3RhYmxlIGluc3RlYWRcbiAqL1xuX2RlZmluZVByb3BlcnR5KEV1aUZpbHRlclNlbGVjdEl0ZW1DbGFzcywgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBzaG93SWNvbnM6IHRydWVcbn0pO1xuRXVpRmlsdGVyU2VsZWN0SXRlbUNsYXNzLnByb3BUeXBlcyA9IHtcbiAgY2hlY2tlZDogUHJvcFR5cGVzLm9uZU9mKFtcIm9uXCIsIFwib2ZmXCJdKSxcbiAgc2hvd0ljb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNGb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59O1xuZXhwb3J0IHZhciBFdWlGaWx0ZXJTZWxlY3RJdGVtID0gd2l0aEV1aVRoZW1lKEV1aUZpbHRlclNlbGVjdEl0ZW1DbGFzcyk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbFNob3J0aGFuZENTUywgbG9naWNhbFRleHRBbGlnbkNTUywgZXVpRm9udFNpemUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUZpbHRlclNlbGVjdEl0ZW1TdHlsZXMgPSBmdW5jdGlvbiBldWlGaWx0ZXJTZWxlY3RJdGVtU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBmb2N1c1N0eWxlcyA9IFwiXFxuICAgIGNvbG9yOiBcIi5jb25jYXQoZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIFwiO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KGV1aVRoZW1lLmZvY3VzLmJhY2tncm91bmRDb2xvciwgXCI7XFxuICAgIG91dGxpbmUtb2Zmc2V0OiAtXCIpLmNvbmNhdChldWlUaGVtZS5mb2N1cy53aWR0aCwgXCI7XFxuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcblxcbiAgICAmOmRpc2FibGVkIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZCwgMC4xKSwgXCI7XFxuICAgIH1cXG4gIFwiKTtcbiAgcmV0dXJuIHtcbiAgICBldWlGaWx0ZXJTZWxlY3RJdGVtOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTpibG9jaztcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiBcIiwgbG9naWNhbFNob3J0aGFuZENTUygncGFkZGluZycsIFwiXCIuY29uY2F0KGV1aVRoZW1lLnNpemUueHMsIFwiIFwiKS5jb25jYXQoZXVpVGhlbWUuc2l6ZS5tKSksIFwiIFwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiIFwiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiIGNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7XCIsIGxvZ2ljYWxDU1MoJ2JvcmRlci1ib3R0b20nLCBcIlwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgc29saWQgXCIpLmNvbmNhdChldWlUaGVtZS5jb2xvcnMubGlnaHRlc3RTaGFkZSkpLCBcIiAmOmhvdmVye2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fSY6Zm9jdXN7XCIsIGZvY3VzU3R5bGVzLCBcIjt9JjpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZFRleHQsIFwiO307bGFiZWw6ZXVpRmlsdGVyU2VsZWN0SXRlbTtcIiksXG4gICAgaXNGb2N1c2VkOiAvKiNfX1BVUkVfXyovY3NzKGZvY3VzU3R5bGVzLCBcIjs7bGFiZWw6aXNGb2N1c2VkO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcIndpZHRoXCIsIFwib25SZXNpemVcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJ3aWR0aFwiLCBcImNoaWxkcmVuXCIsIFwidGV4dFwiLCBcInRydW5jYXRpb25cIiwgXCJ0cnVuY2F0aW9uT2Zmc2V0XCIsIFwidHJ1bmNhdGlvblBvc2l0aW9uXCIsIFwiZWxsaXBzaXNcIiwgXCJjYWxjdWxhdGlvbkRlbGF5TXNcIiwgXCJjb250YWluZXJSZWZcIiwgXCJjbGFzc05hbWVcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJvblJlc2l6ZVwiXTtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZU1lbW8sIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUNvbWJpbmVkUmVmcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyJztcbmltcG9ydCB7IFRydW5jYXRpb25VdGlscyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZXVpVGV4dFRydW5jYXRlU3R5bGVzIGFzIHN0eWxlcyB9IGZyb20gJy4vdGV4dF90cnVuY2F0ZS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBUUlVOQ0FUSU9OX1RZUEVTID0gWydlbmQnLCAnc3RhcnQnLCAnc3RhcnRFbmQnLCAnbWlkZGxlJ107XG5leHBvcnQgdmFyIEV1aVRleHRUcnVuY2F0ZSA9IGZ1bmN0aW9uIEV1aVRleHRUcnVuY2F0ZShfcmVmKSB7XG4gIHZhciB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgb25SZXNpemUgPSBfcmVmLm9uUmVzaXplLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiB3aWR0aCAhPSBudWxsID8gX19fRW1vdGlvbkpTWChFdWlUZXh0VHJ1bmNhdGVXaXRoV2lkdGgsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogd2lkdGhcbiAgfSwgcHJvcHMpKSA6IF9fX0Vtb3Rpb25KU1goRXVpVGV4dFRydW5jYXRlV2l0aFJlc2l6ZU9ic2VydmVyLCBfZXh0ZW5kcyh7XG4gICAgb25SZXNpemU6IG9uUmVzaXplXG4gIH0sIHByb3BzKSk7XG59O1xuRXVpVGV4dFRydW5jYXRlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogVGhlIGZ1bGwgdGV4dCBzdHJpbmcgdG8gdHJ1bmNhdGVcbiAgICAgICAqL1xuICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAgICogVGhlIHRydW5jYXRpb24gdHlwZSBkZXNpcmVkLiBEZXRlcm1pbmVzIHdoZXJlIHRoZSBlbGxpcHNlcyBhcmUgcGxhY2VkLlxuICAgICAgICovXG4gIHRydW5jYXRpb246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogVGhpcyBwcm9wICoqb25seSoqIGFwcGxpZXMgdG8gdGhlIGBzdGFydGAgYW5kIGBlbmRgIHRydW5jYXRpb24gdHlwZXMuXG4gICAgICAgKiBJdCBhbGxvd3MgcHJlc2VydmluZyBhIGNlcnRhaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMgb2YgZWl0aGVyIHRoZVxuICAgICAgICogc3RhcnRpbmcgb3IgZW5kaW5nIHRleHQuXG4gICAgICAgKlxuICAgICAgICogSWYgdGhlIHBhc3NlZCBvZmZzZXQgaXMgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCB0ZXh0IGxlbmd0aCxcbiAgICAgICAqIHRoZSBvZmZzZXQgd2lsbCBiZSBpZ25vcmVkLlxuICAgICAgICovXG4gIHRydW5jYXRpb25PZmZzZXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAgICogVGhpcyBwcm9wICoqb25seSoqIGFwcGxpZXMgdG8gdGhlIGBzdGFydEVuZGAgdHJ1bmNhdGlvbiB0eXBlLlxuICAgICAgICogSXQgYWxsb3dzIGN1c3RvbWl6aW5nIHRoZSBhbmNob3IgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXllZCB0ZXh0LFxuICAgICAgICogd2hpY2ggb3RoZXJ3aXNlIGRlZmF1bHRzIHRvIHRoZSBtaWRkbGUgb2YgdGhlIHRleHQgc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIFRoZSBwcmltYXJ5IHVzZSBjYXNlIGZvciB0aGlzIHByb3AgZm9yIGlzIHNlYXJjaCBoaWdobGlnaHRpbmcgLSBlLmcuLCBpZlxuICAgICAgICogYSB1c2VyIHNlYXJjaGVzIGZvciBhIHNwZWNpZmljIHdvcmQgaW4gdGhlIHRleHQsIHBhc3MgdGhlIGluZGV4IG9mIHRoYXRcbiAgICAgICAqIGZvdW5kIHdvcmQgdG8gZW5zdXJlIGl0IGlzIGFsd2F5cyB2aXNpYmxlLlxuICAgICAgICpcbiAgICAgICAqIFRoaXMgYmVoYXZpb3Igd2lsbCBpbnRlbGxpZ2VudGx5IGRldGVjdCB3aGVuIHBvc2l0aW9ucyBhcmUgY2xvc2UgdG8gdGhlIHN0YXJ0XG4gICAgICAgKiBvciBlbmQgb2YgdGhlIHRleHQsIGFuZCBvbWl0IGxlYWRpbmcgb3IgdHJhaWxpbmcgZWxsaXBzZXMgd2hlbiBuZWNlc3NhcnkuXG4gICAgICAgKiBJZiB0aGUgcGFzc2VkIHBvc2l0aW9uIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgdGV4dCBsZW5ndGgsXG4gICAgICAgKiB0aGUgdHJ1bmNhdGlvbiB3aWxsIHNpbXBseSBkZWZhdWx0IHRvIGBzdGFydGAgaW5zdGVhZC5cbiAgICAgICAqL1xuICB0cnVuY2F0aW9uUG9zaXRpb246IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAgICogRGVmYXVsdHMgdG8gdGhlIGhvcml6b250YWwgZWxsaXBzaXMgY2hhcmFjdGVyLlxuICAgICAgICogQ2FuIGJlIG9wdGlvbmFsbHkgY29uZmlndXJlZCB0byB1c2Ugb3RoZXIgcHVuY3R1YXRpb24sXG4gICAgICAgKiBlLmcuIHNwYWNlcywgYnJhY2tldHMsIGh5cGhlbnMsIGFzdGVyaXNrcywgZXRjLlxuICAgICAgICovXG4gIGVsbGlwc2lzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgICAqIEJ5IGRlZmF1bHQsIEV1aVRleHRUcnVuY2F0ZSB3aWxsIHJlbmRlciBhIHJlc2l6ZSBvYnNlcnZlciB0byBkZXRlY3QgdGhlXG4gICAgICAgKiBhdmFpbGFibGUgd2lkdGggaXQgaGFzLiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAoZS5nLiBtdWx0aXBsZSB0cnVuY2F0ZWRcbiAgICAgICAqIHRleHQgaXRlbXMgd2l0aGluIHRoZSBzYW1lIGNvbnRhaW5lciksIHlvdSBtYXkgb3B0IHRvIHBhc3MgaW4geW91ciBvd25cbiAgICAgICAqIGNvbnRhaW5lciB3aWR0aCwgd2hpY2ggd2lsbCBza2lwIGluaXRpYWxpemluZyBhIHJlc2l6ZSBvYnNlcnZlci5cbiAgICAgICAqL1xuICB3aWR0aDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBjYWxsYmFjayB0aGF0IGZpcmVzIHdoZW4gdGhlIGRlZmF1bHQgcmVzaXplciBvYnNlcnZlciBib3RoIG1vdW50cyBhbmRcbiAgICAgICAqIHJlZ2lzdGVycyBhIHNpemUgY2hhbmdlLiBUaGlzIGNhbGxiYWNrIHdpbGwgKipub3QqKiBmaXJlIGlmIGB3aWR0aGAgaXMgcGFzc2VkLlxuICAgICAgICovXG4gIG9uUmVzaXplOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICAgKiBCeSBkZWZhdWx0LCBFdWlUZXh0VHJ1bmNhdGUgd2lsbCByZW5kZXIgdGhlIHRydW5jYXRlZCBzdHJpbmcgZGlyZWN0bHkuXG4gICAgICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgcGFzcyBhIHJlbmRlciBwcm9wIGZ1bmN0aW9uIHRvIHRoZSBjb21wb25lbnQsIHdoaWNoXG4gICAgICAgKiBhbGxvd3MgZm9yIG1vcmUgZmxleGlibGUgdGV4dCByZW5kZXJpbmcsIGUuZy4gYWRkaW5nIGN1c3RvbSBtYXJrdXBcbiAgICAgICAqIG9yIGhpZ2hsaWdodGluZ1xuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICAgKiBGb3Igc29tZSBlZGdlIGNhc2Ugc2NlbmFyaW9zLCBFdWlUZXh0VHJ1bmNhdGUncyBjYWxjdWxhdGlvbnMgbWF5IGJlIG9mZiB1bnRpbFxuICAgICAgICogZm9udHMgYXJlIGRvbmUgbG9hZGluZyBvciBsYXlvdXQgaXMgZG9uZSBzaGlmdGluZyBvciBzZXR0bGluZy4gQWRkaW5nIGEgZGVsYXlcbiAgICAgICAqIG1heSBoZWxwIHJlc29sdmUgYW55IHJlbmRlcmluZyBpc3N1ZXMuXG4gICAgICAgKi9cbiAgY2FsY3VsYXRpb25EZWxheU1zOiBQcm9wVHlwZXMubnVtYmVyXG59O1xudmFyIEV1aVRleHRUcnVuY2F0ZVdpdGhXaWR0aCA9IGZ1bmN0aW9uIEV1aVRleHRUcnVuY2F0ZVdpdGhXaWR0aChfcmVmMikge1xuICB2YXIgd2lkdGggPSBfcmVmMi53aWR0aCxcbiAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgIHRleHQgPSBfcmVmMi50ZXh0LFxuICAgIF9yZWYyJHRydW5jYXRpb24gPSBfcmVmMi50cnVuY2F0aW9uLFxuICAgIF90cnVuY2F0aW9uID0gX3JlZjIkdHJ1bmNhdGlvbiA9PT0gdm9pZCAwID8gJ2VuZCcgOiBfcmVmMiR0cnVuY2F0aW9uLFxuICAgIF9yZWYyJHRydW5jYXRpb25PZmZzZSA9IF9yZWYyLnRydW5jYXRpb25PZmZzZXQsXG4gICAgX3RydW5jYXRpb25PZmZzZXQgPSBfcmVmMiR0cnVuY2F0aW9uT2Zmc2UgPT09IHZvaWQgMCA/IDAgOiBfcmVmMiR0cnVuY2F0aW9uT2Zmc2UsXG4gICAgdHJ1bmNhdGlvblBvc2l0aW9uID0gX3JlZjIudHJ1bmNhdGlvblBvc2l0aW9uLFxuICAgIF9yZWYyJGVsbGlwc2lzID0gX3JlZjIuZWxsaXBzaXMsXG4gICAgZWxsaXBzaXMgPSBfcmVmMiRlbGxpcHNpcyA9PT0gdm9pZCAwID8gJ1x1MjAyNicgOiBfcmVmMiRlbGxpcHNpcyxcbiAgICBjYWxjdWxhdGlvbkRlbGF5TXMgPSBfcmVmMi5jYWxjdWxhdGlvbkRlbGF5TXMsXG4gICAgY29udGFpbmVyUmVmID0gX3JlZjIuY29udGFpbmVyUmVmLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYyLmNsYXNzTmFtZSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQyKTtcbiAgLy8gTm90ZTogVGhpcyBuZWVkcyB0byBiZSBhIHN0YXRlIGFuZCBub3QgYSByZWYgdG8gdHJpZ2dlciBhIHJlcmVuZGVyIG9uIG1vdW50XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBjb250YWluZXJFbCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0Q29udGFpbmVyRWwgPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgcmVmcyA9IHVzZUNvbWJpbmVkUmVmcyhbc2V0Q29udGFpbmVyRWwsIGNvbnRhaW5lclJlZl0pO1xuXG4gIC8vIElmIG5lY2Vzc2FyeSwgd2FpdCBhIHRpY2sgb24gbW91bnQgYmVmb3JlIHRydW5jYXRpbmdcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZSghY2FsY3VsYXRpb25EZWxheU1zKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgcmVhZHkgPSBfdXNlU3RhdGU0WzBdLFxuICAgIHNldFJlYWR5ID0gX3VzZVN0YXRlNFsxXTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2FsY3VsYXRpb25EZWxheU1zKSB7XG4gICAgICB2YXIgdGltZXJJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc2V0UmVhZHkodHJ1ZSk7XG4gICAgICB9LCBjYWxjdWxhdGlvbkRlbGF5TXMpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbY2FsY3VsYXRpb25EZWxheU1zXSk7XG5cbiAgLy8gSGFuZGxlIGV4Y2VwdGlvbnMgd2hlcmUgd2UgbmVlZCB0byBvdmVycmlkZSB0aGUgcGFzc2VkIHByb3BzXG4gIHZhciBfdXNlTWVtbyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRydW5jYXRpb24gPSBfdHJ1bmNhdGlvbjtcbiAgICAgIHZhciB0cnVuY2F0aW9uT2Zmc2V0ID0gMDtcbiAgICAgIGlmIChfdHJ1bmNhdGlvbiA9PT0gJ2VuZCcgfHwgX3RydW5jYXRpb24gPT09ICdzdGFydCcpIHtcbiAgICAgICAgaWYgKDAgPCBfdHJ1bmNhdGlvbk9mZnNldCAmJiBfdHJ1bmNhdGlvbk9mZnNldCA8IHRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgdHJ1bmNhdGlvbk9mZnNldCA9IF90cnVuY2F0aW9uT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKF90cnVuY2F0aW9uID09PSAnc3RhcnRFbmQnICYmIHRydW5jYXRpb25Qb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0cnVuY2F0aW9uUG9zaXRpb24gPD0gMCkge1xuICAgICAgICAgIHRydW5jYXRpb24gPSAnZW5kJztcbiAgICAgICAgfSBlbHNlIGlmICh0cnVuY2F0aW9uUG9zaXRpb24gPj0gdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICB0cnVuY2F0aW9uID0gJ3N0YXJ0JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHJ1bmNhdGlvbjogdHJ1bmNhdGlvbixcbiAgICAgICAgdHJ1bmNhdGlvbk9mZnNldDogdHJ1bmNhdGlvbk9mZnNldFxuICAgICAgfTtcbiAgICB9LCBbX3RydW5jYXRpb24sIF90cnVuY2F0aW9uT2Zmc2V0LCB0cnVuY2F0aW9uUG9zaXRpb24sIHRleHQubGVuZ3RoXSksXG4gICAgdHJ1bmNhdGlvbiA9IF91c2VNZW1vLnRydW5jYXRpb24sXG4gICAgdHJ1bmNhdGlvbk9mZnNldCA9IF91c2VNZW1vLnRydW5jYXRpb25PZmZzZXQ7XG4gIHZhciB0cnVuY2F0ZWRUZXh0ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRydW5jYXRlZFRleHQgPSAnJztcbiAgICBpZiAoIXJlYWR5IHx8ICFjb250YWluZXJFbCkgcmV0dXJuIHRleHQ7XG4gICAgaWYgKCF3aWR0aCkgcmV0dXJuIHRydW5jYXRlZFRleHQ7XG4gICAgdmFyIHV0aWxzID0gbmV3IFRydW5jYXRpb25VdGlscyh7XG4gICAgICBmdWxsVGV4dDogdGV4dCxcbiAgICAgIGVsbGlwc2lzOiBlbGxpcHNpcyxcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyRWwsXG4gICAgICBhdmFpbGFibGVXaWR0aDogd2lkdGhcbiAgICB9KTtcbiAgICBpZiAodXRpbHMuY2hlY2tJZlRydW5jYXRpb25Jc05lZWRlZCgpID09PSBmYWxzZSkge1xuICAgICAgdHJ1bmNhdGVkVGV4dCA9IHRleHQ7XG4gICAgfSBlbHNlIGlmICh1dGlscy5jaGVja1N1ZmZpY2llbnRFbGxpcHNpc1dpZHRoKHRydW5jYXRpb24pID09PSBmYWxzZSkge1xuICAgICAgdHJ1bmNhdGVkVGV4dCA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKHRydW5jYXRpb24pIHtcbiAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gdXRpbHMudHJ1bmNhdGVFbmQodHJ1bmNhdGlvbk9mZnNldCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gdXRpbHMudHJ1bmNhdGVTdGFydCh0cnVuY2F0aW9uT2Zmc2V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3RhcnRFbmQnOlxuICAgICAgICAgIGlmICh0cnVuY2F0aW9uUG9zaXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IHV0aWxzLnRydW5jYXRlU3RhcnRFbmRBdE1pZGRsZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gdXRpbHMudHJ1bmNhdGVTdGFydEVuZEF0UG9zaXRpb24odHJ1bmNhdGlvblBvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IHV0aWxzLnRydW5jYXRlTWlkZGxlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVuY2F0ZWRUZXh0O1xuICB9LCBbcmVhZHksIHdpZHRoLCB0ZXh0LCB0cnVuY2F0aW9uLCB0cnVuY2F0aW9uT2Zmc2V0LCB0cnVuY2F0aW9uUG9zaXRpb24sIGVsbGlwc2lzLCBjb250YWluZXJFbF0pO1xuICB2YXIgaXNUcnVuY2F0aW5nID0gdHJ1bmNhdGVkVGV4dCAhPT0gdGV4dDtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpVGV4dFRydW5jYXRlJywgY2xhc3NOYW1lKSxcbiAgICBjc3M6IHN0eWxlcy5ldWlUZXh0VHJ1bmNhdGUsXG4gICAgcmVmOiByZWZzLFxuICAgIHRpdGxlOiBpc1RydW5jYXRpbmcgPyB0ZXh0IDogdW5kZWZpbmVkXG4gIH0sIHJlc3QpLCBpc1RydW5jYXRpbmcgPyBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRleHRUcnVuY2F0ZV9fdHJ1bmNhdGVkVGV4dFwiLFxuICAgIGNzczogc3R5bGVzLmV1aVRleHRUcnVuY2F0ZV9fdHJ1bmNhdGVkVGV4dCxcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRydW5jYXRlZFRleHRcIlxuICB9LCBjaGlsZHJlbiA/IGNoaWxkcmVuKHRydW5jYXRlZFRleHQpIDogdHJ1bmNhdGVkVGV4dCksIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGV4dFRydW5jYXRlX19mdWxsVGV4dFwiLFxuICAgIGNzczogc3R5bGVzLmV1aVRleHRUcnVuY2F0ZV9fZnVsbFRleHQsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImZ1bGxUZXh0XCJcbiAgfSwgdGV4dCkpIDogX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUZXh0VHJ1bmNhdGVfX2Z1bGxUZXh0XCIsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImZ1bGxUZXh0XCJcbiAgfSwgY2hpbGRyZW4gPyBjaGlsZHJlbih0ZXh0KSA6IHRleHQpKTtcbn07XG5FdWlUZXh0VHJ1bmNhdGVXaXRoV2lkdGgucHJvcFR5cGVzID0ge1xuICB3aWR0aDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBjb250YWluZXJSZWY6IFByb3BUeXBlcy5hbnlcbn07XG52YXIgRXVpVGV4dFRydW5jYXRlV2l0aFJlc2l6ZU9ic2VydmVyID0gZnVuY3Rpb24gRXVpVGV4dFRydW5jYXRlV2l0aFJlc2l6ZU9ic2VydmVyKF9yZWYzKSB7XG4gIHZhciBfb25SZXNpemUgPSBfcmVmMy5vblJlc2l6ZSxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMywgX2V4Y2x1ZGVkMyk7XG4gIHZhciBfdXNlU3RhdGU1ID0gdXNlU3RhdGUoMCksXG4gICAgX3VzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTUsIDIpLFxuICAgIHdpZHRoID0gX3VzZVN0YXRlNlswXSxcbiAgICBzZXRXaWR0aCA9IF91c2VTdGF0ZTZbMV07XG4gIHZhciBvblJlc2l6ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfcmVmNCkge1xuICAgIHZhciB3aWR0aCA9IF9yZWY0LndpZHRoO1xuICAgIHNldFdpZHRoKHdpZHRoKTtcbiAgICBfb25SZXNpemUgPT09IG51bGwgfHwgX29uUmVzaXplID09PSB2b2lkIDAgfHwgX29uUmVzaXplKHdpZHRoKTtcbiAgfSwgW19vblJlc2l6ZV0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlSZXNpemVPYnNlcnZlciwge1xuICAgIG9uUmVzaXplOiBvblJlc2l6ZVxuICB9LCBmdW5jdGlvbiAocmVmKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGV4dFRydW5jYXRlV2l0aFdpZHRoLCBfZXh0ZW5kcyh7XG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBjb250YWluZXJSZWY6IHJlZlxuICAgIH0sIHByb3BzLCB7XG4gICAgICBcImRhdGEtcmVzaXplLW9ic2VydmVyXCI6IFwidHJ1ZVwiXG4gICAgfSkpO1xuICB9KTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJmdWxsVGV4dFwiLCBcImVsbGlwc2lzXCIsIFwiYXZhaWxhYmxlV2lkdGhcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldCgpIHsgcmV0dXJuIF9nZXQgPSBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBSZWZsZWN0ICYmIFJlZmxlY3QuZ2V0ID8gUmVmbGVjdC5nZXQuYmluZCgpIDogZnVuY3Rpb24gKGUsIHQsIHIpIHsgdmFyIHAgPSBfc3VwZXJQcm9wQmFzZShlLCB0KTsgaWYgKHApIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHAsIHQpOyByZXR1cm4gbi5nZXQgPyBuLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGggPCAzID8gZSA6IHIpIDogbi52YWx1ZTsgfSB9LCBfZ2V0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKHQsIG8pIHsgZm9yICg7ICF7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIG8pICYmIG51bGwgIT09ICh0ID0gX2dldFByb3RvdHlwZU9mKHQpKTspOyByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBDYW52YXNUZXh0VXRpbHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYW52YXMnO1xuLyoqXG4gKiBVdGlsaXRpZXMgZm9yIHRydW5jYXRpbmcgdHlwZXMgYXQgdmFyaW91cyBwb3NpdGlvbnMsIGFzIHdlbGwgYXNcbiAqIGRldGVybWluaW5nIHdoZXRoZXIgdHJ1bmNhdGlvbiBpcyBwb3NzaWJsZSBvciBldmVuIG5lY2Vzc2FyeS5cbiAqL1xuZXhwb3J0IHZhciBUcnVuY2F0aW9uVXRpbHMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9DYW52YXNUZXh0VXRpbHMpIHtcbiAgZnVuY3Rpb24gVHJ1bmNhdGlvblV0aWxzKF9yZWYpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgdmFyIGZ1bGxUZXh0ID0gX3JlZi5mdWxsVGV4dCxcbiAgICAgIGVsbGlwc2lzID0gX3JlZi5lbGxpcHNpcyxcbiAgICAgIF9hdmFpbGFibGVXaWR0aCA9IF9yZWYuYXZhaWxhYmxlV2lkdGgsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRydW5jYXRpb25VdGlscyk7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIFRydW5jYXRpb25VdGlscywgW3Jlc3RdKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZnVsbFRleHRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZWxsaXBzaXNcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYXZhaWxhYmxlV2lkdGhcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBQZXJmb3JtYW5jZSB1dGlsaXRpZXNcbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZGVidWdQZXJmb3JtYW5jZVwiLCBmYWxzZSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImRlYnVnQ291bnRlclwiLCAwKTtcbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB1dGlscyBmb3IgY2FsY3VsYXRpbmcgYSByYXRpbyBiYXNlZCBvbiB0aGUgcGFzc2VkIGF2YWlsYWJsZSB3aWR0aFxuICAgICAqIHZzIHRoZSBmdWxsIHRleHQgd2lkdGguXG4gICAgICogVGhpcyByYXRpbyBpcyB1c2VkIHRvIGdldCBhbiBpbml0aWFsIF9hcHByb3hpbWF0ZV8gdGV4dCBzdHJpbmcgdGhhdCBzaG91bGRcbiAgICAgKiBiZSBzbGlnaHRseSBvdmVyIHRoZSBhdmFpbGFibGUgd2lkdGgsIHdoaWNoIHdlIGNhbiB0aGVuIHJlbW92ZSBmcm9tXG4gICAgICogY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciB1bnRpbCB0aGUgdGV4dCBqdXN0IGZpdHMgd2l0aGluIHRoZSBhdmFpbGFibGUgd2lkdGguXG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIndpZHRoUmF0aW9cIiwgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNldFRleHRXaWR0aFJhdGlvXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0ZXh0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBfdGhpcy5mdWxsVGV4dDtcbiAgICAgIHZhciB0ZXh0VG9PZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnO1xuICAgICAgLy8gQWNjb3VudCBmb3IgcmVkdWNlZCBhdmFpbGFibGUgd2lkdGggZHVlIHRvIChlLmcuKSB0cnVuY2F0aW9uIG9mZnNldFxuICAgICAgdmFyIGF2YWlsYWJsZVdpZHRoID0gX3RoaXMuYXZhaWxhYmxlV2lkdGg7XG4gICAgICBpZiAodGV4dFRvT2Zmc2V0KSB7XG4gICAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKHRleHRUb09mZnNldCk7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlV2lkdGggLSBfdGhpcy50ZXh0V2lkdGg7XG4gICAgICB9XG4gICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayh0ZXh0KTtcbiAgICAgIF90aGlzLndpZHRoUmF0aW8gPSBhdmFpbGFibGVXaWR0aCAvIF90aGlzLnRleHRXaWR0aDtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZ2V0VGV4dEZyb21SYXRpb1wiLCBmdW5jdGlvbiAodGV4dCwgdHlwZSkge1xuICAgICAgdmFyIGNoYXJhY3RlclJhdGlvID0gTWF0aC5jZWlsKHRleHQubGVuZ3RoICogX3RoaXMud2lkdGhSYXRpbyk7XG4gICAgICB2YXIgaW5kZXggPSB0eXBlID09PSAnc3RhcnQnID8gdGV4dC5sZW5ndGggLSBjaGFyYWN0ZXJSYXRpbyA6IGNoYXJhY3RlclJhdGlvO1xuICAgICAgdmFyIF9zcGxpdFRleHQkYXQgPSBzcGxpdFRleHQodGV4dCkuYXQoaW5kZXgpLFxuICAgICAgICBfc3BsaXRUZXh0JGF0MiA9IF9zbGljZWRUb0FycmF5KF9zcGxpdFRleHQkYXQsIDIpLFxuICAgICAgICBlbmQgPSBfc3BsaXRUZXh0JGF0MlswXSxcbiAgICAgICAgc3RhcnQgPSBfc3BsaXRUZXh0JGF0MlsxXTtcbiAgICAgIHJldHVybiB0eXBlID09PSAnc3RhcnQnID8gc3RhcnQgOiBlbmQ7XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogRWFybHkgcmV0dXJuIGNoZWNrc1xuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjaGVja0lmVHJ1bmNhdGlvbklzTmVlZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKF90aGlzLmZ1bGxUZXh0KTtcbiAgICAgIGlmIChfdGhpcy5hdmFpbGFibGVXaWR0aCA+PSBfdGhpcy50ZXh0V2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjaGVja1N1ZmZpY2llbnRFbGxpcHNpc1dpZHRoXCIsIGZ1bmN0aW9uICh0cnVuY2F0aW9uKSB7XG4gICAgICB2YXIgdGV4dFRvQ2hlY2sgPSB0cnVuY2F0aW9uID09PSAnc3RhcnRFbmQnID8gXCJcIi5jb25jYXQoX3RoaXMuZWxsaXBzaXMsIFwiIFwiKS5jb25jYXQoX3RoaXMuZWxsaXBzaXMpIC8vIHN0YXJ0RW5kIG5lZWRzIGEgbGl0dGxlIG1vcmUgc3BhY2VcbiAgICAgIDogX3RoaXMuZWxsaXBzaXM7XG4gICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayh0ZXh0VG9DaGVjayk7XG4gICAgICBpZiAoX3RoaXMudGV4dFdpZHRoID49IF90aGlzLmF2YWlsYWJsZVdpZHRoICogMC45KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSB0cnVuY2F0aW9uIGVsbGlwc2lzIGlzIGxhcmdlciB0aGFuIHRoZSBhdmFpbGFibGUgd2lkdGguIE5vIHRleHQgY2FuIGJlIHJlbmRlcmVkLicpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNoZWNrVHJ1bmNhdGlvbk9mZnNldFdpZHRoXCIsIGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayh0ZXh0KTtcbiAgICAgIGlmIChfdGhpcy50ZXh0V2lkdGggPiBfdGhpcy5hdmFpbGFibGVXaWR0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgcGFzc2VkIHRydW5jYXRpb25PZmZzZXQgaXMgdG9vIGxhcmdlIGZvciB0aGUgYXZhaWxhYmxlIHdpZHRoLiBUcnVuY2F0aW5nIHRoZSBvZmZzZXQgaW5zdGVhZC4nKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIFRydW5jYXRpb24gdHlwZXMgbG9naWMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnNcbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidHJ1bmNhdGVTdGFydFwiLCBmdW5jdGlvbiAodHJ1bmNhdGlvbk9mZnNldCkge1xuICAgICAgdmFyIHRydW5jYXRlZFRleHQgPSBfdGhpcy5mdWxsVGV4dDtcbiAgICAgIHZhciBsZWFkaW5nVGV4dCA9ICcnO1xuICAgICAgdmFyIGNvbWJpbmVkVGV4dCA9IGZ1bmN0aW9uIGNvbWJpbmVkVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIGxlYWRpbmdUZXh0ICsgdHJ1bmNhdGVkVGV4dDtcbiAgICAgIH07XG4gICAgICBpZiAodHJ1bmNhdGlvbk9mZnNldCkge1xuICAgICAgICB2YXIgX3NwbGl0VGV4dCRhdDMgPSBzcGxpdFRleHQoX3RoaXMuZnVsbFRleHQpLmF0KHRydW5jYXRpb25PZmZzZXQpO1xuICAgICAgICB2YXIgX3NwbGl0VGV4dCRhdDQgPSBfc2xpY2VkVG9BcnJheShfc3BsaXRUZXh0JGF0MywgMik7XG4gICAgICAgIGxlYWRpbmdUZXh0ID0gX3NwbGl0VGV4dCRhdDRbMF07XG4gICAgICAgIHRydW5jYXRlZFRleHQgPSBfc3BsaXRUZXh0JGF0NFsxXTtcbiAgICAgICAgdmFyIHdpZHRoQ2hlY2sgPSBsZWFkaW5nVGV4dCArIF90aGlzLmVsbGlwc2lzO1xuICAgICAgICBpZiAoX3RoaXMuY2hlY2tUcnVuY2F0aW9uT2Zmc2V0V2lkdGgod2lkdGhDaGVjaykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdHJ1bmNhdGVkVGV4dCA9IGxlYWRpbmdUZXh0O1xuICAgICAgICAgIGxlYWRpbmdUZXh0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHRleHQgd2lkdGggcmF0aW8gd2lkdGggYWNjb3VudGluZyBmb3IgYW55IHRydW5jYXRpb24gb2Zmc2V0IHRleHQsXG4gICAgICAvLyBhbmQgZ3Vlc3N0aW1hdGUgYW4gaW5pdGlhbCB0cnVuY2F0ZWQgc3RyaW5nXG4gICAgICBfdGhpcy5zZXRUZXh0V2lkdGhSYXRpbyh0cnVuY2F0ZWRUZXh0LCBsZWFkaW5nVGV4dCk7XG4gICAgICB0cnVuY2F0ZWRUZXh0ID0gX3RoaXMuZ2V0VGV4dEZyb21SYXRpbyh0cnVuY2F0ZWRUZXh0LCAnc3RhcnQnKTtcbiAgICAgIGxlYWRpbmdUZXh0ICs9IF90aGlzLmVsbGlwc2lzO1xuICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2soY29tYmluZWRUZXh0KCkpO1xuICAgICAgd2hpbGUgKF90aGlzLnRleHRXaWR0aCA+IF90aGlzLmF2YWlsYWJsZVdpZHRoKSB7XG4gICAgICAgIHRydW5jYXRlZFRleHQgPSByZW1vdmVGaXJzdENoYXJhY3Rlcih0cnVuY2F0ZWRUZXh0KTtcbiAgICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2soY29tYmluZWRUZXh0KCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbWJpbmVkVGV4dCgpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0cnVuY2F0ZUVuZFwiLCBmdW5jdGlvbiAodHJ1bmNhdGlvbk9mZnNldCkge1xuICAgICAgdmFyIHRydW5jYXRlZFRleHQgPSBfdGhpcy5mdWxsVGV4dDtcbiAgICAgIHZhciB0cmFpbGluZ1RleHQgPSAnJztcbiAgICAgIHZhciBjb21iaW5lZFRleHQgPSBmdW5jdGlvbiBjb21iaW5lZFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0cnVuY2F0ZWRUZXh0ICsgdHJhaWxpbmdUZXh0O1xuICAgICAgfTtcbiAgICAgIGlmICh0cnVuY2F0aW9uT2Zmc2V0KSB7XG4gICAgICAgIHZhciBpbmRleCA9IF90aGlzLmZ1bGxUZXh0Lmxlbmd0aCAtIHRydW5jYXRpb25PZmZzZXQ7XG4gICAgICAgIHZhciBfc3BsaXRUZXh0JGF0NSA9IHNwbGl0VGV4dChfdGhpcy5mdWxsVGV4dCkuYXQoaW5kZXgpO1xuICAgICAgICB2YXIgX3NwbGl0VGV4dCRhdDYgPSBfc2xpY2VkVG9BcnJheShfc3BsaXRUZXh0JGF0NSwgMik7XG4gICAgICAgIHRydW5jYXRlZFRleHQgPSBfc3BsaXRUZXh0JGF0NlswXTtcbiAgICAgICAgdHJhaWxpbmdUZXh0ID0gX3NwbGl0VGV4dCRhdDZbMV07XG4gICAgICAgIHZhciB3aWR0aENoZWNrID0gX3RoaXMuZWxsaXBzaXMgKyB0cmFpbGluZ1RleHQ7XG4gICAgICAgIGlmIChfdGhpcy5jaGVja1RydW5jYXRpb25PZmZzZXRXaWR0aCh3aWR0aENoZWNrKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gdHJhaWxpbmdUZXh0O1xuICAgICAgICAgIHRyYWlsaW5nVGV4dCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCB0ZXh0IHdpZHRoIHJhdGlvIHdpZHRoIGFjY291bnRpbmcgZm9yIGFueSB0cnVuY2F0aW9uIG9mZnNldCB0ZXh0LFxuICAgICAgLy8gYW5kIGd1ZXNzdGltYXRlIGFuIGluaXRpYWwgdHJ1bmNhdGVkIHN0cmluZ1xuICAgICAgX3RoaXMuc2V0VGV4dFdpZHRoUmF0aW8odHJ1bmNhdGVkVGV4dCwgdHJhaWxpbmdUZXh0KTtcbiAgICAgIHRydW5jYXRlZFRleHQgPSBfdGhpcy5nZXRUZXh0RnJvbVJhdGlvKHRydW5jYXRlZFRleHQsICdlbmQnKTtcbiAgICAgIHRyYWlsaW5nVGV4dCA9IF90aGlzLmVsbGlwc2lzICsgdHJhaWxpbmdUZXh0O1xuICAgICAgX3RoaXMuc2V0VGV4dFRvQ2hlY2soY29tYmluZWRUZXh0KCkpO1xuICAgICAgd2hpbGUgKF90aGlzLnRleHRXaWR0aCA+IF90aGlzLmF2YWlsYWJsZVdpZHRoKSB7XG4gICAgICAgIHRydW5jYXRlZFRleHQgPSByZW1vdmVMYXN0Q2hhcmFjdGVyKHRydW5jYXRlZFRleHQpO1xuICAgICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayhjb21iaW5lZFRleHQoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tYmluZWRUZXh0KCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRydW5jYXRlU3RhcnRFbmRBdFBvc2l0aW9uXCIsIGZ1bmN0aW9uICh0cnVuY2F0aW9uUG9zaXRpb24pIHtcbiAgICAgIC8vIFNwbGl0IHRoZSB0ZXh0IGZyb20gdGhlIGFuY2hvciBwb3NpdGlvbiwgdXNpbmcgdGhlIHdpZHRoIHJhdGlvXG4gICAgICAvLyB0byBnZXQgdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgaW5kaWNlcyBmcm9tIHRoZSBwb3NpdGlvblxuICAgICAgX3RoaXMuc2V0VGV4dFdpZHRoUmF0aW8oKTtcbiAgICAgIHZhciBjaGFyYWN0ZXJSYXRpbyA9IE1hdGguZmxvb3IoX3RoaXMuZnVsbFRleHQubGVuZ3RoICogX3RoaXMud2lkdGhSYXRpbyAvIDIpO1xuICAgICAgdmFyIHRydW5jYXRlU3RhcnQgPSB0cnVuY2F0aW9uUG9zaXRpb24gLSBjaGFyYWN0ZXJSYXRpbztcbiAgICAgIHZhciB0cnVuY2F0ZUVuZCA9IHRydW5jYXRpb25Qb3NpdGlvbiArIGNoYXJhY3RlclJhdGlvO1xuXG4gICAgICAvLyBJZiBlaXRoZXIgb2YgdGhlIGFwcHJveGltYXRlIHN0YXJ0L2VuZCB0cnVuY2F0aW9uIGluZGljZXMgZ28gYmV5b25kIHRoZVxuICAgICAgLy8gYm91bmRzIG9mIHRoZSBhY3R1YWwgdGV4dCwgd2UgY2FuIHNpbXBseSB1c2UgZW5kIG9yIHN0YXJ0IHRydW5jYXRpb24gaW5zdGVhZFxuICAgICAgaWYgKHRydW5jYXRlU3RhcnQgPCAwKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy50cnVuY2F0ZUVuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRydW5jYXRlRW5kID49IF90aGlzLmZ1bGxUZXh0Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gX3RoaXMudHJ1bmNhdGVTdGFydCgpO1xuICAgICAgfVxuICAgICAgdmFyIHRydW5jYXRlZFRleHQgPSBfdGhpcy5mdWxsVGV4dC5zdWJzdHJpbmcodHJ1bmNhdGVTdGFydCwgdHJ1bmNhdGVFbmQpO1xuICAgICAgdmFyIGNvbWJpbmVkVGV4dCA9IGZ1bmN0aW9uIGNvbWJpbmVkVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmVsbGlwc2lzICsgdHJ1bmNhdGVkVGV4dCArIF90aGlzLmVsbGlwc2lzO1xuICAgICAgfTtcbiAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKGNvbWJpbmVkVGV4dCgpKTtcbiAgICAgIHZhciBhbHRlcm5hdGluZztcbiAgICAgIHdoaWxlIChfdGhpcy50ZXh0V2lkdGggPiBfdGhpcy5hdmFpbGFibGVXaWR0aCkge1xuICAgICAgICB0cnVuY2F0ZWRUZXh0ID0gYWx0ZXJuYXRpbmcgPyByZW1vdmVMYXN0Q2hhcmFjdGVyKHRydW5jYXRlZFRleHQpIDogcmVtb3ZlRmlyc3RDaGFyYWN0ZXIodHJ1bmNhdGVkVGV4dCk7XG4gICAgICAgIGFsdGVybmF0aW5nID0gIWFsdGVybmF0aW5nO1xuICAgICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayhjb21iaW5lZFRleHQoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tYmluZWRUZXh0KCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRydW5jYXRlU3RhcnRFbmRBdE1pZGRsZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbWlkZGxlUG9zaXRpb24gPSBNYXRoLmZsb29yKF90aGlzLmZ1bGxUZXh0Lmxlbmd0aCAvIDIpO1xuICAgICAgcmV0dXJuIF90aGlzLnRydW5jYXRlU3RhcnRFbmRBdFBvc2l0aW9uKG1pZGRsZVBvc2l0aW9uKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidHJ1bmNhdGVNaWRkbGVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG1pZGRsZVBvc2l0aW9uID0gTWF0aC5mbG9vcihfdGhpcy5mdWxsVGV4dC5sZW5ndGggLyAyKTtcbiAgICAgIHZhciBfc3BsaXRUZXh0JGF0NyA9IHNwbGl0VGV4dChfdGhpcy5mdWxsVGV4dCkuYXQobWlkZGxlUG9zaXRpb24pLFxuICAgICAgICBfc3BsaXRUZXh0JGF0OCA9IF9zbGljZWRUb0FycmF5KF9zcGxpdFRleHQkYXQ3LCAyKSxcbiAgICAgICAgZmlyc3RIYWxmID0gX3NwbGl0VGV4dCRhdDhbMF0sXG4gICAgICAgIHNlY29uZEhhbGYgPSBfc3BsaXRUZXh0JGF0OFsxXTtcbiAgICAgIF90aGlzLnNldFRleHRXaWR0aFJhdGlvKCk7XG4gICAgICBmaXJzdEhhbGYgPSBfdGhpcy5nZXRUZXh0RnJvbVJhdGlvKGZpcnN0SGFsZiwgJ2VuZCcpO1xuICAgICAgc2Vjb25kSGFsZiA9IF90aGlzLmdldFRleHRGcm9tUmF0aW8oc2Vjb25kSGFsZiwgJ3N0YXJ0Jyk7XG4gICAgICB2YXIgY29tYmluZWRUZXh0ID0gZnVuY3Rpb24gY29tYmluZWRUZXh0KCkge1xuICAgICAgICByZXR1cm4gZmlyc3RIYWxmICsgX3RoaXMuZWxsaXBzaXMgKyBzZWNvbmRIYWxmO1xuICAgICAgfTtcbiAgICAgIF90aGlzLnNldFRleHRUb0NoZWNrKGNvbWJpbmVkVGV4dCgpKTtcbiAgICAgIHZhciBhbHRlcm5hdGluZztcbiAgICAgIHdoaWxlIChfdGhpcy50ZXh0V2lkdGggPiBfdGhpcy5hdmFpbGFibGVXaWR0aCkge1xuICAgICAgICBhbHRlcm5hdGluZyA9ICFhbHRlcm5hdGluZztcbiAgICAgICAgaWYgKGFsdGVybmF0aW5nKSB7XG4gICAgICAgICAgZmlyc3RIYWxmID0gcmVtb3ZlTGFzdENoYXJhY3RlcihmaXJzdEhhbGYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlY29uZEhhbGYgPSByZW1vdmVGaXJzdENoYXJhY3RlcihzZWNvbmRIYWxmKTtcbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5zZXRUZXh0VG9DaGVjayhjb21iaW5lZFRleHQoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tYmluZWRUZXh0KCk7XG4gICAgfSk7XG4gICAgX3RoaXMuZnVsbFRleHQgPSBmdWxsVGV4dDtcbiAgICBfdGhpcy5lbGxpcHNpcyA9IGVsbGlwc2lzO1xuICAgIF90aGlzLmF2YWlsYWJsZVdpZHRoID0gX2F2YWlsYWJsZVdpZHRoO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoVHJ1bmNhdGlvblV0aWxzLCBfQ2FudmFzVGV4dFV0aWxzKTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhUcnVuY2F0aW9uVXRpbHMsIFt7XG4gICAga2V5OiBcInRleHRXaWR0aFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgaWYgKHRoaXMuZGVidWdQZXJmb3JtYW5jZSkge1xuICAgICAgICB0aGlzLmRlYnVnQ291bnRlcisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFRydW5jYXRpb25VdGlscy5wcm90b3R5cGUpLCBcInRleHRXaWR0aFwiLCB0aGlzKTtcbiAgICB9XG4gIH1dKTtcbn0oQ2FudmFzVGV4dFV0aWxzKTtcblxuLyoqXG4gKiBEUlkgY2hhcmFjdGVyL3N1YnN0cmluZyB1dGlsc1xuICovXG5cbnZhciByZW1vdmVMYXN0Q2hhcmFjdGVyID0gZnVuY3Rpb24gcmVtb3ZlTGFzdENoYXJhY3Rlcih0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0Lmxlbmd0aCAtIDEpO1xufTtcbnZhciByZW1vdmVGaXJzdENoYXJhY3RlciA9IGZ1bmN0aW9uIHJlbW92ZUZpcnN0Q2hhcmFjdGVyKHRleHQpIHtcbiAgcmV0dXJuIHRleHQuc3Vic3RyaW5nKDEpO1xufTtcbnZhciBzcGxpdFRleHQgPSBmdW5jdGlvbiBzcGxpdFRleHQodGV4dCkge1xuICByZXR1cm4ge1xuICAgIGF0OiBmdW5jdGlvbiBhdChpbmRleCkge1xuICAgICAgcmV0dXJuIFt0ZXh0LnN1YnN0cmluZygwLCBpbmRleCksIHRleHQuc3Vic3RyaW5nKGluZGV4KV07XG4gICAgfVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuZXhwb3J0IHZhciBldWlUZXh0VHJ1bmNhdGVTdHlsZXMgPSB7XG4gIGV1aVRleHRUcnVuY2F0ZTogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICAgIG5hbWU6IFwiN281cW56LWV1aVRleHRUcnVuY2F0ZVwiLFxuICAgIHN0eWxlczogXCJwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO2xhYmVsOmV1aVRleHRUcnVuY2F0ZTtcIlxuICB9IDoge1xuICAgIG5hbWU6IFwiN281cW56LWV1aVRleHRUcnVuY2F0ZVwiLFxuICAgIHN0eWxlczogXCJwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO2xhYmVsOmV1aVRleHRUcnVuY2F0ZTtcIixcbiAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBiZWxvdyBDU1MgaXMgYSBoYWNrIHRvIGdldCBkb3VibGUgY2xpY2tpbmcgYW5kIHNlbGVjdGluZyB0aGUgKmZ1bGwqIHRleHRcbiAgICogaW5zdGVhZCBvZiB0aGUgdHJ1bmNhdGVkIHRleHQgKHVzZWZ1bCBmb3IgY29weWluZy9wYXN0aW5nLCBhbmQgbWltaWNzIGhvd1xuICAgKiBgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXNgIHdvcmtzKS5cbiAgICpcbiAgICogUmVhbCB0YWxrOiBJJ20gbG93a2V5IGFtYXplZCBpdCB3b3JrcyBhbmQgaXQgd291bGRuJ3Qgc3VycHJpc2UgbWUgaWYgd2UgcmFuIGludG9cbiAgICogY3Jvc3MtYnJvd3NlciBpc3N1ZXMgd2l0aCB0aGlzIGF0IHNvbWUgcG9pbnQuIEhvcGVmdWxseSBDU1MgbmF0aXZlbHkgaW1wbGVtZW50c1xuICAgKiBjdXN0b20gdGV4dCB0cnVuY2F0aW9uIHNvbWUgZGF5IChodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMvMzkzNylcbiAgICogYW5kIHRoZXJlJ2xsIGJlIG5vIG5lZWQgZm9yIHRoZSBlbnRpcmUgY29tcG9uZW50IGF0IHRoYXQgcG9pbnQgXHVEODNEXHVERTRGXG4gICAqL1xuICAvLyBNYWtlcyB0aGUgdHJ1bmNhdGVkIHRleHQgdW5zZWxlY3RhYmxlL3VuLWNsaWNrYWJsZVxuICBldWlUZXh0VHJ1bmNhdGVfX3RydW5jYXRlZFRleHQ6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICBuYW1lOiBcIjFzanhrYjEtZXVpVGV4dFRydW5jYXRlX190cnVuY2F0ZWRUZXh0XCIsXG4gICAgc3R5bGVzOiBcInVzZXItc2VsZWN0Om5vbmU7cG9pbnRlci1ldmVudHM6bm9uZTtsYWJlbDpldWlUZXh0VHJ1bmNhdGVfX3RydW5jYXRlZFRleHQ7XCJcbiAgfSA6IHtcbiAgICBuYW1lOiBcIjFzanhrYjEtZXVpVGV4dFRydW5jYXRlX190cnVuY2F0ZWRUZXh0XCIsXG4gICAgc3R5bGVzOiBcInVzZXItc2VsZWN0Om5vbmU7cG9pbnRlci1ldmVudHM6bm9uZTtsYWJlbDpldWlUZXh0VHJ1bmNhdGVfX3RydW5jYXRlZFRleHQ7XCIsXG4gICAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG4gIH0sXG4gIC8vIFBvc2l0aW9ucyB0aGUgZnVsbCB0ZXh0IG9uIHRvcCBvZiB0aGUgdHJ1bmNhdGVkIHRleHQgKHNvIHRoYXQgY2xpY2tpbmcgdGFyZ2V0cyBpdClcbiAgLy8gYW5kIGdpdmVzIGl0IGEgY29sb3Igb3BhY2l0eSBvZiAwIHNvIHRoYXQgaXQncyBub3QgYWN0dWFsbHkgdmlzaWJsZVxuICBldWlUZXh0VHJ1bmNhdGVfX2Z1bGxUZXh0OiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgbmFtZTogXCIxOWM5Z3FpLWV1aVRleHRUcnVuY2F0ZV9fZnVsbFRleHRcIixcbiAgICBzdHlsZXM6IFwicG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtvdmVyZmxvdzpoaWRkZW47Y29sb3I6cmdiYSgwLCAwLCAwLCAwKTtAc3VwcG9ydHMgKC13ZWJraXQtaHlwaGVuczogbm9uZSl7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt9O2xhYmVsOmV1aVRleHRUcnVuY2F0ZV9fZnVsbFRleHQ7XCJcbiAgfSA6IHtcbiAgICBuYW1lOiBcIjE5YzlncWktZXVpVGV4dFRydW5jYXRlX19mdWxsVGV4dFwiLFxuICAgIHN0eWxlczogXCJwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO292ZXJmbG93OmhpZGRlbjtjb2xvcjpyZ2JhKDAsIDAsIDAsIDApO0BzdXBwb3J0cyAoLXdlYmtpdC1oeXBoZW5zOiBub25lKXt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO307bGFiZWw6ZXVpVGV4dFRydW5jYXRlX19mdWxsVGV4dDtcIixcbiAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgfVxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic3R5bGVcIiwgXCJsaW5lc1wiLCBcImNsb25lRWxlbWVudFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgaXNWYWxpZEVsZW1lbnQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHN0eWxlcyA9IHtcbiAgZXVpVGV4dEJsb2NrVHJ1bmNhdGU6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgICBuYW1lOiBcIjFjZm0zZ2UtZXVpVGV4dEJsb2NrVHJ1bmNhdGVcIixcbiAgICBzdHlsZXM6IFwiZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7LXdlYmtpdC1saW5lLWNsYW1wOjA7b3ZlcmZsb3c6aGlkZGVuO2xhYmVsOmV1aVRleHRCbG9ja1RydW5jYXRlO1wiXG4gIH0gOiB7XG4gICAgbmFtZTogXCIxY2ZtM2dlLWV1aVRleHRCbG9ja1RydW5jYXRlXCIsXG4gICAgc3R5bGVzOiBcImRpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsOy13ZWJraXQtbGluZS1jbGFtcDowO292ZXJmbG93OmhpZGRlbjtsYWJlbDpldWlUZXh0QmxvY2tUcnVuY2F0ZTtcIixcbiAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgfVxufTtcbmV4cG9ydCB2YXIgRXVpVGV4dEJsb2NrVHJ1bmNhdGUgPSBmdW5jdGlvbiBFdWlUZXh0QmxvY2tUcnVuY2F0ZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIGxpbmVzID0gX3JlZi5saW5lcyxcbiAgICBjbG9uZUVsZW1lbnQgPSBfcmVmLmNsb25lRWxlbWVudCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGV4dEJsb2NrVHJ1bmNhdGUnLCBjbGFzc05hbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gc3R5bGVzLmV1aVRleHRCbG9ja1RydW5jYXRlO1xuICB2YXIgaW5saW5lU3R5bGVzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgICAgV2Via2l0TGluZUNsYW1wOiBsaW5lc1xuICAgIH0sIHN0eWxlKTtcbiAgfSwgW2xpbmVzLCBzdHlsZV0pO1xuICBpZiAoIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiYgY2xvbmVFbGVtZW50KSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudFdpdGhDc3MoY2hpbGRyZW4sIHtcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY2hpbGRyZW4ucHJvcHMuc3R5bGUpLCBpbmxpbmVTdHlsZXMpLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGNoaWxkcmVuLnByb3BzLmNsYXNzTmFtZSwgY2xhc3NlcylcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgIHN0eWxlOiBpbmxpbmVTdHlsZXNcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpVGV4dEJsb2NrVHJ1bmNhdGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBOdW1iZXIgb2YgbGluZXMgb2YgdGV4dCB0byB0cnVuY2F0ZSB0b1xuICAgICAgICovXG4gIGxpbmVzOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAgICogQXBwbGllcyBzdHlsaW5nIHRvIHRoZSBjaGlsZCBlbGVtZW50IGluc3RlYWQgb2YgcmVuZGVyaW5nIGEgcGFyZW50IHdyYXBwZXIgYGRpdmAuXG4gICAgICAgKiBDYW4gb25seSBiZSB1c2VkIHdoZW4gd3JhcHBpbmcgYSAqc2luZ2xlKiBjaGlsZCBlbGVtZW50L3RhZywgYW5kIG5vdCByYXcgdGV4dC5cbiAgICAgICAqL1xuICBjbG9uZUVsZW1lbnQ6IFByb3BUeXBlcy5ib29sXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3hUaXRsZSA9IGZ1bmN0aW9uIEV1aUNvbWJvQm94VGl0bGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94VGl0bGVcIlxuICB9LCBjaGlsZHJlbik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBtYXRoV2l0aFVuaXRzLCBldWlTY3JvbGxCYXJTdHlsZXMsIGV1aVRleHRCcmVha1dvcmQsIGV1aVRleHRUcnVuY2F0ZSB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVRpdGxlIH0gZnJvbSAnLi4vLi4vdGl0bGUvdGl0bGUuc3R5bGVzJztcbmV4cG9ydCB2YXIgTElTVF9NQVhfSEVJR0hUID0gMjAwO1xuZXhwb3J0IHZhciBldWlDb21ib0JveE9wdGlvbkxpc3RTdHlsZXMgPSBmdW5jdGlvbiBldWlDb21ib0JveE9wdGlvbkxpc3RTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlDb21ib0JveE9wdGlvbkxpc3Q6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWF4LWhlaWdodCcsIFwiXCIuY29uY2F0KExJU1RfTUFYX0hFSUdIVCwgXCJweFwiKSksIFwiIG92ZXJmbG93OmhpZGRlbjsuZXVpVGV4dFRydW5jYXRle3BvaW50ZXItZXZlbnRzOm5vbmU7fS5ldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt9LmV1aUNvbWJvQm94T3B0aW9uX19jb250ZW50e2ZsZXg6MTt0ZXh0LWFsaWduOnN0YXJ0O1wiLCBldWlUZXh0VHJ1bmNhdGUoKSwgXCI7fS5ldWlDb21ib0JveE9wdGlvbl9fZW1wdHlTdGF0ZVRleHR7ZmxleDoxO3RleHQtYWxpZ246c3RhcnQ7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCAwKSwgXCI7fS5ldWlDb21ib0JveE9wdGlvbl9fZW50ZXJCYWRnZXtcIiwgbG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7fS5ldWlDb21ib0JveFRpdGxle2Rpc3BsYXk6ZmxleDtcIiwgbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS5zKSwgbG9naWNhbENTUygncGFkZGluZy10b3AnLCBtYXRoV2l0aFVuaXRzKGV1aVRoZW1lLnNpemUucywgZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICsgMTtcbiAgICB9KSksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWJvdHRvbScsIGV1aVRoZW1lLnNpemUueHMpLCBcIiBcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHh4cycpLCBcIjt9O2xhYmVsOmV1aUNvbWJvQm94T3B0aW9uTGlzdDtcIiksXG4gICAgZXVpQ29tYm9Cb3hPcHRpb25MaXN0X192aXJ0dWFsaXphdGlvbjogLyojX19QVVJFX18qL2NzcyhldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSwgXCI7O2xhYmVsOmV1aUNvbWJvQm94T3B0aW9uTGlzdF9fdmlydHVhbGl6YXRpb247XCIpLFxuICAgIGV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX2VtcHR5OiAvKiNfX1BVUkVfXyovY3NzKFwicGFkZGluZzpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjt0ZXh0LWFsaWduOmNlbnRlcjtcIiwgZXVpVGV4dEJyZWFrV29yZCgpLCBcIjs7bGFiZWw6ZXVpQ29tYm9Cb3hPcHRpb25zTGlzdF9fZW1wdHk7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlDb21ib0JveFN0eWxlcyA9IHtcbiAgZXVpQ29tYm9Cb3g6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTtcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiBcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgJ2F1dG8nKSwgXCI7O2xhYmVsOmV1aUNvbWJvQm94O1wiKSxcbiAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiYWN0aXZlUGFnZVwiLCBcIml0ZW1zUGVyUGFnZVwiLCBcIml0ZW1zUGVyUGFnZU9wdGlvbnNcIiwgXCJzaG93UGVyUGFnZU9wdGlvbnNcIiwgXCJvbkNoYW5nZUl0ZW1zUGVyUGFnZVwiLCBcIm9uQ2hhbmdlUGFnZVwiLCBcInBhZ2VDb3VudFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZU1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpQnV0dG9uRW1wdHkgfSBmcm9tICcuLi8uLi9idXR0b24nO1xuaW1wb3J0IHsgRXVpQ29udGV4dE1lbnVJdGVtLCBFdWlDb250ZXh0TWVudVBhbmVsIH0gZnJvbSAnLi4vLi4vY29udGV4dF9tZW51JztcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0gfSBmcm9tICcuLi8uLi9mbGV4JztcbmltcG9ydCB7IEV1aVBhZ2luYXRpb24gfSBmcm9tICcuLi8uLi9wYWdpbmF0aW9uJztcbmltcG9ydCB7IEV1aVBvcG92ZXIgfSBmcm9tICcuLi8uLi9wb3BvdmVyJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IHVzZVByb3BzV2l0aENvbXBvbmVudERlZmF1bHRzIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXIvY29tcG9uZW50X2RlZmF1bHRzJztcbmltcG9ydCB7IGV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzIH0gZnJvbSAnLi90YWJsZV9wYWdpbmF0aW9uX2RlZmF1bHRzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlUGFnaW5hdGlvbiA9IGZ1bmN0aW9uIEV1aVRhYmxlUGFnaW5hdGlvbihwcm9wcykge1xuICB2YXIgX3VzZVByb3BzV2l0aENvbXBvbmVuID0gdXNlUHJvcHNXaXRoQ29tcG9uZW50RGVmYXVsdHMoJ0V1aVRhYmxlUGFnaW5hdGlvbicsIHByb3BzKSxcbiAgICBhY3RpdmVQYWdlID0gX3VzZVByb3BzV2l0aENvbXBvbmVuLmFjdGl2ZVBhZ2UsXG4gICAgX3VzZVByb3BzV2l0aENvbXBvbmVuMiA9IF91c2VQcm9wc1dpdGhDb21wb25lbi5pdGVtc1BlclBhZ2UsXG4gICAgaXRlbXNQZXJQYWdlID0gX3VzZVByb3BzV2l0aENvbXBvbmVuMiA9PT0gdm9pZCAwID8gZXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMuaXRlbXNQZXJQYWdlIDogX3VzZVByb3BzV2l0aENvbXBvbmVuMixcbiAgICBfdXNlUHJvcHNXaXRoQ29tcG9uZW4zID0gX3VzZVByb3BzV2l0aENvbXBvbmVuLml0ZW1zUGVyUGFnZU9wdGlvbnMsXG4gICAgaXRlbXNQZXJQYWdlT3B0aW9ucyA9IF91c2VQcm9wc1dpdGhDb21wb25lbjMgPT09IHZvaWQgMCA/IGV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzLml0ZW1zUGVyUGFnZU9wdGlvbnMgOiBfdXNlUHJvcHNXaXRoQ29tcG9uZW4zLFxuICAgIF91c2VQcm9wc1dpdGhDb21wb25lbjQgPSBfdXNlUHJvcHNXaXRoQ29tcG9uZW4uc2hvd1BlclBhZ2VPcHRpb25zLFxuICAgIHNob3dQZXJQYWdlT3B0aW9ucyA9IF91c2VQcm9wc1dpdGhDb21wb25lbjQgPT09IHZvaWQgMCA/IGV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzLnNob3dQZXJQYWdlT3B0aW9ucyA6IF91c2VQcm9wc1dpdGhDb21wb25lbjQsXG4gICAgb25DaGFuZ2VJdGVtc1BlclBhZ2UgPSBfdXNlUHJvcHNXaXRoQ29tcG9uZW4ub25DaGFuZ2VJdGVtc1BlclBhZ2UsXG4gICAgb25DaGFuZ2VQYWdlID0gX3VzZVByb3BzV2l0aENvbXBvbmVuLm9uQ2hhbmdlUGFnZSxcbiAgICBwYWdlQ291bnQgPSBfdXNlUHJvcHNXaXRoQ29tcG9uZW4ucGFnZUNvdW50LFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3VzZVByb3BzV2l0aENvbXBvbmVuLCBfZXhjbHVkZWQpO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGlzUG9wb3Zlck9wZW4gPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldElzUG9wb3Zlck9wZW4gPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgdG9nZ2xlUG9wb3ZlciA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJc1BvcG92ZXJPcGVuKGZ1bmN0aW9uIChpc09wZW4pIHtcbiAgICAgIHJldHVybiAhaXNPcGVuO1xuICAgIH0pO1xuICB9LCBbXSk7XG4gIHZhciBjbG9zZVBvcG92ZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgc2V0SXNQb3BvdmVyT3BlbihmYWxzZSk7XG4gIH0sIFtdKTtcbiAgdmFyIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRW1wdHksIHtcbiAgICBzaXplOiBcInhzXCIsXG4gICAgY29sb3I6IFwidGV4dFwiLFxuICAgIGljb25UeXBlOiBcImFycm93RG93blwiLFxuICAgIGljb25TaWRlOiBcInJpZ2h0XCIsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlUGFnaW5hdGlvblBvcG92ZXJCdXR0b25cIixcbiAgICBvbkNsaWNrOiB0b2dnbGVQb3BvdmVyXG4gIH0sIGl0ZW1zUGVyUGFnZSA9PT0gMCA/IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5hbGxSb3dzXCIsXG4gICAgZGVmYXVsdDogXCJTaG93aW5nIGFsbCByb3dzXCJcbiAgfSkgOiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICB0b2tlbjogXCJldWlUYWJsZVBhZ2luYXRpb24ucm93c1BlclBhZ2VcIixcbiAgICBkZWZhdWx0OiBcIlJvd3MgcGVyIHBhZ2VcIlxuICB9KSwgXCI6IFwiLCBpdGVtc1BlclBhZ2UpKTtcbiAgdmFyIGl0ZW1zID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGl0ZW1zUGVyUGFnZU9wdGlvbnMubWFwKGZ1bmN0aW9uIChpdGVtc1BlclBhZ2VPcHRpb24pIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51SXRlbSwge1xuICAgICAgICBrZXk6IGl0ZW1zUGVyUGFnZU9wdGlvbixcbiAgICAgICAgaWNvbjogaXRlbXNQZXJQYWdlT3B0aW9uID09PSBpdGVtc1BlclBhZ2UgPyAnY2hlY2snIDogJ2VtcHR5JyxcbiAgICAgICAgXCJhcmlhLWN1cnJlbnRcIjogaXRlbXNQZXJQYWdlT3B0aW9uID09PSBpdGVtc1BlclBhZ2UgPyAndHJ1ZScgOiB1bmRlZmluZWQsXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgICAgb25DaGFuZ2VJdGVtc1BlclBhZ2UgPT09IG51bGwgfHwgb25DaGFuZ2VJdGVtc1BlclBhZ2UgPT09IHZvaWQgMCB8fCBvbkNoYW5nZUl0ZW1zUGVyUGFnZShpdGVtc1BlclBhZ2VPcHRpb24pO1xuICAgICAgICB9LFxuICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVQYWdpbmF0aW9uLVwiLmNvbmNhdChpdGVtc1BlclBhZ2VPcHRpb24sIFwiLXJvd3NcIilcbiAgICAgIH0sIGl0ZW1zUGVyUGFnZU9wdGlvbiA9PT0gMCA/IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlUYWJsZVBhZ2luYXRpb24ucm93c1BlclBhZ2VPcHRpb25TaG93QWxsUm93c1wiLFxuICAgICAgICBkZWZhdWx0OiBcIlNob3cgYWxsIHJvd3NcIlxuICAgICAgfSkgOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLnJvd3NQZXJQYWdlT3B0aW9uXCIsXG4gICAgICAgIHZhbHVlczoge1xuICAgICAgICAgIHJvd3NQZXJQYWdlOiBpdGVtc1BlclBhZ2VPcHRpb25cbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogXCJ7cm93c1BlclBhZ2V9IHJvd3NcIlxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9LCBbaXRlbXNQZXJQYWdlT3B0aW9ucywgaXRlbXNQZXJQYWdlLCBvbkNoYW5nZUl0ZW1zUGVyUGFnZSwgY2xvc2VQb3BvdmVyXSk7XG4gIHZhciBpdGVtc1BlclBhZ2VQb3BvdmVyID0gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyLCB7XG4gICAgYnV0dG9uOiBidXR0b24sXG4gICAgaXNPcGVuOiBpc1BvcG92ZXJPcGVuLFxuICAgIGNsb3NlUG9wb3ZlcjogY2xvc2VQb3BvdmVyLFxuICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgIGFuY2hvclBvc2l0aW9uOiBcInVwUmlnaHRcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51UGFuZWwsIHtcbiAgICBpdGVtczogaXRlbXMsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlUGFnaW5hdGlvblJvd09wdGlvbnNcIlxuICB9KSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgIGp1c3RpZnlDb250ZW50OiBcInNwYWNlQmV0d2VlblwiLFxuICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgcmVzcG9uc2l2ZTogZmFsc2UsXG4gICAgd3JhcDogdHJ1ZSxcbiAgICBndXR0ZXJTaXplOiBcInNcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpLXhTY3JvbGxcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgc2hvd1BlclBhZ2VPcHRpb25zICYmIGl0ZW1zUGVyUGFnZVBvcG92ZXIpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgaXRlbXNQZXJQYWdlID4gMCAmJiBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb24sIF9leHRlbmRzKHtcbiAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudCxcbiAgICBhY3RpdmVQYWdlOiBhY3RpdmVQYWdlLFxuICAgIG9uUGFnZUNsaWNrOiBvbkNoYW5nZVBhZ2VcbiAgfSwgcmVzdCkpKSk7XG59O1xuRXVpVGFibGVQYWdpbmF0aW9uLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogT3B0aW9uIHRvIGNvbXBsZXRlbHkgaGlkZSB0aGUgXCJSb3dzIHBlciBwYWdlXCIgc2VsZWN0b3IuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gIHNob3dQZXJQYWdlT3B0aW9uczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEN1cnJlbnQgc2VsZWN0aW9uIGZvciBcIlJvd3MgcGVyIHBhZ2VcIi5cbiAgICAgKiBQYXNzIGAwYCB0byBkaXNwbGF5IHRoZSBzZWxlY3RlZCBcIlNob3cgYWxsXCIgb3B0aW9uIGFuZCBoaWRlIHRoZSBwYWdpbmF0aW9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgaXRlbXNQZXJQYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICAgKiBDdXN0b20gYXJyYXkgb2Ygb3B0aW9ucyBmb3IgXCJSb3dzIHBlciBwYWdlXCIuXG4gICAgICogUGFzcyBgMGAgYXMgb25lIG9mIHRoZSBvcHRpb25zIHRvIGNyZWF0ZSBhIFwiU2hvdyBhbGxcIiBvcHRpb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBbMTAsIDI1LCA1MF1cbiAgICAgKi9cbiAgaXRlbXNQZXJQYWdlT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkKSxcbiAgLyoqXG4gICAgICogQ2xpY2sgaGFuZGxlciB0aGF0IHBhc3NlcyBiYWNrIHNlbGVjdGVkIGBwYWdlU2l6ZWAgbnVtYmVyXG4gICAgICovXG4gIG9uQ2hhbmdlSXRlbXNQZXJQYWdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DaGFuZ2VQYWdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICogUmVxdWlyZXMgdGhlIGBpZGAgb2YgdGhlIHRhYmxlIGJlaW5nIGNvbnRyb2xsZWRcbiAgICAgKi9cbiAgXCJhcmlhLWNvbnRyb2xzXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwicGFnZUNvdW50XCIsIFwiYWN0aXZlUGFnZVwiLCBcIm9uUGFnZUNsaWNrXCIsIFwiY29tcHJlc3NlZFwiLCBcImFyaWEtY29udHJvbHNcIiwgXCJyZXNwb25zaXZlXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aVBhZ2luYXRpb25CdXR0b24gfSBmcm9tICcuL3BhZ2luYXRpb25fYnV0dG9uJztcbmltcG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi90ZXh0JztcbmltcG9ydCB7IEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdyB9IGZyb20gJy4vcGFnaW5hdGlvbl9idXR0b25fYXJyb3cnO1xuaW1wb3J0IHsgdXNlSXNXaXRoaW5CcmVha3BvaW50cywgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBldWlQYWdpbmF0aW9uU3R5bGVzIH0gZnJvbSAnLi9wYWdpbmF0aW9uLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIE1BWF9WSVNJQkxFX1BBR0VTID0gNTtcbnZhciBOVU1CRVJfU1VSUk9VTkRJTkdfUEFHRVMgPSBNYXRoLmZsb29yKE1BWF9WSVNJQkxFX1BBR0VTICogMC41KTtcbmV4cG9ydCB2YXIgRXVpUGFnaW5hdGlvbiA9IGZ1bmN0aW9uIEV1aVBhZ2luYXRpb24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRwYWdlQ291bnQgPSBfcmVmLnBhZ2VDb3VudCxcbiAgICBwYWdlQ291bnQgPSBfcmVmJHBhZ2VDb3VudCA9PT0gdm9pZCAwID8gMSA6IF9yZWYkcGFnZUNvdW50LFxuICAgIF9yZWYkYWN0aXZlUGFnZSA9IF9yZWYuYWN0aXZlUGFnZSxcbiAgICBhY3RpdmVQYWdlID0gX3JlZiRhY3RpdmVQYWdlID09PSB2b2lkIDAgPyAwIDogX3JlZiRhY3RpdmVQYWdlLFxuICAgIF9yZWYkb25QYWdlQ2xpY2sgPSBfcmVmLm9uUGFnZUNsaWNrLFxuICAgIG9uUGFnZUNsaWNrID0gX3JlZiRvblBhZ2VDbGljayA9PT0gdm9pZCAwID8gZnVuY3Rpb24gKCkge30gOiBfcmVmJG9uUGFnZUNsaWNrLFxuICAgIF9jb21wcmVzc2VkID0gX3JlZi5jb21wcmVzc2VkLFxuICAgIGFyaWFDb250cm9scyA9IF9yZWZbJ2FyaWEtY29udHJvbHMnXSxcbiAgICBfcmVmJHJlc3BvbnNpdmUgPSBfcmVmLnJlc3BvbnNpdmUsXG4gICAgcmVzcG9uc2l2ZSA9IF9yZWYkcmVzcG9uc2l2ZSA9PT0gdm9pZCAwID8gWyd4cycsICdzJ10gOiBfcmVmJHJlc3BvbnNpdmUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNSZXNwb25zaXZlID0gdXNlSXNXaXRoaW5CcmVha3BvaW50cyhyZXNwb25zaXZlLCAhIXJlc3BvbnNpdmUpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpUGFnaW5hdGlvblN0eWxlcyhldWlUaGVtZSk7XG5cbiAgLy8gRm9yY2UgdG8gYGNvbXByZXNzZWRgIHZlcnNpb24gaWYgc3BlY2lmaWVkIG9yIHdpdGhpbiB0aGUgcmVzcG9uc2l2ZSBicmVha3BvaW50c1xuICB2YXIgY29tcHJlc3NlZCA9IF9jb21wcmVzc2VkIHx8IGlzUmVzcG9uc2l2ZTtcbiAgdmFyIHNhZmVDbGljayA9IGZ1bmN0aW9uIHNhZmVDbGljayhlLCBwYWdlSW5kZXgpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGFyaWFDb250cm9scykge1xuICAgICAgdmFyIGNvbnRyb2xsZWRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXJpYUNvbnRyb2xzKTtcbiAgICAgIGlmIChjb250cm9sbGVkRWxlbWVudCkge1xuICAgICAgICBjb250cm9sbGVkRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgICBvblBhZ2VDbGljayhwYWdlSW5kZXgpO1xuICB9O1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBhZ2luYXRpb24nLCBjbGFzc05hbWUpO1xuICB2YXIgZmlyc3RCdXR0b24gPSAocGFnZUNvdW50IDwgMSB8fCBjb21wcmVzc2VkKSAmJiBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwiZmlyc3RcIixcbiAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgMCk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gMFxuICB9KTtcbiAgdmFyIHByZXZpb3VzQnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3csIHtcbiAgICB0eXBlOiBcInByZXZpb3VzXCIsXG4gICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIGFjdGl2ZVBhZ2UgLSAxKTtcbiAgICB9LFxuICAgIGRpc2FibGVkOiBhY3RpdmVQYWdlID09PSAwXG4gIH0pO1xuICB2YXIgbmV4dEJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LCB7XG4gICAgdHlwZTogXCJuZXh0XCIsXG4gICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIGFjdGl2ZVBhZ2UgKyAxKTtcbiAgICB9LFxuICAgIGRpc2FibGVkOiBhY3RpdmVQYWdlID09PSAtMSB8fCBhY3RpdmVQYWdlID09PSBwYWdlQ291bnQgLSAxXG4gIH0pO1xuICB2YXIgbGFzdEJ1dHRvbiA9IChwYWdlQ291bnQgPCAxIHx8IGNvbXByZXNzZWQpICYmIF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LCB7XG4gICAgdHlwZTogXCJsYXN0XCIsXG4gICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIHBhZ2VDb3VudCA/IHBhZ2VDb3VudCAtIDEgOiAtMSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gLTEgfHwgYWN0aXZlUGFnZSA9PT0gcGFnZUNvdW50IC0gMVxuICB9KTtcbiAgdmFyIGNlbnRlclBhZ2VDb3VudDtcbiAgaWYgKHBhZ2VDb3VudCkge1xuICAgIHZhciBzaGFyZWRCdXR0b25Qcm9wcyA9IHtcbiAgICAgIGFjdGl2ZVBhZ2U6IGFjdGl2ZVBhZ2UsXG4gICAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICAgIHNhZmVDbGljazogc2FmZUNsaWNrLFxuICAgICAgcGFnZUNvdW50OiBwYWdlQ291bnRcbiAgICB9O1xuICAgIGlmIChjb21wcmVzc2VkKSB7XG4gICAgICBjZW50ZXJQYWdlQ291bnQgPSBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICAgIGNzczogc3R5bGVzLmV1aVBhZ2luYXRpb25fX2NvbXByZXNzZWRUZXh0LFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpUGFnaW5hdGlvbl9fY29tcHJlc3NlZFRleHRcIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb24ucGFnZU9mVG90YWxDb21wcmVzc2VkXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwie3BhZ2V9IG9mIHt0b3RhbH1cIixcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgcGFnZTogX19fRW1vdGlvbkpTWChcInNwYW5cIiwgbnVsbCwgYWN0aXZlUGFnZSArIDEpLFxuICAgICAgICAgIHRvdGFsOiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBudWxsLCBwYWdlQ291bnQpXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHBhZ2VzID0gW107XG4gICAgICB2YXIgZmlyc3RQYWdlSW5SYW5nZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKGFjdGl2ZVBhZ2UgLSBOVU1CRVJfU1VSUk9VTkRJTkdfUEFHRVMsIHBhZ2VDb3VudCAtIE1BWF9WSVNJQkxFX1BBR0VTKSk7XG4gICAgICB2YXIgbGFzdFBhZ2VJblJhbmdlID0gTWF0aC5taW4ocGFnZUNvdW50LCBmaXJzdFBhZ2VJblJhbmdlICsgTUFYX1ZJU0lCTEVfUEFHRVMpO1xuICAgICAgZm9yICh2YXIgaSA9IGZpcnN0UGFnZUluUmFuZ2UsIGluZGV4ID0gMDsgaSA8IGxhc3RQYWdlSW5SYW5nZTsgaSsrLCBpbmRleCsrKSB7XG4gICAgICAgIHBhZ2VzLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgIHBhZ2VJbmRleDogaSxcbiAgICAgICAgICBrZXk6IGlcbiAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICB9XG4gICAgICB2YXIgZmlyc3RQYWdlQnV0dG9ucyA9IFtdO1xuICAgICAgaWYgKGZpcnN0UGFnZUluUmFuZ2UgPiAwKSB7XG4gICAgICAgIGZpcnN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgIGtleTogMFxuICAgICAgICB9LCBzaGFyZWRCdXR0b25Qcm9wcykpKTtcbiAgICAgICAgaWYgKGZpcnN0UGFnZUluUmFuZ2UgPiAxICYmIGZpcnN0UGFnZUluUmFuZ2UgIT09IDIpIHtcbiAgICAgICAgICBmaXJzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICBrZXk6IFwic3RhcnRpbmdFbGxpcHNlc1wiLFxuICAgICAgICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbi5maXJzdFJhbmdlQXJpYUxhYmVsXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIlNraXBwaW5nIHBhZ2VzIDIgdG8ge2xhc3RQYWdlfVwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGxhc3RQYWdlOiBmaXJzdFBhZ2VJblJhbmdlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGZpcnN0UmFuZ2VBcmlhTGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwge1xuICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogZmlyc3RSYW5nZUFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25fX2l0ZW1cIixcbiAgICAgICAgICAgICAgY3NzOiBzdHlsZXMuZXVpUGFnaW5hdGlvbl9fZWxsaXBzaXNcbiAgICAgICAgICAgIH0sIFwiXFx1MjAyNlwiKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3RQYWdlSW5SYW5nZSA9PT0gMikge1xuICAgICAgICAgIGZpcnN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IDEsXG4gICAgICAgICAgICBrZXk6IDFcbiAgICAgICAgICB9LCBzaGFyZWRCdXR0b25Qcm9wcykpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGxhc3RQYWdlQnV0dG9ucyA9IFtdO1xuICAgICAgaWYgKGxhc3RQYWdlSW5SYW5nZSA8IHBhZ2VDb3VudCkge1xuICAgICAgICBpZiAobGFzdFBhZ2VJblJhbmdlICsgMSA9PT0gcGFnZUNvdW50IC0gMSkge1xuICAgICAgICAgIGxhc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIHBhZ2VJbmRleDogbGFzdFBhZ2VJblJhbmdlLFxuICAgICAgICAgICAga2V5OiBsYXN0UGFnZUluUmFuZ2VcbiAgICAgICAgICB9LCBzaGFyZWRCdXR0b25Qcm9wcykpKTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXN0UGFnZUluUmFuZ2UgPCBwYWdlQ291bnQgLSAxKSB7XG4gICAgICAgICAgbGFzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICBrZXk6IFwiZW5kaW5nRWxsaXBzZXNcIixcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb24ubGFzdFJhbmdlQXJpYUxhYmVsXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIlNraXBwaW5nIHBhZ2VzIHtmaXJzdFBhZ2V9IHRvIHtsYXN0UGFnZX1cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBmaXJzdFBhZ2U6IGxhc3RQYWdlSW5SYW5nZSArIDEsXG4gICAgICAgICAgICAgIGxhc3RQYWdlOiBwYWdlQ291bnQgLSAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGxhc3RSYW5nZUFyaWFMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsaVwiLCB7XG4gICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBsYXN0UmFuZ2VBcmlhTGFiZWwsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19pdGVtXCIsXG4gICAgICAgICAgICAgIGNzczogc3R5bGVzLmV1aVBhZ2luYXRpb25fX2VsbGlwc2lzXG4gICAgICAgICAgICB9LCBcIlxcdTIwMjZcIik7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBwYWdlSW5kZXg6IHBhZ2VDb3VudCAtIDEsXG4gICAgICAgICAga2V5OiBwYWdlQ291bnQgLSAxXG4gICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgfVxuICAgICAgdmFyIHNlbGVjdGFibGVQYWdlcyA9IHBhZ2VzO1xuICAgICAgdmFyIGFjY2Vzc2libGVOYW1lID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0WydhcmlhLWxhYmVsJ10gJiYge1xuICAgICAgICAnYXJpYS1sYWJlbCc6IHJlc3RbJ2FyaWEtbGFiZWwnXVxuICAgICAgfSksIHJlc3RbJ2FyaWEtbGFiZWxsZWRieSddICYmIHtcbiAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IHJlc3RbJ2FyaWEtbGFiZWxsZWRieSddXG4gICAgICB9KTtcbiAgICAgIGNlbnRlclBhZ2VDb3VudCA9IF9fX0Vtb3Rpb25KU1goXCJ1bFwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19saXN0XCIsXG4gICAgICAgIGNzczogc3R5bGVzLmV1aVBhZ2luYXRpb25fX2xpc3RcbiAgICAgIH0sIGFjY2Vzc2libGVOYW1lKSwgZmlyc3RQYWdlQnV0dG9ucywgc2VsZWN0YWJsZVBhZ2VzLCBsYXN0UGFnZUJ1dHRvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFsbCB0aGUgaTE4biBzdHJpbmdzIHVzZWQgdG8gYnVpbGQgdGhlIHdob2xlIFNSLW9ubHkgdGV4dFxuICB2YXIgbGFzdExhYmVsID0gdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbi5sYXN0JywgJ0xhc3QnKTtcbiAgdmFyIHBhZ2VMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24ucGFnZScsICdQYWdlJyk7XG4gIHZhciBvZkxhYmVsID0gdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbi5vZicsICdvZicpO1xuICB2YXIgY29sbGVjdGlvbkxhYmVsID0gdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbi5jb2xsZWN0aW9uJywgJ2NvbGxlY3Rpb24nKTtcbiAgdmFyIGZyb21FbmRMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24uZnJvbUVuZExhYmVsJywgJ2Zyb20gZW5kJyk7XG5cbiAgLy8gQmFzZWQgb24gdGhlIGBhY3RpdmVQYWdlYCBjb3VudCwgYnVpbGQgdGhlIGZyb250IG9mIHRoZSBTUi1vbmx5IHRleHRcbiAgLy8gaS5lLiBgUGFnZSAxYCwgYFBhZ2UgMiBmcm9tIGVuZGAsIGBMYXN0IFBhZ2VgXG4gIHZhciBhY2Nlc3NpYmxlUGFnZVN0cmluZyA9IGZ1bmN0aW9uIGFjY2Vzc2libGVQYWdlU3RyaW5nKCkge1xuICAgIGlmIChhY3RpdmVQYWdlIDwgLTEpIHJldHVybiBcIlwiLmNvbmNhdChwYWdlTGFiZWwsIFwiIFwiKS5jb25jYXQoTWF0aC5hYnMoYWN0aXZlUGFnZSksIFwiIFwiKS5jb25jYXQoZnJvbUVuZExhYmVsKTtcbiAgICBpZiAoYWN0aXZlUGFnZSA9PT0gLTEpIHJldHVybiBcIlwiLmNvbmNhdChsYXN0TGFiZWwsIFwiIFwiKS5jb25jYXQocGFnZUxhYmVsKTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQocGFnZUxhYmVsLCBcIiBcIikuY29uY2F0KGFjdGl2ZVBhZ2UgKyAxKTtcbiAgfTtcblxuICAvLyBJZiBgcGFnZUNvdW50YCBpcyB1bmtub3duIGNhbGwgaXQgYGNvbGxlY3Rpb25gXG4gIHZhciBhY2Nlc3NpYmxlQ29sbGVjdGlvblN0cmluZyA9IHBhZ2VDb3VudCA9PT0gMCA/IGNvbGxlY3Rpb25MYWJlbCA6IHBhZ2VDb3VudC50b1N0cmluZygpO1xuXG4gIC8vIENyZWF0ZSB0aGUgd2hvbGUgc3RyaW5nIHdpdGggdG90YWwgcGFnZUNvdW50IG9yIGBjb2xsZWN0aW9uYFxuICB2YXIgYWNjZXNzaWJsZVBhZ2VDb3VudCA9IFwiXCIuY29uY2F0KGFjY2Vzc2libGVQYWdlU3RyaW5nKCksIFwiIFwiKS5jb25jYXQob2ZMYWJlbCwgXCIgXCIpLmNvbmNhdChhY2Nlc3NpYmxlQ29sbGVjdGlvblN0cmluZyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwibmF2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IHN0eWxlcy5ldWlQYWdpbmF0aW9uLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgXCJhcmlhLWF0b21pY1wiOiBcInRydWVcIixcbiAgICBcImFyaWEtcmVsZXZhbnRcIjogXCJhZGRpdGlvbnMgdGV4dFwiLFxuICAgIHJvbGU6IFwic3RhdHVzXCJcbiAgfSwgYWNjZXNzaWJsZVBhZ2VDb3VudCkpLCBmaXJzdEJ1dHRvbiwgcHJldmlvdXNCdXR0b24sIGNlbnRlclBhZ2VDb3VudCwgbmV4dEJ1dHRvbiwgbGFzdEJ1dHRvbik7XG59O1xuRXVpUGFnaW5hdGlvbi5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzLlxuICAgICAqIFBhc3MgYDBgIGlmIHRvdGFsIGNvdW50IGlzIHVua25vd24uXG4gICAgICovXG4gIHBhZ2VDb3VudDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcGFnZSB1c2luZyBhIHplcm8gYmFzZWQgaW5kZXguXG4gICAgICogU28gaWYgeW91IHNldCB0aGUgYWN0aXZlUGFnZSB0byAxLCBpdCB3aWxsIGFjdGl2YXRlIHRoZSBzZWNvbmQgcGFnZS5cbiAgICAgKiBQYXNzIGAtMWAgZm9yIGZvcmNpbmcgdG8gbGFzdCBwYWdlLlxuICAgICAqL1xuICBhY3RpdmVQYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICAgKiBDbGljayBoYW5kbGVyIHRoYXQgcGFzc2VzIGJhY2sgdGhlIGludGVybmFsbHkgY2FsY3VsYXRlZCBgYWN0aXZlUGFnZWAgaW5kZXhcbiAgICAgKi9cbiAgb25QYWdlQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBJZiB0cnVlLCB3aWxsIG9ubHkgc2hvdyBuZXh0L3ByZXYgYXJyb3dzIGFuZCBzaW1wbGlmaWVkIG51bWJlciBzZXQuXG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBJZiBwYXNzZWQgaW4sIHBhc3NlcyB2YWx1ZSB0aHJvdWdoIHRvIGVhY2ggYnV0dG9uIHRvIHNldCBhcmlhLWNvbnRyb2xzLlxuICAgICAqL1xuICBcImFyaWEtY29udHJvbHNcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICogQXV0b21hdGljYWxseSByZWR1Y2VzIHRvIHRoZSBgY29tcHJlc3NlZGAgdmVyc2lvbiBvbiBzbWFsbGVyIHNjcmVlbnMuXG4gICAgICogUmVtb3ZlIGNvbXBsZXRlbHkgd2l0aCBgZmFsc2VgIG9yIHByb3ZpZGUgeW91ciBvd24gbGlzdCBvZiByZXNwb25zaXZlIGJyZWFrcG9pbnRzLlxuICAgICAqL1xuICByZXNwb25zaXZlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pXG59O1xudmFyIFBhZ2luYXRpb25CdXR0b25XcmFwcGVyID0gZnVuY3Rpb24gUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIoX3JlZjIpIHtcbiAgdmFyIHBhZ2VJbmRleCA9IF9yZWYyLnBhZ2VJbmRleCxcbiAgICBfcmVmMiRpbkxpc3QgPSBfcmVmMi5pbkxpc3QsXG4gICAgaW5MaXN0ID0gX3JlZjIkaW5MaXN0ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkaW5MaXN0LFxuICAgIGFjdGl2ZVBhZ2UgPSBfcmVmMi5hY3RpdmVQYWdlLFxuICAgIHBhZ2VDb3VudCA9IF9yZWYyLnBhZ2VDb3VudCxcbiAgICBhcmlhQ29udHJvbHMgPSBfcmVmMi5hcmlhQ29udHJvbHMsXG4gICAgc2FmZUNsaWNrID0gX3JlZjIuc2FmZUNsaWNrLFxuICAgIGRpc2FibGVkID0gX3JlZjIuZGlzYWJsZWQ7XG4gIHZhciBidXR0b24gPSBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b24sIHtcbiAgICBpc0FjdGl2ZTogcGFnZUluZGV4ID09PSBhY3RpdmVQYWdlLFxuICAgIHRvdGFsUGFnZXM6IHBhZ2VDb3VudCxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgcGFnZUluZGV4KTtcbiAgICB9LFxuICAgIHBhZ2VJbmRleDogcGFnZUluZGV4LFxuICAgIFwiYXJpYS1jb250cm9sc1wiOiBhcmlhQ29udHJvbHMsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gIH0pO1xuICBpZiAoaW5MaXN0KSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsaVwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpUGFnaW5hdGlvbl9faXRlbVwiXG4gICAgfSwgYnV0dG9uKTtcbiAgfVxuICByZXR1cm4gYnV0dG9uO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImlzQWN0aXZlXCIsIFwicGFnZUluZGV4XCIsIFwidG90YWxQYWdlc1wiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVBhZ2luYXRpb25CdXR0b25TdHlsZXMgfSBmcm9tICcuL3BhZ2luYXRpb25fYnV0dG9uLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlQYWdpbmF0aW9uQnV0dG9uID0gZnVuY3Rpb24gRXVpUGFnaW5hdGlvbkJ1dHRvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBpc0FjdGl2ZSA9IF9yZWYuaXNBY3RpdmUsXG4gICAgcGFnZUluZGV4ID0gX3JlZi5wYWdlSW5kZXgsXG4gICAgdG90YWxQYWdlcyA9IF9yZWYudG90YWxQYWdlcyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlQYWdpbmF0aW9uQnV0dG9uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIHBhZ2luYXRpb25CdXR0b25Dc3MgPSBbc3R5bGVzLmV1aVBhZ2luYXRpb25CdXR0b24sIGlzQWN0aXZlICYmIHN0eWxlcy5pc0FjdGl2ZV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUGFnaW5hdGlvbkJ1dHRvbicsIGNsYXNzTmFtZSk7XG4gIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICBjc3M6IHBhZ2luYXRpb25CdXR0b25Dc3MsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNpemU6ICdzJyxcbiAgICBjb2xvcjogJ3RleHQnLFxuICAgICdkYXRhLXRlc3Qtc3Viaic6IFwicGFnaW5hdGlvbi1idXR0b24tXCIuY29uY2F0KHBhZ2VJbmRleCksXG4gICAgaXNEaXNhYmxlZDogaXNBY3RpdmVcbiAgfSwgaXNBY3RpdmUgJiYge1xuICAgICdhcmlhLWN1cnJlbnQnOiB0cnVlXG4gIH0pLCByZXN0WydhcmlhLWNvbnRyb2xzJ10gJiYge1xuICAgIGhyZWY6IFwiI1wiLmNvbmNhdChyZXN0WydhcmlhLWNvbnRyb2xzJ10pXG4gIH0pLCByZXN0KTtcbiAgdmFyIHBhZ2VOdW1iZXIgPSBwYWdlSW5kZXggKyAxO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbkJ1dHRvbi5sb25nUGFnZVN0cmluZ1wiLFxuICAgIGRlZmF1bHQ6IFwiUGFnZSB7cGFnZX0gb2Yge3RvdGFsUGFnZXN9XCIsXG4gICAgdmFsdWVzOiB7XG4gICAgICBwYWdlOiBwYWdlTnVtYmVyLFxuICAgICAgdG90YWxQYWdlczogdG90YWxQYWdlc1xuICAgIH1cbiAgfSwgZnVuY3Rpb24gKGxvbmdQYWdlU3RyaW5nKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbkJ1dHRvbi5zaG9ydFBhZ2VTdHJpbmdcIixcbiAgICAgIGRlZmF1bHQ6IFwiUGFnZSB7cGFnZX1cIixcbiAgICAgIHZhbHVlczoge1xuICAgICAgICBwYWdlOiBwYWdlTnVtYmVyXG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHNob3J0UGFnZVN0cmluZykge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRW1wdHksIF9leHRlbmRzKHtcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRvdGFsUGFnZXMgPyBsb25nUGFnZVN0cmluZyA6IHNob3J0UGFnZVN0cmluZ1xuICAgICAgfSwgcHJvcHMpLCBwYWdlTnVtYmVyKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuRXVpUGFnaW5hdGlvbkJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBBbnkgb2YgdGhlIG5hbWVkIGNvbG9yIHBhbGV0dGUgb3B0aW9ucy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICBmbHVzaDogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYW5vbWFseUNoYXJ0XCIsIFwiYW5vbWFseVN3aW1MYW5lXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhcnRpY2xlXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdFwiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJiZXRhXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoYW5nZVBvaW50RGV0ZWN0aW9uXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsaWNrTGVmdFwiLCBcImNsaWNrUmlnaHRcIiwgXCJjbG9ja1wiLCBcImNsb2NrQ291bnRlclwiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQ2lyY2xlXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpZmZcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRpc2N1c3NcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3RJbkNpcmNsZVwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlbmRwb2ludFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImVycm9yXCIsIFwiZXJyb3JGaWxsZWRcIiwgXCJlc3FsVmlzXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWVsZFN0YXRpc3RpY3NcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZpbHRlckV4Y2x1ZGVcIiwgXCJmaWx0ZXJJZ25vcmVcIiwgXCJmaWx0ZXJJbmNsdWRlXCIsIFwiZmlsdGVySW5DaXJjbGVcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhYk9tbmlkaXJlY3Rpb25hbFwiLCBcImdyYWRpZW50XCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleFwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5kZXhUZW1wb3JhcnlcIiwgXCJpbmZpbml0eVwiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5XCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXVuY2hcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dQYXR0ZXJuQW5hbHlzaXNcIiwgXCJsb2dSYXRlQW5hbHlzaXNcIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvVnVsbmVyYWJpbGl0eU1hbmFnZW1lbnRcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibWludXNJblNxdWFyZVwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibW92ZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5ld0NoYXRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFsZXR0ZVwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZUJyZWFrc1wiLCBcInBpcGVsaW5lQXBwXCIsIFwicGlwZU5vQnJlYWtzXCIsIFwicGl2b3RcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwbHVzSW5TcXVhcmVcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic2luZ2xlTWV0cmljVmlld2VyXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydEFzY2VuZGluZ1wiLCBcInNvcnREZXNjZW5kaW5nXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzXCIsIFwic3BhY2VzQXBwXCIsIFwic3BhcmtsZXNcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGluZVdpdGhBcnJvd1wiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFuc2l0aW9uTGVmdEluXCIsIFwidHJhbnNpdGlvbkxlZnRPdXRcIiwgXCJ0cmFuc2l0aW9uVG9wSW5cIiwgXCJ0cmFuc2l0aW9uVG9wT3V0XCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ2dWxuZXJhYmlsaXR5TWFuYWdlbWVudEFwcFwiLCBcIndhcm5pbmdcIiwgXCJ3YXJuaW5nRmlsbGVkXCIsIFwiYWxlcnRcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EaW1lbnNpb25cIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TZW1hbnRpY1RleHRcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCIsIFwidG9rZW5WZWN0b3JEZW5zZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlblZlY3RvclNwYXJzZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW3VuZGVmaW5lZF0pXSksXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGA8c3Bhbj5gIHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dC9jaGlsZHJlbiBvbmx5IChub3QgaWNvbilcbiAgICAgKlxuICAgICAqIFRoaXMgc3BhbiB3cmFwcGVyIGNhbiBiZSByZW1vdmVkIGJ5IHBhc3NpbmcgYHRleHRQcm9wcz17ZmFsc2V9YC5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIGlzQWN0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgcGFnZUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHRvdGFsUGFnZXM6IFByb3BUeXBlcy5udW1iZXJcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB2YXIgZXVpUGFnaW5hdGlvbkJ1dHRvblN0eWxlcyA9IGZ1bmN0aW9uIGV1aVBhZ2luYXRpb25CdXR0b25TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpUGFnaW5hdGlvbkJ1dHRvbjogLyojX19QVVJFX18qL2NzcyhcIm91dGxpbmUtb2Zmc2V0Oi1cIiwgZXVpVGhlbWUuZm9jdXMud2lkdGgsIFwiOztsYWJlbDpldWlQYWdpbmF0aW9uQnV0dG9uO1wiKSxcbiAgICAvLyBTdGF0ZXNcbiAgICBpc0FjdGl2ZTogLyojX19QVVJFX18qL2NzcyhcImZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5ib2xkLCBcIjtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIFwiOyYsJjpob3ZlcntjdXJzb3I6ZGVmYXVsdDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO307bGFiZWw6aXNBY3RpdmU7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkljb24gfSBmcm9tICcuLi9idXR0b24vYnV0dG9uX2ljb24nO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpUGFnaW5hdGlvbkJ1dHRvblN0eWxlcyB9IGZyb20gJy4vcGFnaW5hdGlvbl9idXR0b24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgdHlwZVRvSWNvblR5cGVNYXAgPSB7XG4gIGZpcnN0OiAnYXJyb3dTdGFydCcsXG4gIHByZXZpb3VzOiAnYXJyb3dMZWZ0JyxcbiAgbmV4dDogJ2Fycm93UmlnaHQnLFxuICBsYXN0OiAnYXJyb3dFbmQnXG59O1xuZXhwb3J0IHZhciBUWVBFUyA9IGtleXNPZih0eXBlVG9JY29uVHlwZU1hcCk7XG5leHBvcnQgdmFyIEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdyA9IGZ1bmN0aW9uIEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdyhfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICB0eXBlID0gX3JlZi50eXBlLFxuICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBhcmlhQ29udHJvbHMgPSBfcmVmLmFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpUGFnaW5hdGlvbkJ1dHRvblN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBsYWJlbHMgPSB7XG4gICAgZmlyc3Q6IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5maXJzdFBhZ2UnLCAnRmlyc3QgcGFnZScpLFxuICAgIHByZXZpb3VzOiB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cucHJldmlvdXNQYWdlJywgJ1ByZXZpb3VzIHBhZ2UnKSxcbiAgICBuZXh0OiB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cubmV4dFBhZ2UnLCAnTmV4dCBwYWdlJyksXG4gICAgbGFzdDogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93Lmxhc3RQYWdlJywgJ0xhc3QgcGFnZScpXG4gIH07XG4gIHZhciBidXR0b25Qcm9wcyA9IHt9O1xuICBpZiAoYXJpYUNvbnRyb2xzICYmICFkaXNhYmxlZCkge1xuICAgIGJ1dHRvblByb3BzLmhyZWYgPSBcIiNcIi5jb25jYXQoYXJpYUNvbnRyb2xzKTtcbiAgICBidXR0b25Qcm9wc1snYXJpYS1jb250cm9scyddID0gYXJpYUNvbnRyb2xzO1xuICB9XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkljb24sIF9leHRlbmRzKHtcbiAgICBjc3M6IHN0eWxlcy5ldWlQYWdpbmF0aW9uQnV0dG9uLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpUGFnaW5hdGlvbkFycm93QnV0dG9uJywgY2xhc3NOYW1lKSxcbiAgICBjb2xvcjogXCJ0ZXh0XCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGxhYmVsc1t0eXBlXSxcbiAgICB0aXRsZTogZGlzYWJsZWQgPyB1bmRlZmluZWQgOiBsYWJlbHNbdHlwZV0sXG4gICAgaXNEaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwicGFnaW5hdGlvbi1idXR0b24tXCIuY29uY2F0KHR5cGUpLFxuICAgIGljb25UeXBlOiB0eXBlVG9JY29uVHlwZU1hcFt0eXBlXVxuICB9LCBidXR0b25Qcm9wcykpO1xufTtcbkV1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5wcm9wVHlwZXMgPSB7XG4gIHR5cGU6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBhcmlhQ29udHJvbHM6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxDU1NXaXRoRmFsbGJhY2ssIGV1aVNjcm9sbEJhclN0eWxlcywgZXVpRm9udFNpemUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxZGJkMnJjLWV1aVBhZ2luYXRpb25fX2xpc3RcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTtsYWJlbDpldWlQYWdpbmF0aW9uX19saXN0O1wiXG59IDoge1xuICBuYW1lOiBcIjFkYmQycmMtZXVpUGFnaW5hdGlvbl9fbGlzdFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2xhYmVsOmV1aVBhZ2luYXRpb25fX2xpc3Q7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpUGFnaW5hdGlvblN0eWxlcyA9IGZ1bmN0aW9uIGV1aVBhZ2luYXRpb25TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpUGFnaW5hdGlvbjogLyojX19QVVJFX18qL2NzcyhldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSwgXCIgZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtcIiwgbG9naWNhbENTU1dpdGhGYWxsYmFjaygnb3ZlcmZsb3cteScsICdoaWRkZW4nKSwgXCIgXCIsIGxvZ2ljYWxDU1NXaXRoRmFsbGJhY2soJ292ZXJmbG93LXgnLCAnYXV0bycpLCBcIjs7bGFiZWw6ZXVpUGFnaW5hdGlvbjtcIiksXG4gICAgLy8gRWxlbWVudHNcbiAgICBldWlQYWdpbmF0aW9uX19jb21wcmVzc2VkVGV4dDogLyojX19QVVJFX18qL2NzcyhcImRpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0OjE7PnNwYW57XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS5zKSwgXCIgZm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0LnNlbWlCb2xkLCBcIjsmOmZpcnN0LW9mLXR5cGV7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7fX07bGFiZWw6ZXVpUGFnaW5hdGlvbl9fY29tcHJlc3NlZFRleHQ7XCIpLFxuICAgIGV1aVBhZ2luYXRpb25fX2xpc3Q6IF9yZWYsXG4gICAgZXVpUGFnaW5hdGlvbl9fZWxsaXBzaXM6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRpc2FibGVkVGV4dCwgXCI7Zm9udC1zaXplOlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJykuZm9udFNpemUsIFwiO1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnMpLCBcIiBcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgZXVpVGhlbWUuc2l6ZS5sKSwgXCI7O2xhYmVsOmV1aVBhZ2luYXRpb25fX2VsbGlwc2lzO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29tcG9uZW50RGVmYXVsdHMgfSBmcm9tICcuLi8uLi9wcm92aWRlci9jb21wb25lbnRfZGVmYXVsdHMnO1xuLyoqXG4gKiBUYWJsZSBwYWdpbmF0aW9uIHByb3AgZGVmYXVsdHMgbGl2ZSBpbiBhIHNlcGFyYXRlIGZpbGUgYmVjYXVzZVxuICogdGhleSdsbCBiZSByZXVzZWQgYnkgYmFzaWMgdGFibGVzIGFuZCBkYXRhZ3JpZHMgYXMgZmFsbGJhY2tzXG4gKi9cblxuZXhwb3J0IHZhciBldWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cyA9IHtcbiAgaXRlbXNQZXJQYWdlOiAxMCxcbiAgaXRlbXNQZXJQYWdlT3B0aW9uczogWzEwLCAyNSwgNTBdLFxuICBzaG93UGVyUGFnZU9wdGlvbnM6IHRydWVcbn07XG5leHBvcnQgdmFyIHVzZUV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzID0gZnVuY3Rpb24gdXNlRXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMoKSB7XG4gIHZhciBjb25zdW1lckRlZmF1bHRzID0gdXNlQ29tcG9uZW50RGVmYXVsdHMoKS5FdWlUYWJsZVBhZ2luYXRpb247XG4gIHJldHVybiB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBldWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cyksIGNvbnN1bWVyRGVmYXVsdHMpO1xuICB9LCBbY29uc3VtZXJEZWZhdWx0c10pO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImlzU2VsZWN0ZWRcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIHVzZUV1aU1lbW9pemVkU3R5bGVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsgZXVpVGFiU3R5bGVzLCBldWlUYWJDb250ZW50U3R5bGVzIH0gZnJvbSAnLi90YWIuc3R5bGVzJztcbmltcG9ydCB7IEV1aVRhYnNDb250ZXh0IH0gZnJvbSAnLi90YWJzX2NvbnRleHQnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFiID0gZnVuY3Rpb24gRXVpVGFiKF9yZWYpIHtcbiAgdmFyIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9kaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICByZWwgPSBfcmVmLnJlbCxcbiAgICBwcmVwZW5kID0gX3JlZi5wcmVwZW5kLFxuICAgIGFwcGVuZCA9IF9yZWYuYXBwZW5kLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIF91c2VDb250ZXh0ID0gdXNlQ29udGV4dChFdWlUYWJzQ29udGV4dCksXG4gICAgc2l6ZSA9IF91c2VDb250ZXh0LnNpemUsXG4gICAgZXhwYW5kID0gX3VzZUNvbnRleHQuZXhwYW5kO1xuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG5cbiAgLy8gS2VlcCBDU1MgY2xhc3NuYW1lcyBmb3IgcmVmZXJlbmNlXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFiJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYi1pc1NlbGVjdGVkJzogaXNTZWxlY3RlZFxuICB9KTtcbiAgdmFyIHRhYlN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYlN0eWxlcyk7XG4gIHZhciBjc3NUYWJTdHlsZXMgPSBbdGFiU3R5bGVzLmV1aVRhYiwgZXhwYW5kICYmIHRhYlN0eWxlcy5leHBhbmRlZCwgZGlzYWJsZWQgJiYgdGFiU3R5bGVzLmRpc2FibGVkLmRpc2FibGVkLCBpc1NlbGVjdGVkICYmIChkaXNhYmxlZCA/IHRhYlN0eWxlcy5kaXNhYmxlZC5zZWxlY3RlZCA6IHRhYlN0eWxlcy5zZWxlY3RlZCldO1xuICB2YXIgdGFiQ29udGVudFN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYkNvbnRlbnRTdHlsZXMpO1xuICB2YXIgY3NzVGFiQ29udGVudFN0eWxlcyA9IFt0YWJDb250ZW50U3R5bGVzLmV1aVRhYl9fY29udGVudCwgc2l6ZSAmJiB0YWJDb250ZW50U3R5bGVzW3NpemVdXTtcbiAgdmFyIHByZXBlbmROb2RlID0gcHJlcGVuZCAmJiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYl9fcHJlcGVuZFwiXG4gIH0sIHByZXBlbmQpO1xuICB2YXIgYXBwZW5kTm9kZSA9IGFwcGVuZCAmJiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYl9fYXBwZW5kXCJcbiAgfSwgYXBwZW5kKTtcblxuICAvLyAgPGE+IGVsZW1lbnRzIGRvbid0IHJlc3BlY3QgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLiBTbyBpZiB3ZSdyZSBkaXNhYmxlZCwgd2UnbGwganVzdCBwcmV0ZW5kXG4gIC8vICB0aGlzIGlzIGEgYnV0dG9uIGFuZCBwaWdneWJhY2sgb2ZmIGl0cyBkaXNhYmxlZCBzdHlsZXMuXG4gIGlmIChocmVmICYmICFkaXNhYmxlZCkge1xuICAgIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImFcIiwgX2V4dGVuZHMoe1xuICAgICAgcm9sZTogXCJ0YWJcIixcbiAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAhIWlzU2VsZWN0ZWQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBjc3M6IGNzc1RhYlN0eWxlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsXG4gICAgfSwgcmVzdCksIHByZXBlbmROb2RlLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpVGFiX19jb250ZW50IGV1aS10ZXh0VHJ1bmNhdGVcIixcbiAgICAgIGNzczogY3NzVGFiQ29udGVudFN0eWxlc1xuICAgIH0sIGNoaWxkcmVuKSwgYXBwZW5kTm9kZSk7XG4gIH1cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IFwidGFiXCIsXG4gICAgXCJhcmlhLXNlbGVjdGVkXCI6ICEhaXNTZWxlY3RlZCxcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1RhYlN0eWxlcyxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgfSwgcmVzdCksIHByZXBlbmROb2RlLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYl9fY29udGVudCBldWktdGV4dFRydW5jYXRlXCIsXG4gICAgY3NzOiBjc3NUYWJDb250ZW50U3R5bGVzXG4gIH0sIGNoaWxkcmVuKSwgYXBwZW5kTm9kZSk7XG59O1xuRXVpVGFiLnByb3BUeXBlcyA9IHtcbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogUGxhY2VzIGNvbnRlbnQgYmVmb3JlIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogUGxhY2VzIGNvbnRlbnQgYmVmb3JlIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgKi9cbiAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIFBsYWNlcyBjb250ZW50IGFmdGVyIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgKi9cbiAgLyoqXG4gICAgICogUGxhY2VzIGNvbnRlbnQgYWZ0ZXIgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmNcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIG1hdGhXaXRoVW5pdHMsIGV1aUZvbnRTaXplIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTB0c283OC1leHBhbmRlZFwiLFxuICBzdHlsZXM6IFwiZmxleC1iYXNpczowJTtmbGV4LWdyb3c6MTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xhYmVsOmV4cGFuZGVkO1wiXG59IDoge1xuICBuYW1lOiBcIjEwdHNvNzgtZXhwYW5kZWRcIixcbiAgc3R5bGVzOiBcImZsZXgtYmFzaXM6MCU7ZmxleC1ncm93OjE7anVzdGlmeS1jb250ZW50OmNlbnRlcjtsYWJlbDpleHBhbmRlZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlUYWJTdHlsZXMgPSBmdW5jdGlvbiBldWlUYWJTdHlsZXMoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpVGFiOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTpmbGV4O2N1cnNvcjpwb2ludGVyO2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiO1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLXZlcnRpY2FsJywgMCksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnhzKSwgXCJmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQuc2VtaUJvbGQsIFwiO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGl0bGUsIFwiOyY6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6LVwiLCBldWlUaGVtZS5mb2N1cy53aWR0aCwgXCI7fTtsYWJlbDpldWlUYWI7XCIpLFxuICAgIC8vIHZhcmlhdGlvbnNcbiAgICBleHBhbmRlZDogX3JlZixcbiAgICBzZWxlY3RlZDogLyojX19QVVJFX18qL2NzcyhcImJveC1zaGFkb3c6aW5zZXQgMCAtXCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGljaywgXCIgMCBcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIFwiO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQsIFwiOztsYWJlbDpzZWxlY3RlZDtcIiksXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIGRpc2FibGVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LCBcIjs7bGFiZWw6ZGlzYWJsZWQ7XCIpLFxuICAgICAgc2VsZWN0ZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJib3gtc2hhZG93Omluc2V0IDAgLVwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2ssIFwiIDAgXCIsIGV1aVRoZW1lLmNvbG9ycy5kaXNhYmxlZFRleHQsIFwiOztsYWJlbDpzZWxlY3RlZDtcIilcbiAgICB9XG4gIH07XG59O1xuZXhwb3J0IHZhciBldWlUYWJDb250ZW50U3R5bGVzID0gZnVuY3Rpb24gZXVpVGFiQ29udGVudFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVRhYl9fY29udGVudDogLyojX19QVVJFX18qL2NzcyhcImZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodFtldWlUaGVtZS5mb250LnRpdGxlLndlaWdodF0sIFwiOztsYWJlbDpldWlUYWJfX2NvbnRlbnQ7XCIpLFxuICAgIC8vIHNpemVzXG4gICAgczogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnKS5mb250U2l6ZSwgXCI7bGluZS1oZWlnaHQ6XCIsIGV1aVRoZW1lLnNpemUueGwsIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC1zaXplOlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJykuZm9udFNpemUsIFwiO2xpbmUtaGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplLnh4bCwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoXCJmb250LXNpemU6XCIsIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ20nKS5mb250U2l6ZSwgXCI7bGluZS1oZWlnaHQ6XCIsIG1hdGhXaXRoVW5pdHMoW2V1aVRoZW1lLnNpemUueGwsIGV1aVRoZW1lLnNpemUuc10sIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgICByZXR1cm4geCArIHk7XG4gICAgfSksIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2NzcyhcImZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAnbCcpLmZvbnRTaXplLCBcIjtsaW5lLWhlaWdodDpcIiwgbWF0aFdpdGhVbml0cyhbZXVpVGhlbWUuc2l6ZS54eHhsLCBldWlUaGVtZS5zaXplLnNdLCBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgcmV0dXJuIHggKyB5O1xuICAgIH0pLCBcIjs7bGFiZWw6eGw7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBjb250ZXh0RGVmYXVsdHMgPSB7XG4gIGV4cGFuZDogZmFsc2UsXG4gIHNpemU6ICdtJ1xufTtcbmV4cG9ydCB2YXIgRXVpVGFic0NvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChjb250ZXh0RGVmYXVsdHMpOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJib3R0b21Cb3JkZXJcIiwgXCJleHBhbmRcIiwgXCJzaXplXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlUYWJzU3R5bGVzIH0gZnJvbSAnLi90YWJzLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlUYWJzQ29udGV4dCB9IGZyb20gJy4vdGFic19jb250ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nLCAnbCcsICd4bCddO1xuZXhwb3J0IHZhciBFdWlUYWJzID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkYm90dG9tQm9yZGVyID0gX3JlZi5ib3R0b21Cb3JkZXIsXG4gICAgYm90dG9tQm9yZGVyID0gX3JlZiRib3R0b21Cb3JkZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGJvdHRvbUJvcmRlcixcbiAgICBfcmVmJGV4cGFuZCA9IF9yZWYuZXhwYW5kLFxuICAgIGV4cGFuZCA9IF9yZWYkZXhwYW5kID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkZXhwYW5kLFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYnMnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFic1N0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRhYnMsIHN0eWxlc1tzaXplXSwgYm90dG9tQm9yZGVyICYmIHN0eWxlcy5ib3R0b21Cb3JkZXJdO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIGNoaWxkcmVuICYmIHtcbiAgICByb2xlOiAndGFibGlzdCdcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpVGFic0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZToge1xuICAgICAgZXhwYW5kOiBleHBhbmQsXG4gICAgICBzaXplOiBzaXplXG4gICAgfVxuICB9LCBjaGlsZHJlbikpO1xufSk7XG5FdWlUYWJzLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAgICogRXZlbmx5IHN0cmV0Y2hlcyBlYWNoIHRhYiB0byBmaWxsIHRoZVxuICAgICAgICogaG9yaXpvbnRhbCBzcGFjZVxuICAgICAgICovXG4gIGV4cGFuZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogQWRkcyBhIGJvdHRvbSBib3JkZXIgdG8gc2VwYXJhdGUgaXQgZnJvbSB0aGUgY29udGVudCBhZnRlclxuICAgICAgICovXG4gIGJvdHRvbUJvcmRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogU2l6ZXMgYWZmZWN0IGJvdGggZm9udCBzaXplIGFuZCBvdmVyYWxsIHNpemUuXG4gICAgICAgKiBPbmx5IHVzZSB0aGUgYHhsYCBzaXplIHdoZW4gZGlzcGxheWVkIGFzIHBhZ2UgdGl0bGVzLlxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnlcbn07XG5FdWlUYWJzLmRpc3BsYXlOYW1lID0gJ0V1aVRhYnMnOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlUYWJzU3R5bGVzID0gZnVuY3Rpb24gZXVpVGFic1N0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVRhYnM6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmZsZXg7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiIFwiLCBsb2dpY2FsQ1NTV2l0aEZhbGxiYWNrKCdvdmVyZmxvdy14JywgJ2F1dG8nKSwgXCIgXCIsIGxvZ2ljYWxDU1NXaXRoRmFsbGJhY2soJ292ZXJmbG93LXknLCAnaGlkZGVuJyksIFwiIHBvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjA7O2xhYmVsOmV1aVRhYnM7XCIpLFxuICAgIGJvdHRvbUJvcmRlcjogLyojX19QVVJFX18qL2NzcyhcImJveC1zaGFkb3c6aW5zZXQgMCAtXCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiAwIFwiLCBldWlUaGVtZS5ib3JkZXIuY29sb3IsIFwiOztsYWJlbDpib3R0b21Cb3JkZXI7XCIpLFxuICAgIC8vIHNpemVzXG4gICAgczogLyojX19QVVJFX18qL2NzcyhcImdhcDpcIiwgZXVpVGhlbWUuc2l6ZS5tLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhcImdhcDpcIiwgZXVpVGhlbWUuc2l6ZS5iYXNlLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2NzcyhcImdhcDpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUueGwsIFwiOztsYWJlbDp4bDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJleHBhbmRcIiwgXCJpbml0aWFsU2VsZWN0ZWRUYWJcIiwgXCJvblRhYkNsaWNrXCIsIFwic2VsZWN0ZWRUYWJcIiwgXCJzaXplXCIsIFwidGFic1wiLCBcImF1dG9Gb2N1c1wiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImlkXCIsIFwibmFtZVwiLCBcImNvbnRlbnRcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIGNyZWF0ZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVRhYnMgfSBmcm9tICcuLi90YWJzJztcbmltcG9ydCB7IEV1aVRhYiB9IGZyb20gJy4uL3RhYic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLyoqXG4gKiBNYXJrZWQgYXMgY29uc3Qgc28gdHlwZSBpcyBgWydpbml0aWFsJywgJ3NlbGVjdGVkJ11gIGluc3RlYWQgb2YgYHN0cmluZ1tdYFxuICovXG5leHBvcnQgdmFyIEFVVE9GT0NVUyA9IFsnaW5pdGlhbCcsICdzZWxlY3RlZCddO1xuZXhwb3J0IHZhciBFdWlUYWJiZWRDb250ZW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aVRhYmJlZENvbnRlbnQocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVRhYmJlZENvbnRlbnQpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlUYWJiZWRDb250ZW50LCBbcHJvcHNdKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicm9vdElkXCIsIGh0bWxJZEdlbmVyYXRvcigpKCkpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0YWJzUmVmXCIsIC8qI19fUFVSRV9fKi9jcmVhdGVSZWYoKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImZvY3VzVGFiXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0YXJnZXRUYWIgPSBfdGhpcy50YWJzUmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcihcIiNcIi5jb25jYXQoX3RoaXMuc3RhdGUuc2VsZWN0ZWRUYWJJZCkpO1xuICAgICAgdGFyZ2V0VGFiLmZvY3VzKCk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImluaXRpYWxpemVGb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIV90aGlzLnN0YXRlLmluRm9jdXMgJiYgX3RoaXMucHJvcHMuYXV0b0ZvY3VzID09PSAnc2VsZWN0ZWQnKSB7XG4gICAgICAgIC8vIE11c3Qgd2FpdCBmb3Igc2V0U3RhdGUgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIGAuZm9jdXMoKWBcbiAgICAgICAgLy8gYXMgdGhlIGZvY3VzIGNhbGwgdHJpZ2dlcnMgYSBibHVyIG9uIHRoZSBmaXJzdCB0YWJcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGluRm9jdXM6IHRydWVcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLmZvY3VzVGFiKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZW1vdmVGb2N1c1wiLCBmdW5jdGlvbiAoYmx1ckV2ZW50KSB7XG4gICAgICAvLyBvbmx5IHNldCBpbkZvY3VzIHRvIGZhbHNlIGlmIHRoZSB3cmFwcGluZyBkaXYgZG9lc24ndCBjb250YWluIHRoZSBub3ctZm9jdXNpbmcgZWxlbWVudFxuICAgICAgdmFyIGN1cnJlbnRUYXJnZXQgPSBibHVyRXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0gYmx1ckV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgICBpZiAoY3VycmVudFRhcmdldC5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGluRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvblRhYkNsaWNrXCIsIGZ1bmN0aW9uIChzZWxlY3RlZFRhYikge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9uVGFiQ2xpY2sgPSBfdGhpcyRwcm9wcy5vblRhYkNsaWNrLFxuICAgICAgICBleHRlcm5hbFNlbGVjdGVkVGFiID0gX3RoaXMkcHJvcHMuc2VsZWN0ZWRUYWI7XG4gICAgICBpZiAob25UYWJDbGljaykge1xuICAgICAgICBvblRhYkNsaWNrKHNlbGVjdGVkVGFiKTtcbiAgICAgIH1cblxuICAgICAgLy8gT25seSB0cmFjayBzZWxlY3Rpb24gc3RhdGUgaWYgaXQncyBub3QgY29udHJvbGxlZCBleHRlcm5hbGx5LlxuICAgICAgaWYgKCFleHRlcm5hbFNlbGVjdGVkVGFiKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzZWxlY3RlZFRhYklkOiBzZWxlY3RlZFRhYi5pZFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuZm9jdXNUYWIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIGluaXRpYWxTZWxlY3RlZFRhYiA9IHByb3BzLmluaXRpYWxTZWxlY3RlZFRhYixcbiAgICAgIF9zZWxlY3RlZFRhYiA9IHByb3BzLnNlbGVjdGVkVGFiLFxuICAgICAgdGFicyA9IHByb3BzLnRhYnM7XG5cbiAgICAvLyBPbmx5IHRyYWNrIHNlbGVjdGlvbiBzdGF0ZSBpZiBpdCdzIG5vdCBjb250cm9sbGVkIGV4dGVybmFsbHkuXG4gICAgdmFyIHNlbGVjdGVkVGFiSWQ7XG4gICAgaWYgKCFfc2VsZWN0ZWRUYWIpIHtcbiAgICAgIHNlbGVjdGVkVGFiSWQgPSAoaW5pdGlhbFNlbGVjdGVkVGFiID09PSBudWxsIHx8IGluaXRpYWxTZWxlY3RlZFRhYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5pdGlhbFNlbGVjdGVkVGFiLmlkKSB8fCB0YWJzWzBdLmlkO1xuICAgIH1cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHNlbGVjdGVkVGFiSWQ6IHNlbGVjdGVkVGFiSWQsXG4gICAgICBpbkZvY3VzOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhFdWlUYWJiZWRDb250ZW50LCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlUYWJiZWRDb250ZW50LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgZXhwYW5kID0gX3RoaXMkcHJvcHMyLmV4cGFuZCxcbiAgICAgICAgaW5pdGlhbFNlbGVjdGVkVGFiID0gX3RoaXMkcHJvcHMyLmluaXRpYWxTZWxlY3RlZFRhYixcbiAgICAgICAgb25UYWJDbGljayA9IF90aGlzJHByb3BzMi5vblRhYkNsaWNrLFxuICAgICAgICBleHRlcm5hbFNlbGVjdGVkVGFiID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkVGFiLFxuICAgICAgICBzaXplID0gX3RoaXMkcHJvcHMyLnNpemUsXG4gICAgICAgIHRhYnMgPSBfdGhpcyRwcm9wczIudGFicyxcbiAgICAgICAgYXV0b0ZvY3VzID0gX3RoaXMkcHJvcHMyLmF1dG9Gb2N1cyxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG5cbiAgICAgIC8vIEFsbG93IHRoZSBjb25zdW1lciB0byBjb250cm9sIHRhYiBzZWxlY3Rpb24uXG4gICAgICB2YXIgc2VsZWN0ZWRUYWIgPSBleHRlcm5hbFNlbGVjdGVkVGFiIHx8IHRhYnMuZmluZChmdW5jdGlvbiAodGFiKSB7XG4gICAgICAgIHJldHVybiB0YWIuaWQgPT09IF90aGlzMi5zdGF0ZS5zZWxlY3RlZFRhYklkO1xuICAgICAgfSkgfHwgdGFic1swXTsgLy8gRmFsbCBiYWNrIHRvIHRoZSBmaXJzdCB0YWIgaWYgYSBzZWxlY3RlZCB0YWIgY2FuJ3QgYmUgZm91bmRcblxuICAgICAgdmFyIHNlbGVjdGVkVGFiQ29udGVudCA9IHNlbGVjdGVkVGFiLmNvbnRlbnQsXG4gICAgICAgIHNlbGVjdGVkVGFiSWQgPSBzZWxlY3RlZFRhYi5pZDtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aVRhYnMsIHtcbiAgICAgICAgcmVmOiB0aGlzLnRhYnNSZWYsXG4gICAgICAgIGV4cGFuZDogZXhwYW5kLFxuICAgICAgICBzaXplOiBzaXplLFxuICAgICAgICBvbkZvY3VzOiB0aGlzLmluaXRpYWxpemVGb2N1cyxcbiAgICAgICAgb25CbHVyOiB0aGlzLnJlbW92ZUZvY3VzXG4gICAgICB9LCB0YWJzLm1hcChmdW5jdGlvbiAodGFiKSB7XG4gICAgICAgIHZhciBpZCA9IHRhYi5pZCxcbiAgICAgICAgICBuYW1lID0gdGFiLm5hbWUsXG4gICAgICAgICAgY29udGVudCA9IHRhYi5jb250ZW50LFxuICAgICAgICAgIHRhYlByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHRhYiwgX2V4Y2x1ZGVkMik7XG4gICAgICAgIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAga2V5OiBpZCxcbiAgICAgICAgICBpZDogaWRcbiAgICAgICAgfSwgdGFiUHJvcHMpLCB7fSwge1xuICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMyLm9uVGFiQ2xpY2sodGFiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IHRhYiA9PT0gc2VsZWN0ZWRUYWIsXG4gICAgICAgICAgJ2FyaWEtY29udHJvbHMnOiBcIlwiLmNvbmNhdChfdGhpczIucm9vdElkKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFiLCBwcm9wcywgbmFtZSk7XG4gICAgICB9KSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICByb2xlOiBcInRhYnBhbmVsXCIsXG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdCh0aGlzLnJvb3RJZCksXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHNlbGVjdGVkVGFiSWRcbiAgICAgIH0sIHNlbGVjdGVkVGFiQ29udGVudCkpO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aVRhYmJlZENvbnRlbnQsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgYXV0b0ZvY3VzOiAnaW5pdGlhbCdcbn0pO1xuRXVpVGFiYmVkQ29udGVudC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFdoZW4gdGFiYmluZyBpbnRvIHRoZSB0YWJzLCBzZXQgdGhlIGZvY3VzIG9uIGBpbml0aWFsYCBmb3IgdGhlIGZpcnN0IHRhYixcbiAgICAgICAqIG9yIGBzZWxlY3RlZGAgZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGFiLiBCZXN0IHVzZSBjYXNlIGlzIGZvciBpbnNpZGUgb2ZcbiAgICAgICAqIG92ZXJsYXkgY29udGVudCBsaWtlIHBvcG92ZXJzIG9yIGZseW91dHMuXG4gICAgICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMub25lT2YoW1wiaW5pdGlhbFwiLCBcInNlbGVjdGVkXCJdKSxcbiAgLyoqXG4gICAgICAgKiBFdmVubHkgc3RyZXRjaGVzIGVhY2ggdGFiIHRvIGZpbGwgdGhlIGhvcml6b250YWwgc3BhY2VcbiAgICAgICAqL1xuICBleHBhbmQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIFVzZSB0aGlzIHByb3AgdG8gc2V0IHRoZSBpbml0aWFsbHkgc2VsZWN0ZWQgdGFiIHdoaWxlIGxldHRpbmcgdGhlIHRhYmJlZCBjb250ZW50IGNvbXBvbmVudFxuICAgICAgICogY29udHJvbCBzZWxlY3Rpb24gc3RhdGUgaW50ZXJuYWxseVxuICAgICAgICovXG4gIGluaXRpYWxTZWxlY3RlZFRhYjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgY29udGVudDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBQbGFjZXMgY29udGVudCBiZWZvcmUgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICAgKi9cbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgICAqIFBsYWNlcyBjb250ZW50IGFmdGVyIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAgICovXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgb25UYWJDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAgICogVXNlIHRoaXMgcHJvcCBpZiB5b3Ugd2FudCB0byBjb250cm9sIHNlbGVjdGlvbiBzdGF0ZSB3aXRoaW4gdGhlIG93bmVyIGNvbXBvbmVudFxuICAgICAgICovXG4gIHNlbGVjdGVkVGFiOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBjb250ZW50OiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIEVhY2ggdGFiIG5lZWRzIGlkIGFuZCBjb250ZW50IHByb3BlcnRpZXMsIHNvIHdlIGNhbiBhc3NvY2lhdGUgaXQgd2l0aCBpdHMgcGFuZWwgZm9yIGFjY2Vzc2liaWxpdHkuXG4gICAgICAgKiBUaGUgbmFtZSBwcm9wZXJ0eSAoYSBub2RlKSBpcyBhbHNvIHJlcXVpcmVkIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuXG4gICAgICAgKi9cbiAgdGFiczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgY29udGVudDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuZXhwb3J0IHZhciBFdWlEZWxheVJlbmRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlEZWxheVJlbmRlcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRGVsYXlSZW5kZXIpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlEZWxheVJlbmRlciwgW3Byb3BzXSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImRlbGF5SURcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidG9CZURlbGF5ZWRcIiwgdHJ1ZSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0YXJ0RGVsYXlpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dChfdGhpcy5kZWxheUlEKTtcbiAgICAgIF90aGlzLnRvQmVEZWxheWVkID0gdHJ1ZTtcbiAgICAgIF90aGlzLmRlbGF5SUQgPSB3aW5kb3cuc2V0VGltZW91dChfdGhpcy5zdG9wRGVsYXlpbmcsIF90aGlzLnByb3BzLmRlbGF5KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RvcERlbGF5aW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoX3RoaXMuZGVsYXlJRCk7XG4gICAgICBfdGhpcy50b0JlRGVsYXllZCA9IGZhbHNlO1xuICAgICAgX3RoaXMuc2hvdWxkVXBkYXRlKCk7XG4gICAgfSk7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICB0b2dnbGU6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aURlbGF5UmVuZGVyLCBfQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFdWlEZWxheVJlbmRlciwgW3tcbiAgICBrZXk6IFwic2hvdWxkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIHRvZ2dsZSA9IF9yZWYudG9nZ2xlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRvZ2dsZTogIXRvZ2dsZVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5zdGFydERlbGF5aW5nKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNob3VsZENvbXBvbmVudFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgICBpZiAodGhpcy50b0JlRGVsYXllZCkge1xuICAgICAgICB0aGlzLnN0YXJ0RGVsYXlpbmcoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuc3RvcERlbGF5aW5nKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB0aGlzLnRvQmVEZWxheWVkID0gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAhdGhpcy50b0JlRGVsYXllZCA/IHRoaXMucHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aURlbGF5UmVuZGVyLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGRlbGF5OiA1MDBcbn0pO1xuRXVpRGVsYXlSZW5kZXIucHJvcFR5cGVzID0ge1xuICBkZWxheTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcInRleHRTaXplXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUhlYWx0aFN0eWxlcyB9IGZyb20gJy4vaGVhbHRoLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtIH0gZnJvbSAnLi4vZmxleCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBURVhUX1NJWkVTID0gWyd4cycsICdzJywgJ20nLCAnaW5oZXJpdCddO1xuZXhwb3J0IHZhciBFdWlIZWFsdGggPSBmdW5jdGlvbiBFdWlIZWFsdGgoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICBfcmVmJHRleHRTaXplID0gX3JlZi50ZXh0U2l6ZSxcbiAgICB0ZXh0U2l6ZSA9IF9yZWYkdGV4dFNpemUgPT09IHZvaWQgMCA/ICdzJyA6IF9yZWYkdGV4dFNpemUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSGVhbHRoU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSGVhbHRoLCBzdHlsZXNbdGV4dFNpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlIZWFsdGgnLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgIGd1dHRlclNpemU6IFwieHNcIixcbiAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgIHJlc3BvbnNpdmU6IGZhbHNlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICBncm93OiBmYWxzZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICB0eXBlOiBcImRvdFwiLFxuICAgIGNvbG9yOiBjb2xvclxuICB9KSksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICBncm93OiBmYWxzZVxuICB9LCBjaGlsZHJlbikpKTtcbn07XG5FdWlIZWFsdGgucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgZG90IGljb24uXG4gICAgICAgKiBJdCBhY2NlcHRzIGFueSBgSWNvbkNvbG9yYDogYGRlZmF1bHRgLCBgcHJpbWFyeWAsIGBzdWNjZXNzYCwgYGFjY2VudGAsIGB3YXJuaW5nYCwgYGRhbmdlcmAsIGB0ZXh0YCxcbiAgICAgICAqIGBzdWJkdWVkYCBvciBgZ2hvc3RgOyBvciBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlIGFzIGEgYHN0cmluZ2BcbiAgICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBNYXRjaGVzIHRoZSB0ZXh0IHNjYWxlcyBvZiBFdWlUZXh0LlxuICAgICAgICogVGhlIGBpbmhlcml0YCBzdHlsZSB3aWxsIGdldCBpdHMgZm9udCBzaXplIGZyb20gdGhlIHBhcmVudCBlbGVtZW50XG4gICAgICAgKi9cbiAgdGV4dFNpemU6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvbnRTaXplIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXFob2pyaS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJmb250LXNpemU6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiXG59IDoge1xuICBuYW1lOiBcIjFxaG9qcmktaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiZm9udC1zaXplOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImo4dWhjay1ldWlIZWFsdGhcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6aW5saW5lLWJsb2NrO2xhYmVsOmV1aUhlYWx0aDtcIlxufSA6IHtcbiAgbmFtZTogXCJqOHVoY2stZXVpSGVhbHRoXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmlubGluZS1ibG9jaztsYWJlbDpldWlIZWFsdGg7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbmV4cG9ydCB2YXIgZXVpSGVhbHRoU3R5bGVzID0gZnVuY3Rpb24gZXVpSGVhbHRoU3R5bGVzKGV1aVRoZW1lKSB7XG4gIHJldHVybiB7XG4gICAgZXVpSGVhbHRoOiBfcmVmMixcbiAgICAvLyBUZXh0IHNpemVzXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWUsICd4cycpLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWUsICdzJyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lLCAnbScpLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgaW5oZXJpdDogX3JlZlxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImFsdFwiLCBcInVybFwiLCBcInNyY1wiLCBcInNpemVcIiwgXCJoYXNTaGFkb3dcIiwgXCJzdHlsZVwiLCBcIndyYXBwZXJQcm9wc1wiLCBcImZ1bGxTY3JlZW5JY29uQ29sb3JcIiwgXCJhbGxvd0Z1bGxTY3JlZW5cIiwgXCJjYXB0aW9uXCIsIFwiZmxvYXRcIiwgXCJtYXJnaW5cIiwgXCJvbkZ1bGxTY3JlZW5cIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSW1hZ2VXcmFwcGVyIH0gZnJvbSAnLi9pbWFnZV93cmFwcGVyJztcbmltcG9ydCB7IGV1aUltYWdlU3R5bGVzIH0gZnJvbSAnLi9pbWFnZS5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciB9IGZyb20gJy4vaW1hZ2VfZnVsbHNjcmVlbl93cmFwcGVyJztcbmltcG9ydCB7IFNJWkVTIH0gZnJvbSAnLi9pbWFnZV90eXBlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlJbWFnZSA9IGZ1bmN0aW9uIEV1aUltYWdlKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGFsdCA9IF9yZWYuYWx0LFxuICAgIHVybCA9IF9yZWYudXJsLFxuICAgIHNyYyA9IF9yZWYuc3JjLFxuICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnb3JpZ2luYWwnIDogX3JlZiRzaXplLFxuICAgIGhhc1NoYWRvdyA9IF9yZWYuaGFzU2hhZG93LFxuICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICB3cmFwcGVyUHJvcHMgPSBfcmVmLndyYXBwZXJQcm9wcyxcbiAgICBmdWxsU2NyZWVuSWNvbkNvbG9yID0gX3JlZi5mdWxsU2NyZWVuSWNvbkNvbG9yLFxuICAgIGFsbG93RnVsbFNjcmVlbiA9IF9yZWYuYWxsb3dGdWxsU2NyZWVuLFxuICAgIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgZmxvYXQgPSBfcmVmLmZsb2F0LFxuICAgIG1hcmdpbiA9IF9yZWYubWFyZ2luLFxuICAgIG9uRnVsbFNjcmVlbiA9IF9yZWYub25GdWxsU2NyZWVuLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBpc0Z1bGxTY3JlZW4gPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldElzRnVsbFNjcmVlbiA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBpc05hbWVkU2l6ZSA9IHR5cGVvZiBzaXplID09PSAnc3RyaW5nJyAmJiBTSVpFUy5pbmNsdWRlcyhzaXplKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlJbWFnZScsIGNsYXNzTmFtZSk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlJbWFnZVN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUltYWdlLCBpc05hbWVkU2l6ZSAmJiBzdHlsZXNbc2l6ZV0sICFpc05hbWVkU2l6ZSAmJiBzdHlsZXMuY3VzdG9tU2l6ZSwgaGFzU2hhZG93ICYmIHN0eWxlcy5oYXNTaGFkb3ddO1xuICB2YXIgY3NzSXNGdWxsU2NyZWVuU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZSwgc3R5bGVzLmlzRnVsbFNjcmVlbl07XG4gIHZhciBpc0N1c3RvbVNpemUgPSAhaXNOYW1lZFNpemUgJiYgc2l6ZSAhPT0gJ29yaWdpbmFsJztcbiAgdmFyIGN1c3RvbVNpemUgPSB0eXBlb2Ygc2l6ZSA9PT0gJ3N0cmluZycgPyBzaXplIDogXCJcIi5jb25jYXQoc2l6ZSwgXCJweFwiKTtcbiAgdmFyIGltYWdlU3R5bGVXaXRoQ3VzdG9tU2l6ZSA9IGlzQ3VzdG9tU2l6ZSA/IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgc3R5bGUpLCB7fSwge1xuICAgIG1heFdpZHRoOiBjdXN0b21TaXplLFxuICAgIG1heEhlaWdodDogY3VzdG9tU2l6ZVxuICB9KSA6IHN0eWxlO1xuICB2YXIgaXNGdWxsV2lkdGggPSBzaXplID09PSAnZnVsbFdpZHRoJztcbiAgdmFyIGNvbW1vbldyYXBwZXJQcm9wcyA9IHtcbiAgICBoYXNTaGFkb3c6IGhhc1NoYWRvdyxcbiAgICB3cmFwcGVyUHJvcHM6IHdyYXBwZXJQcm9wcyxcbiAgICBzZXRJc0Z1bGxTY3JlZW46IHNldElzRnVsbFNjcmVlbixcbiAgICBmdWxsU2NyZWVuSWNvbkNvbG9yOiBmdWxsU2NyZWVuSWNvbkNvbG9yLFxuICAgIGlzRnVsbFdpZHRoOiBpc0Z1bGxXaWR0aCxcbiAgICBhbGxvd0Z1bGxTY3JlZW46IGFsbG93RnVsbFNjcmVlbixcbiAgICBhbHQ6IGFsdCxcbiAgICBjYXB0aW9uOiBjYXB0aW9uLFxuICAgIGZsb2F0OiBmbG9hdCxcbiAgICBtYXJnaW46IG1hcmdpbixcbiAgICBvbkZ1bGxTY3JlZW46IG9uRnVsbFNjcmVlblxuICB9O1xuICB2YXIgY29tbW9uSW1nUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc3JjOiBzcmMgfHwgdXJsXG4gIH0sIHJlc3QpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJbWFnZVdyYXBwZXIsIGNvbW1vbldyYXBwZXJQcm9wcywgX19fRW1vdGlvbkpTWChcImltZ1wiLCBfZXh0ZW5kcyh7XG4gICAgYWx0OiBhbHQsXG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgc3R5bGU6IGltYWdlU3R5bGVXaXRoQ3VzdG9tU2l6ZVxuICB9LCBjb21tb25JbWdQcm9wcykpKSwgYWxsb3dGdWxsU2NyZWVuICYmIGlzRnVsbFNjcmVlbiAmJiBfX19FbW90aW9uSlNYKEV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIsIGNvbW1vbldyYXBwZXJQcm9wcywgX19fRW1vdGlvbkpTWChcImltZ1wiLCBfZXh0ZW5kcyh7XG4gICAgYWx0OiBhbHQsXG4gICAgY3NzOiBjc3NJc0Z1bGxTY3JlZW5TdHlsZXMsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0sIGNvbW1vbkltZ1Byb3BzKSkpKTtcbn07XG5FdWlJbWFnZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFJlcXVpcmVzIGVpdGhlciBgc3JjYCBvciBgdXJsYCBidXQgZGVmYXVsdHMgdG8gdXNpbmcgYHNyY2AgaWYgYm90aCBhcmUgcHJvdmlkZWRcbiAgICAgICAqL1xuICBzcmM6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHVybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICAgKiBBbHQgdGV4dCBzaG91bGQgZGVzY3JpYmUgdGhlIGltYWdlIHRvIGFpZCBzY3JlZW4gcmVhZGVyIHVzZXJzLiBTZWVcbiAgICAgICAqIGh0dHBzOi8vd2ViYWltLm9yZy90ZWNobmlxdWVzL2FsdHRleHQvIGZvciBhIGd1aWRlIG9uIHdyaXRpbmdcbiAgICAgICAqIGVmZmVjdGl2ZSBhbHQgdGV4dC5cbiAgICAgICAqXG4gICAgICAgKiBJZiBubyBtZWFuaW5nZnVsIGRlc2NyaXB0aW9uIGV4aXN0cywgb3IgaWYgdGhlIGltYWdlIGlzIGFkZXF1YXRlbHlcbiAgICAgICAqIGRlc2NyaWJlZCBieSB0aGUgc3Vycm91bmRpbmcgdGV4dCwgcGFzcyBhbiBlbXB0eSBzdHJpbmcuXG4gICAgICAgKi9cbiAgYWx0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAgICogUHJvdmlkZXMgYSB2aXNpYmxlIGNhcHRpb24gdG8gdGhlIGltYWdlXG4gICAgICAgKi9cbiAgY2FwdGlvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAgICogQWNjZXB0cyBgc2AgLyBgbWAgLyBgbGAgLyBgeGxgIC8gYG9yaWdpbmFsYCAvIGBmdWxsV2lkdGhgIC8gb3IgYSBDU1Mgc2l6ZSBvZiBgbnVtYmVyYCBvciBgc3RyaW5nYC5cbiAgICAgICAqIGBmdWxsV2lkdGhgIHdpbGwgc2V0IHRoZSBmaWd1cmUgdG8gc3RyZXRjaCB0byAxMDAlIG9mIGl0cyBjb250YWluZXIuXG4gICAgICAgKiBgc3RyaW5nYCBhbmQgYG51bWJlcmAgdHlwZXMgd2lsbCBtYXggYm90aCB0aGUgd2lkdGggb3IgaGVpZ2h0LCB3aGljaGV2ZXIgaXMgZ3JlYXRlci5cbiAgICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogRmxvYXQgdGhlIGltYWdlIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0LiBVc2VmdWwgaW4gbGFyZ2UgdGV4dCBibG9ja3MuXG4gICAgICAgKi9cbiAgZmxvYXQ6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogTWFyZ2luIGFyb3VuZCB0aGUgaW1hZ2UuXG4gICAgICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFdoZW4gc2V0IHRvIGB0cnVlYCAoZGVmYXVsdCkgd2lsbCBhcHBseSBhIHNsaWdodCBzaGFkb3cgdG8gdGhlIGltYWdlXG4gICAgICAgKi9cbiAgaGFzU2hhZG93OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAgd2lsbCBtYWtlIHRoZSBpbWFnZSBjbGlja2FibGUgdG8gYSBsYXJnZXIgdmVyc2lvblxuICAgICAgICovXG4gIGFsbG93RnVsbFNjcmVlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogQ2FsbGJhY2sgd2hlbiB0aGUgaW1hZ2UgaXMgY2xpY2tlZCBhbmQgYGFsbG93RnVsbFNjcmVlbmAgaXMgYHRydWVgXG4gICAgICAgKi9cbiAgb25GdWxsU2NyZWVuOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICAgKiBDaGFuZ2VzIHRoZSBjb2xvciBvZiB0aGUgaWNvbiB0aGF0IGZsb2F0cyBhYm92ZSB0aGUgaW1hZ2Ugd2hlbiBpdCBjYW4gYmUgY2xpY2tlZCB0byBmdWxsc2NyZWVuLlxuICAgICAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgYGxpZ2h0YCBpcyBmaW5lIHVubGVzcyB5b3VyIGltYWdlIGhhcyBhIHdoaXRlIGJhY2tncm91bmQsIGluIHdoaWNoIGNhc2UgeW91IHNob3VsZCBjaGFuZ2UgaXQgdG8gYGRhcmtgLlxuICAgICAgICovXG4gIGZ1bGxTY3JlZW5JY29uQ29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJsaWdodFwiLCBcImRhcmtcIl0pLFxuICAvKipcbiAgICAgICAqIFByb3BzIHRvIGFkZCB0byB0aGUgd3JhcHBpbmcgZmlndXJlIGVsZW1lbnRcbiAgICAgICAqL1xuICB3cmFwcGVyUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSlcbn07IiwgImZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgZXVpSW1hZ2VXcmFwcGVyU3R5bGVzIH0gZnJvbSAnLi9pbWFnZV93cmFwcGVyLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUJ1dHRvbiB9IGZyb20gJy4vaW1hZ2VfYnV0dG9uJztcbmltcG9ydCB7IEV1aUltYWdlQ2FwdGlvbiB9IGZyb20gJy4vaW1hZ2VfY2FwdGlvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlJbWFnZVdyYXBwZXIgPSBmdW5jdGlvbiBFdWlJbWFnZVdyYXBwZXIoX3JlZikge1xuICB2YXIgYWx0ID0gX3JlZi5hbHQsXG4gICAgY2FwdGlvbiA9IF9yZWYuY2FwdGlvbixcbiAgICBoYXNTaGFkb3cgPSBfcmVmLmhhc1NoYWRvdyxcbiAgICBhbGxvd0Z1bGxTY3JlZW4gPSBfcmVmLmFsbG93RnVsbFNjcmVlbixcbiAgICBmbG9hdCA9IF9yZWYuZmxvYXQsXG4gICAgbWFyZ2luID0gX3JlZi5tYXJnaW4sXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIHNldElzRnVsbFNjcmVlbiA9IF9yZWYuc2V0SXNGdWxsU2NyZWVuLFxuICAgIHdyYXBwZXJQcm9wcyA9IF9yZWYud3JhcHBlclByb3BzLFxuICAgIGZ1bGxTY3JlZW5JY29uQ29sb3IgPSBfcmVmLmZ1bGxTY3JlZW5JY29uQ29sb3IsXG4gICAgaXNGdWxsV2lkdGggPSBfcmVmLmlzRnVsbFdpZHRoLFxuICAgIG9uRnVsbFNjcmVlbiA9IF9yZWYub25GdWxsU2NyZWVuO1xuICB2YXIgb3BlbkZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBvcGVuRnVsbFNjcmVlbigpIHtcbiAgICBzZXRJc0Z1bGxTY3JlZW4odHJ1ZSk7XG4gICAgb25GdWxsU2NyZWVuID09PSBudWxsIHx8IG9uRnVsbFNjcmVlbiA9PT0gdm9pZCAwIHx8IG9uRnVsbFNjcmVlbih0cnVlKTtcbiAgfTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlJbWFnZVdyYXBwZXInLCB3cmFwcGVyUHJvcHMgJiYgd3JhcHBlclByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlJbWFnZVdyYXBwZXJTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzRmlndXJlU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZVdyYXBwZXIsIGZsb2F0ICYmIHN0eWxlc1tmbG9hdF0sIG1hcmdpbiAmJiBzdHlsZXNbbWFyZ2luXSwgYWxsb3dGdWxsU2NyZWVuICYmIHN0eWxlcy5hbGxvd0Z1bGxTY3JlZW4sIGlzRnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgsIHdyYXBwZXJQcm9wcyA9PT0gbnVsbCB8fCB3cmFwcGVyUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdyYXBwZXJQcm9wcy5jc3NdO1xuICB2YXIgX3VzZUlubmVyVGV4dCA9IHVzZUlubmVyVGV4dCgpLFxuICAgIF91c2VJbm5lclRleHQyID0gX3NsaWNlZFRvQXJyYXkoX3VzZUlubmVyVGV4dCwgMiksXG4gICAgb3B0aW9uYWxDYXB0aW9uUmVmID0gX3VzZUlubmVyVGV4dDJbMF0sXG4gICAgb3B0aW9uYWxDYXB0aW9uVGV4dCA9IF91c2VJbm5lclRleHQyWzFdO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImZpZ3VyZVwiLCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWxhYmVsXCI6IG9wdGlvbmFsQ2FwdGlvblRleHRcbiAgfSwgd3JhcHBlclByb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzRmlndXJlU3R5bGVzXG4gIH0pLCBhbGxvd0Z1bGxTY3JlZW4gPyBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUltYWdlQnV0dG9uLCB7XG4gICAgaGFzQWx0OiAhIWFsdCxcbiAgICBoYXNTaGFkb3c6IGhhc1NoYWRvdyxcbiAgICBvbkNsaWNrOiBvcGVuRnVsbFNjcmVlbixcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiYWN0aXZhdGVGdWxsU2NyZWVuQnV0dG9uXCIsXG4gICAgaXNGdWxsV2lkdGg6IGlzRnVsbFdpZHRoLFxuICAgIGZ1bGxTY3JlZW5JY29uQ29sb3I6IGZ1bGxTY3JlZW5JY29uQ29sb3JcbiAgfSwgY2hpbGRyZW4pKSA6IGNoaWxkcmVuLCBfX19FbW90aW9uSlNYKEV1aUltYWdlQ2FwdGlvbiwge1xuICAgIHJlZjogb3B0aW9uYWxDYXB0aW9uUmVmLFxuICAgIGNhcHRpb246IGNhcHRpb25cbiAgfSkpO1xufTtcbkV1aUltYWdlV3JhcHBlci5wcm9wVHlwZXMgPSB7XG4gIGlzRnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBzZXRJc0Z1bGxTY3JlZW46IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aU1pbkJyZWFrcG9pbnQsIGxvZ2ljYWxDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MsIGxvZ2ljYWxTaWRlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiZ2Fjbm1jLWFsbG93RnVsbFNjcmVlblwiLFxuICBzdHlsZXM6IFwiJjpob3ZlciBbY2xhc3MqPSdldWlJbWFnZUNhcHRpb24nXXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO307bGFiZWw6YWxsb3dGdWxsU2NyZWVuO1wiXG59IDoge1xuICBuYW1lOiBcImdhY25tYy1hbGxvd0Z1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcIiY6aG92ZXIgW2NsYXNzKj0nZXVpSW1hZ2VDYXB0aW9uJ117dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmFsbG93RnVsbFNjcmVlbjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlJbWFnZVdyYXBwZXJTdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZVdyYXBwZXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VXcmFwcGVyOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTppbmxpbmUtYmxvY2s7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiIFwiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCJsaW5lLWhlaWdodDowO2ZsZXgtc2hyaW5rOjA7O2xhYmVsOmV1aUltYWdlV3JhcHBlcjtcIiksXG4gICAgYWxsb3dGdWxsU2NyZWVuOiBfcmVmLFxuICAgIC8vIE1hcmdpbnNcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luOlwiLCBldWlUaGVtZS5zaXplLmJhc2UsIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luOlwiLCBldWlUaGVtZS5zaXplLmwsIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbjpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICAvLyBGbG9hdHNcbiAgICAvLyAxOiBMb2dpY2FsIHByb3BlcnRpZXMvdmFsdWVzIGluIGBmbG9hdGAgaXMgY3VycmVudGx5IG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2VycyB3L28gZmxhZ3NcbiAgICAvLyBAc2VlIGh0dHBzOi8vY2FuaXVzZS5jb20vbWRuLWNzc19wcm9wZXJ0aWVzX2Zsb2F0X2Zsb3dfcmVsYXRpdmVfdmFsdWVzIGZvciB3aGVuIHdlIGNhbiByZW1vdmUgbGVmdC9yaWdodCBmYWxsYmFja3NcbiAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKGV1aU1pbkJyZWFrcG9pbnQoZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIntmbG9hdDpsZWZ0O2Zsb2F0OlwiLCBsb2dpY2FsU2lkZS5sZWZ0LCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCAnMCcpLCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsICcwJyksIFwiO307bGFiZWw6bGVmdDtcIiksXG4gICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpTWluQnJlYWtwb2ludChldWlUaGVtZUNvbnRleHQsICdtJyksIFwie2Zsb2F0OnJpZ2h0O2Zsb2F0OlwiLCBsb2dpY2FsU2lkZS5yaWdodCwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1yaWdodCcsICcwJyksIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgJzAnKSwgXCI7fTtsYWJlbDpyaWdodDtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImhhc0FsdFwiLCBcImhhc1NoYWRvd1wiLCBcImNoaWxkcmVuXCIsIFwib25DbGlja1wiLCBcIm9uS2V5RG93blwiLCBcImlzRnVsbFNjcmVlblwiLCBcImlzRnVsbFdpZHRoXCIsIFwiZnVsbFNjcmVlbkljb25Db2xvclwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgZXVpSW1hZ2VCdXR0b25TdHlsZXMsIGV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyB9IGZyb20gJy4vaW1hZ2VfYnV0dG9uLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGZ1bGxTY3JlZW5JY29uQ29sb3JNYXAgPSB7XG4gIGxpZ2h0OiAnZ2hvc3QnLFxuICBkYXJrOiAnZGVmYXVsdCdcbn07XG5leHBvcnQgdmFyIEV1aUltYWdlQnV0dG9uID0gZnVuY3Rpb24gRXVpSW1hZ2VCdXR0b24oX3JlZikge1xuICB2YXIgaGFzQWx0ID0gX3JlZi5oYXNBbHQsXG4gICAgaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgb25LZXlEb3duID0gX3JlZi5vbktleURvd24sXG4gICAgaXNGdWxsU2NyZWVuID0gX3JlZi5pc0Z1bGxTY3JlZW4sXG4gICAgaXNGdWxsV2lkdGggPSBfcmVmLmlzRnVsbFdpZHRoLFxuICAgIF9yZWYkZnVsbFNjcmVlbkljb25DbyA9IF9yZWYuZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICBmdWxsU2NyZWVuSWNvbkNvbG9yID0gX3JlZiRmdWxsU2NyZWVuSWNvbkNvID09PSB2b2lkIDAgPyAnbGlnaHQnIDogX3JlZiRmdWxsU2NyZWVuSWNvbkNvLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIGJ1dHRvblN0eWxlcyA9IGV1aUltYWdlQnV0dG9uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc0J1dHRvblN0eWxlcyA9IFtidXR0b25TdHlsZXMuZXVpSW1hZ2VCdXR0b24sIGhhc1NoYWRvdyA/IGJ1dHRvblN0eWxlcy5oYXNTaGFkb3dIb3ZlciA6IGJ1dHRvblN0eWxlcy5zaGFkb3dIb3ZlciwgIWlzRnVsbFNjcmVlbiAmJiBpc0Z1bGxXaWR0aCAmJiBidXR0b25TdHlsZXMuZnVsbFdpZHRoXTtcbiAgdmFyIGljb25TdHlsZXMgPSBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzSWNvblN0eWxlcyA9IFtpY29uU3R5bGVzLmV1aUltYWdlQnV0dG9uX19pY29uLCBpY29uU3R5bGVzLm9wZW5GdWxsU2NyZWVuXTtcbiAgdmFyIG9wZW5GdWxsU2NyZWVuSW5zdHJ1Y3Rpb25zID0gdXNlRXVpSTE4bignZXVpSW1hZ2VCdXR0b24ub3BlbkZ1bGxTY3JlZW4nLCAnQ2xpY2sgdG8gb3BlbiB0aGlzIGltYWdlIGluIGZ1bGxzY3JlZW4gbW9kZScpO1xuICB2YXIgY2xvc2VGdWxsU2NyZWVuSW5zdHJ1Y3Rpb25zID0gdXNlRXVpSTE4bignZXVpSW1hZ2VCdXR0b24uY2xvc2VGdWxsU2NyZWVuJywgJ1ByZXNzIEVzY2FwZSBvciBjbGljayB0byBjbG9zZSBpbWFnZSBmdWxsc2NyZWVuIG1vZGUnKTtcbiAgdmFyIGljb25Db2xvciA9IGZ1bGxTY3JlZW5JY29uQ29sb3JNYXBbZnVsbFNjcmVlbkljb25Db2xvcl07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIGNzczogY3NzQnV0dG9uU3R5bGVzLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgb25LZXlEb3duOiBvbktleURvd25cbiAgfSwgcmVzdCksIGlzRnVsbFNjcmVlbiAmJlxuICAvLyBJbiBmdWxsc2NyZWVuIG1vZGUsIGluc3RydWN0aW9ucyBzaG91bGQgY29tZSBmaXJzdCB0byBhbGxvdyBzY3JlZW4gcmVhZGVyXG4gIC8vIHVzZXJzIHRvIHF1aWNrbHkgZXhpdCB2cy4gcG90ZW50aWFsbHkgcmVhZGluZyBvdXQgbG9uZy91bnNraXBwYWJsZSBhbHQgdGV4dFxuICBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGNsb3NlRnVsbFNjcmVlbkluc3RydWN0aW9ucywgaGFzQWx0ICYmICcgXHUyMDE0ICcpKSwgY2hpbGRyZW4sICFpc0Z1bGxTY3JlZW4gJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY3NzOiBjc3NJY29uU3R5bGVzXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgaGFzQWx0ICYmICcgXHUyMDE0ICcsIG9wZW5GdWxsU2NyZWVuSW5zdHJ1Y3Rpb25zKSksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiZnVsbFNjcmVlblwiLFxuICAgIGNvbG9yOiBpY29uQ29sb3JcbiAgfSkpKSk7XG59O1xuRXVpSW1hZ2VCdXR0b24ucHJvcFR5cGVzID0ge1xuICBoYXNBbHQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIGlzRnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpc0Z1bGxTY3JlZW46IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGxvZ2ljYWxDU1MsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlTaGFkb3cgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5leHBvcnQgdmFyIGV1aUltYWdlQnV0dG9uU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VCdXR0b25TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VCdXR0b246IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOm1hdGNoLXBhcmVudDtsaW5lLWhlaWdodDowOyY6OmJlZm9yZXtvcGFjaXR5OjA7Y29udGVudDonJztwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7XCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246b3BhY2l0eSBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCI7fX0mOmhvdmVyLCY6Zm9jdXN7Jjo6YmVmb3Jle29wYWNpdHk6MTt9W2NsYXNzKj0nZXVpSW1hZ2VCdXR0b25fX2ljb24nXXtvcGFjaXR5OjE7fX0mOmZvY3Vze1wiLCBldWlGb2N1c1JpbmcoZXVpVGhlbWVDb250ZXh0LCAnb3V0c2V0JyksIFwiO307bGFiZWw6ZXVpSW1hZ2VCdXR0b247XCIpLFxuICAgIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpLFxuICAgIHNoYWRvd0hvdmVyOiAvKiNfX1BVUkVfXyovY3NzKFwiJjo6YmVmb3Jle1wiLCBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIjt9O2xhYmVsOnNoYWRvd0hvdmVyO1wiKSxcbiAgICBoYXNTaGFkb3dIb3ZlcjogLyojX19QVVJFX18qL2NzcyhcIiY6OmJlZm9yZXtcIiwgZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7fTtsYWJlbDpoYXNTaGFkb3dIb3ZlcjtcIilcbiAgfTtcbn07XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJ4ajRkc2EtY2xvc2VGdWxsU2NyZWVuXCIsXG4gIHN0eWxlczogXCJwb2ludGVyLWV2ZW50czpub25lO2xhYmVsOmNsb3NlRnVsbFNjcmVlbjtcIlxufSA6IHtcbiAgbmFtZTogXCJ4ajRkc2EtY2xvc2VGdWxsU2NyZWVuXCIsXG4gIHN0eWxlczogXCJwb2ludGVyLWV2ZW50czpub25lO2xhYmVsOmNsb3NlRnVsbFNjcmVlbjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUltYWdlQnV0dG9uX19pY29uOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxDU1MoJ3RvcCcsIGV1aVRoZW1lLnNpemUuYmFzZSksIFwiIFwiLCBsb2dpY2FsQ1NTKCdyaWdodCcsIGV1aVRoZW1lLnNpemUuYmFzZSksIFwiOztsYWJlbDpldWlJbWFnZUJ1dHRvbl9faWNvbjtcIiksXG4gICAgb3BlbkZ1bGxTY3JlZW46IC8qI19fUFVSRV9fKi9jc3MoXCJvcGFjaXR5OjA7Y3Vyc29yOnBvaW50ZXI7XCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246b3BhY2l0eSBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnNsb3csIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCI7fTtsYWJlbDpvcGVuRnVsbFNjcmVlbjtcIiksXG4gICAgY2xvc2VGdWxsU2NyZWVuOiBfcmVmXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpSW1hZ2VDYXB0aW9uU3R5bGVzIH0gZnJvbSAnLi9pbWFnZV9jYXB0aW9uLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlJbWFnZUNhcHRpb24gPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBjYXB0aW9uID0gX3JlZi5jYXB0aW9uLFxuICAgIF9yZWYkaXNPbk92ZXJsYXlNYXNrID0gX3JlZi5pc09uT3ZlcmxheU1hc2ssXG4gICAgaXNPbk92ZXJsYXlNYXNrID0gX3JlZiRpc09uT3ZlcmxheU1hc2sgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpc09uT3ZlcmxheU1hc2s7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlJbWFnZUNhcHRpb25TdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZUNhcHRpb24sIGlzT25PdmVybGF5TWFzayAmJiBzdHlsZXMuaXNPbk92ZXJsYXlNYXNrXTtcbiAgcmV0dXJuIGNhcHRpb24gPyBfX19FbW90aW9uSlNYKFwiZmlnY2FwdGlvblwiLCB7XG4gICAgcmVmOiByZWYsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgY2FwdGlvbikgOiBudWxsO1xufSk7XG5FdWlJbWFnZUNhcHRpb24ucHJvcFR5cGVzID0ge1xuICBpc09uT3ZlcmxheU1hc2s6IFByb3BUeXBlcy5ib29sXG59O1xuRXVpSW1hZ2VDYXB0aW9uLmRpc3BsYXlOYW1lID0gJ0V1aUltYWdlQ2FwdGlvbic7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvbnRTaXplLCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5leHBvcnQgdmFyIGV1aUltYWdlQ2FwdGlvblN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlQ2FwdGlvblN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJbWFnZUNhcHRpb246IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIjs7bGFiZWw6ZXVpSW1hZ2VDYXB0aW9uO1wiKSxcbiAgICBpc09uT3ZlcmxheU1hc2s6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmdob3N0LCBcIjt0ZXh0LXNoYWRvdzowIDFweCAycHggXCIsIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5pbmssIDAuNiksIFwiO1tjbGFzcyo9J2V1aUxpbmsnXXtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmdob3N0LCBcIjt9O2xhYmVsOmlzT25PdmVybGF5TWFzaztcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlTaGFkb3cgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5leHBvcnQgdmFyIGV1aUltYWdlU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiB7XG4gICAgZXVpSW1hZ2U6IC8qI19fUFVSRV9fKi9jc3MoXCJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiICYsW2NsYXNzKj0nZXVpVGV4dCddICZ7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCAwKSwgXCI7fTtsYWJlbDpldWlJbWFnZTtcIiksXG4gICAgLy8gVmFyaWF0aW9uc1xuICAgIGlzRnVsbFNjcmVlbjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnJlbGF0aXZlO1wiLCBsb2dpY2FsQ1NTKCdtYXgtaGVpZ2h0JywgJzgwdmgnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICc4MHZ3JyksIFwiOztsYWJlbDppc0Z1bGxTY3JlZW47XCIpLFxuICAgIGhhc1NoYWRvdzogLyojX19QVVJFX18qL2NzcyhldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIjs7bGFiZWw6aGFzU2hhZG93O1wiKSxcbiAgICAvLyBTaXplc1xuICAgIC8vIFRoZXNlIHNpemVzIGFyZSBtb3N0bHkgc3VnZ2VzdGlvbnMuIERvbid0IGxvb2sgdG9vIGhhcmQgZm9yIG1lYW5pbmcgaW4gdGhlaXIgdmFsdWVzLlxuICAgIC8vIFNpemUgaXMgYXBwbGllZCB0byB0aGUgaW1hZ2UsIHJhdGhlciB0aGFuIHRoZSB3cmFwcGVyIGZpZ3VyZSB0byB3b3JrIGJldHRlciB3aXRoIGZsb2F0c1xuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwcHgnKSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMjAwcHgnKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMzYwcHgnKSwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzYwMHB4JyksIFwiOztsYWJlbDp4bDtcIiksXG4gICAgb3JpZ2luYWw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnYXV0bycpLCBcIjs7bGFiZWw6b3JpZ2luYWw7XCIpLFxuICAgIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpLFxuICAgIGN1c3RvbVNpemU6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnYXV0bycpLCBcIjs7bGFiZWw6Y3VzdG9tU2l6ZTtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlGb2N1c1RyYXAgfSBmcm9tICcuLi9mb2N1c190cmFwJztcbmltcG9ydCB7IEV1aU92ZXJsYXlNYXNrIH0gZnJvbSAnLi4vb3ZlcmxheV9tYXNrJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lLCBrZXlzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyBldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyU3R5bGVzIH0gZnJvbSAnLi9pbWFnZV9mdWxsc2NyZWVuX3dyYXBwZXIuc3R5bGVzJztcbmltcG9ydCB7IEV1aUltYWdlQnV0dG9uIH0gZnJvbSAnLi9pbWFnZV9idXR0b24nO1xuaW1wb3J0IHsgZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzIH0gZnJvbSAnLi9pbWFnZV9idXR0b24uc3R5bGVzJztcbmltcG9ydCB7IEV1aUltYWdlQ2FwdGlvbiB9IGZyb20gJy4vaW1hZ2VfY2FwdGlvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyID0gZnVuY3Rpb24gRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlcihfcmVmKSB7XG4gIHZhciBhbHQgPSBfcmVmLmFsdCxcbiAgICBoYXNTaGFkb3cgPSBfcmVmLmhhc1NoYWRvdyxcbiAgICBjYXB0aW9uID0gX3JlZi5jYXB0aW9uLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBzZXRJc0Z1bGxTY3JlZW4gPSBfcmVmLnNldElzRnVsbFNjcmVlbixcbiAgICB3cmFwcGVyUHJvcHMgPSBfcmVmLndyYXBwZXJQcm9wcyxcbiAgICBpc0Z1bGxXaWR0aCA9IF9yZWYuaXNGdWxsV2lkdGgsXG4gICAgZnVsbFNjcmVlbkljb25Db2xvciA9IF9yZWYuZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICBvbkZ1bGxTY3JlZW4gPSBfcmVmLm9uRnVsbFNjcmVlbjtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyLCB3cmFwcGVyUHJvcHMgPT09IG51bGwgfHwgd3JhcHBlclByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3cmFwcGVyUHJvcHMuY3NzXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyJywgd3JhcHBlclByb3BzICYmIHdyYXBwZXJQcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0ga2V5cy5FU0NBUEUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNsb3NlRnVsbFNjcmVlbigpO1xuICAgIH1cbiAgfTtcbiAgdmFyIGNsb3NlRnVsbFNjcmVlbiA9IGZ1bmN0aW9uIGNsb3NlRnVsbFNjcmVlbigpIHtcbiAgICBzZXRJc0Z1bGxTY3JlZW4oZmFsc2UpO1xuICAgIG9uRnVsbFNjcmVlbiA9PT0gbnVsbCB8fCBvbkZ1bGxTY3JlZW4gPT09IHZvaWQgMCB8fCBvbkZ1bGxTY3JlZW4oZmFsc2UpO1xuICB9O1xuICB2YXIgX3VzZUlubmVyVGV4dCA9IHVzZUlubmVyVGV4dCgpLFxuICAgIF91c2VJbm5lclRleHQyID0gX3NsaWNlZFRvQXJyYXkoX3VzZUlubmVyVGV4dCwgMiksXG4gICAgb3B0aW9uYWxDYXB0aW9uUmVmID0gX3VzZUlubmVyVGV4dDJbMF0sXG4gICAgb3B0aW9uYWxDYXB0aW9uVGV4dCA9IF91c2VJbm5lclRleHQyWzFdO1xuICB2YXIgaWNvblN0eWxlcyA9IGV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NJY29uU3R5bGVzID0gW2ljb25TdHlsZXMuZXVpSW1hZ2VCdXR0b25fX2ljb24sIGljb25TdHlsZXMuY2xvc2VGdWxsU2NyZWVuXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpT3ZlcmxheU1hc2ssIHtcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZnVsbFNjcmVlbk92ZXJsYXlNYXNrXCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlGb2N1c1RyYXAsIHtcbiAgICBzY3JvbGxMb2NrOiB0cnVlLFxuICAgIHByZXZlbnRTY3JvbGxPbkZvY3VzOiB0cnVlLFxuICAgIG9uQ2xpY2tPdXRzaWRlOiBjbG9zZUZ1bGxTY3JlZW5cbiAgfSwgX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChcImZpZ3VyZVwiLCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWxhYmVsXCI6IG9wdGlvbmFsQ2FwdGlvblRleHRcbiAgfSwgd3JhcHBlclByb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0pLCBfX19FbW90aW9uSlNYKEV1aUltYWdlQnV0dG9uLCB7XG4gICAgaGFzQWx0OiAhIWFsdCxcbiAgICBoYXNTaGFkb3c6IGhhc1NoYWRvdyxcbiAgICBvbkNsaWNrOiBjbG9zZUZ1bGxTY3JlZW4sXG4gICAgb25LZXlEb3duOiBvbktleURvd24sXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImRlYWN0aXZhdGVGdWxsU2NyZWVuQnV0dG9uXCIsXG4gICAgaXNGdWxsU2NyZWVuOiB0cnVlLFxuICAgIGlzRnVsbFdpZHRoOiBpc0Z1bGxXaWR0aCxcbiAgICBmdWxsU2NyZWVuSWNvbkNvbG9yOiBmdWxsU2NyZWVuSWNvbkNvbG9yXG4gIH0sIGNoaWxkcmVuKSwgX19fRW1vdGlvbkpTWChFdWlJbWFnZUNhcHRpb24sIHtcbiAgICBjYXB0aW9uOiBjYXB0aW9uLFxuICAgIHJlZjogb3B0aW9uYWxDYXB0aW9uUmVmLFxuICAgIGlzT25PdmVybGF5TWFzazogdHJ1ZVxuICB9KSksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiZnVsbFNjcmVlbkV4aXRcIixcbiAgICBjb2xvcjogXCJnaG9zdFwiLFxuICAgIGNzczogY3NzSWNvblN0eWxlc1xuICB9KSkpKTtcbn07XG5FdWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyLnByb3BUeXBlcyA9IHtcbiAgaXNGdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHNldElzRnVsbFNjcmVlbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbFRleHRBbGlnbkNTUywgZXVpQ2FuQW5pbWF0ZSwgZXVpQW5pbVNsaWRlSW5VcCB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXgtaGVpZ2h0JywgJzgwdmgnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICc4MHZ3JyksIFwiIFwiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCJsaW5lLWhlaWdodDowO1wiLCBldWlDYW5BbmltYXRlLCBcInthbmltYXRpb246XCIsIGV1aUFuaW1TbGlkZUluVXAoZXVpVGhlbWUuc2l6ZS54eHh4bCksIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24uZXh0cmFTbG93LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZSwgXCI7fSY6aG92ZXIgW2NsYXNzKj0nZXVpSW1hZ2VDYXB0aW9uJ117dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXI7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgU0laRVMgPSBbJ3MnLCAnbScsICdsJywgJ3hsJywgJ2Z1bGxXaWR0aCcsICdvcmlnaW5hbCddO1xudmFyIEZMT0FUUyA9IFsnbGVmdCcsICdyaWdodCddO1xudmFyIE1BUkdJTlMgPSBbJ3MnLCAnbScsICdsJywgJ3hsJ107IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlUaGVtZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZW1pdEV1aVByb3ZpZGVyV2FybmluZyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL3dhcm5pbmcnO1xuaW1wb3J0IHsgY2FjaGUgYXMgZmFsbGJhY2tDYWNoZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Vtb3Rpb24vY3NzJztcbmltcG9ydCB7IEV1aUdsb2JhbFN0eWxlcyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nL3Jlc2V0L2dsb2JhbF9zdHlsZXMnO1xuaW1wb3J0IHsgRXVpVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZy91dGlsaXR5L3V0aWxpdHknO1xuaW1wb3J0IHsgRXVpVGhlbWVBbXN0ZXJkYW0gfSBmcm9tICcuLi8uLi90aGVtZXMnO1xuaW1wb3J0IHsgRXVpQ2FjaGVQcm92aWRlciB9IGZyb20gJy4vY2FjaGUnO1xuaW1wb3J0IHsgRXVpU3lzdGVtQ29sb3JNb2RlUHJvdmlkZXIgfSBmcm9tICcuL3N5c3RlbV9jb2xvcl9tb2RlJztcbmltcG9ydCB7IEV1aVByb3ZpZGVyTmVzdGVkQ2hlY2ssIHVzZUlzTmVzdGVkRXVpUHJvdmlkZXIgfSBmcm9tICcuL25lc3RlZCc7XG5pbXBvcnQgeyBFdWlDb21wb25lbnREZWZhdWx0c1Byb3ZpZGVyIH0gZnJvbSAnLi9jb21wb25lbnRfZGVmYXVsdHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBpc0Vtb3Rpb25DYWNoZU9iamVjdCA9IGZ1bmN0aW9uIGlzRW1vdGlvbkNhY2hlT2JqZWN0KG9iaikge1xuICByZXR1cm4gb2JqLmhhc093blByb3BlcnR5KCdrZXknKTtcbn07XG5leHBvcnQgdmFyIEV1aVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpUHJvdmlkZXIoX3JlZikge1xuICB2YXIgX2RlZmF1bHRDYWNoZTtcbiAgdmFyIF9yZWYkY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgIGNhY2hlID0gX3JlZiRjYWNoZSA9PT0gdm9pZCAwID8gZmFsbGJhY2tDYWNoZSA6IF9yZWYkY2FjaGUsXG4gICAgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgdGhlbWUgPSBfcmVmJHRoZW1lID09PSB2b2lkIDAgPyBFdWlUaGVtZUFtc3RlcmRhbSA6IF9yZWYkdGhlbWUsXG4gICAgX3JlZiRnbG9iYWxTdHlsZXMgPSBfcmVmLmdsb2JhbFN0eWxlcyxcbiAgICBHbG9iYWxzID0gX3JlZiRnbG9iYWxTdHlsZXMgPT09IHZvaWQgMCA/IEV1aUdsb2JhbFN0eWxlcyA6IF9yZWYkZ2xvYmFsU3R5bGVzLFxuICAgIF9yZWYkdXRpbGl0eUNsYXNzZXMgPSBfcmVmLnV0aWxpdHlDbGFzc2VzLFxuICAgIFV0aWxpdGllcyA9IF9yZWYkdXRpbGl0eUNsYXNzZXMgPT09IHZvaWQgMCA/IEV1aVV0aWxpdHlDbGFzc2VzIDogX3JlZiR1dGlsaXR5Q2xhc3NlcyxcbiAgICBjb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZSxcbiAgICBtb2RpZnkgPSBfcmVmLm1vZGlmeSxcbiAgICBjb21wb25lbnREZWZhdWx0cyA9IF9yZWYuY29tcG9uZW50RGVmYXVsdHMsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgaXNOZXN0ZWQgPSB1c2VJc05lc3RlZEV1aVByb3ZpZGVyKCk7XG4gIGlmIChpc05lc3RlZCkge1xuICAgIHZhciBwcm92aWRlck1lc3NhZ2UgPSBcImBFdWlQcm92aWRlcmAgc2hvdWxkIG5vdCBiZSBuZXN0ZWQgb3IgdXNlZCBtb3JlIHRoYW4gb25jZSwgb3RoZXIgdGhhbiBhdCB0aGUgdG9wIGxldmVsIG9mIHlvdXIgYXBwLlxcbiAgICBVc2UgYEV1aVRoZW1lUHJvdmlkZXJgIGluc3RlYWQgZm9yIG5lc3RlZCBjb21wb25lbnQtbGV2ZWwgdGhlbWluZzogaHR0cHM6Ly9lbGEuc3QvZXVpcHJvdmlkZXIuXCI7XG4gICAgZW1pdEV1aVByb3ZpZGVyV2FybmluZyhwcm92aWRlck1lc3NhZ2UpO1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuICB2YXIgZGVmYXVsdENhY2hlO1xuICB2YXIgZ2xvYmFsQ2FjaGU7XG4gIHZhciB1dGlsaXR5Q2FjaGU7XG4gIGlmIChjYWNoZSkge1xuICAgIGlmIChpc0Vtb3Rpb25DYWNoZU9iamVjdChjYWNoZSkpIHtcbiAgICAgIGNhY2hlLmNvbXBhdCA9IHRydWU7XG4gICAgICBkZWZhdWx0Q2FjaGUgPSBjYWNoZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNhY2hlLmRlZmF1bHQpIHtcbiAgICAgICAgY2FjaGUuZGVmYXVsdC5jb21wYXQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgZGVmYXVsdENhY2hlID0gY2FjaGUuZGVmYXVsdDtcbiAgICAgIGlmIChjYWNoZS5nbG9iYWwpIHtcbiAgICAgICAgY2FjaGUuZ2xvYmFsLmNvbXBhdCA9IHRydWU7XG4gICAgICB9XG4gICAgICBnbG9iYWxDYWNoZSA9IGNhY2hlLmdsb2JhbDtcbiAgICAgIGlmIChjYWNoZS51dGlsaXR5KSB7XG4gICAgICAgIGNhY2hlLnV0aWxpdHkuY29tcGF0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHV0aWxpdHlDYWNoZSA9IGNhY2hlLnV0aWxpdHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVByb3ZpZGVyTmVzdGVkQ2hlY2ssIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpQ2FjaGVQcm92aWRlciwge1xuICAgIGNhY2hlOiAoX2RlZmF1bHRDYWNoZSA9IGRlZmF1bHRDYWNoZSkgIT09IG51bGwgJiYgX2RlZmF1bHRDYWNoZSAhPT0gdm9pZCAwID8gX2RlZmF1bHRDYWNoZSA6IGZhbGxiYWNrQ2FjaGVcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlTeXN0ZW1Db2xvck1vZGVQcm92aWRlciwgbnVsbCwgZnVuY3Rpb24gKHN5c3RlbUNvbG9yTW9kZSkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRoZW1lUHJvdmlkZXIsIHtcbiAgICAgIHRoZW1lOiB0aGVtZSAhPT0gbnVsbCAmJiB0aGVtZSAhPT0gdm9pZCAwID8gdGhlbWUgOiB1bmRlZmluZWQsXG4gICAgICBjb2xvck1vZGU6IGNvbG9yTW9kZSAhPT0gbnVsbCAmJiBjb2xvck1vZGUgIT09IHZvaWQgMCA/IGNvbG9yTW9kZSA6IHN5c3RlbUNvbG9yTW9kZSxcbiAgICAgIG1vZGlmeTogbW9kaWZ5XG4gICAgfSwgdGhlbWUgJiYgX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlDYWNoZVByb3ZpZGVyLCB7XG4gICAgICBjYWNoZTogZ2xvYmFsQ2FjaGUsXG4gICAgICBjaGlsZHJlbjogR2xvYmFscyAmJiBfX19FbW90aW9uSlNYKEdsb2JhbHMsIG51bGwpXG4gICAgfSksIF9fX0Vtb3Rpb25KU1goRXVpQ2FjaGVQcm92aWRlciwge1xuICAgICAgY2FjaGU6IHV0aWxpdHlDYWNoZSxcbiAgICAgIGNoaWxkcmVuOiBVdGlsaXRpZXMgJiYgX19fRW1vdGlvbkpTWChVdGlsaXRpZXMsIG51bGwpXG4gICAgfSkpLCBfX19FbW90aW9uSlNYKEV1aUNvbXBvbmVudERlZmF1bHRzUHJvdmlkZXIsIHtcbiAgICAgIGNvbXBvbmVudERlZmF1bHRzOiBjb21wb25lbnREZWZhdWx0c1xuICAgIH0sIGNoaWxkcmVuKSk7XG4gIH0pKSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgR2xvYmFsLCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL2hvb2tzJztcbmltcG9ydCB7IGV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FjY2Vzc2liaWxpdHkvc2NyZWVuX3JlYWRlcl9vbmx5L3NjcmVlbl9yZWFkZXJfb25seS5zdHlsZXMnO1xuaW1wb3J0IHsgZXVpRnVsbEhlaWdodCwgZXVpVGV4dEJyZWFrV29yZCwgZXVpVGV4dFRydW5jYXRlLCBldWlOdW1iZXJGb3JtYXQsIGV1aVNjcm9sbEJhclN0eWxlcywgZXVpWVNjcm9sbCwgZXVpWFNjcm9sbCwgZXVpWVNjcm9sbFdpdGhTaGFkb3dzLCBldWlYU2Nyb2xsV2l0aFNoYWRvd3MsIGV1aUJyZWFrcG9pbnQgfSBmcm9tICcuLi9taXhpbnMnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBnbG9iYWxTdHlsZXMgPSBmdW5jdGlvbiBnbG9iYWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKFwiLmV1aVNjcmVlblJlYWRlck9ubHl7XCIsIGV1aVNjcmVlblJlYWRlck9ubHkoKSwgXCI7fS5ldWktYWxpZ25CYXNlbGluZXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZSFpbXBvcnRhbnQ7fS5ldWktYWxpZ25Cb3R0b217dmVydGljYWwtYWxpZ246Ym90dG9tIWltcG9ydGFudDt9LmV1aS1hbGlnbk1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUhaW1wb3J0YW50O30uZXVpLWFsaWduVG9we3ZlcnRpY2FsLWFsaWduOnRvcCFpbXBvcnRhbnQ7fS5ldWktZGlzcGxheUJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50O30uZXVpLWRpc3BsYXlJbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50O30uZXVpLWRpc3BsYXlJbmxpbmVCbG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnQ7fS5ldWktZnVsbFdpZHRoe2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50O1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlICFpbXBvcnRhbnQnKSwgXCI7fS5ldWktZnVsbEhlaWdodHtcIiwgZXVpRnVsbEhlaWdodCgpLCBcIjt9LmV1aS10ZXh0Q2VudGVye3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudDt9LmV1aS10ZXh0TGVmdHt0ZXh0LWFsaWduOnN0YXJ0IWltcG9ydGFudDt9LmV1aS10ZXh0UmlnaHR7dGV4dC1hbGlnbjplbmQhaW1wb3J0YW50O30uZXVpLXRleHROb1dyYXB7d2hpdGUtc3BhY2U6bm93cmFwIWltcG9ydGFudDt9LmV1aS10ZXh0SW5oZXJpdENvbG9ye2NvbG9yOmluaGVyaXQhaW1wb3J0YW50O30uZXVpLXRleHRCcmVha1dvcmR7XCIsIGV1aVRleHRCcmVha1dvcmQoKSwgXCI7fS5ldWktdGV4dEJyZWFrQWxse292ZXJmbG93LXdyYXA6YnJlYWstd29yZCFpbXBvcnRhbnQ7d29yZC1icmVhazpicmVhay1hbGwhaW1wb3J0YW50O30uZXVpLXRleHRCcmVha05vcm1hbHtvdmVyZmxvdy13cmFwOm5vcm1hbCFpbXBvcnRhbnQ7d29yZC13cmFwOm5vcm1hbCFpbXBvcnRhbnQ7d29yZC1icmVhazpub3JtYWwhaW1wb3J0YW50O30uZXVpLXRleHRUcnVuY2F0ZXtcIiwgZXVpVGV4dFRydW5jYXRlKCksIFwiO30uZXVpLXRleHROdW1iZXJ7XCIsIGV1aU51bWJlckZvcm1hdChldWlUaGVtZUNvbnRleHQpLCBcIjt9LmV1aS1zY3JvbGxCYXJ7XCIsIGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZUNvbnRleHQpLCBcIjt9LmV1aS15U2Nyb2xse1wiLCBldWlZU2Nyb2xsKGV1aVRoZW1lQ29udGV4dCksIFwiO30uZXVpLXhTY3JvbGx7XCIsIGV1aVhTY3JvbGwoZXVpVGhlbWVDb250ZXh0KSwgXCI7fS5ldWkteVNjcm9sbFdpdGhTaGFkb3dze1wiLCBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWVDb250ZXh0KSwgXCI7fS5ldWkteFNjcm9sbFdpdGhTaGFkb3dze1wiLCBldWlYU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWVDb250ZXh0KSwgXCI7fVtjbGFzcyo9J2V1aS1zaG93Rm9yJ117ZGlzcGxheTpub25lIWltcG9ydGFudDt9XCIsIE9iamVjdC5rZXlzKGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZS5icmVha3BvaW50KS5tYXAoZnVuY3Rpb24gKHNpemUpIHtcbiAgICByZXR1cm4gXCJcXG4gICAgICAuZXVpLWhpZGVGb3ItLVwiLmNvbmNhdChzaXplLCBcIiB7XFxuICAgICAgICBcIikuY29uY2F0KGV1aUJyZWFrcG9pbnQoZXVpVGhlbWVDb250ZXh0LCBbc2l6ZV0pLCBcIiB7XFxuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLmV1aS1zaG93Rm9yLS1cIikuY29uY2F0KHNpemUsIFwiIHtcXG4gICAgICAgIFwiKS5jb25jYXQoZXVpQnJlYWtwb2ludChldWlUaGVtZUNvbnRleHQsIFtzaXplXSksIFwiIHtcXG4gICAgICAgICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIC5ldWktc2hvd0Zvci0tXCIpLmNvbmNhdChzaXplLCBcIi0tYmxvY2sge1xcbiAgICAgICAgXCIpLmNvbmNhdChldWlCcmVha3BvaW50KGV1aVRoZW1lQ29udGV4dCwgW3NpemVdKSwgXCIge1xcbiAgICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICAuZXVpLXNob3dGb3ItLVwiKS5jb25jYXQoc2l6ZSwgXCItLWlubGluZUJsb2NrIHtcXG4gICAgICAgIFwiKS5jb25jYXQoZXVpQnJlYWtwb2ludChldWlUaGVtZUNvbnRleHQsIFtzaXplXSksIFwiIHtcXG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIC5ldWktc2hvd0Zvci0tXCIpLmNvbmNhdChzaXplLCBcIi0tZmxleCB7XFxuICAgICAgICBcIikuY29uY2F0KGV1aUJyZWFrcG9pbnQoZXVpVGhlbWVDb250ZXh0LCBbc2l6ZV0pLCBcIiB7XFxuICAgICAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG4gICAgICB9XCIpO1xuICB9KSwgXCI7O2xhYmVsOmdsb2JhbFN0eWxlcztcIik7XG59O1xuZXhwb3J0IHZhciBFdWlVdGlsaXR5Q2xhc3NlcyA9IGZ1bmN0aW9uIEV1aVV0aWxpdHlDbGFzc2VzKCkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChHbG9iYWwsIHtcbiAgICBzdHlsZXM6IGdsb2JhbFN0eWxlcyhldWlUaGVtZSlcbiAgfSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2FjaGVQcm92aWRlciB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNhY2hlUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlDYWNoZVByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBjaGlsZHJlbiAmJiBjYWNoZSA/IF9fX0Vtb3Rpb25KU1goQ2FjaGVQcm92aWRlciwge1xuICAgIHZhbHVlOiBjYWNoZVxuICB9LCBjaGlsZHJlbikgOiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbik7XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0LnJldHVybiAmJiAodSA9IHQucmV0dXJuKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjsgfSBmaW5hbGx5IHsgaWYgKG8pIHRocm93IG47IH0gfSByZXR1cm4gYTsgfSB9XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5leHBvcnQgdmFyIENPTE9SX01PREVfTUVESUFfUVVFUlkgPSAnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSc7XG5leHBvcnQgdmFyIEV1aVN5c3RlbUNvbG9yTW9kZVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpU3lzdGVtQ29sb3JNb2RlUHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICAvLyBDaGVjayB0eXBlb2YgYW5kIHVzZSBvcHRpb25hbCBjaGFpbmluZyBmb3IgU1NSIG9yIHRlc3QgZW52aXJvbm1lbnRzXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3dpbmRvdyRtYXRjaE1lZGlhLCBfd2luZG93O1xuICAgICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIChfd2luZG93JG1hdGNoTWVkaWEgPSAoX3dpbmRvdyA9IHdpbmRvdykubWF0Y2hNZWRpYSkgIT09IG51bGwgJiYgX3dpbmRvdyRtYXRjaE1lZGlhICE9PSB2b2lkIDAgJiYgKF93aW5kb3ckbWF0Y2hNZWRpYSA9IF93aW5kb3ckbWF0Y2hNZWRpYS5jYWxsKF93aW5kb3csIENPTE9SX01PREVfTUVESUFfUVVFUlkpKSAhPT0gbnVsbCAmJiBfd2luZG93JG1hdGNoTWVkaWEgIT09IHZvaWQgMCAmJiBfd2luZG93JG1hdGNoTWVkaWEubWF0Y2hlcyA/ICdEQVJLJyA6ICdMSUdIVCc7XG4gICAgfSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgc3lzdGVtQ29sb3JNb2RlID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRTeXN0ZW1Db2xvck1vZGUgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIC8vIExpc3RlbiBmb3Igc3lzdGVtIGNoYW5nZXNcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3dpbmRvdyRtYXRjaE1lZGlhMiwgX3dpbmRvdzIsIF93aW5kb3ckbWF0Y2hNZWRpYTIkYywgX3dpbmRvdyRtYXRjaE1lZGlhMiRjMjtcbiAgICB2YXIgZXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIGV2ZW50TGlzdGVuZXIoZXZlbnQpIHtcbiAgICAgIHNldFN5c3RlbUNvbG9yTW9kZShldmVudC5tYXRjaGVzID8gJ0RBUksnIDogJ0xJR0hUJyk7XG4gICAgfTtcblxuICAgIC8vIE9wdGlvbmFsIGNoYWluaW5nIGhlcmUgaXMgZm9yIHRlc3QgZW52aXJvbm1lbnRzIC0gU1NSIHNob3VsZCBub3QgcnVuIHVzZUVmZmVjdFxuICAgIChfd2luZG93JG1hdGNoTWVkaWEyID0gKF93aW5kb3cyID0gd2luZG93KS5tYXRjaE1lZGlhKSA9PT0gbnVsbCB8fCBfd2luZG93JG1hdGNoTWVkaWEyID09PSB2b2lkIDAgfHwgKF93aW5kb3ckbWF0Y2hNZWRpYTIkYyA9IChfd2luZG93JG1hdGNoTWVkaWEyJGMyID0gX3dpbmRvdyRtYXRjaE1lZGlhMi5jYWxsKF93aW5kb3cyLCBDT0xPUl9NT0RFX01FRElBX1FVRVJZKSkuYWRkRXZlbnRMaXN0ZW5lcikgPT09IG51bGwgfHwgX3dpbmRvdyRtYXRjaE1lZGlhMiRjID09PSB2b2lkIDAgfHwgX3dpbmRvdyRtYXRjaE1lZGlhMiRjLmNhbGwoX3dpbmRvdyRtYXRjaE1lZGlhMiRjMiwgJ2NoYW5nZScsIGV2ZW50TGlzdGVuZXIpO1xuXG4gICAgLy8gQ2xlYW4gdXAgdGhlIGxpc3RlbmVyIG9uIHVubW91bnRcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF93aW5kb3ckbWF0Y2hNZWRpYTMsIF93aW5kb3czLCBfd2luZG93JG1hdGNoTWVkaWEzJGMsIF93aW5kb3ckbWF0Y2hNZWRpYTMkYzI7XG4gICAgICAoX3dpbmRvdyRtYXRjaE1lZGlhMyA9IChfd2luZG93MyA9IHdpbmRvdykubWF0Y2hNZWRpYSkgPT09IG51bGwgfHwgX3dpbmRvdyRtYXRjaE1lZGlhMyA9PT0gdm9pZCAwIHx8IChfd2luZG93JG1hdGNoTWVkaWEzJGMgPSAoX3dpbmRvdyRtYXRjaE1lZGlhMyRjMiA9IF93aW5kb3ckbWF0Y2hNZWRpYTMuY2FsbChfd2luZG93MywgQ09MT1JfTU9ERV9NRURJQV9RVUVSWSkpLnJlbW92ZUV2ZW50TGlzdGVuZXIpID09PSBudWxsIHx8IF93aW5kb3ckbWF0Y2hNZWRpYTMkYyA9PT0gdm9pZCAwIHx8IF93aW5kb3ckbWF0Y2hNZWRpYTMkYy5jYWxsKF93aW5kb3ckbWF0Y2hNZWRpYTMkYzIsICdjaGFuZ2UnLCBldmVudExpc3RlbmVyKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHJldHVybiBjaGlsZHJlbihzeXN0ZW1Db2xvck1vZGUpO1xufTtcbkV1aVN5c3RlbUNvbG9yTW9kZVByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIFRoaXMgdXRpbCBjcmVhdGVzIGEgY29udGV4dCBmb3IgRXVpUHJvdmlkZXJzIHRvIHVzZSBhbmQgZGV0ZXJtaW5lIGlmIHRoZXkncmVcbiAqIHRoZSBvbmx5ICh0b3AtbW9zdCkgRXVpUHJvdmlkZXIgaW4gdGhlIGFwcC4gSWYgdGhleSBhcmVuJ3QgKGkuZS4sIHRoZXkncmVcbiAqIG5lc3RlZCB3aXRoaW4gYW5vdGhlciBFdWlQcm92aWRlcikgd2Ugc2hvdWxkIHRocm93IGEgd2FybmluZyBhbmQgbm90XG4gKiByZW5kZXIgaW5zdGFudGlhdGUgdGhlIG5lc3RlZCBFdWlQcm92aWRlci5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpTmVzdGVkUHJvdmlkZXJDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoZmFsc2UpO1xuZXhwb3J0IHZhciBFdWlQcm92aWRlck5lc3RlZENoZWNrID0gZnVuY3Rpb24gRXVpUHJvdmlkZXJOZXN0ZWRDaGVjayhfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aU5lc3RlZFByb3ZpZGVyQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB0cnVlXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5leHBvcnQgdmFyIHVzZUlzTmVzdGVkRXVpUHJvdmlkZXIgPSBmdW5jdGlvbiB1c2VJc05lc3RlZEV1aVByb3ZpZGVyKCkge1xuICByZXR1cm4gISF1c2VDb250ZXh0KEV1aU5lc3RlZFByb3ZpZGVyQ29udGV4dCk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJvcHRpb25zXCIsIFwib25DaGFuZ2VcIiwgXCJvbkFjdGl2ZU9wdGlvbkNoYW5nZVwiLCBcInNlYXJjaGFibGVcIiwgXCJzZWFyY2hQcm9wc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcImlzTG9hZGluZ1wiLCBcImxpc3RQcm9wc1wiLCBcInJlbmRlck9wdGlvblwiLCBcImhlaWdodFwiLCBcImFsbG93RXhjbHVzaW9uc1wiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwibG9hZGluZ01lc3NhZ2VcIiwgXCJub01hdGNoZXNNZXNzYWdlXCIsIFwiZW1wdHlNZXNzYWdlXCIsIFwiZXJyb3JNZXNzYWdlXCIsIFwic2VsZWN0YWJsZVNjcmVlblJlYWRlclRleHRcIiwgXCJpc1ByZUZpbHRlcmVkXCIsIFwib3B0aW9uTWF0Y2hlclwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwib25DaGFuZ2VcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJpbnB1dFJlZlwiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwiaXNWaXJ0dWFsaXplZFwiLCBcInJvd0hlaWdodFwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjcmVhdGVSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXMsIGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlTcGFjZXIgfSBmcm9tICcuLi9zcGFjZXInO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyTGl2ZSwgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZVNlYXJjaCB9IGZyb20gJy4vc2VsZWN0YWJsZV9zZWFyY2gnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZU1lc3NhZ2UgfSBmcm9tICcuL3NlbGVjdGFibGVfbWVzc2FnZSc7XG5pbXBvcnQgeyBFdWlTZWxlY3RhYmxlTGlzdCB9IGZyb20gJy4vc2VsZWN0YWJsZV9saXN0JztcbmltcG9ydCB7IGNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIsIGdldE1hdGNoaW5nT3B0aW9ucyB9IGZyb20gJy4vbWF0Y2hpbmdfb3B0aW9ucyc7XG5pbXBvcnQgeyBldWlTZWxlY3RhYmxlU3R5bGVzIGFzIHN0eWxlcyB9IGZyb20gJy4vc2VsZWN0YWJsZS5zdHlsZXMnO1xuXG4vLyBUaGUgYHNlYXJjaGFibGVgIHByb3AgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgYTExeS5cbi8vIFdoZW4gcHJlc2VudCwgd2UgZWZmZWN0aXZlbHkgY2hhbmdlIGZyb20gYWRoZXJpbmdcbi8vIHRvIHRoZSBBUklBIGBsaXN0Ym94YCBzcGVjIChodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLTEuMi8jTGlzdGJveClcbi8vIHRvIHRoZSBBUklBIGBjb21ib2JveGAgc3BlYyAoaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjIvI2NvbWJvYm94KVxuLy8gYW5kIChyZSlpbXBsZW1lbnQgYWxsIHJlbGV2YW50IGF0dHJpYnV0ZXMgYW5kIGtleWJvYXJkIGludGVyYWN0aW9ucy5cbi8vIFRha2Ugbm90ZSBvZiBsb2dpYyB0aGF0IHJlbGllcyBvbiBgc2VhcmNoYWJsZWAgdG8gZW5zdXJlIHRoYXQgYW55XG4vLyBtb2RpZmljYXRpb25zIHJlbWFpbiBpbiBhbGlnbm1lbnQuXG4vL1xuLy8gYHNlYXJjaFByb3BzYCBjYW4gb25seSBiZSBzcGVjaWZpZWQgd2hlbiBgc2VhcmNoYWJsZWAgaXMgdHJ1ZVxuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlTZWxlY3RhYmxlKHByb3BzKSB7XG4gICAgdmFyIF9zZWFyY2hQcm9wcyRvbkNoYW5nZTtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVNlbGVjdGFibGUpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFdWlTZWxlY3RhYmxlLCBbcHJvcHNdKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaW5wdXRSZWZcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNvbnRhaW5lclJlZlwiLCAvKiNfX1BVUkVfXyovY3JlYXRlUmVmKCkpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvcHRpb25zTGlzdFJlZlwiLCAvKiNfX1BVUkVfXyovY3JlYXRlUmVmKCkpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwcmV2ZW50T25Gb2N1c1wiLCBmYWxzZSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJvb3RJZFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJtZXNzYWdlQ29udGVudElkXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImxpc3RJZFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpc0ZvY3VzT25TZWFyY2hPckxpc3RCb3hcIiwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgdmFyIF90aGlzJG9wdGlvbnNMaXN0UmVmJDtcbiAgICAgIHZhciBzZWFyY2hIYXNGb2N1cyA9IF90aGlzLnByb3BzLnNlYXJjaGFibGUgJiYgdGFyZ2V0ID09PSBfdGhpcy5pbnB1dFJlZjtcbiAgICAgIHZhciBsaXN0Qm94ID0gKF90aGlzJG9wdGlvbnNMaXN0UmVmJCA9IF90aGlzLm9wdGlvbnNMaXN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJCA9PT0gdm9pZCAwIHx8IChfdGhpcyRvcHRpb25zTGlzdFJlZiQgPSBfdGhpcyRvcHRpb25zTGlzdFJlZiQubGlzdEJveFJlZikgPT09IG51bGwgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zTGlzdFJlZiQucGFyZW50RWxlbWVudDtcbiAgICAgIHZhciBsaXN0Qm94Q29udGFpbnNGb2N1cyA9IHRhcmdldCBpbnN0YW5jZW9mIE5vZGUgJiYgKGxpc3RCb3ggPT09IG51bGwgfHwgbGlzdEJveCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGlzdEJveC5jb250YWlucyh0YXJnZXQpKTtcbiAgICAgIHZhciBsaXN0Qm94SGFzRm9jdXMgPSB0YXJnZXQgPT09IGxpc3RCb3ggfHwgbGlzdEJveENvbnRhaW5zRm9jdXM7XG4gICAgICByZXR1cm4gc2VhcmNoSGFzRm9jdXMgfHwgbGlzdEJveEhhc0ZvY3VzO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbk1vdXNlRG93blwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBCeXBhc3Mgb25Gb2N1cyB3aGVuIGEgY2xpY2sgZXZlbnQgb3JpZ2luYXRlcyBmcm9tIHRoaXMuY29udGFpbmVyUmVmLlxuICAgICAgLy8gUHJldmVudHMgb25Gb2N1cyBmcm9tIHNjcm9sbGluZyBhd2F5IGZyb20gYSBjbGlja2VkIG9wdGlvbiBhbmQgbmVnYXRpbmcgdGhlIHNlbGVjdGlvbiBldmVudC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvNDE0N1xuICAgICAgX3RoaXMucHJldmVudE9uRm9jdXMgPSB0cnVlO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByZXZlbnRPbkZvY3VzKSB7XG4gICAgICAgIF90aGlzLnByZXZlbnRPbkZvY3VzID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnMubGVuZ3RoIHx8IF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50ICYmICFfdGhpcy5pc0ZvY3VzT25TZWFyY2hPckxpc3RCb3goZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgZmlyc3RTZWxlY3RlZCA9IF90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24uY2hlY2tlZCAmJiAhb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaXNHcm91cExhYmVsO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmlyc3RTZWxlY3RlZCA+IC0xKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogZmlyc3RTZWxlY3RlZCxcbiAgICAgICAgICBpc0ZvY3VzZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmlzR3JvdXBMYWJlbDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBpc0ZvY3VzZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBvcHRpb25zTGlzdCA9IF90aGlzLm9wdGlvbnNMaXN0UmVmLmN1cnJlbnQ7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSB1c2VyIGlzIGludGVyYWN0aW5nIHdpdGggc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlXG4gICAgICAvLyBzZWFyY2hib3ggb3Igc2VsZWN0aW9uIGxpc3QuIElmIHNvLCB0aGUgdXNlciBtYXkgYmUgYXR0ZW1wdGluZyB0b1xuICAgICAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgc2VhcmNoIGNsZWFyIGJ1dHRvbiBvciBhIHRvdGFsbHkgY3VzdG9tIGJ1dHRvbixcbiAgICAgIC8vIGFuZCBsaXN0Ym94IGtleWJvYXJkIG5hdmlnYXRpb24vc2VsZWN0aW9uIHNob3VsZCBub3QgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKCFfdGhpcy5pc0ZvY3VzT25TZWFyY2hPckxpc3RCb3goZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIGtleXMuQVJST1dfVVA6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgtMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19ET1dOOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgX3RoaXMuaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXgoMSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRm9yIG5vbi1zZWFyY2hhYmxlIGluc3RhbmNlcywgU1BBQ0UgaW50ZXJhY3Rpb24gc2hvdWxkIGFsaWduIHdpdGhcbiAgICAgICAgLy8gdGhlIHVzZXIgZXhwZWN0YXRpb24gb2Ygc2VsZWN0aW9uIHRvZ2dsaW5nIChlLmcuLCBpbnB1dFt0eXBlPWNoZWNrYm94XSkuXG4gICAgICAgIC8vIEVOVEVSIGlzIGFsc28gYSB2YWxpZCBzZWxlY3Rpb24gbWVjaGFuaXNtIGluIHRoaXMgY2FzZS5cbiAgICAgICAgY2FzZSBrZXlzLkVOVEVSOlxuICAgICAgICBjYXNlIGtleXMuU1BBQ0U6XG4gICAgICAgICAgaWYgKF90aGlzLnByb3BzLnNlYXJjaGFibGUpIHtcbiAgICAgICAgICAgIC8vIEZvciBzZWFyY2hhYmxlIGluc3RhbmNlcywgU1BBQ0UgaXMgcmVzZXJ2ZWQgYXMgYSBjaGFyYWN0ZXIgZm9yIGZpbHRlcmluZ1xuICAgICAgICAgICAgLy8gdmlhIHRoZSBpbnB1dCBib3gsIGFuZCBhcyBzdWNoIG9ubHkgRU5URVIgd2lsbCB0b2dnbGUgc2VsZWN0aW9uLlxuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gX3RoaXMuaW5wdXRSZWYgJiYgZXZlbnQua2V5ID09PSBrZXlzLlNQQUNFKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBpZiAoX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbCAmJiBvcHRpb25zTGlzdCkge1xuICAgICAgICAgICAgZXZlbnQucGVyc2lzdCgpOyAvLyBOT1RFOiBUaGlzIGlzIG5lZWRlZCBmb3IgUmVhY3QgdjE2IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICBvcHRpb25zTGlzdC5vbkFkZE9yUmVtb3ZlT3B0aW9uKF90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zW190aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4XSwgZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBrZXlzLkFMVDpcbiAgICAgICAgY2FzZSBrZXlzLlNISUZUOlxuICAgICAgICBjYXNlIGtleXMuQ1RSTDpcbiAgICAgICAgY2FzZSBrZXlzLk1FVEE6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IHVuZGVmaW5lZFxuICAgICAgICAgIH0sIF90aGlzLm9uRm9jdXMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleFwiLCBmdW5jdGlvbiAoYW1vdW50KSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gb3B0aW9ucyBhdmFpbGFibGUsIGRvIG5vdGhpbmcuXG4gICAgICBpZiAoIV90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBfcmVmLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIHZpc2libGVPcHRpb25zID0gX3JlZi52aXNpYmxlT3B0aW9ucztcbiAgICAgICAgdmFyIG5leHRBY3RpdmVPcHRpb25JbmRleDtcbiAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbkluZGV4ID09IG51bGwpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVzZXIncyBrZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBtZW51LCB0aGVuIHdlJ2xsIGZvY3VzXG4gICAgICAgICAgLy8gZWl0aGVyIHRoZSBmaXJzdCBvciBsYXN0IGl0ZW0uXG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYW1vdW50IDwgMCA/IHZpc2libGVPcHRpb25zLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFjdGl2ZU9wdGlvbkluZGV4ICsgYW1vdW50O1xuICAgICAgICAgIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSB2aXNpYmxlT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4ID09PSB2aXNpYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gR3JvdXAgdGl0bGVzIGFuZCBkaXNhYmxlZCBvcHRpb25zIGFyZSBpbmNsdWRlZCBpbiBvcHRpb24gbGlzdCBidXQgYXJlIG5vdCBzZWxlY3RhYmxlXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBhbW91bnQgPiAwID8gMSA6IC0xO1xuICAgICAgICB3aGlsZSAodmlzaWJsZU9wdGlvbnNbbmV4dEFjdGl2ZU9wdGlvbkluZGV4XS5pc0dyb3VwTGFiZWwgfHwgdmlzaWJsZU9wdGlvbnNbbmV4dEFjdGl2ZU9wdGlvbkluZGV4XS5kaXNhYmxlZCkge1xuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IG5leHRBY3RpdmVPcHRpb25JbmRleCArIGRpcmVjdGlvbjtcbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA9PT0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBuZXh0QWN0aXZlT3B0aW9uSW5kZXhcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvblNlYXJjaENoYW5nZVwiLCBmdW5jdGlvbiAoc2VhcmNoVmFsdWUsIHZpc2libGVPcHRpb25zKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkc2VhcmNoUHJvLCBfdGhpcyRwcm9wcyRzZWFyY2hQcm8yO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgIHZpc2libGVPcHRpb25zOiB2aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IHVuZGVmaW5lZFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuc3RhdGUuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgX3RoaXMub25Gb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIChfdGhpcyRwcm9wcyRzZWFyY2hQcm8gPSBfdGhpcy5wcm9wcy5zZWFyY2hQcm9wcykgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkc2VhcmNoUHJvID09PSB2b2lkIDAgfHwgKF90aGlzJHByb3BzJHNlYXJjaFBybzIgPSBfdGhpcyRwcm9wcyRzZWFyY2hQcm8ub25DaGFuZ2UpID09PSBudWxsIHx8IF90aGlzJHByb3BzJHNlYXJjaFBybzIgPT09IHZvaWQgMCB8fCBfdGhpcyRwcm9wcyRzZWFyY2hQcm8yLmNhbGwoX3RoaXMkcHJvcHMkc2VhcmNoUHJvLCBzZWFyY2hWYWx1ZSwgdmlzaWJsZU9wdGlvbnMpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkNvbnRhaW5lckJsdXJcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIC8vIElnbm9yZSBibHVyIGV2ZW50cyB3aGVuIG1vdmluZyBmcm9tIHNlYXJjaCB0byBvcHRpb24gdG8gYXZvaWQgYWN0aXZlT3B0aW9uSW5kZXggY29uZmxpY3RzXG4gICAgICBpZiAoX3RoaXMuaXNGb2N1c09uU2VhcmNoT3JMaXN0Qm94KGUucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogdW5kZWZpbmVkLFxuICAgICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25PcHRpb25DbGlja1wiLCBmdW5jdGlvbiAob3B0aW9ucywgZXZlbnQsIGNsaWNrZWRPcHRpb24pIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICBpc1ByZUZpbHRlcmVkID0gX3RoaXMkcHJvcHMuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wcy5vbkNoYW5nZSxcbiAgICAgICAgb3B0aW9uTWF0Y2hlciA9IF90aGlzJHByb3BzLm9wdGlvbk1hdGNoZXI7XG4gICAgICB2YXIgc2VhcmNoVmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWFyY2hWYWx1ZTtcbiAgICAgIHZhciB2aXNpYmxlT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyh7XG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSAhPT0gbnVsbCAmJiBzZWFyY2hWYWx1ZSAhPT0gdm9pZCAwID8gc2VhcmNoVmFsdWUgOiAnJyxcbiAgICAgICAgaXNQcmVGaWx0ZXJlZDogISFpc1ByZUZpbHRlcmVkLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IFtdLFxuICAgICAgICBvcHRpb25NYXRjaGVyOiBvcHRpb25NYXRjaGVyXG4gICAgICB9KTtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmlzaWJsZU9wdGlvbnM6IHZpc2libGVPcHRpb25zXG4gICAgICB9KTtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShvcHRpb25zLCBldmVudCwgY2xpY2tlZE9wdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNjcm9sbFRvSXRlbVwiLCBmdW5jdGlvbiAoaW5kZXgsIGFsaWduKSB7XG4gICAgICB2YXIgX3RoaXMkb3B0aW9uc0xpc3RSZWYkMjtcbiAgICAgIChfdGhpcyRvcHRpb25zTGlzdFJlZiQyID0gX3RoaXMub3B0aW9uc0xpc3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkMiA9PT0gdm9pZCAwIHx8IChfdGhpcyRvcHRpb25zTGlzdFJlZiQyID0gX3RoaXMkb3B0aW9uc0xpc3RSZWYkMi5saXN0UmVmKSA9PT0gbnVsbCB8fCBfdGhpcyRvcHRpb25zTGlzdFJlZiQyID09PSB2b2lkIDAgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkMi5zY3JvbGxUb0l0ZW0oaW5kZXgsIGFsaWduKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibWFrZU9wdGlvbklkXCIsIGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICE9IG51bGwgPyBcIlwiLmNvbmNhdChfdGhpcy5saXN0SWQsIFwiX29wdGlvbi1cIikuY29uY2F0KGluZGV4KSA6ICcnO1xuICAgIH0pO1xuICAgIF90aGlzLnJvb3RJZCA9IHByb3BzLmlkID8gZnVuY3Rpb24gKHN1ZmZpeCkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHByb3BzLmlkKS5jb25jYXQoc3VmZml4ID8gXCJfXCIuY29uY2F0KHN1ZmZpeCkgOiAnJyk7XG4gICAgfSA6IGh0bWxJZEdlbmVyYXRvcigpO1xuICAgIF90aGlzLmxpc3RJZCA9IF90aGlzLnJvb3RJZCgnbGlzdGJveCcpO1xuICAgIF90aGlzLm1lc3NhZ2VDb250ZW50SWQgPSBfdGhpcy5yb290SWQoJ21lc3NhZ2VDb250ZW50Jyk7XG4gICAgdmFyIF9vcHRpb25zID0gcHJvcHMub3B0aW9ucyxcbiAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IHByb3BzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgIF9pc1ByZUZpbHRlcmVkID0gcHJvcHMuaXNQcmVGaWx0ZXJlZCxcbiAgICAgIHNlYXJjaFByb3BzID0gcHJvcHMuc2VhcmNoUHJvcHM7XG4gICAgdmFyIGluaXRpYWxTZWFyY2hWYWx1ZSA9IChzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VhcmNoUHJvcHMudmFsdWUpIHx8IFN0cmluZygoc2VhcmNoUHJvcHMgPT09IG51bGwgfHwgc2VhcmNoUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlYXJjaFByb3BzLmRlZmF1bHRWYWx1ZSkgfHwgJycpO1xuICAgIHZhciBfdmlzaWJsZU9wdGlvbnMgPSBnZXRNYXRjaGluZ09wdGlvbnMoe1xuICAgICAgb3B0aW9uczogX29wdGlvbnMsXG4gICAgICBzZWFyY2hWYWx1ZTogaW5pdGlhbFNlYXJjaFZhbHVlLFxuICAgICAgaXNQcmVGaWx0ZXJlZDogISFfaXNQcmVGaWx0ZXJlZCxcbiAgICAgIHNlbGVjdGVkT3B0aW9uczogW10sXG4gICAgICBvcHRpb25NYXRjaGVyOiBwcm9wcy5vcHRpb25NYXRjaGVyXG4gICAgfSk7XG4gICAgc2VhcmNoUHJvcHMgPT09IG51bGwgfHwgc2VhcmNoUHJvcHMgPT09IHZvaWQgMCB8fCAoX3NlYXJjaFByb3BzJG9uQ2hhbmdlID0gc2VhcmNoUHJvcHMub25DaGFuZ2UpID09PSBudWxsIHx8IF9zZWFyY2hQcm9wcyRvbkNoYW5nZSA9PT0gdm9pZCAwIHx8IF9zZWFyY2hQcm9wcyRvbkNoYW5nZS5jYWxsKHNlYXJjaFByb3BzLCBpbml0aWFsU2VhcmNoVmFsdWUsIF92aXNpYmxlT3B0aW9ucyk7XG5cbiAgICAvLyBlbnN1cmUgdGhhdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNpbmdsZSBvcHRpb24gaXMgYWN0aXZlIGlmIGl0IGlzIGluIHRoZSB2aXNpYmxlT3B0aW9uc1xuICAgIHZhciBzZWxlY3RlZE9wdGlvbnMgPSBfb3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgcmV0dXJuIG9wdGlvbi5jaGVja2VkO1xuICAgIH0pO1xuICAgIHZhciBfYWN0aXZlT3B0aW9uSW5kZXg7XG4gICAgaWYgKHNpbmdsZVNlbGVjdGlvbiAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAoX3Zpc2libGVPcHRpb25zLmluY2x1ZGVzKHNlbGVjdGVkT3B0aW9uc1swXSkpIHtcbiAgICAgICAgX2FjdGl2ZU9wdGlvbkluZGV4ID0gX3Zpc2libGVPcHRpb25zLmluZGV4T2Yoc2VsZWN0ZWRPcHRpb25zWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBhY3RpdmVPcHRpb25JbmRleDogX2FjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgc2VhcmNoVmFsdWU6IGluaXRpYWxTZWFyY2hWYWx1ZSxcbiAgICAgIHZpc2libGVPcHRpb25zOiBfdmlzaWJsZU9wdGlvbnMsXG4gICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aVNlbGVjdGFibGUsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aVNlbGVjdGFibGUsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIGlmIChwcmV2U3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggIT09IHRoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uQWN0aXZlTywgX3RoaXMkcHJvcHMyO1xuICAgICAgICB2YXIgYWN0aXZlT3B0aW9uID0gdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCAhPSBudWxsID8gdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9uc1t0aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4XSA6IG51bGw7XG4gICAgICAgIChfdGhpcyRwcm9wcyRvbkFjdGl2ZU8gPSAoX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcykub25BY3RpdmVPcHRpb25DaGFuZ2UpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uQWN0aXZlTyA9PT0gdm9pZCAwIHx8IF90aGlzJHByb3BzJG9uQWN0aXZlTy5jYWxsKF90aGlzJHByb3BzMiwgYWN0aXZlT3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMzLmNoaWxkcmVuLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczMuY2xhc3NOYW1lLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMzLm9wdGlvbnMsXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMzLm9uQ2hhbmdlLFxuICAgICAgICBvbkFjdGl2ZU9wdGlvbkNoYW5nZSA9IF90aGlzJHByb3BzMy5vbkFjdGl2ZU9wdGlvbkNoYW5nZSxcbiAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzMy5zZWFyY2hhYmxlLFxuICAgICAgICBzZWFyY2hQcm9wcyA9IF90aGlzJHByb3BzMy5zZWFyY2hQcm9wcyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMzLmlzTG9hZGluZyxcbiAgICAgICAgbGlzdFByb3BzID0gX3RoaXMkcHJvcHMzLmxpc3RQcm9wcyxcbiAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMzLnJlbmRlck9wdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHMzLmhlaWdodCxcbiAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHMzLmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHMzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgIGFyaWFEZXNjcmliZWRieSA9IF90aGlzJHByb3BzM1snYXJpYS1kZXNjcmliZWRieSddLFxuICAgICAgICBsb2FkaW5nTWVzc2FnZSA9IF90aGlzJHByb3BzMy5sb2FkaW5nTWVzc2FnZSxcbiAgICAgICAgbm9NYXRjaGVzTWVzc2FnZSA9IF90aGlzJHByb3BzMy5ub01hdGNoZXNNZXNzYWdlLFxuICAgICAgICBlbXB0eU1lc3NhZ2UgPSBfdGhpcyRwcm9wczMuZW1wdHlNZXNzYWdlLFxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBfdGhpcyRwcm9wczMuZXJyb3JNZXNzYWdlLFxuICAgICAgICBzZWxlY3RhYmxlU2NyZWVuUmVhZGVyVGV4dCA9IF90aGlzJHByb3BzMy5zZWxlY3RhYmxlU2NyZWVuUmVhZGVyVGV4dCxcbiAgICAgICAgaXNQcmVGaWx0ZXJlZCA9IF90aGlzJHByb3BzMy5pc1ByZUZpbHRlcmVkLFxuICAgICAgICBvcHRpb25NYXRjaGVyID0gX3RoaXMkcHJvcHMzLm9wdGlvbk1hdGNoZXIsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMzLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRzdGF0ZS5zZWFyY2hWYWx1ZSxcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMgPSBfdGhpcyRzdGF0ZS52aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZS5hY3RpdmVPcHRpb25JbmRleDtcblxuICAgICAgLy8gU29tZSBtZXNzeSBkZXN0cnVjdHVyaW5nIGhlcmUgdG8gcmVtb3ZlIGFyaWEtbGFiZWwvZGVzY3JpYmVkYnkgZnJvbSBzZWFyY2hQcm9wcyBhbmQgbGlzdFByb3BzXG4gICAgICAvLyBNYWRlIG1lc3NpZXIgYnkgc29tZSBUUyByZXF1aXJlbWVudHNcbiAgICAgIC8vIFRoZSBhcmlhIGF0dHJpYnV0ZXMgYXJlIHRoZW4gdXNlZCBpbiBnZXRBY2Nlc3NpYmxlTmFtZSgpIHRvIHBsYWNlIHRoZW0gd2hlcmUgdGhleSBuZWVkIHRvIGdvXG4gICAgICB2YXIgdW5rbm93bkFjY2Vzc2libGVOYW1lID0ge1xuICAgICAgICAnYXJpYS1sYWJlbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgICB2YXIgX3JlZjIgPSBzZWFyY2hQcm9wcyB8fCB1bmtub3duQWNjZXNzaWJsZU5hbWUsXG4gICAgICAgIHNlYXJjaEFyaWFMYWJlbCA9IF9yZWYyWydhcmlhLWxhYmVsJ10sXG4gICAgICAgIHNlYXJjaEFyaWFEZXNjcmliZWRieSA9IF9yZWYyWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgIHByb3BzT25DaGFuZ2UgPSBfcmVmMi5vbkNoYW5nZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3JlZjIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBpbnB1dFJlZiA9IF9yZWYyLmlucHV0UmVmLFxuICAgICAgICBjbGVhbmVkU2VhcmNoUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZDIpO1xuICAgICAgdmFyIF9yZWYzID0gbGlzdFByb3BzIHx8IHVua25vd25BY2Nlc3NpYmxlTmFtZSxcbiAgICAgICAgbGlzdEFyaWFMYWJlbCA9IF9yZWYzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgIGxpc3RBcmlhRGVzY3JpYmVkYnkgPSBfcmVmM1snYXJpYS1kZXNjcmliZWRieSddLFxuICAgICAgICBpc1ZpcnR1YWxpemVkID0gX3JlZjMuaXNWaXJ0dWFsaXplZCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjMucm93SGVpZ2h0LFxuICAgICAgICBjbGVhbmVkTGlzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYzLCBfZXhjbHVkZWQzKTtcbiAgICAgIHZhciB2aXJ0dWFsaXplZFByb3BzO1xuICAgICAgaWYgKGlzVmlydHVhbGl6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHZpcnR1YWxpemVkUHJvcHMgPSB7XG4gICAgICAgICAgaXNWaXJ0dWFsaXplZDogaXNWaXJ0dWFsaXplZFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChyb3dIZWlnaHQgIT0gbnVsbCkge1xuICAgICAgICB2aXJ0dWFsaXplZFByb3BzID0ge1xuICAgICAgICAgIHJvd0hlaWdodDogcm93SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGUnLCBjbGFzc05hbWUpO1xuICAgICAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpU2VsZWN0YWJsZSwgaGVpZ2h0ID09PSAnZnVsbCcgJiYgc3R5bGVzLmZ1bGxIZWlnaHRdO1xuXG4gICAgICAvKiogQ3JlYXRlIG1lc3NhZ2UgY29udGVudCB0aGF0IHJlcGxhY2VzIHRoZSBsaXN0IGlmIG5vIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSAoeWV0KSAqL1xuICAgICAgdmFyIG1lc3NhZ2VDb250ZW50O1xuICAgICAgaWYgKGVycm9yTWVzc2FnZSAhPSBudWxsKSB7XG4gICAgICAgIG1lc3NhZ2VDb250ZW50ID0gdHlwZW9mIGVycm9yTWVzc2FnZSA9PT0gJ3N0cmluZycgPyBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBlcnJvck1lc3NhZ2UpIDogZXJyb3JNZXNzYWdlO1xuICAgICAgfSBlbHNlIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgaWYgKGxvYWRpbmdNZXNzYWdlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGxvYWRpbmdNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgICAgICAgc2l6ZTogXCJtXCJcbiAgICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlTcGFjZXIsIHtcbiAgICAgICAgICAgIHNpemU6IFwieHNcIlxuICAgICAgICAgIH0pLCBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBsb2FkaW5nTWVzc2FnZSB8fCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUubG9hZGluZ09wdGlvbnNcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiTG9hZGluZyBvcHRpb25zXCJcbiAgICAgICAgICB9KSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChsb2FkaW5nTWVzc2FnZSwgX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBpZDogdGhpcy5tZXNzYWdlQ29udGVudElkXG4gICAgICAgICAgfSwgbG9hZGluZ01lc3NhZ2UucHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzZWFyY2hWYWx1ZSAmJiB2aXNpYmxlT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKG5vTWF0Y2hlc01lc3NhZ2UgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygbm9NYXRjaGVzTWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIG5vTWF0Y2hlc01lc3NhZ2UgfHwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLm5vTWF0Y2hpbmdPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIntzZWFyY2hWYWx1ZX0gZG9lc24ndCBtYXRjaCBhbnkgb3B0aW9uc1wiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIHNlYXJjaFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQobm9NYXRjaGVzTWVzc2FnZSwgX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBpZDogdGhpcy5tZXNzYWdlQ29udGVudElkXG4gICAgICAgICAgfSwgbm9NYXRjaGVzTWVzc2FnZS5wcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAoZW1wdHlNZXNzYWdlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGVtcHR5TWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGVtcHR5TWVzc2FnZSB8fCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUubm9BdmFpbGFibGVPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIk5vIG9wdGlvbnMgYXZhaWxhYmxlXCJcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGVtcHR5TWVzc2FnZSwgX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBpZDogdGhpcy5tZXNzYWdlQ29udGVudElkXG4gICAgICAgICAgfSwgZW1wdHlNZXNzYWdlLnByb3BzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBUaGVyZSBhcmUgbG90cyBvZiB3YXlzIHRvIGFkZCBhbiBhY2Nlc3NpYmxlIG5hbWVcbiAgICAgICAqIFVzdWFsbHkgd2Ugd2FudCB0aGUgc2FtZSBuYW1lIGZvciB0aGUgaW5wdXQgYW5kIHRoZSBsaXN0Ym94ICh3aGljaCBpcyBhZGRlZCBieSBhcmlhLWxhYmVsL2Rlc2NyaWJlZGJ5KVxuICAgICAgICogQnV0IHlvdSBjYW4gYWx3YXlzIG92ZXJyaWRlIGl0IHVzaW5nIHNlYXJjaFByb3BzIG9yIGxpc3RQcm9wc1xuICAgICAgICogVGhpcyBmaW5kcyB0aGUgY29ycmVjdCBuYW1lIHRvIHVzZVxuICAgICAgICpcbiAgICAgICAqIFRPRE86IFRoaXMgZG9lc24ndCBoYW5kbGUgYmVpbmcgbGFiZWxsZWQgKDxsYWJlbCBmb3I9XCJpZE9mSW5wdXRcIj4pXG4gICAgICAgKi9cbiAgICAgIHZhciBnZXRBY2Nlc3NpYmxlTmFtZSA9IGZ1bmN0aW9uIGdldEFjY2Vzc2libGVOYW1lKHByb3BzLCBtZXNzYWdlQ29udGVudElkKSB7XG4gICAgICAgIGlmIChwcm9wcyAmJiBwcm9wc1snYXJpYS1sYWJlbCddKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdhcmlhLWxhYmVsJzogcHJvcHNbJ2FyaWEtbGFiZWwnXVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1lc3NhZ2VDb250ZW50SWRTdHJpbmcgPSBtZXNzYWdlQ29udGVudElkID8gXCIgXCIuY29uY2F0KG1lc3NhZ2VDb250ZW50SWQpIDogJyc7XG4gICAgICAgIGlmIChwcm9wcyAmJiBwcm9wc1snYXJpYS1kZXNjcmliZWRieSddKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogXCJcIi5jb25jYXQocHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXSkuY29uY2F0KG1lc3NhZ2VDb250ZW50SWRTdHJpbmcpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJpYUxhYmVsKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJpYURlc2NyaWJlZGJ5KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogXCJcIi5jb25jYXQoYXJpYURlc2NyaWJlZGJ5KS5jb25jYXQobWVzc2FnZUNvbnRlbnRJZFN0cmluZylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH07XG4gICAgICB2YXIgc2VhcmNoQWNjZXNzaWJsZU5hbWUgPSBnZXRBY2Nlc3NpYmxlTmFtZShzZWFyY2hQcm9wcywgdGhpcy5tZXNzYWdlQ29udGVudElkKTtcbiAgICAgIHZhciBzZWFyY2hIYXNBY2Nlc3NpYmxlTmFtZSA9IEJvb2xlYW4oT2JqZWN0LmtleXMoc2VhcmNoQWNjZXNzaWJsZU5hbWUpLmxlbmd0aCk7XG4gICAgICB2YXIgc2VhcmNoID0gc2VhcmNoYWJsZSA/IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbnM6IFsnZXVpU2VsZWN0YWJsZS5zY3JlZW5SZWFkZXJJbnN0cnVjdGlvbnMnLCAnZXVpU2VsZWN0YWJsZS5wbGFjZWhvbGRlck5hbWUnXSxcbiAgICAgICAgZGVmYXVsdHM6IFsnVXNlIHRoZSBVcCBhbmQgRG93biBhcnJvdyBrZXlzIHRvIG1vdmUgZm9jdXMgb3ZlciBvcHRpb25zLiBQcmVzcyBFbnRlciB0byBzZWxlY3QuIFByZXNzIEVzY2FwZSB0byBjb2xsYXBzZSBvcHRpb25zLicsICdGaWx0ZXIgb3B0aW9ucyddXG4gICAgICB9LCBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICAgICAgdmFyIF9yZWY1ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjQsIDIpLFxuICAgICAgICAgIHNjcmVlblJlYWRlckluc3RydWN0aW9ucyA9IF9yZWY1WzBdLFxuICAgICAgICAgIHBsYWNlaG9sZGVyTmFtZSA9IF9yZWY1WzFdO1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlTZWxlY3RhYmxlU2VhcmNoLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGxpc3RBcmlhRGVzY3JpYmVkYnlJZCxcbiAgICAgICAgICBrZXk6IFwibGlzdFNlYXJjaFwiLFxuICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgdmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczIub25TZWFyY2hDaGFuZ2UsXG4gICAgICAgICAgbGlzdElkOiBfdGhpczIub3B0aW9uc0xpc3RSZWYuY3VycmVudCA/IF90aGlzMi5saXN0SWQgOiB1bmRlZmluZWQgLy8gT25seSBwYXNzIHRoZSBsaXN0SWQgaWYgaXQgZXhpc3RzIG9uIHRoZSBwYWdlXG4gICAgICAgICAgLFxuICAgICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IF90aGlzMi5tYWtlT3B0aW9uSWQoYWN0aXZlT3B0aW9uSW5kZXgpIC8vIHRoZSBjdXJyZW50IGZhdXgtZm9jdXNlZCBvcHRpb25cbiAgICAgICAgICAsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyTmFtZSxcbiAgICAgICAgICBpc1ByZUZpbHRlcmVkOiAhIWlzUHJlRmlsdGVyZWQsXG4gICAgICAgICAgb3B0aW9uTWF0Y2hlcjogb3B0aW9uTWF0Y2hlcixcbiAgICAgICAgICBpbnB1dFJlZjogZnVuY3Rpb24gaW5wdXRSZWYobm9kZSkge1xuICAgICAgICAgICAgdmFyIF9zZWFyY2hQcm9wcyRpbnB1dFJlZjtcbiAgICAgICAgICAgIF90aGlzMi5pbnB1dFJlZiA9IG5vZGU7XG4gICAgICAgICAgICBzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwIHx8IChfc2VhcmNoUHJvcHMkaW5wdXRSZWYgPSBzZWFyY2hQcm9wcy5pbnB1dFJlZikgPT09IG51bGwgfHwgX3NlYXJjaFByb3BzJGlucHV0UmVmID09PSB2b2lkIDAgfHwgX3NlYXJjaFByb3BzJGlucHV0UmVmLmNhbGwoc2VhcmNoUHJvcHMsIG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgc2VhcmNoSGFzQWNjZXNzaWJsZU5hbWUgPyBzZWFyY2hBY2Nlc3NpYmxlTmFtZSA6IHtcbiAgICAgICAgICAnYXJpYS1sYWJlbCc6IHBsYWNlaG9sZGVyTmFtZVxuICAgICAgICB9LCBjbGVhbmVkU2VhcmNoUHJvcHMpKSwgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgaWQ6IGxpc3RBcmlhRGVzY3JpYmVkYnlJZFxuICAgICAgICB9LCBzZWxlY3RhYmxlU2NyZWVuUmVhZGVyVGV4dCwgXCIgXCIsIHNjcmVlblJlYWRlckluc3RydWN0aW9ucykpKTtcbiAgICAgIH0pIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIHJlc3VsdHNMZW5ndGggPSB2aXNpYmxlT3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gIW9wdGlvbi5kaXNhYmxlZDtcbiAgICAgIH0pLmxlbmd0aDtcbiAgICAgIHZhciBsaXN0U2NyZWVuUmVhZGVyU3RhdHVzID0gc2VhcmNoYWJsZSAmJiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5zZWFyY2hSZXN1bHRzXCIsXG4gICAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KF9yZWY2KSB7XG4gICAgICAgICAgdmFyIHJlc3VsdHNMZW5ndGggPSBfcmVmNi5yZXN1bHRzTGVuZ3RoO1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChyZXN1bHRzTGVuZ3RoLCBcIiByZXN1bHRcIikuY29uY2F0KHJlc3VsdHNMZW5ndGggPT09IDEgPyAnJyA6ICdzJywgXCIgYXZhaWxhYmxlXCIpO1xuICAgICAgICB9LFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICByZXN1bHRzTGVuZ3RoOiByZXN1bHRzTGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdmFyIGxpc3RBcmlhRGVzY3JpYmVkYnlJZCA9IHRoaXMucm9vdElkKCdpbnN0cnVjdGlvbnMnKTtcbiAgICAgIHZhciBsaXN0QWNjZXNzaWJsZU5hbWUgPSBnZXRBY2Nlc3NpYmxlTmFtZShsaXN0UHJvcHMsIGxpc3RBcmlhRGVzY3JpYmVkYnlJZCk7XG4gICAgICB2YXIgbGlzdEhhc0FjY2Vzc2libGVOYW1lID0gQm9vbGVhbihPYmplY3Qua2V5cyhsaXN0QWNjZXNzaWJsZU5hbWUpLmxlbmd0aCk7XG4gICAgICB2YXIgbGlzdCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLnBsYWNlaG9sZGVyTmFtZVwiLFxuICAgICAgICBkZWZhdWx0OiBcIkZpbHRlciBvcHRpb25zXCJcbiAgICAgIH0sIGZ1bmN0aW9uIChwbGFjZWhvbGRlck5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHNlYXJjaGFibGUgJiYgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJMaXZlLCB7XG4gICAgICAgICAgaXNBY3RpdmU6IG1lc3NhZ2VDb250ZW50ICE9IG51bGwgfHwgYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbFxuICAgICAgICB9LCBtZXNzYWdlQ29udGVudCB8fCBsaXN0U2NyZWVuUmVhZGVyU3RhdHVzKSwgbWVzc2FnZUNvbnRlbnQgPyBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVNZXNzYWdlLCB7XG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aVNlbGVjdGFibGVNZXNzYWdlXCIsXG4gICAgICAgICAgaWQ6IF90aGlzMi5tZXNzYWdlQ29udGVudElkLFxuICAgICAgICAgIGJvcmRlcmVkOiBsaXN0UHJvcHMgJiYgbGlzdFByb3BzLmJvcmRlcmVkXG4gICAgICAgIH0sIG1lc3NhZ2VDb250ZW50KSA6IF9fX0Vtb3Rpb25KU1goRXVpU2VsZWN0YWJsZUxpc3QsIF9leHRlbmRzKHtcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpU2VsZWN0YWJsZUxpc3RcIixcbiAgICAgICAgICBrZXk6IFwibGlzdFwiLFxuICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnM6IHZpc2libGVPcHRpb25zLFxuICAgICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICBpc1ByZUZpbHRlcmVkOiBpc1ByZUZpbHRlcmVkLFxuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBhY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBzZXRBY3RpdmVPcHRpb25JbmRleDogZnVuY3Rpb24gc2V0QWN0aXZlT3B0aW9uSW5kZXgoaW5kZXgsIGNiKSB7XG4gICAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogaW5kZXhcbiAgICAgICAgICAgIH0sIGNiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2s6IF90aGlzMi5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbjogc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHJlZjogX3RoaXMyLm9wdGlvbnNMaXN0UmVmLFxuICAgICAgICAgIHJlbmRlck9wdGlvbjogcmVuZGVyT3B0aW9uLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgIGFsbG93RXhjbHVzaW9uczogYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICAgIHNlYXJjaGFibGU6IHNlYXJjaGFibGUsXG4gICAgICAgICAgbWFrZU9wdGlvbklkOiBfdGhpczIubWFrZU9wdGlvbklkLFxuICAgICAgICAgIGxpc3RJZDogX3RoaXMyLmxpc3RJZFxuICAgICAgICB9LCBsaXN0SGFzQWNjZXNzaWJsZU5hbWUgPyBsaXN0QWNjZXNzaWJsZU5hbWUgOiBzZWFyY2hhYmxlICYmIHtcbiAgICAgICAgICAnYXJpYS1sYWJlbCc6IHBsYWNlaG9sZGVyTmFtZVxuICAgICAgICB9LCBjbGVhbmVkTGlzdFByb3BzLCB2aXJ0dWFsaXplZFByb3BzKSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogdGhpcy5jb250YWluZXJSZWYsXG4gICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5vbktleURvd24sXG4gICAgICAgIG9uQmx1cjogdGhpcy5vbkNvbnRhaW5lckJsdXIsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25Nb3VzZURvd25cbiAgICAgIH0sIHJlc3QpLCBjaGlsZHJlbiAmJiBjaGlsZHJlbihsaXN0LCBzZWFyY2gpKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YXIgX3N0YXRlVXBkYXRlJHNlYXJjaFZhO1xuICAgICAgdmFyIG9wdGlvbnMgPSBuZXh0UHJvcHMub3B0aW9ucyxcbiAgICAgICAgaXNQcmVGaWx0ZXJlZCA9IG5leHRQcm9wcy5pc1ByZUZpbHRlcmVkLFxuICAgICAgICBzZWFyY2hQcm9wcyA9IG5leHRQcm9wcy5zZWFyY2hQcm9wcyxcbiAgICAgICAgb3B0aW9uTWF0Y2hlciA9IG5leHRQcm9wcy5vcHRpb25NYXRjaGVyO1xuICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gcHJldlN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICBzZWFyY2hWYWx1ZSA9IHByZXZTdGF0ZS5zZWFyY2hWYWx1ZTtcbiAgICAgIHZhciBzdGF0ZVVwZGF0ZSA9IHtcbiAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogYWN0aXZlT3B0aW9uSW5kZXhcbiAgICAgIH07XG4gICAgICBpZiAoKHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWFyY2hQcm9wcy52YWx1ZSkgIT0gbnVsbCAmJiBzZWFyY2hQcm9wcy52YWx1ZSAhPT0gc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgc3RhdGVVcGRhdGUuc2VhcmNoVmFsdWUgPSBzZWFyY2hQcm9wcy52YWx1ZTtcbiAgICAgIH1cbiAgICAgIHN0YXRlVXBkYXRlLnZpc2libGVPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKHtcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgc2VhcmNoVmFsdWU6IChfc3RhdGVVcGRhdGUkc2VhcmNoVmEgPSBzdGF0ZVVwZGF0ZS5zZWFyY2hWYWx1ZSkgIT09IG51bGwgJiYgX3N0YXRlVXBkYXRlJHNlYXJjaFZhICE9PSB2b2lkIDAgPyBfc3RhdGVVcGRhdGUkc2VhcmNoVmEgOiAnJyxcbiAgICAgICAgaXNQcmVGaWx0ZXJlZDogISFpc1ByZUZpbHRlcmVkLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IFtdLFxuICAgICAgICBvcHRpb25NYXRjaGVyOiBvcHRpb25NYXRjaGVyXG4gICAgICB9KTtcbiAgICAgIGlmIChhY3RpdmVPcHRpb25JbmRleCAhPSBudWxsICYmIGFjdGl2ZU9wdGlvbkluZGV4ID49IHN0YXRlVXBkYXRlLnZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZVVwZGF0ZS5hY3RpdmVPcHRpb25JbmRleCA9IC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlVXBkYXRlO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aVNlbGVjdGFibGUsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgb3B0aW9uczogW10sXG4gIHNpbmdsZVNlbGVjdGlvbjogZmFsc2UsXG4gIHNlYXJjaGFibGU6IGZhbHNlLFxuICBpc1ByZUZpbHRlcmVkOiBmYWxzZSxcbiAgb3B0aW9uTWF0Y2hlcjogY3JlYXRlUGFydGlhbFN0cmluZ0VxdWFsaXR5T3B0aW9uTWF0Y2hlcigpXG59KTtcbkV1aVNlbGVjdGFibGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBIb29rcyB1cCBhIHNlYXJjaCBib3ggdG8gZmlsdGVyIHRoZSBsaXN0IChib29sZWFuKVxuICAgICAgICovXG4gIHNlYXJjaGFibGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbZmFsc2VdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW3RydWVdKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICAgKiBQYXNzZXMgcHJvcHMgZG93biB0byB0aGUgYEV1aUZpZWxkU2VhcmNoYC5cbiAgICAgICAqIFNlZSAjRXVpU2VsZWN0YWJsZVNlYXJjaFByb3BzXG4gICAgICAgKi9cbiAgc2VhcmNoUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogRnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgYGxpc3RgIG5vZGUgYW5kIHRoZW5cbiAgICAgICAqIHRoZSBgc2VhcmNoYCBub2RlIChpZiBgc2VhcmNoYWJsZWAgaXMgYXBwbGllZClcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAgICogQXJyYXkgb2YgRXVpU2VsZWN0YWJsZU9wdGlvbiBvYmplY3RzLiBTZWUgI0V1aVNlbGVjdGFibGVPcHRpb25Qcm9wc1xuICAgICAgICovXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBgYm9vbGVhbmAuXG4gICAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGluZGljYXRlIG9iamVjdCBpcyBqdXN0IGEgZ3JvdXBpbmcgbGFiZWwsIG5vdCBhIHNlbGVjdGFibGUgaXRlbVxuICAgICAgICovXG4gICAgaXNHcm91cExhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3RydWVdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFZpc2libGUgbGFiZWwgb2Ygb3B0aW9uLlxuICAgICAgICogTXVzdCBiZSB1bmlxdWUgYWNyb3NzIGl0ZW1zIGlmIGBrZXlgIGlzIG5vdCBzdXBwbGllZFxuICAgICAgICovXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbGx5IGNoYW5nZSB0aGUgc2VhcmNoYWJsZSB0ZXJtIGJ5IHBhc3NpbmcgYSBkaWZmZXJlbnQgc3RyaW5nIG90aGVyIHRoYW4gdGhlIGBsYWJlbGAuXG4gICAgICAgKiBCZXN0IHVzZWQgd2hlbiBjcmVhdGluZyBhIGN1c3RvbSBgb3B0aW9uUmVuZGVyYCB0byBzZXBhcmF0ZSB0aGUgbGFiZWwgZnJvbSBtZXRhZGF0YSBidXQgYWxsb3dpbmcgdG8gc2VhcmNoIG9uIGJvdGhcbiAgICAgICAqL1xuICAgIHNlYXJjaGFibGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvKipcbiAgICAgICAqIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBpdGVtcy5cbiAgICAgICAqIFdpbGwgYmUgdXNlZCB0byBtYXRjaCBvcHRpb25zIGluc3RlYWQgb2YgYGxhYmVsYFxuICAgICAgICovXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKlxuICAgICAgICogTGVhdmUgYHVuZGVmaW5lZGAgdG8gaW5kaWNhdGUgbm90IHNlbGVjdGVkLiBQYXNzIGEgc3RyaW5nIG9mXG4gICAgICAgKiAnb24nIHRvIGluZGljYXRlIGluY2x1c2lvbiwgJ29mZicgdG8gaW5kaWNhdGUgZXhjbHVzaW9uLFxuICAgICAgICogb3IgJ21peGVkJyB0byBpbmRpY2F0ZSBpbmNsdXNpb24gZm9yIHNvbWUuXG4gICAgICAgKi9cbiAgICBjaGVja2VkOiBQcm9wVHlwZXMuYW55LFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIE5vZGUgdG8gYWRkIGJldHdlZW4gdGhlIHNlbGVjdGlvbiBpY29uIGFuZCB0aGUgbGFiZWxcbiAgICAgICAqL1xuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIC8qKlxuICAgICAgICogTm9kZSB0byBhZGQgdG8gdGhlIGZhciByaWdodCBvZiB0aGUgaXRlbVxuICAgICAgICovXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICByZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uIGRhdGEgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBgcmVuZGVyT3B0aW9uc2AgZWxlbWVudC5cbiAgICAgICAqIEJ5cGFzcyBgRXVpU2VsZWN0YWJsZUl0ZW1gIGFuZCBhdm9pZCBET00gYXR0cmlidXRlIHdhcm5pbmdzLlxuICAgICAgICovXG4gICAgZGF0YTogUHJvcFR5cGVzLnNoYXBlKHt9KSxcbiAgICAvKipcbiAgICAgICAqIEhvdyB0byBoYW5kbGUgbG9uZyB0ZXh0IHdpdGhpbiB0aGUgaXRlbS5cbiAgICAgICAqIFdyYXBwaW5nIG9ubHkgd29ya3MgaWYgYGlzVmlydHVhbGl6YXRpb25gIGlzIGZhbHNlLlxuICAgICAgICogQGRlZmF1bHQgJ3RydW5jYXRlJ1xuICAgICAgICovXG4gICAgdGV4dFdyYXA6IFByb3BUeXBlcy5vbmVPZihbXCJ0cnVuY2F0ZVwiLCBcIndyYXBcIl0pLFxuICAgIC8qKlxuICAgICAgICogSWYgdGV4dFdyYXAgaXMgc2V0IHRvIGB0cnVuY2F0ZWAsIHlvdSBjYW4gcGFzcyBhIGN1c3RvbSB0cnVuY2F0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICAgICAqIHRoYXQgYWNjZXB0cyBhbnkgW0V1aVRleHRUcnVuY2F0ZV0oLyMvdXRpbGl0aWVzL3RleHQtdHJ1bmNhdGlvbikgcHJvcCBleGNlcHQgZm9yXG4gICAgICAgKiBgdGV4dGAgYW5kIGBjaGlsZHJlbmAuXG4gICAgICAgKlxuICAgICAgICogTm90ZTogd2hlbiBzZWFyY2hpbmcsIGN1c3RvbSB0cnVuY2F0aW9uIHByb3BzIGFyZSBpZ25vcmVkLiBUaGUgaGlnaGxpZ2h0ZWQgc2VhcmNoXG4gICAgICAgKiB0ZXh0IHdpbGwgYWx3YXlzIHRha2UgcHJlY2VkZW5jZS5cbiAgICAgICAqL1xuICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIGN1c3RvbSB0b29sdGlwIGNvbnRlbnQgZm9yIHRoZSBidXR0b25cbiAgICAgICAqL1xuICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIHByb3BzIHRvIHBhc3MgdG8gdGhlIHVuZGVybHlpbmcgKipbRXVpVG9vbFRpcF0oLyMvZGlzcGxheS90b29sdGlwKSoqXG4gICAgICAgKi9cbiAgICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnlcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICAgKiBQYXNzZXMgYmFjayB0aGUgYWx0ZXJlZCBgb3B0aW9uc2AgYXJyYXkgd2l0aCBzZWxlY3RlZCBvcHRpb25zIGhhdmluZyBgY2hlY2tlZDogJ29uJ2AuXG4gICAgICAgKiBBbHNvIHBhc3NlcyBiYWNrIHRoZSBSZWFjdCBjbGljay9rZXlib2FyZCBldmVudCBhcyBhIHNlY29uZCBhcmd1bWVudCxcbiAgICAgICAqIGFuZCB0aGUgb3B0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBvbkNoYW5nZSBldmVudCBhcyBhIHRoaXJkIGFyZ3VtZW50LlxuICAgICAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAgICAgKiBQYXNzZXMgYmFjayB0aGUgY3VycmVudCBhY3RpdmUgb3B0aW9uIHdoZW5ldmVyIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGN1cnJlbnRseVxuICAgICAgICogaGlnaGxpZ2h0ZWQgb3B0aW9uIHZpYSBrZXlib2FyZCBuYXZpZ2F0aW9uIG9yIHNlYXJjaGluZy5cbiAgICAgICAqL1xuICBvbkFjdGl2ZU9wdGlvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAgICogU2V0cyB0aGUgc2luZ2xlIHNlbGVjdGlvbiBwb2xpY3kgb2ZcbiAgICAgICAqIGBmYWxzZWA6IGFsbG93cyBtdWx0aXBsZSBzZWxlY3Rpb25cbiAgICAgICAqIGB0cnVlYDogb25seSBhbGxvd3Mgb25lIHNlbGVjdGlvblxuICAgICAgICogYGFsd2F5c2A6IGNhbiBhbmQgbXVzdCBoYXZlIG9ubHkgb25lIHNlbGVjdGlvblxuICAgICAgICovXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFsd2F5c1wiXSksIFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBBbGxvd3MgbWFya2luZyBvcHRpb25zIGFzIGBjaGVja2VkPSdvZmYnYCBhcyB3ZWxsIGFzIGAnb24nYFxuICAgICAgICovXG4gIGFsbG93RXhjbHVzaW9uczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogU2hvdyBhbiBsb2FkaW5nIGluZGljYXRvciB3aGlsZSB5b3UgbG9hZCBhbmQgaG9vayB1cCB5b3VyIGRhdGFcbiAgICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIFNldHMgdGhlIG1heCBoZWlnaHQgaW4gcGl4ZWxzIG9yIHBhc3MgYGZ1bGxgIHRvIGFsbG93XG4gICAgICAgKiB0aGUgd2hvbGUgZ3JvdXAgdG8gZmlsbCB0aGUgaGVpZ2h0IG9mIGl0cyBjb250YWluZXIgYW5kXG4gICAgICAgKiBhbGxvd3MgdGhlIGxpc3QgZ3JvdyBhcyB3ZWxsXG4gICAgICAgKi9cbiAgaGVpZ2h0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbXCJmdWxsXCJdKV0pLFxuICAvKipcbiAgICAgICAqIFNlZSAjRXVpU2VsZWN0YWJsZU9wdGlvbnNMaXN0XG4gICAgICAgKi9cbiAgbGlzdFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIEN1c3RvbSByZW5kZXIgZnVuY3Rpb24gZm9yIGVhY2ggb3B0aW9uLlxuICAgICAgICogUmV0dXJucyBgKG9wdGlvbiwgc2VhcmNoVmFsdWUpYFxuICAgICAgICovXG4gIHJlbmRlck9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAgICogQ3VzdG9taXplIHRoZSBsb2FkaW5nIG1lc3NhZ2UuIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCxcbiAgICAgICAqIG9yIGEgbm9kZSB0byByZXBsYWNlIHRoZSB3aG9sZSBjb250ZW50LlxuICAgICAgICovXG4gIGxvYWRpbmdNZXNzYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICAgKiBDdXN0b21pemUgdGhlIG5vIG1hdGNoZXMgbWVzc2FnZS4gUGFzcyBhIHN0cmluZyB0byBzaW1wbHkgY2hhbmdlIHRoZSB0ZXh0LFxuICAgICAgICogb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKi9cbiAgbm9NYXRjaGVzTWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogQ3VzdG9taXplIHRoZSBlbXB0eSBtZXNzYWdlLiBQYXNzIGEgc3RyaW5nIHRvIHNpbXBseSBjaGFuZ2UgdGhlIHRleHQsXG4gICAgICAgKiBvciBhIG5vZGUgdG8gcmVwbGFjZSB0aGUgd2hvbGUgY29udGVudC5cbiAgICAgICAqL1xuICBlbXB0eU1lc3NhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIEFkZCBhbiBlcnJvciBtZXNzYWdlLlxuICAgICAgICogVGhlIG1lc3NhZ2Ugd2lsbCBiZSBzaG93biB3aGVuIHRoZSB2YWx1ZSBpcyBub3QgYG51bGxgIG9yIGB1bmRlZmluZWRgLlxuICAgICAgICogUGFzcyBhIHN0cmluZyB0byBzaW1wbHkgY2hhbmdlIHRoZSB0ZXh0LCBvciBhIG5vZGUgdG8gcmVwbGFjZSB0aGUgd2hvbGUgY29udGVudC5cbiAgICAgICAqXG4gICAgICAgKiBgZXJyb3JNZXNzYWdlPXtoYXNFcnJvcnMgPyAnTXkgZXJyb3IgbWVzc2FnZScgOiBudWxsfWBcbiAgICAgICAqL1xuICBlcnJvck1lc3NhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtudWxsXSldKSxcbiAgLyoqXG4gICAgICAgKiBDb250cm9sIHdoZXRoZXIgb3Igbm90IG9wdGlvbnMgZ2V0IGZpbHRlcmVkIGludGVybmFsbHkgKGkuZS4sIHdoZXRoZXIgZmlsdGVyaW5nIGlzXG4gICAgICAgKiBoYW5kbGVkIGJ5IEVVSSBvciBieSB5b3UsIHRoZSBjb25zdW1lcikuXG4gICAgICAgKiBJZiBzZXQgdG8gYHRydWVgLCBhbGwgcGFzc2VkIGBvcHRpb25zYCB3aWxsIGJlIGRpc3BsYXllZCByZWdhcmRsZXNzIG9mIHRoZSB1c2VyJ3NcbiAgICAgICAqIHNlYXJjaCBpbnB1dC5cbiAgICAgICAqXG4gICAgICAgKiBBZGRpdGlvbmFsbHkgYWxsb3dzIHBhc3NpbmcgYSBjb25maWd1cmF0aW9uIG9iamVjdCB3aGljaCBlbmFibGVzIHR1cm5pbmcgb2ZmXG4gICAgICAgKiBzZWFyY2ggaGlnaGxpZ2h0aW5nIGlmIG5lZWRlZC5cbiAgICAgICAqXG4gICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICovXG4gIGlzUHJlRmlsdGVyZWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaGlnaGxpZ2h0U2VhcmNoOiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogT3B0aW9uYWwgc2NyZWVuIHJlYWRlciBpbnN0cnVjdGlvbnMgdG8gYW5ub3VuY2UgdXBvbiBmb2N1cy9pbnRlcmFjdGlvbi4gVGhpcyB0ZXh0IGlzIHJlYWQgb3V0XG4gICAgICAgKiBhZnRlciB0aGUgYEV1aVNlbGVjdGFibGVgIGxhYmVsIGFuZCBhIGJyaWVmIHBhdXNlLCBidXQgYmVmb3JlIHRoZSBkZWZhdWx0IGtleWJvYXJkIGluc3RydWN0aW9ucyBmb3JcbiAgICAgICAqIGludGVyYWN0aW5nIHdpdGggYSBzZWxlY3RhYmxlIGFyZSByZWFkIG91dC5cbiAgICAgICAqL1xuICBzZWxlY3RhYmxlU2NyZWVuUmVhZGVyVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBjdXN0b20gb3B0aW9uIG1hdGNoZXIgZnVuY3Rpb25cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICogY29uc3QgZXhhY3RFcXVhbGl0eU1hdGNoZXI6IEV1aVNlbGVjdGFibGVPcHRpb25NYXRjaGVyID0gKHsgb3B0aW9uLCBzZWFyY2hWYWx1ZSB9KSA9PiB7XG4gICAgICAgKiAgIHJldHVybiBvcHRpb24ubGFiZWwgPT09IHNlYXJjaFZhbHVlO1xuICAgICAgICogfVxuICAgICAgICovXG4gIG9wdGlvbk1hdGNoZXI6IFByb3BUeXBlcy5mdW5jXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wib25DaGFuZ2VcIiwgXCJvcHRpb25zXCIsIFwidmFsdWVcIiwgXCJwbGFjZWhvbGRlclwiLCBcImlzUHJlRmlsdGVyZWRcIiwgXCJsaXN0SWRcIiwgXCJjbGFzc05hbWVcIiwgXCJvcHRpb25NYXRjaGVyXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUZpZWxkU2VhcmNoIH0gZnJvbSAnLi4vLi4vZm9ybSc7XG5pbXBvcnQgeyBnZXRNYXRjaGluZ09wdGlvbnMgfSBmcm9tICcuLi9tYXRjaGluZ19vcHRpb25zJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGVTZWFyY2ggPSBmdW5jdGlvbiBFdWlTZWxlY3RhYmxlU2VhcmNoKF9yZWYpIHtcbiAgdmFyIG9uQ2hhbmdlQ2FsbGJhY2sgPSBfcmVmLm9uQ2hhbmdlLFxuICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgdmFsdWUgPSBfcmVmLnZhbHVlLFxuICAgIHBsYWNlaG9sZGVyID0gX3JlZi5wbGFjZWhvbGRlcixcbiAgICBpc1ByZUZpbHRlcmVkID0gX3JlZi5pc1ByZUZpbHRlcmVkLFxuICAgIGxpc3RJZCA9IF9yZWYubGlzdElkLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIG9wdGlvbk1hdGNoZXIgPSBfcmVmLm9wdGlvbk1hdGNoZXIsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgb25DaGFuZ2UgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZSkge1xuICAgIHZhciBzZWFyY2hWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgIHZhciBtYXRjaGluZ09wdGlvbnMgPSBnZXRNYXRjaGluZ09wdGlvbnMoe1xuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgIGlzUHJlRmlsdGVyZWQ6IGlzUHJlRmlsdGVyZWQsXG4gICAgICBvcHRpb25NYXRjaGVyOiBvcHRpb25NYXRjaGVyXG4gICAgfSk7XG4gICAgb25DaGFuZ2VDYWxsYmFjayhzZWFyY2hWYWx1ZSwgbWF0Y2hpbmdPcHRpb25zKTtcbiAgfSwgW29wdGlvbnMsIGlzUHJlRmlsdGVyZWQsIG9uQ2hhbmdlQ2FsbGJhY2ssIG9wdGlvbk1hdGNoZXJdKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlU2VhcmNoJywgY2xhc3NOYW1lKTtcbiAgdmFyIGFyaWFQcm9wc0lmTGlzdElzUHJlc2VudCA9IGxpc3RJZCA/IHtcbiAgICByb2xlOiAnY29tYm9ib3gnLFxuICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0JyxcbiAgICAnYXJpYS1leHBhbmRlZCc6IHRydWUsXG4gICAgJ2FyaWEtY29udHJvbHMnOiBsaXN0SWQsXG4gICAgJ2FyaWEtb3ducyc6IGxpc3RJZCAvLyBsZWdhY3kgYXR0cmlidXRlIGJ1dCBzaGltcyBzdXBwb3J0IGZvciBuZWFybHkgZXZlcnl0aGluZyBhdG1cbiAgfSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRmllbGRTZWFyY2gsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgaW5jcmVtZW50YWw6IHRydWUsXG4gICAgZnVsbFdpZHRoOiB0cnVlLFxuICAgIGF1dG9Db21wbGV0ZTogXCJvZmZcIixcbiAgICBcImFyaWEtaGFzcG9wdXBcIjogXCJsaXN0Ym94XCJcbiAgfSwgYXJpYVByb3BzSWZMaXN0SXNQcmVzZW50LCByZXN0KSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG52YXIgZ2V0U2VhcmNoYWJsZUxhYmVsID0gZnVuY3Rpb24gZ2V0U2VhcmNoYWJsZUxhYmVsKG9wdGlvbikge1xuICB2YXIgbm9ybWFsaXplID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICB2YXIgc2VhcmNoYWJsZUxhYmVsID0gb3B0aW9uLnNlYXJjaGFibGVMYWJlbCB8fCBvcHRpb24ubGFiZWw7XG4gIHJldHVybiBub3JtYWxpemUgPyBzZWFyY2hhYmxlTGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCkgOiBzZWFyY2hhYmxlTGFiZWw7XG59O1xudmFyIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUgPSBmdW5jdGlvbiBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKHNlYXJjaFZhbHVlLCBzZWxlY3RlZE9wdGlvbnMpIHtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBzZWxlY3RlZE9wdGlvbnMuZmluZChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgcmV0dXJuIGdldFNlYXJjaGFibGVMYWJlbChvcHRpb24pID09PSBub3JtYWxpemVkU2VhcmNoVmFsdWU7XG4gIH0pO1xufTtcbnZhciBjb2xsZWN0TWF0Y2hpbmdPcHRpb24gPSBmdW5jdGlvbiBjb2xsZWN0TWF0Y2hpbmdPcHRpb24oX3JlZikge1xuICB2YXIgc2VsZWN0ZWRPcHRpb25zID0gX3JlZi5zZWxlY3RlZE9wdGlvbnMsXG4gICAgaXNQcmVGaWx0ZXJlZCA9IF9yZWYuaXNQcmVGaWx0ZXJlZCxcbiAgICBvcHRpb24gPSBfcmVmLm9wdGlvbixcbiAgICBhY2N1bXVsYXRvciA9IF9yZWYuYWNjdW11bGF0b3IsXG4gICAgc2VhcmNoVmFsdWUgPSBfcmVmLnNlYXJjaFZhbHVlLFxuICAgIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IF9yZWYubm9ybWFsaXplZFNlYXJjaFZhbHVlLFxuICAgIG9wdGlvbk1hdGNoZXIgPSBfcmVmLm9wdGlvbk1hdGNoZXI7XG4gIC8vIERvbid0IHNob3cgb3B0aW9ucyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCBpZlxuICAvLyB0aGUgc2VsZWN0ZWRPcHRpb25zIGxpc3QgZXhpc3RzXG4gIGlmIChzZWxlY3RlZE9wdGlvbnMpIHtcbiAgICB2YXIgc2VsZWN0ZWRPcHRpb24gPSBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKGdldFNlYXJjaGFibGVMYWJlbChvcHRpb24sIGZhbHNlKSwgc2VsZWN0ZWRPcHRpb25zKTtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBJZiB0aGUgb3B0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBwcmVmaWx0ZXJlZCB0aGVuIHdlIGNhbiBza2lwIGZpbHRlcmluZyBhZ2FpbnN0IHRoZSBzZWFyY2ggdmFsdWUuXG4gIC8vIFRPRE86IEkgc3RpbGwgZG9uJ3QgcXVpdGUgdW5kZXJzdGFuZCBob3cgdGhpcyB3b3JrcyB3aGVuIGhvb2tlZCB1cCB0byBhc3luY1xuICBpZiAoaXNQcmVGaWx0ZXJlZCkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBpc01hdGNoaW5nID0gb3B0aW9uTWF0Y2hlcih7XG4gICAgb3B0aW9uOiBvcHRpb24sXG4gICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZTogbm9ybWFsaXplZFNlYXJjaFZhbHVlXG4gIH0pO1xuICBpZiAoaXNNYXRjaGluZykge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgfVxufTtcbmV4cG9ydCB2YXIgZ2V0TWF0Y2hpbmdPcHRpb25zID0gZnVuY3Rpb24gZ2V0TWF0Y2hpbmdPcHRpb25zKF9yZWYyKSB7XG4gIHZhciBzZWFyY2hWYWx1ZSA9IF9yZWYyLnNlYXJjaFZhbHVlLFxuICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgIGlzUHJlRmlsdGVyZWQgPSBfcmVmMi5pc1ByZUZpbHRlcmVkLFxuICAgIF9yZWYyJHNlbGVjdGVkT3B0aW9ucyA9IF9yZWYyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICBzZWxlY3RlZE9wdGlvbnMgPSBfcmVmMiRzZWxlY3RlZE9wdGlvbnMgPT09IHZvaWQgMCA/IFtdIDogX3JlZjIkc2VsZWN0ZWRPcHRpb25zLFxuICAgIG9wdGlvbk1hdGNoZXIgPSBfcmVmMi5vcHRpb25NYXRjaGVyO1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IFtdO1xuICBvcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIGNvbGxlY3RNYXRjaGluZ09wdGlvbih7XG4gICAgICBhY2N1bXVsYXRvcjogbWF0Y2hpbmdPcHRpb25zLFxuICAgICAgb3B0aW9uOiBvcHRpb24sXG4gICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICBub3JtYWxpemVkU2VhcmNoVmFsdWU6IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSxcbiAgICAgIGlzUHJlRmlsdGVyZWQ6IGlzUHJlRmlsdGVyZWQsXG4gICAgICBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgIG9wdGlvbk1hdGNoZXI6IG9wdGlvbk1hdGNoZXJcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBtYXRjaGluZ09wdGlvbnM7XG59O1xuXG4vKipcbiAqIFBhcnRpYWwgc3RyaW5nIGVxdWFsaXR5IG9wdGlvbiBtYXRjaGVyIGZvciBFdWlTZWxlY3RhYmxlXG4gKiBJdCBtYXRjaGVzIGFsbCBvcHRpb25zIHdpdGggbGFiZWxzIGluY2x1ZGluZyB0aGUgc2VhcmNoZWQgc3RyaW5nLlxuICovXG5leHBvcnQgdmFyIGNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIgPSBmdW5jdGlvbiBjcmVhdGVQYXJ0aWFsU3RyaW5nRXF1YWxpdHlPcHRpb25NYXRjaGVyKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgdmFyIG9wdGlvbiA9IF9yZWYzLm9wdGlvbixcbiAgICAgIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IF9yZWYzLm5vcm1hbGl6ZWRTZWFyY2hWYWx1ZTtcbiAgICB2YXIgbm9ybWFsaXplZE9wdGlvbiA9IGdldFNlYXJjaGFibGVMYWJlbChvcHRpb24pO1xuICAgIHJldHVybiBub3JtYWxpemVkT3B0aW9uLmluY2x1ZGVzKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSk7XG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJib3JkZXJlZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vLi4vdGV4dCc7XG5pbXBvcnQgeyBldWlTZWxlY3RhYmxlTWVzc2FnZVN0eWxlcyB9IGZyb20gJy4vc2VsZWN0YWJsZV9tZXNzYWdlLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlTWVzc2FnZSA9IGZ1bmN0aW9uIEV1aVNlbGVjdGFibGVNZXNzYWdlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJGJvcmRlcmVkID0gX3JlZi5ib3JkZXJlZCxcbiAgICBib3JkZXJlZCA9IF9yZWYkYm9yZGVyZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRib3JkZXJlZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZU1lc3NhZ2UnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpU2VsZWN0YWJsZU1lc3NhZ2VTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlTZWxlY3RhYmxlTWVzc2FnZSwgYm9yZGVyZWQgJiYgc3R5bGVzLmJvcmRlcmVkXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGV4dCwgX2V4dGVuZHMoe1xuICAgIGNvbG9yOiBcInN1YmR1ZWRcIixcbiAgICBzaXplOiBcInhzXCIsXG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpU2VsZWN0YWJsZU1lc3NhZ2UucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICAgKiBNYXRjaCB0aGlzIHRvIHRoZSBgbGlzdFByb3BzLmJvcmRlcmVkYCBwcm9wZXJ0eSBvZiB5b3VyIGBFdWlTZWxlY3RhYmxlYCBpbnN0YW5jZVxuICAgICAgICovXG4gIGJvcmRlcmVkOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuZXhwb3J0IHZhciBldWlTZWxlY3RhYmxlTWVzc2FnZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNlbGVjdGFibGVNZXNzYWdlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpU2VsZWN0YWJsZU1lc3NhZ2U6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7dGV4dC1hbGlnbjpjZW50ZXI7d29yZC13cmFwOmJyZWFrLXdvcmQ7O2xhYmVsOmV1aVNlbGVjdGFibGVNZXNzYWdlO1wiKSxcbiAgICAvLyBNYXRjaCBib3JkZXIgZnJvbSBzZWxlY3RhYmxlX2xpc3RcbiAgICBib3JkZXJlZDogLyojX19QVVJFX18qL2NzcyhcIm92ZXJmbG93OmhpZGRlbjtib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci50aGluLCBcIjtib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSwgXCI7O2xhYmVsOmJvcmRlcmVkO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImRhdGFcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJsYWJlbFwiLCBcImlzR3JvdXBMYWJlbFwiLCBcImNoZWNrZWRcIiwgXCJkaXNhYmxlZFwiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIiwgXCJyZWZcIiwgXCJrZXlcIiwgXCJzZWFyY2hhYmxlTGFiZWxcIiwgXCJkYXRhXCIsIFwidHJ1bmNhdGlvblByb3BzXCJdLFxuICBfZXhjbHVkZWQzID0gW1wiY2xhc3NOYW1lXCIsIFwib3B0aW9uc1wiLCBcInNlYXJjaFZhbHVlXCIsIFwib25PcHRpb25DbGlja1wiLCBcInJlbmRlck9wdGlvblwiLCBcImhlaWdodFwiLCBcIndpbmRvd1Byb3BzXCIsIFwicm93SGVpZ2h0XCIsIFwiYWN0aXZlT3B0aW9uSW5kZXhcIiwgXCJtYWtlT3B0aW9uSWRcIiwgXCJzaG93SWNvbnNcIiwgXCJzaW5nbGVTZWxlY3Rpb25cIiwgXCJ2aXNpYmxlT3B0aW9uc1wiLCBcImFsbG93RXhjbHVzaW9uc1wiLCBcImJvcmRlcmVkXCIsIFwicGFkZGluZ1NpemVcIiwgXCJzZWFyY2hhYmxlXCIsIFwib25Gb2N1c0JhZGdlXCIsIFwibGlzdElkXCIsIFwic2V0QWN0aXZlT3B0aW9uSW5kZXhcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBcInJvbGVcIiwgXCJpc1ByZUZpbHRlcmVkXCIsIFwiaXNWaXJ0dWFsaXplZFwiLCBcInRleHRXcmFwXCIsIFwidHJ1bmNhdGlvblByb3BzXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBtZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBGaXhlZFNpemVMaXN0LCBhcmVFcXVhbCB9IGZyb20gJ3JlYWN0LXdpbmRvdyc7XG5pbXBvcnQgeyBSZW5kZXJXaXRoRXVpU3R5bGVzTWVtb2l6ZXIgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlBdXRvU2l6ZXIgfSBmcm9tICcuLi8uLi9hdXRvX3NpemVyJztcbmltcG9ydCB7IEV1aUhpZ2hsaWdodCB9IGZyb20gJy4uLy4uL2hpZ2hsaWdodCc7XG5pbXBvcnQgeyBFdWlNYXJrIH0gZnJvbSAnLi4vLi4vbWFyayc7XG5pbXBvcnQgeyBFdWlUZXh0VHJ1bmNhdGUgfSBmcm9tICcuLi8uLi90ZXh0X3RydW5jYXRlJztcbmltcG9ydCB7IEV1aVNlbGVjdGFibGVMaXN0SXRlbSB9IGZyb20gJy4vc2VsZWN0YWJsZV9saXN0X2l0ZW0nO1xuaW1wb3J0IHsgZXVpU2VsZWN0YWJsZUxpc3RTdHlsZXMgfSBmcm9tICcuL3NlbGVjdGFibGVfbGlzdC5zdHlsZXMnO1xuXG4vLyBDb25zdW1lciBDb25maWd1cmFibGUgUHJvcHMgdmlhIGBFdWlTZWxlY3RhYmxlLmxpc3RQcm9wc2BcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGVMaXN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIEV1aVNlbGVjdGFibGVMaXN0KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlTZWxlY3RhYmxlTGlzdCk7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aVNlbGVjdGFibGVMaXN0LCBbcHJvcHNdKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiYW5pbWF0aW9uRnJhbWVJZFwiLCB2b2lkIDApO1xuICAgIC8vIGNvdW50ZXIgZm9yIHRyYWNraW5nIGxpc3QgcmVuZGVycyBhbmQgZW5zdXJpbmcgcmVyZW5kZXJzXG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImxpc3RSb3dSZXJlbmRlclwiLCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibGlzdFJlZlwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibGlzdEJveFJlZlwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2V0TGlzdFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5saXN0UmVmID0gcmVmO1xuICAgICAgaWYgKHJlZiAmJiBfdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgICByZWYuc2Nyb2xsVG9JdGVtKF90aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4LCAnYXV0bycpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZW1vdmVTY3JvbGxhYmxlVGFiU3RvcFwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAvLyBGaXJlZm94IGFkZHMgYSB0YWIgc3RvcCBmb3Igc2Nyb2xsYWJsZSBjb250YWluZXJzXG4gICAgICAvLyBXZSBoYW5kbGUgdGhpcyBpbnNpZGUgc28gbmVlZCB0byBzdG9wIGZpcmVmb3ggZnJvbSBkb2luZyBpdHMgdGhpbmdcbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic2V0TGlzdEJveFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5saXN0Qm94UmVmID0gcmVmO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGxpc3RJZCA9IF90aGlzJHByb3BzLmxpc3RJZCxcbiAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzLnNlYXJjaGFibGUsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHNbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgYXJpYUxhYmVsbGVkYnkgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICAgIGFyaWFEZXNjcmliZWRieSA9IF90aGlzJHByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J107XG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2lkJywgbGlzdElkKTtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgncm9sZScsICdsaXN0Ym94Jyk7XG4gICAgICAgIGlmIChzZWFyY2hhYmxlICE9PSB0cnVlKSB7XG4gICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gIT09ICdhbHdheXMnICYmIHNpbmdsZVNlbGVjdGlvbiAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1tdWx0aXNlbGVjdGFibGUnLCAndHJ1ZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyaWFMYWJlbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgYXJpYUxhYmVsKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJpYUxhYmVsbGVkYnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgYXJpYUxhYmVsbGVkYnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJpYURlc2NyaWJlZGJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBhcmlhRGVzY3JpYmVkYnkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gVGhpcyB1dGlsaXR5IGlzIG5lY2Vzc2FyeSB0byBleGNsdWRlIGdyb3VwIGxhYmVscyBmcm9tIHRoZSBhcmlhIHNldCBjb3VudFxuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjYWxjdWxhdGVBcmlhU2V0QXR0cnNcIiwgZnVuY3Rpb24gKG9wdGlvbkFycmF5KSB7XG4gICAgICB2YXIgYXJpYVBvc0luU2V0TWFwID0ge307XG4gICAgICB2YXIgbGF0ZXN0QXJpYVBvc0luZGV4ID0gMDtcbiAgICAgIG9wdGlvbkFycmF5LmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbiwgaW5kZXgpIHtcbiAgICAgICAgaWYgKCFvcHRpb24uaXNHcm91cExhYmVsKSB7XG4gICAgICAgICAgbGF0ZXN0QXJpYVBvc0luZGV4Kys7XG4gICAgICAgICAgYXJpYVBvc0luU2V0TWFwW2luZGV4XSA9IGxhdGVzdEFyaWFQb3NJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcmlhUG9zSW5TZXRNYXA6IGFyaWFQb3NJblNldE1hcCxcbiAgICAgICAgYXJpYVNldFNpemU6IGxhdGVzdEFyaWFQb3NJbmRleFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiTGlzdFJvd1wiLCAvKiNfX1BVUkVfXyovbWVtbyhmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIF9vcHRpb24kdGV4dFdyYXA7XG4gICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgICAgaW5kZXggPSBfcmVmLmluZGV4LFxuICAgICAgICBzdHlsZSA9IF9yZWYuc3R5bGU7XG4gICAgICB2YXIgb3B0aW9uID0gZGF0YVtpbmRleF07XG4gICAgICB2YXIgb3B0aW9uRGF0YSA9IG9wdGlvbi5kYXRhLFxuICAgICAgICBfb3B0aW9uID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9wdGlvbiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBsYWJlbCA9IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgaXNHcm91cExhYmVsID0gb3B0aW9uLmlzR3JvdXBMYWJlbCxcbiAgICAgICAgY2hlY2tlZCA9IG9wdGlvbi5jaGVja2VkLFxuICAgICAgICBkaXNhYmxlZCA9IG9wdGlvbi5kaXNhYmxlZCxcbiAgICAgICAgcHJlcGVuZCA9IG9wdGlvbi5wcmVwZW5kLFxuICAgICAgICBhcHBlbmQgPSBvcHRpb24uYXBwZW5kLFxuICAgICAgICByZWYgPSBvcHRpb24ucmVmLFxuICAgICAgICBrZXkgPSBvcHRpb24ua2V5LFxuICAgICAgICBzZWFyY2hhYmxlTGFiZWwgPSBvcHRpb24uc2VhcmNoYWJsZUxhYmVsLFxuICAgICAgICBfZGF0YSA9IG9wdGlvbi5kYXRhLFxuICAgICAgICBfdHJ1bmNhdGlvblByb3BzID0gb3B0aW9uLnRydW5jYXRpb25Qcm9wcyxcbiAgICAgICAgb3B0aW9uUmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb24sIF9leGNsdWRlZDIpO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHMyLmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgb25Gb2N1c0JhZGdlID0gX3RoaXMkcHJvcHMyLm9uRm9jdXNCYWRnZSxcbiAgICAgICAgcGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wczIucGFkZGluZ1NpemUsXG4gICAgICAgIHNob3dJY29ucyA9IF90aGlzJHByb3BzMi5zaG93SWNvbnMsXG4gICAgICAgIG1ha2VPcHRpb25JZCA9IF90aGlzJHByb3BzMi5tYWtlT3B0aW9uSWQsXG4gICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzMi5yZW5kZXJPcHRpb24sXG4gICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMyLnNldEFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMyLnNlYXJjaGFibGUsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMyLnNlYXJjaFZhbHVlLFxuICAgICAgICBpc1ByZUZpbHRlcmVkID0gX3RoaXMkcHJvcHMyLmlzUHJlRmlsdGVyZWQsXG4gICAgICAgIGlzVmlydHVhbGl6ZWQgPSBfdGhpcyRwcm9wczIuaXNWaXJ0dWFsaXplZDtcbiAgICAgIGlmIChpc0dyb3VwTGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyLCBudWxsLCBmdW5jdGlvbiAoc3R5bGVzTWVtb2l6ZXIpIHtcbiAgICAgICAgICB2YXIgc3R5bGVzID0gc3R5bGVzTWVtb2l6ZXIoZXVpU2VsZWN0YWJsZUxpc3RTdHlsZXMpO1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgcm9sZTogXCJwcmVzZW50YXRpb25cIixcbiAgICAgICAgICAgIGNzczogc3R5bGVzLmV1aVNlbGVjdGFibGVMaXN0X19ncm91cExhYmVsLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0X19ncm91cExhYmVsXCIsXG4gICAgICAgICAgICBzdHlsZTogc3R5bGVcbiAgICAgICAgICB9LCBvcHRpb25SZXN0KSwgcHJlcGVuZCwgbGFiZWwsIGFwcGVuZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdmFyIGlkID0gbWFrZU9wdGlvbklkKGluZGV4KTtcbiAgICAgIHZhciBpc0ZvY3VzZWQgPSBhY3RpdmVPcHRpb25JbmRleCA9PT0gaW5kZXg7XG5cbiAgICAgIC8vIFNlYXJjaCBoaWdobGlnaHRpbmdcbiAgICAgIHZhciBoYXNTZWFyY2ggPSAhIXNlYXJjaFZhbHVlO1xuICAgICAgdmFyIGhpZ2hsaWdodFNlYXJjaCA9IGhhc1NlYXJjaCAmJiAoX3R5cGVvZihpc1ByZUZpbHRlcmVkKSA9PT0gJ29iamVjdCcgPyBpc1ByZUZpbHRlcmVkLmhpZ2hsaWdodFNlYXJjaCAhPT0gZmFsc2UgOiB0cnVlKTtcblxuICAgICAgLy8gVGV4dCB3cmFwcGluZ1xuICAgICAgdmFyIGNhbldyYXAgPSAhaXNWaXJ0dWFsaXplZDtcbiAgICAgIHZhciBfdGV4dFdyYXAgPSAoX29wdGlvbiR0ZXh0V3JhcCA9IG9wdGlvbi50ZXh0V3JhcCkgIT09IG51bGwgJiYgX29wdGlvbiR0ZXh0V3JhcCAhPT0gdm9pZCAwID8gX29wdGlvbiR0ZXh0V3JhcCA6IF90aGlzLnByb3BzLnRleHRXcmFwO1xuICAgICAgdmFyIHRleHRXcmFwID0gY2FuV3JhcCA/IF90ZXh0V3JhcCA6ICd0cnVuY2F0ZSc7XG5cbiAgICAgIC8vIFRydW5jYXRpb24gY29uZmlnIChpZiBhbnkpLiBJZiBub25lLCBDU1MgdHJ1bmNhdGlvbiBpcyB1c2VkXG4gICAgICB2YXIgdHJ1bmNhdGlvblByb3BzID0gdGV4dFdyYXAgPT09ICd0cnVuY2F0ZScgPyBfdGhpcy5nZXRUcnVuY2F0aW9uUHJvcHMob3B0aW9uLCBoaWdobGlnaHRTZWFyY2gsIGlzRm9jdXNlZCkgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlTZWxlY3RhYmxlTGlzdEl0ZW0sIF9leHRlbmRzKHtcbiAgICAgICAga2V5OiBpZCxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIG9uTW91c2VEb3duOiBmdW5jdGlvbiBvbk1vdXNlRG93bigpIHtcbiAgICAgICAgICBzZXRBY3RpdmVPcHRpb25JbmRleChpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7IC8vIE5PVEU6IFRoaXMgaXMgbmVlZGVkIGZvciBSZWFjdCB2MTYgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICBfdGhpcy5vbkFkZE9yUmVtb3ZlT3B0aW9uKG9wdGlvbiwgZXZlbnQpO1xuICAgICAgICB9LFxuICAgICAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZCxcbiAgICAgICAgdGl0bGU6IHNlYXJjaGFibGVMYWJlbCB8fCBsYWJlbCxcbiAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICBwcmVwZW5kOiBwcmVwZW5kLFxuICAgICAgICBhcHBlbmQ6IGFwcGVuZCxcbiAgICAgICAgXCJhcmlhLXBvc2luc2V0XCI6IF90aGlzLnN0YXRlLmFyaWFQb3NJblNldE1hcFtpbmRleF0sXG4gICAgICAgIFwiYXJpYS1zZXRzaXplXCI6IF90aGlzLnN0YXRlLmFyaWFTZXRTaXplLFxuICAgICAgICBvbkZvY3VzQmFkZ2U6IG9uRm9jdXNCYWRnZSxcbiAgICAgICAgYWxsb3dFeGNsdXNpb25zOiBhbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgIHNob3dJY29uczogc2hvd0ljb25zLFxuICAgICAgICBwYWRkaW5nU2l6ZTogcGFkZGluZ1NpemUsXG4gICAgICAgIHNlYXJjaGFibGU6IHNlYXJjaGFibGUsXG4gICAgICAgIHRleHRXcmFwOiB0ZXh0V3JhcFxuICAgICAgICAvLyBAdHMtaWdub3JlIGNvbXBsZXhcbiAgICAgIH0sIG9wdGlvblJlc3QpLCByZW5kZXJPcHRpb24gPyByZW5kZXJPcHRpb24oIC8vIEB0cy1pZ25vcmUgY29tcGxleFxuICAgICAgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBfb3B0aW9uKSwgb3B0aW9uRGF0YSksIHNlYXJjaFZhbHVlKSA6IGhpZ2hsaWdodFNlYXJjaCA/IF90aGlzLnJlbmRlclNlYXJjaGVkVGV4dChsYWJlbCwgdHJ1bmNhdGlvblByb3BzKSA6IHRydW5jYXRpb25Qcm9wcyA/IF90aGlzLnJlbmRlclRydW5jYXRlZFRleHQobGFiZWwsIHRydW5jYXRpb25Qcm9wcykgOiBsYWJlbCk7XG4gICAgfSwgYXJlRXF1YWwpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVuZGVyVmlydHVhbGl6ZWRMaXN0XCIsIGZ1bmN0aW9uIChsaXN0Q2xhc3Nlcykge1xuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5pc1ZpcnR1YWxpemVkKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IF90aGlzLnN0YXRlLFxuICAgICAgICBvcHRpb25BcnJheSA9IF90aGlzJHN0YXRlLm9wdGlvbkFycmF5LFxuICAgICAgICBpdGVtRGF0YSA9IF90aGlzJHN0YXRlLml0ZW1EYXRhO1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICB3aW5kb3dQcm9wcyA9IF90aGlzJHByb3BzMy53aW5kb3dQcm9wcyxcbiAgICAgICAgZm9yY2VkSGVpZ2h0ID0gX3RoaXMkcHJvcHMzLmhlaWdodCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHMzLnJvd0hlaWdodDtcbiAgICAgIHZhciBoZWlnaHRJc0Z1bGwgPSBmb3JjZWRIZWlnaHQgPT09ICdmdWxsJztcbiAgICAgIHZhciB2aXJ0dWFsaXphdGlvblByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGNsYXNzTmFtZTogbGlzdENsYXNzZXMsXG4gICAgICAgIHJlZjogX3RoaXMuc2V0TGlzdFJlZixcbiAgICAgICAgb3V0ZXJSZWY6IF90aGlzLnJlbW92ZVNjcm9sbGFibGVUYWJTdG9wLFxuICAgICAgICBpbm5lclJlZjogX3RoaXMuc2V0TGlzdEJveFJlZixcbiAgICAgICAgaW5uZXJFbGVtZW50VHlwZTogJ3VsJyxcbiAgICAgICAgaXRlbUNvdW50OiBvcHRpb25BcnJheS5sZW5ndGgsXG4gICAgICAgIGl0ZW1EYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgaXRlbVNpemU6IHJvd0hlaWdodCxcbiAgICAgICAgJ2RhdGEtc2tpcC1heGUnOiAnc2Nyb2xsYWJsZS1yZWdpb24tZm9jdXNhYmxlJ1xuICAgICAgfSwgd2luZG93UHJvcHMpO1xuXG4gICAgICAvLyBDYWxjdWxhdGVkIGhlaWdodCBpcyBvbmx5IHVzZWQgaWYgaGVpZ2h0IGlzIG5vdCBmdWxsXG4gICAgICB2YXIgY2FsY3VsYXRlZEhlaWdodCA9ICFoZWlnaHRJc0Z1bGwgPyBmb3JjZWRIZWlnaHQgfHwgMCA6IDA7XG5cbiAgICAgIC8vIElmIGNhbGN1bGF0ZWRIZWlnaHQgaXMgc3RpbGwgZmFsc3ksIHRoZW4gY2FsY3VsYXRlIGl0XG4gICAgICBpZiAoIWhlaWdodElzRnVsbCAmJiAhY2FsY3VsYXRlZEhlaWdodCkge1xuICAgICAgICB2YXIgbWF4VmlzaWJsZU9wdGlvbnMgPSA3O1xuICAgICAgICB2YXIgbnVtVmlzaWJsZU9wdGlvbnMgPSBvcHRpb25BcnJheS5sZW5ndGg7XG4gICAgICAgIHZhciBudW1WaXNpYmxlTW9yZVRoYW5NYXggPSBvcHRpb25BcnJheS5sZW5ndGggPiBtYXhWaXNpYmxlT3B0aW9ucztcbiAgICAgICAgaWYgKG51bVZpc2libGVNb3JlVGhhbk1heCkge1xuICAgICAgICAgIC8vIFNob3cgb25seSBoYWxmIG9mIHRoZSBsYXN0IG9uZSB0byBpbmRpY2F0ZSB0aGVyZSdzIG1vcmUgdG8gc2Nyb2xsIHRvXG4gICAgICAgICAgY2FsY3VsYXRlZEhlaWdodCA9IChtYXhWaXNpYmxlT3B0aW9ucyAtIDAuNSkgKiByb3dIZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsY3VsYXRlZEhlaWdodCA9IG51bVZpc2libGVPcHRpb25zICogcm93SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaGVpZ2h0SXNGdWxsID8gX19fRW1vdGlvbkpTWChFdWlBdXRvU2l6ZXIsIHtcbiAgICAgICAgb25SZXNpemU6IF90aGlzLmNhbGN1bGF0ZURlZmF1bHRPcHRpb25XaWR0aFxuICAgICAgfSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciB3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgICAgIGhlaWdodCA9IF9yZWYyLmhlaWdodDtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRml4ZWRTaXplTGlzdCwgX2V4dGVuZHMoe1xuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgICAgICB9LCB2aXJ0dWFsaXphdGlvblByb3BzKSwgX3RoaXMuTGlzdFJvdyk7XG4gICAgICB9KSA6IF9fX0Vtb3Rpb25KU1goRXVpQXV0b1NpemVyLCB7XG4gICAgICAgIGRpc2FibGVIZWlnaHQ6IHRydWUsXG4gICAgICAgIG9uUmVzaXplOiBfdGhpcy5jYWxjdWxhdGVEZWZhdWx0T3B0aW9uV2lkdGhcbiAgICAgIH0sIGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICB2YXIgd2lkdGggPSBfcmVmMy53aWR0aDtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRml4ZWRTaXplTGlzdCwgX2V4dGVuZHMoe1xuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IGNhbGN1bGF0ZWRIZWlnaHRcbiAgICAgICAgfSwgdmlydHVhbGl6YXRpb25Qcm9wcyksIF90aGlzLkxpc3RSb3cpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImZvcmNlVmlydHVhbGl6ZWRMaXN0Um93UmVyZW5kZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpdGVtRGF0YTogX29iamVjdFNwcmVhZCh7fSwgX3RoaXMuc3RhdGUub3B0aW9uQXJyYXkpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyBFdWlUZXh0VHJ1bmNhdGUgaXMgZXhwZW5zaXZlIHBlcmYtd2lzZSAtIHdlIHVzZSBzZXZlcmFsIHV0aWxpdGllcyBoZXJlIHRvXG4gICAgLy8gb2Zmc2V0IGl0cyBwZXJmb3JtYW5jZSBjb3N0XG4gICAgLy8gYW5kIGNyZWF0ZXMgYSByZXNpemUgb2JzZXJ2ZXIgZm9yXG4gICAgLy8gZWFjaCBpbmRpdmlkdWFsIGl0ZW0uIFRoaXMgbG9naWMgdHJpZXMgdG8gb2Zmc2V0IHRoaXMgcGVyZm9ybWFuY2UgaGl0IGJ5XG4gICAgLy8gZ3Vlc3N0aW1hdGluZyBhIGRlZmF1bHQgd2lkdGggZm9yIGVhY2ggb3B0aW9uXG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImZvY3VzQmFkZ2VPZmZzZXRcIiwgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNhbGN1bGF0ZURlZmF1bHRPcHRpb25XaWR0aFwiLCBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICAgIHZhciBjb250YWluZXJXaWR0aCA9IF9yZWY0LndpZHRoO1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IF90aGlzLnByb3BzLFxuICAgICAgICB0cnVuY2F0aW9uUHJvcHMgPSBfdGhpcyRwcm9wczQudHJ1bmNhdGlvblByb3BzLFxuICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHM0LnNlYXJjaGFibGUsXG4gICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHM0LnNlYXJjaFZhbHVlO1xuXG4gICAgICAvLyBJZiBpdCdzIG5vdCBsaWtlbHkgd2UnbGwgbmVlZCB0byB1c2UgRXVpVGV4dFRydW5jYXRlLCBkb24ndCBzZXQgc3RhdGUvcmVyZW5kZXIgb24gZXZlcnkgcGFuZWwgcmVzaXplXG4gICAgICB2YXIgbWF5VHJ1bmNhdGUgPSBzZWFyY2hhYmxlIHx8IHRydW5jYXRpb25Qcm9wcztcbiAgICAgIGlmICghbWF5VHJ1bmNhdGUpIHJldHVybjtcbiAgICAgIHZhciBwYWRkaW5nT2Zmc2V0ID0gX3RoaXMucHJvcHMucGFkZGluZ1NpemUgPT09ICdub25lJyA/IDAgOiAyNDsgLy8gRGVmYXVsdHMgdG8gJ3MnXG4gICAgICB2YXIgY2hlY2tlZEljb25PZmZzZXQgPSBfdGhpcy5wcm9wcy5zaG93SWNvbnMgPT09IGZhbHNlID8gMCA6IDI4OyAvLyBEZWZhdWx0cyB0byB0cnVlXG4gICAgICBfdGhpcy5mb2N1c0JhZGdlT2Zmc2V0ID0gX3RoaXMucHJvcHMub25Gb2N1c0JhZGdlID09PSBmYWxzZSA/IDAgOiA0NjtcblxuICAgICAgLy8gV2FpdCBhIHRpY2sgZm9yIHRoZSBsaXN0Ym94IHJlZiB0byB1cGRhdGUgYmVmb3JlIHByb2NlZWRpbmdcbiAgICAgIF90aGlzLmFuaW1hdGlvbkZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2Nyb2xsYmFyT2Zmc2V0ID0gX3RoaXMubGlzdEJveFJlZiA/IGNvbnRhaW5lcldpZHRoIC0gX3RoaXMubGlzdEJveFJlZi5vZmZzZXRXaWR0aCA6IDA7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBkZWZhdWx0T3B0aW9uV2lkdGg6IGNvbnRhaW5lcldpZHRoIC0gc2Nyb2xsYmFyT2Zmc2V0IC0gcGFkZGluZ09mZnNldCAtIGNoZWNrZWRJY29uT2Zmc2V0XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFBvdGVudGlhbGx5IGZvcmNlIGxpc3Qgcm93cyB0byByZXJlbmRlciBvbiBkeW5hbWljIHJlc2l6ZSBhcyB3ZWxsLFxuICAgICAgICAvLyBidXQgdHJ5IHRvIGRvIGl0IGFzIGxpZ2h0bHkgYXMgcG9zc2libGVcbiAgICAgICAgaWYgKHRydW5jYXRpb25Qcm9wcyB8fCBzZWFyY2hhYmxlICYmIHNlYXJjaFZhbHVlKSB7XG4gICAgICAgICAgX3RoaXMuZm9yY2VWaXJ0dWFsaXplZExpc3RSb3dSZXJlbmRlcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZ2V0VHJ1bmNhdGlvblByb3BzXCIsIGZ1bmN0aW9uIChvcHRpb24sIGhpZ2hsaWdodFNlYXJjaCwgaXNGb2N1c2VkKSB7XG4gICAgICAvLyBJbmRpdmlkdWFsIHRydW5jYXRpb24gc2V0dGluZ3Mgc2hvdWxkIG92ZXJyaWRlIGNvbXBvbmVudC13aWRlIHNldHRpbmdzXG4gICAgICB2YXIgdHJ1bmNhdGlvblByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBfdGhpcy5wcm9wcy50cnVuY2F0aW9uUHJvcHMpLCBvcHRpb24udHJ1bmNhdGlvblByb3BzKTtcblxuICAgICAgLy8gSWYgd2UncmUgbm90IGFjdHVhbGx5IHVzaW5nIEV1aVRleHRUcnVuY2F0ZSwgbm8gbmVlZCB0byBjb250aW51ZVxuICAgICAgdmFyIGhhc0NvbXBsZXhUcnVuY2F0aW9uID0gaGlnaGxpZ2h0U2VhcmNoIHx8IE9iamVjdC5rZXlzKHRydW5jYXRpb25Qcm9wcykubGVuZ3RoID4gMDtcbiAgICAgIGlmICghaGFzQ29tcGxleFRydW5jYXRpb24pIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHdlIGNhbiB1c2UgdGhlIG9wdGltaXplZCBkZWZhdWx0IG9wdGlvbiB3aWR0aFxuICAgICAgdmFyIGRlZmF1bHRPcHRpb25XaWR0aCA9IF90aGlzLnN0YXRlLmRlZmF1bHRPcHRpb25XaWR0aDtcbiAgICAgIHZhciB1c2VEZWZhdWx0V2lkdGggPSAhb3B0aW9uLmFwcGVuZCAmJiAhb3B0aW9uLnByZXBlbmQ7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gdXNlRGVmYXVsdFdpZHRoICYmIGRlZmF1bHRPcHRpb25XaWR0aCA/IGlzRm9jdXNlZCA/IGRlZmF1bHRPcHRpb25XaWR0aCAtIF90aGlzLmZvY3VzQmFkZ2VPZmZzZXQgOiBkZWZhdWx0T3B0aW9uV2lkdGggOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHdpZHRoOiBkZWZhdWx0V2lkdGhcbiAgICAgIH0sIHRydW5jYXRpb25Qcm9wcyk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlbmRlclNlYXJjaGVkVGV4dFwiLCBmdW5jdGlvbiAodGV4dCwgdHJ1bmNhdGlvblByb3BzKSB7XG4gICAgICB2YXIgc2VhcmNoVmFsdWUgPSBfdGhpcy5wcm9wcy5zZWFyY2hWYWx1ZTtcblxuICAgICAgLy8gSWYgdHJ1bmNhdGlvblByb3BzIGlzIHVuZGVmaW5lZCwgd2UncmUgdXNpbmcgbm9uLXZpcnR1YWxpemVkIHRleHQgd3JhcHBpbmdcbiAgICAgIGlmICghdHJ1bmNhdGlvblByb3BzKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUhpZ2hsaWdodCwge1xuICAgICAgICAgIHNlYXJjaDogc2VhcmNoVmFsdWVcbiAgICAgICAgfSwgdGV4dCk7XG4gICAgICB9XG4gICAgICB2YXIgc2VhcmNoUG9zaXRpb25TdGFydCA9IHRleHQudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgdmFyIHNlYXJjaFBvc2l0aW9uQ2VudGVyID0gc2VhcmNoUG9zaXRpb25TdGFydCArIE1hdGguZmxvb3Ioc2VhcmNoVmFsdWUubGVuZ3RoIC8gMik7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUZXh0VHJ1bmNhdGUsIF9leHRlbmRzKHt9LCB0cnVuY2F0aW9uUHJvcHMsIHtcbiAgICAgICAgLy8gV2hlbiBzZWFyY2hpbmcsIGRvbid0IGFsbG93IG92ZXJyaWRpbmcgdGhlIHRydW5jYXRpb24gc2V0dGluZ3NcbiAgICAgICAgdHJ1bmNhdGlvbjogXCJzdGFydEVuZFwiLFxuICAgICAgICB0cnVuY2F0aW9uUG9zaXRpb246IHNlYXJjaFBvc2l0aW9uQ2VudGVyLFxuICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICB9KSwgZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHRleHQubGVuZ3RoID49IHNlYXJjaFZhbHVlLmxlbmd0aCA/IF9fX0Vtb3Rpb25KU1goRXVpSGlnaGxpZ2h0LCB7XG4gICAgICAgICAgc2VhcmNoOiBzZWFyY2hWYWx1ZVxuICAgICAgICB9LCB0ZXh0KSA6XG4gICAgICAgIC8vIElmIHRoZSBhdmFpbGFibGUgdHJ1bmNhdGVkIHRleHQgaXMgc2hvcnRlciB0aGFuIHRoZSBmdWxsIHNlYXJjaCBzdHJpbmcsXG4gICAgICAgIC8vIGp1c3QgaGlnaGxpZ2h0IHRoZSBlbnRpcmUgdHJ1bmNhdGVkIHRleHRcbiAgICAgICAgX19fRW1vdGlvbkpTWChFdWlNYXJrLCBudWxsLCB0ZXh0KSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVuZGVyVHJ1bmNhdGVkVGV4dFwiLCBmdW5jdGlvbiAodGV4dCwgdHJ1bmNhdGlvblByb3BzKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBGb3Igc29tZSBiaXphcnJlIHJlYXNvbiwgdHJ1bmNhdGlvbiBpbiBFdWlTZWxlY3RhYmxlIGlzIG9mZiBvbiBpbml0aWFsIG1vdW50XG4gICAgICAgIC8vIChidXQgbm90IG9uIHJlcmVuZGVyKSBmb3IgU2FmYXJpIGFuZCBfc29tZV8gdHJ1bmNhdGlvbiB0eXBlcyBpbiBGaXJlZm94IDp8XG4gICAgICAgIC8vIFdhaXRpbmcgYSB0aWNrIGJlZm9yZSBjYWxjdWxhdGluZyB0cnVuY2F0aW9uIHNlZW1zIHRvIHNtb290aCBvdmVyIHRoZSBpc3N1ZVxuICAgICAgICBfX19FbW90aW9uSlNYKEV1aVRleHRUcnVuY2F0ZSwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNhbGN1bGF0aW9uRGVsYXlNczogMlxuICAgICAgICB9LCB0cnVuY2F0aW9uUHJvcHMsIHtcbiAgICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICAgIH0pLCBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25BZGRPclJlbW92ZU9wdGlvblwiLCBmdW5jdGlvbiAob3B0aW9uLCBldmVudCkge1xuICAgICAgaWYgKG9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzNS5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczUub3B0aW9ucyxcbiAgICAgICAgX3RoaXMkcHJvcHM1JHZpc2libGVPID0gX3RoaXMkcHJvcHM1LnZpc2libGVPcHRpb25zLFxuICAgICAgICB2aXNpYmxlT3B0aW9ucyA9IF90aGlzJHByb3BzNSR2aXNpYmxlTyA9PT0gdm9pZCAwID8gb3B0aW9ucyA6IF90aGlzJHByb3BzNSR2aXNpYmxlTztcbiAgICAgIF90aGlzLnByb3BzLnNldEFjdGl2ZU9wdGlvbkluZGV4KHZpc2libGVPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICAgICAgdmFyIGxhYmVsID0gX3JlZjUubGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbCA9PT0gb3B0aW9uLmxhYmVsO1xuICAgICAgfSksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKG9wdGlvbi5jaGVja2VkID09PSAnb24nICYmIGFsbG93RXhjbHVzaW9ucykge1xuICAgICAgICAgIF90aGlzLm9uRXhjbHVkZU9wdGlvbihvcHRpb24sIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb24uY2hlY2tlZCA9PT0gJ29uJyB8fCBvcHRpb24uY2hlY2tlZCA9PT0gJ29mZicpIHtcbiAgICAgICAgICBfdGhpcy5vblJlbW92ZU9wdGlvbihvcHRpb24sIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpcy5vbkFkZE9wdGlvbihvcHRpb24sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uQWRkT3B0aW9uXCIsIGZ1bmN0aW9uIChhZGRlZE9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzNi5vbk9wdGlvbkNsaWNrLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM2Lm9wdGlvbnMsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzNi5zaW5nbGVTZWxlY3Rpb247XG4gICAgICB2YXIgY2hhbmdlZE9wdGlvbiA9IF9vYmplY3RTcHJlYWQoe30sIGFkZGVkT3B0aW9uKTtcbiAgICAgIHZhciB1cGRhdGVkT3B0aW9ucyA9IG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgLy8gaWYgc2luZ2xlU2VsZWN0aW9uIGlzIGVuYWJsZWQsIHVuY2hlY2sgYW55IHNlbGVjdGVkIG9wdGlvbihzKVxuICAgICAgICB2YXIgdXBkYXRlZE9wdGlvbiA9IF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbik7XG4gICAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICBkZWxldGUgdXBkYXRlZE9wdGlvbi5jaGVja2VkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyBpcyB0aGUgbm93LXNlbGVjdGVkIG9wdGlvbiwgY2hlY2sgaXRcbiAgICAgICAgaWYgKG9wdGlvbiA9PT0gYWRkZWRPcHRpb24pIHtcbiAgICAgICAgICB1cGRhdGVkT3B0aW9uLmNoZWNrZWQgPSAnb24nO1xuICAgICAgICAgIGNoYW5nZWRPcHRpb24gPSB1cGRhdGVkT3B0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cGRhdGVkT3B0aW9uO1xuICAgICAgfSk7XG4gICAgICBvbk9wdGlvbkNsaWNrKHVwZGF0ZWRPcHRpb25zLCBldmVudCwgY2hhbmdlZE9wdGlvbik7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm9uUmVtb3ZlT3B0aW9uXCIsIGZ1bmN0aW9uIChyZW1vdmVkT3B0aW9uLCBldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IF90aGlzLnByb3BzLFxuICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHM3Lm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzNy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczcub3B0aW9ucztcbiAgICAgIHZhciBjaGFuZ2VkT3B0aW9uID0gX29iamVjdFNwcmVhZCh7fSwgcmVtb3ZlZE9wdGlvbik7XG4gICAgICB2YXIgdXBkYXRlZE9wdGlvbnMgPSBvcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHZhciB1cGRhdGVkT3B0aW9uID0gX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uKTtcbiAgICAgICAgaWYgKG9wdGlvbiA9PT0gcmVtb3ZlZE9wdGlvbiAmJiBzaW5nbGVTZWxlY3Rpb24gIT09ICdhbHdheXMnKSB7XG4gICAgICAgICAgZGVsZXRlIHVwZGF0ZWRPcHRpb24uY2hlY2tlZDtcbiAgICAgICAgICBjaGFuZ2VkT3B0aW9uID0gdXBkYXRlZE9wdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXBkYXRlZE9wdGlvbjtcbiAgICAgIH0pO1xuICAgICAgb25PcHRpb25DbGljayh1cGRhdGVkT3B0aW9ucywgZXZlbnQsIGNoYW5nZWRPcHRpb24pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvbkV4Y2x1ZGVPcHRpb25cIiwgZnVuY3Rpb24gKGV4Y2x1ZGVkT3B0aW9uLCBldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzOCA9IF90aGlzLnByb3BzLFxuICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHM4Lm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczgub3B0aW9ucztcbiAgICAgIHZhciBjaGFuZ2VkT3B0aW9uID0gX29iamVjdFNwcmVhZCh7fSwgZXhjbHVkZWRPcHRpb24pO1xuICAgICAgdmFyIHVwZGF0ZWRPcHRpb25zID0gb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICB2YXIgdXBkYXRlZE9wdGlvbiA9IF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbik7XG4gICAgICAgIGlmIChvcHRpb24gPT09IGV4Y2x1ZGVkT3B0aW9uKSB7XG4gICAgICAgICAgdXBkYXRlZE9wdGlvbi5jaGVja2VkID0gJ29mZic7XG4gICAgICAgICAgY2hhbmdlZE9wdGlvbiA9IHVwZGF0ZWRPcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRPcHRpb247XG4gICAgICB9KTtcbiAgICAgIG9uT3B0aW9uQ2xpY2sodXBkYXRlZE9wdGlvbnMsIGV2ZW50LCBjaGFuZ2VkT3B0aW9uKTtcbiAgICB9KTtcbiAgICB2YXIgX29wdGlvbkFycmF5ID0gcHJvcHMudmlzaWJsZU9wdGlvbnMgfHwgcHJvcHMub3B0aW9ucztcbiAgICBfdGhpcy5zdGF0ZSA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgZGVmYXVsdE9wdGlvbldpZHRoOiAwLFxuICAgICAgb3B0aW9uQXJyYXk6IF9vcHRpb25BcnJheSxcbiAgICAgIGl0ZW1EYXRhOiBfb2JqZWN0U3ByZWFkKHt9LCBfb3B0aW9uQXJyYXkpXG4gICAgfSwgX3RoaXMuY2FsY3VsYXRlQXJpYVNldEF0dHJzKF9vcHRpb25BcnJheSkpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRXVpU2VsZWN0YWJsZUxpc3QsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aVNlbGVjdGFibGVMaXN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIC8vIGVuc3VyZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgaXMgY2FuY2VsZWQgb24gdW5tb3VudCBhc1xuICAgICAgLy8gaXQgY291bGQgcG90ZW50aWFsbHkgcnVuIG9uIGEgbmV4dCB0aWNrIG90aGVyd2lzZVxuICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uRnJhbWVJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuYW5pbWF0aW9uRnJhbWVJZCk7XG4gICAgICAgIHRoaXMuYW5pbWF0aW9uRnJhbWVJZCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2hvdWxkQ29tcG9uZW50VXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wczkuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wczkuc2hvd0ljb25zLFxuICAgICAgICBwYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzOS5wYWRkaW5nU2l6ZSxcbiAgICAgICAgdGV4dFdyYXAgPSBfdGhpcyRwcm9wczkudGV4dFdyYXAsXG4gICAgICAgIG9uRm9jdXNCYWRnZSA9IF90aGlzJHByb3BzOS5vbkZvY3VzQmFkZ2UsXG4gICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wczkuc2VhcmNoYWJsZTtcblxuICAgICAgLy8gdXNpbmcgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHRvIGRldGVybWluZSBuZWVkZWQgcmVyZW5kZXIgYmVmb3JlIGFjdHVhbCByZXJlbmRlclxuICAgICAgLy8gd2l0aG91dCBuZWVkaW5nIHN0YXRlIHVwZGF0ZXMgb3IgbGFnZ2luZyBiZWhpbmQgb24gdXBkYXRlc1xuICAgICAgaWYgKG5leHRQcm9wcy5hbGxvd0V4Y2x1c2lvbnMgIT09IGFsbG93RXhjbHVzaW9ucyB8fCBuZXh0UHJvcHMuc2hvd0ljb25zICE9PSBzaG93SWNvbnMgfHwgbmV4dFByb3BzLnBhZGRpbmdTaXplICE9PSBwYWRkaW5nU2l6ZSB8fCBuZXh0UHJvcHMudGV4dFdyYXAgIT09IHRleHRXcmFwIHx8IG5leHRQcm9wcy5vbkZvY3VzQmFkZ2UgIT09IG9uRm9jdXNCYWRnZSB8fCBuZXh0UHJvcHMuc2VhcmNoYWJsZSAhPT0gc2VhcmNoYWJsZSkge1xuICAgICAgICB0aGlzLmxpc3RSb3dSZXJlbmRlciArPSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzVmlydHVhbGl6ZWQgPSBfdGhpcyRwcm9wczEwLmlzVmlydHVhbGl6ZWQsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMxMC5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMgPSBfdGhpcyRwcm9wczEwLnZpc2libGVPcHRpb25zLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMxMC5vcHRpb25zLFxuICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wczEwLmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHMxMC5zaG93SWNvbnMsXG4gICAgICAgIHBhZGRpbmdTaXplID0gX3RoaXMkcHJvcHMxMC5wYWRkaW5nU2l6ZSxcbiAgICAgICAgdGV4dFdyYXAgPSBfdGhpcyRwcm9wczEwLnRleHRXcmFwLFxuICAgICAgICBvbkZvY3VzQmFkZ2UgPSBfdGhpcyRwcm9wczEwLm9uRm9jdXNCYWRnZSxcbiAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzMTAuc2VhcmNoYWJsZTtcbiAgICAgIGlmIChwcmV2UHJvcHMuYWN0aXZlT3B0aW9uSW5kZXggIT09IGFjdGl2ZU9wdGlvbkluZGV4KSB7XG4gICAgICAgIHZhciBtYWtlT3B0aW9uSWQgPSB0aGlzLnByb3BzLm1ha2VPcHRpb25JZDtcbiAgICAgICAgaWYgKHRoaXMubGlzdEJveFJlZiAmJiB0aGlzLnByb3BzLnNlYXJjaGFibGUgIT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmxpc3RCb3hSZWYuc2V0QXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBtYWtlT3B0aW9uSWQoYWN0aXZlT3B0aW9uSW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGl2ZU9wdGlvbkluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGlmIChpc1ZpcnR1YWxpemVkKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkbGlzdFJlZjtcbiAgICAgICAgICAgIChfdGhpcyRsaXN0UmVmID0gdGhpcy5saXN0UmVmKSA9PT0gbnVsbCB8fCBfdGhpcyRsaXN0UmVmID09PSB2b2lkIDAgfHwgX3RoaXMkbGlzdFJlZi5zY3JvbGxUb0l0ZW0oYWN0aXZlT3B0aW9uSW5kZXgsICdhdXRvJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyRsaXN0Qm94UmVmO1xuICAgICAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbklkID0gXCIjXCIuY29uY2F0KG1ha2VPcHRpb25JZChhY3RpdmVPcHRpb25JbmRleCkpO1xuICAgICAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbkVsID0gKF90aGlzJGxpc3RCb3hSZWYgPSB0aGlzLmxpc3RCb3hSZWYpID09PSBudWxsIHx8IF90aGlzJGxpc3RCb3hSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGxpc3RCb3hSZWYucXVlcnlTZWxlY3RvcihhY3RpdmVPcHRpb25JZCk7XG4gICAgICAgICAgICBpZiAoYWN0aXZlT3B0aW9uRWwpIHtcbiAgICAgICAgICAgICAgdmFyIF9hY3RpdmVPcHRpb25FbCRzY3JvbDtcbiAgICAgICAgICAgICAgLy8gVE9ETzogd2UgY2FuIHJlbW92ZSBzY3JvbGxJbnRvVmlldydzIGNvbmRpdGlvbmFsIGNoYWluaW5nIG9uY2UganNkb20gc3R1YnMgaXRcbiAgICAgICAgICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vanNkb20vanNkb20vaXNzdWVzLzE2OTVcbiAgICAgICAgICAgICAgKF9hY3RpdmVPcHRpb25FbCRzY3JvbCA9IGFjdGl2ZU9wdGlvbkVsLnNjcm9sbEludG9WaWV3KSA9PT0gbnVsbCB8fCBfYWN0aXZlT3B0aW9uRWwkc2Nyb2wgPT09IHZvaWQgMCB8fCBfYWN0aXZlT3B0aW9uRWwkc2Nyb2wuY2FsbChhY3RpdmVPcHRpb25FbCwge1xuICAgICAgICAgICAgICAgIGJsb2NrOiAnbmVhcmVzdCdcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgb3B0aW9uQXJyYXkgPSB2aXNpYmxlT3B0aW9ucyB8fCBvcHRpb25zO1xuICAgICAgaWYgKHByZXZQcm9wcy52aXNpYmxlT3B0aW9ucyAhPT0gdmlzaWJsZU9wdGlvbnMgfHwgcHJldlByb3BzLm9wdGlvbnMgIT09IG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICBvcHRpb25BcnJheTogb3B0aW9uQXJyYXksXG4gICAgICAgICAgaXRlbURhdGE6IF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbkFycmF5KVxuICAgICAgICB9LCB0aGlzLmNhbGN1bGF0ZUFyaWFTZXRBdHRycyhvcHRpb25BcnJheSkpKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNWaXJ0dWFsaXplZCkge1xuICAgICAgICAvLyBlbnN1cmUgdGhhdCBMaXN0Um93IHVwZGF0ZXMgYmFzZWQgb24gaXRlbSBwcm9wc1xuICAgICAgICBpZiAocHJldlByb3BzLmFsbG93RXhjbHVzaW9ucyAhPT0gYWxsb3dFeGNsdXNpb25zIHx8IHByZXZQcm9wcy5zaG93SWNvbnMgIT09IHNob3dJY29ucyB8fCBwcmV2UHJvcHMucGFkZGluZ1NpemUgIT09IHBhZGRpbmdTaXplIHx8IHByZXZQcm9wcy50ZXh0V3JhcCAhPT0gdGV4dFdyYXAgfHwgcHJldlByb3BzLm9uRm9jdXNCYWRnZSAhPT0gb25Gb2N1c0JhZGdlIHx8IHByZXZQcm9wcy5zZWFyY2hhYmxlICE9PSBzZWFyY2hhYmxlKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpdGVtRGF0YTogX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uQXJyYXkpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTEgPSB0aGlzLnByb3BzLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczExLmNsYXNzTmFtZSxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMTEub3B0aW9ucyxcbiAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczExLnNlYXJjaFZhbHVlLFxuICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHMxMS5vbk9wdGlvbkNsaWNrLFxuICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczExLnJlbmRlck9wdGlvbixcbiAgICAgICAgZm9yY2VkSGVpZ2h0ID0gX3RoaXMkcHJvcHMxMS5oZWlnaHQsXG4gICAgICAgIHdpbmRvd1Byb3BzID0gX3RoaXMkcHJvcHMxMS53aW5kb3dQcm9wcyxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHMxMS5yb3dIZWlnaHQsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMxMS5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgbWFrZU9wdGlvbklkID0gX3RoaXMkcHJvcHMxMS5tYWtlT3B0aW9uSWQsXG4gICAgICAgIHNob3dJY29ucyA9IF90aGlzJHByb3BzMTEuc2hvd0ljb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczExLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMgPSBfdGhpcyRwcm9wczExLnZpc2libGVPcHRpb25zLFxuICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wczExLmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgYm9yZGVyZWQgPSBfdGhpcyRwcm9wczExLmJvcmRlcmVkLFxuICAgICAgICBwYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzMTEucGFkZGluZ1NpemUsXG4gICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wczExLnNlYXJjaGFibGUsXG4gICAgICAgIG9uRm9jdXNCYWRnZSA9IF90aGlzJHByb3BzMTEub25Gb2N1c0JhZGdlLFxuICAgICAgICBsaXN0SWQgPSBfdGhpcyRwcm9wczExLmxpc3RJZCxcbiAgICAgICAgc2V0QWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczExLnNldEFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wczExWydhcmlhLWxhYmVsJ10sXG4gICAgICAgIGFyaWFMYWJlbGxlZGJ5ID0gX3RoaXMkcHJvcHMxMVsnYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICAgIGFyaWFEZXNjcmliZWRieSA9IF90aGlzJHByb3BzMTFbJ2FyaWEtZGVzY3JpYmVkYnknXSxcbiAgICAgICAgcm9sZSA9IF90aGlzJHByb3BzMTEucm9sZSxcbiAgICAgICAgaXNQcmVGaWx0ZXJlZCA9IF90aGlzJHByb3BzMTEuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgaXNWaXJ0dWFsaXplZCA9IF90aGlzJHByb3BzMTEuaXNWaXJ0dWFsaXplZCxcbiAgICAgICAgdGV4dFdyYXAgPSBfdGhpcyRwcm9wczExLnRleHRXcmFwLFxuICAgICAgICB0cnVuY2F0aW9uUHJvcHMgPSBfdGhpcyRwcm9wczExLnRydW5jYXRpb25Qcm9wcyxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczExLCBfZXhjbHVkZWQzKTtcbiAgICAgIHZhciBoZWlnaHRJc0Z1bGwgPSBmb3JjZWRIZWlnaHQgPT09ICdmdWxsJztcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZUxpc3QnLCBjbGFzc05hbWUpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyLCBudWxsLCBmdW5jdGlvbiAoc3R5bGVzTWVtb2l6ZXIpIHtcbiAgICAgICAgdmFyIHN0eWxlcyA9IHN0eWxlc01lbW9pemVyKGV1aVNlbGVjdGFibGVMaXN0U3R5bGVzKTtcbiAgICAgICAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpU2VsZWN0YWJsZUxpc3QsIGhlaWdodElzRnVsbCAmJiBzdHlsZXMuZnVsbEhlaWdodCwgYm9yZGVyZWQgJiYgc3R5bGVzLmJvcmRlcmVkXTtcbiAgICAgICAgdmFyIGxpc3RDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZUxpc3RfX2xpc3QnLCBzdHlsZXMuZXVpU2VsZWN0YWJsZUxpc3RfX2xpc3QpO1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICAgIH0sIHJlc3QpLCBpc1ZpcnR1YWxpemVkID8gX3RoaXMyLnJlbmRlclZpcnR1YWxpemVkTGlzdChsaXN0Q2xhc3NlcykgOiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGxpc3RDbGFzc2VzLFxuICAgICAgICAgIHN0eWxlOiAhaGVpZ2h0SXNGdWxsID8ge1xuICAgICAgICAgICAgYmxvY2tTaXplOiBmb3JjZWRIZWlnaHRcbiAgICAgICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlZjogX3RoaXMyLnJlbW92ZVNjcm9sbGFibGVUYWJTdG9wXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJ1bFwiLCB7XG4gICAgICAgICAgcmVmOiBfdGhpczIuc2V0TGlzdEJveFJlZlxuICAgICAgICB9LCBfdGhpczIuc3RhdGUub3B0aW9uQXJyYXkubWFwKGZ1bmN0aW9uIChfLCBpbmRleCkge1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChfdGhpczIuTGlzdFJvdywge1xuICAgICAgICAgICAga2V5OiBcIlwiLmNvbmNhdChpbmRleCwgXCItXCIpLmNvbmNhdChfdGhpczIubGlzdFJvd1JlcmVuZGVyKSxcbiAgICAgICAgICAgIGRhdGE6IF90aGlzMi5zdGF0ZS5vcHRpb25BcnJheSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgIH0sIG51bGwpO1xuICAgICAgICB9KSkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xufShDb21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KEV1aVNlbGVjdGFibGVMaXN0LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHJvd0hlaWdodDogMzIsXG4gIHNlYXJjaFZhbHVlOiAnJyxcbiAgaXNWaXJ0dWFsaXplZDogdHJ1ZVxufSk7XG5FdWlTZWxlY3RhYmxlTGlzdC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFRoZSBpbmRleCBvZiB0aGUgb3B0aW9uIHRvIGJlIGhpZ2hsaWdodGVkIGFzIHBzZXVkby1mb2N1c2VkO1xuICAgICAgICogR29vZCBmb3IgdXNlIHdoZW4gb25seSBvbmUgc2VsZWN0aW9uIGlzIGFsbG93ZWQgYW5kIG5lZWRpbmcgdG8gb3BlblxuICAgICAgICogZGlyZWN0bHkgdG8gdGhhdCBvcHRpb25cbiAgICAgICAqL1xuICBhY3RpdmVPcHRpb25JbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAgICAgKiBTaG93IHRoZSBjaGVjay9jcm9zcyBzZWxlY3Rpb24gaW5kaWNhdG9yIGljb25zXG4gICAgICAgKi9cbiAgc2hvd0ljb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2luZ2xlU2VsZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWx3YXlzXCJdKSwgUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqIEFueSBwcm9wcyB0byBzZW5kIHNwZWNpZmljYWxseSB0byB0aGUgcmVhY3Qtd2luZG93IGBGaXhlZFNpemVMaXN0YFxuICAgICAgICovXG4gIHdpbmRvd1Byb3BzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIEFkZHMgYSBib3JkZXIgYXJvdW5kIHRoZSBsaXN0IHRvIGluZGljYXRlIHRoZSBib3VuZHM7XG4gICAgICAgKiBVc2VmdWwgd2hlbiB0aGUgbGlzdCBzY3JvbGxzLCBvdGhlcndpc2UgdXNlIHlvdXIgb3duIGNvbnRhaW5lclxuICAgICAgICovXG4gIGJvcmRlcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBXaGVuIGVuYWJsZWQgYnkgc2V0dGluZyB0byBlaXRoZXIgYHRydWVgIG9yIHBhc3NpbmcgY3VzdG9tIHRleHQsXG4gICAgICAgKiBzaG93cyBhIGhvbGxvdyBiYWRnZSBhcyBhbiBhcHBlbmQgKGZhciByaWdodCkgd2hlbiB0aGUgaXRlbSBpcyBmb2N1c2VkLlxuICAgICAgICogVGhlIGRlZmF1bHQgY29udGVudCB3aGVuIGB0cnVlYCBpcyBgXHUyMUE5IHRvIHNlbGVjdC9kZXNlbGVjdC9pbmNsdWRlL2V4Y2x1ZGVgXG4gICAgICAgKi9cbiAgb25Gb2N1c0JhZGdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBhbnkgc3RyaW5nIGZyb20gb3VyIGljb24gbGlicmFyeVxuICAgICAgICovXG4gICAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gICAgLyoqXG4gICAgICAgKiBUaGUgc2lkZSBvZiB0aGUgYmFkZ2UgdGhlIGljb24gc2hvdWxkIHNpdFxuICAgICAgICovXG4gICAgaWNvblNpZGU6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGVpdGhlciBvdXIgcGFsZXR0ZSBjb2xvcnMgKHByaW1hcnksIHN1Y2Nlc3MgLi5ldGMpIG9yIGEgaGV4IHZhbHVlIGAjRkZGRkZGYCwgYCMwMDBgLlxuICAgICAgICovXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIG92ZXJyaWRlIGFueSBjb2xvciBwYXNzZWQgdGhyb3VnaCB0aGUgYGNvbG9yYCBwcm9wLlxuICAgICAgICovXG4gICAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBQcm9wcyBwYXNzZWQgdG8gdGhlIGNsb3NlIGJ1dHRvbi5cbiAgICAgICAqL1xuICAgIGNsb3NlQnV0dG9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gaWNvbiB3aXRoaW4gdGhlIGJhZGdlXG4gICAgICAgKi9cbiAgICBpY29uT25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIGljb25PbkNsaWNrIGJ1dHRvblxuICAgICAgICovXG4gICAgaWNvbk9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAgICovXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBvbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlbDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogUGFkZGluZyBmb3IgdGhlIGxpc3QgaXRlbXMuXG4gICAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogSG93IHRvIGhhbmRsZSBsb25nIHRleHQgd2l0aGluIHRoZSBpdGVtLlxuICAgICAgICogV3JhcHBpbmcgb25seSB3b3JrcyBpZiB2aXJ0dWFsaXphdGlvbiBpcyBvZmYuXG4gICAgICAgKi9cbiAgdGV4dFdyYXA6IFByb3BUeXBlcy5vbmVPZihbXCJ0cnVuY2F0ZVwiLCBcIndyYXBcIl0pLFxuICAvKipcbiAgICAgICAqIElmIHRleHRXcmFwIGlzIHNldCB0byBgdHJ1bmNhdGVgLCB5b3UgY2FuIHBhc3MgYSBjdXN0b20gdHJ1bmNhdGlvbiBjb25maWd1cmF0aW9uXG4gICAgICAgKiB0aGF0IGFjY2VwdHMgYW55IFtFdWlUZXh0VHJ1bmNhdGVdKC8jL3V0aWxpdGllcy90ZXh0LXRydW5jYXRpb24pIHByb3AgZXhjZXB0IGZvclxuICAgICAgICogYHRleHRgIGFuZCBgY2hpbGRyZW5gLlxuICAgICAgICpcbiAgICAgICAqIE5vdGU6IHdoZW4gc2VhcmNoaW5nLCBjdXN0b20gdHJ1bmNhdGlvbiBwcm9wcyBhcmUgaWdub3JlZC4gVGhlIGhpZ2hsaWdodGVkIHNlYXJjaFxuICAgICAgICogdGV4dCB3aWxsIGFsd2F5cyB0YWtlIHByZWNlZGVuY2UuXG4gICAgICAgKi9cbiAgdHJ1bmNhdGlvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFVzZSB2aXJ0dWFsaXplZCByZW5kZXJpbmcgZm9yIGxpc3QgaXRlbXMgd2l0aCBgcmVhY3Qtd2luZG93YC5cbiAgICAgICAqIFNldHMgZWFjaCByb3cncyBoZWlnaHQgdG8gdGhlIHZhbHVlIG9mIGByb3dIZWlnaHRgLlxuICAgICAgICovXG4gIGlzVmlydHVhbGl6ZWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSkuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgICAqICBUaGUgaGVpZ2h0IG9mIGVhY2ggb3B0aW9uIGluIHBpeGVscy4gRGVmYXVsdHMgdG8gYDMyYC5cbiAgICAgICAqICBIYXMgbm8gZWZmZWN0IGlmIGBpc1ZpcnR1YWxpemVkPWZhbHNlYC5cbiAgICAgICAqL1xuICByb3dIZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgICAqIEFsbCBwb3NzaWJsZSBvcHRpb25zXG4gICAgICovXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBgYm9vbGVhbmAuXG4gICAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGluZGljYXRlIG9iamVjdCBpcyBqdXN0IGEgZ3JvdXBpbmcgbGFiZWwsIG5vdCBhIHNlbGVjdGFibGUgaXRlbVxuICAgICAgICovXG4gICAgaXNHcm91cExhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3RydWVdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIFZpc2libGUgbGFiZWwgb2Ygb3B0aW9uLlxuICAgICAgICogTXVzdCBiZSB1bmlxdWUgYWNyb3NzIGl0ZW1zIGlmIGBrZXlgIGlzIG5vdCBzdXBwbGllZFxuICAgICAgICovXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbGx5IGNoYW5nZSB0aGUgc2VhcmNoYWJsZSB0ZXJtIGJ5IHBhc3NpbmcgYSBkaWZmZXJlbnQgc3RyaW5nIG90aGVyIHRoYW4gdGhlIGBsYWJlbGAuXG4gICAgICAgKiBCZXN0IHVzZWQgd2hlbiBjcmVhdGluZyBhIGN1c3RvbSBgb3B0aW9uUmVuZGVyYCB0byBzZXBhcmF0ZSB0aGUgbGFiZWwgZnJvbSBtZXRhZGF0YSBidXQgYWxsb3dpbmcgdG8gc2VhcmNoIG9uIGJvdGhcbiAgICAgICAqL1xuICAgIHNlYXJjaGFibGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvKipcbiAgICAgICAqIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBpdGVtcy5cbiAgICAgICAqIFdpbGwgYmUgdXNlZCB0byBtYXRjaCBvcHRpb25zIGluc3RlYWQgb2YgYGxhYmVsYFxuICAgICAgICovXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKlxuICAgICAgICogTGVhdmUgYHVuZGVmaW5lZGAgdG8gaW5kaWNhdGUgbm90IHNlbGVjdGVkLiBQYXNzIGEgc3RyaW5nIG9mXG4gICAgICAgKiAnb24nIHRvIGluZGljYXRlIGluY2x1c2lvbiwgJ29mZicgdG8gaW5kaWNhdGUgZXhjbHVzaW9uLFxuICAgICAgICogb3IgJ21peGVkJyB0byBpbmRpY2F0ZSBpbmNsdXNpb24gZm9yIHNvbWUuXG4gICAgICAgKi9cbiAgICBjaGVja2VkOiBQcm9wVHlwZXMuYW55LFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIE5vZGUgdG8gYWRkIGJldHdlZW4gdGhlIHNlbGVjdGlvbiBpY29uIGFuZCB0aGUgbGFiZWxcbiAgICAgICAqL1xuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIC8qKlxuICAgICAgICogTm9kZSB0byBhZGQgdG8gdGhlIGZhciByaWdodCBvZiB0aGUgaXRlbVxuICAgICAgICovXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICByZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogT3B0aW9uIGRhdGEgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBgcmVuZGVyT3B0aW9uc2AgZWxlbWVudC5cbiAgICAgICAqIEJ5cGFzcyBgRXVpU2VsZWN0YWJsZUl0ZW1gIGFuZCBhdm9pZCBET00gYXR0cmlidXRlIHdhcm5pbmdzLlxuICAgICAgICovXG4gICAgZGF0YTogUHJvcFR5cGVzLnNoYXBlKHt9KSxcbiAgICAvKipcbiAgICAgICAqIEhvdyB0byBoYW5kbGUgbG9uZyB0ZXh0IHdpdGhpbiB0aGUgaXRlbS5cbiAgICAgICAqIFdyYXBwaW5nIG9ubHkgd29ya3MgaWYgYGlzVmlydHVhbGl6YXRpb25gIGlzIGZhbHNlLlxuICAgICAgICogQGRlZmF1bHQgJ3RydW5jYXRlJ1xuICAgICAgICovXG4gICAgdGV4dFdyYXA6IFByb3BUeXBlcy5vbmVPZihbXCJ0cnVuY2F0ZVwiLCBcIndyYXBcIl0pLFxuICAgIC8qKlxuICAgICAgICogSWYgdGV4dFdyYXAgaXMgc2V0IHRvIGB0cnVuY2F0ZWAsIHlvdSBjYW4gcGFzcyBhIGN1c3RvbSB0cnVuY2F0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICAgICAqIHRoYXQgYWNjZXB0cyBhbnkgW0V1aVRleHRUcnVuY2F0ZV0oLyMvdXRpbGl0aWVzL3RleHQtdHJ1bmNhdGlvbikgcHJvcCBleGNlcHQgZm9yXG4gICAgICAgKiBgdGV4dGAgYW5kIGBjaGlsZHJlbmAuXG4gICAgICAgKlxuICAgICAgICogTm90ZTogd2hlbiBzZWFyY2hpbmcsIGN1c3RvbSB0cnVuY2F0aW9uIHByb3BzIGFyZSBpZ25vcmVkLiBUaGUgaGlnaGxpZ2h0ZWQgc2VhcmNoXG4gICAgICAgKiB0ZXh0IHdpbGwgYWx3YXlzIHRha2UgcHJlY2VkZW5jZS5cbiAgICAgICAqL1xuICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIGN1c3RvbSB0b29sdGlwIGNvbnRlbnQgZm9yIHRoZSBidXR0b25cbiAgICAgICAqL1xuICAgIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIHByb3BzIHRvIHBhc3MgdG8gdGhlIHVuZGVybHlpbmcgKipbRXVpVG9vbFRpcF0oLyMvZGlzcGxheS90b29sdGlwKSoqXG4gICAgICAgKi9cbiAgICB0b29sVGlwUHJvcHM6IFByb3BUeXBlcy5hbnlcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogRmlsdGVyZWQgb3B0aW9ucyBsaXN0IChpZiBhcHBsaWNhYmxlKVxuICAgICAqL1xuICB2aXNpYmxlT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaGFibGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2hlY2tlZDogUHJvcFR5cGVzLmFueSxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICByZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIGRhdGE6IFByb3BUeXBlcy5zaGFwZSh7fSksXG4gICAgdGV4dFdyYXA6IFByb3BUeXBlcy5vbmVPZihbXCJ0cnVuY2F0ZVwiLCBcIndyYXBcIl0pLFxuICAgIHRydW5jYXRpb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWQpLFxuICAvKipcbiAgICAgKiBTZWFyY2ggdmFsdWUgdG8gaGlnaGxpZ2h0IG9uIHRoZSBvcHRpb24gcmVuZGVyXG4gICAgICovXG4gIHNlYXJjaFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFycmF5IG9mIG9wdGlvbnMgd2l0aCBhbHRlcmVkIGNoZWNrZWQgc3RhdGUsIHRoZSBjbGljay9rZXlib2FyZCBldmVudCxcbiAgICAgKiBhbmQgdGhlIG9wdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgY2xpY2sva2V5Ym9hcmQgZXZlbnRcbiAgICAgKi9cbiAgb25PcHRpb25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAgICogQ3VzdG9tIHJlbmRlciBmb3IgdGhlIGxhYmVsIHBvcnRpb24gb2YgdGhlIG9wdGlvbjtcbiAgICAgKiBUYWtlcyAob3B0aW9uLCBzZWFyY2hWYWx1ZSksIHJldHVybnMgUmVhY3ROb2RlXG4gICAgICovXG4gIHJlbmRlck9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIG1heCBoZWlnaHQgaW4gcGl4ZWxzIG9yIHBhc3MgYGZ1bGxgIHRvIGFsbG93XG4gICAgICogdGhlIHdob2xlIGdyb3VwIHRvIGZpbGwgdGhlIGhlaWdodCBvZiBpdHMgY29udGFpbmVyIGFuZFxuICAgICAqIGFsbG93cyB0aGUgbGlzdCBncm93IGFzIHdlbGxcbiAgICAgKi9cbiAgaGVpZ2h0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbXCJmdWxsXCJdKV0pLFxuICAvKipcbiAgICAgKiBBbGxvdyBjeWNsaW5nIHRocm91Z2ggdGhlIG9uLCBvZmYgYW5kIHVuZGVmaW5lZCBzdGF0ZSBvZiBvcHRpb24uY2hlY2tlZFxuICAgICAqIGFuZCBub3QganVzdCBvbiBhbmQgdW5kZWZpbmVkXG4gICAgICovXG4gIGFsbG93RXhjbHVzaW9uczogUHJvcFR5cGVzLmJvb2wsXG4gIHNlYXJjaGFibGU6IFByb3BUeXBlcy5ib29sLFxuICBpc1ByZUZpbHRlcmVkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhpZ2hsaWdodFNlYXJjaDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICBtYWtlT3B0aW9uSWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGxpc3RJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZXRBY3RpdmVPcHRpb25JbmRleDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJjaGVja2VkXCIsIFwiaXNGb2N1c2VkXCIsIFwic2hvd0ljb25zXCIsIFwicHJlcGVuZFwiLCBcImFwcGVuZFwiLCBcImFsbG93RXhjbHVzaW9uc1wiLCBcIm9uRm9jdXNCYWRnZVwiLCBcInBhZGRpbmdTaXplXCIsIFwicm9sZVwiLCBcInNlYXJjaGFibGVcIiwgXCJ0ZXh0V3JhcFwiLCBcInRvb2xUaXBDb250ZW50XCIsIFwidG9vbFRpcFByb3BzXCIsIFwiYXJpYS1kZXNjcmliZWRieVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdC5yZXR1cm4gJiYgKHUgPSB0LnJldHVybigpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi8uLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUJhZGdlIH0gZnJvbSAnLi4vLi4vYmFkZ2UnO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uLy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IGV1aVNlbGVjdGFibGVMaXN0SXRlbVN0eWxlcyB9IGZyb20gJy4vc2VsZWN0YWJsZV9saXN0X2l0ZW0uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5mdW5jdGlvbiByZXNvbHZlSWNvbkFuZENvbG9yKGNoZWNrZWQpIHtcbiAgc3dpdGNoIChjaGVja2VkKSB7XG4gICAgY2FzZSAnb24nOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvbjogJ2NoZWNrJyxcbiAgICAgICAgY29sb3I6ICd0ZXh0J1xuICAgICAgfTtcbiAgICBjYXNlICdvZmYnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvbjogJ2Nyb3NzJyxcbiAgICAgICAgY29sb3I6ICd0ZXh0J1xuICAgICAgfTtcbiAgICBjYXNlICdtaXhlZCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpY29uOiAnbWludXMnLFxuICAgICAgICBjb2xvcjogJ3RleHQnXG4gICAgICB9O1xuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpY29uOiAnZW1wdHknXG4gICAgICB9O1xuICB9XG59XG5leHBvcnQgdmFyIFBBRERJTkdfU0laRVMgPSBbJ25vbmUnLCAncyddO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlTGlzdEl0ZW0gPSBmdW5jdGlvbiBFdWlTZWxlY3RhYmxlTGlzdEl0ZW0oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBjaGVja2VkID0gX3JlZi5jaGVja2VkLFxuICAgIGlzRm9jdXNlZCA9IF9yZWYuaXNGb2N1c2VkLFxuICAgIF9yZWYkc2hvd0ljb25zID0gX3JlZi5zaG93SWNvbnMsXG4gICAgc2hvd0ljb25zID0gX3JlZiRzaG93SWNvbnMgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHNob3dJY29ucyxcbiAgICBwcmVwZW5kID0gX3JlZi5wcmVwZW5kLFxuICAgIGFwcGVuZCA9IF9yZWYuYXBwZW5kLFxuICAgIGFsbG93RXhjbHVzaW9ucyA9IF9yZWYuYWxsb3dFeGNsdXNpb25zLFxuICAgIF9yZWYkb25Gb2N1c0JhZGdlID0gX3JlZi5vbkZvY3VzQmFkZ2UsXG4gICAgb25Gb2N1c0JhZGdlID0gX3JlZiRvbkZvY3VzQmFkZ2UgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJG9uRm9jdXNCYWRnZSxcbiAgICBfcmVmJHBhZGRpbmdTaXplID0gX3JlZi5wYWRkaW5nU2l6ZSxcbiAgICBwYWRkaW5nU2l6ZSA9IF9yZWYkcGFkZGluZ1NpemUgPT09IHZvaWQgMCA/ICdzJyA6IF9yZWYkcGFkZGluZ1NpemUsXG4gICAgX3JlZiRyb2xlID0gX3JlZi5yb2xlLFxuICAgIHJvbGUgPSBfcmVmJHJvbGUgPT09IHZvaWQgMCA/ICdvcHRpb24nIDogX3JlZiRyb2xlLFxuICAgIHNlYXJjaGFibGUgPSBfcmVmLnNlYXJjaGFibGUsXG4gICAgX3JlZiR0ZXh0V3JhcCA9IF9yZWYudGV4dFdyYXAsXG4gICAgdGV4dFdyYXAgPSBfcmVmJHRleHRXcmFwID09PSB2b2lkIDAgPyAndHJ1bmNhdGUnIDogX3JlZiR0ZXh0V3JhcCxcbiAgICB0b29sVGlwQ29udGVudCA9IF9yZWYudG9vbFRpcENvbnRlbnQsXG4gICAgdG9vbFRpcFByb3BzID0gX3JlZi50b29sVGlwUHJvcHMsXG4gICAgX2FyaWFEZXNjcmliZWRCeSA9IF9yZWZbJ2FyaWEtZGVzY3JpYmVkYnknXSxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZUxpc3RJdGVtJywge1xuICAgICdldWlTZWxlY3RhYmxlTGlzdEl0ZW0taXNGb2N1c2VkJzogaXNGb2N1c2VkXG4gIH0sIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlTZWxlY3RhYmxlTGlzdEl0ZW1TdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlTZWxlY3RhYmxlTGlzdEl0ZW0sIHN0eWxlcy5wYWRkaW5nW3BhZGRpbmdTaXplXV07XG4gIHZhciB0ZXh0U3R5bGVzID0gW3N0eWxlcy5ldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHQsIHN0eWxlcy50ZXh0V3JhcFt0ZXh0V3JhcF1dO1xuICB2YXIgb3B0aW9uSWNvbiA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChzaG93SWNvbnMpIHtcbiAgICAgIHZhciBfcmVzb2x2ZUljb25BbmRDb2xvciA9IHJlc29sdmVJY29uQW5kQ29sb3IoY2hlY2tlZCksXG4gICAgICAgIGljb24gPSBfcmVzb2x2ZUljb25BbmRDb2xvci5pY29uLFxuICAgICAgICBjb2xvciA9IF9yZXNvbHZlSWNvbkFuZENvbG9yLmNvbG9yO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICBjc3M6IHN0eWxlcy5ldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2ljb24sXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2ljb25cIixcbiAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICB0eXBlOiBpY29uXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtzaG93SWNvbnMsIGNoZWNrZWQsIHN0eWxlc10pO1xuICB2YXIgcHJlcGVuZE5vZGUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocHJlcGVuZCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY3NzOiBzdHlsZXMuZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19wcmVwZW5kLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19wcmVwZW5kXCJcbiAgICAgIH0sIHByZXBlbmQpO1xuICAgIH1cbiAgfSwgW3ByZXBlbmQsIHN0eWxlc10pO1xuICB2YXIgb25Gb2N1c0JhZGdlTm9kZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBkZWZhdWx0T25Gb2N1c0JhZGdlUHJvcHMgPSB7XG4gICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlLFxuICAgICAgaWNvblR5cGU6ICdyZXR1cm5LZXknLFxuICAgICAgaWNvblNpZGU6ICdsZWZ0JyxcbiAgICAgIGNvbG9yOiAnaG9sbG93J1xuICAgIH07XG4gICAgaWYgKG9uRm9jdXNCYWRnZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQmFkZ2UsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fb25Gb2N1c0JhZGdlXCJcbiAgICAgIH0sIGRlZmF1bHRPbkZvY3VzQmFkZ2VQcm9wcykpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9uRm9jdXNCYWRnZSAhPT0gJ2Jvb2xlYW4nICYmICEhb25Gb2N1c0JhZGdlKSB7XG4gICAgICB2YXIgX2NoaWxkcmVuID0gb25Gb2N1c0JhZGdlLmNoaWxkcmVuLFxuICAgICAgICBfY2xhc3NOYW1lID0gb25Gb2N1c0JhZGdlLmNsYXNzTmFtZSxcbiAgICAgICAgcmVzdEJhZGdlUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob25Gb2N1c0JhZGdlLCBfZXhjbHVkZWQyKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19vbkZvY3VzQmFkZ2UnLCBfY2xhc3NOYW1lKVxuICAgICAgfSwgZGVmYXVsdE9uRm9jdXNCYWRnZVByb3BzLCByZXN0QmFkZ2VQcm9wcyksIF9jaGlsZHJlbik7XG4gICAgfVxuICB9LCBbb25Gb2N1c0JhZGdlXSk7XG4gIHZhciBzaG93T25Gb2N1c0JhZGdlID0gISEoaXNGb2N1c2VkICYmICFkaXNhYmxlZCAmJiBvbkZvY3VzQmFkZ2VOb2RlKTtcbiAgdmFyIGFwcGVuZE5vZGUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoYXBwZW5kIHx8IHNob3dPbkZvY3VzQmFkZ2UpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNzczogc3R5bGVzLmV1aVNlbGVjdGFibGVMaXN0SXRlbV9fYXBwZW5kLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19hcHBlbmRcIlxuICAgICAgfSwgYXBwZW5kLCBcIiBcIiwgc2hvd09uRm9jdXNCYWRnZSA/IG9uRm9jdXNCYWRnZU5vZGUgOiBudWxsKTtcbiAgICB9XG4gIH0sIFthcHBlbmQsIHNob3dPbkZvY3VzQmFkZ2UsIG9uRm9jdXNCYWRnZU5vZGUsIHN0eWxlc10pO1xuICB2YXIgc2NyZWVuUmVhZGVyVGV4dCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICB2YXIgaW5zdHJ1Y3Rpb25zO1xuICAgIHZhciBzY3JlZW5SZWFkZXJTdHJpbmdzID0ge1xuICAgICAgY2hlY2tlZDoge1xuICAgICAgICBzdGF0ZTogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLmNoZWNrZWRPcHRpb25cIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkNoZWNrZWQgb3B0aW9uLlwiXG4gICAgICAgIH0pLFxuICAgICAgICBpbnN0cnVjdGlvbnM6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5jaGVja09wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gY2hlY2sgdGhpcyBvcHRpb24sIHByZXNzIEVudGVyLlwiXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgdW5jaGVja2VkOiB7XG4gICAgICAgIGluc3RydWN0aW9uczogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLnVuY2hlY2tPcHRpb25JbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIHVuY2hlY2sgdGhpcyBvcHRpb24sIHByZXNzIEVudGVyLlwiXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgZXhjbHVkZWQ6IHtcbiAgICAgICAgc3RhdGU6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5leGNsdWRlZE9wdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiRXhjbHVkZWQgb3B0aW9uLlwiXG4gICAgICAgIH0pLFxuICAgICAgICBpbnN0cnVjdGlvbnM6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5leGNsdWRlT3B0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUbyBleGNsdWRlIHRoaXMgb3B0aW9uLCBwcmVzcyBFbnRlci5cIlxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIG1peGVkOiB7XG4gICAgICAgIHN0YXRlOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0ubWl4ZWRPcHRpb25cIixcbiAgICAgICAgICBkZWZhdWx0OiBcIk1peGVkIChpbmRldGVybWluYXRlKSBvcHRpb24uXCJcbiAgICAgICAgfSksXG4gICAgICAgIGluc3RydWN0aW9uczogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLm1peGVkT3B0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUbyBjaGVjayB0aGlzIG9wdGlvbiBmb3IgYWxsLCBwcmVzcyBFbnRlciBvbmNlLlwiXG4gICAgICAgIH0pLFxuICAgICAgICB1bmNoZWNrSW5zdHJ1Y3Rpb25zOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0ubWl4ZWRPcHRpb25VbmNoZWNrSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUbyB1bmNoZWNrIHRoaXMgb3B0aW9uIGZvciBhbGwsIHByZXNzIEVudGVyIHR3aWNlLlwiXG4gICAgICAgIH0pLFxuICAgICAgICBleGNsdWRlSW5zdHJ1Y3Rpb25zOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0ubWl4ZWRPcHRpb25FeGNsdWRlSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUbyBleGNsdWRlIHRoaXMgb3B0aW9uIGZvciBhbGwsIHByZXNzIEVudGVyIHR3aWNlLlwiXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfTtcbiAgICBzd2l0Y2ggKGNoZWNrZWQpIHtcbiAgICAgIGNhc2UgJ29uJzpcbiAgICAgICAgc3RhdGUgPSBzY3JlZW5SZWFkZXJTdHJpbmdzLmNoZWNrZWQuc3RhdGU7XG4gICAgICAgIGluc3RydWN0aW9ucyA9IGFsbG93RXhjbHVzaW9ucyA/IHNjcmVlblJlYWRlclN0cmluZ3MuZXhjbHVkZWQuaW5zdHJ1Y3Rpb25zIDogc2VhcmNoYWJsZSA/IHNjcmVlblJlYWRlclN0cmluZ3MudW5jaGVja2VkLmluc3RydWN0aW9ucyA6IHVuZGVmaW5lZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvZmYnOlxuICAgICAgICBzdGF0ZSA9IHNjcmVlblJlYWRlclN0cmluZ3MuZXhjbHVkZWQuc3RhdGU7XG4gICAgICAgIGluc3RydWN0aW9ucyA9IHNjcmVlblJlYWRlclN0cmluZ3MudW5jaGVja2VkLmluc3RydWN0aW9ucztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtaXhlZCc6XG4gICAgICAgIHN0YXRlID0gc2NyZWVuUmVhZGVyU3RyaW5ncy5taXhlZC5zdGF0ZTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zID0gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgc2NyZWVuUmVhZGVyU3RyaW5ncy5taXhlZC5pbnN0cnVjdGlvbnMsICcgJywgYWxsb3dFeGNsdXNpb25zID8gc2NyZWVuUmVhZGVyU3RyaW5ncy5taXhlZC5leGNsdWRlSW5zdHJ1Y3Rpb25zIDogc2NyZWVuUmVhZGVyU3RyaW5ncy5taXhlZC51bmNoZWNrSW5zdHJ1Y3Rpb25zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGluc3RydWN0aW9ucyA9IGFsbG93RXhjbHVzaW9ucyB8fCBzZWFyY2hhYmxlID8gc2NyZWVuUmVhZGVyU3RyaW5ncy5jaGVja2VkLmluc3RydWN0aW9ucyA6IHVuZGVmaW5lZDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZSB8fCBpbnN0cnVjdGlvbnMgPyBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgbnVsbCwgc3RhdGUgfHwgaW5zdHJ1Y3Rpb25zID8gJy4gJyA6IG51bGwsIHN0YXRlLCBzdGF0ZSAmJiBpbnN0cnVjdGlvbnMgPyAnICcgOiBudWxsLCBpbnN0cnVjdGlvbnMpKSA6IG51bGw7XG4gIH0sIFtjaGVja2VkLCBzZWFyY2hhYmxlLCBhbGxvd0V4Y2x1c2lvbnNdKTtcblxuICAvLyBhcmlhLWNoZWNrZWQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIHJvbGU9XCJjaGVja2JveFwiIGJ1dFxuICAvLyB0aGUgTUROIGRvY3VtZW50YXRpb24gbGlzdHMgaXQgYXMgYSBwb3NzaWJpbGl0eSBmb3Igcm9sZT1cIm9wdGlvblwiLlxuICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQWNjZXNzaWJpbGl0eS9BUklBL0F0dHJpYnV0ZXMvYXJpYS1jaGVja2VkXG4gIC8vIGFuZCBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BY2Nlc3NpYmlsaXR5L0FSSUEvUm9sZXMvb3B0aW9uX3JvbGVcbiAgdmFyIGFyaWFDaGVja2VkID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJvbGVzVGhhdENhbkJlTWl4ZWQgPSBbJ29wdGlvbicsICdjaGVja2JveCcsICdtZW51aXRlbWNoZWNrYm94J107XG4gICAgdmFyIHJvbGVzVGhhdENhbkJlQ2hlY2tlZCA9IFtdLmNvbmNhdChyb2xlc1RoYXRDYW5CZU1peGVkLCBbJ3JhZGlvJywgJ21lbnVpdGVtcmFkaW8nLCAnc3dpdGNoJ10pO1xuICAgIGlmICghcm9sZXNUaGF0Q2FuQmVDaGVja2VkLmluY2x1ZGVzKHJvbGUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN3aXRjaCAoY2hlY2tlZCkge1xuICAgICAgY2FzZSAnb24nOlxuICAgICAgY2FzZSAnb2ZmJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdtaXhlZCc6XG4gICAgICAgIGlmIChyb2xlc1RoYXRDYW5CZU1peGVkLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgcmV0dXJuICdtaXhlZCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCBbcm9sZSwgY2hlY2tlZF0pO1xuICB2YXIgaGFzVG9vbFRpcCA9ICEhdG9vbFRpcENvbnRlbnQgJiYgIWRpc2FibGVkO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgdG9vbHRpcFJlZiA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0VG9vbHRpcFJlZiA9IF91c2VTdGF0ZTJbMV07IC8vIE5lZWRzIHRvIGJlIHN0YXRlIGFuZCBub3QgYSByZWYgdG8gdHJpZ2dlciB1c2VFZmZlY3RcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShfYXJpYURlc2NyaWJlZEJ5KSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgYXJpYURlc2NyaWJlZEJ5ID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRBcmlhRGVzY3JpYmVkQnkgPSBfdXNlU3RhdGU0WzFdO1xuXG4gIC8vIE1hbnVhbGx5IHRyaWdnZXIgdGhlIHRvb2x0aXAgb24ga2V5Ym9hcmQgZm9jdXNcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRvb2x0aXBSZWYpIHJldHVybjtcbiAgICBpZiAoaXNGb2N1c2VkKSB7XG4gICAgICB0b29sdGlwUmVmLnNob3dUb29sVGlwKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvb2x0aXBSZWYuaGlkZVRvb2xUaXAoKTtcbiAgICB9XG4gIH0sIFtpc0ZvY3VzZWQsIHRvb2x0aXBSZWZdKTtcblxuICAvLyBNYW51YWxseSBzZXQgdGhlIGBhcmlhLWRlc2NyaWJlZGJ5YCBpZCBvbiB0aGUgPGxpPiB3cmFwcGVyXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRvb2x0aXBSZWYpIHtcbiAgICAgIHZhciB0b29sdGlwSWQgPSB0b29sdGlwUmVmLnN0YXRlLmlkO1xuICAgICAgc2V0QXJpYURlc2NyaWJlZEJ5KGNsYXNzTmFtZXModG9vbHRpcElkLCBfYXJpYURlc2NyaWJlZEJ5KSk7XG4gICAgfVxuICB9LCBbdG9vbHRpcFJlZiwgX2FyaWFEZXNjcmliZWRCeV0pO1xuICB2YXIgY29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjc3M6IHN0eWxlcy5ldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2NvbnRlbnQsXG4gICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fY29udGVudFwiXG4gIH0sIG9wdGlvbkljb24sIHByZXBlbmROb2RlLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY3NzOiB0ZXh0U3R5bGVzLFxuICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHRcIlxuICB9LCBjaGlsZHJlbiwgc2NyZWVuUmVhZGVyVGV4dCksIGFwcGVuZE5vZGUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIF9leHRlbmRzKHtcbiAgICByb2xlOiByb2xlLFxuICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCxcbiAgICBcImFyaWEtY2hlY2tlZFwiOiBhcmlhQ2hlY2tlZCAvLyBXaGV0aGVyIHRoZSBpdGVtIGlzIFwiY2hlY2tlZFwiXG4gICAgLFxuICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAhZGlzYWJsZWQgJiYgaXNGb2N1c2VkIC8vIFdoZXRoZXIgdGhlIGl0ZW0gaGFzIGtleWJvYXJkIGZvY3VzIHBlciBXMyBzcGVjXG4gICAgLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0LCB7XG4gICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGFyaWFEZXNjcmliZWRCeVxuICB9KSwgaGFzVG9vbFRpcCA/IF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwgX2V4dGVuZHMoe1xuICAgIHJlZjogc2V0VG9vbHRpcFJlZixcbiAgICBjb250ZW50OiB0b29sVGlwQ29udGVudCxcbiAgICBhbmNob3JDbGFzc05hbWU6IFwiZXVpLWZ1bGxXaWR0aFwiLFxuICAgIHBvc2l0aW9uOiBcImxlZnRcIlxuICB9LCB0b29sVGlwUHJvcHMpLCBjb250ZW50KSA6IGNvbnRlbnQpO1xufTtcbkV1aVNlbGVjdGFibGVMaXN0SXRlbS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAgICogQXBwbGllcyBhbiBpY29uIGFuZCB2aXN1YWwgc3R5bGluZyB0byBhY3RpdmF0ZWQgaXRlbXNcbiAgICAgICAqL1xuICBjaGVja2VkOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIFNob3dzIGljb25zIGJhc2VkIG9uIGBjaGVja2VkYCB0eXBlXG4gICAgICAgKi9cbiAgc2hvd0ljb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBIaWdobGlnaHRzIHRoZSBpdGVtIGZvciBwc2V1ZG8gZm9jdXNcbiAgICAgICAqL1xuICBpc0ZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICBhbGxvd0V4Y2x1c2lvbnM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgICAqIFdoZW4gZW5hYmxlZCBieSBzZXR0aW5nIHRvIGVpdGhlciBgdHJ1ZWAgb3IgcGFzc2luZyBjdXN0b20gYSBjdXN0b20gYmFkZ2UsXG4gICAgICAgKiBzaG93cyBhIGhvbGxvdyBiYWRnZSBhcyBhbiBhcHBlbmQgKGZhciByaWdodCkgd2hlbiB0aGUgaXRlbSBpcyBmb2N1c2VkLlxuICAgICAgICogVGhlIGRlZmF1bHQgY29udGVudCB3aGVuIGB0cnVlYCBpcyBgXHUyMUE5IHRvIHNlbGVjdC9kZXNlbGVjdC9pbmNsdWRlL2V4Y2x1ZGVgXG4gICAgICAgKi9cbiAgb25Gb2N1c0JhZGdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBhbnkgc3RyaW5nIGZyb20gb3VyIGljb24gbGlicmFyeVxuICAgICAgICovXG4gICAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gICAgLyoqXG4gICAgICAgKiBUaGUgc2lkZSBvZiB0aGUgYmFkZ2UgdGhlIGljb24gc2hvdWxkIHNpdFxuICAgICAgICovXG4gICAgaWNvblNpZGU6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGVpdGhlciBvdXIgcGFsZXR0ZSBjb2xvcnMgKHByaW1hcnksIHN1Y2Nlc3MgLi5ldGMpIG9yIGEgaGV4IHZhbHVlIGAjRkZGRkZGYCwgYCMwMDBgLlxuICAgICAgICovXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIG92ZXJyaWRlIGFueSBjb2xvciBwYXNzZWQgdGhyb3VnaCB0aGUgYGNvbG9yYCBwcm9wLlxuICAgICAgICovXG4gICAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBQcm9wcyBwYXNzZWQgdG8gdGhlIGNsb3NlIGJ1dHRvbi5cbiAgICAgICAqL1xuICAgIGNsb3NlQnV0dG9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gaWNvbiB3aXRoaW4gdGhlIGJhZGdlXG4gICAgICAgKi9cbiAgICBpY29uT25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIGljb25PbkNsaWNrIGJ1dHRvblxuICAgICAgICovXG4gICAgaWNvbk9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAgICovXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBvbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlbDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAgICogUGFkZGluZyBmb3IgdGhlIGxpc3QgaXRlbXMuXG4gICAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAgICogV2hldGhlciB0aGUgYEV1aVNlbGVjdGFibGVgIGluc3RhbmNlIGlzIHNlYXJjaGFibGUuXG4gICAgICAgKiBXaGVuIHRydWUsIHRoZSBTcGFjZSBrZXkgd2lsbCBub3QgdG9nZ2xlIHNlbGVjdGlvbiwgYXMgaXQgd2lsbCB0eXBlIGludG8gdGhlIHNlYXJjaCBib3ggaW5zdGVhZC4gU2NyZWVuIHJlYWRlciBpbnN0cnVjdGlvbnMgd2lsbCBiZSBhZGRlZCBpbnN0cnVjdGluZyB1c2VycyB0byB1c2UgdGhlIEVudGVyIGtleSB0byBzZWxlY3QgaXRlbXMuXG4gICAgICAgKiBXaGVuIGZhbHNlLCB0aGUgU3BhY2Uga2V5IHdpbGwgdG9nZ2xlIGl0ZW0gc2VsZWN0aW9uLiBObyBleHRyYSBzY3JlZW4gcmVhZGVyIGluc3RydWN0aW9ucyB3aWxsIGJlIGFkZGVkLCBhcyBTcGFjZSB0byB0b2dnbGUgaXMgYSBnZW5lcmFsbHkgc3RhbmRhcmQgZm9yIG1vc3Qgc2VsZWN0L2NoZWNrZWQgZWxlbWVudHMuXG4gICAgICAgKi9cbiAgc2VhcmNoYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAgICogQXR0cmlidXRlIGFwcGxpZWQgdGhlIG9wdGlvbiBgPGxpPmAuXG4gICAgICAgKiBJZiBzZXQgdG8gYSByb2xlIHRoYXQgYWxsb3dzIFthcmlhLWNoZWNrZWRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FjY2Vzc2liaWxpdHkvQVJJQS9BdHRyaWJ1dGVzL2FyaWEtY2hlY2tlZCksXG4gICAgICAgKiBgYXJpYS1jaGVja2VkYCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlZC5cbiAgICAgICAqL1xuICByb2xlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIEhvdyB0byBoYW5kbGUgbG9uZyB0ZXh0IHdpdGhpbiB0aGUgaXRlbS5cbiAgICAgICAqIFdyYXBwaW5nIG9ubHkgd29ya3MgaWYgdmlydHVhbGl6YXRpb24gaXMgb2ZmLlxuICAgICAgICovXG4gIHRleHRXcmFwOiBQcm9wVHlwZXMub25lT2YoW1widHJ1bmNhdGVcIiwgXCJ3cmFwXCJdKSxcbiAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBjdXN0b20gdG9vbHRpcCBjb250ZW50IGZvciB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICAgICAqIE9wdGlvbmFsIHByb3BzIHRvIHBhc3MgdG8gdGhlIHVuZGVybHlpbmcgKipbRXVpVG9vbFRpcF0oLyMvZGlzcGxheS90b29sdGlwKSoqXG4gICAgICAgKi9cbiAgdG9vbFRpcFByb3BzOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUZvbnRTaXplLCBldWlUZXh0VHJ1bmNhdGUsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aVNlbGVjdGFibGVMaXN0SXRlbVZhcmlhYmxlcyA9IGZ1bmN0aW9uIGV1aVNlbGVjdGFibGVMaXN0SXRlbVZhcmlhYmxlcyhfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgdmFyIGxpZ2h0ZXJCb3JkZXIgPSB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5ib3JkZXIuY29sb3IsIDAuNCk7XG4gIHJldHVybiB7XG4gICAgYm9yZGVyOiBcIlwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgc29saWQgXCIpLmNvbmNhdChsaWdodGVyQm9yZGVyKSxcbiAgICBwYWRkaW5nSG9yaXpvbnRhbDogZXVpVGhlbWUuc2l6ZS5tLFxuICAgIHBhZGRpbmdWZXJ0aWNhbDogZXVpVGhlbWUuc2l6ZS54c1xuICB9O1xufTtcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFybmVucnQtZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXJuZW5ydC1ldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHRcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOmV1aVNlbGVjdGFibGVMaXN0SXRlbV9fdGV4dDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlTZWxlY3RhYmxlTGlzdEl0ZW1TdHlsZXMgPSBmdW5jdGlvbiBldWlTZWxlY3RhYmxlTGlzdEl0ZW1TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIF9ldWlTZWxlY3RhYmxlTGlzdEl0ZSA9IGV1aVNlbGVjdGFibGVMaXN0SXRlbVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIGJvcmRlciA9IF9ldWlTZWxlY3RhYmxlTGlzdEl0ZS5ib3JkZXIsXG4gICAgcGFkZGluZ0hvcml6b250YWwgPSBfZXVpU2VsZWN0YWJsZUxpc3RJdGUucGFkZGluZ0hvcml6b250YWwsXG4gICAgcGFkZGluZ1ZlcnRpY2FsID0gX2V1aVNlbGVjdGFibGVMaXN0SXRlLnBhZGRpbmdWZXJ0aWNhbDtcbiAgcmV0dXJuIHtcbiAgICBldWlTZWxlY3RhYmxlTGlzdEl0ZW06IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmlubGluZS1mbGV4O1wiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIGxpbmUtaGVpZ2h0OlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdtJykubGluZUhlaWdodCwgXCI7Zm9udC1zaXplOlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJykuZm9udFNpemUsIFwiO3RleHQtYWxpZ246c3RhcnQ7Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuOyY6bm90KDpsYXN0LW9mLXR5cGUpe1wiLCBsb2dpY2FsQ1NTKCdib3JkZXItYm90dG9tJywgYm9yZGVyKSwgXCI7fSZbYXJpYS1kaXNhYmxlZD0ndHJ1ZSdde2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGlzYWJsZWRUZXh0LCBcIjtjdXJzb3I6bm90LWFsbG93ZWQ7fSY6aG92ZXIsJi5ldWlTZWxlY3RhYmxlTGlzdEl0ZW0taXNGb2N1c2VkeyY6bm90KFthcmlhLWRpc2FibGVkPSd0cnVlJ10pe2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQsIFwiO2JhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmZvY3VzLmJhY2tncm91bmRDb2xvciwgXCI7LmV1aVNlbGVjdGFibGVMaXN0SXRlbV9fdGV4dHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO319fTtsYWJlbDpldWlTZWxlY3RhYmxlTGlzdEl0ZW07XCIpLFxuICAgIHBhZGRpbmc6IHtcbiAgICAgIG5vbmU6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6bm9uZTtcIiksXG4gICAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBwYWRkaW5nVmVydGljYWwpLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgcGFkZGluZ0hvcml6b250YWwpLCBcIjs7bGFiZWw6cztcIilcbiAgICB9LFxuICAgIC8vIENoaWxkIGVsZW1lbnRzXG5cbiAgICBldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2NvbnRlbnQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIiBkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyOztsYWJlbDpldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2NvbnRlbnQ7XCIpLFxuICAgIGV1aVNlbGVjdGFibGVMaXN0SXRlbV9fdGV4dDogX3JlZixcbiAgICB0ZXh0V3JhcDoge1xuICAgICAgdHJ1bmNhdGU6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dFRydW5jYXRlKCksIFwiO2xhYmVsOnRydW5jYXRlO1wiKSxcbiAgICAgIHdyYXA6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6d3JhcDtcIilcbiAgICB9LFxuICAgIGV1aVNlbGVjdGFibGVMaXN0SXRlbV9fcHJlcGVuZDogLyojX19QVVJFX18qL2NzcyhcImZsZXgtc2hyaW5rOjA7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1yaWdodCcsIHBhZGRpbmdIb3Jpem9udGFsKSwgXCI7O2xhYmVsOmV1aVNlbGVjdGFibGVMaXN0SXRlbV9fcHJlcGVuZDtcIiksXG4gICAgZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19hcHBlbmQ6IC8qI19fUFVSRV9fKi9jc3MoXCJmbGV4LXNocmluazowO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tbGVmdCcsIHBhZGRpbmdIb3Jpem9udGFsKSwgXCI7O2xhYmVsOmV1aVNlbGVjdGFibGVMaXN0SXRlbV9fYXBwZW5kO1wiKSxcbiAgICBnZXQgZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19pY29uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19wcmVwZW5kO1xuICAgIH1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0Jztcbi8vIC5ldWlTZWxlY3RhYmxlTGlzdF9fbGlzdCByZXF1aXJlcyBhIHN0YXRpYyB2YW5pbGxhIGNsYXNzTmFtZVxuLy8gYXMgaXQncyBwYXNzZWQgZG93biB0byByZWFjdC13aW5kb3cncyB2aXJ0dWFsaXphdGlvbiBsaWJyYXJ5XG5pbXBvcnQgeyBjc3MgYXMgY2xhc3NOYW1lQ3NzIH0gZnJvbSAnQGVtb3Rpb24vY3NzJztcbmltcG9ydCB7IGV1aUZvY3VzUmluZywgZXVpWVNjcm9sbFdpdGhTaGFkb3dzLCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpVGl0bGUgfSBmcm9tICcuLi8uLi90aXRsZS90aXRsZS5zdHlsZXMnO1xuaW1wb3J0IHsgZXVpU2VsZWN0YWJsZUxpc3RJdGVtVmFyaWFibGVzIH0gZnJvbSAnLi9zZWxlY3RhYmxlX2xpc3RfaXRlbS5zdHlsZXMnO1xudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWdpdThqNS1mdWxsSGVpZ2h0XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpmdWxsSGVpZ2h0O1wiXG59IDoge1xuICBuYW1lOiBcIjFnaXU4ajUtZnVsbEhlaWdodFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6ZnVsbEhlaWdodDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlTZWxlY3RhYmxlTGlzdFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNlbGVjdGFibGVMaXN0U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBpdGVtVmFycyA9IGV1aVNlbGVjdGFibGVMaXN0SXRlbVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIGV1aVNlbGVjdGFibGVMaXN0OiAvKiNfX1BVUkVfXyovY3NzKFwiJjpoYXMoOmZvY3VzLXZpc2libGUpe1wiLCBldWlGb2N1c1JpbmcoZXVpVGhlbWVDb250ZXh0LCAnb3V0c2V0JyksIFwiO307bGFiZWw6ZXVpU2VsZWN0YWJsZUxpc3Q7XCIpLFxuICAgIGZ1bGxIZWlnaHQ6IF9yZWYsXG4gICAgYm9yZGVyZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJvdmVyZmxvdzpoaWRkZW47Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIudGhpbiwgXCI7Ym9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiOztsYWJlbDpib3JkZXJlZDtcIiksXG4gICAgZXVpU2VsZWN0YWJsZUxpc3RfX2xpc3Q6IC8qI19fUFVSRV9fKi9jbGFzc05hbWVDc3MoZXVpWVNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lQ29udGV4dCksIFwiICY6Zm9jdXMsJj51bDpmb2N1c3tvdXRsaW5lOm5vbmU7fTtsYWJlbDpldWlTZWxlY3RhYmxlTGlzdF9fbGlzdDtcIiksXG4gICAgZXVpU2VsZWN0YWJsZUxpc3RfX2dyb3VwTGFiZWw6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHh4cycpLCBcIiBkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO1wiLCBsb2dpY2FsQ1NTKCdib3JkZXItYm90dG9tJywgaXRlbVZhcnMuYm9yZGVyKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBpdGVtVmFycy5wYWRkaW5nVmVydGljYWwpLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgaXRlbVZhcnMucGFkZGluZ0hvcml6b250YWwpLCBcIjs7bGFiZWw6ZXVpU2VsZWN0YWJsZUxpc3RfX2dyb3VwTGFiZWw7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlTZWxlY3RhYmxlU3R5bGVzID0ge1xuICBldWlTZWxlY3RhYmxlOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gICAgbmFtZTogXCIxc2QwcXYtZXVpU2VsZWN0YWJsZVwiLFxuICAgIHN0eWxlczogXCJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2xhYmVsOmV1aVNlbGVjdGFibGU7XCJcbiAgfSA6IHtcbiAgICBuYW1lOiBcIjFzZDBxdi1ldWlTZWxlY3RhYmxlXCIsXG4gICAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bGFiZWw6ZXVpU2VsZWN0YWJsZTtcIixcbiAgICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbiAgfSxcbiAgZnVsbEhlaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdoZWlnaHQnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbEhlaWdodDtcIilcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXByZXNzZWRcIiwgXCJ0YWJsZUxheW91dFwiLCBcInJlc3BvbnNpdmVCcmVha3BvaW50XCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUlzRXVpVGFibGVSZXNwb25zaXZlLCBFdWlUYWJsZUlzUmVzcG9uc2l2ZUNvbnRleHQgfSBmcm9tICcuL21vYmlsZS9yZXNwb25zaXZlX2NvbnRleHQnO1xuaW1wb3J0IHsgZXVpVGFibGVTdHlsZXMgfSBmcm9tICcuL3RhYmxlLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZSA9IGZ1bmN0aW9uIEV1aVRhYmxlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBjb21wcmVzc2VkID0gX3JlZi5jb21wcmVzc2VkLFxuICAgIF9yZWYkdGFibGVMYXlvdXQgPSBfcmVmLnRhYmxlTGF5b3V0LFxuICAgIHRhYmxlTGF5b3V0ID0gX3JlZiR0YWJsZUxheW91dCA9PT0gdm9pZCAwID8gJ2ZpeGVkJyA6IF9yZWYkdGFibGVMYXlvdXQsXG4gICAgcmVzcG9uc2l2ZUJyZWFrcG9pbnQgPSBfcmVmLnJlc3BvbnNpdmVCcmVha3BvaW50LFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IHVzZUlzRXVpVGFibGVSZXNwb25zaXZlKHJlc3BvbnNpdmVCcmVha3BvaW50KTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZScsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJsZVN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRhYmxlLCBzdHlsZXMubGF5b3V0W3RhYmxlTGF5b3V0XSwgKCFjb21wcmVzc2VkIHx8IGlzUmVzcG9uc2l2ZSkgJiYgc3R5bGVzLnVuY29tcHJlc3NlZCwgY29tcHJlc3NlZCAmJiAhaXNSZXNwb25zaXZlICYmIHN0eWxlcy5jb21wcmVzc2VkLCBpc1Jlc3BvbnNpdmUgPyBzdHlsZXMubW9iaWxlIDogc3R5bGVzLmRlc2t0b3BdO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRhYmxlXCIsIF9leHRlbmRzKHtcbiAgICB0YWJJbmRleDogLTEsXG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlSXNSZXNwb25zaXZlQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBpc1Jlc3BvbnNpdmVcbiAgfSwgY2hpbGRyZW4pKTtcbn07XG5FdWlUYWJsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBOYW1lZCBicmVha3BvaW50LiBCZWxvdyB0aGlzIHNpemUsIHRoZSB0YWJsZSB3aWxsIGNvbGxhcHNlXG4gICAgICogaW50byByZXNwb25zaXZlIGNhcmRzLlxuICAgICAqXG4gICAgICogUGFzcyBgZmFsc2VgIHRvIG5ldmVyIGNvbGxhcHNlIHRvIGEgbW9iaWxlIHZpZXcsIG9yIGludmVyc2VseSxcbiAgICAgKiBgdHJ1ZWAgdG8gYWx3YXlzIHJlbmRlciBtb2JpbGUtZnJpZW5kbHkgY2FyZHMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBtXG4gICAgICovXG4gIHJlc3BvbnNpdmVCcmVha3BvaW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogU2V0cyB0aGUgdGFibGUtbGF5b3V0IENTUyBwcm9wZXJ0eVxuICAgICAqL1xuICB0YWJsZUxheW91dDogUHJvcFR5cGVzLm9uZU9mKFtcImZpeGVkXCIsIFwiYXV0b1wiXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSXNXaXRoaW5NaW5CcmVha3BvaW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlQ29tcG9uZW50RGVmYXVsdHMgfSBmcm9tICcuLi8uLi9wcm92aWRlci9jb21wb25lbnRfZGVmYXVsdHMnO1xuZXhwb3J0IHZhciBERUZBVUxUX1RBQkxFX0JSRUFLUE9JTlQgPSAnbSc7XG5cbi8qKlxuICogVXNlZCBieSBwYXJlbnQvdG9wLWxldmVsIHRhYmxlIGNvbXBvbmVudHMgdG8gZGV0ZXJtaW5lIGlzUmVzcG9uc2l2ZSBzdGF0ZVxuICogYmFzZWQgb24gdGhlIHBhc3NlZCBicmVha3BvaW50XG4gKi9cbmV4cG9ydCB2YXIgdXNlSXNFdWlUYWJsZVJlc3BvbnNpdmUgPSBmdW5jdGlvbiB1c2VJc0V1aVRhYmxlUmVzcG9uc2l2ZShjb21wb25lbnRQcm9wKSB7XG4gIHZhciBfdXNlQ29tcG9uZW50RGVmYXVsdHMsIF9yZWY7XG4gIHZhciBjb21wb25lbnREZWZhdWx0ID0gKF91c2VDb21wb25lbnREZWZhdWx0cyA9IHVzZUNvbXBvbmVudERlZmF1bHRzKCkuRXVpVGFibGUpID09PSBudWxsIHx8IF91c2VDb21wb25lbnREZWZhdWx0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3VzZUNvbXBvbmVudERlZmF1bHRzLnJlc3BvbnNpdmVCcmVha3BvaW50O1xuICB2YXIgYnJlYWtwb2ludCA9IChfcmVmID0gY29tcG9uZW50UHJvcCAhPT0gbnVsbCAmJiBjb21wb25lbnRQcm9wICE9PSB2b2lkIDAgPyBjb21wb25lbnRQcm9wIDogY29tcG9uZW50RGVmYXVsdCkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IERFRkFVTFRfVEFCTEVfQlJFQUtQT0lOVDtcbiAgdmFyIGlzQm9vbGVhbiA9IHR5cGVvZiBicmVha3BvaW50ID09PSAnYm9vbGVhbic7XG5cbiAgLy8gTm90ZTogd2UncmUgdXNpbmcgYCF1c2VJc1dpdGhpbk1pbkJyZWFrcG9pbnRgIGhlcmUgaW5zdGVhZCBvZiBgdXNlSXNXaXRoaW5NYXhCcmVha3BvaW50YFxuICAvLyBiZWNhdXNlIGl0IG1vcmUgYWNjdXJhdGVseSByZWZsZWN0cyB0aGUgc2luZ2xlIGJyZWFrcG9pbnQgYXQgd2hpY2ggdGFibGVzIGNvbGxhcHNlXG4gIHZhciBpc1Jlc3BvbnNpdmUgPSAhdXNlSXNXaXRoaW5NaW5CcmVha3BvaW50KGlzQm9vbGVhbiA/ICcnIDogYnJlYWtwb2ludCk7XG4gIHJldHVybiBpc0Jvb2xlYW4gPyBicmVha3BvaW50IDogaXNSZXNwb25zaXZlO1xufTtcblxuLyoqXG4gKiBDb250ZXh0IHNldCBieSBwYXJlbnQgdGFibGUgY29tcG9uZW50c1xuICogSG9vayB1c2VkIGJ5IGNlbGxzIHRvIGZldGNoIHBhcmVudCBpc1Jlc3BvbnNpdmUgc3RhdGVcbiAqL1xuZXhwb3J0IHZhciBFdWlUYWJsZUlzUmVzcG9uc2l2ZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChmYWxzZSk7XG5leHBvcnQgdmFyIHVzZUV1aVRhYmxlSXNSZXNwb25zaXZlID0gZnVuY3Rpb24gdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUoKSB7XG4gIHJldHVybiB1c2VDb250ZXh0KEV1aVRhYmxlSXNSZXNwb25zaXZlQ29udGV4dCk7XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSwgZXVpTnVtYmVyRm9ybWF0LCBsb2dpY2FsQ1NTLCBtYXRoV2l0aFVuaXRzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlUYWJsZVZhcmlhYmxlcyA9IGZ1bmN0aW9uIGV1aVRhYmxlVmFyaWFibGVzKF9yZWY0KSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY0LmV1aVRoZW1lO1xuICB2YXIgY2VsbENvbnRlbnRQYWRkaW5nID0gZXVpVGhlbWUuc2l6ZS5zO1xuICB2YXIgY29tcHJlc3NlZENlbGxDb250ZW50UGFkZGluZyA9IGV1aVRoZW1lLnNpemUueHM7XG4gIHZhciBtb2JpbGVTaXplcyA9IHtcbiAgICBhY3Rpb25zOiB7XG4gICAgICB3aWR0aDogZXVpVGhlbWUuc2l6ZS54eGwsXG4gICAgICBvZmZzZXQ6IG1hdGhXaXRoVW5pdHMoY2VsbENvbnRlbnRQYWRkaW5nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAqIDI7XG4gICAgICB9KVxuICAgIH0sXG4gICAgY2hlY2tib3g6IHtcbiAgICAgIHdpZHRoOiBtYXRoV2l0aFVuaXRzKFtldWlUaGVtZS5zaXplLnhsLCBldWlUaGVtZS5zaXplLnhzXSwgZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgcmV0dXJuIHggKyB5O1xuICAgICAgfSksXG4gICAgICBvZmZzZXQ6IG1hdGhXaXRoVW5pdHMoY2VsbENvbnRlbnRQYWRkaW5nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAvIDI7XG4gICAgICB9KVxuICAgIH1cbiAgfTtcbiAgdmFyIGNoZWNrYm94U2l6ZSA9IGV1aVRoZW1lLnNpemUueGw7XG4gIHJldHVybiB7XG4gICAgY2VsbENvbnRlbnRQYWRkaW5nOiBjZWxsQ29udGVudFBhZGRpbmcsXG4gICAgY29tcHJlc3NlZENlbGxDb250ZW50UGFkZGluZzogY29tcHJlc3NlZENlbGxDb250ZW50UGFkZGluZyxcbiAgICBtb2JpbGVTaXplczogbW9iaWxlU2l6ZXMsXG4gICAgY2hlY2tib3hTaXplOiBjaGVja2JveFNpemVcbiAgfTtcbn07XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJndDJ2MWMtbW9iaWxlXCIsXG4gIHN0eWxlczogXCJ0aGVhZHtkaXNwbGF5Om5vbmU7fXRmb290e2Rpc3BsYXk6bm9uZTt9O2xhYmVsOm1vYmlsZTtcIlxufSA6IHtcbiAgbmFtZTogXCJndDJ2MWMtbW9iaWxlXCIsXG4gIHN0eWxlczogXCJ0aGVhZHtkaXNwbGF5Om5vbmU7fXRmb290e2Rpc3BsYXk6bm9uZTt9O2xhYmVsOm1vYmlsZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE4dW9samMtYXV0b1wiLFxuICBzdHlsZXM6IFwidGFibGUtbGF5b3V0OmF1dG87bGFiZWw6YXV0bztcIlxufSA6IHtcbiAgbmFtZTogXCIxOHVvbGpjLWF1dG9cIixcbiAgc3R5bGVzOiBcInRhYmxlLWxheW91dDphdXRvO2xhYmVsOmF1dG87XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxZm02emZ3LWZpeGVkXCIsXG4gIHN0eWxlczogXCJ0YWJsZS1sYXlvdXQ6Zml4ZWQ7bGFiZWw6Zml4ZWQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWZtNnpmdy1maXhlZFwiLFxuICBzdHlsZXM6IFwidGFibGUtbGF5b3V0OmZpeGVkO2xhYmVsOmZpeGVkO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVRhYmxlU3R5bGVzID0gZnVuY3Rpb24gZXVpVGFibGVTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIF9ldWlUYWJsZVZhcmlhYmxlcyA9IGV1aVRhYmxlVmFyaWFibGVzKGV1aVRoZW1lQ29udGV4dCksXG4gICAgY2VsbENvbnRlbnRQYWRkaW5nID0gX2V1aVRhYmxlVmFyaWFibGVzLmNlbGxDb250ZW50UGFkZGluZyxcbiAgICBjb21wcmVzc2VkQ2VsbENvbnRlbnRQYWRkaW5nID0gX2V1aVRhYmxlVmFyaWFibGVzLmNvbXByZXNzZWRDZWxsQ29udGVudFBhZGRpbmc7XG4gIHJldHVybiB7XG4gICAgZXVpVGFibGU6IC8qI19fUFVSRV9fKi9jc3MoZXVpTnVtYmVyRm9ybWF0KGV1aVRoZW1lQ29udGV4dCksIFwiIFwiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiIGJvcmRlcjpub25lO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZSwgXCI7O2xhYmVsOmV1aVRhYmxlO1wiKSxcbiAgICBsYXlvdXQ6IHtcbiAgICAgIGZpeGVkOiBfcmVmMyxcbiAgICAgIGF1dG86IF9yZWYyXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiAxLiBUaGUgcGFkZGluZyBvbiB0aGUgYC5ldWlUYWJsZUNlbGxDb250ZW50YCBkaXYgYWxsb3dzIHRoZSBlbGxpcHNpcyB0byBzaG93IGlmIHRoZVxuICAgICAqIGNvbnRlbnQgaXMgdHJ1bmNhdGVkLiBJZiB0aGUgcGFkZGluZyB3YXMgb24gdGhlIGNlbGwsIHRoZSBlbGxpcHNpcyB3b3VsZCBiZSBjcm9wcGVkLlxuICAgICAqIDIuIFRoZSBgOndoZXJlKClgIHNlbGVjdG9yIHNldHMgdGhlIHNwZWNpZmljaXR5IHRvIDAsIGFsbG93aW5nIGNvbnN1bWVycyB0byBtb3JlIGVhc2lseVxuICAgICAqIG92ZXJyaWRlIG91ciBDU1MgaWYgbmVlZGVkXG4gICAgICovXG4gICAgdW5jb21wcmVzc2VkOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC1zaXplOlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJykuZm9udFNpemUsIFwiO2xpbmUtaGVpZ2h0OlwiLCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdtJykubGluZUhlaWdodCwgXCI7JiA6d2hlcmUoLmV1aVRhYmxlQ2VsbENvbnRlbnQpe3BhZGRpbmc6XCIsIGNlbGxDb250ZW50UGFkZGluZywgXCI7fTtsYWJlbDp1bmNvbXByZXNzZWQ7XCIpLFxuICAgIGNvbXByZXNzZWQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSwgXCImIDp3aGVyZSguZXVpVGFibGVDZWxsQ29udGVudCl7cGFkZGluZzpcIiwgY29tcHJlc3NlZENlbGxDb250ZW50UGFkZGluZywgXCI7fTtsYWJlbDpjb21wcmVzc2VkO1wiKSxcbiAgICAvKipcbiAgICAgKiBSZXNwb25zaXZlL21vYmlsZSB2cyBkZXNrdG9wIHN0eWxlc1xuICAgICAqIEluZGl2aWR1YWwgcm93L2NlbGxzIGhhbmRsZSB0aGVpciBvd24gZGVza3RvcCB2cyBtb2JpbGUgc3R5bGVzXG4gICAgICovXG4gICAgZGVza3RvcDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpkZXNrdG9wO1wiKSxcbiAgICBtb2JpbGU6IF9yZWZcbiAgfTtcbn07XG5cbi8vIFRoZSB0YWJsZSBjYXB0aW9uIG5lZWRzIHRvIG5vdCBiZSBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIGJlY2F1c2UgZm9yIHNvbWUgcmVhc29uXG4vLyBpdCBjYXVzZXMgd2VpcmQgbGF5b3V0IGlzc3Vlcy9kb3VibGUgYm9yZGVycyB3aGVuIHVzZWQgd2l0aGluIGEgPHRhYmxlPlxuLy8gQWxzbyBuZWVkcyB0byBiZSAhaW1wb3J0YW50IHRvIG92ZXJyaWRlIGV1aVNjcmVlblJlYWRlck9ubHkgYWJzb2x1dGUgcG9zaXRpb25pbmdcbmV4cG9ydCB2YXIgZXVpVGFibGVDYXB0aW9uU3R5bGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFobmlvOTgtZXVpVGFibGVDYXB0aW9uU3R5bGVzXCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpyZWxhdGl2ZSFpbXBvcnRhbnQ7bGFiZWw6ZXVpVGFibGVDYXB0aW9uU3R5bGVzO1wiXG59IDoge1xuICBuYW1lOiBcIjFobmlvOTgtZXVpVGFibGVDYXB0aW9uU3R5bGVzXCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpyZWxhdGl2ZSFpbXBvcnRhbnQ7bGFiZWw6ZXVpVGFibGVDYXB0aW9uU3R5bGVzO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImJvZHlSZWZcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUJvZHkgPSBmdW5jdGlvbiBFdWlUYWJsZUJvZHkoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGJvZHlSZWYgPSBfcmVmLmJvZHlSZWYsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRib2R5XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICByZWY6IGJvZHlSZWZcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZUJvZHkucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgYm9keVJlZjogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVGb290ZXIgPSBmdW5jdGlvbiBFdWlUYWJsZUZvb3RlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRmb290XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcInRyXCIsIG51bGwsIGNoaWxkcmVuKSk7XG59O1xuRXVpVGFibGVGb290ZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiYWxpZ25cIiwgXCJjbGFzc05hbWVcIiwgXCJ3aWR0aFwiLCBcInN0eWxlXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcywgTEVGVF9BTElHTk1FTlQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyByZXNvbHZlV2lkdGhBc1N0eWxlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBFdWlUYWJsZUNlbGxDb250ZW50IH0gZnJvbSAnLi9fdGFibGVfY2VsbF9jb250ZW50JztcbmltcG9ydCB7IGV1aVRhYmxlSGVhZGVyRm9vdGVyQ2VsbFN0eWxlcyB9IGZyb20gJy4vdGFibGVfY2VsbHNfc2hhcmVkLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUZvb3RlckNlbGwgPSBmdW5jdGlvbiBFdWlUYWJsZUZvb3RlckNlbGwoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIF9yZWYkYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgIGFsaWduID0gX3JlZiRhbGlnbiA9PT0gdm9pZCAwID8gTEVGVF9BTElHTk1FTlQgOiBfcmVmJGFsaWduLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlRm9vdGVyQ2VsbCcsIGNsYXNzTmFtZSk7XG4gIHZhciBpbmxpbmVTdHlsZXMgPSByZXNvbHZlV2lkdGhBc1N0eWxlKHN0eWxlLCB3aWR0aCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJsZUhlYWRlckZvb3RlckNlbGxTdHlsZXMpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRkXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IHN0eWxlcy5ldWlUYWJsZUZvb3RlckNlbGwsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHN0eWxlOiBpbmxpbmVTdHlsZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVDZWxsQ29udGVudCwge1xuICAgIGFsaWduOiBhbGlnbixcbiAgICB0cnVuY2F0ZVRleHQ6IHRydWUsXG4gICAgdGV4dE9ubHk6IHRydWVcbiAgfSwgY2hpbGRyZW4pKTtcbn07XG5FdWlUYWJsZUZvb3RlckNlbGwucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgYWxpZ246IFByb3BUeXBlcy5hbnksXG4gIHdpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZF0pXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wid2lkdGhcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmV4cG9ydCB2YXIgV0FSTklOR19NRVNTQUdFID0gJ1R3byBgd2lkdGhgIHByb3BlcnRpZXMgd2VyZSBwcm92aWRlZC4gUHJvdmlkZSBvbmx5IG9uZSBvZiBgc3R5bGUud2lkdGhgIG9yIGB3aWR0aGAgdG8gYXZvaWQgY29uZmxpY3RzLic7XG5leHBvcnQgdmFyIHJlc29sdmVXaWR0aEFzU3R5bGUgPSBmdW5jdGlvbiByZXNvbHZlV2lkdGhBc1N0eWxlKCkge1xuICB2YXIgc3R5bGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgd2lkdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHN0eWxlV2lkdGggPSBzdHlsZS53aWR0aCxcbiAgICBzdHlsZVJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc3R5bGUsIF9leGNsdWRlZCk7XG4gIHZhciBhdHRyV2lkdGggPSB3aWR0aDtcbiAgaWYgKGF0dHJXaWR0aCAhPSBudWxsICYmICh0eXBlb2YgYXR0cldpZHRoID09PSAnbnVtYmVyJyB8fCAhaXNOYU4oTnVtYmVyKGF0dHJXaWR0aCkpKSAvLyB0cmFuc2Zvcm0ge251bWJlcn0gb3IgdW5pdGxlc3MgJ251bWJlcicgdG8gcHggc3RyaW5nXG4gICkge1xuICAgIGF0dHJXaWR0aCA9IFwiXCIuY29uY2F0KGF0dHJXaWR0aCwgXCJweFwiKTtcbiAgfVxuICBpZiAoc3R5bGVXaWR0aCAmJiBhdHRyV2lkdGgpIHtcbiAgICBjb25zb2xlLndhcm4oV0FSTklOR19NRVNTQUdFKTtcbiAgfVxuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZVJlc3QpLCB7fSwge1xuICAgIHdpZHRoOiBhdHRyV2lkdGggfHwgc3R5bGVXaWR0aFxuICB9KTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImFsaWduXCIsIFwidGV4dE9ubHlcIiwgXCJ0cnVuY2F0ZVRleHRcIiwgXCJoYXNBY3Rpb25zXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IExFRlRfQUxJR05NRU5ULCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IEV1aVRleHRCbG9ja1RydW5jYXRlIH0gZnJvbSAnLi4vdGV4dF90cnVuY2F0ZSc7XG5pbXBvcnQgeyB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSB9IGZyb20gJy4vbW9iaWxlL3Jlc3BvbnNpdmVfY29udGV4dCc7XG5pbXBvcnQgeyBldWlUYWJsZUNlbGxDb250ZW50U3R5bGVzIH0gZnJvbSAnLi9fdGFibGVfY2VsbF9jb250ZW50LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUNlbGxDb250ZW50ID0gZnVuY3Rpb24gRXVpVGFibGVDZWxsQ29udGVudChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiRhbGlnbiA9IF9yZWYuYWxpZ24sXG4gICAgYWxpZ24gPSBfcmVmJGFsaWduID09PSB2b2lkIDAgPyBMRUZUX0FMSUdOTUVOVCA6IF9yZWYkYWxpZ24sXG4gICAgdGV4dE9ubHkgPSBfcmVmLnRleHRPbmx5LFxuICAgIF9yZWYkdHJ1bmNhdGVUZXh0ID0gX3JlZi50cnVuY2F0ZVRleHQsXG4gICAgdHJ1bmNhdGVUZXh0ID0gX3JlZiR0cnVuY2F0ZVRleHQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiR0cnVuY2F0ZVRleHQsXG4gICAgaGFzQWN0aW9ucyA9IF9yZWYuaGFzQWN0aW9ucyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSgpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFibGVDZWxsQ29udGVudFN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRhYmxlQ2VsbENvbnRlbnQsIHN0eWxlc1thbGlnbl0sIHRydW5jYXRlVGV4dCA9PT0gdHJ1ZSAmJiBzdHlsZXMudHJ1bmNhdGVUZXh0LCB0cnVuY2F0ZVRleHQgPT09IGZhbHNlICYmIHN0eWxlcy53cmFwVGV4dF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShoYXNBY3Rpb25zID8gW3N0eWxlcy5oYXNBY3Rpb25zLmFjdGlvbnMsICFpc1Jlc3BvbnNpdmUgJiYgc3R5bGVzLmhhc0FjdGlvbnMuZGVza3RvcCwgaXNSZXNwb25zaXZlICYmIGhhc0FjdGlvbnMgIT09ICdjdXN0b20nICYmIHN0eWxlcy5oYXNBY3Rpb25zLm1vYmlsZV0gOiBbXSkpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlQ2VsbENvbnRlbnQnLCBjbGFzc05hbWUpO1xuICB2YXIgcmVuZGVyZWRDaGlsZHJlbiA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXh0Q2xhc3NlcyA9ICdldWlUYWJsZUNlbGxDb250ZW50X190ZXh0JztcbiAgICBpZiAoaXNPYmplY3QodHJ1bmNhdGVUZXh0KSAmJiB0cnVuY2F0ZVRleHQubGluZXMpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRleHRCbG9ja1RydW5jYXRlLCB7XG4gICAgICAgIGxpbmVzOiB0cnVuY2F0ZVRleHQubGluZXMsXG4gICAgICAgIGNsb25lRWxlbWVudDogdHJ1ZVxuICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IHRleHRDbGFzc2VzXG4gICAgICB9LCBjaGlsZHJlbikpO1xuICAgIH1cbiAgICBpZiAodGV4dE9ubHkgPT09IHRydWUgfHwgdHJ1bmNhdGVUZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IHRleHRDbGFzc2VzXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfSwgW2NoaWxkcmVuLCB0ZXh0T25seSwgdHJ1bmNhdGVUZXh0XSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIHJlbmRlcmVkQ2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlQ2VsbENvbnRlbnQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGxpbmVzOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRcbiAgfSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aVRleHRUcnVuY2F0ZSwgZXVpVGV4dEJyZWFrV29yZCwgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjF0MXB0bGMtbW9iaWxlXCIsXG4gIHN0eWxlczogXCJmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzowO2xhYmVsOm1vYmlsZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxdDFwdGxjLW1vYmlsZVwiLFxuICBzdHlsZXM6IFwiZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MDtsYWJlbDptb2JpbGU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJvOXRkamQtZGVza3RvcFwiLFxuICBzdHlsZXM6IFwiZmxleC13cmFwOndyYXA7bGFiZWw6ZGVza3RvcDtcIlxufSA6IHtcbiAgbmFtZTogXCJvOXRkamQtZGVza3RvcFwiLFxuICBzdHlsZXM6IFwiZmxleC13cmFwOndyYXA7bGFiZWw6ZGVza3RvcDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjF4M3gzamgtY2VudGVyXCIsXG4gIHN0eWxlczogXCJqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyO2xhYmVsOmNlbnRlcjtcIlxufSA6IHtcbiAgbmFtZTogXCIxeDN4M2poLWNlbnRlclwiLFxuICBzdHlsZXM6IFwianVzdGlmeS1jb250ZW50OmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtsYWJlbDpjZW50ZXI7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBfcmVmNCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxdnNpZDJkLWV1aVRhYmxlQ2VsbENvbnRlbnRcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bGFiZWw6ZXVpVGFibGVDZWxsQ29udGVudDtcIlxufSA6IHtcbiAgbmFtZTogXCIxdnNpZDJkLWV1aVRhYmxlQ2VsbENvbnRlbnRcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bGFiZWw6ZXVpVGFibGVDZWxsQ29udGVudDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuZXhwb3J0IHZhciBldWlUYWJsZUNlbGxDb250ZW50U3R5bGVzID0gZnVuY3Rpb24gZXVpVGFibGVDZWxsQ29udGVudFN0eWxlcyhfcmVmNSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNS5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUYWJsZUNlbGxDb250ZW50OiBfcmVmNCxcbiAgICAvLyBBbGlnblxuICAgIGxlZnQ6IG51bGwsXG4gICAgLy8gRGVmYXVsdCwgbm8gQ1NTIG5lZWRlZFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwianVzdGlmeS1jb250ZW50OmZsZXgtZW5kO1wiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdyaWdodCcpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpLFxuICAgIGNlbnRlcjogX3JlZjMsXG4gICAgLy8gVGV4dCB3cmFwcGluZ1xuICAgIHRydW5jYXRlVGV4dDogLyojX19QVVJFX18qL2NzcyhldWlUZXh0VHJ1bmNhdGUoKSwgXCIuZXVpVGFibGVDZWxsQ29udGVudF9fdGV4dHtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt9O2xhYmVsOnRydW5jYXRlVGV4dDtcIiksXG4gICAgd3JhcFRleHQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dEJyZWFrV29yZCgpLCBcIjs7bGFiZWw6d3JhcFRleHQ7XCIpLFxuICAgIC8vIEFjdGlvbiBjZWxsc1xuICAgIGhhc0FjdGlvbnM6IHtcbiAgICAgIGFjdGlvbnM6IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7O2xhYmVsOmFjdGlvbnM7XCIpLFxuICAgICAgZGVza3RvcDogX3JlZjIsXG4gICAgICBtb2JpbGU6IF9yZWZcbiAgICB9XG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IG1ha2VIaWdoQ29udHJhc3RDb2xvciwgdGludE9yU2hhZGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSwgbG9naWNhbENTUywgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVRhYmxlVmFyaWFibGVzIH0gZnJvbSAnLi90YWJsZS5zdHlsZXMnO1xuZXhwb3J0IHZhciBldWlUYWJsZUhlYWRlckZvb3RlckNlbGxTdHlsZXMgPSBmdW5jdGlvbiBldWlUYWJsZUhlYWRlckZvb3RlckNlbGxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuXG4gIC8vIGV1aUZvbnRTaXplIHJldHVybnMgYW4gb2JqZWN0LCBzbyB3ZSBrZWVwIG9iamVjdCBub3RhdGlvbiBoZXJlIHRvIG1lcmdlIGludG8gY3NzYGBcbiAgdmFyIHNoYXJlZFN0eWxlcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSksIHt9LCB7XG4gICAgZm9udFdlaWdodDogZXVpVGhlbWUuZm9udC53ZWlnaHQuc2VtaUJvbGQsXG4gICAgY29sb3I6IGV1aVRoZW1lLmNvbG9ycy50aXRsZSxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJ1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBldWlUYWJsZUhlYWRlckNlbGw6IC8qI19fUFVSRV9fKi9jc3Moc2hhcmVkU3R5bGVzLCBcIjs7bGFiZWw6ZXVpVGFibGVIZWFkZXJDZWxsO1wiKSxcbiAgICBldWlUYWJsZUhlYWRlckNlbGxfX2NvbnRlbnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJnYXA6XCIsIGV1aVRoZW1lLnNpemUueHMsIFwiOztsYWJlbDpldWlUYWJsZUhlYWRlckNlbGxfX2NvbnRlbnQ7XCIpLFxuICAgIGV1aVRhYmxlSGVhZGVyQ2VsbF9fYnV0dG9uOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgZm9udC13ZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0Oy5ldWlUYWJsZVNvcnRJY29uLS1zb3J0YWJsZXtjb2xvcjpcIiwgbWFrZUhpZ2hDb250cmFzdENvbG9yKFxuICAgIC8vIFRpbnQgaXQgYXJiaXRyYXJpbHkgaGlnaCwgdGhlIGNvbnRyYXN0IHV0aWwgd2lsbCB0YWtlIGNhcmUgb2YgbG93ZXJpbmcgYmFjayBkb3duIHRvIFdDQUdcbiAgICB0aW50T3JTaGFkZShldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQsIDAuOSwgY29sb3JNb2RlKSwgMyAvLyAzOjEgcmF0aW8gZnJvbSBodHRwczovL3d3dy53My5vcmcvV0FJL1dDQUcyMi9VbmRlcnN0YW5kaW5nL25vbi10ZXh0LWNvbnRyYXN0Lmh0bWxcbiAgICApKGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlKSwgXCI7fSY6aG92ZXIsJjpmb2N1c3tjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnlUZXh0LCBcIjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy5ldWlUYWJsZVNvcnRJY29uLS1zb3J0YWJsZXtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnlUZXh0LCBcIjt9fTtsYWJlbDpldWlUYWJsZUhlYWRlckNlbGxfX2J1dHRvbjtcIiksXG4gICAgZXVpVGFibGVGb290ZXJDZWxsOiAvKiNfX1BVUkVfXyovY3NzKHNoYXJlZFN0eWxlcywgXCIgYmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmxpZ2h0ZXN0U2hhZGUsIFwiOztsYWJlbDpldWlUYWJsZUZvb3RlckNlbGw7XCIpXG4gIH07XG59O1xuZXhwb3J0IHZhciBldWlUYWJsZUNlbGxDaGVja2JveFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYmxlQ2VsbENoZWNrYm94U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBfZXVpVGFibGVWYXJpYWJsZXMgPSBldWlUYWJsZVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIGNlbGxDb250ZW50UGFkZGluZyA9IF9ldWlUYWJsZVZhcmlhYmxlcy5jZWxsQ29udGVudFBhZGRpbmcsXG4gICAgbW9iaWxlU2l6ZXMgPSBfZXVpVGFibGVWYXJpYWJsZXMubW9iaWxlU2l6ZXMsXG4gICAgY2hlY2tib3hTaXplID0gX2V1aVRhYmxlVmFyaWFibGVzLmNoZWNrYm94U2l6ZTtcbiAgdmFyIHNoYXJlZENoZWNrYm94U3R5bGVzID0gXCJcXG4gICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgY2hlY2tib3hTaXplKSwgXCJcXG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIFwiKTtcbiAgcmV0dXJuIHtcbiAgICBldWlUYWJsZUhlYWRlckNlbGxDaGVja2JveDogLyojX19QVVJFX18qL2NzcyhzaGFyZWRDaGVja2JveFN0eWxlcywgbG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIjs7bGFiZWw6ZXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3g7XCIpLFxuICAgIGV1aVRhYmxlUm93Q2VsbENoZWNrYm94OiAvKiNfX1BVUkVfXyovY3NzKHNoYXJlZENoZWNrYm94U3R5bGVzLCBcIjs7bGFiZWw6ZXVpVGFibGVSb3dDZWxsQ2hlY2tib3g7XCIpLFxuICAgIGRlc2t0b3A6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnYm9yZGVyLXZlcnRpY2FsJywgZXVpVGhlbWUuYm9yZGVyLnRoaW4pLCBcIjs7bGFiZWw6ZGVza3RvcDtcIiksXG4gICAgbW9iaWxlOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxDU1MoJ3RvcCcsIGNlbGxDb250ZW50UGFkZGluZyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdsZWZ0JywgbW9iaWxlU2l6ZXMuY2hlY2tib3gub2Zmc2V0KSwgXCI7O2xhYmVsOm1vYmlsZTtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcIndyYXBXaXRoVGFibGVSb3dcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUhlYWRlciA9IGZ1bmN0aW9uIEV1aVRhYmxlSGVhZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJHdyYXBXaXRoVGFibGVSb3cgPSBfcmVmLndyYXBXaXRoVGFibGVSb3csXG4gICAgd3JhcFdpdGhUYWJsZVJvdyA9IF9yZWYkd3JhcFdpdGhUYWJsZVJvdyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkd3JhcFdpdGhUYWJsZVJvdyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGhlYWRcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIHJlc3QpLCB3cmFwV2l0aFRhYmxlUm93ID8gX19fRW1vdGlvbkpTWChcInRyXCIsIG51bGwsIGNoaWxkcmVuKSA6IGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZUhlYWRlci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICAgICAqIENoaWxkcmVuIG11c3QgYmUgdmFsaWQgRE9NIHN0cnVjdHVyZSByZXNpZGluZyB3aXRoaW4gYDx0aGVhZD5gLlxuICAgICAgICogVXNlIGA8dGQ+IHwgPHRoPmAgYnkgZGVmYXVsdCwgb3IgYDx0cj48dGgvPjwvdHI+YCB3aGVuIGB3cmFwV2l0aFRhYmxlUm93PWZhbHNlYFxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICAgKiBBdXRvbWF0aWNhbGx5IGFkZHMgYSB3cmFwcGluZyBgPHRyPmAgZWxlbWVudCBhcm91bmQgdGhlIGNoaWxkcmVuXG4gICAgICAgKi9cbiAgd3JhcFdpdGhUYWJsZVJvdzogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImFsaWduXCIsIFwib25Tb3J0XCIsIFwiaXNTb3J0ZWRcIiwgXCJpc1NvcnRBc2NlbmRpbmdcIiwgXCJjbGFzc05hbWVcIiwgXCJzY29wZVwiLCBcIm1vYmlsZU9wdGlvbnNcIiwgXCJ3aWR0aFwiLCBcInN0eWxlXCIsIFwicmVhZE9ubHlcIiwgXCJkZXNjcmlwdGlvblwiLCBcImFwcGVuZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMsIExFRlRfQUxJR05NRU5UIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyByZXNvbHZlV2lkdGhBc1N0eWxlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSB9IGZyb20gJy4vbW9iaWxlL3Jlc3BvbnNpdmVfY29udGV4dCc7XG5pbXBvcnQgeyBFdWlUYWJsZUNlbGxDb250ZW50IH0gZnJvbSAnLi9fdGFibGVfY2VsbF9jb250ZW50JztcbmltcG9ydCB7IGV1aVRhYmxlSGVhZGVyRm9vdGVyQ2VsbFN0eWxlcyB9IGZyb20gJy4vdGFibGVfY2VsbHNfc2hhcmVkLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIENlbGxDb250ZW50cyA9IGZ1bmN0aW9uIENlbGxDb250ZW50cyhfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBhbGlnbiA9IF9yZWYuYWxpZ24sXG4gICAgZGVzY3JpcHRpb24gPSBfcmVmLmRlc2NyaXB0aW9uLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjYW5Tb3J0ID0gX3JlZi5jYW5Tb3J0LFxuICAgIGlzU29ydGVkID0gX3JlZi5pc1NvcnRlZCxcbiAgICBpc1NvcnRBc2NlbmRpbmcgPSBfcmVmLmlzU29ydEFzY2VuZGluZztcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVDZWxsQ29udGVudCwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIGFsaWduOiBhbGlnbixcbiAgICB0ZXh0T25seTogZmFsc2UsXG4gICAgdHJ1bmNhdGVUZXh0OiBudWxsXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCBudWxsLCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlUYWJsZUhlYWRlckNlbGwudGl0bGVUZXh0V2l0aERlc2NcIixcbiAgICAgIGRlZmF1bHQ6IFwie2lubmVyVGV4dH07IHtkZXNjcmlwdGlvbn1cIixcbiAgICAgIHZhbHVlczoge1xuICAgICAgICBpbm5lclRleHQ6IGlubmVyVGV4dCxcbiAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHRpdGxlVGV4dFdpdGhEZXNjKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICB0aXRsZTogZGVzY3JpcHRpb24gPyB0aXRsZVRleHRXaXRoRGVzYyA6IGlubmVyVGV4dCxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWktdGV4dFRydW5jYXRlXCJcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9KTtcbiAgfSksIGRlc2NyaXB0aW9uICYmIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgbnVsbCwgZGVzY3JpcHRpb24pKSwgaXNTb3J0ZWQgPyBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVTb3J0SWNvblwiLFxuICAgIHR5cGU6IGlzU29ydEFzY2VuZGluZyA/ICdzb3J0VXAnIDogJ3NvcnREb3duJyxcbiAgICBzaXplOiBcIm1cIlxuICB9KSA6IGNhblNvcnQgPyBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVTb3J0SWNvbiBldWlUYWJsZVNvcnRJY29uLS1zb3J0YWJsZVwiLFxuICAgIHR5cGU6IFwic29ydGFibGVcIixcbiAgICBzaXplOiBcIm1cIixcbiAgICBjb2xvcjogXCJzdWJkdWVkXCIgLy8gVGludGVkIGEgYml0IGZ1cnRoZXIgdmlhIENTU1xuICB9KSA6IG51bGwpO1xufTtcbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXJDZWxsID0gZnVuY3Rpb24gRXVpVGFibGVIZWFkZXJDZWxsKF9yZWYyKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgIF9yZWYyJGFsaWduID0gX3JlZjIuYWxpZ24sXG4gICAgYWxpZ24gPSBfcmVmMiRhbGlnbiA9PT0gdm9pZCAwID8gTEVGVF9BTElHTk1FTlQgOiBfcmVmMiRhbGlnbixcbiAgICBvblNvcnQgPSBfcmVmMi5vblNvcnQsXG4gICAgaXNTb3J0ZWQgPSBfcmVmMi5pc1NvcnRlZCxcbiAgICBpc1NvcnRBc2NlbmRpbmcgPSBfcmVmMi5pc1NvcnRBc2NlbmRpbmcsXG4gICAgY2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgIHNjb3BlID0gX3JlZjIuc2NvcGUsXG4gICAgbW9iaWxlT3B0aW9ucyA9IF9yZWYyLm1vYmlsZU9wdGlvbnMsXG4gICAgd2lkdGggPSBfcmVmMi53aWR0aCxcbiAgICBzdHlsZSA9IF9yZWYyLnN0eWxlLFxuICAgIHJlYWRPbmx5ID0gX3JlZjIucmVhZE9ubHksXG4gICAgZGVzY3JpcHRpb24gPSBfcmVmMi5kZXNjcmlwdGlvbixcbiAgICBhcHBlbmQgPSBfcmVmMi5hcHBlbmQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYmxlSGVhZGVyRm9vdGVyQ2VsbFN0eWxlcyk7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSgpO1xuICB2YXIgaGlkZUZvckRlc2t0b3AgPSAhaXNSZXNwb25zaXZlICYmIChtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMub25seSk7XG4gIHZhciBoaWRlRm9yTW9iaWxlID0gaXNSZXNwb25zaXZlICYmIChtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMuc2hvdykgPT09IGZhbHNlO1xuICBpZiAoaGlkZUZvckRlc2t0b3AgfHwgaGlkZUZvck1vYmlsZSkgcmV0dXJuIG51bGw7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVIZWFkZXJDZWxsJywgY2xhc3NOYW1lKTtcbiAgdmFyIGlubGluZVN0eWxlcyA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoKTtcbiAgdmFyIENlbGxDb21wb25lbnQgPSBjaGlsZHJlbiA/ICd0aCcgOiAndGQnO1xuICB2YXIgY2VsbFNjb3BlID0gQ2VsbENvbXBvbmVudCA9PT0gJ3RoJyA/IHNjb3BlICE9PSBudWxsICYmIHNjb3BlICE9PSB2b2lkIDAgPyBzY29wZSA6ICdjb2wnIDogdW5kZWZpbmVkOyAvLyBgc2NvcGVgIGlzIG9ubHkgdmFsaWQgb24gYHRoYCBlbGVtZW50c1xuXG4gIHZhciBjYW5Tb3J0ID0gISEob25Tb3J0ICYmICFyZWFkT25seSk7XG4gIHZhciBhcmlhU29ydFZhbHVlO1xuICBpZiAoaXNTb3J0ZWQpIHtcbiAgICBhcmlhU29ydFZhbHVlID0gaXNTb3J0QXNjZW5kaW5nID8gJ2FzY2VuZGluZycgOiAnZGVzY2VuZGluZyc7XG4gIH0gZWxzZSBpZiAoY2FuU29ydCkge1xuICAgIGFyaWFTb3J0VmFsdWUgPSAnbm9uZSc7XG4gIH1cbiAgdmFyIGNlbGxDb250ZW50c1Byb3BzID0ge1xuICAgIGNzczogc3R5bGVzLmV1aVRhYmxlSGVhZGVyQ2VsbF9fY29udGVudCxcbiAgICBhbGlnbjogYWxpZ24sXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgIGNhblNvcnQ6IGNhblNvcnQsXG4gICAgaXNTb3J0ZWQ6IGlzU29ydGVkLFxuICAgIGlzU29ydEFzY2VuZGluZzogaXNTb3J0QXNjZW5kaW5nLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9O1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChDZWxsQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBzdHlsZXMuZXVpVGFibGVIZWFkZXJDZWxsLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzY29wZTogY2VsbFNjb3BlLFxuICAgIHJvbGU6IFwiY29sdW1uaGVhZGVyXCIsXG4gICAgXCJhcmlhLXNvcnRcIjogYXJpYVNvcnRWYWx1ZSxcbiAgICBzdHlsZTogaW5saW5lU3R5bGVzXG4gIH0sIHJlc3QpLCBjYW5Tb3J0ID8gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCB7XG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBjc3M6IHN0eWxlcy5ldWlUYWJsZUhlYWRlckNlbGxfX2J1dHRvbixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aVRhYmxlSGVhZGVyQnV0dG9uJywge1xuICAgICAgJ2V1aVRhYmxlSGVhZGVyQnV0dG9uLWlzU29ydGVkJzogaXNTb3J0ZWRcbiAgICB9KSxcbiAgICBvbkNsaWNrOiBvblNvcnQsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyU29ydEJ1dHRvblwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goQ2VsbENvbnRlbnRzLCBjZWxsQ29udGVudHNQcm9wcykpIDogX19fRW1vdGlvbkpTWChDZWxsQ29udGVudHMsIGNlbGxDb250ZW50c1Byb3BzKSwgYXBwZW5kKTtcbn07XG5FdWlUYWJsZUhlYWRlckNlbGwucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgYWxpZ246IFByb3BUeXBlcy5hbnksXG4gIGlzU29ydEFzY2VuZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGlzU29ydGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgbW9iaWxlT3B0aW9uczogUHJvcFR5cGVzLmFueSxcbiAgb25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcbiAgc2NvcGU6IFByb3BUeXBlcy5hbnksXG4gIHdpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZF0pLFxuICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAgICAgKiBTaG93cyB0aGUgc29ydCBpbmRpY2F0b3IgYnV0IHJlbW92ZXMgdGhlIGJ1dHRvblxuICAgICAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICAgKiBDb250ZW50IHJlbmRlcmVkIG91dHNpZGUgdGhlIHZpc2libGUgY2VsbCBjb250ZW50IHdyYXBwZXIuIFVzZWZ1bCBmb3IsIGUuZy4gc2NyZWVuIHJlYWRlciB0ZXh0LlxuICAgICAgICpcbiAgICAgICAqIFVzZWQgYnkgRXVpQmFzaWNUYWJsZSB0byByZW5kZXIgaGlkZGVuIGNvcHkgbWFya2Vyc1xuICAgICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLm5vZGVcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInNjb3BlXCIsIFwic3R5bGVcIiwgXCJ3aWR0aFwiLCBcImFwcGVuZFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyByZXNvbHZlV2lkdGhBc1N0eWxlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBldWlUYWJsZUNlbGxDaGVja2JveFN0eWxlcyB9IGZyb20gJy4vdGFibGVfY2VsbHNfc2hhcmVkLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCA9IGZ1bmN0aW9uIEV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBfcmVmJHNjb3BlID0gX3JlZi5zY29wZSxcbiAgICBzY29wZSA9IF9yZWYkc2NvcGUgPT09IHZvaWQgMCA/ICdjb2wnIDogX3JlZiRzY29wZSxcbiAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgIGFwcGVuZCA9IF9yZWYuYXBwZW5kLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCcsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJsZUNlbGxDaGVja2JveFN0eWxlcyk7XG4gIHZhciBpbmxpbmVTdHlsZXMgPSByZXNvbHZlV2lkdGhBc1N0eWxlKHN0eWxlLCB3aWR0aCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGhcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogc3R5bGVzLmV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94LFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzY29wZTogc2NvcGUsXG4gICAgc3R5bGU6IGlubGluZVN0eWxlc1xuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlQ2VsbENvbnRlbnRcIlxuICB9LCBjaGlsZHJlbiksIGFwcGVuZCk7XG59O1xuRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3gucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgd2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSksXG4gIHNjb3BlOiBQcm9wVHlwZXMuYW55LFxuICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJyZXNwb25zaXZlQnJlYWtwb2ludFwiXTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgdC5pbmRleE9mKG8pID49IDAgfHwge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoZS5pbmRleE9mKG4pID49IDApIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpTWVtb2l6ZWRTdHlsZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VJc0V1aVRhYmxlUmVzcG9uc2l2ZSB9IGZyb20gJy4vcmVzcG9uc2l2ZV9jb250ZXh0JztcbmltcG9ydCB7IGV1aVRhYmxlSGVhZGVyTW9iaWxlU3R5bGVzIH0gZnJvbSAnLi90YWJsZV9oZWFkZXJfbW9iaWxlLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUhlYWRlck1vYmlsZSA9IGZ1bmN0aW9uIEV1aVRhYmxlSGVhZGVyTW9iaWxlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICByZXNwb25zaXZlQnJlYWtwb2ludCA9IF9yZWYucmVzcG9uc2l2ZUJyZWFrcG9pbnQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNSZXNwb25zaXZlID0gdXNlSXNFdWlUYWJsZVJlc3BvbnNpdmUocmVzcG9uc2l2ZUJyZWFrcG9pbnQpO1xuICB2YXIgc3R5bGVzID0gdXNlRXVpTWVtb2l6ZWRTdHlsZXMoZXVpVGFibGVIZWFkZXJNb2JpbGVTdHlsZXMpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlSGVhZGVyTW9iaWxlJywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIGlzUmVzcG9uc2l2ZSA/IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IHN0eWxlcy5ldWlUYWJsZUhlYWRlck1vYmlsZVxuICB9LCByZXN0KSwgY2hpbGRyZW4pIDogbnVsbDtcbn07XG5FdWlUYWJsZUhlYWRlck1vYmlsZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgdmFyIGV1aVRhYmxlSGVhZGVyTW9iaWxlU3R5bGVzID0gZnVuY3Rpb24gZXVpVGFibGVIZWFkZXJNb2JpbGVTdHlsZXMoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVRhYmxlSGVhZGVyTW9iaWxlOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmJhc2VsaW5lO3BhZGRpbmctYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7O2xhYmVsOmV1aVRhYmxlSGVhZGVyTW9iaWxlO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImFuY2hvclBvc2l0aW9uXCIsIFwiaXRlbXNcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uLy4uL2J1dHRvbi9idXR0b25fZW1wdHknO1xuaW1wb3J0IHsgRXVpUG9wb3ZlciB9IGZyb20gJy4uLy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpQ29udGV4dE1lbnVQYW5lbCB9IGZyb20gJy4uLy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlUYWJsZVNvcnRNb2JpbGVJdGVtIH0gZnJvbSAnLi90YWJsZV9zb3J0X21vYmlsZV9pdGVtJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlU29ydE1vYmlsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBmdW5jdGlvbiBFdWlUYWJsZVNvcnRNb2JpbGUoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUYWJsZVNvcnRNb2JpbGUpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aVRhYmxlU29ydE1vYmlsZSwgW10uY29uY2F0KGFyZ3MpKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwic3RhdGVcIiwge1xuICAgICAgaXNQb3BvdmVyT3BlbjogZmFsc2VcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwib25CdXR0b25DbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzUG9wb3Zlck9wZW46ICFfdGhpcy5zdGF0ZS5pc1BvcG92ZXJPcGVuXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY2xvc2VQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNQb3BvdmVyT3BlbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIEFsaWducyB0aGUgYnV0dG9uIHRvIHRoZSByaWdodCBldmVuIHdoZW4gaXQncyB0aGUgb25seSBlbGVtZW50IHByZXNlbnRcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZXVpVGFibGVTb3J0TW9iaWxlU3R5bGVzXCIsIHtcbiAgICAgIG1hcmdpbklubGluZVN0YXJ0OiAnYXV0bycsXG4gICAgICBsYWJlbDogJ2V1aVRhYmxlU29ydE1vYmlsZSdcbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aVRhYmxlU29ydE1vYmlsZSwgX0NvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRXVpVGFibGVTb3J0TW9iaWxlLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICBhbmNob3JQb3NpdGlvbiA9IF90aGlzJHByb3BzLmFuY2hvclBvc2l0aW9uLFxuICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzLml0ZW1zLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZVNvcnRNb2JpbGUnLCBjbGFzc05hbWUpO1xuICAgICAgdmFyIG1vYmlsZVNvcnRCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkVtcHR5LCB7XG4gICAgICAgIGljb25UeXBlOiBcImFycm93RG93blwiLFxuICAgICAgICBpY29uU2lkZTogXCJyaWdodFwiLFxuICAgICAgICBvbkNsaWNrOiB0aGlzLm9uQnV0dG9uQ2xpY2suYmluZCh0aGlzKSxcbiAgICAgICAgZmx1c2g6IFwicmlnaHRcIixcbiAgICAgICAgc2l6ZTogXCJ4c1wiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpVGFibGVTb3J0TW9iaWxlLnNvcnRpbmdcIixcbiAgICAgICAgZGVmYXVsdDogXCJTb3J0aW5nXCJcbiAgICAgIH0pKTtcbiAgICAgIHZhciBtb2JpbGVTb3J0UG9wb3ZlciA9IF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlciwgX2V4dGVuZHMoe1xuICAgICAgICBidXR0b246IG1vYmlsZVNvcnRCdXR0b24sXG4gICAgICAgIGlzT3BlbjogdGhpcy5zdGF0ZS5pc1BvcG92ZXJPcGVuLFxuICAgICAgICBjbG9zZVBvcG92ZXI6IHRoaXMuY2xvc2VQb3BvdmVyLFxuICAgICAgICBhbmNob3JQb3NpdGlvbjogYW5jaG9yUG9zaXRpb24gfHwgJ2Rvd25SaWdodCcsXG4gICAgICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudVBhbmVsLCB7XG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgbWluV2lkdGg6IDIwMFxuICAgICAgICB9LFxuICAgICAgICBpdGVtczogaXRlbXMgJiYgaXRlbXMubGVuZ3RoID8gaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVTb3J0TW9iaWxlSXRlbSwge1xuICAgICAgICAgICAga2V5OiBpdGVtLmtleSxcbiAgICAgICAgICAgIG9uU29ydDogaXRlbS5vblNvcnQsXG4gICAgICAgICAgICBpc1NvcnRlZDogaXRlbS5pc1NvcnRlZCxcbiAgICAgICAgICAgIGlzU29ydEFzY2VuZGluZzogaXRlbS5pc1NvcnRBc2NlbmRpbmdcbiAgICAgICAgICB9LCBpdGVtLm5hbWUpO1xuICAgICAgICB9KSA6IHVuZGVmaW5lZFxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGNzczogdGhpcy5ldWlUYWJsZVNvcnRNb2JpbGVTdHlsZXNcbiAgICAgIH0sIG1vYmlsZVNvcnRQb3BvdmVyKTtcbiAgICB9XG4gIH1dKTtcbn0oQ29tcG9uZW50KTtcbkV1aVRhYmxlU29ydE1vYmlsZS5wcm9wVHlwZXMgPSB7XG4gIGFuY2hvclBvc2l0aW9uOiBQcm9wVHlwZXMuYW55LFxuICBpdGVtczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLmFueSxcbiAgICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzU29ydGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc1NvcnRBc2NlbmRpbmc6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWQpLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwib25Tb3J0XCIsIFwiaXNTb3J0ZWRcIiwgXCJpc1NvcnRBc2NlbmRpbmdcIiwgXCJjbGFzc05hbWVcIiwgXCJhcmlhTGFiZWxcIl07XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIHQuaW5kZXhPZihvKSA+PSAwIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKGUuaW5kZXhPZihuKSA+PSAwKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSB9IGZyb20gJy4uLy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVNvcnRNb2JpbGVJdGVtID0gZnVuY3Rpb24gRXVpVGFibGVTb3J0TW9iaWxlSXRlbShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgb25Tb3J0ID0gX3JlZi5vblNvcnQsXG4gICAgaXNTb3J0ZWQgPSBfcmVmLmlzU29ydGVkLFxuICAgIGlzU29ydEFzY2VuZGluZyA9IF9yZWYuaXNTb3J0QXNjZW5kaW5nLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGFyaWFMYWJlbCA9IF9yZWYuYXJpYUxhYmVsLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIHNvcnRJY29uID0gJ2VtcHR5JztcbiAgaWYgKGlzU29ydGVkKSB7XG4gICAgc29ydEljb24gPSBpc1NvcnRBc2NlbmRpbmcgPyAnc29ydFVwJyA6ICdzb3J0RG93bic7XG4gIH1cbiAgdmFyIGJ1dHRvbkNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZVNvcnRNb2JpbGVJdGVtJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlU29ydE1vYmlsZUl0ZW0taXNTb3J0ZWQnOiBpc1NvcnRlZFxuICB9KTtcbiAgdmFyIGNvbHVtblRpdGxlID0gYXJpYUxhYmVsID8gYXJpYUxhYmVsIDogY2hpbGRyZW47XG4gIHZhciBzdGF0ZWZ1bEFyaWFMYWJlbCA9IFwiU29ydCBcIi5jb25jYXQoY29sdW1uVGl0bGUsIFwiIFwiKS5jb25jYXQoaXNTb3J0QXNjZW5kaW5nID8gJ2Rlc2NlbmRpbmcnIDogJ2FzY2VuZGluZycpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGJ1dHRvbkNsYXNzZXMsXG4gICAgaWNvbjogc29ydEljb24sXG4gICAgb25DbGljazogb25Tb3J0LFxuICAgIFwiYXJpYS1sYWJlbFwiOiBzdGF0ZWZ1bEFyaWFMYWJlbFxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlU29ydE1vYmlsZUl0ZW0ucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBrbm93IHdoZW4gYW4gaXRlbSBoYXMgYmVlbiBjbGlja2VkXG4gICAgICovXG4gIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBjdXJyZW50IG9wdGlvbiBpcyB0aGUgc29ydGVkIG9uIGNvbHVtblxuICAgICAqL1xuICBpc1NvcnRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGljaCBkaXJlY3Rpb24gdGhlIGN1cnJlbnQgY29sdW1uIGlzIHNvcnRlZCBvblxuICAgICAqL1xuICBpc1NvcnRBc2NlbmRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJoYXNTZWxlY3Rpb25cIiwgXCJpc1NlbGVjdGVkXCIsIFwiaXNTZWxlY3RhYmxlXCIsIFwiaGFzQWN0aW9uc1wiLCBcImlzRXhwYW5kZWRSb3dcIiwgXCJpc0V4cGFuZGFibGVcIiwgXCJvbkNsaWNrXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzLCB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUV1aVRhYmxlSXNSZXNwb25zaXZlIH0gZnJvbSAnLi9tb2JpbGUvcmVzcG9uc2l2ZV9jb250ZXh0JztcbmltcG9ydCB7IGV1aVRhYmxlUm93U3R5bGVzIH0gZnJvbSAnLi90YWJsZV9yb3cuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlUm93ID0gZnVuY3Rpb24gRXVpVGFibGVSb3coX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGhhc1NlbGVjdGlvbiA9IF9yZWYuaGFzU2VsZWN0aW9uLFxuICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgaXNTZWxlY3RhYmxlID0gX3JlZi5pc1NlbGVjdGFibGUsXG4gICAgaGFzQWN0aW9ucyA9IF9yZWYuaGFzQWN0aW9ucyxcbiAgICBpc0V4cGFuZGVkUm93ID0gX3JlZi5pc0V4cGFuZGVkUm93LFxuICAgIGlzRXhwYW5kYWJsZSA9IF9yZWYuaXNFeHBhbmRhYmxlLFxuICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNSZXNwb25zaXZlID0gdXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUoKTtcbiAgdmFyIHN0eWxlcyA9IHVzZUV1aU1lbW9pemVkU3R5bGVzKGV1aVRhYmxlUm93U3R5bGVzKTtcbiAgdmFyIGNzc1N0eWxlcyA9IGlzUmVzcG9uc2l2ZSA/IFtzdHlsZXMuZXVpVGFibGVSb3csIHN0eWxlcy5tb2JpbGUubW9iaWxlLCBpc1NlbGVjdGVkICYmIHN0eWxlcy5tb2JpbGUuc2VsZWN0ZWQsIGlzRXhwYW5kZWRSb3cgJiYgc3R5bGVzLm1vYmlsZS5leHBhbmRlZCwgKGhhc0FjdGlvbnMgPT09IHRydWUgfHwgaXNFeHBhbmRhYmxlIHx8IGlzRXhwYW5kZWRSb3cpICYmIHN0eWxlcy5tb2JpbGUuaGFzUmlnaHRDb2x1bW4sIGhhc1NlbGVjdGlvbiAmJiBzdHlsZXMubW9iaWxlLmhhc0xlZnRDb2x1bW5dIDogW3N0eWxlcy5ldWlUYWJsZVJvdywgc3R5bGVzLmRlc2t0b3AuZGVza3RvcCwgaXNTZWxlY3RlZCAmJiBzdHlsZXMuZGVza3RvcC5zZWxlY3RlZCwgaXNFeHBhbmRlZFJvdyAmJiBzdHlsZXMuZGVza3RvcC5leHBhbmRlZCwgb25DbGljayAmJiBzdHlsZXMuZGVza3RvcC5jbGlja2FibGUsIGlzRXhwYW5kZWRSb3cgJiYgaGFzU2VsZWN0aW9uICYmIHN0eWxlcy5kZXNrdG9wLmNoZWNrYm94T2Zmc2V0XTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZVJvdycsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZVJvdy1pc1NlbGVjdGFibGUnOiBpc1NlbGVjdGFibGUsXG4gICAgJ2V1aVRhYmxlUm93LWlzU2VsZWN0ZWQnOiBpc1NlbGVjdGVkLFxuICAgICdldWlUYWJsZVJvdy1oYXNBY3Rpb25zJzogaGFzQWN0aW9ucyxcbiAgICAnZXVpVGFibGVSb3ctaXNFeHBhbmRlZFJvdyc6IGlzRXhwYW5kZWRSb3csXG4gICAgJ2V1aVRhYmxlUm93LWlzRXhwYW5kYWJsZSc6IGlzRXhwYW5kYWJsZSxcbiAgICAnZXVpVGFibGVSb3ctaXNDbGlja2FibGUnOiBvbkNsaWNrXG4gIH0pO1xuICBpZiAoIW9uQ2xpY2spIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRyXCIsIF9leHRlbmRzKHtcbiAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgfVxuICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgLy8gUHJldmVudCBhIHNjcm9sbCBmcm9tIG9jY3VycmluZyBpZiB0aGUgdXNlciBoYXMgaGl0IHNwYWNlLlxuICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuU1BBQ0UpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG4gIHZhciBvbktleVVwID0gZnVuY3Rpb24gb25LZXlVcChldmVudCkge1xuICAgIC8vIFN1cHBvcnQga2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSBieSBlbXVsYXRpbmcgbW91c2UgY2xpY2sgb24gRU5URVIgb3IgU1BBQ0Uga2V5cHJlc3MuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0ga2V5cy5FTlRFUiB8fCBldmVudC5rZXkgPT09IGtleXMuU1BBQ0UpIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgb25LZXlEb3duOiBvbktleURvd24sXG4gICAgb25LZXlVcDogb25LZXlVcCxcbiAgICB0YWJJbmRleDogMFxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlUm93LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjc3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgdGFibGUgaGFzIGEgc2luZ2xlIGNvbHVtbiBvZiBjaGVja2JveGVzIGZvciBzZWxlY3RpbmdcbiAgICAgKiByb3dzICh1c2VkIGZvciBtb2JpbGUgc3R5bGluZylcbiAgICAgKi9cbiAgaGFzU2VsZWN0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnQgcm93J3MgY2hlY2tib3ggaXMgc2VsZWN0YWJsZSAvIG5vdCBkaXNhYmxlZFxuICAgICAqL1xuICBpc1NlbGVjdGFibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgcm93IGhhcyBiZWVuIHNlbGVjdGVkXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHRhYmxlIGhhcyBhIGRlZGljYXRlZCBjb2x1bW4gZm9yIGFjdGlvbnNcbiAgICAgKiAodXNlZCBmb3IgbW9iaWxlIHN0eWxpbmcgYW5kIGRlc2t0b3AgYWN0aW9uIGhvdmVyIGJlaGF2aW9yKVxuICAgICAqL1xuICBoYXNBY3Rpb25zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW1wiY3VzdG9tXCJdKV0pLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHJvdyB3aWxsIGhhdmUgYW4gZXhwYW5kZWQgcm93XG4gICAgICovXG4gIGlzRXhwYW5kYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgcm93IHdpbGwgYmUgdGhlIGV4cGFuZGVkIHJvd1xuICAgICAqL1xuICBpc0V4cGFuZGVkUm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbGljazogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF90ZW1wbGF0ZU9iamVjdDtcbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoZSwgdCkgeyByZXR1cm4gdCB8fCAodCA9IGUuc2xpY2UoMCkpLCBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHQpIH0gfSkpOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHRpbnQsIHNoYWRlLCB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUNhbkFuaW1hdGUsIGV1aUJhY2tncm91bmRDb2xvciwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVNoYWRvdyB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbmltcG9ydCB7IGV1aVRhYmxlVmFyaWFibGVzIH0gZnJvbSAnLi90YWJsZS5zdHlsZXMnO1xuZXhwb3J0IHZhciBldWlUYWJsZVJvd1N0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYmxlUm93U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciByb3dDb2xvcnMgPSBfcm93Q29sb3JWYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIGV4cGFuZGVkQW5pbWF0aW9uQ3NzID0gX2V4cGFuZGVkUm93QW5pbWF0aW9uKGV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBfZXVpVGFibGVWYXJpYWJsZXMgPSBldWlUYWJsZVZhcmlhYmxlcyhldWlUaGVtZUNvbnRleHQpLFxuICAgIGNlbGxDb250ZW50UGFkZGluZyA9IF9ldWlUYWJsZVZhcmlhYmxlcy5jZWxsQ29udGVudFBhZGRpbmcsXG4gICAgbW9iaWxlU2l6ZXMgPSBfZXVpVGFibGVWYXJpYWJsZXMubW9iaWxlU2l6ZXMsXG4gICAgY2hlY2tib3hTaXplID0gX2V1aVRhYmxlVmFyaWFibGVzLmNoZWNrYm94U2l6ZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUYWJsZVJvdzogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlUYWJsZVJvdztcIiksXG4gICAgZGVza3RvcDoge1xuICAgICAgZGVza3RvcDogLyojX19QVVJFX18qL2NzcyhcIiY6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpcIiwgcm93Q29sb3JzLmhvdmVyLCBcIjt9O2xhYmVsOmRlc2t0b3A7XCIpLFxuICAgICAgZXhwYW5kZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCByb3dDb2xvcnMuaG92ZXIsIFwiO1wiLCBleHBhbmRlZEFuaW1hdGlvbkNzcywgXCI7O2xhYmVsOmV4cGFuZGVkO1wiKSxcbiAgICAgIGNsaWNrYWJsZTogLyojX19QVVJFX18qL2NzcyhcIiY6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpcIiwgcm93Q29sb3JzLmNsaWNrYWJsZS5ob3ZlciwgXCI7Y3Vyc29yOnBvaW50ZXI7fSY6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpcIiwgcm93Q29sb3JzLmNsaWNrYWJsZS5mb2N1cywgXCI7fTtsYWJlbDpjbGlja2FibGU7XCIpLFxuICAgICAgc2VsZWN0ZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCImLCYrLmV1aVRhYmxlUm93LWlzRXhwYW5kZWRSb3d7YmFja2dyb3VuZC1jb2xvcjpcIiwgcm93Q29sb3JzLnNlbGVjdGVkLmNvbG9yLCBcIjt9Jjpob3ZlciwmOmhvdmVyKy5ldWlUYWJsZVJvdy1pc0V4cGFuZGVkUm93e2JhY2tncm91bmQtY29sb3I6XCIsIHJvd0NvbG9ycy5zZWxlY3RlZC5ob3ZlciwgXCI7fTtsYWJlbDpzZWxlY3RlZDtcIiksXG4gICAgICAvLyBPZmZzZXQgZXhwYW5kZWQgJiBzZWxlY3RhYmxlIHJvd3MgYnkgdGhlIGNoZWNrYm94IHdpZHRoIHRvIGxpbmUgdXAgY29udGVudCB3aXRoIHRoZSAybmQgY29sdW1uXG4gICAgICAvLyBTZXQgb24gdGhlIGA8dGQ+YCBiZWNhdXNlIHBhZGRpbmcgY2FuJ3QgYmUgYXBwbGllZCB0byBgPHRyPmAgZWxlbWVudHMgZGlyZWN0bHlcbiAgICAgIGNoZWNrYm94T2Zmc2V0OiAvKiNfX1BVUkVfXyovY3NzKFwiJj4uZXVpVGFibGVSb3dDZWxsOmZpcnN0LWNoaWxke1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBjaGVja2JveFNpemUpLCBcIjt9O2xhYmVsOmNoZWNrYm94T2Zmc2V0O1wiKVxuICAgIH0sXG4gICAgbW9iaWxlOiB7XG4gICAgICBtb2JpbGU6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7cGFkZGluZzpcIiwgY2VsbENvbnRlbnRQYWRkaW5nLCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGNlbGxDb250ZW50UGFkZGluZyksIGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdzJyksIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGV1aUJhY2tncm91bmRDb2xvcihldWlUaGVtZUNvbnRleHQsICdwbGFpbicpLCBcIjtib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSwgXCI7O2xhYmVsOm1vYmlsZTtcIiksXG4gICAgICBzZWxlY3RlZDogLyojX19QVVJFX18qL2NzcyhcIiYsJisuZXVpVGFibGVSb3ctaXNFeHBhbmRlZFJvd3tiYWNrZ3JvdW5kLWNvbG9yOlwiLCByb3dDb2xvcnMuc2VsZWN0ZWQuY29sb3IsIFwiO307bGFiZWw6c2VsZWN0ZWQ7XCIpLFxuICAgICAgLyoqXG4gICAgICAgKiBMZWZ0IGNvbHVtbiBvZmZzZXQgKG5vIGJvcmRlcilcbiAgICAgICAqIFVzZWQgZm9yIHNlbGVjdGlvbiBjaGVja2JveCwgd2hpY2ggd2lsbCBiZSBhYnNvbHV0ZWx5IHBvc2l0aW9uZWRcbiAgICAgICAqL1xuICAgICAgaGFzTGVmdENvbHVtbjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBtb2JpbGVTaXplcy5jaGVja2JveC53aWR0aCksIFwiOztsYWJlbDpoYXNMZWZ0Q29sdW1uO1wiKSxcbiAgICAgIC8qKlxuICAgICAgICogUmlnaHQgY29sdW1uIHN0eWxlcyArIGJvcmRlclxuICAgICAgICogVXNlZCBmb3IgY2VsbCBhY3Rpb25zIGFuZCByb3cgZXhwYW5kZXIgYXJyb3dcbiAgICAgICAqL1xuICAgICAgaGFzUmlnaHRDb2x1bW46IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygncGFkZGluZy1yaWdodCcsIG1vYmlsZVNpemVzLmFjdGlvbnMud2lkdGgpLCBcIiAmOjphZnRlcntjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd2ZXJ0aWNhbCcsIDApLCBcIiBcIiwgbG9naWNhbENTUygncmlnaHQnLCBtb2JpbGVTaXplcy5hY3Rpb25zLndpZHRoKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4pLCBcIiBiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUaGVtZS5ib3JkZXIuY29sb3IsIFwiO307bGFiZWw6aGFzUmlnaHRDb2x1bW47XCIpLFxuICAgICAgLyoqXG4gICAgICAgKiBCb3R0b20gb2YgY2FyZCAtIGV4cGFuZGVkIHJvd3NcbiAgICAgICAqL1xuICAgICAgZXhwYW5kZWQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIFwiLVwiLmNvbmNhdChtb2JpbGVTaXplcy5hY3Rpb25zLm9mZnNldCkpLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWxlZnQnLCBjZWxsQ29udGVudFBhZGRpbmcpLCBcIiBcIiwgbG9naWNhbENTUygnYm9yZGVyLXRvcCcsIGV1aVRoZW1lLmJvcmRlci50aGluKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnLCAwKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2JvcmRlci10b3AtcmlnaHQtcmFkaXVzJywgMCksIFwiPi5ldWlUYWJsZVJvd0NlbGx7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7fVwiLCBleHBhbmRlZEFuaW1hdGlvbkNzcywgXCI7O2xhYmVsOmV4cGFuZGVkO1wiKVxuICAgIH1cbiAgfTtcbn07XG52YXIgX2V4cGFuZGVkUm93QW5pbWF0aW9uID0gZnVuY3Rpb24gX2V4cGFuZGVkUm93QW5pbWF0aW9uKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgLy8gRG8gbm90IGF0dGVtcHQgdG8gYW5pbWF0ZSB0byBoZWlnaHQgYXV0byAtIGRvd24gdGhhdCByb2FkIGRyYWdvbnMgbGllXG4gIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvNjgyNlxuICB2YXIgZXhwYW5kUm93ID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgMCUge1xcbiAgICAgIG9wYWNpdHk6IDA7XFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC1cIiwgXCIpO1xcbiAgICB9XFxuICAgIDEwMCUge1xcbiAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbiAgICB9XFxuICBcIl0pKSwgZXVpVGhlbWUuc2l6ZS5tKTtcblxuICAvLyBBbmltYXRpb24gbXVzdCBiZSBvbiB0aGUgY29udGVudHMgZGl2IGluc2lkZSwgbm90IHRoZSByb3cgaXRzZWxmXG4gIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwiey5ldWlUYWJsZUNlbGxDb250ZW50e2FuaW1hdGlvbjpcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCIgMSBub3JtYWwgbm9uZSBcIiwgZXhwYW5kUm93LCBcIjt9fVwiKTtcbn07XG52YXIgX3Jvd0NvbG9yVmFyaWFibGVzID0gZnVuY3Rpb24gX3Jvd0NvbG9yVmFyaWFibGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lLFxuICAgIGNvbG9yTW9kZSA9IF9yZWYyLmNvbG9yTW9kZTtcbiAgcmV0dXJuIHtcbiAgICBob3ZlcjogY29sb3JNb2RlID09PSAnREFSSycgPyBldWlUaGVtZS5jb2xvcnMubGlnaHRlc3RTaGFkZSA6IHRpbnQoZXVpVGhlbWUuY29sb3JzLmxpZ2h0ZXN0U2hhZGUsIDAuNSksXG4gICAgc2VsZWN0ZWQ6IHtcbiAgICAgIGNvbG9yOiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHNoYWRlKGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCAwLjcpIDogdGludChldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgMC45NiksXG4gICAgICBob3ZlcjogY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgMC43NSkgOiB0aW50KGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCAwLjkpXG4gICAgfSxcbiAgICBjbGlja2FibGU6IHtcbiAgICAgIGhvdmVyOiB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgMC4wNSksXG4gICAgICBmb2N1czogdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIDAuMSlcbiAgICB9XG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiYWxpZ25cIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInRydW5jYXRlVGV4dFwiLCBcInNldFNjb3BlUm93XCIsIFwidGV4dE9ubHlcIiwgXCJoYXNBY3Rpb25zXCIsIFwiaXNFeHBhbmRlclwiLCBcInN0eWxlXCIsIFwid2lkdGhcIiwgXCJ2YWxpZ25cIiwgXCJtb2JpbGVPcHRpb25zXCIsIFwiYXBwZW5kXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgeyBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikgeyBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpOyB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcywgTEVGVF9BTElHTk1FTlQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VFdWlUYWJsZUlzUmVzcG9uc2l2ZSB9IGZyb20gJy4vbW9iaWxlL3Jlc3BvbnNpdmVfY29udGV4dCc7XG5pbXBvcnQgeyByZXNvbHZlV2lkdGhBc1N0eWxlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBFdWlUYWJsZUNlbGxDb250ZW50IH0gZnJvbSAnLi9fdGFibGVfY2VsbF9jb250ZW50JztcbmltcG9ydCB7IGV1aVRhYmxlUm93Q2VsbFN0eWxlcyB9IGZyb20gJy4vdGFibGVfcm93X2NlbGwuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlUm93Q2VsbCA9IGZ1bmN0aW9uIEV1aVRhYmxlUm93Q2VsbChfcmVmKSB7XG4gIHZhciBfcmVmJGFsaWduID0gX3JlZi5hbGlnbixcbiAgICBhbGlnbiA9IF9yZWYkYWxpZ24gPT09IHZvaWQgMCA/IExFRlRfQUxJR05NRU5UIDogX3JlZiRhbGlnbixcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgdHJ1bmNhdGVUZXh0ID0gX3JlZi50cnVuY2F0ZVRleHQsXG4gICAgc2V0U2NvcGVSb3cgPSBfcmVmLnNldFNjb3BlUm93LFxuICAgIF9yZWYkdGV4dE9ubHkgPSBfcmVmLnRleHRPbmx5LFxuICAgIHRleHRPbmx5ID0gX3JlZiR0ZXh0T25seSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkdGV4dE9ubHksXG4gICAgaGFzQWN0aW9ucyA9IF9yZWYuaGFzQWN0aW9ucyxcbiAgICBpc0V4cGFuZGVyID0gX3JlZi5pc0V4cGFuZGVyLFxuICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgX3JlZiR2YWxpZ24gPSBfcmVmLnZhbGlnbixcbiAgICB2YWxpZ24gPSBfcmVmJHZhbGlnbiA9PT0gdm9pZCAwID8gJ21pZGRsZScgOiBfcmVmJHZhbGlnbixcbiAgICBtb2JpbGVPcHRpb25zID0gX3JlZi5tb2JpbGVPcHRpb25zLFxuICAgIGFwcGVuZCA9IF9yZWYuYXBwZW5kLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IHVzZUV1aVRhYmxlSXNSZXNwb25zaXZlKCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJsZVJvd0NlbGxTdHlsZXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUYWJsZVJvd0NlbGwsIHNldFNjb3BlUm93ICYmIHN0eWxlcy5yb3dIZWFkZXIsIGlzRXhwYW5kZXIgJiYgc3R5bGVzLmlzRXhwYW5kZXIsIGhhc0FjdGlvbnMgJiYgc3R5bGVzLmhhc0FjdGlvbnMsIHN0eWxlc1t2YWxpZ25dXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGlzUmVzcG9uc2l2ZSA/IFtzdHlsZXMubW9iaWxlLm1vYmlsZSwgKG1vYmlsZU9wdGlvbnMgPT09IG51bGwgfHwgbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbW9iaWxlT3B0aW9ucy5lbmxhcmdlKSAmJiBzdHlsZXMubW9iaWxlLmVubGFyZ2UsIGhhc0FjdGlvbnMgPT09ICdjdXN0b20nICYmIHN0eWxlcy5tb2JpbGUuY3VzdG9tQWN0aW9ucywgaGFzQWN0aW9ucyA9PT0gdHJ1ZSAmJiBzdHlsZXMubW9iaWxlLmFjdGlvbnMsIGlzRXhwYW5kZXIgJiYgc3R5bGVzLm1vYmlsZS5leHBhbmRlcl0gOiBbc3R5bGVzLmRlc2t0b3AuZGVza3RvcCwgaGFzQWN0aW9ucyAmJiBzdHlsZXMuZGVza3RvcC5hY3Rpb25zXSkpO1xuICB2YXIgY2VsbENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZVJvd0NlbGwnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVSb3dDZWxsLS1oYXNBY3Rpb25zJzogaGFzQWN0aW9ucyxcbiAgICAnZXVpVGFibGVSb3dDZWxsLS1pc0V4cGFuZGVyJzogaXNFeHBhbmRlclxuICB9KTtcbiAgdmFyIHdpZHRoVmFsdWUgPSBpc1Jlc3BvbnNpdmUgPyBoYXNBY3Rpb25zIHx8IGlzRXhwYW5kZXIgPyB1bmRlZmluZWQgLy8gT24gbW9iaWxlLCBhY3Rpb25zIGFyZSBzaGlmdGVkIHRvIGEgcmlnaHQgY29sdW1uIHZpYSBDU1NcbiAgOiBtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMud2lkdGggOiB3aWR0aDtcbiAgdmFyIHN0eWxlT2JqID0gcmVzb2x2ZVdpZHRoQXNTdHlsZShzdHlsZSwgd2lkdGhWYWx1ZSk7XG4gIHZhciBFbGVtZW50ID0gc2V0U2NvcGVSb3cgPyAndGgnIDogJ3RkJztcbiAgdmFyIHNoYXJlZFByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgc2NvcGU6IHNldFNjb3BlUm93ID8gJ3JvdycgOiB1bmRlZmluZWQsXG4gICAgc3R5bGU6IHN0eWxlT2JqLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpO1xuICB2YXIgc2hhcmVkQ29udGVudFByb3BzID0ge1xuICAgIGFsaWduOiBhbGlnbixcbiAgICB0ZXh0T25seTogdGV4dE9ubHksXG4gICAgdHJ1bmNhdGVUZXh0OiB0cnVuY2F0ZVRleHQsXG4gICAgaGFzQWN0aW9uczogaGFzQWN0aW9ucyB8fCBpc0V4cGFuZGVyXG4gIH07XG4gIGlmIChpc1Jlc3BvbnNpdmUpIHtcbiAgICAvLyBNb2JpbGUgdmlld1xuICAgIGlmICgobW9iaWxlT3B0aW9ucyA9PT0gbnVsbCB8fCBtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2JpbGVPcHRpb25zLnNob3cpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfbW9iaWxlT3B0aW9ucyRhbGlnbiwgX21vYmlsZU9wdGlvbnMkdHJ1bmNhLCBfbW9iaWxlT3B0aW9ucyR0ZXh0T247XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2VsbENsYXNzZXNcbiAgICAgIH0sIHNoYXJlZFByb3BzKSwgKG1vYmlsZU9wdGlvbnMgPT09IG51bGwgfHwgbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbW9iaWxlT3B0aW9ucy5oZWFkZXIpICYmIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVSb3dDZWxsX19tb2JpbGVIZWFkZXJcIixcbiAgICAgICAgY3NzOiBzdHlsZXMuZXVpVGFibGVSb3dDZWxsX19tb2JpbGVIZWFkZXJcbiAgICAgIH0sIG1vYmlsZU9wdGlvbnMuaGVhZGVyKSwgX19fRW1vdGlvbkpTWChFdWlUYWJsZUNlbGxDb250ZW50LCBfZXh0ZW5kcyh7fSwgc2hhcmVkQ29udGVudFByb3BzLCB7XG4gICAgICAgIGFsaWduOiAoX21vYmlsZU9wdGlvbnMkYWxpZ24gPSBtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMuYWxpZ24pICE9PSBudWxsICYmIF9tb2JpbGVPcHRpb25zJGFsaWduICE9PSB2b2lkIDAgPyBfbW9iaWxlT3B0aW9ucyRhbGlnbiA6ICdsZWZ0JyAvLyBEZWZhdWx0IHRvIGxlZnQgYWxpZ25lZCBtb2JpbGUgY2VsbHMsIHVubGVzcyBjb25zdW1lcnMgc3BlY2lmaWNhbGx5IHNldCBhbiBhbGlnbm1lbnQgZm9yIG1vYmlsZVxuICAgICAgICAsXG4gICAgICAgIHRydW5jYXRlVGV4dDogKF9tb2JpbGVPcHRpb25zJHRydW5jYSA9IG1vYmlsZU9wdGlvbnMgPT09IG51bGwgfHwgbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbW9iaWxlT3B0aW9ucy50cnVuY2F0ZVRleHQpICE9PSBudWxsICYmIF9tb2JpbGVPcHRpb25zJHRydW5jYSAhPT0gdm9pZCAwID8gX21vYmlsZU9wdGlvbnMkdHJ1bmNhIDogdHJ1bmNhdGVUZXh0LFxuICAgICAgICB0ZXh0T25seTogKF9tb2JpbGVPcHRpb25zJHRleHRPbiA9IG1vYmlsZU9wdGlvbnMgPT09IG51bGwgfHwgbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbW9iaWxlT3B0aW9ucy50ZXh0T25seSkgIT09IG51bGwgJiYgX21vYmlsZU9wdGlvbnMkdGV4dE9uICE9PSB2b2lkIDAgPyBfbW9iaWxlT3B0aW9ucyR0ZXh0T24gOiB0ZXh0T25seVxuICAgICAgfSksIChtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMucmVuZGVyKSB8fCBjaGlsZHJlbiksIGFwcGVuZCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIERlc2t0b3Agdmlld1xuICAgIGlmIChtb2JpbGVPcHRpb25zICE9PSBudWxsICYmIG1vYmlsZU9wdGlvbnMgIT09IHZvaWQgMCAmJiBtb2JpbGVPcHRpb25zLm9ubHkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2VsbENsYXNzZXNcbiAgICAgIH0sIHNoYXJlZFByb3BzKSwgX19fRW1vdGlvbkpTWChFdWlUYWJsZUNlbGxDb250ZW50LCBzaGFyZWRDb250ZW50UHJvcHMsIGNoaWxkcmVuKSwgYXBwZW5kKTtcbiAgICB9XG4gIH1cbn07XG5FdWlUYWJsZVJvd0NlbGwucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogVmVydGljYWwgYWxpZ25tZW50IG9mIHRoZSBjb250ZW50IGluIHRoZSBjZWxsXG4gICAgICovXG4gIHZhbGlnbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNlbGwgc2hvdWxkIGJlIG1hcmtlZCBhcyB0aGUgaGVhZGluZyBmb3IgaXRzIHJvd1xuICAgICAqL1xuICBzZXRTY29wZVJvdzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgY2VsbCBpcyBkZWRpY2F0ZWQgdG8gcm93IGFjdGlvbnNcbiAgICAgKiAodXNlZCBmb3IgbW9iaWxlIHN0eWxpbmcgYW5kIGRlc2t0b3AgYWN0aW9uIGhvdmVyIGJlaGF2aW9yKVxuICAgICAqL1xuICBoYXNBY3Rpb25zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW1wiY3VzdG9tXCJdKV0pLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiBpcyBkZWRpY2F0ZWQgYXMgdGhlIGV4cGFuZGFibGUgcm93IHRvZ2dsZVxuICAgICAqL1xuICBpc0V4cGFuZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogTW9iaWxlIG9wdGlvbnMgZm9yIGRpc3BsYXlpbmcgZGlmZmVyZW50bHkgYXQgc21hbGwgc2NyZWVucztcbiAgICAgKiBTZWUgI0V1aVRhYmxlUm93Q2VsbE1vYmlsZU9wdGlvbnNTaGFwZVxuICAgICAqL1xuICBtb2JpbGVPcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogSWYgZmFsc2UsIHdpbGwgbm90IHJlbmRlciB0aGUgY2VsbCBhdCBhbGwgZm9yIG1vYmlsZVxuICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICovXG4gICAgc2hvdzogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBPbmx5IHNob3cgZm9yIG1vYmlsZT8gSWYgdHJ1ZSwgd2lsbCBub3QgcmVuZGVyIHRoZSBjb2x1bW4gYXQgYWxsIGZvciBkZXNrdG9wXG4gICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICovXG4gICAgb25seTogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBDdXN0b20gcmVuZGVyL2NoaWxkcmVuIGlmIGRpZmZlcmVudCBmcm9tIGRlc2t0b3BcbiAgICAgICAqL1xuICAgIHJlbmRlcjogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICAgKiBUaGUgY29sdW1uJ3MgaGVhZGVyIGZvciB1c2UgaW4gbW9iaWxlIHZpZXcgKGF1dG9tYXRpY2FsbHkgcGFzc2VkIGRvd25cbiAgICAgICAqIHdoZW4gdXNpbmcgYEV1aUJhc2ljVGFibGVgKS5cbiAgICAgICAqIE9yIHBhc3MgYGZhbHNlYCB0byBub3Qgc2hvdyBhIGhlYWRlciBhdCBhbGwuXG4gICAgICAgKi9cbiAgICBoZWFkZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWRdKSxcbiAgICAvKipcbiAgICAgICAqIEluY3JlYXNlIHRleHQgc2l6ZSBjb21wYXJlZCB0byByZXN0IG9mIGNlbGxzXG4gICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICovXG4gICAgZW5sYXJnZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBBcHBsaWVzIHRoZSB2YWx1ZSB0byB0aGUgd2lkdGggb2YgdGhlIGNlbGwgaW4gbW9iaWxlIHZpZXcgKHR5cGljYWxseSA1MCUpXG4gICAgICAgKiBAZGVmYXVsdCA1MCVcbiAgICAgICAqL1xuICAgIHdpZHRoOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogSG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgdGhlIHRleHQgaW4gdGhlIGNlbGxcbiAgICAgICAqL1xuICAgIGFsaWduOiBQcm9wVHlwZXMuYW55LFxuICAgIC8qKlxuICAgICAgICogQ3JlYXRlcyBhIHRleHQgd3JhcHBlciBhcm91bmQgY2VsbCBjb250ZW50IHRoYXQgaGVscHMgd29yZCBicmVhayBvciB0cnVuY2F0ZVxuICAgICAgICogbG9uZyB0ZXh0IGNvcnJlY3RseS5cbiAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAqL1xuICAgIHRleHRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgY29sdW1uIHNob3VsZCB0cnVuY2F0ZSBvdmVyZmxvd2luZyB0ZXh0IGNvbnRlbnQuXG4gICAgICAgKiAtIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIHNpbmdsZS1saW5lIHRydW5jYXRpb24uXG4gICAgICAgKiAtIFRvIGVuYWJsZSBtdWx0aS1saW5lIHRydW5jYXRpb24sIHVzZSBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHdpdGggYGxpbmVzYFxuICAgICAgICogc2V0IHRvIGEgbnVtYmVyIG9mIGxpbmVzIHRvIHRydW5jYXRlIHRvLlxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgIHRydW5jYXRlVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGxpbmVzOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRcbiAgICB9KS5pc1JlcXVpcmVkXSlcbiAgfSksXG4gIC8qKlxuICAgICAqIENvbnRlbnQgcmVuZGVyZWQgb3V0c2lkZSB0aGUgdmlzaWJsZSBjZWxsIGNvbnRlbnQgd3JhcHBlci4gVXNlZnVsIGZvciwgZS5nLiBzY3JlZW4gcmVhZGVyIHRleHQuXG4gICAgICpcbiAgICAgKiBVc2VkIGJ5IEV1aUJhc2ljVGFibGUgdG8gcmVuZGVyIGhpZGRlbiBjb3B5IG1hcmtlcnNcbiAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAgICogSG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgdGhlIHRleHQgaW4gdGhlIGNlbGxcbiAgICAgKi9cbiAgYWxpZ246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYSB0ZXh0IHdyYXBwZXIgYXJvdW5kIGNlbGwgY29udGVudCB0aGF0IGhlbHBzIHdvcmQgYnJlYWsgb3IgdHJ1bmNhdGVcbiAgICAgKiBsb25nIHRleHQgY29ycmVjdGx5LlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgdGV4dE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGNvbHVtbiBzaG91bGQgdHJ1bmNhdGUgb3ZlcmZsb3dpbmcgdGV4dCBjb250ZW50LlxuICAgICAqIC0gU2V0IHRvIGB0cnVlYCB0byBlbmFibGUgc2luZ2xlLWxpbmUgdHJ1bmNhdGlvbi5cbiAgICAgKiAtIFRvIGVuYWJsZSBtdWx0aS1saW5lIHRydW5jYXRpb24sIHVzZSBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHdpdGggYGxpbmVzYFxuICAgICAqIHNldCB0byBhIG51bWJlciBvZiBsaW5lcyB0byB0cnVuY2F0ZSB0by5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICB0cnVuY2F0ZVRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbGluZXM6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxuICB9KS5pc1JlcXVpcmVkXSksXG4gIHdpZHRoOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlLCBldWlGb250U2l6ZSwgZXVpVGV4dFRydW5jYXRlLCBsb2dpY2FsQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpVGFibGVWYXJpYWJsZXMgfSBmcm9tICcuL3RhYmxlLnN0eWxlcyc7XG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxYW12ZHk2LWJvdHRvbVwiLFxuICBzdHlsZXM6IFwidmVydGljYWwtYWxpZ246Ym90dG9tO2xhYmVsOmJvdHRvbTtcIlxufSA6IHtcbiAgbmFtZTogXCIxYW12ZHk2LWJvdHRvbVwiLFxuICBzdHlsZXM6IFwidmVydGljYWwtYWxpZ246Ym90dG9tO2xhYmVsOmJvdHRvbTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjJmNzY0ZS10b3BcIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOnRvcDtsYWJlbDp0b3A7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMmY3NjRlLXRvcFwiLFxuICBzdHlsZXM6IFwidmVydGljYWwtYWxpZ246dG9wO2xhYmVsOnRvcDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIF9yZWYzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE5aGV4aHktYmFzZWxpbmVcIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2xhYmVsOmJhc2VsaW5lO1wiXG59IDoge1xuICBuYW1lOiBcIjE5aGV4aHktYmFzZWxpbmVcIixcbiAgc3R5bGVzOiBcInZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2xhYmVsOmJhc2VsaW5lO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgX3JlZjQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibDFubWU3LW1pZGRsZVwiLFxuICBzdHlsZXM6IFwidmVydGljYWwtYWxpZ246bWlkZGxlO2xhYmVsOm1pZGRsZTtcIlxufSA6IHtcbiAgbmFtZTogXCJsMW5tZTctbWlkZGxlXCIsXG4gIHN0eWxlczogXCJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGFiZWw6bWlkZGxlO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5leHBvcnQgdmFyIGV1aVRhYmxlUm93Q2VsbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRhYmxlUm93Q2VsbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgX2V1aVRhYmxlVmFyaWFibGVzID0gZXVpVGFibGVWYXJpYWJsZXMoZXVpVGhlbWVDb250ZXh0KSxcbiAgICBtb2JpbGVTaXplcyA9IF9ldWlUYWJsZVZhcmlhYmxlcy5tb2JpbGVTaXplcztcblxuICAvLyBVbnNldHMgdGhlIGV4dHJhIHN0cnV0IGNhdXNlZCBieSBpbmxpbmUtYmxvY2sgZGlzcGxheSBvZiBidXR0b25zL2ljb25zL3Rvb2x0aXBzLlxuICAvLyBXaXRob3V0IHRoaXMsIHRoZSByb3cgaGVpZ2h0IGp1bXBzIHdoZW5ldmVyIGFjdGlvbnMgYXJlIGRpc2FibGVkLlxuICB2YXIgaGFzSWNvbnMgPSBcImxpbmUtaGVpZ2h0OiAxO1wiO1xuICByZXR1cm4ge1xuICAgIGV1aVRhYmxlUm93Q2VsbDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7O2xhYmVsOmV1aVRhYmxlUm93Q2VsbDtcIiksXG4gICAgcm93SGVhZGVyOiAvKiNfX1BVUkVfXyovY3NzKFwiZm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0LnJlZ3VsYXIsIFwiO1wiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiOztsYWJlbDpyb3dIZWFkZXI7XCIpLFxuICAgIGlzRXhwYW5kZXI6IC8qI19fUFVSRV9fKi9jc3MoaGFzSWNvbnMsIFwiOztsYWJlbDppc0V4cGFuZGVyO1wiKSxcbiAgICBoYXNBY3Rpb25zOiAvKiNfX1BVUkVfXyovY3NzKGhhc0ljb25zLCBcIjs7bGFiZWw6aGFzQWN0aW9ucztcIiksXG4gICAgLy8gdmFsaWduXG4gICAgbWlkZGxlOiBfcmVmNCxcbiAgICBiYXNlbGluZTogX3JlZjMsXG4gICAgdG9wOiBfcmVmMixcbiAgICBib3R0b206IF9yZWYsXG4gICAgZGVza3RvcDoge1xuICAgICAgZGVza3RvcDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdib3JkZXItdmVydGljYWwnLCBldWlUaGVtZS5ib3JkZXIudGhpbiksIFwiOztsYWJlbDpkZXNrdG9wO1wiKSxcbiAgICAgIGFjdGlvbnM6IC8qI19fUFVSRV9fKi9jc3MoXCIuZXVpQmFzaWNUYWJsZUFjdGlvbi1zaG93T25Ib3ZlcntvcGFjaXR5OjA7XCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246b3BhY2l0eSBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLm5vcm1hbCwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIjt9fSY6Zm9jdXMtd2l0aGluLC5ldWlUYWJsZVJvdy1oYXNBY3Rpb25zOmhvdmVyICZ7LmV1aUJhc2ljVGFibGVBY3Rpb24tc2hvd09uSG92ZXJ7b3BhY2l0eToxO319O2xhYmVsOmFjdGlvbnM7XCIpXG4gICAgfSxcbiAgICBtb2JpbGU6IHtcbiAgICAgIG1vYmlsZTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCAnNTAlJyksIFwiOztsYWJlbDptb2JpbGU7XCIpLFxuICAgICAgZW5sYXJnZTogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdtJyksIFwiOztsYWJlbDplbmxhcmdlO1wiKSxcbiAgICAgIHJpZ2h0Q29sdW1uQ29udGVudDogXCJcXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdyaWdodCcsIDApLCBcIlxcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCAnMCcpLCBcIlxcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsIG1vYmlsZVNpemVzLmFjdGlvbnMud2lkdGgpLCBcIlxcbiAgICAgIFwiKSxcbiAgICAgIGdldCBhY3Rpb25zKCkge1xuICAgICAgICAvLyBOb3RlOiBWaXNpYmxlLW9uLWhvdmVyIGFjdGlvbnMgb24gZGVza3RvcCBhbHdheXMgc2hvdyBvbiBtb2JpbGVcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jc3ModGhpcy5yaWdodENvbHVtbkNvbnRlbnQsIFwiIFwiLCBsb2dpY2FsQ1NTKCd0b3AnLCBtb2JpbGVTaXplcy5hY3Rpb25zLm9mZnNldCksIFwiOztsYWJlbDphY3Rpb25zO1wiKTtcbiAgICAgIH0sXG4gICAgICBnZXQgZXhwYW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKHRoaXMucmlnaHRDb2x1bW5Db250ZW50LCBcIiBcIiwgbG9naWNhbENTUygnYm90dG9tJywgbW9iaWxlU2l6ZXMuYWN0aW9ucy5vZmZzZXQpLCBcIjs7bGFiZWw6ZXhwYW5kZXI7XCIpO1xuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogQ3VzdG9tIGFjdGlvbnMgbWF5IG5vdCBiZSBpY29ucyBhbmQgdGhlcmVmb3JlIG1heSBub3QgZml0IGluIGEgY29sdW1uXG4gICAgICAgKiBJZiB0aGV5J3JlIHRoZSBsYXN0IGNlbGwsIHdlIGNhbiBjcmVhdGUgYSBwc2V1ZG8gXCJyb3dcIi9cImJvcmRlci10b3BcIlxuICAgICAgICogdGhhdCBtaW1pY2tzIHRoZSB2aXN1YWwgc2VwYXJhdGlvbiB0aGF0IHRoZSByaWdodCBjb2x1bW4gaGFzXG4gICAgICAgKi9cbiAgICAgIGN1c3RvbUFjdGlvbnM6IC8qI19fUFVSRV9fKi9jc3MoXCImOmxhc3QtY2hpbGR7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgJjo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxDU1MoJ2hvcml6b250YWwnLCAwKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluKSwgXCIgYmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVGhlbWUuYm9yZGVyLmNvbG9yLCBcIjt9LmV1aVRhYmxlQ2VsbENvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7XCIsIGxvZ2ljYWxDU1MoJ3RvcCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIjt9fTtsYWJlbDpjdXN0b21BY3Rpb25zO1wiKVxuICAgIH0sXG4gICAgZXVpVGFibGVSb3dDZWxsX19tb2JpbGVIZWFkZXI6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dFRydW5jYXRlKCksIFwiIGZvbnQtc2l6ZTpcIiwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycsIHtcbiAgICAgIGN1c3RvbVNjYWxlOiAneHhzJ1xuICAgIH0pLmZvbnRTaXplLCBcIjtkaXNwbGF5OmJsb2NrO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGFya1NoYWRlLCBcIjtwYWRkaW5nOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiO3BhZGRpbmctYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLWVuZDotXCIsIGV1aVRoZW1lLnNpemUucywgXCI7LmV1aVRhYmxlUm93Q2VsbDpub3QoOm9ubHktY2hpbGQpICZ7XCIsIGxvZ2ljYWxDU1MoJ21pbi1oZWlnaHQnLCBldWlUaGVtZS5zaXplLmwpLCBcIjt9O2xhYmVsOmV1aVRhYmxlUm93Q2VsbF9fbW9iaWxlSGVhZGVyO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYXBwZW5kXCJdO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlNZW1vaXplZFN0eWxlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUV1aVRhYmxlSXNSZXNwb25zaXZlIH0gZnJvbSAnLi9tb2JpbGUvcmVzcG9uc2l2ZV9jb250ZXh0JztcbmltcG9ydCB7IGV1aVRhYmxlQ2VsbENoZWNrYm94U3R5bGVzIH0gZnJvbSAnLi90YWJsZV9jZWxsc19zaGFyZWQuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlUm93Q2VsbENoZWNrYm94ID0gZnVuY3Rpb24gRXVpVGFibGVSb3dDZWxsQ2hlY2tib3goX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGFwcGVuZCA9IF9yZWYuYXBwZW5kLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IHVzZUV1aVRhYmxlSXNSZXNwb25zaXZlKCk7XG4gIHZhciBzdHlsZXMgPSB1c2VFdWlNZW1vaXplZFN0eWxlcyhldWlUYWJsZUNlbGxDaGVja2JveFN0eWxlcyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRhYmxlUm93Q2VsbENoZWNrYm94LCBpc1Jlc3BvbnNpdmUgPyBzdHlsZXMubW9iaWxlIDogc3R5bGVzLmRlc2t0b3BdO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlUm93Q2VsbENoZWNrYm94JywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0ZFwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVDZWxsQ29udGVudFwiXG4gIH0sIGNoaWxkcmVuKSwgYXBwZW5kKTtcbn07XG5FdWlUYWJsZVJvd0NlbGxDaGVja2JveC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3NzOiBQcm9wVHlwZXMuYW55LFxuICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwibG9hZGluZ1wiLCBcIml0ZW1zXCIsIFwiaXRlbUlkXCIsIFwiY29sdW1uc1wiLCBcInBhZ2luYXRpb25cIiwgXCJzb3J0aW5nXCIsIFwic2VsZWN0aW9uXCIsIFwib25DaGFuZ2VcIiwgXCJlcnJvclwiLCBcIm5vSXRlbXNNZXNzYWdlXCIsIFwiY29tcHJlc3NlZFwiLCBcIml0ZW1JZFRvRXhwYW5kZWRSb3dNYXBcIiwgXCJyZXNwb25zaXZlQnJlYWtwb2ludFwiLCBcInJvd1Byb3BzXCIsIFwiY2VsbFByb3BzXCIsIFwidGFibGVDYXB0aW9uXCIsIFwicm93SGVhZGVyXCIsIFwidGFibGVMYXlvdXRcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJhbGlnblwiLCBcInJlbmRlclwiLCBcImRhdGFUeXBlXCIsIFwiaXNFeHBhbmRlclwiLCBcInRleHRPbmx5XCIsIFwibmFtZVwiLCBcImZpZWxkXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJzb3J0YWJsZVwiLCBcImZvb3RlclwiLCBcIm1vYmlsZU9wdGlvbnNcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXkocikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHsgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTsgfVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyKTsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCB0LmluZGV4T2YobykgPj0gMCB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmIChlLmluZGV4T2YobikgPj0gMCkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBmb3JtYXRBdXRvLCBmb3JtYXRCb29sZWFuLCBmb3JtYXREYXRlLCBmb3JtYXROdW1iZXIsIGZvcm1hdFRleHQsIExFRlRfQUxJR05NRU5ULCBSSUdIVF9BTElHTk1FTlQsIFNvcnREaXJlY3Rpb24sIFJlbmRlcldpdGhFdWlUaGVtZSwgT3ZlcnJpZGVDb3BpZWRUYWJ1bGFyQ29udGVudCwgdGFidWxhckNvcHlNYXJrZXJzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZWRpY2F0ZSc7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vYmplY3RzJztcbmltcG9ydCB7IEV1aUNoZWNrYm94IH0gZnJvbSAnLi4vZm9ybSc7XG5pbXBvcnQgeyBFdWlDb21wb25lbnREZWZhdWx0c0NvbnRleHQgfSBmcm9tICcuLi9wcm92aWRlci9jb21wb25lbnRfZGVmYXVsdHMnO1xuaW1wb3J0IHsgZXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMgfSBmcm9tICcuLi90YWJsZS90YWJsZV9wYWdpbmF0aW9uJztcbmltcG9ydCB7IEV1aVRhYmxlLCBFdWlUYWJsZUJvZHksIEV1aVRhYmxlRm9vdGVyLCBFdWlUYWJsZUZvb3RlckNlbGwsIEV1aVRhYmxlSGVhZGVyLCBFdWlUYWJsZUhlYWRlckNlbGwsIEV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94LCBFdWlUYWJsZUhlYWRlck1vYmlsZSwgRXVpVGFibGVSb3csIEV1aVRhYmxlUm93Q2VsbCwgRXVpVGFibGVSb3dDZWxsQ2hlY2tib3gsIEV1aVRhYmxlU29ydE1vYmlsZSB9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7IGV1aVRhYmxlQ2FwdGlvblN0eWxlcyB9IGZyb20gJy4uL3RhYmxlL3RhYmxlLnN0eWxlcyc7XG5pbXBvcnQgeyBDb2xsYXBzZWRJdGVtQWN0aW9ucyB9IGZyb20gJy4vY29sbGFwc2VkX2l0ZW1fYWN0aW9ucyc7XG5pbXBvcnQgeyBFeHBhbmRlZEl0ZW1BY3Rpb25zIH0gZnJvbSAnLi9leHBhbmRlZF9pdGVtX2FjdGlvbnMnO1xuaW1wb3J0IHsgUGFnaW5hdGlvbkJhciB9IGZyb20gJy4vcGFnaW5hdGlvbl9iYXInO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpRGVsYXlSZW5kZXIgfSBmcm9tICcuLi9kZWxheV9yZW5kZXInO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBldWlCYXNpY1RhYmxlQm9keUxvYWRpbmcsIHNhZmFyaUxvYWRpbmdXb3JrYXJvdW5kIH0gZnJvbSAnLi9iYXNpY190YWJsZS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBkYXRhVHlwZXNQcm9maWxlcyA9IHtcbiAgYXV0bzoge1xuICAgIGFsaWduOiBMRUZUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEF1dG8odmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgc3RyaW5nOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0VGV4dCh2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBudW1iZXI6IHtcbiAgICBhbGlnbjogUklHSFRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIGJvb2xlYW46IHtcbiAgICBhbGlnbjogTEVGVF9BTElHTk1FTlQsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXRCb29sZWFuKHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIGRhdGU6IHtcbiAgICBhbGlnbjogTEVGVF9BTElHTk1FTlQsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXREYXRlKHZhbHVlKTtcbiAgICB9XG4gIH1cbn07XG52YXIgREFUQV9UWVBFUyA9IE9iamVjdC5rZXlzKGRhdGFUeXBlc1Byb2ZpbGVzKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoaXRlbSwgaXRlbUlkKSB7XG4gIGlmIChpdGVtSWQpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihpdGVtSWQpKSB7XG4gICAgICByZXR1cm4gaXRlbUlkKGl0ZW0pO1xuICAgIH1cbiAgICAvLyBAdHMtaWdub3JlIG5ldmVyIG1pbmQgYWJvdXQgdGhlIGluZGV4IHNpZ25hdHVyZVxuICAgIHJldHVybiBpdGVtW2l0ZW1JZF07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFJvd1Byb3BzKGl0ZW0sIHJvd1Byb3BzKSB7XG4gIGlmIChyb3dQcm9wcykge1xuICAgIGlmIChpc0Z1bmN0aW9uKHJvd1Byb3BzKSkge1xuICAgICAgcmV0dXJuIHJvd1Byb3BzKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcm93UHJvcHM7XG4gIH1cbiAgcmV0dXJuIHt9O1xufVxuZnVuY3Rpb24gZ2V0Q2VsbFByb3BzKGl0ZW0sIGNvbHVtbiwgY2VsbFByb3BzKSB7XG4gIGlmIChjZWxsUHJvcHMpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihjZWxsUHJvcHMpKSB7XG4gICAgICByZXR1cm4gY2VsbFByb3BzKGl0ZW0sIGNvbHVtbik7XG4gICAgfVxuICAgIHJldHVybiBjZWxsUHJvcHM7XG4gIH1cbiAgcmV0dXJuIHt9O1xufVxuZnVuY3Rpb24gZ2V0Q29sdW1uRm9vdGVyKGNvbHVtbiwgX3JlZikge1xuICB2YXIgaXRlbXMgPSBfcmVmLml0ZW1zLFxuICAgIHBhZ2luYXRpb24gPSBfcmVmLnBhZ2luYXRpb247XG4gIHZhciBfcmVmMiA9IGNvbHVtbixcbiAgICBmb290ZXIgPSBfcmVmMi5mb290ZXI7XG4gIGlmIChmb290ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihmb290ZXIpKSB7XG4gICAgICByZXR1cm4gZm9vdGVyKHtcbiAgICAgICAgaXRlbXM6IGl0ZW1zLFxuICAgICAgICBwYWdpbmF0aW9uOiBwYWdpbmF0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZvb3RlcjtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gaGFzUGFnaW5hdGlvbih4KSB7XG4gIHJldHVybiB4Lmhhc093blByb3BlcnR5KCdwYWdpbmF0aW9uJykgJiYgISF4LnBhZ2luYXRpb247XG59XG5leHBvcnQgdmFyIEV1aUJhc2ljVGFibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRXVpQmFzaWNUYWJsZShwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQmFzaWNUYWJsZSk7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEV1aUJhc2ljVGFibGUsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0YWJsZUlkXCIsIGh0bWxJZEdlbmVyYXRvcignX190YWJsZScpKCkpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZWxlY3RBbGxJZEdlbmVyYXRvclwiLCBodG1sSWRHZW5lcmF0b3IoJ19zZWxlY3Rpb25fY29sdW1uLWNoZWNrYm94JykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZW5kZXJTZWxlY3RBbGxcIiwgZnVuY3Rpb24gKGlzTW9iaWxlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wcy5pdGVtcyxcbiAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2VsZWN0aW9uO1xuICAgICAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHNlbGVjdGFibGVJdGVtcyA9IGl0ZW1zLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gIXNlbGVjdGlvbi5zZWxlY3RhYmxlIHx8IHNlbGVjdGlvbi5zZWxlY3RhYmxlKGl0ZW0pO1xuICAgICAgfSk7XG4gICAgICB2YXIgY2hlY2tlZCA9IF90aGlzLnN0YXRlLnNlbGVjdGlvbiAmJiBzZWxlY3RhYmxlSXRlbXMubGVuZ3RoID4gMCAmJiBfdGhpcy5zdGF0ZS5zZWxlY3Rpb24ubGVuZ3RoID09PSBzZWxlY3RhYmxlSXRlbXMubGVuZ3RoO1xuICAgICAgdmFyIGluZGV0ZXJtaW5hdGUgPSAhY2hlY2tlZCAmJiBfdGhpcy5zdGF0ZS5zZWxlY3Rpb24gJiYgc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aCA+IDAgJiYgX3RoaXMuc3RhdGUuc2VsZWN0aW9uLmxlbmd0aCA+IDA7XG4gICAgICB2YXIgZGlzYWJsZWQgPSBzZWxlY3RhYmxlSXRlbXMubGVuZ3RoID09PSAwO1xuICAgICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gb25DaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkICYmICFpbmRldGVybWluYXRlKSB7XG4gICAgICAgICAgX3RoaXMuY2hhbmdlU2VsZWN0aW9uKHNlbGVjdGFibGVJdGVtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuY2hhbmdlU2VsZWN0aW9uKFtdKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW5zOiBbJ2V1aUJhc2ljVGFibGUuc2VsZWN0QWxsUm93cycsICdldWlCYXNpY1RhYmxlLmRlc2VsZWN0Um93cyddLFxuICAgICAgICBkZWZhdWx0czogWydTZWxlY3QgYWxsIHJvd3MnLCAnRGVzZWxlY3Qgcm93cyddXG4gICAgICB9LCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgdmFyIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjMsIDIpLFxuICAgICAgICAgIHNlbGVjdEFsbFJvd3MgPSBfcmVmNFswXSxcbiAgICAgICAgICBkZXNlbGVjdFJvd3MgPSBfcmVmNFsxXTtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ2hlY2tib3gsIHtcbiAgICAgICAgICBpZDogX3RoaXMuc2VsZWN0QWxsSWRHZW5lcmF0b3IoKSxcbiAgICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICAgIGluZGV0ZXJtaW5hdGU6IGluZGV0ZXJtaW5hdGUsXG4gICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiY2hlY2tib3hTZWxlY3RBbGxcIixcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogY2hlY2tlZCB8fCBpbmRldGVybWluYXRlID8gZGVzZWxlY3RSb3dzIDogc2VsZWN0QWxsUm93cyxcbiAgICAgICAgICB0aXRsZTogY2hlY2tlZCB8fCBpbmRldGVybWluYXRlID8gZGVzZWxlY3RSb3dzIDogc2VsZWN0QWxsUm93cyxcbiAgICAgICAgICBsYWJlbDogaXNNb2JpbGUgPyBzZWxlY3RBbGxSb3dzIDogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJyZW5kZXJDb3B5Q2hhclwiLCBmdW5jdGlvbiAoY29sdW1uSW5kZXgpIHtcbiAgICAgIHZhciBpc0xhc3RDb2x1bW4gPSBjb2x1bW5JbmRleCA9PT0gX3RoaXMucHJvcHMuY29sdW1ucy5sZW5ndGggLSAxO1xuICAgICAgcmV0dXJuIGlzTGFzdENvbHVtbiA/IHRhYnVsYXJDb3B5TWFya2Vycy5oaWRkZW5OZXdsaW5lIDogdGFidWxhckNvcHlNYXJrZXJzLmhpZGRlblRhYjtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwicmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb25cIiwgZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgdmFyIHNvcnRpbmcgPSBfdGhpcy5wcm9wcy5zb3J0aW5nO1xuICAgICAgdmFyIF9yZWY1ID0gY29sdW1uLFxuICAgICAgICBzb3J0YWJsZSA9IF9yZWY1LnNvcnRhYmxlLFxuICAgICAgICBmaWVsZCA9IF9yZWY1LmZpZWxkLFxuICAgICAgICBuYW1lID0gX3JlZjUubmFtZTtcbiAgICAgIGlmICghc29ydGluZyB8fCAhc29ydGluZy5zb3J0IHx8ICFzb3J0YWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc29ydGluZy5zb3J0LmZpZWxkID09PSBmaWVsZCB8fCBzb3J0aW5nLnNvcnQuZmllbGQgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHNvcnRpbmcuc29ydC5kaXJlY3Rpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInJlc29sdmVDb2x1bW5PblNvcnRcIiwgZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgdmFyIHNvcnRpbmcgPSBfdGhpcy5wcm9wcy5zb3J0aW5nO1xuICAgICAgdmFyIF9yZWY2ID0gY29sdW1uLFxuICAgICAgICBzb3J0YWJsZSA9IF9yZWY2LnNvcnRhYmxlLFxuICAgICAgICBuYW1lID0gX3JlZjYubmFtZTtcbiAgICAgIGlmICghc29ydGluZyB8fCAhc29ydGFibGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYXNpY1RhYmxlIGlzIGNvbmZpZ3VyZWQgdG8gYmUgc29ydGFibGUgb24gY29sdW1uIFtcIi5jb25jYXQobmFtZSwgXCJdIGJ1dFxcbiAgICAgICAgICBbb25DaGFuZ2VdIGlzIG5vdCBjb25maWd1cmVkLiBUaGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHRoZSBzb3J0IHJlcXVlc3RzXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vbkNvbHVtblNvcnRDaGFuZ2UoY29sdW1uKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAvLyB1c2VkIGZvciBjaGVja2luZyBpZiAgaW5pdGlhbCBzZWxlY3Rpb24gaXMgcmVuZGVyZWRcbiAgICAgIGluaXRpYWxTZWxlY3Rpb25SZW5kZXJlZDogZmFsc2UsXG4gICAgICBzZWxlY3Rpb246IFtdXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKEV1aUJhc2ljVGFibGUsIF9Db21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEV1aUJhc2ljVGFibGUsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicGFnZVNpemVcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciBfcmVmNywgX3RoaXMkcHJvcHMkcGFnaW5hdGlvLCBfdGhpcyRwcm9wcyRwYWdpbmF0aW8yLCBfdGhpcyRjb250ZXh0JEV1aVRhYmw7XG4gICAgICByZXR1cm4gKF9yZWY3ID0gKF90aGlzJHByb3BzJHBhZ2luYXRpbyA9IChfdGhpcyRwcm9wcyRwYWdpbmF0aW8yID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRwYWdpbmF0aW8yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRwYWdpbmF0aW8yLnBhZ2VTaXplKSAhPT0gbnVsbCAmJiBfdGhpcyRwcm9wcyRwYWdpbmF0aW8gIT09IHZvaWQgMCA/IF90aGlzJHByb3BzJHBhZ2luYXRpbyA6IChfdGhpcyRjb250ZXh0JEV1aVRhYmwgPSB0aGlzLmNvbnRleHQuRXVpVGFibGVQYWdpbmF0aW9uKSA9PT0gbnVsbCB8fCBfdGhpcyRjb250ZXh0JEV1aVRhYmwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGNvbnRleHQkRXVpVGFibC5pdGVtc1BlclBhZ2UpICE9PSBudWxsICYmIF9yZWY3ICE9PSB2b2lkIDAgPyBfcmVmNyA6IGV1aVRhYmxlUGFnaW5hdGlvbkRlZmF1bHRzLml0ZW1zUGVyUGFnZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNTZWxlY3Rpb25Db250cm9sbGVkXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkc2VsZWN0aW9uO1xuICAgICAgcmV0dXJuICEhKChfdGhpcyRwcm9wcyRzZWxlY3Rpb24gPSB0aGlzLnByb3BzLnNlbGVjdGlvbikgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkc2VsZWN0aW9uICE9PSB2b2lkIDAgJiYgX3RoaXMkcHJvcHMkc2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0SW5pdGlhbFNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbml0aWFsU2VsZWN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Db250cm9sbGVkKSByZXR1cm47XG4gICAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3Rpb24gJiYgdGhpcy5wcm9wcy5zZWxlY3Rpb24uaW5pdGlhbFNlbGVjdGVkICYmICF0aGlzLnN0YXRlLmluaXRpYWxTZWxlY3Rpb25SZW5kZXJlZCAmJiB0aGlzLnByb3BzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLnByb3BzLnNlbGVjdGlvbi5pbml0aWFsU2VsZWN0ZWQsXG4gICAgICAgICAgaW5pdGlhbFNlbGVjdGlvblJlbmRlcmVkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJidWlsZENyaXRlcmlhXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkQ3JpdGVyaWEocHJvcHMpIHtcbiAgICAgIHZhciBjcml0ZXJpYSA9IHt9O1xuICAgICAgaWYgKGhhc1BhZ2luYXRpb24ocHJvcHMpKSB7XG4gICAgICAgIGNyaXRlcmlhLnBhZ2UgPSB7XG4gICAgICAgICAgaW5kZXg6IHByb3BzLnBhZ2luYXRpb24ucGFnZUluZGV4LFxuICAgICAgICAgIHNpemU6IHRoaXMucGFnZVNpemVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5zb3J0aW5nKSB7XG4gICAgICAgIGNyaXRlcmlhLnNvcnQgPSBwcm9wcy5zb3J0aW5nLnNvcnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JpdGVyaWE7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNoYW5nZVNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjaGFuZ2VTZWxlY3Rpb24oY2hhbmdlZFNlbGVjdGlvbikge1xuICAgICAgdmFyIF9zZWxlY3Rpb24kb25TZWxlY3RpbztcbiAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnByb3BzLnNlbGVjdGlvbjtcbiAgICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm47XG4gICAgICAoX3NlbGVjdGlvbiRvblNlbGVjdGlvID0gc2VsZWN0aW9uLm9uU2VsZWN0aW9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfc2VsZWN0aW9uJG9uU2VsZWN0aW8gPT09IHZvaWQgMCB8fCBfc2VsZWN0aW9uJG9uU2VsZWN0aW8uY2FsbChzZWxlY3Rpb24sIGNoYW5nZWRTZWxlY3Rpb24pO1xuICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0aW9uQ29udHJvbGxlZCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzZWxlY3Rpb246IGNoYW5nZWRTZWxlY3Rpb25cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFyU2VsZWN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oW10pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvblBhZ2VTaXplQ2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uUGFnZVNpemVDaGFuZ2Uoc2l6ZSkge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgdmFyIGN1cnJlbnRDcml0ZXJpYSA9IHRoaXMuYnVpbGRDcml0ZXJpYSh0aGlzLnByb3BzKTtcbiAgICAgIHZhciBjcml0ZXJpYSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhKSwge30sIHtcbiAgICAgICAgcGFnZToge1xuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIC8vIHdoZW4gcGFnZSBzaXplIGNoYW5nZXMsIHdlIHRha2UgdGhlIHVzZXIgYmFjayB0byB0aGUgZmlyc3QgcGFnZVxuICAgICAgICAgIHNpemU6IHNpemVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGNyaXRlcmlhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25QYWdlQ2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uUGFnZUNoYW5nZShpbmRleCkge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgdmFyIGN1cnJlbnRDcml0ZXJpYSA9IHRoaXMuYnVpbGRDcml0ZXJpYSh0aGlzLnByb3BzKTtcbiAgICAgIHZhciBjcml0ZXJpYSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhKSwge30sIHtcbiAgICAgICAgcGFnZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjdXJyZW50Q3JpdGVyaWEucGFnZSksIHt9LCB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoY3JpdGVyaWEpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbkNvbHVtblNvcnRDaGFuZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Db2x1bW5Tb3J0Q2hhbmdlKGNvbHVtbikge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgdmFyIGN1cnJlbnRDcml0ZXJpYSA9IHRoaXMuYnVpbGRDcml0ZXJpYSh0aGlzLnByb3BzKTtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSBTb3J0RGlyZWN0aW9uLkFTQztcbiAgICAgIGlmIChjdXJyZW50Q3JpdGVyaWEgJiYgY3VycmVudENyaXRlcmlhLnNvcnQgJiYgKGN1cnJlbnRDcml0ZXJpYS5zb3J0LmZpZWxkID09PSBjb2x1bW4uZmllbGQgfHwgY3VycmVudENyaXRlcmlhLnNvcnQuZmllbGQgPT09IGNvbHVtbi5uYW1lKSkge1xuICAgICAgICBkaXJlY3Rpb24gPSBTb3J0RGlyZWN0aW9uLnJldmVyc2UoY3VycmVudENyaXRlcmlhLnNvcnQuZGlyZWN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHZhciBjcml0ZXJpYSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhKSwge30sIHtcbiAgICAgICAgLy8gcmVzZXR0aW5nIHRoZSBwYWdlIGlmIHRoZSBjcml0ZXJpYSBoYXMgb25lXG4gICAgICAgIHBhZ2U6ICFjdXJyZW50Q3JpdGVyaWEucGFnZSA/IHVuZGVmaW5lZCA6IHtcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICBzaXplOiBjdXJyZW50Q3JpdGVyaWEucGFnZS5zaXplXG4gICAgICAgIH0sXG4gICAgICAgIHNvcnQ6IHtcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkIHx8IGNvbHVtbi5uYW1lLFxuICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBjb21wbGV4IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBhZ2luYXRpb24ncyBleGlzdGVuY2UgYW5kIGNyaXRlcmlhLCB0aGUgY29kZSBsb2dpYyBlbnN1cmVzIHRoaXMgaXMgY29ycmVjdGx5IG1haW50YWluZWRcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShjcml0ZXJpYSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgbG9hZGluZyA9IF90aGlzJHByb3BzMi5sb2FkaW5nLFxuICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzMi5pdGVtcyxcbiAgICAgICAgaXRlbUlkID0gX3RoaXMkcHJvcHMyLml0ZW1JZCxcbiAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzMi5jb2x1bW5zLFxuICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHMyLnBhZ2luYXRpb24sXG4gICAgICAgIHNvcnRpbmcgPSBfdGhpcyRwcm9wczIuc29ydGluZyxcbiAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHMyLnNlbGVjdGlvbixcbiAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczIub25DaGFuZ2UsXG4gICAgICAgIGVycm9yID0gX3RoaXMkcHJvcHMyLmVycm9yLFxuICAgICAgICBub0l0ZW1zTWVzc2FnZSA9IF90aGlzJHByb3BzMi5ub0l0ZW1zTWVzc2FnZSxcbiAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMi5jb21wcmVzc2VkLFxuICAgICAgICBpdGVtSWRUb0V4cGFuZGVkUm93TWFwID0gX3RoaXMkcHJvcHMyLml0ZW1JZFRvRXhwYW5kZWRSb3dNYXAsXG4gICAgICAgIHJlc3BvbnNpdmVCcmVha3BvaW50ID0gX3RoaXMkcHJvcHMyLnJlc3BvbnNpdmVCcmVha3BvaW50LFxuICAgICAgICByb3dQcm9wcyA9IF90aGlzJHByb3BzMi5yb3dQcm9wcyxcbiAgICAgICAgY2VsbFByb3BzID0gX3RoaXMkcHJvcHMyLmNlbGxQcm9wcyxcbiAgICAgICAgdGFibGVDYXB0aW9uID0gX3RoaXMkcHJvcHMyLnRhYmxlQ2FwdGlvbixcbiAgICAgICAgcm93SGVhZGVyID0gX3RoaXMkcHJvcHMyLnJvd0hlYWRlcixcbiAgICAgICAgdGFibGVMYXlvdXQgPSBfdGhpcyRwcm9wczIudGFibGVMYXlvdXQsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCYXNpY1RhYmxlJywge1xuICAgICAgICAnZXVpQmFzaWNUYWJsZS1sb2FkaW5nJzogbG9hZGluZ1xuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciB0YWJsZSA9IHRoaXMucmVuZGVyVGFibGUoKTtcbiAgICAgIHZhciBwYWdpbmF0aW9uQmFyID0gdGhpcy5yZW5kZXJQYWdpbmF0aW9uQmFyKCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgfSwgcmVzdCksIHRhYmxlLCBwYWdpbmF0aW9uQmFyKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyVGFibGUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMy5jb21wcmVzc2VkLFxuICAgICAgICByZXNwb25zaXZlQnJlYWtwb2ludCA9IF90aGlzJHByb3BzMy5yZXNwb25zaXZlQnJlYWtwb2ludCxcbiAgICAgICAgdGFibGVMYXlvdXQgPSBfdGhpcyRwcm9wczMudGFibGVMYXlvdXQsXG4gICAgICAgIGxvYWRpbmcgPSBfdGhpcyRwcm9wczMubG9hZGluZztcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyTW9iaWxlLCB7XG4gICAgICAgIHJlc3BvbnNpdmVCcmVha3BvaW50OiByZXNwb25zaXZlQnJlYWtwb2ludFxuICAgICAgfSwgdGhpcy5yZW5kZXJTZWxlY3RBbGwodHJ1ZSksIHRoaXMucmVuZGVyVGFibGVNb2JpbGVTb3J0KCkpLCBfX19FbW90aW9uSlNYKE92ZXJyaWRlQ29waWVkVGFidWxhckNvbnRlbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpVGFibGUsIHtcbiAgICAgICAgaWQ6IHRoaXMudGFibGVJZCxcbiAgICAgICAgdGFibGVMYXlvdXQ6IHRhYmxlTGF5b3V0LFxuICAgICAgICByZXNwb25zaXZlQnJlYWtwb2ludDogcmVzcG9uc2l2ZUJyZWFrcG9pbnQsXG4gICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICAgIGNzczogbG9hZGluZyAmJiBzYWZhcmlMb2FkaW5nV29ya2Fyb3VuZFxuICAgICAgfSwgdGhpcy5yZW5kZXJUYWJsZUNhcHRpb24oKSwgdGhpcy5yZW5kZXJUYWJsZUhlYWQoKSwgdGhpcy5yZW5kZXJUYWJsZUJvZHkoKSwgdGhpcy5yZW5kZXJUYWJsZUZvb3RlcigpKSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZU1vYmlsZVNvcnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyVGFibGVNb2JpbGVTb3J0KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNC5jb2x1bW5zLFxuICAgICAgICBzb3J0aW5nID0gX3RoaXMkcHJvcHM0LnNvcnRpbmc7XG4gICAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICAgIGlmICghc29ydGluZykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uLCBpbmRleCkge1xuICAgICAgICB2YXIgX2NvbHVtbjtcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZCAmJiBzb3J0aW5nLnNvcnQgJiYgISFzb3J0aW5nLmVuYWJsZUFsbENvbHVtbnMgJiYgY29sdW1uLnNvcnRhYmxlID09IG51bGwpIHtcbiAgICAgICAgICBjb2x1bW4gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNvbHVtbiksIHt9LCB7XG4gICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29sdW1uLnNvcnRhYmxlIHx8ICgoX2NvbHVtbiA9IGNvbHVtbikgPT09IG51bGwgfHwgX2NvbHVtbiA9PT0gdm9pZCAwIHx8IChfY29sdW1uID0gX2NvbHVtbi5tb2JpbGVPcHRpb25zKSA9PT0gbnVsbCB8fCBfY29sdW1uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uLnNob3cpID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc29ydERpcmVjdGlvbiA9IF90aGlzMi5yZXNvbHZlQ29sdW1uU29ydERpcmVjdGlvbihjb2x1bW4pO1xuICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICBrZXk6IFwiX2RhdGFfc19cIi5jb25jYXQoU3RyaW5nKGNvbHVtbi5maWVsZCksIFwiX1wiKS5jb25jYXQoaW5kZXgpLFxuICAgICAgICAgIG9uU29ydDogX3RoaXMyLnJlc29sdmVDb2x1bW5PblNvcnQoY29sdW1uKSxcbiAgICAgICAgICBpc1NvcnRlZDogISFzb3J0RGlyZWN0aW9uLFxuICAgICAgICAgIGlzU29ydEFzY2VuZGluZzogc29ydERpcmVjdGlvbiA/IFNvcnREaXJlY3Rpb24uaXNBc2Moc29ydERpcmVjdGlvbikgOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpdGVtcy5sZW5ndGggPyBfX19FbW90aW9uSlNYKEV1aVRhYmxlU29ydE1vYmlsZSwge1xuICAgICAgICBpdGVtczogaXRlbXNcbiAgICAgIH0pIDogbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVDYXB0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlQ2FwdGlvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzNS5pdGVtcyxcbiAgICAgICAgcGFnaW5hdGlvbiA9IF90aGlzJHByb3BzNS5wYWdpbmF0aW9uLFxuICAgICAgICB0YWJsZUNhcHRpb24gPSBfdGhpcyRwcm9wczUudGFibGVDYXB0aW9uO1xuICAgICAgdmFyIGl0ZW1Db3VudCA9IGl0ZW1zLmxlbmd0aDtcbiAgICAgIHZhciB0b3RhbEl0ZW1Db3VudCA9IHBhZ2luYXRpb24gPyBwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50IDogaXRlbUNvdW50O1xuICAgICAgdmFyIHBhZ2UgPSBwYWdpbmF0aW9uID8gcGFnaW5hdGlvbi5wYWdlSW5kZXggKyAxIDogMTtcbiAgICAgIHZhciBwYWdlQ291bnQgPSBwYWdpbmF0aW9uID8gTWF0aC5jZWlsKHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgLyB0aGlzLnBhZ2VTaXplKSA6IDE7XG4gICAgICB2YXIgY2FwdGlvbkVsZW1lbnQ7XG4gICAgICBpZiAodGFibGVDYXB0aW9uKSB7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVDYXB0aW9uV2l0aFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwie3RhYmxlQ2FwdGlvbn07IFBhZ2Uge3BhZ2V9IG9mIHtwYWdlQ291bnR9LlwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIHRhYmxlQ2FwdGlvbjogdGFibGVDYXB0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gdGFibGVDYXB0aW9uO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGFnaW5hdGlvbikge1xuICAgICAgICAgIGlmIChwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50ID4gMCkge1xuICAgICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZUF1dG9DYXB0aW9uV2l0aFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgICAgZGVmYXVsdDogXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3Mgb3V0IG9mIHt0b3RhbEl0ZW1Db3VudH0gcm93czsgUGFnZSB7cGFnZX0gb2Yge3BhZ2VDb3VudH0uXCIsXG4gICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgIHRvdGFsSXRlbUNvdW50OiB0b3RhbEl0ZW1Db3VudCxcbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudCxcbiAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlU2ltcGxlQXV0b0NhcHRpb25XaXRoUGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93czsgUGFnZSB7cGFnZX0gb2Yge3BhZ2VDb3VudH0uXCIsXG4gICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgIGl0ZW1Db3VudDogaXRlbUNvdW50LFxuICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgICAgICAgICAgcGFnZUNvdW50OiBwYWdlQ291bnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlQXV0b0NhcHRpb25XaXRob3V0UGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3MuXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcImNhcHRpb25cIiwge1xuICAgICAgICBjc3M6IGV1aVRhYmxlQ2FwdGlvblN0eWxlcyxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlQ2FwdGlvblwiXG4gICAgICB9LCB0YWJ1bGFyQ29weU1hcmtlcnMuaGlkZGVuTm9Db3B5Qm91bmRhcnksIF9fX0Vtb3Rpb25KU1goRXVpRGVsYXlSZW5kZXIsIG51bGwsIGNhcHRpb25FbGVtZW50KSwgdGFidWxhckNvcHlNYXJrZXJzLmhpZGRlbk5vQ29weUJvdW5kYXJ5KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlSGVhZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUhlYWQoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHM2LmNvbHVtbnMsXG4gICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzNi5zZWxlY3Rpb247XG4gICAgICB2YXIgaGVhZGVycyA9IFtdO1xuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBoZWFkZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCwge1xuICAgICAgICAgIGtleTogXCJfc2VsZWN0aW9uX2NvbHVtbl9oXCIsXG4gICAgICAgICAgYXBwZW5kOiB0aGlzLnJlbmRlckNvcHlDaGFyKC0xKVxuICAgICAgICB9LCB0aGlzLnJlbmRlclNlbGVjdEFsbChmYWxzZSkpKTtcbiAgICAgIH1cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uLCBpbmRleCkge1xuICAgICAgICB2YXIgX3JlZjggPSBjb2x1bW4sXG4gICAgICAgICAgZmllbGQgPSBfcmVmOC5maWVsZCxcbiAgICAgICAgICB3aWR0aCA9IF9yZWY4LndpZHRoLFxuICAgICAgICAgIG5hbWUgPSBfcmVmOC5uYW1lLFxuICAgICAgICAgIGFsaWduID0gX3JlZjguYWxpZ24sXG4gICAgICAgICAgZGF0YVR5cGUgPSBfcmVmOC5kYXRhVHlwZSxcbiAgICAgICAgICBzb3J0YWJsZSA9IF9yZWY4LnNvcnRhYmxlLFxuICAgICAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmOC5tb2JpbGVPcHRpb25zLFxuICAgICAgICAgIHJlYWRPbmx5ID0gX3JlZjgucmVhZE9ubHksXG4gICAgICAgICAgZGVzY3JpcHRpb24gPSBfcmVmOC5kZXNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGNvbHVtbkFsaWduID0gYWxpZ24gfHwgX3RoaXMzLmdldEFsaWduRm9yRGF0YVR5cGUoZGF0YVR5cGUpO1xuICAgICAgICB2YXIgc2hhcmVkUHJvcHMgPSB7XG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgICAgICBtb2JpbGVPcHRpb25zOiBtb2JpbGVPcHRpb25zLFxuICAgICAgICAgIGFsaWduOiBjb2x1bW5BbGlnbixcbiAgICAgICAgICBhcHBlbmQ6IF90aGlzMy5yZW5kZXJDb3B5Q2hhcihpbmRleClcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBhY3Rpb25zIGNvbHVtblxuICAgICAgICBpZiAoY29sdW1uLmFjdGlvbnMpIHtcbiAgICAgICAgICBoZWFkZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlckNlbGwsIF9leHRlbmRzKHt9LCBzaGFyZWRQcm9wcywge1xuICAgICAgICAgICAga2V5OiBcIl9hY3Rpb25zX2hfXCIuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICAgIGFsaWduOiBcInJpZ2h0XCJcbiAgICAgICAgICB9KSwgbmFtZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbXB1dGVkIGNvbHVtblxuICAgICAgICBpZiAoIWNvbHVtbi5maWVsZCkge1xuICAgICAgICAgIHZhciBfc29ydGluZyA9IHt9O1xuICAgICAgICAgIC8vIGNvbXB1dGVkIGNvbHVtbnMgYXJlIG9ubHkgc29ydGFibGUgaWYgdGhlaXIgYHNvcnRhYmxlYCBpcyBhIGZ1bmN0aW9uXG4gICAgICAgICAgaWYgKF90aGlzMy5wcm9wcy5zb3J0aW5nICYmIHR5cGVvZiBzb3J0YWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIHNvcnREaXJlY3Rpb24gPSBfdGhpczMucmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb24oY29sdW1uKTtcbiAgICAgICAgICAgIF9zb3J0aW5nLmlzU29ydGVkID0gISFzb3J0RGlyZWN0aW9uO1xuICAgICAgICAgICAgX3NvcnRpbmcuaXNTb3J0QXNjZW5kaW5nID0gc29ydERpcmVjdGlvbiA/IFNvcnREaXJlY3Rpb24uaXNBc2Moc29ydERpcmVjdGlvbikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBfc29ydGluZy5vblNvcnQgPSBfdGhpczMucmVzb2x2ZUNvbHVtbk9uU29ydChjb2x1bW4pO1xuICAgICAgICAgICAgX3NvcnRpbmcucmVhZE9ubHkgPSBfdGhpczMucHJvcHMuc29ydGluZy5yZWFkT25seSB8fCByZWFkT25seTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsLCBfZXh0ZW5kcyh7fSwgc2hhcmVkUHJvcHMsIHtcbiAgICAgICAgICAgIGtleTogXCJfY29tcHV0ZWRfY29sdW1uX2hfXCIuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0YWJsZUhlYWRlckNlbGxfXCIuY29uY2F0KHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyA/IG5hbWUgOiAnJywgXCJfXCIpLmNvbmNhdChpbmRleClcbiAgICAgICAgICB9LCBfc29ydGluZyksIG5hbWUpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmaWVsZCBkYXRhIGNvbHVtblxuICAgICAgICB2YXIgc29ydGluZyA9IHt9O1xuICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcpIHtcbiAgICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcuc29ydCAmJiAhIV90aGlzMy5wcm9wcy5zb3J0aW5nLmVuYWJsZUFsbENvbHVtbnMgJiYgY29sdW1uLnNvcnRhYmxlID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbHVtbiA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY29sdW1uKSwge30sIHtcbiAgICAgICAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgX3JlZjkgPSBjb2x1bW4sXG4gICAgICAgICAgICBfc29ydGFibGUgPSBfcmVmOS5zb3J0YWJsZTtcbiAgICAgICAgICBpZiAoX3NvcnRhYmxlKSB7XG4gICAgICAgICAgICB2YXIgX3NvcnREaXJlY3Rpb24gPSBfdGhpczMucmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb24oY29sdW1uKTtcbiAgICAgICAgICAgIHNvcnRpbmcuaXNTb3J0ZWQgPSAhIV9zb3J0RGlyZWN0aW9uO1xuICAgICAgICAgICAgc29ydGluZy5pc1NvcnRBc2NlbmRpbmcgPSBfc29ydERpcmVjdGlvbiA/IFNvcnREaXJlY3Rpb24uaXNBc2MoX3NvcnREaXJlY3Rpb24pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgc29ydGluZy5vblNvcnQgPSBfdGhpczMucmVzb2x2ZUNvbHVtbk9uU29ydChjb2x1bW4pO1xuICAgICAgICAgICAgc29ydGluZy5yZWFkT25seSA9IF90aGlzMy5wcm9wcy5zb3J0aW5nLnJlYWRPbmx5IHx8IHJlYWRPbmx5O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoZWFkZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlckNlbGwsIF9leHRlbmRzKHt9LCBzaGFyZWRQcm9wcywge1xuICAgICAgICAgIGtleTogXCJfZGF0YV9oX1wiLmNvbmNhdChTdHJpbmcoZmllbGQpLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVIZWFkZXJDZWxsX1wiLmNvbmNhdChTdHJpbmcoZmllbGQpLCBcIl9cIikuY29uY2F0KGluZGV4KVxuICAgICAgICB9LCBzb3J0aW5nKSwgbmFtZSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlciwgbnVsbCwgaGVhZGVycyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlRm9vdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlRm9vdGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHM3Lml0ZW1zLFxuICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHM3LmNvbHVtbnMsXG4gICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczcucGFnaW5hdGlvbixcbiAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHM3LnNlbGVjdGlvbjtcbiAgICAgIHZhciBmb290ZXJzID0gW107XG4gICAgICB2YXIgaGFzRGVmaW5lZEZvb3RlciA9IGZhbHNlO1xuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICAvLyBDcmVhdGUgYW4gZW1wdHkgY2VsbCB0byBjb21wZW5zYXRlIGZvciBhZGRpdGlvbmFsIHNlbGVjdGlvbiBjb2x1bW5cbiAgICAgICAgZm9vdGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVGb290ZXJDZWxsLCB7XG4gICAgICAgICAga2V5OiBcIl9zZWxlY3Rpb25fY29sdW1uX2ZcIlxuICAgICAgICB9LCB1bmRlZmluZWQpKTtcbiAgICAgIH1cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHZhciBmb290ZXIgPSBnZXRDb2x1bW5Gb290ZXIoY29sdW1uLCB7XG4gICAgICAgICAgaXRlbXM6IGl0ZW1zLFxuICAgICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBfcmVmMTAgPSBjb2x1bW4sXG4gICAgICAgICAgbW9iaWxlT3B0aW9ucyA9IF9yZWYxMC5tb2JpbGVPcHRpb25zLFxuICAgICAgICAgIGZpZWxkID0gX3JlZjEwLmZpZWxkLFxuICAgICAgICAgIGFsaWduID0gX3JlZjEwLmFsaWduO1xuICAgICAgICBpZiAobW9iaWxlT3B0aW9ucyAhPT0gbnVsbCAmJiBtb2JpbGVPcHRpb25zICE9PSB2b2lkIDAgJiYgbW9iaWxlT3B0aW9ucy5vbmx5KSB7XG4gICAgICAgICAgcmV0dXJuOyAvLyBleGNsdWRlIGNvbHVtbnMgdGhhdCBvbmx5IGV4aXN0IGZvciBtb2JpbGUgaGVhZGVyc1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb290ZXIpIHtcbiAgICAgICAgICBmb290ZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlckNlbGwsIHtcbiAgICAgICAgICAgIGtleTogXCJmb290ZXJfXCIuY29uY2F0KFN0cmluZyhmaWVsZCksIFwiX1wiKS5jb25jYXQoZm9vdGVycy5sZW5ndGggLSAxKSxcbiAgICAgICAgICAgIGFsaWduOiBhbGlnblxuICAgICAgICAgIH0sIGZvb3RlcikpO1xuICAgICAgICAgIGhhc0RlZmluZWRGb290ZXIgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvb3RlciBpcyB1bmRlZmluZWQsIHNvIGNyZWF0ZSBhbiBlbXB0eSBjZWxsIHRvIHByZXNlcnZlIGxheW91dFxuICAgICAgICAgIGZvb3RlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlRm9vdGVyQ2VsbCwge1xuICAgICAgICAgICAga2V5OiBcImZvb3Rlcl9lbXB0eV9cIi5jb25jYXQoZm9vdGVycy5sZW5ndGggLSAxKSxcbiAgICAgICAgICAgIGFsaWduOiBhbGlnblxuICAgICAgICAgIH0sIHVuZGVmaW5lZCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmb290ZXJzLmxlbmd0aCAmJiBoYXNEZWZpbmVkRm9vdGVyID8gX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlciwgbnVsbCwgZm9vdGVycykgOiBudWxsO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZUJvZHlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyVGFibGVCb2R5KCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM4ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgZXJyb3IgPSBfdGhpcyRwcm9wczguZXJyb3IsXG4gICAgICAgIGxvYWRpbmcgPSBfdGhpcyRwcm9wczgubG9hZGluZyxcbiAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wczguaXRlbXM7XG4gICAgICB2YXIgY29udGVudDtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjb250ZW50ID0gdGhpcy5yZW5kZXJFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgfSBlbHNlIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGVudCA9IHRoaXMucmVuZGVyRW1wdHlNZXNzYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZW50ID0gaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAgIC8vIGlmIHRoZXJlJ3MgcGFnaW5hdGlvbiB0aGUgaXRlbSdzIGluZGV4IG11c3QgYmUgYWRqdXN0ZWQgdG8gdGhlIHdoZXJlIGl0IGlzIGluIHRoZSB3aG9sZSBkYXRhc2V0XG4gICAgICAgICAgdmFyIHRhYmxlSXRlbUluZGV4ID0gaGFzUGFnaW5hdGlvbihfdGhpczQucHJvcHMpICYmIF90aGlzNC5wYWdlU2l6ZSA+IDAgPyBfdGhpczQucHJvcHMucGFnaW5hdGlvbi5wYWdlSW5kZXggKiBfdGhpczQucGFnZVNpemUgKyBpbmRleCA6IGluZGV4O1xuICAgICAgICAgIHJldHVybiBfdGhpczQucmVuZGVySXRlbVJvdyhpdGVtLCB0YWJsZUl0ZW1JbmRleCwgaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlbmRlcldpdGhFdWlUaGVtZSwgbnVsbCwgZnVuY3Rpb24gKHRoZW1lKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlQm9keSwge1xuICAgICAgICAgIGNzczogbG9hZGluZyAmJiBldWlCYXNpY1RhYmxlQm9keUxvYWRpbmcodGhlbWUpXG4gICAgICAgIH0sIGNvbnRlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckVycm9yTWVzc2FnZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJFcnJvck1lc3NhZ2UoZXJyb3IpIHtcbiAgICAgIHZhciBjb2xTcGFuID0gdGhpcy5wcm9wcy5jb2x1bW5zLmxlbmd0aCArICh0aGlzLnByb3BzLnNlbGVjdGlvbiA/IDEgOiAwKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgY29sU3BhbjogY29sU3BhbixcbiAgICAgICAgbW9iaWxlT3B0aW9uczoge1xuICAgICAgICAgIHdpZHRoOiAnMTAwJSdcbiAgICAgICAgfVxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgIHR5cGU6IFwibWludXNJbkNpcmNsZVwiLFxuICAgICAgICBjb2xvcjogXCJkYW5nZXJcIlxuICAgICAgfSksIFwiIFwiLCBlcnJvcikpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJFbXB0eU1lc3NhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyRW1wdHlNZXNzYWdlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzOSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczkuY29sdW1ucyxcbiAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHM5LnNlbGVjdGlvbixcbiAgICAgICAgbm9JdGVtc01lc3NhZ2UgPSBfdGhpcyRwcm9wczkubm9JdGVtc01lc3NhZ2U7XG4gICAgICB2YXIgY29sU3BhbiA9IGNvbHVtbnMubGVuZ3RoICsgKHNlbGVjdGlvbiA/IDEgOiAwKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgY29sU3BhbjogY29sU3BhbixcbiAgICAgICAgbW9iaWxlT3B0aW9uczoge1xuICAgICAgICAgIHdpZHRoOiAnMTAwJSdcbiAgICAgICAgfVxuICAgICAgfSwgbm9JdGVtc01lc3NhZ2UpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySXRlbVJvd1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtUm93KGl0ZW0sIHJvd0luZGV4LCBkaXNwbGF5ZWRSb3dJbmRleCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczEwLmNvbHVtbnMsXG4gICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzMTAuc2VsZWN0aW9uLFxuICAgICAgICByb3dIZWFkZXIgPSBfdGhpcyRwcm9wczEwLnJvd0hlYWRlcixcbiAgICAgICAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcCA9IF90aGlzJHByb3BzMTAuaXRlbUlkVG9FeHBhbmRlZFJvd01hcDtcbiAgICAgIHZhciBjZWxscyA9IFtdO1xuICAgICAgdmFyIGl0ZW1JZENhbGxiYWNrID0gdGhpcy5wcm9wcy5pdGVtSWQ7XG4gICAgICB2YXIgaXRlbUlkID0gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZENhbGxiYWNrKSAhPSBudWxsID8gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZENhbGxiYWNrKSA6IHJvd0luZGV4O1xuICAgICAgdmFyIHNlbGVjdGVkID0gIXNlbGVjdGlvbiA/IGZhbHNlIDogdGhpcy5zdGF0ZS5zZWxlY3Rpb24gJiYgISF0aGlzLnN0YXRlLnNlbGVjdGlvbi5maW5kKGZ1bmN0aW9uIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGdldEl0ZW1JZChzZWxlY3RlZEl0ZW0sIGl0ZW1JZENhbGxiYWNrKSA9PT0gaXRlbUlkO1xuICAgICAgfSk7XG4gICAgICB2YXIgcm93U2VsZWN0aW9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgdmFyIF90aGlzJHJlbmRlckl0ZW1TZWxlYyA9IHRoaXMucmVuZGVySXRlbVNlbGVjdGlvbkNlbGwoaXRlbUlkLCBpdGVtLCBzZWxlY3RlZCwgZGlzcGxheWVkUm93SW5kZXgpLFxuICAgICAgICAgIF90aGlzJHJlbmRlckl0ZW1TZWxlYzIgPSBfc2xpY2VkVG9BcnJheShfdGhpcyRyZW5kZXJJdGVtU2VsZWMsIDIpLFxuICAgICAgICAgIGNoZWNrYm94Q2VsbCA9IF90aGlzJHJlbmRlckl0ZW1TZWxlYzJbMF0sXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHJlbmRlckl0ZW1TZWxlYzJbMV07XG4gICAgICAgIGNlbGxzLnB1c2goY2hlY2tib3hDZWxsKTtcbiAgICAgICAgcm93U2VsZWN0aW9uRGlzYWJsZWQgPSAhIWlzRGlzYWJsZWQ7XG4gICAgICB9XG4gICAgICB2YXIgaGFzQWN0aW9ucyA9IGZhbHNlO1xuICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGNvbHVtbkluZGV4KSB7XG4gICAgICAgIHZhciBjb2x1bW5BY3Rpb25zID0gY29sdW1uLmFjdGlvbnM7XG4gICAgICAgIGlmIChjb2x1bW5BY3Rpb25zKSB7XG4gICAgICAgICAgdmFyIGhhc0N1c3RvbUFjdGlvbnMgPSBjb2x1bW5BY3Rpb25zLnNvbWUoZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuICEhYWN0aW9uLnJlbmRlcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjZWxscy5wdXNoKF90aGlzNS5yZW5kZXJJdGVtQWN0aW9uc0NlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4LCByb3dJbmRleCwgaGFzQ3VzdG9tQWN0aW9ucykpO1xuICAgICAgICAgIC8vIEEgdGFibGUgdGhlb3JldGljYWxseSBjb3VsZCBoYXZlIGJvdGggY3VzdG9tIGFuZCBkZWZhdWx0IGFjdGlvbiBpdGVtc1xuICAgICAgICAgIC8vIElmIGl0IGhhcyBib3RoLCBkZWZhdWx0IGFjdGlvbiBtb2JpbGUgcm93IHN0eWxlcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBjdXN0b21cbiAgICAgICAgICBoYXNBY3Rpb25zID0gIWhhc0FjdGlvbnMgJiYgaGFzQ3VzdG9tQWN0aW9ucyA/ICdjdXN0b20nIDogdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICB2YXIgZmllbGREYXRhQ29sdW1uID0gY29sdW1uO1xuICAgICAgICAgIGNlbGxzLnB1c2goX3RoaXM1LnJlbmRlckl0ZW1GaWVsZERhdGFDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCwgZmllbGREYXRhQ29sdW1uLmZpZWxkID09PSByb3dIZWFkZXIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjZWxscy5wdXNoKF90aGlzNS5yZW5kZXJJdGVtQ29tcHV0ZWRDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gT2NjdXB5IGZ1bGwgd2lkdGggb2YgdGFibGUsIHRha2luZyBjaGVja2JveCAmIG1vYmlsZSBvbmx5IGNvbHVtbnMgaW50byBhY2NvdW50LlxuICAgICAgdmFyIGV4cGFuZGVkUm93Q29sU3BhbiA9IHNlbGVjdGlvbiA/IGNvbHVtbnMubGVuZ3RoICsgMSA6IGNvbHVtbnMubGVuZ3RoO1xuICAgICAgdmFyIG1vYmlsZU9ubHlDb2xzID0gY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24gKG51bSwgY29sdW1uKSB7XG4gICAgICAgIHZhciBfbW9iaWxlT3B0aW9ucztcbiAgICAgICAgcmV0dXJuIGNvbHVtbiAhPT0gbnVsbCAmJiBjb2x1bW4gIT09IHZvaWQgMCAmJiAoX21vYmlsZU9wdGlvbnMgPSBjb2x1bW4ubW9iaWxlT3B0aW9ucykgIT09IG51bGwgJiYgX21vYmlsZU9wdGlvbnMgIT09IHZvaWQgMCAmJiBfbW9iaWxlT3B0aW9ucy5vbmx5ID8gbnVtICsgMSA6IG51bSArIDA7IC8vIEJXQyBvbmx5XG4gICAgICB9LCAwKTtcbiAgICAgIGV4cGFuZGVkUm93Q29sU3BhbiA9IGV4cGFuZGVkUm93Q29sU3BhbiAtIG1vYmlsZU9ubHlDb2xzO1xuXG4gICAgICAvLyBXZSdsbCB1c2UgdGhlIElEIHRvIGFzc29jaWF0ZSB0aGUgZXhwYW5kZWQgcm93IHdpdGggdGhlIG9yaWdpbmFsLlxuICAgICAgdmFyIGhhc0V4cGFuZGVkUm93ID0gaXRlbUlkVG9FeHBhbmRlZFJvd01hcCA9PT0gbnVsbCB8fCBpdGVtSWRUb0V4cGFuZGVkUm93TWFwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpdGVtSWRUb0V4cGFuZGVkUm93TWFwLmhhc093blByb3BlcnR5KGl0ZW1JZCk7XG4gICAgICB2YXIgZXhwYW5kZWRSb3dJZCA9IGhhc0V4cGFuZGVkUm93ID8gXCJyb3dfXCIuY29uY2F0KGl0ZW1JZCwgXCJfZXhwYW5zaW9uXCIpIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIGV4cGFuZGVkUm93ID0gaGFzRXhwYW5kZWRSb3cgPyBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93LCB7XG4gICAgICAgIGlkOiBleHBhbmRlZFJvd0lkLFxuICAgICAgICBpc0V4cGFuZGVkUm93OiB0cnVlLFxuICAgICAgICBoYXNTZWxlY3Rpb246ICEhc2VsZWN0aW9uXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBjb2xTcGFuOiBleHBhbmRlZFJvd0NvbFNwYW4sXG4gICAgICAgIHRleHRPbmx5OiBmYWxzZSxcbiAgICAgICAgYXBwZW5kOiB0YWJ1bGFyQ29weU1hcmtlcnMuaGlkZGVuTmV3bGluZVxuICAgICAgfSwgaXRlbUlkVG9FeHBhbmRlZFJvd01hcFtpdGVtSWRdKSkgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgcm93UHJvcHNDYWxsYmFjayA9IHRoaXMucHJvcHMucm93UHJvcHM7XG4gICAgICB2YXIgcm93UHJvcHMgPSBnZXRSb3dQcm9wcyhpdGVtLCByb3dQcm9wc0NhbGxiYWNrKTtcbiAgICAgIHZhciByb3cgPSBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93LCBfZXh0ZW5kcyh7XG4gICAgICAgIFwiYXJpYS1vd25zXCI6IGV4cGFuZGVkUm93SWQsXG4gICAgICAgIGhhc1NlbGVjdGlvbjogISFzZWxlY3Rpb24sXG4gICAgICAgIGlzU2VsZWN0YWJsZTogIXJvd1NlbGVjdGlvbkRpc2FibGVkLFxuICAgICAgICBpc1NlbGVjdGVkOiBzZWxlY3RlZCxcbiAgICAgICAgaGFzQWN0aW9uczogaGFzQWN0aW9ucyxcbiAgICAgICAgaXNFeHBhbmRhYmxlOiBoYXNFeHBhbmRlZFJvd1xuICAgICAgfSwgcm93UHJvcHMpLCBjZWxscyk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChGcmFnbWVudCwge1xuICAgICAgICBrZXk6IFwicm93X1wiLmNvbmNhdChpdGVtSWQpXG4gICAgICB9LCByb3csIGV4cGFuZGVkUm93KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySXRlbVNlbGVjdGlvbkNlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbVNlbGVjdGlvbkNlbGwoaXRlbUlkLCBpdGVtLCBzZWxlY3RlZCwgZGlzcGxheWVkUm93SW5kZXgpIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMucHJvcHMuc2VsZWN0aW9uO1xuICAgICAgdmFyIGtleSA9IFwiX3NlbGVjdGlvbl9jb2x1bW5fXCIuY29uY2F0KGl0ZW1JZCk7XG4gICAgICB2YXIgY2hlY2tlZCA9IHNlbGVjdGVkO1xuICAgICAgdmFyIGRpc2FibGVkID0gc2VsZWN0aW9uLnNlbGVjdGFibGUgJiYgIXNlbGVjdGlvbi5zZWxlY3RhYmxlKGl0ZW0pO1xuICAgICAgdmFyIHRpdGxlID0gc2VsZWN0aW9uLnNlbGVjdGFibGVNZXNzYWdlICYmIHNlbGVjdGlvbi5zZWxlY3RhYmxlTWVzc2FnZSghZGlzYWJsZWQsIGl0ZW0pO1xuICAgICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gb25DaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgICAgX3RoaXM2LmNoYW5nZVNlbGVjdGlvbihbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KF90aGlzNi5zdGF0ZS5zZWxlY3Rpb24pLCBbaXRlbV0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaXRlbUlkQ2FsbGJhY2sgPSBfdGhpczYucHJvcHMuaXRlbUlkO1xuICAgICAgICAgIF90aGlzNi5jaGFuZ2VTZWxlY3Rpb24oX3RoaXM2LnN0YXRlLnNlbGVjdGlvbi5yZWR1Y2UoZnVuY3Rpb24gKHNlbGVjdGlvbiwgc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICBpZiAoZ2V0SXRlbUlkKHNlbGVjdGVkSXRlbSwgaXRlbUlkQ2FsbGJhY2spICE9PSBpdGVtSWQpIHtcbiAgICAgICAgICAgICAgc2VsZWN0aW9uLnB1c2goc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb247XG4gICAgICAgICAgfSwgW10pKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBbX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGxDaGVja2JveCwge1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgYXBwZW5kOiB0aGlzLnJlbmRlckNvcHlDaGFyKC0xKVxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUuc2VsZWN0VGhpc1Jvd1wiLFxuICAgICAgICBkZWZhdWx0OiBcIlNlbGVjdCByb3cge2luZGV4fVwiLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICBpbmRleDogZGlzcGxheWVkUm93SW5kZXggKyAxXG4gICAgICAgIH1cbiAgICAgIH0sIGZ1bmN0aW9uIChzZWxlY3RUaGlzUm93KSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNoZWNrYm94LCB7XG4gICAgICAgICAgaWQ6IFwiXCIuY29uY2F0KF90aGlzNi50YWJsZUlkKS5jb25jYXQoa2V5LCBcIi1jaGVja2JveFwiKSxcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICAgICAgdGl0bGU6IHRpdGxlIHx8IHNlbGVjdFRoaXNSb3csXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRpdGxlIHx8IHNlbGVjdFRoaXNSb3csXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNoZWNrYm94U2VsZWN0Um93LVwiLmNvbmNhdChpdGVtSWQpXG4gICAgICAgIH0pO1xuICAgICAgfSkpLCBkaXNhYmxlZF07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1BY3Rpb25zQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtQWN0aW9uc0NlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4LCByb3dJbmRleCwgaGFzQ3VzdG9tQWN0aW9ucykge1xuICAgICAgLy8gRGlzYWJsZSBhbGwgYWN0aW9ucyBpZiBhbnkgcm93KHMpIGFyZSBzZWxlY3RlZFxuICAgICAgdmFyIGFsbERpc2FibGVkID0gdGhpcy5zdGF0ZS5zZWxlY3Rpb24ubGVuZ3RoID4gMDtcbiAgICAgIHZhciBhY3R1YWxBY3Rpb25zID0gY29sdW1uLmFjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuICFhY3Rpb24uYXZhaWxhYmxlIHx8IGFjdGlvbi5hdmFpbGFibGUoaXRlbSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChhY3R1YWxBY3Rpb25zLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgaWYgKGFsbERpc2FibGVkKSB7XG4gICAgICAgICAgLy8gSWYgYWxsIGFjdGlvbnMgYXJlIGRpc2FibGVkLCBkbyBub3Qgc2hvdyBhbnkgYWN0aW9ucyBidXQgdGhlIHBvcG92ZXIgdG9nZ2xlXG4gICAgICAgICAgYWN0dWFsQWN0aW9ucyA9IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGlmIGFueSBvZiB0aGUgYWN0aW9ucyBgaXNQcmltYXJ5YCwgYWRkIHRoZW0gaW5saW5lIGFzIHdlbGwsIGJ1dCBvbmx5IHRoZSBmaXJzdCAyLFxuICAgICAgICAgIC8vIHdoaWNoIHdlJ2xsIGZvcmNlIHRvIG9ubHkgc2hvdyBvbiBob3ZlciBmb3IgZGVza3RvcCB2aWV3c1xuICAgICAgICAgIHZhciBwcmltYXJ5QWN0aW9ucyA9IGFjdHVhbEFjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uaXNQcmltYXJ5O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFjdHVhbEFjdGlvbnMgPSBwcmltYXJ5QWN0aW9ucy5zbGljZSgwLCAyKS5tYXAoZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWN0aW9uKSwge30sIHtcbiAgICAgICAgICAgICAgc2hvd09uSG92ZXI6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBtb3JlIHRoYW4gMSBhY3Rpb24sIHdlIGRvbid0IHNob3cgdGhlbSBhbGwgaW4gdGhlIGNlbGwsIGluc3RlYWQgd2VcbiAgICAgICAgLy8gcHV0IHRoZW0gYWxsIGluIGEgcG9wb3ZlciB0b29sLiBUaGlzIGVmZmVjdGl2ZWx5IG1lYW5zIHdlIGNhbiBvbmx5IGhhdmUgYSBtYXhpbXVtXG4gICAgICAgIC8vIG9mIG9uZSB0b29sIHBlciByb3cgKGl0J3MgZWl0aGVyIGFuZCBub3JtYWwgYWN0aW9uLCBvciBpdCdzIGEgcG9wb3ZlciB0aGF0IHNob3dzIG11bHRpcGxlIGFjdGlvbnMpXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGhlcmUgd2UgY3JlYXRlIGEgc2luZ2xlIGN1c3RvbSBhY3Rpb24gdGhhdCB0cmlnZ2VycyB0aGUgcG9wb3ZlciB3aXRoIGFsbCB0aGUgY29uZmlndXJlZCBhY3Rpb25zXG5cbiAgICAgICAgYWN0dWFsQWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiAnQWxsIGFjdGlvbnMnLFxuICAgICAgICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKENvbGxhcHNlZEl0ZW1BY3Rpb25zLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlCYXNpY1RhYmxlX19jb2xsYXBzZWRBY3Rpb25zXCIsXG4gICAgICAgICAgICAgIGFjdGlvbnM6IGNvbHVtbi5hY3Rpb25zLFxuICAgICAgICAgICAgICBhY3Rpb25zRGlzYWJsZWQ6IGFsbERpc2FibGVkLFxuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgZGlzcGxheWVkUm93SW5kZXg6IHJvd0luZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdmFyIGtleSA9IFwicmVjb3JkX2FjdGlvbnNfXCIuY29uY2F0KGl0ZW1JZCwgXCJfXCIpLmNvbmNhdChjb2x1bW5JbmRleCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgIHRleHRPbmx5OiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uczogaGFzQ3VzdG9tQWN0aW9ucyA/ICdjdXN0b20nIDogdHJ1ZSxcbiAgICAgICAgYXBwZW5kOiB0aGlzLnJlbmRlckNvcHlDaGFyKGNvbHVtbkluZGV4KVxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFeHBhbmRlZEl0ZW1BY3Rpb25zLCB7XG4gICAgICAgIGFjdGlvbnM6IGFjdHVhbEFjdGlvbnMsXG4gICAgICAgIGFjdGlvbnNEaXNhYmxlZDogYWxsRGlzYWJsZWQsXG4gICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICBpdGVtOiBpdGVtXG4gICAgICB9KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1GaWVsZERhdGFDZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1GaWVsZERhdGFDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCwgc2V0U2NvcGVSb3cpIHtcbiAgICAgIHZhciBmaWVsZCA9IGNvbHVtbi5maWVsZCxcbiAgICAgICAgcmVuZGVyID0gY29sdW1uLnJlbmRlcixcbiAgICAgICAgZGF0YVR5cGUgPSBjb2x1bW4uZGF0YVR5cGU7XG4gICAgICB2YXIga2V5ID0gXCJfZGF0YV9jb2x1bW5fXCIuY29uY2F0KFN0cmluZyhmaWVsZCksIFwiX1wiKS5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGNvbHVtbkluZGV4KTtcbiAgICAgIHZhciBjb250ZW50UmVuZGVyZXIgPSByZW5kZXIgfHwgdGhpcy5nZXRSZW5kZXJlckZvckRhdGFUeXBlKGRhdGFUeXBlKTtcbiAgICAgIHZhciB2YWx1ZSA9IGdldChpdGVtLCBmaWVsZCk7XG4gICAgICB2YXIgY29udGVudCA9IGNvbnRlbnRSZW5kZXJlcih2YWx1ZSwgaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4LCBrZXksIGNvbnRlbnQsIHNldFNjb3BlUm93KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySXRlbUNvbXB1dGVkQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtQ29tcHV0ZWRDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCkge1xuICAgICAgdmFyIHJlbmRlciA9IGNvbHVtbi5yZW5kZXI7XG4gICAgICB2YXIga2V5ID0gXCJfY29tcHV0ZWRfY29sdW1uX1wiLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoY29sdW1uSW5kZXgpO1xuICAgICAgdmFyIGNvbnRlbnRSZW5kZXJlciA9IHJlbmRlciB8fCB0aGlzLmdldFJlbmRlcmVyRm9yRGF0YVR5cGUoKTtcbiAgICAgIHZhciBjb250ZW50ID0gY29udGVudFJlbmRlcmVyKGl0ZW0pO1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVySXRlbUNlbGwoaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCwga2V5LCBjb250ZW50LCBmYWxzZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1DZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1DZWxsKGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIGtleSwgY29udGVudCwgc2V0U2NvcGVSb3cpIHtcbiAgICAgIHZhciBfbW9iaWxlT3B0aW9ucyRyZW5kZXIsIF9tb2JpbGVPcHRpb25zJGhlYWRlcjtcbiAgICAgIHZhciBfcmVmMTEgPSBjb2x1bW4sXG4gICAgICAgIGFsaWduID0gX3JlZjExLmFsaWduLFxuICAgICAgICByZW5kZXIgPSBfcmVmMTEucmVuZGVyLFxuICAgICAgICBkYXRhVHlwZSA9IF9yZWYxMS5kYXRhVHlwZSxcbiAgICAgICAgaXNFeHBhbmRlciA9IF9yZWYxMS5pc0V4cGFuZGVyLFxuICAgICAgICB0ZXh0T25seSA9IF9yZWYxMS50ZXh0T25seSxcbiAgICAgICAgbmFtZSA9IF9yZWYxMS5uYW1lLFxuICAgICAgICBmaWVsZCA9IF9yZWYxMS5maWVsZCxcbiAgICAgICAgZGVzY3JpcHRpb24gPSBfcmVmMTEuZGVzY3JpcHRpb24sXG4gICAgICAgIHNvcnRhYmxlID0gX3JlZjExLnNvcnRhYmxlLFxuICAgICAgICBmb290ZXIgPSBfcmVmMTEuZm9vdGVyLFxuICAgICAgICBtb2JpbGVPcHRpb25zID0gX3JlZjExLm1vYmlsZU9wdGlvbnMsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjExLCBfZXhjbHVkZWQyKTtcbiAgICAgIHZhciBjb2x1bW5BbGlnbiA9IGFsaWduIHx8IHRoaXMuZ2V0QWxpZ25Gb3JEYXRhVHlwZShkYXRhVHlwZSk7XG4gICAgICB2YXIgY2VsbFByb3BzQ2FsbGJhY2sgPSB0aGlzLnByb3BzLmNlbGxQcm9wcztcbiAgICAgIHZhciBjZWxsUHJvcHMgPSBnZXRDZWxsUHJvcHMoaXRlbSwgY29sdW1uLCBjZWxsUHJvcHNDYWxsYmFjayk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIF9leHRlbmRzKHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGFsaWduOiBjb2x1bW5BbGlnbixcbiAgICAgICAgaXNFeHBhbmRlcjogaXNFeHBhbmRlcixcbiAgICAgICAgdGV4dE9ubHk6IHRleHRPbmx5IHx8ICFyZW5kZXIsXG4gICAgICAgIHNldFNjb3BlUm93OiBzZXRTY29wZVJvdyxcbiAgICAgICAgbW9iaWxlT3B0aW9uczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBtb2JpbGVPcHRpb25zKSwge30sIHtcbiAgICAgICAgICByZW5kZXI6IG1vYmlsZU9wdGlvbnMgPT09IG51bGwgfHwgbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwIHx8IChfbW9iaWxlT3B0aW9ucyRyZW5kZXIgPSBtb2JpbGVPcHRpb25zLnJlbmRlcikgPT09IG51bGwgfHwgX21vYmlsZU9wdGlvbnMkcmVuZGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbW9iaWxlT3B0aW9ucyRyZW5kZXIuY2FsbChtb2JpbGVPcHRpb25zLCBpdGVtKSxcbiAgICAgICAgICBoZWFkZXI6IChfbW9iaWxlT3B0aW9ucyRoZWFkZXIgPSBtb2JpbGVPcHRpb25zID09PSBudWxsIHx8IG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vYmlsZU9wdGlvbnMuaGVhZGVyKSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyRoZWFkZXIgIT09IHZvaWQgMCA/IF9tb2JpbGVPcHRpb25zJGhlYWRlciA6IG5hbWVcbiAgICAgICAgfSlcbiAgICAgIH0sIGNlbGxQcm9wcywgcmVzdCwge1xuICAgICAgICBhcHBlbmQ6IHRoaXMucmVuZGVyQ29weUNoYXIoY29sdW1uSW5kZXgpXG4gICAgICB9KSwgY29udGVudCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFJlbmRlcmVyRm9yRGF0YVR5cGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZXJGb3JEYXRhVHlwZSgpIHtcbiAgICAgIHZhciBkYXRhVHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ2F1dG8nO1xuICAgICAgdmFyIHByb2ZpbGUgPSBkYXRhVHlwZXNQcm9maWxlc1tkYXRhVHlwZV07XG4gICAgICBpZiAoIXByb2ZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBkYXRhVHlwZSBbXCIuY29uY2F0KGRhdGFUeXBlLCBcIl0uIFRoZSBzdXBwb3J0ZWQgZGF0YSB0eXBlcyBhcmUgW1wiKS5jb25jYXQoREFUQV9UWVBFUy5qb2luKCcsICcpLCBcIl1cIikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb2ZpbGUucmVuZGVyO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRBbGlnbkZvckRhdGFUeXBlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEFsaWduRm9yRGF0YVR5cGUoKSB7XG4gICAgICB2YXIgZGF0YVR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdhdXRvJztcbiAgICAgIHZhciBwcm9maWxlID0gZGF0YVR5cGVzUHJvZmlsZXNbZGF0YVR5cGVdO1xuICAgICAgaWYgKCFwcm9maWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZGF0YVR5cGUgW1wiLmNvbmNhdChkYXRhVHlwZSwgXCJdLiBUaGUgc3VwcG9ydGVkIGRhdGEgdHlwZXMgYXJlIFtcIikuY29uY2F0KERBVEFfVFlQRVMuam9pbignLCAnKSwgXCJdXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9maWxlLmFsaWduO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJQYWdpbmF0aW9uQmFyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclBhZ2luYXRpb25CYXIoKSB7XG4gICAgICB2YXIgX3RoaXM3ID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczExID0gdGhpcy5wcm9wcyxcbiAgICAgICAgZXJyb3IgPSBfdGhpcyRwcm9wczExLmVycm9yLFxuICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHMxMS5wYWdpbmF0aW9uLFxuICAgICAgICB0YWJsZUNhcHRpb24gPSBfdGhpcyRwcm9wczExLnRhYmxlQ2FwdGlvbixcbiAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczExLm9uQ2hhbmdlO1xuICAgICAgaWYgKCFlcnJvciAmJiBwYWdpbmF0aW9uICYmIHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGlmICghb25DaGFuZ2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgQmFzaWMgVGFibGUgaXMgY29uZmlndXJlZCB3aXRoIHBhZ2luYXRpb24gYnV0IFtvbkNoYW5nZV0gaXNcXG4gICAgICAgIG5vdCBjb25maWd1cmVkLiBUaGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHBhZ2luYXRpb24gY2hhbmdlc1wiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZVBhZ2luYXRpb25cIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlBhZ2luYXRpb24gZm9yIHRhYmxlOiB7dGFibGVDYXB0aW9ufVwiLFxuICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgdGFibGVDYXB0aW9uOiB0YWJsZUNhcHRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0YWJsZVBhZ2luYXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQmFyLCB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uOiBwYWdpbmF0aW9uLFxuICAgICAgICAgICAgb25QYWdlU2l6ZUNoYW5nZTogX3RoaXM3Lm9uUGFnZVNpemVDaGFuZ2UuYmluZChfdGhpczcpLFxuICAgICAgICAgICAgb25QYWdlQ2hhbmdlOiBfdGhpczcub25QYWdlQ2hhbmdlLmJpbmQoX3RoaXM3KSxcbiAgICAgICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiBfdGhpczcudGFibGVJZCxcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiB0YWJsZVBhZ2luYXRpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKCFuZXh0UHJvcHMuc2VsZWN0aW9uKSB7XG4gICAgICAgIC8vIG5leHQgcHJvcHMgZG9lc24ndCBoYXZlIGEgc2VsZWN0aW9uLCByZXNldCBvdXIgc3RhdGVcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZWxlY3Rpb246IFtdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgY29udHJvbGxlZFNlbGVjdGlvbiA9IG5leHRQcm9wcy5zZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gICAgICB2YXIgdW5maWx0ZXJlZFNlbGVjdGlvbiA9IGNvbnRyb2xsZWRTZWxlY3Rpb24gIT09IG51bGwgJiYgY29udHJvbGxlZFNlbGVjdGlvbiAhPT0gdm9pZCAwID8gY29udHJvbGxlZFNlbGVjdGlvbiA6IHByZXZTdGF0ZS5zZWxlY3Rpb247XG5cbiAgICAgIC8vIEVuc3VyZSB3ZSdyZSBub3QgaW5jbHVkaW5nIHNlbGVjdGlvbnMgdGhhdCBhcmVuJ3QgaW4gdGhlXG4gICAgICAvLyBjdXJyZW50IGBpdGVtc2AgYXJyYXkgKGFmZmVjdGVkIGJ5IHBhZ2luYXRpb24pXG4gICAgICB2YXIgaXRlbUlkID0gbmV4dFByb3BzLml0ZW1JZCxcbiAgICAgICAgaXRlbXMgPSBuZXh0UHJvcHMuaXRlbXM7XG4gICAgICB2YXIgc2VsZWN0aW9uID0gdW5maWx0ZXJlZFNlbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbXMuZmluZEluZGV4KGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGdldEl0ZW1JZChpdGVtLCBpdGVtSWQpID09PSBnZXRJdGVtSWQoc2VsZWN0ZWRJdGVtLCBpdGVtSWQpO1xuICAgICAgICB9KSAhPT0gLTE7XG4gICAgICB9KTtcblxuICAgICAgLy8gSWYgc29tZSBzZWxlY3RlZCBpdGVtcyB3ZXJlIGZpbHRlcmVkIG91dCwgdXBkYXRlIHN0YXRlIGFuZCBjYWxsYmFja1xuICAgICAgaWYgKHNlbGVjdGlvbi5sZW5ndGggIT09IHVuZmlsdGVyZWRTZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgIHZhciBfbmV4dFByb3BzJHNlbGVjdGlvbiQsIF9uZXh0UHJvcHMkc2VsZWN0aW9uO1xuICAgICAgICAoX25leHRQcm9wcyRzZWxlY3Rpb24kID0gKF9uZXh0UHJvcHMkc2VsZWN0aW9uID0gbmV4dFByb3BzLnNlbGVjdGlvbikub25TZWxlY3Rpb25DaGFuZ2UpID09PSBudWxsIHx8IF9uZXh0UHJvcHMkc2VsZWN0aW9uJCA9PT0gdm9pZCAwIHx8IF9uZXh0UHJvcHMkc2VsZWN0aW9uJC5jYWxsKF9uZXh0UHJvcHMkc2VsZWN0aW9uLCBzZWxlY3Rpb24pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEFsd2F5cyB1cGRhdGUgc2VsZWN0aW9uIHN0YXRlIGZyb20gcHJvcHMgaWYgY29udHJvbGxlZFxuICAgICAgaWYgKGNvbnRyb2xsZWRTZWxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZWxlY3Rpb246IHNlbGVjdGlvblxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XSk7XG59KENvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoRXVpQmFzaWNUYWJsZSwgXCJjb250ZXh0VHlwZVwiLCBFdWlDb21wb25lbnREZWZhdWx0c0NvbnRleHQpO1xuX2RlZmluZVByb3BlcnR5KEV1aUJhc2ljVGFibGUsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgdGFibGVMYXlvdXQ6ICdmaXhlZCcsXG4gIG5vSXRlbXNNZXNzYWdlOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLm5vSXRlbXNNZXNzYWdlXCIsXG4gICAgZGVmYXVsdDogXCJObyBpdGVtcyBmb3VuZFwiXG4gIH0pXG59KTtcbkV1aUJhc2ljVGFibGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNzczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAgICogRGVzY3JpYmVzIGhvdyB0byBleHRyYWN0IGEgdW5pcXVlIElEIGZyb20gZWFjaCBpdGVtLCB1c2VkIGZvciBzZWxlY3Rpb25zICYgZXhwYW5kZWQgcm93c1xuICAgICAqL1xuICAvKipcbiAgICAgKiBEZXNjcmliZXMgaG93IHRvIGV4dHJhY3QgYSB1bmlxdWUgSUQgZnJvbSBlYWNoIGl0ZW0sIHVzZWQgZm9yIHNlbGVjdGlvbnMgJiBleHBhbmRlZCByb3dzXG4gICAgICovXG4gIGl0ZW1JZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcbiAgLyoqXG4gICAgICogUm93IGV4cGFuc2lvbiB1c2VzIHRoZSBpdGVtSWQgcHJvcCB0byBpZGVudGlmeSBlYWNoIHJvd1xuICAgICAqL1xuICAvKipcbiAgICAgKiBSb3cgZXhwYW5zaW9uIHVzZXMgdGhlIGl0ZW1JZCBwcm9wIHRvIGlkZW50aWZ5IGVhY2ggcm93XG4gICAgICovXG4gIGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXA6IFByb3BUeXBlcy5zaGFwZSh7fSksXG4gIC8qKlxuICAgICAqIEEgbGlzdCBvZiBvYmplY3RzIHRvIGFwcGVhciBpbiB0aGUgdGFibGUgLSBhbiBpdGVtIHBlciByb3dcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQSBsaXN0IG9mIG9iamVjdHMgdG8gYXBwZWFyIGluIHRoZSB0YWJsZSAtIGFuIGl0ZW0gcGVyIHJvd1xuICAgICAqL1xuICBpdGVtczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgLyoqXG4gICAgICogQXBwbGllZCB0byBgRXVpVGFibGVSb3dDZWxsYFxuICAgICAqL1xuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd0NlbGxgXG4gICAgICovXG4gIGNlbGxQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIG9uZSBvZiB0aGUgb2JqZWN0czogI0V1aVRhYmxlRmllbGREYXRhQ29sdW1uVHlwZSwgI0V1aVRhYmxlQ29tcHV0ZWRDb2x1bW5UeXBlIG9yICNFdWlUYWJsZUFjdGlvbnNDb2x1bW5UeXBlLlxuICAgICAqL1xuICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBvbmUgb2YgdGhlIG9iamVjdHM6ICNFdWlUYWJsZUZpZWxkRGF0YUNvbHVtblR5cGUsICNFdWlUYWJsZUNvbXB1dGVkQ29sdW1uVHlwZSBvciAjRXVpVGFibGVBY3Rpb25zQ29sdW1uVHlwZS5cbiAgICAgKi9cbiAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEEgZmllbGQgb2YgdGhlIGl0ZW0gKG1heSBiZSBhIG5lc3RlZCBmaWVsZClcbiAgICAgICAqL1xuICAgIC8vIHR5cGUgaGFjayB1c2VkIGZvciBiZXR0ZXIgYXV0b2NvbXBsZXRlIHN1cHBvcnRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI5NzI5XG4gICAgZmllbGQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgICAvLyBzdXBwb3J0cyBvdXRlci5pbm5lciBrZXkgcGF0aHNcbiAgICAvKipcbiAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICAvKipcbiAgICAgICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIGNvbHVtbiAod2lsbCBiZSBwcmVzZW50ZWQgYXMgYSB0aXRsZSBvdmVyIHRoZSBjb2x1bW4gaGVhZGVyKVxuICAgICAgICovXG4gICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLyoqXG4gICAgICAgKiBEZXNjcmliZXMgdGhlIGRhdGEgdHlwZXMgb2YgdGhlIGRpc3BsYXllZCB2YWx1ZSAoc2VydmVzIGFzIGEgcmVuZGVyaW5nIGhpbnQgZm9yIHRoZSB0YWJsZSlcbiAgICAgICAqL1xuICAgIGRhdGFUeXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYXV0b1wiLCBcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImJvb2xlYW5cIiwgXCJkYXRlXCJdKSxcbiAgICAvKipcbiAgICAgICAqIEEgQ1NTIHdpZHRoIHByb3BlcnR5LiBIaW50cyBmb3IgdGhlIHJlcXVpcmVkIHdpZHRoIG9mIHRoZSBjb2x1bW4gKGUuZy4gXCIzMCVcIiwgXCIxMDBweFwiLCBldGMuLilcbiAgICAgICAqL1xuICAgIHdpZHRoOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKlxuICAgICAgICogRGVmaW5lcyB3aGV0aGVyIHRoZSB1c2VyIGNhbiBzb3J0IG9uIHRoaXMgY29sdW1uLiBJZiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIHRvIHNvcnQgYWdhaW5zdFxuICAgICAgICovXG4gICAgc29ydGFibGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcbiAgICAvKipcbiAgICAgICAqIERpc2FibGVzIHRoZSB1c2VyJ3MgYWJpbGl0eSB0byBjaGFuZ2UgdGhlIHNvcnQsIGJ1dCB3aWxsIHN0aWxsXG4gICAgICAgKiBzaG93IHRoZSBjdXJyZW50IHNvcnQgZGlyZWN0aW9uIGluIHRoZSBjb2x1bW4gaGVhZGVyXG4gICAgICAgKi9cbiAgICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBEZWZpbmVzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGUgY29sdW1uXG4gICAgICAgKiBAZGVmYXVsdCBsZWZ0XG4gICAgICAgKi9cbiAgICBhbGlnbjogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSB0ZXh0IHdyYXBwZXIgYXJvdW5kIGNlbGwgY29udGVudCB0aGF0IGhlbHBzIHdvcmQgYnJlYWsgb3IgdHJ1bmNhdGVcbiAgICAgICAqIGxvbmcgdGV4dCBjb3JyZWN0bHkuXG4gICAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICAgKi9cbiAgICB0ZXh0T25seTogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGNvbHVtbiBzaG91bGQgdHJ1bmNhdGUgb3ZlcmZsb3dpbmcgdGV4dCBjb250ZW50LlxuICAgICAgICogLSBTZXQgdG8gYHRydWVgIHRvIGVuYWJsZSBzaW5nbGUtbGluZSB0cnVuY2F0aW9uLlxuICAgICAgICogLSBUbyBlbmFibGUgbXVsdGktbGluZSB0cnVuY2F0aW9uLCB1c2UgYSBjb25maWd1cmF0aW9uIG9iamVjdCB3aXRoIGBsaW5lc2BcbiAgICAgICAqIHNldCB0byBhIG51bWJlciBvZiBsaW5lcyB0byB0cnVuY2F0ZSB0by5cbiAgICAgICAqL1xuICAgIHRydW5jYXRlVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGxpbmVzOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRcbiAgICB9KS5pc1JlcXVpcmVkXSksXG4gICAgLyoqXG4gICAgICAgKiBBbGxvd3MgY29uZmlndXJpbmcgY3VzdG9tIHJlbmRlciBvcHRpb25zIG9yIGFwcGVhcmFuY2VzIGZvciBjb2x1bW4gY2VsbHNcbiAgICAgICAqIHdoZW4gdGhlIHRhYmxlIHJlc3BvbnNpdmVseSBjb2xsYXBzZXMgaW50byBhIG1vYmlsZS1mcmllbmRseSB2aWV3XG4gICAgICAgKi9cbiAgICBtb2JpbGVPcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuY1xuICAgIH0pLFxuICAgIC8qKlxuICAgICAgICogRGVzY3JpYmUgYSBjdXN0b20gcmVuZGVyZXIgZnVuY3Rpb24gZm9yIHRoZSBjb250ZW50XG4gICAgICAgKi9cbiAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogQ29udGVudCB0byBkaXNwbGF5IGluIHRoZSBmb290ZXIgYmVuZWF0aCB0aGlzIGNvbHVtblxuICAgICAgICovXG4gICAgZm9vdGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcbiAgICAvKipcbiAgICAgICAqIElmIHBhc3NpbmcgYGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXBgIHRvIHlvdXIgdGFibGUsIHNldCB0aGlzIGZsYWcgdG8gYHRydWVgXG4gICAgICAgKiBmb3IgdGhlIGN1c3RvbSBjb2x1bW4gb3IgY2VsbCB1c2VkIHRvIHRvZ2dsZSB0aGUgZXhwYW5kZWQgcm93LlxuICAgICAgICovXG4gICAgaXNFeHBhbmRlcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjc3M6IFByb3BUeXBlcy5hbnlcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNzczogUHJvcFR5cGVzLmFueSxcbiAgICAvKipcbiAgICAgICAgICogQSBmdW5jdGlvbiB0aGF0IGNvbXB1dGVzIHRoZSB2YWx1ZSBmb3IgZWFjaCBpdGVtIGFuZCByZW5kZXJzIGl0XG4gICAgICAgICAqL1xuICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAvKipcbiAgICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgY29sdW1uXG4gICAgICAgICAqL1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLFxuICAgIC8qKlxuICAgICAgICAgKiBJZiBwcm92aWRlZCwgYWxsb3dzIHRoaXMgY29sdW1uIHRvIGJlIHNvcnRlZCBvbi4gTXVzdCByZXR1cm4gdGhlIHZhbHVlIHRvIHNvcnQgYWdhaW5zdC5cbiAgICAgICAgICovXG4gICAgc29ydGFibGU6IFByb3BUeXBlcy5mdW5jXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBbiBhcnJheSBvZiBvbmUgb2YgdGhlIG9iamVjdHM6ICNEZWZhdWx0SXRlbUFjdGlvbiBvciAjQ3VzdG9tSXRlbUFjdGlvblxuICAgICAgICovXG4gICAgYWN0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdHlwZSBvZiBhY3Rpb25cbiAgICAgICAgICovXG4gICAgICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCJdKSwgUHJvcFR5cGVzLm9uZU9mKFtcImljb25cIl0pLmlzUmVxdWlyZWRdKSxcbiAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBjb2xvciBvZiB0aGUgYnV0dG9uXG4gICAgICAgICAqL1xuICAgICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGFjdGlvbiAod2lsbCByZW5kZXIgYXMgdmlzaWJsZSB0ZXh0IGlmIHJlbmRlcmVkIHdpdGhpbiBhIGNvbGxhcHNlZCBtZW51KVxuICAgICAgICAgKi9cbiAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBhY3Rpb24gKHdpbGwgcmVuZGVyIGFzIHZpc2libGUgdGV4dCBpZiByZW5kZXJlZCB3aXRoaW4gYSBjb2xsYXBzZWQgbWVudSlcbiAgICAgICAgICovXG4gICAgICBuYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgICAgIC8qKlxuICAgICAgICAgKiBEZXNjcmliZXMgdGhlIGFjdGlvbiAod2lsbCByZW5kZXIgYXMgdG9vbHRpcCBjb250ZW50KVxuICAgICAgICAgKi9cbiAgICAgIC8qKlxuICAgICAgICAgKiBEZXNjcmliZXMgdGhlIGFjdGlvbiAod2lsbCByZW5kZXIgYXMgdG9vbHRpcCBjb250ZW50KVxuICAgICAgICAgKi9cbiAgICAgIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgICAgLyoqXG4gICAgICAgICAqIEEgaGFuZGxlciBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBhY3Rpb24uIFBhc3NlcyBiYWNrIHRoZSBjdXJyZW50IHJvd1xuICAgICAgICAgKiBpdGVtIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgYW5kIHRoZSBvcmlnaW5hdGluZyBSZWFjdCBjbGljayBldmVudFxuICAgICAgICAgKiBhcyBhIHNlY29uZCBhcmd1bWVudC5cbiAgICAgICAgICovXG4gICAgICAvKipcbiAgICAgICAgICogQSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGFjdGlvbi4gUGFzc2VzIGJhY2sgdGhlIGN1cnJlbnQgcm93XG4gICAgICAgICAqIGl0ZW0gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCBhbmQgdGhlIG9yaWdpbmF0aW5nIFJlYWN0IGNsaWNrIGV2ZW50XG4gICAgICAgICAqIGFzIGEgc2Vjb25kIGFyZ3VtZW50LlxuICAgICAgICAgKi9cbiAgICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgaHJlZjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gICAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICAgKi9cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgICAqL1xuICAgICAgYXZhaWxhYmxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICAgKi9cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICAgKi9cbiAgICAgIGVuYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcbiAgICAgIC8qKlxuICAgICAgICAgKiBJZiBtb3JlIHRoYW4gMyBhY3Rpb25zIGFyZSBwYXNzZWQsIDIgcHJpbWFyeSBhY3Rpb25zIHdpbGwgc2hvdyAob24gaG92ZXIpXG4gICAgICAgICAqIG5leHQgdG8gYW4gZXhwYW5zaW9uIG1lbnUgb2YgYWxsIGFjdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIE9uIG1vYmlsZSwgcHJpbWFyeSBhY3Rpb25zIHdpbGwgYmUgdHVja2VkIGF3YXkgaW4gdGhlIGV4cGFuc2lvbiBtZW51IGZvciBzcGFjZS5cbiAgICAgICAgICovXG4gICAgICAvKipcbiAgICAgICAgICogSWYgbW9yZSB0aGFuIDMgYWN0aW9ucyBhcmUgcGFzc2VkLCAyIHByaW1hcnkgYWN0aW9ucyB3aWxsIHNob3cgKG9uIGhvdmVyKVxuICAgICAgICAgKiBuZXh0IHRvIGFuIGV4cGFuc2lvbiBtZW51IG9mIGFsbCBhY3Rpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBPbiBtb2JpbGUsIHByaW1hcnkgYWN0aW9ucyB3aWxsIGJlIHR1Y2tlZCBhd2F5IGluIHRoZSBleHBhbnNpb24gbWVudSBmb3Igc3BhY2UuXG4gICAgICAgICAqL1xuICAgICAgaXNQcmltYXJ5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIC8qKlxuICAgICAgICAgKiBBbGxvd3Mgb25seSBzaG93aW5nIHRoZSBhY3Rpb24gb24gbW91c2UgaG92ZXIgb3Iga2V5Ym9hcmQgZm9jdXMuXG4gICAgICAgICAqIElmIG1vcmUgdGhhbiAzIGFjdGlvbnMgYXJlIHBhc3NlZCwgdGhpcyB3aWxsIGFsd2F5cyBiZSB0cnVlIGZvciBgaXNQcmltYXJ5YCBhY3Rpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBIYXMgbm8gZWZmZWN0IG9uIG1vYmlsZSwgb3IgaWYgYGhhc0FjdGlvbnNgIGlzIG5vdCBzZXQuXG4gICAgICAgICAqL1xuICAgICAgLyoqXG4gICAgICAgICAqIEFsbG93cyBvbmx5IHNob3dpbmcgdGhlIGFjdGlvbiBvbiBtb3VzZSBob3ZlciBvciBrZXlib2FyZCBmb2N1cy5cbiAgICAgICAgICogSWYgbW9yZSB0aGFuIDMgYWN0aW9ucyBhcmUgcGFzc2VkLCB0aGlzIHdpbGwgYWx3YXlzIGJlIHRydWUgZm9yIGBpc1ByaW1hcnlgIGFjdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEhhcyBubyBlZmZlY3Qgb24gbW9iaWxlLCBvciBpZiBgaGFzQWN0aW9uc2AgaXMgbm90IHNldC5cbiAgICAgICAgICovXG4gICAgICBzaG93T25Ib3ZlcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAvKipcbiAgICAgICAgICogQXNzb2NpYXRlcyBhbiBpY29uIHdpdGggdGhlIGJ1dHRvblxuICAgICAgICAgKi9cbiAgICAgIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhbm9tYWx5Q2hhcnRcIiwgXCJhbm9tYWx5U3dpbUxhbmVcIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFydGljbGVcIiwgXCJhc3Rlcmlza1wiLCBcImF0XCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJldGFcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hhbmdlUG9pbnREZXRlY3Rpb25cIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xpY2tMZWZ0XCIsIFwiY2xpY2tSaWdodFwiLCBcImNsb2NrXCIsIFwiY2xvY2tDb3VudGVyXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5DaXJjbGVcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlmZlwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZGlzY3Vzc1wiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdEluQ2lyY2xlXCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVuZHBvaW50XCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXJyb3JcIiwgXCJlcnJvckZpbGxlZFwiLCBcImVzcWxWaXNcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpZWxkU3RhdGlzdGljc1wiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyRXhjbHVkZVwiLCBcImZpbHRlcklnbm9yZVwiLCBcImZpbHRlckluY2x1ZGVcIiwgXCJmaWx0ZXJJbkNpcmNsZVwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFiT21uaWRpcmVjdGlvbmFsXCIsIFwiZ3JhZGllbnRcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4XCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbmRleFRlbXBvcmFyeVwiLCBcImluZmluaXR5XCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxhdW5jaFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ1BhdHRlcm5BbmFseXNpc1wiLCBcImxvZ1JhdGVBbmFseXNpc1wiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29WdWxuZXJhYmlsaXR5TWFuYWdlbWVudFwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtaW51c0luU3F1YXJlXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJtb3ZlXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibmV3Q2hhdFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYWxldHRlXCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlQnJlYWtzXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwaXBlTm9CcmVha3NcIiwgXCJwaXZvdFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBsdXNJblNxdWFyZVwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzaW5nbGVNZXRyaWNWaWV3ZXJcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0QXNjZW5kaW5nXCIsIFwic29ydERlc2NlbmRpbmdcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcGFya2xlc1wiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW5lV2l0aEFycm93XCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYW5zaXRpb25MZWZ0SW5cIiwgXCJ0cmFuc2l0aW9uTGVmdE91dFwiLCBcInRyYW5zaXRpb25Ub3BJblwiLCBcInRyYW5zaXRpb25Ub3BPdXRcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcInZ1bG5lcmFiaWxpdHlNYW5hZ2VtZW50QXBwXCIsIFwid2FybmluZ1wiLCBcIndhcm5pbmdGaWxsZWRcIiwgXCJhbGVydFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRpbWVuc2lvblwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNlbWFudGljVGV4dFwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIiwgXCJ0b2tlblZlY3RvckRlbnNlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuVmVjdG9yU3BhcnNlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSlcbiAgICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgLyoqXG4gICAgICAgICAqIEFsbG93cyByZW5kZXJpbmcgYSB0b3RhbGx5IGN1c3RvbSBhY3Rpb25cbiAgICAgICAgICovXG4gICAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayB0aGF0IGRlZmluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICAgKi9cbiAgICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayB0aGF0IGRlZmluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAgICovXG4gICAgICBlbmFibGVkOiBQcm9wVHlwZXMuZnVuY1xuICAgIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuICAgIC8qKlxuICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgY29sdW1uXG4gICAgICAgKi9cbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZVxuICB9KS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCksXG4gIC8qKlxuICAgICAqIEVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheVxuICAgICAqL1xuICAvKipcbiAgICAgKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXlcbiAgICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyB0aGUgY29udGVudCBvZiB0aGUgdGFibGUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjYXB0aW9uIHdpbGwgYmUgXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3MuXCJcbiAgICAgKi9cbiAgLyoqXG4gICAgICogRGVzY3JpYmVzIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGNhcHRpb24gd2lsbCBiZSBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93cy5cIlxuICAgICAqL1xuICB0YWJsZUNhcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGljaCBjb2x1bW4gc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGlkZW50aWZ5aW5nIGNlbGwgaW4gZWFjaCByb3cuIFNob3VsZCBtYXRjaCBhIFwiZmllbGRcIiBwcm9wIGluIEZpZWxkRGF0YUNvbHVtblxuICAgICAqL1xuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hpY2ggY29sdW1uIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBpZGVudGlmeWluZyBjZWxsIGluIGVhY2ggcm93LiBTaG91bGQgbWF0Y2ggYSBcImZpZWxkXCIgcHJvcCBpbiBGaWVsZERhdGFDb2x1bW5cbiAgICAgKi9cbiAgcm93SGVhZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICAgKiBQcm92aWRlcyBhbiBpbmZpbml0ZSBsb2FkaW5nIGluZGljYXRvclxuICAgICAqL1xuICAvKipcbiAgICAgKiBQcm92aWRlcyBhbiBpbmZpbml0ZSBsb2FkaW5nIGluZGljYXRvclxuICAgICAqL1xuICBsb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAgICogTWVzc2FnZSB0byBkaXNwbGF5IGlmIHRhYmxlIGlzIGVtcHR5XG4gICAgICovXG4gIC8qKlxuICAgICAqIE1lc3NhZ2UgdG8gZGlzcGxheSBpZiB0YWJsZSBpcyBlbXB0eVxuICAgICAqL1xuICBub0l0ZW1zTWVzc2FnZTogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgICAqIENhbGxlZCB3aGVuZXZlciBwYWdpbmF0aW9uIG9yIHNvcnRpbmcgY2hhbmdlcyAodGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCB3aGVuIGVpdGhlciBwYWdpbmF0aW9uIG9yIHNvcnRpbmcgaXMgY29uZmlndXJlZCkuIFNlZSAjQ3JpdGVyaWEgb3IgI0NyaXRlcmlhV2l0aFBhZ2luYXRpb25cbiAgICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNQYWdpbmF0aW9uXG4gICAgICovXG4gIHBhZ2luYXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdW5kZWZpbmVkXSksIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBUaGUgY3VycmVudCBwYWdlICh6ZXJvLWJhc2VkKSBpbmRleFxuICAgICAgICovXG4gICAgcGFnZUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgLyoqXG4gICAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgc2hvd24gaW4gYSBzaW5nbGUgcGFnZS5cbiAgICAgICAqIFBhc3MgYDBgIHRvIGRpc3BsYXkgdGhlIHNlbGVjdGVkIFwiU2hvdyBhbGxcIiBvcHRpb24gYW5kIGhpZGUgdGhlIHBhZ2luYXRpb24uXG4gICAgICAgKlxuICAgICAgICogQGRlZmF1bHQgMTBcbiAgICAgICAqL1xuICAgIHBhZ2VTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIC8qKlxuICAgICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyB0aGUgcGFnZSBpcyBcInNsaWNlZFwiIG9mXG4gICAgICAgKi9cbiAgICB0b3RhbEl0ZW1Db3VudDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIC8qKlxuICAgICAgICogQ29uZmlndXJlcyB0aGUgcGFnZSBzaXplIGRyb3Bkb3duIG9wdGlvbnMuXG4gICAgICAgKiBQYXNzIGAwYCBhcyBvbmUgb2YgdGhlIG9wdGlvbnMgdG8gY3JlYXRlIGEgXCJTaG93IGFsbFwiIG9wdGlvbi5cbiAgICAgICAqXG4gICAgICAgKiBAZGVmYXVsdCBbMTAsIDI1LCA1MF1cbiAgICAgICAqL1xuICAgIHBhZ2VTaXplT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkKSxcbiAgICAvKipcbiAgICAgICAqIFNldCB0byBmYWxzZSB0byBoaWRlIHRoZSBwYWdlIHNpemUgZHJvcGRvd25cbiAgICAgICAqXG4gICAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICAgKi9cbiAgICBzaG93UGVyUGFnZU9wdGlvbnM6IFByb3BUeXBlcy5ib29sXG4gIH0pXSksXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gYEV1aVRhYmxlUm93YFxuICAgICAqL1xuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd2BcbiAgICAgKi9cbiAgcm93UHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNFdWlUYWJsZVNlbGVjdGlvblR5cGVcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQ29uZmlndXJlcyAjRXVpVGFibGVTZWxlY3Rpb25UeXBlXG4gICAgICovXG4gIHNlbGVjdGlvbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgaXRlbSBzZWxlY3Rpb24gY2hhbmdlcy5cbiAgICAgICAqXG4gICAgICAgKiBSZXF1aXJlZCBpZiBgc2VsZWN0ZWRgIGlzIHBhc3NlZC5cbiAgICAgICAqL1xuICAgIG9uU2VsZWN0aW9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgcGVyIGl0ZW0gdG8gaW5kaWNhdGUgd2hldGhlciBpdCBpcyBzZWxlY3RhYmxlXG4gICAgICAgKi9cbiAgICBzZWxlY3RhYmxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgcGVyIGl0ZW0gdG8gcmV0cmlldmUgYSBtZXNzYWdlIGZvciBpdHMgc2VsZWN0YWJsZSBzdGF0ZS5cbiAgICAgICAqIFdlIGRpc3BsYXkgdGhlc2UgbWVzc2FnZXMgYXMgYSB0b29sdGlwIG9uIGFuIHVuc2VsZWN0YWJsZSBjaGVja2JveFxuICAgICAgICovXG4gICAgc2VsZWN0YWJsZU1lc3NhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAgICogU2V0cyBpbml0aWFsbHkgc2VsZWN0ZWQgaXRlbXMuIFVzZSBmb3IgdW5jb250cm9sbGVkIHNlbGVjdGlvbiBiZWhhdmlvciAoY2hlY2tib3hcbiAgICAgICAqIHdpbGwgb25seSBjaGFuZ2UgZnJvbSB1c2VyIGlucHV0LCBhbmQgbm90IGZyb20gZGV2ZWxvcGVyIGNvbnRyb2wpLlxuICAgICAgICpcbiAgICAgICAqIFRoaXMgcHJvcCB3aWxsIGJlIGlnbm9yZWQgaWYgYHNlbGVjdGVkYCBpcyBwYXNzZWQuXG4gICAgICAgKi9cbiAgICBpbml0aWFsU2VsZWN0ZWQ6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gICAgLyoqXG4gICAgICAgKiBVc2VkIGZvciBjb250cm9sbGVkIHNlbGVjdGlvbiBiZWhhdmlvciwgZS5nLiB3aGVuIHlvdSB3YW50IHRvIHByb2dyYW1tYXRpY2FsbHlcbiAgICAgICAqIGNvbnRyb2wgd2hpY2ggc2VsZWN0aW9uIGNoZWNrYm94ZXMgYXJlIGNoZWNrZWQsIGFuZCB3aGljaCBhcmUgbm90LlxuICAgICAgICovXG4gICAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZClcbiAgfSksXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU29ydGluZ1R5cGVcbiAgICAgKi9cbiAgLyoqXG4gICAgICogQ29uZmlndXJlcyAjRXVpVGFibGVTb3J0aW5nVHlwZVxuICAgICAqL1xuICBzb3J0aW5nOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogSW5kaWNhdGVzIHRoZSBwcm9wZXJ0eS9maWVsZCB0byBzb3J0IG9uXG4gICAgICAgKi9cbiAgICBzb3J0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgZmllbGQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICAgIGRpcmVjdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcImFzY1wiLCBcImRlc2NcIl0pLmlzUmVxdWlyZWRcbiAgICB9KSxcbiAgICAvKipcbiAgICAgICAqIEVuYWJsZXMvZGlzYWJsZXMgdW5zb3J0aW5nIG9mIHRhYmxlIGNvbHVtbnMuIFN1cHBvcnRlZCBieSBFdWlJbk1lbW9yeVRhYmxlLlxuICAgICAgICovXG4gICAgYWxsb3dOZXV0cmFsU29ydDogUHJvcFR5cGVzLmJvb2wsXG4gICAgLyoqXG4gICAgICAgKiBFbmFibGVzIHRoZSBkZWZhdWx0IHNvcnRpbmcgYWJpbGl0eSBmb3IgZWFjaCBjb2x1bW4uXG4gICAgICAgKi9cbiAgICBlbmFibGVBbGxDb2x1bW5zOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgICAqIERpc2FibGVzIHRoZSB1c2VyJ3MgYWJpbGl0eSB0byBjaGFuZ2UgdGhlIHNvcnQgYnV0IHN0aWxsIHNob3dzIHRoZSBjdXJyZW50IGRpcmVjdGlvblxuICAgICAgICovXG4gICAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sXG4gIH0pLFxuICAvKipcbiAgICAgKiBTZXRzIHRoZSB0YWJsZS1sYXlvdXQgQ1NTIHByb3BlcnR5LiBOb3RlIHRoYXQgYXV0byB0YWJsZUxheW91dCBwcmV2ZW50cyB0cnVuY2F0ZVRleHQgZnJvbSB3b3JraW5nIHByb3Blcmx5LlxuICAgICAqL1xuICAvKipcbiAgICAgKiBTZXRzIHRoZSB0YWJsZS1sYXlvdXQgQ1NTIHByb3BlcnR5LiBOb3RlIHRoYXQgYXV0byB0YWJsZUxheW91dCBwcmV2ZW50cyB0cnVuY2F0ZVRleHQgZnJvbSB3b3JraW5nIHByb3Blcmx5LlxuICAgICAqL1xuICB0YWJsZUxheW91dDogUHJvcFR5cGVzLm9uZU9mKFtcImZpeGVkXCIsIFwiYXV0b1wiXSlcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHsgaWYgKHIpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7IH0gfVxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgeyAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7IGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdOyByZXR1cm4gbjsgfVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTsgaWYgKG51bGwgIT0gdCkgeyB2YXIgZSwgbiwgaSwgdSwgYSA9IFtdLCBmID0gITAsIG8gPSAhMTsgdHJ5IHsgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgeyBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47IGYgPSAhMTsgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApOyB9IGNhdGNoIChyKSB7IG8gPSAhMCwgbiA9IHI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSwgRXVpQ29udGV4dE1lbnVQYW5lbCB9IGZyb20gJy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBFdWlQb3BvdmVyIH0gZnJvbSAnLi4vcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi90b29sX3RpcCc7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBpc0N1c3RvbUl0ZW1BY3Rpb24sIGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24gfSBmcm9tICcuL2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDb2xsYXBzZWRJdGVtQWN0aW9ucyA9IGZ1bmN0aW9uIENvbGxhcHNlZEl0ZW1BY3Rpb25zKF9yZWYpIHtcbiAgdmFyIGFjdGlvbnMgPSBfcmVmLmFjdGlvbnMsXG4gICAgaXRlbUlkID0gX3JlZi5pdGVtSWQsXG4gICAgaXRlbSA9IF9yZWYuaXRlbSxcbiAgICBhY3Rpb25zRGlzYWJsZWQgPSBfcmVmLmFjdGlvbnNEaXNhYmxlZCxcbiAgICBkaXNwbGF5ZWRSb3dJbmRleCA9IF9yZWYuZGlzcGxheWVkUm93SW5kZXgsXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWU7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgcG9wb3Zlck9wZW4gPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldFBvcG92ZXJPcGVuID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIGNsb3NlUG9wb3ZlciA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc2V0UG9wb3Zlck9wZW4oZmFsc2UpO1xuICB9LCBbXSk7XG4gIHZhciBhbGxBY3Rpb25zVG9vbHRpcCA9IHVzZUV1aUkxOG4oJ2V1aUNvbGxhcHNlZEl0ZW1BY3Rpb25zLmFsbEFjdGlvbnNUb29sdGlwJywgJ0FsbCBhY3Rpb25zJyk7XG4gIHZhciBhbGxBY3Rpb25zQnV0dG9uQXJpYUxhYmVsID0gdXNlRXVpSTE4bignZXVpQ29sbGFwc2VkSXRlbUFjdGlvbnMuYWxsQWN0aW9ucycsICdBbGwgYWN0aW9ucywgcm93IHtpbmRleH0nLCB7XG4gICAgaW5kZXg6IGRpc3BsYXllZFJvd0luZGV4ICsgMVxuICB9KTtcbiAgdmFyIGFsbEFjdGlvbnNCdXR0b25EaXNhYmxlZEFyaWFMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aUNvbGxhcHNlZEl0ZW1BY3Rpb25zLmFsbEFjdGlvbnNEaXNhYmxlZCcsICdJbmRpdmlkdWFsIGl0ZW0gYWN0aW9ucyBhcmUgZGlzYWJsZWQgd2hlbiByb3dzIGFyZSBiZWluZyBzZWxlY3RlZC4nKTtcbiAgdmFyIGNvbnRyb2xzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGFjdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChjb250cm9scywgYWN0aW9uLCBpbmRleCkge1xuICAgICAgdmFyIF9hY3Rpb24kYXZhaWxhYmxlLCBfYWN0aW9uJGF2YWlsYWJsZTI7XG4gICAgICB2YXIgYXZhaWxhYmxlID0gKF9hY3Rpb24kYXZhaWxhYmxlID0gKF9hY3Rpb24kYXZhaWxhYmxlMiA9IGFjdGlvbi5hdmFpbGFibGUpID09PSBudWxsIHx8IF9hY3Rpb24kYXZhaWxhYmxlMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FjdGlvbiRhdmFpbGFibGUyLmNhbGwoYWN0aW9uLCBpdGVtKSkgIT09IG51bGwgJiYgX2FjdGlvbiRhdmFpbGFibGUgIT09IHZvaWQgMCA/IF9hY3Rpb24kYXZhaWxhYmxlIDogdHJ1ZTtcbiAgICAgIGlmICghYXZhaWxhYmxlKSByZXR1cm4gY29udHJvbHM7XG4gICAgICB2YXIgZW5hYmxlZCA9IGFjdGlvbi5lbmFibGVkID09IG51bGwgfHwgYWN0aW9uLmVuYWJsZWQoaXRlbSk7XG4gICAgICBpZiAoaXNDdXN0b21JdGVtQWN0aW9uKGFjdGlvbikpIHtcbiAgICAgICAgdmFyIGN1c3RvbUFjdGlvbiA9IGFjdGlvbjtcbiAgICAgICAgdmFyIGFjdGlvbkNvbnRyb2wgPSBjdXN0b21BY3Rpb24ucmVuZGVyKGl0ZW0sIGVuYWJsZWQpO1xuICAgICAgICBjb250cm9scy5wdXNoKFxuICAgICAgICAvLyBEbyBub3QgcHV0IHRoZSBgb25DbGlja2Agb24gdGhlIEV1aUNvbnRleHRNZW51SXRlbSBpdHNlbGYgLSBvdGhlcndpc2VcbiAgICAgICAgLy8gaXQgcmVuZGVycyBhIDxidXR0b24+IHRhZyBpbnN0ZWFkIG9mIGEgPGRpdj4sIGFuZCB3ZSBlbmQgdXAgd2l0aCBuZXN0ZWRcbiAgICAgICAgLy8gaW50ZXJhY3RpdmUgZWxlbWVudHNcbiAgICAgICAgX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIHtcbiAgICAgICAgICBrZXk6IGluZGV4LFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlCYXNpY1RhYmxlX19jb2xsYXBzZWRDdXN0b21BY3Rpb25cIlxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgb25DbGljazogY2xvc2VQb3BvdmVyXG4gICAgICAgIH0sIGFjdGlvbkNvbnRyb2wpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaWNvbiA9IGFjdGlvbi5pY29uID8gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb24uaWNvbikgOiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBidXR0b25Db250ZW50ID0gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb24ubmFtZSk7XG4gICAgICAgIHZhciB0b29sVGlwQ29udGVudCA9IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgdmFyIGhyZWYgPSBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pKGFjdGlvbi5ocmVmKTtcbiAgICAgICAgdmFyIGRhdGFUZXN0U3ViaiA9IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uWydkYXRhLXRlc3Qtc3ViaiddKTtcbiAgICAgICAgdmFyIF9vbkNsaWNrID0gYWN0aW9uLm9uQ2xpY2ssXG4gICAgICAgICAgdGFyZ2V0ID0gYWN0aW9uLnRhcmdldDtcbiAgICAgICAgY29udHJvbHMucHVzaChfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51SXRlbSwge1xuICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUJhc2ljVGFibGVfX2NvbGxhcHNlZEFjdGlvblwiLFxuICAgICAgICAgIGRpc2FibGVkOiAhZW5hYmxlZCAmJiAhYWN0aW9uc0Rpc2FibGVkLFxuICAgICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgaWNvbjogaWNvbixcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGRhdGFUZXN0U3ViaixcbiAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgICBfb25DbGljayA9PT0gbnVsbCB8fCBfb25DbGljayA9PT0gdm9pZCAwIHx8IF9vbkNsaWNrKGl0ZW0sIGV2ZW50KTtcbiAgICAgICAgICAgIC8vIEFsbG93IGNvbnN1bWVyIGV2ZW50cyB0byBwcmV2ZW50IHRoZSBwb3BvdmVyIGZyb20gY2xvc2luZyBpZiBuZWNlc3NhcnlcbiAgICAgICAgICAgIGlmICghZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkgY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b29sVGlwQ29udGVudDogdG9vbFRpcENvbnRlbnQsXG4gICAgICAgICAgdG9vbFRpcFByb3BzOiB7XG4gICAgICAgICAgICBkZWxheTogJ2xvbmcnXG4gICAgICAgICAgfVxuICAgICAgICB9LCBidXR0b25Db250ZW50KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udHJvbHM7XG4gICAgfSwgW10pO1xuICB9LCBbYWN0aW9ucywgYWN0aW9uc0Rpc2FibGVkLCBpdGVtLCBjbG9zZVBvcG92ZXJdKTtcbiAgdmFyIHBvcG92ZXJCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkljb24sIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBcImFyaWEtbGFiZWxcIjogYWN0aW9uc0Rpc2FibGVkID8gYWxsQWN0aW9uc0J1dHRvbkRpc2FibGVkQXJpYUxhYmVsIDogYWxsQWN0aW9uc0J1dHRvbkFyaWFMYWJlbCxcbiAgICB0aXRsZTogYWN0aW9uc0Rpc2FibGVkID8gYWxsQWN0aW9uc0J1dHRvbkRpc2FibGVkQXJpYUxhYmVsIDogdW5kZWZpbmVkLFxuICAgIGljb25UeXBlOiBcImJveGVzSG9yaXpvbnRhbFwiLFxuICAgIGNvbG9yOiBcInRleHRcIixcbiAgICBpc0Rpc2FibGVkOiBhY3Rpb25zRGlzYWJsZWQsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgIHJldHVybiBzZXRQb3BvdmVyT3BlbihmdW5jdGlvbiAoaXNPcGVuKSB7XG4gICAgICAgIHJldHVybiAhaXNPcGVuO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpQ29sbGFwc2VkSXRlbUFjdGlvbnNCdXR0b25cIlxuICB9KTtcbiAgdmFyIHdpdGhUb29sdGlwID0gIWFjdGlvbnNEaXNhYmxlZCAmJiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIHtcbiAgICBjb250ZW50OiBhbGxBY3Rpb25zVG9vbHRpcCxcbiAgICBkZWxheTogXCJsb25nXCJcbiAgfSwgcG9wb3ZlckJ1dHRvbik7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBpZDogXCJcIi5jb25jYXQoaXRlbUlkLCBcIi1hY3Rpb25zXCIpLFxuICAgIGlzT3BlbjogcG9wb3Zlck9wZW4sXG4gICAgYnV0dG9uOiB3aXRoVG9vbHRpcCB8fCBwb3BvdmVyQnV0dG9uLFxuICAgIGNsb3NlUG9wb3ZlcjogY2xvc2VQb3BvdmVyLFxuICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgIGFuY2hvclBvc2l0aW9uOiBcImxlZnRDZW50ZXJcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51UGFuZWwsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQmFzaWNUYWJsZV9fY29sbGFwc2VkQWN0aW9uc1wiLFxuICAgIGl0ZW1zOiBjb250cm9sc1xuICB9KSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5leHBvcnQgdmFyIGlzQ3VzdG9tSXRlbUFjdGlvbiA9IGZ1bmN0aW9uIGlzQ3VzdG9tSXRlbUFjdGlvbihhY3Rpb24pIHtcbiAgcmV0dXJuIGFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgncmVuZGVyJyk7XG59O1xuZXhwb3J0IHZhciBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uID0gZnVuY3Rpb24gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocHJvcCkge1xuICAgIHJldHVybiB0eXBlb2YgcHJvcCA9PT0gJ2Z1bmN0aW9uJyA/IHByb3AoaXRlbSkgOiBwcm9wO1xuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRGVmYXVsdEl0ZW1BY3Rpb24gfSBmcm9tICcuL2RlZmF1bHRfaXRlbV9hY3Rpb24nO1xuaW1wb3J0IHsgQ3VzdG9tSXRlbUFjdGlvbiB9IGZyb20gJy4vY3VzdG9tX2l0ZW1fYWN0aW9uJztcbmltcG9ydCB7IGlzQ3VzdG9tSXRlbUFjdGlvbiB9IGZyb20gJy4vYWN0aW9uX3R5cGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV4cGFuZGVkSXRlbUFjdGlvbnMgPSBmdW5jdGlvbiBFeHBhbmRlZEl0ZW1BY3Rpb25zKF9yZWYpIHtcbiAgdmFyIGFjdGlvbnMgPSBfcmVmLmFjdGlvbnMsXG4gICAgaXRlbUlkID0gX3JlZi5pdGVtSWQsXG4gICAgaXRlbSA9IF9yZWYuaXRlbSxcbiAgICBhY3Rpb25zRGlzYWJsZWQgPSBfcmVmLmFjdGlvbnNEaXNhYmxlZCxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIGFjdGlvbnMucmVkdWNlKGZ1bmN0aW9uICh0b29scywgYWN0aW9uLCBpbmRleCkge1xuICAgIHZhciBhdmFpbGFibGUgPSBhY3Rpb24uYXZhaWxhYmxlID8gYWN0aW9uLmF2YWlsYWJsZShpdGVtKSA6IHRydWU7XG4gICAgaWYgKCFhdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiB0b29scztcbiAgICB9XG4gICAgdmFyIGVuYWJsZWQgPSBhY3Rpb24uZW5hYmxlZCA9PSBudWxsIHx8IGFjdGlvbi5lbmFibGVkKGl0ZW0pO1xuICAgIHZhciBrZXkgPSBcIml0ZW1fYWN0aW9uX1wiLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoaW5kZXgpO1xuICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcyhjbGFzc05hbWUsIHtcbiAgICAgICdldWlCYXNpY1RhYmxlQWN0aW9uLXNob3dPbkhvdmVyJzogYWN0aW9uLnNob3dPbkhvdmVyXG4gICAgfSk7XG4gICAgaWYgKGlzQ3VzdG9tSXRlbUFjdGlvbihhY3Rpb24pKSB7XG4gICAgICAvLyBjdXN0b20gYWN0aW9uIGhhcyBhIHJlbmRlciBmdW5jdGlvblxuICAgICAgdG9vbHMucHVzaChfX19FbW90aW9uSlNYKEN1c3RvbUl0ZW1BY3Rpb24sIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgZW5hYmxlZDogZW5hYmxlZCAmJiAhYWN0aW9uc0Rpc2FibGVkLFxuICAgICAgICBpdGVtOiBpdGVtXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvb2xzLnB1c2goX19fRW1vdGlvbkpTWChEZWZhdWx0SXRlbUFjdGlvbiwge1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgZW5hYmxlZDogZW5hYmxlZCAmJiAhYWN0aW9uc0Rpc2FibGVkLFxuICAgICAgICBpdGVtOiBpdGVtXG4gICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiB0b29scztcbiAgfSwgW10pKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5LCBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi90b29sX3RpcCc7XG5pbXBvcnQgeyB1c2VHZW5lcmF0ZWRIdG1sSWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24gfSBmcm9tICcuL2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBEZWZhdWx0SXRlbUFjdGlvbiA9IGZ1bmN0aW9uIERlZmF1bHRJdGVtQWN0aW9uKF9yZWYpIHtcbiAgdmFyIGFjdGlvbiA9IF9yZWYuYWN0aW9uLFxuICAgIGVuYWJsZWQgPSBfcmVmLmVuYWJsZWQsXG4gICAgaXRlbSA9IF9yZWYuaXRlbSxcbiAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZTtcbiAgaWYgKCFhY3Rpb24ub25DbGljayAmJiAhYWN0aW9uLmhyZWYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVuZGVyIGl0ZW0gYWN0aW9uIFtcIi5jb25jYXQoYWN0aW9uLm5hbWUsIFwiXS4gTWlzc2luZyByZXF1aXJlZCAnb25DbGljaycgY2FsbGJhY2tcXG4gICAgICBvciAnaHJlZicgc3RyaW5nLiBJZiB5b3Ugd2FudCB0byBwcm92aWRlIGEgY3VzdG9tIGFjdGlvbiBjb250cm9sLCBtYWtlIHN1cmUgdG8gZGVmaW5lIHRoZSAncmVuZGVyJyBjYWxsYmFja1wiKSk7XG4gIH1cbiAgdmFyIG9uQ2xpY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoIWFjdGlvbi5vbkNsaWNrKSByZXR1cm47XG4gICAgZXZlbnQucGVyc2lzdCgpOyAvLyBUT0RPOiBSZW1vdmUgb25jZSBSZWFjdCAxNiBzdXBwb3J0IGlzIGRyb3BwZWRcbiAgICBhY3Rpb24ub25DbGljayhpdGVtLCBldmVudCk7XG4gIH0sIFthY3Rpb24ub25DbGljaywgaXRlbV0pO1xuICB2YXIgY29sb3IgPSBhY3Rpb24uY29sb3IgPyBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pKGFjdGlvbi5jb2xvcikgOiAncHJpbWFyeSc7XG4gIHZhciBpY29uID0gYWN0aW9uLmljb24gPyBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pKGFjdGlvbi5pY29uKSA6IHVuZGVmaW5lZDtcbiAgdmFyIGFjdGlvbkNvbnRlbnQgPSBjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uKGl0ZW0pKGFjdGlvbi5uYW1lKTtcbiAgdmFyIHRvb2x0aXBDb250ZW50ID0gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb24uZGVzY3JpcHRpb24pO1xuICB2YXIgaHJlZiA9IGNhbGxXaXRoSXRlbUlmRnVuY3Rpb24oaXRlbSkoYWN0aW9uLmhyZWYpO1xuICB2YXIgZGF0YVRlc3RTdWJqID0gY2FsbFdpdGhJdGVtSWZGdW5jdGlvbihpdGVtKShhY3Rpb25bJ2RhdGEtdGVzdC1zdWJqJ10pO1xuICB2YXIgYXJpYUxhYmVsSWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoKTtcbiAgdmFyIGFyaWFMYWJlbGxlZEJ5O1xuICB2YXIgYnV0dG9uO1xuICBpZiAoYWN0aW9uLnR5cGUgPT09ICdpY29uJykge1xuICAgIGlmICghaWNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHJlbmRlciBpdGVtIGFjdGlvbiBbXCIuY29uY2F0KGFjdGlvbi5uYW1lLCBcIl0uIEl0IGlzIGNvbmZpZ3VyZWQgdG8gcmVuZGVyIGFzIGFuIGljb24gYnV0IG5vXFxuICAgICAgaWNvbiBpcyBwcm92aWRlZC4gTWFrZSBzdXJlIHRvIHNldCB0aGUgJ2ljb24nIHByb3BlcnR5IG9mIHRoZSBhY3Rpb25cIikpO1xuICAgIH1cbiAgICBidXR0b24gPSBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsSWQsXG4gICAgICBpc0Rpc2FibGVkOiAhZW5hYmxlZCxcbiAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgIGljb25UeXBlOiBpY29uLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IGFjdGlvbi50YXJnZXQsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGRhdGFUZXN0U3VialxuICAgICAgLy8gSWYgYWN0aW9uIGlzIGRpc2FibGVkLCB0aGUgbm9ybWFsIHRvb2x0aXAgY2FuJ3Qgc2hvdyAtIGF0dGVtcHQgdG9cbiAgICAgIC8vIHByb3ZpZGUgc29tZSBhbW91bnQgb2YgYWZmb3JkYW5jZSB3aXRoIGEgYnJvd3NlciB0aXRsZSB0b29sdGlwXG4gICAgICAsXG4gICAgICB0aXRsZTogIWVuYWJsZWQgPyB0b29sdGlwQ29udGVudCA6IHVuZGVmaW5lZFxuICAgIH0pO1xuICAgIC8vIGFjdGlvbkNvbnRlbnQgKGFjdGlvbi5uYW1lKSBpcyBhIFJlYWN0Tm9kZSBhbmQgbXVzdCBiZSByZW5kZXJlZFxuICAgIC8vIHRvIGFuIGVsZW1lbnQgYW5kIHJlZmVyZW5jZWQgYnkgSUQgZm9yIHNjcmVlbiByZWFkZXJzXG4gICAgYXJpYUxhYmVsbGVkQnkgPSBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGlkOiBhcmlhTGFiZWxJZFxuICAgIH0sIGFjdGlvbkNvbnRlbnQpKTtcbiAgfSBlbHNlIHtcbiAgICBidXR0b24gPSBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkVtcHR5LCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIHNpemU6IFwic1wiLFxuICAgICAgaXNEaXNhYmxlZDogIWVuYWJsZWQsXG4gICAgICBjb2xvcjogY29sb3IsXG4gICAgICBpY29uVHlwZTogaWNvbixcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiBhY3Rpb24udGFyZ2V0LFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBkYXRhVGVzdFN1YmosXG4gICAgICBmbHVzaDogXCJyaWdodFwiXG4gICAgfSwgYWN0aW9uQ29udGVudCk7XG4gIH1cbiAgcmV0dXJuIGVuYWJsZWQgPyBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIHtcbiAgICBjb250ZW50OiB0b29sdGlwQ29udGVudCxcbiAgICBkZWxheTogXCJsb25nXCJcbiAgfSwgYnV0dG9uKSwgYXJpYUxhYmVsbGVkQnkpIDogX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgYnV0dG9uLCBhcmlhTGFiZWxsZWRCeSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ3VzdG9tSXRlbUFjdGlvbiA9IGZ1bmN0aW9uIEN1c3RvbUl0ZW1BY3Rpb24oX3JlZikge1xuICB2YXIgYWN0aW9uID0gX3JlZi5hY3Rpb24sXG4gICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZCxcbiAgICBpdGVtID0gX3JlZi5pdGVtLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgYWN0aW9uLnJlbmRlcihpdGVtLCBlbmFibGVkKSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpU3BhY2VyIH0gZnJvbSAnLi4vc3BhY2VyJztcbmltcG9ydCB7IEV1aVRhYmxlUGFnaW5hdGlvbiwgdXNlRXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMgfSBmcm9tICcuLi90YWJsZS90YWJsZV9wYWdpbmF0aW9uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFBhZ2luYXRpb25CYXIgPSBmdW5jdGlvbiBQYWdpbmF0aW9uQmFyKF9yZWYpIHtcbiAgdmFyIHBhZ2luYXRpb24gPSBfcmVmLnBhZ2luYXRpb24sXG4gICAgb25QYWdlU2l6ZUNoYW5nZSA9IF9yZWYub25QYWdlU2l6ZUNoYW5nZSxcbiAgICBvblBhZ2VDaGFuZ2UgPSBfcmVmLm9uUGFnZUNoYW5nZSxcbiAgICBhcmlhQ29udHJvbHMgPSBfcmVmWydhcmlhLWNvbnRyb2xzJ10sXG4gICAgYXJpYUxhYmVsID0gX3JlZlsnYXJpYS1sYWJlbCddO1xuICB2YXIgZGVmYXVsdHMgPSB1c2VFdWlUYWJsZVBhZ2luYXRpb25EZWZhdWx0cygpO1xuICB2YXIgcGFnZUluZGV4ID0gcGFnaW5hdGlvbi5wYWdlSW5kZXgsXG4gICAgdG90YWxJdGVtQ291bnQgPSBwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50LFxuICAgIF9wYWdpbmF0aW9uJHBhZ2VTaXplID0gcGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICBwYWdlU2l6ZSA9IF9wYWdpbmF0aW9uJHBhZ2VTaXplID09PSB2b2lkIDAgPyBkZWZhdWx0cy5pdGVtc1BlclBhZ2UgOiBfcGFnaW5hdGlvbiRwYWdlU2l6ZSxcbiAgICBfcGFnaW5hdGlvbiRwYWdlU2l6ZU8gPSBwYWdpbmF0aW9uLnBhZ2VTaXplT3B0aW9ucyxcbiAgICBwYWdlU2l6ZU9wdGlvbnMgPSBfcGFnaW5hdGlvbiRwYWdlU2l6ZU8gPT09IHZvaWQgMCA/IGRlZmF1bHRzLml0ZW1zUGVyUGFnZU9wdGlvbnMgOiBfcGFnaW5hdGlvbiRwYWdlU2l6ZU8sXG4gICAgX3BhZ2luYXRpb24kc2hvd1BlclBhID0gcGFnaW5hdGlvbi5zaG93UGVyUGFnZU9wdGlvbnMsXG4gICAgc2hvd1BlclBhZ2VPcHRpb25zID0gX3BhZ2luYXRpb24kc2hvd1BlclBhID09PSB2b2lkIDAgPyBkZWZhdWx0cy5zaG93UGVyUGFnZU9wdGlvbnMgOiBfcGFnaW5hdGlvbiRzaG93UGVyUGE7XG4gIHZhciBwYWdlQ291bnQgPSBwYWdlU2l6ZSA/IE1hdGguY2VpbCh0b3RhbEl0ZW1Db3VudCAvIHBhZ2VTaXplKSA6IDE7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHBhZ2VDb3VudCA8IHBhZ2VJbmRleCArIDEpIHtcbiAgICAgIG9uUGFnZUNoYW5nZSA9PT0gbnVsbCB8fCBvblBhZ2VDaGFuZ2UgPT09IHZvaWQgMCB8fCBvblBhZ2VDaGFuZ2UocGFnZUNvdW50IC0gMSk7XG4gICAgfVxuICB9LCBbcGFnZUNvdW50LCBvblBhZ2VDaGFuZ2UsIHBhZ2VJbmRleF0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVNwYWNlciwge1xuICAgIHNpemU6IFwibVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUGFnaW5hdGlvbiwge1xuICAgIGFjdGl2ZVBhZ2U6IHBhZ2VJbmRleCxcbiAgICBzaG93UGVyUGFnZU9wdGlvbnM6IHNob3dQZXJQYWdlT3B0aW9ucyxcbiAgICBpdGVtc1BlclBhZ2U6IHBhZ2VTaXplLFxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IHBhZ2VTaXplT3B0aW9ucyxcbiAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudCxcbiAgICBvbkNoYW5nZUl0ZW1zUGVyUGFnZTogb25QYWdlU2l6ZUNoYW5nZSxcbiAgICBvbkNoYW5nZVBhZ2U6IG9uUGFnZUNoYW5nZSxcbiAgICBcImFyaWEtY29udHJvbHNcIjogYXJpYUNvbnRyb2xzLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWxcbiAgfSkpO1xufTsiLCAidmFyIF90ZW1wbGF0ZU9iamVjdDtcbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoZSwgdCkgeyByZXR1cm4gdCB8fCAodCA9IGUuc2xpY2UoMCkpLCBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHQpIH0gfSkpOyB9XG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGV1aUNhbnRBbmltYXRlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xudmFyIHRhYmxlTG9hZGluZ0xpbmUgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgZnJvbSB7XFxuICAgIFwiLCBcIlxcbiAgICBcIiwgXCJcXG4gIH1cXG5cXG4gIDIwJSB7XFxuICAgIFwiLCBcIlxcbiAgICBcIiwgXCJcXG4gIH1cXG5cXG4gIDgwJSB7XFxuICAgIFwiLCBcIlxcbiAgICBcIiwgXCJcXG4gIH1cXG5cXG4gIDEwMCUge1xcbiAgICBcIiwgXCJcXG4gICAgXCIsIFwiXFxuICB9XFxuXCJdKSksIGxvZ2ljYWxDU1MoJ2xlZnQnLCAwKSwgbG9naWNhbENTUygnd2lkdGgnLCAwKSwgbG9naWNhbENTUygnbGVmdCcsIDApLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICc0MCUnKSwgbG9naWNhbENTUygnbGVmdCcsICc2MCUnKSwgbG9naWNhbENTUygnd2lkdGgnLCAnNDAlJyksIGxvZ2ljYWxDU1MoJ2xlZnQnLCAnMTAwJScpLCBsb2dpY2FsQ1NTKCd3aWR0aCcsIDApKTtcbmV4cG9ydCB2YXIgZXVpQmFzaWNUYWJsZUJvZHlMb2FkaW5nID0gZnVuY3Rpb24gZXVpQmFzaWNUYWJsZUJvZHlMb2FkaW5nKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Jjo6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6Jyc7XCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGljayksIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCBcIjthbmltYXRpb246XCIsIHRhYmxlTG9hZGluZ0xpbmUsIFwiIDFzIGxpbmVhciBpbmZpbml0ZTtcIiwgZXVpQ2FudEFuaW1hdGUsIFwie2FuaW1hdGlvbi1kdXJhdGlvbjoyczt9fTtsYWJlbDpldWlCYXNpY1RhYmxlQm9keUxvYWRpbmc7XCIpO1xufTtcblxuLy8gRml4IHRvIG1ha2UgdGhlIGxvYWRpbmcgaW5kaWNhdG9yIHBvc2l0aW9uIGNvcnJlY3RseSBpbiBTYWZhcmlcbi8vIEZvciB3aGF0ZXZlciBhbm5veWluZyByZWFzb24sIFNhZmFyaSBkb2Vzbid0IHJlc3BlY3QgYHBvc2l0aW9uOiByZWxhdGl2ZTtgXG4vLyBvbiBgdGJvZHlgIHdpdGhvdXQgYHBvc2l0aW9uOiByZWxhdGl2ZWAgb24gdGhlIHBhcmVudCBgdGFibGVgXG5leHBvcnQgdmFyIHNhZmFyaUxvYWRpbmdXb3JrYXJvdW5kID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjZ4Ym53NC1zYWZhcmlMb2FkaW5nV29ya2Fyb3VuZFwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246cmVsYXRpdmU7bGFiZWw6c2FmYXJpTG9hZGluZ1dvcmthcm91bmQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiNnhibnc0LXNhZmFyaUxvYWRpbmdXb3JrYXJvdW5kXCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpyZWxhdGl2ZTtsYWJlbDpzYWZhcmlMb2FkaW5nV29ya2Fyb3VuZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59OyIsICJleHBvcnQgdmFyIFN1YnNjcmliYWJsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN1YnNjcmliYWJsZSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN1YnNjcmliYWJsZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBsaXN0ZW5lciB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTtcbiAgICB0aGlzLm9uU3Vic2NyaWJlKCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmxpc3RlbmVycyA9IF90aGlzLmxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IGNhbGxiYWNrO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLm9uVW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5oYXNMaXN0ZW5lcnMgPSBmdW5jdGlvbiBoYXNMaXN0ZW5lcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXJzLmxlbmd0aCA+IDA7XG4gIH07XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7Ly8gRG8gbm90aGluZ1xuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHsvLyBEbyBub3RoaW5nXG4gIH07XG5cbiAgcmV0dXJuIFN1YnNjcmliYWJsZTtcbn0oKTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG4vLyBUWVBFU1xuLy8gVVRJTFNcbmV4cG9ydCB2YXIgaXNTZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJztcbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1cGRhdGVyID09PSAnZnVuY3Rpb24nID8gdXBkYXRlcihpbnB1dCkgOiB1cGRhdGVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUaW1lb3V0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDAgJiYgdmFsdWUgIT09IEluZmluaXR5O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVF1ZXJ5S2V5QXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2UoYXJyYXkxLCBhcnJheTIpIHtcbiAgcmV0dXJuIGFycmF5MS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gYXJyYXkyLmluZGV4T2YoeCkgPT09IC0xO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQXQoYXJyYXksIGluZGV4LCB2YWx1ZSkge1xuICB2YXIgY29weSA9IGFycmF5LnNsaWNlKDApO1xuICBjb3B5W2luZGV4XSA9IHZhbHVlO1xuICByZXR1cm4gY29weTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aW1lVW50aWxTdGFsZSh1cGRhdGVkQXQsIHN0YWxlVGltZSkge1xuICByZXR1cm4gTWF0aC5tYXgodXBkYXRlZEF0ICsgKHN0YWxlVGltZSB8fCAwKSAtIERhdGUubm93KCksIDApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKCFpc1F1ZXJ5S2V5KGFyZzEpKSB7XG4gICAgcmV0dXJuIGFyZzE7XG4gIH1cblxuICBpZiAodHlwZW9mIGFyZzIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzMsIHtcbiAgICAgIHF1ZXJ5S2V5OiBhcmcxLFxuICAgICAgcXVlcnlGbjogYXJnMlxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgcXVlcnlLZXk6IGFyZzFcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdXRhdGlvbkFyZ3MoYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAoaXNRdWVyeUtleShhcmcxKSkge1xuICAgIGlmICh0eXBlb2YgYXJnMiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmczLCB7XG4gICAgICAgIG11dGF0aW9uS2V5OiBhcmcxLFxuICAgICAgICBtdXRhdGlvbkZuOiBhcmcyXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICAgIG11dGF0aW9uS2V5OiBhcmcxXG4gICAgfSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGFyZzEgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICAgIG11dGF0aW9uRm46IGFyZzFcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgcmV0dXJuIGlzUXVlcnlLZXkoYXJnMSkgPyBbX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICBxdWVyeUtleTogYXJnMVxuICB9KSwgYXJnM10gOiBbYXJnMSB8fCB7fSwgYXJnMl07XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdXRhdGlvbkZpbHRlckFyZ3MoYXJnMSwgYXJnMikge1xuICByZXR1cm4gaXNRdWVyeUtleShhcmcxKSA/IF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgbXV0YXRpb25LZXk6IGFyZzFcbiAgfSkgOiBhcmcxO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hcFF1ZXJ5U3RhdHVzRmlsdGVyKGFjdGl2ZSwgaW5hY3RpdmUpIHtcbiAgaWYgKGFjdGl2ZSA9PT0gdHJ1ZSAmJiBpbmFjdGl2ZSA9PT0gdHJ1ZSB8fCBhY3RpdmUgPT0gbnVsbCAmJiBpbmFjdGl2ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICdhbGwnO1xuICB9IGVsc2UgaWYgKGFjdGl2ZSA9PT0gZmFsc2UgJiYgaW5hY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICdub25lJztcbiAgfSBlbHNlIHtcbiAgICAvLyBBdCB0aGlzIHBvaW50LCBhY3RpdmV8aW5hY3RpdmUgY2FuIG9ubHkgYmUgdHJ1ZXxmYWxzZSBvciBmYWxzZXx0cnVlXG4gICAgLy8gc28sIHdoZW4gb25seSBvbmUgdmFsdWUgaXMgcHJvdmlkZWQsIHRoZSBtaXNzaW5nIG9uZSBoYXMgdG8gYmUgdGhlIG5lZ2F0ZWQgdmFsdWVcbiAgICB2YXIgaXNBY3RpdmUgPSBhY3RpdmUgIT0gbnVsbCA/IGFjdGl2ZSA6ICFpbmFjdGl2ZTtcbiAgICByZXR1cm4gaXNBY3RpdmUgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZSc7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KSB7XG4gIHZhciBhY3RpdmUgPSBmaWx0ZXJzLmFjdGl2ZSxcbiAgICAgIGV4YWN0ID0gZmlsdGVycy5leGFjdCxcbiAgICAgIGZldGNoaW5nID0gZmlsdGVycy5mZXRjaGluZyxcbiAgICAgIGluYWN0aXZlID0gZmlsdGVycy5pbmFjdGl2ZSxcbiAgICAgIHByZWRpY2F0ZSA9IGZpbHRlcnMucHJlZGljYXRlLFxuICAgICAgcXVlcnlLZXkgPSBmaWx0ZXJzLnF1ZXJ5S2V5LFxuICAgICAgc3RhbGUgPSBmaWx0ZXJzLnN0YWxlO1xuXG4gIGlmIChpc1F1ZXJ5S2V5KHF1ZXJ5S2V5KSkge1xuICAgIGlmIChleGFjdCkge1xuICAgICAgaWYgKHF1ZXJ5LnF1ZXJ5SGFzaCAhPT0gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBxdWVyeS5vcHRpb25zKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KHF1ZXJ5LnF1ZXJ5S2V5LCBxdWVyeUtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YXIgcXVlcnlTdGF0dXNGaWx0ZXIgPSBtYXBRdWVyeVN0YXR1c0ZpbHRlcihhY3RpdmUsIGluYWN0aXZlKTtcblxuICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdub25lJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChxdWVyeVN0YXR1c0ZpbHRlciAhPT0gJ2FsbCcpIHtcbiAgICB2YXIgaXNBY3RpdmUgPSBxdWVyeS5pc0FjdGl2ZSgpO1xuXG4gICAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnYWN0aXZlJyAmJiAhaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdpbmFjdGl2ZScgJiYgaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHN0YWxlID09PSAnYm9vbGVhbicgJiYgcXVlcnkuaXNTdGFsZSgpICE9PSBzdGFsZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmV0Y2hpbmcgPT09ICdib29sZWFuJyAmJiBxdWVyeS5pc0ZldGNoaW5nKCkgIT09IGZldGNoaW5nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZWRpY2F0ZSAmJiAhcHJlZGljYXRlKHF1ZXJ5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pIHtcbiAgdmFyIGV4YWN0ID0gZmlsdGVycy5leGFjdCxcbiAgICAgIGZldGNoaW5nID0gZmlsdGVycy5mZXRjaGluZyxcbiAgICAgIHByZWRpY2F0ZSA9IGZpbHRlcnMucHJlZGljYXRlLFxuICAgICAgbXV0YXRpb25LZXkgPSBmaWx0ZXJzLm11dGF0aW9uS2V5O1xuXG4gIGlmIChpc1F1ZXJ5S2V5KG11dGF0aW9uS2V5KSkge1xuICAgIGlmICghbXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChleGFjdCkge1xuICAgICAgaWYgKGhhc2hRdWVyeUtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5KSAhPT0gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXksIG11dGF0aW9uS2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgZmV0Y2hpbmcgPT09ICdib29sZWFuJyAmJiBtdXRhdGlvbi5zdGF0ZS5zdGF0dXMgPT09ICdsb2FkaW5nJyAhPT0gZmV0Y2hpbmcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUobXV0YXRpb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gIHZhciBoYXNoRm4gPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5xdWVyeUtleUhhc2hGbikgfHwgaGFzaFF1ZXJ5S2V5O1xuICByZXR1cm4gaGFzaEZuKHF1ZXJ5S2V5KTtcbn1cbi8qKlxuICogRGVmYXVsdCBxdWVyeSBrZXlzIGhhc2ggZnVuY3Rpb24uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hRdWVyeUtleShxdWVyeUtleSkge1xuICB2YXIgYXNBcnJheSA9IGVuc3VyZVF1ZXJ5S2V5QXJyYXkocXVlcnlLZXkpO1xuICByZXR1cm4gc3RhYmxlVmFsdWVIYXNoKGFzQXJyYXkpO1xufVxuLyoqXG4gKiBIYXNoZXMgdGhlIHZhbHVlIGludG8gYSBzdGFibGUgaGFzaC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhYmxlVmFsdWVIYXNoKHZhbHVlKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgZnVuY3Rpb24gKF8sIHZhbCkge1xuICAgIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbCkgPyBPYmplY3Qua2V5cyh2YWwpLnNvcnQoKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbFtrZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSkgOiB2YWw7XG4gIH0pO1xufVxuLyoqXG4gKiBDaGVja3MgaWYga2V5IGBiYCBwYXJ0aWFsbHkgbWF0Y2hlcyB3aXRoIGtleSBgYWAuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWxNYXRjaEtleShhLCBiKSB7XG4gIHJldHVybiBwYXJ0aWFsRGVlcEVxdWFsKGVuc3VyZVF1ZXJ5S2V5QXJyYXkoYSksIGVuc3VyZVF1ZXJ5S2V5QXJyYXkoYikpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgYGJgIHBhcnRpYWxseSBtYXRjaGVzIHdpdGggYGFgLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsRGVlcEVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gIU9iamVjdC5rZXlzKGIpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuICFwYXJ0aWFsRGVlcEVxdWFsKGFba2V5XSwgYltrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGBhYCBpZiBgYmAgaXMgZGVlcGx5IGVxdWFsLlxuICogSWYgbm90LCBpdCB3aWxsIHJlcGxhY2UgYW55IGRlZXBseSBlcXVhbCBjaGlsZHJlbiBvZiBgYmAgd2l0aCB0aG9zZSBvZiBgYWAuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBzdHJ1Y3R1cmFsIHNoYXJpbmcgYmV0d2VlbiBKU09OIHZhbHVlcyBmb3IgZXhhbXBsZS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUVxdWFsRGVlcChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICB2YXIgYXJyYXkgPSBBcnJheS5pc0FycmF5KGEpICYmIEFycmF5LmlzQXJyYXkoYik7XG5cbiAgaWYgKGFycmF5IHx8IGlzUGxhaW5PYmplY3QoYSkgJiYgaXNQbGFpbk9iamVjdChiKSkge1xuICAgIHZhciBhU2l6ZSA9IGFycmF5ID8gYS5sZW5ndGggOiBPYmplY3Qua2V5cyhhKS5sZW5ndGg7XG4gICAgdmFyIGJJdGVtcyA9IGFycmF5ID8gYiA6IE9iamVjdC5rZXlzKGIpO1xuICAgIHZhciBiU2l6ZSA9IGJJdGVtcy5sZW5ndGg7XG4gICAgdmFyIGNvcHkgPSBhcnJheSA/IFtdIDoge307XG4gICAgdmFyIGVxdWFsSXRlbXMgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiU2l6ZTsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gYXJyYXkgPyBpIDogYkl0ZW1zW2ldO1xuICAgICAgY29weVtrZXldID0gcmVwbGFjZUVxdWFsRGVlcChhW2tleV0sIGJba2V5XSk7XG5cbiAgICAgIGlmIChjb3B5W2tleV0gPT09IGFba2V5XSkge1xuICAgICAgICBlcXVhbEl0ZW1zKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFTaXplID09PSBiU2l6ZSAmJiBlcXVhbEl0ZW1zID09PSBhU2l6ZSA/IGEgOiBjb3B5O1xuICB9XG5cbiAgcmV0dXJuIGI7XG59XG4vKipcbiAqIFNoYWxsb3cgY29tcGFyZSBvYmplY3RzLiBPbmx5IHdvcmtzIHdpdGggb2JqZWN0cyB0aGF0IGFsd2F5cyBoYXZlIHRoZSBzYW1lIHByb3BlcnRpZXMuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbE9iamVjdHMoYSwgYikge1xuICBpZiAoYSAmJiAhYiB8fCBiICYmICFhKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIga2V5IGluIGEpIHtcbiAgICBpZiAoYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn0gLy8gQ29waWVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdFxuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvKSB7XG4gIGlmICghaGFzT2JqZWN0UHJvdG90eXBlKG8pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIGhhcyBtb2RpZmllZCBjb25zdHJ1Y3RvclxuXG5cbiAgdmFyIGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuXG4gIGlmICh0eXBlb2YgY3RvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBJZiBoYXMgbW9kaWZpZWQgcHJvdG90eXBlXG5cblxuICB2YXIgcHJvdCA9IGN0b3IucHJvdG90eXBlO1xuXG4gIGlmICghaGFzT2JqZWN0UHJvdG90eXBlKHByb3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIGNvbnN0cnVjdG9yIGRvZXMgbm90IGhhdmUgYW4gT2JqZWN0LXNwZWNpZmljIG1ldGhvZFxuXG5cbiAgaWYgKCFwcm90Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gTW9zdCBsaWtlbHkgYSBwbGFpbiBPYmplY3RcblxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBoYXNPYmplY3RQcm90b3R5cGUobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUXVlcnlLZXkodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBFcnJvcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcCh0aW1lb3V0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCk7XG4gIH0pO1xufVxuLyoqXG4gKiBTY2hlZHVsZXMgYSBtaWNyb3Rhc2suXG4gKiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gc2NoZWR1bGUgc3RhdGUgdXBkYXRlcyBhZnRlciByZW5kZXJpbmcuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlTWljcm90YXNrKGNhbGxiYWNrKSB7XG4gIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oY2FsbGJhY2spLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBYm9ydENvbnRyb2xsZXIoKSB7XG4gIGlmICh0eXBlb2YgQWJvcnRDb250cm9sbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgfVxufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIEZvY3VzTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShGb2N1c01hbmFnZXIsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIEZvY3VzTWFuYWdlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc2V0dXAgPSBmdW5jdGlvbiAob25Gb2N1cykge1xuICAgICAgdmFyIF93aW5kb3c7XG5cbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgKChfd2luZG93ID0gd2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKSkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHtcbiAgICAgICAgICByZXR1cm4gb25Gb2N1cygpO1xuICAgICAgICB9OyAvLyBMaXN0ZW4gdG8gdmlzaWJpbGxpdHljaGFuZ2UgYW5kIGZvY3VzXG5cblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQmUgc3VyZSB0byB1bnN1YnNjcmliZSBpZiBhIG5ldyBoYW5kbGVyIGlzIHNldFxuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgbGlzdGVuZXIpO1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IEZvY3VzTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmNsZWFudXApIHtcbiAgICAgIHRoaXMuc2V0RXZlbnRMaXN0ZW5lcih0aGlzLnNldHVwKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdmFyIF90aGlzJGNsZWFudXA7XG5cbiAgICAgIChfdGhpcyRjbGVhbnVwID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cC5jYWxsKHRoaXMpO1xuICAgICAgdGhpcy5jbGVhbnVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIHNldEV2ZW50TGlzdGVuZXIoc2V0dXApIHtcbiAgICB2YXIgX3RoaXMkY2xlYW51cDIsXG4gICAgICAgIF90aGlzMiA9IHRoaXM7XG5cbiAgICB0aGlzLnNldHVwID0gc2V0dXA7XG4gICAgKF90aGlzJGNsZWFudXAyID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cDIuY2FsbCh0aGlzKTtcbiAgICB0aGlzLmNsZWFudXAgPSBzZXR1cChmdW5jdGlvbiAoZm9jdXNlZCkge1xuICAgICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgX3RoaXMyLnNldEZvY3VzZWQoZm9jdXNlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpczIub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5zZXRGb2N1c2VkID0gZnVuY3Rpb24gc2V0Rm9jdXNlZChmb2N1c2VkKSB7XG4gICAgdGhpcy5mb2N1c2VkID0gZm9jdXNlZDtcblxuICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICB0aGlzLm9uRm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc0ZvY3VzZWQgPSBmdW5jdGlvbiBpc0ZvY3VzZWQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmZvY3VzZWQgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcbiAgICB9IC8vIGRvY3VtZW50IGdsb2JhbCBjYW4gYmUgdW5hdmFpbGFibGUgaW4gcmVhY3QgbmF0aXZlXG5cblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3VuZGVmaW5lZCwgJ3Zpc2libGUnLCAncHJlcmVuZGVyJ10uaW5jbHVkZXMoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlKTtcbiAgfTtcblxuICByZXR1cm4gRm9jdXNNYW5hZ2VyO1xufShTdWJzY3JpYmFibGUpO1xuZXhwb3J0IHZhciBmb2N1c01hbmFnZXIgPSBuZXcgRm9jdXNNYW5hZ2VyKCk7IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB2YXIgT25saW5lTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShPbmxpbmVNYW5hZ2VyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBPbmxpbmVNYW5hZ2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5zZXR1cCA9IGZ1bmN0aW9uIChvbk9ubGluZSkge1xuICAgICAgdmFyIF93aW5kb3c7XG5cbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgKChfd2luZG93ID0gd2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKSkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHtcbiAgICAgICAgICByZXR1cm4gb25PbmxpbmUoKTtcbiAgICAgICAgfTsgLy8gTGlzdGVuIHRvIG9ubGluZVxuXG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBCZSBzdXJlIHRvIHVuc3Vic2NyaWJlIGlmIGEgbmV3IGhhbmRsZXIgaXMgc2V0XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGxpc3RlbmVyKTtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE9ubGluZU1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5jbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy5zZXR1cCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHZhciBfdGhpcyRjbGVhbnVwO1xuXG4gICAgICAoX3RoaXMkY2xlYW51cCA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXMuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyKHNldHVwKSB7XG4gICAgdmFyIF90aGlzJGNsZWFudXAyLFxuICAgICAgICBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5zZXR1cCA9IHNldHVwO1xuICAgIChfdGhpcyRjbGVhbnVwMiA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5jbGVhbnVwID0gc2V0dXAoZnVuY3Rpb24gKG9ubGluZSkge1xuICAgICAgaWYgKHR5cGVvZiBvbmxpbmUgPT09ICdib29sZWFuJykge1xuICAgICAgICBfdGhpczIuc2V0T25saW5lKG9ubGluZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpczIub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0T25saW5lID0gZnVuY3Rpb24gc2V0T25saW5lKG9ubGluZSkge1xuICAgIHRoaXMub25saW5lID0gb25saW5lO1xuXG4gICAgaWYgKG9ubGluZSkge1xuICAgICAgdGhpcy5vbk9ubGluZSgpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNPbmxpbmUgPSBmdW5jdGlvbiBpc09ubGluZSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMub25saW5lID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ubGluZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIG5hdmlnYXRvci5vbkxpbmUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yLm9uTGluZTtcbiAgfTtcblxuICByZXR1cm4gT25saW5lTWFuYWdlcjtcbn0oU3Vic2NyaWJhYmxlKTtcbmV4cG9ydCB2YXIgb25saW5lTWFuYWdlciA9IG5ldyBPbmxpbmVNYW5hZ2VyKCk7IiwgImltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gJy4vZm9jdXNNYW5hZ2VyJztcbmltcG9ydCB7IG9ubGluZU1hbmFnZXIgfSBmcm9tICcuL29ubGluZU1hbmFnZXInO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuL3V0aWxzJztcblxuZnVuY3Rpb24gZGVmYXVsdFJldHJ5RGVsYXkoZmFpbHVyZUNvdW50KSB7XG4gIHJldHVybiBNYXRoLm1pbigxMDAwICogTWF0aC5wb3coMiwgZmFpbHVyZUNvdW50KSwgMzAwMDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDYW5jZWxhYmxlKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgKHZhbHVlID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZS5jYW5jZWwpID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0IHZhciBDYW5jZWxsZWRFcnJvciA9IGZ1bmN0aW9uIENhbmNlbGxlZEVycm9yKG9wdGlvbnMpIHtcbiAgdGhpcy5yZXZlcnQgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnJldmVydDtcbiAgdGhpcy5zaWxlbnQgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnNpbGVudDtcbn07XG5leHBvcnQgZnVuY3Rpb24gaXNDYW5jZWxsZWRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBDYW5jZWxsZWRFcnJvcjtcbn0gLy8gQ0xBU1NcblxuZXhwb3J0IHZhciBSZXRyeWVyID0gZnVuY3Rpb24gUmV0cnllcihjb25maWcpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB2YXIgY2FuY2VsUmV0cnkgPSBmYWxzZTtcbiAgdmFyIGNhbmNlbEZuO1xuICB2YXIgY29udGludWVGbjtcbiAgdmFyIHByb21pc2VSZXNvbHZlO1xuICB2YXIgcHJvbWlzZVJlamVjdDtcbiAgdGhpcy5hYm9ydCA9IGNvbmZpZy5hYm9ydDtcblxuICB0aGlzLmNhbmNlbCA9IGZ1bmN0aW9uIChjYW5jZWxPcHRpb25zKSB7XG4gICAgcmV0dXJuIGNhbmNlbEZuID09IG51bGwgPyB2b2lkIDAgOiBjYW5jZWxGbihjYW5jZWxPcHRpb25zKTtcbiAgfTtcblxuICB0aGlzLmNhbmNlbFJldHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIGNhbmNlbFJldHJ5ID0gdHJ1ZTtcbiAgfTtcblxuICB0aGlzLmNvbnRpbnVlUmV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2FuY2VsUmV0cnkgPSBmYWxzZTtcbiAgfTtcblxuICB0aGlzLmNvbnRpbnVlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gIH07XG5cbiAgdGhpcy5mYWlsdXJlQ291bnQgPSAwO1xuICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gIHRoaXMuaXNSZXNvbHZlZCA9IGZhbHNlO1xuICB0aGlzLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSA9IGZhbHNlO1xuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAob3V0ZXJSZXNvbHZlLCBvdXRlclJlamVjdCkge1xuICAgIHByb21pc2VSZXNvbHZlID0gb3V0ZXJSZXNvbHZlO1xuICAgIHByb21pc2VSZWplY3QgPSBvdXRlclJlamVjdDtcbiAgfSk7XG5cbiAgdmFyIHJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICBfdGhpcy5pc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vblN1Y2Nlc3ModmFsdWUpO1xuICAgICAgY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICAgICAgcHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcmVqZWN0ID0gZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICBfdGhpcy5pc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25FcnJvcih2YWx1ZSk7XG4gICAgICBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gICAgICBwcm9taXNlUmVqZWN0KHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBhdXNlID0gZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChjb250aW51ZVJlc29sdmUpIHtcbiAgICAgIGNvbnRpbnVlRm4gPSBjb250aW51ZVJlc29sdmU7XG4gICAgICBfdGhpcy5pc1BhdXNlZCA9IHRydWU7XG4gICAgICBjb25maWcub25QYXVzZSA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uUGF1c2UoKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnRpbnVlRm4gPSB1bmRlZmluZWQ7XG4gICAgICBfdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgY29uZmlnLm9uQ29udGludWUgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkNvbnRpbnVlKCk7XG4gICAgfSk7XG4gIH07IC8vIENyZWF0ZSBsb29wIGZ1bmN0aW9uXG5cblxuICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKCkge1xuICAgIC8vIERvIG5vdGhpbmcgaWYgYWxyZWFkeSByZXNvbHZlZFxuICAgIGlmIChfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb21pc2VPclZhbHVlOyAvLyBFeGVjdXRlIHF1ZXJ5XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBjb25maWcuZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSAvLyBDcmVhdGUgY2FsbGJhY2sgdG8gY2FuY2VsIHRoaXMgZmV0Y2hcblxuXG4gICAgY2FuY2VsRm4gPSBmdW5jdGlvbiBjYW5jZWxGbihjYW5jZWxPcHRpb25zKSB7XG4gICAgICBpZiAoIV90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBDYW5jZWxsZWRFcnJvcihjYW5jZWxPcHRpb25zKSk7XG4gICAgICAgIF90aGlzLmFib3J0ID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5hYm9ydCgpOyAvLyBDYW5jZWwgdHJhbnNwb3J0IGlmIHN1cHBvcnRlZFxuXG4gICAgICAgIGlmIChpc0NhbmNlbGFibGUocHJvbWlzZU9yVmFsdWUpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb21pc2VPclZhbHVlLmNhbmNlbCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKF91bnVzZWQpIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9OyAvLyBDaGVjayBpZiB0aGUgdHJhbnNwb3J0IGxheWVyIHN1cHBvcnQgY2FuY2VsbGF0aW9uXG5cblxuICAgIF90aGlzLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSA9IGlzQ2FuY2VsYWJsZShwcm9taXNlT3JWYWx1ZSk7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHByb21pc2VPclZhbHVlKS50aGVuKHJlc29sdmUpLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgdmFyIF9jb25maWckcmV0cnksIF9jb25maWckcmV0cnlEZWxheTtcblxuICAgICAgLy8gU3RvcCBpZiB0aGUgZmV0Y2ggaXMgYWxyZWFkeSByZXNvbHZlZFxuICAgICAgaWYgKF90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBEbyB3ZSBuZWVkIHRvIHJldHJ5IHRoZSByZXF1ZXN0P1xuXG5cbiAgICAgIHZhciByZXRyeSA9IChfY29uZmlnJHJldHJ5ID0gY29uZmlnLnJldHJ5KSAhPSBudWxsID8gX2NvbmZpZyRyZXRyeSA6IDM7XG4gICAgICB2YXIgcmV0cnlEZWxheSA9IChfY29uZmlnJHJldHJ5RGVsYXkgPSBjb25maWcucmV0cnlEZWxheSkgIT0gbnVsbCA/IF9jb25maWckcmV0cnlEZWxheSA6IGRlZmF1bHRSZXRyeURlbGF5O1xuICAgICAgdmFyIGRlbGF5ID0gdHlwZW9mIHJldHJ5RGVsYXkgPT09ICdmdW5jdGlvbicgPyByZXRyeURlbGF5KF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpIDogcmV0cnlEZWxheTtcbiAgICAgIHZhciBzaG91bGRSZXRyeSA9IHJldHJ5ID09PSB0cnVlIHx8IHR5cGVvZiByZXRyeSA9PT0gJ251bWJlcicgJiYgX3RoaXMuZmFpbHVyZUNvdW50IDwgcmV0cnkgfHwgdHlwZW9mIHJldHJ5ID09PSAnZnVuY3Rpb24nICYmIHJldHJ5KF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpO1xuXG4gICAgICBpZiAoY2FuY2VsUmV0cnkgfHwgIXNob3VsZFJldHJ5KSB7XG4gICAgICAgIC8vIFdlIGFyZSBkb25lIGlmIHRoZSBxdWVyeSBkb2VzIG5vdCBuZWVkIHRvIGJlIHJldHJpZWRcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5mYWlsdXJlQ291bnQrKzsgLy8gTm90aWZ5IG9uIGZhaWxcblxuICAgICAgY29uZmlnLm9uRmFpbCA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uRmFpbChfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKTsgLy8gRGVsYXlcblxuICAgICAgc2xlZXAoZGVsYXkpIC8vIFBhdXNlIGlmIHRoZSBkb2N1bWVudCBpcyBub3QgdmlzaWJsZSBvciB3aGVuIHRoZSBkZXZpY2UgaXMgb2ZmbGluZVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSB8fCAhb25saW5lTWFuYWdlci5pc09ubGluZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY2FuY2VsUmV0cnkpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJ1bigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTsgLy8gU3RhcnQgbG9vcFxuXG5cbiAgcnVuKCk7XG59OyIsICJpbXBvcnQgeyBzY2hlZHVsZU1pY3JvdGFzayB9IGZyb20gJy4vdXRpbHMnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBOb3RpZnlNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTm90aWZ5TWFuYWdlcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy50cmFuc2FjdGlvbnMgPSAwO1xuXG4gICAgdGhpcy5ub3RpZnlGbiA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuXG4gICAgdGhpcy5iYXRjaE5vdGlmeUZuID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTm90aWZ5TWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJhdGNoID0gZnVuY3Rpb24gYmF0Y2goY2FsbGJhY2spIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIHRoaXMudHJhbnNhY3Rpb25zKys7XG5cbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbGJhY2soKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbnMtLTtcblxuICAgICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9ucykge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8uc2NoZWR1bGUgPSBmdW5jdGlvbiBzY2hlZHVsZShjYWxsYmFjaykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbnMpIHtcbiAgICAgIHRoaXMucXVldWUucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMubm90aWZ5Rm4oY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBbGwgY2FsbHMgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24gd2lsbCBiZSBiYXRjaGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5iYXRjaENhbGxzID0gZnVuY3Rpb24gYmF0Y2hDYWxscyhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWxsYmFjay5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBxdWV1ZSA9IHRoaXMucXVldWU7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuXG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMuYmF0Y2hOb3RpZnlGbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcXVldWUuZm9yRWFjaChmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIF90aGlzMy5ub3RpZnlGbihjYWxsYmFjayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIG5vdGlmeSBmdW5jdGlvbi5cbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBmb3IgZXhhbXBsZSB3cmFwIG5vdGlmaWNhdGlvbnMgd2l0aCBgUmVhY3QuYWN0YCB3aGlsZSBydW5uaW5nIHRlc3RzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXROb3RpZnlGdW5jdGlvbiA9IGZ1bmN0aW9uIHNldE5vdGlmeUZ1bmN0aW9uKGZuKSB7XG4gICAgdGhpcy5ub3RpZnlGbiA9IGZuO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIGZ1bmN0aW9uIHRvIGJhdGNoIG5vdGlmaWNhdGlvbnMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSB0aWNrLlxuICAgKiBCeSBkZWZhdWx0IFJlYWN0IFF1ZXJ5IHdpbGwgdXNlIHRoZSBiYXRjaCBmdW5jdGlvbiBwcm92aWRlZCBieSBSZWFjdERPTSBvciBSZWFjdCBOYXRpdmUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldEJhdGNoTm90aWZ5RnVuY3Rpb24gPSBmdW5jdGlvbiBzZXRCYXRjaE5vdGlmeUZ1bmN0aW9uKGZuKSB7XG4gICAgdGhpcy5iYXRjaE5vdGlmeUZuID0gZm47XG4gIH07XG5cbiAgcmV0dXJuIE5vdGlmeU1hbmFnZXI7XG59KCk7IC8vIFNJTkdMRVRPTlxuXG5leHBvcnQgdmFyIG5vdGlmeU1hbmFnZXIgPSBuZXcgTm90aWZ5TWFuYWdlcigpOyIsICIvLyBUWVBFU1xuLy8gRlVOQ1RJT05TXG52YXIgbG9nZ2VyID0gY29uc29sZTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2dnZXIoKSB7XG4gIHJldHVybiBsb2dnZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0TG9nZ2VyKG5ld0xvZ2dlcikge1xuICBsb2dnZXIgPSBuZXdMb2dnZXI7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2V0QWJvcnRDb250cm9sbGVyLCBmdW5jdGlvbmFsVXBkYXRlLCBpc1ZhbGlkVGltZW91dCwgbm9vcCwgcmVwbGFjZUVxdWFsRGVlcCwgdGltZVVudGlsU3RhbGUsIGVuc3VyZVF1ZXJ5S2V5QXJyYXkgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgUmV0cnllciwgaXNDYW5jZWxsZWRFcnJvciB9IGZyb20gJy4vcmV0cnllcic7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUXVlcnkoY29uZmlnKSB7XG4gICAgdGhpcy5hYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2U7XG4gICAgdGhpcy5oYWRPYnNlcnZlcnMgPSBmYWxzZTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhjb25maWcub3B0aW9ucyk7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLmNhY2hlID0gY29uZmlnLmNhY2hlO1xuICAgIHRoaXMucXVlcnlLZXkgPSBjb25maWcucXVlcnlLZXk7XG4gICAgdGhpcy5xdWVyeUhhc2ggPSBjb25maWcucXVlcnlIYXNoO1xuICAgIHRoaXMuaW5pdGlhbFN0YXRlID0gY29uZmlnLnN0YXRlIHx8IHRoaXMuZ2V0RGVmYXVsdFN0YXRlKHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMubWV0YSA9IGNvbmZpZy5tZXRhO1xuICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5LnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJGNhY2hlVGk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgdGhpcy5tZXRhID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5tZXRhOyAvLyBEZWZhdWx0IHRvIDUgbWludXRlcyBpZiBub3QgY2FjaGUgdGltZSBpcyBzZXRcblxuICAgIHRoaXMuY2FjaGVUaW1lID0gTWF0aC5tYXgodGhpcy5jYWNoZVRpbWUgfHwgMCwgKF90aGlzJG9wdGlvbnMkY2FjaGVUaSA9IHRoaXMub3B0aW9ucy5jYWNoZVRpbWUpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJGNhY2hlVGkgOiA1ICogNjAgKiAxMDAwKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNjaGVkdWxlR2MgPSBmdW5jdGlvbiBzY2hlZHVsZUdjKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG5cbiAgICBpZiAoaXNWYWxpZFRpbWVvdXQodGhpcy5jYWNoZVRpbWUpKSB7XG4gICAgICB0aGlzLmdjVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgfSwgdGhpcy5jYWNoZVRpbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXJHY1RpbWVvdXQgPSBmdW5jdGlvbiBjbGVhckdjVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy5nY1RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmdjVGltZW91dCk7XG4gICAgICB0aGlzLmdjVGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9wdGlvbmFsUmVtb3ZlID0gZnVuY3Rpb24gb3B0aW9uYWxSZW1vdmUoKSB7XG4gICAgaWYgKCF0aGlzLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmlzRmV0Y2hpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFkT2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RGF0YSA9IGZ1bmN0aW9uIHNldERhdGEodXBkYXRlciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJGlzRGF0YUUsIF90aGlzJG9wdGlvbnM7XG5cbiAgICB2YXIgcHJldkRhdGEgPSB0aGlzLnN0YXRlLmRhdGE7IC8vIEdldCB0aGUgbmV3IGRhdGFcblxuICAgIHZhciBkYXRhID0gZnVuY3Rpb25hbFVwZGF0ZSh1cGRhdGVyLCBwcmV2RGF0YSk7IC8vIFVzZSBwcmV2IGRhdGEgaWYgYW4gaXNEYXRhRXF1YWwgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgcmV0dXJucyBgdHJ1ZWBcblxuICAgIGlmICgoX3RoaXMkb3B0aW9ucyRpc0RhdGFFID0gKF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMpLmlzRGF0YUVxdWFsKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRpc0RhdGFFLmNhbGwoX3RoaXMkb3B0aW9ucywgcHJldkRhdGEsIGRhdGEpKSB7XG4gICAgICBkYXRhID0gcHJldkRhdGE7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc3RydWN0dXJhbFNoYXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAvLyBTdHJ1Y3R1cmFsbHkgc2hhcmUgZGF0YSBiZXR3ZWVuIHByZXYgYW5kIG5ldyBkYXRhIGlmIG5lZWRlZFxuICAgICAgZGF0YSA9IHJlcGxhY2VFcXVhbERlZXAocHJldkRhdGEsIGRhdGEpO1xuICAgIH0gLy8gU2V0IGRhdGEgYW5kIG1hcmsgaXQgYXMgY2FjaGVkXG5cblxuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudXBkYXRlZEF0XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgX3Byb3RvLnNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUsIHNldFN0YXRlT3B0aW9ucykge1xuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ3NldFN0YXRlJyxcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldFN0YXRlT3B0aW9uczogc2V0U3RhdGVPcHRpb25zXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXI7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcbiAgICAoX3RoaXMkcmV0cnllciA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIuY2FuY2VsKG9wdGlvbnMpO1xuICAgIHJldHVybiBwcm9taXNlID8gcHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcbiAgICB0aGlzLmNhbmNlbCh7XG4gICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuaW5pdGlhbFN0YXRlKTtcbiAgfTtcblxuICBfcHJvdG8uaXNBY3RpdmUgPSBmdW5jdGlvbiBpc0FjdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMuc29tZShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlci5vcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc0ZldGNoaW5nID0gZnVuY3Rpb24gaXNGZXRjaGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ZldGNoaW5nO1xuICB9O1xuXG4gIF9wcm90by5pc1N0YWxlID0gZnVuY3Rpb24gaXNTdGFsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkIHx8ICF0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgfHwgdGhpcy5vYnNlcnZlcnMuc29tZShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KCkuaXNTdGFsZTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNTdGFsZUJ5VGltZSA9IGZ1bmN0aW9uIGlzU3RhbGVCeVRpbWUoc3RhbGVUaW1lKSB7XG4gICAgaWYgKHN0YWxlVGltZSA9PT0gdm9pZCAwKSB7XG4gICAgICBzdGFsZVRpbWUgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgIXRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCB8fCAhdGltZVVudGlsU3RhbGUodGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0LCBzdGFsZVRpbWUpO1xuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjI7XG5cbiAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5zaG91bGRGZXRjaE9uV2luZG93Rm9jdXMoKTtcbiAgICB9KTtcblxuICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIucmVmZXRjaCgpO1xuICAgIH0gLy8gQ29udGludWUgZmV0Y2ggaWYgY3VycmVudGx5IHBhdXNlZFxuXG5cbiAgICAoX3RoaXMkcmV0cnllcjIgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyMi5jb250aW51ZSgpO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyMztcblxuICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnNob3VsZEZldGNoT25SZWNvbm5lY3QoKTtcbiAgICB9KTtcblxuICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIucmVmZXRjaCgpO1xuICAgIH0gLy8gQ29udGludWUgZmV0Y2ggaWYgY3VycmVudGx5IHBhdXNlZFxuXG5cbiAgICAoX3RoaXMkcmV0cnllcjMgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyMy5jb250aW51ZSgpO1xuICB9O1xuXG4gIF9wcm90by5hZGRPYnNlcnZlciA9IGZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpID09PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgICB0aGlzLmhhZE9ic2VydmVycyA9IHRydWU7IC8vIFN0b3AgdGhlIHF1ZXJ5IGZyb20gYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWRcblxuICAgICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICAgICAgdGhpcy5jYWNoZS5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnb2JzZXJ2ZXJBZGRlZCcsXG4gICAgICAgIHF1ZXJ5OiB0aGlzLFxuICAgICAgICBvYnNlcnZlcjogb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBvYnNlcnZlcjtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAvLyBJZiB0aGUgdHJhbnNwb3J0IGxheWVyIGRvZXMgbm90IHN1cHBvcnQgY2FuY2VsbGF0aW9uXG4gICAgICAgIC8vIHdlJ2xsIGxldCB0aGUgcXVlcnkgY29udGludWUgc28gdGhlIHJlc3VsdCBjYW4gYmUgY2FjaGVkXG4gICAgICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXRyeWVyLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSB8fCB0aGlzLmFib3J0U2lnbmFsQ29uc3VtZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmV0cnllci5jYW5jZWwoe1xuICAgICAgICAgICAgICByZXZlcnQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsUmV0cnkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWNoZVRpbWUpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNhY2hlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdvYnNlcnZlclJlbW92ZWQnLFxuICAgICAgICBxdWVyeTogdGhpcyxcbiAgICAgICAgb2JzZXJ2ZXI6IG9ic2VydmVyXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE9ic2VydmVyc0NvdW50ID0gZnVuY3Rpb24gZ2V0T2JzZXJ2ZXJzQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZSA9IGZ1bmN0aW9uIGludmFsaWRhdGUoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnaW52YWxpZGF0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZmV0Y2ggPSBmdW5jdGlvbiBmZXRjaChvcHRpb25zLCBmZXRjaE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcyxcbiAgICAgICAgX3RoaXMkb3B0aW9ucyRiZWhhdmlvLFxuICAgICAgICBfY29udGV4dCRmZXRjaE9wdGlvbnMsXG4gICAgICAgIF9hYm9ydENvbnRyb2xsZXIkYWJvcjtcblxuICAgIGlmICh0aGlzLnN0YXRlLmlzRmV0Y2hpbmcpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgJiYgKGZldGNoT3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hPcHRpb25zLmNhbmNlbFJlZmV0Y2gpKSB7XG4gICAgICAgIC8vIFNpbGVudGx5IGNhbmNlbCBjdXJyZW50IGZldGNoIGlmIHRoZSB1c2VyIHdhbnRzIHRvIGNhbmNlbCByZWZldGNoZXNcbiAgICAgICAgdGhpcy5jYW5jZWwoe1xuICAgICAgICAgIHNpbGVudDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9taXNlKSB7XG4gICAgICAgIHZhciBfdGhpcyRyZXRyeWVyNDtcblxuICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCByZXRyaWVzIHRoYXQgd2VyZSBwb3RlbnRpYWxseSBjYW5jZWxsZWQgZHVlIHRvIHVubW91bnRzIGNhbiBjb250aW51ZVxuICAgICAgICAoX3RoaXMkcmV0cnllcjQgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyNC5jb250aW51ZVJldHJ5KCk7IC8vIFJldHVybiBjdXJyZW50IHByb21pc2UgaWYgd2UgYXJlIGFscmVhZHkgZmV0Y2hpbmdcblxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICAgICAgfVxuICAgIH0gLy8gVXBkYXRlIGNvbmZpZyBpZiBwYXNzZWQsIG90aGVyd2lzZSB0aGUgY29uZmlnIGZyb20gdGhlIGxhc3QgZXhlY3V0aW9uIGlzIHVzZWRcblxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB9IC8vIFVzZSB0aGUgb3B0aW9ucyBmcm9tIHRoZSBmaXJzdCBvYnNlcnZlciB3aXRoIGEgcXVlcnkgZnVuY3Rpb24gaWYgbm8gZnVuY3Rpb24gaXMgZm91bmQuXG4gICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIHF1ZXJ5IGlzIGh5ZHJhdGVkIG9yIGNyZWF0ZWQgd2l0aCBzZXRRdWVyeURhdGEuXG5cblxuICAgIGlmICghdGhpcy5vcHRpb25zLnF1ZXJ5Rm4pIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHgub3B0aW9ucy5xdWVyeUZuO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgICB0aGlzLnNldE9wdGlvbnMob2JzZXJ2ZXIub3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHF1ZXJ5S2V5ID0gZW5zdXJlUXVlcnlLZXlBcnJheSh0aGlzLnF1ZXJ5S2V5KTtcbiAgICB2YXIgYWJvcnRDb250cm9sbGVyID0gZ2V0QWJvcnRDb250cm9sbGVyKCk7IC8vIENyZWF0ZSBxdWVyeSBmdW5jdGlvbiBjb250ZXh0XG5cbiAgICB2YXIgcXVlcnlGbkNvbnRleHQgPSB7XG4gICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICBwYWdlUGFyYW06IHVuZGVmaW5lZCxcbiAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5Rm5Db250ZXh0LCAnc2lnbmFsJywge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAgICAgX3RoaXMyLmFib3J0U2lnbmFsQ29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTsgLy8gQ3JlYXRlIGZldGNoIGZ1bmN0aW9uXG5cbiAgICB2YXIgZmV0Y2hGbiA9IGZ1bmN0aW9uIGZldGNoRm4oKSB7XG4gICAgICBpZiAoIV90aGlzMi5vcHRpb25zLnF1ZXJ5Rm4pIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdNaXNzaW5nIHF1ZXJ5Rm4nKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLmFib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5xdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICB9OyAvLyBUcmlnZ2VyIGJlaGF2aW9yIGhvb2tcblxuXG4gICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICBmZXRjaE9wdGlvbnM6IGZldGNoT3B0aW9ucyxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgZmV0Y2hGbjogZmV0Y2hGbixcbiAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgIH07XG5cbiAgICBpZiAoKF90aGlzJG9wdGlvbnMkYmVoYXZpbyA9IHRoaXMub3B0aW9ucy5iZWhhdmlvcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkYmVoYXZpby5vbkZldGNoKSB7XG4gICAgICB2YXIgX3RoaXMkb3B0aW9ucyRiZWhhdmlvMjtcblxuICAgICAgKF90aGlzJG9wdGlvbnMkYmVoYXZpbzIgPSB0aGlzLm9wdGlvbnMuYmVoYXZpb3IpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGJlaGF2aW8yLm9uRmV0Y2goY29udGV4dCk7XG4gICAgfSAvLyBTdG9yZSBzdGF0ZSBpbiBjYXNlIHRoZSBjdXJyZW50IGZldGNoIG5lZWRzIHRvIGJlIHJldmVydGVkXG5cblxuICAgIHRoaXMucmV2ZXJ0U3RhdGUgPSB0aGlzLnN0YXRlOyAvLyBTZXQgdG8gZmV0Y2hpbmcgc3RhdGUgaWYgbm90IGFscmVhZHkgaW4gaXRcblxuICAgIGlmICghdGhpcy5zdGF0ZS5pc0ZldGNoaW5nIHx8IHRoaXMuc3RhdGUuZmV0Y2hNZXRhICE9PSAoKF9jb250ZXh0JGZldGNoT3B0aW9ucyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zLm1ldGEpKSB7XG4gICAgICB2YXIgX2NvbnRleHQkZmV0Y2hPcHRpb25zMjtcblxuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdmZXRjaCcsXG4gICAgICAgIG1ldGE6IChfY29udGV4dCRmZXRjaE9wdGlvbnMyID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMyLm1ldGFcbiAgICAgIH0pO1xuICAgIH0gLy8gVHJ5IHRvIGZldGNoIHRoZSBkYXRhXG5cblxuICAgIHRoaXMucmV0cnllciA9IG5ldyBSZXRyeWVyKHtcbiAgICAgIGZuOiBjb250ZXh0LmZldGNoRm4sXG4gICAgICBhYm9ydDogYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiAoX2Fib3J0Q29udHJvbGxlciRhYm9yID0gYWJvcnRDb250cm9sbGVyLmFib3J0KSA9PSBudWxsID8gdm9pZCAwIDogX2Fib3J0Q29udHJvbGxlciRhYm9yLmJpbmQoYWJvcnRDb250cm9sbGVyKSxcbiAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gb25TdWNjZXNzKGRhdGEpIHtcbiAgICAgICAgX3RoaXMyLnNldERhdGEoZGF0YSk7IC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuXG5cbiAgICAgICAgX3RoaXMyLmNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzMi5jYWNoZS5jb25maWcub25TdWNjZXNzKGRhdGEsIF90aGlzMik7IC8vIFJlbW92ZSBxdWVyeSBhZnRlciBmZXRjaGluZyBpZiBjYWNoZSB0aW1lIGlzIDBcblxuICAgICAgICBpZiAoX3RoaXMyLmNhY2hlVGltZSA9PT0gMCkge1xuICAgICAgICAgIF90aGlzMi5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25FcnJvcjogZnVuY3Rpb24gb25FcnJvcihlcnJvcikge1xuICAgICAgICAvLyBPcHRpbWlzdGljYWxseSB1cGRhdGUgc3RhdGUgaWYgbmVlZGVkXG4gICAgICAgIGlmICghKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnNpbGVudCkpIHtcbiAgICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0NhbmNlbGxlZEVycm9yKGVycm9yKSkge1xuICAgICAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgICAgIF90aGlzMi5jYWNoZS5jb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMyLmNhY2hlLmNvbmZpZy5vbkVycm9yKGVycm9yLCBfdGhpczIpOyAvLyBMb2cgZXJyb3JcblxuICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKGVycm9yKTtcbiAgICAgICAgfSAvLyBSZW1vdmUgcXVlcnkgYWZ0ZXIgZmV0Y2hpbmcgaWYgY2FjaGUgdGltZSBpcyAwXG5cblxuICAgICAgICBpZiAoX3RoaXMyLmNhY2hlVGltZSA9PT0gMCkge1xuICAgICAgICAgIF90aGlzMi5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25GYWlsOiBmdW5jdGlvbiBvbkZhaWwoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25QYXVzZTogZnVuY3Rpb24gb25QYXVzZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAncGF1c2UnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6IGZ1bmN0aW9uIG9uQ29udGludWUoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2NvbnRpbnVlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogY29udGV4dC5vcHRpb25zLnJldHJ5LFxuICAgICAgcmV0cnlEZWxheTogY29udGV4dC5vcHRpb25zLnJldHJ5RGVsYXlcbiAgICB9KTtcbiAgICB0aGlzLnByb21pc2UgPSB0aGlzLnJldHJ5ZXIucHJvbWlzZTtcbiAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucmVkdWNlcih0aGlzLnN0YXRlLCBhY3Rpb24pO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5vblF1ZXJ5VXBkYXRlKGFjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHF1ZXJ5OiBfdGhpczMsXG4gICAgICAgIHR5cGU6ICdxdWVyeVVwZGF0ZWQnLFxuICAgICAgICBhY3Rpb246IGFjdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldERlZmF1bHRTdGF0ZSA9IGZ1bmN0aW9uIGdldERlZmF1bHRTdGF0ZShvcHRpb25zKSB7XG4gICAgdmFyIGRhdGEgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuaW5pdGlhbERhdGEoKSA6IG9wdGlvbnMuaW5pdGlhbERhdGE7XG4gICAgdmFyIGhhc0luaXRpYWxEYXRhID0gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGEgIT09ICd1bmRlZmluZWQnO1xuICAgIHZhciBpbml0aWFsRGF0YVVwZGF0ZWRBdCA9IGhhc0luaXRpYWxEYXRhID8gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0KCkgOiBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0IDogMDtcbiAgICB2YXIgaGFzRGF0YSA9IHR5cGVvZiBkYXRhICE9PSAndW5kZWZpbmVkJztcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGRhdGFVcGRhdGVDb3VudDogMCxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IGhhc0RhdGEgPyBpbml0aWFsRGF0YVVwZGF0ZWRBdCAhPSBudWxsID8gaW5pdGlhbERhdGFVcGRhdGVkQXQgOiBEYXRlLm5vdygpIDogMCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgZXJyb3JVcGRhdGVDb3VudDogMCxcbiAgICAgIGVycm9yVXBkYXRlZEF0OiAwLFxuICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICBmZXRjaE1ldGE6IG51bGwsXG4gICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgIGlzSW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgc3RhdHVzOiBoYXNEYXRhID8gJ3N1Y2Nlc3MnIDogJ2lkbGUnXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8ucmVkdWNlciA9IGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgIHZhciBfYWN0aW9uJG1ldGEsIF9hY3Rpb24kZGF0YVVwZGF0ZWRBdDtcblxuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQgKyAxXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdwYXVzZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc1BhdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnY29udGludWUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdmZXRjaCc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgICAgICBmZXRjaE1ldGE6IChfYWN0aW9uJG1ldGEgPSBhY3Rpb24ubWV0YSkgIT0gbnVsbCA/IF9hY3Rpb24kbWV0YSA6IG51bGwsXG4gICAgICAgICAgaXNGZXRjaGluZzogdHJ1ZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgfSwgIXN0YXRlLmRhdGFVcGRhdGVkQXQgJiYge1xuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIHN0YXR1czogJ2xvYWRpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICAgIGRhdGFVcGRhdGVDb3VudDogc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICBkYXRhVXBkYXRlZEF0OiAoX2FjdGlvbiRkYXRhVXBkYXRlZEF0ID0gYWN0aW9uLmRhdGFVcGRhdGVkQXQpICE9IG51bGwgPyBfYWN0aW9uJGRhdGFVcGRhdGVkQXQgOiBEYXRlLm5vdygpLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzSW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICB2YXIgZXJyb3IgPSBhY3Rpb24uZXJyb3I7XG5cbiAgICAgICAgaWYgKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnJldmVydCAmJiB0aGlzLnJldmVydFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLnJldmVydFN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgZXJyb3JVcGRhdGVDb3VudDogc3RhdGUuZXJyb3JVcGRhdGVDb3VudCArIDEsXG4gICAgICAgICAgZXJyb3JVcGRhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiAnZXJyb3InXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdpbnZhbGlkYXRlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzSW52YWxpZGF0ZWQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3NldFN0YXRlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgYWN0aW9uLnN0YXRlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUXVlcnk7XG59KCk7IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgaGFzaFF1ZXJ5S2V5QnlPcHRpb25zLCBtYXRjaFF1ZXJ5LCBwYXJzZUZpbHRlckFyZ3MgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5Q2FjaGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoUXVlcnlDYWNoZSwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gUXVlcnlDYWNoZShjb25maWcpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBfdGhpcy5xdWVyaWVzID0gW107XG4gICAgX3RoaXMucXVlcmllc01hcCA9IHt9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeUNhY2hlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGQgPSBmdW5jdGlvbiBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgdmFyIF9vcHRpb25zJHF1ZXJ5SGFzaDtcblxuICAgIHZhciBxdWVyeUtleSA9IG9wdGlvbnMucXVlcnlLZXk7XG4gICAgdmFyIHF1ZXJ5SGFzaCA9IChfb3B0aW9ucyRxdWVyeUhhc2ggPSBvcHRpb25zLnF1ZXJ5SGFzaCkgIT0gbnVsbCA/IF9vcHRpb25zJHF1ZXJ5SGFzaCA6IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgb3B0aW9ucyk7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5nZXQocXVlcnlIYXNoKTtcblxuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHtcbiAgICAgICAgY2FjaGU6IHRoaXMsXG4gICAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgICAgcXVlcnlIYXNoOiBxdWVyeUhhc2gsXG4gICAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpLFxuICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBjbGllbnQuZ2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSksXG4gICAgICAgIG1ldGE6IG9wdGlvbnMubWV0YVxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZChxdWVyeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9O1xuXG4gIF9wcm90by5hZGQgPSBmdW5jdGlvbiBhZGQocXVlcnkpIHtcbiAgICBpZiAoIXRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdKSB7XG4gICAgICB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXSA9IHF1ZXJ5O1xuICAgICAgdGhpcy5xdWVyaWVzLnB1c2gocXVlcnkpO1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAncXVlcnlBZGRlZCcsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocXVlcnkpIHtcbiAgICB2YXIgcXVlcnlJbk1hcCA9IHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdO1xuXG4gICAgaWYgKHF1ZXJ5SW5NYXApIHtcbiAgICAgIHF1ZXJ5LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMucXVlcmllcyA9IHRoaXMucXVlcmllcy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IHF1ZXJ5O1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChxdWVyeUluTWFwID09PSBxdWVyeSkge1xuICAgICAgICBkZWxldGUgdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF07XG4gICAgICB9XG5cbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5UmVtb3ZlZCcsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBfdGhpczIucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXQgPSBmdW5jdGlvbiBnZXQocXVlcnlIYXNoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllc01hcFtxdWVyeUhhc2hdO1xuICB9O1xuXG4gIF9wcm90by5nZXRBbGwgPSBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllcztcbiAgfTtcblxuICBfcHJvdG8uZmluZCA9IGZ1bmN0aW9uIGZpbmQoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnc1swXTtcblxuICAgIGlmICh0eXBlb2YgZmlsdGVycy5leGFjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpbHRlcnMuZXhhY3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1ZXJpZXMuZmluZChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHJldHVybiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZmluZEFsbCA9IGZ1bmN0aW9uIGZpbmRBbGwoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzMiA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3MyWzBdO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDAgPyB0aGlzLnF1ZXJpZXMuZmlsdGVyKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgcmV0dXJuIG1hdGNoUXVlcnkoZmlsdGVycywgcXVlcnkpO1xuICAgIH0pIDogdGhpcy5xdWVyaWVzO1xuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoZXZlbnQpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcihldmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNC5xdWVyaWVzLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Lm9uRm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5vbk9ubGluZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2FjaGU7XG59KFN1YnNjcmliYWJsZSk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBSZXRyeWVyIH0gZnJvbSAnLi9yZXRyeWVyJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL3V0aWxzJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTXV0YXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNdXRhdGlvbihjb25maWcpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgY29uZmlnLmRlZmF1bHRPcHRpb25zLCBjb25maWcub3B0aW9ucyk7XG4gICAgdGhpcy5tdXRhdGlvbklkID0gY29uZmlnLm11dGF0aW9uSWQ7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGU7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLnN0YXRlID0gY29uZmlnLnN0YXRlIHx8IGdldERlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMubWV0YSA9IGNvbmZpZy5tZXRhO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE11dGF0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSkge1xuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ3NldFN0YXRlJyxcbiAgICAgIHN0YXRlOiBzdGF0ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5hZGRPYnNlcnZlciA9IGZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpID09PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICE9PSBvYnNlcnZlcjtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgIHRoaXMucmV0cnllci5jYW5jZWwoKTtcbiAgICAgIHJldHVybiB0aGlzLnJldHJ5ZXIucHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcblxuICBfcHJvdG8uY29udGludWUgPSBmdW5jdGlvbiBfY29udGludWUoKSB7XG4gICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgdGhpcy5yZXRyeWVyLmNvbnRpbnVlKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSgpO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlID0gZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGRhdGE7XG4gICAgdmFyIHJlc3RvcmVkID0gdGhpcy5zdGF0ZS5zdGF0dXMgPT09ICdsb2FkaW5nJztcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgaWYgKCFyZXN0b3JlZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdsb2FkaW5nJyxcbiAgICAgICAgdmFyaWFibGVzOiB0aGlzLm9wdGlvbnMudmFyaWFibGVzXG4gICAgICB9KTtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25NdXRhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlKF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uTXV0YXRlID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uTXV0YXRlKF90aGlzLnN0YXRlLnZhcmlhYmxlcyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ICE9PSBfdGhpcy5zdGF0ZS5jb250ZXh0KSB7XG4gICAgICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2xvYWRpbmcnLFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgICAgIHZhcmlhYmxlczogX3RoaXMuc3RhdGUudmFyaWFibGVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLmV4ZWN1dGVNdXRhdGlvbigpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgZGF0YSA9IHJlc3VsdDsgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG5cbiAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25TdWNjZXNzKGRhdGEsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCwgX3RoaXMpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU3VjY2VzcyhkYXRhLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZChkYXRhLCBudWxsLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvcihlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0LCBfdGhpcyk7IC8vIExvZyBlcnJvclxuXG4gICAgICBnZXRMb2dnZXIoKS5lcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25FcnJvcihlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25TZXR0bGVkKHVuZGVmaW5lZCwgZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVNdXRhdGlvbiA9IGZ1bmN0aW9uIGV4ZWN1dGVNdXRhdGlvbigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcyxcbiAgICAgICAgX3RoaXMkb3B0aW9ucyRyZXRyeTtcblxuICAgIHRoaXMucmV0cnllciA9IG5ldyBSZXRyeWVyKHtcbiAgICAgIGZuOiBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgaWYgKCFfdGhpczIub3B0aW9ucy5tdXRhdGlvbkZuKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdObyBtdXRhdGlvbkZuIGZvdW5kJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMubXV0YXRpb25GbihfdGhpczIuc3RhdGUudmFyaWFibGVzKTtcbiAgICAgIH0sXG4gICAgICBvbkZhaWw6IGZ1bmN0aW9uIG9uRmFpbCgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhdXNlOiBmdW5jdGlvbiBvblBhdXNlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdwYXVzZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogZnVuY3Rpb24gb25Db250aW51ZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnY29udGludWUnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJldHJ5OiAoX3RoaXMkb3B0aW9ucyRyZXRyeSA9IHRoaXMub3B0aW9ucy5yZXRyeSkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkcmV0cnkgOiAwLFxuICAgICAgcmV0cnlEZWxheTogdGhpcy5vcHRpb25zLnJldHJ5RGVsYXlcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLnN0YXRlID0gcmVkdWNlcih0aGlzLnN0YXRlLCBhY3Rpb24pO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5vbk11dGF0aW9uVXBkYXRlKGFjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMzLm11dGF0aW9uQ2FjaGUubm90aWZ5KF90aGlzMyk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE11dGF0aW9uO1xufSgpO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRTdGF0ZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0OiB1bmRlZmluZWQsXG4gICAgZGF0YTogdW5kZWZpbmVkLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGZhaWx1cmVDb3VudDogMCxcbiAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgc3RhdHVzOiAnaWRsZScsXG4gICAgdmFyaWFibGVzOiB1bmRlZmluZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZhaWx1cmVDb3VudCArIDFcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAncGF1c2UnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBpc1BhdXNlZDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdjb250aW51ZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdsb2FkaW5nJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgY29udGV4dDogYWN0aW9uLmNvbnRleHQsXG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICAgIHZhcmlhYmxlczogYWN0aW9uLnZhcmlhYmxlc1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogYWN0aW9uLmVycm9yLFxuICAgICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZhaWx1cmVDb3VudCArIDEsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3NldFN0YXRlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIGFjdGlvbi5zdGF0ZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBNdXRhdGlvbiB9IGZyb20gJy4vbXV0YXRpb24nO1xuaW1wb3J0IHsgbWF0Y2hNdXRhdGlvbiwgbm9vcCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBNdXRhdGlvbkNhY2hlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKE11dGF0aW9uQ2FjaGUsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIE11dGF0aW9uQ2FjaGUoY29uZmlnKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG4gICAgX3RoaXMubXV0YXRpb25zID0gW107XG4gICAgX3RoaXMubXV0YXRpb25JZCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE11dGF0aW9uQ2FjaGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZCA9IGZ1bmN0aW9uIGJ1aWxkKGNsaWVudCwgb3B0aW9ucywgc3RhdGUpIHtcbiAgICB2YXIgbXV0YXRpb24gPSBuZXcgTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb25DYWNoZTogdGhpcyxcbiAgICAgIG11dGF0aW9uSWQ6ICsrdGhpcy5tdXRhdGlvbklkLFxuICAgICAgb3B0aW9uczogY2xpZW50LmRlZmF1bHRNdXRhdGlvbk9wdGlvbnMob3B0aW9ucyksXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9ucy5tdXRhdGlvbktleSA/IGNsaWVudC5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMubXV0YXRpb25LZXkpIDogdW5kZWZpbmVkLFxuICAgICAgbWV0YTogb3B0aW9ucy5tZXRhXG4gICAgfSk7XG4gICAgdGhpcy5hZGQobXV0YXRpb24pO1xuICAgIHJldHVybiBtdXRhdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKG11dGF0aW9uKSB7XG4gICAgdGhpcy5tdXRhdGlvbnMucHVzaChtdXRhdGlvbik7XG4gICAgdGhpcy5ub3RpZnkobXV0YXRpb24pO1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUobXV0YXRpb24pIHtcbiAgICB0aGlzLm11dGF0aW9ucyA9IHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggIT09IG11dGF0aW9uO1xuICAgIH0pO1xuICAgIG11dGF0aW9uLmNhbmNlbCgpO1xuICAgIHRoaXMubm90aWZ5KG11dGF0aW9uKTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLm11dGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgICBfdGhpczIucmVtb3ZlKG11dGF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXRBbGwgPSBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zO1xuICB9O1xuXG4gIF9wcm90by5maW5kID0gZnVuY3Rpb24gZmluZChmaWx0ZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBmaWx0ZXJzLmV4YWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZmlsdGVycy5leGFjdCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zLmZpbmQoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICByZXR1cm4gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbik7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmRBbGwgPSBmdW5jdGlvbiBmaW5kQWxsKGZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkobXV0YXRpb24pIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcihtdXRhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdGhpcy5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB0aGlzLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICB9O1xuXG4gIF9wcm90by5yZXN1bWVQYXVzZWRNdXRhdGlvbnMgPSBmdW5jdGlvbiByZXN1bWVQYXVzZWRNdXRhdGlvbnMoKSB7XG4gICAgdmFyIHBhdXNlZE11dGF0aW9ucyA9IHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc3RhdGUuaXNQYXVzZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHBhdXNlZE11dGF0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHByb21pc2UsIG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBtdXRhdGlvbi5jb250aW51ZSgpLmNhdGNoKG5vb3ApO1xuICAgICAgICB9KTtcbiAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTXV0YXRpb25DYWNoZTtcbn0oU3Vic2NyaWJhYmxlKTsiLCAiaW1wb3J0IHsgaXNDYW5jZWxhYmxlIH0gZnJvbSAnLi9yZXRyeWVyJztcbmltcG9ydCB7IGdldEFib3J0Q29udHJvbGxlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGluZmluaXRlUXVlcnlCZWhhdmlvcigpIHtcbiAgcmV0dXJuIHtcbiAgICBvbkZldGNoOiBmdW5jdGlvbiBvbkZldGNoKGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuZmV0Y2hGbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9jb250ZXh0JGZldGNoT3B0aW9ucywgX2NvbnRleHQkZmV0Y2hPcHRpb25zMiwgX2NvbnRleHQkZmV0Y2hPcHRpb25zMywgX2NvbnRleHQkZmV0Y2hPcHRpb25zNCwgX2NvbnRleHQkc3RhdGUkZGF0YSwgX2NvbnRleHQkc3RhdGUkZGF0YTI7XG5cbiAgICAgICAgdmFyIHJlZmV0Y2hQYWdlID0gKF9jb250ZXh0JGZldGNoT3B0aW9ucyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogKF9jb250ZXh0JGZldGNoT3B0aW9uczIgPSBfY29udGV4dCRmZXRjaE9wdGlvbnMubWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczIucmVmZXRjaFBhZ2U7XG4gICAgICAgIHZhciBmZXRjaE1vcmUgPSAoX2NvbnRleHQkZmV0Y2hPcHRpb25zMyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogKF9jb250ZXh0JGZldGNoT3B0aW9uczQgPSBfY29udGV4dCRmZXRjaE9wdGlvbnMzLm1ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnM0LmZldGNoTW9yZTtcbiAgICAgICAgdmFyIHBhZ2VQYXJhbSA9IGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLnBhZ2VQYXJhbTtcbiAgICAgICAgdmFyIGlzRmV0Y2hpbmdOZXh0UGFnZSA9IChmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5kaXJlY3Rpb24pID09PSAnZm9yd2FyZCc7XG4gICAgICAgIHZhciBpc0ZldGNoaW5nUHJldmlvdXNQYWdlID0gKGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLmRpcmVjdGlvbikgPT09ICdiYWNrd2FyZCc7XG4gICAgICAgIHZhciBvbGRQYWdlcyA9ICgoX2NvbnRleHQkc3RhdGUkZGF0YSA9IGNvbnRleHQuc3RhdGUuZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JHN0YXRlJGRhdGEucGFnZXMpIHx8IFtdO1xuICAgICAgICB2YXIgb2xkUGFnZVBhcmFtcyA9ICgoX2NvbnRleHQkc3RhdGUkZGF0YTIgPSBjb250ZXh0LnN0YXRlLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRzdGF0ZSRkYXRhMi5wYWdlUGFyYW1zKSB8fCBbXTtcbiAgICAgICAgdmFyIGFib3J0Q29udHJvbGxlciA9IGdldEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICB2YXIgYWJvcnRTaWduYWwgPSBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgIHZhciBuZXdQYWdlUGFyYW1zID0gb2xkUGFnZVBhcmFtcztcbiAgICAgICAgdmFyIGNhbmNlbGxlZCA9IGZhbHNlOyAvLyBHZXQgcXVlcnkgZnVuY3Rpb25cblxuICAgICAgICB2YXIgcXVlcnlGbiA9IGNvbnRleHQub3B0aW9ucy5xdWVyeUZuIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ01pc3NpbmcgcXVlcnlGbicpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBidWlsZE5ld1BhZ2VzID0gZnVuY3Rpb24gYnVpbGROZXdQYWdlcyhwYWdlcywgcGFyYW0sIHBhZ2UsIHByZXZpb3VzKSB7XG4gICAgICAgICAgbmV3UGFnZVBhcmFtcyA9IHByZXZpb3VzID8gW3BhcmFtXS5jb25jYXQobmV3UGFnZVBhcmFtcykgOiBbXS5jb25jYXQobmV3UGFnZVBhcmFtcywgW3BhcmFtXSk7XG4gICAgICAgICAgcmV0dXJuIHByZXZpb3VzID8gW3BhZ2VdLmNvbmNhdChwYWdlcykgOiBbXS5jb25jYXQocGFnZXMsIFtwYWdlXSk7XG4gICAgICAgIH07IC8vIENyZWF0ZSBmdW5jdGlvbiB0byBmZXRjaCBhIHBhZ2VcblxuXG4gICAgICAgIHZhciBmZXRjaFBhZ2UgPSBmdW5jdGlvbiBmZXRjaFBhZ2UocGFnZXMsIG1hbnVhbCwgcGFyYW0sIHByZXZpb3VzKSB7XG4gICAgICAgICAgaWYgKGNhbmNlbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdDYW5jZWxsZWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSAndW5kZWZpbmVkJyAmJiAhbWFudWFsICYmIHBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwYWdlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHF1ZXJ5Rm5Db250ZXh0ID0ge1xuICAgICAgICAgICAgcXVlcnlLZXk6IGNvbnRleHQucXVlcnlLZXksXG4gICAgICAgICAgICBzaWduYWw6IGFib3J0U2lnbmFsLFxuICAgICAgICAgICAgcGFnZVBhcmFtOiBwYXJhbSxcbiAgICAgICAgICAgIG1ldGE6IGNvbnRleHQubWV0YVxuICAgICAgICAgIH07XG4gICAgICAgICAgdmFyIHF1ZXJ5Rm5SZXN1bHQgPSBxdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShxdWVyeUZuUmVzdWx0KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVpbGROZXdQYWdlcyhwYWdlcywgcGFyYW0sIHBhZ2UsIHByZXZpb3VzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChpc0NhbmNlbGFibGUocXVlcnlGblJlc3VsdCkpIHtcbiAgICAgICAgICAgIHZhciBwcm9taXNlQXNBbnkgPSBwcm9taXNlO1xuICAgICAgICAgICAgcHJvbWlzZUFzQW55LmNhbmNlbCA9IHF1ZXJ5Rm5SZXN1bHQuY2FuY2VsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBwcm9taXNlOyAvLyBGZXRjaCBmaXJzdCBwYWdlP1xuXG4gICAgICAgIGlmICghb2xkUGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShbXSk7XG4gICAgICAgIH0gLy8gRmV0Y2ggbmV4dCBwYWdlP1xuICAgICAgICBlbHNlIGlmIChpc0ZldGNoaW5nTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgIHZhciBtYW51YWwgPSB0eXBlb2YgcGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgIHZhciBwYXJhbSA9IG1hbnVhbCA/IHBhZ2VQYXJhbSA6IGdldE5leHRQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBvbGRQYWdlcyk7XG4gICAgICAgICAgICBwcm9taXNlID0gZmV0Y2hQYWdlKG9sZFBhZ2VzLCBtYW51YWwsIHBhcmFtKTtcbiAgICAgICAgICB9IC8vIEZldGNoIHByZXZpb3VzIHBhZ2U/XG4gICAgICAgICAgZWxzZSBpZiAoaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSkge1xuICAgICAgICAgICAgICB2YXIgX21hbnVhbCA9IHR5cGVvZiBwYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnO1xuXG4gICAgICAgICAgICAgIHZhciBfcGFyYW0gPSBfbWFudWFsID8gcGFnZVBhcmFtIDogZ2V0UHJldmlvdXNQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBvbGRQYWdlcyk7XG5cbiAgICAgICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShvbGRQYWdlcywgX21hbnVhbCwgX3BhcmFtLCB0cnVlKTtcbiAgICAgICAgICAgIH0gLy8gUmVmZXRjaCBwYWdlc1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIG5ld1BhZ2VQYXJhbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgIHZhciBtYW51YWwgPSB0eXBlb2YgY29udGV4dC5vcHRpb25zLmdldE5leHRQYWdlUGFyYW0gPT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZEZldGNoRmlyc3RQYWdlID0gcmVmZXRjaFBhZ2UgJiYgb2xkUGFnZXNbMF0gPyByZWZldGNoUGFnZShvbGRQYWdlc1swXSwgMCwgb2xkUGFnZXMpIDogdHJ1ZTsgLy8gRmV0Y2ggZmlyc3QgcGFnZVxuXG4gICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2hvdWxkRmV0Y2hGaXJzdFBhZ2UgPyBmZXRjaFBhZ2UoW10sIG1hbnVhbCwgb2xkUGFnZVBhcmFtc1swXSkgOiBQcm9taXNlLnJlc29sdmUoYnVpbGROZXdQYWdlcyhbXSwgb2xkUGFnZVBhcmFtc1swXSwgb2xkUGFnZXNbMF0pKTsgLy8gRmV0Y2ggcmVtYWluaW5nIHBhZ2VzXG5cbiAgICAgICAgICAgICAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAocGFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hvdWxkRmV0Y2hOZXh0UGFnZSA9IHJlZmV0Y2hQYWdlICYmIG9sZFBhZ2VzW2ldID8gcmVmZXRjaFBhZ2Uob2xkUGFnZXNbaV0sIGksIG9sZFBhZ2VzKSA6IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRmV0Y2hOZXh0UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wYXJhbTIgPSBtYW51YWwgPyBvbGRQYWdlUGFyYW1zW2ldIDogZ2V0TmV4dFBhZ2VQYXJhbShjb250ZXh0Lm9wdGlvbnMsIHBhZ2VzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoUGFnZShwYWdlcywgbWFudWFsLCBfcGFyYW0yKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJ1aWxkTmV3UGFnZXMocGFnZXMsIG9sZFBhZ2VQYXJhbXNbaV0sIG9sZFBhZ2VzW2ldKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBvbGRQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBfbG9vcChpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZpbmFsUHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAocGFnZXMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFnZXM6IHBhZ2VzLFxuICAgICAgICAgICAgcGFnZVBhcmFtczogbmV3UGFnZVBhcmFtc1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZmluYWxQcm9taXNlQXNBbnkgPSBmaW5hbFByb21pc2U7XG5cbiAgICAgICAgZmluYWxQcm9taXNlQXNBbnkuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcblxuICAgICAgICAgIGlmIChpc0NhbmNlbGFibGUocHJvbWlzZSkpIHtcbiAgICAgICAgICAgIHByb21pc2UuY2FuY2VsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBmaW5hbFByb21pc2U7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIHJldHVybiBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0gPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbShwYWdlc1twYWdlcy5sZW5ndGggLSAxXSwgcGFnZXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIHJldHVybiBvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtKHBhZ2VzWzBdLCBwYWdlcyk7XG59XG4vKipcbiAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIG5leHQgcGFnZS5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc05leHRQYWdlKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIGlmIChvcHRpb25zLmdldE5leHRQYWdlUGFyYW0gJiYgQXJyYXkuaXNBcnJheShwYWdlcykpIHtcbiAgICB2YXIgbmV4dFBhZ2VQYXJhbSA9IGdldE5leHRQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpO1xuICAgIHJldHVybiB0eXBlb2YgbmV4dFBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmV4dFBhZ2VQYXJhbSAhPT0gbnVsbCAmJiBuZXh0UGFnZVBhcmFtICE9PSBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBwcmV2aW91cyBwYWdlLlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJldmlvdXNQYWdlKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIGlmIChvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtICYmIEFycmF5LmlzQXJyYXkocGFnZXMpKSB7XG4gICAgdmFyIHByZXZpb3VzUGFnZVBhcmFtID0gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpO1xuICAgIHJldHVybiB0eXBlb2YgcHJldmlvdXNQYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnICYmIHByZXZpb3VzUGFnZVBhcmFtICE9PSBudWxsICYmIHByZXZpb3VzUGFnZVBhcmFtICE9PSBmYWxzZTtcbiAgfVxufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleSwgbm9vcCwgcGFyc2VGaWx0ZXJBcmdzLCBwYXJzZVF1ZXJ5QXJncywgcGFydGlhbE1hdGNoS2V5LCBoYXNoUXVlcnlLZXlCeU9wdGlvbnMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5Q2FjaGUgfSBmcm9tICcuL3F1ZXJ5Q2FjaGUnO1xuaW1wb3J0IHsgTXV0YXRpb25DYWNoZSB9IGZyb20gJy4vbXV0YXRpb25DYWNoZSc7XG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgaW5maW5pdGVRdWVyeUJlaGF2aW9yIH0gZnJvbSAnLi9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3InO1xuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeUNsaWVudChjb25maWcpIHtcbiAgICBpZiAoY29uZmlnID09PSB2b2lkIDApIHtcbiAgICAgIGNvbmZpZyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMucXVlcnlDYWNoZSA9IGNvbmZpZy5xdWVyeUNhY2hlIHx8IG5ldyBRdWVyeUNhY2hlKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGUgfHwgbmV3IE11dGF0aW9uQ2FjaGUoKTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zIHx8IHt9O1xuICAgIHRoaXMucXVlcnlEZWZhdWx0cyA9IFtdO1xuICAgIHRoaXMubXV0YXRpb25EZWZhdWx0cyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5Q2xpZW50LnByb3RvdHlwZTtcblxuICBfcHJvdG8ubW91bnQgPSBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy51bnN1YnNjcmliZUZvY3VzID0gZm9jdXNNYW5hZ2VyLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpICYmIG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLm9uRm9jdXMoKTtcblxuICAgICAgICBfdGhpcy5xdWVyeUNhY2hlLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlT25saW5lID0gb25saW5lTWFuYWdlci5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5vbk9ubGluZSgpO1xuXG4gICAgICAgIF90aGlzLnF1ZXJ5Q2FjaGUub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8udW5tb3VudCA9IGZ1bmN0aW9uIHVubW91bnQoKSB7XG4gICAgdmFyIF90aGlzJHVuc3Vic2NyaWJlRm9jdSwgX3RoaXMkdW5zdWJzY3JpYmVPbmxpO1xuXG4gICAgKF90aGlzJHVuc3Vic2NyaWJlRm9jdSA9IHRoaXMudW5zdWJzY3JpYmVGb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHVuc3Vic2NyaWJlRm9jdS5jYWxsKHRoaXMpO1xuICAgIChfdGhpcyR1bnN1YnNjcmliZU9ubGkgPSB0aGlzLnVuc3Vic2NyaWJlT25saW5lKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkdW5zdWJzY3JpYmVPbmxpLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBmaWx0ZXJzLmZldGNoaW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pc011dGF0aW5nID0gZnVuY3Rpb24gaXNNdXRhdGluZyhmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZS5maW5kQWxsKF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICBmZXRjaGluZzogdHJ1ZVxuICAgIH0pKS5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJ5RGF0YShxdWVyeUtleSwgZmlsdGVycykge1xuICAgIHZhciBfdGhpcyRxdWVyeUNhY2hlJGZpbmQ7XG5cbiAgICByZXR1cm4gKF90aGlzJHF1ZXJ5Q2FjaGUkZmluZCA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZC5zdGF0ZS5kYXRhO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlDYWNoZSgpLmZpbmRBbGwocXVlcnlLZXlPckZpbHRlcnMpLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHF1ZXJ5S2V5ID0gX3JlZi5xdWVyeUtleSxcbiAgICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gICAgICB2YXIgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBkYXRhXTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcnlEYXRhID0gZnVuY3Rpb24gc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhxdWVyeUtleSk7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMocGFyc2VkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKS5zZXREYXRhKHVwZGF0ZXIsIG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIHNldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzLCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLmdldFF1ZXJ5Q2FjaGUoKS5maW5kQWxsKHF1ZXJ5S2V5T3JGaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBxdWVyeUtleSA9IF9yZWYyLnF1ZXJ5S2V5O1xuICAgICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBfdGhpczIuc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKV07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlTdGF0ZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5U3RhdGUocXVlcnlLZXksIGZpbHRlcnMpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlDYWNoZSRmaW5kMjtcblxuICAgIHJldHVybiAoX3RoaXMkcXVlcnlDYWNoZSRmaW5kMiA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIuc3RhdGU7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZVF1ZXJpZXMgPSBmdW5jdGlvbiByZW1vdmVRdWVyaWVzKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Q2FjaGUucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldFF1ZXJpZXMgPSBmdW5jdGlvbiByZXNldFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczNbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzM1sxXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuXG4gICAgdmFyIHJlZmV0Y2hGaWx0ZXJzID0gX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIGFjdGl2ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LnJlc2V0KCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfdGhpczMucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxRdWVyaWVzID0gZnVuY3Rpb24gY2FuY2VsUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczQgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNFswXSxcbiAgICAgICAgX3BhcnNlRmlsdGVyQXJnczQkID0gX3BhcnNlRmlsdGVyQXJnczRbMV0sXG4gICAgICAgIGNhbmNlbE9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNCQgPT09IHZvaWQgMCA/IHt9IDogX3BhcnNlRmlsdGVyQXJnczQkO1xuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxPcHRpb25zLnJldmVydCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNhbmNlbE9wdGlvbnMucmV2ZXJ0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczQucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmNhbmNlbChjYW5jZWxPcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZVF1ZXJpZXMgPSBmdW5jdGlvbiBpbnZhbGlkYXRlUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF9yZWYzLFxuICAgICAgICBfZmlsdGVycyRyZWZldGNoQWN0aXYsXG4gICAgICAgIF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCxcbiAgICAgICAgX3RoaXM1ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNSA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M1WzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczVbMV07XG5cbiAgICB2YXIgcmVmZXRjaEZpbHRlcnMgPSBfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgLy8gaWYgZmlsdGVycy5yZWZldGNoQWN0aXZlIGlzIG5vdCBwcm92aWRlZCBhbmQgZmlsdGVycy5hY3RpdmUgaXMgZXhwbGljaXRseSBmYWxzZSxcbiAgICAgIC8vIGUuZy4gaW52YWxpZGF0ZVF1ZXJpZXMoeyBhY3RpdmU6IGZhbHNlIH0pLCB3ZSBkb24ndCB3YW50IHRvIHJlZmV0Y2ggYWN0aXZlIHF1ZXJpZXNcbiAgICAgIGFjdGl2ZTogKF9yZWYzID0gKF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA9IGZpbHRlcnMucmVmZXRjaEFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA6IGZpbHRlcnMuYWN0aXZlKSAhPSBudWxsID8gX3JlZjMgOiB0cnVlLFxuICAgICAgaW5hY3RpdmU6IChfZmlsdGVycyRyZWZldGNoSW5hY3QgPSBmaWx0ZXJzLnJlZmV0Y2hJbmFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCA6IGZhbHNlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LmludmFsaWRhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX3RoaXM1LnJlZmV0Y2hRdWVyaWVzKHJlZmV0Y2hGaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVmZXRjaFF1ZXJpZXMgPSBmdW5jdGlvbiByZWZldGNoUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczYgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNlswXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M2WzFdO1xuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM2LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5mZXRjaCh1bmRlZmluZWQsIF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgcmVmZXRjaFBhZ2U6IGZpbHRlcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZpbHRlcnMucmVmZXRjaFBhZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCk7XG5cbiAgICBpZiAoIShvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnRocm93T25FcnJvcikpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaFF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhwYXJzZWRPcHRpb25zKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rhbm5lcmxpbnNsZXkvcmVhY3QtcXVlcnkvaXNzdWVzLzY1MlxuXG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSkgPyBxdWVyeS5mZXRjaChkZWZhdWx0ZWRPcHRpb25zKSA6IFByb21pc2UucmVzb2x2ZShxdWVyeS5zdGF0ZS5kYXRhKTtcbiAgfTtcblxuICBfcHJvdG8ucHJlZmV0Y2hRdWVyeSA9IGZ1bmN0aW9uIHByZWZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hJbmZpbml0ZVF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIHBhcnNlZE9wdGlvbnMuYmVoYXZpb3IgPSBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KHBhcnNlZE9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5wcmVmZXRjaEluZmluaXRlUXVlcnkgPSBmdW5jdGlvbiBwcmVmZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxNdXRhdGlvbnMgPSBmdW5jdGlvbiBjYW5jZWxNdXRhdGlvbnMoKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczcubXV0YXRpb25DYWNoZS5nZXRBbGwoKS5tYXAoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldE11dGF0aW9uQ2FjaGUoKS5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZU11dGF0aW9uID0gZnVuY3Rpb24gZXhlY3V0ZU11dGF0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlLmJ1aWxkKHRoaXMsIG9wdGlvbnMpLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlDYWNoZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5Q2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0TXV0YXRpb25DYWNoZSA9IGZ1bmN0aW9uIGdldE11dGF0aW9uQ2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0T3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucXVlcnlEZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KHF1ZXJ5S2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgucXVlcnlLZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVyeURlZmF1bHRzLnB1c2goe1xuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5RGVmYXVsdHMkZjtcblxuICAgIHJldHVybiBxdWVyeUtleSA/IChfdGhpcyRxdWVyeURlZmF1bHRzJGYgPSB0aGlzLnF1ZXJ5RGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShxdWVyeUtleSwgeC5xdWVyeUtleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeURlZmF1bHRzJGYuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLnNldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMubXV0YXRpb25EZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgubXV0YXRpb25LZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXRhdGlvbkRlZmF1bHRzLnB1c2goe1xuICAgICAgICBtdXRhdGlvbktleTogbXV0YXRpb25LZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5KSB7XG4gICAgdmFyIF90aGlzJG11dGF0aW9uRGVmYXVsdDtcblxuICAgIHJldHVybiBtdXRhdGlvbktleSA/IChfdGhpcyRtdXRhdGlvbkRlZmF1bHQgPSB0aGlzLm11dGF0aW9uRGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShtdXRhdGlvbktleSwgeC5tdXRhdGlvbktleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRtdXRhdGlvbkRlZmF1bHQuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRRdWVyeU9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5fZGVmYXVsdGVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLnF1ZXJpZXMsIHRoaXMuZ2V0UXVlcnlEZWZhdWx0cyhvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnF1ZXJ5S2V5KSwgb3B0aW9ucywge1xuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCAmJiBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5KSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCA9IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdGVkT3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0TXV0YXRpb25PcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLm11dGF0aW9ucywgdGhpcy5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubXV0YXRpb25LZXkpLCBvcHRpb25zLCB7XG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGhpcy5xdWVyeUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlLmNsZWFyKCk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2xpZW50O1xufSgpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgaXNTZXJ2ZXIsIGlzVmFsaWRUaW1lb3V0LCBub29wLCByZXBsYWNlRXF1YWxEZWVwLCBzaGFsbG93RXF1YWxPYmplY3RzLCB0aW1lVW50aWxTdGFsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBpc0NhbmNlbGxlZEVycm9yIH0gZnJvbSAnLi9yZXRyeWVyJztcbmV4cG9ydCB2YXIgUXVlcnlPYnNlcnZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShRdWVyeU9ic2VydmVyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBRdWVyeU9ic2VydmVyKGNsaWVudCwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIF90aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIF90aGlzLnRyYWNrZWRQcm9wcyA9IFtdO1xuICAgIF90aGlzLnNlbGVjdEVycm9yID0gbnVsbDtcblxuICAgIF90aGlzLmJpbmRNZXRob2RzKCk7XG5cbiAgICBfdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5T2JzZXJ2ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5iaW5kTWV0aG9kcyA9IGZ1bmN0aW9uIGJpbmRNZXRob2RzKCkge1xuICAgIHRoaXMucmVtb3ZlID0gdGhpcy5yZW1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlZmV0Y2ggPSB0aGlzLnJlZmV0Y2guYmluZCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVyeS5hZGRPYnNlcnZlcih0aGlzKTtcblxuICAgICAgaWYgKHNob3VsZEZldGNoT25Nb3VudCh0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLmV4ZWN1dGVGZXRjaCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVRpbWVycygpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmxpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2hvdWxkRmV0Y2hPblJlY29ubmVjdCA9IGZ1bmN0aW9uIHNob3VsZEZldGNoT25SZWNvbm5lY3QoKSB7XG4gICAgcmV0dXJuIHNob3VsZEZldGNoT24odGhpcy5jdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucywgdGhpcy5vcHRpb25zLnJlZmV0Y2hPblJlY29ubmVjdCk7XG4gIH07XG5cbiAgX3Byb3RvLnNob3VsZEZldGNoT25XaW5kb3dGb2N1cyA9IGZ1bmN0aW9uIHNob3VsZEZldGNoT25XaW5kb3dGb2N1cygpIHtcbiAgICByZXR1cm4gc2hvdWxkRmV0Y2hPbih0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zLCB0aGlzLm9wdGlvbnMucmVmZXRjaE9uV2luZG93Rm9jdXMpO1xuICB9O1xuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuY2xlYXJUaW1lcnMoKTtcbiAgICB0aGlzLmN1cnJlbnRRdWVyeS5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucywgbm90aWZ5T3B0aW9ucykge1xuICAgIHZhciBwcmV2T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5jbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZW5hYmxlZCB0byBiZSBhIGJvb2xlYW4nKTtcbiAgICB9IC8vIEtlZXAgcHJldmlvdXMgcXVlcnkga2V5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHN1cHBseSBvbmVcblxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucXVlcnlLZXkpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5xdWVyeUtleSA9IHByZXZPcHRpb25zLnF1ZXJ5S2V5O1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUXVlcnkoKTtcbiAgICB2YXIgbW91bnRlZCA9IHRoaXMuaGFzTGlzdGVuZXJzKCk7IC8vIEZldGNoIGlmIHRoZXJlIGFyZSBzdWJzY3JpYmVyc1xuXG4gICAgaWYgKG1vdW50ZWQgJiYgc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHRoaXMuY3VycmVudFF1ZXJ5LCBwcmV2UXVlcnksIHRoaXMub3B0aW9ucywgcHJldk9wdGlvbnMpKSB7XG4gICAgICB0aGlzLmV4ZWN1dGVGZXRjaCgpO1xuICAgIH0gLy8gVXBkYXRlIHJlc3VsdFxuXG5cbiAgICB0aGlzLnVwZGF0ZVJlc3VsdChub3RpZnlPcHRpb25zKTsgLy8gVXBkYXRlIHN0YWxlIGludGVydmFsIGlmIG5lZWRlZFxuXG4gICAgaWYgKG1vdW50ZWQgJiYgKHRoaXMuY3VycmVudFF1ZXJ5ICE9PSBwcmV2UXVlcnkgfHwgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09IHByZXZPcHRpb25zLmVuYWJsZWQgfHwgdGhpcy5vcHRpb25zLnN0YWxlVGltZSAhPT0gcHJldk9wdGlvbnMuc3RhbGVUaW1lKSkge1xuICAgICAgdGhpcy51cGRhdGVTdGFsZVRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFJlZmV0Y2hJbnRlcnZhbCA9IHRoaXMuY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpOyAvLyBVcGRhdGUgcmVmZXRjaCBpbnRlcnZhbCBpZiBuZWVkZWRcblxuICAgIGlmIChtb3VudGVkICYmICh0aGlzLmN1cnJlbnRRdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSBwcmV2T3B0aW9ucy5lbmFibGVkIHx8IG5leHRSZWZldGNoSW50ZXJ2YWwgIT09IHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCkpIHtcbiAgICAgIHRoaXMudXBkYXRlUmVmZXRjaEludGVydmFsKG5leHRSZWZldGNoSW50ZXJ2YWwpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0T3B0aW1pc3RpY1Jlc3VsdCA9IGZ1bmN0aW9uIGdldE9wdGltaXN0aWNSZXN1bHQob3B0aW9ucykge1xuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5jbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLmNsaWVudCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0Q3VycmVudFJlc3VsdCA9IGZ1bmN0aW9uIGdldEN1cnJlbnRSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8udHJhY2tSZXN1bHQgPSBmdW5jdGlvbiB0cmFja1Jlc3VsdChyZXN1bHQsIGRlZmF1bHRlZE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciB0cmFja2VkUmVzdWx0ID0ge307XG5cbiAgICB2YXIgdHJhY2tQcm9wID0gZnVuY3Rpb24gdHJhY2tQcm9wKGtleSkge1xuICAgICAgaWYgKCFfdGhpczIudHJhY2tlZFByb3BzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgX3RoaXMyLnRyYWNrZWRQcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHJhY2tlZFJlc3VsdCwga2V5LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHRyYWNrUHJvcChrZXkpO1xuICAgICAgICAgIHJldHVybiByZXN1bHRba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVmYXVsdGVkT3B0aW9ucy51c2VFcnJvckJvdW5kYXJ5IHx8IGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UpIHtcbiAgICAgIHRyYWNrUHJvcCgnZXJyb3InKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhY2tlZFJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8uZ2V0TmV4dFJlc3VsdCA9IGZ1bmN0aW9uIGdldE5leHRSZXN1bHQob3B0aW9ucykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciB1bnN1YnNjcmliZSA9IF90aGlzMy5zdWJzY3JpYmUoZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICBpZiAoIXJlc3VsdC5pc0ZldGNoaW5nKSB7XG4gICAgICAgICAgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgIGlmIChyZXN1bHQuaXNFcnJvciAmJiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy50aHJvd09uRXJyb3IpKSB7XG4gICAgICAgICAgICByZWplY3QocmVzdWx0LmVycm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldEN1cnJlbnRRdWVyeSA9IGZ1bmN0aW9uIGdldEN1cnJlbnRRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UXVlcnk7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICB0aGlzLmNsaWVudC5nZXRRdWVyeUNhY2hlKCkucmVtb3ZlKHRoaXMuY3VycmVudFF1ZXJ5KTtcbiAgfTtcblxuICBfcHJvdG8ucmVmZXRjaCA9IGZ1bmN0aW9uIHJlZmV0Y2gob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZldGNoKF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICBtZXRhOiB7XG4gICAgICAgIHJlZmV0Y2hQYWdlOiBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnJlZmV0Y2hQYWdlXG4gICAgICB9XG4gICAgfSkpO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaE9wdGltaXN0aWMgPSBmdW5jdGlvbiBmZXRjaE9wdGltaXN0aWMob3B0aW9ucykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmNsaWVudC5kZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMob3B0aW9ucyk7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmJ1aWxkKHRoaXMuY2xpZW50LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuZmV0Y2goKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczQuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2ggPSBmdW5jdGlvbiBmZXRjaChmZXRjaE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVGZXRjaChmZXRjaE9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnVwZGF0ZVJlc3VsdCgpO1xuXG4gICAgICByZXR1cm4gX3RoaXM1LmN1cnJlbnRSZXN1bHQ7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVGZXRjaCA9IGZ1bmN0aW9uIGV4ZWN1dGVGZXRjaChmZXRjaE9wdGlvbnMpIHtcbiAgICAvLyBNYWtlIHN1cmUgd2UgcmVmZXJlbmNlIHRoZSBsYXRlc3QgcXVlcnkgYXMgdGhlIGN1cnJlbnQgb25lIG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkXG4gICAgdGhpcy51cGRhdGVRdWVyeSgpOyAvLyBGZXRjaFxuXG4gICAgdmFyIHByb21pc2UgPSB0aGlzLmN1cnJlbnRRdWVyeS5mZXRjaCh0aGlzLm9wdGlvbnMsIGZldGNoT3B0aW9ucyk7XG5cbiAgICBpZiAoIShmZXRjaE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoT3B0aW9ucy50aHJvd09uRXJyb3IpKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlU3RhbGVUaW1lb3V0ID0gZnVuY3Rpb24gdXBkYXRlU3RhbGVUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgdGhpcy5jbGVhclN0YWxlVGltZW91dCgpO1xuXG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMuY3VycmVudFJlc3VsdC5pc1N0YWxlIHx8ICFpc1ZhbGlkVGltZW91dCh0aGlzLm9wdGlvbnMuc3RhbGVUaW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0aW1lID0gdGltZVVudGlsU3RhbGUodGhpcy5jdXJyZW50UmVzdWx0LmRhdGFVcGRhdGVkQXQsIHRoaXMub3B0aW9ucy5zdGFsZVRpbWUpOyAvLyBUaGUgdGltZW91dCBpcyBzb21ldGltZXMgdHJpZ2dlcmVkIDEgbXMgYmVmb3JlIHRoZSBzdGFsZSB0aW1lIGV4cGlyYXRpb24uXG4gICAgLy8gVG8gbWl0aWdhdGUgdGhpcyBpc3N1ZSB3ZSBhbHdheXMgYWRkIDEgbXMgdG8gdGhlIHRpbWVvdXQuXG5cbiAgICB2YXIgdGltZW91dCA9IHRpbWUgKyAxO1xuICAgIHRoaXMuc3RhbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXM2LmN1cnJlbnRSZXN1bHQuaXNTdGFsZSkge1xuICAgICAgICBfdGhpczYudXBkYXRlUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfSwgdGltZW91dCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXB1dGVSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiBjb21wdXRlUmVmZXRjaEludGVydmFsKCkge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJHJlZmV0Y2g7XG5cbiAgICByZXR1cm4gdHlwZW9mIHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwgPT09ICdmdW5jdGlvbicgPyB0aGlzLm9wdGlvbnMucmVmZXRjaEludGVydmFsKHRoaXMuY3VycmVudFJlc3VsdC5kYXRhLCB0aGlzLmN1cnJlbnRRdWVyeSkgOiAoX3RoaXMkb3B0aW9ucyRyZWZldGNoID0gdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkcmVmZXRjaCA6IGZhbHNlO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiB1cGRhdGVSZWZldGNoSW50ZXJ2YWwobmV4dEludGVydmFsKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB0aGlzLmNsZWFyUmVmZXRjaEludGVydmFsKCk7XG4gICAgdGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsID0gbmV4dEludGVydmFsO1xuXG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMub3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSB8fCAhaXNWYWxpZFRpbWVvdXQodGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsKSB8fCB0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlZmV0Y2hJbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzNy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbEluQmFja2dyb3VuZCB8fCBmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkpIHtcbiAgICAgICAgX3RoaXM3LmV4ZWN1dGVGZXRjaCgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCk7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVRpbWVycyA9IGZ1bmN0aW9uIHVwZGF0ZVRpbWVycygpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YWxlVGltZW91dCgpO1xuICAgIHRoaXMudXBkYXRlUmVmZXRjaEludGVydmFsKHRoaXMuY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpKTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXJUaW1lcnMgPSBmdW5jdGlvbiBjbGVhclRpbWVycygpIHtcbiAgICB0aGlzLmNsZWFyU3RhbGVUaW1lb3V0KCk7XG4gICAgdGhpcy5jbGVhclJlZmV0Y2hJbnRlcnZhbCgpO1xuICB9O1xuXG4gIF9wcm90by5jbGVhclN0YWxlVGltZW91dCA9IGZ1bmN0aW9uIGNsZWFyU3RhbGVUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLnN0YWxlVGltZW91dElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zdGFsZVRpbWVvdXRJZCk7XG4gICAgICB0aGlzLnN0YWxlVGltZW91dElkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXJSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiBjbGVhclJlZmV0Y2hJbnRlcnZhbCgpIHtcbiAgICBpZiAodGhpcy5yZWZldGNoSW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlZmV0Y2hJbnRlcnZhbElkKTtcbiAgICAgIHRoaXMucmVmZXRjaEludGVydmFsSWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jcmVhdGVSZXN1bHQgPSBmdW5jdGlvbiBjcmVhdGVSZXN1bHQocXVlcnksIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdmFyIHByZXZPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBwcmV2UmVzdWx0ID0gdGhpcy5jdXJyZW50UmVzdWx0O1xuICAgIHZhciBwcmV2UmVzdWx0U3RhdGUgPSB0aGlzLmN1cnJlbnRSZXN1bHRTdGF0ZTtcbiAgICB2YXIgcHJldlJlc3VsdE9wdGlvbnMgPSB0aGlzLmN1cnJlbnRSZXN1bHRPcHRpb25zO1xuICAgIHZhciBxdWVyeUNoYW5nZSA9IHF1ZXJ5ICE9PSBwcmV2UXVlcnk7XG4gICAgdmFyIHF1ZXJ5SW5pdGlhbFN0YXRlID0gcXVlcnlDaGFuZ2UgPyBxdWVyeS5zdGF0ZSA6IHRoaXMuY3VycmVudFF1ZXJ5SW5pdGlhbFN0YXRlO1xuICAgIHZhciBwcmV2UXVlcnlSZXN1bHQgPSBxdWVyeUNoYW5nZSA/IHRoaXMuY3VycmVudFJlc3VsdCA6IHRoaXMucHJldmlvdXNRdWVyeVJlc3VsdDtcbiAgICB2YXIgc3RhdGUgPSBxdWVyeS5zdGF0ZTtcbiAgICB2YXIgZGF0YVVwZGF0ZWRBdCA9IHN0YXRlLmRhdGFVcGRhdGVkQXQsXG4gICAgICAgIGVycm9yID0gc3RhdGUuZXJyb3IsXG4gICAgICAgIGVycm9yVXBkYXRlZEF0ID0gc3RhdGUuZXJyb3JVcGRhdGVkQXQsXG4gICAgICAgIGlzRmV0Y2hpbmcgPSBzdGF0ZS5pc0ZldGNoaW5nLFxuICAgICAgICBzdGF0dXMgPSBzdGF0ZS5zdGF0dXM7XG4gICAgdmFyIGlzUHJldmlvdXNEYXRhID0gZmFsc2U7XG4gICAgdmFyIGlzUGxhY2Vob2xkZXJEYXRhID0gZmFsc2U7XG4gICAgdmFyIGRhdGE7IC8vIE9wdGltaXN0aWNhbGx5IHNldCByZXN1bHQgaW4gZmV0Y2hpbmcgc3RhdGUgaWYgbmVlZGVkXG5cbiAgICBpZiAob3B0aW9ucy5vcHRpbWlzdGljUmVzdWx0cykge1xuICAgICAgdmFyIG1vdW50ZWQgPSB0aGlzLmhhc0xpc3RlbmVycygpO1xuICAgICAgdmFyIGZldGNoT25Nb3VudCA9ICFtb3VudGVkICYmIHNob3VsZEZldGNoT25Nb3VudChxdWVyeSwgb3B0aW9ucyk7XG4gICAgICB2YXIgZmV0Y2hPcHRpb25hbGx5ID0gbW91bnRlZCAmJiBzaG91bGRGZXRjaE9wdGlvbmFsbHkocXVlcnksIHByZXZRdWVyeSwgb3B0aW9ucywgcHJldk9wdGlvbnMpO1xuXG4gICAgICBpZiAoZmV0Y2hPbk1vdW50IHx8IGZldGNoT3B0aW9uYWxseSkge1xuICAgICAgICBpc0ZldGNoaW5nID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIWRhdGFVcGRhdGVkQXQpIHtcbiAgICAgICAgICBzdGF0dXMgPSAnbG9hZGluZyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEtlZXAgcHJldmlvdXMgZGF0YSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKG9wdGlvbnMua2VlcFByZXZpb3VzRGF0YSAmJiAhc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICYmIChwcmV2UXVlcnlSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZRdWVyeVJlc3VsdC5pc1N1Y2Nlc3MpICYmIHN0YXR1cyAhPT0gJ2Vycm9yJykge1xuICAgICAgZGF0YSA9IHByZXZRdWVyeVJlc3VsdC5kYXRhO1xuICAgICAgZGF0YVVwZGF0ZWRBdCA9IHByZXZRdWVyeVJlc3VsdC5kYXRhVXBkYXRlZEF0O1xuICAgICAgc3RhdHVzID0gcHJldlF1ZXJ5UmVzdWx0LnN0YXR1cztcbiAgICAgIGlzUHJldmlvdXNEYXRhID0gdHJ1ZTtcbiAgICB9IC8vIFNlbGVjdCBkYXRhIGlmIG5lZWRlZFxuICAgIGVsc2UgaWYgKG9wdGlvbnMuc2VsZWN0ICYmIHR5cGVvZiBzdGF0ZS5kYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBNZW1vaXplIHNlbGVjdCByZXN1bHRcbiAgICAgICAgaWYgKHByZXZSZXN1bHQgJiYgc3RhdGUuZGF0YSA9PT0gKHByZXZSZXN1bHRTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdFN0YXRlLmRhdGEpICYmIG9wdGlvbnMuc2VsZWN0ID09PSB0aGlzLnNlbGVjdEZuKSB7XG4gICAgICAgICAgZGF0YSA9IHRoaXMuc2VsZWN0UmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEZuID0gb3B0aW9ucy5zZWxlY3Q7XG4gICAgICAgICAgICBkYXRhID0gb3B0aW9ucy5zZWxlY3Qoc3RhdGUuZGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBkYXRhID0gcmVwbGFjZUVxdWFsRGVlcChwcmV2UmVzdWx0ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UmVzdWx0LmRhdGEsIGRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVycm9yID0gbnVsbDtcbiAgICAgICAgICB9IGNhdGNoIChzZWxlY3RFcnJvcikge1xuICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3Ioc2VsZWN0RXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IHNlbGVjdEVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBVc2UgcXVlcnkgZGF0YVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICAgIH0gLy8gU2hvdyBwbGFjZWhvbGRlciBkYXRhIGlmIG5lZWRlZFxuXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYgKHN0YXR1cyA9PT0gJ2xvYWRpbmcnIHx8IHN0YXR1cyA9PT0gJ2lkbGUnKSkge1xuICAgICAgdmFyIHBsYWNlaG9sZGVyRGF0YTsgLy8gTWVtb2l6ZSBwbGFjZWhvbGRlciBkYXRhXG5cbiAgICAgIGlmICgocHJldlJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdC5pc1BsYWNlaG9sZGVyRGF0YSkgJiYgb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgPT09IChwcmV2UmVzdWx0T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdE9wdGlvbnMucGxhY2Vob2xkZXJEYXRhKSkge1xuICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSBwcmV2UmVzdWx0LmRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSB0eXBlb2Ygb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSgpIDogb3B0aW9ucy5wbGFjZWhvbGRlckRhdGE7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc2VsZWN0ICYmIHR5cGVvZiBwbGFjZWhvbGRlckRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IG9wdGlvbnMuc2VsZWN0KHBsYWNlaG9sZGVyRGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSByZXBsYWNlRXF1YWxEZWVwKHByZXZSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHQuZGF0YSwgcGxhY2Vob2xkZXJEYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgfSBjYXRjaCAoc2VsZWN0RXJyb3IpIHtcbiAgICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKHNlbGVjdEVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RXJyb3IgPSBzZWxlY3RFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBwbGFjZWhvbGRlckRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHN0YXR1cyA9ICdzdWNjZXNzJztcbiAgICAgICAgZGF0YSA9IHBsYWNlaG9sZGVyRGF0YTtcbiAgICAgICAgaXNQbGFjZWhvbGRlckRhdGEgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdEVycm9yKSB7XG4gICAgICBlcnJvciA9IHRoaXMuc2VsZWN0RXJyb3I7XG4gICAgICBkYXRhID0gdGhpcy5zZWxlY3RSZXN1bHQ7XG4gICAgICBlcnJvclVwZGF0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgICBzdGF0dXMgPSAnZXJyb3InO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgIGlzTG9hZGluZzogc3RhdHVzID09PSAnbG9hZGluZycsXG4gICAgICBpc1N1Y2Nlc3M6IHN0YXR1cyA9PT0gJ3N1Y2Nlc3MnLFxuICAgICAgaXNFcnJvcjogc3RhdHVzID09PSAnZXJyb3InLFxuICAgICAgaXNJZGxlOiBzdGF0dXMgPT09ICdpZGxlJyxcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBkYXRhVXBkYXRlZEF0LFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgZXJyb3JVcGRhdGVkQXQ6IGVycm9yVXBkYXRlZEF0LFxuICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCxcbiAgICAgIGVycm9yVXBkYXRlQ291bnQ6IHN0YXRlLmVycm9yVXBkYXRlQ291bnQsXG4gICAgICBpc0ZldGNoZWQ6IHN0YXRlLmRhdGFVcGRhdGVDb3VudCA+IDAgfHwgc3RhdGUuZXJyb3JVcGRhdGVDb3VudCA+IDAsXG4gICAgICBpc0ZldGNoZWRBZnRlck1vdW50OiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgPiBxdWVyeUluaXRpYWxTdGF0ZS5kYXRhVXBkYXRlQ291bnQgfHwgc3RhdGUuZXJyb3JVcGRhdGVDb3VudCA+IHF1ZXJ5SW5pdGlhbFN0YXRlLmVycm9yVXBkYXRlQ291bnQsXG4gICAgICBpc0ZldGNoaW5nOiBpc0ZldGNoaW5nLFxuICAgICAgaXNSZWZldGNoaW5nOiBpc0ZldGNoaW5nICYmIHN0YXR1cyAhPT0gJ2xvYWRpbmcnLFxuICAgICAgaXNMb2FkaW5nRXJyb3I6IHN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBzdGF0ZS5kYXRhVXBkYXRlZEF0ID09PSAwLFxuICAgICAgaXNQbGFjZWhvbGRlckRhdGE6IGlzUGxhY2Vob2xkZXJEYXRhLFxuICAgICAgaXNQcmV2aW91c0RhdGE6IGlzUHJldmlvdXNEYXRhLFxuICAgICAgaXNSZWZldGNoRXJyb3I6IHN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBzdGF0ZS5kYXRhVXBkYXRlZEF0ICE9PSAwLFxuICAgICAgaXNTdGFsZTogaXNTdGFsZShxdWVyeSwgb3B0aW9ucyksXG4gICAgICByZWZldGNoOiB0aGlzLnJlZmV0Y2gsXG4gICAgICByZW1vdmU6IHRoaXMucmVtb3ZlXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIF9wcm90by5zaG91bGROb3RpZnlMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzaG91bGROb3RpZnlMaXN0ZW5lcnMocmVzdWx0LCBwcmV2UmVzdWx0KSB7XG4gICAgaWYgKCFwcmV2UmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgbm90aWZ5T25DaGFuZ2VQcm9wcyA9IF90aGlzJG9wdGlvbnMubm90aWZ5T25DaGFuZ2VQcm9wcyxcbiAgICAgICAgbm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnMgPSBfdGhpcyRvcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zO1xuXG4gICAgaWYgKCFub3RpZnlPbkNoYW5nZVByb3BzICYmICFub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJyAmJiAhdGhpcy50cmFja2VkUHJvcHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgaW5jbHVkZWRQcm9wcyA9IG5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJyA/IHRoaXMudHJhY2tlZFByb3BzIDogbm90aWZ5T25DaGFuZ2VQcm9wcztcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocmVzdWx0KS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciB0eXBlZEtleSA9IGtleTtcbiAgICAgIHZhciBjaGFuZ2VkID0gcmVzdWx0W3R5cGVkS2V5XSAhPT0gcHJldlJlc3VsdFt0eXBlZEtleV07XG4gICAgICB2YXIgaXNJbmNsdWRlZCA9IGluY2x1ZGVkUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGluY2x1ZGVkUHJvcHMuc29tZShmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCA9PT0ga2V5O1xuICAgICAgfSk7XG4gICAgICB2YXIgaXNFeGNsdWRlZCA9IG5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zID09IG51bGwgPyB2b2lkIDAgOiBub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucy5zb21lKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ID09PSBrZXk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjaGFuZ2VkICYmICFpc0V4Y2x1ZGVkICYmICghaW5jbHVkZWRQcm9wcyB8fCBpc0luY2x1ZGVkKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlUmVzdWx0ID0gZnVuY3Rpb24gdXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpIHtcbiAgICB2YXIgcHJldlJlc3VsdCA9IHRoaXMuY3VycmVudFJlc3VsdDtcbiAgICB0aGlzLmN1cnJlbnRSZXN1bHQgPSB0aGlzLmNyZWF0ZVJlc3VsdCh0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLmN1cnJlbnRSZXN1bHRTdGF0ZSA9IHRoaXMuY3VycmVudFF1ZXJ5LnN0YXRlO1xuICAgIHRoaXMuY3VycmVudFJlc3VsdE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7IC8vIE9ubHkgbm90aWZ5IGlmIHNvbWV0aGluZyBoYXMgY2hhbmdlZFxuXG4gICAgaWYgKHNoYWxsb3dFcXVhbE9iamVjdHModGhpcy5jdXJyZW50UmVzdWx0LCBwcmV2UmVzdWx0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGV0ZXJtaW5lIHdoaWNoIGNhbGxiYWNrcyB0byB0cmlnZ2VyXG5cblxuICAgIHZhciBkZWZhdWx0Tm90aWZ5T3B0aW9ucyA9IHtcbiAgICAgIGNhY2hlOiB0cnVlXG4gICAgfTtcblxuICAgIGlmICgobm90aWZ5T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogbm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMpICE9PSBmYWxzZSAmJiB0aGlzLnNob3VsZE5vdGlmeUxpc3RlbmVycyh0aGlzLmN1cnJlbnRSZXN1bHQsIHByZXZSZXN1bHQpKSB7XG4gICAgICBkZWZhdWx0Tm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KF9leHRlbmRzKHt9LCBkZWZhdWx0Tm90aWZ5T3B0aW9ucywgbm90aWZ5T3B0aW9ucykpO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVRdWVyeSA9IGZ1bmN0aW9uIHVwZGF0ZVF1ZXJ5KCkge1xuICAgIHZhciBxdWVyeSA9IHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLmNsaWVudCwgdGhpcy5vcHRpb25zKTtcblxuICAgIGlmIChxdWVyeSA9PT0gdGhpcy5jdXJyZW50UXVlcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdGhpcy5jdXJyZW50UXVlcnkgPSBxdWVyeTtcbiAgICB0aGlzLmN1cnJlbnRRdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5LnN0YXRlO1xuICAgIHRoaXMucHJldmlvdXNRdWVyeVJlc3VsdCA9IHRoaXMuY3VycmVudFJlc3VsdDtcblxuICAgIGlmICh0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICBwcmV2UXVlcnkgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZRdWVyeS5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgICAgIHF1ZXJ5LmFkZE9ic2VydmVyKHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25RdWVyeVVwZGF0ZSA9IGZ1bmN0aW9uIG9uUXVlcnlVcGRhdGUoYWN0aW9uKSB7XG4gICAgdmFyIG5vdGlmeU9wdGlvbnMgPSB7fTtcblxuICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICBub3RpZnlPcHRpb25zLm9uU3VjY2VzcyA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gJ2Vycm9yJyAmJiAhaXNDYW5jZWxsZWRFcnJvcihhY3Rpb24uZXJyb3IpKSB7XG4gICAgICBub3RpZnlPcHRpb25zLm9uRXJyb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpO1xuXG4gICAgaWYgKHRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMudXBkYXRlVGltZXJzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkobm90aWZ5T3B0aW9ucykge1xuICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBGaXJzdCB0cmlnZ2VyIHRoZSBjb25maWd1cmF0aW9uIGNhbGxiYWNrc1xuICAgICAgaWYgKG5vdGlmeU9wdGlvbnMub25TdWNjZXNzKSB7XG4gICAgICAgIF90aGlzOC5vcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXM4Lm9wdGlvbnMub25TdWNjZXNzKF90aGlzOC5jdXJyZW50UmVzdWx0LmRhdGEpO1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uU2V0dGxlZChfdGhpczguY3VycmVudFJlc3VsdC5kYXRhLCBudWxsKTtcbiAgICAgIH0gZWxzZSBpZiAobm90aWZ5T3B0aW9ucy5vbkVycm9yKSB7XG4gICAgICAgIF90aGlzOC5vcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uRXJyb3IoX3RoaXM4LmN1cnJlbnRSZXN1bHQuZXJyb3IpO1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uU2V0dGxlZCh1bmRlZmluZWQsIF90aGlzOC5jdXJyZW50UmVzdWx0LmVycm9yKTtcbiAgICAgIH0gLy8gVGhlbiB0cmlnZ2VyIHRoZSBsaXN0ZW5lcnNcblxuXG4gICAgICBpZiAobm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMpIHtcbiAgICAgICAgX3RoaXM4Lmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICAgIGxpc3RlbmVyKF90aGlzOC5jdXJyZW50UmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgICB9IC8vIFRoZW4gdGhlIGNhY2hlIGxpc3RlbmVyc1xuXG5cbiAgICAgIGlmIChub3RpZnlPcHRpb25zLmNhY2hlKSB7XG4gICAgICAgIF90aGlzOC5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLm5vdGlmeSh7XG4gICAgICAgICAgcXVlcnk6IF90aGlzOC5jdXJyZW50UXVlcnksXG4gICAgICAgICAgdHlwZTogJ29ic2VydmVyUmVzdWx0c1VwZGF0ZWQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeU9ic2VydmVyO1xufShTdWJzY3JpYmFibGUpO1xuXG5mdW5jdGlvbiBzaG91bGRMb2FkT25Nb3VudChxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZSAmJiAhcXVlcnkuc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiAhKHF1ZXJ5LnN0YXRlLnN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBvcHRpb25zLnJldHJ5T25Nb3VudCA9PT0gZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRGZXRjaE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHNob3VsZExvYWRPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKSB8fCBxdWVyeS5zdGF0ZS5kYXRhVXBkYXRlZEF0ID4gMCAmJiBzaG91bGRGZXRjaE9uKHF1ZXJ5LCBvcHRpb25zLCBvcHRpb25zLnJlZmV0Y2hPbk1vdW50KTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPbihxdWVyeSwgb3B0aW9ucywgZmllbGQpIHtcbiAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICB2YXIgdmFsdWUgPSB0eXBlb2YgZmllbGQgPT09ICdmdW5jdGlvbicgPyBmaWVsZChxdWVyeSkgOiBmaWVsZDtcbiAgICByZXR1cm4gdmFsdWUgPT09ICdhbHdheXMnIHx8IHZhbHVlICE9PSBmYWxzZSAmJiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHF1ZXJ5LCBwcmV2UXVlcnksIG9wdGlvbnMsIHByZXZPcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlICYmIChxdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHByZXZPcHRpb25zLmVuYWJsZWQgPT09IGZhbHNlKSAmJiAoIW9wdGlvbnMuc3VzcGVuc2UgfHwgcXVlcnkuc3RhdGUuc3RhdHVzICE9PSAnZXJyb3InKSAmJiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gaXNTdGFsZShxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShvcHRpb25zLnN0YWxlVGltZSk7XG59IiwgImltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuZXhwb3J0IHZhciB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IFJlYWN0RE9NLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOyIsICJpbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJy4vcmVhY3RCYXRjaGVkVXBkYXRlcyc7XG5ub3RpZnlNYW5hZ2VyLnNldEJhdGNoTm90aWZ5RnVuY3Rpb24odW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMpOyIsICJleHBvcnQgdmFyIGxvZ2dlciA9IGNvbnNvbGU7IiwgImltcG9ydCB7IHNldExvZ2dlciB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuc2V0TG9nZ2VyKGxvZ2dlcik7IiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgZGVmYXVsdENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xudmFyIFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChmYWxzZSk7IC8vIGlmIGNvbnRleHRTaGFyaW5nIGlzIG9uLCB3ZSBzaGFyZSB0aGUgZmlyc3QgYW5kIGF0IGxlYXN0IG9uZVxuLy8gaW5zdGFuY2Ugb2YgdGhlIGNvbnRleHQgYWNyb3NzIHRoZSB3aW5kb3dcbi8vIHRvIGVuc3VyZSB0aGF0IGlmIFJlYWN0IFF1ZXJ5IGlzIHVzZWQgYWNyb3NzXG4vLyBkaWZmZXJlbnQgYnVuZGxlcyBvciBtaWNyb2Zyb250ZW5kcyB0aGV5IHdpbGxcbi8vIGFsbCB1c2UgdGhlIHNhbWUgKippbnN0YW5jZSoqIG9mIGNvbnRleHQsIHJlZ2FyZGxlc3Ncbi8vIG9mIG1vZHVsZSBzY29waW5nLlxuXG5mdW5jdGlvbiBnZXRRdWVyeUNsaWVudENvbnRleHQoY29udGV4dFNoYXJpbmcpIHtcbiAgaWYgKGNvbnRleHRTaGFyaW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKCF3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQpIHtcbiAgICAgIHdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dCA9IGRlZmF1bHRDb250ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiB3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQ7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdENvbnRleHQ7XG59XG5cbmV4cG9ydCB2YXIgdXNlUXVlcnlDbGllbnQgPSBmdW5jdGlvbiB1c2VRdWVyeUNsaWVudCgpIHtcbiAgdmFyIHF1ZXJ5Q2xpZW50ID0gUmVhY3QudXNlQ29udGV4dChnZXRRdWVyeUNsaWVudENvbnRleHQoUmVhY3QudXNlQ29udGV4dChRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0KSkpO1xuXG4gIGlmICghcXVlcnlDbGllbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFF1ZXJ5Q2xpZW50IHNldCwgdXNlIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgdG8gc2V0IG9uZScpO1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5Q2xpZW50O1xufTtcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnRQcm92aWRlciA9IGZ1bmN0aW9uIFF1ZXJ5Q2xpZW50UHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2xpZW50ID0gX3JlZi5jbGllbnQsXG4gICAgICBfcmVmJGNvbnRleHRTaGFyaW5nID0gX3JlZi5jb250ZXh0U2hhcmluZyxcbiAgICAgIGNvbnRleHRTaGFyaW5nID0gX3JlZiRjb250ZXh0U2hhcmluZyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNvbnRleHRTaGFyaW5nLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGNsaWVudC5tb3VudCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjbGllbnQudW5tb3VudCgpO1xuICAgIH07XG4gIH0sIFtjbGllbnRdKTtcbiAgdmFyIENvbnRleHQgPSBnZXRRdWVyeUNsaWVudENvbnRleHQoY29udGV4dFNoYXJpbmcpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0U2hhcmluZ1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNsaWVudFxuICB9LCBjaGlsZHJlbikpO1xufTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8gQ09OVEVYVFxuXG5mdW5jdGlvbiBjcmVhdGVWYWx1ZSgpIHtcbiAgdmFyIF9pc1Jlc2V0ID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgY2xlYXJSZXNldDogZnVuY3Rpb24gY2xlYXJSZXNldCgpIHtcbiAgICAgIF9pc1Jlc2V0ID0gZmFsc2U7XG4gICAgfSxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICBfaXNSZXNldCA9IHRydWU7XG4gICAgfSxcbiAgICBpc1Jlc2V0OiBmdW5jdGlvbiBpc1Jlc2V0KCkge1xuICAgICAgcmV0dXJuIF9pc1Jlc2V0O1xuICAgIH1cbiAgfTtcbn1cblxudmFyIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KGNyZWF0ZVZhbHVlKCkpOyAvLyBIT09LXG5cbmV4cG9ydCB2YXIgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgPSBmdW5jdGlvbiB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0KTtcbn07IC8vIENPTVBPTkVOVFxuXG5leHBvcnQgdmFyIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgdmFsdWUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY3JlYXRlVmFsdWUoKTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHZhbHVlXG4gIH0sIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHZhbHVlKSA6IGNoaWxkcmVuKTtcbn07IiwgImV4cG9ydCBmdW5jdGlvbiBzaG91bGRUaHJvd0Vycm9yKHN1c3BlbnNlLCBfdXNlRXJyb3JCb3VuZGFyeSwgcGFyYW1zKSB7XG4gIC8vIEFsbG93IHVzZUVycm9yQm91bmRhcnkgZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhyb3dpbmcgYmVoYXZpb3Igb24gYSBwZXItZXJyb3IgYmFzaXNcbiAgaWYgKHR5cGVvZiBfdXNlRXJyb3JCb3VuZGFyeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBfdXNlRXJyb3JCb3VuZGFyeS5hcHBseSh2b2lkIDAsIHBhcmFtcyk7XG4gIH0gLy8gQWxsb3cgdXNlRXJyb3JCb3VuZGFyeSB0byBvdmVycmlkZSBzdXNwZW5zZSdzIHRocm93aW5nIGJlaGF2aW9yXG5cblxuICBpZiAodHlwZW9mIF91c2VFcnJvckJvdW5kYXJ5ID09PSAnYm9vbGVhbicpIHJldHVybiBfdXNlRXJyb3JCb3VuZGFyeTsgLy8gSWYgc3VzcGVuc2UgaXMgZW5hYmxlZCBkZWZhdWx0IHRvIHRocm93aW5nIGVycm9yc1xuXG4gIHJldHVybiAhIXN1c3BlbnNlO1xufSIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4uL2NvcmUvbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSB9IGZyb20gJy4vUXVlcnlFcnJvclJlc2V0Qm91bmRhcnknO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tICcuL1F1ZXJ5Q2xpZW50UHJvdmlkZXInO1xuaW1wb3J0IHsgc2hvdWxkVGhyb3dFcnJvciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhc2VRdWVyeShvcHRpb25zLCBPYnNlcnZlcikge1xuICB2YXIgbW91bnRlZFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG5cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKDApLFxuICAgICAgZm9yY2VVcGRhdGUgPSBfUmVhY3QkdXNlU3RhdGVbMV07XG5cbiAgdmFyIHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgdmFyIGVycm9yUmVzZXRCb3VuZGFyeSA9IHVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5KCk7XG4gIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gcXVlcnlDbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpOyAvLyBNYWtlIHN1cmUgcmVzdWx0cyBhcmUgb3B0aW1pc3RpY2FsbHkgc2V0IGluIGZldGNoaW5nIHN0YXRlIGJlZm9yZSBzdWJzY3JpYmluZyBvciB1cGRhdGluZyBvcHRpb25zXG5cbiAgZGVmYXVsdGVkT3B0aW9ucy5vcHRpbWlzdGljUmVzdWx0cyA9IHRydWU7IC8vIEluY2x1ZGUgY2FsbGJhY2tzIGluIGJhdGNoIHJlbmRlcnNcblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yKSB7XG4gICAgZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yID0gbm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKGRlZmF1bHRlZE9wdGlvbnMub25FcnJvcik7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MpIHtcbiAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2VzcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2Vzcyk7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQpIHtcbiAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCA9IG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCk7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSkge1xuICAgIC8vIEFsd2F5cyBzZXQgc3RhbGUgdGltZSB3aGVuIHVzaW5nIHN1c3BlbnNlIHRvIHByZXZlbnRcbiAgICAvLyBmZXRjaGluZyBhZ2FpbiB3aGVuIGRpcmVjdGx5IG1vdW50aW5nIGFmdGVyIHN1c3BlbmRpbmdcbiAgICBpZiAodHlwZW9mIGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lICE9PSAnbnVtYmVyJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5zdGFsZVRpbWUgPSAxMDAwO1xuICAgIH0gLy8gU2V0IGNhY2hlIHRpbWUgdG8gMSBpZiB0aGUgb3B0aW9uIGhhcyBiZWVuIHNldCB0byAwXG4gICAgLy8gd2hlbiB1c2luZyBzdXNwZW5zZSB0byBwcmV2ZW50IGluZmluaXRlIGxvb3Agb2YgZmV0Y2hlc1xuXG5cbiAgICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5jYWNoZVRpbWUgPT09IDApIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMuY2FjaGVUaW1lID0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSB8fCBkZWZhdWx0ZWRPcHRpb25zLnVzZUVycm9yQm91bmRhcnkpIHtcbiAgICAvLyBQcmV2ZW50IHJldHJ5aW5nIGZhaWxlZCBxdWVyeSBpZiB0aGUgZXJyb3IgYm91bmRhcnkgaGFzIG5vdCBiZWVuIHJlc2V0IHlldFxuICAgIGlmICghZXJyb3JSZXNldEJvdW5kYXJ5LmlzUmVzZXQoKSkge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeU9uTW91bnQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YXIgX1JlYWN0JHVzZVN0YXRlMiA9IFJlYWN0LnVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmVyKHF1ZXJ5Q2xpZW50LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgfSksXG4gICAgICBvYnNlcnZlciA9IF9SZWFjdCR1c2VTdGF0ZTJbMF07XG5cbiAgdmFyIHJlc3VsdCA9IG9ic2VydmVyLmdldE9wdGltaXN0aWNSZXN1bHQoZGVmYXVsdGVkT3B0aW9ucyk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgbW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpO1xuICAgIHZhciB1bnN1YnNjcmliZSA9IG9ic2VydmVyLnN1YnNjcmliZShub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG1vdW50ZWRSZWYuY3VycmVudCkge1xuICAgICAgICBmb3JjZVVwZGF0ZShmdW5jdGlvbiAoeCkge1xuICAgICAgICAgIHJldHVybiB4ICsgMTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkpOyAvLyBVcGRhdGUgcmVzdWx0IHRvIG1ha2Ugc3VyZSB3ZSBkaWQgbm90IG1pc3MgYW55IHF1ZXJ5IHVwZGF0ZXNcbiAgICAvLyBiZXR3ZWVuIGNyZWF0aW5nIHRoZSBvYnNlcnZlciBhbmQgc3Vic2NyaWJpbmcgdG8gaXQuXG5cbiAgICBvYnNlcnZlci51cGRhdGVSZXN1bHQoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgbW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB1bnN1YnNjcmliZSgpO1xuICAgIH07XG4gIH0sIFtlcnJvclJlc2V0Qm91bmRhcnksIG9ic2VydmVyXSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgLy8gRG8gbm90IG5vdGlmeSBvbiB1cGRhdGVzIGJlY2F1c2Ugb2YgY2hhbmdlcyBpbiB0aGUgb3B0aW9ucyBiZWNhdXNlXG4gICAgLy8gdGhlc2UgY2hhbmdlcyBzaG91bGQgYWxyZWFkeSBiZSByZWZsZWN0ZWQgaW4gdGhlIG9wdGltaXN0aWMgcmVzdWx0LlxuICAgIG9ic2VydmVyLnNldE9wdGlvbnMoZGVmYXVsdGVkT3B0aW9ucywge1xuICAgICAgbGlzdGVuZXJzOiBmYWxzZVxuICAgIH0pO1xuICB9LCBbZGVmYXVsdGVkT3B0aW9ucywgb2JzZXJ2ZXJdKTsgLy8gSGFuZGxlIHN1c3BlbnNlXG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UgJiYgcmVzdWx0LmlzTG9hZGluZykge1xuICAgIHRocm93IG9ic2VydmVyLmZldGNoT3B0aW1pc3RpYyhkZWZhdWx0ZWRPcHRpb25zKS50aGVuKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YTtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2VzcyhkYXRhKTtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZChkYXRhLCBudWxsKTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGVycm9yUmVzZXRCb3VuZGFyeS5jbGVhclJlc2V0KCk7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGRlZmF1bHRlZE9wdGlvbnMub25FcnJvcihlcnJvcik7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQodW5kZWZpbmVkLCBlcnJvcik7XG4gICAgfSk7XG4gIH0gLy8gSGFuZGxlIGVycm9yIGJvdW5kYXJ5XG5cblxuICBpZiAocmVzdWx0LmlzRXJyb3IgJiYgIWVycm9yUmVzZXRCb3VuZGFyeS5pc1Jlc2V0KCkgJiYgIXJlc3VsdC5pc0ZldGNoaW5nICYmIHNob3VsZFRocm93RXJyb3IoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSwgZGVmYXVsdGVkT3B0aW9ucy51c2VFcnJvckJvdW5kYXJ5LCBbcmVzdWx0LmVycm9yLCBvYnNlcnZlci5nZXRDdXJyZW50UXVlcnkoKV0pKSB7XG4gICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICB9IC8vIEhhbmRsZSByZXN1bHQgcHJvcGVydHkgdXNhZ2UgdHJhY2tpbmdcblxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJykge1xuICAgIHJlc3VsdCA9IG9ic2VydmVyLnRyYWNrUmVzdWx0KHJlc3VsdCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufSIsICJpbXBvcnQgeyBRdWVyeU9ic2VydmVyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBwYXJzZVF1ZXJ5QXJncyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgdXNlQmFzZVF1ZXJ5IH0gZnJvbSAnLi91c2VCYXNlUXVlcnknOyAvLyBIT09LXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMyk7XG4gIHJldHVybiB1c2VCYXNlUXVlcnkocGFyc2VkT3B0aW9ucywgUXVlcnlPYnNlcnZlcik7XG59IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQmFkZ2UsIEV1aUljb259IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7QnJlYWRjcnVtYlByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIEJyZWFkY3J1bWJQcmVzZW50YXRpb24ocHJvcHM6IEJyZWFkY3J1bWJQcmVzZW50YXRpb25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KHByb3BzLm9udG9sb2d5SWQgfHwgXCJcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQpfX0+XG4gICAgICAgICAgICAgICAgPEV1aUJhZGdlIGNsYXNzTmFtZT17cHJvcHMub250b2xvZ3lJZCA/IFwiYnJlYWRjcnVtYiBjbGlja2FibGUtYnJlYWRjcnVtYlwiIDogXCJicmVhZGNydW1iXCJ9IGNvbG9yPXtwcm9wcy5jb2xvckZpcnN0IHx8IFwicHJpbWFyeVwifT5cbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLm9udG9sb2d5TmFtZSA/IHByb3BzLm9udG9sb2d5TmFtZS50b1VwcGVyQ2FzZSgpIDogXCJObyBvbnRvbG9neSBuYW1lIGF2YWlsYWJsZVwifVxuICAgICAgICAgICAgICAgIDwvRXVpQmFkZ2U+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICZuYnNwOzxFdWlJY29uIHR5cGU9XCJhcnJvd1JpZ2h0XCIvPiZuYnNwO1xuICAgICAgICAgICAgPEV1aUJhZGdlIGNsYXNzTmFtZT1cImJyZWFkY3J1bWJcIiBjb2xvcj17cHJvcHMuY29sb3JTZWNvbmQgfHwgXCJzdWNjZXNzXCJ9PlxuICAgICAgICAgICAgICAgIHtwcm9wcy5zaG9ydEZvcm0gPyBwcm9wcy5zaG9ydEZvcm0udG9VcHBlckNhc2UoKSA6IFwiTm8gc2hvcnQgZm9ybSBhdmFpbGFibGVcIn1cbiAgICAgICAgICAgIDwvRXVpQmFkZ2U+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQnJlYWRjcnVtYlByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQ2FyZCwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtPbnRvbG9naWVzfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtEYXRhQ29udGVudFdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBEYXRhQ29udGVudFdpZGdldChwcm9wczogRGF0YUNvbnRlbnRXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaSwgcGFyYW1ldGVyLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBvbnRvbG9naWVzRGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNFcnJvcixcbiAgICBkYXRhVXBkYXRlZEF0XG4gIH0gPSB1c2VRdWVyeTxPbnRvbG9naWVzPihcbiAgICBbXCJvbnRvbG9naWVzRGF0YVwiLCBhcGksIHBhcmFtZXRlcl0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRPbnRvbG9naWVzRGF0YShcbiAgICAgICAgcHJvcHMucGFyYW1ldGVyXG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RXVpQ2FyZFxuICAgICAgICB0aXRsZT1cIkRhdGEgQ29udGVudFwiXG4gICAgICAgIGRlc2NyaXB0aW9uPXtkYXRhVXBkYXRlZEF0ID8gYFVwZGF0ZWQgJHtuZXcgRGF0ZShkYXRhVXBkYXRlZEF0KS50b0xvY2FsZVN0cmluZygpfWAgOiBcIlwifVxuICAgICAgICBsYXlvdXQ9XCJob3Jpem9udGFsXCJcbiAgICAgID5cbiAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuICAgICAgICAgIHsoaXNFcnJvcikgJiYgPEV1aVRleHQ+Tm8gZGF0YSBjb250ZW50IGF2YWlsYWJsZTwvRXVpVGV4dD59XG4gICAgICAgICAge2lzTG9hZGluZ1xuICAgICAgICAgICAgPyA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgICAgOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICB7KG9udG9sb2dpZXNEYXRhPy5nZXRUb3RhbE9udG9sb2dpZXMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0VG90YWxPbnRvbG9naWVzKCkudG9Mb2NhbGVTdHJpbmcoKX0gb250b2xvZ2llcyBhbmQgdGVybWlub2xvZ2llczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19Pm9udG9sb2d5IG51bWJlciBub3QgYXZhaWxhYmxlPC9saT4pfVxuICAgICAgICAgICAgICB7KG9udG9sb2dpZXNEYXRhPy5nZXROdW1DbGFzc2VzKClcbiAgICAgICAgICAgICAgICA/IDxsaT57b250b2xvZ2llc0RhdGE/LmdldE51bUNsYXNzZXMoKS50b0xvY2FsZVN0cmluZygpfSB0ZXJtczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19PnRlcm0gbnVtYmVyIG5vdCBhdmFpbGFibGU8L2xpPil9XG4gICAgICAgICAgICAgIHsob250b2xvZ2llc0RhdGE/LmdldE51bVByb3BlcnRpZXMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0TnVtUHJvcGVydGllcygpLnRvTG9jYWxlU3RyaW5nKCl9IHByb3BlcnRpZXM8L2xpPlxuICAgICAgICAgICAgICAgIDogPGxpIHN0eWxlPXt7IGZvbnRTdHlsZTogXCJpdGFsaWNcIiB9fT5wcm9wZXJ0eSBudW1iZXIgbm90IGF2YWlsYWJsZTwvbGk+KX1cbiAgICAgICAgICAgICAgeyhvbnRvbG9naWVzRGF0YT8uZ2V0TnVtSW5kaXZpZHVhbHMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0TnVtSW5kaXZpZHVhbHMoKS50b0xvY2FsZVN0cmluZygpfSBpbmRpdmlkdWFsczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19PmluZGl2aWR1YWwgbnVtYmVyIG5vdCBhdmFpbGFibGU8L2xpPil9XG4gICAgICAgICAgICAgIHsvKiA8bGk+VmVyc2lvbiB7Tk9UX0FWQUlMQUJMRX08L2xpPiAqL30gey8qIFRPRE8gaG93IHRvIGdldCBBUEkgdmVyc2lvbj8gKi99XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgPC9FdWlDYXJkPlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEYXRhQ29udGVudChwcm9wczogRGF0YUNvbnRlbnRXaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWREYXRhQ29udGVudFdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRGF0YUNvbnRlbnRXaWRnZXQocHJvcHM6IERhdGFDb250ZW50V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8RGF0YUNvbnRlbnRXaWRnZXRcbiAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBEYXRhQ29udGVudFdpZGdldCwgY3JlYXRlRGF0YUNvbnRlbnQgfTtcbiIsICJpbXBvcnQgUmVhY3QsIHtSZWFjdEVsZW1lbnR9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlDYXJkLCBFdWlGbGV4SXRlbSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlTcGFjZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gJ3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7YXNBcnJheSwgY2FwaXRhbGl6ZSwgZGVDYW1lbENhc2UsIGRlVW5kZXJzY29yZSwgZ2V0RW50aXR5VHlwZU5hbWUsIHJhbmRvbVN0cmluZywgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5fSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYLCBnZXRFbnRpdHlMaW5rSlNYLCBnZXRSZWlmaWVkSlNYLCBnZXRUb29sdGlwfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQge1Byb3BlcnR5LCBUaGluZywgQ2xhc3MsIEVudGl0eSwgSW5kaXZpZHVhbH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7aXNDbGFzcywgaXNQcm9wZXJ0eSwgaXNJbmRpdmlkdWFsfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7RW50aXR5SW5mb1dpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0hBU19USVRMRSA9IHRydWU7XG5cbmZ1bmN0aW9uIEVudGl0eUluZm9XaWRnZXQocHJvcHM6IEVudGl0eUluZm9XaWRnZXRQcm9wcykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7IGFwaSwgaXJpLCBvbnRvbG9neUlkLCBoYXNUaXRsZSA9IERFRkFVTFRfSEFTX1RJVExFLCBlbnRpdHlUeXBlLCBwYXJhbWV0ZXIsIHNob3dCYWRnZXMgLCB1c2VMZWdhY3ksIG9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSAsIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogZW50aXR5LFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ0VudGl0eSxcbiAgICAgICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NFbnRpdHksXG4gICAgICAgIGlzRXJyb3I6IGlzRXJyb3JFbnRpdHksXG4gICAgICAgIGVycm9yOiBlcnJvckVudGl0eSxcbiAgICB9ID0gdXNlUXVlcnkoXG4gICAgICAgIFtcbiAgICAgICAgICAgIFwiZW50aXR5SW5mb1wiLFxuICAgICAgICAgICAgcHJvcHNcbiAgICAgICAgXSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gZ2V0TGFiZWxTZWN0aW9uKGVudGl0eTogRW50aXR5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtlbnRpdHkuZ2V0TGFiZWwoKSAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkxhYmVsOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnRpdHkuZ2V0TGFiZWwoKX1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48RXVpU3BhY2VyLz48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTeW5vbnltc1NlY3Rpb24oZW50aXR5OiBFbnRpdHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2VudGl0eS5nZXRTeW5vbnltcygpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5TeW5vbnltczo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZW50aXR5LmdldFN5bm9ueW1zKCkubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48dWw+e2VudGl0eS5nZXRTeW5vbnltcygpLm1hcCgoc3lub255bSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9IGlkPXtzeW5vbnltLnZhbHVlfT57Z2V0UmVpZmllZEpTWChlbnRpdHksIHN5bm9ueW0sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+PHA+PC9wPjwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBlbnRpdHkuZ2V0U3lub255bXMoKVswXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEhhc0tleVNlY3Rpb24odGVybTogQ2xhc3MpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IHRlcm0uZ2V0SGFzS2V5KCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtrZXlzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5IYXMgS2V5OjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtrZXlzLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntrZXlzLm1hcCgoa2V5cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRDbGFzc0V4cHJlc3Npb25KU1godGVybSwgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLCBrZXlzLCBzaG93QmFkZ2VzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC9saT47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PC9wPjwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRDbGFzc0V4cHJlc3Npb25KU1godGVybSwgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLCBrZXlzWzBdLCBzaG93QmFkZ2VzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTdWJzZXRzU2VjdGlvbih0ZXJtOiBDbGFzcykgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7IHRlcm0uZ2V0U3Vic2V0cygpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5JbiBTdWJzZXRzOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0ZXJtLmdldFN1YnNldHMoKS5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Pjx1bD57dGVybS5nZXRTdWJzZXRzKCkubWFwKChzdWJzZXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17c3Vic2V0ICsgcmFuZG9tU3RyaW5nKCl9PntnZXRFbnRpdHlMaW5rSlNYKHRlcm0sIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSwgc3Vic2V0LCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+PHA+PC9wPjwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldEVudGl0eUxpbmtKU1godGVybSwgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLCB0ZXJtLmdldFN1YnNldHMoKVswXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFByb3BlcnR5Q2hhcmFjdGVyaXN0aWNzU2VjdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyaXN0aWNzID0gcHJvcGVydHkuZ2V0UmRmVHlwZXMoKS5tYXAodHlwZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHtcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjRnVuY3Rpb25hbFByb3BlcnR5JzogJ0Z1bmN0aW9uYWwnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNJbnZlcnNlRnVuY3Rpb25hbFByb3BlcnR5JzogJ0ludmVyc2UgRnVuY3Rpb25hbCcsXG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1RyYW5zaXRpdmVQcm9wZXJ0eSc6ICdUcmFuc2l0aXZlJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjU3ltbWV0cmljUHJvcGVydHknOiAnU3ltbWV0cmljJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjQXN5bW1ldHJpY1Byb3BlcnR5JzogJ0FzeW1tZXRyaWMnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNSZWZsZXhpdmVQcm9wZXJ0eSc6ICdSZWZsZXhpdmUnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNJcnJlZmxleGl2ZVByb3BlcnR5JzogJ0lycmVmbGV4aXZlJyxcbiAgICAgICAgICAgIH0pW3R5cGVdO1xuICAgICAgICB9KS5maWx0ZXIoKHR5cGUpID0+ICEhdHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2NoYXJhY3RlcmlzdGljcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+Q2hhcmFjdGVyaXN0aWNzOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaGFyYWN0ZXJpc3RpY3MubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48dWw+e2NoYXJhY3RlcmlzdGljcy5tYXAoKGNoYXJhY3RlcmlzdGljKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2NoYXJhY3RlcmlzdGljfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KCl9PC91bD48cD48L3A+PC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57Y2hhcmFjdGVyaXN0aWNzWzBdfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREb21haW5TZWN0aW9uKHByb3BlcnR5OiBQcm9wZXJ0eSkgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCBkb21haW5zID0gcHJvcGVydHkuZ2V0RG9tYWluKCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtkb21haW5zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5Eb21haW46PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge2RvbWFpbnMubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48dWw+e2RvbWFpbnMubWFwKChkb21haW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZG9tYWlucywgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPjxwPjwvcD48Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRDbGFzc0V4cHJlc3Npb25KU1gocHJvcGVydHksIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksIGRvbWFpbnNbMF0sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRSYW5nZVNlY3Rpb24ocHJvcGVydHk6IFByb3BlcnR5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHJhbmdlcyA9IHByb3BlcnR5LmdldFJhbmdlKCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtyYW5nZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5SYW5nZTo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cmFuZ2VzLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+PHVsPntyYW5nZXMubWFwKChyYW5nZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCByYW5nZXMsIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD48cD48L3A+PC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCByYW5nZXNbMF0sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJbmRpdmlkdWFsUHJvcGVydHlBc3NlcnRpb25zU2VjdGlvbihpbmRpdmlkdWFsOiBJbmRpdmlkdWFsKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5SXJpcyA9IE9iamVjdC5rZXlzKGluZGl2aWR1YWwucHJvcGVydGllcyk7XG4gICAgICAgIGNvbnN0IG5lZ2F0aXZlUHJvcGVydGllcyA9IHByb3BlcnR5SXJpcy5maWx0ZXIoKGtleSkgPT4ga2V5LnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKSk7XG4gICAgICAgIGNvbnN0IG9iamVjdFByb3BlcnRpZXMgPSBwcm9wZXJ0eUlyaXMuZmlsdGVyKChrZXkpID0+IGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoa2V5KSAmJiBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGtleSk/LnR5cGUuaW5kZXhPZihcIm9iamVjdFByb3BlcnR5XCIpICE9PSAtMSlcbiAgICAgICAgY29uc3QgZGF0YVByb3BlcnRpZXMgPSBwcm9wZXJ0eUlyaXMuZmlsdGVyKChrZXkpID0+IGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoa2V5KSAmJiBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGtleSk/LnR5cGUuaW5kZXhPZihcImRhdGFQcm9wZXJ0eVwiKSAhPT0gLTEpXG4gICAgICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uczogUmVhY3RFbGVtZW50W10gPSBbXTtcblxuICAgICAgICBmb3IoY29uc3QgaXJpIG9mIG9iamVjdFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoaW5kaXZpZHVhbC5wcm9wZXJ0aWVzW2lyaV0pO1xuICAgICAgICAgICAgZm9yKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgaXJpLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiAmJiB2LmluY2x1ZGVzKFwiaHR0cFwiKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Zm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIn19PiYjOTY1Njs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHYsIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VG9vbHRpcCgodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgPyB2IDogdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodikgJiYgdi52YWx1ZSA/IEpTT04uc3RyaW5naWZ5KHYudmFsdWUpIDogSlNPTi5zdHJpbmdpZnkodikpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IoY29uc3QgaXJpIG9mIGRhdGFQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBhc0FycmF5KGluZGl2aWR1YWwucHJvcGVydGllc1tpcmldKTtcbiAgICAgICAgICAgIGZvcihjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIGlyaSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7PD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e2ZvbnRTaXplOiBcIm1lZGl1bVwiLCBjb2xvcjogXCJncmF5XCJ9fT4mIzk2NTY7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgdiwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz59XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvcihjb25zdCBrZXkgb2YgbmVnYXRpdmVQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBpcmkgPSBrZXkuc2xpY2UoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiLmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGlyaSk7XG4gICAgICAgICAgICBjb25zdCBoYXNEYXRhUHJvcGVydHkgPSBsaW5rZWRFbnRpdHk/LnR5cGUuaW5kZXhPZihcImRhdGFQcm9wZXJ0eVwiKSAhPT0gLTE7XG4gICAgICAgICAgICBjb25zdCBoYXNPYmplY3RQcm9wZXJ0eSA9IGxpbmtlZEVudGl0eT8udHlwZS5pbmRleE9mKFwib2JqZWN0UHJvcGVydHlcIikgIT09IC0xO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gYXNBcnJheShpbmRpdmlkdWFsLnByb3BlcnRpZXNba2V5XSk7XG5cbiAgICAgICAgICAgIGZvcihjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19Pm5vdDwvaT57XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgaXJpLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiAmJiB2LmluY2x1ZGVzKFwiaHR0cFwiKSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwifX0+JiM5NjU2Ozwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgdiwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc09iamVjdFByb3BlcnR5ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFRvb2x0aXAoKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiID8gdiA6IHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHYpICYmIHYudmFsdWUgPyBKU09OLnN0cmluZ2lmeSh2LnZhbHVlKSA6IEpTT04uc3RyaW5naWZ5KHYpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRGF0YVByb3BlcnR5ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e2ZvbnRTaXplOiBcIm1lZGl1bVwiLCBjb2xvcjogXCJncmF5XCJ9fT4mIzk2NTY7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCB2LCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtwcm9wZXJ0eUFzc2VydGlvbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPlByb3BlcnR5IGFzc2VydGlvbnM6PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BlcnR5QXNzZXJ0aW9ucy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Pjx1bD57cHJvcGVydHlBc3NlcnRpb25zLm1hcCgocGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57cGF9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKX08L3VsPjxwPjwvcD48Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntwcm9wZXJ0eUFzc2VydGlvbnNbMF19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEFubm90YXRpb25TZWN0aW9uKHRoaW5nOiBUaGluZykgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7dGhpbmcuZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKS5tYXAoKGFubm9LZXksIGluZGV4LCBhcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5ub3MgPSB0aGluZy5nZXRBbm5vdGF0aW9uQnlJZChhbm5vS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYoYW5ub3MubGVuZ3RoID09IDApIHJldHVybiA8PjwvPjtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPD48RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9IGtleT17YW5ub0tleX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj57Y2FwaXRhbGl6ZShkZVVuZGVyc2NvcmUoZGVDYW1lbENhc2UodGhpbmcuZ2V0QW5ub3RhdGlvblRpdGxlQnlJZChhbm5vS2V5KSkpKX06PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge2Fubm9zLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+PHVsPnthbm5vcy5tYXAoKGFubm90YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17YW5ub3RhdGlvbi52YWx1ZX0+e2dldFJlaWZpZWRKU1godGhpbmcsIGFubm90YXRpb24sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+PHA+PC9wPjwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldFJlaWZpZWRKU1godGhpbmcsIGFubm9zWzBdLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpQ2FyZFxuICAgICAgICAgICAgICAgIHRpdGxlPXtoYXNUaXRsZSA/IChlbnRpdHlUeXBlID8gY2FwaXRhbGl6ZShnZXRFbnRpdHlUeXBlTmFtZShlbnRpdHlUeXBlKSkgOiAoaXNTdWNjZXNzRW50aXR5ICYmIGVudGl0eSkgPyBjYXBpdGFsaXplKGVudGl0eS5nZXRUeXBlKCkpIDogXCJcIikgICsgXCIgSW5mb3JtYXRpb25cIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICA+XG5cbiAgICAgICAgICAgICAgICB7aXNMb2FkaW5nRW50aXR5ICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXsncyd9Lz59XG4gICAgICAgICAgICAgICAge2lzU3VjY2Vzc0VudGl0eSAmJiBlbnRpdHkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0TGFiZWxTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0U3lub255bXNTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNDbGFzcyhlbnRpdHkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldFN1YnNldHNTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRIYXNLZXlTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1Byb3BlcnR5KGVudGl0eSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0UHJvcGVydHlDaGFyYWN0ZXJpc3RpY3NTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXREb21haW5TZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRSYW5nZVNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAge2lzSW5kaXZpZHVhbChlbnRpdHkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEluZGl2aWR1YWxQcm9wZXJ0eUFzc2VydGlvbnNTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0QW5ub3RhdGlvblNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7aXNFcnJvckVudGl0eSAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yRW50aXR5LCBcImluZm9ybWF0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgICAgICAgICA8L0V1aUNhcmQ+XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eUluZm8ocHJvcHM6IEVudGl0eUluZm9XaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEVudGl0aXlJbmZvV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRFbnRpdGl5SW5mb1dpZGdldChwcm9wczogRW50aXR5SW5mb1dpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxFbnRpdHlJbmZvV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgaGFzVGl0bGU9e3Byb3BzLmhhc1RpdGxlfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXM9e3Byb3BzLnNob3dCYWRnZXN9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT17cHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBFbnRpdHlJbmZvV2lkZ2V0LCBjcmVhdGVFbnRpdHlJbmZvIH07XG4iLCAiaW1wb3J0IHtUaGluZ30gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IFJlYWN0LCB7UmVhY3RFbGVtZW50fSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpSWNvblRpcCwgRXVpSWNvbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHthc0FycmF5LCBpbmZlclR5cGVGcm9tVHlwZUFycmF5LCByYW5kb21TdHJpbmd9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IExpbmtlZEVudGl0aWVzIGZyb20gXCIuL0xpbmtlZEVudGl0aWVzXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5pbXBvcnQgXCIuLi9zdHlsZS9zZW1sb29rcC1zdHlsZXMuY3NzXCI7XG5pbXBvcnQge09uTmF2aWdhdGVzfSBmcm9tIFwiLi4vYXBwL3R5cGVzXCI7XG5cbmNvbnN0IERFRkFVTFRfU0hPV19CQURHRVMgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9vbHRpcCh0ZXh0OiBzdHJpbmcpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpSWNvblRpcCB0eXBlPXtcImlJbkNpcmNsZVwifSBjb2xvcj17XCJzdWJkdWVkXCJ9IGNvbnRlbnQ9e3RleHR9Lz5cbiAgICApO1xufVxuXG4vKipcbiAqIE9OTFkgVVNBQkxFIFdJVEggVjItQVBJIEVOVElUSUVTXG4gKlxuICogUmV0dXJucyBSZWlmaWVkIGF4aW9tcyBhcyBKU1ggZWxlbWVudCAoc2ltaWxhciB0byBNZXRhZGF0YVRvb2x0aXAgY29tcG9uZW50IGluIG9sczQgcHJvamVjdClcbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHkgdGhlIHN1cnJvdW5kaW5nIGVudGl0eSBvZiB0aGUgYXhpb21zIGFycmF5IChmb3IgZXZlbnR1YWwgbGFiZWwgZmV0Y2hpbmcpXG4gKiBAcGFyYW0gYXhpb21zRGljdCB0aGUgZW50aXRpZXMgYXhpb21zIGluIHRoZSBmb3JtYXQgcmV0dXJuZWQgYnkgUmVpZmllZDo6Z2V0TWV0YWRhdGEoKVxuICogQHJldHVybnMgUmVhY3RFbGVtZW50IHRoZSBheGlvbXMgaW4gSlNYIGZvcm1hdCB0byBkaXNwbGF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBeGlvbXNJbmZvcm1hdGlvbkpTWChwYXJlbnRFbnRpdHk6IFRoaW5nLCBheGlvbXNEaWN0OiBhbnkgfCBudWxsKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgY29uc3QgYXhpb21zVGV4dCA9IE9iamVjdC5rZXlzKGF4aW9tc0RpY3QpXG4gICAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBwYXJlbnRFbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXRMYWJlbEZvcklyaShrZXkpIHx8IGtleTtcbiAgICAgICAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIFwiKlwiICsgYXhpb21zRGljdFtrZXldICsgXCIgKFwiICsgbGFiZWwgKyBcIilcIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHJldHVybiBcIlwiO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIlxcblwiKVxuXG4gICAgcmV0dXJuIGdldFRvb2x0aXAoYXhpb21zVGV4dCk7XG59XG5cbi8qKlxuICogT05MWSBVU0FCTEUgV0lUSCBWMi1BUEkgRU5USVRJRVNcbiAqXG4gKiBSZXR1cm5zIGEgbGFiZWxlZCBlbnRpdHkgbGluayBhcyBKU1ggZWxlbWVudFxuICogQHBhcmFtIHBhcmVudEVudGl0eSB0aGUgZW50aXR5IG9iamVjdCBpbiB3aGljaCB0aGUgbGlua2VkIGVudGl0eSBleGlzdHNcbiAqIEBwYXJhbSBsaW5rZWRFbnRpdGllcyB0aGUgbGlua2VkRW50aXRpZXMgb2JqZWN0IChleGlzdHMgYXMgcGFyYW0gYmVjYXVzZSBpdCBpcyBuZWNlc3NhcnkgdGhhdCB0aGUgZW50aXR5IGhhcyBhIGxpbmtlZEVudGl0aWVzIGJsb2NrIGluIHByb3BlcnRpZXMpXG4gKiBAcGFyYW0gaXJpICAgdGhlIGVudGl0aWVzJyBpcmlcbiAqIEBwYXJhbSBzaG93QmFkZ2VzICAgIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIGlmIGJhZGdlcyBzaG91bGQgYmUgc2hvd25cbiAqIEBwYXJhbSBvbk5hdmlnYXRlcyBmdW5jdGlvbnMgZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIGNsaWNrYWJsZSBpdGVtc1xuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gZW50aXRpZXMgbmFtZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBvbnRvbG9neSBiYWRnZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYSBkaXNhbWJpZ3VhdGlvbiBiYWRnZVxuICogQHJldHVybnMgUmVhY3RFbGVtZW50IHRoZSBlbnRpdHkgbGluayBKU1hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0eUxpbmtKU1gocGFyZW50RW50aXR5OiBUaGluZywgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzLCBpcmk6IHN0cmluZywgc2hvd0JhZGdlcyA6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTLCAvKlRPRE86IGNoYW5nZSB0byB1c2luZyAoZW50aXR5IDogRW50aXR5RGF0YSkgbGF0ZXIqLyBvbk5hdmlnYXRlczogT25OYXZpZ2F0ZXMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IGxhYmVsID0gbGlua2VkRW50aXRpZXMuZ2V0TGFiZWxGb3JJcmkoaXJpKSB8fCBpcmkuc3BsaXQoXCIvXCIpLnBvcCgpIHx8IGlyaTtcbiAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSBsaW5rZWRFbnRpdGllcy5nZXQoaXJpKTtcbiAgICBjb25zdCBsb2NhbE9udG9sb2d5ID0gcGFyZW50RW50aXR5LmdldE9udG9sb2d5SWQoKTtcblxuICAgIC8vIHJlZmVyZW5jZSB0byBzZWxmOiBqdXN0IGRpc3BsYXkgbGFiZWwgYmVjYXVzZSB3ZSBhcmUgYWxyZWFkeSBvbiB0aGF0IHBhZ2VcbiAgICBpZiAocGFyZW50RW50aXR5LmdldFR5cGUoKSAhPT0gXCJvbnRvbG9neVwiICYmIGlyaSA9PT0gcGFyZW50RW50aXR5Py5nZXRJcmkoKSkge1xuICAgICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwiaGlnaGxpZ2h0XCI+e3BhcmVudEVudGl0eS5nZXRMYWJlbCgpfTwvc3Bhbj5cbiAgICB9XG5cbiAgICBpZiAoIWxpbmtlZEVudGl0eSkge1xuICAgICAgICBpZihpcmkuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgICAgIHJldHVybiA8YSBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBocmVmPXtpcml9PntsYWJlbH08L2E+O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU28gZmFyIG9ubHkga25vd24gb2NjdXJyZW5jZSBvZiB0aGlzIGJyYW5jaCBpcyBmb3Igb3dsI1RoaW5nXG4gICAgICAgICAgICByZXR1cm4gPHNwYW4+e2xhYmVsfTwvc3Bhbj47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvdGhlckRlZmluZWRCeSA9IGxpbmtlZEVudGl0eVtcImRlZmluZWRCeVwiXSA/IGxpbmtlZEVudGl0eVtcImRlZmluZWRCeVwiXS5maWx0ZXIoKGVsZW06IGFueSkgPT4ge3JldHVybiBlbGVtICE9PSBsb2NhbE9udG9sb2d5fSkgOiBbXTtcbiAgICBjb25zdCBsaW5rZWRFbnRpdHlUeXBlID0gbGlua2VkRW50aXR5W1widHlwZVwiXSA/IGluZmVyVHlwZUZyb21UeXBlQXJyYXkobGlua2VkRW50aXR5W1widHlwZVwiXSkgOiBwYXJlbnRFbnRpdHkuZ2V0VHlwZSgpO1xuXG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0bGFiLnpibWVkLmRlL2ttL3NlbWxvb2twL29sczQvLS9ibG9iL2Rldi9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9FbnRpdHlMaW5rLnRzeCBmb3Igb3JpZ2luYWwgcmVmZXJlbmNlXG4gICAgaWYob3RoZXJEZWZpbmVkQnkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGlmKGxpbmtlZEVudGl0eVtcImhhc0xvY2FsRGVmaW5pdGlvblwiXSkge1xuICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+IDxvbnRvbG9neUlkPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoaXMgb250b2xvZ3kgYW5kIDxvbnRvbG9neUlkPiBsaW5rcyB0byB0aGUgdGVybSBpbiB0aGUgZGVmaW5pbmcgb250b2xvZ3lcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkobG9jYWxPbnRvbG9neSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19PntsYWJlbH08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwibm8tZGVjb3JhdGlvblwiIG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kob3RoZXJEZWZpbmVkQnlbMF0sIGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT57PHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57b3RoZXJEZWZpbmVkQnlbMF0udG9VcHBlckNhc2UoKX08L3NwYW4+fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+IDxvbnRvbG9neUlkPiBsaW5raW5nIHRvIHRoZSB0ZXJtIGluIHRoZSBkZWZpbmluZyBvbnRvbG9neVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eShvdGhlckRlZmluZWRCeVswXSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19PntsYWJlbH08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwibm8tZGVjb3JhdGlvblwiIG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kob3RoZXJEZWZpbmVkQnlbMF0sIGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT57PHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57b3RoZXJEZWZpbmVkQnlbMF0udG9VcHBlckNhc2UoKX08L3NwYW4+fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYob3RoZXJEZWZpbmVkQnkubGVuZ3RoID4gMSkge1xuICAgICAgICBpZihsaW5rZWRFbnRpdHlbXCJoYXNMb2NhbERlZmluaXRpb25cIl0pIHtcbiAgICAgICAgICAgIC8vIHNob3cgPGxhYmVsPiA8b250b2xvZ3lJZDE+IDxvbnRvbG9neUlkMj4gLi4uIDxvbnRvbG9neUlkTj4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybSBpbiB0aGlzIG9udG9sb2d5IGFuZCA8b250b2xvZ3lJZEk+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoYXQgZGVmaW5pbmcgb250b2xvZ3lcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkobG9jYWxPbnRvbG9neSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19PntsYWJlbH08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvdGhlckRlZmluZWRCeS5tYXAoKGVsZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJuby1kZWNvcmF0aW9uXCIga2V5PXtyYW5kb21TdHJpbmcoKX0gb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neShlbGVtLCBsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+ezxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+e2VsZW0udG9VcHBlckNhc2UoKX08L3NwYW4+fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNob3cgPGxhYmVsPjxJQ09OPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtcycgaXJpIGFuZCA8SUNPTj4gbGlua3MgdG8gZGlzYW1iaWd1YXRpb24gcGFnZVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBocmVmPXtpcml9PntsYWJlbH08L2E+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIiBrZXk9e3JhbmRvbVN0cmluZygpfSBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlKSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUobGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUljb24gdHlwZT17XCJzZWFyY2hcIn0gc2l6ZT17XCJzXCJ9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge290aGVyRGVmaW5lZEJ5Lmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1wib250b2xvZ2llc1wifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYobGlua2VkRW50aXR5W1wiaGFzTG9jYWxEZWZpbml0aW9uXCJdKSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybSBpbiB0aGlzIG9udG9sb2d5XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KGxvY2FsT250b2xvZ3ksIGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT57bGFiZWx9PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZihwYXJzZUludChsaW5rZWRFbnRpdHlbXCJudW1BcHBlYXJzSW5cIl0pID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIHNob3cgPGxhYmVsPjxJQ09OPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtcycgaXJpIGFuZCA8SUNPTj4gbGlua3MgdG8gZGlzYW1iaWd1YXRpb24gcGFnZVxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBocmVmPXtpcml9PntsYWJlbH08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwibm8tZGVjb3JhdGlvblwiIGtleT17cmFuZG9tU3RyaW5nKCl9IG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZShsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUljb24gdHlwZT17XCJzZWFyY2hcIn0gc2l6ZT17XCJzXCJ9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaW5rZWRFbnRpdHlbXCJudW1BcHBlYXJzSW5cIl19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFyc2VJbnQobGlua2VkRW50aXR5W1wibnVtQXBwZWFyc0luXCJdKSA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJvbnRvbG9naWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJvbnRvbG9neVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzaG93IHJhdyBpcmlcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgaHJlZj17bGlua2VkRW50aXR5W1widXJsXCJdIHx8IGlyaX0+e2xhYmVsfTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIE9OTFkgVVNBQkxFIFdJVEggVjItQVBJIEVOVElUSUVTXG4gKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIG9uZSBlbGVtZW50IG9mIGEgc2VjdGlvbnMnIGxpc3QsIHBvc3NpYmx5IGluIGEgcmVjdXJzaXZlIGZhc2hpb24gYnkgcGFyc2luZyB0aGUgcmVzcG9uc2Ugb2JqZWN0IGF0IHRoZSBjdXJyZW50UmVzcG9uc2VQYXRoIHRvIHNob3cgTWFuY2hlc3RlciBzeW50YXguXG4gKiBAcGFyYW0gcGFyZW50RW50aXR5IHRoZSBlbnRpdHkgb2JqZWN0IHBvc3Nlc3NpbmcgdGhlIHdob2xlIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzIHRoZSBsaW5rZWRFbnRpdGllcyBvYmplY3QgKGV4aXN0cyBhcyBwYXJhbSBiZWNhdXNlIGl0IGlzIG5lY2Vzc2FyeSB0aGF0IHRoZSBlbnRpdHkgaGFzIGEgbGlua2VkRW50aXRpZXMgYmxvY2sgaW4gcHJvcGVydGllcylcbiAqIEBwYXJhbSBjdXJyZW50UmVzcG9uc2VQYXRoIHRoZSBjdXJyZW50IHN1Yi1vYmplY3Qgb2YgdGhlIHBhcmVudEVudGl0aWVzIHJlc3BvbnNlIG9iamVjdCBwYXJzZWQgYXMgY2xhc3MgZXhwcmVzc2lvblxuICogQHBhcmFtIHNob3dCYWRnZXMgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGNsYXNzIGV4cHJlc3Npb24gSlNYXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5OiBUaGluZywgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzLCBjdXJyZW50UmVzcG9uc2VQYXRoOiBhbnksIHNob3dCYWRnZXM6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTLCAvKlRPRE86IGNoYW5nZSB0byB1c2luZyAoZW50aXR5IDogRW50aXR5RGF0YSkgbGF0ZXIqLyBvbk5hdmlnYXRlczogT25OYXZpZ2F0ZXMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGxldCByZXN1bHQgPSA8PjwvPjtcblxuICAgIC8vIG1lcmdlIGxpbmtlZEVudGl0aWVzIG9mIGN1cnJlbnRSZXNwb25zZVBhdGggaWYgY3VycmVudFJlc3BvbnNlUGF0aC5saW5rZWRFbnRpdGllcyBpcyBub3QgdW5kZWZpbmVkXG4gICAgbGlua2VkRW50aXRpZXMgPSBsaW5rZWRFbnRpdGllcy5tZXJnZVdpdGgoY3VycmVudFJlc3BvbnNlUGF0aC5saW5rZWRFbnRpdGllcyk7XG5cbiAgICBpZiAodHlwZW9mIGN1cnJlbnRSZXNwb25zZVBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmVzdWx0ID0gZ2V0RW50aXR5TGlua0pTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBjdXJyZW50UmVzcG9uc2VQYXRoLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjdXJyZW50UmVzcG9uc2VQYXRoID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGgpICYmIEFycmF5LmlzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aFtcInR5cGVcIl0pICYmIGN1cnJlbnRSZXNwb25zZVBhdGhbXCJ0eXBlXCJdLmluZGV4T2YoXCJyZWlmaWNhdGlvblwiKSAhPT0gLTEpIHsgLy8gVE9ETzogQ29uY2F0IHdpdGggZWxzZSBwYXJ0PyBTZWUgcmVsYXRlZEZyb20gKE1hbmNoZXN0ZXIgc3ludGF4IGRvZXMgbm90IGdldCBkaXNwbGF5ZWQsIGJ1dCBuZWl0aGVyIGluIG9sczQpXG4gICAgICAgIC8vIGN1cnJlbnQgcmVzcG9uc2UgcGF0aCBpcyByZWlmaWNhdGlvblxuICAgICAgICByZXN1bHQgPSBnZXRSZWlmaWVkSlNYKHBhcmVudEVudGl0eSwgUmVpZmllZC5mcm9tSnNvbjxhbnk+KGN1cnJlbnRSZXNwb25zZVBhdGgpWzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyk7XG4gICAgfVxuICAgIGVsc2UgeyAvLyB0eXBlID09PSBcIm9iamVjdFwiXG4gICAgICAgIGNvbnN0IHNvbWVWYWx1ZXNGcm9tID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3NvbWVWYWx1ZXNGcm9tXCJdO1xuICAgICAgICBjb25zdCBhbGxWYWx1ZXNGcm9tID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2FsbFZhbHVlc0Zyb21cIl07XG4gICAgICAgIGNvbnN0IGludGVyc2VjdGlvbk9mID0gYXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW50ZXJzZWN0aW9uT2ZcIl0pO1xuICAgICAgICBjb25zdCB1bmlvbk9mID0gYXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdW5pb25PZlwiXSk7XG4gICAgICAgIGNvbnN0IGhhc1ZhbHVlID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2hhc1ZhbHVlXCJdO1xuICAgICAgICBjb25zdCBtaW5DYXJkaW5hbGl0eSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNtaW5DYXJkaW5hbGl0eVwiXSB8fCBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjbWluUXVhbGlmaWVkQ2FyZGluYWxpdHlcIl07XG4gICAgICAgIGNvbnN0IG1heENhcmRpbmFsaXR5ID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21heENhcmRpbmFsaXR5XCJdIHx8IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNtYXhRdWFsaWZpZWRDYXJkaW5hbGl0eVwiXTtcbiAgICAgICAgY29uc3QgY2FyZGluYWxpdHkgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjY2FyZGluYWxpdHlcIl0gfHwgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3F1YWxpZmllZENhcmRpbmFsaXR5XCJdO1xuICAgICAgICBjb25zdCBoYXNTZWxmID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2hhc1NlbGZcIl07XG4gICAgICAgIGNvbnN0IGNvbXBsZW1lbnRPZiA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNjb21wbGVtZW50T2ZcIl07XG4gICAgICAgIGNvbnN0IG9uZU9mID0gYXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjb25lT2ZcIl0pO1xuICAgICAgICBjb25zdCBpbnZlcnNlT2YgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW52ZXJzZU9mXCJdO1xuICAgICAgICBjb25zdCBvblByb3BlcnR5ID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI29uUHJvcGVydHlcIl07XG4gICAgICAgIGNvbnN0IG9uRGF0YVR5cGUgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjb25EYXRhdHlwZVwiXTtcblxuICAgICAgICBpZihvbkRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgICAgICAgICAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uRGF0YVR5cGUsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKVxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgY29uc3Qgd2l0aFJlc3RyaWN0aW9ucyA9IGFzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3dpdGhSZXN0cmljdGlvbnNcIl0pO1xuICAgICAgICAgICAgaWYod2l0aFJlc3RyaWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCg8Pls8Lz4pO1xuXG4gICAgICAgICAgICAgICAgbGV0IGlzRmlyc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCByZXN0cmljdGlvbiBvZiB3aXRoUmVzdHJpY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzRmlyc3QpIGlzRmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBlbGVtZW50cy5wdXNoKDw+LCZuYnNwOzwvPik7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluRXhjbHVzaXZlID0gcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtaW5FeGNsdXNpdmVcIl07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pbkluY2x1c2l2ZSA9IHJlc3RyaWN0aW9uW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjbWluSW5jbHVzaXZlXCJdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhFeGNsdXNpdmUgPSByZXN0cmljdGlvbltcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI21heEV4Y2x1c2l2ZVwiXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4SW5jbHVzaXZlID0gcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtYXhJbmNsdXNpdmVcIl07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYobWluRXhjbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+Jmd0OyB7bWluRXhjbHVzaXZlfTwvPik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobWluSW5jbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+JmdlOyB7bWluSW5jbHVzaXZlfTwvPik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobWF4RXhjbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+Jmx0OyB7bWF4RXhjbHVzaXZlfTwvPik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobWF4SW5jbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+JmxlOyB7bWF4SW5jbHVzaXZlfTwvPik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCg8Pl08Lz4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQgPSA8PntlbGVtZW50cy5tYXAoKGVsZW0pID0+IDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PntlbGVtfTwvc3Bhbj4pfTwvPlxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNvbWVWYWx1ZXNGcm9tKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gc29tZSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShzb21lVmFsdWVzRnJvbSlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWxsVmFsdWVzRnJvbSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25Qcm9wZXJ0eSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IG9ubHkgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoYWxsVmFsdWVzRnJvbSlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW50ZXJzZWN0aW9uT2YubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHM6IFJlYWN0RWxlbWVudFtdID0gW1xuICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjNDA7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbSBvZiBpbnRlcnNlY3Rpb25PZikge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICA8aT4gYW5kIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGVsZW0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjNDE7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8c3Bhbj57ZWxlbWVudHMubWFwKChlbGVtKSA9PiA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+KX08L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaW9uT2YubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHM6IFJlYWN0RWxlbWVudFtdID0gW1xuICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjNDA7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbSBvZiB1bmlvbk9mKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpPiBvciA8L2k+XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGdldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBlbGVtLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAmIzQxO1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPHNwYW4+e2VsZW1lbnRzLm1hcCgoZWxlbSkgPT4gPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e2VsZW19PC9zcGFuPil9PC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25Qcm9wZXJ0eSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IHZhbHVlIDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KGhhc1ZhbHVlKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtaW5DYXJkaW5hbGl0eSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25Qcm9wZXJ0eSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IG1pbiA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShtaW5DYXJkaW5hbGl0eSlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF4Q2FyZGluYWxpdHkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19PiBtYXggPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkobWF4Q2FyZGluYWxpdHkpWzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNhcmRpbmFsaXR5KSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gZXhhY3RseSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShjYXJkaW5hbGl0eSlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaGFzU2VsZikge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25Qcm9wZXJ0eSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IFNlbGYgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoaGFzU2VsZilbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29tcGxlbWVudE9mKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGk+bm90IDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KGNvbXBsZW1lbnRPZilbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob25lT2YubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHM6IFJlYWN0RWxlbWVudFtdID0gW1xuICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjMTIzO1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW0gb2Ygb25lT2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJiM0NDsmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGVsZW0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjMTI1O1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPHNwYW4+e2VsZW1lbnRzLm1hcCgoZWxlbSkgPT4gPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e2VsZW19PC9zcGFuPil9PC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbnZlcnNlT2YpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+aW52ZXJzZSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJiM0MDtcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGludmVyc2VPZiwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICYjNDE7XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBzZWN0aW9uIGxpc3QgZWxlbWVudHMgc3BlY2lmaWVkIGF0IGBjdXJyZW50UmVzcG9uc2VQYXRoYFxuICogQHBhcmFtIHBhcmVudEVudGl0eVxuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzXG4gKiBAcGFyYW0gYXJyYXlcbiAqIEBwYXJhbSBzaG93QmFkZ2VzXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMgZnVuY3Rpb25zIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBjbGlja2FibGUgaXRlbXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIGVudGl0aWVzIG5hbWVcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gb250b2xvZ3kgYmFkZ2VcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGEgZGlzYW1iaWd1YXRpb24gYmFkZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3Rpb25MaXN0SlNYKHBhcmVudEVudGl0eTogVGhpbmcsIGxpbmtlZEVudGl0aWVzOiBMaW5rZWRFbnRpdGllcywgYXJyYXk6IGFueVtdLCBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUywgLypUT0RPOiBjaGFuZ2UgdG8gdXNpbmcgKGVudGl0eSA6IEVudGl0eURhdGEpIGxhdGVyKi8gb25OYXZpZ2F0ZXM6IE9uTmF2aWdhdGVzKTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge2FycmF5Lmxlbmd0aCA9PT0gMSA/IChcbiAgICAgICAgICAgICAgICA8cD57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgcGFyZW50RW50aXR5LmdldExpbmtlZEVudGl0aWVzKCksIGFycmF5WzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9PC9wPlxuICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhcnJheS5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gPntnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBwYXJlbnRFbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgaXRlbSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3VsPn1cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuLyoqXG4gKiBJbnNlcnRzIGxpbmtzIGludG8gdGV4dCAocG90ZW50aWFsbHkgd2l0aCBsYWJlbCBpbnN0ZWFkIG9mIGxpbmsgZGlzcGxheWVkIGlmIGxpbmsgZXhpc3RzIGFzIGtleSBpbnNpZGUgbGlua2VkRW50aXRpZXMpIGFuZCByZXR1cm5zIHRoZSByZXN1bHRpbmcgSlNYIGVsZW1lbnRcbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHkgdGhlIGVudGl0eSBvYmplY3QgcG9zc2Vzc2luZyB0aGUgd2hvbGUgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gdGV4dCB0aGUgdGV4dCB0byBpbnNlcnQgbGlua3MgaW50b1xuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzIHRoZSBsaW5rZWRFbnRpdGllcyBvYmplY3QgKGlmIHVuZGVmaW5lZCwgbm8gbGFiZWxzIGFyZSBpbmZlcnJlZClcbiAqIEBwYXJhbSBzaG93QmFkZ2VzIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIGlmIGJhZGdlcyBzaG91bGQgYmUgc2hvd25cbiAqIEBwYXJhbSBvbk5hdmlnYXRlcyBmdW5jdGlvbnMgZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIGNsaWNrYWJsZSBpdGVtc1xuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gZW50aXRpZXMgbmFtZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBvbnRvbG9neSBiYWRnZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYSBkaXNhbWJpZ3VhdGlvbiBiYWRnZVxuICovXG5mdW5jdGlvbiBhZGRMaW5rc1RvVGV4dChwYXJlbnRFbnRpdHk6IFRoaW5nLCB0ZXh0OiBzdHJpbmcsIGxpbmtlZEVudGl0aWVzOiBMaW5rZWRFbnRpdGllcyB8IHVuZGVmaW5lZCwgc2hvd0JhZGdlczogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMsIC8qVE9ETzogY2hhbmdlIHRvIHVzaW5nIChlbnRpdHkgOiBFbnRpdHlEYXRhKSBsYXRlciovIG9uTmF2aWdhdGVzOiBPbk5hdmlnYXRlcykge1xuICAgIGNvbnN0IGxpbmtzVG9TcGxpY2U6IEFycmF5PHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXI7IGxpbms6IFJlYWN0RWxlbWVudCB9PiA9XG4gICAgICAgIFtdO1xuXG4gICAgaWYobGlua2VkRW50aXRpZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRpdHlJZCBvZiBPYmplY3Qua2V5cyhsaW5rZWRFbnRpdGllcy5saW5rZWRFbnRpdGllcykpIHtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0ZXh0LmluZGV4T2YoZW50aXR5SWQsIDApO1xuICAgICAgICAgICAgICAgIG4gIT09IC0xO1xuICAgICAgICAgICAgICAgIG4gPSB0ZXh0LmluZGV4T2YoZW50aXR5SWQsIG4pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsaW5rc1RvU3BsaWNlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogbixcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBuICsgZW50aXR5SWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBnZXRFbnRpdHlMaW5rSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGVudGl0eUlkLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyksXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBuICs9IGVudGl0eUlkLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVybFJlID0gL1tBLXpdKzpcXC9cXC9bXlxcc10rL2c7XG4gICAgZm9yIChsZXQgbWF0Y2ggPSB1cmxSZS5leGVjKHRleHQpOyBtYXRjaDsgbWF0Y2ggPSB1cmxSZS5leGVjKHRleHQpKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IG1hdGNoWzBdO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImZvdW5kIG1hdGNoIFwiICsgdXJsKTtcblxuICAgICAgICBsaW5rc1RvU3BsaWNlLnB1c2goe1xuICAgICAgICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4LFxuICAgICAgICAgICAgZW5kOiBtYXRjaC5pbmRleCArIHVybC5sZW5ndGgsXG4gICAgICAgICAgICBsaW5rOiAoXG4gICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e3VybH0+e3VybH08L2E+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGlua3NUb1NwbGljZS5zb3J0KChhLGIpID0+IGEuc3RhcnQgLSBiLnN0YXJ0KTtcblxuICAgIHJlbW92ZU92ZXJsYXBwaW5nOiBmb3IgKGxldCBuID0gMDsgbiA8IGxpbmtzVG9TcGxpY2UubGVuZ3RoOyApIHtcbiAgICAgICAgZm9yIChsZXQgbjIgPSBuICsgMTsgbjIgPCBsaW5rc1RvU3BsaWNlLmxlbmd0aDsgKytuMikge1xuICAgICAgICAgICAgY29uc3Qgc3BsaWNlQSA9IGxpbmtzVG9TcGxpY2Vbbl07XG4gICAgICAgICAgICBjb25zdCBzcGxpY2VCID0gbGlua3NUb1NwbGljZVtuMl07XG5cbiAgICAgICAgICAgIGlmIChzcGxpY2VBID09PSBzcGxpY2VCKSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gVGhlIHNwbGljZXMgb3ZlcmxhcCBpZiBuZWl0aGVyIGVuZHMgYmVmb3JlIHRoZSBvdGhlciBzdGFydHNcbiAgICAgICAgICAgIGlmIChzcGxpY2VBLmVuZCA+PSBzcGxpY2VCLnN0YXJ0ICYmIHNwbGljZUIuZW5kID49IHNwbGljZUEuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlJlbW92aW5nIG92ZXJsYXBwaW5nXCIpO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBzaG9ydGVyIGxpbmsgb2YgYm90aFxuICAgICAgICAgICAgICAgIGlmKHNwbGljZUEuZW5kIC0gc3BsaWNlQS5zdGFydCA8IHNwbGljZUIuZW5kIC0gc3BsaWNlQi5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICBsaW5rc1RvU3BsaWNlLnNwbGljZShuLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmtzVG9TcGxpY2Uuc3BsaWNlKG4yLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWUgcmVtb3ZlT3ZlcmxhcHBpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgKytuO1xuICAgIH1cblxuICAgIGlmIChsaW5rc1RvU3BsaWNlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDw+e3RleHR9PC8+O1xuXG4gICAgY29uc3QgcmVzOiBSZWFjdEVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBuID0gMDtcblxuICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rc1RvU3BsaWNlKSB7XG4gICAgICAgIHJlcy5wdXNoKFxuICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAge3RleHQuc3Vic3RyaW5nKG4sIGxpbmsuc3RhcnQpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICApO1xuICAgICAgICByZXMucHVzaChsaW5rLmxpbmspO1xuICAgICAgICBuID0gbGluay5lbmQ7XG4gICAgfVxuICAgIHJlcy5wdXNoKFxuICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57dGV4dC5zbGljZShuKX08L3NwYW4+XG4gICAgKTtcblxuICAgIHJldHVybiA8PntyZXN9PC8+O1xufVxuXG5cbi8qKlxuICogUmVuZGVycyBhIGdpdmVuIFJlaWZpZWRcbiAqIEBwYXJhbSBlbnRpdHkgdGhlIGVudGl0eSB0aGUgUmVpZmllZCBleGlzdHMgaW5cbiAqIEBwYXJhbSByZWlmaWVkIHRoZSBSZWlmaWVkXG4gKiBAcGFyYW0gc2hvd0JhZGdlcyBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMgZnVuY3Rpb25zIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBjbGlja2FibGUgaXRlbXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIGVudGl0aWVzIG5hbWVcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gb250b2xvZ3kgYmFkZ2VcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGEgZGlzYW1iaWd1YXRpb24gYmFkZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlaWZpZWRKU1goZW50aXR5OiBUaGluZywgcmVpZmllZDogUmVpZmllZDxhbnk+LCBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUywgLypUT0RPOiBjaGFuZ2UgdG8gdXNpbmcgKGVudGl0eSA6IEVudGl0eURhdGEpIGxhdGVyKi8gb25OYXZpZ2F0ZXM6IE9uTmF2aWdhdGVzKTogUmVhY3RFbGVtZW50IHtcbiAgICBmdW5jdGlvbiBnZXRWYWx1ZUpTWCh2YWx1ZTogUmVpZmllZDxhbnk+KTogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgbGlua2VkRW50aXRpZXMgPSBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKTtcblxuICAgICAgICAvLyBsaW5rZWRFbnRpdGllcyBub3QgZXhpc3RlbnQgb24gZW50aXR5ICgtPiBwcm9iYWJseSBsZWdhY3kgYXBpIHZlcnNpb24pXG4gICAgICAgIGlmKE9iamVjdC5rZXlzKGxpbmtlZEVudGl0aWVzLmxpbmtlZEVudGl0aWVzKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLnZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkTGlua3NUb1RleHQoZW50aXR5LCB2YWx1ZS52YWx1ZS50b1N0cmluZygpLCB1bmRlZmluZWQsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCBub3QgaGFwcGVuLCBwcm92ZSB0aGF0IHRoaXMgaXMgbmV2ZXIgdGhlIGNhc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gPD57SlNPTi5zdHJpbmdpZnkodmFsdWUudmFsdWUpfTwvPjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtlZEVudGl0eSA9IGxpbmtlZEVudGl0aWVzLmdldCh2YWx1ZS52YWx1ZSk7XG5cbiAgICAgICAgICAgIGlmIChsaW5rZWRFbnRpdHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RW50aXR5TGlua0pTWChlbnRpdHksIGxpbmtlZEVudGl0aWVzLCB2YWx1ZS52YWx1ZSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZihlbnRpdHkuZ2V0VHlwZSgpID09IFwib250b2xvZ3lcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDw+e0pTT04uc3RyaW5naWZ5KHZhbHVlLnZhbHVlKX08Lz47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKGVudGl0eSwgbGlua2VkRW50aXRpZXMsIHZhbHVlLnZhbHVlLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRMaW5rc1RvVGV4dChlbnRpdHksIHZhbHVlLnZhbHVlLnRvU3RyaW5nKCksIGxpbmtlZEVudGl0aWVzLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtnZXRWYWx1ZUpTWChyZWlmaWVkKX1cbiAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAge3JlaWZpZWQuaGFzTWV0YWRhdGEoKSAmJiBnZXRBeGlvbXNJbmZvcm1hdGlvbkpTWChlbnRpdHksIHJlaWZpZWQuZ2V0TWV0YWRhdGEoKSl9XG4gICAgICAgIDwvPlxuICAgICk7XG59IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQnV0dG9uLCBFdWlQcm92aWRlcn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtKc29uQXBpV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcblxuZnVuY3Rpb24gSnNvbkFwaVdpZGdldChwcm9wczogSnNvbkFwaVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgYXBpUXVlcnksIGJ1dHRvblRleHQsIGJ1dHRvblNpemUgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPEV1aUJ1dHRvbiBocmVmPXthcGlRdWVyeX0gdGFyZ2V0PVwiX2JsYW5rXCIgc2l6ZT17YnV0dG9uU2l6ZSB8fCBcIm1cIn0+e2J1dHRvblRleHR9PC9FdWlCdXR0b24+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUpzb25BcGkocHJvcHM6IEpzb25BcGlXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkSnNvbkFwaVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkSnNvbkFwaVdpZGdldChwcm9wczogSnNvbkFwaVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPEpzb25BcGlXaWRnZXRcbiAgICAgICAgICAgICAgYXBpUXVlcnk9e3Byb3BzLmFwaVF1ZXJ5fVxuICAgICAgICAgICAgICBidXR0b25UZXh0PXtwcm9wcy5idXR0b25UZXh0fVxuICAgICAgICAgICAgICBidXR0b25TaXplPXtwcm9wcy5idXR0b25TaXplfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgSnNvbkFwaVdpZGdldCwgY3JlYXRlSnNvbkFwaSB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQmFkZ2UsIEV1aUljb24sIEV1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlcn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtPbHNBcGl9IGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7QnJlYWRjcnVtYldpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge2lzRW50aXR5fSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9CcmVhZGNydW1iUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vLi4vc3R5bGUvc2VtbG9va3Atc3R5bGVzLmNzc1wiO1xuXG5mdW5jdGlvbiBCcmVhZGNydW1iV2lkZ2V0KHByb3BzOiBCcmVhZGNydW1iV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGksIG9udG9sb2d5SWQsIGlyaSwgZW50aXR5VHlwZSwgY29sb3JGaXJzdCwgY29sb3JTZWNvbmQsIHBhcmFtZXRlciAsIHVzZUxlZ2FjeSwgb25OYXZpZ2F0ZVRvT250b2xvZ3l9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcImJyZWFkY3J1bWJcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJlxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kgJiYgcHJvcHMub250b2xvZ3lJZCkgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kocHJvcHMub250b2xvZ3lJZCB8fCBcIlwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCl9fT5cbiAgICAgICAgICAgICAgICA8RXVpQmFkZ2UgY2xhc3NOYW1lPXtwcm9wcy5vbnRvbG9neUlkID8gXCJicmVhZGNydW1iIGNsaWNrYWJsZS1icmVhZGNydW1iXCIgOiBcImJyZWFkY3J1bWJcIn0gY29sb3I9e2NvbG9yRmlyc3QgfHwgKChwcm9wcy5vbnRvbG9neUlkKSA/IFwicHJpbWFyeVwiIDogXCJ3YXJuaW5nXCIpfT57cHJvcHMub250b2xvZ3lJZD8udG9VcHBlckNhc2UoKSB8fCA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17XCJzXCJ9Lz59PC9FdWlCYWRnZT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICZuYnNwOzxFdWlJY29uIHR5cGU9XCJhcnJvd1JpZ2h0XCIvPiZuYnNwO1xuICAgICAgICAgICAgPEV1aUJhZGdlIGNsYXNzTmFtZT1cImJyZWFkY3J1bWJcIiBjb2xvcj17Y29sb3JTZWNvbmQgfHwgXCJ3YXJuaW5nXCJ9Pns8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17XCJzXCJ9Lz59PC9FdWlCYWRnZT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICB9XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiYgaXNFbnRpdHkoZGF0YSkgJiZcbiAgICAgICAgPEJyZWFkY3J1bWJQcmVzZW50YXRpb25cbiAgICAgICAgICBvbnRvbG9neU5hbWU9e2RhdGEuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICAgIHNob3J0Rm9ybT17ZGF0YS5nZXRTaG9ydEZvcm0oKX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtvbnRvbG9neUlkIHx8IGRhdGEuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICAgIGNvbG9yRmlyc3Q9e2NvbG9yRmlyc3R9XG4gICAgICAgICAgY29sb3JTZWNvbmQ9e2NvbG9yU2Vjb25kfVxuICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtvbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICAgIHtpc0Vycm9yICYmXG4gICAgICAgICAgPEJyZWFkY3J1bWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgb250b2xvZ3lOYW1lPXtwcm9wcy5vbnRvbG9neUlkPy50b1VwcGVyQ2FzZSgpIHx8IChkYXRhICYmIGRhdGEuZ2V0T250b2xvZ3lJZCgpLnRvVXBwZXJDYXNlKCkpIHx8IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJvbnRvbG9neVwiKX1cbiAgICAgICAgICAgICAgc2hvcnRGb3JtPXsoZGF0YSAmJiBkYXRhLmdldFNob3J0Rm9ybSgpKSA/IGRhdGEuZ2V0U2hvcnRGb3JtKCkudG9VcHBlckNhc2UoKSA6IFwiXCJ9XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e29udG9sb2d5SWQgfHwgKGRhdGEgPyBkYXRhLmdldE9udG9sb2d5SWQoKSA6IFwiXCIpfVxuICAgICAgICAgICAgICBjb2xvckZpcnN0PXtjb2xvckZpcnN0IHx8ICgocHJvcHMub250b2xvZ3lJZCB8fCAoZGF0YSAmJiBkYXRhLmdldE9udG9sb2d5SWQoKSkpID8gXCJwcmltYXJ5XCIgOiBcImRhbmdlclwiKX1cbiAgICAgICAgICAgICAgY29sb3JTZWNvbmQ9e2NvbG9yU2Vjb25kIHx8ICgoZGF0YSAmJiBkYXRhLmdldFNob3J0Rm9ybSgpKSA/IFwic3VjY2Vzc1wiIDogXCJkYW5nZXJcIil9XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtvbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAvPlxuICAgICAgfVxuICAgICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJyZWFkY3J1bWIocHJvcHM6IEJyZWFkY3J1bWJXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86KCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRCcmVhZGNydW1iV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRCcmVhZGNydW1iV2lkZ2V0KHByb3BzOiBCcmVhZGNydW1iV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8QnJlYWRjcnVtYldpZGdldFxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGNvbG9yRmlyc3Q9e3Byb3BzLmNvbG9yRmlyc3R9XG4gICAgICAgICAgICAgIGNvbG9yU2Vjb25kPXtwcm9wcy5jb2xvclNlY29uZH1cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBCcmVhZGNydW1iV2lkZ2V0LCBjcmVhdGVCcmVhZGNydW1iIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RGVzY3JpcHRpb25XaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgRGVzY3JpcHRpb25QcmVzZW50YXRpb24gfSBmcm9tIFwiLi9EZXNjcmlwdGlvblByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgTk9fREVTQ1JJUFRJT04gPSBcIk5vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZS5cIjtcblxuZnVuY3Rpb24gRGVzY3JpcHRpb25XaWRnZXQocHJvcHM6IERlc2NyaXB0aW9uV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGksIG9udG9sb2d5SWQsIGlyaSwgZGVzY1RleHQsIHRoaW5nVHlwZSwgcGFyYW1ldGVyLCB1c2VMZWdhY3ksIC4uLnJlc3QgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxUaGluZz4oXG4gICAgW1wiZGVzY3JpcHRpb25cIiwgYXBpLCBwYXJhbWV0ZXIsIHRoaW5nVHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0VGhpbmdPYmplY3QoaXJpLCB0aGluZ1R5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPn1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJlxuICAgICAgICA8RGVzY3JpcHRpb25QcmVzZW50YXRpb24gZGVzY3JpcHRpb249e2RhdGEuZ2V0RGVzY3JpcHRpb24oKSB8fCBOT19ERVNDUklQVElPTn0gZGVzY1RleHQ9e2Rlc2NUZXh0fSB7Li4ucmVzdH0vPlxuICAgICAgfVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJkZXNjcmlwdGlvblwiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEZXNjcmlwdGlvbihwcm9wczogRGVzY3JpcHRpb25XaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86KCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWREZXNjcmlwdGlvbldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRGVzY3JpcHRpb25XaWRnZXQocHJvcHM6IERlc2NyaXB0aW9uV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8RGVzY3JpcHRpb25XaWRnZXRcbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICBkZXNjVGV4dD17cHJvcHMuZGVzY1RleHR9XG4gICAgICAgICAgICAgIHRoaW5nVHlwZT17cHJvcHMudGhpbmdUeXBlfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgY29sb3I9e3Byb3BzLmNvbG9yfVxuICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IERlc2NyaXB0aW9uV2lkZ2V0LCBjcmVhdGVEZXNjcmlwdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0Rlc2NyaXB0aW9uUHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gRGVzY3JpcHRpb25QcmVzZW50YXRpb24ocHJvcHM6IERlc2NyaXB0aW9uUHJlc2VudGF0aW9uUHJvcHMpIHtcbiAgY29uc3Qge2Rlc2NUZXh0LCBkZXNjcmlwdGlvbiwgLi4ucmVzdH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+e2Rlc2NUZXh0IHx8IGRlc2NyaXB0aW9ufTwvRXVpVGV4dD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRGVzY3JpcHRpb25QcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUZsZXhJdGVtLCBFdWlMaW5rLCBFdWlQcm92aWRlciwgRXVpQnV0dG9uSWNvbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtJcmlXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgaXNFdWlCdXR0b25Db2xvciwgaXNFdWlMaW5rQ29sb3IsIGlzSGV4Q29sb3IsIGlzUmdiQ29sb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcblxuZnVuY3Rpb24gSXJpV2lkZ2V0KHByb3BzOiBJcmlXaWRnZXRQcm9wcykgeyAgICAgICBcbiAgY29uc3QgeyBpcmksIGlyaVRleHQsIGNvbG9yLCBleHRlcm5hbEljb24sIHVybFByZWZpeCwgY29weUJ1dHRvbiB9ID0gcHJvcHM7XG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHVybFByZWZpeEV4aXN0ID0gdHlwZW9mKHVybFByZWZpeCkgIT09IFwidW5kZWZpbmVkXCIgJiYgdXJsUHJlZml4ICE9PSBcIlwiID8gdHJ1ZSA6IGZhbHNlO1xuICBjb25zdCBpcmlVcmwgPSB1cmxQcmVmaXhFeGlzdCA/IHVybFByZWZpeCArIGVuY29kZVVSSUNvbXBvbmVudChpcmkpIDogaXJpO1xuXG4gIGNvbnN0IENvcHlMaW5rQnV0dG9uID0gKCkgPT4ge1xuICAgIGlmICghY29waWVkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RXVpQnV0dG9uSWNvbiBcbiAgICAgICAgICBkaXNwbGF5PVwiYmFzZVwiXG4gICAgICAgICAgaWNvblR5cGU9XCJjb3B5XCIgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgIGtleT17XCJjb3B5LWJ0blwifVxuICAgICAgICAgIHN0eWxlPXt7bWFyZ2luTGVmdDogXCI1cHhcIiwgbWFyZ2luUmlnaHQ6IFwiNXB4XCIsIGNvbG9yOiBjb2xvciAmJiAoaXNIZXhDb2xvcihjb2xvcikgfHwgaXNSZ2JDb2xvcihjb2xvcikpID8gY29sb3IgOiBcIlwifX0gXG4gICAgICAgICAgY29sb3I9e2NvbG9yICYmIGlzRXVpQnV0dG9uQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4geyAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaXJpVXJsKTtcbiAgICAgICAgICAgIHNldENvcGllZCh0cnVlKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge3NldENvcGllZChmYWxzZSk7fSwgMjAwMCk7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgIH19XG4gICAgICAgICAgPiAgICAgICAgICAgIFxuICAgICAgICA8L0V1aUJ1dHRvbkljb24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPEV1aUJ1dHRvbkljb24gXG4gICAgICAgIHN0eWxlPXt7bWFyZ2luTGVmdDogXCI1cHhcIiwgY29sb3I6IGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCJ9fSAgIFxuICAgICAgICBkaXNwbGF5PVwiYmFzZVwiIFxuICAgICAgICBpY29uVHlwZT1cImNoZWNrXCIgXG4gICAgICAgIGtleT17XCJjb3B5LWJ0blwifVxuICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgID5cbiAgICAgIDwvRXVpQnV0dG9uSWNvbj5cbiAgICApOyAgICBcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICA8ZGl2PlxuICAgICAgICB7Y29weUJ1dHRvbiA9PT0gJ2xlZnQnICYmIDxDb3B5TGlua0J1dHRvbiAvPn1cbiAgICAgICAgPEV1aUxpbmsgXG4gICAgICAgICAgaHJlZj17aXJpVXJsfSBcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiBcbiAgICAgICAgICBzdHlsZT17e2NvbG9yOiBjb2xvciAmJiAoaXNIZXhDb2xvcihjb2xvcikgfHwgaXNSZ2JDb2xvcihjb2xvcikpID8gY29sb3IgOiBcIlwifX0gXG4gICAgICAgICAgY29sb3I9e2NvbG9yICYmIGlzRXVpTGlua0NvbG9yKGNvbG9yKSA/IGNvbG9yIDogdW5kZWZpbmVkfVxuICAgICAgICAgIGV4dGVybmFsPXtleHRlcm5hbEljb259XG4gICAgICAgICAgPlxuICAgICAgICAgIHtpcmlUZXh0ID8gaXJpVGV4dCA6IGlyaX0gICAgICAgICAgXG4gICAgICAgIDwvRXVpTGluaz5cbiAgICAgICAge2NvcHlCdXR0b24gPT09ICdyaWdodCcgJiYgPENvcHlMaW5rQnV0dG9uIC8+fVxuICAgICAgPC9kaXY+XG4gICAgPC9FdWlGbGV4SXRlbT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSXJpKHByb3BzOiBJcmlXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7ICAgICAgIFxuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkSXJpV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRJcmlXaWRnZXQocHJvcHM6IElyaVdpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTsgICAgXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8SXJpV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBpcmlUZXh0PXtwcm9wcy5pcmlUZXh0fVxuICAgICAgICAgICAgICAgICAgICBjb2xvcj17cHJvcHMuY29sb3J9XG4gICAgICAgICAgICAgICAgICAgIGV4dGVybmFsSWNvbj17cHJvcHMuZXh0ZXJuYWxJY29ufVxuICAgICAgICAgICAgICAgICAgICB1cmxQcmVmaXg9e3Byb3BzLnVybFByZWZpeH1cbiAgICAgICAgICAgICAgICAgICAgY29weUJ1dHRvbj17cHJvcHMuY29weUJ1dHRvbn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgSXJpV2lkZ2V0LCBjcmVhdGVJcmkgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtPbHNBcGl9IGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1RhYldpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RW50aXR5VHlwZU5hbWUsIGlzRW50aXR5fSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIFRhYldpZGdldChwcm9wczogVGFiV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBpcmksIGFwaSwgb250b2xvZ3lJZCwgZW50aXR5VHlwZSwgcGFyYW1ldGVyLCB1c2VMZWdhY3ksIGhpZXJhcmNoeVRhYiwgY3Jvc3NSZWZUYWIsIHRlcm1pbm9sb2d5SW5mb1RhYiwgYWx0TmFtZXNUYWIsIC4uLnJlc3QgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxFbnRpdHk+KFxuICAgIFtcInRhYmRhdGFcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyKGRhdGE6IEVudGl0eSkge1xuICAgIHJldHVybiAoXG4gICAgICA8VGFiUHJlc2VudGF0aW9uIHsuLi5yZXN0fVxuICAgICAgICBkYXRhPXtkYXRhfVxuICAgICAgICBpcmk9e2lyaX1cbiAgICAgICAgYXBpPXthcGl9XG4gICAgICAgIHVzZUxlZ2FjeT17dXNlTGVnYWN5fVxuICAgICAgICBlbnRpdHlUeXBlPXtkYXRhLmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZX1cbiAgICAgICAgb250b2xvZ3lJZD17b250b2xvZ3lJZCA/IG9udG9sb2d5SWQgOiBkYXRhLmdldE9udG9sb2d5SWQoKX1cbiAgICAgICAgaGllcmFyY2h5VGFiPXtoaWVyYXJjaHlUYWJ9XG4gICAgICAgIGNyb3NzUmVmVGFiPXtjcm9zc1JlZlRhYn1cbiAgICAgICAgdGVybWlub2xvZ3lJbmZvVGFiPXt0ZXJtaW5vbG9neUluZm9UYWJ9XG4gICAgICAgIGFsdE5hbWVzVGFiPXthbHROYW1lc1RhYn1cbiAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgIGhpZXJhcmNoeVByZWZlcnJlZFJvb3RzPXtwcm9wcy5oaWVyYXJjaHlQcmVmZXJyZWRSb290c31cbiAgICAgICAgaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMuaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgaGllcmFyY2h5U2hvd1NpYmxpbmdzT25Jbml0PXtwcm9wcy5oaWVyYXJjaHlTaG93U2libGluZ3NPbkluaXR9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiZGVzY3JpcHRpb25cIil9PC9FdWlUZXh0Pn1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJlxuICAgICAgICA8PlxuICAgICAgICAgIHtpc0VudGl0eShkYXRhKSA/IHJlbmRlcihkYXRhKSA6IG51bGx9XG4gICAgICAgIDwvPlxuICAgICAgfVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUYWIocHJvcHM6IFRhYldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRUYWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFRhYldpZGdldChwcm9wczogVGFiV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8VGFiV2lkZ2V0XG4gICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICBhbHROYW1lc1RhYj17cHJvcHMuYWx0TmFtZXNUYWJ9XG4gICAgICAgICAgICAgIGhpZXJhcmNoeVRhYj17cHJvcHMuaGllcmFyY2h5VGFifVxuICAgICAgICAgICAgICBjcm9zc1JlZlRhYj17cHJvcHMuY3Jvc3NSZWZUYWJ9XG4gICAgICAgICAgICAgIHRlcm1pbm9sb2d5SW5mb1RhYj17cHJvcHMudGVybWlub2xvZ3lJbmZvVGFifVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e3Byb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX1cbiAgICAgICAgICAgICAgaGllcmFyY2h5UHJlZmVycmVkUm9vdHM9e3Byb3BzLmhpZXJhcmNoeVByZWZlcnJlZFJvb3RzfVxuICAgICAgICAgICAgICBoaWVyYXJjaHlLZWVwRXhwYW5zaW9uU3RhdGVzPXtwcm9wcy5oaWVyYXJjaHlLZWVwRXhwYW5zaW9uU3RhdGVzfVxuICAgICAgICAgICAgICBoaWVyYXJjaHlTaG93U2libGluZ3NPbkluaXQ9e3Byb3BzLmhpZXJhcmNoeVNob3dTaWJsaW5nc09uSW5pdH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IFRhYldpZGdldCwgY3JlYXRlVGFiIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGFiYmVkQ29udGVudCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBpc0VudGl0eSwgaXNJbmRpdmlkdWFsLCBpc1Byb3BlcnR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0Nyb3NzUmVmV2lkZ2V0L0Nyb3NzUmVmVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IHtUYWJQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgT250b2xvZ3lJbmZvV2lkZ2V0IH0gZnJvbSBcIi4uLy4uL09udG9sb2d5SW5mb1dpZGdldFwiO1xuaW1wb3J0IHtIaWVyYXJjaHlXaWRnZXR9IGZyb20gXCIuL0hpZXJhcmNoeVdpZGdldFNlbUxvb2tQXCI7XG5cbmZ1bmN0aW9uIFRhYlByZXNlbnRhdGlvbihwcm9wczogVGFiUHJlc2VudGF0aW9uUHJvcHMpIHtcbiAgZnVuY3Rpb24gcmVuZGVyKGRhdGE6IEVudGl0eSkge1xuICAgIGNvbnN0IHRhYnMgPSBbXTtcbiAgICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIHNob3cgdGhlIHRhYnMuIFRoZXJlZm9yZSwgdW5kZWZpbmVkIGdldHMgdHJlYXRlZCBhcyB0cnV0aHkuXG4gICAgICovXG4gICAgaWYocHJvcHMuYWx0TmFtZXNUYWIgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5hbHROYW1lc1RhYil7XG4gICAgICB0YWJzLnB1c2goXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgICAgICA8QWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIHN5bm9ueW1zPXtkYXRhLmdldFN5bm9ueW1zKCkubWFwKHN5bm9ueW0gPT4gc3lub255bS52YWx1ZSl9IC8+XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGlkOiBcInRhYjFcIixcbiAgICAgICAgICAgICAgbmFtZTogXCJBbHRlcm5hdGl2ZSBOYW1lc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmhpZXJhcmNoeVRhYiA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmhpZXJhcmNoeVRhYil7XG4gICAgICB0YWJzLnB1c2goXG4gICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHsvKiBUT0RPOiBJcyBvdmVyZmxvdzogXCJhdXRvXCIgd2FudGVkPyAqL31cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBvdmVyZmxvdzogXCJhdXRvXCJ9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8SGllcmFyY2h5V2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBiYWNrZW5kX3R5cGUgYW5kIGFwaUtleSBtaXNzaW5nIGhlcmUuIElmIFRhYldpZGdldC8gTWV0YWRhdGFXaWRnZXQgc2hhbGwgYmUgdXNlZCBmb3Igb3RoZXIgYmFja2VuZCB0eXBlcyBsYXRlciwgdGhpcyBoYXMgdG8gYmUgcHJvdmlkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaVVybD17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkIHx8ICgoZGF0YSAmJiBkYXRhLmdldE9udG9sb2d5SWQoKSAhPT0gdW5kZWZpbmVkKSA/IGRhdGEuZ2V0T250b2xvZ3lJZCgpIDogXCJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZFJvb3RzPXtwcm9wcy5oaWVyYXJjaHlQcmVmZXJyZWRSb290c31cbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dTaWJsaW5nc09uSW5pdD17cHJvcHMuaGllcmFyY2h5U2hvd1NpYmxpbmdzT25Jbml0fVxuICAgICAgICAgICAgICAgICAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMuaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgaWQ6IFwidGFiMlwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiSGllcmFyY2h5XCJcbiAgICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmKHByb3BzLmNyb3NzUmVmVGFiID09PSB1bmRlZmluZWQgfHwgcHJvcHMuY3Jvc3NSZWZUYWIgKXtcbiAgICAgIHRhYnMucHVzaChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6XG4gICAgICAgICAgICAgICAgPENyb3NzUmVmVGFiUHJlc2VudGF0aW9uIGNyb3NzcmVmcz17UmVpZmllZC5mcm9tSnNvbihkYXRhLmdldENyb3NzUmVmZXJlbmNlcygpKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgfSl9IC8+LFxuICAgICAgICAgICAgICBpZDogXCJ0YWIzXCIsXG4gICAgICAgICAgICAgIG5hbWU6IFwiQ3Jvc3MgcmVmZXJlbmNlc1wiXG4gICAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZihwcm9wcy50ZXJtaW5vbG9neUluZm9UYWIgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy50ZXJtaW5vbG9neUluZm9UYWIpe1xuICAgICAgdGFicy5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgICBjb250ZW50OlxuICAgICAgICAgICAgICA8T250b2xvZ3lJbmZvV2lkZ2V0XG4gICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZCB8fCBkYXRhLmdldE9udG9sb2d5SWQoKX1cbiAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e1wiXCJ9XG4gICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgc2hvd0JhZGdlcz17ZmFsc2V9XG4gICAgICAgICAgICAgICAgaGFzVGl0bGU9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIHdpZHRoPXs2MDB9XG4gICAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgICBpZDogXCJ0YWI0XCIsXG4gICAgICAgICAgICAgIG5hbWU6IGBBYm91dCAke3Byb3BzLm9udG9sb2d5SWQ/LnRvVXBwZXJDYXNlKCl9YFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuXG4gICAgaWYodGFicy5sZW5ndGggPT09IDApe1xuICAgICAgLyoqXG4gICAgICAgKiBFdWlUYWJiZWRDb250ZW50IGNvbXBvbmVudCByYWlzZXMgZXhjZXB0aW9uIGlmIG5vIHRhYiBpcyBwcm92aWRlZC5cbiAgICAgICAqL1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgICAgPEV1aVRhYmJlZENvbnRlbnQgc2l6ZT1cInNcIiB0YWJzPXt0YWJzfSAvPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0VudGl0eShwcm9wcy5kYXRhKSB8fCBpc1Byb3BlcnR5KHByb3BzLmRhdGEpIHx8IGlzSW5kaXZpZHVhbChwcm9wcy5kYXRhKSA/IHJlbmRlcihwcm9wcy5kYXRhKSA6IG51bGx9XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IFRhYlByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0sIEV1aVBhbmVsLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24ocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByZXNlbnRhdGlvblByb3BzKSB7XG5cbiAgZnVuY3Rpb24gcmVuZGVyQWx0TGFiZWwoKSB7XG4gICAgaWYgKHByb3BzLnN5bm9ueW1zICYmIHByb3BzLnN5bm9ueW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBwcm9wcy5zeW5vbnltcy5tYXAoKHZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgPEV1aUZsZXhJdGVtIGtleT17dmFsdWUgKyBpbmRleH0+e3ZhbHVlfTwvRXVpRmxleEl0ZW0+XG4gICAgICApKTtcbiAgICB9XG4gICAgcmV0dXJuIDxFdWlUZXh0Pk5vIGFsdGVybmF0aXZlIG5hbWVzIGV4aXN0LjwvRXVpVGV4dD47XG4gIH1cblxuICAvLyBVc2luZyByZWlmaWNhdGlvbi9wYXNzaW5nIHRoZSBFbnRpdHkgY2xhc3MgY291bGQgcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uXG4gIC8vIGZ1bmN0aW9uIHJlbmRlckFsdExhYmVsKGVudGl0eTogRW50aXR5KSB7XG4gIC8vICAgaWYgKGVudGl0eS5nZXRTeW5vbnltcygpLmxlbmd0aCA+IDApIHtcbiAgLy8gICAgIHJldHVybiBlbnRpdHkuZ2V0U3lub255bXMoKS5tYXAoKHJmOiBSZWlmaWVkPGFueT4sIGluZGV4OiBudW1iZXIpID0+IChcbiAgLy8gICAgICAgPHAga2V5PXtyZi52YWx1ZSArIGluZGV4fT57Z2V0UmVpZmllZEpTWChlbnRpdHksIHJmLCBhcGkpfTwvcD5cbiAgLy8gICAgICkpO1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gPEV1aVRleHQ+Tm8gYWx0ZXJuYXRpdmUgbmFtZXMgZXhpc3QuPC9FdWlUZXh0PjtcbiAgLy8gfVxuXG4gIHJldHVybiAoXG4gICAgPEV1aVBhbmVsPlxuICAgICAgPEV1aUZsZXhHcm91cCBzdHlsZT17eyBwYWRkaW5nOiAxMCB9fSBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAge3JlbmRlckFsdExhYmVsKCl9XG4gICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICA8L0V1aVBhbmVsPlxuICApO1xufVxuXG5leHBvcnQgeyBBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtLCBFdWlQYW5lbCwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7Q3Jvc3NSZWZQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbihwcm9wczogQ3Jvc3NSZWZQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gIGZ1bmN0aW9uIHJlbmRlckNyb3NzUmVmcyhjcm9zc3JlZnM6IGFueSkge1xuICAgIGlmIChjcm9zc3JlZnMgJiYgY3Jvc3NyZWZzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBjcm9zc3JlZnM/Lm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiAoXG4gICAgICAgIDxFdWlGbGV4SXRlbSBrZXk9e2luZGV4fT5cbiAgICAgICAgICB7aXRlbX1cbiAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICkpO1xuICAgIH1cbiAgICByZXR1cm4gPEV1aVRleHQ+Tm8gY3Jvc3MgcmVmZXJlbmNlcyBleGlzdC48L0V1aVRleHQ+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpUGFuZWw+XG4gICAgICA8PlxuICAgICAgICA8RXVpRmxleEdyb3VwIHN0eWxlPXt7IHBhZGRpbmc6IDcgfX0gZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAge3JlbmRlckNyb3NzUmVmcyhwcm9wcy5jcm9zc3JlZnMpfVxuICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgIDwvPlxuICAgIDwvRXVpUGFuZWw+XG4gICk7XG59XG5cbmV4cG9ydCB7IENyb3NzUmVmVGFiUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7UmVhY3RFbGVtZW50fSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQ2FyZCwgRXVpRmxleEl0ZW0sIEV1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpU3BhY2VyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtPbnRvbG9neSwgVGhpbmd9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge2NhcGl0YWxpemUsIGRlQ2FtZWxDYXNlLCBkZVVuZGVyc2NvcmUsIHJhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge2dldEVudGl0eUxpbmtKU1gsIGdldFJlaWZpZWRKU1h9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9TdHJ1Y3R1cmVSZW5kZXJpbmdcIjtcbmltcG9ydCB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5fSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7T250b2xvZ3lJbmZvV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IERFRkFVTFRfSEFTX1RJVExFID0gdHJ1ZTtcblxuZnVuY3Rpb24gT250b2xvZ3lJbmZvV2lkZ2V0KHByb3BzOiBPbnRvbG9neUluZm9XaWRnZXRQcm9wcykge1xuICBjb25zdCB7IG9udG9sb2d5SWQsIGFwaSwgcGFyYW1ldGVyLCBoYXNUaXRsZSA9IERFRkFVTFRfSEFTX1RJVExFLCB1c2VMZWdhY3ksIHNob3dCYWRnZXMsIC4uLnJlc3QgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG4gIGNvbnN0IG9uTmF2aWdhdGVzID0ge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfTtcblxuICBjb25zdCB7XG4gICAgZGF0YTogb250b2xvZ3ksXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdPbnRvbG9neSxcbiAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc09udG9sb2d5LFxuICAgIGlzRXJyb3I6IGlzRXJyb3JPbnRvbG9neSxcbiAgICBlcnJvcjogZXJyb3JPbnRvbG9neSxcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgICAgW1xuICAgICAgICBcIm9udG9sb2d5SW5mb1wiLFxuICAgICAgICBwcm9wc1xuICAgICAgXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICk7XG5cbiAgZnVuY3Rpb24gZ2V0T250b2xvZ3lJcmlTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSk6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7KG9udG9sb2d5LmdldElyaSgpIHx8IG9udG9sb2d5LmdldE9udG9sb2d5UHVybCgpKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+T250b2xvZ3kgSVJJOjwvYj5cbiAgICAgICAgICAgICAgICA8cD48YSBpZD17XCJvbnRvbG9neUlyaVwifSBocmVmPXtvbnRvbG9neS5nZXRJcmkoKSB8fCBvbnRvbG9neS5nZXRPbnRvbG9neVB1cmwoKX0+XG4gICAgICAgICAgICAgICAgICB7b250b2xvZ3kuZ2V0SXJpKCkgfHwgb250b2xvZ3kuZ2V0T250b2xvZ3lQdXJsKCl9XG4gICAgICAgICAgICAgICAgPC9hPjwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRWZXJzaW9uSXJpU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXRWZXJzaW9uSXJpKCkgJiZcbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPlZlcnNpb24gSVJJOjwvYj5cbiAgICAgICAgICAgICAgICA8cD48YSBpZD17XCJ2ZXJzaW9uSXJpXCJ9IGhyZWY9e29udG9sb2d5LmdldFZlcnNpb25JcmkoKX0+XG4gICAgICAgICAgICAgICAgICB7b250b2xvZ3kuZ2V0VmVyc2lvbklyaSgpfVxuICAgICAgICAgICAgICAgIDwvYT48L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGFzdExvYWRTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldFNvdXJjZUZpbGVUaW1lc3RhbXAoKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+TGFzdCBsb2FkZWQ6PC9iPlxuICAgICAgICAgICAgICAgIDxwPntuZXcgRGF0ZShvbnRvbG9neS5nZXRTb3VyY2VGaWxlVGltZXN0YW1wKCkpLnRvU3RyaW5nKCl9PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE9udG9sb2d5SWRTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldE9udG9sb2d5SWQoKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+T250b2xvZ3kgSUQ6PC9iPlxuICAgICAgICAgICAgICAgIDxwPntvbnRvbG9neS5nZXRPbnRvbG9neUlkKCl9PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFZlcnNpb25TZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldFZlcnNpb24oKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+VmVyc2lvbjo8L2I+XG4gICAgICAgICAgICAgICAgPHA+e29udG9sb2d5LmdldFZlcnNpb24oKX08L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TnVtQ2xhc3Nlc1NlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0TnVtQ2xhc3NlcygpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5OdW1iZXIgb2YgY2xhc3Nlczo8L2I+XG4gICAgICAgICAgICAgICAgPHA+e29udG9sb2d5LmdldE51bUNsYXNzZXMoKS50b0xvY2FsZVN0cmluZygpfTwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDcmVhdG9yc1NlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0Q3JlYXRvcnMoKS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPkNyZWF0b3JzOjwvYj5cbiAgICAgICAgICAgICAgICB7b250b2xvZ3kuZ2V0Q3JlYXRvcnMoKS5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgPD48dWw+e29udG9sb2d5LmdldENyZWF0b3JzKCkubWFwKChjcmVhdG9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e2NyZWF0b3IgKyByYW5kb21TdHJpbmcoKX0+e2dldEVudGl0eUxpbmtKU1gob250b2xvZ3ksIG9udG9sb2d5LmdldExpbmtlZEVudGl0aWVzKCksIGNyZWF0b3IsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX08L2xpPlxuICAgICAgICAgICAgICAgICAgICB9KX08L3VsPjxwPjwvcD48Lz4gOlxuICAgICAgICAgICAgICAgICAgICA8cD57Z2V0RW50aXR5TGlua0pTWChvbnRvbG9neSwgb250b2xvZ3kuZ2V0TGlua2VkRW50aXRpZXMoKSwgb250b2xvZ3kuZ2V0Q3JlYXRvcnMoKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PEV1aVNwYWNlci8+PC8+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvblNlY3Rpb24odGhpbmc6IFRoaW5nKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7dGhpbmcuZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKS5tYXAoKGFubm9LZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbm5vcyA9IHRoaW5nLmdldEFubm90YXRpb25CeUlkKGFubm9LZXkpO1xuICAgICAgICAgICAgICAgIGlmKGFubm9zLmxlbmd0aCA9PSAwKSByZXR1cm4gPD48Lz47XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfSBrZXk9e2Fubm9LZXl9PlxuICAgICAgICAgICAgICAgICAgPGI+e2NhcGl0YWxpemUoZGVVbmRlcnNjb3JlKGRlQ2FtZWxDYXNlKHRoaW5nLmdldEFubm90YXRpb25UaXRsZUJ5SWQoYW5ub0tleSkpKSl9OjwvYj5cbiAgICAgICAgICAgICAgICAgIHthbm5vcy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICA8dWw+e2Fubm9zLm1hcCgoYW5ub3RhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YW5ub3RhdGlvbi52YWx1ZX0+e2dldFJlaWZpZWRKU1godGhpbmcsIGFubm90YXRpb24sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX08L2xpPjtcbiAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPlxuICAgICAgICAgICAgICAgICAgICAgIDxwPjwvcD48Lz4gOlxuICAgICAgICAgICAgICAgICAgICA8cCBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0UmVpZmllZEpTWCh0aGluZywgYW5ub3NbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX08L3A+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxFdWlDYXJkXG4gICAgICAgICAgICB0aXRsZT17aGFzVGl0bGUgPyBcIk9udG9sb2d5IEluZm9ybWF0aW9uXCIgOiBcIlwifVxuICAgICAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICBzdHlsZT17cHJvcHMud2lkdGggPyB7d2lkdGg6IHByb3BzLndpZHRofSA6IHt9fVxuICAgICAgICA+XG5cbiAgICAgICAgICB7aXNMb2FkaW5nT250b2xvZ3kgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9eydzJ30vPn1cbiAgICAgICAgICB7aXNTdWNjZXNzT250b2xvZ3kgJiYgb250b2xvZ3kgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG5cbiAgICAgICAgICAgICAgICB7Z2V0T250b2xvZ3lJcmlTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICB7Z2V0VmVyc2lvbklyaVNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgIHtnZXRMYXN0TG9hZFNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgIHsvKiBUT0RPOiBEbyB3ZSB3YW50IHRoZSBmb2xsb3dpbmcgb24gdGhlIGluZm9ybWF0aW9uIHdpZGdldD9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEViaSBkb2VzIG5vdCBoYXZlIHRoZW0gdGhlcmUsIGJ1dCBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgZW50aXR5IHBhZ2UgKi9cbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRPbnRvbG9neUlkU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgIHtnZXRWZXJzaW9uU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgIHtnZXROdW1DbGFzc2VzU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgIHsvKntnZXRDcmVhdG9yc1NlY3Rpb24oZW50aXR5SW5mbyl9Ki8gLyogcmVkdW5kYW50IGFzIGl0J3MgbGlzdGVkIGluIGFubm90YXRpb25zIGFueXdheSAqL31cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHtnZXRBbm5vdGF0aW9uU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICB9XG4gICAgICAgICAge2lzRXJyb3JPbnRvbG9neSAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yT250b2xvZ3ksIFwiaW5mb3JtYXRpb25cIil9PC9FdWlUZXh0Pn1cbiAgICAgICAgPC9FdWlDYXJkPlxuICAgICAgPC8+XG4gICk7XG5cbn1cblxuZnVuY3Rpb24gY3JlYXRlT250b2xvZ3lJbmZvKHByb3BzOiBPbnRvbG9neUluZm9XaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkT250b2xvZ3lJbmZvV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRPbnRvbG9neUluZm9XaWRnZXQocHJvcHM6IE9udG9sb2d5SW5mb1dpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPE9udG9sb2d5SW5mb1dpZGdldFxuICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICBzaG93QmFkZ2VzPXtwcm9wcy5zaG93QmFkZ2VzfVxuICAgICAgICAgICAgICBoYXNUaXRsZT17cHJvcHMuaGFzVGl0bGV9XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT17cHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgT250b2xvZ3lJbmZvV2lkZ2V0LCBjcmVhdGVPbnRvbG9neUluZm8gfTtcbiIsICJpbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlUmVkdWNlcn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlUZXh0LCBFdWlJY29uLCBFdWlQcm92aWRlciwgRXVpQ2FyZH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtPbHNBcGl9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge0hpZXJhcmNoeSwgVHJlZU5vZGV9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzL0hpZXJhcmNoeVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7U2tvc0FwaX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwaS9Ta29zQXBpXCI7XG5pbXBvcnQge0hpZXJhcmNoeUJ1aWxkZXJ9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHtPbnRvUG9ydGFsQXBpfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL09udG9Qb3J0YWxBcGlcIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uLy4uL3N0eWxlL3NlbWxvb2twLXN0eWxlcy5jc3NcIjtcbmltcG9ydCB7cmFuZG9tU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7SGllcmFyY2h5V2lkZ2V0UHJvcHMsIEVudGl0eURhdGF9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7aXNJbmRpdmlkdWFsVHlwZU5hbWV9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY29uc3QgSElFUkFSQ0hZX1dJREdFVF9ERUZBVUxUX1ZBTFVFUyA9IHtcbiAgICBJTkNMVURFX09CU09MRVRFX0VOVElUSUVTOiBmYWxzZSxcbiAgICBQUkVGRVJSRURfUk9PVFM6IGZhbHNlLFxuICAgIEtFRVBfRVhQQU5TSU9OX1NUQVRFUzogZmFsc2UsXG4gICAgU0hPV19TSUJMSU5HU19PTl9JTklUOiBmYWxzZSxcbiAgICBVU0VfTEVHQUNZOiBmYWxzZVxufSBhcyBjb25zdDtcblxuLy8gVE9ETzogdXNlIG9mIGVudGl0eVR5cGUgaGFzIHRvIGJlIHJldmlld2VkLiBDdXJyZW50bHkgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBlbnRpdHlUeXBlIG9mIHRoZSBoaWVyYXJjaHkgYW5kIHRoZSBzcGVjaWZpYyBlbnRpdHkgaW5zaWRlIGl0IGFsd2F5cyBtYXRjaCAobm90IG5lY2Vzc2FyaWx5IHRydWUgZm9yIGluZGl2aWR1YWwgaGllcmFyY2hpZXMsIGJ1dCB0aGVzZSBoYXZlIHRvIGJlIHJldmlld2VkIGFueXdheXMpXG5mdW5jdGlvbiBUcmVlTGluayhwcm9wczoge2VudGl0eURhdGE6IEVudGl0eURhdGEsIGNoaWxkUmVsYXRpb25Ub1BhcmVudD86IHN0cmluZywgb250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlPzogc3RyaW5nLCBvbk5hdmlnYXRlVG9FbnRpdHk/OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlPzogc3RyaW5nLCBlbnRpdHk/OiBFbnRpdHlEYXRhKSA9PiB2b2lkLCBvbk5hdmlnYXRlVG9PbnRvbG9neT86IChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IEVudGl0eURhdGEpID0+IHZvaWQsIGhpZ2hsaWdodDogYm9vbGVhbn0pIHtcbiAgICBsZXQgZGVmaW5lZEJ5OiBzdHJpbmdbXSA9IHByb3BzLmVudGl0eURhdGEuZGVmaW5lZEJ5IHx8IFtdO1xuICAgIGlmKGRlZmluZWRCeS5pbmNsdWRlcyhwcm9wcy5vbnRvbG9neUlkKSkgZGVmaW5lZEJ5ID0gW107XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtwcm9wcy5oaWdobGlnaHQgPyBcImhpZ2hsaWdodFwiIDogdW5kZWZpbmVkfT5cbiAgICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09IFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0JGT18wMDAwMDUwXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7bWFyZ2luSW5saW5lU3RhcnQ6IFwiMS41cHhcIiwgbWFyZ2luVG9wOiBcIjIuNXB4XCJ9fSBjbGFzc05hbWU9XCJzdXJyb3VuZENpcmNsZVwiPiZuYnNwO1AmbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtwcm9wcy5jaGlsZFJlbGF0aW9uVG9QYXJlbnQgPT0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwiICYmXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e21hcmdpbklubGluZVN0YXJ0OiBcIjEuNXB4XCIsIG1hcmdpblRvcDogXCIyLjVweFwifX0gY2xhc3NOYW1lPVwic3Vycm91bmRDaXJjbGVcIj5JPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtpZihwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHkpIHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eShwcm9wcy5vbnRvbG9neUlkLCBwcm9wcy5lbnRpdHlUeXBlIHx8IFwiXCIsIHByb3BzLmVudGl0eURhdGEpfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7cHJvcHMuZW50aXR5RGF0YS5sYWJlbCB8fCBwcm9wcy5lbnRpdHlEYXRhLmlyaX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAge2RlZmluZWRCeS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgIHtkZWZpbmVkQnkubWFwKChkZWZpbmluZ09udG9sb2d5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtwcm9wcy5lbnRpdHlEYXRhLmlyaX06JHtkZWZpbmluZ09udG9sb2d5fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtpZihwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSkgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3koZGVmaW5pbmdPbnRvbG9neSwgcHJvcHMuZW50aXR5VHlwZSB8fCBcIlwiLCBwcm9wcy5lbnRpdHlEYXRhKX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPntkZWZpbmluZ09udG9sb2d5LnRvVXBwZXJDYXNlKCl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gSGllcmFyY2h5V2lkZ2V0KHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgICAgYXBpVXJsLFxuICAgICAgICBiYWNrZW5kVHlwZSxcbiAgICAgICAgYXBpS2V5LFxuICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5LFxuXG4gICAgICAgIGlyaSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLklOQ0xVREVfT0JTT0xFVEVfRU5USVRJRVMsXG4gICAgICAgIHByZWZlcnJlZFJvb3RzID0gSElFUkFSQ0hZX1dJREdFVF9ERUZBVUxUX1ZBTFVFUy5QUkVGRVJSRURfUk9PVFMsXG4gICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXMgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLktFRVBfRVhQQU5TSU9OX1NUQVRFUyxcbiAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0ID0gSElFUkFSQ0hZX1dJREdFVF9ERUZBVUxUX1ZBTFVFUy5TSE9XX1NJQkxJTkdTX09OX0lOSVQsXG4gICAgICAgIHVzZUxlZ2FjeSA9IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMuVVNFX0xFR0FDWSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICAvLyB1c2VkIHRvIG1hbnVhbGx5IHJlcmVuZGVyIHRoZSBjb21wb25lbnQgb24gdXBkYXRlIG9mIGhpZXJhcmNoeSAoYXMgaGllcmFyY2h5IG9iamVjdCBpcyBuZXN0ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIHN0YXRlIHZhcmlhYmxlIGl0c2VsZilcbiAgICBjb25zdCBbLCBmb3JjZVVwZGF0ZV0gPSB1c2VSZWR1Y2VyKHggPT4geCArIDEgJSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgMCk7XG5cbiAgICBjb25zdCBhcGkgOiBIaWVyYXJjaHlCdWlsZGVyID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChiYWNrZW5kVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvbHNcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPbHNBcGkoYXBpVXJsKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2tvc21vc1wiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNrb3NBcGkoYXBpVXJsKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwib250b3BvcnRhbFwiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9udG9Qb3J0YWxBcGkoYXBpVXJsLCBhcGlLZXkgfHwgXCJcIik7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPbHNBcGkoYXBpVXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW2FwaVVybCwgYmFja2VuZFR5cGUsIGFwaUtleV1cbiAgICApO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhOiBoaWVyYXJjaHksXG4gICAgICAgIGlzU3VjY2VzczogaXNTdWNjZXNzSGllcmFyY2h5LFxuICAgIH0gPSB1c2VRdWVyeShcbiAgICAgIFtcImhpZXJhcmNoeVNlbUxvb2tQXCIsIGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcHJlZmVycmVkUm9vdHMsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLCBrZWVwRXhwYW5zaW9uU3RhdGVzLCBzaG93U2libGluZ3NPbkluaXQsIHVzZUxlZ2FjeV0sXG4gICAgICBhc3luYyBmdW5jdGlvbiBnZXROZXdIaWVyYXJjaHkoKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGFwaS5idWlsZEhpZXJhcmNoeVdpdGhJcmkoe1xuICAgICAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgICAgICAgICBpcmk6IGlyaSxcbiAgICAgICAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcbiAgICAgICAgICAgICAgcHJlZmVycmVkUm9vdHM6IHByZWZlcnJlZFJvb3RzLFxuICAgICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgICAgICAgIHNob3dTaWJsaW5nc09uSW5pdDogc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgICAgICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgdG9nZ2xlTm9kZSA9IHVzZUNhbGxiYWNrKChub2RlOiBUcmVlTm9kZSkgPT4ge1xuICAgICAgICBpZighKGhpZXJhcmNoeSBpbnN0YW5jZW9mIEhpZXJhcmNoeSkpIHRocm93IEVycm9yKFwiSGllcmFyY2h5IG9iamVjdCB3YXMgdW5kZWZpbmVkIHdoaWxlIHRyeWluZyB0byBleHBhbmQgYSB0cmVlIG5vZGUuIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5cIik7XG5cbiAgICAgICAgLy8gVE9ETzogaW5kaXZpZHVhbCBoaWVyYXJjaGllcyBhcmUgZnJvemVuIGZvciBub3cgKGJlZm9yZSB1bmRvaW5nLCBjb3JyZWN0IGNoaWxkIGxvYWRpbmcgaGFzIHRvIGJlIGltcGxlbWVudGVkIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzKVxuICAgICAgICBpZihoaWVyYXJjaHkuZW50aXR5VHlwZSAmJiBpc0luZGl2aWR1YWxUeXBlTmFtZShoaWVyYXJjaHkuZW50aXR5VHlwZSkpIHJldHVybjtcblxuICAgICAgICAvLyB0b2dnbGUgZXhwYW5zaW9uIHN0YXRlIGFuZCBmb3JjZSBjb21wb25lbnQgdG8gcmVyZW5kZXIgYWZ0ZXJ3YXJkXG4gICAgICAgIG5vZGUuZXhwYW5kZWQgPSAhbm9kZS5leHBhbmRlZDtcblxuICAgICAgICAvLyBmZXRjaCBuZWVkZWQgaW5mb3JtYXRpb24gYW5kIHJlcmVuZGVyIGFnYWluIGlmIG5lZWRlZFxuICAgICAgICBpZihub2RlLmV4cGFuZGVkKXtcbiAgICAgICAgICAgIG5vZGUubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZSgpO1xuXG4gICAgICAgICAgICBoaWVyYXJjaHkuZmV0Y2hJbmZvcm1hdGlvbkZvckV4cGFuc2lvbihub2RlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgICBoaWVyYXJjaHkuY2xvc2VOb2RlKG5vZGUpO1xuICAgICAgICB9XG4gICAgfSxbaGllcmFyY2h5XSlcblxuICAgIGZ1bmN0aW9uIHJlbmRlclRyZWVOb2RlKGhpZXJhcmNoeTogSGllcmFyY2h5LCBub2RlOiBUcmVlTm9kZSwgZHJhd0xpbmU/OiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgIDxFdWlUZXh0PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7aGVpZ2h0OiBcIjI0cHhcIn19PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3twb3NpdGlvbjogXCJyZWxhdGl2ZVwiLCBib3JkZXJMZWZ0OiBcIjFweCBkb3R0ZWQgYmxhY2tcIiwgYm9yZGVyQm90dG9tOiBcIjFweCBkb3R0ZWQgYmxhY2tcIiwgd2lkdGg6IFwiMTJweFwiLCBoZWlnaHQ6IFwiMTZweFwiLCBsZWZ0OiBcIjUuNXB4XCIsIHRvcDogXCItMXB4XCJ9fT48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7cG9zaXRpb246IFwicmVsYXRpdmVcIiwgYm9yZGVyTGVmdDogZHJhd0xpbmUgPyBcIjFweCBkb3R0ZWQgYmxhY2tcIjpcIlwiLCB3aWR0aDogXCIxMnB4XCIsIGhlaWdodDogXCI5cHhcIiwgbGVmdDogXCI1LjVweFwiLCB0b3A6IFwiMHB4XCJ9fT48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7cG9zaXRpb246IFwicmVsYXRpdmVcIiwgdG9wOiBcIi0yMnB4XCJ9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIW5vZGUuZW50aXR5RGF0YS5oYXNDaGlsZHJlbiA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUljb24gdHlwZT17XCJlbXB0eVwifS8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7fX0gb25DbGljaz17KCkgPT4ge3RvZ2dsZU5vZGUobm9kZSl9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUljb24gdHlwZT17bm9kZS5leHBhbmRlZCA/IFwiYXJyb3dEb3duXCIgOiBcImFycm93UmlnaHRcIn0gc2l6ZT17XCJzXCJ9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfTwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFRyZWVMaW5rIGVudGl0eURhdGE9e25vZGUuZW50aXR5RGF0YX0gY2hpbGRSZWxhdGlvblRvUGFyZW50PXtub2RlLmNoaWxkUmVsYXRpb25Ub1BhcmVudH0gb250b2xvZ3lJZD17aGllcmFyY2h5Lm9udG9sb2d5SWR9IGVudGl0eVR5cGU9e2hpZXJhcmNoeS5lbnRpdHlUeXBlfSBvbk5hdmlnYXRlVG9FbnRpdHk9e29uTmF2aWdhdGVUb0VudGl0eX0gb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fSBoaWdobGlnaHQ9e25vZGUuZW50aXR5RGF0YS5pcmkgPT0gaGllcmFyY2h5Py5tYWluRW50aXR5SXJpfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7bm9kZS5lbnRpdHlEYXRhLm51bURlc2NlbmRhbnRzICE9IHVuZGVmaW5lZCAmJiBub2RlLmVudGl0eURhdGEubnVtRGVzY2VuZGFudHMgPiAwICYmIDxzcGFuIHN0eWxlPXt7Y29sb3I6IFwiZ3JheVwifX0+KHtub2RlLmVudGl0eURhdGEubnVtRGVzY2VuZGFudHMudG9Mb2NhbGVTdHJpbmcoKX0pPC9zcGFuPn1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICAgICAgICB7bm9kZS5leHBhbmRlZCAmJlxuICAgICAgICAgICAgICAgICAgICA8dWwgc3R5bGU9e3ttYXJnaW5CbG9ja0VuZDogXCIwXCIsIG1hcmdpbklubGluZVN0YXJ0OiBcIjUuNXB4XCJ9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtub2RlLmxvYWRpbmcgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlMb2FkaW5nU3Bpbm5lciBzdHlsZT17e3Bvc2l0aW9uOiBcInJlbGF0aXZlXCIsIGxlZnQ6IFwiMTNweFwiLCB0b3A6IFwiNXB4XCJ9fS8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxvYWRlZENoaWxkcmVuLm1hcCgoY2hpbGQsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBrZXk9e3JhbmRvbVN0cmluZygpfSBzdHlsZT17e2JvcmRlckxlZnQ6IGRyYXdMaW5lID8gXCIxcHggZG90dGVkIGJsYWNrXCI6XCJcIiwgcGFkZGluZ0xlZnQ6IFwiMXJlbVwifX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyVHJlZU5vZGUoaGllcmFyY2h5LCBjaGlsZCwgaWR4IDwgbm9kZS5sb2FkZWRDaGlsZHJlbi5sZW5ndGggLSAxKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpQ2FyZCB0aXRsZT17XCJcIn0gbGF5b3V0PXtcImhvcml6b250YWxcIn0gc3R5bGU9e3sgb3ZlcmZsb3dYOiBcImF1dG9cIiwgb3ZlcmZsb3dZOiBcImhpZGRlblwiIH19PlxuICAgICAgICAgICAgeyhpc1N1Y2Nlc3NIaWVyYXJjaHkgJiYgaGllcmFyY2h5ICE9IHVuZGVmaW5lZCkgP1xuICAgICAgICAgICAgICAgIDxFdWlUZXh0IHN0eWxlPXt7d2hpdGVTcGFjZTogXCJub3dyYXBcIn19PiB7LyogLy8gVE9ETzogRG9lcyBub3QgZ2V0IGRpc3BsYXllZCBjb3JyZWN0bHkgb24gc3Rvcnlib29rIG1haW4gcGFnZSAqL31cbiAgICAgICAgICAgICAgICAgICAge2hpZXJhcmNoeS5yb290cy5tYXAoKHJvb3ROb2RlLCBpZHgpID0+IHJlbmRlclRyZWVOb2RlKGhpZXJhcmNoeSwgcm9vdE5vZGUsIGlkeCA8IGhpZXJhcmNoeS5yb290cy5sZW5ndGggLSAxKSl9XG4gICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgICAgIDogPEV1aUxvYWRpbmdTcGlubmVyLz59XG4gICAgICAgIDwvRXVpQ2FyZD5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWVyYXJjaHkocHJvcHM6IEhpZXJhcmNoeVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEhpZXJhcmNoeVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkSGllcmFyY2h5V2lkZ2V0KHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8SGllcmFyY2h5V2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGFwaVVybD17cHJvcHMuYXBpVXJsfVxuICAgICAgICAgICAgICAgICAgICBhcGlLZXk9e3Byb3BzLmFwaUtleX1cbiAgICAgICAgICAgICAgICAgICAgYmFja2VuZFR5cGU9e3Byb3BzLmJhY2tlbmRUeXBlfVxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM9e3Byb3BzLmluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkUm9vdHM9e3Byb3BzLnByZWZlcnJlZFJvb3RzfVxuICAgICAgICAgICAgICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzPXtwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzfVxuICAgICAgICAgICAgICAgICAgICBzaG93U2libGluZ3NPbkluaXQ9e3Byb3BzLnNob3dTaWJsaW5nc09uSW5pdH1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHtIaWVyYXJjaHlXaWRnZXQsIGNyZWF0ZUhpZXJhcmNoeX07IiwgImltcG9ydCBheGlvcywge0F4aW9zSW5zdGFuY2UsIEF4aW9zUmVxdWVzdENvbmZpZ30gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQge0J1aWxkSGllcmFyY2h5UHJvcHMsIEhpZXJhcmNoeUJ1aWxkZXIsIEhpZXJhcmNoeUlyaVByb3AsIExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzfSBmcm9tIFwiLi9IaWVyYXJjaHlCdWlsZGVyXCI7XG5pbXBvcnQgeyBIaWVyYXJjaHksIFBhcmVudENoaWxkUmVsYXRpb24sIFRyZWVOb2RlfSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHlcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9tb2RlbC9SZWlmaWVkXCI7XG5pbXBvcnQgeyBFbnRpdHlEYXRhIH0gZnJvbSBcIi4uL2FwcC90eXBlc1wiO1xuXG50eXBlIFRvcENvbmNlcHQgPSB7XG4gICAgdXJpOiBzdHJpbmcsXG4gICAgbGFiZWw/OiBzdHJpbmcsXG4gICAgdG9wQ29uY2VwdE9mPzogc3RyaW5nLFxuICAgIGhhc0NoaWxkcmVuOiBib29sZWFuLFxuICAgIG5vdGF0aW9uPzogc3RyaW5nXG59XG5cbnR5cGUgTGFiZWxBbmRVcmlBbmRDaGlsZHJlbiA9IHtcbiAgICB1cmk6IHN0cmluZyxcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIGhhc0NoaWxkcmVuOiBib29sZWFuLFxuICAgIG5vdGF0aW9uPzogc3RyaW5nXG59XG5cbnR5cGUgSGllcmFyY2h5UmVzdWx0ID0ge1xuICAgIHVyaTogc3RyaW5nLFxuICAgIHByZWZMYWJlbDogc3RyaW5nO1xuICAgIHRvcD86IHN0cmluZyxcbiAgICBicm9hZGVyPzogc3RyaW5nW10sXG4gICAgbmFycm93ZXI/OiBMYWJlbEFuZFVyaUFuZENoaWxkcmVuW11cbn07XG5cbnR5cGUgUHJlZkFuZFVyaUFuZENoaWxkcmVuID0ge1xuICAgIHVyaTogc3RyaW5nLFxuICAgIHByZWZMYWJlbDogc3RyaW5nLFxuICAgIGhhc0NoaWxkcmVuOiBib29sZWFuXG4gICAgbm90YXRpb24/OiBzdHJpbmdcbn1cblxuYWJzdHJhY3QgY2xhc3MgU2tvc0VudGl0eURhdGFCdWlsZGVyIHtcbiAgICBzdGF0aWMgZnJvbVRvcENvbmNlcHQob2JqOiBUb3BDb25jZXB0KSA6IEVudGl0eURhdGEge1xuICAgICAgICByZXR1cm4gIHtcbiAgICAgICAgICAgIGlyaTogb2JqLnVyaSxcbiAgICAgICAgICAgIGxhYmVsOiBvYmoubGFiZWwsXG4gICAgICAgICAgICBoYXNDaGlsZHJlbjogb2JqLmhhc0NoaWxkcmVuLFxuICAgICAgICAgICAgcGFyZW50czogW11cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUhpZXJhcmNoeVJlc3VsdChvYmo6IEhpZXJhcmNoeVJlc3VsdCkgOiBFbnRpdHlEYXRhIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogb2JqLnVyaSxcbiAgICAgICAgICAgIGxhYmVsOiBvYmoucHJlZkxhYmVsLFxuICAgICAgICAgICAgaGFzQ2hpbGRyZW46IG9iai5uYXJyb3dlciAhPSB1bmRlZmluZWQgJiYgb2JqLm5hcnJvd2VyLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICBwYXJlbnRzOiBSZWlmaWVkLmZyb21Kc29uKG9iai5icm9hZGVyKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21QcmVmQW5kVXJpQW5kQ2hpbGRyZW4ob2JqOiBQcmVmQW5kVXJpQW5kQ2hpbGRyZW4sIHBhcmVudHM/OiBzdHJpbmdbXSkgOiBFbnRpdHlEYXRhIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogb2JqLnVyaSxcbiAgICAgICAgICAgIGxhYmVsOiBvYmoucHJlZkxhYmVsLFxuICAgICAgICAgICAgaGFzQ2hpbGRyZW46IG9iai5oYXNDaGlsZHJlbixcbiAgICAgICAgICAgIHBhcmVudHM6IFJlaWZpZWQuZnJvbUpzb24ocGFyZW50cylcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUxhYmVsQW5kVXJpQW5kQ2hpbGRyZW4ob2JqOiBMYWJlbEFuZFVyaUFuZENoaWxkcmVuLCBwYXJlbnRzPzogc3RyaW5nW10pIDogRW50aXR5RGF0YSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IG9iai51cmksXG4gICAgICAgICAgICBsYWJlbDogb2JqLmxhYmVsLFxuICAgICAgICAgICAgaGFzQ2hpbGRyZW46IG9iai5oYXNDaGlsZHJlbixcbiAgICAgICAgICAgIHBhcmVudHM6IFJlaWZpZWQuZnJvbUpzb24ocGFyZW50cylcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNrb3NBcGkgaW1wbGVtZW50cyBIaWVyYXJjaHlCdWlsZGVye1xuICAgIHByaXZhdGUgYXhpb3NJbnN0YW5jZTogQXhpb3NJbnN0YW5jZTtcblxuICAgIGNvbnN0cnVjdG9yKGFwaTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgICAgICAgICBiYXNlVVJMOiBhcGksXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAvLyBDb250ZW50X1R5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLCAvLyBsZWFkcyB0byBwcmVmbGlnaHQgZXJyb3JcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbWFrZUNhbGwodXJsOiBzdHJpbmcsIGNvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnPG5ldmVyPiB8IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQodXJsLCBjb25maWcpKS5kYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBidWlsZEhpZXJhcmNoeVdpdGhJcmkocHJvcHM6IEJ1aWxkSGllcmFyY2h5UHJvcHMgJiBIaWVyYXJjaHlJcmlQcm9wKSA6IFByb21pc2U8SGllcmFyY2h5PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGlyaSxcbiAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICBzaG93U2libGluZ3NPbkluaXQsXG4gICAgICAgIH0gPSBwcm9wcztcblxuICAgICAgICBpZighb250b2xvZ3lJZCkgdGhyb3cgRXJyb3IoXCJvbnRvbG9neUlkIGhhcyB0byBiZSBzcGVjaWZpZWQgZm9yIFNLT1MgQVBJLlwiKTtcblxuICAgICAgICBjb25zdCByb290RW50aXRpZXM6IHN0cmluZ1tdID0gW11cbiAgICAgICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPigpO1xuICAgICAgICBjb25zdCBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+KCk7XG4gICAgICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgY29uc3Qgb25Jbml0aWFsUGF0aDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTsgLy8gb25seSB1c2VkIGlmIHNob3dTaWJsaW5nc09uSW5pdCA9PSBmYWxzZVxuXG4gICAgICAgIGlmKGlyaSkge1xuICAgICAgICAgICAgY29uc3QgYnJvYWRlclRyYW5zaXRpdmU6IEhpZXJhcmNoeVJlc3VsdFtdID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgLyR7b250b2xvZ3lJZH0vaGllcmFyY2h5YCwge3BhcmFtczoge3VyaTogaXJpLCBsYW5nOiBcImVuXCIsIGZvcm1hdDogXCJhcHBsaWNhdGlvbi9qc29uXCJ9fSlcbiAgICAgICAgICAgICAgICAudGhlbigob2JqKSA9PiBPYmplY3Qua2V5cyhvYmpbXCJicm9hZGVyVHJhbnNpdGl2ZVwiXSkubWFwKChrZXkpID0+IG9ialtcImJyb2FkZXJUcmFuc2l0aXZlXCJdW2tleV0pKVxuXG4gICAgICAgICAgICAvLyBzdG9yZXMgYWxsIGVudGl0aWVzIGFwcGVhcmluZyBpbiBicm9hZGVyVHJhbnNpdGl2ZVxuICAgICAgICAgICAgLy9jb25zdCBlbnRpdGllczogTWFwPHN0cmluZywgRW50aXR5RGF0YT4gPSBuZXcgTWFwPHN0cmluZywgRW50aXR5RGF0YT4oKVxuXG4gICAgICAgICAgICBmb3IoY29uc3Qgbm9kZSBvZiBicm9hZGVyVHJhbnNpdGl2ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVEYXRhOiBFbnRpdHlEYXRhID0gU2tvc0VudGl0eURhdGFCdWlsZGVyLmZyb21IaWVyYXJjaHlSZXN1bHQobm9kZSk7XG5cbiAgICAgICAgICAgICAgICBlbnRpdGllc0RhdGEuc2V0KG5vZGVEYXRhLmlyaSwgbm9kZURhdGEpO1xuICAgICAgICAgICAgICAgIGlmKG5vZGUudG9wKSByb290RW50aXRpZXMucHVzaChub2RlRGF0YS5pcmkpO1xuXG4gICAgICAgICAgICAgICAgaWYoIXNob3dTaWJsaW5nc09uSW5pdCkgb25Jbml0aWFsUGF0aC5hZGQobm9kZURhdGEuaXJpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcihjb25zdCBub2RlIG9mIGJyb2FkZXJUcmFuc2l0aXZlKSB7XG4gICAgICAgICAgICAgICAgaWYobm9kZS5uYXJyb3dlciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW46IEVudGl0eURhdGFbXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBjaGlsZE5vZGUgb2Ygbm9kZS5uYXJyb3dlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkTm9kZURhdGEgPSBlbnRpdGllc0RhdGEuZ2V0KGNoaWxkTm9kZS51cmkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2hpbGROb2RlRGF0YSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGVEYXRhID0gU2tvc0VudGl0eURhdGFCdWlsZGVyLmZyb21MYWJlbEFuZFVyaUFuZENoaWxkcmVuKGNoaWxkTm9kZSwgW25vZGUudXJpXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdGllc0RhdGEuc2V0KGNoaWxkTm9kZURhdGEuaXJpLCBjaGlsZE5vZGVEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighY2hpbGROb2RlRGF0YS5wYXJlbnRzLm1hcCgocikgPT4gci52YWx1ZSkuaW5jbHVkZXMobm9kZS51cmkpKSBpZiAoY2hpbGROb2RlRGF0YS5wYXJlbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZURhdGEucGFyZW50cy5wdXNoKC4uLlJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihub2RlLnVyaSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGROb2RlRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5zb3J0KChhLCBiKSA9PiAoYS5sYWJlbCB8fCBhLmlyaSkubG9jYWxlQ29tcGFyZShiLmxhYmVsIHx8IGIuaXJpKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KG5vZGUudXJpLCBjaGlsZHJlbi5tYXAoKGMpID0+IHtyZXR1cm4ge2NoaWxkSXJpOiBjLmlyaX19KSk7XG4gICAgICAgICAgICAgICAgICAgIGFsbENoaWxkcmVuUHJlc2VudC5hZGQobm9kZS51cmkpOyAvLyBpbiBza29zLCBhbGwgY2hpbGRyZW4gYXJlIGxvYWRlZCBpZiBhbnkgYXJlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdG9wY29uY2VwdHM6IFRvcENvbmNlcHRbXSA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYC8ke29udG9sb2d5SWR9L3RvcENvbmNlcHRzYCwge3BhcmFtczoge2xhbmc6IFwiZW5cIiwgZm9ybWF0OiBcImFwcGxpY2F0aW9uL2pzb25cIn19KVxuICAgICAgICAgICAgICAgIC50aGVuKChvYmopID0+IG9ialtcInRvcGNvbmNlcHRzXCJdKVxuXG4gICAgICAgICAgICBmb3IoY29uc3QgY29uY2VwdCBvZiB0b3Bjb25jZXB0cykge1xuICAgICAgICAgICAgICAgIHJvb3RFbnRpdGllcy5wdXNoKGNvbmNlcHQudXJpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVRyZWVOb2RlKGVudGl0eURhdGE6IEVudGl0eURhdGEsIGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+KTogVHJlZU5vZGUge1xuICAgICAgICAgICAgY3ljbGVDaGVjay5hZGQoZW50aXR5RGF0YS5pcmkpOyAvLyBhZGQgY3VycmVudCBlbnRpdHkgdG8gY3ljbGUgY2hlY2sgc2V0XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJlZU5vZGUoZW50aXR5RGF0YSk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkUmVsYXRpb25zLmdldChlbnRpdHlEYXRhLmlyaSkgfHwgW107XG5cbiAgICAgICAgICAgIGlmKCFzaG93U2libGluZ3NPbkluaXQpIHtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjeWNsaWMgdHJlZSwgc2tpcCBjeWNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGREYXRhID0gZW50aXRpZXNEYXRhLmdldChjaGlsZC5jaGlsZElyaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkRGF0YSAhPSB1bmRlZmluZWQgJiYgb25Jbml0aWFsUGF0aC5oYXMoY2hpbGQuY2hpbGRJcmkpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkQ2hpbGQoY3JlYXRlVHJlZU5vZGUoY2hpbGREYXRhLCBjeWNsZUNoZWNrKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjeWNsaWMgdHJlZSwgc2tpcCBjeWNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGREYXRhID0gZW50aXRpZXNEYXRhLmdldChjaGlsZC5jaGlsZElyaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkRGF0YSAhPSB1bmRlZmluZWQpIG5vZGUuYWRkQ2hpbGQoY3JlYXRlVHJlZU5vZGUoY2hpbGREYXRhLCBjeWNsZUNoZWNrKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihub2RlLmxvYWRlZENoaWxkcmVuLmxlbmd0aCA+IDApIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBjeWNsZUNoZWNrLmRlbGV0ZShlbnRpdHlEYXRhLmlyaSk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIENvbnRhaW5zIGlyaXMgb2YgYWxsIGVudGl0aWVzIHRoYXQgaGF2ZSBvY2N1cnJlZCB3aXRoaW4gdGhlIGN1cnJlbnQgcmVjdXJzaW9uIGJyYW5jaC4gSXMgdXNlZCB0byBjaGVjayBmb3IgY3ljbGVzLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICBjb25zdCByb290Tm9kZXM6IFRyZWVOb2RlW10gPSByb290RW50aXRpZXMubWFwKChyb290RW50aXR5KSA9PiBjcmVhdGVUcmVlTm9kZShlbnRpdGllc0RhdGEuZ2V0KHJvb3RFbnRpdHkpISwgY3ljbGVDaGVjaykpLnNvcnQoKGEsYikgPT4gKGEuZW50aXR5RGF0YS5sYWJlbCB8fCBhLmVudGl0eURhdGEuaXJpKS5sb2NhbGVDb21wYXJlKGIuZW50aXR5RGF0YS5sYWJlbCB8fCBiLmVudGl0eURhdGEuaXJpKSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBIaWVyYXJjaHkoe1xuICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IHBhcmVudENoaWxkUmVsYXRpb25zLFxuICAgICAgICAgICAgZW50aXRpZXNEYXRhOiBlbnRpdGllc0RhdGEsXG4gICAgICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQ6IGFsbENoaWxkcmVuUHJlc2VudCxcbiAgICAgICAgICAgIHJvb3RzOiByb290Tm9kZXMsXG4gICAgICAgICAgICBhcGk6IG5ldyBTa29zQXBpKHRoaXMuYXhpb3NJbnN0YW5jZS5nZXRVcmkoKSksXG4gICAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgICAgICAgbWFpbkVudGl0eUlyaTogaXJpLFxuICAgICAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlczogcHJvcHMua2VlcEV4cGFuc2lvblN0YXRlc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbG9hZEhpZXJhcmNoeUNoaWxkcmVuKHByb3BzOiBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wcyk6IFByb21pc2U8RW50aXR5RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG5vZGVUb0V4cGFuZCxcbiAgICAgICAgICAgIG9udG9sb2d5SWRcbiAgICAgICAgfSA9IHByb3BzO1xuXG4gICAgICAgIGNvbnN0IG5hcnJvd2VyOiBQcmVmQW5kVXJpQW5kQ2hpbGRyZW5bXSA9IChhd2FpdCB0aGlzLm1ha2VDYWxsKGAvJHtvbnRvbG9neUlkfS9jaGlsZHJlbmAsIHtwYXJhbXM6IHt1cmk6IG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSwgbGFuZzogXCJlblwiLCBmb3JtYXQ6IFwiYXBwbGljYXRpb24vanNvblwifX0pKVtcIm5hcnJvd2VyXCJdO1xuXG4gICAgICAgIHJldHVybiBuYXJyb3dlci5tYXAoKG9iaikgPT4gU2tvc0VudGl0eURhdGFCdWlsZGVyLmZyb21QcmVmQW5kVXJpQW5kQ2hpbGRyZW4ob2JqLCBbbm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpXSkpO1xuICAgIH1cblxufSIsICJpbXBvcnQge0J1aWxkSGllcmFyY2h5UHJvcHMsIEhpZXJhcmNoeUJ1aWxkZXIsIEhpZXJhcmNoeUlyaVByb3AsIExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzfSBmcm9tIFwiLi9IaWVyYXJjaHlCdWlsZGVyXCI7XG5pbXBvcnQgYXhpb3MsIHtBeGlvc0luc3RhbmNlLCBBeGlvc1JlcXVlc3RDb25maWd9IGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHsgSGllcmFyY2h5LCBQYXJlbnRDaGlsZFJlbGF0aW9uLCBUcmVlTm9kZX0gZnJvbSBcIi4uL21vZGVsL2ludGVyZmFjZXMvSGllcmFyY2h5XCI7XG5pbXBvcnQge3BsdXJhbGl6ZVR5cGV9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtFbnRpdHlEYXRhfSBmcm9tIFwiLi4vYXBwL3R5cGVzXCI7XG5cbnR5cGUgSGllcmFyY2h5Tm9kZSA9IHtcbiAgICBwcmVmTGFiZWw6IHN0cmluZ1xuICAgIGhhc0NoaWxkcmVuOiBib29sZWFuXG4gICAgY2hpbGRyZW46IEhpZXJhcmNoeU5vZGVbXVxuICAgIG9ic29sZXRlOiBib29sZWFuIC8vIFRPRE86IHVzZSB0aGlzIHRvIGVuYWJsZSBzaG93aW5nIG9ic29sZXRlVGVybXM/XG4gICAgW1wiQGlkXCJdOiBzdHJpbmdcbiAgICBbXCJAdHlwZVwiXTogc3RyaW5nXG4gICAgLy8gbGlua3M6IG9iamVjdCAtIG5vdCBuZWVkZWQgaGVyZVxuICAgIFtcIkBjb250ZXh0XCJdOiB7XG4gICAgICAgIFtcIkB2b2NhYlwiXTogc3RyaW5nXG4gICAgICAgIHByZWZMYWJlbDogc3RyaW5nXG4gICAgICAgIG9ic29sZXRlOiBzdHJpbmdcbiAgICAgICAgW1wiQGxhbmd1YWdlXCJdOiBzdHJpbmdcbiAgICB9XG59XG5cbmZ1bmN0aW9uIEhpZXJhcmNoeU5vZGVUb0VudGl0eURhdGEoaGllcmFyY2h5Tm9kZTogSGllcmFyY2h5Tm9kZSkgOiBFbnRpdHlEYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpcmk6IGhpZXJhcmNoeU5vZGVbXCJAaWRcIl0sXG4gICAgICAgIGxhYmVsOiBoaWVyYXJjaHlOb2RlW1wicHJlZkxhYmVsXCJdLFxuICAgICAgICBoYXNDaGlsZHJlbjogaGllcmFyY2h5Tm9kZVtcImhhc0NoaWxkcmVuXCJdLFxuICAgICAgICBwYXJlbnRzOiBbXVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9udG9Qb3J0YWxBcGkgaW1wbGVtZW50cyBIaWVyYXJjaHlCdWlsZGVye1xuICAgIHByaXZhdGUgYXhpb3NJbnN0YW5jZTogQXhpb3NJbnN0YW5jZTtcbiAgICBwcml2YXRlIGFwaUtleTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoYXBpOiBzdHJpbmcsIGFwaUtleTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgICAgICAgICBiYXNlVVJMOiBhcGksXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAvLyBDb250ZW50X1R5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLCAvLyBsZWFkcyB0byBwcmVmbGlnaHQgZXJyb3JcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgICAgICAgdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICBjb25maWcucGFyYW1zID0gY29uZmlnLnBhcmFtcyB8fCB7fTtcblxuICAgICAgICAgICAgLy8gZGVmYXVsdCBwYXJhbXNcbiAgICAgICAgICAgIGNvbmZpZy5wYXJhbXNbXCJhcGlrZXlcIl0gPSB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIGNvbmZpZy5wYXJhbXNbXCJmb3JtYXRcIl0gPSBcImpzb25cIjtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG1ha2VDYWxsKHVybDogc3RyaW5nLCBjb25maWc/OiBBeGlvc1JlcXVlc3RDb25maWc8bmV2ZXI+KSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldCh1cmwsIGNvbmZpZykpLmRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJ1aWxkSGllcmFyY2h5V2l0aElyaShwcm9wczogQnVpbGRIaWVyYXJjaHlQcm9wcyAmIEhpZXJhcmNoeUlyaVByb3ApIDogUHJvbWlzZTxIaWVyYXJjaHk+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgICBzaG93U2libGluZ3NPbkluaXQsXG4gICAgICAgIH0gPSBwcm9wcztcblxuICAgICAgICBpZighb250b2xvZ3lJZCkgdGhyb3cgRXJyb3IoXCJvbnRvbG9neUlkIGhhcyB0byBiZSBzcGVjaWZpZWQgZm9yIE9udG9Qb3J0YWwgQVBJLlwiKTtcbiAgICAgICAgaWYoIWVudGl0eVR5cGUpIHRocm93IEVycm9yKFwiZW50aXR5VHlwZSBoYXMgdG8gYmUgc3BlY2lmaWVkIGZvciBPbnRvUG9ydGFsIEFQSS5cIik7XG5cbiAgICAgICAgY29uc3Qgcm9vdEVudGl0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBjb25zdCBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGE+KCk7XG4gICAgICAgIGNvbnN0IHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+ID0gbmV3IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4oKTtcbiAgICAgICAgY29uc3QgYWxsQ2hpbGRyZW5QcmVzZW50OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBjb25zdCBvbkluaXRpYWxQYXRoOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBvbmx5IHVzZWQgaWYgc2hvd1NpYmxpbmdzT25Jbml0ID09IGZhbHNlXG5cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRSZWxhdGlvbnMoY3Vyck5vZGU6IEhpZXJhcmNoeU5vZGUpIHtcbiAgICAgICAgICAgIGVudGl0aWVzRGF0YS5zZXQoY3Vyck5vZGVbXCJAaWRcIl0sIEhpZXJhcmNoeU5vZGVUb0VudGl0eURhdGEoY3Vyck5vZGUpKVxuICAgICAgICAgICAgaWYoY3Vyck5vZGUuaGFzQ2hpbGRyZW4gJiYgY3Vyck5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChjdXJyTm9kZVtcIkBpZFwiXSwgY3Vyck5vZGUuY2hpbGRyZW4ubWFwKChjKSA9PiB7cmV0dXJuIHtjaGlsZElyaTogY1tcIkBpZFwiXX19KSk7XG5cbiAgICAgICAgICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQuYWRkKGN1cnJOb2RlW1wiQGlkXCJdKTtcbiAgICAgICAgICAgICAgICBvbkluaXRpYWxQYXRoLmFkZChjdXJyTm9kZVtcIkBpZFwiXSk7XG5cbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgY2hpbGQgb2YgY3Vyck5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRSZWxhdGlvbnMoY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGlyaSkge1xuICAgICAgICAgICAgLy8gVE9ETzogcHJvcGVydHkgd2hpY2ggaXMgY2hpbGQgb2YgbXVsdGlwbGUgcHJvcGVydGllcyBvbmx5IGlzIHJldHVybmVkIGluIG9uZSBwYXJlbnQgaW4gL3RyZWUgcXVlcnkgKC0+IGRvIGl0IHJpZ2h0IG1hbnVhbGx5PykgKGUuZy46IGh0dHA6Ly9zd2VldG9udG9sb2d5Lm5ldC9yZWxhVGltZS9oYXNOSFRpbWUgLT4gaGFzIG1vcmUgdGhhbiBvbmUgcGFyZW50LCBidXQgaXMgb25seSBzaG93biBpbiBvbmUgcGFyZW50IGluIC90cmVlKVxuICAgICAgICAgICAgY29uc3QgYXBpX3RyZWU6IEhpZXJhcmNoeU5vZGVbXSA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYC9vbnRvbG9naWVzLyR7b250b2xvZ3lJZC50b1VwcGVyQ2FzZSgpfS8ke3BsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSwgZmFsc2UpfS8ke2VuY29kZVVSSUNvbXBvbmVudChpcmkpfS90cmVlYCwge3BhcmFtczoge2luY2x1ZGU6IFwiQGlkLHByZWZMYWJlbCxoYXNDaGlsZHJlbixjaGlsZHJlblwifX0pO1xuXG4gICAgICAgICAgICBmb3IoY29uc3Qgcm9vdE5vZGUgb2YgYXBpX3RyZWUpIHtcbiAgICAgICAgICAgICAgICByb290RW50aXRpZXMucHVzaChyb290Tm9kZVtcIkBpZFwiXSk7XG4gICAgICAgICAgICAgICAgb25Jbml0aWFsUGF0aC5hZGQocm9vdE5vZGVbXCJAaWRcIl0pO1xuICAgICAgICAgICAgICAgIGJ1aWxkUmVsYXRpb25zKHJvb3ROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uSW5pdGlhbFBhdGguYWRkKGlyaSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByb290cyA6IEhpZXJhcmNoeU5vZGVbXSA9IGF3YWl0IHRoaXMubWFrZUNhbGwoXG4gICAgICAgICAgICAgICAgYC9vbnRvbG9naWVzLyR7b250b2xvZ3lJZC50b1VwcGVyQ2FzZSgpfS8ke3BsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSwgZmFsc2UpfS9yb290c2AsXG4gICAgICAgICAgICAgICAge3BhcmFtczoge2luY2x1ZGU6IFwiQGlkLHByZWZMYWJlbCxoYXNDaGlsZHJlblwifX1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZvcihjb25zdCByb290Tm9kZSBvZiByb290cykge1xuICAgICAgICAgICAgICAgIHJvb3RFbnRpdGllcy5wdXNoKHJvb3ROb2RlW1wiQGlkXCJdKTtcbiAgICAgICAgICAgICAgICBvbkluaXRpYWxQYXRoLmFkZChyb290Tm9kZVtcIkBpZFwiXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVUcmVlTm9kZShlbnRpdHlEYXRhOiBFbnRpdHlEYXRhLCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPik6IFRyZWVOb2RlIHtcbiAgICAgICAgICAgIGN5Y2xlQ2hlY2suYWRkKGVudGl0eURhdGEuaXJpKTsgLy8gYWRkIGN1cnJlbnQgZW50aXR5IHRvIGN5Y2xlIGNoZWNrIHNldFxuXG4gICAgICAgICAgICBjb25zdCBub2RlID0gbmV3IFRyZWVOb2RlKGVudGl0eURhdGEpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnRDaGlsZFJlbGF0aW9ucy5nZXQoZW50aXR5RGF0YS5pcmkpIHx8IFtdO1xuXG4gICAgICAgICAgICBpZighc2hvd1NpYmxpbmdzT25Jbml0KSB7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEN5Y2xpYyB0cmVlIGF0IGVudGl0eSBcIiR7Y2hpbGQuY2hpbGRJcml9XCIuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmKG9uSW5pdGlhbFBhdGguaGFzKGNoaWxkLmNoaWxkSXJpKSkgbm9kZS5hZGRDaGlsZChjcmVhdGVUcmVlTm9kZShlbnRpdGllc0RhdGEuZ2V0KGNoaWxkLmNoaWxkSXJpKSEsIGN5Y2xlQ2hlY2spKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjeWNsaWMgdHJlZSwgc2tpcCBjeWNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGRDaGlsZChjcmVhdGVUcmVlTm9kZShlbnRpdGllc0RhdGEuZ2V0KGNoaWxkLmNoaWxkSXJpKSEsIGN5Y2xlQ2hlY2spKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKG5vZGUubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoID4gMCkgbm9kZS5leHBhbmRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGN5Y2xlQ2hlY2suZGVsZXRlKGVudGl0eURhdGEuaXJpKTtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3ljbGVDaGVjazogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTsgLy8gQ29udGFpbnMgaXJpcyBvZiBhbGwgZW50aXRpZXMgdGhhdCBoYXZlIG9jY3VycmVkIHdpdGhpbiB0aGUgY3VycmVudCByZWN1cnNpb24gYnJhbmNoLiBJcyB1c2VkIHRvIGNoZWNrIGZvciBjeWNsZXMuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIGNvbnN0IHJvb3ROb2RlczogVHJlZU5vZGVbXSA9IHJvb3RFbnRpdGllcy5tYXAoKHJvb3RFbnRpdHkpID0+IGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQocm9vdEVudGl0eSkhLCBjeWNsZUNoZWNrKSkuc29ydCgoYSxiKSA9PiAoYS5lbnRpdHlEYXRhLmxhYmVsIHx8IGEuZW50aXR5RGF0YS5pcmkpLmxvY2FsZUNvbXBhcmUoYi5lbnRpdHlEYXRhLmxhYmVsIHx8IGIuZW50aXR5RGF0YS5pcmkpKTtcblxuICAgICAgICByZXR1cm4gbmV3IEhpZXJhcmNoeSh7XG4gICAgICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9uczogcGFyZW50Q2hpbGRSZWxhdGlvbnMsXG4gICAgICAgICAgICBlbnRpdGllc0RhdGE6IGVudGl0aWVzRGF0YSxcbiAgICAgICAgICAgIGFsbENoaWxkcmVuUHJlc2VudDogYWxsQ2hpbGRyZW5QcmVzZW50LFxuICAgICAgICAgICAgcm9vdHM6IHJvb3ROb2RlcyxcbiAgICAgICAgICAgIGFwaTogbmV3IE9udG9Qb3J0YWxBcGkodGhpcy5heGlvc0luc3RhbmNlLmdldFVyaSgpLCB0aGlzLmFwaUtleSksXG4gICAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgICAgICAgbWFpbkVudGl0eUlyaTogaXJpLFxuICAgICAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlczogcHJvcHMua2VlcEV4cGFuc2lvblN0YXRlcyxcbiAgICAgICAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGxvYWRIaWVyYXJjaHlDaGlsZHJlbihwcm9wczogTG9hZEhpZXJhcmNoeUNoaWxkcmVuUHJvcHMpOiBQcm9taXNlPEVudGl0eURhdGFbXT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBub2RlVG9FeHBhbmQsXG4gICAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgICAgZW50aXR5VHlwZVxuICAgICAgICB9ID0gcHJvcHM7XG5cbiAgICAgICAgaWYoZW50aXR5VHlwZSA9PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiZW50aXR5VHlwZSBoYXMgdG8gYmUgcHJvdmlkZWQgdG8gbG9hZCBjaGlsZHJlbiBpbiBhbiBPbnRvUG9ydGFsIGhpZXJhcmNoeS5cIik7XG5cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gOiBIaWVyYXJjaHlOb2RlW10gPSAoYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgICAgIGAvb250b2xvZ2llcy8ke29udG9sb2d5SWQudG9VcHBlckNhc2UoKX0vJHtwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUsIGZhbHNlKX0vJHtlbmNvZGVVUklDb21wb25lbnQobm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpKX0vY2hpbGRyZW5gLFxuICAgICAgICAgICAge3BhcmFtczoge2luY2x1ZGU6IFwiQGlkLHByZWZMYWJlbCxoYXNDaGlsZHJlblwifX1cbiAgICAgICAgKSlbXCJjb2xsZWN0aW9uXCJdO1xuXG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiBIaWVyYXJjaHlOb2RlVG9FbnRpdHlEYXRhKGNoaWxkKSk7XG4gICAgfVxufSIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vYXBpL09sc0FwaSdcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tICdyZWFjdC1xdWVyeSdcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgaXNFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IEFsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0FsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuZnVuY3Rpb24gQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0KHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHVzZUxlZ2FjeSB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXCJhbHRlcm5hdGl2ZU5hbWVUYWJcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmIGlzRW50aXR5KGRhdGEpICYmXG4gICAgICAgIDxBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24gc3lub255bXM9e2RhdGEuZ2V0U3lub255bXMoKS5tYXAoc3lub255bSA9PiBzeW5vbnltLnZhbHVlKX0gLz59XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiYWx0ZXJuYXRpdmUgbmFtZXNcIil9PC9FdWlUZXh0Pn1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQWx0ZXJuYXRpdmVOYW1lVGFiKHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEFsdGVybmF0aXZlTmFtZVRhYldpZGdldChwcm9wczogQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQsIGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBDcm9zc1JlZldpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgaXNFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IENyb3NzUmVmVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9SZWlmaWVkXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBDcm9zc1JlZlRhYldpZGdldChwcm9wczogQ3Jvc3NSZWZXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHVzZUxlZ2FjeSB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXCJjcm9zc1JlZlRhYlwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiYgaXNFbnRpdHkoZGF0YSkgJiZcbiAgICAgICAgPENyb3NzUmVmVGFiUHJlc2VudGF0aW9uIGNyb3NzcmVmcz17UmVpZmllZC5mcm9tSnNvbihkYXRhLmdldENyb3NzUmVmZXJlbmNlcygpKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICB9KX0gLz59XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiY3Jvc3MgcmVmZXJlbmNlc1wiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDcm9zc1JlZlRhYihwcm9wczogQ3Jvc3NSZWZXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRDcm9zc1JlZlRhYldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkQ3Jvc3NSZWZUYWJXaWRnZXQocHJvcHM6IENyb3NzUmVmV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPENyb3NzUmVmVGFiV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBDcm9zc1JlZlRhYldpZGdldCwgY3JlYXRlQ3Jvc3NSZWZUYWIgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IFRpdGxlV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBpc09udG9sb2d5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBUaXRsZVByZXNlbnRhdGlvbiB9IGZyb20gXCIuL1RpdGxlUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBOT19USVRMRSA9IFwiTm8gdGl0bGUgYXZhaWxhYmxlLlwiO1xuXG5mdW5jdGlvbiBUaXRsZVdpZGdldChwcm9wczogVGl0bGVXaWRnZXRQcm9wcykge1xuICBjb25zdCB7XG4gICAgaXJpLFxuICAgIG9udG9sb2d5SWQsXG4gICAgYXBpLFxuICAgIHRpdGxlVGV4dCxcbiAgICB0aGluZ1R5cGUsXG4gICAgcGFyYW1ldGVyLFxuICAgIHVzZUxlZ2FjeSxcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgY2xhc3NOYW1lXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuICBjb25zdCBmaW5hbENsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcImRlZmF1bHQtY2xhc3NcIjtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXCJ0aXRsZURhdGFcIiwgYXBpLCBwYXJhbWV0ZXIsIHRoaW5nVHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0VGhpbmdPYmplY3QoaXJpLCB0aGluZ1R5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7dGl0bGVUZXh0ICYmXG4gICAgICAgIDxUaXRsZVByZXNlbnRhdGlvblxuICAgICAgICAgIHRpdGxlVGV4dD17dGl0bGVUZXh0fVxuICAgICAgICAgIGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9IC8+XG4gICAgICB9XG5cbiAgICAgIHshdGl0bGVUZXh0ICYmIGlzU3VjY2VzcyAmJiBkYXRhICYmXG4gICAgICAgIDxUaXRsZVByZXNlbnRhdGlvblxuICAgICAgICAgIHRpdGxlPXtpc09udG9sb2d5KGRhdGEpID8gZGF0YS5nZXROYW1lKCkgOiBkYXRhLmdldExhYmVsKCl9IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9IC8+XG4gICAgICB9XG5cbiAgICAgIHshdGl0bGVUZXh0ICYmIGlzTG9hZGluZyAmJiAoZGVmYXVsdFZhbHVlID8gKFxuICAgICAgICAgIDxUaXRsZVByZXNlbnRhdGlvbiB0aXRsZVRleHQ9e2RlZmF1bHRWYWx1ZX0gY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0gLz4pXG4gICAgICAgIDogPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJzXCIgLz4pXG4gICAgICB9XG5cbiAgICAgIHshdGl0bGVUZXh0ICYmIGlzRXJyb3IgJiYgKGRlZmF1bHRWYWx1ZSA/XG4gICAgICAgIDxUaXRsZVByZXNlbnRhdGlvbiB0aXRsZVRleHQ9e2RlZmF1bHRWYWx1ZX0gY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0gLz4gOlxuICAgICAgICA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcInRpdGxlXCIpfTwvRXVpVGV4dD4pfVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUaXRsZShwcm9wczogVGl0bGVXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpID0+IHZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRUaXRsZVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkVGl0bGVXaWRnZXQocHJvcHM6IFRpdGxlV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8VGl0bGVXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICB0aGluZ1R5cGU9e3Byb3BzLnRoaW5nVHlwZX1cbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIHRpdGxlVGV4dD17cHJvcHMudGl0bGVUZXh0fVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIGRlZmF1bHRWYWx1ZT17cHJvcHMuZGVmYXVsdFZhbHVlfVxuICAgICAgICAgIGNsYXNzTmFtZT17cHJvcHMuY2xhc3NOYW1lfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IFRpdGxlV2lkZ2V0LCBjcmVhdGVUaXRsZSB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1RpdGxlUHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gVGl0bGVQcmVzZW50YXRpb24ocHJvcHM6IFRpdGxlUHJlc2VudGF0aW9uUHJvcHMpIHtcblxuICByZXR1cm4gKFxuICAgIDxFdWlUZXh0IGNsYXNzTmFtZT17cHJvcHMuY2xhc3NOYW1lfT57cHJvcHMudGl0bGVUZXh0IHx8IHByb3BzLnRpdGxlfTwvRXVpVGV4dD5cbiAgKTtcbn1cblxuZXhwb3J0IHsgVGl0bGVQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0sIEV1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dCwgRXVpTGlua30gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgSXJpV2lkZ2V0IH0gZnJvbSBcIi4vSXJpV2lkZ2V0XCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge09sc0FwaX0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7TWV0YWRhdGFXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9CcmVhZGNydW1iV2lkZ2V0L0JyZWFkY3J1bWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IFRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL1RhYldpZGdldC9UYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IERlc2NyaXB0aW9uUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vRGVzY3JpcHRpb25XaWRnZXQvRGVzY3JpcHRpb25QcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IFRpdGxlUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGl0bGVXaWRnZXQvVGl0bGVQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtFbnRpdHlUeXBlTmFtZSwgaXNFbnRpdHl9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7Y3JlYXRlTW9kZWxPYmplY3QsIGdldFByZWZlcnJlZE9udG9sb2d5SlNPTn0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL01vZGVsT2JqZWN0Q3JlYXRvclwiO1xuaW1wb3J0IHtFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbn0gZnJvbSBcIi4vRW50aXR5T250b0xpc3RXaWRnZXQvRW50aXR5T250b0xpc3RQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7RW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9ufSBmcm9tIFwiLi9FbnRpdHlEZWZpbmVkQnlXaWRnZXQvRW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9zdHlsZS9zZW1sb29rcC1zdHlsZXMuY3NzXCJcblxudHlwZSBNZXRhZGF0YUluZm8gPSB7XG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgb250b0xpc3Q6IHN0cmluZ1tdLFxuICAgIGRlZmluZWRCeTogc3RyaW5nW11cbn1cblxuZnVuY3Rpb24gTWV0YWRhdGFXaWRnZXQocHJvcHM6IE1ldGFkYXRhV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBpcmksIGFwaSwgb250b2xvZ3lJZCwgZW50aXR5VHlwZSwgcGFyYW1ldGVyLCB1c2VMZWdhY3ksIG9uTmF2aWdhdGVUb09udG9sb2d5LCBoaWVyYXJjaHlUYWIsIGNyb3NzUmVmVGFiLCB0ZXJtaW5vbG9neUluZm9UYWIsIGFsdE5hbWVzVGFiLCB0ZXJtTGluayB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcbiAgY29uc3QgbWV0YWRhdGFXaWRnZXRDU1MgPSBgXG4gICAgLmJvbGRUZXh0e1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgfVxuICBgO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8TWV0YWRhdGFJbmZvPihcbiAgICBbXCJtZXRhZGF0YVwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IGVudGl0eTogRW50aXR5LCBvbnRvTGlzdDogc3RyaW5nW10sIGRlZmluZWRCeTogc3RyaW5nW107XG4gICAgICAgIGlmKHVzZUxlZ2FjeSkge1xuICAgICAgICAgICAgY29uc3QgZW1iZWRkZWQgPSAoYXdhaXQgb2xzQXBpLmdldEVudGl0eVJlc3BvbnNlKGlyaSwgZW50aXR5VHlwZSwgdW5kZWZpbmVkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSkpW1wiX2VtYmVkZGVkXCJdO1xuICAgICAgICAgICAgZW50aXR5ID0gY3JlYXRlTW9kZWxPYmplY3QoeyBcIl9lbWJlZGRlZFwiOiB7IFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dOiBnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oZW1iZWRkZWRbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXSwgdXNlTGVnYWN5LCBvbnRvbG9neUlkKSB9fSkgYXMgRW50aXR5O1xuICAgICAgICAgICAgb250b0xpc3QgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dXG4gICAgICAgICAgICAgICAgLm1hcCgoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuICAgICAgICAgICAgZGVmaW5lZEJ5ID0gZW1iZWRkZWRbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGVudGl0eUluT250b2xvZ3kgOiBhbnkpID0+IGVudGl0eUluT250b2xvZ3lbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSlcbiAgICAgICAgICAgICAgICAubWFwKChlbnRpdHlJbk9udG9sb2d5IDogYW55KSA9PiBlbnRpdHlJbk9udG9sb2d5W1wib250b2xvZ3lfbmFtZVwiXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbnRpdHkgPSBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgICAgICAgb250b0xpc3QgPSBlbnRpdHkuZ2V0QXBwZWFyc0luKCk7XG4gICAgICAgICAgICBkZWZpbmVkQnkgPSBlbnRpdHkuZ2V0RGVmaW5lZEJ5KCk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZpbmVkQnkgPSBkZWZpbmVkQnkuZmlsdGVyKChvbnRvOiBzdHJpbmcpID0+IG9udG8gIT0gZW50aXR5LmdldE9udG9sb2d5SWQoKSkuc29ydCgpO1xuICAgICAgICBvbnRvTGlzdCA9IG9udG9MaXN0LmZpbHRlcigob250byA6IHN0cmluZykgPT4gb250byAhPSBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpICYmICFkZWZpbmVkQnkuaW5jbHVkZXMob250bykpLnNvcnQoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW50aXR5OiBlbnRpdHksXG4gICAgICAgICAgICBvbnRvTGlzdDogb250b0xpc3QsXG4gICAgICAgICAgICBkZWZpbmVkQnk6IGRlZmluZWRCeVxuICAgICAgICB9IGFzIE1ldGFkYXRhSW5mbztcbiAgICB9XG4gICk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyKGRhdGE6IE1ldGFkYXRhSW5mbykge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8c3R5bGU+e21ldGFkYXRhV2lkZ2V0Q1NTfTwvc3R5bGU+XG4gICAgICAgIDxFdWlGbGV4R3JvdXAgZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfSBzdHlsZT17eyBtYXhXaWR0aDogNjAwIH19PlxuICAgICAgICAgICAgICAgIHt0ZXJtTGluayA/XG4gICAgICAgICAgICAgICAgICA8RXVpTGluayBocmVmPXt0ZXJtTGlua30gdGFyZ2V0PVwiX2JsYW5rXCIgZXh0ZXJuYWw9e2ZhbHNlfT5cbiAgICAgICAgICAgICAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXtkYXRhLmVudGl0eS5nZXRMYWJlbCgpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib2xkVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0V1aUxpbms+XG4gICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICA8VGl0bGVQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9e2RhdGEuZW50aXR5LmdldExhYmVsKCl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvbGRUZXh0XCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfT5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxCcmVhZGNydW1iUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17b250b2xvZ3lJZCB8fCBkYXRhLmVudGl0eS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5TmFtZT17ZGF0YS5lbnRpdHkuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICAgICAgICAgICAgICBzaG9ydEZvcm09e2RhdGEuZW50aXR5LmdldFNob3J0Rm9ybSgpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8RXVpRmxleEdyb3VwIGRpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPEV1aUZsZXhHcm91cD5cbiAgICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0gc3R5bGU9e3sgbWF4V2lkdGg6IDYwMCB9fT5cbiAgICAgICAgICAgICAgICAgICAgPElyaVdpZGdldFxuICAgICAgICAgICAgICAgICAgICAgIGlyaT17aXJpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgPEV1aUZsZXhJdGVtIHN0eWxlPXt7IG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICA8RGVzY3JpcHRpb25QcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249e2RhdGEuZW50aXR5LmdldERlc2NyaXB0aW9uKCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7bWFyZ2luOiBcIjAgMTJweCAwXCIsIG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICAgIDxFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbiBpcmk9e3Byb3BzLmlyaX0gbGFiZWw9e2RhdGEuZW50aXR5LmdldExhYmVsKCkgfHwgXCJcIn0gb250b2xpc3Q9e2RhdGEub250b0xpc3R9IGVudGl0eVR5cGU9e2VudGl0eVR5cGUgfHwgZGF0YS5lbnRpdHkuZ2V0VHlwZSgpIGFzIEVudGl0eVR5cGVOYW1lfSBvbk5hdmlnYXRlVG9PbnRvbG9neT17b25OYXZpZ2F0ZVRvT250b2xvZ3l9IC8+XG4gICAgICAgICAgICAgIDxFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24gaXJpPXtwcm9wcy5pcml9IG9udG9saXN0PXtkYXRhLmRlZmluZWRCeX0gbGFiZWw9e2RhdGEuZW50aXR5LmdldExhYmVsKCkgfHwgXCJcIn0gZW50aXR5VHlwZT17ZW50aXR5VHlwZSB8fCBkYXRhLmVudGl0eS5nZXRUeXBlKCkgYXMgRW50aXR5VHlwZU5hbWV9IG9uTmF2aWdhdGVUb09udG9sb2d5PXtvbk5hdmlnYXRlVG9PbnRvbG9neX0gLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgPFRhYlByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgIGRhdGE9e2RhdGEuZW50aXR5fVxuICAgICAgICAgICAgICAgIGlyaT17aXJpfVxuICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgYXBpPXthcGl9XG4gICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZCA/IHByb3BzLm9udG9sb2d5SWQgOiBkYXRhLmVudGl0eS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgICAgICAgdXNlTGVnYWN5PXt1c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgaGllcmFyY2h5VGFiPXtoaWVyYXJjaHlUYWJ9XG4gICAgICAgICAgICAgICAgY3Jvc3NSZWZUYWI9e2Nyb3NzUmVmVGFifVxuICAgICAgICAgICAgICAgIHRlcm1pbm9sb2d5SW5mb1RhYj17dGVybWlub2xvZ3lJbmZvVGFifVxuICAgICAgICAgICAgICAgIGFsdE5hbWVzVGFiPXthbHROYW1lc1RhYn1cbiAgICAgICAgICAgICAgICBoaWVyYXJjaHlQcmVmZXJyZWRSb290cz17cHJvcHMuaGllcmFyY2h5UHJlZmVycmVkUm9vdHN9XG4gICAgICAgICAgICAgICAgaGllcmFyY2h5U2hvd1NpYmxpbmdzT25Jbml0PXtwcm9wcy5oaWVyYXJjaHlTaG93U2libGluZ3NPbkluaXR9XG4gICAgICAgICAgICAgICAgaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMuaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcIm1ldGFkYXRhXCIpfTwvRXVpVGV4dD59XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPD5cbiAgICAgICAgICB7aXNFbnRpdHkoZGF0YS5lbnRpdHkpID8gcmVuZGVyKGRhdGEpIDogbnVsbH1cbiAgICAgICAgPC8+XG4gICAgICB9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1ldGFkYXRhKHByb3BzOiBNZXRhZGF0YVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZE1ldGFkYXRhV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRNZXRhZGF0YVdpZGdldChwcm9wczogTWV0YWRhdGFXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8TWV0YWRhdGFXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgIHRlcm1MaW5rPXtwcm9wcy50ZXJtTGlua31cbiAgICAgICAgICAgICAgICAgICAgYWx0TmFtZXNUYWI9e3Byb3BzLmFsdE5hbWVzVGFifVxuICAgICAgICAgICAgICAgICAgICBoaWVyYXJjaHlUYWI9e3Byb3BzLmhpZXJhcmNoeVRhYn1cbiAgICAgICAgICAgICAgICAgICAgY3Jvc3NSZWZUYWI9e3Byb3BzLmNyb3NzUmVmVGFifVxuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5vbG9neUluZm9UYWI9e3Byb3BzLnRlcm1pbm9sb2d5SW5mb1RhYn1cbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2h5UHJlZmVycmVkUm9vdHM9e3Byb3BzLmhpZXJhcmNoeVByZWZlcnJlZFJvb3RzfVxuICAgICAgICAgICAgICAgICAgICBoaWVyYXJjaHlTaG93U2libGluZ3NPbkluaXQ9e3Byb3BzLmhpZXJhcmNoeVNob3dTaWJsaW5nc09uSW5pdH1cbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMuaGllcmFyY2h5S2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IE1ldGFkYXRhV2lkZ2V0LCBjcmVhdGVNZXRhZGF0YSB9O1xuIiwgImltcG9ydCBSZWFjdCwge3VzZVN0YXRlfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7cmFuZG9tU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcblxuY29uc3QgTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSA9IDUgYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uKHByb3BzOiBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblByb3BzKSB7XG5cbiAgICBjb25zdCBbYXBwZWFyc0luRXhwYW5kZWQsIHNldEFwcGVhcnNJbkV4cGFuZGVkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblxuICBmdW5jdGlvbiByZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3k6IHN0cmluZykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtpZihwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSkgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kob250b2xvZ3ksIHByb3BzLmVudGl0eVR5cGUgfHwgXCJcIiwgeyBpcmk6IHByb3BzLmlyaSwgbGFiZWw6IHByb3BzLmxhYmVsIH0pfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+e29udG9sb2d5LnRvVXBwZXJDYXNlKCl9PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgKTtcbiAgfVxuXG4gICAgZnVuY3Rpb24gcmVuZGVyT250b0JhZGdlcygpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHByb3BzLm9udG9saXN0Lmxlbmd0aCA+IE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkgJiYgIWFwcGVhcnNJbkV4cGFuZGVkP1xuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy5vbnRvbGlzdC5zbGljZSgwLCBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZKS5tYXAoKG9udG9sb2d5OiBzdHJpbmcpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImV4cGFuZC1vbnRvLWxpc3RcIiBvbkNsaWNrPXsoKSA9PiBzZXRBcHBlYXJzSW5FeHBhbmRlZCh0cnVlKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICArIHtwcm9wcy5vbnRvbGlzdC5sZW5ndGggLSBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZfVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8Lz4gOlxuXG4gICAgICAgICAgICAgICAgcHJvcHMub250b2xpc3QubWFwKChvbnRvbG9neTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgICB7cHJvcHMub250b2xpc3QgJiYgcHJvcHMub250b2xpc3QubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8RXVpVGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6IFwibm9ybWFsXCJ9fT5cbiAgICAgICAgICAgICAgICBBbHNvIGFwcGVhcnMgaW4mbmJzcDtcbiAgICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlcygpfVxuICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICApfVxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgeyBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCwge3VzZVN0YXRlfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7cmFuZG9tU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcblxuY29uc3QgTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSA9IDUgYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbihwcm9wczogRW50aXR5T250b0xpc3RQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gICAgY29uc3QgW2FwcGVhcnNJbkV4cGFuZGVkLCBzZXRBcHBlYXJzSW5FeHBhbmRlZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyT250b0JhZGdlKG9udG9sb2d5OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e3JhbmRvbVN0cmluZygpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KG9udG9sb2d5LCBwcm9wcy5lbnRpdHlUeXBlIHx8IFwiXCIsIHsgaXJpOiBwcm9wcy5pcmksIGxhYmVsOiBwcm9wcy5sYWJlbCB9KX19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPntvbnRvbG9neS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJPbnRvQmFkZ2VzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgICBwcm9wcy5vbnRvbGlzdC5sZW5ndGggPiBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZICYmICFhcHBlYXJzSW5FeHBhbmRlZD9cbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHtwcm9wcy5vbnRvbGlzdC5zbGljZSgwLCBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZKS5tYXAoKG9udG9sb2d5OiBzdHJpbmcpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlck9udG9CYWRnZShvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJleHBhbmQtb250by1saXN0XCIgb25DbGljaz17KCkgPT4gc2V0QXBwZWFyc0luRXhwYW5kZWQodHJ1ZSl9PlxuICAgICAgICAgICAgICAgICAgICAgICsge3Byb3BzLm9udG9saXN0Lmxlbmd0aCAtIE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVl9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC8+IDpcblxuICAgICAgICAgICAgICBwcm9wcy5vbnRvbGlzdC5tYXAoKG9udG9sb2d5OiBzdHJpbmcpID0+IChcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICApKVxuICAgICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgICAge3Byb3BzLm9udG9saXN0ICYmIHByb3BzLm9udG9saXN0Lmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPEV1aVRleHQgc3R5bGU9e3tmb250V2VpZ2h0OiBcIm5vcm1hbFwifX0+XG4gICAgICAgICAgICAgICAgRGVmaW5lZCBieSZuYnNwO1xuICAgICAgICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2VzKCl9XG4gICAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICl9XG4gICAgPC8+XG5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBDb21wYXJhdG9ycyxcbiAgQ3JpdGVyaWFXaXRoUGFnaW5hdGlvbixcbiAgRXVpQmFzaWNUYWJsZSxcbiAgRXVpQnV0dG9uSWNvbixcbiAgRXVpSG9yaXpvbnRhbFJ1bGUsXG4gIEV1aVByb3ZpZGVyLFxuICBFdWlMaW5rLFxuICBFdWlTcGFjZXIsXG4gIEV1aVRleHRcbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGNzcywgU2VyaWFsaXplZFN0eWxlcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuaW1wb3J0IHsgRXVpQmFzaWNUYWJsZUNvbHVtbiB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvYmFzaWNfdGFibGVcIjtcbmltcG9ydCB7IE9sc1Jlc291cmNlLCBSZXNvdXJjZXNXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IE9udG9sb2dpZXMgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgREVGQVVMVF9JTklUSUFMX0VOVFJJRVNfUEVSX1BBR0UgPSAxMDtcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMgPSBbMTAsIDI1LCA1MCwgMTAwXTtcbmNvbnN0IERFRkFVTFRfSU5JVElBTF9TT1JUX0ZJRUxEID0gXCJjb25maWcucHJlZmVycmVkUHJlZml4XCI7XG5jb25zdCBERUZBVUxUX0lOSVRJQUxfU09SVF9ESVIgPSBcImFzY1wiIGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBSZXNvdXJjZXNXaWRnZXQocHJvcHM6IFJlc291cmNlc1dpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBhcGksXG4gICAgaW5pdGlhbEVudHJpZXNQZXJQYWdlID0gREVGQVVMVF9JTklUSUFMX0VOVFJJRVNfUEVSX1BBR0UsXG4gICAgcGFnZVNpemVPcHRpb25zID0gREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyxcbiAgICBpbml0aWFsU29ydEZpZWxkID0gREVGQVVMVF9JTklUSUFMX1NPUlRfRklFTEQsXG4gICAgaW5pdGlhbFNvcnREaXIgPSBERUZBVUxUX0lOSVRJQUxfU09SVF9ESVIsXG4gICAgdGFyZ2V0TGluayxcbiAgICBwYXJhbWV0ZXIsXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IFtwYWdlSW5kZXgsIHNldFBhZ2VJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3BhZ2VTaXplLCBzZXRQYWdlU2l6ZV0gPSB1c2VTdGF0ZShpbml0aWFsRW50cmllc1BlclBhZ2UpO1xuICBjb25zdCBbc29ydEZpZWxkLCBzZXRTb3J0RmllbGRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVtYmVyPihpbml0aWFsU29ydEZpZWxkKTtcbiAgY29uc3QgW3NvcnREaXJlY3Rpb24sIHNldFNvcnREaXJlY3Rpb25dID0gdXNlU3RhdGUoaW5pdGlhbFNvcnREaXIpO1xuXG5cbiAgY29uc3QgY29sdW1uczogQXJyYXk8RXVpQmFzaWNUYWJsZUNvbHVtbjxPbHNSZXNvdXJjZT4gJiB7IGNzcz86IFNlcmlhbGl6ZWRTdHlsZXMgfT4gPSBbXG4gICAge1xuICAgICAgbmFtZTogXCJSZXNvdXJjZSBOYW1lXCIsXG4gICAgICBmaWVsZDogXCJjb25maWcudGl0bGVcIixcbiAgICAgIHdpZHRoOiBcIjE1JVwiLFxuICAgICAgc29ydGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiU2hvcnQgTmFtZVwiLFxuICAgICAgZmllbGQ6IFwib250b2xvZ3lJZFwiLFxuICAgICAgcmVuZGVyOiAodmFsdWU6IHN0cmluZykgPT4gKFxuICAgICAgICB0YXJnZXRMaW5rID8gPEV1aUxpbmsgaHJlZj17dGFyZ2V0TGluayArIFwib250b2xvZ2llcy9cIiArIHZhbHVlICsgXCIvXCJ9Pnt2YWx1ZX08L0V1aUxpbms+IDogdmFsdWVcbiAgICAgICksXG4gICAgICB3aWR0aDogXCIxMCVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIkRlc2NyaXB0aW9uXCIsXG4gICAgICBmaWVsZDogXCJjb25maWcuZGVzY3JpcHRpb25cIixcbiAgICAgIC8vIHdpZHRoOiBcIjMwJVwiLFxuICAgICAgY3NzOiBjc3NgXG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7XG4gICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBgXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlZlcnNpb25cIixcbiAgICAgIGZpZWxkOiBcImNvbmZpZy52ZXJzaW9uXCIsXG4gICAgICB3aWR0aDogXCI3LjUlXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiTG9hZGVkIG9uXCIsXG4gICAgICBmaWVsZDogXCJsb2FkZWRcIixcbiAgICAgIHdpZHRoOiBcIjEwJVwiLFxuICAgICAgZGF0YVR5cGU6IFwiZGF0ZVwiIGFzIGNvbnN0LFxuICAgICAgc29ydGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiVGVybXNcIixcbiAgICAgIGZpZWxkOiBcIm51bWJlck9mVGVybXNcIixcbiAgICAgIHJlbmRlcjogKHZhbHVlOiBudW1iZXIpID0+IDw+e3ZhbHVlLnRvTG9jYWxlU3RyaW5nKCl9PC8+LFxuICAgICAgd2lkdGg6IFwiNy41JVwiLFxuICAgICAgc29ydGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiUHJvcGVydGllc1wiLFxuICAgICAgZmllbGQ6IFwibnVtYmVyT2ZQcm9wZXJ0aWVzXCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiA8Pnt2YWx1ZS50b0xvY2FsZVN0cmluZygpfTwvPixcbiAgICAgIHdpZHRoOiBcIjcuNSVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIkluZGl2aWR1YWxzXCIsXG4gICAgICBmaWVsZDogXCJudW1iZXJPZkluZGl2aWR1YWxzXCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiA8Pnt2YWx1ZS50b0xvY2FsZVN0cmluZygpfTwvPixcbiAgICAgIHdpZHRoOiBcIjcuNSVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICB3aWR0aDogXCI1JVwiLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAuLi4ocHJvcHMuYWN0aW9ucyB8fCBbXSksXG4gICAgICAgIHtcbiAgICAgICAgICByZW5kZXI6IChpdGVtOiBPbHNSZXNvdXJjZSkgPT4gKFxuICAgICAgICAgICAgPEV1aUJ1dHRvbkljb25cbiAgICAgICAgICAgICAgaHJlZj17aXRlbS5jb25maWcuZmlsZUxvY2F0aW9ufVxuICAgICAgICAgICAgICBpY29uVHlwZT1cImRvd25sb2FkXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRvd25sb2FkXCJcbiAgICAgICAgICAgICAgaXNEaXNhYmxlZD17XG4gICAgICAgICAgICAgICAgIWl0ZW0uY29uZmlnLmFsbG93RG93bmxvYWQgfHxcbiAgICAgICAgICAgICAgICBpdGVtLmNvbmZpZy5maWxlTG9jYXRpb24uc3RhcnRzV2l0aChcImZpbGU6Ly9cIilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgY29uc3Qgb25UYWJsZUNoYW5nZSA9ICh7XG4gICAgcGFnZSxcbiAgICBzb3J0LFxuICB9OiBDcml0ZXJpYVdpdGhQYWdpbmF0aW9uPE9sc1Jlc291cmNlPikgPT4ge1xuICAgIGNvbnN0IHsgaW5kZXg6IHBhZ2VJbmRleCwgc2l6ZTogcGFnZVNpemUgfSA9IHBhZ2U7XG4gICAgc2V0UGFnZUluZGV4KHBhZ2VJbmRleCk7XG4gICAgc2V0UGFnZVNpemUocGFnZVNpemUpO1xuXG4gICAgaWYgKHNvcnQpIHtcbiAgICAgIGNvbnN0IHsgZmllbGQ6IHNvcnRGaWVsZCwgZGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uIH0gPSBzb3J0O1xuICAgICAgc2V0U29ydEZpZWxkKHNvcnRGaWVsZCk7XG4gICAgICBzZXRTb3J0RGlyZWN0aW9uKHNvcnREaXJlY3Rpb24pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB7XG4gICAgZGF0YTogb250b2xvZ2llc0RhdGEsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgaXNMb2FkaW5nXG4gIH0gPSB1c2VRdWVyeTxPbnRvbG9naWVzPihcbiAgICBbXCJvbnRvbG9naWVzRGF0YVwiLCBhcGksIHBhcmFtZXRlcl0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRPbnRvbG9naWVzRGF0YShcbiAgICAgICAgcHJvcHMucGFyYW1ldGVyLFxuICAgICAgKTtcbiAgICB9XG4gICk7XG5cblxuICBjb25zdCBvbnRvcyA9IG9udG9sb2dpZXNEYXRhPy5wcm9wZXJ0aWVzLm1hcChvbnRvbG9neSA9PiAoe1xuICAgIC4uLm9udG9sb2d5LnByb3BlcnRpZXNcbiAgfSkpIHx8IFtdO1xuY29uc29sZS5sb2cob250b3MpXG4gIGNvbnN0IGZpbmRPbnRvbG9naWVzID0gKFxuICAgIG9udG9sb2dpZXM6IGFueVtdLFxuICAgIHBhZ2VJbmRleDogbnVtYmVyLFxuICAgIHBhZ2VTaXplOiBudW1iZXIsXG4gICAgc29ydEZpZWxkOiBhbnksXG4gICAgc29ydERpcmVjdGlvbjogXCJhc2NcIiB8IFwiZGVzY1wiXG4gICkgPT4ge1xuICAgIGxldCBpdGVtcztcblxuICAgIGlmIChzb3J0RmllbGQpIHtcbiAgICAgIGl0ZW1zID0gb250b2xvZ2llc1xuICAgICAgICAuc2xpY2UoMClcbiAgICAgICAgLnNvcnQoXG4gICAgICAgICAgQ29tcGFyYXRvcnMucHJvcGVydHkoc29ydEZpZWxkLCBDb21wYXJhdG9ycy5kZWZhdWx0KHNvcnREaXJlY3Rpb24pKVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtcyA9IG9udG9sb2dpZXM7XG4gICAgfVxuXG4gICAgbGV0IHBhZ2VPZkl0ZW1zO1xuXG4gICAgaWYgKCFwYWdlSW5kZXggJiYgIXBhZ2VTaXplKSB7XG4gICAgICBwYWdlT2ZJdGVtcyA9IGl0ZW1zO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gcGFnZUluZGV4ICogcGFnZVNpemU7XG4gICAgICBwYWdlT2ZJdGVtcyA9IGl0ZW1zLnNsaWNlKFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBNYXRoLm1pbihzdGFydEluZGV4ICsgcGFnZVNpemUsIG9udG9sb2dpZXMubGVuZ3RoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFnZU9mSXRlbXMsXG4gICAgICB0b3RhbEl0ZW1Db3VudDogb250b2xvZ2llcy5sZW5ndGhcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IHsgcGFnZU9mSXRlbXMsIHRvdGFsSXRlbUNvdW50IH0gPSBmaW5kT250b2xvZ2llcyhcbiAgICBvbnRvcyxcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgc29ydEZpZWxkLFxuICAgIHNvcnREaXJlY3Rpb25cbiAgKTtcblxuICBjb25zdCBwYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VJbmRleCxcbiAgICBwYWdlU2l6ZSxcbiAgICB0b3RhbEl0ZW1Db3VudCxcbiAgICBwYWdlU2l6ZU9wdGlvbnNcbiAgfTtcblxuICBjb25zdCByZXN1bHRzQ291bnQgPVxuICAgIHBhZ2VTaXplID09PSAwID8gKFxuICAgICAgPHN0cm9uZz5BbGw8L3N0cm9uZz5cbiAgICApIDogKFxuICAgICAgPD5cbiAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICB7cGFnZVNpemUgKiBwYWdlSW5kZXggKyAxfS17cGFnZVNpemUgKiBwYWdlSW5kZXggKyBwYWdlU2l6ZX1cbiAgICAgICAgPC9zdHJvbmc+e1wiIFwifVxuICAgICAgICBvZiB7dG90YWxJdGVtQ291bnR9XG4gICAgICA8Lz5cbiAgICApO1xuXG5cbiAgY29uc3Qgc29ydGluZyA9IHtcbiAgICBzb3J0OiB7XG4gICAgICBmaWVsZDogc29ydEZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uXG4gICAgfVxuICB9O1xuXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJlxuICAgICAgICA8PlxuICAgICAgICAgIDxFdWlUZXh0IHNpemU9XCJ4c1wiPlxuICAgICAgICAgICAgU2hvd2luZyB7cmVzdWx0c0NvdW50fSA8c3Ryb25nPk9udG9sb2dpZXM8L3N0cm9uZz5cbiAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG4gICAgICAgICAgPEV1aUhvcml6b250YWxSdWxlIG1hcmdpbj1cIm5vbmVcIiBzdHlsZT17eyBoZWlnaHQ6IDIgfX0gLz5cblxuICAgICAgICAgIDxFdWlCYXNpY1RhYmxlXG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgaXRlbXM9e3BhZ2VPZkl0ZW1zfVxuICAgICAgICAgICAgb25DaGFuZ2U9e29uVGFibGVDaGFuZ2V9XG4gICAgICAgICAgICBwYWdpbmF0aW9uPXtwYWdpbmF0aW9ufVxuICAgICAgICAgICAgc29ydGluZz17c29ydGluZ31cbiAgICAgICAgICAvPlxuICAgICAgICA8Lz5cbiAgICAgIH1cbiAgICAgIHtpc0xvYWRpbmcgJiZcbiAgICAgICAgPEV1aUJhc2ljVGFibGVcbiAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgIGl0ZW1zPXtwYWdlT2ZJdGVtc31cbiAgICAgICAgICBvbkNoYW5nZT17b25UYWJsZUNoYW5nZX1cbiAgICAgICAgICBwYWdpbmF0aW9uPXtwYWdpbmF0aW9ufVxuICAgICAgICAgIHNvcnRpbmc9e3NvcnRpbmd9XG4gICAgICAgICAgbG9hZGluZ1xuICAgICAgICAvPlxuXG4gICAgICB9XG4gICAgICB7aXNFcnJvciAmJlxuICAgICAgICA8RXVpQmFzaWNUYWJsZVxuICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgaXRlbXM9e3BhZ2VPZkl0ZW1zfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvblRhYmxlQ2hhbmdlfVxuICAgICAgICAgIHBhZ2luYXRpb249e3BhZ2luYXRpb259XG4gICAgICAgICAgc29ydGluZz17c29ydGluZ31cbiAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj17Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcInJlc291cmNlc1wiKX1cbiAgICAgICAgICAqL1xuICAgICAgICAvPlxuICAgICAgfVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXNvdXJjZXMocHJvcHM6IFJlc291cmNlc1dpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRSZXNvdXJjZXNXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFJlc291cmNlc1dpZGdldChwcm9wczogUmVzb3VyY2VzV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8UmVzb3VyY2VzV2lkZ2V0XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBpbml0aWFsRW50cmllc1BlclBhZ2U9e3Byb3BzLmluaXRpYWxFbnRyaWVzUGVyUGFnZX1cbiAgICAgICAgICAgICAgcGFnZVNpemVPcHRpb25zPXtwcm9wcy5wYWdlU2l6ZU9wdGlvbnN9XG4gICAgICAgICAgICAgIGluaXRpYWxTb3J0RmllbGQ9e3Byb3BzLmluaXRpYWxTb3J0RmllbGR9XG4gICAgICAgICAgICAgIGluaXRpYWxTb3J0RGlyPXtwcm9wcy5pbml0aWFsU29ydERpcn1cbiAgICAgICAgICAgICAgdGFyZ2V0TGluaz17cHJvcHMudGFyZ2V0TGlua31cbiAgICAgICAgICAgICAgYWN0aW9ucz17cHJvcHMuYWN0aW9uc31cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBSZXNvdXJjZXNXaWRnZXQsIGNyZWF0ZVJlc291cmNlcyB9O1xuIiwgImltcG9ydCB7IEV1aUNvbWJvQm94LCBFdWlQcm92aWRlciB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBTZWFyY2hCYXJXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbk9wdGlvbiB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvY29tYm9fYm94L3R5cGVzXCI7XG5cbmZ1bmN0aW9uIFNlYXJjaEJhcldpZGdldChwcm9wczogU2VhcmNoQmFyV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBxdWVyeSxcbiAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAvKipcbiAgICogc3VnZ2VzdGlvbnNcbiAgICovXG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVN0YXRlPEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+PigpO1xuXG4gIC8qKlxuICAgKiBzZWxlY3RlZCBzdWdnZXN0aW9uIChvbiBjbGljaylcbiAgICovXG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkXSA9IHVzZVN0YXRlPEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+PihbXSk7XG5cbiAgLyoqXG4gICAqIGN1cnJlbnQgc2VhcmNoIHZhbHVlXG4gICAqL1xuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlPHN0cmluZz4ocXVlcnkpO1xuXG4gIGNvbnN0IG9uQ2hhbmdlID0gKHNlbGVjdGVkT3B0aW9uOiBBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+PikgPT4ge1xuICAgIHNldFNlbGVjdGVkKHNlbGVjdGVkT3B0aW9uKTtcbiAgfTtcblxuICBjb25zdCBvbkNyZWF0ZU9wdGlvbiA9IChzZWFyY2hWYWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld09wdGlvbjogQXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4gPSBbe1xuICAgICAgbGFiZWw6IHNlYXJjaFZhbHVlXG4gICAgfV07XG5cbiAgICBzZXRTZWxlY3RlZChuZXdPcHRpb24pO1xuICB9O1xuXG5cbiAgLyoqXG4gICAqIGZldGNoZXMgc3VnZ2VzdGlvbnMgd2hlbiBzZWFyY2hWYWx1ZSBjaGFuZ2VzXG4gICAqL1xuICBjb25zdCB7XG4gICAgaXNMb2FkaW5nXG4gIH0gPSB1c2VRdWVyeShcbiAgICBbXG4gICAgICBcInN1Z2dlc3Rpb25zXCIsXG4gICAgICBzZWFyY2hWYWx1ZVxuICAgIF0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZWFyY2hWYWx1ZS50cmltKCkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBFeGl0IGVhcmx5IGlmIHNlYXJjaFZhbHVlIGlzIGVtcHR5XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xzQXBpLnN1Z2dlc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeTogc2VhcmNoVmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHByb3BzLnBhcmFtZXRlclxuICAgICAgKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UucmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzcG9uc2UuZG9jcykge1xuICAgICAgICAgIHNldE9wdGlvbnMocmVzcG9uc2UucmVzcG9uc2UuZG9jcy5tYXAoKHN1Z2dlc3Rpb246IGFueSkgPT4gKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogc3VnZ2VzdGlvbi5hdXRvc3VnZ2VzdCxcbiAgICAgICAgICAgICAgdHlwZTogeyBjb2xvcjogXCJ0aW50MVwiLCBpY29uVHlwZTogXCJcIiB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICk7XG5cbiAgLyoqXG4gICAqIE9uY2UgdGhlIHNlbGVjdGVkIG9wdGlvbiBjaGFuZ2VzLCBwYXNzIHRoZSBldmVudCBieSBpbnZva2luZyB0aGUgcGFzc2VkIGZ1bmN0aW9uLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQoXG4gICAgICBzZWxlY3RlZE9wdGlvbnMubWFwKChzZWxlY3RlZE9wdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhYmVsOiBzZWxlY3RlZE9wdGlvbi5sYWJlbFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbc2VsZWN0ZWRPcHRpb25zXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEV1aUNvbWJvQm94XG4gICAgICAgIGlkPXtcInN1Z2dlc3RcIn1cbiAgICAgICAgaXNDbGVhcmFibGVcbiAgICAgICAgYXJpYS1sYWJlbD1cInNlYXJjaEJhclwiXG4gICAgICAgIGZ1bGxXaWR0aD17dHJ1ZX1cbiAgICAgICAgYXN5bmM9e3RydWV9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtcIlNlYXJjaFwifVxuICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uPXt0cnVlfVxuICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zPXtzZWxlY3RlZE9wdGlvbnN9XG4gICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgb25DcmVhdGVPcHRpb249e29uQ3JlYXRlT3B0aW9ufVxuICAgICAgICBvblNlYXJjaENoYW5nZT17KGl0ZW0pID0+IHtcbiAgICAgICAgICBzZXRTZWFyY2hWYWx1ZShpdGVtKTtcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaEJhcihwcm9wczogU2VhcmNoQmFyV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogYW55LCBjYWxsYmFjaz86ICgpID0+IHZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRTZWFyY2hCYXJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFNlYXJjaEJhcldpZGdldChwcm9wczogU2VhcmNoQmFyV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8U2VhcmNoQmFyV2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgcXVlcnk9e3Byb3BzLnF1ZXJ5fVxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudD17cHJvcHMuc2VsZWN0aW9uQ2hhbmdlZEV2ZW50fVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IFNlYXJjaEJhcldpZGdldCwgY3JlYXRlU2VhcmNoQmFyIH07XG4iLCAiaW1wb3J0IHtcbiAgRXVpQnV0dG9uRW1wdHksXG4gIEV1aUZsZXhHcm91cCxcbiAgRXVpRmxleEl0ZW0sXG4gIEV1aUZvcm1Sb3csXG4gIEV1aUhvcml6b250YWxSdWxlLFxuICBFdWlMb2FkaW5nU3Bpbm5lcixcbiAgRXVpUGFuZWwsIEV1aVByb3ZpZGVyLFxuICBFdWlTZWxlY3RhYmxlLFxuICBFdWlTZWxlY3RhYmxlT3B0aW9uLFxuICBFdWlTcGFjZXIsXG4gIEV1aVN3aXRjaCxcbiAgRXVpVGFibGVQYWdpbmF0aW9uLFxuICBFdWlUZXh0XG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBNZXRhZGF0YUNvbXBhY3QgfSBmcm9tIFwiLi9NZXRhZGF0YUNvbXBhY3RcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVXaWRnZXQgfSBmcm9tIFwiLi4vQXV0b2NvbXBsZXRlV2lkZ2V0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgU2VhcmNoQmFyV2lkZ2V0IH0gZnJvbSBcIi4uL1NlYXJjaEJhcldpZGdldFwiO1xuXG5jb25zdCBERUZBVUxUX0lOSVRJQUxfSVRFTVNfUEVSX1BBR0UgPSAxMDtcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMgPSBbMTAsIDI1LCA1MCwgMTAwXTtcblxuZnVuY3Rpb24gU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQocHJvcHM6IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBxdWVyeSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgaW5pdGlhbEl0ZW1zUGVyUGFnZSA9IERFRkFVTFRfSU5JVElBTF9JVEVNU19QRVJfUEFHRSxcbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyxcbiAgICB0YXJnZXRMaW5rLFxuICAgIHByZXNlbGVjdGVkLFxuICAgIHVzZUxlZ2FjeSA9IHRydWUsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlKHF1ZXJ5KTtcbiAgY29uc3QgW2FjdGl2ZVBhZ2UsIHNldEFjdGl2ZVBhZ2VdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtwYWdlQ291bnQsIHNldFBhZ2VDb3VudF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2l0ZW1zUGVyUGFnZSwgc2V0SXRlbXNQZXJQYWdlXSA9IHVzZVN0YXRlKGluaXRpYWxJdGVtc1BlclBhZ2UpO1xuICBjb25zdCBbdG90YWxJdGVtcywgc2V0VG90YWxJdGVtc10gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2V4YWN0TWF0Y2gsIHNldEV4YWN0TWF0Y2hdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd09ic29sZXRlVGVybXMsIHNldFNob3dPYnNvbGV0ZVRlcm1zXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2ZpbHRlckJ5VHlwZU9wdGlvbnMsIHNldEZpbHRlckJ5VHlwZU9wdGlvbnNdID0gdXNlU3RhdGU8RXVpU2VsZWN0YWJsZU9wdGlvbltdPihbXSk7XG4gIGNvbnN0IFtmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucywgc2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnNdID0gdXNlU3RhdGU8RXVpU2VsZWN0YWJsZU9wdGlvbltdPihbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTZWFyY2hWYWx1ZShxdWVyeSk7XG4gIH0sIFtxdWVyeV0pO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZpbHRlck9wdGlvbnMoY3VycmVudE9wdGlvbnM6IEV1aVNlbGVjdGFibGVPcHRpb25bXSwgb3B0aW9uQ291bnRzOiBhbnlbXSwgc2V0T3B0aW9uczogRnVuY3Rpb24sIHJlbmRlcj86ICh2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmcpIHtcbiAgICBpZiAoY3VycmVudE9wdGlvbnMubGVuZ3RoID09IDApIHtcbiAgICAgIHNldE9wdGlvbnMob3B0aW9uQ291bnRzLnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueVtdLCBjdXJyZW50VmFsdWU6IHN0cmluZywgY3VycmVudEluZGV4OiBudW1iZXIsIGFycmF5OiBhbnlbXSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudEluZGV4ICUgMiA9PT0gMCkge1xuICAgICAgICAgIGFjY3VtdWxhdG9yLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IHJlbmRlciA/IHJlbmRlcihjdXJyZW50VmFsdWUpIDogY3VycmVudFZhbHVlLFxuICAgICAgICAgICAga2V5OiBjdXJyZW50VmFsdWUsXG4gICAgICAgICAgICBhcHBlbmQ6IFwiKFwiICsgYXJyYXlbY3VycmVudEluZGV4ICsgMV0gKyBcIilcIixcbiAgICAgICAgICAgIGRpc2FibGVkOiBhcnJheVtjdXJyZW50SW5kZXggKyAxXSA9PSAwLFxuICAgICAgICAgICAgZGF0YTogeyB0b3RhbENvdW50OiBhcnJheVtjdXJyZW50SW5kZXggKyAxXSB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfSwgW10pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3T3B0aW9uczogRXVpU2VsZWN0YWJsZU9wdGlvbltdID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5ld09wdGlvbnMucHVzaChPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50T3B0aW9uc1tpXSkpOyAvLyB1c2luZyBPYmplY3QuYXNzaWduIHRvIHBhc3MgYnkgdmFsdWUsIG5vdCBieSByZWZlcmVuY2VcbiAgICAgIH1cblxuICAgICAgb3B0aW9uQ291bnRzLmZvckVhY2goKGN1cnJlbnRWYWx1ZTogc3RyaW5nLCBjdXJyZW50SW5kZXg6IG51bWJlciwgYXJyYXk6IGFueVtdKSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggJSAyID09PSAwKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uID0gbmV3T3B0aW9ucy5maW5kKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkgPT0gY3VycmVudFZhbHVlKTtcbiAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICBvcHRpb24uYXBwZW5kID0gXCIoXCIgKyBhcnJheVtjdXJyZW50SW5kZXggKyAxXTtcbiAgICAgICAgICAgIGlmIChvcHRpb24uZGF0YSAmJiBhcnJheVtjdXJyZW50SW5kZXggKyAxXSA8IG9wdGlvbi5kYXRhLnRvdGFsQ291bnQpIHtcbiAgICAgICAgICAgICAgb3B0aW9uLmFwcGVuZCArPSBcIi9cIiArIG9wdGlvbi5kYXRhLnRvdGFsQ291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb24uYXBwZW5kICs9IFwiKVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZXRPcHRpb25zKG5ld09wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpbHRlclNlbGVjdGVkT3B0aW9ucyA9IChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5jaGVja2VkID09PSBcIm9uXCI7XG5cbiAgY29uc3Qge1xuICAgIGRhdGE6IHNlYXJjaFJlc3VsdHMsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeShcbiAgICBbXG4gICAgICBcInNlYXJjaFJlc3VsdHNcIixcbiAgICAgIGFwaSxcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgZXhhY3RNYXRjaCxcbiAgICAgIHNob3dPYnNvbGV0ZVRlcm1zLFxuICAgICAgYWN0aXZlUGFnZSxcbiAgICAgIGl0ZW1zUGVyUGFnZSxcbiAgICAgIGZpbHRlckJ5VHlwZU9wdGlvbnMuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucykubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkpLFxuICAgICAgZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucykubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkpLFxuICAgICAgcGFyYW1ldGVyXG4gICAgXSxcbiAgICBhc3luYyAoeyBzaWduYWwgfSkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5zZWFyY2goXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgZXhhY3RNYXRjaDogZXhhY3RNYXRjaCxcbiAgICAgICAgICBzaG93T2Jzb2xldGVUZXJtczogc2hvd09ic29sZXRlVGVybXMsXG4gICAgICAgICAgdHlwZXM6IGZpbHRlckJ5VHlwZU9wdGlvbnMuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucykubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkpLmpvaW4oXCIsXCIpLFxuICAgICAgICAgIG9udG9sb2d5OiBmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucy5maWx0ZXIoZmlsdGVyU2VsZWN0ZWRPcHRpb25zKS5tYXAoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSkuam9pbihcIixcIiksXG4gICAgICAgICAgZ3JvdXBCeUlyaTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFnZTogYWN0aXZlUGFnZS50b1N0cmluZygpLFxuICAgICAgICAgIHNpemU6IGl0ZW1zUGVyUGFnZS50b1N0cmluZygpXG4gICAgICAgIH0sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgcHJvcHMucGFyYW1ldGVyLFxuICAgICAgICBzaWduYWxcbiAgICAgICkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlW1wicmVzcG9uc2VcIl0gJiYgcmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcImRvY3NcIl0gIT0gbnVsbCAmJiByZXNwb25zZVtcInJlc3BvbnNlXCJdW1wibnVtRm91bmRcIl0gIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChyZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXSAmJiByZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXSkge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1widHlwZVwiXSkge1xuICAgICAgICAgICAgICB1cGRhdGVGaWx0ZXJPcHRpb25zKFxuICAgICAgICAgICAgICAgIGZpbHRlckJ5VHlwZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJ0eXBlXCJdLFxuICAgICAgICAgICAgICAgIHNldEZpbHRlckJ5VHlwZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRWYWx1ZTogc3RyaW5nKSA9PiBgJHtjdXJyZW50VmFsdWVbMF0udG9VcHBlckNhc2UoKX0ke2N1cnJlbnRWYWx1ZS5zbGljZSgxKX1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXNlTGVnYWN5KSB7XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcIm9udG9sb2d5X25hbWVcIl0pIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVGaWx0ZXJPcHRpb25zKFxuICAgICAgICAgICAgICAgICAgZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICByZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcIm9udG9sb2d5X25hbWVcIl0sXG4gICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50VmFsdWU6IHN0cmluZykgPT4gY3VycmVudFZhbHVlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neUlkXCJdKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlRmlsdGVyT3B0aW9ucyhcbiAgICAgICAgICAgICAgICAgIGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neUlkXCJdLFxuICAgICAgICAgICAgICAgICAgc2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAoY3VycmVudFZhbHVlOiBzdHJpbmcpID0+IGN1cnJlbnRWYWx1ZS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldFRvdGFsSXRlbXMocmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcIm51bUZvdW5kXCJdKTtcbiAgICAgICAgICBjb25zdCBuZXdQYWdlQ291bnQgPSBNYXRoLmNlaWwocmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcIm51bUZvdW5kXCJdIC8gaXRlbXNQZXJQYWdlKTtcbiAgICAgICAgICBzZXRQYWdlQ291bnQobmV3UGFnZUNvdW50KTtcbiAgICAgICAgICBpZiAoYWN0aXZlUGFnZSA+PSBuZXdQYWdlQ291bnQpIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZVBhZ2UoMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3BvbnNlLmRvY3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBBUEkgcmVzcG9uc2VcIik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAge1xuICAgICAga2VlcFByZXZpb3VzRGF0YTogdHJ1ZVxuICAgIH0gLy8gU2VlOiBodHRwczovL3JlYWN0LXF1ZXJ5LXYzLnRhbnN0YWNrLmNvbS9ndWlkZXMvcGFnaW5hdGVkLXF1ZXJpZXNcbiAgKTtcblxuICBmdW5jdGlvbiBvbkNoYW5nZUl0ZW1zUGVyUGFnZShuZXdJdGVtc1BlclBhZ2U6IG51bWJlcikge1xuICAgIHNldEFjdGl2ZVBhZ2UoTWF0aC5mbG9vcigoYWN0aXZlUGFnZSAqIGl0ZW1zUGVyUGFnZSArIDEpIC8gbmV3SXRlbXNQZXJQYWdlKSk7XG4gICAgc2V0SXRlbXNQZXJQYWdlKG5ld0l0ZW1zUGVyUGFnZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVFeGFjdE1hdGNoKCkge1xuICAgIHNldEV4YWN0TWF0Y2goIWV4YWN0TWF0Y2gpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlU2hvd09ic29sZXRlVGVybXMoKSB7XG4gICAgc2V0U2hvd09ic29sZXRlVGVybXMoIXNob3dPYnNvbGV0ZVRlcm1zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyRmlsdGVyKGN1cnJlbnRPcHRpb25zOiBFdWlTZWxlY3RhYmxlT3B0aW9uW10sIHNldE9wdGlvbnM6IEZ1bmN0aW9uKSB7XG4gICAgY29uc3QgbmV3T3B0aW9ucyA9IFsuLi5jdXJyZW50T3B0aW9uc107XG4gICAgc2V0T3B0aW9ucyhuZXdPcHRpb25zLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiAoeyAuLi5vcHRpb24sIGNoZWNrZWQ6IHVuZGVmaW5lZCB9KSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJBbGxGaWx0ZXJzKCkge1xuICAgIGNsZWFyRmlsdGVyKGZpbHRlckJ5VHlwZU9wdGlvbnMsIHNldEZpbHRlckJ5VHlwZU9wdGlvbnMpO1xuICAgIGNsZWFyRmlsdGVyKGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLCBzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1fdG9fc2VhcmNoVmFsdWUoc2VsZWN0ZWRPcHRpb246IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGlyaT86IHN0cmluZztcbiAgICBvbnRvbG9neV9uYW1lPzogc3RyaW5nO1xuICAgIHR5cGU/OiBzdHJpbmdcbiAgfVtdKSB7XG4gICAgc2V0U2VhcmNoVmFsdWUoc2VsZWN0ZWRPcHRpb25bMF0gPyBzZWxlY3RlZE9wdGlvblswXS5sYWJlbCA6IFwiXCIpO1xuICB9XG5cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U2VhcmNoQmFyV2lkZ2V0XG4gICAgICAgIGFwaT17YXBpfVxuICAgICAgICBxdWVyeT17XCJcIn1cbiAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50PXsoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgICAgICB0cmFuc2Zvcm1fdG9fc2VhcmNoVmFsdWUoc2VsZWN0ZWRPcHRpb24pO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInhsXCIgLz5cbiAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIiAvPlxuXG4gICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17M30gc3R5bGU9e3sgbWluV2lkdGg6IDI1MCB9fT5cbiAgICAgICAgICA8RXVpUGFuZWw+XG4gICAgICAgICAgICB7aXNTdWNjZXNzICYmXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IHR5cGVcIj5cbiAgICAgICAgICAgICAgICA8RXVpU2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17ZmlsdGVyQnlUeXBlT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeVR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgbGlzdFByb3BzPXt7IGJvcmRlcmVkOiB0cnVlIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgeyhsaXN0KSA9PiBsaXN0fVxuICAgICAgICAgICAgICAgIDwvRXVpU2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2lzTG9hZGluZyAmJlxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSB0eXBlXCI+XG4gICAgICAgICAgICAgICAgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJzXCIgLz5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2lzRXJyb3IgJiZcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgdHlwZVwiPlxuICAgICAgICAgICAgICAgIDxFdWlTZWxlY3RhYmxlXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtbXX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeVR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgbGlzdFByb3BzPXt7IGJvcmRlcmVkOiB0cnVlIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgeyhsaXN0KSA9PiBsaXN0fVxuICAgICAgICAgICAgICAgIDwvRXVpU2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7aXNTdWNjZXNzICYmXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IG9udG9sb2d5XCI+XG4gICAgICAgICAgICAgICAgPEV1aVNlbGVjdGFibGVcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e2ZpbHRlckJ5T250b2xvZ3lPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgbGlzdFByb3BzPXt7IGJvcmRlcmVkOiB0cnVlIH19XG4gICAgICAgICAgICAgICAgICBzZWFyY2hhYmxlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgeyhsaXN0LCBzZWFyY2gpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICB7c2VhcmNofVxuICAgICAgICAgICAgICAgICAgICAgIHtsaXN0fVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7aXNMb2FkaW5nICYmXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IG9udG9sb2d5XCI+XG4gICAgICAgICAgICAgICAgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJzXCIgLz5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2lzRXJyb3IgJiZcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgb250b2xvZ3lcIj5cbiAgICAgICAgICAgICAgICA8RXVpU2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17W119XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsaXN0UHJvcHM9e3sgYm9yZGVyZWQ6IHRydWUgfX1cbiAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7KGxpc3QsIHNlYXJjaCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgIHtzZWFyY2h9XG4gICAgICAgICAgICAgICAgICAgICAge2xpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0V1aVNlbGVjdGFibGU+XG4gICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPEV1aUJ1dHRvbkVtcHR5XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NsZWFyQWxsRmlsdGVyc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQ2xlYXIgYWxsIGZpbHRlcnNcbiAgICAgICAgICAgIDwvRXVpQnV0dG9uRW1wdHk+XG4gICAgICAgICAgPC9FdWlQYW5lbD5cbiAgICAgICAgPC9FdWlGbGV4SXRlbT5cblxuICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17N30+XG4gICAgICAgICAgPEV1aVBhbmVsIGNvbG9yPVwidHJhbnNwYXJlbnRcIiBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgIDxFdWlTd2l0Y2ggbGFiZWw9XCJFeGFjdCBtYXRjaFwiIGNoZWNrZWQ9e2V4YWN0TWF0Y2h9IG9uQ2hhbmdlPXt0b2dnbGVFeGFjdE1hdGNofSAvPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPEV1aVN3aXRjaCBsYWJlbD1cIlNob3cgb25seSBvYnNvbGV0ZSB0ZXJtc1wiIGNoZWNrZWQ9e3Nob3dPYnNvbGV0ZVRlcm1zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RvZ2dsZVNob3dPYnNvbGV0ZVRlcm1zfSAvPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG5cbiAgICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cIm1cIiAvPlxuXG4gICAgICAgICAgICA8RXVpVGV4dCBzaXplPVwieHNcIiBzdHlsZT17eyBwYWRkaW5nOiBcIjAgOHB4XCIgfX0+XG4gICAgICAgICAgICAgIFNob3dpbmcge01hdGgubWluKGFjdGl2ZVBhZ2UgKiBpdGVtc1BlclBhZ2UgKyAxLCB0b3RhbEl0ZW1zKX0gdG8ge01hdGgubWluKChhY3RpdmVQYWdlICsgMSkgKiBpdGVtc1BlclBhZ2UsIHRvdGFsSXRlbXMpfSBvZiB7dG90YWxJdGVtc30gcmVzdWx0c1xuICAgICAgICAgICAgPC9FdWlUZXh0PlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cblxuICAgICAgICAgICAgPEV1aUhvcml6b250YWxSdWxlIG1hcmdpbj1cIm5vbmVcIiBzdHlsZT17eyBoZWlnaHQ6IDIgfX0gLz5cblxuICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG5cbiAgICAgICAgICAgIDxFdWlUYWJsZVBhZ2luYXRpb25cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlYXJjaCByZXN1bHQgcGFnaW5hdGlvblwiXG4gICAgICAgICAgICAgIHBhZ2VDb3VudD17cGFnZUNvdW50fVxuICAgICAgICAgICAgICBhY3RpdmVQYWdlPXthY3RpdmVQYWdlfVxuICAgICAgICAgICAgICBvbkNoYW5nZVBhZ2U9e3NldEFjdGl2ZVBhZ2V9XG4gICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZT17aXRlbXNQZXJQYWdlfVxuICAgICAgICAgICAgICBvbkNoYW5nZUl0ZW1zUGVyUGFnZT17b25DaGFuZ2VJdGVtc1BlclBhZ2V9XG4gICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnM9e2l0ZW1zUGVyUGFnZU9wdGlvbnN9XG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cblxuICAgICAgICAgICAge3NlYXJjaFJlc3VsdHMgJiYgc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdDogYW55KSA9PiAoXG4gICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudCBrZXk9e3Jlc3VsdC5pZH0+XG4gICAgICAgICAgICAgICAgPE1ldGFkYXRhQ29tcGFjdCBhcGk9e2FwaX0gcmVzdWx0PXtyZXN1bHR9IHRhcmdldExpbms9e3RhcmdldExpbmt9IC8+XG4gICAgICAgICAgICAgICAgPEV1aVNwYWNlciAvPlxuICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9FdWlQYW5lbD5cbiAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTZWFyY2hSZXN1bHRzTGlzdChwcm9wczogU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRTZWFyY2hSZXN1bHRzTGlzdFdpZGdldChwcm9wczogU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxTZWFyY2hSZXN1bHRzTGlzdFdpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIHF1ZXJ5PXtwcm9wcy5xdWVyeX1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICBpbml0aWFsSXRlbXNQZXJQYWdlPXtwcm9wcy5pbml0aWFsSXRlbXNQZXJQYWdlfVxuICAgICAgICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnM9e3Byb3BzLml0ZW1zUGVyUGFnZU9wdGlvbnN9XG4gICAgICAgICAgdGFyZ2V0TGluaz17cHJvcHMudGFyZ2V0TGlua31cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBTZWFyY2hSZXN1bHRzTGlzdFdpZGdldCwgY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QgfTtcbiIsICJpbXBvcnQgeyBFdWlDYXJkLCBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtLCBFdWlTcGFjZXIsIEV1aVRpdGxlIH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQnJlYWRjcnVtYldpZGdldCwgRGVzY3JpcHRpb25XaWRnZXQsIElyaVdpZGdldCB9IGZyb20gXCIuLi9NZXRhZGF0YVdpZGdldFwiO1xuaW1wb3J0IHtNZXRhZGF0YUNvbXBhY3RQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHtwbHVyYWxpemVUeXBlfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcblxuZnVuY3Rpb24gTWV0YWRhdGFDb21wYWN0KHByb3BzOiBNZXRhZGF0YUNvbXBhY3RQcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgICAgYXBpLFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIHRhcmdldExpbmssXG4gICAgICAgIC4uLnJlc3RcbiAgICB9ID0gcHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpQ2FyZFxuICAgICAgICAgICAgdGV4dEFsaWduPVwibGVmdFwiXG4gICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIGhyZWY9e3RhcmdldExpbmsgP1xuICAgICAgICAgICAgICAgIChyZXN1bHQudHlwZSAhPSBcIm9udG9sb2d5XCIgP1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRMaW5rICsgXCJvbnRvbG9naWVzL1wiICsgcmVzdWx0Lm9udG9sb2d5X25hbWUgKyBcIi9cIiArIHBsdXJhbGl6ZVR5cGUocmVzdWx0LnR5cGUsIHRydWUpICsgXCI/aXJpPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlc3VsdC5pcmkpXG4gICAgICAgICAgICAgICAgICAgIDogdGFyZ2V0TGluayArIFwib250b2xvZ2llcy9cIiArIHJlc3VsdC5vbnRvbG9neV9uYW1lKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgIDxFdWlGbGV4R3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RXVpVGl0bGU+PGgyPntyZXN1bHQubGFiZWx9PC9oMj48L0V1aVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cmVzdWx0LnR5cGUgIT0gXCJvbnRvbG9neVwiICYmIDxCcmVhZGNydW1iV2lkZ2V0IGFwaT17YXBpfSBpcmk9e3Jlc3VsdC5pcml9IGVudGl0eVR5cGU9e3Jlc3VsdC50eXBlfSBvbnRvbG9neUlkPXtyZXN1bHQub250b2xvZ3lfbmFtZX0vPn1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgICAge3Jlc3VsdC50eXBlICE9IFwib250b2xvZ3lcIiA/IDxJcmlXaWRnZXQgaXJpPXtyZXN1bHQuaXJpfS8+IDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiLz5cbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbldpZGdldCBhcGk9e2FwaX0gb250b2xvZ3lJZD17cmVzdWx0Lm9udG9sb2d5X25hbWV9IGlyaT17cmVzdWx0LmlyaX0gdGhpbmdUeXBlPXtyZXN1bHQudHlwZX0vPlxuICAgICAgICA8L0V1aUNhcmQ+XG5cbiAgICApO1xufVxuXG5leHBvcnQgeyBNZXRhZGF0YUNvbXBhY3QgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpL09sc0FwaSdcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tICdyZWFjdC1xdWVyeSdcbmltcG9ydCB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5LCBzaW5ndWxhcml6ZVR5cGV9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtFbnRpdHlPbnRvTGlzdFdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vLi4vc3R5bGUvc2VtbG9va3Atc3R5bGVzLmNzc1wiO1xuaW1wb3J0IHtFbnRpdHlUeXBlTmFtZX0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5cbmZ1bmN0aW9uIEVudGl0eU9udG9MaXN0V2lkZ2V0KHByb3BzOiBFbnRpdHlPbnRvTGlzdFdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8e29udG9MaXN0OiBzdHJpbmdbXSwgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIGxhYmVsOiBzdHJpbmd9PihcbiAgICBbXCJlbnRpdHlPbnRvTGlzdFwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IG9udG9saXN0IDogc3RyaW5nW107XG4gICAgICAgIGxldCByZWFsRW50aXR5VHlwZSA6IEVudGl0eVR5cGVOYW1lO1xuICAgICAgICBsZXQgbGFiZWwgOiBzdHJpbmc7XG4gICAgICAgIGlmKHVzZUxlZ2FjeSkge1xuICAgICAgICAgICAgY29uc3QgZW1iZWRkZWQgPSAoYXdhaXQgb2xzQXBpLmdldEVudGl0eVJlc3BvbnNlKGlyaSwgZW50aXR5VHlwZSwgdW5kZWZpbmVkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSkpW1wiX2VtYmVkZGVkXCJdO1xuXG4gICAgICAgICAgICAvLyBvYnRhaW4gZGVmaW5lZEJ5IHRvIGZpbHRlciB0aGVzZSBvdXQgb2Ygb250b2xpc3RcbiAgICAgICAgICAgIGNvbnN0IGRlZmluZWRCeSA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKChlbnRpdHlJbk9udG9sb2d5IDogYW55KSA9PiBlbnRpdHlJbk9udG9sb2d5W1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0pXG4gICAgICAgICAgICAgICAgLm1hcCgoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuXG4gICAgICAgICAgICBvbnRvbGlzdCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV0ubWFwKChlbnRpdHlJbk9udG9sb2d5IDogYW55KSA9PiBlbnRpdHlJbk9udG9sb2d5W1wib250b2xvZ3lfbmFtZVwiXSkuZmlsdGVyKChlbGVtOiBhbnkpID0+ICFkZWZpbmVkQnkuaW5jbHVkZXMoZWxlbSkpO1xuICAgICAgICAgICAgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IHNpbmd1bGFyaXplVHlwZShPYmplY3Qua2V5cyhlbWJlZGRlZClbMF0pIGFzIEVudGl0eVR5cGVOYW1lO1xuICAgICAgICAgICAgbGFiZWwgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dWzBdW1wibGFiZWxcIl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgICAgICAgb250b2xpc3QgPSBlbnRpdHkuZ2V0QXBwZWFyc0luKCkuZmlsdGVyKChlbGVtOiBhbnkpID0+ICFlbnRpdHkuZ2V0RGVmaW5lZEJ5KCkuaW5jbHVkZXMoZWxlbSkpO1xuICAgICAgICAgICAgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IGVudGl0eS5nZXRUeXBlKCkgYXMgRW50aXR5VHlwZU5hbWU7XG4gICAgICAgICAgICBsYWJlbCA9IGVudGl0eS5nZXRMYWJlbCgpIHx8IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgb250b2xpc3QgPSBvbnRvbGlzdC5maWx0ZXIoKG9udG8gOiBzdHJpbmcpID0+IG9udG8gIT0gb250b2xvZ3lJZCkuc29ydCgpO1xuICAgICAgICByZXR1cm4ge29udG9MaXN0OiBvbnRvbGlzdCwgZW50aXR5VHlwZTogcmVhbEVudGl0eVR5cGUsIGxhYmVsOiBsYWJlbH07XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJlxuICAgICAgICA8RW50aXR5T250b0xpc3RQcmVzZW50YXRpb24gb250b2xpc3Q9e2RhdGEub250b0xpc3R9IGVudGl0eVR5cGU9e2RhdGEuZW50aXR5VHlwZX0gbGFiZWw9e2RhdGEubGFiZWx9IGlyaT17aXJpfSBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9IC8+fVxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcIm9udG9sb2d5IGxpc3RcIil9PC9FdWlUZXh0Pn1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW50aXR5T250b0xpc3QocHJvcHM6IEVudGl0eU9udG9MaXN0V2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkRW50aXR5T250b0xpc3RXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0eU9udG9MaXN0V2lkZ2V0KHByb3BzOiBFbnRpdHlPbnRvTGlzdFdpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxFbnRpdHlPbnRvTGlzdFdpZGdldFxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBFbnRpdHlPbnRvTGlzdFdpZGdldCwgY3JlYXRlRW50aXR5T250b0xpc3QgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpL09sc0FwaSdcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tICdyZWFjdC1xdWVyeSdcbmltcG9ydCB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5LCBzaW5ndWxhcml6ZVR5cGV9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtFbnRpdHlEZWZpbmVkQnlXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgRW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vRW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vLi4vc3R5bGUvc2VtbG9va3Atc3R5bGVzLmNzc1wiO1xuaW1wb3J0IHtFbnRpdHlUeXBlTmFtZX0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5cbmZ1bmN0aW9uIEVudGl0eURlZmluZWRCeVdpZGdldChwcm9wczogRW50aXR5RGVmaW5lZEJ5V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBpcmksIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCB1c2VMZWdhY3kgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTx7b250b0xpc3Q6IHN0cmluZ1tdLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSwgbGFiZWw6IHN0cmluZ30+KFxuICAgIFtcImVudGl0eURlZmluZWRCeVwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IG9udG9saXN0IDogc3RyaW5nW107XG4gICAgICAgIGxldCByZWFsRW50aXR5VHlwZSA6IEVudGl0eVR5cGVOYW1lO1xuICAgICAgICBsZXQgbGFiZWwgOiBzdHJpbmc7XG4gICAgICAgIGlmKHVzZUxlZ2FjeSkge1xuICAgICAgICAgICAgY29uc3QgZW1iZWRkZWQgPSAoYXdhaXQgb2xzQXBpLmdldEVudGl0eVJlc3BvbnNlKGlyaSwgZW50aXR5VHlwZSwgdW5kZWZpbmVkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSkpW1wiX2VtYmVkZGVkXCJdO1xuICAgICAgICAgICAgb250b2xpc3QgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdKVxuICAgICAgICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3kgOiBhbnkpID0+IGVudGl0eUluT250b2xvZ3lbXCJvbnRvbG9neV9uYW1lXCJdKTtcbiAgICAgICAgICAgIHJlYWxFbnRpdHlUeXBlID0gZW50aXR5VHlwZSB8fCBzaW5ndWxhcml6ZVR5cGUoT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdKSBhcyBFbnRpdHlUeXBlTmFtZTtcbiAgICAgICAgICAgIGxhYmVsID0gZW1iZWRkZWRbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXVswXVtcImxhYmVsXCJdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gYXdhaXQgb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgICAgICAgIG9udG9saXN0ID0gZW50aXR5LmdldERlZmluZWRCeSgpLmZpbHRlcigob250b2xvZ3kpID0+IG9udG9sb2d5ICE9IGVudGl0eS5nZXRPbnRvbG9neUlkKCkpO1xuICAgICAgICAgICAgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IGVudGl0eS5nZXRUeXBlKCkgYXMgRW50aXR5VHlwZU5hbWU7XG4gICAgICAgICAgICBsYWJlbCA9IGVudGl0eS5nZXRMYWJlbCgpIHx8IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgb250b2xpc3QgPSBvbnRvbGlzdC5zb3J0KCk7XG4gICAgICAgIHJldHVybiB7b250b0xpc3Q6IG9udG9saXN0LCBlbnRpdHlUeXBlOiByZWFsRW50aXR5VHlwZSwgbGFiZWw6IGxhYmVsfTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmXG4gICAgICAgIDxFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24gb250b2xpc3Q9e2RhdGEub250b0xpc3R9IGVudGl0eVR5cGU9e2RhdGEuZW50aXR5VHlwZX0gbGFiZWw9e2RhdGEubGFiZWx9IGlyaT17aXJpfSBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9IC8+fVxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcIm9udG9sb2d5IGxpc3RcIil9PC9FdWlUZXh0Pn1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW50aXR5RGVmaW5lZEJ5KHByb3BzOiBFbnRpdHlEZWZpbmVkQnlXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRFbnRpdHlEZWZpbmVkQnlXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0eURlZmluZWRCeVdpZGdldChwcm9wczogRW50aXR5RGVmaW5lZEJ5V2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEVudGl0eURlZmluZWRCeVdpZGdldFxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBFbnRpdHlEZWZpbmVkQnlXaWRnZXQsIGNyZWF0ZUVudGl0eURlZmluZWRCeSB9O1xuIiwgImltcG9ydCBSZWFjdCwge1JlYWN0RWxlbWVudH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgRXVpQ2FyZCwgRXVpRmxleEl0ZW0sIEV1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpU3BhY2VyLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtDbGFzcywgRW50aXR5LCBJbmRpdmlkdWFsLCBQcm9wZXJ0eSwgVGhpbmd9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge2dldENsYXNzRXhwcmVzc2lvbkpTWCwgZ2V0RW50aXR5TGlua0pTWCwgZ2V0UmVpZmllZEpTWCwgZ2V0U2VjdGlvbkxpc3RKU1h9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9TdHJ1Y3R1cmVSZW5kZXJpbmdcIjtcbmltcG9ydCB7aXNDbGFzcywgaXNJbmRpdmlkdWFsLCBpc1Byb3BlcnR5fSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi8uLi8uLi9tb2RlbC9SZWlmaWVkXCI7XG5pbXBvcnQge2FzQXJyYXksIGNhcGl0YWxpemUsIGdldEVudGl0eVR5cGVOYW1lLCByYW5kb21TdHJpbmd9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgREVGQVVMVF9IQVNfVElUTEUgPSB0cnVlO1xuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgdHlwZSBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGluZGl2aWR1YWxcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFR5cGVzU2VjdGlvbkpTWChpbmRpdmlkdWFsOiBJbmRpdmlkdWFsLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHR5cGVzID0gaW5kaXZpZHVhbC5nZXRSZGZUeXBlcygpLmZpbHRlcigoZWxlbTogc3RyaW5nKSA9PiBlbGVtICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmICFlbGVtLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpKTtcblxuICAgIGlmKGluZGl2aWR1YWwuZ2V0UmRmVHlwZXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPGI+VHlwZTwvYj5cbiAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHR5cGVzLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgPC9FdWlGbGV4SXRlbT4pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHNhbWUgYXMgc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBpbmRpdmlkdWFsXG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldEluZGl2aWR1YWxTYW1lQXNTZWN0aW9uSlNYKGluZGl2aWR1YWw6IEluZGl2aWR1YWwsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2FtZUFzID0gaW5kaXZpZHVhbC5nZXRTYW1lQXMoKTtcblxuICAgIGlmKHNhbWVBcy5sZW5ndGggPiAwKXtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5TYW1lIEFzPC9iPlxuICAgICAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHNhbWVBcywgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGRpZmZlcmVudCBmcm9tIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gaW5kaXZpZHVhbFxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRJbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb25KU1goaW5kaXZpZHVhbDogSW5kaXZpZHVhbCwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBkaWZmZXJlbnRGcm9tID0gaW5kaXZpZHVhbC5nZXREaWZmZXJlbnRGcm9tKCk7XG5cbiAgICBpZihkaWZmZXJlbnRGcm9tLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8PlxuICAgICAgICAgIDxFdWlTcGFjZXIvPlxuICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPkRpZmZlcmVudCBmcm9tPC9iPlxuICAgICAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIGRpZmZlcmVudEZyb20sIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBkaXNqb2ludCB3aXRoIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gZW50aXR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldERpc2pvaW50V2l0aFNlY3Rpb25KU1goZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGRpc2pvaW50V2l0aCA9IGVudGl0eS5nZXREaXNqb2ludFdpdGgoKTtcblxuICAgIGlmKGRpc2pvaW50V2l0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+RGlzam9pbnQgd2l0aDwvYj5cbiAgICAgICAgICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goZW50aXR5LCBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZGlzam9pbnRXaXRoLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgaW52ZXJzZSBvZiBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldFByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbkpTWChwcm9wZXJ0eTogUHJvcGVydHksIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaW52ZXJzZU9mcyA9IHByb3BlcnR5LmdldEludmVyc2VPZigpO1xuXG4gICAgaWYoaW52ZXJzZU9mcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+SW52ZXJzZSBvZjwvYj5cbiAgICAgICAgICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1gocHJvcGVydHksIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksIGludmVyc2VPZnMsIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIG9uZSBwcm9wZXJ0eSBjaGFpbiBKU1ggZWxlbWVudC4gSXMgdXNlZCBmb3Ige0BsaW5rIGdldFByb3BlcnR5Q2hhaW5TZWN0aW9uSlNYfS5cbiAqIEBwYXJhbSBwcm9wZXJ0eUNoYWluIHRoZSBwcm9wZXJ0eSBjaGFpblxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gcHJvcHMgICAgIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudFtdfSB0aGUgY2hhaW5zIEpTWCBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGdldFByb3BlcnR5Q2hhaW5KU1gocHJvcGVydHlDaGFpbjogYW55W10sIHByb3BlcnR5OiBQcm9wZXJ0eSwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50W10ge1xuICAgIHJldHVybiBhc0FycmF5KHByb3BlcnR5Q2hhaW4pLnNsaWNlKCkucmV2ZXJzZSgpLm1hcCgocHJvcGVydHlFeHByLCBpKSA9PiB7IC8vIHVzaW5nIC5zbGljZSgpIGhlcmUgaXMgaW1wb3J0YW50IGJlY2F1c2UgYSBtdXRhdGlvbiBvZiBwcm9wZXJ0eUNoYWluIHdvdWxkIHRyaWdnZXIgYSB1c2VRdWVyeSgpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8c3BhbiBrZXk9e3Byb3BlcnR5RXhwcn0+XG4gICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgcHJvcGVydHlFeHByLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7aSA8IGFzQXJyYXkocHJvcGVydHlDaGFpbikubGVuZ3RoIC0gMSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e2ZvbnRTaXplOiBcIm1lZGl1bVwiLCBjb2xvcjogXCJncmF5XCJ9fT4mbmJzcDsmIzk2NjY7Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICApO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgcHJvcGVydHkgY2hhaW5zIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlDaGFpblNlY3Rpb25KU1gocHJvcGVydHk6IFByb3BlcnR5LCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHByb3BlcnR5Q2hhaW5zID0gcHJvcGVydHkuZ2V0UHJvcGVydHlDaGFpbnMoKS5tYXAoKHJlaWZpZWQgOiBSZWlmaWVkPGFueT4pID0+IHJlaWZpZWQudmFsdWUpO1xuXG4gICAgY29uc3QgaGFzTXVsdGlwbGVDaGFpbnMgPSBwcm9wZXJ0eUNoYWlucy5maWx0ZXIoKGVsZW06IGFueSkgPT4gQXJyYXkuaXNBcnJheShlbGVtKSkubGVuZ3RoID4gMDtcblxuICAgIGlmKHByb3BlcnR5Q2hhaW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxiPnshaGFzTXVsdGlwbGVDaGFpbnMgPyBcIlByb3BlcnR5IGNoYWluXCIgOiBcIlByb3BlcnR5IGNoYWluc1wifTwvYj5cbiAgICAgICAgICAgICAgeyFoYXNNdWx0aXBsZUNoYWlucyA/XG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgPHA+e2dldFByb3BlcnR5Q2hhaW5KU1gocHJvcGVydHlDaGFpbnMsIHByb3BlcnR5LCBwcm9wcyl9PC9wPlxuICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUNoYWlucy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0UHJvcGVydHlDaGFpbkpTWChpdGVtLCBwcm9wZXJ0eSwgcHJvcHMpfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICA8cD48L3A+PC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGVxdWl2YWxlbnQgdG8gc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0RW50aXR5RXF1aXZhbGVudFRvU2VjdGlvbkpTWChlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZXF1aXZhbGVudHMgPSBlbnRpdHkuZ2V0RXF1aXZhbGVudHMoKTtcblxuICAgIGlmKGVxdWl2YWxlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxiPkVxdWl2YWxlbnQgdG88L2I+XG4gICAgICAgICAgICAgIHtlcXVpdmFsZW50cy5sZW5ndGggPT09IDEgP1xuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgIDxwPntnZXRSZWlmaWVkSlNYKGVudGl0eSwgZXF1aXZhbGVudHNbMF0sIHByb3BzLnNob3dCYWRnZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGVcbiAgICAgICAgICAgICAgICAgIH0pfTwvcD5cbiAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1aXZhbGVudHMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldFJlaWZpZWRKU1goZW50aXR5LCBpdGVtLCBwcm9wcy5zaG93QmFkZ2VzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICA8cD48L3A+PC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHN1YmVudGl0eSBvZiBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRTdWJFbnRpdHlPZlNlY3Rpb25KU1goZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN1cGVyRW50aXRpZXMgPSBlbnRpdHkuZ2V0U3VwZXJFbnRpdGllcygpO1xuXG4gICAgaWYoc3VwZXJFbnRpdGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICA8Yj5TdWJ7ZW50aXR5LmdldFR5cGUoKX0gb2Y8L2I+XG4gICAgICAgICAgICAgIHtzdXBlckVudGl0aWVzLmxlbmd0aCA9PT0gMSA/XG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgPHA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBzdXBlckVudGl0aWVzWzBdLCBwcm9wcy5zaG93QmFkZ2VzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LFxuICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlXG4gICAgICAgICAgICAgICAgICB9KX08L3A+XG4gICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyRW50aXRpZXMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldFJlaWZpZWRKU1goZW50aXR5LCBpdGVtLCBwcm9wcy5zaG93QmFkZ2VzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICA8cD48L3A+PC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHJlbGF0ZWQgZnJvbSBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRFbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb25KU1goZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlbGF0ZWRGcm9tcyA9IGVudGl0eS5nZXRSZWxhdGVkRnJvbSgpO1xuICAgIGNvbnN0IHByZWRpY2F0ZXM6IHN0cmluZ1tdID0gQXJyYXkuZnJvbShuZXcgU2V0KHJlbGF0ZWRGcm9tcy5tYXAoKGVsZW06IGFueSkgPT4ge3JldHVybiBlbGVtLnZhbHVlW1wicHJvcGVydHlcIl19KSkpO1xuXG4gICAgaWYocmVsYXRlZEZyb21zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5SZWxhdGVkIGZyb208L2I+XG4gICAgICAgICAgICAgICAge3ByZWRpY2F0ZXMubWFwKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gZW50aXR5LmdldExpbmtlZEVudGl0aWVzKCkuZ2V0TGFiZWxGb3JJcmkocCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cC50b1N0cmluZygpICsgcmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHN0eWxlPXt7Y29sb3I6IFwiYmxhY2tcIn19IGhyZWY9e3B9PjxpPntsYWJlbCB8fCBwfTwvaT48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48dWwgc3R5bGU9e3ttYXJnaW5Cb3R0b206IDB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbGF0ZWRGcm9tcy5maWx0ZXIoKGVsZW06IGFueSkgPT4ge3JldHVybiBlbGVtLnZhbHVlW1wicHJvcGVydHlcIl0gPT09IHB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoZWxlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRDbGFzc0V4cHJlc3Npb25KU1goZW50aXR5LCBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZWxlbS52YWx1ZVtcInZhbHVlXCJdLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+PHA+PC9wPjwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjwvcD4gey8qIFdvcmtzIGFzIGVtcHR5IHNwYWNlIGxlZnQgdG8gbmV4dCBzZWN0aW9uICovfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICk7fSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGNsYXNzIGluc3RhbmNlcyBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIHRlcm1cbiAqIEBwYXJhbSBpbnN0YW5jZXMgYW4gYXJyYXkgb2YgdGhlIGNsYXNzZXMnIGluc3RhbmNlc1xuICogQHBhcmFtIHByb3BzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldENsYXNzSW5zdGFuY2VzU2VjdGlvbkpTWCh0ZXJtOiBDbGFzcywgaW5zdGFuY2VzOiBUaGluZ1tdLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGlmKGluc3RhbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICA8Yj5JbnN0YW5jZXM8L2I+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcy5tYXAoKGluc3RhbmNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKHRlcm0sIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSwgaW5zdGFuY2UuZ2V0SXJpKCksIHByb3BzLnNob3dCYWRnZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgPHA+PC9wPjwvPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBFbnRpdHlSZWxhdGlvbnNXaWRnZXQocHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHsgYXBpLCBpcmksIG9udG9sb2d5SWQsIGhhc1RpdGxlID0gREVGQVVMVF9IQVNfVElUTEUsIHNob3dCYWRnZXMsIGVudGl0eVR5cGUsIHBhcmFtZXRlciwgb25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsIG9uTmF2aWdhdGVUb09udG9sb2d5LCAuLi5yZXN0IH0gPSBwcm9wcztcblxuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZmV0Y2ggYW4gZW50aXRpZXMnIGRhdGEgdG8gYmUgc2hvd24gaW4gZGlmZmVyZW50IHNlY3Rpb25zXG4gICAgICovXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhOiBlbnRpdHksXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nRW50aXR5UmVsYXRpb24sXG4gICAgICAgIGlzU3VjY2VzczogaXNTdWNjZXNzRW50aXR5UmVsYXRpb24sXG4gICAgICAgIGlzRXJyb3I6IGlzRXJyb3JFbnRpdHlSZWxhdGlvbixcbiAgICB9ID0gdXNlUXVlcnkoXG4gICAgICAgIFtcbiAgICAgICAgICAgIFwiZW50aXR5SnNvblwiLFxuICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgICBzaG93QmFkZ2VzXG4gICAgICAgIF0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCAgZmFsc2UpOyAvLyBhbHdheXMgdXNlIHYyLyBBUElcbiAgICAgICAgfSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBmZXRjaCBhIGNsYXNzZXMgaW5zdGFuY2VzIHRvIGJlIHNob3duIGluIGNsYXNzIGluc3RhbmNlcyBzZWN0aW9uXG4gICAgICovXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhOiBpbnN0YW5jZXMsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nSW5zdGFuY2VzLFxuICAgICAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc0luc3RhbmNlcyxcbiAgICB9ID0gdXNlUXVlcnkoe1xuICAgICAgICBxdWVyeUtleTogW1xuICAgICAgICAgICAgXCJpbnN0YW5jZXNcIixcbiAgICAgICAgICAgIGVudGl0eVxuICAgICAgICBdLFxuICAgICAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKGVudGl0eSAmJiBpc0NsYXNzKGVudGl0eSkgJiYgZW50aXR5Lmhhc0RpcmVjdENoaWxkcmVuKCkpID8gb2xzQXBpLmdldENsYXNzSW5zdGFuY2VzKGVudGl0eS5nZXRJcmkoKSwgZW50aXR5LmdldE9udG9sb2d5SWQoKSkgOiBbXTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5hYmxlZDogISFlbnRpdHlcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHJlbmRlclNlY3Rpb25zKGVudGl0eTogRW50aXR5LCBpbnN0YW5jZXM6IEluZGl2aWR1YWxbXSkgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCBzZWN0aW9uTGlzdCA6IFJlYWN0RWxlbWVudFtdID0gW107XG5cbiAgICAgICAgaWYoaXNJbmRpdmlkdWFsKGVudGl0eSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGl2aWR1YWxUeXBlc1NlY3Rpb24gPSBnZXRJbmRpdmlkdWFsVHlwZXNTZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYoaW5kaXZpZHVhbFR5cGVzU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goaW5kaXZpZHVhbFR5cGVzU2VjdGlvbik7XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGl2aWR1YWxTYW1lQXNTZWN0aW9uID0gZ2V0SW5kaXZpZHVhbFNhbWVBc1NlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihpbmRpdmlkdWFsU2FtZUFzU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goaW5kaXZpZHVhbFNhbWVBc1NlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBpbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb24gPSBnZXRJbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihpbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKGluZGl2aWR1YWxEaWZmZXJlbnRGcm9tU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNQcm9wZXJ0eShlbnRpdHkpIHx8IGlzQ2xhc3MoZW50aXR5KSkge1xuICAgICAgICAgICAgY29uc3QgZGlzam9pbnRXaXRoU2VjdGlvbiA9IGdldERpc2pvaW50V2l0aFNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihkaXNqb2ludFdpdGhTZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChkaXNqb2ludFdpdGhTZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZihpc1Byb3BlcnR5KGVudGl0eSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbiA9IGdldFByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKHByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2gocHJvcGVydHlJbnZlcnNlT2ZTZWN0aW9uKTtcblxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlDaGFpblNlY3Rpb24gPSBnZXRQcm9wZXJ0eUNoYWluU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKHByb3BlcnR5Q2hhaW5TZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChwcm9wZXJ0eUNoYWluU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNQcm9wZXJ0eShlbnRpdHkpIHx8IGlzQ2xhc3MoZW50aXR5KSkge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5RXF1aXZhbGVudFRvU2VjdGlvbiA9IGdldEVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihlbnRpdHlFcXVpdmFsZW50VG9TZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChlbnRpdHlFcXVpdmFsZW50VG9TZWN0aW9uKTtcblxuICAgICAgICAgICAgY29uc3Qgc3ViRW50aXR5T2ZTZWN0aW9uID0gZ2V0U3ViRW50aXR5T2ZTZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYoc3ViRW50aXR5T2ZTZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChzdWJFbnRpdHlPZlNlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBlbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb24gPSBnZXRFbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihlbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKGVudGl0eVJlbGF0ZWRGcm9tU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNDbGFzcyhlbnRpdHkpKSB7XG4gICAgICAgICAgICBjb25zdCBjbGFzc0luc3RhbmNlc1NlY3Rpb24gPSBnZXRDbGFzc0luc3RhbmNlc1NlY3Rpb25KU1goZW50aXR5LCBpbnN0YW5jZXMsIHByb3BzKTtcbiAgICAgICAgICAgIGlmKGNsYXNzSW5zdGFuY2VzU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goY2xhc3NJbnN0YW5jZXNTZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHNlY3Rpb25MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuICAgICAgICAgICAgICAgICAgICB7c2VjdGlvbkxpc3R9XG4gICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybihcbiAgICAgICAgICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG4gICAgICAgICAgICAgICAgICAgIE5vIHJlbGF0aW9ucyBhdmFpbGFibGUuXG4gICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpQ2FyZFxuICAgICAgICAgICAgICAgIHRpdGxlPXtoYXNUaXRsZSA/IChlbnRpdHlUeXBlID8gY2FwaXRhbGl6ZShnZXRFbnRpdHlUeXBlTmFtZShlbnRpdHlUeXBlKSkgOiAoaXNTdWNjZXNzRW50aXR5UmVsYXRpb24gJiYgZW50aXR5KSA/IGNhcGl0YWxpemUoZW50aXR5LmdldFR5cGUoKSkgOiBcIlwiKSArIFwiIFJlbGF0aW9uc1wiIDogXCJcIn1cbiAgICAgICAgICAgICAgICBsYXlvdXQ9XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7KGlzTG9hZGluZ0VudGl0eVJlbGF0aW9uIHx8IGlzTG9hZGluZ0luc3RhbmNlcykgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9eydzJ30vPn1cbiAgICAgICAgICAgICAgICB7aXNFcnJvckVudGl0eVJlbGF0aW9uICYmIDxFdWlUZXh0PlJlcXVlc3RlZCByZXNvdXJjZSBub3QgYXZhaWxhYmxlPC9FdWlUZXh0Pn1cbiAgICAgICAgICAgICAgICB7KGlzU3VjY2Vzc0VudGl0eVJlbGF0aW9uICYmIGlzU3VjY2Vzc0luc3RhbmNlcykgJiYgZW50aXR5ICE9PSB1bmRlZmluZWQgJiYgaW5zdGFuY2VzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyU2VjdGlvbnMoZW50aXR5LCBpbnN0YW5jZXMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9FdWlDYXJkPlxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlSZWxhdGlvbnMocHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEVudGl0eVJlbGF0aW9uc1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRW50aXR5UmVsYXRpb25zV2lkZ2V0KHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8RW50aXR5UmVsYXRpb25zV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgaGFzVGl0bGU9e3Byb3BzLmhhc1RpdGxlfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcz17cHJvcHMuc2hvd0JhZGdlc31cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IGNyZWF0ZUVudGl0eVJlbGF0aW9ucywgRW50aXR5UmVsYXRpb25zV2lkZ2V0IH07IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgdXNlUXVlcnksIFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0LCBFdWlJbWFnZX0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5cblxuZnVuY3Rpb24gVGVybURlcGljdGlvbldpZGdldChwcm9wczpUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMpe1xuICAgIGNvbnN0IHthcGksIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5fSA9IHByb3BzO1xuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YSxcbiAgICAgICAgaXNMb2FkaW5nLFxuICAgICAgICBpc1N1Y2Nlc3MsXG4gICAgICAgIGlzRXJyb3IsXG4gICAgICAgIGVycm9yXG4gICAgICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgICAgICBbXCJ0ZXJtRGVwaWN0aW9uXCIsIGFwaSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIFwiY2xhc3NcIiwgb250b2xvZ3lJZCwgXCJcIiwgdXNlTGVnYWN5KTsgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBcbiAgICBcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+fVxuICAgICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiYgZGF0YS5nZXREZXBpY3Rpb25VcmwoKSAmJlxuICAgICAgICAgICAgICA8PiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDxFdWlJbWFnZVxuICAgICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgICBoYXNTaGFkb3dcbiAgICAgICAgICAgICAgICBhbGxvd0Z1bGxTY3JlZW4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYWx0PXtkYXRhLmdldERlcGljdGlvblVybCgpfVxuICAgICAgICAgICAgICAgIHNyYz17ZGF0YS5nZXREZXBpY3Rpb25VcmwoKX0gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxwPjxzbWFsbD5DbGljayB0byBleHBhbmQuPC9zbWFsbD48L3A+XG4gICAgICAgICAgICAgIDwvPiAgICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiZGVwaWN0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cblxuZnVuY3Rpb24gY3JlYXRlRGVwaWN0aW9uKHByb3BzOiBUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFRlcm1EZXBpY3Rpb25XaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFRlcm1EZXBpY3Rpb25XaWRnZXQocHJvcHM6IFRlcm1EZXBpY3Rpb25XaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgIDxUZXJtRGVwaWN0aW9uV2lkZ2V0XG4gICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX0gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH0gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fSAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHtjcmVhdGVEZXBpY3Rpb24sIFRlcm1EZXBpY3Rpb25XaWRnZXR9OyIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBHcmFwaFZpZXdXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyB1c2VRdWVyeSwgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IEV1aVByb3ZpZGVyLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpVGV4dCwgRXVpQnV0dG9uLCBFdWlQYW5lbCxFdWlTd2l0Y2gsIEV1aVBvcG92ZXIsIEV1aUJ1dHRvbkVtcHR5IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJ3Zpcy1uZXR3b3JrJztcbmltcG9ydCB7IERhdGFTZXQgfSBmcm9tICd2aXMtZGF0YSc7XG5pbXBvcnQgeyBPbHNHcmFwaE5vZGUsIE9sc0dyYXBoRWRnZSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgSlNUcmVlTm9kZSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5cbmZ1bmN0aW9uIEdyYXBoVmlld1dpZGdldChwcm9wczogR3JhcGhWaWV3V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGksIGlyaSwgb250b2xvZ3lJZCwgcm9vdFdhbGsgfSA9IHByb3BzO1xuXG4gIGNvbnN0IFtzZWxlY3RlZElyaSwgc2V0U2VsZWN0ZWRJcmldID0gdXNlU3RhdGUoaXJpKTtcbiAgY29uc3QgW2ZpcnN0TG9hZCwgc2V0Rmlyc3RMb2FkXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZGJjbGlja2VkLCBzZXREYmNsaWNrZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcm9vdFdhbGtJc1NlbGVjdGVkLCBzZXRSb290V2Fsa0lzU2VsZWN0ZWRdID0gdXNlU3RhdGUocm9vdFdhbGsgPyByb290V2FsayA6IGZhbHNlKTtcbiAgY29uc3QgW2lzUG9wb3Zlck9wZW4sIHNldElzUG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBcbiAgLy8gbmVlZGVkIGZvciB1c2VRdWVyeS4gd2l0aG91dCBpdCB0aGUgZ3JhcGggd29uJ3QgZ2V0IHVwZGF0ZWQgb24gc3dpdGNoaW5nIGJlcndlZW4gcm9vdFdhbGs9dHJ1ZSBhbmQgZmFsc2UuXG4gIGNvbnN0IFtjb3VudGVyLCBzZXRDb3VudGVyXSA9IHVzZVN0YXRlKDApOyBcblxuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3IsXG4gIH0gPSB1c2VRdWVyeShcbiAgICBbXCJ0ZXJtR3JhcGhcIiwgYXBpLCBzZWxlY3RlZElyaSwgb250b2xvZ3lJZCwgcm9vdFdhbGtJc1NlbGVjdGVkLCBkYmNsaWNrZWQsY291bnRlcl0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHJvb3RXYWxrSXNTZWxlY3RlZCAmJiBmaXJzdExvYWQpIHtcbiAgICAgICAgLy8gb25seSB1c2UgdGhpcyBjYWxsIG9uIGxvYWQuIERvdWJsZSBja2lja2luZyBvbiBhIG5vZGUgc2hvdWxkIGNhbGwgdGhlIG5vcm1hbCBnZXRUZXJtUmVsYXRpb25zIGZ1bmN0aW9uLlxuICAgICAgICByZXR1cm4gb2xzQXBpLmdldFRlcm1UcmVlKHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcml9LCB7dmlld01vZGU6IFwiQWxsXCIsIHNpYmxpbmdzOiBmYWxzZX0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgICAgIH1lbHNlIGlmKGZpcnN0TG9hZCB8fCBkYmNsaWNrZWQpe1xuICAgICAgICByZXR1cm4gb2xzQXBpLmdldFRlcm1SZWxhdGlvbnMoeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBzZWxlY3RlZElyaSB9KTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG5cblxuICBjb25zdCBub2RlcyA9IHVzZVJlZihuZXcgRGF0YVNldChbXSkpO1xuICBjb25zdCBlZGdlcyA9IHVzZVJlZihuZXcgRGF0YVNldChbXSkpO1xuICBjb25zdCBncmFwaE5ldHdvcmsgPSB1c2VSZWYoe30pO1xuICBjb25zdCBjb250YWluZXIgPSB1c2VSZWYobnVsbCk7XG5cbiAgY29uc3QgZ3JhcGhOZXR3b3JrQ29uZmlnID0ge1xuICAgIC8qKlxuICAgICAqIGZvciBtb3JlIG9wdGlvbnMgaGF2ZSBhIGxvb2sgYXQ6IGh0dHBzOi8vdmlzanMuZ2l0aHViLmlvL3Zpcy1uZXR3b3JrL2RvY3MvbmV0d29yay8jb3B0aW9uc1xuICAgICAqL1xuICAgIGF1dG9SZXNpemU6IHRydWUsXG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBsb2NhbGU6ICdlbicsXG4gICAgbGF5b3V0OiB7XG4gICAgICByYW5kb21TZWVkOiAxLFxuICAgICAgaW1wcm92ZWRMYXlvdXQ6IHRydWUsXG4gICAgICBjbHVzdGVyVGhyZXNob2xkOiAxNTAsXG4gICAgfSxcbiAgICBwaHlzaWNzOiB7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgYmFybmVzSHV0OiB7XG4gICAgICAgIGdyYXZpdGF0aW9uYWxDb25zdGFudDogLTIwMDAwLFxuICAgICAgICBjZW50cmFsR3Jhdml0eTogMC4zLFxuICAgICAgICBzcHJpbmdMZW5ndGg6IDEwLFxuICAgICAgICBzcHJpbmdDb25zdGFudDogMC4wNCxcbiAgICAgICAgZGFtcGluZzogMC4wOSxcbiAgICAgICAgYXZvaWRPdmVybGFwOiAwLFxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuXG4gIGNsYXNzIEdyYXBoTm9kZSB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgY29sb3I6IHtcbiAgICAgIGJhY2tncm91bmQ6IHN0cmluZztcbiAgICAgIGhpZ2hsaWdodDoge1xuICAgICAgICBib3JkZXI6IHN0cmluZztcbiAgICAgICAgYmFja2dyb3VuZDogc3RyaW5nO1xuICAgICAgfTtcbiAgICB9O1xuICAgIHNoYXBlOiBzdHJpbmc7XG4gICAgZm9udDoge1xuICAgICAgY29sb3I6IHN0cmluZztcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoeyBub2RlIH06IE9sc0dyYXBoTm9kZSkge1xuICAgICAgLyoqXG4gICAgICAgKiBmb3IgbW9yZSBvcHRpb25zIGhhdmUgYSBsb29rIGF0OiBodHRwczovL3Zpc2pzLmdpdGh1Yi5pby92aXMtbmV0d29yay9kb2NzL25ldHdvcmsvbm9kZXMuaHRtbFxuICAgICAgICovXG4gICAgICB0aGlzLmlkID0gbm9kZVsnaXJpJ107XG4gICAgICB0aGlzLmxhYmVsID0gbm9kZVsnbGFiZWwnXTtcbiAgICAgIHRoaXMuY29sb3IgPSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICcjNDU1NDY5JyxcbiAgICAgICAgaGlnaGxpZ2h0OiB7XG4gICAgICAgICAgYm9yZGVyOiAnIzQwNDA0MCcsXG4gICAgICAgICAgYmFja2dyb3VuZDogJyM0MDQwNDAnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnNoYXBlID0gJ2JveCc7XG4gICAgICB0aGlzLmZvbnQgPSB7XG4gICAgICAgIGNvbG9yOiAnd2hpdGUnLFxuICAgICAgfTtcblxuICAgIH1cbiAgfVxuXG4gIGNsYXNzIEdyYXBoRWRnZSB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgZnJvbT86IHN0cmluZztcbiAgICB0bz86IHN0cmluZztcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBhcnJvd3M/OiB7XG4gICAgICB0bz86IGJvb2xlYW47XG4gICAgfTtcbiAgICB3aWR0aD86IG51bWJlcjtcbiAgICBjb2xvcj86IHtcbiAgICAgIGNvbG9yPzogc3RyaW5nO1xuICAgICAgaGlnaGxpZ2h0Pzogc3RyaW5nO1xuICAgIH07XG4gICAgZm9udD86IHtcbiAgICAgIHNpemU/OiBudW1iZXI7XG4gICAgfTtcbiAgICBkYXNoZXM/OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoeyBlZGdlIH06IE9sc0dyYXBoRWRnZSkge1xuICAgICAgaWYgKGVkZ2VbJ3NvdXJjZSddICYmIGVkZ2VbJ3RhcmdldCddICYmIGVkZ2VbJ3VyaSddKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBmb3IgbW9yZSBvcHRpb25zIGhhdmUgYSBsb29rIGF0OiBodHRwczovL3Zpc2pzLmdpdGh1Yi5pby92aXMtbmV0d29yay9kb2NzL25ldHdvcmsvZWRnZXMuaHRtbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pZCA9IGVkZ2VbJ3NvdXJjZSddICsgZWRnZVsndGFyZ2V0J10gKyBcIiZ1cmk9XCIgKyBlZGdlWyd1cmknXTtcbiAgICAgICAgdGhpcy5mcm9tID0gZWRnZVsnc291cmNlJ107XG4gICAgICAgIHRoaXMudG8gPSBlZGdlWyd0YXJnZXQnXTtcbiAgICAgICAgdGhpcy5sYWJlbCA9IGVkZ2VbJ2xhYmVsJ107XG4gICAgICAgIHRoaXMuYXJyb3dzID0geyB0bzogdHJ1ZSB9O1xuICAgICAgICB0aGlzLndpZHRoID0gMjtcbiAgICAgICAgdGhpcy5jb2xvciA9IHtcbiAgICAgICAgICBjb2xvcjogJ2dyYXknLFxuICAgICAgICAgIGhpZ2hsaWdodDogJyMwMDYxN0MnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZm9udCA9IHtcbiAgICAgICAgICBzaXplOiAxNlxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cblxuICBmdW5jdGlvbiBjb252ZXJ0VG9PbHNHcmFwaEZvcm1hdChsaXN0T2ZKc1RyZWVOb2RlczogQXJyYXk8SlNUcmVlTm9kZT4pIHtcbiAgICAvLyB1c2VkIGZvciBjb252ZXJ0aW5nIHRoZSBsaXN0IG9mIGFuY2VzdG9ycyB0byB0aGUgb2xzIGFwaSBncmFwaCBlbmRwb2ludHMgZm9ybWF0LiB0byBiZSBjb25zdW1lZCBieSBHcmFwaE5vZGUgYW5kIEdyYXBoRWRnZSBjbGFzc2VzIGNvbnN0cnVjdG9yLlxuICAgIC8vIGN1cnJlbnRseSB1c2VkIGluIHNob3dpbmcgYW5jZXN0b3JzLiBFcXVpdmFsZW50IHRvIGlzLWEgcmVsYXRpb24uXG4gICAgbGV0IGRhdGE6IHsgbm9kZXM6IGFueVtdOyBlZGdlczogYW55W10gfSA9IHsgXCJub2Rlc1wiOiBbXSwgXCJlZGdlc1wiOiBbXSB9O1xuICAgIGxpc3RPZkpzVHJlZU5vZGVzLm1hcCgodHJlZU5vZGU6IEpTVHJlZU5vZGUpID0+IHtcbiAgICAgIGlmKCFkYXRhLm5vZGVzLmZpbmQoKG9iaikgPT4gb2JqLmlyaSA9PT0gdHJlZU5vZGUuaXJpKSl7XG4gICAgICAgIGxldCBub2RlID0geyBcImlyaVwiOiB0cmVlTm9kZS5pcmksIFwibGFiZWxcIjogdHJlZU5vZGUudGV4dCB9O1xuICAgICAgICBkYXRhLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgICBsZXQgcGFyZW50Tm9kZSA9IGxpc3RPZkpzVHJlZU5vZGVzLmZpbmQoKG9iajpKU1RyZWVOb2RlKSA9PiBvYmouaWQgPT09IHRyZWVOb2RlLnBhcmVudCk7XG4gICAgICBpZiAocGFyZW50Tm9kZSl7ICAgICAgICBcbiAgICAgICAgLy8gcGFyZW50IGRvZXMgbm90IGV4aXN0cyAtLT4gJyMnIGlkIHRoYXQgaW5kaWNhdGVzIGEgbm9kZSBpcyBhIHJvb3QuXG4gICAgICAgIGxldCBlZGdlID0geyBcInNvdXJjZVwiOiB0cmVlTm9kZS5pcmksIFwidGFyZ2V0XCI6IHBhcmVudE5vZGUuaXJpLCBcImxhYmVsXCI6IFwic3ViQ2xhc3NPZlwiLCBcInVyaVwiOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCIgfTtcbiAgICAgICAgaWYoIWRhdGEuZWRnZXMuZmluZCgob2JqKSA9PiBvYmouc291cmNlID09PSBlZGdlLnNvdXJjZSAmJiBvYmoudGFyZ2V0ID09PSBlZGdlLnRhcmdldCkpe1xuICAgICAgICAgIGRhdGEuZWRnZXMucHVzaChlZGdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKGRhdGEgJiYgKGZpcnN0TG9hZCB8fCBkYmNsaWNrZWQpKSB7XG4gICAgbGV0IGdEYXRhID0gZGF0YTtcbiAgICBpZiAocm9vdFdhbGtJc1NlbGVjdGVkICYmIGZpcnN0TG9hZCkge1xuICAgICAgZ0RhdGEgPSBjb252ZXJ0VG9PbHNHcmFwaEZvcm1hdChkYXRhKTtcbiAgICB9XG4gICAgZm9yIChsZXQgbm9kZSBvZiBnRGF0YVsnbm9kZXMnXSkge1xuICAgICAgbGV0IGdOb2RlID0gbmV3IEdyYXBoTm9kZSh7IG5vZGU6IG5vZGUgfSk7XG4gICAgICAvL0B0cy1pZ25vcmUgICAgICAgICAgICAgICAgXG4gICAgICBpZiAoIW5vZGVzLmN1cnJlbnQuZ2V0KGdOb2RlLmlkKSkge1xuICAgICAgICBpZihnTm9kZS5pZCA9PT0gaXJpICYmIHJvb3RXYWxrSXNTZWxlY3RlZCl7XG4gICAgICAgICAgZ05vZGUuY29sb3IuYmFja2dyb3VuZCA9ICcjMEJCQkVGJztcbiAgICAgICAgICBnTm9kZS5mb250LmNvbG9yID0gJ2JsYWNrJztcbiAgICAgICAgfVxuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgbm9kZXMuY3VycmVudC5hZGQoZ05vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBlZGdlIG9mIGdEYXRhWydlZGdlcyddKSB7XG4gICAgICBsZXQgZ0VkZ2UgPSBuZXcgR3JhcGhFZGdlKHsgZWRnZTogZWRnZSB9KTtcbiAgICAgIGxldCBkYXNoZWQgPSAoZWRnZS51cmkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YkNsYXNzT2ZcIiB8fCByb290V2Fsa0lzU2VsZWN0ZWQpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgZ0VkZ2UuZGFzaGVzID0gZGFzaGVkO1xuICAgICAgLy9AdHMtaWdub3JlICAgICAgICAgICAgICAgXG4gICAgICBpZiAoIWVkZ2VzLmN1cnJlbnQuZ2V0KGdFZGdlLmlkKSkge1xuICAgICAgICBpZihnRWRnZS5pZD8uaW5jbHVkZXMoaXJpKSAmJiByb290V2Fsa0lzU2VsZWN0ZWQpe1xuICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgIGdFZGdlLmNvbG9yLmNvbG9yID0gJ2JsYWNrJztcbiAgICAgICAgfVxuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgZWRnZXMuY3VycmVudC5hZGQoZ0VkZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmlyc3RMb2FkKSB7XG4gICAgICBzZXRGaXJzdExvYWQoZmFsc2UpO1xuICAgIH1cbiAgICBpZihkYmNsaWNrZWQpe1xuICAgICAgc2V0RGJjbGlja2VkKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIG5vZGVzLmN1cnJlbnQuY2xlYXIoKTtcbiAgICBlZGdlcy5jdXJyZW50LmNsZWFyKCk7XG4gICAgc2V0U2VsZWN0ZWRJcmkoaXJpKTtcbiAgICBzZXRGaXJzdExvYWQodHJ1ZSk7XG4gICAgc2V0RGJjbGlja2VkKGZhbHNlKTtcbiAgICBzZXRDb3VudGVyKGNvdW50ZXIrMSk7XG4gIH1cblxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGdyYXBoRGF0YSA9IHsgbm9kZXM6IG5vZGVzLmN1cnJlbnQsIGVkZ2VzOiBlZGdlcy5jdXJyZW50IH07XG4gICAgLy9AdHMtaWdub3JlXG4gICAgZ3JhcGhOZXR3b3JrLmN1cnJlbnQgPSBuZXcgTmV0d29yayhjb250YWluZXIuY3VycmVudCwgZ3JhcGhEYXRhLCBncmFwaE5ldHdvcmtDb25maWcpO1xuICB9LCBbXSk7XG5cblxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGdyYXBoTmV0d29yay5jdXJyZW50KSB7XG4gICAgICAvL0B0cy1pZ25vcmUgICAgICAgICAgICAgICAgICAgXG4gICAgICBncmFwaE5ldHdvcmsuY3VycmVudC5vbihcImRvdWJsZUNsaWNrXCIsIGZ1bmN0aW9uKHBhcmFtcykge1xuICAgICAgICBpZiAocGFyYW1zLm5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsZXQgbm9kZUlyaSA9IHBhcmFtcy5ub2Rlc1swXTtcbiAgICAgICAgICBzZXRTZWxlY3RlZElyaShub2RlSXJpKTtcbiAgICAgICAgICBzZXREYmNsaWNrZWQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICB9LCBbZ3JhcGhOZXR3b3JrXSk7XG5cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIGxvYWQgdGhlIGdyYXBoIGRhdGEgYWdhaW4gd2hlbiB0aGUgdXNlciBjaGFuZ2UgdGhlIG1vZGUgdG8gcm9vdFdhbGsgYW5kIHZpY2UgdmVyc2EgT1IgaW5wdXQgcHJvcHMgY2hhbmdlcy5cbiAgICByZXNldCgpO1xuICB9LCBbcm9vdFdhbGtJc1NlbGVjdGVkLCBhcGksIG9udG9sb2d5SWQsIGlyaV0pO1xuICBcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyB3aGVuIHVzZXIgY2hhbmdlIHRoZSBzdG9yeWJvb2sgcm9vdFdhbGsgdmFsdWVcbiAgICBzZXRSb290V2Fsa0lzU2VsZWN0ZWQocm9vdFdhbGsgPyByb290V2FsayA6IGZhbHNlKTtcbiAgfSwgW3Jvb3RXYWxrXSk7XG5cblxuXG4gIGNvbnN0IG9uQnV0dG9uQ2xpY2sgPSAoKSA9PlxuICAgIHNldElzUG9wb3Zlck9wZW4oKGlzUG9wb3Zlck9wZW4pID0+ICFpc1BvcG92ZXJPcGVuKTtcbiAgY29uc3QgY2xvc2VQb3BvdmVyID0gKCkgPT4gc2V0SXNQb3BvdmVyT3BlbihmYWxzZSk7XG5cbiAgY29uc3QgYnV0dG9uID0gKFxuICAgICAgICA8RXVpQnV0dG9uRW1wdHlcbiAgICAgICAgICAgIGljb25UeXBlPVwiaUluQ2lyY2xlXCJcbiAgICAgICAgICAgIGljb25TaWRlPVwicmlnaHRcIlxuICAgICAgICAgICAgb25DbGljaz17b25CdXR0b25DbGlja31cbiAgICAgICAgICA+XG4gICAgICAgICBHdWlkZSBtZSBcbiAgICAgICAgPC9FdWlCdXR0b25FbXB0eT5cbiAgICAgICk7XG5cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImdyYXBoXCIpfTwvRXVpVGV4dD59XG4gICAgICA8RXVpUGFuZWwgc3R5bGU9e3sgZm9udFNpemU6IDEyIH19IHBhZGRpbmdTaXplPSdzJyBib3JkZXJSYWRpdXM9XCJub25lXCI+XG4gICAgICAgIDxFdWlCdXR0b24gc2l6ZT1cInNcIiBvbkNsaWNrPXtyZXNldH0+UmVzZXQ8L0V1aUJ1dHRvbj5cbiAgICAgICAgPEV1aVBvcG92ZXJcbiAgICAgICAgICBidXR0b249e2J1dHRvbn1cbiAgICAgICAgICBpc09wZW49e2lzUG9wb3Zlck9wZW59XG4gICAgICAgICAgY2xvc2VQb3BvdmVyPXtjbG9zZVBvcG92ZXJ9XG4gICAgICAgICAgPlxuICAgICAgICAgIDxFdWlUZXh0IHN0eWxlPXt7IHdpZHRoOiAzMDAsIHBhZGRpbmc6IDEwIH19PlxuICAgICAgICAgICAgPGxpPllvdSBjYW4gZXhwYW5kIHRoZSBub2RlcyBieSBkb3VibGUgY2xpY2tpbmcgb24gdGhlbTwvbGk+XG4gICAgICAgICAgICA8bGk+WW91IGNhbiB6b29tIG91dC9pbiBieSBzY3JvbGxpbmcgb24gdGhlIGdyYXBoLjwvbGk+XG4gICAgICAgICAgICA8bGk+WW91IGNhbiBnbyBiYWNrIHRvIHRoZSBpbml0aWFsIGdyYXBoIGJ5IGNsaWNraW5nIG9uIHRoZSBSZXNldCBidXR0b24uPC9saT5cbiAgICAgICAgICAgIDxsaT5Zb3UgY2FuIG1vdmUgdGhlIG5vZGVzIGFuZCBlZGdlcyBhcm91bmQgYnkgZHJhZ2dpbmcuPC9saT5cbiAgICAgICAgICAgIDxsaT5Sb290d2FsayB0b2dnbGUgZW5hYmxlIHRoZSByb290IHdhbGsgbW9kZSBpbiB0aGUgZ3JhcGgsIHdoZXJlIHlvdSBjYW4gc2VlIHRoZSBwYXRoIGZyb20gcm9vdHMgdG8gdGhlIHRhcmdldCBub2RlLjwvbGk+ICAgICAgICAgIFxuICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgPC9FdWlQb3BvdmVyPlxuICAgICAgICA8ZGl2IHN0eWxlPXt7ZGlzcGxheTogJ2lubGluZS1ibG9jaycsIGZsb2F0OiAncmlnaHQnLCBwYWRkaW5nVG9wOiAxMH19PlxuICAgICAgICAgIDxFdWlTd2l0Y2ggXG4gICAgICAgICAgICBsYWJlbD1cInJvb3Qgd2Fsa1wiIFxuICAgICAgICAgICAgY2hlY2tlZD17cm9vdFdhbGtJc1NlbGVjdGVkfSBcbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiB7c2V0Um9vdFdhbGtJc1NlbGVjdGVkKCFyb290V2Fsa0lzU2VsZWN0ZWQpfX1cbiAgICAgICAgICAgIHRpdGxlPVwiRW5hYmxlIHRoZSByb290IHdhbGsgbW9kZSBpbiB0aGUgZ3JhcGg6IFlvdSBjYW4gc2VlIHRoZSBwYXRoIGZyb20gcm9vdHMgdG8gdGhlIHRhcmdldCBub2RlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRXVpUGFuZWw+XG4gICAgICBcbiAgICAgIDxFdWlQYW5lbCBzdHlsZT17eyB3aWR0aDogOTAwLCBoZWlnaHQ6IDkwMCB9fSBoYXNTaGFkb3c9e2ZhbHNlfSBoYXNCb3JkZXI9e3RydWV9IGJvcmRlclJhZGl1cz1cIm5vbmVcIiA+XG4gICAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJtXCIgLz59XG4gICAgICAgIDxkaXYgcmVmPXtjb250YWluZXJ9IGNsYXNzTmFtZT0nZ3JhcGgtY29udGFpbmVyJyBzdHlsZT17eyB3aWR0aDogXCI4NTBweFwiLCBoZWlnaHQ6IFwiODUwcHhcIiwgbWFyZ2luOidhdXRvJyB9fSAvPlxuICAgICAgPC9FdWlQYW5lbD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuXG5mdW5jdGlvbiBjcmVhdGVHcmFwaFZpZXcocHJvcHM6IEdyYXBoVmlld1dpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEdyYXBoVmlld1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkR3JhcGhWaWV3V2lkZ2V0KHByb3BzOiBHcmFwaFZpZXdXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxHcmFwaFZpZXdXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIHJvb3RXYWxrPXtwcm9wcy5yb290V2Fsa31cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cblxuZXhwb3J0IHsgY3JlYXRlR3JhcGhWaWV3LCBHcmFwaFZpZXdXaWRnZXQgfVxuIiwgImltcG9ydCB7IGNyZWF0ZUF1dG9jb21wbGV0ZSB9IGZyb20gXCIuL0F1dG9jb21wbGV0ZVdpZGdldC9BdXRvY29tcGxldGVXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZURhdGFDb250ZW50IH0gZnJvbSBcIi4vRGF0YUNvbnRlbnRXaWRnZXQvRGF0YUNvbnRlbnRXaWRnZXRcIlxuaW1wb3J0IHsgY3JlYXRlRW50aXR5SW5mbyB9IGZyb20gXCIuL0VudGl0eUluZm9XaWRnZXQvRW50aXR5SW5mb1dpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlSnNvbkFwaX0gZnJvbSBcIi4vSnNvbkFwaVdpZGdldC9Kc29uQXBpV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVCcmVhZGNydW1iIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVEZXNjcmlwdGlvbiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0XCJcbmltcG9ydCB7IGNyZWF0ZUlyaSB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0lyaVdpZGdldC9JcmlXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9UYWJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVDcm9zc1JlZlRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9Dcm9zc1JlZldpZGdldC9Dcm9zc1JlZlRhYldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlSGllcmFyY2h5IH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldFNlbUxvb2tQL0hpZXJhcmNoeVdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlVGl0bGV9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVNZXRhZGF0YSB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L01ldGFkYXRhV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVPbnRvbG9neUluZm8gfSBmcm9tIFwiLi9PbnRvbG9neUluZm9XaWRnZXQvT250b2xvZ3lJbmZvV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVSZXNvdXJjZXMgfSBmcm9tIFwiLi9SZXNvdXJjZXNXaWRnZXQvUmVzb3VyY2VzV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVTZWFyY2hCYXIgfSBmcm9tIFwiLi9TZWFyY2hCYXJXaWRnZXQvU2VhcmNoQmFyV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVTZWFyY2hSZXN1bHRzTGlzdCB9IGZyb20gXCIuL1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0L1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0XCI7XG5pbXBvcnQge2NyZWF0ZUVudGl0eVJlbGF0aW9uc30gZnJvbSBcIi4vRW50aXR5UmVsYXRpb25zV2lkZ2V0L0VudGl0eVJlbGF0aW9uc1dpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlRGVwaWN0aW9uIH0gZnJvbSBcIi4vVGVybURlcGljdGlvbldpZGdldC9UZXJtRGVwaWN0aW9uV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVFbnRpdHlPbnRvTGlzdCB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVFbnRpdHlEZWZpbmVkQnkgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9FbnRpdHlEZWZpbmVkQnlXaWRnZXQvRW50aXR5RGVmaW5lZEJ5V2lkZ2V0XCJcbmltcG9ydCB7IGNyZWF0ZUdyYXBoVmlldyB9IGZyb20gXCIuL0dyYXBoVmlld1dpZGdldC9HcmFwaFZpZXdXaWRnZXRcIjtcblxuKHdpbmRvdyBhcyBhbnkpWydTZW1Mb29rUFdpZGdldHMnXSA9IHtcbiAgICBjcmVhdGVBdXRvY29tcGxldGUsXG4gICAgY3JlYXRlRGF0YUNvbnRlbnQsXG4gICAgY3JlYXRlRW50aXR5SW5mbyxcbiAgICBjcmVhdGVFbnRpdHlSZWxhdGlvbnMsXG4gICAgY3JlYXRlSnNvbkFwaSxcbiAgICBjcmVhdGVCcmVhZGNydW1iLFxuICAgIGNyZWF0ZURlc2NyaXB0aW9uLFxuICAgIGNyZWF0ZUlyaSxcbiAgICBjcmVhdGVUYWIsXG4gICAgY3JlYXRlQWx0ZXJuYXRpdmVOYW1lVGFiLFxuICAgIGNyZWF0ZUNyb3NzUmVmVGFiLFxuICAgIGNyZWF0ZUhpZXJhcmNoeSxcbiAgICBjcmVhdGVUaXRsZSxcbiAgICBjcmVhdGVPbnRvbG9neUluZm8sXG4gICAgY3JlYXRlUmVzb3VyY2VzLFxuICAgIGNyZWF0ZVNlYXJjaEJhcixcbiAgICBjcmVhdGVTZWFyY2hSZXN1bHRzTGlzdCxcbiAgICBjcmVhdGVNZXRhZGF0YSxcbiAgICBjcmVhdGVEZXBpY3Rpb24sXG4gICAgY3JlYXRlRW50aXR5T250b0xpc3QsXG4gICAgY3JlYXRlRW50aXR5RGVmaW5lZEJ5LFxuICAgIGNyZWF0ZUdyYXBoVmlldyxcbn1cblxuZXhwb3J0IHtcbiAgICBjcmVhdGVBdXRvY29tcGxldGUsXG4gICAgY3JlYXRlRGF0YUNvbnRlbnQsXG4gICAgY3JlYXRlRW50aXR5SW5mbyxcbiAgICBjcmVhdGVFbnRpdHlSZWxhdGlvbnMsXG4gICAgY3JlYXRlSnNvbkFwaSxcbiAgICBjcmVhdGVCcmVhZGNydW1iLFxuICAgIGNyZWF0ZURlc2NyaXB0aW9uLFxuICAgIGNyZWF0ZUlyaSxcbiAgICBjcmVhdGVUYWIsXG4gICAgY3JlYXRlQWx0ZXJuYXRpdmVOYW1lVGFiLFxuICAgIGNyZWF0ZUNyb3NzUmVmVGFiLFxuICAgIGNyZWF0ZVRpdGxlLFxuICAgIGNyZWF0ZU9udG9sb2d5SW5mbyxcbiAgICBjcmVhdGVSZXNvdXJjZXMsXG4gICAgY3JlYXRlU2VhcmNoQmFyLFxuICAgIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0LFxuICAgIGNyZWF0ZU1ldGFkYXRhLFxuICAgIGNyZWF0ZURlcGljdGlvbixcbiAgICBjcmVhdGVIaWVyYXJjaHksXG4gICAgY3JlYXRlRW50aXR5T250b0xpc3QsXG4gICAgY3JlYXRlRW50aXR5RGVmaW5lZEJ5LFxuICAgIGNyZWF0ZUdyYXBoVmlldyxcbn1cblxuZXhwb3J0ICogZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0F1dG9jb21wbGV0ZVdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vSnNvbkFwaVdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vRGF0YUNvbnRlbnRXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Jlc291cmNlc1dpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vT250b2xvZ3lJbmZvV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9TZWFyY2hCYXJXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9FbnRpdHlJbmZvV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9FbnRpdHlSZWxhdGlvbnNXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Rlcm1EZXBpY3Rpb25XaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoVmlld1dpZGdldFwiOyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFRQSxVQUFJLHdCQUF3QixPQUFPO0FBQ25DLFVBQUlBLGtCQUFpQixPQUFPLFVBQVU7QUFDdEMsVUFBSSxtQkFBbUIsT0FBTyxVQUFVO0FBRXhDLGVBQVMsU0FBUyxLQUFLO0FBQ3RCLFlBQUksUUFBUSxRQUFRLFFBQVEsUUFBVztBQUN0QyxnQkFBTSxJQUFJLFVBQVUsdURBQXVEO0FBQUEsUUFDNUU7QUFFQSxlQUFPLE9BQU8sR0FBRztBQUFBLE1BQ2xCO0FBRUEsZUFBUyxrQkFBa0I7QUFDMUIsWUFBSTtBQUNILGNBQUksQ0FBQyxPQUFPLFFBQVE7QUFDbkIsbUJBQU87QUFBQSxVQUNSO0FBS0EsY0FBSSxRQUFRLElBQUksT0FBTyxLQUFLO0FBQzVCLGdCQUFNLENBQUMsSUFBSTtBQUNYLGNBQUksT0FBTyxvQkFBb0IsS0FBSyxFQUFFLENBQUMsTUFBTSxLQUFLO0FBQ2pELG1CQUFPO0FBQUEsVUFDUjtBQUdBLGNBQUksUUFBUSxDQUFDO0FBQ2IsbUJBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxLQUFLO0FBQzVCLGtCQUFNLE1BQU0sT0FBTyxhQUFhLENBQUMsQ0FBQyxJQUFJO0FBQUEsVUFDdkM7QUFDQSxjQUFJLFNBQVMsT0FBTyxvQkFBb0IsS0FBSyxFQUFFLElBQUksU0FBVSxHQUFHO0FBQy9ELG1CQUFPLE1BQU0sQ0FBQztBQUFBLFVBQ2YsQ0FBQztBQUNELGNBQUksT0FBTyxLQUFLLEVBQUUsTUFBTSxjQUFjO0FBQ3JDLG1CQUFPO0FBQUEsVUFDUjtBQUdBLGNBQUksUUFBUSxDQUFDO0FBQ2IsaUNBQXVCLE1BQU0sRUFBRSxFQUFFLFFBQVEsU0FBVSxRQUFRO0FBQzFELGtCQUFNLE1BQU0sSUFBSTtBQUFBLFVBQ2pCLENBQUM7QUFDRCxjQUFJLE9BQU8sS0FBSyxPQUFPLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUMvQyx3QkFBd0I7QUFDekIsbUJBQU87QUFBQSxVQUNSO0FBRUEsaUJBQU87QUFBQSxRQUNSLFNBQVMsS0FBSztBQUViLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFFQSxhQUFPLFVBQVUsZ0JBQWdCLElBQUksT0FBTyxTQUFTLFNBQVUsUUFBUSxRQUFRO0FBQzlFLFlBQUlDO0FBQ0osWUFBSSxLQUFLLFNBQVMsTUFBTTtBQUN4QixZQUFJO0FBRUosaUJBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFDMUMsVUFBQUEsUUFBTyxPQUFPLFVBQVUsQ0FBQyxDQUFDO0FBRTFCLG1CQUFTLE9BQU9BLE9BQU07QUFDckIsZ0JBQUlELGdCQUFlLEtBQUtDLE9BQU0sR0FBRyxHQUFHO0FBQ25DLGlCQUFHLEdBQUcsSUFBSUEsTUFBSyxHQUFHO0FBQUEsWUFDbkI7QUFBQSxVQUNEO0FBRUEsY0FBSSx1QkFBdUI7QUFDMUIsc0JBQVUsc0JBQXNCQSxLQUFJO0FBQ3BDLHFCQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0FBQ3hDLGtCQUFJLGlCQUFpQixLQUFLQSxPQUFNLFFBQVEsQ0FBQyxDQUFDLEdBQUc7QUFDNUMsbUJBQUcsUUFBUSxDQUFDLENBQUMsSUFBSUEsTUFBSyxRQUFRLENBQUMsQ0FBQztBQUFBLGNBQ2pDO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBRUEsZUFBTztBQUFBLE1BQ1I7QUFBQTtBQUFBOzs7QUN6RkE7QUFBQTtBQUFBO0FBV0EsVUFBSSxNQUF1QztBQUN6QyxTQUFDLFdBQVc7QUFDZDtBQUVBLGNBQUksVUFBVTtBQUdkLGNBQUksZUFBZTtBQU9uQixjQUFJLHFCQUFxQjtBQUN6QixjQUFJLG9CQUFvQjtBQUN4QixrQkFBUSxXQUFXO0FBQ25CLGtCQUFRLGFBQWE7QUFDckIsa0JBQVEsV0FBVztBQUNuQixjQUFJLHNCQUFzQjtBQUMxQixjQUFJLHFCQUFxQjtBQUN6QixjQUFJLHlCQUF5QjtBQUM3QixrQkFBUSxXQUFXO0FBQ25CLGNBQUksMkJBQTJCO0FBQy9CLGNBQUksa0JBQWtCO0FBQ3RCLGNBQUksa0JBQWtCO0FBQ3RCLGNBQUksbUJBQW1CO0FBQ3ZCLGNBQUksMEJBQTBCO0FBQzlCLGNBQUkseUJBQXlCO0FBQzdCLGNBQUksbUJBQW1CO0FBQ3ZCLGNBQUksdUJBQXVCO0FBQzNCLGNBQUksZ0NBQWdDO0FBQ3BDLGNBQUksdUJBQXVCO0FBQzNCLGNBQUksMkJBQTJCO0FBRS9CLGNBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxLQUFLO0FBQzlDLGdCQUFJLFlBQVksT0FBTztBQUN2QixpQ0FBcUIsVUFBVSxlQUFlO0FBQzlDLGdDQUFvQixVQUFVLGNBQWM7QUFDNUMsb0JBQVEsV0FBVyxVQUFVLGdCQUFnQjtBQUM3QyxvQkFBUSxhQUFhLFVBQVUsbUJBQW1CO0FBQ2xELG9CQUFRLFdBQVcsVUFBVSxnQkFBZ0I7QUFDN0Msa0NBQXNCLFVBQVUsZ0JBQWdCO0FBQ2hELGlDQUFxQixVQUFVLGVBQWU7QUFDOUMscUNBQXlCLFVBQVUsbUJBQW1CO0FBQ3RELG9CQUFRLFdBQVcsVUFBVSxnQkFBZ0I7QUFDN0MsdUNBQTJCLFVBQVUscUJBQXFCO0FBQzFELDhCQUFrQixVQUFVLFlBQVk7QUFDeEMsOEJBQWtCLFVBQVUsWUFBWTtBQUN4QywrQkFBbUIsVUFBVSxhQUFhO0FBQzFDLHNDQUEwQixVQUFVLG9CQUFvQjtBQUN4RCxxQ0FBeUIsVUFBVSxtQkFBbUI7QUFDdEQsK0JBQW1CLFVBQVUsYUFBYTtBQUMxQyxtQ0FBdUIsVUFBVSxpQkFBaUI7QUFDbEQsNENBQWdDLFVBQVUsd0JBQXdCO0FBQ2xFLG1DQUF1QixVQUFVLGlCQUFpQjtBQUNsRCx1Q0FBMkIsVUFBVSxxQkFBcUI7QUFBQSxVQUM1RDtBQUVBLGNBQUksd0JBQXdCLE9BQU8sV0FBVyxjQUFjLE9BQU87QUFDbkUsY0FBSSx1QkFBdUI7QUFDM0IsbUJBQVMsY0FBYyxlQUFlO0FBQ3BDLGdCQUFJLGtCQUFrQixRQUFRLE9BQU8sa0JBQWtCLFVBQVU7QUFDL0QscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksZ0JBQWdCLHlCQUF5QixjQUFjLHFCQUFxQixLQUFLLGNBQWMsb0JBQW9CO0FBRXZILGdCQUFJLE9BQU8sa0JBQWtCLFlBQVk7QUFDdkMscUJBQU87QUFBQSxZQUNUO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBS0EsY0FBSSx5QkFBeUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBSzNCLFNBQVM7QUFBQSxVQUNYO0FBTUEsY0FBSSwwQkFBMEI7QUFBQSxZQUM1QixZQUFZO0FBQUEsVUFDZDtBQVFBLGNBQUksb0JBQW9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUt0QixTQUFTO0FBQUEsVUFDWDtBQUVBLGNBQUkseUJBQXlCLENBQUM7QUFDOUIsY0FBSSx5QkFBeUI7QUFDN0IsbUJBQVMsbUJBQW1CLE9BQU87QUFDakM7QUFDRSx1Q0FBeUI7QUFBQSxZQUMzQjtBQUFBLFVBQ0Y7QUFFQTtBQUNFLG1DQUF1QixxQkFBcUIsU0FBVSxPQUFPO0FBQzNEO0FBQ0UseUNBQXlCO0FBQUEsY0FDM0I7QUFBQSxZQUNGO0FBR0EsbUNBQXVCLGtCQUFrQjtBQUV6QyxtQ0FBdUIsbUJBQW1CLFdBQVk7QUFDcEQsa0JBQUksUUFBUTtBQUVaLGtCQUFJLHdCQUF3QjtBQUMxQix5QkFBUztBQUFBLGNBQ1g7QUFHQSxrQkFBSSxPQUFPLHVCQUF1QjtBQUVsQyxrQkFBSSxNQUFNO0FBQ1IseUJBQVMsS0FBSyxLQUFLO0FBQUEsY0FDckI7QUFFQSxxQkFBTztBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBS0EsY0FBSSx1QkFBdUI7QUFBQSxZQUN6QixTQUFTO0FBQUEsVUFDWDtBQUVBLGNBQUksdUJBQXVCO0FBQUEsWUFDekI7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQTtBQUFBLFlBRUEsUUFBUTtBQUFBLFVBQ1Y7QUFFQTtBQUNFLGlDQUFxQix5QkFBeUI7QUFBQSxVQUNoRDtBQU9BLG1CQUFTLEtBQUssUUFBUTtBQUNwQjtBQUNFLHVCQUFTLE9BQU8sVUFBVSxRQUFRLE9BQU8sSUFBSSxNQUFNLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxPQUFPLE1BQU0sUUFBUTtBQUMxRyxxQkFBSyxPQUFPLENBQUMsSUFBSSxVQUFVLElBQUk7QUFBQSxjQUNqQztBQUVBLDJCQUFhLFFBQVEsUUFBUSxJQUFJO0FBQUEsWUFDbkM7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsTUFBTSxRQUFRO0FBQ3JCO0FBQ0UsdUJBQVMsUUFBUSxVQUFVLFFBQVEsT0FBTyxJQUFJLE1BQU0sUUFBUSxJQUFJLFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxHQUFHLFFBQVEsT0FBTyxTQUFTO0FBQ2pILHFCQUFLLFFBQVEsQ0FBQyxJQUFJLFVBQVUsS0FBSztBQUFBLGNBQ25DO0FBRUEsMkJBQWEsU0FBUyxRQUFRLElBQUk7QUFBQSxZQUNwQztBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxhQUFhLE9BQU8sUUFBUSxNQUFNO0FBR3pDO0FBQ0Usa0JBQUlDLDBCQUF5QixxQkFBcUI7QUFDbEQsa0JBQUksUUFBUUEsd0JBQXVCLGlCQUFpQjtBQUVwRCxrQkFBSSxVQUFVLElBQUk7QUFDaEIsMEJBQVU7QUFDVix1QkFBTyxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFBQSxjQUM1QjtBQUVBLGtCQUFJLGlCQUFpQixLQUFLLElBQUksU0FBVSxNQUFNO0FBQzVDLHVCQUFPLEtBQUs7QUFBQSxjQUNkLENBQUM7QUFFRCw2QkFBZSxRQUFRLGNBQWMsTUFBTTtBQUkzQyx1QkFBUyxVQUFVLE1BQU0sS0FBSyxRQUFRLEtBQUssR0FBRyxTQUFTLGNBQWM7QUFBQSxZQUN2RTtBQUFBLFVBQ0Y7QUFFQSxjQUFJLDBDQUEwQyxDQUFDO0FBRS9DLG1CQUFTLFNBQVMsZ0JBQWdCLFlBQVk7QUFDNUM7QUFDRSxrQkFBSSxlQUFlLGVBQWU7QUFDbEMsa0JBQUksZ0JBQWdCLGlCQUFpQixhQUFhLGVBQWUsYUFBYSxTQUFTO0FBQ3ZGLGtCQUFJLGFBQWEsZ0JBQWdCLE1BQU07QUFFdkMsa0JBQUksd0NBQXdDLFVBQVUsR0FBRztBQUN2RDtBQUFBLGNBQ0Y7QUFFQSxvQkFBTSx5UEFBd1EsWUFBWSxhQUFhO0FBRXZTLHNEQUF3QyxVQUFVLElBQUk7QUFBQSxZQUN4RDtBQUFBLFVBQ0Y7QUFNQSxjQUFJLHVCQUF1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFRekIsV0FBVyxTQUFVLGdCQUFnQjtBQUNuQyxxQkFBTztBQUFBLFlBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQWlCQSxvQkFBb0IsU0FBVSxnQkFBZ0IsVUFBVSxZQUFZO0FBQ2xFLHVCQUFTLGdCQUFnQixhQUFhO0FBQUEsWUFDeEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBZUEscUJBQXFCLFNBQVUsZ0JBQWdCLGVBQWUsVUFBVSxZQUFZO0FBQ2xGLHVCQUFTLGdCQUFnQixjQUFjO0FBQUEsWUFDekM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQWNBLGlCQUFpQixTQUFVLGdCQUFnQixjQUFjLFVBQVUsWUFBWTtBQUM3RSx1QkFBUyxnQkFBZ0IsVUFBVTtBQUFBLFlBQ3JDO0FBQUEsVUFDRjtBQUVBLGNBQUksY0FBYyxDQUFDO0FBRW5CO0FBQ0UsbUJBQU8sT0FBTyxXQUFXO0FBQUEsVUFDM0I7QUFNQSxtQkFBU0MsWUFBVSxPQUFPLFNBQVMsU0FBUztBQUMxQyxpQkFBSyxRQUFRO0FBQ2IsaUJBQUssVUFBVTtBQUVmLGlCQUFLLE9BQU87QUFHWixpQkFBSyxVQUFVLFdBQVc7QUFBQSxVQUM1QjtBQUVBLFVBQUFBLFlBQVUsVUFBVSxtQkFBbUIsQ0FBQztBQTJCeEMsVUFBQUEsWUFBVSxVQUFVLFdBQVcsU0FBVSxjQUFjLFVBQVU7QUFDL0QsZ0JBQUksRUFBRSxPQUFPLGlCQUFpQixZQUFZLE9BQU8saUJBQWlCLGNBQWMsZ0JBQWdCLE9BQU87QUFDckc7QUFDRSxzQkFBTSxNQUFPLHVIQUF3SDtBQUFBLGNBQ3ZJO0FBQUEsWUFDRjtBQUVBLGlCQUFLLFFBQVEsZ0JBQWdCLE1BQU0sY0FBYyxVQUFVLFVBQVU7QUFBQSxVQUN2RTtBQWlCQSxVQUFBQSxZQUFVLFVBQVUsY0FBYyxTQUFVLFVBQVU7QUFDcEQsaUJBQUssUUFBUSxtQkFBbUIsTUFBTSxVQUFVLGFBQWE7QUFBQSxVQUMvRDtBQVFBO0FBQ0UsZ0JBQUksaUJBQWlCO0FBQUEsY0FDbkIsV0FBVyxDQUFDLGFBQWEsb0hBQXlIO0FBQUEsY0FDbEosY0FBYyxDQUFDLGdCQUFnQixpR0FBc0c7QUFBQSxZQUN2STtBQUVBLGdCQUFJLDJCQUEyQixTQUFVLFlBQVksTUFBTTtBQUN6RCxxQkFBTyxlQUFlQSxZQUFVLFdBQVcsWUFBWTtBQUFBLGdCQUNyRCxLQUFLLFdBQVk7QUFDZix1QkFBSywrREFBK0QsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFFcEYseUJBQU87QUFBQSxnQkFDVDtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0g7QUFFQSxxQkFBUyxVQUFVLGdCQUFnQjtBQUNqQyxrQkFBSSxlQUFlLGVBQWUsTUFBTSxHQUFHO0FBQ3pDLHlDQUF5QixRQUFRLGVBQWUsTUFBTSxDQUFDO0FBQUEsY0FDekQ7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGlCQUFpQjtBQUFBLFVBQUM7QUFFM0IseUJBQWUsWUFBWUEsWUFBVTtBQUtyQyxtQkFBU0MsZUFBYyxPQUFPLFNBQVMsU0FBUztBQUM5QyxpQkFBSyxRQUFRO0FBQ2IsaUJBQUssVUFBVTtBQUVmLGlCQUFLLE9BQU87QUFDWixpQkFBSyxVQUFVLFdBQVc7QUFBQSxVQUM1QjtBQUVBLGNBQUkseUJBQXlCQSxlQUFjLFlBQVksSUFBSSxlQUFlO0FBQzFFLGlDQUF1QixjQUFjQTtBQUVyQyxrQkFBUSx3QkFBd0JELFlBQVUsU0FBUztBQUVuRCxpQ0FBdUIsdUJBQXVCO0FBRzlDLG1CQUFTRSxhQUFZO0FBQ25CLGdCQUFJLFlBQVk7QUFBQSxjQUNkLFNBQVM7QUFBQSxZQUNYO0FBRUE7QUFDRSxxQkFBTyxLQUFLLFNBQVM7QUFBQSxZQUN2QjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTLGVBQWUsV0FBVyxXQUFXLGFBQWE7QUFDekQsZ0JBQUksZUFBZSxVQUFVLGVBQWUsVUFBVSxRQUFRO0FBQzlELG1CQUFPLFVBQVUsZ0JBQWdCLGlCQUFpQixLQUFLLGNBQWMsTUFBTSxlQUFlLE1BQU07QUFBQSxVQUNsRztBQUVBLG1CQUFTLGVBQWUsTUFBTTtBQUM1QixtQkFBTyxLQUFLLGVBQWU7QUFBQSxVQUM3QjtBQUVBLG1CQUFTLGlCQUFpQixNQUFNO0FBQzlCLGdCQUFJLFFBQVEsTUFBTTtBQUVoQixxQkFBTztBQUFBLFlBQ1Q7QUFFQTtBQUNFLGtCQUFJLE9BQU8sS0FBSyxRQUFRLFVBQVU7QUFDaEMsc0JBQU0sMkdBQWdIO0FBQUEsY0FDeEg7QUFBQSxZQUNGO0FBRUEsZ0JBQUksT0FBTyxTQUFTLFlBQVk7QUFDOUIscUJBQU8sS0FBSyxlQUFlLEtBQUssUUFBUTtBQUFBLFlBQzFDO0FBRUEsZ0JBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIscUJBQU87QUFBQSxZQUNUO0FBRUEsb0JBQVEsTUFBTTtBQUFBLGNBQ1osS0FBSyxRQUFRO0FBQ1gsdUJBQU87QUFBQSxjQUVULEtBQUs7QUFDSCx1QkFBTztBQUFBLGNBRVQsS0FBSyxRQUFRO0FBQ1gsdUJBQU87QUFBQSxjQUVULEtBQUssUUFBUTtBQUNYLHVCQUFPO0FBQUEsY0FFVCxLQUFLLFFBQVE7QUFDWCx1QkFBTztBQUFBLGNBRVQsS0FBSztBQUNILHVCQUFPO0FBQUEsWUFDWDtBQUVBLGdCQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLHNCQUFRLEtBQUssVUFBVTtBQUFBLGdCQUNyQixLQUFLO0FBQ0gsc0JBQUksVUFBVTtBQUNkLHlCQUFPLGVBQWUsT0FBTyxJQUFJO0FBQUEsZ0JBRW5DLEtBQUs7QUFDSCxzQkFBSSxXQUFXO0FBQ2YseUJBQU8sZUFBZSxTQUFTLFFBQVEsSUFBSTtBQUFBLGdCQUU3QyxLQUFLO0FBQ0gseUJBQU8sZUFBZSxNQUFNLEtBQUssUUFBUSxZQUFZO0FBQUEsZ0JBRXZELEtBQUs7QUFDSCx5QkFBTyxpQkFBaUIsS0FBSyxJQUFJO0FBQUEsZ0JBRW5DLEtBQUs7QUFDSCx5QkFBTyxpQkFBaUIsS0FBSyxPQUFPO0FBQUEsZ0JBRXRDLEtBQUssaUJBQ0g7QUFDRSxzQkFBSSxnQkFBZ0I7QUFDcEIsc0JBQUksVUFBVSxjQUFjO0FBQzVCLHNCQUFJLE9BQU8sY0FBYztBQUV6QixzQkFBSTtBQUNGLDJCQUFPLGlCQUFpQixLQUFLLE9BQU8sQ0FBQztBQUFBLGtCQUN2QyxTQUFTLEdBQUc7QUFDViwyQkFBTztBQUFBLGtCQUNUO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNKO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUlDLGtCQUFpQixPQUFPLFVBQVU7QUFDdEMsY0FBSSxpQkFBaUI7QUFBQSxZQUNuQixLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxRQUFRO0FBQUEsWUFDUixVQUFVO0FBQUEsVUFDWjtBQUNBLGNBQUksNEJBQTRCLDRCQUE0QjtBQUU1RDtBQUNFLHFDQUF5QixDQUFDO0FBQUEsVUFDNUI7QUFFQSxtQkFBUyxZQUFZLFFBQVE7QUFDM0I7QUFDRSxrQkFBSUEsZ0JBQWUsS0FBSyxRQUFRLEtBQUssR0FBRztBQUN0QyxvQkFBSSxTQUFTLE9BQU8seUJBQXlCLFFBQVEsS0FBSyxFQUFFO0FBRTVELG9CQUFJLFVBQVUsT0FBTyxnQkFBZ0I7QUFDbkMseUJBQU87QUFBQSxnQkFDVDtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsbUJBQU8sT0FBTyxRQUFRO0FBQUEsVUFDeEI7QUFFQSxtQkFBUyxZQUFZLFFBQVE7QUFDM0I7QUFDRSxrQkFBSUEsZ0JBQWUsS0FBSyxRQUFRLEtBQUssR0FBRztBQUN0QyxvQkFBSSxTQUFTLE9BQU8seUJBQXlCLFFBQVEsS0FBSyxFQUFFO0FBRTVELG9CQUFJLFVBQVUsT0FBTyxnQkFBZ0I7QUFDbkMseUJBQU87QUFBQSxnQkFDVDtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsbUJBQU8sT0FBTyxRQUFRO0FBQUEsVUFDeEI7QUFFQSxtQkFBUywyQkFBMkIsT0FBTyxhQUFhO0FBQ3RELGdCQUFJLHdCQUF3QixXQUFZO0FBQ3RDO0FBQ0Usb0JBQUksQ0FBQyw0QkFBNEI7QUFDL0IsK0NBQTZCO0FBRTdCLHdCQUFNLDZPQUE0UCxXQUFXO0FBQUEsZ0JBQy9RO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxrQ0FBc0IsaUJBQWlCO0FBQ3ZDLG1CQUFPLGVBQWUsT0FBTyxPQUFPO0FBQUEsY0FDbEMsS0FBSztBQUFBLGNBQ0wsY0FBYztBQUFBLFlBQ2hCLENBQUM7QUFBQSxVQUNIO0FBRUEsbUJBQVMsMkJBQTJCLE9BQU8sYUFBYTtBQUN0RCxnQkFBSSx3QkFBd0IsV0FBWTtBQUN0QztBQUNFLG9CQUFJLENBQUMsNEJBQTRCO0FBQy9CLCtDQUE2QjtBQUU3Qix3QkFBTSw2T0FBNFAsV0FBVztBQUFBLGdCQUMvUTtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsa0NBQXNCLGlCQUFpQjtBQUN2QyxtQkFBTyxlQUFlLE9BQU8sT0FBTztBQUFBLGNBQ2xDLEtBQUs7QUFBQSxjQUNMLGNBQWM7QUFBQSxZQUNoQixDQUFDO0FBQUEsVUFDSDtBQUVBLG1CQUFTLHFDQUFxQyxRQUFRO0FBQ3BEO0FBQ0Usa0JBQUksT0FBTyxPQUFPLFFBQVEsWUFBWSxrQkFBa0IsV0FBVyxPQUFPLFVBQVUsa0JBQWtCLFFBQVEsY0FBYyxPQUFPLFFBQVE7QUFDekksb0JBQUksZ0JBQWdCLGlCQUFpQixrQkFBa0IsUUFBUSxJQUFJO0FBRW5FLG9CQUFJLENBQUMsdUJBQXVCLGFBQWEsR0FBRztBQUMxQyx3QkFBTSw2VkFBc1gsZUFBZSxPQUFPLEdBQUc7QUFFcloseUNBQXVCLGFBQWEsSUFBSTtBQUFBLGdCQUMxQztBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQXVCQSxjQUFJQyxnQkFBZSxTQUFVLE1BQU0sS0FBSyxLQUFLQyxPQUFNLFFBQVEsT0FBTyxPQUFPO0FBQ3ZFLGdCQUFJLFVBQVU7QUFBQTtBQUFBLGNBRVosVUFBVTtBQUFBO0FBQUEsY0FFVjtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBO0FBQUEsY0FFQSxRQUFRO0FBQUEsWUFDVjtBQUVBO0FBS0Usc0JBQVEsU0FBUyxDQUFDO0FBS2xCLHFCQUFPLGVBQWUsUUFBUSxRQUFRLGFBQWE7QUFBQSxnQkFDakQsY0FBYztBQUFBLGdCQUNkLFlBQVk7QUFBQSxnQkFDWixVQUFVO0FBQUEsZ0JBQ1YsT0FBTztBQUFBLGNBQ1QsQ0FBQztBQUVELHFCQUFPLGVBQWUsU0FBUyxTQUFTO0FBQUEsZ0JBQ3RDLGNBQWM7QUFBQSxnQkFDZCxZQUFZO0FBQUEsZ0JBQ1osVUFBVTtBQUFBLGdCQUNWLE9BQU9BO0FBQUEsY0FDVCxDQUFDO0FBR0QscUJBQU8sZUFBZSxTQUFTLFdBQVc7QUFBQSxnQkFDeEMsY0FBYztBQUFBLGdCQUNkLFlBQVk7QUFBQSxnQkFDWixVQUFVO0FBQUEsZ0JBQ1YsT0FBTztBQUFBLGNBQ1QsQ0FBQztBQUVELGtCQUFJLE9BQU8sUUFBUTtBQUNqQix1QkFBTyxPQUFPLFFBQVEsS0FBSztBQUMzQix1QkFBTyxPQUFPLE9BQU87QUFBQSxjQUN2QjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFNQSxtQkFBU0MsZ0JBQWMsTUFBTSxRQUFRLFVBQVU7QUFDN0MsZ0JBQUk7QUFFSixnQkFBSSxRQUFRLENBQUM7QUFDYixnQkFBSSxNQUFNO0FBQ1YsZ0JBQUksTUFBTTtBQUNWLGdCQUFJRCxRQUFPO0FBQ1gsZ0JBQUksU0FBUztBQUViLGdCQUFJLFVBQVUsTUFBTTtBQUNsQixrQkFBSSxZQUFZLE1BQU0sR0FBRztBQUN2QixzQkFBTSxPQUFPO0FBRWI7QUFDRSx1REFBcUMsTUFBTTtBQUFBLGdCQUM3QztBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxZQUFZLE1BQU0sR0FBRztBQUN2QixzQkFBTSxLQUFLLE9BQU87QUFBQSxjQUNwQjtBQUVBLGNBQUFBLFFBQU8sT0FBTyxXQUFXLFNBQVksT0FBTyxPQUFPO0FBQ25ELHVCQUFTLE9BQU8sYUFBYSxTQUFZLE9BQU8sT0FBTztBQUV2RCxtQkFBSyxZQUFZLFFBQVE7QUFDdkIsb0JBQUlGLGdCQUFlLEtBQUssUUFBUSxRQUFRLEtBQUssQ0FBQyxlQUFlLGVBQWUsUUFBUSxHQUFHO0FBQ3JGLHdCQUFNLFFBQVEsSUFBSSxPQUFPLFFBQVE7QUFBQSxnQkFDbkM7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUlBLGdCQUFJLGlCQUFpQixVQUFVLFNBQVM7QUFFeEMsZ0JBQUksbUJBQW1CLEdBQUc7QUFDeEIsb0JBQU0sV0FBVztBQUFBLFlBQ25CLFdBQVcsaUJBQWlCLEdBQUc7QUFDN0Isa0JBQUksYUFBYSxNQUFNLGNBQWM7QUFFckMsdUJBQVMsSUFBSSxHQUFHLElBQUksZ0JBQWdCLEtBQUs7QUFDdkMsMkJBQVcsQ0FBQyxJQUFJLFVBQVUsSUFBSSxDQUFDO0FBQUEsY0FDakM7QUFFQTtBQUNFLG9CQUFJLE9BQU8sUUFBUTtBQUNqQix5QkFBTyxPQUFPLFVBQVU7QUFBQSxnQkFDMUI7QUFBQSxjQUNGO0FBRUEsb0JBQU0sV0FBVztBQUFBLFlBQ25CO0FBR0EsZ0JBQUksUUFBUSxLQUFLLGNBQWM7QUFDN0Isa0JBQUksZUFBZSxLQUFLO0FBRXhCLG1CQUFLLFlBQVksY0FBYztBQUM3QixvQkFBSSxNQUFNLFFBQVEsTUFBTSxRQUFXO0FBQ2pDLHdCQUFNLFFBQVEsSUFBSSxhQUFhLFFBQVE7QUFBQSxnQkFDekM7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBO0FBQ0Usa0JBQUksT0FBTyxLQUFLO0FBQ2Qsb0JBQUksY0FBYyxPQUFPLFNBQVMsYUFBYSxLQUFLLGVBQWUsS0FBSyxRQUFRLFlBQVk7QUFFNUYsb0JBQUksS0FBSztBQUNQLDZDQUEyQixPQUFPLFdBQVc7QUFBQSxnQkFDL0M7QUFFQSxvQkFBSSxLQUFLO0FBQ1AsNkNBQTJCLE9BQU8sV0FBVztBQUFBLGdCQUMvQztBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsbUJBQU9DLGNBQWEsTUFBTSxLQUFLLEtBQUtDLE9BQU0sUUFBUSxrQkFBa0IsU0FBUyxLQUFLO0FBQUEsVUFDcEY7QUFDQSxtQkFBUyxtQkFBbUIsWUFBWSxRQUFRO0FBQzlDLGdCQUFJLGFBQWFELGNBQWEsV0FBVyxNQUFNLFFBQVEsV0FBVyxLQUFLLFdBQVcsT0FBTyxXQUFXLFNBQVMsV0FBVyxRQUFRLFdBQVcsS0FBSztBQUNoSixtQkFBTztBQUFBLFVBQ1Q7QUFNQSxtQkFBU0csY0FBYSxTQUFTLFFBQVEsVUFBVTtBQUMvQyxnQkFBSSxDQUFDLEVBQUUsWUFBWSxRQUFRLFlBQVksU0FBWTtBQUNqRDtBQUNFLHNCQUFNLE1BQU8sbUZBQW1GLFVBQVUsR0FBSTtBQUFBLGNBQ2hIO0FBQUEsWUFDRjtBQUVBLGdCQUFJO0FBRUosZ0JBQUksUUFBUSxRQUFRLENBQUMsR0FBRyxRQUFRLEtBQUs7QUFHckMsZ0JBQUksTUFBTSxRQUFRO0FBQ2xCLGdCQUFJLE1BQU0sUUFBUTtBQUVsQixnQkFBSUYsUUFBTyxRQUFRO0FBSW5CLGdCQUFJLFNBQVMsUUFBUTtBQUVyQixnQkFBSSxRQUFRLFFBQVE7QUFFcEIsZ0JBQUksVUFBVSxNQUFNO0FBQ2xCLGtCQUFJLFlBQVksTUFBTSxHQUFHO0FBRXZCLHNCQUFNLE9BQU87QUFDYix3QkFBUSxrQkFBa0I7QUFBQSxjQUM1QjtBQUVBLGtCQUFJLFlBQVksTUFBTSxHQUFHO0FBQ3ZCLHNCQUFNLEtBQUssT0FBTztBQUFBLGNBQ3BCO0FBR0Esa0JBQUk7QUFFSixrQkFBSSxRQUFRLFFBQVEsUUFBUSxLQUFLLGNBQWM7QUFDN0MsK0JBQWUsUUFBUSxLQUFLO0FBQUEsY0FDOUI7QUFFQSxtQkFBSyxZQUFZLFFBQVE7QUFDdkIsb0JBQUlGLGdCQUFlLEtBQUssUUFBUSxRQUFRLEtBQUssQ0FBQyxlQUFlLGVBQWUsUUFBUSxHQUFHO0FBQ3JGLHNCQUFJLE9BQU8sUUFBUSxNQUFNLFVBQWEsaUJBQWlCLFFBQVc7QUFFaEUsMEJBQU0sUUFBUSxJQUFJLGFBQWEsUUFBUTtBQUFBLGtCQUN6QyxPQUFPO0FBQ0wsMEJBQU0sUUFBUSxJQUFJLE9BQU8sUUFBUTtBQUFBLGtCQUNuQztBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFJQSxnQkFBSSxpQkFBaUIsVUFBVSxTQUFTO0FBRXhDLGdCQUFJLG1CQUFtQixHQUFHO0FBQ3hCLG9CQUFNLFdBQVc7QUFBQSxZQUNuQixXQUFXLGlCQUFpQixHQUFHO0FBQzdCLGtCQUFJLGFBQWEsTUFBTSxjQUFjO0FBRXJDLHVCQUFTLElBQUksR0FBRyxJQUFJLGdCQUFnQixLQUFLO0FBQ3ZDLDJCQUFXLENBQUMsSUFBSSxVQUFVLElBQUksQ0FBQztBQUFBLGNBQ2pDO0FBRUEsb0JBQU0sV0FBVztBQUFBLFlBQ25CO0FBRUEsbUJBQU9DLGNBQWEsUUFBUSxNQUFNLEtBQUssS0FBS0MsT0FBTSxRQUFRLE9BQU8sS0FBSztBQUFBLFVBQ3hFO0FBU0EsbUJBQVNHLGdCQUFlQyxTQUFRO0FBQzlCLG1CQUFPLE9BQU9BLFlBQVcsWUFBWUEsWUFBVyxRQUFRQSxRQUFPLGFBQWE7QUFBQSxVQUM5RTtBQUVBLGNBQUksWUFBWTtBQUNoQixjQUFJLGVBQWU7QUFRbkIsbUJBQVMsT0FBTyxLQUFLO0FBQ25CLGdCQUFJLGNBQWM7QUFDbEIsZ0JBQUksZ0JBQWdCO0FBQUEsY0FDbEIsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLFlBQ1A7QUFDQSxnQkFBSSxnQkFBZ0IsSUFBSSxRQUFRLGFBQWEsU0FBVUMsUUFBTztBQUM1RCxxQkFBTyxjQUFjQSxNQUFLO0FBQUEsWUFDNUIsQ0FBQztBQUNELG1CQUFPLE1BQU07QUFBQSxVQUNmO0FBT0EsY0FBSSxtQkFBbUI7QUFDdkIsY0FBSSw2QkFBNkI7QUFFakMsbUJBQVMsc0JBQXNCLE1BQU07QUFDbkMsbUJBQU8sS0FBSyxRQUFRLDRCQUE0QixLQUFLO0FBQUEsVUFDdkQ7QUFVQSxtQkFBUyxjQUFjLFNBQVMsT0FBTztBQUdyQyxnQkFBSSxPQUFPLFlBQVksWUFBWSxZQUFZLFFBQVEsUUFBUSxPQUFPLE1BQU07QUFFMUUscUJBQU8sT0FBTyxLQUFLLFFBQVEsR0FBRztBQUFBLFlBQ2hDO0FBR0EsbUJBQU8sTUFBTSxTQUFTLEVBQUU7QUFBQSxVQUMxQjtBQUVBLG1CQUFTLGFBQWEsVUFBVSxPQUFPLGVBQWUsV0FBVyxVQUFVO0FBQ3pFLGdCQUFJLE9BQU8sT0FBTztBQUVsQixnQkFBSSxTQUFTLGVBQWUsU0FBUyxXQUFXO0FBRTlDLHlCQUFXO0FBQUEsWUFDYjtBQUVBLGdCQUFJLGlCQUFpQjtBQUVyQixnQkFBSSxhQUFhLE1BQU07QUFDckIsK0JBQWlCO0FBQUEsWUFDbkIsT0FBTztBQUNMLHNCQUFRLE1BQU07QUFBQSxnQkFDWixLQUFLO0FBQUEsZ0JBQ0wsS0FBSztBQUNILG1DQUFpQjtBQUNqQjtBQUFBLGdCQUVGLEtBQUs7QUFDSCwwQkFBUSxTQUFTLFVBQVU7QUFBQSxvQkFDekIsS0FBSztBQUFBLG9CQUNMLEtBQUs7QUFDSCx1Q0FBaUI7QUFBQSxrQkFDckI7QUFBQSxjQUVKO0FBQUEsWUFDRjtBQUVBLGdCQUFJLGdCQUFnQjtBQUNsQixrQkFBSSxTQUFTO0FBQ2Isa0JBQUksY0FBYyxTQUFTLE1BQU07QUFHakMsa0JBQUksV0FBVyxjQUFjLEtBQUssWUFBWSxjQUFjLFFBQVEsQ0FBQyxJQUFJO0FBRXpFLGtCQUFJLE1BQU0sUUFBUSxXQUFXLEdBQUc7QUFDOUIsb0JBQUksa0JBQWtCO0FBRXRCLG9CQUFJLFlBQVksTUFBTTtBQUNwQixvQ0FBa0Isc0JBQXNCLFFBQVEsSUFBSTtBQUFBLGdCQUN0RDtBQUVBLDZCQUFhLGFBQWEsT0FBTyxpQkFBaUIsSUFBSSxTQUFVLEdBQUc7QUFDakUseUJBQU87QUFBQSxnQkFDVCxDQUFDO0FBQUEsY0FDSCxXQUFXLGVBQWUsTUFBTTtBQUM5QixvQkFBSUYsZ0JBQWUsV0FBVyxHQUFHO0FBQy9CLGdDQUFjO0FBQUEsb0JBQW1CO0FBQUE7QUFBQTtBQUFBLG9CQUVqQztBQUFBLHFCQUNBLFlBQVksUUFBUSxDQUFDLFVBQVUsT0FBTyxRQUFRLFlBQVk7QUFBQTtBQUFBLHNCQUMxRCxzQkFBc0IsS0FBSyxZQUFZLEdBQUcsSUFBSTtBQUFBLHdCQUFNLE1BQU07QUFBQSxrQkFBUTtBQUFBLGdCQUNwRTtBQUVBLHNCQUFNLEtBQUssV0FBVztBQUFBLGNBQ3hCO0FBRUEscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUk7QUFDSixnQkFBSTtBQUNKLGdCQUFJLGVBQWU7QUFFbkIsZ0JBQUksaUJBQWlCLGNBQWMsS0FBSyxZQUFZLFlBQVk7QUFFaEUsZ0JBQUksTUFBTSxRQUFRLFFBQVEsR0FBRztBQUMzQix1QkFBUyxJQUFJLEdBQUcsSUFBSSxTQUFTLFFBQVEsS0FBSztBQUN4Qyx3QkFBUSxTQUFTLENBQUM7QUFDbEIsMkJBQVcsaUJBQWlCLGNBQWMsT0FBTyxDQUFDO0FBQ2xELGdDQUFnQixhQUFhLE9BQU8sT0FBTyxlQUFlLFVBQVUsUUFBUTtBQUFBLGNBQzlFO0FBQUEsWUFDRixPQUFPO0FBQ0wsa0JBQUksYUFBYSxjQUFjLFFBQVE7QUFFdkMsa0JBQUksT0FBTyxlQUFlLFlBQVk7QUFDcEMsb0JBQUksbUJBQW1CO0FBRXZCO0FBRUUsc0JBQUksZUFBZSxpQkFBaUIsU0FBUztBQUMzQyx3QkFBSSxDQUFDLGtCQUFrQjtBQUNyQiwyQkFBSyx1RkFBNEY7QUFBQSxvQkFDbkc7QUFFQSx1Q0FBbUI7QUFBQSxrQkFDckI7QUFBQSxnQkFDRjtBQUVBLG9CQUFJLFdBQVcsV0FBVyxLQUFLLGdCQUFnQjtBQUMvQyxvQkFBSTtBQUNKLG9CQUFJLEtBQUs7QUFFVCx1QkFBTyxFQUFFLE9BQU8sU0FBUyxLQUFLLEdBQUcsTUFBTTtBQUNyQywwQkFBUSxLQUFLO0FBQ2IsNkJBQVcsaUJBQWlCLGNBQWMsT0FBTyxJQUFJO0FBQ3JELGtDQUFnQixhQUFhLE9BQU8sT0FBTyxlQUFlLFVBQVUsUUFBUTtBQUFBLGdCQUM5RTtBQUFBLGNBQ0YsV0FBVyxTQUFTLFVBQVU7QUFDNUIsb0JBQUksaUJBQWlCLEtBQUs7QUFFMUI7QUFDRTtBQUNFLDBCQUFNLE1BQU8scURBQXFELG1CQUFtQixvQkFBb0IsdUJBQXVCLE9BQU8sS0FBSyxRQUFRLEVBQUUsS0FBSyxJQUFJLElBQUksTUFBTSxrQkFBa0IsMkVBQTRFO0FBQUEsa0JBQ3pRO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQWVBLG1CQUFTLFlBQVksVUFBVUcsT0FBTSxTQUFTO0FBQzVDLGdCQUFJLFlBQVksTUFBTTtBQUNwQixxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxTQUFTLENBQUM7QUFDZCxnQkFBSSxRQUFRO0FBQ1oseUJBQWEsVUFBVSxRQUFRLElBQUksSUFBSSxTQUFVLE9BQU87QUFDdEQscUJBQU9BLE1BQUssS0FBSyxTQUFTLE9BQU8sT0FBTztBQUFBLFlBQzFDLENBQUM7QUFDRCxtQkFBTztBQUFBLFVBQ1Q7QUFZQSxtQkFBUyxjQUFjLFVBQVU7QUFDL0IsZ0JBQUksSUFBSTtBQUNSLHdCQUFZLFVBQVUsV0FBWTtBQUNoQztBQUFBLFlBQ0YsQ0FBQztBQUNELG1CQUFPO0FBQUEsVUFDVDtBQWNBLG1CQUFTLGdCQUFnQixVQUFVLGFBQWEsZ0JBQWdCO0FBQzlELHdCQUFZLFVBQVUsV0FBWTtBQUNoQywwQkFBWSxNQUFNLE1BQU0sU0FBUztBQUFBLFlBQ25DLEdBQUcsY0FBYztBQUFBLFVBQ25CO0FBU0EsbUJBQVNDLFNBQVEsVUFBVTtBQUN6QixtQkFBTyxZQUFZLFVBQVUsU0FBVSxPQUFPO0FBQzVDLHFCQUFPO0FBQUEsWUFDVCxDQUFDLEtBQUssQ0FBQztBQUFBLFVBQ1Q7QUFpQkEsbUJBQVMsVUFBVSxVQUFVO0FBQzNCLGdCQUFJLENBQUNKLGdCQUFlLFFBQVEsR0FBRztBQUM3QjtBQUNFLHNCQUFNLE1BQU8sdUVBQXdFO0FBQUEsY0FDdkY7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVNLLGdCQUFjLGNBQWMsc0JBQXNCO0FBQ3pELGdCQUFJLHlCQUF5QixRQUFXO0FBQ3RDLHFDQUF1QjtBQUFBLFlBQ3pCLE9BQU87QUFDTDtBQUNFLG9CQUFJLHlCQUF5QixRQUFRLE9BQU8seUJBQXlCLFlBQVk7QUFDL0Usd0JBQU0sK0ZBQW9HLG9CQUFvQjtBQUFBLGdCQUNoSTtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsZ0JBQUksVUFBVTtBQUFBLGNBQ1osVUFBVTtBQUFBLGNBQ1YsdUJBQXVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBTXZCLGVBQWU7QUFBQSxjQUNmLGdCQUFnQjtBQUFBO0FBQUE7QUFBQSxjQUdoQixjQUFjO0FBQUE7QUFBQSxjQUVkLFVBQVU7QUFBQSxjQUNWLFVBQVU7QUFBQSxZQUNaO0FBQ0Esb0JBQVEsV0FBVztBQUFBLGNBQ2pCLFVBQVU7QUFBQSxjQUNWLFVBQVU7QUFBQSxZQUNaO0FBQ0EsZ0JBQUksNENBQTRDO0FBQ2hELGdCQUFJLHNDQUFzQztBQUMxQyxnQkFBSSxzQ0FBc0M7QUFFMUM7QUFJRSxrQkFBSSxXQUFXO0FBQUEsZ0JBQ2IsVUFBVTtBQUFBLGdCQUNWLFVBQVU7QUFBQSxnQkFDVix1QkFBdUIsUUFBUTtBQUFBLGNBQ2pDO0FBRUEscUJBQU8saUJBQWlCLFVBQVU7QUFBQSxnQkFDaEMsVUFBVTtBQUFBLGtCQUNSLEtBQUssV0FBWTtBQUNmLHdCQUFJLENBQUMscUNBQXFDO0FBQ3hDLDREQUFzQztBQUV0Qyw0QkFBTSwwSkFBK0o7QUFBQSxvQkFDdks7QUFFQSwyQkFBTyxRQUFRO0FBQUEsa0JBQ2pCO0FBQUEsa0JBQ0EsS0FBSyxTQUFVLFdBQVc7QUFDeEIsNEJBQVEsV0FBVztBQUFBLGtCQUNyQjtBQUFBLGdCQUNGO0FBQUEsZ0JBQ0EsZUFBZTtBQUFBLGtCQUNiLEtBQUssV0FBWTtBQUNmLDJCQUFPLFFBQVE7QUFBQSxrQkFDakI7QUFBQSxrQkFDQSxLQUFLLFNBQVUsZUFBZTtBQUM1Qiw0QkFBUSxnQkFBZ0I7QUFBQSxrQkFDMUI7QUFBQSxnQkFDRjtBQUFBLGdCQUNBLGdCQUFnQjtBQUFBLGtCQUNkLEtBQUssV0FBWTtBQUNmLDJCQUFPLFFBQVE7QUFBQSxrQkFDakI7QUFBQSxrQkFDQSxLQUFLLFNBQVUsZ0JBQWdCO0FBQzdCLDRCQUFRLGlCQUFpQjtBQUFBLGtCQUMzQjtBQUFBLGdCQUNGO0FBQUEsZ0JBQ0EsY0FBYztBQUFBLGtCQUNaLEtBQUssV0FBWTtBQUNmLDJCQUFPLFFBQVE7QUFBQSxrQkFDakI7QUFBQSxrQkFDQSxLQUFLLFNBQVUsY0FBYztBQUMzQiw0QkFBUSxlQUFlO0FBQUEsa0JBQ3pCO0FBQUEsZ0JBQ0Y7QUFBQSxnQkFDQSxVQUFVO0FBQUEsa0JBQ1IsS0FBSyxXQUFZO0FBQ2Ysd0JBQUksQ0FBQywyQ0FBMkM7QUFDOUMsa0VBQTRDO0FBRTVDLDRCQUFNLDBKQUErSjtBQUFBLG9CQUN2SztBQUVBLDJCQUFPLFFBQVE7QUFBQSxrQkFDakI7QUFBQSxnQkFDRjtBQUFBLGdCQUNBLGFBQWE7QUFBQSxrQkFDWCxLQUFLLFdBQVk7QUFDZiwyQkFBTyxRQUFRO0FBQUEsa0JBQ2pCO0FBQUEsa0JBQ0EsS0FBSyxTQUFVLGFBQWE7QUFDMUIsd0JBQUksQ0FBQyxxQ0FBcUM7QUFDeEMsMkJBQUssdUlBQTRJLFdBQVc7QUFFNUosNERBQXNDO0FBQUEsb0JBQ3hDO0FBQUEsa0JBQ0Y7QUFBQSxnQkFDRjtBQUFBLGNBQ0YsQ0FBQztBQUVELHNCQUFRLFdBQVc7QUFBQSxZQUNyQjtBQUVBO0FBQ0Usc0JBQVEsbUJBQW1CO0FBQzNCLHNCQUFRLG9CQUFvQjtBQUFBLFlBQzlCO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxnQkFBZ0I7QUFDcEIsY0FBSSxVQUFVO0FBQ2QsY0FBSSxXQUFXO0FBQ2YsY0FBSSxXQUFXO0FBRWYsbUJBQVMsZ0JBQWdCLFNBQVM7QUFDaEMsZ0JBQUksUUFBUSxZQUFZLGVBQWU7QUFDckMsa0JBQUksT0FBTyxRQUFRO0FBQ25CLGtCQUFJLFdBQVcsS0FBSztBQUVwQixrQkFBSSxVQUFVO0FBQ2Qsc0JBQVEsVUFBVTtBQUNsQixzQkFBUSxVQUFVO0FBQ2xCLHVCQUFTLEtBQUssU0FBVSxjQUFjO0FBQ3BDLG9CQUFJLFFBQVEsWUFBWSxTQUFTO0FBQy9CLHNCQUFJLGdCQUFnQixhQUFhO0FBRWpDO0FBQ0Usd0JBQUksa0JBQWtCLFFBQVc7QUFDL0IsNEJBQU0seUtBQzBELFlBQVk7QUFBQSxvQkFDOUU7QUFBQSxrQkFDRjtBQUdBLHNCQUFJLFdBQVc7QUFDZiwyQkFBUyxVQUFVO0FBQ25CLDJCQUFTLFVBQVU7QUFBQSxnQkFDckI7QUFBQSxjQUNGLEdBQUcsU0FBVUMsUUFBTztBQUNsQixvQkFBSSxRQUFRLFlBQVksU0FBUztBQUUvQixzQkFBSSxXQUFXO0FBQ2YsMkJBQVMsVUFBVTtBQUNuQiwyQkFBUyxVQUFVQTtBQUFBLGdCQUNyQjtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0g7QUFFQSxnQkFBSSxRQUFRLFlBQVksVUFBVTtBQUNoQyxxQkFBTyxRQUFRO0FBQUEsWUFDakIsT0FBTztBQUNMLG9CQUFNLFFBQVE7QUFBQSxZQUNoQjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxLQUFLLE1BQU07QUFDbEIsZ0JBQUksVUFBVTtBQUFBO0FBQUEsY0FFWixTQUFTO0FBQUEsY0FDVCxTQUFTO0FBQUEsWUFDWDtBQUNBLGdCQUFJLFdBQVc7QUFBQSxjQUNiLFVBQVU7QUFBQSxjQUNWLFVBQVU7QUFBQSxjQUNWLE9BQU87QUFBQSxZQUNUO0FBRUE7QUFFRSxrQkFBSTtBQUNKLGtCQUFJO0FBRUoscUJBQU8saUJBQWlCLFVBQVU7QUFBQSxnQkFDaEMsY0FBYztBQUFBLGtCQUNaLGNBQWM7QUFBQSxrQkFDZCxLQUFLLFdBQVk7QUFDZiwyQkFBTztBQUFBLGtCQUNUO0FBQUEsa0JBQ0EsS0FBSyxTQUFVLGlCQUFpQjtBQUM5QiwwQkFBTSx5TEFBbU07QUFFek0sbUNBQWU7QUFHZiwyQkFBTyxlQUFlLFVBQVUsZ0JBQWdCO0FBQUEsc0JBQzlDLFlBQVk7QUFBQSxvQkFDZCxDQUFDO0FBQUEsa0JBQ0g7QUFBQSxnQkFDRjtBQUFBLGdCQUNBLFdBQVc7QUFBQSxrQkFDVCxjQUFjO0FBQUEsa0JBQ2QsS0FBSyxXQUFZO0FBQ2YsMkJBQU87QUFBQSxrQkFDVDtBQUFBLGtCQUNBLEtBQUssU0FBVSxjQUFjO0FBQzNCLDBCQUFNLHNMQUFnTTtBQUV0TSxnQ0FBWTtBQUdaLDJCQUFPLGVBQWUsVUFBVSxhQUFhO0FBQUEsc0JBQzNDLFlBQVk7QUFBQSxvQkFDZCxDQUFDO0FBQUEsa0JBQ0g7QUFBQSxnQkFDRjtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0g7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxtQkFBU0MsYUFBV0MsU0FBUTtBQUMxQjtBQUNFLGtCQUFJQSxXQUFVLFFBQVFBLFFBQU8sYUFBYSxpQkFBaUI7QUFDekQsc0JBQU0scUlBQStJO0FBQUEsY0FDdkosV0FBVyxPQUFPQSxZQUFXLFlBQVk7QUFDdkMsc0JBQU0sMkRBQTJEQSxZQUFXLE9BQU8sU0FBUyxPQUFPQSxPQUFNO0FBQUEsY0FDM0csT0FBTztBQUNMLG9CQUFJQSxRQUFPLFdBQVcsS0FBS0EsUUFBTyxXQUFXLEdBQUc7QUFDOUMsd0JBQU0sZ0ZBQWdGQSxRQUFPLFdBQVcsSUFBSSw2Q0FBNkMsNkNBQTZDO0FBQUEsZ0JBQ3hNO0FBQUEsY0FDRjtBQUVBLGtCQUFJQSxXQUFVLE1BQU07QUFDbEIsb0JBQUlBLFFBQU8sZ0JBQWdCLFFBQVFBLFFBQU8sYUFBYSxNQUFNO0FBQzNELHdCQUFNLG9IQUF5SDtBQUFBLGdCQUNqSTtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsZ0JBQUksY0FBYztBQUFBLGNBQ2hCLFVBQVU7QUFBQSxjQUNWLFFBQVFBO0FBQUEsWUFDVjtBQUVBO0FBQ0Usa0JBQUk7QUFDSixxQkFBTyxlQUFlLGFBQWEsZUFBZTtBQUFBLGdCQUNoRCxZQUFZO0FBQUEsZ0JBQ1osY0FBYztBQUFBLGdCQUNkLEtBQUssV0FBWTtBQUNmLHlCQUFPO0FBQUEsZ0JBQ1Q7QUFBQSxnQkFDQSxLQUFLLFNBQVUsTUFBTTtBQUNuQiw0QkFBVTtBQUVWLHNCQUFJQSxRQUFPLGVBQWUsTUFBTTtBQUM5QixvQkFBQUEsUUFBTyxjQUFjO0FBQUEsa0JBQ3ZCO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGLENBQUM7QUFBQSxZQUNIO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBSUEsY0FBSSxpQkFBaUI7QUFFckIsbUJBQVMsbUJBQW1CLE1BQU07QUFDaEMsZ0JBQUksT0FBTyxTQUFTLFlBQVksT0FBTyxTQUFTLFlBQVk7QUFDMUQscUJBQU87QUFBQSxZQUNUO0FBR0EsZ0JBQUksU0FBUyxRQUFRLFlBQVksU0FBUyxRQUFRLFlBQVksU0FBUyxpQ0FBaUMsU0FBUyxRQUFRLGNBQWMsU0FBUyxRQUFRLFlBQVksU0FBUyw0QkFBNEIsU0FBUyw0QkFBNEIsZ0JBQWlCO0FBQzdQLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLE9BQU8sU0FBUyxZQUFZLFNBQVMsTUFBTTtBQUM3QyxrQkFBSSxLQUFLLGFBQWEsbUJBQW1CLEtBQUssYUFBYSxtQkFBbUIsS0FBSyxhQUFhLHVCQUF1QixLQUFLLGFBQWEsc0JBQXNCLEtBQUssYUFBYSwwQkFBMEIsS0FBSyxhQUFhLDBCQUEwQixLQUFLLGFBQWEsb0JBQW9CLEtBQUssQ0FBQyxNQUFNLHlCQUF5QjtBQUNoVSx1QkFBTztBQUFBLGNBQ1Q7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVNDLE1BQUssTUFBTSxTQUFTO0FBQzNCO0FBQ0Usa0JBQUksQ0FBQyxtQkFBbUIsSUFBSSxHQUFHO0FBQzdCLHNCQUFNLHNFQUEyRSxTQUFTLE9BQU8sU0FBUyxPQUFPLElBQUk7QUFBQSxjQUN2SDtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxjQUFjO0FBQUEsY0FDaEIsVUFBVTtBQUFBLGNBQ1Y7QUFBQSxjQUNBLFNBQVMsWUFBWSxTQUFZLE9BQU87QUFBQSxZQUMxQztBQUVBO0FBQ0Usa0JBQUk7QUFDSixxQkFBTyxlQUFlLGFBQWEsZUFBZTtBQUFBLGdCQUNoRCxZQUFZO0FBQUEsZ0JBQ1osY0FBYztBQUFBLGdCQUNkLEtBQUssV0FBWTtBQUNmLHlCQUFPO0FBQUEsZ0JBQ1Q7QUFBQSxnQkFDQSxLQUFLLFNBQVUsTUFBTTtBQUNuQiw0QkFBVTtBQUVWLHNCQUFJLEtBQUssZUFBZSxNQUFNO0FBQzVCLHlCQUFLLGNBQWM7QUFBQSxrQkFDckI7QUFBQSxnQkFDRjtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0g7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxtQkFBUyxvQkFBb0I7QUFDM0IsZ0JBQUksYUFBYSx1QkFBdUI7QUFFeEMsZ0JBQUksRUFBRSxlQUFlLE9BQU87QUFDMUI7QUFDRSxzQkFBTSxNQUFPLGliQUFrYjtBQUFBLGNBQ2pjO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTQyxhQUFXLFNBQVMsdUJBQXVCO0FBQ2xELGdCQUFJLGFBQWEsa0JBQWtCO0FBRW5DO0FBQ0Usa0JBQUksMEJBQTBCLFFBQVc7QUFDdkMsc0JBQU0sb0hBQThILHVCQUF1QixPQUFPLDBCQUEwQixZQUFZLE1BQU0sUUFBUSxVQUFVLENBQUMsQ0FBQyxJQUFJLGdKQUEwSixFQUFFO0FBQUEsY0FDcFk7QUFHQSxrQkFBSSxRQUFRLGFBQWEsUUFBVztBQUNsQyxvQkFBSSxjQUFjLFFBQVE7QUFHMUIsb0JBQUksWUFBWSxhQUFhLFNBQVM7QUFDcEMsd0JBQU0seUtBQThLO0FBQUEsZ0JBQ3RMLFdBQVcsWUFBWSxhQUFhLFNBQVM7QUFDM0Msd0JBQU0sMEdBQStHO0FBQUEsZ0JBQ3ZIO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTyxXQUFXLFdBQVcsU0FBUyxxQkFBcUI7QUFBQSxVQUM3RDtBQUNBLG1CQUFTQyxXQUFTLGNBQWM7QUFDOUIsZ0JBQUksYUFBYSxrQkFBa0I7QUFDbkMsbUJBQU8sV0FBVyxTQUFTLFlBQVk7QUFBQSxVQUN6QztBQUNBLG1CQUFTQyxZQUFXQyxVQUFTLFlBQVksTUFBTTtBQUM3QyxnQkFBSSxhQUFhLGtCQUFrQjtBQUNuQyxtQkFBTyxXQUFXLFdBQVdBLFVBQVMsWUFBWSxJQUFJO0FBQUEsVUFDeEQ7QUFDQSxtQkFBU0MsU0FBTyxjQUFjO0FBQzVCLGdCQUFJLGFBQWEsa0JBQWtCO0FBQ25DLG1CQUFPLFdBQVcsT0FBTyxZQUFZO0FBQUEsVUFDdkM7QUFDQSxtQkFBU0MsWUFBVSxRQUFRLE1BQU07QUFDL0IsZ0JBQUksYUFBYSxrQkFBa0I7QUFDbkMsbUJBQU8sV0FBVyxVQUFVLFFBQVEsSUFBSTtBQUFBLFVBQzFDO0FBQ0EsbUJBQVNDLGlCQUFnQixRQUFRLE1BQU07QUFDckMsZ0JBQUksYUFBYSxrQkFBa0I7QUFDbkMsbUJBQU8sV0FBVyxnQkFBZ0IsUUFBUSxJQUFJO0FBQUEsVUFDaEQ7QUFDQSxtQkFBU0MsY0FBWSxVQUFVLE1BQU07QUFDbkMsZ0JBQUksYUFBYSxrQkFBa0I7QUFDbkMsbUJBQU8sV0FBVyxZQUFZLFVBQVUsSUFBSTtBQUFBLFVBQzlDO0FBQ0EsbUJBQVNDLFVBQVEsUUFBUSxNQUFNO0FBQzdCLGdCQUFJLGFBQWEsa0JBQWtCO0FBQ25DLG1CQUFPLFdBQVcsUUFBUSxRQUFRLElBQUk7QUFBQSxVQUN4QztBQUNBLG1CQUFTLG9CQUFvQixLQUFLLFFBQVEsTUFBTTtBQUM5QyxnQkFBSSxhQUFhLGtCQUFrQjtBQUNuQyxtQkFBTyxXQUFXLG9CQUFvQixLQUFLLFFBQVEsSUFBSTtBQUFBLFVBQ3pEO0FBQ0EsbUJBQVMsY0FBY0MsUUFBTyxhQUFhO0FBQ3pDO0FBQ0Usa0JBQUksYUFBYSxrQkFBa0I7QUFDbkMscUJBQU8sV0FBVyxjQUFjQSxRQUFPLFdBQVc7QUFBQSxZQUNwRDtBQUFBLFVBQ0Y7QUFNQSxjQUFJLGdCQUFnQjtBQUNwQixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBRUosbUJBQVMsY0FBYztBQUFBLFVBQUM7QUFFeEIsc0JBQVkscUJBQXFCO0FBQ2pDLG1CQUFTLGNBQWM7QUFDckI7QUFDRSxrQkFBSSxrQkFBa0IsR0FBRztBQUV2QiwwQkFBVSxRQUFRO0FBQ2xCLDJCQUFXLFFBQVE7QUFDbkIsMkJBQVcsUUFBUTtBQUNuQiw0QkFBWSxRQUFRO0FBQ3BCLDRCQUFZLFFBQVE7QUFDcEIscUNBQXFCLFFBQVE7QUFDN0IsK0JBQWUsUUFBUTtBQUV2QixvQkFBSSxRQUFRO0FBQUEsa0JBQ1YsY0FBYztBQUFBLGtCQUNkLFlBQVk7QUFBQSxrQkFDWixPQUFPO0FBQUEsa0JBQ1AsVUFBVTtBQUFBLGdCQUNaO0FBRUEsdUJBQU8saUJBQWlCLFNBQVM7QUFBQSxrQkFDL0IsTUFBTTtBQUFBLGtCQUNOLEtBQUs7QUFBQSxrQkFDTCxNQUFNO0FBQUEsa0JBQ04sT0FBTztBQUFBLGtCQUNQLE9BQU87QUFBQSxrQkFDUCxnQkFBZ0I7QUFBQSxrQkFDaEIsVUFBVTtBQUFBLGdCQUNaLENBQUM7QUFBQSxjQUVIO0FBRUE7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGVBQWU7QUFDdEI7QUFDRTtBQUVBLGtCQUFJLGtCQUFrQixHQUFHO0FBRXZCLG9CQUFJLFFBQVE7QUFBQSxrQkFDVixjQUFjO0FBQUEsa0JBQ2QsWUFBWTtBQUFBLGtCQUNaLFVBQVU7QUFBQSxnQkFDWjtBQUVBLHVCQUFPLGlCQUFpQixTQUFTO0FBQUEsa0JBQy9CLEtBQUssUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN0QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE1BQU0sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN2QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE1BQU0sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN2QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE9BQU8sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN4QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE9BQU8sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN4QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELGdCQUFnQixRQUFRLENBQUMsR0FBRyxPQUFPO0FBQUEsb0JBQ2pDLE9BQU87QUFBQSxrQkFDVCxDQUFDO0FBQUEsa0JBQ0QsVUFBVSxRQUFRLENBQUMsR0FBRyxPQUFPO0FBQUEsb0JBQzNCLE9BQU87QUFBQSxrQkFDVCxDQUFDO0FBQUEsZ0JBQ0gsQ0FBQztBQUFBLGNBRUg7QUFFQSxrQkFBSSxnQkFBZ0IsR0FBRztBQUNyQixzQkFBTSw4RUFBbUY7QUFBQSxjQUMzRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSSwyQkFBMkIscUJBQXFCO0FBQ3BELGNBQUlDO0FBQ0osbUJBQVMsOEJBQThCLE1BQU0sUUFBUSxTQUFTO0FBQzVEO0FBQ0Usa0JBQUlBLFlBQVcsUUFBVztBQUV4QixvQkFBSTtBQUNGLHdCQUFNLE1BQU07QUFBQSxnQkFDZCxTQUFTLEdBQUc7QUFDVixzQkFBSWxCLFNBQVEsRUFBRSxNQUFNLEtBQUssRUFBRSxNQUFNLGNBQWM7QUFDL0Msa0JBQUFrQixVQUFTbEIsVUFBU0EsT0FBTSxDQUFDLEtBQUs7QUFBQSxnQkFDaEM7QUFBQSxjQUNGO0FBR0EscUJBQU8sT0FBT2tCLFVBQVM7QUFBQSxZQUN6QjtBQUFBLFVBQ0Y7QUFDQSxjQUFJLFVBQVU7QUFDZCxjQUFJO0FBRUo7QUFDRSxnQkFBSSxrQkFBa0IsT0FBTyxZQUFZLGFBQWEsVUFBVTtBQUNoRSxrQ0FBc0IsSUFBSSxnQkFBZ0I7QUFBQSxVQUM1QztBQUVBLG1CQUFTLDZCQUE2QixJQUFJLFdBQVc7QUFFbkQsZ0JBQUksQ0FBQyxNQUFNLFNBQVM7QUFDbEIscUJBQU87QUFBQSxZQUNUO0FBRUE7QUFDRSxrQkFBSSxRQUFRLG9CQUFvQixJQUFJLEVBQUU7QUFFdEMsa0JBQUksVUFBVSxRQUFXO0FBQ3ZCLHVCQUFPO0FBQUEsY0FDVDtBQUFBLFlBQ0Y7QUFFQSxnQkFBSTtBQUNKLHNCQUFVO0FBQ1YsZ0JBQUksNEJBQTRCLE1BQU07QUFFdEMsa0JBQU0sb0JBQW9CO0FBQzFCLGdCQUFJO0FBRUo7QUFDRSxtQ0FBcUIseUJBQXlCO0FBRzlDLHVDQUF5QixVQUFVO0FBQ25DLDBCQUFZO0FBQUEsWUFDZDtBQUVBLGdCQUFJO0FBRUYsa0JBQUksV0FBVztBQUViLG9CQUFJLE9BQU8sV0FBWTtBQUNyQix3QkFBTSxNQUFNO0FBQUEsZ0JBQ2Q7QUFHQSx1QkFBTyxlQUFlLEtBQUssV0FBVyxTQUFTO0FBQUEsa0JBQzdDLEtBQUssV0FBWTtBQUdmLDBCQUFNLE1BQU07QUFBQSxrQkFDZDtBQUFBLGdCQUNGLENBQUM7QUFFRCxvQkFBSSxPQUFPLFlBQVksWUFBWSxRQUFRLFdBQVc7QUFHcEQsc0JBQUk7QUFDRiw0QkFBUSxVQUFVLE1BQU0sQ0FBQyxDQUFDO0FBQUEsa0JBQzVCLFNBQVMsR0FBRztBQUNWLDhCQUFVO0FBQUEsa0JBQ1o7QUFFQSwwQkFBUSxVQUFVLElBQUksQ0FBQyxHQUFHLElBQUk7QUFBQSxnQkFDaEMsT0FBTztBQUNMLHNCQUFJO0FBQ0YseUJBQUssS0FBSztBQUFBLGtCQUNaLFNBQVMsR0FBRztBQUNWLDhCQUFVO0FBQUEsa0JBQ1o7QUFFQSxxQkFBRyxLQUFLLEtBQUssU0FBUztBQUFBLGdCQUN4QjtBQUFBLGNBQ0YsT0FBTztBQUNMLG9CQUFJO0FBQ0Ysd0JBQU0sTUFBTTtBQUFBLGdCQUNkLFNBQVMsR0FBRztBQUNWLDRCQUFVO0FBQUEsZ0JBQ1o7QUFFQSxtQkFBRztBQUFBLGNBQ0w7QUFBQSxZQUNGLFNBQVMsUUFBUTtBQUVmLGtCQUFJLFVBQVUsV0FBVyxPQUFPLE9BQU8sVUFBVSxVQUFVO0FBR3pELG9CQUFJLGNBQWMsT0FBTyxNQUFNLE1BQU0sSUFBSTtBQUN6QyxvQkFBSSxlQUFlLFFBQVEsTUFBTSxNQUFNLElBQUk7QUFDM0Msb0JBQUksSUFBSSxZQUFZLFNBQVM7QUFDN0Isb0JBQUksSUFBSSxhQUFhLFNBQVM7QUFFOUIsdUJBQU8sS0FBSyxLQUFLLEtBQUssS0FBSyxZQUFZLENBQUMsTUFBTSxhQUFhLENBQUMsR0FBRztBQU83RDtBQUFBLGdCQUNGO0FBRUEsdUJBQU8sS0FBSyxLQUFLLEtBQUssR0FBRyxLQUFLLEtBQUs7QUFHakMsc0JBQUksWUFBWSxDQUFDLE1BQU0sYUFBYSxDQUFDLEdBQUc7QUFNdEMsd0JBQUksTUFBTSxLQUFLLE1BQU0sR0FBRztBQUN0Qix5QkFBRztBQUNEO0FBQ0E7QUFHQSw0QkFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLE1BQU0sYUFBYSxDQUFDLEdBQUc7QUFFL0MsOEJBQUksU0FBUyxPQUFPLFlBQVksQ0FBQyxFQUFFLFFBQVEsWUFBWSxNQUFNO0FBRTdEO0FBQ0UsZ0NBQUksT0FBTyxPQUFPLFlBQVk7QUFDNUIsa0RBQW9CLElBQUksSUFBSSxNQUFNO0FBQUEsNEJBQ3BDO0FBQUEsMEJBQ0Y7QUFHQSxpQ0FBTztBQUFBLHdCQUNUO0FBQUEsc0JBQ0YsU0FBUyxLQUFLLEtBQUssS0FBSztBQUFBLG9CQUMxQjtBQUVBO0FBQUEsa0JBQ0Y7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLFVBQUU7QUFDQSx3QkFBVTtBQUVWO0FBQ0UseUNBQXlCLFVBQVU7QUFDbkMsNkJBQWE7QUFBQSxjQUNmO0FBRUEsb0JBQU0sb0JBQW9CO0FBQUEsWUFDNUI7QUFHQSxnQkFBSSxPQUFPLEtBQUssR0FBRyxlQUFlLEdBQUcsT0FBTztBQUM1QyxnQkFBSSxpQkFBaUIsT0FBTyw4QkFBOEIsSUFBSSxJQUFJO0FBRWxFO0FBQ0Usa0JBQUksT0FBTyxPQUFPLFlBQVk7QUFDNUIsb0NBQW9CLElBQUksSUFBSSxjQUFjO0FBQUEsY0FDNUM7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBQ0EsbUJBQVMsK0JBQStCLElBQUksUUFBUSxTQUFTO0FBQzNEO0FBQ0UscUJBQU8sNkJBQTZCLElBQUksS0FBSztBQUFBLFlBQy9DO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGdCQUFnQjVCLGFBQVc7QUFDbEMsZ0JBQUk2QixhQUFZN0IsWUFBVTtBQUMxQixtQkFBTyxDQUFDLEVBQUU2QixjQUFhQSxXQUFVO0FBQUEsVUFDbkM7QUFFQSxtQkFBUyxxQ0FBcUMsTUFBTSxRQUFRLFNBQVM7QUFFbkUsZ0JBQUksUUFBUSxNQUFNO0FBQ2hCLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLE9BQU8sU0FBUyxZQUFZO0FBQzlCO0FBQ0UsdUJBQU8sNkJBQTZCLE1BQU0sZ0JBQWdCLElBQUksQ0FBQztBQUFBLGNBQ2pFO0FBQUEsWUFDRjtBQUVBLGdCQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLHFCQUFPLDhCQUE4QixJQUFJO0FBQUEsWUFDM0M7QUFFQSxvQkFBUSxNQUFNO0FBQUEsY0FDWixLQUFLLFFBQVE7QUFDWCx1QkFBTyw4QkFBOEIsVUFBVTtBQUFBLGNBRWpELEtBQUs7QUFDSCx1QkFBTyw4QkFBOEIsY0FBYztBQUFBLFlBQ3ZEO0FBRUEsZ0JBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIsc0JBQVEsS0FBSyxVQUFVO0FBQUEsZ0JBQ3JCLEtBQUs7QUFDSCx5QkFBTywrQkFBK0IsS0FBSyxNQUFNO0FBQUEsZ0JBRW5ELEtBQUs7QUFFSCx5QkFBTyxxQ0FBcUMsS0FBSyxNQUFNLFFBQVEsT0FBTztBQUFBLGdCQUV4RSxLQUFLO0FBQ0gseUJBQU8sK0JBQStCLEtBQUssT0FBTztBQUFBLGdCQUVwRCxLQUFLLGlCQUNIO0FBQ0Usc0JBQUksZ0JBQWdCO0FBQ3BCLHNCQUFJLFVBQVUsY0FBYztBQUM1QixzQkFBSSxPQUFPLGNBQWM7QUFFekIsc0JBQUk7QUFFRiwyQkFBTyxxQ0FBcUMsS0FBSyxPQUFPLEdBQUcsUUFBUSxPQUFPO0FBQUEsa0JBQzVFLFNBQVMsR0FBRztBQUFBLGtCQUFDO0FBQUEsZ0JBQ2Y7QUFBQSxjQUNKO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUkscUJBQXFCLENBQUM7QUFDMUIsY0FBSSwyQkFBMkIscUJBQXFCO0FBRXBELG1CQUFTLDhCQUE4QixTQUFTO0FBQzlDO0FBQ0Usa0JBQUksU0FBUztBQUNYLG9CQUFJLFFBQVEsUUFBUTtBQUNwQixvQkFBSSxRQUFRLHFDQUFxQyxRQUFRLE1BQU0sUUFBUSxTQUFTLFFBQVEsTUFBTSxPQUFPLElBQUk7QUFDekcseUNBQXlCLG1CQUFtQixLQUFLO0FBQUEsY0FDbkQsT0FBTztBQUNMLHlDQUF5QixtQkFBbUIsSUFBSTtBQUFBLGNBQ2xEO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxlQUFlLFdBQVcsUUFBUSxVQUFVLGVBQWUsU0FBUztBQUMzRTtBQUVFLGtCQUFJLE1BQU0sU0FBUyxLQUFLLEtBQUssT0FBTyxVQUFVLGNBQWM7QUFFNUQsdUJBQVMsZ0JBQWdCLFdBQVc7QUFDbEMsb0JBQUksSUFBSSxXQUFXLFlBQVksR0FBRztBQUNoQyxzQkFBSSxVQUFVO0FBSWQsc0JBQUk7QUFHRix3QkFBSSxPQUFPLFVBQVUsWUFBWSxNQUFNLFlBQVk7QUFDakQsMEJBQUksTUFBTSxPQUFPLGlCQUFpQixpQkFBaUIsT0FBTyxXQUFXLFlBQVksZUFBZSwrRkFBb0csT0FBTyxVQUFVLFlBQVksSUFBSSxpR0FBc0c7QUFDM1UsMEJBQUksT0FBTztBQUNYLDRCQUFNO0FBQUEsb0JBQ1I7QUFFQSw4QkFBVSxVQUFVLFlBQVksRUFBRSxRQUFRLGNBQWMsZUFBZSxVQUFVLE1BQU0sOENBQThDO0FBQUEsa0JBQ3ZJLFNBQVMsSUFBSTtBQUNYLDhCQUFVO0FBQUEsa0JBQ1o7QUFFQSxzQkFBSSxXQUFXLEVBQUUsbUJBQW1CLFFBQVE7QUFDMUMsa0RBQThCLE9BQU87QUFFckMsMEJBQU0sNFJBQXFULGlCQUFpQixlQUFlLFVBQVUsY0FBYyxPQUFPLE9BQU87QUFFalksa0RBQThCLElBQUk7QUFBQSxrQkFDcEM7QUFFQSxzQkFBSSxtQkFBbUIsU0FBUyxFQUFFLFFBQVEsV0FBVyxxQkFBcUI7QUFHeEUsdUNBQW1CLFFBQVEsT0FBTyxJQUFJO0FBQ3RDLGtEQUE4QixPQUFPO0FBRXJDLDBCQUFNLHNCQUFzQixVQUFVLFFBQVEsT0FBTztBQUVyRCxrREFBOEIsSUFBSTtBQUFBLGtCQUNwQztBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsbUJBQVMsZ0NBQWdDLFNBQVM7QUFDaEQ7QUFDRSxrQkFBSSxTQUFTO0FBQ1gsb0JBQUksUUFBUSxRQUFRO0FBQ3BCLG9CQUFJLFFBQVEscUNBQXFDLFFBQVEsTUFBTSxRQUFRLFNBQVMsUUFBUSxNQUFNLE9BQU8sSUFBSTtBQUN6RyxtQ0FBbUIsS0FBSztBQUFBLGNBQzFCLE9BQU87QUFDTCxtQ0FBbUIsSUFBSTtBQUFBLGNBQ3pCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxjQUFJO0FBRUo7QUFDRSw0Q0FBZ0M7QUFBQSxVQUNsQztBQUVBLG1CQUFTLDhCQUE4QjtBQUNyQyxnQkFBSSxrQkFBa0IsU0FBUztBQUM3QixrQkFBSSxPQUFPLGlCQUFpQixrQkFBa0IsUUFBUSxJQUFJO0FBRTFELGtCQUFJLE1BQU07QUFDUix1QkFBTyxxQ0FBcUMsT0FBTztBQUFBLGNBQ3JEO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTLDJCQUEyQixRQUFRO0FBQzFDLGdCQUFJLFdBQVcsUUFBVztBQUN4QixrQkFBSSxXQUFXLE9BQU8sU0FBUyxRQUFRLGFBQWEsRUFBRTtBQUN0RCxrQkFBSSxhQUFhLE9BQU87QUFDeEIscUJBQU8sNEJBQTRCLFdBQVcsTUFBTSxhQUFhO0FBQUEsWUFDbkU7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxtQkFBUyxtQ0FBbUMsY0FBYztBQUN4RCxnQkFBSSxpQkFBaUIsUUFBUSxpQkFBaUIsUUFBVztBQUN2RCxxQkFBTywyQkFBMkIsYUFBYSxRQUFRO0FBQUEsWUFDekQ7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFRQSxjQUFJLHdCQUF3QixDQUFDO0FBRTdCLG1CQUFTLDZCQUE2QixZQUFZO0FBQ2hELGdCQUFJLE9BQU8sNEJBQTRCO0FBRXZDLGdCQUFJLENBQUMsTUFBTTtBQUNULGtCQUFJLGFBQWEsT0FBTyxlQUFlLFdBQVcsYUFBYSxXQUFXLGVBQWUsV0FBVztBQUVwRyxrQkFBSSxZQUFZO0FBQ2QsdUJBQU8sZ0RBQWdELGFBQWE7QUFBQSxjQUN0RTtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFjQSxtQkFBUyxvQkFBb0IsU0FBUyxZQUFZO0FBQ2hELGdCQUFJLENBQUMsUUFBUSxVQUFVLFFBQVEsT0FBTyxhQUFhLFFBQVEsT0FBTyxNQUFNO0FBQ3RFO0FBQUEsWUFDRjtBQUVBLG9CQUFRLE9BQU8sWUFBWTtBQUMzQixnQkFBSSw0QkFBNEIsNkJBQTZCLFVBQVU7QUFFdkUsZ0JBQUksc0JBQXNCLHlCQUF5QixHQUFHO0FBQ3BEO0FBQUEsWUFDRjtBQUVBLGtDQUFzQix5QkFBeUIsSUFBSTtBQUluRCxnQkFBSSxhQUFhO0FBRWpCLGdCQUFJLFdBQVcsUUFBUSxVQUFVLFFBQVEsV0FBVyxrQkFBa0IsU0FBUztBQUU3RSwyQkFBYSxpQ0FBaUMsaUJBQWlCLFFBQVEsT0FBTyxJQUFJLElBQUk7QUFBQSxZQUN4RjtBQUVBO0FBQ0UsOENBQWdDLE9BQU87QUFFdkMsb0JBQU0sNkhBQWtJLDJCQUEyQixVQUFVO0FBRTdLLDhDQUFnQyxJQUFJO0FBQUEsWUFDdEM7QUFBQSxVQUNGO0FBWUEsbUJBQVMsa0JBQWtCQyxPQUFNLFlBQVk7QUFDM0MsZ0JBQUksT0FBT0EsVUFBUyxVQUFVO0FBQzVCO0FBQUEsWUFDRjtBQUVBLGdCQUFJLE1BQU0sUUFBUUEsS0FBSSxHQUFHO0FBQ3ZCLHVCQUFTLElBQUksR0FBRyxJQUFJQSxNQUFLLFFBQVEsS0FBSztBQUNwQyxvQkFBSSxRQUFRQSxNQUFLLENBQUM7QUFFbEIsb0JBQUl0QixnQkFBZSxLQUFLLEdBQUc7QUFDekIsc0NBQW9CLE9BQU8sVUFBVTtBQUFBLGdCQUN2QztBQUFBLGNBQ0Y7QUFBQSxZQUNGLFdBQVdBLGdCQUFlc0IsS0FBSSxHQUFHO0FBRS9CLGtCQUFJQSxNQUFLLFFBQVE7QUFDZixnQkFBQUEsTUFBSyxPQUFPLFlBQVk7QUFBQSxjQUMxQjtBQUFBLFlBQ0YsV0FBV0EsT0FBTTtBQUNmLGtCQUFJLGFBQWEsY0FBY0EsS0FBSTtBQUVuQyxrQkFBSSxPQUFPLGVBQWUsWUFBWTtBQUdwQyxvQkFBSSxlQUFlQSxNQUFLLFNBQVM7QUFDL0Isc0JBQUksV0FBVyxXQUFXLEtBQUtBLEtBQUk7QUFDbkMsc0JBQUk7QUFFSix5QkFBTyxFQUFFLE9BQU8sU0FBUyxLQUFLLEdBQUcsTUFBTTtBQUNyQyx3QkFBSXRCLGdCQUFlLEtBQUssS0FBSyxHQUFHO0FBQzlCLDBDQUFvQixLQUFLLE9BQU8sVUFBVTtBQUFBLG9CQUM1QztBQUFBLGtCQUNGO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFTQSxtQkFBUyxrQkFBa0IsU0FBUztBQUNsQztBQUNFLGtCQUFJLE9BQU8sUUFBUTtBQUVuQixrQkFBSSxTQUFTLFFBQVEsU0FBUyxVQUFhLE9BQU8sU0FBUyxVQUFVO0FBQ25FO0FBQUEsY0FDRjtBQUVBLGtCQUFJO0FBRUosa0JBQUksT0FBTyxTQUFTLFlBQVk7QUFDOUIsNEJBQVksS0FBSztBQUFBLGNBQ25CLFdBQVcsT0FBTyxTQUFTLGFBQWEsS0FBSyxhQUFhO0FBQUE7QUFBQSxjQUUxRCxLQUFLLGFBQWEsa0JBQWtCO0FBQ2xDLDRCQUFZLEtBQUs7QUFBQSxjQUNuQixPQUFPO0FBQ0w7QUFBQSxjQUNGO0FBRUEsa0JBQUksV0FBVztBQUViLG9CQUFJLE9BQU8saUJBQWlCLElBQUk7QUFDaEMsK0JBQWUsV0FBVyxRQUFRLE9BQU8sUUFBUSxNQUFNLE9BQU87QUFBQSxjQUNoRSxXQUFXLEtBQUssY0FBYyxVQUFhLENBQUMsK0JBQStCO0FBQ3pFLGdEQUFnQztBQUVoQyxvQkFBSSxRQUFRLGlCQUFpQixJQUFJO0FBRWpDLHNCQUFNLHVHQUF1RyxTQUFTLFNBQVM7QUFBQSxjQUNqSTtBQUVBLGtCQUFJLE9BQU8sS0FBSyxvQkFBb0IsY0FBYyxDQUFDLEtBQUssZ0JBQWdCLHNCQUFzQjtBQUM1RixzQkFBTSw0SEFBaUk7QUFBQSxjQUN6STtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBT0EsbUJBQVMsc0JBQXNCLFVBQVU7QUFDdkM7QUFDRSxrQkFBSXVCLFFBQU8sT0FBTyxLQUFLLFNBQVMsS0FBSztBQUVyQyx1QkFBUyxJQUFJLEdBQUcsSUFBSUEsTUFBSyxRQUFRLEtBQUs7QUFDcEMsb0JBQUksTUFBTUEsTUFBSyxDQUFDO0FBRWhCLG9CQUFJLFFBQVEsY0FBYyxRQUFRLE9BQU87QUFDdkMsa0RBQWdDLFFBQVE7QUFFeEMsd0JBQU0sNEdBQWlILEdBQUc7QUFFMUgsa0RBQWdDLElBQUk7QUFDcEM7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxTQUFTLFFBQVEsTUFBTTtBQUN6QixnREFBZ0MsUUFBUTtBQUV4QyxzQkFBTSx1REFBdUQ7QUFFN0QsZ0RBQWdDLElBQUk7QUFBQSxjQUN0QztBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsNEJBQTRCLE1BQU0sT0FBTyxVQUFVO0FBQzFELGdCQUFJLFlBQVksbUJBQW1CLElBQUk7QUFHdkMsZ0JBQUksQ0FBQyxXQUFXO0FBQ2Qsa0JBQUksT0FBTztBQUVYLGtCQUFJLFNBQVMsVUFBYSxPQUFPLFNBQVMsWUFBWSxTQUFTLFFBQVEsT0FBTyxLQUFLLElBQUksRUFBRSxXQUFXLEdBQUc7QUFDckcsd0JBQVE7QUFBQSxjQUNWO0FBRUEsa0JBQUksYUFBYSxtQ0FBbUMsS0FBSztBQUV6RCxrQkFBSSxZQUFZO0FBQ2Qsd0JBQVE7QUFBQSxjQUNWLE9BQU87QUFDTCx3QkFBUSw0QkFBNEI7QUFBQSxjQUN0QztBQUVBLGtCQUFJO0FBRUosa0JBQUksU0FBUyxNQUFNO0FBQ2pCLDZCQUFhO0FBQUEsY0FDZixXQUFXLE1BQU0sUUFBUSxJQUFJLEdBQUc7QUFDOUIsNkJBQWE7QUFBQSxjQUNmLFdBQVcsU0FBUyxVQUFhLEtBQUssYUFBYSxvQkFBb0I7QUFDckUsNkJBQWEsT0FBTyxpQkFBaUIsS0FBSyxJQUFJLEtBQUssYUFBYTtBQUNoRSx1QkFBTztBQUFBLGNBQ1QsT0FBTztBQUNMLDZCQUFhLE9BQU87QUFBQSxjQUN0QjtBQUVBO0FBQ0Usc0JBQU0scUpBQStKLFlBQVksSUFBSTtBQUFBLGNBQ3ZMO0FBQUEsWUFDRjtBQUVBLGdCQUFJLFVBQVV6QixnQkFBYyxNQUFNLE1BQU0sU0FBUztBQUdqRCxnQkFBSSxXQUFXLE1BQU07QUFDbkIscUJBQU87QUFBQSxZQUNUO0FBT0EsZ0JBQUksV0FBVztBQUNiLHVCQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQ3pDLGtDQUFrQixVQUFVLENBQUMsR0FBRyxJQUFJO0FBQUEsY0FDdEM7QUFBQSxZQUNGO0FBRUEsZ0JBQUksU0FBUyxRQUFRLFVBQVU7QUFDN0Isb0NBQXNCLE9BQU87QUFBQSxZQUMvQixPQUFPO0FBQ0wsZ0NBQWtCLE9BQU87QUFBQSxZQUMzQjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUNBLGNBQUksc0NBQXNDO0FBQzFDLG1CQUFTLDRCQUE0QixNQUFNO0FBQ3pDLGdCQUFJLG1CQUFtQiw0QkFBNEIsS0FBSyxNQUFNLElBQUk7QUFDbEUsNkJBQWlCLE9BQU87QUFFeEI7QUFDRSxrQkFBSSxDQUFDLHFDQUFxQztBQUN4QyxzREFBc0M7QUFFdEMscUJBQUssc0pBQWdLO0FBQUEsY0FDdks7QUFHQSxxQkFBTyxlQUFlLGtCQUFrQixRQUFRO0FBQUEsZ0JBQzlDLFlBQVk7QUFBQSxnQkFDWixLQUFLLFdBQVk7QUFDZix1QkFBSywyRkFBZ0c7QUFFckcseUJBQU8sZUFBZSxNQUFNLFFBQVE7QUFBQSxvQkFDbEMsT0FBTztBQUFBLGtCQUNULENBQUM7QUFDRCx5QkFBTztBQUFBLGdCQUNUO0FBQUEsY0FDRixDQUFDO0FBQUEsWUFDSDtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUNBLG1CQUFTLDJCQUEyQixTQUFTLE9BQU8sVUFBVTtBQUM1RCxnQkFBSSxhQUFhQyxjQUFhLE1BQU0sTUFBTSxTQUFTO0FBRW5ELHFCQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQ3pDLGdDQUFrQixVQUFVLENBQUMsR0FBRyxXQUFXLElBQUk7QUFBQSxZQUNqRDtBQUVBLDhCQUFrQixVQUFVO0FBQzVCLG1CQUFPO0FBQUEsVUFDVDtBQUVBO0FBRUUsZ0JBQUk7QUFDRixrQkFBSSxlQUFlLE9BQU8sT0FBTyxDQUFDLENBQUM7QUFHbkMsa0NBQUksSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQztBQUM5QixrQ0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQUEsWUFFeEIsU0FBUyxHQUFHO0FBQUEsWUFDWjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLGtCQUFtQjtBQUN2QixjQUFJLGlCQUFrQjtBQUN0QixjQUFJLGdCQUFpQjtBQUNyQixjQUFJeUIsWUFBVztBQUFBLFlBQ2IsS0FBSztBQUFBLFlBQ0wsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFlBQ1AsU0FBU3BCO0FBQUEsWUFDVCxNQUFNO0FBQUEsVUFDUjtBQUVBLGtCQUFRLFdBQVdvQjtBQUNuQixrQkFBUSxZQUFZaEM7QUFDcEIsa0JBQVEsZ0JBQWdCQztBQUN4QixrQkFBUSxxREFBcUQ7QUFDN0Qsa0JBQVEsZUFBZTtBQUN2QixrQkFBUSxnQkFBZ0JZO0FBQ3hCLGtCQUFRLGdCQUFnQjtBQUN4QixrQkFBUSxnQkFBZ0I7QUFDeEIsa0JBQVEsWUFBWVg7QUFDcEIsa0JBQVEsYUFBYWE7QUFDckIsa0JBQVEsaUJBQWlCUDtBQUN6QixrQkFBUSxPQUFPO0FBQ2Ysa0JBQVEsT0FBT1M7QUFDZixrQkFBUSxjQUFjUTtBQUN0QixrQkFBUSxhQUFhUDtBQUNyQixrQkFBUSxnQkFBZ0I7QUFDeEIsa0JBQVEsWUFBWUs7QUFDcEIsa0JBQVEsc0JBQXNCO0FBQzlCLGtCQUFRLGtCQUFrQkM7QUFDMUIsa0JBQVEsVUFBVUU7QUFDbEIsa0JBQVEsYUFBYU47QUFDckIsa0JBQVEsU0FBU0U7QUFDakIsa0JBQVEsV0FBV0g7QUFDbkIsa0JBQVEsVUFBVTtBQUFBLFFBQ2hCLEdBQUc7QUFBQSxNQUNMO0FBQUE7QUFBQTs7O0FDNXhFQTtBQUFBO0FBQUE7QUFFQSxVQUFJLE9BQXVDO0FBQ3pDLGVBQU8sVUFBVTtBQUFBLE1BQ25CLE9BQU87QUFDTCxlQUFPLFVBQVU7QUFBQSxNQUNuQjtBQUFBO0FBQUE7OztBQ05BO0FBQUE7QUFBQTtBQVdBLFVBQUksTUFBdUM7QUFDekMsU0FBQyxXQUFXO0FBQ2Q7QUFFQSxjQUFJLDJCQUEyQjtBQUMvQixjQUFJLGtCQUFrQjtBQUV0QixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSSxvQkFBb0IsT0FBTyxnQkFBZ0IsWUFBWSxPQUFPLFlBQVksUUFBUTtBQUV0RixjQUFJLG1CQUFtQjtBQUNyQixnQkFBSSxtQkFBbUI7QUFFdkIsb0JBQVEsZUFBZSxXQUFZO0FBQ2pDLHFCQUFPLGlCQUFpQixJQUFJO0FBQUEsWUFDOUI7QUFBQSxVQUNGLE9BQU87QUFDTCxnQkFBSSxZQUFZO0FBQ2hCLGdCQUFJLGNBQWMsVUFBVSxJQUFJO0FBRWhDLG9CQUFRLGVBQWUsV0FBWTtBQUNqQyxxQkFBTyxVQUFVLElBQUksSUFBSTtBQUFBLFlBQzNCO0FBQUEsVUFDRjtBQUVBO0FBQUE7QUFBQTtBQUFBLFlBRUEsT0FBTyxXQUFXO0FBQUEsWUFDbEIsT0FBTyxtQkFBbUI7QUFBQSxZQUFZO0FBR3BDLGdCQUFJLFlBQVk7QUFDaEIsZ0JBQUksYUFBYTtBQUVqQixnQkFBSSxpQkFBaUIsV0FBWTtBQUMvQixrQkFBSSxjQUFjLE1BQU07QUFDdEIsb0JBQUk7QUFDRixzQkFBSSxjQUFjLFFBQVEsYUFBYTtBQUN2QyxzQkFBSSxtQkFBbUI7QUFFdkIsNEJBQVUsa0JBQWtCLFdBQVc7QUFFdkMsOEJBQVk7QUFBQSxnQkFDZCxTQUFTLEdBQUc7QUFDViw2QkFBVyxnQkFBZ0IsQ0FBQztBQUM1Qix3QkFBTTtBQUFBLGdCQUNSO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxrQ0FBc0IsU0FBVSxJQUFJO0FBQ2xDLGtCQUFJLGNBQWMsTUFBTTtBQUV0QiwyQkFBVyxxQkFBcUIsR0FBRyxFQUFFO0FBQUEsY0FDdkMsT0FBTztBQUNMLDRCQUFZO0FBQ1osMkJBQVcsZ0JBQWdCLENBQUM7QUFBQSxjQUM5QjtBQUFBLFlBQ0Y7QUFFQSxpQ0FBcUIsU0FBVSxJQUFJLElBQUk7QUFDckMsMkJBQWEsV0FBVyxJQUFJLEVBQUU7QUFBQSxZQUNoQztBQUVBLGdDQUFvQixXQUFZO0FBQzlCLDJCQUFhLFVBQVU7QUFBQSxZQUN6QjtBQUVBLG9CQUFRLHVCQUF1QixXQUFZO0FBQ3pDLHFCQUFPO0FBQUEsWUFDVDtBQUVBLDJCQUFlLFFBQVEsMEJBQTBCLFdBQVk7QUFBQSxZQUFDO0FBQUEsVUFDaEUsT0FBTztBQUVMLGdCQUFJLGNBQWMsT0FBTztBQUN6QixnQkFBSSxnQkFBZ0IsT0FBTztBQUUzQixnQkFBSSxPQUFPLFlBQVksYUFBYTtBQUlsQyxrQkFBSWMseUJBQXdCLE9BQU87QUFDbkMsa0JBQUlDLHdCQUF1QixPQUFPO0FBRWxDLGtCQUFJLE9BQU9ELDJCQUEwQixZQUFZO0FBRS9DLHdCQUFRLE9BQU8sRUFBRSxvSkFBOEo7QUFBQSxjQUNqTDtBQUVBLGtCQUFJLE9BQU9DLDBCQUF5QixZQUFZO0FBRTlDLHdCQUFRLE9BQU8sRUFBRSxtSkFBNko7QUFBQSxjQUNoTDtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSx1QkFBdUI7QUFDM0IsZ0JBQUksd0JBQXdCO0FBQzVCLGdCQUFJLGdCQUFnQjtBQUtwQixnQkFBSSxnQkFBZ0I7QUFDcEIsZ0JBQUksV0FBVztBQUVmO0FBR0Usc0JBQVEsdUJBQXVCLFdBQVk7QUFDekMsdUJBQU8sUUFBUSxhQUFhLEtBQUs7QUFBQSxjQUNuQztBQUdBLDZCQUFlLFdBQVk7QUFBQSxjQUFDO0FBQUEsWUFDOUI7QUFFQSxvQkFBUSwwQkFBMEIsU0FBVSxLQUFLO0FBQy9DLGtCQUFJLE1BQU0sS0FBSyxNQUFNLEtBQUs7QUFFeEIsd0JBQVEsT0FBTyxFQUFFLGlIQUFzSDtBQUN2STtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxNQUFNLEdBQUc7QUFDWCxnQ0FBZ0IsS0FBSyxNQUFNLE1BQU8sR0FBRztBQUFBLGNBQ3ZDLE9BQU87QUFFTCxnQ0FBZ0I7QUFBQSxjQUNsQjtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSwyQkFBMkIsV0FBWTtBQUN6QyxrQkFBSSwwQkFBMEIsTUFBTTtBQUNsQyxvQkFBSSxjQUFjLFFBQVEsYUFBYTtBQUl2QywyQkFBVyxjQUFjO0FBQ3pCLG9CQUFJLG1CQUFtQjtBQUV2QixvQkFBSTtBQUNGLHNCQUFJLGNBQWMsc0JBQXNCLGtCQUFrQixXQUFXO0FBRXJFLHNCQUFJLENBQUMsYUFBYTtBQUNoQiwyQ0FBdUI7QUFDdkIsNENBQXdCO0FBQUEsa0JBQzFCLE9BQU87QUFHTCx5QkFBSyxZQUFZLElBQUk7QUFBQSxrQkFDdkI7QUFBQSxnQkFDRixTQUFTLE9BQU87QUFHZCx1QkFBSyxZQUFZLElBQUk7QUFDckIsd0JBQU07QUFBQSxnQkFDUjtBQUFBLGNBQ0YsT0FBTztBQUNMLHVDQUF1QjtBQUFBLGNBQ3pCO0FBQUEsWUFDRjtBQUVBLGdCQUFJLFVBQVUsSUFBSSxlQUFlO0FBQ2pDLGdCQUFJLE9BQU8sUUFBUTtBQUNuQixvQkFBUSxNQUFNLFlBQVk7QUFFMUIsa0NBQXNCLFNBQVUsVUFBVTtBQUN4QyxzQ0FBd0I7QUFFeEIsa0JBQUksQ0FBQyxzQkFBc0I7QUFDekIsdUNBQXVCO0FBQ3ZCLHFCQUFLLFlBQVksSUFBSTtBQUFBLGNBQ3ZCO0FBQUEsWUFDRjtBQUVBLGlDQUFxQixTQUFVLFVBQVUsSUFBSTtBQUMzQyw4QkFBZ0IsWUFBWSxXQUFZO0FBQ3RDLHlCQUFTLFFBQVEsYUFBYSxDQUFDO0FBQUEsY0FDakMsR0FBRyxFQUFFO0FBQUEsWUFDUDtBQUVBLGdDQUFvQixXQUFZO0FBQzlCLDRCQUFjLGFBQWE7QUFFM0IsOEJBQWdCO0FBQUEsWUFDbEI7QUFBQSxVQUNGO0FBRUEsbUJBQVMsS0FBSyxNQUFNQyxPQUFNO0FBQ3hCLGdCQUFJLFFBQVEsS0FBSztBQUNqQixpQkFBSyxLQUFLQSxLQUFJO0FBQ2QsbUJBQU8sTUFBTUEsT0FBTSxLQUFLO0FBQUEsVUFDMUI7QUFDQSxtQkFBU0MsTUFBSyxNQUFNO0FBQ2xCLGdCQUFJLFFBQVEsS0FBSyxDQUFDO0FBQ2xCLG1CQUFPLFVBQVUsU0FBWSxPQUFPO0FBQUEsVUFDdEM7QUFDQSxtQkFBUyxJQUFJLE1BQU07QUFDakIsZ0JBQUksUUFBUSxLQUFLLENBQUM7QUFFbEIsZ0JBQUksVUFBVSxRQUFXO0FBQ3ZCLGtCQUFJLE9BQU8sS0FBSyxJQUFJO0FBRXBCLGtCQUFJLFNBQVMsT0FBTztBQUNsQixxQkFBSyxDQUFDLElBQUk7QUFDVix5QkFBUyxNQUFNLE1BQU0sQ0FBQztBQUFBLGNBQ3hCO0FBRUEscUJBQU87QUFBQSxZQUNULE9BQU87QUFDTCxxQkFBTztBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBRUEsbUJBQVMsT0FBTyxNQUFNRCxPQUFNLEdBQUc7QUFDN0IsZ0JBQUksUUFBUTtBQUVaLG1CQUFPLE1BQU07QUFDWCxrQkFBSSxjQUFjLFFBQVEsTUFBTTtBQUNoQyxrQkFBSSxTQUFTLEtBQUssV0FBVztBQUU3QixrQkFBSSxXQUFXLFVBQWEsUUFBUSxRQUFRQSxLQUFJLElBQUksR0FBRztBQUVyRCxxQkFBSyxXQUFXLElBQUlBO0FBQ3BCLHFCQUFLLEtBQUssSUFBSTtBQUNkLHdCQUFRO0FBQUEsY0FDVixPQUFPO0FBRUw7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxTQUFTLE1BQU1BLE9BQU0sR0FBRztBQUMvQixnQkFBSSxRQUFRO0FBQ1osZ0JBQUlFLFVBQVMsS0FBSztBQUVsQixtQkFBTyxRQUFRQSxTQUFRO0FBQ3JCLGtCQUFJLGFBQWEsUUFBUSxLQUFLLElBQUk7QUFDbEMsa0JBQUksT0FBTyxLQUFLLFNBQVM7QUFDekIsa0JBQUksYUFBYSxZQUFZO0FBQzdCLGtCQUFJLFFBQVEsS0FBSyxVQUFVO0FBRTNCLGtCQUFJLFNBQVMsVUFBYSxRQUFRLE1BQU1GLEtBQUksSUFBSSxHQUFHO0FBQ2pELG9CQUFJLFVBQVUsVUFBYSxRQUFRLE9BQU8sSUFBSSxJQUFJLEdBQUc7QUFDbkQsdUJBQUssS0FBSyxJQUFJO0FBQ2QsdUJBQUssVUFBVSxJQUFJQTtBQUNuQiwwQkFBUTtBQUFBLGdCQUNWLE9BQU87QUFDTCx1QkFBSyxLQUFLLElBQUk7QUFDZCx1QkFBSyxTQUFTLElBQUlBO0FBQ2xCLDBCQUFRO0FBQUEsZ0JBQ1Y7QUFBQSxjQUNGLFdBQVcsVUFBVSxVQUFhLFFBQVEsT0FBT0EsS0FBSSxJQUFJLEdBQUc7QUFDMUQscUJBQUssS0FBSyxJQUFJO0FBQ2QscUJBQUssVUFBVSxJQUFJQTtBQUNuQix3QkFBUTtBQUFBLGNBQ1YsT0FBTztBQUVMO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsbUJBQVMsUUFBUSxHQUFHLEdBQUc7QUFFckIsZ0JBQUksT0FBTyxFQUFFLFlBQVksRUFBRTtBQUMzQixtQkFBTyxTQUFTLElBQUksT0FBTyxFQUFFLEtBQUssRUFBRTtBQUFBLFVBQ3RDO0FBR0EsY0FBSSxvQkFBb0I7QUFDeEIsY0FBSSx1QkFBdUI7QUFDM0IsY0FBSSxpQkFBaUI7QUFDckIsY0FBSSxjQUFjO0FBQ2xCLGNBQUksZUFBZTtBQUVuQixtQkFBUyxnQkFBZ0IsTUFBTSxJQUFJO0FBQUEsVUFDbkM7QUFNQSxjQUFJLG9CQUFvQjtBQUV4QixjQUFJLDZCQUE2QjtBQUVqQyxjQUFJLGlDQUFpQztBQUNyQyxjQUFJLDBCQUEwQjtBQUM5QixjQUFJLHVCQUF1QjtBQUUzQixjQUFJLHdCQUF3QjtBQUU1QixjQUFJLFlBQVksQ0FBQztBQUNqQixjQUFJLGFBQWEsQ0FBQztBQUVsQixjQUFJLGdCQUFnQjtBQUNwQixjQUFJLGNBQWM7QUFDbEIsY0FBSSx1QkFBdUI7QUFFM0IsY0FBSSxtQkFBbUI7QUFDdkIsY0FBSSwwQkFBMEI7QUFDOUIsY0FBSSx5QkFBeUI7QUFFN0IsbUJBQVMsY0FBYyxhQUFhO0FBRWxDLGdCQUFJLFFBQVFDLE1BQUssVUFBVTtBQUUzQixtQkFBTyxVQUFVLE1BQU07QUFDckIsa0JBQUksTUFBTSxhQUFhLE1BQU07QUFFM0Isb0JBQUksVUFBVTtBQUFBLGNBQ2hCLFdBQVcsTUFBTSxhQUFhLGFBQWE7QUFFekMsb0JBQUksVUFBVTtBQUNkLHNCQUFNLFlBQVksTUFBTTtBQUN4QixxQkFBSyxXQUFXLEtBQUs7QUFBQSxjQUN2QixPQUFPO0FBRUw7QUFBQSxjQUNGO0FBRUEsc0JBQVFBLE1BQUssVUFBVTtBQUFBLFlBQ3pCO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGNBQWMsYUFBYTtBQUNsQyxxQ0FBeUI7QUFDekIsMEJBQWMsV0FBVztBQUV6QixnQkFBSSxDQUFDLHlCQUF5QjtBQUM1QixrQkFBSUEsTUFBSyxTQUFTLE1BQU0sTUFBTTtBQUM1QiwwQ0FBMEI7QUFDMUIsb0NBQW9CLFNBQVM7QUFBQSxjQUMvQixPQUFPO0FBQ0wsb0JBQUksYUFBYUEsTUFBSyxVQUFVO0FBRWhDLG9CQUFJLGVBQWUsTUFBTTtBQUN2QixxQ0FBbUIsZUFBZSxXQUFXLFlBQVksV0FBVztBQUFBLGdCQUN0RTtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLG1CQUFTLFVBQVUsa0JBQWtCRSxjQUFhO0FBR2hELHNDQUEwQjtBQUUxQixnQkFBSSx3QkFBd0I7QUFFMUIsdUNBQXlCO0FBQ3pCLGdDQUFrQjtBQUFBLFlBQ3BCO0FBRUEsK0JBQW1CO0FBQ25CLGdCQUFJLHdCQUF3QjtBQUU1QixnQkFBSTtBQUNGLGtCQUFJLGlCQUFpQjtBQUNuQixvQkFBSTtBQUNGLHlCQUFPLFNBQVMsa0JBQWtCQSxZQUFXO0FBQUEsZ0JBQy9DLFNBQVMsT0FBTztBQUNkLHNCQUFJLGdCQUFnQixNQUFNO0FBQ3hCLHdCQUFJLGNBQWMsUUFBUSxhQUFhO0FBQ3ZDLG9DQUFnQixhQUFhLFdBQVc7QUFDeEMsZ0NBQVksV0FBVztBQUFBLGtCQUN6QjtBQUVBLHdCQUFNO0FBQUEsZ0JBQ1I7QUFBQSxjQUNGLE9BQU87QUFFTCx1QkFBTyxTQUFTLGtCQUFrQkEsWUFBVztBQUFBLGNBQy9DO0FBQUEsWUFDRixVQUFFO0FBQ0EsNEJBQWM7QUFDZCxxQ0FBdUI7QUFDdkIsaUNBQW1CO0FBQUEsWUFDckI7QUFBQSxVQUNGO0FBRUEsbUJBQVMsU0FBUyxrQkFBa0JBLGNBQWE7QUFDL0MsZ0JBQUksY0FBY0E7QUFDbEIsMEJBQWMsV0FBVztBQUN6QiwwQkFBY0YsTUFBSyxTQUFTO0FBRTVCLG1CQUFPLGdCQUFnQixRQUFRLENBQUUsMEJBQTRCO0FBQzNELGtCQUFJLFlBQVksaUJBQWlCLGdCQUFnQixDQUFDLG9CQUFvQixRQUFRLHFCQUFxQixJQUFJO0FBRXJHO0FBQUEsY0FDRjtBQUVBLGtCQUFJLFdBQVcsWUFBWTtBQUUzQixrQkFBSSxPQUFPLGFBQWEsWUFBWTtBQUNsQyw0QkFBWSxXQUFXO0FBQ3ZCLHVDQUF1QixZQUFZO0FBQ25DLG9CQUFJLHlCQUF5QixZQUFZLGtCQUFrQjtBQUUzRCxvQkFBSSx1QkFBdUIsU0FBUyxzQkFBc0I7QUFDMUQsOEJBQWMsUUFBUSxhQUFhO0FBRW5DLG9CQUFJLE9BQU8seUJBQXlCLFlBQVk7QUFDOUMsOEJBQVksV0FBVztBQUFBLGdCQUN6QixPQUFPO0FBRUwsc0JBQUksZ0JBQWdCQSxNQUFLLFNBQVMsR0FBRztBQUNuQyx3QkFBSSxTQUFTO0FBQUEsa0JBQ2Y7QUFBQSxnQkFDRjtBQUVBLDhCQUFjLFdBQVc7QUFBQSxjQUMzQixPQUFPO0FBQ0wsb0JBQUksU0FBUztBQUFBLGNBQ2Y7QUFFQSw0QkFBY0EsTUFBSyxTQUFTO0FBQUEsWUFDOUI7QUFHQSxnQkFBSSxnQkFBZ0IsTUFBTTtBQUN4QixxQkFBTztBQUFBLFlBQ1QsT0FBTztBQUNMLGtCQUFJLGFBQWFBLE1BQUssVUFBVTtBQUVoQyxrQkFBSSxlQUFlLE1BQU07QUFDdkIsbUNBQW1CLGVBQWUsV0FBVyxZQUFZLFdBQVc7QUFBQSxjQUN0RTtBQUVBLHFCQUFPO0FBQUEsWUFDVDtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyx5QkFBeUIsZUFBZSxjQUFjO0FBQzdELG9CQUFRLGVBQWU7QUFBQSxjQUNyQixLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQ0g7QUFBQSxjQUVGO0FBQ0UsZ0NBQWdCO0FBQUEsWUFDcEI7QUFFQSxnQkFBSSx3QkFBd0I7QUFDNUIsbUNBQXVCO0FBRXZCLGdCQUFJO0FBQ0YscUJBQU8sYUFBYTtBQUFBLFlBQ3RCLFVBQUU7QUFDQSxxQ0FBdUI7QUFBQSxZQUN6QjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxjQUFjLGNBQWM7QUFDbkMsZ0JBQUk7QUFFSixvQkFBUSxzQkFBc0I7QUFBQSxjQUM1QixLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBRUgsZ0NBQWdCO0FBQ2hCO0FBQUEsY0FFRjtBQUVFLGdDQUFnQjtBQUNoQjtBQUFBLFlBQ0o7QUFFQSxnQkFBSSx3QkFBd0I7QUFDNUIsbUNBQXVCO0FBRXZCLGdCQUFJO0FBQ0YscUJBQU8sYUFBYTtBQUFBLFlBQ3RCLFVBQUU7QUFDQSxxQ0FBdUI7QUFBQSxZQUN6QjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxzQkFBc0IsVUFBVTtBQUN2QyxnQkFBSSxzQkFBc0I7QUFDMUIsbUJBQU8sV0FBWTtBQUVqQixrQkFBSSx3QkFBd0I7QUFDNUIscUNBQXVCO0FBRXZCLGtCQUFJO0FBQ0YsdUJBQU8sU0FBUyxNQUFNLE1BQU0sU0FBUztBQUFBLGNBQ3ZDLFVBQUU7QUFDQSx1Q0FBdUI7QUFBQSxjQUN6QjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsbUJBQVMsMEJBQTBCLGVBQWUsVUFBVSxTQUFTO0FBQ25FLGdCQUFJLGNBQWMsUUFBUSxhQUFhO0FBQ3ZDLGdCQUFJO0FBRUosZ0JBQUksT0FBTyxZQUFZLFlBQVksWUFBWSxNQUFNO0FBQ25ELGtCQUFJLFFBQVEsUUFBUTtBQUVwQixrQkFBSSxPQUFPLFVBQVUsWUFBWSxRQUFRLEdBQUc7QUFDMUMsNEJBQVksY0FBYztBQUFBLGNBQzVCLE9BQU87QUFDTCw0QkFBWTtBQUFBLGNBQ2Q7QUFBQSxZQUNGLE9BQU87QUFDTCwwQkFBWTtBQUFBLFlBQ2Q7QUFFQSxnQkFBSTtBQUVKLG9CQUFRLGVBQWU7QUFBQSxjQUNyQixLQUFLO0FBQ0gsMEJBQVU7QUFDVjtBQUFBLGNBRUYsS0FBSztBQUNILDBCQUFVO0FBQ1Y7QUFBQSxjQUVGLEtBQUs7QUFDSCwwQkFBVTtBQUNWO0FBQUEsY0FFRixLQUFLO0FBQ0gsMEJBQVU7QUFDVjtBQUFBLGNBRUYsS0FBSztBQUFBLGNBQ0w7QUFDRSwwQkFBVTtBQUNWO0FBQUEsWUFDSjtBQUVBLGdCQUFJLGlCQUFpQixZQUFZO0FBQ2pDLGdCQUFJLFVBQVU7QUFBQSxjQUNaLElBQUk7QUFBQSxjQUNKO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQSxXQUFXO0FBQUEsWUFDYjtBQUVBLGdCQUFJLFlBQVksYUFBYTtBQUUzQixzQkFBUSxZQUFZO0FBQ3BCLG1CQUFLLFlBQVksT0FBTztBQUV4QixrQkFBSUEsTUFBSyxTQUFTLE1BQU0sUUFBUSxZQUFZQSxNQUFLLFVBQVUsR0FBRztBQUU1RCxvQkFBSSx3QkFBd0I7QUFFMUIsb0NBQWtCO0FBQUEsZ0JBQ3BCLE9BQU87QUFDTCwyQ0FBeUI7QUFBQSxnQkFDM0I7QUFHQSxtQ0FBbUIsZUFBZSxZQUFZLFdBQVc7QUFBQSxjQUMzRDtBQUFBLFlBQ0YsT0FBTztBQUNMLHNCQUFRLFlBQVk7QUFDcEIsbUJBQUssV0FBVyxPQUFPO0FBSXZCLGtCQUFJLENBQUMsMkJBQTJCLENBQUMsa0JBQWtCO0FBQ2pELDBDQUEwQjtBQUMxQixvQ0FBb0IsU0FBUztBQUFBLGNBQy9CO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTLDBCQUEwQjtBQUFBLFVBQ25DO0FBRUEsbUJBQVMsNkJBQTZCO0FBRXBDLGdCQUFJLENBQUMsMkJBQTJCLENBQUMsa0JBQWtCO0FBQ2pELHdDQUEwQjtBQUMxQixrQ0FBb0IsU0FBUztBQUFBLFlBQy9CO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGdDQUFnQztBQUN2QyxtQkFBT0EsTUFBSyxTQUFTO0FBQUEsVUFDdkI7QUFFQSxtQkFBUyx3QkFBd0IsTUFBTTtBQUtyQyxpQkFBSyxXQUFXO0FBQUEsVUFDbEI7QUFFQSxtQkFBUyxtQ0FBbUM7QUFDMUMsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSx3QkFBd0I7QUFDNUIsY0FBSSxxQkFBc0I7QUFFMUIsa0JBQVEsd0JBQXdCO0FBQ2hDLGtCQUFRLDZCQUE2QjtBQUNyQyxrQkFBUSx1QkFBdUI7QUFDL0Isa0JBQVEsMEJBQTBCO0FBQ2xDLGtCQUFRLHFCQUFxQjtBQUM3QixrQkFBUSxnQ0FBZ0M7QUFDeEMsa0JBQVEsMEJBQTBCO0FBQ2xDLGtCQUFRLDZCQUE2QjtBQUNyQyxrQkFBUSxtQ0FBbUM7QUFDM0Msa0JBQVEsZ0NBQWdDO0FBQ3hDLGtCQUFRLGdCQUFnQjtBQUN4QixrQkFBUSwwQkFBMEI7QUFDbEMsa0JBQVEsd0JBQXdCO0FBQ2hDLGtCQUFRLDJCQUEyQjtBQUNuQyxrQkFBUSw0QkFBNEI7QUFDcEMsa0JBQVEsd0JBQXdCO0FBQUEsUUFDOUIsR0FBRztBQUFBLE1BQ0w7QUFBQTtBQUFBOzs7QUNyb0JBO0FBQUE7QUFBQTtBQUVBLFVBQUksT0FBdUM7QUFDekMsZUFBTyxVQUFVO0FBQUEsTUFDbkIsT0FBTztBQUNMLGVBQU8sVUFBVTtBQUFBLE1BQ25CO0FBQUE7QUFBQTs7O0FDTkE7QUFBQTtBQUFBO0FBV0EsVUFBSSxNQUF1QztBQUN6QyxTQUFDLFdBQVc7QUFDZDtBQUVBLGNBQUksb0JBQW9CO0FBRXhCLGNBQUksdUJBQXVCO0FBQzNCLGNBQUksa0JBQWtCO0FBS3RCLGtCQUFRLG9CQUFvQjtBQUU1QixrQkFBUSxrQkFBa0I7QUFFMUI7QUFDRSxvQkFBUSxvQkFBb0I7QUFBQSxjQUMxQixTQUFTLG9CQUFJLElBQUk7QUFBQSxZQUNuQjtBQUNBLG9CQUFRLGtCQUFrQjtBQUFBLGNBQ3hCLFNBQVM7QUFBQSxZQUNYO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGVBQWUsVUFBVTtBQUVoQyxnQkFBSSxtQkFBbUIsUUFBUSxrQkFBa0I7QUFDakQsb0JBQVEsa0JBQWtCLFVBQVUsb0JBQUksSUFBSTtBQUU1QyxnQkFBSTtBQUNGLHFCQUFPLFNBQVM7QUFBQSxZQUNsQixVQUFFO0FBQ0Esc0JBQVEsa0JBQWtCLFVBQVU7QUFBQSxZQUN0QztBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxzQkFBc0I7QUFDN0I7QUFDRSxxQkFBTyxRQUFRLGtCQUFrQjtBQUFBLFlBQ25DO0FBQUEsVUFDRjtBQUNBLG1CQUFTLHVCQUF1QjtBQUM5QixtQkFBTyxFQUFFO0FBQUEsVUFDWDtBQUNBLG1CQUFTLGVBQWUsTUFBTSxXQUFXLFVBQVU7QUFDakQsZ0JBQUksV0FBVyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJO0FBRW5GLGdCQUFJLGNBQWM7QUFBQSxjQUNoQixTQUFTO0FBQUEsY0FDVCxJQUFJO0FBQUEsY0FDSjtBQUFBLGNBQ0E7QUFBQSxZQUNGO0FBQ0EsZ0JBQUksbUJBQW1CLFFBQVEsa0JBQWtCO0FBSWpELGdCQUFJLGVBQWUsSUFBSSxJQUFJLGdCQUFnQjtBQUMzQyx5QkFBYSxJQUFJLFdBQVc7QUFDNUIsb0JBQVEsa0JBQWtCLFVBQVU7QUFDcEMsZ0JBQUksYUFBYSxRQUFRLGdCQUFnQjtBQUN6QyxnQkFBSTtBQUVKLGdCQUFJO0FBQ0Ysa0JBQUksZUFBZSxNQUFNO0FBQ3ZCLDJCQUFXLG9CQUFvQixXQUFXO0FBQUEsY0FDNUM7QUFBQSxZQUNGLFVBQUU7QUFDQSxrQkFBSTtBQUNGLG9CQUFJLGVBQWUsTUFBTTtBQUN2Qiw2QkFBVyxjQUFjLGNBQWMsUUFBUTtBQUFBLGdCQUNqRDtBQUFBLGNBQ0YsVUFBRTtBQUNBLG9CQUFJO0FBQ0YsZ0NBQWMsU0FBUztBQUFBLGdCQUN6QixVQUFFO0FBQ0EsMEJBQVEsa0JBQWtCLFVBQVU7QUFFcEMsc0JBQUk7QUFDRix3QkFBSSxlQUFlLE1BQU07QUFDdkIsaUNBQVcsY0FBYyxjQUFjLFFBQVE7QUFBQSxvQkFDakQ7QUFBQSxrQkFDRixVQUFFO0FBQ0EsZ0NBQVk7QUFHWix3QkFBSSxlQUFlLFFBQVEsWUFBWSxZQUFZLEdBQUc7QUFDcEQsaUNBQVcsb0NBQW9DLFdBQVc7QUFBQSxvQkFDNUQ7QUFBQSxrQkFDRjtBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFDQSxtQkFBUyxjQUFjLFVBQVU7QUFDL0IsZ0JBQUksV0FBVyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJO0FBRW5GLGdCQUFJLHNCQUFzQixRQUFRLGtCQUFrQjtBQUNwRCxnQkFBSSxhQUFhLFFBQVEsZ0JBQWdCO0FBRXpDLGdCQUFJLGVBQWUsTUFBTTtBQUN2Qix5QkFBVyxnQkFBZ0IscUJBQXFCLFFBQVE7QUFBQSxZQUMxRDtBQUlBLGdDQUFvQixRQUFRLFNBQVUsYUFBYTtBQUNqRCwwQkFBWTtBQUFBLFlBQ2QsQ0FBQztBQUNELGdCQUFJLFNBQVM7QUFFYixxQkFBUyxVQUFVO0FBQ2pCLGtCQUFJLG1CQUFtQixRQUFRLGtCQUFrQjtBQUNqRCxzQkFBUSxrQkFBa0IsVUFBVTtBQUNwQywyQkFBYSxRQUFRLGdCQUFnQjtBQUVyQyxrQkFBSTtBQUNGLG9CQUFJO0FBRUosb0JBQUk7QUFDRixzQkFBSSxlQUFlLE1BQU07QUFDdkIsK0JBQVcsY0FBYyxxQkFBcUIsUUFBUTtBQUFBLGtCQUN4RDtBQUFBLGdCQUNGLFVBQUU7QUFDQSxzQkFBSTtBQUNGLGtDQUFjLFNBQVMsTUFBTSxRQUFXLFNBQVM7QUFBQSxrQkFDbkQsVUFBRTtBQUNBLDRCQUFRLGtCQUFrQixVQUFVO0FBRXBDLHdCQUFJLGVBQWUsTUFBTTtBQUN2QixpQ0FBVyxjQUFjLHFCQUFxQixRQUFRO0FBQUEsb0JBQ3hEO0FBQUEsa0JBQ0Y7QUFBQSxnQkFDRjtBQUVBLHVCQUFPO0FBQUEsY0FDVCxVQUFFO0FBQ0Esb0JBQUksQ0FBQyxRQUFRO0FBSVgsMkJBQVM7QUFJVCxzQ0FBb0IsUUFBUSxTQUFVLGFBQWE7QUFDakQsZ0NBQVk7QUFFWix3QkFBSSxlQUFlLFFBQVEsWUFBWSxZQUFZLEdBQUc7QUFDcEQsaUNBQVcsb0NBQW9DLFdBQVc7QUFBQSxvQkFDNUQ7QUFBQSxrQkFDRixDQUFDO0FBQUEsZ0JBQ0g7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBLG9CQUFRLFNBQVMsU0FBUyxTQUFTO0FBQ2pDLDJCQUFhLFFBQVEsZ0JBQWdCO0FBRXJDLGtCQUFJO0FBQ0Ysb0JBQUksZUFBZSxNQUFNO0FBQ3ZCLDZCQUFXLGVBQWUscUJBQXFCLFFBQVE7QUFBQSxnQkFDekQ7QUFBQSxjQUNGLFVBQUU7QUFJQSxvQ0FBb0IsUUFBUSxTQUFVLGFBQWE7QUFDakQsOEJBQVk7QUFFWixzQkFBSSxjQUFjLFlBQVksWUFBWSxHQUFHO0FBQzNDLCtCQUFXLG9DQUFvQyxXQUFXO0FBQUEsa0JBQzVEO0FBQUEsZ0JBQ0YsQ0FBQztBQUFBLGNBQ0g7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxjQUFjO0FBRWxCO0FBQ0UsMEJBQWMsb0JBQUksSUFBSTtBQUFBLFVBQ3hCO0FBRUEsbUJBQVMsbUJBQW1CLFlBQVk7QUFDdEM7QUFDRSwwQkFBWSxJQUFJLFVBQVU7QUFFMUIsa0JBQUksWUFBWSxTQUFTLEdBQUc7QUFDMUIsd0JBQVEsZ0JBQWdCLFVBQVU7QUFBQSxrQkFDaEM7QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxxQkFBcUIsWUFBWTtBQUN4QztBQUNFLDBCQUFZLE9BQU8sVUFBVTtBQUU3QixrQkFBSSxZQUFZLFNBQVMsR0FBRztBQUMxQix3QkFBUSxnQkFBZ0IsVUFBVTtBQUFBLGNBQ3BDO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxvQkFBb0IsYUFBYTtBQUN4QyxnQkFBSSxnQkFBZ0I7QUFDcEIsZ0JBQUksY0FBYztBQUNsQix3QkFBWSxRQUFRLFNBQVUsWUFBWTtBQUN4QyxrQkFBSTtBQUNGLDJCQUFXLG9CQUFvQixXQUFXO0FBQUEsY0FDNUMsU0FBUyxPQUFPO0FBQ2Qsb0JBQUksQ0FBQyxlQUFlO0FBQ2xCLGtDQUFnQjtBQUNoQixnQ0FBYztBQUFBLGdCQUNoQjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLENBQUM7QUFFRCxnQkFBSSxlQUFlO0FBQ2pCLG9CQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxvQ0FBb0MsYUFBYTtBQUN4RCxnQkFBSSxnQkFBZ0I7QUFDcEIsZ0JBQUksY0FBYztBQUNsQix3QkFBWSxRQUFRLFNBQVUsWUFBWTtBQUN4QyxrQkFBSTtBQUNGLDJCQUFXLG9DQUFvQyxXQUFXO0FBQUEsY0FDNUQsU0FBUyxPQUFPO0FBQ2Qsb0JBQUksQ0FBQyxlQUFlO0FBQ2xCLGtDQUFnQjtBQUNoQixnQ0FBYztBQUFBLGdCQUNoQjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLENBQUM7QUFFRCxnQkFBSSxlQUFlO0FBQ2pCLG9CQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxnQkFBZ0IsY0FBYyxVQUFVO0FBQy9DLGdCQUFJLGdCQUFnQjtBQUNwQixnQkFBSSxjQUFjO0FBQ2xCLHdCQUFZLFFBQVEsU0FBVSxZQUFZO0FBQ3hDLGtCQUFJO0FBQ0YsMkJBQVcsZ0JBQWdCLGNBQWMsUUFBUTtBQUFBLGNBQ25ELFNBQVMsT0FBTztBQUNkLG9CQUFJLENBQUMsZUFBZTtBQUNsQixrQ0FBZ0I7QUFDaEIsZ0NBQWM7QUFBQSxnQkFDaEI7QUFBQSxjQUNGO0FBQUEsWUFDRixDQUFDO0FBRUQsZ0JBQUksZUFBZTtBQUNqQixvQkFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBRUEsbUJBQVMsY0FBYyxjQUFjLFVBQVU7QUFDN0MsZ0JBQUksZ0JBQWdCO0FBQ3BCLGdCQUFJLGNBQWM7QUFDbEIsd0JBQVksUUFBUSxTQUFVLFlBQVk7QUFDeEMsa0JBQUk7QUFDRiwyQkFBVyxjQUFjLGNBQWMsUUFBUTtBQUFBLGNBQ2pELFNBQVMsT0FBTztBQUNkLG9CQUFJLENBQUMsZUFBZTtBQUNsQixrQ0FBZ0I7QUFDaEIsZ0NBQWM7QUFBQSxnQkFDaEI7QUFBQSxjQUNGO0FBQUEsWUFDRixDQUFDO0FBRUQsZ0JBQUksZUFBZTtBQUNqQixvQkFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBRUEsbUJBQVMsY0FBYyxjQUFjLFVBQVU7QUFDN0MsZ0JBQUksZ0JBQWdCO0FBQ3BCLGdCQUFJLGNBQWM7QUFDbEIsd0JBQVksUUFBUSxTQUFVLFlBQVk7QUFDeEMsa0JBQUk7QUFDRiwyQkFBVyxjQUFjLGNBQWMsUUFBUTtBQUFBLGNBQ2pELFNBQVMsT0FBTztBQUNkLG9CQUFJLENBQUMsZUFBZTtBQUNsQixrQ0FBZ0I7QUFDaEIsZ0NBQWM7QUFBQSxnQkFDaEI7QUFBQSxjQUNGO0FBQUEsWUFDRixDQUFDO0FBRUQsZ0JBQUksZUFBZTtBQUNqQixvQkFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBRUEsbUJBQVMsZUFBZSxjQUFjLFVBQVU7QUFDOUMsZ0JBQUksZ0JBQWdCO0FBQ3BCLGdCQUFJLGNBQWM7QUFDbEIsd0JBQVksUUFBUSxTQUFVLFlBQVk7QUFDeEMsa0JBQUk7QUFDRiwyQkFBVyxlQUFlLGNBQWMsUUFBUTtBQUFBLGNBQ2xELFNBQVMsT0FBTztBQUNkLG9CQUFJLENBQUMsZUFBZTtBQUNsQixrQ0FBZ0I7QUFDaEIsZ0NBQWM7QUFBQSxnQkFDaEI7QUFBQSxjQUNGO0FBQUEsWUFDRixDQUFDO0FBRUQsZ0JBQUksZUFBZTtBQUNqQixvQkFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBRUEsa0JBQVEsaUJBQWlCO0FBQ3pCLGtCQUFRLHNCQUFzQjtBQUM5QixrQkFBUSx1QkFBdUI7QUFDL0Isa0JBQVEscUJBQXFCO0FBQzdCLGtCQUFRLGlCQUFpQjtBQUN6QixrQkFBUSx1QkFBdUI7QUFDL0Isa0JBQVEsZ0JBQWdCO0FBQUEsUUFDdEIsR0FBRztBQUFBLE1BQ0w7QUFBQTtBQUFBOzs7QUMxVkE7QUFBQTtBQUFBO0FBRUEsVUFBSSxPQUF1QztBQUN6QyxlQUFPLFVBQVU7QUFBQSxNQUNuQixPQUFPO0FBQ0wsZUFBTyxVQUFVO0FBQUEsTUFDbkI7QUFBQTtBQUFBOzs7QUNOQTtBQUFBO0FBQUE7QUFXQSxVQUFJLE1BQXVDO0FBQ3pDLFNBQUMsV0FBVztBQUNkO0FBRUEsY0FBSUcsV0FBUTtBQUNaLGNBQUksVUFBVTtBQUNkLGNBQUksWUFBWTtBQUNoQixjQUFJLFVBQVU7QUFFZCxjQUFJLHVCQUF1QkEsU0FBTTtBQU9qQyxtQkFBUyxLQUFLLFFBQVE7QUFDcEI7QUFDRSx1QkFBUyxPQUFPLFVBQVUsUUFBUSxPQUFPLElBQUksTUFBTSxPQUFPLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxPQUFPLEdBQUcsT0FBTyxNQUFNLFFBQVE7QUFDMUcscUJBQUssT0FBTyxDQUFDLElBQUksVUFBVSxJQUFJO0FBQUEsY0FDakM7QUFFQSwyQkFBYSxRQUFRLFFBQVEsSUFBSTtBQUFBLFlBQ25DO0FBQUEsVUFDRjtBQUNBLG1CQUFTLE1BQU0sUUFBUTtBQUNyQjtBQUNFLHVCQUFTLFFBQVEsVUFBVSxRQUFRLE9BQU8sSUFBSSxNQUFNLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBQyxHQUFHLFFBQVEsR0FBRyxRQUFRLE9BQU8sU0FBUztBQUNqSCxxQkFBSyxRQUFRLENBQUMsSUFBSSxVQUFVLEtBQUs7QUFBQSxjQUNuQztBQUVBLDJCQUFhLFNBQVMsUUFBUSxJQUFJO0FBQUEsWUFDcEM7QUFBQSxVQUNGO0FBRUEsbUJBQVMsYUFBYSxPQUFPLFFBQVEsTUFBTTtBQUd6QztBQUNFLGtCQUFJQywwQkFBeUIscUJBQXFCO0FBQ2xELGtCQUFJLFFBQVFBLHdCQUF1QixpQkFBaUI7QUFFcEQsa0JBQUksVUFBVSxJQUFJO0FBQ2hCLDBCQUFVO0FBQ1YsdUJBQU8sS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQUEsY0FDNUI7QUFFQSxrQkFBSSxpQkFBaUIsS0FBSyxJQUFJLFNBQVUsTUFBTTtBQUM1Qyx1QkFBTyxLQUFLO0FBQUEsY0FDZCxDQUFDO0FBRUQsNkJBQWUsUUFBUSxjQUFjLE1BQU07QUFJM0MsdUJBQVMsVUFBVSxNQUFNLEtBQUssUUFBUSxLQUFLLEdBQUcsU0FBUyxjQUFjO0FBQUEsWUFDdkU7QUFBQSxVQUNGO0FBRUEsY0FBSSxDQUFDRCxVQUFPO0FBQ1Y7QUFDRSxvQkFBTSxNQUFPLGlHQUFrRztBQUFBLFlBQ2pIO0FBQUEsVUFDRjtBQUVBLGNBQUksb0JBQW9CO0FBQ3hCLGNBQUksaUJBQWlCO0FBQ3JCLGNBQUkseUJBQXlCO0FBRTdCLGNBQUksV0FBVztBQUVmLGNBQUksYUFBYTtBQUVqQixjQUFJLGdCQUFnQjtBQUNwQixjQUFJLFdBQVc7QUFDZixjQUFJRSxhQUFXO0FBQ2YsY0FBSSxPQUFPO0FBQ1gsY0FBSSxrQkFBa0I7QUFDdEIsY0FBSSxrQkFBa0I7QUFDdEIsY0FBSSxhQUFhO0FBQ2pCLGNBQUksV0FBVztBQUNmLGNBQUksb0JBQW9CO0FBQ3hCLGNBQUksZ0JBQWdCO0FBQ3BCLGNBQUksc0JBQXNCO0FBQzFCLGNBQUksZ0JBQWdCO0FBQ3BCLGNBQUksMkJBQTJCO0FBQy9CLGNBQUkscUJBQXFCO0FBQ3pCLGNBQUksd0JBQXdCO0FBQzVCLGNBQUksdUJBQXVCO0FBQzNCLGNBQUksaUJBQWlCO0FBQ3JCLGNBQUksUUFBUTtBQUNaLGNBQUkscUJBQXFCO0FBQ3pCLGNBQUksd0JBQXdCO0FBSTVCLGNBQUksc0JBQXNCO0FBRTFCLGNBQUksdUJBQXVCO0FBQzNCLGNBQUksc0JBQXNCO0FBQzFCLGNBQUksc0JBQXNCO0FBRTFCLGNBQUksa0JBQWtCLG9CQUFJLElBQUk7QUFNOUIsY0FBSSwrQkFBK0IsQ0FBQztBQVFwQyxjQUFJLDRCQUE2QixDQUFDO0FBRWxDLG1CQUFTLHNCQUFzQixrQkFBa0IsY0FBYztBQUM3RCxnQ0FBb0Isa0JBQWtCLFlBQVk7QUFDbEQsZ0NBQW9CLG1CQUFtQixXQUFXLFlBQVk7QUFBQSxVQUNoRTtBQUNBLG1CQUFTLG9CQUFvQixrQkFBa0IsY0FBYztBQUMzRDtBQUNFLGtCQUFJLDZCQUE2QixnQkFBZ0IsR0FBRztBQUNsRCxzQkFBTSw4RkFBbUcsZ0JBQWdCO0FBQUEsY0FDM0g7QUFBQSxZQUNGO0FBRUEseUNBQTZCLGdCQUFnQixJQUFJO0FBRWpEO0FBQ0Usa0JBQUksaUJBQWlCLGlCQUFpQixZQUFZO0FBQ2xELHdDQUEwQixjQUFjLElBQUk7QUFFNUMsa0JBQUkscUJBQXFCLGlCQUFpQjtBQUN4QywwQ0FBMEIsYUFBYTtBQUFBLGNBQ3pDO0FBQUEsWUFDRjtBQUVBLHFCQUFTLElBQUksR0FBRyxJQUFJLGFBQWEsUUFBUSxLQUFLO0FBQzVDLDhCQUFnQixJQUFJLGFBQWEsQ0FBQyxDQUFDO0FBQUEsWUFDckM7QUFBQSxVQUNGO0FBRUEsY0FBSSxZQUFZLENBQUMsRUFBRSxPQUFPLFdBQVcsZUFBZSxPQUFPLE9BQU8sYUFBYSxlQUFlLE9BQU8sT0FBTyxTQUFTLGtCQUFrQjtBQUl2SSxjQUFJLFdBQVc7QUFHZixjQUFJLFNBQVM7QUFLYixjQUFJLG9CQUFvQjtBQUl4QixjQUFJLFVBQVU7QUFLZCxjQUFJLHFCQUFxQjtBQUd6QixjQUFJLFVBQVU7QUFHZCxjQUFJLG1CQUFtQjtBQUd2QixjQUFJLDRCQUE0QjtBQUdoQyxjQUFJLHNCQUFzQiw0QkFBNEI7QUFDdEQsY0FBSSxzQkFBc0I7QUFDMUIsY0FBSSw2QkFBNkIsSUFBSSxPQUFPLE9BQU8sNEJBQTRCLE9BQU8sc0JBQXNCLEtBQUs7QUFDakgsY0FBSUMsa0JBQWlCLE9BQU8sVUFBVTtBQUN0QyxjQUFJLDRCQUE0QixDQUFDO0FBQ2pDLGNBQUksOEJBQThCLENBQUM7QUFDbkMsbUJBQVMsb0JBQW9CLGVBQWU7QUFDMUMsZ0JBQUlBLGdCQUFlLEtBQUssNkJBQTZCLGFBQWEsR0FBRztBQUNuRSxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSUEsZ0JBQWUsS0FBSywyQkFBMkIsYUFBYSxHQUFHO0FBQ2pFLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLDJCQUEyQixLQUFLLGFBQWEsR0FBRztBQUNsRCwwQ0FBNEIsYUFBYSxJQUFJO0FBQzdDLHFCQUFPO0FBQUEsWUFDVDtBQUVBLHNDQUEwQixhQUFhLElBQUk7QUFFM0M7QUFDRSxvQkFBTSxnQ0FBZ0MsYUFBYTtBQUFBLFlBQ3JEO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBQ0EsbUJBQVMsc0JBQXNCLE1BQU0sY0FBYyxzQkFBc0I7QUFDdkUsZ0JBQUksaUJBQWlCLE1BQU07QUFDekIscUJBQU8sYUFBYSxTQUFTO0FBQUEsWUFDL0I7QUFFQSxnQkFBSSxzQkFBc0I7QUFDeEIscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksS0FBSyxTQUFTLE1BQU0sS0FBSyxDQUFDLE1BQU0sT0FBTyxLQUFLLENBQUMsTUFBTSxTQUFTLEtBQUssQ0FBQyxNQUFNLE9BQU8sS0FBSyxDQUFDLE1BQU0sTUFBTTtBQUNuRyxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFDQSxtQkFBUyxpQ0FBaUMsTUFBTUMsUUFBTyxjQUFjLHNCQUFzQjtBQUN6RixnQkFBSSxpQkFBaUIsUUFBUSxhQUFhLFNBQVMsVUFBVTtBQUMzRCxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxvQkFBUSxPQUFPQSxRQUFPO0FBQUEsY0FDcEIsS0FBSztBQUFBLGNBRUwsS0FBSztBQUVILHVCQUFPO0FBQUEsY0FFVCxLQUFLLFdBQ0g7QUFDRSxvQkFBSSxzQkFBc0I7QUFDeEIseUJBQU87QUFBQSxnQkFDVDtBQUVBLG9CQUFJLGlCQUFpQixNQUFNO0FBQ3pCLHlCQUFPLENBQUMsYUFBYTtBQUFBLGdCQUN2QixPQUFPO0FBQ0wsc0JBQUlDLFVBQVMsS0FBSyxZQUFZLEVBQUUsTUFBTSxHQUFHLENBQUM7QUFDMUMseUJBQU9BLFlBQVcsV0FBV0EsWUFBVztBQUFBLGdCQUMxQztBQUFBLGNBQ0Y7QUFBQSxjQUVGO0FBQ0UsdUJBQU87QUFBQSxZQUNYO0FBQUEsVUFDRjtBQUNBLG1CQUFTLHNCQUFzQixNQUFNRCxRQUFPLGNBQWMsc0JBQXNCO0FBQzlFLGdCQUFJQSxXQUFVLFFBQVEsT0FBT0EsV0FBVSxhQUFhO0FBQ2xELHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLGlDQUFpQyxNQUFNQSxRQUFPLGNBQWMsb0JBQW9CLEdBQUc7QUFDckYscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksc0JBQXNCO0FBQ3hCLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLGlCQUFpQixNQUFNO0FBRXpCLHNCQUFRLGFBQWEsTUFBTTtBQUFBLGdCQUN6QixLQUFLO0FBQ0gseUJBQU8sQ0FBQ0E7QUFBQSxnQkFFVixLQUFLO0FBQ0gseUJBQU9BLFdBQVU7QUFBQSxnQkFFbkIsS0FBSztBQUNILHlCQUFPLE1BQU1BLE1BQUs7QUFBQSxnQkFFcEIsS0FBSztBQUNILHlCQUFPLE1BQU1BLE1BQUssS0FBS0EsU0FBUTtBQUFBLGNBQ25DO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUNBLG1CQUFTLGdCQUFnQixNQUFNO0FBQzdCLG1CQUFPLFdBQVcsZUFBZSxJQUFJLElBQUksV0FBVyxJQUFJLElBQUk7QUFBQSxVQUM5RDtBQUVBLG1CQUFTLG1CQUFtQixNQUFNLE1BQU0saUJBQWlCLGVBQWUsb0JBQW9CRSxjQUFhLG1CQUFtQjtBQUMxSCxpQkFBSyxrQkFBa0IsU0FBUyxxQkFBcUIsU0FBUyxXQUFXLFNBQVM7QUFDbEYsaUJBQUssZ0JBQWdCO0FBQ3JCLGlCQUFLLHFCQUFxQjtBQUMxQixpQkFBSyxrQkFBa0I7QUFDdkIsaUJBQUssZUFBZTtBQUNwQixpQkFBSyxPQUFPO0FBQ1osaUJBQUssY0FBY0E7QUFDbkIsaUJBQUssb0JBQW9CO0FBQUEsVUFDM0I7QUFLQSxjQUFJLGFBQWEsQ0FBQztBQUVsQixjQUFJLGdCQUFnQjtBQUFBLFlBQUM7QUFBQSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFHakM7QUFBQSxZQUFnQjtBQUFBLFlBQWtCO0FBQUEsWUFBYTtBQUFBLFlBQWtDO0FBQUEsWUFBNEI7QUFBQSxVQUFPO0FBQ3BILHdCQUFjLFFBQVEsU0FBVSxNQUFNO0FBQ3BDLHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBVTtBQUFBO0FBQUEsY0FDMUQ7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQSxZQUFLO0FBQUEsVUFDUCxDQUFDO0FBR0QsV0FBQyxDQUFDLGlCQUFpQixnQkFBZ0IsR0FBRyxDQUFDLGFBQWEsT0FBTyxHQUFHLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxhQUFhLFlBQVksQ0FBQyxFQUFFLFFBQVEsU0FBVUMsUUFBTTtBQUNySSxnQkFBSSxPQUFPQSxPQUFLLENBQUMsR0FDYixnQkFBZ0JBLE9BQUssQ0FBQztBQUMxQix1QkFBVyxJQUFJLElBQUksSUFBSTtBQUFBLGNBQW1CO0FBQUEsY0FBTTtBQUFBLGNBQVE7QUFBQTtBQUFBLGNBQ3hEO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUlELFdBQUMsbUJBQW1CLGFBQWEsY0FBYyxPQUFPLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFDOUUsdUJBQVcsSUFBSSxJQUFJLElBQUk7QUFBQSxjQUFtQjtBQUFBLGNBQU07QUFBQSxjQUFtQjtBQUFBO0FBQUEsY0FDbkUsS0FBSyxZQUFZO0FBQUE7QUFBQSxjQUNqQjtBQUFBO0FBQUEsY0FDQTtBQUFBO0FBQUEsY0FDQTtBQUFBLFlBQUs7QUFBQSxVQUNQLENBQUM7QUFLRCxXQUFDLGVBQWUsNkJBQTZCLGFBQWEsZUFBZSxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBQ2pHLHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBbUI7QUFBQTtBQUFBLGNBQ25FO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUVEO0FBQUEsWUFBQztBQUFBLFlBQW1CO0FBQUE7QUFBQTtBQUFBLFlBRXBCO0FBQUEsWUFBYTtBQUFBLFlBQVk7QUFBQSxZQUFZO0FBQUEsWUFBVztBQUFBLFlBQVM7QUFBQSxZQUFZO0FBQUEsWUFBMkI7QUFBQSxZQUF5QjtBQUFBLFlBQWtCO0FBQUEsWUFBVTtBQUFBLFlBQVE7QUFBQSxZQUFZO0FBQUEsWUFBYztBQUFBLFlBQVE7QUFBQSxZQUFlO0FBQUEsWUFBWTtBQUFBLFlBQVk7QUFBQSxZQUFZO0FBQUEsWUFBVTtBQUFBO0FBQUEsWUFDNVA7QUFBQSxVQUFXLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFDbkMsdUJBQVcsSUFBSSxJQUFJLElBQUk7QUFBQSxjQUFtQjtBQUFBLGNBQU07QUFBQSxjQUFTO0FBQUE7QUFBQSxjQUN6RCxLQUFLLFlBQVk7QUFBQTtBQUFBLGNBQ2pCO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUdEO0FBQUEsWUFBQztBQUFBO0FBQUE7QUFBQSxZQUVEO0FBQUEsWUFBWTtBQUFBLFlBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUdyQixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBQ3hCLHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBUztBQUFBO0FBQUEsY0FDekQ7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQSxZQUFLO0FBQUEsVUFDUCxDQUFDO0FBR0Q7QUFBQSxZQUFDO0FBQUEsWUFBVztBQUFBO0FBQUE7QUFBQTtBQUFBLFVBR1osRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUN4Qix1QkFBVyxJQUFJLElBQUksSUFBSTtBQUFBLGNBQW1CO0FBQUEsY0FBTTtBQUFBLGNBQW9CO0FBQUE7QUFBQSxjQUNwRTtBQUFBO0FBQUEsY0FDQTtBQUFBO0FBQUEsY0FDQTtBQUFBO0FBQUEsY0FDQTtBQUFBLFlBQUs7QUFBQSxVQUNQLENBQUM7QUFFRDtBQUFBLFlBQUM7QUFBQSxZQUFRO0FBQUEsWUFBUTtBQUFBLFlBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUd6QixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBQ3hCLHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBa0I7QUFBQTtBQUFBLGNBQ2xFO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUVELFdBQUMsV0FBVyxPQUFPLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFDM0MsdUJBQVcsSUFBSSxJQUFJLElBQUk7QUFBQSxjQUFtQjtBQUFBLGNBQU07QUFBQSxjQUFTO0FBQUE7QUFBQSxjQUN6RCxLQUFLLFlBQVk7QUFBQTtBQUFBLGNBQ2pCO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUNELGNBQUksV0FBVztBQUVmLGNBQUlDLGNBQWEsU0FBVUMsUUFBTztBQUNoQyxtQkFBT0EsT0FBTSxDQUFDLEVBQUUsWUFBWTtBQUFBLFVBQzlCO0FBT0E7QUFBQSxZQUFDO0FBQUEsWUFBaUI7QUFBQSxZQUFzQjtBQUFBLFlBQWU7QUFBQSxZQUFrQjtBQUFBLFlBQWM7QUFBQSxZQUFhO0FBQUEsWUFBYTtBQUFBLFlBQXVCO0FBQUEsWUFBK0I7QUFBQSxZQUFpQjtBQUFBLFlBQW1CO0FBQUEsWUFBcUI7QUFBQSxZQUFxQjtBQUFBLFlBQWdCO0FBQUEsWUFBYTtBQUFBLFlBQWU7QUFBQSxZQUFpQjtBQUFBLFlBQWU7QUFBQSxZQUFhO0FBQUEsWUFBb0I7QUFBQSxZQUFnQjtBQUFBLFlBQWM7QUFBQSxZQUFnQjtBQUFBLFlBQWU7QUFBQSxZQUFjO0FBQUEsWUFBZ0M7QUFBQSxZQUE4QjtBQUFBLFlBQWU7QUFBQSxZQUFrQjtBQUFBLFlBQW1CO0FBQUEsWUFBa0I7QUFBQSxZQUFrQjtBQUFBLFlBQWM7QUFBQSxZQUFjO0FBQUEsWUFBZ0I7QUFBQSxZQUFxQjtBQUFBLFlBQXNCO0FBQUEsWUFBZTtBQUFBLFlBQVk7QUFBQSxZQUFrQjtBQUFBLFlBQW9CO0FBQUEsWUFBbUI7QUFBQSxZQUFjO0FBQUEsWUFBZ0I7QUFBQSxZQUEwQjtBQUFBLFlBQTJCO0FBQUEsWUFBb0I7QUFBQSxZQUFxQjtBQUFBLFlBQWtCO0FBQUEsWUFBbUI7QUFBQSxZQUFxQjtBQUFBLFlBQWtCO0FBQUEsWUFBZ0I7QUFBQSxZQUFlO0FBQUEsWUFBbUI7QUFBQSxZQUFrQjtBQUFBLFlBQXNCO0FBQUEsWUFBdUI7QUFBQSxZQUFnQjtBQUFBLFlBQWlCO0FBQUEsWUFBZ0I7QUFBQSxZQUFnQjtBQUFBLFlBQWE7QUFBQSxZQUFpQjtBQUFBLFlBQWtCO0FBQUEsWUFBaUI7QUFBQSxZQUFjO0FBQUEsWUFBaUI7QUFBQSxZQUFpQjtBQUFBLFlBQWdCO0FBQUEsWUFBZ0I7QUFBQSxZQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFHeHdDLEVBQUUsUUFBUSxTQUFVLGVBQWU7QUFDakMsZ0JBQUksT0FBTyxjQUFjLFFBQVEsVUFBVUQsV0FBVTtBQUNyRCx1QkFBVyxJQUFJLElBQUksSUFBSTtBQUFBLGNBQW1CO0FBQUEsY0FBTTtBQUFBLGNBQVE7QUFBQTtBQUFBLGNBQ3hEO0FBQUEsY0FBZTtBQUFBO0FBQUEsY0FDZjtBQUFBO0FBQUEsY0FDQTtBQUFBLFlBQUs7QUFBQSxVQUNQLENBQUM7QUFFRDtBQUFBLFlBQUM7QUFBQSxZQUFpQjtBQUFBLFlBQWlCO0FBQUEsWUFBYztBQUFBLFlBQWM7QUFBQSxZQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFHOUUsRUFBRSxRQUFRLFNBQVUsZUFBZTtBQUNqQyxnQkFBSSxPQUFPLGNBQWMsUUFBUSxVQUFVQSxXQUFVO0FBQ3JELHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBUTtBQUFBO0FBQUEsY0FDeEQ7QUFBQSxjQUFlO0FBQUEsY0FBZ0M7QUFBQTtBQUFBLGNBQy9DO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUVEO0FBQUEsWUFBQztBQUFBLFlBQVk7QUFBQSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFHekIsRUFBRSxRQUFRLFNBQVUsZUFBZTtBQUNqQyxnQkFBSSxPQUFPLGNBQWMsUUFBUSxVQUFVQSxXQUFVO0FBQ3JELHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBUTtBQUFBO0FBQUEsY0FDeEQ7QUFBQSxjQUFlO0FBQUEsY0FBd0M7QUFBQTtBQUFBLGNBQ3ZEO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUlELFdBQUMsWUFBWSxhQUFhLEVBQUUsUUFBUSxTQUFVLGVBQWU7QUFDM0QsdUJBQVcsYUFBYSxJQUFJLElBQUk7QUFBQSxjQUFtQjtBQUFBLGNBQWU7QUFBQSxjQUFRO0FBQUE7QUFBQSxjQUMxRSxjQUFjLFlBQVk7QUFBQTtBQUFBLGNBQzFCO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUdELGNBQUksWUFBWTtBQUNoQixxQkFBVyxTQUFTLElBQUksSUFBSTtBQUFBLFlBQW1CO0FBQUEsWUFBYTtBQUFBLFlBQVE7QUFBQTtBQUFBLFlBQ3BFO0FBQUEsWUFBYztBQUFBLFlBQWdDO0FBQUE7QUFBQSxZQUM5QztBQUFBLFVBQUs7QUFDTCxXQUFDLE9BQU8sUUFBUSxVQUFVLFlBQVksRUFBRSxRQUFRLFNBQVUsZUFBZTtBQUN2RSx1QkFBVyxhQUFhLElBQUksSUFBSTtBQUFBLGNBQW1CO0FBQUEsY0FBZTtBQUFBLGNBQVE7QUFBQTtBQUFBLGNBQzFFLGNBQWMsWUFBWTtBQUFBO0FBQUEsY0FDMUI7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQSxZQUFJO0FBQUEsVUFDTixDQUFDO0FBWUQsY0FBSSx1QkFBdUI7QUFDM0IsY0FBSSxVQUFVO0FBRWQsbUJBQVMsWUFBWSxLQUFLO0FBQ3hCO0FBQ0Usa0JBQUksQ0FBQyxXQUFXLHFCQUFxQixLQUFLLEdBQUcsR0FBRztBQUM5QywwQkFBVTtBQUVWLHNCQUFNLDhOQUF3TyxLQUFLLFVBQVUsR0FBRyxDQUFDO0FBQUEsY0FDblE7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQU9BLG1CQUFTLG9CQUFvQkUsT0FBTSxNQUFNLFVBQVUsY0FBYztBQUMvRDtBQUNFLGtCQUFJLGFBQWEsaUJBQWlCO0FBQ2hDLG9CQUFJLGVBQWUsYUFBYTtBQUNoQyx1QkFBT0EsTUFBSyxZQUFZO0FBQUEsY0FDMUIsT0FBTztBQUNMLG9CQUFLLGFBQWEsYUFBYTtBQUk3Qiw4QkFBWSxLQUFLLFFBQVE7QUFBQSxnQkFDM0I7QUFFQSxvQkFBSSxnQkFBZ0IsYUFBYTtBQUNqQyxvQkFBSSxjQUFjO0FBRWxCLG9CQUFJLGFBQWEsU0FBUyxvQkFBb0I7QUFDNUMsc0JBQUlBLE1BQUssYUFBYSxhQUFhLEdBQUc7QUFDcEMsd0JBQUlOLFNBQVFNLE1BQUssYUFBYSxhQUFhO0FBRTNDLHdCQUFJTixXQUFVLElBQUk7QUFDaEIsNkJBQU87QUFBQSxvQkFDVDtBQUVBLHdCQUFJLHNCQUFzQixNQUFNLFVBQVUsY0FBYyxLQUFLLEdBQUc7QUFDOUQsNkJBQU9BO0FBQUEsb0JBQ1Q7QUFFQSx3QkFBSUEsV0FBVSxLQUFLLFVBQVU7QUFDM0IsNkJBQU87QUFBQSxvQkFDVDtBQUVBLDJCQUFPQTtBQUFBLGtCQUNUO0FBQUEsZ0JBQ0YsV0FBV00sTUFBSyxhQUFhLGFBQWEsR0FBRztBQUMzQyxzQkFBSSxzQkFBc0IsTUFBTSxVQUFVLGNBQWMsS0FBSyxHQUFHO0FBRzlELDJCQUFPQSxNQUFLLGFBQWEsYUFBYTtBQUFBLGtCQUN4QztBQUVBLHNCQUFJLGFBQWEsU0FBUyxTQUFTO0FBR2pDLDJCQUFPO0FBQUEsa0JBQ1Q7QUFNQSxnQ0FBY0EsTUFBSyxhQUFhLGFBQWE7QUFBQSxnQkFDL0M7QUFFQSxvQkFBSSxzQkFBc0IsTUFBTSxVQUFVLGNBQWMsS0FBSyxHQUFHO0FBQzlELHlCQUFPLGdCQUFnQixPQUFPLFdBQVc7QUFBQSxnQkFDM0MsV0FBVyxnQkFBZ0IsS0FBSyxVQUFVO0FBQ3hDLHlCQUFPO0FBQUEsZ0JBQ1QsT0FBTztBQUNMLHlCQUFPO0FBQUEsZ0JBQ1Q7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFPQSxtQkFBUyxxQkFBcUJBLE9BQU0sTUFBTSxVQUFVO0FBQ2xEO0FBQ0Usa0JBQUksQ0FBQyxvQkFBb0IsSUFBSSxHQUFHO0FBQzlCO0FBQUEsY0FDRjtBQUtBLGtCQUFJLHdCQUF3QixRQUFRLEdBQUc7QUFDckMsdUJBQU87QUFBQSxjQUNUO0FBRUEsa0JBQUksQ0FBQ0EsTUFBSyxhQUFhLElBQUksR0FBRztBQUM1Qix1QkFBTyxhQUFhLFNBQVksU0FBWTtBQUFBLGNBQzlDO0FBRUEsa0JBQUlOLFNBQVFNLE1BQUssYUFBYSxJQUFJO0FBRWxDLGtCQUFJTixXQUFVLEtBQUssVUFBVTtBQUMzQix1QkFBTztBQUFBLGNBQ1Q7QUFFQSxxQkFBT0E7QUFBQSxZQUNUO0FBQUEsVUFDRjtBQVNBLG1CQUFTLG9CQUFvQk0sT0FBTSxNQUFNTixRQUFPLHNCQUFzQjtBQUNwRSxnQkFBSSxlQUFlLGdCQUFnQixJQUFJO0FBRXZDLGdCQUFJLHNCQUFzQixNQUFNLGNBQWMsb0JBQW9CLEdBQUc7QUFDbkU7QUFBQSxZQUNGO0FBRUEsZ0JBQUksc0JBQXNCLE1BQU1BLFFBQU8sY0FBYyxvQkFBb0IsR0FBRztBQUMxRSxjQUFBQSxTQUFRO0FBQUEsWUFDVjtBQUdBLGdCQUFJLHdCQUF3QixpQkFBaUIsTUFBTTtBQUNqRCxrQkFBSSxvQkFBb0IsSUFBSSxHQUFHO0FBQzdCLG9CQUFJLGlCQUFpQjtBQUVyQixvQkFBSUEsV0FBVSxNQUFNO0FBQ2xCLGtCQUFBTSxNQUFLLGdCQUFnQixjQUFjO0FBQUEsZ0JBQ3JDLE9BQU87QUFDTCxrQkFBQUEsTUFBSyxhQUFhLGdCQUFpQixLQUFLTixNQUFLO0FBQUEsZ0JBQy9DO0FBQUEsY0FDRjtBQUVBO0FBQUEsWUFDRjtBQUVBLGdCQUFJLGtCQUFrQixhQUFhO0FBRW5DLGdCQUFJLGlCQUFpQjtBQUNuQixrQkFBSSxlQUFlLGFBQWE7QUFFaEMsa0JBQUlBLFdBQVUsTUFBTTtBQUNsQixvQkFBSSxPQUFPLGFBQWE7QUFDeEIsZ0JBQUFNLE1BQUssWUFBWSxJQUFJLFNBQVMsVUFBVSxRQUFRO0FBQUEsY0FDbEQsT0FBTztBQUdMLGdCQUFBQSxNQUFLLFlBQVksSUFBSU47QUFBQSxjQUN2QjtBQUVBO0FBQUEsWUFDRjtBQUdBLGdCQUFJLGdCQUFnQixhQUFhLGVBQzdCLHFCQUFxQixhQUFhO0FBRXRDLGdCQUFJQSxXQUFVLE1BQU07QUFDbEIsY0FBQU0sTUFBSyxnQkFBZ0IsYUFBYTtBQUFBLFlBQ3BDLE9BQU87QUFDTCxrQkFBSSxRQUFRLGFBQWE7QUFDekIsa0JBQUk7QUFFSixrQkFBSSxVQUFVLFdBQVcsVUFBVSxzQkFBc0JOLFdBQVUsTUFBTTtBQUd2RSxpQ0FBaUI7QUFBQSxjQUNuQixPQUFPO0FBR0w7QUFDRSxtQ0FBaUIsS0FBS0E7QUFBQSxnQkFDeEI7QUFFQSxvQkFBSSxhQUFhLGFBQWE7QUFDNUIsOEJBQVksZUFBZSxTQUFTLENBQUM7QUFBQSxnQkFDdkM7QUFBQSxjQUNGO0FBRUEsa0JBQUksb0JBQW9CO0FBQ3RCLGdCQUFBTSxNQUFLLGVBQWUsb0JBQW9CLGVBQWUsY0FBYztBQUFBLGNBQ3ZFLE9BQU87QUFDTCxnQkFBQUEsTUFBSyxhQUFhLGVBQWUsY0FBYztBQUFBLGNBQ2pEO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFPQSxjQUFJLHFCQUFxQjtBQUN6QixjQUFJLG9CQUFvQjtBQUN4QixjQUFJLHNCQUFzQjtBQUMxQixjQUFJLHlCQUF5QjtBQUM3QixjQUFJLHNCQUFzQjtBQUMxQixjQUFJLHNCQUFzQjtBQUMxQixjQUFJLHFCQUFxQjtBQUN6QixjQUFJLHlCQUF5QjtBQUM3QixjQUFJLHNCQUFzQjtBQUMxQixjQUFJLDJCQUEyQjtBQUMvQixjQUFJLGtCQUFrQjtBQUN0QixjQUFJLGtCQUFrQjtBQUN0QixjQUFJLG1CQUFtQjtBQUN2QixjQUFJLDBCQUEwQjtBQUM5QixjQUFJLHlCQUF5QjtBQUM3QixjQUFJLG1CQUFtQjtBQUN2QixjQUFJLHVCQUF1QjtBQUMzQixjQUFJLGdDQUFnQztBQUNwQyxjQUFJLHVCQUF1QjtBQUMzQixjQUFJLDJCQUEyQjtBQUUvQixjQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sS0FBSztBQUM5QyxnQkFBSSxZQUFZLE9BQU87QUFDdkIsaUNBQXFCLFVBQVUsZUFBZTtBQUM5QyxnQ0FBb0IsVUFBVSxjQUFjO0FBQzVDLGtDQUFzQixVQUFVLGdCQUFnQjtBQUNoRCxxQ0FBeUIsVUFBVSxtQkFBbUI7QUFDdEQsa0NBQXNCLFVBQVUsZ0JBQWdCO0FBQ2hELGtDQUFzQixVQUFVLGdCQUFnQjtBQUNoRCxpQ0FBcUIsVUFBVSxlQUFlO0FBQzlDLHFDQUF5QixVQUFVLG1CQUFtQjtBQUN0RCxrQ0FBc0IsVUFBVSxnQkFBZ0I7QUFDaEQsdUNBQTJCLFVBQVUscUJBQXFCO0FBQzFELDhCQUFrQixVQUFVLFlBQVk7QUFDeEMsOEJBQWtCLFVBQVUsWUFBWTtBQUN4QywrQkFBbUIsVUFBVSxhQUFhO0FBQzFDLHNDQUEwQixVQUFVLG9CQUFvQjtBQUN4RCxxQ0FBeUIsVUFBVSxtQkFBbUI7QUFDdEQsK0JBQW1CLFVBQVUsYUFBYTtBQUMxQyxtQ0FBdUIsVUFBVSxpQkFBaUI7QUFDbEQsNENBQWdDLFVBQVUsd0JBQXdCO0FBQ2xFLG1DQUF1QixVQUFVLGlCQUFpQjtBQUNsRCx1Q0FBMkIsVUFBVSxxQkFBcUI7QUFBQSxVQUM1RDtBQUVBLGNBQUksd0JBQXdCLE9BQU8sV0FBVyxjQUFjLE9BQU87QUFDbkUsY0FBSSx1QkFBdUI7QUFDM0IsbUJBQVMsY0FBYyxlQUFlO0FBQ3BDLGdCQUFJLGtCQUFrQixRQUFRLE9BQU8sa0JBQWtCLFVBQVU7QUFDL0QscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksZ0JBQWdCLHlCQUF5QixjQUFjLHFCQUFxQixLQUFLLGNBQWMsb0JBQW9CO0FBRXZILGdCQUFJLE9BQU8sa0JBQWtCLFlBQVk7QUFDdkMscUJBQU87QUFBQSxZQUNUO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBTUEsY0FBSSxnQkFBZ0I7QUFDcEIsY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSTtBQUVKLG1CQUFTLGNBQWM7QUFBQSxVQUFDO0FBRXhCLHNCQUFZLHFCQUFxQjtBQUNqQyxtQkFBUyxjQUFjO0FBQ3JCO0FBQ0Usa0JBQUksa0JBQWtCLEdBQUc7QUFFdkIsMEJBQVUsUUFBUTtBQUNsQiwyQkFBVyxRQUFRO0FBQ25CLDJCQUFXLFFBQVE7QUFDbkIsNEJBQVksUUFBUTtBQUNwQiw0QkFBWSxRQUFRO0FBQ3BCLHFDQUFxQixRQUFRO0FBQzdCLCtCQUFlLFFBQVE7QUFFdkIsb0JBQUksUUFBUTtBQUFBLGtCQUNWLGNBQWM7QUFBQSxrQkFDZCxZQUFZO0FBQUEsa0JBQ1osT0FBTztBQUFBLGtCQUNQLFVBQVU7QUFBQSxnQkFDWjtBQUVBLHVCQUFPLGlCQUFpQixTQUFTO0FBQUEsa0JBQy9CLE1BQU07QUFBQSxrQkFDTixLQUFLO0FBQUEsa0JBQ0wsTUFBTTtBQUFBLGtCQUNOLE9BQU87QUFBQSxrQkFDUCxPQUFPO0FBQUEsa0JBQ1AsZ0JBQWdCO0FBQUEsa0JBQ2hCLFVBQVU7QUFBQSxnQkFDWixDQUFDO0FBQUEsY0FFSDtBQUVBO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxlQUFlO0FBQ3RCO0FBQ0U7QUFFQSxrQkFBSSxrQkFBa0IsR0FBRztBQUV2QixvQkFBSSxRQUFRO0FBQUEsa0JBQ1YsY0FBYztBQUFBLGtCQUNkLFlBQVk7QUFBQSxrQkFDWixVQUFVO0FBQUEsZ0JBQ1o7QUFFQSx1QkFBTyxpQkFBaUIsU0FBUztBQUFBLGtCQUMvQixLQUFLLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFBQSxvQkFDdEIsT0FBTztBQUFBLGtCQUNULENBQUM7QUFBQSxrQkFDRCxNQUFNLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFBQSxvQkFDdkIsT0FBTztBQUFBLGtCQUNULENBQUM7QUFBQSxrQkFDRCxNQUFNLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFBQSxvQkFDdkIsT0FBTztBQUFBLGtCQUNULENBQUM7QUFBQSxrQkFDRCxPQUFPLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFBQSxvQkFDeEIsT0FBTztBQUFBLGtCQUNULENBQUM7QUFBQSxrQkFDRCxPQUFPLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFBQSxvQkFDeEIsT0FBTztBQUFBLGtCQUNULENBQUM7QUFBQSxrQkFDRCxnQkFBZ0IsUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUNqQyxPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELFVBQVUsUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUMzQixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGdCQUNILENBQUM7QUFBQSxjQUVIO0FBRUEsa0JBQUksZ0JBQWdCLEdBQUc7QUFDckIsc0JBQU0sOEVBQW1GO0FBQUEsY0FDM0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLGNBQUkseUJBQXlCLHFCQUFxQjtBQUNsRCxjQUFJTDtBQUNKLG1CQUFTLDhCQUE4QixNQUFNLFFBQVEsU0FBUztBQUM1RDtBQUNFLGtCQUFJQSxZQUFXLFFBQVc7QUFFeEIsb0JBQUk7QUFDRix3QkFBTSxNQUFNO0FBQUEsZ0JBQ2QsU0FBUyxHQUFHO0FBQ1Ysc0JBQUlNLFNBQVEsRUFBRSxNQUFNLEtBQUssRUFBRSxNQUFNLGNBQWM7QUFDL0Msa0JBQUFOLFVBQVNNLFVBQVNBLE9BQU0sQ0FBQyxLQUFLO0FBQUEsZ0JBQ2hDO0FBQUEsY0FDRjtBQUdBLHFCQUFPLE9BQU9OLFVBQVM7QUFBQSxZQUN6QjtBQUFBLFVBQ0Y7QUFDQSxjQUFJLFVBQVU7QUFDZCxjQUFJO0FBRUo7QUFDRSxnQkFBSSxrQkFBa0IsT0FBTyxZQUFZLGFBQWEsVUFBVTtBQUNoRSxrQ0FBc0IsSUFBSSxnQkFBZ0I7QUFBQSxVQUM1QztBQUVBLG1CQUFTLDZCQUE2QixJQUFJLFdBQVc7QUFFbkQsZ0JBQUksQ0FBQyxNQUFNLFNBQVM7QUFDbEIscUJBQU87QUFBQSxZQUNUO0FBRUE7QUFDRSxrQkFBSSxRQUFRLG9CQUFvQixJQUFJLEVBQUU7QUFFdEMsa0JBQUksVUFBVSxRQUFXO0FBQ3ZCLHVCQUFPO0FBQUEsY0FDVDtBQUFBLFlBQ0Y7QUFFQSxnQkFBSTtBQUNKLHNCQUFVO0FBQ1YsZ0JBQUksNEJBQTRCLE1BQU07QUFFdEMsa0JBQU0sb0JBQW9CO0FBQzFCLGdCQUFJO0FBRUo7QUFDRSxtQ0FBcUIsdUJBQXVCO0FBRzVDLHFDQUF1QixVQUFVO0FBQ2pDLDBCQUFZO0FBQUEsWUFDZDtBQUVBLGdCQUFJO0FBRUYsa0JBQUksV0FBVztBQUViLG9CQUFJLE9BQU8sV0FBWTtBQUNyQix3QkFBTSxNQUFNO0FBQUEsZ0JBQ2Q7QUFHQSx1QkFBTyxlQUFlLEtBQUssV0FBVyxTQUFTO0FBQUEsa0JBQzdDLEtBQUssV0FBWTtBQUdmLDBCQUFNLE1BQU07QUFBQSxrQkFDZDtBQUFBLGdCQUNGLENBQUM7QUFFRCxvQkFBSSxPQUFPLFlBQVksWUFBWSxRQUFRLFdBQVc7QUFHcEQsc0JBQUk7QUFDRiw0QkFBUSxVQUFVLE1BQU0sQ0FBQyxDQUFDO0FBQUEsa0JBQzVCLFNBQVMsR0FBRztBQUNWLDhCQUFVO0FBQUEsa0JBQ1o7QUFFQSwwQkFBUSxVQUFVLElBQUksQ0FBQyxHQUFHLElBQUk7QUFBQSxnQkFDaEMsT0FBTztBQUNMLHNCQUFJO0FBQ0YseUJBQUssS0FBSztBQUFBLGtCQUNaLFNBQVMsR0FBRztBQUNWLDhCQUFVO0FBQUEsa0JBQ1o7QUFFQSxxQkFBRyxLQUFLLEtBQUssU0FBUztBQUFBLGdCQUN4QjtBQUFBLGNBQ0YsT0FBTztBQUNMLG9CQUFJO0FBQ0Ysd0JBQU0sTUFBTTtBQUFBLGdCQUNkLFNBQVMsR0FBRztBQUNWLDRCQUFVO0FBQUEsZ0JBQ1o7QUFFQSxtQkFBRztBQUFBLGNBQ0w7QUFBQSxZQUNGLFNBQVMsUUFBUTtBQUVmLGtCQUFJLFVBQVUsV0FBVyxPQUFPLE9BQU8sVUFBVSxVQUFVO0FBR3pELG9CQUFJLGNBQWMsT0FBTyxNQUFNLE1BQU0sSUFBSTtBQUN6QyxvQkFBSSxlQUFlLFFBQVEsTUFBTSxNQUFNLElBQUk7QUFDM0Msb0JBQUksSUFBSSxZQUFZLFNBQVM7QUFDN0Isb0JBQUksSUFBSSxhQUFhLFNBQVM7QUFFOUIsdUJBQU8sS0FBSyxLQUFLLEtBQUssS0FBSyxZQUFZLENBQUMsTUFBTSxhQUFhLENBQUMsR0FBRztBQU83RDtBQUFBLGdCQUNGO0FBRUEsdUJBQU8sS0FBSyxLQUFLLEtBQUssR0FBRyxLQUFLLEtBQUs7QUFHakMsc0JBQUksWUFBWSxDQUFDLE1BQU0sYUFBYSxDQUFDLEdBQUc7QUFNdEMsd0JBQUksTUFBTSxLQUFLLE1BQU0sR0FBRztBQUN0Qix5QkFBRztBQUNEO0FBQ0E7QUFHQSw0QkFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLE1BQU0sYUFBYSxDQUFDLEdBQUc7QUFFL0MsOEJBQUksU0FBUyxPQUFPLFlBQVksQ0FBQyxFQUFFLFFBQVEsWUFBWSxNQUFNO0FBRTdEO0FBQ0UsZ0NBQUksT0FBTyxPQUFPLFlBQVk7QUFDNUIsa0RBQW9CLElBQUksSUFBSSxNQUFNO0FBQUEsNEJBQ3BDO0FBQUEsMEJBQ0Y7QUFHQSxpQ0FBTztBQUFBLHdCQUNUO0FBQUEsc0JBQ0YsU0FBUyxLQUFLLEtBQUssS0FBSztBQUFBLG9CQUMxQjtBQUVBO0FBQUEsa0JBQ0Y7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLFVBQUU7QUFDQSx3QkFBVTtBQUVWO0FBQ0UsdUNBQXVCLFVBQVU7QUFDakMsNkJBQWE7QUFBQSxjQUNmO0FBRUEsb0JBQU0sb0JBQW9CO0FBQUEsWUFDNUI7QUFHQSxnQkFBSSxPQUFPLEtBQUssR0FBRyxlQUFlLEdBQUcsT0FBTztBQUM1QyxnQkFBSSxpQkFBaUIsT0FBTyw4QkFBOEIsSUFBSSxJQUFJO0FBRWxFO0FBQ0Usa0JBQUksT0FBTyxPQUFPLFlBQVk7QUFDNUIsb0NBQW9CLElBQUksSUFBSSxjQUFjO0FBQUEsY0FDNUM7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVMsNEJBQTRCLE1BQU0sUUFBUSxTQUFTO0FBQzFEO0FBQ0UscUJBQU8sNkJBQTZCLE1BQU0sSUFBSTtBQUFBLFlBQ2hEO0FBQUEsVUFDRjtBQUNBLG1CQUFTLCtCQUErQixJQUFJLFFBQVEsU0FBUztBQUMzRDtBQUNFLHFCQUFPLDZCQUE2QixJQUFJLEtBQUs7QUFBQSxZQUMvQztBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxnQkFBZ0JPLGFBQVc7QUFDbEMsZ0JBQUlDLGFBQVlELFlBQVU7QUFDMUIsbUJBQU8sQ0FBQyxFQUFFQyxjQUFhQSxXQUFVO0FBQUEsVUFDbkM7QUFFQSxtQkFBUyxxQ0FBcUMsTUFBTSxRQUFRLFNBQVM7QUFFbkUsZ0JBQUksUUFBUSxNQUFNO0FBQ2hCLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLE9BQU8sU0FBUyxZQUFZO0FBQzlCO0FBQ0UsdUJBQU8sNkJBQTZCLE1BQU0sZ0JBQWdCLElBQUksQ0FBQztBQUFBLGNBQ2pFO0FBQUEsWUFDRjtBQUVBLGdCQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLHFCQUFPLDhCQUE4QixJQUFJO0FBQUEsWUFDM0M7QUFFQSxvQkFBUSxNQUFNO0FBQUEsY0FDWixLQUFLO0FBQ0gsdUJBQU8sOEJBQThCLFVBQVU7QUFBQSxjQUVqRCxLQUFLO0FBQ0gsdUJBQU8sOEJBQThCLGNBQWM7QUFBQSxZQUN2RDtBQUVBLGdCQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLHNCQUFRLEtBQUssVUFBVTtBQUFBLGdCQUNyQixLQUFLO0FBQ0gseUJBQU8sK0JBQStCLEtBQUssTUFBTTtBQUFBLGdCQUVuRCxLQUFLO0FBRUgseUJBQU8scUNBQXFDLEtBQUssTUFBTSxRQUFRLE9BQU87QUFBQSxnQkFFeEUsS0FBSztBQUNILHlCQUFPLCtCQUErQixLQUFLLE9BQU87QUFBQSxnQkFFcEQsS0FBSyxpQkFDSDtBQUNFLHNCQUFJLGdCQUFnQjtBQUNwQixzQkFBSSxVQUFVLGNBQWM7QUFDNUIsc0JBQUksT0FBTyxjQUFjO0FBRXpCLHNCQUFJO0FBRUYsMkJBQU8scUNBQXFDLEtBQUssT0FBTyxHQUFHLFFBQVEsT0FBTztBQUFBLGtCQUM1RSxTQUFTLEdBQUc7QUFBQSxrQkFBQztBQUFBLGdCQUNmO0FBQUEsY0FDSjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxtQkFBUyxjQUFjLE9BQU87QUFDNUIsZ0JBQUksUUFBUyxNQUFNLGNBQWMsTUFBTSxZQUFZLE9BQU87QUFDMUQsZ0JBQUksU0FBVSxNQUFNO0FBRXBCLG9CQUFRLE1BQU0sS0FBSztBQUFBLGNBQ2pCLEtBQUs7QUFDSCx1QkFBTyw4QkFBOEIsTUFBTSxJQUFJO0FBQUEsY0FFakQsS0FBSztBQUNILHVCQUFPLDhCQUE4QixNQUFNO0FBQUEsY0FFN0MsS0FBSztBQUNILHVCQUFPLDhCQUE4QixVQUFVO0FBQUEsY0FFakQsS0FBSztBQUNILHVCQUFPLDhCQUE4QixjQUFjO0FBQUEsY0FFckQsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILHVCQUFPLCtCQUErQixNQUFNLElBQUk7QUFBQSxjQUVsRCxLQUFLO0FBQ0gsdUJBQU8sK0JBQStCLE1BQU0sS0FBSyxNQUFNO0FBQUEsY0FFekQsS0FBSztBQUNILHVCQUFPLCtCQUErQixNQUFNLEtBQUssT0FBTztBQUFBLGNBRTFELEtBQUs7QUFDSCx1QkFBTyw0QkFBNEIsTUFBTSxJQUFJO0FBQUEsY0FFL0M7QUFDRSx1QkFBTztBQUFBLFlBQ1g7QUFBQSxVQUNGO0FBRUEsbUJBQVMsNEJBQTRCQyxpQkFBZ0I7QUFDbkQsZ0JBQUk7QUFDRixrQkFBSSxPQUFPO0FBQ1gsa0JBQUlKLFFBQU9JO0FBRVgsaUJBQUc7QUFDRCx3QkFBUSxjQUFjSixLQUFJO0FBQzFCLGdCQUFBQSxRQUFPQSxNQUFLO0FBQUEsY0FDZCxTQUFTQTtBQUVULHFCQUFPO0FBQUEsWUFDVCxTQUFTLEdBQUc7QUFDVixxQkFBTywrQkFBK0IsRUFBRSxVQUFVLE9BQU8sRUFBRTtBQUFBLFlBQzdEO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGVBQWUsV0FBVyxXQUFXLGFBQWE7QUFDekQsZ0JBQUksZUFBZSxVQUFVLGVBQWUsVUFBVSxRQUFRO0FBQzlELG1CQUFPLFVBQVUsZ0JBQWdCLGlCQUFpQixLQUFLLGNBQWMsTUFBTSxlQUFlLE1BQU07QUFBQSxVQUNsRztBQUVBLG1CQUFTLGVBQWUsTUFBTTtBQUM1QixtQkFBTyxLQUFLLGVBQWU7QUFBQSxVQUM3QjtBQUVBLG1CQUFTLGlCQUFpQixNQUFNO0FBQzlCLGdCQUFJLFFBQVEsTUFBTTtBQUVoQixxQkFBTztBQUFBLFlBQ1Q7QUFFQTtBQUNFLGtCQUFJLE9BQU8sS0FBSyxRQUFRLFVBQVU7QUFDaEMsc0JBQU0sMkdBQWdIO0FBQUEsY0FDeEg7QUFBQSxZQUNGO0FBRUEsZ0JBQUksT0FBTyxTQUFTLFlBQVk7QUFDOUIscUJBQU8sS0FBSyxlQUFlLEtBQUssUUFBUTtBQUFBLFlBQzFDO0FBRUEsZ0JBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIscUJBQU87QUFBQSxZQUNUO0FBRUEsb0JBQVEsTUFBTTtBQUFBLGNBQ1osS0FBSztBQUNILHVCQUFPO0FBQUEsY0FFVCxLQUFLO0FBQ0gsdUJBQU87QUFBQSxjQUVULEtBQUs7QUFDSCx1QkFBTztBQUFBLGNBRVQsS0FBSztBQUNILHVCQUFPO0FBQUEsY0FFVCxLQUFLO0FBQ0gsdUJBQU87QUFBQSxjQUVULEtBQUs7QUFDSCx1QkFBTztBQUFBLFlBQ1g7QUFFQSxnQkFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixzQkFBUSxLQUFLLFVBQVU7QUFBQSxnQkFDckIsS0FBSztBQUNILHNCQUFJLFVBQVU7QUFDZCx5QkFBTyxlQUFlLE9BQU8sSUFBSTtBQUFBLGdCQUVuQyxLQUFLO0FBQ0gsc0JBQUksV0FBVztBQUNmLHlCQUFPLGVBQWUsU0FBUyxRQUFRLElBQUk7QUFBQSxnQkFFN0MsS0FBSztBQUNILHlCQUFPLGVBQWUsTUFBTSxLQUFLLFFBQVEsWUFBWTtBQUFBLGdCQUV2RCxLQUFLO0FBQ0gseUJBQU8saUJBQWlCLEtBQUssSUFBSTtBQUFBLGdCQUVuQyxLQUFLO0FBQ0gseUJBQU8saUJBQWlCLEtBQUssT0FBTztBQUFBLGdCQUV0QyxLQUFLLGlCQUNIO0FBQ0Usc0JBQUksZ0JBQWdCO0FBQ3BCLHNCQUFJLFVBQVUsY0FBYztBQUM1QixzQkFBSSxPQUFPLGNBQWM7QUFFekIsc0JBQUk7QUFDRiwyQkFBTyxpQkFBaUIsS0FBSyxPQUFPLENBQUM7QUFBQSxrQkFDdkMsU0FBUyxHQUFHO0FBQ1YsMkJBQU87QUFBQSxrQkFDVDtBQUFBLGdCQUNGO0FBQUEsY0FDSjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLHlCQUF5QixxQkFBcUI7QUFDbEQsY0FBSSxVQUFVO0FBQ2QsY0FBSSxjQUFjO0FBQ2xCLG1CQUFTLHNDQUFzQztBQUM3QztBQUNFLGtCQUFJLFlBQVksTUFBTTtBQUNwQix1QkFBTztBQUFBLGNBQ1Q7QUFFQSxrQkFBSSxRQUFRLFFBQVE7QUFFcEIsa0JBQUksVUFBVSxRQUFRLE9BQU8sVUFBVSxhQUFhO0FBQ2xELHVCQUFPLGlCQUFpQixNQUFNLElBQUk7QUFBQSxjQUNwQztBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxtQkFBUyw0QkFBNEI7QUFDbkM7QUFDRSxrQkFBSSxZQUFZLE1BQU07QUFDcEIsdUJBQU87QUFBQSxjQUNUO0FBSUEscUJBQU8sNEJBQTRCLE9BQU87QUFBQSxZQUM1QztBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxvQkFBb0I7QUFDM0I7QUFDRSxxQ0FBdUIsa0JBQWtCO0FBQ3pDLHdCQUFVO0FBQ1YsNEJBQWM7QUFBQSxZQUNoQjtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxnQkFBZ0IsT0FBTztBQUM5QjtBQUNFLHFDQUF1QixrQkFBa0I7QUFDekMsd0JBQVU7QUFDViw0QkFBYztBQUFBLFlBQ2hCO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGVBQWUsV0FBVztBQUNqQztBQUNFLDRCQUFjO0FBQUEsWUFDaEI7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsaUJBQWlCO0FBQ3hCO0FBQ0UscUJBQU87QUFBQSxZQUNUO0FBQUEsVUFDRjtBQUtBLG1CQUFTSyxVQUFTWCxRQUFPO0FBQ3ZCLG1CQUFPLEtBQUtBO0FBQUEsVUFDZDtBQUNBLG1CQUFTLGlCQUFpQkEsUUFBTztBQUMvQixvQkFBUSxPQUFPQSxRQUFPO0FBQUEsY0FDcEIsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILHVCQUFPQTtBQUFBLGNBRVQ7QUFFRSx1QkFBTztBQUFBLFlBQ1g7QUFBQSxVQUNGO0FBRUEsY0FBSSxtQkFBbUI7QUFBQSxZQUNyQixRQUFRO0FBQUEsWUFDUixVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsWUFDUixPQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsVUFDVjtBQUNBLG1CQUFTLDBCQUEwQixTQUFTLE9BQU87QUFDakQ7QUFDRSxrQkFBSSxFQUFFLGlCQUFpQixNQUFNLElBQUksS0FBSyxNQUFNLFlBQVksTUFBTSxXQUFXLE1BQU0sWUFBWSxNQUFNLFlBQVksTUFBTSxTQUFTLE9BQU87QUFDakksc0JBQU0sbU5BQWtPO0FBQUEsY0FDMU87QUFFQSxrQkFBSSxFQUFFLE1BQU0sWUFBWSxNQUFNLFlBQVksTUFBTSxZQUFZLE1BQU0sV0FBVyxPQUFPO0FBQ2xGLHNCQUFNLHVOQUFzTztBQUFBLGNBQzlPO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxZQUFZLE1BQU07QUFDekIsZ0JBQUksT0FBTyxLQUFLO0FBQ2hCLGdCQUFJLFdBQVcsS0FBSztBQUNwQixtQkFBTyxZQUFZLFNBQVMsWUFBWSxNQUFNLFlBQVksU0FBUyxjQUFjLFNBQVM7QUFBQSxVQUM1RjtBQUVBLG1CQUFTLFdBQVdNLE9BQU07QUFDeEIsbUJBQU9BLE1BQUs7QUFBQSxVQUNkO0FBRUEsbUJBQVMsY0FBY0EsT0FBTTtBQUMzQixZQUFBQSxNQUFLLGdCQUFnQjtBQUFBLFVBQ3ZCO0FBRUEsbUJBQVMsaUJBQWlCQSxPQUFNO0FBQzlCLGdCQUFJTixTQUFRO0FBRVosZ0JBQUksQ0FBQ00sT0FBTTtBQUNULHFCQUFPTjtBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxZQUFZTSxLQUFJLEdBQUc7QUFDckIsY0FBQU4sU0FBUU0sTUFBSyxVQUFVLFNBQVM7QUFBQSxZQUNsQyxPQUFPO0FBQ0wsY0FBQU4sU0FBUU0sTUFBSztBQUFBLFlBQ2Y7QUFFQSxtQkFBT047QUFBQSxVQUNUO0FBRUEsbUJBQVMsaUJBQWlCTSxPQUFNO0FBQzlCLGdCQUFJLGFBQWEsWUFBWUEsS0FBSSxJQUFJLFlBQVk7QUFDakQsZ0JBQUksYUFBYSxPQUFPLHlCQUF5QkEsTUFBSyxZQUFZLFdBQVcsVUFBVTtBQUN2RixnQkFBSSxlQUFlLEtBQUtBLE1BQUssVUFBVTtBQUt2QyxnQkFBSUEsTUFBSyxlQUFlLFVBQVUsS0FBSyxPQUFPLGVBQWUsZUFBZSxPQUFPLFdBQVcsUUFBUSxjQUFjLE9BQU8sV0FBVyxRQUFRLFlBQVk7QUFDeEo7QUFBQSxZQUNGO0FBRUEsZ0JBQUlNLE9BQU0sV0FBVyxLQUNqQkMsT0FBTSxXQUFXO0FBQ3JCLG1CQUFPLGVBQWVQLE9BQU0sWUFBWTtBQUFBLGNBQ3RDLGNBQWM7QUFBQSxjQUNkLEtBQUssV0FBWTtBQUNmLHVCQUFPTSxLQUFJLEtBQUssSUFBSTtBQUFBLGNBQ3RCO0FBQUEsY0FDQSxLQUFLLFNBQVVaLFFBQU87QUFDcEIsK0JBQWUsS0FBS0E7QUFDcEIsZ0JBQUFhLEtBQUksS0FBSyxNQUFNYixNQUFLO0FBQUEsY0FDdEI7QUFBQSxZQUNGLENBQUM7QUFLRCxtQkFBTyxlQUFlTSxPQUFNLFlBQVk7QUFBQSxjQUN0QyxZQUFZLFdBQVc7QUFBQSxZQUN6QixDQUFDO0FBQ0QsZ0JBQUksVUFBVTtBQUFBLGNBQ1osVUFBVSxXQUFZO0FBQ3BCLHVCQUFPO0FBQUEsY0FDVDtBQUFBLGNBQ0EsVUFBVSxTQUFVTixRQUFPO0FBQ3pCLCtCQUFlLEtBQUtBO0FBQUEsY0FDdEI7QUFBQSxjQUNBLGNBQWMsV0FBWTtBQUN4Qiw4QkFBY00sS0FBSTtBQUNsQix1QkFBT0EsTUFBSyxVQUFVO0FBQUEsY0FDeEI7QUFBQSxZQUNGO0FBQ0EsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVMsTUFBTUEsT0FBTTtBQUNuQixnQkFBSSxXQUFXQSxLQUFJLEdBQUc7QUFDcEI7QUFBQSxZQUNGO0FBR0EsWUFBQUEsTUFBSyxnQkFBZ0IsaUJBQWlCQSxLQUFJO0FBQUEsVUFDNUM7QUFDQSxtQkFBUyxxQkFBcUJBLE9BQU07QUFDbEMsZ0JBQUksQ0FBQ0EsT0FBTTtBQUNULHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLFVBQVUsV0FBV0EsS0FBSTtBQUc3QixnQkFBSSxDQUFDLFNBQVM7QUFDWixxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxZQUFZLFFBQVEsU0FBUztBQUNqQyxnQkFBSSxZQUFZLGlCQUFpQkEsS0FBSTtBQUVyQyxnQkFBSSxjQUFjLFdBQVc7QUFDM0Isc0JBQVEsU0FBUyxTQUFTO0FBQzFCLHFCQUFPO0FBQUEsWUFDVDtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTUSxrQkFBaUIsS0FBSztBQUM3QixrQkFBTSxRQUFRLE9BQU8sYUFBYSxjQUFjLFdBQVc7QUFFM0QsZ0JBQUksT0FBTyxRQUFRLGFBQWE7QUFDOUIscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUk7QUFDRixxQkFBTyxJQUFJLGlCQUFpQixJQUFJO0FBQUEsWUFDbEMsU0FBUyxHQUFHO0FBQ1YscUJBQU8sSUFBSTtBQUFBLFlBQ2I7QUFBQSxVQUNGO0FBRUEsY0FBSSwyQkFBMkI7QUFDL0IsY0FBSSwrQkFBK0I7QUFDbkMsY0FBSSxrQ0FBa0M7QUFDdEMsY0FBSSxrQ0FBa0M7QUFFdEMsbUJBQVMsYUFBYSxPQUFPO0FBQzNCLGdCQUFJLGNBQWMsTUFBTSxTQUFTLGNBQWMsTUFBTSxTQUFTO0FBQzlELG1CQUFPLGNBQWMsTUFBTSxXQUFXLE9BQU8sTUFBTSxTQUFTO0FBQUEsVUFDOUQ7QUFtQkEsbUJBQVMsYUFBYSxTQUFTLE9BQU87QUFDcEMsZ0JBQUlSLFFBQU87QUFDWCxnQkFBSSxVQUFVLE1BQU07QUFFcEIsZ0JBQUksWUFBWSxRQUFRLENBQUMsR0FBRyxPQUFPO0FBQUEsY0FDakMsZ0JBQWdCO0FBQUEsY0FDaEIsY0FBYztBQUFBLGNBQ2QsT0FBTztBQUFBLGNBQ1AsU0FBUyxXQUFXLE9BQU8sVUFBVUEsTUFBSyxjQUFjO0FBQUEsWUFDMUQsQ0FBQztBQUVELG1CQUFPO0FBQUEsVUFDVDtBQUNBLG1CQUFTLGlCQUFpQixTQUFTLE9BQU87QUFDeEM7QUFDRSx3Q0FBMEIsU0FBUyxLQUFLO0FBRXhDLGtCQUFJLE1BQU0sWUFBWSxVQUFhLE1BQU0sbUJBQW1CLFVBQWEsQ0FBQyw4QkFBOEI7QUFDdEcsc0JBQU0sOFdBQXVZLG9DQUFvQyxLQUFLLGVBQWUsTUFBTSxJQUFJO0FBRS9jLCtDQUErQjtBQUFBLGNBQ2pDO0FBRUEsa0JBQUksTUFBTSxVQUFVLFVBQWEsTUFBTSxpQkFBaUIsVUFBYSxDQUFDLDBCQUEwQjtBQUM5RixzQkFBTSxzV0FBK1gsb0NBQW9DLEtBQUssZUFBZSxNQUFNLElBQUk7QUFFdmMsMkNBQTJCO0FBQUEsY0FDN0I7QUFBQSxZQUNGO0FBRUEsZ0JBQUlBLFFBQU87QUFDWCxnQkFBSSxlQUFlLE1BQU0sZ0JBQWdCLE9BQU8sS0FBSyxNQUFNO0FBQzNELFlBQUFBLE1BQUssZ0JBQWdCO0FBQUEsY0FDbkIsZ0JBQWdCLE1BQU0sV0FBVyxPQUFPLE1BQU0sVUFBVSxNQUFNO0FBQUEsY0FDOUQsY0FBYyxpQkFBaUIsTUFBTSxTQUFTLE9BQU8sTUFBTSxRQUFRLFlBQVk7QUFBQSxjQUMvRSxZQUFZLGFBQWEsS0FBSztBQUFBLFlBQ2hDO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGNBQWMsU0FBUyxPQUFPO0FBQ3JDLGdCQUFJQSxRQUFPO0FBQ1gsZ0JBQUksVUFBVSxNQUFNO0FBRXBCLGdCQUFJLFdBQVcsTUFBTTtBQUNuQixrQ0FBb0JBLE9BQU0sV0FBVyxTQUFTLEtBQUs7QUFBQSxZQUNyRDtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxjQUFjLFNBQVMsT0FBTztBQUNyQyxnQkFBSUEsUUFBTztBQUVYO0FBQ0Usa0JBQUksYUFBYSxhQUFhLEtBQUs7QUFFbkMsa0JBQUksQ0FBQ0EsTUFBSyxjQUFjLGNBQWMsY0FBYyxDQUFDLGlDQUFpQztBQUNwRixzQkFBTSxzVUFBMFY7QUFFaFcsa0RBQWtDO0FBQUEsY0FDcEM7QUFFQSxrQkFBSUEsTUFBSyxjQUFjLGNBQWMsQ0FBQyxjQUFjLENBQUMsaUNBQWlDO0FBQ3BGLHNCQUFNLCtUQUFtVjtBQUV6VixrREFBa0M7QUFBQSxjQUNwQztBQUFBLFlBQ0Y7QUFFQSwwQkFBYyxTQUFTLEtBQUs7QUFDNUIsZ0JBQUlOLFNBQVEsaUJBQWlCLE1BQU0sS0FBSztBQUN4QyxnQkFBSSxPQUFPLE1BQU07QUFFakIsZ0JBQUlBLFVBQVMsTUFBTTtBQUNqQixrQkFBSSxTQUFTLFVBQVU7QUFDckIsb0JBQUlBLFdBQVUsS0FBS00sTUFBSyxVQUFVO0FBQUE7QUFBQSxnQkFFbENBLE1BQUssU0FBU04sUUFBTztBQUNuQixrQkFBQU0sTUFBSyxRQUFRSyxVQUFTWCxNQUFLO0FBQUEsZ0JBQzdCO0FBQUEsY0FDRixXQUFXTSxNQUFLLFVBQVVLLFVBQVNYLE1BQUssR0FBRztBQUN6QyxnQkFBQU0sTUFBSyxRQUFRSyxVQUFTWCxNQUFLO0FBQUEsY0FDN0I7QUFBQSxZQUNGLFdBQVcsU0FBUyxZQUFZLFNBQVMsU0FBUztBQUdoRCxjQUFBTSxNQUFLLGdCQUFnQixPQUFPO0FBQzVCO0FBQUEsWUFDRjtBQUVBO0FBTUUsa0JBQUksTUFBTSxlQUFlLE9BQU8sR0FBRztBQUNqQyxnQ0FBZ0JBLE9BQU0sTUFBTSxNQUFNTixNQUFLO0FBQUEsY0FDekMsV0FBVyxNQUFNLGVBQWUsY0FBYyxHQUFHO0FBQy9DLGdDQUFnQk0sT0FBTSxNQUFNLE1BQU0saUJBQWlCLE1BQU0sWUFBWSxDQUFDO0FBQUEsY0FDeEU7QUFBQSxZQUNGO0FBRUE7QUFHRSxrQkFBSSxNQUFNLFdBQVcsUUFBUSxNQUFNLGtCQUFrQixNQUFNO0FBQ3pELGdCQUFBQSxNQUFLLGlCQUFpQixDQUFDLENBQUMsTUFBTTtBQUFBLGNBQ2hDO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxpQkFBaUIsU0FBUyxPQUFPUyxjQUFhO0FBQ3JELGdCQUFJVCxRQUFPO0FBR1gsZ0JBQUksTUFBTSxlQUFlLE9BQU8sS0FBSyxNQUFNLGVBQWUsY0FBYyxHQUFHO0FBQ3pFLGtCQUFJLE9BQU8sTUFBTTtBQUNqQixrQkFBSSxXQUFXLFNBQVMsWUFBWSxTQUFTO0FBRzdDLGtCQUFJLGFBQWEsTUFBTSxVQUFVLFVBQWEsTUFBTSxVQUFVLE9BQU87QUFDbkU7QUFBQSxjQUNGO0FBRUEsa0JBQUksZUFBZUssVUFBU0wsTUFBSyxjQUFjLFlBQVk7QUFHM0Qsa0JBQUksQ0FBQ1MsY0FBYTtBQUNoQjtBQU9FLHNCQUFJLGlCQUFpQlQsTUFBSyxPQUFPO0FBQy9CLG9CQUFBQSxNQUFLLFFBQVE7QUFBQSxrQkFDZjtBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUVBO0FBSUUsZ0JBQUFBLE1BQUssZUFBZTtBQUFBLGNBQ3RCO0FBQUEsWUFDRjtBQU9BLGdCQUFJLE9BQU9BLE1BQUs7QUFFaEIsZ0JBQUksU0FBUyxJQUFJO0FBQ2YsY0FBQUEsTUFBSyxPQUFPO0FBQUEsWUFDZDtBQUVBO0FBT0UsY0FBQUEsTUFBSyxpQkFBaUIsQ0FBQ0EsTUFBSztBQUM1QixjQUFBQSxNQUFLLGlCQUFpQixDQUFDLENBQUNBLE1BQUssY0FBYztBQUFBLFlBQzdDO0FBRUEsZ0JBQUksU0FBUyxJQUFJO0FBQ2YsY0FBQUEsTUFBSyxPQUFPO0FBQUEsWUFDZDtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyx1QkFBdUIsU0FBUyxPQUFPO0FBQzlDLGdCQUFJQSxRQUFPO0FBQ1gsMEJBQWNBLE9BQU0sS0FBSztBQUN6QiwrQkFBbUJBLE9BQU0sS0FBSztBQUFBLFVBQ2hDO0FBRUEsbUJBQVMsbUJBQW1CLFVBQVUsT0FBTztBQUMzQyxnQkFBSSxPQUFPLE1BQU07QUFFakIsZ0JBQUksTUFBTSxTQUFTLFdBQVcsUUFBUSxNQUFNO0FBQzFDLGtCQUFJLFlBQVk7QUFFaEIscUJBQU8sVUFBVSxZQUFZO0FBQzNCLDRCQUFZLFVBQVU7QUFBQSxjQUN4QjtBQVNBLGtCQUFJLFFBQVEsVUFBVSxpQkFBaUIsZ0JBQWdCLEtBQUssVUFBVSxLQUFLLElBQUksSUFBSSxpQkFBaUI7QUFFcEcsdUJBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFDckMsb0JBQUksWUFBWSxNQUFNLENBQUM7QUFFdkIsb0JBQUksY0FBYyxZQUFZLFVBQVUsU0FBUyxTQUFTLE1BQU07QUFDOUQ7QUFBQSxnQkFDRjtBQU1BLG9CQUFJLGFBQWEsNkJBQTZCLFNBQVM7QUFFdkQsb0JBQUksQ0FBQyxZQUFZO0FBQ2Y7QUFDRSwwQkFBTSxNQUFPLCtGQUFnRztBQUFBLGtCQUMvRztBQUFBLGdCQUNGO0FBSUEscUNBQXFCLFNBQVM7QUFJOUIsOEJBQWMsV0FBVyxVQUFVO0FBQUEsY0FDckM7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQVVBLG1CQUFTLGdCQUFnQkEsT0FBTSxNQUFNTixRQUFPO0FBQzFDO0FBQUE7QUFBQSxjQUNBLFNBQVMsWUFBWWMsa0JBQWlCUixNQUFLLGFBQWEsTUFBTUE7QUFBQSxjQUFNO0FBQ2xFLGtCQUFJTixVQUFTLE1BQU07QUFDakIsZ0JBQUFNLE1BQUssZUFBZUssVUFBU0wsTUFBSyxjQUFjLFlBQVk7QUFBQSxjQUM5RCxXQUFXQSxNQUFLLGlCQUFpQkssVUFBU1gsTUFBSyxHQUFHO0FBQ2hELGdCQUFBTSxNQUFLLGVBQWVLLFVBQVNYLE1BQUs7QUFBQSxjQUNwQztBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSSw2QkFBNkI7QUFDakMsY0FBSSxzQkFBc0I7QUFFMUIsbUJBQVMsZ0JBQWdCLFVBQVU7QUFDakMsZ0JBQUksVUFBVTtBQU1kLFlBQUFKLFNBQU0sU0FBUyxRQUFRLFVBQVUsU0FBVSxPQUFPO0FBQ2hELGtCQUFJLFNBQVMsTUFBTTtBQUNqQjtBQUFBLGNBQ0Y7QUFFQSx5QkFBVztBQUFBLFlBR2IsQ0FBQztBQUNELG1CQUFPO0FBQUEsVUFDVDtBQU1BLG1CQUFTb0IsZUFBYyxTQUFTLE9BQU87QUFDckM7QUFLRSxrQkFBSSxPQUFPLE1BQU0sYUFBYSxZQUFZLE1BQU0sYUFBYSxNQUFNO0FBQ2pFLGdCQUFBcEIsU0FBTSxTQUFTLFFBQVEsTUFBTSxVQUFVLFNBQVUsT0FBTztBQUN0RCxzQkFBSSxTQUFTLE1BQU07QUFDakI7QUFBQSxrQkFDRjtBQUVBLHNCQUFJLE9BQU8sVUFBVSxZQUFZLE9BQU8sVUFBVSxVQUFVO0FBQzFEO0FBQUEsa0JBQ0Y7QUFFQSxzQkFBSSxPQUFPLE1BQU0sU0FBUyxVQUFVO0FBQ2xDO0FBQUEsa0JBQ0Y7QUFFQSxzQkFBSSxDQUFDLHFCQUFxQjtBQUN4QiwwQ0FBc0I7QUFFdEIsMEJBQU0sOERBQThEO0FBQUEsa0JBQ3RFO0FBQUEsZ0JBQ0YsQ0FBQztBQUFBLGNBQ0g7QUFHQSxrQkFBSSxNQUFNLFlBQVksUUFBUSxDQUFDLDRCQUE0QjtBQUN6RCxzQkFBTSxnR0FBcUc7QUFFM0csNkNBQTZCO0FBQUEsY0FDL0I7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUNBLG1CQUFTLG1CQUFtQixTQUFTLE9BQU87QUFFMUMsZ0JBQUksTUFBTSxTQUFTLE1BQU07QUFDdkIsc0JBQVEsYUFBYSxTQUFTZSxVQUFTLGlCQUFpQixNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQUEsWUFDdkU7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsZUFBZSxTQUFTLE9BQU87QUFDdEMsZ0JBQUksWUFBWSxRQUFRO0FBQUEsY0FDdEIsVUFBVTtBQUFBLFlBQ1osR0FBRyxLQUFLO0FBRVIsZ0JBQUksVUFBVSxnQkFBZ0IsTUFBTSxRQUFRO0FBRTVDLGdCQUFJLFNBQVM7QUFDWCx3QkFBVSxXQUFXO0FBQUEsWUFDdkI7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJO0FBRUo7QUFDRSx5Q0FBNkI7QUFBQSxVQUMvQjtBQUVBLG1CQUFTLDhCQUE4QjtBQUNyQyxnQkFBSSxZQUFZLG9DQUFvQztBQUVwRCxnQkFBSSxXQUFXO0FBQ2IscUJBQU8scUNBQXFDLFlBQVk7QUFBQSxZQUMxRDtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUksaUJBQWlCLENBQUMsU0FBUyxjQUFjO0FBSzdDLG1CQUFTLHFCQUFxQixPQUFPO0FBQ25DO0FBQ0Usd0NBQTBCLFVBQVUsS0FBSztBQUV6Qyx1QkFBUyxJQUFJLEdBQUcsSUFBSSxlQUFlLFFBQVEsS0FBSztBQUM5QyxvQkFBSSxXQUFXLGVBQWUsQ0FBQztBQUUvQixvQkFBSSxNQUFNLFFBQVEsS0FBSyxNQUFNO0FBQzNCO0FBQUEsZ0JBQ0Y7QUFFQSxvQkFBSU0sV0FBVSxNQUFNLFFBQVEsTUFBTSxRQUFRLENBQUM7QUFFM0Msb0JBQUksTUFBTSxZQUFZLENBQUNBLFVBQVM7QUFDOUIsd0JBQU0sZ0ZBQXFGLFVBQVUsNEJBQTRCLENBQUM7QUFBQSxnQkFDcEksV0FBVyxDQUFDLE1BQU0sWUFBWUEsVUFBUztBQUNyQyx3QkFBTSx1RkFBNEYsVUFBVSw0QkFBNEIsQ0FBQztBQUFBLGdCQUMzSTtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGNBQWNYLE9BQU0sVUFBVSxXQUFXLG9CQUFvQjtBQUNwRSxnQkFBSVksV0FBVVosTUFBSztBQUVuQixnQkFBSSxVQUFVO0FBQ1osa0JBQUksaUJBQWlCO0FBQ3JCLGtCQUFJLGdCQUFnQixDQUFDO0FBRXJCLHVCQUFTLElBQUksR0FBRyxJQUFJLGVBQWUsUUFBUSxLQUFLO0FBRTlDLDhCQUFjLE1BQU0sZUFBZSxDQUFDLENBQUMsSUFBSTtBQUFBLGNBQzNDO0FBRUEsdUJBQVMsS0FBSyxHQUFHLEtBQUtZLFNBQVEsUUFBUSxNQUFNO0FBQzFDLG9CQUFJLFdBQVcsY0FBYyxlQUFlLE1BQU1BLFNBQVEsRUFBRSxFQUFFLEtBQUs7QUFFbkUsb0JBQUlBLFNBQVEsRUFBRSxFQUFFLGFBQWEsVUFBVTtBQUNyQyxrQkFBQUEsU0FBUSxFQUFFLEVBQUUsV0FBVztBQUFBLGdCQUN6QjtBQUVBLG9CQUFJLFlBQVksb0JBQW9CO0FBQ2xDLGtCQUFBQSxTQUFRLEVBQUUsRUFBRSxrQkFBa0I7QUFBQSxnQkFDaEM7QUFBQSxjQUNGO0FBQUEsWUFDRixPQUFPO0FBR0wsa0JBQUksaUJBQWlCUCxVQUFTLGlCQUFpQixTQUFTLENBQUM7QUFFekQsa0JBQUksa0JBQWtCO0FBRXRCLHVCQUFTLE1BQU0sR0FBRyxNQUFNTyxTQUFRLFFBQVEsT0FBTztBQUM3QyxvQkFBSUEsU0FBUSxHQUFHLEVBQUUsVUFBVSxnQkFBZ0I7QUFDekMsa0JBQUFBLFNBQVEsR0FBRyxFQUFFLFdBQVc7QUFFeEIsc0JBQUksb0JBQW9CO0FBQ3RCLG9CQUFBQSxTQUFRLEdBQUcsRUFBRSxrQkFBa0I7QUFBQSxrQkFDakM7QUFFQTtBQUFBLGdCQUNGO0FBRUEsb0JBQUksb0JBQW9CLFFBQVEsQ0FBQ0EsU0FBUSxHQUFHLEVBQUUsVUFBVTtBQUN0RCxvQ0FBa0JBLFNBQVEsR0FBRztBQUFBLGdCQUMvQjtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxvQkFBb0IsTUFBTTtBQUM1QixnQ0FBZ0IsV0FBVztBQUFBLGNBQzdCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFrQkEsbUJBQVMsZUFBZSxTQUFTLE9BQU87QUFDdEMsbUJBQU8sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLGNBQ3hCLE9BQU87QUFBQSxZQUNULENBQUM7QUFBQSxVQUNIO0FBQ0EsbUJBQVMsbUJBQW1CLFNBQVMsT0FBTztBQUMxQyxnQkFBSVosUUFBTztBQUVYO0FBQ0UsbUNBQXFCLEtBQUs7QUFBQSxZQUM1QjtBQUVBLFlBQUFBLE1BQUssZ0JBQWdCO0FBQUEsY0FDbkIsYUFBYSxDQUFDLENBQUMsTUFBTTtBQUFBLFlBQ3ZCO0FBRUE7QUFDRSxrQkFBSSxNQUFNLFVBQVUsVUFBYSxNQUFNLGlCQUFpQixVQUFhLENBQUMsNEJBQTRCO0FBQ2hHLHNCQUFNLDhSQUFrVDtBQUV4VCw2Q0FBNkI7QUFBQSxjQUMvQjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsbUJBQW1CLFNBQVMsT0FBTztBQUMxQyxnQkFBSUEsUUFBTztBQUNYLFlBQUFBLE1BQUssV0FBVyxDQUFDLENBQUMsTUFBTTtBQUN4QixnQkFBSU4sU0FBUSxNQUFNO0FBRWxCLGdCQUFJQSxVQUFTLE1BQU07QUFDakIsNEJBQWNNLE9BQU0sQ0FBQyxDQUFDLE1BQU0sVUFBVU4sUUFBTyxLQUFLO0FBQUEsWUFDcEQsV0FBVyxNQUFNLGdCQUFnQixNQUFNO0FBQ3JDLDRCQUFjTSxPQUFNLENBQUMsQ0FBQyxNQUFNLFVBQVUsTUFBTSxjQUFjLElBQUk7QUFBQSxZQUNoRTtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxrQkFBa0IsU0FBUyxPQUFPO0FBQ3pDLGdCQUFJQSxRQUFPO0FBQ1gsZ0JBQUksY0FBY0EsTUFBSyxjQUFjO0FBQ3JDLFlBQUFBLE1BQUssY0FBYyxjQUFjLENBQUMsQ0FBQyxNQUFNO0FBQ3pDLGdCQUFJTixTQUFRLE1BQU07QUFFbEIsZ0JBQUlBLFVBQVMsTUFBTTtBQUNqQiw0QkFBY00sT0FBTSxDQUFDLENBQUMsTUFBTSxVQUFVTixRQUFPLEtBQUs7QUFBQSxZQUNwRCxXQUFXLGdCQUFnQixDQUFDLENBQUMsTUFBTSxVQUFVO0FBRTNDLGtCQUFJLE1BQU0sZ0JBQWdCLE1BQU07QUFDOUIsOEJBQWNNLE9BQU0sQ0FBQyxDQUFDLE1BQU0sVUFBVSxNQUFNLGNBQWMsSUFBSTtBQUFBLGNBQ2hFLE9BQU87QUFFTCw4QkFBY0EsT0FBTSxDQUFDLENBQUMsTUFBTSxVQUFVLE1BQU0sV0FBVyxDQUFDLElBQUksSUFBSSxLQUFLO0FBQUEsY0FDdkU7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUNBLG1CQUFTLHlCQUF5QixTQUFTLE9BQU87QUFDaEQsZ0JBQUlBLFFBQU87QUFDWCxnQkFBSU4sU0FBUSxNQUFNO0FBRWxCLGdCQUFJQSxVQUFTLE1BQU07QUFDakIsNEJBQWNNLE9BQU0sQ0FBQyxDQUFDLE1BQU0sVUFBVU4sUUFBTyxLQUFLO0FBQUEsWUFDcEQ7QUFBQSxVQUNGO0FBRUEsY0FBSSx1QkFBdUI7QUFpQjNCLG1CQUFTLGVBQWUsU0FBUyxPQUFPO0FBQ3RDLGdCQUFJTSxRQUFPO0FBRVgsZ0JBQUksRUFBRSxNQUFNLDJCQUEyQixPQUFPO0FBQzVDO0FBQ0Usc0JBQU0sTUFBTyw4REFBK0Q7QUFBQSxjQUM5RTtBQUFBLFlBQ0Y7QUFRQSxnQkFBSSxZQUFZLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFBQSxjQUNqQyxPQUFPO0FBQUEsY0FDUCxjQUFjO0FBQUEsY0FDZCxVQUFVSyxVQUFTTCxNQUFLLGNBQWMsWUFBWTtBQUFBLFlBQ3BELENBQUM7QUFFRCxtQkFBTztBQUFBLFVBQ1Q7QUFDQSxtQkFBUyxtQkFBbUIsU0FBUyxPQUFPO0FBQzFDLGdCQUFJQSxRQUFPO0FBRVg7QUFDRSx3Q0FBMEIsWUFBWSxLQUFLO0FBRTNDLGtCQUFJLE1BQU0sVUFBVSxVQUFhLE1BQU0saUJBQWlCLFVBQWEsQ0FBQyxzQkFBc0I7QUFDMUYsc0JBQU0sMlZBQW9YLG9DQUFvQyxLQUFLLGFBQWE7QUFFaGIsdUNBQXVCO0FBQUEsY0FDekI7QUFBQSxZQUNGO0FBRUEsZ0JBQUksZUFBZSxNQUFNO0FBRXpCLGdCQUFJLGdCQUFnQixNQUFNO0FBQ3hCLGtCQUFJLFdBQVcsTUFBTSxVQUNqQixlQUFlLE1BQU07QUFFekIsa0JBQUksWUFBWSxNQUFNO0FBQ3BCO0FBQ0Usd0JBQU0sb0ZBQXlGO0FBQUEsZ0JBQ2pHO0FBRUE7QUFDRSxzQkFBSSxFQUFFLGdCQUFnQixPQUFPO0FBQzNCO0FBQ0UsNEJBQU0sTUFBTyxxRUFBc0U7QUFBQSxvQkFDckY7QUFBQSxrQkFDRjtBQUVBLHNCQUFJLE1BQU0sUUFBUSxRQUFRLEdBQUc7QUFDM0Isd0JBQUksRUFBRSxTQUFTLFVBQVUsSUFBSTtBQUMzQjtBQUNFLDhCQUFNLE1BQU8sNkNBQThDO0FBQUEsc0JBQzdEO0FBQUEsb0JBQ0Y7QUFFQSwrQkFBVyxTQUFTLENBQUM7QUFBQSxrQkFDdkI7QUFFQSxpQ0FBZTtBQUFBLGdCQUNqQjtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxnQkFBZ0IsTUFBTTtBQUN4QiwrQkFBZTtBQUFBLGNBQ2pCO0FBRUEsNkJBQWU7QUFBQSxZQUNqQjtBQUVBLFlBQUFBLE1BQUssZ0JBQWdCO0FBQUEsY0FDbkIsY0FBYyxpQkFBaUIsWUFBWTtBQUFBLFlBQzdDO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGdCQUFnQixTQUFTLE9BQU87QUFDdkMsZ0JBQUlBLFFBQU87QUFDWCxnQkFBSU4sU0FBUSxpQkFBaUIsTUFBTSxLQUFLO0FBQ3hDLGdCQUFJLGVBQWUsaUJBQWlCLE1BQU0sWUFBWTtBQUV0RCxnQkFBSUEsVUFBUyxNQUFNO0FBR2pCLGtCQUFJLFdBQVdXLFVBQVNYLE1BQUs7QUFFN0Isa0JBQUksYUFBYU0sTUFBSyxPQUFPO0FBQzNCLGdCQUFBQSxNQUFLLFFBQVE7QUFBQSxjQUNmO0FBRUEsa0JBQUksTUFBTSxnQkFBZ0IsUUFBUUEsTUFBSyxpQkFBaUIsVUFBVTtBQUNoRSxnQkFBQUEsTUFBSyxlQUFlO0FBQUEsY0FDdEI7QUFBQSxZQUNGO0FBRUEsZ0JBQUksZ0JBQWdCLE1BQU07QUFDeEIsY0FBQUEsTUFBSyxlQUFlSyxVQUFTLFlBQVk7QUFBQSxZQUMzQztBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxtQkFBbUIsU0FBUyxPQUFPO0FBQzFDLGdCQUFJTCxRQUFPO0FBR1gsZ0JBQUksY0FBY0EsTUFBSztBQUt2QixnQkFBSSxnQkFBZ0JBLE1BQUssY0FBYyxjQUFjO0FBQ25ELGtCQUFJLGdCQUFnQixNQUFNLGdCQUFnQixNQUFNO0FBQzlDLGdCQUFBQSxNQUFLLFFBQVE7QUFBQSxjQUNmO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyx5QkFBeUIsU0FBUyxPQUFPO0FBRWhELDRCQUFnQixTQUFTLEtBQUs7QUFBQSxVQUNoQztBQUVBLGNBQUksaUJBQWlCO0FBQ3JCLGNBQUksaUJBQWlCO0FBQ3JCLGNBQUksZ0JBQWdCO0FBQ3BCLGNBQUksYUFBYTtBQUFBLFlBQ2YsTUFBTTtBQUFBLFlBQ04sUUFBUTtBQUFBLFlBQ1IsS0FBSztBQUFBLFVBQ1A7QUFFQSxtQkFBUyxzQkFBc0IsTUFBTTtBQUNuQyxvQkFBUSxNQUFNO0FBQUEsY0FDWixLQUFLO0FBQ0gsdUJBQU87QUFBQSxjQUVULEtBQUs7QUFDSCx1QkFBTztBQUFBLGNBRVQ7QUFDRSx1QkFBTztBQUFBLFlBQ1g7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsa0JBQWtCLGlCQUFpQixNQUFNO0FBQ2hELGdCQUFJLG1CQUFtQixRQUFRLG9CQUFvQixnQkFBZ0I7QUFFakUscUJBQU8sc0JBQXNCLElBQUk7QUFBQSxZQUNuQztBQUVBLGdCQUFJLG9CQUFvQixpQkFBaUIsU0FBUyxpQkFBaUI7QUFFakUscUJBQU87QUFBQSxZQUNUO0FBR0EsbUJBQU87QUFBQSxVQUNUO0FBT0EsY0FBSSxxQ0FBcUMsU0FBVWEsT0FBTTtBQUN2RCxnQkFBSSxPQUFPLFVBQVUsZUFBZSxNQUFNLHlCQUF5QjtBQUNqRSxxQkFBTyxTQUFVLE1BQU0sTUFBTSxNQUFNLE1BQU07QUFDdkMsc0JBQU0sd0JBQXdCLFdBQVk7QUFDeEMseUJBQU9BLE1BQUssTUFBTSxNQUFNLE1BQU0sSUFBSTtBQUFBLGdCQUNwQyxDQUFDO0FBQUEsY0FDSDtBQUFBLFlBQ0YsT0FBTztBQUNMLHFCQUFPQTtBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBRUEsY0FBSTtBQVNKLGNBQUksZUFBZSxtQ0FBbUMsU0FBVWIsT0FBTSxNQUFNO0FBQzFFLGdCQUFJQSxNQUFLLGlCQUFpQixXQUFXLEtBQUs7QUFFeEMsa0JBQUksRUFBRSxlQUFlQSxRQUFPO0FBSTFCLHVDQUF1Qix3QkFBd0IsU0FBUyxjQUFjLEtBQUs7QUFDM0UscUNBQXFCLFlBQVksVUFBVSxLQUFLLFFBQVEsRUFBRSxTQUFTLElBQUk7QUFDdkUsb0JBQUksVUFBVSxxQkFBcUI7QUFFbkMsdUJBQU9BLE1BQUssWUFBWTtBQUN0QixrQkFBQUEsTUFBSyxZQUFZQSxNQUFLLFVBQVU7QUFBQSxnQkFDbEM7QUFFQSx1QkFBTyxRQUFRLFlBQVk7QUFDekIsa0JBQUFBLE1BQUssWUFBWSxRQUFRLFVBQVU7QUFBQSxnQkFDckM7QUFFQTtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsWUFBQUEsTUFBSyxZQUFZO0FBQUEsVUFDbkIsQ0FBQztBQUtELGNBQUksZUFBZTtBQUNuQixjQUFJLFlBQVk7QUFDaEIsY0FBSSxlQUFlO0FBQ25CLGNBQUksZ0JBQWdCO0FBQ3BCLGNBQUkseUJBQXlCO0FBWTdCLGNBQUksaUJBQWlCLFNBQVVBLE9BQU0sTUFBTTtBQUN6QyxnQkFBSSxNQUFNO0FBQ1Isa0JBQUksYUFBYUEsTUFBSztBQUV0QixrQkFBSSxjQUFjLGVBQWVBLE1BQUssYUFBYSxXQUFXLGFBQWEsV0FBVztBQUNwRiwyQkFBVyxZQUFZO0FBQ3ZCO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxZQUFBQSxNQUFLLGNBQWM7QUFBQSxVQUNyQjtBQUlBLGNBQUksc0JBQXNCO0FBQUEsWUFDeEIsV0FBVyxDQUFDLGtCQUFrQixzQkFBc0IscUJBQXFCLHFCQUFxQiwyQkFBMkIsaUJBQWlCLHNCQUFzQix5QkFBeUI7QUFBQSxZQUN6TCxZQUFZLENBQUMsd0JBQXdCLGtCQUFrQixtQkFBbUIsbUJBQW1CLG9CQUFvQix1QkFBdUIsdUJBQXVCLG9CQUFvQixnQkFBZ0I7QUFBQSxZQUNuTSxvQkFBb0IsQ0FBQyx1QkFBdUIscUJBQXFCO0FBQUEsWUFDakUsUUFBUSxDQUFDLHFCQUFxQixxQkFBcUIscUJBQXFCLHFCQUFxQixxQkFBcUIsb0JBQW9CLHFCQUFxQixvQkFBb0IsbUJBQW1CLG1CQUFtQixtQkFBbUIsb0JBQW9CLG9CQUFvQixvQkFBb0Isa0JBQWtCLGtCQUFrQixnQkFBZ0I7QUFBQSxZQUN4VixnQkFBZ0IsQ0FBQyx1QkFBdUIsdUJBQXVCLHFCQUFxQjtBQUFBLFlBQ3BGLGtCQUFrQixDQUFDLHlCQUF5Qix5QkFBeUIsdUJBQXVCO0FBQUEsWUFDNUYsY0FBYyxDQUFDLHFCQUFxQixxQkFBcUIsbUJBQW1CO0FBQUEsWUFDNUUsYUFBYSxDQUFDLHFCQUFxQixtQkFBbUIsb0JBQW9CLGdCQUFnQjtBQUFBLFlBQzFGLGFBQWEsQ0FBQyxxQkFBcUIscUJBQXFCLG9CQUFvQixxQkFBcUIsa0JBQWtCO0FBQUEsWUFDbkgsaUJBQWlCLENBQUMsd0JBQXdCLHdCQUF3QixzQkFBc0I7QUFBQSxZQUN4RixtQkFBbUIsQ0FBQywwQkFBMEIsMEJBQTBCLHdCQUF3QjtBQUFBLFlBQ2hHLFlBQVksQ0FBQyxtQkFBbUIsbUJBQW1CLGlCQUFpQjtBQUFBLFlBQ3BFLGNBQWMsQ0FBQywwQkFBMEIsMkJBQTJCLHVCQUF1QixzQkFBc0I7QUFBQSxZQUNqSCxhQUFhLENBQUMsb0JBQW9CLG9CQUFvQixrQkFBa0I7QUFBQSxZQUN4RSxhQUFhLENBQUMscUJBQXFCLG1CQUFtQixvQkFBb0IsZ0JBQWdCO0FBQUEsWUFDMUYsV0FBVyxDQUFDLGtCQUFrQixrQkFBa0IsZ0JBQWdCO0FBQUEsWUFDaEUsYUFBYSxDQUFDLHFCQUFxQixtQkFBbUIsb0JBQW9CLGdCQUFnQjtBQUFBLFlBQzFGLFlBQVksQ0FBQyxtQkFBbUIsbUJBQW1CLGlCQUFpQjtBQUFBLFlBQ3BFLFNBQVMsQ0FBQyxlQUFlLGFBQWE7QUFBQSxZQUN0QyxNQUFNLENBQUMsYUFBYSxZQUFZLFlBQVk7QUFBQSxZQUM1QyxVQUFVLENBQUMsaUJBQWlCLFVBQVU7QUFBQSxZQUN0QyxNQUFNLENBQUMsY0FBYyx1QkFBdUIsZUFBZSx3QkFBd0IsWUFBWSxrQkFBa0IsZUFBZSxhQUFhLGVBQWUseUJBQXlCLG1CQUFtQix3QkFBd0Isd0JBQXdCLHNCQUFzQix1QkFBdUIsY0FBYyxZQUFZO0FBQUEsWUFDL1QsYUFBYSxDQUFDLHlCQUF5QixtQkFBbUIsd0JBQXdCLHdCQUF3QixzQkFBc0IscUJBQXFCO0FBQUEsWUFDckosS0FBSyxDQUFDLGFBQWEsUUFBUTtBQUFBLFlBQzNCLE1BQU0sQ0FBQyxtQkFBbUIsZ0JBQWdCLGdCQUFnQixxQkFBcUIsdUJBQXVCLGtCQUFrQjtBQUFBLFlBQ3hILFVBQVUsQ0FBQyxpQkFBaUIsbUJBQW1CLGNBQWMsY0FBYztBQUFBLFlBQzNFLFlBQVksQ0FBQyxpQkFBaUIsaUJBQWlCO0FBQUEsWUFDL0MsZUFBZSxDQUFDLFdBQVc7QUFBQSxZQUMzQixTQUFTLENBQUMsYUFBYSxRQUFRO0FBQUEsWUFDL0IsU0FBUyxDQUFDLGNBQWMsY0FBYztBQUFBLFlBQ3RDLFlBQVksQ0FBQyxRQUFRO0FBQUEsWUFDckIsY0FBYyxDQUFDLHFCQUFxQix1QkFBdUIsa0JBQWtCO0FBQUEsWUFDN0UsV0FBVyxDQUFDLGtCQUFrQixxQkFBcUIsZUFBZTtBQUFBLFlBQ2xFLFFBQVEsQ0FBQyxnQkFBZ0IsY0FBYyxlQUFlLFdBQVc7QUFBQSxZQUNqRSxRQUFRLENBQUMsYUFBYSxhQUFhLGFBQWE7QUFBQSxZQUNoRCxNQUFNLENBQUMsWUFBWSxpQkFBaUIsYUFBYSxZQUFZLGNBQWMsaUJBQWlCLGlCQUFpQixjQUFjLFVBQVU7QUFBQSxZQUNySSxjQUFjLENBQUMsaUJBQWlCLGVBQWU7QUFBQSxZQUMvQyxTQUFTLENBQUMsZ0JBQWdCLGdCQUFnQixjQUFjO0FBQUEsWUFDeEQsVUFBVSxDQUFDLGFBQWEsV0FBVztBQUFBLFlBQ25DLFNBQVMsQ0FBQyxpQkFBaUIsZUFBZSxnQkFBZ0IsWUFBWTtBQUFBLFlBQ3RFLGNBQWMsQ0FBQyxnQkFBZ0IsZ0JBQWdCO0FBQUEsWUFDL0MsWUFBWSxDQUFDLGNBQWMsY0FBYztBQUFBLFlBQ3pDLFdBQVcsQ0FBQyxhQUFhLGFBQWE7QUFBQSxZQUN0QyxnQkFBZ0IsQ0FBQyx1QkFBdUIsc0JBQXNCLHFCQUFxQjtBQUFBLFlBQ25GLGNBQWMsQ0FBQyxxQkFBcUIsbUJBQW1CO0FBQUEsWUFDdkQsWUFBWSxDQUFDLG1CQUFtQixzQkFBc0Isc0JBQXNCLDBCQUEwQjtBQUFBLFlBQ3RHLFVBQVUsQ0FBQyxjQUFjO0FBQUEsVUFDM0I7QUFLQSxjQUFJLG1CQUFtQjtBQUFBLFlBQ3JCLHlCQUF5QjtBQUFBLFlBQ3pCLG1CQUFtQjtBQUFBLFlBQ25CLGtCQUFrQjtBQUFBLFlBQ2xCLGtCQUFrQjtBQUFBLFlBQ2xCLFNBQVM7QUFBQSxZQUNULGNBQWM7QUFBQSxZQUNkLGlCQUFpQjtBQUFBLFlBQ2pCLGFBQWE7QUFBQSxZQUNiLFNBQVM7QUFBQSxZQUNULE1BQU07QUFBQSxZQUNOLFVBQVU7QUFBQSxZQUNWLGNBQWM7QUFBQSxZQUNkLFlBQVk7QUFBQSxZQUNaLGNBQWM7QUFBQSxZQUNkLFdBQVc7QUFBQSxZQUNYLFVBQVU7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLGFBQWE7QUFBQSxZQUNiLGNBQWM7QUFBQSxZQUNkLFlBQVk7QUFBQSxZQUNaLGVBQWU7QUFBQSxZQUNmLGdCQUFnQjtBQUFBLFlBQ2hCLGlCQUFpQjtBQUFBLFlBQ2pCLFlBQVk7QUFBQSxZQUNaLFdBQVc7QUFBQSxZQUNYLFlBQVk7QUFBQSxZQUNaLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxZQUNQLFNBQVM7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxZQUNSLE1BQU07QUFBQTtBQUFBLFlBRU4sYUFBYTtBQUFBLFlBQ2IsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsaUJBQWlCO0FBQUEsWUFDakIsa0JBQWtCO0FBQUEsWUFDbEIsa0JBQWtCO0FBQUEsWUFDbEIsZUFBZTtBQUFBLFlBQ2YsYUFBYTtBQUFBLFVBQ2Y7QUFRQSxtQkFBUyxVQUFVTCxTQUFRLEtBQUs7QUFDOUIsbUJBQU9BLFVBQVMsSUFBSSxPQUFPLENBQUMsRUFBRSxZQUFZLElBQUksSUFBSSxVQUFVLENBQUM7QUFBQSxVQUMvRDtBQU9BLGNBQUksV0FBVyxDQUFDLFVBQVUsTUFBTSxPQUFPLEdBQUc7QUFHMUMsaUJBQU8sS0FBSyxnQkFBZ0IsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUNwRCxxQkFBUyxRQUFRLFNBQVVBLFNBQVE7QUFDakMsK0JBQWlCLFVBQVVBLFNBQVEsSUFBSSxDQUFDLElBQUksaUJBQWlCLElBQUk7QUFBQSxZQUNuRSxDQUFDO0FBQUEsVUFDSCxDQUFDO0FBWUQsbUJBQVMsb0JBQW9CLE1BQU1ELFFBQU9vQixtQkFBa0I7QUFVMUQsZ0JBQUksVUFBVXBCLFVBQVMsUUFBUSxPQUFPQSxXQUFVLGFBQWFBLFdBQVU7QUFFdkUsZ0JBQUksU0FBUztBQUNYLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLENBQUNvQixxQkFBb0IsT0FBT3BCLFdBQVUsWUFBWUEsV0FBVSxLQUFLLEVBQUUsaUJBQWlCLGVBQWUsSUFBSSxLQUFLLGlCQUFpQixJQUFJLElBQUk7QUFDdkkscUJBQU9BLFNBQVE7QUFBQSxZQUNqQjtBQUVBLG9CQUFRLEtBQUtBLFFBQU8sS0FBSztBQUFBLFVBQzNCO0FBRUEsY0FBSSxtQkFBbUI7QUFDdkIsY0FBSSxZQUFZO0FBZWhCLG1CQUFTLG1CQUFtQixNQUFNO0FBQ2hDLG1CQUFPLEtBQUssUUFBUSxrQkFBa0IsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLFdBQVcsTUFBTTtBQUFBLFVBQ3RGO0FBRUEsY0FBSSxpQkFBaUIsV0FBWTtBQUFBLFVBQUM7QUFFbEM7QUFFRSxnQkFBSSw4QkFBOEI7QUFDbEMsZ0JBQUksY0FBYztBQUNsQixnQkFBSSxnQkFBZ0I7QUFFcEIsZ0JBQUksb0NBQW9DO0FBQ3hDLGdCQUFJLG1CQUFtQixDQUFDO0FBQ3hCLGdCQUFJLG9CQUFvQixDQUFDO0FBQ3pCLGdCQUFJLG9CQUFvQjtBQUN4QixnQkFBSSx5QkFBeUI7QUFFN0IsZ0JBQUksV0FBVyxTQUFVcUIsU0FBUTtBQUMvQixxQkFBT0EsUUFBTyxRQUFRLGVBQWUsU0FBVSxHQUFHQyxZQUFXO0FBQzNELHVCQUFPQSxXQUFVLFlBQVk7QUFBQSxjQUMvQixDQUFDO0FBQUEsWUFDSDtBQUVBLGdCQUFJLDBCQUEwQixTQUFVLE1BQU07QUFDNUMsa0JBQUksaUJBQWlCLGVBQWUsSUFBSSxLQUFLLGlCQUFpQixJQUFJLEdBQUc7QUFDbkU7QUFBQSxjQUNGO0FBRUEsK0JBQWlCLElBQUksSUFBSTtBQUV6QjtBQUFBLGdCQUFNO0FBQUEsZ0JBQW1EO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBR3pELFNBQVMsS0FBSyxRQUFRLGFBQWEsS0FBSyxDQUFDO0FBQUEsY0FBQztBQUFBLFlBQzVDO0FBRUEsZ0JBQUksMkJBQTJCLFNBQVUsTUFBTTtBQUM3QyxrQkFBSSxpQkFBaUIsZUFBZSxJQUFJLEtBQUssaUJBQWlCLElBQUksR0FBRztBQUNuRTtBQUFBLGNBQ0Y7QUFFQSwrQkFBaUIsSUFBSSxJQUFJO0FBRXpCLG9CQUFNLG1FQUFtRSxNQUFNLEtBQUssT0FBTyxDQUFDLEVBQUUsWUFBWSxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUM7QUFBQSxZQUM3SDtBQUVBLGdCQUFJLDhCQUE4QixTQUFVLE1BQU10QixRQUFPO0FBQ3ZELGtCQUFJLGtCQUFrQixlQUFlQSxNQUFLLEtBQUssa0JBQWtCQSxNQUFLLEdBQUc7QUFDdkU7QUFBQSxjQUNGO0FBRUEsZ0NBQWtCQSxNQUFLLElBQUk7QUFFM0Isb0JBQU0sOEVBQW1GLE1BQU1BLE9BQU0sUUFBUSxtQ0FBbUMsRUFBRSxDQUFDO0FBQUEsWUFDcko7QUFFQSxnQkFBSSxzQkFBc0IsU0FBVSxNQUFNQSxRQUFPO0FBQy9DLGtCQUFJLG1CQUFtQjtBQUNyQjtBQUFBLGNBQ0Y7QUFFQSxrQ0FBb0I7QUFFcEIsb0JBQU0sOERBQThELElBQUk7QUFBQSxZQUMxRTtBQUVBLGdCQUFJLDJCQUEyQixTQUFVLE1BQU1BLFFBQU87QUFDcEQsa0JBQUksd0JBQXdCO0FBQzFCO0FBQUEsY0FDRjtBQUVBLHVDQUF5QjtBQUV6QixvQkFBTSxtRUFBbUUsSUFBSTtBQUFBLFlBQy9FO0FBRUEsNkJBQWlCLFNBQVUsTUFBTUEsUUFBTztBQUN0QyxrQkFBSSxLQUFLLFFBQVEsR0FBRyxJQUFJLElBQUk7QUFDMUIsd0NBQXdCLElBQUk7QUFBQSxjQUM5QixXQUFXLDRCQUE0QixLQUFLLElBQUksR0FBRztBQUNqRCx5Q0FBeUIsSUFBSTtBQUFBLGNBQy9CLFdBQVcsa0NBQWtDLEtBQUtBLE1BQUssR0FBRztBQUN4RCw0Q0FBNEIsTUFBTUEsTUFBSztBQUFBLGNBQ3pDO0FBRUEsa0JBQUksT0FBT0EsV0FBVSxVQUFVO0FBQzdCLG9CQUFJLE1BQU1BLE1BQUssR0FBRztBQUNoQixzQ0FBb0IsTUFBTUEsTUFBSztBQUFBLGdCQUNqQyxXQUFXLENBQUMsU0FBU0EsTUFBSyxHQUFHO0FBQzNCLDJDQUF5QixNQUFNQSxNQUFLO0FBQUEsZ0JBQ3RDO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSSxtQkFBbUI7QUFhdkIsbUJBQVMsK0JBQStCdUIsU0FBUTtBQUM5QztBQUNFLGtCQUFJLGFBQWE7QUFDakIsa0JBQUlDLGFBQVk7QUFFaEIsdUJBQVMsYUFBYUQsU0FBUTtBQUM1QixvQkFBSSxDQUFDQSxRQUFPLGVBQWUsU0FBUyxHQUFHO0FBQ3JDO0FBQUEsZ0JBQ0Y7QUFFQSxvQkFBSSxhQUFhQSxRQUFPLFNBQVM7QUFFakMsb0JBQUksY0FBYyxNQUFNO0FBQ3RCLHNCQUFJSCxvQkFBbUIsVUFBVSxRQUFRLElBQUksTUFBTTtBQUNuRCxnQ0FBY0ksY0FBYUosb0JBQW1CLFlBQVksbUJBQW1CLFNBQVMsS0FBSztBQUMzRixnQ0FBYyxvQkFBb0IsV0FBVyxZQUFZQSxpQkFBZ0I7QUFDekUsa0JBQUFJLGFBQVk7QUFBQSxnQkFDZDtBQUFBLGNBQ0Y7QUFFQSxxQkFBTyxjQUFjO0FBQUEsWUFDdkI7QUFBQSxVQUNGO0FBU0EsbUJBQVMsa0JBQWtCbEIsT0FBTWlCLFNBQVE7QUFDdkMsZ0JBQUlFLFNBQVFuQixNQUFLO0FBRWpCLHFCQUFTLGFBQWFpQixTQUFRO0FBQzVCLGtCQUFJLENBQUNBLFFBQU8sZUFBZSxTQUFTLEdBQUc7QUFDckM7QUFBQSxjQUNGO0FBRUEsa0JBQUlILG9CQUFtQixVQUFVLFFBQVEsSUFBSSxNQUFNO0FBRW5EO0FBQ0Usb0JBQUksQ0FBQ0EsbUJBQWtCO0FBQ3JCLG1DQUFpQixXQUFXRyxRQUFPLFNBQVMsQ0FBQztBQUFBLGdCQUMvQztBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxhQUFhLG9CQUFvQixXQUFXQSxRQUFPLFNBQVMsR0FBR0gsaUJBQWdCO0FBRW5GLGtCQUFJLGNBQWMsU0FBUztBQUN6Qiw0QkFBWTtBQUFBLGNBQ2Q7QUFFQSxrQkFBSUEsbUJBQWtCO0FBQ3BCLGdCQUFBSyxPQUFNLFlBQVksV0FBVyxVQUFVO0FBQUEsY0FDekMsT0FBTztBQUNMLGdCQUFBQSxPQUFNLFNBQVMsSUFBSTtBQUFBLGNBQ3JCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxhQUFhekIsUUFBTztBQUMzQixtQkFBT0EsVUFBUyxRQUFRLE9BQU9BLFdBQVUsYUFBYUEsV0FBVTtBQUFBLFVBQ2xFO0FBV0EsbUJBQVMsbUJBQW1CdUIsU0FBUTtBQUNsQyxnQkFBSSxXQUFXLENBQUM7QUFFaEIscUJBQVMsT0FBT0EsU0FBUTtBQUN0QixrQkFBSSxZQUFZLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxHQUFHO0FBRWhELHVCQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQ3pDLHlCQUFTLFVBQVUsQ0FBQyxDQUFDLElBQUk7QUFBQSxjQUMzQjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFpQkEsbUJBQVMsd0NBQXdDLGNBQWMsWUFBWTtBQUN6RTtBQUNFLGtCQUFJLENBQUMsWUFBWTtBQUNmO0FBQUEsY0FDRjtBQUVBLGtCQUFJLGtCQUFrQixtQkFBbUIsWUFBWTtBQUNyRCxrQkFBSSxpQkFBaUIsbUJBQW1CLFVBQVU7QUFDbEQsa0JBQUksY0FBYyxDQUFDO0FBRW5CLHVCQUFTLE9BQU8saUJBQWlCO0FBQy9CLG9CQUFJLGNBQWMsZ0JBQWdCLEdBQUc7QUFDckMsb0JBQUkscUJBQXFCLGVBQWUsR0FBRztBQUUzQyxvQkFBSSxzQkFBc0IsZ0JBQWdCLG9CQUFvQjtBQUM1RCxzQkFBSSxhQUFhLGNBQWMsTUFBTTtBQUVyQyxzQkFBSSxZQUFZLFVBQVUsR0FBRztBQUMzQjtBQUFBLGtCQUNGO0FBRUEsOEJBQVksVUFBVSxJQUFJO0FBRTFCLHdCQUFNLHVQQUEyUSxhQUFhLGFBQWEsV0FBVyxDQUFDLElBQUksYUFBYSxZQUFZLGFBQWEsa0JBQWtCO0FBQUEsZ0JBQ3JYO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBSUEsY0FBSSxtQkFBbUI7QUFBQSxZQUNyQixNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixJQUFJO0FBQUEsWUFDSixLQUFLO0FBQUEsWUFDTCxPQUFPO0FBQUEsWUFDUCxJQUFJO0FBQUEsWUFDSixLQUFLO0FBQUEsWUFDTCxPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsWUFDUixNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsWUFDUixPQUFPO0FBQUEsWUFDUCxLQUFLO0FBQUE7QUFBQSxVQUVQO0FBSUEsY0FBSSxrQkFBa0IsUUFBUTtBQUFBLFlBQzVCLFVBQVU7QUFBQSxVQUNaLEdBQUcsZ0JBQWdCO0FBRW5CLGNBQUksT0FBTztBQUVYLG1CQUFTLGlCQUFpQixLQUFLLE9BQU87QUFDcEMsZ0JBQUksQ0FBQyxPQUFPO0FBQ1Y7QUFBQSxZQUNGO0FBR0EsZ0JBQUksZ0JBQWdCLEdBQUcsR0FBRztBQUN4QixrQkFBSSxFQUFFLE1BQU0sWUFBWSxRQUFRLE1BQU0sMkJBQTJCLE9BQU87QUFDdEU7QUFDRSx3QkFBTSxNQUFPLE1BQU0sNEZBQTZGO0FBQUEsZ0JBQ2xIO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxNQUFNLDJCQUEyQixNQUFNO0FBQ3pDLGtCQUFJLEVBQUUsTUFBTSxZQUFZLE9BQU87QUFDN0I7QUFDRSx3QkFBTSxNQUFPLG9FQUFxRTtBQUFBLGdCQUNwRjtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxFQUFFLE9BQU8sTUFBTSw0QkFBNEIsWUFBWSxRQUFRLE1BQU0sMEJBQTBCO0FBQ2pHO0FBQ0Usd0JBQU0sTUFBTyw2SkFBOEo7QUFBQSxnQkFDN0s7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBO0FBQ0Usa0JBQUksQ0FBQyxNQUFNLGtDQUFrQyxNQUFNLG1CQUFtQixNQUFNLFlBQVksTUFBTTtBQUM1RixzQkFBTSwyTkFBME87QUFBQSxjQUNsUDtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxFQUFFLE1BQU0sU0FBUyxRQUFRLE9BQU8sTUFBTSxVQUFVLFdBQVc7QUFDN0Q7QUFDRSxzQkFBTSxNQUFPLHNKQUF1SjtBQUFBLGNBQ3RLO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxrQkFBa0IsU0FBUyxPQUFPO0FBQ3pDLGdCQUFJLFFBQVEsUUFBUSxHQUFHLE1BQU0sSUFBSTtBQUMvQixxQkFBTyxPQUFPLE1BQU0sT0FBTztBQUFBLFlBQzdCO0FBRUEsb0JBQVEsU0FBUztBQUFBLGNBS2YsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNILHVCQUFPO0FBQUEsY0FFVDtBQUNFLHVCQUFPO0FBQUEsWUFDWDtBQUFBLFVBQ0Y7QUFLQSxjQUFJLHdCQUF3QjtBQUFBO0FBQUEsWUFFMUIsUUFBUTtBQUFBLFlBQ1IsZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsV0FBVztBQUFBLFlBQ1gsUUFBUTtBQUFBLFlBQ1IsaUJBQWlCO0FBQUEsWUFDakIsS0FBSztBQUFBLFlBQ0wsSUFBSTtBQUFBLFlBQ0osT0FBTztBQUFBLFlBQ1AsZ0JBQWdCO0FBQUEsWUFDaEIsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsYUFBYTtBQUFBLFlBQ2IsYUFBYTtBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsVUFBVTtBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsaUJBQWlCO0FBQUEsWUFDakIsYUFBYTtBQUFBLFlBQ2IsVUFBVTtBQUFBLFlBQ1YsY0FBYztBQUFBLFlBQ2QsUUFBUTtBQUFBLFlBQ1IsYUFBYTtBQUFBLFlBQ2IseUJBQXlCO0FBQUEsWUFDekIsTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsZ0JBQWdCO0FBQUEsWUFDaEIsY0FBYztBQUFBLFlBQ2QsT0FBTztBQUFBLFlBQ1AsS0FBSztBQUFBLFlBQ0wsVUFBVTtBQUFBLFlBQ1YseUJBQXlCO0FBQUEsWUFDekIsdUJBQXVCO0FBQUEsWUFDdkIsVUFBVTtBQUFBLFlBQ1YsV0FBVztBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsY0FBYztBQUFBLFlBQ2QsS0FBSztBQUFBLFlBQ0wsTUFBTTtBQUFBLFlBQ04sWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsWUFBWTtBQUFBLFlBQ1osYUFBYTtBQUFBLFlBQ2IsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLFlBQ1IsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsTUFBTTtBQUFBLFlBQ04sSUFBSTtBQUFBLFlBQ0osV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsSUFBSTtBQUFBLFlBQ0osUUFBUTtBQUFBLFlBQ1IsVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsV0FBVztBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sS0FBSztBQUFBLFlBQ0wsVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsY0FBYztBQUFBLFlBQ2QsS0FBSztBQUFBLFlBQ0wsV0FBVztBQUFBLFlBQ1gsT0FBTztBQUFBLFlBQ1AsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsS0FBSztBQUFBLFlBQ0wsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsWUFBWTtBQUFBLFlBQ1osTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsYUFBYTtBQUFBLFlBQ2IsYUFBYTtBQUFBLFlBQ2IsUUFBUTtBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osVUFBVTtBQUFBLFlBQ1YsZ0JBQWdCO0FBQUEsWUFDaEIsS0FBSztBQUFBLFlBQ0wsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFlBQ1IsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sWUFBWTtBQUFBLFlBQ1osS0FBSztBQUFBLFlBQ0wsUUFBUTtBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1QsVUFBVTtBQUFBLFlBQ1YsUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sUUFBUTtB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ZCxpQkFBaUI7QUFBQSxZQUNqQixTQUFTO0FBQUEsWUFDVCxVQUFVO0FBQUEsWUFDVixjQUFjO0FBQUEsWUFDZCxhQUFhO0FBQUEsWUFDYixpQkFBaUI7QUFBQSxZQUNqQixhQUFhO0FBQUEsWUFDYixpQkFBaUI7QUFBQSxZQUNqQixVQUFVO0FBQUEsWUFDVixhQUFhO0FBQUEsWUFDYixjQUFjO0FBQUEsWUFDZCxpQkFBaUI7QUFBQSxZQUNqQixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixlQUFlO0FBQUEsWUFDZixrQkFBa0I7QUFBQSxZQUNsQixPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsWUFDUixhQUFhO0FBQUEsWUFDYixnQkFBZ0I7QUFBQSxZQUNoQixhQUFhO0FBQUEsWUFDYixnQkFBZ0I7QUFBQSxZQUNoQixJQUFJO0FBQUEsWUFDSixJQUFJO0FBQUEsWUFDSixHQUFHO0FBQUEsWUFDSCxrQkFBa0I7QUFBQSxZQUNsQixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixjQUFjO0FBQUEsWUFDZCxpQkFBaUI7QUFBQSxZQUNqQixjQUFjO0FBQUEsWUFDZCxpQkFBaUI7QUFBQSxZQUNqQixXQUFXO0FBQUEsWUFDWCxjQUFjO0FBQUEsWUFDZCxXQUFXO0FBQUEsWUFDWCxjQUFjO0FBQUEsWUFDZCxXQUFXO0FBQUEsWUFDWCxjQUFjO0FBQUEsWUFDZCxZQUFZO0FBQUEsWUFDWixlQUFlO0FBQUEsWUFDZixXQUFXO0FBQUEsWUFDWCxjQUFjO0FBQUEsWUFDZCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixPQUFPO0FBQUEsWUFDUCxhQUFhO0FBQUEsWUFDYixZQUFZO0FBQUEsWUFDWixlQUFlO0FBQUEsWUFDZixVQUFVO0FBQUEsWUFDVixJQUFJO0FBQUEsWUFDSixJQUFJO0FBQUEsWUFDSixHQUFHO0FBQUEsWUFDSCxrQkFBa0I7QUFBQSxZQUNsQixHQUFHO0FBQUEsWUFDSCxZQUFZO0FBQUEs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TUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsU0FBQUEsSUFBQUE7QUFBQUEsc0JBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLEdBQUFBO1lBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxVQUFBQSx1SUFBQUE7VUFBQUE7QUFBQUEsY0FBQUEsSUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7QUFBQUEsaUJBQUFBLEVBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLEVBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUEsR0FBQUEsTUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsU0FBQUEsSUFBQUE7QUFBQUEsWUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBO0FBQUFBLGNBQUFBLE1BQUFBLFFBQUFBLEdBQUFBLFVBQUFBLEdBQUFBLE9BQUFBO1lBQUFBLFVBQUFBO0FBQUFBLGtCQUFBQTtBQUFBQSxzQkFBQUE7WUFBQUE7VUFBQUEsRUFBQUE7UUFBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBLElBQUFBO0FBQUFBLFdBQUFBLFFBQUFBLE1BQUFBLEtBQUFBLEdBQUFBLFlBQUFBLEtBQUFBLEdBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxJQUFBQSxNQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxHQUFBQSxFQUFBQSxJQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSxpQkFBQUE7UUFBQUE7QUFBQUEsaUJBQUFBLEtBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxVQUFBQSxRQUFBQSxLQUFBQSxJQUFBQSxNQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxHQUFBQSxFQUFBQSxJQUFBQSxVQUFBQSxFQUFBQTtBQUFBQSxpQkFBQUEsU0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxLQUFBQSxXQUFBQTtBQUFBQSxvQkFBQUEsS0FBQUE7QUFBQUEsdUJBQUFBLFNBQUFBLElBQUFBO0FBQUFBLDJCQUFBQSxLQUFBQSxHQUFBQSxTQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxRQUFBQSxNQUFBQTtBQUFBQSx3QkFBQUEsS0FBQUEsdUJBQUFBLE1BQUFBLEdBQUFBLFdBQUFBLEVBQUFBO0FBQUFBLG9CQUFBQSxNQUFBQSxLQUFBQSxPQUFBQSxHQUFBQSxNQUFBQSxNQUFBQSxRQUFBQSxHQUFBQSxNQUFBQSxjQUFBQSxNQUFBQTtrQkFBQUE7QUFBQUEseUJBQUFBLHlCQUFBQSxPQUFBQTtnQkFBQUE7Y0FBQUEsRUFBQUEsR0FBQUEsS0FBQUEsR0FBQUEsR0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsR0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsR0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsS0FBQUEsVUFBQUEsUUFBQUE7QUFBQUEsaUJBQUFBLE1BQUFBLEdBQUFBLEtBQUFBLEtBQUFBLFVBQUFBLFVBQUFBLEtBQUFBLFNBQUFBLFVBQUFBLEVBQUFBLENBQUFBLEtBQUFBLE1BQUFBLE1BQUFBLEtBQUFBLE1BQUFBLEdBQUFBLEtBQUFBLEtBQUFBLFVBQUFBLFVBQUFBLEtBQUFBLFNBQUFBLFVBQUFBLEVBQUFBLENBQUFBLEtBQUFBLE1BQUFBLE1BQUFBLEtBQUFBLE1BQUFBLEdBQUFBLEtBQUFBLEtBQUFBLFVBQUFBLFVBQUFBLEtBQUFBLFNBQUFBLFVBQUFBLEVBQUFBLENBQUFBLEtBQUFBLE1BQUFBLE1BQUFBO0FBQUFBLHFCQUFBQSxDQUFBQSxJQUFBQSxJQUFBQSxFQUFBQTtZQUFBQSxFQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxJQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxDQUFBQSxHQUFBQSxL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QUFBLFdBQUEsWUFBQSxXQUFBLGNBQUEsV0FBQSxZQUFBLFdBQUEsV0FBQSxXQUFBLFlBQUEsV0FBQSxhQUFBLFdBQUEsUUFBQSxXQUFBLE9BQUEsV0FBQSxVQUFBLFdBQUEsV0FBQSxXQUFBLGFBQUEsV0FBQSxlQUFBLFdBQUEsZ0JBQUEsV0FBQSxZQUFBLFdBQUEsV0FBQSxXQUFBLGVBQUEsV0FBQSxjQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxRQUFBLFdBQUEsaUJBQUEsV0FBQSxXQUFBLFdBQUEsTUFBQSxXQUFBLFdBQUEsV0FBQSxLQUFBLFdBQUEsV0FBQSxXQUFBLGVBQUEsV0FBQSxTQUFBLFdBQUEsUUFBQSxXQUFBLFdBQUEsV0FBQSxTQUFBLFdBQUEsV0FBQSxXQUFBLE1BQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxXQUFBLFVBQUEsV0FBQSxZQUFBLFdBQUEsUUFBQSxXQUFBLGVBQUEsV0FBQSxZQUFBLFdBQUEsT0FBQSxXQUFBLFdBQUEsV0FBQSxVQUFBLFdBQUEsT0FBQSxXQUFBLFlBQUEsV0FBQSxPQUFBLFdBQUEsT0FBQSxXQUFBLFlBQUEsV0FBQSxXQUFBLFdBQUEsWUFBQSxXQUFBLFFBQUEsV0FBQSxjQUFBLFdBQUEsT0FBQSxXQUFBLHNCQUFBLFdBQUEsU0FBQSxXQUFBLEtBQUEsV0FBQSxTQUFBLFdBQUEsU0FBQSxXQUFBLFVBQUEsV0FBQSxXQUFBLFdBQUEsUUFBQSxXQUFBLFNBQUEsV0FBQSxPQUFBLFdBQUEsWUFBQSxXQUFBLGFBQUEsV0FBQSxRQUFBLFdBQUEsV0FBQSxXQUFBLE1BQUEsV0FBQSxNQUFBLFdBQUEsV0FBQSxXQUFBLGFBQUEsV0FBQSxVQUFBLFdBQUEsUUFBQSxXQUFBLFdBQUEsV0FBQSxnQkFBQSxXQUFBLFlBQUEsV0FBQSxlQUFBLFdBQUEsVUFBQSxXQUFBLFVBQUEsV0FBQSxjQUFBLFdBQUEsYUFBQSxXQUFBLE1BQUEsV0FBQSxRQUFBLFdBQUEsYUFBQSxXQUFBLE9BQUEsV0FBQSxPQUFBLFVBQUEsR0FBQSxLQUFBLFdBQUE7QUFBQSxtQkFBQW1H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QUEsTUFBQSxRQUFBLE9BQUFBLEdBQUEsTUFBQSxhQUFBLFFBQUFBLEdBQUEsTUFBQSxVQUFBLFFBQUFBLEdBQUEsWUFBQSxvREFBQSxLQUFBLGtCQUFBLFlBQUFBLEVBQUE7WUFBQTtBQUFBLGlCQUFBLGVBQUEsWUFBQSxhQUFBLEtBQUEsYUFBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsV0FBQSxZQUFBLGVBQUEsS0FBQSxnQkFBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsY0FBQSxZQUFBLGtCQUFBLEtBQUEsV0FBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsU0FBQSxZQUFBLGFBQUEsS0FBQSxlQUFBLFNBQUEsY0FBQSxPQUFBO0FBQUEsZ0JBQUE7QUFBQSxtQkFBQSxhQUFBLE9BQUEsU0FBQSxLQUFBLGFBQUEsTUFBQSxLQUFBLEtBQUEsYUFBQSxNQUFBO1lBQUEsU0FBQTBELElBQUE7WUFBQTtBQUFBLGlCQUFBLGFBQUEsUUFBQSxPQUFBLEtBQUEsYUFBQSxZQUFBLGFBQUEsS0FBQSxrQkFBQSxTQUFBLGNBQUEsT0FBQTtBQUFBLGdCQUFBO0FBQUEsbUJBQUEsZ0JBQUEsT0FBQSxTQUFBLEtBQUEsZ0JBQUEsTUFBQSxLQUFBLEtBQUEsZ0JBQUEsTUFBQTtZQUFBLFNBQUFBLElBQUE7WUFBQTtBQUFBLGlCQUFBLGdCQUFBLFFBQUEsT0FBQSxLQUFBLGdCQUFBLFlBQUEsYUFBQSxLQUFBLFdBQUEsWUFBQSxLQUFBLFlBQUEsR0FBQSxLQUFBLGNBQUEsWUFBQSxLQUFBLGVBQUE7QUFBQSxnQkFBQUosS0FBQTtBQUFBLGlCQUFBLGFBQUEsV0FBQSxXQUFBO0FBQUEsY0FBQUEsR0FBQSxZQUFBLEtBQUEsS0FBQTtZQUFBLEdBQUEsS0FBQSxhQUFBLFVBQUEsV0FBQTtBQUFBLGNBQUFBLEdBQUEsWUFBQSxLQUFBLEtBQUE7WUFBQSxHQUFBLEtBQUEsZ0JBQUEsV0FBQSxXQUFBO0FBQUEsY0FBQUEsR0FBQSxlQUFBLEtBQUEsS0FBQTtZQUFBLEdBQUEsS0FBQSxnQkFBQSxVQUFBLFdBQUE7QUFBQSxjQUFBQSxHQUFBLGVBQUEsS0FBQSxLQUFBO1lBQUEsR0FBQSxLQUFBLGtCQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxnQkFBQSxZQUFBLDRCQUFBLEtBQUEsZ0JBQUEsWUFBQSxlQUFBLEtBQUEsZUFBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsYUFBQSxZQUFBLHlCQUFBLEtBQUEsYUFBQSxZQUFBLFlBQUEsS0FBQSxjQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxZQUFBLFlBQUEsaUJBQUEsS0FBQSxZQUFBLFlBQUEsT0FBQSxLQUFBLGtCQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxnQkFBQSxZQUFBLHFCQUFBLEtBQUEsZ0JBQUEsWUFBQSxXQUFBLEtBQUEsZUFBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsYUFBQSxZQUFBLHlCQUFBLEtBQUEsYUFBQSxZQUFBLFVBQUEsS0FBQSxhQUFBLFVBQUEsR0FBQUksS0FBQSxLQUFBLEtBQUEsRUFBQSxLQUFBQSxJQUFBLE1BQUEsS0FBQSxHQUFBLEtBQUEsY0FBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsWUFBQSxZQUFBLHdCQUFBLEtBQUEsWUFBQSxZQUFBLFNBQUEsS0FBQSxZQUFBLFVBQUEsR0FBQXFhLEtBQUEsS0FBQSxNQUFBLEVBQUEsS0FBQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxhQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxXQUFBLFlBQUEsdUJBQUEsS0FBQSxXQUFBLFlBQUEsUUFBQSxLQUFBLFdBQUEsVUFBQSxHQUFBeGdCLEtBQUEsS0FBQSxLQUFBLEVBQUEsS0FBQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxhQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxXQUFBLFlBQUEsdUJBQUEsS0FBQSxXQUFBLFlBQUEsYUFBQSxLQUFBLFdBQUEsVUFBQSxHQUFBdWUsS0FBQSxLQUFBLFNBQUEsRUFBQSxLQUFBQSxJQUFBLElBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLGNBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFFBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLGVBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLGFBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFlBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFVBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFdBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLGVBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFlBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFdBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFVBQUEsR0FBQSxLQUFBLE1BQUEsWUFBQSxLQUFBLFVBQUE7VUFBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLGVBQUEsT0FBQSxXQUFBO0FBQUEsZ0JBQUFwWSxLQUFBO0FBQUEsaUJBQUEsT0FBQSxDQUFBLEdBQUEsS0FBQSxRQUFBLENBQUEsR0FBQSxLQUFBLFNBQUEsSUFBQSxHQUFBLEtBQUEsaUJBQUEsR0FBQSxLQUFBLE9BQUEsSUFBQSxPQUFBLEVBQUEsSUFBQSxFQUFBLFFBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxPQUFBLEdBQUEsZ0JBQUEsU0FBQXFhLElBQUE7QUFBQSxjQUFBQSxHQUFBLFdBQUFyYSxHQUFBLGNBQUFxYSxFQUFBO1lBQUEsQ0FBQSxHQUFBLEtBQUEsT0FBQSxHQUFBLE9BQUEsU0FBQUEsSUFBQTtBQUFBLGNBQUFyYSxHQUFBLGNBQUFxYSxFQUFBO1lBQUEsQ0FBQSxHQUFBLEtBQUEsT0FBQSxHQUFBLFlBQUEsU0FBQUEsSUFBQTtBQUFBLGNBQUFyYSxHQUFBLGNBQUFxYSxFQUFBO1lBQUEsQ0FBQSxHQUFBLEtBQUEsT0FBQSxHQUFBLFdBQUEsU0FBQUEsSUFBQTtBQUFBLGNBQUFyYSxHQUFBLGNBQUFxYSxFQUFBO1lBQUEsQ0FBQSxHQUFBLEtBQUEsT0FBQSxHQUFBLFVBQUEsU0FBQUEsSUFBQTtBQUFBLGNBQUFyYSxHQUFBLGNBQUFxYSxFQUFBO1lBQUEs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USxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRzFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FHMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFR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QUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxXQUFBQSxNQUFBQSxHQUFBQSxFQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxjQUFBQSxDQUFBQSxJQUFBQTtBQUFBQSxnQkFBQUEsR0FBQUEsRUFBQUEsTUFBQUEsS0FBQUEsU0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsa0JBQUFBO0FBQUFBLGtCQUFBQSxDQUFBQTtBQUFBQTtBQUFBQSxrQkFBQUEsWUFBQUEsT0FBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxPQUFBQSxVQUFBQSxTQUFBQSxLQUFBQSxFQUFBQSxDQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSwyQkFBQUEsTUFBQUEsR0FBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLFlBQUFBO0FBQUFBLGtCQUFBQSxVQUFBQSxNQUFBQSxVQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLGdCQUFBQSxNQUFBQSwyQ0FBQUEsS0FBQUEsRUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO1lBQUFBLEVBQUFBLEVBQUFBLE1BQUFBLE1BQUFBLE1BQUFBLFlBQUFBLE9BQUFBLEdBQUFBLFFBQUFBO0FBQUFBLGNBQUFBLE9BQUFBLEtBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxXQUFBQTtjQUFBQTtBQUFBQSxxQkFBQUEsRUFBQUEsR0FBQUEsSUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsdUJBQUFBLE1BQUFBLEdBQUFBLFNBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLElBQUFBLEVBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLElBQUFBLEVBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHNCQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtZQUFBQTtBQUFBQSxrQkFBQUEsSUFBQUEsVUFBQUEsdUlBQUFB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R0FBQUEsT0FBQUEsRUFBQUEsQ0FBQUEsQ0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsU0FBQUEsSUFBQUE7QUFBQUEsaUJBQUFBLElBQUFBLElBQUFBLEdBQUFBLElBQUFBLEVBQUFBLENBQUFBO1lBQUFBLENBQUFBO1VBQUFBO0FBQUFBLGlCQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsV0FBQUEsTUFBQUEsR0FBQUEsRUFBQUEsS0FBQUEsR0FBQUEsWUFBQUE7QUFBQUEsY0FBQUEsQ0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLFNBQUFBLElBQUFBLElBQUFBO0FBQUFBLGtCQUFBQTtBQUFBQSxrQkFBQUEsQ0FBQUE7QUFBQUE7QUFBQUEsa0JBQUFBLFlBQUFBLE9BQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsT0FBQUEsVUFBQUEsU0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsMkJBQUFBLE1BQUFBLEdBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxrQkFBQUEsVUFBQUEsTUFBQUEsVUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxnQkFBQUEsTUFBQUEsMkNBQUFBLEtBQUFBLEVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtZQUFBQSxFQUFBQSxFQUFBQSxNQUFBQSxNQUFBQSxNQUFBQSxZQUFBQSxPQUFBQSxHQUFBQSxRQUFBQTtBQUFBQSxjQUFBQSxPQUFBQSxLQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsV0FBQUE7Y0FBQUE7QUFBQUEscUJBQUFBLEVBQUFBLEdBQUFBLElBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxNQUFBQSxHQUFBQSxTQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxzQkFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7WUFBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVBQUFBLHVJQUFBQTtVQUFBQTtBQUFBQSxjQUFBQSxJQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtBQUFBQSxpQkFBQUEsRUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsWUFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsRUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxNQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUE7QUFBQUEsY0FBQUEsTUFBQUEsUUFBQUEsR0FBQUEsVUFBQUEsR0FBQUEsT0FBQUE7WUFBQUEsVUFBQUE7QUFBQUEsa0JBQUFBO0FBQUFBLHNCQUFBQTtZQUFBQTtVQUFBQSxFQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsV0FBQUEsUUFBQUEsTUFBQUEsS0FBQUEsR0FBQUEsWUFBQUEsS0FBQUEsR0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLElBQUFBLE1BQUFBLEVBQUFBLEdBQUFBLEtBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEdBQUFBLEVBQUFBLElBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGlCQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLGVBQUFBLE9BQUFBLFdBQUFBLENBQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsR0FBQUE7QUFBQUEs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QUEsU0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsMkJBQUFBLE1BQUFBLEdBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxrQkFBQUEsVUFBQUEsTUFBQUEsVUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxnQkFBQUEsTUFBQUEsMkNBQUFBLEtBQUFBLEVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtZQUFBQSxFQUFBQSxFQUFBQSxNQUFBQSxNQUFBQSxNQUFBQSxZQUFBQSxPQUFBQSxHQUFBQSxRQUFBQTtBQUFBQSxjQUFBQSxPQUFBQSxLQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsV0FBQUE7Y0FBQUE7QUFBQUEscUJBQUFBLEVBQUFBLEdBQUFBLElBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxNQUFBQSxHQUFBQSxTQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxzQkFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7WUFBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVBQUFBLHVJQUFBQTtVQUFBQTtBQUFBQSxjQUFBQSxJQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtBQUFBQSxpQkFBQUEsRUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsWUFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsRUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxNQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFB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WTtBQUFBLElBQ1osSUFBSTtBQUFBLElBQ0osU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsNkJBQTZCO0FBQUEsSUFDN0IsV0FBVztBQUFBLElBQ1gsY0FBYztBQUFBLElBQ2QsZ0JBQWdCO0FBQUEsSUFDaEIsYUFBYTtBQUFBLElBQ2IsaUJBQWlCO0FBQUEsSUFDakIsUUFBUTtBQUFBLElBQ1IsaUJBQWlCO0FBQUEsSUFDakIsa0JBQWtCO0FBQUEsSUFDbEIsT0FBTztBQUFBLElBQ1AsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLElBQ2IsVUFBVTtBQUFBLElBQ1YsUUFBUTtBQUFBLElBQ1IsbUJBQW1CO0FBQUEsSUFDbkIsbUJBQW1CO0FBQUEsSUFDbkIsWUFBWTtBQUFBLElBQ1osY0FBYztBQUFBLElBQ2QsaUJBQWlCO0FBQUEsSUFDakIsV0FBVztBQUFBLElBQ1gsVUFBVTtBQUFBLElBQ1Ysa0JBQWtCO0FBQUEsSUFDbEIsZUFBZTtBQUFBLElBQ2YsNkJBQTZCO0FBQUEsSUFDN0IsZ0JBQWdCO0FBQUEsSUFDaEIsVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sZ0JBQWdCO0FBQUEsSUFDaEIsb0JBQW9CO0FBQUEsSUFDcEIsaUJBQWlCO0FBQUEsSUFDakIsWUFBWTtBQUFBLElBQ1osc0JBQXNCO0FBQUEsSUFDdEIscUJBQXFCO0FBQUEsSUFDckIsbUJBQW1CO0FBQUEsSUFDbkIsV0FBVztBQUFBLElBQ1gsb0JBQW9CO0FBQUEsSUFDcEIscUJBQXFCO0FBQUEsSUFDckIsUUFBUTtBQUFBLElBQ1Isa0JBQWtCO0FBQUEsSUFDbEIsVUFBVTtBQUFBLElBQ1YsaUJBQWlCO0FBQUEsSUFDakIsc0JBQXNCO0FBQUEsSUFDdEIsaUJBQWlCO0FBQUEsSUFDakIsNkJBQTZCO0FBQUEsSUFDN0IsNEJBQTRCO0FBQUEsSUFDNUIscUJBQXFCO0FBQUEsSUFDckIsZ0JBQWdCO0FBQUEsSUFDaEIsWUFBWTtBQUFBLElBQ1osb0JBQW9CO0FBQUEsSUFDcEIsZ0JBQWdCO0FBQUEsSUFDaEIseUJBQXlC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QUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsSUFDUCxXQUFXO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixXQUFXO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixlQUFlO0FBQUEsSUFDZixXQUFXO0FBQUEsSUFDWCxlQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZixZQUFZO0FBQUEsSUFDWixXQUFXO0FBQUEsSUFDWCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixZQUFZO0FBQUEsSUFDWixRQUFRO0FBQUEsSUFDUixTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxlQUFlO0FBQUEsSUFDZixLQUFLO0FBQUEsSUFDTCxXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixRQUFRO0FBQUEsSUFDUixZQUFZO0FBQUEsSUFDWixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxNQUFNO0FBQUEsSUFDTixhQUFhO0FBQUEsSUFDYixXQUFXO0FBQUEsSUFDWCxLQUFLO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixXQUFXO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsSUFDUCxZQUFZO0FBQUEsSUFDWixRQUFRO0FBQUEsSUFDUixhQUFhO0FBQUEsRUFDakI7QUFFQSxNQUFPLGlCQUFROzs7QUMzSmYsZ0JBQU0sVUFBVSxPQUFPLFdBQVk7QUFDL0IsVUFBTSxNQUFNLGdCQUFRLEtBQUssTUFBTSxLQUFLO0FBQ3BDLGFBQVMsS0FBSyxPQUFPLEtBQUssY0FB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O0FBQUEsUUFDL0Q7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7OztBQ0dBLE1BQU0sY0FBYztBQUFBO0FBQUEsSUFFaEIsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDM0csTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDM0csTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDekcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDekcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUE7QUFBQSxJQUczRyxVQUFVLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDbEksUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQ2hJLE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUM5SCxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDOUgsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQzlILFFBQVEsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUNoSSxNQUFNLENBQUMs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SUFBSSxDQUFDO0FBQUEsSUFBRztBQUFFLFdBQU8sVUFBVSxhQUFhLE1BQU0sR0FBRyxZQUFZLFVBQVUsT0FBTyxTQUFVQSxJQUFHO0FBQUUsVUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLE1BQU1BLEVBQUM7QUFBRyxVQUFJLEdBQUc7QUFBRSxVQUFFLFNBQVMsWUFBWSxHQUFHLElBQUk7QUFBRyxZQUFJLElBQUksRUFBRTtBQUFTLGNBQU0sRUFBRSxTQUFTLFlBQVksR0FBRyxJQUFJO0FBQUEsTUFBSTtBQUFFLGFBQU87QUFBQSxJQUFHLEdBQUcsWUFBWSxVQUFVLE9BQU8sT0FBTyxJQUFJLFNBQVUsR0FBRyxHQUFHO0FBQUUsVUFBSSxZQUFZLE9BQU8sR0FBRztBQUFFLFlBQUksSUFBSSxFQUFFLElBQUksSUFBSTtBQUFHLGVBQU8sRUFBRSxPQUFPLE9BQU8sRUFBRSxLQUFLLE1BQU0sR0FBRyxFQUFFLFFBQVEsZ0JBQWdCLFNBQVVELElBQUdDLElBQUc7QUFBRSxjQUFJQyxLQUFJLEVBQUVELEVBQUM7QUFBRyxpQkFBTyxPQUFPLE1BQU0sUUFBUUMsRUFBQyxJQUFJQSxHQUFFLEtBQUssR0FBRyxJQUFJQTtBQUFBLFFBQUksQ0FBQyxDQUFDO0FBQUEsTUFBRztBQUFFLFVBQUksY0FBYyxPQUFPLEdBQUc7QUFBRSxZQUFJLElBQUk7QUFBTSxlQUFPLEVBQUUsT0FBTyxPQUFPLEVBQUUsS0FBSyxNQUFNLEdBQUcsV0FBWTtBQUFFLGNBQUlGLEtBQUk7QUFBVyxpQkFBTyxZQUFZSCxTQUFRRyxHQUFFQSxHQUFFLFNBQVMsQ0FBQyxDQUFDLE1BQU1BLEtBQUksQ0FBQyxFQUFFLE1BQU0sS0FBS0EsRUFBQyxHQUFHLEtBQUssWUFBWUEsSUFBRyxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sTUFBTUEsRUFBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUc7QUFBRSxhQUFPLEVBQUUsT0FBTyxPQUFPLEVBQUUsS0FBSyxNQUFNLEdBQUcsQ0FBQztBQUFBLElBQUcsR0FBRyxZQUFZLE1BQU0sTUFBTSxTQUFT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QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFj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QUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMzQyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVQTtBQUFBLE1BQ1o7QUFBQSxNQUNBLEtBQUssUUFBd0M7QUFBQSxRQUMz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QUFNO0FBQUEsUUFDWCxZQUFZLE1BQU07QUFBQSxRQUNsQixVQUFVLE1BQU07QUFBQTtBQUFBLElBQ2xCLENBQ0YsQ0FDRjtBQUFBLEVBRUo7OztBQ3BUQSxFQUFDLE9BQWUsaUJBQWlCLElBQUk7QUFBQSxJQUNqQztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0o7IiwKICAibmFtZXMiOiBbImhhc093blByb3BlcnR5IiwgImZyb20iLCAiUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSIsICJDb21wb25lbnQiLCAiUHVyZUNvbXBvbmVudCIsICJjcmVhdGVSZWYiLCAiaGFzT3duUHJvcGVydHkiLCAiUmVhY3RFbGVtZW50IiwgInNlbGYiLCAiY3JlYXRlRWxlbWVudCIsICJjbG9uZUVsZW1lbnQiLCAiaXNWYWxpZEVsZW1lbnQiLCAib2JqZWN0IiwgIm1hdGNoIiwgImZ1bmMiLCAidG9BcnJheSIsICJjcmVhdGVDb250ZXh0IiwgImVycm9yIiwgImZvcndhcmRSZWYiLCAicmVuZGVyIiwgIm1lbW8iLCAidXNlQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VSZWR1Y2VyIiwgInJlZHVjZXIiLCAidXNlUmVmIiwgInVzZUVmZmVjdCIsICJ1c2VMYXlvdXRFZmZlY3QiLCAidXNlQ2FsbGJhY2siLCAidXNlTWVtbyIsICJ2YWx1ZSIsICJwcmVmaXgiLCAicHJvdG90eXBlIiwgIm5vZGUiLCAia2V5cyIsICJDaGlsZHJlbiIsICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCAibm9kZSIsICJwZWVrIiwgImxlbmd0aCIsICJpbml0aWFsVGltZSIsICJSZWFjdCIsICJSZWFjdERlYnVnQ3VycmVudEZyYW1lIiwgIkZyYWdtZW50IiwgImhhc093blByb3BlcnR5IiwgInZhbHVlIiwgInByZWZpeCIsICJzYW5pdGl6ZVVSTCIsICJfcmVmIiwgImNhcGl0YWxpemUiLCAidG9rZW4iLCAibm9kZSIsICJtYXRjaCIsICJDb21wb25lbnQiLCAicHJvdG90eXBlIiwgIndvcmtJblByb2dyZXNzIiwgInRvU3RyaW5nIiwgImdldCIsICJzZXQiLCAiZ2V0QWN0aXZlRWxlbWVudCIsICJpc0h5ZHJhdGluZyIsICJ2YWxpZGF0ZVByb3BzIiwgImlzQXJyYXkiLCAib3B0aW9ucyIsICJmdW5jIiwgImlzQ3VzdG9tUHJvcGVydHkiLCAic3RyaW5nIiwgImNoYXJhY3RlciIsICJzdHlsZXMiLCAiZGVsaW1pdGVyIiwgInN0eWxlIiwgInJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMiLCAicG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyIsICJlcnJvciIsICJjYWxsQ2FsbGJhY2siLCAiY3VycmVudCIsICJyb290IiwgInF1ZXVlZEV2ZW50IiwgInByZWZpeGVzIiwgImluZGV4IiwgImxvZyIsICJpc0V2ZW50U3VwcG9ydGVkIiwgImZyb20iLCAibGVuZ3RoIiwgIm5leHQiLCAibm9vcCIsICJjcmVhdGVFbGVtZW50IiwgImNyZWF0ZUluc3RhbmNlIiwgImNhbmNlbFRpbWVvdXQiLCAiaGFzIiwgImN1cnNvciIsICJub3ciLCAiX3F1ZXVlIiwgInJlbmRlckxhbmVzIiwgInVwZGF0ZUZyYWdtZW50IiwgImNoaWxkIiwgInJlY29uY2lsZUNoaWxkRmliZXJzIiwgImlzT2JqZWN0IiwgInZlcnNpb24iLCAicmVkdWNlciIsICJyZW5kZXIiLCAic3VidHJlZVJlbmRlckxhbmVzIiwgImlzSGlkZGVuIiwgImVycm9yJDEiLCAiY29tbWl0VGltZSIsICJoeWRyYXRlIiwgImNyZWF0ZVBvcnRhbCIsICJjdXJyZW50SG9vayIsICJSZWFjdEN1cnJlbnREaXNwYXRjaGVyIiwgIm9iamVjdCIsICJFbGVtZW50IiwgIkZyYWdtZW50IiwgImlzRWxlbWVudCIsICJhc3NpZ24iLCAiaXNWYWxpZEVsZW1lbnQiLCAidmFsaWRhdGUiLCAidmFsdWUiLCAiaSIsICJjaGVja2VyIiwgImhhc093biIsICJjbGFzc05hbWVzIiwgInZhbHVlIiwgInJlcXVpcmVfcmVhY3RfaXNfZGV2ZWxvcG1lbnQiLCAib2JqZWN0IiwgIkVsZW1lbnQiLCAiRnJhZ21lbnQiLCAiaXNFbGVtZW50IiwgInJlcXVpcmVfcmVhY3RfaXMiLCAiZ2V0UHJvdG90eXBlT2YiLCAia2V5cyIsICJ2YWx1ZSIsICJsZW5ndGgiLCAidmFsdWUiLCAibGVuZ3RoIiwgIlN5bWJvbCIsICJTeW1ib2wiLCAiaGFzT3duUHJvcGVydHkiLCAidmFsdWUiLCAidmFsdWUiLCAiU3ltYm9sIiwgInZhbHVlIiwgImlzT2JqZWN0IiwgInZhbHVlIiwgImlzT2JqZWN0IiwgImlzRnVuY3Rpb24iLCAidmFsdWUiLCAiZnVuYyIsICJmdW5jIiwgImlzRnVuY3Rpb24iLCAiaXNPYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAidmFsdWUiLCAib2JqZWN0IiwgIm9iamVjdCIsICJ2YWx1ZSIsICJNYXAiLCAiaGFzT3duUHJvcGVydHkiLCAiaGFzT3duUHJvcGVydHkiLCAidmFsdWUiLCAibGVuZ3RoIiwgIk1hcCIsICJ2YWx1ZSIsICJ2YWx1ZSIsICJzaXplIiwgImxlbmd0aCIsICJNYXAiLCAidmFsdWUiLCAidmFsdWUiLCAidmFsdWUiLCAibGVuZ3RoIiwgImxlbmd0aCIsICJjYWNoZSIsICJvdGhWYWx1ZSIsICJVaW50OEFycmF5IiwgInZhbHVlIiwgInZhbHVlIiwgIlN5bWJvbCIsICJVaW50OEFycmF5IiwgIm9iamVjdCIsICJsZW5ndGgiLCAiaXNBcnJheSIsICJpc0FycmF5IiwgIm9iamVjdCIsICJsZW5ndGgiLCAidmFsdWUiLCAib2JqZWN0IiwgInZhbHVlIiwgInZhbHVlIiwgImhhc093blByb3BlcnR5IiwgInZhbHVlIiwgIkJ1ZmZlciIsICJpc0J1ZmZlciIsICJ2YWx1ZSIsICJsZW5ndGgiLCAidmFsdWUiLCAidmFsdWUiLCAiZnVuYyIsICJ2YWx1ZSIsICJpc1R5cGVkQXJyYXkiLCAiaXNBcnJheSIsICJpc0J1ZmZlciIsICJpc1R5cGVkQXJyYXkiLCAiaGFzT3duUHJvcGVydHkiLCAidmFsdWUiLCAibGVuZ3RoIiwgInZhbHVlIiwgImZ1bmMiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgImlzRnVuY3Rpb24iLCAidmFsdWUiLCAia2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgIlByb21pc2UiLCAiU2V0IiwgIldlYWtNYXAiLCAiTWFwIiwgIlByb21pc2UiLCAiU2V0IiwgIldlYWtNYXAiLCAidmFsdWUiLCAiaXNBcnJheSIsICJpc0J1ZmZlciIsICJpc1R5cGVkQXJyYXkiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgInZhbHVlIiwgImlzRXF1YWwiLCAidmFsdWUiLCAiZ2xvYmFsIiwgImlzQXJyYXkiLCAiaXNPYmplY3QiLCAiaXNVbmRlZmluZWQiLCAiaXNOdW1iZXIiLCAiaXNEYXRlIiwgImV4dGVuZCIsICJmb3JtYXQiLCAibG9jYWxlIiwgInRvIiwgImZyb20iLCAiaXNGdW5jdGlvbiIsICJrZXlzIiwgImNhbGVuZGFyIiwgIm5vdyIsICJzaWduIiwgInRva2VuIiwgIm9yZGluYWwiLCAiZnVuYyIsICJsZW5ndGgiLCAiaSIsICJzdHJpbmciLCAiZGlmZiIsICJsb2NhbGVEYXRhIiwgInZhbHVlIiwgImdldCIsICJob3VycyIsICJtaW51dGVzIiwgIm5leHQiLCAibWF0Y2giLCAiZGVmYXVsdHMiLCAidG9rZW5zIiwgIm1lcmlkaWVtIiwgIm1pbiIsICJtYXgiLCAieWVhcnMiLCAibW9udGhzIiwgIndlZWtzIiwgImRheXMiLCAic2Vjb25kcyIsICJtaWxsaXNlY29uZHMiLCAib2Zmc2V0IiwgIm1hdGNoZXMiLCAiYmFzZSIsICJpc1N0cmluZyIsICJwcm9wZXJ0eSIsICJ0b1N0cmluZyIsICJwcmVmaXgiLCAidG9BcnJheSIsICJ0b0pTT04iLCAiYWJzIiwgInJvdW5kIiwgInRocmVzaG9sZHMiLCAiaXNBcnJheSIsICJpc1N0cmluZyIsICJ2YWx1ZSIsICJpc0Jvb2xlYW4iLCAidmFsdWUiLCAiaXNOdW1iZXIiLCAidmFsdWUiLCAiaXNOdW1iZXIiLCAiaXNOYU4iLCAidmFsdWUiLCAiZ2xvYmFsIiwgIm51bWVyYWwiLCAiVkVSU0lPTiIsICJkZWZhdWx0cyIsICJ2YWx1ZSIsICJhYnMiLCAibWluIiwgIm1heCIsICJzdHJpbmciLCAibmV4dCIsICJwcm9wZXJ0eSIsICJudW0iLCAidmFsdWUiLCAiaXNBcnJheSIsICJ2YWx1ZSIsICJvYmplY3QiLCAibWVtb2l6ZSIsICJmdW5jIiwgImNhY2hlIiwgIm1lbW9pemUiLCAiZnVuYyIsICJjYWNoZSIsICJzdHJpbmciLCAibWF0Y2giLCAibGVuZ3RoIiwgIlN5bWJvbCIsICJpc0FycmF5IiwgInZhbHVlIiwgInRvU3RyaW5nIiwgInZhbHVlIiwgImlzQXJyYXkiLCAidG9TdHJpbmciLCAidmFsdWUiLCAib2JqZWN0IiwgInZhbHVlIiwgIm9iamVjdCIsICJsZW5ndGgiLCAiZ2V0IiwgIm9iamVjdCIsICJsZW5ndGgiLCAiZnVuYyIsICJvYmplY3QiLCAidmFsdWUiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgInZhbHVlIiwgIm9iamVjdCIsICJsZW5ndGgiLCAia2V5cyIsICJvYmplY3QiLCAib2JqZWN0IiwgImlzT2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJvYmplY3QiLCAib2JqZWN0IiwgIkJ1ZmZlciIsICJsZW5ndGgiLCAibGVuZ3RoIiwgIm9iamVjdCIsICJvYmplY3QiLCAib2JqZWN0IiwgIm9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJsZW5ndGgiLCAiVWludDhBcnJheSIsICJTeW1ib2wiLCAib2JqZWN0IiwgImlzT2JqZWN0IiwgIm9iamVjdCIsICJvYmplY3QiLCAidmFsdWUiLCAidmFsdWUiLCAiaXNBcnJheSIsICJpc0J1ZmZlciIsICJpc09iamVjdCIsICJrZXlzIiwgInZhbHVlIiwgIm9iamVjdCIsICJrZXkiLCAibGVuZ3RoIiwgImxlbmd0aCIsICJvYmplY3QiLCAib2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgImlzUGxhaW5PYmplY3QiLCAidmFsdWUiLCAiaXNQbGFpbk9iamVjdCIsICJ2YWx1ZSIsICJTeW1ib2wiLCAiaXNBcnJheSIsICJ2YWx1ZSIsICJsZW5ndGgiLCAidmFsdWUiLCAiZmxhdHRlbiIsICJsZW5ndGgiLCAiZnVuYyIsICJmdW5jIiwgImxlbmd0aCIsICJ2YWx1ZSIsICJ2YWx1ZSIsICJmdW5jIiwgInN0cmluZyIsICJmdW5jIiwgImZsYXR0ZW4iLCAiZnVuYyIsICJvYmplY3QiLCAibGVuZ3RoIiwgInJlcXVpcmVfcmVhY3RfaXNfZGV2ZWxvcG1lbnQiLCAib2JqZWN0IiwgIkVsZW1lbnQiLCAiRnJhZ21lbnQiLCAiaXNFbGVtZW50IiwgInJlcXVpcmVfcmVhY3RfaXMiLCAiZW5jb2RlIiwgInZhbHVlIiwgInByZWZpeCIsICJtYXRjaCIsICJiYXNlIiwgInBhcnNlIiwgInZhbHVlIiwgImNoYXIiLCAidG9TdHJpbmciLCAic3RyaW5naWZ5IiwgInRvU3RyaW5nIiwgImVzY2FwZVJlZ0V4cCIsICJzdHJpbmciLCAiX2NsYXNzQ2FsbENoZWNrIiwgImdsb2JhbCIsICJ0aGlzIiwgImZhaWxzIiwgImV4ZWMiLCAicmVxdWlyZSQkMCIsICJ0ZXN0IiwgIk5BVElWRV9CSU5EIiwgIkZ1bmN0aW9uUHJvdG90eXBlIiwgImFwcGx5IiwgImNhbGwiLCAidW5jdXJyeVRoaXMiLCAidG9TdHJpbmciLCAic3RyaW5nU2xpY2UiLCAiY2xhc3NvZlJhdyIsICJyZXF1aXJlJCQxIiwgImRvY3VtZW50QWxsIiwgIiRkb2N1bWVudEFsbCIsICJpc0NhbGxhYmxlIiwgImRlc2NyaXB0b3JzIiwgIiRwcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yIiwgInZhbHVlIiwgImNsYXNzb2YiLCAicmVxdWlyZSQkMiIsICIkT2JqZWN0IiwgImlzTnVsbE9yVW5kZWZpbmVkIiwgIiRUeXBlRXJyb3IiLCAicmVxdWlyZU9iamVjdENvZXJjaWJsZSIsICJJbmRleGVkT2JqZWN0IiwgInRvSW5kZXhlZE9iamVjdCIsICJpc09iamVjdCIsICJwYXRoIiwgImdldEJ1aWx0SW4iLCAibWV0aG9kIiwgInVzZXJBZ2VudCIsICJwcm9jZXNzIiwgIkRlbm8iLCAibWF0Y2giLCAidmVyc2lvbiIsICJWOF9WRVJTSU9OIiwgIiRTdHJpbmciLCAic3ltYm9sIiwgIk5BVElWRV9TWU1CT0wiLCAiaXNQcm90b3R5cGVPZiIsICJVU0VfU1lNQk9MX0FTX1VJRCIsICJyZXF1aXJlJCQzIiwgImlzU3ltYm9sIiwgIiRTeW1ib2wiLCAidHJ5VG9TdHJpbmciLCAiYUNhbGxhYmxlIiwgImdldE1ldGhvZCIsICJmdW5jIiwgIm9yZGluYXJ5VG9QcmltaXRpdmUiLCAiZGVmaW5lUHJvcGVydHkiLCAiZGVmaW5lR2xvYmFsUHJvcGVydHkiLCAic3RvcmUiLCAic2hhcmVkTW9kdWxlIiwgInRvT2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgImhhc093biIsICJpZCIsICJ1aWQiLCAic2hhcmVkIiwgInJlcXVpcmUkJDQiLCAicmVxdWlyZSQkNSIsICJTeW1ib2wiLCAiV2VsbEtub3duU3ltYm9sc1N0b3JlIiwgIndlbGxLbm93blN5bWJvbCIsICJ0b1ByaW1pdGl2ZSIsICJ0b1Byb3BlcnR5S2V5IiwgImRvY3VtZW50IiwgIkVYSVNUUyIsICJkb2N1bWVudENyZWF0ZUVsZW1lbnQiLCAiREVTQ1JJUFRPUlMiLCAiY3JlYXRlRWxlbWVudCIsICJwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSIsICJyZXF1aXJlJCQ2IiwgIklFOF9ET01fREVGSU5FIiwgInJlcXVpcmUkJDciLCAiJGdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJpc0ZvcmNlZCIsICJzdHJpbmciLCAiYmluZCIsICJhbk9iamVjdCIsICJWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyIsICIkZGVmaW5lUHJvcGVydHkiLCAiQ09ORklHVVJBQkxFIiwgImRlZmluZVByb3BlcnR5TW9kdWxlIiwgImNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSIsICJvYmplY3QiLCAicmVxdWlyZSQkOCIsICJyZXF1aXJlJCQ5IiwgIkZPUkNFRCIsICIkIiwgIk9iamVjdCIsICJwYXJlbnQiLCAiaXNBcnJheSIsICJmbG9vciIsICJ0cnVuYyIsICJ0b0ludGVnZXJPckluZmluaXR5IiwgIm1pbiIsICJ0b0xlbmd0aCIsICJsZW5ndGhPZkFycmF5TGlrZSIsICJkb2VzTm90RXhjZWVkU2FmZUludGVnZXIiLCAiY3JlYXRlUHJvcGVydHkiLCAiVE9fU1RSSU5HX1RBRyIsICJUT19TVFJJTkdfVEFHX1NVUFBPUlQiLCAiaW5zcGVjdFNvdXJjZSIsICJub29wIiwgImNvbnN0cnVjdCIsICJpc0NvbnN0cnVjdG9yIiwgImNhbGxlZCIsICJTUEVDSUVTIiwgIiRBcnJheSIsICJhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciIsICJhcnJheVNwZWNpZXNDcmVhdGUiLCAibGVuZ3RoIiwgImFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQiLCAicmVxdWlyZSQkMTAiLCAicmVxdWlyZSQkMTEiLCAiY29uY2F0IiwgImkiLCAibWF4IiwgInRvQWJzb2x1dGVJbmRleCIsICJjcmVhdGVNZXRob2QiLCAiaGlkZGVuS2V5cyIsICJwdXNoIiwgImVudW1CdWdLZXlzIiwgImludGVybmFsT2JqZWN0S2V5cyIsICJvYmplY3RLZXlzIiwgImtleXMiLCAiZGVmaW5lUHJvcGVydGllcyIsICJodG1sIiwgInNoYXJlZEtleSIsICJkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlIiwgIlBST1RPVFlQRSIsICJJRV9QUk9UTyIsICJhY3RpdmVYRG9jdW1lbnQiLCAiY3JlYXRlIiwgImdldE93blByb3BlcnR5TmFtZXMiLCAiJGdldE93blByb3BlcnR5TmFtZXMiLCAiYXJyYXlTbGljZSIsICJkZWZpbmVCdWlsdEluIiwgImRlZmluZUJ1aWx0SW5BY2Nlc3NvciIsICJ3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlIiwgIlN5bWJvbFByb3RvdHlwZSIsICJUT19QUklNSVRJVkUiLCAic2V0VG9TdHJpbmdUYWciLCAiV2Vha01hcCIsICJUeXBlRXJyb3IiLCAic2V0IiwgImdldCIsICJzZWxmIiwgInJlcXVpcmUkJDEyIiwgInJlcXVpcmUkJDEzIiwgInJlcXVpcmUkJDE0IiwgInJlcXVpcmUkJDE1IiwgInJlcXVpcmUkJDE2IiwgImdldE93blByb3BlcnR5TmFtZXNNb2R1bGUiLCAicmVxdWlyZSQkMTciLCAicmVxdWlyZSQkMTgiLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlIiwgInJlcXVpcmUkJDE5IiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSIsICJyZXF1aXJlJCQyMCIsICJyZXF1aXJlJCQyMSIsICJyZXF1aXJlJCQyMiIsICJyZXF1aXJlJCQyMyIsICJyZXF1aXJlJCQyNCIsICJyZXF1aXJlJCQyNSIsICJyZXF1aXJlJCQyNiIsICJyZXF1aXJlJCQyNyIsICJyZXF1aXJlJCQyOCIsICJyZXF1aXJlJCQyOSIsICJyZXF1aXJlJCQzMCIsICJyZXF1aXJlJCQzMSIsICJkZWZpbmVXZWxsS25vd25TeW1ib2wiLCAicmVxdWlyZSQkMzIiLCAiZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUiLCAicmVxdWlyZSQkMzMiLCAicmVxdWlyZSQkMzQiLCAiSW50ZXJuYWxTdGF0ZU1vZHVsZSIsICJyZXF1aXJlJCQzNSIsICIkZm9yRWFjaCIsICJyZXF1aXJlJCQzNiIsICJzZXRJbnRlcm5hbFN0YXRlIiwgImdldEludGVybmFsU3RhdGUiLCAiT2JqZWN0UHJvdG90eXBlIiwgIlJhbmdlRXJyb3IiLCAibmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIk5BVElWRV9TWU1CT0xfUkVHSVNUUlkiLCAiU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSIsICJrZXlGb3IiLCAiY2hhckF0IiwgImNoYXJDb2RlQXQiLCAicmVwbGFjZSIsICJwcmV2IiwgIm5leHQiLCAic3RyaW5naWZ5IiwgImdldE93blByb3BlcnR5U3ltYm9scyIsICIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgIkNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiIsICJnZXRQcm90b3R5cGVPZiIsICJJVEVSQVRPUiIsICJCVUdHWV9TQUZBUklfSVRFUkFUT1JTIiwgIkl0ZXJhdG9yUHJvdG90eXBlIiwgIkl0ZXJhdG9ycyIsICJyZXR1cm5UaGlzIiwgImFQb3NzaWJsZVByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJ2YWx1ZXMiLCAiZW50cmllcyIsICJjcmVhdGVJdGVyUmVzdWx0T2JqZWN0IiwgImRlZmluZUl0ZXJhdG9yIiwgIkRPTUl0ZXJhYmxlcyIsICJNRVRBREFUQSIsICJ0aGlzU3ltYm9sVmFsdWUiLCAiaXNSZWdpc3RlcmVkU3ltYm9sIiwgImlzV2VsbEtub3duU3ltYm9sIiwgInBvc2l0aW9uIiwgInNpemUiLCAiV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSIsICJpdGVyYXRvciIsICJfdHlwZW9mIiwgIl9TeW1ib2wiLCAiX1N5bWJvbCRpdGVyYXRvciIsICJvIiwgIl90b1ByaW1pdGl2ZSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfT2JqZWN0JGRlZmluZVByb3BlcnR5IiwgIl9jcmVhdGVDbGFzcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCIsICJtZW1vIiwgImFycmF5TWV0aG9kSXNTdHJpY3QiLCAiSVNfTk9ERSIsICJyZWR1Y2UiLCAiQXJyYXlQcm90b3R5cGUiLCAiSEFTX1NQRUNJRVNfU1VQUE9SVCIsICJmaWx0ZXIiLCAibWFwIiwgImZsYXR0ZW5JbnRvQXJyYXkiLCAiZmxhdE1hcCIsICJjcmVhdGVOZXdEYXRhUGlwZUZyb20iLCAiZnJvbSIsICJEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uIiwgIlNpbXBsZURhdGFQaXBlIiwgIl9zb3VyY2UiLCAiX3RyYW5zZm9ybWVycyIsICJfdGFyZ2V0IiwgIl9jb250ZXh0IiwgIl9jb250ZXh0MiIsICJfY29udGV4dDMiLCAiYWRkIiwgIl9iaW5kSW5zdGFuY2VQcm9wZXJ0eSIsICJfYWRkIiwgInJlbW92ZSIsICJfcmVtb3ZlIiwgInVwZGF0ZSIsICJfdXBkYXRlIiwgImtleSIsICJhbGwiLCAiX3RyYW5zZm9ybUl0ZW1zIiwgInN0YXJ0IiwgIm9uIiwgIl9saXN0ZW5lcnMiLCAic3RvcCIsICJvZmYiLCAiaXRlbXMiLCAiX2NvbnRleHQ0IiwgIl9yZWR1Y2VJbnN0YW5jZVByb3BlcnR5IiwgInRyYW5zZm9ybSIsICJfbmFtZSIsICJwYXlsb2FkIiwgIm9sZERhdGEiLCAiY2FsbGJhY2siLCAiaW5wdXQiLCAiX2ZpbHRlckluc3RhbmNlUHJvcGVydHkiLCAiX21hcEluc3RhbmNlUHJvcGVydHkiLCAiX2ZsYXRNYXBJbnN0YW5jZVByb3BlcnR5IiwgInRvIiwgInRhcmdldCIsICJpdGVyYXRvckNsb3NlIiwgImNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmciLCAiRU5UUklFUyIsICJpc0FycmF5SXRlcmF0b3JNZXRob2QiLCAiZ2V0SXRlcmF0b3JNZXRob2QiLCAiZ2V0SXRlcmF0b3IiLCAiY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uIiwgIl9hcnJheVdpdGhIb2xlcyIsICJfQXJyYXkkaXNBcnJheSIsICJzZXRBcnJheUxlbmd0aCIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX2dldEl0ZXJhdG9yTWV0aG9kIiwgInIiLCAic2xpY2UiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgImFycmF5TGlrZVRvQXJyYXkiLCAiX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9zbGljZWRUb0FycmF5IiwgImFycmF5V2l0aEhvbGVzIiwgIml0ZXJhYmxlVG9BcnJheUxpbWl0IiwgInVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIm5vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgImFycmF5V2l0aG91dEhvbGVzIiwgIml0ZXJhYmxlVG9BcnJheSIsICJub25JdGVyYWJsZVNwcmVhZCIsICJvd25LZXlzIiwgIkZBSUxTX09OX1BSSU1JVElWRVMiLCAiU1RSSUNUX01FVEhPRCIsICJmb3JFYWNoIiwgInJldmVyc2UiLCAiZGVsZXRlUHJvcGVydHlPclRocm93IiwgInNwbGljZSIsICJhc3NpZ24iLCAidmFsaWRhdGVBcmd1bWVudHNMZW5ndGgiLCAiRnVuY3Rpb24iLCAic2NoZWR1bGVyc0ZpeCIsICJzZXRJbnRlcnZhbCIsICJzZXRUaW1lb3V0IiwgIkVtaXR0ZXIiLCAibW9kdWxlIiwgIl9leHRlbmRzIiwgIl9pbmhlcml0c0xvb3NlIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAicm91bmQiLCAiYWJzIiwgIm5vdyIsICJwcm9wZXJ0eSIsICJwcmVmaXgiLCAiZWFjaCIsICJUb3VjaEFjdGlvbiIsICJub2RlIiwgIklucHV0IiwgIlBvaW50ZXJFdmVudElucHV0IiwgInRvQXJyYXkiLCAic29ydCIsICJUb3VjaElucHV0IiwgIk1vdXNlSW5wdXQiLCAicmVtb3ZlTGFzdFRvdWNoIiwgIlRvdWNoTW91c2VJbnB1dCIsICJSZWNvZ25pemVyIiwgImVtaXQiLCAiVGFwUmVjb2duaXplciIsICJBdHRyUmVjb2duaXplciIsICJQYW5SZWNvZ25pemVyIiwgIlN3aXBlUmVjb2duaXplciIsICJQaW5jaFJlY29nbml6ZXIiLCAiUm90YXRlUmVjb2duaXplciIsICJQcmVzc1JlY29nbml6ZXIiLCAiZGVmYXVsdHMiLCAiZGF0YSIsICJNYW5hZ2VyIiwgIlNpbmdsZVRvdWNoSW5wdXQiLCAibG9nIiwgImV4dGVuZCIsICJtZXJnZSIsICJiYXNlIiwgIkhhbW1lciIsICJERUxFVEUiLCAicHVyZURlZXBPYmplY3RBc3NpZ24iLCAiX2xlbiIsICJhcmd1bWVudHMiLCAidXBkYXRlcyIsICJBcnJheSIsICJfa2V5IiwgImRlZXBPYmplY3RBc3NpZ24iLCAiX2NvbmNhdEluc3RhbmNlUHJvcGVydHkiLCAibWVyZ2VkIiwgImRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSIsICJzdHJpcERlbGV0ZSIsICJfbGVuMiIsICJfa2V5MiIsICJhIiwgImIiLCAiRGF0ZSIsICJzZXRUaW1lIiwgImdldFRpbWUiLCAiX2l0ZXJhdG9yIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9SZWZsZWN0JG93bktleXMiLCAiX3N0ZXAiLCAicyIsICJuIiwgImRvbmUiLCAicHJvcCIsICJwcm90b3R5cGUiLCAicHJvcGVydHlJc0VudW1lcmFibGUiLCAiY2xvbmUiLCAiZXJyIiwgImUiLCAiZiIsICJfaSIsICJfT2JqZWN0JGtleXMiLCAiX09iamVjdCRrZXlzMiIsICJhQ29uc3RydWN0b3IiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICJfc2V0UHJvdG90eXBlT2YiLCAicCIsICJfaW5oZXJpdHMiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9nZXRQcm90b3R5cGVPZiIsICJjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzIiwgImluc3RhbGxFcnJvckNhdXNlIiwgIiRFcnJvciIsICJpdGVyYXRlIiwgIm5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50IiwgInNldFNwZWNpZXMiLCAiYW5JbnN0YW5jZSIsICJzcGVjaWVzQ29uc3RydWN0b3IiLCAiSVNfSU9TIiwgIk1lc3NhZ2VDaGFubmVsIiwgIlN0cmluZyIsICJxdWV1ZSIsICJzZXRJbW1lZGlhdGUiLCAidGFzayIsICJRdWV1ZSIsICJNdXRhdGlvbk9ic2VydmVyIiwgIlByb21pc2UiLCAibWljcm90YXNrIiwgIm5vdGlmeSIsICJwcm9taXNlIiwgImZsdXNoIiwgImhvc3RSZXBvcnRFcnJvcnMiLCAicGVyZm9ybSIsICJJU19ERU5PIiwgIk5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciIsICJOYXRpdmVQcm9taXNlUHJvdG90eXBlIiwgIk5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCIsICJGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiIsICJuZXdQcm9taXNlQ2FwYWJpbGl0eSIsICJuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSIsICJpc1RoZW5hYmxlIiwgInRoZW4iLCAiUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04iLCAiY291bnRlciIsICJwcm9taXNlUmVzb2x2ZSIsICJhbnkiLCAiaXNGdW5jdGlvbiIsICJfT2JqZWN0JGNyZWF0ZSIsICJfT2JqZWN0JGdldFByb3RvdHlwZU9mIiwgIl9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSIsICJfcHVzaEluc3RhbmNlUHJvcGVydHkiLCAiX09iamVjdCRzZXRQcm90b3R5cGVPZiIsICJfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkiLCAiX3JlZ2VuZXJhdG9yUnVudGltZSIsICJ0IiwgImRlZmluZSIsICJ3cmFwIiwgImMiLCAiQXN5bmNJdGVyYXRvciIsICJ1IiwgImgiLCAiaXNFeHRlbnNpYmxlIiwgImZhc3RLZXkiLCAiaW50ZXJuYWxNZXRhZGF0YU1vZHVsZSIsICJpbnRlcm5hbFN0YXRlR2V0dGVyRm9yIiwgImNvbGxlY3Rpb24iLCAiZGVmaW5lQnVpbHRJbnMiLCAiY29sbGVjdGlvblN0cm9uZyIsICJjbGVhciIsICJoYXMiLCAiTWFwIiwgInNvbWUiLCAiV0VCS0lUIiwgImdldFJhbmRvbVZhbHVlcyIsICJybmRzOCIsICJybmciLCAiYnl0ZVRvSGV4IiwgImlzSWQiLCAib3B0aW9ucyIsICJkZWxheSIsICJJbmZpbml0eSIsICJzZXRPcHRpb25zIiwgIl9mbHVzaElmTmVlZGVkIiwgImRlc3Ryb3kiLCAiX2V4dGVuZGVkIiwgIm1ldGhvZHMiLCAib3JpZ2luYWwiLCAibmFtZSIsICJtZSIsICJFcnJvciIsICJhcmdzIiwgImZuIiwgImNvbnRleHQiLCAiZW50cnkiLCAiX3F1ZXVlIiwgIl90aGlzIiwgIl90aW1lb3V0IiwgImNsZWFyVGltZW91dCIsICJfc2V0VGltZW91dCIsICJfc3BsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJ1bmRlZmluZWQiLCAiRGF0YVNldFBhcnQiLCAiX3RyaWdnZXIiLCAiZXZlbnQiLCAic2VuZGVySWQiLCAiX3N1YnNjcmliZXJzIiwgInN1YnNjcmliZXIiLCAiU2V0IiwgIkRhdGFTdHJlYW0iLCAicGFpcnMiLCAiX3BhaXJzIiwgIm1hcmsiLCAiX3N0ZXAkdmFsdWUiLCAiaXRlbSIsICJ2YWx1ZSQiLCAidDAiLCAiZmluaXNoIiwgIl9pdGVyYXRvcjIiLCAiX3N0ZXAyIiwgIl9zdGVwMiR2YWx1ZSIsICJlbnRyaWVzJCIsICJfaXRlcmF0b3IzIiwgIl9zdGVwMyIsICJfc3RlcDMkdmFsdWUiLCAia2V5cyQiLCAiX2l0ZXJhdG9yNCIsICJfc3RlcDQiLCAiX3N0ZXA0JHZhbHVlIiwgInZhbHVlcyQiLCAidG9JZEFycmF5IiwgIl9jb250ZXh0NSIsICJwYWlyIiwgInRvSXRlbUFycmF5IiwgIl9jb250ZXh0NiIsICJ0b0VudHJ5QXJyYXkiLCAidG9PYmplY3RNYXAiLCAiX2l0ZXJhdG9yNSIsICJfc3RlcDUiLCAiX3N0ZXA1JHZhbHVlIiwgInRvTWFwIiwgIl9NYXAiLCAidG9JZFNldCIsICJfU2V0IiwgInRvSXRlbVNldCIsICJjYWNoZSIsICJkaXN0aW5jdCIsICJfaXRlcmF0b3I2IiwgIl9zdGVwNiIsICJfc3RlcDYkdmFsdWUiLCAiX1N5bWJvbCRpdGVyYXRvcjIiLCAiX2NhbGxlZSIsICJfaXRlcmF0b3I3IiwgIl9zdGVwNyIsICJfc3RlcDckdmFsdWUiLCAiX2NhbGxlZSQiLCAiX2NvbnRleHQ3IiwgIl9pdGVyYXRvcjgiLCAiX3N0ZXA4IiwgIl9zdGVwOCR2YWx1ZSIsICJfY2FsbGVlMiIsICJfaXRlcmF0b3I5IiwgIl9zdGVwOSIsICJfc3RlcDkkdmFsdWUiLCAiX2NhbGxlZTIkIiwgIl9jb250ZXh0OCIsICJpdGVyIiwgIl9nZXRJdGVyYXRvciIsICJjdXJyIiwgIm1heEl0ZW0iLCAibWF4VmFsdWUiLCAiX2N1cnIkdmFsdWUiLCAibWluSXRlbSIsICJtaW5WYWx1ZSIsICJfY3VyciR2YWx1ZTIiLCAiYWNjdW11bGF0b3IiLCAiX2l0ZXJhdG9yMTAiLCAiX3N0ZXAxMCIsICJfc3RlcDEwJHZhbHVlIiwgIl9jb250ZXh0OSIsICJfc29ydEluc3RhbmNlUHJvcGVydHkiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJpZEEiLCAiaXRlbUEiLCAiX3JlZjQiLCAiaWRCIiwgIml0ZW1CIiwgImVuc3VyZUZ1bGxJdGVtIiwgImlkUHJvcCIsICJ1dWlkNCIsICJEYXRhU2V0IiwgIl9EYXRhU2V0UGFydCIsICJfc3VwZXIiLCAiX2NyZWF0ZVN1cGVyIiwgIl9vcHRpb25zIiwgIl9kYXRhIiwgIl9pZFByb3AiLCAiZmllbGRJZCIsICJfdGhpczIiLCAiYWRkZWRJZHMiLCAiaWRzVG9BZGQiLCAiZCIsICJfc29tZUluc3RhbmNlUHJvcGVydHkiLCAibGVuIiwgIl9hZGRJdGVtIiwgIl90aGlzMyIsICJ1cGRhdGVkSWRzIiwgInVwZGF0ZWREYXRhIiwgImFkZE9yVXBkYXRlIiwgIm9yaWdJZCIsICJmdWxsSXRlbSIsICJvbGRJdGVtIiwgIl9PYmplY3QkYXNzaWduIiwgIl91cGRhdGVJdGVtIiwgImNvbnNvbGUiLCAid2FybiIsICJwcm9wcyIsICJ1cGRhdGVPbmx5IiwgIl90aGlzNCIsICJ1cGRhdGVFdmVudERhdGEiLCAiZmlyc3QiLCAic2Vjb25kIiwgImlkcyIsICJyZXR1cm5UeXBlIiwgIml0ZW1JZHMiLCAiaXRlbUlkIiwgIl9rZXlzSW5zdGFuY2VQcm9wZXJ0eSIsICJvcmRlciIsICJfc29ydCIsICJmaWVsZHMiLCAiX2ZpbHRlckZpZWxkcyIsICJyZXN1bHQiLCAicmVzdWx0YW50IiwgIl9pdGVtIiwgImdldElkcyIsICJnZXREYXRhU2V0IiwgIm1hcHBlZEl0ZW1zIiwgImZpbHRlcmVkSXRlbSIsICJmaWVsZCIsICJhdiIsICJidiIsICJyZW1vdmVkSWRzIiwgInJlbW92ZWRJdGVtcyIsICJpZGVudCIsICJkZWxldGUiLCAibWF4RmllbGQiLCAiX3ZhbHVlc0luc3RhbmNlUHJvcGVydHkiLCAiaXRlbUZpZWxkIiwgIm1pbkZpZWxkIiwgImNvdW50IiwgImV4aXN0cyIsICJqIiwgIl9KU09OJHN0cmluZ2lmeSIsICJfb2JqZWN0U3ByZWFkIiwgInN0cmVhbSIsICJfZW50cmllc0luc3RhbmNlUHJvcGVydHkiLCAiRGF0YVZpZXciLCAiX2xpc3RlbmVyIiwgIl9vbkV2ZW50IiwgInNldERhdGEiLCAiX2lkcyIsICJyZWZyZXNoIiwgIm9sZElkcyIsICJuZXdJZHMiLCAiZXJyb3IiLCAidmlld09wdGlvbnMiLCAidGhpc0ZpbHRlciIsICJvcHRpb25zRmlsdGVyIiwgImRlZmF1bHRGaWx0ZXIiLCAiZGlzcG9zZSIsICJfdGhpcyRfZGF0YSIsICJtZXNzYWdlIiwgInJlcGxhY2VtZW50IiwgImNvbmZpZ3VyYWJsZSIsICJwYXJhbXMiLCAib2xkSXRlbXMiLCAidXBkYXRlZEl0ZW1zIiwgImlzRGF0YVNldExpa2UiLCAidiIsICJpc0RhdGFWaWV3TGlrZSIsICJjaGVjayIsICJpdCIsICJNYXRoIiwgImdsb2JhbCIsICJnbG9iYWxUaGlzIiwgIndpbmRvdyIsICJzZWxmIiwgInRoaXMiLCAiRnVuY3Rpb24iLCAiZmFpbHMiLCAiZXhlYyIsICJlcnJvciIsICJmdW5jdGlvbkJpbmROYXRpdmUiLCAicmVxdWlyZSQkMCIsICJ0ZXN0IiwgImJpbmQiLCAiaGFzT3duUHJvcGVydHkiLCAiTkFUSVZFX0JJTkQiLCAiRnVuY3Rpb25Qcm90b3R5cGUiLCAicHJvdG90eXBlIiwgImFwcGx5IiwgImNhbGwiLCAiZnVuY3Rpb25BcHBseSIsICJSZWZsZWN0IiwgImFyZ3VtZW50cyIsICJ1bmN1cnJ5VGhpc1dpdGhCaW5kIiwgImZ1bmN0aW9uVW5jdXJyeVRoaXMiLCAiZm4iLCAidW5jdXJyeVRoaXMiLCAidG9TdHJpbmciLCAic3RyaW5nU2xpY2UiLCAic2xpY2UiLCAiY2xhc3NvZlJhdyIsICJyZXF1aXJlJCQxIiwgImZ1bmN0aW9uVW5jdXJyeVRoaXNDbGF1c2UiLCAiZG9jdW1lbnRBbGwiLCAiZG9jdW1lbnQiLCAiYWxsIiwgImRvY3VtZW50QWxsXzEiLCAiSVNfSFRNTEREQSIsICJpc0NhbGxhYmxlIiwgImFyZ3VtZW50IiwgImRlc2NyaXB0b3JzIiwgIk9iamVjdCIsICJkZWZpbmVQcm9wZXJ0eSIsICJnZXQiLCAiZnVuY3Rpb25DYWxsIiwgIiRwcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiTkFTSE9STl9CVUciLCAib2JqZWN0UHJvcGVydHlJc0VudW1lcmFibGUiLCAiZiIsICJWIiwgImRlc2NyaXB0b3IiLCAiZW51bWVyYWJsZSIsICJtYXRjaCIsICJ2ZXJzaW9uIiwgImNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciIsICJiaXRtYXAiLCAidmFsdWUiLCAiY29uZmlndXJhYmxlIiwgIndyaXRhYmxlIiwgImNsYXNzb2YiLCAicmVxdWlyZSQkMiIsICIkT2JqZWN0IiwgInNwbGl0IiwgImluZGV4ZWRPYmplY3QiLCAiaXNOdWxsT3JVbmRlZmluZWQiLCAiJFR5cGVFcnJvciIsICJUeXBlRXJyb3IiLCAicmVxdWlyZU9iamVjdENvZXJjaWJsZSIsICJJbmRleGVkT2JqZWN0IiwgInRvSW5kZXhlZE9iamVjdCIsICJpc09iamVjdCIsICJwYXRoIiwgImFGdW5jdGlvbiIsICJ2YXJpYWJsZSIsICJnZXRCdWlsdEluIiwgIm5hbWVzcGFjZSIsICJtZXRob2QiLCAibGVuZ3RoIiwgIm9iamVjdElzUHJvdG90eXBlT2YiLCAiaXNQcm90b3R5cGVPZiIsICJlbmdpbmVVc2VyQWdlbnQiLCAibmF2aWdhdG9yIiwgIlN0cmluZyIsICJ1c2VyQWdlbnQiLCAicHJvY2VzcyIsICJEZW5vIiwgInZlcnNpb25zIiwgInY4IiwgImVuZ2luZVY4VmVyc2lvbiIsICJWOF9WRVJTSU9OIiwgIiRTdHJpbmciLCAic3ltYm9sQ29uc3RydWN0b3JEZXRlY3Rpb24iLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgInN5bWJvbCIsICJTeW1ib2wiLCAic2hhbSIsICJ1c2VTeW1ib2xBc1VpZCIsICJpdGVyYXRvciIsICJpc1N5bWJvbCIsICJyZXF1aXJlJCQzIiwgIiRTeW1ib2wiLCAidHJ5VG9TdHJpbmciLCAiYUNhbGxhYmxlIiwgImdldE1ldGhvZCIsICJQIiwgImZ1bmMiLCAiZGVmaW5lR2xvYmFsUHJvcGVydHkiLCAia2V5IiwgIlNIQVJFRCIsICJzaGFyZWRTdG9yZSIsICJzdG9yZSIsICJzaGFyZWRNb2R1bGUiLCAicHVzaCIsICJtb2RlIiwgImNvcHlyaWdodCIsICJsaWNlbnNlIiwgInNvdXJjZSIsICJ0b09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eV8xIiwgImhhc093biIsICJpZCIsICJwb3N0Zml4IiwgInJhbmRvbSIsICJ1aWQiLCAic2hhcmVkIiwgIk5BVElWRV9TWU1CT0wiLCAicmVxdWlyZSQkNCIsICJVU0VfU1lNQk9MX0FTX1VJRCIsICJyZXF1aXJlJCQ1IiwgIldlbGxLbm93blN5bWJvbHNTdG9yZSIsICJjcmVhdGVXZWxsS25vd25TeW1ib2wiLCAid2l0aG91dFNldHRlciIsICJ3ZWxsS25vd25TeW1ib2wiLCAibmFtZSIsICJvcmRpbmFyeVRvUHJpbWl0aXZlIiwgImlucHV0IiwgInByZWYiLCAidmFsIiwgInZhbHVlT2YiLCAiVE9fUFJJTUlUSVZFIiwgInRvUHJpbWl0aXZlIiwgInJlc3VsdCIsICJleG90aWNUb1ByaW0iLCAidG9Qcm9wZXJ0eUtleSIsICJFWElTVFMiLCAiY3JlYXRlRWxlbWVudCIsICJkb2N1bWVudENyZWF0ZUVsZW1lbnQiLCAiaWU4RG9tRGVmaW5lIiwgImEiLCAiREVTQ1JJUFRPUlMiLCAicHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUiLCAicmVxdWlyZSQkNiIsICJJRThfRE9NX0RFRklORSIsICJyZXF1aXJlJCQ3IiwgIiRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAib2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIk8iLCAicmVwbGFjZW1lbnQiLCAiaXNGb3JjZWQiLCAiZmVhdHVyZSIsICJkZXRlY3Rpb24iLCAiZGF0YSIsICJub3JtYWxpemUiLCAiUE9MWUZJTEwiLCAiTkFUSVZFIiwgInN0cmluZyIsICJyZXBsYWNlIiwgInRvTG93ZXJDYXNlIiwgImlzRm9yY2VkXzEiLCAiZnVuY3Rpb25CaW5kQ29udGV4dCIsICJ0aGF0IiwgInY4UHJvdG90eXBlRGVmaW5lQnVnIiwgImFuT2JqZWN0IiwgIlY4X1BST1RPVFlQRV9ERUZJTkVfQlVHIiwgIiRkZWZpbmVQcm9wZXJ0eSIsICJFTlVNRVJBQkxFIiwgIkNPTkZJR1VSQUJMRSIsICJXUklUQUJMRSIsICJvYmplY3REZWZpbmVQcm9wZXJ0eSIsICJBdHRyaWJ1dGVzIiwgImN1cnJlbnQiLCAiZGVmaW5lUHJvcGVydHlNb2R1bGUiLCAiY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5IiwgIm9iamVjdCIsICJyZXF1aXJlJCQ4IiwgInJlcXVpcmUkJDkiLCAid3JhcENvbnN0cnVjdG9yIiwgIk5hdGl2ZUNvbnN0cnVjdG9yIiwgIldyYXBwZXIiLCAiYiIsICJjIiwgIl9leHBvcnQiLCAib3B0aW9ucyIsICJGT1JDRUQiLCAiVVNFX05BVElWRSIsICJWSVJUVUFMX1BST1RPVFlQRSIsICJzb3VyY2VQcm9wZXJ0eSIsICJ0YXJnZXRQcm9wZXJ0eSIsICJuYXRpdmVQcm9wZXJ0eSIsICJyZXN1bHRQcm9wZXJ0eSIsICJUQVJHRVQiLCAidGFyZ2V0IiwgIkdMT0JBTCIsICJTVEFUSUMiLCAic3RhdCIsICJQUk9UTyIsICJwcm90byIsICJuYXRpdmVTb3VyY2UiLCAidGFyZ2V0UHJvdG90eXBlIiwgImZvcmNlZCIsICJkb250Q2FsbEdldFNldCIsICJ3cmFwIiwgInJlYWwiLCAiY2VpbCIsICJmbG9vciIsICJ0cnVuYyIsICJ4IiwgIm4iLCAidG9JbnRlZ2VyT3JJbmZpbml0eSIsICJudW1iZXIiLCAibWF4IiwgIm1pbiIsICJ0b0Fic29sdXRlSW5kZXgiLCAiaW5kZXgiLCAiaW50ZWdlciIsICJ0b0xlbmd0aCIsICJsZW5ndGhPZkFycmF5TGlrZSIsICJvYmoiLCAiY3JlYXRlTWV0aG9kIiwgIklTX0lOQ0xVREVTIiwgIiR0aGlzIiwgImVsIiwgImZyb21JbmRleCIsICJhcnJheUluY2x1ZGVzIiwgImluY2x1ZGVzIiwgImluZGV4T2YiLCAiaGlkZGVuS2V5cyIsICJvYmplY3RLZXlzSW50ZXJuYWwiLCAibmFtZXMiLCAiaSIsICJlbnVtQnVnS2V5cyIsICJpbnRlcm5hbE9iamVjdEtleXMiLCAib2JqZWN0S2V5cyIsICJrZXlzIiwgIm9iamVjdEdldE93blByb3BlcnR5U3ltYm9scyIsICJnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUiLCAiJGFzc2lnbiIsICJhc3NpZ24iLCAiY29uY2F0IiwgIm9iamVjdEFzc2lnbiIsICJBIiwgIkIiLCAiYWxwaGFiZXQiLCAiZm9yRWFjaCIsICJjaHIiLCAiam9pbiIsICJUIiwgImFyZ3VtZW50c0xlbmd0aCIsICJTIiwgImoiLCAiYXJpdHkiLCAiYXJyYXlTbGljZSIsICIkRnVuY3Rpb24iLCAiZmFjdG9yaWVzIiwgImZ1bmN0aW9uQmluZCIsICJGIiwgIlByb3RvdHlwZSIsICJwYXJ0QXJncyIsICJib3VuZEZ1bmN0aW9uIiwgImFyZ3MiLCAiQyIsICJhcmdzTGVuZ3RoIiwgImxpc3QiLCAiZW50cnlWaXJ0dWFsIiwgIkNPTlNUUlVDVE9SIiwgInBhcmVudCIsICJvd24iLCAiZHJhd0NpcmNsZSIsICJjdHgiLCAieSIsICJyIiwgImJlZ2luUGF0aCIsICJhcmMiLCAiUEkiLCAiY2xvc2VQYXRoIiwgImRyYXdSb3VuZFJlY3QiLCAidyIsICJoIiwgInIyZCIsICJtb3ZlVG8iLCAibGluZVRvIiwgImRyYXdFbGxpcHNlIiwgImthcHBhIiwgIm94IiwgIm95IiwgInhlIiwgInllIiwgInhtIiwgInltIiwgImJlemllckN1cnZlVG8iLCAiZHJhd0RhdGFiYXNlIiwgImhFbGxpcHNlIiwgInltYiIsICJ5ZWIiLCAiZHJhd0Rhc2hlZExpbmUiLCAieDIiLCAieTIiLCAicGF0dGVybiIsICJwYXR0ZXJuTGVuZ3RoIiwgImR4IiwgImR5IiwgInNsb3BlIiwgImRpc3RSZW1haW5pbmciLCAic3FydCIsICJwYXR0ZXJuSW5kZXgiLCAiZHJhdyIsICJ4U3RlcCIsICJkYXNoTGVuZ3RoIiwgInNoYXBlTWFwIiwgImNpcmNsZSIsICJkYXNoZWRMaW5lIiwgImRhdGFiYXNlIiwgImRpYW1vbmQiLCAiZWxsaXBzZSIsICJlbGxpcHNlX3ZpcyIsICJoZXhhZ29uIiwgImNvcyIsICJzaW4iLCAicm91bmRSZWN0IiwgInNxdWFyZSIsICJyZWN0IiwgInN0YXIiLCAicmFkaXVzIiwgInRyaWFuZ2xlIiwgInMiLCAiczIiLCAiaXIiLCAidHJpYW5nbGVEb3duIiwgInQiLCAiRW1pdHRlciIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJvbiIsICJhZGRFdmVudExpc3RlbmVyIiwgImV2ZW50IiwgIl9jYWxsYmFja3MiLCAib25jZSIsICJvZmYiLCAicmVtb3ZlTGlzdGVuZXIiLCAicmVtb3ZlQWxsTGlzdGVuZXJzIiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAiY2IiLCAiY2FsbGJhY2tzIiwgInNwbGljZSIsICJlbWl0IiwgIkFycmF5IiwgImxlbiIsICJsaXN0ZW5lcnMiLCAiaGFzTGlzdGVuZXJzIiwgInNldCIsICJoYXMiLCAidG9TdHJpbmdUYWdTdXBwb3J0IiwgIlRPX1NUUklOR19UQUdfU1VQUE9SVCIsICJUT19TVFJJTkdfVEFHIiwgIkNPUlJFQ1RfQVJHVU1FTlRTIiwgInRhZyIsICJjYWxsZWUiLCAiY2hhckF0IiwgImNoYXJDb2RlQXQiLCAiQ09OVkVSVF9UT19TVFJJTkciLCAicG9zIiwgImZpcnN0IiwgInNlY29uZCIsICJwb3NpdGlvbiIsICJzaXplIiwgInN0cmluZ011bHRpYnl0ZSIsICJjb2RlQXQiLCAiV2Vha01hcCIsICJ3ZWFrTWFwQmFzaWNEZXRlY3Rpb24iLCAic2hhcmVkS2V5IiwgIk5BVElWRV9XRUFLX01BUCIsICJPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCIsICJzdGF0ZSIsICJtZXRhZGF0YSIsICJmYWNhZGUiLCAiU1RBVEUiLCAiaW50ZXJuYWxTdGF0ZSIsICJlbmZvcmNlIiwgImdldHRlckZvciIsICJUWVBFIiwgInR5cGUiLCAiZ2V0RGVzY3JpcHRvciIsICJmdW5jdGlvbk5hbWUiLCAiUFJPUEVSIiwgIm9iamVjdERlZmluZVByb3BlcnRpZXMiLCAiZGVmaW5lUHJvcGVydGllcyIsICJQcm9wZXJ0aWVzIiwgInByb3BzIiwgImFjdGl2ZVhEb2N1bWVudCIsICJodG1sIiwgImRlZmluZVByb3BlcnRpZXNNb2R1bGUiLCAiUFJPVE9UWVBFIiwgIlNDUklQVCIsICJJRV9QUk9UTyIsICJFbXB0eUNvbnN0cnVjdG9yIiwgInNjcmlwdFRhZyIsICJjb250ZW50IiwgIkxUIiwgIk51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgiLCAid3JpdGUiLCAiY2xvc2UiLCAidGVtcCIsICJwYXJlbnRXaW5kb3ciLCAiTnVsbFByb3RvT2JqZWN0IiwgIkFjdGl2ZVhPYmplY3QiLCAiaWZyYW1lRG9jdW1lbnQiLCAiaWZyYW1lIiwgIkpTIiwgImRvbWFpbiIsICJzdHlsZSIsICJkaXNwbGF5IiwgImFwcGVuZENoaWxkIiwgInNyYyIsICJjb250ZW50V2luZG93IiwgIm9wZW4iLCAiSXRlcmF0b3JQcm90b3R5cGUiLCAiUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlIiwgImFycmF5SXRlcmF0b3IiLCAib2JqZWN0Q3JlYXRlIiwgImNyZWF0ZSIsICJjb3JyZWN0UHJvdG90eXBlR2V0dGVyIiwgImNvbnN0cnVjdG9yIiwgImdldFByb3RvdHlwZU9mIiwgIkNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiIsICJPYmplY3RQcm90b3R5cGUiLCAib2JqZWN0R2V0UHJvdG90eXBlT2YiLCAiZGVmaW5lQnVpbHRJbiIsICJJVEVSQVRPUiIsICJCVUdHWV9TQUZBUklfSVRFUkFUT1JTIiwgIk5FV19JVEVSQVRPUl9QUk9UT1RZUEUiLCAiaXRlcmF0b3JzQ29yZSIsICJvYmplY3RUb1N0cmluZyIsICJzZXRUb1N0cmluZ1RhZyIsICJUQUciLCAiU0VUX01FVEhPRCIsICJpdGVyYXRvcnMiLCAiSXRlcmF0b3JzIiwgInJldHVyblRoaXMiLCAidW5jdXJyeVRoaXNBY2Nlc3NvciIsICJhUG9zc2libGVQcm90b3R5cGUiLCAib2JqZWN0U2V0UHJvdG90eXBlT2YiLCAic2V0UHJvdG90eXBlT2YiLCAic2V0dGVyIiwgIkNPUlJFQ1RfU0VUVEVSIiwgIl9fcHJvdG9fXyIsICIkIiwgIkZ1bmN0aW9uTmFtZSIsICJjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yIiwgIkl0ZXJhdG9yQ29uc3RydWN0b3IiLCAiTkFNRSIsICJuZXh0IiwgIkVOVU1FUkFCTEVfTkVYVCIsICJyZXF1aXJlJCQxMCIsICJyZXF1aXJlJCQxMiIsICJJdGVyYXRvcnNDb3JlIiwgInJlcXVpcmUkJDEzIiwgIlBST1BFUl9GVU5DVElPTl9OQU1FIiwgInJlcXVpcmUkJDExIiwgIktFWVMiLCAiVkFMVUVTIiwgIkVOVFJJRVMiLCAiaXRlcmF0b3JEZWZpbmUiLCAiSXRlcmFibGUiLCAiREVGQVVMVCIsICJJU19TRVQiLCAiQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlIiwgIm1ldGhvZHMiLCAiS0VZIiwgImdldEl0ZXJhdGlvbk1ldGhvZCIsICJLSU5EIiwgImRlZmF1bHRJdGVyYXRvciIsICJJdGVyYWJsZVByb3RvdHlwZSIsICJJTkNPUlJFQ1RfVkFMVUVTX05BTUUiLCAibmF0aXZlSXRlcmF0b3IiLCAiYW55TmF0aXZlSXRlcmF0b3IiLCAiZW50cmllcyIsICJ2YWx1ZXMiLCAiY3JlYXRlSXRlclJlc3VsdE9iamVjdCIsICJkb25lIiwgIkludGVybmFsU3RhdGVNb2R1bGUiLCAiZGVmaW5lSXRlcmF0b3IiLCAiU1RSSU5HX0lURVJBVE9SIiwgInNldEludGVybmFsU3RhdGUiLCAiZ2V0SW50ZXJuYWxTdGF0ZSIsICJpdGVyYXRlZCIsICJwb2ludCIsICJ1bmRlZmluZWQiLCAiaXRlcmF0b3JDbG9zZSIsICJraW5kIiwgImlubmVyUmVzdWx0IiwgImlubmVyRXJyb3IiLCAiQXJyYXlQcm90b3R5cGUiLCAiaXNBcnJheUl0ZXJhdG9yTWV0aG9kIiwgImZ1bmN0aW9uVG9TdHJpbmciLCAiaW5zcGVjdFNvdXJjZSIsICJub29wIiwgImVtcHR5IiwgImNvbnN0cnVjdCIsICJjb25zdHJ1Y3RvclJlZ0V4cCIsICJJTkNPUlJFQ1RfVE9fU1RSSU5HIiwgImlzQ29uc3RydWN0b3JNb2Rlcm4iLCAiaXNDb25zdHJ1Y3RvckxlZ2FjeSIsICJpc0NvbnN0cnVjdG9yIiwgImNhbGxlZCIsICJjcmVhdGVQcm9wZXJ0eSIsICJwcm9wZXJ0eUtleSIsICJnZXRJdGVyYXRvck1ldGhvZCIsICJnZXRJdGVyYXRvciIsICJ1c2luZ0l0ZXJhdG9yIiwgIml0ZXJhdG9yTWV0aG9kIiwgImNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmciLCAiJEFycmF5IiwgIlNBRkVfQ0xPU0lORyIsICJpdGVyYXRvcldpdGhSZXR1cm4iLCAicmV0dXJuIiwgImZyb20iLCAiYXJyYXlMaWtlIiwgIklTX0NPTlNUUlVDVE9SIiwgIm1hcGZuIiwgIm1hcHBpbmciLCAic3RlcCIsICJjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24iLCAiU0tJUF9DTE9TSU5HIiwgIklURVJBVElPTl9TVVBQT1JUIiwgIml0ZXJhYmxlIiwgIkFSUkFZX0lURVJBVE9SIiwgImRlZmluZUl0ZXJhdG9yJDEiLCAiQXJndW1lbnRzIiwgImdldEl0ZXJhdG9yTWV0aG9kXzEiLCAiRE9NSXRlcmFibGVzIiwgIkNTU1J1bGVMaXN0IiwgIkNTU1N0eWxlRGVjbGFyYXRpb24iLCAiQ1NTVmFsdWVMaXN0IiwgIkNsaWVudFJlY3RMaXN0IiwgIkRPTVJlY3RMaXN0IiwgIkRPTVN0cmluZ0xpc3QiLCAiRE9NVG9rZW5MaXN0IiwgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0IiwgIkZpbGVMaXN0IiwgIkhUTUxBbGxDb2xsZWN0aW9uIiwgIkhUTUxDb2xsZWN0aW9uIiwgIkhUTUxGb3JtRWxlbWVudCIsICJIVE1MU2VsZWN0RWxlbWVudCIsICJNZWRpYUxpc3QiLCAiTWltZVR5cGVBcnJheSIsICJOYW1lZE5vZGVNYXAiLCAiTm9kZUxpc3QiLCAiUGFpbnRSZXF1ZXN0TGlzdCIsICJQbHVnaW4iLCAiUGx1Z2luQXJyYXkiLCAiU1ZHTGVuZ3RoTGlzdCIsICJTVkdOdW1iZXJMaXN0IiwgIlNWR1BhdGhTZWdMaXN0IiwgIlNWR1BvaW50TGlzdCIsICJTVkdTdHJpbmdMaXN0IiwgIlNWR1RyYW5zZm9ybUxpc3QiLCAiU291cmNlQnVmZmVyTGlzdCIsICJTdHlsZVNoZWV0TGlzdCIsICJUZXh0VHJhY2tDdWVMaXN0IiwgIlRleHRUcmFja0xpc3QiLCAiVG91Y2hMaXN0IiwgIkNPTExFQ1RJT05fTkFNRSIsICJDb2xsZWN0aW9uIiwgIkNvbGxlY3Rpb25Qcm90b3R5cGUiLCAiX2NsYXNzQ2FsbENoZWNrIiwgImluc3RhbmNlIiwgIkNvbnN0cnVjdG9yIiwgIiQkSyIsICJkZXNjIiwgImlzQXJyYXkiLCAiZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyIiwgIlNQRUNJRVMiLCAiYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IiLCAib3JpZ2luYWxBcnJheSIsICJhcnJheVNwZWNpZXNDcmVhdGUiLCAiYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCIsICJNRVRIT0RfTkFNRSIsICJhcnJheSIsICJmb28iLCAiQm9vbGVhbiIsICJJU19DT05DQVRfU1BSRUFEQUJMRSIsICJJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIiwgImlzQ29uY2F0U3ByZWFkYWJsZSIsICJzcHJlYWRhYmxlIiwgImFyZyIsICJrIiwgIkUiLCAib2JqZWN0R2V0T3duUHJvcGVydHlOYW1lcyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImFycmF5U2xpY2VTaW1wbGUiLCAic3RhcnQiLCAiZW5kIiwgImZpbiIsICIkZ2V0T3duUHJvcGVydHlOYW1lcyIsICJ3aW5kb3dOYW1lcyIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwiLCAiZGVmaW5lQnVpbHRJbkFjY2Vzc29yIiwgIndlbGxLbm93blN5bWJvbFdyYXBwZWQiLCAid3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSIsICJ3ZWxsS25vd25TeW1ib2xEZWZpbmUiLCAic3ltYm9sRGVmaW5lVG9QcmltaXRpdmUiLCAiU3ltYm9sUHJvdG90eXBlIiwgImhpbnQiLCAiSVNfTUFQIiwgIklTX0ZJTFRFUiIsICJJU19TT01FIiwgIklTX0VWRVJZIiwgIklTX0ZJTkRfSU5ERVgiLCAiSVNfRklMVEVSX1JFSkVDVCIsICJOT19IT0xFUyIsICJjYWxsYmFja2ZuIiwgInNwZWNpZmljQ3JlYXRlIiwgImFycmF5SXRlcmF0aW9uIiwgIm1hcCIsICJmaWx0ZXIiLCAic29tZSIsICJldmVyeSIsICJmaW5kIiwgImZpbmRJbmRleCIsICJmaWx0ZXJSZWplY3QiLCAiJHRvU3RyaW5nIiwgInJlcXVpcmUkJDE0IiwgIm5hdGl2ZU9iamVjdENyZWF0ZSIsICJyZXF1aXJlJCQxNSIsICJyZXF1aXJlJCQxNiIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlIiwgInJlcXVpcmUkJDE3IiwgImdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCIsICJyZXF1aXJlJCQxOCIsICJyZXF1aXJlJCQxOSIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUiLCAicmVxdWlyZSQkMjAiLCAicmVxdWlyZSQkMjEiLCAicmVxdWlyZSQkMjIiLCAicmVxdWlyZSQkMjMiLCAicmVxdWlyZSQkMjQiLCAicmVxdWlyZSQkMjUiLCAicmVxdWlyZSQkMjYiLCAicmVxdWlyZSQkMjgiLCAicmVxdWlyZSQkMjkiLCAicmVxdWlyZSQkMzAiLCAicmVxdWlyZSQkMzEiLCAiZGVmaW5lV2VsbEtub3duU3ltYm9sIiwgInJlcXVpcmUkJDMyIiwgImRlZmluZVN5bWJvbFRvUHJpbWl0aXZlIiwgInJlcXVpcmUkJDMzIiwgInJlcXVpcmUkJDM0IiwgInJlcXVpcmUkJDM1IiwgIiRmb3JFYWNoIiwgInJlcXVpcmUkJDM2IiwgIkhJRERFTiIsICJyZXF1aXJlJCQyNyIsICJTWU1CT0wiLCAiUmFuZ2VFcnJvciIsICJRT2JqZWN0IiwgIm5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJuYXRpdmVEZWZpbmVQcm9wZXJ0eSIsICJuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzIiwgIm5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlIiwgIkFsbFN5bWJvbHMiLCAiT2JqZWN0UHJvdG90eXBlU3ltYm9scyIsICJVU0VfU0VUVEVSIiwgImZpbmRDaGlsZCIsICJmYWxsYmFja0RlZmluZVByb3BlcnR5IiwgIk9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IiLCAic2V0U3ltYm9sRGVzY3JpcHRvciIsICJkZXNjcmlwdGlvbiIsICIkZGVmaW5lUHJvcGVydGllcyIsICJwcm9wZXJ0aWVzIiwgIiRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiSVNfT0JKRUNUX1BST1RPVFlQRSIsICIkJEkiLCAiJGZvckVhY2gkMSIsICJ1c2VTZXR0ZXIiLCAidXNlU2ltcGxlIiwgInN5bWJvbFJlZ2lzdHJ5RGV0ZWN0aW9uIiwgImtleUZvciIsICJOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIiwgIlN0cmluZ1RvU3ltYm9sUmVnaXN0cnkiLCAiU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSIsICJmb3IiLCAic3ltIiwgImdldFJlcGxhY2VyRnVuY3Rpb24iLCAicmVwbGFjZXIiLCAicmF3TGVuZ3RoIiwgImVsZW1lbnQiLCAia2V5c0xlbmd0aCIsICJyb290IiwgIiRzdHJpbmdpZnkiLCAibnVtYmVyVG9TdHJpbmciLCAidGVzdGVyIiwgImxvdyIsICJoaSIsICJXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04iLCAiSUxMX0ZPUk1FRF9VTklDT0RFIiwgInN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IiwgIiRyZXBsYWNlciIsICJmaXhJbGxGb3JtZWQiLCAib2Zmc2V0IiwgInByZXYiLCAic3RyaW5naWZ5IiwgInNwYWNlIiwgIkpTT04iLCAiTUVUQURBVEEiLCAidGhpc1N5bWJvbFZhbHVlIiwgInN5bWJvbElzUmVnaXN0ZXJlZCIsICJpc1JlZ2lzdGVyZWRTeW1ib2wiLCAiJGlzV2VsbEtub3duU3ltYm9sIiwgImlzV2VsbEtub3duU3ltYm9sIiwgInN5bWJvbEtleXMiLCAic3ltYm9sS2V5c0xlbmd0aCIsICJzeW1ib2xLZXkiLCAic3ltYm9sSXNXZWxsS25vd24iLCAiaXNSZWdpc3RlcmVkIiwgImlzV2VsbEtub3duIiwgIl90eXBlb2YiLCAibyIsICJfU3ltYm9sIiwgIl9TeW1ib2wkaXRlcmF0b3IiLCAiX3RvUHJvcGVydHlLZXkiLCAicHJpbSIsICJfU3ltYm9sJHRvUHJpbWl0aXZlIiwgInJlcyIsICJOdW1iZXIiLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX09iamVjdCRkZWZpbmVQcm9wZXJ0eSIsICJfY3JlYXRlQ2xhc3MiLCAicHJvdG9Qcm9wcyIsICJzdGF0aWNQcm9wcyIsICJhcnJheVNldExlbmd0aCIsICJzZXRBcnJheUxlbmd0aCIsICJwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgiLCAiaXRlbSIsICJhcmdDb3VudCIsICJuYXRpdmVTbGljZSIsICJIQVNfU1BFQ0lFU19TVVBQT1JUIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgImFyciIsICJhcnIyIiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJtaW5MZW4iLCAiX2NvbnRleHQiLCAiYXJyYXlMaWtlVG9BcnJheSIsICJfc2xpY2VJbnN0YW5jZVByb3BlcnR5IiwgIl9BcnJheSRmcm9tIiwgIl9zbGljZWRUb0FycmF5IiwgIl9BcnJheSRpc0FycmF5IiwgImwiLCAiX2dldEl0ZXJhdG9yTWV0aG9kIiwgImUiLCAidSIsICJfcHVzaEluc3RhbmNlUHJvcGVydHkiLCAidW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAibm9uSXRlcmFibGVSZXN0IiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJpdGVyIiwgIm5vbkl0ZXJhYmxlU3ByZWFkIiwgIm93bktleXMiLCAiJG1hcCIsICJuYXRpdmVLZXlzIiwgIiREYXRlIiwgIkRhdGUiLCAidGhpc1RpbWVWYWx1ZSIsICJnZXRUaW1lIiwgIiQkdSIsICJub3ciLCAiYXJyYXlNZXRob2RJc1N0cmljdCIsICJhcnJheUZvckVhY2giLCAibmF0aXZlUmV2ZXJzZSIsICJyZXZlcnNlIiwgIiQkcyIsICJkZWxldGVQcm9wZXJ0eU9yVGhyb3ciLCAiZGVsZXRlQ291bnQiLCAiaW5zZXJ0Q291bnQiLCAiYWN0dWFsRGVsZXRlQ291bnQiLCAidG8iLCAiYWN0dWFsU3RhcnQiLCAiJGluY2x1ZGVzIiwgIk1BVENIIiwgImlzUmVnRXhwIiwgIm5vdEFSZWdFeHAiLCAiY29ycmVjdElzUmVnRXhwTG9naWMiLCAicmVnZXhwIiwgImVycm9yMSIsICJlcnJvcjIiLCAic3RyaW5nSW5kZXhPZiIsICJzZWFyY2hTdHJpbmciLCAiYXJyYXlNZXRob2QiLCAic3RyaW5nTWV0aG9kIiwgIlN0cmluZ1Byb3RvdHlwZSIsICJuYXRpdmVHZXRQcm90b3R5cGVPZiIsICIkZmlsdGVyIiwgIndoaXRlc3BhY2VzIiwgImx0cmltIiwgIlJlZ0V4cCIsICJydHJpbSIsICJzdHJpbmdUcmltIiwgInRyaW0iLCAiJHBhcnNlSW50IiwgInBhcnNlSW50IiwgImhleCIsICJudW1iZXJQYXJzZUludCIsICJyYWRpeCIsICIkaW5kZXhPZiIsICJuYXRpdmVJbmRleE9mIiwgIk5FR0FUSVZFX1pFUk8iLCAic2VhcmNoRWxlbWVudCIsICJEIiwgImVuZ2luZUlzQnVuIiwgIkJ1biIsICJFTkdJTkVfSVNfQlVOIiwgIlVTRVJfQUdFTlQiLCAidmFsaWRhdGVBcmd1bWVudHNMZW5ndGgiLCAicGFzc2VkIiwgInJlcXVpcmVkIiwgIldSQVAiLCAic2NoZWR1bGVyc0ZpeCIsICJzY2hlZHVsZXIiLCAiaGFzVGltZUFyZyIsICJmaXJzdFBhcmFtSW5kZXgiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImJvdW5kQXJncyIsICJwYXJhbXMiLCAiY2FsbGJhY2siLCAic2V0SW50ZXJ2YWwiLCAic2V0VGltZW91dCIsICJmaWxsIiwgImVuZFBvcyIsICJfZXh0ZW5kcyIsICJfaW5oZXJpdHNMb29zZSIsICJzdWJDbGFzcyIsICJzdXBlckNsYXNzIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiUmVmZXJlbmNlRXJyb3IiLCAib3V0cHV0IiwgIm5leHRLZXkiLCAid2luIiwgImFzc2lnbiQxIiwgIlZFTkRPUl9QUkVGSVhFUyIsICJURVNUX0VMRU1FTlQiLCAicm91bmQiLCAiYWJzIiwgInByZWZpeGVkIiwgInByb3BlcnR5IiwgInByZWZpeCIsICJwcm9wIiwgImNhbWVsUHJvcCIsICJ0b1VwcGVyQ2FzZSIsICJQUkVGSVhFRF9UT1VDSF9BQ1RJT04iLCAiTkFUSVZFX1RPVUNIX0FDVElPTiIsICJUT1VDSF9BQ1RJT05fQ09NUFVURSIsICJUT1VDSF9BQ1RJT05fQVVUTyIsICJUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OIiwgIlRPVUNIX0FDVElPTl9OT05FIiwgIlRPVUNIX0FDVElPTl9QQU5fWCIsICJUT1VDSF9BQ1RJT05fUEFOX1kiLCAiVE9VQ0hfQUNUSU9OX01BUCIsICJ0b3VjaE1hcCIsICJjc3NTdXBwb3J0cyIsICJDU1MiLCAic3VwcG9ydHMiLCAiZ2V0VG91Y2hBY3Rpb25Qcm9wcyIsICJTVVBQT1JUX1RPVUNIIiwgIlNVUFBPUlRfUE9JTlRFUl9FVkVOVFMiLCAiU1VQUE9SVF9PTkxZX1RPVUNIIiwgIklOUFVUX1RZUEVfVE9VQ0giLCAiSU5QVVRfVFlQRV9NT1VTRSIsICJDT01QVVRFX0lOVEVSVkFMIiwgIklOUFVUX1NUQVJUIiwgIklOUFVUX0VORCIsICJJTlBVVF9DQU5DRUwiLCAiRElSRUNUSU9OX05PTkUiLCAiRElSRUNUSU9OX0xFRlQiLCAiRElSRUNUSU9OX1JJR0hUIiwgIkRJUkVDVElPTl9VUCIsICJESVJFQ1RJT05fRE9XTiIsICJESVJFQ1RJT05fSE9SSVpPTlRBTCIsICJESVJFQ1RJT05fVkVSVElDQUwiLCAiRElSRUNUSU9OX0FMTCIsICJQUk9QU19YWSIsICJQUk9QU19DTElFTlRfWFkiLCAiZWFjaCIsICJjb250ZXh0IiwgImJvb2xPckZuIiwgImluU3RyIiwgInN0ciIsICJUb3VjaEFjdGlvbiIsICJtYW5hZ2VyIiwgIl9wcm90byIsICJjb21wdXRlIiwgImFjdGlvbnMiLCAidXBkYXRlIiwgInRvdWNoQWN0aW9uIiwgInJlY29nbml6ZXJzIiwgInJlY29nbml6ZXIiLCAiZW5hYmxlIiwgImdldFRvdWNoQWN0aW9uIiwgImhhc1BhblgiLCAiaGFzUGFuWSIsICJwcmV2ZW50RGVmYXVsdHMiLCAic3JjRXZlbnQiLCAiZGlyZWN0aW9uIiwgIm9mZnNldERpcmVjdGlvbiIsICJzZXNzaW9uIiwgInByZXZlbnRlZCIsICJwcmV2ZW50RGVmYXVsdCIsICJoYXNOb25lIiwgImlzVGFwUG9pbnRlciIsICJwb2ludGVycyIsICJpc1RhcE1vdmVtZW50IiwgImRpc3RhbmNlIiwgImlzVGFwVG91Y2hUaW1lIiwgImRlbHRhVGltZSIsICJwcmV2ZW50U3JjIiwgImhhc1BhcmVudCIsICJub2RlIiwgInBhcmVudE5vZGUiLCAiZ2V0Q2VudGVyIiwgInBvaW50ZXJzTGVuZ3RoIiwgImNsaWVudFgiLCAiY2xpZW50WSIsICJzaW1wbGVDbG9uZUlucHV0RGF0YSIsICJ0aW1lU3RhbXAiLCAiY2VudGVyIiwgImRlbHRhWCIsICJkZWx0YVkiLCAiZ2V0RGlzdGFuY2UiLCAicDEiLCAicDIiLCAiZ2V0QW5nbGUiLCAiYXRhbjIiLCAiZ2V0RGlyZWN0aW9uIiwgImdldFZlbG9jaXR5IiwgImNvbXB1dGVJbnB1dERhdGEiLCAiZmlyc3RJbnB1dCIsICJmaXJzdE11bHRpcGxlIiwgIm9mZnNldENlbnRlciIsICJhbmdsZSIsICJvZmZzZXREZWx0YSIsICJwcmV2RGVsdGEiLCAicHJldklucHV0IiwgImV2ZW50VHlwZSIsICJvdmVyYWxsVmVsb2NpdHkiLCAib3ZlcmFsbFZlbG9jaXR5WCIsICJvdmVyYWxsVmVsb2NpdHlZIiwgInNjYWxlIiwgInJvdGF0aW9uIiwgIm1heFBvaW50ZXJzIiwgInZlbG9jaXR5IiwgInZlbG9jaXR5WCIsICJ2ZWxvY2l0eVkiLCAibGFzdCIsICJsYXN0SW50ZXJ2YWwiLCAidiIsICJzcmNFdmVudFRhcmdldCIsICJjb21wb3NlZFBhdGgiLCAiaW5wdXRIYW5kbGVyIiwgInBvaW50ZXJzTGVuIiwgImNoYW5nZWRQb2ludGVyc0xlbiIsICJjaGFuZ2VkUG9pbnRlcnMiLCAiaXNGaXJzdCIsICJpc0ZpbmFsIiwgInJlY29nbml6ZSIsICJzcGxpdFN0ciIsICJhZGRFdmVudExpc3RlbmVycyIsICJ0eXBlcyIsICJyZW1vdmVFdmVudExpc3RlbmVycyIsICJnZXRXaW5kb3dGb3JFbGVtZW50IiwgImRvYyIsICJvd25lckRvY3VtZW50IiwgImRlZmF1bHRWaWV3IiwgIklucHV0IiwgImlucHV0VGFyZ2V0IiwgImRvbUhhbmRsZXIiLCAiZXYiLCAiaW5pdCIsICJldkVsIiwgImV2VGFyZ2V0IiwgImV2V2luIiwgImRlc3Ryb3kiLCAiaW5BcnJheSIsICJmaW5kQnlLZXkiLCAiUE9JTlRFUl9JTlBVVF9NQVAiLCAicG9pbnRlcmRvd24iLCAicG9pbnRlcm1vdmUiLCAicG9pbnRlcnVwIiwgInBvaW50ZXJjYW5jZWwiLCAicG9pbnRlcm91dCIsICJJRTEwX1BPSU5URVJfVFlQRV9FTlVNIiwgIlBPSU5URVJfRUxFTUVOVF9FVkVOVFMiLCAiUE9JTlRFUl9XSU5ET1dfRVZFTlRTIiwgIk1TUG9pbnRlckV2ZW50IiwgIlBvaW50ZXJFdmVudCIsICJQb2ludGVyRXZlbnRJbnB1dCIsICJfSW5wdXQiLCAiX3RoaXMiLCAicG9pbnRlckV2ZW50cyIsICJyZW1vdmVQb2ludGVyIiwgImV2ZW50VHlwZU5vcm1hbGl6ZWQiLCAicG9pbnRlclR5cGUiLCAiaXNUb3VjaCIsICJzdG9yZUluZGV4IiwgInBvaW50ZXJJZCIsICJidXR0b24iLCAidG9BcnJheSIsICJ1bmlxdWVBcnJheSIsICJzb3J0IiwgInJlc3VsdHMiLCAiVE9VQ0hfSU5QVVRfTUFQIiwgInRvdWNoc3RhcnQiLCAidG91Y2htb3ZlIiwgInRvdWNoZW5kIiwgInRvdWNoY2FuY2VsIiwgIlRvdWNoSW5wdXQiLCAidGFyZ2V0SWRzIiwgInRvdWNoZXMiLCAiZ2V0VG91Y2hlcyIsICJ0YXJnZXRUb3VjaGVzIiwgImFsbFRvdWNoZXMiLCAiaWRlbnRpZmllciIsICJjaGFuZ2VkVG91Y2hlcyIsICJjaGFuZ2VkVGFyZ2V0VG91Y2hlcyIsICJ0b3VjaCIsICJNT1VTRV9JTlBVVF9NQVAiLCAibW91c2Vkb3duIiwgIm1vdXNlbW92ZSIsICJtb3VzZXVwIiwgIk1vdXNlSW5wdXQiLCAicHJlc3NlZCIsICJ3aGljaCIsICJERURVUF9USU1FT1VUIiwgInNldExhc3RUb3VjaCIsICJldmVudERhdGEiLCAicHJpbWFyeVRvdWNoIiwgImxhc3RUb3VjaCIsICJsdHMiLCAibGFzdFRvdWNoZXMiLCAicmVjb3JkVG91Y2hlcyIsICJpc1N5bnRoZXRpY0V2ZW50IiwgIlRvdWNoTW91c2VJbnB1dCIsICJfbWFuYWdlciIsICJpbnB1dEV2ZW50IiwgImlucHV0RGF0YSIsICJpc01vdXNlIiwgInNvdXJjZUNhcGFiaWxpdGllcyIsICJmaXJlc1RvdWNoRXZlbnRzIiwgIm1vdXNlIiwgImludm9rZUFycmF5QXJnIiwgIlNUQVRFX0ZBSUxFRCIsICJfdW5pcXVlSWQiLCAiZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlciIsICJvdGhlclJlY29nbml6ZXIiLCAic3RhdGVTdHIiLCAiUmVjb2duaXplciIsICJzaW11bHRhbmVvdXMiLCAicmVxdWlyZUZhaWwiLCAicmVjb2duaXplV2l0aCIsICJkcm9wUmVjb2duaXplV2l0aCIsICJyZXF1aXJlRmFpbHVyZSIsICJkcm9wUmVxdWlyZUZhaWx1cmUiLCAiaGFzUmVxdWlyZUZhaWx1cmVzIiwgImNhblJlY29nbml6ZVdpdGgiLCAiYWRkaXRpb25hbEV2ZW50IiwgInRyeUVtaXQiLCAiY2FuRW1pdCIsICJpbnB1dERhdGFDbG9uZSIsICJyZXNldCIsICJUYXBSZWNvZ25pemVyIiwgIl9SZWNvZ25pemVyIiwgInRhcHMiLCAiaW50ZXJ2YWwiLCAidGltZSIsICJ0aHJlc2hvbGQiLCAicG9zVGhyZXNob2xkIiwgInBUaW1lIiwgInBDZW50ZXIiLCAiX3RpbWVyIiwgIl9pbnB1dCIsICJjb3VudCIsICJfdGhpczIiLCAidmFsaWRQb2ludGVycyIsICJ2YWxpZE1vdmVtZW50IiwgInZhbGlkVG91Y2hUaW1lIiwgImZhaWxUaW1lb3V0IiwgInZhbGlkSW50ZXJ2YWwiLCAidmFsaWRNdWx0aVRhcCIsICJfdGhpczMiLCAiY2xlYXJUaW1lb3V0IiwgInRhcENvdW50IiwgIkF0dHJSZWNvZ25pemVyIiwgImF0dHJUZXN0IiwgIm9wdGlvblBvaW50ZXJzIiwgImlzUmVjb2duaXplZCIsICJpc1ZhbGlkIiwgImRpcmVjdGlvblN0ciIsICJQYW5SZWNvZ25pemVyIiwgIl9BdHRyUmVjb2duaXplciIsICJwWCIsICJwWSIsICJkaXJlY3Rpb25UZXN0IiwgImhhc01vdmVkIiwgIlN3aXBlUmVjb2duaXplciIsICJQaW5jaFJlY29nbml6ZXIiLCAiaW5PdXQiLCAiUm90YXRlUmVjb2duaXplciIsICJQcmVzc1JlY29nbml6ZXIiLCAidmFsaWRUaW1lIiwgImRlZmF1bHRzIiwgImRvbUV2ZW50cyIsICJpbnB1dENsYXNzIiwgImNzc1Byb3BzIiwgInVzZXJTZWxlY3QiLCAidG91Y2hTZWxlY3QiLCAidG91Y2hDYWxsb3V0IiwgImNvbnRlbnRab29taW5nIiwgInVzZXJEcmFnIiwgInRhcEhpZ2hsaWdodENvbG9yIiwgInByZXNldCIsICJ0b2dnbGVDc3NQcm9wcyIsICJhZGQiLCAib2xkQ3NzUHJvcHMiLCAiTWFuYWdlciIsICJoYW5kbGVycyIsICJzdG9wIiwgImZvcmNlIiwgInN0b3BwZWQiLCAiY3VyUmVjb2duaXplciIsICJleGlzdGluZyIsICJyZW1vdmUiLCAidGFyZ2V0UmVjb2duaXplciIsICJldmVudHMiLCAiZ2VzdHVyZUV2ZW50IiwgImNyZWF0ZUV2ZW50IiwgImluaXRFdmVudCIsICJnZXN0dXJlIiwgImRpc3BhdGNoRXZlbnQiLCAiU0lOR0xFX1RPVUNIX0lOUFVUX01BUCIsICJTaW5nbGVUb3VjaElucHV0IiwgInN0YXJ0ZWQiLCAibm9ybWFsaXplU2luZ2xlVG91Y2hlcyIsICJjaGFuZ2VkIiwgImRlcHJlY2F0ZSIsICJtZXNzYWdlIiwgImRlcHJlY2F0aW9uTWVzc2FnZSIsICJFcnJvciIsICJzdGFjayIsICJsb2ciLCAiY29uc29sZSIsICJ3YXJuIiwgImV4dGVuZCIsICJkZXN0IiwgIm1lcmdlIiwgImluaGVyaXQiLCAiY2hpbGQiLCAiYmFzZSIsICJjaGlsZFAiLCAiYmFzZVAiLCAiX3N1cGVyIiwgImJpbmRGbiIsICJIYW1tZXIiLCAiVkVSU0lPTiIsICJJTlBVVF9NT1ZFIiwgIlNUQVRFX1BPU1NJQkxFIiwgIlNUQVRFX0JFR0FOIiwgIlNUQVRFX0NIQU5HRUQiLCAiU1RBVEVfRU5ERUQiLCAiU1RBVEVfUkVDT0dOSVpFRCIsICJTVEFURV9DQU5DRUxMRUQiLCAiVGFwIiwgIlBhbiIsICJTd2lwZSIsICJQaW5jaCIsICJSb3RhdGUiLCAiUHJlc3MiLCAiUmVhbEhhbW1lciIsICJkIiwgInAiLCAicGFyc2VET1QiLCAiZG90IiwgImdyYXBoIiwgImdldFRva2VuIiwgInRva2VuIiwgInN0cmljdCIsICJ0b2tlblR5cGUiLCAiVE9LRU5UWVBFIiwgIklERU5USUZJRVIiLCAibmV3U3ludGF4RXJyb3IiLCAicGFyc2VTdGF0ZW1lbnRzIiwgImVkZ2UiLCAicGFyc2VHcmFwaCIsICJOT0RFX0FUVFJfTUFQUElORyIsICJmb250c2l6ZSIsICJmb250Y29sb3IiLCAibGFiZWxmb250Y29sb3IiLCAiZm9udG5hbWUiLCAiY29sb3IiLCAiZmlsbGNvbG9yIiwgInRvb2x0aXAiLCAibGFiZWx0b29sdGlwIiwgIkVER0VfQVRUUl9NQVBQSU5HIiwgIl9PYmplY3QkY3JlYXRlIiwgIk5VTEwiLCAiREVMSU1JVEVSIiwgIlVOS05PV04iLCAiREVMSU1JVEVSUyIsICJuZXh0UHJldmlldyIsICJpc0FscGhhTnVtZXJpYyIsICJjaGFyQ29kZSIsICJzZXRWYWx1ZSIsICJzaGlmdCIsICJhZGROb2RlIiwgImdyYXBocyIsICJub2RlcyIsICJhdHRyIiwgImciLCAiX2luZGV4T2ZJbnN0YW5jZVByb3BlcnR5IiwgImFkZEVkZ2UiLCAiZWRnZXMiLCAiY3JlYXRlRWRnZSIsICJlbmFibGVkIiwgImFycm93cyIsICJpc0NvbW1lbnQiLCAiYzIiLCAiaXNOYU4iLCAiU3ludGF4RXJyb3IiLCAiY2hvcCIsICJwYXJzZVN0YXRlbWVudCIsICJzdWJncmFwaCIsICJwYXJzZVN1YmdyYXBoIiwgInBhcnNlRWRnZSIsICJwYXJzZUF0dHJpYnV0ZUxpc3QiLCAic3ViZ3JhcGhzIiwgIm5vZl9hdHRyX2xpc3QiLCAiZWRnZVN0eWxlcyIsICJkYXNoZWQiLCAic29saWQiLCAiZG90dGVkIiwgImFycm93VHlwZXMiLCAiYm94IiwgImNyb3ciLCAiY3VydmUiLCAiaWN1cnZlIiwgIm5vcm1hbCIsICJpbnYiLCAidGVlIiwgInZlZSIsICJhdHRyX2xpc3QiLCAiYXR0cl9uYW1lcyIsICJfaW5jbHVkZXNJbnN0YW5jZVByb3BlcnR5IiwgImlkeCIsICJkaXIiLCAiZnJvbV90eXBlIiwgInRvX3R5cGUiLCAiZGlyX3R5cGUiLCAiX3NwbGljZUluc3RhbmNlUHJvcGVydHkiLCAiaWR4X2Fycm93IiwgInRtcF9hdHRyX2xpc3QiLCAidGV4dCIsICJtYXhMZW5ndGgiLCAic3Vic3RyIiwgInNldFByb3AiLCAicG9wIiwgImNvbnZlcnRBdHRyIiwgImNvbnZlcnRlZCIsICJ2aXNQcm9wIiwgIl9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSIsICJ2aXNQcm9wSSIsICJET1RUb0dyYXBoIiwgIl9jb250ZXh0MiIsICJkb3REYXRhIiwgImdyYXBoRGF0YSIsICJkb3ROb2RlIiwgImdyYXBoTm9kZSIsICJsYWJlbCIsICJpbWFnZSIsICJzaGFwZSIsICJfY29udGV4dDMiLCAiY29udmVydEVkZ2UiLCAiZG90RWRnZSIsICJncmFwaEVkZ2UiLCAiX2NvbnRleHQ0IiwgImFycmF5MSIsICJhcnJheTIiLCAiX2NvbnRleHQ1IiwgInN1YkVkZ2UiLCAiZWxlbTEiLCAiZWxlbTIiLCAicGFyc2VHZXBoaSIsICJnZXBoaUpTT04iLCAib3B0aW9uc09iaiIsICJpbmhlcml0Q29sb3IiLCAiZml4ZWQiLCAicGFyc2VDb2xvciIsICJnRWRnZXMiLCAidkVkZ2VzIiwgIl9tYXBJbnN0YW5jZVByb3BlcnR5IiwgImdFZGdlIiwgInZFZGdlIiwgImF0dHJpYnV0ZXMiLCAidGl0bGUiLCAiZ05vZGUiLCAidk5vZGUiLCAiYmFja2dyb3VuZCIsICJib3JkZXIiLCAiaGlnaGxpZ2h0IiwgImhvdmVyIiwgImFkZERlc2NyaXB0aW9uIiwgImJhY2siLCAiY3JlYXRlRWRnZUVycm9yIiwgImRlbCIsICJkZWxldGVDbHVzdGVyRXJyb3IiLCAiZWRnZURlc2NyaXB0aW9uIiwgImVkaXQiLCAiZWRpdENsdXN0ZXJFcnJvciIsICJlZGl0RWRnZSIsICJlZGl0RWRnZURlc2NyaXB0aW9uIiwgImVkaXROb2RlIiwgIkNhY2hlZEltYWdlIiwgIk5VTV9JVEVSQVRJT05TIiwgIkltYWdlIiwgImNhbnZhcyIsICJpbml0aWFsaXplZCIsICJ3aWR0aCIsICJoZWlnaHQiLCAiaDIiLCAiaDQiLCAiaDgiLCAiaDE2IiwgIncyIiwgInc0IiwgInc4IiwgIncxNiIsICJjb29yZGluYXRlcyIsICJfZmlsbE1pcE1hcCIsICJnZXRDb250ZXh0IiwgImRyYXdJbWFnZSIsICJpdGVyYXRpb25zIiwgImZhY3RvciIsICJsZWZ0IiwgInRvcCIsICJJbWFnZXMiLCAiaW1hZ2VzIiwgImltYWdlQnJva2VuIiwgInVybCIsICJicm9rZW5VcmwiLCAiaW1hZ2VUb0xvYWRCcm9rZW5VcmxPbiIsICJvbmVycm9yIiwgImltYWdlVG9SZWRyYXdXaXRoIiwgImNhY2hlZEltYWdlIiwgImltZyIsICJvbmxvYWQiLCAiX2ZpeEltYWdlQ29vcmRpbmF0ZXMiLCAiX3JlZHJhd1dpdGhJbWFnZSIsICJfdHJ5bG9hZEJyb2tlblVybCIsICJpbWFnZVRvQ2FjaGUiLCAiYm9keSIsICJvZmZzZXRXaWR0aCIsICJvZmZzZXRIZWlnaHQiLCAicmVtb3ZlQ2hpbGQiLCAiYXJyYXlCdWZmZXJOb25FeHRlbnNpYmxlIiwgIkFycmF5QnVmZmVyIiwgImJ1ZmZlciIsICJpc0V4dGVuc2libGUiLCAiQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFIiwgIiRpc0V4dGVuc2libGUiLCAib2JqZWN0SXNFeHRlbnNpYmxlIiwgImZyZWV6aW5nIiwgInByZXZlbnRFeHRlbnNpb25zIiwgImdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSIsICJGUkVFWklORyIsICJSRVFVSVJFRCIsICJzZXRNZXRhZGF0YSIsICJvYmplY3RJRCIsICJ3ZWFrRGF0YSIsICJtZXRhIiwgImludGVybmFsTWV0YWRhdGFNb2R1bGUiLCAiZmFzdEtleSIsICJnZXRXZWFrRGF0YSIsICJvbkZyZWV6ZSIsICJSZXN1bHQiLCAiUmVzdWx0UHJvdG90eXBlIiwgIml0ZXJhdGUiLCAidW5ib3VuZEZ1bmN0aW9uIiwgIml0ZXJGbiIsICJBU19FTlRSSUVTIiwgIklTX1JFQ09SRCIsICJJU19JVEVSQVRPUiIsICJJTlRFUlJVUFRFRCIsICJjb25kaXRpb24iLCAiY2FsbEZuIiwgImFuSW5zdGFuY2UiLCAiSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSIsICJpbnRlcm5hbFN0YXRlR2V0dGVyRm9yIiwgImNvbGxlY3Rpb24iLCAiQ09OU1RSVUNUT1JfTkFNRSIsICJ3cmFwcGVyIiwgImNvbW1vbiIsICJJU19XRUFLIiwgIkFEREVSIiwgIk5hdGl2ZVByb3RvdHlwZSIsICJleHBvcnRlZCIsICJJU19BRERFUiIsICJnZXRDb25zdHJ1Y3RvciIsICJzZXRTdHJvbmciLCAiZGVmaW5lQnVpbHRJbnMiLCAidW5zYWZlIiwgInNldFNwZWNpZXMiLCAiY29sbGVjdGlvblN0cm9uZyIsICJkZWZpbmUiLCAicHJldmlvdXMiLCAiZW50cnkiLCAiZ2V0RW50cnkiLCAicmVtb3ZlZCIsICJjbGVhciIsICJkZWxldGUiLCAiSVRFUkFUT1JfTkFNRSIsICJnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZSIsICJnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUiLCAiTWFwIiwgIkdyb3VwcyIsICJfZGVmYXVsdEluZGV4IiwgIl9ncm91cEluZGV4IiwgIl9kZWZhdWx0R3JvdXBzIiwgImRlZmF1bHRPcHRpb25zIiwgInVzZURlZmF1bHRHcm91cHMiLCAiX09iamVjdCRhc3NpZ24iLCAib3B0aW9uRmllbGRzIiwgImdyb3VwTmFtZSIsICJncm91cCIsICJfZ3JvdXBzIiwgIl9NYXAiLCAiX2dyb3VwTmFtZXMiLCAiZ3JvdXBuYW1lIiwgInNob3VsZENyZWF0ZSIsICJnbG9iYWxJc0Zpbml0ZSIsICJpc0Zpbml0ZSIsICJudW1iZXJJc0Zpbml0ZSIsICIkc29tZSIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwgIiQkOSIsICJfZGVmaW5lUHJvcGVydHkiLCAiJHBhcnNlRmxvYXQiLCAicGFyc2VGbG9hdCIsICJudW1iZXJQYXJzZUZsb2F0IiwgIkluZmluaXR5IiwgInRyaW1tZWRTdHJpbmciLCAiY2hvb3NpZnkiLCAic3ViT3B0aW9uIiwgInBpbGUiLCAiYWxsb3dlZCIsICJjaG9zZW4iLCAidG9wTW9zdCIsICJjaG9zZW5FZGdlIiwgInBvaW50SW5SZWN0IiwgInJvdGF0aW9uUG9pbnQiLCAidG1wIiwgInJpZ2h0IiwgImJvdHRvbSIsICJpc1ZhbGlkTGFiZWwiLCAiZ2V0U2VsZlJlZkNvb3JkaW5hdGVzIiwgImRpc3RhbmNlVG9Cb3JkZXIiLCAidG9Cb3JkZXJEaXN0IiwgInlGcm9tTm9kZUNlbnRlciIsICJ4RnJvbU5vZGVDZW50ZXIiLCAiTGFiZWxBY2N1bXVsYXRvciIsICJtZWFzdXJlVGV4dCIsICJsaW5lcyIsICJtb2QiLCAiYmxvY2tzIiwgInRtcFRleHQiLCAiYmxvY2siLCAiX3ZhbHVlc0luc3RhbmNlUHJvcGVydHkiLCAibGluZSIsICJfYWRkIiwgInRtcExpbmVzIiwgInRtcExpbmUiLCAiZmlyc3RFbXB0eUJsb2NrIiwgInRtcEJsb2NrcyIsICJkZXRlcm1pbmVMaW5lSGVpZ2h0cyIsICJkZXRlcm1pbmVMYWJlbFNpemUiLCAicmVtb3ZlRW1wdHlCbG9ja3MiLCAidGFnUGF0dGVybiIsICJfIiwgImFmdGVyQm9sZCIsICJhZnRlckl0YWwiLCAiYWZ0ZXJNb25vIiwgIk1hcmt1cEFjY3VtdWxhdG9yIiwgImJvbGQiLCAiaXRhbCIsICJtb25vIiwgInNwYWNpbmciLCAibW9kU3RhY2siLCAibW9kTmFtZSIsICJjaCIsICJ0YWdOYW1lIiwgImVtaXRCbG9jayIsICJ1bnNoaWZ0IiwgInNldFRhZyIsICJhZHZhbmNlIiwgIl90aGlzJHByZXBhcmVSZWdFeHAyIiwgInByZXBhcmVSZWdFeHAiLCAicmVnRXhwIiwgIm1hdGNoZWQiLCAibmV4dFRhZyIsICJjaGVja1RhZyIsICJ1bnNldFRhZyIsICJwcmVwYXJlZCIsICJMYWJlbFNwbGl0dGVyIiwgInNlbGVjdGVkIiwgImdldEZvcm1hdHRpbmdWYWx1ZXMiLCAiZmluYWxpemUiLCAiZm9udCIsICJmb250T3B0aW9ucyIsICJubExpbmVzIiwgImxpbmVDb3VudCIsICJtdWx0aSIsICJzcGxpdEJsb2NrcyIsICJtYXhXZHQiLCAic3BsaXRTdHJpbmdJbnRvTGluZXMiLCAiYXBwZW5kIiwgIm5ld0xpbmUiLCAibWFya3VwU3lzdGVtIiwgInN5c3RlbSIsICJwYXJzZUVudGl0aWVzIiwgInBhcnNlV1MiLCAicGFyc2VTdGFydFRhZyIsICJwYXJzZUVuZFRhZyIsICJiZWdpbmFibGUiLCAicGFyc2VPdmVycmlkZSIsICJkZWNvZGVNYXJrdXBTeXN0ZW0iLCAic3BsaXRNYXJrZG93bkJsb2NrcyIsICJzcGxpdEh0bWxCbG9ja3MiLCAiY3VyV2lkdGgiLCAid29yZHMiLCAibmV3VGV4dCIsICJvdmVyTWF4V2lkdGgiLCAiYXBwZW5kTGFzdCIsICJnZXRMb25nZXN0Rml0IiwgIndvcmQiLCAiZ2V0TG9uZ2VzdEZpdFdvcmQiLCAibmV3VyIsICJtdWx0aUZvbnRTdHlsZSIsICJMYWJlbCIsICJlZGdlbGFiZWwiLCAicG9pbnRUb1NlbGYiLCAiYmFzZVNpemUiLCAic2V0T3B0aW9ucyIsICJ5TGluZSIsICJpc0VkZ2VMYWJlbCIsICJlbGVtZW50T3B0aW9ucyIsICJpbml0Rm9udE9wdGlvbnMiLCAibGFiZWxEaXJ0eSIsICJuZXdGb250T3B0aW9ucyIsICJwYXJzZUZvbnRTdHJpbmciLCAidmFkanVzdCIsICJjb25zdHJhaW5XaWR0aCIsICJtaW5XZHQiLCAiY29uc3RyYWluSGVpZ2h0IiwgIm1pbkhndCIsICJ2YWxpZ24iLCAid2lkdGhDb25zdHJhaW50IiwgIndpZHRoQ29uc3RyYWludE1heGltdW0iLCAid2lkdGhDb25zdHJhaW50TWluaW11bSIsICJoZWlnaHRDb25zdHJhaW50IiwgImhlaWdodENvbnN0cmFpbnRNaW5pbXVtIiwgImhlaWdodENvbnN0cmFpbnRWYWxpZ24iLCAicHJvcGFnYXRlRm9udHMiLCAiZGVlcEV4dGVuZCIsICJjb25zdHJhaW4iLCAiY2hvb3NlciIsICJtYXJnaW5zIiwgIndpZHRoQmlhcyIsICJoZWlnaHRCaWFzIiwgImRzdFBpbGUiLCAic3JjUGlsZSIsICJhZGRGb250VG9QaWxlIiwgInJldCIsICJ0bXBTaG9ydGhhbmQiLCAib3B0IiwgIm11bHRpTmFtZSIsICJvcHRpb24iLCAibXVsdGlGb250IiwgIm9wdGlvbk5hbWVzIiwgImdldEZvbnRPcHRpb24iLCAiZm9udFBpbGUiLCAiYWRkRm9udE9wdGlvbnNUb1BpbGUiLCAiZ2V0QmFzaWNPcHRpb25zIiwgIl9sb29wIiwgIm1vZE9wdGlvbnMiLCAiZ2V0Rm9udE9wdGlvbnMiLCAiYmFzZWxpbmUiLCAidmlld0ZvbnRTaXplIiwgInZpZXciLCAic2NhbGluZyIsICJkcmF3VGhyZXNob2xkIiwgIm1heFZpc2libGUiLCAiY2FsY3VsYXRlTGFiZWxTaXplIiwgIl9kcmF3QmFja2dyb3VuZCIsICJfZHJhd1RleHQiLCAiZmlsbFN0eWxlIiwgImdldFNpemUiLCAiZmlsbFJlY3QiLCAiX3RoaXMkX3NldEFsaWdubWVudDIiLCAiX3NldEFsaWdubWVudCIsICJ0ZXh0QWxpZ24iLCAibGFiZWxIZWlnaHQiLCAiYWxpZ24iLCAiX3RoaXMkX2dldENvbG9yMiIsICJfZ2V0Q29sb3IiLCAic3Ryb2tlQ29sb3IiLCAiZm9udENvbG9yIiwgInN0cm9rZVdpZHRoIiwgImxpbmVXaWR0aCIsICJzdHJva2VTdHlsZSIsICJsaW5lSm9pbiIsICJzdHJva2VUZXh0IiwgImZpbGxUZXh0IiwgInRleHRCYXNlbGluZSIsICJpbml0aWFsU3Ryb2tlQ29sb3IiLCAib3BhY2l0eSIsICJvdmVycmlkZU9wYWNpdHkiLCAiX3Byb2Nlc3NMYWJlbCIsICJnZXRWYWx1ZSIsICJmYWNlIiwgImxhYmVsSGlnaGxpZ2h0Qm9sZCIsICJmb250U3RyaW5nIiwgInNlbGVjdGVkU3RhdGUiLCAiaG92ZXJTdGF0ZSIsICJpblRleHQiLCAiZGlmZmVyZW50U3RhdGUiLCAiX3Byb2Nlc3NMYWJlbFRleHQiLCAib3V0T3B0aW9ucyIsICJpbk9wdGlvbnMiLCAibmV3T3B0aW9uc0FycmF5IiwgImFDb25zdHJ1Y3RvciIsICJuYXRpdmVDb25zdHJ1Y3QiLCAiTkVXX1RBUkdFVF9CVUciLCAiQVJHU19CVUciLCAiVGFyZ2V0IiwgIm5ld1RhcmdldCIsICIkYXJncyIsICJfc2V0UHJvdG90eXBlT2YiLCAiX09iamVjdCRzZXRQcm90b3R5cGVPZiIsICJfYmluZEluc3RhbmNlUHJvcGVydHkiLCAiX2luaGVyaXRzIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfT2JqZWN0JGdldFByb3RvdHlwZU9mIiwgIk5vZGVCYXNlIiwgImxhYmVsTW9kdWxlIiwgIm1hcmdpbiIsICJyZWZyZXNoTmVlZGVkIiwgImJvdW5kaW5nQm94IiwgImFkanVzdFNpemVzIiwgImJvcmRlcldpZHRoIiwgInJlc2l6ZSIsICJzaGFkb3ciLCAic2hhZG93Q29sb3IiLCAic2hhZG93Qmx1ciIsICJzaGFkb3dTaXplIiwgInNoYWRvd09mZnNldFgiLCAic2hhZG93WCIsICJzaGFkb3dPZmZzZXRZIiwgInNoYWRvd1kiLCAiYm9yZGVyRGFzaGVzIiwgInNldExpbmVEYXNoIiwgImRhc2hlcyIsICJzaGFwZVByb3BlcnRpZXMiLCAiYm9yZGVyQ29sb3IiLCAic2F2ZSIsICJlbmFibGVCb3JkZXJEYXNoZXMiLCAic3Ryb2tlIiwgImRpc2FibGVCb3JkZXJEYXNoZXMiLCAicmVzdG9yZSIsICJlbmFibGVTaGFkb3ciLCAiX2ZpbGxJbnN0YW5jZVByb3BlcnR5IiwgImRpc2FibGVTaGFkb3ciLCAicGVyZm9ybVN0cm9rZSIsICJfdXBkYXRlQm91bmRpbmdCb3giLCAidGV4dFNpemUiLCAiZ2V0VGV4dFNpemUiLCAiX2NyZWF0ZVN1cGVyIiwgIkRlcml2ZWQiLCAiaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfUmVmbGVjdCRjb25zdHJ1Y3QiLCAiUHJveHkiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJTdXBlciIsICJOZXdUYXJnZXQiLCAiQm94IiwgIl9Ob2RlQmFzZSIsICJfc2V0TWFyZ2lucyIsICJuZWVkc1JlZnJlc2giLCAiZGltZW5zaW9ucyIsICJnZXREaW1lbnNpb25zRnJvbUxhYmVsIiwgImluaXRDb250ZXh0Rm9yRHJhdyIsICJib3JkZXJSYWRpdXMiLCAicGVyZm9ybUZpbGwiLCAidXBkYXRlQm91bmRpbmdCb3giLCAiX2FkZEJvdW5kaW5nQm94TWFyZ2luIiwgIkNpcmNsZUltYWdlQmFzZSIsICJsYWJlbE9mZnNldCIsICJpbWFnZU9iaiIsICJpbWFnZU9iakFsdCIsICJzZXRJbWFnZXMiLCAic2VsZWN0aW9uX2NoYW5nZWQiLCAiaW1hZ2VUbXAiLCAiaW1nUGFkZGluZyIsICJpbWFnZVBhZGRpbmciLCAib3B0SW1nUGFkZGluZyIsICJ1c2VJbWFnZVNpemUiLCAicmF0aW9fd2lkdGgiLCAicmF0aW9faGVpZ2h0IiwgIl9nZXRJbWFnZVBhZGRpbmciLCAiZ2xvYmFsQWxwaGEiLCAiaW50ZXJwb2xhdGlvbiIsICJpbWdQb3NMZWZ0IiwgImltZ1Bvc1RvcCIsICJpbWdXaWR0aCIsICJpbWdIZWlnaHQiLCAiZHJhd0ltYWdlQXRQb3NpdGlvbiIsICJsYWJlbERpbWVuc2lvbnMiLCAieUxhYmVsIiwgIkNpcmNsZSIsICJfQ2lyY2xlSW1hZ2VCYXNlIiwgImRpYW1ldGVyIiwgIl9kcmF3UmF3Q2lyY2xlIiwgIkNpcmN1bGFySW1hZ2UiLCAiX3Jlc2l6ZUltYWdlIiwgInN3aXRjaEltYWdlcyIsICJsYWJlbFgiLCAibGFiZWxZIiwgImNvb3JkaW5hdGVPcmlnaW4iLCAiY2xpcCIsICJfZHJhd0ltYWdlQXRQb3NpdGlvbiIsICJfZHJhd0ltYWdlTGFiZWwiLCAiU2hhcGVCYXNlIiwgIl90aGlzJGN1c3RvbVNpemVXaWR0aCIsICJfdGhpcyRjdXN0b21TaXplSGVpZ2giLCAiY3VzdG9tU2l6ZVdpZHRoIiwgImN1c3RvbVNpemVIZWlnaHQiLCAic2l6ZU11bHRpcGxpZXIiLCAiX2xlbiIsICJfa2V5IiwgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCIsICJpY29uIiwgImNvZGUiLCAiZHJhd0V4dGVybmFsTGFiZWwiLCAiX09iamVjdCRrZXlzIiwgIl9PYmplY3QkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgIl9maWx0ZXJJbnN0YW5jZVByb3BlcnR5IiwgIl9PYmplY3QkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIl9vYmplY3RTcHJlYWQiLCAiX09iamVjdCRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwgIl9PYmplY3QkZGVmaW5lUHJvcGVydGllcyIsICJDdXN0b21TaGFwZSIsICJfU2hhcGVCYXNlIiwgImN0eFJlbmRlcmVyIiwgImRyYXdMYXRlciIsICJkcmF3Tm9kZSIsICJub2RlRGltZW5zaW9ucyIsICJfZGlzdGFuY2VUb0JvcmRlciIsICJEYXRhYmFzZSIsICJEaWFtb25kIiwgIl9kcmF3U2hhcGUiLCAiRG90IiwgIkVsbGlwc2UiLCAiSWNvbiIsICJpY29uU2l6ZSIsICJfaWNvbiIsICJ3ZWlnaHQiLCAic2lkZSIsICJ1c2VCb3JkZXJXaXRoSW1hZ2UiLCAibmV1dHJhbGJvcmRlcldpZHRoIiwgInNlbGVjdGlvbkxpbmVXaWR0aCIsICJib3JkZXJXaWR0aFNlbGVjdGVkIiwgIlNxdWFyZSIsICJIZXhhZ29uIiwgIlN0YXIiLCAiVGV4dCIsICJUcmlhbmdsZSIsICJUcmlhbmdsZURvd24iLCAiTm9kZSIsICJpbWFnZWxpc3QiLCAiZ3JvdXBsaXN0IiwgImdsb2JhbE9wdGlvbnMiLCAiYnJpZGdlT2JqZWN0IiwgImJhc2VGb250U2l6ZSIsICJwcmVkZWZpbmVkUG9zaXRpb24iLCAiY3VycmVudFNoYXBlIiwgIl9sb2NhbENvbG9yIiwgImNoZWNrTWFzcyIsICJfcGFyc2VJbnQiLCAiX3BhcnNlRmxvYXQiLCAicGFyc2VPcHRpb25zIiwgIl9sb2FkX2ltYWdlcyIsICJ1cGRhdGVMYWJlbE1vZHVsZSIsICJjaGVja09wYWNpdHkiLCAidXBkYXRlU2hhcGUiLCAiaGlkZGVuIiwgInBoeXNpY3MiLCAibG9hZCIsICJicm9rZW5JbWFnZSIsICJ1bnNlbGVjdGVkIiwgInVwZGF0ZUdyb3VwT3B0aW9ucyIsICJjdXJyZW50R3JvdXAiLCAidG90YWwiLCAiY3VzdG9tU2NhbGluZ0Z1bmN0aW9uIiwgInNpemVEaWZmIiwgImZvbnREaWZmIiwgInZpc2libGUiLCAibm9kZUlkIiwgImxhYmVsSWQiLCAib3JpZ2luIiwgInBhcmVudE9wdGlvbnMiLCAibmV3T3B0aW9ucyIsICJncm91cExpc3QiLCAiZ3JvdXBPYmoiLCAic2tpcFByb3BlcnRpZXMiLCAiX09iamVjdCRnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgInNlbGVjdGl2ZU5vdERlZXBFeHRlbmQiLCAiYWxsb3dEZWxldGlvbiIsICJjaGVja0Nvb3JkaW5hdGVPcmlnaW4iLCAibWVyZ2VPcHRpb25zIiwgInBhcnNlZENvbG9yIiwgImZpbGxJZkRlZmluZWQiLCAibWFzcyIsICJzdHJJZCIsICJWQUxJREFUT1JfUFJJTlRfU1RZTEUiLCAiTm9kZXNIYW5kbGVyIiwgImdyb3VwcyIsICJsYXlvdXRFbmdpbmUiLCAiZnVuY3Rpb25zIiwgImNyZWF0ZU5vZGUiLCAibm9kZXNMaXN0ZW5lcnMiLCAiaXRlbXMiLCAib2xkRGF0YSIsICJib2xkaXRhbCIsICJsZXZlbCIsICJiaW5kRXZlbnRMaXN0ZW5lcnMiLCAiZW1pdHRlciIsICJyZWZyZXNoIiwgIl9OdW1iZXIkaXNOYU4iLCAiX051bWJlciRpc0Zpbml0ZSIsICJfaSIsICJfT2JqZWN0JGtleXMyIiwgImRvTm90RW1pdCIsICJvbGROb2Rlc0RhdGEiLCAiaXNEYXRhVmlld0xpa2UiLCAiRGF0YVNldCIsICJtZSIsICJpZHMiLCAiZ2V0SWRzIiwgIm5ld05vZGVzIiwgInBvc2l0aW9uSW5pdGlhbGx5IiwgImNoYW5nZWREYXRhIiwgImRhdGFDaGFuZ2VkIiwgIl9zb21lSW5zdGFuY2VQcm9wZXJ0eSIsICJuZXdWYWx1ZSIsICJvbGRWYWx1ZSIsICJjbGVhclBvc2l0aW9ucyIsICJkYXRhQXJyYXkiLCAibm9kZUluZGljZXMiLCAiX3N0ZXAiLCAiZGF0YXNldCIsICJnZXREYXRhU2V0IiwgIl9pdGVyYXRvciIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJkc05vZGUiLCAiYm9keU5vZGUiLCAiZXJyIiwgIm5vZGVMaXN0IiwgIm5vZGVPYmoiLCAidG9JZCIsICJmcm9tSWQiLCAiZWRnZUxpc3QiLCAiX3RoaXM0IiwgIl9zZXRUaW1lb3V0IiwgImlzRGF0YURlc2NyaXB0b3IiLCAicmVjZWl2ZXIiLCAiX2dldCIsICJfUmVmbGVjdCRnZXQiLCAiJGh5cG90IiwgImh5cG90IiwgIk5hTiIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgImRpdiIsICJzdW0iLCAiYUxlbiIsICJsYXJnIiwgIkVuZFBvaW50IiwgInBvaW50cyIsICJhcnJvd0RhdGEiLCAieHQiLCAieXQiLCAiX0VuZFBvaW50IiwgInRyYW5zbGF0ZSIsICJyb3RhdGUiLCAiaW1hZ2VXaWR0aCIsICJpbWFnZUhlaWdodCIsICJBcnJvdyIsICJfRW5kUG9pbnQyIiwgIl9zdXBlcjIiLCAidHJhbnNmb3JtIiwgImRyYXdQYXRoIiwgIkNyb3ciLCAiQ3VydmUiLCAicGkiLCAic3RhcnRBbmdsZSIsICJlbmRBbmdsZSIsICJJbnZlcnRlZEN1cnZlIiwgIkludmVydGVkVHJpYW5nbGUiLCAiQmFyIiwgIlZlZSIsICJFbmRQb2ludHMiLCAiRWRnZUJhc2UiLCAiX2JvZHkiLCAiX2xhYmVsTW9kdWxlIiwgImNvbG9yRGlydHkiLCAiaG92ZXJXaWR0aCIsICJzZWxlY3Rpb25XaWR0aCIsICJmcm9tUG9pbnQiLCAidG9Qb2ludCIsICJfc2VsZWN0ZWQiLCAiX2hvdmVyIiwgInZpYU5vZGUiLCAiZ2V0VmlhTm9kZSIsICJnZXRDb2xvciIsICJfZHJhd0Rhc2hlZExpbmUiLCAiX2RyYXdMaW5lIiwgIl9saW5lIiwgIl90aGlzJF9nZXRDaXJjbGVEYXRhMiIsICJfZ2V0Q2lyY2xlRGF0YSIsICJfY2lyY2xlIiwgIl9mcm9tUG9pbnQiLCAiX3RvUG9pbnQiLCAibGluZUNhcCIsICJsaW5lRGFzaE9mZnNldCIsICJfdGhpcyRfZ2V0Q2lyY2xlRGF0YTQiLCAiX3RoaXMkX2dldENpcmNsZURhdGE2IiwgIl9maW5kQm9yZGVyUG9zaXRpb24iLCAiX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSIsICJfdGhpcyRfZ2V0Q2lyY2xlRGF0YSQyIiwgImhpZ2giLCAic2VsZlJlZmVyZW5jZSIsICJuZWFyTm9kZSIsICJtaWRkbGUiLCAiZW5kUG9pbnRPZmZzZXQiLCAiYXJyb3dTdHJpa2V0aHJvdWdoIiwgIml0ZXJhdGlvbiIsICJfcG9pbnRPbkNpcmNsZSIsICJkaWZmZXJlbmNlIiwgInBvdyIsICJpbmhlcml0c0NvbG9yIiwgImdyZCIsICJjcmVhdGVMaW5lYXJHcmFkaWVudCIsICJmcm9tQ29sb3IiLCAidG9Db2xvciIsICJhZGRDb2xvclN0b3AiLCAiYW5nbGVGcm9tIiwgImFuZ2xlVG8iLCAicmVuZGVyQmVoaW5kVGhlTm9kZSIsICJwb2ludFRGcm9tIiwgInBvaW50VFRvIiwgIngxIiwgInkxIiwgIngzIiwgInkzIiwgIl9nZXREaXN0YW5jZVRvRWRnZSIsICJfdGhpcyRfZ2V0Q2lyY2xlRGF0YTgiLCAicHgiLCAicHkiLCAiYXJyb3dQb2ludCIsICJub2RlMSIsICJub2RlMiIsICJyZXZlcnNlZCIsICJzY2FsZUZhY3RvciIsICJmcm9tQXJyb3dTY2FsZSIsICJmcm9tQXJyb3dUeXBlIiwgInRvQXJyb3dTY2FsZSIsICJ0b0Fycm93VHlwZSIsICJtaWRkbGVBcnJvd1NjYWxlIiwgIm1pZGRsZUFycm93VHlwZSIsICJyZWxhdGl2ZUxlbmd0aCIsICJfTWF0aCRoeXBvdCIsICJzbW9vdGgiLCAicG9pbnRUIiwgInZpYSIsICJndWlkZVBvcyIsICJnZXRQb2ludCIsICJoYWxmTGVuZ3RoIiwgImd1aWRlUG9zMSIsICJndWlkZVBvczIiLCAiX3RoaXMkX2dldENpcmNsZURhdGExMCIsICJjb3JlIiwgIm9yaWdDdHhBdHRyIiwgImJhY2tncm91bmRDb2xvciIsICJiYWNrZ3JvdW5kU2l6ZSIsICJzZXRTdHJva2VEYXNoZWQiLCAiYmFja2dyb3VuZERhc2hlcyIsICJCZXppZXJFZGdlQmFzZSIsICJfRWRnZUJhc2UiLCAiX2dldFZpYUNvb3JkaW5hdGVzIiwgIm1pbkRpc3RhbmNlIiwgImxhc3RYIiwgImxhc3RZIiwgIl9nZXREaXN0YW5jZVRvTGluZSIsICJ2aWFOb2RlMSIsICJ2aWFOb2RlMiIsICJxdWFkcmF0aWNDdXJ2ZVRvIiwgImRyYXdCYWNrZ3JvdW5kIiwgIkJlemllckVkZ2VEeW5hbWljIiwgIl9CZXppZXJFZGdlQmFzZSIsICJfYm91bmRGdW5jdGlvbiIsICJwb3NpdGlvbkJlemllck5vZGUiLCAicGh5c2ljc0NoYW5nZSIsICJzZXR1cFN1cHBvcnROb2RlIiwgImNvbm5lY3QiLCAicGFyZW50RWRnZUlkIiwgIl9iZXppZXJDdXJ2ZSIsICJjeCIsICJjeSIsICJjciIsICJfZmluZEJvcmRlclBvc2l0aW9uQmV6aWVyIiwgIl9nZXREaXN0YW5jZVRvQmV6aWVyRWRnZSIsICJCZXppZXJFZGdlU3RhdGljIiwgInN0ZXBYIiwgInN0ZXBZIiwgInJvdW5kbmVzcyIsICJ4VmlhIiwgInlWaWEiLCAibXlBbmdsZSIsICJDdWJpY0JlemllckVkZ2VCYXNlIiwgInZpYTEiLCAidmlhMiIsICJ2ZWMiLCAiQ3ViaWNCZXppZXJFZGdlIiwgIl9DdWJpY0JlemllckVkZ2VCYXNlIiwgInZpYU5vZGVzIiwgImZvcmNlRGlyZWN0aW9uIiwgIl9yZWYyIiwgIl9nZXREaXN0YW5jZVRvQmV6aWVyRWRnZTIiLCAiX3JlZjQiLCAiU3RyYWlnaHRFZGdlIiwgImVkZ2VTZWdtZW50TGVuZ3RoIiwgInRvQm9yZGVyUG9pbnQiLCAiRWRnZSIsICJiYXNlV2lkdGgiLCAiZWRnZVR5cGUiLCAiY29ubmVjdGVkIiwgImFmZmVjdHNMYXlvdXQiLCAidXBkYXRlRWRnZVR5cGUiLCAiX3NldEludGVyYWN0aW9uV2lkdGhzIiwgInRvQXJyb3ciLCAiZnJvbUFycm93IiwgIm1pZGRsZUFycm93IiwgInRvQXJyb3dTcmMiLCAidG9BcnJvd0ltYWdlV2lkdGgiLCAidG9BcnJvd0ltYWdlSGVpZ2h0IiwgIm1pZGRsZUFycm93U3JjIiwgIm1pZGRsZUFycm93SW1hZ2VXaWR0aCIsICJtaWRkbGVBcnJvd0ltYWdlSGVpZ2h0IiwgImZyb21BcnJvd1NyYyIsICJmcm9tQXJyb3dJbWFnZVdpZHRoIiwgImZyb21BcnJvd0ltYWdlSGVpZ2h0IiwgInNlbGVjdGVkV2lkdGgiLCAiY2hhbmdlSW5UeXBlIiwgImNsZWFudXAiLCAiZGlzY29ubmVjdCIsICJhdHRhY2hFZGdlIiwgImRldGFjaEVkZ2UiLCAid2lkdGhEaWZmIiwgImRyYXdMaW5lIiwgImRyYXdMYWJlbCIsICJnZXRBcnJvd0RhdGEiLCAiZHJhd0Fycm93SGVhZCIsICJfZ2V0Um90YXRpb24iLCAiZWRnZUlkIiwgImlzT3ZlcmxhcHBpbmdXaXRoIiwgInhGcm9tIiwgInlGcm9tIiwgInhUbyIsICJ5VG8iLCAieE9iaiIsICJ5T2JqIiwgImdldERpc3RhbmNlVG9FZGdlIiwgImNvcHlGcm9tR2xvYmFscyIsICJzZWxlY3RpdmVEZWVwRXh0ZW5kIiwgIl9KU09OJHN0cmluZ2lmeSIsICJpc1N0cmluZyIsICJjb2xvcnNEZWZpbmVkIiwgInNlbGZSZWZlcmVuY2VTaXplIiwgIkVkZ2VzSGFuZGxlciIsICJlZGdlc0xpc3RlbmVycyIsICJlZGdlRGF0YSIsICJzbW9vdGhPcHRpb25zIiwgInJlY29ubmVjdEVkZ2VzIiwgIm9sZEVkZ2VzRGF0YSIsICJlZGdlc0RhdGEiLCAib2xkRWRnZSIsICJzaG93SW50ZXJuYWxJZHMiLCAiX2FkZE1pc3NpbmdFZGdlcyIsICJfcmVtb3ZlSW52YWxpZEVkZ2VzIiwgIl90aGlzNSIsICJlZGdlc1RvRGVsZXRlIiwgInRvTm9kZSIsICJmcm9tTm9kZSIsICJpc0NsdXN0ZXIiLCAiYWRkSWRzIiwgIkJhcm5lc0h1dFNvbHZlciIsICJwaHlzaWNzQm9keSIsICJiYXJuZXNIdXRUcmVlIiwgIl9ybmciLCAiQWxlYSIsICJ0aGV0YUludmVyc2VkIiwgInRoZXRhIiwgIm92ZXJsYXBBdm9pZGFuY2VGYWN0b3IiLCAiYXZvaWRPdmVybGFwIiwgImdyYXZpdGF0aW9uYWxDb25zdGFudCIsICJwaHlzaWNzTm9kZUluZGljZXMiLCAibm9kZUNvdW50IiwgIl9mb3JtQmFybmVzSHV0VHJlZSIsICJfZ2V0Rm9yY2VDb250cmlidXRpb25zIiwgInBhcmVudEJyYW5jaCIsICJfZ2V0Rm9yY2VDb250cmlidXRpb24iLCAiY2hpbGRyZW4iLCAiTlciLCAiTkUiLCAiU1ciLCAiU0UiLCAiY2hpbGRyZW5Db3VudCIsICJjZW50ZXJPZk1hc3MiLCAiY2FsY1NpemUiLCAiX2NhbGN1bGF0ZUZvcmNlcyIsICJncmF2aXR5Rm9yY2UiLCAiZngiLCAiZnkiLCAiZm9yY2VzIiwgIm1pblgiLCAibWluWSIsICJtYXhYIiwgIm1heFkiLCAicm9vdFNpemUiLCAiaGFsZlJvb3RTaXplIiwgImNlbnRlclgiLCAiY2VudGVyWSIsICJyYW5nZSIsICJtYXhXaWR0aCIsICJfc3BsaXRCcmFuY2giLCAiX3BsYWNlSW5UcmVlIiwgInRvdGFsTWFzcyIsICJ0b3RhbE1hc3NJbnYiLCAiYmlnZ2VzdFNpemUiLCAic2tpcE1hc3NVcGRhdGUiLCAiX3VwZGF0ZUJyYW5jaE1hc3MiLCAicmVnaW9uIiwgIl9wbGFjZUluUmVnaW9uIiwgImNvbnRhaW5lZE5vZGUiLCAiX2luc2VydFJlZ2lvbiIsICJjaGlsZFNpemUiLCAiX2RyYXdCcmFuY2giLCAiYnJhbmNoIiwgIlJlcHVsc2lvblNvbHZlciIsICJyZXB1bHNpbmdGb3JjZSIsICJub2RlRGlzdGFuY2UiLCAiSGllcmFyY2hpY2FsUmVwdWxzaW9uU29sdmVyIiwgInRoZXNlTm9kZXNEaXN0YW5jZSIsICJTcHJpbmdTb2x2ZXIiLCAiZWRnZUxlbmd0aCIsICJub2RlMyIsICJlZGdlSW5kaWNlcyIsICJwaHlzaWNzRWRnZUluZGljZXMiLCAic3ByaW5nTGVuZ3RoIiwgIl9jYWxjdWxhdGVTcHJpbmdGb3JjZSIsICJzcHJpbmdGb3JjZSIsICJzcHJpbmdDb25zdGFudCIsICJIaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXIiLCAic3ByaW5nRngiLCAic3ByaW5nRnkiLCAidG90YWxGeCIsICJ0b3RhbEZ5IiwgImNvcnJlY3Rpb25GeCIsICJjb3JyZWN0aW9uRnkiLCAiQ2VudHJhbEdyYXZpdHlTb2x2ZXIiLCAiY2VudHJhbEdyYXZpdHkiLCAiRm9yY2VBdGxhczJCYXNlZFJlcHVsc2lvblNvbHZlciIsICJfQmFybmVzSHV0U29sdmVyIiwgImRlZ3JlZSIsICJGb3JjZUF0bGFzMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXIiLCAiX0NlbnRyYWxHcmF2aXR5U29sdmVyIiwgIlBoeXNpY3NFbmdpbmUiLCAidmVsb2NpdGllcyIsICJwaHlzaWNzRW5hYmxlZCIsICJzaW11bGF0aW9uSW50ZXJ2YWwiLCAicmVxdWlyZXNUaW1lb3V0IiwgInByZXZpb3VzU3RhdGVzIiwgInJlZmVyZW5jZVN0YXRlIiwgImZyZWV6ZUNhY2hlIiwgInJlbmRlclRpbWVyIiwgImFkYXB0aXZlVGltZXN0ZXAiLCAiYWRhcHRpdmVUaW1lc3RlcEVuYWJsZWQiLCAiYWRhcHRpdmVDb3VudGVyIiwgImFkYXB0aXZlSW50ZXJ2YWwiLCAic3RhYmlsaXplZCIsICJzdGFydGVkU3RhYmlsaXphdGlvbiIsICJzdGFiaWxpemF0aW9uSXRlcmF0aW9ucyIsICJyZWFkeSIsICJiYXJuZXNIdXQiLCAiZGFtcGluZyIsICJmb3JjZUF0bGFzMkJhc2VkIiwgInJlcHVsc2lvbiIsICJoaWVyYXJjaGljYWxSZXB1bHNpb24iLCAibWF4VmVsb2NpdHkiLCAibWluVmVsb2NpdHkiLCAic29sdmVyIiwgInN0YWJpbGl6YXRpb24iLCAidXBkYXRlSW50ZXJ2YWwiLCAib25seUR5bmFtaWNFZGdlcyIsICJmaXQiLCAidGltZXN0ZXAiLCAid2luZCIsICJsYXlvdXRGYWlsZWQiLCAiaW5pdFBoeXNpY3MiLCAic3RvcFNpbXVsYXRpb24iLCAic3RhcnRTaW11bGF0aW9uIiwgInVwZGF0ZVBoeXNpY3NEYXRhIiwgIm5vZGVzU29sdmVyIiwgImVkZ2VzU29sdmVyIiwgImdyYXZpdHlTb2x2ZXIiLCAiUmVwdWxzaW9uIiwgIkhpZXJhcmNoaWNhbFJlcHVsc2lvbiIsICJtb2RlbE9wdGlvbnMiLCAic3RhYmlsaXplIiwgInZpZXdGdW5jdGlvbiIsICJzaW11bGF0aW9uU3RlcCIsICJfZW1pdFN0YWJpbGl6ZWQiLCAic3RhcnRUaW1lIiwgIl9EYXRlJG5vdyIsICJwaHlzaWNzVGljayIsICJydW5Eb3VibGVTcGVlZCIsICJhbW91bnRPZkl0ZXJhdGlvbnMiLCAic29sdmUiLCAibW92ZU5vZGVzIiwgIl9ldmFsdWF0ZVN0ZXBRdWFsaXR5IiwgIl9zdGFydFN0YWJpbGl6aW5nIiwgInBoeXNpY3NTdGVwIiwgInJldmVydCIsICJhZGp1c3RUaW1lU3RlcCIsICJub2RlSWRzIiwgInBvc2l0aW9ucyIsICJ2eCIsICJ2eSIsICJyZWZlcmVuY2UiLCAibWF4Tm9kZVZlbG9jaXR5IiwgImF2ZXJhZ2VOb2RlVmVsb2NpdHkiLCAibm9kZVZlbG9jaXR5IiwgIl9wZXJmb3JtU3RlcCIsICJtIiwgIm1heFYiLCAiY2FsY3VsYXRlQ29tcG9uZW50VmVsb2NpdHkiLCAidGFyZ2V0SXRlcmF0aW9ucyIsICJfZnJlZXplTm9kZXMiLCAiX3N0YWJpbGl6YXRpb25CYXRjaCIsICJydW5uaW5nIiwgInNlbmRQcm9ncmVzcyIsICJfZmluYWxpemVTdGFiaWxpemF0aW9uIiwgIl9yZXN0b3JlRnJvemVuTm9kZXMiLCAiZm9yY2VTaXplIiwgImFycm93U2l6ZSIsICJIU1ZUb0hleCIsICJnZXRSYW5kb21WYWx1ZXMiLCAicm5kczgiLCAiVWludDhBcnJheSIsICJybmciLCAiY3J5cHRvIiwgImJ5dGVUb0hleCIsICJuYXRpdmUiLCAicmFuZG9tVVVJRCIsICJ2NCIsICJidWYiLCAicm5kcyIsICJOZXR3b3JrVXRpbCIsICJhbGxOb2RlcyIsICJzcGVjaWZpY05vZGVzIiwgImNsb25lZE9wdGlvbnMiLCAiYW1vdW50T2ZDb25uZWN0aW9ucyIsICJDbHVzdGVyIiwgIl9Ob2RlIiwgImNvbnRhaW5lZE5vZGVzIiwgImNvbnRhaW5lZEVkZ2VzIiwgImNoaWxkQ2x1c3RlcklkIiwgImNoaWxkQ2x1c3RlciIsICJjbHVzdGVyRWRnZSIsICJwYXJlbnRDbHVzdGVyRWRnZSIsICJjbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcyIsICJzcmNJZCIsICJlZGdlUmVwbGFjZWRCeUlkIiwgIkNsdXN0ZXJFbmdpbmUiLCAiY2x1c3RlcmVkTm9kZXMiLCAiY2x1c3RlcmVkRWRnZXMiLCAiaHVic2l6ZSIsICJfZ2V0SHViU2l6ZSIsICJfY2hlY2tPcHRpb25zIiwgIm5vZGVzVG9DbHVzdGVyIiwgImNsdXN0ZXJCeUNvbm5lY3Rpb24iLCAicmVmcmVzaERhdGEiLCAiam9pbkNvbmRpdGlvbiIsICJjaGlsZE5vZGVzT2JqIiwgImNoaWxkRWRnZXNPYmoiLCAiX2NsdXN0ZXIiLCAiZWRnZUNvdW50IiwgInJlbGV2YW50RWRnZUNvdW50IiwgImNsdXN0ZXJzIiwgInVzZWROb2RlcyIsICJjaGVja0pvaW5Db25kaXRpb24iLCAiY2xvbmVPcHRpb25zIiwgImdhdGhlcmluZ1N1Y2Nlc3NmdWwiLCAiY2hpbGROb2RlSWQiLCAiX2dldENvbm5lY3RlZElkIiwgImZvdW5kQ2x1c3RlciIsICJmaW5kQ2x1c3RlckRhdGEiLCAiY2x1c3RlckJ5RWRnZUNvdW50IiwgImNsdXN0ZXJOb2RlUHJvcGVydGllcyIsICJwYXJlbnROb2RlSWQiLCAicGFyZW50Q2xvbmVkT3B0aW9ucyIsICJjaGlsZENsb25lZE9wdGlvbnMiLCAiY2hpbGROb2RlSURzIiwgImNoaWxkTm9kZSIsICJjaGlsZE5vZGVLZXkiLCAiY2hpbGRFZGdlIiwgImNsdXN0ZXJFZGdlUHJvcGVydGllcyIsICJvdGhlck5vZGVJZCIsICJjaGlsZEtleXMiLCAiY3JlYXRlRWRnZXMiLCAibmV3RWRnZXMiLCAiZ2V0TmV3RWRnZSIsICJjcmVhdGVkRWRnZSIsICJuZXdFZGdlIiwgIm1hdGNoVG9EaXJlY3Rpb24iLCAibWF0Y2hGcm9tRGlyZWN0aW9uIiwgIl9jcmVhdGVDbHVzdGVyZWRFZGdlIiwgIl9iYWNrdXBFZGdlT3B0aW9ucyIsICJ0bXBOb2Rlc1RvUmVtb3ZlIiwgImFsbG93U2luZ2xlTm9kZUNsdXN0ZXIiLCAicHJvY2Vzc1Byb3BlcnRpZXMiLCAiY2hpbGROb2Rlc09wdGlvbnMiLCAiY2hpbGRFZGdlc09wdGlvbnMiLCAiY2x1c3RlcklkIiwgIl9nZXRDbHVzdGVyUG9zaXRpb24iLCAiY2x1c3Rlck5vZGUiLCAiX2NsdXN0ZXJFZGdlcyIsICJvcmlnaW5hbE9wdGlvbnMiLCAiY2x1c3Rlck5vZGVJZCIsICJmaW5kTm9kZSIsICJwYXJlbnRJbmRleCIsICJwYXJlbnRDbHVzdGVyTm9kZUlkIiwgIl9vcGVuQ2hpbGRDbHVzdGVyIiwgInJlbGVhc2VGdW5jdGlvbiIsICJjbHVzdGVyUG9zaXRpb24iLCAibmV3UG9zaXRpb25zIiwgImVkZ2VzVG9CZURlbGV0ZWQiLCAib3RoZXJOb2RlIiwgInRyYW5zZmVySWQiLCAidHJhbnNmZXJFZGdlIiwgIm90aGVyQ2x1c3RlciIsICJfcmVzdG9yZUVkZ2UiLCAibm9kZXNBcnJheSIsICJjb3VudGVyIiwgIl9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eSIsICJjbHVzdGVyZWROb2RlSWQiLCAic3RhcnRFZGdlSWQiLCAiYWxsRWRnZUlkcyIsICJnZXRDbHVzdGVyZWRFZGdlcyIsICJjbHVzdGVyZWRFZGdlSWQiLCAiZ2V0QmFzZUVkZ2VzIiwgIklkc1RvSGFuZGxlIiwgImRvbmVJZHMiLCAiZm91bmRJZHMiLCAibmV4dElkIiwgIm5leHRFZGdlIiwgInJlcGxhY2luZ0lkcyIsICJyZXBsYWNpbmdJZCIsICJhdmVyYWdlIiwgImF2ZXJhZ2VTcXVhcmVkIiwgImh1YkNvdW50ZXIiLCAibGFyZ2VzdEh1YiIsICJ2YXJpYW5jZSIsICJzdGFuZGFyZERldmlhdGlvbiIsICJodWJUaHJlc2hvbGQiLCAiYmFzZUVkZ2UiLCAiZXh0cmFPcHRpb25zIiwgImNoaWxkTm9kZXMiLCAiY2hpbGRFZGdlcyIsICJfY3JlYXRlQ2x1c3RlckVkZ2VzIiwgImNsdXN0ZXJlZE5vZGUiLCAiZGVsZXRlZE5vZGVJZHMiLCAiZGVsZXRlZEVkZ2VJZHMiLCAiZWFjaENsdXN0ZXJOb2RlIiwgImVuZFBvaW50c1ZhbGlkIiwgInJlcGxhY2VkSWRzIiwgIm51bVZhbGlkIiwgImNvbnRhaW5lZEVkZ2VJZCIsICJjb250YWluZWRFZGdlIiwgImRlbGV0ZWRFZGdlSWQiLCAiX2ZpbHRlciIsICJzaG91bGRCZUNsdXN0ZXJlZCIsICJfaXNDbHVzdGVyZWROb2RlIiwgIl9pc0NsdXN0ZXJlZEVkZ2UiLCAiY2x1c3RlckZyb20iLCAiX2dldENsdXN0ZXJOb2RlRm9yTm9kZSIsICJjbHVzdGVyVG8iLCAiY29udGludWVMb29wIiwgIl9sb29wMiIsICJjbHVzdGVyc1RvT3BlbiIsICJudW1Ob2RlcyIsICJhbGxvd1NpbmdsZSIsICJvcGVuQ2x1c3RlciIsICJfdXBkYXRlU3RhdGUiLCAiQ2FudmFzUmVuZGVyZXIiLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgIm1velJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJ3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAibXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAicmVkcmF3UmVxdWVzdGVkIiwgInJlbmRlcmluZ0FjdGl2ZSIsICJyZW5kZXJSZXF1ZXN0cyIsICJhbGxvd1JlZHJhdyIsICJkcmFnZ2luZyIsICJ6b29taW5nIiwgImhpZGVFZGdlc09uRHJhZyIsICJoaWRlRWRnZXNPblpvb20iLCAiaGlkZU5vZGVzT25EcmFnIiwgIl9kZXRlcm1pbmVCcm93c2VyTWV0aG9kIiwgInpvb21UaW1lb3V0SWQiLCAiX3JlcXVlc3RSZWRyYXciLCAiX3Jlc2l6ZU5vZGVzIiwgIl9yZWRyYXciLCAiX3N0YXJ0UmVuZGVyaW5nIiwgImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwgImRlbGF5IiwgInRpbWVyIiwgIm15V2luZG93IiwgIl9yZXF1ZXN0TmV4dEZyYW1lIiwgIl9yZW5kZXJTdGVwIiwgImRyYXdFeHRlcm5hbExhYmVscyIsICJmcmFtZSIsICJzZXRTaXplIiwgInNldFRyYW5zZm9ybSIsICJjbGllbnRXaWR0aCIsICJjbGllbnRIZWlnaHQiLCAiY2xlYXJSZWN0IiwgInRyYW5zbGF0aW9uIiwgIl9kcmF3RWRnZXMiLCAiX2RyYXdOb2RlcyIsICJfZHJhd0Fycm93cyIsICJfZHJhd1NlbGVjdGlvbkJveCIsICJhbHdheXNTaG93IiwgImhvdmVyZWQiLCAidG9wTGVmdCIsICJET010b0NhbnZhcyIsICJib3R0b21SaWdodCIsICJ2aWV3YWJsZUFyZWEiLCAiaXNTZWxlY3RlZCIsICJpc0JvdW5kaW5nQm94T3ZlcmxhcHBpbmdXaXRoIiwgInNlbGVjdGVkTGVuZ3RoIiwgImhvdmVyZWRMZW5ndGgiLCAiX2kyIiwgIl9kcmF3RXh0ZXJuYWxMYWJlbHMyIiwgImRyYXdBcnJvd3MiLCAiYnJvd3NlclR5cGUiLCAic2VsZWN0aW9uQm94IiwgInNob3ciLCAib25Ub3VjaCIsICJoYW1tZXIiLCAib25SZWxlYXNlIiwgIkNhbnZhcyIsICJwaXhlbFJhdGlvIiwgImNhbWVyYVN0YXRlIiwgImNhbnZhc1ZpZXdDZW50ZXIiLCAiX2NsZWFudXBDYWxsYmFja3MiLCAiYXV0b1Jlc2l6ZSIsICJoYW1tZXJGcmFtZSIsICJfY2xlYW5VcCIsICJSZXNpemVPYnNlcnZlciIsICJvYnNlcnZlciIsICJvYnNlcnZlIiwgInVub2JzZXJ2ZSIsICJyZXNpemVUaW1lciIsICJfc2V0SW50ZXJ2YWwiLCAiY2xlYXJJbnRlcnZhbCIsICJyZXNpemVGdW5jdGlvbiIsICJfb25SZXNpemUiLCAicHJldmlvdXNXaWR0aCIsICJwcmV2aW91c0hlaWdodCIsICJ3aWR0aFJhdGlvIiwgImhlaWdodFJhdGlvIiwgIm5ld1NjYWxlIiwgImN1cnJlbnRWaWV3Q2VudGVyIiwgImRpc3RhbmNlRnJvbUNlbnRlciIsICJjb250YWluZXIiLCAiaGFzQ2hpbGROb2RlcyIsICJmaXJzdENoaWxkIiwgImNsYXNzTmFtZSIsICJvdmVyZmxvdyIsICJ0YWJJbmRleCIsICJfc2V0UGl4ZWxSYXRpbyIsICJub0NhbnZhcyIsICJmb250V2VpZ2h0IiwgInBhZGRpbmciLCAiaW5uZXJUZXh0IiwgIl9iaW5kSGFtbWVyIiwgImRyYWciLCAicGluY2giLCAiZXZlbnRMaXN0ZW5lcnMiLCAib25UYXAiLCAib25Eb3VibGVUYXAiLCAib25Ib2xkIiwgIm9uRHJhZ1N0YXJ0IiwgIm9uRHJhZyIsICJvbkRyYWdFbmQiLCAib25QaW5jaCIsICJvbk1vdXNlV2hlZWwiLCAib25Nb3VzZU1vdmUiLCAib25Db250ZXh0IiwgIl9wcmVwYXJlVmFsdWUiLCAiZW1pdEV2ZW50IiwgIm9sZFdpZHRoIiwgIm9sZEhlaWdodCIsICJwcmV2aW91c1JhdGlvIiwgIl9nZXRDYW1lcmFTdGF0ZSIsICJuZXdXaWR0aCIsICJuZXdIZWlnaHQiLCAiX3NldENhbWVyYVN0YXRlIiwgIm51bWVyYXRvciIsICJkZXZpY2VQaXhlbFJhdGlvIiwgIndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8iLCAibW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyIsICJtc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8iLCAib0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8iLCAiYmFja2luZ1N0b3JlUGl4ZWxSYXRpbyIsICJfZGV0ZXJtaW5lUGl4ZWxSYXRpbyIsICJfWGNvbnZlcnRDYW52YXNUb0RPTSIsICJfWWNvbnZlcnRDYW52YXNUb0RPTSIsICJfWGNvbnZlcnRET010b0NhbnZhcyIsICJfWWNvbnZlcnRET010b0NhbnZhcyIsICJWaWV3IiwgImFuaW1hdGlvblNwZWVkIiwgInJlbmRlclJlZnJlc2hSYXRlIiwgImFuaW1hdGlvbkVhc2luZ0Z1bmN0aW9uIiwgImVhc2luZ1RpbWUiLCAic291cmNlU2NhbGUiLCAidGFyZ2V0U2NhbGUiLCAic291cmNlVHJhbnNsYXRpb24iLCAidGFyZ2V0VHJhbnNsYXRpb24iLCAibG9ja2VkT25Ob2RlSWQiLCAibG9ja2VkT25Ob2RlT2Zmc2V0IiwgInRvdWNoVGltZSIsICJyZWxlYXNlTm9kZSIsICJpbml0aWFsWm9vbSIsICJyYXdPcHRpb25zIiwgImFsbE5vZGVJZHMiLCAibWluWm9vbUxldmVsIiwgIk1JTl9WQUxVRSIsICJtYXhab29tTGV2ZWwiLCAiem9vbUxldmVsIiwgImNhbnZhc1dpZHRoIiwgImNhbnZhc0hlaWdodCIsICJnZXRSYW5nZSIsICJwb3NpdGlvbkRlZmluZWQiLCAieFpvb21MZXZlbCIsICJ5Wm9vbUxldmVsIiwgImFuaW1hdGlvbk9wdGlvbnMiLCAiZmluZENlbnRlciIsICJhbmltYXRpb24iLCAibm9kZVBvc2l0aW9uIiwgImxvY2tlZE9uTm9kZSIsICJnZXRWaWV3UG9zaXRpb24iLCAiZHVyYXRpb24iLCAiZWFzaW5nRnVuY3Rpb24iLCAiYW5pbWF0ZVZpZXciLCAibG9ja2VkIiwgIl90cmFuc2l0aW9uUmVkcmF3IiwgInZpZXdDZW50ZXIiLCAiX2xvY2tlZFJlZHJhdyIsICJmaW5pc2hlZCIsICJwcm9ncmVzcyIsICJlYXNpbmdGdW5jdGlvbnMiLCAia2V5Y2hhcm0iLCAiX2V4cG9ydEZ1bmN0aW9ucyIsICJfYm91bmQiLCAia2V5ZG93biIsICJrZXl1cCIsICJfa2V5cyIsICJmcm9tQ2hhckNvZGUiLCAiZG93biIsICJoYW5kbGVFdmVudCIsICJ1cCIsICJrZXlDb2RlIiwgImJvdW5kIiwgInNoaWZ0S2V5IiwgImJpbmRBbGwiLCAiZ2V0S2V5IiwgInVuYmluZCIsICJuZXdCaW5kaW5ncyIsICJOYXZpZ2F0aW9uSGFuZGxlciIsICJpY29uc0NyZWF0ZWQiLCAibmF2aWdhdGlvbkhhbW1lcnMiLCAiYm91bmRGdW5jdGlvbnMiLCAiYWN0aXZhdGVkIiwgImNvbmZpZ3VyZUtleWJvYXJkQmluZGluZ3MiLCAibmF2aWdhdGlvbkJ1dHRvbnMiLCAibG9hZE5hdmlnYXRpb25FbGVtZW50cyIsICJjbGVhbk5hdmlnYXRpb24iLCAibmF2aWdhdGlvbkRPTSIsICJuYXZpZ2F0aW9uRGl2cyIsICJuYXZpZ2F0aW9uRGl2QWN0aW9ucyIsICJfZml0IiwgImJpbmRUb1JlZHJhdyIsICJfc3RvcE1vdmVtZW50IiwgImFjdGlvbiIsICJib3VuZEFjdGlvbiIsICJrZXlib2FyZCIsICJzcGVlZCIsICJzY2FsZU9sZCIsICJ6b29tIiwgInNjYWxlRnJhYyIsICJ0eCIsICJ0eSIsICJwb2ludGVyIiwgIl9jb250ZXh0NiIsICJfY29udGV4dDciLCAiX2NvbnRleHQ4IiwgIl9jb250ZXh0OSIsICJfY29udGV4dDEwIiwgIl9jb250ZXh0MTEiLCAiX2NvbnRleHQxMiIsICJfY29udGV4dDEzIiwgIl9jb250ZXh0MTQiLCAiX2NvbnRleHQxNSIsICJfY29udGV4dDE2IiwgIl9jb250ZXh0MTciLCAiX2NvbnRleHQxOCIsICJfY29udGV4dDE5IiwgIl9jb250ZXh0MjAiLCAiX2NvbnRleHQyMSIsICJfY29udGV4dDIyIiwgIl9jb250ZXh0MjMiLCAiX2NvbnRleHQyNCIsICJfY29udGV4dDI1IiwgIl9jb250ZXh0MjYiLCAiX2NvbnRleHQyNyIsICJiaW5kVG9XaW5kb3ciLCAidW5iaW5kRnJvbVJlZHJhdyIsICJJbnRlcmFjdGlvbkhhbmRsZXIiLCAic2VsZWN0aW9uSGFuZGxlciIsICJuYXZpZ2F0aW9uSGFuZGxlciIsICJwb3B1cCIsICJwb3B1cE9iaiIsICJwb3B1cFRpbWVyIiwgImdldFBvaW50ZXIiLCAiZHJhZ05vZGVzIiwgImRyYWdWaWV3IiwgImF1dG9Gb2N1cyIsICJ0b29sdGlwRGVsYXkiLCAiem9vbVZpZXciLCAiem9vbVNwZWVkIiwgImdldEFic29sdXRlVG9wIiwgInBpbmNoZWQiLCAibXVsdGlzZWxlY3QiLCAiY3RybEtleSIsICJtZXRhS2V5IiwgImNoZWNrU2VsZWN0aW9uQ2hhbmdlcyIsICJjb21taXRBbmRFbWl0IiwgImdlbmVyYXRlQ2xpY2tFdmVudCIsICJzZWxlY3RBZGRpdGlvbmFsT25Qb2ludCIsICJzZWxlY3RPblBvaW50IiwgImZpcnN0U2V0IiwgInNlY29uZFNldCIsICJhcnJheURpZmYiLCAiZmlyc3RBcnIiLCAic2Vjb25kQXJyIiwgImdldE5vZGVBdCIsICJzZWxlY3Rpb24iLCAic2V0U2VsZWN0aW9uIiwgImdldFNlbGVjdGVkTm9kZXMiLCAieEZpeGVkIiwgInlGaXhlZCIsICJkaWZmWCIsICJkaWZmWSIsICJzZWxlY3Rpb25Cb3hQb3NpdGlvbiIsICJzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heCIsICJ0b0JlU2VsZWN0ZWROb2RlcyIsICJzZWxlY3RPYmplY3QiLCAicHJlU2NhbGVEcmFnUG9pbnRlciIsICJwb3N0U2NhbGVEcmFnUG9pbnRlciIsICJjYW52YXNUb0RPTSIsICJwb3B1cFZpc2libGUiLCAiX2NoZWNrSGlkZVBvcHVwIiwgInNldFBvc2l0aW9uIiwgImZvY3VzIiwgIl9jaGVja1Nob3dQb3B1cCIsICJob3Zlck9iamVjdCIsICJwb2ludGVyT2JqIiwgInByZXZpb3VzUG9wdXBPYmpJZCIsICJub2RlVW5kZXJDdXJzb3IiLCAicG9wdXBUeXBlIiwgIm92ZXJsYXBwaW5nTm9kZXMiLCAiZ2V0VGl0bGUiLCAib3ZlcmxhcHBpbmdFZGdlcyIsICJQb3B1cCIsICJwb3B1cFRhcmdldFR5cGUiLCAicG9wdXBUYXJnZXRJZCIsICJzZXRUZXh0IiwgImhpZGUiLCAiX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0IiwgInN0aWxsT25PYmoiLCAib3Zlck5vZGUiLCAiU2V0IiwgInVuY2F1Z2h0RnJvemVuU3RvcmUiLCAiZnJvemVuIiwgIlVuY2F1Z2h0RnJvemVuU3RvcmUiLCAiZmluZFVuY2F1Z2h0RnJvemVuIiwgIkludGVybmFsV2Vha01hcCIsICJjb2xsZWN0aW9uV2VhayIsICJlbmZvcmNlSW50ZXJuYWxTdGF0ZSIsICJpc0Zyb3plbiIsICJpc1NlYWxlZCIsICJmcmVlemUiLCAic2VhbCIsICJGUk9aRU4iLCAiU0VBTEVEIiwgIklTX0lFMTEiLCAiJFdlYWtNYXAiLCAiV2Vha01hcFByb3RvdHlwZSIsICJuYXRpdmVTZXQiLCAibmF0aXZlRGVsZXRlIiwgIm5hdGl2ZUhhcyIsICJuYXRpdmVHZXQiLCAiZnJvemVuQXJyYXkiLCAiYXJyYXlJbnRlZ3JpdHlMZXZlbCIsICJkaWZmU2V0cyIsICJkaWZmIiwgIl9TZXQiLCAiU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yIiwgIl9TaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3JfcHJldmlvdXNTZWxlY3Rpb24iLCAiX1NpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvcl9zZWxlY3Rpb24iLCAiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsICJfaXRlbXMiLCAiX2xlbjIiLCAiX2tleTIiLCAiX2l0ZW1zMiIsICJhZGRlZCIsICJkZWxldGVkIiwgImNoYW5nZXMiLCAiZ2V0Q2hhbmdlcyIsICJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IiwgIl9zdGVwMiIsICJfaXRlcmF0b3IyIiwgInNlbGVjdCIsICJfc3RlcDMiLCAiX2l0ZXJhdG9yMyIsICJ1bnNlbGVjdCIsICJTZWxlY3Rpb25BY2N1bXVsYXRvciIsICJjb21taXRIYW5kbGVyIiwgIl9TZWxlY3Rpb25BY2N1bXVsYXRvcl9ub2RlcyIsICJfU2VsZWN0aW9uQWNjdW11bGF0b3JfZWRnZXMiLCAiX1NlbGVjdGlvbkFjY3VtdWxhdG9yX2NvbW1pdEhhbmRsZXIiLCAiZ2V0U2VsZWN0aW9uIiwgIl9jbGFzc1ByaXZhdGVGaWVsZEdlIiwgIl9jbGFzc1ByaXZhdGVGaWVsZEdlMiIsICJfY2xhc3NQcml2YXRlRmllbGRHZTMiLCAic3VtbWFyeSIsICJjb21taXQiLCAiX2xlbjMiLCAicmVzdCIsICJfa2V5MyIsICJfY29uY2F0SW5zdGFuY2VQcm9wZXJ0eSIsICJTZWxlY3Rpb25IYW5kbGVyIiwgIl9zZWxlY3Rpb25BY2N1bXVsYXRvciIsICJob3Zlck9iaiIsICJzZWxlY3RhYmxlIiwgInNlbGVjdENvbm5lY3RlZEVkZ2VzIiwgImhvdmVyQ29ubmVjdGVkRWRnZXMiLCAidXBkYXRlU2VsZWN0aW9uIiwgImdldEVkZ2VBdCIsICJ1bnNlbGVjdEFsbCIsICJzZWxlY3Rpb25DaGFuZ2VkIiwgImRlc2VsZWN0T2JqZWN0IiwgIkRPTSIsICJvbGRTZWxlY3Rpb24iLCAiZW1wdHlTZWxlY3Rpb24iLCAiX2luaXRCYXNlRXZlbnQiLCAiZ2V0Q2xpY2tlZEl0ZW1zIiwgImNvbnRyb2xFZGdlIiwgImhpZ2hsaWdodEVkZ2VzIiwgIl90aGlzJF9zZWxlY3Rpb25BY2N1bSIsICJhZGRFZGdlcyIsICJhZGROb2RlcyIsICJfcmVtb3ZlRnJvbVNlbGVjdGlvbiIsICJjYW52YXNQb3MiLCAicmV0dXJuTm9kZSIsICJwb3NpdGlvbk9iamVjdCIsICJfZ2V0QWxsTm9kZXNPdmVybGFwcGluZ1dpdGgiLCAiX2dldEVkZ2VzT3ZlcmxhcHBpbmdXaXRoIiwgInJldHVybkVkZ2UiLCAibWluZGlzdCIsICJvdmVybGFwcGluZ0VkZ2UiLCAiZGlzdCIsICJfdGhpcyRfc2VsZWN0aW9uQWNjdW0yIiwgImRlbGV0ZU5vZGVzIiwgImRlbGV0ZUVkZ2VzIiwgInNpemVOb2RlcyIsICJzaXplRWRnZXMiLCAiX2FkZFRvSG92ZXIiLCAiaG92ZXJDaGFuZ2VkIiwgImVtaXRCbHVyRXZlbnQiLCAiaG92ZXJlZEVkZ2VzQ291bnQiLCAiaG92ZXJlZE5vZGVzQ291bnQiLCAiZW1pdEhvdmVyRXZlbnQiLCAiX2hvdmVyQ29ubmVjdGVkRWRnZXMiLCAic2VsZWN0aW9uQ2hhbmdlcyIsICJwcmV2aW91c1NlbGVjdGlvbiIsICJnZXRTZWxlY3RlZE5vZGVJZHMiLCAiZ2V0U2VsZWN0ZWRFZGdlSWRzIiwgImdldE5vZGVzIiwgImdldEVkZ2VzIiwgImdldEl0ZW1zT25Qb2ludCIsICJtZXJnZVNvcnQiLCAiY29tcGFyZWZuIiwgImluc2VydGlvblNvcnQiLCAibGxlbmd0aCIsICJybGVuZ3RoIiwgImxpbmRleCIsICJyaW5kZXgiLCAiYXJyYXlTb3J0IiwgImZpcmVmb3giLCAiZW5naW5lRmZWZXJzaW9uIiwgImVuZ2luZUlzSWVPckVkZ2UiLCAid2Via2l0IiwgImVuZ2luZVdlYmtpdFZlcnNpb24iLCAiaW50ZXJuYWxTb3J0IiwgIkZGIiwgIklFX09SX0VER0UiLCAiVjgiLCAiV0VCS0lUIiwgIm5hdGl2ZVNvcnQiLCAiRkFJTFNfT05fVU5ERUZJTkVEIiwgIkZBSUxTX09OX05VTEwiLCAiU1RSSUNUX01FVEhPRCIsICJTVEFCTEVfU09SVCIsICJpdGVtc0xlbmd0aCIsICJhcnJheUxlbmd0aCIsICJJU19SSUdIVCIsICJtZW1vIiwgImFycmF5UmVkdWNlIiwgImVuZ2luZUlzTm9kZSIsICIkcmVkdWNlIiwgInJlZHVjZSIsICJEaXJlY3Rpb25JbnRlcmZhY2UiLCAiYWJzdHJhY3QiLCAiZmFrZV91c2UiLCAibm9kZUFycmF5IiwgIlZlcnRpY2FsU3RyYXRlZ3kiLCAiX0RpcmVjdGlvbkludGVyZmFjZSIsICJsYXlvdXQiLCAiaGllcmFyY2hpY2FsIiwgImFkZFRvT3JkZXJpbmciLCAiZ2V0VHJlZVNpemUiLCAibWluX3giLCAibWF4X3giLCAiX3NvcnRJbnN0YW5jZVByb3BlcnR5IiwgImxldmVsU2VwYXJhdGlvbiIsICJIb3Jpem9udGFsU3RyYXRlZ3kiLCAiX0RpcmVjdGlvbkludGVyZmFjZTIiLCAibWluX3kiLCAibWF4X3kiLCAiJGV2ZXJ5IiwgImZpbGxMZXZlbHNCeURpcmVjdGlvbkN5Y2xpYyIsICJsZXZlbHMiLCAiZmlsbExldmVsc0J5RGlyZWN0aW9uIiwgImlzRW50cnlOb2RlIiwgInNob3VsZExldmVsQmVSZXBsYWNlZCIsICJsaW1pdCIsICJfcmVkdWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJhY2MiLCAiZWRnZUlkUHJvcCIsICJuZXdMZXZlbERpZmYiLCAiX3JldCIsICJfc3RlcCR2YWx1ZSIsICJlbnRyeU5vZGVJZCIsICJlbnRyeU5vZGUiLCAiX3JldDIiLCAibmV3TGV2ZWwiLCAidGFyZ2V0Tm9kZUlkIiwgIm9sZExldmVsIiwgIkhpZXJhcmNoaWNhbFN0YXR1cyIsICJjaGlsZHJlblJlZmVyZW5jZSIsICJwYXJlbnRSZWZlcmVuY2UiLCAidHJlZXMiLCAiZGlzdHJpYnV0aW9uT3JkZXJpbmciLCAiZGlzdHJpYnV0aW9uSW5kZXgiLCAiaXNUcmVlIiwgInRyZWVJbmRleCIsICJ0cmVlSWQiLCAiYWNjdW11bGF0b3IiLCAiX2dldE1heExldmVsIiwgIm5vZGVBIiwgIm5vZGVCIiwgIm1pbkxldmVsIiwgInBhcmVudHMxIiwgInBhcmVudHMyIiwgImlzUHJlc2VudCIsICJjdXJMZXZlbCIsICJMYXlvdXRFbmdpbmUiLCAiX3Jlc2V0Uk5HIiwgInNldFBoeXNpY3MiLCAib3B0aW9uc0JhY2t1cCIsICJyYW5kb21TZWVkIiwgImltcHJvdmVkTGF5b3V0IiwgImNsdXN0ZXJUaHJlc2hvbGQiLCAibm9kZVNwYWNpbmciLCAidHJlZVNwYWNpbmciLCAiYmxvY2tTaGlmdGluZyIsICJlZGdlTWluaW1pemF0aW9uIiwgInBhcmVudENlbnRyYWxpemF0aW9uIiwgInNvcnRNZXRob2QiLCAic2V0dXBIaWVyYXJjaGljYWxMYXlvdXQiLCAibGF5b3V0TmV0d29yayIsICJjdXJ2ZVR5cGUiLCAiYWxsT3B0aW9ucyIsICJwcmV2SGllcmFyY2hpY2FsU3RhdGUiLCAic2V0RGlyZWN0aW9uU3RyYXRlZ3kiLCAiYWRhcHRBbGxPcHRpb25zRm9ySGllcmFyY2hpY2FsTGF5b3V0IiwgInNlZWQiLCAiaW5pdGlhbFJhbmRvbVNlZWQiLCAiYmFja3VwUGh5c2ljcyIsICJpbmRpY2VzIiwgImNsdXN0ZXJPcHRpb25zIiwgInN0YXJ0TGVuZ3RoIiwgImJlZm9yZSIsICJtb2R1bGVzIiwgImNsdXN0ZXJpbmciLCAiY2x1c3RlckJyaWRnZXMiLCAiY2x1c3Rlck91dGxpZXJzIiwgIl9kZWNsdXN0ZXJBbGwiLCAiaW5mbyIsICJrYW1hZGFLYXdhaSIsICJfc2hpZnRUb0NlbnRlciIsICJnZXRSYW5nZUNvcmUiLCAiY2x1c3RlcnNQcmVzZW50IiwgImRlZmluZWRMZXZlbCIsICJ1bmRlZmluZWRMZXZlbCIsICJsYXN0Tm9kZU9uTGV2ZWwiLCAiX2RldGVybWluZUxldmVsc0J5SHVic2l6ZSIsICJfZGV0ZXJtaW5lTGV2ZWxzRGlyZWN0ZWQiLCAiX2RldGVybWluZUxldmVsc0N1c3RvbUNhbGxiYWNrIiwgImVuc3VyZUxldmVsIiwgImRpc3RyaWJ1dGlvbiIsICJfZ2V0RGlzdHJpYnV0aW9uIiwgIl9nZW5lcmF0ZU1hcCIsICJfcGxhY2VOb2Rlc0J5SGllcmFyY2h5IiwgIl9jb25kZW5zZUhpZXJhcmNoeSIsICJzdGlsbFNoaWZ0aW5nIiwgImJyYW5jaGVzIiwgInNoaWZ0VHJlZSIsICJnZXRUcmVlU2l6ZXMiLCAidHJlZVdpZHRocyIsICJudW1UcmVlcyIsICJnZXRCcmFuY2hOb2RlcyIsICJnZXRCcmFuY2hCb3VuZGFyeSIsICJicmFuY2hNYXAiLCAibWF4TGV2ZWwiLCAibWluU3BhY2UiLCAibWF4U3BhY2UiLCAiYnJhbmNoTm9kZSIsICJnZXRQb3NpdGlvbiIsICJfdGhpczMkX2dldFNwYWNlQXJvdW4yIiwgIl9nZXRTcGFjZUFyb3VuZE5vZGUiLCAibWluU3BhY2VOb2RlIiwgIm1heFNwYWNlTm9kZSIsICJzaGlmdEVsZW1lbnRzQ2xvc2VyIiwgImNlbnRlclBhcmVudHMiLCAiaGllciIsICJsZXZlbE5vZGVzIiwgImhhc1NhbWVQYXJlbnQiLCAiaW5TYW1lU3ViTmV0d29yayIsICJicmFuY2hTaGlmdENhbGxiYWNrIiwgImNlbnRlclBhcmVudCIsICJwb3MxIiwgInBvczIiLCAiZGlmZkFicyIsICJicmFuY2hOb2RlczEiLCAiYnJhbmNoTm9kZXMyIiwgIm1heExldmVsMSIsICJnZXRNYXhMZXZlbCIsICJtYXhMZXZlbDIiLCAiYnJhbmNoTm9kZUJvdW5kYXJ5MSIsICJicmFuY2hOb2RlQm91bmRhcnkyIiwgIm1heDEiLCAibWluMiIsICJtaW5TcGFjZTIiLCAiX3NoaWZ0QmxvY2siLCAiX2NlbnRlclBhcmVudCIsICJtaW5pbWl6ZUVkZ2VMZW5ndGgiLCAiYWxsRWRnZXMiLCAibm9kZUxldmVsIiwgIkMyIiwgInJlZmVyZW5jZU5vZGVzIiwgImFib3ZlRWRnZXMiLCAiZ2V0RngiLCAiZ2V0REZ4IiwgImdldEd1ZXNzIiwgImd1ZXNzIiwgImd1ZXNzTWFwIiwgImRmeCIsICJicmFuY2hOb2RlcyIsICJicmFuY2hCb3VuZGFyeSIsICJtaW5TcGFjZUJyYW5jaCIsICJtYXhTcGFjZUJyYW5jaCIsICJicmFuY2hPZmZzZXQiLCAiX3RoaXMzJF9nZXRTcGFjZUFyb3VuNCIsICJuZXdQb3NpdGlvbiIsICJnZXRMZXZlbHMiLCAiY2VudGVyQWxsUGFyZW50cyIsICJjZW50ZXJBbGxQYXJlbnRzQm90dG9tVXAiLCAidHJlZVNpemVzIiwgInNoaWZ0QnkiLCAic2hpZnRUcmVlcyIsICJ1c2VNYXAiLCAib3JkZXJpbmciLCAicHJldk5vZGUiLCAibmV4dE5vZGUiLCAibmV4dFBvcyIsICJwYXJlbnRzIiwgInBhcmVudElkIiwgIl9nZXRDZW50ZXJQb3NpdGlvbiIsICJfdGhpcyRfZ2V0U3BhY2VBcm91bmQyIiwgInBvc2l0aW9uZWROb2RlcyIsICJfaW5kZXhBcnJheVRvTm9kZXMiLCAiaGFuZGxlZE5vZGVDb3VudCIsICJfdmFsaWRhdGVQb3NpdGlvbkFuZENvbnRpbnVlIiwgInBhcmVudExldmVsIiwgImNoaWxkUmVmIiwgImNoaWxkTm9kZUxldmVsIiwgInByZXZpb3VzUG9zIiwgInNoYXJlZFBhcmVudCIsICJfZmluZENvbW1vblBhcmVudCIsICJ3aXRoQ2hpbGQiLCAiX3BsYWNlQnJhbmNoTm9kZXMiLCAiaWRBcnJheSIsICJmaXgiLCAiaHViU2l6ZXMiLCAiaHViU2l6ZSIsICJfZ2V0QWN0aXZlRWRnZXMiLCAiX3RoaXM2IiwgImxldmVsRG93bnN0cmVhbSIsICJfZ2V0SHViU2l6ZXMiLCAiX2NyYXdsTmV0d29yayIsICJfdGhpczciLCAibGV2ZWxBIiwgInNldE1pbkxldmVsVG9aZXJvIiwgIl90aGlzOCIsICJzaGFrZVRvd2FyZHMiLCAiX2V2ZXJ5SW5zdGFuY2VQcm9wZXJ0eSIsICJfdGhpczkiLCAiYWRkUmVsYXRpb24iLCAiY2hlY2tJZlRyZWUiLCAiX3RoaXMxMCIsICJzdGFydGluZ05vZGVJZCIsICJjcmF3bGVyIiwgInRyZWUiLCAic2V0VHJlZUluZGV4IiwgIl90aGlzMTEiLCAic2hpZnRlciIsICJjaGlsZEEiLCAiY2hpbGRCIiwgIl90aGlzMTIiLCAiaXRlcmF0ZVBhcmVudHMiLCAicGFyZW50UmVmIiwgImZpbmRQYXJlbnQiLCAiZm91bmRQYXJlbnQiLCAiaXNWZXJ0aWNhbCIsICJtaW5Qb3MiLCAibWF4UG9zIiwgIk1hbmlwdWxhdGlvblN5c3RlbSIsICJpbnRlcmFjdGlvbkhhbmRsZXIiLCAiZWRpdE1vZGUiLCAibWFuaXB1bGF0aW9uRGl2IiwgImVkaXRNb2RlRGl2IiwgImNsb3NlRGl2IiwgIl9kb21FdmVudExpc3RlbmVyQ2xlYW51cFF1ZXVlIiwgInRlbXBvcmFyeVVJRnVuY3Rpb25zIiwgInRlbXBvcmFyeUV2ZW50RnVuY3Rpb25zIiwgInRlbXBvcmFyeUlkcyIsICJndWlFbmFibGVkIiwgImluTW9kZSIsICJzZWxlY3RlZENvbnRyb2xOb2RlIiwgImluaXRpYWxseUFjdGl2ZSIsICJkZWxldGVOb2RlIiwgImRlbGV0ZUVkZ2UiLCAiY29udHJvbE5vZGVTdHlsZSIsICJfY2xlYW4iLCAiX3Jlc3RvcmUiLCAiZW5hYmxlRWRpdE1vZGUiLCAiZGlzYWJsZUVkaXRNb2RlIiwgImxvY2FsZSIsICJsb2NhbGVzIiwgIl9zZXR1cCIsICJzaG93TWFuaXB1bGF0b3JUb29sYmFyIiwgIl9jcmVhdGVFZGl0QnV0dG9uIiwgIm1hbmlwdWxhdGlvbkRPTSIsICJzZWxlY3RlZE5vZGVDb3VudCIsICJnZXRTZWxlY3RlZE5vZGVDb3VudCIsICJzZWxlY3RlZEVkZ2VDb3VudCIsICJnZXRTZWxlY3RlZEVkZ2VDb3VudCIsICJzZWxlY3RlZFRvdGFsQ291bnQiLCAibmVlZFNlcGVyYXRvciIsICJfY3JlYXRlQWRkTm9kZUJ1dHRvbiIsICJfY3JlYXRlU2VwZXJhdG9yIiwgIl9jcmVhdGVBZGRFZGdlQnV0dG9uIiwgIl9jcmVhdGVFZGl0Tm9kZUJ1dHRvbiIsICJfY3JlYXRlRWRpdEVkZ2VCdXR0b24iLCAiX2NyZWF0ZURlbGV0ZUJ1dHRvbiIsICJfYmluZEVsZW1lbnRFdmVudHMiLCAidG9nZ2xlRWRpdE1vZGUiLCAiX3RlbXBvcmFyeUJpbmRFdmVudCIsICJfY3JlYXRlQmFja0J1dHRvbiIsICJfY3JlYXRlRGVzY3JpcHRpb24iLCAiX3BlcmZvcm1BZGROb2RlIiwgImZpbmFsaXplZERhdGEiLCAiYWxlcnQiLCAiX3RlbXBvcmFyeUJpbmRVSSIsICJfaGFuZGxlQ29ubmVjdCIsICJfZmluaXNoQ29ubmVjdCIsICJfZHJhZ0NvbnRyb2xOb2RlIiwgIl9kcmFnU3RhcnRFZGdlIiwgImVkaXRXaXRob3V0RHJhZyIsICJlZGdlQmVpbmdFZGl0ZWRJZCIsICJjb250cm9sTm9kZUZyb20iLCAiX2dldE5ld1RhcmdldE5vZGUiLCAiY29udHJvbE5vZGVUbyIsICJfY29udHJvbE5vZGVUb3VjaCIsICJfY29udHJvbE5vZGVEcmFnU3RhcnQiLCAiX2NvbnRyb2xOb2RlRHJhZyIsICJfY29udHJvbE5vZGVEcmFnRW5kIiwgImZpbmRCb3JkZXJQb3NpdGlvbnMiLCAiX3BlcmZvcm1FZGl0RWRnZSIsICJzZWxlY3RlZE5vZGVzIiwgInNlbGVjdGVkRWRnZXMiLCAiZGVsZXRlRnVuY3Rpb24iLCAiX2NyZWF0ZVdyYXBwZXJzIiwgIl9yZW1vdmVNYW5pcHVsYXRpb25ET00iLCAiX3RoaXMkb3B0aW9ucyRsb2NhbGVzIiwgIl90aGlzJG9wdGlvbnMkbG9jYWxlczIiLCAic2V0QXR0cmlidXRlIiwgInJlY3Vyc2l2ZURPTURlbGV0ZSIsICJfY3JlYXRlQnV0dG9uIiwgIl9jbGVhbnVwRE9NRXZlbnRMaXN0ZW5lcnMiLCAiX2NsZWFudXBUZW1wb3JhcnlOb2Rlc0FuZEVkZ2VzIiwgIl91bmJpbmRUZW1wb3JhcnlVSXMiLCAiX3VuYmluZFRlbXBvcmFyeUV2ZW50cyIsICJhZGROb2RlTW9kZSIsICJhZGRFZGdlTW9kZSIsICJlZGl0RWRnZU1vZGUiLCAiZGVsZXRlQnRuQ2xhc3MiLCAicnRsIiwgImRlbGV0ZVNlbGVjdGVkIiwgImxhYmVsQ2xhc3NOYW1lIiwgIm5ld0Z1bmN0aW9uIiwgIlVJZnVuY3Rpb25OYW1lIiwgImV2ZW50TmFtZSIsICJkb21FbGVtZW50IiwgImtleXVwTGlzdGVuZXIiLCAiX3JlZiIsICJpbmRleFRlbXBFZGdlIiwgIl9jb250ZXh0MjgiLCAiX2NvbnRleHQyOSIsICJpbmRleFRlbXBOb2RlIiwgImZyb21TZWxlY3QiLCAidG9TZWxlY3QiLCAib3ZlcmxhcHBpbmdOb2RlSWRzIiwgInRhcmdldE5vZGUiLCAiY29ubmVjdGlvbkVkZ2UiLCAiY29ubmVjdEZyb21JZCIsICJfY29udGV4dDMwIiwgIl9jb250ZXh0MzEiLCAiX3BlcmZvcm1BZGRFZGdlIiwgImNsaWNrRGF0YSIsICJkZWZhdWx0RGF0YSIsICJzb3VyY2VOb2RlSWQiLCAiZWVGdW5jdCIsICJib29sIiwgImVuZFBvaW50cyIsICJub2RlT3B0aW9ucyIsICJib29sZWFuIiwgImZ1bmN0aW9uIiwgIl9fdHlwZV9fIiwgIm1pbmltdW0iLCAiZG9tIiwgIm1heGltdW0iLCAiY29uZmlndXJlIiwgInNob3dCdXR0b24iLCAiX19hbnlfXyIsICJpbnRlcmFjdGlvbiIsICJtYW5pcHVsYXRpb24iLCAiY2xpY2tUb1VzZSIsICJhbnkiLCAiY29uZmlndXJlT3B0aW9ucyIsICJjb25maWd1cmF0b3JIaWRlT3B0aW9uIiwgInBhcmVudFBhdGgiLCAib3B0aW9uTmFtZSIsICJGbG95ZFdhcnNoYWxsIiwgImVkZ2VzQXJyYXkiLCAiRF9tYXRyaXgiLCAiY2VsbCIsICJrbm9kZSIsICJrY29sbSIsICJpbm9kZSIsICJpY29sbSIsICJqbm9kZSIsICJqY29sbSIsICJLYW1hZGFLYXdhaSIsICJlZGdlU3RyZW5ndGgiLCAiZGlzdGFuY2VTb2x2ZXIiLCAiaWdub3JlQ2x1c3RlcnMiLCAiZ2V0RGlzdGFuY2VzIiwgIl9jcmVhdGVMX21hdHJpeCIsICJfY3JlYXRlS19tYXRyaXgiLCAiX2NyZWF0ZUVfbWF0cml4IiwgIm1heEl0ZXJhdGlvbnMiLCAibWF4RW5lcmd5IiwgImhpZ2hFX25vZGVJZCIsICJkRV9keCIsICJkRV9keSIsICJkZWx0YV9tIiwgInN1Ykl0ZXJhdGlvbnMiLCAiX3RoaXMkX2dldEhpZ2hlc3RFbmVyMiIsICJfZ2V0SGlnaGVzdEVuZXJneU5vZGUiLCAiX21vdmVOb2RlIiwgIl90aGlzJF9nZXRFbmVyZ3kyIiwgIl9nZXRFbmVyZ3kiLCAibWF4RW5lcmd5Tm9kZUlkIiwgImRFX2R4X21heCIsICJkRV9keV9tYXgiLCAibm9kZUlkeCIsICJfdGhpcyRfZ2V0RW5lcmd5NCIsICJfdGhpcyRFX3N1bXMkbSIsICJFX3N1bXMiLCAiZDJFX2R4MiIsICJkMkVfZHhkeSIsICJkMkVfZHkyIiwgInhfbSIsICJ5X20iLCAia20iLCAiS19tYXRyaXgiLCAibG0iLCAiTF9tYXRyaXgiLCAiaUlkeCIsICJ4X2kiLCAieV9pIiwgImttYXQiLCAibG1hdCIsICJkZW5vbWluYXRvciIsICJfdXBkYXRlRV9tYXRyaXgiLCAiRV9tYXRyaXgiLCAibUlkeCIsICJjb2xtIiwgImxjb2xtIiwgIm9sZER4IiwgIm9sZER5IiwgIk5ldHdvcmsiLCAicmVuZGVyZXIiLCAibm9kZXNIYW5kbGVyIiwgImVkZ2VzSGFuZGxlciIsICJfY3JlYXRlIiwgInNldERhdGEiLCAiVmFsaWRhdG9yIiwgInZhbGlkYXRlIiwgInJhd0NvZGUiLCAiX3Jhd0NvZGUkc3BsaXQyIiwgInJhd0xhbmd1YWdlIiwgInJhd0NvdW50cnkiLCAibGFuZ3VhZ2UiLCAiY291bnRyeSIsICJjb25maWd1cmF0b3IiLCAiQ29uZmlndXJhdG9yIiwgIm5ldHdvcmtPcHRpb25zIiwgInNldE1vZHVsZU9wdGlvbnMiLCAiYWN0aXZhdG9yIiwgIkFjdGl2YXRvciIsICJfdXBkYXRlVmlzaWJsZUluZGljZXMiLCAiZWRnZU5vZGVzUHJlc2VudCIsICJfdXBkYXRlVmFsdWVSYW5nZSIsICJnZXBoaSIsICJnZXBoaURhdGEiLCAidmFsdWVNaW4iLCAidmFsdWVNYXgiLCAidmFsdWVUb3RhbCIsICJzZXRWYWx1ZVJhbmdlIiwgImlzQWN0aXZlIiwgImFjdGl2ZSIsICJjbHVzdGVyIiwgImdldE5vZGVzSW5DbHVzdGVyIiwgImNsdXN0ZXJCeUh1YnNpemUiLCAidXBkYXRlQ2x1c3RlcmVkTm9kZSIsICJnZXRCYXNlRWRnZSIsICJ1cGRhdGVFZGdlIiwgImdldFNlZWQiLCAiZWRpdE5vZGVNb2RlIiwgImdldFBvc2l0aW9ucyIsICJzdG9yZVBvc2l0aW9ucyIsICJtb3ZlTm9kZSIsICJnZXRCb3VuZGluZ0JveCIsICJnZXRDb25uZWN0ZWROb2RlcyIsICJvYmplY3RJZCIsICJnZXRDb25uZWN0ZWRFZGdlcyIsICJnZXRTZWxlY3RlZEVkZ2VzIiwgInNlbGVjdE5vZGVzIiwgInNlbGVjdEVkZ2VzIiwgImNvbW1pdFdpdGhvdXRFbWl0dGluZyIsICJyZWRyYXciLCAiZ2V0U2NhbGUiLCAiZ2V0T3B0aW9uc0Zyb21Db25maWd1cmF0b3IiLCAiZ2V0T3B0aW9ucyIsICJwYXJzZURPVE5ldHdvcmsiLCAiZG90cGFyc2VyIiwgIl9jbGFzc0NhbGxDaGVjayIsICJpbnN0YW5jZSIsICJDb25zdHJ1Y3RvciIsICJUeXBlRXJyb3IiLCAidCIsICJjaGVjayIsICJpdCIsICJNYXRoIiwgImdsb2JhbCIsICJnbG9iYWxUaGlzIiwgIndpbmRvdyIsICJzZWxmIiwgInRoaXMiLCAiRnVuY3Rpb24iLCAiZmFpbHMiLCAiZXhlYyIsICJlcnJvciIsICJmdW5jdGlvbkJpbmROYXRpdmUiLCAicmVxdWlyZSQkMCIsICJ0ZXN0IiwgImJpbmQiLCAiaGFzT3duUHJvcGVydHkiLCAiTkFUSVZFX0JJTkQiLCAiRnVuY3Rpb25Qcm90b3R5cGUiLCAicHJvdG90eXBlIiwgImFwcGx5IiwgImNhbGwiLCAiZnVuY3Rpb25BcHBseSIsICJSZWZsZWN0IiwgImFyZ3VtZW50cyIsICJ1bmN1cnJ5VGhpc1dpdGhCaW5kIiwgImZ1bmN0aW9uVW5jdXJyeVRoaXMiLCAiZm4iLCAidW5jdXJyeVRoaXMiLCAidG9TdHJpbmciLCAic3RyaW5nU2xpY2UiLCAic2xpY2UiLCAiY2xhc3NvZlJhdyIsICJyZXF1aXJlJCQxIiwgImZ1bmN0aW9uVW5jdXJyeVRoaXNDbGF1c2UiLCAiZG9jdW1lbnRBbGwiLCAiZG9jdW1lbnQiLCAiYWxsIiwgImRvY3VtZW50QWxsXzEiLCAiSVNfSFRNTEREQSIsICJpc0NhbGxhYmxlIiwgImFyZ3VtZW50IiwgImRlc2NyaXB0b3JzIiwgIk9iamVjdCIsICJkZWZpbmVQcm9wZXJ0eSIsICJnZXQiLCAiZnVuY3Rpb25DYWxsIiwgIiRwcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiTkFTSE9STl9CVUciLCAib2JqZWN0UHJvcGVydHlJc0VudW1lcmFibGUiLCAiZiIsICJWIiwgImRlc2NyaXB0b3IiLCAiZW51bWVyYWJsZSIsICJtYXRjaCIsICJ2ZXJzaW9uIiwgImNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciIsICJiaXRtYXAiLCAidmFsdWUiLCAiY29uZmlndXJhYmxlIiwgIndyaXRhYmxlIiwgImNsYXNzb2YiLCAicmVxdWlyZSQkMiIsICIkT2JqZWN0IiwgInNwbGl0IiwgImluZGV4ZWRPYmplY3QiLCAiaXNOdWxsT3JVbmRlZmluZWQiLCAiJFR5cGVFcnJvciIsICJyZXF1aXJlT2JqZWN0Q29lcmNpYmxlIiwgIkluZGV4ZWRPYmplY3QiLCAidG9JbmRleGVkT2JqZWN0IiwgImlzT2JqZWN0IiwgInBhdGgiLCAiYUZ1bmN0aW9uIiwgInZhcmlhYmxlIiwgImdldEJ1aWx0SW4iLCAibmFtZXNwYWNlIiwgIm1ldGhvZCIsICJsZW5ndGgiLCAib2JqZWN0SXNQcm90b3R5cGVPZiIsICJpc1Byb3RvdHlwZU9mIiwgImVuZ2luZVVzZXJBZ2VudCIsICJuYXZpZ2F0b3IiLCAiU3RyaW5nIiwgInVzZXJBZ2VudCIsICJwcm9jZXNzIiwgIkRlbm8iLCAidmVyc2lvbnMiLCAidjgiLCAiZW5naW5lVjhWZXJzaW9uIiwgIlY4X1ZFUlNJT04iLCAiJFN0cmluZyIsICJzeW1ib2xDb25zdHJ1Y3RvckRldGVjdGlvbiIsICJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAic3ltYm9sIiwgIlN5bWJvbCIsICJzaGFtIiwgInVzZVN5bWJvbEFzVWlkIiwgIml0ZXJhdG9yIiwgImlzU3ltYm9sIiwgInJlcXVpcmUkJDMiLCAiJFN5bWJvbCIsICJ0cnlUb1N0cmluZyIsICJhQ2FsbGFibGUiLCAiZ2V0TWV0aG9kIiwgIlAiLCAiZnVuYyIsICJkZWZpbmVHbG9iYWxQcm9wZXJ0eSIsICJrZXkiLCAiU0hBUkVEIiwgInNoYXJlZFN0b3JlIiwgInN0b3JlIiwgInNoYXJlZE1vZHVsZSIsICJwdXNoIiwgIm1vZGUiLCAiY29weXJpZ2h0IiwgImxpY2Vuc2UiLCAic291cmNlIiwgInRvT2JqZWN0IiwgImhhc093blByb3BlcnR5XzEiLCAiaGFzT3duIiwgImlkIiwgInBvc3RmaXgiLCAicmFuZG9tIiwgInVpZCIsICJzaGFyZWQiLCAiTkFUSVZFX1NZTUJPTCIsICJyZXF1aXJlJCQ0IiwgIlVTRV9TWU1CT0xfQVNfVUlEIiwgInJlcXVpcmUkJDUiLCAiV2VsbEtub3duU3ltYm9sc1N0b3JlIiwgImNyZWF0ZVdlbGxLbm93blN5bWJvbCIsICJ3aXRob3V0U2V0dGVyIiwgIndlbGxLbm93blN5bWJvbCIsICJuYW1lIiwgIm9yZGluYXJ5VG9QcmltaXRpdmUiLCAiaW5wdXQiLCAicHJlZiIsICJ2YWwiLCAidmFsdWVPZiIsICJUT19QUklNSVRJVkUiLCAidG9QcmltaXRpdmUiLCAicmVzdWx0IiwgImV4b3RpY1RvUHJpbSIsICJ0b1Byb3BlcnR5S2V5IiwgIkVYSVNUUyIsICJjcmVhdGVFbGVtZW50IiwgImRvY3VtZW50Q3JlYXRlRWxlbWVudCIsICJpZThEb21EZWZpbmUiLCAiYSIsICJERVNDUklQVE9SUyIsICJwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSIsICJyZXF1aXJlJCQ2IiwgIklFOF9ET01fREVGSU5FIiwgInJlcXVpcmUkJDciLCAiJGdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiTyIsICJyZXBsYWNlbWVudCIsICJpc0ZvcmNlZCIsICJmZWF0dXJlIiwgImRldGVjdGlvbiIsICJkYXRhIiwgIm5vcm1hbGl6ZSIsICJQT0xZRklMTCIsICJOQVRJVkUiLCAic3RyaW5nIiwgInJlcGxhY2UiLCAidG9Mb3dlckNhc2UiLCAiaXNGb3JjZWRfMSIsICJmdW5jdGlvbkJpbmRDb250ZXh0IiwgInRoYXQiLCAidjhQcm90b3R5cGVEZWZpbmVCdWciLCAiYW5PYmplY3QiLCAiVjhfUFJPVE9UWVBFX0RFRklORV9CVUciLCAiJGRlZmluZVByb3BlcnR5IiwgIkVOVU1FUkFCTEUiLCAiQ09ORklHVVJBQkxFIiwgIldSSVRBQkxFIiwgIm9iamVjdERlZmluZVByb3BlcnR5IiwgIkF0dHJpYnV0ZXMiLCAiY3VycmVudCIsICJkZWZpbmVQcm9wZXJ0eU1vZHVsZSIsICJjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkiLCAib2JqZWN0IiwgInJlcXVpcmUkJDgiLCAicmVxdWlyZSQkOSIsICJ3cmFwQ29uc3RydWN0b3IiLCAiTmF0aXZlQ29uc3RydWN0b3IiLCAiV3JhcHBlciIsICJiIiwgImMiLCAiX2V4cG9ydCIsICJvcHRpb25zIiwgIkZPUkNFRCIsICJVU0VfTkFUSVZFIiwgIlZJUlRVQUxfUFJPVE9UWVBFIiwgInNvdXJjZVByb3BlcnR5IiwgInRhcmdldFByb3BlcnR5IiwgIm5hdGl2ZVByb3BlcnR5IiwgInJlc3VsdFByb3BlcnR5IiwgIlRBUkdFVCIsICJ0YXJnZXQiLCAiR0xPQkFMIiwgIlNUQVRJQyIsICJzdGF0IiwgIlBST1RPIiwgInByb3RvIiwgIm5hdGl2ZVNvdXJjZSIsICJ0YXJnZXRQcm90b3R5cGUiLCAiZm9yY2VkIiwgImRvbnRDYWxsR2V0U2V0IiwgIndyYXAiLCAicmVhbCIsICIkIiwgIiQkUCIsICJleHBvcnRzIiwgImRlc2MiLCAiaXNBcnJheSIsICJBcnJheSIsICJjZWlsIiwgImZsb29yIiwgInRydW5jIiwgIngiLCAibiIsICJ0b0ludGVnZXJPckluZmluaXR5IiwgIm51bWJlciIsICJtaW4iLCAidG9MZW5ndGgiLCAibGVuZ3RoT2ZBcnJheUxpa2UiLCAib2JqIiwgImRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciIsICJjcmVhdGVQcm9wZXJ0eSIsICJwcm9wZXJ0eUtleSIsICJ0b1N0cmluZ1RhZ1N1cHBvcnQiLCAiVE9fU1RSSU5HX1RBR19TVVBQT1JUIiwgIlRPX1NUUklOR19UQUciLCAiQ09SUkVDVF9BUkdVTUVOVFMiLCAidGFnIiwgImNhbGxlZSIsICJmdW5jdGlvblRvU3RyaW5nIiwgImluc3BlY3RTb3VyY2UiLCAibm9vcCIsICJlbXB0eSIsICJjb25zdHJ1Y3QiLCAiY29uc3RydWN0b3JSZWdFeHAiLCAiSU5DT1JSRUNUX1RPX1NUUklORyIsICJpc0NvbnN0cnVjdG9yTW9kZXJuIiwgImlzQ29uc3RydWN0b3JMZWdhY3kiLCAiaXNDb25zdHJ1Y3RvciIsICJjYWxsZWQiLCAiU1BFQ0lFUyIsICIkQXJyYXkiLCAiYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IiLCAib3JpZ2luYWxBcnJheSIsICJDIiwgImNvbnN0cnVjdG9yIiwgInVuZGVmaW5lZCIsICJhcnJheVNwZWNpZXNDcmVhdGUiLCAiYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCIsICJNRVRIT0RfTkFNRSIsICJhcnJheSIsICJmb28iLCAiQm9vbGVhbiIsICJyZXF1aXJlJCQxMSIsICJJU19DT05DQVRfU1BSRUFEQUJMRSIsICJyZXF1aXJlJCQxMCIsICJJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIiwgImNvbmNhdCIsICJpc0NvbmNhdFNwcmVhZGFibGUiLCAic3ByZWFkYWJsZSIsICJhcml0eSIsICJhcmciLCAiaSIsICJrIiwgImxlbiIsICJFIiwgIkEiLCAibWF4IiwgInRvQWJzb2x1dGVJbmRleCIsICJpbmRleCIsICJpbnRlZ2VyIiwgImNyZWF0ZU1ldGhvZCIsICJJU19JTkNMVURFUyIsICIkdGhpcyIsICJlbCIsICJmcm9tSW5kZXgiLCAiYXJyYXlJbmNsdWRlcyIsICJpbmNsdWRlcyIsICJpbmRleE9mIiwgImhpZGRlbktleXMiLCAib2JqZWN0S2V5c0ludGVybmFsIiwgIm5hbWVzIiwgImVudW1CdWdLZXlzIiwgImludGVybmFsT2JqZWN0S2V5cyIsICJvYmplY3RLZXlzIiwgImtleXMiLCAib2JqZWN0RGVmaW5lUHJvcGVydGllcyIsICJkZWZpbmVQcm9wZXJ0aWVzIiwgIlByb3BlcnRpZXMiLCAicHJvcHMiLCAiYWN0aXZlWERvY3VtZW50IiwgImh0bWwiLCAic2hhcmVkS2V5IiwgImRlZmluZVByb3BlcnRpZXNNb2R1bGUiLCAiUFJPVE9UWVBFIiwgIlNDUklQVCIsICJJRV9QUk9UTyIsICJFbXB0eUNvbnN0cnVjdG9yIiwgInNjcmlwdFRhZyIsICJjb250ZW50IiwgIkxUIiwgIk51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgiLCAid3JpdGUiLCAiY2xvc2UiLCAidGVtcCIsICJwYXJlbnRXaW5kb3ciLCAiTnVsbFByb3RvT2JqZWN0IiwgIkFjdGl2ZVhPYmplY3QiLCAiaWZyYW1lRG9jdW1lbnQiLCAiaWZyYW1lIiwgIkpTIiwgImRvbWFpbiIsICJzdHlsZSIsICJkaXNwbGF5IiwgImFwcGVuZENoaWxkIiwgInNyYyIsICJjb250ZW50V2luZG93IiwgIm9wZW4iLCAiRiIsICJvYmplY3RDcmVhdGUiLCAiY3JlYXRlIiwgIm9iamVjdEdldE93blByb3BlcnR5TmFtZXMiLCAiZ2V0T3duUHJvcGVydHlOYW1lcyIsICJhcnJheVNsaWNlU2ltcGxlIiwgInN0YXJ0IiwgImVuZCIsICJmaW4iLCAiJGdldE93blByb3BlcnR5TmFtZXMiLCAiYXJyYXlTbGljZSIsICJ3aW5kb3dOYW1lcyIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwiLCAib2JqZWN0R2V0T3duUHJvcGVydHlTeW1ib2xzIiwgImRlZmluZUJ1aWx0SW4iLCAiZGVmaW5lQnVpbHRJbkFjY2Vzc29yIiwgIndlbGxLbm93blN5bWJvbFdyYXBwZWQiLCAic2V0IiwgImhhcyIsICJ3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlIiwgIndlbGxLbm93blN5bWJvbERlZmluZSIsICJOQU1FIiwgInN5bWJvbERlZmluZVRvUHJpbWl0aXZlIiwgIlN5bWJvbFByb3RvdHlwZSIsICJoaW50IiwgIm9iamVjdFRvU3RyaW5nIiwgInNldFRvU3RyaW5nVGFnIiwgIlRBRyIsICJTRVRfTUVUSE9EIiwgIldlYWtNYXAiLCAiTkFUSVZFX1dFQUtfTUFQIiwgIk9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEIiwgInN0YXRlIiwgIm1ldGFkYXRhIiwgImZhY2FkZSIsICJTVEFURSIsICJpbnRlcm5hbFN0YXRlIiwgImVuZm9yY2UiLCAiZ2V0dGVyRm9yIiwgIlRZUEUiLCAidHlwZSIsICJJU19NQVAiLCAiSVNfRklMVEVSIiwgIklTX1NPTUUiLCAiSVNfRVZFUlkiLCAiSVNfRklORF9JTkRFWCIsICJJU19GSUxURVJfUkVKRUNUIiwgIk5PX0hPTEVTIiwgImNhbGxiYWNrZm4iLCAic3BlY2lmaWNDcmVhdGUiLCAiYm91bmRGdW5jdGlvbiIsICJhcnJheUl0ZXJhdGlvbiIsICJmb3JFYWNoIiwgIm1hcCIsICJmaWx0ZXIiLCAic29tZSIsICJldmVyeSIsICJmaW5kIiwgImZpbmRJbmRleCIsICJmaWx0ZXJSZWplY3QiLCAicmVxdWlyZSQkMTIiLCAiJHRvU3RyaW5nIiwgInJlcXVpcmUkJDEzIiwgInJlcXVpcmUkJDE0IiwgIm5hdGl2ZU9iamVjdENyZWF0ZSIsICJyZXF1aXJlJCQxNSIsICJyZXF1aXJlJCQxNiIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlIiwgInJlcXVpcmUkJDE3IiwgImdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCIsICJyZXF1aXJlJCQxOCIsICJnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUiLCAicmVxdWlyZSQkMTkiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlIiwgInJlcXVpcmUkJDIwIiwgInJlcXVpcmUkJDIxIiwgInJlcXVpcmUkJDIyIiwgInJlcXVpcmUkJDIzIiwgInJlcXVpcmUkJDI0IiwgInJlcXVpcmUkJDI1IiwgInJlcXVpcmUkJDI2IiwgInJlcXVpcmUkJDI4IiwgInJlcXVpcmUkJDI5IiwgInJlcXVpcmUkJDMwIiwgInJlcXVpcmUkJDMxIiwgImRlZmluZVdlbGxLbm93blN5bWJvbCIsICJyZXF1aXJlJCQzMiIsICJkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSIsICJyZXF1aXJlJCQzMyIsICJyZXF1aXJlJCQzNCIsICJJbnRlcm5hbFN0YXRlTW9kdWxlIiwgInJlcXVpcmUkJDM1IiwgIiRmb3JFYWNoIiwgInJlcXVpcmUkJDM2IiwgIkhJRERFTiIsICJyZXF1aXJlJCQyNyIsICJTWU1CT0wiLCAic2V0SW50ZXJuYWxTdGF0ZSIsICJnZXRJbnRlcm5hbFN0YXRlIiwgIk9iamVjdFByb3RvdHlwZSIsICJSYW5nZUVycm9yIiwgIlFPYmplY3QiLCAibmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIm5hdGl2ZURlZmluZVByb3BlcnR5IiwgIm5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMiLCAibmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUiLCAiQWxsU3ltYm9scyIsICJPYmplY3RQcm90b3R5cGVTeW1ib2xzIiwgIlVTRV9TRVRURVIiLCAiZmluZENoaWxkIiwgImZhbGxiYWNrRGVmaW5lUHJvcGVydHkiLCAiT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciIsICJzZXRTeW1ib2xEZXNjcmlwdG9yIiwgImRlc2NyaXB0aW9uIiwgIiRkZWZpbmVQcm9wZXJ0aWVzIiwgInByb3BlcnRpZXMiLCAiJGdldE93blByb3BlcnR5U3ltYm9scyIsICJJU19PQkpFQ1RfUFJPVE9UWVBFIiwgInNldHRlciIsICIkJE4iLCAiJGZvckVhY2gkMSIsICJ1c2VTZXR0ZXIiLCAidXNlU2ltcGxlIiwgInN5bWJvbFJlZ2lzdHJ5RGV0ZWN0aW9uIiwgImtleUZvciIsICJOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIiwgIlN0cmluZ1RvU3ltYm9sUmVnaXN0cnkiLCAiU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSIsICJmb3IiLCAic3ltIiwgImdldFJlcGxhY2VyRnVuY3Rpb24iLCAicmVwbGFjZXIiLCAicmF3TGVuZ3RoIiwgImVsZW1lbnQiLCAia2V5c0xlbmd0aCIsICJyb290IiwgImoiLCAiJHN0cmluZ2lmeSIsICJjaGFyQXQiLCAiY2hhckNvZGVBdCIsICJudW1iZXJUb1N0cmluZyIsICJ0ZXN0ZXIiLCAibG93IiwgImhpIiwgIldST05HX1NZTUJPTFNfQ09OVkVSU0lPTiIsICJJTExfRk9STUVEX1VOSUNPREUiLCAic3RyaW5naWZ5V2l0aFN5bWJvbHNGaXgiLCAiYXJncyIsICIkcmVwbGFjZXIiLCAiZml4SWxsRm9ybWVkIiwgIm9mZnNldCIsICJwcmV2IiwgIm5leHQiLCAic3RyaW5naWZ5IiwgInNwYWNlIiwgIkpTT04iLCAiSXRlcmF0b3JQcm90b3R5cGUiLCAiUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlIiwgImFycmF5SXRlcmF0b3IiLCAiaXRlcmF0b3JzIiwgImdldERlc2NyaXB0b3IiLCAiZnVuY3Rpb25OYW1lIiwgIlBST1BFUiIsICJjb3JyZWN0UHJvdG90eXBlR2V0dGVyIiwgImdldFByb3RvdHlwZU9mIiwgIkNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiIsICJvYmplY3RHZXRQcm90b3R5cGVPZiIsICJJVEVSQVRPUiIsICJCVUdHWV9TQUZBUklfSVRFUkFUT1JTIiwgIk5FV19JVEVSQVRPUl9QUk9UT1RZUEUiLCAiaXRlcmF0b3JzQ29yZSIsICJJdGVyYXRvcnMiLCAicmV0dXJuVGhpcyIsICJ1bmN1cnJ5VGhpc0FjY2Vzc29yIiwgImFQb3NzaWJsZVByb3RvdHlwZSIsICJvYmplY3RTZXRQcm90b3R5cGVPZiIsICJzZXRQcm90b3R5cGVPZiIsICJDT1JSRUNUX1NFVFRFUiIsICJfX3Byb3RvX18iLCAiRnVuY3Rpb25OYW1lIiwgImNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IiLCAiSXRlcmF0b3JDb25zdHJ1Y3RvciIsICJFTlVNRVJBQkxFX05FWFQiLCAiSXRlcmF0b3JzQ29yZSIsICJQUk9QRVJfRlVOQ1RJT05fTkFNRSIsICJLRVlTIiwgIlZBTFVFUyIsICJFTlRSSUVTIiwgIml0ZXJhdG9yRGVmaW5lIiwgIkl0ZXJhYmxlIiwgIkRFRkFVTFQiLCAiSVNfU0VUIiwgIkN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSIsICJtZXRob2RzIiwgIktFWSIsICJnZXRJdGVyYXRpb25NZXRob2QiLCAiS0lORCIsICJkZWZhdWx0SXRlcmF0b3IiLCAiSXRlcmFibGVQcm90b3R5cGUiLCAiSU5DT1JSRUNUX1ZBTFVFU19OQU1FIiwgIm5hdGl2ZUl0ZXJhdG9yIiwgImFueU5hdGl2ZUl0ZXJhdG9yIiwgImVudHJpZXMiLCAidmFsdWVzIiwgImNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QiLCAiZG9uZSIsICJkZWZpbmVJdGVyYXRvciIsICJBUlJBWV9JVEVSQVRPUiIsICJkZWZpbmVJdGVyYXRvciQyIiwgIml0ZXJhdGVkIiwgImtpbmQiLCAiQXJndW1lbnRzIiwgIkRPTUl0ZXJhYmxlcyIsICJDU1NSdWxlTGlzdCIsICJDU1NTdHlsZURlY2xhcmF0aW9uIiwgIkNTU1ZhbHVlTGlzdCIsICJDbGllbnRSZWN0TGlzdCIsICJET01SZWN0TGlzdCIsICJET01TdHJpbmdMaXN0IiwgIkRPTVRva2VuTGlzdCIsICJEYXRhVHJhbnNmZXJJdGVtTGlzdCIsICJGaWxlTGlzdCIsICJIVE1MQWxsQ29sbGVjdGlvbiIsICJIVE1MQ29sbGVjdGlvbiIsICJIVE1MRm9ybUVsZW1lbnQiLCAiSFRNTFNlbGVjdEVsZW1lbnQiLCAiTWVkaWFMaXN0IiwgIk1pbWVUeXBlQXJyYXkiLCAiTmFtZWROb2RlTWFwIiwgIk5vZGVMaXN0IiwgIlBhaW50UmVxdWVzdExpc3QiLCAiUGx1Z2luIiwgIlBsdWdpbkFycmF5IiwgIlNWR0xlbmd0aExpc3QiLCAiU1ZHTnVtYmVyTGlzdCIsICJTVkdQYXRoU2VnTGlzdCIsICJTVkdQb2ludExpc3QiLCAiU1ZHU3RyaW5nTGlzdCIsICJTVkdUcmFuc2Zvcm1MaXN0IiwgIlNvdXJjZUJ1ZmZlckxpc3QiLCAiU3R5bGVTaGVldExpc3QiLCAiVGV4dFRyYWNrQ3VlTGlzdCIsICJUZXh0VHJhY2tMaXN0IiwgIlRvdWNoTGlzdCIsICJDT0xMRUNUSU9OX05BTUUiLCAiQ29sbGVjdGlvbiIsICJDb2xsZWN0aW9uUHJvdG90eXBlIiwgIk1FVEFEQVRBIiwgInRoaXNTeW1ib2xWYWx1ZSIsICJzeW1ib2xJc1JlZ2lzdGVyZWQiLCAiaXNSZWdpc3RlcmVkU3ltYm9sIiwgIiRpc1dlbGxLbm93blN5bWJvbCIsICJpc1dlbGxLbm93blN5bWJvbCIsICJzeW1ib2xLZXlzIiwgInN5bWJvbEtleXNMZW5ndGgiLCAic3ltYm9sS2V5IiwgInN5bWJvbElzV2VsbEtub3duIiwgImlzUmVnaXN0ZXJlZCIsICJpc1dlbGxLbm93biIsICJDT05WRVJUX1RPX1NUUklORyIsICJwb3MiLCAiZmlyc3QiLCAic2Vjb25kIiwgIlMiLCAicG9zaXRpb24iLCAic2l6ZSIsICJjb2RlQXQiLCAiU1RSSU5HX0lURVJBVE9SIiwgInBvaW50IiwgIl90eXBlb2YiLCAibyIsICJfU3ltYm9sIiwgIl9TeW1ib2wkaXRlcmF0b3IiLCAiX3RvUHJvcGVydHlLZXkiLCAicHJpbSIsICJfU3ltYm9sJHRvUHJpbWl0aXZlIiwgInJlcyIsICJOdW1iZXIiLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX09iamVjdCRkZWZpbmVQcm9wZXJ0eSIsICJfY3JlYXRlQ2xhc3MiLCAicHJvdG9Qcm9wcyIsICJzdGF0aWNQcm9wcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiJEZ1bmN0aW9uIiwgImpvaW4iLCAiZmFjdG9yaWVzIiwgImZ1bmN0aW9uQmluZCIsICJQcm90b3R5cGUiLCAicGFydEFyZ3MiLCAiYXJnc0xlbmd0aCIsICJsaXN0IiwgImdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QiLCAiQ09OU1RSVUNUT1IiLCAiTUVUSE9EIiwgIk5hbWVzcGFjZSIsICJwdXJlTWV0aG9kIiwgIk5hdGl2ZVByb3RvdHlwZSIsICJvd24iLCAiSVNfUklHSFQiLCAiYXJndW1lbnRzTGVuZ3RoIiwgIm1lbW8iLCAiYXJyYXlSZWR1Y2UiLCAibGVmdCIsICJyaWdodCIsICJhcnJheU1ldGhvZElzU3RyaWN0IiwgImVuZ2luZUlzTm9kZSIsICIkcmVkdWNlIiwgInJlZHVjZSIsICJBcnJheVByb3RvdHlwZSIsICIkZmlsdGVyIiwgIiRtYXAiLCAiZmxhdHRlbkludG9BcnJheSIsICJvcmlnaW5hbCIsICJzb3VyY2VMZW4iLCAiZGVwdGgiLCAibWFwcGVyIiwgInRoaXNBcmciLCAiZWxlbWVudExlbiIsICJ0YXJnZXRJbmRleCIsICJzb3VyY2VJbmRleCIsICJtYXBGbiIsICJmbGF0TWFwIiwgIlNpbXBsZURhdGFQaXBlIiwgIl9zb3VyY2UiLCAiX3RyYW5zZm9ybWVycyIsICJfdGFyZ2V0IiwgIl9jb250ZXh0IiwgIl9jb250ZXh0MiIsICJfY29udGV4dDMiLCAiYWRkIiwgIl9iaW5kSW5zdGFuY2VQcm9wZXJ0eSIsICJfYWRkIiwgInJlbW92ZSIsICJfcmVtb3ZlIiwgInVwZGF0ZSIsICJfdXBkYXRlIiwgIl90cmFuc2Zvcm1JdGVtcyIsICJvbiIsICJfbGlzdGVuZXJzIiwgIm9mZiIsICJpdGVtcyIsICJfY29udGV4dDQiLCAiX3JlZHVjZUluc3RhbmNlUHJvcGVydHkiLCAidHJhbnNmb3JtIiwgIl9uYW1lIiwgInBheWxvYWQiLCAib2xkRGF0YSIsICJEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uIiwgImNhbGxiYWNrIiwgIl9maWx0ZXJJbnN0YW5jZVByb3BlcnR5IiwgIl9tYXBJbnN0YW5jZVByb3BlcnR5IiwgIl9mbGF0TWFwSW5zdGFuY2VQcm9wZXJ0eSIsICJpdGVyYXRvckNsb3NlIiwgImlubmVyUmVzdWx0IiwgImlubmVyRXJyb3IiLCAiaXNBcnJheUl0ZXJhdG9yTWV0aG9kIiwgImdldEl0ZXJhdG9yTWV0aG9kIiwgImdldEl0ZXJhdG9yIiwgInVzaW5nSXRlcmF0b3IiLCAiaXRlcmF0b3JNZXRob2QiLCAiY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyIsICJTQUZFX0NMT1NJTkciLCAiaXRlcmF0b3JXaXRoUmV0dXJuIiwgInJldHVybiIsICJmcm9tIiwgImNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiIsICJTS0lQX0NMT1NJTkciLCAiSVRFUkFUSU9OX1NVUFBPUlQiLCAiYXJyYXlMaWtlIiwgIklTX0NPTlNUUlVDVE9SIiwgIm1hcGZuIiwgIm1hcHBpbmciLCAic3RlcCIsICJpdGVyYWJsZSIsICJhcnJheVNldExlbmd0aCIsICJzZXRBcnJheUxlbmd0aCIsICJwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgiLCAiaXRlbSIsICJhcmdDb3VudCIsICJuYXRpdmVTbGljZSIsICJIQVNfU1BFQ0lFU19TVVBQT1JUIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgImFyciIsICJhcnIyIiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJtaW5MZW4iLCAiYXJyYXlMaWtlVG9BcnJheSIsICJfc2xpY2VJbnN0YW5jZVByb3BlcnR5IiwgIl9BcnJheSRmcm9tIiwgIl9zbGljZWRUb0FycmF5IiwgIl9BcnJheSRpc0FycmF5IiwgInIiLCAibCIsICJfZ2V0SXRlcmF0b3JNZXRob2QiLCAiZSIsICJ1IiwgIl9wdXNoSW5zdGFuY2VQcm9wZXJ0eSIsICJ1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJub25JdGVyYWJsZVJlc3QiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIml0ZXIiLCAibm9uSXRlcmFibGVTcHJlYWQiLCAib3duS2V5cyIsICJuYXRpdmVLZXlzIiwgImFycmF5Rm9yRWFjaCIsICJuYXRpdmVSZXZlcnNlIiwgInJldmVyc2UiLCAiJCRyIiwgImRlbGV0ZVByb3BlcnR5T3JUaHJvdyIsICJzcGxpY2UiLCAiZGVsZXRlQ291bnQiLCAiaW5zZXJ0Q291bnQiLCAiYWN0dWFsRGVsZXRlQ291bnQiLCAidG8iLCAiYWN0dWFsU3RhcnQiLCAiJGFzc2lnbiIsICJhc3NpZ24iLCAib2JqZWN0QXNzaWduIiwgIkIiLCAiYWxwaGFiZXQiLCAiY2hyIiwgIlQiLCAibmF0aXZlR2V0UHJvdG90eXBlT2YiLCAiRCIsICJwYXJlbnQiLCAiZW5naW5lSXNCdW4iLCAiQnVuIiwgInZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoIiwgInBhc3NlZCIsICJyZXF1aXJlZCIsICJFTkdJTkVfSVNfQlVOIiwgIlVTRVJfQUdFTlQiLCAiV1JBUCIsICJzY2hlZHVsZXJzRml4IiwgInNjaGVkdWxlciIsICJoYXNUaW1lQXJnIiwgImZpcnN0UGFyYW1JbmRleCIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYm91bmRBcmdzIiwgInBhcmFtcyIsICJzZXRJbnRlcnZhbCIsICJzZXRUaW1lb3V0IiwgIkVtaXR0ZXIiLCAiX2NhbGxiYWNrcyIsICJNYXAiLCAiZXZlbnQiLCAibGlzdGVuZXIiLCAiY2FsbGJhY2tzIiwgIm9uY2UiLCAiYXJndW1lbnRzXyIsICJjbGVhciIsICJkZWxldGUiLCAiZW1pdCIsICJjYWxsYmFja3NDb3B5IiwgImxpc3RlbmVycyIsICJsaXN0ZW5lckNvdW50IiwgInRvdGFsQ291bnQiLCAiaGFzTGlzdGVuZXJzIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAicmVtb3ZlTGlzdGVuZXIiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJyZW1vdmVBbGxMaXN0ZW5lcnMiLCAibW9kdWxlIiwgIl9leHRlbmRzIiwgIl9pbmhlcml0c0xvb3NlIiwgInN1YkNsYXNzIiwgInN1cGVyQ2xhc3MiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJSZWZlcmVuY2VFcnJvciIsICJvdXRwdXQiLCAibmV4dEtleSIsICJ3aW4iLCAiYXNzaWduJDEiLCAiVkVORE9SX1BSRUZJWEVTIiwgIlRFU1RfRUxFTUVOVCIsICJyb3VuZCIsICJhYnMiLCAibm93IiwgIkRhdGUiLCAicHJlZml4ZWQiLCAicHJvcGVydHkiLCAicHJlZml4IiwgInByb3AiLCAiY2FtZWxQcm9wIiwgInRvVXBwZXJDYXNlIiwgIlBSRUZJWEVEX1RPVUNIX0FDVElPTiIsICJOQVRJVkVfVE9VQ0hfQUNUSU9OIiwgIlRPVUNIX0FDVElPTl9DT01QVVRFIiwgIlRPVUNIX0FDVElPTl9BVVRPIiwgIlRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04iLCAiVE9VQ0hfQUNUSU9OX05PTkUiLCAiVE9VQ0hfQUNUSU9OX1BBTl9YIiwgIlRPVUNIX0FDVElPTl9QQU5fWSIsICJUT1VDSF9BQ1RJT05fTUFQIiwgInRvdWNoTWFwIiwgImNzc1N1cHBvcnRzIiwgIkNTUyIsICJzdXBwb3J0cyIsICJnZXRUb3VjaEFjdGlvblByb3BzIiwgIlNVUFBPUlRfVE9VQ0giLCAiU1VQUE9SVF9QT0lOVEVSX0VWRU5UUyIsICJTVVBQT1JUX09OTFlfVE9VQ0giLCAiSU5QVVRfVFlQRV9UT1VDSCIsICJJTlBVVF9UWVBFX01PVVNFIiwgIkNPTVBVVEVfSU5URVJWQUwiLCAiSU5QVVRfU1RBUlQiLCAiSU5QVVRfRU5EIiwgIklOUFVUX0NBTkNFTCIsICJESVJFQ1RJT05fTk9ORSIsICJESVJFQ1RJT05fTEVGVCIsICJESVJFQ1RJT05fUklHSFQiLCAiRElSRUNUSU9OX1VQIiwgIkRJUkVDVElPTl9ET1dOIiwgIkRJUkVDVElPTl9IT1JJWk9OVEFMIiwgIkRJUkVDVElPTl9WRVJUSUNBTCIsICJESVJFQ1RJT05fQUxMIiwgIlBST1BTX1hZIiwgIlBST1BTX0NMSUVOVF9YWSIsICJlYWNoIiwgImNvbnRleHQiLCAiYm9vbE9yRm4iLCAiaW5TdHIiLCAic3RyIiwgIlRvdWNoQWN0aW9uIiwgIm1hbmFnZXIiLCAiX3Byb3RvIiwgImNvbXB1dGUiLCAiYWN0aW9ucyIsICJ0cmltIiwgInRvdWNoQWN0aW9uIiwgInJlY29nbml6ZXJzIiwgInJlY29nbml6ZXIiLCAiZW5hYmxlIiwgImdldFRvdWNoQWN0aW9uIiwgImhhc1BhblgiLCAiaGFzUGFuWSIsICJwcmV2ZW50RGVmYXVsdHMiLCAic3JjRXZlbnQiLCAiZGlyZWN0aW9uIiwgIm9mZnNldERpcmVjdGlvbiIsICJzZXNzaW9uIiwgInByZXZlbnRlZCIsICJwcmV2ZW50RGVmYXVsdCIsICJoYXNOb25lIiwgImlzVGFwUG9pbnRlciIsICJwb2ludGVycyIsICJpc1RhcE1vdmVtZW50IiwgImRpc3RhbmNlIiwgImlzVGFwVG91Y2hUaW1lIiwgImRlbHRhVGltZSIsICJwcmV2ZW50U3JjIiwgImhhc1BhcmVudCIsICJub2RlIiwgInBhcmVudE5vZGUiLCAiZ2V0Q2VudGVyIiwgInBvaW50ZXJzTGVuZ3RoIiwgImNsaWVudFgiLCAieSIsICJjbGllbnRZIiwgInNpbXBsZUNsb25lSW5wdXREYXRhIiwgInRpbWVTdGFtcCIsICJjZW50ZXIiLCAiZGVsdGFYIiwgImRlbHRhWSIsICJnZXREaXN0YW5jZSIsICJwMSIsICJwMiIsICJzcXJ0IiwgImdldEFuZ2xlIiwgImF0YW4yIiwgIlBJIiwgImdldERpcmVjdGlvbiIsICJnZXRWZWxvY2l0eSIsICJjb21wdXRlSW5wdXREYXRhIiwgImZpcnN0SW5wdXQiLCAiZmlyc3RNdWx0aXBsZSIsICJvZmZzZXRDZW50ZXIiLCAiYW5nbGUiLCAib2Zmc2V0RGVsdGEiLCAicHJldkRlbHRhIiwgInByZXZJbnB1dCIsICJldmVudFR5cGUiLCAib3ZlcmFsbFZlbG9jaXR5IiwgIm92ZXJhbGxWZWxvY2l0eVgiLCAib3ZlcmFsbFZlbG9jaXR5WSIsICJzY2FsZSIsICJyb3RhdGlvbiIsICJtYXhQb2ludGVycyIsICJ2ZWxvY2l0eSIsICJ2ZWxvY2l0eVgiLCAidmVsb2NpdHlZIiwgImxhc3QiLCAibGFzdEludGVydmFsIiwgInYiLCAic3JjRXZlbnRUYXJnZXQiLCAiY29tcG9zZWRQYXRoIiwgImlucHV0SGFuZGxlciIsICJwb2ludGVyc0xlbiIsICJjaGFuZ2VkUG9pbnRlcnNMZW4iLCAiY2hhbmdlZFBvaW50ZXJzIiwgImlzRmlyc3QiLCAiaXNGaW5hbCIsICJyZWNvZ25pemUiLCAic3BsaXRTdHIiLCAiYWRkRXZlbnRMaXN0ZW5lcnMiLCAidHlwZXMiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lcnMiLCAiZ2V0V2luZG93Rm9yRWxlbWVudCIsICJkb2MiLCAib3duZXJEb2N1bWVudCIsICJkZWZhdWx0VmlldyIsICJJbnB1dCIsICJpbnB1dFRhcmdldCIsICJkb21IYW5kbGVyIiwgImV2IiwgImluaXQiLCAiZXZFbCIsICJldlRhcmdldCIsICJldldpbiIsICJkZXN0cm95IiwgImluQXJyYXkiLCAiZmluZEJ5S2V5IiwgIlBPSU5URVJfSU5QVVRfTUFQIiwgInBvaW50ZXJkb3duIiwgInBvaW50ZXJtb3ZlIiwgInBvaW50ZXJ1cCIsICJwb2ludGVyY2FuY2VsIiwgInBvaW50ZXJvdXQiLCAiSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSIsICJQT0lOVEVSX0VMRU1FTlRfRVZFTlRTIiwgIlBPSU5URVJfV0lORE9XX0VWRU5UUyIsICJNU1BvaW50ZXJFdmVudCIsICJQb2ludGVyRXZlbnQiLCAiUG9pbnRlckV2ZW50SW5wdXQiLCAiX0lucHV0IiwgIl90aGlzIiwgInBvaW50ZXJFdmVudHMiLCAicmVtb3ZlUG9pbnRlciIsICJldmVudFR5cGVOb3JtYWxpemVkIiwgInBvaW50ZXJUeXBlIiwgImlzVG91Y2giLCAic3RvcmVJbmRleCIsICJwb2ludGVySWQiLCAiYnV0dG9uIiwgInRvQXJyYXkiLCAidW5pcXVlQXJyYXkiLCAic29ydCIsICJyZXN1bHRzIiwgIlRPVUNIX0lOUFVUX01BUCIsICJ0b3VjaHN0YXJ0IiwgInRvdWNobW92ZSIsICJ0b3VjaGVuZCIsICJ0b3VjaGNhbmNlbCIsICJUb3VjaElucHV0IiwgInRhcmdldElkcyIsICJ0b3VjaGVzIiwgImdldFRvdWNoZXMiLCAidGFyZ2V0VG91Y2hlcyIsICJhbGxUb3VjaGVzIiwgImlkZW50aWZpZXIiLCAiY2hhbmdlZFRvdWNoZXMiLCAiY2hhbmdlZFRhcmdldFRvdWNoZXMiLCAidG91Y2giLCAiTU9VU0VfSU5QVVRfTUFQIiwgIm1vdXNlZG93biIsICJtb3VzZW1vdmUiLCAibW91c2V1cCIsICJNb3VzZUlucHV0IiwgInByZXNzZWQiLCAid2hpY2giLCAiREVEVVBfVElNRU9VVCIsICJzZXRMYXN0VG91Y2giLCAiZXZlbnREYXRhIiwgInByaW1hcnlUb3VjaCIsICJsYXN0VG91Y2giLCAibHRzIiwgImxhc3RUb3VjaGVzIiwgInJlY29yZFRvdWNoZXMiLCAiaXNTeW50aGV0aWNFdmVudCIsICJkeCIsICJkeSIsICJUb3VjaE1vdXNlSW5wdXQiLCAiX21hbmFnZXIiLCAiaW5wdXRFdmVudCIsICJpbnB1dERhdGEiLCAiaXNNb3VzZSIsICJzb3VyY2VDYXBhYmlsaXRpZXMiLCAiZmlyZXNUb3VjaEV2ZW50cyIsICJtb3VzZSIsICJpbnZva2VBcnJheUFyZyIsICJTVEFURV9GQUlMRUQiLCAiX3VuaXF1ZUlkIiwgImdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIiLCAib3RoZXJSZWNvZ25pemVyIiwgInN0YXRlU3RyIiwgIlJlY29nbml6ZXIiLCAic2ltdWx0YW5lb3VzIiwgInJlcXVpcmVGYWlsIiwgInJlY29nbml6ZVdpdGgiLCAiZHJvcFJlY29nbml6ZVdpdGgiLCAicmVxdWlyZUZhaWx1cmUiLCAiZHJvcFJlcXVpcmVGYWlsdXJlIiwgImhhc1JlcXVpcmVGYWlsdXJlcyIsICJjYW5SZWNvZ25pemVXaXRoIiwgImFkZGl0aW9uYWxFdmVudCIsICJ0cnlFbWl0IiwgImNhbkVtaXQiLCAiaW5wdXREYXRhQ2xvbmUiLCAicmVzZXQiLCAiVGFwUmVjb2duaXplciIsICJfUmVjb2duaXplciIsICJ0YXBzIiwgImludGVydmFsIiwgInRpbWUiLCAidGhyZXNob2xkIiwgInBvc1RocmVzaG9sZCIsICJwVGltZSIsICJwQ2VudGVyIiwgIl90aW1lciIsICJfaW5wdXQiLCAiY291bnQiLCAiX3RoaXMyIiwgInZhbGlkUG9pbnRlcnMiLCAidmFsaWRNb3ZlbWVudCIsICJ2YWxpZFRvdWNoVGltZSIsICJmYWlsVGltZW91dCIsICJ2YWxpZEludGVydmFsIiwgInZhbGlkTXVsdGlUYXAiLCAiX3RoaXMzIiwgImNsZWFyVGltZW91dCIsICJ0YXBDb3VudCIsICJBdHRyUmVjb2duaXplciIsICJhdHRyVGVzdCIsICJvcHRpb25Qb2ludGVycyIsICJpc1JlY29nbml6ZWQiLCAiaXNWYWxpZCIsICJkaXJlY3Rpb25TdHIiLCAiUGFuUmVjb2duaXplciIsICJfQXR0clJlY29nbml6ZXIiLCAicFgiLCAicFkiLCAiZGlyZWN0aW9uVGVzdCIsICJoYXNNb3ZlZCIsICJTd2lwZVJlY29nbml6ZXIiLCAiUGluY2hSZWNvZ25pemVyIiwgImluT3V0IiwgIlJvdGF0ZVJlY29nbml6ZXIiLCAiUHJlc3NSZWNvZ25pemVyIiwgInZhbGlkVGltZSIsICJkZWZhdWx0cyIsICJkb21FdmVudHMiLCAiaW5wdXRDbGFzcyIsICJjc3NQcm9wcyIsICJ1c2VyU2VsZWN0IiwgInRvdWNoU2VsZWN0IiwgInRvdWNoQ2FsbG91dCIsICJjb250ZW50Wm9vbWluZyIsICJ1c2VyRHJhZyIsICJ0YXBIaWdobGlnaHRDb2xvciIsICJwcmVzZXQiLCAidG9nZ2xlQ3NzUHJvcHMiLCAib2xkQ3NzUHJvcHMiLCAiTWFuYWdlciIsICJoYW5kbGVycyIsICJzdG9wIiwgImZvcmNlIiwgInN0b3BwZWQiLCAiY3VyUmVjb2duaXplciIsICJleGlzdGluZyIsICJ0YXJnZXRSZWNvZ25pemVyIiwgImV2ZW50cyIsICJnZXN0dXJlRXZlbnQiLCAiY3JlYXRlRXZlbnQiLCAiaW5pdEV2ZW50IiwgImdlc3R1cmUiLCAiZGlzcGF0Y2hFdmVudCIsICJTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQIiwgIlNpbmdsZVRvdWNoSW5wdXQiLCAic3RhcnRlZCIsICJub3JtYWxpemVTaW5nbGVUb3VjaGVzIiwgImNoYW5nZWQiLCAiZGVwcmVjYXRlIiwgIm1lc3NhZ2UiLCAiZGVwcmVjYXRpb25NZXNzYWdlIiwgIkVycm9yIiwgInN0YWNrIiwgImxvZyIsICJjb25zb2xlIiwgIndhcm4iLCAiZXh0ZW5kIiwgImRlc3QiLCAibWVyZ2UiLCAiaW5oZXJpdCIsICJjaGlsZCIsICJiYXNlIiwgImNoaWxkUCIsICJiYXNlUCIsICJfc3VwZXIiLCAiYmluZEZuIiwgIlJlYWxIYW1tZXIiLCAiSGFtbWVyIiwgIlZFUlNJT04iLCAiSU5QVVRfTU9WRSIsICJTVEFURV9QT1NTSUJMRSIsICJTVEFURV9CRUdBTiIsICJTVEFURV9DSEFOR0VEIiwgIlNUQVRFX0VOREVEIiwgIlNUQVRFX1JFQ09HTklaRUQiLCAiU1RBVEVfQ0FOQ0VMTEVEIiwgIlRhcCIsICJQYW4iLCAiU3dpcGUiLCAiUGluY2giLCAiUm90YXRlIiwgIlByZXNzIiwgIkRFTEVURSIsICJkZWVwT2JqZWN0QXNzaWduIiwgIm1lcmdlZCIsICJkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkiLCAic3RyaXBEZWxldGUiLCAiX2xlbjIiLCAiX2tleTIiLCAiX2NvbmNhdEluc3RhbmNlUHJvcGVydHkiLCAic2V0VGltZSIsICJnZXRUaW1lIiwgIl9zdGVwIiwgIl9pdGVyYXRvciIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJfUmVmbGVjdCRvd25LZXlzIiwgInMiLCAiY2xvbmUiLCAiZXJyIiwgIl9pIiwgIl9PYmplY3Qka2V5cyIsICJfT2JqZWN0JGtleXMyIiwgImFDb25zdHJ1Y3RvciIsICJuYXRpdmVDb25zdHJ1Y3QiLCAiTkVXX1RBUkdFVF9CVUciLCAiQVJHU19CVUciLCAiVGFyZ2V0IiwgIm5ld1RhcmdldCIsICIkYXJncyIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwgIiQkaCIsICJfc2V0UHJvdG90eXBlT2YiLCAicCIsICJfT2JqZWN0JHNldFByb3RvdHlwZU9mIiwgIl9pbmhlcml0cyIsICJfT2JqZWN0JGNyZWF0ZSIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJhc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9PYmplY3QkZ2V0UHJvdG90eXBlT2YiLCAiX19lc01vZHVsZSIsICIkRXJyb3IiLCAiVEVTVCIsICJWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkiLCAiSVNfVjhfT1JfQ0hBS1JBX1NUQUNLIiwgImVycm9yU3RhY2tJbnN0YWxsYWJsZSIsICJjbGVhckVycm9yU3RhY2siLCAiZHJvcEVudHJpZXMiLCAicHJlcGFyZVN0YWNrVHJhY2UiLCAiRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUiLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiUmVzdWx0IiwgIlJlc3VsdFByb3RvdHlwZSIsICJpdGVyYXRlIiwgInVuYm91bmRGdW5jdGlvbiIsICJpdGVyRm4iLCAiQVNfRU5UUklFUyIsICJJU19SRUNPUkQiLCAiSVNfSVRFUkFUT1IiLCAiSU5URVJSVVBURUQiLCAiY29uZGl0aW9uIiwgImNhbGxGbiIsICJjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzIiwgImV4Y2VwdGlvbnMiLCAiaW5zdGFsbEVycm9yQ2F1c2UiLCAiY2F1c2UiLCAiaW5zdGFsbEVycm9yU3RhY2siLCAibm9ybWFsaXplU3RyaW5nQXJndW1lbnQiLCAiJGRlZmF1bHQiLCAiJEFnZ3JlZ2F0ZUVycm9yIiwgImVycm9ycyIsICJpc0luc3RhbmNlIiwgIkFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlIiwgImVycm9yc0FycmF5IiwgIkFnZ3JlZ2F0ZUVycm9yIiwgIiRsb2NhdGlvbiIsICJkZWZlciIsICJjaGFubmVsIiwgInBvcnQiLCAic2V0U3BlY2llcyIsICJDT05TVFJVQ1RPUl9OQU1FIiwgImFuSW5zdGFuY2UiLCAic3BlY2llc0NvbnN0cnVjdG9yIiwgImRlZmF1bHRDb25zdHJ1Y3RvciIsICJlbmdpbmVJc0lvcyIsICJJU19JT1MiLCAiSVNfTk9ERSIsICJzZXRJbW1lZGlhdGUiLCAiY2xlYXJJbW1lZGlhdGUiLCAiRGlzcGF0Y2giLCAiTWVzc2FnZUNoYW5uZWwiLCAiY291bnRlciIsICJxdWV1ZSIsICJPTlJFQURZU1RBVEVDSEFOR0UiLCAibG9jYXRpb24iLCAicnVuIiwgInJ1bm5lciIsICJldmVudExpc3RlbmVyIiwgImdsb2JhbFBvc3RNZXNzYWdlRGVmZXIiLCAicG9zdE1lc3NhZ2UiLCAicHJvdG9jb2wiLCAiaG9zdCIsICJuZXh0VGljayIsICJwb3J0MiIsICJwb3J0MSIsICJvbm1lc3NhZ2UiLCAiaW1wb3J0U2NyaXB0cyIsICJyZW1vdmVDaGlsZCIsICJ0YXNrIiwgIlF1ZXVlIiwgImhlYWQiLCAidGFpbCIsICJRdWV1ZSQzIiwgImVudHJ5IiwgIm5vdGlmeSIsICJ0b2dnbGUiLCAicHJvbWlzZSIsICJ0aGVuIiwgImVuZ2luZUlzSW9zUGViYmxlIiwgIlBlYmJsZSIsICJlbmdpbmVJc1dlYm9zV2Via2l0IiwgIm1hY3JvdGFzayIsICJJU19JT1NfUEVCQkxFIiwgIklTX1dFQk9TX1dFQktJVCIsICJNdXRhdGlvbk9ic2VydmVyIiwgIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiLCAiUHJvbWlzZSIsICJxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IiLCAibWljcm90YXNrIiwgImZsdXNoIiwgImV4aXQiLCAiZW50ZXIiLCAicmVzb2x2ZSIsICJjcmVhdGVUZXh0Tm9kZSIsICJvYnNlcnZlIiwgImNoYXJhY3RlckRhdGEiLCAibWljcm90YXNrXzEiLCAicGVyZm9ybSIsICJwcm9taXNlTmF0aXZlQ29uc3RydWN0b3IiLCAiZW5naW5lSXNEZW5vIiwgImVuZ2luZUlzQnJvd3NlciIsICJOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IiLCAiSVNfQlJPV1NFUiIsICJJU19ERU5PIiwgIk5hdGl2ZVByb21pc2VQcm90b3R5cGUiLCAiU1VCQ0xBU1NJTkciLCAiTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UIiwgIlByb21pc2VSZWplY3Rpb25FdmVudCIsICJGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiIsICJQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSIsICJHTE9CQUxfQ09SRV9KU19QUk9NSVNFIiwgIkZha2VQcm9taXNlIiwgInByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbiIsICJSRUpFQ1RJT05fRVZFTlQiLCAiUHJvbWlzZUNhcGFiaWxpdHkiLCAicmVqZWN0IiwgIiQkcmVzb2x2ZSIsICIkJHJlamVjdCIsICJuZXdQcm9taXNlQ2FwYWJpbGl0eSIsICJJbnRlcm5hbCIsICJPd25Qcm9taXNlQ2FwYWJpbGl0eSIsICJob3N0UmVwb3J0RXJyb3JzIiwgIlByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbiIsICJuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSIsICJQUk9NSVNFIiwgImdldEludGVybmFsUHJvbWlzZVN0YXRlIiwgIlByb21pc2VDb25zdHJ1Y3RvciIsICJQcm9taXNlUHJvdG90eXBlIiwgIm5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSIsICJESVNQQVRDSF9FVkVOVCIsICJVTkhBTkRMRURfUkVKRUNUSU9OIiwgImlzVGhlbmFibGUiLCAiY2FsbFJlYWN0aW9uIiwgInJlYWN0aW9uIiwgImV4aXRlZCIsICJvayIsICJmYWlsIiwgInJlamVjdGlvbiIsICJvbkhhbmRsZVVuaGFuZGxlZCIsICJpc1JlamVjdCIsICJub3RpZmllZCIsICJyZWFjdGlvbnMiLCAib25VbmhhbmRsZWQiLCAicmVhc29uIiwgImlzVW5oYW5kbGVkIiwgInVud3JhcCIsICJpbnRlcm5hbFJlamVjdCIsICJpbnRlcm5hbFJlc29sdmUiLCAid3JhcHBlciIsICJleGVjdXRvciIsICJvbkZ1bGZpbGxlZCIsICJvblJlamVjdGVkIiwgIlByb21pc2VXcmFwcGVyIiwgInNldFRvU3RyaW5nVGFnJDEiLCAic2V0U3BlY2llcyQxIiwgInByb21pc2VTdGF0aWNzSW5jb3JyZWN0SXRlcmF0aW9uIiwgImNhcGFiaWxpdHkiLCAiJHByb21pc2VSZXNvbHZlIiwgInJlbWFpbmluZyIsICJhbHJlYWR5Q2FsbGVkIiwgImNhdGNoIiwgInJhY2UiLCAicHJvbWlzZVJlc29sdmUiLCAicHJvbWlzZUNhcGFiaWxpdHkiLCAiUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciIsICJDSEVDS19XUkFQUEVSIiwgImFsbFNldHRsZWQiLCAic3RhdHVzIiwgIlBST01JU0VfQU5ZX0VSUk9SIiwgImFueSIsICJhbHJlYWR5UmVzb2x2ZWQiLCAiYWxyZWFkeVJlamVjdGVkIiwgImZpbmFsbHkiLCAib25GaW5hbGx5IiwgImlzRnVuY3Rpb24iLCAid2l0aFJlc29sdmVycyIsICJ0cnkiLCAiX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5IiwgIl9Qcm9taXNlIiwgIl9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eSIsICJfcmVnZW5lcmF0b3JSdW50aW1lIiwgImFzeW5jSXRlcmF0b3IiLCAidG9TdHJpbmdUYWciLCAiZGVmaW5lIiwgIkdlbmVyYXRvciIsICJDb250ZXh0IiwgIm1ha2VJbnZva2VNZXRob2QiLCAidHJ5Q2F0Y2giLCAiaCIsICJHZW5lcmF0b3JGdW5jdGlvbiIsICJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsICJnIiwgImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsICJfaW52b2tlIiwgIkFzeW5jSXRlcmF0b3IiLCAiaW52b2tlIiwgIl9fYXdhaXQiLCAiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCAiZGVsZWdhdGUiLCAibWF5YmVJbnZva2VEZWxlZ2F0ZSIsICJzZW50IiwgIl9zZW50IiwgImRpc3BhdGNoRXhjZXB0aW9uIiwgImFicnVwdCIsICJyZXN1bHROYW1lIiwgIm5leHRMb2MiLCAicHVzaFRyeUVudHJ5IiwgInRyeUxvYyIsICJjYXRjaExvYyIsICJmaW5hbGx5TG9jIiwgImFmdGVyTG9jIiwgInRyeUVudHJpZXMiLCAicmVzZXRUcnlFbnRyeSIsICJjb21wbGV0aW9uIiwgImlzTmFOIiwgImRpc3BsYXlOYW1lIiwgImlzR2VuZXJhdG9yRnVuY3Rpb24iLCAibWFyayIsICJhd3JhcCIsICJhc3luYyIsICJwb3AiLCAicnZhbCIsICJoYW5kbGUiLCAiY29tcGxldGUiLCAiZmluaXNoIiwgImRlbGVnYXRlWWllbGQiLCAicnVudGltZSIsICJyZWdlbmVyYXRvciIsICJyZWdlbmVyYXRvclJ1bnRpbWUiLCAiYWNjaWRlbnRhbFN0cmljdE1vZGUiLCAiYXJyYXlCdWZmZXJOb25FeHRlbnNpYmxlIiwgIkFycmF5QnVmZmVyIiwgImJ1ZmZlciIsICJpc0V4dGVuc2libGUiLCAiQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFIiwgIiRpc0V4dGVuc2libGUiLCAib2JqZWN0SXNFeHRlbnNpYmxlIiwgImZyZWV6aW5nIiwgInByZXZlbnRFeHRlbnNpb25zIiwgImdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSIsICJGUkVFWklORyIsICJSRVFVSVJFRCIsICJzZXRNZXRhZGF0YSIsICJvYmplY3RJRCIsICJ3ZWFrRGF0YSIsICJtZXRhIiwgImludGVybmFsTWV0YWRhdGFNb2R1bGUiLCAiZmFzdEtleSIsICJnZXRXZWFrRGF0YSIsICJvbkZyZWV6ZSIsICJJbnRlcm5hbE1ldGFkYXRhTW9kdWxlIiwgImludGVybmFsU3RhdGVHZXR0ZXJGb3IiLCAiY29sbGVjdGlvbiIsICJjb21tb24iLCAiSVNfV0VBSyIsICJBRERFUiIsICJleHBvcnRlZCIsICJJU19BRERFUiIsICJnZXRDb25zdHJ1Y3RvciIsICJzZXRTdHJvbmciLCAiZGVmaW5lQnVpbHRJbnMiLCAidW5zYWZlIiwgImNvbGxlY3Rpb25TdHJvbmciLCAicHJldmlvdXMiLCAiZ2V0RW50cnkiLCAicmVtb3ZlZCIsICJJVEVSQVRPUl9OQU1FIiwgImdldEludGVybmFsQ29sbGVjdGlvblN0YXRlIiwgImdldEludGVybmFsSXRlcmF0b3JTdGF0ZSIsICIkc29tZSIsICJtZXJnZVNvcnQiLCAiY29tcGFyZWZuIiwgIm1pZGRsZSIsICJpbnNlcnRpb25Tb3J0IiwgImxsZW5ndGgiLCAicmxlbmd0aCIsICJsaW5kZXgiLCAicmluZGV4IiwgImFycmF5U29ydCIsICJmaXJlZm94IiwgImVuZ2luZUZmVmVyc2lvbiIsICJlbmdpbmVJc0llT3JFZGdlIiwgIndlYmtpdCIsICJlbmdpbmVXZWJraXRWZXJzaW9uIiwgImludGVybmFsU29ydCIsICJGRiIsICJJRV9PUl9FREdFIiwgIlY4IiwgIldFQktJVCIsICJuYXRpdmVTb3J0IiwgIkZBSUxTX09OX1VOREVGSU5FRCIsICJGQUlMU19PTl9OVUxMIiwgIlNUUklDVF9NRVRIT0QiLCAiU1RBQkxFX1NPUlQiLCAiY29kZSIsICJmcm9tQ2hhckNvZGUiLCAiaXRlbXNMZW5ndGgiLCAiYXJyYXlMZW5ndGgiLCAiZ2V0UmFuZG9tVmFsdWVzIiwgInJuZHM4IiwgIlVpbnQ4QXJyYXkiLCAicm5nIiwgImNyeXB0byIsICJieXRlVG9IZXgiLCAibmF0aXZlIiwgInJhbmRvbVVVSUQiLCAidjQiLCAiYnVmIiwgInJuZHMiLCAiaXNJZCIsICJkZWxheSIsICJJbmZpbml0eSIsICJzZXRPcHRpb25zIiwgIl9mbHVzaElmTmVlZGVkIiwgIl9leHRlbmRlZCIsICJtZSIsICJfbGVuIiwgIl9rZXkiLCAiX3F1ZXVlIiwgIl90aW1lb3V0IiwgIl9zZXRUaW1lb3V0IiwgIl9zcGxpY2VJbnN0YW5jZVByb3BlcnR5IiwgIkRhdGFTZXRQYXJ0IiwgInNlbmRlcklkIiwgIl9zdWJzY3JpYmVycyIsICJzdWJzY3JpYmVyIiwgIlNldCIsICJEYXRhU3RyZWFtIiwgInBhaXJzIiwgIl9wYWlycyIsICJfc3RlcCR2YWx1ZSIsICJ0MCIsICJfaXRlcmF0b3IyIiwgIl9zdGVwMiIsICJfc3RlcDIkdmFsdWUiLCAiX2l0ZXJhdG9yMyIsICJfc3RlcDMiLCAiX3N0ZXAzJHZhbHVlIiwgIl9pdGVyYXRvcjQiLCAiX3N0ZXA0IiwgIl9zdGVwNCR2YWx1ZSIsICJfY29udGV4dDUiLCAicGFpciIsICJfY29udGV4dDYiLCAiX3N0ZXA1IiwgIl9pdGVyYXRvcjUiLCAiX3N0ZXA1JHZhbHVlIiwgIl9NYXAiLCAiX1NldCIsICJ0b0lkQXJyYXkiLCAidG9JdGVtQXJyYXkiLCAiX3N0ZXA2IiwgIl9pdGVyYXRvcjYiLCAiX3N0ZXA2JHZhbHVlIiwgIl9TeW1ib2wkaXRlcmF0b3IyIiwgIl9jYWxsZWUiLCAiX2l0ZXJhdG9yNyIsICJfc3RlcDciLCAiX3N0ZXA3JHZhbHVlIiwgIl9jb250ZXh0NyIsICJfc3RlcDgiLCAiX2l0ZXJhdG9yOCIsICJfc3RlcDgkdmFsdWUiLCAiX2NhbGxlZTIiLCAiX2l0ZXJhdG9yOSIsICJfc3RlcDkiLCAiX3N0ZXA5JHZhbHVlIiwgIl9jb250ZXh0OCIsICJfZ2V0SXRlcmF0b3IiLCAiY3VyciIsICJtYXhJdGVtIiwgIm1heFZhbHVlIiwgIl9jdXJyJHZhbHVlIiwgIm1pbkl0ZW0iLCAibWluVmFsdWUiLCAiX2N1cnIkdmFsdWUyIiwgImFjY3VtdWxhdG9yIiwgIl9zdGVwMTAiLCAiX2l0ZXJhdG9yMTAiLCAiX3N0ZXAxMCR2YWx1ZSIsICJfY29udGV4dDkiLCAiX3NvcnRJbnN0YW5jZVByb3BlcnR5IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiaWRBIiwgIml0ZW1BIiwgIl9yZWY0IiwgImlkQiIsICJpdGVtQiIsICJEYXRhU2V0IiwgIl9EYXRhU2V0UGFydCIsICJfY3JlYXRlU3VwZXIiLCAiX29wdGlvbnMiLCAiX2RhdGEiLCAiX2lkUHJvcCIsICJmaWVsZElkIiwgImFkZGVkSWRzIiwgImlkc1RvQWRkIiwgImQiLCAiX3NvbWVJbnN0YW5jZVByb3BlcnR5IiwgIl9hZGRJdGVtIiwgIl90cmlnZ2VyIiwgInVwZGF0ZWRJZHMiLCAidXBkYXRlZERhdGEiLCAiaWRQcm9wIiwgImFkZE9yVXBkYXRlIiwgIm9yaWdJZCIsICJmdWxsSXRlbSIsICJvbGRJdGVtIiwgIl9PYmplY3QkYXNzaWduIiwgIl91cGRhdGVJdGVtIiwgIl90aGlzNCIsICJ1cGRhdGVFdmVudERhdGEiLCAidXBkYXRlcyIsICJpZHMiLCAiX2l0ZW0iLCAicmV0dXJuVHlwZSIsICJpdGVtSWRzIiwgIml0ZW1JZCIsICJfa2V5c0luc3RhbmNlUHJvcGVydHkiLCAib3JkZXIiLCAiX3NvcnQiLCAiZmllbGRzIiwgIl9maWx0ZXJGaWVsZHMiLCAicmVzdWx0YW50IiwgIm1hcHBlZEl0ZW1zIiwgImZpbHRlcmVkSXRlbSIsICJmaWVsZCIsICJhdiIsICJidiIsICJyZW1vdmVkSWRzIiwgInJlbW92ZWRJdGVtcyIsICJpZGVudCIsICJtYXhGaWVsZCIsICJfdmFsdWVzSW5zdGFuY2VQcm9wZXJ0eSIsICJpdGVtRmllbGQiLCAibWluRmllbGQiLCAiZXhpc3RzIiwgInV1aWQ0IiwgIl9KU09OJHN0cmluZ2lmeSIsICJfb2JqZWN0U3ByZWFkIiwgIl9lbnRyaWVzSW5zdGFuY2VQcm9wZXJ0eSIsICJEYXRhVmlldyIsICJfbGlzdGVuZXIiLCAiX29uRXZlbnQiLCAic2V0RGF0YSIsICJnZXREYXRhU2V0IiwgImdldElkcyIsICJfaWRzIiwgIm9sZElkcyIsICJuZXdJZHMiLCAidmlld09wdGlvbnMiLCAidGhpc0ZpbHRlciIsICJvcHRpb25zRmlsdGVyIiwgImRlZmF1bHRGaWx0ZXIiLCAic3RyZWFtIiwgIl90aGlzJF9kYXRhIiwgIm9sZEl0ZW1zIiwgInVwZGF0ZWRJdGVtcyIsICJpc0RhdGFTZXRMaWtlIiwgImRpc3RpbmN0IiwgInVwZGF0ZU9ubHkiLCAiY3giLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiY2FjaGUiLCAicHJvdG90eXBlIiwgImtleXMiLCAiZGVzY3JpcHRvcnMiLCAiZmlsdGVyIiwgInBvc2l0aW9uIiwgIm1hdGNoZXMiLCAiaGFzT3duUHJvcGVydHkiLCAicmVkdWNlciIsICJ2YWx1ZSIsICJkZWxpbWl0ZXIiLCAiZGVmaW5lIiwgInNpemUiLCAibGVuZ3RoIiwgInRva2VuIiwgImZpbHRlciIsICJlYWNoIiwgInRva2VuIiwgInZhbHVlIiwgIm1hdGNoIiwgInByb3RvdHlwZSIsICJ2YWx1ZSIsICJ0b1N0cmluZyIsICJlYWNoIiwgImVuY29kZSIsICJ2YWx1ZSIsICJtYXRjaCIsICJrZXlzIiwgInZhbHVlIiwgImlzRm9ybURhdGEiLCAiaXNGaWxlTGlzdCIsICJ0cmFuc2l0aW9uYWwiLCAibGluZSIsICJ2YWx1ZSIsICJtYXRjaCIsICJmaWx0ZXIiLCAiY2hhciIsICJzZWxmIiwgImtleXMiLCAiY29tcHV0ZWQiLCAicHJvdG90eXBlIiwgInZhbHVlIiwgInZhbGlkYXRlU3RhdHVzIiwgIm1hdGNoIiwgIm1pbiIsICJub3ciLCAibm93IiwgImZsdXNoIiwgIm9yaWdpbiIsICJ2YWx1ZSIsICJtYXRjaCIsICJtZXJnZSIsICJ0b2tlbiIsICJ2YWx1ZSIsICJ0cmFuc2l0aW9uYWwiLCAibGVuZ3RoIiwgInNpZ25hbCIsICJ2YWx1ZSIsICJkb25lIiwgInJlcyIsICJsZW5ndGgiLCAiZmx1c2giLCAidmFsdWUiLCAibGVuZ3RoIiwgInZlcnNpb24iLCAidmFsdWUiLCAia2V5cyIsICJ2YWxpZGF0b3JzIiwgInRyYW5zaXRpb25hbCIsICJ0b2tlbiIsICJ2YWx1ZSIsICJBeGlvcyIsICJBeGlvc0Vycm9yIiwgIkNhbmNlbGVkRXJyb3IiLCAiaXNDYW5jZWwiLCAiQ2FuY2VsVG9rZW4iLCAiVkVSU0lPTiIsICJhbGwiLCAiaXNBeGlvc0Vycm9yIiwgInNwcmVhZCIsICJ0b0Zvcm1EYXRhIiwgIkF4aW9zSGVhZGVycyIsICJIdHRwU3RhdHVzQ29kZSIsICJtZXJnZUNvbmZpZyIsICJ2YWx1ZSIsICJpTG9hZGVkQ2hpbGRyZW4iLCAidmFsdWUiLCAiY3ljbGVDaGVjayIsICJub2RlIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAia2V5cyIsICJub2RlIiwgInByZWZpeCIsICJ1c2VEZXByZWNhdGVkR2VuZXJhdGVkSHRtbElkIiwgIl9yZWYiLCAidXNlTmV3R2VuZXJhdGVkSHRtbElkIiwgIl9yZWYyIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgInIiLCAibyIsICJpc09iamVjdCIsICJpc0ludmVyc2VDb2xvck1vZGUiLCAiZ2V0Q29sb3JNb2RlIiwgImdldE9uIiwgIm5vZGUiLCAic2V0T24iLCAidmFsdWUiLCAiQ29tcHV0ZWQiLCAiYmFzZSIsICJfcmVmIiwgIl9yZWYyIiwgImdldENvbXB1dGVkIiwgIm92ZXIiLCAiYnVpbGRUaGVtZSIsICJnZXRQcm90b3R5cGVPZiIsICJwcm90b3R5cGUiLCAia2V5IiwgInByb3BlcnR5IiwgImdldCIsICJvd25LZXlzIiwgIm1lcmdlRGVlcCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAicmdiIiwgInJnYiIsICJtYXgiLCAicm91bmQiLCAicm91bmQiLCAiY3NzIiwgInJnYiIsICJoc2wiLCAicmdiIiwgInJvdW5kIiwgIm1pbiIsICJmbG9vciIsICJtaW4iLCAibWF4IiwgInJnYjJoc2wiLCAicG93IiwgImNvcyIsICJzcXJ0IiwgInJvdW5kIiwgIm51bSIsICJyb3VuZCIsICJybmQiLCAicm91bmQiLCAicmdiIiwgInBvdyIsICJhYnMiLCAicG93IiwgInNpZ24iLCAiYWJzIiwgImxhYiIsICJwb3ciLCAidGVzdCIsICJyZ2IiLCAicmdiIiwgImxjaCIsICJ2YWx1ZSIsICJzcXJ0IiwgInBvdyIsICJwb3ciLCAic3FydCIsICJQSSIsICJjb3MiLCAic2luIiwgImF0YW4yIiwgImNvbG9ycyIsICJyZ2IiLCAicG93IiwgImNvbG9ycyIsICJ2YWx1ZSIsICJmIiwgIl9wb3MiLCAiY29sb3JzIiwgImxhYiIsICJwb3ciLCAic2luIiwgImNvcyIsICJsaWdodG5lc3MiLCAiZmxvb3IiLCAibG9nIiwgInBvdyIsICJmbG9vciIsICJudW0iLCAibWluIiwgIm1heCIsICJsaW1pdHMiLCAidmFsdWUiLCAic3FydCIsICJwb3ciLCAibWluIiwgIm1heCIsICJhdGFuMiIsICJhYnMiLCAiY29zIiwgInNpbiIsICJQSSIsICJjb2xvcnMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiZmxhdHRlbiIsICJfcmVmIiwgImV1aVBhbGV0dGVDb2xvckJsaW5kIiwgIl9yZWYyIiwgImNvbG9ycyIsICJiYXNlIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfbG9vcCIsICJpIiwgImV1aVBhbGV0dGVDb2xvckJsaW5kQmVoaW5kVGV4dCIsICJpbk9yaWdpbmFsRm9ybWF0IiwgInRyYW5zcGFyZW50aXplIiwgInRpbnQiLCAic2hhZGUiLCAidGludE9yU2hhZGUiLCAibGlnaHRuZXNzIiwgImRhcmtlbiIsICJfdHlwZW9mIiwgIm8iLCAibWFrZUhpZ2hDb250cmFzdENvbG9yIiwgImxpZ2h0bmVzcyIsICJtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yIiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJfcmVmNSIsICJjb2xvcnMiLCAiX3JlZjYiLCAiX3JlZjciLCAiX3JlZjgiLCAiX3JlZjkiLCAiX3JlZjEwIiwgIl9yZWYxMSIsICJfcmVmMTIiLCAiX3JlZjEzIiwgIl9yZWYxNCIsICJfcmVmMTUiLCAiX3JlZjE2IiwgIl9yZWYxNyIsICJfcmVmMTgiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX3R5cGVvZiIsICJvIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX3R5cGVvZiIsICJsb2dpY2FsQ1NTIiwgInByb3BlcnR5IiwgInZhbHVlIiwgImxvZ2ljYWxDU1NXaXRoRmFsbGJhY2siLCAiY2FtZWxDYXNlIiwgImxvZ2ljYWxTdHlsZSIsICJwcm9wZXJ0eSIsICJ2YWx1ZSIsICJfZGVmaW5lUHJvcGVydHkiLCAibG9naWNhbFNpemVDU1MiLCAibG9naWNhbFRleHRBbGlnbkNTUyIsICJ2YWx1ZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAibG9naWNhbFNob3J0aGFuZENTUyIsICJwcm9wZXJ0eSIsICJ2YWx1ZSIsICJsb2dpY2FsQm9yZGVyUmFkaXVzQ1NTIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX3R5cGVvZiIsICJvIiwgIl93cmFwUmVnRXhwIiwgImUiLCAiciIsICJ0IiwgIm1hdGhXaXRoVW5pdHMiLCAidmFsdWUiLCAibWF0Y2hlcyIsICJfdHlwZW9mIiwgIm8iLCAic2l6ZVRvUGl4ZWwiLCAiYmFzZSIsICJfcmVmIiwgImJhc2UiLCAiZm9udCIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJfcmVmNSIsICJfcmVmNiIsICJfcmVmNyIsICJfcmVmOCIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9yZWYiLCAiX3JlZjIiLCAiYmFzZSIsICJfcmVmIiwgImNvbG9ycyIsICJmb2N1cyIsICJlbWl0RXVpUHJvdmlkZXJXYXJuaW5nIiwgInByb3ZpZGVyTWVzc2FnZSIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiU3R5bGVTaGVldCIsICJoeWRyYXRlIiwgInNoZWV0IiwgImZsdXNoIiwgImFicyIsICJ2YWx1ZSIsICJsZW5ndGgiLCAidHJpbSIsICJhcHBlbmQiLCAibGVuZ3RoIiwgInZhbHVlIiwgInRyaW0iLCAidmFsdWUiLCAibGVuZ3RoIiwgInByb3BlcnR5IiwgImNoYXJhY3RlciIsICJjaGFyYWN0ZXJzIiwgImFwcGVuZCIsICJzaXplIiwgImFicyIsICJ0cmltIiwgImxlbmd0aCIsICJzdHJpbmdpZnkiLCAibGVuZ3RoIiwgIndlYWtNZW1vaXplIiwgImZ1bmMiLCAiY2FjaGUiLCAiY2FjaGUiLCAiaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nIiwgImNoYXJhY3RlciIsICJ0b1J1bGVzIiwgImdldFJ1bGVzIiwgInZhbHVlIiwgImNvbXBhdCIsICJyZW1vdmVMYWJlbCIsICJsZW5ndGgiLCAicHJlZml4ZXIiLCAiY3JlYXRlQ2FjaGUiLCAibm9kZSIsICJzdHJpbmdpZnkiLCAic3R5bGlzIiwgInN0eWxlcyIsICJzaGVldCIsICJjYWNoZSIsICJjbGFzc05hbWVzIiwgInJlZ2lzdGVyU3R5bGVzIiwgImNhY2hlIiwgImluc2VydFN0eWxlcyIsICJpc0RldmVsb3BtZW50IiwgImlzQ3VzdG9tUHJvcGVydHkiLCAicHJvcGVydHkiLCAiaXNQcm9jZXNzYWJsZVZhbHVlIiwgInZhbHVlIiwgInByb2Nlc3NTdHlsZVZhbHVlIiwgIm1hdGNoIiwgImtleWZyYW1lcyIsICJuZXh0IiwgInN0eWxlcyIsICJzdHJpbmciLCAiUmVhY3QiLCAic3luY0ZhbGxiYWNrIiwgInVzZUluc2VydGlvbkVmZmVjdCIsICJpc0RldmVsb3BtZW50IiwgIndpdGhFbW90aW9uQ2FjaGUiLCAiZnVuYyIsICJjYWNoZSIsICJnZXRUaGVtZSIsICJUaGVtZVByb3ZpZGVyIiwgImNyZWF0ZUVtb3Rpb25Qcm9wcyIsICJJbnNlcnRpb24iLCAiX3JlZiIsICJjYWNoZSIsICJpc0RldmVsb3BtZW50IiwgIlJlYWN0IiwgImpzeCIsICJjYWNoZSIsICJzdHlsZXMiLCAic2hlZXQiLCAibm9kZSIsICJrZXlmcmFtZXMiLCAidG9TdHJpbmciLCAiX2V4dGVuZHMiLCAidXNlRXVpVGhlbWUiLCAid2l0aEV1aVRoZW1lIiwgIkNvbXBvbmVudCIsICJSZW5kZXIiLCAiUmVuZGVyV2l0aEV1aVRoZW1lIiwgIl9yZWYiLCAidGhyb3R0bGUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgInNvcnRNYXBCeUxhcmdlVG9TbWFsbFZhbHVlcyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgInNvcnRNYXBCeVNtYWxsVG9MYXJnZVZhbHVlcyIsICJfcmVmNSIsICJfcmVmNiIsICJfcmVmNyIsICJfcmVmOCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciIsICJfcmVmIiwgInRocm90dGxlIiwgImltcG9ydF9yZWFjdCIsICJ1c2VDdXJyZW50RXVpQnJlYWtwb2ludCIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiY2xvbmVFbGVtZW50V2l0aENzcyIsICJldWlTdHlsaXNQcmVmaXhlciIsICJwcmVmaXgiLCAidmFsdWUiLCAibGVuZ3RoIiwgImNhY2hlIiwgIm1lcmdlIiwgImNzcyIsICJjcmVhdGVFbW90aW9uIiwgInZhbHVlIiwgImtleWZyYW1lcyIsICJhbmltYXRpb24iLCAiaW5qZWN0R2xvYmFsIiwgImN4IiwgImh5ZHJhdGUiLCAiZmx1c2giLCAiY2xhc3NuYW1lcyIsICJjc3MiLCAiaW1wb3J0X3JlYWN0IiwgIkV1aUVtb3Rpb25UaGVtZVByb3ZpZGVyIiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJ1c2VVcGRhdGVFZmZlY3QiLCAiaW1wb3J0X3JlYWN0IiwgInVzZUNvbWJpbmVkUmVmcyIsICJub2RlIiwgInNldE11bHRpcGxlUmVmcyIsICJfZXh0ZW5kcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiRXVpVGhlbWVNZW1vaXplZFN0eWxlc1Byb3ZpZGVyIiwgIl9yZWYiLCAiZ2V0TWVtb2l6ZWRTdHlsZXMiLCAidXNlRXVpTWVtb2l6ZWRTdHlsZXMiLCAid2l0aEV1aVN0eWxlc01lbW9pemVyIiwgIkNvbXBvbmVudCIsICJSZW5kZXIiLCAiUmVuZGVyV2l0aEV1aVN0eWxlc01lbW9pemVyIiwgIl9yZWYyIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIkV1aVRoZW1lUHJvdmlkZXIiLCAiX3JlZiIsICJzZXRHbG9iYWxDU1NWYXJpYWJsZXMiLCAiaXNFcXVhbCIsICJjc3MiLCAiX3JlZjIiLCAiY2xvbmVFbGVtZW50IiwgIlJlYWN0IiwgInVzZUlzV2l0aGluQnJlYWtwb2ludHMiLCAibWluIiwgIl90eXBlb2YiLCAibyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiQ2FudmFzVGV4dFV0aWxzIiwgIl9yZWYiLCAiZm9udCIsICJnZXQiLCAiaW1wb3J0X3JlYWN0IiwgImhhc0NoYXJzVG9SZXBsYWNlIiwgImNoYXIiLCAib25UYWJ1bGFyQ29weSIsICJWaXN1YWxseUhpZGUiLCAiX3JlZiIsICJPdmVycmlkZUNvcGllZFRhYnVsYXJDb250ZW50IiwgIl9yZWYyIiwgIlJlYWN0IiwgImZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmIiwgIm5vZGUiLCAiaXNVbmRlZmluZWQiLCAidmFsdWUiLCAiaXNOdWxsIiwgImlzTmlsIiwgImlzRGF0ZSIsICJ2YWx1ZSIsICJtb21lbnQiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJfaXNGdW5jdGlvbiIsICJpc0FycmF5IiwgIl9pc0FycmF5IiwgImlzU3RyaW5nIiwgIl9pc1N0cmluZyIsICJpc0Jvb2xlYW4iLCAiX2lzQm9vbGVhbiIsICJpc051bWJlciIsICJfaXNOdW1iZXIiLCAiaXNOYU4iLCAiX2lzTmFOIiwgImlzT2JqZWN0IiwgIl9pc09iamVjdCIsICJmb3JtYXRCb29sZWFuIiwgInZhbHVlIiwgIl9yZWYiLCAiaW1wb3J0X21vbWVudCIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJjYWxlbmRhciIsICJ2YWx1ZSIsICJtb21lbnQiLCAiZm9ybWF0RGF0ZSIsICJpc1N0cmluZyIsICJpc0Z1bmN0aW9uIiwgImZvcm1hdE51bWJlciIsICJ2YWx1ZSIsICJyb3VuZCIsICJpc1N0cmluZyIsICJudW1lcmFsIiwgImZvcm1hdFRleHQiLCAidmFsdWUiLCAiZm9ybWF0QXV0byIsICJ2YWx1ZSIsICJpc05hTiIsICJpc1N0cmluZyIsICJpc0RhdGUiLCAiaXNCb29sZWFuIiwgImlzTnVtYmVyIiwgImlzQXJyYXkiLCAiX3R5cGVvZiIsICJvIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgImdldEJ1ZmZlclZhbHVlcyIsICJfc2xpY2VkVG9BcnJheSIsICJfcmVmIiwgInBvc2l0aW9uIiwgIl9yZWYyIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfcmVmNCIsICJfcmVmNSIsICJub2RlIiwgImdldFNlY3VyZVJlbEZvclRhcmdldCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfZ2V0IiwgImdldCIsICJvYmplY3QiLCAiX2dldCIsICJ2MSIsICJyZXZlcnNlIiwgInZhbHVlIiwgInZhbHVlIiwgImdldFRyYW5zaXRpb25UaW1pbmdzIiwgImdldFdhaXREdXJhdGlvbiIsICJwZXJmb3JtT25GcmFtZSIsICJvbkZyYW1lIiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJldWlCYWNrZ3JvdW5kQ29sb3IiLCAiX3JlZiIsICJfcmVmMiIsICJfdGludE9yU2hhZGUiLCAiY29sb3IiLCAiX2V1aUJhY2tncm91bmRDb2xvcnMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAidXNlRXVpQmFja2dyb3VuZENvbG9yQ1NTIiwgImV1aVNjcm9sbEJhclN0eWxlcyIsICJfcmVmIiwgImNvbG9ycyIsICJzaXplIiwgIl9yZWYyIiwgImV1aU92ZXJmbG93U2hhZG93U3R5bGVzIiwgIl9yZWYzIiwgInNpemUiLCAiX3JlZjQiLCAiZXVpWVNjcm9sbCIsICJfcmVmNSIsICJldWlZU2Nyb2xsV2l0aFNoYWRvd3MiLCAiX3JlZjciLCAiZXVpWFNjcm9sbCIsICJldWlYU2Nyb2xsV2l0aFNoYWRvd3MiLCAiZXVpRnVsbEhlaWdodCIsICJfdHlwZW9mIiwgIm8iLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIm93bktleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgImV1aVBhZGRpbmdTaXplIiwgIl9yZWYiLCAic2l6ZSIsICJfZ2V0RXVpUGFkZGluZ1NpemUiLCAiX2V1aVBhZGRpbmdTaWRlc0FuZFNpemVzIiwgIl9nZW5lcmF0ZVNpemVTdHlsZXMiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3NsaWNlZFRvQXJyYXkiLCAidXNlRXVpUGFkZGluZ0NTUyIsICJldWlPdXRsaW5lIiwgIl9yZWYiLCAiZXVpRm9jdXNSaW5nIiwgImV1aUZvbnRTaXplIiwgIl9yZWYiLCAiZXVpVGV4dEJyZWFrV29yZCIsICJldWlUZXh0VHJ1bmNhdGUiLCAiZXVpTnVtYmVyRm9ybWF0IiwgIl9yZWYyIiwgImV1aUJyZWFrcG9pbnQiLCAiX3JlZiIsICJldWlNaW5CcmVha3BvaW50IiwgIl9yZWYyIiwgInNpemUiLCAiZXVpTWF4QnJlYWtwb2ludCIsICJfcmVmMyIsICJzaXplIiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aUdsb2JhbFN0eWxlcyIsICJfcmVmIiwgImJhc2UiLCAiY29sb3JzIiwgImZvbnQiLCAic3R5bGVzIiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGVtcGxhdGVPYmplY3QyIiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiX3RlbXBsYXRlT2JqZWN0IiwgImV1aUFuaW1TbGlkZUluVXAiLCAic2l6ZSIsICJfdGVtcGxhdGVPYmplY3QyIiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiZXVpU2NyZWVuUmVhZGVyT25seSIsICJFdWlTY3JlZW5SZWFkZXJPbmx5IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgIkV1aVNjcmVlblJlYWRlckxpdmUiLCAiX3JlZiIsICJ0b2dnbGUiLCAiUHJvcFR5cGVzIiwgImNhbmRpZGF0ZVNlbGVjdG9ycyIsICJjYW5kaWRhdGVTZWxlY3RvciIsICJqb2luIiwgIk5vRWxlbWVudCIsICJFbGVtZW50IiwgIm1hdGNoZXMiLCAicHJvdG90eXBlIiwgIm1zTWF0Y2hlc1NlbGVjdG9yIiwgIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsICJnZXRSb290Tm9kZSIsICJlbGVtZW50IiwgIm93bmVyRG9jdW1lbnQiLCAiZ2V0Q2FuZGlkYXRlcyIsICJlbCIsICJpbmNsdWRlQ29udGFpbmVyIiwgImZpbHRlciIsICJjYW5kaWRhdGVzIiwgIkFycmF5IiwgInNsaWNlIiwgImFwcGx5IiwgInF1ZXJ5U2VsZWN0b3JBbGwiLCAiY2FsbCIsICJ1bnNoaWZ0IiwgImdldENhbmRpZGF0ZXNJdGVyYXRpdmVseSIsICJlbGVtZW50cyIsICJvcHRpb25zIiwgImVsZW1lbnRzVG9DaGVjayIsICJmcm9tIiwgImxlbmd0aCIsICJzaGlmdCIsICJ0YWdOYW1lIiwgImFzc2lnbmVkIiwgImFzc2lnbmVkRWxlbWVudHMiLCAiY29udGVudCIsICJjaGlsZHJlbiIsICJuZXN0ZWRDYW5kaWRhdGVzIiwgImZsYXR0ZW4iLCAicHVzaCIsICJzY29wZSIsICJ2YWxpZENhbmRpZGF0ZSIsICJpbmNsdWRlcyIsICJzaGFkb3dSb290IiwgImdldFNoYWRvd1Jvb3QiLCAidmFsaWRTaGFkb3dSb290IiwgInNoYWRvd1Jvb3RGaWx0ZXIiLCAiZ2V0VGFiaW5kZXgiLCAibm9kZSIsICJpc1Njb3BlIiwgInRhYkluZGV4IiwgInRlc3QiLCAiaXNDb250ZW50RWRpdGFibGUiLCAiaXNOYU4iLCAicGFyc2VJbnQiLCAiZ2V0QXR0cmlidXRlIiwgInNvcnRPcmRlcmVkVGFiYmFibGVzIiwgImEiLCAiYiIsICJkb2N1bWVudE9yZGVyIiwgImlzSW5wdXQiLCAiaXNIaWRkZW5JbnB1dCIsICJ0eXBlIiwgImlzRGV0YWlsc1dpdGhTdW1tYXJ5IiwgInIiLCAic29tZSIsICJjaGlsZCIsICJnZXRDaGVja2VkUmFkaW8iLCAibm9kZXMiLCAiZm9ybSIsICJpIiwgImNoZWNrZWQiLCAiaXNUYWJiYWJsZVJhZGlvIiwgIm5hbWUiLCAicmFkaW9TY29wZSIsICJxdWVyeVJhZGlvcyIsICJyYWRpb1NldCIsICJ3aW5kb3ciLCAiQ1NTIiwgImVzY2FwZSIsICJlcnIiLCAiY29uc29sZSIsICJlcnJvciIsICJtZXNzYWdlIiwgImlzUmFkaW8iLCAiaXNOb25UYWJiYWJsZVJhZGlvIiwgImlzWmVyb0FyZWEiLCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwgIndpZHRoIiwgImhlaWdodCIsICJpc0hpZGRlbiIsICJfcmVmIiwgImRpc3BsYXlDaGVjayIsICJnZXRDb21wdXRlZFN0eWxlIiwgInZpc2liaWxpdHkiLCAiaXNEaXJlY3RTdW1tYXJ5IiwgIm5vZGVVbmRlckRldGFpbHMiLCAicGFyZW50RWxlbWVudCIsICJub2RlUm9vdEhvc3QiLCAiaG9zdCIsICJub2RlSXNBdHRhY2hlZCIsICJjb250YWlucyIsICJvcmlnaW5hbE5vZGUiLCAicm9vdE5vZGUiLCAiYXNzaWduZWRTbG90IiwgImdldENsaWVudFJlY3RzIiwgImlzRGlzYWJsZWRGcm9tRmllbGRzZXQiLCAicGFyZW50Tm9kZSIsICJkaXNhYmxlZCIsICJpdGVtIiwgImlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUiLCAiaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlIiwgImlzVmFsaWRTaGFkb3dSb290VGFiYmFibGUiLCAic2hhZG93SG9zdE5vZGUiLCAic29ydEJ5T3JkZXIiLCAicmVndWxhclRhYmJhYmxlcyIsICJvcmRlcmVkVGFiYmFibGVzIiwgImZvckVhY2giLCAiY2FuZGlkYXRlVGFiaW5kZXgiLCAic29ydCIsICJyZWR1Y2UiLCAiYWNjIiwgInNvcnRhYmxlIiwgImNvbmNhdCIsICJ0YWJiYWJsZSIsICJiaW5kIiwgImZvY3VzYWJsZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiZXVpQnV0dG9uQ29sb3IiLCAidGludE9yU2hhZGUiLCAiY29sb3IiLCAiZXVpQnV0dG9uRmlsbENvbG9yIiwgImdldEZvcmVncm91bmRDb2xvciIsICJiYWNrZ3JvdW5kIiwgImV1aUJ1dHRvbkVtcHR5Q29sb3IiLCAidXNlRXVpQnV0dG9uQ29sb3JDU1MiLCAiZXVpQnV0dG9uRGlzcGxheXNDb2xvcnMiLCAiQ09MT1JTIiwgInVzZUV1aUJ1dHRvbkZvY3VzQ1NTIiwgImV1aUJ1dHRvbkZvY3VzQ1NTIiwgIl9yZWYiLCAiZXVpQnV0dG9uU2l6ZU1hcCIsICJfcmVmMiIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiZ2V0U2hhZG93Q29sb3IiLCAiZXVpU2hhZG93WFNtYWxsIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpU2hhZG93U21hbGwiLCAiX3JlZjMiLCAiX3JlZjQiLCAiZXVpU2hhZG93TWVkaXVtIiwgIl9yZWY1IiwgIl9yZWY2IiwgInByb3BlcnR5IiwgImV1aVNoYWRvd0xhcmdlIiwgIl9yZWY3IiwgIl9yZWY4IiwgImV1aVNoYWRvd1hMYXJnZSIsICJfcmVmOSIsICJfcmVmMTAiLCAicmV2ZXJzZSIsICJldWlTaGFkb3dGbGF0IiwgIl9yZWYxMyIsICJfcmVmMTQiLCAiZXVpU2hhZG93IiwgInNpemUiLCAiX3JlZjE1IiwgImV1aUJ1dHRvbkJhc2VDU1MiLCAiZXVpQnV0dG9uRGlzcGxheVN0eWxlcyIsICJfYnV0dG9uU2l6ZSIsICJzaXplIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BY2Nlc3NpYmlsaXR5IiwgIl9yZWYiLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BZ2dyZWdhdGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQWxlcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQW5hbHl6ZUV2ZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFuYWx5emVFdmVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Bbm5vdGF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFub21hbHlDaGFydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Bbm9tYWx5U3dpbUxhbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBtVHJhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQWRkRGF0YSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBZHZhbmNlZFNldHRpbmdzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFnZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFwbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBcHBTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQXVkaXRiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENhbnZhcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDYXNlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDb2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENvbnNvbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRGFzaGJvYXJkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcERldnRvb2xzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcERpc2NvdmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEVtcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBGaWxlYmVhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBGbGVldCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBHaXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwR3JhcGgiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwR3JvayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBIZWFydGJlYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEluZGV4UGF0dGVybiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBJbmRleFJvbGx1cCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBMZW5zIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcExvZ3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWFuYWdlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBNZXRyaWNiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE1ldHJpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTW9uaXRvcmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBOb3RlYm9vayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBQYWNrZXRiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFBpcGVsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFJlY2VudGx5Vmlld2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFJlcG9ydGluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTYXZlZE9iamVjdHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VjdXJpdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VjdXJpdHlBbmFseXRpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU3BhY2VzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNxbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBUaW1lbGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFVwdGltZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBVc2Vyc1JvbGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFZpc3VhbGl6ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBWdWxuZXJhYmlsaXR5TWFuYWdlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBXYXRjaGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93RW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93U3RhcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dEb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJ0aWNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Bc3RlcmlzayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CZWFrZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmVsbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CZWxsU2xhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmV0YSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Cb2x0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJveGVzSG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Cb3hlc1ZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJyYW5jaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CcmFuY2hVc2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJyb29tIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJydXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJ1ZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CdWxsc2V5ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DYWxlbmRhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DaGFuZ2VQb2ludERldGVjdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DaGVjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DaGVja0luQ2lyY2xlRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNoZWVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsaWNrTGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbGlja1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb2NrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb2NrQ291bnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbG91ZERyaXp6bGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvdWRTdG9ybXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvdWRTdW5ueSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbHVzdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbXB1dGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29uc29sZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250YWluZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGludWl0eUFib3ZlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlBYm92ZUJlbG93IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlCZWxvdyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250aW51aXR5V2l0aGluIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRyb2xzSG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250cm9sc1ZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvcHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29weUNsaXBib2FyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zc0luQ2lyY2xlIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3NJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zc2hhaXJzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkN1cnJlbmN5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkN1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25EYXRhYmFzZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25EZXNrdG9wIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRpZmYiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRGlzY3VzcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudEVkaXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG9jdW1lbnRhdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG90IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvdEluQ2lyY2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvdWJsZUFycm93TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb3VibGVBcnJvd1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvd25sb2FkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25Cb3R0b20iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JBbGlnbkNlbnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JBbGlnbkxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQWxpZ25SaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JCb2xkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckNoZWNrbGlzdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JDb2RlQmxvY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQ29tbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JIZWFkaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0YWxpYyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JMaW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclJlZG8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yU3RyaWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclRhYmxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclVuZGVybGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JVbmRvIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclVub3JkZXJlZExpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW1haWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW5kcG9pbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVyYXNlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FcnJvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FcnJvckZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Fc3FsVmlzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4aXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXhwYW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4cGFuZE1pbmkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXhwb3J0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV5ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeWVDbG9zZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmFjZUhhcHB5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZhY2VOZXV0cmFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZhY2VTYWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmllbGRTdGF0aXN0aWNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZpbHRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GaWx0ZXJFeGNsdWRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZpbHRlcklnbm9yZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GaWx0ZXJJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GaWx0ZXJJbmNsdWRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZsYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Gb2xkZXJDaGVjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Gb2xkZXJDbG9zZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyRXhjbGFtYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyT3BlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GcmFtZU5leHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnJhbWVQcmV2aW91cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GdWxsU2NyZWVuRXhpdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GdWxsU2NyZWVuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZ1bmN0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdlYXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR2xhc3NlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HbG9iZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HcmFiIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdyYWJPbW5pZGlyZWN0aW9uYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JhYkhvcml6b250YWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JhZGllbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JpZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25IZWFydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25IZWF0bWFwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkhlbHAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSG9tZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW1hZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW1wb3J0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4VGVtcG9yYXJ5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4Q2xvc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhFZGl0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4Rmx1c2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhNYXBwaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4T3BlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleFJ1bnRpbWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhTZXR0aW5ncyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmZpbml0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbnB1dE91dHB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbnNwZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkludmVydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Jc3N1ZSIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktleSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LZXlib2FyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxGaWVsZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxGdW5jdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxPcGVyYW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbFNlbGVjdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbFZhbHVlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkt1YmVybmV0ZXNOb2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkt1YmVybmV0ZXNQb2QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGF1bmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxheWVycyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MZXR0ZXJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGluZURhc2hlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5lRG90dGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpbmVTb2xpZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGlzdEFkZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2NrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvY2tPcGVuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ1BhdHRlcm5BbmFseXNpcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dSYXRlQW5hbHlzaXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0Flcm9zcGlrZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXBhY2hlIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0FwcFNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXdzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Bd3NNb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BenVyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXp1cmVNb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29CZWF0cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQnVzaW5lc3NBbmFseXRpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0NlcGgiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0Nsb3VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29DbG91ZEVjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ29kZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ29kZXNhbmRib3giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0NvdWNoYmFzZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRG9ja2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Ecm9wd2l6YXJkIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0VsYXN0aWMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0VsYXN0aWNTdGFjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRW50ZXJwcmlzZVNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRXRjZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR2NwIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0djcE1vbm8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0dpdGh1YiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR21haWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0dvbGFuZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR29vZ2xlRyIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29IYXByb3h5IiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0libSIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29JYm1Nb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29LYWZrYSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvS2liYW5hIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29LdWJlcm5ldGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Mb2dnaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Mb2dzdGFzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTWFwcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTWVtY2FjaGVkIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb01ldHJpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb01vbmdvZGIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb015c3FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29OZ2lueCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvT3NxdWVyeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUGhwIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1Bvc3RncmVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Qcm9tZXRoZXVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29SYWJiaXRtcSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUmVkaXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1NlY3VyaXR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29TaXRlU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Ta2V0Y2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1NsYWNrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29VcHRpbWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1Z1bG5lcmFiaWxpdHlNYW5hZ2VtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29XZWJob29rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29XaW5kb3dzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hGaWx0ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hJZiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaElucHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoT3V0cHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoUXVldWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmlmeVdpdGhNaW51cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NYWduaWZ5V2l0aFBsdXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFwTWFya2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbW9yeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVEb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVyZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWluaW1pemUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWludXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWludXNJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NaW51c0luQ2lyY2xlRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbnVzSW5TcXVhcmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENyZWF0ZUFkdmFuY2VkSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ3JlYXRlTXVsdGlNZXRyaWNKb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ3JlYXRlU2luZ2xlTWV0cmljSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxPdXRsaWVyRGV0ZWN0aW9uSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sUmVncmVzc2lvbkpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Nb2JpbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTW9vbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Nb3ZlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk5hbWVzcGFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25OZXN0ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTmV3Q2hhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ob2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk51bWJlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25PZmZsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk9ubGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYWNrYWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhZ2VTZWxlY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFnZXNTZWxlY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFpbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFsZXR0ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXBlckNsaXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFydGlhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXVzZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXltZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBlbmNpbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QZXJjZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBpbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QaW5GaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGlwZUJyZWFrcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QaXBlTm9CcmVha3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGl2b3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGxheSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbGF5RmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsdXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGx1c0luQ2lyY2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbHVzSW5TcXVhcmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUG9wb3V0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblB1c2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUXVlc3Rpb25JbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25RdW90ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25SZWZyZXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblJlcG9ydGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblJldHVybktleSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TYXZlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNjYWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWN1cml0eVNpZ25hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2Vzc2lvblZpZXdlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TaGFyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TaGFyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TaW5nbGVNZXRyaWNWaWV3ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU25vd2ZsYWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRBc2NlbmRpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydERlc2NlbmRpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydExlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydFJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnREb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRVcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0YWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TcGFjZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3BhcmtsZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhclBsdXNFbXB0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyUGx1c0ZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckVtcHR5U3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRmlsbGVkU3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3Rhck1pbnVzRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3Rhck1pbnVzRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXRzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0b3AiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcEZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdG9wU2xhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcmFnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdHJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3VibW9kdWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN1biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Td2F0Y2hJbnB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TeW1saW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlT2ZDb250ZW50cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGVhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UZW1wZXJhdHVyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lUmVmcmVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lbGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lbGluZVdpdGhBcnJvdyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lc2xpZGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQWxpYXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Bbm5vdGF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQXJyYXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5CaW5hcnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Cb29sZWFuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQ2xhc3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQ29uc3RhbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5EYXRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRGltZW5zaW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRWxlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkVudW0iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FbnVtTWVtYmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRXZlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FeGNlcHRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GaWVsZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkZpbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GbGF0dGVuZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GdW5jdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkdlbyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkhpc3RvZ3JhbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbklQIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuSW50ZXJmYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuSm9pbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbktleSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbktleXdvcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5NZXRob2QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5NZXRyaWNDb3VudGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTWV0cmljR2F1Z2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Nb2R1bGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OYW1lc3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OZXN0ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OdWxsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTnVtYmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuT2JqZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuT3BlcmF0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5QYWNrYWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUGFyYW1ldGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUGVyY29sYXRvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblByb3BlcnR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUmFuZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5SYW5rRmVhdHVyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblJhbmtGZWF0dXJlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblJlcG8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TZWFyY2hUeXBlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU2VtYW50aWNUZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU2hhcGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TdHJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TdHJ1Y3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TeW1ib2wiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5UYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5UZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVG9rZW5Db3VudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblZhcmlhYmxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVmVjdG9yRGVuc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5WZWN0b3JTcGFyc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhaW5pbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhbnNpdGlvbkxlZnRJbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UcmFuc2l0aW9uTGVmdE91dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UcmFuc2l0aW9uVG9wSW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhbnNpdGlvblRvcE91dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UcmFzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25VbmZvbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVW5saW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVzZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVXNlckF2YXRhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Vc2VycyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WZWN0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlkZW9QbGF5ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQXJlYSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNBcmVhU3RhY2tlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0Jhckhvcml6b250YWxTdGFja2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0JhclZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNHYXVnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNHb2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0xpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTWFwQ29vcmRpbmF0ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNNYXBSZWdpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTWV0cmljIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1BpZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUYWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUYWdDbG91ZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1RpbWVsaW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1ZlZ2EiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVmlzdWFsQnVpbGRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25XYXJuaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbldhcm5pbmdGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV29yZFdyYXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV29yZFdyYXBEaXNhYmxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25XcmVuY2giLCAiX3JlZiIsICJpY29uIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgImV1aUljb25TdHlsZXMiLCAiX3JlZjMiLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAidCIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiZ2V0SXNBcHBJY29uIiwgImljb24iLCAiRXVpSWNvbkNsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3JlZiIsICJpY29uIiwgIl9pbmhlcml0cyIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJfb2JqZWN0U3ByZWFkIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkV1aUNvbnRleHQiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAibyIsICJ2YWx1ZSIsICJpc0Jvb2xlYW4iLCAiaXNTdHJpbmciLCAiaXNOdW1iZXIiLCAiaXNVbmRlZmluZWQiLCAiY2hhciIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAidG9rZW4iLCAicmVuZGVyIiwgIkNvbXBvbmVudCIsICJSZWFjdCIsICJFdWlJMThuIiwgIl9yZWYiLCAiX3JlZjIiLCAidXNlTG9hZGluZ0FyaWFMYWJlbCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiZXVpU3Bpbm5lckJvcmRlckNvbG9yc0NTUyIsICJfcmVmIiwgImNvbG9ycyIsICJib3JkZXIiLCAiZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlMb2FkaW5nU3Bpbm5lciIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJfb2JqZWN0U3ByZWFkIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJldWlCdXR0b25EaXNwbGF5Q29udGVudFN0eWxlcyIsICJfcmVmIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQnV0dG9uRGlzcGxheUNvbnRlbnQiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJpY29uIiwgIl9leHRlbmRzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIlVSTCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAiX3JlZjIiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUJ1dHRvbiIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlCdXR0b25FbXB0eVN0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUJ1dHRvbkVtcHR5IiwgIl9yZWYiLCAic2l6ZSIsICJmbHVzaCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIl9vYmplY3RTcHJlYWQiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aUJ1dHRvbkljb25TdHlsZXMiLCAiX2VtcHR5SG92ZXJTdHlsZXMiLCAic3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQnV0dG9uSWNvbiIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJub2RlIiwgIkV1aUlubmVyVGV4dCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJldWlGb3JtTWF4V2lkdGgiLCAiX3JlZiIsICJldWlGb3JtVmFyaWFibGVzIiwgImlzQ29sb3JEYXJrIiwgImNvbG9ycyIsICJkYXJrZW4iLCAiZXVpRm9ybUNvbnRyb2xTdHlsZXMiLCAiZXVpRm9ybUNvbnRyb2xUZXh0IiwgImV1aUZvcm1Db250cm9sRGVmYXVsdFNoYWRvdyIsICJfcmVmMiIsICJib3JkZXIiLCAiZXVpRm9ybUNvbnRyb2xGb2N1c1N0eWxlcyIsICJfcmVmMyIsICJldWlGb3JtQ29udHJvbEludmFsaWRTdHlsZXMiLCAiX3JlZjQiLCAiZXVpRm9ybUNvbnRyb2xEaXNhYmxlZFN0eWxlcyIsICJldWlGb3JtQ29udHJvbFJlYWRPbmx5U3R5bGVzIiwgImV1aUZvcm1Db250cm9sQXV0b0ZpbGxTdHlsZXMiLCAiYm9yZGVyU2hhZG93IiwgImV1aVBsYWNlaG9sZGVyUGVyQnJvd3NlciIsICJldWlGb3JtQ3VzdG9tQ29udHJvbFZhcmlhYmxlcyIsICJhbmltYXRpb24iLCAiZXVpRm9ybUN1c3RvbUNvbnRyb2xTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpT2JzZXJ2ZXIiLCAicmVuZGVyIiwgIl90eXBlb2YiLCAibyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1ByaW1pdGl2ZSIsICJFdWlSZXNpemVPYnNlcnZlciIsICJfcmVmIiwgIl9yZWYyIiwgIm1ha2VSZXNpemVPYnNlcnZlciIsICJub2RlIiwgInVzZVJlc2l6ZU9ic2VydmVyIiwgInNpemUiLCAiX3JlZjMiLCAiX3JlZjQiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdF9kb20iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aUNvbXBvbmVudERlZmF1bHRzUHJvdmlkZXIiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAidXNlQ29tcG9uZW50RGVmYXVsdHMiLCAidXNlUHJvcHNXaXRoQ29tcG9uZW50RGVmYXVsdHMiLCAiX3R5cGVvZiIsICJvIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpUG9ydGFsIiwgIlByb3BUeXBlcyIsICJFdWlQb3J0YWxDbGFzcyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfaW5oZXJpdHMiLCAiX2NyZWF0ZUNsYXNzIiwgInBvc2l0aW9uIiwgInJlbmRlciIsICJfZGVmaW5lUHJvcGVydHkiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGVtcGxhdGVPYmplY3QyIiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpVG9vbFRpcEJhY2tncm91bmRDb2xvciIsICJldWlUb29sVGlwQm9yZGVyQ29sb3IiLCAiZXVpVG9vbFRpcEFuaW1hdGlvblZlcnRpY2FsIiwgInNpemUiLCAiZXVpVG9vbFRpcEFuaW1hdGlvbkhvcml6b250YWwiLCAiZXVpVG9vbFRpcFN0eWxlcyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgImV1aVRvb2xUaXBBbmNob3JTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUb29sVGlwUG9wb3ZlciIsICJfcmVmIiwgInN0eWxlcyIsICJzZXRQb3BvdmVyUmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJvbkZvY3VzIiwgIm9uQmx1ciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVG9vbFRpcEFycm93IiwgIl9yZWYiLCAicG9zaXRpb24iLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJpbWl0aXZlIiwgIlRvb2xUaXBNYW5hZ2VyIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpVG9vbFRpcCIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfZGVmaW5lUHJvcGVydHkiLCAicG9zaXRpb24iLCAiX2luaGVyaXRzIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGlwIiwgIl9yZWYiLCAic2l6ZSIsICJwb3NpdGlvbiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aVRleHRDb2xvclN0eWxlcyIsICJfcmVmMiIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJfaXNOYW1lZENvbG9yIiwgIkV1aVRleHRDb2xvciIsICJfcmVmIiwgIkNvbXBvbmVudCIsICJjbG9uZUVsZW1lbnQiLCAiaXNOYW1lZENvbG9yIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGV4dEFsaWduIiwgIl9yZWYiLCAiQ29tcG9uZW50IiwgImNsb25lRWxlbWVudCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9vYmplY3RTcHJlYWQiLCAiUHJvcFR5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgImV1aUxpbmtDU1MiLCAiX3JlZiIsICJldWlMaW5rU3R5bGVzIiwgIl9jb2xvckNTUyIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlUaXRsZSIsICJfcmVmIiwgImV1aVRpdGxlU3R5bGVzIiwgImV1aVRleHQiLCAiZXVpU2NhbGVUZXh0IiwgImV1aVRleHRTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUZXh0IiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIkNvbXBvbmVudCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImNhbmNlbEZyYW1lIiwgImFuaW1hdGlvbiIsICJjc3MiLCAiX3R5cGVvZiIsICJvIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfdG9QcmltaXRpdmUiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJFdWlBdXRvU2l6ZXIiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAibyIsICJwYXJzZUNvbG9yIiwgInJnYiIsICJjaHJvbWFWYWxpZCIsICJfdHlwZW9mIiwgIl90eXBlb2YiLCAibyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgImV1aUJhZGdlQ29sb3JzIiwgImdldEJhZGdlQ29sb3JzIiwgImdldFRleHRDb2xvciIsICJfcmVmIiwgImdldENvbG9yQ29udHJhc3QiLCAiZ2V0SXNWYWxpZENvbG9yIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpQmFkZ2VTdHlsZXMiLCAic2V0QmFkZ2VDb2xvclZhcnMiLCAiY29sb3JzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiQ09MT1JTIiwgIkV1aUJhZGdlIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJpc05hbWVkQ29sb3IiLCAiX29iamVjdFNwcmVhZCIsICJzdHlsZXMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgImNsYXNzTmFtZXMiLCAiRWxlbWVudCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiZXVpQmV0YUJhZGdlU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUJldGFCYWRnZSIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJpY29uIiwgIkVsZW1lbnQiLCAiX2V4dGVuZHMiLCAiX3R5cGVvZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImljb25TdHlsZSIsICJfcmVmIiwgIkV1aUV4dGVybmFsTGlua0ljb24iLCAiX3JlZjIiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJfb2JqZWN0U3ByZWFkIiwgImNsYXNzTmFtZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX19hc3NpZ24iLCAiZnJvbSIsICJSZWFjdCIsICJSZWFjdCIsICJSZWFjdCIsICJ2YWx1ZSIsICJpbXBvcnRfcmVhY3QiLCAidmFsdWUiLCAiUmVhY3QiLCAiX19hc3NpZ24iLCAiX19yZXN0IiwgImRlZmF1bHRzIiwgIm1pZGRsZXdhcmUiLCAiY2JzIiwgImZpbHRlciIsICJfX2Fzc2lnbiIsICJSZWFjdCIsICJfX3Jlc3QiLCAiX19hc3NpZ24iLCAiU2lkZUNhciIsICJSZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJSZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJJbkZvY3VzR3VhcmQiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiX3JlZiIsICJpbXBvcnRfcmVhY3QiLCAiX2V4dGVuZHMyIiwgIlNpZGVDYXIiLCAiX3JlZiIsICJjYXB0dXJlRm9jdXNSZXN0b3JlIiwgIm9uRm9jdXMiLCAib25CbHVyIiwgImV4dHJhY3RSZWYiLCAiZWZmZWN0Q2FyIiwgIlNpZGVDYXIiLCAiZWZmZWN0Q2FyIiwgIlJlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJ0IiwgImUiLCAiX3NldFByb3RvdHlwZU9mIiwgIl90eXBlb2YiLCAibyIsICJfdHlwZW9mIiwgIl90eXBlb2YiLCAiX2RlZmluZVByb3BlcnR5IiwgImltcG9ydF9yZWFjdCIsICJyZWR1Y2VQcm9wc1RvU3RhdGUiLCAiaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCIsICJTaWRlRWZmZWN0IiwgInBlZWsiLCAicmVuZGVyIiwgIlJlYWN0IiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJ0b0FycmF5IiwgImFzQXJyYXkiLCAibm9kZSIsICJjYWNoZSIsICJub2RlIiwgInRvQXJyYXkiLCAidG9BcnJheSIsICJub2RlIiwgInRvQXJyYXkiLCAibm9kZSIsICJjYWNoZSIsICJwb3NpdGlvbiIsICJub2RlIiwgImFzQXJyYXkiLCAidG9BcnJheSIsICJ0b0FycmF5IiwgIm5vZGUiLCAidG9BcnJheSIsICJub2RlIiwgIm5vZGUiLCAibm9kZSIsICJub2RlIiwgIm5vZGUiLCAiYXNBcnJheSIsICJub2RlIiwgImFzQXJyYXkiLCAibm9kZSIsICJmb2N1c2FibGUiLCAidmFsdWUiLCAibGluZSIsICJmb2N1c2FibGUiLCAiYXNBcnJheSIsICJub2RlIiwgIm5leHQiLCAicHJldiIsICJmb2N1c09uQm9keSIsICJpc0ZyZWVGb2N1cyIsICJ0cnlSZXN0b3JlRm9jdXMiLCAiZGVmYXVsdFdoaXRlbGlzdCIsICJmb2N1c1doaXRlbGlzdGVkIiwgInJlY29yZFBvcnRhbCIsICJmb2N1c0lzUG9ydGFsZWRQYWlyIiwgImZvY3VzV2FzT3V0c2lkZSIsICJjaGVja0luSG9zdCIsICJ3aXRoaW5Ib3N0IiwgImdldE5vZGVGb2N1c2FibGVzIiwgImlzTm90Rm9jdXNhYmxlIiwgIm5vZGUiLCAiYWN0aXZhdGVUcmFwIiwgInNob3VsZEZvcmNlUmVzdG9yZUZvY3VzIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAib25UcmFwIiwgIm9uQmx1ciIsICJvbkZvY3VzIiwgIkZvY3VzV2F0Y2hlciIsICJGb2N1c1RyYXAiLCAiX3JlZjUiLCAiUHJvcFR5cGVzIiwgIm9uV2luZG93Rm9jdXMiLCAib25XaW5kb3dCbHVyIiwgImF0dGFjaEhhbmRsZXIiLCAiZGV0YWNoSGFuZGxlciIsICJfcmVmNiIsICJfcmVmNyIsICJSZWFjdCIsICJSZWFjdCIsICJSZWFjdCIsICJjc3MiLCAic2hlZXQiLCAic3R5bGVzIiwgInN0eWxlcyIsICJwYXJzZSIsICJub2RlIiwgInN0eWxlcyIsICJwb3NpdGlvbiIsICJleHRyYWN0UmVmIiwgIlN0eWxlIiwgIm5vZGUiLCAic2lkZWNhcl9kZWZhdWx0IiwgIlJlYWN0IiwgIm5vZGUiLCAiUmVhY3QiLCAiU3R5bGUiLCAiaW1wb3J0X3JlYWN0IiwgImV4dHJhY3RSZWYiLCAibm9kZSIsICJzaWRlY2FyX2RlZmF1bHQiLCAiZWZmZWN0Q2FyIiwgInNpZGVjYXJfZGVmYXVsdCIsICJGb2N1c09uIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiRXVpRm9jdXNUcmFwIiwgIlByb3BUeXBlcyIsICJFdWlGb2N1c1RyYXBDbGFzcyIsICJub2RlIiwgInJlbmRlciIsICJGb2N1c09uIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiRXVpTXV0YXRpb25PYnNlcnZlciIsICJtYWtlTXV0YXRpb25PYnNlcnZlciIsICJub2RlIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl90b1ByaW1pdGl2ZSIsICJFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciIsICJyZW5kZXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJldWlQb3BvdmVyQXJyb3dTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQb3BvdmVyQXJyb3ciLCAiX3JlZiIsICJwb3NpdGlvbiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiZXVpUG9wb3ZlclN0eWxlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpUGFuZWxTdHlsZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQYW5lbCIsICJfcmVmIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aVBvcG92ZXJQYW5lbFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBvcG92ZXJQYW5lbCIsICJfcmVmIiwgInBvc2l0aW9uIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX3RvUHJpbWl0aXZlIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfcmVmIiwgIl9yZWYyIiwgIl9zbGljZWRUb0FycmF5IiwgIl9yZWYzIiwgIl9yZWY0IiwgIkV1aVBvcG92ZXIiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9jYWxsU3VwZXIiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfcmVmNSIsICJkdXJhdGlvbk1hdGNoIiwgImRlbGF5TWF0Y2giLCAiX3JlZjYiLCAicG9zaXRpb24iLCAiX29iamVjdFNwcmVhZCIsICJub2RlIiwgIl9pbmhlcml0cyIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiaW5pdGlhbEZvY3VzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSW5wdXRQb3BvdmVyIiwgIl9yZWYiLCAiY2xhc3NuYW1lcyIsICJjbG9zZVBvcG92ZXJPblNjcm9sbCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpU3BhY2VyU3R5bGVzIiwgIl9yZWYyIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU3BhY2VyIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUaXRsZSIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpQ2FyZFNlbGVjdFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUNhcmRTZWxlY3QiLCAiX3JlZiIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgIl9yZWY1IiwgIl9yZWY2IiwgImV1aUNhcmRTdHlsZXMiLCAiX3JlZiIsICJldWlDYXJkVGV4dFN0eWxlcyIsICJldWlDYXJkQmV0YUJhZGdlU3R5bGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlDYXJkIiwgIl9yZWYiLCAiaWNvbiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJvdXRlck9uQ2xpY2siLCAiY2xhc3NOYW1lcyIsICJpY29uU3R5bGVzIiwgIl9leGNsdWRlZDIiLCAiX2V4dGVuZHMiLCAiX29iamVjdFNwcmVhZCIsICJSZWFjdCIsICJub2RlIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlDaGVja2JveFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUNoZWNrYm94IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAibGFiZWxTdHlsZXMiLCAiaWNvblN0eWxlcyIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJldWlGb3JtTGFiZWwiLCAiZXVpRm9ybUxhYmVsU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgIl9yZWY1IiwgIl9yZWY2IiwgIl9yZWY3IiwgIl9yZWY4IiwgIl9yZWY5IiwgIl9yZWYxMCIsICJfcmVmMTEiLCAiX3JlZjEyIiwgIl9yZWYxMyIsICJfcmVmMTQiLCAiX3JlZjE1IiwgIl9yZWYxNiIsICJfcmVmMTciLCAiZXVpRmxleEdyb3VwU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRmxleEdyb3VwSW50ZXJuYWwiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIkNvbXBvbmVudCIsICJfZXh0ZW5kcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGbGV4SXRlbUludGVybmFsIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJDb21wb25lbnQiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiRXVpVmFsaWRhdGFibGVDb250cm9sIiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgInVzZVNldENvbnRyb2xWYWxpZGl0eSIsICJfcmVmMyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUxhYmVsIiwgIl9yZWYiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvblN0eWxlcyIsICJfcmVmIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiIsICJfcmVmIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiaWNvblN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uIiwgIl9yZWYiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlGb3JtQ29udHJvbExheW91dEljb25zU3R5bGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX3RvUHJpbWl0aXZlIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJpc0ljb25TaGFwZSIsICJpY29uIiwgIkV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9jYWxsU3VwZXIiLCAiX2luaGVyaXRzIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAic3R5bGVzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiaXNSaWdodFNpZGVJY29uIiwgImljb24iLCAiZ2V0SWNvbkFmZm9yZGFuY2VTdHlsZXMiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgImV1aUZvcm1Db250cm9sTGF5b3V0U3R5bGVzIiwgImV1aUZvcm1Db250cm9sTGF5b3V0U2lkZU5vZGVTdHlsZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtQ29udHJvbExheW91dCIsICJpY29uIiwgImFwcGVuZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRTaWRlTm9kZXMiLCAiX3JlZiIsICJSZWFjdCIsICJub2RlIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlGaWVsZFNlYXJjaFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX3R5cGVvZiIsICJvIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aUZpZWxkU2VhcmNoQ2xhc3MiLCAib25TZWFyY2giLCAib25DaGFuZ2UiLCAicmVuZGVyIiwgIl9yZWYiLCAiYXBwZW5kIiwgInZhbHVlIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpRm9ybUVycm9yVGV4dFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZvcm1FcnJvclRleHQiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aUZvcm1IZWxwVGV4dFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZvcm1IZWxwVGV4dCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpRm9ybVJvd1N0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfbm9uSXRlcmFibGVSZXN0IiwgInIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZvcm1Sb3ciLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9zbGljZWRUb0FycmF5IiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgImhlbHBUZXh0IiwgImVycm9yIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfcmVmMiIsICJFbGVtZW50IiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpSG9yaXpvbnRhbFJ1bGVTdHlsZXMiLCAiX3JlZiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUhvcml6b250YWxSdWxlIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiX3JlZjYiLCAiZXVpQ29udGV4dE1lbnVJdGVtU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ29udGV4dE1lbnVJdGVtIiwgIl9yZWYiLCAiaWNvbiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUmVhY3QiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImV1aUNvbnRleHRNZW51VmFyaWFibGVzIiwgIl9yZWYiLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90ZW1wbGF0ZU9iamVjdDIiLCAiX3RlbXBsYXRlT2JqZWN0MyIsICJfdGVtcGxhdGVPYmplY3Q0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiZXVpQ29udGV4dE1lbnVQYW5lbFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX3R5cGVvZiIsICJvIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aUNvbnRleHRNZW51UGFuZWxDbGFzcyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NhbGxTdXBlciIsICJfZGVmaW5lUHJvcGVydHkiLCAibm9kZSIsICJfaW5oZXJpdHMiLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlTd2l0Y2hWYXJzIiwgImNvbG9ycyIsICJhbmltYXRpb24iLCAiX3JlZjIiLCAiX3JlZjMiLCAiZXVpU3dpdGNoU3R5bGVzIiwgImJ1dHRvblN0eWxlcyIsICJfcmVmIiwgImJvZHlTdHlsZXMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiX2NhbGN1bGF0ZURpc2FibGVkQ29sb3IiLCAiaWNvblN0eWxlcyIsICJfcmVmNiIsICJfcmVmNyIsICJ0aHVtYlN0eWxlcyIsICJfcmVmOCIsICJfY2FsY3VsYXRlU2NhbGUiLCAic2l6ZSIsICJfY2FsY3VsYXRlTGVmdCIsICJsYWJlbFN0eWxlcyIsICJfcmVmOSIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVN3aXRjaCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAic2l6ZSIsICJzdHlsZXMiLCAiYnV0dG9uU3R5bGVzIiwgImJvZHlTdHlsZXMiLCAidGh1bWJTdHlsZXMiLCAibGFiZWxTdHlsZXMiLCAiUHJvcFR5cGVzIiwgIl9jcmVhdGVFbW90aW9uIiwgImN4IiwgIm1lcmdlIiwgImdldFJlZ2lzdGVyZWRTdHlsZXMiLCAia2V5ZnJhbWVzIiwgImNzcyIsICJjYWNoZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiZXVpT3ZlcmxheU1hc2tTdHlsZXMiLCAiX3JlZiIsICJjc3MiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX2V4Y2x1ZGVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJyIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlPdmVybGF5TWFzayIsICJfcmVmIiwgInN0eWxlcyIsICJjeCIsICJQcm9wVHlwZXMiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ2YWx1ZSIsICJpc0VxdWFsIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImhhc05hdGl2ZVBlcmZvcm1hbmNlTm93IiwgInBlcmZvcm1hbmNlIiwgIm5vdyIsICJEYXRlIiwgImNhbmNlbFRpbWVvdXQiLCAidGltZW91dElEIiwgImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwgImlkIiwgInJlcXVlc3RUaW1lb3V0IiwgImNhbGxiYWNrIiwgImRlbGF5IiwgInN0YXJ0IiwgInRpY2siLCAiY2FsbCIsICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAic2l6ZSIsICJnZXRTY3JvbGxiYXJTaXplIiwgInJlY2FsY3VsYXRlIiwgImRpdiIsICJkb2N1bWVudCIsICJjcmVhdGVFbGVtZW50IiwgInN0eWxlIiwgIndpZHRoIiwgImhlaWdodCIsICJvdmVyZmxvdyIsICJib2R5IiwgImFwcGVuZENoaWxkIiwgIm9mZnNldFdpZHRoIiwgImNsaWVudFdpZHRoIiwgInJlbW92ZUNoaWxkIiwgImNhY2hlZFJUTFJlc3VsdCIsICJnZXRSVExPZmZzZXRUeXBlIiwgIm91dGVyRGl2IiwgIm91dGVyU3R5bGUiLCAiZGlyZWN0aW9uIiwgImlubmVyRGl2IiwgImlubmVyU3R5bGUiLCAic2Nyb2xsTGVmdCIsICJkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQiLCAiZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQiLCAiZGV2V2FybmluZ3NUYWdOYW1lIiwgInByb2Nlc3MiLCAid2luZG93IiwgIldlYWtTZXQiLCAiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMIiwgImRlZmF1bHRJdGVtS2V5IiwgImluZGV4IiwgImRhdGEiLCAiZGV2V2FybmluZ3NEaXJlY3Rpb24iLCAiZGV2V2FybmluZ3NUYWdOYW1lIiwgInByb2Nlc3MiLCAid2luZG93IiwgIldlYWtTZXQiLCAiY3JlYXRlTGlzdENvbXBvbmVudCIsICJfcmVmIiwgImdldEl0ZW1PZmZzZXQiLCAiZ2V0RXN0aW1hdGVkVG90YWxTaXplIiwgImdldEl0ZW1TaXplIiwgImdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50IiwgImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCAiZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsICJpbml0SW5zdGFuY2VQcm9wcyIsICJzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlIiwgInZhbGlkYXRlUHJvcHMiLCAicHJvcHMiLCAiX2luc3RhbmNlUHJvcHMiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfb3V0ZXJSZWYiLCAiX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQiLCAic3RhdGUiLCAiaW5zdGFuY2UiLCAiaXNTY3JvbGxpbmciLCAic2Nyb2xsRGlyZWN0aW9uIiwgInNjcm9sbE9mZnNldCIsICJpbml0aWFsU2Nyb2xsT2Zmc2V0IiwgInNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsICJfY2FsbE9uSXRlbXNSZW5kZXJlZCIsICJtZW1vaXplT25lIiwgIm92ZXJzY2FuU3RhcnRJbmRleCIsICJvdmVyc2NhblN0b3BJbmRleCIsICJ2aXNpYmxlU3RhcnRJbmRleCIsICJ2aXNpYmxlU3RvcEluZGV4IiwgIm9uSXRlbXNSZW5kZXJlZCIsICJfY2FsbE9uU2Nyb2xsIiwgIm9uU2Nyb2xsIiwgIl9nZXRJdGVtU3R5bGUiLCAiZGlyZWN0aW9uIiwgIml0ZW1TaXplIiwgImxheW91dCIsICJpdGVtU3R5bGVDYWNoZSIsICJfZ2V0SXRlbVN0eWxlQ2FjaGUiLCAic3R5bGUiLCAiaGFzT3duUHJvcGVydHkiLCAib2Zmc2V0IiwgInNpemUiLCAiaXNIb3Jpem9udGFsIiwgImlzUnRsIiwgIm9mZnNldEhvcml6b250YWwiLCAicG9zaXRpb24iLCAibGVmdCIsICJ1bmRlZmluZWQiLCAicmlnaHQiLCAidG9wIiwgImhlaWdodCIsICJ3aWR0aCIsICJfIiwgIl9fIiwgIl9fXyIsICJfb25TY3JvbGxIb3Jpem9udGFsIiwgImV2ZW50IiwgImN1cnJlbnRUYXJnZXQiLCAiY2xpZW50V2lkdGgiLCAic2Nyb2xsTGVmdCIsICJzY3JvbGxXaWR0aCIsICJzZXRTdGF0ZSIsICJwcmV2U3RhdGUiLCAiZ2V0UlRMT2Zmc2V0VHlwZSIsICJNYXRoIiwgIm1heCIsICJtaW4iLCAiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCAiX29uU2Nyb2xsVmVydGljYWwiLCAiY2xpZW50SGVpZ2h0IiwgInNjcm9sbEhlaWdodCIsICJzY3JvbGxUb3AiLCAiX291dGVyUmVmU2V0dGVyIiwgInJlZiIsICJvdXRlclJlZiIsICJjdXJyZW50IiwgImNhbmNlbFRpbWVvdXQiLCAicmVxdWVzdFRpbWVvdXQiLCAiX3Jlc2V0SXNTY3JvbGxpbmciLCAiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwgIm5leHRQcm9wcyIsICJ2YWxpZGF0ZVNoYXJlZFByb3BzIiwgInNjcm9sbFRvIiwgInNjcm9sbFRvSXRlbSIsICJhbGlnbiIsICJpdGVtQ291bnQiLCAic2Nyb2xsYmFyU2l6ZSIsICJnZXRTY3JvbGxiYXJTaXplIiwgImNvbXBvbmVudERpZE1vdW50IiwgIl9jYWxsUHJvcHNDYWxsYmFja3MiLCAiY29tcG9uZW50RGlkVXBkYXRlIiwgImNvbXBvbmVudFdpbGxVbm1vdW50IiwgInJlbmRlciIsICJjaGlsZHJlbiIsICJjbGFzc05hbWUiLCAiaW5uZXJSZWYiLCAiaW5uZXJFbGVtZW50VHlwZSIsICJpbm5lclRhZ05hbWUiLCAiaXRlbURhdGEiLCAiaXRlbUtleSIsICJvdXRlckVsZW1lbnRUeXBlIiwgIm91dGVyVGFnTmFtZSIsICJ1c2VJc1Njcm9sbGluZyIsICJfZ2V0UmFuZ2VUb1JlbmRlciIsICJzdGFydEluZGV4IiwgInN0b3BJbmRleCIsICJpdGVtcyIsICJwdXNoIiwgImNyZWF0ZUVsZW1lbnQiLCAia2V5IiwgImVzdGltYXRlZFRvdGFsU2l6ZSIsICJvdmVyZmxvdyIsICJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsICJ3aWxsQ2hhbmdlIiwgInBvaW50ZXJFdmVudHMiLCAib3ZlcnNjYW5Db3VudCIsICJvdmVyc2NhbkJhY2t3YXJkIiwgIm92ZXJzY2FuRm9yd2FyZCIsICJQdXJlQ29tcG9uZW50IiwgImRlZmF1bHRQcm9wcyIsICJfcmVmMiIsICJfcmVmMyIsICJoYXMiLCAiYWRkIiwgImNvbnNvbGUiLCAid2FybiIsICJFcnJvciIsICJGaXhlZFNpemVMaXN0IiwgImNyZWF0ZUxpc3RDb21wb25lbnQiLCAiZ2V0SXRlbU9mZnNldCIsICJfcmVmIiwgImluZGV4IiwgIml0ZW1TaXplIiwgImdldEl0ZW1TaXplIiwgIl9yZWYyIiwgImdldEVzdGltYXRlZFRvdGFsU2l6ZSIsICJfcmVmMyIsICJpdGVtQ291bnQiLCAiZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQiLCAiX3JlZjQiLCAiYWxpZ24iLCAic2Nyb2xsT2Zmc2V0IiwgImluc3RhbmNlUHJvcHMiLCAic2Nyb2xsYmFyU2l6ZSIsICJkaXJlY3Rpb24iLCAiaGVpZ2h0IiwgImxheW91dCIsICJ3aWR0aCIsICJpc0hvcml6b250YWwiLCAic2l6ZSIsICJsYXN0SXRlbU9mZnNldCIsICJNYXRoIiwgIm1heCIsICJtYXhPZmZzZXQiLCAibWluIiwgIm1pbk9mZnNldCIsICJtaWRkbGVPZmZzZXQiLCAicm91bmQiLCAiY2VpbCIsICJmbG9vciIsICJnZXRTdGFydEluZGV4Rm9yT2Zmc2V0IiwgIl9yZWY1IiwgIm9mZnNldCIsICJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwgIl9yZWY2IiwgInN0YXJ0SW5kZXgiLCAibnVtVmlzaWJsZUl0ZW1zIiwgImluaXRJbnN0YW5jZVByb3BzIiwgInByb3BzIiwgInNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UiLCAidmFsaWRhdGVQcm9wcyIsICJfcmVmNyIsICJwcm9jZXNzIiwgIkVycm9yIiwgInNoYWxsb3dEaWZmZXJzIiwgInByZXYiLCAibmV4dCIsICJhdHRyaWJ1dGUiLCAiYXJlRXF1YWwiLCAicHJldlByb3BzIiwgIm5leHRQcm9wcyIsICJwcmV2U3R5bGUiLCAic3R5bGUiLCAicHJldlJlc3QiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2V4Y2x1ZGVkIiwgIm5leHRTdHlsZSIsICJuZXh0UmVzdCIsICJfZXhjbHVkZWQyIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJ0cmFuc2Zvcm1Gb3JDYXNlU2Vuc2l0aXZpdHkiLCAic3RyaW5nIiwgImZsYXR0ZW5PcHRpb25Hcm91cHMiLCAiZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSIsICJfcmVmIiwgImNvbGxlY3RNYXRjaGluZ09wdGlvbiIsICJfcmVmMiIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAiX3JlZjMiLCAib2JqZWN0IiwgImNyZWF0ZVBhcnRpYWxTdHJpbmdFcXVhbGl0eU9wdGlvbk1hdGNoZXIiLCAiX3JlZjQiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm8iLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJFdWlDb21ib0JveE9wdGlvbkFwcGVuZFByZXBlbmQiLCAiX3JlZiIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpQ29tYm9Cb3hQaWxsU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ29tYm9Cb3hQaWxsIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlDb21ib0JveElucHV0U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpQ29tYm9Cb3hJbnB1dCIsICJhcHBlbmQiLCAiZ2V0IiwgInJlbmRlciIsICJvbkZvY3VzIiwgInZhbHVlIiwgImljb24iLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aU1hcmtTdHlsZXMiLCAiX3JlZiIsICJldWlNYXJrU2NyZWVuUmVhZGVyU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpTWFyayIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiSGlnaGxpZ2h0QWxsIiwgIl9yZWYiLCAiZXNjYXBlUmVnRXhwIiwgIm1hdGNoZXMiLCAibWF0Y2giLCAiUmVhY3QiLCAidmFsdWUiLCAiUHJvcFR5cGVzIiwgImZpbGxJbkNodW5rcyIsICJhcHBlbmQiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkhpZ2hsaWdodEZpcnN0IiwgIl9yZWYiLCAiUmVhY3QiLCAibWF0Y2giLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSGlnaGxpZ2h0IiwgIl9yZWYiLCAiQ29tcG9uZW50IiwgIl9yZWYyIiwgImNoaWxkcmVuIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpRmlsdGVyU2VsZWN0SXRlbVN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX3R5cGVvZiIsICJvIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX3RvUHJpbWl0aXZlIiwgInJlc29sdmVJY29uQW5kQ29sb3IiLCAiRXVpRmlsdGVyU2VsZWN0SXRlbUNsYXNzIiwgInJlbmRlciIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJpY29uIiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX3R5cGVvZiIsICJvIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfZ2V0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJpbWl0aXZlIiwgIlRydW5jYXRpb25VdGlscyIsICJfcmVmIiwgImNvbWJpbmVkVGV4dCIsICJnZXQiLCAicmVtb3ZlTGFzdENoYXJhY3RlciIsICJyZW1vdmVGaXJzdENoYXJhY3RlciIsICJzcGxpdFRleHQiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4Y2x1ZGVkMyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRleHRUcnVuY2F0ZSIsICJfcmVmIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgIkV1aVRleHRUcnVuY2F0ZVdpdGhXaWR0aCIsICJfcmVmMiIsICJfZXhjbHVkZWQyIiwgIl9zbGljZWRUb0FycmF5IiwgInRydW5jYXRpb24iLCAidHJ1bmNhdGlvbk9mZnNldCIsICJ0cnVuY2F0ZWRUZXh0IiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAiRXVpVGV4dFRydW5jYXRlV2l0aFJlc2l6ZU9ic2VydmVyIiwgIl9yZWYzIiwgIl9leGNsdWRlZDMiLCAiX3JlZjQiLCAid2lkdGgiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAic3R5bGVzIiwgIkV1aVRleHRCbG9ja1RydW5jYXRlIiwgIl9yZWYiLCAiY2xvbmVFbGVtZW50IiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJFdWlDb21ib0JveFRpdGxlIiwgIl9yZWYiLCAiZXVpQ29tYm9Cb3hPcHRpb25MaXN0U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leGNsdWRlZDMiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aUNvbWJvQm94T3B0aW9uc0xpc3QiLCAiX3JlZiIsICJfcmVmMiIsICJ2YWx1ZSIsICJhcHBlbmQiLCAidGV4dCIsICJSZWFjdCIsICJyZW5kZXIiLCAiZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSIsICJkZWxpbWl0ZXIiLCAiaGlnaGxpZ2h0U2VhcmNoVmFsdWUiLCAic2VhcmNoVmFsdWUiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAiRXVpQ29tYm9Cb3giLCAiX3JlZiIsICJfcmVmMiIsICJkZWxpbWl0ZXIiLCAicmVuZGVyIiwgIm9uQmx1ciIsICJhcHBlbmQiLCAiY2xhc3NOYW1lcyIsICJ2YWx1ZSIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpUGFnaW5hdGlvbkJ1dHRvblN0eWxlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBhZ2luYXRpb25CdXR0b24iLCAiX3JlZiIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leHRlbmRzIiwgIlRZUEVTIiwgIkV1aVBhZ2luYXRpb25CdXR0b25BcnJvdyIsICJfcmVmIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aVBhZ2luYXRpb25TdHlsZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQYWdpbmF0aW9uIiwgIl9yZWYiLCAic3R5bGVzIiwgInNhZmVDbGljayIsICJjbGFzc05hbWVzIiwgImFjY2Vzc2libGVQYWdlU3RyaW5nIiwgIlByb3BUeXBlcyIsICJQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciIsICJfcmVmMiIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAidXNlRXVpVGFibGVQYWdpbmF0aW9uRGVmYXVsdHMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVQYWdpbmF0aW9uIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlUYWJTdHlsZXMiLCAiX3JlZjIiLCAiZXVpVGFiQ29udGVudFN0eWxlcyIsICJpbXBvcnRfcmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWIiLCAiX3JlZiIsICJhcHBlbmQiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpVGFic1N0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX3R5cGVvZiIsICJvIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aVRhYmJlZENvbnRlbnQiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9jYWxsU3VwZXIiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9pbmhlcml0cyIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfZXhjbHVkZWQyIiwgIl9vYmplY3RTcHJlYWQiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm8iLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1ByaW1pdGl2ZSIsICJFdWlEZWxheVJlbmRlciIsICJfcmVmIiwgInJlbmRlciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpSGVhbHRoU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSGVhbHRoIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aUltYWdlV3JhcHBlclN0eWxlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpSW1hZ2VCdXR0b25TdHlsZXMiLCAiX3JlZiIsICJldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMiLCAiX3JlZjIiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJbWFnZUJ1dHRvbiIsICJfcmVmIiwgImJ1dHRvblN0eWxlcyIsICJpY29uU3R5bGVzIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiZXVpSW1hZ2VDYXB0aW9uU3R5bGVzIiwgIl9yZWYiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJfZXh0ZW5kcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiRXVpSW1hZ2VXcmFwcGVyIiwgIl9yZWYiLCAib3BlbkZ1bGxTY3JlZW4iLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImV1aUltYWdlU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyU3R5bGVzIiwgIl9leHRlbmRzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJFdWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyIiwgIl9yZWYiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAib25LZXlEb3duIiwgImNsb3NlRnVsbFNjcmVlbiIsICJpY29uU3R5bGVzIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJTSVpFUyIsICJfdHlwZW9mIiwgIm8iLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAiciIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Qcm9wZXJ0eUtleSIsICJfdG9QcmltaXRpdmUiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSW1hZ2UiLCAiX3JlZiIsICJzaXplIiwgIlNJWkVTIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImdsb2JhbFN0eWxlcyIsICJzaXplIiwgIkV1aVV0aWxpdHlDbGFzc2VzIiwgImltcG9ydF9yZWFjdCIsICJFdWlDYWNoZVByb3ZpZGVyIiwgIl9yZWYiLCAiY2FjaGUiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJFdWlTeXN0ZW1Db2xvck1vZGVQcm92aWRlciIsICJfcmVmIiwgImV2ZW50TGlzdGVuZXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJFdWlQcm92aWRlck5lc3RlZENoZWNrIiwgIl9yZWYiLCAidXNlSXNOZXN0ZWRFdWlQcm92aWRlciIsICJpc0Vtb3Rpb25DYWNoZU9iamVjdCIsICJFdWlQcm92aWRlciIsICJfcmVmIiwgImNhY2hlIiwgInByb3ZpZGVyTWVzc2FnZSIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgImdldFNlYXJjaGFibGVMYWJlbCIsICJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlIiwgImNvbGxlY3RNYXRjaGluZ09wdGlvbiIsICJfcmVmIiwgImdldE1hdGNoaW5nT3B0aW9ucyIsICJfcmVmMiIsICJjcmVhdGVQYXJ0aWFsU3RyaW5nRXF1YWxpdHlPcHRpb25NYXRjaGVyIiwgIl9yZWYzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU2VsZWN0YWJsZVNlYXJjaCIsICJfcmVmIiwgInZhbHVlIiwgImdldE1hdGNoaW5nT3B0aW9ucyIsICJjbGFzc05hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlTZWxlY3RhYmxlTWVzc2FnZVN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVNlbGVjdGFibGVNZXNzYWdlIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpU2VsZWN0YWJsZUxpc3RJdGVtVmFyaWFibGVzIiwgIl9yZWYyIiwgIl9yZWYiLCAiZXVpU2VsZWN0YWJsZUxpc3RJdGVtU3R5bGVzIiwgImJvcmRlciIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgInJlc29sdmVJY29uQW5kQ29sb3IiLCAiRXVpU2VsZWN0YWJsZUxpc3RJdGVtIiwgIl9yZWYiLCAiYXBwZW5kIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAicmVzb2x2ZUljb25BbmRDb2xvciIsICJpY29uIiwgIl9leHRlbmRzIiwgIl9leGNsdWRlZDIiLCAiUmVhY3QiLCAiX3NsaWNlZFRvQXJyYXkiLCAiUHJvcFR5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpU2VsZWN0YWJsZUxpc3RTdHlsZXMiLCAiY3NzIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leGNsdWRlZDMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aVNlbGVjdGFibGVMaXN0IiwgIl9yZWYiLCAiYXBwZW5kIiwgInN0eWxlcyIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJ0ZXh0IiwgIlJlYWN0IiwgIl9yZWY1IiwgInJlbmRlciIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfZXhjbHVkZWQzIiwgIl90eXBlb2YiLCAibyIsICJfZXh0ZW5kcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInIiLCAib3duS2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl90b1Byb3BlcnR5S2V5IiwgIl9jcmVhdGVDbGFzcyIsICJfY2FsbFN1cGVyIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAidCIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgImUiLCAiX3RvUHJpbWl0aXZlIiwgIkV1aVNlbGVjdGFibGUiLCAiX3JlZiIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAiaW5pdGlhbFNlYXJjaFZhbHVlIiwgInJlbmRlciIsICJfcmVmMiIsICJfcmVmMyIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgImdldEFjY2Vzc2libGVOYW1lIiwgIl9yZWY0IiwgIl9yZWY1IiwgImlucHV0UmVmIiwgIm5vZGUiLCAiX2RlZmF1bHQiLCAiX3JlZjYiLCAicmVzdWx0c0xlbmd0aCIsICJjcmVhdGVQYXJ0aWFsU3RyaW5nRXF1YWxpdHlPcHRpb25NYXRjaGVyIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgInVzZUlzRXVpVGFibGVSZXNwb25zaXZlIiwgIl9yZWYiLCAiYnJlYWtwb2ludCIsICJpc0Jvb2xlYW4iLCAidXNlRXVpVGFibGVJc1Jlc3BvbnNpdmUiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpVGFibGVWYXJpYWJsZXMiLCAiX3JlZjQiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJldWlUYWJsZVN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlQm9keSIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUZvb3RlciIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3R5cGVvZiIsICJvIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJyZXNvbHZlV2lkdGhBc1N0eWxlIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgImV1aVRhYmxlQ2VsbENvbnRlbnRTdHlsZXMiLCAiX3JlZjUiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUNlbGxDb250ZW50IiwgIl9yZWYiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiaXNPYmplY3QiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAibyIsICJvd25LZXlzIiwgInIiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvUHJvcGVydHlLZXkiLCAiX3RvUHJpbWl0aXZlIiwgImV1aVRhYmxlSGVhZGVyRm9vdGVyQ2VsbFN0eWxlcyIsICJldWlUYWJsZUNlbGxDaGVja2JveFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlRm9vdGVyQ2VsbCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUhlYWRlciIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJDZWxsQ29udGVudHMiLCAiX3JlZiIsICJFdWlUYWJsZUhlYWRlckNlbGwiLCAiX3JlZjIiLCAiYXBwZW5kIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCIsICJfcmVmIiwgImFwcGVuZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aVRhYmxlSGVhZGVyTW9iaWxlU3R5bGVzIiwgIl9yZWYiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUhlYWRlck1vYmlsZSIsICJfcmVmIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVTb3J0TW9iaWxlSXRlbSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfdHlwZW9mIiwgIm8iLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfdG9Qcm9wZXJ0eUtleSIsICJfY3JlYXRlQ2xhc3MiLCAiX2NhbGxTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInQiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9QcmltaXRpdmUiLCAiRXVpVGFibGVTb3J0TW9iaWxlIiwgInJlbmRlciIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiZXVpVGFibGVSb3dTdHlsZXMiLCAiX2V4cGFuZGVkUm93QW5pbWF0aW9uIiwgIl9yZWYiLCAiX3Jvd0NvbG9yVmFyaWFibGVzIiwgIl9yZWYyIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVSb3ciLCAiX3JlZiIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJvbktleURvd24iLCAib25LZXlVcCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiZXVpVGFibGVSb3dDZWxsU3R5bGVzIiwgIl90eXBlb2YiLCAibyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b1Byb3BlcnR5S2V5IiwgIl90b1ByaW1pdGl2ZSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVSb3dDZWxsIiwgIl9yZWYiLCAiYXBwZW5kIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIkVsZW1lbnQiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlUm93Q2VsbENoZWNrYm94IiwgIl9yZWYiLCAiYXBwZW5kIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImlzQ3VzdG9tSXRlbUFjdGlvbiIsICJjYWxsV2l0aEl0ZW1JZkZ1bmN0aW9uIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiciIsICJDb2xsYXBzZWRJdGVtQWN0aW9ucyIsICJfcmVmIiwgImNvbnRyb2xzIiwgImljb24iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJEZWZhdWx0SXRlbUFjdGlvbiIsICJfcmVmIiwgImljb24iLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIkN1c3RvbUl0ZW1BY3Rpb24iLCAiX3JlZiIsICJFeHBhbmRlZEl0ZW1BY3Rpb25zIiwgIl9yZWYiLCAiUmVhY3QiLCAiY2xhc3NOYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiUGFnaW5hdGlvbkJhciIsICJfcmVmIiwgImRlZmF1bHRzIiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgImV1aUJhc2ljVGFibGVCb2R5TG9hZGluZyIsICJfcmVmIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl90eXBlb2YiLCAibyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAib3duS2V5cyIsICJyIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX3RvUHJvcGVydHlLZXkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9jYWxsU3VwZXIiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJ0IiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAiZSIsICJfdG9QcmltaXRpdmUiLCAidmFsdWUiLCAicmVuZGVyIiwgImlzRnVuY3Rpb24iLCAiY29sdW1uIiwgIl9yZWYiLCAiX3JlZjIiLCAiRXVpQmFzaWNUYWJsZSIsICJvbkNoYW5nZSIsICJfcmVmMyIsICJfcmVmNCIsICJfcmVmNSIsICJfcmVmNiIsICJnZXQiLCAiX3JlZjciLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgIl9yZWY4IiwgIl9yZWY5IiwgIl9yZWYxMCIsICJudW0iLCAic2VsZWN0aW9uIiwgIml0ZW0iLCAiX3JlZjExIiwgIlByb3BUeXBlcyIsICJTdWJzY3JpYmFibGUiLCAibm9vcCIsICJ2YWx1ZSIsICJhc0FycmF5IiwgInZhbHVlIiwgImlzUGxhaW5PYmplY3QiLCAiY29weSIsICJGb2N1c01hbmFnZXIiLCAib25Gb2N1cyIsICJsaXN0ZW5lciIsICJPbmxpbmVNYW5hZ2VyIiwgImxpc3RlbmVyIiwgInZhbHVlIiwgIkNhbmNlbGxlZEVycm9yIiwgIlJldHJ5ZXIiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAicGF1c2UiLCAicnVuIiwgImNhbmNlbEZuIiwgIk5vdGlmeU1hbmFnZXIiLCAiZmx1c2giLCAiUXVlcnkiLCAibm9vcCIsICJpc1N0YWxlIiwgIm9uRm9jdXMiLCAiZmV0Y2giLCAiZ2V0IiwgImZldGNoRm4iLCAiZ2V0RGVmYXVsdFN0YXRlIiwgInJlZHVjZXIiLCAiUXVlcnlDYWNoZSIsICJnZXQiLCAib25Gb2N1cyIsICJNdXRhdGlvbiIsICJub29wIiwgIk11dGF0aW9uQ2FjaGUiLCAib25Gb2N1cyIsICJub29wIiwgImJ1aWxkTmV3UGFnZXMiLCAicGFyYW0iLCAiZmV0Y2hQYWdlIiwgIm1hbnVhbCIsICJwcm9taXNlIiwgIl9sb29wIiwgImkiLCAiUXVlcnlDbGllbnQiLCAiX3JlZiIsICJfcmVmMiIsICJub29wIiwgIl9yZWYzIiwgIlF1ZXJ5T2JzZXJ2ZXIiLCAidHJhY2tQcm9wIiwgImdldCIsICJmZXRjaCIsICJub29wIiwgInZhbHVlIiwgImltcG9ydF9yZWFjdF9kb20iLCAidW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMiLCAiUmVhY3RET00iLCAidW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMiLCAibG9nZ2VyIiwgImxvZ2dlciIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAidXNlUXVlcnlDbGllbnQiLCAiUXVlcnlDbGllbnRQcm92aWRlciIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJ1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiX3JlZiIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAic2VhcmNoVmFsdWUiLCAidmFsdWUiLCAicHJlZml4IiwgIlJlYWN0IiwgIm9wdGlvbnMiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJuIiwgIm1hdGNoIiwgIm4yIiwgInZhbHVlIiwgImltcG9ydF9yZWFjdF9kb20iLCAiZW50aXR5IiwgIlJlYWN0IiwgImtleXMiLCAicHJvcGVydHkiLCAiZG9tYWlucyIsICJyYW5nZXMiLCAiaXJpIiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJ2YWx1ZSIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiREVGQVVMVF9IQVNfVElUTEUiLCAib250b2xvZ3kiLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAibm9kZSIsICJjeWNsZUNoZWNrIiwgImN5Y2xlQ2hlY2siLCAibm9kZSIsICJSZWFjdCIsICJub2RlIiwgImhpZXJhcmNoeSIsICJSZWFjdERPTSIsICJyZW5kZXIiLCAiUmVhY3QiLCAidmFsdWUiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJyZW5kZXIiLCAiZGF0YSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJ2YWx1ZSIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZIiwgIlJlYWN0IiwgInJlbmRlciIsICJkYXRhIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgInZhbHVlIiwgIlJlYWN0IiwgInBhZ2VJbmRleCIsICJwYWdlU2l6ZSIsICJzb3J0RmllbGQiLCAic29ydERpcmVjdGlvbiIsICJwYWdlT2ZJdGVtcyIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJzZWFyY2hWYWx1ZSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyIsICJyZW5kZXIiLCAib3B0aW9uIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIkRFRkFVTFRfSEFTX1RJVExFIiwgIlJlYWN0IiwgInByb3BlcnR5IiwgInByZWRpY2F0ZXMiLCAiZW50aXR5IiwgImluc3RhbmNlcyIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJub2RlIiwgImRhdGEiLCAiaXNQb3BvdmVyT3BlbiIsICJSZWFjdCIsICJSZWFjdERPTSJdCn0K diff --git a/dist_plainjs/terminology-service-suite.min.js b/dist_plainjs/terminology-service-suite.min.js index 0ebc29f64..36278d46d 100644 --- a/dist_plainjs/terminology-service-suite.min.js +++ b/dist_plainjs/terminology-service-suite.min.js @@ -1,31 +1,31 @@ -"use strict";(()=>{var kBe=Object.create;var SQ=Object.defineProperty;var jBe=Object.getOwnPropertyDescriptor;var TBe=Object.getOwnPropertyNames;var CBe=Object.getPrototypeOf,MBe=Object.prototype.hasOwnProperty;var Cge=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Ce=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),J=(e,t)=>{for(var r in t)SQ(e,r,{get:t[r],enumerable:!0})},ABe=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of TBe(t))!MBe.call(e,o)&&o!==r&&SQ(e,o,{get:()=>t[o],enumerable:!(n=jBe(t,o))||n.enumerable});return e};var T=(e,t,r)=>(r=e!=null?kBe(CBe(e)):{},ABe(t||!e||!e.__esModule?SQ(r,"default",{value:e,enumerable:!0}):r,e));var IQ=Ce((wsr,Age)=>{"use strict";var Mge=Object.getOwnPropertySymbols,RBe=Object.prototype.hasOwnProperty,DBe=Object.prototype.propertyIsEnumerable;function LBe(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function NBe(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var t={},r=0;r<10;r++)t["_"+String.fromCharCode(r)]=r;var n=Object.getOwnPropertyNames(t).map(function(i){return t[i]});if(n.join("")!=="0123456789")return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(i){o[i]=i}),Object.keys(Object.assign({},o)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Age.exports=NBe()?Object.assign:function(e,t){for(var r,n=LBe(e),o,i=1;i{"use strict";var PQ=IQ(),CI=60103,Lge=60106;zn.Fragment=60107;zn.StrictMode=60108;zn.Profiler=60114;var Nge=60109,Fge=60110,Bge=60112;zn.Suspense=60113;var zge=60115,Wge=60116;typeof Symbol=="function"&&Symbol.for&&(Id=Symbol.for,CI=Id("react.element"),Lge=Id("react.portal"),zn.Fragment=Id("react.fragment"),zn.StrictMode=Id("react.strict_mode"),zn.Profiler=Id("react.profiler"),Nge=Id("react.provider"),Fge=Id("react.context"),Bge=Id("react.forward_ref"),zn.Suspense=Id("react.suspense"),zge=Id("react.memo"),Wge=Id("react.lazy"));var Id,Rge=typeof Symbol=="function"&&Symbol.iterator;function FBe(e){return e===null||typeof e!="object"?null:(e=Rge&&e[Rge]||e["@@iterator"],typeof e=="function"?e:null)}function RC(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r{"use strict";Xge.exports=Jge()});var rye=Ce(io=>{"use strict";var RI,NC,_Z,FQ;typeof performance=="object"&&typeof performance.now=="function"?(Kge=performance,io.unstable_now=function(){return Kge.now()}):(MQ=Date,Yge=MQ.now(),io.unstable_now=function(){return MQ.now()-Yge});var Kge,MQ,Yge;typeof window>"u"||typeof MessageChannel!="function"?(AI=null,AQ=null,RQ=function(){if(AI!==null)try{var e=io.unstable_now();AI(!0,e),AI=null}catch(t){throw setTimeout(RQ,0),t}},RI=function(e){AI!==null?setTimeout(RI,0,e):(AI=e,setTimeout(RQ,0))},NC=function(e,t){AQ=setTimeout(e,t)},_Z=function(){clearTimeout(AQ)},io.unstable_shouldYield=function(){return!1},FQ=io.unstable_forceFrameRate=function(){}):(Qge=window.setTimeout,eye=window.clearTimeout,typeof console<"u"&&(tye=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof tye!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),DC=!1,LC=null,wZ=-1,DQ=5,LQ=0,io.unstable_shouldYield=function(){return io.unstable_now()>=LQ},FQ=function(){},io.unstable_forceFrameRate=function(e){0>e||125>>1,o=e[n];if(o!==void 0&&0xZ(c,r))h!==void 0&&0>xZ(h,c)?(e[n]=h,e[d]=r,n=d):(e[n]=c,e[i]=r,n=i);else if(h!==void 0&&0>xZ(h,r))e[n]=h,e[d]=r,n=d;else break e}}return t}return null}function xZ(e,t){var r=e.sortIndex-t.sortIndex;return r!==0?r:e.id-t.id}var D0=[],O5=[],VBe=1,Ed=null,ml=3,IZ=!1,X4=!1,FC=!1;function zQ(e){for(var t=yh(O5);t!==null;){if(t.callback===null)SZ(O5);else if(t.startTime<=e)SZ(O5),t.sortIndex=t.expirationTime,BQ(D0,t);else break;t=yh(O5)}}function WQ(e){if(FC=!1,zQ(e),!X4)if(yh(D0)!==null)X4=!0,RI(HQ);else{var t=yh(O5);t!==null&&NC(WQ,t.startTime-e)}}function HQ(e,t){X4=!1,FC&&(FC=!1,_Z()),IZ=!0;var r=ml;try{for(zQ(t),Ed=yh(D0);Ed!==null&&(!(Ed.expirationTime>t)||e&&!io.unstable_shouldYield());){var n=Ed.callback;if(typeof n=="function"){Ed.callback=null,ml=Ed.priorityLevel;var o=n(Ed.expirationTime<=t);t=io.unstable_now(),typeof o=="function"?Ed.callback=o:Ed===yh(D0)&&SZ(D0),zQ(t)}else SZ(D0);Ed=yh(D0)}if(Ed!==null)var i=!0;else{var c=yh(O5);c!==null&&NC(WQ,c.startTime-t),i=!1}return i}finally{Ed=null,ml=r,IZ=!1}}var $Be=FQ;io.unstable_IdlePriority=5;io.unstable_ImmediatePriority=1;io.unstable_LowPriority=4;io.unstable_NormalPriority=3;io.unstable_Profiling=null;io.unstable_UserBlockingPriority=2;io.unstable_cancelCallback=function(e){e.callback=null};io.unstable_continueExecution=function(){X4||IZ||(X4=!0,RI(HQ))};io.unstable_getCurrentPriorityLevel=function(){return ml};io.unstable_getFirstCallbackNode=function(){return yh(D0)};io.unstable_next=function(e){switch(ml){case 1:case 2:case 3:var t=3;break;default:t=ml}var r=ml;ml=t;try{return e()}finally{ml=r}};io.unstable_pauseExecution=function(){};io.unstable_requestPaint=$Be;io.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var r=ml;ml=e;try{return t()}finally{ml=r}};io.unstable_scheduleCallback=function(e,t,r){var n=io.unstable_now();switch(typeof r=="object"&&r!==null?(r=r.delay,r=typeof r=="number"&&0n?(e.sortIndex=r,BQ(O5,e),yh(D0)===null&&e===yh(O5)&&(FC?_Z():FC=!0,NC(WQ,r-n))):(e.sortIndex=o,BQ(D0,e),X4||IZ||(X4=!0,RI(HQ))),e};io.unstable_wrapCallback=function(e){var t=ml;return function(){var r=ml;ml=t;try{return e.apply(this,arguments)}finally{ml=r}}}});var oye=Ce((Ssr,nye)=>{"use strict";nye.exports=rye()});var $2e=Ce(Md=>{"use strict";var yq=z(),ni=IQ(),ss=oye();function wt(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ZBe=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,iye=Object.prototype.hasOwnProperty,aye={},sye={};function qBe(e){return iye.call(sye,e)?!0:iye.call(aye,e)?!1:ZBe.test(e)?sye[e]=!0:(aye[e]=!0,!1)}function UBe(e,t,r,n){if(r!==null&&r.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:r!==null?!r.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function GBe(e,t,r,n){if(t===null||typeof t>"u"||UBe(e,t,r,n))return!0;if(n)return!1;if(r!==null)switch(r.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function ou(e,t,r,n,o,i,c){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=o,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=c}var Ws={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Ws[e]=new ou(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Ws[t]=new ou(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Ws[e]=new ou(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Ws[e]=new ou(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Ws[e]=new ou(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Ws[e]=new ou(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Ws[e]=new ou(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Ws[e]=new ou(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Ws[e]=new ou(e,5,!1,e.toLowerCase(),null,!1,!1)});var Kee=/[\-:]([a-z])/g;function Yee(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Kee,Yee);Ws[t]=new ou(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Kee,Yee);Ws[t]=new ou(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Kee,Yee);Ws[t]=new ou(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Ws[e]=new ou(e,1,!1,e.toLowerCase(),null,!1,!1)});Ws.xlinkHref=new ou("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Ws[e]=new ou(e,1,!1,e.toLowerCase(),null,!0,!0)});function Qee(e,t,r,n){var o=Ws.hasOwnProperty(t)?Ws[t]:null,i=o!==null?o.type===0:n?!1:!(!(2{var kBe=Object.create;var IQ=Object.defineProperty;var jBe=Object.getOwnPropertyDescriptor;var TBe=Object.getOwnPropertyNames;var CBe=Object.getPrototypeOf,MBe=Object.prototype.hasOwnProperty;var Cge=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Ce=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),J=(e,t)=>{for(var r in t)IQ(e,r,{get:t[r],enumerable:!0})},ABe=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of TBe(t))!MBe.call(e,o)&&o!==r&&IQ(e,o,{get:()=>t[o],enumerable:!(n=jBe(t,o))||n.enumerable});return e};var T=(e,t,r)=>(r=e!=null?kBe(CBe(e)):{},ABe(t||!e||!e.__esModule?IQ(r,"default",{value:e,enumerable:!0}):r,e));var EQ=Ce((wsr,Age)=>{"use strict";var Mge=Object.getOwnPropertySymbols,RBe=Object.prototype.hasOwnProperty,DBe=Object.prototype.propertyIsEnumerable;function LBe(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function NBe(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var t={},r=0;r<10;r++)t["_"+String.fromCharCode(r)]=r;var n=Object.getOwnPropertyNames(t).map(function(i){return t[i]});if(n.join("")!=="0123456789")return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(i){o[i]=i}),Object.keys(Object.assign({},o)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Age.exports=NBe()?Object.assign:function(e,t){for(var r,n=LBe(e),o,i=1;i{"use strict";var kQ=EQ(),CI=60103,Lge=60106;zn.Fragment=60107;zn.StrictMode=60108;zn.Profiler=60114;var Nge=60109,Fge=60110,Bge=60112;zn.Suspense=60113;var zge=60115,Wge=60116;typeof Symbol=="function"&&Symbol.for&&(Id=Symbol.for,CI=Id("react.element"),Lge=Id("react.portal"),zn.Fragment=Id("react.fragment"),zn.StrictMode=Id("react.strict_mode"),zn.Profiler=Id("react.profiler"),Nge=Id("react.provider"),Fge=Id("react.context"),Bge=Id("react.forward_ref"),zn.Suspense=Id("react.suspense"),zge=Id("react.memo"),Wge=Id("react.lazy"));var Id,Rge=typeof Symbol=="function"&&Symbol.iterator;function FBe(e){return e===null||typeof e!="object"?null:(e=Rge&&e[Rge]||e["@@iterator"],typeof e=="function"?e:null)}function RC(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r{"use strict";Xge.exports=Jge()});var rye=Ce(io=>{"use strict";var RI,NC,SZ,BQ;typeof performance=="object"&&typeof performance.now=="function"?(Kge=performance,io.unstable_now=function(){return Kge.now()}):(AQ=Date,Yge=AQ.now(),io.unstable_now=function(){return AQ.now()-Yge});var Kge,AQ,Yge;typeof window>"u"||typeof MessageChannel!="function"?(AI=null,RQ=null,DQ=function(){if(AI!==null)try{var e=io.unstable_now();AI(!0,e),AI=null}catch(t){throw setTimeout(DQ,0),t}},RI=function(e){AI!==null?setTimeout(RI,0,e):(AI=e,setTimeout(DQ,0))},NC=function(e,t){RQ=setTimeout(e,t)},SZ=function(){clearTimeout(RQ)},io.unstable_shouldYield=function(){return!1},BQ=io.unstable_forceFrameRate=function(){}):(Qge=window.setTimeout,eye=window.clearTimeout,typeof console<"u"&&(tye=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof tye!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),DC=!1,LC=null,OZ=-1,LQ=5,NQ=0,io.unstable_shouldYield=function(){return io.unstable_now()>=NQ},BQ=function(){},io.unstable_forceFrameRate=function(e){0>e||125>>1,o=e[n];if(o!==void 0&&0<_Z(o,t))e[n]=t,e[r]=o,r=n;else break e}}function yh(e){return e=e[0],e===void 0?null:e}function IZ(e){var t=e[0];if(t!==void 0){var r=e.pop();if(r!==t){e[0]=r;e:for(var n=0,o=e.length;n_Z(c,r))h!==void 0&&0>_Z(h,c)?(e[n]=h,e[d]=r,n=d):(e[n]=c,e[i]=r,n=i);else if(h!==void 0&&0>_Z(h,r))e[n]=h,e[d]=r,n=d;else break e}}return t}return null}function _Z(e,t){var r=e.sortIndex-t.sortIndex;return r!==0?r:e.id-t.id}var D0=[],x5=[],VBe=1,Ed=null,ml=3,EZ=!1,X4=!1,FC=!1;function WQ(e){for(var t=yh(x5);t!==null;){if(t.callback===null)IZ(x5);else if(t.startTime<=e)IZ(x5),t.sortIndex=t.expirationTime,zQ(D0,t);else break;t=yh(x5)}}function HQ(e){if(FC=!1,WQ(e),!X4)if(yh(D0)!==null)X4=!0,RI(VQ);else{var t=yh(x5);t!==null&&NC(HQ,t.startTime-e)}}function VQ(e,t){X4=!1,FC&&(FC=!1,SZ()),EZ=!0;var r=ml;try{for(WQ(t),Ed=yh(D0);Ed!==null&&(!(Ed.expirationTime>t)||e&&!io.unstable_shouldYield());){var n=Ed.callback;if(typeof n=="function"){Ed.callback=null,ml=Ed.priorityLevel;var o=n(Ed.expirationTime<=t);t=io.unstable_now(),typeof o=="function"?Ed.callback=o:Ed===yh(D0)&&IZ(D0),WQ(t)}else IZ(D0);Ed=yh(D0)}if(Ed!==null)var i=!0;else{var c=yh(x5);c!==null&&NC(HQ,c.startTime-t),i=!1}return i}finally{Ed=null,ml=r,EZ=!1}}var $Be=BQ;io.unstable_IdlePriority=5;io.unstable_ImmediatePriority=1;io.unstable_LowPriority=4;io.unstable_NormalPriority=3;io.unstable_Profiling=null;io.unstable_UserBlockingPriority=2;io.unstable_cancelCallback=function(e){e.callback=null};io.unstable_continueExecution=function(){X4||EZ||(X4=!0,RI(VQ))};io.unstable_getCurrentPriorityLevel=function(){return ml};io.unstable_getFirstCallbackNode=function(){return yh(D0)};io.unstable_next=function(e){switch(ml){case 1:case 2:case 3:var t=3;break;default:t=ml}var r=ml;ml=t;try{return e()}finally{ml=r}};io.unstable_pauseExecution=function(){};io.unstable_requestPaint=$Be;io.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var r=ml;ml=e;try{return t()}finally{ml=r}};io.unstable_scheduleCallback=function(e,t,r){var n=io.unstable_now();switch(typeof r=="object"&&r!==null?(r=r.delay,r=typeof r=="number"&&0n?(e.sortIndex=r,zQ(x5,e),yh(D0)===null&&e===yh(x5)&&(FC?SZ():FC=!0,NC(HQ,r-n))):(e.sortIndex=o,zQ(D0,e),X4||EZ||(X4=!0,RI(VQ))),e};io.unstable_wrapCallback=function(e){var t=ml;return function(){var r=ml;ml=t;try{return e.apply(this,arguments)}finally{ml=r}}}});var oye=Ce((Ssr,nye)=>{"use strict";nye.exports=rye()});var $2e=Ce(Md=>{"use strict";var bq=z(),ni=EQ(),ss=oye();function wt(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ZBe=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,iye=Object.prototype.hasOwnProperty,aye={},sye={};function qBe(e){return iye.call(sye,e)?!0:iye.call(aye,e)?!1:ZBe.test(e)?sye[e]=!0:(aye[e]=!0,!1)}function UBe(e,t,r,n){if(r!==null&&r.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:r!==null?!r.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function GBe(e,t,r,n){if(t===null||typeof t>"u"||UBe(e,t,r,n))return!0;if(n)return!1;if(r!==null)switch(r.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function ou(e,t,r,n,o,i,c){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=o,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=c}var Ws={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Ws[e]=new ou(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Ws[t]=new ou(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Ws[e]=new ou(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Ws[e]=new ou(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Ws[e]=new ou(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Ws[e]=new ou(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Ws[e]=new ou(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Ws[e]=new ou(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Ws[e]=new ou(e,5,!1,e.toLowerCase(),null,!1,!1)});var Yee=/[\-:]([a-z])/g;function Qee(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Yee,Qee);Ws[t]=new ou(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Yee,Qee);Ws[t]=new ou(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Yee,Qee);Ws[t]=new ou(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Ws[e]=new ou(e,1,!1,e.toLowerCase(),null,!1,!1)});Ws.xlinkHref=new ou("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Ws[e]=new ou(e,1,!1,e.toLowerCase(),null,!0,!0)});function ete(e,t,r,n){var o=Ws.hasOwnProperty(t)?Ws[t]:null,i=o!==null?o.type===0:n?!1:!(!(2d||o[c]!==i[d])return` -`+o[c].replace(" at new "," at ");while(1<=c&&0<=d);break}}}finally{$Q=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?YC(e):""}function JBe(e){switch(e.tag){case 5:return YC(e.type);case 16:return YC("Lazy");case 13:return YC("Suspense");case 19:return YC("SuspenseList");case 0:case 2:case 15:return e=EZ(e.type,!1),e;case 11:return e=EZ(e.type.render,!1),e;case 22:return e=EZ(e.type._render,!1),e;case 1:return e=EZ(e.type,!0),e;default:return""}}function ZI(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case _5:return"Fragment";case Y4:return"Portal";case rM:return"Profiler";case ete:return"StrictMode";case nM:return"Suspense";case JZ:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case rte:return(e.displayName||"Context")+".Consumer";case tte:return(e._context.displayName||"Context")+".Provider";case bq:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case wq:return ZI(e.type);case ote:return ZI(e._render);case nte:t=e._payload,e=e._init;try{return ZI(e(t))}catch{}}return null}function D5(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function bbe(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function XBe(e){var t=bbe(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var o=r.get,i=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(c){n=""+c,i.call(this,c)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(c){n=""+c},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function PZ(e){e._valueTracker||(e._valueTracker=XBe(e))}function wbe(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n="";return e&&(n=bbe(e)?e.checked?"true":"false":e.value),e=n,e!==r?(t.setValue(e),!0):!1}function XZ(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function dee(e,t){var r=t.checked;return ni({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function uye(e,t){var r=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;r=D5(t.value!=null?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Obe(e,t){t=t.checked,t!=null&&Qee(e,"checked",t,!1)}function fee(e,t){Obe(e,t);var r=D5(t.value),n=t.type;if(r!=null)n==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?hee(e,t.type,r):t.hasOwnProperty("defaultValue")&&hee(e,t.type,D5(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function cye(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function hee(e,t,r){(t!=="number"||XZ(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}function KBe(e){var t="";return yq.Children.forEach(e,function(r){r!=null&&(t+=r)}),t}function mee(e,t){return e=ni({children:void 0},t),(t=KBe(t.children))&&(e.children=t),e}function qI(e,t,r,n){if(e=e.options,t){t={};for(var o=0;o=r.length))throw Error(wt(93));r=r[0]}t=r}t==null&&(t=""),r=t}e._wrapperState={initialValue:D5(r)}}function xbe(e,t){var r=D5(t.value),n=D5(t.defaultValue);r!=null&&(r=""+r,r!==e.value&&(e.value=r),t.defaultValue==null&&e.defaultValue!==r&&(e.defaultValue=r)),n!=null&&(e.defaultValue=""+n)}function dye(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}var gee={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function _be(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function yee(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?_be(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var kZ,Sbe=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,r,n,o){MSApp.execUnsafeLocalFunction(function(){return e(t,r,n,o)})}:e}(function(e,t){if(e.namespaceURI!==gee.svg||"innerHTML"in e)e.innerHTML=t;else{for(kZ=kZ||document.createElement("div"),kZ.innerHTML=""+t.valueOf().toString()+"",t=kZ.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function mM(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var oM={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},YBe=["Webkit","ms","Moz","O"];Object.keys(oM).forEach(function(e){YBe.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),oM[t]=oM[e]})});function Ibe(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||oM.hasOwnProperty(e)&&oM[e]?(""+t).trim():t+"px"}function Ebe(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var n=r.indexOf("--")===0,o=Ibe(r,t[r],n);r==="float"&&(r="cssFloat"),n?e.setProperty(r,o):e[r]=o}}var QBe=ni({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function bee(e,t){if(t){if(QBe[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(wt(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(wt(60));if(!(typeof t.dangerouslySetInnerHTML=="object"&&"__html"in t.dangerouslySetInnerHTML))throw Error(wt(61))}if(t.style!=null&&typeof t.style!="object")throw Error(wt(62))}}function wee(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function ste(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Oee=null,UI=null,GI=null;function fye(e){if(e=jM(e)){if(typeof Oee!="function")throw Error(wt(280));var t=e.stateNode;t&&(t=Eq(t),Oee(e.stateNode,e.type,t))}}function Pbe(e){UI?GI?GI.push(e):GI=[e]:UI=e}function kbe(){if(UI){var e=UI,t=GI;if(GI=UI=null,fye(e),t)for(e=0;en?0:1<r;r++)t.push(e);return t}function xq(e,t,r){e.pendingLanes|=t;var n=t-1;e.suspendedLanes&=n,e.pingedLanes&=n,e=e.eventTimes,t=31-L5(t),e[t]=r}var L5=Math.clz32?Math.clz32:mze,fze=Math.log,hze=Math.LN2;function mze(e){return e===0?32:31-(fze(e)/hze|0)|0}var vze=ss.unstable_UserBlockingPriority,gze=ss.unstable_runWithPriority,zZ=!0;function yze(e,t,r,n){Q4||ute();var o=hte,i=Q4;Q4=!0;try{jbe(o,e,t,r,n)}finally{(Q4=i)||cte()}}function bze(e,t,r,n){gze(vze,hte.bind(null,e,t,r,n))}function hte(e,t,r,n){if(zZ){var o;if((o=(t&4)===0)&&0=aM),_ye=String.fromCharCode(32),Sye=!1;function qbe(e,t){switch(e){case"keyup":return Hze.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ube(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var zI=!1;function $ze(e,t){switch(e){case"compositionend":return Ube(t);case"keypress":return t.which!==32?null:(Sye=!0,_ye);case"textInput":return e=t.data,e===_ye&&Sye?null:e;default:return null}}function Zze(e,t){if(zI)return e==="compositionend"||!bte&&qbe(e,t)?(e=$be(),WZ=vte=S5=null,zI=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Pye(r)}}function Kbe(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Kbe(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function jye(){for(var e=window,t=XZ();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=XZ(e.document)}return t}function Eee(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var tWe=Rg&&"documentMode"in document&&11>=document.documentMode,WI=null,Pee=null,lM=null,kee=!1;function Tye(e,t,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;kee||WI==null||WI!==XZ(n)||(n=WI,"selectionStart"in n&&Eee(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),lM&&OM(lM,n)||(lM=n,n=eq(Pee,"onSelect"),0VI||(e.current=Tee[VI],Tee[VI]=null,VI--)}function ji(e,t){VI++,Tee[VI]=e.current,e.current=t}var N5={},bl=z5(N5),ac=z5(!1),ox=N5;function rE(e,t){var r=e.type.contextTypes;if(!r)return N5;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in r)o[i]=t[i];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function sc(e){return e=e.childContextTypes,e!=null}function nq(){Uo(ac),Uo(bl)}function Fye(e,t,r){if(bl.current!==N5)throw Error(wt(168));ji(bl,t),ji(ac,r)}function i2e(e,t,r){var n=e.stateNode;if(e=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var o in n)if(!(o in e))throw Error(wt(108,ZI(t)||"Unknown",o));return ni({},r,n)}function VZ(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||N5,ox=bl.current,ji(bl,e),ji(ac,ac.current),!0}function Bye(e,t,r){var n=e.stateNode;if(!n)throw Error(wt(169));r?(e=i2e(e,t,ox),n.__reactInternalMemoizedMergedChildContext=e,Uo(ac),Uo(bl),ji(bl,e)):Uo(ac),ji(ac,r)}var Ote=null,nx=null,oWe=ss.unstable_runWithPriority,xte=ss.unstable_scheduleCallback,Cee=ss.unstable_cancelCallback,iWe=ss.unstable_shouldYield,zye=ss.unstable_requestPaint,Mee=ss.unstable_now,aWe=ss.unstable_getCurrentPriorityLevel,Pq=ss.unstable_ImmediatePriority,a2e=ss.unstable_UserBlockingPriority,s2e=ss.unstable_NormalPriority,l2e=ss.unstable_LowPriority,u2e=ss.unstable_IdlePriority,ree={},sWe=zye!==void 0?zye:function(){},jg=null,$Z=null,nee=!1,Wye=Mee(),gl=1e4>Wye?Mee:function(){return Mee()-Wye};function nE(){switch(aWe()){case Pq:return 99;case a2e:return 98;case s2e:return 97;case l2e:return 96;case u2e:return 95;default:throw Error(wt(332))}}function c2e(e){switch(e){case 99:return Pq;case 98:return a2e;case 97:return s2e;case 96:return l2e;case 95:return u2e;default:throw Error(wt(332))}}function ix(e,t){return e=c2e(e),oWe(e,t)}function _M(e,t,r){return e=c2e(e),xte(e,t,r)}function W0(){if($Z!==null){var e=$Z;$Z=null,Cee(e)}p2e()}function p2e(){if(!nee&&jg!==null){nee=!0;var e=0;try{var t=jg;ix(99,function(){for(;ete?(de=ne,ne=null):de=ne.sibling;var fe=I(A,ne,H[te],q);if(fe===null){ne===null&&(ne=de);break}e&&ne&&fe.alternate===null&&t(A,ne),N=i(fe,N,te),ee===null?Y=fe:ee.sibling=fe,ee=fe,ne=de}if(te===H.length)return r(A,ne),Y;if(ne===null){for(;tete?(de=ne,ne=null):de=ne.sibling;var ye=I(A,ne,fe.value,q);if(ye===null){ne===null&&(ne=de);break}e&&ne&&ye.alternate===null&&t(A,ne),N=i(ye,N,te),ee===null?Y=ye:ee.sibling=ye,ee=ye,ne=de}if(fe.done)return r(A,ne),Y;if(ne===null){for(;!fe.done;te++,fe=H.next())fe=_(A,fe.value,q),fe!==null&&(N=i(fe,N,te),ee===null?Y=fe:ee.sibling=fe,ee=fe);return Y}for(ne=n(A,ne);!fe.done;te++,fe=H.next())fe=R(ne,A,te,fe.value,q),fe!==null&&(e&&fe.alternate!==null&&ne.delete(fe.key===null?te:fe.key),N=i(fe,N,te),ee===null?Y=fe:ee.sibling=fe,ee=fe);return e&&ne.forEach(function(Ie){return t(A,Ie)}),Y}return function(A,N,H,q){var Y=typeof H=="object"&&H!==null&&H.type===_5&&H.key===null;Y&&(H=H.props.children);var ee=typeof H=="object"&&H!==null;if(ee)switch(H.$$typeof){case KC:e:{for(ee=H.key,Y=N;Y!==null;){if(Y.key===ee){switch(Y.tag){case 7:if(H.type===_5){r(A,Y.sibling),N=o(Y,H.props.children),N.return=A,A=N;break e}break;default:if(Y.elementType===H.type){r(A,Y.sibling),N=o(Y,H.props),N.ref=$C(A,Y,H),N.return=A,A=N;break e}}r(A,Y);break}else t(A,Y);Y=Y.sibling}H.type===_5?(N=eE(H.props.children,A.mode,q,H.key),N.return=A,A=N):(q=GZ(H.type,H.key,H.props,null,A.mode,q),q.ref=$C(A,N,H),q.return=A,A=q)}return c(A);case Y4:e:{for(Y=H.key;N!==null;){if(N.key===Y)if(N.tag===4&&N.stateNode.containerInfo===H.containerInfo&&N.stateNode.implementation===H.implementation){r(A,N.sibling),N=o(N,H.children||[]),N.return=A,A=N;break e}else{r(A,N);break}else t(A,N);N=N.sibling}N=uee(H,A.mode,q),N.return=A,A=N}return c(A)}if(typeof H=="string"||typeof H=="number")return H=""+H,N!==null&&N.tag===6?(r(A,N.sibling),N=o(N,H),N.return=A,A=N):(r(A,N),N=lee(H,A.mode,q),N.return=A,A=N),c(A);if(RZ(H))return D(A,N,H,q);if(BC(H))return F(A,N,H,q);if(ee&&DZ(A,H),typeof H>"u"&&!Y)switch(A.tag){case 1:case 22:case 0:case 11:case 15:throw Error(wt(152,ZI(A.type)||"Component"))}return r(A,N)}}var lq=v2e(!0),g2e=v2e(!1),TM={},B0=z5(TM),IM=z5(TM),EM=z5(TM);function tx(e){if(e===TM)throw Error(wt(174));return e}function Ree(e,t){switch(ji(EM,t),ji(IM,e),ji(B0,TM),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:yee(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=yee(t,e)}Uo(B0),ji(B0,t)}function oE(){Uo(B0),Uo(IM),Uo(EM)}function qye(e){tx(EM.current);var t=tx(B0.current),r=yee(t,e.type);t!==r&&(ji(IM,e),ji(B0,r))}function Ete(e){IM.current===e&&(Uo(B0),Uo(IM))}var ki=z5(0);function uq(e){for(var t=e;t!==null;){if(t.tag===13){var r=t.memoizedState;if(r!==null&&(r=r.dehydrated,r===null||r.data==="$?"||r.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&64)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Cg=null,E5=null,z0=!1;function y2e(e,t){var r=kd(5,null,null,0);r.elementType="DELETED",r.type="DELETED",r.stateNode=t,r.return=e,r.flags=8,e.lastEffect!==null?(e.lastEffect.nextEffect=r,e.lastEffect=r):e.firstEffect=e.lastEffect=r}function Uye(e,t){switch(e.tag){case 5:var r=e.type;return t=t.nodeType!==1||r.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,!0):!1;case 13:return!1;default:return!1}}function Dee(e){if(z0){var t=E5;if(t){var r=t;if(!Uye(e,t)){if(t=JI(r.nextSibling),!t||!Uye(e,t)){e.flags=e.flags&-1025|2,z0=!1,Cg=e;return}y2e(Cg,r)}Cg=e,E5=JI(t.firstChild)}else e.flags=e.flags&-1025|2,z0=!1,Cg=e}}function Gye(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;Cg=e}function LZ(e){if(e!==Cg)return!1;if(!z0)return Gye(e),z0=!0,!1;var t=e.type;if(e.tag!==5||t!=="head"&&t!=="body"&&!jee(t,e.memoizedProps))for(t=E5;t;)y2e(e,t),t=JI(t.nextSibling);if(Gye(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(wt(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var r=e.data;if(r==="/$"){if(t===0){E5=JI(e.nextSibling);break e}t--}else r!=="$"&&r!=="$!"&&r!=="$?"||t++}e=e.nextSibling}E5=null}}else E5=Cg?JI(e.stateNode.nextSibling):null;return!0}function oee(){E5=Cg=null,z0=!1}var KI=[];function Pte(){for(var e=0;ei))throw Error(wt(301));i+=1,Bs=vl=null,t.updateQueue=null,uM.current=dWe,e=r(n,o)}while(cM)}if(uM.current=hq,t=vl!==null&&vl.next!==null,PM=0,Bs=vl=qi=null,cq=!1,t)throw Error(wt(300));return e}function rx(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Bs===null?qi.memoizedState=Bs=e:Bs=Bs.next=e,Bs}function cx(){if(vl===null){var e=qi.alternate;e=e!==null?e.memoizedState:null}else e=vl.next;var t=Bs===null?qi.memoizedState:Bs.next;if(t!==null)Bs=t,vl=e;else{if(e===null)throw Error(wt(310));vl=e,e={memoizedState:vl.memoizedState,baseState:vl.baseState,baseQueue:vl.baseQueue,queue:vl.queue,next:null},Bs===null?qi.memoizedState=Bs=e:Bs=Bs.next=e}return Bs}function N0(e,t){return typeof t=="function"?t(e):t}function ZC(e){var t=cx(),r=t.queue;if(r===null)throw Error(wt(311));r.lastRenderedReducer=e;var n=vl,o=n.baseQueue,i=r.pending;if(i!==null){if(o!==null){var c=o.next;o.next=i.next,i.next=c}n.baseQueue=o=i,r.pending=null}if(o!==null){o=o.next,n=n.baseState;var d=c=i=null,h=o;do{var v=h.lane;if((PM&v)===v)d!==null&&(d=d.next={lane:0,action:h.action,eagerReducer:h.eagerReducer,eagerState:h.eagerState,next:null}),n=h.eagerReducer===e?h.eagerState:e(n,h.action);else{var w={lane:v,action:h.action,eagerReducer:h.eagerReducer,eagerState:h.eagerState,next:null};d===null?(c=d=w,i=n):d=d.next=w,qi.lanes|=v,CM|=v}h=h.next}while(h!==null&&h!==o);d===null?i=n:d.next=c,Pd(n,t.memoizedState)||(wh=!0),t.memoizedState=n,t.baseState=i,t.baseQueue=d,r.lastRenderedState=n}return[t.memoizedState,r.dispatch]}function qC(e){var t=cx(),r=t.queue;if(r===null)throw Error(wt(311));r.lastRenderedReducer=e;var n=r.dispatch,o=r.pending,i=t.memoizedState;if(o!==null){r.pending=null;var c=o=o.next;do i=e(i,c.action),c=c.next;while(c!==o);Pd(i,t.memoizedState)||(wh=!0),t.memoizedState=i,t.baseQueue===null&&(t.baseState=i),r.lastRenderedState=i}return[i,n]}function Jye(e,t,r){var n=t._getVersion;n=n(t._source);var o=t._workInProgressVersionPrimary;if(o!==null?e=o===n:(e=e.mutableReadLanes,(e=(PM&e)===e)&&(t._workInProgressVersionPrimary=n,KI.push(t))),e)return r(t._source);throw KI.push(t),Error(wt(350))}function b2e(e,t,r,n){var o=nu;if(o===null)throw Error(wt(349));var i=t._getVersion,c=i(t._source),d=uM.current,h=d.useState(function(){return Jye(o,t,r)}),v=h[1],w=h[0];h=Bs;var _=e.memoizedState,I=_.refs,R=I.getSnapshot,D=_.source;_=_.subscribe;var F=qi;return e.memoizedState={refs:I,source:t,subscribe:n},d.useEffect(function(){I.getSnapshot=r,I.setSnapshot=v;var A=i(t._source);if(!Pd(c,A)){A=r(t._source),Pd(w,A)||(v(A),A=M5(F),o.mutableReadLanes|=A&o.pendingLanes),A=o.mutableReadLanes,o.entangledLanes|=A;for(var N=o.entanglements,H=A;0r?98:r,function(){e(!0)}),ix(97<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=c.createElement(r,{is:n.is}):(e=c.createElement(r),r==="select"&&(c=e,n.multiple?c.multiple=!0:n.size&&(c.size=n.size))):e=c.createElementNS(e,r),e[I5]=t,e[rq]=n,k2e(e,t,!1,!1),t.stateNode=e,c=wee(r,n),r){case"dialog":qo("cancel",e),qo("close",e),o=n;break;case"iframe":case"object":case"embed":qo("load",e),o=n;break;case"video":case"audio":for(o=0;oZee&&(t.flags|=64,i=!0,GC(n,!1),t.lanes=33554432)}else{if(!i)if(e=uq(c),e!==null){if(t.flags|=64,i=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),GC(n,!0),n.tail===null&&n.tailMode==="hidden"&&!c.alternate&&!z0)return t=t.lastEffect=n.lastEffect,t!==null&&(t.nextEffect=null),null}else 2*gl()-n.renderingStartTime>Zee&&r!==1073741824&&(t.flags|=64,i=!0,GC(n,!1),t.lanes=33554432);n.isBackwards?(c.sibling=t.child,t.child=c):(r=n.last,r!==null?r.sibling=c:t.child=c,n.last=c)}return n.tail!==null?(r=n.tail,n.rendering=r,n.tail=r.sibling,n.lastEffect=t.lastEffect,n.renderingStartTime=gl(),r.sibling=null,t=ki.current,ji(ki,i?t&1|2:t&1),r):null;case 23:case 24:return Nte(),e!==null&&e.memoizedState!==null!=(t.memoizedState!==null)&&n.mode!=="unstable-defer-without-hiding"&&(t.flags|=4),null}throw Error(wt(156,t.tag))}function mWe(e){switch(e.tag){case 1:sc(e.type)&&nq();var t=e.flags;return t&4096?(e.flags=t&-4097|64,e):null;case 3:if(oE(),Uo(ac),Uo(bl),Pte(),t=e.flags,t&64)throw Error(wt(285));return e.flags=t&-4097|64,e;case 5:return Ete(e),null;case 13:return Uo(ki),t=e.flags,t&4096?(e.flags=t&-4097|64,e):null;case 19:return Uo(ki),null;case 4:return oE(),null;case 10:return Ste(e),null;case 23:case 24:return Nte(),null;default:return null}}function Ate(e,t){try{var r="",n=t;do r+=JBe(n),n=n.return;while(n);var o=r}catch(i){o=` +`+o[c].replace(" at new "," at ");while(1<=c&&0<=d);break}}}finally{ZQ=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?YC(e):""}function JBe(e){switch(e.tag){case 5:return YC(e.type);case 16:return YC("Lazy");case 13:return YC("Suspense");case 19:return YC("SuspenseList");case 0:case 2:case 15:return e=PZ(e.type,!1),e;case 11:return e=PZ(e.type.render,!1),e;case 22:return e=PZ(e.type._render,!1),e;case 1:return e=PZ(e.type,!0),e;default:return""}}function ZI(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case S5:return"Fragment";case Y4:return"Portal";case rM:return"Profiler";case tte:return"StrictMode";case nM:return"Suspense";case XZ:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case nte:return(e.displayName||"Context")+".Consumer";case rte:return(e._context.displayName||"Context")+".Provider";case wq:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case Oq:return ZI(e.type);case ite:return ZI(e._render);case ote:t=e._payload,e=e._init;try{return ZI(e(t))}catch{}}return null}function L5(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function bbe(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function XBe(e){var t=bbe(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var o=r.get,i=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(c){n=""+c,i.call(this,c)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(c){n=""+c},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function kZ(e){e._valueTracker||(e._valueTracker=XBe(e))}function wbe(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n="";return e&&(n=bbe(e)?e.checked?"true":"false":e.value),e=n,e!==r?(t.setValue(e),!0):!1}function KZ(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function fee(e,t){var r=t.checked;return ni({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function uye(e,t){var r=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;r=L5(t.value!=null?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Obe(e,t){t=t.checked,t!=null&&ete(e,"checked",t,!1)}function hee(e,t){Obe(e,t);var r=L5(t.value),n=t.type;if(r!=null)n==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?mee(e,t.type,r):t.hasOwnProperty("defaultValue")&&mee(e,t.type,L5(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function cye(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function mee(e,t,r){(t!=="number"||KZ(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}function KBe(e){var t="";return bq.Children.forEach(e,function(r){r!=null&&(t+=r)}),t}function vee(e,t){return e=ni({children:void 0},t),(t=KBe(t.children))&&(e.children=t),e}function qI(e,t,r,n){if(e=e.options,t){t={};for(var o=0;o=r.length))throw Error(wt(93));r=r[0]}t=r}t==null&&(t=""),r=t}e._wrapperState={initialValue:L5(r)}}function xbe(e,t){var r=L5(t.value),n=L5(t.defaultValue);r!=null&&(r=""+r,r!==e.value&&(e.value=r),t.defaultValue==null&&e.defaultValue!==r&&(e.defaultValue=r)),n!=null&&(e.defaultValue=""+n)}function dye(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}var yee={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function _be(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function bee(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?_be(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var jZ,Sbe=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,r,n,o){MSApp.execUnsafeLocalFunction(function(){return e(t,r,n,o)})}:e}(function(e,t){if(e.namespaceURI!==yee.svg||"innerHTML"in e)e.innerHTML=t;else{for(jZ=jZ||document.createElement("div"),jZ.innerHTML=""+t.valueOf().toString()+"",t=jZ.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function mM(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var oM={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},YBe=["Webkit","ms","Moz","O"];Object.keys(oM).forEach(function(e){YBe.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),oM[t]=oM[e]})});function Ibe(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||oM.hasOwnProperty(e)&&oM[e]?(""+t).trim():t+"px"}function Ebe(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var n=r.indexOf("--")===0,o=Ibe(r,t[r],n);r==="float"&&(r="cssFloat"),n?e.setProperty(r,o):e[r]=o}}var QBe=ni({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function wee(e,t){if(t){if(QBe[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(wt(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(wt(60));if(!(typeof t.dangerouslySetInnerHTML=="object"&&"__html"in t.dangerouslySetInnerHTML))throw Error(wt(61))}if(t.style!=null&&typeof t.style!="object")throw Error(wt(62))}}function Oee(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function lte(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var xee=null,UI=null,GI=null;function fye(e){if(e=jM(e)){if(typeof xee!="function")throw Error(wt(280));var t=e.stateNode;t&&(t=Pq(t),xee(e.stateNode,e.type,t))}}function Pbe(e){UI?GI?GI.push(e):GI=[e]:UI=e}function kbe(){if(UI){var e=UI,t=GI;if(GI=UI=null,fye(e),t)for(e=0;en?0:1<r;r++)t.push(e);return t}function _q(e,t,r){e.pendingLanes|=t;var n=t-1;e.suspendedLanes&=n,e.pingedLanes&=n,e=e.eventTimes,t=31-N5(t),e[t]=r}var N5=Math.clz32?Math.clz32:mze,fze=Math.log,hze=Math.LN2;function mze(e){return e===0?32:31-(fze(e)/hze|0)|0}var vze=ss.unstable_UserBlockingPriority,gze=ss.unstable_runWithPriority,WZ=!0;function yze(e,t,r,n){Q4||cte();var o=mte,i=Q4;Q4=!0;try{jbe(o,e,t,r,n)}finally{(Q4=i)||pte()}}function bze(e,t,r,n){gze(vze,mte.bind(null,e,t,r,n))}function mte(e,t,r,n){if(WZ){var o;if((o=(t&4)===0)&&0=aM),_ye=String.fromCharCode(32),Sye=!1;function qbe(e,t){switch(e){case"keyup":return Hze.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ube(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var zI=!1;function $ze(e,t){switch(e){case"compositionend":return Ube(t);case"keypress":return t.which!==32?null:(Sye=!0,_ye);case"textInput":return e=t.data,e===_ye&&Sye?null:e;default:return null}}function Zze(e,t){if(zI)return e==="compositionend"||!wte&&qbe(e,t)?(e=$be(),HZ=gte=I5=null,zI=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Pye(r)}}function Kbe(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Kbe(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function jye(){for(var e=window,t=KZ();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=KZ(e.document)}return t}function Pee(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var tWe=Dg&&"documentMode"in document&&11>=document.documentMode,WI=null,kee=null,lM=null,jee=!1;function Tye(e,t,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;jee||WI==null||WI!==KZ(n)||(n=WI,"selectionStart"in n&&Pee(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),lM&&OM(lM,n)||(lM=n,n=tq(kee,"onSelect"),0VI||(e.current=Cee[VI],Cee[VI]=null,VI--)}function Ti(e,t){VI++,Cee[VI]=e.current,e.current=t}var F5={},bl=W5(F5),ac=W5(!1),ox=F5;function rE(e,t){var r=e.type.contextTypes;if(!r)return F5;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in r)o[i]=t[i];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function sc(e){return e=e.childContextTypes,e!=null}function oq(){Uo(ac),Uo(bl)}function Fye(e,t,r){if(bl.current!==F5)throw Error(wt(168));Ti(bl,t),Ti(ac,r)}function i2e(e,t,r){var n=e.stateNode;if(e=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var o in n)if(!(o in e))throw Error(wt(108,ZI(t)||"Unknown",o));return ni({},r,n)}function $Z(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||F5,ox=bl.current,Ti(bl,e),Ti(ac,ac.current),!0}function Bye(e,t,r){var n=e.stateNode;if(!n)throw Error(wt(169));r?(e=i2e(e,t,ox),n.__reactInternalMemoizedMergedChildContext=e,Uo(ac),Uo(bl),Ti(bl,e)):Uo(ac),Ti(ac,r)}var xte=null,nx=null,oWe=ss.unstable_runWithPriority,_te=ss.unstable_scheduleCallback,Mee=ss.unstable_cancelCallback,iWe=ss.unstable_shouldYield,zye=ss.unstable_requestPaint,Aee=ss.unstable_now,aWe=ss.unstable_getCurrentPriorityLevel,kq=ss.unstable_ImmediatePriority,a2e=ss.unstable_UserBlockingPriority,s2e=ss.unstable_NormalPriority,l2e=ss.unstable_LowPriority,u2e=ss.unstable_IdlePriority,nee={},sWe=zye!==void 0?zye:function(){},Tg=null,ZZ=null,oee=!1,Wye=Aee(),gl=1e4>Wye?Aee:function(){return Aee()-Wye};function nE(){switch(aWe()){case kq:return 99;case a2e:return 98;case s2e:return 97;case l2e:return 96;case u2e:return 95;default:throw Error(wt(332))}}function c2e(e){switch(e){case 99:return kq;case 98:return a2e;case 97:return s2e;case 96:return l2e;case 95:return u2e;default:throw Error(wt(332))}}function ix(e,t){return e=c2e(e),oWe(e,t)}function _M(e,t,r){return e=c2e(e),_te(e,t,r)}function W0(){if(ZZ!==null){var e=ZZ;ZZ=null,Mee(e)}p2e()}function p2e(){if(!oee&&Tg!==null){oee=!0;var e=0;try{var t=Tg;ix(99,function(){for(;ete?(de=ne,ne=null):de=ne.sibling;var fe=I(A,ne,H[te],q);if(fe===null){ne===null&&(ne=de);break}e&&ne&&fe.alternate===null&&t(A,ne),N=i(fe,N,te),ee===null?Y=fe:ee.sibling=fe,ee=fe,ne=de}if(te===H.length)return r(A,ne),Y;if(ne===null){for(;tete?(de=ne,ne=null):de=ne.sibling;var ye=I(A,ne,fe.value,q);if(ye===null){ne===null&&(ne=de);break}e&&ne&&ye.alternate===null&&t(A,ne),N=i(ye,N,te),ee===null?Y=ye:ee.sibling=ye,ee=ye,ne=de}if(fe.done)return r(A,ne),Y;if(ne===null){for(;!fe.done;te++,fe=H.next())fe=_(A,fe.value,q),fe!==null&&(N=i(fe,N,te),ee===null?Y=fe:ee.sibling=fe,ee=fe);return Y}for(ne=n(A,ne);!fe.done;te++,fe=H.next())fe=R(ne,A,te,fe.value,q),fe!==null&&(e&&fe.alternate!==null&&ne.delete(fe.key===null?te:fe.key),N=i(fe,N,te),ee===null?Y=fe:ee.sibling=fe,ee=fe);return e&&ne.forEach(function(Ie){return t(A,Ie)}),Y}return function(A,N,H,q){var Y=typeof H=="object"&&H!==null&&H.type===S5&&H.key===null;Y&&(H=H.props.children);var ee=typeof H=="object"&&H!==null;if(ee)switch(H.$$typeof){case KC:e:{for(ee=H.key,Y=N;Y!==null;){if(Y.key===ee){switch(Y.tag){case 7:if(H.type===S5){r(A,Y.sibling),N=o(Y,H.props.children),N.return=A,A=N;break e}break;default:if(Y.elementType===H.type){r(A,Y.sibling),N=o(Y,H.props),N.ref=$C(A,Y,H),N.return=A,A=N;break e}}r(A,Y);break}else t(A,Y);Y=Y.sibling}H.type===S5?(N=eE(H.props.children,A.mode,q,H.key),N.return=A,A=N):(q=JZ(H.type,H.key,H.props,null,A.mode,q),q.ref=$C(A,N,H),q.return=A,A=q)}return c(A);case Y4:e:{for(Y=H.key;N!==null;){if(N.key===Y)if(N.tag===4&&N.stateNode.containerInfo===H.containerInfo&&N.stateNode.implementation===H.implementation){r(A,N.sibling),N=o(N,H.children||[]),N.return=A,A=N;break e}else{r(A,N);break}else t(A,N);N=N.sibling}N=cee(H,A.mode,q),N.return=A,A=N}return c(A)}if(typeof H=="string"||typeof H=="number")return H=""+H,N!==null&&N.tag===6?(r(A,N.sibling),N=o(N,H),N.return=A,A=N):(r(A,N),N=uee(H,A.mode,q),N.return=A,A=N),c(A);if(DZ(H))return D(A,N,H,q);if(BC(H))return F(A,N,H,q);if(ee&&LZ(A,H),typeof H>"u"&&!Y)switch(A.tag){case 1:case 22:case 0:case 11:case 15:throw Error(wt(152,ZI(A.type)||"Component"))}return r(A,N)}}var uq=v2e(!0),g2e=v2e(!1),TM={},B0=W5(TM),IM=W5(TM),EM=W5(TM);function tx(e){if(e===TM)throw Error(wt(174));return e}function Dee(e,t){switch(Ti(EM,t),Ti(IM,e),Ti(B0,TM),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:bee(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=bee(t,e)}Uo(B0),Ti(B0,t)}function oE(){Uo(B0),Uo(IM),Uo(EM)}function qye(e){tx(EM.current);var t=tx(B0.current),r=bee(t,e.type);t!==r&&(Ti(IM,e),Ti(B0,r))}function Pte(e){IM.current===e&&(Uo(B0),Uo(IM))}var ji=W5(0);function cq(e){for(var t=e;t!==null;){if(t.tag===13){var r=t.memoizedState;if(r!==null&&(r=r.dehydrated,r===null||r.data==="$?"||r.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&64)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Mg=null,P5=null,z0=!1;function y2e(e,t){var r=kd(5,null,null,0);r.elementType="DELETED",r.type="DELETED",r.stateNode=t,r.return=e,r.flags=8,e.lastEffect!==null?(e.lastEffect.nextEffect=r,e.lastEffect=r):e.firstEffect=e.lastEffect=r}function Uye(e,t){switch(e.tag){case 5:var r=e.type;return t=t.nodeType!==1||r.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,!0):!1;case 13:return!1;default:return!1}}function Lee(e){if(z0){var t=P5;if(t){var r=t;if(!Uye(e,t)){if(t=JI(r.nextSibling),!t||!Uye(e,t)){e.flags=e.flags&-1025|2,z0=!1,Mg=e;return}y2e(Mg,r)}Mg=e,P5=JI(t.firstChild)}else e.flags=e.flags&-1025|2,z0=!1,Mg=e}}function Gye(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;Mg=e}function NZ(e){if(e!==Mg)return!1;if(!z0)return Gye(e),z0=!0,!1;var t=e.type;if(e.tag!==5||t!=="head"&&t!=="body"&&!Tee(t,e.memoizedProps))for(t=P5;t;)y2e(e,t),t=JI(t.nextSibling);if(Gye(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(wt(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var r=e.data;if(r==="/$"){if(t===0){P5=JI(e.nextSibling);break e}t--}else r!=="$"&&r!=="$!"&&r!=="$?"||t++}e=e.nextSibling}P5=null}}else P5=Mg?JI(e.stateNode.nextSibling):null;return!0}function iee(){P5=Mg=null,z0=!1}var KI=[];function kte(){for(var e=0;ei))throw Error(wt(301));i+=1,Bs=vl=null,t.updateQueue=null,uM.current=dWe,e=r(n,o)}while(cM)}if(uM.current=mq,t=vl!==null&&vl.next!==null,PM=0,Bs=vl=Ui=null,pq=!1,t)throw Error(wt(300));return e}function rx(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Bs===null?Ui.memoizedState=Bs=e:Bs=Bs.next=e,Bs}function cx(){if(vl===null){var e=Ui.alternate;e=e!==null?e.memoizedState:null}else e=vl.next;var t=Bs===null?Ui.memoizedState:Bs.next;if(t!==null)Bs=t,vl=e;else{if(e===null)throw Error(wt(310));vl=e,e={memoizedState:vl.memoizedState,baseState:vl.baseState,baseQueue:vl.baseQueue,queue:vl.queue,next:null},Bs===null?Ui.memoizedState=Bs=e:Bs=Bs.next=e}return Bs}function N0(e,t){return typeof t=="function"?t(e):t}function ZC(e){var t=cx(),r=t.queue;if(r===null)throw Error(wt(311));r.lastRenderedReducer=e;var n=vl,o=n.baseQueue,i=r.pending;if(i!==null){if(o!==null){var c=o.next;o.next=i.next,i.next=c}n.baseQueue=o=i,r.pending=null}if(o!==null){o=o.next,n=n.baseState;var d=c=i=null,h=o;do{var v=h.lane;if((PM&v)===v)d!==null&&(d=d.next={lane:0,action:h.action,eagerReducer:h.eagerReducer,eagerState:h.eagerState,next:null}),n=h.eagerReducer===e?h.eagerState:e(n,h.action);else{var w={lane:v,action:h.action,eagerReducer:h.eagerReducer,eagerState:h.eagerState,next:null};d===null?(c=d=w,i=n):d=d.next=w,Ui.lanes|=v,CM|=v}h=h.next}while(h!==null&&h!==o);d===null?i=n:d.next=c,Pd(n,t.memoizedState)||(wh=!0),t.memoizedState=n,t.baseState=i,t.baseQueue=d,r.lastRenderedState=n}return[t.memoizedState,r.dispatch]}function qC(e){var t=cx(),r=t.queue;if(r===null)throw Error(wt(311));r.lastRenderedReducer=e;var n=r.dispatch,o=r.pending,i=t.memoizedState;if(o!==null){r.pending=null;var c=o=o.next;do i=e(i,c.action),c=c.next;while(c!==o);Pd(i,t.memoizedState)||(wh=!0),t.memoizedState=i,t.baseQueue===null&&(t.baseState=i),r.lastRenderedState=i}return[i,n]}function Jye(e,t,r){var n=t._getVersion;n=n(t._source);var o=t._workInProgressVersionPrimary;if(o!==null?e=o===n:(e=e.mutableReadLanes,(e=(PM&e)===e)&&(t._workInProgressVersionPrimary=n,KI.push(t))),e)return r(t._source);throw KI.push(t),Error(wt(350))}function b2e(e,t,r,n){var o=nu;if(o===null)throw Error(wt(349));var i=t._getVersion,c=i(t._source),d=uM.current,h=d.useState(function(){return Jye(o,t,r)}),v=h[1],w=h[0];h=Bs;var _=e.memoizedState,I=_.refs,R=I.getSnapshot,D=_.source;_=_.subscribe;var F=Ui;return e.memoizedState={refs:I,source:t,subscribe:n},d.useEffect(function(){I.getSnapshot=r,I.setSnapshot=v;var A=i(t._source);if(!Pd(c,A)){A=r(t._source),Pd(w,A)||(v(A),A=A5(F),o.mutableReadLanes|=A&o.pendingLanes),A=o.mutableReadLanes,o.entangledLanes|=A;for(var N=o.entanglements,H=A;0r?98:r,function(){e(!0)}),ix(97<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=c.createElement(r,{is:n.is}):(e=c.createElement(r),r==="select"&&(c=e,n.multiple?c.multiple=!0:n.size&&(c.size=n.size))):e=c.createElementNS(e,r),e[E5]=t,e[nq]=n,k2e(e,t,!1,!1),t.stateNode=e,c=Oee(r,n),r){case"dialog":qo("cancel",e),qo("close",e),o=n;break;case"iframe":case"object":case"embed":qo("load",e),o=n;break;case"video":case"audio":for(o=0;oqee&&(t.flags|=64,i=!0,GC(n,!1),t.lanes=33554432)}else{if(!i)if(e=cq(c),e!==null){if(t.flags|=64,i=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),GC(n,!0),n.tail===null&&n.tailMode==="hidden"&&!c.alternate&&!z0)return t=t.lastEffect=n.lastEffect,t!==null&&(t.nextEffect=null),null}else 2*gl()-n.renderingStartTime>qee&&r!==1073741824&&(t.flags|=64,i=!0,GC(n,!1),t.lanes=33554432);n.isBackwards?(c.sibling=t.child,t.child=c):(r=n.last,r!==null?r.sibling=c:t.child=c,n.last=c)}return n.tail!==null?(r=n.tail,n.rendering=r,n.tail=r.sibling,n.lastEffect=t.lastEffect,n.renderingStartTime=gl(),r.sibling=null,t=ji.current,Ti(ji,i?t&1|2:t&1),r):null;case 23:case 24:return Fte(),e!==null&&e.memoizedState!==null!=(t.memoizedState!==null)&&n.mode!=="unstable-defer-without-hiding"&&(t.flags|=4),null}throw Error(wt(156,t.tag))}function mWe(e){switch(e.tag){case 1:sc(e.type)&&oq();var t=e.flags;return t&4096?(e.flags=t&-4097|64,e):null;case 3:if(oE(),Uo(ac),Uo(bl),kte(),t=e.flags,t&64)throw Error(wt(285));return e.flags=t&-4097|64,e;case 5:return Pte(e),null;case 13:return Uo(ji),t=e.flags,t&4096?(e.flags=t&-4097|64,e):null;case 19:return Uo(ji),null;case 4:return oE(),null;case 10:return Ite(e),null;case 23:case 24:return Fte(),null;default:return null}}function Rte(e,t){try{var r="",n=t;do r+=JBe(n),n=n.return;while(n);var o=r}catch(i){o=` Error generating stack: `+i.message+` -`+i.stack}return{value:e,source:t,stack:o}}function zee(e,t){try{console.error(t.value)}catch(r){setTimeout(function(){throw r})}}var vWe=typeof WeakMap=="function"?WeakMap:Map;function C2e(e,t,r){r=T5(-1,r),r.tag=3,r.payload={element:null};var n=t.value;return r.callback=function(){vq||(vq=!0,qee=n),zee(e,t)},r}function M2e(e,t,r){r=T5(-1,r),r.tag=3;var n=e.type.getDerivedStateFromError;if(typeof n=="function"){var o=t.value;r.payload=function(){return zee(e,t),n(o)}}var i=e.stateNode;return i!==null&&typeof i.componentDidCatch=="function"&&(r.callback=function(){typeof n!="function"&&(F0===null?F0=new Set([this]):F0.add(this),zee(e,t));var c=t.stack;this.componentDidCatch(t.value,{componentStack:c!==null?c:""})}),r}var gWe=typeof WeakSet=="function"?WeakSet:Set;function lbe(e){var t=e.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(r){R5(e,r)}else t.current=null}function yWe(e,t){switch(t.tag){case 0:case 11:case 15:case 22:return;case 1:if(t.flags&256&&e!==null){var r=e.memoizedProps,n=e.memoizedState;e=t.stateNode,t=e.getSnapshotBeforeUpdate(t.elementType===t.type?r:bh(t.type,r),n),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:t.flags&256&&wte(t.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(wt(163))}function bWe(e,t,r){switch(r.tag){case 0:case 11:case 15:case 22:if(t=r.updateQueue,t=t!==null?t.lastEffect:null,t!==null){e=t=t.next;do{if((e.tag&3)===3){var n=e.create;e.destroy=n()}e=e.next}while(e!==t)}if(t=r.updateQueue,t=t!==null?t.lastEffect:null,t!==null){e=t=t.next;do{var o=e;n=o.next,o=o.tag,o&4&&o&1&&(W2e(r,e),PWe(r,e)),e=n}while(e!==t)}return;case 1:e=r.stateNode,r.flags&4&&(t===null?e.componentDidMount():(n=r.elementType===r.type?t.memoizedProps:bh(r.type,t.memoizedProps),e.componentDidUpdate(n,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),t=r.updateQueue,t!==null&&Vye(r,t,e);return;case 3:if(t=r.updateQueue,t!==null){if(e=null,r.child!==null)switch(r.child.tag){case 5:e=r.child.stateNode;break;case 1:e=r.child.stateNode}Vye(r,t,e)}return;case 5:e=r.stateNode,t===null&&r.flags&4&&n2e(r.type,r.memoizedProps)&&e.focus();return;case 6:return;case 4:return;case 12:return;case 13:r.memoizedState===null&&(r=r.alternate,r!==null&&(r=r.memoizedState,r!==null&&(r=r.dehydrated,r!==null&&Lbe(r))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(wt(163))}function ube(e,t){for(var r=e;;){if(r.tag===5){var n=r.stateNode;if(t)n=n.style,typeof n.setProperty=="function"?n.setProperty("display","none","important"):n.display="none";else{n=r.stateNode;var o=r.memoizedProps.style;o=o!=null&&o.hasOwnProperty("display")?o.display:null,n.style.display=Ibe("display",o)}}else if(r.tag===6)r.stateNode.nodeValue=t?"":r.memoizedProps;else if((r.tag!==23&&r.tag!==24||r.memoizedState===null||r===e)&&r.child!==null){r.child.return=r,r=r.child;continue}if(r===e)break;for(;r.sibling===null;){if(r.return===null||r.return===e)return;r=r.return}r.sibling.return=r.return,r=r.sibling}}function cbe(e,t){if(nx&&typeof nx.onCommitFiberUnmount=="function")try{nx.onCommitFiberUnmount(Ote,t)}catch{}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(e=t.updateQueue,e!==null&&(e=e.lastEffect,e!==null)){var r=e=e.next;do{var n=r,o=n.destroy;if(n=n.tag,o!==void 0)if(n&4)W2e(t,r);else{n=t;try{o()}catch(i){R5(n,i)}}r=r.next}while(r!==e)}break;case 1:if(lbe(t),e=t.stateNode,typeof e.componentWillUnmount=="function")try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(i){R5(t,i)}break;case 5:lbe(t);break;case 4:A2e(e,t)}}function pbe(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function dbe(e){return e.tag===5||e.tag===3||e.tag===4}function fbe(e){e:{for(var t=e.return;t!==null;){if(dbe(t))break e;t=t.return}throw Error(wt(160))}var r=t;switch(t=r.stateNode,r.tag){case 5:var n=!1;break;case 3:t=t.containerInfo,n=!0;break;case 4:t=t.containerInfo,n=!0;break;default:throw Error(wt(161))}r.flags&16&&(mM(t,""),r.flags&=-17);e:t:for(r=e;;){for(;r.sibling===null;){if(r.return===null||dbe(r.return)){r=null;break e}r=r.return}for(r.sibling.return=r.return,r=r.sibling;r.tag!==5&&r.tag!==6&&r.tag!==18;){if(r.flags&2||r.child===null||r.tag===4)continue t;r.child.return=r,r=r.child}if(!(r.flags&2)){r=r.stateNode;break e}}n?Wee(e,r,t):Hee(e,r,t)}function Wee(e,t,r){var n=e.tag,o=n===5||n===6;if(o)e=o?e.stateNode:e.stateNode.instance,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=tq));else if(n!==4&&(e=e.child,e!==null))for(Wee(e,t,r),e=e.sibling;e!==null;)Wee(e,t,r),e=e.sibling}function Hee(e,t,r){var n=e.tag,o=n===5||n===6;if(o)e=o?e.stateNode:e.stateNode.instance,t?r.insertBefore(e,t):r.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(Hee(e,t,r),e=e.sibling;e!==null;)Hee(e,t,r),e=e.sibling}function A2e(e,t){for(var r=t,n=!1,o,i;;){if(!n){n=r.return;e:for(;;){if(n===null)throw Error(wt(160));switch(o=n.stateNode,n.tag){case 5:i=!1;break e;case 3:o=o.containerInfo,i=!0;break e;case 4:o=o.containerInfo,i=!0;break e}n=n.return}n=!0}if(r.tag===5||r.tag===6){e:for(var c=e,d=r,h=d;;)if(cbe(c,h),h.child!==null&&h.tag!==4)h.child.return=h,h=h.child;else{if(h===d)break e;for(;h.sibling===null;){if(h.return===null||h.return===d)break e;h=h.return}h.sibling.return=h.return,h=h.sibling}i?(c=o,d=r.stateNode,c.nodeType===8?c.parentNode.removeChild(d):c.removeChild(d)):o.removeChild(r.stateNode)}else if(r.tag===4){if(r.child!==null){o=r.stateNode.containerInfo,i=!0,r.child.return=r,r=r.child;continue}}else if(cbe(e,r),r.child!==null){r.child.return=r,r=r.child;continue}if(r===t)break;for(;r.sibling===null;){if(r.return===null||r.return===t)return;r=r.return,r.tag===4&&(n=!1)}r.sibling.return=r.return,r=r.sibling}}function see(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var n=r=r.next;do(n.tag&3)===3&&(e=n.destroy,n.destroy=void 0,e!==void 0&&e()),n=n.next;while(n!==r)}return;case 1:return;case 5:if(r=t.stateNode,r!=null){n=t.memoizedProps;var o=e!==null?e.memoizedProps:n;e=t.type;var i=t.updateQueue;if(t.updateQueue=null,i!==null){for(r[rq]=n,e==="input"&&n.type==="radio"&&n.name!=null&&Obe(r,n),wee(e,o),t=wee(e,n),o=0;oo&&(o=c),r&=~i}if(r=o,r=gl()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*OWe(r/1960))-r,10o&&(o=c),r&=~i}if(r=o,r=gl()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*OWe(r/1960))-r,10 component higher in the tree to provide a loading indicator or placeholder to display.`)}zs!==5&&(zs=2),h=Ate(h,d),I=c;do{switch(I.tag){case 3:i=h,I.flags|=4096,t&=-t,I.lanes|=t;var ee=C2e(I,i,t);Hye(I,ee);break e;case 1:i=h;var ne=I.type,te=I.stateNode;if(!(I.flags&64)&&(typeof ne.getDerivedStateFromError=="function"||te!==null&&typeof te.componentDidCatch=="function"&&(F0===null||!F0.has(te)))){I.flags|=4096,t&=-t,I.lanes|=t;var de=M2e(I,i,t);Hye(I,de);break e}}I=I.return}while(I!==null)}z2e(r)}catch(fe){t=fe,za===r&&r!==null&&(za=r=r.return);continue}break}while(1)}function F2e(){var e=mq.current;return mq.current=hq,e===null?hq:e}function tM(e,t){var r=Dr;Dr|=16;var n=F2e();nu===e&&yl===t||QI(e,t);do try{_We();break}catch(o){N2e(e,o)}while(1);if(_te(),Dr=r,mq.current=n,za!==null)throw Error(wt(261));return nu=null,yl=0,zs}function _We(){for(;za!==null;)B2e(za)}function SWe(){for(;za!==null&&!iWe();)B2e(za)}function B2e(e){var t=H2e(e.alternate,e,ax);e.memoizedProps=e.pendingProps,t===null?z2e(e):za=t,Rte.current=null}function z2e(e){var t=e;do{var r=t.alternate;if(e=t.return,t.flags&2048){if(r=mWe(t),r!==null){r.flags&=2047,za=r;return}e!==null&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}else{if(r=hWe(r,t,ax),r!==null){za=r;return}if(r=t,r.tag!==24&&r.tag!==23||r.memoizedState===null||ax&1073741824||!(r.mode&4)){for(var n=0,o=r.child;o!==null;)n|=o.lanes|o.childLanes,o=o.sibling;r.childLanes=n}e!==null&&!(e.flags&2048)&&(e.firstEffect===null&&(e.firstEffect=t.firstEffect),t.lastEffect!==null&&(e.lastEffect!==null&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1c&&(d=c,c=ee,ee=d),d=kye(H,ee),i=kye(H,c),d&&i&&(Y.rangeCount!==1||Y.anchorNode!==d.node||Y.anchorOffset!==d.offset||Y.focusNode!==i.node||Y.focusOffset!==i.offset)&&(q=q.createRange(),q.setStart(d.node,d.offset),Y.removeAllRanges(),ee>c?(Y.addRange(q),Y.extend(i.node,i.offset)):(q.setEnd(i.node,i.offset),Y.addRange(q)))))),q=[],Y=H;Y=Y.parentNode;)Y.nodeType===1&&q.push({element:Y,left:Y.scrollLeft,top:Y.scrollTop});for(typeof H.focus=="function"&&H.focus(),H=0;Hgl()-Lte?QI(e,0):Dte|=r),Cd(e,t)}function TWe(e,t){var r=e.stateNode;r!==null&&r.delete(t),t=0,t===0&&(t=e.mode,t&2?t&4?(Tg===0&&(Tg=sE),t=FI(62914560&~Tg),t===0&&(t=4194304)):t=nE()===99?1:2:t=1),r=rp(),e=Tq(e,t),e!==null&&(xq(e,t,r),Cd(e,r))}var H2e;H2e=function(e,t,r){var n=t.lanes;if(e!==null)if(e.memoizedProps!==t.pendingProps||ac.current)wh=!0;else if(r&n)wh=!!(e.flags&16384);else{switch(wh=!1,t.tag){case 3:tbe(t),oee();break;case 5:qye(t);break;case 1:sc(t.type)&&VZ(t);break;case 4:Ree(t,t.stateNode.containerInfo);break;case 10:n=t.memoizedProps.value;var o=t.type._context;ji(oq,o._currentValue),o._currentValue=n;break;case 13:if(t.memoizedState!==null)return r&t.child.childLanes?rbe(e,t,r):(ji(ki,ki.current&1),t=Mg(e,t,r),t!==null?t.sibling:null);ji(ki,ki.current&1);break;case 19:if(n=(r&t.childLanes)!==0,e.flags&64){if(n)return sbe(e,t,r);t.flags|=64}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),ji(ki,ki.current),n)break;return null;case 23:case 24:return t.lanes=0,iee(e,t,r)}return Mg(e,t,r)}else wh=!1;switch(t.lanes=0,t.tag){case 2:if(n=t.type,e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=rE(t,bl.current),XI(t,r),o=jte(null,t,n,e,o,r),t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,sc(n)){var i=!0;VZ(t)}else i=!1;t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,Ite(t);var c=n.getDerivedStateFromProps;typeof c=="function"&&sq(t,n,c,e),o.updater=kq,t.stateNode=o,o._reactInternals=t,Aee(t,n,e,r),t=Fee(null,t,n,!0,i,r)}else t.tag=0,ic(null,t,o,r),t=t.child;return t;case 16:o=t.elementType;e:{switch(e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,i=o._init,o=i(o._payload),t.type=o,i=t.tag=MWe(o),e=bh(o,e),i){case 0:t=Nee(null,t,o,e,r);break e;case 1:t=ebe(null,t,o,e,r);break e;case 11:t=Yye(null,t,o,e,r);break e;case 14:t=Qye(null,t,o,bh(o.type,e),n,r);break e}throw Error(wt(306,o,""))}return t;case 0:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:bh(n,o),Nee(e,t,n,o,r);case 1:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:bh(n,o),ebe(e,t,n,o,r);case 3:if(tbe(t),n=t.updateQueue,e===null||n===null)throw Error(wt(282));if(n=t.pendingProps,o=t.memoizedState,o=o!==null?o.element:null,f2e(e,t),SM(t,n,null,r),n=t.memoizedState.element,n===o)oee(),t=Mg(e,t,r);else{if(o=t.stateNode,(i=o.hydrate)&&(E5=JI(t.stateNode.containerInfo.firstChild),Cg=t,i=z0=!0),i){if(e=o.mutableSourceEagerHydrationData,e!=null)for(o=0;o{"use strict";function Z2e(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Z2e)}catch(e){console.error(e)}}Z2e(),q2e.exports=$2e()});var N5e=Ce((Bdr,L5e)=>{"use strict";var oVe="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";L5e.exports=oVe});var W5e=Ce((zdr,z5e)=>{"use strict";var iVe=N5e();function F5e(){}function B5e(){}B5e.resetWarningCache=F5e;z5e.exports=function(){function e(n,o,i,c,d,h){if(h!==iVe){var v=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw v.name="Invariant Violation",v}}e.isRequired=e;function t(){return e}var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:B5e,resetWarningCache:F5e};return r.PropTypes=r,r}});var it=Ce((Vdr,H5e)=>{H5e.exports=W5e()();var Wdr,Hdr});var At=Ce(($dr,oU)=>{(function(){"use strict";var e={}.hasOwnProperty;function t(){for(var o="",i=0;i{"use strict";var us=typeof Symbol=="function"&&Symbol.for,ine=us?Symbol.for("react.element"):60103,ane=us?Symbol.for("react.portal"):60106,XU=us?Symbol.for("react.fragment"):60107,KU=us?Symbol.for("react.strict_mode"):60108,YU=us?Symbol.for("react.profiler"):60114,QU=us?Symbol.for("react.provider"):60109,eG=us?Symbol.for("react.context"):60110,sne=us?Symbol.for("react.async_mode"):60111,tG=us?Symbol.for("react.concurrent_mode"):60111,rG=us?Symbol.for("react.forward_ref"):60112,nG=us?Symbol.for("react.suspense"):60113,nUe=us?Symbol.for("react.suspense_list"):60120,oG=us?Symbol.for("react.memo"):60115,iG=us?Symbol.for("react.lazy"):60116,oUe=us?Symbol.for("react.block"):60121,iUe=us?Symbol.for("react.fundamental"):60117,aUe=us?Symbol.for("react.responder"):60118,sUe=us?Symbol.for("react.scope"):60119;function ap(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case ine:switch(e=e.type,e){case sne:case tG:case XU:case YU:case KU:case nG:return e;default:switch(e=e&&e.$$typeof,e){case eG:case rG:case iG:case oG:case QU:return e;default:return t}}case ane:return t}}}function zwe(e){return ap(e)===tG}uo.AsyncMode=sne;uo.ConcurrentMode=tG;uo.ContextConsumer=eG;uo.ContextProvider=QU;uo.Element=ine;uo.ForwardRef=rG;uo.Fragment=XU;uo.Lazy=iG;uo.Memo=oG;uo.Portal=ane;uo.Profiler=YU;uo.StrictMode=KU;uo.Suspense=nG;uo.isAsyncMode=function(e){return zwe(e)||ap(e)===sne};uo.isConcurrentMode=zwe;uo.isContextConsumer=function(e){return ap(e)===eG};uo.isContextProvider=function(e){return ap(e)===QU};uo.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===ine};uo.isForwardRef=function(e){return ap(e)===rG};uo.isFragment=function(e){return ap(e)===XU};uo.isLazy=function(e){return ap(e)===iG};uo.isMemo=function(e){return ap(e)===oG};uo.isPortal=function(e){return ap(e)===ane};uo.isProfiler=function(e){return ap(e)===YU};uo.isStrictMode=function(e){return ap(e)===KU};uo.isSuspense=function(e){return ap(e)===nG};uo.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===XU||e===tG||e===YU||e===KU||e===nG||e===nUe||typeof e=="object"&&e!==null&&(e.$$typeof===iG||e.$$typeof===oG||e.$$typeof===QU||e.$$typeof===eG||e.$$typeof===rG||e.$$typeof===iUe||e.$$typeof===aUe||e.$$typeof===sUe||e.$$typeof===oUe)};uo.typeOf=ap});var Vwe=Ce((Obr,Hwe)=>{"use strict";Hwe.exports=Wwe()});var Xwe=Ce((xbr,Jwe)=>{"use strict";var lne=Vwe(),lUe={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},uUe={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},cUe={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},Uwe={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},une={};une[lne.ForwardRef]=cUe;une[lne.Memo]=Uwe;function $we(e){return lne.isMemo(e)?Uwe:une[e.$$typeof]||lUe}var pUe=Object.defineProperty,dUe=Object.getOwnPropertyNames,Zwe=Object.getOwnPropertySymbols,fUe=Object.getOwnPropertyDescriptor,hUe=Object.getPrototypeOf,qwe=Object.prototype;function Gwe(e,t,r){if(typeof t!="string"){if(qwe){var n=hUe(t);n&&n!==qwe&&Gwe(e,n,r)}var o=dUe(t);Zwe&&(o=o.concat(Zwe(t)));for(var i=$we(e),c=$we(t),d=0;d{function LUe(){this.__data__=[],this.size=0}hOe.exports=LUe});var fG=Ce((h2r,vOe)=>{function NUe(e,t){return e===t||e!==e&&t!==t}vOe.exports=NUe});var hA=Ce((m2r,gOe)=>{var FUe=fG();function BUe(e,t){for(var r=e.length;r--;)if(FUe(e[r][0],t))return r;return-1}gOe.exports=BUe});var bOe=Ce((v2r,yOe)=>{var zUe=hA(),WUe=Array.prototype,HUe=WUe.splice;function VUe(e){var t=this.__data__,r=zUe(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():HUe.call(t,r,1),--this.size,!0}yOe.exports=VUe});var OOe=Ce((g2r,wOe)=>{var $Ue=hA();function ZUe(e){var t=this.__data__,r=$Ue(t,e);return r<0?void 0:t[r][1]}wOe.exports=ZUe});var _Oe=Ce((y2r,xOe)=>{var qUe=hA();function UUe(e){return qUe(this.__data__,e)>-1}xOe.exports=UUe});var IOe=Ce((b2r,SOe)=>{var GUe=hA();function JUe(e,t){var r=this.__data__,n=GUe(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}SOe.exports=JUe});var mA=Ce((w2r,EOe)=>{var XUe=mOe(),KUe=bOe(),YUe=OOe(),QUe=_Oe(),eGe=IOe();function UE(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t{var tGe=mA();function rGe(){this.__data__=new tGe,this.size=0}POe.exports=rGe});var TOe=Ce((x2r,jOe)=>{function nGe(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}jOe.exports=nGe});var MOe=Ce((_2r,COe)=>{function oGe(e){return this.__data__.get(e)}COe.exports=oGe});var ROe=Ce((S2r,AOe)=>{function iGe(e){return this.__data__.has(e)}AOe.exports=iGe});var bne=Ce((I2r,DOe)=>{var aGe=typeof global=="object"&&global&&global.Object===Object&&global;DOe.exports=aGe});var Th=Ce((E2r,LOe)=>{var sGe=bne(),lGe=typeof self=="object"&&self&&self.Object===Object&&self,uGe=sGe||lGe||Function("return this")();LOe.exports=uGe});var Sx=Ce((P2r,NOe)=>{var cGe=Th(),pGe=cGe.Symbol;NOe.exports=pGe});var WOe=Ce((k2r,zOe)=>{var FOe=Sx(),BOe=Object.prototype,dGe=BOe.hasOwnProperty,fGe=BOe.toString,vA=FOe?FOe.toStringTag:void 0;function hGe(e){var t=dGe.call(e,vA),r=e[vA];try{e[vA]=void 0;var n=!0}catch{}var o=fGe.call(e);return n&&(t?e[vA]=r:delete e[vA]),o}zOe.exports=hGe});var VOe=Ce((j2r,HOe)=>{var mGe=Object.prototype,vGe=mGe.toString;function gGe(e){return vGe.call(e)}HOe.exports=gGe});var U0=Ce((T2r,qOe)=>{var $Oe=Sx(),yGe=WOe(),bGe=VOe(),wGe="[object Null]",OGe="[object Undefined]",ZOe=$Oe?$Oe.toStringTag:void 0;function xGe(e){return e==null?e===void 0?OGe:wGe:ZOe&&ZOe in Object(e)?yGe(e):bGe(e)}qOe.exports=xGe});var Ix=Ce((C2r,UOe)=>{function _Ge(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}UOe.exports=_Ge});var hG=Ce((M2r,GOe)=>{var SGe=U0(),IGe=Ix(),EGe="[object AsyncFunction]",PGe="[object Function]",kGe="[object GeneratorFunction]",jGe="[object Proxy]";function TGe(e){if(!IGe(e))return!1;var t=SGe(e);return t==PGe||t==kGe||t==EGe||t==jGe}GOe.exports=TGe});var XOe=Ce((A2r,JOe)=>{var CGe=Th(),MGe=CGe["__core-js_shared__"];JOe.exports=MGe});var QOe=Ce((R2r,YOe)=>{var wne=XOe(),KOe=function(){var e=/[^.]+$/.exec(wne&&wne.keys&&wne.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function AGe(e){return!!KOe&&KOe in e}YOe.exports=AGe});var One=Ce((D2r,e6e)=>{var RGe=Function.prototype,DGe=RGe.toString;function LGe(e){if(e!=null){try{return DGe.call(e)}catch{}try{return e+""}catch{}}return""}e6e.exports=LGe});var r6e=Ce((L2r,t6e)=>{var NGe=hG(),FGe=QOe(),BGe=Ix(),zGe=One(),WGe=/[\\^$.*+?()[\]{}|]/g,HGe=/^\[object .+?Constructor\]$/,VGe=Function.prototype,$Ge=Object.prototype,ZGe=VGe.toString,qGe=$Ge.hasOwnProperty,UGe=RegExp("^"+ZGe.call(qGe).replace(WGe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function GGe(e){if(!BGe(e)||FGe(e))return!1;var t=NGe(e)?UGe:HGe;return t.test(zGe(e))}t6e.exports=GGe});var o6e=Ce((N2r,n6e)=>{function JGe(e,t){return e?.[t]}n6e.exports=JGe});var o3=Ce((F2r,i6e)=>{var XGe=r6e(),KGe=o6e();function YGe(e,t){var r=KGe(e,t);return XGe(r)?r:void 0}i6e.exports=YGe});var mG=Ce((B2r,a6e)=>{var QGe=o3(),eJe=Th(),tJe=QGe(eJe,"Map");a6e.exports=tJe});var gA=Ce((z2r,s6e)=>{var rJe=o3(),nJe=rJe(Object,"create");s6e.exports=nJe});var c6e=Ce((W2r,u6e)=>{var l6e=gA();function oJe(){this.__data__=l6e?l6e(null):{},this.size=0}u6e.exports=oJe});var d6e=Ce((H2r,p6e)=>{function iJe(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}p6e.exports=iJe});var h6e=Ce((V2r,f6e)=>{var aJe=gA(),sJe="__lodash_hash_undefined__",lJe=Object.prototype,uJe=lJe.hasOwnProperty;function cJe(e){var t=this.__data__;if(aJe){var r=t[e];return r===sJe?void 0:r}return uJe.call(t,e)?t[e]:void 0}f6e.exports=cJe});var v6e=Ce(($2r,m6e)=>{var pJe=gA(),dJe=Object.prototype,fJe=dJe.hasOwnProperty;function hJe(e){var t=this.__data__;return pJe?t[e]!==void 0:fJe.call(t,e)}m6e.exports=hJe});var y6e=Ce((Z2r,g6e)=>{var mJe=gA(),vJe="__lodash_hash_undefined__";function gJe(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=mJe&&t===void 0?vJe:t,this}g6e.exports=gJe});var w6e=Ce((q2r,b6e)=>{var yJe=c6e(),bJe=d6e(),wJe=h6e(),OJe=v6e(),xJe=y6e();function GE(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t{var O6e=w6e(),_Je=mA(),SJe=mG();function IJe(){this.size=0,this.__data__={hash:new O6e,map:new(SJe||_Je),string:new O6e}}x6e.exports=IJe});var I6e=Ce((G2r,S6e)=>{function EJe(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}S6e.exports=EJe});var yA=Ce((J2r,E6e)=>{var PJe=I6e();function kJe(e,t){var r=e.__data__;return PJe(t)?r[typeof t=="string"?"string":"hash"]:r.map}E6e.exports=kJe});var k6e=Ce((X2r,P6e)=>{var jJe=yA();function TJe(e){var t=jJe(this,e).delete(e);return this.size-=t?1:0,t}P6e.exports=TJe});var T6e=Ce((K2r,j6e)=>{var CJe=yA();function MJe(e){return CJe(this,e).get(e)}j6e.exports=MJe});var M6e=Ce((Y2r,C6e)=>{var AJe=yA();function RJe(e){return AJe(this,e).has(e)}C6e.exports=RJe});var R6e=Ce((Q2r,A6e)=>{var DJe=yA();function LJe(e,t){var r=DJe(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}A6e.exports=LJe});var vG=Ce((e5r,D6e)=>{var NJe=_6e(),FJe=k6e(),BJe=T6e(),zJe=M6e(),WJe=R6e();function JE(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t{var HJe=mA(),VJe=mG(),$Je=vG(),ZJe=200;function qJe(e,t){var r=this.__data__;if(r instanceof HJe){var n=r.__data__;if(!VJe||n.length{var UJe=mA(),GJe=kOe(),JJe=TOe(),XJe=MOe(),KJe=ROe(),YJe=N6e();function XE(e){var t=this.__data__=new UJe(e);this.size=t.size}XE.prototype.clear=GJe;XE.prototype.delete=JJe;XE.prototype.get=XJe;XE.prototype.has=KJe;XE.prototype.set=YJe;F6e.exports=XE});var z6e=Ce((n5r,B6e)=>{var QJe="__lodash_hash_undefined__";function eXe(e){return this.__data__.set(e,QJe),this}B6e.exports=eXe});var H6e=Ce((o5r,W6e)=>{function tXe(e){return this.__data__.has(e)}W6e.exports=tXe});var $6e=Ce((i5r,V6e)=>{var rXe=vG(),nXe=z6e(),oXe=H6e();function gG(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new rXe;++t{function iXe(e,t){for(var r=-1,n=e==null?0:e.length;++r{function aXe(e,t){return e.has(t)}U6e.exports=aXe});var _ne=Ce((l5r,J6e)=>{var sXe=$6e(),lXe=q6e(),uXe=G6e(),cXe=1,pXe=2;function dXe(e,t,r,n,o,i){var c=r&cXe,d=e.length,h=t.length;if(d!=h&&!(c&&h>d))return!1;var v=i.get(e),w=i.get(t);if(v&&w)return v==t&&w==e;var _=-1,I=!0,R=r&pXe?new sXe:void 0;for(i.set(e,t),i.set(t,e);++_{var fXe=Th(),hXe=fXe.Uint8Array;X6e.exports=hXe});var Y6e=Ce((c5r,K6e)=>{function mXe(e){var t=-1,r=Array(e.size);return e.forEach(function(n,o){r[++t]=[o,n]}),r}K6e.exports=mXe});var e4e=Ce((p5r,Q6e)=>{function vXe(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}Q6e.exports=vXe});var i4e=Ce((d5r,o4e)=>{var t4e=Sx(),r4e=Sne(),gXe=fG(),yXe=_ne(),bXe=Y6e(),wXe=e4e(),OXe=1,xXe=2,_Xe="[object Boolean]",SXe="[object Date]",IXe="[object Error]",EXe="[object Map]",PXe="[object Number]",kXe="[object RegExp]",jXe="[object Set]",TXe="[object String]",CXe="[object Symbol]",MXe="[object ArrayBuffer]",AXe="[object DataView]",n4e=t4e?t4e.prototype:void 0,Ine=n4e?n4e.valueOf:void 0;function RXe(e,t,r,n,o,i,c){switch(r){case AXe:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case MXe:return!(e.byteLength!=t.byteLength||!i(new r4e(e),new r4e(t)));case _Xe:case SXe:case PXe:return gXe(+e,+t);case IXe:return e.name==t.name&&e.message==t.message;case kXe:case TXe:return e==t+"";case EXe:var d=bXe;case jXe:var h=n&OXe;if(d||(d=wXe),e.size!=t.size&&!h)return!1;var v=c.get(e);if(v)return v==t;n|=xXe,c.set(e,t);var w=yXe(d(e),d(t),n,o,i,c);return c.delete(e),w;case CXe:if(Ine)return Ine.call(e)==Ine.call(t)}return!1}o4e.exports=RXe});var yG=Ce((f5r,a4e)=>{function DXe(e,t){for(var r=-1,n=t.length,o=e.length;++r{var LXe=Array.isArray;s4e.exports=LXe});var Ene=Ce((m5r,l4e)=>{var NXe=yG(),FXe=Ch();function BXe(e,t,r){var n=t(e);return FXe(e)?n:NXe(n,r(e))}l4e.exports=BXe});var c4e=Ce((v5r,u4e)=>{function zXe(e,t){for(var r=-1,n=e==null?0:e.length,o=0,i=[];++r{function WXe(){return[]}p4e.exports=WXe});var bG=Ce((y5r,f4e)=>{var HXe=c4e(),VXe=Pne(),$Xe=Object.prototype,ZXe=$Xe.propertyIsEnumerable,d4e=Object.getOwnPropertySymbols,qXe=d4e?function(e){return e==null?[]:(e=Object(e),HXe(d4e(e),function(t){return ZXe.call(e,t)}))}:VXe;f4e.exports=qXe});var m4e=Ce((b5r,h4e)=>{function UXe(e,t){for(var r=-1,n=Array(e);++r{function GXe(e){return e!=null&&typeof e=="object"}v4e.exports=GXe});var y4e=Ce((O5r,g4e)=>{var JXe=U0(),XXe=zd(),KXe="[object Arguments]";function YXe(e){return XXe(e)&&JXe(e)==KXe}g4e.exports=YXe});var kne=Ce((x5r,O4e)=>{var b4e=y4e(),QXe=zd(),w4e=Object.prototype,eKe=w4e.hasOwnProperty,tKe=w4e.propertyIsEnumerable,rKe=b4e(function(){return arguments}())?b4e:function(e){return QXe(e)&&eKe.call(e,"callee")&&!tKe.call(e,"callee")};O4e.exports=rKe});var _4e=Ce((_5r,x4e)=>{function nKe(){return!1}x4e.exports=nKe});var wG=Ce((bA,KE)=>{var oKe=Th(),iKe=_4e(),E4e=typeof bA=="object"&&bA&&!bA.nodeType&&bA,S4e=E4e&&typeof KE=="object"&&KE&&!KE.nodeType&&KE,aKe=S4e&&S4e.exports===E4e,I4e=aKe?oKe.Buffer:void 0,sKe=I4e?I4e.isBuffer:void 0,lKe=sKe||iKe;KE.exports=lKe});var k4e=Ce((S5r,P4e)=>{var uKe=9007199254740991,cKe=/^(?:0|[1-9]\d*)$/;function pKe(e,t){var r=typeof e;return t=t??uKe,!!t&&(r=="number"||r!="symbol"&&cKe.test(e))&&e>-1&&e%1==0&&e{var dKe=9007199254740991;function fKe(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=dKe}j4e.exports=fKe});var C4e=Ce((E5r,T4e)=>{var hKe=U0(),mKe=jne(),vKe=zd(),gKe="[object Arguments]",yKe="[object Array]",bKe="[object Boolean]",wKe="[object Date]",OKe="[object Error]",xKe="[object Function]",_Ke="[object Map]",SKe="[object Number]",IKe="[object Object]",EKe="[object RegExp]",PKe="[object Set]",kKe="[object String]",jKe="[object WeakMap]",TKe="[object ArrayBuffer]",CKe="[object DataView]",MKe="[object Float32Array]",AKe="[object Float64Array]",RKe="[object Int8Array]",DKe="[object Int16Array]",LKe="[object Int32Array]",NKe="[object Uint8Array]",FKe="[object Uint8ClampedArray]",BKe="[object Uint16Array]",zKe="[object Uint32Array]",Go={};Go[MKe]=Go[AKe]=Go[RKe]=Go[DKe]=Go[LKe]=Go[NKe]=Go[FKe]=Go[BKe]=Go[zKe]=!0;Go[gKe]=Go[yKe]=Go[TKe]=Go[bKe]=Go[CKe]=Go[wKe]=Go[OKe]=Go[xKe]=Go[_Ke]=Go[SKe]=Go[IKe]=Go[EKe]=Go[PKe]=Go[kKe]=Go[jKe]=!1;function WKe(e){return vKe(e)&&mKe(e.length)&&!!Go[hKe(e)]}T4e.exports=WKe});var OG=Ce((P5r,M4e)=>{function HKe(e){return function(t){return e(t)}}M4e.exports=HKe});var xG=Ce((wA,YE)=>{var VKe=bne(),A4e=typeof wA=="object"&&wA&&!wA.nodeType&&wA,OA=A4e&&typeof YE=="object"&&YE&&!YE.nodeType&&YE,$Ke=OA&&OA.exports===A4e,Tne=$Ke&&VKe.process,ZKe=function(){try{var e=OA&&OA.require&&OA.require("util").types;return e||Tne&&Tne.binding&&Tne.binding("util")}catch{}}();YE.exports=ZKe});var Cne=Ce((k5r,L4e)=>{var qKe=C4e(),UKe=OG(),R4e=xG(),D4e=R4e&&R4e.isTypedArray,GKe=D4e?UKe(D4e):qKe;L4e.exports=GKe});var Mne=Ce((j5r,N4e)=>{var JKe=m4e(),XKe=kne(),KKe=Ch(),YKe=wG(),QKe=k4e(),eYe=Cne(),tYe=Object.prototype,rYe=tYe.hasOwnProperty;function nYe(e,t){var r=KKe(e),n=!r&&XKe(e),o=!r&&!n&&YKe(e),i=!r&&!n&&!o&&eYe(e),c=r||n||o||i,d=c?JKe(e.length,String):[],h=d.length;for(var v in e)(t||rYe.call(e,v))&&!(c&&(v=="length"||o&&(v=="offset"||v=="parent")||i&&(v=="buffer"||v=="byteLength"||v=="byteOffset")||QKe(v,h)))&&d.push(v);return d}N4e.exports=nYe});var _G=Ce((T5r,F4e)=>{var oYe=Object.prototype;function iYe(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||oYe;return e===r}F4e.exports=iYe});var Ane=Ce((C5r,B4e)=>{function aYe(e,t){return function(r){return e(t(r))}}B4e.exports=aYe});var W4e=Ce((M5r,z4e)=>{var sYe=Ane(),lYe=sYe(Object.keys,Object);z4e.exports=lYe});var V4e=Ce((A5r,H4e)=>{var uYe=_G(),cYe=W4e(),pYe=Object.prototype,dYe=pYe.hasOwnProperty;function fYe(e){if(!uYe(e))return cYe(e);var t=[];for(var r in Object(e))dYe.call(e,r)&&r!="constructor"&&t.push(r);return t}H4e.exports=fYe});var Rne=Ce((R5r,$4e)=>{var hYe=hG(),mYe=jne();function vYe(e){return e!=null&&mYe(e.length)&&!hYe(e)}$4e.exports=vYe});var SG=Ce((D5r,Z4e)=>{var gYe=Mne(),yYe=V4e(),bYe=Rne();function wYe(e){return bYe(e)?gYe(e):yYe(e)}Z4e.exports=wYe});var Dne=Ce((L5r,q4e)=>{var OYe=Ene(),xYe=bG(),_Ye=SG();function SYe(e){return OYe(e,_Ye,xYe)}q4e.exports=SYe});var J4e=Ce((N5r,G4e)=>{var U4e=Dne(),IYe=1,EYe=Object.prototype,PYe=EYe.hasOwnProperty;function kYe(e,t,r,n,o,i){var c=r&IYe,d=U4e(e),h=d.length,v=U4e(t),w=v.length;if(h!=w&&!c)return!1;for(var _=h;_--;){var I=d[_];if(!(c?I in t:PYe.call(t,I)))return!1}var R=i.get(e),D=i.get(t);if(R&&D)return R==t&&D==e;var F=!0;i.set(e,t),i.set(t,e);for(var A=c;++_{var jYe=o3(),TYe=Th(),CYe=jYe(TYe,"DataView");X4e.exports=CYe});var Q4e=Ce((B5r,Y4e)=>{var MYe=o3(),AYe=Th(),RYe=MYe(AYe,"Promise");Y4e.exports=RYe});var txe=Ce((z5r,exe)=>{var DYe=o3(),LYe=Th(),NYe=DYe(LYe,"Set");exe.exports=NYe});var nxe=Ce((W5r,rxe)=>{var FYe=o3(),BYe=Th(),zYe=FYe(BYe,"WeakMap");rxe.exports=zYe});var xA=Ce((H5r,cxe)=>{var Lne=K4e(),Nne=mG(),Fne=Q4e(),Bne=txe(),zne=nxe(),uxe=U0(),QE=One(),oxe="[object Map]",WYe="[object Object]",ixe="[object Promise]",axe="[object Set]",sxe="[object WeakMap]",lxe="[object DataView]",HYe=QE(Lne),VYe=QE(Nne),$Ye=QE(Fne),ZYe=QE(Bne),qYe=QE(zne),Ex=uxe;(Lne&&Ex(new Lne(new ArrayBuffer(1)))!=lxe||Nne&&Ex(new Nne)!=oxe||Fne&&Ex(Fne.resolve())!=ixe||Bne&&Ex(new Bne)!=axe||zne&&Ex(new zne)!=sxe)&&(Ex=function(e){var t=uxe(e),r=t==WYe?e.constructor:void 0,n=r?QE(r):"";if(n)switch(n){case HYe:return lxe;case VYe:return oxe;case $Ye:return ixe;case ZYe:return axe;case qYe:return sxe}return t});cxe.exports=Ex});var yxe=Ce((V5r,gxe)=>{var Wne=xne(),UYe=_ne(),GYe=i4e(),JYe=J4e(),pxe=xA(),dxe=Ch(),fxe=wG(),XYe=Cne(),KYe=1,hxe="[object Arguments]",mxe="[object Array]",IG="[object Object]",YYe=Object.prototype,vxe=YYe.hasOwnProperty;function QYe(e,t,r,n,o,i){var c=dxe(e),d=dxe(t),h=c?mxe:pxe(e),v=d?mxe:pxe(t);h=h==hxe?IG:h,v=v==hxe?IG:v;var w=h==IG,_=v==IG,I=h==v;if(I&&fxe(e)){if(!fxe(t))return!1;c=!0,w=!1}if(I&&!w)return i||(i=new Wne),c||XYe(e)?UYe(e,t,r,n,o,i):GYe(e,t,h,r,n,o,i);if(!(r&KYe)){var R=w&&vxe.call(e,"__wrapped__"),D=_&&vxe.call(t,"__wrapped__");if(R||D){var F=R?e.value():e,A=D?t.value():t;return i||(i=new Wne),o(F,A,r,n,i)}}return I?(i||(i=new Wne),JYe(e,t,r,n,o,i)):!1}gxe.exports=QYe});var xxe=Ce(($5r,Oxe)=>{var eQe=yxe(),bxe=zd();function wxe(e,t,r,n,o){return e===t?!0:e==null||t==null||!bxe(e)&&!bxe(t)?e!==e&&t!==t:eQe(e,t,r,n,wxe,o)}Oxe.exports=wxe});var Sxe=Ce((Z5r,_xe)=>{var tQe=xxe();function rQe(e,t){return tQe(e,t)}_xe.exports=rQe});var eoe=Ce((Qne,t9)=>{(function(e,t){typeof Qne=="object"&&typeof t9<"u"?t9.exports=t():typeof define=="function"&&define.amd?define(t):e.moment=t()})(Qne,function(){"use strict";var e;function t(){return e.apply(null,arguments)}function r(O){e=O}function n(O){return O instanceof Array||Object.prototype.toString.call(O)==="[object Array]"}function o(O){return O!=null&&Object.prototype.toString.call(O)==="[object Object]"}function i(O,L){return Object.prototype.hasOwnProperty.call(O,L)}function c(O){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(O).length===0;var L;for(L in O)if(i(O,L))return!1;return!0}function d(O){return O===void 0}function h(O){return typeof O=="number"||Object.prototype.toString.call(O)==="[object Number]"}function v(O){return O instanceof Date||Object.prototype.toString.call(O)==="[object Date]"}function w(O,L){var $=[],K,le=O.length;for(K=0;K>>0,K;for(K=0;K<$;K++)if(K in L&&O.call(this,L[K],K,L))return!0;return!1};function A(O){var L=null,$=!1,K=O._d&&!isNaN(O._d.getTime());if(K&&(L=D(O),$=F.call(L.parsedDateParts,function(le){return le!=null}),K=L.overflow<0&&!L.empty&&!L.invalidEra&&!L.invalidMonth&&!L.invalidWeekday&&!L.weekdayMismatch&&!L.nullInput&&!L.invalidFormat&&!L.userInvalidated&&(!L.meridiem||L.meridiem&&$),O._strict&&(K=K&&L.charsLeftOver===0&&L.unusedTokens.length===0&&L.bigHour===void 0)),Object.isFrozen==null||!Object.isFrozen(O))O._isValid=K;else return K;return O._isValid}function N(O){var L=I(NaN);return O!=null?_(D(L),O):D(L).userInvalidated=!0,L}var H=t.momentProperties=[],q=!1;function Y(O,L){var $,K,le,_e=H.length;if(d(L._isAMomentObject)||(O._isAMomentObject=L._isAMomentObject),d(L._i)||(O._i=L._i),d(L._f)||(O._f=L._f),d(L._l)||(O._l=L._l),d(L._strict)||(O._strict=L._strict),d(L._tzm)||(O._tzm=L._tzm),d(L._isUTC)||(O._isUTC=L._isUTC),d(L._offset)||(O._offset=L._offset),d(L._pf)||(O._pf=D(L)),d(L._locale)||(O._locale=L._locale),_e>0)for($=0;$<_e;$++)K=H[$],le=L[K],d(le)||(O[K]=le);return O}function ee(O){Y(this,O),this._d=new Date(O._d!=null?O._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),q===!1&&(q=!0,t.updateOffset(this),q=!1)}function ne(O){return O instanceof ee||O!=null&&O._isAMomentObject!=null}function te(O){t.suppressDeprecationWarnings===!1&&typeof console<"u"&&console.warn&&console.warn("Deprecation warning: "+O)}function de(O,L){var $=!0;return _(function(){if(t.deprecationHandler!=null&&t.deprecationHandler(null,O),$){var K=[],le,_e,We,ut=arguments.length;for(_e=0;_e component higher in the tree to provide a loading indicator or placeholder to display.`)}zs!==5&&(zs=2),h=Rte(h,d),I=c;do{switch(I.tag){case 3:i=h,I.flags|=4096,t&=-t,I.lanes|=t;var ee=C2e(I,i,t);Hye(I,ee);break e;case 1:i=h;var ne=I.type,te=I.stateNode;if(!(I.flags&64)&&(typeof ne.getDerivedStateFromError=="function"||te!==null&&typeof te.componentDidCatch=="function"&&(F0===null||!F0.has(te)))){I.flags|=4096,t&=-t,I.lanes|=t;var de=M2e(I,i,t);Hye(I,de);break e}}I=I.return}while(I!==null)}z2e(r)}catch(fe){t=fe,za===r&&r!==null&&(za=r=r.return);continue}break}while(1)}function F2e(){var e=vq.current;return vq.current=mq,e===null?mq:e}function tM(e,t){var r=Dr;Dr|=16;var n=F2e();nu===e&&yl===t||QI(e,t);do try{_We();break}catch(o){N2e(e,o)}while(1);if(Ste(),Dr=r,vq.current=n,za!==null)throw Error(wt(261));return nu=null,yl=0,zs}function _We(){for(;za!==null;)B2e(za)}function SWe(){for(;za!==null&&!iWe();)B2e(za)}function B2e(e){var t=H2e(e.alternate,e,ax);e.memoizedProps=e.pendingProps,t===null?z2e(e):za=t,Dte.current=null}function z2e(e){var t=e;do{var r=t.alternate;if(e=t.return,t.flags&2048){if(r=mWe(t),r!==null){r.flags&=2047,za=r;return}e!==null&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}else{if(r=hWe(r,t,ax),r!==null){za=r;return}if(r=t,r.tag!==24&&r.tag!==23||r.memoizedState===null||ax&1073741824||!(r.mode&4)){for(var n=0,o=r.child;o!==null;)n|=o.lanes|o.childLanes,o=o.sibling;r.childLanes=n}e!==null&&!(e.flags&2048)&&(e.firstEffect===null&&(e.firstEffect=t.firstEffect),t.lastEffect!==null&&(e.lastEffect!==null&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1c&&(d=c,c=ee,ee=d),d=kye(H,ee),i=kye(H,c),d&&i&&(Y.rangeCount!==1||Y.anchorNode!==d.node||Y.anchorOffset!==d.offset||Y.focusNode!==i.node||Y.focusOffset!==i.offset)&&(q=q.createRange(),q.setStart(d.node,d.offset),Y.removeAllRanges(),ee>c?(Y.addRange(q),Y.extend(i.node,i.offset)):(q.setEnd(i.node,i.offset),Y.addRange(q)))))),q=[],Y=H;Y=Y.parentNode;)Y.nodeType===1&&q.push({element:Y,left:Y.scrollLeft,top:Y.scrollTop});for(typeof H.focus=="function"&&H.focus(),H=0;Hgl()-Nte?QI(e,0):Lte|=r),Cd(e,t)}function TWe(e,t){var r=e.stateNode;r!==null&&r.delete(t),t=0,t===0&&(t=e.mode,t&2?t&4?(Cg===0&&(Cg=sE),t=FI(62914560&~Cg),t===0&&(t=4194304)):t=nE()===99?1:2:t=1),r=rp(),e=Cq(e,t),e!==null&&(_q(e,t,r),Cd(e,r))}var H2e;H2e=function(e,t,r){var n=t.lanes;if(e!==null)if(e.memoizedProps!==t.pendingProps||ac.current)wh=!0;else if(r&n)wh=!!(e.flags&16384);else{switch(wh=!1,t.tag){case 3:tbe(t),iee();break;case 5:qye(t);break;case 1:sc(t.type)&&$Z(t);break;case 4:Dee(t,t.stateNode.containerInfo);break;case 10:n=t.memoizedProps.value;var o=t.type._context;Ti(iq,o._currentValue),o._currentValue=n;break;case 13:if(t.memoizedState!==null)return r&t.child.childLanes?rbe(e,t,r):(Ti(ji,ji.current&1),t=Ag(e,t,r),t!==null?t.sibling:null);Ti(ji,ji.current&1);break;case 19:if(n=(r&t.childLanes)!==0,e.flags&64){if(n)return sbe(e,t,r);t.flags|=64}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),Ti(ji,ji.current),n)break;return null;case 23:case 24:return t.lanes=0,aee(e,t,r)}return Ag(e,t,r)}else wh=!1;switch(t.lanes=0,t.tag){case 2:if(n=t.type,e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=rE(t,bl.current),XI(t,r),o=Tte(null,t,n,e,o,r),t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,sc(n)){var i=!0;$Z(t)}else i=!1;t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,Ete(t);var c=n.getDerivedStateFromProps;typeof c=="function"&&lq(t,n,c,e),o.updater=jq,t.stateNode=o,o._reactInternals=t,Ree(t,n,e,r),t=Bee(null,t,n,!0,i,r)}else t.tag=0,ic(null,t,o,r),t=t.child;return t;case 16:o=t.elementType;e:{switch(e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,i=o._init,o=i(o._payload),t.type=o,i=t.tag=MWe(o),e=bh(o,e),i){case 0:t=Fee(null,t,o,e,r);break e;case 1:t=ebe(null,t,o,e,r);break e;case 11:t=Yye(null,t,o,e,r);break e;case 14:t=Qye(null,t,o,bh(o.type,e),n,r);break e}throw Error(wt(306,o,""))}return t;case 0:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:bh(n,o),Fee(e,t,n,o,r);case 1:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:bh(n,o),ebe(e,t,n,o,r);case 3:if(tbe(t),n=t.updateQueue,e===null||n===null)throw Error(wt(282));if(n=t.pendingProps,o=t.memoizedState,o=o!==null?o.element:null,f2e(e,t),SM(t,n,null,r),n=t.memoizedState.element,n===o)iee(),t=Ag(e,t,r);else{if(o=t.stateNode,(i=o.hydrate)&&(P5=JI(t.stateNode.containerInfo.firstChild),Mg=t,i=z0=!0),i){if(e=o.mutableSourceEagerHydrationData,e!=null)for(o=0;o{"use strict";function Z2e(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Z2e)}catch(e){console.error(e)}}Z2e(),q2e.exports=$2e()});var N5e=Ce((Fdr,L5e)=>{"use strict";var oVe="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";L5e.exports=oVe});var W5e=Ce((Bdr,z5e)=>{"use strict";var iVe=N5e();function F5e(){}function B5e(){}B5e.resetWarningCache=F5e;z5e.exports=function(){function e(n,o,i,c,d,h){if(h!==iVe){var v=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw v.name="Invariant Violation",v}}e.isRequired=e;function t(){return e}var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:B5e,resetWarningCache:F5e};return r.PropTypes=r,r}});var it=Ce((Hdr,H5e)=>{H5e.exports=W5e()();var zdr,Wdr});var At=Ce((Vdr,iU)=>{(function(){"use strict";var e={}.hasOwnProperty;function t(){for(var o="",i=0;i{"use strict";var us=typeof Symbol=="function"&&Symbol.for,ine=us?Symbol.for("react.element"):60103,ane=us?Symbol.for("react.portal"):60106,KU=us?Symbol.for("react.fragment"):60107,YU=us?Symbol.for("react.strict_mode"):60108,QU=us?Symbol.for("react.profiler"):60114,eG=us?Symbol.for("react.provider"):60109,tG=us?Symbol.for("react.context"):60110,sne=us?Symbol.for("react.async_mode"):60111,rG=us?Symbol.for("react.concurrent_mode"):60111,nG=us?Symbol.for("react.forward_ref"):60112,oG=us?Symbol.for("react.suspense"):60113,nUe=us?Symbol.for("react.suspense_list"):60120,iG=us?Symbol.for("react.memo"):60115,aG=us?Symbol.for("react.lazy"):60116,oUe=us?Symbol.for("react.block"):60121,iUe=us?Symbol.for("react.fundamental"):60117,aUe=us?Symbol.for("react.responder"):60118,sUe=us?Symbol.for("react.scope"):60119;function ap(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case ine:switch(e=e.type,e){case sne:case rG:case KU:case QU:case YU:case oG:return e;default:switch(e=e&&e.$$typeof,e){case tG:case nG:case aG:case iG:case eG:return e;default:return t}}case ane:return t}}}function zwe(e){return ap(e)===rG}uo.AsyncMode=sne;uo.ConcurrentMode=rG;uo.ContextConsumer=tG;uo.ContextProvider=eG;uo.Element=ine;uo.ForwardRef=nG;uo.Fragment=KU;uo.Lazy=aG;uo.Memo=iG;uo.Portal=ane;uo.Profiler=QU;uo.StrictMode=YU;uo.Suspense=oG;uo.isAsyncMode=function(e){return zwe(e)||ap(e)===sne};uo.isConcurrentMode=zwe;uo.isContextConsumer=function(e){return ap(e)===tG};uo.isContextProvider=function(e){return ap(e)===eG};uo.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===ine};uo.isForwardRef=function(e){return ap(e)===nG};uo.isFragment=function(e){return ap(e)===KU};uo.isLazy=function(e){return ap(e)===aG};uo.isMemo=function(e){return ap(e)===iG};uo.isPortal=function(e){return ap(e)===ane};uo.isProfiler=function(e){return ap(e)===QU};uo.isStrictMode=function(e){return ap(e)===YU};uo.isSuspense=function(e){return ap(e)===oG};uo.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===KU||e===rG||e===QU||e===YU||e===oG||e===nUe||typeof e=="object"&&e!==null&&(e.$$typeof===aG||e.$$typeof===iG||e.$$typeof===eG||e.$$typeof===tG||e.$$typeof===nG||e.$$typeof===iUe||e.$$typeof===aUe||e.$$typeof===sUe||e.$$typeof===oUe)};uo.typeOf=ap});var Vwe=Ce((wbr,Hwe)=>{"use strict";Hwe.exports=Wwe()});var Xwe=Ce((Obr,Jwe)=>{"use strict";var lne=Vwe(),lUe={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},uUe={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},cUe={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},Uwe={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},une={};une[lne.ForwardRef]=cUe;une[lne.Memo]=Uwe;function $we(e){return lne.isMemo(e)?Uwe:une[e.$$typeof]||lUe}var pUe=Object.defineProperty,dUe=Object.getOwnPropertyNames,Zwe=Object.getOwnPropertySymbols,fUe=Object.getOwnPropertyDescriptor,hUe=Object.getPrototypeOf,qwe=Object.prototype;function Gwe(e,t,r){if(typeof t!="string"){if(qwe){var n=hUe(t);n&&n!==qwe&&Gwe(e,n,r)}var o=dUe(t);Zwe&&(o=o.concat(Zwe(t)));for(var i=$we(e),c=$we(t),d=0;d{function LUe(){this.__data__=[],this.size=0}hOe.exports=LUe});var hG=Ce((f2r,vOe)=>{function NUe(e,t){return e===t||e!==e&&t!==t}vOe.exports=NUe});var mA=Ce((h2r,gOe)=>{var FUe=hG();function BUe(e,t){for(var r=e.length;r--;)if(FUe(e[r][0],t))return r;return-1}gOe.exports=BUe});var bOe=Ce((m2r,yOe)=>{var zUe=mA(),WUe=Array.prototype,HUe=WUe.splice;function VUe(e){var t=this.__data__,r=zUe(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():HUe.call(t,r,1),--this.size,!0}yOe.exports=VUe});var OOe=Ce((v2r,wOe)=>{var $Ue=mA();function ZUe(e){var t=this.__data__,r=$Ue(t,e);return r<0?void 0:t[r][1]}wOe.exports=ZUe});var _Oe=Ce((g2r,xOe)=>{var qUe=mA();function UUe(e){return qUe(this.__data__,e)>-1}xOe.exports=UUe});var IOe=Ce((y2r,SOe)=>{var GUe=mA();function JUe(e,t){var r=this.__data__,n=GUe(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}SOe.exports=JUe});var vA=Ce((b2r,EOe)=>{var XUe=mOe(),KUe=bOe(),YUe=OOe(),QUe=_Oe(),eGe=IOe();function UE(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t{var tGe=vA();function rGe(){this.__data__=new tGe,this.size=0}POe.exports=rGe});var TOe=Ce((O2r,jOe)=>{function nGe(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}jOe.exports=nGe});var MOe=Ce((x2r,COe)=>{function oGe(e){return this.__data__.get(e)}COe.exports=oGe});var ROe=Ce((_2r,AOe)=>{function iGe(e){return this.__data__.has(e)}AOe.exports=iGe});var bne=Ce((S2r,DOe)=>{var aGe=typeof global=="object"&&global&&global.Object===Object&&global;DOe.exports=aGe});var Th=Ce((I2r,LOe)=>{var sGe=bne(),lGe=typeof self=="object"&&self&&self.Object===Object&&self,uGe=sGe||lGe||Function("return this")();LOe.exports=uGe});var Sx=Ce((E2r,NOe)=>{var cGe=Th(),pGe=cGe.Symbol;NOe.exports=pGe});var WOe=Ce((P2r,zOe)=>{var FOe=Sx(),BOe=Object.prototype,dGe=BOe.hasOwnProperty,fGe=BOe.toString,gA=FOe?FOe.toStringTag:void 0;function hGe(e){var t=dGe.call(e,gA),r=e[gA];try{e[gA]=void 0;var n=!0}catch{}var o=fGe.call(e);return n&&(t?e[gA]=r:delete e[gA]),o}zOe.exports=hGe});var VOe=Ce((k2r,HOe)=>{var mGe=Object.prototype,vGe=mGe.toString;function gGe(e){return vGe.call(e)}HOe.exports=gGe});var G0=Ce((j2r,qOe)=>{var $Oe=Sx(),yGe=WOe(),bGe=VOe(),wGe="[object Null]",OGe="[object Undefined]",ZOe=$Oe?$Oe.toStringTag:void 0;function xGe(e){return e==null?e===void 0?OGe:wGe:ZOe&&ZOe in Object(e)?yGe(e):bGe(e)}qOe.exports=xGe});var Ix=Ce((T2r,UOe)=>{function _Ge(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}UOe.exports=_Ge});var mG=Ce((C2r,GOe)=>{var SGe=G0(),IGe=Ix(),EGe="[object AsyncFunction]",PGe="[object Function]",kGe="[object GeneratorFunction]",jGe="[object Proxy]";function TGe(e){if(!IGe(e))return!1;var t=SGe(e);return t==PGe||t==kGe||t==EGe||t==jGe}GOe.exports=TGe});var XOe=Ce((M2r,JOe)=>{var CGe=Th(),MGe=CGe["__core-js_shared__"];JOe.exports=MGe});var QOe=Ce((A2r,YOe)=>{var wne=XOe(),KOe=function(){var e=/[^.]+$/.exec(wne&&wne.keys&&wne.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function AGe(e){return!!KOe&&KOe in e}YOe.exports=AGe});var One=Ce((R2r,e6e)=>{var RGe=Function.prototype,DGe=RGe.toString;function LGe(e){if(e!=null){try{return DGe.call(e)}catch{}try{return e+""}catch{}}return""}e6e.exports=LGe});var r6e=Ce((D2r,t6e)=>{var NGe=mG(),FGe=QOe(),BGe=Ix(),zGe=One(),WGe=/[\\^$.*+?()[\]{}|]/g,HGe=/^\[object .+?Constructor\]$/,VGe=Function.prototype,$Ge=Object.prototype,ZGe=VGe.toString,qGe=$Ge.hasOwnProperty,UGe=RegExp("^"+ZGe.call(qGe).replace(WGe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function GGe(e){if(!BGe(e)||FGe(e))return!1;var t=NGe(e)?UGe:HGe;return t.test(zGe(e))}t6e.exports=GGe});var o6e=Ce((L2r,n6e)=>{function JGe(e,t){return e?.[t]}n6e.exports=JGe});var o3=Ce((N2r,i6e)=>{var XGe=r6e(),KGe=o6e();function YGe(e,t){var r=KGe(e,t);return XGe(r)?r:void 0}i6e.exports=YGe});var vG=Ce((F2r,a6e)=>{var QGe=o3(),eJe=Th(),tJe=QGe(eJe,"Map");a6e.exports=tJe});var yA=Ce((B2r,s6e)=>{var rJe=o3(),nJe=rJe(Object,"create");s6e.exports=nJe});var c6e=Ce((z2r,u6e)=>{var l6e=yA();function oJe(){this.__data__=l6e?l6e(null):{},this.size=0}u6e.exports=oJe});var d6e=Ce((W2r,p6e)=>{function iJe(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}p6e.exports=iJe});var h6e=Ce((H2r,f6e)=>{var aJe=yA(),sJe="__lodash_hash_undefined__",lJe=Object.prototype,uJe=lJe.hasOwnProperty;function cJe(e){var t=this.__data__;if(aJe){var r=t[e];return r===sJe?void 0:r}return uJe.call(t,e)?t[e]:void 0}f6e.exports=cJe});var v6e=Ce((V2r,m6e)=>{var pJe=yA(),dJe=Object.prototype,fJe=dJe.hasOwnProperty;function hJe(e){var t=this.__data__;return pJe?t[e]!==void 0:fJe.call(t,e)}m6e.exports=hJe});var y6e=Ce(($2r,g6e)=>{var mJe=yA(),vJe="__lodash_hash_undefined__";function gJe(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=mJe&&t===void 0?vJe:t,this}g6e.exports=gJe});var w6e=Ce((Z2r,b6e)=>{var yJe=c6e(),bJe=d6e(),wJe=h6e(),OJe=v6e(),xJe=y6e();function GE(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t{var O6e=w6e(),_Je=vA(),SJe=vG();function IJe(){this.size=0,this.__data__={hash:new O6e,map:new(SJe||_Je),string:new O6e}}x6e.exports=IJe});var I6e=Ce((U2r,S6e)=>{function EJe(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}S6e.exports=EJe});var bA=Ce((G2r,E6e)=>{var PJe=I6e();function kJe(e,t){var r=e.__data__;return PJe(t)?r[typeof t=="string"?"string":"hash"]:r.map}E6e.exports=kJe});var k6e=Ce((J2r,P6e)=>{var jJe=bA();function TJe(e){var t=jJe(this,e).delete(e);return this.size-=t?1:0,t}P6e.exports=TJe});var T6e=Ce((X2r,j6e)=>{var CJe=bA();function MJe(e){return CJe(this,e).get(e)}j6e.exports=MJe});var M6e=Ce((K2r,C6e)=>{var AJe=bA();function RJe(e){return AJe(this,e).has(e)}C6e.exports=RJe});var R6e=Ce((Y2r,A6e)=>{var DJe=bA();function LJe(e,t){var r=DJe(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}A6e.exports=LJe});var gG=Ce((Q2r,D6e)=>{var NJe=_6e(),FJe=k6e(),BJe=T6e(),zJe=M6e(),WJe=R6e();function JE(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t{var HJe=vA(),VJe=vG(),$Je=gG(),ZJe=200;function qJe(e,t){var r=this.__data__;if(r instanceof HJe){var n=r.__data__;if(!VJe||n.length{var UJe=vA(),GJe=kOe(),JJe=TOe(),XJe=MOe(),KJe=ROe(),YJe=N6e();function XE(e){var t=this.__data__=new UJe(e);this.size=t.size}XE.prototype.clear=GJe;XE.prototype.delete=JJe;XE.prototype.get=XJe;XE.prototype.has=KJe;XE.prototype.set=YJe;F6e.exports=XE});var z6e=Ce((r5r,B6e)=>{var QJe="__lodash_hash_undefined__";function eXe(e){return this.__data__.set(e,QJe),this}B6e.exports=eXe});var H6e=Ce((n5r,W6e)=>{function tXe(e){return this.__data__.has(e)}W6e.exports=tXe});var $6e=Ce((o5r,V6e)=>{var rXe=gG(),nXe=z6e(),oXe=H6e();function yG(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new rXe;++t{function iXe(e,t){for(var r=-1,n=e==null?0:e.length;++r{function aXe(e,t){return e.has(t)}U6e.exports=aXe});var _ne=Ce((s5r,J6e)=>{var sXe=$6e(),lXe=q6e(),uXe=G6e(),cXe=1,pXe=2;function dXe(e,t,r,n,o,i){var c=r&cXe,d=e.length,h=t.length;if(d!=h&&!(c&&h>d))return!1;var v=i.get(e),w=i.get(t);if(v&&w)return v==t&&w==e;var _=-1,I=!0,R=r&pXe?new sXe:void 0;for(i.set(e,t),i.set(t,e);++_{var fXe=Th(),hXe=fXe.Uint8Array;X6e.exports=hXe});var Y6e=Ce((u5r,K6e)=>{function mXe(e){var t=-1,r=Array(e.size);return e.forEach(function(n,o){r[++t]=[o,n]}),r}K6e.exports=mXe});var e4e=Ce((c5r,Q6e)=>{function vXe(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}Q6e.exports=vXe});var i4e=Ce((p5r,o4e)=>{var t4e=Sx(),r4e=Sne(),gXe=hG(),yXe=_ne(),bXe=Y6e(),wXe=e4e(),OXe=1,xXe=2,_Xe="[object Boolean]",SXe="[object Date]",IXe="[object Error]",EXe="[object Map]",PXe="[object Number]",kXe="[object RegExp]",jXe="[object Set]",TXe="[object String]",CXe="[object Symbol]",MXe="[object ArrayBuffer]",AXe="[object DataView]",n4e=t4e?t4e.prototype:void 0,Ine=n4e?n4e.valueOf:void 0;function RXe(e,t,r,n,o,i,c){switch(r){case AXe:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case MXe:return!(e.byteLength!=t.byteLength||!i(new r4e(e),new r4e(t)));case _Xe:case SXe:case PXe:return gXe(+e,+t);case IXe:return e.name==t.name&&e.message==t.message;case kXe:case TXe:return e==t+"";case EXe:var d=bXe;case jXe:var h=n&OXe;if(d||(d=wXe),e.size!=t.size&&!h)return!1;var v=c.get(e);if(v)return v==t;n|=xXe,c.set(e,t);var w=yXe(d(e),d(t),n,o,i,c);return c.delete(e),w;case CXe:if(Ine)return Ine.call(e)==Ine.call(t)}return!1}o4e.exports=RXe});var bG=Ce((d5r,a4e)=>{function DXe(e,t){for(var r=-1,n=t.length,o=e.length;++r{var LXe=Array.isArray;s4e.exports=LXe});var Ene=Ce((h5r,l4e)=>{var NXe=bG(),FXe=Ch();function BXe(e,t,r){var n=t(e);return FXe(e)?n:NXe(n,r(e))}l4e.exports=BXe});var c4e=Ce((m5r,u4e)=>{function zXe(e,t){for(var r=-1,n=e==null?0:e.length,o=0,i=[];++r{function WXe(){return[]}p4e.exports=WXe});var wG=Ce((g5r,f4e)=>{var HXe=c4e(),VXe=Pne(),$Xe=Object.prototype,ZXe=$Xe.propertyIsEnumerable,d4e=Object.getOwnPropertySymbols,qXe=d4e?function(e){return e==null?[]:(e=Object(e),HXe(d4e(e),function(t){return ZXe.call(e,t)}))}:VXe;f4e.exports=qXe});var m4e=Ce((y5r,h4e)=>{function UXe(e,t){for(var r=-1,n=Array(e);++r{function GXe(e){return e!=null&&typeof e=="object"}v4e.exports=GXe});var y4e=Ce((w5r,g4e)=>{var JXe=G0(),XXe=zd(),KXe="[object Arguments]";function YXe(e){return XXe(e)&&JXe(e)==KXe}g4e.exports=YXe});var kne=Ce((O5r,O4e)=>{var b4e=y4e(),QXe=zd(),w4e=Object.prototype,eKe=w4e.hasOwnProperty,tKe=w4e.propertyIsEnumerable,rKe=b4e(function(){return arguments}())?b4e:function(e){return QXe(e)&&eKe.call(e,"callee")&&!tKe.call(e,"callee")};O4e.exports=rKe});var _4e=Ce((x5r,x4e)=>{function nKe(){return!1}x4e.exports=nKe});var OG=Ce((wA,KE)=>{var oKe=Th(),iKe=_4e(),E4e=typeof wA=="object"&&wA&&!wA.nodeType&&wA,S4e=E4e&&typeof KE=="object"&&KE&&!KE.nodeType&&KE,aKe=S4e&&S4e.exports===E4e,I4e=aKe?oKe.Buffer:void 0,sKe=I4e?I4e.isBuffer:void 0,lKe=sKe||iKe;KE.exports=lKe});var k4e=Ce((_5r,P4e)=>{var uKe=9007199254740991,cKe=/^(?:0|[1-9]\d*)$/;function pKe(e,t){var r=typeof e;return t=t??uKe,!!t&&(r=="number"||r!="symbol"&&cKe.test(e))&&e>-1&&e%1==0&&e{var dKe=9007199254740991;function fKe(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=dKe}j4e.exports=fKe});var C4e=Ce((I5r,T4e)=>{var hKe=G0(),mKe=jne(),vKe=zd(),gKe="[object Arguments]",yKe="[object Array]",bKe="[object Boolean]",wKe="[object Date]",OKe="[object Error]",xKe="[object Function]",_Ke="[object Map]",SKe="[object Number]",IKe="[object Object]",EKe="[object RegExp]",PKe="[object Set]",kKe="[object String]",jKe="[object WeakMap]",TKe="[object ArrayBuffer]",CKe="[object DataView]",MKe="[object Float32Array]",AKe="[object Float64Array]",RKe="[object Int8Array]",DKe="[object Int16Array]",LKe="[object Int32Array]",NKe="[object Uint8Array]",FKe="[object Uint8ClampedArray]",BKe="[object Uint16Array]",zKe="[object Uint32Array]",Go={};Go[MKe]=Go[AKe]=Go[RKe]=Go[DKe]=Go[LKe]=Go[NKe]=Go[FKe]=Go[BKe]=Go[zKe]=!0;Go[gKe]=Go[yKe]=Go[TKe]=Go[bKe]=Go[CKe]=Go[wKe]=Go[OKe]=Go[xKe]=Go[_Ke]=Go[SKe]=Go[IKe]=Go[EKe]=Go[PKe]=Go[kKe]=Go[jKe]=!1;function WKe(e){return vKe(e)&&mKe(e.length)&&!!Go[hKe(e)]}T4e.exports=WKe});var xG=Ce((E5r,M4e)=>{function HKe(e){return function(t){return e(t)}}M4e.exports=HKe});var _G=Ce((OA,YE)=>{var VKe=bne(),A4e=typeof OA=="object"&&OA&&!OA.nodeType&&OA,xA=A4e&&typeof YE=="object"&&YE&&!YE.nodeType&&YE,$Ke=xA&&xA.exports===A4e,Tne=$Ke&&VKe.process,ZKe=function(){try{var e=xA&&xA.require&&xA.require("util").types;return e||Tne&&Tne.binding&&Tne.binding("util")}catch{}}();YE.exports=ZKe});var Cne=Ce((P5r,L4e)=>{var qKe=C4e(),UKe=xG(),R4e=_G(),D4e=R4e&&R4e.isTypedArray,GKe=D4e?UKe(D4e):qKe;L4e.exports=GKe});var Mne=Ce((k5r,N4e)=>{var JKe=m4e(),XKe=kne(),KKe=Ch(),YKe=OG(),QKe=k4e(),eYe=Cne(),tYe=Object.prototype,rYe=tYe.hasOwnProperty;function nYe(e,t){var r=KKe(e),n=!r&&XKe(e),o=!r&&!n&&YKe(e),i=!r&&!n&&!o&&eYe(e),c=r||n||o||i,d=c?JKe(e.length,String):[],h=d.length;for(var v in e)(t||rYe.call(e,v))&&!(c&&(v=="length"||o&&(v=="offset"||v=="parent")||i&&(v=="buffer"||v=="byteLength"||v=="byteOffset")||QKe(v,h)))&&d.push(v);return d}N4e.exports=nYe});var SG=Ce((j5r,F4e)=>{var oYe=Object.prototype;function iYe(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||oYe;return e===r}F4e.exports=iYe});var Ane=Ce((T5r,B4e)=>{function aYe(e,t){return function(r){return e(t(r))}}B4e.exports=aYe});var W4e=Ce((C5r,z4e)=>{var sYe=Ane(),lYe=sYe(Object.keys,Object);z4e.exports=lYe});var V4e=Ce((M5r,H4e)=>{var uYe=SG(),cYe=W4e(),pYe=Object.prototype,dYe=pYe.hasOwnProperty;function fYe(e){if(!uYe(e))return cYe(e);var t=[];for(var r in Object(e))dYe.call(e,r)&&r!="constructor"&&t.push(r);return t}H4e.exports=fYe});var Rne=Ce((A5r,$4e)=>{var hYe=mG(),mYe=jne();function vYe(e){return e!=null&&mYe(e.length)&&!hYe(e)}$4e.exports=vYe});var IG=Ce((R5r,Z4e)=>{var gYe=Mne(),yYe=V4e(),bYe=Rne();function wYe(e){return bYe(e)?gYe(e):yYe(e)}Z4e.exports=wYe});var Dne=Ce((D5r,q4e)=>{var OYe=Ene(),xYe=wG(),_Ye=IG();function SYe(e){return OYe(e,_Ye,xYe)}q4e.exports=SYe});var J4e=Ce((L5r,G4e)=>{var U4e=Dne(),IYe=1,EYe=Object.prototype,PYe=EYe.hasOwnProperty;function kYe(e,t,r,n,o,i){var c=r&IYe,d=U4e(e),h=d.length,v=U4e(t),w=v.length;if(h!=w&&!c)return!1;for(var _=h;_--;){var I=d[_];if(!(c?I in t:PYe.call(t,I)))return!1}var R=i.get(e),D=i.get(t);if(R&&D)return R==t&&D==e;var F=!0;i.set(e,t),i.set(t,e);for(var A=c;++_{var jYe=o3(),TYe=Th(),CYe=jYe(TYe,"DataView");X4e.exports=CYe});var Q4e=Ce((F5r,Y4e)=>{var MYe=o3(),AYe=Th(),RYe=MYe(AYe,"Promise");Y4e.exports=RYe});var txe=Ce((B5r,exe)=>{var DYe=o3(),LYe=Th(),NYe=DYe(LYe,"Set");exe.exports=NYe});var nxe=Ce((z5r,rxe)=>{var FYe=o3(),BYe=Th(),zYe=FYe(BYe,"WeakMap");rxe.exports=zYe});var _A=Ce((W5r,cxe)=>{var Lne=K4e(),Nne=vG(),Fne=Q4e(),Bne=txe(),zne=nxe(),uxe=G0(),QE=One(),oxe="[object Map]",WYe="[object Object]",ixe="[object Promise]",axe="[object Set]",sxe="[object WeakMap]",lxe="[object DataView]",HYe=QE(Lne),VYe=QE(Nne),$Ye=QE(Fne),ZYe=QE(Bne),qYe=QE(zne),Ex=uxe;(Lne&&Ex(new Lne(new ArrayBuffer(1)))!=lxe||Nne&&Ex(new Nne)!=oxe||Fne&&Ex(Fne.resolve())!=ixe||Bne&&Ex(new Bne)!=axe||zne&&Ex(new zne)!=sxe)&&(Ex=function(e){var t=uxe(e),r=t==WYe?e.constructor:void 0,n=r?QE(r):"";if(n)switch(n){case HYe:return lxe;case VYe:return oxe;case $Ye:return ixe;case ZYe:return axe;case qYe:return sxe}return t});cxe.exports=Ex});var yxe=Ce((H5r,gxe)=>{var Wne=xne(),UYe=_ne(),GYe=i4e(),JYe=J4e(),pxe=_A(),dxe=Ch(),fxe=OG(),XYe=Cne(),KYe=1,hxe="[object Arguments]",mxe="[object Array]",EG="[object Object]",YYe=Object.prototype,vxe=YYe.hasOwnProperty;function QYe(e,t,r,n,o,i){var c=dxe(e),d=dxe(t),h=c?mxe:pxe(e),v=d?mxe:pxe(t);h=h==hxe?EG:h,v=v==hxe?EG:v;var w=h==EG,_=v==EG,I=h==v;if(I&&fxe(e)){if(!fxe(t))return!1;c=!0,w=!1}if(I&&!w)return i||(i=new Wne),c||XYe(e)?UYe(e,t,r,n,o,i):GYe(e,t,h,r,n,o,i);if(!(r&KYe)){var R=w&&vxe.call(e,"__wrapped__"),D=_&&vxe.call(t,"__wrapped__");if(R||D){var F=R?e.value():e,A=D?t.value():t;return i||(i=new Wne),o(F,A,r,n,i)}}return I?(i||(i=new Wne),JYe(e,t,r,n,o,i)):!1}gxe.exports=QYe});var xxe=Ce((V5r,Oxe)=>{var eQe=yxe(),bxe=zd();function wxe(e,t,r,n,o){return e===t?!0:e==null||t==null||!bxe(e)&&!bxe(t)?e!==e&&t!==t:eQe(e,t,r,n,wxe,o)}Oxe.exports=wxe});var Sxe=Ce(($5r,_xe)=>{var tQe=xxe();function rQe(e,t){return tQe(e,t)}_xe.exports=rQe});var eoe=Ce((Qne,t9)=>{(function(e,t){typeof Qne=="object"&&typeof t9<"u"?t9.exports=t():typeof define=="function"&&define.amd?define(t):e.moment=t()})(Qne,function(){"use strict";var e;function t(){return e.apply(null,arguments)}function r(O){e=O}function n(O){return O instanceof Array||Object.prototype.toString.call(O)==="[object Array]"}function o(O){return O!=null&&Object.prototype.toString.call(O)==="[object Object]"}function i(O,L){return Object.prototype.hasOwnProperty.call(O,L)}function c(O){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(O).length===0;var L;for(L in O)if(i(O,L))return!1;return!0}function d(O){return O===void 0}function h(O){return typeof O=="number"||Object.prototype.toString.call(O)==="[object Number]"}function v(O){return O instanceof Date||Object.prototype.toString.call(O)==="[object Date]"}function w(O,L){var $=[],K,le=O.length;for(K=0;K>>0,K;for(K=0;K<$;K++)if(K in L&&O.call(this,L[K],K,L))return!0;return!1};function A(O){var L=null,$=!1,K=O._d&&!isNaN(O._d.getTime());if(K&&(L=D(O),$=F.call(L.parsedDateParts,function(le){return le!=null}),K=L.overflow<0&&!L.empty&&!L.invalidEra&&!L.invalidMonth&&!L.invalidWeekday&&!L.weekdayMismatch&&!L.nullInput&&!L.invalidFormat&&!L.userInvalidated&&(!L.meridiem||L.meridiem&&$),O._strict&&(K=K&&L.charsLeftOver===0&&L.unusedTokens.length===0&&L.bigHour===void 0)),Object.isFrozen==null||!Object.isFrozen(O))O._isValid=K;else return K;return O._isValid}function N(O){var L=I(NaN);return O!=null?_(D(L),O):D(L).userInvalidated=!0,L}var H=t.momentProperties=[],q=!1;function Y(O,L){var $,K,le,Se=H.length;if(d(L._isAMomentObject)||(O._isAMomentObject=L._isAMomentObject),d(L._i)||(O._i=L._i),d(L._f)||(O._f=L._f),d(L._l)||(O._l=L._l),d(L._strict)||(O._strict=L._strict),d(L._tzm)||(O._tzm=L._tzm),d(L._isUTC)||(O._isUTC=L._isUTC),d(L._offset)||(O._offset=L._offset),d(L._pf)||(O._pf=D(L)),d(L._locale)||(O._locale=L._locale),Se>0)for($=0;$=0;return(_e?$?"+":"":"-")+Math.pow(10,Math.max(0,le)).toString().substr(1)+K}var He=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Je=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,vt={},Qe={};function Ne(O,L,$,K){var le=K;typeof K=="string"&&(le=function(){return this[K]()}),O&&(Qe[O]=le),L&&(Qe[L[0]]=function(){return De(le.apply(this,arguments),L[1],L[2])}),$&&(Qe[$]=function(){return this.localeData().ordinal(le.apply(this,arguments),O)})}function Nt(O){return O.match(/\[[\s\S]/)?O.replace(/^\[|\]$/g,""):O.replace(/\\/g,"")}function Vt(O){var L=O.match(He),$,K;for($=0,K=L.length;$=0&&Je.test(O);)O=O.replace(Je,K),Je.lastIndex=0,$-=1;return O}var Tt={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function wr(O){var L=this._longDateFormat[O],$=this._longDateFormat[O.toUpperCase()];return L||!$?L:(this._longDateFormat[O]=$.match(He).map(function(K){return K==="MMMM"||K==="MM"||K==="DD"||K==="dddd"?K.slice(1):K}).join(""),this._longDateFormat[O])}var Rt="Invalid date";function Ut(){return this._invalidDate}var vr="%d",Sr=/\d{1,2}/;function Er(O){return this._ordinal.replace("%d",O)}var po={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Pn(O,L,$,K){var le=this._relativeTime[$];return Ie(le)?le(O,L,$,K):le.replace(/%d/i,O)}function Nr(O,L){var $=this._relativeTime[O>0?"future":"past"];return Ie($)?$(L):$.replace(/%s/i,L)}var Wo={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function Cr(O){return typeof O=="string"?Wo[O]||Wo[O.toLowerCase()]:void 0}function St(O){var L={},$,K;for(K in O)i(O,K)&&($=Cr(K),$&&(L[$]=O[K]));return L}var tn={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function Ks(O){var L=[],$;for($ in O)i(O,$)&&L.push({unit:$,priority:tn[$]});return L.sort(function(K,le){return K.priority-le.priority}),L}var hs=/\d/,Pr=/\d\d/,or=/\d{3}/,ir=/\d{4}/,Mr=/[+-]?\d{6}/,Ur=/\d\d?/,ms=/\d\d\d\d?/,Nn=/\d\d\d\d\d\d?/,Ri=/\d{1,3}/,Xn=/\d{1,4}/,ya=/[+-]?\d{1,6}/,ba=/\d+/,wa=/[+-]?\d+/,v1=/Z|[+-]\d\d:?\d\d/gi,Kd=/Z|[+-]\d\d(?::?\d\d)?/gi,yc=/[+-]?\d+(\.\d{1,3})?/,Za=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,li=/^[1-9]\d?/,Op=/^([1-9]\d|\d)/,Rl;Rl={};function Ct(O,L,$){Rl[O]=Ie(L)?L:function(K,le){return K&&$?$:L}}function Yd(O,L){return i(Rl,O)?Rl[O](L._strict,L._locale):new RegExp(Qd(O))}function Qd(O){return Ki(O.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(L,$,K,le,_e){return $||K||le||_e}))}function Ki(O){return O.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function fo(O){return O<0?Math.ceil(O)||0:Math.floor(O)}function rn(O){var L=+O,$=0;return L!==0&&isFinite(L)&&($=fo(L)),$}var Hh={};function pn(O,L){var $,K=L,le;for(typeof O=="string"&&(O=[O]),h(L)&&(K=function(_e,We){We[L]=rn(_e)}),le=O.length,$=0;$68?1900:2e3)};var bc=Oa("FullYear",!0);function Dl(){return xp(this.year())}function Oa(O,L){return function($){return $!=null?(Di(this,O,$),t.updateOffset(this,L),this):wc(this,O)}}function wc(O,L){if(!O.isValid())return NaN;var $=O._d,K=O._isUTC;switch(L){case"Milliseconds":return K?$.getUTCMilliseconds():$.getMilliseconds();case"Seconds":return K?$.getUTCSeconds():$.getSeconds();case"Minutes":return K?$.getUTCMinutes():$.getMinutes();case"Hours":return K?$.getUTCHours():$.getHours();case"Date":return K?$.getUTCDate():$.getDate();case"Day":return K?$.getUTCDay():$.getDay();case"Month":return K?$.getUTCMonth():$.getMonth();case"FullYear":return K?$.getUTCFullYear():$.getFullYear();default:return NaN}}function Di(O,L,$){var K,le,_e,We,ut;if(!(!O.isValid()||isNaN($))){switch(K=O._d,le=O._isUTC,L){case"Milliseconds":return void(le?K.setUTCMilliseconds($):K.setMilliseconds($));case"Seconds":return void(le?K.setUTCSeconds($):K.setSeconds($));case"Minutes":return void(le?K.setUTCMinutes($):K.setMinutes($));case"Hours":return void(le?K.setUTCHours($):K.setHours($));case"Date":return void(le?K.setUTCDate($):K.setDate($));case"FullYear":break;default:return}_e=$,We=O.month(),ut=O.date(),ut=ut===29&&We===1&&!xp(_e)?28:ut,le?K.setUTCFullYear(_e,We,ut):K.setFullYear(_e,We,ut)}}function ea(O){return O=Cr(O),Ie(this[O])?this[O]():this}function hy(O,L){if(typeof O=="object"){O=St(O);var $=Ks(O),K,le=$.length;for(K=0;K=0?(ut=new Date(O+400,L,$,K,le,_e,We),isFinite(ut.getFullYear())&&ut.setFullYear(O)):ut=new Date(O,L,$,K,le,_e,We),ut}function rf(O){var L,$;return O<100&&O>=0?($=Array.prototype.slice.call(arguments),$[0]=O+400,L=new Date(Date.UTC.apply(null,$)),isFinite(L.getUTCFullYear())&&L.setUTCFullYear(O)):L=new Date(Date.UTC.apply(null,arguments)),L}function $h(O,L,$){var K=7+L-$,le=(7+rf(O,0,K).getUTCDay()-L)%7;return-le+K-1}function wy(O,L,$,K,le){var _e=(7+$-K)%7,We=$h(O,K,le),ut=1+7*(L-1)+_e+We,cr,Vr;return ut<=0?(cr=O-1,Vr=yu(cr)+ut):ut>yu(O)?(cr=O+1,Vr=ut-yu(O)):(cr=O,Vr=ut),{year:cr,dayOfYear:Vr}}function bu(O,L,$){var K=$h(O.year(),L,$),le=Math.floor((O.dayOfYear()-K-1)/7)+1,_e,We;return le<1?(We=O.year()-1,_e=le+Nl(We,L,$)):le>Nl(O.year(),L,$)?(_e=le-Nl(O.year(),L,$),We=O.year()+1):(We=O.year(),_e=le),{week:_e,year:We}}function Nl(O,L,$){var K=$h(O,L,$),le=$h(O+1,L,$);return(yu(O)-K+le)/7}Ne("w",["ww",2],"wo","week"),Ne("W",["WW",2],"Wo","isoWeek"),Ct("w",Ur,li),Ct("ww",Ur,Pr),Ct("W",Ur,li),Ct("WW",Ur,Pr),Ko(["w","ww","W","WW"],function(O,L,$,K){L[K.substr(0,1)]=rn(O)});function Zh(O){return bu(O,this._week.dow,this._week.doy).week}var Ip={dow:0,doy:6};function qh(){return this._week.dow}function y1(){return this._week.doy}function Oy(O){var L=this.localeData().week(this);return O==null?L:this.add((O-L)*7,"d")}function wu(O){var L=bu(this,1,4).week;return O==null?L:this.add((O-L)*7,"d")}Ne("d",0,"do","day"),Ne("dd",0,0,function(O){return this.localeData().weekdaysMin(this,O)}),Ne("ddd",0,0,function(O){return this.localeData().weekdaysShort(this,O)}),Ne("dddd",0,0,function(O){return this.localeData().weekdays(this,O)}),Ne("e",0,0,"weekday"),Ne("E",0,0,"isoWeekday"),Ct("d",Ur),Ct("e",Ur),Ct("E",Ur),Ct("dd",function(O,L){return L.weekdaysMinRegex(O)}),Ct("ddd",function(O,L){return L.weekdaysShortRegex(O)}),Ct("dddd",function(O,L){return L.weekdaysRegex(O)}),Ko(["dd","ddd","dddd"],function(O,L,$,K){var le=$._locale.weekdaysParse(O,K,$._strict);le!=null?L.d=le:D($).invalidWeekday=O}),Ko(["d","e","E"],function(O,L,$,K){L[K]=rn(O)});function Uh(O,L){return typeof O!="string"?O:isNaN(O)?(O=L.weekdaysParse(O),typeof O=="number"?O:null):parseInt(O,10)}function xy(O,L){return typeof O=="string"?L.weekdaysParse(O)%7||7:isNaN(O)?null:O}function Kn(O,L){return O.slice(L,7).concat(O.slice(0,L))}var H3="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),b1="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),_y="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),V3=Za,$3=Za,Z3=Za;function Sy(O,L){var $=n(this._weekdays)?this._weekdays:this._weekdays[O&&O!==!0&&this._weekdays.isFormat.test(L)?"format":"standalone"];return O===!0?Kn($,this._week.dow):O?$[O.day()]:$}function Iy(O){return O===!0?Kn(this._weekdaysShort,this._week.dow):O?this._weekdaysShort[O.day()]:this._weekdaysShort}function q3(O){return O===!0?Kn(this._weekdaysMin,this._week.dow):O?this._weekdaysMin[O.day()]:this._weekdaysMin}function U3(O,L,$){var K,le,_e,We=O.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],K=0;K<7;++K)_e=I([2e3,1]).day(K),this._minWeekdaysParse[K]=this.weekdaysMin(_e,"").toLocaleLowerCase(),this._shortWeekdaysParse[K]=this.weekdaysShort(_e,"").toLocaleLowerCase(),this._weekdaysParse[K]=this.weekdays(_e,"").toLocaleLowerCase();return $?L==="dddd"?(le=kr.call(this._weekdaysParse,We),le!==-1?le:null):L==="ddd"?(le=kr.call(this._shortWeekdaysParse,We),le!==-1?le:null):(le=kr.call(this._minWeekdaysParse,We),le!==-1?le:null):L==="dddd"?(le=kr.call(this._weekdaysParse,We),le!==-1||(le=kr.call(this._shortWeekdaysParse,We),le!==-1)?le:(le=kr.call(this._minWeekdaysParse,We),le!==-1?le:null)):L==="ddd"?(le=kr.call(this._shortWeekdaysParse,We),le!==-1||(le=kr.call(this._weekdaysParse,We),le!==-1)?le:(le=kr.call(this._minWeekdaysParse,We),le!==-1?le:null)):(le=kr.call(this._minWeekdaysParse,We),le!==-1||(le=kr.call(this._weekdaysParse,We),le!==-1)?le:(le=kr.call(this._shortWeekdaysParse,We),le!==-1?le:null))}function nf(O,L,$){var K,le,_e;if(this._weekdaysParseExact)return U3.call(this,O,L,$);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),K=0;K<7;K++){if(le=I([2e3,1]).day(K),$&&!this._fullWeekdaysParse[K]&&(this._fullWeekdaysParse[K]=new RegExp("^"+this.weekdays(le,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[K]=new RegExp("^"+this.weekdaysShort(le,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[K]=new RegExp("^"+this.weekdaysMin(le,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[K]||(_e="^"+this.weekdays(le,"")+"|^"+this.weekdaysShort(le,"")+"|^"+this.weekdaysMin(le,""),this._weekdaysParse[K]=new RegExp(_e.replace(".",""),"i")),$&&L==="dddd"&&this._fullWeekdaysParse[K].test(O))return K;if($&&L==="ddd"&&this._shortWeekdaysParse[K].test(O))return K;if($&&L==="dd"&&this._minWeekdaysParse[K].test(O))return K;if(!$&&this._weekdaysParse[K].test(O))return K}}function Ou(O){if(!this.isValid())return O!=null?this:NaN;var L=wc(this,"Day");return O!=null?(O=Uh(O,this.localeData()),this.add(O-L,"d")):L}function G3(O){if(!this.isValid())return O!=null?this:NaN;var L=(this.day()+7-this.localeData()._week.dow)%7;return O==null?L:this.add(O-L,"d")}function Ey(O){if(!this.isValid())return O!=null?this:NaN;if(O!=null){var L=xy(O,this.localeData());return this.day(this.day()%7?L:L-7)}else return this.day()||7}function w1(O){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||O1.call(this),O?this._weekdaysStrictRegex:this._weekdaysRegex):(i(this,"_weekdaysRegex")||(this._weekdaysRegex=V3),this._weekdaysStrictRegex&&O?this._weekdaysStrictRegex:this._weekdaysRegex)}function J3(O){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||O1.call(this),O?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(i(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=$3),this._weekdaysShortStrictRegex&&O?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Gh(O){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||O1.call(this),O?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(i(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Z3),this._weekdaysMinStrictRegex&&O?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function O1(){function O(Ho,Is){return Is.length-Ho.length}var L=[],$=[],K=[],le=[],_e,We,ut,cr,Vr;for(_e=0;_e<7;_e++)We=I([2e3,1]).day(_e),ut=Ki(this.weekdaysMin(We,"")),cr=Ki(this.weekdaysShort(We,"")),Vr=Ki(this.weekdays(We,"")),L.push(ut),$.push(cr),K.push(Vr),le.push(ut),le.push(cr),le.push(Vr);L.sort(O),$.sort(O),K.sort(O),le.sort(O),this._weekdaysRegex=new RegExp("^("+le.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+K.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+$.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+L.join("|")+")","i")}function x1(){return this.hours()%12||12}function of(){return this.hours()||24}Ne("H",["HH",2],0,"hour"),Ne("h",["hh",2],0,x1),Ne("k",["kk",2],0,of),Ne("hmm",0,0,function(){return""+x1.apply(this)+De(this.minutes(),2)}),Ne("hmmss",0,0,function(){return""+x1.apply(this)+De(this.minutes(),2)+De(this.seconds(),2)}),Ne("Hmm",0,0,function(){return""+this.hours()+De(this.minutes(),2)}),Ne("Hmmss",0,0,function(){return""+this.hours()+De(this.minutes(),2)+De(this.seconds(),2)});function mo(O,L){Ne(O,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),L)})}mo("a",!0),mo("A",!1);function bi(O,L){return L._meridiemParse}Ct("a",bi),Ct("A",bi),Ct("H",Ur,Op),Ct("h",Ur,li),Ct("k",Ur,li),Ct("HH",Ur,Pr),Ct("hh",Ur,Pr),Ct("kk",Ur,Pr),Ct("hmm",ms),Ct("hmmss",Nn),Ct("Hmm",ms),Ct("Hmmss",Nn),pn(["H","HH"],Hn),pn(["k","kk"],function(O,L,$){var K=rn(O);L[Hn]=K===24?0:K}),pn(["a","A"],function(O,L,$){$._isPm=$._locale.isPM(O),$._meridiem=O}),pn(["h","hh"],function(O,L,$){L[Hn]=rn(O),D($).bigHour=!0}),pn("hmm",function(O,L,$){var K=O.length-2;L[Hn]=rn(O.substr(0,K)),L[qa]=rn(O.substr(K)),D($).bigHour=!0}),pn("hmmss",function(O,L,$){var K=O.length-4,le=O.length-2;L[Hn]=rn(O.substr(0,K)),L[qa]=rn(O.substr(K,2)),L[vs]=rn(O.substr(le)),D($).bigHour=!0}),pn("Hmm",function(O,L,$){var K=O.length-2;L[Hn]=rn(O.substr(0,K)),L[qa]=rn(O.substr(K))}),pn("Hmmss",function(O,L,$){var K=O.length-4,le=O.length-2;L[Hn]=rn(O.substr(0,K)),L[qa]=rn(O.substr(K,2)),L[vs]=rn(O.substr(le))});function Py(O){return(O+"").toLowerCase().charAt(0)==="p"}var X3=/[ap]\.?m?\.?/i,K3=Oa("Hours",!0);function xa(O,L,$){return O>11?$?"pm":"PM":$?"am":"AM"}var ta={calendar:Pe,longDateFormat:Tt,invalidDate:Rt,ordinal:vr,dayOfMonthOrdinalParse:Sr,relativeTime:po,months:W3,monthsShort:my,week:Ip,weekdays:H3,weekdaysMin:_y,weekdaysShort:b1,meridiemParse:X3},ro={},af={},Fl;function sf(O,L){var $,K=Math.min(O.length,L.length);for($=0;$0;){if(le=Ep(_e.slice(0,$).join("-")),le)return le;if(K&&K.length>=$&&sf(_e,K)>=$-1)break;$--}L++}return Fl}function Oc(O){return!!(O&&O.match("^[^/\\\\]*$"))}function Ep(O){var L=null,$;if(ro[O]===void 0&&typeof t9<"u"&&t9&&t9.exports&&Oc(O))try{L=Fl._abbr,$=Cge,$("./locale/"+O),Ua(L)}catch{ro[O]=null}return ro[O]}function Ua(O,L){var $;return O&&(d(L)?$=Ys(O):$=xc(O,L),$?Fl=$:typeof console<"u"&&console.warn&&console.warn("Locale "+O+" not found. Did you forget to load it?")),Fl._abbr}function xc(O,L){if(L!==null){var $,K=ta;if(L.abbr=O,ro[O]!=null)ye("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),K=ro[O]._config;else if(L.parentLocale!=null)if(ro[L.parentLocale]!=null)K=ro[L.parentLocale]._config;else if($=Ep(L.parentLocale),$!=null)K=$._config;else return af[L.parentLocale]||(af[L.parentLocale]=[]),af[L.parentLocale].push({name:O,config:L}),null;return ro[O]=new Se(be(K,L)),af[O]&&af[O].forEach(function(le){xc(le.name,le.config)}),Ua(O),ro[O]}else return delete ro[O],null}function I1(O,L){if(L!=null){var $,K,le=ta;ro[O]!=null&&ro[O].parentLocale!=null?ro[O].set(be(ro[O]._config,L)):(K=Ep(O),K!=null&&(le=K._config),L=be(le,L),K==null&&(L.abbr=O),$=new Se(L),$.parentLocale=ro[O],ro[O]=$),Ua(O)}else ro[O]!=null&&(ro[O].parentLocale!=null?(ro[O]=ro[O].parentLocale,O===Ua()&&Ua(O)):ro[O]!=null&&delete ro[O]);return ro[O]}function Ys(O){var L;if(O&&O._locale&&O._locale._abbr&&(O=O._locale._abbr),!O)return Fl;if(!n(O)){if(L=Ep(O),L)return L;O=[O]}return S1(O)}function _c(){return Te(ro)}function ra(O){var L,$=O._a;return $&&D(O).overflow===-2&&(L=$[ui]<0||$[ui]>11?ui:$[Yi]<1||$[Yi]>g1($[Co],$[ui])?Yi:$[Hn]<0||$[Hn]>24||$[Hn]===24&&($[qa]!==0||$[vs]!==0||$[gu]!==0)?Hn:$[qa]<0||$[qa]>59?qa:$[vs]<0||$[vs]>59?vs:$[gu]<0||$[gu]>999?gu:-1,D(O)._overflowDayOfYear&&(LYi)&&(L=Yi),D(O)._overflowWeeks&&L===-1&&(L=Qi),D(O)._overflowWeekday&&L===-1&&(L=fy),D(O).overflow=L),O}var Jh=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Y3=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,xu=/Z|[+-]\d\d(?::?\d\d)?/,pi=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],E1=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Pp=/^\/?Date\((-?\d+)/i,Sc=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,kp={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function _u(O){var L,$,K=O._i,le=Jh.exec(K)||Y3.exec(K),_e,We,ut,cr,Vr=pi.length,Ho=E1.length;if(le){for(D(O).iso=!0,L=0,$=Vr;L<$;L++)if(pi[L][1].exec(le[1])){We=pi[L][0],_e=pi[L][2]!==!1;break}if(We==null){O._isValid=!1;return}if(le[3]){for(L=0,$=Ho;L<$;L++)if(E1[L][1].exec(le[3])){ut=(le[2]||" ")+E1[L][0];break}if(ut==null){O._isValid=!1;return}}if(!_e&&ut!=null){O._isValid=!1;return}if(le[4])if(xu.exec(le[4]))cr="Z";else{O._isValid=!1;return}O._f=We+(ut||"")+(cr||""),lf(O)}else O._isValid=!1}function ky(O,L,$,K,le,_e){var We=[Bt(O),my.indexOf(L),parseInt($,10),parseInt(K,10),parseInt(le,10)];return _e&&We.push(parseInt(_e,10)),We}function Bt(O){var L=parseInt(O,10);return L<=49?2e3+L:L<=999?1900+L:L}function ar(O){return O.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function Q3(O,L,$){if(O){var K=b1.indexOf(O),le=new Date(L[0],L[1],L[2]).getDay();if(K!==le)return D($).weekdayMismatch=!0,$._isValid=!1,!1}return!0}function ew(O,L,$){if(O)return kp[O];if(L)return 0;var K=parseInt($,10),le=K%100,_e=(K-le)/100;return _e*60+le}function Bl(O){var L=Sc.exec(ar(O._i)),$;if(L){if($=ky(L[4],L[3],L[2],L[5],L[6],L[7]),!Q3(L[1],$,O))return;O._a=$,O._tzm=ew(L[8],L[9],L[10]),O._d=rf.apply(null,O._a),O._d.setUTCMinutes(O._d.getUTCMinutes()-O._tzm),D(O).rfc2822=!0}else O._isValid=!1}function P1(O){var L=Pp.exec(O._i);if(L!==null){O._d=new Date(+L[1]);return}if(_u(O),O._isValid===!1)delete O._isValid;else return;if(Bl(O),O._isValid===!1)delete O._isValid;else return;O._strict?O._isValid=!1:t.createFromInputFallback(O)}t.createFromInputFallback=de("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(O){O._d=new Date(O._i+(O._useUTC?" UTC":""))});function jp(O,L,$){return O??L??$}function Xh(O){var L=new Date(t.now());return O._useUTC?[L.getUTCFullYear(),L.getUTCMonth(),L.getUTCDate()]:[L.getFullYear(),L.getMonth(),L.getDate()]}function Su(O){var L,$,K=[],le,_e,We;if(!O._d){for(le=Xh(O),O._w&&O._a[Yi]==null&&O._a[ui]==null&&Tp(O),O._dayOfYear!=null&&(We=jp(O._a[Co],le[Co]),(O._dayOfYear>yu(We)||O._dayOfYear===0)&&(D(O)._overflowDayOfYear=!0),$=rf(We,0,O._dayOfYear),O._a[ui]=$.getUTCMonth(),O._a[Yi]=$.getUTCDate()),L=0;L<3&&O._a[L]==null;++L)O._a[L]=K[L]=le[L];for(;L<7;L++)O._a[L]=K[L]=O._a[L]==null?L===2?1:0:O._a[L];O._a[Hn]===24&&O._a[qa]===0&&O._a[vs]===0&&O._a[gu]===0&&(O._nextDay=!0,O._a[Hn]=0),O._d=(O._useUTC?rf:by).apply(null,K),_e=O._useUTC?O._d.getUTCDay():O._d.getDay(),O._tzm!=null&&O._d.setUTCMinutes(O._d.getUTCMinutes()-O._tzm),O._nextDay&&(O._a[Hn]=24),O._w&&typeof O._w.d<"u"&&O._w.d!==_e&&(D(O).weekdayMismatch=!0)}}function Tp(O){var L,$,K,le,_e,We,ut,cr,Vr;L=O._w,L.GG!=null||L.W!=null||L.E!=null?(_e=1,We=4,$=jp(L.GG,O._a[Co],bu(kn(),1,4).year),K=jp(L.W,1),le=jp(L.E,1),(le<1||le>7)&&(cr=!0)):(_e=O._locale._week.dow,We=O._locale._week.doy,Vr=bu(kn(),_e,We),$=jp(L.gg,O._a[Co],Vr.year),K=jp(L.w,Vr.week),L.d!=null?(le=L.d,(le<0||le>6)&&(cr=!0)):L.e!=null?(le=L.e+_e,(L.e<0||L.e>6)&&(cr=!0)):le=_e),K<1||K>Nl($,_e,We)?D(O)._overflowWeeks=!0:cr!=null?D(O)._overflowWeekday=!0:(ut=wy($,K,le,_e,We),O._a[Co]=ut.year,O._dayOfYear=ut.dayOfYear)}t.ISO_8601=function(){},t.RFC_2822=function(){};function lf(O){if(O._f===t.ISO_8601){_u(O);return}if(O._f===t.RFC_2822){Bl(O);return}O._a=[],D(O).empty=!0;var L=""+O._i,$,K,le,_e,We,ut=L.length,cr=0,Vr,Ho;for(le=st(O._f,O._locale).match(He)||[],Ho=le.length,$=0;$0&&D(O).unusedInput.push(We),L=L.slice(L.indexOf(K)+K.length),cr+=K.length),Qe[_e]?(K?D(O).empty=!1:D(O).unusedTokens.push(_e),z3(_e,K,O)):O._strict&&!K&&D(O).unusedTokens.push(_e);D(O).charsLeftOver=ut-cr,L.length>0&&D(O).unusedInput.push(L),O._a[Hn]<=12&&D(O).bigHour===!0&&O._a[Hn]>0&&(D(O).bigHour=void 0),D(O).parsedDateParts=O._a.slice(0),D(O).meridiem=O._meridiem,O._a[Hn]=Qs(O._locale,O._a[Hn],O._meridiem),Vr=D(O).era,Vr!==null&&(O._a[Co]=O._locale.erasConvertYear(Vr,O._a[Co])),Su(O),ra(O)}function Qs(O,L,$){var K;return $==null?L:O.meridiemHour!=null?O.meridiemHour(L,$):(O.isPM!=null&&(K=O.isPM($),K&&L<12&&(L+=12),!K&&L===12&&(L=0)),L)}function Ga(O){var L,$,K,le,_e,We,ut=!1,cr=O._f.length;if(cr===0){D(O).invalidFormat=!0,O._d=new Date(NaN);return}for(le=0;lethis?this:O:N()});function cf(O,L){var $,K;if(L.length===1&&n(L[0])&&(L=L[0]),!L.length)return kn();for($=L[0],K=1;Kthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function em(){if(!d(this._isDSTShifted))return this._isDSTShifted;var O={},L;return Y(O,this),O=_a(O),O._a?(L=O._isUTC?I(O._a):kn(O._a),this._isDSTShifted=this.isValid()&&Cy(O._a,L.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function M1(){return this.isValid()?!this._isUTC:!1}function A1(){return this.isValid()?this._isUTC:!1}function Ly(){return this.isValid()?this._isUTC&&this._offset===0:!1}var tm=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Rp=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ja(O,L){var $=O,K=null,le,_e,We;return zl(O)?$={ms:O._milliseconds,d:O._days,M:O._months}:h(O)||!isNaN(+O)?($={},L?$[L]=+O:$.milliseconds=+O):(K=tm.exec(O))?(le=K[1]==="-"?-1:1,$={y:0,d:rn(K[Yi])*le,h:rn(K[Hn])*le,m:rn(K[qa])*le,s:rn(K[vs])*le,ms:rn(k1(K[gu]*1e3))*le}):(K=Rp.exec(O))?(le=K[1]==="-"?-1:1,$={y:ys(K[2],le),M:ys(K[3],le),w:ys(K[4],le),d:ys(K[5],le),h:ys(K[6],le),m:ys(K[7],le),s:ys(K[8],le)}):$==null?$={}:typeof $=="object"&&("from"in $||"to"in $)&&(We=Ia(kn($.from),kn($.to)),$={},$.ms=We.milliseconds,$.M=We.months),_e=new Iu($),zl(O)&&i(O,"_locale")&&(_e._locale=O._locale),zl(O)&&i(O,"_isValid")&&(_e._isValid=O._isValid),_e}Ja.fn=Iu.prototype,Ja.invalid=Yh;function ys(O,L){var $=O&&parseFloat(O.replace(",","."));return(isNaN($)?0:$)*L}function R1(O,L){var $={};return $.months=L.month()-O.month()+(L.year()-O.year())*12,O.clone().add($.months,"M").isAfter(L)&&--$.months,$.milliseconds=+L-+O.clone().add($.months,"M"),$}function Ia(O,L){var $;return O.isValid()&&L.isValid()?(L=Mp(L,O),O.isBefore(L)?$=R1(O,L):($=R1(L,O),$.milliseconds=-$.milliseconds,$.months=-$.months),$):{milliseconds:0,months:0}}function rm(O,L){return function($,K){var le,_e;return K!==null&&!isNaN(+K)&&(ye(L,"moment()."+L+"(period, number) is deprecated. Please use moment()."+L+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),_e=$,$=K,K=_e),le=Ja($,K),D1(this,le,O),this}}function D1(O,L,$,K){var le=L._milliseconds,_e=k1(L._days),We=k1(L._months);O.isValid()&&(K=K??!0,We&&Ll(O,wc(O,"Month")+We*$),_e&&Di(O,"Date",wc(O,"Date")+_e*$),le&&O._d.setTime(O._d.valueOf()+le*$),K&&t.updateOffset(O,_e||We))}var Dp=rm(1,"add"),ow=rm(-1,"subtract");function vo(O){return typeof O=="string"||O instanceof String}function iw(O){return ne(O)||v(O)||vo(O)||h(O)||aw(O)||Lp(O)||O===null||O===void 0}function Lp(O){var L=o(O)&&!c(O),$=!1,K=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],le,_e,We=K.length;for(le=0;le$.valueOf():$.valueOf()9999?Ke($,L?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):Ie(Date.prototype.toISOString)?L?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",Ke($,"Z")):Ke($,L?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function Pc(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var O="moment",L="",$,K,le,_e;return this.isLocal()||(O=this.utcOffset()===0?"moment.utc":"moment.parseZone",L="Z"),$="["+O+'("]',K=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",le="-MM-DD[T]HH:mm:ss.SSS",_e=L+'[")]',this.format($+K+le+_e)}function im(O){O||(O=this.isUtc()?t.defaultFormatUtc:t.defaultFormat);var L=Ke(this,O);return this.localeData().postformat(L)}function am(O,L){return this.isValid()&&(ne(O)&&O.isValid()||kn(O).isValid())?Ja({to:this,from:O}).locale(this.locale()).humanize(!L):this.localeData().invalidDate()}function kc(O){return this.from(kn(),O)}function sm(O,L){return this.isValid()&&(ne(O)&&O.isValid()||kn(O).isValid())?Ja({from:this,to:O}).locale(this.locale()).humanize(!L):this.localeData().invalidDate()}function df(O){return this.to(kn(),O)}function zy(O){var L;return O===void 0?this._locale._abbr:(L=Ys(O),L!=null&&(this._locale=L),this)}var Wy=de("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(O){return O===void 0?this.localeData():this.locale(O)});function ff(){return this._locale}var bs=1e3,Np=60*bs,hf=60*Np,na=(365*400+97)*24*hf;function Eu(O,L){return(O%L+L)%L}function Fp(O,L,$){return O<100&&O>=0?new Date(O+400,L,$)-na:new Date(O,L,$).valueOf()}function Pu(O,L,$){return O<100&&O>=0?Date.UTC(O+400,L,$)-na:Date.UTC(O,L,$)}function Hy(O){var L,$;if(O=Cr(O),O===void 0||O==="millisecond"||!this.isValid())return this;switch($=this._isUTC?Pu:Fp,O){case"year":L=$(this.year(),0,1);break;case"quarter":L=$(this.year(),this.month()-this.month()%3,1);break;case"month":L=$(this.year(),this.month(),1);break;case"week":L=$(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":L=$(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":L=$(this.year(),this.month(),this.date());break;case"hour":L=this._d.valueOf(),L-=Eu(L+(this._isUTC?0:this.utcOffset()*Np),hf);break;case"minute":L=this._d.valueOf(),L-=Eu(L,Np);break;case"second":L=this._d.valueOf(),L-=Eu(L,bs);break}return this._d.setTime(L),t.updateOffset(this,!0),this}function lm(O){var L,$;if(O=Cr(O),O===void 0||O==="millisecond"||!this.isValid())return this;switch($=this._isUTC?Pu:Fp,O){case"year":L=$(this.year()+1,0,1)-1;break;case"quarter":L=$(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":L=$(this.year(),this.month()+1,1)-1;break;case"week":L=$(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":L=$(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":L=$(this.year(),this.month(),this.date()+1)-1;break;case"hour":L=this._d.valueOf(),L+=hf-Eu(L+(this._isUTC?0:this.utcOffset()*Np),hf)-1;break;case"minute":L=this._d.valueOf(),L+=Np-Eu(L,Np)-1;break;case"second":L=this._d.valueOf(),L+=bs-Eu(L,bs)-1;break}return this._d.setTime(L),t.updateOffset(this,!0),this}function W1(){return this._d.valueOf()-(this._offset||0)*6e4}function Vy(){return Math.floor(this.valueOf()/1e3)}function H1(){return new Date(this.valueOf())}function V1(){var O=this;return[O.year(),O.month(),O.date(),O.hour(),O.minute(),O.second(),O.millisecond()]}function sw(){var O=this;return{years:O.year(),months:O.month(),date:O.date(),hours:O.hours(),minutes:O.minutes(),seconds:O.seconds(),milliseconds:O.milliseconds()}}function $1(){return this.isValid()?this.toISOString():null}function mf(){return A(this)}function lw(){return _({},D(this))}function vf(){return D(this).overflow}function um(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}Ne("N",0,0,"eraAbbr"),Ne("NN",0,0,"eraAbbr"),Ne("NNN",0,0,"eraAbbr"),Ne("NNNN",0,0,"eraName"),Ne("NNNNN",0,0,"eraNarrow"),Ne("y",["y",1],"yo","eraYear"),Ne("y",["yy",2],0,"eraYear"),Ne("y",["yyy",3],0,"eraYear"),Ne("y",["yyyy",4],0,"eraYear"),Ct("N",gf),Ct("NN",gf),Ct("NNN",gf),Ct("NNNN",ws),Ct("NNNNN",Bp),pn(["N","NN","NNN","NNNN","NNNNN"],function(O,L,$,K){var le=$._locale.erasParse(O,K,$._strict);le?D($).era=le:D($).invalidEra=O}),Ct("y",ba),Ct("yy",ba),Ct("yyy",ba),Ct("yyyy",ba),Ct("yo",el),pn(["y","yy","yyy","yyyy"],Co),pn(["yo"],function(O,L,$,K){var le;$._locale._eraYearOrdinalRegex&&(le=O.match($._locale._eraYearOrdinalRegex)),$._locale.eraYearOrdinalParse?L[Co]=$._locale.eraYearOrdinalParse(O,le):L[Co]=parseInt(O,10)});function uw(O,L){var $,K,le,_e=this._eras||Ys("en")._eras;for($=0,K=_e.length;$=0)return _e[K]}function cw(O,L){var $=O.since<=O.until?1:-1;return L===void 0?t(O.since).year():t(O.since).year()+(L-O.offset)*$}function ku(){var O,L,$,K=this.localeData().eras();for(O=0,L=K.length;O_e&&(L=_e),hm.call(this,O,L,$,K,le))}function hm(O,L,$,K,le){var _e=wy(O,L,$,K,le),We=rf(_e.year,0,_e.dayOfYear);return this.year(We.getUTCFullYear()),this.month(We.getUTCMonth()),this.date(We.getUTCDate()),this}Ne("Q",0,"Qo","quarter"),Ct("Q",hs),pn("Q",function(O,L){L[ui]=(rn(O)-1)*3});function pw(O){return O==null?Math.ceil((this.month()+1)/3):this.month((O-1)*3+this.month()%3)}Ne("D",["DD",2],"Do","date"),Ct("D",Ur,li),Ct("DD",Ur,Pr),Ct("Do",function(O,L){return O?L._dayOfMonthOrdinalParse||L._ordinalParse:L._dayOfMonthOrdinalParseLenient}),pn(["D","DD"],Yi),pn("Do",function(O,L){L[Yi]=rn(O.match(Ur)[0])});var mm=Oa("Date",!0);Ne("DDD",["DDDD",3],"DDDo","dayOfYear"),Ct("DDD",Ri),Ct("DDDD",or),pn(["DDD","DDDD"],function(O,L,$){$._dayOfYear=rn(O)});function Gy(O){var L=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return O==null?L:this.add(O-L,"d")}Ne("m",["mm",2],0,"minute"),Ct("m",Ur,Op),Ct("mm",Ur,Pr),pn(["m","mm"],qa);var Mc=Oa("Minutes",!1);Ne("s",["ss",2],0,"second"),Ct("s",Ur,Op),Ct("ss",Ur,Pr),pn(["s","ss"],vs);var dw=Oa("Seconds",!1);Ne("S",0,0,function(){return~~(this.millisecond()/100)}),Ne(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),Ne(0,["SSS",3],0,"millisecond"),Ne(0,["SSSS",4],0,function(){return this.millisecond()*10}),Ne(0,["SSSSS",5],0,function(){return this.millisecond()*100}),Ne(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),Ne(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),Ne(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),Ne(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),Ct("S",Ri,hs),Ct("SS",Ri,Pr),Ct("SSS",Ri,or);var ju,Jy;for(ju="SSSS";ju.length<=9;ju+="S")Ct(ju,ba);function vm(O,L){L[gu]=rn(("0."+O)*1e3)}for(ju="S";ju.length<=9;ju+="S")pn(ju,vm);Jy=Oa("Milliseconds",!1),Ne("z",0,0,"zoneAbbr"),Ne("zz",0,0,"zoneName");function fw(){return this._isUTC?"UTC":""}function yf(){return this._isUTC?"Coordinated Universal Time":""}var ot=ee.prototype;ot.add=Dp,ot.calendar=nm,ot.clone=at,ot.diff=By,ot.endOf=lm,ot.format=im,ot.from=am,ot.fromNow=kc,ot.to=sm,ot.toNow=df,ot.get=ea,ot.invalidAt=vf,ot.isAfter=L1,ot.isBefore=pf,ot.isBetween=N1,ot.isSame=F1,ot.isSameOrAfter=B1,ot.isSameOrBefore=Fy,ot.isValid=mf,ot.lang=Wy,ot.locale=zy,ot.localeData=ff,ot.max=nw,ot.min=Li,ot.parsingFlags=lw,ot.set=hy,ot.startOf=Hy,ot.subtract=ow,ot.toArray=V1,ot.toObject=sw,ot.toDate=H1,ot.toISOString=om,ot.inspect=Pc,typeof Symbol<"u"&&Symbol.for!=null&&(ot[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),ot.toJSON=$1,ot.toString=z1,ot.unix=Vy,ot.valueOf=W1,ot.creationData=um,ot.eraName=ku,ot.eraNarrow=cm,ot.eraAbbr=Z1,ot.eraYear=Zy,ot.year=bc,ot.isLeapYear=Dl,ot.weekYear=dm,ot.isoWeekYear=U1,ot.quarter=ot.quarters=pw,ot.month=ci,ot.daysInMonth=ho,ot.week=ot.weeks=Oy,ot.isoWeek=ot.isoWeeks=wu,ot.weeksInYear=Tc,ot.weeksInWeekYear=Cc,ot.isoWeeksInYear=fm,ot.isoWeeksInISOWeekYear=Uy,ot.date=mm,ot.day=ot.days=Ou,ot.weekday=G3,ot.isoWeekday=Ey,ot.dayOfYear=Gy,ot.hour=ot.hours=K3,ot.minute=ot.minutes=Mc,ot.second=ot.seconds=dw,ot.millisecond=ot.milliseconds=Jy,ot.utcOffset=Ay,ot.utc=Ry,ot.local=C1,ot.parseZone=Qh,ot.hasAlignedHourOffset=Dy,ot.isDST=Cn,ot.isLocal=M1,ot.isUtcOffset=A1,ot.isUtc=Ly,ot.isUTC=Ly,ot.zoneAbbr=fw,ot.zoneName=yf,ot.dates=de("dates accessor is deprecated. Use date instead.",mm),ot.months=de("months accessor is deprecated. Use month instead",ci),ot.years=de("years accessor is deprecated. Use year instead",bc),ot.zone=de("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Ap),ot.isDSTShifted=de("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",em);function bf(O){return kn(O*1e3)}function gm(){return kn.apply(null,arguments).parseZone()}function Ac(O){return O}var dn=Se.prototype;dn.calendar=Ve,dn.longDateFormat=wr,dn.invalidDate=Ut,dn.ordinal=Er,dn.preparse=Ac,dn.postformat=Ac,dn.relativeTime=Pn,dn.pastFuture=Nr,dn.set=he,dn.eras=uw,dn.erasParse=$y,dn.erasConvertYear=cw,dn.erasAbbrRegex=qy,dn.erasNameRegex=pm,dn.erasNarrowRegex=q1,dn.months=Vh,dn.monthsShort=gy,dn.monthsParse=Sp,dn.monthsRegex=yy,dn.monthsShortRegex=ao,dn.week=Zh,dn.firstDayOfYear=y1,dn.firstDayOfWeek=qh,dn.weekdays=Sy,dn.weekdaysMin=q3,dn.weekdaysShort=Iy,dn.weekdaysParse=nf,dn.weekdaysRegex=w1,dn.weekdaysShortRegex=J3,dn.weekdaysMinRegex=Gh,dn.isPM=Py,dn.meridiem=xa;function Os(O,L,$,K){var le=Ys(),_e=I().set(K,L);return le[$](_e,O)}function ym(O,L,$){if(h(O)&&(L=O,O=void 0),O=O||"",L!=null)return Os(O,L,$,"month");var K,le=[];for(K=0;K<12;K++)le[K]=Os(O,K,$,"month");return le}function tl(O,L,$,K){typeof O=="boolean"?(h(L)&&($=L,L=void 0),L=L||""):(L=O,$=L,O=!1,h(L)&&($=L,L=void 0),L=L||"");var le=Ys(),_e=O?le._week.dow:0,We,ut=[];if($!=null)return Os(L,($+_e)%7,K,"day");for(We=0;We<7;We++)ut[We]=Os(L,(We+_e)%7,K,"day");return ut}function xs(O,L){return ym(O,L,"months")}function Xy(O,L){return ym(O,L,"monthsShort")}function Tu(O,L,$){return tl(O,L,$,"weekdays")}function rl(O,L,$){return tl(O,L,$,"weekdaysShort")}function wf(O,L,$){return tl(O,L,$,"weekdaysMin")}Ua("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(O){var L=O%10,$=rn(O%100/10)===1?"th":L===1?"st":L===2?"nd":L===3?"rd":"th";return O+$}}),t.lang=de("moment.lang is deprecated. Use moment.locale instead.",Ua),t.langData=de("moment.langData is deprecated. Use moment.localeData instead.",Ys);var nl=Math.abs;function hw(){var O=this._data;return this._milliseconds=nl(this._milliseconds),this._days=nl(this._days),this._months=nl(this._months),O.milliseconds=nl(O.milliseconds),O.seconds=nl(O.seconds),O.minutes=nl(O.minutes),O.hours=nl(O.hours),O.months=nl(O.months),O.years=nl(O.years),this}function Ky(O,L,$,K){var le=Ja(L,$);return O._milliseconds+=K*le._milliseconds,O._days+=K*le._days,O._months+=K*le._months,O._bubble()}function mw(O,L){return Ky(this,O,L,1)}function lo(O,L){return Ky(this,O,L,-1)}function Of(O){return O<0?Math.floor(O):Math.ceil(O)}function vw(){var O=this._milliseconds,L=this._days,$=this._months,K=this._data,le,_e,We,ut,cr;return O>=0&&L>=0&&$>=0||O<=0&&L<=0&&$<=0||(O+=Of(bm($)+L)*864e5,L=0,$=0),K.milliseconds=O%1e3,le=fo(O/1e3),K.seconds=le%60,_e=fo(le/60),K.minutes=_e%60,We=fo(_e/60),K.hours=We%24,L+=fo(We/24),cr=fo(xf(L)),$+=cr,L-=Of(bm(cr)),ut=fo($/12),$%=12,K.days=L,K.months=$,K.years=ut,this}function xf(O){return O*4800/146097}function bm(O){return O*146097/4800}function Wl(O){if(!this.isValid())return NaN;var L,$,K=this._milliseconds;if(O=Cr(O),O==="month"||O==="quarter"||O==="year")switch(L=this._days+K/864e5,$=this._months+xf(L),O){case"month":return $;case"quarter":return $/3;case"year":return $/12}else switch(L=this._days+Math.round(bm(this._months)),O){case"week":return L/7+K/6048e5;case"day":return L+K/864e5;case"hour":return L*24+K/36e5;case"minute":return L*1440+K/6e4;case"second":return L*86400+K/1e3;case"millisecond":return Math.floor(L*864e5)+K;default:throw new Error("Unknown unit "+O)}}function Hl(O){return function(){return this.as(O)}}var Yy=Hl("ms"),Qy=Hl("s"),gw=Hl("m"),eb=Hl("h"),yw=Hl("d"),G1=Hl("w"),wm=Hl("M"),Cu=Hl("Q"),Om=Hl("y"),xm=Yy;function tb(){return Ja(this)}function _m(O){return O=Cr(O),this.isValid()?this[O+"s"]():NaN}function Mu(O){return function(){return this.isValid()?this._data[O]:NaN}}var rb=Mu("milliseconds"),J1=Mu("seconds"),Wp=Mu("minutes"),_f=Mu("hours"),Ka=Mu("days"),_s=Mu("months"),X1=Mu("years");function bw(){return fo(this.days()/7)}var Qo=Math.round,Pa={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Vl(O,L,$,K,le){return le.relativeTime(L||1,!!$,O,K)}function ww(O,L,$,K){var le=Ja(O).abs(),_e=Qo(le.as("s")),We=Qo(le.as("m")),ut=Qo(le.as("h")),cr=Qo(le.as("d")),Vr=Qo(le.as("M")),Ho=Qo(le.as("w")),Is=Qo(le.as("y")),Es=_e<=$.ss&&["s",_e]||_e<$.s&&["ss",_e]||We<=1&&["m"]||We<$.m&&["mm",We]||ut<=1&&["h"]||ut<$.h&&["hh",ut]||cr<=1&&["d"]||cr<$.d&&["dd",cr];return $.w!=null&&(Es=Es||Ho<=1&&["w"]||Ho<$.w&&["ww",Ho]),Es=Es||Vr<=1&&["M"]||Vr<$.M&&["MM",Vr]||Is<=1&&["y"]||["yy",Is],Es[2]=L,Es[3]=+O>0,Es[4]=K,Vl.apply(null,Es)}function Ow(O){return O===void 0?Qo:typeof O=="function"?(Qo=O,!0):!1}function xw(O,L){return Pa[O]===void 0?!1:L===void 0?Pa[O]:(Pa[O]=L,O==="s"&&(Pa.ss=L-1),!0)}function _w(O,L){if(!this.isValid())return this.localeData().invalidDate();var $=!1,K=Pa,le,_e;return typeof O=="object"&&(L=O,O=!1),typeof O=="boolean"&&($=O),typeof L=="object"&&(K=Object.assign({},Pa,L),L.s!=null&&L.ss==null&&(K.ss=L.s-1)),le=this.localeData(),_e=ww(this,!$,K,le),$&&(_e=le.pastFuture(+this,_e)),le.postformat(_e)}var Sm=Math.abs;function Rc(O){return(O>0)-(O<0)||+O}function Ss(){if(!this.isValid())return this.localeData().invalidDate();var O=Sm(this._milliseconds)/1e3,L=Sm(this._days),$=Sm(this._months),K,le,_e,We,ut=this.asSeconds(),cr,Vr,Ho,Is;return ut?(K=fo(O/60),le=fo(K/60),O%=60,K%=60,_e=fo($/12),$%=12,We=O?O.toFixed(3).replace(/\.?0+$/,""):"",cr=ut<0?"-":"",Vr=Rc(this._months)!==Rc(ut)?"-":"",Ho=Rc(this._days)!==Rc(ut)?"-":"",Is=Rc(this._milliseconds)!==Rc(ut)?"-":"",cr+"P"+(_e?Vr+_e+"Y":"")+($?Vr+$+"M":"")+(L?Ho+L+"D":"")+(le||K||O?"T":"")+(le?Is+le+"H":"")+(K?Is+K+"M":"")+(O?Is+We+"S":"")):"P0D"}var Ar=Iu.prototype;Ar.isValid=er,Ar.abs=hw,Ar.add=mw,Ar.subtract=lo,Ar.as=Wl,Ar.asMilliseconds=Yy,Ar.asSeconds=Qy,Ar.asMinutes=gw,Ar.asHours=eb,Ar.asDays=yw,Ar.asWeeks=G1,Ar.asMonths=wm,Ar.asQuarters=Cu,Ar.asYears=Om,Ar.valueOf=xm,Ar._bubble=vw,Ar.clone=tb,Ar.get=_m,Ar.milliseconds=rb,Ar.seconds=J1,Ar.minutes=Wp,Ar.hours=_f,Ar.days=Ka,Ar.weeks=bw,Ar.months=_s,Ar.years=X1,Ar.humanize=_w,Ar.toISOString=Ss,Ar.toString=Ss,Ar.toJSON=Ss,Ar.locale=zy,Ar.localeData=ff,Ar.toIsoString=de("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Ss),Ar.lang=Wy,Ne("X",0,0,"unix"),Ne("x",0,0,"valueOf"),Ct("x",wa),Ct("X",yc),pn("X",function(O,L,$){$._d=new Date(parseFloat(O)*1e3)}),pn("x",function(O,L,$){$._d=new Date(rn(O))});return t.version="2.30.1",r(kn),t.fn=ot,t.min=Cp,t.max=jy,t.now=Ic,t.utc=I,t.unix=bf,t.months=xs,t.isDate=v,t.locale=Ua,t.invalid=N,t.duration=Ja,t.isMoment=ne,t.weekdays=Tu,t.parseZone=gm,t.localeData=Ys,t.isDuration=zl,t.monthsShort=Xy,t.weekdaysMin=wf,t.defineLocale=xc,t.updateLocale=I1,t.locales=_c,t.weekdaysShort=rl,t.normalizeUnits=Cr,t.relativeTimeRounding=Ow,t.relativeTimeThreshold=xw,t.calendarFormat=Ny,t.prototype=ot,t.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},t})});var Zxe=Ce((G3r,$xe)=>{var TQe=U0(),CQe=Ch(),MQe=zd(),AQe="[object String]";function RQe(e){return typeof e=="string"||!CQe(e)&&MQe(e)&&TQe(e)==AQe}$xe.exports=RQe});var Uxe=Ce((J3r,qxe)=>{var DQe=U0(),LQe=zd(),NQe="[object Boolean]";function FQe(e){return e===!0||e===!1||LQe(e)&&DQe(e)==NQe}qxe.exports=FQe});var roe=Ce((X3r,Gxe)=>{var BQe=U0(),zQe=zd(),WQe="[object Number]";function HQe(e){return typeof e=="number"||zQe(e)&&BQe(e)==WQe}Gxe.exports=HQe});var Xxe=Ce((K3r,Jxe)=>{var VQe=roe();function $Qe(e){return VQe(e)&&e!=+e}Jxe.exports=$Qe});var c_e=Ce((u_e,NG)=>{(function(e,t){typeof define=="function"&&define.amd?define(t):typeof NG=="object"&&NG.exports?NG.exports=t():e.numeral=t()})(u_e,function(){var e,t,r="2.0.6",n={},o={},i={currentLocale:"en",zeroFormat:null,nullFormat:null,defaultFormat:"0,0",scalePercentBy100:!0},c={currentLocale:i.currentLocale,zeroFormat:i.zeroFormat,nullFormat:i.nullFormat,defaultFormat:i.defaultFormat,scalePercentBy100:i.scalePercentBy100};function d(h,v){this._input=h,this._value=v}return e=function(h){var v,w,_,I;if(e.isNumeral(h))v=h.value();else if(h===0||typeof h>"u")v=0;else if(h===null||t.isNaN(h))v=null;else if(typeof h=="string")if(c.zeroFormat&&h===c.zeroFormat)v=0;else if(c.nullFormat&&h===c.nullFormat||!h.replace(/[^0-9]+/g,"").length)v=null;else{for(w in n)if(I=typeof n[w].regexps.unformat=="function"?n[w].regexps.unformat():n[w].regexps.unformat,I&&h.match(I)){_=n[w].unformat;break}_=_||e._.stringToNumber,v=_(h)}else v=Number(h)||null;return new d(h,v)},e.version=r,e.isNumeral=function(h){return h instanceof d},e._=t={numberToFormat:function(h,v,w){var _=o[e.options.currentLocale],I=!1,R=!1,D=0,F="",A=1e12,N=1e9,H=1e6,q=1e3,Y="",ee=!1,ne,te,de,fe,ye,Ie,he,be,Se,Te;if(h=h||0,te=Math.abs(h),e._.includes(v,"(")?(I=!0,v=v.replace(/[\(|\)]/g,"")):(e._.includes(v,"+")||e._.includes(v,"-"))&&(be=e._.includes(v,"+")?v.indexOf("+"):h<0?v.indexOf("-"):-1,v=v.replace(/[\+|\-]/g,"")),e._.includes(v,"a")&&(ne=v.match(/a(k|m|b|t)?/),ne=ne?ne[1]:!1,e._.includes(v," a")&&(F=" "),v=v.replace(new RegExp(F+"a[kmbt]?"),""),te>=A&&!ne||ne==="t"?(F+=_.abbreviations.trillion,h=h/A):te=N&&!ne||ne==="b"?(F+=_.abbreviations.billion,h=h/N):te=H&&!ne||ne==="m"?(F+=_.abbreviations.million,h=h/H):(te=q&&!ne||ne==="k")&&(F+=_.abbreviations.thousand,h=h/q)),e._.includes(v,"[.]")&&(R=!0,v=v.replace("[.]",".")),Ie=h.toString().split(".")[0],he=v.split(".")[1],Se=v.indexOf(","),D=(v.split(".")[0].split(",")[0].match(/0/g)||[]).length,he?(e._.includes(he,"[")?(he=he.replace("]",""),he=he.split("["),Y=e._.toFixed(h,he[0].length+he[1].length,w,he[1].length)):Y=e._.toFixed(h,he.length,w),Ie=Y.split(".")[0],e._.includes(Y,".")?Y=_.delimiters.decimal+Y.split(".")[1]:Y="",R&&Number(Y.slice(1))===0&&(Y="")):Ie=e._.toFixed(h,0,w),F&&!ne&&Number(Ie)>=1e3&&F!==_.abbreviations.trillion)switch(Ie=String(Number(Ie)/1e3),F){case _.abbreviations.thousand:F=_.abbreviations.million;break;case _.abbreviations.million:F=_.abbreviations.billion;break;case _.abbreviations.billion:F=_.abbreviations.trillion;break}if(e._.includes(Ie,"-")&&(Ie=Ie.slice(1),ee=!0),Ie.length0;Pe--)Ie="0"+Ie;return Se>-1&&(Ie=Ie.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+_.delimiters.thousands)),v.indexOf(".")===0&&(Ie=""),Te=Ie+Y+(F||""),I?Te=(I&&ee?"(":"")+Te+(I&&ee?")":""):be>=0?Te=be===0?(ee?"-":"+")+Te:Te+(ee?"-":"+"):ee&&(Te="-"+Te),Te},stringToNumber:function(h){var v=o[c.currentLocale],w=h,_={thousand:3,million:6,billion:9,trillion:12},I,R,D,F;if(c.zeroFormat&&h===c.zeroFormat)R=0;else if(c.nullFormat&&h===c.nullFormat||!h.replace(/[^0-9]+/g,"").length)R=null;else{R=1,v.delimiters.decimal!=="."&&(h=h.replace(/\./g,"").replace(v.delimiters.decimal,"."));for(I in _)if(F=new RegExp("[^a-zA-Z]"+v.abbreviations[I]+"(?:\\)|(\\"+v.currency.symbol+")?(?:\\))?)?$"),w.match(F)){R*=Math.pow(10,_[I]);break}R*=(h.split("-").length+Math.min(h.split("(").length-1,h.split(")").length-1))%2?1:-1,h=h.replace(/[^0-9\.]+/g,""),R*=Number(h)}return R},isNaN:function(h){return typeof h=="number"&&isNaN(h)},includes:function(h,v){return h.indexOf(v)!==-1},insert:function(h,v,w){return h.slice(0,w)+v+h.slice(w)},reduce:function(h,v){if(this===null)throw new TypeError("Array.prototype.reduce called on null or undefined");if(typeof v!="function")throw new TypeError(v+" is not a function");var w=Object(h),_=w.length>>>0,I=0,R;if(arguments.length===3)R=arguments[2];else{for(;I<_&&!(I in w);)I++;if(I>=_)throw new TypeError("Reduce of empty array with no initial value");R=w[I++]}for(;I<_;I++)I in w&&(R=v(R,w[I],I,w));return R},multiplier:function(h){var v=h.toString().split(".");return v.length<2?1:Math.pow(10,v[1].length)},correctionFactor:function(){var h=Array.prototype.slice.call(arguments);return h.reduce(function(v,w){var _=t.multiplier(w);return v>_?v:_},1)},toFixed:function(h,v,w,_){var I=h.toString().split("."),R=v-(_||0),D,F,A,N;return I.length===2?D=Math.min(Math.max(I[1].length,R),v):D=R,A=Math.pow(10,D),N=(w(h+"e+"+D)/A).toFixed(D),_>v-D&&(F=new RegExp("\\.?0{1,"+(_-(v-D))+"}$"),N=N.replace(F,"")),N}},e.options=c,e.formats=n,e.locales=o,e.locale=function(h){return h&&(c.currentLocale=h.toLowerCase()),c.currentLocale},e.localeData=function(h){if(!h)return o[c.currentLocale];if(h=h.toLowerCase(),!o[h])throw new Error("Unknown locale : "+h);return o[h]},e.reset=function(){for(var h in i)c[h]=i[h]},e.zeroFormat=function(h){c.zeroFormat=typeof h=="string"?h:null},e.nullFormat=function(h){c.nullFormat=typeof h=="string"?h:null},e.defaultFormat=function(h){c.defaultFormat=typeof h=="string"?h:"0.0"},e.register=function(h,v,w){if(v=v.toLowerCase(),this[h+"s"][v])throw new TypeError(v+" "+h+" already registered.");return this[h+"s"][v]=w,w},e.validate=function(h,v){var w,_,I,R,D,F,A,N;if(typeof h!="string"&&(h+="",console.warn&&console.warn("Numeral.js: Value is not string. It has been co-erced to: ",h)),h=h.trim(),h.match(/^\d+$/))return!0;if(h==="")return!1;try{A=e.localeData(v)}catch{A=e.localeData(e.locale())}return I=A.currency.symbol,D=A.abbreviations,w=A.delimiters.decimal,A.delimiters.thousands==="."?_="\\.":_=A.delimiters.thousands,N=h.match(/^[^\d]+/),N!==null&&(h=h.substr(1),N[0]!==I)||(N=h.match(/[^\d]+$/),N!==null&&(h=h.slice(0,-1),N[0]!==D.thousand&&N[0]!==D.million&&N[0]!==D.billion&&N[0]!==D.trillion))?!1:(F=new RegExp(_+"{2}"),h.match(/[^\d.,]/g)?!1:(R=h.split(w),R.length>2?!1:R.length<2?!!R[0].match(/^\d+.*\d$/)&&!R[0].match(F):R[0].length===1?!!R[0].match(/^\d+$/)&&!R[0].match(F)&&!!R[1].match(/^\d+$/):!!R[0].match(/^\d+.*\d$/)&&!R[0].match(F)&&!!R[1].match(/^\d+$/)))},e.fn=d.prototype={clone:function(){return e(this)},format:function(h,v){var w=this._value,_=h||c.defaultFormat,I,R,D;if(v=v||Math.round,w===0&&c.zeroFormat!==null)R=c.zeroFormat;else if(w===null&&c.nullFormat!==null)R=c.nullFormat;else{for(I in n)if(_.match(n[I].regexps.format)){D=n[I].format;break}D=D||e._.numberToFormat,R=D(w,_,v)}return R},value:function(){return this._value},input:function(){return this._input},set:function(h){return this._value=Number(h),this},add:function(h){var v=t.correctionFactor.call(null,this._value,h);function w(_,I,R,D){return _+Math.round(v*I)}return this._value=t.reduce([this._value,h],w,0)/v,this},subtract:function(h){var v=t.correctionFactor.call(null,this._value,h);function w(_,I,R,D){return _-Math.round(v*I)}return this._value=t.reduce([h],w,Math.round(this._value*v))/v,this},multiply:function(h){function v(w,_,I,R){var D=t.correctionFactor(w,_);return Math.round(w*D)*Math.round(_*D)/Math.round(D*D)}return this._value=t.reduce([this._value,h],v,1),this},divide:function(h){function v(w,_,I,R){var D=t.correctionFactor(w,_);return Math.round(w*D)/Math.round(_*D)}return this._value=t.reduce([this._value,h],v),this},difference:function(h){return Math.abs(e(this._value).subtract(h).value())}},e.register("locale","en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(h){var v=h%10;return~~(h%100/10)===1?"th":v===1?"st":v===2?"nd":v===3?"rd":"th"},currency:{symbol:"$"}}),function(){e.register("format","bps",{regexps:{format:/(BPS)/,unformat:/(BPS)/},format:function(h,v,w){var _=e._.includes(v," BPS")?" ":"",I;return h=h*1e4,v=v.replace(/\s?BPS/,""),I=e._.numberToFormat(h,v,w),e._.includes(I,")")?(I=I.split(""),I.splice(-1,0,_+"BPS"),I=I.join("")):I=I+_+"BPS",I},unformat:function(h){return+(e._.stringToNumber(h)*1e-4).toFixed(15)}})}(),function(){var h={base:1e3,suffixes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},v={base:1024,suffixes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},w=h.suffixes.concat(v.suffixes.filter(function(I){return h.suffixes.indexOf(I)<0})),_=w.join("|");_="("+_.replace("B","B(?!PS)")+")",e.register("format","bytes",{regexps:{format:/([0\s]i?b)/,unformat:new RegExp(_)},format:function(I,R,D){var F,A=e._.includes(R,"ib")?v:h,N=e._.includes(R," b")||e._.includes(R," ib")?" ":"",H,q,Y;for(R=R.replace(/\s?i?b/,""),H=0;H<=A.suffixes.length;H++)if(q=Math.pow(A.base,H),Y=Math.pow(A.base,H+1),I===null||I===0||I>=q&&I0&&(I=I/q);break}return F=e._.numberToFormat(I,R,D),F+N},unformat:function(I){var R=e._.stringToNumber(I),D,F;if(R){for(D=h.suffixes.length-1;D>=0;D--){if(e._.includes(I,h.suffixes[D])){F=Math.pow(h.base,D);break}if(e._.includes(I,v.suffixes[D])){F=Math.pow(v.base,D);break}}R*=F||1}return R}})}(),function(){e.register("format","currency",{regexps:{format:/(\$)/},format:function(h,v,w){var _=e.locales[e.options.currentLocale],I={before:v.match(/^([\+|\-|\(|\s|\$]*)/)[0],after:v.match(/([\+|\-|\)|\s|\$]*)$/)[0]},R,D,F;for(v=v.replace(/\s?\$\s?/,""),R=e._.numberToFormat(h,v,w),h>=0?(I.before=I.before.replace(/[\-\(]/,""),I.after=I.after.replace(/[\-\)]/,"")):h<0&&!e._.includes(I.before,"-")&&!e._.includes(I.before,"(")&&(I.before="-"+I.before),F=0;F=0;F--)switch(D=I.after[F],D){case"$":R=F===I.after.length-1?R+_.currency.symbol:e._.insert(R,_.currency.symbol,-(I.after.length-(1+F)));break;case" ":R=F===I.after.length-1?R+" ":e._.insert(R," ",-(I.after.length-(1+F)+_.currency.symbol.length-1));break}return R}})}(),function(){e.register("format","exponential",{regexps:{format:/(e\+|e-)/,unformat:/(e\+|e-)/},format:function(h,v,w){var _,I=typeof h=="number"&&!e._.isNaN(h)?h.toExponential():"0e+0",R=I.split("e");return v=v.replace(/e[\+|\-]{1}0/,""),_=e._.numberToFormat(Number(R[0]),v,w),_+"e"+R[1]},unformat:function(h){var v=e._.includes(h,"e+")?h.split("e+"):h.split("e-"),w=Number(v[0]),_=Number(v[1]);_=e._.includes(h,"e-")?_*=-1:_;function I(R,D,F,A){var N=e._.correctionFactor(R,D),H=R*N*(D*N)/(N*N);return H}return e._.reduce([w,Math.pow(10,_)],I,1)}})}(),function(){e.register("format","ordinal",{regexps:{format:/(o)/},format:function(h,v,w){var _=e.locales[e.options.currentLocale],I,R=e._.includes(v," o")?" ":"";return v=v.replace(/\s?o/,""),R+=_.ordinal(h),I=e._.numberToFormat(h,v,w),I+R}})}(),function(){e.register("format","percentage",{regexps:{format:/(%)/,unformat:/(%)/},format:function(h,v,w){var _=e._.includes(v," %")?" ":"",I;return e.options.scalePercentBy100&&(h=h*100),v=v.replace(/\s?\%/,""),I=e._.numberToFormat(h,v,w),e._.includes(I,")")?(I=I.split(""),I.splice(-1,0,_+"%"),I=I.join("")):I=I+_+"%",I},unformat:function(h){var v=e._.stringToNumber(h);return e.options.scalePercentBy100?v*.01:v}})}(),function(){e.register("format","time",{regexps:{format:/(:)/,unformat:/(:)/},format:function(h,v,w){var _=Math.floor(h/60/60),I=Math.floor((h-_*60*60)/60),R=Math.round(h-_*60*60-I*60);return _+":"+(I<10?"0"+I:I)+":"+(R<10?"0"+R:R)},unformat:function(h){var v=h.split(":"),w=0;return v.length===3?(w=w+Number(v[0])*60*60,w=w+Number(v[1])*60,w=w+Number(v[2])):v.length===2&&(w=w+Number(v[0])*60,w=w+Number(v[1])),Number(w)}})}(),e})});var WG=Ce((Ewr,g_e)=>{var uet=U0(),cet=zd(),pet="[object Symbol]";function det(e){return typeof e=="symbol"||cet(e)&&uet(e)==pet}g_e.exports=det});var b_e=Ce((Pwr,y_e)=>{var fet=Ch(),het=WG(),met=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,vet=/^\w*$/;function get(e,t){if(fet(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||het(e)?!0:vet.test(e)||!met.test(e)||t!=null&&e in Object(t)}y_e.exports=get});var x_e=Ce((kwr,O_e)=>{var w_e=vG(),yet="Expected a function";function poe(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(yet);var r=function(){var n=arguments,o=t?t.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var c=e.apply(this,n);return r.cache=i.set(o,c)||i,c};return r.cache=new(poe.Cache||w_e),r}poe.Cache=w_e;O_e.exports=poe});var S_e=Ce((jwr,__e)=>{var bet=x_e(),wet=500;function Oet(e){var t=bet(e,function(n){return r.size===wet&&r.clear(),n}),r=t.cache;return t}__e.exports=Oet});var E_e=Ce((Twr,I_e)=>{var xet=S_e(),_et=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Iet=/\\(\\)?/g,Eet=xet(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(_et,function(r,n,o,i){t.push(o?i.replace(Iet,"$1"):n||r)}),t});I_e.exports=Eet});var doe=Ce((Cwr,P_e)=>{function Pet(e,t){for(var r=-1,n=e==null?0:e.length,o=Array(n);++r{var k_e=Sx(),ket=doe(),jet=Ch(),Tet=WG(),Cet=1/0,j_e=k_e?k_e.prototype:void 0,T_e=j_e?j_e.toString:void 0;function C_e(e){if(typeof e=="string")return e;if(jet(e))return ket(e,C_e)+"";if(Tet(e))return T_e?T_e.call(e):"";var t=e+"";return t=="0"&&1/e==-Cet?"-0":t}M_e.exports=C_e});var foe=Ce((Awr,R_e)=>{var Met=A_e();function Aet(e){return e==null?"":Met(e)}R_e.exports=Aet});var HG=Ce((Rwr,D_e)=>{var Ret=Ch(),Det=b_e(),Let=E_e(),Net=foe();function Fet(e,t){return Ret(e)?e:Det(e,t)?[e]:Let(Net(e))}D_e.exports=Fet});var hoe=Ce((Dwr,L_e)=>{var Bet=WG(),zet=1/0;function Wet(e){if(typeof e=="string"||Bet(e))return e;var t=e+"";return t=="0"&&1/e==-zet?"-0":t}L_e.exports=Wet});var moe=Ce((Lwr,N_e)=>{var Het=HG(),Vet=hoe();function $et(e,t){t=Het(t,e);for(var r=0,n=t.length;e!=null&&r{var Zet=moe();function qet(e,t,r){var n=e==null?void 0:Zet(e,t);return n===void 0?r:n}F_e.exports=qet});var W_e=Ce((Fwr,z_e)=>{function Uet(e,t){for(var r=-1,n=e==null?0:e.length;++r{var Get=o3(),Jet=function(){try{var e=Get(Object,"defineProperty");return e({},"",{}),e}catch{}}();H_e.exports=Jet});var goe=Ce((zwr,$_e)=>{var V_e=voe();function Xet(e,t,r){t=="__proto__"&&V_e?V_e(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}$_e.exports=Xet});var yoe=Ce((Wwr,Z_e)=>{var Ket=goe(),Yet=fG(),Qet=Object.prototype,ett=Qet.hasOwnProperty;function ttt(e,t,r){var n=e[t];(!(ett.call(e,t)&&Yet(n,r))||r===void 0&&!(t in e))&&Ket(e,t,r)}Z_e.exports=ttt});var u9=Ce((Hwr,q_e)=>{var rtt=yoe(),ntt=goe();function ott(e,t,r,n){var o=!r;r||(r={});for(var i=-1,c=t.length;++i{var itt=u9(),att=SG();function stt(e,t){return e&&itt(t,att(t),e)}U_e.exports=stt});var X_e=Ce(($wr,J_e)=>{function ltt(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}J_e.exports=ltt});var Y_e=Ce((Zwr,K_e)=>{var utt=Ix(),ctt=_G(),ptt=X_e(),dtt=Object.prototype,ftt=dtt.hasOwnProperty;function htt(e){if(!utt(e))return ptt(e);var t=ctt(e),r=[];for(var n in e)n=="constructor"&&(t||!ftt.call(e,n))||r.push(n);return r}K_e.exports=htt});var VG=Ce((qwr,Q_e)=>{var mtt=Mne(),vtt=Y_e(),gtt=Rne();function ytt(e){return gtt(e)?mtt(e,!0):vtt(e)}Q_e.exports=ytt});var tSe=Ce((Uwr,eSe)=>{var btt=u9(),wtt=VG();function Ott(e,t){return e&&btt(t,wtt(t),e)}eSe.exports=Ott});var aSe=Ce((jA,c9)=>{var xtt=Th(),iSe=typeof jA=="object"&&jA&&!jA.nodeType&&jA,rSe=iSe&&typeof c9=="object"&&c9&&!c9.nodeType&&c9,_tt=rSe&&rSe.exports===iSe,nSe=_tt?xtt.Buffer:void 0,oSe=nSe?nSe.allocUnsafe:void 0;function Stt(e,t){if(t)return e.slice();var r=e.length,n=oSe?oSe(r):new e.constructor(r);return e.copy(n),n}c9.exports=Stt});var lSe=Ce((Gwr,sSe)=>{function Itt(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r{var Ett=u9(),Ptt=bG();function ktt(e,t){return Ett(e,Ptt(e),t)}uSe.exports=ktt});var $G=Ce((Xwr,pSe)=>{var jtt=Ane(),Ttt=jtt(Object.getPrototypeOf,Object);pSe.exports=Ttt});var boe=Ce((Kwr,dSe)=>{var Ctt=yG(),Mtt=$G(),Att=bG(),Rtt=Pne(),Dtt=Object.getOwnPropertySymbols,Ltt=Dtt?function(e){for(var t=[];e;)Ctt(t,Att(e)),e=Mtt(e);return t}:Rtt;dSe.exports=Ltt});var hSe=Ce((Ywr,fSe)=>{var Ntt=u9(),Ftt=boe();function Btt(e,t){return Ntt(e,Ftt(e),t)}fSe.exports=Btt});var woe=Ce((Qwr,mSe)=>{var ztt=Ene(),Wtt=boe(),Htt=VG();function Vtt(e){return ztt(e,Htt,Wtt)}mSe.exports=Vtt});var gSe=Ce((eOr,vSe)=>{var $tt=Object.prototype,Ztt=$tt.hasOwnProperty;function qtt(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&Ztt.call(e,"index")&&(r.index=e.index,r.input=e.input),r}vSe.exports=qtt});var ZG=Ce((tOr,bSe)=>{var ySe=Sne();function Utt(e){var t=new e.constructor(e.byteLength);return new ySe(t).set(new ySe(e)),t}bSe.exports=Utt});var OSe=Ce((rOr,wSe)=>{var Gtt=ZG();function Jtt(e,t){var r=t?Gtt(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}wSe.exports=Jtt});var _Se=Ce((nOr,xSe)=>{var Xtt=/\w*$/;function Ktt(e){var t=new e.constructor(e.source,Xtt.exec(e));return t.lastIndex=e.lastIndex,t}xSe.exports=Ktt});var kSe=Ce((oOr,PSe)=>{var SSe=Sx(),ISe=SSe?SSe.prototype:void 0,ESe=ISe?ISe.valueOf:void 0;function Ytt(e){return ESe?Object(ESe.call(e)):{}}PSe.exports=Ytt});var TSe=Ce((iOr,jSe)=>{var Qtt=ZG();function ert(e,t){var r=t?Qtt(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}jSe.exports=ert});var MSe=Ce((aOr,CSe)=>{var trt=ZG(),rrt=OSe(),nrt=_Se(),ort=kSe(),irt=TSe(),art="[object Boolean]",srt="[object Date]",lrt="[object Map]",urt="[object Number]",crt="[object RegExp]",prt="[object Set]",drt="[object String]",frt="[object Symbol]",hrt="[object ArrayBuffer]",mrt="[object DataView]",vrt="[object Float32Array]",grt="[object Float64Array]",yrt="[object Int8Array]",brt="[object Int16Array]",wrt="[object Int32Array]",Ort="[object Uint8Array]",xrt="[object Uint8ClampedArray]",_rt="[object Uint16Array]",Srt="[object Uint32Array]";function Irt(e,t,r){var n=e.constructor;switch(t){case hrt:return trt(e);case art:case srt:return new n(+e);case mrt:return rrt(e,r);case vrt:case grt:case yrt:case brt:case wrt:case Ort:case xrt:case _rt:case Srt:return irt(e,r);case lrt:return new n;case urt:case drt:return new n(e);case crt:return nrt(e);case prt:return new n;case frt:return ort(e)}}CSe.exports=Irt});var DSe=Ce((sOr,RSe)=>{var Ert=Ix(),ASe=Object.create,Prt=function(){function e(){}return function(t){if(!Ert(t))return{};if(ASe)return ASe(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();RSe.exports=Prt});var NSe=Ce((lOr,LSe)=>{var krt=DSe(),jrt=$G(),Trt=_G();function Crt(e){return typeof e.constructor=="function"&&!Trt(e)?krt(jrt(e)):{}}LSe.exports=Crt});var BSe=Ce((uOr,FSe)=>{var Mrt=xA(),Art=zd(),Rrt="[object Map]";function Drt(e){return Art(e)&&Mrt(e)==Rrt}FSe.exports=Drt});var VSe=Ce((cOr,HSe)=>{var Lrt=BSe(),Nrt=OG(),zSe=xG(),WSe=zSe&&zSe.isMap,Frt=WSe?Nrt(WSe):Lrt;HSe.exports=Frt});var ZSe=Ce((pOr,$Se)=>{var Brt=xA(),zrt=zd(),Wrt="[object Set]";function Hrt(e){return zrt(e)&&Brt(e)==Wrt}$Se.exports=Hrt});var JSe=Ce((dOr,GSe)=>{var Vrt=ZSe(),$rt=OG(),qSe=xG(),USe=qSe&&qSe.isSet,Zrt=USe?$rt(USe):Vrt;GSe.exports=Zrt});var e7e=Ce((fOr,QSe)=>{var qrt=xne(),Urt=W_e(),Grt=yoe(),Jrt=G_e(),Xrt=tSe(),Krt=aSe(),Yrt=lSe(),Qrt=cSe(),ent=hSe(),tnt=Dne(),rnt=woe(),nnt=xA(),ont=gSe(),int=MSe(),ant=NSe(),snt=Ch(),lnt=wG(),unt=VSe(),cnt=Ix(),pnt=JSe(),dnt=SG(),fnt=VG(),hnt=1,mnt=2,vnt=4,XSe="[object Arguments]",gnt="[object Array]",ynt="[object Boolean]",bnt="[object Date]",wnt="[object Error]",KSe="[object Function]",Ont="[object GeneratorFunction]",xnt="[object Map]",_nt="[object Number]",YSe="[object Object]",Snt="[object RegExp]",Int="[object Set]",Ent="[object String]",Pnt="[object Symbol]",knt="[object WeakMap]",jnt="[object ArrayBuffer]",Tnt="[object DataView]",Cnt="[object Float32Array]",Mnt="[object Float64Array]",Ant="[object Int8Array]",Rnt="[object Int16Array]",Dnt="[object Int32Array]",Lnt="[object Uint8Array]",Nnt="[object Uint8ClampedArray]",Fnt="[object Uint16Array]",Bnt="[object Uint32Array]",Fo={};Fo[XSe]=Fo[gnt]=Fo[jnt]=Fo[Tnt]=Fo[ynt]=Fo[bnt]=Fo[Cnt]=Fo[Mnt]=Fo[Ant]=Fo[Rnt]=Fo[Dnt]=Fo[xnt]=Fo[_nt]=Fo[YSe]=Fo[Snt]=Fo[Int]=Fo[Ent]=Fo[Pnt]=Fo[Lnt]=Fo[Nnt]=Fo[Fnt]=Fo[Bnt]=!0;Fo[wnt]=Fo[KSe]=Fo[knt]=!1;function qG(e,t,r,n,o,i){var c,d=t&hnt,h=t&mnt,v=t&vnt;if(r&&(c=o?r(e,n,o,i):r(e)),c!==void 0)return c;if(!cnt(e))return e;var w=snt(e);if(w){if(c=ont(e),!d)return Yrt(e,c)}else{var _=nnt(e),I=_==KSe||_==Ont;if(lnt(e))return Krt(e,d);if(_==YSe||_==XSe||I&&!o){if(c=h||I?{}:ant(e),!d)return h?ent(e,Xrt(c,e)):Qrt(e,Jrt(c,e))}else{if(!Fo[_])return o?e:{};c=int(e,_,d)}}i||(i=new qrt);var R=i.get(e);if(R)return R;i.set(e,c),pnt(e)?e.forEach(function(A){c.add(qG(A,t,r,A,e,i))}):unt(e)&&e.forEach(function(A,N){c.set(N,qG(A,t,r,N,e,i))});var D=v?h?rnt:tnt:h?fnt:dnt,F=w?void 0:D(e);return Urt(F||e,function(A,N){F&&(N=A,A=e[N]),Grt(c,N,qG(A,t,r,N,e,i))}),c}QSe.exports=qG});var r7e=Ce((hOr,t7e)=>{function znt(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}t7e.exports=znt});var o7e=Ce((mOr,n7e)=>{function Wnt(e,t,r){var n=-1,o=e.length;t<0&&(t=-t>o?0:o+t),r=r>o?o:r,r<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var i=Array(o);++n{var Hnt=moe(),Vnt=o7e();function $nt(e,t){return t.length<2?e:Hnt(e,Vnt(t,0,-1))}i7e.exports=$nt});var l7e=Ce((gOr,s7e)=>{var Znt=HG(),qnt=r7e(),Unt=a7e(),Gnt=hoe();function Jnt(e,t){return t=Znt(t,e),e=Unt(e,t),e==null||delete e[Gnt(qnt(t))]}s7e.exports=Jnt});var p7e=Ce((yOr,c7e)=>{var Xnt=U0(),Knt=$G(),Ynt=zd(),Qnt="[object Object]",eot=Function.prototype,tot=Object.prototype,u7e=eot.toString,rot=tot.hasOwnProperty,not=u7e.call(Object);function oot(e){if(!Ynt(e)||Xnt(e)!=Qnt)return!1;var t=Knt(e);if(t===null)return!0;var r=rot.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&u7e.call(r)==not}c7e.exports=oot});var f7e=Ce((bOr,d7e)=>{var iot=p7e();function aot(e){return iot(e)?void 0:e}d7e.exports=aot});var g7e=Ce((wOr,v7e)=>{var h7e=Sx(),sot=kne(),lot=Ch(),m7e=h7e?h7e.isConcatSpreadable:void 0;function uot(e){return lot(e)||sot(e)||!!(m7e&&e&&e[m7e])}v7e.exports=uot});var w7e=Ce((OOr,b7e)=>{var cot=yG(),pot=g7e();function y7e(e,t,r,n,o){var i=-1,c=e.length;for(r||(r=pot),o||(o=[]);++i0&&r(d)?t>1?y7e(d,t-1,r,n,o):cot(o,d):n||(o[o.length]=d)}return o}b7e.exports=y7e});var x7e=Ce((xOr,O7e)=>{var dot=w7e();function fot(e){var t=e==null?0:e.length;return t?dot(e,1):[]}O7e.exports=fot});var S7e=Ce((_Or,_7e)=>{function hot(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}_7e.exports=hot});var P7e=Ce((SOr,E7e)=>{var mot=S7e(),I7e=Math.max;function vot(e,t,r){return t=I7e(t===void 0?e.length-1:t,0),function(){for(var n=arguments,o=-1,i=I7e(n.length-t,0),c=Array(i);++o{function got(e){return function(){return e}}k7e.exports=got});var C7e=Ce((EOr,T7e)=>{function yot(e){return e}T7e.exports=yot});var R7e=Ce((POr,A7e)=>{var bot=j7e(),M7e=voe(),wot=C7e(),Oot=M7e?function(e,t){return M7e(e,"toString",{configurable:!0,enumerable:!1,value:bot(t),writable:!0})}:wot;A7e.exports=Oot});var L7e=Ce((kOr,D7e)=>{var xot=800,_ot=16,Sot=Date.now;function Iot(e){var t=0,r=0;return function(){var n=Sot(),o=_ot-(n-r);if(r=n,o>0){if(++t>=xot)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}D7e.exports=Iot});var F7e=Ce((jOr,N7e)=>{var Eot=R7e(),Pot=L7e(),kot=Pot(Eot);N7e.exports=kot});var z7e=Ce((TOr,B7e)=>{var jot=x7e(),Tot=P7e(),Cot=F7e();function Mot(e){return Cot(Tot(e,void 0,jot),e+"")}B7e.exports=Mot});var H7e=Ce((COr,W7e)=>{var Aot=doe(),Rot=e7e(),Dot=l7e(),Lot=HG(),Not=u9(),Fot=f7e(),Bot=z7e(),zot=woe(),Wot=1,Hot=2,Vot=4,$ot=Bot(function(e,t){var r={};if(e==null)return r;var n=!1;t=Aot(t,function(i){return i=Lot(i,e),n||(n=i.length>1),i}),Not(e,zot(e),r),n&&(r=Rot(r,Wot|Hot|Vot,Fot));for(var o=t.length;o--;)Dot(r,t[o]);return r});W7e.exports=$ot});var J8e=Ce(jo=>{"use strict";var dJ=60103,fJ=60106,uV=60107,cV=60108,pV=60114,dV=60109,fV=60110,hV=60112,mV=60113,ahe=60120,vV=60115,gV=60116,$8e=60121,Z8e=60122,q8e=60117,U8e=60129,G8e=60131;typeof Symbol=="function"&&Symbol.for&&(cs=Symbol.for,dJ=cs("react.element"),fJ=cs("react.portal"),uV=cs("react.fragment"),cV=cs("react.strict_mode"),pV=cs("react.profiler"),dV=cs("react.provider"),fV=cs("react.context"),hV=cs("react.forward_ref"),mV=cs("react.suspense"),ahe=cs("react.suspense_list"),vV=cs("react.memo"),gV=cs("react.lazy"),$8e=cs("react.block"),Z8e=cs("react.server.block"),q8e=cs("react.fundamental"),U8e=cs("react.debug_trace_mode"),G8e=cs("react.legacy_hidden"));var cs;function Ah(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case dJ:switch(e=e.type,e){case uV:case pV:case cV:case mV:case ahe:return e;default:switch(e=e&&e.$$typeof,e){case fV:case hV:case gV:case vV:case dV:return e;default:return t}}case fJ:return t}}}var _Vt=dV,SVt=dJ,IVt=hV,EVt=uV,PVt=gV,kVt=vV,jVt=fJ,TVt=pV,CVt=cV,MVt=mV;jo.ContextConsumer=fV;jo.ContextProvider=_Vt;jo.Element=SVt;jo.ForwardRef=IVt;jo.Fragment=EVt;jo.Lazy=PVt;jo.Memo=kVt;jo.Portal=jVt;jo.Profiler=TVt;jo.StrictMode=CVt;jo.Suspense=MVt;jo.isAsyncMode=function(){return!1};jo.isConcurrentMode=function(){return!1};jo.isContextConsumer=function(e){return Ah(e)===fV};jo.isContextProvider=function(e){return Ah(e)===dV};jo.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===dJ};jo.isForwardRef=function(e){return Ah(e)===hV};jo.isFragment=function(e){return Ah(e)===uV};jo.isLazy=function(e){return Ah(e)===gV};jo.isMemo=function(e){return Ah(e)===vV};jo.isPortal=function(e){return Ah(e)===fJ};jo.isProfiler=function(e){return Ah(e)===pV};jo.isStrictMode=function(e){return Ah(e)===cV};jo.isSuspense=function(e){return Ah(e)===mV};jo.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===uV||e===pV||e===U8e||e===cV||e===mV||e===ahe||e===G8e||typeof e=="object"&&e!==null&&(e.$$typeof===gV||e.$$typeof===vV||e.$$typeof===dV||e.$$typeof===fV||e.$$typeof===hV||e.$$typeof===q8e||e.$$typeof===$8e||e[0]===Z8e)};jo.typeOf=Ah});var K8e=Ce((iFr,X8e)=>{"use strict";X8e.exports=J8e()});var fIe=Ce((BFr,dIe)=>{"use strict";dIe.exports=function(t,r){if(r=r.split(":")[0],t=+t,!t)return!1;switch(r){case"http":case"ws":return t!==80;case"https":case"wss":return t!==443;case"ftp":return t!==21;case"gopher":return t!==70;case"file":return!1}return t!==0}});var vIe=Ce(che=>{"use strict";var YVt=Object.prototype.hasOwnProperty,QVt;function hIe(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return null}}function mIe(e){try{return encodeURIComponent(e)}catch{return null}}function e$t(e){for(var t=/([^=?#&]+)=?([^&]*)/g,r={},n;n=t.exec(e);){var o=hIe(n[1]),i=hIe(n[2]);o===null||i===null||o in r||(r[o]=i)}return r}function t$t(e,t){t=t||"";var r=[],n,o;typeof t!="string"&&(t="?");for(o in e)if(YVt.call(e,o)){if(n=e[o],!n&&(n===null||n===QVt||isNaN(n))&&(n=""),o=mIe(o),n=mIe(n),o===null||n===null)continue;r.push(o+"="+n)}return r.length?t+r.join("&"):""}che.stringify=t$t;che.parse=e$t});var SIe=Ce((WFr,_Ie)=>{"use strict";var yIe=fIe(),vJ=vIe(),r$t=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,bIe=/[\n\r\t]/g,n$t=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,wIe=/:\d+$/,o$t=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,i$t=/^[a-zA-Z]:/;function dhe(e){return(e||"").toString().replace(r$t,"")}var phe=[["#","hash"],["?","query"],function(t,r){return Q0(r.protocol)?t.replace(/\\/g,"/"):t},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],gIe={hash:1,query:1};function OIe(e){var t;typeof window<"u"?t=window:typeof global<"u"?t=global:typeof self<"u"?t=self:t={};var r=t.location||{};e=e||r;var n={},o=typeof e,i;if(e.protocol==="blob:")n=new e1(unescape(e.pathname),{});else if(o==="string"){n=new e1(e,{});for(i in gIe)delete n[i]}else if(o==="object"){for(i in e)i in gIe||(n[i]=e[i]);n.slashes===void 0&&(n.slashes=n$t.test(e.href))}return n}function Q0(e){return e==="file:"||e==="ftp:"||e==="http:"||e==="https:"||e==="ws:"||e==="wss:"}function xIe(e,t){e=dhe(e),e=e.replace(bIe,""),t=t||{};var r=o$t.exec(e),n=r[1]?r[1].toLowerCase():"",o=!!r[2],i=!!r[3],c=0,d;return o?i?(d=r[2]+r[3]+r[4],c=r[2].length+r[3].length):(d=r[2]+r[4],c=r[2].length):i?(d=r[3]+r[4],c=r[3].length):d=r[4],n==="file:"?c>=2&&(d=d.slice(2)):Q0(n)?d=r[4]:n?o&&(d=d.slice(2)):c>=2&&Q0(t.protocol)&&(d=r[4]),{protocol:n,slashes:o||Q0(n),slashesCount:c,rest:d}}function a$t(e,t){if(e==="")return t;for(var r=(t||"/").split("/").slice(0,-1).concat(e.split("/")),n=r.length,o=r[n-1],i=!1,c=0;n--;)r[n]==="."?r.splice(n,1):r[n]===".."?(r.splice(n,1),c++):c&&(n===0&&(i=!0),r.splice(n,1),c--);return i&&r.unshift(""),(o==="."||o==="..")&&r.push(""),r.join("/")}function e1(e,t,r){if(e=dhe(e),e=e.replace(bIe,""),!(this instanceof e1))return new e1(e,t,r);var n,o,i,c,d,h,v=phe.slice(),w=typeof t,_=this,I=0;for(w!=="object"&&w!=="string"&&(r=t,t=null),r&&typeof r!="function"&&(r=vJ.parse),t=OIe(t),o=xIe(e||"",t),n=!o.protocol&&!o.slashes,_.slashes=o.slashes||n&&t.slashes,_.protocol=o.protocol||t.protocol||"",e=o.rest,(o.protocol==="file:"&&(o.slashesCount!==2||i$t.test(e))||!o.slashes&&(o.protocol||o.slashesCount<2||!Q0(_.protocol)))&&(v[3]=[/(.*)/,"pathname"]);I{var her=foe(),Lje=/[\\^$.*+?()[\]{}|]/g,mer=RegExp(Lje.source);function ver(e){return e=her(e),e&&mer.test(e)?e.replace(Lje,"\\$&"):e}Nje.exports=ver});var mRe=Ce((OY,hRe)=>{(function(e,t){typeof OY=="object"&&typeof hRe<"u"?t(OY):typeof define=="function"&&define.amd?define(["exports"],t):(e=typeof globalThis<"u"?globalThis:e||self,t(e.vis=e.vis||{}))})(OY,function(e){function t(y,x){if(!(y instanceof x))throw new TypeError("Cannot call a class as a function")}var r=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function n(y){return y&&y.__esModule&&Object.prototype.hasOwnProperty.call(y,"default")?y.default:y}var o={exports:{}},i=function(y){return y&&y.Math===Math&&y},c=i(typeof globalThis=="object"&&globalThis)||i(typeof window=="object"&&window)||i(typeof self=="object"&&self)||i(typeof r=="object"&&r)||function(){return this}()||r||Function("return this")(),d=function(y){try{return!!y()}catch{return!0}},h=d,v=!h(function(){var y=function(){}.bind();return typeof y!="function"||y.hasOwnProperty("prototype")}),w=v,_=Function.prototype,I=_.apply,R=_.call,D=typeof Reflect=="object"&&Reflect.apply||(w?R.bind(I):function(){return R.apply(I,arguments)}),F=v,A=Function.prototype,N=A.call,H=F&&A.bind.bind(N,N),q=F?H:function(y){return function(){return N.apply(y,arguments)}},Y=q,ee=Y({}.toString),ne=Y("".slice),te=function(y){return ne(ee(y),8,-1)},de=te,fe=q,ye=function(y){if(de(y)==="Function")return fe(y)},Ie=typeof document=="object"&&document.all,he=typeof Ie>"u"&&Ie!==void 0,be={all:Ie,IS_HTMLDDA:he},Se=be,Te=Se.all,Pe=Se.IS_HTMLDDA?function(y){return typeof y=="function"||y===Te}:function(y){return typeof y=="function"},Ve={},De=d,He=!De(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),Je=v,vt=Function.prototype.call,Qe=Je?vt.bind(vt):function(){return vt.apply(vt,arguments)},Ne={},Nt={}.propertyIsEnumerable,Vt=Object.getOwnPropertyDescriptor,Ke=Vt&&!Nt.call({1:2},1);Ne.f=Ke?function(x){var C=Vt(this,x);return!!C&&C.enumerable}:Nt;var st=function(y,x){return{enumerable:!(y&1),configurable:!(y&2),writable:!(y&4),value:x}},Tt=q,wr=d,Rt=te,Ut=Object,vr=Tt("".split),Sr=wr(function(){return!Ut("z").propertyIsEnumerable(0)})?function(y){return Rt(y)==="String"?vr(y,""):Ut(y)}:Ut,Er=function(y){return y==null},po=Er,Pn=TypeError,Nr=function(y){if(po(y))throw new Pn("Can't call method on "+y);return y},Wo=Sr,Cr=Nr,St=function(y){return Wo(Cr(y))},tn=Pe,Ks=be,hs=Ks.all,Pr=Ks.IS_HTMLDDA?function(y){return typeof y=="object"?y!==null:tn(y)||y===hs}:function(y){return typeof y=="object"?y!==null:tn(y)},or={},ir=or,Mr=c,Ur=Pe,ms=function(y){return Ur(y)?y:void 0},Nn=function(y,x){return arguments.length<2?ms(ir[y])||ms(Mr[y]):ir[y]&&ir[y][x]||Mr[y]&&Mr[y][x]},Ri=q,Xn=Ri({}.isPrototypeOf),ya=typeof navigator<"u"&&String(navigator.userAgent)||"",ba=c,wa=ya,v1=ba.process,Kd=ba.Deno,yc=v1&&v1.versions||Kd&&Kd.version,Za=yc&&yc.v8,li,Op;Za&&(li=Za.split("."),Op=li[0]>0&&li[0]<4?1:+(li[0]+li[1])),!Op&&wa&&(li=wa.match(/Edge\/(\d+)/),(!li||li[1]>=74)&&(li=wa.match(/Chrome\/(\d+)/),li&&(Op=+li[1])));var Rl=Op,Ct=Rl,Yd=d,Qd=c,Ki=Qd.String,fo=!!Object.getOwnPropertySymbols&&!Yd(function(){var y=Symbol("symbol detection");return!Ki(y)||!(Object(y)instanceof Symbol)||!Symbol.sham&&Ct&&Ct<41}),rn=fo,Hh=rn&&!Symbol.sham&&typeof Symbol.iterator=="symbol",pn=Nn,Ko=Pe,z3=Xn,xp=Hh,Co=Object,ui=xp?function(y){return typeof y=="symbol"}:function(y){var x=pn("Symbol");return Ko(x)&&z3(x.prototype,Co(y))},Yi=String,Hn=function(y){try{return Yi(y)}catch{return"Object"}},qa=Pe,vs=Hn,gu=TypeError,Qi=function(y){if(qa(y))return y;throw new gu(vs(y)+" is not a function")},fy=Qi,yu=Er,bc=function(y,x){var C=y[x];return yu(C)?void 0:fy(C)},Dl=Qe,Oa=Pe,wc=Pr,Di=TypeError,ea=function(y,x){var C,M;if(x==="string"&&Oa(C=y.toString)&&!wc(M=Dl(C,y))||Oa(C=y.valueOf)&&!wc(M=Dl(C,y))||x!=="string"&&Oa(C=y.toString)&&!wc(M=Dl(C,y)))return M;throw new Di("Can't convert object to primitive value")},hy={exports:{}},Yo=!0,kr=c,g1=Object.defineProperty,W3=function(y,x){try{g1(kr,y,{value:x,configurable:!0,writable:!0})}catch{kr[y]=x}return x},my=c,ef=W3,tf="__core-js_shared__",vy=my[tf]||ef(tf,{}),Vh=vy,gy=Vh;(hy.exports=function(y,x){return gy[y]||(gy[y]=x!==void 0?x:{})})("versions",[]).push({version:"3.33.2",mode:"pure",copyright:"\xA9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.2/LICENSE",source:"https://github.com/zloirock/core-js"});var _p=hy.exports,Sp=Nr,Ll=Object,ci=function(y){return Ll(Sp(y))},ho=q,ao=ci,yy=ho({}.hasOwnProperty),so=Object.hasOwn||function(x,C){return yy(ao(x),C)},by=q,rf=0,$h=Math.random(),wy=by(1 .toString),bu=function(y){return"Symbol("+(y===void 0?"":y)+")_"+wy(++rf+$h,36)},Nl=c,Zh=_p,Ip=so,qh=bu,y1=fo,Oy=Hh,wu=Nl.Symbol,Uh=Zh("wks"),xy=Oy?wu.for||wu:wu&&wu.withoutSetter||qh,Kn=function(y){return Ip(Uh,y)||(Uh[y]=y1&&Ip(wu,y)?wu[y]:xy("Symbol."+y)),Uh[y]},H3=Qe,b1=Pr,_y=ui,V3=bc,$3=ea,Z3=Kn,Sy=TypeError,Iy=Z3("toPrimitive"),q3=function(y,x){if(!b1(y)||_y(y))return y;var C=V3(y,Iy),M;if(C){if(x===void 0&&(x="default"),M=H3(C,y,x),!b1(M)||_y(M))return M;throw new Sy("Can't convert object to primitive value")}return x===void 0&&(x="number"),$3(y,x)},U3=q3,nf=ui,Ou=function(y){var x=U3(y,"string");return nf(x)?x:x+""},G3=c,Ey=Pr,w1=G3.document,J3=Ey(w1)&&Ey(w1.createElement),Gh=function(y){return J3?w1.createElement(y):{}},O1=He,x1=d,of=Gh,mo=!O1&&!x1(function(){return Object.defineProperty(of("div"),"a",{get:function(){return 7}}).a!==7}),bi=He,Py=Qe,X3=Ne,K3=st,xa=St,ta=Ou,ro=so,af=mo,Fl=Object.getOwnPropertyDescriptor;Ve.f=bi?Fl:function(x,C){if(x=xa(x),C=ta(C),af)try{return Fl(x,C)}catch{}if(ro(x,C))return K3(!Py(X3.f,x,C),x[C])};var sf=d,_1=Pe,S1=/#|\.prototype\./,Oc=function(y,x){var C=Ua[Ep(y)];return C===I1?!0:C===xc?!1:_1(x)?sf(x):!!x},Ep=Oc.normalize=function(y){return String(y).replace(S1,".").toLowerCase()},Ua=Oc.data={},xc=Oc.NATIVE="N",I1=Oc.POLYFILL="P",Ys=Oc,_c=ye,ra=Qi,Jh=v,Y3=_c(_c.bind),xu=function(y,x){return ra(y),x===void 0?y:Jh?Y3(y,x):function(){return y.apply(x,arguments)}},pi={},E1=He,Pp=d,Sc=E1&&Pp(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),kp=Pr,_u=String,ky=TypeError,Bt=function(y){if(kp(y))return y;throw new ky(_u(y)+" is not an object")},ar=He,Q3=mo,ew=Sc,Bl=Bt,P1=Ou,jp=TypeError,Xh=Object.defineProperty,Su=Object.getOwnPropertyDescriptor,Tp="enumerable",lf="configurable",Qs="writable";pi.f=ar?ew?function(x,C,M){if(Bl(x),C=P1(C),Bl(M),typeof x=="function"&&C==="prototype"&&"value"in M&&Qs in M&&!M[Qs]){var B=Su(x,C);B&&B[Qs]&&(x[C]=M.value,M={configurable:lf in M?M[lf]:B[lf],enumerable:Tp in M?M[Tp]:B[Tp],writable:!1})}return Xh(x,C,M)}:Xh:function(x,C,M){if(Bl(x),C=P1(C),Bl(M),Q3)try{return Xh(x,C,M)}catch{}if("get"in M||"set"in M)throw new jp("Accessors not supported");return"value"in M&&(x[C]=M.value),x};var Ga=He,tw=pi,rw=st,_a=Ga?function(y,x,C){return tw.f(y,x,rw(1,C))}:function(y,x,C){return y[x]=C,y},uf=c,Kh=D,kn=ye,Li=Pe,nw=Ve.f,cf=Ys,Cp=or,jy=xu,Ic=_a,Sa=so,Ty=function(y){var x=function(C,M,B){if(this instanceof x){switch(arguments.length){case 0:return new y;case 1:return new y(C);case 2:return new y(C,M)}return new y(C,M,B)}return Kh(y,this,arguments)};return x.prototype=y.prototype,x},er=function(y,x){var C=y.target,M=y.global,B=y.stat,Z=y.proto,re=M?uf:B?uf[C]:(uf[C]||{}).prototype,ce=M?Cp:Cp[C]||Ic(Cp,C,{})[C],ae=ce.prototype,me,Oe,Me,ke,Le,Pt,br,Or,Gr;for(ke in x)me=cf(M?ke:C+(B?".":"#")+ke,y.forced),Oe=!me&&re&&Sa(re,ke),Pt=ce[ke],Oe&&(y.dontCallGetSet?(Gr=nw(re,ke),br=Gr&&Gr.value):br=re[ke]),Le=Oe&&br?br:x[ke],!(Oe&&typeof Pt==typeof Le)&&(y.bind&&Oe?Or=jy(Le,uf):y.wrap&&Oe?Or=Ty(Le):Z&&Li(Le)?Or=kn(Le):Or=Le,(y.sham||Le&&Le.sham||Pt&&Pt.sham)&&Ic(Or,"sham",!0),Ic(ce,ke,Or),Z&&(Me=C+"Prototype",Sa(Cp,Me)||Ic(Cp,Me,{}),Ic(Cp[Me],ke,Le),y.real&&ae&&(me||!ae[ke])&&Ic(ae,ke,Le)))},Yh=er,Iu=He,zl=pi.f;Yh({target:"Object",stat:!0,forced:Object.defineProperty!==zl,sham:!Iu},{defineProperty:zl});var k1=or,Cy=k1.Object,My=o.exports=function(x,C,M){return Cy.defineProperty(x,C,M)};Cy.defineProperty.sham&&(My.sham=!0);var gs=o.exports,j1=gs,Mp=j1,T1=Mp,Ay=T1,Ap=Ay,Ry=Ap,C1=Ry,Qh=n(C1),Dy=te,Cn=Array.isArray||function(x){return Dy(x)==="Array"},em=Math.ceil,M1=Math.floor,A1=Math.trunc||function(x){var C=+x;return(C>0?M1:em)(C)},Ly=A1,tm=function(y){var x=+y;return x!==x||x===0?0:Ly(x)},Rp=tm,Ja=Math.min,ys=function(y){return y>0?Ja(Rp(y),9007199254740991):0},R1=ys,Ia=function(y){return R1(y.length)},rm=TypeError,D1=9007199254740991,Dp=function(y){if(y>D1)throw rm("Maximum allowed index exceeded");return y},ow=Ou,vo=pi,iw=st,Lp=function(y,x,C){var M=ow(x);M in y?vo.f(y,M,iw(0,C)):y[M]=C},aw=Kn,Ec=aw("toStringTag"),Ny={};Ny[Ec]="z";var nm=String(Ny)==="[object z]",at=nm,L1=Pe,pf=te,N1=Kn,F1=N1("toStringTag"),B1=Object,Fy=pf(function(){return arguments}())==="Arguments",By=function(y,x){try{return y[x]}catch{}},Ea=at?pf:function(y){var x,C,M;return y===void 0?"Undefined":y===null?"Null":typeof(C=By(x=B1(y),F1))=="string"?C:Fy?pf(x):(M=pf(x))==="Object"&&L1(x.callee)?"Arguments":M},z1=q,om=Pe,Pc=Vh,im=z1(Function.toString);om(Pc.inspectSource)||(Pc.inspectSource=function(y){return im(y)});var am=Pc.inspectSource,kc=q,sm=d,df=Pe,zy=Ea,Wy=Nn,ff=am,bs=function(){},Np=[],hf=Wy("Reflect","construct"),na=/^\s*(?:class|function)\b/,Eu=kc(na.exec),Fp=!na.test(bs),Pu=function(x){if(!df(x))return!1;try{return hf(bs,Np,x),!0}catch{return!1}},Hy=function(x){if(!df(x))return!1;switch(zy(x)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return Fp||!!Eu(na,ff(x))}catch{return!0}};Hy.sham=!0;var lm=!hf||sm(function(){var y;return Pu(Pu.call)||!Pu(Object)||!Pu(function(){y=!0})||y})?Hy:Pu,W1=Cn,Vy=lm,H1=Pr,V1=Kn,sw=V1("species"),$1=Array,mf=function(y){var x;return W1(y)&&(x=y.constructor,Vy(x)&&(x===$1||W1(x.prototype))?x=void 0:H1(x)&&(x=x[sw],x===null&&(x=void 0))),x===void 0?$1:x},lw=mf,vf=function(y,x){return new(lw(y))(x===0?0:x)},um=d,uw=Kn,$y=Rl,cw=uw("species"),ku=function(y){return $y>=51||!um(function(){var x=[],C=x.constructor={};return C[cw]=function(){return{foo:1}},x[y](Boolean).foo!==1})},cm=er,Z1=d,Zy=Cn,pm=Pr,qy=ci,q1=Ia,gf=Dp,ws=Lp,Bp=vf,el=ku,jc=Kn,zp=Rl,dm=jc("isConcatSpreadable"),U1=zp>=51||!Z1(function(){var y=[];return y[dm]=!1,y.concat()[0]!==y}),fm=function(y){if(!pm(y))return!1;var x=y[dm];return x!==void 0?!!x:Zy(y)},Uy=!U1||!el("concat");cm({target:"Array",proto:!0,arity:1,forced:Uy},{concat:function(x){var C=qy(this),M=Bp(C,0),B=0,Z,re,ce,ae,me;for(Z=-1,ce=arguments.length;Zre;)if(ce=B[re++],ce!==ce)return!0}else for(;Z>re;re++)if((y||re in B)&&B[re]===C)return y||re||0;return!y&&-1}},fw={includes:vm(!0),indexOf:vm(!1)},yf={},ot=q,bf=so,gm=St,Ac=fw.indexOf,dn=yf,Os=ot([].push),ym=function(y,x){var C=gm(y),M=0,B=[],Z;for(Z in C)!bf(dn,Z)&&bf(C,Z)&&Os(B,Z);for(;x.length>M;)bf(C,Z=x[M++])&&(~Ac(B,Z)||Os(B,Z));return B},tl=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],xs=ym,Xy=tl,Tu=Object.keys||function(x){return xs(x,Xy)},rl=He,wf=Sc,nl=pi,hw=Bt,Ky=St,mw=Tu;hm.f=rl&&!wf?Object.defineProperties:function(x,C){hw(x);for(var M=Ky(C),B=mw(C),Z=B.length,re=0,ce;Z>re;)nl.f(x,ce=B[re++],M[ce]);return x};var lo=Nn,Of=lo("document","documentElement"),vw=_p,xf=bu,bm=vw("keys"),Wl=function(y){return bm[y]||(bm[y]=xf(y))},Hl=Bt,Yy=hm,Qy=tl,gw=yf,eb=Of,yw=Gh,G1=Wl,wm=">",Cu="<",Om="prototype",xm="script",tb=G1("IE_PROTO"),_m=function(){},Mu=function(y){return Cu+xm+wm+y+Cu+"/"+xm+wm},rb=function(y){y.write(Mu("")),y.close();var x=y.parentWindow.Object;return y=null,x},J1=function(){var y=yw("iframe"),x="java"+xm+":",C;return y.style.display="none",eb.appendChild(y),y.src=String(x),C=y.contentWindow.document,C.open(),C.write(Mu("document.F=Object")),C.close(),C.F},Wp,_f=function(){try{Wp=new ActiveXObject("htmlfile")}catch{}_f=typeof document<"u"?document.domain&&Wp?rb(Wp):J1():rb(Wp);for(var y=Qy.length;y--;)delete _f[Om][Qy[y]];return _f()};gw[tb]=!0;var Ka=Object.create||function(x,C){var M;return x!==null?(_m[Om]=Hl(x),M=new _m,_m[Om]=null,M[tb]=x):M=_f(),C===void 0?M:Yy.f(M,C)},_s={},X1=ym,bw=tl,Qo=bw.concat("length","prototype");_s.f=Object.getOwnPropertyNames||function(x){return X1(x,Qo)};var Pa={},Vl=Mc,ww=Ia,Ow=Lp,xw=Array,_w=Math.max,Sm=function(y,x,C){for(var M=ww(y),B=Vl(x,M),Z=Vl(C===void 0?M:C,M),re=xw(_w(Z-B,0)),ce=0;BOr;Or++)if((ce||Or in Le)&&(Fa=Le[Or],mi=Pt(Fa,Or,ke),y))if(x)un[Or]=mi;else if(mi)switch(y){case 3:return!0;case 5:return Fa;case 6:return Or;case 2:Cw(un,Fa)}else switch(y){case 4:return!1;case 7:Cw(un,Fa)}return Z?-1:M||B?B:un}},Ef={forEach:Du(0),map:Du(1),filter:Du(2),some:Du(3),every:Du(4),find:Du(5),findIndex:Du(6),filterReject:Du(7)},ov=er,Pm=c,km=Qe,qP=q,jm=He,Tm=fo,b_=d,Oi=so,Mw=Xn,cb=Bt,pb=St,Aw=Ou,UP=Xa,Rw=st,iv=Ka,Dw=Tu,av=_s,db=Pa,GP=K,Lw=Ve,Nw=pi,Fw=hm,Bw=Ne,zw=_e,Ww=ut,Hw=_p,sv=Wl,fb=yf,Dc=bu,w_=Kn,Vw=cr,O_=Yn,JP=Q1,hb=Sf,Lu=Ru,Pf=Ef.forEach,ka=sv("hidden"),mb="Symbol",lv="prototype",XP=Lu.set,x_=Lu.getterFor(mb),il=Object[lv],Lc=Pm.Symbol,kf=Lc&&Lc[lv],vb=Pm.RangeError,__=Pm.TypeError,uv=Pm.QObject,gb=Lw.f,Vp=Nw.f,$p=db.f,gt=Bw.f,$w=qP([].push),ja=Hw("symbols"),Cm=Hw("op-symbols"),Zw=Hw("wks"),yb=!uv||!uv[lv]||!uv[lv].findChild,jf=function(y,x,C){var M=gb(il,x);M&&delete il[x],Vp(y,x,C),M&&y!==il&&Vp(il,x,M)},Mm=jm&&b_(function(){return iv(Vp({},"a",{get:function(){return Vp(this,"a",{value:7}).a}})).a!==7})?jf:Vp,Am=function(y,x){var C=ja[y]=iv(kf);return XP(C,{type:mb,tag:y,description:x}),jm||(C.description=x),C},cv=function(x,C,M){x===il&&cv(Cm,C,M),cb(x);var B=Aw(C);return cb(M),Oi(ja,B)?(M.enumerable?(Oi(x,ka)&&x[ka][B]&&(x[ka][B]=!1),M=iv(M,{enumerable:Rw(0,!1)})):(Oi(x,ka)||Vp(x,ka,Rw(1,{})),x[ka][B]=!0),Mm(x,B,M)):Vp(x,B,M)},Nc=function(x,C){cb(x);var M=pb(C),B=Dw(M).concat(I_(M));return Pf(B,function(Z){(!jm||km(bb,M,Z))&&cv(x,Z,M[Z])}),x},qw=function(x,C){return C===void 0?iv(x):Nc(iv(x),C)},bb=function(x){var C=Aw(x),M=km(gt,this,C);return this===il&&Oi(ja,C)&&!Oi(Cm,C)?!1:M||!Oi(this,C)||!Oi(ja,C)||Oi(this,ka)&&this[ka][C]?M:!0},wb=function(x,C){var M=pb(x),B=Aw(C);if(!(M===il&&Oi(ja,B)&&!Oi(Cm,B))){var Z=gb(M,B);return Z&&Oi(ja,B)&&!(Oi(M,ka)&&M[ka][B])&&(Z.enumerable=!0),Z}},S_=function(x){var C=$p(pb(x)),M=[];return Pf(C,function(B){!Oi(ja,B)&&!Oi(fb,B)&&$w(M,B)}),M},I_=function(y){var x=y===il,C=$p(x?Cm:pb(y)),M=[];return Pf(C,function(B){Oi(ja,B)&&(!x||Oi(il,B))&&$w(M,ja[B])}),M};Tm||(Lc=function(){if(Mw(kf,this))throw new __("Symbol is not a constructor");var x=!arguments.length||arguments[0]===void 0?void 0:UP(arguments[0]),C=Dc(x),M=function(B){var Z=this===void 0?Pm:this;Z===il&&km(M,Cm,B),Oi(Z,ka)&&Oi(Z[ka],C)&&(Z[ka][C]=!1);var re=Rw(1,B);try{Mm(Z,C,re)}catch(ce){if(!(ce instanceof vb))throw ce;jf(Z,C,re)}};return jm&&yb&&Mm(il,C,{configurable:!0,set:M}),Am(C,x)},kf=Lc[lv],zw(kf,"toString",function(){return x_(this).tag}),zw(Lc,"withoutSetter",function(y){return Am(Dc(y),y)}),Bw.f=bb,Nw.f=cv,Fw.f=Nc,Lw.f=wb,av.f=db.f=S_,GP.f=I_,Vw.f=function(y){return Am(w_(y),y)},jm&&Ww(kf,"description",{configurable:!0,get:function(){return x_(this).description}})),ov({global:!0,constructor:!0,wrap:!0,forced:!Tm,sham:!Tm},{Symbol:Lc}),Pf(Dw(Zw),function(y){O_(y)}),ov({target:mb,stat:!0,forced:!Tm},{useSetter:function(){yb=!0},useSimple:function(){yb=!1}}),ov({target:"Object",stat:!0,forced:!Tm,sham:!jm},{create:qw,defineProperty:cv,defineProperties:Nc,getOwnPropertyDescriptor:wb}),ov({target:"Object",stat:!0,forced:!Tm},{getOwnPropertyNames:S_}),JP(),hb(Lc,mb),fb[ka]=!0;var KP=fo,Uw=KP&&!!Symbol.for&&!!Symbol.keyFor,E_=er,pv=Nn,YP=so,Ob=Xa,P_=_p,dv=Uw,Gw=P_("string-to-symbol-registry"),QP=P_("symbol-to-string-registry");E_({target:"Symbol",stat:!0,forced:!dv},{for:function(y){var x=Ob(y);if(YP(Gw,x))return Gw[x];var C=pv("Symbol")(x);return Gw[x]=C,QP[C]=x,C}});var k_=er,ek=so,Jw=ui,j_=Hn,T_=_p,Xw=Uw,C_=T_("symbol-to-string-registry");k_({target:"Symbol",stat:!0,forced:!Xw},{keyFor:function(x){if(!Jw(x))throw new TypeError(j_(x)+" is not a symbol");if(ek(C_,x))return C_[x]}});var tk=q,fv=tk([].slice),M_=q,A_=Cn,rk=Pe,Rm=te,nk=Xa,R_=M_([].push),xb=function(y){if(rk(y))return y;if(A_(y)){for(var x=y.length,C=[],M=0;M=x.length)return y.target=void 0,zb(void 0,!0);switch(y.kind){case"keys":return zb(C,!1);case"values":return zb(x[C],!1)}return zb([C,x[C]],!1)},"values"),Lf.Arguments=Lf.Array;var Wb={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},mS=Wb,_k=c,Sk=Ea,yO=_a,fi=Lm,vS=Kn,bO=vS("toStringTag");for(var Hb in mS){var wO=_k[Hb],xv=wO&&wO.prototype;xv&&Sk(xv)!==bO&&yO(xv,bO,Hb),fi[Hb]=fi.Array}var ks=iO,OO=ks,Ik=Kn,Ek=pi.f,gS=Ik("metadata"),xO=Function.prototype;xO[gS]===void 0&&Ek(xO,gS,{value:null});var yS=Yn;yS("asyncDispose");var Pk=Yn;Pk("dispose");var kk=Yn;kk("metadata");var bS=OO,wS=bS,jk=Nn,Tk=q,_v=jk("Symbol"),_O=_v.keyFor,Ck=Tk(_v.prototype.valueOf),SO=_v.isRegisteredSymbol||function(x){try{return _O(Ck(x))!==void 0}catch{return!1}},Mk=er,OS=SO;Mk({target:"Symbol",stat:!0},{isRegisteredSymbol:OS});for(var xS=_p,_S=Nn,SS=q,Vb=ui,IS=Kn,Sv=_S("Symbol"),ES=Sv.isWellKnownSymbol,IO=_S("Object","getOwnPropertyNames"),$b=SS(Sv.prototype.valueOf),EO=xS("wks"),Zb=0,PO=IO(Sv),PS=PO.length;Zb=Z?y?"":void 0:(re=RS(M,B),re<55296||re>56319||B+1===Z||(ce=RS(M,B+1))<56320||ce>57343?y?Ub(M,B):re:y?DS(M,B,B+2):(re-55296<<10)+(ce-56320)+65536)}},LS={codeAt:TO(!1),charAt:TO(!0)},NS=LS.charAt,Gb=Xa,Jb=Ru,FS=mO,Ev=Df,CO="String Iterator",BS=Jb.set,zk=Jb.getterFor(CO);FS(String,"String",function(y){BS(this,{type:CO,string:Gb(y),index:0})},function(){var x=zk(this),C=x.string,M=x.index,B;return M>=C.length?Ev(void 0,!0):(B=NS(C,M),x.index+=B.length,Ev(B,!1))});var Wk=cr,Hk=Wk.f("iterator"),MO=Hk,AO=MO,Vk=AO,$k=Vk,Zk=$k,RO=Zk,zS=RO,WS=n(zS);function zm(y){"@babel/helpers - typeof";return zm=typeof Ff=="function"&&typeof WS=="symbol"?function(x){return typeof x}:function(x){return x&&typeof Ff=="function"&&x.constructor===Ff&&x!==Ff.prototype?"symbol":typeof x},zm(y)}var Xb=cr,Kb=Xb.f("toPrimitive"),HS=Kb,Mo=HS,ql=Mo,Xp=ql,qk=Xp,VS=qk,Uk=VS,DO=n(Uk);function Gk(y,x){if(zm(y)!=="object"||y===null)return y;var C=y[DO];if(C!==void 0){var M=C.call(y,x||"default");if(zm(M)!=="object")return M;throw new TypeError("@@toPrimitive must return a primitive value.")}return(x==="string"?String:Number)(y)}function Yb(y){var x=Gk(y,"string");return zm(x)==="symbol"?x:String(x)}function _i(y,x){for(var C=0;C=0:ce>ae;ae+=me)ae in re&&(B=C(B,re[ae],ae,Z));return B}},XS={left:JS(!1),right:JS(!0)},oj=d,Pv=function(y,x){var C=[][y];return!!C&&oj(function(){C.call(null,x||function(){return 1},1)})},ij=c,aj=te,kv=aj(ij.process)==="process",jv=er,sj=XS.left,Yp=Pv,zu=Rl,lj=kv,KS=!lj&&zu>79&&zu<83,uj=KS||!Yp("reduce");jv({target:"Array",proto:!0,forced:uj},{reduce:function(x){var C=arguments.length;return sj(this,x,C,C>1?arguments[1]:void 0)}});var YS=Fi,cj=YS("Array","reduce"),pj=Xn,dj=cj,Tv=Array.prototype,QS=function(y){var x=y.reduce;return y===Tv||pj(Tv,y)&&x===Tv.reduce?dj:x},fj=QS,e7=fj,zO=e7,WO=n(zO),hj=er,mj=Ef.filter,vj=ku,gj=vj("filter");hj({target:"Array",proto:!0,forced:!gj},{filter:function(x){return mj(this,x,arguments.length>1?arguments[1]:void 0)}});var yj=Fi,HO=yj("Array","filter"),bj=Xn,Wc=HO,VO=Array.prototype,$O=function(y){var x=y.filter;return y===VO||bj(VO,y)&&x===VO.filter?Wc:x},wj=$O,Oj=wj,xj=Oj,Si=n(xj),_j=er,Sj=Ef.map,ZO=ku,t7=ZO("map");_j({target:"Array",proto:!0,forced:!t7},{map:function(x){return Sj(this,x,arguments.length>1?arguments[1]:void 0)}});var r7=Fi,n7=r7("Array","map"),Ij=Xn,Ej=n7,Cv=Array.prototype,o7=function(y){var x=y.map;return y===Cv||Ij(Cv,y)&&x===Cv.map?Ej:x},Pj=o7,kj=Pj,qO=kj,ei=n(qO),i7=Cn,Qp=Ia,jj=Dp,UO=xu,GO=function(y,x,C,M,B,Z,re,ce){for(var ae=B,me=0,Oe=re?UO(re,ce):!1,Me,ke;me0&&i7(Me)?(ke=Qp(Me),ae=GO(y,x,Me,ke,ae,Z-1)-1):(jj(ae+1),y[ae]=Me),ae++),me++;return ae},a7=GO,JO=er,Tj=a7,Cj=Qi,Mj=ci,s7=Ia,XO=vf;JO({target:"Array",proto:!0},{flatMap:function(x){var C=Mj(this),M=s7(C),B;return Cj(x),B=XO(C,0),B.length=Tj(B,C,C,M,0,1,x,arguments.length>1?arguments[1]:void 0),B}});var KO=Fi,ts=KO("Array","flatMap"),YO=Xn,Aj=ts,QO=Array.prototype,e6=function(y){var x=y.flatMap;return y===QO||YO(QO,y)&&x===QO.flatMap?Aj:x},t6=e6,l7=t6,Rj=l7,r6=n(Rj);function u7(y){return new Dj(y)}var c7=function(){function y(x,C,M){var B,Z,re;t(this,y),sl(this,"_listeners",{add:zc(B=this._add).call(B,this),remove:zc(Z=this._remove).call(Z,this),update:zc(re=this._update).call(re,this)}),this._source=x,this._transformers=C,this._target=M}return Bf(y,[{key:"all",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:"start",value:function(){return this._source.on("add",this._listeners.add),this._source.on("remove",this._listeners.remove),this._source.on("update",this._listeners.update),this}},{key:"stop",value:function(){return this._source.off("add",this._listeners.add),this._source.off("remove",this._listeners.remove),this._source.off("update",this._listeners.update),this}},{key:"_transformItems",value:function(C){var M;return WO(M=this._transformers).call(M,function(B,Z){return Z(B)},C)}},{key:"_add",value:function(C,M){M!=null&&this._target.add(this._transformItems(this._source.get(M.items)))}},{key:"_update",value:function(C,M){M!=null&&this._target.update(this._transformItems(this._source.get(M.items)))}},{key:"_remove",value:function(C,M){M!=null&&this._target.remove(this._transformItems(M.oldData))}}]),y}(),Dj=function(){function y(x){t(this,y),sl(this,"_transformers",[]),this._source=x}return Bf(y,[{key:"filter",value:function(C){return this._transformers.push(function(M){return Si(M).call(M,C)}),this}},{key:"map",value:function(C){return this._transformers.push(function(M){return ei(M).call(M,C)}),this}},{key:"flatMap",value:function(C){return this._transformers.push(function(M){return r6(M).call(M,C)}),this}},{key:"to",value:function(C){return new c7(this._source,this._transformers,C)}}]),y}(),Lj=Qe,p7=Bt,Nj=bc,t2=function(y,x,C){var M,B;p7(y);try{if(M=Nj(y,"return"),!M){if(x==="throw")throw C;return C}M=Lj(M,y)}catch(Z){B=!0,M=Z}if(x==="throw")throw C;if(B)throw M;return p7(M),C},Mv=Bt,n6=t2,o6=function(y,x,C,M){try{return M?x(Mv(C)[0],C[1]):x(C)}catch(B){n6(y,"throw",B)}},d7=Kn,f7=Lm,i6=d7("iterator"),Ul=Array.prototype,a6=function(y){return y!==void 0&&(f7.Array===y||Ul[i6]===y)},h7=Ea,m7=bc,js=Er,Ts=Lm,r2=Kn,ed=r2("iterator"),Wu=function(y){if(!js(y))return m7(y,ed)||m7(y,"@@iterator")||Ts[h7(y)]},n2=Qe,Fj=Qi,ln=Bt,zf=Hn,o2=Wu,Hu=TypeError,Vm=function(y,x){var C=arguments.length<2?o2(y):x;if(Fj(C))return ln(n2(C,y));throw new Hu(zf(y)+" is not iterable")},v7=xu,g7=Qe,$m=ci,s6=o6,Wf=a6,Zm=lm,Av=Ia,Rv=Lp,y7=Vm,Bj=Wu,b7=Array,Dv=function(x){var C=$m(x),M=Zm(this),B=arguments.length,Z=B>1?arguments[1]:void 0,re=Z!==void 0;re&&(Z=v7(Z,B>2?arguments[2]:void 0));var ce=Bj(C),ae=0,me,Oe,Me,ke,Le,Pt;if(ce&&!(this===b7&&Wf(ce)))for(ke=y7(C,ce),Le=ke.next,Oe=M?new this:[];!(Me=g7(Le,ke)).done;ae++)Pt=re?s6(ke,Z,[Me.value,ae],!0):Me.value,Rv(Oe,ae,Pt);else for(me=Av(C),Oe=M?new this(me):b7(me);me>ae;ae++)Pt=re?Z(C[ae],ae):C[ae],Rv(Oe,ae,Pt);return Oe.length=ae,Oe},l6=Kn,w7=l6("iterator"),zi=!1;try{var ti=0,aa={next:function(){return{done:!!ti++}},return:function(){zi=!0}};aa[w7]=function(){return this},Array.from(aa,function(){throw 2})}catch{}var qm=function(y,x){try{if(!x&&!zi)return!1}catch{return!1}var C=!1;try{var M={};M[w7]=function(){return{next:function(){return{done:C=!0}}}},y(M)}catch{}return C},Lv=er,Um=Dv,Gm=qm,Ta=!Gm(function(y){Array.from(y)});Lv({target:"Array",stat:!0,forced:Ta},{from:Um});var Vu=or,td=Vu.Array.from,O7=td,u6=O7,Nv=u6,ll=n(Nv),i2=Wu,Hf=i2,a2=Hf,c6=a2,Jm=c6,ul=Jm,Ca=ul,Xm=Ca,$u=Xm,Hc=n($u),x7=$u,s2=n(x7),Zu=er,Gl=Cn;Zu({target:"Array",stat:!0},{isArray:Gl});var Vf=or,Fv=Vf.Array.isArray,$f=Fv,Vc=$f,_7=Vc,S7=_7,l2=S7,rd=l2,Km=rd,qu=n(Km);function Ym(y){if(qu(y))return y}var I7=He,p6=Cn,zj=TypeError,Bv=Object.getOwnPropertyDescriptor,zv=I7&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(y){return y instanceof TypeError}}(),E7=zv?function(y,x){if(p6(y)&&!Bv(y,"length").writable)throw new zj("Cannot set read only .length");return y.length=x}:function(y,x){return y.length=x},sa=er,ri=ci,rs=Ia,Wv=E7,Uu=Dp,cl=d,Hv=cl(function(){return[].push.call({length:4294967296},1)!==4294967297}),$c=function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(y){return y instanceof TypeError}},Jl=Hv||!$c();sa({target:"Array",proto:!0,arity:1,forced:Jl},{push:function(x){var C=ri(this),M=rs(C),B=arguments.length;Uu(M+B);for(var Z=0;Zy.length)&&(x=y.length);for(var C=0,M=new Array(x);C1?arguments[1]:void 0)},V7=er,R6=A6;V7({target:"Array",proto:!0,forced:[].forEach!==R6},{forEach:R6});var Yj=Fi,tg=Yj("Array","forEach"),D6=tg,Qj=D6,eT=Ea,tT=so,Xf=Xn,rT=Qj,b2=Array.prototype,$7={DOMTokenList:!0,NodeList:!0},L6=function(y){var x=y.forEach;return y===b2||Xf(b2,y)&&x===b2.forEach||tT($7,eT(y))?rT:x},rg=L6,eu=n(rg),Vo=er,Z7=q,cd=Cn,a0=Z7([].reverse),$r=[1,2];Vo({target:"Array",proto:!0,forced:String($r)===String($r.reverse())},{reverse:function(){return cd(this)&&(this.length=this.length),a0(this)}});var sr=Fi,ns=sr("Array","reverse"),hi=Xn,pd=ns,s0=Array.prototype,dd=function(y){var x=y.reverse;return y===s0||hi(s0,y)&&x===s0.reverse?pd:x},nT=dd,N6=nT,oT=N6,q7=n(oT),An=Hn,U7=TypeError,Kf=function(y,x){if(!delete y[x])throw new U7("Cannot delete property "+An(x)+" of "+An(y))},w2=er,l0=ci,Ju=Mc,la=tm,O2=Ia,G7=E7,J7=Dp,F6=vf,X7=Lp,u0=Kf,iT=ku,aT=iT("splice"),B6=Math.max,z6=Math.min;w2({target:"Array",proto:!0,forced:!aT},{splice:function(x,C){var M=l0(this),B=O2(M),Z=Ju(x,B),re=arguments.length,ce,ae,me,Oe,Me,ke;for(re===0?ce=ae=0:re===1?(ce=0,ae=B-Z):(ce=re-2,ae=z6(B6(la(C),0),B-Z)),J7(B+ce-ae),me=F6(M,ae),Oe=0;OeB-ae+ce;Oe--)u0(M,Oe-1)}else if(ce>ae)for(Oe=B-ae;Oe>Z;Oe--)Me=Oe+ae-1,ke=Oe+ce-1,Me in M?M[ke]=M[Me]:u0(M,ke);for(Oe=0;OeZ;)for(var ae=$6(arguments[Z++]),me=re?dT(V6(ae),re(ae)):V6(ae),Oe=me.length,Me=0,ke;Oe>Me;)ke=me[Me++],(!H6||cT(ce,ae,ke))&&(M[ke]=ae[ke]);return M}:Yf,fT=er,Qf=I2;fT({target:"Object",stat:!0,arity:2,forced:Object.assign!==Qf},{assign:Qf});var og=or,r8=og.Object.assign,Z6=r8,q6=Z6,n8=q6,U6=n(n8),G6=er,o8=d,c0=ci,ig=Gp,J6=Mb,p0=o8(function(){ig(1)});G6({target:"Object",stat:!0,forced:p0,sham:!J6},{getPrototypeOf:function(x){return ig(c0(x))}});var X6=or,E2=X6.Object.getPrototypeOf,hT=E2,mT=hT,qc=er,i8=He,vT=Ka;qc({target:"Object",stat:!0,sham:!i8},{create:vT});var K6=or,gT=K6.Object,yT=function(x,C){return gT.create(x,C)},bT=yT,a8=bT,Y6=a8,s8=n(Y6),P2=or,l8=D;P2.JSON||(P2.JSON={stringify:JSON.stringify});var k2=function(x,C,M){return l8(P2.JSON.stringify,null,arguments)},u8=k2,Q6=u8,j2=Q6,T2=n(j2),e4=typeof Bun=="function"&&Bun&&typeof Bun.version=="string",d0=TypeError,Xu=function(y,x){if(yC,re=OT(M)?M:ST(M),ce=Z?_T(arguments,C):[],ae=Z?function(){wT(re,this,ce)}:re;return x?y(ae,B):y(ae)}:y},r4=er,n4=c,d8=p8,o4=d8(n4.setInterval,!0);r4({global:!0,bind:!0,forced:n4.setInterval!==o4},{setInterval:o4});var h0=er,i4=c,m0=p8,Rs=m0(i4.setTimeout,!0);h0({global:!0,bind:!0,forced:i4.setTimeout!==Rs},{setTimeout:Rs});var a4=or,f8=a4.setTimeout,ET=f8,ag=n(ET),s4={exports:{}};(function(y){function x(M){if(M)return C(M);this._callbacks=new Map}function C(M){return Object.assign(M,x.prototype),M._callbacks=new Map,M}x.prototype.on=function(M,B){let Z=this._callbacks.get(M)??[];return Z.push(B),this._callbacks.set(M,Z),this},x.prototype.once=function(M,B){let Z=(...re)=>{this.off(M,Z),B.apply(this,re)};return Z.fn=B,this.on(M,Z),this},x.prototype.off=function(M,B){if(M===void 0&&B===void 0)return this._callbacks.clear(),this;if(B===void 0)return this._callbacks.delete(M),this;let Z=this._callbacks.get(M);if(Z){for(let[re,ce]of Z.entries())if(ce===B||ce.fn===B){Z.splice(re,1);break}Z.length===0?this._callbacks.delete(M):this._callbacks.set(M,Z)}return this},x.prototype.emit=function(M,...B){let Z=this._callbacks.get(M);if(Z){let re=[...Z];for(let ce of re)ce.apply(this,B)}return this},x.prototype.listeners=function(M){return this._callbacks.get(M)??[]},x.prototype.listenerCount=function(M){if(M)return this.listeners(M).length;let B=0;for(let Z of this._callbacks.values())B+=Z.length;return B},x.prototype.hasListeners=function(M){return this.listenerCount(M)>0},x.prototype.addEventListener=x.prototype.on,x.prototype.removeListener=x.prototype.off,x.prototype.removeEventListener=x.prototype.off,x.prototype.removeAllListeners=x.prototype.off,y.exports=x})(s4);var PT=s4.exports,Ku=n(PT);function Ii(){return Ii=Object.assign||function(y){for(var x=1;x"u"?{style:{}}:document.createElement("div"),fd="function",eh=Math.round,th=Math.abs,M2=Date.now;function v0(y,x){for(var C,M,B=x[0].toUpperCase()+x.slice(1),Z=0;Z"u"?Yu={}:Yu=window;var c4=v0(u4.style,"touchAction"),p4=c4!==void 0;function m8(){if(!p4)return!1;var y={},x=Yu.CSS&&Yu.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(C){return y[C]=x?Yu.CSS.supports("touch-action",C):!0}),y}var sg="compute",Qu="auto",A2="manipulation",ec="none",g0="pan-x",lg="pan-y",Ds=m8(),v8=/mobile|tablet|ip(ad|hone|od)|android/i,g8="ontouchstart"in Yu,ug=v0(Yu,"PointerEvent")!==void 0,R2=g8&&v8.test(navigator.userAgent),rh="touch",d4="pen",hd="mouse",y0="kinect",D2=25,ca=1,md=2,$o=4,Aa=8,cg=1,b0=2,vd=4,nh=8,oh=16,pa=b0|vd,Ls=nh|oh,L2=pa|Ls,y8=["x","y"],ih=["clientX","clientY"];function Gc(y,x,C){var M;if(y)if(y.forEach)y.forEach(x,C);else if(y.length!==void 0)for(M=0;M-1}function f4(y){if(ah(y,ec))return ec;var x=ah(y,g0),C=ah(y,lg);return x&&C?ec:x||C?x?g0:lg:ah(y,A2)?A2:Qu}var F2=function(){function y(C,M){this.manager=C,this.set(M)}var x=y.prototype;return x.set=function(M){M===sg&&(M=this.compute()),p4&&this.manager.element.style&&Ds[M]&&(this.manager.element.style[c4]=M),this.actions=M.toLowerCase().trim()},x.update=function(){this.set(this.manager.options.touchAction)},x.compute=function(){var M=[];return Gc(this.manager.recognizers,function(B){N2(B.options.enable,[B])&&(M=M.concat(B.getTouchAction()))}),f4(M.join(" "))},x.preventDefaults=function(M){var B=M.srcEvent,Z=M.offsetDirection;if(this.manager.session.prevented){B.preventDefault();return}var re=this.actions,ce=ah(re,ec)&&!Ds[ec],ae=ah(re,lg)&&!Ds[lg],me=ah(re,g0)&&!Ds[g0];if(ce){var Oe=M.pointers.length===1,Me=M.distance<2,ke=M.deltaTime<250;if(Oe&&Me&&ke)return}if(!(me&&ae)&&(ce||ae&&Z&pa||me&&Z&Ls))return this.preventSrc(B)},x.preventSrc=function(M){this.manager.session.prevented=!0,M.preventDefault()},y}();function w0(y,x){for(;y;){if(y===x)return!0;y=y.parentNode}return!1}function h4(y){var x=y.length;if(x===1)return{x:eh(y[0].clientX),y:eh(y[0].clientY)};for(var C=0,M=0,B=0;B=th(x)?y<0?b0:vd:x<0?nh:oh}function kT(y,x){var C=x.center,M=y.offsetDelta||{},B=y.prevDelta||{},Z=y.prevInput||{};(x.eventType===ca||Z.eventType===$o)&&(B=y.prevDelta={x:Z.deltaX||0,y:Z.deltaY||0},M=y.offsetDelta={x:C.x,y:C.y}),x.deltaX=B.x+(C.x-M.x),x.deltaY=B.y+(C.y-M.y)}function z2(y,x,C){return{x:x/y||0,y:C/y||0}}function jT(y,x){return B2(x[0],x[1],ih)/B2(y[0],y[1],ih)}function TT(y,x){return m4(x[1],x[0],ih)+m4(y[1],y[0],ih)}function O8(y,x){var C=y.lastInterval||x,M=x.timeStamp-C.timeStamp,B,Z,re,ce;if(x.eventType!==Aa&&(M>D2||C.velocity===void 0)){var ae=x.deltaX-C.deltaX,me=x.deltaY-C.deltaY,Oe=z2(M,ae,me);Z=Oe.x,re=Oe.y,B=th(Oe.x)>th(Oe.y)?Oe.x:Oe.y,ce=w8(ae,me),y.lastInterval=x}else B=C.velocity,Z=C.velocityX,re=C.velocityY,ce=C.direction;x.velocity=B,x.velocityX=Z,x.velocityY=re,x.direction=ce}function CT(y,x){var C=y.session,M=x.pointers,B=M.length;C.firstInput||(C.firstInput=b8(x)),B>1&&!C.firstMultiple?C.firstMultiple=b8(x):B===1&&(C.firstMultiple=!1);var Z=C.firstInput,re=C.firstMultiple,ce=re?re.center:Z.center,ae=x.center=h4(M);x.timeStamp=M2(),x.deltaTime=x.timeStamp-Z.timeStamp,x.angle=m4(ce,ae),x.distance=B2(ce,ae),kT(C,x),x.offsetDirection=w8(x.deltaX,x.deltaY);var me=z2(x.deltaTime,x.deltaX,x.deltaY);x.overallVelocityX=me.x,x.overallVelocityY=me.y,x.overallVelocity=th(me.x)>th(me.y)?me.x:me.y,x.scale=re?jT(re.pointers,M):1,x.rotation=re?TT(re.pointers,M):0,x.maxPointers=C.prevInput?x.pointers.length>C.prevInput.maxPointers?x.pointers.length:C.prevInput.maxPointers:x.pointers.length,O8(C,x);var Oe=y.element,Me=x.srcEvent,ke;Me.composedPath?ke=Me.composedPath()[0]:Me.path?ke=Me.path[0]:ke=Me.target,w0(ke,Oe)&&(Oe=ke),x.target=Oe}function x8(y,x,C){var M=C.pointers.length,B=C.changedPointers.length,Z=x&ca&&M-B===0,re=x&($o|Aa)&&M-B===0;C.isFirst=!!Z,C.isFinal=!!re,Z&&(y.session={}),C.eventType=x,CT(y,C),y.emit("hammer.input",C),y.recognize(C),y.session.prevInput=C}function O0(y){return y.trim().split(/\s+/g)}function pg(y,x,C){Gc(O0(x),function(M){y.addEventListener(M,C,!1)})}function Jc(y,x,C){Gc(O0(x),function(M){y.removeEventListener(M,C,!1)})}function v4(y){var x=y.ownerDocument||y;return x.defaultView||x.parentWindow||window}var x0=function(){function y(C,M){var B=this;this.manager=C,this.callback=M,this.element=C.element,this.target=C.options.inputTarget,this.domHandler=function(Z){N2(C.options.enable,[C])&&B.handler(Z)},this.init()}var x=y.prototype;return x.handler=function(){},x.init=function(){this.evEl&&pg(this.element,this.evEl,this.domHandler),this.evTarget&&pg(this.target,this.evTarget,this.domHandler),this.evWin&&pg(v4(this.element),this.evWin,this.domHandler)},x.destroy=function(){this.evEl&&Jc(this.element,this.evEl,this.domHandler),this.evTarget&&Jc(this.target,this.evTarget,this.domHandler),this.evWin&&Jc(v4(this.element),this.evWin,this.domHandler)},y}();function sh(y,x,C){if(y.indexOf&&!C)return y.indexOf(x);for(var M=0;Mae[x]}):M=M.sort()),M}var RT={touchstart:ca,touchmove:md,touchend:$o,touchcancel:Aa},S8="touchstart touchmove touchend touchcancel",fg=function(y){ua(x,y);function x(){var M;return x.prototype.evTarget=S8,M=y.apply(this,arguments)||this,M.targetIds={},M}var C=x.prototype;return C.handler=function(B){var Z=RT[B.type],re=DT.call(this,B,Z);re&&this.callback(this.manager,Z,{pointers:re[0],changedPointers:re[1],pointerType:rh,srcEvent:B})},x}(x0);function DT(y,x){var C=dg(y.touches),M=this.targetIds;if(x&(ca|md)&&C.length===1)return M[C[0].identifier]=!0,[C,C];var B,Z,re=dg(y.changedTouches),ce=[],ae=this.target;if(Z=C.filter(function(me){return w0(me.target,ae)}),x===ca)for(B=0;B-1&&B.splice(ce,1)};setTimeout(Z,Xe)}}function q2(y,x){y&ca?(this.primaryTouch=x.changedPointers[0].identifier,Z2.call(this,x)):y&($o|Aa)&&Z2.call(this,x)}function y4(y){for(var x=y.srcEvent.clientX,C=y.srcEvent.clientY,M=0;M-1&&this.requireFail.splice(B,1),this},x.hasRequireFailures=function(){return this.requireFail.length>0},x.canRecognizeWith=function(M){return!!this.simultaneous[M.id]},x.emit=function(M){var B=this,Z=this.state;function re(ce){B.manager.emit(ce,M)}Z=gd&&re(B.options.event+j8(Z))},x.tryEmit=function(M){if(this.canEmit())return this.emit(M);this.state=_o},x.canEmit=function(){for(var M=0;MZ.threshold&&ae&Z.direction},C.attrTest=function(B){return Xc.prototype.attrTest.call(this,B)&&(this.state&Ei||!(this.state&Ei)&&this.directionTest(B))},C.emit=function(B){this.pX=B.deltaX,this.pY=B.deltaY;var Z=T8(B.direction);Z&&(B.additionalEvent=this.options.event+Z),y.prototype.emit.call(this,B)},x}(Xc),C8=function(y){ua(x,y);function x(M){return M===void 0&&(M={}),y.call(this,Ii({event:"swipe",threshold:10,velocity:.3,direction:pa|Ls,pointers:1},M))||this}var C=x.prototype;return C.getTouchAction=function(){return b4.prototype.getTouchAction.call(this)},C.attrTest=function(B){var Z=this.options.direction,re;return Z&(pa|Ls)?re=B.overallVelocity:Z&pa?re=B.overallVelocityX:Z&Ls&&(re=B.overallVelocityY),y.prototype.attrTest.call(this,B)&&Z&B.offsetDirection&&B.distance>this.options.threshold&&B.maxPointers===this.options.pointers&&th(re)>this.options.velocity&&B.eventType&$o},C.emit=function(B){var Z=T8(B.offsetDirection);Z&&this.manager.emit(this.options.event+Z,B),this.manager.emit(this.options.event,B)},x}(Xc),M8=function(y){ua(x,y);function x(M){return M===void 0&&(M={}),y.call(this,Ii({event:"pinch",threshold:0,pointers:2},M))||this}var C=x.prototype;return C.getTouchAction=function(){return[ec]},C.attrTest=function(B){return y.prototype.attrTest.call(this,B)&&(Math.abs(B.scale-1)>this.options.threshold||this.state&Ei)},C.emit=function(B){if(B.scale!==1){var Z=B.scale<1?"in":"out";B.additionalEvent=this.options.event+Z}y.prototype.emit.call(this,B)},x}(Xc),A8=function(y){ua(x,y);function x(M){return M===void 0&&(M={}),y.call(this,Ii({event:"rotate",threshold:0,pointers:2},M))||this}var C=x.prototype;return C.getTouchAction=function(){return[ec]},C.attrTest=function(B){return y.prototype.attrTest.call(this,B)&&(Math.abs(B.rotation)>this.options.threshold||this.state&Ei)},x}(Xc),R8=function(y){ua(x,y);function x(M){var B;return M===void 0&&(M={}),B=y.call(this,Ii({event:"press",pointers:1,time:251,threshold:9},M))||this,B._timer=null,B._input=null,B}var C=x.prototype;return C.getTouchAction=function(){return[Qu]},C.process=function(B){var Z=this,re=this.options,ce=B.pointers.length===re.pointers,ae=B.distancere.time;if(this._input=B,!ae||!ce||B.eventType&($o|Aa)&&!me)this.reset();else if(B.eventType&ca)this.reset(),this._timer=setTimeout(function(){Z.state=dl,Z.tryEmit()},re.time);else if(B.eventType&$o)return dl;return _o},C.reset=function(){clearTimeout(this._timer)},C.emit=function(B){this.state===dl&&(B&&B.eventType&$o?this.manager.emit(this.options.event+"up",B):(this._input.timeStamp=M2(),this.manager.emit(this.options.event,this._input)))},x}(fl),G2={domEvents:!1,touchAction:sg,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},D8=[[A8,{enable:!1}],[M8,{enable:!1},["rotate"]],[C8,{direction:pa}],[b4,{direction:pa},["swipe"]],[hg],[hg,{event:"doubletap",taps:2},["tap"]],[R8]],L8=1,N8=2;function J2(y,x){var C=y.element;if(C.style){var M;Gc(y.options.cssProps,function(B,Z){M=v0(C.style,Z),x?(y.oldCssProps[M]=C.style[M],C.style[M]=B):C.style[M]=y.oldCssProps[M]||""}),x||(y.oldCssProps={})}}function NT(y,x){var C=document.createEvent("Event");C.initEvent(y,!0,!0),C.gesture=x,x.target.dispatchEvent(C)}var w4=function(){function y(C,M){var B=this;this.options=Uc({},G2,M||{}),this.options.inputTarget=this.options.inputTarget||C,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=C,this.input=Bn(this),this.touchAction=new F2(this,this.options.touchAction),J2(this,!0),Gc(this.options.recognizers,function(Z){var re=B.add(new Z[0](Z[1]));Z[2]&&re.recognizeWith(Z[2]),Z[3]&&re.requireFailure(Z[3])},this)}var x=y.prototype;return x.set=function(M){return Uc(this.options,M),M.touchAction&&this.touchAction.update(),M.inputTarget&&(this.input.destroy(),this.input.target=M.inputTarget,this.input.init()),this},x.stop=function(M){this.session.stopped=M?N8:L8},x.recognize=function(M){var B=this.session;if(!B.stopped){this.touchAction.preventDefaults(M);var Z,re=this.recognizers,ce=B.curRecognizer;(!ce||ce&&ce.state&dl)&&(B.curRecognizer=null,ce=null);for(var ae=0;ae=0;return(Se?$?"+":"":"-")+Math.pow(10,Math.max(0,le)).toString().substr(1)+K}var Ve=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Je=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,pt={},Qe={};function Fe(O,L,$,K){var le=K;typeof K=="string"&&(le=function(){return this[K]()}),O&&(Qe[O]=le),L&&(Qe[L[0]]=function(){return Ae(le.apply(this,arguments),L[1],L[2])}),$&&(Qe[$]=function(){return this.localeData().ordinal(le.apply(this,arguments),O)})}function Nt(O){return O.match(/\[[\s\S]/)?O.replace(/^\[|\]$/g,""):O.replace(/\\/g,"")}function Vt(O){var L=O.match(Ve),$,K;for($=0,K=L.length;$=0&&Je.test(O);)O=O.replace(Je,K),Je.lastIndex=0,$-=1;return O}var Tt={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function wr(O){var L=this._longDateFormat[O],$=this._longDateFormat[O.toUpperCase()];return L||!$?L:(this._longDateFormat[O]=$.match(Ve).map(function(K){return K==="MMMM"||K==="MM"||K==="DD"||K==="dddd"?K.slice(1):K}).join(""),this._longDateFormat[O])}var Rt="Invalid date";function Ut(){return this._invalidDate}var vr="%d",Sr=/\d{1,2}/;function Er(O){return this._ordinal.replace("%d",O)}var po={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Pn(O,L,$,K){var le=this._relativeTime[$];return Ie(le)?le(O,L,$,K):le.replace(/%d/i,O)}function Nr(O,L){var $=this._relativeTime[O>0?"future":"past"];return Ie($)?$(L):$.replace(/%s/i,L)}var Wo={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function Cr(O){return typeof O=="string"?Wo[O]||Wo[O.toLowerCase()]:void 0}function St(O){var L={},$,K;for(K in O)i(O,K)&&($=Cr(K),$&&(L[$]=O[K]));return L}var tn={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function Ks(O){var L=[],$;for($ in O)i(O,$)&&L.push({unit:$,priority:tn[$]});return L.sort(function(K,le){return K.priority-le.priority}),L}var hs=/\d/,Pr=/\d\d/,or=/\d{3}/,ir=/\d{4}/,Mr=/[+-]?\d{6}/,Ur=/\d\d?/,ms=/\d\d\d\d?/,Nn=/\d\d\d\d\d\d?/,Di=/\d{1,3}/,Xn=/\d{1,4}/,ya=/[+-]?\d{1,6}/,ba=/\d+/,wa=/[+-]?\d+/,g1=/Z|[+-]\d\d:?\d\d/gi,Kd=/Z|[+-]\d\d(?::?\d\d)?/gi,yc=/[+-]?\d+(\.\d{1,3})?/,Za=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,li=/^[1-9]\d?/,Op=/^([1-9]\d|\d)/,Rl;Rl={};function Ct(O,L,$){Rl[O]=Ie(L)?L:function(K,le){return K&&$?$:L}}function Yd(O,L){return i(Rl,O)?Rl[O](L._strict,L._locale):new RegExp(Qd(O))}function Qd(O){return Ki(O.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(L,$,K,le,Se){return $||K||le||Se}))}function Ki(O){return O.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function fo(O){return O<0?Math.ceil(O)||0:Math.floor(O)}function rn(O){var L=+O,$=0;return L!==0&&isFinite(L)&&($=fo(L)),$}var Hh={};function pn(O,L){var $,K=L,le;for(typeof O=="string"&&(O=[O]),h(L)&&(K=function(Se,He){He[L]=rn(Se)}),le=O.length,$=0;$68?1900:2e3)};var bc=Oa("FullYear",!0);function Dl(){return xp(this.year())}function Oa(O,L){return function($){return $!=null?(Li(this,O,$),t.updateOffset(this,L),this):wc(this,O)}}function wc(O,L){if(!O.isValid())return NaN;var $=O._d,K=O._isUTC;switch(L){case"Milliseconds":return K?$.getUTCMilliseconds():$.getMilliseconds();case"Seconds":return K?$.getUTCSeconds():$.getSeconds();case"Minutes":return K?$.getUTCMinutes():$.getMinutes();case"Hours":return K?$.getUTCHours():$.getHours();case"Date":return K?$.getUTCDate():$.getDate();case"Day":return K?$.getUTCDay():$.getDay();case"Month":return K?$.getUTCMonth():$.getMonth();case"FullYear":return K?$.getUTCFullYear():$.getFullYear();default:return NaN}}function Li(O,L,$){var K,le,Se,He,ut;if(!(!O.isValid()||isNaN($))){switch(K=O._d,le=O._isUTC,L){case"Milliseconds":return void(le?K.setUTCMilliseconds($):K.setMilliseconds($));case"Seconds":return void(le?K.setUTCSeconds($):K.setSeconds($));case"Minutes":return void(le?K.setUTCMinutes($):K.setMinutes($));case"Hours":return void(le?K.setUTCHours($):K.setHours($));case"Date":return void(le?K.setUTCDate($):K.setDate($));case"FullYear":break;default:return}Se=$,He=O.month(),ut=O.date(),ut=ut===29&&He===1&&!xp(Se)?28:ut,le?K.setUTCFullYear(Se,He,ut):K.setFullYear(Se,He,ut)}}function ea(O){return O=Cr(O),Ie(this[O])?this[O]():this}function my(O,L){if(typeof O=="object"){O=St(O);var $=Ks(O),K,le=$.length;for(K=0;K=0?(ut=new Date(O+400,L,$,K,le,Se,He),isFinite(ut.getFullYear())&&ut.setFullYear(O)):ut=new Date(O,L,$,K,le,Se,He),ut}function rf(O){var L,$;return O<100&&O>=0?($=Array.prototype.slice.call(arguments),$[0]=O+400,L=new Date(Date.UTC.apply(null,$)),isFinite(L.getUTCFullYear())&&L.setUTCFullYear(O)):L=new Date(Date.UTC.apply(null,arguments)),L}function $h(O,L,$){var K=7+L-$,le=(7+rf(O,0,K).getUTCDay()-L)%7;return-le+K-1}function Oy(O,L,$,K,le){var Se=(7+$-K)%7,He=$h(O,K,le),ut=1+7*(L-1)+Se+He,cr,Vr;return ut<=0?(cr=O-1,Vr=yu(cr)+ut):ut>yu(O)?(cr=O+1,Vr=ut-yu(O)):(cr=O,Vr=ut),{year:cr,dayOfYear:Vr}}function bu(O,L,$){var K=$h(O.year(),L,$),le=Math.floor((O.dayOfYear()-K-1)/7)+1,Se,He;return le<1?(He=O.year()-1,Se=le+Nl(He,L,$)):le>Nl(O.year(),L,$)?(Se=le-Nl(O.year(),L,$),He=O.year()+1):(He=O.year(),Se=le),{week:Se,year:He}}function Nl(O,L,$){var K=$h(O,L,$),le=$h(O+1,L,$);return(yu(O)-K+le)/7}Fe("w",["ww",2],"wo","week"),Fe("W",["WW",2],"Wo","isoWeek"),Ct("w",Ur,li),Ct("ww",Ur,Pr),Ct("W",Ur,li),Ct("WW",Ur,Pr),Ko(["w","ww","W","WW"],function(O,L,$,K){L[K.substr(0,1)]=rn(O)});function Zh(O){return bu(O,this._week.dow,this._week.doy).week}var Ip={dow:0,doy:6};function qh(){return this._week.dow}function b1(){return this._week.doy}function xy(O){var L=this.localeData().week(this);return O==null?L:this.add((O-L)*7,"d")}function wu(O){var L=bu(this,1,4).week;return O==null?L:this.add((O-L)*7,"d")}Fe("d",0,"do","day"),Fe("dd",0,0,function(O){return this.localeData().weekdaysMin(this,O)}),Fe("ddd",0,0,function(O){return this.localeData().weekdaysShort(this,O)}),Fe("dddd",0,0,function(O){return this.localeData().weekdays(this,O)}),Fe("e",0,0,"weekday"),Fe("E",0,0,"isoWeekday"),Ct("d",Ur),Ct("e",Ur),Ct("E",Ur),Ct("dd",function(O,L){return L.weekdaysMinRegex(O)}),Ct("ddd",function(O,L){return L.weekdaysShortRegex(O)}),Ct("dddd",function(O,L){return L.weekdaysRegex(O)}),Ko(["dd","ddd","dddd"],function(O,L,$,K){var le=$._locale.weekdaysParse(O,K,$._strict);le!=null?L.d=le:D($).invalidWeekday=O}),Ko(["d","e","E"],function(O,L,$,K){L[K]=rn(O)});function Uh(O,L){return typeof O!="string"?O:isNaN(O)?(O=L.weekdaysParse(O),typeof O=="number"?O:null):parseInt(O,10)}function _y(O,L){return typeof O=="string"?L.weekdaysParse(O)%7||7:isNaN(O)?null:O}function Kn(O,L){return O.slice(L,7).concat(O.slice(0,L))}var H3="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),w1="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Sy="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),V3=Za,$3=Za,Z3=Za;function Iy(O,L){var $=n(this._weekdays)?this._weekdays:this._weekdays[O&&O!==!0&&this._weekdays.isFormat.test(L)?"format":"standalone"];return O===!0?Kn($,this._week.dow):O?$[O.day()]:$}function Ey(O){return O===!0?Kn(this._weekdaysShort,this._week.dow):O?this._weekdaysShort[O.day()]:this._weekdaysShort}function q3(O){return O===!0?Kn(this._weekdaysMin,this._week.dow):O?this._weekdaysMin[O.day()]:this._weekdaysMin}function U3(O,L,$){var K,le,Se,He=O.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],K=0;K<7;++K)Se=I([2e3,1]).day(K),this._minWeekdaysParse[K]=this.weekdaysMin(Se,"").toLocaleLowerCase(),this._shortWeekdaysParse[K]=this.weekdaysShort(Se,"").toLocaleLowerCase(),this._weekdaysParse[K]=this.weekdays(Se,"").toLocaleLowerCase();return $?L==="dddd"?(le=kr.call(this._weekdaysParse,He),le!==-1?le:null):L==="ddd"?(le=kr.call(this._shortWeekdaysParse,He),le!==-1?le:null):(le=kr.call(this._minWeekdaysParse,He),le!==-1?le:null):L==="dddd"?(le=kr.call(this._weekdaysParse,He),le!==-1||(le=kr.call(this._shortWeekdaysParse,He),le!==-1)?le:(le=kr.call(this._minWeekdaysParse,He),le!==-1?le:null)):L==="ddd"?(le=kr.call(this._shortWeekdaysParse,He),le!==-1||(le=kr.call(this._weekdaysParse,He),le!==-1)?le:(le=kr.call(this._minWeekdaysParse,He),le!==-1?le:null)):(le=kr.call(this._minWeekdaysParse,He),le!==-1||(le=kr.call(this._weekdaysParse,He),le!==-1)?le:(le=kr.call(this._shortWeekdaysParse,He),le!==-1?le:null))}function nf(O,L,$){var K,le,Se;if(this._weekdaysParseExact)return U3.call(this,O,L,$);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),K=0;K<7;K++){if(le=I([2e3,1]).day(K),$&&!this._fullWeekdaysParse[K]&&(this._fullWeekdaysParse[K]=new RegExp("^"+this.weekdays(le,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[K]=new RegExp("^"+this.weekdaysShort(le,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[K]=new RegExp("^"+this.weekdaysMin(le,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[K]||(Se="^"+this.weekdays(le,"")+"|^"+this.weekdaysShort(le,"")+"|^"+this.weekdaysMin(le,""),this._weekdaysParse[K]=new RegExp(Se.replace(".",""),"i")),$&&L==="dddd"&&this._fullWeekdaysParse[K].test(O))return K;if($&&L==="ddd"&&this._shortWeekdaysParse[K].test(O))return K;if($&&L==="dd"&&this._minWeekdaysParse[K].test(O))return K;if(!$&&this._weekdaysParse[K].test(O))return K}}function Ou(O){if(!this.isValid())return O!=null?this:NaN;var L=wc(this,"Day");return O!=null?(O=Uh(O,this.localeData()),this.add(O-L,"d")):L}function G3(O){if(!this.isValid())return O!=null?this:NaN;var L=(this.day()+7-this.localeData()._week.dow)%7;return O==null?L:this.add(O-L,"d")}function Py(O){if(!this.isValid())return O!=null?this:NaN;if(O!=null){var L=_y(O,this.localeData());return this.day(this.day()%7?L:L-7)}else return this.day()||7}function O1(O){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||x1.call(this),O?this._weekdaysStrictRegex:this._weekdaysRegex):(i(this,"_weekdaysRegex")||(this._weekdaysRegex=V3),this._weekdaysStrictRegex&&O?this._weekdaysStrictRegex:this._weekdaysRegex)}function J3(O){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||x1.call(this),O?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(i(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=$3),this._weekdaysShortStrictRegex&&O?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Gh(O){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||x1.call(this),O?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(i(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Z3),this._weekdaysMinStrictRegex&&O?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function x1(){function O(Ho,Is){return Is.length-Ho.length}var L=[],$=[],K=[],le=[],Se,He,ut,cr,Vr;for(Se=0;Se<7;Se++)He=I([2e3,1]).day(Se),ut=Ki(this.weekdaysMin(He,"")),cr=Ki(this.weekdaysShort(He,"")),Vr=Ki(this.weekdays(He,"")),L.push(ut),$.push(cr),K.push(Vr),le.push(ut),le.push(cr),le.push(Vr);L.sort(O),$.sort(O),K.sort(O),le.sort(O),this._weekdaysRegex=new RegExp("^("+le.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+K.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+$.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+L.join("|")+")","i")}function _1(){return this.hours()%12||12}function of(){return this.hours()||24}Fe("H",["HH",2],0,"hour"),Fe("h",["hh",2],0,_1),Fe("k",["kk",2],0,of),Fe("hmm",0,0,function(){return""+_1.apply(this)+Ae(this.minutes(),2)}),Fe("hmmss",0,0,function(){return""+_1.apply(this)+Ae(this.minutes(),2)+Ae(this.seconds(),2)}),Fe("Hmm",0,0,function(){return""+this.hours()+Ae(this.minutes(),2)}),Fe("Hmmss",0,0,function(){return""+this.hours()+Ae(this.minutes(),2)+Ae(this.seconds(),2)});function mo(O,L){Fe(O,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),L)})}mo("a",!0),mo("A",!1);function wi(O,L){return L._meridiemParse}Ct("a",wi),Ct("A",wi),Ct("H",Ur,Op),Ct("h",Ur,li),Ct("k",Ur,li),Ct("HH",Ur,Pr),Ct("hh",Ur,Pr),Ct("kk",Ur,Pr),Ct("hmm",ms),Ct("hmmss",Nn),Ct("Hmm",ms),Ct("Hmmss",Nn),pn(["H","HH"],Hn),pn(["k","kk"],function(O,L,$){var K=rn(O);L[Hn]=K===24?0:K}),pn(["a","A"],function(O,L,$){$._isPm=$._locale.isPM(O),$._meridiem=O}),pn(["h","hh"],function(O,L,$){L[Hn]=rn(O),D($).bigHour=!0}),pn("hmm",function(O,L,$){var K=O.length-2;L[Hn]=rn(O.substr(0,K)),L[qa]=rn(O.substr(K)),D($).bigHour=!0}),pn("hmmss",function(O,L,$){var K=O.length-4,le=O.length-2;L[Hn]=rn(O.substr(0,K)),L[qa]=rn(O.substr(K,2)),L[vs]=rn(O.substr(le)),D($).bigHour=!0}),pn("Hmm",function(O,L,$){var K=O.length-2;L[Hn]=rn(O.substr(0,K)),L[qa]=rn(O.substr(K))}),pn("Hmmss",function(O,L,$){var K=O.length-4,le=O.length-2;L[Hn]=rn(O.substr(0,K)),L[qa]=rn(O.substr(K,2)),L[vs]=rn(O.substr(le))});function ky(O){return(O+"").toLowerCase().charAt(0)==="p"}var X3=/[ap]\.?m?\.?/i,K3=Oa("Hours",!0);function xa(O,L,$){return O>11?$?"pm":"PM":$?"am":"AM"}var ta={calendar:Pe,longDateFormat:Tt,invalidDate:Rt,ordinal:vr,dayOfMonthOrdinalParse:Sr,relativeTime:po,months:W3,monthsShort:vy,week:Ip,weekdays:H3,weekdaysMin:Sy,weekdaysShort:w1,meridiemParse:X3},ro={},af={},Fl;function sf(O,L){var $,K=Math.min(O.length,L.length);for($=0;$0;){if(le=Ep(Se.slice(0,$).join("-")),le)return le;if(K&&K.length>=$&&sf(Se,K)>=$-1)break;$--}L++}return Fl}function Oc(O){return!!(O&&O.match("^[^/\\\\]*$"))}function Ep(O){var L=null,$;if(ro[O]===void 0&&typeof t9<"u"&&t9&&t9.exports&&Oc(O))try{L=Fl._abbr,$=Cge,$("./locale/"+O),Ua(L)}catch{ro[O]=null}return ro[O]}function Ua(O,L){var $;return O&&(d(L)?$=Ys(O):$=xc(O,L),$?Fl=$:typeof console<"u"&&console.warn&&console.warn("Locale "+O+" not found. Did you forget to load it?")),Fl._abbr}function xc(O,L){if(L!==null){var $,K=ta;if(L.abbr=O,ro[O]!=null)ye("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),K=ro[O]._config;else if(L.parentLocale!=null)if(ro[L.parentLocale]!=null)K=ro[L.parentLocale]._config;else if($=Ep(L.parentLocale),$!=null)K=$._config;else return af[L.parentLocale]||(af[L.parentLocale]=[]),af[L.parentLocale].push({name:O,config:L}),null;return ro[O]=new be(Oe(K,L)),af[O]&&af[O].forEach(function(le){xc(le.name,le.config)}),Ua(O),ro[O]}else return delete ro[O],null}function E1(O,L){if(L!=null){var $,K,le=ta;ro[O]!=null&&ro[O].parentLocale!=null?ro[O].set(Oe(ro[O]._config,L)):(K=Ep(O),K!=null&&(le=K._config),L=Oe(le,L),K==null&&(L.abbr=O),$=new be(L),$.parentLocale=ro[O],ro[O]=$),Ua(O)}else ro[O]!=null&&(ro[O].parentLocale!=null?(ro[O]=ro[O].parentLocale,O===Ua()&&Ua(O)):ro[O]!=null&&delete ro[O]);return ro[O]}function Ys(O){var L;if(O&&O._locale&&O._locale._abbr&&(O=O._locale._abbr),!O)return Fl;if(!n(O)){if(L=Ep(O),L)return L;O=[O]}return I1(O)}function _c(){return Te(ro)}function ra(O){var L,$=O._a;return $&&D(O).overflow===-2&&(L=$[ui]<0||$[ui]>11?ui:$[Yi]<1||$[Yi]>y1($[Co],$[ui])?Yi:$[Hn]<0||$[Hn]>24||$[Hn]===24&&($[qa]!==0||$[vs]!==0||$[gu]!==0)?Hn:$[qa]<0||$[qa]>59?qa:$[vs]<0||$[vs]>59?vs:$[gu]<0||$[gu]>999?gu:-1,D(O)._overflowDayOfYear&&(LYi)&&(L=Yi),D(O)._overflowWeeks&&L===-1&&(L=Qi),D(O)._overflowWeekday&&L===-1&&(L=hy),D(O).overflow=L),O}var Jh=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Y3=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,xu=/Z|[+-]\d\d(?::?\d\d)?/,pi=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],P1=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Pp=/^\/?Date\((-?\d+)/i,Sc=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,kp={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function _u(O){var L,$,K=O._i,le=Jh.exec(K)||Y3.exec(K),Se,He,ut,cr,Vr=pi.length,Ho=P1.length;if(le){for(D(O).iso=!0,L=0,$=Vr;L<$;L++)if(pi[L][1].exec(le[1])){He=pi[L][0],Se=pi[L][2]!==!1;break}if(He==null){O._isValid=!1;return}if(le[3]){for(L=0,$=Ho;L<$;L++)if(P1[L][1].exec(le[3])){ut=(le[2]||" ")+P1[L][0];break}if(ut==null){O._isValid=!1;return}}if(!Se&&ut!=null){O._isValid=!1;return}if(le[4])if(xu.exec(le[4]))cr="Z";else{O._isValid=!1;return}O._f=He+(ut||"")+(cr||""),lf(O)}else O._isValid=!1}function jy(O,L,$,K,le,Se){var He=[Bt(O),vy.indexOf(L),parseInt($,10),parseInt(K,10),parseInt(le,10)];return Se&&He.push(parseInt(Se,10)),He}function Bt(O){var L=parseInt(O,10);return L<=49?2e3+L:L<=999?1900+L:L}function ar(O){return O.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function Q3(O,L,$){if(O){var K=w1.indexOf(O),le=new Date(L[0],L[1],L[2]).getDay();if(K!==le)return D($).weekdayMismatch=!0,$._isValid=!1,!1}return!0}function ew(O,L,$){if(O)return kp[O];if(L)return 0;var K=parseInt($,10),le=K%100,Se=(K-le)/100;return Se*60+le}function Bl(O){var L=Sc.exec(ar(O._i)),$;if(L){if($=jy(L[4],L[3],L[2],L[5],L[6],L[7]),!Q3(L[1],$,O))return;O._a=$,O._tzm=ew(L[8],L[9],L[10]),O._d=rf.apply(null,O._a),O._d.setUTCMinutes(O._d.getUTCMinutes()-O._tzm),D(O).rfc2822=!0}else O._isValid=!1}function k1(O){var L=Pp.exec(O._i);if(L!==null){O._d=new Date(+L[1]);return}if(_u(O),O._isValid===!1)delete O._isValid;else return;if(Bl(O),O._isValid===!1)delete O._isValid;else return;O._strict?O._isValid=!1:t.createFromInputFallback(O)}t.createFromInputFallback=de("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(O){O._d=new Date(O._i+(O._useUTC?" UTC":""))});function jp(O,L,$){return O??L??$}function Xh(O){var L=new Date(t.now());return O._useUTC?[L.getUTCFullYear(),L.getUTCMonth(),L.getUTCDate()]:[L.getFullYear(),L.getMonth(),L.getDate()]}function Su(O){var L,$,K=[],le,Se,He;if(!O._d){for(le=Xh(O),O._w&&O._a[Yi]==null&&O._a[ui]==null&&Tp(O),O._dayOfYear!=null&&(He=jp(O._a[Co],le[Co]),(O._dayOfYear>yu(He)||O._dayOfYear===0)&&(D(O)._overflowDayOfYear=!0),$=rf(He,0,O._dayOfYear),O._a[ui]=$.getUTCMonth(),O._a[Yi]=$.getUTCDate()),L=0;L<3&&O._a[L]==null;++L)O._a[L]=K[L]=le[L];for(;L<7;L++)O._a[L]=K[L]=O._a[L]==null?L===2?1:0:O._a[L];O._a[Hn]===24&&O._a[qa]===0&&O._a[vs]===0&&O._a[gu]===0&&(O._nextDay=!0,O._a[Hn]=0),O._d=(O._useUTC?rf:wy).apply(null,K),Se=O._useUTC?O._d.getUTCDay():O._d.getDay(),O._tzm!=null&&O._d.setUTCMinutes(O._d.getUTCMinutes()-O._tzm),O._nextDay&&(O._a[Hn]=24),O._w&&typeof O._w.d<"u"&&O._w.d!==Se&&(D(O).weekdayMismatch=!0)}}function Tp(O){var L,$,K,le,Se,He,ut,cr,Vr;L=O._w,L.GG!=null||L.W!=null||L.E!=null?(Se=1,He=4,$=jp(L.GG,O._a[Co],bu(kn(),1,4).year),K=jp(L.W,1),le=jp(L.E,1),(le<1||le>7)&&(cr=!0)):(Se=O._locale._week.dow,He=O._locale._week.doy,Vr=bu(kn(),Se,He),$=jp(L.gg,O._a[Co],Vr.year),K=jp(L.w,Vr.week),L.d!=null?(le=L.d,(le<0||le>6)&&(cr=!0)):L.e!=null?(le=L.e+Se,(L.e<0||L.e>6)&&(cr=!0)):le=Se),K<1||K>Nl($,Se,He)?D(O)._overflowWeeks=!0:cr!=null?D(O)._overflowWeekday=!0:(ut=Oy($,K,le,Se,He),O._a[Co]=ut.year,O._dayOfYear=ut.dayOfYear)}t.ISO_8601=function(){},t.RFC_2822=function(){};function lf(O){if(O._f===t.ISO_8601){_u(O);return}if(O._f===t.RFC_2822){Bl(O);return}O._a=[],D(O).empty=!0;var L=""+O._i,$,K,le,Se,He,ut=L.length,cr=0,Vr,Ho;for(le=st(O._f,O._locale).match(Ve)||[],Ho=le.length,$=0;$0&&D(O).unusedInput.push(He),L=L.slice(L.indexOf(K)+K.length),cr+=K.length),Qe[Se]?(K?D(O).empty=!1:D(O).unusedTokens.push(Se),z3(Se,K,O)):O._strict&&!K&&D(O).unusedTokens.push(Se);D(O).charsLeftOver=ut-cr,L.length>0&&D(O).unusedInput.push(L),O._a[Hn]<=12&&D(O).bigHour===!0&&O._a[Hn]>0&&(D(O).bigHour=void 0),D(O).parsedDateParts=O._a.slice(0),D(O).meridiem=O._meridiem,O._a[Hn]=Qs(O._locale,O._a[Hn],O._meridiem),Vr=D(O).era,Vr!==null&&(O._a[Co]=O._locale.erasConvertYear(Vr,O._a[Co])),Su(O),ra(O)}function Qs(O,L,$){var K;return $==null?L:O.meridiemHour!=null?O.meridiemHour(L,$):(O.isPM!=null&&(K=O.isPM($),K&&L<12&&(L+=12),!K&&L===12&&(L=0)),L)}function Ga(O){var L,$,K,le,Se,He,ut=!1,cr=O._f.length;if(cr===0){D(O).invalidFormat=!0,O._d=new Date(NaN);return}for(le=0;lethis?this:O:N()});function cf(O,L){var $,K;if(L.length===1&&n(L[0])&&(L=L[0]),!L.length)return kn();for($=L[0],K=1;Kthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function em(){if(!d(this._isDSTShifted))return this._isDSTShifted;var O={},L;return Y(O,this),O=_a(O),O._a?(L=O._isUTC?I(O._a):kn(O._a),this._isDSTShifted=this.isValid()&&My(O._a,L.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function A1(){return this.isValid()?!this._isUTC:!1}function R1(){return this.isValid()?this._isUTC:!1}function Ny(){return this.isValid()?this._isUTC&&this._offset===0:!1}var tm=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Rp=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ja(O,L){var $=O,K=null,le,Se,He;return zl(O)?$={ms:O._milliseconds,d:O._days,M:O._months}:h(O)||!isNaN(+O)?($={},L?$[L]=+O:$.milliseconds=+O):(K=tm.exec(O))?(le=K[1]==="-"?-1:1,$={y:0,d:rn(K[Yi])*le,h:rn(K[Hn])*le,m:rn(K[qa])*le,s:rn(K[vs])*le,ms:rn(j1(K[gu]*1e3))*le}):(K=Rp.exec(O))?(le=K[1]==="-"?-1:1,$={y:ys(K[2],le),M:ys(K[3],le),w:ys(K[4],le),d:ys(K[5],le),h:ys(K[6],le),m:ys(K[7],le),s:ys(K[8],le)}):$==null?$={}:typeof $=="object"&&("from"in $||"to"in $)&&(He=Ia(kn($.from),kn($.to)),$={},$.ms=He.milliseconds,$.M=He.months),Se=new Iu($),zl(O)&&i(O,"_locale")&&(Se._locale=O._locale),zl(O)&&i(O,"_isValid")&&(Se._isValid=O._isValid),Se}Ja.fn=Iu.prototype,Ja.invalid=Yh;function ys(O,L){var $=O&&parseFloat(O.replace(",","."));return(isNaN($)?0:$)*L}function D1(O,L){var $={};return $.months=L.month()-O.month()+(L.year()-O.year())*12,O.clone().add($.months,"M").isAfter(L)&&--$.months,$.milliseconds=+L-+O.clone().add($.months,"M"),$}function Ia(O,L){var $;return O.isValid()&&L.isValid()?(L=Mp(L,O),O.isBefore(L)?$=D1(O,L):($=D1(L,O),$.milliseconds=-$.milliseconds,$.months=-$.months),$):{milliseconds:0,months:0}}function rm(O,L){return function($,K){var le,Se;return K!==null&&!isNaN(+K)&&(ye(L,"moment()."+L+"(period, number) is deprecated. Please use moment()."+L+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),Se=$,$=K,K=Se),le=Ja($,K),L1(this,le,O),this}}function L1(O,L,$,K){var le=L._milliseconds,Se=j1(L._days),He=j1(L._months);O.isValid()&&(K=K??!0,He&&Ll(O,wc(O,"Month")+He*$),Se&&Li(O,"Date",wc(O,"Date")+Se*$),le&&O._d.setTime(O._d.valueOf()+le*$),K&&t.updateOffset(O,Se||He))}var Dp=rm(1,"add"),ow=rm(-1,"subtract");function vo(O){return typeof O=="string"||O instanceof String}function iw(O){return ne(O)||v(O)||vo(O)||h(O)||aw(O)||Lp(O)||O===null||O===void 0}function Lp(O){var L=o(O)&&!c(O),$=!1,K=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],le,Se,He=K.length;for(le=0;le$.valueOf():$.valueOf()9999?Ke($,L?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):Ie(Date.prototype.toISOString)?L?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",Ke($,"Z")):Ke($,L?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function Pc(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var O="moment",L="",$,K,le,Se;return this.isLocal()||(O=this.utcOffset()===0?"moment.utc":"moment.parseZone",L="Z"),$="["+O+'("]',K=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",le="-MM-DD[T]HH:mm:ss.SSS",Se=L+'[")]',this.format($+K+le+Se)}function im(O){O||(O=this.isUtc()?t.defaultFormatUtc:t.defaultFormat);var L=Ke(this,O);return this.localeData().postformat(L)}function am(O,L){return this.isValid()&&(ne(O)&&O.isValid()||kn(O).isValid())?Ja({to:this,from:O}).locale(this.locale()).humanize(!L):this.localeData().invalidDate()}function kc(O){return this.from(kn(),O)}function sm(O,L){return this.isValid()&&(ne(O)&&O.isValid()||kn(O).isValid())?Ja({from:this,to:O}).locale(this.locale()).humanize(!L):this.localeData().invalidDate()}function df(O){return this.to(kn(),O)}function Wy(O){var L;return O===void 0?this._locale._abbr:(L=Ys(O),L!=null&&(this._locale=L),this)}var Hy=de("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(O){return O===void 0?this.localeData():this.locale(O)});function ff(){return this._locale}var bs=1e3,Np=60*bs,hf=60*Np,na=(365*400+97)*24*hf;function Eu(O,L){return(O%L+L)%L}function Fp(O,L,$){return O<100&&O>=0?new Date(O+400,L,$)-na:new Date(O,L,$).valueOf()}function Pu(O,L,$){return O<100&&O>=0?Date.UTC(O+400,L,$)-na:Date.UTC(O,L,$)}function Vy(O){var L,$;if(O=Cr(O),O===void 0||O==="millisecond"||!this.isValid())return this;switch($=this._isUTC?Pu:Fp,O){case"year":L=$(this.year(),0,1);break;case"quarter":L=$(this.year(),this.month()-this.month()%3,1);break;case"month":L=$(this.year(),this.month(),1);break;case"week":L=$(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":L=$(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":L=$(this.year(),this.month(),this.date());break;case"hour":L=this._d.valueOf(),L-=Eu(L+(this._isUTC?0:this.utcOffset()*Np),hf);break;case"minute":L=this._d.valueOf(),L-=Eu(L,Np);break;case"second":L=this._d.valueOf(),L-=Eu(L,bs);break}return this._d.setTime(L),t.updateOffset(this,!0),this}function lm(O){var L,$;if(O=Cr(O),O===void 0||O==="millisecond"||!this.isValid())return this;switch($=this._isUTC?Pu:Fp,O){case"year":L=$(this.year()+1,0,1)-1;break;case"quarter":L=$(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":L=$(this.year(),this.month()+1,1)-1;break;case"week":L=$(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":L=$(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":L=$(this.year(),this.month(),this.date()+1)-1;break;case"hour":L=this._d.valueOf(),L+=hf-Eu(L+(this._isUTC?0:this.utcOffset()*Np),hf)-1;break;case"minute":L=this._d.valueOf(),L+=Np-Eu(L,Np)-1;break;case"second":L=this._d.valueOf(),L+=bs-Eu(L,bs)-1;break}return this._d.setTime(L),t.updateOffset(this,!0),this}function H1(){return this._d.valueOf()-(this._offset||0)*6e4}function $y(){return Math.floor(this.valueOf()/1e3)}function V1(){return new Date(this.valueOf())}function $1(){var O=this;return[O.year(),O.month(),O.date(),O.hour(),O.minute(),O.second(),O.millisecond()]}function sw(){var O=this;return{years:O.year(),months:O.month(),date:O.date(),hours:O.hours(),minutes:O.minutes(),seconds:O.seconds(),milliseconds:O.milliseconds()}}function Z1(){return this.isValid()?this.toISOString():null}function mf(){return A(this)}function lw(){return _({},D(this))}function vf(){return D(this).overflow}function um(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}Fe("N",0,0,"eraAbbr"),Fe("NN",0,0,"eraAbbr"),Fe("NNN",0,0,"eraAbbr"),Fe("NNNN",0,0,"eraName"),Fe("NNNNN",0,0,"eraNarrow"),Fe("y",["y",1],"yo","eraYear"),Fe("y",["yy",2],0,"eraYear"),Fe("y",["yyy",3],0,"eraYear"),Fe("y",["yyyy",4],0,"eraYear"),Ct("N",gf),Ct("NN",gf),Ct("NNN",gf),Ct("NNNN",ws),Ct("NNNNN",Bp),pn(["N","NN","NNN","NNNN","NNNNN"],function(O,L,$,K){var le=$._locale.erasParse(O,K,$._strict);le?D($).era=le:D($).invalidEra=O}),Ct("y",ba),Ct("yy",ba),Ct("yyy",ba),Ct("yyyy",ba),Ct("yo",el),pn(["y","yy","yyy","yyyy"],Co),pn(["yo"],function(O,L,$,K){var le;$._locale._eraYearOrdinalRegex&&(le=O.match($._locale._eraYearOrdinalRegex)),$._locale.eraYearOrdinalParse?L[Co]=$._locale.eraYearOrdinalParse(O,le):L[Co]=parseInt(O,10)});function uw(O,L){var $,K,le,Se=this._eras||Ys("en")._eras;for($=0,K=Se.length;$=0)return Se[K]}function cw(O,L){var $=O.since<=O.until?1:-1;return L===void 0?t(O.since).year():t(O.since).year()+(L-O.offset)*$}function ku(){var O,L,$,K=this.localeData().eras();for(O=0,L=K.length;OSe&&(L=Se),hm.call(this,O,L,$,K,le))}function hm(O,L,$,K,le){var Se=Oy(O,L,$,K,le),He=rf(Se.year,0,Se.dayOfYear);return this.year(He.getUTCFullYear()),this.month(He.getUTCMonth()),this.date(He.getUTCDate()),this}Fe("Q",0,"Qo","quarter"),Ct("Q",hs),pn("Q",function(O,L){L[ui]=(rn(O)-1)*3});function pw(O){return O==null?Math.ceil((this.month()+1)/3):this.month((O-1)*3+this.month()%3)}Fe("D",["DD",2],"Do","date"),Ct("D",Ur,li),Ct("DD",Ur,Pr),Ct("Do",function(O,L){return O?L._dayOfMonthOrdinalParse||L._ordinalParse:L._dayOfMonthOrdinalParseLenient}),pn(["D","DD"],Yi),pn("Do",function(O,L){L[Yi]=rn(O.match(Ur)[0])});var mm=Oa("Date",!0);Fe("DDD",["DDDD",3],"DDDo","dayOfYear"),Ct("DDD",Di),Ct("DDDD",or),pn(["DDD","DDDD"],function(O,L,$){$._dayOfYear=rn(O)});function Jy(O){var L=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return O==null?L:this.add(O-L,"d")}Fe("m",["mm",2],0,"minute"),Ct("m",Ur,Op),Ct("mm",Ur,Pr),pn(["m","mm"],qa);var Mc=Oa("Minutes",!1);Fe("s",["ss",2],0,"second"),Ct("s",Ur,Op),Ct("ss",Ur,Pr),pn(["s","ss"],vs);var dw=Oa("Seconds",!1);Fe("S",0,0,function(){return~~(this.millisecond()/100)}),Fe(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),Fe(0,["SSS",3],0,"millisecond"),Fe(0,["SSSS",4],0,function(){return this.millisecond()*10}),Fe(0,["SSSSS",5],0,function(){return this.millisecond()*100}),Fe(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),Fe(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),Fe(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),Fe(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),Ct("S",Di,hs),Ct("SS",Di,Pr),Ct("SSS",Di,or);var ju,Xy;for(ju="SSSS";ju.length<=9;ju+="S")Ct(ju,ba);function vm(O,L){L[gu]=rn(("0."+O)*1e3)}for(ju="S";ju.length<=9;ju+="S")pn(ju,vm);Xy=Oa("Milliseconds",!1),Fe("z",0,0,"zoneAbbr"),Fe("zz",0,0,"zoneName");function fw(){return this._isUTC?"UTC":""}function yf(){return this._isUTC?"Coordinated Universal Time":""}var ot=ee.prototype;ot.add=Dp,ot.calendar=nm,ot.clone=at,ot.diff=zy,ot.endOf=lm,ot.format=im,ot.from=am,ot.fromNow=kc,ot.to=sm,ot.toNow=df,ot.get=ea,ot.invalidAt=vf,ot.isAfter=N1,ot.isBefore=pf,ot.isBetween=F1,ot.isSame=B1,ot.isSameOrAfter=z1,ot.isSameOrBefore=By,ot.isValid=mf,ot.lang=Hy,ot.locale=Wy,ot.localeData=ff,ot.max=nw,ot.min=Ni,ot.parsingFlags=lw,ot.set=my,ot.startOf=Vy,ot.subtract=ow,ot.toArray=$1,ot.toObject=sw,ot.toDate=V1,ot.toISOString=om,ot.inspect=Pc,typeof Symbol<"u"&&Symbol.for!=null&&(ot[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),ot.toJSON=Z1,ot.toString=W1,ot.unix=$y,ot.valueOf=H1,ot.creationData=um,ot.eraName=ku,ot.eraNarrow=cm,ot.eraAbbr=q1,ot.eraYear=qy,ot.year=bc,ot.isLeapYear=Dl,ot.weekYear=dm,ot.isoWeekYear=G1,ot.quarter=ot.quarters=pw,ot.month=ci,ot.daysInMonth=ho,ot.week=ot.weeks=xy,ot.isoWeek=ot.isoWeeks=wu,ot.weeksInYear=Tc,ot.weeksInWeekYear=Cc,ot.isoWeeksInYear=fm,ot.isoWeeksInISOWeekYear=Gy,ot.date=mm,ot.day=ot.days=Ou,ot.weekday=G3,ot.isoWeekday=Py,ot.dayOfYear=Jy,ot.hour=ot.hours=K3,ot.minute=ot.minutes=Mc,ot.second=ot.seconds=dw,ot.millisecond=ot.milliseconds=Xy,ot.utcOffset=Ry,ot.utc=Dy,ot.local=M1,ot.parseZone=Qh,ot.hasAlignedHourOffset=Ly,ot.isDST=Cn,ot.isLocal=A1,ot.isUtcOffset=R1,ot.isUtc=Ny,ot.isUTC=Ny,ot.zoneAbbr=fw,ot.zoneName=yf,ot.dates=de("dates accessor is deprecated. Use date instead.",mm),ot.months=de("months accessor is deprecated. Use month instead",ci),ot.years=de("years accessor is deprecated. Use year instead",bc),ot.zone=de("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Ap),ot.isDSTShifted=de("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",em);function bf(O){return kn(O*1e3)}function gm(){return kn.apply(null,arguments).parseZone()}function Ac(O){return O}var dn=be.prototype;dn.calendar=Re,dn.longDateFormat=wr,dn.invalidDate=Ut,dn.ordinal=Er,dn.preparse=Ac,dn.postformat=Ac,dn.relativeTime=Pn,dn.pastFuture=Nr,dn.set=ve,dn.eras=uw,dn.erasParse=Zy,dn.erasConvertYear=cw,dn.erasAbbrRegex=Uy,dn.erasNameRegex=pm,dn.erasNarrowRegex=U1,dn.months=Vh,dn.monthsShort=yy,dn.monthsParse=Sp,dn.monthsRegex=by,dn.monthsShortRegex=ao,dn.week=Zh,dn.firstDayOfYear=b1,dn.firstDayOfWeek=qh,dn.weekdays=Iy,dn.weekdaysMin=q3,dn.weekdaysShort=Ey,dn.weekdaysParse=nf,dn.weekdaysRegex=O1,dn.weekdaysShortRegex=J3,dn.weekdaysMinRegex=Gh,dn.isPM=ky,dn.meridiem=xa;function Os(O,L,$,K){var le=Ys(),Se=I().set(K,L);return le[$](Se,O)}function ym(O,L,$){if(h(O)&&(L=O,O=void 0),O=O||"",L!=null)return Os(O,L,$,"month");var K,le=[];for(K=0;K<12;K++)le[K]=Os(O,K,$,"month");return le}function tl(O,L,$,K){typeof O=="boolean"?(h(L)&&($=L,L=void 0),L=L||""):(L=O,$=L,O=!1,h(L)&&($=L,L=void 0),L=L||"");var le=Ys(),Se=O?le._week.dow:0,He,ut=[];if($!=null)return Os(L,($+Se)%7,K,"day");for(He=0;He<7;He++)ut[He]=Os(L,(He+Se)%7,K,"day");return ut}function xs(O,L){return ym(O,L,"months")}function Ky(O,L){return ym(O,L,"monthsShort")}function Tu(O,L,$){return tl(O,L,$,"weekdays")}function rl(O,L,$){return tl(O,L,$,"weekdaysShort")}function wf(O,L,$){return tl(O,L,$,"weekdaysMin")}Ua("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(O){var L=O%10,$=rn(O%100/10)===1?"th":L===1?"st":L===2?"nd":L===3?"rd":"th";return O+$}}),t.lang=de("moment.lang is deprecated. Use moment.locale instead.",Ua),t.langData=de("moment.langData is deprecated. Use moment.localeData instead.",Ys);var nl=Math.abs;function hw(){var O=this._data;return this._milliseconds=nl(this._milliseconds),this._days=nl(this._days),this._months=nl(this._months),O.milliseconds=nl(O.milliseconds),O.seconds=nl(O.seconds),O.minutes=nl(O.minutes),O.hours=nl(O.hours),O.months=nl(O.months),O.years=nl(O.years),this}function Yy(O,L,$,K){var le=Ja(L,$);return O._milliseconds+=K*le._milliseconds,O._days+=K*le._days,O._months+=K*le._months,O._bubble()}function mw(O,L){return Yy(this,O,L,1)}function lo(O,L){return Yy(this,O,L,-1)}function Of(O){return O<0?Math.floor(O):Math.ceil(O)}function vw(){var O=this._milliseconds,L=this._days,$=this._months,K=this._data,le,Se,He,ut,cr;return O>=0&&L>=0&&$>=0||O<=0&&L<=0&&$<=0||(O+=Of(bm($)+L)*864e5,L=0,$=0),K.milliseconds=O%1e3,le=fo(O/1e3),K.seconds=le%60,Se=fo(le/60),K.minutes=Se%60,He=fo(Se/60),K.hours=He%24,L+=fo(He/24),cr=fo(xf(L)),$+=cr,L-=Of(bm(cr)),ut=fo($/12),$%=12,K.days=L,K.months=$,K.years=ut,this}function xf(O){return O*4800/146097}function bm(O){return O*146097/4800}function Wl(O){if(!this.isValid())return NaN;var L,$,K=this._milliseconds;if(O=Cr(O),O==="month"||O==="quarter"||O==="year")switch(L=this._days+K/864e5,$=this._months+xf(L),O){case"month":return $;case"quarter":return $/3;case"year":return $/12}else switch(L=this._days+Math.round(bm(this._months)),O){case"week":return L/7+K/6048e5;case"day":return L+K/864e5;case"hour":return L*24+K/36e5;case"minute":return L*1440+K/6e4;case"second":return L*86400+K/1e3;case"millisecond":return Math.floor(L*864e5)+K;default:throw new Error("Unknown unit "+O)}}function Hl(O){return function(){return this.as(O)}}var Qy=Hl("ms"),eb=Hl("s"),gw=Hl("m"),tb=Hl("h"),yw=Hl("d"),J1=Hl("w"),wm=Hl("M"),Cu=Hl("Q"),Om=Hl("y"),xm=Qy;function rb(){return Ja(this)}function _m(O){return O=Cr(O),this.isValid()?this[O+"s"]():NaN}function Mu(O){return function(){return this.isValid()?this._data[O]:NaN}}var nb=Mu("milliseconds"),X1=Mu("seconds"),Wp=Mu("minutes"),_f=Mu("hours"),Ka=Mu("days"),_s=Mu("months"),K1=Mu("years");function bw(){return fo(this.days()/7)}var Qo=Math.round,Pa={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Vl(O,L,$,K,le){return le.relativeTime(L||1,!!$,O,K)}function ww(O,L,$,K){var le=Ja(O).abs(),Se=Qo(le.as("s")),He=Qo(le.as("m")),ut=Qo(le.as("h")),cr=Qo(le.as("d")),Vr=Qo(le.as("M")),Ho=Qo(le.as("w")),Is=Qo(le.as("y")),Es=Se<=$.ss&&["s",Se]||Se<$.s&&["ss",Se]||He<=1&&["m"]||He<$.m&&["mm",He]||ut<=1&&["h"]||ut<$.h&&["hh",ut]||cr<=1&&["d"]||cr<$.d&&["dd",cr];return $.w!=null&&(Es=Es||Ho<=1&&["w"]||Ho<$.w&&["ww",Ho]),Es=Es||Vr<=1&&["M"]||Vr<$.M&&["MM",Vr]||Is<=1&&["y"]||["yy",Is],Es[2]=L,Es[3]=+O>0,Es[4]=K,Vl.apply(null,Es)}function Ow(O){return O===void 0?Qo:typeof O=="function"?(Qo=O,!0):!1}function xw(O,L){return Pa[O]===void 0?!1:L===void 0?Pa[O]:(Pa[O]=L,O==="s"&&(Pa.ss=L-1),!0)}function _w(O,L){if(!this.isValid())return this.localeData().invalidDate();var $=!1,K=Pa,le,Se;return typeof O=="object"&&(L=O,O=!1),typeof O=="boolean"&&($=O),typeof L=="object"&&(K=Object.assign({},Pa,L),L.s!=null&&L.ss==null&&(K.ss=L.s-1)),le=this.localeData(),Se=ww(this,!$,K,le),$&&(Se=le.pastFuture(+this,Se)),le.postformat(Se)}var Sm=Math.abs;function Rc(O){return(O>0)-(O<0)||+O}function Ss(){if(!this.isValid())return this.localeData().invalidDate();var O=Sm(this._milliseconds)/1e3,L=Sm(this._days),$=Sm(this._months),K,le,Se,He,ut=this.asSeconds(),cr,Vr,Ho,Is;return ut?(K=fo(O/60),le=fo(K/60),O%=60,K%=60,Se=fo($/12),$%=12,He=O?O.toFixed(3).replace(/\.?0+$/,""):"",cr=ut<0?"-":"",Vr=Rc(this._months)!==Rc(ut)?"-":"",Ho=Rc(this._days)!==Rc(ut)?"-":"",Is=Rc(this._milliseconds)!==Rc(ut)?"-":"",cr+"P"+(Se?Vr+Se+"Y":"")+($?Vr+$+"M":"")+(L?Ho+L+"D":"")+(le||K||O?"T":"")+(le?Is+le+"H":"")+(K?Is+K+"M":"")+(O?Is+He+"S":"")):"P0D"}var Ar=Iu.prototype;Ar.isValid=er,Ar.abs=hw,Ar.add=mw,Ar.subtract=lo,Ar.as=Wl,Ar.asMilliseconds=Qy,Ar.asSeconds=eb,Ar.asMinutes=gw,Ar.asHours=tb,Ar.asDays=yw,Ar.asWeeks=J1,Ar.asMonths=wm,Ar.asQuarters=Cu,Ar.asYears=Om,Ar.valueOf=xm,Ar._bubble=vw,Ar.clone=rb,Ar.get=_m,Ar.milliseconds=nb,Ar.seconds=X1,Ar.minutes=Wp,Ar.hours=_f,Ar.days=Ka,Ar.weeks=bw,Ar.months=_s,Ar.years=K1,Ar.humanize=_w,Ar.toISOString=Ss,Ar.toString=Ss,Ar.toJSON=Ss,Ar.locale=Wy,Ar.localeData=ff,Ar.toIsoString=de("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Ss),Ar.lang=Hy,Fe("X",0,0,"unix"),Fe("x",0,0,"valueOf"),Ct("x",wa),Ct("X",yc),pn("X",function(O,L,$){$._d=new Date(parseFloat(O)*1e3)}),pn("x",function(O,L,$){$._d=new Date(rn(O))});return t.version="2.30.1",r(kn),t.fn=ot,t.min=Cp,t.max=Ty,t.now=Ic,t.utc=I,t.unix=bf,t.months=xs,t.isDate=v,t.locale=Ua,t.invalid=N,t.duration=Ja,t.isMoment=ne,t.weekdays=Tu,t.parseZone=gm,t.localeData=Ys,t.isDuration=zl,t.monthsShort=Ky,t.weekdaysMin=wf,t.defineLocale=xc,t.updateLocale=E1,t.locales=_c,t.weekdaysShort=rl,t.normalizeUnits=Cr,t.relativeTimeRounding=Ow,t.relativeTimeThreshold=xw,t.calendarFormat=Fy,t.prototype=ot,t.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},t})});var Zxe=Ce((U3r,$xe)=>{var TQe=G0(),CQe=Ch(),MQe=zd(),AQe="[object String]";function RQe(e){return typeof e=="string"||!CQe(e)&&MQe(e)&&TQe(e)==AQe}$xe.exports=RQe});var Uxe=Ce((G3r,qxe)=>{var DQe=G0(),LQe=zd(),NQe="[object Boolean]";function FQe(e){return e===!0||e===!1||LQe(e)&&DQe(e)==NQe}qxe.exports=FQe});var roe=Ce((J3r,Gxe)=>{var BQe=G0(),zQe=zd(),WQe="[object Number]";function HQe(e){return typeof e=="number"||zQe(e)&&BQe(e)==WQe}Gxe.exports=HQe});var Xxe=Ce((X3r,Jxe)=>{var VQe=roe();function $Qe(e){return VQe(e)&&e!=+e}Jxe.exports=$Qe});var c_e=Ce((u_e,FG)=>{(function(e,t){typeof define=="function"&&define.amd?define(t):typeof FG=="object"&&FG.exports?FG.exports=t():e.numeral=t()})(u_e,function(){var e,t,r="2.0.6",n={},o={},i={currentLocale:"en",zeroFormat:null,nullFormat:null,defaultFormat:"0,0",scalePercentBy100:!0},c={currentLocale:i.currentLocale,zeroFormat:i.zeroFormat,nullFormat:i.nullFormat,defaultFormat:i.defaultFormat,scalePercentBy100:i.scalePercentBy100};function d(h,v){this._input=h,this._value=v}return e=function(h){var v,w,_,I;if(e.isNumeral(h))v=h.value();else if(h===0||typeof h>"u")v=0;else if(h===null||t.isNaN(h))v=null;else if(typeof h=="string")if(c.zeroFormat&&h===c.zeroFormat)v=0;else if(c.nullFormat&&h===c.nullFormat||!h.replace(/[^0-9]+/g,"").length)v=null;else{for(w in n)if(I=typeof n[w].regexps.unformat=="function"?n[w].regexps.unformat():n[w].regexps.unformat,I&&h.match(I)){_=n[w].unformat;break}_=_||e._.stringToNumber,v=_(h)}else v=Number(h)||null;return new d(h,v)},e.version=r,e.isNumeral=function(h){return h instanceof d},e._=t={numberToFormat:function(h,v,w){var _=o[e.options.currentLocale],I=!1,R=!1,D=0,F="",A=1e12,N=1e9,H=1e6,q=1e3,Y="",ee=!1,ne,te,de,fe,ye,Ie,ve,Oe,be,Te;if(h=h||0,te=Math.abs(h),e._.includes(v,"(")?(I=!0,v=v.replace(/[\(|\)]/g,"")):(e._.includes(v,"+")||e._.includes(v,"-"))&&(Oe=e._.includes(v,"+")?v.indexOf("+"):h<0?v.indexOf("-"):-1,v=v.replace(/[\+|\-]/g,"")),e._.includes(v,"a")&&(ne=v.match(/a(k|m|b|t)?/),ne=ne?ne[1]:!1,e._.includes(v," a")&&(F=" "),v=v.replace(new RegExp(F+"a[kmbt]?"),""),te>=A&&!ne||ne==="t"?(F+=_.abbreviations.trillion,h=h/A):te=N&&!ne||ne==="b"?(F+=_.abbreviations.billion,h=h/N):te=H&&!ne||ne==="m"?(F+=_.abbreviations.million,h=h/H):(te=q&&!ne||ne==="k")&&(F+=_.abbreviations.thousand,h=h/q)),e._.includes(v,"[.]")&&(R=!0,v=v.replace("[.]",".")),Ie=h.toString().split(".")[0],ve=v.split(".")[1],be=v.indexOf(","),D=(v.split(".")[0].split(",")[0].match(/0/g)||[]).length,ve?(e._.includes(ve,"[")?(ve=ve.replace("]",""),ve=ve.split("["),Y=e._.toFixed(h,ve[0].length+ve[1].length,w,ve[1].length)):Y=e._.toFixed(h,ve.length,w),Ie=Y.split(".")[0],e._.includes(Y,".")?Y=_.delimiters.decimal+Y.split(".")[1]:Y="",R&&Number(Y.slice(1))===0&&(Y="")):Ie=e._.toFixed(h,0,w),F&&!ne&&Number(Ie)>=1e3&&F!==_.abbreviations.trillion)switch(Ie=String(Number(Ie)/1e3),F){case _.abbreviations.thousand:F=_.abbreviations.million;break;case _.abbreviations.million:F=_.abbreviations.billion;break;case _.abbreviations.billion:F=_.abbreviations.trillion;break}if(e._.includes(Ie,"-")&&(Ie=Ie.slice(1),ee=!0),Ie.length0;Pe--)Ie="0"+Ie;return be>-1&&(Ie=Ie.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+_.delimiters.thousands)),v.indexOf(".")===0&&(Ie=""),Te=Ie+Y+(F||""),I?Te=(I&&ee?"(":"")+Te+(I&&ee?")":""):Oe>=0?Te=Oe===0?(ee?"-":"+")+Te:Te+(ee?"-":"+"):ee&&(Te="-"+Te),Te},stringToNumber:function(h){var v=o[c.currentLocale],w=h,_={thousand:3,million:6,billion:9,trillion:12},I,R,D,F;if(c.zeroFormat&&h===c.zeroFormat)R=0;else if(c.nullFormat&&h===c.nullFormat||!h.replace(/[^0-9]+/g,"").length)R=null;else{R=1,v.delimiters.decimal!=="."&&(h=h.replace(/\./g,"").replace(v.delimiters.decimal,"."));for(I in _)if(F=new RegExp("[^a-zA-Z]"+v.abbreviations[I]+"(?:\\)|(\\"+v.currency.symbol+")?(?:\\))?)?$"),w.match(F)){R*=Math.pow(10,_[I]);break}R*=(h.split("-").length+Math.min(h.split("(").length-1,h.split(")").length-1))%2?1:-1,h=h.replace(/[^0-9\.]+/g,""),R*=Number(h)}return R},isNaN:function(h){return typeof h=="number"&&isNaN(h)},includes:function(h,v){return h.indexOf(v)!==-1},insert:function(h,v,w){return h.slice(0,w)+v+h.slice(w)},reduce:function(h,v){if(this===null)throw new TypeError("Array.prototype.reduce called on null or undefined");if(typeof v!="function")throw new TypeError(v+" is not a function");var w=Object(h),_=w.length>>>0,I=0,R;if(arguments.length===3)R=arguments[2];else{for(;I<_&&!(I in w);)I++;if(I>=_)throw new TypeError("Reduce of empty array with no initial value");R=w[I++]}for(;I<_;I++)I in w&&(R=v(R,w[I],I,w));return R},multiplier:function(h){var v=h.toString().split(".");return v.length<2?1:Math.pow(10,v[1].length)},correctionFactor:function(){var h=Array.prototype.slice.call(arguments);return h.reduce(function(v,w){var _=t.multiplier(w);return v>_?v:_},1)},toFixed:function(h,v,w,_){var I=h.toString().split("."),R=v-(_||0),D,F,A,N;return I.length===2?D=Math.min(Math.max(I[1].length,R),v):D=R,A=Math.pow(10,D),N=(w(h+"e+"+D)/A).toFixed(D),_>v-D&&(F=new RegExp("\\.?0{1,"+(_-(v-D))+"}$"),N=N.replace(F,"")),N}},e.options=c,e.formats=n,e.locales=o,e.locale=function(h){return h&&(c.currentLocale=h.toLowerCase()),c.currentLocale},e.localeData=function(h){if(!h)return o[c.currentLocale];if(h=h.toLowerCase(),!o[h])throw new Error("Unknown locale : "+h);return o[h]},e.reset=function(){for(var h in i)c[h]=i[h]},e.zeroFormat=function(h){c.zeroFormat=typeof h=="string"?h:null},e.nullFormat=function(h){c.nullFormat=typeof h=="string"?h:null},e.defaultFormat=function(h){c.defaultFormat=typeof h=="string"?h:"0.0"},e.register=function(h,v,w){if(v=v.toLowerCase(),this[h+"s"][v])throw new TypeError(v+" "+h+" already registered.");return this[h+"s"][v]=w,w},e.validate=function(h,v){var w,_,I,R,D,F,A,N;if(typeof h!="string"&&(h+="",console.warn&&console.warn("Numeral.js: Value is not string. It has been co-erced to: ",h)),h=h.trim(),h.match(/^\d+$/))return!0;if(h==="")return!1;try{A=e.localeData(v)}catch{A=e.localeData(e.locale())}return I=A.currency.symbol,D=A.abbreviations,w=A.delimiters.decimal,A.delimiters.thousands==="."?_="\\.":_=A.delimiters.thousands,N=h.match(/^[^\d]+/),N!==null&&(h=h.substr(1),N[0]!==I)||(N=h.match(/[^\d]+$/),N!==null&&(h=h.slice(0,-1),N[0]!==D.thousand&&N[0]!==D.million&&N[0]!==D.billion&&N[0]!==D.trillion))?!1:(F=new RegExp(_+"{2}"),h.match(/[^\d.,]/g)?!1:(R=h.split(w),R.length>2?!1:R.length<2?!!R[0].match(/^\d+.*\d$/)&&!R[0].match(F):R[0].length===1?!!R[0].match(/^\d+$/)&&!R[0].match(F)&&!!R[1].match(/^\d+$/):!!R[0].match(/^\d+.*\d$/)&&!R[0].match(F)&&!!R[1].match(/^\d+$/)))},e.fn=d.prototype={clone:function(){return e(this)},format:function(h,v){var w=this._value,_=h||c.defaultFormat,I,R,D;if(v=v||Math.round,w===0&&c.zeroFormat!==null)R=c.zeroFormat;else if(w===null&&c.nullFormat!==null)R=c.nullFormat;else{for(I in n)if(_.match(n[I].regexps.format)){D=n[I].format;break}D=D||e._.numberToFormat,R=D(w,_,v)}return R},value:function(){return this._value},input:function(){return this._input},set:function(h){return this._value=Number(h),this},add:function(h){var v=t.correctionFactor.call(null,this._value,h);function w(_,I,R,D){return _+Math.round(v*I)}return this._value=t.reduce([this._value,h],w,0)/v,this},subtract:function(h){var v=t.correctionFactor.call(null,this._value,h);function w(_,I,R,D){return _-Math.round(v*I)}return this._value=t.reduce([h],w,Math.round(this._value*v))/v,this},multiply:function(h){function v(w,_,I,R){var D=t.correctionFactor(w,_);return Math.round(w*D)*Math.round(_*D)/Math.round(D*D)}return this._value=t.reduce([this._value,h],v,1),this},divide:function(h){function v(w,_,I,R){var D=t.correctionFactor(w,_);return Math.round(w*D)/Math.round(_*D)}return this._value=t.reduce([this._value,h],v),this},difference:function(h){return Math.abs(e(this._value).subtract(h).value())}},e.register("locale","en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(h){var v=h%10;return~~(h%100/10)===1?"th":v===1?"st":v===2?"nd":v===3?"rd":"th"},currency:{symbol:"$"}}),function(){e.register("format","bps",{regexps:{format:/(BPS)/,unformat:/(BPS)/},format:function(h,v,w){var _=e._.includes(v," BPS")?" ":"",I;return h=h*1e4,v=v.replace(/\s?BPS/,""),I=e._.numberToFormat(h,v,w),e._.includes(I,")")?(I=I.split(""),I.splice(-1,0,_+"BPS"),I=I.join("")):I=I+_+"BPS",I},unformat:function(h){return+(e._.stringToNumber(h)*1e-4).toFixed(15)}})}(),function(){var h={base:1e3,suffixes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},v={base:1024,suffixes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},w=h.suffixes.concat(v.suffixes.filter(function(I){return h.suffixes.indexOf(I)<0})),_=w.join("|");_="("+_.replace("B","B(?!PS)")+")",e.register("format","bytes",{regexps:{format:/([0\s]i?b)/,unformat:new RegExp(_)},format:function(I,R,D){var F,A=e._.includes(R,"ib")?v:h,N=e._.includes(R," b")||e._.includes(R," ib")?" ":"",H,q,Y;for(R=R.replace(/\s?i?b/,""),H=0;H<=A.suffixes.length;H++)if(q=Math.pow(A.base,H),Y=Math.pow(A.base,H+1),I===null||I===0||I>=q&&I0&&(I=I/q);break}return F=e._.numberToFormat(I,R,D),F+N},unformat:function(I){var R=e._.stringToNumber(I),D,F;if(R){for(D=h.suffixes.length-1;D>=0;D--){if(e._.includes(I,h.suffixes[D])){F=Math.pow(h.base,D);break}if(e._.includes(I,v.suffixes[D])){F=Math.pow(v.base,D);break}}R*=F||1}return R}})}(),function(){e.register("format","currency",{regexps:{format:/(\$)/},format:function(h,v,w){var _=e.locales[e.options.currentLocale],I={before:v.match(/^([\+|\-|\(|\s|\$]*)/)[0],after:v.match(/([\+|\-|\)|\s|\$]*)$/)[0]},R,D,F;for(v=v.replace(/\s?\$\s?/,""),R=e._.numberToFormat(h,v,w),h>=0?(I.before=I.before.replace(/[\-\(]/,""),I.after=I.after.replace(/[\-\)]/,"")):h<0&&!e._.includes(I.before,"-")&&!e._.includes(I.before,"(")&&(I.before="-"+I.before),F=0;F=0;F--)switch(D=I.after[F],D){case"$":R=F===I.after.length-1?R+_.currency.symbol:e._.insert(R,_.currency.symbol,-(I.after.length-(1+F)));break;case" ":R=F===I.after.length-1?R+" ":e._.insert(R," ",-(I.after.length-(1+F)+_.currency.symbol.length-1));break}return R}})}(),function(){e.register("format","exponential",{regexps:{format:/(e\+|e-)/,unformat:/(e\+|e-)/},format:function(h,v,w){var _,I=typeof h=="number"&&!e._.isNaN(h)?h.toExponential():"0e+0",R=I.split("e");return v=v.replace(/e[\+|\-]{1}0/,""),_=e._.numberToFormat(Number(R[0]),v,w),_+"e"+R[1]},unformat:function(h){var v=e._.includes(h,"e+")?h.split("e+"):h.split("e-"),w=Number(v[0]),_=Number(v[1]);_=e._.includes(h,"e-")?_*=-1:_;function I(R,D,F,A){var N=e._.correctionFactor(R,D),H=R*N*(D*N)/(N*N);return H}return e._.reduce([w,Math.pow(10,_)],I,1)}})}(),function(){e.register("format","ordinal",{regexps:{format:/(o)/},format:function(h,v,w){var _=e.locales[e.options.currentLocale],I,R=e._.includes(v," o")?" ":"";return v=v.replace(/\s?o/,""),R+=_.ordinal(h),I=e._.numberToFormat(h,v,w),I+R}})}(),function(){e.register("format","percentage",{regexps:{format:/(%)/,unformat:/(%)/},format:function(h,v,w){var _=e._.includes(v," %")?" ":"",I;return e.options.scalePercentBy100&&(h=h*100),v=v.replace(/\s?\%/,""),I=e._.numberToFormat(h,v,w),e._.includes(I,")")?(I=I.split(""),I.splice(-1,0,_+"%"),I=I.join("")):I=I+_+"%",I},unformat:function(h){var v=e._.stringToNumber(h);return e.options.scalePercentBy100?v*.01:v}})}(),function(){e.register("format","time",{regexps:{format:/(:)/,unformat:/(:)/},format:function(h,v,w){var _=Math.floor(h/60/60),I=Math.floor((h-_*60*60)/60),R=Math.round(h-_*60*60-I*60);return _+":"+(I<10?"0"+I:I)+":"+(R<10?"0"+R:R)},unformat:function(h){var v=h.split(":"),w=0;return v.length===3?(w=w+Number(v[0])*60*60,w=w+Number(v[1])*60,w=w+Number(v[2])):v.length===2&&(w=w+Number(v[0])*60,w=w+Number(v[1])),Number(w)}})}(),e})});var HG=Ce((Iwr,g_e)=>{var uet=G0(),cet=zd(),pet="[object Symbol]";function det(e){return typeof e=="symbol"||cet(e)&&uet(e)==pet}g_e.exports=det});var b_e=Ce((Ewr,y_e)=>{var fet=Ch(),het=HG(),met=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,vet=/^\w*$/;function get(e,t){if(fet(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||het(e)?!0:vet.test(e)||!met.test(e)||t!=null&&e in Object(t)}y_e.exports=get});var x_e=Ce((Pwr,O_e)=>{var w_e=gG(),yet="Expected a function";function poe(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(yet);var r=function(){var n=arguments,o=t?t.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var c=e.apply(this,n);return r.cache=i.set(o,c)||i,c};return r.cache=new(poe.Cache||w_e),r}poe.Cache=w_e;O_e.exports=poe});var S_e=Ce((kwr,__e)=>{var bet=x_e(),wet=500;function Oet(e){var t=bet(e,function(n){return r.size===wet&&r.clear(),n}),r=t.cache;return t}__e.exports=Oet});var E_e=Ce((jwr,I_e)=>{var xet=S_e(),_et=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Iet=/\\(\\)?/g,Eet=xet(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(_et,function(r,n,o,i){t.push(o?i.replace(Iet,"$1"):n||r)}),t});I_e.exports=Eet});var doe=Ce((Twr,P_e)=>{function Pet(e,t){for(var r=-1,n=e==null?0:e.length,o=Array(n);++r{var k_e=Sx(),ket=doe(),jet=Ch(),Tet=HG(),Cet=1/0,j_e=k_e?k_e.prototype:void 0,T_e=j_e?j_e.toString:void 0;function C_e(e){if(typeof e=="string")return e;if(jet(e))return ket(e,C_e)+"";if(Tet(e))return T_e?T_e.call(e):"";var t=e+"";return t=="0"&&1/e==-Cet?"-0":t}M_e.exports=C_e});var foe=Ce((Mwr,R_e)=>{var Met=A_e();function Aet(e){return e==null?"":Met(e)}R_e.exports=Aet});var VG=Ce((Awr,D_e)=>{var Ret=Ch(),Det=b_e(),Let=E_e(),Net=foe();function Fet(e,t){return Ret(e)?e:Det(e,t)?[e]:Let(Net(e))}D_e.exports=Fet});var hoe=Ce((Rwr,L_e)=>{var Bet=HG(),zet=1/0;function Wet(e){if(typeof e=="string"||Bet(e))return e;var t=e+"";return t=="0"&&1/e==-zet?"-0":t}L_e.exports=Wet});var moe=Ce((Dwr,N_e)=>{var Het=VG(),Vet=hoe();function $et(e,t){t=Het(t,e);for(var r=0,n=t.length;e!=null&&r{var Zet=moe();function qet(e,t,r){var n=e==null?void 0:Zet(e,t);return n===void 0?r:n}F_e.exports=qet});var W_e=Ce((Nwr,z_e)=>{function Uet(e,t){for(var r=-1,n=e==null?0:e.length;++r{var Get=o3(),Jet=function(){try{var e=Get(Object,"defineProperty");return e({},"",{}),e}catch{}}();H_e.exports=Jet});var goe=Ce((Bwr,$_e)=>{var V_e=voe();function Xet(e,t,r){t=="__proto__"&&V_e?V_e(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}$_e.exports=Xet});var yoe=Ce((zwr,Z_e)=>{var Ket=goe(),Yet=hG(),Qet=Object.prototype,ett=Qet.hasOwnProperty;function ttt(e,t,r){var n=e[t];(!(ett.call(e,t)&&Yet(n,r))||r===void 0&&!(t in e))&&Ket(e,t,r)}Z_e.exports=ttt});var u9=Ce((Wwr,q_e)=>{var rtt=yoe(),ntt=goe();function ott(e,t,r,n){var o=!r;r||(r={});for(var i=-1,c=t.length;++i{var itt=u9(),att=IG();function stt(e,t){return e&&itt(t,att(t),e)}U_e.exports=stt});var X_e=Ce((Vwr,J_e)=>{function ltt(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}J_e.exports=ltt});var Y_e=Ce(($wr,K_e)=>{var utt=Ix(),ctt=SG(),ptt=X_e(),dtt=Object.prototype,ftt=dtt.hasOwnProperty;function htt(e){if(!utt(e))return ptt(e);var t=ctt(e),r=[];for(var n in e)n=="constructor"&&(t||!ftt.call(e,n))||r.push(n);return r}K_e.exports=htt});var $G=Ce((Zwr,Q_e)=>{var mtt=Mne(),vtt=Y_e(),gtt=Rne();function ytt(e){return gtt(e)?mtt(e,!0):vtt(e)}Q_e.exports=ytt});var tSe=Ce((qwr,eSe)=>{var btt=u9(),wtt=$G();function Ott(e,t){return e&&btt(t,wtt(t),e)}eSe.exports=Ott});var aSe=Ce((TA,c9)=>{var xtt=Th(),iSe=typeof TA=="object"&&TA&&!TA.nodeType&&TA,rSe=iSe&&typeof c9=="object"&&c9&&!c9.nodeType&&c9,_tt=rSe&&rSe.exports===iSe,nSe=_tt?xtt.Buffer:void 0,oSe=nSe?nSe.allocUnsafe:void 0;function Stt(e,t){if(t)return e.slice();var r=e.length,n=oSe?oSe(r):new e.constructor(r);return e.copy(n),n}c9.exports=Stt});var lSe=Ce((Uwr,sSe)=>{function Itt(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r{var Ett=u9(),Ptt=wG();function ktt(e,t){return Ett(e,Ptt(e),t)}uSe.exports=ktt});var ZG=Ce((Jwr,pSe)=>{var jtt=Ane(),Ttt=jtt(Object.getPrototypeOf,Object);pSe.exports=Ttt});var boe=Ce((Xwr,dSe)=>{var Ctt=bG(),Mtt=ZG(),Att=wG(),Rtt=Pne(),Dtt=Object.getOwnPropertySymbols,Ltt=Dtt?function(e){for(var t=[];e;)Ctt(t,Att(e)),e=Mtt(e);return t}:Rtt;dSe.exports=Ltt});var hSe=Ce((Kwr,fSe)=>{var Ntt=u9(),Ftt=boe();function Btt(e,t){return Ntt(e,Ftt(e),t)}fSe.exports=Btt});var woe=Ce((Ywr,mSe)=>{var ztt=Ene(),Wtt=boe(),Htt=$G();function Vtt(e){return ztt(e,Htt,Wtt)}mSe.exports=Vtt});var gSe=Ce((Qwr,vSe)=>{var $tt=Object.prototype,Ztt=$tt.hasOwnProperty;function qtt(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&Ztt.call(e,"index")&&(r.index=e.index,r.input=e.input),r}vSe.exports=qtt});var qG=Ce((eOr,bSe)=>{var ySe=Sne();function Utt(e){var t=new e.constructor(e.byteLength);return new ySe(t).set(new ySe(e)),t}bSe.exports=Utt});var OSe=Ce((tOr,wSe)=>{var Gtt=qG();function Jtt(e,t){var r=t?Gtt(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}wSe.exports=Jtt});var _Se=Ce((rOr,xSe)=>{var Xtt=/\w*$/;function Ktt(e){var t=new e.constructor(e.source,Xtt.exec(e));return t.lastIndex=e.lastIndex,t}xSe.exports=Ktt});var kSe=Ce((nOr,PSe)=>{var SSe=Sx(),ISe=SSe?SSe.prototype:void 0,ESe=ISe?ISe.valueOf:void 0;function Ytt(e){return ESe?Object(ESe.call(e)):{}}PSe.exports=Ytt});var TSe=Ce((oOr,jSe)=>{var Qtt=qG();function ert(e,t){var r=t?Qtt(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}jSe.exports=ert});var MSe=Ce((iOr,CSe)=>{var trt=qG(),rrt=OSe(),nrt=_Se(),ort=kSe(),irt=TSe(),art="[object Boolean]",srt="[object Date]",lrt="[object Map]",urt="[object Number]",crt="[object RegExp]",prt="[object Set]",drt="[object String]",frt="[object Symbol]",hrt="[object ArrayBuffer]",mrt="[object DataView]",vrt="[object Float32Array]",grt="[object Float64Array]",yrt="[object Int8Array]",brt="[object Int16Array]",wrt="[object Int32Array]",Ort="[object Uint8Array]",xrt="[object Uint8ClampedArray]",_rt="[object Uint16Array]",Srt="[object Uint32Array]";function Irt(e,t,r){var n=e.constructor;switch(t){case hrt:return trt(e);case art:case srt:return new n(+e);case mrt:return rrt(e,r);case vrt:case grt:case yrt:case brt:case wrt:case Ort:case xrt:case _rt:case Srt:return irt(e,r);case lrt:return new n;case urt:case drt:return new n(e);case crt:return nrt(e);case prt:return new n;case frt:return ort(e)}}CSe.exports=Irt});var DSe=Ce((aOr,RSe)=>{var Ert=Ix(),ASe=Object.create,Prt=function(){function e(){}return function(t){if(!Ert(t))return{};if(ASe)return ASe(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();RSe.exports=Prt});var NSe=Ce((sOr,LSe)=>{var krt=DSe(),jrt=ZG(),Trt=SG();function Crt(e){return typeof e.constructor=="function"&&!Trt(e)?krt(jrt(e)):{}}LSe.exports=Crt});var BSe=Ce((lOr,FSe)=>{var Mrt=_A(),Art=zd(),Rrt="[object Map]";function Drt(e){return Art(e)&&Mrt(e)==Rrt}FSe.exports=Drt});var VSe=Ce((uOr,HSe)=>{var Lrt=BSe(),Nrt=xG(),zSe=_G(),WSe=zSe&&zSe.isMap,Frt=WSe?Nrt(WSe):Lrt;HSe.exports=Frt});var ZSe=Ce((cOr,$Se)=>{var Brt=_A(),zrt=zd(),Wrt="[object Set]";function Hrt(e){return zrt(e)&&Brt(e)==Wrt}$Se.exports=Hrt});var JSe=Ce((pOr,GSe)=>{var Vrt=ZSe(),$rt=xG(),qSe=_G(),USe=qSe&&qSe.isSet,Zrt=USe?$rt(USe):Vrt;GSe.exports=Zrt});var e7e=Ce((dOr,QSe)=>{var qrt=xne(),Urt=W_e(),Grt=yoe(),Jrt=G_e(),Xrt=tSe(),Krt=aSe(),Yrt=lSe(),Qrt=cSe(),ent=hSe(),tnt=Dne(),rnt=woe(),nnt=_A(),ont=gSe(),int=MSe(),ant=NSe(),snt=Ch(),lnt=OG(),unt=VSe(),cnt=Ix(),pnt=JSe(),dnt=IG(),fnt=$G(),hnt=1,mnt=2,vnt=4,XSe="[object Arguments]",gnt="[object Array]",ynt="[object Boolean]",bnt="[object Date]",wnt="[object Error]",KSe="[object Function]",Ont="[object GeneratorFunction]",xnt="[object Map]",_nt="[object Number]",YSe="[object Object]",Snt="[object RegExp]",Int="[object Set]",Ent="[object String]",Pnt="[object Symbol]",knt="[object WeakMap]",jnt="[object ArrayBuffer]",Tnt="[object DataView]",Cnt="[object Float32Array]",Mnt="[object Float64Array]",Ant="[object Int8Array]",Rnt="[object Int16Array]",Dnt="[object Int32Array]",Lnt="[object Uint8Array]",Nnt="[object Uint8ClampedArray]",Fnt="[object Uint16Array]",Bnt="[object Uint32Array]",Fo={};Fo[XSe]=Fo[gnt]=Fo[jnt]=Fo[Tnt]=Fo[ynt]=Fo[bnt]=Fo[Cnt]=Fo[Mnt]=Fo[Ant]=Fo[Rnt]=Fo[Dnt]=Fo[xnt]=Fo[_nt]=Fo[YSe]=Fo[Snt]=Fo[Int]=Fo[Ent]=Fo[Pnt]=Fo[Lnt]=Fo[Nnt]=Fo[Fnt]=Fo[Bnt]=!0;Fo[wnt]=Fo[KSe]=Fo[knt]=!1;function UG(e,t,r,n,o,i){var c,d=t&hnt,h=t&mnt,v=t&vnt;if(r&&(c=o?r(e,n,o,i):r(e)),c!==void 0)return c;if(!cnt(e))return e;var w=snt(e);if(w){if(c=ont(e),!d)return Yrt(e,c)}else{var _=nnt(e),I=_==KSe||_==Ont;if(lnt(e))return Krt(e,d);if(_==YSe||_==XSe||I&&!o){if(c=h||I?{}:ant(e),!d)return h?ent(e,Xrt(c,e)):Qrt(e,Jrt(c,e))}else{if(!Fo[_])return o?e:{};c=int(e,_,d)}}i||(i=new qrt);var R=i.get(e);if(R)return R;i.set(e,c),pnt(e)?e.forEach(function(A){c.add(UG(A,t,r,A,e,i))}):unt(e)&&e.forEach(function(A,N){c.set(N,UG(A,t,r,N,e,i))});var D=v?h?rnt:tnt:h?fnt:dnt,F=w?void 0:D(e);return Urt(F||e,function(A,N){F&&(N=A,A=e[N]),Grt(c,N,UG(A,t,r,N,e,i))}),c}QSe.exports=UG});var r7e=Ce((fOr,t7e)=>{function znt(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}t7e.exports=znt});var o7e=Ce((hOr,n7e)=>{function Wnt(e,t,r){var n=-1,o=e.length;t<0&&(t=-t>o?0:o+t),r=r>o?o:r,r<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var i=Array(o);++n{var Hnt=moe(),Vnt=o7e();function $nt(e,t){return t.length<2?e:Hnt(e,Vnt(t,0,-1))}i7e.exports=$nt});var l7e=Ce((vOr,s7e)=>{var Znt=VG(),qnt=r7e(),Unt=a7e(),Gnt=hoe();function Jnt(e,t){return t=Znt(t,e),e=Unt(e,t),e==null||delete e[Gnt(qnt(t))]}s7e.exports=Jnt});var p7e=Ce((gOr,c7e)=>{var Xnt=G0(),Knt=ZG(),Ynt=zd(),Qnt="[object Object]",eot=Function.prototype,tot=Object.prototype,u7e=eot.toString,rot=tot.hasOwnProperty,not=u7e.call(Object);function oot(e){if(!Ynt(e)||Xnt(e)!=Qnt)return!1;var t=Knt(e);if(t===null)return!0;var r=rot.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&u7e.call(r)==not}c7e.exports=oot});var f7e=Ce((yOr,d7e)=>{var iot=p7e();function aot(e){return iot(e)?void 0:e}d7e.exports=aot});var g7e=Ce((bOr,v7e)=>{var h7e=Sx(),sot=kne(),lot=Ch(),m7e=h7e?h7e.isConcatSpreadable:void 0;function uot(e){return lot(e)||sot(e)||!!(m7e&&e&&e[m7e])}v7e.exports=uot});var w7e=Ce((wOr,b7e)=>{var cot=bG(),pot=g7e();function y7e(e,t,r,n,o){var i=-1,c=e.length;for(r||(r=pot),o||(o=[]);++i0&&r(d)?t>1?y7e(d,t-1,r,n,o):cot(o,d):n||(o[o.length]=d)}return o}b7e.exports=y7e});var x7e=Ce((OOr,O7e)=>{var dot=w7e();function fot(e){var t=e==null?0:e.length;return t?dot(e,1):[]}O7e.exports=fot});var S7e=Ce((xOr,_7e)=>{function hot(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}_7e.exports=hot});var P7e=Ce((_Or,E7e)=>{var mot=S7e(),I7e=Math.max;function vot(e,t,r){return t=I7e(t===void 0?e.length-1:t,0),function(){for(var n=arguments,o=-1,i=I7e(n.length-t,0),c=Array(i);++o{function got(e){return function(){return e}}k7e.exports=got});var C7e=Ce((IOr,T7e)=>{function yot(e){return e}T7e.exports=yot});var R7e=Ce((EOr,A7e)=>{var bot=j7e(),M7e=voe(),wot=C7e(),Oot=M7e?function(e,t){return M7e(e,"toString",{configurable:!0,enumerable:!1,value:bot(t),writable:!0})}:wot;A7e.exports=Oot});var L7e=Ce((POr,D7e)=>{var xot=800,_ot=16,Sot=Date.now;function Iot(e){var t=0,r=0;return function(){var n=Sot(),o=_ot-(n-r);if(r=n,o>0){if(++t>=xot)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}D7e.exports=Iot});var F7e=Ce((kOr,N7e)=>{var Eot=R7e(),Pot=L7e(),kot=Pot(Eot);N7e.exports=kot});var z7e=Ce((jOr,B7e)=>{var jot=x7e(),Tot=P7e(),Cot=F7e();function Mot(e){return Cot(Tot(e,void 0,jot),e+"")}B7e.exports=Mot});var H7e=Ce((TOr,W7e)=>{var Aot=doe(),Rot=e7e(),Dot=l7e(),Lot=VG(),Not=u9(),Fot=f7e(),Bot=z7e(),zot=woe(),Wot=1,Hot=2,Vot=4,$ot=Bot(function(e,t){var r={};if(e==null)return r;var n=!1;t=Aot(t,function(i){return i=Lot(i,e),n||(n=i.length>1),i}),Not(e,zot(e),r),n&&(r=Rot(r,Wot|Hot|Vot,Fot));for(var o=t.length;o--;)Dot(r,t[o]);return r});W7e.exports=$ot});var J8e=Ce(jo=>{"use strict";var fJ=60103,hJ=60106,cV=60107,pV=60108,dV=60114,fV=60109,hV=60110,mV=60112,vV=60113,ahe=60120,gV=60115,yV=60116,$8e=60121,Z8e=60122,q8e=60117,U8e=60129,G8e=60131;typeof Symbol=="function"&&Symbol.for&&(cs=Symbol.for,fJ=cs("react.element"),hJ=cs("react.portal"),cV=cs("react.fragment"),pV=cs("react.strict_mode"),dV=cs("react.profiler"),fV=cs("react.provider"),hV=cs("react.context"),mV=cs("react.forward_ref"),vV=cs("react.suspense"),ahe=cs("react.suspense_list"),gV=cs("react.memo"),yV=cs("react.lazy"),$8e=cs("react.block"),Z8e=cs("react.server.block"),q8e=cs("react.fundamental"),U8e=cs("react.debug_trace_mode"),G8e=cs("react.legacy_hidden"));var cs;function Ah(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case fJ:switch(e=e.type,e){case cV:case dV:case pV:case vV:case ahe:return e;default:switch(e=e&&e.$$typeof,e){case hV:case mV:case yV:case gV:case fV:return e;default:return t}}case hJ:return t}}}var _Vt=fV,SVt=fJ,IVt=mV,EVt=cV,PVt=yV,kVt=gV,jVt=hJ,TVt=dV,CVt=pV,MVt=vV;jo.ContextConsumer=hV;jo.ContextProvider=_Vt;jo.Element=SVt;jo.ForwardRef=IVt;jo.Fragment=EVt;jo.Lazy=PVt;jo.Memo=kVt;jo.Portal=jVt;jo.Profiler=TVt;jo.StrictMode=CVt;jo.Suspense=MVt;jo.isAsyncMode=function(){return!1};jo.isConcurrentMode=function(){return!1};jo.isContextConsumer=function(e){return Ah(e)===hV};jo.isContextProvider=function(e){return Ah(e)===fV};jo.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===fJ};jo.isForwardRef=function(e){return Ah(e)===mV};jo.isFragment=function(e){return Ah(e)===cV};jo.isLazy=function(e){return Ah(e)===yV};jo.isMemo=function(e){return Ah(e)===gV};jo.isPortal=function(e){return Ah(e)===hJ};jo.isProfiler=function(e){return Ah(e)===dV};jo.isStrictMode=function(e){return Ah(e)===pV};jo.isSuspense=function(e){return Ah(e)===vV};jo.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===cV||e===dV||e===U8e||e===pV||e===vV||e===ahe||e===G8e||typeof e=="object"&&e!==null&&(e.$$typeof===yV||e.$$typeof===gV||e.$$typeof===fV||e.$$typeof===hV||e.$$typeof===mV||e.$$typeof===q8e||e.$$typeof===$8e||e[0]===Z8e)};jo.typeOf=Ah});var K8e=Ce((oFr,X8e)=>{"use strict";X8e.exports=J8e()});var fIe=Ce((FFr,dIe)=>{"use strict";dIe.exports=function(t,r){if(r=r.split(":")[0],t=+t,!t)return!1;switch(r){case"http":case"ws":return t!==80;case"https":case"wss":return t!==443;case"ftp":return t!==21;case"gopher":return t!==70;case"file":return!1}return t!==0}});var vIe=Ce(che=>{"use strict";var YVt=Object.prototype.hasOwnProperty,QVt;function hIe(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return null}}function mIe(e){try{return encodeURIComponent(e)}catch{return null}}function e$t(e){for(var t=/([^=?#&]+)=?([^&]*)/g,r={},n;n=t.exec(e);){var o=hIe(n[1]),i=hIe(n[2]);o===null||i===null||o in r||(r[o]=i)}return r}function t$t(e,t){t=t||"";var r=[],n,o;typeof t!="string"&&(t="?");for(o in e)if(YVt.call(e,o)){if(n=e[o],!n&&(n===null||n===QVt||isNaN(n))&&(n=""),o=mIe(o),n=mIe(n),o===null||n===null)continue;r.push(o+"="+n)}return r.length?t+r.join("&"):""}che.stringify=t$t;che.parse=e$t});var SIe=Ce((zFr,_Ie)=>{"use strict";var yIe=fIe(),gJ=vIe(),r$t=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,bIe=/[\n\r\t]/g,n$t=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,wIe=/:\d+$/,o$t=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,i$t=/^[a-zA-Z]:/;function dhe(e){return(e||"").toString().replace(r$t,"")}var phe=[["#","hash"],["?","query"],function(t,r){return e1(r.protocol)?t.replace(/\\/g,"/"):t},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],gIe={hash:1,query:1};function OIe(e){var t;typeof window<"u"?t=window:typeof global<"u"?t=global:typeof self<"u"?t=self:t={};var r=t.location||{};e=e||r;var n={},o=typeof e,i;if(e.protocol==="blob:")n=new t1(unescape(e.pathname),{});else if(o==="string"){n=new t1(e,{});for(i in gIe)delete n[i]}else if(o==="object"){for(i in e)i in gIe||(n[i]=e[i]);n.slashes===void 0&&(n.slashes=n$t.test(e.href))}return n}function e1(e){return e==="file:"||e==="ftp:"||e==="http:"||e==="https:"||e==="ws:"||e==="wss:"}function xIe(e,t){e=dhe(e),e=e.replace(bIe,""),t=t||{};var r=o$t.exec(e),n=r[1]?r[1].toLowerCase():"",o=!!r[2],i=!!r[3],c=0,d;return o?i?(d=r[2]+r[3]+r[4],c=r[2].length+r[3].length):(d=r[2]+r[4],c=r[2].length):i?(d=r[3]+r[4],c=r[3].length):d=r[4],n==="file:"?c>=2&&(d=d.slice(2)):e1(n)?d=r[4]:n?o&&(d=d.slice(2)):c>=2&&e1(t.protocol)&&(d=r[4]),{protocol:n,slashes:o||e1(n),slashesCount:c,rest:d}}function a$t(e,t){if(e==="")return t;for(var r=(t||"/").split("/").slice(0,-1).concat(e.split("/")),n=r.length,o=r[n-1],i=!1,c=0;n--;)r[n]==="."?r.splice(n,1):r[n]===".."?(r.splice(n,1),c++):c&&(n===0&&(i=!0),r.splice(n,1),c--);return i&&r.unshift(""),(o==="."||o==="..")&&r.push(""),r.join("/")}function t1(e,t,r){if(e=dhe(e),e=e.replace(bIe,""),!(this instanceof t1))return new t1(e,t,r);var n,o,i,c,d,h,v=phe.slice(),w=typeof t,_=this,I=0;for(w!=="object"&&w!=="string"&&(r=t,t=null),r&&typeof r!="function"&&(r=gJ.parse),t=OIe(t),o=xIe(e||"",t),n=!o.protocol&&!o.slashes,_.slashes=o.slashes||n&&t.slashes,_.protocol=o.protocol||t.protocol||"",e=o.rest,(o.protocol==="file:"&&(o.slashesCount!==2||i$t.test(e))||!o.slashes&&(o.protocol||o.slashesCount<2||!e1(_.protocol)))&&(v[3]=[/(.*)/,"pathname"]);I{var her=foe(),Lje=/[\\^$.*+?()[\]{}|]/g,mer=RegExp(Lje.source);function ver(e){return e=her(e),e&&mer.test(e)?e.replace(Lje,"\\$&"):e}Nje.exports=ver});var mRe=Ce((xY,hRe)=>{(function(e,t){typeof xY=="object"&&typeof hRe<"u"?t(xY):typeof define=="function"&&define.amd?define(["exports"],t):(e=typeof globalThis<"u"?globalThis:e||self,t(e.vis=e.vis||{}))})(xY,function(e){function t(y,x){if(!(y instanceof x))throw new TypeError("Cannot call a class as a function")}var r=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function n(y){return y&&y.__esModule&&Object.prototype.hasOwnProperty.call(y,"default")?y.default:y}var o={exports:{}},i=function(y){return y&&y.Math===Math&&y},c=i(typeof globalThis=="object"&&globalThis)||i(typeof window=="object"&&window)||i(typeof self=="object"&&self)||i(typeof r=="object"&&r)||function(){return this}()||r||Function("return this")(),d=function(y){try{return!!y()}catch{return!0}},h=d,v=!h(function(){var y=function(){}.bind();return typeof y!="function"||y.hasOwnProperty("prototype")}),w=v,_=Function.prototype,I=_.apply,R=_.call,D=typeof Reflect=="object"&&Reflect.apply||(w?R.bind(I):function(){return R.apply(I,arguments)}),F=v,A=Function.prototype,N=A.call,H=F&&A.bind.bind(N,N),q=F?H:function(y){return function(){return N.apply(y,arguments)}},Y=q,ee=Y({}.toString),ne=Y("".slice),te=function(y){return ne(ee(y),8,-1)},de=te,fe=q,ye=function(y){if(de(y)==="Function")return fe(y)},Ie=typeof document=="object"&&document.all,ve=typeof Ie>"u"&&Ie!==void 0,Oe={all:Ie,IS_HTMLDDA:ve},be=Oe,Te=be.all,Pe=be.IS_HTMLDDA?function(y){return typeof y=="function"||y===Te}:function(y){return typeof y=="function"},Re={},Ae=d,Ve=!Ae(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),Je=v,pt=Function.prototype.call,Qe=Je?pt.bind(pt):function(){return pt.apply(pt,arguments)},Fe={},Nt={}.propertyIsEnumerable,Vt=Object.getOwnPropertyDescriptor,Ke=Vt&&!Nt.call({1:2},1);Fe.f=Ke?function(x){var C=Vt(this,x);return!!C&&C.enumerable}:Nt;var st=function(y,x){return{enumerable:!(y&1),configurable:!(y&2),writable:!(y&4),value:x}},Tt=q,wr=d,Rt=te,Ut=Object,vr=Tt("".split),Sr=wr(function(){return!Ut("z").propertyIsEnumerable(0)})?function(y){return Rt(y)==="String"?vr(y,""):Ut(y)}:Ut,Er=function(y){return y==null},po=Er,Pn=TypeError,Nr=function(y){if(po(y))throw new Pn("Can't call method on "+y);return y},Wo=Sr,Cr=Nr,St=function(y){return Wo(Cr(y))},tn=Pe,Ks=Oe,hs=Ks.all,Pr=Ks.IS_HTMLDDA?function(y){return typeof y=="object"?y!==null:tn(y)||y===hs}:function(y){return typeof y=="object"?y!==null:tn(y)},or={},ir=or,Mr=c,Ur=Pe,ms=function(y){return Ur(y)?y:void 0},Nn=function(y,x){return arguments.length<2?ms(ir[y])||ms(Mr[y]):ir[y]&&ir[y][x]||Mr[y]&&Mr[y][x]},Di=q,Xn=Di({}.isPrototypeOf),ya=typeof navigator<"u"&&String(navigator.userAgent)||"",ba=c,wa=ya,g1=ba.process,Kd=ba.Deno,yc=g1&&g1.versions||Kd&&Kd.version,Za=yc&&yc.v8,li,Op;Za&&(li=Za.split("."),Op=li[0]>0&&li[0]<4?1:+(li[0]+li[1])),!Op&&wa&&(li=wa.match(/Edge\/(\d+)/),(!li||li[1]>=74)&&(li=wa.match(/Chrome\/(\d+)/),li&&(Op=+li[1])));var Rl=Op,Ct=Rl,Yd=d,Qd=c,Ki=Qd.String,fo=!!Object.getOwnPropertySymbols&&!Yd(function(){var y=Symbol("symbol detection");return!Ki(y)||!(Object(y)instanceof Symbol)||!Symbol.sham&&Ct&&Ct<41}),rn=fo,Hh=rn&&!Symbol.sham&&typeof Symbol.iterator=="symbol",pn=Nn,Ko=Pe,z3=Xn,xp=Hh,Co=Object,ui=xp?function(y){return typeof y=="symbol"}:function(y){var x=pn("Symbol");return Ko(x)&&z3(x.prototype,Co(y))},Yi=String,Hn=function(y){try{return Yi(y)}catch{return"Object"}},qa=Pe,vs=Hn,gu=TypeError,Qi=function(y){if(qa(y))return y;throw new gu(vs(y)+" is not a function")},hy=Qi,yu=Er,bc=function(y,x){var C=y[x];return yu(C)?void 0:hy(C)},Dl=Qe,Oa=Pe,wc=Pr,Li=TypeError,ea=function(y,x){var C,M;if(x==="string"&&Oa(C=y.toString)&&!wc(M=Dl(C,y))||Oa(C=y.valueOf)&&!wc(M=Dl(C,y))||x!=="string"&&Oa(C=y.toString)&&!wc(M=Dl(C,y)))return M;throw new Li("Can't convert object to primitive value")},my={exports:{}},Yo=!0,kr=c,y1=Object.defineProperty,W3=function(y,x){try{y1(kr,y,{value:x,configurable:!0,writable:!0})}catch{kr[y]=x}return x},vy=c,ef=W3,tf="__core-js_shared__",gy=vy[tf]||ef(tf,{}),Vh=gy,yy=Vh;(my.exports=function(y,x){return yy[y]||(yy[y]=x!==void 0?x:{})})("versions",[]).push({version:"3.33.2",mode:"pure",copyright:"\xA9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.2/LICENSE",source:"https://github.com/zloirock/core-js"});var _p=my.exports,Sp=Nr,Ll=Object,ci=function(y){return Ll(Sp(y))},ho=q,ao=ci,by=ho({}.hasOwnProperty),so=Object.hasOwn||function(x,C){return by(ao(x),C)},wy=q,rf=0,$h=Math.random(),Oy=wy(1 .toString),bu=function(y){return"Symbol("+(y===void 0?"":y)+")_"+Oy(++rf+$h,36)},Nl=c,Zh=_p,Ip=so,qh=bu,b1=fo,xy=Hh,wu=Nl.Symbol,Uh=Zh("wks"),_y=xy?wu.for||wu:wu&&wu.withoutSetter||qh,Kn=function(y){return Ip(Uh,y)||(Uh[y]=b1&&Ip(wu,y)?wu[y]:_y("Symbol."+y)),Uh[y]},H3=Qe,w1=Pr,Sy=ui,V3=bc,$3=ea,Z3=Kn,Iy=TypeError,Ey=Z3("toPrimitive"),q3=function(y,x){if(!w1(y)||Sy(y))return y;var C=V3(y,Ey),M;if(C){if(x===void 0&&(x="default"),M=H3(C,y,x),!w1(M)||Sy(M))return M;throw new Iy("Can't convert object to primitive value")}return x===void 0&&(x="number"),$3(y,x)},U3=q3,nf=ui,Ou=function(y){var x=U3(y,"string");return nf(x)?x:x+""},G3=c,Py=Pr,O1=G3.document,J3=Py(O1)&&Py(O1.createElement),Gh=function(y){return J3?O1.createElement(y):{}},x1=Ve,_1=d,of=Gh,mo=!x1&&!_1(function(){return Object.defineProperty(of("div"),"a",{get:function(){return 7}}).a!==7}),wi=Ve,ky=Qe,X3=Fe,K3=st,xa=St,ta=Ou,ro=so,af=mo,Fl=Object.getOwnPropertyDescriptor;Re.f=wi?Fl:function(x,C){if(x=xa(x),C=ta(C),af)try{return Fl(x,C)}catch{}if(ro(x,C))return K3(!ky(X3.f,x,C),x[C])};var sf=d,S1=Pe,I1=/#|\.prototype\./,Oc=function(y,x){var C=Ua[Ep(y)];return C===E1?!0:C===xc?!1:S1(x)?sf(x):!!x},Ep=Oc.normalize=function(y){return String(y).replace(I1,".").toLowerCase()},Ua=Oc.data={},xc=Oc.NATIVE="N",E1=Oc.POLYFILL="P",Ys=Oc,_c=ye,ra=Qi,Jh=v,Y3=_c(_c.bind),xu=function(y,x){return ra(y),x===void 0?y:Jh?Y3(y,x):function(){return y.apply(x,arguments)}},pi={},P1=Ve,Pp=d,Sc=P1&&Pp(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),kp=Pr,_u=String,jy=TypeError,Bt=function(y){if(kp(y))return y;throw new jy(_u(y)+" is not an object")},ar=Ve,Q3=mo,ew=Sc,Bl=Bt,k1=Ou,jp=TypeError,Xh=Object.defineProperty,Su=Object.getOwnPropertyDescriptor,Tp="enumerable",lf="configurable",Qs="writable";pi.f=ar?ew?function(x,C,M){if(Bl(x),C=k1(C),Bl(M),typeof x=="function"&&C==="prototype"&&"value"in M&&Qs in M&&!M[Qs]){var B=Su(x,C);B&&B[Qs]&&(x[C]=M.value,M={configurable:lf in M?M[lf]:B[lf],enumerable:Tp in M?M[Tp]:B[Tp],writable:!1})}return Xh(x,C,M)}:Xh:function(x,C,M){if(Bl(x),C=k1(C),Bl(M),Q3)try{return Xh(x,C,M)}catch{}if("get"in M||"set"in M)throw new jp("Accessors not supported");return"value"in M&&(x[C]=M.value),x};var Ga=Ve,tw=pi,rw=st,_a=Ga?function(y,x,C){return tw.f(y,x,rw(1,C))}:function(y,x,C){return y[x]=C,y},uf=c,Kh=D,kn=ye,Ni=Pe,nw=Re.f,cf=Ys,Cp=or,Ty=xu,Ic=_a,Sa=so,Cy=function(y){var x=function(C,M,B){if(this instanceof x){switch(arguments.length){case 0:return new y;case 1:return new y(C);case 2:return new y(C,M)}return new y(C,M,B)}return Kh(y,this,arguments)};return x.prototype=y.prototype,x},er=function(y,x){var C=y.target,M=y.global,B=y.stat,Z=y.proto,re=M?uf:B?uf[C]:(uf[C]||{}).prototype,ce=M?Cp:Cp[C]||Ic(Cp,C,{})[C],ae=ce.prototype,he,xe,Me,ke,Ne,Pt,br,Or,Gr;for(ke in x)he=cf(M?ke:C+(B?".":"#")+ke,y.forced),xe=!he&&re&&Sa(re,ke),Pt=ce[ke],xe&&(y.dontCallGetSet?(Gr=nw(re,ke),br=Gr&&Gr.value):br=re[ke]),Ne=xe&&br?br:x[ke],!(xe&&typeof Pt==typeof Ne)&&(y.bind&&xe?Or=Ty(Ne,uf):y.wrap&&xe?Or=Cy(Ne):Z&&Ni(Ne)?Or=kn(Ne):Or=Ne,(y.sham||Ne&&Ne.sham||Pt&&Pt.sham)&&Ic(Or,"sham",!0),Ic(ce,ke,Or),Z&&(Me=C+"Prototype",Sa(Cp,Me)||Ic(Cp,Me,{}),Ic(Cp[Me],ke,Ne),y.real&&ae&&(he||!ae[ke])&&Ic(ae,ke,Ne)))},Yh=er,Iu=Ve,zl=pi.f;Yh({target:"Object",stat:!0,forced:Object.defineProperty!==zl,sham:!Iu},{defineProperty:zl});var j1=or,My=j1.Object,Ay=o.exports=function(x,C,M){return My.defineProperty(x,C,M)};My.defineProperty.sham&&(Ay.sham=!0);var gs=o.exports,T1=gs,Mp=T1,C1=Mp,Ry=C1,Ap=Ry,Dy=Ap,M1=Dy,Qh=n(M1),Ly=te,Cn=Array.isArray||function(x){return Ly(x)==="Array"},em=Math.ceil,A1=Math.floor,R1=Math.trunc||function(x){var C=+x;return(C>0?A1:em)(C)},Ny=R1,tm=function(y){var x=+y;return x!==x||x===0?0:Ny(x)},Rp=tm,Ja=Math.min,ys=function(y){return y>0?Ja(Rp(y),9007199254740991):0},D1=ys,Ia=function(y){return D1(y.length)},rm=TypeError,L1=9007199254740991,Dp=function(y){if(y>L1)throw rm("Maximum allowed index exceeded");return y},ow=Ou,vo=pi,iw=st,Lp=function(y,x,C){var M=ow(x);M in y?vo.f(y,M,iw(0,C)):y[M]=C},aw=Kn,Ec=aw("toStringTag"),Fy={};Fy[Ec]="z";var nm=String(Fy)==="[object z]",at=nm,N1=Pe,pf=te,F1=Kn,B1=F1("toStringTag"),z1=Object,By=pf(function(){return arguments}())==="Arguments",zy=function(y,x){try{return y[x]}catch{}},Ea=at?pf:function(y){var x,C,M;return y===void 0?"Undefined":y===null?"Null":typeof(C=zy(x=z1(y),B1))=="string"?C:By?pf(x):(M=pf(x))==="Object"&&N1(x.callee)?"Arguments":M},W1=q,om=Pe,Pc=Vh,im=W1(Function.toString);om(Pc.inspectSource)||(Pc.inspectSource=function(y){return im(y)});var am=Pc.inspectSource,kc=q,sm=d,df=Pe,Wy=Ea,Hy=Nn,ff=am,bs=function(){},Np=[],hf=Hy("Reflect","construct"),na=/^\s*(?:class|function)\b/,Eu=kc(na.exec),Fp=!na.test(bs),Pu=function(x){if(!df(x))return!1;try{return hf(bs,Np,x),!0}catch{return!1}},Vy=function(x){if(!df(x))return!1;switch(Wy(x)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return Fp||!!Eu(na,ff(x))}catch{return!0}};Vy.sham=!0;var lm=!hf||sm(function(){var y;return Pu(Pu.call)||!Pu(Object)||!Pu(function(){y=!0})||y})?Vy:Pu,H1=Cn,$y=lm,V1=Pr,$1=Kn,sw=$1("species"),Z1=Array,mf=function(y){var x;return H1(y)&&(x=y.constructor,$y(x)&&(x===Z1||H1(x.prototype))?x=void 0:V1(x)&&(x=x[sw],x===null&&(x=void 0))),x===void 0?Z1:x},lw=mf,vf=function(y,x){return new(lw(y))(x===0?0:x)},um=d,uw=Kn,Zy=Rl,cw=uw("species"),ku=function(y){return Zy>=51||!um(function(){var x=[],C=x.constructor={};return C[cw]=function(){return{foo:1}},x[y](Boolean).foo!==1})},cm=er,q1=d,qy=Cn,pm=Pr,Uy=ci,U1=Ia,gf=Dp,ws=Lp,Bp=vf,el=ku,jc=Kn,zp=Rl,dm=jc("isConcatSpreadable"),G1=zp>=51||!q1(function(){var y=[];return y[dm]=!1,y.concat()[0]!==y}),fm=function(y){if(!pm(y))return!1;var x=y[dm];return x!==void 0?!!x:qy(y)},Gy=!G1||!el("concat");cm({target:"Array",proto:!0,arity:1,forced:Gy},{concat:function(x){var C=Uy(this),M=Bp(C,0),B=0,Z,re,ce,ae,he;for(Z=-1,ce=arguments.length;Zre;)if(ce=B[re++],ce!==ce)return!0}else for(;Z>re;re++)if((y||re in B)&&B[re]===C)return y||re||0;return!y&&-1}},fw={includes:vm(!0),indexOf:vm(!1)},yf={},ot=q,bf=so,gm=St,Ac=fw.indexOf,dn=yf,Os=ot([].push),ym=function(y,x){var C=gm(y),M=0,B=[],Z;for(Z in C)!bf(dn,Z)&&bf(C,Z)&&Os(B,Z);for(;x.length>M;)bf(C,Z=x[M++])&&(~Ac(B,Z)||Os(B,Z));return B},tl=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],xs=ym,Ky=tl,Tu=Object.keys||function(x){return xs(x,Ky)},rl=Ve,wf=Sc,nl=pi,hw=Bt,Yy=St,mw=Tu;hm.f=rl&&!wf?Object.defineProperties:function(x,C){hw(x);for(var M=Yy(C),B=mw(C),Z=B.length,re=0,ce;Z>re;)nl.f(x,ce=B[re++],M[ce]);return x};var lo=Nn,Of=lo("document","documentElement"),vw=_p,xf=bu,bm=vw("keys"),Wl=function(y){return bm[y]||(bm[y]=xf(y))},Hl=Bt,Qy=hm,eb=tl,gw=yf,tb=Of,yw=Gh,J1=Wl,wm=">",Cu="<",Om="prototype",xm="script",rb=J1("IE_PROTO"),_m=function(){},Mu=function(y){return Cu+xm+wm+y+Cu+"/"+xm+wm},nb=function(y){y.write(Mu("")),y.close();var x=y.parentWindow.Object;return y=null,x},X1=function(){var y=yw("iframe"),x="java"+xm+":",C;return y.style.display="none",tb.appendChild(y),y.src=String(x),C=y.contentWindow.document,C.open(),C.write(Mu("document.F=Object")),C.close(),C.F},Wp,_f=function(){try{Wp=new ActiveXObject("htmlfile")}catch{}_f=typeof document<"u"?document.domain&&Wp?nb(Wp):X1():nb(Wp);for(var y=eb.length;y--;)delete _f[Om][eb[y]];return _f()};gw[rb]=!0;var Ka=Object.create||function(x,C){var M;return x!==null?(_m[Om]=Hl(x),M=new _m,_m[Om]=null,M[rb]=x):M=_f(),C===void 0?M:Qy.f(M,C)},_s={},K1=ym,bw=tl,Qo=bw.concat("length","prototype");_s.f=Object.getOwnPropertyNames||function(x){return K1(x,Qo)};var Pa={},Vl=Mc,ww=Ia,Ow=Lp,xw=Array,_w=Math.max,Sm=function(y,x,C){for(var M=ww(y),B=Vl(x,M),Z=Vl(C===void 0?M:C,M),re=xw(_w(Z-B,0)),ce=0;BOr;Or++)if((ce||Or in Ne)&&(Fa=Ne[Or],mi=Pt(Fa,Or,ke),y))if(x)un[Or]=mi;else if(mi)switch(y){case 3:return!0;case 5:return Fa;case 6:return Or;case 2:Cw(un,Fa)}else switch(y){case 4:return!1;case 7:Cw(un,Fa)}return Z?-1:M||B?B:un}},Ef={forEach:Du(0),map:Du(1),filter:Du(2),some:Du(3),every:Du(4),find:Du(5),findIndex:Du(6),filterReject:Du(7)},iv=er,Pm=c,km=Qe,qP=q,jm=Ve,Tm=fo,b_=d,xi=so,Mw=Xn,pb=Bt,db=St,Aw=Ou,UP=Xa,Rw=st,av=Ka,Dw=Tu,sv=_s,fb=Pa,GP=K,Lw=Re,Nw=pi,Fw=hm,Bw=Fe,zw=Se,Ww=ut,Hw=_p,lv=Wl,hb=yf,Dc=bu,w_=Kn,Vw=cr,O_=Yn,JP=ev,mb=Sf,Lu=Ru,Pf=Ef.forEach,ka=lv("hidden"),vb="Symbol",uv="prototype",XP=Lu.set,x_=Lu.getterFor(vb),il=Object[uv],Lc=Pm.Symbol,kf=Lc&&Lc[uv],gb=Pm.RangeError,__=Pm.TypeError,cv=Pm.QObject,yb=Lw.f,Vp=Nw.f,$p=fb.f,gt=Bw.f,$w=qP([].push),ja=Hw("symbols"),Cm=Hw("op-symbols"),Zw=Hw("wks"),bb=!cv||!cv[uv]||!cv[uv].findChild,jf=function(y,x,C){var M=yb(il,x);M&&delete il[x],Vp(y,x,C),M&&y!==il&&Vp(il,x,M)},Mm=jm&&b_(function(){return av(Vp({},"a",{get:function(){return Vp(this,"a",{value:7}).a}})).a!==7})?jf:Vp,Am=function(y,x){var C=ja[y]=av(kf);return XP(C,{type:vb,tag:y,description:x}),jm||(C.description=x),C},pv=function(x,C,M){x===il&&pv(Cm,C,M),pb(x);var B=Aw(C);return pb(M),xi(ja,B)?(M.enumerable?(xi(x,ka)&&x[ka][B]&&(x[ka][B]=!1),M=av(M,{enumerable:Rw(0,!1)})):(xi(x,ka)||Vp(x,ka,Rw(1,{})),x[ka][B]=!0),Mm(x,B,M)):Vp(x,B,M)},Nc=function(x,C){pb(x);var M=db(C),B=Dw(M).concat(I_(M));return Pf(B,function(Z){(!jm||km(wb,M,Z))&&pv(x,Z,M[Z])}),x},qw=function(x,C){return C===void 0?av(x):Nc(av(x),C)},wb=function(x){var C=Aw(x),M=km(gt,this,C);return this===il&&xi(ja,C)&&!xi(Cm,C)?!1:M||!xi(this,C)||!xi(ja,C)||xi(this,ka)&&this[ka][C]?M:!0},Ob=function(x,C){var M=db(x),B=Aw(C);if(!(M===il&&xi(ja,B)&&!xi(Cm,B))){var Z=yb(M,B);return Z&&xi(ja,B)&&!(xi(M,ka)&&M[ka][B])&&(Z.enumerable=!0),Z}},S_=function(x){var C=$p(db(x)),M=[];return Pf(C,function(B){!xi(ja,B)&&!xi(hb,B)&&$w(M,B)}),M},I_=function(y){var x=y===il,C=$p(x?Cm:db(y)),M=[];return Pf(C,function(B){xi(ja,B)&&(!x||xi(il,B))&&$w(M,ja[B])}),M};Tm||(Lc=function(){if(Mw(kf,this))throw new __("Symbol is not a constructor");var x=!arguments.length||arguments[0]===void 0?void 0:UP(arguments[0]),C=Dc(x),M=function(B){var Z=this===void 0?Pm:this;Z===il&&km(M,Cm,B),xi(Z,ka)&&xi(Z[ka],C)&&(Z[ka][C]=!1);var re=Rw(1,B);try{Mm(Z,C,re)}catch(ce){if(!(ce instanceof gb))throw ce;jf(Z,C,re)}};return jm&&bb&&Mm(il,C,{configurable:!0,set:M}),Am(C,x)},kf=Lc[uv],zw(kf,"toString",function(){return x_(this).tag}),zw(Lc,"withoutSetter",function(y){return Am(Dc(y),y)}),Bw.f=wb,Nw.f=pv,Fw.f=Nc,Lw.f=Ob,sv.f=fb.f=S_,GP.f=I_,Vw.f=function(y){return Am(w_(y),y)},jm&&Ww(kf,"description",{configurable:!0,get:function(){return x_(this).description}})),iv({global:!0,constructor:!0,wrap:!0,forced:!Tm,sham:!Tm},{Symbol:Lc}),Pf(Dw(Zw),function(y){O_(y)}),iv({target:vb,stat:!0,forced:!Tm},{useSetter:function(){bb=!0},useSimple:function(){bb=!1}}),iv({target:"Object",stat:!0,forced:!Tm,sham:!jm},{create:qw,defineProperty:pv,defineProperties:Nc,getOwnPropertyDescriptor:Ob}),iv({target:"Object",stat:!0,forced:!Tm},{getOwnPropertyNames:S_}),JP(),mb(Lc,vb),hb[ka]=!0;var KP=fo,Uw=KP&&!!Symbol.for&&!!Symbol.keyFor,E_=er,dv=Nn,YP=so,xb=Xa,P_=_p,fv=Uw,Gw=P_("string-to-symbol-registry"),QP=P_("symbol-to-string-registry");E_({target:"Symbol",stat:!0,forced:!fv},{for:function(y){var x=xb(y);if(YP(Gw,x))return Gw[x];var C=dv("Symbol")(x);return Gw[x]=C,QP[C]=x,C}});var k_=er,ek=so,Jw=ui,j_=Hn,T_=_p,Xw=Uw,C_=T_("symbol-to-string-registry");k_({target:"Symbol",stat:!0,forced:!Xw},{keyFor:function(x){if(!Jw(x))throw new TypeError(j_(x)+" is not a symbol");if(ek(C_,x))return C_[x]}});var tk=q,hv=tk([].slice),M_=q,A_=Cn,rk=Pe,Rm=te,nk=Xa,R_=M_([].push),_b=function(y){if(rk(y))return y;if(A_(y)){for(var x=y.length,C=[],M=0;M=x.length)return y.target=void 0,Wb(void 0,!0);switch(y.kind){case"keys":return Wb(C,!1);case"values":return Wb(x[C],!1)}return Wb([C,x[C]],!1)},"values"),Lf.Arguments=Lf.Array;var Hb={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},mS=Hb,_k=c,Sk=Ea,yO=_a,fi=Lm,vS=Kn,bO=vS("toStringTag");for(var Vb in mS){var wO=_k[Vb],_v=wO&&wO.prototype;_v&&Sk(_v)!==bO&&yO(_v,bO,Vb),fi[Vb]=fi.Array}var ks=iO,OO=ks,Ik=Kn,Ek=pi.f,gS=Ik("metadata"),xO=Function.prototype;xO[gS]===void 0&&Ek(xO,gS,{value:null});var yS=Yn;yS("asyncDispose");var Pk=Yn;Pk("dispose");var kk=Yn;kk("metadata");var bS=OO,wS=bS,jk=Nn,Tk=q,Sv=jk("Symbol"),_O=Sv.keyFor,Ck=Tk(Sv.prototype.valueOf),SO=Sv.isRegisteredSymbol||function(x){try{return _O(Ck(x))!==void 0}catch{return!1}},Mk=er,OS=SO;Mk({target:"Symbol",stat:!0},{isRegisteredSymbol:OS});for(var xS=_p,_S=Nn,SS=q,$b=ui,IS=Kn,Iv=_S("Symbol"),ES=Iv.isWellKnownSymbol,IO=_S("Object","getOwnPropertyNames"),Zb=SS(Iv.prototype.valueOf),EO=xS("wks"),qb=0,PO=IO(Iv),PS=PO.length;qb=Z?y?"":void 0:(re=RS(M,B),re<55296||re>56319||B+1===Z||(ce=RS(M,B+1))<56320||ce>57343?y?Gb(M,B):re:y?DS(M,B,B+2):(re-55296<<10)+(ce-56320)+65536)}},LS={codeAt:TO(!1),charAt:TO(!0)},NS=LS.charAt,Jb=Xa,Xb=Ru,FS=mO,Pv=Df,CO="String Iterator",BS=Xb.set,zk=Xb.getterFor(CO);FS(String,"String",function(y){BS(this,{type:CO,string:Jb(y),index:0})},function(){var x=zk(this),C=x.string,M=x.index,B;return M>=C.length?Pv(void 0,!0):(B=NS(C,M),x.index+=B.length,Pv(B,!1))});var Wk=cr,Hk=Wk.f("iterator"),MO=Hk,AO=MO,Vk=AO,$k=Vk,Zk=$k,RO=Zk,zS=RO,WS=n(zS);function zm(y){"@babel/helpers - typeof";return zm=typeof Ff=="function"&&typeof WS=="symbol"?function(x){return typeof x}:function(x){return x&&typeof Ff=="function"&&x.constructor===Ff&&x!==Ff.prototype?"symbol":typeof x},zm(y)}var Kb=cr,Yb=Kb.f("toPrimitive"),HS=Yb,Mo=HS,ql=Mo,Xp=ql,qk=Xp,VS=qk,Uk=VS,DO=n(Uk);function Gk(y,x){if(zm(y)!=="object"||y===null)return y;var C=y[DO];if(C!==void 0){var M=C.call(y,x||"default");if(zm(M)!=="object")return M;throw new TypeError("@@toPrimitive must return a primitive value.")}return(x==="string"?String:Number)(y)}function Qb(y){var x=Gk(y,"string");return zm(x)==="symbol"?x:String(x)}function Si(y,x){for(var C=0;C=0:ce>ae;ae+=he)ae in re&&(B=C(B,re[ae],ae,Z));return B}},XS={left:JS(!1),right:JS(!0)},oj=d,kv=function(y,x){var C=[][y];return!!C&&oj(function(){C.call(null,x||function(){return 1},1)})},ij=c,aj=te,jv=aj(ij.process)==="process",Tv=er,sj=XS.left,Yp=kv,zu=Rl,lj=jv,KS=!lj&&zu>79&&zu<83,uj=KS||!Yp("reduce");Tv({target:"Array",proto:!0,forced:uj},{reduce:function(x){var C=arguments.length;return sj(this,x,C,C>1?arguments[1]:void 0)}});var YS=Bi,cj=YS("Array","reduce"),pj=Xn,dj=cj,Cv=Array.prototype,QS=function(y){var x=y.reduce;return y===Cv||pj(Cv,y)&&x===Cv.reduce?dj:x},fj=QS,e7=fj,zO=e7,WO=n(zO),hj=er,mj=Ef.filter,vj=ku,gj=vj("filter");hj({target:"Array",proto:!0,forced:!gj},{filter:function(x){return mj(this,x,arguments.length>1?arguments[1]:void 0)}});var yj=Bi,HO=yj("Array","filter"),bj=Xn,Wc=HO,VO=Array.prototype,$O=function(y){var x=y.filter;return y===VO||bj(VO,y)&&x===VO.filter?Wc:x},wj=$O,Oj=wj,xj=Oj,Ii=n(xj),_j=er,Sj=Ef.map,ZO=ku,t7=ZO("map");_j({target:"Array",proto:!0,forced:!t7},{map:function(x){return Sj(this,x,arguments.length>1?arguments[1]:void 0)}});var r7=Bi,n7=r7("Array","map"),Ij=Xn,Ej=n7,Mv=Array.prototype,o7=function(y){var x=y.map;return y===Mv||Ij(Mv,y)&&x===Mv.map?Ej:x},Pj=o7,kj=Pj,qO=kj,ei=n(qO),i7=Cn,Qp=Ia,jj=Dp,UO=xu,GO=function(y,x,C,M,B,Z,re,ce){for(var ae=B,he=0,xe=re?UO(re,ce):!1,Me,ke;he0&&i7(Me)?(ke=Qp(Me),ae=GO(y,x,Me,ke,ae,Z-1)-1):(jj(ae+1),y[ae]=Me),ae++),he++;return ae},a7=GO,JO=er,Tj=a7,Cj=Qi,Mj=ci,s7=Ia,XO=vf;JO({target:"Array",proto:!0},{flatMap:function(x){var C=Mj(this),M=s7(C),B;return Cj(x),B=XO(C,0),B.length=Tj(B,C,C,M,0,1,x,arguments.length>1?arguments[1]:void 0),B}});var KO=Bi,ts=KO("Array","flatMap"),YO=Xn,Aj=ts,QO=Array.prototype,e6=function(y){var x=y.flatMap;return y===QO||YO(QO,y)&&x===QO.flatMap?Aj:x},t6=e6,l7=t6,Rj=l7,r6=n(Rj);function u7(y){return new Dj(y)}var c7=function(){function y(x,C,M){var B,Z,re;t(this,y),sl(this,"_listeners",{add:zc(B=this._add).call(B,this),remove:zc(Z=this._remove).call(Z,this),update:zc(re=this._update).call(re,this)}),this._source=x,this._transformers=C,this._target=M}return Bf(y,[{key:"all",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:"start",value:function(){return this._source.on("add",this._listeners.add),this._source.on("remove",this._listeners.remove),this._source.on("update",this._listeners.update),this}},{key:"stop",value:function(){return this._source.off("add",this._listeners.add),this._source.off("remove",this._listeners.remove),this._source.off("update",this._listeners.update),this}},{key:"_transformItems",value:function(C){var M;return WO(M=this._transformers).call(M,function(B,Z){return Z(B)},C)}},{key:"_add",value:function(C,M){M!=null&&this._target.add(this._transformItems(this._source.get(M.items)))}},{key:"_update",value:function(C,M){M!=null&&this._target.update(this._transformItems(this._source.get(M.items)))}},{key:"_remove",value:function(C,M){M!=null&&this._target.remove(this._transformItems(M.oldData))}}]),y}(),Dj=function(){function y(x){t(this,y),sl(this,"_transformers",[]),this._source=x}return Bf(y,[{key:"filter",value:function(C){return this._transformers.push(function(M){return Ii(M).call(M,C)}),this}},{key:"map",value:function(C){return this._transformers.push(function(M){return ei(M).call(M,C)}),this}},{key:"flatMap",value:function(C){return this._transformers.push(function(M){return r6(M).call(M,C)}),this}},{key:"to",value:function(C){return new c7(this._source,this._transformers,C)}}]),y}(),Lj=Qe,p7=Bt,Nj=bc,r2=function(y,x,C){var M,B;p7(y);try{if(M=Nj(y,"return"),!M){if(x==="throw")throw C;return C}M=Lj(M,y)}catch(Z){B=!0,M=Z}if(x==="throw")throw C;if(B)throw M;return p7(M),C},Av=Bt,n6=r2,o6=function(y,x,C,M){try{return M?x(Av(C)[0],C[1]):x(C)}catch(B){n6(y,"throw",B)}},d7=Kn,f7=Lm,i6=d7("iterator"),Ul=Array.prototype,a6=function(y){return y!==void 0&&(f7.Array===y||Ul[i6]===y)},h7=Ea,m7=bc,js=Er,Ts=Lm,n2=Kn,ed=n2("iterator"),Wu=function(y){if(!js(y))return m7(y,ed)||m7(y,"@@iterator")||Ts[h7(y)]},o2=Qe,Fj=Qi,ln=Bt,zf=Hn,i2=Wu,Hu=TypeError,Vm=function(y,x){var C=arguments.length<2?i2(y):x;if(Fj(C))return ln(o2(C,y));throw new Hu(zf(y)+" is not iterable")},v7=xu,g7=Qe,$m=ci,s6=o6,Wf=a6,Zm=lm,Rv=Ia,Dv=Lp,y7=Vm,Bj=Wu,b7=Array,Lv=function(x){var C=$m(x),M=Zm(this),B=arguments.length,Z=B>1?arguments[1]:void 0,re=Z!==void 0;re&&(Z=v7(Z,B>2?arguments[2]:void 0));var ce=Bj(C),ae=0,he,xe,Me,ke,Ne,Pt;if(ce&&!(this===b7&&Wf(ce)))for(ke=y7(C,ce),Ne=ke.next,xe=M?new this:[];!(Me=g7(Ne,ke)).done;ae++)Pt=re?s6(ke,Z,[Me.value,ae],!0):Me.value,Dv(xe,ae,Pt);else for(he=Rv(C),xe=M?new this(he):b7(he);he>ae;ae++)Pt=re?Z(C[ae],ae):C[ae],Dv(xe,ae,Pt);return xe.length=ae,xe},l6=Kn,w7=l6("iterator"),Wi=!1;try{var ti=0,aa={next:function(){return{done:!!ti++}},return:function(){Wi=!0}};aa[w7]=function(){return this},Array.from(aa,function(){throw 2})}catch{}var qm=function(y,x){try{if(!x&&!Wi)return!1}catch{return!1}var C=!1;try{var M={};M[w7]=function(){return{next:function(){return{done:C=!0}}}},y(M)}catch{}return C},Nv=er,Um=Lv,Gm=qm,Ta=!Gm(function(y){Array.from(y)});Nv({target:"Array",stat:!0,forced:Ta},{from:Um});var Vu=or,td=Vu.Array.from,O7=td,u6=O7,Fv=u6,ll=n(Fv),a2=Wu,Hf=a2,s2=Hf,c6=s2,Jm=c6,ul=Jm,Ca=ul,Xm=Ca,$u=Xm,Hc=n($u),x7=$u,l2=n(x7),Zu=er,Gl=Cn;Zu({target:"Array",stat:!0},{isArray:Gl});var Vf=or,Bv=Vf.Array.isArray,$f=Bv,Vc=$f,_7=Vc,S7=_7,u2=S7,rd=u2,Km=rd,qu=n(Km);function Ym(y){if(qu(y))return y}var I7=Ve,p6=Cn,zj=TypeError,zv=Object.getOwnPropertyDescriptor,Wv=I7&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(y){return y instanceof TypeError}}(),E7=Wv?function(y,x){if(p6(y)&&!zv(y,"length").writable)throw new zj("Cannot set read only .length");return y.length=x}:function(y,x){return y.length=x},sa=er,ri=ci,rs=Ia,Hv=E7,Uu=Dp,cl=d,Vv=cl(function(){return[].push.call({length:4294967296},1)!==4294967297}),$c=function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(y){return y instanceof TypeError}},Jl=Vv||!$c();sa({target:"Array",proto:!0,arity:1,forced:Jl},{push:function(x){var C=ri(this),M=rs(C),B=arguments.length;Uu(M+B);for(var Z=0;Zy.length)&&(x=y.length);for(var C=0,M=new Array(x);C1?arguments[1]:void 0)},V7=er,R6=A6;V7({target:"Array",proto:!0,forced:[].forEach!==R6},{forEach:R6});var Yj=Bi,rg=Yj("Array","forEach"),D6=rg,Qj=D6,eT=Ea,tT=so,Xf=Xn,rT=Qj,w2=Array.prototype,$7={DOMTokenList:!0,NodeList:!0},L6=function(y){var x=y.forEach;return y===w2||Xf(w2,y)&&x===w2.forEach||tT($7,eT(y))?rT:x},ng=L6,eu=n(ng),Vo=er,Z7=q,cd=Cn,a0=Z7([].reverse),$r=[1,2];Vo({target:"Array",proto:!0,forced:String($r)===String($r.reverse())},{reverse:function(){return cd(this)&&(this.length=this.length),a0(this)}});var sr=Bi,ns=sr("Array","reverse"),hi=Xn,pd=ns,s0=Array.prototype,dd=function(y){var x=y.reverse;return y===s0||hi(s0,y)&&x===s0.reverse?pd:x},nT=dd,N6=nT,oT=N6,q7=n(oT),An=Hn,U7=TypeError,Kf=function(y,x){if(!delete y[x])throw new U7("Cannot delete property "+An(x)+" of "+An(y))},O2=er,l0=ci,Ju=Mc,la=tm,x2=Ia,G7=E7,J7=Dp,F6=vf,X7=Lp,u0=Kf,iT=ku,aT=iT("splice"),B6=Math.max,z6=Math.min;O2({target:"Array",proto:!0,forced:!aT},{splice:function(x,C){var M=l0(this),B=x2(M),Z=Ju(x,B),re=arguments.length,ce,ae,he,xe,Me,ke;for(re===0?ce=ae=0:re===1?(ce=0,ae=B-Z):(ce=re-2,ae=z6(B6(la(C),0),B-Z)),J7(B+ce-ae),he=F6(M,ae),xe=0;xeB-ae+ce;xe--)u0(M,xe-1)}else if(ce>ae)for(xe=B-ae;xe>Z;xe--)Me=xe+ae-1,ke=xe+ce-1,Me in M?M[ke]=M[Me]:u0(M,ke);for(xe=0;xeZ;)for(var ae=$6(arguments[Z++]),he=re?dT(V6(ae),re(ae)):V6(ae),xe=he.length,Me=0,ke;xe>Me;)ke=he[Me++],(!H6||cT(ce,ae,ke))&&(M[ke]=ae[ke]);return M}:Yf,fT=er,Qf=E2;fT({target:"Object",stat:!0,arity:2,forced:Object.assign!==Qf},{assign:Qf});var ig=or,r8=ig.Object.assign,Z6=r8,q6=Z6,n8=q6,U6=n(n8),G6=er,o8=d,c0=ci,ag=Gp,J6=Ab,p0=o8(function(){ag(1)});G6({target:"Object",stat:!0,forced:p0,sham:!J6},{getPrototypeOf:function(x){return ag(c0(x))}});var X6=or,P2=X6.Object.getPrototypeOf,hT=P2,mT=hT,qc=er,i8=Ve,vT=Ka;qc({target:"Object",stat:!0,sham:!i8},{create:vT});var K6=or,gT=K6.Object,yT=function(x,C){return gT.create(x,C)},bT=yT,a8=bT,Y6=a8,s8=n(Y6),k2=or,l8=D;k2.JSON||(k2.JSON={stringify:JSON.stringify});var j2=function(x,C,M){return l8(k2.JSON.stringify,null,arguments)},u8=j2,Q6=u8,T2=Q6,C2=n(T2),e4=typeof Bun=="function"&&Bun&&typeof Bun.version=="string",d0=TypeError,Xu=function(y,x){if(yC,re=OT(M)?M:ST(M),ce=Z?_T(arguments,C):[],ae=Z?function(){wT(re,this,ce)}:re;return x?y(ae,B):y(ae)}:y},r4=er,n4=c,d8=p8,o4=d8(n4.setInterval,!0);r4({global:!0,bind:!0,forced:n4.setInterval!==o4},{setInterval:o4});var h0=er,i4=c,m0=p8,Rs=m0(i4.setTimeout,!0);h0({global:!0,bind:!0,forced:i4.setTimeout!==Rs},{setTimeout:Rs});var a4=or,f8=a4.setTimeout,ET=f8,sg=n(ET),s4={exports:{}};(function(y){function x(M){if(M)return C(M);this._callbacks=new Map}function C(M){return Object.assign(M,x.prototype),M._callbacks=new Map,M}x.prototype.on=function(M,B){let Z=this._callbacks.get(M)??[];return Z.push(B),this._callbacks.set(M,Z),this},x.prototype.once=function(M,B){let Z=(...re)=>{this.off(M,Z),B.apply(this,re)};return Z.fn=B,this.on(M,Z),this},x.prototype.off=function(M,B){if(M===void 0&&B===void 0)return this._callbacks.clear(),this;if(B===void 0)return this._callbacks.delete(M),this;let Z=this._callbacks.get(M);if(Z){for(let[re,ce]of Z.entries())if(ce===B||ce.fn===B){Z.splice(re,1);break}Z.length===0?this._callbacks.delete(M):this._callbacks.set(M,Z)}return this},x.prototype.emit=function(M,...B){let Z=this._callbacks.get(M);if(Z){let re=[...Z];for(let ce of re)ce.apply(this,B)}return this},x.prototype.listeners=function(M){return this._callbacks.get(M)??[]},x.prototype.listenerCount=function(M){if(M)return this.listeners(M).length;let B=0;for(let Z of this._callbacks.values())B+=Z.length;return B},x.prototype.hasListeners=function(M){return this.listenerCount(M)>0},x.prototype.addEventListener=x.prototype.on,x.prototype.removeListener=x.prototype.off,x.prototype.removeEventListener=x.prototype.off,x.prototype.removeAllListeners=x.prototype.off,y.exports=x})(s4);var PT=s4.exports,Ku=n(PT);function Ei(){return Ei=Object.assign||function(y){for(var x=1;x"u"?{style:{}}:document.createElement("div"),fd="function",eh=Math.round,th=Math.abs,A2=Date.now;function v0(y,x){for(var C,M,B=x[0].toUpperCase()+x.slice(1),Z=0;Z"u"?Yu={}:Yu=window;var c4=v0(u4.style,"touchAction"),p4=c4!==void 0;function m8(){if(!p4)return!1;var y={},x=Yu.CSS&&Yu.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(C){return y[C]=x?Yu.CSS.supports("touch-action",C):!0}),y}var lg="compute",Qu="auto",R2="manipulation",ec="none",g0="pan-x",ug="pan-y",Ds=m8(),v8=/mobile|tablet|ip(ad|hone|od)|android/i,g8="ontouchstart"in Yu,cg=v0(Yu,"PointerEvent")!==void 0,D2=g8&&v8.test(navigator.userAgent),rh="touch",d4="pen",hd="mouse",y0="kinect",L2=25,ca=1,md=2,$o=4,Aa=8,pg=1,b0=2,vd=4,nh=8,oh=16,pa=b0|vd,Ls=nh|oh,N2=pa|Ls,y8=["x","y"],ih=["clientX","clientY"];function Gc(y,x,C){var M;if(y)if(y.forEach)y.forEach(x,C);else if(y.length!==void 0)for(M=0;M-1}function f4(y){if(ah(y,ec))return ec;var x=ah(y,g0),C=ah(y,ug);return x&&C?ec:x||C?x?g0:ug:ah(y,R2)?R2:Qu}var B2=function(){function y(C,M){this.manager=C,this.set(M)}var x=y.prototype;return x.set=function(M){M===lg&&(M=this.compute()),p4&&this.manager.element.style&&Ds[M]&&(this.manager.element.style[c4]=M),this.actions=M.toLowerCase().trim()},x.update=function(){this.set(this.manager.options.touchAction)},x.compute=function(){var M=[];return Gc(this.manager.recognizers,function(B){F2(B.options.enable,[B])&&(M=M.concat(B.getTouchAction()))}),f4(M.join(" "))},x.preventDefaults=function(M){var B=M.srcEvent,Z=M.offsetDirection;if(this.manager.session.prevented){B.preventDefault();return}var re=this.actions,ce=ah(re,ec)&&!Ds[ec],ae=ah(re,ug)&&!Ds[ug],he=ah(re,g0)&&!Ds[g0];if(ce){var xe=M.pointers.length===1,Me=M.distance<2,ke=M.deltaTime<250;if(xe&&Me&&ke)return}if(!(he&&ae)&&(ce||ae&&Z&pa||he&&Z&Ls))return this.preventSrc(B)},x.preventSrc=function(M){this.manager.session.prevented=!0,M.preventDefault()},y}();function w0(y,x){for(;y;){if(y===x)return!0;y=y.parentNode}return!1}function h4(y){var x=y.length;if(x===1)return{x:eh(y[0].clientX),y:eh(y[0].clientY)};for(var C=0,M=0,B=0;B=th(x)?y<0?b0:vd:x<0?nh:oh}function kT(y,x){var C=x.center,M=y.offsetDelta||{},B=y.prevDelta||{},Z=y.prevInput||{};(x.eventType===ca||Z.eventType===$o)&&(B=y.prevDelta={x:Z.deltaX||0,y:Z.deltaY||0},M=y.offsetDelta={x:C.x,y:C.y}),x.deltaX=B.x+(C.x-M.x),x.deltaY=B.y+(C.y-M.y)}function W2(y,x,C){return{x:x/y||0,y:C/y||0}}function jT(y,x){return z2(x[0],x[1],ih)/z2(y[0],y[1],ih)}function TT(y,x){return m4(x[1],x[0],ih)+m4(y[1],y[0],ih)}function O8(y,x){var C=y.lastInterval||x,M=x.timeStamp-C.timeStamp,B,Z,re,ce;if(x.eventType!==Aa&&(M>L2||C.velocity===void 0)){var ae=x.deltaX-C.deltaX,he=x.deltaY-C.deltaY,xe=W2(M,ae,he);Z=xe.x,re=xe.y,B=th(xe.x)>th(xe.y)?xe.x:xe.y,ce=w8(ae,he),y.lastInterval=x}else B=C.velocity,Z=C.velocityX,re=C.velocityY,ce=C.direction;x.velocity=B,x.velocityX=Z,x.velocityY=re,x.direction=ce}function CT(y,x){var C=y.session,M=x.pointers,B=M.length;C.firstInput||(C.firstInput=b8(x)),B>1&&!C.firstMultiple?C.firstMultiple=b8(x):B===1&&(C.firstMultiple=!1);var Z=C.firstInput,re=C.firstMultiple,ce=re?re.center:Z.center,ae=x.center=h4(M);x.timeStamp=A2(),x.deltaTime=x.timeStamp-Z.timeStamp,x.angle=m4(ce,ae),x.distance=z2(ce,ae),kT(C,x),x.offsetDirection=w8(x.deltaX,x.deltaY);var he=W2(x.deltaTime,x.deltaX,x.deltaY);x.overallVelocityX=he.x,x.overallVelocityY=he.y,x.overallVelocity=th(he.x)>th(he.y)?he.x:he.y,x.scale=re?jT(re.pointers,M):1,x.rotation=re?TT(re.pointers,M):0,x.maxPointers=C.prevInput?x.pointers.length>C.prevInput.maxPointers?x.pointers.length:C.prevInput.maxPointers:x.pointers.length,O8(C,x);var xe=y.element,Me=x.srcEvent,ke;Me.composedPath?ke=Me.composedPath()[0]:Me.path?ke=Me.path[0]:ke=Me.target,w0(ke,xe)&&(xe=ke),x.target=xe}function x8(y,x,C){var M=C.pointers.length,B=C.changedPointers.length,Z=x&ca&&M-B===0,re=x&($o|Aa)&&M-B===0;C.isFirst=!!Z,C.isFinal=!!re,Z&&(y.session={}),C.eventType=x,CT(y,C),y.emit("hammer.input",C),y.recognize(C),y.session.prevInput=C}function O0(y){return y.trim().split(/\s+/g)}function dg(y,x,C){Gc(O0(x),function(M){y.addEventListener(M,C,!1)})}function Jc(y,x,C){Gc(O0(x),function(M){y.removeEventListener(M,C,!1)})}function v4(y){var x=y.ownerDocument||y;return x.defaultView||x.parentWindow||window}var x0=function(){function y(C,M){var B=this;this.manager=C,this.callback=M,this.element=C.element,this.target=C.options.inputTarget,this.domHandler=function(Z){F2(C.options.enable,[C])&&B.handler(Z)},this.init()}var x=y.prototype;return x.handler=function(){},x.init=function(){this.evEl&&dg(this.element,this.evEl,this.domHandler),this.evTarget&&dg(this.target,this.evTarget,this.domHandler),this.evWin&&dg(v4(this.element),this.evWin,this.domHandler)},x.destroy=function(){this.evEl&&Jc(this.element,this.evEl,this.domHandler),this.evTarget&&Jc(this.target,this.evTarget,this.domHandler),this.evWin&&Jc(v4(this.element),this.evWin,this.domHandler)},y}();function sh(y,x,C){if(y.indexOf&&!C)return y.indexOf(x);for(var M=0;Mae[x]}):M=M.sort()),M}var RT={touchstart:ca,touchmove:md,touchend:$o,touchcancel:Aa},S8="touchstart touchmove touchend touchcancel",hg=function(y){ua(x,y);function x(){var M;return x.prototype.evTarget=S8,M=y.apply(this,arguments)||this,M.targetIds={},M}var C=x.prototype;return C.handler=function(B){var Z=RT[B.type],re=DT.call(this,B,Z);re&&this.callback(this.manager,Z,{pointers:re[0],changedPointers:re[1],pointerType:rh,srcEvent:B})},x}(x0);function DT(y,x){var C=fg(y.touches),M=this.targetIds;if(x&(ca|md)&&C.length===1)return M[C[0].identifier]=!0,[C,C];var B,Z,re=fg(y.changedTouches),ce=[],ae=this.target;if(Z=C.filter(function(he){return w0(he.target,ae)}),x===ca)for(B=0;B-1&&B.splice(ce,1)};setTimeout(Z,Xe)}}function U2(y,x){y&ca?(this.primaryTouch=x.changedPointers[0].identifier,q2.call(this,x)):y&($o|Aa)&&q2.call(this,x)}function y4(y){for(var x=y.srcEvent.clientX,C=y.srcEvent.clientY,M=0;M-1&&this.requireFail.splice(B,1),this},x.hasRequireFailures=function(){return this.requireFail.length>0},x.canRecognizeWith=function(M){return!!this.simultaneous[M.id]},x.emit=function(M){var B=this,Z=this.state;function re(ce){B.manager.emit(ce,M)}Z=gd&&re(B.options.event+j8(Z))},x.tryEmit=function(M){if(this.canEmit())return this.emit(M);this.state=_o},x.canEmit=function(){for(var M=0;MZ.threshold&&ae&Z.direction},C.attrTest=function(B){return Xc.prototype.attrTest.call(this,B)&&(this.state&Pi||!(this.state&Pi)&&this.directionTest(B))},C.emit=function(B){this.pX=B.deltaX,this.pY=B.deltaY;var Z=T8(B.direction);Z&&(B.additionalEvent=this.options.event+Z),y.prototype.emit.call(this,B)},x}(Xc),C8=function(y){ua(x,y);function x(M){return M===void 0&&(M={}),y.call(this,Ei({event:"swipe",threshold:10,velocity:.3,direction:pa|Ls,pointers:1},M))||this}var C=x.prototype;return C.getTouchAction=function(){return b4.prototype.getTouchAction.call(this)},C.attrTest=function(B){var Z=this.options.direction,re;return Z&(pa|Ls)?re=B.overallVelocity:Z&pa?re=B.overallVelocityX:Z&Ls&&(re=B.overallVelocityY),y.prototype.attrTest.call(this,B)&&Z&B.offsetDirection&&B.distance>this.options.threshold&&B.maxPointers===this.options.pointers&&th(re)>this.options.velocity&&B.eventType&$o},C.emit=function(B){var Z=T8(B.offsetDirection);Z&&this.manager.emit(this.options.event+Z,B),this.manager.emit(this.options.event,B)},x}(Xc),M8=function(y){ua(x,y);function x(M){return M===void 0&&(M={}),y.call(this,Ei({event:"pinch",threshold:0,pointers:2},M))||this}var C=x.prototype;return C.getTouchAction=function(){return[ec]},C.attrTest=function(B){return y.prototype.attrTest.call(this,B)&&(Math.abs(B.scale-1)>this.options.threshold||this.state&Pi)},C.emit=function(B){if(B.scale!==1){var Z=B.scale<1?"in":"out";B.additionalEvent=this.options.event+Z}y.prototype.emit.call(this,B)},x}(Xc),A8=function(y){ua(x,y);function x(M){return M===void 0&&(M={}),y.call(this,Ei({event:"rotate",threshold:0,pointers:2},M))||this}var C=x.prototype;return C.getTouchAction=function(){return[ec]},C.attrTest=function(B){return y.prototype.attrTest.call(this,B)&&(Math.abs(B.rotation)>this.options.threshold||this.state&Pi)},x}(Xc),R8=function(y){ua(x,y);function x(M){var B;return M===void 0&&(M={}),B=y.call(this,Ei({event:"press",pointers:1,time:251,threshold:9},M))||this,B._timer=null,B._input=null,B}var C=x.prototype;return C.getTouchAction=function(){return[Qu]},C.process=function(B){var Z=this,re=this.options,ce=B.pointers.length===re.pointers,ae=B.distancere.time;if(this._input=B,!ae||!ce||B.eventType&($o|Aa)&&!he)this.reset();else if(B.eventType&ca)this.reset(),this._timer=setTimeout(function(){Z.state=dl,Z.tryEmit()},re.time);else if(B.eventType&$o)return dl;return _o},C.reset=function(){clearTimeout(this._timer)},C.emit=function(B){this.state===dl&&(B&&B.eventType&$o?this.manager.emit(this.options.event+"up",B):(this._input.timeStamp=A2(),this.manager.emit(this.options.event,this._input)))},x}(fl),J2={domEvents:!1,touchAction:lg,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},D8=[[A8,{enable:!1}],[M8,{enable:!1},["rotate"]],[C8,{direction:pa}],[b4,{direction:pa},["swipe"]],[mg],[mg,{event:"doubletap",taps:2},["tap"]],[R8]],L8=1,N8=2;function X2(y,x){var C=y.element;if(C.style){var M;Gc(y.options.cssProps,function(B,Z){M=v0(C.style,Z),x?(y.oldCssProps[M]=C.style[M],C.style[M]=B):C.style[M]=y.oldCssProps[M]||""}),x||(y.oldCssProps={})}}function NT(y,x){var C=document.createEvent("Event");C.initEvent(y,!0,!0),C.gesture=x,x.target.dispatchEvent(C)}var w4=function(){function y(C,M){var B=this;this.options=Uc({},J2,M||{}),this.options.inputTarget=this.options.inputTarget||C,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=C,this.input=Bn(this),this.touchAction=new B2(this,this.options.touchAction),X2(this,!0),Gc(this.options.recognizers,function(Z){var re=B.add(new Z[0](Z[1]));Z[2]&&re.recognizeWith(Z[2]),Z[3]&&re.requireFailure(Z[3])},this)}var x=y.prototype;return x.set=function(M){return Uc(this.options,M),M.touchAction&&this.touchAction.update(),M.inputTarget&&(this.input.destroy(),this.input.target=M.inputTarget,this.input.init()),this},x.stop=function(M){this.session.stopped=M?N8:L8},x.recognize=function(M){var B=this.session;if(!B.stopped){this.touchAction.preventDefaults(M);var Z,re=this.recognizers,ce=B.curRecognizer;(!ce||ce&&ce.state&dl)&&(B.curRecognizer=null,ce=null);for(var ae=0;ae\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",re=window.console&&(window.console.warn||window.console.log);return re&&re.call(window.console,M,Z),y.apply(this,arguments)}}var z8=B8(function(y,x,C){for(var M=Object.keys(x),B=0;B=y.length?{done:!0}:{done:!1,value:y[M++]}},e:function(me){throw me},f:B}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var Z=!0,re=!1,ce;return{s:function(){C=C.call(y)},n:function(){var me=C.next();return Z=me.done,me},e:function(me){re=!0,ce=me},f:function(){try{!Z&&C.return!=null&&C.return()}finally{if(re)throw ce}}}}function V8(y,x){var C;if(y){if(typeof y=="string")return x4(y,x);var M=Gf(C=Object.prototype.toString.call(y)).call(C,8,-1);if(M==="Object"&&y.constructor&&(M=y.constructor.name),M==="Map"||M==="Set")return ll(y);if(M==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(M))return x4(y,x)}}function x4(y,x){(x==null||x>y.length)&&(x=y.length);for(var C=0,M=new Array(x);C1?C-1:0),B=1;B2){var M;return X2.apply(void 0,i0(M=[_4(x[0],x[1])]).call(M,Wi(Gf(x).call(x,2))))}var B=x[0],Z=x[1];if(B instanceof Date&&Z instanceof Date)return B.setTime(Z.getTime()),B;var re=H8(j6(Z)),ce;try{for(re.s();!(ce=re.n()).done;){var ae=ce.value;Object.prototype.propertyIsEnumerable.call(Z,ae)&&(Z[ae]===Ra?delete B[ae]:B[ae]!==null&&Z[ae]!==null&&typeof B[ae]=="object"&&typeof Z[ae]=="object"&&!Hi(B[ae])&&!Hi(Z[ae])?B[ae]=X2(B[ae],Z[ae]):B[ae]=S4(Z[ae]))}}catch(me){re.e(me)}finally{re.f()}return B}function S4(y){return Hi(y)?ei(y).call(y,function(x){return S4(x)}):typeof y=="object"&&y!==null?y instanceof Date?new Date(y.getTime()):X2({},y):y}function $8(y){for(var x=0,C=M6(y);xre;)ae=M(C,ce=B[re++]),ae!==void 0&&sI(Z,ce,ae);return Z}});var lI=or,bd=lI.Object.getOwnPropertyDescriptors,gg=bd,lC=gg,uC=lC,Pi=n(uC),A4={exports:{}},P0=er,Da=He,uI=hm.f;P0({target:"Object",stat:!0,forced:Object.defineProperties!==uI,sham:!Da},{defineProperties:uI});var cC=or,r5=cC.Object,R4=A4.exports=function(x,C){return r5.defineProperties(x,C)};r5.defineProperties.sham&&(R4.sham=!0);var pC=A4.exports,n5=pC,cI=n5,dC=cI,fC=n(dC),o5=Mp,pI=n(o5);function k0(y){if(y===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return y}var wd=a8,hC=wd,ch=hC,mC=ch,D4=mC,i5=n(D4),L4=er,vC=yv;L4({target:"Object",stat:!0},{setPrototypeOf:vC});var gC=or,j0=gC.Object.setPrototypeOf,yC=j0,dI=yC,Vi=dI,fI=Vi,bC=fI,N4=bC,F4=N4,a5=n(F4),ph=qS,s5=ph,hl=s5,T0=hl,B4=T0,z4=n(B4);function yg(y,x){var C;return yg=a5?z4(C=a5).call(C):function(B,Z){return B.__proto__=Z,B},yg(y,x)}function dh(y,x){if(typeof x!="function"&&x!==null)throw new TypeError("Super expression must either be null or a function");y.prototype=i5(x&&x.prototype,{constructor:{value:y,writable:!0,configurable:!0}}),Qh(y,"prototype",{writable:!1}),x&&yg(y,x)}function l5(y,x){if(x&&(zm(x)==="object"||typeof x=="function"))return x;if(x!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return k0(y)}var wC=mT,hI=wC,mI=hI,bg=mI,wg=bg,vI=n(wg);function fh(y){var x;return fh=a5?z4(x=vI).call(x):function(M){return M.__proto__||vI(M)},fh(y)}var g={exports:{}},S={exports:{}};(function(y){var x=kO,C=zS;function M(B){"@babel/helpers - typeof";return y.exports=M=typeof x=="function"&&typeof C=="symbol"?function(Z){return typeof Z}:function(Z){return Z&&typeof x=="function"&&Z.constructor===x&&Z!==x.prototype?"symbol":typeof Z},y.exports.__esModule=!0,y.exports.default=y.exports,M(B)}y.exports=M,y.exports.__esModule=!0,y.exports.default=y.exports})(S);var E=S.exports,j=L6,W=j,U=W,ie=U,oe=ie,ue=so,we=Ql,Ee=Ve,je=pi,Ze=function(y,x,C){for(var M=we(x),B=je.f,Z=Ee.f,re=0;reMe;Me++)if(Le=Gr(y[Me]),Le&&_g(d5,Le))return Le;return new vh(!1)}me=OC(y,Oe)}for(Pt=Z?y.next:me.next;!(br=mh(Pt,me)).done;){try{Le=Gr(br.value)}catch(un){yI(me,"throw",un)}if(typeof Le=="object"&&Le&&_g(d5,Le))return Le}return new vh(!1)},ct=Xa,pt=function(y,x){return y===void 0?arguments.length<2?"":x:ct(y)},Fr=er,rr=Xn,Zn=Gp,Io=yv,Na=Ze,as=Ka,xd=_a,_d=st,gh=_t,H$=u5,V$=nt,C0=pt,$$=Kn,SY=$$("toStringTag"),bI=Error,IY=[].push,f5=function(x,C){var M=rr(wI,this),B;Io?B=Io(new bI,M?Zn(this):wI):(B=M?this:as(wI),xd(B,SY,"Error")),C!==void 0&&xd(B,"message",C0(C)),H$(B,f5,B.stack,1),arguments.length>2&&gh(B,arguments[2]);var Z=[];return V$(x,IY,{that:Z}),xd(B,"errors",Z),B};Io?Io(f5,bI):Na(f5,bI,{name:!0});var wI=f5.prototype=as(bI.prototype,{constructor:_d(1,f5),message:_d(1,""),name:_d(1,"AggregateError")});Fr({global:!0,constructor:!0,arity:2},{AggregateError:f5});var EY=Nn,PY=ut,kY=Kn,xC=He,Z$=kY("species"),h5=function(y){var x=EY(y);xC&&x&&!x[Z$]&&PY(x,Z$,{configurable:!0,get:function(){return this}})},jY=Xn,TY=TypeError,_C=function(y,x){if(jY(x,y))return y;throw new TY("Incorrect invocation")},q$=Bt,CY=mg,U$=Er,MY=Kn,AY=MY("species"),G$=function(y,x){var C=q$(y).constructor,M;return C===void 0||U$(M=q$(C)[AY])?x:CY(M)},RY=ya,J$=/(?:ipad|iphone|ipod).*applewebkit/i.test(RY),tu=c,SC=D,DY=xu,IC=Pe,X$=so,EC=d,K$=Of,LY=fv,Y$=Gh,NY=Xu,FY=J$,BY=kv,V4=tu.setImmediate,PC=tu.clearImmediate,Q$=tu.process,kC=tu.Dispatch,eZ=tu.Function,tZ=tu.MessageChannel,rZ=tu.String,jC=0,$4={},nZ="onreadystatechange",m5,Sg,ft,lt;EC(function(){m5=tu.location});var Fe=function(y){if(X$($4,y)){var x=$4[y];delete $4[y],x()}},Ig=function(y){return function(){Fe(y)}},Yt=function(y){Fe(y.data)},OI=function(y){tu.postMessage(rZ(y),m5.protocol+"//"+m5.host)};(!V4||!PC)&&(V4=function(x){NY(arguments.length,1);var C=IC(x)?x:eZ(x),M=LY(arguments,1);return $4[++jC]=function(){SC(C,void 0,M)},Sg(jC),jC},PC=function(x){delete $4[x]},BY?Sg=function(y){Q$.nextTick(Ig(y))}:kC&&kC.now?Sg=function(y){kC.now(Ig(y))}:tZ&&!FY?(ft=new tZ,lt=ft.port2,ft.port1.onmessage=Yt,Sg=DY(lt.postMessage,lt)):tu.addEventListener&&IC(tu.postMessage)&&!tu.importScripts&&m5&&m5.protocol!=="file:"&&!EC(OI)?(Sg=OI,tu.addEventListener("message",Yt,!1)):nZ in Y$("script")?Sg=function(y){K$.appendChild(Y$("script"))[nZ]=function(){K$.removeChild(this),Fe(y)}}:Sg=function(y){setTimeout(Ig(y),0)});var xI={set:V4,clear:PC},TC=function(){this.head=null,this.tail=null};TC.prototype={add:function(y){var x={item:y,next:null},C=this.tail;C?C.next=x:this.head=x,this.tail=x},get:function(){var y=this.head;if(y){var x=this.head=y.next;return x===null&&(this.tail=null),y.item}}};var _I=TC,oZ=ya,zY=/ipad|iphone|ipod/i.test(oZ)&&typeof Pebble<"u",WY=ya,HY=/web0s(?!.*chrome)/i.test(WY),Ft=c,iZ=xu,p=Ve.f,a=xI.set,s=_I,u=J$,f=zY,m=HY,b=kv,P=Ft.MutationObserver||Ft.WebKitMutationObserver,k=Ft.document,V=Ft.process,G=Ft.Promise,X=p(Ft,"queueMicrotask"),se=X&&X.value,ve,ge,xe,Re,Ue;if(!se){var et=new s,bt=function(){var y,x;for(b&&(y=V.domain)&&y.exit();x=et.get();)try{x()}catch(C){throw et.head&&ve(),C}y&&y.enter()};!u&&!b&&!m&&P&&k?(ge=!0,xe=k.createTextNode(""),new P(bt).observe(xe,{characterData:!0}),ve=function(){xe.data=ge=!ge}):!f&&G&&G.resolve?(Re=G.resolve(void 0),Re.constructor=G,Ue=iZ(Re.then,Re),ve=function(){Ue(bt)}):b?ve=function(){V.nextTick(bt)}:(a=iZ(a,Ft),ve=function(){a(bt)}),se=function(y){et.head||ve(),et.add(y)}}var It=se,fr=function(y,x){try{arguments.length===1?console.error(y):console.error(y,x)}catch{}},jr=function(y){try{return{error:!1,value:y()}}catch(x){return{error:!0,value:x}}},Br=c,gr=Br.Promise,tr=typeof Deno=="object"&&Deno&&typeof Deno.version=="object",Qn=tr,yn=kv,oo=!Qn&&!yn&&typeof window=="object"&&typeof document=="object",Ao=c,Eo=gr,tc=Pe,$i=Ys,SI=am,SRe=Kn,IRe=oo,ERe=tr,VY=Rl,Eve=Eo&&Eo.prototype,PRe=SRe("species"),$Y=!1,Pve=tc(Ao.PromiseRejectionEvent),kRe=$i("Promise",function(){var y=SI(Eo),x=y!==String(Eo);if(!x&&VY===66||!(Eve.catch&&Eve.finally))return!0;if(!VY||VY<51||!/native code/.test(y)){var C=new Eo(function(Z){Z(1)}),M=function(Z){Z(function(){},function(){})},B=C.constructor={};if(B[PRe]=M,$Y=C.then(function(){})instanceof M,!$Y)return!0}return!x&&(IRe||ERe)&&!Pve}),CC={CONSTRUCTOR:kRe,REJECTION_EVENT:Pve,SUBCLASSING:$Y},M0={},kve=Qi,jRe=TypeError,TRe=function(y){var x,C;this.promise=new y(function(M,B){if(x!==void 0||C!==void 0)throw new jRe("Bad Promise constructor");x=M,C=B}),this.resolve=kve(x),this.reject=kve(C)};M0.f=function(y){return new TRe(y)};var CRe=er,aZ=kv,v5=c,MC=Qe,MRe=_e,ARe=Sf,RRe=h5,DRe=Qi,ZY=Pe,LRe=Pr,NRe=_C,FRe=G$,jve=xI.set,qY=It,BRe=fr,zRe=jr,WRe=_I,Tve=Ru,UY=gr,GY=CC,Cve=M0,sZ="Promise",Mve=GY.CONSTRUCTOR,HRe=GY.REJECTION_EVENT;GY.SUBCLASSING;var JY=Tve.getterFor(sZ),VRe=Tve.set,$Re=UY&&UY.prototype,II=UY,XY=$Re,Ave=v5.TypeError,KY=v5.document,YY=v5.process,QY=Cve.f,ZRe=QY,qRe=!!(KY&&KY.createEvent&&v5.dispatchEvent),Rve="unhandledrejection",URe="rejectionhandled",Dve=0,Lve=1,GRe=2,eQ=1,Nve=2,lZ,Fve,JRe,Bve=function(y){var x;return LRe(y)&&ZY(x=y.then)?x:!1},zve=function(y,x){var C=x.value,M=x.state===Lve,B=M?y.ok:y.fail,Z=y.resolve,re=y.reject,ce=y.domain,ae,me,Oe;try{B?(M||(x.rejection===Nve&&KRe(x),x.rejection=eQ),B===!0?ae=C:(ce&&ce.enter(),ae=B(C),ce&&(ce.exit(),Oe=!0)),ae===y.promise?re(new Ave("Promise-chain cycle")):(me=Bve(ae))?MC(me,ae,Z,re):Z(ae)):re(C)}catch(Me){ce&&!Oe&&ce.exit(),re(Me)}},Wve=function(y,x){y.notified||(y.notified=!0,qY(function(){for(var C=y.reactions,M;M=C.get();)zve(M,y);y.notified=!1,x&&!y.rejection&&XRe(y)}))},Hve=function(y,x,C){var M,B;qRe?(M=KY.createEvent("Event"),M.promise=x,M.reason=C,M.initEvent(y,!1,!0),v5.dispatchEvent(M)):M={promise:x,reason:C},!HRe&&(B=v5["on"+y])?B(M):y===Rve&&BRe("Unhandled promise rejection",C)},XRe=function(y){MC(jve,v5,function(){var x=y.facade,C=y.value,M=Vve(y),B;if(M&&(B=zRe(function(){aZ?YY.emit("unhandledRejection",C,x):Hve(Rve,x,C)}),y.rejection=aZ||Vve(y)?Nve:eQ,B.error))throw B.value})},Vve=function(y){return y.rejection!==eQ&&!y.parent},KRe=function(y){MC(jve,v5,function(){var x=y.facade;aZ?YY.emit("rejectionHandled",x):Hve(URe,x,y.value)})},EI=function(y,x,C){return function(M){y(x,M,C)}},PI=function(y,x,C){y.done||(y.done=!0,C&&(y=C),y.value=x,y.state=GRe,Wve(y,!0))},tQ=function(y,x,C){if(!y.done){y.done=!0,C&&(y=C);try{if(y.facade===x)throw new Ave("Promise can't be resolved itself");var M=Bve(x);M?qY(function(){var B={done:!1};try{MC(M,x,EI(tQ,B,y),EI(PI,B,y))}catch(Z){PI(B,Z,y)}}):(y.value=x,y.state=Lve,Wve(y,!1))}catch(B){PI({done:!1},B,y)}}};Mve&&(II=function(x){NRe(this,XY),DRe(x),MC(lZ,this);var C=JY(this);try{x(EI(tQ,C),EI(PI,C))}catch(M){PI(C,M)}},XY=II.prototype,lZ=function(x){VRe(this,{type:sZ,done:!1,notified:!1,parent:!1,reactions:new WRe,rejection:!1,state:Dve,value:void 0})},lZ.prototype=MRe(XY,"then",function(x,C){var M=JY(this),B=QY(FRe(this,II));return M.parent=!0,B.ok=ZY(x)?x:!0,B.fail=ZY(C)&&C,B.domain=aZ?YY.domain:void 0,M.state===Dve?M.reactions.add(B):qY(function(){zve(B,M)}),B.promise}),Fve=function(){var y=new lZ,x=JY(y);this.promise=y,this.resolve=EI(tQ,x),this.reject=EI(PI,x)},Cve.f=QY=function(y){return y===II||y===JRe?new Fve(y):ZRe(y)}),CRe({global:!0,constructor:!0,wrap:!0,forced:Mve},{Promise:II}),ARe(II,sZ,!1,!0),RRe(sZ);var YRe=gr,QRe=qm,eDe=CC.CONSTRUCTOR,uZ=eDe||!QRe(function(y){YRe.all(y).then(void 0,function(){})}),tDe=er,rDe=Qe,nDe=Qi,oDe=M0,iDe=jr,aDe=nt,sDe=uZ;tDe({target:"Promise",stat:!0,forced:sDe},{all:function(x){var C=this,M=oDe.f(C),B=M.resolve,Z=M.reject,re=iDe(function(){var ce=nDe(C.resolve),ae=[],me=0,Oe=1;aDe(x,function(Me){var ke=me++,Le=!1;Oe++,rDe(ce,C,Me).then(function(Pt){Le||(Le=!0,ae[ke]=Pt,--Oe||B(ae))},Z)}),--Oe||B(ae)});return re.error&&Z(re.value),M.promise}});var lDe=er,uDe=CC.CONSTRUCTOR,$ve=gr;$ve&&$ve.prototype,lDe({target:"Promise",proto:!0,forced:uDe,real:!0},{catch:function(y){return this.then(void 0,y)}});var cDe=er,pDe=Qe,dDe=Qi,fDe=M0,hDe=jr,mDe=nt,vDe=uZ;cDe({target:"Promise",stat:!0,forced:vDe},{race:function(x){var C=this,M=fDe.f(C),B=M.reject,Z=hDe(function(){var re=dDe(C.resolve);mDe(x,function(ce){pDe(re,C,ce).then(M.resolve,B)})});return Z.error&&B(Z.value),M.promise}});var gDe=er,yDe=Qe,bDe=M0,wDe=CC.CONSTRUCTOR;gDe({target:"Promise",stat:!0,forced:wDe},{reject:function(x){var C=bDe.f(this);return yDe(C.reject,void 0,x),C.promise}});var ODe=Bt,xDe=Pr,_De=M0,Zve=function(y,x){if(ODe(y),xDe(x)&&x.constructor===y)return x;var C=_De.f(y),M=C.resolve;return M(x),C.promise},SDe=er,IDe=Nn,EDe=Yo,PDe=gr,kDe=CC.CONSTRUCTOR,jDe=Zve,TDe=IDe("Promise"),CDe=!kDe;SDe({target:"Promise",stat:!0,forced:EDe},{resolve:function(x){return jDe(CDe&&this===TDe?PDe:this,x)}});var MDe=er,ADe=Qe,RDe=Qi,DDe=M0,LDe=jr,NDe=nt,FDe=uZ;MDe({target:"Promise",stat:!0,forced:FDe},{allSettled:function(x){var C=this,M=DDe.f(C),B=M.resolve,Z=M.reject,re=LDe(function(){var ce=RDe(C.resolve),ae=[],me=0,Oe=1;NDe(x,function(Me){var ke=me++,Le=!1;Oe++,ADe(ce,C,Me).then(function(Pt){Le||(Le=!0,ae[ke]={status:"fulfilled",value:Pt},--Oe||B(ae))},function(Pt){Le||(Le=!0,ae[ke]={status:"rejected",reason:Pt},--Oe||B(ae))})}),--Oe||B(ae)});return re.error&&Z(re.value),M.promise}});var BDe=er,zDe=Qe,WDe=Qi,HDe=Nn,VDe=M0,$De=jr,ZDe=nt,qDe=uZ,qve="No one promise resolved";BDe({target:"Promise",stat:!0,forced:qDe},{any:function(x){var C=this,M=HDe("AggregateError"),B=VDe.f(C),Z=B.resolve,re=B.reject,ce=$De(function(){var ae=WDe(C.resolve),me=[],Oe=0,Me=1,ke=!1;ZDe(x,function(Le){var Pt=Oe++,br=!1;Me++,zDe(ae,C,Le).then(function(Or){br||ke||(ke=!0,Z(Or))},function(Or){br||ke||(br=!0,me[Pt]=Or,--Me||re(new M(me,qve)))})}),--Me||re(new M(me,qve))});return ce.error&&re(ce.value),B.promise}});var UDe=er,rQ=gr,GDe=d,JDe=Nn,XDe=Pe,KDe=G$,Uve=Zve,YDe=rQ&&rQ.prototype,QDe=!!rQ&&GDe(function(){YDe.finally.call({then:function(){}},function(){})});UDe({target:"Promise",proto:!0,real:!0,forced:QDe},{finally:function(y){var x=KDe(this,JDe("Promise")),C=XDe(y);return this.then(C?function(M){return Uve(x,y()).then(function(){return M})}:y,C?function(M){return Uve(x,y()).then(function(){throw M})}:y)}});var eLe=or,tLe=eLe.Promise,rLe=tLe,nLe=rLe,oLe=er,iLe=M0;oLe({target:"Promise",stat:!0},{withResolvers:function(){var x=iLe.f(this);return{promise:x.promise,resolve:x.resolve,reject:x.reject}}});var aLe=nLe,sLe=aLe,lLe=er,uLe=M0,cLe=jr;lLe({target:"Promise",stat:!0,forced:!0},{try:function(y){var x=uLe.f(this),C=cLe(y);return(C.error?x.reject:x.resolve)(C.value),x.promise}});var pLe=sLe,dLe=pLe,fLe=dLe,hLe=N6,mLe=hLe,vLe=mLe,gLe=vLe,yLe=gLe;(function(y){var x=E.default,C=C1,M=kO,B=D4,Z=wg,re=oe,ce=qv,ae=F4,me=fLe,Oe=yLe,Me=x6;function ke(){y.exports=ke=function(){return Pt},y.exports.__esModule=!0,y.exports.default=y.exports;var Le,Pt={},br=Object.prototype,Or=br.hasOwnProperty,Gr=C||function(Mt,dt,Ot){Mt[dt]=Ot.value},un=typeof M=="function"?M:{},Fa=un.iterator||"@@iterator",mi=un.asyncIterator||"@@asyncIterator",Fs=un.toStringTag||"@@toStringTag";function vi(Mt,dt,Ot){return C(Mt,dt,{value:Ot,enumerable:!0,configurable:!0,writable:!0}),Mt[dt]}try{vi({},"")}catch{vi=function(Ot,hr,on){return Ot[hr]=on}}function Pg(Mt,dt,Ot,hr){var on=dt&&dt.prototype instanceof jI?dt:jI,Rr=B(on.prototype),Zi=new xQ(hr||[]);return Gr(Rr,"_invoke",{value:EBe(Mt,Ot,Zi)}),Rr}function tp(Mt,dt,Ot){try{return{type:"normal",arg:Mt.call(dt,Ot)}}catch(hr){return{type:"throw",arg:hr}}}Pt.wrap=Pg;var y5="suspendedStart",kI="suspendedYield",b5="executing",R0="completed",Sd={};function jI(){}function mZ(){}function U4(){}var bQ={};vi(bQ,Fa,function(){return this});var wQ=Z,vZ=wQ&&wQ(wQ(_Q([])));vZ&&vZ!==br&&Or.call(vZ,Fa)&&(bQ=vZ);var TI=U4.prototype=jI.prototype=B(bQ);function jge(Mt){var dt;re(dt=["next","throw","return"]).call(dt,function(Ot){vi(Mt,Ot,function(hr){return this._invoke(Ot,hr)})})}function gZ(Mt,dt){function Ot(on,Rr,Zi,ru){var nc=tp(Mt[on],Mt,Rr);if(nc.type!=="throw"){var G4=nc.arg,w5=G4.value;return w5&&x(w5)=="object"&&Or.call(w5,"__await")?dt.resolve(w5.__await).then(function(J4){Ot("next",J4,Zi,ru)},function(J4){Ot("throw",J4,Zi,ru)}):dt.resolve(w5).then(function(J4){G4.value=J4,Zi(G4)},function(J4){return Ot("throw",J4,Zi,ru)})}ru(nc.arg)}var hr;Gr(this,"_invoke",{value:function(Rr,Zi){function ru(){return new dt(function(nc,G4){Ot(Rr,Zi,nc,G4)})}return hr=hr?hr.then(ru,ru):ru()}})}function EBe(Mt,dt,Ot){var hr=y5;return function(on,Rr){if(hr===b5)throw new Error("Generator is already running");if(hr===R0){if(on==="throw")throw Rr;return{value:Le,done:!0}}for(Ot.method=on,Ot.arg=Rr;;){var Zi=Ot.delegate;if(Zi){var ru=Tge(Zi,Ot);if(ru){if(ru===Sd)continue;return ru}}if(Ot.method==="next")Ot.sent=Ot._sent=Ot.arg;else if(Ot.method==="throw"){if(hr===y5)throw hr=R0,Ot.arg;Ot.dispatchException(Ot.arg)}else Ot.method==="return"&&Ot.abrupt("return",Ot.arg);hr=b5;var nc=tp(Mt,dt,Ot);if(nc.type==="normal"){if(hr=Ot.done?R0:kI,nc.arg===Sd)continue;return{value:nc.arg,done:Ot.done}}nc.type==="throw"&&(hr=R0,Ot.method="throw",Ot.arg=nc.arg)}}}function Tge(Mt,dt){var Ot=dt.method,hr=Mt.iterator[Ot];if(hr===Le)return dt.delegate=null,Ot==="throw"&&Mt.iterator.return&&(dt.method="return",dt.arg=Le,Tge(Mt,dt),dt.method==="throw")||Ot!=="return"&&(dt.method="throw",dt.arg=new TypeError("The iterator does not provide a '"+Ot+"' method")),Sd;var on=tp(hr,Mt.iterator,dt.arg);if(on.type==="throw")return dt.method="throw",dt.arg=on.arg,dt.delegate=null,Sd;var Rr=on.arg;return Rr?Rr.done?(dt[Mt.resultName]=Rr.value,dt.next=Mt.nextLoc,dt.method!=="return"&&(dt.method="next",dt.arg=Le),dt.delegate=null,Sd):Rr:(dt.method="throw",dt.arg=new TypeError("iterator result is not an object"),dt.delegate=null,Sd)}function PBe(Mt){var dt,Ot={tryLoc:Mt[0]};1 in Mt&&(Ot.catchLoc=Mt[1]),2 in Mt&&(Ot.finallyLoc=Mt[2],Ot.afterLoc=Mt[3]),ce(dt=this.tryEntries).call(dt,Ot)}function OQ(Mt){var dt=Mt.completion||{};dt.type="normal",delete dt.arg,Mt.completion=dt}function xQ(Mt){this.tryEntries=[{tryLoc:"root"}],re(Mt).call(Mt,PBe,this),this.reset(!0)}function _Q(Mt){if(Mt||Mt===""){var dt=Mt[Fa];if(dt)return dt.call(Mt);if(typeof Mt.next=="function")return Mt;if(!isNaN(Mt.length)){var Ot=-1,hr=function on(){for(;++Ot=0;--on){var Rr=this.tryEntries[on],Zi=Rr.completion;if(Rr.tryLoc==="root")return hr("end");if(Rr.tryLoc<=this.prev){var ru=Or.call(Rr,"catchLoc"),nc=Or.call(Rr,"finallyLoc");if(ru&&nc){if(this.prev=0;--hr){var on=this.tryEntries[hr];if(on.tryLoc<=this.prev&&Or.call(on,"finallyLoc")&&this.prev=0;--Ot){var hr=this.tryEntries[Ot];if(hr.finallyLoc===dt)return this.complete(hr.completion,hr.afterLoc),OQ(hr),Sd}},catch:function(dt){for(var Ot=this.tryEntries.length-1;Ot>=0;--Ot){var hr=this.tryEntries[Ot];if(hr.tryLoc===dt){var on=hr.completion;if(on.type==="throw"){var Rr=on.arg;OQ(hr)}return Rr}}throw new Error("illegal catch attempt")},delegateYield:function(dt,Ot,hr){return this.delegate={iterator:_Q(dt),resultName:Ot,nextLoc:hr},this.method==="next"&&(this.arg=Le),Sd}},Pt}y.exports=ke,y.exports.__esModule=!0,y.exports.default=y.exports})(g);var bLe=g.exports,cZ=bLe(),wLe=cZ;try{regeneratorRuntime=cZ}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=cZ:Function("r","regeneratorRuntime = r")(cZ)}var rc=n(wLe),Gve={exports:{}},OLe=d,xLe=OLe(function(){if(typeof ArrayBuffer=="function"){var y=new ArrayBuffer(8);Object.isExtensible(y)&&Object.defineProperty(y,"a",{value:8})}}),_Le=d,SLe=Pr,ILe=te,Jve=xLe,pZ=Object.isExtensible,ELe=_Le(function(){pZ(1)}),PLe=ELe||Jve?function(x){return!SLe(x)||Jve&&ILe(x)==="ArrayBuffer"?!1:pZ?pZ(x):!0}:pZ,kLe=d,jLe=!kLe(function(){return Object.isExtensible(Object.preventExtensions({}))}),TLe=er,CLe=q,MLe=yf,ALe=Pr,nQ=so,RLe=pi.f,Xve=_s,DLe=Pa,oQ=PLe,LLe=bu,NLe=jLe,Kve=!1,Eg=LLe("meta"),FLe=0,iQ=function(y){RLe(y,Eg,{value:{objectID:"O"+FLe++,weakData:{}}})},BLe=function(y,x){if(!ALe(y))return typeof y=="symbol"?y:(typeof y=="string"?"S":"P")+y;if(!nQ(y,Eg)){if(!oQ(y))return"F";if(!x)return"E";iQ(y)}return y[Eg].objectID},zLe=function(y,x){if(!nQ(y,Eg)){if(!oQ(y))return!0;if(!x)return!1;iQ(y)}return y[Eg].weakData},WLe=function(y){return NLe&&Kve&&oQ(y)&&!nQ(y,Eg)&&iQ(y),y},HLe=function(){VLe.enable=function(){},Kve=!0;var y=Xve.f,x=CLe([].splice),C={};C[Eg]=1,y(C).length&&(Xve.f=function(M){for(var B=y(M),Z=0,re=B.length;Z1?arguments[1]:void 0),Le;Le=Le?Le.next:Me.first;)for(ke(Le.value,Le.key,this);Le&&Le.removed;)Le=Le.previous},has:function(Oe){return!!ae(this,Oe)}}),tge(Z,C?{get:function(Oe){var Me=ae(this,Oe);return Me&&Me.value},set:function(Oe,Me){return ce(this,Oe===0?0:Oe,Me)}}:{add:function(Oe){return ce(this,Oe=Oe===0?0:Oe,Oe)}}),AC&&uNe(Z,"size",{configurable:!0,get:function(){return re(this).size}}),B},setStrong:function(y,x,C){var M=x+" Iterator",B=aQ(x),Z=aQ(M);hNe(y,x,function(re,ce){oge(this,{type:M,target:re,state:B(re),kind:ce,last:void 0})},function(){for(var re=Z(this),ce=re.kind,ae=re.last;ae&&ae.removed;)ae=ae.previous;return!re.target||!(re.last=ae=ae?ae.next:re.state.first)?(re.target=void 0,dZ(void 0,!0)):dZ(ce==="keys"?ae.key:ce==="values"?ae.value:[ae.key,ae.value],!1)},C?"entries":"values",!C,!0),mNe(x)}},vNe=ege,gNe=ige;vNe("Map",function(y){return function(){return y(this,arguments.length?arguments[0]:void 0)}},gNe);var yNe=or,bNe=yNe.Map,wNe=bNe,ONe=wNe,xNe=ONe,age=n(xNe),_Ne=er,SNe=Ef.some,INe=Pv,ENe=INe("some");_Ne({target:"Array",proto:!0,forced:!ENe},{some:function(x){return SNe(this,x,arguments.length>1?arguments[1]:void 0)}});var PNe=Fi,kNe=PNe("Array","some"),jNe=Xn,TNe=kNe,sQ=Array.prototype,CNe=function(y){var x=y.some;return y===sQ||jNe(sQ,y)&&x===sQ.some?TNe:x},MNe=CNe,ANe=MNe,RNe=ANe,DNe=n(RNe),LNe=Fi,NNe=LNe("Array","keys"),FNe=NNe,BNe=FNe,zNe=Ea,WNe=so,HNe=Xn,VNe=BNe,lQ=Array.prototype,$Ne={DOMTokenList:!0,NodeList:!0},ZNe=function(y){var x=y.keys;return y===lQ||HNe(lQ,y)&&x===lQ.keys||WNe($Ne,zNe(y))?VNe:x},qNe=ZNe,Z4=n(qNe),sge=Sm,UNe=Math.floor,uQ=function(y,x){var C=y.length,M=UNe(C/2);return C<8?GNe(y,x):JNe(y,uQ(sge(y,0,M),x),uQ(sge(y,M),x),x)},GNe=function(y,x){for(var C=y.length,M=1,B,Z;M0;)y[Z]=y[--Z];Z!==M++&&(y[Z]=B)}return y},JNe=function(y,x,C,M){for(var B=x.length,Z=C.length,re=0,ce=0;re3)){if(uFe)return!0;if(mge)return mge<603;var y="",x,C,M,B;for(x=65;x<76;x++){switch(C=String.fromCharCode(x),x){case 66:case 69:case 70:case 72:M=3;break;case 68:case 71:M=4;break;default:M=2}for(B=0;B<47;B++)g5.push({k:C+B,v:M})}for(g5.sort(function(Z,re){return re.v-Z.v}),B=0;Bdge(C)?1:-1}};nFe({target:"Array",proto:!0,forced:hFe},{sort:function(x){x!==void 0&&oFe(x);var C=iFe(this);if(gge)return x===void 0?vge(C):vge(C,x);var M=[],B=pge(C),Z,re;for(re=0;rethis.max&&this.flush(),this._timeout!=null&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&typeof this.delay=="number"&&(this._timeout=ag(function(){C.flush()},this.delay))}},{key:"flush",value:function(){var C,M;eu(C=Q7(M=this._queue).call(M,0)).call(C,function(B){B.fn.apply(B.context||B.fn,B.args||[])})}}],[{key:"extend",value:function(C,M){var B=new y(M);if(C.flush!==void 0)throw new Error("Target object already has a property flush");C.flush=function(){B.flush()};var Z=[{name:"flush",original:void 0}];if(M&&M.replace)for(var re=0;re=y.length?{done:!0}:{done:!1,value:y[M++]}},e:function(me){throw me},f:B}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var Z=!0,re=!1,ce;return{s:function(){C=C.call(y)},n:function(){var me=C.next();return Z=me.done,me},e:function(me){re=!0,ce=me},f:function(){try{!Z&&C.return!=null&&C.return()}finally{if(re)throw ce}}}}function mBe(y,x){var C;if(y){if(typeof y=="string")return xge(y,x);var M=Gf(C=Object.prototype.toString.call(y)).call(C,8,-1);if(M==="Object"&&y.constructor&&(M=y.constructor.name),M==="Map"||M==="Set")return ll(y);if(M==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(M))return xge(y,x)}}function xge(y,x){(x==null||x>y.length)&&(x=y.length);for(var C=0,M=new Array(x);Cce&&(ce=Me,re=Oe)}return re}},{key:"min",value:function(M){var B=vQ(this._pairs),Z=B.next();if(Z.done)return null;for(var re=Z.value[1],ce=M(Z.value[1],Z.value[0]);!(Z=B.next()).done;){var ae=Ma(Z.value,2),me=ae[0],Oe=ae[1],Me=M(Oe,me);Me=y.length?{done:!0}:{done:!1,value:y[M++]}},e:function(me){throw me},f:B}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var Z=!0,re=!1,ce;return{s:function(){C=C.call(y)},n:function(){var me=C.next();return Z=me.done,me},e:function(me){re=!0,ce=me},f:function(){try{!Z&&C.return!=null&&C.return()}finally{if(re)throw ce}}}}function vBe(y,x){var C;if(y){if(typeof y=="string")return Ige(y,x);var M=Gf(C=Object.prototype.toString.call(y)).call(C,8,-1);if(M==="Object"&&y.constructor&&(M=y.constructor.name),M==="Map"||M==="Set")return ll(y);if(M==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(M))return Ige(y,x)}}function Ige(y,x){(x==null||x>y.length)&&(x=y.length);for(var C=0,M=new Array(x);C"u"||!Qc||Qc.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Qc(Boolean,[],function(){})),!0}catch{return!1}}function bBe(y,x){return y[x]==null&&(y[x]=KFe()),y}var Ege=function(y){dh(C,y);var x=gBe(C);function C(M,B){var Z;return t(this,C),Z=x.call(this),sl(k0(Z),"_queue",null),M&&!Hi(M)&&(B=M,M=[]),Z._options=B||{},Z._data=new age,Z.length=0,Z._idProp=Z._options.fieldId||"id",M&&M.length&&Z.add(M),Z.setOptions(B),Z}return Bf(C,[{key:"idProp",get:function(){return this._idProp}},{key:"setOptions",value:function(B){B&&B.queue!==void 0&&(B.queue===!1?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=wge.extend(this,{replace:["add","update","remove"]})),B.queue&&typeof B.queue=="object"&&this._queue.setOptions(B.queue)))}},{key:"add",value:function(B,Z){var re=this,ce=[],ae;if(Hi(B)){var me=ei(B).call(B,function(ke){return ke[re._idProp]});if(DNe(me).call(me,function(ke){return re._data.has(ke)}))throw new Error("A duplicate id was found in the parameter array.");for(var Oe=0,Me=B.length;OeOe?1:mece)&&(re=Oe,ce=Me)}}catch(ke){ae.e(ke)}finally{ae.f()}return re||null}},{key:"min",value:function(B){var Z,re=null,ce=null,ae=yQ(yge(Z=this._data).call(Z)),me;try{for(ae.s();!(me=ae.n()).done;){var Oe=me.value,Me=Oe[B];typeof Me=="number"&&(ce==null||Me=y.length?{done:!0}:{done:!1,value:y[M++]}},e:function(me){throw me},f:B}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var Z=!0,re=!1,ce;return{s:function(){C=C.call(y)},n:function(){var me=C.next();return Z=me.done,me},e:function(me){re=!0,ce=me},f:function(){try{!Z&&C.return!=null&&C.return()}finally{if(re)throw ce}}}}function OBe(y,x){var C;if(y){if(typeof y=="string")return Pge(y,x);var M=Gf(C=Object.prototype.toString.call(y)).call(C,8,-1);if(M==="Object"&&y.constructor&&(M=y.constructor.name),M==="Map"||M==="Set")return ll(y);if(M==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(M))return Pge(y,x)}}function Pge(y,x){(x==null||x>y.length)&&(x=y.length);for(var C=0,M=new Array(x);C"u"||!Qc||Qc.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Qc(Boolean,[],function(){})),!0}catch{return!1}}var SBe=function(y){dh(C,y);var x=xBe(C);function C(M,B){var Z,re;return t(this,C),re=x.call(this),sl(k0(re),"length",0),sl(k0(re),"_ids",new hZ),re._options=B||{},re._listener=zc(Z=re._onEvent).call(Z,k0(re)),re.setData(M),re}return Bf(C,[{key:"idProp",get:function(){return this.getDataSet().idProp}},{key:"setData",value:function(B){if(this._data){this._data.off&&this._data.off("*",this._listener);var Z=this._data.getIds({filter:Si(this._options)}),re=this._data.get(Z);this._ids.clear(),this.length=0,this._trigger("remove",{items:Z,oldData:re})}if(B!=null){this._data=B;for(var ce=this._data.getIds({filter:Si(this._options)}),ae=0,me=ce.length;ae{(function(e,t){typeof xY=="object"&&typeof vRe<"u"?t(xY,mRe()):typeof define=="function"&&define.amd?define(["exports","vis-data/peer/umd/vis-data.js"],t):t((e=typeof globalThis<"u"?globalThis:e||self).vis=e.vis||{},e.vis)})(xY,function(e,t){var r=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function n(p){return p&&p.__esModule&&Object.prototype.hasOwnProperty.call(p,"default")?p.default:p}var o=function(p){return p&&p.Math===Math&&p},i=o(typeof globalThis=="object"&&globalThis)||o(typeof window=="object"&&window)||o(typeof self=="object"&&self)||o(typeof r=="object"&&r)||function(){return this}()||r||Function("return this")(),c=function(p){try{return!!p()}catch{return!0}},d=!c(function(){var p=function(){}.bind();return typeof p!="function"||p.hasOwnProperty("prototype")}),h=d,v=Function.prototype,w=v.apply,_=v.call,I=typeof Reflect=="object"&&Reflect.apply||(h?_.bind(w):function(){return _.apply(w,arguments)}),R=d,D=Function.prototype,F=D.call,A=R&&D.bind.bind(F,F),N=R?A:function(p){return function(){return F.apply(p,arguments)}},H=N,q=H({}.toString),Y=H("".slice),ee=function(p){return Y(q(p),8,-1)},ne=ee,te=N,de=function(p){if(ne(p)==="Function")return te(p)},fe=typeof document=="object"&&document.all,ye={all:fe,IS_HTMLDDA:fe===void 0&&fe!==void 0},Ie=ye.all,he=ye.IS_HTMLDDA?function(p){return typeof p=="function"||p===Ie}:function(p){return typeof p=="function"},be={},Se=!c(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),Te=d,Pe=Function.prototype.call,Ve=Te?Pe.bind(Pe):function(){return Pe.apply(Pe,arguments)},De={},He={}.propertyIsEnumerable,Je=Object.getOwnPropertyDescriptor,vt=Je&&!He.call({1:2},1);De.f=vt?function(p){var a=Je(this,p);return!!a&&a.enumerable}:He;var Qe,Ne,Nt=function(p,a){return{enumerable:!(1&p),configurable:!(2&p),writable:!(4&p),value:a}},Vt=c,Ke=ee,st=Object,Tt=N("".split),wr=Vt(function(){return!st("z").propertyIsEnumerable(0)})?function(p){return Ke(p)==="String"?Tt(p,""):st(p)}:st,Rt=function(p){return p==null},Ut=Rt,vr=TypeError,Sr=function(p){if(Ut(p))throw new vr("Can't call method on "+p);return p},Er=wr,po=Sr,Pn=function(p){return Er(po(p))},Nr=he,Wo=ye.all,Cr=ye.IS_HTMLDDA?function(p){return typeof p=="object"?p!==null:Nr(p)||p===Wo}:function(p){return typeof p=="object"?p!==null:Nr(p)},St={},tn=St,Ks=i,hs=he,Pr=function(p){return hs(p)?p:void 0},or=function(p,a){return arguments.length<2?Pr(tn[p])||Pr(Ks[p]):tn[p]&&tn[p][a]||Ks[p]&&Ks[p][a]},ir=N({}.isPrototypeOf),Mr=typeof navigator<"u"&&String(navigator.userAgent)||"",Ur=i,ms=Mr,Nn=Ur.process,Ri=Ur.Deno,Xn=Nn&&Nn.versions||Ri&&Ri.version,ya=Xn&&Xn.v8;ya&&(Ne=(Qe=ya.split("."))[0]>0&&Qe[0]<4?1:+(Qe[0]+Qe[1])),!Ne&&ms&&(!(Qe=ms.match(/Edge\/(\d+)/))||Qe[1]>=74)&&(Qe=ms.match(/Chrome\/(\d+)/))&&(Ne=+Qe[1]);var ba=Ne,wa=ba,v1=c,Kd=i.String,yc=!!Object.getOwnPropertySymbols&&!v1(function(){var p=Symbol("symbol detection");return!Kd(p)||!(Object(p)instanceof Symbol)||!Symbol.sham&&wa&&wa<41}),Za=yc&&!Symbol.sham&&typeof Symbol.iterator=="symbol",li=or,Op=he,Rl=ir,Ct=Object,Yd=Za?function(p){return typeof p=="symbol"}:function(p){var a=li("Symbol");return Op(a)&&Rl(a.prototype,Ct(p))},Qd=String,Ki=function(p){try{return Qd(p)}catch{return"Object"}},fo=he,rn=Ki,Hh=TypeError,pn=function(p){if(fo(p))return p;throw new Hh(rn(p)+" is not a function")},Ko=pn,z3=Rt,xp=function(p,a){var s=p[a];return z3(s)?void 0:Ko(s)},Co=Ve,ui=he,Yi=Cr,Hn=TypeError,qa={exports:{}},vs=i,gu=Object.defineProperty,Qi=function(p,a){try{gu(vs,p,{value:a,configurable:!0,writable:!0})}catch{vs[p]=a}return a},fy="__core-js_shared__",yu=i[fy]||Qi(fy,{}),bc=yu;(qa.exports=function(p,a){return bc[p]||(bc[p]=a!==void 0?a:{})})("versions",[]).push({version:"3.33.0",mode:"pure",copyright:"\xA9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE",source:"https://github.com/zloirock/core-js"});var Dl=qa.exports,Oa=Sr,wc=Object,Di=function(p){return wc(Oa(p))},ea=Di,hy=N({}.hasOwnProperty),Yo=Object.hasOwn||function(p,a){return hy(ea(p),a)},kr=N,g1=0,W3=Math.random(),my=kr(1 .toString),ef=function(p){return"Symbol("+(p===void 0?"":p)+")_"+my(++g1+W3,36)},tf=Dl,vy=Yo,Vh=ef,gy=yc,_p=Za,Sp=i.Symbol,Ll=tf("wks"),ci=_p?Sp.for||Sp:Sp&&Sp.withoutSetter||Vh,ho=function(p){return vy(Ll,p)||(Ll[p]=gy&&vy(Sp,p)?Sp[p]:ci("Symbol."+p)),Ll[p]},ao=Ve,yy=Cr,so=Yd,by=xp,rf=function(p,a){var s,u;if(a==="string"&&ui(s=p.toString)&&!Yi(u=Co(s,p))||ui(s=p.valueOf)&&!Yi(u=Co(s,p))||a!=="string"&&ui(s=p.toString)&&!Yi(u=Co(s,p)))return u;throw new Hn("Can't convert object to primitive value")},$h=TypeError,wy=ho("toPrimitive"),bu=function(p,a){if(!yy(p)||so(p))return p;var s,u=by(p,wy);if(u){if(a===void 0&&(a="default"),s=ao(u,p,a),!yy(s)||so(s))return s;throw new $h("Can't convert object to primitive value")}return a===void 0&&(a="number"),rf(p,a)},Nl=Yd,Zh=function(p){var a=bu(p,"string");return Nl(a)?a:a+""},Ip=Cr,qh=i.document,y1=Ip(qh)&&Ip(qh.createElement),Oy=function(p){return y1?qh.createElement(p):{}},wu=Oy,Uh=!Se&&!c(function(){return Object.defineProperty(wu("div"),"a",{get:function(){return 7}}).a!==7}),xy=Se,Kn=Ve,H3=De,b1=Nt,_y=Pn,V3=Zh,$3=Yo,Z3=Uh,Sy=Object.getOwnPropertyDescriptor;be.f=xy?Sy:function(p,a){if(p=_y(p),a=V3(a),Z3)try{return Sy(p,a)}catch{}if($3(p,a))return b1(!Kn(H3.f,p,a),p[a])};var Iy=c,q3=he,U3=/#|\.prototype\./,nf=function(p,a){var s=G3[Ou(p)];return s===w1||s!==Ey&&(q3(a)?Iy(a):!!a)},Ou=nf.normalize=function(p){return String(p).replace(U3,".").toLowerCase()},G3=nf.data={},Ey=nf.NATIVE="N",w1=nf.POLYFILL="P",J3=nf,Gh=pn,O1=d,x1=de(de.bind),of=function(p,a){return Gh(p),a===void 0?p:O1?x1(p,a):function(){return p.apply(a,arguments)}},mo={},bi=Se&&c(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),Py=Cr,X3=String,K3=TypeError,xa=function(p){if(Py(p))return p;throw new K3(X3(p)+" is not an object")},ta=Se,ro=Uh,af=bi,Fl=xa,sf=Zh,_1=TypeError,S1=Object.defineProperty,Oc=Object.getOwnPropertyDescriptor,Ep="enumerable",Ua="configurable",xc="writable";mo.f=ta?af?function(p,a,s){if(Fl(p),a=sf(a),Fl(s),typeof p=="function"&&a==="prototype"&&"value"in s&&xc in s&&!s[xc]){var u=Oc(p,a);u&&u[xc]&&(p[a]=s.value,s={configurable:Ua in s?s[Ua]:u[Ua],enumerable:Ep in s?s[Ep]:u[Ep],writable:!1})}return S1(p,a,s)}:S1:function(p,a,s){if(Fl(p),a=sf(a),Fl(s),ro)try{return S1(p,a,s)}catch{}if("get"in s||"set"in s)throw new _1("Accessors not supported");return"value"in s&&(p[a]=s.value),p};var I1=mo,Ys=Nt,_c=Se?function(p,a,s){return I1.f(p,a,Ys(1,s))}:function(p,a,s){return p[a]=s,p},ra=i,Jh=I,Y3=de,xu=he,pi=be.f,E1=J3,Pp=St,Sc=of,kp=_c,_u=Yo,ky=function(p){var a=function(s,u,f){if(this instanceof a){switch(arguments.length){case 0:return new p;case 1:return new p(s);case 2:return new p(s,u)}return new p(s,u,f)}return Jh(p,this,arguments)};return a.prototype=p.prototype,a},Bt=function(p,a){var s,u,f,m,b,P,k,V,G,X=p.target,se=p.global,ve=p.stat,ge=p.proto,xe=se?ra:ve?ra[X]:(ra[X]||{}).prototype,Re=se?Pp:Pp[X]||kp(Pp,X,{})[X],Ue=Re.prototype;for(m in a)u=!(s=E1(se?m:X+(ve?".":"#")+m,p.forced))&&xe&&_u(xe,m),P=Re[m],u&&(k=p.dontCallGetSet?(G=pi(xe,m))&&G.value:xe[m]),b=u&&k?k:a[m],u&&typeof P==typeof b||(V=p.bind&&u?Sc(b,ra):p.wrap&&u?ky(b):ge&&xu(b)?Y3(b):b,(p.sham||b&&b.sham||P&&P.sham)&&kp(V,"sham",!0),kp(Re,m,V),ge&&(_u(Pp,f=X+"Prototype")||kp(Pp,f,{}),kp(Pp[f],m,b),p.real&&Ue&&(s||!Ue[m])&&kp(Ue,m,b)))},ar=Math.ceil,Q3=Math.floor,ew=Math.trunc||function(p){var a=+p;return(a>0?Q3:ar)(a)},Bl=function(p){var a=+p;return a!=a||a===0?0:ew(a)},P1=Bl,jp=Math.max,Xh=Math.min,Su=function(p,a){var s=P1(p);return s<0?jp(s+a,0):Xh(s,a)},Tp=Bl,lf=Math.min,Qs=function(p){return p>0?lf(Tp(p),9007199254740991):0},Ga=function(p){return Qs(p.length)},tw=Pn,rw=Su,_a=Ga,uf=function(p){return function(a,s,u){var f,m=tw(a),b=_a(m),P=rw(u,b);if(p&&s!=s){for(;b>P;)if((f=m[P++])!=f)return!0}else for(;b>P;P++)if((p||P in m)&&m[P]===s)return p||P||0;return!p&&-1}},Kh={includes:uf(!0),indexOf:uf(!1)},kn={},Li=Yo,nw=Pn,cf=Kh.indexOf,Cp=kn,jy=N([].push),Ic=function(p,a){var s,u=nw(p),f=0,m=[];for(s in u)!Li(Cp,s)&&Li(u,s)&&jy(m,s);for(;a.length>f;)Li(u,s=a[f++])&&(~cf(m,s)||jy(m,s));return m},Sa=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Ty=Ic,er=Sa,Yh=Object.keys||function(p){return Ty(p,er)},Iu={};Iu.f=Object.getOwnPropertySymbols;var zl=Se,k1=N,Cy=Ve,My=c,gs=Yh,j1=Iu,Mp=De,T1=Di,Ay=wr,Ap=Object.assign,Ry=Object.defineProperty,C1=k1([].concat),Qh=!Ap||My(function(){if(zl&&Ap({b:1},Ap(Ry({},"a",{enumerable:!0,get:function(){Ry(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var p={},a={},s=Symbol("assign detection"),u="abcdefghijklmnopqrst";return p[s]=7,u.split("").forEach(function(f){a[f]=f}),Ap({},p)[s]!==7||gs(Ap({},a)).join("")!==u})?function(p,a){for(var s=T1(p),u=arguments.length,f=1,m=j1.f,b=Mp.f;u>f;)for(var P,k=Ay(arguments[f++]),V=m?C1(gs(k),m(k)):gs(k),G=V.length,X=0;G>X;)P=V[X++],zl&&!Cy(b,k,P)||(s[P]=k[P]);return s}:Ap,Dy=Qh;Bt({target:"Object",stat:!0,arity:2,forced:Object.assign!==Dy},{assign:Dy});var Cn=n(St.Object.assign),em=N([].slice),M1=N,A1=pn,Ly=Cr,tm=Yo,Rp=em,Ja=d,ys=Function,R1=M1([].concat),Ia=M1([].join),rm={},D1=Ja?ys.bind:function(p){var a=A1(this),s=a.prototype,u=Rp(arguments,1),f=function(){var m=R1(u,Rp(arguments));return this instanceof f?function(b,P,k){if(!tm(rm,P)){for(var V=[],G=0;G=.1;)(ge=+m[X++%b])>G&&(ge=G),ve=Math.sqrt(ge*ge/(1+V*V)),a+=ve=P<0?-ve:ve,s+=V*ve,se===!0?p.lineTo(a,s):p.moveTo(a,s),G-=ge,se=!se}var Fy={circle:L1,dashedLine:B1,database:F1,diamond:function(p,a,s,u){p.beginPath(),p.lineTo(a,s+u),p.lineTo(a+u,s),p.lineTo(a,s-u),p.lineTo(a-u,s),p.closePath()},ellipse:N1,ellipse_vis:N1,hexagon:function(p,a,s,u){p.beginPath();var f=2*Math.PI/6;p.moveTo(a+u,s);for(var m=1;m<6;m++)p.lineTo(a+u*Math.cos(f*m),s+u*Math.sin(f*m));p.closePath()},roundRect:pf,square:function(p,a,s,u){p.beginPath(),p.rect(a-u,s-u,2*u,2*u),p.closePath()},star:function(p,a,s,u){p.beginPath(),s+=.1*(u*=.82);for(var f=0;f<10;f++){var m=f%2==0?1.3*u:.5*u;p.lineTo(a+m*Math.sin(2*f*Math.PI/10),s-m*Math.cos(2*f*Math.PI/10))}p.closePath()},triangle:function(p,a,s,u){p.beginPath(),s+=.275*(u*=1.15);var f=2*u,m=f/2,b=Math.sqrt(3)/6*f,P=Math.sqrt(f*f-m*m);p.moveTo(a,s-(P-b)),p.lineTo(a+m,s+b),p.lineTo(a-m,s+b),p.lineTo(a,s-(P-b)),p.closePath()},triangleDown:function(p,a,s,u){p.beginPath(),s-=.275*(u*=1.15);var f=2*u,m=f/2,b=Math.sqrt(3)/6*f,P=Math.sqrt(f*f-m*m);p.moveTo(a,s+(P-b)),p.lineTo(a+m,s-b),p.lineTo(a-m,s-b),p.lineTo(a,s+(P-b)),p.closePath()}},By={exports:{}};(function(p){function a(s){if(s)return function(u){for(var f in a.prototype)u[f]=a.prototype[f];return u}(s)}p.exports=a,a.prototype.on=a.prototype.addEventListener=function(s,u){return this._callbacks=this._callbacks||{},(this._callbacks["$"+s]=this._callbacks["$"+s]||[]).push(u),this},a.prototype.once=function(s,u){function f(){this.off(s,f),u.apply(this,arguments)}return f.fn=u,this.on(s,f),this},a.prototype.off=a.prototype.removeListener=a.prototype.removeAllListeners=a.prototype.removeEventListener=function(s,u){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var f,m=this._callbacks["$"+s];if(!m)return this;if(arguments.length==1)return delete this._callbacks["$"+s],this;for(var b=0;b=P?p?"":void 0:(u=W1(m,b))<55296||u>56319||b+1===P||(f=W1(m,b+1))<56320||f>57343?p?lm(m,b):u:p?Vy(m,b,b+2):f-56320+(u-55296<<10)+65536}},V1={codeAt:H1(!1),charAt:H1(!0)},sw=he,$1=i.WeakMap,mf=sw($1)&&/native code/.test(String($1)),lw=ef,vf=Dl("keys"),um=function(p){return vf[p]||(vf[p]=lw(p))},uw=mf,$y=i,cw=Cr,ku=_c,cm=Yo,Z1=yu,Zy=um,pm=kn,qy="Object already initialized",q1=$y.TypeError,gf=$y.WeakMap;if(uw||Z1.state){var ws=Z1.state||(Z1.state=new gf);ws.get=ws.get,ws.has=ws.has,ws.set=ws.set,om=function(p,a){if(ws.has(p))throw new q1(qy);return a.facade=p,ws.set(p,a),a},Pc=function(p){return ws.get(p)||{}},im=function(p){return ws.has(p)}}else{var Bp=Zy("state");pm[Bp]=!0,om=function(p,a){if(cm(p,Bp))throw new q1(qy);return a.facade=p,ku(p,Bp,a),a},Pc=function(p){return cm(p,Bp)?p[Bp]:{}},im=function(p){return cm(p,Bp)}}var el={set:om,get:Pc,has:im,enforce:function(p){return im(p)?Pc(p):om(p,{})},getterFor:function(p){return function(a){var s;if(!cw(a)||(s=Pc(a)).type!==p)throw new q1("Incompatible receiver, "+p+" required");return s}}},jc=Se,zp=Yo,dm=Function.prototype,U1=jc&&Object.getOwnPropertyDescriptor,fm=zp(dm,"name"),Uy={EXISTS:fm,PROPER:fm&&function(){}.name==="something",CONFIGURABLE:fm&&(!jc||jc&&U1(dm,"name").configurable)},Tc={},Cc=Se,Xa=bi,hm=mo,pw=xa,mm=Pn,Gy=Yh;Tc.f=Cc&&!Xa?Object.defineProperties:function(p,a){pw(p);for(var s,u=mm(a),f=Gy(a),m=f.length,b=0;m>b;)hm.f(p,s=f[b++],u[s]);return p};var Mc,dw=or("document","documentElement"),ju=xa,Jy=Tc,vm=Sa,fw=kn,yf=dw,ot=Oy,bf="prototype",gm="script",Ac=um("IE_PROTO"),dn=function(){},Os=function(p){return"<"+gm+">"+p+""},ym=function(p){p.write(Os("")),p.close();var a=p.parentWindow.Object;return p=null,a},tl=function(){try{Mc=new ActiveXObject("htmlfile")}catch{}var p,a,s;tl=typeof document<"u"?document.domain&&Mc?ym(Mc):(a=ot("iframe"),s="java"+gm+":",a.style.display="none",yf.appendChild(a),a.src=String(s),(p=a.contentWindow.document).open(),p.write(Os("document.F=Object")),p.close(),p.F):ym(Mc);for(var u=vm.length;u--;)delete tl[bf][vm[u]];return tl()};fw[Ac]=!0;var xs,Xy,Tu,rl=Object.create||function(p,a){var s;return p!==null?(dn[bf]=ju(p),s=new dn,dn[bf]=null,s[Ac]=p):s=tl(),a===void 0?s:Jy.f(s,a)},wf=!c(function(){function p(){}return p.prototype.constructor=null,Object.getPrototypeOf(new p)!==p.prototype}),nl=Yo,hw=he,Ky=Di,mw=wf,lo=um("IE_PROTO"),Of=Object,vw=Of.prototype,xf=mw?Of.getPrototypeOf:function(p){var a=Ky(p);if(nl(a,lo))return a[lo];var s=a.constructor;return hw(s)&&a instanceof s?s.prototype:a instanceof Of?vw:null},bm=_c,Wl=function(p,a,s,u){return u&&u.enumerable?p[a]=s:bm(p,a,s),p},Hl=c,Yy=he,Qy=Cr,gw=rl,eb=xf,yw=Wl,G1=ho("iterator"),wm=!1;[].keys&&("next"in(Tu=[].keys())?(Xy=eb(eb(Tu)))!==Object.prototype&&(xs=Xy):wm=!0);var Cu=!Qy(xs)||Hl(function(){var p={};return xs[G1].call(p)!==p});Yy((xs=Cu?{}:gw(xs))[G1])||yw(xs,G1,function(){return this});var Om={IteratorPrototype:xs,BUGGY_SAFARI_ITERATORS:wm},xm=bs,tb=am?{}.toString:function(){return"[object "+xm(this)+"]"},_m=am,Mu=mo.f,rb=_c,J1=Yo,Wp=tb,_f=ho("toStringTag"),Ka=function(p,a,s,u){if(p){var f=s?p:p.prototype;J1(f,_f)||Mu(f,_f,{configurable:!0,value:a}),u&&!_m&&rb(f,"toString",Wp)}},_s={},X1=Om.IteratorPrototype,bw=rl,Qo=Nt,Pa=Ka,Vl=_s,ww=function(){return this},Ow=N,xw=pn,_w=he,Sm=String,Rc=TypeError,Ss=function(p,a,s){try{return Ow(xw(Object.getOwnPropertyDescriptor(p,a)[s]))}catch{}},Ar=xa,O=function(p){if(typeof p=="object"||_w(p))return p;throw new Rc("Can't set "+Sm(p)+" as a prototype")},L=Object.setPrototypeOf||("__proto__"in{}?function(){var p,a=!1,s={};try{(p=Ss(Object.prototype,"__proto__","set"))(s,[]),a=s instanceof Array}catch{}return function(u,f){return Ar(u),O(f),a?p(u,f):u.__proto__=f,u}}():void 0),$=Bt,K=Ve,le=Uy,_e=function(p,a,s,u){var f=a+" Iterator";return p.prototype=bw(X1,{next:Qo(+!u,s)}),Pa(p,f,!1,!0),Vl[f]=ww,p},We=xf,ut=Ka,cr=Wl,Vr=_s,Ho=Om,Is=le.PROPER,Es=Ho.BUGGY_SAFARI_ITERATORS,K1=ho("iterator"),Yn="keys",Y1="values",u_="entries",c_=function(){return this},Sw=function(p,a,s,u,f,m,b){_e(s,a,u);var P,k,V,G=function(Ue){if(Ue===f&&xe)return xe;if(!Es&&Ue&&Ue in ve)return ve[Ue];switch(Ue){case Yn:case Y1:case u_:return function(){return new s(this,Ue)}}return function(){return new s(this)}},X=a+" Iterator",se=!1,ve=p.prototype,ge=ve[K1]||ve["@@iterator"]||f&&ve[f],xe=!Es&&ge||G(f),Re=a==="Array"&&ve.entries||ge;if(Re&&(P=We(Re.call(new p)))!==Object.prototype&&P.next&&(ut(P,X,!0,!0),Vr[X]=c_),Is&&f===Y1&&ge&&ge.name!==Y1&&(se=!0,xe=function(){return K(ge,this)}),f)if(k={values:G(Y1),keys:m?xe:G(Yn),entries:G(u_)},b)for(V in k)(Es||se||!(V in ve))&&cr(ve,V,k[V]);else $({target:a,proto:!0,forced:Es||se},k);return b&&ve[K1]!==xe&&cr(ve,K1,xe,{name:f}),Vr[a]=xe,k},Q1=function(p,a){return{value:p,done:a}},p_=V1.charAt,HP=na,Iw=el,d_=Sw,f_=Q1,nb="String Iterator",h_=Iw.set,m_=Iw.getterFor(nb);d_(String,"String",function(p){h_(this,{type:nb,string:HP(p),index:0})},function(){var p,a=m_(this),s=a.string,u=a.index;return u>=s.length?f_(void 0,!0):(p=p_(s,u),a.index+=p.length,f_(p,!1))});var VP=Ve,Ew=xa,Sf=xp,v_=function(p,a,s){var u,f;Ew(p);try{if(!(u=Sf(p,"return"))){if(a==="throw")throw s;return s}u=VP(u,p)}catch(m){f=!0,u=m}if(a==="throw")throw s;if(f)throw u;return Ew(u),s},$P=xa,Pw=v_,ob=_s,Ya=ho("iterator"),ev=Array.prototype,Im=function(p){return p!==void 0&&(ob.Array===p||ev[Ya]===p)},ZP=he,Em=yu,Ps=N(Function.toString);ZP(Em.inspectSource)||(Em.inspectSource=function(p){return Ps(p)});var If=Em.inspectSource,ib=N,g_=c,ab=he,kw=bs,tv=If,ol=function(){},rv=[],y_=or("Reflect","construct"),sb=/^\s*(?:class|function)\b/,wi=ib(sb.exec),Au=!sb.test(ol),Ru=function(p){if(!ab(p))return!1;try{return y_(ol,rv,p),!0}catch{return!1}},lb=function(p){if(!ab(p))return!1;switch(kw(p)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return Au||!!wi(sb,tv(p))}catch{return!0}};lb.sham=!0;var nv=!y_||g_(function(){var p;return Ru(Ru.call)||!Ru(Object)||!Ru(function(){p=!0})||p})?lb:Ru,jw=Zh,Tw=mo,ub=Nt,Hp=function(p,a,s){var u=jw(a);u in p?Tw.f(p,u,ub(0,s)):p[u]=s},Cw=bs,Du=xp,Ef=Rt,ov=_s,Pm=ho("iterator"),km=function(p){if(!Ef(p))return Du(p,Pm)||Du(p,"@@iterator")||ov[Cw(p)]},qP=Ve,jm=pn,Tm=xa,b_=Ki,Oi=km,Mw=TypeError,cb=function(p,a){var s=arguments.length<2?Oi(p):a;if(jm(s))return Tm(qP(s,p));throw new Mw(b_(p)+" is not iterable")},pb=of,Aw=Ve,UP=Di,Rw=function(p,a,s,u){try{return u?a($P(s)[0],s[1]):a(s)}catch(f){Pw(p,"throw",f)}},iv=Im,Dw=nv,av=Ga,db=Hp,GP=cb,Lw=km,Nw=Array,Fw=ho("iterator"),Bw=!1;try{var zw=0,Ww={next:function(){return{done:!!zw++}},return:function(){Bw=!0}};Ww[Fw]=function(){return this},Array.from(Ww,function(){throw 2})}catch{}var Hw=function(p){var a=UP(p),s=Dw(this),u=arguments.length,f=u>1?arguments[1]:void 0,m=f!==void 0;m&&(f=pb(f,u>2?arguments[2]:void 0));var b,P,k,V,G,X,se=Lw(a),ve=0;if(!se||this===Nw&&iv(se))for(b=av(a),P=s?new this(b):Nw(b);b>ve;ve++)X=m?f(a[ve],ve):a[ve],db(P,ve,X);else for(G=(V=GP(a,se)).next,P=s?new this:[];!(k=Aw(G,V)).done;ve++)X=m?Rw(V,f,[k.value,ve],!0):k.value,db(P,ve,X);return P.length=ve,P},sv=function(p,a){try{if(!a&&!Bw)return!1}catch{return!1}var s=!1;try{var u={};u[Fw]=function(){return{next:function(){return{done:s=!0}}}},p(u)}catch{}return s};Bt({target:"Array",stat:!0,forced:!sv(function(p){Array.from(p)})},{from:Hw});var fb=St.Array.from,Dc=n(fb),w_=Pn,Vw=_s,O_=el;mo.f;var JP=Sw,hb=Q1,Lu="Array Iterator",Pf=O_.set,ka=O_.getterFor(Lu);JP(Array,"Array",function(p,a){Pf(this,{type:Lu,target:w_(p),index:0,kind:a})},function(){var p=ka(this),a=p.target,s=p.kind,u=p.index++;if(!a||u>=a.length)return p.target=void 0,hb(void 0,!0);switch(s){case"keys":return hb(u,!1);case"values":return hb(a[u],!1)}return hb([u,a[u]],!1)},"values"),Vw.Arguments=Vw.Array;var mb=km,lv={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},XP=i,x_=bs,il=_c,Lc=_s,kf=ho("toStringTag");for(var vb in lv){var __=XP[vb],uv=__&&__.prototype;uv&&x_(uv)!==kf&&il(uv,kf,vb),Lc[vb]=Lc.Array}var gb=mb,Vp=n(gb),$p=n(gb);function gt(p,a){if(!(p instanceof a))throw new TypeError("Cannot call a class as a function")}var $w={exports:{}},ja=Bt,Cm=Se,Zw=mo.f;ja({target:"Object",stat:!0,forced:Object.defineProperty!==Zw,sham:!Cm},{defineProperty:Zw});var yb=St.Object,jf=$w.exports=function(p,a,s){return yb.defineProperty(p,a,s)};yb.defineProperty.sham&&(jf.sham=!0);var Mm=$w.exports,Am=n(Mm),cv=ee,Nc=Array.isArray||function(p){return cv(p)==="Array"},qw=TypeError,bb=function(p){if(p>9007199254740991)throw qw("Maximum allowed index exceeded");return p},wb=Nc,S_=nv,I_=Cr,KP=ho("species"),Uw=Array,E_=function(p){var a;return wb(p)&&(a=p.constructor,(S_(a)&&(a===Uw||wb(a.prototype))||I_(a)&&(a=a[KP])===null)&&(a=void 0)),a===void 0?Uw:a},pv=function(p,a){return new(E_(p))(a===0?0:a)},YP=c,Ob=ba,P_=ho("species"),dv=function(p){return Ob>=51||!YP(function(){var a=[];return(a.constructor={})[P_]=function(){return{foo:1}},a[p](Boolean).foo!==1})},Gw=Bt,QP=c,k_=Nc,ek=Cr,Jw=Di,j_=Ga,T_=bb,Xw=Hp,C_=pv,tk=dv,fv=ba,M_=ho("isConcatSpreadable"),A_=fv>=51||!QP(function(){var p=[];return p[M_]=!1,p.concat()[0]!==p}),rk=function(p){if(!ek(p))return!1;var a=p[M_];return a!==void 0?!!a:k_(p)};Gw({target:"Array",proto:!0,arity:1,forced:!A_||!tk("concat")},{concat:function(p){var a,s,u,f,m,b=Jw(this),P=C_(b,0),k=0;for(a=-1,u=arguments.length;aet;et++)if((P||et in xe)&&(ve=Re(se=xe[et],et,ge),p))if(a)It[et]=ve;else if(ve)switch(p){case 3:return!0;case 5:return se;case 6:return et;case 2:q_(It,se)}else switch(p){case 4:return!1;case 7:q_(It,se)}return m?-1:u||f?f:It}},Fc={forEach:qp(0),map:qp(1),filter:qp(2),some:qp(3),every:qp(4),find:qp(5),findIndex:qp(6),filterReject:qp(7)},Pb=Bt,kb=i,jb=Ve,U_=N,Up=Se,Tf=yc,rO=c,di=Yo,uk=ir,nO=xa,mv=Pn,Tb=Zh,ck=na,oO=Nt,Cf=rl,G_=Yh,pk=Rm,iO=xb,Lm=Iu,vv=be,J_=mo,X_=Tc,K_=De,Mf=Wl,Y_=$l,Cb=Dl,Q_=kn,aO=ef,Mb=ho,eS=Zp,dk=go,tS=eO,rS=Ka,Ab=el,Nu=Fc.forEach,xi=um("hidden"),Rb="Symbol",Gp="prototype",fk=Ab.set,nS=Ab.getterFor(Rb),al=Object[Gp],Af=kb.Symbol,Nm=Af&&Af[Gp],hk=kb.RangeError,mk=kb.TypeError,Fm=kb.QObject,sO=vv.f,oa=J_.f,gv=iO.f,lO=K_.f,oS=U_([].push),Zl=Cb("symbols"),Bm=Cb("op-symbols"),vk=Cb("wks"),Jp=!Fm||!Fm[Gp]||!Fm[Gp].findChild,iS=function(p,a,s){var u=sO(al,a);u&&delete al[a],oa(p,a,s),u&&p!==al&&oa(al,a,u)},Db=Up&&rO(function(){return Cf(oa({},"a",{get:function(){return oa(this,"a",{value:7}).a}})).a!==7})?iS:oa,Lb=function(p,a){var s=Zl[p]=Cf(Nm);return fk(s,{type:Rb,tag:p,description:a}),Up||(s.description=a),s},Fu=function(p,a,s){p===al&&Fu(Bm,a,s),nO(p);var u=Tb(a);return nO(s),di(Zl,u)?(s.enumerable?(di(p,xi)&&p[xi][u]&&(p[xi][u]=!1),s=Cf(s,{enumerable:oO(0,!1)})):(di(p,xi)||oa(p,xi,oO(1,{})),p[xi][u]=!0),Db(p,u,s)):oa(p,u,s)},Qa=function(p,a){nO(p);var s=mv(a),u=G_(s).concat(lS(s));return Nu(u,function(f){Up&&!jb(uO,s,f)||Fu(p,f,s[f])}),p},uO=function(p){var a=Tb(p),s=jb(lO,this,a);return!(this===al&&di(Zl,a)&&!di(Bm,a))&&(!(s||!di(this,a)||!di(Zl,a)||di(this,xi)&&this[xi][a])||s)},aS=function(p,a){var s=mv(p),u=Tb(a);if(s!==al||!di(Zl,u)||di(Bm,u)){var f=sO(s,u);return!f||!di(Zl,u)||di(s,xi)&&s[xi][u]||(f.enumerable=!0),f}},sS=function(p){var a=gv(mv(p)),s=[];return Nu(a,function(u){di(Zl,u)||di(Q_,u)||oS(s,u)}),s},lS=function(p){var a=p===al,s=gv(a?Bm:mv(p)),u=[];return Nu(s,function(f){!di(Zl,f)||a&&!di(al,f)||oS(u,Zl[f])}),u};Tf||(Af=function(){if(uk(Nm,this))throw new mk("Symbol is not a constructor");var p=arguments.length&&arguments[0]!==void 0?ck(arguments[0]):void 0,a=aO(p),s=function(u){this===al&&jb(s,Bm,u),di(this,xi)&&di(this[xi],a)&&(this[xi][a]=!1);var f=oO(1,u);try{Db(this,a,f)}catch(m){if(!(m instanceof hk))throw m;iS(this,a,f)}};return Up&&Jp&&Db(al,a,{configurable:!0,set:s}),Lb(a,p)},Mf(Nm=Af[Gp],"toString",function(){return nS(this).tag}),Mf(Af,"withoutSetter",function(p){return Lb(aO(p),p)}),K_.f=uO,J_.f=Fu,X_.f=Qa,vv.f=aS,pk.f=iO.f=sS,Lm.f=lS,eS.f=function(p){return Lb(Mb(p),p)},Up&&Y_(Nm,"description",{configurable:!0,get:function(){return nS(this).description}})),Pb({global:!0,constructor:!0,wrap:!0,forced:!Tf,sham:!Tf},{Symbol:Af}),Nu(G_(vk),function(p){dk(p)}),Pb({target:Rb,stat:!0,forced:!Tf},{useSetter:function(){Jp=!0},useSimple:function(){Jp=!1}}),Pb({target:"Object",stat:!0,forced:!Tf,sham:!Up},{create:function(p,a){return a===void 0?Cf(p):Qa(Cf(p),a)},defineProperty:Fu,defineProperties:Qa,getOwnPropertyDescriptor:aS}),Pb({target:"Object",stat:!0,forced:!Tf},{getOwnPropertyNames:sS}),tS(),rS(Af,Rb),Q_[xi]=!0;var cO=yc&&!!Symbol.for&&!!Symbol.keyFor,gk=Bt,uS=or,yk=Yo,bk=na,yv=Dl,cS=cO,Nb=yv("string-to-symbol-registry"),pS=yv("symbol-to-string-registry");gk({target:"Symbol",stat:!0,forced:!cS},{for:function(p){var a=bk(p);if(yk(Nb,a))return Nb[a];var s=uS("Symbol")(a);return Nb[a]=s,pS[s]=a,s}});var wk=Bt,ia=Yo,Ok=Yd,dS=Ki,xk=cO,bv=Dl("symbol-to-string-registry");wk({target:"Symbol",stat:!0,forced:!xk},{keyFor:function(p){if(!Ok(p))throw new TypeError(dS(p)+" is not a symbol");if(ia(bv,p))return bv[p]}});var Fb=Nc,Rf=he,wv=ee,pO=na,dO=N([].push),Bb=Bt,fO=or,hO=I,mO=Ve,Df=N,Ov=c,Lf=he,vO=Yd,fS=em,zb=function(p){if(Rf(p))return p;if(Fb(p)){for(var a=p.length,s=[],u=0;up.length)&&(a=p.length);for(var s=0,u=new Array(a);s1?arguments[1]:void 0)}});var NO=vo("Array").map,$S=ir,Yk=NO,Wm=Array.prototype,FO=function(p){var a=p.map;return p===Wm||$S(Wm,p)&&a===Wm.map?Yk:a},Kp=n(FO),es=Di,Ni=Yh;Bt({target:"Object",stat:!0,forced:c(function(){Ni(1)})},{keys:function(p){return Ni(es(p))}});var no=n(St.Object.keys),Qk=Bt,Fi=Date,ej=N(Fi.prototype.getTime);Qk({target:"Date",stat:!0},{now:function(){return ej(new Fi)}});var Hm=n(St.Date.now),e2=c,Bu=function(p,a){var s=[][p];return!!s&&e2(function(){s.call(null,a||function(){return 1},1)})},BO=Fc.forEach,ZS=Bu("forEach")?[].forEach:function(p){return BO(this,p,arguments.length>1?arguments[1]:void 0)};Bt({target:"Array",proto:!0,forced:[].forEach!==ZS},{forEach:ZS});var tj=vo("Array").forEach,qS=bs,rj=Yo,zc=ir,US=tj,Bi=Array.prototype,nj={DOMTokenList:!0,NodeList:!0},GS=function(p){var a=p.forEach;return p===Bi||zc(Bi,p)&&a===Bi.forEach||rj(nj,qS(p))?US:a},Fn=n(GS),JS=Bt,XS=Nc,oj=N([].reverse),Pv=[1,2];JS({target:"Array",proto:!0,forced:String(Pv)===String(Pv.reverse())},{reverse:function(){return XS(this)&&(this.length=this.length),oj(this)}});var ij=vo("Array").reverse,aj=ir,kv=ij,jv=Array.prototype,sj=function(p){var a=p.reverse;return p===jv||aj(jv,p)&&a===jv.reverse?kv:a},Yp=n(sj),zu=Ki,lj=TypeError,KS=function(p,a){if(!delete p[a])throw new lj("Cannot delete property "+zu(a)+" of "+zu(p))},uj=Bt,YS=Di,cj=Su,pj=Bl,dj=Ga,Tv=CS,QS=bb,fj=pv,e7=Hp,zO=KS,WO=dv("splice"),hj=Math.max,mj=Math.min;uj({target:"Array",proto:!0,forced:!WO},{splice:function(p,a){var s,u,f,m,b,P,k=YS(this),V=dj(k),G=cj(p,V),X=arguments.length;for(X===0?s=u=0:X===1?(s=0,u=V-G):(s=X-2,u=mj(hj(pj(a),0),V-G)),QS(V+s-u),f=fj(k,u),m=0;mV-u+s;m--)zO(k,m-1)}else if(s>u)for(m=V-u;m>G;m--)P=m+s-1,(b=m+u-1)in k?k[P]=k[b]:zO(k,P);for(m=0;m1?arguments[1]:void 0)}});var $O=vo("Array").includes,wj=Cr,Oj=ee,xj=ho("match"),Si=function(p){var a;return wj(p)&&((a=p[xj])!==void 0?!!a:Oj(p)==="RegExp")},_j=TypeError,Sj=ho("match"),ZO=Bt,t7=function(p){if(Si(p))throw new _j("The method doesn't accept regular expressions");return p},r7=Sr,n7=na,Ij=function(p){var a=/./;try{"/./"[p](a)}catch{try{return a[Sj]=!1,"/./"[p](a)}catch{}}return!1},Ej=N("".indexOf);ZO({target:"String",proto:!0,forced:!Ij("includes")},{includes:function(p){return!!~Ej(n7(r7(this)),n7(t7(p)),arguments.length>1?arguments[1]:void 0)}});var Cv=vo("String").includes,o7=ir,Pj=$O,kj=Cv,qO=Array.prototype,ei=String.prototype,i7=function(p){var a=p.includes;return p===qO||o7(qO,p)&&a===qO.includes?Pj:typeof p=="string"||p===ei||o7(ei,p)&&a===ei.includes?kj:a},Qp=n(i7),jj=Di,UO=xf,GO=wf;Bt({target:"Object",stat:!0,forced:c(function(){UO(1)}),sham:!GO},{getPrototypeOf:function(p){return UO(jj(p))}});var a7=St.Object.getPrototypeOf,JO=n(a7),Tj=Fc.filter;Bt({target:"Array",proto:!0,forced:!dv("filter")},{filter:function(p){return Tj(this,p,arguments.length>1?arguments[1]:void 0)}});var Cj=vo("Array").filter,Mj=ir,s7=Cj,XO=Array.prototype,KO=function(p){var a=p.filter;return p===XO||Mj(XO,p)&&a===XO.filter?s7:a},ts=n(KO),YO=` -\v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF`,Aj=Sr,QO=na,e6=YO,t6=N("".replace),l7=RegExp("^["+e6+"]+"),Rj=RegExp("(^|[^"+e6+"])["+e6+"]+$"),r6=function(p){return function(a){var s=QO(Aj(a));return 1&p&&(s=t6(s,l7,"")),2&p&&(s=t6(s,Rj,"$1")),s}},u7={start:r6(1),end:r6(2),trim:r6(3)},c7=i,Dj=c,Lj=N,p7=na,Nj=u7.trim,t2=YO,Mv=c7.parseInt,n6=c7.Symbol,o6=n6&&n6.iterator,d7=/^[+-]?0x/i,f7=Lj(d7.exec),i6=Mv(t2+"08")!==8||Mv(t2+"0x16")!==22||o6&&!Dj(function(){Mv(Object(o6))})?function(p,a){var s=Nj(p7(p));return Mv(s,a>>>0||(f7(d7,s)?16:10))}:Mv;Bt({global:!0,forced:parseInt!==i6},{parseInt:i6});var Ul=n(St.parseInt),a6=Bt,h7=Kh.indexOf,m7=Bu,js=de([].indexOf),Ts=!!js&&1/js([1],1,-0)<0;a6({target:"Array",proto:!0,forced:Ts||!m7("indexOf")},{indexOf:function(p){var a=arguments.length>1?arguments[1]:void 0;return Ts?js(this,p,a)||0:h7(this,p,a)}});var r2=vo("Array").indexOf,ed=ir,Wu=r2,n2=Array.prototype,Fj=function(p){var a=p.indexOf;return p===n2||ed(n2,p)&&a===n2.indexOf?Wu:a},ln=n(Fj);Bt({target:"Object",stat:!0,sham:!Se},{create:rl});var zf=St.Object,o2=function(p,a){return zf.create(p,a)},Hu=n(o2),Vm=St,v7=I;Vm.JSON||(Vm.JSON={stringify:JSON.stringify});var g7=function(p,a,s){return v7(Vm.JSON.stringify,null,arguments)},$m=n(g7),s6=typeof Bun=="function"&&Bun&&typeof Bun.version=="string",Wf=TypeError,Zm=i,Av=I,Rv=he,y7=s6,Bj=Mr,b7=em,Dv=function(p,a){if(ps,b=Rv(u)?u:l6(u),P=m?b7(arguments,s):[],k=m?function(){Av(b,this,P)}:b;return a?p(k,f):p(k)}:p},ti=Bt,aa=i,qm=zi(aa.setInterval,!0);ti({global:!0,bind:!0,forced:aa.setInterval!==qm},{setInterval:qm});var Lv=Bt,Um=i,Gm=zi(Um.setTimeout,!0);Lv({global:!0,bind:!0,forced:Um.setTimeout!==Gm},{setTimeout:Gm});var Ta=n(St.setTimeout),Vu=Di,td=Su,O7=Ga,u6=function(p){for(var a=Vu(this),s=O7(a),u=arguments.length,f=td(u>1?arguments[1]:void 0,s),m=u>2?arguments[2]:void 0,b=m===void 0?s:td(m,s);b>f;)a[f++]=p;return a};Bt({target:"Array",proto:!0},{fill:u6});var Nv,ll=vo("Array").fill,i2=ir,Hf=ll,a2=Array.prototype,c6=function(p){var a=p.fill;return p===a2||i2(a2,p)&&a===a2.fill?Hf:a},Jm=n(c6);function ul(){return ul=Object.assign||function(p){for(var a=1;a"u"?{style:{}}:document.createElement("div"),Zu=Math.round,Gl=Math.abs,Vf=Date.now;function Fv(p,a){for(var s,u,f=a[0].toUpperCase()+a.slice(1),m=0;m"u"?{}:window;var $f=Fv(s2.style,"touchAction"),Vc=$f!==void 0,_7="compute",S7="auto",l2="manipulation",rd="none",Km="pan-x",qu="pan-y",Ym=function(){if(!Vc)return!1;var p={},a=$u.CSS&&$u.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(s){return p[s]=!a||$u.CSS.supports("touch-action",s)}),p}(),I7="ontouchstart"in $u,p6=Fv($u,"PointerEvent")!==void 0,zj=I7&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),Bv="touch",zv="mouse",E7=25,sa=1,ri=4,rs=8,Wv=1,Uu=2,cl=4,Hv=8,$c=16,Jl=Uu|cl,Xl=Hv|$c,u2=Jl|Xl,Zf=["x","y"],Vv=["clientX","clientY"];function Cs(p,a,s){var u;if(p)if(p.forEach)p.forEach(a,s);else if(p.length!==void 0)for(u=0;u-1}var d6=function(){function p(s,u){this.manager=s,this.set(u)}var a=p.prototype;return a.set=function(s){s===_7&&(s=this.compute()),Vc&&this.manager.element.style&&Ym[s]&&(this.manager.element.style[$f]=s),this.actions=s.toLowerCase().trim()},a.update=function(){this.set(this.manager.options.touchAction)},a.compute=function(){var s=[];return Cs(this.manager.recognizers,function(u){$v(u.options.enable,[u])&&(s=s.concat(u.getTouchAction()))}),function(u){if(nd(u,rd))return rd;var f=nd(u,Km),m=nd(u,qu);return f&&m?rd:f||m?f?Km:qu:nd(u,l2)?l2:S7}(s.join(" "))},a.preventDefaults=function(s){var u=s.srcEvent,f=s.offsetDirection;if(this.manager.session.prevented)u.preventDefault();else{var m=this.actions,b=nd(m,rd)&&!Ym[rd],P=nd(m,qu)&&!Ym[qu],k=nd(m,Km)&&!Ym[Km];if(b){var V=s.pointers.length===1,G=s.distance<2,X=s.deltaTime<250;if(V&&G&&X)return}if(!k||!P)return b||P&&f&Jl||k&&f&Xl?this.preventSrc(u):void 0}},a.preventSrc=function(s){this.manager.session.prevented=!0,s.preventDefault()},p}();function c2(p,a){for(;p;){if(p===a)return!0;p=p.parentNode}return!1}function f6(p){var a=p.length;if(a===1)return{x:Zu(p[0].clientX),y:Zu(p[0].clientY)};for(var s=0,u=0,f=0;f=Gl(a)?p<0?Uu:cl:a<0?Hv:$c}function k7(p,a,s){return{x:a/p||0,y:s/p||0}}function Wj(p,a){var s=p.session,u=a.pointers,f=u.length;s.firstInput||(s.firstInput=h6(a)),f>1&&!s.firstMultiple?s.firstMultiple=h6(a):f===1&&(s.firstMultiple=!1);var m=s.firstInput,b=s.firstMultiple,P=b?b.center:m.center,k=a.center=f6(u);a.timeStamp=Vf(),a.deltaTime=a.timeStamp-m.timeStamp,a.angle=qv(P,k),a.distance=Zv(P,k),function(xe,Re){var Ue=Re.center,et=xe.offsetDelta||{},bt=xe.prevDelta||{},It=xe.prevInput||{};Re.eventType!==sa&&It.eventType!==ri||(bt=xe.prevDelta={x:It.deltaX||0,y:It.deltaY||0},et=xe.offsetDelta={x:Ue.x,y:Ue.y}),Re.deltaX=bt.x+(Ue.x-et.x),Re.deltaY=bt.y+(Ue.y-et.y)}(s,a),a.offsetDirection=P7(a.deltaX,a.deltaY);var V,G,X=k7(a.deltaTime,a.deltaX,a.deltaY);a.overallVelocityX=X.x,a.overallVelocityY=X.y,a.overallVelocity=Gl(X.x)>Gl(X.y)?X.x:X.y,a.scale=b?(V=b.pointers,Zv((G=u)[0],G[1],Vv)/Zv(V[0],V[1],Vv)):1,a.rotation=b?function(xe,Re){return qv(Re[1],Re[0],Vv)+qv(xe[1],xe[0],Vv)}(b.pointers,u):0,a.maxPointers=s.prevInput?a.pointers.length>s.prevInput.maxPointers?a.pointers.length:s.prevInput.maxPointers:a.pointers.length,function(xe,Re){var Ue,et,bt,It,fr=xe.lastInterval||Re,jr=Re.timeStamp-fr.timeStamp;if(Re.eventType!==rs&&(jr>E7||fr.velocity===void 0)){var Br=Re.deltaX-fr.deltaX,gr=Re.deltaY-fr.deltaY,tr=k7(jr,Br,gr);et=tr.x,bt=tr.y,Ue=Gl(tr.x)>Gl(tr.y)?tr.x:tr.y,It=P7(Br,gr),xe.lastInterval=Re}else Ue=fr.velocity,et=fr.velocityX,bt=fr.velocityY,It=fr.direction;Re.velocity=Ue,Re.velocityX=et,Re.velocityY=bt,Re.direction=It}(s,a);var se,ve=p.element,ge=a.srcEvent;c2(se=ge.composedPath?ge.composedPath()[0]:ge.path?ge.path[0]:ge.target,ve)&&(ve=se),a.target=ve}function m6(p,a,s){var u=s.pointers.length,f=s.changedPointers.length,m=a&sa&&u-f==0,b=a&(ri|rs)&&u-f==0;s.isFirst=!!m,s.isFinal=!!b,m&&(p.session={}),s.eventType=a,Wj(p,s),p.emit("hammer.input",s),p.recognize(s),p.session.prevInput=s}function Qm(p){return p.trim().split(/\s+/g)}function Uv(p,a,s){Cs(Qm(a),function(u){p.addEventListener(u,s,!1)})}function e0(p,a,s){Cs(Qm(a),function(u){p.removeEventListener(u,s,!1)})}function v6(p){var a=p.ownerDocument||p;return a.defaultView||a.parentWindow||window}var t0=function(){function p(s,u){var f=this;this.manager=s,this.callback=u,this.element=s.element,this.target=s.options.inputTarget,this.domHandler=function(m){$v(s.options.enable,[s])&&f.handler(m)},this.init()}var a=p.prototype;return a.handler=function(){},a.init=function(){this.evEl&&Uv(this.element,this.evEl,this.domHandler),this.evTarget&&Uv(this.target,this.evTarget,this.domHandler),this.evWin&&Uv(v6(this.element),this.evWin,this.domHandler)},a.destroy=function(){this.evEl&&e0(this.element,this.evEl,this.domHandler),this.evTarget&&e0(this.target,this.evTarget,this.domHandler),this.evWin&&e0(v6(this.element),this.evWin,this.domHandler)},p}();function od(p,a,s){if(p.indexOf&&!s)return p.indexOf(a);for(var u=0;uk[a]}):u.sort()),u}var Zc={touchstart:sa,touchmove:2,touchend:ri,touchcancel:rs},O6=function(p){function a(){var s;return a.prototype.evTarget="touchstart touchmove touchend touchcancel",(s=p.apply(this,arguments)||this).targetIds={},s}return Ca(a,p),a.prototype.handler=function(s){var u=Zc[s.type],f=Hj.call(this,s,u);f&&this.callback(this.manager,u,{pointers:f[0],changedPointers:f[1],pointerType:Bv,srcEvent:s})},a}(t0);function Hj(p,a){var s,u,f=id(p.touches),m=this.targetIds;if(a&(2|sa)&&f.length===1)return m[f[0].identifier]=!0,[f,f];var b=id(p.changedTouches),P=[],k=this.target;if(u=f.filter(function(V){return c2(V.target,k)}),a===sa)for(s=0;s-1&&u.splice(f,1)},$j)}}function T7(p,a){p&sa?(this.primaryTouch=a.changedPointers[0].identifier,p2.call(this,a)):p&(ri|rs)&&p2.call(this,a)}function C7(p){for(var a=p.srcEvent.clientX,s=p.srcEvent.clientY,u=0;u-1&&this.requireFail.splice(u,1),this},a.hasRequireFailures=function(){return this.requireFail.length>0},a.canRecognizeWith=function(s){return!!this.simultaneous[s.id]},a.emit=function(s){var u=this,f=this.state;function m(b){u.manager.emit(b,s)}f<8&&m(u.options.event+A7(f)),m(u.options.event),s.additionalEvent&&m(s.additionalEvent),f>=8&&m(u.options.event+A7(f))},a.tryEmit=function(s){if(this.canEmit())return this.emit(s);this.state=ad},a.canEmit=function(){for(var s=0;sf.threshold&&P&f.direction},s.attrTest=function(u){return Uf.prototype.attrTest.call(this,u)&&(2&this.state||!(2&this.state)&&this.directionTest(u))},s.emit=function(u){this.pX=u.deltaX,this.pY=u.deltaY;var f=_6(u.direction);f&&(u.additionalEvent=this.options.event+f),p.prototype.emit.call(this,u)},a}(Uf),Xv=function(p){function a(u){return u===void 0&&(u={}),p.call(this,ul({event:"swipe",threshold:10,velocity:.3,direction:Jl|Xl,pointers:1},u))||this}Ca(a,p);var s=a.prototype;return s.getTouchAction=function(){return Kl.prototype.getTouchAction.call(this)},s.attrTest=function(u){var f,m=this.options.direction;return m&(Jl|Xl)?f=u.overallVelocity:m&Jl?f=u.overallVelocityX:m&Xl&&(f=u.overallVelocityY),p.prototype.attrTest.call(this,u)&&m&u.offsetDirection&&u.distance>this.options.threshold&&u.maxPointers===this.options.pointers&&Gl(f)>this.options.velocity&&u.eventType&ri},s.emit=function(u){var f=_6(u.offsetDirection);f&&this.manager.emit(this.options.event+f,u),this.manager.emit(this.options.event,u)},a}(Uf),f2=function(p){function a(u){return u===void 0&&(u={}),p.call(this,ul({event:"pinch",threshold:0,pointers:2},u))||this}Ca(a,p);var s=a.prototype;return s.getTouchAction=function(){return[rd]},s.attrTest=function(u){return p.prototype.attrTest.call(this,u)&&(Math.abs(u.scale-1)>this.options.threshold||2&this.state)},s.emit=function(u){if(u.scale!==1){var f=u.scale<1?"in":"out";u.additionalEvent=this.options.event+f}p.prototype.emit.call(this,u)},a}(Uf),R7=function(p){function a(u){return u===void 0&&(u={}),p.call(this,ul({event:"rotate",threshold:0,pointers:2},u))||this}Ca(a,p);var s=a.prototype;return s.getTouchAction=function(){return[rd]},s.attrTest=function(u){return p.prototype.attrTest.call(this,u)&&(Math.abs(u.rotation)>this.options.threshold||2&this.state)},a}(Uf),Ma=function(p){function a(u){var f;return u===void 0&&(u={}),(f=p.call(this,ul({event:"press",pointers:1,time:251,threshold:9},u))||this)._timer=null,f._input=null,f}Ca(a,p);var s=a.prototype;return s.getTouchAction=function(){return[S7]},s.process=function(u){var f=this,m=this.options,b=u.pointers.length===m.pointers,P=u.distancem.time;if(this._input=u,!P||!b||u.eventType&(ri|rs)&&!k)this.reset();else if(u.eventType&sa)this.reset(),this._timer=setTimeout(function(){f.state=8,f.tryEmit()},m.time);else if(u.eventType&ri)return 8;return ad},s.reset=function(){clearTimeout(this._timer)},s.emit=function(u){this.state===8&&(u&&u.eventType&ri?this.manager.emit(this.options.event+"up",u):(this._input.timeStamp=Vf(),this.manager.emit(this.options.event,this._input)))},a}(Jv),D7={domEvents:!1,touchAction:_7,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},S6=[[R7,{enable:!1}],[f2,{enable:!1},["rotate"]],[Xv,{direction:Jl}],[Kl,{direction:Jl},["swipe"]],[d2],[d2,{event:"doubletap",taps:2},["tap"]],[Ma]];function I6(p,a){var s,u=p.element;u.style&&(Cs(p.options.cssProps,function(f,m){s=Fv(u.style,m),a?(p.oldCssProps[s]=u.style[s],u.style[s]=f):u.style[s]=p.oldCssProps[s]||""}),a||(p.oldCssProps={}))}var Wi=function(){function p(s,u){var f,m=this;this.options=Hc({},D7,u||{}),this.options.inputTarget=this.options.inputTarget||s,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=s,this.input=new((f=this).options.inputClass||(p6?b6:zj?O6:I7?M7:r0))(f,m6),this.touchAction=new d6(this,this.options.touchAction),I6(this,!0),Cs(this.options.recognizers,function(b){var P=m.add(new b[0](b[1]));b[2]&&P.recognizeWith(b[2]),b[3]&&P.requireFailure(b[3])},this)}var a=p.prototype;return a.set=function(s){return Hc(this.options,s),s.touchAction&&this.touchAction.update(),s.inputTarget&&(this.input.destroy(),this.input.target=s.inputTarget,this.input.init()),this},a.stop=function(s){this.session.stopped=s?2:1},a.recognize=function(s){var u=this.session;if(!u.stopped){var f;this.touchAction.preventDefaults(s);var m=this.recognizers,b=u.curRecognizer;(!b||b&&8&b.state)&&(u.curRecognizer=null,b=null);for(var P=0;P\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",re=window.console&&(window.console.warn||window.console.log);return re&&re.call(window.console,M,Z),y.apply(this,arguments)}}var z8=B8(function(y,x,C){for(var M=Object.keys(x),B=0;B=y.length?{done:!0}:{done:!1,value:y[M++]}},e:function(he){throw he},f:B}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var Z=!0,re=!1,ce;return{s:function(){C=C.call(y)},n:function(){var he=C.next();return Z=he.done,he},e:function(he){re=!0,ce=he},f:function(){try{!Z&&C.return!=null&&C.return()}finally{if(re)throw ce}}}}function V8(y,x){var C;if(y){if(typeof y=="string")return x4(y,x);var M=Gf(C=Object.prototype.toString.call(y)).call(C,8,-1);if(M==="Object"&&y.constructor&&(M=y.constructor.name),M==="Map"||M==="Set")return ll(y);if(M==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(M))return x4(y,x)}}function x4(y,x){(x==null||x>y.length)&&(x=y.length);for(var C=0,M=new Array(x);C1?C-1:0),B=1;B2){var M;return K2.apply(void 0,i0(M=[_4(x[0],x[1])]).call(M,Hi(Gf(x).call(x,2))))}var B=x[0],Z=x[1];if(B instanceof Date&&Z instanceof Date)return B.setTime(Z.getTime()),B;var re=H8(j6(Z)),ce;try{for(re.s();!(ce=re.n()).done;){var ae=ce.value;Object.prototype.propertyIsEnumerable.call(Z,ae)&&(Z[ae]===Ra?delete B[ae]:B[ae]!==null&&Z[ae]!==null&&typeof B[ae]=="object"&&typeof Z[ae]=="object"&&!Vi(B[ae])&&!Vi(Z[ae])?B[ae]=K2(B[ae],Z[ae]):B[ae]=S4(Z[ae]))}}catch(he){re.e(he)}finally{re.f()}return B}function S4(y){return Vi(y)?ei(y).call(y,function(x){return S4(x)}):typeof y=="object"&&y!==null?y instanceof Date?new Date(y.getTime()):K2({},y):y}function $8(y){for(var x=0,C=M6(y);xre;)ae=M(C,ce=B[re++]),ae!==void 0&&sI(Z,ce,ae);return Z}});var lI=or,bd=lI.Object.getOwnPropertyDescriptors,yg=bd,lC=yg,uC=lC,ki=n(uC),A4={exports:{}},P0=er,Da=Ve,uI=hm.f;P0({target:"Object",stat:!0,forced:Object.defineProperties!==uI,sham:!Da},{defineProperties:uI});var cC=or,n5=cC.Object,R4=A4.exports=function(x,C){return n5.defineProperties(x,C)};n5.defineProperties.sham&&(R4.sham=!0);var pC=A4.exports,o5=pC,cI=o5,dC=cI,fC=n(dC),i5=Mp,pI=n(i5);function k0(y){if(y===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return y}var wd=a8,hC=wd,ch=hC,mC=ch,D4=mC,a5=n(D4),L4=er,vC=bv;L4({target:"Object",stat:!0},{setPrototypeOf:vC});var gC=or,j0=gC.Object.setPrototypeOf,yC=j0,dI=yC,$i=dI,fI=$i,bC=fI,N4=bC,F4=N4,s5=n(F4),ph=qS,l5=ph,hl=l5,T0=hl,B4=T0,z4=n(B4);function bg(y,x){var C;return bg=s5?z4(C=s5).call(C):function(B,Z){return B.__proto__=Z,B},bg(y,x)}function dh(y,x){if(typeof x!="function"&&x!==null)throw new TypeError("Super expression must either be null or a function");y.prototype=a5(x&&x.prototype,{constructor:{value:y,writable:!0,configurable:!0}}),Qh(y,"prototype",{writable:!1}),x&&bg(y,x)}function u5(y,x){if(x&&(zm(x)==="object"||typeof x=="function"))return x;if(x!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return k0(y)}var wC=mT,hI=wC,mI=hI,wg=mI,Og=wg,vI=n(Og);function fh(y){var x;return fh=s5?z4(x=vI).call(x):function(M){return M.__proto__||vI(M)},fh(y)}var g={exports:{}},S={exports:{}};(function(y){var x=kO,C=zS;function M(B){"@babel/helpers - typeof";return y.exports=M=typeof x=="function"&&typeof C=="symbol"?function(Z){return typeof Z}:function(Z){return Z&&typeof x=="function"&&Z.constructor===x&&Z!==x.prototype?"symbol":typeof Z},y.exports.__esModule=!0,y.exports.default=y.exports,M(B)}y.exports=M,y.exports.__esModule=!0,y.exports.default=y.exports})(S);var E=S.exports,j=L6,W=j,U=W,ie=U,oe=ie,ue=so,we=Ql,Ee=Re,je=pi,Ze=function(y,x,C){for(var M=we(x),B=je.f,Z=Ee.f,re=0;reMe;Me++)if(Ne=Gr(y[Me]),Ne&&Sg(f5,Ne))return Ne;return new vh(!1)}he=OC(y,xe)}for(Pt=Z?y.next:he.next;!(br=mh(Pt,he)).done;){try{Ne=Gr(br.value)}catch(un){yI(he,"throw",un)}if(typeof Ne=="object"&&Ne&&Sg(f5,Ne))return Ne}return new vh(!1)},ct=Xa,dt=function(y,x){return y===void 0?arguments.length<2?"":x:ct(y)},Fr=er,rr=Xn,Zn=Gp,Io=bv,Na=Ze,as=Ka,xd=_a,_d=st,gh=_t,V$=c5,$$=nt,C0=dt,Z$=Kn,IY=Z$("toStringTag"),bI=Error,EY=[].push,h5=function(x,C){var M=rr(wI,this),B;Io?B=Io(new bI,M?Zn(this):wI):(B=M?this:as(wI),xd(B,IY,"Error")),C!==void 0&&xd(B,"message",C0(C)),V$(B,h5,B.stack,1),arguments.length>2&&gh(B,arguments[2]);var Z=[];return $$(x,EY,{that:Z}),xd(B,"errors",Z),B};Io?Io(h5,bI):Na(h5,bI,{name:!0});var wI=h5.prototype=as(bI.prototype,{constructor:_d(1,h5),message:_d(1,""),name:_d(1,"AggregateError")});Fr({global:!0,constructor:!0,arity:2},{AggregateError:h5});var PY=Nn,kY=ut,jY=Kn,xC=Ve,q$=jY("species"),m5=function(y){var x=PY(y);xC&&x&&!x[q$]&&kY(x,q$,{configurable:!0,get:function(){return this}})},TY=Xn,CY=TypeError,_C=function(y,x){if(TY(x,y))return y;throw new CY("Incorrect invocation")},U$=Bt,MY=vg,G$=Er,AY=Kn,RY=AY("species"),J$=function(y,x){var C=U$(y).constructor,M;return C===void 0||G$(M=U$(C)[RY])?x:MY(M)},DY=ya,X$=/(?:ipad|iphone|ipod).*applewebkit/i.test(DY),tu=c,SC=D,LY=xu,IC=Pe,K$=so,EC=d,Y$=Of,NY=hv,Q$=Gh,FY=Xu,BY=X$,zY=jv,V4=tu.setImmediate,PC=tu.clearImmediate,eZ=tu.process,kC=tu.Dispatch,tZ=tu.Function,rZ=tu.MessageChannel,nZ=tu.String,jC=0,$4={},oZ="onreadystatechange",v5,Ig,ht,lt;EC(function(){v5=tu.location});var Be=function(y){if(K$($4,y)){var x=$4[y];delete $4[y],x()}},Eg=function(y){return function(){Be(y)}},Yt=function(y){Be(y.data)},OI=function(y){tu.postMessage(nZ(y),v5.protocol+"//"+v5.host)};(!V4||!PC)&&(V4=function(x){FY(arguments.length,1);var C=IC(x)?x:tZ(x),M=NY(arguments,1);return $4[++jC]=function(){SC(C,void 0,M)},Ig(jC),jC},PC=function(x){delete $4[x]},zY?Ig=function(y){eZ.nextTick(Eg(y))}:kC&&kC.now?Ig=function(y){kC.now(Eg(y))}:rZ&&!BY?(ht=new rZ,lt=ht.port2,ht.port1.onmessage=Yt,Ig=LY(lt.postMessage,lt)):tu.addEventListener&&IC(tu.postMessage)&&!tu.importScripts&&v5&&v5.protocol!=="file:"&&!EC(OI)?(Ig=OI,tu.addEventListener("message",Yt,!1)):oZ in Q$("script")?Ig=function(y){Y$.appendChild(Q$("script"))[oZ]=function(){Y$.removeChild(this),Be(y)}}:Ig=function(y){setTimeout(Eg(y),0)});var xI={set:V4,clear:PC},TC=function(){this.head=null,this.tail=null};TC.prototype={add:function(y){var x={item:y,next:null},C=this.tail;C?C.next=x:this.head=x,this.tail=x},get:function(){var y=this.head;if(y){var x=this.head=y.next;return x===null&&(this.tail=null),y.item}}};var _I=TC,iZ=ya,WY=/ipad|iphone|ipod/i.test(iZ)&&typeof Pebble<"u",HY=ya,VY=/web0s(?!.*chrome)/i.test(HY),Ft=c,aZ=xu,p=Re.f,a=xI.set,s=_I,u=X$,f=WY,m=VY,b=jv,P=Ft.MutationObserver||Ft.WebKitMutationObserver,k=Ft.document,V=Ft.process,G=Ft.Promise,X=p(Ft,"queueMicrotask"),se=X&&X.value,me,ge,_e,Le,Ue;if(!se){var et=new s,bt=function(){var y,x;for(b&&(y=V.domain)&&y.exit();x=et.get();)try{x()}catch(C){throw et.head&&me(),C}y&&y.enter()};!u&&!b&&!m&&P&&k?(ge=!0,_e=k.createTextNode(""),new P(bt).observe(_e,{characterData:!0}),me=function(){_e.data=ge=!ge}):!f&&G&&G.resolve?(Le=G.resolve(void 0),Le.constructor=G,Ue=aZ(Le.then,Le),me=function(){Ue(bt)}):b?me=function(){V.nextTick(bt)}:(a=aZ(a,Ft),me=function(){a(bt)}),se=function(y){et.head||me(),et.add(y)}}var It=se,fr=function(y,x){try{arguments.length===1?console.error(y):console.error(y,x)}catch{}},jr=function(y){try{return{error:!1,value:y()}}catch(x){return{error:!0,value:x}}},Br=c,gr=Br.Promise,tr=typeof Deno=="object"&&Deno&&typeof Deno.version=="object",Qn=tr,yn=jv,oo=!Qn&&!yn&&typeof window=="object"&&typeof document=="object",Ao=c,Eo=gr,tc=Pe,Zi=Ys,SI=am,SRe=Kn,IRe=oo,ERe=tr,$Y=Rl,Eve=Eo&&Eo.prototype,PRe=SRe("species"),ZY=!1,Pve=tc(Ao.PromiseRejectionEvent),kRe=Zi("Promise",function(){var y=SI(Eo),x=y!==String(Eo);if(!x&&$Y===66||!(Eve.catch&&Eve.finally))return!0;if(!$Y||$Y<51||!/native code/.test(y)){var C=new Eo(function(Z){Z(1)}),M=function(Z){Z(function(){},function(){})},B=C.constructor={};if(B[PRe]=M,ZY=C.then(function(){})instanceof M,!ZY)return!0}return!x&&(IRe||ERe)&&!Pve}),CC={CONSTRUCTOR:kRe,REJECTION_EVENT:Pve,SUBCLASSING:ZY},M0={},kve=Qi,jRe=TypeError,TRe=function(y){var x,C;this.promise=new y(function(M,B){if(x!==void 0||C!==void 0)throw new jRe("Bad Promise constructor");x=M,C=B}),this.resolve=kve(x),this.reject=kve(C)};M0.f=function(y){return new TRe(y)};var CRe=er,sZ=jv,g5=c,MC=Qe,MRe=Se,ARe=Sf,RRe=m5,DRe=Qi,qY=Pe,LRe=Pr,NRe=_C,FRe=J$,jve=xI.set,UY=It,BRe=fr,zRe=jr,WRe=_I,Tve=Ru,GY=gr,JY=CC,Cve=M0,lZ="Promise",Mve=JY.CONSTRUCTOR,HRe=JY.REJECTION_EVENT;JY.SUBCLASSING;var XY=Tve.getterFor(lZ),VRe=Tve.set,$Re=GY&&GY.prototype,II=GY,KY=$Re,Ave=g5.TypeError,YY=g5.document,QY=g5.process,eQ=Cve.f,ZRe=eQ,qRe=!!(YY&&YY.createEvent&&g5.dispatchEvent),Rve="unhandledrejection",URe="rejectionhandled",Dve=0,Lve=1,GRe=2,tQ=1,Nve=2,uZ,Fve,JRe,Bve=function(y){var x;return LRe(y)&&qY(x=y.then)?x:!1},zve=function(y,x){var C=x.value,M=x.state===Lve,B=M?y.ok:y.fail,Z=y.resolve,re=y.reject,ce=y.domain,ae,he,xe;try{B?(M||(x.rejection===Nve&&KRe(x),x.rejection=tQ),B===!0?ae=C:(ce&&ce.enter(),ae=B(C),ce&&(ce.exit(),xe=!0)),ae===y.promise?re(new Ave("Promise-chain cycle")):(he=Bve(ae))?MC(he,ae,Z,re):Z(ae)):re(C)}catch(Me){ce&&!xe&&ce.exit(),re(Me)}},Wve=function(y,x){y.notified||(y.notified=!0,UY(function(){for(var C=y.reactions,M;M=C.get();)zve(M,y);y.notified=!1,x&&!y.rejection&&XRe(y)}))},Hve=function(y,x,C){var M,B;qRe?(M=YY.createEvent("Event"),M.promise=x,M.reason=C,M.initEvent(y,!1,!0),g5.dispatchEvent(M)):M={promise:x,reason:C},!HRe&&(B=g5["on"+y])?B(M):y===Rve&&BRe("Unhandled promise rejection",C)},XRe=function(y){MC(jve,g5,function(){var x=y.facade,C=y.value,M=Vve(y),B;if(M&&(B=zRe(function(){sZ?QY.emit("unhandledRejection",C,x):Hve(Rve,x,C)}),y.rejection=sZ||Vve(y)?Nve:tQ,B.error))throw B.value})},Vve=function(y){return y.rejection!==tQ&&!y.parent},KRe=function(y){MC(jve,g5,function(){var x=y.facade;sZ?QY.emit("rejectionHandled",x):Hve(URe,x,y.value)})},EI=function(y,x,C){return function(M){y(x,M,C)}},PI=function(y,x,C){y.done||(y.done=!0,C&&(y=C),y.value=x,y.state=GRe,Wve(y,!0))},rQ=function(y,x,C){if(!y.done){y.done=!0,C&&(y=C);try{if(y.facade===x)throw new Ave("Promise can't be resolved itself");var M=Bve(x);M?UY(function(){var B={done:!1};try{MC(M,x,EI(rQ,B,y),EI(PI,B,y))}catch(Z){PI(B,Z,y)}}):(y.value=x,y.state=Lve,Wve(y,!1))}catch(B){PI({done:!1},B,y)}}};Mve&&(II=function(x){NRe(this,KY),DRe(x),MC(uZ,this);var C=XY(this);try{x(EI(rQ,C),EI(PI,C))}catch(M){PI(C,M)}},KY=II.prototype,uZ=function(x){VRe(this,{type:lZ,done:!1,notified:!1,parent:!1,reactions:new WRe,rejection:!1,state:Dve,value:void 0})},uZ.prototype=MRe(KY,"then",function(x,C){var M=XY(this),B=eQ(FRe(this,II));return M.parent=!0,B.ok=qY(x)?x:!0,B.fail=qY(C)&&C,B.domain=sZ?QY.domain:void 0,M.state===Dve?M.reactions.add(B):UY(function(){zve(B,M)}),B.promise}),Fve=function(){var y=new uZ,x=XY(y);this.promise=y,this.resolve=EI(rQ,x),this.reject=EI(PI,x)},Cve.f=eQ=function(y){return y===II||y===JRe?new Fve(y):ZRe(y)}),CRe({global:!0,constructor:!0,wrap:!0,forced:Mve},{Promise:II}),ARe(II,lZ,!1,!0),RRe(lZ);var YRe=gr,QRe=qm,eDe=CC.CONSTRUCTOR,cZ=eDe||!QRe(function(y){YRe.all(y).then(void 0,function(){})}),tDe=er,rDe=Qe,nDe=Qi,oDe=M0,iDe=jr,aDe=nt,sDe=cZ;tDe({target:"Promise",stat:!0,forced:sDe},{all:function(x){var C=this,M=oDe.f(C),B=M.resolve,Z=M.reject,re=iDe(function(){var ce=nDe(C.resolve),ae=[],he=0,xe=1;aDe(x,function(Me){var ke=he++,Ne=!1;xe++,rDe(ce,C,Me).then(function(Pt){Ne||(Ne=!0,ae[ke]=Pt,--xe||B(ae))},Z)}),--xe||B(ae)});return re.error&&Z(re.value),M.promise}});var lDe=er,uDe=CC.CONSTRUCTOR,$ve=gr;$ve&&$ve.prototype,lDe({target:"Promise",proto:!0,forced:uDe,real:!0},{catch:function(y){return this.then(void 0,y)}});var cDe=er,pDe=Qe,dDe=Qi,fDe=M0,hDe=jr,mDe=nt,vDe=cZ;cDe({target:"Promise",stat:!0,forced:vDe},{race:function(x){var C=this,M=fDe.f(C),B=M.reject,Z=hDe(function(){var re=dDe(C.resolve);mDe(x,function(ce){pDe(re,C,ce).then(M.resolve,B)})});return Z.error&&B(Z.value),M.promise}});var gDe=er,yDe=Qe,bDe=M0,wDe=CC.CONSTRUCTOR;gDe({target:"Promise",stat:!0,forced:wDe},{reject:function(x){var C=bDe.f(this);return yDe(C.reject,void 0,x),C.promise}});var ODe=Bt,xDe=Pr,_De=M0,Zve=function(y,x){if(ODe(y),xDe(x)&&x.constructor===y)return x;var C=_De.f(y),M=C.resolve;return M(x),C.promise},SDe=er,IDe=Nn,EDe=Yo,PDe=gr,kDe=CC.CONSTRUCTOR,jDe=Zve,TDe=IDe("Promise"),CDe=!kDe;SDe({target:"Promise",stat:!0,forced:EDe},{resolve:function(x){return jDe(CDe&&this===TDe?PDe:this,x)}});var MDe=er,ADe=Qe,RDe=Qi,DDe=M0,LDe=jr,NDe=nt,FDe=cZ;MDe({target:"Promise",stat:!0,forced:FDe},{allSettled:function(x){var C=this,M=DDe.f(C),B=M.resolve,Z=M.reject,re=LDe(function(){var ce=RDe(C.resolve),ae=[],he=0,xe=1;NDe(x,function(Me){var ke=he++,Ne=!1;xe++,ADe(ce,C,Me).then(function(Pt){Ne||(Ne=!0,ae[ke]={status:"fulfilled",value:Pt},--xe||B(ae))},function(Pt){Ne||(Ne=!0,ae[ke]={status:"rejected",reason:Pt},--xe||B(ae))})}),--xe||B(ae)});return re.error&&Z(re.value),M.promise}});var BDe=er,zDe=Qe,WDe=Qi,HDe=Nn,VDe=M0,$De=jr,ZDe=nt,qDe=cZ,qve="No one promise resolved";BDe({target:"Promise",stat:!0,forced:qDe},{any:function(x){var C=this,M=HDe("AggregateError"),B=VDe.f(C),Z=B.resolve,re=B.reject,ce=$De(function(){var ae=WDe(C.resolve),he=[],xe=0,Me=1,ke=!1;ZDe(x,function(Ne){var Pt=xe++,br=!1;Me++,zDe(ae,C,Ne).then(function(Or){br||ke||(ke=!0,Z(Or))},function(Or){br||ke||(br=!0,he[Pt]=Or,--Me||re(new M(he,qve)))})}),--Me||re(new M(he,qve))});return ce.error&&re(ce.value),B.promise}});var UDe=er,nQ=gr,GDe=d,JDe=Nn,XDe=Pe,KDe=J$,Uve=Zve,YDe=nQ&&nQ.prototype,QDe=!!nQ&&GDe(function(){YDe.finally.call({then:function(){}},function(){})});UDe({target:"Promise",proto:!0,real:!0,forced:QDe},{finally:function(y){var x=KDe(this,JDe("Promise")),C=XDe(y);return this.then(C?function(M){return Uve(x,y()).then(function(){return M})}:y,C?function(M){return Uve(x,y()).then(function(){throw M})}:y)}});var eLe=or,tLe=eLe.Promise,rLe=tLe,nLe=rLe,oLe=er,iLe=M0;oLe({target:"Promise",stat:!0},{withResolvers:function(){var x=iLe.f(this);return{promise:x.promise,resolve:x.resolve,reject:x.reject}}});var aLe=nLe,sLe=aLe,lLe=er,uLe=M0,cLe=jr;lLe({target:"Promise",stat:!0,forced:!0},{try:function(y){var x=uLe.f(this),C=cLe(y);return(C.error?x.reject:x.resolve)(C.value),x.promise}});var pLe=sLe,dLe=pLe,fLe=dLe,hLe=N6,mLe=hLe,vLe=mLe,gLe=vLe,yLe=gLe;(function(y){var x=E.default,C=M1,M=kO,B=D4,Z=Og,re=oe,ce=Uv,ae=F4,he=fLe,xe=yLe,Me=x6;function ke(){y.exports=ke=function(){return Pt},y.exports.__esModule=!0,y.exports.default=y.exports;var Ne,Pt={},br=Object.prototype,Or=br.hasOwnProperty,Gr=C||function(Mt,ft,Ot){Mt[ft]=Ot.value},un=typeof M=="function"?M:{},Fa=un.iterator||"@@iterator",mi=un.asyncIterator||"@@asyncIterator",Fs=un.toStringTag||"@@toStringTag";function vi(Mt,ft,Ot){return C(Mt,ft,{value:Ot,enumerable:!0,configurable:!0,writable:!0}),Mt[ft]}try{vi({},"")}catch{vi=function(Ot,hr,on){return Ot[hr]=on}}function kg(Mt,ft,Ot,hr){var on=ft&&ft.prototype instanceof jI?ft:jI,Rr=B(on.prototype),qi=new _Q(hr||[]);return Gr(Rr,"_invoke",{value:EBe(Mt,Ot,qi)}),Rr}function tp(Mt,ft,Ot){try{return{type:"normal",arg:Mt.call(ft,Ot)}}catch(hr){return{type:"throw",arg:hr}}}Pt.wrap=kg;var b5="suspendedStart",kI="suspendedYield",w5="executing",R0="completed",Sd={};function jI(){}function vZ(){}function U4(){}var wQ={};vi(wQ,Fa,function(){return this});var OQ=Z,gZ=OQ&&OQ(OQ(SQ([])));gZ&&gZ!==br&&Or.call(gZ,Fa)&&(wQ=gZ);var TI=U4.prototype=jI.prototype=B(wQ);function jge(Mt){var ft;re(ft=["next","throw","return"]).call(ft,function(Ot){vi(Mt,Ot,function(hr){return this._invoke(Ot,hr)})})}function yZ(Mt,ft){function Ot(on,Rr,qi,ru){var nc=tp(Mt[on],Mt,Rr);if(nc.type!=="throw"){var G4=nc.arg,O5=G4.value;return O5&&x(O5)=="object"&&Or.call(O5,"__await")?ft.resolve(O5.__await).then(function(J4){Ot("next",J4,qi,ru)},function(J4){Ot("throw",J4,qi,ru)}):ft.resolve(O5).then(function(J4){G4.value=J4,qi(G4)},function(J4){return Ot("throw",J4,qi,ru)})}ru(nc.arg)}var hr;Gr(this,"_invoke",{value:function(Rr,qi){function ru(){return new ft(function(nc,G4){Ot(Rr,qi,nc,G4)})}return hr=hr?hr.then(ru,ru):ru()}})}function EBe(Mt,ft,Ot){var hr=b5;return function(on,Rr){if(hr===w5)throw new Error("Generator is already running");if(hr===R0){if(on==="throw")throw Rr;return{value:Ne,done:!0}}for(Ot.method=on,Ot.arg=Rr;;){var qi=Ot.delegate;if(qi){var ru=Tge(qi,Ot);if(ru){if(ru===Sd)continue;return ru}}if(Ot.method==="next")Ot.sent=Ot._sent=Ot.arg;else if(Ot.method==="throw"){if(hr===b5)throw hr=R0,Ot.arg;Ot.dispatchException(Ot.arg)}else Ot.method==="return"&&Ot.abrupt("return",Ot.arg);hr=w5;var nc=tp(Mt,ft,Ot);if(nc.type==="normal"){if(hr=Ot.done?R0:kI,nc.arg===Sd)continue;return{value:nc.arg,done:Ot.done}}nc.type==="throw"&&(hr=R0,Ot.method="throw",Ot.arg=nc.arg)}}}function Tge(Mt,ft){var Ot=ft.method,hr=Mt.iterator[Ot];if(hr===Ne)return ft.delegate=null,Ot==="throw"&&Mt.iterator.return&&(ft.method="return",ft.arg=Ne,Tge(Mt,ft),ft.method==="throw")||Ot!=="return"&&(ft.method="throw",ft.arg=new TypeError("The iterator does not provide a '"+Ot+"' method")),Sd;var on=tp(hr,Mt.iterator,ft.arg);if(on.type==="throw")return ft.method="throw",ft.arg=on.arg,ft.delegate=null,Sd;var Rr=on.arg;return Rr?Rr.done?(ft[Mt.resultName]=Rr.value,ft.next=Mt.nextLoc,ft.method!=="return"&&(ft.method="next",ft.arg=Ne),ft.delegate=null,Sd):Rr:(ft.method="throw",ft.arg=new TypeError("iterator result is not an object"),ft.delegate=null,Sd)}function PBe(Mt){var ft,Ot={tryLoc:Mt[0]};1 in Mt&&(Ot.catchLoc=Mt[1]),2 in Mt&&(Ot.finallyLoc=Mt[2],Ot.afterLoc=Mt[3]),ce(ft=this.tryEntries).call(ft,Ot)}function xQ(Mt){var ft=Mt.completion||{};ft.type="normal",delete ft.arg,Mt.completion=ft}function _Q(Mt){this.tryEntries=[{tryLoc:"root"}],re(Mt).call(Mt,PBe,this),this.reset(!0)}function SQ(Mt){if(Mt||Mt===""){var ft=Mt[Fa];if(ft)return ft.call(Mt);if(typeof Mt.next=="function")return Mt;if(!isNaN(Mt.length)){var Ot=-1,hr=function on(){for(;++Ot=0;--on){var Rr=this.tryEntries[on],qi=Rr.completion;if(Rr.tryLoc==="root")return hr("end");if(Rr.tryLoc<=this.prev){var ru=Or.call(Rr,"catchLoc"),nc=Or.call(Rr,"finallyLoc");if(ru&&nc){if(this.prev=0;--hr){var on=this.tryEntries[hr];if(on.tryLoc<=this.prev&&Or.call(on,"finallyLoc")&&this.prev=0;--Ot){var hr=this.tryEntries[Ot];if(hr.finallyLoc===ft)return this.complete(hr.completion,hr.afterLoc),xQ(hr),Sd}},catch:function(ft){for(var Ot=this.tryEntries.length-1;Ot>=0;--Ot){var hr=this.tryEntries[Ot];if(hr.tryLoc===ft){var on=hr.completion;if(on.type==="throw"){var Rr=on.arg;xQ(hr)}return Rr}}throw new Error("illegal catch attempt")},delegateYield:function(ft,Ot,hr){return this.delegate={iterator:SQ(ft),resultName:Ot,nextLoc:hr},this.method==="next"&&(this.arg=Ne),Sd}},Pt}y.exports=ke,y.exports.__esModule=!0,y.exports.default=y.exports})(g);var bLe=g.exports,pZ=bLe(),wLe=pZ;try{regeneratorRuntime=pZ}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=pZ:Function("r","regeneratorRuntime = r")(pZ)}var rc=n(wLe),Gve={exports:{}},OLe=d,xLe=OLe(function(){if(typeof ArrayBuffer=="function"){var y=new ArrayBuffer(8);Object.isExtensible(y)&&Object.defineProperty(y,"a",{value:8})}}),_Le=d,SLe=Pr,ILe=te,Jve=xLe,dZ=Object.isExtensible,ELe=_Le(function(){dZ(1)}),PLe=ELe||Jve?function(x){return!SLe(x)||Jve&&ILe(x)==="ArrayBuffer"?!1:dZ?dZ(x):!0}:dZ,kLe=d,jLe=!kLe(function(){return Object.isExtensible(Object.preventExtensions({}))}),TLe=er,CLe=q,MLe=yf,ALe=Pr,oQ=so,RLe=pi.f,Xve=_s,DLe=Pa,iQ=PLe,LLe=bu,NLe=jLe,Kve=!1,Pg=LLe("meta"),FLe=0,aQ=function(y){RLe(y,Pg,{value:{objectID:"O"+FLe++,weakData:{}}})},BLe=function(y,x){if(!ALe(y))return typeof y=="symbol"?y:(typeof y=="string"?"S":"P")+y;if(!oQ(y,Pg)){if(!iQ(y))return"F";if(!x)return"E";aQ(y)}return y[Pg].objectID},zLe=function(y,x){if(!oQ(y,Pg)){if(!iQ(y))return!0;if(!x)return!1;aQ(y)}return y[Pg].weakData},WLe=function(y){return NLe&&Kve&&iQ(y)&&!oQ(y,Pg)&&aQ(y),y},HLe=function(){VLe.enable=function(){},Kve=!0;var y=Xve.f,x=CLe([].splice),C={};C[Pg]=1,y(C).length&&(Xve.f=function(M){for(var B=y(M),Z=0,re=B.length;Z1?arguments[1]:void 0),Ne;Ne=Ne?Ne.next:Me.first;)for(ke(Ne.value,Ne.key,this);Ne&&Ne.removed;)Ne=Ne.previous},has:function(xe){return!!ae(this,xe)}}),tge(Z,C?{get:function(xe){var Me=ae(this,xe);return Me&&Me.value},set:function(xe,Me){return ce(this,xe===0?0:xe,Me)}}:{add:function(xe){return ce(this,xe=xe===0?0:xe,xe)}}),AC&&uNe(Z,"size",{configurable:!0,get:function(){return re(this).size}}),B},setStrong:function(y,x,C){var M=x+" Iterator",B=sQ(x),Z=sQ(M);hNe(y,x,function(re,ce){oge(this,{type:M,target:re,state:B(re),kind:ce,last:void 0})},function(){for(var re=Z(this),ce=re.kind,ae=re.last;ae&&ae.removed;)ae=ae.previous;return!re.target||!(re.last=ae=ae?ae.next:re.state.first)?(re.target=void 0,fZ(void 0,!0)):fZ(ce==="keys"?ae.key:ce==="values"?ae.value:[ae.key,ae.value],!1)},C?"entries":"values",!C,!0),mNe(x)}},vNe=ege,gNe=ige;vNe("Map",function(y){return function(){return y(this,arguments.length?arguments[0]:void 0)}},gNe);var yNe=or,bNe=yNe.Map,wNe=bNe,ONe=wNe,xNe=ONe,age=n(xNe),_Ne=er,SNe=Ef.some,INe=kv,ENe=INe("some");_Ne({target:"Array",proto:!0,forced:!ENe},{some:function(x){return SNe(this,x,arguments.length>1?arguments[1]:void 0)}});var PNe=Bi,kNe=PNe("Array","some"),jNe=Xn,TNe=kNe,lQ=Array.prototype,CNe=function(y){var x=y.some;return y===lQ||jNe(lQ,y)&&x===lQ.some?TNe:x},MNe=CNe,ANe=MNe,RNe=ANe,DNe=n(RNe),LNe=Bi,NNe=LNe("Array","keys"),FNe=NNe,BNe=FNe,zNe=Ea,WNe=so,HNe=Xn,VNe=BNe,uQ=Array.prototype,$Ne={DOMTokenList:!0,NodeList:!0},ZNe=function(y){var x=y.keys;return y===uQ||HNe(uQ,y)&&x===uQ.keys||WNe($Ne,zNe(y))?VNe:x},qNe=ZNe,Z4=n(qNe),sge=Sm,UNe=Math.floor,cQ=function(y,x){var C=y.length,M=UNe(C/2);return C<8?GNe(y,x):JNe(y,cQ(sge(y,0,M),x),cQ(sge(y,M),x),x)},GNe=function(y,x){for(var C=y.length,M=1,B,Z;M0;)y[Z]=y[--Z];Z!==M++&&(y[Z]=B)}return y},JNe=function(y,x,C,M){for(var B=x.length,Z=C.length,re=0,ce=0;re3)){if(uFe)return!0;if(mge)return mge<603;var y="",x,C,M,B;for(x=65;x<76;x++){switch(C=String.fromCharCode(x),x){case 66:case 69:case 70:case 72:M=3;break;case 68:case 71:M=4;break;default:M=2}for(B=0;B<47;B++)y5.push({k:C+B,v:M})}for(y5.sort(function(Z,re){return re.v-Z.v}),B=0;Bdge(C)?1:-1}};nFe({target:"Array",proto:!0,forced:hFe},{sort:function(x){x!==void 0&&oFe(x);var C=iFe(this);if(gge)return x===void 0?vge(C):vge(C,x);var M=[],B=pge(C),Z,re;for(re=0;rethis.max&&this.flush(),this._timeout!=null&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&typeof this.delay=="number"&&(this._timeout=sg(function(){C.flush()},this.delay))}},{key:"flush",value:function(){var C,M;eu(C=Q7(M=this._queue).call(M,0)).call(C,function(B){B.fn.apply(B.context||B.fn,B.args||[])})}}],[{key:"extend",value:function(C,M){var B=new y(M);if(C.flush!==void 0)throw new Error("Target object already has a property flush");C.flush=function(){B.flush()};var Z=[{name:"flush",original:void 0}];if(M&&M.replace)for(var re=0;re=y.length?{done:!0}:{done:!1,value:y[M++]}},e:function(he){throw he},f:B}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var Z=!0,re=!1,ce;return{s:function(){C=C.call(y)},n:function(){var he=C.next();return Z=he.done,he},e:function(he){re=!0,ce=he},f:function(){try{!Z&&C.return!=null&&C.return()}finally{if(re)throw ce}}}}function mBe(y,x){var C;if(y){if(typeof y=="string")return xge(y,x);var M=Gf(C=Object.prototype.toString.call(y)).call(C,8,-1);if(M==="Object"&&y.constructor&&(M=y.constructor.name),M==="Map"||M==="Set")return ll(y);if(M==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(M))return xge(y,x)}}function xge(y,x){(x==null||x>y.length)&&(x=y.length);for(var C=0,M=new Array(x);Cce&&(ce=Me,re=xe)}return re}},{key:"min",value:function(M){var B=gQ(this._pairs),Z=B.next();if(Z.done)return null;for(var re=Z.value[1],ce=M(Z.value[1],Z.value[0]);!(Z=B.next()).done;){var ae=Ma(Z.value,2),he=ae[0],xe=ae[1],Me=M(xe,he);Me=y.length?{done:!0}:{done:!1,value:y[M++]}},e:function(he){throw he},f:B}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var Z=!0,re=!1,ce;return{s:function(){C=C.call(y)},n:function(){var he=C.next();return Z=he.done,he},e:function(he){re=!0,ce=he},f:function(){try{!Z&&C.return!=null&&C.return()}finally{if(re)throw ce}}}}function vBe(y,x){var C;if(y){if(typeof y=="string")return Ige(y,x);var M=Gf(C=Object.prototype.toString.call(y)).call(C,8,-1);if(M==="Object"&&y.constructor&&(M=y.constructor.name),M==="Map"||M==="Set")return ll(y);if(M==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(M))return Ige(y,x)}}function Ige(y,x){(x==null||x>y.length)&&(x=y.length);for(var C=0,M=new Array(x);C"u"||!Qc||Qc.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Qc(Boolean,[],function(){})),!0}catch{return!1}}function bBe(y,x){return y[x]==null&&(y[x]=KFe()),y}var Ege=function(y){dh(C,y);var x=gBe(C);function C(M,B){var Z;return t(this,C),Z=x.call(this),sl(k0(Z),"_queue",null),M&&!Vi(M)&&(B=M,M=[]),Z._options=B||{},Z._data=new age,Z.length=0,Z._idProp=Z._options.fieldId||"id",M&&M.length&&Z.add(M),Z.setOptions(B),Z}return Bf(C,[{key:"idProp",get:function(){return this._idProp}},{key:"setOptions",value:function(B){B&&B.queue!==void 0&&(B.queue===!1?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=wge.extend(this,{replace:["add","update","remove"]})),B.queue&&typeof B.queue=="object"&&this._queue.setOptions(B.queue)))}},{key:"add",value:function(B,Z){var re=this,ce=[],ae;if(Vi(B)){var he=ei(B).call(B,function(ke){return ke[re._idProp]});if(DNe(he).call(he,function(ke){return re._data.has(ke)}))throw new Error("A duplicate id was found in the parameter array.");for(var xe=0,Me=B.length;xexe?1:hece)&&(re=xe,ce=Me)}}catch(ke){ae.e(ke)}finally{ae.f()}return re||null}},{key:"min",value:function(B){var Z,re=null,ce=null,ae=bQ(yge(Z=this._data).call(Z)),he;try{for(ae.s();!(he=ae.n()).done;){var xe=he.value,Me=xe[B];typeof Me=="number"&&(ce==null||Me=y.length?{done:!0}:{done:!1,value:y[M++]}},e:function(he){throw he},f:B}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var Z=!0,re=!1,ce;return{s:function(){C=C.call(y)},n:function(){var he=C.next();return Z=he.done,he},e:function(he){re=!0,ce=he},f:function(){try{!Z&&C.return!=null&&C.return()}finally{if(re)throw ce}}}}function OBe(y,x){var C;if(y){if(typeof y=="string")return Pge(y,x);var M=Gf(C=Object.prototype.toString.call(y)).call(C,8,-1);if(M==="Object"&&y.constructor&&(M=y.constructor.name),M==="Map"||M==="Set")return ll(y);if(M==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(M))return Pge(y,x)}}function Pge(y,x){(x==null||x>y.length)&&(x=y.length);for(var C=0,M=new Array(x);C"u"||!Qc||Qc.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Qc(Boolean,[],function(){})),!0}catch{return!1}}var SBe=function(y){dh(C,y);var x=xBe(C);function C(M,B){var Z,re;return t(this,C),re=x.call(this),sl(k0(re),"length",0),sl(k0(re),"_ids",new mZ),re._options=B||{},re._listener=zc(Z=re._onEvent).call(Z,k0(re)),re.setData(M),re}return Bf(C,[{key:"idProp",get:function(){return this.getDataSet().idProp}},{key:"setData",value:function(B){if(this._data){this._data.off&&this._data.off("*",this._listener);var Z=this._data.getIds({filter:Ii(this._options)}),re=this._data.get(Z);this._ids.clear(),this.length=0,this._trigger("remove",{items:Z,oldData:re})}if(B!=null){this._data=B;for(var ce=this._data.getIds({filter:Ii(this._options)}),ae=0,he=ce.length;ae{(function(e,t){typeof _Y=="object"&&typeof vRe<"u"?t(_Y,mRe()):typeof define=="function"&&define.amd?define(["exports","vis-data/peer/umd/vis-data.js"],t):t((e=typeof globalThis<"u"?globalThis:e||self).vis=e.vis||{},e.vis)})(_Y,function(e,t){var r=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function n(p){return p&&p.__esModule&&Object.prototype.hasOwnProperty.call(p,"default")?p.default:p}var o=function(p){return p&&p.Math===Math&&p},i=o(typeof globalThis=="object"&&globalThis)||o(typeof window=="object"&&window)||o(typeof self=="object"&&self)||o(typeof r=="object"&&r)||function(){return this}()||r||Function("return this")(),c=function(p){try{return!!p()}catch{return!0}},d=!c(function(){var p=function(){}.bind();return typeof p!="function"||p.hasOwnProperty("prototype")}),h=d,v=Function.prototype,w=v.apply,_=v.call,I=typeof Reflect=="object"&&Reflect.apply||(h?_.bind(w):function(){return _.apply(w,arguments)}),R=d,D=Function.prototype,F=D.call,A=R&&D.bind.bind(F,F),N=R?A:function(p){return function(){return F.apply(p,arguments)}},H=N,q=H({}.toString),Y=H("".slice),ee=function(p){return Y(q(p),8,-1)},ne=ee,te=N,de=function(p){if(ne(p)==="Function")return te(p)},fe=typeof document=="object"&&document.all,ye={all:fe,IS_HTMLDDA:fe===void 0&&fe!==void 0},Ie=ye.all,ve=ye.IS_HTMLDDA?function(p){return typeof p=="function"||p===Ie}:function(p){return typeof p=="function"},Oe={},be=!c(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),Te=d,Pe=Function.prototype.call,Re=Te?Pe.bind(Pe):function(){return Pe.apply(Pe,arguments)},Ae={},Ve={}.propertyIsEnumerable,Je=Object.getOwnPropertyDescriptor,pt=Je&&!Ve.call({1:2},1);Ae.f=pt?function(p){var a=Je(this,p);return!!a&&a.enumerable}:Ve;var Qe,Fe,Nt=function(p,a){return{enumerable:!(1&p),configurable:!(2&p),writable:!(4&p),value:a}},Vt=c,Ke=ee,st=Object,Tt=N("".split),wr=Vt(function(){return!st("z").propertyIsEnumerable(0)})?function(p){return Ke(p)==="String"?Tt(p,""):st(p)}:st,Rt=function(p){return p==null},Ut=Rt,vr=TypeError,Sr=function(p){if(Ut(p))throw new vr("Can't call method on "+p);return p},Er=wr,po=Sr,Pn=function(p){return Er(po(p))},Nr=ve,Wo=ye.all,Cr=ye.IS_HTMLDDA?function(p){return typeof p=="object"?p!==null:Nr(p)||p===Wo}:function(p){return typeof p=="object"?p!==null:Nr(p)},St={},tn=St,Ks=i,hs=ve,Pr=function(p){return hs(p)?p:void 0},or=function(p,a){return arguments.length<2?Pr(tn[p])||Pr(Ks[p]):tn[p]&&tn[p][a]||Ks[p]&&Ks[p][a]},ir=N({}.isPrototypeOf),Mr=typeof navigator<"u"&&String(navigator.userAgent)||"",Ur=i,ms=Mr,Nn=Ur.process,Di=Ur.Deno,Xn=Nn&&Nn.versions||Di&&Di.version,ya=Xn&&Xn.v8;ya&&(Fe=(Qe=ya.split("."))[0]>0&&Qe[0]<4?1:+(Qe[0]+Qe[1])),!Fe&&ms&&(!(Qe=ms.match(/Edge\/(\d+)/))||Qe[1]>=74)&&(Qe=ms.match(/Chrome\/(\d+)/))&&(Fe=+Qe[1]);var ba=Fe,wa=ba,g1=c,Kd=i.String,yc=!!Object.getOwnPropertySymbols&&!g1(function(){var p=Symbol("symbol detection");return!Kd(p)||!(Object(p)instanceof Symbol)||!Symbol.sham&&wa&&wa<41}),Za=yc&&!Symbol.sham&&typeof Symbol.iterator=="symbol",li=or,Op=ve,Rl=ir,Ct=Object,Yd=Za?function(p){return typeof p=="symbol"}:function(p){var a=li("Symbol");return Op(a)&&Rl(a.prototype,Ct(p))},Qd=String,Ki=function(p){try{return Qd(p)}catch{return"Object"}},fo=ve,rn=Ki,Hh=TypeError,pn=function(p){if(fo(p))return p;throw new Hh(rn(p)+" is not a function")},Ko=pn,z3=Rt,xp=function(p,a){var s=p[a];return z3(s)?void 0:Ko(s)},Co=Re,ui=ve,Yi=Cr,Hn=TypeError,qa={exports:{}},vs=i,gu=Object.defineProperty,Qi=function(p,a){try{gu(vs,p,{value:a,configurable:!0,writable:!0})}catch{vs[p]=a}return a},hy="__core-js_shared__",yu=i[hy]||Qi(hy,{}),bc=yu;(qa.exports=function(p,a){return bc[p]||(bc[p]=a!==void 0?a:{})})("versions",[]).push({version:"3.33.0",mode:"pure",copyright:"\xA9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE",source:"https://github.com/zloirock/core-js"});var Dl=qa.exports,Oa=Sr,wc=Object,Li=function(p){return wc(Oa(p))},ea=Li,my=N({}.hasOwnProperty),Yo=Object.hasOwn||function(p,a){return my(ea(p),a)},kr=N,y1=0,W3=Math.random(),vy=kr(1 .toString),ef=function(p){return"Symbol("+(p===void 0?"":p)+")_"+vy(++y1+W3,36)},tf=Dl,gy=Yo,Vh=ef,yy=yc,_p=Za,Sp=i.Symbol,Ll=tf("wks"),ci=_p?Sp.for||Sp:Sp&&Sp.withoutSetter||Vh,ho=function(p){return gy(Ll,p)||(Ll[p]=yy&&gy(Sp,p)?Sp[p]:ci("Symbol."+p)),Ll[p]},ao=Re,by=Cr,so=Yd,wy=xp,rf=function(p,a){var s,u;if(a==="string"&&ui(s=p.toString)&&!Yi(u=Co(s,p))||ui(s=p.valueOf)&&!Yi(u=Co(s,p))||a!=="string"&&ui(s=p.toString)&&!Yi(u=Co(s,p)))return u;throw new Hn("Can't convert object to primitive value")},$h=TypeError,Oy=ho("toPrimitive"),bu=function(p,a){if(!by(p)||so(p))return p;var s,u=wy(p,Oy);if(u){if(a===void 0&&(a="default"),s=ao(u,p,a),!by(s)||so(s))return s;throw new $h("Can't convert object to primitive value")}return a===void 0&&(a="number"),rf(p,a)},Nl=Yd,Zh=function(p){var a=bu(p,"string");return Nl(a)?a:a+""},Ip=Cr,qh=i.document,b1=Ip(qh)&&Ip(qh.createElement),xy=function(p){return b1?qh.createElement(p):{}},wu=xy,Uh=!be&&!c(function(){return Object.defineProperty(wu("div"),"a",{get:function(){return 7}}).a!==7}),_y=be,Kn=Re,H3=Ae,w1=Nt,Sy=Pn,V3=Zh,$3=Yo,Z3=Uh,Iy=Object.getOwnPropertyDescriptor;Oe.f=_y?Iy:function(p,a){if(p=Sy(p),a=V3(a),Z3)try{return Iy(p,a)}catch{}if($3(p,a))return w1(!Kn(H3.f,p,a),p[a])};var Ey=c,q3=ve,U3=/#|\.prototype\./,nf=function(p,a){var s=G3[Ou(p)];return s===O1||s!==Py&&(q3(a)?Ey(a):!!a)},Ou=nf.normalize=function(p){return String(p).replace(U3,".").toLowerCase()},G3=nf.data={},Py=nf.NATIVE="N",O1=nf.POLYFILL="P",J3=nf,Gh=pn,x1=d,_1=de(de.bind),of=function(p,a){return Gh(p),a===void 0?p:x1?_1(p,a):function(){return p.apply(a,arguments)}},mo={},wi=be&&c(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),ky=Cr,X3=String,K3=TypeError,xa=function(p){if(ky(p))return p;throw new K3(X3(p)+" is not an object")},ta=be,ro=Uh,af=wi,Fl=xa,sf=Zh,S1=TypeError,I1=Object.defineProperty,Oc=Object.getOwnPropertyDescriptor,Ep="enumerable",Ua="configurable",xc="writable";mo.f=ta?af?function(p,a,s){if(Fl(p),a=sf(a),Fl(s),typeof p=="function"&&a==="prototype"&&"value"in s&&xc in s&&!s[xc]){var u=Oc(p,a);u&&u[xc]&&(p[a]=s.value,s={configurable:Ua in s?s[Ua]:u[Ua],enumerable:Ep in s?s[Ep]:u[Ep],writable:!1})}return I1(p,a,s)}:I1:function(p,a,s){if(Fl(p),a=sf(a),Fl(s),ro)try{return I1(p,a,s)}catch{}if("get"in s||"set"in s)throw new S1("Accessors not supported");return"value"in s&&(p[a]=s.value),p};var E1=mo,Ys=Nt,_c=be?function(p,a,s){return E1.f(p,a,Ys(1,s))}:function(p,a,s){return p[a]=s,p},ra=i,Jh=I,Y3=de,xu=ve,pi=Oe.f,P1=J3,Pp=St,Sc=of,kp=_c,_u=Yo,jy=function(p){var a=function(s,u,f){if(this instanceof a){switch(arguments.length){case 0:return new p;case 1:return new p(s);case 2:return new p(s,u)}return new p(s,u,f)}return Jh(p,this,arguments)};return a.prototype=p.prototype,a},Bt=function(p,a){var s,u,f,m,b,P,k,V,G,X=p.target,se=p.global,me=p.stat,ge=p.proto,_e=se?ra:me?ra[X]:(ra[X]||{}).prototype,Le=se?Pp:Pp[X]||kp(Pp,X,{})[X],Ue=Le.prototype;for(m in a)u=!(s=P1(se?m:X+(me?".":"#")+m,p.forced))&&_e&&_u(_e,m),P=Le[m],u&&(k=p.dontCallGetSet?(G=pi(_e,m))&&G.value:_e[m]),b=u&&k?k:a[m],u&&typeof P==typeof b||(V=p.bind&&u?Sc(b,ra):p.wrap&&u?jy(b):ge&&xu(b)?Y3(b):b,(p.sham||b&&b.sham||P&&P.sham)&&kp(V,"sham",!0),kp(Le,m,V),ge&&(_u(Pp,f=X+"Prototype")||kp(Pp,f,{}),kp(Pp[f],m,b),p.real&&Ue&&(s||!Ue[m])&&kp(Ue,m,b)))},ar=Math.ceil,Q3=Math.floor,ew=Math.trunc||function(p){var a=+p;return(a>0?Q3:ar)(a)},Bl=function(p){var a=+p;return a!=a||a===0?0:ew(a)},k1=Bl,jp=Math.max,Xh=Math.min,Su=function(p,a){var s=k1(p);return s<0?jp(s+a,0):Xh(s,a)},Tp=Bl,lf=Math.min,Qs=function(p){return p>0?lf(Tp(p),9007199254740991):0},Ga=function(p){return Qs(p.length)},tw=Pn,rw=Su,_a=Ga,uf=function(p){return function(a,s,u){var f,m=tw(a),b=_a(m),P=rw(u,b);if(p&&s!=s){for(;b>P;)if((f=m[P++])!=f)return!0}else for(;b>P;P++)if((p||P in m)&&m[P]===s)return p||P||0;return!p&&-1}},Kh={includes:uf(!0),indexOf:uf(!1)},kn={},Ni=Yo,nw=Pn,cf=Kh.indexOf,Cp=kn,Ty=N([].push),Ic=function(p,a){var s,u=nw(p),f=0,m=[];for(s in u)!Ni(Cp,s)&&Ni(u,s)&&Ty(m,s);for(;a.length>f;)Ni(u,s=a[f++])&&(~cf(m,s)||Ty(m,s));return m},Sa=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Cy=Ic,er=Sa,Yh=Object.keys||function(p){return Cy(p,er)},Iu={};Iu.f=Object.getOwnPropertySymbols;var zl=be,j1=N,My=Re,Ay=c,gs=Yh,T1=Iu,Mp=Ae,C1=Li,Ry=wr,Ap=Object.assign,Dy=Object.defineProperty,M1=j1([].concat),Qh=!Ap||Ay(function(){if(zl&&Ap({b:1},Ap(Dy({},"a",{enumerable:!0,get:function(){Dy(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var p={},a={},s=Symbol("assign detection"),u="abcdefghijklmnopqrst";return p[s]=7,u.split("").forEach(function(f){a[f]=f}),Ap({},p)[s]!==7||gs(Ap({},a)).join("")!==u})?function(p,a){for(var s=C1(p),u=arguments.length,f=1,m=T1.f,b=Mp.f;u>f;)for(var P,k=Ry(arguments[f++]),V=m?M1(gs(k),m(k)):gs(k),G=V.length,X=0;G>X;)P=V[X++],zl&&!My(b,k,P)||(s[P]=k[P]);return s}:Ap,Ly=Qh;Bt({target:"Object",stat:!0,arity:2,forced:Object.assign!==Ly},{assign:Ly});var Cn=n(St.Object.assign),em=N([].slice),A1=N,R1=pn,Ny=Cr,tm=Yo,Rp=em,Ja=d,ys=Function,D1=A1([].concat),Ia=A1([].join),rm={},L1=Ja?ys.bind:function(p){var a=R1(this),s=a.prototype,u=Rp(arguments,1),f=function(){var m=D1(u,Rp(arguments));return this instanceof f?function(b,P,k){if(!tm(rm,P)){for(var V=[],G=0;G=.1;)(ge=+m[X++%b])>G&&(ge=G),me=Math.sqrt(ge*ge/(1+V*V)),a+=me=P<0?-me:me,s+=V*me,se===!0?p.lineTo(a,s):p.moveTo(a,s),G-=ge,se=!se}var By={circle:N1,dashedLine:z1,database:B1,diamond:function(p,a,s,u){p.beginPath(),p.lineTo(a,s+u),p.lineTo(a+u,s),p.lineTo(a,s-u),p.lineTo(a-u,s),p.closePath()},ellipse:F1,ellipse_vis:F1,hexagon:function(p,a,s,u){p.beginPath();var f=2*Math.PI/6;p.moveTo(a+u,s);for(var m=1;m<6;m++)p.lineTo(a+u*Math.cos(f*m),s+u*Math.sin(f*m));p.closePath()},roundRect:pf,square:function(p,a,s,u){p.beginPath(),p.rect(a-u,s-u,2*u,2*u),p.closePath()},star:function(p,a,s,u){p.beginPath(),s+=.1*(u*=.82);for(var f=0;f<10;f++){var m=f%2==0?1.3*u:.5*u;p.lineTo(a+m*Math.sin(2*f*Math.PI/10),s-m*Math.cos(2*f*Math.PI/10))}p.closePath()},triangle:function(p,a,s,u){p.beginPath(),s+=.275*(u*=1.15);var f=2*u,m=f/2,b=Math.sqrt(3)/6*f,P=Math.sqrt(f*f-m*m);p.moveTo(a,s-(P-b)),p.lineTo(a+m,s+b),p.lineTo(a-m,s+b),p.lineTo(a,s-(P-b)),p.closePath()},triangleDown:function(p,a,s,u){p.beginPath(),s-=.275*(u*=1.15);var f=2*u,m=f/2,b=Math.sqrt(3)/6*f,P=Math.sqrt(f*f-m*m);p.moveTo(a,s+(P-b)),p.lineTo(a+m,s-b),p.lineTo(a-m,s-b),p.lineTo(a,s+(P-b)),p.closePath()}},zy={exports:{}};(function(p){function a(s){if(s)return function(u){for(var f in a.prototype)u[f]=a.prototype[f];return u}(s)}p.exports=a,a.prototype.on=a.prototype.addEventListener=function(s,u){return this._callbacks=this._callbacks||{},(this._callbacks["$"+s]=this._callbacks["$"+s]||[]).push(u),this},a.prototype.once=function(s,u){function f(){this.off(s,f),u.apply(this,arguments)}return f.fn=u,this.on(s,f),this},a.prototype.off=a.prototype.removeListener=a.prototype.removeAllListeners=a.prototype.removeEventListener=function(s,u){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var f,m=this._callbacks["$"+s];if(!m)return this;if(arguments.length==1)return delete this._callbacks["$"+s],this;for(var b=0;b=P?p?"":void 0:(u=H1(m,b))<55296||u>56319||b+1===P||(f=H1(m,b+1))<56320||f>57343?p?lm(m,b):u:p?$y(m,b,b+2):f-56320+(u-55296<<10)+65536}},$1={codeAt:V1(!1),charAt:V1(!0)},sw=ve,Z1=i.WeakMap,mf=sw(Z1)&&/native code/.test(String(Z1)),lw=ef,vf=Dl("keys"),um=function(p){return vf[p]||(vf[p]=lw(p))},uw=mf,Zy=i,cw=Cr,ku=_c,cm=Yo,q1=yu,qy=um,pm=kn,Uy="Object already initialized",U1=Zy.TypeError,gf=Zy.WeakMap;if(uw||q1.state){var ws=q1.state||(q1.state=new gf);ws.get=ws.get,ws.has=ws.has,ws.set=ws.set,om=function(p,a){if(ws.has(p))throw new U1(Uy);return a.facade=p,ws.set(p,a),a},Pc=function(p){return ws.get(p)||{}},im=function(p){return ws.has(p)}}else{var Bp=qy("state");pm[Bp]=!0,om=function(p,a){if(cm(p,Bp))throw new U1(Uy);return a.facade=p,ku(p,Bp,a),a},Pc=function(p){return cm(p,Bp)?p[Bp]:{}},im=function(p){return cm(p,Bp)}}var el={set:om,get:Pc,has:im,enforce:function(p){return im(p)?Pc(p):om(p,{})},getterFor:function(p){return function(a){var s;if(!cw(a)||(s=Pc(a)).type!==p)throw new U1("Incompatible receiver, "+p+" required");return s}}},jc=be,zp=Yo,dm=Function.prototype,G1=jc&&Object.getOwnPropertyDescriptor,fm=zp(dm,"name"),Gy={EXISTS:fm,PROPER:fm&&function(){}.name==="something",CONFIGURABLE:fm&&(!jc||jc&&G1(dm,"name").configurable)},Tc={},Cc=be,Xa=wi,hm=mo,pw=xa,mm=Pn,Jy=Yh;Tc.f=Cc&&!Xa?Object.defineProperties:function(p,a){pw(p);for(var s,u=mm(a),f=Jy(a),m=f.length,b=0;m>b;)hm.f(p,s=f[b++],u[s]);return p};var Mc,dw=or("document","documentElement"),ju=xa,Xy=Tc,vm=Sa,fw=kn,yf=dw,ot=xy,bf="prototype",gm="script",Ac=um("IE_PROTO"),dn=function(){},Os=function(p){return"<"+gm+">"+p+""},ym=function(p){p.write(Os("")),p.close();var a=p.parentWindow.Object;return p=null,a},tl=function(){try{Mc=new ActiveXObject("htmlfile")}catch{}var p,a,s;tl=typeof document<"u"?document.domain&&Mc?ym(Mc):(a=ot("iframe"),s="java"+gm+":",a.style.display="none",yf.appendChild(a),a.src=String(s),(p=a.contentWindow.document).open(),p.write(Os("document.F=Object")),p.close(),p.F):ym(Mc);for(var u=vm.length;u--;)delete tl[bf][vm[u]];return tl()};fw[Ac]=!0;var xs,Ky,Tu,rl=Object.create||function(p,a){var s;return p!==null?(dn[bf]=ju(p),s=new dn,dn[bf]=null,s[Ac]=p):s=tl(),a===void 0?s:Xy.f(s,a)},wf=!c(function(){function p(){}return p.prototype.constructor=null,Object.getPrototypeOf(new p)!==p.prototype}),nl=Yo,hw=ve,Yy=Li,mw=wf,lo=um("IE_PROTO"),Of=Object,vw=Of.prototype,xf=mw?Of.getPrototypeOf:function(p){var a=Yy(p);if(nl(a,lo))return a[lo];var s=a.constructor;return hw(s)&&a instanceof s?s.prototype:a instanceof Of?vw:null},bm=_c,Wl=function(p,a,s,u){return u&&u.enumerable?p[a]=s:bm(p,a,s),p},Hl=c,Qy=ve,eb=Cr,gw=rl,tb=xf,yw=Wl,J1=ho("iterator"),wm=!1;[].keys&&("next"in(Tu=[].keys())?(Ky=tb(tb(Tu)))!==Object.prototype&&(xs=Ky):wm=!0);var Cu=!eb(xs)||Hl(function(){var p={};return xs[J1].call(p)!==p});Qy((xs=Cu?{}:gw(xs))[J1])||yw(xs,J1,function(){return this});var Om={IteratorPrototype:xs,BUGGY_SAFARI_ITERATORS:wm},xm=bs,rb=am?{}.toString:function(){return"[object "+xm(this)+"]"},_m=am,Mu=mo.f,nb=_c,X1=Yo,Wp=rb,_f=ho("toStringTag"),Ka=function(p,a,s,u){if(p){var f=s?p:p.prototype;X1(f,_f)||Mu(f,_f,{configurable:!0,value:a}),u&&!_m&&nb(f,"toString",Wp)}},_s={},K1=Om.IteratorPrototype,bw=rl,Qo=Nt,Pa=Ka,Vl=_s,ww=function(){return this},Ow=N,xw=pn,_w=ve,Sm=String,Rc=TypeError,Ss=function(p,a,s){try{return Ow(xw(Object.getOwnPropertyDescriptor(p,a)[s]))}catch{}},Ar=xa,O=function(p){if(typeof p=="object"||_w(p))return p;throw new Rc("Can't set "+Sm(p)+" as a prototype")},L=Object.setPrototypeOf||("__proto__"in{}?function(){var p,a=!1,s={};try{(p=Ss(Object.prototype,"__proto__","set"))(s,[]),a=s instanceof Array}catch{}return function(u,f){return Ar(u),O(f),a?p(u,f):u.__proto__=f,u}}():void 0),$=Bt,K=Re,le=Gy,Se=function(p,a,s,u){var f=a+" Iterator";return p.prototype=bw(K1,{next:Qo(+!u,s)}),Pa(p,f,!1,!0),Vl[f]=ww,p},He=xf,ut=Ka,cr=Wl,Vr=_s,Ho=Om,Is=le.PROPER,Es=Ho.BUGGY_SAFARI_ITERATORS,Y1=ho("iterator"),Yn="keys",Q1="values",u_="entries",c_=function(){return this},Sw=function(p,a,s,u,f,m,b){Se(s,a,u);var P,k,V,G=function(Ue){if(Ue===f&&_e)return _e;if(!Es&&Ue&&Ue in me)return me[Ue];switch(Ue){case Yn:case Q1:case u_:return function(){return new s(this,Ue)}}return function(){return new s(this)}},X=a+" Iterator",se=!1,me=p.prototype,ge=me[Y1]||me["@@iterator"]||f&&me[f],_e=!Es&&ge||G(f),Le=a==="Array"&&me.entries||ge;if(Le&&(P=He(Le.call(new p)))!==Object.prototype&&P.next&&(ut(P,X,!0,!0),Vr[X]=c_),Is&&f===Q1&&ge&&ge.name!==Q1&&(se=!0,_e=function(){return K(ge,this)}),f)if(k={values:G(Q1),keys:m?_e:G(Yn),entries:G(u_)},b)for(V in k)(Es||se||!(V in me))&&cr(me,V,k[V]);else $({target:a,proto:!0,forced:Es||se},k);return b&&me[Y1]!==_e&&cr(me,Y1,_e,{name:f}),Vr[a]=_e,k},ev=function(p,a){return{value:p,done:a}},p_=$1.charAt,HP=na,Iw=el,d_=Sw,f_=ev,ob="String Iterator",h_=Iw.set,m_=Iw.getterFor(ob);d_(String,"String",function(p){h_(this,{type:ob,string:HP(p),index:0})},function(){var p,a=m_(this),s=a.string,u=a.index;return u>=s.length?f_(void 0,!0):(p=p_(s,u),a.index+=p.length,f_(p,!1))});var VP=Re,Ew=xa,Sf=xp,v_=function(p,a,s){var u,f;Ew(p);try{if(!(u=Sf(p,"return"))){if(a==="throw")throw s;return s}u=VP(u,p)}catch(m){f=!0,u=m}if(a==="throw")throw s;if(f)throw u;return Ew(u),s},$P=xa,Pw=v_,ib=_s,Ya=ho("iterator"),tv=Array.prototype,Im=function(p){return p!==void 0&&(ib.Array===p||tv[Ya]===p)},ZP=ve,Em=yu,Ps=N(Function.toString);ZP(Em.inspectSource)||(Em.inspectSource=function(p){return Ps(p)});var If=Em.inspectSource,ab=N,g_=c,sb=ve,kw=bs,rv=If,ol=function(){},nv=[],y_=or("Reflect","construct"),lb=/^\s*(?:class|function)\b/,Oi=ab(lb.exec),Au=!lb.test(ol),Ru=function(p){if(!sb(p))return!1;try{return y_(ol,nv,p),!0}catch{return!1}},ub=function(p){if(!sb(p))return!1;switch(kw(p)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return Au||!!Oi(lb,rv(p))}catch{return!0}};ub.sham=!0;var ov=!y_||g_(function(){var p;return Ru(Ru.call)||!Ru(Object)||!Ru(function(){p=!0})||p})?ub:Ru,jw=Zh,Tw=mo,cb=Nt,Hp=function(p,a,s){var u=jw(a);u in p?Tw.f(p,u,cb(0,s)):p[u]=s},Cw=bs,Du=xp,Ef=Rt,iv=_s,Pm=ho("iterator"),km=function(p){if(!Ef(p))return Du(p,Pm)||Du(p,"@@iterator")||iv[Cw(p)]},qP=Re,jm=pn,Tm=xa,b_=Ki,xi=km,Mw=TypeError,pb=function(p,a){var s=arguments.length<2?xi(p):a;if(jm(s))return Tm(qP(s,p));throw new Mw(b_(p)+" is not iterable")},db=of,Aw=Re,UP=Li,Rw=function(p,a,s,u){try{return u?a($P(s)[0],s[1]):a(s)}catch(f){Pw(p,"throw",f)}},av=Im,Dw=ov,sv=Ga,fb=Hp,GP=pb,Lw=km,Nw=Array,Fw=ho("iterator"),Bw=!1;try{var zw=0,Ww={next:function(){return{done:!!zw++}},return:function(){Bw=!0}};Ww[Fw]=function(){return this},Array.from(Ww,function(){throw 2})}catch{}var Hw=function(p){var a=UP(p),s=Dw(this),u=arguments.length,f=u>1?arguments[1]:void 0,m=f!==void 0;m&&(f=db(f,u>2?arguments[2]:void 0));var b,P,k,V,G,X,se=Lw(a),me=0;if(!se||this===Nw&&av(se))for(b=sv(a),P=s?new this(b):Nw(b);b>me;me++)X=m?f(a[me],me):a[me],fb(P,me,X);else for(G=(V=GP(a,se)).next,P=s?new this:[];!(k=Aw(G,V)).done;me++)X=m?Rw(V,f,[k.value,me],!0):k.value,fb(P,me,X);return P.length=me,P},lv=function(p,a){try{if(!a&&!Bw)return!1}catch{return!1}var s=!1;try{var u={};u[Fw]=function(){return{next:function(){return{done:s=!0}}}},p(u)}catch{}return s};Bt({target:"Array",stat:!0,forced:!lv(function(p){Array.from(p)})},{from:Hw});var hb=St.Array.from,Dc=n(hb),w_=Pn,Vw=_s,O_=el;mo.f;var JP=Sw,mb=ev,Lu="Array Iterator",Pf=O_.set,ka=O_.getterFor(Lu);JP(Array,"Array",function(p,a){Pf(this,{type:Lu,target:w_(p),index:0,kind:a})},function(){var p=ka(this),a=p.target,s=p.kind,u=p.index++;if(!a||u>=a.length)return p.target=void 0,mb(void 0,!0);switch(s){case"keys":return mb(u,!1);case"values":return mb(a[u],!1)}return mb([u,a[u]],!1)},"values"),Vw.Arguments=Vw.Array;var vb=km,uv={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},XP=i,x_=bs,il=_c,Lc=_s,kf=ho("toStringTag");for(var gb in uv){var __=XP[gb],cv=__&&__.prototype;cv&&x_(cv)!==kf&&il(cv,kf,gb),Lc[gb]=Lc.Array}var yb=vb,Vp=n(yb),$p=n(yb);function gt(p,a){if(!(p instanceof a))throw new TypeError("Cannot call a class as a function")}var $w={exports:{}},ja=Bt,Cm=be,Zw=mo.f;ja({target:"Object",stat:!0,forced:Object.defineProperty!==Zw,sham:!Cm},{defineProperty:Zw});var bb=St.Object,jf=$w.exports=function(p,a,s){return bb.defineProperty(p,a,s)};bb.defineProperty.sham&&(jf.sham=!0);var Mm=$w.exports,Am=n(Mm),pv=ee,Nc=Array.isArray||function(p){return pv(p)==="Array"},qw=TypeError,wb=function(p){if(p>9007199254740991)throw qw("Maximum allowed index exceeded");return p},Ob=Nc,S_=ov,I_=Cr,KP=ho("species"),Uw=Array,E_=function(p){var a;return Ob(p)&&(a=p.constructor,(S_(a)&&(a===Uw||Ob(a.prototype))||I_(a)&&(a=a[KP])===null)&&(a=void 0)),a===void 0?Uw:a},dv=function(p,a){return new(E_(p))(a===0?0:a)},YP=c,xb=ba,P_=ho("species"),fv=function(p){return xb>=51||!YP(function(){var a=[];return(a.constructor={})[P_]=function(){return{foo:1}},a[p](Boolean).foo!==1})},Gw=Bt,QP=c,k_=Nc,ek=Cr,Jw=Li,j_=Ga,T_=wb,Xw=Hp,C_=dv,tk=fv,hv=ba,M_=ho("isConcatSpreadable"),A_=hv>=51||!QP(function(){var p=[];return p[M_]=!1,p.concat()[0]!==p}),rk=function(p){if(!ek(p))return!1;var a=p[M_];return a!==void 0?!!a:k_(p)};Gw({target:"Array",proto:!0,arity:1,forced:!A_||!tk("concat")},{concat:function(p){var a,s,u,f,m,b=Jw(this),P=C_(b,0),k=0;for(a=-1,u=arguments.length;aet;et++)if((P||et in _e)&&(me=Le(se=_e[et],et,ge),p))if(a)It[et]=me;else if(me)switch(p){case 3:return!0;case 5:return se;case 6:return et;case 2:q_(It,se)}else switch(p){case 4:return!1;case 7:q_(It,se)}return m?-1:u||f?f:It}},Fc={forEach:qp(0),map:qp(1),filter:qp(2),some:qp(3),every:qp(4),find:qp(5),findIndex:qp(6),filterReject:qp(7)},kb=Bt,jb=i,Tb=Re,U_=N,Up=be,Tf=yc,rO=c,di=Yo,uk=ir,nO=xa,vv=Pn,Cb=Zh,ck=na,oO=Nt,Cf=rl,G_=Yh,pk=Rm,iO=_b,Lm=Iu,gv=Oe,J_=mo,X_=Tc,K_=Ae,Mf=Wl,Y_=$l,Mb=Dl,Q_=kn,aO=ef,Ab=ho,eS=Zp,dk=go,tS=eO,rS=Ka,Rb=el,Nu=Fc.forEach,_i=um("hidden"),Db="Symbol",Gp="prototype",fk=Rb.set,nS=Rb.getterFor(Db),al=Object[Gp],Af=jb.Symbol,Nm=Af&&Af[Gp],hk=jb.RangeError,mk=jb.TypeError,Fm=jb.QObject,sO=gv.f,oa=J_.f,yv=iO.f,lO=K_.f,oS=U_([].push),Zl=Mb("symbols"),Bm=Mb("op-symbols"),vk=Mb("wks"),Jp=!Fm||!Fm[Gp]||!Fm[Gp].findChild,iS=function(p,a,s){var u=sO(al,a);u&&delete al[a],oa(p,a,s),u&&p!==al&&oa(al,a,u)},Lb=Up&&rO(function(){return Cf(oa({},"a",{get:function(){return oa(this,"a",{value:7}).a}})).a!==7})?iS:oa,Nb=function(p,a){var s=Zl[p]=Cf(Nm);return fk(s,{type:Db,tag:p,description:a}),Up||(s.description=a),s},Fu=function(p,a,s){p===al&&Fu(Bm,a,s),nO(p);var u=Cb(a);return nO(s),di(Zl,u)?(s.enumerable?(di(p,_i)&&p[_i][u]&&(p[_i][u]=!1),s=Cf(s,{enumerable:oO(0,!1)})):(di(p,_i)||oa(p,_i,oO(1,{})),p[_i][u]=!0),Lb(p,u,s)):oa(p,u,s)},Qa=function(p,a){nO(p);var s=vv(a),u=G_(s).concat(lS(s));return Nu(u,function(f){Up&&!Tb(uO,s,f)||Fu(p,f,s[f])}),p},uO=function(p){var a=Cb(p),s=Tb(lO,this,a);return!(this===al&&di(Zl,a)&&!di(Bm,a))&&(!(s||!di(this,a)||!di(Zl,a)||di(this,_i)&&this[_i][a])||s)},aS=function(p,a){var s=vv(p),u=Cb(a);if(s!==al||!di(Zl,u)||di(Bm,u)){var f=sO(s,u);return!f||!di(Zl,u)||di(s,_i)&&s[_i][u]||(f.enumerable=!0),f}},sS=function(p){var a=yv(vv(p)),s=[];return Nu(a,function(u){di(Zl,u)||di(Q_,u)||oS(s,u)}),s},lS=function(p){var a=p===al,s=yv(a?Bm:vv(p)),u=[];return Nu(s,function(f){!di(Zl,f)||a&&!di(al,f)||oS(u,Zl[f])}),u};Tf||(Af=function(){if(uk(Nm,this))throw new mk("Symbol is not a constructor");var p=arguments.length&&arguments[0]!==void 0?ck(arguments[0]):void 0,a=aO(p),s=function(u){this===al&&Tb(s,Bm,u),di(this,_i)&&di(this[_i],a)&&(this[_i][a]=!1);var f=oO(1,u);try{Lb(this,a,f)}catch(m){if(!(m instanceof hk))throw m;iS(this,a,f)}};return Up&&Jp&&Lb(al,a,{configurable:!0,set:s}),Nb(a,p)},Mf(Nm=Af[Gp],"toString",function(){return nS(this).tag}),Mf(Af,"withoutSetter",function(p){return Nb(aO(p),p)}),K_.f=uO,J_.f=Fu,X_.f=Qa,gv.f=aS,pk.f=iO.f=sS,Lm.f=lS,eS.f=function(p){return Nb(Ab(p),p)},Up&&Y_(Nm,"description",{configurable:!0,get:function(){return nS(this).description}})),kb({global:!0,constructor:!0,wrap:!0,forced:!Tf,sham:!Tf},{Symbol:Af}),Nu(G_(vk),function(p){dk(p)}),kb({target:Db,stat:!0,forced:!Tf},{useSetter:function(){Jp=!0},useSimple:function(){Jp=!1}}),kb({target:"Object",stat:!0,forced:!Tf,sham:!Up},{create:function(p,a){return a===void 0?Cf(p):Qa(Cf(p),a)},defineProperty:Fu,defineProperties:Qa,getOwnPropertyDescriptor:aS}),kb({target:"Object",stat:!0,forced:!Tf},{getOwnPropertyNames:sS}),tS(),rS(Af,Db),Q_[_i]=!0;var cO=yc&&!!Symbol.for&&!!Symbol.keyFor,gk=Bt,uS=or,yk=Yo,bk=na,bv=Dl,cS=cO,Fb=bv("string-to-symbol-registry"),pS=bv("symbol-to-string-registry");gk({target:"Symbol",stat:!0,forced:!cS},{for:function(p){var a=bk(p);if(yk(Fb,a))return Fb[a];var s=uS("Symbol")(a);return Fb[a]=s,pS[s]=a,s}});var wk=Bt,ia=Yo,Ok=Yd,dS=Ki,xk=cO,wv=Dl("symbol-to-string-registry");wk({target:"Symbol",stat:!0,forced:!xk},{keyFor:function(p){if(!Ok(p))throw new TypeError(dS(p)+" is not a symbol");if(ia(wv,p))return wv[p]}});var Bb=Nc,Rf=ve,Ov=ee,pO=na,dO=N([].push),zb=Bt,fO=or,hO=I,mO=Re,Df=N,xv=c,Lf=ve,vO=Yd,fS=em,Wb=function(p){if(Rf(p))return p;if(Bb(p)){for(var a=p.length,s=[],u=0;up.length)&&(a=p.length);for(var s=0,u=new Array(a);s1?arguments[1]:void 0)}});var NO=vo("Array").map,$S=ir,Yk=NO,Wm=Array.prototype,FO=function(p){var a=p.map;return p===Wm||$S(Wm,p)&&a===Wm.map?Yk:a},Kp=n(FO),es=Li,Fi=Yh;Bt({target:"Object",stat:!0,forced:c(function(){Fi(1)})},{keys:function(p){return Fi(es(p))}});var no=n(St.Object.keys),Qk=Bt,Bi=Date,ej=N(Bi.prototype.getTime);Qk({target:"Date",stat:!0},{now:function(){return ej(new Bi)}});var Hm=n(St.Date.now),t2=c,Bu=function(p,a){var s=[][p];return!!s&&t2(function(){s.call(null,a||function(){return 1},1)})},BO=Fc.forEach,ZS=Bu("forEach")?[].forEach:function(p){return BO(this,p,arguments.length>1?arguments[1]:void 0)};Bt({target:"Array",proto:!0,forced:[].forEach!==ZS},{forEach:ZS});var tj=vo("Array").forEach,qS=bs,rj=Yo,zc=ir,US=tj,zi=Array.prototype,nj={DOMTokenList:!0,NodeList:!0},GS=function(p){var a=p.forEach;return p===zi||zc(zi,p)&&a===zi.forEach||rj(nj,qS(p))?US:a},Fn=n(GS),JS=Bt,XS=Nc,oj=N([].reverse),kv=[1,2];JS({target:"Array",proto:!0,forced:String(kv)===String(kv.reverse())},{reverse:function(){return XS(this)&&(this.length=this.length),oj(this)}});var ij=vo("Array").reverse,aj=ir,jv=ij,Tv=Array.prototype,sj=function(p){var a=p.reverse;return p===Tv||aj(Tv,p)&&a===Tv.reverse?jv:a},Yp=n(sj),zu=Ki,lj=TypeError,KS=function(p,a){if(!delete p[a])throw new lj("Cannot delete property "+zu(a)+" of "+zu(p))},uj=Bt,YS=Li,cj=Su,pj=Bl,dj=Ga,Cv=CS,QS=wb,fj=dv,e7=Hp,zO=KS,WO=fv("splice"),hj=Math.max,mj=Math.min;uj({target:"Array",proto:!0,forced:!WO},{splice:function(p,a){var s,u,f,m,b,P,k=YS(this),V=dj(k),G=cj(p,V),X=arguments.length;for(X===0?s=u=0:X===1?(s=0,u=V-G):(s=X-2,u=mj(hj(pj(a),0),V-G)),QS(V+s-u),f=fj(k,u),m=0;mV-u+s;m--)zO(k,m-1)}else if(s>u)for(m=V-u;m>G;m--)P=m+s-1,(b=m+u-1)in k?k[P]=k[b]:zO(k,P);for(m=0;m1?arguments[1]:void 0)}});var $O=vo("Array").includes,wj=Cr,Oj=ee,xj=ho("match"),Ii=function(p){var a;return wj(p)&&((a=p[xj])!==void 0?!!a:Oj(p)==="RegExp")},_j=TypeError,Sj=ho("match"),ZO=Bt,t7=function(p){if(Ii(p))throw new _j("The method doesn't accept regular expressions");return p},r7=Sr,n7=na,Ij=function(p){var a=/./;try{"/./"[p](a)}catch{try{return a[Sj]=!1,"/./"[p](a)}catch{}}return!1},Ej=N("".indexOf);ZO({target:"String",proto:!0,forced:!Ij("includes")},{includes:function(p){return!!~Ej(n7(r7(this)),n7(t7(p)),arguments.length>1?arguments[1]:void 0)}});var Mv=vo("String").includes,o7=ir,Pj=$O,kj=Mv,qO=Array.prototype,ei=String.prototype,i7=function(p){var a=p.includes;return p===qO||o7(qO,p)&&a===qO.includes?Pj:typeof p=="string"||p===ei||o7(ei,p)&&a===ei.includes?kj:a},Qp=n(i7),jj=Li,UO=xf,GO=wf;Bt({target:"Object",stat:!0,forced:c(function(){UO(1)}),sham:!GO},{getPrototypeOf:function(p){return UO(jj(p))}});var a7=St.Object.getPrototypeOf,JO=n(a7),Tj=Fc.filter;Bt({target:"Array",proto:!0,forced:!fv("filter")},{filter:function(p){return Tj(this,p,arguments.length>1?arguments[1]:void 0)}});var Cj=vo("Array").filter,Mj=ir,s7=Cj,XO=Array.prototype,KO=function(p){var a=p.filter;return p===XO||Mj(XO,p)&&a===XO.filter?s7:a},ts=n(KO),YO=` +\v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF`,Aj=Sr,QO=na,e6=YO,t6=N("".replace),l7=RegExp("^["+e6+"]+"),Rj=RegExp("(^|[^"+e6+"])["+e6+"]+$"),r6=function(p){return function(a){var s=QO(Aj(a));return 1&p&&(s=t6(s,l7,"")),2&p&&(s=t6(s,Rj,"$1")),s}},u7={start:r6(1),end:r6(2),trim:r6(3)},c7=i,Dj=c,Lj=N,p7=na,Nj=u7.trim,r2=YO,Av=c7.parseInt,n6=c7.Symbol,o6=n6&&n6.iterator,d7=/^[+-]?0x/i,f7=Lj(d7.exec),i6=Av(r2+"08")!==8||Av(r2+"0x16")!==22||o6&&!Dj(function(){Av(Object(o6))})?function(p,a){var s=Nj(p7(p));return Av(s,a>>>0||(f7(d7,s)?16:10))}:Av;Bt({global:!0,forced:parseInt!==i6},{parseInt:i6});var Ul=n(St.parseInt),a6=Bt,h7=Kh.indexOf,m7=Bu,js=de([].indexOf),Ts=!!js&&1/js([1],1,-0)<0;a6({target:"Array",proto:!0,forced:Ts||!m7("indexOf")},{indexOf:function(p){var a=arguments.length>1?arguments[1]:void 0;return Ts?js(this,p,a)||0:h7(this,p,a)}});var n2=vo("Array").indexOf,ed=ir,Wu=n2,o2=Array.prototype,Fj=function(p){var a=p.indexOf;return p===o2||ed(o2,p)&&a===o2.indexOf?Wu:a},ln=n(Fj);Bt({target:"Object",stat:!0,sham:!be},{create:rl});var zf=St.Object,i2=function(p,a){return zf.create(p,a)},Hu=n(i2),Vm=St,v7=I;Vm.JSON||(Vm.JSON={stringify:JSON.stringify});var g7=function(p,a,s){return v7(Vm.JSON.stringify,null,arguments)},$m=n(g7),s6=typeof Bun=="function"&&Bun&&typeof Bun.version=="string",Wf=TypeError,Zm=i,Rv=I,Dv=ve,y7=s6,Bj=Mr,b7=em,Lv=function(p,a){if(ps,b=Dv(u)?u:l6(u),P=m?b7(arguments,s):[],k=m?function(){Rv(b,this,P)}:b;return a?p(k,f):p(k)}:p},ti=Bt,aa=i,qm=Wi(aa.setInterval,!0);ti({global:!0,bind:!0,forced:aa.setInterval!==qm},{setInterval:qm});var Nv=Bt,Um=i,Gm=Wi(Um.setTimeout,!0);Nv({global:!0,bind:!0,forced:Um.setTimeout!==Gm},{setTimeout:Gm});var Ta=n(St.setTimeout),Vu=Li,td=Su,O7=Ga,u6=function(p){for(var a=Vu(this),s=O7(a),u=arguments.length,f=td(u>1?arguments[1]:void 0,s),m=u>2?arguments[2]:void 0,b=m===void 0?s:td(m,s);b>f;)a[f++]=p;return a};Bt({target:"Array",proto:!0},{fill:u6});var Fv,ll=vo("Array").fill,a2=ir,Hf=ll,s2=Array.prototype,c6=function(p){var a=p.fill;return p===s2||a2(s2,p)&&a===s2.fill?Hf:a},Jm=n(c6);function ul(){return ul=Object.assign||function(p){for(var a=1;a"u"?{style:{}}:document.createElement("div"),Zu=Math.round,Gl=Math.abs,Vf=Date.now;function Bv(p,a){for(var s,u,f=a[0].toUpperCase()+a.slice(1),m=0;m"u"?{}:window;var $f=Bv(l2.style,"touchAction"),Vc=$f!==void 0,_7="compute",S7="auto",u2="manipulation",rd="none",Km="pan-x",qu="pan-y",Ym=function(){if(!Vc)return!1;var p={},a=$u.CSS&&$u.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(s){return p[s]=!a||$u.CSS.supports("touch-action",s)}),p}(),I7="ontouchstart"in $u,p6=Bv($u,"PointerEvent")!==void 0,zj=I7&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),zv="touch",Wv="mouse",E7=25,sa=1,ri=4,rs=8,Hv=1,Uu=2,cl=4,Vv=8,$c=16,Jl=Uu|cl,Xl=Vv|$c,c2=Jl|Xl,Zf=["x","y"],$v=["clientX","clientY"];function Cs(p,a,s){var u;if(p)if(p.forEach)p.forEach(a,s);else if(p.length!==void 0)for(u=0;u-1}var d6=function(){function p(s,u){this.manager=s,this.set(u)}var a=p.prototype;return a.set=function(s){s===_7&&(s=this.compute()),Vc&&this.manager.element.style&&Ym[s]&&(this.manager.element.style[$f]=s),this.actions=s.toLowerCase().trim()},a.update=function(){this.set(this.manager.options.touchAction)},a.compute=function(){var s=[];return Cs(this.manager.recognizers,function(u){Zv(u.options.enable,[u])&&(s=s.concat(u.getTouchAction()))}),function(u){if(nd(u,rd))return rd;var f=nd(u,Km),m=nd(u,qu);return f&&m?rd:f||m?f?Km:qu:nd(u,u2)?u2:S7}(s.join(" "))},a.preventDefaults=function(s){var u=s.srcEvent,f=s.offsetDirection;if(this.manager.session.prevented)u.preventDefault();else{var m=this.actions,b=nd(m,rd)&&!Ym[rd],P=nd(m,qu)&&!Ym[qu],k=nd(m,Km)&&!Ym[Km];if(b){var V=s.pointers.length===1,G=s.distance<2,X=s.deltaTime<250;if(V&&G&&X)return}if(!k||!P)return b||P&&f&Jl||k&&f&Xl?this.preventSrc(u):void 0}},a.preventSrc=function(s){this.manager.session.prevented=!0,s.preventDefault()},p}();function p2(p,a){for(;p;){if(p===a)return!0;p=p.parentNode}return!1}function f6(p){var a=p.length;if(a===1)return{x:Zu(p[0].clientX),y:Zu(p[0].clientY)};for(var s=0,u=0,f=0;f=Gl(a)?p<0?Uu:cl:a<0?Vv:$c}function k7(p,a,s){return{x:a/p||0,y:s/p||0}}function Wj(p,a){var s=p.session,u=a.pointers,f=u.length;s.firstInput||(s.firstInput=h6(a)),f>1&&!s.firstMultiple?s.firstMultiple=h6(a):f===1&&(s.firstMultiple=!1);var m=s.firstInput,b=s.firstMultiple,P=b?b.center:m.center,k=a.center=f6(u);a.timeStamp=Vf(),a.deltaTime=a.timeStamp-m.timeStamp,a.angle=Uv(P,k),a.distance=qv(P,k),function(_e,Le){var Ue=Le.center,et=_e.offsetDelta||{},bt=_e.prevDelta||{},It=_e.prevInput||{};Le.eventType!==sa&&It.eventType!==ri||(bt=_e.prevDelta={x:It.deltaX||0,y:It.deltaY||0},et=_e.offsetDelta={x:Ue.x,y:Ue.y}),Le.deltaX=bt.x+(Ue.x-et.x),Le.deltaY=bt.y+(Ue.y-et.y)}(s,a),a.offsetDirection=P7(a.deltaX,a.deltaY);var V,G,X=k7(a.deltaTime,a.deltaX,a.deltaY);a.overallVelocityX=X.x,a.overallVelocityY=X.y,a.overallVelocity=Gl(X.x)>Gl(X.y)?X.x:X.y,a.scale=b?(V=b.pointers,qv((G=u)[0],G[1],$v)/qv(V[0],V[1],$v)):1,a.rotation=b?function(_e,Le){return Uv(Le[1],Le[0],$v)+Uv(_e[1],_e[0],$v)}(b.pointers,u):0,a.maxPointers=s.prevInput?a.pointers.length>s.prevInput.maxPointers?a.pointers.length:s.prevInput.maxPointers:a.pointers.length,function(_e,Le){var Ue,et,bt,It,fr=_e.lastInterval||Le,jr=Le.timeStamp-fr.timeStamp;if(Le.eventType!==rs&&(jr>E7||fr.velocity===void 0)){var Br=Le.deltaX-fr.deltaX,gr=Le.deltaY-fr.deltaY,tr=k7(jr,Br,gr);et=tr.x,bt=tr.y,Ue=Gl(tr.x)>Gl(tr.y)?tr.x:tr.y,It=P7(Br,gr),_e.lastInterval=Le}else Ue=fr.velocity,et=fr.velocityX,bt=fr.velocityY,It=fr.direction;Le.velocity=Ue,Le.velocityX=et,Le.velocityY=bt,Le.direction=It}(s,a);var se,me=p.element,ge=a.srcEvent;p2(se=ge.composedPath?ge.composedPath()[0]:ge.path?ge.path[0]:ge.target,me)&&(me=se),a.target=me}function m6(p,a,s){var u=s.pointers.length,f=s.changedPointers.length,m=a&sa&&u-f==0,b=a&(ri|rs)&&u-f==0;s.isFirst=!!m,s.isFinal=!!b,m&&(p.session={}),s.eventType=a,Wj(p,s),p.emit("hammer.input",s),p.recognize(s),p.session.prevInput=s}function Qm(p){return p.trim().split(/\s+/g)}function Gv(p,a,s){Cs(Qm(a),function(u){p.addEventListener(u,s,!1)})}function e0(p,a,s){Cs(Qm(a),function(u){p.removeEventListener(u,s,!1)})}function v6(p){var a=p.ownerDocument||p;return a.defaultView||a.parentWindow||window}var t0=function(){function p(s,u){var f=this;this.manager=s,this.callback=u,this.element=s.element,this.target=s.options.inputTarget,this.domHandler=function(m){Zv(s.options.enable,[s])&&f.handler(m)},this.init()}var a=p.prototype;return a.handler=function(){},a.init=function(){this.evEl&&Gv(this.element,this.evEl,this.domHandler),this.evTarget&&Gv(this.target,this.evTarget,this.domHandler),this.evWin&&Gv(v6(this.element),this.evWin,this.domHandler)},a.destroy=function(){this.evEl&&e0(this.element,this.evEl,this.domHandler),this.evTarget&&e0(this.target,this.evTarget,this.domHandler),this.evWin&&e0(v6(this.element),this.evWin,this.domHandler)},p}();function od(p,a,s){if(p.indexOf&&!s)return p.indexOf(a);for(var u=0;uk[a]}):u.sort()),u}var Zc={touchstart:sa,touchmove:2,touchend:ri,touchcancel:rs},O6=function(p){function a(){var s;return a.prototype.evTarget="touchstart touchmove touchend touchcancel",(s=p.apply(this,arguments)||this).targetIds={},s}return Ca(a,p),a.prototype.handler=function(s){var u=Zc[s.type],f=Hj.call(this,s,u);f&&this.callback(this.manager,u,{pointers:f[0],changedPointers:f[1],pointerType:zv,srcEvent:s})},a}(t0);function Hj(p,a){var s,u,f=id(p.touches),m=this.targetIds;if(a&(2|sa)&&f.length===1)return m[f[0].identifier]=!0,[f,f];var b=id(p.changedTouches),P=[],k=this.target;if(u=f.filter(function(V){return p2(V.target,k)}),a===sa)for(s=0;s-1&&u.splice(f,1)},$j)}}function T7(p,a){p&sa?(this.primaryTouch=a.changedPointers[0].identifier,d2.call(this,a)):p&(ri|rs)&&d2.call(this,a)}function C7(p){for(var a=p.srcEvent.clientX,s=p.srcEvent.clientY,u=0;u-1&&this.requireFail.splice(u,1),this},a.hasRequireFailures=function(){return this.requireFail.length>0},a.canRecognizeWith=function(s){return!!this.simultaneous[s.id]},a.emit=function(s){var u=this,f=this.state;function m(b){u.manager.emit(b,s)}f<8&&m(u.options.event+A7(f)),m(u.options.event),s.additionalEvent&&m(s.additionalEvent),f>=8&&m(u.options.event+A7(f))},a.tryEmit=function(s){if(this.canEmit())return this.emit(s);this.state=ad},a.canEmit=function(){for(var s=0;sf.threshold&&P&f.direction},s.attrTest=function(u){return Uf.prototype.attrTest.call(this,u)&&(2&this.state||!(2&this.state)&&this.directionTest(u))},s.emit=function(u){this.pX=u.deltaX,this.pY=u.deltaY;var f=_6(u.direction);f&&(u.additionalEvent=this.options.event+f),p.prototype.emit.call(this,u)},a}(Uf),Kv=function(p){function a(u){return u===void 0&&(u={}),p.call(this,ul({event:"swipe",threshold:10,velocity:.3,direction:Jl|Xl,pointers:1},u))||this}Ca(a,p);var s=a.prototype;return s.getTouchAction=function(){return Kl.prototype.getTouchAction.call(this)},s.attrTest=function(u){var f,m=this.options.direction;return m&(Jl|Xl)?f=u.overallVelocity:m&Jl?f=u.overallVelocityX:m&Xl&&(f=u.overallVelocityY),p.prototype.attrTest.call(this,u)&&m&u.offsetDirection&&u.distance>this.options.threshold&&u.maxPointers===this.options.pointers&&Gl(f)>this.options.velocity&&u.eventType&ri},s.emit=function(u){var f=_6(u.offsetDirection);f&&this.manager.emit(this.options.event+f,u),this.manager.emit(this.options.event,u)},a}(Uf),h2=function(p){function a(u){return u===void 0&&(u={}),p.call(this,ul({event:"pinch",threshold:0,pointers:2},u))||this}Ca(a,p);var s=a.prototype;return s.getTouchAction=function(){return[rd]},s.attrTest=function(u){return p.prototype.attrTest.call(this,u)&&(Math.abs(u.scale-1)>this.options.threshold||2&this.state)},s.emit=function(u){if(u.scale!==1){var f=u.scale<1?"in":"out";u.additionalEvent=this.options.event+f}p.prototype.emit.call(this,u)},a}(Uf),R7=function(p){function a(u){return u===void 0&&(u={}),p.call(this,ul({event:"rotate",threshold:0,pointers:2},u))||this}Ca(a,p);var s=a.prototype;return s.getTouchAction=function(){return[rd]},s.attrTest=function(u){return p.prototype.attrTest.call(this,u)&&(Math.abs(u.rotation)>this.options.threshold||2&this.state)},a}(Uf),Ma=function(p){function a(u){var f;return u===void 0&&(u={}),(f=p.call(this,ul({event:"press",pointers:1,time:251,threshold:9},u))||this)._timer=null,f._input=null,f}Ca(a,p);var s=a.prototype;return s.getTouchAction=function(){return[S7]},s.process=function(u){var f=this,m=this.options,b=u.pointers.length===m.pointers,P=u.distancem.time;if(this._input=u,!P||!b||u.eventType&(ri|rs)&&!k)this.reset();else if(u.eventType&sa)this.reset(),this._timer=setTimeout(function(){f.state=8,f.tryEmit()},m.time);else if(u.eventType&ri)return 8;return ad},s.reset=function(){clearTimeout(this._timer)},s.emit=function(u){this.state===8&&(u&&u.eventType&ri?this.manager.emit(this.options.event+"up",u):(this._input.timeStamp=Vf(),this.manager.emit(this.options.event,this._input)))},a}(Xv),D7={domEvents:!1,touchAction:_7,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},S6=[[R7,{enable:!1}],[h2,{enable:!1},["rotate"]],[Kv,{direction:Jl}],[Kl,{direction:Jl},["swipe"]],[f2],[f2,{event:"doubletap",taps:2},["tap"]],[Ma]];function I6(p,a){var s,u=p.element;u.style&&(Cs(p.options.cssProps,function(f,m){s=Bv(u.style,m),a?(p.oldCssProps[s]=u.style[s],u.style[s]=f):u.style[s]=p.oldCssProps[s]||""}),a||(p.oldCssProps={}))}var Hi=function(){function p(s,u){var f,m=this;this.options=Hc({},D7,u||{}),this.options.inputTarget=this.options.inputTarget||s,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=s,this.input=new((f=this).options.inputClass||(p6?b6:zj?O6:I7?M7:r0))(f,m6),this.touchAction=new d6(this,this.options.touchAction),I6(this,!0),Cs(this.options.recognizers,function(b){var P=m.add(new b[0](b[1]));b[2]&&P.recognizeWith(b[2]),b[3]&&P.requireFailure(b[3])},this)}var a=p.prototype;return a.set=function(s){return Hc(this.options,s),s.touchAction&&this.touchAction.update(),s.inputTarget&&(this.input.destroy(),this.input.target=s.inputTarget,this.input.init()),this},a.stop=function(s){this.session.stopped=s?2:1},a.recognize=function(s){var u=this.session;if(!u.stopped){var f;this.touchAction.preventDefaults(s);var m=this.recognizers,b=u.curRecognizer;(!b||b&&8&b.state)&&(u.curRecognizer=null,b=null);for(var P=0;P\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",b=window.console&&(window.console.warn||window.console.log);return b&&b.call(window.console,u,m),p.apply(this,arguments)}}var N7=L7(function(p,a,s){for(var u=Object.keys(a),f=0;f=p.length?{done:!0}:{done:!1,value:p[u++]}},e:function(k){throw k},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m,b=!0,P=!1;return{s:function(){s=s.call(p)},n:function(){var k=s.next();return b=k.done,k},e:function(k){P=!0,m=k},f:function(){try{b||s.return==null||s.return()}finally{if(P)throw m}}}}function i0(p,a){(a==null||a>p.length)&&(a=p.length);for(var s=0,u=new Array(a);s>>0,Re=(It*=Re)>>>0,Re+=4294967296*(It-=Re)}return 23283064365386963e-26*(Re>>>0)}}(),se=X(" "),ve=X(" "),ge=X(" "),xe=0;xe2&&arguments[2]!==void 0&&arguments[2];for(var u in p)if(a[u]!==void 0)if(a[u]===null||Vn(a[u])!=="object")sd(p,a,u,s);else{var f=p[u],m=a[u];v2(f)&&v2(m)&&k6(f,m,s)}}function Jf(p,a,s){var u=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if(Mn(s))throw new TypeError("Arrays are not supported by deepExtend");for(var f=0;f3&&arguments[3]!==void 0&&arguments[3];if(Mn(s))throw new TypeError("Arrays are not supported by deepExtend");for(var f in s)if(Object.prototype.hasOwnProperty.call(s,f)&&!Qp(p).call(p,f))if(s[f]&&s[f].constructor===Object)a[f]===void 0&&(a[f]={}),a[f].constructor===Object?jn(a[f],s[f]):sd(a,s,f,u);else if(Mn(s[f])){a[f]=[];for(var m=0;m2&&arguments[2]!==void 0&&arguments[2],u=arguments.length>3&&arguments[3]!==void 0&&arguments[3];for(var f in a)if(Object.prototype.hasOwnProperty.call(a,f)||s===!0)if(Vn(a[f])==="object"&&a[f]!==null&&JO(a[f])===Object.prototype)p[f]===void 0?p[f]=jn({},a[f],s):Vn(p[f])==="object"&&p[f]!==null&&JO(p[f])===Object.prototype?jn(p[f],a[f],s):sd(p,a,f,u);else if(Mn(a[f])){var m;p[f]=_i(m=a[f]).call(m)}else sd(p,a,f,u);return p}function Qv(p,a){var s;return Yb(s=[]).call(s,ql(p),[a])}function j6(p){return p.getBoundingClientRect().top}function nn(p,a){if(Mn(p))for(var s=p.length,u=0;u3&&arguments[3]!==void 0?arguments[3]:{},f=function(G){return G!=null},m=function(G){return G!==null&&Vn(G)==="object"};if(!m(p))throw new Error("Parameter mergeTarget must be an object");if(!m(a))throw new Error("Parameter options must be an object");if(!f(s))throw new Error("Parameter option must have a value");if(!m(u))throw new Error("Parameter globalOptions must be an object");var b=a[s],P=m(u)&&!function(G){for(var X in G)if(Object.prototype.hasOwnProperty.call(G,X))return!1;return!0}(u)?u[s]:void 0,k=P?P.enabled:void 0;if(b!==void 0){if(typeof b=="boolean")return m(p[s])||(p[s]={}),void(p[s].enabled=b);if(b===null&&!m(p[s])){if(!f(P))return;p[s]=Hu(P)}if(m(b)){var V=!0;b.enabled!==void 0?V=b.enabled:k!==void 0&&(V=P.enabled),function(G,X,se){m(G[se])||(G[se]={});var ve=X[se],ge=G[se];for(var xe in ve)Object.prototype.hasOwnProperty.call(ve,xe)&&(ge[xe]=ve[xe])}(p,a,s),p[s].enabled=V}}}var M6={linear:function(p){return p},easeInQuad:function(p){return p*p},easeOutQuad:function(p){return p*(2-p)},easeInOutQuad:function(p){return p<.5?2*p*p:(4-2*p)*p-1},easeInCubic:function(p){return p*p*p},easeOutCubic:function(p){return--p*p*p+1},easeInOutCubic:function(p){return p<.5?4*p*p*p:(p-1)*(2*p-2)*(2*p-2)+1},easeInQuart:function(p){return p*p*p*p},easeOutQuart:function(p){return 1- --p*p*p*p},easeInOutQuart:function(p){return p<.5?8*p*p*p*p:1-8*--p*p*p*p},easeInQuint:function(p){return p*p*p*p*p},easeOutQuint:function(p){return 1+--p*p*p*p*p},easeInOutQuint:function(p){return p<.5?16*p*p*p*p*p:1+16*--p*p*p*p*p}};function ud(p,a){var s;Mn(a)||(a=[a]);var u,f=P6(p);try{for(f.s();!(u=f.n()).done;){var m=u.value;if(m){s=m[a[0]];for(var b=1;b0&&arguments[0]!==void 0?arguments[0]:1;gt(this,p),this.pixelRatio=a,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return yt(p,[{key:"insertTo",value:function(a){this.hammer!==void 0&&(this.hammer.destroy(),this.hammer=void 0),this.container=a,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:"setUpdateCallback",value:function(a){if(typeof a!="function")throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=a}},{key:"setCloseCallback",value:function(a){if(typeof a!="function")throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=a}},{key:"_isColorString",value:function(a){if(typeof a=="string")return Xj[a]}},{key:"setColor",value:function(a){var s=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];if(a!=="none"){var u,f=this._isColorString(a);if(f!==void 0&&(a=f),Ql(a)===!0){if(H7(a)===!0){var m=a.substr(4).substr(0,a.length-5).split(",");u={r:m[0],g:m[1],b:m[2],a:1}}else if(function(V){return z7.test(V)}(a)===!0){var b=a.substr(5).substr(0,a.length-6).split(",");u={r:b[0],g:b[1],b:b[2],a:b[3]}}else if(C6(a)===!0){var P=Hi(a);u={r:P.r,g:P.g,b:P.b,a:1}}}else if(a instanceof Object&&a.r!==void 0&&a.g!==void 0&&a.b!==void 0){var k=a.a!==void 0?a.a:"1.0";u={r:a.r,g:a.g,b:a.b,a:k}}if(u===void 0)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+$m(a));this._setColor(u,s)}}},{key:"show",value:function(){this.closeCallback!==void 0&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}},{key:"_hide",value:function(){var a=this;(!(arguments.length>0&&arguments[0]!==void 0)||arguments[0])===!0&&(this.previousColor=Cn({},this.color)),this.applied===!0&&this.updateCallback(this.initialColor),this.frame.style.display="none",Ta(function(){a.closeCallback!==void 0&&(a.closeCallback(),a.closeCallback=void 0)},0)}},{key:"_save",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:"_apply",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:"_loadLast",value:function(){this.previousColor!==void 0?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}},{key:"_setColor",value:function(a){(!(arguments.length>1&&arguments[1]!==void 0)||arguments[1])===!0&&(this.initialColor=Cn({},a)),this.color=a;var s=eg(a.r,a.g,a.b),u=2*Math.PI,f=this.r*s.s,m=this.centerCoordinates.x+f*Math.sin(u*s.h),b=this.centerCoordinates.y+f*Math.cos(u*s.h);this.colorPickerSelector.style.left=m-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=b-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(a)}},{key:"_setOpacity",value:function(a){this.color.a=a/100,this._updatePicker(this.color)}},{key:"_setBrightness",value:function(a){var s=eg(this.color.r,this.color.g,this.color.b);s.v=a/100;var u=y2(s.h,s.s,s.v);u.a=this.color.a,this.color=u,this._updatePicker()}},{key:"_updatePicker",value:function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.color,s=eg(a.r,a.g,a.b),u=this.colorPickerCanvas.getContext("2d");this.pixelRation===void 0&&(this.pixelRatio=(window.devicePixelRatio||1)/(u.webkitBackingStorePixelRatio||u.mozBackingStorePixelRatio||u.msBackingStorePixelRatio||u.oBackingStorePixelRatio||u.backingStorePixelRatio||1)),u.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var f=this.colorPickerCanvas.clientWidth,m=this.colorPickerCanvas.clientHeight;u.clearRect(0,0,f,m),u.putImageData(this.hueCircle,0,0),u.fillStyle="rgba(0,0,0,"+(1-s.v)+")",u.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),Jm(u).call(u),this.brightnessRange.value=100*s.v,this.opacityRange.value=100*a.a,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}},{key:"_setSize",value:function(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:"_create",value:function(){var a,s,u,f;if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var m=this.colorPickerCanvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(m.webkitBackingStorePixelRatio||m.mozBackingStorePixelRatio||m.msBackingStorePixelRatio||m.oBackingStorePixelRatio||m.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var b=document.createElement("DIV");b.style.color="red",b.style.fontWeight="bold",b.style.padding="10px",b.innerText="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(b)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch{}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch{}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var P=this;this.opacityRange.onchange=function(){P._setOpacity(this.value)},this.opacityRange.oninput=function(){P._setOpacity(this.value)},this.brightnessRange.onchange=function(){P._setBrightness(this.value)},this.brightnessRange.oninput=function(){P._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerText="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerText="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerText="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerText="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerText="cancel",this.cancelButton.onclick=at(a=this._hide).call(a,this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerText="apply",this.applyButton.onclick=at(s=this._apply).call(s,this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerText="save",this.saveButton.onclick=at(u=this._save).call(u,this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerText="load last",this.loadButton.onclick=at(f=this._loadLast).call(f,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:"_bindHammer",value:function(){var a=this;this.drag={},this.pinch={},this.hammer=new Gf(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.on("hammer.input",function(s){s.isFirst&&a._moveSelector(s)}),this.hammer.on("tap",function(s){a._moveSelector(s)}),this.hammer.on("panstart",function(s){a._moveSelector(s)}),this.hammer.on("panmove",function(s){a._moveSelector(s)}),this.hammer.on("panend",function(s){a._moveSelector(s)})}},{key:"_generateHueCircle",value:function(){if(this.generated===!1){var a=this.colorPickerCanvas.getContext("2d");this.pixelRation===void 0&&(this.pixelRatio=(window.devicePixelRatio||1)/(a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||a.backingStorePixelRatio||1)),a.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var s,u,f,m,b=this.colorPickerCanvas.clientWidth,P=this.colorPickerCanvas.clientHeight;a.clearRect(0,0,b,P),this.centerCoordinates={x:.5*b,y:.5*P},this.r=.49*b;var k,V=2*Math.PI/360,G=1/this.r;for(f=0;f<360;f++)for(m=0;m3&&arguments[3]!==void 0?arguments[3]:1,m=arguments.length>4&&arguments[4]!==void 0?arguments[4]:function(){return!1};gt(this,p),this.parent=a,this.changedOptions=[],this.container=s,this.allowCreation=!1,this.hideOption=m,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},Cn(this.options,this.defaultOptions),this.configureOptions=u,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new Kj(f),this.wrapper=void 0}return yt(p,[{key:"setOptions",value:function(a){if(a!==void 0){this.popupHistory={},this._removePopup();var s=!0;if(typeof a=="string")this.options.filter=a;else if(Mn(a))this.options.filter=a.join();else if(Vn(a)==="object"){if(a==null)throw new TypeError("options cannot be null");a.container!==void 0&&(this.options.container=a.container),ts(a)!==void 0&&(this.options.filter=ts(a)),a.showButton!==void 0&&(this.options.showButton=a.showButton),a.enabled!==void 0&&(s=a.enabled)}else typeof a=="boolean"?(this.options.filter=!0,s=a):typeof a=="function"&&(this.options.filter=a,s=!0);ts(this.options)===!1&&(s=!1),this.options.enabled=s}this._clean()}},{key:"setModuleOptions",value:function(a){this.moduleOptions=a,this.options.enabled===!0&&(this._clean(),this.options.container!==void 0&&(this.container=this.options.container),this._create())}},{key:"_create",value:function(){this._clean(),this.changedOptions=[];var a=ts(this.options),s=0,u=!1;for(var f in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,f)&&(this.allowCreation=!1,u=!1,typeof a=="function"?u=(u=a(f,[]))||this._handleObject(this.configureOptions[f],[f],!0):a!==!0&&ln(a).call(a,f)===-1||(u=!0),u!==!1&&(this.allowCreation=!0,s>0&&this._makeItem([]),this._makeHeader(f),this._handleObject(this.configureOptions[f],[f])),s++);this._makeButton(),this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var a=0;a1?u-1:0),m=1;m2&&arguments[2]!==void 0&&arguments[2],f=document.createElement("div");if(f.className="vis-configuration vis-config-label vis-config-s"+s.length,u===!0){for(;f.firstChild;)f.removeChild(f.firstChild);f.appendChild(A6("i","b",a))}else f.innerText=a+":";return f}},{key:"_makeDropdown",value:function(a,s,u){var f=document.createElement("select");f.className="vis-configuration vis-config-select";var m=0;s!==void 0&&ln(a).call(a,s)!==-1&&(m=ln(a).call(a,s));for(var b=0;bb&&b!==1&&(k.max=Math.ceil(s*X),G=k.max,V="range increased"),k.value=s}else k.value=f;var se=document.createElement("input");se.className="vis-configuration vis-config-rangeinput",se.value=k.value;var ve=this;k.onchange=function(){se.value=this.value,ve._update(Number(this.value),u)},k.oninput=function(){se.value=this.value};var ge=this._makeLabel(u[u.length-1],u),xe=this._makeItem(u,ge,k,se);V!==""&&this.popupHistory[xe]!==G&&(this.popupHistory[xe]=G,this._setupPopup(V,xe))}},{key:"_makeButton",value:function(){var a=this;if(this.options.showButton===!0){var s=document.createElement("div");s.className="vis-configuration vis-config-button",s.innerText="generate options",s.onclick=function(){a._printOptions()},s.onmouseover=function(){s.className="vis-configuration vis-config-button hover"},s.onmouseout=function(){s.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(s)}}},{key:"_setupPopup",value:function(a,s){var u=this;if(this.initialized===!0&&this.allowCreation===!0&&this.popupCounter1&&arguments[1]!==void 0?arguments[1]:[],u=arguments.length>2&&arguments[2]!==void 0&&arguments[2],f=!1,m=ts(this.options),b=!1;for(var P in a)if(Object.prototype.hasOwnProperty.call(a,P)){f=!0;var k=a[P],V=Qv(s,P);if(typeof m=="function"&&(f=m(P,s))===!1&&!Mn(k)&&typeof k!="string"&&typeof k!="boolean"&&k instanceof Object&&(this.allowCreation=!1,f=this._handleObject(k,V,!0),this.allowCreation=u===!1),f!==!1){b=!0;var G=this._getValue(V);if(Mn(k))this._handleArray(k,G,V);else if(typeof k=="string")this._makeTextInput(k,G,V);else if(typeof k=="boolean")this._makeCheckbox(k,G,V);else if(k instanceof Object){if(!this.hideOption(s,P,this.moduleOptions))if(k.enabled!==void 0){var X=Qv(V,"enabled"),se=this._getValue(X);if(se===!0){var ve=this._makeLabel(P,V,!0);this._makeItem(V,ve),b=this._handleObject(k,V)||b}else this._makeCheckbox(k,se,V)}else{var ge=this._makeLabel(P,V,!0);this._makeItem(V,ge),b=this._handleObject(k,V)||b}}else console.error("dont know how to handle",k,P,V)}}return b}},{key:"_handleArray",value:function(a,s,u){typeof a[0]=="string"&&a[0]==="color"?(this._makeColorField(a,s,u),a[1]!==s&&this.changedOptions.push({path:u,value:s})):typeof a[0]=="string"?(this._makeDropdown(a,s,u),a[0]!==s&&this.changedOptions.push({path:u,value:s})):typeof a[0]=="number"&&(this._makeRange(a,s,u),a[0]!==s&&this.changedOptions.push({path:u,value:Number(s)}))}},{key:"_update",value:function(a,s){var u=this._constructOptions(a,s);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit("configChange",u),this.initialized=!0,this.parent.setOptions(u)}},{key:"_constructOptions",value:function(a,s){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},f=u;a=(a=a==="true"||a)!=="false"&&a;for(var m=0;mm-this.padding&&(k=!0),b=k?this.x-u:this.x,P=V?this.y-s:this.y}else(P=this.y-s)+s+this.padding>f&&(P=f-s-this.padding),Pm&&(b=m-u-this.padding),b\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",b=window.console&&(window.console.warn||window.console.log);return b&&b.call(window.console,u,m),p.apply(this,arguments)}}var N7=L7(function(p,a,s){for(var u=Object.keys(a),f=0;f=p.length?{done:!0}:{done:!1,value:p[u++]}},e:function(k){throw k},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m,b=!0,P=!1;return{s:function(){s=s.call(p)},n:function(){var k=s.next();return b=k.done,k},e:function(k){P=!0,m=k},f:function(){try{b||s.return==null||s.return()}finally{if(P)throw m}}}}function i0(p,a){(a==null||a>p.length)&&(a=p.length);for(var s=0,u=new Array(a);s>>0,Le=(It*=Le)>>>0,Le+=4294967296*(It-=Le)}return 23283064365386963e-26*(Le>>>0)}}(),se=X(" "),me=X(" "),ge=X(" "),_e=0;_e2&&arguments[2]!==void 0&&arguments[2];for(var u in p)if(a[u]!==void 0)if(a[u]===null||Vn(a[u])!=="object")sd(p,a,u,s);else{var f=p[u],m=a[u];g2(f)&&g2(m)&&k6(f,m,s)}}function Jf(p,a,s){var u=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if(Mn(s))throw new TypeError("Arrays are not supported by deepExtend");for(var f=0;f3&&arguments[3]!==void 0&&arguments[3];if(Mn(s))throw new TypeError("Arrays are not supported by deepExtend");for(var f in s)if(Object.prototype.hasOwnProperty.call(s,f)&&!Qp(p).call(p,f))if(s[f]&&s[f].constructor===Object)a[f]===void 0&&(a[f]={}),a[f].constructor===Object?jn(a[f],s[f]):sd(a,s,f,u);else if(Mn(s[f])){a[f]=[];for(var m=0;m2&&arguments[2]!==void 0&&arguments[2],u=arguments.length>3&&arguments[3]!==void 0&&arguments[3];for(var f in a)if(Object.prototype.hasOwnProperty.call(a,f)||s===!0)if(Vn(a[f])==="object"&&a[f]!==null&&JO(a[f])===Object.prototype)p[f]===void 0?p[f]=jn({},a[f],s):Vn(p[f])==="object"&&p[f]!==null&&JO(p[f])===Object.prototype?jn(p[f],a[f],s):sd(p,a,f,u);else if(Mn(a[f])){var m;p[f]=Si(m=a[f]).call(m)}else sd(p,a,f,u);return p}function eg(p,a){var s;return Qb(s=[]).call(s,ql(p),[a])}function j6(p){return p.getBoundingClientRect().top}function nn(p,a){if(Mn(p))for(var s=p.length,u=0;u3&&arguments[3]!==void 0?arguments[3]:{},f=function(G){return G!=null},m=function(G){return G!==null&&Vn(G)==="object"};if(!m(p))throw new Error("Parameter mergeTarget must be an object");if(!m(a))throw new Error("Parameter options must be an object");if(!f(s))throw new Error("Parameter option must have a value");if(!m(u))throw new Error("Parameter globalOptions must be an object");var b=a[s],P=m(u)&&!function(G){for(var X in G)if(Object.prototype.hasOwnProperty.call(G,X))return!1;return!0}(u)?u[s]:void 0,k=P?P.enabled:void 0;if(b!==void 0){if(typeof b=="boolean")return m(p[s])||(p[s]={}),void(p[s].enabled=b);if(b===null&&!m(p[s])){if(!f(P))return;p[s]=Hu(P)}if(m(b)){var V=!0;b.enabled!==void 0?V=b.enabled:k!==void 0&&(V=P.enabled),function(G,X,se){m(G[se])||(G[se]={});var me=X[se],ge=G[se];for(var _e in me)Object.prototype.hasOwnProperty.call(me,_e)&&(ge[_e]=me[_e])}(p,a,s),p[s].enabled=V}}}var M6={linear:function(p){return p},easeInQuad:function(p){return p*p},easeOutQuad:function(p){return p*(2-p)},easeInOutQuad:function(p){return p<.5?2*p*p:(4-2*p)*p-1},easeInCubic:function(p){return p*p*p},easeOutCubic:function(p){return--p*p*p+1},easeInOutCubic:function(p){return p<.5?4*p*p*p:(p-1)*(2*p-2)*(2*p-2)+1},easeInQuart:function(p){return p*p*p*p},easeOutQuart:function(p){return 1- --p*p*p*p},easeInOutQuart:function(p){return p<.5?8*p*p*p*p:1-8*--p*p*p*p},easeInQuint:function(p){return p*p*p*p*p},easeOutQuint:function(p){return 1+--p*p*p*p*p},easeInOutQuint:function(p){return p<.5?16*p*p*p*p*p:1+16*--p*p*p*p*p}};function ud(p,a){var s;Mn(a)||(a=[a]);var u,f=P6(p);try{for(f.s();!(u=f.n()).done;){var m=u.value;if(m){s=m[a[0]];for(var b=1;b0&&arguments[0]!==void 0?arguments[0]:1;gt(this,p),this.pixelRatio=a,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return yt(p,[{key:"insertTo",value:function(a){this.hammer!==void 0&&(this.hammer.destroy(),this.hammer=void 0),this.container=a,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:"setUpdateCallback",value:function(a){if(typeof a!="function")throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=a}},{key:"setCloseCallback",value:function(a){if(typeof a!="function")throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=a}},{key:"_isColorString",value:function(a){if(typeof a=="string")return Xj[a]}},{key:"setColor",value:function(a){var s=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];if(a!=="none"){var u,f=this._isColorString(a);if(f!==void 0&&(a=f),Ql(a)===!0){if(H7(a)===!0){var m=a.substr(4).substr(0,a.length-5).split(",");u={r:m[0],g:m[1],b:m[2],a:1}}else if(function(V){return z7.test(V)}(a)===!0){var b=a.substr(5).substr(0,a.length-6).split(",");u={r:b[0],g:b[1],b:b[2],a:b[3]}}else if(C6(a)===!0){var P=Vi(a);u={r:P.r,g:P.g,b:P.b,a:1}}}else if(a instanceof Object&&a.r!==void 0&&a.g!==void 0&&a.b!==void 0){var k=a.a!==void 0?a.a:"1.0";u={r:a.r,g:a.g,b:a.b,a:k}}if(u===void 0)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+$m(a));this._setColor(u,s)}}},{key:"show",value:function(){this.closeCallback!==void 0&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}},{key:"_hide",value:function(){var a=this;(!(arguments.length>0&&arguments[0]!==void 0)||arguments[0])===!0&&(this.previousColor=Cn({},this.color)),this.applied===!0&&this.updateCallback(this.initialColor),this.frame.style.display="none",Ta(function(){a.closeCallback!==void 0&&(a.closeCallback(),a.closeCallback=void 0)},0)}},{key:"_save",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:"_apply",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:"_loadLast",value:function(){this.previousColor!==void 0?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}},{key:"_setColor",value:function(a){(!(arguments.length>1&&arguments[1]!==void 0)||arguments[1])===!0&&(this.initialColor=Cn({},a)),this.color=a;var s=tg(a.r,a.g,a.b),u=2*Math.PI,f=this.r*s.s,m=this.centerCoordinates.x+f*Math.sin(u*s.h),b=this.centerCoordinates.y+f*Math.cos(u*s.h);this.colorPickerSelector.style.left=m-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=b-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(a)}},{key:"_setOpacity",value:function(a){this.color.a=a/100,this._updatePicker(this.color)}},{key:"_setBrightness",value:function(a){var s=tg(this.color.r,this.color.g,this.color.b);s.v=a/100;var u=b2(s.h,s.s,s.v);u.a=this.color.a,this.color=u,this._updatePicker()}},{key:"_updatePicker",value:function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.color,s=tg(a.r,a.g,a.b),u=this.colorPickerCanvas.getContext("2d");this.pixelRation===void 0&&(this.pixelRatio=(window.devicePixelRatio||1)/(u.webkitBackingStorePixelRatio||u.mozBackingStorePixelRatio||u.msBackingStorePixelRatio||u.oBackingStorePixelRatio||u.backingStorePixelRatio||1)),u.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var f=this.colorPickerCanvas.clientWidth,m=this.colorPickerCanvas.clientHeight;u.clearRect(0,0,f,m),u.putImageData(this.hueCircle,0,0),u.fillStyle="rgba(0,0,0,"+(1-s.v)+")",u.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),Jm(u).call(u),this.brightnessRange.value=100*s.v,this.opacityRange.value=100*a.a,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}},{key:"_setSize",value:function(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:"_create",value:function(){var a,s,u,f;if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var m=this.colorPickerCanvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(m.webkitBackingStorePixelRatio||m.mozBackingStorePixelRatio||m.msBackingStorePixelRatio||m.oBackingStorePixelRatio||m.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var b=document.createElement("DIV");b.style.color="red",b.style.fontWeight="bold",b.style.padding="10px",b.innerText="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(b)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch{}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch{}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var P=this;this.opacityRange.onchange=function(){P._setOpacity(this.value)},this.opacityRange.oninput=function(){P._setOpacity(this.value)},this.brightnessRange.onchange=function(){P._setBrightness(this.value)},this.brightnessRange.oninput=function(){P._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerText="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerText="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerText="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerText="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerText="cancel",this.cancelButton.onclick=at(a=this._hide).call(a,this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerText="apply",this.applyButton.onclick=at(s=this._apply).call(s,this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerText="save",this.saveButton.onclick=at(u=this._save).call(u,this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerText="load last",this.loadButton.onclick=at(f=this._loadLast).call(f,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:"_bindHammer",value:function(){var a=this;this.drag={},this.pinch={},this.hammer=new Gf(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.on("hammer.input",function(s){s.isFirst&&a._moveSelector(s)}),this.hammer.on("tap",function(s){a._moveSelector(s)}),this.hammer.on("panstart",function(s){a._moveSelector(s)}),this.hammer.on("panmove",function(s){a._moveSelector(s)}),this.hammer.on("panend",function(s){a._moveSelector(s)})}},{key:"_generateHueCircle",value:function(){if(this.generated===!1){var a=this.colorPickerCanvas.getContext("2d");this.pixelRation===void 0&&(this.pixelRatio=(window.devicePixelRatio||1)/(a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||a.backingStorePixelRatio||1)),a.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var s,u,f,m,b=this.colorPickerCanvas.clientWidth,P=this.colorPickerCanvas.clientHeight;a.clearRect(0,0,b,P),this.centerCoordinates={x:.5*b,y:.5*P},this.r=.49*b;var k,V=2*Math.PI/360,G=1/this.r;for(f=0;f<360;f++)for(m=0;m3&&arguments[3]!==void 0?arguments[3]:1,m=arguments.length>4&&arguments[4]!==void 0?arguments[4]:function(){return!1};gt(this,p),this.parent=a,this.changedOptions=[],this.container=s,this.allowCreation=!1,this.hideOption=m,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},Cn(this.options,this.defaultOptions),this.configureOptions=u,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new Kj(f),this.wrapper=void 0}return yt(p,[{key:"setOptions",value:function(a){if(a!==void 0){this.popupHistory={},this._removePopup();var s=!0;if(typeof a=="string")this.options.filter=a;else if(Mn(a))this.options.filter=a.join();else if(Vn(a)==="object"){if(a==null)throw new TypeError("options cannot be null");a.container!==void 0&&(this.options.container=a.container),ts(a)!==void 0&&(this.options.filter=ts(a)),a.showButton!==void 0&&(this.options.showButton=a.showButton),a.enabled!==void 0&&(s=a.enabled)}else typeof a=="boolean"?(this.options.filter=!0,s=a):typeof a=="function"&&(this.options.filter=a,s=!0);ts(this.options)===!1&&(s=!1),this.options.enabled=s}this._clean()}},{key:"setModuleOptions",value:function(a){this.moduleOptions=a,this.options.enabled===!0&&(this._clean(),this.options.container!==void 0&&(this.container=this.options.container),this._create())}},{key:"_create",value:function(){this._clean(),this.changedOptions=[];var a=ts(this.options),s=0,u=!1;for(var f in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,f)&&(this.allowCreation=!1,u=!1,typeof a=="function"?u=(u=a(f,[]))||this._handleObject(this.configureOptions[f],[f],!0):a!==!0&&ln(a).call(a,f)===-1||(u=!0),u!==!1&&(this.allowCreation=!0,s>0&&this._makeItem([]),this._makeHeader(f),this._handleObject(this.configureOptions[f],[f])),s++);this._makeButton(),this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var a=0;a1?u-1:0),m=1;m2&&arguments[2]!==void 0&&arguments[2],f=document.createElement("div");if(f.className="vis-configuration vis-config-label vis-config-s"+s.length,u===!0){for(;f.firstChild;)f.removeChild(f.firstChild);f.appendChild(A6("i","b",a))}else f.innerText=a+":";return f}},{key:"_makeDropdown",value:function(a,s,u){var f=document.createElement("select");f.className="vis-configuration vis-config-select";var m=0;s!==void 0&&ln(a).call(a,s)!==-1&&(m=ln(a).call(a,s));for(var b=0;bb&&b!==1&&(k.max=Math.ceil(s*X),G=k.max,V="range increased"),k.value=s}else k.value=f;var se=document.createElement("input");se.className="vis-configuration vis-config-rangeinput",se.value=k.value;var me=this;k.onchange=function(){se.value=this.value,me._update(Number(this.value),u)},k.oninput=function(){se.value=this.value};var ge=this._makeLabel(u[u.length-1],u),_e=this._makeItem(u,ge,k,se);V!==""&&this.popupHistory[_e]!==G&&(this.popupHistory[_e]=G,this._setupPopup(V,_e))}},{key:"_makeButton",value:function(){var a=this;if(this.options.showButton===!0){var s=document.createElement("div");s.className="vis-configuration vis-config-button",s.innerText="generate options",s.onclick=function(){a._printOptions()},s.onmouseover=function(){s.className="vis-configuration vis-config-button hover"},s.onmouseout=function(){s.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(s)}}},{key:"_setupPopup",value:function(a,s){var u=this;if(this.initialized===!0&&this.allowCreation===!0&&this.popupCounter1&&arguments[1]!==void 0?arguments[1]:[],u=arguments.length>2&&arguments[2]!==void 0&&arguments[2],f=!1,m=ts(this.options),b=!1;for(var P in a)if(Object.prototype.hasOwnProperty.call(a,P)){f=!0;var k=a[P],V=eg(s,P);if(typeof m=="function"&&(f=m(P,s))===!1&&!Mn(k)&&typeof k!="string"&&typeof k!="boolean"&&k instanceof Object&&(this.allowCreation=!1,f=this._handleObject(k,V,!0),this.allowCreation=u===!1),f!==!1){b=!0;var G=this._getValue(V);if(Mn(k))this._handleArray(k,G,V);else if(typeof k=="string")this._makeTextInput(k,G,V);else if(typeof k=="boolean")this._makeCheckbox(k,G,V);else if(k instanceof Object){if(!this.hideOption(s,P,this.moduleOptions))if(k.enabled!==void 0){var X=eg(V,"enabled"),se=this._getValue(X);if(se===!0){var me=this._makeLabel(P,V,!0);this._makeItem(V,me),b=this._handleObject(k,V)||b}else this._makeCheckbox(k,se,V)}else{var ge=this._makeLabel(P,V,!0);this._makeItem(V,ge),b=this._handleObject(k,V)||b}}else console.error("dont know how to handle",k,P,V)}}return b}},{key:"_handleArray",value:function(a,s,u){typeof a[0]=="string"&&a[0]==="color"?(this._makeColorField(a,s,u),a[1]!==s&&this.changedOptions.push({path:u,value:s})):typeof a[0]=="string"?(this._makeDropdown(a,s,u),a[0]!==s&&this.changedOptions.push({path:u,value:s})):typeof a[0]=="number"&&(this._makeRange(a,s,u),a[0]!==s&&this.changedOptions.push({path:u,value:Number(s)}))}},{key:"_update",value:function(a,s){var u=this._constructOptions(a,s);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit("configChange",u),this.initialized=!0,this.parent.setOptions(u)}},{key:"_constructOptions",value:function(a,s){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},f=u;a=(a=a==="true"||a)!=="false"&&a;for(var m=0;mm-this.padding&&(k=!0),b=k?this.x-u:this.x,P=V?this.y-s:this.y}else(P=this.y-s)+s+this.padding>f&&(P=f-s-this.padding),Pm&&(b=m-u-this.padding),bb.distance?" in "+p.printLocation(m.path,a,"")+"Perhaps it was misplaced? Matching option found at: "+p.printLocation(b.path,b.closestMatch,""):m.distance<=8?'. Did you mean "'+m.closestMatch+'"?'+p.printLocation(m.path,a):". Did you mean one of these: "+p.print(no(s))+p.printLocation(u,a),console.error('%cUnknown option detected: "'+a+'"'+f,D6),tg=!0}},{key:"findInOptions",value:function(a,s,u){var f,m=arguments.length>3&&arguments[3]!==void 0&&arguments[3],b=1e9,P="",k=[],V=a.toLowerCase(),G=void 0;for(var X in s){var se=void 0;if(s[X].__type__!==void 0&&m===!0){var ve=p.findInOptions(a,s[X],Qv(u,X));b>ve.distance&&(P=ve.closestMatch,k=ve.path,b=ve.distance,G=ve.indexMatch)}else{var ge;ln(ge=X.toLowerCase()).call(ge,V)!==-1&&(G=X),b>(se=p.levenshteinDistance(a,X))&&(P=X,k=_i(f=u).call(f),b=se)}}return{closestMatch:P,path:k,distance:b,indexMatch:G}}},{key:"printLocation",value:function(a,s){for(var u=` +`:b.distance<=4&&m.distance>b.distance?" in "+p.printLocation(m.path,a,"")+"Perhaps it was misplaced? Matching option found at: "+p.printLocation(b.path,b.closestMatch,""):m.distance<=8?'. Did you mean "'+m.closestMatch+'"?'+p.printLocation(m.path,a):". Did you mean one of these: "+p.print(no(s))+p.printLocation(u,a),console.error('%cUnknown option detected: "'+a+'"'+f,D6),rg=!0}},{key:"findInOptions",value:function(a,s,u){var f,m=arguments.length>3&&arguments[3]!==void 0&&arguments[3],b=1e9,P="",k=[],V=a.toLowerCase(),G=void 0;for(var X in s){var se=void 0;if(s[X].__type__!==void 0&&m===!0){var me=p.findInOptions(a,s[X],eg(u,X));b>me.distance&&(P=me.closestMatch,k=me.path,b=me.distance,G=me.indexMatch)}else{var ge;ln(ge=X.toLowerCase()).call(ge,V)!==-1&&(G=X),b>(se=p.levenshteinDistance(a,X))&&(P=X,k=Si(f=u).call(f),b=se)}}return{closestMatch:P,path:k,distance:b,indexMatch:G}}},{key:"printLocation",value:function(a,s){for(var u=` `+(arguments.length>2&&arguments[2]!==void 0?arguments[2]:`Problem value found at: `)+`options = { @@ -34,50 +34,50 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `;for(var P=0;P":!0,"--":!0},cd="",a0=0,$r="",sr="",ns=Vo.NULL;function hi(){a0++,$r=cd.charAt(a0)}function pd(){return cd.charAt(a0+1)}function s0(p){var a=p.charCodeAt(0);return a<47?a===35||a===46:a<59?a>47:a<91?a>64:a<96?a===95:a<123&&a>96}function dd(p,a){if(p||(p={}),a)for(var s in a)a.hasOwnProperty(s)&&(p[s]=a[s]);return p}function nT(p,a,s){for(var u=a.split("."),f=p;u.length;){var m=u.shift();u.length?(f[m]||(f[m]={}),f=f[m]):f[m]=s}}function N6(p,a){for(var s,u,f=null,m=[p],b=p;b.parent;)m.push(b.parent),b=b.parent;if(b.nodes){for(s=0,u=b.nodes.length;s=0;s--){var P,k=m[s];k.nodes||(k.nodes=[]),ln(P=k.nodes).call(P,f)===-1&&k.nodes.push(f)}a.attr&&(f.attr=dd(f.attr,a.attr))}function oT(p,a){if(p.edges||(p.edges=[]),p.edges.push(a),p.edge){var s=dd({},p.edge);a.attr=dd(s,a.attr)}}function q7(p,a,s,u,f){var m={from:a,to:s,type:u};return p.edge&&(m.attr=dd({},p.edge)),m.attr=dd(m.attr||{},f),f!=null&&f.hasOwnProperty("arrows")&&f.arrows!=null&&(m.arrows={to:{enabled:!0,type:f.arrows.type}},f.arrows=null),m}function An(){for(ns=Vo.NULL,sr="";$r===" "||$r===" "||$r===` +`}},{key:"print",value:function(a){return $m(a).replace(/(")|(\[)|(\])|(,"__type__")/g,"").replace(/(,)/g,", ")}},{key:"levenshteinDistance",value:function(a,s){if(a.length===0)return s.length;if(s.length===0)return a.length;var u,f,m=[];for(u=0;u<=s.length;u++)m[u]=[u];for(f=0;f<=a.length;f++)m[0][f]=f;for(u=1;u<=s.length;u++)for(f=1;f<=a.length;f++)s.charAt(u-1)==a.charAt(f-1)?m[u][f]=m[u-1][f-1]:m[u][f]=Math.min(m[u-1][f-1]+1,Math.min(m[u][f-1]+1,m[u-1][f]+1));return m[s.length][a.length]}}]),p}(),eT=Yl,tT=R6,Xf=Gf,rT=Yj,w2=D6,$7=Qj;function L6(p){return cd=p,function(){var a={};if(a0=0,$r=cd.charAt(0),An(),sr==="strict"&&(a.strict=!0,An()),sr!=="graph"&&sr!=="digraph"||(a.type=sr,An()),ns===Vo.IDENTIFIER&&(a.id=sr,An()),sr!="{")throw la("Angle bracket { expected");if(An(),U7(a),sr!="}")throw la("Angle bracket } expected");if(An(),sr!=="")throw la("End of file expected");return An(),delete a.node,delete a.edge,delete a.graph,a}()}var ng={fontsize:"font.size",fontcolor:"font.color",labelfontcolor:"font.color",fontname:"font.face",color:["color.border","color.background"],fillcolor:"color.background",tooltip:"title",labeltooltip:"title"},eu=Hu(ng);eu.color="color.color",eu.style="dashes";var Vo={NULL:0,DELIMITER:1,IDENTIFIER:2,UNKNOWN:3},Z7={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},cd="",a0=0,$r="",sr="",ns=Vo.NULL;function hi(){a0++,$r=cd.charAt(a0)}function pd(){return cd.charAt(a0+1)}function s0(p){var a=p.charCodeAt(0);return a<47?a===35||a===46:a<59?a>47:a<91?a>64:a<96?a===95:a<123&&a>96}function dd(p,a){if(p||(p={}),a)for(var s in a)a.hasOwnProperty(s)&&(p[s]=a[s]);return p}function nT(p,a,s){for(var u=a.split("."),f=p;u.length;){var m=u.shift();u.length?(f[m]||(f[m]={}),f=f[m]):f[m]=s}}function N6(p,a){for(var s,u,f=null,m=[p],b=p;b.parent;)m.push(b.parent),b=b.parent;if(b.nodes){for(s=0,u=b.nodes.length;s=0;s--){var P,k=m[s];k.nodes||(k.nodes=[]),ln(P=k.nodes).call(P,f)===-1&&k.nodes.push(f)}a.attr&&(f.attr=dd(f.attr,a.attr))}function oT(p,a){if(p.edges||(p.edges=[]),p.edges.push(a),p.edge){var s=dd({},p.edge);a.attr=dd(s,a.attr)}}function q7(p,a,s,u,f){var m={from:a,to:s,type:u};return p.edge&&(m.attr=dd({},p.edge)),m.attr=dd(m.attr||{},f),f!=null&&f.hasOwnProperty("arrows")&&f.arrows!=null&&(m.arrows={to:{enabled:!0,type:f.arrows.type}},f.arrows=null),m}function An(){for(ns=Vo.NULL,sr="";$r===" "||$r===" "||$r===` `||$r==="\r";)hi();do{var p=!1;if($r==="#"){for(var a=a0-1;cd.charAt(a)===" "||cd.charAt(a)===" ";)a--;if(cd.charAt(a)===` `||cd.charAt(a)===""){for(;$r!=""&&$r!=` `;)hi();p=!0}}if($r==="/"&&pd()==="/"){for(;$r!=""&&$r!=` `;)hi();p=!0}if($r==="/"&&pd()==="*"){for(;$r!="";){if($r==="*"&&pd()==="/"){hi(),hi();break}hi()}p=!0}for(;$r===" "||$r===" "||$r===` `||$r==="\r";)hi()}while(p);if($r!==""){var s=$r+pd();if(Z7[s])return ns=Vo.DELIMITER,sr=s,hi(),void hi();if(Z7[$r])return ns=Vo.DELIMITER,sr=$r,void hi();if(s0($r)||$r==="-"){for(sr+=$r,hi();s0($r);)sr+=$r,hi();return sr==="false"?sr=!1:sr==="true"?sr=!0:isNaN(Number(sr))||(sr=Number(sr)),void(ns=Vo.IDENTIFIER)}if($r==='"'){for(hi();$r!=""&&($r!='"'||$r==='"'&&pd()==='"');)$r==='"'?(sr+=$r,hi()):$r==="\\"&&pd()==="n"?(sr+=` -`,hi()):sr+=$r,hi();if($r!='"')throw la('End of string " expected');return hi(),void(ns=Vo.IDENTIFIER)}for(ns=Vo.UNKNOWN;$r!="";)sr+=$r,hi();throw new SyntaxError('Syntax error in part "'+O2(sr,30)+'"')}ns=Vo.DELIMITER}function U7(p){for(;sr!==""&&sr!="}";)Kf(p),sr===";"&&An()}function Kf(p){var a=w2(p);if(a)l0(p,a);else{var s=function(f){return sr==="node"?(An(),f.node=Ju(),"node"):sr==="edge"?(An(),f.edge=Ju(),"edge"):sr==="graph"?(An(),f.graph=Ju(),"graph"):null}(p);if(!s){if(ns!=Vo.IDENTIFIER)throw la("Identifier expected");var u=sr;if(An(),sr==="="){if(An(),ns!=Vo.IDENTIFIER)throw la("Identifier expected");p[u]=sr,An()}else(function(f,m){var b={id:m},P=Ju();P&&(b.attr=P),N6(f,b),l0(f,m)})(p,u)}}}function w2(p){var a=null;if(sr==="subgraph"&&((a={}).type="subgraph",An(),ns===Vo.IDENTIFIER&&(a.id=sr,An())),sr==="{"){if(An(),a||(a={}),a.parent=p,a.node=p.node,a.edge=p.edge,a.graph=p.graph,U7(a),sr!="}")throw la("Angle bracket } expected");An(),delete a.node,delete a.edge,delete a.graph,delete a.parent,p.subgraphs||(p.subgraphs=[]),p.subgraphs.push(a)}return a}function l0(p,a){for(;sr==="->"||sr==="--";){var s,u=sr;An();var f=w2(p);if(f)s=f;else{if(ns!=Vo.IDENTIFIER)throw la("Identifier or subgraph expected");N6(p,{id:s=sr}),An()}oT(p,q7(p,a,s,u,Ju())),a=s}}function Ju(){for(var p,a,s=null,u={dashed:!0,solid:!1,dotted:[1,5]},f={dot:"circle",box:"box",crow:"crow",curve:"curve",icurve:"inv_curve",normal:"triangle",inv:"inv_triangle",diamond:"diamond",tee:"bar",vee:"vee"},m=new Array,b=new Array;sr==="[";){for(An(),s={};sr!==""&&sr!="]";){if(ns!=Vo.IDENTIFIER)throw la("Attribute name expected");var P=sr;if(An(),sr!="=")throw la("Equal sign = expected");if(An(),ns!=Vo.IDENTIFIER)throw la("Attribute value expected");var k=sr;P==="style"&&(k=u[k]),P==="arrowhead"&&(P="arrows",k={to:{enabled:!0,type:f[k]}}),P==="arrowtail"&&(P="arrows",k={from:{enabled:!0,type:f[k]}}),m.push({attr:s,name:P,value:k}),b.push(P),An(),sr==","&&An()}if(sr!="]")throw la("Bracket ] expected");An()}if(Qp(b).call(b,"dir")){var V={arrows:{}};for(p=0;p"&&(P.arrows="to"),P};Fn(f=s.edges).call(f,function(b){var P,k,V,G,X,se,ve;P=b.from instanceof Object?b.from.nodes:{id:b.from},k=b.to instanceof Object?b.to.nodes:{id:b.to},b.from instanceof Object&&b.from.edges&&Fn(V=b.from.edges).call(V,function(ge){var xe=m(ge);u.edges.push(xe)}),X=k,se=function(ge,xe){var Re=q7(u,ge.id,xe.id,b.type,b.attr),Ue=m(Re);u.edges.push(Ue)},Mn(G=P)?Fn(G).call(G,function(ge){Mn(X)?Fn(X).call(X,function(xe){se(ge,xe)}):se(ge,X)}):Mn(X)?Fn(X).call(X,function(ge){se(G,ge)}):se(G,X),b.to instanceof Object&&b.to.edges&&Fn(ve=b.to.edges).call(ve,function(ge){var xe=m(ge);u.edges.push(xe)})})}return s.attr&&(u.options=s.attr),u}var X7=Object.freeze({__proto__:null,DOTToGraph:F6,parseDOT:L6});function u0(p,a){var s,u={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};a!=null&&(a.fixed!=null&&(u.nodes.fixed=a.fixed),a.parseColor!=null&&(u.nodes.parseColor=a.parseColor),a.inheritColor!=null&&(u.edges.inheritColor=a.inheritColor));var f=p.edges,m=Kp(f).call(f,function(b){var P={from:b.source,id:b.id,to:b.target};return b.attributes!=null&&(P.attributes=b.attributes),b.label!=null&&(P.label=b.label),b.attributes!=null&&b.attributes.title!=null&&(P.title=b.attributes.title),b.type==="Directed"&&(P.arrows="to"),b.color&&u.edges.inheritColor===!1&&(P.color=b.color),P});return{nodes:Kp(s=p.nodes).call(s,function(b){var P={id:b.id,fixed:u.nodes.fixed&&b.x!=null&&b.y!=null};return b.attributes!=null&&(P.attributes=b.attributes),b.label!=null&&(P.label=b.label),b.size!=null&&(P.size=b.size),b.attributes!=null&&b.attributes.title!=null&&(P.title=b.attributes.title),b.title!=null&&(P.title=b.title),b.x!=null&&(P.x=b.x),b.y!=null&&(P.y=b.y),b.color!=null&&(u.nodes.parseColor===!0?P.color=b.color:P.color={background:b.color,border:b.color,highlight:{background:b.color,border:b.color},hover:{background:b.color,border:b.color}}),P}),edges:m}}var iT=Object.freeze({__proto__:null,parseGephi:u0}),aT=Object.freeze({__proto__:null,cn:{addDescription:"\u5355\u51FB\u7A7A\u767D\u5904\u653E\u7F6E\u65B0\u8282\u70B9\u3002",addEdge:"\u6DFB\u52A0\u8FDE\u63A5\u7EBF",addNode:"\u6DFB\u52A0\u8282\u70B9",back:"\u8FD4\u56DE",close:"\u95DC\u9589",createEdgeError:"\u65E0\u6CD5\u5C06\u8FDE\u63A5\u7EBF\u8FDE\u63A5\u5230\u7FA4\u96C6\u3002",del:"\u5220\u9664\u9009\u5B9A",deleteClusterError:"\u65E0\u6CD5\u5220\u9664\u7FA4\u96C6\u3002",edgeDescription:"\u5355\u51FB\u67D0\u4E2A\u8282\u70B9\u5E76\u5C06\u8BE5\u8FDE\u63A5\u7EBF\u62D6\u52A8\u5230\u53E6\u4E00\u4E2A\u8282\u70B9\u4EE5\u8FDE\u63A5\u5B83\u4EEC\u3002",edit:"\u7F16\u8F91",editClusterError:"\u65E0\u6CD5\u7F16\u8F91\u7FA4\u96C6\u3002",editEdge:"\u7F16\u8F91\u8FDE\u63A5\u7EBF",editEdgeDescription:"\u5355\u51FB\u63A7\u5236\u8282\u70B9\u5E76\u5C06\u5B83\u4EEC\u62D6\u5230\u8282\u70B9\u4E0A\u8FDE\u63A5\u3002",editNode:"\u7F16\u8F91\u8282\u70B9"},cs:{addDescription:"Kluknut\xEDm do pr\xE1zdn\xE9ho prostoru m\u016F\u017Eete p\u0159idat nov\xFD vrchol.",addEdge:"P\u0159idat hranu",addNode:"P\u0159idat vrchol",back:"Zp\u011Bt",close:"Zav\u0159\xEDt",createEdgeError:"Nelze p\u0159ipojit hranu ke shluku.",del:"Smazat v\xFDb\u011Br",deleteClusterError:"Nelze mazat shluky.",edgeDescription:"P\u0159eta\u017Een\xEDm z jednoho vrcholu do druh\xE9ho m\u016F\u017Eete spojit tyto vrcholy novou hranou.",edit:"Upravit",editClusterError:"Nelze upravovat shluky.",editEdge:"Upravit hranu",editEdgeDescription:"P\u0159eta\u017Een\xEDm kontroln\xEDho vrcholu hrany ji m\u016F\u017Eete p\u0159ipojit k jin\xE9mu vrcholu.",editNode:"Upravit vrchol"},de:{addDescription:"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.",addEdge:"Kante hinzuf\xFCgen",addNode:"Knoten hinzuf\xFCgen",back:"Zur\xFCck",close:"Schlie\xDFen",createEdgeError:"Es ist nicht m\xF6glich, Kanten mit Clustern zu verbinden.",del:"L\xF6sche Auswahl",deleteClusterError:"Cluster k\xF6nnen nicht gel\xF6scht werden.",edgeDescription:"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.",edit:"Editieren",editClusterError:"Cluster k\xF6nnen nicht editiert werden.",editEdge:"Kante editieren",editEdgeDescription:"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.",editNode:"Knoten editieren"},en:{addDescription:"Click in an empty space to place a new node.",addEdge:"Add Edge",addNode:"Add Node",back:"Back",close:"Close",createEdgeError:"Cannot link edges to a cluster.",del:"Delete selected",deleteClusterError:"Clusters cannot be deleted.",edgeDescription:"Click on a node and drag the edge to another node to connect them.",edit:"Edit",editClusterError:"Clusters cannot be edited.",editEdge:"Edit Edge",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",editNode:"Edit Node"},es:{addDescription:"Haga clic en un lugar vac\xEDo para colocar un nuevo nodo.",addEdge:"A\xF1adir arista",addNode:"A\xF1adir nodo",back:"Atr\xE1s",close:"Cerrar",createEdgeError:"No se puede conectar una arista a un grupo.",del:"Eliminar selecci\xF3n",deleteClusterError:"No es posible eliminar grupos.",edgeDescription:"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.",edit:"Editar",editClusterError:"No es posible editar grupos.",editEdge:"Editar arista",editEdgeDescription:"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.",editNode:"Editar nodo"},fr:{addDescription:"Cliquez dans un endroit vide pour placer un n\u0153ud.",addEdge:"Ajouter un lien",addNode:"Ajouter un n\u0153ud",back:"Retour",close:"Fermer",createEdgeError:"Impossible de cr\xE9er un lien vers un cluster.",del:"Effacer la s\xE9lection",deleteClusterError:"Les clusters ne peuvent pas \xEAtre effac\xE9s.",edgeDescription:"Cliquez sur un n\u0153ud et glissez le lien vers un autre n\u0153ud pour les connecter.",edit:"\xC9diter",editClusterError:"Les clusters ne peuvent pas \xEAtre \xE9dit\xE9s.",editEdge:"\xC9diter le lien",editEdgeDescription:"Cliquez sur les points de contr\xF4le et glissez-les pour connecter un n\u0153ud.",editNode:"\xC9diter le n\u0153ud"},it:{addDescription:"Clicca per aggiungere un nuovo nodo",addEdge:"Aggiungi un vertice",addNode:"Aggiungi un nodo",back:"Indietro",close:"Chiudere",createEdgeError:"Non si possono collegare vertici ad un cluster",del:"Cancella la selezione",deleteClusterError:"I cluster non possono essere cancellati",edgeDescription:"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.",edit:"Modifica",editClusterError:"I clusters non possono essere modificati.",editEdge:"Modifica il vertice",editEdgeDescription:"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.",editNode:"Modifica il nodo"},nl:{addDescription:"Klik op een leeg gebied om een nieuwe node te maken.",addEdge:"Link toevoegen",addNode:"Node toevoegen",back:"Terug",close:"Sluiten",createEdgeError:"Kan geen link maken naar een cluster.",del:"Selectie verwijderen",deleteClusterError:"Clusters kunnen niet worden verwijderd.",edgeDescription:"Klik op een node en sleep de link naar een andere node om ze te verbinden.",edit:"Wijzigen",editClusterError:"Clusters kunnen niet worden aangepast.",editEdge:"Link wijzigen",editEdgeDescription:"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.",editNode:"Node wijzigen"},pt:{addDescription:"Clique em um espa\xE7o em branco para adicionar um novo n\xF3",addEdge:"Adicionar aresta",addNode:"Adicionar n\xF3",back:"Voltar",close:"Fechar",createEdgeError:"N\xE3o foi poss\xEDvel linkar arestas a um cluster.",del:"Remover selecionado",deleteClusterError:"Clusters n\xE3o puderam ser removidos.",edgeDescription:"Clique em um n\xF3 e arraste a aresta at\xE9 outro n\xF3 para conect\xE1-los",edit:"Editar",editClusterError:"Clusters n\xE3o puderam ser editados.",editEdge:"Editar aresta",editEdgeDescription:"Clique nos pontos de controle e os arraste para um n\xF3 para conect\xE1-los",editNode:"Editar n\xF3"},ru:{addDescription:"\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u0432 \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u043E\u0435 \u043C\u0435\u0441\u0442\u043E, \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0443\u0437\u0435\u043B.",addEdge:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0440\u0435\u0431\u0440\u043E",addNode:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0443\u0437\u0435\u043B",back:"\u041D\u0430\u0437\u0430\u0434",close:"\u0417\u0430\u043A\u0440\u044B\u0432\u0430\u0442\u044C",createEdgeError:"\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u0440\u0435\u0431\u0440\u0430 \u0432 \u043A\u043B\u0430\u0441\u0442\u0435\u0440.",del:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0435",deleteClusterError:"\u041A\u043B\u0430\u0441\u0442\u0435\u0440\u044B \u043D\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0443\u0434\u0430\u043B\u0435\u043D\u044B",edgeDescription:"\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u043D\u0430 \u0443\u0437\u0435\u043B \u0438 \u043F\u0440\u043E\u0442\u044F\u043D\u0438\u0442\u0435 \u0440\u0435\u0431\u0440\u043E \u043A \u0434\u0440\u0443\u0433\u043E\u043C\u0443 \u0443\u0437\u043B\u0443, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u0438\u0445.",edit:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C",editClusterError:"\u041A\u043B\u0430\u0441\u0442\u0435\u0440\u044B \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B \u0434\u043B\u044F \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F.",editEdge:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0440\u0435\u0431\u0440\u043E",editEdgeDescription:"\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u043D\u0430 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044C\u043D\u044B\u0435 \u0442\u043E\u0447\u043A\u0438 \u0438 \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0438\u0445 \u0432 \u0443\u0437\u0435\u043B, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043A \u043D\u0435\u043C\u0443.",editNode:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0437\u0435\u043B"},uk:{addDescription:"K\u043B\u0456\u043A\u043D\u0456\u0442\u044C \u043D\u0430 \u0432\u0456\u043B\u044C\u043D\u0435 \u043C\u0456\u0441\u0446\u0435, \u0449\u043E\u0431 \u0434\u043E\u0434\u0430\u0442\u0438 \u043D\u043E\u0432\u0438\u0439 \u0432\u0443\u0437\u043E\u043B.",addEdge:"\u0414\u043E\u0434\u0430\u0442\u0438 \u043A\u0440\u0430\u0439",addNode:"\u0414\u043E\u0434\u0430\u0442\u0438 \u0432\u0443\u0437\u043E\u043B",back:"\u041D\u0430\u0437\u0430\u0434",close:"\u0417\u0430\u043A\u0440\u0438\u0442\u0438",createEdgeError:"\u041D\u0435 \u043C\u043E\u0436\u043B\u0438\u0432\u043E \u043E\u0431'\u0454\u0434\u043D\u0430\u0442\u0438 \u043A\u0440\u0430\u0457 \u0432 \u0433\u0440\u0443\u043F\u0443.",del:"\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u043E\u0431\u0440\u0430\u043D\u0435",deleteClusterError:"\u0413\u0440\u0443\u043F\u0438 \u043D\u0435 \u043C\u043E\u0436\u0443\u0442\u044C \u0431\u0443\u0442\u0438 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u0456.",edgeDescription:"\u041A\u043B\u0456\u043A\u043D\u0456\u0442\u044C \u043D\u0430 \u0432\u0443\u0437\u043E\u043B \u0456 \u043F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u043A\u0440\u0430\u0439 \u0434\u043E \u0456\u043D\u0448\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430, \u0449\u043E\u0431 \u0457\u0445 \u0437'\u0454\u0434\u043D\u0430\u0442\u0438.",edit:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438",editClusterError:"\u0413\u0440\u0443\u043F\u0438 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0456 \u0434\u043B\u044F \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043D\u043D\u044F.",editEdge:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043A\u0440\u0430\u0439",editEdgeDescription:"\u041A\u043B\u0456\u043A\u043D\u0456\u0442\u044C \u043D\u0430 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044C\u043D\u0456 \u0442\u043E\u0447\u043A\u0438 \u0456 \u043F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u0457\u0445 \u0443 \u0432\u0443\u0437\u043E\u043B, \u0449\u043E\u0431 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u0434\u043E \u043D\u044C\u043E\u0433\u043E.",editNode:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0443\u0437\u043E\u043B"}}),B6=function(){function p(){gt(this,p),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement("canvas")}return yt(p,[{key:"init",value:function(){if(!this.initialized()){this.src=this.image.src;var a=this.image.width,s=this.image.height;this.width=a,this.height=s;var u=Math.floor(s/2),f=Math.floor(s/4),m=Math.floor(s/8),b=Math.floor(s/16),P=Math.floor(a/2),k=Math.floor(a/4),V=Math.floor(a/8),G=Math.floor(a/16);this.canvas.width=3*k,this.canvas.height=u,this.coordinates=[[0,0,P,u],[P,0,k,f],[P,f,V,m],[5*V,f,G,b]],this._fillMipMap()}}},{key:"initialized",value:function(){return this.coordinates!==void 0}},{key:"_fillMipMap",value:function(){var a=this.canvas.getContext("2d"),s=this.coordinates[0];a.drawImage(this.image,s[0],s[1],s[2],s[3]);for(var u=1;u2){s*=.5;for(var P=0;s>2&&P=this.NUM_ITERATIONS&&(P=this.NUM_ITERATIONS-1);var k=this.coordinates[P];a.drawImage(this.canvas,k[0],k[1],k[2],k[3],u,f,m,b)}else a.drawImage(this.image,u,f,m,b)}}]),p}(),z6=function(){function p(a){gt(this,p),this.images={},this.imageBroken={},this.callback=a}return yt(p,[{key:"_tryloadBrokenUrl",value:function(a,s,u){a!==void 0&&u!==void 0&&(s!==void 0?(u.image.onerror=function(){console.error("Could not load brokenImage:",s)},u.image.src=s):console.warn("No broken url image defined"))}},{key:"_redrawWithImage",value:function(a){this.callback&&this.callback(a)}},{key:"load",value:function(a,s){var u=this,f=this.images[a];if(f)return f;var m=new B6;return this.images[a]=m,m.image.onload=function(){u._fixImageCoordinates(m.image),m.init(),u._redrawWithImage(m)},m.image.onerror=function(){console.error("Could not load image:",a),u._tryloadBrokenUrl(a,s,m)},m.image.src=a,m}},{key:"_fixImageCoordinates",value:function(a){a.width===0&&(document.body.appendChild(a),a.width=a.offsetWidth,a.height=a.offsetHeight,document.body.removeChild(a))}}]),p}(),K7={exports:{}},sT=c(function(){if(typeof ArrayBuffer=="function"){var p=new ArrayBuffer(8);Object.isExtensible(p)&&Object.defineProperty(p,"a",{value:8})}}),lT=c,Y7=Cr,x2=ee,os=sT,_2=Object.isExtensible,uT=lT(function(){_2(1)})||os?function(p){return!!Y7(p)&&(!os||x2(p)!=="ArrayBuffer")&&(!_2||_2(p))}:_2,W6=!c(function(){return Object.isExtensible(Object.preventExtensions({}))}),Q7=Bt,H6=N,e8=kn,cT=Cr,S2=Yo,V6=mo.f,t8=Rm,pT=xb,ng=uT,$6=W6,Yf=!1,pl=ef("meta"),dT=0,I2=function(p){V6(p,pl,{value:{objectID:"O"+dT++,weakData:{}}})},fT=K7.exports={enable:function(){fT.enable=function(){},Yf=!0;var p=t8.f,a=H6([].splice),s={};s[pl]=1,p(s).length&&(t8.f=function(u){for(var f=p(u),m=0,b=f.length;mm;m++)if((P=Ue(p[m]))&&G6(X6,P))return P;return new p0(!1)}u=o8(p,f)}for(k=se?p.next:u.next;!(V=r8(k,u)).done;){try{P=Ue(V.value)}catch(et){ig(u,"throw",et)}if(typeof P=="object"&&P&&G6(X6,P))return P}return new p0(!1)},hT=ir,mT=TypeError,qc=function(p,a){if(hT(a,p))return p;throw new mT("Incorrect invocation")},i8=Bt,vT=i,K6=Qf,gT=c,yT=_c,bT=E2,a8=qc,Y6=he,s8=Cr,P2=Rt,l8=Ka,k2=mo.f,u8=Fc.forEach,Q6=Se,j2=el.set,T2=el.getterFor,e4=function(p,a,s){var u,f=p.indexOf("Map")!==-1,m=p.indexOf("Weak")!==-1,b=f?"set":"add",P=vT[p],k=P&&P.prototype,V={};if(Q6&&Y6(P)&&(m||k.forEach&&!gT(function(){new P().entries().next()}))){var G=(u=a(function(se,ve){j2(a8(se,G),{type:p,collection:new P}),P2(ve)||bT(ve,se[b],{that:se,AS_ENTRIES:f})})).prototype,X=T2(p);u8(["add","clear","delete","forEach","get","has","set","keys","values","entries"],function(se){var ve=se==="add"||se==="set";!(se in k)||m&&se==="clear"||yT(G,se,function(ge,xe){var Re=X(this).collection;if(!ve&&m&&!s8(ge))return se==="get"&&void 0;var Ue=Re[se](ge===0?0:ge,xe);return ve?this:Ue})}),m||k2(G,"size",{configurable:!0,get:function(){return X(this).collection.size}})}else u=s.getConstructor(a,p,f,b),K6.enable();return l8(u,p,!1,!0),V[p]=u,i8({global:!0,forced:!0},V),m||s.setStrong(u,p,f),u},d0=Wl,Xu=function(p,a,s){for(var u in a)s&&s.unsafe&&p[u]?p[u]=a[u]:d0(p,u,a[u],s);return p},t4=or,wT=$l,OT=Se,f0=ho("species"),xT=rl,_T=$l,c8=Xu,ST=of,IT=qc,p8=Rt,r4=E2,n4=Sw,d8=Q1,o4=function(p){var a=t4(p);OT&&a&&!a[f0]&&wT(a,f0,{configurable:!0,get:function(){return this}})},h0=Se,i4=Qf.fastKey,m0=el.set,Rs=el.getterFor,a4={getConstructor:function(p,a,s,u){var f=p(function(V,G){IT(V,m),m0(V,{type:a,index:xT(null),first:void 0,last:void 0,size:0}),h0||(V.size=0),p8(G)||r4(G,V[u],{that:V,AS_ENTRIES:s})}),m=f.prototype,b=Rs(a),P=function(V,G,X){var se,ve,ge=b(V),xe=k(V,G);return xe?xe.value=X:(ge.last=xe={index:ve=i4(G,!0),key:G,value:X,previous:se=ge.last,next:void 0,removed:!1},ge.first||(ge.first=xe),se&&(se.next=xe),h0?ge.size++:V.size++,ve!=="F"&&(ge.index[ve]=xe)),V},k=function(V,G){var X,se=b(V),ve=i4(G);if(ve!=="F")return se.index[ve];for(X=se.first;X;X=X.next)if(X.key===G)return X};return c8(m,{clear:function(){for(var V=b(this),G=V.index,X=V.first;X;)X.removed=!0,X.previous&&(X.previous=X.previous.next=void 0),delete G[X.index],X=X.next;V.first=V.last=void 0,h0?V.size=0:this.size=0},delete:function(V){var G=this,X=b(G),se=k(G,V);if(se){var ve=se.next,ge=se.previous;delete X.index[se.index],se.removed=!0,ge&&(ge.next=ve),ve&&(ve.previous=ge),X.first===se&&(X.first=ve),X.last===se&&(X.last=ge),h0?X.size--:G.size--}return!!se},forEach:function(V){for(var G,X=b(this),se=ST(V,arguments.length>1?arguments[1]:void 0);G=G?G.next:X.first;)for(se(G.value,G.key,this);G&&G.removed;)G=G.previous},has:function(V){return!!k(this,V)}}),c8(m,s?{get:function(V){var G=k(this,V);return G&&G.value},set:function(V,G){return P(this,V===0?0:V,G)}}:{add:function(V){return P(this,V=V===0?0:V,V)}}),h0&&_T(m,"size",{configurable:!0,get:function(){return b(this).size}}),f},setStrong:function(p,a,s){var u=a+" Iterator",f=Rs(a),m=Rs(u);n4(p,a,function(b,P){m0(this,{type:u,target:b,state:f(b),kind:P,last:void 0})},function(){for(var b=m(this),P=b.kind,k=b.last;k&&k.removed;)k=k.previous;return b.target&&(b.last=k=k?k.next:b.state.first)?d8(P==="keys"?k.key:P==="values"?k.value:[k.key,k.value],!1):(b.target=void 0,d8(void 0,!0))},s?"entries":"values",!s,!0),o4(a)}};e4("Map",function(p){return function(){return p(this,arguments.length?arguments[0]:void 0)}},a4);var f8=n(St.Map),ET=function(){function p(){gt(this,p),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}},{border:"#990000",background:"#EE0000",highlight:{border:"#BB0000",background:"#FF3333"},hover:{border:"#BB0000",background:"#FF3333"}},{border:"#FF6000",background:"#FF6000",highlight:{border:"#FF6000",background:"#FF6000"},hover:{border:"#FF6000",background:"#FF6000"}},{border:"#97C2FC",background:"#2B7CE9",highlight:{border:"#D2E5FF",background:"#2B7CE9"},hover:{border:"#D2E5FF",background:"#2B7CE9"}},{border:"#399605",background:"#255C03",highlight:{border:"#399605",background:"#255C03"},hover:{border:"#399605",background:"#255C03"}},{border:"#B70054",background:"#FF007E",highlight:{border:"#B70054",background:"#FF007E"},hover:{border:"#B70054",background:"#FF007E"}},{border:"#AD85E4",background:"#7C29F0",highlight:{border:"#D3BDF0",background:"#7C29F0"},hover:{border:"#D3BDF0",background:"#7C29F0"}},{border:"#4557FA",background:"#000EA1",highlight:{border:"#6E6EFD",background:"#000EA1"},hover:{border:"#6E6EFD",background:"#000EA1"}},{border:"#FFC0CB",background:"#FD5A77",highlight:{border:"#FFD1D9",background:"#FD5A77"},hover:{border:"#FFD1D9",background:"#FD5A77"}},{border:"#C2FABC",background:"#74D66A",highlight:{border:"#E6FFE3",background:"#74D66A"},hover:{border:"#E6FFE3",background:"#74D66A"}},{border:"#EE0000",background:"#990000",highlight:{border:"#FF3333",background:"#BB0000"},hover:{border:"#FF3333",background:"#BB0000"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},Cn(this.options,this.defaultOptions)}return yt(p,[{key:"setOptions",value:function(a){var s=["useDefaultGroups"];if(a!==void 0){for(var u in a)if(Object.prototype.hasOwnProperty.call(a,u)&&ln(s).call(s,u)===-1){var f=a[u];this.add(u,f)}}}},{key:"clear",value:function(){this._groups=new f8,this._groupNames=[]}},{key:"get",value:function(a){var s=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],u=this._groups.get(a);if(u===void 0&&s)if(this.options.useDefaultGroups===!1&&this._groupNames.length>0){var f=this._groupIndex%this._groupNames.length;++this._groupIndex,(u={}).color=this._groups.get(this._groupNames[f]),this._groups.set(a,u)}else{var m=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(u={}).color=this._defaultGroups[m],this._groups.set(a,u)}return u}},{key:"add",value:function(a,s){return this._groups.has(a)||this._groupNames.push(a),this._groups.set(a,s),s}}]),p}();Bt({target:"Number",stat:!0},{isNaN:function(p){return p!=p}});var ag=n(St.Number.isNaN),s4=i.isFinite,PT=Number.isFinite||function(p){return typeof p=="number"&&s4(p)};Bt({target:"Number",stat:!0},{isFinite:PT});var Ku=n(St.Number.isFinite),Ii=Fc.some;Bt({target:"Array",proto:!0,forced:!Bu("some")},{some:function(p){return Ii(this,p,arguments.length>1?arguments[1]:void 0)}});var ua=vo("Array").some,C2=ir,l4=ua,Uc=Array.prototype,h8=function(p){var a=p.some;return p===Uc||C2(Uc,p)&&a===Uc.some?l4:a},u4=n(h8),fd=n(St.Object.getOwnPropertySymbols),eh={exports:{}},th=Bt,M2=c,v0=Pn,Yu=be.f,c4=Se;th({target:"Object",stat:!0,forced:!c4||M2(function(){Yu(1)}),sham:!c4},{getOwnPropertyDescriptor:function(p,a){return Yu(v0(p),a)}});var p4=St.Object,m8=eh.exports=function(p,a){return p4.getOwnPropertyDescriptor(p,a)};p4.getOwnPropertyDescriptor.sham&&(m8.sham=!0);var sg=eh.exports,Qu=n(sg),A2=Kk,ec=Pn,g0=be,lg=Hp;Bt({target:"Object",stat:!0,sham:!Se},{getOwnPropertyDescriptors:function(p){for(var a,s,u=ec(p),f=g0.f,m=A2(u),b={},P=0;m.length>P;)(s=f(u,a=m[P++]))!==void 0&&lg(b,a,s);return b}});var Ds=n(St.Object.getOwnPropertyDescriptors),v8={exports:{}},g8=Bt,ug=Se,R2=Tc.f;g8({target:"Object",stat:!0,forced:Object.defineProperties!==R2,sham:!ug},{defineProperties:R2});var rh=St.Object,d4=v8.exports=function(p,a){return rh.defineProperties(p,a)};rh.defineProperties.sham&&(d4.sham=!0);var hd=n(v8.exports),y0=n(Mm);function D2(p,a,s){return(a=kS(a))in p?Am(p,a,{value:s,enumerable:!0,configurable:!0,writable:!0}):p[a]=s,p}var ca=i,md=c,$o=na,Aa=u7.trim,cg=YO,b0=N("".charAt),vd=ca.parseFloat,nh=ca.Symbol,oh=nh&&nh.iterator,pa=1/vd(cg+"-0")!=-1/0||oh&&!md(function(){vd(Object(oh))})?function(p){var a=Aa($o(p)),s=vd(a);return s===0&&b0(a,0)==="-"?-0:s}:vd;Bt({global:!0,forced:parseFloat!==pa},{parseFloat:pa});var Ls=n(St.parseFloat),L2=Bt,y8=c,ih=xb.f;L2({target:"Object",stat:!0,forced:y8(function(){return!Object.getOwnPropertyNames(1)})},{getOwnPropertyNames:ih});var Gc=St.Object,N2=function(p){return Gc.getOwnPropertyNames(p)},ah=n(N2);function f4(p,a){var s=["node","edge","label"],u=!0,f=ud(a,"chosen");if(typeof f=="boolean")u=f;else if(Vn(f)==="object"){if(ln(s).call(s,p)===-1)throw new Error("choosify: subOption '"+p+"' should be one of '"+s.join("', '")+"'");var m=ud(a,["chosen",p]);typeof m!="boolean"&&typeof m!="function"||(u=m)}return u}function F2(p,a,s){if(p.width<=0||p.height<=0)return!1;if(s!==void 0){var u={x:a.x-s.x,y:a.y-s.y};if(s.angle!==0){var f=-s.angle;a={x:Math.cos(f)*u.x-Math.sin(f)*u.y,y:Math.sin(f)*u.x+Math.cos(f)*u.y}}else a=u}var m=p.x+p.width,b=p.y+p.width;return p.lefta.x&&p.topa.y}function w0(p){return typeof p=="string"&&p!==""}function h4(p,a,s,u){var f=u.x,m=u.y;if(typeof u.distanceToBorder=="function"){var b=u.distanceToBorder(p,a),P=Math.sin(a)*b,k=Math.cos(a)*b;k===b?(f+=b,m=u.y):P===b?(f=u.x,m-=b):(f+=k,m-=P)}else u.shape.width>u.shape.height?(f=u.x+.5*u.shape.width,m=u.y-s):(f=u.x+s,m=u.y-.5*u.shape.height);return{x:f,y:m}}var b8=vo("Array").values,B2=bs,m4=Yo,w8=ir,kT=b8,z2=Array.prototype,jT={DOMTokenList:!0,NodeList:!0},TT=function(p){var a=p.values;return p===z2||w8(z2,p)&&a===z2.values||m4(jT,B2(p))?kT:a},O8=n(TT),CT=function(){function p(a){gt(this,p),this.measureText=a,this.current=0,this.width=0,this.height=0,this.lines=[]}return yt(p,[{key:"_add",value:function(a,s){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"normal";this.lines[a]===void 0&&(this.lines[a]={width:0,height:0,blocks:[]});var f=s;s!==void 0&&s!==""||(f=" ");var m=this.measureText(f,u),b=Cn({},O8(m));b.text=s,b.width=m.width,b.mod=u,s!==void 0&&s!==""||(b.width=0),this.lines[a].blocks.push(b),this.lines[a].width+=b.width}},{key:"curWidth",value:function(){var a=this.lines[this.current];return a===void 0?0:a.width}},{key:"append",value:function(a){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"normal";this._add(this.current,a,s)}},{key:"newLine",value:function(a){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"normal";this._add(this.current,a,s),this.current++}},{key:"determineLineHeights",value:function(){for(var a=0;aa&&(a=f.width),s+=f.height}this.width=a,this.height=s}},{key:"removeEmptyBlocks",value:function(){for(var a=[],s=0;s"://,""://,""://,"":/<\/b>/,"":/<\/i>/,"":/<\/code>/,"*":/\*/,_:/_/,"`":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},O0=function(){function p(a){gt(this,p),this.text=a,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer="",this.modStack=[],this.blocks=[]}return yt(p,[{key:"mod",value:function(){return this.modStack.length===0?"normal":this.modStack[0]}},{key:"modName",value:function(){return this.modStack.length===0?"normal":this.modStack[0]==="mono"?"mono":this.bold&&this.ital?"boldital":this.bold?"bold":this.ital?"ital":void 0}},{key:"emitBlock",value:function(){this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer="")}},{key:"add",value:function(a){a===" "&&(this.spacing=!0),this.spacing&&(this.buffer+=" ",this.spacing=!1),a!=" "&&(this.buffer+=a)}},{key:"parseWS",value:function(a){return!!/[ \t]/.test(a)&&(this.mono?this.add(a):this.spacing=!0,!0)}},{key:"setTag",value:function(a){this.emitBlock(),this[a]=!0,this.modStack.unshift(a)}},{key:"unsetTag",value:function(a){this.emitBlock(),this[a]=!1,this.modStack.shift()}},{key:"parseStartTag",value:function(a,s){return!(this.mono||this[a]||!this.match(s))&&(this.setTag(a),!0)}},{key:"match",value:function(a){var s=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],u=Mo(this.prepareRegExp(a),2),f=u[0],m=u[1],b=f.test(this.text.substr(this.position,m));return b&&s&&(this.position+=m-1),b}},{key:"parseEndTag",value:function(a,s,u){var f=this.mod()===a;return!(!(f=a==="mono"?f&&this.mono:f&&!this.mono)||!this.match(s))&&(u!==void 0?(this.position===this.text.length-1||this.match(u,!1))&&this.unsetTag(a):this.unsetTag(a),!0)}},{key:"replace",value:function(a,s){return!!this.match(a)&&(this.add(s),this.position+=length-1,!0)}},{key:"prepareRegExp",value:function(a){var s,u;if(a instanceof RegExp)u=a,s=1;else{var f=x8[a];u=f!==void 0?f:new RegExp(a),s=a.length}return[u,s]}}]),p}(),pg=function(){function p(a,s,u,f){var m=this;gt(this,p),this.ctx=a,this.parent=s,this.selected=u,this.hover=f,this.lines=new CT(function(b,P){if(b===void 0)return 0;var k=m.parent.getFormattingValues(a,u,f,P),V=0;return b!==""&&(V=m.ctx.measureText(b).width),{width:V,values:k}})}return yt(p,[{key:"process",value:function(a){if(!w0(a))return this.lines.finalize();var s=this.parent.fontOptions;a=(a=a.replace(/\r\n/g,` +`,hi()):sr+=$r,hi();if($r!='"')throw la('End of string " expected');return hi(),void(ns=Vo.IDENTIFIER)}for(ns=Vo.UNKNOWN;$r!="";)sr+=$r,hi();throw new SyntaxError('Syntax error in part "'+x2(sr,30)+'"')}ns=Vo.DELIMITER}function U7(p){for(;sr!==""&&sr!="}";)Kf(p),sr===";"&&An()}function Kf(p){var a=O2(p);if(a)l0(p,a);else{var s=function(f){return sr==="node"?(An(),f.node=Ju(),"node"):sr==="edge"?(An(),f.edge=Ju(),"edge"):sr==="graph"?(An(),f.graph=Ju(),"graph"):null}(p);if(!s){if(ns!=Vo.IDENTIFIER)throw la("Identifier expected");var u=sr;if(An(),sr==="="){if(An(),ns!=Vo.IDENTIFIER)throw la("Identifier expected");p[u]=sr,An()}else(function(f,m){var b={id:m},P=Ju();P&&(b.attr=P),N6(f,b),l0(f,m)})(p,u)}}}function O2(p){var a=null;if(sr==="subgraph"&&((a={}).type="subgraph",An(),ns===Vo.IDENTIFIER&&(a.id=sr,An())),sr==="{"){if(An(),a||(a={}),a.parent=p,a.node=p.node,a.edge=p.edge,a.graph=p.graph,U7(a),sr!="}")throw la("Angle bracket } expected");An(),delete a.node,delete a.edge,delete a.graph,delete a.parent,p.subgraphs||(p.subgraphs=[]),p.subgraphs.push(a)}return a}function l0(p,a){for(;sr==="->"||sr==="--";){var s,u=sr;An();var f=O2(p);if(f)s=f;else{if(ns!=Vo.IDENTIFIER)throw la("Identifier or subgraph expected");N6(p,{id:s=sr}),An()}oT(p,q7(p,a,s,u,Ju())),a=s}}function Ju(){for(var p,a,s=null,u={dashed:!0,solid:!1,dotted:[1,5]},f={dot:"circle",box:"box",crow:"crow",curve:"curve",icurve:"inv_curve",normal:"triangle",inv:"inv_triangle",diamond:"diamond",tee:"bar",vee:"vee"},m=new Array,b=new Array;sr==="[";){for(An(),s={};sr!==""&&sr!="]";){if(ns!=Vo.IDENTIFIER)throw la("Attribute name expected");var P=sr;if(An(),sr!="=")throw la("Equal sign = expected");if(An(),ns!=Vo.IDENTIFIER)throw la("Attribute value expected");var k=sr;P==="style"&&(k=u[k]),P==="arrowhead"&&(P="arrows",k={to:{enabled:!0,type:f[k]}}),P==="arrowtail"&&(P="arrows",k={from:{enabled:!0,type:f[k]}}),m.push({attr:s,name:P,value:k}),b.push(P),An(),sr==","&&An()}if(sr!="]")throw la("Bracket ] expected");An()}if(Qp(b).call(b,"dir")){var V={arrows:{}};for(p=0;p"&&(P.arrows="to"),P};Fn(f=s.edges).call(f,function(b){var P,k,V,G,X,se,me;P=b.from instanceof Object?b.from.nodes:{id:b.from},k=b.to instanceof Object?b.to.nodes:{id:b.to},b.from instanceof Object&&b.from.edges&&Fn(V=b.from.edges).call(V,function(ge){var _e=m(ge);u.edges.push(_e)}),X=k,se=function(ge,_e){var Le=q7(u,ge.id,_e.id,b.type,b.attr),Ue=m(Le);u.edges.push(Ue)},Mn(G=P)?Fn(G).call(G,function(ge){Mn(X)?Fn(X).call(X,function(_e){se(ge,_e)}):se(ge,X)}):Mn(X)?Fn(X).call(X,function(ge){se(G,ge)}):se(G,X),b.to instanceof Object&&b.to.edges&&Fn(me=b.to.edges).call(me,function(ge){var _e=m(ge);u.edges.push(_e)})})}return s.attr&&(u.options=s.attr),u}var X7=Object.freeze({__proto__:null,DOTToGraph:F6,parseDOT:L6});function u0(p,a){var s,u={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};a!=null&&(a.fixed!=null&&(u.nodes.fixed=a.fixed),a.parseColor!=null&&(u.nodes.parseColor=a.parseColor),a.inheritColor!=null&&(u.edges.inheritColor=a.inheritColor));var f=p.edges,m=Kp(f).call(f,function(b){var P={from:b.source,id:b.id,to:b.target};return b.attributes!=null&&(P.attributes=b.attributes),b.label!=null&&(P.label=b.label),b.attributes!=null&&b.attributes.title!=null&&(P.title=b.attributes.title),b.type==="Directed"&&(P.arrows="to"),b.color&&u.edges.inheritColor===!1&&(P.color=b.color),P});return{nodes:Kp(s=p.nodes).call(s,function(b){var P={id:b.id,fixed:u.nodes.fixed&&b.x!=null&&b.y!=null};return b.attributes!=null&&(P.attributes=b.attributes),b.label!=null&&(P.label=b.label),b.size!=null&&(P.size=b.size),b.attributes!=null&&b.attributes.title!=null&&(P.title=b.attributes.title),b.title!=null&&(P.title=b.title),b.x!=null&&(P.x=b.x),b.y!=null&&(P.y=b.y),b.color!=null&&(u.nodes.parseColor===!0?P.color=b.color:P.color={background:b.color,border:b.color,highlight:{background:b.color,border:b.color},hover:{background:b.color,border:b.color}}),P}),edges:m}}var iT=Object.freeze({__proto__:null,parseGephi:u0}),aT=Object.freeze({__proto__:null,cn:{addDescription:"\u5355\u51FB\u7A7A\u767D\u5904\u653E\u7F6E\u65B0\u8282\u70B9\u3002",addEdge:"\u6DFB\u52A0\u8FDE\u63A5\u7EBF",addNode:"\u6DFB\u52A0\u8282\u70B9",back:"\u8FD4\u56DE",close:"\u95DC\u9589",createEdgeError:"\u65E0\u6CD5\u5C06\u8FDE\u63A5\u7EBF\u8FDE\u63A5\u5230\u7FA4\u96C6\u3002",del:"\u5220\u9664\u9009\u5B9A",deleteClusterError:"\u65E0\u6CD5\u5220\u9664\u7FA4\u96C6\u3002",edgeDescription:"\u5355\u51FB\u67D0\u4E2A\u8282\u70B9\u5E76\u5C06\u8BE5\u8FDE\u63A5\u7EBF\u62D6\u52A8\u5230\u53E6\u4E00\u4E2A\u8282\u70B9\u4EE5\u8FDE\u63A5\u5B83\u4EEC\u3002",edit:"\u7F16\u8F91",editClusterError:"\u65E0\u6CD5\u7F16\u8F91\u7FA4\u96C6\u3002",editEdge:"\u7F16\u8F91\u8FDE\u63A5\u7EBF",editEdgeDescription:"\u5355\u51FB\u63A7\u5236\u8282\u70B9\u5E76\u5C06\u5B83\u4EEC\u62D6\u5230\u8282\u70B9\u4E0A\u8FDE\u63A5\u3002",editNode:"\u7F16\u8F91\u8282\u70B9"},cs:{addDescription:"Kluknut\xEDm do pr\xE1zdn\xE9ho prostoru m\u016F\u017Eete p\u0159idat nov\xFD vrchol.",addEdge:"P\u0159idat hranu",addNode:"P\u0159idat vrchol",back:"Zp\u011Bt",close:"Zav\u0159\xEDt",createEdgeError:"Nelze p\u0159ipojit hranu ke shluku.",del:"Smazat v\xFDb\u011Br",deleteClusterError:"Nelze mazat shluky.",edgeDescription:"P\u0159eta\u017Een\xEDm z jednoho vrcholu do druh\xE9ho m\u016F\u017Eete spojit tyto vrcholy novou hranou.",edit:"Upravit",editClusterError:"Nelze upravovat shluky.",editEdge:"Upravit hranu",editEdgeDescription:"P\u0159eta\u017Een\xEDm kontroln\xEDho vrcholu hrany ji m\u016F\u017Eete p\u0159ipojit k jin\xE9mu vrcholu.",editNode:"Upravit vrchol"},de:{addDescription:"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.",addEdge:"Kante hinzuf\xFCgen",addNode:"Knoten hinzuf\xFCgen",back:"Zur\xFCck",close:"Schlie\xDFen",createEdgeError:"Es ist nicht m\xF6glich, Kanten mit Clustern zu verbinden.",del:"L\xF6sche Auswahl",deleteClusterError:"Cluster k\xF6nnen nicht gel\xF6scht werden.",edgeDescription:"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.",edit:"Editieren",editClusterError:"Cluster k\xF6nnen nicht editiert werden.",editEdge:"Kante editieren",editEdgeDescription:"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.",editNode:"Knoten editieren"},en:{addDescription:"Click in an empty space to place a new node.",addEdge:"Add Edge",addNode:"Add Node",back:"Back",close:"Close",createEdgeError:"Cannot link edges to a cluster.",del:"Delete selected",deleteClusterError:"Clusters cannot be deleted.",edgeDescription:"Click on a node and drag the edge to another node to connect them.",edit:"Edit",editClusterError:"Clusters cannot be edited.",editEdge:"Edit Edge",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",editNode:"Edit Node"},es:{addDescription:"Haga clic en un lugar vac\xEDo para colocar un nuevo nodo.",addEdge:"A\xF1adir arista",addNode:"A\xF1adir nodo",back:"Atr\xE1s",close:"Cerrar",createEdgeError:"No se puede conectar una arista a un grupo.",del:"Eliminar selecci\xF3n",deleteClusterError:"No es posible eliminar grupos.",edgeDescription:"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.",edit:"Editar",editClusterError:"No es posible editar grupos.",editEdge:"Editar arista",editEdgeDescription:"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.",editNode:"Editar nodo"},fr:{addDescription:"Cliquez dans un endroit vide pour placer un n\u0153ud.",addEdge:"Ajouter un lien",addNode:"Ajouter un n\u0153ud",back:"Retour",close:"Fermer",createEdgeError:"Impossible de cr\xE9er un lien vers un cluster.",del:"Effacer la s\xE9lection",deleteClusterError:"Les clusters ne peuvent pas \xEAtre effac\xE9s.",edgeDescription:"Cliquez sur un n\u0153ud et glissez le lien vers un autre n\u0153ud pour les connecter.",edit:"\xC9diter",editClusterError:"Les clusters ne peuvent pas \xEAtre \xE9dit\xE9s.",editEdge:"\xC9diter le lien",editEdgeDescription:"Cliquez sur les points de contr\xF4le et glissez-les pour connecter un n\u0153ud.",editNode:"\xC9diter le n\u0153ud"},it:{addDescription:"Clicca per aggiungere un nuovo nodo",addEdge:"Aggiungi un vertice",addNode:"Aggiungi un nodo",back:"Indietro",close:"Chiudere",createEdgeError:"Non si possono collegare vertici ad un cluster",del:"Cancella la selezione",deleteClusterError:"I cluster non possono essere cancellati",edgeDescription:"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.",edit:"Modifica",editClusterError:"I clusters non possono essere modificati.",editEdge:"Modifica il vertice",editEdgeDescription:"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.",editNode:"Modifica il nodo"},nl:{addDescription:"Klik op een leeg gebied om een nieuwe node te maken.",addEdge:"Link toevoegen",addNode:"Node toevoegen",back:"Terug",close:"Sluiten",createEdgeError:"Kan geen link maken naar een cluster.",del:"Selectie verwijderen",deleteClusterError:"Clusters kunnen niet worden verwijderd.",edgeDescription:"Klik op een node en sleep de link naar een andere node om ze te verbinden.",edit:"Wijzigen",editClusterError:"Clusters kunnen niet worden aangepast.",editEdge:"Link wijzigen",editEdgeDescription:"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.",editNode:"Node wijzigen"},pt:{addDescription:"Clique em um espa\xE7o em branco para adicionar um novo n\xF3",addEdge:"Adicionar aresta",addNode:"Adicionar n\xF3",back:"Voltar",close:"Fechar",createEdgeError:"N\xE3o foi poss\xEDvel linkar arestas a um cluster.",del:"Remover selecionado",deleteClusterError:"Clusters n\xE3o puderam ser removidos.",edgeDescription:"Clique em um n\xF3 e arraste a aresta at\xE9 outro n\xF3 para conect\xE1-los",edit:"Editar",editClusterError:"Clusters n\xE3o puderam ser editados.",editEdge:"Editar aresta",editEdgeDescription:"Clique nos pontos de controle e os arraste para um n\xF3 para conect\xE1-los",editNode:"Editar n\xF3"},ru:{addDescription:"\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u0432 \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u043E\u0435 \u043C\u0435\u0441\u0442\u043E, \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0443\u0437\u0435\u043B.",addEdge:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0440\u0435\u0431\u0440\u043E",addNode:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0443\u0437\u0435\u043B",back:"\u041D\u0430\u0437\u0430\u0434",close:"\u0417\u0430\u043A\u0440\u044B\u0432\u0430\u0442\u044C",createEdgeError:"\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u0440\u0435\u0431\u0440\u0430 \u0432 \u043A\u043B\u0430\u0441\u0442\u0435\u0440.",del:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0435",deleteClusterError:"\u041A\u043B\u0430\u0441\u0442\u0435\u0440\u044B \u043D\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0443\u0434\u0430\u043B\u0435\u043D\u044B",edgeDescription:"\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u043D\u0430 \u0443\u0437\u0435\u043B \u0438 \u043F\u0440\u043E\u0442\u044F\u043D\u0438\u0442\u0435 \u0440\u0435\u0431\u0440\u043E \u043A \u0434\u0440\u0443\u0433\u043E\u043C\u0443 \u0443\u0437\u043B\u0443, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u0438\u0445.",edit:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C",editClusterError:"\u041A\u043B\u0430\u0441\u0442\u0435\u0440\u044B \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B \u0434\u043B\u044F \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F.",editEdge:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0440\u0435\u0431\u0440\u043E",editEdgeDescription:"\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u043D\u0430 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044C\u043D\u044B\u0435 \u0442\u043E\u0447\u043A\u0438 \u0438 \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0438\u0445 \u0432 \u0443\u0437\u0435\u043B, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043A \u043D\u0435\u043C\u0443.",editNode:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0437\u0435\u043B"},uk:{addDescription:"K\u043B\u0456\u043A\u043D\u0456\u0442\u044C \u043D\u0430 \u0432\u0456\u043B\u044C\u043D\u0435 \u043C\u0456\u0441\u0446\u0435, \u0449\u043E\u0431 \u0434\u043E\u0434\u0430\u0442\u0438 \u043D\u043E\u0432\u0438\u0439 \u0432\u0443\u0437\u043E\u043B.",addEdge:"\u0414\u043E\u0434\u0430\u0442\u0438 \u043A\u0440\u0430\u0439",addNode:"\u0414\u043E\u0434\u0430\u0442\u0438 \u0432\u0443\u0437\u043E\u043B",back:"\u041D\u0430\u0437\u0430\u0434",close:"\u0417\u0430\u043A\u0440\u0438\u0442\u0438",createEdgeError:"\u041D\u0435 \u043C\u043E\u0436\u043B\u0438\u0432\u043E \u043E\u0431'\u0454\u0434\u043D\u0430\u0442\u0438 \u043A\u0440\u0430\u0457 \u0432 \u0433\u0440\u0443\u043F\u0443.",del:"\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u043E\u0431\u0440\u0430\u043D\u0435",deleteClusterError:"\u0413\u0440\u0443\u043F\u0438 \u043D\u0435 \u043C\u043E\u0436\u0443\u0442\u044C \u0431\u0443\u0442\u0438 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u0456.",edgeDescription:"\u041A\u043B\u0456\u043A\u043D\u0456\u0442\u044C \u043D\u0430 \u0432\u0443\u0437\u043E\u043B \u0456 \u043F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u043A\u0440\u0430\u0439 \u0434\u043E \u0456\u043D\u0448\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430, \u0449\u043E\u0431 \u0457\u0445 \u0437'\u0454\u0434\u043D\u0430\u0442\u0438.",edit:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438",editClusterError:"\u0413\u0440\u0443\u043F\u0438 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0456 \u0434\u043B\u044F \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043D\u043D\u044F.",editEdge:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043A\u0440\u0430\u0439",editEdgeDescription:"\u041A\u043B\u0456\u043A\u043D\u0456\u0442\u044C \u043D\u0430 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044C\u043D\u0456 \u0442\u043E\u0447\u043A\u0438 \u0456 \u043F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u0457\u0445 \u0443 \u0432\u0443\u0437\u043E\u043B, \u0449\u043E\u0431 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u0434\u043E \u043D\u044C\u043E\u0433\u043E.",editNode:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0443\u0437\u043E\u043B"}}),B6=function(){function p(){gt(this,p),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement("canvas")}return yt(p,[{key:"init",value:function(){if(!this.initialized()){this.src=this.image.src;var a=this.image.width,s=this.image.height;this.width=a,this.height=s;var u=Math.floor(s/2),f=Math.floor(s/4),m=Math.floor(s/8),b=Math.floor(s/16),P=Math.floor(a/2),k=Math.floor(a/4),V=Math.floor(a/8),G=Math.floor(a/16);this.canvas.width=3*k,this.canvas.height=u,this.coordinates=[[0,0,P,u],[P,0,k,f],[P,f,V,m],[5*V,f,G,b]],this._fillMipMap()}}},{key:"initialized",value:function(){return this.coordinates!==void 0}},{key:"_fillMipMap",value:function(){var a=this.canvas.getContext("2d"),s=this.coordinates[0];a.drawImage(this.image,s[0],s[1],s[2],s[3]);for(var u=1;u2){s*=.5;for(var P=0;s>2&&P=this.NUM_ITERATIONS&&(P=this.NUM_ITERATIONS-1);var k=this.coordinates[P];a.drawImage(this.canvas,k[0],k[1],k[2],k[3],u,f,m,b)}else a.drawImage(this.image,u,f,m,b)}}]),p}(),z6=function(){function p(a){gt(this,p),this.images={},this.imageBroken={},this.callback=a}return yt(p,[{key:"_tryloadBrokenUrl",value:function(a,s,u){a!==void 0&&u!==void 0&&(s!==void 0?(u.image.onerror=function(){console.error("Could not load brokenImage:",s)},u.image.src=s):console.warn("No broken url image defined"))}},{key:"_redrawWithImage",value:function(a){this.callback&&this.callback(a)}},{key:"load",value:function(a,s){var u=this,f=this.images[a];if(f)return f;var m=new B6;return this.images[a]=m,m.image.onload=function(){u._fixImageCoordinates(m.image),m.init(),u._redrawWithImage(m)},m.image.onerror=function(){console.error("Could not load image:",a),u._tryloadBrokenUrl(a,s,m)},m.image.src=a,m}},{key:"_fixImageCoordinates",value:function(a){a.width===0&&(document.body.appendChild(a),a.width=a.offsetWidth,a.height=a.offsetHeight,document.body.removeChild(a))}}]),p}(),K7={exports:{}},sT=c(function(){if(typeof ArrayBuffer=="function"){var p=new ArrayBuffer(8);Object.isExtensible(p)&&Object.defineProperty(p,"a",{value:8})}}),lT=c,Y7=Cr,_2=ee,os=sT,S2=Object.isExtensible,uT=lT(function(){S2(1)})||os?function(p){return!!Y7(p)&&(!os||_2(p)!=="ArrayBuffer")&&(!S2||S2(p))}:S2,W6=!c(function(){return Object.isExtensible(Object.preventExtensions({}))}),Q7=Bt,H6=N,e8=kn,cT=Cr,I2=Yo,V6=mo.f,t8=Rm,pT=_b,og=uT,$6=W6,Yf=!1,pl=ef("meta"),dT=0,E2=function(p){V6(p,pl,{value:{objectID:"O"+dT++,weakData:{}}})},fT=K7.exports={enable:function(){fT.enable=function(){},Yf=!0;var p=t8.f,a=H6([].splice),s={};s[pl]=1,p(s).length&&(t8.f=function(u){for(var f=p(u),m=0,b=f.length;mm;m++)if((P=Ue(p[m]))&&G6(X6,P))return P;return new p0(!1)}u=o8(p,f)}for(k=se?p.next:u.next;!(V=r8(k,u)).done;){try{P=Ue(V.value)}catch(et){ag(u,"throw",et)}if(typeof P=="object"&&P&&G6(X6,P))return P}return new p0(!1)},hT=ir,mT=TypeError,qc=function(p,a){if(hT(a,p))return p;throw new mT("Incorrect invocation")},i8=Bt,vT=i,K6=Qf,gT=c,yT=_c,bT=P2,a8=qc,Y6=ve,s8=Cr,k2=Rt,l8=Ka,j2=mo.f,u8=Fc.forEach,Q6=be,T2=el.set,C2=el.getterFor,e4=function(p,a,s){var u,f=p.indexOf("Map")!==-1,m=p.indexOf("Weak")!==-1,b=f?"set":"add",P=vT[p],k=P&&P.prototype,V={};if(Q6&&Y6(P)&&(m||k.forEach&&!gT(function(){new P().entries().next()}))){var G=(u=a(function(se,me){T2(a8(se,G),{type:p,collection:new P}),k2(me)||bT(me,se[b],{that:se,AS_ENTRIES:f})})).prototype,X=C2(p);u8(["add","clear","delete","forEach","get","has","set","keys","values","entries"],function(se){var me=se==="add"||se==="set";!(se in k)||m&&se==="clear"||yT(G,se,function(ge,_e){var Le=X(this).collection;if(!me&&m&&!s8(ge))return se==="get"&&void 0;var Ue=Le[se](ge===0?0:ge,_e);return me?this:Ue})}),m||j2(G,"size",{configurable:!0,get:function(){return X(this).collection.size}})}else u=s.getConstructor(a,p,f,b),K6.enable();return l8(u,p,!1,!0),V[p]=u,i8({global:!0,forced:!0},V),m||s.setStrong(u,p,f),u},d0=Wl,Xu=function(p,a,s){for(var u in a)s&&s.unsafe&&p[u]?p[u]=a[u]:d0(p,u,a[u],s);return p},t4=or,wT=$l,OT=be,f0=ho("species"),xT=rl,_T=$l,c8=Xu,ST=of,IT=qc,p8=Rt,r4=P2,n4=Sw,d8=ev,o4=function(p){var a=t4(p);OT&&a&&!a[f0]&&wT(a,f0,{configurable:!0,get:function(){return this}})},h0=be,i4=Qf.fastKey,m0=el.set,Rs=el.getterFor,a4={getConstructor:function(p,a,s,u){var f=p(function(V,G){IT(V,m),m0(V,{type:a,index:xT(null),first:void 0,last:void 0,size:0}),h0||(V.size=0),p8(G)||r4(G,V[u],{that:V,AS_ENTRIES:s})}),m=f.prototype,b=Rs(a),P=function(V,G,X){var se,me,ge=b(V),_e=k(V,G);return _e?_e.value=X:(ge.last=_e={index:me=i4(G,!0),key:G,value:X,previous:se=ge.last,next:void 0,removed:!1},ge.first||(ge.first=_e),se&&(se.next=_e),h0?ge.size++:V.size++,me!=="F"&&(ge.index[me]=_e)),V},k=function(V,G){var X,se=b(V),me=i4(G);if(me!=="F")return se.index[me];for(X=se.first;X;X=X.next)if(X.key===G)return X};return c8(m,{clear:function(){for(var V=b(this),G=V.index,X=V.first;X;)X.removed=!0,X.previous&&(X.previous=X.previous.next=void 0),delete G[X.index],X=X.next;V.first=V.last=void 0,h0?V.size=0:this.size=0},delete:function(V){var G=this,X=b(G),se=k(G,V);if(se){var me=se.next,ge=se.previous;delete X.index[se.index],se.removed=!0,ge&&(ge.next=me),me&&(me.previous=ge),X.first===se&&(X.first=me),X.last===se&&(X.last=ge),h0?X.size--:G.size--}return!!se},forEach:function(V){for(var G,X=b(this),se=ST(V,arguments.length>1?arguments[1]:void 0);G=G?G.next:X.first;)for(se(G.value,G.key,this);G&&G.removed;)G=G.previous},has:function(V){return!!k(this,V)}}),c8(m,s?{get:function(V){var G=k(this,V);return G&&G.value},set:function(V,G){return P(this,V===0?0:V,G)}}:{add:function(V){return P(this,V=V===0?0:V,V)}}),h0&&_T(m,"size",{configurable:!0,get:function(){return b(this).size}}),f},setStrong:function(p,a,s){var u=a+" Iterator",f=Rs(a),m=Rs(u);n4(p,a,function(b,P){m0(this,{type:u,target:b,state:f(b),kind:P,last:void 0})},function(){for(var b=m(this),P=b.kind,k=b.last;k&&k.removed;)k=k.previous;return b.target&&(b.last=k=k?k.next:b.state.first)?d8(P==="keys"?k.key:P==="values"?k.value:[k.key,k.value],!1):(b.target=void 0,d8(void 0,!0))},s?"entries":"values",!s,!0),o4(a)}};e4("Map",function(p){return function(){return p(this,arguments.length?arguments[0]:void 0)}},a4);var f8=n(St.Map),ET=function(){function p(){gt(this,p),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}},{border:"#990000",background:"#EE0000",highlight:{border:"#BB0000",background:"#FF3333"},hover:{border:"#BB0000",background:"#FF3333"}},{border:"#FF6000",background:"#FF6000",highlight:{border:"#FF6000",background:"#FF6000"},hover:{border:"#FF6000",background:"#FF6000"}},{border:"#97C2FC",background:"#2B7CE9",highlight:{border:"#D2E5FF",background:"#2B7CE9"},hover:{border:"#D2E5FF",background:"#2B7CE9"}},{border:"#399605",background:"#255C03",highlight:{border:"#399605",background:"#255C03"},hover:{border:"#399605",background:"#255C03"}},{border:"#B70054",background:"#FF007E",highlight:{border:"#B70054",background:"#FF007E"},hover:{border:"#B70054",background:"#FF007E"}},{border:"#AD85E4",background:"#7C29F0",highlight:{border:"#D3BDF0",background:"#7C29F0"},hover:{border:"#D3BDF0",background:"#7C29F0"}},{border:"#4557FA",background:"#000EA1",highlight:{border:"#6E6EFD",background:"#000EA1"},hover:{border:"#6E6EFD",background:"#000EA1"}},{border:"#FFC0CB",background:"#FD5A77",highlight:{border:"#FFD1D9",background:"#FD5A77"},hover:{border:"#FFD1D9",background:"#FD5A77"}},{border:"#C2FABC",background:"#74D66A",highlight:{border:"#E6FFE3",background:"#74D66A"},hover:{border:"#E6FFE3",background:"#74D66A"}},{border:"#EE0000",background:"#990000",highlight:{border:"#FF3333",background:"#BB0000"},hover:{border:"#FF3333",background:"#BB0000"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},Cn(this.options,this.defaultOptions)}return yt(p,[{key:"setOptions",value:function(a){var s=["useDefaultGroups"];if(a!==void 0){for(var u in a)if(Object.prototype.hasOwnProperty.call(a,u)&&ln(s).call(s,u)===-1){var f=a[u];this.add(u,f)}}}},{key:"clear",value:function(){this._groups=new f8,this._groupNames=[]}},{key:"get",value:function(a){var s=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],u=this._groups.get(a);if(u===void 0&&s)if(this.options.useDefaultGroups===!1&&this._groupNames.length>0){var f=this._groupIndex%this._groupNames.length;++this._groupIndex,(u={}).color=this._groups.get(this._groupNames[f]),this._groups.set(a,u)}else{var m=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(u={}).color=this._defaultGroups[m],this._groups.set(a,u)}return u}},{key:"add",value:function(a,s){return this._groups.has(a)||this._groupNames.push(a),this._groups.set(a,s),s}}]),p}();Bt({target:"Number",stat:!0},{isNaN:function(p){return p!=p}});var sg=n(St.Number.isNaN),s4=i.isFinite,PT=Number.isFinite||function(p){return typeof p=="number"&&s4(p)};Bt({target:"Number",stat:!0},{isFinite:PT});var Ku=n(St.Number.isFinite),Ei=Fc.some;Bt({target:"Array",proto:!0,forced:!Bu("some")},{some:function(p){return Ei(this,p,arguments.length>1?arguments[1]:void 0)}});var ua=vo("Array").some,M2=ir,l4=ua,Uc=Array.prototype,h8=function(p){var a=p.some;return p===Uc||M2(Uc,p)&&a===Uc.some?l4:a},u4=n(h8),fd=n(St.Object.getOwnPropertySymbols),eh={exports:{}},th=Bt,A2=c,v0=Pn,Yu=Oe.f,c4=be;th({target:"Object",stat:!0,forced:!c4||A2(function(){Yu(1)}),sham:!c4},{getOwnPropertyDescriptor:function(p,a){return Yu(v0(p),a)}});var p4=St.Object,m8=eh.exports=function(p,a){return p4.getOwnPropertyDescriptor(p,a)};p4.getOwnPropertyDescriptor.sham&&(m8.sham=!0);var lg=eh.exports,Qu=n(lg),R2=Kk,ec=Pn,g0=Oe,ug=Hp;Bt({target:"Object",stat:!0,sham:!be},{getOwnPropertyDescriptors:function(p){for(var a,s,u=ec(p),f=g0.f,m=R2(u),b={},P=0;m.length>P;)(s=f(u,a=m[P++]))!==void 0&&ug(b,a,s);return b}});var Ds=n(St.Object.getOwnPropertyDescriptors),v8={exports:{}},g8=Bt,cg=be,D2=Tc.f;g8({target:"Object",stat:!0,forced:Object.defineProperties!==D2,sham:!cg},{defineProperties:D2});var rh=St.Object,d4=v8.exports=function(p,a){return rh.defineProperties(p,a)};rh.defineProperties.sham&&(d4.sham=!0);var hd=n(v8.exports),y0=n(Mm);function L2(p,a,s){return(a=kS(a))in p?Am(p,a,{value:s,enumerable:!0,configurable:!0,writable:!0}):p[a]=s,p}var ca=i,md=c,$o=na,Aa=u7.trim,pg=YO,b0=N("".charAt),vd=ca.parseFloat,nh=ca.Symbol,oh=nh&&nh.iterator,pa=1/vd(pg+"-0")!=-1/0||oh&&!md(function(){vd(Object(oh))})?function(p){var a=Aa($o(p)),s=vd(a);return s===0&&b0(a,0)==="-"?-0:s}:vd;Bt({global:!0,forced:parseFloat!==pa},{parseFloat:pa});var Ls=n(St.parseFloat),N2=Bt,y8=c,ih=_b.f;N2({target:"Object",stat:!0,forced:y8(function(){return!Object.getOwnPropertyNames(1)})},{getOwnPropertyNames:ih});var Gc=St.Object,F2=function(p){return Gc.getOwnPropertyNames(p)},ah=n(F2);function f4(p,a){var s=["node","edge","label"],u=!0,f=ud(a,"chosen");if(typeof f=="boolean")u=f;else if(Vn(f)==="object"){if(ln(s).call(s,p)===-1)throw new Error("choosify: subOption '"+p+"' should be one of '"+s.join("', '")+"'");var m=ud(a,["chosen",p]);typeof m!="boolean"&&typeof m!="function"||(u=m)}return u}function B2(p,a,s){if(p.width<=0||p.height<=0)return!1;if(s!==void 0){var u={x:a.x-s.x,y:a.y-s.y};if(s.angle!==0){var f=-s.angle;a={x:Math.cos(f)*u.x-Math.sin(f)*u.y,y:Math.sin(f)*u.x+Math.cos(f)*u.y}}else a=u}var m=p.x+p.width,b=p.y+p.width;return p.lefta.x&&p.topa.y}function w0(p){return typeof p=="string"&&p!==""}function h4(p,a,s,u){var f=u.x,m=u.y;if(typeof u.distanceToBorder=="function"){var b=u.distanceToBorder(p,a),P=Math.sin(a)*b,k=Math.cos(a)*b;k===b?(f+=b,m=u.y):P===b?(f=u.x,m-=b):(f+=k,m-=P)}else u.shape.width>u.shape.height?(f=u.x+.5*u.shape.width,m=u.y-s):(f=u.x+s,m=u.y-.5*u.shape.height);return{x:f,y:m}}var b8=vo("Array").values,z2=bs,m4=Yo,w8=ir,kT=b8,W2=Array.prototype,jT={DOMTokenList:!0,NodeList:!0},TT=function(p){var a=p.values;return p===W2||w8(W2,p)&&a===W2.values||m4(jT,z2(p))?kT:a},O8=n(TT),CT=function(){function p(a){gt(this,p),this.measureText=a,this.current=0,this.width=0,this.height=0,this.lines=[]}return yt(p,[{key:"_add",value:function(a,s){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"normal";this.lines[a]===void 0&&(this.lines[a]={width:0,height:0,blocks:[]});var f=s;s!==void 0&&s!==""||(f=" ");var m=this.measureText(f,u),b=Cn({},O8(m));b.text=s,b.width=m.width,b.mod=u,s!==void 0&&s!==""||(b.width=0),this.lines[a].blocks.push(b),this.lines[a].width+=b.width}},{key:"curWidth",value:function(){var a=this.lines[this.current];return a===void 0?0:a.width}},{key:"append",value:function(a){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"normal";this._add(this.current,a,s)}},{key:"newLine",value:function(a){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"normal";this._add(this.current,a,s),this.current++}},{key:"determineLineHeights",value:function(){for(var a=0;aa&&(a=f.width),s+=f.height}this.width=a,this.height=s}},{key:"removeEmptyBlocks",value:function(){for(var a=[],s=0;s"://,""://,""://,"":/<\/b>/,"":/<\/i>/,"":/<\/code>/,"*":/\*/,_:/_/,"`":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},O0=function(){function p(a){gt(this,p),this.text=a,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer="",this.modStack=[],this.blocks=[]}return yt(p,[{key:"mod",value:function(){return this.modStack.length===0?"normal":this.modStack[0]}},{key:"modName",value:function(){return this.modStack.length===0?"normal":this.modStack[0]==="mono"?"mono":this.bold&&this.ital?"boldital":this.bold?"bold":this.ital?"ital":void 0}},{key:"emitBlock",value:function(){this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer="")}},{key:"add",value:function(a){a===" "&&(this.spacing=!0),this.spacing&&(this.buffer+=" ",this.spacing=!1),a!=" "&&(this.buffer+=a)}},{key:"parseWS",value:function(a){return!!/[ \t]/.test(a)&&(this.mono?this.add(a):this.spacing=!0,!0)}},{key:"setTag",value:function(a){this.emitBlock(),this[a]=!0,this.modStack.unshift(a)}},{key:"unsetTag",value:function(a){this.emitBlock(),this[a]=!1,this.modStack.shift()}},{key:"parseStartTag",value:function(a,s){return!(this.mono||this[a]||!this.match(s))&&(this.setTag(a),!0)}},{key:"match",value:function(a){var s=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],u=Mo(this.prepareRegExp(a),2),f=u[0],m=u[1],b=f.test(this.text.substr(this.position,m));return b&&s&&(this.position+=m-1),b}},{key:"parseEndTag",value:function(a,s,u){var f=this.mod()===a;return!(!(f=a==="mono"?f&&this.mono:f&&!this.mono)||!this.match(s))&&(u!==void 0?(this.position===this.text.length-1||this.match(u,!1))&&this.unsetTag(a):this.unsetTag(a),!0)}},{key:"replace",value:function(a,s){return!!this.match(a)&&(this.add(s),this.position+=length-1,!0)}},{key:"prepareRegExp",value:function(a){var s,u;if(a instanceof RegExp)u=a,s=1;else{var f=x8[a];u=f!==void 0?f:new RegExp(a),s=a.length}return[u,s]}}]),p}(),dg=function(){function p(a,s,u,f){var m=this;gt(this,p),this.ctx=a,this.parent=s,this.selected=u,this.hover=f,this.lines=new CT(function(b,P){if(b===void 0)return 0;var k=m.parent.getFormattingValues(a,u,f,P),V=0;return b!==""&&(V=m.ctx.measureText(b).width),{width:V,values:k}})}return yt(p,[{key:"process",value:function(a){if(!w0(a))return this.lines.finalize();var s=this.parent.fontOptions;a=(a=a.replace(/\r\n/g,` `)).replace(/\r/g,` `);var u=String(a).split(` -`),f=u.length;if(s.multi)for(var m=0;m0)for(var P=0;P0)for(var ve=0;ve")||s.parseStartTag("ital","")||s.parseStartTag("mono","")||s.parseEndTag("bold","")||s.parseEndTag("ital","")||s.parseEndTag("mono",""))||u(f)||s.add(f),s.position++}return s.emitBlock(),s.blocks}},{key:"splitMarkdownBlocks",value:function(a){for(var s=this,u=new O0(a),f=!0,m=function(P){return!!/\\/.test(P)&&(u.positionthis.parent.fontOptions.maxWdt}},{key:"getLongestFit",value:function(a){for(var s="",u=0;u1&&arguments[1]!==void 0?arguments[1]:"normal",u=arguments.length>2&&arguments[2]!==void 0&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,s);for(var f=(a=(a=a.replace(/^( +)/g,"$1\r")).replace(/([^\r][^ ]*)( +)/g,"$1\r$2\r")).split("\r");f.length>0;){var m=this.getLongestFit(f);if(m===0){var b=f[0],P=this.getLongestFitWord(b);this.lines.newLine(_i(b).call(b,0,P),s),f[0]=_i(b).call(b,P)}else{var k=m;f[m-1]===" "?m--:f[k]===" "&&k++;var V=_i(f).call(f,0,m).join("");m==f.length&&u?this.lines.append(V,s):this.lines.newLine(V,s),f=_i(f).call(f,k)}}}}]),p}(),Jc=["bold","ital","boldital","mono"],v4=function(){function p(a,s){var u=arguments.length>2&&arguments[2]!==void 0&&arguments[2];gt(this,p),this.body=a,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(s),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=u}return yt(p,[{key:"setOptions",value:function(a){if(this.elementOptions=a,this.initFontOptions(a.font),w0(a.label)?this.labelDirty=!0:a.label=void 0,a.font!==void 0&&a.font!==null){if(typeof a.font=="string")this.baseSize=this.fontOptions.size;else if(Vn(a.font)==="object"){var s=a.font.size;s!==void 0&&(this.baseSize=s)}}}},{key:"initFontOptions",value:function(a){var s=this;nn(Jc,function(u){s.fontOptions[u]={}}),p.parseFontString(this.fontOptions,a)?this.fontOptions.vadjust=0:nn(a,function(u,f){u!=null&&Vn(u)!=="object"&&(s.fontOptions[f]=u)})}},{key:"constrain",value:function(a){var s={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:"middle"},u=ud(a,"widthConstraint");if(typeof u=="number")s.maxWdt=Number(u),s.minWdt=Number(u);else if(Vn(u)==="object"){var f=ud(a,["widthConstraint","maximum"]);typeof f=="number"&&(s.maxWdt=Number(f));var m=ud(a,["widthConstraint","minimum"]);typeof m=="number"&&(s.minWdt=Number(m))}var b=ud(a,"heightConstraint");if(typeof b=="number")s.minHgt=Number(b);else if(Vn(b)==="object"){var P=ud(a,["heightConstraint","minimum"]);typeof P=="number"&&(s.minHgt=Number(P));var k=ud(a,["heightConstraint","valign"]);typeof k=="string"&&(k!=="top"&&k!=="bottom"||(s.valign=k))}return s}},{key:"update",value:function(a,s){this.setOptions(a,!0),this.propagateFonts(s),jn(this.fontOptions,this.constrain(s)),this.fontOptions.chooser=f4("label",s)}},{key:"adjustSizes",value:function(a){var s=a?a.right+a.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=s,this.fontOptions.minWdt-=s);var u=a?a.top+a.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=u)}},{key:"addFontOptionsToPile",value:function(a,s){for(var u=0;u5&&arguments[5]!==void 0?arguments[5]:"middle";if(this.elementOptions.label!==void 0){var P=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&P=this.elementOptions.scaling.label.maxVisible&&(P=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(a,f,m,s,u,b),this._drawBackground(a),this._drawText(a,s,this.size.yLine,b,P))}}},{key:"_drawBackground",value:function(a){if(this.fontOptions.background!==void 0&&this.fontOptions.background!=="none"){a.fillStyle=this.fontOptions.background;var s=this.getSize();a.fillRect(s.left,s.top,s.width,s.height)}}},{key:"_drawText",value:function(a,s,u){var f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"middle",m=arguments.length>4?arguments[4]:void 0,b=Mo(this._setAlignment(a,s,u,f),2);s=b[0],u=b[1],a.textAlign="left",s-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&(this.fontOptions.valign==="top"&&(u-=(this.size.height-this.size.labelHeight)/2),this.fontOptions.valign==="bottom"&&(u+=(this.size.height-this.size.labelHeight)/2));for(var P=0;P0&&(a.lineWidth=X.strokeWidth,a.strokeStyle=ge,a.lineJoin="round"),a.fillStyle=ve,X.strokeWidth>0&&a.strokeText(X.text,s+V,u+X.vadjust),a.fillText(X.text,s+V,u+X.vadjust),V+=X.width}u+=k.height}}}},{key:"_setAlignment",value:function(a,s,u,f){return this.isEdgeLabel&&this.fontOptions.align!=="horizontal"&&this.pointToSelf===!1?(s=0,u=0,this.fontOptions.align==="top"?(a.textBaseline="alphabetic",u-=4):this.fontOptions.align==="bottom"?(a.textBaseline="hanging",u+=4):a.textBaseline="middle"):a.textBaseline=f,[s,u]}},{key:"_getColor",value:function(a,s,u){var f=a||"#000000",m=u||"#ffffff";if(s<=this.elementOptions.scaling.label.drawThreshold){var b=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-s)));f=Ms(f,b),m=Ms(m,b)}return[f,m]}},{key:"getTextSize",value:function(a){var s=arguments.length>1&&arguments[1]!==void 0&&arguments[1],u=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return this._processLabel(a,s,u),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:"getSize",value:function(){var a=this.size.left,s=this.size.top-1;if(this.isEdgeLabel){var u=.5*-this.size.width;switch(this.fontOptions.align){case"middle":a=u,s=.5*-this.size.height;break;case"top":a=u,s=-(this.size.height+2);break;case"bottom":a=u,s=2}}return{left:a,top:s,width:this.size.width,height:this.size.height}}},{key:"calculateLabelSize",value:function(a,s,u){var f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,m=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0,b=arguments.length>5&&arguments[5]!==void 0?arguments[5]:"middle";this._processLabel(a,s,u),this.size.left=f-.5*this.size.width,this.size.top=m-.5*this.size.height,this.size.yLine=m+.5*(1-this.lineCount)*this.fontOptions.size,b==="hanging"&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:"getFormattingValues",value:function(a,s,u,f){var m=function(k,V,G){return V==="normal"?G==="mod"?"":k[G]:k[V][G]!==void 0?k[V][G]:k[G]},b={color:m(this.fontOptions,f,"color"),size:m(this.fontOptions,f,"size"),face:m(this.fontOptions,f,"face"),mod:m(this.fontOptions,f,"mod"),vadjust:m(this.fontOptions,f,"vadjust"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(s||u)&&(f==="normal"&&this.fontOptions.chooser===!0&&this.elementOptions.labelHighlightBold?b.mod="bold":typeof this.fontOptions.chooser=="function"&&this.fontOptions.chooser(b,this.elementOptions.id,s,u));var P="";return b.mod!==void 0&&b.mod!==""&&(P+=b.mod+" "),P+=b.size+"px "+b.face,a.font=P.replace(/"/g,""),b.font=a.font,b.height=b.size,b}},{key:"differentState",value:function(a,s){return a!==this.selectedState||s!==this.hoverState}},{key:"_processLabelText",value:function(a,s,u,f){return new pg(a,this,s,u).process(f)}},{key:"_processLabel",value:function(a,s,u){if(this.labelDirty!==!1||this.differentState(s,u)){var f=this._processLabelText(a,s,u,this.elementOptions.label);this.fontOptions.minWdt>0&&f.width0&&f.height0&&(this.enableBorderDashes(a,s),a.stroke(),this.disableBorderDashes(a,s)),a.restore()}},{key:"performFill",value:function(a,s){a.save(),a.fillStyle=s.color,this.enableShadow(a,s),Jm(a).call(a),this.disableShadow(a,s),a.restore(),this.performStroke(a,s)}},{key:"_addBoundingBoxMargin",value:function(a){this.boundingBox.left-=a,this.boundingBox.top-=a,this.boundingBox.bottom+=a,this.boundingBox.right+=a}},{key:"_updateBoundingBox",value:function(a,s,u,f,m){u!==void 0&&this.resize(u,f,m),this.left=a-this.width/2,this.top=s-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"updateBoundingBox",value:function(a,s,u,f,m){this._updateBoundingBox(a,s,u,f,m)}},{key:"getDimensionsFromLabel",value:function(a,s,u){this.textSize=this.labelModule.getTextSize(a,s,u);var f=this.textSize.width,m=this.textSize.height;return f===0&&(f=14,m=14),{width:f,height:m}}}]),p}();function _0(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var gd=function(p){xn(s,p);var a=_0(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m))._setMargins(m),b}return yt(s,[{key:"resize",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.needsRefresh(f,m)){var b=this.getDimensionsFromLabel(u,f,m);this.width=b.width+this.margin.right+this.margin.left,this.height=b.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:"draw",value:function(u,f,m,b,P,k){this.resize(u,b,P),this.left=f-this.width/2,this.top=m-this.height/2,this.initContextForDraw(u,k),pf(u,this.left,this.top,this.width,this.height,k.borderRadius),this.performFill(u,k),this.updateBoundingBox(f,m,u,b,P),this.labelModule.draw(u,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,b,P)}},{key:"updateBoundingBox",value:function(u,f,m,b,P){this._updateBoundingBox(u,f,m,b,P);var k=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(k)}},{key:"distanceToBorder",value:function(u,f){u&&this.resize(u);var m=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(f)),Math.abs(this.height/2/Math.sin(f)))+m}}]),s}(Ei);function dl(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var uh=function(p){xn(s,p);var a=dl(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m)).labelOffset=0,b.selected=!1,b}return yt(s,[{key:"setOptions",value:function(u,f,m){this.options=u,f===void 0&&m===void 0||this.setImages(f,m)}},{key:"setImages",value:function(u,f){f&&this.selected?(this.imageObj=f,this.imageObjAlt=u):(this.imageObj=u,this.imageObjAlt=f)}},{key:"switchImages",value:function(u){var f=u&&!this.selected||!u&&this.selected;if(this.selected=u,this.imageObjAlt!==void 0&&f){var m=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=m}}},{key:"_getImagePadding",value:function(){var u={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var f=this.options.imagePadding;Vn(f)=="object"?(u.top=f.top,u.right=f.right,u.bottom=f.bottom,u.left=f.left):(u.top=f,u.right=f,u.bottom=f,u.left=f)}return u}},{key:"_resizeImage",value:function(){var u,f;if(this.options.shapeProperties.useImageSize===!1){var m=1,b=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?m=this.imageObj.width/this.imageObj.height:b=this.imageObj.height/this.imageObj.width),u=2*this.options.size*m,f=2*this.options.size*b}else{var P=this._getImagePadding();u=this.imageObj.width+P.left+P.right,f=this.imageObj.height+P.top+P.bottom}this.width=u,this.height=f,this.radius=.5*this.width}},{key:"_drawRawCircle",value:function(u,f,m,b){this.initContextForDraw(u,b),L1(u,f,m,b.size),this.performFill(u,b)}},{key:"_drawImageAtPosition",value:function(u,f){if(this.imageObj.width!=0){u.globalAlpha=f.opacity!==void 0?f.opacity:1,this.enableShadow(u,f);var m=1;this.options.shapeProperties.interpolation===!0&&(m=this.imageObj.width/this.width/this.body.view.scale);var b=this._getImagePadding(),P=this.left+b.left,k=this.top+b.top,V=this.width-b.left-b.right,G=this.height-b.top-b.bottom;this.imageObj.drawImageAtPosition(u,m,P,k,V,G),this.disableShadow(u,f)}}},{key:"_drawImageLabel",value:function(u,f,m,b,P){var k=0;if(this.height!==void 0){k=.5*this.height;var V=this.labelModule.getTextSize(u,b,P);V.lineCount>=1&&(k+=V.height/2)}var G=m+k;this.options.label&&(this.labelOffset=k),this.labelModule.draw(u,f,G,b,P,"hanging")}}]),s}(Ei);function _o(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var k8=function(p){xn(s,p);var a=_o(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m))._setMargins(m),b}return yt(s,[{key:"resize",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.needsRefresh(f,m)){var b=this.getDimensionsFromLabel(u,f,m),P=Math.max(b.width+this.margin.right+this.margin.left,b.height+this.margin.top+this.margin.bottom);this.options.size=P/2,this.width=P,this.height=P,this.radius=this.width/2}}},{key:"draw",value:function(u,f,m,b,P,k){this.resize(u,b,P),this.left=f-this.width/2,this.top=m-this.height/2,this._drawRawCircle(u,f,m,k),this.updateBoundingBox(f,m),this.labelModule.draw(u,this.left+this.textSize.width/2+this.margin.left,m,b,P)}},{key:"updateBoundingBox",value:function(u,f){this.boundingBox.top=f-this.options.size,this.boundingBox.left=u-this.options.size,this.boundingBox.right=u+this.options.size,this.boundingBox.bottom=f+this.options.size}},{key:"distanceToBorder",value:function(u){return u&&this.resize(u),.5*this.width}}]),s}(uh);function LT(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var U2=function(p){xn(s,p);var a=LT(s);function s(u,f,m,b,P){var k;return gt(this,s),(k=a.call(this,u,f,m)).setImages(b,P),k}return yt(s,[{key:"resize",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.imageObj.src===void 0||this.imageObj.width===void 0||this.imageObj.height===void 0){var b=2*this.options.size;return this.width=b,this.height=b,void(this.radius=.5*this.width)}this.needsRefresh(f,m)&&this._resizeImage()}},{key:"draw",value:function(u,f,m,b,P,k){this.switchImages(b),this.resize();var V=f,G=m;this.options.shapeProperties.coordinateOrigin==="top-left"?(this.left=f,this.top=m,V+=this.width/2,G+=this.height/2):(this.left=f-this.width/2,this.top=m-this.height/2),this._drawRawCircle(u,V,G,k),u.save(),u.clip(),this._drawImageAtPosition(u,k),u.restore(),this._drawImageLabel(u,V,G,b,P),this.updateBoundingBox(f,m)}},{key:"updateBoundingBox",value:function(u,f){this.options.shapeProperties.coordinateOrigin==="top-left"?(this.boundingBox.top=f,this.boundingBox.left=u,this.boundingBox.right=u+2*this.options.size,this.boundingBox.bottom=f+2*this.options.size):(this.boundingBox.top=f-this.options.size,this.boundingBox.left=u-this.options.size,this.boundingBox.right=u+this.options.size,this.boundingBox.bottom=f+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:"distanceToBorder",value:function(u){return u&&this.resize(u),.5*this.width}}]),s}(uh);function j8(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var fl=function(p){xn(s,p);var a=j8(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"resize",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover,b=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{size:this.options.size};if(this.needsRefresh(f,m)){var P,k;this.labelModule.getTextSize(u,f,m);var V=2*b.size;this.width=(P=this.customSizeWidth)!==null&&P!==void 0?P:V,this.height=(k=this.customSizeHeight)!==null&&k!==void 0?k:V,this.radius=.5*this.width}}},{key:"_drawShape",value:function(u,f,m,b,P,k,V,G){var X,se=this;return this.resize(u,k,V,G),this.left=b-this.width/2,this.top=P-this.height/2,this.initContextForDraw(u,G),(X=f,Object.prototype.hasOwnProperty.call(Fy,X)?Fy[X]:function(ve){for(var ge=arguments.length,xe=new Array(ge>1?ge-1:0),Re=1;Re0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),s}(Ei);function hg(p,a){var s=no(p);if(fd){var u=fd(p);a&&(u=ts(u).call(u,function(f){return Qu(p,f).enumerable})),s.push.apply(s,u)}return s}function Xc(p){for(var a=1;a"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var b4=function(p){xn(s,p);var a=T8(s);function s(u,f,m,b){var P;return gt(this,s),(P=a.call(this,u,f,m,b)).ctxRenderer=b,P}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){this.resize(u,b,P,k),this.left=f-this.width/2,this.top=m-this.height/2,u.save();var V=this.ctxRenderer({ctx:u,id:this.options.id,x:f,y:m,state:{selected:b,hover:P},style:Xc({},k),label:this.options.label});if(V.drawNode!=null&&V.drawNode(),u.restore(),V.drawExternalLabel){var G=V.drawExternalLabel;V.drawExternalLabel=function(){u.save(),G(),u.restore()}}return V.nodeDimensions&&(this.customSizeWidth=V.nodeDimensions.width,this.customSizeHeight=V.nodeDimensions.height),V}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(fl);function C8(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var M8=function(p){xn(s,p);var a=C8(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m))._setMargins(m),b}return yt(s,[{key:"resize",value:function(u,f,m){if(this.needsRefresh(f,m)){var b=this.getDimensionsFromLabel(u,f,m).width+this.margin.right+this.margin.left;this.width=b,this.height=b,this.radius=this.width/2}}},{key:"draw",value:function(u,f,m,b,P,k){this.resize(u,b,P),this.left=f-this.width/2,this.top=m-this.height/2,this.initContextForDraw(u,k),F1(u,f-this.width/2,m-this.height/2,this.width,this.height),this.performFill(u,k),this.updateBoundingBox(f,m,u,b,P),this.labelModule.draw(u,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,b,P)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(Ei);function A8(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var R8=function(p){xn(s,p);var a=A8(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){return this._drawShape(u,"diamond",4,f,m,b,P,k)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(fl);function G2(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var D8=function(p){xn(s,p);var a=G2(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){return this._drawShape(u,"circle",2,f,m,b,P,k)}},{key:"distanceToBorder",value:function(u){return u&&this.resize(u),this.options.size}}]),s}(fl);function L8(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var N8=function(p){xn(s,p);var a=L8(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"resize",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.needsRefresh(f,m)){var b=this.getDimensionsFromLabel(u,f,m);this.height=2*b.height,this.width=b.width+b.height,this.radius=.5*this.width}}},{key:"draw",value:function(u,f,m,b,P,k){this.resize(u,b,P),this.left=f-.5*this.width,this.top=m-.5*this.height,this.initContextForDraw(u,k),N1(u,this.left,this.top,this.width,this.height),this.performFill(u,k),this.updateBoundingBox(f,m,u,b,P),this.labelModule.draw(u,f,m,b,P)}},{key:"distanceToBorder",value:function(u,f){u&&this.resize(u);var m=.5*this.width,b=.5*this.height,P=Math.sin(f)*m,k=Math.cos(f)*b;return m*b/Math.sqrt(P*P+k*k)}}]),s}(Ei);function J2(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var NT=function(p){xn(s,p);var a=J2(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m))._setMargins(m),b}return yt(s,[{key:"resize",value:function(u,f,m){this.needsRefresh(f,m)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(u,f,m,b,P,k){var V=this;return this.resize(u,b,P),this.options.icon.size=this.options.icon.size||50,this.left=f-this.width/2,this.top=m-this.height/2,this._icon(u,f,m,b,P,k),{drawExternalLabel:function(){V.options.label!==void 0&&V.labelModule.draw(u,V.left+V.iconSize.width/2+V.margin.left,m+V.height/2+5,b),V.updateBoundingBox(f,m)}}}},{key:"updateBoundingBox",value:function(u,f){this.boundingBox.top=f-.5*this.options.icon.size,this.boundingBox.left=u-.5*this.options.icon.size,this.boundingBox.right=u+.5*this.options.icon.size,this.boundingBox.bottom=f+.5*this.options.icon.size,this.options.label!==void 0&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5))}},{key:"_icon",value:function(u,f,m,b,P,k){var V=Number(this.options.icon.size);this.options.icon.code!==void 0?(u.font=[this.options.icon.weight!=null?this.options.icon.weight:b?"bold":"",(this.options.icon.weight!=null&&b?5:0)+V+"px",this.options.icon.face].join(" "),u.fillStyle=this.options.icon.color||"black",u.textAlign="center",u.textBaseline="middle",this.enableShadow(u,k),u.fillText(this.options.icon.code,f,m),this.disableShadow(u,k)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(Ei);function w4(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var Kc=function(p){xn(s,p);var a=w4(s);function s(u,f,m,b,P){var k;return gt(this,s),(k=a.call(this,u,f,m)).setImages(b,P),k}return yt(s,[{key:"resize",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.imageObj.src===void 0||this.imageObj.width===void 0||this.imageObj.height===void 0){var b=2*this.options.size;return this.width=b,void(this.height=b)}this.needsRefresh(f,m)&&this._resizeImage()}},{key:"draw",value:function(u,f,m,b,P,k){u.save(),this.switchImages(b),this.resize();var V=f,G=m;if(this.options.shapeProperties.coordinateOrigin==="top-left"?(this.left=f,this.top=m,V+=this.width/2,G+=this.height/2):(this.left=f-this.width/2,this.top=m-this.height/2),this.options.shapeProperties.useBorderWithImage===!0){var X=this.options.borderWidth,se=this.options.borderWidthSelected||2*this.options.borderWidth,ve=(b?se:X)/this.body.view.scale;u.lineWidth=Math.min(this.width,ve),u.beginPath();var ge=b?this.options.color.highlight.border:P?this.options.color.hover.border:this.options.color.border,xe=b?this.options.color.highlight.background:P?this.options.color.hover.background:this.options.color.background;k.opacity!==void 0&&(ge=Ms(ge,k.opacity),xe=Ms(xe,k.opacity)),u.strokeStyle=ge,u.fillStyle=xe,u.rect(this.left-.5*u.lineWidth,this.top-.5*u.lineWidth,this.width+u.lineWidth,this.height+u.lineWidth),Jm(u).call(u),this.performStroke(u,k),u.closePath()}this._drawImageAtPosition(u,k),this._drawImageLabel(u,V,G,b,P),this.updateBoundingBox(f,m),u.restore()}},{key:"updateBoundingBox",value:function(u,f){this.resize(),this.options.shapeProperties.coordinateOrigin==="top-left"?(this.left=u,this.top=f):(this.left=u-this.width/2,this.top=f-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,this.options.label!==void 0&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(uh);function FT(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var O4=function(p){xn(s,p);var a=FT(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){return this._drawShape(u,"square",2,f,m,b,P,k)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(fl);function BT(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var F8=function(p){xn(s,p);var a=BT(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){return this._drawShape(u,"hexagon",4,f,m,b,P,k)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(fl);function B8(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var z8=function(p){xn(s,p);var a=B8(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){return this._drawShape(u,"star",4,f,m,b,P,k)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(fl);function zT(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var WT=function(p){xn(s,p);var a=zT(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m))._setMargins(m),b}return yt(s,[{key:"resize",value:function(u,f,m){this.needsRefresh(f,m)&&(this.textSize=this.labelModule.getTextSize(u,f,m),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(u,f,m,b,P,k){this.resize(u,b,P),this.left=f-this.width/2,this.top=m-this.height/2,this.enableShadow(u,k),this.labelModule.draw(u,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,b,P),this.disableShadow(u,k),this.updateBoundingBox(f,m,u,b,P)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(Ei);function W8(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var HT=function(p){xn(s,p);var a=W8(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){return this._drawShape(u,"triangle",3,f,m,b,P,k)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(fl);function VT(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var H8=function(p){xn(s,p);var a=VT(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){return this._drawShape(u,"triangleDown",3,f,m,b,P,k)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(fl);function V8(p,a){var s=no(p);if(fd){var u=fd(p);a&&(u=ts(u).call(u,function(f){return Qu(p,f).enumerable})),s.push.apply(s,u)}return s}function x4(p){for(var a=1;aa.left&&this.shape.topa.top}},{key:"isBoundingBoxOverlappingWith",value:function(a){return this.shape.boundingBox.lefta.left&&this.shape.boundingBox.topa.top}}],[{key:"checkOpacity",value:function(a){return 0<=a&&a<=1}},{key:"checkCoordinateOrigin",value:function(a){return a===void 0||a==="center"||a==="top-left"}},{key:"updateGroupOptions",value:function(a,s,u){var f;if(u!==void 0){var m=a.group;if(s!==void 0&&s.group!==void 0&&m!==s.group)throw new Error("updateGroupOptions: group values in options don't match.");if(typeof m=="number"||typeof m=="string"&&m!=""){var b=u.get(m);b.opacity!==void 0&&s.opacity===void 0&&(p.checkOpacity(b.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+b.opacity),b.opacity=void 0));var P=ts(f=ah(s)).call(f,function(k){return s[k]!=null});P.push("font"),Yv(P,a,b),a.color=g2(a.color)}}}},{key:"parseOptions",value:function(a,s){var u=arguments.length>2&&arguments[2]!==void 0&&arguments[2],f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},m=arguments.length>4?arguments[4]:void 0;if(Yv(["color","fixed","shadow"],a,s,u),p.checkMass(s),a.opacity!==void 0&&(p.checkOpacity(a.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+a.opacity),a.opacity=void 0)),s.opacity!==void 0&&(p.checkOpacity(s.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+s.opacity),s.opacity=void 0)),s.shapeProperties&&!p.checkCoordinateOrigin(s.shapeProperties.coordinateOrigin)&&console.error("Invalid option for node coordinateOrigin, found: "+s.shapeProperties.coordinateOrigin),As(a,s,"shadow",f),s.color!==void 0&&s.color!==null){var b=g2(s.color);k6(a.color,b)}else u===!0&&s.color===null&&(a.color=ld(f.color));s.fixed!==void 0&&s.fixed!==null&&(typeof s.fixed=="boolean"?(a.fixed.x=s.fixed,a.fixed.y=s.fixed):(s.fixed.x!==void 0&&typeof s.fixed.x=="boolean"&&(a.fixed.x=s.fixed.x),s.fixed.y!==void 0&&typeof s.fixed.y=="boolean"&&(a.fixed.y=s.fixed.y))),u===!0&&s.font===null&&(a.font=ld(f.font)),p.updateGroupOptions(a,s,m),s.scaling!==void 0&&As(a.scaling,s.scaling,"label",f.scaling)}},{key:"checkMass",value:function(a,s){if(a.mass!==void 0&&a.mass<=0){var u="";s!==void 0&&(u=" in node id: "+s),console.error("%cNegative or zero mass disallowed"+u+", setting mass to 1.",b2),a.mass=1}}}]),p}();function $T(p,a){var s=Xp!==void 0&&$p(p)||p["@@iterator"];if(!s){if(Mn(p)||(s=function(k,V){var G;if(k){if(typeof k=="string")return _4(k,V);var X=_i(G=Object.prototype.toString.call(k)).call(G,8,-1);if(X==="Object"&&k.constructor&&(X=k.constructor.name),X==="Map"||X==="Set")return Dc(k);if(X==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(X))return _4(k,V)}}(p))||a&&p&&typeof p.length=="number"){s&&(p=s);var u=0,f=function(){};return{s:f,n:function(){return u>=p.length?{done:!0}:{done:!1,value:p[u++]}},e:function(k){throw k},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m,b=!0,P=!1;return{s:function(){s=s.call(p)},n:function(){var k=s.next();return b=k.done,k},e:function(k){P=!0,m=k},f:function(){try{b||s.return==null||s.return()}finally{if(P)throw m}}}}function _4(p,a){(a==null||a>p.length)&&(a=p.length);for(var s=0,u=new Array(a);s1?console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+a.opacity):this.options.opacity=a.opacity),a.shape!==void 0)for(var s in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,s)&&this.body.nodes[s].updateShape();if(a.font!==void 0||a.widthConstraint!==void 0||a.heightConstraint!==void 0)for(var u=0,f=no(this.body.nodes);u1&&arguments[1]!==void 0&&arguments[1],u=this.body.data.nodes;if(t.isDataViewLike("id",a))this.body.data.nodes=a;else if(Mn(a))this.body.data.nodes=new t.DataSet,this.body.data.nodes.add(a);else{if(a)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new t.DataSet}if(u&&nn(this.nodesListeners,function(b,P){u.off(P,b)}),this.body.nodes={},this.body.data.nodes){var f=this;nn(this.nodesListeners,function(b,P){f.body.data.nodes.on(P,b)});var m=this.body.data.nodes.getIds();this.add(m,!0)}s===!1&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(a){for(var s,u=arguments.length>1&&arguments[1]!==void 0&&arguments[1],f=[],m=0;m1&&arguments[1]!==void 0?arguments[1]:Ra)(a,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:"refresh",value:function(){var a=this,s=arguments.length>0&&arguments[0]!==void 0&&arguments[0];nn(this.body.nodes,function(u,f){var m=a.body.data.nodes.get(f);m!==void 0&&(s===!0&&u.setOptions({x:null,y:null}),u.setOptions({fixed:!1}),u.setOptions(m))})}},{key:"getPositions",value:function(a){var s={};if(a!==void 0){if(Mn(a)===!0){for(var u=0;u0?(u=s/P)*u:s;return P===1/0?1/0:P*JT(f)}});var S0=n(St.Math.hypot);function I4(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var So=function(){function p(){gt(this,p)}return yt(p,null,[{key:"transform",value:function(a,s){Mn(a)||(a=[a]);for(var u=s.point.x,f=s.point.y,m=s.angle,b=s.length,P=0;P4&&arguments[4]!==void 0?arguments[4]:this.getViaNode();a.strokeStyle=this.getColor(a,s),a.lineWidth=s.width,s.dashes!==!1?this._drawDashedLine(a,s,m):this._drawLine(a,s,m)}},{key:"_drawLine",value:function(a,s,u,f,m){if(this.from!=this.to)this._line(a,s,u,f,m);else{var b=Mo(this._getCircleData(a),3),P=b[0],k=b[1],V=b[2];this._circle(a,s,P,k,V)}}},{key:"_drawDashedLine",value:function(a,s,u,f,m){a.lineCap="round";var b=Mn(s.dashes)?s.dashes:[5,5];if(a.setLineDash!==void 0){if(a.save(),a.setLineDash(b),a.lineDashOffset=0,this.from!=this.to)this._line(a,s,u);else{var P=Mo(this._getCircleData(a),3),k=P[0],V=P[1],G=P[2];this._circle(a,s,k,V,G)}a.setLineDash([0]),a.lineDashOffset=0,a.restore()}else{if(this.from!=this.to)B1(a,this.from.x,this.from.y,this.to.x,this.to.y,b);else{var X=Mo(this._getCircleData(a),3),se=X[0],ve=X[1],ge=X[2];this._circle(a,s,se,ve,ge)}this.enableShadow(a,s),a.stroke(),this.disableShadow(a,s)}}},{key:"findBorderPosition",value:function(a,s,u){return this.from!=this.to?this._findBorderPosition(a,s,u):this._findBorderPositionCircle(a,s,u)}},{key:"findBorderPositions",value:function(a){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,a),to:this._findBorderPosition(this.to,a)};var s,u=Mo(_i(s=this._getCircleData(a)).call(s,0,2),2),f=u[0],m=u[1];return{from:this._findBorderPositionCircle(this.from,a,{x:f,y:m,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,a,{x:f,y:m,low:.6,high:.8,direction:1})}}},{key:"_getCircleData",value:function(a){var s=this.options.selfReference.size;a!==void 0&&this.from.shape.width===void 0&&this.from.shape.resize(a);var u=h4(a,this.options.selfReference.angle,s,this.from);return[u.x,u.y,s]}},{key:"_pointOnCircle",value:function(a,s,u,f){var m=2*f*Math.PI;return{x:a+u*Math.cos(m),y:s-u*Math.sin(m)}}},{key:"_findBorderPositionCircle",value:function(a,s,u){var f,m=u.x,b=u.y,P=u.low,k=u.high,V=u.direction,G=this.options.selfReference.size,X=.5*(P+k),se=0;this.options.arrowStrikethrough===!0&&(V===-1?se=this.options.endPointOffset.from:V===1&&(se=this.options.endPointOffset.to));var ve=0;do{X=.5*(P+k),f=this._pointOnCircle(m,b,G,X);var ge=Math.atan2(a.y-f.y,a.x-f.x),xe=a.distanceToBorder(s,ge)+se-Math.sqrt(Math.pow(f.x-a.x,2)+Math.pow(f.y-a.y,2));if(Math.abs(xe)<.05)break;xe>0?V>0?P=X:k=X:V>0?k=X:P=X,++ve}while(P<=k&&ve<10);return e5(e5({},f),{},{t:X})}},{key:"getLineWidth",value:function(a,s){return a===!0?Math.max(this.selectionWidth,.3/this._body.view.scale):s===!0?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:"getColor",value:function(a,s){if(s.inheritsColor!==!1){if(s.inheritsColor==="both"&&this.from.id!==this.to.id){var u=a.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),f=this.from.options.color.highlight.border,m=this.to.options.color.highlight.border;return this.from.selected===!1&&this.to.selected===!1?(f=Ms(this.from.options.color.border,s.opacity),m=Ms(this.to.options.color.border,s.opacity)):this.from.selected===!0&&this.to.selected===!1?m=this.to.options.color.border:this.from.selected===!1&&this.to.selected===!0&&(f=this.from.options.color.border),u.addColorStop(0,f),u.addColorStop(1,m),u}return s.inheritsColor==="to"?Ms(this.to.options.color.border,s.opacity):Ms(this.from.options.color.border,s.opacity)}return Ms(s.color,s.opacity)}},{key:"_circle",value:function(a,s,u,f,m){this.enableShadow(a,s);var b=0,P=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var k=this.options.selfReference.angle,V=this.options.selfReference.angle+Math.PI,G=this._findBorderPositionCircle(this.from,a,{x:u,y:f,low:k,high:V,direction:-1}),X=this._findBorderPositionCircle(this.from,a,{x:u,y:f,low:k,high:V,direction:1});b=Math.atan2(G.y-f,G.x-u),P=Math.atan2(X.y-f,X.x-u)}a.beginPath(),a.arc(u,f,m,b,P,!1),a.stroke(),this.disableShadow(a,s)}},{key:"getDistanceToEdge",value:function(a,s,u,f,m,b){if(this.from!=this.to)return this._getDistanceToEdge(a,s,u,f,m,b);var P=Mo(this._getCircleData(void 0),3),k=P[0],V=P[1],G=P[2],X=k-m,se=V-b;return Math.abs(Math.sqrt(X*X+se*se)-G)}},{key:"_getDistanceToLine",value:function(a,s,u,f,m,b){var P=u-a,k=f-s,V=((m-a)*P+(b-s)*k)/(P*P+k*k);V>1?V=1:V<0&&(V=0);var G=a+V*P-m,X=s+V*k-b;return Math.sqrt(G*G+X*X)}},{key:"getArrowData",value:function(a,s,u,f,m,b){var P,k,V,G,X,se,ve,ge=b.width;s==="from"?(V=this.from,G=this.to,X=b.fromArrowScale<0,se=Math.abs(b.fromArrowScale),ve=b.fromArrowType):s==="to"?(V=this.to,G=this.from,X=b.toArrowScale<0,se=Math.abs(b.toArrowScale),ve=b.toArrowType):(V=this.to,G=this.from,X=b.middleArrowScale<0,se=Math.abs(b.middleArrowScale),ve=b.middleArrowType);var xe=15*se+3*ge;if(V!=G){var Re=xe/S0(V.x-G.x,V.y-G.y);if(s!=="middle")if(this.options.smooth.enabled===!0){var Ue=this._findBorderPosition(V,a,{via:u}),et=this.getPoint(Ue.t+Re*(s==="from"?1:-1),u);P=Math.atan2(Ue.y-et.y,Ue.x-et.x),k=Ue}else P=Math.atan2(V.y-G.y,V.x-G.x),k=this._findBorderPosition(V,a);else{var bt=(X?-Re:Re)/2,It=this.getPoint(.5+bt,u),fr=this.getPoint(.5-bt,u);P=Math.atan2(It.y-fr.y,It.x-fr.x),k=this.getPoint(.5,u)}}else{var jr=Mo(this._getCircleData(a),3),Br=jr[0],gr=jr[1],tr=jr[2];if(s==="from"){var Qn=this.options.selfReference.angle,yn=this.options.selfReference.angle+Math.PI,oo=this._findBorderPositionCircle(this.from,a,{x:Br,y:gr,low:Qn,high:yn,direction:-1});P=-2*oo.t*Math.PI+1.5*Math.PI+.1*Math.PI,k=oo}else if(s==="to"){var Ao=this.options.selfReference.angle,Eo=this.options.selfReference.angle+Math.PI,tc=this._findBorderPositionCircle(this.from,a,{x:Br,y:gr,low:Ao,high:Eo,direction:1});P=-2*tc.t*Math.PI+1.5*Math.PI-1.1*Math.PI,k=tc}else{var $i=this.options.selfReference.angle/(2*Math.PI);k=this._pointOnCircle(Br,gr,tr,$i),P=-2*$i*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:k,core:{x:k.x-.9*xe*Math.cos(P),y:k.y-.9*xe*Math.sin(P)},angle:P,length:xe,type:ve}}},{key:"drawArrowHead",value:function(a,s,u,f,m){a.strokeStyle=this.getColor(a,s),a.fillStyle=a.strokeStyle,a.lineWidth=s.width,K8.draw(a,m)&&(this.enableShadow(a,s),Jm(a).call(a),this.disableShadow(a,s))}},{key:"enableShadow",value:function(a,s){s.shadow===!0&&(a.shadowColor=s.shadowColor,a.shadowBlur=s.shadowSize,a.shadowOffsetX=s.shadowX,a.shadowOffsetY=s.shadowY)}},{key:"disableShadow",value:function(a,s){s.shadow===!0&&(a.shadowColor="rgba(0,0,0,0)",a.shadowBlur=0,a.shadowOffsetX=0,a.shadowOffsetY=0)}},{key:"drawBackground",value:function(a,s){if(s.background!==!1){var u={strokeStyle:a.strokeStyle,lineWidth:a.lineWidth,dashes:a.dashes};a.strokeStyle=s.backgroundColor,a.lineWidth=s.backgroundSize,this.setStrokeDashed(a,s.backgroundDashes),a.stroke(),a.strokeStyle=u.strokeStyle,a.lineWidth=u.lineWidth,a.dashes=u.dashes,this.setStrokeDashed(a,s.dashes)}}},{key:"setStrokeDashed",value:function(a,s){if(s!==!1)if(a.setLineDash!==void 0){var u=Mn(s)?s:[5,5];a.setLineDash(u)}else console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.");else a.setLineDash!==void 0?a.setLineDash([]):console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.")}}]),p}();function yd(p,a){var s=no(p);if(fd){var u=fd(p);a&&(u=ts(u).call(u,function(f){return Qu(p,f).enumerable})),s.push.apply(s,u)}return s}function k4(p){for(var a=1;a"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var I0=function(p){xn(s,p);var a=rC(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"_findBorderPositionBezier",value:function(u,f){var m,b,P=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this._getViaCoordinates(),k=!1,V=1,G=0,X=this.to,se=this.options.endPointOffset?this.options.endPointOffset.to:0;u.id===this.from.id&&(X=this.from,k=!0,se=this.options.endPointOffset?this.options.endPointOffset.from:0),this.options.arrowStrikethrough===!1&&(se=0);var ve=0;do{b=.5*(G+V),m=this.getPoint(b,P);var ge=Math.atan2(X.y-m.y,X.x-m.x),xe=X.distanceToBorder(f,ge)+se-Math.sqrt(Math.pow(m.x-X.x,2)+Math.pow(m.y-X.y,2));if(Math.abs(xe)<.2)break;xe<0?k===!1?G=b:V=b:k===!1?V=b:G=b,++ve}while(G<=V&&ve<10);return k4(k4({},m),{},{t:b})}},{key:"_getDistanceToBezierEdge",value:function(u,f,m,b,P,k,V){var G,X,se,ve,ge,xe=1e9,Re=u,Ue=f;for(X=1;X<10;X++)se=.1*X,ve=Math.pow(1-se,2)*u+2*se*(1-se)*V.x+Math.pow(se,2)*m,ge=Math.pow(1-se,2)*f+2*se*(1-se)*V.y+Math.pow(se,2)*b,X>0&&(xe=(G=this._getDistanceToLine(Re,Ue,ve,ge,P,k))"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var eI=function(p){xn(s,p);var a=Q8(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m)).via=b.via,b._boundFunction=function(){b.positionBezierNode()},b._body.emitter.on("_repositionBezierNodes",b._boundFunction),b}return yt(s,[{key:"setOptions",value:function(u){mg(zt(s.prototype),"setOptions",this).call(this,u);var f=!1;this.options.physics!==u.physics&&(f=!0),this.options=u,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),f===!0&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:"connect",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.from===void 0||this.to===void 0||this.options.physics===!1||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:"cleanup",value:function(){return this._body.emitter.off("_repositionBezierNodes",this._boundFunction),this.via!==void 0&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}},{key:"setupSupportNode",value:function(){if(this.via===void 0){var u="edgeId:"+this.id,f=this._body.functions.createNode({id:u,shape:"circle",physics:!0,hidden:!0});this._body.nodes[u]=f,this.via=f,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:"positionBezierNode",value:function(){this.via!==void 0&&this.from!==void 0&&this.to!==void 0?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):this.via!==void 0&&(this.via.x=0,this.via.y=0)}},{key:"_line",value:function(u,f,m){this._bezierCurve(u,f,m)}},{key:"_getViaCoordinates",value:function(){return this.via}},{key:"getViaNode",value:function(){return this.via}},{key:"getPoint",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.via;if(this.from===this.to){var m=Mo(this._getCircleData(),3),b=m[0],P=m[1],k=m[2],V=2*Math.PI*(1-u);return{x:b+k*Math.sin(V),y:P+k-k*(1-Math.cos(V))}}return{x:Math.pow(1-u,2)*this.fromPoint.x+2*u*(1-u)*f.x+Math.pow(u,2)*this.toPoint.x,y:Math.pow(1-u,2)*this.fromPoint.y+2*u*(1-u)*f.y+Math.pow(u,2)*this.toPoint.y}}},{key:"_findBorderPosition",value:function(u,f){return this._findBorderPositionBezier(u,f,this.via)}},{key:"_getDistanceToEdge",value:function(u,f,m,b,P,k){return this._getDistanceToBezierEdge(u,f,m,b,P,k,this.via)}}]),s}(I0);function nC(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var j4=function(p){xn(s,p);var a=nC(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"_line",value:function(u,f,m){this._bezierCurve(u,f,m)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_getViaCoordinates",value:function(){var u,f,m=this.options.smooth.roundness,b=this.options.smooth.type,P=Math.abs(this.from.x-this.to.x),k=Math.abs(this.from.y-this.to.y);if(b==="discrete"||b==="diagonalCross"){var V,G;V=G=P<=k?m*k:m*P,this.from.x>this.to.x&&(V=-V),this.from.y>=this.to.y&&(G=-G);var X=this.from.x+V,se=this.from.y+G;return b==="discrete"&&(P<=k?X=Pthis.to.x&&(u=-u),this.from.y>=this.to.y&&(f=-f);var Br=this.from.x+u,gr=this.from.y+f;return P<=k?Br=this.from.x<=this.to.x?this.to.xBr?this.to.x:Br:gr=this.from.y>=this.to.y?this.to.y>gr?this.to.y:gr:this.to.y2&&arguments[2]!==void 0?arguments[2]:{};return this._findBorderPositionBezier(u,f,m.via)}},{key:"_getDistanceToEdge",value:function(u,f,m,b,P,k){var V=arguments.length>6&&arguments[6]!==void 0?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(u,f,m,b,P,k,V)}},{key:"getPoint",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this._getViaCoordinates(),m=u;return{x:Math.pow(1-m,2)*this.fromPoint.x+2*m*(1-m)*f.x+Math.pow(m,2)*this.toPoint.x,y:Math.pow(1-m,2)*this.fromPoint.y+2*m*(1-m)*f.y+Math.pow(m,2)*this.toPoint.y}}}]),s}(I0);function tI(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var rI=function(p){xn(s,p);var a=tI(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"_getDistanceToBezierEdge2",value:function(u,f,m,b,P,k,V,G){for(var X=1e9,se=u,ve=f,ge=[0,0,0,0],xe=1;xe<10;xe++){var Re=.1*xe;ge[0]=Math.pow(1-Re,3),ge[1]=3*Re*Math.pow(1-Re,2),ge[2]=3*Math.pow(Re,2)*(1-Re),ge[3]=Math.pow(Re,3);var Ue=ge[0]*u+ge[1]*V.x+ge[2]*G.x+ge[3]*m,et=ge[0]*f+ge[1]*V.y+ge[2]*G.y+ge[3]*b;if(xe>0){var bt=this._getDistanceToLine(se,ve,Ue,et,P,k);X=bt"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var oI=function(p){xn(s,p);var a=nI(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"_line",value:function(u,f,m){var b=m[0],P=m[1];this._bezierCurve(u,f,b,P)}},{key:"_getViaCoordinates",value:function(){var u,f,m,b,P=this.from.x-this.to.x,k=this.from.y-this.to.y,V=this.options.smooth.roundness;return(Math.abs(P)>Math.abs(k)||this.options.smooth.forceDirection===!0||this.options.smooth.forceDirection==="horizontal")&&this.options.smooth.forceDirection!=="vertical"?(f=this.from.y,b=this.to.y,u=this.from.x-V*P,m=this.to.x+V*P):(f=this.from.y-V*k,b=this.to.y+V*k,u=this.from.x,m=this.to.x),[{x:u,y:f},{x:m,y:b}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(u,f){return this._findBorderPositionBezier(u,f)}},{key:"_getDistanceToEdge",value:function(u,f,m,b,P,k){var V=Mo(arguments.length>6&&arguments[6]!==void 0?arguments[6]:this._getViaCoordinates(),2),G=V[0],X=V[1];return this._getDistanceToBezierEdge2(u,f,m,b,P,k,G,X)}},{key:"getPoint",value:function(u){var f=Mo(arguments.length>1&&arguments[1]!==void 0?arguments[1]:this._getViaCoordinates(),2),m=f[0],b=f[1],P=u,k=[Math.pow(1-P,3),3*P*Math.pow(1-P,2),3*Math.pow(P,2)*(1-P),Math.pow(P,3)];return{x:k[0]*this.fromPoint.x+k[1]*m.x+k[2]*b.x+k[3]*this.toPoint.x,y:k[0]*this.fromPoint.y+k[1]*m.y+k[2]*b.y+k[3]*this.toPoint.y}}}]),s}(rI);function iI(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var T4=function(p){xn(s,p);var a=iI(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"_line",value:function(u,f){u.beginPath(),u.moveTo(this.fromPoint.x,this.fromPoint.y),u.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(u,f),u.stroke(),this.disableShadow(u,f)}},{key:"getViaNode",value:function(){}},{key:"getPoint",value:function(u){return{x:(1-u)*this.fromPoint.x+u*this.toPoint.x,y:(1-u)*this.fromPoint.y+u*this.toPoint.y}}},{key:"_findBorderPosition",value:function(u,f){var m=this.to,b=this.from;u.id===this.from.id&&(m=this.from,b=this.to);var P=Math.atan2(m.y-b.y,m.x-b.x),k=m.x-b.x,V=m.y-b.y,G=Math.sqrt(k*k+V*V),X=(G-u.distanceToBorder(f,P))/G;return{x:(1-X)*b.x+X*m.x,y:(1-X)*b.y+X*m.y,t:0}}},{key:"_getDistanceToEdge",value:function(u,f,m,b,P,k){return this._getDistanceToLine(u,f,m,b,P,k)}}]),s}(Y8),E0=function(){function p(a,s,u,f,m){if(gt(this,p),s===void 0)throw new Error("No body provided");this.options=ld(f),this.globalOptions=f,this.defaultOptions=m,this.body=s,this.imagelist=u,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new v4(this.body,this.options,!0),this.setOptions(a)}return yt(p,[{key:"setOptions",value:function(a){if(a){var s=a.physics!==void 0&&this.options.physics!==a.physics||a.hidden!==void 0&&(this.options.hidden||!1)!==(a.hidden||!1)||a.from!==void 0&&this.options.from!==a.from||a.to!==void 0&&this.options.to!==a.to;p.parseOptions(this.options,a,!0,this.globalOptions),a.id!==void 0&&(this.id=a.id),a.from!==void 0&&(this.fromId=a.from),a.to!==void 0&&(this.toId=a.to),a.title!==void 0&&(this.title=a.title),a.value!==void 0&&(a.value=Ls(a.value));var u=[a,this.options,this.defaultOptions];return this.chooser=f4("edge",u),this.updateLabelModule(a),s=this.updateEdgeType()||s,this._setInteractionWidths(),this.connect(),s}}},{key:"getFormattingValues",value:function(){var a=this.options.arrows.to===!0||this.options.arrows.to.enabled===!0,s=this.options.arrows.from===!0||this.options.arrows.from.enabled===!0,u=this.options.arrows.middle===!0||this.options.arrows.middle.enabled===!0,f=this.options.color.inherit,m={toArrow:a,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:u,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:s,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:f?void 0:this.options.color.color,inheritsColor:f,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(this.chooser===!0){if(this.selected){var b=this.options.selectionWidth;typeof b=="function"?m.width=b(m.width):typeof b=="number"&&(m.width+=b),m.width=Math.max(m.width,.3/this.body.view.scale),m.color=this.options.color.highlight,m.shadow=this.options.shadow.enabled}else if(this.hover){var P=this.options.hoverWidth;typeof P=="function"?m.width=P(m.width):typeof P=="number"&&(m.width+=P),m.width=Math.max(m.width,.3/this.body.view.scale),m.color=this.options.color.hover,m.shadow=this.options.shadow.enabled}}else typeof this.chooser=="function"&&(this.chooser(m,this.options.id,this.selected,this.hover),m.color!==void 0&&(m.inheritsColor=!1),m.shadow===!1&&(m.shadowColor===this.options.shadow.color&&m.shadowSize===this.options.shadow.size&&m.shadowX===this.options.shadow.x&&m.shadowY===this.options.shadow.y||(m.shadow=!0)));else m.shadow=this.options.shadow.enabled,m.width=Math.max(m.width,.3/this.body.view.scale);return m}},{key:"updateLabelModule",value:function(a){var s=[a,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,s),this.labelModule.baseSize!==void 0&&(this.baseFontSize=this.labelModule.baseSize)}},{key:"updateEdgeType",value:function(){var a=this.options.smooth,s=!1,u=!0;return this.edgeType!==void 0&&((this.edgeType instanceof eI&&a.enabled===!0&&a.type==="dynamic"||this.edgeType instanceof oI&&a.enabled===!0&&a.type==="cubicBezier"||this.edgeType instanceof j4&&a.enabled===!0&&a.type!=="dynamic"&&a.type!=="cubicBezier"||this.edgeType instanceof T4&&a.type.enabled===!1)&&(u=!1),u===!0&&(s=this.cleanup())),u===!0?a.enabled===!0?a.type==="dynamic"?(s=!0,this.edgeType=new eI(this.options,this.body,this.labelModule)):a.type==="cubicBezier"?this.edgeType=new oI(this.options,this.body,this.labelModule):this.edgeType=new j4(this.options,this.body,this.labelModule):this.edgeType=new T4(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),s}},{key:"connect",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=this.from!==void 0&&this.to!==void 0,this.connected===!0?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:"disconnect",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:"getTitle",value:function(){return this.title}},{key:"isSelected",value:function(){return this.selected}},{key:"getValue",value:function(){return this.options.value}},{key:"setValueRange",value:function(a,s,u){if(this.options.value!==void 0){var f=this.options.scaling.customScalingFunction(a,s,u,this.options.value),m=this.options.scaling.max-this.options.scaling.min;if(this.options.scaling.label.enabled===!0){var b=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+f*b}this.options.width=this.options.scaling.min+f*m}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:"_setInteractionWidths",value:function(){typeof this.options.hoverWidth=="function"?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,typeof this.options.selectionWidth=="function"?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:"draw",value:function(a){var s=this.getFormattingValues();if(!s.hidden){var u=this.edgeType.getViaNode();this.edgeType.drawLine(a,s,this.selected,this.hover,u),this.drawLabel(a,u)}}},{key:"drawArrows",value:function(a){var s=this.getFormattingValues();if(!s.hidden){var u=this.edgeType.getViaNode(),f={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,s.fromArrow&&(f.from=this.edgeType.getArrowData(a,"from",u,this.selected,this.hover,s),s.arrowStrikethrough===!1&&(this.edgeType.fromPoint=f.from.core),s.fromArrowSrc&&(f.from.image=this.imagelist.load(s.fromArrowSrc)),s.fromArrowImageWidth&&(f.from.imageWidth=s.fromArrowImageWidth),s.fromArrowImageHeight&&(f.from.imageHeight=s.fromArrowImageHeight)),s.toArrow&&(f.to=this.edgeType.getArrowData(a,"to",u,this.selected,this.hover,s),s.arrowStrikethrough===!1&&(this.edgeType.toPoint=f.to.core),s.toArrowSrc&&(f.to.image=this.imagelist.load(s.toArrowSrc)),s.toArrowImageWidth&&(f.to.imageWidth=s.toArrowImageWidth),s.toArrowImageHeight&&(f.to.imageHeight=s.toArrowImageHeight)),s.middleArrow&&(f.middle=this.edgeType.getArrowData(a,"middle",u,this.selected,this.hover,s),s.middleArrowSrc&&(f.middle.image=this.imagelist.load(s.middleArrowSrc)),s.middleArrowImageWidth&&(f.middle.imageWidth=s.middleArrowImageWidth),s.middleArrowImageHeight&&(f.middle.imageHeight=s.middleArrowImageHeight)),s.fromArrow&&this.edgeType.drawArrowHead(a,s,this.selected,this.hover,f.from),s.middleArrow&&this.edgeType.drawArrowHead(a,s,this.selected,this.hover,f.middle),s.toArrow&&this.edgeType.drawArrowHead(a,s,this.selected,this.hover,f.to)}}},{key:"drawLabel",value:function(a,s){if(this.options.label!==void 0){var u,f=this.from,m=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(a,this.selected,this.hover),f.id!=m.id){this.labelModule.pointToSelf=!1,u=this.edgeType.getPoint(.5,s),a.save();var b=this._getRotation(a);b.angle!=0&&(a.translate(b.x,b.y),a.rotate(b.angle)),this.labelModule.draw(a,u.x,u.y,this.selected,this.hover),a.restore()}else{this.labelModule.pointToSelf=!0;var P=h4(a,this.options.selfReference.angle,this.options.selfReference.size,f);u=this._pointOnCircle(P.x,P.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(a,u.x,u.y,this.selected,this.hover)}}}},{key:"getItemsOnPoint",value:function(a){var s=[];if(this.labelModule.visible()){var u=this._getRotation();F2(this.labelModule.getSize(),a,u)&&s.push({edgeId:this.id,labelId:0})}var f={left:a.x,top:a.y};return this.isOverlappingWith(f)&&s.push({edgeId:this.id}),s}},{key:"isOverlappingWith",value:function(a){if(this.connected){var s=this.from.x,u=this.from.y,f=this.to.x,m=this.to.y,b=a.left,P=a.top;return this.edgeType.getDistanceToEdge(s,u,f,m,b,P)<10}return!1}},{key:"_getRotation",value:function(a){var s=this.edgeType.getViaNode(),u=this.edgeType.getPoint(.5,s);a!==void 0&&this.labelModule.calculateLabelSize(a,this.selected,this.hover,u.x,u.y);var f={x:u.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible()||this.options.font.align==="horizontal")return f;var m=this.from.y-this.to.y,b=this.from.x-this.to.x,P=Math.atan2(m,b);return(P<-1&&b<0||P>0&&b<0)&&(P+=Math.PI),f.angle=P,f}},{key:"_pointOnCircle",value:function(a,s,u,f){return{x:a+u*Math.cos(f),y:s-u*Math.sin(f)}}},{key:"select",value:function(){this.selected=!0}},{key:"unselect",value:function(){this.selected=!1}},{key:"cleanup",value:function(){return this.edgeType.cleanup()}},{key:"remove",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:"endPointsValid",value:function(){return this.body.nodes[this.fromId]!==void 0&&this.body.nodes[this.toId]!==void 0}}],[{key:"parseOptions",value:function(a,s){var u=arguments.length>2&&arguments[2]!==void 0&&arguments[2],f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},m=arguments.length>4&&arguments[4]!==void 0&&arguments[4];if(Jf(["endPointOffset","arrowStrikethrough","id","from","hidden","hoverWidth","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","selfReference","to","title","value","width","font","chosen","widthConstraint"],a,s,u),s.endPointOffset!==void 0&&s.endPointOffset.from!==void 0&&(Ku(s.endPointOffset.from)?a.endPointOffset.from=s.endPointOffset.from:(a.endPointOffset.from=f.endPointOffset.from!==void 0?f.endPointOffset.from:0,console.error("endPointOffset.from is not a valid number"))),s.endPointOffset!==void 0&&s.endPointOffset.to!==void 0&&(Ku(s.endPointOffset.to)?a.endPointOffset.to=s.endPointOffset.to:(a.endPointOffset.to=f.endPointOffset.to!==void 0?f.endPointOffset.to:0,console.error("endPointOffset.to is not a valid number"))),w0(s.label)?a.label=s.label:w0(a.label)||(a.label=void 0),As(a,s,"smooth",f),As(a,s,"shadow",f),As(a,s,"background",f),s.dashes!==void 0&&s.dashes!==null?a.dashes=s.dashes:u===!0&&s.dashes===null&&(a.dashes=Hu(f.dashes)),s.scaling!==void 0&&s.scaling!==null?(s.scaling.min!==void 0&&(a.scaling.min=s.scaling.min),s.scaling.max!==void 0&&(a.scaling.max=s.scaling.max),As(a.scaling,s.scaling,"label",f.scaling)):u===!0&&s.scaling===null&&(a.scaling=Hu(f.scaling)),s.arrows!==void 0&&s.arrows!==null)if(typeof s.arrows=="string"){var b=s.arrows.toLowerCase();a.arrows.to.enabled=ln(b).call(b,"to")!=-1,a.arrows.middle.enabled=ln(b).call(b,"middle")!=-1,a.arrows.from.enabled=ln(b).call(b,"from")!=-1}else{if(Vn(s.arrows)!=="object")throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+$m(s.arrows));As(a.arrows,s.arrows,"to",f.arrows),As(a.arrows,s.arrows,"middle",f.arrows),As(a.arrows,s.arrows,"from",f.arrows)}else u===!0&&s.arrows===null&&(a.arrows=Hu(f.arrows));if(s.color!==void 0&&s.color!==null){var P=Ql(s.color)?{color:s.color,highlight:s.color,hover:s.color,inherit:!1,opacity:1}:s.color,k=a.color;if(m)jn(k,f.color,!1,u);else for(var V in k)Object.prototype.hasOwnProperty.call(k,V)&&delete k[V];if(Ql(k))k.color=k,k.highlight=k,k.hover=k,k.inherit=!1,P.opacity===void 0&&(k.opacity=1);else{var G=!1;P.color!==void 0&&(k.color=P.color,G=!0),P.highlight!==void 0&&(k.highlight=P.highlight,G=!0),P.hover!==void 0&&(k.hover=P.hover,G=!0),P.inherit!==void 0&&(k.inherit=P.inherit),P.opacity!==void 0&&(k.opacity=Math.min(1,Math.max(0,P.opacity))),G===!0?k.inherit=!1:k.inherit===void 0&&(k.inherit="from")}}else u===!0&&s.color===null&&(a.color=ld(f.color));u===!0&&s.font===null&&(a.font=ld(f.font)),Object.prototype.hasOwnProperty.call(s,"selfReferenceSize")&&(console.warn("The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}"),a.selfReference.size=s.selfReferenceSize)}}]),p}(),oC=function(){function p(a,s,u){var f,m=this;gt(this,p),this.body=a,this.images=s,this.groups=u,this.body.functions.createEdge=at(f=this.create).call(f,this),this.edgesListeners={add:function(b,P){m.add(P.items)},update:function(b,P){m.update(P.items)},remove:function(b,P){m.remove(P.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:"arrow"},middle:{enabled:!1,scaleFactor:1,type:"arrow"},from:{enabled:!1,scaleFactor:1,type:"arrow"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:"#848484",highlight:"#848484",hover:"#848484",inherit:"from",opacity:1},dashes:!1,font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:2,strokeColor:"#ffffff",align:"horizontal",multi:!1,vadjust:0,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"courier new",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(b,P,k,V){if(P===b)return .5;var G=1/(P-b);return Math.max(0,(V-b)*G)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},background:{enabled:!1,color:"rgba(111,111,111,1)",size:10,dashes:!1},smooth:{enabled:!0,type:"dynamic",forceDirection:"none",roundness:.5},title:void 0,width:1,value:void 0},jn(this.options,this.defaultOptions),this.bindEventListeners()}return yt(p,[{key:"bindEventListeners",value:function(){var a,s,u=this;this.body.emitter.on("_forceDisableDynamicCurves",function(f){var m=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];f==="dynamic"&&(f="continuous");var b=!1;for(var P in u.body.edges)if(Object.prototype.hasOwnProperty.call(u.body.edges,P)){var k=u.body.edges[P],V=u.body.data.edges.get(P);if(V!=null){var G=V.smooth;G!==void 0&&G.enabled===!0&&G.type==="dynamic"&&(f===void 0?k.setOptions({smooth:!1}):k.setOptions({smooth:{type:f}}),b=!0)}}m===!0&&b===!0&&u.body.emitter.emit("_dataChanged")}),this.body.emitter.on("_dataUpdated",function(){u.reconnectEdges()}),this.body.emitter.on("refreshEdges",at(a=this.refresh).call(a,this)),this.body.emitter.on("refresh",at(s=this.refresh).call(s,this)),this.body.emitter.on("destroy",function(){nn(u.edgesListeners,function(f,m){u.body.data.edges&&u.body.data.edges.off(m,f)}),delete u.body.functions.createEdge,delete u.edgesListeners.add,delete u.edgesListeners.update,delete u.edgesListeners.remove,delete u.edgesListeners})}},{key:"setOptions",value:function(a){if(a!==void 0){E0.parseOptions(this.options,a,!0,this.defaultOptions,!0);var s=!1;if(a.smooth!==void 0)for(var u in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,u)&&(s=this.body.edges[u].updateEdgeType()||s);if(a.font!==void 0)for(var f in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,f)&&this.body.edges[f].updateLabelModule();a.hidden===void 0&&a.physics===void 0&&s!==!0||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(a){var s=this,u=arguments.length>1&&arguments[1]!==void 0&&arguments[1],f=this.body.data.edges;if(t.isDataViewLike("id",a))this.body.data.edges=a;else if(Mn(a))this.body.data.edges=new t.DataSet,this.body.data.edges.add(a);else{if(a)throw new TypeError("Array or DataSet expected");this.body.data.edges=new t.DataSet}if(f&&nn(this.edgesListeners,function(b,P){f.off(P,b)}),this.body.edges={},this.body.data.edges){nn(this.edgesListeners,function(b,P){s.body.data.edges.on(P,b)});var m=this.body.data.edges.getIds();this.add(m,!0)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),u===!1&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(a){for(var s=arguments.length>1&&arguments[1]!==void 0&&arguments[1],u=this.body.edges,f=this.body.data.edges,m=0;m1&&arguments[1]!==void 0)||arguments[1];if(a.length!==0){var u=this.body.edges;nn(a,function(f){var m=u[f];m!==void 0&&m.remove()}),s&&this.body.emitter.emit("_dataChanged")}}},{key:"refresh",value:function(){var a=this;nn(this.body.edges,function(s,u){var f=a.body.data.edges.get(u);f!==void 0&&s.setOptions(f)})}},{key:"create",value:function(a){return new E0(a,this.body,this.images,this.options,this.defaultOptions)}},{key:"reconnectEdges",value:function(){var a,s=this.body.nodes,u=this.body.edges;for(a in s)Object.prototype.hasOwnProperty.call(s,a)&&(s[a].edges=[]);for(a in u)if(Object.prototype.hasOwnProperty.call(u,a)){var f=u[a];f.from=null,f.to=null,f.connect()}}},{key:"getConnectedNodes",value:function(a){var s=[];if(this.body.edges[a]!==void 0){var u=this.body.edges[a];u.fromId!==void 0&&s.push(u.fromId),u.toId!==void 0&&s.push(u.toId)}return s}},{key:"_updateState",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:"_removeInvalidEdges",value:function(){var a=this,s=[];nn(this.body.edges,function(u,f){var m=a.body.nodes[u.toId],b=a.body.nodes[u.fromId];m!==void 0&&m.isCluster===!0||b!==void 0&&b.isCluster===!0||m!==void 0&&b!==void 0||s.push(f)}),this.remove(s,!1)}},{key:"_addMissingEdges",value:function(){var a=this.body.data.edges;if(a!=null){var s=this.body.edges,u=[];Fn(a).call(a,function(f,m){s[m]===void 0&&u.push(m)}),this.add(u,!0)}}}]),p}(),C4=function(){function p(a,s,u){gt(this,p),this.body=a,this.physicsBody=s,this.barnesHutTree,this.setOptions(u),this._rng=m2("BARNES HUT SOLVER")}return yt(p,[{key:"setOptions",value:function(a){this.options=a,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:"solve",value:function(){if(this.options.gravitationalConstant!==0&&this.physicsBody.physicsNodeIndices.length>0){var a,s=this.body.nodes,u=this.physicsBody.physicsNodeIndices,f=u.length,m=this._formBarnesHutTree(s,u);this.barnesHutTree=m;for(var b=0;b0&&this._getForceContributions(m.root,a)}}},{key:"_getForceContributions",value:function(a,s){this._getForceContribution(a.children.NW,s),this._getForceContribution(a.children.NE,s),this._getForceContribution(a.children.SW,s),this._getForceContribution(a.children.SE,s)}},{key:"_getForceContribution",value:function(a,s){if(a.childrenCount>0){var u=a.centerOfMass.x-s.x,f=a.centerOfMass.y-s.y,m=Math.sqrt(u*u+f*f);m*a.calcSize>this.thetaInversed?this._calculateForces(m,u,f,s,a):a.childrenCount===4?this._getForceContributions(a,s):a.children.data.id!=s.id&&this._calculateForces(m,u,f,s,a)}}},{key:"_calculateForces",value:function(a,s,u,f,m){a===0&&(s=a=.1),this.overlapAvoidanceFactor<1&&f.shape.radius&&(a=Math.max(.1+this.overlapAvoidanceFactor*f.shape.radius,a-f.shape.radius));var b=this.options.gravitationalConstant*m.mass*f.options.mass/Math.pow(a,3),P=s*b,k=u*b;this.physicsBody.forces[f.id].x+=P,this.physicsBody.forces[f.id].y+=k}},{key:"_formBarnesHutTree",value:function(a,s){for(var u,f=s.length,m=a[s[0]].x,b=a[s[0]].y,P=a[s[0]].x,k=a[s[0]].y,V=1;V0&&(XP&&(P=X),sek&&(k=se))}var ve=Math.abs(P-m)-Math.abs(k-b);ve>0?(b-=.5*ve,k+=.5*ve):(m+=.5*ve,P-=.5*ve);var ge=Math.max(1e-5,Math.abs(P-m)),xe=.5*ge,Re=.5*(m+P),Ue=.5*(b+k),et={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:Re-xe,maxX:Re+xe,minY:Ue-xe,maxY:Ue+xe},size:ge,calcSize:1/ge,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(et.root);for(var bt=0;bt0&&this._placeInTree(et.root,u);return et}},{key:"_updateBranchMass",value:function(a,s){var u=a.centerOfMass,f=a.mass+s.options.mass,m=1/f;u.x=u.x*a.mass+s.x*s.options.mass,u.x*=m,u.y=u.y*a.mass+s.y*s.options.mass,u.y*=m,a.mass=f;var b=Math.max(Math.max(s.height,s.radius),s.width);a.maxWidth=a.maxWidths.x?m.maxY>s.y?"NW":"SW":m.maxY>s.y?"NE":"SE",this._placeInRegion(a,s,f)}},{key:"_placeInRegion",value:function(a,s,u){var f=a.children[u];switch(f.childrenCount){case 0:f.children.data=s,f.childrenCount=1,this._updateBranchMass(f,s);break;case 1:f.children.data.x===s.x&&f.children.data.y===s.y?(s.x+=this._rng(),s.y+=this._rng()):(this._splitBranch(f),this._placeInTree(f,s));break;case 4:this._placeInTree(f,s)}}},{key:"_splitBranch",value:function(a){var s=null;a.childrenCount===1&&(s=a.children.data,a.mass=0,a.centerOfMass.x=0,a.centerOfMass.y=0),a.childrenCount=4,a.children.data=null,this._insertRegion(a,"NW"),this._insertRegion(a,"NE"),this._insertRegion(a,"SW"),this._insertRegion(a,"SE"),s!=null&&this._placeInTree(a,s)}},{key:"_insertRegion",value:function(a,s){var u,f,m,b,P=.5*a.size;switch(s){case"NW":u=a.range.minX,f=a.range.minX+P,m=a.range.minY,b=a.range.minY+P;break;case"NE":u=a.range.minX+P,f=a.range.maxX,m=a.range.minY,b=a.range.minY+P;break;case"SW":u=a.range.minX,f=a.range.minX+P,m=a.range.minY+P,b=a.range.maxY;break;case"SE":u=a.range.minX+P,f=a.range.maxX,m=a.range.minY+P,b=a.range.maxY}a.children[s]={centerOfMass:{x:0,y:0},mass:0,range:{minX:u,maxX:f,minY:m,maxY:b},size:.5*a.size,calcSize:2*a.calcSize,children:{data:null},maxWidth:0,level:a.level+1,childrenCount:0}}},{key:"_debug",value:function(a,s){this.barnesHutTree!==void 0&&(a.lineWidth=1,this._drawBranch(this.barnesHutTree.root,a,s))}},{key:"_drawBranch",value:function(a,s,u){u===void 0&&(u="#FF0000"),a.childrenCount===4&&(this._drawBranch(a.children.NW,s),this._drawBranch(a.children.NE,s),this._drawBranch(a.children.SE,s),this._drawBranch(a.children.SW,s)),s.strokeStyle=u,s.beginPath(),s.moveTo(a.range.minX,a.range.minY),s.lineTo(a.range.maxX,a.range.minY),s.stroke(),s.beginPath(),s.moveTo(a.range.maxX,a.range.minY),s.lineTo(a.range.maxX,a.range.maxY),s.stroke(),s.beginPath(),s.moveTo(a.range.maxX,a.range.maxY),s.lineTo(a.range.minX,a.range.maxY),s.stroke(),s.beginPath(),s.moveTo(a.range.minX,a.range.maxY),s.lineTo(a.range.minX,a.range.minY),s.stroke()}}]),p}(),iC=function(){function p(a,s,u){gt(this,p),this._rng=m2("REPULSION SOLVER"),this.body=a,this.physicsBody=s,this.setOptions(u)}return yt(p,[{key:"setOptions",value:function(a){this.options=a}},{key:"solve",value:function(){for(var a,s,u,f,m,b,P,k,V=this.body.nodes,G=this.physicsBody.physicsNodeIndices,X=this.physicsBody.forces,se=this.options.nodeDistance,ve=-2/3/se,ge=0;ge"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var sC=function(p){xn(s,p);var a=aI(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m))._rng=m2("FORCE ATLAS 2 BASED REPULSION SOLVER"),b}return yt(s,[{key:"_calculateForces",value:function(u,f,m,b,P){u===0&&(f=u=.1*this._rng()),this.overlapAvoidanceFactor<1&&b.shape.radius&&(u=Math.max(.1+this.overlapAvoidanceFactor*b.shape.radius,u-b.shape.radius));var k=b.edges.length+1,V=this.options.gravitationalConstant*P.mass*b.options.mass*k/Math.pow(u,2),G=f*V,X=m*V;this.physicsBody.forces[b.id].x+=G,this.physicsBody.forces[b.id].y+=X}}]),s}(C4);function sI(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var lI=function(p){xn(s,p);var a=sI(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"_calculateForces",value:function(u,f,m,b,P){if(u>0){var k=P.edges.length+1,V=this.options.centralGravity*k*P.options.mass;b[P.id].x=f*V,b[P.id].y=m*V}}}]),s}(t5),bd=function(){function p(a){gt(this,p),this.body=a,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:"barnesHut",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},Cn(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return yt(p,[{key:"bindEventListeners",value:function(){var a=this;this.body.emitter.on("initPhysics",function(){a.initPhysics()}),this.body.emitter.on("_layoutFailed",function(){a.layoutFailed=!0}),this.body.emitter.on("resetPhysics",function(){a.stopSimulation(),a.ready=!1}),this.body.emitter.on("disablePhysics",function(){a.physicsEnabled=!1,a.stopSimulation()}),this.body.emitter.on("restorePhysics",function(){a.setOptions(a.options),a.ready===!0&&a.startSimulation()}),this.body.emitter.on("startSimulation",function(){a.ready===!0&&a.startSimulation()}),this.body.emitter.on("stopSimulation",function(){a.stopSimulation()}),this.body.emitter.on("destroy",function(){a.stopSimulation(!1),a.body.emitter.off()}),this.body.emitter.on("_dataChanged",function(){a.updatePhysicsData()})}},{key:"setOptions",value:function(a){if(a!==void 0)if(a===!1)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(a===!0)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,Yv(["stabilization"],this.options,a),As(this.options,a,"stabilization"),a.enabled===void 0&&(this.options.enabled=!0),this.options.enabled===!1&&(this.physicsEnabled=!1,this.stopSimulation());var s=this.options.wind;s&&((typeof s.x!="number"||ag(s.x))&&(s.x=0),(typeof s.y!="number"||ag(s.y))&&(s.y=0)),this.timestep=this.options.timestep}this.init()}},{key:"init",value:function(){var a;this.options.solver==="forceAtlas2Based"?(a=this.options.forceAtlas2Based,this.nodesSolver=new sC(this.body,this.physicsBody,a),this.edgesSolver=new vg(this.body,this.physicsBody,a),this.gravitySolver=new lI(this.body,this.physicsBody,a)):this.options.solver==="repulsion"?(a=this.options.repulsion,this.nodesSolver=new iC(this.body,this.physicsBody,a),this.edgesSolver=new vg(this.body,this.physicsBody,a),this.gravitySolver=new t5(this.body,this.physicsBody,a)):this.options.solver==="hierarchicalRepulsion"?(a=this.options.hierarchicalRepulsion,this.nodesSolver=new M4(this.body,this.physicsBody,a),this.edgesSolver=new aC(this.body,this.physicsBody,a),this.gravitySolver=new t5(this.body,this.physicsBody,a)):(a=this.options.barnesHut,this.nodesSolver=new C4(this.body,this.physicsBody,a),this.edgesSolver=new vg(this.body,this.physicsBody,a),this.gravitySolver=new t5(this.body,this.physicsBody,a)),this.modelOptions=a}},{key:"initPhysics",value:function(){this.physicsEnabled===!0&&this.options.enabled===!0?this.options.stabilization.enabled===!0?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit("fit",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit("fit"))}},{key:"startSimulation",value:function(){var a;this.physicsEnabled===!0&&this.options.enabled===!0?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),this.viewFunction===void 0&&(this.viewFunction=at(a=this.simulationStep).call(a,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}},{key:"stopSimulation",value:function(){var a=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];this.stabilized=!0,a===!0&&this._emitStabilized(),this.viewFunction!==void 0&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,a===!0&&this.body.emitter.emit("_stopRendering"))}},{key:"simulationStep",value:function(){var a=Hm();this.physicsTick(),(Hm()-a<.4*this.simulationInterval||this.runDoubleSpeed===!0)&&this.stabilized===!1&&(this.physicsTick(),this.runDoubleSpeed=!0),this.stabilized===!0&&this.stopSimulation()}},{key:"_emitStabilized",value:function(){var a=this,s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||this.startedStabilization===!0)&&Ta(function(){a.body.emitter.emit("stabilized",{iterations:s}),a.startedStabilization=!1,a.stabilizationIterations=0},0)}},{key:"physicsStep",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:"adjustTimeStep",value:function(){this._evaluateStepQuality()===!0?this.timestep=1.2*this.timestep:this.timestep/1.2.3))return!1;return!0}},{key:"moveNodes",value:function(){for(var a=this.physicsBody.physicsNodeIndices,s=0,u=0,f=0;ff&&(a=a>0?f:-f),a}},{key:"_performStep",value:function(a){var s=this.body.nodes[a],u=this.physicsBody.forces[a];this.options.wind&&(u.x+=this.options.wind.x,u.y+=this.options.wind.y);var f=this.physicsBody.velocities[a];return this.previousStates[a]={x:s.x,y:s.y,vx:f.x,vy:f.y},s.options.fixed.x===!1?(f.x=this.calculateComponentVelocity(f.x,u.x,s.options.mass),s.x+=f.x*this.timestep):(u.x=0,f.x=0),s.options.fixed.y===!1?(f.y=this.calculateComponentVelocity(f.y,u.y,s.options.mass),s.y+=f.y*this.timestep):(u.y=0,f.y=0),Math.sqrt(Math.pow(f.x,2)+Math.pow(f.y,2))}},{key:"_freezeNodes",value:function(){var a=this.body.nodes;for(var s in a)if(Object.prototype.hasOwnProperty.call(a,s)&&a[s].x&&a[s].y){var u=a[s].options.fixed;this.freezeCache[s]={x:u.x,y:u.y},u.x=!0,u.y=!0}}},{key:"_restoreFrozenNodes",value:function(){var a=this.body.nodes;for(var s in a)Object.prototype.hasOwnProperty.call(a,s)&&this.freezeCache[s]!==void 0&&(a[s].options.fixed.x=this.freezeCache[s].x,a[s].options.fixed.y=this.freezeCache[s].y);this.freezeCache={}}},{key:"stabilize",value:function(){var a=this,s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.stabilization.iterations;typeof s!="number"&&(s=this.options.stabilization.iterations,console.error("The stabilize method needs a numeric amount of iterations. Switching to default: ",s)),this.physicsBody.physicsNodeIndices.length!==0?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=s,this.options.stabilization.onlyDynamicEdges===!0&&this._freezeNodes(),this.stabilizationIterations=0,Ta(function(){return a._stabilizationBatch()},0)):this.ready=!0}},{key:"_startStabilizing",value:function(){return this.startedStabilization!==!0&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0,!0)}},{key:"_stabilizationBatch",value:function(){var a=this,s=function(){return a.stabilized===!1&&a.stabilizationIterations1&&arguments[1]!==void 0?arguments[1]:[],f=1e9,m=-1e9,b=1e9,P=-1e9;if(u.length>0)for(var k=0;k(s=a[u[k]]).shape.boundingBox.left&&(b=s.shape.boundingBox.left),Ps.shape.boundingBox.top&&(f=s.shape.boundingBox.top),m1&&arguments[1]!==void 0?arguments[1]:[],f=1e9,m=-1e9,b=1e9,P=-1e9;if(u.length>0)for(var k=0;k(s=a[u[k]]).x&&(b=s.x),Ps.y&&(f=s.y),m"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var cC=function(p){xn(s,p);var a=uI(s);function s(u,f,m,b,P,k){var V;return gt(this,s),(V=a.call(this,u,f,m,b,P,k)).isCluster=!0,V.containedNodes={},V.containedEdges={},V}return yt(s,[{key:"_openChildCluster",value:function(u){var f=this,m=this.body.nodes[u];if(this.containedNodes[u]===void 0)throw new Error("node with id: "+u+" not in current cluster");if(!m.isCluster)throw new Error("node with id: "+u+" is not a cluster");delete this.containedNodes[u],nn(m.edges,function(b){delete f.containedEdges[b.id]}),nn(m.containedNodes,function(b,P){f.containedNodes[P]=b}),m.containedNodes={},nn(m.containedEdges,function(b,P){f.containedEdges[P]=b}),m.containedEdges={},nn(m.edges,function(b){nn(f.edges,function(P){var k,V,G=ln(k=P.clusteringEdgeReplacingIds).call(k,b.id);G!==-1&&(nn(b.clusteringEdgeReplacingIds,function(X){P.clusteringEdgeReplacingIds.push(X),f.body.edges[X].edgeReplacedById=P.id}),Wc(V=P.clusteringEdgeReplacingIds).call(V,G,1))})}),m.edges=[]}}]),s}(Ra),r5=function(){function p(a){var s=this;gt(this,p),this.body=a,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},Cn(this.options,this.defaultOptions),this.body.emitter.on("_resetData",function(){s.clusteredNodes={},s.clusteredEdges={}})}return yt(p,[{key:"clusterByHubsize",value:function(a,s){a===void 0?a=this._getHubSize():Vn(a)==="object"&&(s=this._checkOptions(a),a=this._getHubSize());for(var u=[],f=0;f=a&&u.push(m.id)}for(var b=0;b0&&arguments[0]!==void 0?arguments[0]:{},u=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];if(s.joinCondition===void 0)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");s=this._checkOptions(s);var f={},m={};nn(this.body.nodes,function(b,P){b.options&&s.joinCondition(b.options)===!0&&(f[P]=b,nn(b.edges,function(k){a.clusteredEdges[k.id]===void 0&&(m[k.id]=k)}))}),this._cluster(f,m,s,u)}},{key:"clusterByEdgeCount",value:function(a,s){var u=this,f=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];s=this._checkOptions(s);for(var m,b,P,k=[],V={},G=function(){var ve={},ge={},xe=u.body.nodeIndices[X],Re=u.body.nodes[xe];if(V[xe]===void 0){P=0,b=[];for(var Ue=0;Ue0&&no(ge).length>0&&bt===!0){var jr=function(){for(var tr=0;tr1&&arguments[1]!==void 0)||arguments[1];this.clusterByEdgeCount(1,a,s)}},{key:"clusterBridges",value:function(a){var s=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];this.clusterByEdgeCount(2,a,s)}},{key:"clusterByConnection",value:function(a,s){var u,f=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];if(a===void 0)throw new Error("No nodeId supplied to clusterByConnection!");if(this.body.nodes[a]===void 0)throw new Error("The nodeId given to clusterByConnection does not exist!");var m=this.body.nodes[a];(s=this._checkOptions(s,m)).clusterNodeProperties.x===void 0&&(s.clusterNodeProperties.x=m.x),s.clusterNodeProperties.y===void 0&&(s.clusterNodeProperties.y=m.y),s.clusterNodeProperties.fixed===void 0&&(s.clusterNodeProperties.fixed={},s.clusterNodeProperties.fixed.x=m.options.fixed.x,s.clusterNodeProperties.fixed.y=m.options.fixed.y);var b={},P={},k=m.id,V=Da.cloneOptions(m);b[k]=m;for(var G=0;G-1&&(P[et.id]=et)}this._cluster(b,P,s,f)}},{key:"_createClusterEdges",value:function(a,s,u,f){for(var m,b,P,k,V,G,X=no(a),se=[],ve=0;ve0&&arguments[0]!==void 0?arguments[0]:{};return a.clusterEdgeProperties===void 0&&(a.clusterEdgeProperties={}),a.clusterNodeProperties===void 0&&(a.clusterNodeProperties={}),a}},{key:"_cluster",value:function(a,s,u){var f=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],m=[];for(var b in a)Object.prototype.hasOwnProperty.call(a,b)&&this.clusteredNodes[b]!==void 0&&m.push(b);for(var P=0;Pm?s.x:m,b=s.yP?s.y:P;return{x:.5*(f+m),y:.5*(b+P)}}},{key:"openCluster",value:function(a,s){var u=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];if(a===void 0)throw new Error("No clusterNodeId supplied to openCluster.");var f=this.body.nodes[a];if(f===void 0)throw new Error("The clusterNodeId supplied to openCluster does not exist.");if(f.isCluster!==!0||f.containedNodes===void 0||f.containedEdges===void 0)throw new Error("The node:"+a+" is not a valid cluster.");var m=this.findNode(a),b=ln(m).call(m,a)-1;if(b>=0){var P=m[b];return this.body.nodes[P]._openChildCluster(a),delete this.body.nodes[a],void(u===!0&&this.body.emitter.emit("_dataChanged"))}var k=f.containedNodes,V=f.containedEdges;if(s!==void 0&&s.releaseFunction!==void 0&&typeof s.releaseFunction=="function"){var G={},X={x:f.x,y:f.y};for(var se in k)if(Object.prototype.hasOwnProperty.call(k,se)){var ve=this.body.nodes[se];G[se]={x:ve.x,y:ve.y}}var ge=s.releaseFunction(X,G);for(var xe in k)if(Object.prototype.hasOwnProperty.call(k,xe)){var Re=this.body.nodes[xe];ge[xe]!==void 0&&(Re.x=ge[xe].x===void 0?f.x:ge[xe].x,Re.y=ge[xe].y===void 0?f.y:ge[xe].y)}}else nn(k,function($i){$i.options.fixed.x===!1&&($i.x=f.x),$i.options.fixed.y===!1&&($i.y=f.y)});for(var Ue in k)if(Object.prototype.hasOwnProperty.call(k,Ue)){var et=this.body.nodes[Ue];et.vx=f.vx,et.vy=f.vy,et.setOptions({physics:!0}),delete this.clusteredNodes[Ue]}for(var bt=[],It=0;It0&&m<100;){var b=s.pop();if(b!==void 0){var P=this.body.edges[b];if(P!==void 0){m++;var k=P.clusteringEdgeReplacingIds;if(k===void 0)f.push(b);else for(var V=0;Vf&&(f=b.edges.length),a+=b.edges.length,s+=Math.pow(b.edges.length,2),u+=1}a/=u;var P=(s/=u)-Math.pow(a,2),k=Math.sqrt(P),V=Math.floor(a+2*k);return V>f&&(V=f),V}},{key:"_createClusteredEdge",value:function(a,s,u,f,m){var b=Da.cloneOptions(u,"edge");jn(b,f),b.from=a,b.to=s,b.id="clusterEdge:"+P0(),m!==void 0&&jn(b,m);var P=this.body.functions.createEdge(b);return P.clusteringEdgeReplacingIds=[u.id],P.connect(),this.body.edges[P.id]=P,P}},{key:"_clusterEdges",value:function(a,s,u,f){if(s instanceof E0){var m=s,b={};b[m.id]=m,s=b}if(a instanceof Ra){var P=a,k={};k[P.id]=P,a=k}if(u==null)throw new Error("_clusterEdges: parameter clusterNode required");for(var V in f===void 0&&(f=u.clusterEdgeProperties),this._createClusterEdges(a,s,u,f),s)if(Object.prototype.hasOwnProperty.call(s,V)&&this.body.edges[V]!==void 0){var G=this.body.edges[V];this._backupEdgeOptions(G),G.setOptions({physics:!1})}for(var X in a)Object.prototype.hasOwnProperty.call(a,X)&&(this.clusteredNodes[X]={clusterId:u.id,node:this.body.nodes[X]},this.body.nodes[X].setOptions({physics:!1}))}},{key:"_getClusterNodeForNode",value:function(a){if(a!==void 0){var s=this.clusteredNodes[a];if(s!==void 0){var u=s.clusterId;if(u!==void 0)return this.body.nodes[u]}}}},{key:"_filter",value:function(a,s){var u=[];return nn(a,function(f){s(f)&&u.push(f)}),u}},{key:"_updateState",value:function(){var a,s=this,u=[],f={},m=function(G){nn(s.body.nodes,function(X){X.isCluster===!0&&G(X)})};for(a in this.clusteredNodes)Object.prototype.hasOwnProperty.call(this.clusteredNodes,a)&&this.body.nodes[a]===void 0&&u.push(a);m(function(G){for(var X=0;X0}G.endPointsValid()&&se||(f[X]=X)}),m(function(G){nn(f,function(X){delete G.containedEdges[X],nn(G.edges,function(se,ve){se.id!==X?se.clusteringEdgeReplacingIds=s._filter(se.clusteringEdgeReplacingIds,function(ge){return!f[ge]}):G.edges[ve]=null}),G.edges=s._filter(G.edges,function(se){return se!==null})})}),nn(f,function(G){delete s.clusteredEdges[G]}),nn(f,function(G){delete s.body.edges[G]}),nn(no(this.body.edges),function(G){var X=s.body.edges[G],se=s._isClusteredNode(X.fromId)||s._isClusteredNode(X.toId);if(se!==s._isClusteredEdge(X.id))if(se){var ve=s._getClusterNodeForNode(X.fromId);ve!==void 0&&s._clusterEdges(s.body.nodes[X.fromId],X,ve);var ge=s._getClusterNodeForNode(X.toId);ge!==void 0&&s._clusterEdges(s.body.nodes[X.toId],X,ge)}else delete s._clusterEdges[G],s._restoreEdge(X)});for(var P=!1,k=!0,V=function(){var G=[];m(function(se){var ve=no(se.containedNodes).length,ge=se.options.allowSingleNodeCluster===!0;(ge&&ve<1||!ge&&ve<2)&&G.push(se.id)});for(var X=0;X0,P=P||k};k;)V();P&&this._updateState()}},{key:"_isClusteredNode",value:function(a){return this.clusteredNodes[a]!==void 0}},{key:"_isClusteredEdge",value:function(a){return this.clusteredEdges[a]!==void 0}}]),p}(),R4=function(){function p(a,s){var u;gt(this,p),window!==void 0&&(u=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=u===void 0?function(f){f()}:u,this.body=a,this.canvas=s,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},Cn(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return yt(p,[{key:"bindEventListeners",value:function(){var a,s=this;this.body.emitter.on("dragStart",function(){s.dragging=!0}),this.body.emitter.on("dragEnd",function(){s.dragging=!1}),this.body.emitter.on("zoom",function(){s.zooming=!0,window.clearTimeout(s.zoomTimeoutId),s.zoomTimeoutId=Ta(function(){var u;s.zooming=!1,at(u=s._requestRedraw).call(u,s)()},250)}),this.body.emitter.on("_resizeNodes",function(){s._resizeNodes()}),this.body.emitter.on("_redraw",function(){s.renderingActive===!1&&s._redraw()}),this.body.emitter.on("_blockRedraw",function(){s.allowRedraw=!1}),this.body.emitter.on("_allowRedraw",function(){s.allowRedraw=!0,s.redrawRequested=!1}),this.body.emitter.on("_requestRedraw",at(a=this._requestRedraw).call(a,this)),this.body.emitter.on("_startRendering",function(){s.renderRequests+=1,s.renderingActive=!0,s._startRendering()}),this.body.emitter.on("_stopRendering",function(){s.renderRequests-=1,s.renderingActive=s.renderRequests>0,s.renderTimer=void 0}),this.body.emitter.on("destroy",function(){s.renderRequests=0,s.allowRedraw=!1,s.renderingActive=!1,s.requiresTimeout===!0?clearTimeout(s.renderTimer):window.cancelAnimationFrame(s.renderTimer),s.body.emitter.off()})}},{key:"setOptions",value:function(a){a!==void 0&&Jf(["hideEdgesOnDrag","hideEdgesOnZoom","hideNodesOnDrag"],this.options,a)}},{key:"_requestNextFrame",value:function(a,s){if(typeof window<"u"){var u,f=window;return this.requiresTimeout===!0?u=Ta(a,s):f.requestAnimationFrame&&(u=f.requestAnimationFrame(a)),u}}},{key:"_startRendering",value:function(){var a;this.renderingActive===!0&&this.renderTimer===void 0&&(this.renderTimer=this._requestNextFrame(at(a=this._renderStep).call(a,this),this.simulationInterval))}},{key:"_renderStep",value:function(){this.renderingActive===!0&&(this.renderTimer=void 0,this.requiresTimeout===!0&&this._startRendering(),this._redraw(),this.requiresTimeout===!1&&this._startRendering())}},{key:"redraw",value:function(){this.body.emitter.emit("setSize"),this._redraw()}},{key:"_requestRedraw",value:function(){var a=this;this.redrawRequested!==!0&&this.renderingActive===!1&&this.allowRedraw===!0&&(this.redrawRequested=!0,this._requestNextFrame(function(){a._redraw(!1)},0))}},{key:"_redraw",value:function(){var a=arguments.length>0&&arguments[0]!==void 0&&arguments[0];if(this.allowRedraw===!0){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1;var s={drawExternalLabels:null};this.canvas.frame.canvas.width!==0&&this.canvas.frame.canvas.height!==0||this.canvas.setSize(),this.canvas.setTransform();var u=this.canvas.getContext(),f=this.canvas.frame.canvas.clientWidth,m=this.canvas.frame.canvas.clientHeight;if(u.clearRect(0,0,f,m),this.canvas.frame.clientWidth===0)return;if(u.save(),u.translate(this.body.view.translation.x,this.body.view.translation.y),u.scale(this.body.view.scale,this.body.view.scale),u.beginPath(),this.body.emitter.emit("beforeDrawing",u),u.closePath(),a===!1&&(this.dragging===!1||this.dragging===!0&&this.options.hideEdgesOnDrag===!1)&&(this.zooming===!1||this.zooming===!0&&this.options.hideEdgesOnZoom===!1)&&this._drawEdges(u),this.dragging===!1||this.dragging===!0&&this.options.hideNodesOnDrag===!1){var b=this._drawNodes(u,a).drawExternalLabels;s.drawExternalLabels=b}a===!1&&(this.dragging===!1||this.dragging===!0&&this.options.hideEdgesOnDrag===!1)&&(this.zooming===!1||this.zooming===!0&&this.options.hideEdgesOnZoom===!1)&&this._drawArrows(u),s.drawExternalLabels!=null&&s.drawExternalLabels(),a===!1&&this._drawSelectionBox(u),u.beginPath(),this.body.emitter.emit("afterDrawing",u),u.closePath(),u.restore(),a===!0&&u.clearRect(0,0,f,m)}}},{key:"_resizeNodes",value:function(){this.canvas.setTransform();var a=this.canvas.getContext();a.save(),a.translate(this.body.view.translation.x,this.body.view.translation.y),a.scale(this.body.view.scale,this.body.view.scale);var s,u=this.body.nodes;for(var f in u)Object.prototype.hasOwnProperty.call(u,f)&&((s=u[f]).resize(a),s.updateBoundingBox(a,s.selected));a.restore()}},{key:"_drawNodes",value:function(a){for(var s,u,f=arguments.length>1&&arguments[1]!==void 0&&arguments[1],m=this.body.nodes,b=this.body.nodeIndices,P=[],k=[],V=this.canvas.DOMtoCanvas({x:-20,y:-20}),G=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+20,y:this.canvas.frame.canvas.clientHeight+20}),X={top:V.y,left:V.x,bottom:G.y,right:G.x},se=[],ve=0;ve0&&arguments[0]!==void 0?arguments[0]:this.pixelRatio;this.initialized===!0&&(this.cameraState.previousWidth=this.frame.canvas.width/a,this.cameraState.previousHeight=this.frame.canvas.height/a,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/a,y:.5*this.frame.canvas.height/a}))}},{key:"_setCameraState",value:function(){if(this.cameraState.scale!==void 0&&this.frame.canvas.clientWidth!==0&&this.frame.canvas.clientHeight!==0&&this.pixelRatio!==0&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var a=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,s=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,u=this.cameraState.scale;a!=1&&s!=1?u=.5*this.cameraState.scale*(a+s):a!=1?u=this.cameraState.scale*a:s!=1&&(u=this.cameraState.scale*s),this.body.view.scale=u;var f=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),m={x:f.x-this.cameraState.position.x,y:f.y-this.cameraState.position.y};this.body.view.translation.x+=m.x*this.body.view.scale,this.body.view.translation.y+=m.y*this.body.view.scale}}},{key:"_prepareValue",value:function(a){if(typeof a=="number")return a+"px";if(typeof a=="string"){if(ln(a).call(a,"%")!==-1||ln(a).call(a,"px")!==-1)return a;if(ln(a).call(a,"%")===-1)return a+"px"}throw new Error("Could not use the value supplied for width or height:"+a)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=0,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var a=document.createElement("DIV");a.style.color="red",a.style.fontWeight="bold",a.style.padding="10px",a.innerText="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(a)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var a=this;this.hammer!==void 0&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new Xf(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:Xf.DIRECTION_ALL}),n5(this.hammer,function(s){a.body.eventListeners.onTouch(s)}),this.hammer.on("tap",function(s){a.body.eventListeners.onTap(s)}),this.hammer.on("doubletap",function(s){a.body.eventListeners.onDoubleTap(s)}),this.hammer.on("press",function(s){a.body.eventListeners.onHold(s)}),this.hammer.on("panstart",function(s){a.body.eventListeners.onDragStart(s)}),this.hammer.on("panmove",function(s){a.body.eventListeners.onDrag(s)}),this.hammer.on("panend",function(s){a.body.eventListeners.onDragEnd(s)}),this.hammer.on("pinch",function(s){a.body.eventListeners.onPinch(s)}),this.frame.canvas.addEventListener("wheel",function(s){a.body.eventListeners.onMouseWheel(s)}),this.frame.canvas.addEventListener("mousemove",function(s){a.body.eventListeners.onMouseMove(s)}),this.frame.canvas.addEventListener("contextmenu",function(s){a.body.eventListeners.onContext(s)}),this.hammerFrame=new Xf(this.frame),cI(this.hammerFrame,function(s){a.body.eventListeners.onRelease(s)})}},{key:"setSize",value:function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.width,s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.height;a=this._prepareValue(a),s=this._prepareValue(s);var u=!1,f=this.frame.canvas.width,m=this.frame.canvas.height,b=this.pixelRatio;if(this._setPixelRatio(),a!=this.options.width||s!=this.options.height||this.frame.style.width!=a||this.frame.style.height!=s)this._getCameraState(b),this.frame.style.width=a,this.frame.style.height=s,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=a,this.options.height=s,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},u=!0;else{var P=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),k=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===P&&this.frame.canvas.height===k||this._getCameraState(b),this.frame.canvas.width!==P&&(this.frame.canvas.width=P,u=!0),this.frame.canvas.height!==k&&(this.frame.canvas.height=k,u=!0)}return u===!0&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(f/this.pixelRatio),oldHeight:Math.round(m/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,u}},{key:"getContext",value:function(){return this.frame.canvas.getContext("2d")}},{key:"_determinePixelRatio",value:function(){var a=this.getContext();if(a===void 0)throw new Error("Could not get canvax context");var s=1;return typeof window<"u"&&(s=window.devicePixelRatio||1),s/(a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||a.backingStorePixelRatio||1)}},{key:"_setPixelRatio",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:"setTransform",value:function(){var a=this.getContext();if(a===void 0)throw new Error("Could not get canvax context");a.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:"_XconvertDOMtoCanvas",value:function(a){return(a-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(a){return a*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(a){return(a-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(a){return a*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(a){return{x:this._XconvertCanvasToDOM(a.x),y:this._YconvertCanvasToDOM(a.y)}}},{key:"DOMtoCanvas",value:function(a){return{x:this._XconvertDOMtoCanvas(a.x),y:this._YconvertDOMtoCanvas(a.y)}}}]),p}(),fC=function(){function p(a,s){var u,f,m=this;gt(this,p),this.body=a,this.canvas=s,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on("fit",at(u=this.fit).call(u,this)),this.body.emitter.on("animationFinished",function(){m.body.emitter.emit("_stopRendering")}),this.body.emitter.on("unlockNode",at(f=this.releaseNode).call(f,this))}return yt(p,[{key:"setOptions",value:function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.options=a}},{key:"fit",value:function(a){var s=arguments.length>1&&arguments[1]!==void 0&&arguments[1];a=function(se,ve){var ge=Cn({nodes:ve,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},se??{});if(!Mn(ge.nodes))throw new TypeError("Nodes has to be an array of ids.");if(ge.nodes.length===0&&(ge.nodes=ve),!(typeof ge.minZoomLevel=="number"&&ge.minZoomLevel>0))throw new TypeError("Min zoom level has to be a number higher than zero.");if(!(typeof ge.maxZoomLevel=="number"&&ge.minZoomLevel<=ge.maxZoomLevel))throw new TypeError("Max zoom level has to be a number higher than min zoom level.");return ge}(a,this.body.nodeIndices);var u,f,m=this.canvas.frame.canvas.clientWidth,b=this.canvas.frame.canvas.clientHeight;if(m===0||b===0)f=1,u=Da.getRange(this.body.nodes,a.nodes);else if(s===!0){var P=0;for(var k in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,k)&&this.body.nodes[k].predefinedPosition===!0&&(P+=1);if(P>.5*this.body.nodeIndices.length)return void this.fit(a,!1);u=Da.getRange(this.body.nodes,a.nodes),f=12.662/(this.body.nodeIndices.length+7.4147)+.0964822,f*=Math.min(m/600,b/600)}else{this.body.emitter.emit("_resizeNodes"),u=Da.getRange(this.body.nodes,a.nodes);var V=m/(1.1*Math.abs(u.maxX-u.minX)),G=b/(1.1*Math.abs(u.maxY-u.minY));f=V<=G?V:G}f>a.maxZoomLevel?f=a.maxZoomLevel:f1&&arguments[1]!==void 0?arguments[1]:{};if(this.body.nodes[a]!==void 0){var u={x:this.body.nodes[a].x,y:this.body.nodes[a].y};s.position=u,s.lockedOnNode=a,this.moveTo(s)}else console.error("Node: "+a+" cannot be found.")}},{key:"moveTo",value:function(a){if(a!==void 0){if(a.offset!=null){if(a.offset.x!=null){if(a.offset.x=+a.offset.x,!Ku(a.offset.x))throw new TypeError('The option "offset.x" has to be a finite number.')}else a.offset.x=0;if(a.offset.y!=null){if(a.offset.y=+a.offset.y,!Ku(a.offset.y))throw new TypeError('The option "offset.y" has to be a finite number.')}else a.offset.x=0}else a.offset={x:0,y:0};if(a.position!=null){if(a.position.x!=null){if(a.position.x=+a.position.x,!Ku(a.position.x))throw new TypeError('The option "position.x" has to be a finite number.')}else a.position.x=0;if(a.position.y!=null){if(a.position.y=+a.position.y,!Ku(a.position.y))throw new TypeError('The option "position.y" has to be a finite number.')}else a.position.x=0}else a.position=this.getViewPosition();if(a.scale!=null){if(a.scale=+a.scale,!(a.scale>0))throw new TypeError('The option "scale" has to be a number greater than zero.')}else a.scale=this.body.view.scale;a.animation===void 0&&(a.animation={duration:0}),a.animation===!1&&(a.animation={duration:0}),a.animation===!0&&(a.animation={}),a.animation.duration===void 0&&(a.animation.duration=1e3),a.animation.easingFunction===void 0&&(a.animation.easingFunction="easeInOutQuad"),this.animateView(a)}else a={}}},{key:"animateView",value:function(a){if(a!==void 0){this.animationEasingFunction=a.animation.easingFunction,this.releaseNode(),a.locked===!0&&(this.lockedOnNodeId=a.lockedOnNode,this.lockedOnNodeOffset=a.offset),this.easingTime!=0&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=a.scale,this.body.view.scale=this.targetScale;var s,u,f=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),m=f.x-a.position.x,b=f.y-a.position.y;this.targetTranslation={x:this.sourceTranslation.x+m*this.targetScale+a.offset.x,y:this.sourceTranslation.y+b*this.targetScale+a.offset.y},a.animation.duration===0?this.lockedOnNodeId!=null?(this.viewFunction=at(s=this._lockedRedraw).call(s,this),this.body.emitter.on("initRedraw",this.viewFunction)):(this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw")):(this.animationSpeed=1/(60*a.animation.duration*.001)||1/60,this.animationEasingFunction=a.animation.easingFunction,this.viewFunction=at(u=this._transitionRedraw).call(u,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))}}},{key:"_lockedRedraw",value:function(){var a=this.body.nodes[this.lockedOnNodeId].x,s=this.body.nodes[this.lockedOnNodeId].y,u=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),f=u.x-a,m=u.y-s,b=this.body.view.translation,P={x:b.x+f*this.body.view.scale+this.lockedOnNodeOffset.x,y:b.y+m*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=P}},{key:"releaseNode",value:function(){this.lockedOnNodeId!==void 0&&this.viewFunction!==void 0&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:"_transitionRedraw",value:function(){var a=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=a===!0?1:this.easingTime;var s=M6[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*s,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*s,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*s},this.easingTime>=1){var u;this.body.emitter.off("initRedraw",this.viewFunction),this.easingTime=0,this.lockedOnNodeId!=null&&(this.viewFunction=at(u=this._lockedRedraw).call(u,this),this.body.emitter.on("initRedraw",this.viewFunction)),this.body.emitter.emit("animationFinished")}}},{key:"getScale",value:function(){return this.body.view.scale}},{key:"getViewPosition",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),p}();function o5(p){var a,s=p&&p.preventDefault||!1,u=p&&p.container||window,f={},m={keydown:{},keyup:{}},b={};for(a=97;a<=122;a++)b[String.fromCharCode(a)]={code:a-97+65,shift:!1};for(a=65;a<=90;a++)b[String.fromCharCode(a)]={code:a,shift:!0};for(a=0;a<=9;a++)b[""+a]={code:48+a,shift:!1};for(a=1;a<=12;a++)b["F"+a]={code:111+a,shift:!1};for(a=0;a<=9;a++)b["num"+a]={code:96+a,shift:!1};b["num*"]={code:106,shift:!1},b["num+"]={code:107,shift:!1},b["num-"]={code:109,shift:!1},b["num/"]={code:111,shift:!1},b["num."]={code:110,shift:!1},b.left={code:37,shift:!1},b.up={code:38,shift:!1},b.right={code:39,shift:!1},b.down={code:40,shift:!1},b.space={code:32,shift:!1},b.enter={code:13,shift:!1},b.shift={code:16,shift:void 0},b.esc={code:27,shift:!1},b.backspace={code:8,shift:!1},b.tab={code:9,shift:!1},b.ctrl={code:17,shift:!1},b.alt={code:18,shift:!1},b.delete={code:46,shift:!1},b.pageup={code:33,shift:!1},b.pagedown={code:34,shift:!1},b["="]={code:187,shift:!1},b["-"]={code:189,shift:!1},b["]"]={code:221,shift:!1},b["["]={code:219,shift:!1};var P=function(G){V(G,"keydown")},k=function(G){V(G,"keyup")},V=function(G,X){if(m[X][G.keyCode]!==void 0){for(var se=m[X][G.keyCode],ve=0;ve700&&(this.body.emitter.emit("fit",{duration:700}),this.touchTime=new Date().valueOf())}},{key:"_stopMovement",value:function(){for(var a in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,a)&&(this.body.emitter.off("initRedraw",this.boundFunctions[a]),this.body.emitter.emit("_stopRendering"));this.boundFunctions={}}},{key:"_moveUp",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:"_moveDown",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:"_moveLeft",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:"_moveRight",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:"_zoomIn",value:function(){var a=this.body.view.scale,s=this.body.view.scale*(1+this.options.keyboard.speed.zoom),u=this.body.view.translation,f=s/a,m=(1-f)*this.canvas.canvasViewCenter.x+u.x*f,b=(1-f)*this.canvas.canvasViewCenter.y+u.y*f;this.body.view.scale=s,this.body.view.translation={x:m,y:b},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}},{key:"_zoomOut",value:function(){var a=this.body.view.scale,s=this.body.view.scale/(1+this.options.keyboard.speed.zoom),u=this.body.view.translation,f=s/a,m=(1-f)*this.canvas.canvasViewCenter.x+u.x*f,b=(1-f)*this.canvas.canvasViewCenter.y+u.y*f;this.body.view.scale=s,this.body.view.translation={x:m,y:b},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}},{key:"configureKeyboardBindings",value:function(){var a,s,u,f,m,b,P,k,V,G,X,se,ve,ge,xe,Re,Ue,et,bt,It,fr,jr,Br,gr,tr=this;this.keycharm!==void 0&&this.keycharm.destroy(),this.options.keyboard.enabled===!0&&(this.options.keyboard.bindToWindow===!0?this.keycharm=o5({container:window,preventDefault:!0}):this.keycharm=o5({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),this.activated===!0&&(at(a=this.keycharm).call(a,"up",function(){tr.bindToRedraw("_moveUp")},"keydown"),at(s=this.keycharm).call(s,"down",function(){tr.bindToRedraw("_moveDown")},"keydown"),at(u=this.keycharm).call(u,"left",function(){tr.bindToRedraw("_moveLeft")},"keydown"),at(f=this.keycharm).call(f,"right",function(){tr.bindToRedraw("_moveRight")},"keydown"),at(m=this.keycharm).call(m,"=",function(){tr.bindToRedraw("_zoomIn")},"keydown"),at(b=this.keycharm).call(b,"num+",function(){tr.bindToRedraw("_zoomIn")},"keydown"),at(P=this.keycharm).call(P,"num-",function(){tr.bindToRedraw("_zoomOut")},"keydown"),at(k=this.keycharm).call(k,"-",function(){tr.bindToRedraw("_zoomOut")},"keydown"),at(V=this.keycharm).call(V,"[",function(){tr.bindToRedraw("_zoomOut")},"keydown"),at(G=this.keycharm).call(G,"]",function(){tr.bindToRedraw("_zoomIn")},"keydown"),at(X=this.keycharm).call(X,"pageup",function(){tr.bindToRedraw("_zoomIn")},"keydown"),at(se=this.keycharm).call(se,"pagedown",function(){tr.bindToRedraw("_zoomOut")},"keydown"),at(ve=this.keycharm).call(ve,"up",function(){tr.unbindFromRedraw("_moveUp")},"keyup"),at(ge=this.keycharm).call(ge,"down",function(){tr.unbindFromRedraw("_moveDown")},"keyup"),at(xe=this.keycharm).call(xe,"left",function(){tr.unbindFromRedraw("_moveLeft")},"keyup"),at(Re=this.keycharm).call(Re,"right",function(){tr.unbindFromRedraw("_moveRight")},"keyup"),at(Ue=this.keycharm).call(Ue,"=",function(){tr.unbindFromRedraw("_zoomIn")},"keyup"),at(et=this.keycharm).call(et,"num+",function(){tr.unbindFromRedraw("_zoomIn")},"keyup"),at(bt=this.keycharm).call(bt,"num-",function(){tr.unbindFromRedraw("_zoomOut")},"keyup"),at(It=this.keycharm).call(It,"-",function(){tr.unbindFromRedraw("_zoomOut")},"keyup"),at(fr=this.keycharm).call(fr,"[",function(){tr.unbindFromRedraw("_zoomOut")},"keyup"),at(jr=this.keycharm).call(jr,"]",function(){tr.unbindFromRedraw("_zoomIn")},"keyup"),at(Br=this.keycharm).call(Br,"pageup",function(){tr.unbindFromRedraw("_zoomIn")},"keyup"),at(gr=this.keycharm).call(gr,"pagedown",function(){tr.unbindFromRedraw("_zoomOut")},"keyup")))}}]),p}();function k0(p,a){var s=Xp!==void 0&&$p(p)||p["@@iterator"];if(!s){if(Mn(p)||(s=function(k,V){var G;if(k){if(typeof k=="string")return wd(k,V);var X=_i(G=Object.prototype.toString.call(k)).call(G,8,-1);if(X==="Object"&&k.constructor&&(X=k.constructor.name),X==="Map"||X==="Set")return Dc(k);if(X==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(X))return wd(k,V)}}(p))||a&&p&&typeof p.length=="number"){s&&(p=s);var u=0,f=function(){};return{s:f,n:function(){return u>=p.length?{done:!0}:{done:!1,value:p[u++]}},e:function(k){throw k},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m,b=!0,P=!1;return{s:function(){s=s.call(p)},n:function(){var k=s.next();return b=k.done,k},e:function(k){P=!0,m=k},f:function(){try{b||s.return==null||s.return()}finally{if(P)throw m}}}}function wd(p,a){(a==null||a>p.length)&&(a=p.length);for(var s=0,u=new Array(a);s50&&(this.drag.pointer=this.getPointer(a.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=new Date().valueOf())}},{key:"onTap",value:function(a){var s=this.getPointer(a.center),u=this.selectionHandler.options.multiselect&&(a.changedPointers[0].ctrlKey||a.changedPointers[0].metaKey);this.checkSelectionChanges(s,u),this.selectionHandler.commitAndEmit(s,a),this.selectionHandler.generateClickEvent("click",a,s)}},{key:"onDoubleTap",value:function(a){var s=this.getPointer(a.center);this.selectionHandler.generateClickEvent("doubleClick",a,s)}},{key:"onHold",value:function(a){var s=this.getPointer(a.center),u=this.selectionHandler.options.multiselect;this.checkSelectionChanges(s,u),this.selectionHandler.commitAndEmit(s,a),this.selectionHandler.generateClickEvent("click",a,s),this.selectionHandler.generateClickEvent("hold",a,s)}},{key:"onRelease",value:function(a){if(new Date().valueOf()-this.touchTime>10){var s=this.getPointer(a.center);this.selectionHandler.generateClickEvent("release",a,s),this.touchTime=new Date().valueOf()}}},{key:"onContext",value:function(a){var s=this.getPointer({x:a.clientX,y:a.clientY});this.selectionHandler.generateClickEvent("oncontext",a,s)}},{key:"checkSelectionChanges",value:function(a){(arguments.length>1&&arguments[1]!==void 0&&arguments[1])===!0?this.selectionHandler.selectAdditionalOnPoint(a):this.selectionHandler.selectOnPoint(a)}},{key:"_determineDifference",value:function(a,s){var u=function(f,m){for(var b=[],P=0;P=m.minX&&G.x<=m.maxX&&G.y>=m.minY&&G.y<=m.maxY});Fn(b).call(b,function(V){return s.selectionHandler.selectObject(s.body.nodes[V])});var P=this.getPointer(a.center);this.selectionHandler.commitAndEmit(P,a),this.selectionHandler.generateClickEvent("dragEnd",a,this.getPointer(a.center),void 0,!0),this.body.emitter.emit("_requestRedraw")}else{var k=this.drag.selection;k&&k.length?(Fn(k).call(k,function(V){V.node.options.fixed.x=V.xFixed,V.node.options.fixed.y=V.yFixed}),this.selectionHandler.generateClickEvent("dragEnd",a,this.getPointer(a.center)),this.body.emitter.emit("startSimulation")):(this.selectionHandler.generateClickEvent("dragEnd",a,this.getPointer(a.center),void 0,!0),this.body.emitter.emit("_requestRedraw"))}}},{key:"onPinch",value:function(a){var s=this.getPointer(a.center);this.drag.pinched=!0,this.pinch.scale===void 0&&(this.pinch.scale=1);var u=this.pinch.scale*a.scale;this.zoom(u,s)}},{key:"zoom",value:function(a,s){if(this.options.zoomView===!0){var u=this.body.view.scale;a<1e-5&&(a=1e-5),a>10&&(a=10);var f=void 0;this.drag!==void 0&&this.drag.dragging===!0&&(f=this.canvas.DOMtoCanvas(this.drag.pointer));var m=this.body.view.translation,b=a/u,P=(1-b)*s.x+m.x*b,k=(1-b)*s.y+m.y*b;if(this.body.view.scale=a,this.body.view.translation={x:P,y:k},f!=null){var V=this.canvas.canvasToDOM(f);this.drag.pointer.x=V.x,this.drag.pointer.y=V.y}this.body.emitter.emit("_requestRedraw"),u0&&(this.popupObj=G[X[X.length-1]],b=!0)}if(this.popupObj===void 0&&b===!1){for(var ve,ge=this.body.edgeIndices,xe=this.body.edges,Re=[],Ue=0;Ue0&&(this.popupObj=xe[Re[Re.length-1]],P="edge")}this.popupObj!==void 0?this.popupObj.id!==m&&(this.popup===void 0&&(this.popup=new rT(this.canvas.frame)),this.popup.popupTargetType=P,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(a.x+3,a.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit("showPopup",this.popupObj.id)):this.popup!==void 0&&(this.popup.hide(),this.body.emitter.emit("hidePopup"))}},{key:"_checkHidePopup",value:function(a){var s=this.selectionHandler._pointerToPositionObject(a),u=!1;if(this.popup.popupTargetType==="node"){if(this.body.nodes[this.popup.popupTargetId]!==void 0&&(u=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(s))===!0){var f=this.selectionHandler.getNodeAt(a);u=f!==void 0&&f.id===this.popup.popupTargetId}}else this.selectionHandler.getNodeAt(a)===void 0&&this.body.edges[this.popup.popupTargetId]!==void 0&&(u=this.body.edges[this.popup.popupTargetId].isOverlappingWith(s));u===!1&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit("hidePopup"))}}]),p}();e4("Set",function(p){return function(){return p(this,arguments.length?arguments[0]:void 0)}},a4);var ch=n(St.Set),mC=N,D4=Xu,i5=Qf.getWeakData,L4=qc,vC=xa,gC=Rt,j0=Cr,yC=E2,dI=Yo,Vi=el.set,fI=el.getterFor,bC=Fc.find,N4=Fc.findIndex,F4=mC([].splice),a5=0,ph=function(p){return p.frozen||(p.frozen=new s5)},s5=function(){this.entries=[]},hl=function(p,a){return bC(p.entries,function(s){return s[0]===a})};s5.prototype={get:function(p){var a=hl(this,p);if(a)return a[1]},has:function(p){return!!hl(this,p)},set:function(p,a){var s=hl(this,p);s?s[1]=a:this.entries.push([p,a])},delete:function(p){var a=N4(this.entries,function(s){return s[0]===p});return~a&&F4(this.entries,a,1),!!~a}};var T0,B4={getConstructor:function(p,a,s,u){var f=p(function(k,V){L4(k,m),Vi(k,{type:a,id:a5++,frozen:void 0}),gC(V)||yC(V,k[u],{that:k,AS_ENTRIES:s})}),m=f.prototype,b=fI(a),P=function(k,V,G){var X=b(k),se=i5(vC(V),!0);return se===!0?ph(X).set(V,G):se[X.id]=G,k};return D4(m,{delete:function(k){var V=b(this);if(!j0(k))return!1;var G=i5(k);return G===!0?ph(V).delete(k):G&&dI(G,V.id)&&delete G[V.id]},has:function(k){var V=b(this);if(!j0(k))return!1;var G=i5(k);return G===!0?ph(V).has(k):G&&dI(G,V.id)}}),D4(m,s?{get:function(k){var V=b(this);if(j0(k)){var G=i5(k);return G===!0?ph(V).get(k):G?G[V.id]:void 0}},set:function(k,V){return P(this,k,V)}}:{add:function(k){return P(this,k,!0)}}),f}},z4=W6,yg=i,dh=N,l5=Xu,wC=Qf,hI=e4,mI=B4,bg=Cr,wg=el.enforce,vI=c,fh=mf,g=Object,S=Array.isArray,E=g.isExtensible,j=g.isFrozen,W=g.isSealed,U=g.freeze,ie=g.seal,oe={},ue={},we=!yg.ActiveXObject&&"ActiveXObject"in yg,Ee=function(p){return function(){return p(this,arguments.length?arguments[0]:void 0)}},je=hI("WeakMap",Ee,mI),Ze=je.prototype,tt=dh(Ze.set);if(fh)if(we){T0=mI.getConstructor(Ee,"WeakMap",!0),wC.enable();var Et=dh(Ze.delete),_t=dh(Ze.has),$t=dh(Ze.get);l5(Ze,{delete:function(p){if(bg(p)&&!E(p)){var a=wg(this);return a.frozen||(a.frozen=new T0),Et(this,p)||a.frozen.delete(p)}return Et(this,p)},has:function(p){if(bg(p)&&!E(p)){var a=wg(this);return a.frozen||(a.frozen=new T0),_t(this,p)||a.frozen.has(p)}return _t(this,p)},get:function(p){if(bg(p)&&!E(p)){var a=wg(this);return a.frozen||(a.frozen=new T0),_t(this,p)?$t(this,p):a.frozen.get(p)}return $t(this,p)},set:function(p,a){if(bg(p)&&!E(p)){var s=wg(this);s.frozen||(s.frozen=new T0),_t(this,p)?tt(this,p,a):s.frozen.set(p,a)}else tt(this,p,a);return this}})}else z4&&vI(function(){var p=U([]);return tt(new je,p,1),!j(p)})&&l5(Ze,{set:function(p,a){var s;return S(p)&&(j(p)?s=oe:W(p)&&(s=ue)),tt(this,p,a),s===oe&&U(p),s===ue&&ie(p),this}});var dr,Wt,hn,gn,$n,Zo=n(St.WeakMap);function mn(p,a,s,u){if(s==="a"&&!u)throw new TypeError("Private accessor was defined without a getter");if(typeof a=="function"?p!==a||!u:!a.has(p))throw new TypeError("Cannot read private member from an object whose class did not declare it");return s==="m"?u:s==="a"?u.call(p):u?u.value:a.get(p)}function da(p,a,s,u,f){if(u==="m")throw new TypeError("Private method is not writable");if(u==="a"&&!f)throw new TypeError("Private accessor was defined without a setter");if(typeof a=="function"?p!==a||!f:!a.has(p))throw new TypeError("Cannot write private member to an object whose class did not declare it");return u==="a"?f.call(p,s):f?f.value=s:a.set(p,s),s}function La(p,a){var s=Xp!==void 0&&$p(p)||p["@@iterator"];if(!s){if(Mn(p)||(s=function(k,V){var G;if(k){if(typeof k=="string")return ep(k,V);var X=_i(G=Object.prototype.toString.call(k)).call(G,8,-1);if(X==="Object"&&k.constructor&&(X=k.constructor.name),X==="Map"||X==="Set")return Dc(k);if(X==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(X))return ep(k,V)}}(p))||a&&p&&typeof p.length=="number"){s&&(p=s);var u=0,f=function(){};return{s:f,n:function(){return u>=p.length?{done:!0}:{done:!1,value:p[u++]}},e:function(k){throw k},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m,b=!0,P=!1;return{s:function(){s=s.call(p)},n:function(){var k=s.next();return b=k.done,k},e:function(k){P=!0,m=k},f:function(){try{b||s.return==null||s.return()}finally{if(P)throw m}}}}function ep(p,a){(a==null||a>p.length)&&(a=p.length);for(var s=0,u=new Array(a);s0&&arguments[0]!==void 0?arguments[0]:function(){};gt(this,p),hn.set(this,new hh),gn.set(this,new hh),$n.set(this,void 0),da(this,$n,a,"f")}return yt(p,[{key:"sizeNodes",get:function(){return mn(this,hn,"f").size}},{key:"sizeEdges",get:function(){return mn(this,gn,"f").size}},{key:"getNodes",value:function(){return mn(this,hn,"f").getSelection()}},{key:"getEdges",value:function(){return mn(this,gn,"f").getSelection()}},{key:"addNodes",value:function(){var a;(a=mn(this,hn,"f")).add.apply(a,arguments)}},{key:"addEdges",value:function(){var a;(a=mn(this,gn,"f")).add.apply(a,arguments)}},{key:"deleteNodes",value:function(a){mn(this,hn,"f").delete(a)}},{key:"deleteEdges",value:function(a){mn(this,gn,"f").delete(a)}},{key:"clear",value:function(){mn(this,hn,"f").clear(),mn(this,gn,"f").clear()}},{key:"commit",value:function(){for(var a,s,u={nodes:mn(this,hn,"f").commit(),edges:mn(this,gn,"f").commit()},f=arguments.length,m=new Array(f),b=0;b=p.length?{done:!0}:{done:!1,value:p[u++]}},e:function(k){throw k},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m,b=!0,P=!1;return{s:function(){s=s.call(p)},n:function(){var k=s.next();return b=k.done,k},e:function(k){P=!0,m=k},f:function(){try{b||s.return==null||s.return()}finally{if(P)throw m}}}}function xg(p,a){(a==null||a>p.length)&&(a=p.length);for(var s=0,u=new Array(a);s4&&arguments[4]!==void 0&&arguments[4],b=this._initBaseEvent(s,u);if(m===!0)b.nodes=[],b.edges=[];else{var P=this.getSelection();b.nodes=P.nodes,b.edges=P.edges}f!==void 0&&(b.previousSelection=f),a=="click"&&(b.items=this.getClickedItems(u)),s.controlEdge!==void 0&&(b.controlEdge=s.controlEdge),this.body.emitter.emit(a,b)}},{key:"selectObject",value:function(a){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.selectConnectedEdges;if(a!==void 0){if(a instanceof Ra){var u;s===!0&&(u=this._selectionAccumulator).addEdges.apply(u,ql(a.edges)),this._selectionAccumulator.addNodes(a)}else this._selectionAccumulator.addEdges(a);return!0}return!1}},{key:"deselectObject",value:function(a){a.isSelected()===!0&&(a.selected=!1,this._removeFromSelection(a))}},{key:"_getAllNodesOverlappingWith",value:function(a){for(var s=[],u=this.body.nodes,f=0;f1&&arguments[1]!==void 0)||arguments[1],u=this._pointerToPositionObject(a),f=this._getAllNodesOverlappingWith(u);return f.length>0?s===!0?this.body.nodes[f[f.length-1]]:f[f.length-1]:void 0}},{key:"_getEdgesOverlappingWith",value:function(a,s){for(var u=this.body.edges,f=0;f1&&arguments[1]!==void 0)||arguments[1],u=this.canvas.DOMtoCanvas(a),f=10,m=null,b=this.body.edges,P=0;P0&&(this.generateClickEvent("deselectEdge",s,a,m),u=!0),f.nodes.deleted.length>0&&(this.generateClickEvent("deselectNode",s,a,m),u=!0),f.nodes.added.length>0&&(this.generateClickEvent("selectNode",s,a),u=!0),f.edges.added.length>0&&(this.generateClickEvent("selectEdge",s,a),u=!0),u===!0&&this.generateClickEvent("select",s,a)}},{key:"getSelection",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:"getSelectedNodes",value:function(){return this._selectionAccumulator.getNodes()}},{key:"getSelectedEdges",value:function(){return this._selectionAccumulator.getEdges()}},{key:"getSelectedNodeIds",value:function(){var a;return Kp(a=this._selectionAccumulator.getNodes()).call(a,function(s){return s.id})}},{key:"getSelectedEdgeIds",value:function(){var a;return Kp(a=this._selectionAccumulator.getEdges()).call(a,function(s){return s.id})}},{key:"setSelection",value:function(a){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!a||!a.nodes&&!a.edges)throw new TypeError("Selection must be an object with nodes and/or edges properties");if((s.unselectAll||s.unselectAll===void 0)&&this.unselectAll(),a.nodes){var u,f=u5(a.nodes);try{for(f.s();!(u=f.n()).done;){var m=u.value,b=this.body.nodes[m];if(!b)throw new RangeError('Node with id "'+m+'" not found');this.selectObject(b,s.highlightEdges)}}catch(X){f.e(X)}finally{f.f()}}if(a.edges){var P,k=u5(a.edges);try{for(k.s();!(P=k.n()).done;){var V=P.value,G=this.body.edges[V];if(!G)throw new RangeError('Edge with id "'+V+'" not found');this.selectObject(G)}}catch(X){k.e(X)}finally{k.f()}}this.body.emitter.emit("_requestRedraw"),this._selectionAccumulator.commit()}},{key:"selectNodes",value:function(a){var s=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];if(!a||a.length===void 0)throw"Selection must be an array with ids";this.setSelection({nodes:a},{highlightEdges:s})}},{key:"selectEdges",value:function(a){if(!a||a.length===void 0)throw"Selection must be an array with ids";this.setSelection({edges:a})}},{key:"updateSelection",value:function(){for(var a in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,a.id)||this._selectionAccumulator.deleteNodes(a);for(var s in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,s.id)||this._selectionAccumulator.deleteEdges(s)}},{key:"getClickedItems",value:function(a){for(var s=this.canvas.DOMtoCanvas(a),u=[],f=this.body.nodeIndices,m=this.body.nodes,b=f.length-1;b>=0;b--){var P=m[f[b]].getItemsOnPoint(s);u.push.apply(u,P)}for(var k=this.body.edgeIndices,V=this.body.edges,G=k.length-1;G>=0;G--){var X=V[k[G]].getItemsOnPoint(s);u.push.apply(u,X)}return u}}]),p}(),c5=Kw,p5=Math.floor,Od=function(p,a){var s=p.length,u=p5(s/2);return s<8?gI(p,a):_g(p,Od(c5(p,0,u),a),Od(c5(p,u),a),a)},gI=function(p,a){for(var s,u,f=p.length,m=1;m0;)p[u]=p[--u];u!==m++&&(p[u]=s)}return p},_g=function(p,a,s,u){for(var f=a.length,m=s.length,b=0,P=0;b3)){if(gh)return!0;if(V$)return V$<603;var p,a,s,u,f="";for(p=65;p<76;p++){switch(a=String.fromCharCode(p),p){case 66:case 69:case 70:case 72:s=3;break;case 68:case 71:s=4;break;default:s=2}for(u=0;u<47;u++)C0.push({k:a+u,v:s})}for(C0.sort(function(m,b){return b.v-m.v}),u=0;uIo(k)?1:-1}}(p)),s=rr(f),u=0;u=0:P>k;k+=V)k in b&&(f=s(f,b[k],k,m));return f}},MY={left:U$(!1),right:U$(!0)},AY=ee(i.process)==="process",G$=MY.left;Bt({target:"Array",proto:!0,forced:!AY&&ba>79&&ba<83||!Bu("reduce")},{reduce:function(p){var a=arguments.length;return G$(this,p,a,a>1?arguments[1]:void 0)}});var RY=vo("Array").reduce,J$=ir,tu=RY,SC=Array.prototype,DY=function(p){var a=p.reduce;return p===SC||J$(SC,p)&&a===SC.reduce?tu:a},IC=n(DY);function X$(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var EC=function(){function p(){gt(this,p)}return yt(p,[{key:"abstract",value:function(){throw new Error("Can't instantiate abstract class!")}},{key:"fake_use",value:function(){}},{key:"curveType",value:function(){return this.abstract()}},{key:"getPosition",value:function(a){return this.fake_use(a),this.abstract()}},{key:"setPosition",value:function(a,s){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0;this.fake_use(a,s,u),this.abstract()}},{key:"getTreeSize",value:function(a){return this.fake_use(a),this.abstract()}},{key:"sort",value:function(a){this.fake_use(a),this.abstract()}},{key:"fix",value:function(a,s){this.fake_use(a,s),this.abstract()}},{key:"shift",value:function(a,s){this.fake_use(a,s),this.abstract()}}]),p}(),K$=function(p){xn(s,p);var a=X$(s);function s(u){var f;return gt(this,s),(f=a.call(this)).layout=u,f}return yt(s,[{key:"curveType",value:function(){return"horizontal"}},{key:"getPosition",value:function(u){return u.x}},{key:"setPosition",value:function(u,f){var m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0;m!==void 0&&this.layout.hierarchical.addToOrdering(u,m),u.x=f}},{key:"getTreeSize",value:function(u){var f=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,u);return{min:f.min_x,max:f.max_x}}},{key:"sort",value:function(u){h5(u).call(u,function(f,m){return f.x-m.x})}},{key:"fix",value:function(u,f){u.y=this.layout.options.hierarchical.levelSeparation*f,u.options.fixed.y=!0}},{key:"shift",value:function(u,f){this.layout.body.nodes[u].x+=f}}]),s}(EC),LY=function(p){xn(s,p);var a=X$(s);function s(u){var f;return gt(this,s),(f=a.call(this)).layout=u,f}return yt(s,[{key:"curveType",value:function(){return"vertical"}},{key:"getPosition",value:function(u){return u.y}},{key:"setPosition",value:function(u,f){var m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0;m!==void 0&&this.layout.hierarchical.addToOrdering(u,m),u.y=f}},{key:"getTreeSize",value:function(u){var f=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,u);return{min:f.min_y,max:f.max_y}}},{key:"sort",value:function(u){h5(u).call(u,function(f,m){return f.y-m.y})}},{key:"fix",value:function(u,f){u.x=this.layout.options.hierarchical.levelSeparation*f,u.options.fixed.x=!0}},{key:"shift",value:function(u,f){this.layout.body.nodes[u].y+=f}}]),s}(EC),Y$=Fc.every;Bt({target:"Array",proto:!0,forced:!Bu("every")},{every:function(p){return Y$(this,p,arguments.length>1?arguments[1]:void 0)}});var NY=vo("Array").every,FY=ir,BY=NY,V4=Array.prototype,PC=function(p){var a=p.every;return p===V4||FY(V4,p)&&a===V4.every?BY:a},Q$=n(PC);function kC(p,a){var s=Xp!==void 0&&$p(p)||p["@@iterator"];if(!s){if(Mn(p)||(s=function(k,V){var G;if(k){if(typeof k=="string")return eZ(k,V);var X=_i(G=Object.prototype.toString.call(k)).call(G,8,-1);if(X==="Object"&&k.constructor&&(X=k.constructor.name),X==="Map"||X==="Set")return Dc(k);if(X==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(X))return eZ(k,V)}}(p))||a&&p&&typeof p.length=="number"){s&&(p=s);var u=0,f=function(){};return{s:f,n:function(){return u>=p.length?{done:!0}:{done:!1,value:p[u++]}},e:function(k){throw k},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m,b=!0,P=!1;return{s:function(){s=s.call(p)},n:function(){var k=s.next();return b=k.done,k},e:function(k){P=!0,m=k},f:function(){try{b||s.return==null||s.return()}finally{if(P)throw m}}}}function eZ(p,a){(a==null||a>p.length)&&(a=p.length);for(var s=0,u=new Array(a);s=a[m])&&(a[m]=a[f]+1)}),a}function rZ(p,a,s,u){var f,m,b=Hu(null),P=IC(f=ql(O8(u).call(u))).call(f,function(ve,ge){return ve+1+ge.edges.length},0),k=s+"Id",V=s==="to"?1:-1,G=kC(u);try{var X,se=function(){var ve=Mo(m.value,2),ge=ve[0],xe=ve[1];if(!u.has(ge)||!p(xe))return 0;b[ge]=0;for(var Re,Ue,et=[xe],bt=0,It=function(){var fr,jr;if(!u.has(ge))return 0;var Br=b[Re.id]+V;if(Fn(fr=ts(jr=Re.edges).call(jr,function(gr){return gr.connected&&gr.to!==gr.from&&gr[s]!==Re&&u.has(gr.toId)&&u.has(gr.fromId)})).call(fr,function(gr){var tr=gr[k],Qn=b[tr];(Qn==null||a(Br,Qn))&&(b[tr]=Br,et.push(gr[s]))}),bt>P)return{v:{v:tZ(u,b)}};++bt};Re=et.pop();)if((Ue=It())!==0&&Ue)return Ue.v};for(G.s();!(m=G.n()).done;)if((X=se())!==0&&X)return X.v}catch(ve){G.e(ve)}finally{G.f()}return b}var jC=function(){function p(){gt(this,p),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return yt(p,[{key:"addRelation",value:function(a,s){this.childrenReference[a]===void 0&&(this.childrenReference[a]=[]),this.childrenReference[a].push(s),this.parentReference[s]===void 0&&(this.parentReference[s]=[]),this.parentReference[s].push(a)}},{key:"checkIfTree",value:function(){for(var a in this.parentReference)if(this.parentReference[a].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:"numTrees",value:function(){return this.treeIndex+1}},{key:"setTreeIndex",value:function(a,s){s!==void 0&&this.trees[a.id]===void 0&&(this.trees[a.id]=s,this.treeIndex=Math.max(s,this.treeIndex))}},{key:"ensureLevel",value:function(a){this.levels[a]===void 0&&(this.levels[a]=0)}},{key:"getMaxLevel",value:function(a){var s=this,u={};return function f(m){if(u[m]!==void 0)return u[m];var b=s.levels[m];if(s.childrenReference[m]){var P=s.childrenReference[m];if(P.length>0)for(var k=0;k0&&(u.levelSeparation*=-1):u.levelSeparation<0&&(u.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(s);if(f===!0)return this.body.emitter.emit("refresh"),jn(s,this.optionsBackup)}return s}},{key:"_resetRNG",value:function(a){this.initialRandomSeed=a,this._rng=m2(this.initialRandomSeed)}},{key:"adaptAllOptionsForHierarchicalLayout",value:function(a){if(this.options.hierarchical.enabled===!0){var s=this.optionsBackup.physics;a.physics===void 0||a.physics===!0?(a.physics={enabled:s.enabled===void 0||s.enabled,solver:"hierarchicalRepulsion"},s.enabled=s.enabled===void 0||s.enabled,s.solver=s.solver||"barnesHut"):Vn(a.physics)==="object"?(s.enabled=a.physics.enabled===void 0||a.physics.enabled,s.solver=a.physics.solver||"barnesHut",a.physics.solver="hierarchicalRepulsion"):a.physics!==!1&&(s.solver="barnesHut",a.physics={solver:"hierarchicalRepulsion"});var u=this.direction.curveType();if(a.edges===void 0)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},a.edges={smooth:!1};else if(a.edges.smooth===void 0)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},a.edges.smooth=!1;else if(typeof a.edges.smooth=="boolean")this.optionsBackup.edges={smooth:a.edges.smooth},a.edges.smooth={enabled:a.edges.smooth,type:u};else{var f=a.edges.smooth;f.type!==void 0&&f.type!=="dynamic"&&(u=f.type),this.optionsBackup.edges={smooth:{enabled:f.enabled===void 0||f.enabled,type:f.type===void 0?"dynamic":f.type,roundness:f.roundness===void 0?.5:f.roundness,forceDirection:f.forceDirection!==void 0&&f.forceDirection}},a.edges.smooth={enabled:f.enabled===void 0||f.enabled,type:u,roundness:f.roundness===void 0?.5:f.roundness,forceDirection:f.forceDirection!==void 0&&f.forceDirection}}this.body.emitter.emit("_forceDisableDynamicCurves",u)}return a}},{key:"positionInitially",value:function(a){if(this.options.hierarchical.enabled!==!0){this._resetRNG(this.initialRandomSeed);for(var s=a.length+50,u=0;um){for(var P=a.length;a.length>m&&f<=10;){f+=1;var k=a.length;if(f%3==0?this.body.modules.clustering.clusterBridges(b):this.body.modules.clustering.clusterOutliers(b),k==a.length&&f%3!=0)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*P)})}f>10&&console.info("The clustering didn't succeed within the amount of interations allowed, progressing with partial result."),this.body.modules.kamadaKawai.solve(a,this.body.edgeIndices,!0),this._shiftToCenter();for(var V=0;V0){var a,s,u=!1,f=!1;for(s in this.lastNodeOnLevel={},this.hierarchical=new jC,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,s)&&((a=this.body.nodes[s]).options.level!==void 0?(u=!0,this.hierarchical.levels[s]=a.options.level):f=!0);if(f===!0&&u===!0)throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");if(f===!0){var m=this.options.hierarchical.sortMethod;m==="hubsize"?this._determineLevelsByHubsize():m==="directed"?this._determineLevelsDirected():m==="custom"&&this._determineLevelsCustomCallback()}for(var b in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,b)&&this.hierarchical.ensureLevel(b);var P=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(P),this._condenseHierarchy(),this._shiftToCenter()}}},{key:"_condenseHierarchy",value:function(){var a=this,s=!1,u={},f=function(X,se){var ve=a.hierarchical.trees;for(var ge in ve)Object.prototype.hasOwnProperty.call(ve,ge)&&ve[ge]===X&&a.direction.shift(ge,se)},m=function(){for(var X=[],se=0;se0)for(var xe=0;xe1&&arguments[1]!==void 0?arguments[1]:1e9,ve=1e9,ge=1e9,xe=1e9,Re=-1e9;for(var Ue in X)if(Object.prototype.hasOwnProperty.call(X,Ue)){var et=a.body.nodes[Ue],bt=a.hierarchical.levels[et.id],It=a.direction.getPosition(et),fr=Mo(a._getSpaceAroundNode(et,X),2),jr=fr[0],Br=fr[1];ve=Math.min(jr,ve),ge=Math.min(Br,ge),bt<=se&&(xe=Math.min(It,xe),Re=Math.max(It,Re))}return[xe,Re,ve,ge]},k=function(X,se,ve){for(var ge=a.hierarchical,xe=0;xe1)for(var et=0;et2&&arguments[2]!==void 0&&arguments[2],ge=a.direction.getPosition(X),xe=a.direction.getPosition(se),Re=Math.abs(xe-ge),Ue=a.options.hierarchical.nodeSpacing;if(Re>Ue){var et={},bt={};b(X,et),b(se,bt);var It=function(yn,oo){var Ao=a.hierarchical.getMaxLevel(yn.id),Eo=a.hierarchical.getMaxLevel(oo.id);return Math.min(Ao,Eo)}(X,se),fr=P(et,It),jr=P(bt,It),Br=fr[1],gr=jr[0],tr=jr[2];if(Math.abs(Br-gr)>Ue){var Qn=Br-gr+Ue;Qn<-tr+Ue&&(Qn=-tr+Ue),Qn<0&&(a._shiftBlock(se.id,Qn),s=!0,ve===!0&&a._centerParent(se))}}},G=function(X,se){for(var ve=se.id,ge=se.edges,xe=a.hierarchical.levels[se.id],Re=a.options.hierarchical.levelSeparation*a.options.hierarchical.levelSeparation,Ue={},et=[],bt=0;bt0?SI=Math.min($i,tc-a.options.hierarchical.nodeSpacing):$i<0&&(SI=-Math.min(-$i,Eo-a.options.hierarchical.nodeSpacing)),SI!=0&&(a._shiftBlock(se.id,SI),s=!0)})(tr),function(Qn){var yn=a.direction.getPosition(se),oo=Mo(a._getSpaceAroundNode(se),2),Ao=oo[0],Eo=oo[1],tc=Qn-yn,$i=yn;tc>0?$i=Math.min(yn+(Eo-a.options.hierarchical.nodeSpacing),Qn):tc<0&&($i=Math.max(yn-(Ao-a.options.hierarchical.nodeSpacing),Qn)),$i!==yn&&(a.direction.setPosition(se,$i),s=!0)}(tr=gr(X,ge))};this.options.hierarchical.blockShifting===!0&&(function(X){var se=a.hierarchical.getLevels();se=Yp(se).call(se);for(var ve=0;ve0&&Math.abs(se)0&&(V=this.direction.getPosition(f[b-1])+k),this.direction.setPosition(P,V,s),this._validatePositionAndContinue(P,s,V),m++}}}}},{key:"_placeBranchNodes",value:function(a,s){var u,f=this.hierarchical.childrenReference[a];if(f!==void 0){for(var m=[],b=0;bs&&this.positionedNodes[k.id]===void 0))return;var G=this.options.hierarchical.nodeSpacing,X=void 0;X=P===0?this.direction.getPosition(this.body.nodes[a]):this.direction.getPosition(m[P-1])+G,this.direction.setPosition(k,X,V),this._validatePositionAndContinue(k,V,X)}var se=this._getCenterPosition(m);this.direction.setPosition(this.body.nodes[a],se,s)}}},{key:"_validatePositionAndContinue",value:function(a,s,u){if(this.hierarchical.isTree){if(this.lastNodeOnLevel[s]!==void 0){var f=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[s]]);if(u-fm},"from",f)}(u),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:"_generateMap",value:function(){var a=this;this._crawlNetwork(function(s,u){a.hierarchical.levels[u.id]>a.hierarchical.levels[s.id]&&a.hierarchical.addRelation(s.id,u.id)}),this.hierarchical.checkIfTree()}},{key:"_crawlNetwork",value:function(){var a=this,s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(){},u=arguments.length>1?arguments[1]:void 0,f={},m=function G(X,se){if(f[X.id]===void 0){var ve;a.hierarchical.setTreeIndex(X,se),f[X.id]=!0;for(var ge=a._getActiveEdges(X),xe=0;xe=p.length?{done:!0}:{done:!1,value:p[u++]}},e:function(k){throw k},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m,b=!0,P=!1;return{s:function(){s=s.call(p)},n:function(){var k=s.next();return b=k.done,k},e:function(k){P=!0,m=k},f:function(){try{b||s.return==null||s.return()}finally{if(P)throw m}}}}function m5(p,a){(a==null||a>p.length)&&(a=p.length);for(var s=0,u=new Array(a);s0&&this.options.deleteNode!==!1||u===0&&this.options.deleteEdge!==!1)&&(P===!0&&this._createSeperator(4),this._createDeleteButton(b)),this._bindElementEvents(this.closeDiv,at(a=this.toggleEditMode).call(a,this)),this._temporaryBindEvent("select",at(s=this.showManipulatorToolbar).call(s,this))}this.body.emitter.emit("_redraw")}},{key:"addNodeMode",value:function(){var a;if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addNode",this.guiEnabled===!0){var s,u=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(u),this._createSeperator(),this._createDescription(u.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,at(s=this.toggleEditMode).call(s,this))}this._temporaryBindEvent("click",at(a=this._performAddNode).call(a,this))}},{key:"editNode",value:function(){var a=this;this.editMode!==!0&&this.enableEditMode(),this._clean();var s=this.selectionHandler.getSelectedNodes()[0];if(s!==void 0){if(this.inMode="editNode",typeof this.options.editNode!="function")throw new Error("No function has been configured to handle the editing of nodes.");if(s.isCluster!==!0){var u=jn({},s.options,!1);if(u.x=s.x,u.y=s.y,this.options.editNode.length!==2)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(u,function(f){f!=null&&a.inMode==="editNode"&&a.body.data.nodes.getDataSet().update(f),a.showManipulatorToolbar()})}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){var a,s,u,f,m;if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addEdge",this.guiEnabled===!0){var b,P=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(P),this._createSeperator(),this._createDescription(P.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,at(b=this.toggleEditMode).call(b,this))}this._temporaryBindUI("onTouch",at(a=this._handleConnect).call(a,this)),this._temporaryBindUI("onDragEnd",at(s=this._finishConnect).call(s,this)),this._temporaryBindUI("onDrag",at(u=this._dragControlNode).call(u,this)),this._temporaryBindUI("onRelease",at(f=this._finishConnect).call(f,this)),this._temporaryBindUI("onDragStart",at(m=this._dragStartEdge).call(m,this)),this._temporaryBindUI("onHold",function(){})}},{key:"editEdgeMode",value:function(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="editEdge",Vn(this.options.editEdge)!=="object"||typeof this.options.editEdge.editWithoutDrag!="function"||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],this.edgeBeingEditedId===void 0)){if(this.guiEnabled===!0){var a,s=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(s),this._createSeperator(),this._createDescription(s.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,at(a=this.toggleEditMode).call(a,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],this.edgeBeingEditedId!==void 0){var u,f,m,b,P=this.body.edges[this.edgeBeingEditedId],k=this._getNewTargetNode(P.from.x,P.from.y),V=this._getNewTargetNode(P.to.x,P.to.y);this.temporaryIds.nodes.push(k.id),this.temporaryIds.nodes.push(V.id),this.body.nodes[k.id]=k,this.body.nodeIndices.push(k.id),this.body.nodes[V.id]=V,this.body.nodeIndices.push(V.id),this._temporaryBindUI("onTouch",at(u=this._controlNodeTouch).call(u,this)),this._temporaryBindUI("onTap",function(){}),this._temporaryBindUI("onHold",function(){}),this._temporaryBindUI("onDragStart",at(f=this._controlNodeDragStart).call(f,this)),this._temporaryBindUI("onDrag",at(m=this._controlNodeDrag).call(m,this)),this._temporaryBindUI("onDragEnd",at(b=this._controlNodeDragEnd).call(b,this)),this._temporaryBindUI("onMouseMove",function(){}),this._temporaryBindEvent("beforeDrawing",function(X){var se=P.edgeType.findBorderPositions(X);k.selected===!1&&(k.x=se.from.x,k.y=se.from.y),V.selected===!1&&(V.x=se.to.x,V.y=se.to.y)}),this.body.emitter.emit("_redraw")}else this.showManipulatorToolbar()}else{var G=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(G.from.id,G.to.id)}}},{key:"deleteSelected",value:function(){var a=this;this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="delete";var s=this.selectionHandler.getSelectedNodeIds(),u=this.selectionHandler.getSelectedEdgeIds(),f=void 0;if(s.length>0){for(var m=0;m0&&typeof this.options.deleteEdge=="function"&&(f=this.options.deleteEdge);if(typeof f=="function"){var b={nodes:s,edges:u};if(f.length!==2)throw new Error("The function for delete does not support two arguments (data, callback)");f(b,function(P){P!=null&&a.inMode==="delete"?(a.body.data.edges.getDataSet().remove(P.edges),a.body.data.nodes.getDataSet().remove(P.nodes),a.body.emitter.emit("startSimulation"),a.showManipulatorToolbar()):(a.body.emitter.emit("startSimulation"),a.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().remove(u),this.body.data.nodes.getDataSet().remove(s),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}},{key:"_setup",value:function(){this.options.enabled===!0?(this.guiEnabled=!0,this._createWrappers(),this.editMode===!1?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:"_createWrappers",value:function(){var a,s;this.manipulationDiv===void 0&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",this.editMode===!0?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),this.editModeDiv===void 0&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",this.editMode===!0?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),this.closeDiv===void 0&&(this.closeDiv=document.createElement("button"),this.closeDiv.className="vis-close",this.closeDiv.setAttribute("aria-label",(a=(s=this.options.locales[this.options.locale])===null||s===void 0?void 0:s.close)!==null&&a!==void 0?a:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:"_getNewTargetNode",value:function(a,s){var u=jn({},this.options.controlNodeStyle);u.id="targetNode"+P0(),u.hidden=!1,u.physics=!1,u.x=a,u.y=s;var f=this.body.functions.createNode(u);return f.shape.boundingBox={left:a,right:a,top:s,bottom:s},f}},{key:"_createEditButton",value:function(){var a;this._clean(),this.manipulationDOM={},Gu(this.editModeDiv);var s=this.options.locales[this.options.locale],u=this._createButton("editMode","vis-edit vis-edit-mode",s.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(u),this._bindElementEvents(u,at(a=this.toggleEditMode).call(a,this))}},{key:"_clean",value:function(){this.inMode=!1,this.guiEnabled===!0&&(Gu(this.editModeDiv),Gu(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}},{key:"_cleanupDOMEventListeners",value:function(){var a,s,u=nZ(Wc(a=this._domEventListenerCleanupQueue).call(a,0));try{for(u.s();!(s=u.n()).done;)(0,s.value)()}catch(f){u.e(f)}finally{u.f()}}},{key:"_removeManipulationDOM",value:function(){this._clean(),Gu(this.manipulationDiv),Gu(this.editModeDiv),Gu(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:"_createSeperator",value:function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+a]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+a].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+a])}},{key:"_createAddNodeButton",value:function(a){var s,u=this._createButton("addNode","vis-add",a.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(u),this._bindElementEvents(u,at(s=this.addNodeMode).call(s,this))}},{key:"_createAddEdgeButton",value:function(a){var s,u=this._createButton("addEdge","vis-connect",a.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(u),this._bindElementEvents(u,at(s=this.addEdgeMode).call(s,this))}},{key:"_createEditNodeButton",value:function(a){var s,u=this._createButton("editNode","vis-edit",a.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(u),this._bindElementEvents(u,at(s=this.editNode).call(s,this))}},{key:"_createEditEdgeButton",value:function(a){var s,u=this._createButton("editEdge","vis-edit",a.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(u),this._bindElementEvents(u,at(s=this.editEdgeMode).call(s,this))}},{key:"_createDeleteButton",value:function(a){var s,u;u=this.options.rtl?"vis-delete-rtl":"vis-delete";var f=this._createButton("delete",u,a.del||this.options.locales.en.del);this.manipulationDiv.appendChild(f),this._bindElementEvents(f,at(s=this.deleteSelected).call(s,this))}},{key:"_createBackButton",value:function(a){var s,u=this._createButton("back","vis-back",a.back||this.options.locales.en.back);this.manipulationDiv.appendChild(u),this._bindElementEvents(u,at(s=this.showManipulatorToolbar).call(s,this))}},{key:"_createButton",value:function(a,s,u){var f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"vis-label";return this.manipulationDOM[a+"Div"]=document.createElement("button"),this.manipulationDOM[a+"Div"].className="vis-button "+s,this.manipulationDOM[a+"Label"]=document.createElement("div"),this.manipulationDOM[a+"Label"].className=f,this.manipulationDOM[a+"Label"].innerText=u,this.manipulationDOM[a+"Div"].appendChild(this.manipulationDOM[a+"Label"]),this.manipulationDOM[a+"Div"]}},{key:"_createDescription",value:function(a){this.manipulationDOM.descriptionLabel=document.createElement("div"),this.manipulationDOM.descriptionLabel.className="vis-none",this.manipulationDOM.descriptionLabel.innerText=a,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:"_temporaryBindEvent",value:function(a,s){this.temporaryEventFunctions.push({event:a,boundFunction:s}),this.body.emitter.on(a,s)}},{key:"_temporaryBindUI",value:function(a,s){if(this.body.eventListeners[a]===void 0)throw new Error("This UI function does not exist. Typo? You tried: "+a+" possible are: "+$m(no(this.body.eventListeners)));this.temporaryUIFunctions[a]=this.body.eventListeners[a],this.body.eventListeners[a]=s}},{key:"_unbindTemporaryUIs",value:function(){for(var a in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,a)&&(this.body.eventListeners[a]=this.temporaryUIFunctions[a],delete this.temporaryUIFunctions[a]);this.temporaryUIFunctions={}}},{key:"_unbindTemporaryEvents",value:function(){for(var a=0;a=0;P--)if(m[P]!==this.selectedControlNode.id){b=this.body.nodes[m[P]];break}if(b!==void 0&&this.selectedControlNode!==void 0)if(b.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var k=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===k.id?this._performEditEdge(b.id,f.to.id):this._performEditEdge(f.from.id,b.id)}else f.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}}},{key:"_handleConnect",value:function(a){if(new Date().valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(a.center),this.lastTouch.translation=Cn({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var s=this.lastTouch,u=this.selectionHandler.getNodeAt(s);if(u!==void 0)if(u.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var f=this._getNewTargetNode(u.x,u.y);this.body.nodes[f.id]=f,this.body.nodeIndices.push(f.id);var m=this.body.functions.createEdge({id:"connectionEdge"+P0(),from:u.id,to:f.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[m.id]=m,this.body.edgeIndices.push(m.id),this.temporaryIds.nodes.push(f.id),this.temporaryIds.edges.push(m.id)}this.touchTime=new Date().valueOf()}}},{key:"_dragControlNode",value:function(a){var s=this.body.functions.getPointer(a.center),u=this.selectionHandler._pointerToPositionObject(s),f=void 0;this.temporaryIds.edges[0]!==void 0&&(f=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var m=this.selectionHandler._getAllNodesOverlappingWith(u),b=void 0,P=m.length-1;P>=0;P--){var k;if(ln(k=this.temporaryIds.nodes).call(k,m[P])===-1){b=this.body.nodes[m[P]];break}}if(a.controlEdge={from:f,to:b?b.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragging",a,s),this.temporaryIds.nodes[0]!==void 0){var V=this.body.nodes[this.temporaryIds.nodes[0]];V.x=this.canvas._XconvertDOMtoCanvas(s.x),V.y=this.canvas._YconvertDOMtoCanvas(s.y),this.body.emitter.emit("_redraw")}else this.interactionHandler.onDrag(a)}},{key:"_finishConnect",value:function(a){var s=this.body.functions.getPointer(a.center),u=this.selectionHandler._pointerToPositionObject(s),f=void 0;this.temporaryIds.edges[0]!==void 0&&(f=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var m=this.selectionHandler._getAllNodesOverlappingWith(u),b=void 0,P=m.length-1;P>=0;P--){var k;if(ln(k=this.temporaryIds.nodes).call(k,m[P])===-1){b=this.body.nodes[m[P]];break}}this._cleanupTemporaryNodesAndEdges(),b!==void 0&&(b.isCluster===!0?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):this.body.nodes[f]!==void 0&&this.body.nodes[b.id]!==void 0&&this._performAddEdge(f,b.id)),a.controlEdge={from:f,to:b?b.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragEnd",a,s),this.body.emitter.emit("_redraw")}},{key:"_dragStartEdge",value:function(a){var s=this.lastTouch;this.selectionHandler.generateClickEvent("dragStart",a,s,void 0,!0)}},{key:"_performAddNode",value:function(a){var s=this,u={id:P0(),x:a.pointer.canvas.x,y:a.pointer.canvas.y,label:"new"};if(typeof this.options.addNode=="function"){if(this.options.addNode.length!==2)throw this.showManipulatorToolbar(),new Error("The function for add does not support two arguments (data,callback)");this.options.addNode(u,function(f){f!=null&&s.inMode==="addNode"&&s.body.data.nodes.getDataSet().add(f),s.showManipulatorToolbar()})}else this.body.data.nodes.getDataSet().add(u),this.showManipulatorToolbar()}},{key:"_performAddEdge",value:function(a,s){var u=this,f={from:a,to:s};if(typeof this.options.addEdge=="function"){if(this.options.addEdge.length!==2)throw new Error("The function for connect does not support two arguments (data,callback)");this.options.addEdge(f,function(m){m!=null&&u.inMode==="addEdge"&&(u.body.data.edges.getDataSet().add(m),u.selectionHandler.unselectAll(),u.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().add(f),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:"_performEditEdge",value:function(a,s){var u=this,f={id:this.edgeBeingEditedId,from:a,to:s,label:this.body.data.edges.get(this.edgeBeingEditedId).label},m=this.options.editEdge;if(Vn(m)==="object"&&(m=m.editWithoutDrag),typeof m=="function"){if(m.length!==2)throw new Error("The function for edit does not support two arguments (data, callback)");m(f,function(b){b==null||u.inMode!=="editEdge"?(u.body.edges[f.id].updateEdgeType(),u.body.emitter.emit("_redraw"),u.showManipulatorToolbar()):(u.body.data.edges.getDataSet().update(b),u.selectionHandler.unselectAll(),u.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().update(f),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),p}(),ft="string",lt="boolean",Fe="number",Ig="array",Yt="object",OI=["arrow","bar","box","circle","crow","curve","diamond","image","inv_curve","inv_triangle","triangle","vee"],xI={borderWidth:{number:Fe},borderWidthSelected:{number:Fe,undefined:"undefined"},brokenImage:{string:ft,undefined:"undefined"},chosen:{label:{boolean:lt,function:"function"},node:{boolean:lt,function:"function"},__type__:{object:Yt,boolean:lt}},color:{border:{string:ft},background:{string:ft},highlight:{border:{string:ft},background:{string:ft},__type__:{object:Yt,string:ft}},hover:{border:{string:ft},background:{string:ft},__type__:{object:Yt,string:ft}},__type__:{object:Yt,string:ft}},opacity:{number:Fe,undefined:"undefined"},fixed:{x:{boolean:lt},y:{boolean:lt},__type__:{object:Yt,boolean:lt}},font:{align:{string:ft},color:{string:ft},size:{number:Fe},face:{string:ft},background:{string:ft},strokeWidth:{number:Fe},strokeColor:{string:ft},vadjust:{number:Fe},multi:{boolean:lt,string:ft},bold:{color:{string:ft},size:{number:Fe},face:{string:ft},mod:{string:ft},vadjust:{number:Fe},__type__:{object:Yt,string:ft}},boldital:{color:{string:ft},size:{number:Fe},face:{string:ft},mod:{string:ft},vadjust:{number:Fe},__type__:{object:Yt,string:ft}},ital:{color:{string:ft},size:{number:Fe},face:{string:ft},mod:{string:ft},vadjust:{number:Fe},__type__:{object:Yt,string:ft}},mono:{color:{string:ft},size:{number:Fe},face:{string:ft},mod:{string:ft},vadjust:{number:Fe},__type__:{object:Yt,string:ft}},__type__:{object:Yt,string:ft}},group:{string:ft,number:Fe,undefined:"undefined"},heightConstraint:{minimum:{number:Fe},valign:{string:ft},__type__:{object:Yt,boolean:lt,number:Fe}},hidden:{boolean:lt},icon:{face:{string:ft},code:{string:ft},size:{number:Fe},color:{string:ft},weight:{string:ft,number:Fe},__type__:{object:Yt}},id:{string:ft,number:Fe},image:{selected:{string:ft,undefined:"undefined"},unselected:{string:ft,undefined:"undefined"},__type__:{object:Yt,string:ft}},imagePadding:{top:{number:Fe},right:{number:Fe},bottom:{number:Fe},left:{number:Fe},__type__:{object:Yt,number:Fe}},label:{string:ft,undefined:"undefined"},labelHighlightBold:{boolean:lt},level:{number:Fe,undefined:"undefined"},margin:{top:{number:Fe},right:{number:Fe},bottom:{number:Fe},left:{number:Fe},__type__:{object:Yt,number:Fe}},mass:{number:Fe},physics:{boolean:lt},scaling:{min:{number:Fe},max:{number:Fe},label:{enabled:{boolean:lt},min:{number:Fe},max:{number:Fe},maxVisible:{number:Fe},drawThreshold:{number:Fe},__type__:{object:Yt,boolean:lt}},customScalingFunction:{function:"function"},__type__:{object:Yt}},shadow:{enabled:{boolean:lt},color:{string:ft},size:{number:Fe},x:{number:Fe},y:{number:Fe},__type__:{object:Yt,boolean:lt}},shape:{string:["custom","ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon","hexagon"]},ctxRenderer:{function:"function"},shapeProperties:{borderDashes:{boolean:lt,array:Ig},borderRadius:{number:Fe},interpolation:{boolean:lt},useImageSize:{boolean:lt},useBorderWithImage:{boolean:lt},coordinateOrigin:{string:["center","top-left"]},__type__:{object:Yt}},size:{number:Fe},title:{string:ft,dom:"dom",undefined:"undefined"},value:{number:Fe,undefined:"undefined"},widthConstraint:{minimum:{number:Fe},maximum:{number:Fe},__type__:{object:Yt,boolean:lt,number:Fe}},x:{number:Fe},y:{number:Fe},__type__:{object:Yt}},TC={configure:{enabled:{boolean:lt},filter:{boolean:lt,string:ft,array:Ig,function:"function"},container:{dom:"dom"},showButton:{boolean:lt},__type__:{object:Yt,boolean:lt,string:ft,array:Ig,function:"function"}},edges:{arrows:{to:{enabled:{boolean:lt},scaleFactor:{number:Fe},type:{string:OI},imageHeight:{number:Fe},imageWidth:{number:Fe},src:{string:ft},__type__:{object:Yt,boolean:lt}},middle:{enabled:{boolean:lt},scaleFactor:{number:Fe},type:{string:OI},imageWidth:{number:Fe},imageHeight:{number:Fe},src:{string:ft},__type__:{object:Yt,boolean:lt}},from:{enabled:{boolean:lt},scaleFactor:{number:Fe},type:{string:OI},imageWidth:{number:Fe},imageHeight:{number:Fe},src:{string:ft},__type__:{object:Yt,boolean:lt}},__type__:{string:["from","to","middle"],object:Yt}},endPointOffset:{from:{number:Fe},to:{number:Fe},__type__:{object:Yt,number:Fe}},arrowStrikethrough:{boolean:lt},background:{enabled:{boolean:lt},color:{string:ft},size:{number:Fe},dashes:{boolean:lt,array:Ig},__type__:{object:Yt,boolean:lt}},chosen:{label:{boolean:lt,function:"function"},edge:{boolean:lt,function:"function"},__type__:{object:Yt,boolean:lt}},color:{color:{string:ft},highlight:{string:ft},hover:{string:ft},inherit:{string:["from","to","both"],boolean:lt},opacity:{number:Fe},__type__:{object:Yt,string:ft}},dashes:{boolean:lt,array:Ig},font:{color:{string:ft},size:{number:Fe},face:{string:ft},background:{string:ft},strokeWidth:{number:Fe},strokeColor:{string:ft},align:{string:["horizontal","top","middle","bottom"]},vadjust:{number:Fe},multi:{boolean:lt,string:ft},bold:{color:{string:ft},size:{number:Fe},face:{string:ft},mod:{string:ft},vadjust:{number:Fe},__type__:{object:Yt,string:ft}},boldital:{color:{string:ft},size:{number:Fe},face:{string:ft},mod:{string:ft},vadjust:{number:Fe},__type__:{object:Yt,string:ft}},ital:{color:{string:ft},size:{number:Fe},face:{string:ft},mod:{string:ft},vadjust:{number:Fe},__type__:{object:Yt,string:ft}},mono:{color:{string:ft},size:{number:Fe},face:{string:ft},mod:{string:ft},vadjust:{number:Fe},__type__:{object:Yt,string:ft}},__type__:{object:Yt,string:ft}},hidden:{boolean:lt},hoverWidth:{function:"function",number:Fe},label:{string:ft,undefined:"undefined"},labelHighlightBold:{boolean:lt},length:{number:Fe,undefined:"undefined"},physics:{boolean:lt},scaling:{min:{number:Fe},max:{number:Fe},label:{enabled:{boolean:lt},min:{number:Fe},max:{number:Fe},maxVisible:{number:Fe},drawThreshold:{number:Fe},__type__:{object:Yt,boolean:lt}},customScalingFunction:{function:"function"},__type__:{object:Yt}},selectionWidth:{function:"function",number:Fe},selfReferenceSize:{number:Fe},selfReference:{size:{number:Fe},angle:{number:Fe},renderBehindTheNode:{boolean:lt},__type__:{object:Yt}},shadow:{enabled:{boolean:lt},color:{string:ft},size:{number:Fe},x:{number:Fe},y:{number:Fe},__type__:{object:Yt,boolean:lt}},smooth:{enabled:{boolean:lt},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:Fe},forceDirection:{string:["horizontal","vertical","none"],boolean:lt},__type__:{object:Yt,boolean:lt}},title:{string:ft,undefined:"undefined"},width:{number:Fe},widthConstraint:{maximum:{number:Fe},__type__:{object:Yt,boolean:lt,number:Fe}},value:{number:Fe,undefined:"undefined"},__type__:{object:Yt}},groups:{useDefaultGroups:{boolean:lt},__any__:xI,__type__:{object:Yt}},interaction:{dragNodes:{boolean:lt},dragView:{boolean:lt},hideEdgesOnDrag:{boolean:lt},hideEdgesOnZoom:{boolean:lt},hideNodesOnDrag:{boolean:lt},hover:{boolean:lt},keyboard:{enabled:{boolean:lt},speed:{x:{number:Fe},y:{number:Fe},zoom:{number:Fe},__type__:{object:Yt}},bindToWindow:{boolean:lt},autoFocus:{boolean:lt},__type__:{object:Yt,boolean:lt}},multiselect:{boolean:lt},navigationButtons:{boolean:lt},selectable:{boolean:lt},selectConnectedEdges:{boolean:lt},hoverConnectedEdges:{boolean:lt},tooltipDelay:{number:Fe},zoomView:{boolean:lt},zoomSpeed:{number:Fe},__type__:{object:Yt}},layout:{randomSeed:{undefined:"undefined",number:Fe,string:ft},improvedLayout:{boolean:lt},clusterThreshold:{number:Fe},hierarchical:{enabled:{boolean:lt},levelSeparation:{number:Fe},nodeSpacing:{number:Fe},treeSpacing:{number:Fe},blockShifting:{boolean:lt},edgeMinimization:{boolean:lt},parentCentralization:{boolean:lt},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},shakeTowards:{string:["leaves","roots"]},__type__:{object:Yt,boolean:lt}},__type__:{object:Yt}},manipulation:{enabled:{boolean:lt},initiallyActive:{boolean:lt},addNode:{boolean:lt,function:"function"},addEdge:{boolean:lt,function:"function"},editNode:{function:"function"},editEdge:{editWithoutDrag:{function:"function"},__type__:{object:Yt,boolean:lt,function:"function"}},deleteNode:{boolean:lt,function:"function"},deleteEdge:{boolean:lt,function:"function"},controlNodeStyle:xI,__type__:{object:Yt,boolean:lt}},nodes:xI,physics:{enabled:{boolean:lt},barnesHut:{theta:{number:Fe},gravitationalConstant:{number:Fe},centralGravity:{number:Fe},springLength:{number:Fe},springConstant:{number:Fe},damping:{number:Fe},avoidOverlap:{number:Fe},__type__:{object:Yt}},forceAtlas2Based:{theta:{number:Fe},gravitationalConstant:{number:Fe},centralGravity:{number:Fe},springLength:{number:Fe},springConstant:{number:Fe},damping:{number:Fe},avoidOverlap:{number:Fe},__type__:{object:Yt}},repulsion:{centralGravity:{number:Fe},springLength:{number:Fe},springConstant:{number:Fe},nodeDistance:{number:Fe},damping:{number:Fe},__type__:{object:Yt}},hierarchicalRepulsion:{centralGravity:{number:Fe},springLength:{number:Fe},springConstant:{number:Fe},nodeDistance:{number:Fe},damping:{number:Fe},avoidOverlap:{number:Fe},__type__:{object:Yt}},maxVelocity:{number:Fe},minVelocity:{number:Fe},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{boolean:lt},iterations:{number:Fe},updateInterval:{number:Fe},onlyDynamicEdges:{boolean:lt},fit:{boolean:lt},__type__:{object:Yt,boolean:lt}},timestep:{number:Fe},adaptiveTimestep:{boolean:lt},wind:{x:{number:Fe},y:{number:Fe},__type__:{object:Yt}},__type__:{object:Yt,boolean:lt}},autoResize:{boolean:lt},clickToUse:{boolean:lt},locale:{string:ft},locales:{__any__:{any:"any"},__type__:{object:Yt}},height:{string:ft},width:{string:ft},__type__:{object:Yt}},_I={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown","hexagon"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"],shakeTowards:["leaves","roots"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},oZ=function(p,a,s){var u;return!(!Qp(p).call(p,"physics")||!Qp(u=_I.physics.solver).call(u,a)||s.physics.solver===a||a==="wind")},zY=Object.freeze({__proto__:null,allOptions:TC,configuratorHideOption:oZ,configureOptions:_I}),WY=function(){function p(){gt(this,p)}return yt(p,[{key:"getDistances",value:function(a,s,u){for(var f={},m=a.edges,b=0;b2&&arguments[2]!==void 0&&arguments[2],f=this.distanceSolver.getDistances(this.body,a,s);this._createL_matrix(f),this._createK_matrix(f),this._createE_matrix();for(var m=0,b=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),P=1e9,k=0,V=0,G=0,X=0,se=0;P>.01&&m1&&se<5;){se+=1,this._moveNode(k,V,G);var ge=Mo(this._getEnergy(k),3);X=ge[0],V=ge[1],G=ge[2]}}}},{key:"_getHighestEnergyNode",value:function(a){for(var s=this.body.nodeIndices,u=this.body.nodes,f=0,m=s[0],b=0,P=0,k=0;k{(function(e,t){typeof _Y=="object"&&typeof yRe<"u"?t(_Y):typeof define=="function"&&define.amd?define(["exports"],t):t((e=typeof globalThis<"u"?globalThis:e||self).vis=e.vis||{})})(_Y,function(e){function t(g,S){if(!(g instanceof S))throw new TypeError("Cannot call a class as a function")}var r=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function n(g){return g&&g.__esModule&&Object.prototype.hasOwnProperty.call(g,"default")?g.default:g}var o={exports:{}},i=function(g){return g&&g.Math===Math&&g},c=i(typeof globalThis=="object"&&globalThis)||i(typeof window=="object"&&window)||i(typeof self=="object"&&self)||i(typeof r=="object"&&r)||function(){return this}()||r||Function("return this")(),d=function(g){try{return!!g()}catch{return!0}},h=!d(function(){var g=function(){}.bind();return typeof g!="function"||g.hasOwnProperty("prototype")}),v=h,w=Function.prototype,_=w.apply,I=w.call,R=typeof Reflect=="object"&&Reflect.apply||(v?I.bind(_):function(){return I.apply(_,arguments)}),D=h,F=Function.prototype,A=F.call,N=D&&F.bind.bind(A,A),H=D?N:function(g){return function(){return A.apply(g,arguments)}},q=H,Y=q({}.toString),ee=q("".slice),ne=function(g){return ee(Y(g),8,-1)},te=ne,de=H,fe=function(g){if(te(g)==="Function")return de(g)},ye=typeof document=="object"&&document.all,Ie={all:ye,IS_HTMLDDA:ye===void 0&&ye!==void 0},he=Ie.all,be=Ie.IS_HTMLDDA?function(g){return typeof g=="function"||g===he}:function(g){return typeof g=="function"},Se={},Te=!d(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),Pe=h,Ve=Function.prototype.call,De=Pe?Ve.bind(Ve):function(){return Ve.apply(Ve,arguments)},He={},Je={}.propertyIsEnumerable,vt=Object.getOwnPropertyDescriptor,Qe=vt&&!Je.call({1:2},1);He.f=Qe?function(g){var S=vt(this,g);return!!S&&S.enumerable}:Je;var Ne,Nt,Vt=function(g,S){return{enumerable:!(1&g),configurable:!(2&g),writable:!(4&g),value:S}},Ke=d,st=ne,Tt=Object,wr=H("".split),Rt=Ke(function(){return!Tt("z").propertyIsEnumerable(0)})?function(g){return st(g)==="String"?wr(g,""):Tt(g)}:Tt,Ut=function(g){return g==null},vr=Ut,Sr=TypeError,Er=function(g){if(vr(g))throw new Sr("Can't call method on "+g);return g},po=Rt,Pn=Er,Nr=function(g){return po(Pn(g))},Wo=be,Cr=Ie.all,St=Ie.IS_HTMLDDA?function(g){return typeof g=="object"?g!==null:Wo(g)||g===Cr}:function(g){return typeof g=="object"?g!==null:Wo(g)},tn={},Ks=tn,hs=c,Pr=be,or=function(g){return Pr(g)?g:void 0},ir=function(g,S){return arguments.length<2?or(Ks[g])||or(hs[g]):Ks[g]&&Ks[g][S]||hs[g]&&hs[g][S]},Mr=H({}.isPrototypeOf),Ur=typeof navigator<"u"&&String(navigator.userAgent)||"",ms=c,Nn=Ur,Ri=ms.process,Xn=ms.Deno,ya=Ri&&Ri.versions||Xn&&Xn.version,ba=ya&&ya.v8;ba&&(Nt=(Ne=ba.split("."))[0]>0&&Ne[0]<4?1:+(Ne[0]+Ne[1])),!Nt&&Nn&&(!(Ne=Nn.match(/Edge\/(\d+)/))||Ne[1]>=74)&&(Ne=Nn.match(/Chrome\/(\d+)/))&&(Nt=+Ne[1]);var wa=Nt,v1=wa,Kd=d,yc=c.String,Za=!!Object.getOwnPropertySymbols&&!Kd(function(){var g=Symbol("symbol detection");return!yc(g)||!(Object(g)instanceof Symbol)||!Symbol.sham&&v1&&v1<41}),li=Za&&!Symbol.sham&&typeof Symbol.iterator=="symbol",Op=ir,Rl=be,Ct=Mr,Yd=Object,Qd=li?function(g){return typeof g=="symbol"}:function(g){var S=Op("Symbol");return Rl(S)&&Ct(S.prototype,Yd(g))},Ki=String,fo=function(g){try{return Ki(g)}catch{return"Object"}},rn=be,Hh=fo,pn=TypeError,Ko=function(g){if(rn(g))return g;throw new pn(Hh(g)+" is not a function")},z3=Ko,xp=Ut,Co=function(g,S){var E=g[S];return xp(E)?void 0:z3(E)},ui=De,Yi=be,Hn=St,qa=TypeError,vs={exports:{}},gu=c,Qi=Object.defineProperty,fy=function(g,S){try{Qi(gu,g,{value:S,configurable:!0,writable:!0})}catch{gu[g]=S}return S},yu="__core-js_shared__",bc=c[yu]||fy(yu,{}),Dl=bc;(vs.exports=function(g,S){return Dl[g]||(Dl[g]=S!==void 0?S:{})})("versions",[]).push({version:"3.33.2",mode:"pure",copyright:"\xA9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.2/LICENSE",source:"https://github.com/zloirock/core-js"});var Oa=vs.exports,wc=Er,Di=Object,ea=function(g){return Di(wc(g))},hy=ea,Yo=H({}.hasOwnProperty),kr=Object.hasOwn||function(g,S){return Yo(hy(g),S)},g1=H,W3=0,my=Math.random(),ef=g1(1 .toString),tf=function(g){return"Symbol("+(g===void 0?"":g)+")_"+ef(++W3+my,36)},vy=Oa,Vh=kr,gy=tf,_p=Za,Sp=li,Ll=c.Symbol,ci=vy("wks"),ho=Sp?Ll.for||Ll:Ll&&Ll.withoutSetter||gy,ao=function(g){return Vh(ci,g)||(ci[g]=_p&&Vh(Ll,g)?Ll[g]:ho("Symbol."+g)),ci[g]},yy=De,so=St,by=Qd,rf=Co,$h=function(g,S){var E,j;if(S==="string"&&Yi(E=g.toString)&&!Hn(j=ui(E,g))||Yi(E=g.valueOf)&&!Hn(j=ui(E,g))||S!=="string"&&Yi(E=g.toString)&&!Hn(j=ui(E,g)))return j;throw new qa("Can't convert object to primitive value")},wy=TypeError,bu=ao("toPrimitive"),Nl=function(g,S){if(!so(g)||by(g))return g;var E,j=rf(g,bu);if(j){if(S===void 0&&(S="default"),E=yy(j,g,S),!so(E)||by(E))return E;throw new wy("Can't convert object to primitive value")}return S===void 0&&(S="number"),$h(g,S)},Zh=Qd,Ip=function(g){var S=Nl(g,"string");return Zh(S)?S:S+""},qh=St,y1=c.document,Oy=qh(y1)&&qh(y1.createElement),wu=function(g){return Oy?y1.createElement(g):{}},Uh=wu,xy=!Te&&!d(function(){return Object.defineProperty(Uh("div"),"a",{get:function(){return 7}}).a!==7}),Kn=Te,H3=De,b1=He,_y=Vt,V3=Nr,$3=Ip,Z3=kr,Sy=xy,Iy=Object.getOwnPropertyDescriptor;Se.f=Kn?Iy:function(g,S){if(g=V3(g),S=$3(S),Sy)try{return Iy(g,S)}catch{}if(Z3(g,S))return _y(!H3(b1.f,g,S),g[S])};var q3=d,U3=be,nf=/#|\.prototype\./,Ou=function(g,S){var E=Ey[G3(g)];return E===J3||E!==w1&&(U3(S)?q3(S):!!S)},G3=Ou.normalize=function(g){return String(g).replace(nf,".").toLowerCase()},Ey=Ou.data={},w1=Ou.NATIVE="N",J3=Ou.POLYFILL="P",Gh=Ou,O1=Ko,x1=h,of=fe(fe.bind),mo=function(g,S){return O1(g),S===void 0?g:x1?of(g,S):function(){return g.apply(S,arguments)}},bi={},Py=Te&&d(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),X3=St,K3=String,xa=TypeError,ta=function(g){if(X3(g))return g;throw new xa(K3(g)+" is not an object")},ro=Te,af=xy,Fl=Py,sf=ta,_1=Ip,S1=TypeError,Oc=Object.defineProperty,Ep=Object.getOwnPropertyDescriptor,Ua="enumerable",xc="configurable",I1="writable";bi.f=ro?Fl?function(g,S,E){if(sf(g),S=_1(S),sf(E),typeof g=="function"&&S==="prototype"&&"value"in E&&I1 in E&&!E[I1]){var j=Ep(g,S);j&&j[I1]&&(g[S]=E.value,E={configurable:xc in E?E[xc]:j[xc],enumerable:Ua in E?E[Ua]:j[Ua],writable:!1})}return Oc(g,S,E)}:Oc:function(g,S,E){if(sf(g),S=_1(S),sf(E),af)try{return Oc(g,S,E)}catch{}if("get"in E||"set"in E)throw new S1("Accessors not supported");return"value"in E&&(g[S]=E.value),g};var Ys=bi,_c=Vt,ra=Te?function(g,S,E){return Ys.f(g,S,_c(1,E))}:function(g,S,E){return g[S]=E,g},Jh=c,Y3=R,xu=fe,pi=be,E1=Se.f,Pp=Gh,Sc=tn,kp=mo,_u=ra,ky=kr,Bt=function(g){var S=function(E,j,W){if(this instanceof S){switch(arguments.length){case 0:return new g;case 1:return new g(E);case 2:return new g(E,j)}return new g(E,j,W)}return Y3(g,this,arguments)};return S.prototype=g.prototype,S},ar=function(g,S){var E,j,W,U,ie,oe,ue,we,Ee,je=g.target,Ze=g.global,tt=g.stat,Et=g.proto,_t=Ze?Jh:tt?Jh[je]:(Jh[je]||{}).prototype,$t=Ze?Sc:Sc[je]||_u(Sc,je,{})[je],dr=$t.prototype;for(U in S)j=!(E=Pp(Ze?U:je+(tt?".":"#")+U,g.forced))&&_t&&ky(_t,U),oe=$t[U],j&&(ue=g.dontCallGetSet?(Ee=E1(_t,U))&&Ee.value:_t[U]),ie=j&&ue?ue:S[U],j&&typeof oe==typeof ie||(we=g.bind&&j?kp(ie,Jh):g.wrap&&j?Bt(ie):Et&&pi(ie)?xu(ie):ie,(g.sham||ie&&ie.sham||oe&&oe.sham)&&_u(we,"sham",!0),_u($t,U,we),Et&&(ky(Sc,W=je+"Prototype")||_u(Sc,W,{}),_u(Sc[W],U,ie),g.real&&dr&&(E||!dr[U])&&_u(dr,U,ie)))},Q3=ar,ew=Te,Bl=bi.f;Q3({target:"Object",stat:!0,forced:Object.defineProperty!==Bl,sham:!ew},{defineProperty:Bl});var P1=tn.Object,jp=o.exports=function(g,S,E){return P1.defineProperty(g,S,E)};P1.defineProperty.sham&&(jp.sham=!0);var Xh=o.exports,Su=Xh,Tp=n(Su),lf=ne,Qs=Array.isArray||function(g){return lf(g)==="Array"},Ga=Math.ceil,tw=Math.floor,rw=Math.trunc||function(g){var S=+g;return(S>0?tw:Ga)(S)},_a=function(g){var S=+g;return S!=S||S===0?0:rw(S)},uf=_a,Kh=Math.min,kn=function(g){return g>0?Kh(uf(g),9007199254740991):0},Li=function(g){return kn(g.length)},nw=TypeError,cf=function(g){if(g>9007199254740991)throw nw("Maximum allowed index exceeded");return g},Cp=Ip,jy=bi,Ic=Vt,Sa=function(g,S,E){var j=Cp(S);j in g?jy.f(g,j,Ic(0,E)):g[j]=E},Ty={};Ty[ao("toStringTag")]="z";var er=String(Ty)==="[object z]",Yh=er,Iu=be,zl=ne,k1=ao("toStringTag"),Cy=Object,My=zl(function(){return arguments}())==="Arguments",gs=Yh?zl:function(g){var S,E,j;return g===void 0?"Undefined":g===null?"Null":typeof(E=function(W,U){try{return W[U]}catch{}}(S=Cy(g),k1))=="string"?E:My?zl(S):(j=zl(S))==="Object"&&Iu(S.callee)?"Arguments":j},j1=be,Mp=bc,T1=H(Function.toString);j1(Mp.inspectSource)||(Mp.inspectSource=function(g){return T1(g)});var Ay=Mp.inspectSource,Ap=H,Ry=d,C1=be,Qh=gs,Dy=Ay,Cn=function(){},em=[],M1=ir("Reflect","construct"),A1=/^\s*(?:class|function)\b/,Ly=Ap(A1.exec),tm=!A1.test(Cn),Rp=function(g){if(!C1(g))return!1;try{return M1(Cn,em,g),!0}catch{return!1}},Ja=function(g){if(!C1(g))return!1;switch(Qh(g)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return tm||!!Ly(A1,Dy(g))}catch{return!0}};Ja.sham=!0;var ys=!M1||Ry(function(){var g;return Rp(Rp.call)||!Rp(Object)||!Rp(function(){g=!0})||g})?Ja:Rp,R1=Qs,Ia=ys,rm=St,D1=ao("species"),Dp=Array,ow=function(g){var S;return R1(g)&&(S=g.constructor,(Ia(S)&&(S===Dp||R1(S.prototype))||rm(S)&&(S=S[D1])===null)&&(S=void 0)),S===void 0?Dp:S},vo=function(g,S){return new(ow(g))(S===0?0:S)},iw=d,Lp=wa,aw=ao("species"),Ec=function(g){return Lp>=51||!iw(function(){var S=[];return(S.constructor={})[aw]=function(){return{foo:1}},S[g](Boolean).foo!==1})},Ny=ar,nm=d,at=Qs,L1=St,pf=ea,N1=Li,F1=cf,B1=Sa,Fy=vo,By=Ec,Ea=wa,z1=ao("isConcatSpreadable"),om=Ea>=51||!nm(function(){var g=[];return g[z1]=!1,g.concat()[0]!==g}),Pc=function(g){if(!L1(g))return!1;var S=g[z1];return S!==void 0?!!S:at(g)};Ny({target:"Array",proto:!0,arity:1,forced:!om||!By("concat")},{concat:function(g){var S,E,j,W,U,ie=pf(this),oe=Fy(ie,0),ue=0;for(S=-1,j=arguments.length;Soe;)if((W=U[oe++])!=W)return!0}else for(;ie>oe;oe++)if((g||oe in U)&&U[oe]===E)return g||oe||0;return!g&&-1}},Eu={includes:na(!0),indexOf:na(!1)},Fp={},Pu=kr,Hy=Nr,lm=Eu.indexOf,W1=Fp,Vy=H([].push),H1=function(g,S){var E,j=Hy(g),W=0,U=[];for(E in j)!Pu(W1,E)&&Pu(j,E)&&Vy(U,E);for(;S.length>W;)Pu(j,E=S[W++])&&(~lm(U,E)||Vy(U,E));return U},V1=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],sw=H1,$1=V1,mf=Object.keys||function(g){return sw(g,$1)},lw=Te,vf=Py,um=bi,uw=ta,$y=Nr,cw=mf;sm.f=lw&&!vf?Object.defineProperties:function(g,S){uw(g);for(var E,j=$y(S),W=cw(S),U=W.length,ie=0;U>ie;)um.f(g,E=W[ie++],j[E]);return g};var ku,cm=ir("document","documentElement"),Z1=tf,Zy=Oa("keys"),pm=function(g){return Zy[g]||(Zy[g]=Z1(g))},qy=ta,q1=sm,gf=V1,ws=Fp,Bp=cm,el=wu,jc="prototype",zp="script",dm=pm("IE_PROTO"),U1=function(){},fm=function(g){return"<"+zp+">"+g+""},Uy=function(g){g.write(fm("")),g.close();var S=g.parentWindow.Object;return g=null,S},Tc=function(){try{ku=new ActiveXObject("htmlfile")}catch{}var g,S,E;Tc=typeof document<"u"?document.domain&&ku?Uy(ku):(S=el("iframe"),E="java"+zp+":",S.style.display="none",Bp.appendChild(S),S.src=String(E),(g=S.contentWindow.document).open(),g.write(fm("document.F=Object")),g.close(),g.F):Uy(ku);for(var j=gf.length;j--;)delete Tc[jc][gf[j]];return Tc()};ws[dm]=!0;var Cc=Object.create||function(g,S){var E;return g!==null?(U1[jc]=qy(g),E=new U1,U1[jc]=null,E[dm]=g):E=Tc(),S===void 0?E:q1.f(E,S)},Xa={},hm=H1,pw=V1.concat("length","prototype");Xa.f=Object.getOwnPropertyNames||function(g){return hm(g,pw)};var mm={},Gy=ff,Mc=Li,dw=Sa,ju=Array,Jy=Math.max,vm=function(g,S,E){for(var j=Mc(g),W=Gy(S,j),U=Gy(E===void 0?j:E,j),ie=ju(Jy(U-W,0)),oe=0;WWt;Wt++)if((oe||Wt in _t)&&(tt=$t(Ze=_t[Wt],Wt,Et),g))if(S)gn[Wt]=tt;else if(tt)switch(g){case 3:return!0;case 5:return Ze;case 6:return Wt;case 2:Rc(gn,Ze)}else switch(g){case 4:return!1;case 7:Rc(gn,Ze)}return U?-1:j||W?W:gn}},Ar={forEach:Ss(0),map:Ss(1),filter:Ss(2),some:Ss(3),every:Ss(4),find:Ss(5),findIndex:Ss(6),filterReject:Ss(7)},O=ar,L=c,$=De,K=H,le=Te,_e=Za,We=d,ut=kr,cr=Mr,Vr=ta,Ho=Nr,Is=Ip,Es=kc,K1=Vt,Yn=Cc,Y1=mf,u_=Xa,c_=mm,Sw=Ac,Q1=Se,p_=bi,HP=sm,Iw=He,d_=Os,f_=tl,nb=Oa,h_=Fp,m_=tf,VP=ao,Ew=xs,Sf=lo,v_=Wl,$P=Cu,Pw=Vl,ob=Ar.forEach,Ya=pm("hidden"),ev="Symbol",Im="prototype",ZP=Pw.set,Em=Pw.getterFor(ev),Ps=Object[Im],If=L.Symbol,ib=If&&If[Im],g_=L.RangeError,ab=L.TypeError,kw=L.QObject,tv=Q1.f,ol=p_.f,rv=c_.f,y_=Iw.f,sb=K([].push),wi=nb("symbols"),Au=nb("op-symbols"),Ru=nb("wks"),lb=!kw||!kw[Im]||!kw[Im].findChild,nv=function(g,S,E){var j=tv(Ps,S);j&&delete Ps[S],ol(g,S,E),j&&g!==Ps&&ol(Ps,S,j)},jw=le&&We(function(){return Yn(ol({},"a",{get:function(){return ol(this,"a",{value:7}).a}})).a!==7})?nv:ol,Tw=function(g,S){var E=wi[g]=Yn(ib);return ZP(E,{type:ev,tag:g,description:S}),le||(E.description=S),E},ub=function(g,S,E){g===Ps&&ub(Au,S,E),Vr(g);var j=Is(S);return Vr(E),ut(wi,j)?(E.enumerable?(ut(g,Ya)&&g[Ya][j]&&(g[Ya][j]=!1),E=Yn(E,{enumerable:K1(0,!1)})):(ut(g,Ya)||ol(g,Ya,K1(1,{})),g[Ya][j]=!0),jw(g,j,E)):ol(g,j,E)},Hp=function(g,S){Vr(g);var E=Ho(S),j=Y1(E).concat(ov(E));return ob(j,function(W){le&&!$(Cw,E,W)||ub(g,W,E[W])}),g},Cw=function(g){var S=Is(g),E=$(y_,this,S);return!(this===Ps&&ut(wi,S)&&!ut(Au,S))&&(!(E||!ut(this,S)||!ut(wi,S)||ut(this,Ya)&&this[Ya][S])||E)},Du=function(g,S){var E=Ho(g),j=Is(S);if(E!==Ps||!ut(wi,j)||ut(Au,j)){var W=tv(E,j);return!W||!ut(wi,j)||ut(E,Ya)&&E[Ya][j]||(W.enumerable=!0),W}},Ef=function(g){var S=rv(Ho(g)),E=[];return ob(S,function(j){ut(wi,j)||ut(h_,j)||sb(E,j)}),E},ov=function(g){var S=g===Ps,E=rv(S?Au:Ho(g)),j=[];return ob(E,function(W){!ut(wi,W)||S&&!ut(Ps,W)||sb(j,wi[W])}),j};_e||(If=function(){if(cr(ib,this))throw new ab("Symbol is not a constructor");var g=arguments.length&&arguments[0]!==void 0?Es(arguments[0]):void 0,S=m_(g),E=function(j){var W=this===void 0?L:this;W===Ps&&$(E,Au,j),ut(W,Ya)&&ut(W[Ya],S)&&(W[Ya][S]=!1);var U=K1(1,j);try{jw(W,S,U)}catch(ie){if(!(ie instanceof g_))throw ie;nv(W,S,U)}};return le&&lb&&jw(Ps,S,{configurable:!0,set:E}),Tw(S,g)},d_(ib=If[Im],"toString",function(){return Em(this).tag}),d_(If,"withoutSetter",function(g){return Tw(m_(g),g)}),Iw.f=Cw,p_.f=ub,HP.f=Hp,Q1.f=Du,u_.f=c_.f=Ef,Sw.f=ov,Ew.f=function(g){return Tw(VP(g),g)},le&&f_(ib,"description",{configurable:!0,get:function(){return Em(this).description}})),O({global:!0,constructor:!0,wrap:!0,forced:!_e,sham:!_e},{Symbol:If}),ob(Y1(Ru),function(g){Sf(g)}),O({target:ev,stat:!0,forced:!_e},{useSetter:function(){lb=!0},useSimple:function(){lb=!1}}),O({target:"Object",stat:!0,forced:!_e,sham:!le},{create:function(g,S){return S===void 0?Yn(g):Hp(Yn(g),S)},defineProperty:ub,defineProperties:Hp,getOwnPropertyDescriptor:Du}),O({target:"Object",stat:!0,forced:!_e},{getOwnPropertyNames:Ef}),v_(),$P(If,ev),h_[Ya]=!0;var Pm=Za&&!!Symbol.for&&!!Symbol.keyFor,km=ar,qP=ir,jm=kr,Tm=kc,b_=Oa,Oi=Pm,Mw=b_("string-to-symbol-registry"),cb=b_("symbol-to-string-registry");km({target:"Symbol",stat:!0,forced:!Oi},{for:function(g){var S=Tm(g);if(jm(Mw,S))return Mw[S];var E=qP("Symbol")(S);return Mw[S]=E,cb[E]=S,E}});var pb=ar,Aw=kr,UP=Qd,Rw=fo,iv=Pm,Dw=Oa("symbol-to-string-registry");pb({target:"Symbol",stat:!0,forced:!iv},{keyFor:function(g){if(!UP(g))throw new TypeError(Rw(g)+" is not a symbol");if(Aw(Dw,g))return Dw[g]}});var av=H([].slice),db=Qs,GP=be,Lw=ne,Nw=kc,Fw=H([].push),Bw=ar,zw=ir,Ww=R,Hw=De,sv=H,fb=d,Dc=be,w_=Qd,Vw=av,O_=function(g){if(GP(g))return g;if(db(g)){for(var S=g.length,E=[],j=0;j=S.length)return g.target=void 0,Eb(void 0,!0);switch(g.kind){case"keys":return Eb(E,!1);case"values":return Eb(S[E],!1)}return Eb([E,S[E]],!1)},"values"),eO.Arguments=eO.Array;var qp={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},Fc=c,Pb=gs,kb=ra,jb=jf,U_=ao("toStringTag");for(var Up in qp){var Tf=Fc[Up],rO=Tf&&Tf.prototype;rO&&Pb(rO)!==U_&&kb(rO,U_,Up),jb[Up]=jb.Array}var di=yb,uk=ao,nO=bi.f,mv=uk("metadata"),Tb=Function.prototype;Tb[mv]===void 0&&nO(Tb,mv,{value:null}),lo("asyncDispose"),lo("dispose"),lo("metadata");var ck=di,oO=H,Cf=ir("Symbol"),G_=Cf.keyFor,pk=oO(Cf.prototype.valueOf),iO=Cf.isRegisteredSymbol||function(g){try{return G_(pk(g))!==void 0}catch{return!1}};ar({target:"Symbol",stat:!0},{isRegisteredSymbol:iO});for(var Lm=Oa,vv=ir,J_=H,X_=Qd,K_=ao,Mf=vv("Symbol"),Y_=Mf.isWellKnownSymbol,Cb=vv("Object","getOwnPropertyNames"),Q_=J_(Mf.prototype.valueOf),aO=Lm("wks"),Mb=0,eS=Cb(Mf),dk=eS.length;Mb=oe?g?"":void 0:(j=al(U,ie))<55296||j>56319||ie+1===oe||(W=al(U,ie+1))<56320||W>57343?g?nS(U,ie):j:g?Af(U,ie,ie+2):W-56320+(j-55296<<10)+65536}},hk={codeAt:Nm(!1),charAt:Nm(!0)}.charAt,mk=kc,Fm=Vl,sO=Sb,oa=Ib,gv="String Iterator",lO=Fm.set,oS=Fm.getterFor(gv);sO(String,"String",function(g){lO(this,{type:gv,string:mk(g),index:0})},function(){var g,S=oS(this),E=S.string,j=S.index;return j>=E.length?oa(void 0,!0):(g=hk(E,j),S.index+=g.length,oa(g,!1))});var Zl=xs.f("iterator"),Bm=Zl,vk=n(Bm);function Jp(g){return Jp=typeof Nu=="function"&&typeof vk=="symbol"?function(S){return typeof S}:function(S){return S&&typeof Nu=="function"&&S.constructor===Nu&&S!==Nu.prototype?"symbol":typeof S},Jp(g)}var iS=n(xs.f("toPrimitive"));function Db(g){var S=function(E,j){if(Jp(E)!=="object"||E===null)return E;var W=E[iS];if(W!==void 0){var U=W.call(E,j||"default");if(Jp(U)!=="object")return U;throw new TypeError("@@toPrimitive must return a primitive value.")}return(j==="string"?String:Number)(E)}(g,"string");return Jp(S)==="symbol"?S:String(S)}function Lb(g,S){for(var E=0;E=0:oe>ue;ue+=we)ue in ie&&(W=E(W,ie[ue],ue,U));return W}},mO={left:hO(!1),right:hO(!0)},Df=d,Ov=function(g,S){var E=[][g];return!!E&&Df(function(){E.call(null,S||function(){return 1},1)})},Lf=ne(c.process)==="process",vO=mO.left;ar({target:"Array",proto:!0,forced:!Lf&&wa>79&&wa<83||!Ov("reduce")},{reduce:function(g){var S=arguments.length;return vO(this,g,S,S>1?arguments[1]:void 0)}});var fS=ia("Array","reduce"),zb=Mr,hS=fS,gO=Array.prototype,Bc=n(function(g){var S=g.reduce;return g===gO||zb(gO,g)&&S===gO.reduce?hS:S}),Wb=Ar.filter;ar({target:"Array",proto:!0,forced:!Ec("filter")},{filter:function(g){return Wb(this,g,arguments.length>1?arguments[1]:void 0)}});var mS=ia("Array","filter"),_k=Mr,Sk=mS,yO=Array.prototype,fi=n(function(g){var S=g.filter;return g===yO||_k(yO,g)&&S===yO.filter?Sk:S}),vS=Ar.map;ar({target:"Array",proto:!0,forced:!Ec("map")},{map:function(g){return vS(this,g,arguments.length>1?arguments[1]:void 0)}});var bO=ia("Array","map"),Hb=Mr,wO=bO,xv=Array.prototype,ks=n(function(g){var S=g.map;return g===xv||Hb(xv,g)&&S===xv.map?wO:S}),OO=Qs,Ik=Li,Ek=cf,gS=mo,xO=function(g,S,E,j,W,U,ie,oe){for(var ue,we,Ee=W,je=0,Ze=!!ie&&gS(ie,oe);je0&&OO(ue)?(we=Ik(ue),Ee=xO(g,S,ue,we,Ee,U-1)-1):(Ek(Ee+1),g[Ee]=ue),Ee++),je++;return Ee},yS=xO,Pk=Ko,kk=ea,bS=Li,wS=vo;ar({target:"Array",proto:!0},{flatMap:function(g){var S,E=kk(this),j=bS(E);return Pk(g),(S=wS(E,0)).length=yS(S,E,E,j,0,1,g,arguments.length>1?arguments[1]:void 0),S}});var jk=ia("Array","flatMap"),Tk=Mr,_v=jk,_O=Array.prototype,Ck=n(function(g){var S=g.flatMap;return g===_O||Tk(_O,g)&&S===_O.flatMap?_v:S}),SO=function(){function g(S,E,j){var W,U,ie;t(this,g),Qa(this,"_listeners",{add:Rf(W=this._add).call(W,this),remove:Rf(U=this._remove).call(U,this),update:Rf(ie=this._update).call(ie,this)}),this._source=S,this._transformers=E,this._target=j}return Fu(g,[{key:"all",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:"start",value:function(){return this._source.on("add",this._listeners.add),this._source.on("remove",this._listeners.remove),this._source.on("update",this._listeners.update),this}},{key:"stop",value:function(){return this._source.off("add",this._listeners.add),this._source.off("remove",this._listeners.remove),this._source.off("update",this._listeners.update),this}},{key:"_transformItems",value:function(S){var E;return Bc(E=this._transformers).call(E,function(j,W){return W(j)},S)}},{key:"_add",value:function(S,E){E!=null&&this._target.add(this._transformItems(this._source.get(E.items)))}},{key:"_update",value:function(S,E){E!=null&&this._target.update(this._transformItems(this._source.get(E.items)))}},{key:"_remove",value:function(S,E){E!=null&&this._target.remove(this._transformItems(E.oldData))}}]),g}(),Mk=function(){function g(S){t(this,g),Qa(this,"_transformers",[]),this._source=S}return Fu(g,[{key:"filter",value:function(S){return this._transformers.push(function(E){return fi(E).call(E,S)}),this}},{key:"map",value:function(S){return this._transformers.push(function(E){return ks(E).call(E,S)}),this}},{key:"flatMap",value:function(S){return this._transformers.push(function(E){return Ck(E).call(E,S)}),this}},{key:"to",value:function(S){return new SO(this._source,this._transformers,S)}}]),g}(),OS=De,xS=ta,_S=Co,SS=function(g,S,E){var j,W;xS(g);try{if(!(j=_S(g,"return"))){if(S==="throw")throw E;return E}j=OS(j,g)}catch(U){W=!0,j=U}if(S==="throw")throw E;if(W)throw j;return xS(j),E},Vb=ta,IS=SS,Sv=jf,ES=ao("iterator"),IO=Array.prototype,$b=function(g){return g!==void 0&&(Sv.Array===g||IO[ES]===g)},EO=gs,Zb=Co,PO=Ut,PS=jf,Nf=ao("iterator"),Iv=function(g){if(!PO(g))return Zb(g,Nf)||Zb(g,"@@iterator")||PS[EO(g)]},Vn=De,Ak=Ko,kS=ta,jS=fo,yt=Iv,TS=TypeError,qb=function(g,S){var E=arguments.length<2?yt(g):S;if(Ak(E))return kS(Vn(E,g));throw new TS(jS(g)+" is not iterable")},Rk=mo,Dk=De,Lk=ea,Nk=function(g,S,E,j){try{return j?S(Vb(E)[0],E[1]):S(E)}catch(W){IS(g,"throw",W)}},CS=$b,Fk=ys,kO=Li,Ff=Sa,jO=qb,Bk=Iv,MS=Array,AS=ao("iterator"),Ub=!1;try{var RS=0,DS={next:function(){return{done:!!RS++}},return:function(){Ub=!0}};DS[AS]=function(){return this},Array.from(DS,function(){throw 2})}catch{}var TO=function(g,S){try{if(!S&&!Ub)return!1}catch{return!1}var E=!1;try{var j={};j[AS]=function(){return{next:function(){return{done:E=!0}}}},g(j)}catch{}return E},LS=function(g){var S=Lk(g),E=Fk(this),j=arguments.length,W=j>1?arguments[1]:void 0,U=W!==void 0;U&&(W=Rk(W,j>2?arguments[2]:void 0));var ie,oe,ue,we,Ee,je,Ze=Bk(S),tt=0;if(!Ze||this===MS&&CS(Ze))for(ie=kO(S),oe=E?new this(ie):MS(ie);ie>tt;tt++)je=U?W(S[tt],tt):S[tt],Ff(oe,tt,je);else for(Ee=(we=jO(S,Ze)).next,oe=E?new this:[];!(ue=Dk(Ee,we)).done;tt++)je=U?Nk(we,W,[ue.value,tt],!0):ue.value,Ff(oe,tt,je);return oe.length=tt,oe};ar({target:"Array",stat:!0,forced:!TO(function(g){Array.from(g)})},{from:LS});var NS=tn.Array.from,Gb=n(NS),Jb=Iv,FS=n(Jb),Ev=n(Jb);ar({target:"Array",stat:!0},{isArray:Qs});var CO=tn.Array.isArray,BS=n(CO),zk=Te,Wk=Qs,Hk=TypeError,MO=Object.getOwnPropertyDescriptor,AO=zk&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(g){return g instanceof TypeError}}()?function(g,S){if(Wk(g)&&!MO(g,"length").writable)throw new Hk("Cannot set read only .length");return g.length=S}:function(g,S){return g.length=S},Vk=ea,$k=Li,Zk=AO,RO=cf;ar({target:"Array",proto:!0,arity:1,forced:d(function(){return[].push.call({length:4294967296},1)!==4294967297})||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(g){return g instanceof TypeError}}()},{push:function(g){var S=Vk(this),E=$k(S),j=arguments.length;RO(E+j);for(var W=0;Wg.length)&&(S=g.length);for(var E=0,j=new Array(S);E1?arguments[1]:void 0)};ar({target:"Array",proto:!0,forced:[].forEach!==XS},{forEach:XS});var oj=ia("Array","forEach"),Pv=gs,ij=kr,aj=Mr,kv=oj,jv=Array.prototype,sj={DOMTokenList:!0,NodeList:!0},Yp=function(g){var S=g.forEach;return g===jv||aj(jv,g)&&S===jv.forEach||ij(sj,Pv(g))?kv:S},zu=n(Yp),lj=ar,KS=Qs,uj=H([].reverse),YS=[1,2];lj({target:"Array",proto:!0,forced:String(YS)===String(YS.reverse())},{reverse:function(){return KS(this)&&(this.length=this.length),uj(this)}});var cj=ia("Array","reverse"),pj=Mr,dj=cj,Tv=Array.prototype,QS=function(g){var S=g.reverse;return g===Tv||pj(Tv,g)&&S===Tv.reverse?dj:S},fj=n(QS),e7=fo,zO=TypeError,WO=function(g,S){if(!delete g[S])throw new zO("Cannot delete property "+e7(S)+" of "+e7(g))},hj=ar,mj=ea,vj=ff,gj=_a,yj=Li,HO=AO,bj=cf,Wc=vo,VO=Sa,$O=WO,wj=Ec("splice"),Oj=Math.max,xj=Math.min;hj({target:"Array",proto:!0,forced:!wj},{splice:function(g,S){var E,j,W,U,ie,oe,ue=mj(this),we=yj(ue),Ee=vj(g,we),je=arguments.length;for(je===0?E=j=0:je===1?(E=0,j=we-Ee):(E=je-2,j=xj(Oj(gj(S),0),we-Ee)),bj(we+E-j),W=Wc(ue,j),U=0;Uwe-j+E;U--)$O(ue,U-1)}else if(E>j)for(U=we-j;U>Ee;U--)oe=U+E-1,(ie=U+j-1)in ue?ue[oe]=ue[ie]:$O(ue,oe);for(U=0;UW;)for(var oe,ue=qO(arguments[W++]),we=U?Qp(Cv(ue),U(ue)):Cv(ue),Ee=we.length,je=0;Ee>je;)oe=we[je++],r7&&!Ij(ie,ue,oe)||(E[oe]=ue[oe]);return E}:ei,UO=jj;ar({target:"Object",stat:!0,arity:2,forced:Object.assign!==UO},{assign:UO});var GO=n(tn.Object.assign),a7=ea,JO=Ob,Tj=wb;ar({target:"Object",stat:!0,forced:d(function(){JO(1)}),sham:!Tj},{getPrototypeOf:function(g){return JO(a7(g))}});var Cj=tn.Object.getPrototypeOf;ar({target:"Object",stat:!0,sham:!Te},{create:Cc});var Mj=tn.Object,s7=function(g,S){return Mj.create(g,S)},XO=n(s7),KO=tn,ts=R;KO.JSON||(KO.JSON={stringify:JSON.stringify});var YO=function(g,S,E){return ts(KO.JSON.stringify,null,arguments)},Aj=n(YO),QO=typeof Bun=="function"&&Bun&&typeof Bun.version=="string",e6=TypeError,t6=function(g,S){if(gE,ie=r6(j)?j:p7(j),oe=U?Dj(arguments,E):[],ue=U?function(){Rj(ie,this,oe)}:ie;return S?g(ue,W):g(ue)}:g},Mv=ar,n6=c,o6=t2(n6.setInterval,!0);Mv({global:!0,bind:!0,forced:n6.setInterval!==o6},{setInterval:o6});var d7=ar,f7=c,i6=t2(f7.setTimeout,!0);d7({global:!0,bind:!0,forced:f7.setTimeout!==i6},{setTimeout:i6});var Ul=n(tn.setTimeout),a6={exports:{}};(function(g){function S(E){if(E)return function(j){return Object.assign(j,S.prototype),j._callbacks=new Map,j}(E);this._callbacks=new Map}S.prototype.on=function(E,j){let W=this._callbacks.get(E)??[];return W.push(j),this._callbacks.set(E,W),this},S.prototype.once=function(E,j){let W=(...U)=>{this.off(E,W),j.apply(this,U)};return W.fn=j,this.on(E,W),this},S.prototype.off=function(E,j){if(E===void 0&&j===void 0)return this._callbacks.clear(),this;if(j===void 0)return this._callbacks.delete(E),this;let W=this._callbacks.get(E);if(W){for(let[U,ie]of W.entries())if(ie===j||ie.fn===j){W.splice(U,1);break}W.length===0?this._callbacks.delete(E):this._callbacks.set(E,W)}return this},S.prototype.emit=function(E,...j){let W=this._callbacks.get(E);if(W){let U=[...W];for(let ie of U)ie.apply(this,j)}return this},S.prototype.listeners=function(E){return this._callbacks.get(E)??[]},S.prototype.listenerCount=function(E){if(E)return this.listeners(E).length;let j=0;for(let W of this._callbacks.values())j+=W.length;return j},S.prototype.hasListeners=function(E){return this.listenerCount(E)>0},S.prototype.addEventListener=S.prototype.on,S.prototype.removeListener=S.prototype.off,S.prototype.removeEventListener=S.prototype.off,S.prototype.removeAllListeners=S.prototype.off,g.exports=S})(a6);var h7,m7=n(a6.exports);function js(){return js=Object.assign||function(g){for(var S=1;S"u"?{style:{}}:document.createElement("div"),ln=Math.round,zf=Math.abs,o2=Date.now;function Hu(g,S){for(var E,j,W=S[0].toUpperCase()+S.slice(1),U=0;U"u"?{}:window;var Vm=Hu(Fj.style,"touchAction"),v7=Vm!==void 0,g7="compute",$m="auto",s6="manipulation",Wf="none",Zm="pan-x",Av="pan-y",Rv=function(){if(!v7)return!1;var g={},S=ed.CSS&&ed.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(E){return g[E]=!S||ed.CSS.supports("touch-action",E)}),g}(),y7="ontouchstart"in ed,Bj=Hu(ed,"PointerEvent")!==void 0,b7=y7&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),Dv="touch",l6="mouse",w7=25,zi=1,ti=4,aa=8,qm=1,Lv=2,Um=4,Gm=8,Ta=16,Vu=Lv|Um,td=Gm|Ta,O7=Vu|td,u6=["x","y"],Nv=["clientX","clientY"];function ll(g,S,E){var j;if(g)if(g.forEach)g.forEach(S,E);else if(g.length!==void 0)for(j=0;j-1}var a2=function(){function g(E,j){this.manager=E,this.set(j)}var S=g.prototype;return S.set=function(E){E===g7&&(E=this.compute()),v7&&this.manager.element.style&&Rv[E]&&(this.manager.element.style[Vm]=E),this.actions=E.toLowerCase().trim()},S.update=function(){this.set(this.manager.options.touchAction)},S.compute=function(){var E=[];return ll(this.manager.recognizers,function(j){i2(j.options.enable,[j])&&(E=E.concat(j.getTouchAction()))}),function(j){if(Hf(j,Wf))return Wf;var W=Hf(j,Zm),U=Hf(j,Av);return W&&U?Wf:W||U?W?Zm:Av:Hf(j,s6)?s6:$m}(E.join(" "))},S.preventDefaults=function(E){var j=E.srcEvent,W=E.offsetDirection;if(this.manager.session.prevented)j.preventDefault();else{var U=this.actions,ie=Hf(U,Wf)&&!Rv[Wf],oe=Hf(U,Av)&&!Rv[Av],ue=Hf(U,Zm)&&!Rv[Zm];if(ie){var we=E.pointers.length===1,Ee=E.distance<2,je=E.deltaTime<250;if(we&&Ee&&je)return}if(!ue||!oe)return ie||oe&&W&Vu||ue&&W&td?this.preventSrc(j):void 0}},S.preventSrc=function(E){this.manager.session.prevented=!0,E.preventDefault()},g}();function c6(g,S){for(;g;){if(g===S)return!0;g=g.parentNode}return!1}function Jm(g){var S=g.length;if(S===1)return{x:ln(g[0].clientX),y:ln(g[0].clientY)};for(var E=0,j=0,W=0;W=zf(S)?g<0?Lv:Um:S<0?Gm:Ta}function Hc(g,S,E){return{x:S/g||0,y:E/g||0}}function x7(g,S){var E=g.session,j=S.pointers,W=j.length;E.firstInput||(E.firstInput=ul(S)),W>1&&!E.firstMultiple?E.firstMultiple=ul(S):W===1&&(E.firstMultiple=!1);var U=E.firstInput,ie=E.firstMultiple,oe=ie?ie.center:U.center,ue=S.center=Jm(j);S.timeStamp=o2(),S.deltaTime=S.timeStamp-U.timeStamp,S.angle=Xm(oe,ue),S.distance=Ca(oe,ue),function(_t,$t){var dr=$t.center,Wt=_t.offsetDelta||{},hn=_t.prevDelta||{},gn=_t.prevInput||{};$t.eventType!==zi&&gn.eventType!==ti||(hn=_t.prevDelta={x:gn.deltaX||0,y:gn.deltaY||0},Wt=_t.offsetDelta={x:dr.x,y:dr.y}),$t.deltaX=hn.x+(dr.x-Wt.x),$t.deltaY=hn.y+(dr.y-Wt.y)}(E,S),S.offsetDirection=$u(S.deltaX,S.deltaY);var we,Ee,je=Hc(S.deltaTime,S.deltaX,S.deltaY);S.overallVelocityX=je.x,S.overallVelocityY=je.y,S.overallVelocity=zf(je.x)>zf(je.y)?je.x:je.y,S.scale=ie?(we=ie.pointers,Ca((Ee=j)[0],Ee[1],Nv)/Ca(we[0],we[1],Nv)):1,S.rotation=ie?function(_t,$t){return Xm($t[1],$t[0],Nv)+Xm(_t[1],_t[0],Nv)}(ie.pointers,j):0,S.maxPointers=E.prevInput?S.pointers.length>E.prevInput.maxPointers?S.pointers.length:E.prevInput.maxPointers:S.pointers.length,function(_t,$t){var dr,Wt,hn,gn,$n=_t.lastInterval||$t,Zo=$t.timeStamp-$n.timeStamp;if($t.eventType!==aa&&(Zo>w7||$n.velocity===void 0)){var mn=$t.deltaX-$n.deltaX,da=$t.deltaY-$n.deltaY,La=Hc(Zo,mn,da);Wt=La.x,hn=La.y,dr=zf(La.x)>zf(La.y)?La.x:La.y,gn=$u(mn,da),_t.lastInterval=$t}else dr=$n.velocity,Wt=$n.velocityX,hn=$n.velocityY,gn=$n.direction;$t.velocity=dr,$t.velocityX=Wt,$t.velocityY=hn,$t.direction=gn}(E,S);var Ze,tt=g.element,Et=S.srcEvent;c6(Ze=Et.composedPath?Et.composedPath()[0]:Et.path?Et.path[0]:Et.target,tt)&&(tt=Ze),S.target=tt}function s2(g,S,E){var j=E.pointers.length,W=E.changedPointers.length,U=S&zi&&j-W==0,ie=S&(ti|aa)&&j-W==0;E.isFirst=!!U,E.isFinal=!!ie,U&&(g.session={}),E.eventType=S,x7(g,E),g.emit("hammer.input",E),g.recognize(E),g.session.prevInput=E}function Zu(g){return g.trim().split(/\s+/g)}function Gl(g,S,E){ll(Zu(S),function(j){g.addEventListener(j,E,!1)})}function Vf(g,S,E){ll(Zu(S),function(j){g.removeEventListener(j,E,!1)})}function Fv(g){var S=g.ownerDocument||g;return S.defaultView||S.parentWindow||window}var $f=function(){function g(E,j){var W=this;this.manager=E,this.callback=j,this.element=E.element,this.target=E.options.inputTarget,this.domHandler=function(U){i2(E.options.enable,[E])&&W.handler(U)},this.init()}var S=g.prototype;return S.handler=function(){},S.init=function(){this.evEl&&Gl(this.element,this.evEl,this.domHandler),this.evTarget&&Gl(this.target,this.evTarget,this.domHandler),this.evWin&&Gl(Fv(this.element),this.evWin,this.domHandler)},S.destroy=function(){this.evEl&&Vf(this.element,this.evEl,this.domHandler),this.evTarget&&Vf(this.target,this.evTarget,this.domHandler),this.evWin&&Vf(Fv(this.element),this.evWin,this.domHandler)},g}();function Vc(g,S,E){if(g.indexOf&&!E)return g.indexOf(S);for(var j=0;jue[S]}):j.sort()),j}var I7={touchstart:zi,touchmove:2,touchend:ti,touchcancel:aa},p6=function(g){function S(){var E;return S.prototype.evTarget="touchstart touchmove touchend touchcancel",(E=g.apply(this,arguments)||this).targetIds={},E}return Ts(S,g),S.prototype.handler=function(E){var j=I7[E.type],W=zj.call(this,E,j);W&&this.callback(this.manager,j,{pointers:W[0],changedPointers:W[1],pointerType:Dv,srcEvent:E})},S}($f);function zj(g,S){var E,j,W=qu(g.touches),U=this.targetIds;if(S&(2|zi)&&W.length===1)return U[W[0].identifier]=!0,[W,W];var ie=qu(g.changedTouches),oe=[],ue=this.target;if(j=W.filter(function(we){return c6(we.target,ue)}),S===zi)for(E=0;E-1&&j.splice(W,1)},E7)}}function ri(g,S){g&zi?(this.primaryTouch=S.changedPointers[0].identifier,sa.call(this,S)):g&(ti|aa)&&sa.call(this,S)}function rs(g){for(var S=g.srcEvent.clientX,E=g.srcEvent.clientY,j=0;j-1&&this.requireFail.splice(j,1),this},S.hasRequireFailures=function(){return this.requireFail.length>0},S.canRecognizeWith=function(E){return!!this.simultaneous[E.id]},S.emit=function(E){var j=this,W=this.state;function U(ie){j.manager.emit(ie,E)}W<8&&U(j.options.event+Jl(W)),U(j.options.event),E.additionalEvent&&U(E.additionalEvent),W>=8&&U(j.options.event+Jl(W))},S.tryEmit=function(E){if(this.canEmit())return this.emit(E);this.state=cl},S.canEmit=function(){for(var E=0;EW.threshold&&oe&W.direction},E.attrTest=function(j){return Zf.prototype.attrTest.call(this,j)&&(2&this.state||!(2&this.state)&&this.directionTest(j))},E.emit=function(j){this.pX=j.deltaX,this.pY=j.deltaY;var W=Vv(j.direction);W&&(j.additionalEvent=this.options.event+W),g.prototype.emit.call(this,j)},S}(Zf),$v=function(g){function S(j){return j===void 0&&(j={}),g.call(this,js({event:"swipe",threshold:10,velocity:.3,direction:Vu|td,pointers:1},j))||this}Ts(S,g);var E=S.prototype;return E.getTouchAction=function(){return Cs.prototype.getTouchAction.call(this)},E.attrTest=function(j){var W,U=this.options.direction;return U&(Vu|td)?W=j.overallVelocity:U&Vu?W=j.overallVelocityX:U&td&&(W=j.overallVelocityY),g.prototype.attrTest.call(this,j)&&U&j.offsetDirection&&j.distance>this.options.threshold&&j.maxPointers===this.options.pointers&&zf(W)>this.options.velocity&&j.eventType&ti},E.emit=function(j){var W=Vv(j.offsetDirection);W&&this.manager.emit(this.options.event+W,j),this.manager.emit(this.options.event,j)},S}(Zf),nd=function(g){function S(j){return j===void 0&&(j={}),g.call(this,js({event:"pinch",threshold:0,pointers:2},j))||this}Ts(S,g);var E=S.prototype;return E.getTouchAction=function(){return[Wf]},E.attrTest=function(j){return g.prototype.attrTest.call(this,j)&&(Math.abs(j.scale-1)>this.options.threshold||2&this.state)},E.emit=function(j){if(j.scale!==1){var W=j.scale<1?"in":"out";j.additionalEvent=this.options.event+W}g.prototype.emit.call(this,j)},S}(Zf),d6=function(g){function S(j){return j===void 0&&(j={}),g.call(this,js({event:"rotate",threshold:0,pointers:2},j))||this}Ts(S,g);var E=S.prototype;return E.getTouchAction=function(){return[Wf]},E.attrTest=function(j){return g.prototype.attrTest.call(this,j)&&(Math.abs(j.rotation)>this.options.threshold||2&this.state)},S}(Zf),c2=function(g){function S(j){var W;return j===void 0&&(j={}),(W=g.call(this,js({event:"press",pointers:1,time:251,threshold:9},j))||this)._timer=null,W._input=null,W}Ts(S,g);var E=S.prototype;return E.getTouchAction=function(){return[$m]},E.process=function(j){var W=this,U=this.options,ie=j.pointers.length===U.pointers,oe=j.distanceU.time;if(this._input=j,!oe||!ie||j.eventType&(ti|aa)&&!ue)this.reset();else if(j.eventType&zi)this.reset(),this._timer=setTimeout(function(){W.state=8,W.tryEmit()},U.time);else if(j.eventType&ti)return 8;return cl},E.reset=function(){clearTimeout(this._timer)},E.emit=function(j){this.state===8&&(j&&j.eventType&ti?this.manager.emit(this.options.event+"up",j):(this._input.timeStamp=o2(),this.manager.emit(this.options.event,this._input)))},S}(Xl),f6={domEvents:!1,touchAction:g7,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},h6=[[d6,{enable:!1}],[nd,{enable:!1},["rotate"]],[$v,{direction:Vu}],[Cs,{direction:Vu},["swipe"]],[u2],[u2,{event:"doubletap",taps:2},["tap"]],[c2]];function Zv(g,S){var E,j=g.element;j.style&&(ll(g.options.cssProps,function(W,U){E=Hu(j.style,U),S?(g.oldCssProps[E]=j.style[E],j.style[E]=W):j.style[E]=g.oldCssProps[E]||""}),S||(g.oldCssProps={}))}var qv=function(){function g(E,j){var W,U=this;this.options=Wu({},f6,j||{}),this.options.inputTarget=this.options.inputTarget||E,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=E,this.input=new((W=this).options.inputClass||(Bj?Km:b7?p6:y7?Wv:zv))(W,s2),this.touchAction=new a2(this,this.options.touchAction),Zv(this,!0),ll(this.options.recognizers,function(ie){var oe=U.add(new ie[0](ie[1]));ie[2]&&oe.recognizeWith(ie[2]),ie[3]&&oe.requireFailure(ie[3])},this)}var S=g.prototype;return S.set=function(E){return Wu(this.options,E),E.touchAction&&this.touchAction.update(),E.inputTarget&&(this.input.destroy(),this.input.target=E.inputTarget,this.input.init()),this},S.stop=function(E){this.session.stopped=E?2:1},S.recognize=function(E){var j=this.session;if(!j.stopped){var W;this.touchAction.preventDefaults(E);var U=this.recognizers,ie=j.curRecognizer;(!ie||ie&&8&ie.state)&&(j.curRecognizer=null,ie=null);for(var oe=0;oe0)for(var P=0;P0)for(var me=0;me")||s.parseStartTag("ital","")||s.parseStartTag("mono","")||s.parseEndTag("bold","")||s.parseEndTag("ital","")||s.parseEndTag("mono",""))||u(f)||s.add(f),s.position++}return s.emitBlock(),s.blocks}},{key:"splitMarkdownBlocks",value:function(a){for(var s=this,u=new O0(a),f=!0,m=function(P){return!!/\\/.test(P)&&(u.positionthis.parent.fontOptions.maxWdt}},{key:"getLongestFit",value:function(a){for(var s="",u=0;u1&&arguments[1]!==void 0?arguments[1]:"normal",u=arguments.length>2&&arguments[2]!==void 0&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,s);for(var f=(a=(a=a.replace(/^( +)/g,"$1\r")).replace(/([^\r][^ ]*)( +)/g,"$1\r$2\r")).split("\r");f.length>0;){var m=this.getLongestFit(f);if(m===0){var b=f[0],P=this.getLongestFitWord(b);this.lines.newLine(Si(b).call(b,0,P),s),f[0]=Si(b).call(b,P)}else{var k=m;f[m-1]===" "?m--:f[k]===" "&&k++;var V=Si(f).call(f,0,m).join("");m==f.length&&u?this.lines.append(V,s):this.lines.newLine(V,s),f=Si(f).call(f,k)}}}}]),p}(),Jc=["bold","ital","boldital","mono"],v4=function(){function p(a,s){var u=arguments.length>2&&arguments[2]!==void 0&&arguments[2];gt(this,p),this.body=a,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(s),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=u}return yt(p,[{key:"setOptions",value:function(a){if(this.elementOptions=a,this.initFontOptions(a.font),w0(a.label)?this.labelDirty=!0:a.label=void 0,a.font!==void 0&&a.font!==null){if(typeof a.font=="string")this.baseSize=this.fontOptions.size;else if(Vn(a.font)==="object"){var s=a.font.size;s!==void 0&&(this.baseSize=s)}}}},{key:"initFontOptions",value:function(a){var s=this;nn(Jc,function(u){s.fontOptions[u]={}}),p.parseFontString(this.fontOptions,a)?this.fontOptions.vadjust=0:nn(a,function(u,f){u!=null&&Vn(u)!=="object"&&(s.fontOptions[f]=u)})}},{key:"constrain",value:function(a){var s={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:"middle"},u=ud(a,"widthConstraint");if(typeof u=="number")s.maxWdt=Number(u),s.minWdt=Number(u);else if(Vn(u)==="object"){var f=ud(a,["widthConstraint","maximum"]);typeof f=="number"&&(s.maxWdt=Number(f));var m=ud(a,["widthConstraint","minimum"]);typeof m=="number"&&(s.minWdt=Number(m))}var b=ud(a,"heightConstraint");if(typeof b=="number")s.minHgt=Number(b);else if(Vn(b)==="object"){var P=ud(a,["heightConstraint","minimum"]);typeof P=="number"&&(s.minHgt=Number(P));var k=ud(a,["heightConstraint","valign"]);typeof k=="string"&&(k!=="top"&&k!=="bottom"||(s.valign=k))}return s}},{key:"update",value:function(a,s){this.setOptions(a,!0),this.propagateFonts(s),jn(this.fontOptions,this.constrain(s)),this.fontOptions.chooser=f4("label",s)}},{key:"adjustSizes",value:function(a){var s=a?a.right+a.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=s,this.fontOptions.minWdt-=s);var u=a?a.top+a.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=u)}},{key:"addFontOptionsToPile",value:function(a,s){for(var u=0;u5&&arguments[5]!==void 0?arguments[5]:"middle";if(this.elementOptions.label!==void 0){var P=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&P=this.elementOptions.scaling.label.maxVisible&&(P=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(a,f,m,s,u,b),this._drawBackground(a),this._drawText(a,s,this.size.yLine,b,P))}}},{key:"_drawBackground",value:function(a){if(this.fontOptions.background!==void 0&&this.fontOptions.background!=="none"){a.fillStyle=this.fontOptions.background;var s=this.getSize();a.fillRect(s.left,s.top,s.width,s.height)}}},{key:"_drawText",value:function(a,s,u){var f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"middle",m=arguments.length>4?arguments[4]:void 0,b=Mo(this._setAlignment(a,s,u,f),2);s=b[0],u=b[1],a.textAlign="left",s-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&(this.fontOptions.valign==="top"&&(u-=(this.size.height-this.size.labelHeight)/2),this.fontOptions.valign==="bottom"&&(u+=(this.size.height-this.size.labelHeight)/2));for(var P=0;P0&&(a.lineWidth=X.strokeWidth,a.strokeStyle=ge,a.lineJoin="round"),a.fillStyle=me,X.strokeWidth>0&&a.strokeText(X.text,s+V,u+X.vadjust),a.fillText(X.text,s+V,u+X.vadjust),V+=X.width}u+=k.height}}}},{key:"_setAlignment",value:function(a,s,u,f){return this.isEdgeLabel&&this.fontOptions.align!=="horizontal"&&this.pointToSelf===!1?(s=0,u=0,this.fontOptions.align==="top"?(a.textBaseline="alphabetic",u-=4):this.fontOptions.align==="bottom"?(a.textBaseline="hanging",u+=4):a.textBaseline="middle"):a.textBaseline=f,[s,u]}},{key:"_getColor",value:function(a,s,u){var f=a||"#000000",m=u||"#ffffff";if(s<=this.elementOptions.scaling.label.drawThreshold){var b=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-s)));f=Ms(f,b),m=Ms(m,b)}return[f,m]}},{key:"getTextSize",value:function(a){var s=arguments.length>1&&arguments[1]!==void 0&&arguments[1],u=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return this._processLabel(a,s,u),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:"getSize",value:function(){var a=this.size.left,s=this.size.top-1;if(this.isEdgeLabel){var u=.5*-this.size.width;switch(this.fontOptions.align){case"middle":a=u,s=.5*-this.size.height;break;case"top":a=u,s=-(this.size.height+2);break;case"bottom":a=u,s=2}}return{left:a,top:s,width:this.size.width,height:this.size.height}}},{key:"calculateLabelSize",value:function(a,s,u){var f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,m=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0,b=arguments.length>5&&arguments[5]!==void 0?arguments[5]:"middle";this._processLabel(a,s,u),this.size.left=f-.5*this.size.width,this.size.top=m-.5*this.size.height,this.size.yLine=m+.5*(1-this.lineCount)*this.fontOptions.size,b==="hanging"&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:"getFormattingValues",value:function(a,s,u,f){var m=function(k,V,G){return V==="normal"?G==="mod"?"":k[G]:k[V][G]!==void 0?k[V][G]:k[G]},b={color:m(this.fontOptions,f,"color"),size:m(this.fontOptions,f,"size"),face:m(this.fontOptions,f,"face"),mod:m(this.fontOptions,f,"mod"),vadjust:m(this.fontOptions,f,"vadjust"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(s||u)&&(f==="normal"&&this.fontOptions.chooser===!0&&this.elementOptions.labelHighlightBold?b.mod="bold":typeof this.fontOptions.chooser=="function"&&this.fontOptions.chooser(b,this.elementOptions.id,s,u));var P="";return b.mod!==void 0&&b.mod!==""&&(P+=b.mod+" "),P+=b.size+"px "+b.face,a.font=P.replace(/"/g,""),b.font=a.font,b.height=b.size,b}},{key:"differentState",value:function(a,s){return a!==this.selectedState||s!==this.hoverState}},{key:"_processLabelText",value:function(a,s,u,f){return new dg(a,this,s,u).process(f)}},{key:"_processLabel",value:function(a,s,u){if(this.labelDirty!==!1||this.differentState(s,u)){var f=this._processLabelText(a,s,u,this.elementOptions.label);this.fontOptions.minWdt>0&&f.width0&&f.height0&&(this.enableBorderDashes(a,s),a.stroke(),this.disableBorderDashes(a,s)),a.restore()}},{key:"performFill",value:function(a,s){a.save(),a.fillStyle=s.color,this.enableShadow(a,s),Jm(a).call(a),this.disableShadow(a,s),a.restore(),this.performStroke(a,s)}},{key:"_addBoundingBoxMargin",value:function(a){this.boundingBox.left-=a,this.boundingBox.top-=a,this.boundingBox.bottom+=a,this.boundingBox.right+=a}},{key:"_updateBoundingBox",value:function(a,s,u,f,m){u!==void 0&&this.resize(u,f,m),this.left=a-this.width/2,this.top=s-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"updateBoundingBox",value:function(a,s,u,f,m){this._updateBoundingBox(a,s,u,f,m)}},{key:"getDimensionsFromLabel",value:function(a,s,u){this.textSize=this.labelModule.getTextSize(a,s,u);var f=this.textSize.width,m=this.textSize.height;return f===0&&(f=14,m=14),{width:f,height:m}}}]),p}();function _0(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var gd=function(p){xn(s,p);var a=_0(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m))._setMargins(m),b}return yt(s,[{key:"resize",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.needsRefresh(f,m)){var b=this.getDimensionsFromLabel(u,f,m);this.width=b.width+this.margin.right+this.margin.left,this.height=b.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:"draw",value:function(u,f,m,b,P,k){this.resize(u,b,P),this.left=f-this.width/2,this.top=m-this.height/2,this.initContextForDraw(u,k),pf(u,this.left,this.top,this.width,this.height,k.borderRadius),this.performFill(u,k),this.updateBoundingBox(f,m,u,b,P),this.labelModule.draw(u,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,b,P)}},{key:"updateBoundingBox",value:function(u,f,m,b,P){this._updateBoundingBox(u,f,m,b,P);var k=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(k)}},{key:"distanceToBorder",value:function(u,f){u&&this.resize(u);var m=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(f)),Math.abs(this.height/2/Math.sin(f)))+m}}]),s}(Pi);function dl(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var uh=function(p){xn(s,p);var a=dl(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m)).labelOffset=0,b.selected=!1,b}return yt(s,[{key:"setOptions",value:function(u,f,m){this.options=u,f===void 0&&m===void 0||this.setImages(f,m)}},{key:"setImages",value:function(u,f){f&&this.selected?(this.imageObj=f,this.imageObjAlt=u):(this.imageObj=u,this.imageObjAlt=f)}},{key:"switchImages",value:function(u){var f=u&&!this.selected||!u&&this.selected;if(this.selected=u,this.imageObjAlt!==void 0&&f){var m=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=m}}},{key:"_getImagePadding",value:function(){var u={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var f=this.options.imagePadding;Vn(f)=="object"?(u.top=f.top,u.right=f.right,u.bottom=f.bottom,u.left=f.left):(u.top=f,u.right=f,u.bottom=f,u.left=f)}return u}},{key:"_resizeImage",value:function(){var u,f;if(this.options.shapeProperties.useImageSize===!1){var m=1,b=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?m=this.imageObj.width/this.imageObj.height:b=this.imageObj.height/this.imageObj.width),u=2*this.options.size*m,f=2*this.options.size*b}else{var P=this._getImagePadding();u=this.imageObj.width+P.left+P.right,f=this.imageObj.height+P.top+P.bottom}this.width=u,this.height=f,this.radius=.5*this.width}},{key:"_drawRawCircle",value:function(u,f,m,b){this.initContextForDraw(u,b),N1(u,f,m,b.size),this.performFill(u,b)}},{key:"_drawImageAtPosition",value:function(u,f){if(this.imageObj.width!=0){u.globalAlpha=f.opacity!==void 0?f.opacity:1,this.enableShadow(u,f);var m=1;this.options.shapeProperties.interpolation===!0&&(m=this.imageObj.width/this.width/this.body.view.scale);var b=this._getImagePadding(),P=this.left+b.left,k=this.top+b.top,V=this.width-b.left-b.right,G=this.height-b.top-b.bottom;this.imageObj.drawImageAtPosition(u,m,P,k,V,G),this.disableShadow(u,f)}}},{key:"_drawImageLabel",value:function(u,f,m,b,P){var k=0;if(this.height!==void 0){k=.5*this.height;var V=this.labelModule.getTextSize(u,b,P);V.lineCount>=1&&(k+=V.height/2)}var G=m+k;this.options.label&&(this.labelOffset=k),this.labelModule.draw(u,f,G,b,P,"hanging")}}]),s}(Pi);function _o(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var k8=function(p){xn(s,p);var a=_o(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m))._setMargins(m),b}return yt(s,[{key:"resize",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.needsRefresh(f,m)){var b=this.getDimensionsFromLabel(u,f,m),P=Math.max(b.width+this.margin.right+this.margin.left,b.height+this.margin.top+this.margin.bottom);this.options.size=P/2,this.width=P,this.height=P,this.radius=this.width/2}}},{key:"draw",value:function(u,f,m,b,P,k){this.resize(u,b,P),this.left=f-this.width/2,this.top=m-this.height/2,this._drawRawCircle(u,f,m,k),this.updateBoundingBox(f,m),this.labelModule.draw(u,this.left+this.textSize.width/2+this.margin.left,m,b,P)}},{key:"updateBoundingBox",value:function(u,f){this.boundingBox.top=f-this.options.size,this.boundingBox.left=u-this.options.size,this.boundingBox.right=u+this.options.size,this.boundingBox.bottom=f+this.options.size}},{key:"distanceToBorder",value:function(u){return u&&this.resize(u),.5*this.width}}]),s}(uh);function LT(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var G2=function(p){xn(s,p);var a=LT(s);function s(u,f,m,b,P){var k;return gt(this,s),(k=a.call(this,u,f,m)).setImages(b,P),k}return yt(s,[{key:"resize",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.imageObj.src===void 0||this.imageObj.width===void 0||this.imageObj.height===void 0){var b=2*this.options.size;return this.width=b,this.height=b,void(this.radius=.5*this.width)}this.needsRefresh(f,m)&&this._resizeImage()}},{key:"draw",value:function(u,f,m,b,P,k){this.switchImages(b),this.resize();var V=f,G=m;this.options.shapeProperties.coordinateOrigin==="top-left"?(this.left=f,this.top=m,V+=this.width/2,G+=this.height/2):(this.left=f-this.width/2,this.top=m-this.height/2),this._drawRawCircle(u,V,G,k),u.save(),u.clip(),this._drawImageAtPosition(u,k),u.restore(),this._drawImageLabel(u,V,G,b,P),this.updateBoundingBox(f,m)}},{key:"updateBoundingBox",value:function(u,f){this.options.shapeProperties.coordinateOrigin==="top-left"?(this.boundingBox.top=f,this.boundingBox.left=u,this.boundingBox.right=u+2*this.options.size,this.boundingBox.bottom=f+2*this.options.size):(this.boundingBox.top=f-this.options.size,this.boundingBox.left=u-this.options.size,this.boundingBox.right=u+this.options.size,this.boundingBox.bottom=f+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:"distanceToBorder",value:function(u){return u&&this.resize(u),.5*this.width}}]),s}(uh);function j8(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var fl=function(p){xn(s,p);var a=j8(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"resize",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover,b=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{size:this.options.size};if(this.needsRefresh(f,m)){var P,k;this.labelModule.getTextSize(u,f,m);var V=2*b.size;this.width=(P=this.customSizeWidth)!==null&&P!==void 0?P:V,this.height=(k=this.customSizeHeight)!==null&&k!==void 0?k:V,this.radius=.5*this.width}}},{key:"_drawShape",value:function(u,f,m,b,P,k,V,G){var X,se=this;return this.resize(u,k,V,G),this.left=b-this.width/2,this.top=P-this.height/2,this.initContextForDraw(u,G),(X=f,Object.prototype.hasOwnProperty.call(By,X)?By[X]:function(me){for(var ge=arguments.length,_e=new Array(ge>1?ge-1:0),Le=1;Le0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),s}(Pi);function mg(p,a){var s=no(p);if(fd){var u=fd(p);a&&(u=ts(u).call(u,function(f){return Qu(p,f).enumerable})),s.push.apply(s,u)}return s}function Xc(p){for(var a=1;a"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var b4=function(p){xn(s,p);var a=T8(s);function s(u,f,m,b){var P;return gt(this,s),(P=a.call(this,u,f,m,b)).ctxRenderer=b,P}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){this.resize(u,b,P,k),this.left=f-this.width/2,this.top=m-this.height/2,u.save();var V=this.ctxRenderer({ctx:u,id:this.options.id,x:f,y:m,state:{selected:b,hover:P},style:Xc({},k),label:this.options.label});if(V.drawNode!=null&&V.drawNode(),u.restore(),V.drawExternalLabel){var G=V.drawExternalLabel;V.drawExternalLabel=function(){u.save(),G(),u.restore()}}return V.nodeDimensions&&(this.customSizeWidth=V.nodeDimensions.width,this.customSizeHeight=V.nodeDimensions.height),V}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(fl);function C8(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var M8=function(p){xn(s,p);var a=C8(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m))._setMargins(m),b}return yt(s,[{key:"resize",value:function(u,f,m){if(this.needsRefresh(f,m)){var b=this.getDimensionsFromLabel(u,f,m).width+this.margin.right+this.margin.left;this.width=b,this.height=b,this.radius=this.width/2}}},{key:"draw",value:function(u,f,m,b,P,k){this.resize(u,b,P),this.left=f-this.width/2,this.top=m-this.height/2,this.initContextForDraw(u,k),B1(u,f-this.width/2,m-this.height/2,this.width,this.height),this.performFill(u,k),this.updateBoundingBox(f,m,u,b,P),this.labelModule.draw(u,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,b,P)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(Pi);function A8(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var R8=function(p){xn(s,p);var a=A8(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){return this._drawShape(u,"diamond",4,f,m,b,P,k)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(fl);function J2(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var D8=function(p){xn(s,p);var a=J2(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){return this._drawShape(u,"circle",2,f,m,b,P,k)}},{key:"distanceToBorder",value:function(u){return u&&this.resize(u),this.options.size}}]),s}(fl);function L8(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var N8=function(p){xn(s,p);var a=L8(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"resize",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.needsRefresh(f,m)){var b=this.getDimensionsFromLabel(u,f,m);this.height=2*b.height,this.width=b.width+b.height,this.radius=.5*this.width}}},{key:"draw",value:function(u,f,m,b,P,k){this.resize(u,b,P),this.left=f-.5*this.width,this.top=m-.5*this.height,this.initContextForDraw(u,k),F1(u,this.left,this.top,this.width,this.height),this.performFill(u,k),this.updateBoundingBox(f,m,u,b,P),this.labelModule.draw(u,f,m,b,P)}},{key:"distanceToBorder",value:function(u,f){u&&this.resize(u);var m=.5*this.width,b=.5*this.height,P=Math.sin(f)*m,k=Math.cos(f)*b;return m*b/Math.sqrt(P*P+k*k)}}]),s}(Pi);function X2(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var NT=function(p){xn(s,p);var a=X2(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m))._setMargins(m),b}return yt(s,[{key:"resize",value:function(u,f,m){this.needsRefresh(f,m)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(u,f,m,b,P,k){var V=this;return this.resize(u,b,P),this.options.icon.size=this.options.icon.size||50,this.left=f-this.width/2,this.top=m-this.height/2,this._icon(u,f,m,b,P,k),{drawExternalLabel:function(){V.options.label!==void 0&&V.labelModule.draw(u,V.left+V.iconSize.width/2+V.margin.left,m+V.height/2+5,b),V.updateBoundingBox(f,m)}}}},{key:"updateBoundingBox",value:function(u,f){this.boundingBox.top=f-.5*this.options.icon.size,this.boundingBox.left=u-.5*this.options.icon.size,this.boundingBox.right=u+.5*this.options.icon.size,this.boundingBox.bottom=f+.5*this.options.icon.size,this.options.label!==void 0&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5))}},{key:"_icon",value:function(u,f,m,b,P,k){var V=Number(this.options.icon.size);this.options.icon.code!==void 0?(u.font=[this.options.icon.weight!=null?this.options.icon.weight:b?"bold":"",(this.options.icon.weight!=null&&b?5:0)+V+"px",this.options.icon.face].join(" "),u.fillStyle=this.options.icon.color||"black",u.textAlign="center",u.textBaseline="middle",this.enableShadow(u,k),u.fillText(this.options.icon.code,f,m),this.disableShadow(u,k)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(Pi);function w4(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var Kc=function(p){xn(s,p);var a=w4(s);function s(u,f,m,b,P){var k;return gt(this,s),(k=a.call(this,u,f,m)).setImages(b,P),k}return yt(s,[{key:"resize",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.imageObj.src===void 0||this.imageObj.width===void 0||this.imageObj.height===void 0){var b=2*this.options.size;return this.width=b,void(this.height=b)}this.needsRefresh(f,m)&&this._resizeImage()}},{key:"draw",value:function(u,f,m,b,P,k){u.save(),this.switchImages(b),this.resize();var V=f,G=m;if(this.options.shapeProperties.coordinateOrigin==="top-left"?(this.left=f,this.top=m,V+=this.width/2,G+=this.height/2):(this.left=f-this.width/2,this.top=m-this.height/2),this.options.shapeProperties.useBorderWithImage===!0){var X=this.options.borderWidth,se=this.options.borderWidthSelected||2*this.options.borderWidth,me=(b?se:X)/this.body.view.scale;u.lineWidth=Math.min(this.width,me),u.beginPath();var ge=b?this.options.color.highlight.border:P?this.options.color.hover.border:this.options.color.border,_e=b?this.options.color.highlight.background:P?this.options.color.hover.background:this.options.color.background;k.opacity!==void 0&&(ge=Ms(ge,k.opacity),_e=Ms(_e,k.opacity)),u.strokeStyle=ge,u.fillStyle=_e,u.rect(this.left-.5*u.lineWidth,this.top-.5*u.lineWidth,this.width+u.lineWidth,this.height+u.lineWidth),Jm(u).call(u),this.performStroke(u,k),u.closePath()}this._drawImageAtPosition(u,k),this._drawImageLabel(u,V,G,b,P),this.updateBoundingBox(f,m),u.restore()}},{key:"updateBoundingBox",value:function(u,f){this.resize(),this.options.shapeProperties.coordinateOrigin==="top-left"?(this.left=u,this.top=f):(this.left=u-this.width/2,this.top=f-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,this.options.label!==void 0&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(uh);function FT(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var O4=function(p){xn(s,p);var a=FT(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){return this._drawShape(u,"square",2,f,m,b,P,k)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(fl);function BT(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var F8=function(p){xn(s,p);var a=BT(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){return this._drawShape(u,"hexagon",4,f,m,b,P,k)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(fl);function B8(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var z8=function(p){xn(s,p);var a=B8(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){return this._drawShape(u,"star",4,f,m,b,P,k)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(fl);function zT(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var WT=function(p){xn(s,p);var a=zT(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m))._setMargins(m),b}return yt(s,[{key:"resize",value:function(u,f,m){this.needsRefresh(f,m)&&(this.textSize=this.labelModule.getTextSize(u,f,m),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(u,f,m,b,P,k){this.resize(u,b,P),this.left=f-this.width/2,this.top=m-this.height/2,this.enableShadow(u,k),this.labelModule.draw(u,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,b,P),this.disableShadow(u,k),this.updateBoundingBox(f,m,u,b,P)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(Pi);function W8(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var HT=function(p){xn(s,p);var a=W8(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){return this._drawShape(u,"triangle",3,f,m,b,P,k)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(fl);function VT(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var H8=function(p){xn(s,p);var a=VT(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"draw",value:function(u,f,m,b,P,k){return this._drawShape(u,"triangleDown",3,f,m,b,P,k)}},{key:"distanceToBorder",value:function(u,f){return this._distanceToBorder(u,f)}}]),s}(fl);function V8(p,a){var s=no(p);if(fd){var u=fd(p);a&&(u=ts(u).call(u,function(f){return Qu(p,f).enumerable})),s.push.apply(s,u)}return s}function x4(p){for(var a=1;aa.left&&this.shape.topa.top}},{key:"isBoundingBoxOverlappingWith",value:function(a){return this.shape.boundingBox.lefta.left&&this.shape.boundingBox.topa.top}}],[{key:"checkOpacity",value:function(a){return 0<=a&&a<=1}},{key:"checkCoordinateOrigin",value:function(a){return a===void 0||a==="center"||a==="top-left"}},{key:"updateGroupOptions",value:function(a,s,u){var f;if(u!==void 0){var m=a.group;if(s!==void 0&&s.group!==void 0&&m!==s.group)throw new Error("updateGroupOptions: group values in options don't match.");if(typeof m=="number"||typeof m=="string"&&m!=""){var b=u.get(m);b.opacity!==void 0&&s.opacity===void 0&&(p.checkOpacity(b.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+b.opacity),b.opacity=void 0));var P=ts(f=ah(s)).call(f,function(k){return s[k]!=null});P.push("font"),Qv(P,a,b),a.color=y2(a.color)}}}},{key:"parseOptions",value:function(a,s){var u=arguments.length>2&&arguments[2]!==void 0&&arguments[2],f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},m=arguments.length>4?arguments[4]:void 0;if(Qv(["color","fixed","shadow"],a,s,u),p.checkMass(s),a.opacity!==void 0&&(p.checkOpacity(a.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+a.opacity),a.opacity=void 0)),s.opacity!==void 0&&(p.checkOpacity(s.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+s.opacity),s.opacity=void 0)),s.shapeProperties&&!p.checkCoordinateOrigin(s.shapeProperties.coordinateOrigin)&&console.error("Invalid option for node coordinateOrigin, found: "+s.shapeProperties.coordinateOrigin),As(a,s,"shadow",f),s.color!==void 0&&s.color!==null){var b=y2(s.color);k6(a.color,b)}else u===!0&&s.color===null&&(a.color=ld(f.color));s.fixed!==void 0&&s.fixed!==null&&(typeof s.fixed=="boolean"?(a.fixed.x=s.fixed,a.fixed.y=s.fixed):(s.fixed.x!==void 0&&typeof s.fixed.x=="boolean"&&(a.fixed.x=s.fixed.x),s.fixed.y!==void 0&&typeof s.fixed.y=="boolean"&&(a.fixed.y=s.fixed.y))),u===!0&&s.font===null&&(a.font=ld(f.font)),p.updateGroupOptions(a,s,m),s.scaling!==void 0&&As(a.scaling,s.scaling,"label",f.scaling)}},{key:"checkMass",value:function(a,s){if(a.mass!==void 0&&a.mass<=0){var u="";s!==void 0&&(u=" in node id: "+s),console.error("%cNegative or zero mass disallowed"+u+", setting mass to 1.",w2),a.mass=1}}}]),p}();function $T(p,a){var s=Xp!==void 0&&$p(p)||p["@@iterator"];if(!s){if(Mn(p)||(s=function(k,V){var G;if(k){if(typeof k=="string")return _4(k,V);var X=Si(G=Object.prototype.toString.call(k)).call(G,8,-1);if(X==="Object"&&k.constructor&&(X=k.constructor.name),X==="Map"||X==="Set")return Dc(k);if(X==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(X))return _4(k,V)}}(p))||a&&p&&typeof p.length=="number"){s&&(p=s);var u=0,f=function(){};return{s:f,n:function(){return u>=p.length?{done:!0}:{done:!1,value:p[u++]}},e:function(k){throw k},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m,b=!0,P=!1;return{s:function(){s=s.call(p)},n:function(){var k=s.next();return b=k.done,k},e:function(k){P=!0,m=k},f:function(){try{b||s.return==null||s.return()}finally{if(P)throw m}}}}function _4(p,a){(a==null||a>p.length)&&(a=p.length);for(var s=0,u=new Array(a);s1?console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+a.opacity):this.options.opacity=a.opacity),a.shape!==void 0)for(var s in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,s)&&this.body.nodes[s].updateShape();if(a.font!==void 0||a.widthConstraint!==void 0||a.heightConstraint!==void 0)for(var u=0,f=no(this.body.nodes);u1&&arguments[1]!==void 0&&arguments[1],u=this.body.data.nodes;if(t.isDataViewLike("id",a))this.body.data.nodes=a;else if(Mn(a))this.body.data.nodes=new t.DataSet,this.body.data.nodes.add(a);else{if(a)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new t.DataSet}if(u&&nn(this.nodesListeners,function(b,P){u.off(P,b)}),this.body.nodes={},this.body.data.nodes){var f=this;nn(this.nodesListeners,function(b,P){f.body.data.nodes.on(P,b)});var m=this.body.data.nodes.getIds();this.add(m,!0)}s===!1&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(a){for(var s,u=arguments.length>1&&arguments[1]!==void 0&&arguments[1],f=[],m=0;m1&&arguments[1]!==void 0?arguments[1]:Ra)(a,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:"refresh",value:function(){var a=this,s=arguments.length>0&&arguments[0]!==void 0&&arguments[0];nn(this.body.nodes,function(u,f){var m=a.body.data.nodes.get(f);m!==void 0&&(s===!0&&u.setOptions({x:null,y:null}),u.setOptions({fixed:!1}),u.setOptions(m))})}},{key:"getPositions",value:function(a){var s={};if(a!==void 0){if(Mn(a)===!0){for(var u=0;u0?(u=s/P)*u:s;return P===1/0?1/0:P*JT(f)}});var S0=n(St.Math.hypot);function I4(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var So=function(){function p(){gt(this,p)}return yt(p,null,[{key:"transform",value:function(a,s){Mn(a)||(a=[a]);for(var u=s.point.x,f=s.point.y,m=s.angle,b=s.length,P=0;P4&&arguments[4]!==void 0?arguments[4]:this.getViaNode();a.strokeStyle=this.getColor(a,s),a.lineWidth=s.width,s.dashes!==!1?this._drawDashedLine(a,s,m):this._drawLine(a,s,m)}},{key:"_drawLine",value:function(a,s,u,f,m){if(this.from!=this.to)this._line(a,s,u,f,m);else{var b=Mo(this._getCircleData(a),3),P=b[0],k=b[1],V=b[2];this._circle(a,s,P,k,V)}}},{key:"_drawDashedLine",value:function(a,s,u,f,m){a.lineCap="round";var b=Mn(s.dashes)?s.dashes:[5,5];if(a.setLineDash!==void 0){if(a.save(),a.setLineDash(b),a.lineDashOffset=0,this.from!=this.to)this._line(a,s,u);else{var P=Mo(this._getCircleData(a),3),k=P[0],V=P[1],G=P[2];this._circle(a,s,k,V,G)}a.setLineDash([0]),a.lineDashOffset=0,a.restore()}else{if(this.from!=this.to)z1(a,this.from.x,this.from.y,this.to.x,this.to.y,b);else{var X=Mo(this._getCircleData(a),3),se=X[0],me=X[1],ge=X[2];this._circle(a,s,se,me,ge)}this.enableShadow(a,s),a.stroke(),this.disableShadow(a,s)}}},{key:"findBorderPosition",value:function(a,s,u){return this.from!=this.to?this._findBorderPosition(a,s,u):this._findBorderPositionCircle(a,s,u)}},{key:"findBorderPositions",value:function(a){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,a),to:this._findBorderPosition(this.to,a)};var s,u=Mo(Si(s=this._getCircleData(a)).call(s,0,2),2),f=u[0],m=u[1];return{from:this._findBorderPositionCircle(this.from,a,{x:f,y:m,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,a,{x:f,y:m,low:.6,high:.8,direction:1})}}},{key:"_getCircleData",value:function(a){var s=this.options.selfReference.size;a!==void 0&&this.from.shape.width===void 0&&this.from.shape.resize(a);var u=h4(a,this.options.selfReference.angle,s,this.from);return[u.x,u.y,s]}},{key:"_pointOnCircle",value:function(a,s,u,f){var m=2*f*Math.PI;return{x:a+u*Math.cos(m),y:s-u*Math.sin(m)}}},{key:"_findBorderPositionCircle",value:function(a,s,u){var f,m=u.x,b=u.y,P=u.low,k=u.high,V=u.direction,G=this.options.selfReference.size,X=.5*(P+k),se=0;this.options.arrowStrikethrough===!0&&(V===-1?se=this.options.endPointOffset.from:V===1&&(se=this.options.endPointOffset.to));var me=0;do{X=.5*(P+k),f=this._pointOnCircle(m,b,G,X);var ge=Math.atan2(a.y-f.y,a.x-f.x),_e=a.distanceToBorder(s,ge)+se-Math.sqrt(Math.pow(f.x-a.x,2)+Math.pow(f.y-a.y,2));if(Math.abs(_e)<.05)break;_e>0?V>0?P=X:k=X:V>0?k=X:P=X,++me}while(P<=k&&me<10);return t5(t5({},f),{},{t:X})}},{key:"getLineWidth",value:function(a,s){return a===!0?Math.max(this.selectionWidth,.3/this._body.view.scale):s===!0?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:"getColor",value:function(a,s){if(s.inheritsColor!==!1){if(s.inheritsColor==="both"&&this.from.id!==this.to.id){var u=a.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),f=this.from.options.color.highlight.border,m=this.to.options.color.highlight.border;return this.from.selected===!1&&this.to.selected===!1?(f=Ms(this.from.options.color.border,s.opacity),m=Ms(this.to.options.color.border,s.opacity)):this.from.selected===!0&&this.to.selected===!1?m=this.to.options.color.border:this.from.selected===!1&&this.to.selected===!0&&(f=this.from.options.color.border),u.addColorStop(0,f),u.addColorStop(1,m),u}return s.inheritsColor==="to"?Ms(this.to.options.color.border,s.opacity):Ms(this.from.options.color.border,s.opacity)}return Ms(s.color,s.opacity)}},{key:"_circle",value:function(a,s,u,f,m){this.enableShadow(a,s);var b=0,P=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var k=this.options.selfReference.angle,V=this.options.selfReference.angle+Math.PI,G=this._findBorderPositionCircle(this.from,a,{x:u,y:f,low:k,high:V,direction:-1}),X=this._findBorderPositionCircle(this.from,a,{x:u,y:f,low:k,high:V,direction:1});b=Math.atan2(G.y-f,G.x-u),P=Math.atan2(X.y-f,X.x-u)}a.beginPath(),a.arc(u,f,m,b,P,!1),a.stroke(),this.disableShadow(a,s)}},{key:"getDistanceToEdge",value:function(a,s,u,f,m,b){if(this.from!=this.to)return this._getDistanceToEdge(a,s,u,f,m,b);var P=Mo(this._getCircleData(void 0),3),k=P[0],V=P[1],G=P[2],X=k-m,se=V-b;return Math.abs(Math.sqrt(X*X+se*se)-G)}},{key:"_getDistanceToLine",value:function(a,s,u,f,m,b){var P=u-a,k=f-s,V=((m-a)*P+(b-s)*k)/(P*P+k*k);V>1?V=1:V<0&&(V=0);var G=a+V*P-m,X=s+V*k-b;return Math.sqrt(G*G+X*X)}},{key:"getArrowData",value:function(a,s,u,f,m,b){var P,k,V,G,X,se,me,ge=b.width;s==="from"?(V=this.from,G=this.to,X=b.fromArrowScale<0,se=Math.abs(b.fromArrowScale),me=b.fromArrowType):s==="to"?(V=this.to,G=this.from,X=b.toArrowScale<0,se=Math.abs(b.toArrowScale),me=b.toArrowType):(V=this.to,G=this.from,X=b.middleArrowScale<0,se=Math.abs(b.middleArrowScale),me=b.middleArrowType);var _e=15*se+3*ge;if(V!=G){var Le=_e/S0(V.x-G.x,V.y-G.y);if(s!=="middle")if(this.options.smooth.enabled===!0){var Ue=this._findBorderPosition(V,a,{via:u}),et=this.getPoint(Ue.t+Le*(s==="from"?1:-1),u);P=Math.atan2(Ue.y-et.y,Ue.x-et.x),k=Ue}else P=Math.atan2(V.y-G.y,V.x-G.x),k=this._findBorderPosition(V,a);else{var bt=(X?-Le:Le)/2,It=this.getPoint(.5+bt,u),fr=this.getPoint(.5-bt,u);P=Math.atan2(It.y-fr.y,It.x-fr.x),k=this.getPoint(.5,u)}}else{var jr=Mo(this._getCircleData(a),3),Br=jr[0],gr=jr[1],tr=jr[2];if(s==="from"){var Qn=this.options.selfReference.angle,yn=this.options.selfReference.angle+Math.PI,oo=this._findBorderPositionCircle(this.from,a,{x:Br,y:gr,low:Qn,high:yn,direction:-1});P=-2*oo.t*Math.PI+1.5*Math.PI+.1*Math.PI,k=oo}else if(s==="to"){var Ao=this.options.selfReference.angle,Eo=this.options.selfReference.angle+Math.PI,tc=this._findBorderPositionCircle(this.from,a,{x:Br,y:gr,low:Ao,high:Eo,direction:1});P=-2*tc.t*Math.PI+1.5*Math.PI-1.1*Math.PI,k=tc}else{var Zi=this.options.selfReference.angle/(2*Math.PI);k=this._pointOnCircle(Br,gr,tr,Zi),P=-2*Zi*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:k,core:{x:k.x-.9*_e*Math.cos(P),y:k.y-.9*_e*Math.sin(P)},angle:P,length:_e,type:me}}},{key:"drawArrowHead",value:function(a,s,u,f,m){a.strokeStyle=this.getColor(a,s),a.fillStyle=a.strokeStyle,a.lineWidth=s.width,K8.draw(a,m)&&(this.enableShadow(a,s),Jm(a).call(a),this.disableShadow(a,s))}},{key:"enableShadow",value:function(a,s){s.shadow===!0&&(a.shadowColor=s.shadowColor,a.shadowBlur=s.shadowSize,a.shadowOffsetX=s.shadowX,a.shadowOffsetY=s.shadowY)}},{key:"disableShadow",value:function(a,s){s.shadow===!0&&(a.shadowColor="rgba(0,0,0,0)",a.shadowBlur=0,a.shadowOffsetX=0,a.shadowOffsetY=0)}},{key:"drawBackground",value:function(a,s){if(s.background!==!1){var u={strokeStyle:a.strokeStyle,lineWidth:a.lineWidth,dashes:a.dashes};a.strokeStyle=s.backgroundColor,a.lineWidth=s.backgroundSize,this.setStrokeDashed(a,s.backgroundDashes),a.stroke(),a.strokeStyle=u.strokeStyle,a.lineWidth=u.lineWidth,a.dashes=u.dashes,this.setStrokeDashed(a,s.dashes)}}},{key:"setStrokeDashed",value:function(a,s){if(s!==!1)if(a.setLineDash!==void 0){var u=Mn(s)?s:[5,5];a.setLineDash(u)}else console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.");else a.setLineDash!==void 0?a.setLineDash([]):console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.")}}]),p}();function yd(p,a){var s=no(p);if(fd){var u=fd(p);a&&(u=ts(u).call(u,function(f){return Qu(p,f).enumerable})),s.push.apply(s,u)}return s}function k4(p){for(var a=1;a"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var I0=function(p){xn(s,p);var a=rC(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"_findBorderPositionBezier",value:function(u,f){var m,b,P=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this._getViaCoordinates(),k=!1,V=1,G=0,X=this.to,se=this.options.endPointOffset?this.options.endPointOffset.to:0;u.id===this.from.id&&(X=this.from,k=!0,se=this.options.endPointOffset?this.options.endPointOffset.from:0),this.options.arrowStrikethrough===!1&&(se=0);var me=0;do{b=.5*(G+V),m=this.getPoint(b,P);var ge=Math.atan2(X.y-m.y,X.x-m.x),_e=X.distanceToBorder(f,ge)+se-Math.sqrt(Math.pow(m.x-X.x,2)+Math.pow(m.y-X.y,2));if(Math.abs(_e)<.2)break;_e<0?k===!1?G=b:V=b:k===!1?V=b:G=b,++me}while(G<=V&&me<10);return k4(k4({},m),{},{t:b})}},{key:"_getDistanceToBezierEdge",value:function(u,f,m,b,P,k,V){var G,X,se,me,ge,_e=1e9,Le=u,Ue=f;for(X=1;X<10;X++)se=.1*X,me=Math.pow(1-se,2)*u+2*se*(1-se)*V.x+Math.pow(se,2)*m,ge=Math.pow(1-se,2)*f+2*se*(1-se)*V.y+Math.pow(se,2)*b,X>0&&(_e=(G=this._getDistanceToLine(Le,Ue,me,ge,P,k))<_e?G:_e),Le=me,Ue=ge;return _e}},{key:"_bezierCurve",value:function(u,f,m,b){u.beginPath(),u.moveTo(this.fromPoint.x,this.fromPoint.y),m!=null&&m.x!=null?b!=null&&b.x!=null?u.bezierCurveTo(m.x,m.y,b.x,b.y,this.toPoint.x,this.toPoint.y):u.quadraticCurveTo(m.x,m.y,this.toPoint.x,this.toPoint.y):u.lineTo(this.toPoint.x,this.toPoint.y),this.drawBackground(u,f),this.enableShadow(u,f),u.stroke(),this.disableShadow(u,f)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}}]),s}(Y8);function Q8(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var eI=function(p){xn(s,p);var a=Q8(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m)).via=b.via,b._boundFunction=function(){b.positionBezierNode()},b._body.emitter.on("_repositionBezierNodes",b._boundFunction),b}return yt(s,[{key:"setOptions",value:function(u){vg(zt(s.prototype),"setOptions",this).call(this,u);var f=!1;this.options.physics!==u.physics&&(f=!0),this.options=u,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),f===!0&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:"connect",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.from===void 0||this.to===void 0||this.options.physics===!1||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:"cleanup",value:function(){return this._body.emitter.off("_repositionBezierNodes",this._boundFunction),this.via!==void 0&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}},{key:"setupSupportNode",value:function(){if(this.via===void 0){var u="edgeId:"+this.id,f=this._body.functions.createNode({id:u,shape:"circle",physics:!0,hidden:!0});this._body.nodes[u]=f,this.via=f,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:"positionBezierNode",value:function(){this.via!==void 0&&this.from!==void 0&&this.to!==void 0?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):this.via!==void 0&&(this.via.x=0,this.via.y=0)}},{key:"_line",value:function(u,f,m){this._bezierCurve(u,f,m)}},{key:"_getViaCoordinates",value:function(){return this.via}},{key:"getViaNode",value:function(){return this.via}},{key:"getPoint",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.via;if(this.from===this.to){var m=Mo(this._getCircleData(),3),b=m[0],P=m[1],k=m[2],V=2*Math.PI*(1-u);return{x:b+k*Math.sin(V),y:P+k-k*(1-Math.cos(V))}}return{x:Math.pow(1-u,2)*this.fromPoint.x+2*u*(1-u)*f.x+Math.pow(u,2)*this.toPoint.x,y:Math.pow(1-u,2)*this.fromPoint.y+2*u*(1-u)*f.y+Math.pow(u,2)*this.toPoint.y}}},{key:"_findBorderPosition",value:function(u,f){return this._findBorderPositionBezier(u,f,this.via)}},{key:"_getDistanceToEdge",value:function(u,f,m,b,P,k){return this._getDistanceToBezierEdge(u,f,m,b,P,k,this.via)}}]),s}(I0);function nC(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var j4=function(p){xn(s,p);var a=nC(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"_line",value:function(u,f,m){this._bezierCurve(u,f,m)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_getViaCoordinates",value:function(){var u,f,m=this.options.smooth.roundness,b=this.options.smooth.type,P=Math.abs(this.from.x-this.to.x),k=Math.abs(this.from.y-this.to.y);if(b==="discrete"||b==="diagonalCross"){var V,G;V=G=P<=k?m*k:m*P,this.from.x>this.to.x&&(V=-V),this.from.y>=this.to.y&&(G=-G);var X=this.from.x+V,se=this.from.y+G;return b==="discrete"&&(P<=k?X=Pthis.to.x&&(u=-u),this.from.y>=this.to.y&&(f=-f);var Br=this.from.x+u,gr=this.from.y+f;return P<=k?Br=this.from.x<=this.to.x?this.to.xBr?this.to.x:Br:gr=this.from.y>=this.to.y?this.to.y>gr?this.to.y:gr:this.to.y2&&arguments[2]!==void 0?arguments[2]:{};return this._findBorderPositionBezier(u,f,m.via)}},{key:"_getDistanceToEdge",value:function(u,f,m,b,P,k){var V=arguments.length>6&&arguments[6]!==void 0?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(u,f,m,b,P,k,V)}},{key:"getPoint",value:function(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this._getViaCoordinates(),m=u;return{x:Math.pow(1-m,2)*this.fromPoint.x+2*m*(1-m)*f.x+Math.pow(m,2)*this.toPoint.x,y:Math.pow(1-m,2)*this.fromPoint.y+2*m*(1-m)*f.y+Math.pow(m,2)*this.toPoint.y}}}]),s}(I0);function tI(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var rI=function(p){xn(s,p);var a=tI(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"_getDistanceToBezierEdge2",value:function(u,f,m,b,P,k,V,G){for(var X=1e9,se=u,me=f,ge=[0,0,0,0],_e=1;_e<10;_e++){var Le=.1*_e;ge[0]=Math.pow(1-Le,3),ge[1]=3*Le*Math.pow(1-Le,2),ge[2]=3*Math.pow(Le,2)*(1-Le),ge[3]=Math.pow(Le,3);var Ue=ge[0]*u+ge[1]*V.x+ge[2]*G.x+ge[3]*m,et=ge[0]*f+ge[1]*V.y+ge[2]*G.y+ge[3]*b;if(_e>0){var bt=this._getDistanceToLine(se,me,Ue,et,P,k);X=bt"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var oI=function(p){xn(s,p);var a=nI(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"_line",value:function(u,f,m){var b=m[0],P=m[1];this._bezierCurve(u,f,b,P)}},{key:"_getViaCoordinates",value:function(){var u,f,m,b,P=this.from.x-this.to.x,k=this.from.y-this.to.y,V=this.options.smooth.roundness;return(Math.abs(P)>Math.abs(k)||this.options.smooth.forceDirection===!0||this.options.smooth.forceDirection==="horizontal")&&this.options.smooth.forceDirection!=="vertical"?(f=this.from.y,b=this.to.y,u=this.from.x-V*P,m=this.to.x+V*P):(f=this.from.y-V*k,b=this.to.y+V*k,u=this.from.x,m=this.to.x),[{x:u,y:f},{x:m,y:b}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(u,f){return this._findBorderPositionBezier(u,f)}},{key:"_getDistanceToEdge",value:function(u,f,m,b,P,k){var V=Mo(arguments.length>6&&arguments[6]!==void 0?arguments[6]:this._getViaCoordinates(),2),G=V[0],X=V[1];return this._getDistanceToBezierEdge2(u,f,m,b,P,k,G,X)}},{key:"getPoint",value:function(u){var f=Mo(arguments.length>1&&arguments[1]!==void 0?arguments[1]:this._getViaCoordinates(),2),m=f[0],b=f[1],P=u,k=[Math.pow(1-P,3),3*P*Math.pow(1-P,2),3*Math.pow(P,2)*(1-P),Math.pow(P,3)];return{x:k[0]*this.fromPoint.x+k[1]*m.x+k[2]*b.x+k[3]*this.toPoint.x,y:k[0]*this.fromPoint.y+k[1]*m.y+k[2]*b.y+k[3]*this.toPoint.y}}}]),s}(rI);function iI(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var T4=function(p){xn(s,p);var a=iI(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"_line",value:function(u,f){u.beginPath(),u.moveTo(this.fromPoint.x,this.fromPoint.y),u.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(u,f),u.stroke(),this.disableShadow(u,f)}},{key:"getViaNode",value:function(){}},{key:"getPoint",value:function(u){return{x:(1-u)*this.fromPoint.x+u*this.toPoint.x,y:(1-u)*this.fromPoint.y+u*this.toPoint.y}}},{key:"_findBorderPosition",value:function(u,f){var m=this.to,b=this.from;u.id===this.from.id&&(m=this.from,b=this.to);var P=Math.atan2(m.y-b.y,m.x-b.x),k=m.x-b.x,V=m.y-b.y,G=Math.sqrt(k*k+V*V),X=(G-u.distanceToBorder(f,P))/G;return{x:(1-X)*b.x+X*m.x,y:(1-X)*b.y+X*m.y,t:0}}},{key:"_getDistanceToEdge",value:function(u,f,m,b,P,k){return this._getDistanceToLine(u,f,m,b,P,k)}}]),s}(Y8),E0=function(){function p(a,s,u,f,m){if(gt(this,p),s===void 0)throw new Error("No body provided");this.options=ld(f),this.globalOptions=f,this.defaultOptions=m,this.body=s,this.imagelist=u,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new v4(this.body,this.options,!0),this.setOptions(a)}return yt(p,[{key:"setOptions",value:function(a){if(a){var s=a.physics!==void 0&&this.options.physics!==a.physics||a.hidden!==void 0&&(this.options.hidden||!1)!==(a.hidden||!1)||a.from!==void 0&&this.options.from!==a.from||a.to!==void 0&&this.options.to!==a.to;p.parseOptions(this.options,a,!0,this.globalOptions),a.id!==void 0&&(this.id=a.id),a.from!==void 0&&(this.fromId=a.from),a.to!==void 0&&(this.toId=a.to),a.title!==void 0&&(this.title=a.title),a.value!==void 0&&(a.value=Ls(a.value));var u=[a,this.options,this.defaultOptions];return this.chooser=f4("edge",u),this.updateLabelModule(a),s=this.updateEdgeType()||s,this._setInteractionWidths(),this.connect(),s}}},{key:"getFormattingValues",value:function(){var a=this.options.arrows.to===!0||this.options.arrows.to.enabled===!0,s=this.options.arrows.from===!0||this.options.arrows.from.enabled===!0,u=this.options.arrows.middle===!0||this.options.arrows.middle.enabled===!0,f=this.options.color.inherit,m={toArrow:a,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:u,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:s,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:f?void 0:this.options.color.color,inheritsColor:f,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(this.chooser===!0){if(this.selected){var b=this.options.selectionWidth;typeof b=="function"?m.width=b(m.width):typeof b=="number"&&(m.width+=b),m.width=Math.max(m.width,.3/this.body.view.scale),m.color=this.options.color.highlight,m.shadow=this.options.shadow.enabled}else if(this.hover){var P=this.options.hoverWidth;typeof P=="function"?m.width=P(m.width):typeof P=="number"&&(m.width+=P),m.width=Math.max(m.width,.3/this.body.view.scale),m.color=this.options.color.hover,m.shadow=this.options.shadow.enabled}}else typeof this.chooser=="function"&&(this.chooser(m,this.options.id,this.selected,this.hover),m.color!==void 0&&(m.inheritsColor=!1),m.shadow===!1&&(m.shadowColor===this.options.shadow.color&&m.shadowSize===this.options.shadow.size&&m.shadowX===this.options.shadow.x&&m.shadowY===this.options.shadow.y||(m.shadow=!0)));else m.shadow=this.options.shadow.enabled,m.width=Math.max(m.width,.3/this.body.view.scale);return m}},{key:"updateLabelModule",value:function(a){var s=[a,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,s),this.labelModule.baseSize!==void 0&&(this.baseFontSize=this.labelModule.baseSize)}},{key:"updateEdgeType",value:function(){var a=this.options.smooth,s=!1,u=!0;return this.edgeType!==void 0&&((this.edgeType instanceof eI&&a.enabled===!0&&a.type==="dynamic"||this.edgeType instanceof oI&&a.enabled===!0&&a.type==="cubicBezier"||this.edgeType instanceof j4&&a.enabled===!0&&a.type!=="dynamic"&&a.type!=="cubicBezier"||this.edgeType instanceof T4&&a.type.enabled===!1)&&(u=!1),u===!0&&(s=this.cleanup())),u===!0?a.enabled===!0?a.type==="dynamic"?(s=!0,this.edgeType=new eI(this.options,this.body,this.labelModule)):a.type==="cubicBezier"?this.edgeType=new oI(this.options,this.body,this.labelModule):this.edgeType=new j4(this.options,this.body,this.labelModule):this.edgeType=new T4(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),s}},{key:"connect",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=this.from!==void 0&&this.to!==void 0,this.connected===!0?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:"disconnect",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:"getTitle",value:function(){return this.title}},{key:"isSelected",value:function(){return this.selected}},{key:"getValue",value:function(){return this.options.value}},{key:"setValueRange",value:function(a,s,u){if(this.options.value!==void 0){var f=this.options.scaling.customScalingFunction(a,s,u,this.options.value),m=this.options.scaling.max-this.options.scaling.min;if(this.options.scaling.label.enabled===!0){var b=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+f*b}this.options.width=this.options.scaling.min+f*m}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:"_setInteractionWidths",value:function(){typeof this.options.hoverWidth=="function"?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,typeof this.options.selectionWidth=="function"?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:"draw",value:function(a){var s=this.getFormattingValues();if(!s.hidden){var u=this.edgeType.getViaNode();this.edgeType.drawLine(a,s,this.selected,this.hover,u),this.drawLabel(a,u)}}},{key:"drawArrows",value:function(a){var s=this.getFormattingValues();if(!s.hidden){var u=this.edgeType.getViaNode(),f={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,s.fromArrow&&(f.from=this.edgeType.getArrowData(a,"from",u,this.selected,this.hover,s),s.arrowStrikethrough===!1&&(this.edgeType.fromPoint=f.from.core),s.fromArrowSrc&&(f.from.image=this.imagelist.load(s.fromArrowSrc)),s.fromArrowImageWidth&&(f.from.imageWidth=s.fromArrowImageWidth),s.fromArrowImageHeight&&(f.from.imageHeight=s.fromArrowImageHeight)),s.toArrow&&(f.to=this.edgeType.getArrowData(a,"to",u,this.selected,this.hover,s),s.arrowStrikethrough===!1&&(this.edgeType.toPoint=f.to.core),s.toArrowSrc&&(f.to.image=this.imagelist.load(s.toArrowSrc)),s.toArrowImageWidth&&(f.to.imageWidth=s.toArrowImageWidth),s.toArrowImageHeight&&(f.to.imageHeight=s.toArrowImageHeight)),s.middleArrow&&(f.middle=this.edgeType.getArrowData(a,"middle",u,this.selected,this.hover,s),s.middleArrowSrc&&(f.middle.image=this.imagelist.load(s.middleArrowSrc)),s.middleArrowImageWidth&&(f.middle.imageWidth=s.middleArrowImageWidth),s.middleArrowImageHeight&&(f.middle.imageHeight=s.middleArrowImageHeight)),s.fromArrow&&this.edgeType.drawArrowHead(a,s,this.selected,this.hover,f.from),s.middleArrow&&this.edgeType.drawArrowHead(a,s,this.selected,this.hover,f.middle),s.toArrow&&this.edgeType.drawArrowHead(a,s,this.selected,this.hover,f.to)}}},{key:"drawLabel",value:function(a,s){if(this.options.label!==void 0){var u,f=this.from,m=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(a,this.selected,this.hover),f.id!=m.id){this.labelModule.pointToSelf=!1,u=this.edgeType.getPoint(.5,s),a.save();var b=this._getRotation(a);b.angle!=0&&(a.translate(b.x,b.y),a.rotate(b.angle)),this.labelModule.draw(a,u.x,u.y,this.selected,this.hover),a.restore()}else{this.labelModule.pointToSelf=!0;var P=h4(a,this.options.selfReference.angle,this.options.selfReference.size,f);u=this._pointOnCircle(P.x,P.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(a,u.x,u.y,this.selected,this.hover)}}}},{key:"getItemsOnPoint",value:function(a){var s=[];if(this.labelModule.visible()){var u=this._getRotation();B2(this.labelModule.getSize(),a,u)&&s.push({edgeId:this.id,labelId:0})}var f={left:a.x,top:a.y};return this.isOverlappingWith(f)&&s.push({edgeId:this.id}),s}},{key:"isOverlappingWith",value:function(a){if(this.connected){var s=this.from.x,u=this.from.y,f=this.to.x,m=this.to.y,b=a.left,P=a.top;return this.edgeType.getDistanceToEdge(s,u,f,m,b,P)<10}return!1}},{key:"_getRotation",value:function(a){var s=this.edgeType.getViaNode(),u=this.edgeType.getPoint(.5,s);a!==void 0&&this.labelModule.calculateLabelSize(a,this.selected,this.hover,u.x,u.y);var f={x:u.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible()||this.options.font.align==="horizontal")return f;var m=this.from.y-this.to.y,b=this.from.x-this.to.x,P=Math.atan2(m,b);return(P<-1&&b<0||P>0&&b<0)&&(P+=Math.PI),f.angle=P,f}},{key:"_pointOnCircle",value:function(a,s,u,f){return{x:a+u*Math.cos(f),y:s-u*Math.sin(f)}}},{key:"select",value:function(){this.selected=!0}},{key:"unselect",value:function(){this.selected=!1}},{key:"cleanup",value:function(){return this.edgeType.cleanup()}},{key:"remove",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:"endPointsValid",value:function(){return this.body.nodes[this.fromId]!==void 0&&this.body.nodes[this.toId]!==void 0}}],[{key:"parseOptions",value:function(a,s){var u=arguments.length>2&&arguments[2]!==void 0&&arguments[2],f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},m=arguments.length>4&&arguments[4]!==void 0&&arguments[4];if(Jf(["endPointOffset","arrowStrikethrough","id","from","hidden","hoverWidth","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","selfReference","to","title","value","width","font","chosen","widthConstraint"],a,s,u),s.endPointOffset!==void 0&&s.endPointOffset.from!==void 0&&(Ku(s.endPointOffset.from)?a.endPointOffset.from=s.endPointOffset.from:(a.endPointOffset.from=f.endPointOffset.from!==void 0?f.endPointOffset.from:0,console.error("endPointOffset.from is not a valid number"))),s.endPointOffset!==void 0&&s.endPointOffset.to!==void 0&&(Ku(s.endPointOffset.to)?a.endPointOffset.to=s.endPointOffset.to:(a.endPointOffset.to=f.endPointOffset.to!==void 0?f.endPointOffset.to:0,console.error("endPointOffset.to is not a valid number"))),w0(s.label)?a.label=s.label:w0(a.label)||(a.label=void 0),As(a,s,"smooth",f),As(a,s,"shadow",f),As(a,s,"background",f),s.dashes!==void 0&&s.dashes!==null?a.dashes=s.dashes:u===!0&&s.dashes===null&&(a.dashes=Hu(f.dashes)),s.scaling!==void 0&&s.scaling!==null?(s.scaling.min!==void 0&&(a.scaling.min=s.scaling.min),s.scaling.max!==void 0&&(a.scaling.max=s.scaling.max),As(a.scaling,s.scaling,"label",f.scaling)):u===!0&&s.scaling===null&&(a.scaling=Hu(f.scaling)),s.arrows!==void 0&&s.arrows!==null)if(typeof s.arrows=="string"){var b=s.arrows.toLowerCase();a.arrows.to.enabled=ln(b).call(b,"to")!=-1,a.arrows.middle.enabled=ln(b).call(b,"middle")!=-1,a.arrows.from.enabled=ln(b).call(b,"from")!=-1}else{if(Vn(s.arrows)!=="object")throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+$m(s.arrows));As(a.arrows,s.arrows,"to",f.arrows),As(a.arrows,s.arrows,"middle",f.arrows),As(a.arrows,s.arrows,"from",f.arrows)}else u===!0&&s.arrows===null&&(a.arrows=Hu(f.arrows));if(s.color!==void 0&&s.color!==null){var P=Ql(s.color)?{color:s.color,highlight:s.color,hover:s.color,inherit:!1,opacity:1}:s.color,k=a.color;if(m)jn(k,f.color,!1,u);else for(var V in k)Object.prototype.hasOwnProperty.call(k,V)&&delete k[V];if(Ql(k))k.color=k,k.highlight=k,k.hover=k,k.inherit=!1,P.opacity===void 0&&(k.opacity=1);else{var G=!1;P.color!==void 0&&(k.color=P.color,G=!0),P.highlight!==void 0&&(k.highlight=P.highlight,G=!0),P.hover!==void 0&&(k.hover=P.hover,G=!0),P.inherit!==void 0&&(k.inherit=P.inherit),P.opacity!==void 0&&(k.opacity=Math.min(1,Math.max(0,P.opacity))),G===!0?k.inherit=!1:k.inherit===void 0&&(k.inherit="from")}}else u===!0&&s.color===null&&(a.color=ld(f.color));u===!0&&s.font===null&&(a.font=ld(f.font)),Object.prototype.hasOwnProperty.call(s,"selfReferenceSize")&&(console.warn("The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}"),a.selfReference.size=s.selfReferenceSize)}}]),p}(),oC=function(){function p(a,s,u){var f,m=this;gt(this,p),this.body=a,this.images=s,this.groups=u,this.body.functions.createEdge=at(f=this.create).call(f,this),this.edgesListeners={add:function(b,P){m.add(P.items)},update:function(b,P){m.update(P.items)},remove:function(b,P){m.remove(P.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:"arrow"},middle:{enabled:!1,scaleFactor:1,type:"arrow"},from:{enabled:!1,scaleFactor:1,type:"arrow"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:"#848484",highlight:"#848484",hover:"#848484",inherit:"from",opacity:1},dashes:!1,font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:2,strokeColor:"#ffffff",align:"horizontal",multi:!1,vadjust:0,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"courier new",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(b,P,k,V){if(P===b)return .5;var G=1/(P-b);return Math.max(0,(V-b)*G)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},background:{enabled:!1,color:"rgba(111,111,111,1)",size:10,dashes:!1},smooth:{enabled:!0,type:"dynamic",forceDirection:"none",roundness:.5},title:void 0,width:1,value:void 0},jn(this.options,this.defaultOptions),this.bindEventListeners()}return yt(p,[{key:"bindEventListeners",value:function(){var a,s,u=this;this.body.emitter.on("_forceDisableDynamicCurves",function(f){var m=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];f==="dynamic"&&(f="continuous");var b=!1;for(var P in u.body.edges)if(Object.prototype.hasOwnProperty.call(u.body.edges,P)){var k=u.body.edges[P],V=u.body.data.edges.get(P);if(V!=null){var G=V.smooth;G!==void 0&&G.enabled===!0&&G.type==="dynamic"&&(f===void 0?k.setOptions({smooth:!1}):k.setOptions({smooth:{type:f}}),b=!0)}}m===!0&&b===!0&&u.body.emitter.emit("_dataChanged")}),this.body.emitter.on("_dataUpdated",function(){u.reconnectEdges()}),this.body.emitter.on("refreshEdges",at(a=this.refresh).call(a,this)),this.body.emitter.on("refresh",at(s=this.refresh).call(s,this)),this.body.emitter.on("destroy",function(){nn(u.edgesListeners,function(f,m){u.body.data.edges&&u.body.data.edges.off(m,f)}),delete u.body.functions.createEdge,delete u.edgesListeners.add,delete u.edgesListeners.update,delete u.edgesListeners.remove,delete u.edgesListeners})}},{key:"setOptions",value:function(a){if(a!==void 0){E0.parseOptions(this.options,a,!0,this.defaultOptions,!0);var s=!1;if(a.smooth!==void 0)for(var u in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,u)&&(s=this.body.edges[u].updateEdgeType()||s);if(a.font!==void 0)for(var f in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,f)&&this.body.edges[f].updateLabelModule();a.hidden===void 0&&a.physics===void 0&&s!==!0||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(a){var s=this,u=arguments.length>1&&arguments[1]!==void 0&&arguments[1],f=this.body.data.edges;if(t.isDataViewLike("id",a))this.body.data.edges=a;else if(Mn(a))this.body.data.edges=new t.DataSet,this.body.data.edges.add(a);else{if(a)throw new TypeError("Array or DataSet expected");this.body.data.edges=new t.DataSet}if(f&&nn(this.edgesListeners,function(b,P){f.off(P,b)}),this.body.edges={},this.body.data.edges){nn(this.edgesListeners,function(b,P){s.body.data.edges.on(P,b)});var m=this.body.data.edges.getIds();this.add(m,!0)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),u===!1&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(a){for(var s=arguments.length>1&&arguments[1]!==void 0&&arguments[1],u=this.body.edges,f=this.body.data.edges,m=0;m1&&arguments[1]!==void 0)||arguments[1];if(a.length!==0){var u=this.body.edges;nn(a,function(f){var m=u[f];m!==void 0&&m.remove()}),s&&this.body.emitter.emit("_dataChanged")}}},{key:"refresh",value:function(){var a=this;nn(this.body.edges,function(s,u){var f=a.body.data.edges.get(u);f!==void 0&&s.setOptions(f)})}},{key:"create",value:function(a){return new E0(a,this.body,this.images,this.options,this.defaultOptions)}},{key:"reconnectEdges",value:function(){var a,s=this.body.nodes,u=this.body.edges;for(a in s)Object.prototype.hasOwnProperty.call(s,a)&&(s[a].edges=[]);for(a in u)if(Object.prototype.hasOwnProperty.call(u,a)){var f=u[a];f.from=null,f.to=null,f.connect()}}},{key:"getConnectedNodes",value:function(a){var s=[];if(this.body.edges[a]!==void 0){var u=this.body.edges[a];u.fromId!==void 0&&s.push(u.fromId),u.toId!==void 0&&s.push(u.toId)}return s}},{key:"_updateState",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:"_removeInvalidEdges",value:function(){var a=this,s=[];nn(this.body.edges,function(u,f){var m=a.body.nodes[u.toId],b=a.body.nodes[u.fromId];m!==void 0&&m.isCluster===!0||b!==void 0&&b.isCluster===!0||m!==void 0&&b!==void 0||s.push(f)}),this.remove(s,!1)}},{key:"_addMissingEdges",value:function(){var a=this.body.data.edges;if(a!=null){var s=this.body.edges,u=[];Fn(a).call(a,function(f,m){s[m]===void 0&&u.push(m)}),this.add(u,!0)}}}]),p}(),C4=function(){function p(a,s,u){gt(this,p),this.body=a,this.physicsBody=s,this.barnesHutTree,this.setOptions(u),this._rng=v2("BARNES HUT SOLVER")}return yt(p,[{key:"setOptions",value:function(a){this.options=a,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:"solve",value:function(){if(this.options.gravitationalConstant!==0&&this.physicsBody.physicsNodeIndices.length>0){var a,s=this.body.nodes,u=this.physicsBody.physicsNodeIndices,f=u.length,m=this._formBarnesHutTree(s,u);this.barnesHutTree=m;for(var b=0;b0&&this._getForceContributions(m.root,a)}}},{key:"_getForceContributions",value:function(a,s){this._getForceContribution(a.children.NW,s),this._getForceContribution(a.children.NE,s),this._getForceContribution(a.children.SW,s),this._getForceContribution(a.children.SE,s)}},{key:"_getForceContribution",value:function(a,s){if(a.childrenCount>0){var u=a.centerOfMass.x-s.x,f=a.centerOfMass.y-s.y,m=Math.sqrt(u*u+f*f);m*a.calcSize>this.thetaInversed?this._calculateForces(m,u,f,s,a):a.childrenCount===4?this._getForceContributions(a,s):a.children.data.id!=s.id&&this._calculateForces(m,u,f,s,a)}}},{key:"_calculateForces",value:function(a,s,u,f,m){a===0&&(s=a=.1),this.overlapAvoidanceFactor<1&&f.shape.radius&&(a=Math.max(.1+this.overlapAvoidanceFactor*f.shape.radius,a-f.shape.radius));var b=this.options.gravitationalConstant*m.mass*f.options.mass/Math.pow(a,3),P=s*b,k=u*b;this.physicsBody.forces[f.id].x+=P,this.physicsBody.forces[f.id].y+=k}},{key:"_formBarnesHutTree",value:function(a,s){for(var u,f=s.length,m=a[s[0]].x,b=a[s[0]].y,P=a[s[0]].x,k=a[s[0]].y,V=1;V0&&(XP&&(P=X),sek&&(k=se))}var me=Math.abs(P-m)-Math.abs(k-b);me>0?(b-=.5*me,k+=.5*me):(m+=.5*me,P-=.5*me);var ge=Math.max(1e-5,Math.abs(P-m)),_e=.5*ge,Le=.5*(m+P),Ue=.5*(b+k),et={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:Le-_e,maxX:Le+_e,minY:Ue-_e,maxY:Ue+_e},size:ge,calcSize:1/ge,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(et.root);for(var bt=0;bt0&&this._placeInTree(et.root,u);return et}},{key:"_updateBranchMass",value:function(a,s){var u=a.centerOfMass,f=a.mass+s.options.mass,m=1/f;u.x=u.x*a.mass+s.x*s.options.mass,u.x*=m,u.y=u.y*a.mass+s.y*s.options.mass,u.y*=m,a.mass=f;var b=Math.max(Math.max(s.height,s.radius),s.width);a.maxWidth=a.maxWidths.x?m.maxY>s.y?"NW":"SW":m.maxY>s.y?"NE":"SE",this._placeInRegion(a,s,f)}},{key:"_placeInRegion",value:function(a,s,u){var f=a.children[u];switch(f.childrenCount){case 0:f.children.data=s,f.childrenCount=1,this._updateBranchMass(f,s);break;case 1:f.children.data.x===s.x&&f.children.data.y===s.y?(s.x+=this._rng(),s.y+=this._rng()):(this._splitBranch(f),this._placeInTree(f,s));break;case 4:this._placeInTree(f,s)}}},{key:"_splitBranch",value:function(a){var s=null;a.childrenCount===1&&(s=a.children.data,a.mass=0,a.centerOfMass.x=0,a.centerOfMass.y=0),a.childrenCount=4,a.children.data=null,this._insertRegion(a,"NW"),this._insertRegion(a,"NE"),this._insertRegion(a,"SW"),this._insertRegion(a,"SE"),s!=null&&this._placeInTree(a,s)}},{key:"_insertRegion",value:function(a,s){var u,f,m,b,P=.5*a.size;switch(s){case"NW":u=a.range.minX,f=a.range.minX+P,m=a.range.minY,b=a.range.minY+P;break;case"NE":u=a.range.minX+P,f=a.range.maxX,m=a.range.minY,b=a.range.minY+P;break;case"SW":u=a.range.minX,f=a.range.minX+P,m=a.range.minY+P,b=a.range.maxY;break;case"SE":u=a.range.minX+P,f=a.range.maxX,m=a.range.minY+P,b=a.range.maxY}a.children[s]={centerOfMass:{x:0,y:0},mass:0,range:{minX:u,maxX:f,minY:m,maxY:b},size:.5*a.size,calcSize:2*a.calcSize,children:{data:null},maxWidth:0,level:a.level+1,childrenCount:0}}},{key:"_debug",value:function(a,s){this.barnesHutTree!==void 0&&(a.lineWidth=1,this._drawBranch(this.barnesHutTree.root,a,s))}},{key:"_drawBranch",value:function(a,s,u){u===void 0&&(u="#FF0000"),a.childrenCount===4&&(this._drawBranch(a.children.NW,s),this._drawBranch(a.children.NE,s),this._drawBranch(a.children.SE,s),this._drawBranch(a.children.SW,s)),s.strokeStyle=u,s.beginPath(),s.moveTo(a.range.minX,a.range.minY),s.lineTo(a.range.maxX,a.range.minY),s.stroke(),s.beginPath(),s.moveTo(a.range.maxX,a.range.minY),s.lineTo(a.range.maxX,a.range.maxY),s.stroke(),s.beginPath(),s.moveTo(a.range.maxX,a.range.maxY),s.lineTo(a.range.minX,a.range.maxY),s.stroke(),s.beginPath(),s.moveTo(a.range.minX,a.range.maxY),s.lineTo(a.range.minX,a.range.minY),s.stroke()}}]),p}(),iC=function(){function p(a,s,u){gt(this,p),this._rng=v2("REPULSION SOLVER"),this.body=a,this.physicsBody=s,this.setOptions(u)}return yt(p,[{key:"setOptions",value:function(a){this.options=a}},{key:"solve",value:function(){for(var a,s,u,f,m,b,P,k,V=this.body.nodes,G=this.physicsBody.physicsNodeIndices,X=this.physicsBody.forces,se=this.options.nodeDistance,me=-2/3/se,ge=0;ge"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var sC=function(p){xn(s,p);var a=aI(s);function s(u,f,m){var b;return gt(this,s),(b=a.call(this,u,f,m))._rng=v2("FORCE ATLAS 2 BASED REPULSION SOLVER"),b}return yt(s,[{key:"_calculateForces",value:function(u,f,m,b,P){u===0&&(f=u=.1*this._rng()),this.overlapAvoidanceFactor<1&&b.shape.radius&&(u=Math.max(.1+this.overlapAvoidanceFactor*b.shape.radius,u-b.shape.radius));var k=b.edges.length+1,V=this.options.gravitationalConstant*P.mass*b.options.mass*k/Math.pow(u,2),G=f*V,X=m*V;this.physicsBody.forces[b.id].x+=G,this.physicsBody.forces[b.id].y+=X}}]),s}(C4);function sI(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var lI=function(p){xn(s,p);var a=sI(s);function s(u,f,m){return gt(this,s),a.call(this,u,f,m)}return yt(s,[{key:"_calculateForces",value:function(u,f,m,b,P){if(u>0){var k=P.edges.length+1,V=this.options.centralGravity*k*P.options.mass;b[P.id].x=f*V,b[P.id].y=m*V}}}]),s}(r5),bd=function(){function p(a){gt(this,p),this.body=a,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:"barnesHut",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},Cn(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return yt(p,[{key:"bindEventListeners",value:function(){var a=this;this.body.emitter.on("initPhysics",function(){a.initPhysics()}),this.body.emitter.on("_layoutFailed",function(){a.layoutFailed=!0}),this.body.emitter.on("resetPhysics",function(){a.stopSimulation(),a.ready=!1}),this.body.emitter.on("disablePhysics",function(){a.physicsEnabled=!1,a.stopSimulation()}),this.body.emitter.on("restorePhysics",function(){a.setOptions(a.options),a.ready===!0&&a.startSimulation()}),this.body.emitter.on("startSimulation",function(){a.ready===!0&&a.startSimulation()}),this.body.emitter.on("stopSimulation",function(){a.stopSimulation()}),this.body.emitter.on("destroy",function(){a.stopSimulation(!1),a.body.emitter.off()}),this.body.emitter.on("_dataChanged",function(){a.updatePhysicsData()})}},{key:"setOptions",value:function(a){if(a!==void 0)if(a===!1)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(a===!0)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,Qv(["stabilization"],this.options,a),As(this.options,a,"stabilization"),a.enabled===void 0&&(this.options.enabled=!0),this.options.enabled===!1&&(this.physicsEnabled=!1,this.stopSimulation());var s=this.options.wind;s&&((typeof s.x!="number"||sg(s.x))&&(s.x=0),(typeof s.y!="number"||sg(s.y))&&(s.y=0)),this.timestep=this.options.timestep}this.init()}},{key:"init",value:function(){var a;this.options.solver==="forceAtlas2Based"?(a=this.options.forceAtlas2Based,this.nodesSolver=new sC(this.body,this.physicsBody,a),this.edgesSolver=new gg(this.body,this.physicsBody,a),this.gravitySolver=new lI(this.body,this.physicsBody,a)):this.options.solver==="repulsion"?(a=this.options.repulsion,this.nodesSolver=new iC(this.body,this.physicsBody,a),this.edgesSolver=new gg(this.body,this.physicsBody,a),this.gravitySolver=new r5(this.body,this.physicsBody,a)):this.options.solver==="hierarchicalRepulsion"?(a=this.options.hierarchicalRepulsion,this.nodesSolver=new M4(this.body,this.physicsBody,a),this.edgesSolver=new aC(this.body,this.physicsBody,a),this.gravitySolver=new r5(this.body,this.physicsBody,a)):(a=this.options.barnesHut,this.nodesSolver=new C4(this.body,this.physicsBody,a),this.edgesSolver=new gg(this.body,this.physicsBody,a),this.gravitySolver=new r5(this.body,this.physicsBody,a)),this.modelOptions=a}},{key:"initPhysics",value:function(){this.physicsEnabled===!0&&this.options.enabled===!0?this.options.stabilization.enabled===!0?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit("fit",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit("fit"))}},{key:"startSimulation",value:function(){var a;this.physicsEnabled===!0&&this.options.enabled===!0?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),this.viewFunction===void 0&&(this.viewFunction=at(a=this.simulationStep).call(a,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}},{key:"stopSimulation",value:function(){var a=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];this.stabilized=!0,a===!0&&this._emitStabilized(),this.viewFunction!==void 0&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,a===!0&&this.body.emitter.emit("_stopRendering"))}},{key:"simulationStep",value:function(){var a=Hm();this.physicsTick(),(Hm()-a<.4*this.simulationInterval||this.runDoubleSpeed===!0)&&this.stabilized===!1&&(this.physicsTick(),this.runDoubleSpeed=!0),this.stabilized===!0&&this.stopSimulation()}},{key:"_emitStabilized",value:function(){var a=this,s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||this.startedStabilization===!0)&&Ta(function(){a.body.emitter.emit("stabilized",{iterations:s}),a.startedStabilization=!1,a.stabilizationIterations=0},0)}},{key:"physicsStep",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:"adjustTimeStep",value:function(){this._evaluateStepQuality()===!0?this.timestep=1.2*this.timestep:this.timestep/1.2.3))return!1;return!0}},{key:"moveNodes",value:function(){for(var a=this.physicsBody.physicsNodeIndices,s=0,u=0,f=0;ff&&(a=a>0?f:-f),a}},{key:"_performStep",value:function(a){var s=this.body.nodes[a],u=this.physicsBody.forces[a];this.options.wind&&(u.x+=this.options.wind.x,u.y+=this.options.wind.y);var f=this.physicsBody.velocities[a];return this.previousStates[a]={x:s.x,y:s.y,vx:f.x,vy:f.y},s.options.fixed.x===!1?(f.x=this.calculateComponentVelocity(f.x,u.x,s.options.mass),s.x+=f.x*this.timestep):(u.x=0,f.x=0),s.options.fixed.y===!1?(f.y=this.calculateComponentVelocity(f.y,u.y,s.options.mass),s.y+=f.y*this.timestep):(u.y=0,f.y=0),Math.sqrt(Math.pow(f.x,2)+Math.pow(f.y,2))}},{key:"_freezeNodes",value:function(){var a=this.body.nodes;for(var s in a)if(Object.prototype.hasOwnProperty.call(a,s)&&a[s].x&&a[s].y){var u=a[s].options.fixed;this.freezeCache[s]={x:u.x,y:u.y},u.x=!0,u.y=!0}}},{key:"_restoreFrozenNodes",value:function(){var a=this.body.nodes;for(var s in a)Object.prototype.hasOwnProperty.call(a,s)&&this.freezeCache[s]!==void 0&&(a[s].options.fixed.x=this.freezeCache[s].x,a[s].options.fixed.y=this.freezeCache[s].y);this.freezeCache={}}},{key:"stabilize",value:function(){var a=this,s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.stabilization.iterations;typeof s!="number"&&(s=this.options.stabilization.iterations,console.error("The stabilize method needs a numeric amount of iterations. Switching to default: ",s)),this.physicsBody.physicsNodeIndices.length!==0?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=s,this.options.stabilization.onlyDynamicEdges===!0&&this._freezeNodes(),this.stabilizationIterations=0,Ta(function(){return a._stabilizationBatch()},0)):this.ready=!0}},{key:"_startStabilizing",value:function(){return this.startedStabilization!==!0&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0,!0)}},{key:"_stabilizationBatch",value:function(){var a=this,s=function(){return a.stabilized===!1&&a.stabilizationIterations1&&arguments[1]!==void 0?arguments[1]:[],f=1e9,m=-1e9,b=1e9,P=-1e9;if(u.length>0)for(var k=0;k(s=a[u[k]]).shape.boundingBox.left&&(b=s.shape.boundingBox.left),Ps.shape.boundingBox.top&&(f=s.shape.boundingBox.top),m1&&arguments[1]!==void 0?arguments[1]:[],f=1e9,m=-1e9,b=1e9,P=-1e9;if(u.length>0)for(var k=0;k(s=a[u[k]]).x&&(b=s.x),Ps.y&&(f=s.y),m"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var cC=function(p){xn(s,p);var a=uI(s);function s(u,f,m,b,P,k){var V;return gt(this,s),(V=a.call(this,u,f,m,b,P,k)).isCluster=!0,V.containedNodes={},V.containedEdges={},V}return yt(s,[{key:"_openChildCluster",value:function(u){var f=this,m=this.body.nodes[u];if(this.containedNodes[u]===void 0)throw new Error("node with id: "+u+" not in current cluster");if(!m.isCluster)throw new Error("node with id: "+u+" is not a cluster");delete this.containedNodes[u],nn(m.edges,function(b){delete f.containedEdges[b.id]}),nn(m.containedNodes,function(b,P){f.containedNodes[P]=b}),m.containedNodes={},nn(m.containedEdges,function(b,P){f.containedEdges[P]=b}),m.containedEdges={},nn(m.edges,function(b){nn(f.edges,function(P){var k,V,G=ln(k=P.clusteringEdgeReplacingIds).call(k,b.id);G!==-1&&(nn(b.clusteringEdgeReplacingIds,function(X){P.clusteringEdgeReplacingIds.push(X),f.body.edges[X].edgeReplacedById=P.id}),Wc(V=P.clusteringEdgeReplacingIds).call(V,G,1))})}),m.edges=[]}}]),s}(Ra),n5=function(){function p(a){var s=this;gt(this,p),this.body=a,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},Cn(this.options,this.defaultOptions),this.body.emitter.on("_resetData",function(){s.clusteredNodes={},s.clusteredEdges={}})}return yt(p,[{key:"clusterByHubsize",value:function(a,s){a===void 0?a=this._getHubSize():Vn(a)==="object"&&(s=this._checkOptions(a),a=this._getHubSize());for(var u=[],f=0;f=a&&u.push(m.id)}for(var b=0;b0&&arguments[0]!==void 0?arguments[0]:{},u=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];if(s.joinCondition===void 0)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");s=this._checkOptions(s);var f={},m={};nn(this.body.nodes,function(b,P){b.options&&s.joinCondition(b.options)===!0&&(f[P]=b,nn(b.edges,function(k){a.clusteredEdges[k.id]===void 0&&(m[k.id]=k)}))}),this._cluster(f,m,s,u)}},{key:"clusterByEdgeCount",value:function(a,s){var u=this,f=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];s=this._checkOptions(s);for(var m,b,P,k=[],V={},G=function(){var me={},ge={},_e=u.body.nodeIndices[X],Le=u.body.nodes[_e];if(V[_e]===void 0){P=0,b=[];for(var Ue=0;Ue0&&no(ge).length>0&&bt===!0){var jr=function(){for(var tr=0;tr1&&arguments[1]!==void 0)||arguments[1];this.clusterByEdgeCount(1,a,s)}},{key:"clusterBridges",value:function(a){var s=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];this.clusterByEdgeCount(2,a,s)}},{key:"clusterByConnection",value:function(a,s){var u,f=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];if(a===void 0)throw new Error("No nodeId supplied to clusterByConnection!");if(this.body.nodes[a]===void 0)throw new Error("The nodeId given to clusterByConnection does not exist!");var m=this.body.nodes[a];(s=this._checkOptions(s,m)).clusterNodeProperties.x===void 0&&(s.clusterNodeProperties.x=m.x),s.clusterNodeProperties.y===void 0&&(s.clusterNodeProperties.y=m.y),s.clusterNodeProperties.fixed===void 0&&(s.clusterNodeProperties.fixed={},s.clusterNodeProperties.fixed.x=m.options.fixed.x,s.clusterNodeProperties.fixed.y=m.options.fixed.y);var b={},P={},k=m.id,V=Da.cloneOptions(m);b[k]=m;for(var G=0;G-1&&(P[et.id]=et)}this._cluster(b,P,s,f)}},{key:"_createClusterEdges",value:function(a,s,u,f){for(var m,b,P,k,V,G,X=no(a),se=[],me=0;me0&&arguments[0]!==void 0?arguments[0]:{};return a.clusterEdgeProperties===void 0&&(a.clusterEdgeProperties={}),a.clusterNodeProperties===void 0&&(a.clusterNodeProperties={}),a}},{key:"_cluster",value:function(a,s,u){var f=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],m=[];for(var b in a)Object.prototype.hasOwnProperty.call(a,b)&&this.clusteredNodes[b]!==void 0&&m.push(b);for(var P=0;Pm?s.x:m,b=s.yP?s.y:P;return{x:.5*(f+m),y:.5*(b+P)}}},{key:"openCluster",value:function(a,s){var u=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];if(a===void 0)throw new Error("No clusterNodeId supplied to openCluster.");var f=this.body.nodes[a];if(f===void 0)throw new Error("The clusterNodeId supplied to openCluster does not exist.");if(f.isCluster!==!0||f.containedNodes===void 0||f.containedEdges===void 0)throw new Error("The node:"+a+" is not a valid cluster.");var m=this.findNode(a),b=ln(m).call(m,a)-1;if(b>=0){var P=m[b];return this.body.nodes[P]._openChildCluster(a),delete this.body.nodes[a],void(u===!0&&this.body.emitter.emit("_dataChanged"))}var k=f.containedNodes,V=f.containedEdges;if(s!==void 0&&s.releaseFunction!==void 0&&typeof s.releaseFunction=="function"){var G={},X={x:f.x,y:f.y};for(var se in k)if(Object.prototype.hasOwnProperty.call(k,se)){var me=this.body.nodes[se];G[se]={x:me.x,y:me.y}}var ge=s.releaseFunction(X,G);for(var _e in k)if(Object.prototype.hasOwnProperty.call(k,_e)){var Le=this.body.nodes[_e];ge[_e]!==void 0&&(Le.x=ge[_e].x===void 0?f.x:ge[_e].x,Le.y=ge[_e].y===void 0?f.y:ge[_e].y)}}else nn(k,function(Zi){Zi.options.fixed.x===!1&&(Zi.x=f.x),Zi.options.fixed.y===!1&&(Zi.y=f.y)});for(var Ue in k)if(Object.prototype.hasOwnProperty.call(k,Ue)){var et=this.body.nodes[Ue];et.vx=f.vx,et.vy=f.vy,et.setOptions({physics:!0}),delete this.clusteredNodes[Ue]}for(var bt=[],It=0;It0&&m<100;){var b=s.pop();if(b!==void 0){var P=this.body.edges[b];if(P!==void 0){m++;var k=P.clusteringEdgeReplacingIds;if(k===void 0)f.push(b);else for(var V=0;Vf&&(f=b.edges.length),a+=b.edges.length,s+=Math.pow(b.edges.length,2),u+=1}a/=u;var P=(s/=u)-Math.pow(a,2),k=Math.sqrt(P),V=Math.floor(a+2*k);return V>f&&(V=f),V}},{key:"_createClusteredEdge",value:function(a,s,u,f,m){var b=Da.cloneOptions(u,"edge");jn(b,f),b.from=a,b.to=s,b.id="clusterEdge:"+P0(),m!==void 0&&jn(b,m);var P=this.body.functions.createEdge(b);return P.clusteringEdgeReplacingIds=[u.id],P.connect(),this.body.edges[P.id]=P,P}},{key:"_clusterEdges",value:function(a,s,u,f){if(s instanceof E0){var m=s,b={};b[m.id]=m,s=b}if(a instanceof Ra){var P=a,k={};k[P.id]=P,a=k}if(u==null)throw new Error("_clusterEdges: parameter clusterNode required");for(var V in f===void 0&&(f=u.clusterEdgeProperties),this._createClusterEdges(a,s,u,f),s)if(Object.prototype.hasOwnProperty.call(s,V)&&this.body.edges[V]!==void 0){var G=this.body.edges[V];this._backupEdgeOptions(G),G.setOptions({physics:!1})}for(var X in a)Object.prototype.hasOwnProperty.call(a,X)&&(this.clusteredNodes[X]={clusterId:u.id,node:this.body.nodes[X]},this.body.nodes[X].setOptions({physics:!1}))}},{key:"_getClusterNodeForNode",value:function(a){if(a!==void 0){var s=this.clusteredNodes[a];if(s!==void 0){var u=s.clusterId;if(u!==void 0)return this.body.nodes[u]}}}},{key:"_filter",value:function(a,s){var u=[];return nn(a,function(f){s(f)&&u.push(f)}),u}},{key:"_updateState",value:function(){var a,s=this,u=[],f={},m=function(G){nn(s.body.nodes,function(X){X.isCluster===!0&&G(X)})};for(a in this.clusteredNodes)Object.prototype.hasOwnProperty.call(this.clusteredNodes,a)&&this.body.nodes[a]===void 0&&u.push(a);m(function(G){for(var X=0;X0}G.endPointsValid()&&se||(f[X]=X)}),m(function(G){nn(f,function(X){delete G.containedEdges[X],nn(G.edges,function(se,me){se.id!==X?se.clusteringEdgeReplacingIds=s._filter(se.clusteringEdgeReplacingIds,function(ge){return!f[ge]}):G.edges[me]=null}),G.edges=s._filter(G.edges,function(se){return se!==null})})}),nn(f,function(G){delete s.clusteredEdges[G]}),nn(f,function(G){delete s.body.edges[G]}),nn(no(this.body.edges),function(G){var X=s.body.edges[G],se=s._isClusteredNode(X.fromId)||s._isClusteredNode(X.toId);if(se!==s._isClusteredEdge(X.id))if(se){var me=s._getClusterNodeForNode(X.fromId);me!==void 0&&s._clusterEdges(s.body.nodes[X.fromId],X,me);var ge=s._getClusterNodeForNode(X.toId);ge!==void 0&&s._clusterEdges(s.body.nodes[X.toId],X,ge)}else delete s._clusterEdges[G],s._restoreEdge(X)});for(var P=!1,k=!0,V=function(){var G=[];m(function(se){var me=no(se.containedNodes).length,ge=se.options.allowSingleNodeCluster===!0;(ge&&me<1||!ge&&me<2)&&G.push(se.id)});for(var X=0;X0,P=P||k};k;)V();P&&this._updateState()}},{key:"_isClusteredNode",value:function(a){return this.clusteredNodes[a]!==void 0}},{key:"_isClusteredEdge",value:function(a){return this.clusteredEdges[a]!==void 0}}]),p}(),R4=function(){function p(a,s){var u;gt(this,p),window!==void 0&&(u=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=u===void 0?function(f){f()}:u,this.body=a,this.canvas=s,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},Cn(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return yt(p,[{key:"bindEventListeners",value:function(){var a,s=this;this.body.emitter.on("dragStart",function(){s.dragging=!0}),this.body.emitter.on("dragEnd",function(){s.dragging=!1}),this.body.emitter.on("zoom",function(){s.zooming=!0,window.clearTimeout(s.zoomTimeoutId),s.zoomTimeoutId=Ta(function(){var u;s.zooming=!1,at(u=s._requestRedraw).call(u,s)()},250)}),this.body.emitter.on("_resizeNodes",function(){s._resizeNodes()}),this.body.emitter.on("_redraw",function(){s.renderingActive===!1&&s._redraw()}),this.body.emitter.on("_blockRedraw",function(){s.allowRedraw=!1}),this.body.emitter.on("_allowRedraw",function(){s.allowRedraw=!0,s.redrawRequested=!1}),this.body.emitter.on("_requestRedraw",at(a=this._requestRedraw).call(a,this)),this.body.emitter.on("_startRendering",function(){s.renderRequests+=1,s.renderingActive=!0,s._startRendering()}),this.body.emitter.on("_stopRendering",function(){s.renderRequests-=1,s.renderingActive=s.renderRequests>0,s.renderTimer=void 0}),this.body.emitter.on("destroy",function(){s.renderRequests=0,s.allowRedraw=!1,s.renderingActive=!1,s.requiresTimeout===!0?clearTimeout(s.renderTimer):window.cancelAnimationFrame(s.renderTimer),s.body.emitter.off()})}},{key:"setOptions",value:function(a){a!==void 0&&Jf(["hideEdgesOnDrag","hideEdgesOnZoom","hideNodesOnDrag"],this.options,a)}},{key:"_requestNextFrame",value:function(a,s){if(typeof window<"u"){var u,f=window;return this.requiresTimeout===!0?u=Ta(a,s):f.requestAnimationFrame&&(u=f.requestAnimationFrame(a)),u}}},{key:"_startRendering",value:function(){var a;this.renderingActive===!0&&this.renderTimer===void 0&&(this.renderTimer=this._requestNextFrame(at(a=this._renderStep).call(a,this),this.simulationInterval))}},{key:"_renderStep",value:function(){this.renderingActive===!0&&(this.renderTimer=void 0,this.requiresTimeout===!0&&this._startRendering(),this._redraw(),this.requiresTimeout===!1&&this._startRendering())}},{key:"redraw",value:function(){this.body.emitter.emit("setSize"),this._redraw()}},{key:"_requestRedraw",value:function(){var a=this;this.redrawRequested!==!0&&this.renderingActive===!1&&this.allowRedraw===!0&&(this.redrawRequested=!0,this._requestNextFrame(function(){a._redraw(!1)},0))}},{key:"_redraw",value:function(){var a=arguments.length>0&&arguments[0]!==void 0&&arguments[0];if(this.allowRedraw===!0){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1;var s={drawExternalLabels:null};this.canvas.frame.canvas.width!==0&&this.canvas.frame.canvas.height!==0||this.canvas.setSize(),this.canvas.setTransform();var u=this.canvas.getContext(),f=this.canvas.frame.canvas.clientWidth,m=this.canvas.frame.canvas.clientHeight;if(u.clearRect(0,0,f,m),this.canvas.frame.clientWidth===0)return;if(u.save(),u.translate(this.body.view.translation.x,this.body.view.translation.y),u.scale(this.body.view.scale,this.body.view.scale),u.beginPath(),this.body.emitter.emit("beforeDrawing",u),u.closePath(),a===!1&&(this.dragging===!1||this.dragging===!0&&this.options.hideEdgesOnDrag===!1)&&(this.zooming===!1||this.zooming===!0&&this.options.hideEdgesOnZoom===!1)&&this._drawEdges(u),this.dragging===!1||this.dragging===!0&&this.options.hideNodesOnDrag===!1){var b=this._drawNodes(u,a).drawExternalLabels;s.drawExternalLabels=b}a===!1&&(this.dragging===!1||this.dragging===!0&&this.options.hideEdgesOnDrag===!1)&&(this.zooming===!1||this.zooming===!0&&this.options.hideEdgesOnZoom===!1)&&this._drawArrows(u),s.drawExternalLabels!=null&&s.drawExternalLabels(),a===!1&&this._drawSelectionBox(u),u.beginPath(),this.body.emitter.emit("afterDrawing",u),u.closePath(),u.restore(),a===!0&&u.clearRect(0,0,f,m)}}},{key:"_resizeNodes",value:function(){this.canvas.setTransform();var a=this.canvas.getContext();a.save(),a.translate(this.body.view.translation.x,this.body.view.translation.y),a.scale(this.body.view.scale,this.body.view.scale);var s,u=this.body.nodes;for(var f in u)Object.prototype.hasOwnProperty.call(u,f)&&((s=u[f]).resize(a),s.updateBoundingBox(a,s.selected));a.restore()}},{key:"_drawNodes",value:function(a){for(var s,u,f=arguments.length>1&&arguments[1]!==void 0&&arguments[1],m=this.body.nodes,b=this.body.nodeIndices,P=[],k=[],V=this.canvas.DOMtoCanvas({x:-20,y:-20}),G=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+20,y:this.canvas.frame.canvas.clientHeight+20}),X={top:V.y,left:V.x,bottom:G.y,right:G.x},se=[],me=0;me0&&arguments[0]!==void 0?arguments[0]:this.pixelRatio;this.initialized===!0&&(this.cameraState.previousWidth=this.frame.canvas.width/a,this.cameraState.previousHeight=this.frame.canvas.height/a,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/a,y:.5*this.frame.canvas.height/a}))}},{key:"_setCameraState",value:function(){if(this.cameraState.scale!==void 0&&this.frame.canvas.clientWidth!==0&&this.frame.canvas.clientHeight!==0&&this.pixelRatio!==0&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var a=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,s=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,u=this.cameraState.scale;a!=1&&s!=1?u=.5*this.cameraState.scale*(a+s):a!=1?u=this.cameraState.scale*a:s!=1&&(u=this.cameraState.scale*s),this.body.view.scale=u;var f=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),m={x:f.x-this.cameraState.position.x,y:f.y-this.cameraState.position.y};this.body.view.translation.x+=m.x*this.body.view.scale,this.body.view.translation.y+=m.y*this.body.view.scale}}},{key:"_prepareValue",value:function(a){if(typeof a=="number")return a+"px";if(typeof a=="string"){if(ln(a).call(a,"%")!==-1||ln(a).call(a,"px")!==-1)return a;if(ln(a).call(a,"%")===-1)return a+"px"}throw new Error("Could not use the value supplied for width or height:"+a)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=0,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var a=document.createElement("DIV");a.style.color="red",a.style.fontWeight="bold",a.style.padding="10px",a.innerText="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(a)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var a=this;this.hammer!==void 0&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new Xf(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:Xf.DIRECTION_ALL}),o5(this.hammer,function(s){a.body.eventListeners.onTouch(s)}),this.hammer.on("tap",function(s){a.body.eventListeners.onTap(s)}),this.hammer.on("doubletap",function(s){a.body.eventListeners.onDoubleTap(s)}),this.hammer.on("press",function(s){a.body.eventListeners.onHold(s)}),this.hammer.on("panstart",function(s){a.body.eventListeners.onDragStart(s)}),this.hammer.on("panmove",function(s){a.body.eventListeners.onDrag(s)}),this.hammer.on("panend",function(s){a.body.eventListeners.onDragEnd(s)}),this.hammer.on("pinch",function(s){a.body.eventListeners.onPinch(s)}),this.frame.canvas.addEventListener("wheel",function(s){a.body.eventListeners.onMouseWheel(s)}),this.frame.canvas.addEventListener("mousemove",function(s){a.body.eventListeners.onMouseMove(s)}),this.frame.canvas.addEventListener("contextmenu",function(s){a.body.eventListeners.onContext(s)}),this.hammerFrame=new Xf(this.frame),cI(this.hammerFrame,function(s){a.body.eventListeners.onRelease(s)})}},{key:"setSize",value:function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.width,s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.height;a=this._prepareValue(a),s=this._prepareValue(s);var u=!1,f=this.frame.canvas.width,m=this.frame.canvas.height,b=this.pixelRatio;if(this._setPixelRatio(),a!=this.options.width||s!=this.options.height||this.frame.style.width!=a||this.frame.style.height!=s)this._getCameraState(b),this.frame.style.width=a,this.frame.style.height=s,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=a,this.options.height=s,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},u=!0;else{var P=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),k=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===P&&this.frame.canvas.height===k||this._getCameraState(b),this.frame.canvas.width!==P&&(this.frame.canvas.width=P,u=!0),this.frame.canvas.height!==k&&(this.frame.canvas.height=k,u=!0)}return u===!0&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(f/this.pixelRatio),oldHeight:Math.round(m/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,u}},{key:"getContext",value:function(){return this.frame.canvas.getContext("2d")}},{key:"_determinePixelRatio",value:function(){var a=this.getContext();if(a===void 0)throw new Error("Could not get canvax context");var s=1;return typeof window<"u"&&(s=window.devicePixelRatio||1),s/(a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||a.backingStorePixelRatio||1)}},{key:"_setPixelRatio",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:"setTransform",value:function(){var a=this.getContext();if(a===void 0)throw new Error("Could not get canvax context");a.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:"_XconvertDOMtoCanvas",value:function(a){return(a-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(a){return a*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(a){return(a-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(a){return a*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(a){return{x:this._XconvertCanvasToDOM(a.x),y:this._YconvertCanvasToDOM(a.y)}}},{key:"DOMtoCanvas",value:function(a){return{x:this._XconvertDOMtoCanvas(a.x),y:this._YconvertDOMtoCanvas(a.y)}}}]),p}(),fC=function(){function p(a,s){var u,f,m=this;gt(this,p),this.body=a,this.canvas=s,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on("fit",at(u=this.fit).call(u,this)),this.body.emitter.on("animationFinished",function(){m.body.emitter.emit("_stopRendering")}),this.body.emitter.on("unlockNode",at(f=this.releaseNode).call(f,this))}return yt(p,[{key:"setOptions",value:function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.options=a}},{key:"fit",value:function(a){var s=arguments.length>1&&arguments[1]!==void 0&&arguments[1];a=function(se,me){var ge=Cn({nodes:me,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},se??{});if(!Mn(ge.nodes))throw new TypeError("Nodes has to be an array of ids.");if(ge.nodes.length===0&&(ge.nodes=me),!(typeof ge.minZoomLevel=="number"&&ge.minZoomLevel>0))throw new TypeError("Min zoom level has to be a number higher than zero.");if(!(typeof ge.maxZoomLevel=="number"&&ge.minZoomLevel<=ge.maxZoomLevel))throw new TypeError("Max zoom level has to be a number higher than min zoom level.");return ge}(a,this.body.nodeIndices);var u,f,m=this.canvas.frame.canvas.clientWidth,b=this.canvas.frame.canvas.clientHeight;if(m===0||b===0)f=1,u=Da.getRange(this.body.nodes,a.nodes);else if(s===!0){var P=0;for(var k in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,k)&&this.body.nodes[k].predefinedPosition===!0&&(P+=1);if(P>.5*this.body.nodeIndices.length)return void this.fit(a,!1);u=Da.getRange(this.body.nodes,a.nodes),f=12.662/(this.body.nodeIndices.length+7.4147)+.0964822,f*=Math.min(m/600,b/600)}else{this.body.emitter.emit("_resizeNodes"),u=Da.getRange(this.body.nodes,a.nodes);var V=m/(1.1*Math.abs(u.maxX-u.minX)),G=b/(1.1*Math.abs(u.maxY-u.minY));f=V<=G?V:G}f>a.maxZoomLevel?f=a.maxZoomLevel:f1&&arguments[1]!==void 0?arguments[1]:{};if(this.body.nodes[a]!==void 0){var u={x:this.body.nodes[a].x,y:this.body.nodes[a].y};s.position=u,s.lockedOnNode=a,this.moveTo(s)}else console.error("Node: "+a+" cannot be found.")}},{key:"moveTo",value:function(a){if(a!==void 0){if(a.offset!=null){if(a.offset.x!=null){if(a.offset.x=+a.offset.x,!Ku(a.offset.x))throw new TypeError('The option "offset.x" has to be a finite number.')}else a.offset.x=0;if(a.offset.y!=null){if(a.offset.y=+a.offset.y,!Ku(a.offset.y))throw new TypeError('The option "offset.y" has to be a finite number.')}else a.offset.x=0}else a.offset={x:0,y:0};if(a.position!=null){if(a.position.x!=null){if(a.position.x=+a.position.x,!Ku(a.position.x))throw new TypeError('The option "position.x" has to be a finite number.')}else a.position.x=0;if(a.position.y!=null){if(a.position.y=+a.position.y,!Ku(a.position.y))throw new TypeError('The option "position.y" has to be a finite number.')}else a.position.x=0}else a.position=this.getViewPosition();if(a.scale!=null){if(a.scale=+a.scale,!(a.scale>0))throw new TypeError('The option "scale" has to be a number greater than zero.')}else a.scale=this.body.view.scale;a.animation===void 0&&(a.animation={duration:0}),a.animation===!1&&(a.animation={duration:0}),a.animation===!0&&(a.animation={}),a.animation.duration===void 0&&(a.animation.duration=1e3),a.animation.easingFunction===void 0&&(a.animation.easingFunction="easeInOutQuad"),this.animateView(a)}else a={}}},{key:"animateView",value:function(a){if(a!==void 0){this.animationEasingFunction=a.animation.easingFunction,this.releaseNode(),a.locked===!0&&(this.lockedOnNodeId=a.lockedOnNode,this.lockedOnNodeOffset=a.offset),this.easingTime!=0&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=a.scale,this.body.view.scale=this.targetScale;var s,u,f=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),m=f.x-a.position.x,b=f.y-a.position.y;this.targetTranslation={x:this.sourceTranslation.x+m*this.targetScale+a.offset.x,y:this.sourceTranslation.y+b*this.targetScale+a.offset.y},a.animation.duration===0?this.lockedOnNodeId!=null?(this.viewFunction=at(s=this._lockedRedraw).call(s,this),this.body.emitter.on("initRedraw",this.viewFunction)):(this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw")):(this.animationSpeed=1/(60*a.animation.duration*.001)||1/60,this.animationEasingFunction=a.animation.easingFunction,this.viewFunction=at(u=this._transitionRedraw).call(u,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))}}},{key:"_lockedRedraw",value:function(){var a=this.body.nodes[this.lockedOnNodeId].x,s=this.body.nodes[this.lockedOnNodeId].y,u=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),f=u.x-a,m=u.y-s,b=this.body.view.translation,P={x:b.x+f*this.body.view.scale+this.lockedOnNodeOffset.x,y:b.y+m*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=P}},{key:"releaseNode",value:function(){this.lockedOnNodeId!==void 0&&this.viewFunction!==void 0&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:"_transitionRedraw",value:function(){var a=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=a===!0?1:this.easingTime;var s=M6[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*s,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*s,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*s},this.easingTime>=1){var u;this.body.emitter.off("initRedraw",this.viewFunction),this.easingTime=0,this.lockedOnNodeId!=null&&(this.viewFunction=at(u=this._lockedRedraw).call(u,this),this.body.emitter.on("initRedraw",this.viewFunction)),this.body.emitter.emit("animationFinished")}}},{key:"getScale",value:function(){return this.body.view.scale}},{key:"getViewPosition",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),p}();function i5(p){var a,s=p&&p.preventDefault||!1,u=p&&p.container||window,f={},m={keydown:{},keyup:{}},b={};for(a=97;a<=122;a++)b[String.fromCharCode(a)]={code:a-97+65,shift:!1};for(a=65;a<=90;a++)b[String.fromCharCode(a)]={code:a,shift:!0};for(a=0;a<=9;a++)b[""+a]={code:48+a,shift:!1};for(a=1;a<=12;a++)b["F"+a]={code:111+a,shift:!1};for(a=0;a<=9;a++)b["num"+a]={code:96+a,shift:!1};b["num*"]={code:106,shift:!1},b["num+"]={code:107,shift:!1},b["num-"]={code:109,shift:!1},b["num/"]={code:111,shift:!1},b["num."]={code:110,shift:!1},b.left={code:37,shift:!1},b.up={code:38,shift:!1},b.right={code:39,shift:!1},b.down={code:40,shift:!1},b.space={code:32,shift:!1},b.enter={code:13,shift:!1},b.shift={code:16,shift:void 0},b.esc={code:27,shift:!1},b.backspace={code:8,shift:!1},b.tab={code:9,shift:!1},b.ctrl={code:17,shift:!1},b.alt={code:18,shift:!1},b.delete={code:46,shift:!1},b.pageup={code:33,shift:!1},b.pagedown={code:34,shift:!1},b["="]={code:187,shift:!1},b["-"]={code:189,shift:!1},b["]"]={code:221,shift:!1},b["["]={code:219,shift:!1};var P=function(G){V(G,"keydown")},k=function(G){V(G,"keyup")},V=function(G,X){if(m[X][G.keyCode]!==void 0){for(var se=m[X][G.keyCode],me=0;me700&&(this.body.emitter.emit("fit",{duration:700}),this.touchTime=new Date().valueOf())}},{key:"_stopMovement",value:function(){for(var a in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,a)&&(this.body.emitter.off("initRedraw",this.boundFunctions[a]),this.body.emitter.emit("_stopRendering"));this.boundFunctions={}}},{key:"_moveUp",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:"_moveDown",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:"_moveLeft",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:"_moveRight",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:"_zoomIn",value:function(){var a=this.body.view.scale,s=this.body.view.scale*(1+this.options.keyboard.speed.zoom),u=this.body.view.translation,f=s/a,m=(1-f)*this.canvas.canvasViewCenter.x+u.x*f,b=(1-f)*this.canvas.canvasViewCenter.y+u.y*f;this.body.view.scale=s,this.body.view.translation={x:m,y:b},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}},{key:"_zoomOut",value:function(){var a=this.body.view.scale,s=this.body.view.scale/(1+this.options.keyboard.speed.zoom),u=this.body.view.translation,f=s/a,m=(1-f)*this.canvas.canvasViewCenter.x+u.x*f,b=(1-f)*this.canvas.canvasViewCenter.y+u.y*f;this.body.view.scale=s,this.body.view.translation={x:m,y:b},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}},{key:"configureKeyboardBindings",value:function(){var a,s,u,f,m,b,P,k,V,G,X,se,me,ge,_e,Le,Ue,et,bt,It,fr,jr,Br,gr,tr=this;this.keycharm!==void 0&&this.keycharm.destroy(),this.options.keyboard.enabled===!0&&(this.options.keyboard.bindToWindow===!0?this.keycharm=i5({container:window,preventDefault:!0}):this.keycharm=i5({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),this.activated===!0&&(at(a=this.keycharm).call(a,"up",function(){tr.bindToRedraw("_moveUp")},"keydown"),at(s=this.keycharm).call(s,"down",function(){tr.bindToRedraw("_moveDown")},"keydown"),at(u=this.keycharm).call(u,"left",function(){tr.bindToRedraw("_moveLeft")},"keydown"),at(f=this.keycharm).call(f,"right",function(){tr.bindToRedraw("_moveRight")},"keydown"),at(m=this.keycharm).call(m,"=",function(){tr.bindToRedraw("_zoomIn")},"keydown"),at(b=this.keycharm).call(b,"num+",function(){tr.bindToRedraw("_zoomIn")},"keydown"),at(P=this.keycharm).call(P,"num-",function(){tr.bindToRedraw("_zoomOut")},"keydown"),at(k=this.keycharm).call(k,"-",function(){tr.bindToRedraw("_zoomOut")},"keydown"),at(V=this.keycharm).call(V,"[",function(){tr.bindToRedraw("_zoomOut")},"keydown"),at(G=this.keycharm).call(G,"]",function(){tr.bindToRedraw("_zoomIn")},"keydown"),at(X=this.keycharm).call(X,"pageup",function(){tr.bindToRedraw("_zoomIn")},"keydown"),at(se=this.keycharm).call(se,"pagedown",function(){tr.bindToRedraw("_zoomOut")},"keydown"),at(me=this.keycharm).call(me,"up",function(){tr.unbindFromRedraw("_moveUp")},"keyup"),at(ge=this.keycharm).call(ge,"down",function(){tr.unbindFromRedraw("_moveDown")},"keyup"),at(_e=this.keycharm).call(_e,"left",function(){tr.unbindFromRedraw("_moveLeft")},"keyup"),at(Le=this.keycharm).call(Le,"right",function(){tr.unbindFromRedraw("_moveRight")},"keyup"),at(Ue=this.keycharm).call(Ue,"=",function(){tr.unbindFromRedraw("_zoomIn")},"keyup"),at(et=this.keycharm).call(et,"num+",function(){tr.unbindFromRedraw("_zoomIn")},"keyup"),at(bt=this.keycharm).call(bt,"num-",function(){tr.unbindFromRedraw("_zoomOut")},"keyup"),at(It=this.keycharm).call(It,"-",function(){tr.unbindFromRedraw("_zoomOut")},"keyup"),at(fr=this.keycharm).call(fr,"[",function(){tr.unbindFromRedraw("_zoomOut")},"keyup"),at(jr=this.keycharm).call(jr,"]",function(){tr.unbindFromRedraw("_zoomIn")},"keyup"),at(Br=this.keycharm).call(Br,"pageup",function(){tr.unbindFromRedraw("_zoomIn")},"keyup"),at(gr=this.keycharm).call(gr,"pagedown",function(){tr.unbindFromRedraw("_zoomOut")},"keyup")))}}]),p}();function k0(p,a){var s=Xp!==void 0&&$p(p)||p["@@iterator"];if(!s){if(Mn(p)||(s=function(k,V){var G;if(k){if(typeof k=="string")return wd(k,V);var X=Si(G=Object.prototype.toString.call(k)).call(G,8,-1);if(X==="Object"&&k.constructor&&(X=k.constructor.name),X==="Map"||X==="Set")return Dc(k);if(X==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(X))return wd(k,V)}}(p))||a&&p&&typeof p.length=="number"){s&&(p=s);var u=0,f=function(){};return{s:f,n:function(){return u>=p.length?{done:!0}:{done:!1,value:p[u++]}},e:function(k){throw k},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m,b=!0,P=!1;return{s:function(){s=s.call(p)},n:function(){var k=s.next();return b=k.done,k},e:function(k){P=!0,m=k},f:function(){try{b||s.return==null||s.return()}finally{if(P)throw m}}}}function wd(p,a){(a==null||a>p.length)&&(a=p.length);for(var s=0,u=new Array(a);s50&&(this.drag.pointer=this.getPointer(a.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=new Date().valueOf())}},{key:"onTap",value:function(a){var s=this.getPointer(a.center),u=this.selectionHandler.options.multiselect&&(a.changedPointers[0].ctrlKey||a.changedPointers[0].metaKey);this.checkSelectionChanges(s,u),this.selectionHandler.commitAndEmit(s,a),this.selectionHandler.generateClickEvent("click",a,s)}},{key:"onDoubleTap",value:function(a){var s=this.getPointer(a.center);this.selectionHandler.generateClickEvent("doubleClick",a,s)}},{key:"onHold",value:function(a){var s=this.getPointer(a.center),u=this.selectionHandler.options.multiselect;this.checkSelectionChanges(s,u),this.selectionHandler.commitAndEmit(s,a),this.selectionHandler.generateClickEvent("click",a,s),this.selectionHandler.generateClickEvent("hold",a,s)}},{key:"onRelease",value:function(a){if(new Date().valueOf()-this.touchTime>10){var s=this.getPointer(a.center);this.selectionHandler.generateClickEvent("release",a,s),this.touchTime=new Date().valueOf()}}},{key:"onContext",value:function(a){var s=this.getPointer({x:a.clientX,y:a.clientY});this.selectionHandler.generateClickEvent("oncontext",a,s)}},{key:"checkSelectionChanges",value:function(a){(arguments.length>1&&arguments[1]!==void 0&&arguments[1])===!0?this.selectionHandler.selectAdditionalOnPoint(a):this.selectionHandler.selectOnPoint(a)}},{key:"_determineDifference",value:function(a,s){var u=function(f,m){for(var b=[],P=0;P=m.minX&&G.x<=m.maxX&&G.y>=m.minY&&G.y<=m.maxY});Fn(b).call(b,function(V){return s.selectionHandler.selectObject(s.body.nodes[V])});var P=this.getPointer(a.center);this.selectionHandler.commitAndEmit(P,a),this.selectionHandler.generateClickEvent("dragEnd",a,this.getPointer(a.center),void 0,!0),this.body.emitter.emit("_requestRedraw")}else{var k=this.drag.selection;k&&k.length?(Fn(k).call(k,function(V){V.node.options.fixed.x=V.xFixed,V.node.options.fixed.y=V.yFixed}),this.selectionHandler.generateClickEvent("dragEnd",a,this.getPointer(a.center)),this.body.emitter.emit("startSimulation")):(this.selectionHandler.generateClickEvent("dragEnd",a,this.getPointer(a.center),void 0,!0),this.body.emitter.emit("_requestRedraw"))}}},{key:"onPinch",value:function(a){var s=this.getPointer(a.center);this.drag.pinched=!0,this.pinch.scale===void 0&&(this.pinch.scale=1);var u=this.pinch.scale*a.scale;this.zoom(u,s)}},{key:"zoom",value:function(a,s){if(this.options.zoomView===!0){var u=this.body.view.scale;a<1e-5&&(a=1e-5),a>10&&(a=10);var f=void 0;this.drag!==void 0&&this.drag.dragging===!0&&(f=this.canvas.DOMtoCanvas(this.drag.pointer));var m=this.body.view.translation,b=a/u,P=(1-b)*s.x+m.x*b,k=(1-b)*s.y+m.y*b;if(this.body.view.scale=a,this.body.view.translation={x:P,y:k},f!=null){var V=this.canvas.canvasToDOM(f);this.drag.pointer.x=V.x,this.drag.pointer.y=V.y}this.body.emitter.emit("_requestRedraw"),u0&&(this.popupObj=G[X[X.length-1]],b=!0)}if(this.popupObj===void 0&&b===!1){for(var me,ge=this.body.edgeIndices,_e=this.body.edges,Le=[],Ue=0;Ue0&&(this.popupObj=_e[Le[Le.length-1]],P="edge")}this.popupObj!==void 0?this.popupObj.id!==m&&(this.popup===void 0&&(this.popup=new rT(this.canvas.frame)),this.popup.popupTargetType=P,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(a.x+3,a.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit("showPopup",this.popupObj.id)):this.popup!==void 0&&(this.popup.hide(),this.body.emitter.emit("hidePopup"))}},{key:"_checkHidePopup",value:function(a){var s=this.selectionHandler._pointerToPositionObject(a),u=!1;if(this.popup.popupTargetType==="node"){if(this.body.nodes[this.popup.popupTargetId]!==void 0&&(u=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(s))===!0){var f=this.selectionHandler.getNodeAt(a);u=f!==void 0&&f.id===this.popup.popupTargetId}}else this.selectionHandler.getNodeAt(a)===void 0&&this.body.edges[this.popup.popupTargetId]!==void 0&&(u=this.body.edges[this.popup.popupTargetId].isOverlappingWith(s));u===!1&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit("hidePopup"))}}]),p}();e4("Set",function(p){return function(){return p(this,arguments.length?arguments[0]:void 0)}},a4);var ch=n(St.Set),mC=N,D4=Xu,a5=Qf.getWeakData,L4=qc,vC=xa,gC=Rt,j0=Cr,yC=P2,dI=Yo,$i=el.set,fI=el.getterFor,bC=Fc.find,N4=Fc.findIndex,F4=mC([].splice),s5=0,ph=function(p){return p.frozen||(p.frozen=new l5)},l5=function(){this.entries=[]},hl=function(p,a){return bC(p.entries,function(s){return s[0]===a})};l5.prototype={get:function(p){var a=hl(this,p);if(a)return a[1]},has:function(p){return!!hl(this,p)},set:function(p,a){var s=hl(this,p);s?s[1]=a:this.entries.push([p,a])},delete:function(p){var a=N4(this.entries,function(s){return s[0]===p});return~a&&F4(this.entries,a,1),!!~a}};var T0,B4={getConstructor:function(p,a,s,u){var f=p(function(k,V){L4(k,m),$i(k,{type:a,id:s5++,frozen:void 0}),gC(V)||yC(V,k[u],{that:k,AS_ENTRIES:s})}),m=f.prototype,b=fI(a),P=function(k,V,G){var X=b(k),se=a5(vC(V),!0);return se===!0?ph(X).set(V,G):se[X.id]=G,k};return D4(m,{delete:function(k){var V=b(this);if(!j0(k))return!1;var G=a5(k);return G===!0?ph(V).delete(k):G&&dI(G,V.id)&&delete G[V.id]},has:function(k){var V=b(this);if(!j0(k))return!1;var G=a5(k);return G===!0?ph(V).has(k):G&&dI(G,V.id)}}),D4(m,s?{get:function(k){var V=b(this);if(j0(k)){var G=a5(k);return G===!0?ph(V).get(k):G?G[V.id]:void 0}},set:function(k,V){return P(this,k,V)}}:{add:function(k){return P(this,k,!0)}}),f}},z4=W6,bg=i,dh=N,u5=Xu,wC=Qf,hI=e4,mI=B4,wg=Cr,Og=el.enforce,vI=c,fh=mf,g=Object,S=Array.isArray,E=g.isExtensible,j=g.isFrozen,W=g.isSealed,U=g.freeze,ie=g.seal,oe={},ue={},we=!bg.ActiveXObject&&"ActiveXObject"in bg,Ee=function(p){return function(){return p(this,arguments.length?arguments[0]:void 0)}},je=hI("WeakMap",Ee,mI),Ze=je.prototype,tt=dh(Ze.set);if(fh)if(we){T0=mI.getConstructor(Ee,"WeakMap",!0),wC.enable();var Et=dh(Ze.delete),_t=dh(Ze.has),$t=dh(Ze.get);u5(Ze,{delete:function(p){if(wg(p)&&!E(p)){var a=Og(this);return a.frozen||(a.frozen=new T0),Et(this,p)||a.frozen.delete(p)}return Et(this,p)},has:function(p){if(wg(p)&&!E(p)){var a=Og(this);return a.frozen||(a.frozen=new T0),_t(this,p)||a.frozen.has(p)}return _t(this,p)},get:function(p){if(wg(p)&&!E(p)){var a=Og(this);return a.frozen||(a.frozen=new T0),_t(this,p)?$t(this,p):a.frozen.get(p)}return $t(this,p)},set:function(p,a){if(wg(p)&&!E(p)){var s=Og(this);s.frozen||(s.frozen=new T0),_t(this,p)?tt(this,p,a):s.frozen.set(p,a)}else tt(this,p,a);return this}})}else z4&&vI(function(){var p=U([]);return tt(new je,p,1),!j(p)})&&u5(Ze,{set:function(p,a){var s;return S(p)&&(j(p)?s=oe:W(p)&&(s=ue)),tt(this,p,a),s===oe&&U(p),s===ue&&ie(p),this}});var dr,Wt,hn,gn,$n,Zo=n(St.WeakMap);function mn(p,a,s,u){if(s==="a"&&!u)throw new TypeError("Private accessor was defined without a getter");if(typeof a=="function"?p!==a||!u:!a.has(p))throw new TypeError("Cannot read private member from an object whose class did not declare it");return s==="m"?u:s==="a"?u.call(p):u?u.value:a.get(p)}function da(p,a,s,u,f){if(u==="m")throw new TypeError("Private method is not writable");if(u==="a"&&!f)throw new TypeError("Private accessor was defined without a setter");if(typeof a=="function"?p!==a||!f:!a.has(p))throw new TypeError("Cannot write private member to an object whose class did not declare it");return u==="a"?f.call(p,s):f?f.value=s:a.set(p,s),s}function La(p,a){var s=Xp!==void 0&&$p(p)||p["@@iterator"];if(!s){if(Mn(p)||(s=function(k,V){var G;if(k){if(typeof k=="string")return ep(k,V);var X=Si(G=Object.prototype.toString.call(k)).call(G,8,-1);if(X==="Object"&&k.constructor&&(X=k.constructor.name),X==="Map"||X==="Set")return Dc(k);if(X==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(X))return ep(k,V)}}(p))||a&&p&&typeof p.length=="number"){s&&(p=s);var u=0,f=function(){};return{s:f,n:function(){return u>=p.length?{done:!0}:{done:!1,value:p[u++]}},e:function(k){throw k},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m,b=!0,P=!1;return{s:function(){s=s.call(p)},n:function(){var k=s.next();return b=k.done,k},e:function(k){P=!0,m=k},f:function(){try{b||s.return==null||s.return()}finally{if(P)throw m}}}}function ep(p,a){(a==null||a>p.length)&&(a=p.length);for(var s=0,u=new Array(a);s0&&arguments[0]!==void 0?arguments[0]:function(){};gt(this,p),hn.set(this,new hh),gn.set(this,new hh),$n.set(this,void 0),da(this,$n,a,"f")}return yt(p,[{key:"sizeNodes",get:function(){return mn(this,hn,"f").size}},{key:"sizeEdges",get:function(){return mn(this,gn,"f").size}},{key:"getNodes",value:function(){return mn(this,hn,"f").getSelection()}},{key:"getEdges",value:function(){return mn(this,gn,"f").getSelection()}},{key:"addNodes",value:function(){var a;(a=mn(this,hn,"f")).add.apply(a,arguments)}},{key:"addEdges",value:function(){var a;(a=mn(this,gn,"f")).add.apply(a,arguments)}},{key:"deleteNodes",value:function(a){mn(this,hn,"f").delete(a)}},{key:"deleteEdges",value:function(a){mn(this,gn,"f").delete(a)}},{key:"clear",value:function(){mn(this,hn,"f").clear(),mn(this,gn,"f").clear()}},{key:"commit",value:function(){for(var a,s,u={nodes:mn(this,hn,"f").commit(),edges:mn(this,gn,"f").commit()},f=arguments.length,m=new Array(f),b=0;b=p.length?{done:!0}:{done:!1,value:p[u++]}},e:function(k){throw k},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m,b=!0,P=!1;return{s:function(){s=s.call(p)},n:function(){var k=s.next();return b=k.done,k},e:function(k){P=!0,m=k},f:function(){try{b||s.return==null||s.return()}finally{if(P)throw m}}}}function _g(p,a){(a==null||a>p.length)&&(a=p.length);for(var s=0,u=new Array(a);s4&&arguments[4]!==void 0&&arguments[4],b=this._initBaseEvent(s,u);if(m===!0)b.nodes=[],b.edges=[];else{var P=this.getSelection();b.nodes=P.nodes,b.edges=P.edges}f!==void 0&&(b.previousSelection=f),a=="click"&&(b.items=this.getClickedItems(u)),s.controlEdge!==void 0&&(b.controlEdge=s.controlEdge),this.body.emitter.emit(a,b)}},{key:"selectObject",value:function(a){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.selectConnectedEdges;if(a!==void 0){if(a instanceof Ra){var u;s===!0&&(u=this._selectionAccumulator).addEdges.apply(u,ql(a.edges)),this._selectionAccumulator.addNodes(a)}else this._selectionAccumulator.addEdges(a);return!0}return!1}},{key:"deselectObject",value:function(a){a.isSelected()===!0&&(a.selected=!1,this._removeFromSelection(a))}},{key:"_getAllNodesOverlappingWith",value:function(a){for(var s=[],u=this.body.nodes,f=0;f1&&arguments[1]!==void 0)||arguments[1],u=this._pointerToPositionObject(a),f=this._getAllNodesOverlappingWith(u);return f.length>0?s===!0?this.body.nodes[f[f.length-1]]:f[f.length-1]:void 0}},{key:"_getEdgesOverlappingWith",value:function(a,s){for(var u=this.body.edges,f=0;f1&&arguments[1]!==void 0)||arguments[1],u=this.canvas.DOMtoCanvas(a),f=10,m=null,b=this.body.edges,P=0;P0&&(this.generateClickEvent("deselectEdge",s,a,m),u=!0),f.nodes.deleted.length>0&&(this.generateClickEvent("deselectNode",s,a,m),u=!0),f.nodes.added.length>0&&(this.generateClickEvent("selectNode",s,a),u=!0),f.edges.added.length>0&&(this.generateClickEvent("selectEdge",s,a),u=!0),u===!0&&this.generateClickEvent("select",s,a)}},{key:"getSelection",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:"getSelectedNodes",value:function(){return this._selectionAccumulator.getNodes()}},{key:"getSelectedEdges",value:function(){return this._selectionAccumulator.getEdges()}},{key:"getSelectedNodeIds",value:function(){var a;return Kp(a=this._selectionAccumulator.getNodes()).call(a,function(s){return s.id})}},{key:"getSelectedEdgeIds",value:function(){var a;return Kp(a=this._selectionAccumulator.getEdges()).call(a,function(s){return s.id})}},{key:"setSelection",value:function(a){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!a||!a.nodes&&!a.edges)throw new TypeError("Selection must be an object with nodes and/or edges properties");if((s.unselectAll||s.unselectAll===void 0)&&this.unselectAll(),a.nodes){var u,f=c5(a.nodes);try{for(f.s();!(u=f.n()).done;){var m=u.value,b=this.body.nodes[m];if(!b)throw new RangeError('Node with id "'+m+'" not found');this.selectObject(b,s.highlightEdges)}}catch(X){f.e(X)}finally{f.f()}}if(a.edges){var P,k=c5(a.edges);try{for(k.s();!(P=k.n()).done;){var V=P.value,G=this.body.edges[V];if(!G)throw new RangeError('Edge with id "'+V+'" not found');this.selectObject(G)}}catch(X){k.e(X)}finally{k.f()}}this.body.emitter.emit("_requestRedraw"),this._selectionAccumulator.commit()}},{key:"selectNodes",value:function(a){var s=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];if(!a||a.length===void 0)throw"Selection must be an array with ids";this.setSelection({nodes:a},{highlightEdges:s})}},{key:"selectEdges",value:function(a){if(!a||a.length===void 0)throw"Selection must be an array with ids";this.setSelection({edges:a})}},{key:"updateSelection",value:function(){for(var a in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,a.id)||this._selectionAccumulator.deleteNodes(a);for(var s in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,s.id)||this._selectionAccumulator.deleteEdges(s)}},{key:"getClickedItems",value:function(a){for(var s=this.canvas.DOMtoCanvas(a),u=[],f=this.body.nodeIndices,m=this.body.nodes,b=f.length-1;b>=0;b--){var P=m[f[b]].getItemsOnPoint(s);u.push.apply(u,P)}for(var k=this.body.edgeIndices,V=this.body.edges,G=k.length-1;G>=0;G--){var X=V[k[G]].getItemsOnPoint(s);u.push.apply(u,X)}return u}}]),p}(),p5=Kw,d5=Math.floor,Od=function(p,a){var s=p.length,u=d5(s/2);return s<8?gI(p,a):Sg(p,Od(p5(p,0,u),a),Od(p5(p,u),a),a)},gI=function(p,a){for(var s,u,f=p.length,m=1;m0;)p[u]=p[--u];u!==m++&&(p[u]=s)}return p},Sg=function(p,a,s,u){for(var f=a.length,m=s.length,b=0,P=0;b3)){if(gh)return!0;if($$)return $$<603;var p,a,s,u,f="";for(p=65;p<76;p++){switch(a=String.fromCharCode(p),p){case 66:case 69:case 70:case 72:s=3;break;case 68:case 71:s=4;break;default:s=2}for(u=0;u<47;u++)C0.push({k:a+u,v:s})}for(C0.sort(function(m,b){return b.v-m.v}),u=0;uIo(k)?1:-1}}(p)),s=rr(f),u=0;u=0:P>k;k+=V)k in b&&(f=s(f,b[k],k,m));return f}},AY={left:G$(!1),right:G$(!0)},RY=ee(i.process)==="process",J$=AY.left;Bt({target:"Array",proto:!0,forced:!RY&&ba>79&&ba<83||!Bu("reduce")},{reduce:function(p){var a=arguments.length;return J$(this,p,a,a>1?arguments[1]:void 0)}});var DY=vo("Array").reduce,X$=ir,tu=DY,SC=Array.prototype,LY=function(p){var a=p.reduce;return p===SC||X$(SC,p)&&a===SC.reduce?tu:a},IC=n(LY);function K$(p){var a=function(){if(typeof Reflect>"u"||!Xe||Xe.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Xe(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var s,u=zt(p);if(a){var f=zt(this).constructor;s=Xe(u,arguments,f)}else s=u.apply(this,arguments);return Bn(this,s)}}var EC=function(){function p(){gt(this,p)}return yt(p,[{key:"abstract",value:function(){throw new Error("Can't instantiate abstract class!")}},{key:"fake_use",value:function(){}},{key:"curveType",value:function(){return this.abstract()}},{key:"getPosition",value:function(a){return this.fake_use(a),this.abstract()}},{key:"setPosition",value:function(a,s){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0;this.fake_use(a,s,u),this.abstract()}},{key:"getTreeSize",value:function(a){return this.fake_use(a),this.abstract()}},{key:"sort",value:function(a){this.fake_use(a),this.abstract()}},{key:"fix",value:function(a,s){this.fake_use(a,s),this.abstract()}},{key:"shift",value:function(a,s){this.fake_use(a,s),this.abstract()}}]),p}(),Y$=function(p){xn(s,p);var a=K$(s);function s(u){var f;return gt(this,s),(f=a.call(this)).layout=u,f}return yt(s,[{key:"curveType",value:function(){return"horizontal"}},{key:"getPosition",value:function(u){return u.x}},{key:"setPosition",value:function(u,f){var m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0;m!==void 0&&this.layout.hierarchical.addToOrdering(u,m),u.x=f}},{key:"getTreeSize",value:function(u){var f=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,u);return{min:f.min_x,max:f.max_x}}},{key:"sort",value:function(u){m5(u).call(u,function(f,m){return f.x-m.x})}},{key:"fix",value:function(u,f){u.y=this.layout.options.hierarchical.levelSeparation*f,u.options.fixed.y=!0}},{key:"shift",value:function(u,f){this.layout.body.nodes[u].x+=f}}]),s}(EC),NY=function(p){xn(s,p);var a=K$(s);function s(u){var f;return gt(this,s),(f=a.call(this)).layout=u,f}return yt(s,[{key:"curveType",value:function(){return"vertical"}},{key:"getPosition",value:function(u){return u.y}},{key:"setPosition",value:function(u,f){var m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0;m!==void 0&&this.layout.hierarchical.addToOrdering(u,m),u.y=f}},{key:"getTreeSize",value:function(u){var f=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,u);return{min:f.min_y,max:f.max_y}}},{key:"sort",value:function(u){m5(u).call(u,function(f,m){return f.y-m.y})}},{key:"fix",value:function(u,f){u.x=this.layout.options.hierarchical.levelSeparation*f,u.options.fixed.x=!0}},{key:"shift",value:function(u,f){this.layout.body.nodes[u].y+=f}}]),s}(EC),Q$=Fc.every;Bt({target:"Array",proto:!0,forced:!Bu("every")},{every:function(p){return Q$(this,p,arguments.length>1?arguments[1]:void 0)}});var FY=vo("Array").every,BY=ir,zY=FY,V4=Array.prototype,PC=function(p){var a=p.every;return p===V4||BY(V4,p)&&a===V4.every?zY:a},eZ=n(PC);function kC(p,a){var s=Xp!==void 0&&$p(p)||p["@@iterator"];if(!s){if(Mn(p)||(s=function(k,V){var G;if(k){if(typeof k=="string")return tZ(k,V);var X=Si(G=Object.prototype.toString.call(k)).call(G,8,-1);if(X==="Object"&&k.constructor&&(X=k.constructor.name),X==="Map"||X==="Set")return Dc(k);if(X==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(X))return tZ(k,V)}}(p))||a&&p&&typeof p.length=="number"){s&&(p=s);var u=0,f=function(){};return{s:f,n:function(){return u>=p.length?{done:!0}:{done:!1,value:p[u++]}},e:function(k){throw k},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m,b=!0,P=!1;return{s:function(){s=s.call(p)},n:function(){var k=s.next();return b=k.done,k},e:function(k){P=!0,m=k},f:function(){try{b||s.return==null||s.return()}finally{if(P)throw m}}}}function tZ(p,a){(a==null||a>p.length)&&(a=p.length);for(var s=0,u=new Array(a);s=a[m])&&(a[m]=a[f]+1)}),a}function nZ(p,a,s,u){var f,m,b=Hu(null),P=IC(f=ql(O8(u).call(u))).call(f,function(me,ge){return me+1+ge.edges.length},0),k=s+"Id",V=s==="to"?1:-1,G=kC(u);try{var X,se=function(){var me=Mo(m.value,2),ge=me[0],_e=me[1];if(!u.has(ge)||!p(_e))return 0;b[ge]=0;for(var Le,Ue,et=[_e],bt=0,It=function(){var fr,jr;if(!u.has(ge))return 0;var Br=b[Le.id]+V;if(Fn(fr=ts(jr=Le.edges).call(jr,function(gr){return gr.connected&&gr.to!==gr.from&&gr[s]!==Le&&u.has(gr.toId)&&u.has(gr.fromId)})).call(fr,function(gr){var tr=gr[k],Qn=b[tr];(Qn==null||a(Br,Qn))&&(b[tr]=Br,et.push(gr[s]))}),bt>P)return{v:{v:rZ(u,b)}};++bt};Le=et.pop();)if((Ue=It())!==0&&Ue)return Ue.v};for(G.s();!(m=G.n()).done;)if((X=se())!==0&&X)return X.v}catch(me){G.e(me)}finally{G.f()}return b}var jC=function(){function p(){gt(this,p),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return yt(p,[{key:"addRelation",value:function(a,s){this.childrenReference[a]===void 0&&(this.childrenReference[a]=[]),this.childrenReference[a].push(s),this.parentReference[s]===void 0&&(this.parentReference[s]=[]),this.parentReference[s].push(a)}},{key:"checkIfTree",value:function(){for(var a in this.parentReference)if(this.parentReference[a].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:"numTrees",value:function(){return this.treeIndex+1}},{key:"setTreeIndex",value:function(a,s){s!==void 0&&this.trees[a.id]===void 0&&(this.trees[a.id]=s,this.treeIndex=Math.max(s,this.treeIndex))}},{key:"ensureLevel",value:function(a){this.levels[a]===void 0&&(this.levels[a]=0)}},{key:"getMaxLevel",value:function(a){var s=this,u={};return function f(m){if(u[m]!==void 0)return u[m];var b=s.levels[m];if(s.childrenReference[m]){var P=s.childrenReference[m];if(P.length>0)for(var k=0;k0&&(u.levelSeparation*=-1):u.levelSeparation<0&&(u.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(s);if(f===!0)return this.body.emitter.emit("refresh"),jn(s,this.optionsBackup)}return s}},{key:"_resetRNG",value:function(a){this.initialRandomSeed=a,this._rng=v2(this.initialRandomSeed)}},{key:"adaptAllOptionsForHierarchicalLayout",value:function(a){if(this.options.hierarchical.enabled===!0){var s=this.optionsBackup.physics;a.physics===void 0||a.physics===!0?(a.physics={enabled:s.enabled===void 0||s.enabled,solver:"hierarchicalRepulsion"},s.enabled=s.enabled===void 0||s.enabled,s.solver=s.solver||"barnesHut"):Vn(a.physics)==="object"?(s.enabled=a.physics.enabled===void 0||a.physics.enabled,s.solver=a.physics.solver||"barnesHut",a.physics.solver="hierarchicalRepulsion"):a.physics!==!1&&(s.solver="barnesHut",a.physics={solver:"hierarchicalRepulsion"});var u=this.direction.curveType();if(a.edges===void 0)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},a.edges={smooth:!1};else if(a.edges.smooth===void 0)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},a.edges.smooth=!1;else if(typeof a.edges.smooth=="boolean")this.optionsBackup.edges={smooth:a.edges.smooth},a.edges.smooth={enabled:a.edges.smooth,type:u};else{var f=a.edges.smooth;f.type!==void 0&&f.type!=="dynamic"&&(u=f.type),this.optionsBackup.edges={smooth:{enabled:f.enabled===void 0||f.enabled,type:f.type===void 0?"dynamic":f.type,roundness:f.roundness===void 0?.5:f.roundness,forceDirection:f.forceDirection!==void 0&&f.forceDirection}},a.edges.smooth={enabled:f.enabled===void 0||f.enabled,type:u,roundness:f.roundness===void 0?.5:f.roundness,forceDirection:f.forceDirection!==void 0&&f.forceDirection}}this.body.emitter.emit("_forceDisableDynamicCurves",u)}return a}},{key:"positionInitially",value:function(a){if(this.options.hierarchical.enabled!==!0){this._resetRNG(this.initialRandomSeed);for(var s=a.length+50,u=0;um){for(var P=a.length;a.length>m&&f<=10;){f+=1;var k=a.length;if(f%3==0?this.body.modules.clustering.clusterBridges(b):this.body.modules.clustering.clusterOutliers(b),k==a.length&&f%3!=0)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*P)})}f>10&&console.info("The clustering didn't succeed within the amount of interations allowed, progressing with partial result."),this.body.modules.kamadaKawai.solve(a,this.body.edgeIndices,!0),this._shiftToCenter();for(var V=0;V0){var a,s,u=!1,f=!1;for(s in this.lastNodeOnLevel={},this.hierarchical=new jC,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,s)&&((a=this.body.nodes[s]).options.level!==void 0?(u=!0,this.hierarchical.levels[s]=a.options.level):f=!0);if(f===!0&&u===!0)throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");if(f===!0){var m=this.options.hierarchical.sortMethod;m==="hubsize"?this._determineLevelsByHubsize():m==="directed"?this._determineLevelsDirected():m==="custom"&&this._determineLevelsCustomCallback()}for(var b in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,b)&&this.hierarchical.ensureLevel(b);var P=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(P),this._condenseHierarchy(),this._shiftToCenter()}}},{key:"_condenseHierarchy",value:function(){var a=this,s=!1,u={},f=function(X,se){var me=a.hierarchical.trees;for(var ge in me)Object.prototype.hasOwnProperty.call(me,ge)&&me[ge]===X&&a.direction.shift(ge,se)},m=function(){for(var X=[],se=0;se0)for(var _e=0;_e1&&arguments[1]!==void 0?arguments[1]:1e9,me=1e9,ge=1e9,_e=1e9,Le=-1e9;for(var Ue in X)if(Object.prototype.hasOwnProperty.call(X,Ue)){var et=a.body.nodes[Ue],bt=a.hierarchical.levels[et.id],It=a.direction.getPosition(et),fr=Mo(a._getSpaceAroundNode(et,X),2),jr=fr[0],Br=fr[1];me=Math.min(jr,me),ge=Math.min(Br,ge),bt<=se&&(_e=Math.min(It,_e),Le=Math.max(It,Le))}return[_e,Le,me,ge]},k=function(X,se,me){for(var ge=a.hierarchical,_e=0;_e1)for(var et=0;et2&&arguments[2]!==void 0&&arguments[2],ge=a.direction.getPosition(X),_e=a.direction.getPosition(se),Le=Math.abs(_e-ge),Ue=a.options.hierarchical.nodeSpacing;if(Le>Ue){var et={},bt={};b(X,et),b(se,bt);var It=function(yn,oo){var Ao=a.hierarchical.getMaxLevel(yn.id),Eo=a.hierarchical.getMaxLevel(oo.id);return Math.min(Ao,Eo)}(X,se),fr=P(et,It),jr=P(bt,It),Br=fr[1],gr=jr[0],tr=jr[2];if(Math.abs(Br-gr)>Ue){var Qn=Br-gr+Ue;Qn<-tr+Ue&&(Qn=-tr+Ue),Qn<0&&(a._shiftBlock(se.id,Qn),s=!0,me===!0&&a._centerParent(se))}}},G=function(X,se){for(var me=se.id,ge=se.edges,_e=a.hierarchical.levels[se.id],Le=a.options.hierarchical.levelSeparation*a.options.hierarchical.levelSeparation,Ue={},et=[],bt=0;bt0?SI=Math.min(Zi,tc-a.options.hierarchical.nodeSpacing):Zi<0&&(SI=-Math.min(-Zi,Eo-a.options.hierarchical.nodeSpacing)),SI!=0&&(a._shiftBlock(se.id,SI),s=!0)})(tr),function(Qn){var yn=a.direction.getPosition(se),oo=Mo(a._getSpaceAroundNode(se),2),Ao=oo[0],Eo=oo[1],tc=Qn-yn,Zi=yn;tc>0?Zi=Math.min(yn+(Eo-a.options.hierarchical.nodeSpacing),Qn):tc<0&&(Zi=Math.max(yn-(Ao-a.options.hierarchical.nodeSpacing),Qn)),Zi!==yn&&(a.direction.setPosition(se,Zi),s=!0)}(tr=gr(X,ge))};this.options.hierarchical.blockShifting===!0&&(function(X){var se=a.hierarchical.getLevels();se=Yp(se).call(se);for(var me=0;me0&&Math.abs(se)0&&(V=this.direction.getPosition(f[b-1])+k),this.direction.setPosition(P,V,s),this._validatePositionAndContinue(P,s,V),m++}}}}},{key:"_placeBranchNodes",value:function(a,s){var u,f=this.hierarchical.childrenReference[a];if(f!==void 0){for(var m=[],b=0;bs&&this.positionedNodes[k.id]===void 0))return;var G=this.options.hierarchical.nodeSpacing,X=void 0;X=P===0?this.direction.getPosition(this.body.nodes[a]):this.direction.getPosition(m[P-1])+G,this.direction.setPosition(k,X,V),this._validatePositionAndContinue(k,V,X)}var se=this._getCenterPosition(m);this.direction.setPosition(this.body.nodes[a],se,s)}}},{key:"_validatePositionAndContinue",value:function(a,s,u){if(this.hierarchical.isTree){if(this.lastNodeOnLevel[s]!==void 0){var f=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[s]]);if(u-fm},"from",f)}(u),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:"_generateMap",value:function(){var a=this;this._crawlNetwork(function(s,u){a.hierarchical.levels[u.id]>a.hierarchical.levels[s.id]&&a.hierarchical.addRelation(s.id,u.id)}),this.hierarchical.checkIfTree()}},{key:"_crawlNetwork",value:function(){var a=this,s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(){},u=arguments.length>1?arguments[1]:void 0,f={},m=function G(X,se){if(f[X.id]===void 0){var me;a.hierarchical.setTreeIndex(X,se),f[X.id]=!0;for(var ge=a._getActiveEdges(X),_e=0;_e=p.length?{done:!0}:{done:!1,value:p[u++]}},e:function(k){throw k},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var m,b=!0,P=!1;return{s:function(){s=s.call(p)},n:function(){var k=s.next();return b=k.done,k},e:function(k){P=!0,m=k},f:function(){try{b||s.return==null||s.return()}finally{if(P)throw m}}}}function v5(p,a){(a==null||a>p.length)&&(a=p.length);for(var s=0,u=new Array(a);s0&&this.options.deleteNode!==!1||u===0&&this.options.deleteEdge!==!1)&&(P===!0&&this._createSeperator(4),this._createDeleteButton(b)),this._bindElementEvents(this.closeDiv,at(a=this.toggleEditMode).call(a,this)),this._temporaryBindEvent("select",at(s=this.showManipulatorToolbar).call(s,this))}this.body.emitter.emit("_redraw")}},{key:"addNodeMode",value:function(){var a;if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addNode",this.guiEnabled===!0){var s,u=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(u),this._createSeperator(),this._createDescription(u.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,at(s=this.toggleEditMode).call(s,this))}this._temporaryBindEvent("click",at(a=this._performAddNode).call(a,this))}},{key:"editNode",value:function(){var a=this;this.editMode!==!0&&this.enableEditMode(),this._clean();var s=this.selectionHandler.getSelectedNodes()[0];if(s!==void 0){if(this.inMode="editNode",typeof this.options.editNode!="function")throw new Error("No function has been configured to handle the editing of nodes.");if(s.isCluster!==!0){var u=jn({},s.options,!1);if(u.x=s.x,u.y=s.y,this.options.editNode.length!==2)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(u,function(f){f!=null&&a.inMode==="editNode"&&a.body.data.nodes.getDataSet().update(f),a.showManipulatorToolbar()})}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){var a,s,u,f,m;if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addEdge",this.guiEnabled===!0){var b,P=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(P),this._createSeperator(),this._createDescription(P.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,at(b=this.toggleEditMode).call(b,this))}this._temporaryBindUI("onTouch",at(a=this._handleConnect).call(a,this)),this._temporaryBindUI("onDragEnd",at(s=this._finishConnect).call(s,this)),this._temporaryBindUI("onDrag",at(u=this._dragControlNode).call(u,this)),this._temporaryBindUI("onRelease",at(f=this._finishConnect).call(f,this)),this._temporaryBindUI("onDragStart",at(m=this._dragStartEdge).call(m,this)),this._temporaryBindUI("onHold",function(){})}},{key:"editEdgeMode",value:function(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="editEdge",Vn(this.options.editEdge)!=="object"||typeof this.options.editEdge.editWithoutDrag!="function"||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],this.edgeBeingEditedId===void 0)){if(this.guiEnabled===!0){var a,s=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(s),this._createSeperator(),this._createDescription(s.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,at(a=this.toggleEditMode).call(a,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],this.edgeBeingEditedId!==void 0){var u,f,m,b,P=this.body.edges[this.edgeBeingEditedId],k=this._getNewTargetNode(P.from.x,P.from.y),V=this._getNewTargetNode(P.to.x,P.to.y);this.temporaryIds.nodes.push(k.id),this.temporaryIds.nodes.push(V.id),this.body.nodes[k.id]=k,this.body.nodeIndices.push(k.id),this.body.nodes[V.id]=V,this.body.nodeIndices.push(V.id),this._temporaryBindUI("onTouch",at(u=this._controlNodeTouch).call(u,this)),this._temporaryBindUI("onTap",function(){}),this._temporaryBindUI("onHold",function(){}),this._temporaryBindUI("onDragStart",at(f=this._controlNodeDragStart).call(f,this)),this._temporaryBindUI("onDrag",at(m=this._controlNodeDrag).call(m,this)),this._temporaryBindUI("onDragEnd",at(b=this._controlNodeDragEnd).call(b,this)),this._temporaryBindUI("onMouseMove",function(){}),this._temporaryBindEvent("beforeDrawing",function(X){var se=P.edgeType.findBorderPositions(X);k.selected===!1&&(k.x=se.from.x,k.y=se.from.y),V.selected===!1&&(V.x=se.to.x,V.y=se.to.y)}),this.body.emitter.emit("_redraw")}else this.showManipulatorToolbar()}else{var G=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(G.from.id,G.to.id)}}},{key:"deleteSelected",value:function(){var a=this;this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="delete";var s=this.selectionHandler.getSelectedNodeIds(),u=this.selectionHandler.getSelectedEdgeIds(),f=void 0;if(s.length>0){for(var m=0;m0&&typeof this.options.deleteEdge=="function"&&(f=this.options.deleteEdge);if(typeof f=="function"){var b={nodes:s,edges:u};if(f.length!==2)throw new Error("The function for delete does not support two arguments (data, callback)");f(b,function(P){P!=null&&a.inMode==="delete"?(a.body.data.edges.getDataSet().remove(P.edges),a.body.data.nodes.getDataSet().remove(P.nodes),a.body.emitter.emit("startSimulation"),a.showManipulatorToolbar()):(a.body.emitter.emit("startSimulation"),a.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().remove(u),this.body.data.nodes.getDataSet().remove(s),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}},{key:"_setup",value:function(){this.options.enabled===!0?(this.guiEnabled=!0,this._createWrappers(),this.editMode===!1?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:"_createWrappers",value:function(){var a,s;this.manipulationDiv===void 0&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",this.editMode===!0?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),this.editModeDiv===void 0&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",this.editMode===!0?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),this.closeDiv===void 0&&(this.closeDiv=document.createElement("button"),this.closeDiv.className="vis-close",this.closeDiv.setAttribute("aria-label",(a=(s=this.options.locales[this.options.locale])===null||s===void 0?void 0:s.close)!==null&&a!==void 0?a:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:"_getNewTargetNode",value:function(a,s){var u=jn({},this.options.controlNodeStyle);u.id="targetNode"+P0(),u.hidden=!1,u.physics=!1,u.x=a,u.y=s;var f=this.body.functions.createNode(u);return f.shape.boundingBox={left:a,right:a,top:s,bottom:s},f}},{key:"_createEditButton",value:function(){var a;this._clean(),this.manipulationDOM={},Gu(this.editModeDiv);var s=this.options.locales[this.options.locale],u=this._createButton("editMode","vis-edit vis-edit-mode",s.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(u),this._bindElementEvents(u,at(a=this.toggleEditMode).call(a,this))}},{key:"_clean",value:function(){this.inMode=!1,this.guiEnabled===!0&&(Gu(this.editModeDiv),Gu(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}},{key:"_cleanupDOMEventListeners",value:function(){var a,s,u=oZ(Wc(a=this._domEventListenerCleanupQueue).call(a,0));try{for(u.s();!(s=u.n()).done;)(0,s.value)()}catch(f){u.e(f)}finally{u.f()}}},{key:"_removeManipulationDOM",value:function(){this._clean(),Gu(this.manipulationDiv),Gu(this.editModeDiv),Gu(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:"_createSeperator",value:function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+a]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+a].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+a])}},{key:"_createAddNodeButton",value:function(a){var s,u=this._createButton("addNode","vis-add",a.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(u),this._bindElementEvents(u,at(s=this.addNodeMode).call(s,this))}},{key:"_createAddEdgeButton",value:function(a){var s,u=this._createButton("addEdge","vis-connect",a.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(u),this._bindElementEvents(u,at(s=this.addEdgeMode).call(s,this))}},{key:"_createEditNodeButton",value:function(a){var s,u=this._createButton("editNode","vis-edit",a.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(u),this._bindElementEvents(u,at(s=this.editNode).call(s,this))}},{key:"_createEditEdgeButton",value:function(a){var s,u=this._createButton("editEdge","vis-edit",a.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(u),this._bindElementEvents(u,at(s=this.editEdgeMode).call(s,this))}},{key:"_createDeleteButton",value:function(a){var s,u;u=this.options.rtl?"vis-delete-rtl":"vis-delete";var f=this._createButton("delete",u,a.del||this.options.locales.en.del);this.manipulationDiv.appendChild(f),this._bindElementEvents(f,at(s=this.deleteSelected).call(s,this))}},{key:"_createBackButton",value:function(a){var s,u=this._createButton("back","vis-back",a.back||this.options.locales.en.back);this.manipulationDiv.appendChild(u),this._bindElementEvents(u,at(s=this.showManipulatorToolbar).call(s,this))}},{key:"_createButton",value:function(a,s,u){var f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"vis-label";return this.manipulationDOM[a+"Div"]=document.createElement("button"),this.manipulationDOM[a+"Div"].className="vis-button "+s,this.manipulationDOM[a+"Label"]=document.createElement("div"),this.manipulationDOM[a+"Label"].className=f,this.manipulationDOM[a+"Label"].innerText=u,this.manipulationDOM[a+"Div"].appendChild(this.manipulationDOM[a+"Label"]),this.manipulationDOM[a+"Div"]}},{key:"_createDescription",value:function(a){this.manipulationDOM.descriptionLabel=document.createElement("div"),this.manipulationDOM.descriptionLabel.className="vis-none",this.manipulationDOM.descriptionLabel.innerText=a,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:"_temporaryBindEvent",value:function(a,s){this.temporaryEventFunctions.push({event:a,boundFunction:s}),this.body.emitter.on(a,s)}},{key:"_temporaryBindUI",value:function(a,s){if(this.body.eventListeners[a]===void 0)throw new Error("This UI function does not exist. Typo? You tried: "+a+" possible are: "+$m(no(this.body.eventListeners)));this.temporaryUIFunctions[a]=this.body.eventListeners[a],this.body.eventListeners[a]=s}},{key:"_unbindTemporaryUIs",value:function(){for(var a in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,a)&&(this.body.eventListeners[a]=this.temporaryUIFunctions[a],delete this.temporaryUIFunctions[a]);this.temporaryUIFunctions={}}},{key:"_unbindTemporaryEvents",value:function(){for(var a=0;a=0;P--)if(m[P]!==this.selectedControlNode.id){b=this.body.nodes[m[P]];break}if(b!==void 0&&this.selectedControlNode!==void 0)if(b.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var k=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===k.id?this._performEditEdge(b.id,f.to.id):this._performEditEdge(f.from.id,b.id)}else f.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}}},{key:"_handleConnect",value:function(a){if(new Date().valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(a.center),this.lastTouch.translation=Cn({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var s=this.lastTouch,u=this.selectionHandler.getNodeAt(s);if(u!==void 0)if(u.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var f=this._getNewTargetNode(u.x,u.y);this.body.nodes[f.id]=f,this.body.nodeIndices.push(f.id);var m=this.body.functions.createEdge({id:"connectionEdge"+P0(),from:u.id,to:f.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[m.id]=m,this.body.edgeIndices.push(m.id),this.temporaryIds.nodes.push(f.id),this.temporaryIds.edges.push(m.id)}this.touchTime=new Date().valueOf()}}},{key:"_dragControlNode",value:function(a){var s=this.body.functions.getPointer(a.center),u=this.selectionHandler._pointerToPositionObject(s),f=void 0;this.temporaryIds.edges[0]!==void 0&&(f=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var m=this.selectionHandler._getAllNodesOverlappingWith(u),b=void 0,P=m.length-1;P>=0;P--){var k;if(ln(k=this.temporaryIds.nodes).call(k,m[P])===-1){b=this.body.nodes[m[P]];break}}if(a.controlEdge={from:f,to:b?b.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragging",a,s),this.temporaryIds.nodes[0]!==void 0){var V=this.body.nodes[this.temporaryIds.nodes[0]];V.x=this.canvas._XconvertDOMtoCanvas(s.x),V.y=this.canvas._YconvertDOMtoCanvas(s.y),this.body.emitter.emit("_redraw")}else this.interactionHandler.onDrag(a)}},{key:"_finishConnect",value:function(a){var s=this.body.functions.getPointer(a.center),u=this.selectionHandler._pointerToPositionObject(s),f=void 0;this.temporaryIds.edges[0]!==void 0&&(f=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var m=this.selectionHandler._getAllNodesOverlappingWith(u),b=void 0,P=m.length-1;P>=0;P--){var k;if(ln(k=this.temporaryIds.nodes).call(k,m[P])===-1){b=this.body.nodes[m[P]];break}}this._cleanupTemporaryNodesAndEdges(),b!==void 0&&(b.isCluster===!0?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):this.body.nodes[f]!==void 0&&this.body.nodes[b.id]!==void 0&&this._performAddEdge(f,b.id)),a.controlEdge={from:f,to:b?b.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragEnd",a,s),this.body.emitter.emit("_redraw")}},{key:"_dragStartEdge",value:function(a){var s=this.lastTouch;this.selectionHandler.generateClickEvent("dragStart",a,s,void 0,!0)}},{key:"_performAddNode",value:function(a){var s=this,u={id:P0(),x:a.pointer.canvas.x,y:a.pointer.canvas.y,label:"new"};if(typeof this.options.addNode=="function"){if(this.options.addNode.length!==2)throw this.showManipulatorToolbar(),new Error("The function for add does not support two arguments (data,callback)");this.options.addNode(u,function(f){f!=null&&s.inMode==="addNode"&&s.body.data.nodes.getDataSet().add(f),s.showManipulatorToolbar()})}else this.body.data.nodes.getDataSet().add(u),this.showManipulatorToolbar()}},{key:"_performAddEdge",value:function(a,s){var u=this,f={from:a,to:s};if(typeof this.options.addEdge=="function"){if(this.options.addEdge.length!==2)throw new Error("The function for connect does not support two arguments (data,callback)");this.options.addEdge(f,function(m){m!=null&&u.inMode==="addEdge"&&(u.body.data.edges.getDataSet().add(m),u.selectionHandler.unselectAll(),u.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().add(f),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:"_performEditEdge",value:function(a,s){var u=this,f={id:this.edgeBeingEditedId,from:a,to:s,label:this.body.data.edges.get(this.edgeBeingEditedId).label},m=this.options.editEdge;if(Vn(m)==="object"&&(m=m.editWithoutDrag),typeof m=="function"){if(m.length!==2)throw new Error("The function for edit does not support two arguments (data, callback)");m(f,function(b){b==null||u.inMode!=="editEdge"?(u.body.edges[f.id].updateEdgeType(),u.body.emitter.emit("_redraw"),u.showManipulatorToolbar()):(u.body.data.edges.getDataSet().update(b),u.selectionHandler.unselectAll(),u.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().update(f),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),p}(),ht="string",lt="boolean",Be="number",Eg="array",Yt="object",OI=["arrow","bar","box","circle","crow","curve","diamond","image","inv_curve","inv_triangle","triangle","vee"],xI={borderWidth:{number:Be},borderWidthSelected:{number:Be,undefined:"undefined"},brokenImage:{string:ht,undefined:"undefined"},chosen:{label:{boolean:lt,function:"function"},node:{boolean:lt,function:"function"},__type__:{object:Yt,boolean:lt}},color:{border:{string:ht},background:{string:ht},highlight:{border:{string:ht},background:{string:ht},__type__:{object:Yt,string:ht}},hover:{border:{string:ht},background:{string:ht},__type__:{object:Yt,string:ht}},__type__:{object:Yt,string:ht}},opacity:{number:Be,undefined:"undefined"},fixed:{x:{boolean:lt},y:{boolean:lt},__type__:{object:Yt,boolean:lt}},font:{align:{string:ht},color:{string:ht},size:{number:Be},face:{string:ht},background:{string:ht},strokeWidth:{number:Be},strokeColor:{string:ht},vadjust:{number:Be},multi:{boolean:lt,string:ht},bold:{color:{string:ht},size:{number:Be},face:{string:ht},mod:{string:ht},vadjust:{number:Be},__type__:{object:Yt,string:ht}},boldital:{color:{string:ht},size:{number:Be},face:{string:ht},mod:{string:ht},vadjust:{number:Be},__type__:{object:Yt,string:ht}},ital:{color:{string:ht},size:{number:Be},face:{string:ht},mod:{string:ht},vadjust:{number:Be},__type__:{object:Yt,string:ht}},mono:{color:{string:ht},size:{number:Be},face:{string:ht},mod:{string:ht},vadjust:{number:Be},__type__:{object:Yt,string:ht}},__type__:{object:Yt,string:ht}},group:{string:ht,number:Be,undefined:"undefined"},heightConstraint:{minimum:{number:Be},valign:{string:ht},__type__:{object:Yt,boolean:lt,number:Be}},hidden:{boolean:lt},icon:{face:{string:ht},code:{string:ht},size:{number:Be},color:{string:ht},weight:{string:ht,number:Be},__type__:{object:Yt}},id:{string:ht,number:Be},image:{selected:{string:ht,undefined:"undefined"},unselected:{string:ht,undefined:"undefined"},__type__:{object:Yt,string:ht}},imagePadding:{top:{number:Be},right:{number:Be},bottom:{number:Be},left:{number:Be},__type__:{object:Yt,number:Be}},label:{string:ht,undefined:"undefined"},labelHighlightBold:{boolean:lt},level:{number:Be,undefined:"undefined"},margin:{top:{number:Be},right:{number:Be},bottom:{number:Be},left:{number:Be},__type__:{object:Yt,number:Be}},mass:{number:Be},physics:{boolean:lt},scaling:{min:{number:Be},max:{number:Be},label:{enabled:{boolean:lt},min:{number:Be},max:{number:Be},maxVisible:{number:Be},drawThreshold:{number:Be},__type__:{object:Yt,boolean:lt}},customScalingFunction:{function:"function"},__type__:{object:Yt}},shadow:{enabled:{boolean:lt},color:{string:ht},size:{number:Be},x:{number:Be},y:{number:Be},__type__:{object:Yt,boolean:lt}},shape:{string:["custom","ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon","hexagon"]},ctxRenderer:{function:"function"},shapeProperties:{borderDashes:{boolean:lt,array:Eg},borderRadius:{number:Be},interpolation:{boolean:lt},useImageSize:{boolean:lt},useBorderWithImage:{boolean:lt},coordinateOrigin:{string:["center","top-left"]},__type__:{object:Yt}},size:{number:Be},title:{string:ht,dom:"dom",undefined:"undefined"},value:{number:Be,undefined:"undefined"},widthConstraint:{minimum:{number:Be},maximum:{number:Be},__type__:{object:Yt,boolean:lt,number:Be}},x:{number:Be},y:{number:Be},__type__:{object:Yt}},TC={configure:{enabled:{boolean:lt},filter:{boolean:lt,string:ht,array:Eg,function:"function"},container:{dom:"dom"},showButton:{boolean:lt},__type__:{object:Yt,boolean:lt,string:ht,array:Eg,function:"function"}},edges:{arrows:{to:{enabled:{boolean:lt},scaleFactor:{number:Be},type:{string:OI},imageHeight:{number:Be},imageWidth:{number:Be},src:{string:ht},__type__:{object:Yt,boolean:lt}},middle:{enabled:{boolean:lt},scaleFactor:{number:Be},type:{string:OI},imageWidth:{number:Be},imageHeight:{number:Be},src:{string:ht},__type__:{object:Yt,boolean:lt}},from:{enabled:{boolean:lt},scaleFactor:{number:Be},type:{string:OI},imageWidth:{number:Be},imageHeight:{number:Be},src:{string:ht},__type__:{object:Yt,boolean:lt}},__type__:{string:["from","to","middle"],object:Yt}},endPointOffset:{from:{number:Be},to:{number:Be},__type__:{object:Yt,number:Be}},arrowStrikethrough:{boolean:lt},background:{enabled:{boolean:lt},color:{string:ht},size:{number:Be},dashes:{boolean:lt,array:Eg},__type__:{object:Yt,boolean:lt}},chosen:{label:{boolean:lt,function:"function"},edge:{boolean:lt,function:"function"},__type__:{object:Yt,boolean:lt}},color:{color:{string:ht},highlight:{string:ht},hover:{string:ht},inherit:{string:["from","to","both"],boolean:lt},opacity:{number:Be},__type__:{object:Yt,string:ht}},dashes:{boolean:lt,array:Eg},font:{color:{string:ht},size:{number:Be},face:{string:ht},background:{string:ht},strokeWidth:{number:Be},strokeColor:{string:ht},align:{string:["horizontal","top","middle","bottom"]},vadjust:{number:Be},multi:{boolean:lt,string:ht},bold:{color:{string:ht},size:{number:Be},face:{string:ht},mod:{string:ht},vadjust:{number:Be},__type__:{object:Yt,string:ht}},boldital:{color:{string:ht},size:{number:Be},face:{string:ht},mod:{string:ht},vadjust:{number:Be},__type__:{object:Yt,string:ht}},ital:{color:{string:ht},size:{number:Be},face:{string:ht},mod:{string:ht},vadjust:{number:Be},__type__:{object:Yt,string:ht}},mono:{color:{string:ht},size:{number:Be},face:{string:ht},mod:{string:ht},vadjust:{number:Be},__type__:{object:Yt,string:ht}},__type__:{object:Yt,string:ht}},hidden:{boolean:lt},hoverWidth:{function:"function",number:Be},label:{string:ht,undefined:"undefined"},labelHighlightBold:{boolean:lt},length:{number:Be,undefined:"undefined"},physics:{boolean:lt},scaling:{min:{number:Be},max:{number:Be},label:{enabled:{boolean:lt},min:{number:Be},max:{number:Be},maxVisible:{number:Be},drawThreshold:{number:Be},__type__:{object:Yt,boolean:lt}},customScalingFunction:{function:"function"},__type__:{object:Yt}},selectionWidth:{function:"function",number:Be},selfReferenceSize:{number:Be},selfReference:{size:{number:Be},angle:{number:Be},renderBehindTheNode:{boolean:lt},__type__:{object:Yt}},shadow:{enabled:{boolean:lt},color:{string:ht},size:{number:Be},x:{number:Be},y:{number:Be},__type__:{object:Yt,boolean:lt}},smooth:{enabled:{boolean:lt},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:Be},forceDirection:{string:["horizontal","vertical","none"],boolean:lt},__type__:{object:Yt,boolean:lt}},title:{string:ht,undefined:"undefined"},width:{number:Be},widthConstraint:{maximum:{number:Be},__type__:{object:Yt,boolean:lt,number:Be}},value:{number:Be,undefined:"undefined"},__type__:{object:Yt}},groups:{useDefaultGroups:{boolean:lt},__any__:xI,__type__:{object:Yt}},interaction:{dragNodes:{boolean:lt},dragView:{boolean:lt},hideEdgesOnDrag:{boolean:lt},hideEdgesOnZoom:{boolean:lt},hideNodesOnDrag:{boolean:lt},hover:{boolean:lt},keyboard:{enabled:{boolean:lt},speed:{x:{number:Be},y:{number:Be},zoom:{number:Be},__type__:{object:Yt}},bindToWindow:{boolean:lt},autoFocus:{boolean:lt},__type__:{object:Yt,boolean:lt}},multiselect:{boolean:lt},navigationButtons:{boolean:lt},selectable:{boolean:lt},selectConnectedEdges:{boolean:lt},hoverConnectedEdges:{boolean:lt},tooltipDelay:{number:Be},zoomView:{boolean:lt},zoomSpeed:{number:Be},__type__:{object:Yt}},layout:{randomSeed:{undefined:"undefined",number:Be,string:ht},improvedLayout:{boolean:lt},clusterThreshold:{number:Be},hierarchical:{enabled:{boolean:lt},levelSeparation:{number:Be},nodeSpacing:{number:Be},treeSpacing:{number:Be},blockShifting:{boolean:lt},edgeMinimization:{boolean:lt},parentCentralization:{boolean:lt},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},shakeTowards:{string:["leaves","roots"]},__type__:{object:Yt,boolean:lt}},__type__:{object:Yt}},manipulation:{enabled:{boolean:lt},initiallyActive:{boolean:lt},addNode:{boolean:lt,function:"function"},addEdge:{boolean:lt,function:"function"},editNode:{function:"function"},editEdge:{editWithoutDrag:{function:"function"},__type__:{object:Yt,boolean:lt,function:"function"}},deleteNode:{boolean:lt,function:"function"},deleteEdge:{boolean:lt,function:"function"},controlNodeStyle:xI,__type__:{object:Yt,boolean:lt}},nodes:xI,physics:{enabled:{boolean:lt},barnesHut:{theta:{number:Be},gravitationalConstant:{number:Be},centralGravity:{number:Be},springLength:{number:Be},springConstant:{number:Be},damping:{number:Be},avoidOverlap:{number:Be},__type__:{object:Yt}},forceAtlas2Based:{theta:{number:Be},gravitationalConstant:{number:Be},centralGravity:{number:Be},springLength:{number:Be},springConstant:{number:Be},damping:{number:Be},avoidOverlap:{number:Be},__type__:{object:Yt}},repulsion:{centralGravity:{number:Be},springLength:{number:Be},springConstant:{number:Be},nodeDistance:{number:Be},damping:{number:Be},__type__:{object:Yt}},hierarchicalRepulsion:{centralGravity:{number:Be},springLength:{number:Be},springConstant:{number:Be},nodeDistance:{number:Be},damping:{number:Be},avoidOverlap:{number:Be},__type__:{object:Yt}},maxVelocity:{number:Be},minVelocity:{number:Be},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{boolean:lt},iterations:{number:Be},updateInterval:{number:Be},onlyDynamicEdges:{boolean:lt},fit:{boolean:lt},__type__:{object:Yt,boolean:lt}},timestep:{number:Be},adaptiveTimestep:{boolean:lt},wind:{x:{number:Be},y:{number:Be},__type__:{object:Yt}},__type__:{object:Yt,boolean:lt}},autoResize:{boolean:lt},clickToUse:{boolean:lt},locale:{string:ht},locales:{__any__:{any:"any"},__type__:{object:Yt}},height:{string:ht},width:{string:ht},__type__:{object:Yt}},_I={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown","hexagon"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"],shakeTowards:["leaves","roots"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},iZ=function(p,a,s){var u;return!(!Qp(p).call(p,"physics")||!Qp(u=_I.physics.solver).call(u,a)||s.physics.solver===a||a==="wind")},WY=Object.freeze({__proto__:null,allOptions:TC,configuratorHideOption:iZ,configureOptions:_I}),HY=function(){function p(){gt(this,p)}return yt(p,[{key:"getDistances",value:function(a,s,u){for(var f={},m=a.edges,b=0;b2&&arguments[2]!==void 0&&arguments[2],f=this.distanceSolver.getDistances(this.body,a,s);this._createL_matrix(f),this._createK_matrix(f),this._createE_matrix();for(var m=0,b=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),P=1e9,k=0,V=0,G=0,X=0,se=0;P>.01&&m1&&se<5;){se+=1,this._moveNode(k,V,G);var ge=Mo(this._getEnergy(k),3);X=ge[0],V=ge[1],G=ge[2]}}}},{key:"_getHighestEnergyNode",value:function(a){for(var s=this.body.nodeIndices,u=this.body.nodes,f=0,m=s[0],b=0,P=0,k=0;k{(function(e,t){typeof SY=="object"&&typeof yRe<"u"?t(SY):typeof define=="function"&&define.amd?define(["exports"],t):t((e=typeof globalThis<"u"?globalThis:e||self).vis=e.vis||{})})(SY,function(e){function t(g,S){if(!(g instanceof S))throw new TypeError("Cannot call a class as a function")}var r=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function n(g){return g&&g.__esModule&&Object.prototype.hasOwnProperty.call(g,"default")?g.default:g}var o={exports:{}},i=function(g){return g&&g.Math===Math&&g},c=i(typeof globalThis=="object"&&globalThis)||i(typeof window=="object"&&window)||i(typeof self=="object"&&self)||i(typeof r=="object"&&r)||function(){return this}()||r||Function("return this")(),d=function(g){try{return!!g()}catch{return!0}},h=!d(function(){var g=function(){}.bind();return typeof g!="function"||g.hasOwnProperty("prototype")}),v=h,w=Function.prototype,_=w.apply,I=w.call,R=typeof Reflect=="object"&&Reflect.apply||(v?I.bind(_):function(){return I.apply(_,arguments)}),D=h,F=Function.prototype,A=F.call,N=D&&F.bind.bind(A,A),H=D?N:function(g){return function(){return A.apply(g,arguments)}},q=H,Y=q({}.toString),ee=q("".slice),ne=function(g){return ee(Y(g),8,-1)},te=ne,de=H,fe=function(g){if(te(g)==="Function")return de(g)},ye=typeof document=="object"&&document.all,Ie={all:ye,IS_HTMLDDA:ye===void 0&&ye!==void 0},ve=Ie.all,Oe=Ie.IS_HTMLDDA?function(g){return typeof g=="function"||g===ve}:function(g){return typeof g=="function"},be={},Te=!d(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),Pe=h,Re=Function.prototype.call,Ae=Pe?Re.bind(Re):function(){return Re.apply(Re,arguments)},Ve={},Je={}.propertyIsEnumerable,pt=Object.getOwnPropertyDescriptor,Qe=pt&&!Je.call({1:2},1);Ve.f=Qe?function(g){var S=pt(this,g);return!!S&&S.enumerable}:Je;var Fe,Nt,Vt=function(g,S){return{enumerable:!(1&g),configurable:!(2&g),writable:!(4&g),value:S}},Ke=d,st=ne,Tt=Object,wr=H("".split),Rt=Ke(function(){return!Tt("z").propertyIsEnumerable(0)})?function(g){return st(g)==="String"?wr(g,""):Tt(g)}:Tt,Ut=function(g){return g==null},vr=Ut,Sr=TypeError,Er=function(g){if(vr(g))throw new Sr("Can't call method on "+g);return g},po=Rt,Pn=Er,Nr=function(g){return po(Pn(g))},Wo=Oe,Cr=Ie.all,St=Ie.IS_HTMLDDA?function(g){return typeof g=="object"?g!==null:Wo(g)||g===Cr}:function(g){return typeof g=="object"?g!==null:Wo(g)},tn={},Ks=tn,hs=c,Pr=Oe,or=function(g){return Pr(g)?g:void 0},ir=function(g,S){return arguments.length<2?or(Ks[g])||or(hs[g]):Ks[g]&&Ks[g][S]||hs[g]&&hs[g][S]},Mr=H({}.isPrototypeOf),Ur=typeof navigator<"u"&&String(navigator.userAgent)||"",ms=c,Nn=Ur,Di=ms.process,Xn=ms.Deno,ya=Di&&Di.versions||Xn&&Xn.version,ba=ya&&ya.v8;ba&&(Nt=(Fe=ba.split("."))[0]>0&&Fe[0]<4?1:+(Fe[0]+Fe[1])),!Nt&&Nn&&(!(Fe=Nn.match(/Edge\/(\d+)/))||Fe[1]>=74)&&(Fe=Nn.match(/Chrome\/(\d+)/))&&(Nt=+Fe[1]);var wa=Nt,g1=wa,Kd=d,yc=c.String,Za=!!Object.getOwnPropertySymbols&&!Kd(function(){var g=Symbol("symbol detection");return!yc(g)||!(Object(g)instanceof Symbol)||!Symbol.sham&&g1&&g1<41}),li=Za&&!Symbol.sham&&typeof Symbol.iterator=="symbol",Op=ir,Rl=Oe,Ct=Mr,Yd=Object,Qd=li?function(g){return typeof g=="symbol"}:function(g){var S=Op("Symbol");return Rl(S)&&Ct(S.prototype,Yd(g))},Ki=String,fo=function(g){try{return Ki(g)}catch{return"Object"}},rn=Oe,Hh=fo,pn=TypeError,Ko=function(g){if(rn(g))return g;throw new pn(Hh(g)+" is not a function")},z3=Ko,xp=Ut,Co=function(g,S){var E=g[S];return xp(E)?void 0:z3(E)},ui=Ae,Yi=Oe,Hn=St,qa=TypeError,vs={exports:{}},gu=c,Qi=Object.defineProperty,hy=function(g,S){try{Qi(gu,g,{value:S,configurable:!0,writable:!0})}catch{gu[g]=S}return S},yu="__core-js_shared__",bc=c[yu]||hy(yu,{}),Dl=bc;(vs.exports=function(g,S){return Dl[g]||(Dl[g]=S!==void 0?S:{})})("versions",[]).push({version:"3.33.2",mode:"pure",copyright:"\xA9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.2/LICENSE",source:"https://github.com/zloirock/core-js"});var Oa=vs.exports,wc=Er,Li=Object,ea=function(g){return Li(wc(g))},my=ea,Yo=H({}.hasOwnProperty),kr=Object.hasOwn||function(g,S){return Yo(my(g),S)},y1=H,W3=0,vy=Math.random(),ef=y1(1 .toString),tf=function(g){return"Symbol("+(g===void 0?"":g)+")_"+ef(++W3+vy,36)},gy=Oa,Vh=kr,yy=tf,_p=Za,Sp=li,Ll=c.Symbol,ci=gy("wks"),ho=Sp?Ll.for||Ll:Ll&&Ll.withoutSetter||yy,ao=function(g){return Vh(ci,g)||(ci[g]=_p&&Vh(Ll,g)?Ll[g]:ho("Symbol."+g)),ci[g]},by=Ae,so=St,wy=Qd,rf=Co,$h=function(g,S){var E,j;if(S==="string"&&Yi(E=g.toString)&&!Hn(j=ui(E,g))||Yi(E=g.valueOf)&&!Hn(j=ui(E,g))||S!=="string"&&Yi(E=g.toString)&&!Hn(j=ui(E,g)))return j;throw new qa("Can't convert object to primitive value")},Oy=TypeError,bu=ao("toPrimitive"),Nl=function(g,S){if(!so(g)||wy(g))return g;var E,j=rf(g,bu);if(j){if(S===void 0&&(S="default"),E=by(j,g,S),!so(E)||wy(E))return E;throw new Oy("Can't convert object to primitive value")}return S===void 0&&(S="number"),$h(g,S)},Zh=Qd,Ip=function(g){var S=Nl(g,"string");return Zh(S)?S:S+""},qh=St,b1=c.document,xy=qh(b1)&&qh(b1.createElement),wu=function(g){return xy?b1.createElement(g):{}},Uh=wu,_y=!Te&&!d(function(){return Object.defineProperty(Uh("div"),"a",{get:function(){return 7}}).a!==7}),Kn=Te,H3=Ae,w1=Ve,Sy=Vt,V3=Nr,$3=Ip,Z3=kr,Iy=_y,Ey=Object.getOwnPropertyDescriptor;be.f=Kn?Ey:function(g,S){if(g=V3(g),S=$3(S),Iy)try{return Ey(g,S)}catch{}if(Z3(g,S))return Sy(!H3(w1.f,g,S),g[S])};var q3=d,U3=Oe,nf=/#|\.prototype\./,Ou=function(g,S){var E=Py[G3(g)];return E===J3||E!==O1&&(U3(S)?q3(S):!!S)},G3=Ou.normalize=function(g){return String(g).replace(nf,".").toLowerCase()},Py=Ou.data={},O1=Ou.NATIVE="N",J3=Ou.POLYFILL="P",Gh=Ou,x1=Ko,_1=h,of=fe(fe.bind),mo=function(g,S){return x1(g),S===void 0?g:_1?of(g,S):function(){return g.apply(S,arguments)}},wi={},ky=Te&&d(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),X3=St,K3=String,xa=TypeError,ta=function(g){if(X3(g))return g;throw new xa(K3(g)+" is not an object")},ro=Te,af=_y,Fl=ky,sf=ta,S1=Ip,I1=TypeError,Oc=Object.defineProperty,Ep=Object.getOwnPropertyDescriptor,Ua="enumerable",xc="configurable",E1="writable";wi.f=ro?Fl?function(g,S,E){if(sf(g),S=S1(S),sf(E),typeof g=="function"&&S==="prototype"&&"value"in E&&E1 in E&&!E[E1]){var j=Ep(g,S);j&&j[E1]&&(g[S]=E.value,E={configurable:xc in E?E[xc]:j[xc],enumerable:Ua in E?E[Ua]:j[Ua],writable:!1})}return Oc(g,S,E)}:Oc:function(g,S,E){if(sf(g),S=S1(S),sf(E),af)try{return Oc(g,S,E)}catch{}if("get"in E||"set"in E)throw new I1("Accessors not supported");return"value"in E&&(g[S]=E.value),g};var Ys=wi,_c=Vt,ra=Te?function(g,S,E){return Ys.f(g,S,_c(1,E))}:function(g,S,E){return g[S]=E,g},Jh=c,Y3=R,xu=fe,pi=Oe,P1=be.f,Pp=Gh,Sc=tn,kp=mo,_u=ra,jy=kr,Bt=function(g){var S=function(E,j,W){if(this instanceof S){switch(arguments.length){case 0:return new g;case 1:return new g(E);case 2:return new g(E,j)}return new g(E,j,W)}return Y3(g,this,arguments)};return S.prototype=g.prototype,S},ar=function(g,S){var E,j,W,U,ie,oe,ue,we,Ee,je=g.target,Ze=g.global,tt=g.stat,Et=g.proto,_t=Ze?Jh:tt?Jh[je]:(Jh[je]||{}).prototype,$t=Ze?Sc:Sc[je]||_u(Sc,je,{})[je],dr=$t.prototype;for(U in S)j=!(E=Pp(Ze?U:je+(tt?".":"#")+U,g.forced))&&_t&&jy(_t,U),oe=$t[U],j&&(ue=g.dontCallGetSet?(Ee=P1(_t,U))&&Ee.value:_t[U]),ie=j&&ue?ue:S[U],j&&typeof oe==typeof ie||(we=g.bind&&j?kp(ie,Jh):g.wrap&&j?Bt(ie):Et&&pi(ie)?xu(ie):ie,(g.sham||ie&&ie.sham||oe&&oe.sham)&&_u(we,"sham",!0),_u($t,U,we),Et&&(jy(Sc,W=je+"Prototype")||_u(Sc,W,{}),_u(Sc[W],U,ie),g.real&&dr&&(E||!dr[U])&&_u(dr,U,ie)))},Q3=ar,ew=Te,Bl=wi.f;Q3({target:"Object",stat:!0,forced:Object.defineProperty!==Bl,sham:!ew},{defineProperty:Bl});var k1=tn.Object,jp=o.exports=function(g,S,E){return k1.defineProperty(g,S,E)};k1.defineProperty.sham&&(jp.sham=!0);var Xh=o.exports,Su=Xh,Tp=n(Su),lf=ne,Qs=Array.isArray||function(g){return lf(g)==="Array"},Ga=Math.ceil,tw=Math.floor,rw=Math.trunc||function(g){var S=+g;return(S>0?tw:Ga)(S)},_a=function(g){var S=+g;return S!=S||S===0?0:rw(S)},uf=_a,Kh=Math.min,kn=function(g){return g>0?Kh(uf(g),9007199254740991):0},Ni=function(g){return kn(g.length)},nw=TypeError,cf=function(g){if(g>9007199254740991)throw nw("Maximum allowed index exceeded");return g},Cp=Ip,Ty=wi,Ic=Vt,Sa=function(g,S,E){var j=Cp(S);j in g?Ty.f(g,j,Ic(0,E)):g[j]=E},Cy={};Cy[ao("toStringTag")]="z";var er=String(Cy)==="[object z]",Yh=er,Iu=Oe,zl=ne,j1=ao("toStringTag"),My=Object,Ay=zl(function(){return arguments}())==="Arguments",gs=Yh?zl:function(g){var S,E,j;return g===void 0?"Undefined":g===null?"Null":typeof(E=function(W,U){try{return W[U]}catch{}}(S=My(g),j1))=="string"?E:Ay?zl(S):(j=zl(S))==="Object"&&Iu(S.callee)?"Arguments":j},T1=Oe,Mp=bc,C1=H(Function.toString);T1(Mp.inspectSource)||(Mp.inspectSource=function(g){return C1(g)});var Ry=Mp.inspectSource,Ap=H,Dy=d,M1=Oe,Qh=gs,Ly=Ry,Cn=function(){},em=[],A1=ir("Reflect","construct"),R1=/^\s*(?:class|function)\b/,Ny=Ap(R1.exec),tm=!R1.test(Cn),Rp=function(g){if(!M1(g))return!1;try{return A1(Cn,em,g),!0}catch{return!1}},Ja=function(g){if(!M1(g))return!1;switch(Qh(g)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return tm||!!Ny(R1,Ly(g))}catch{return!0}};Ja.sham=!0;var ys=!A1||Dy(function(){var g;return Rp(Rp.call)||!Rp(Object)||!Rp(function(){g=!0})||g})?Ja:Rp,D1=Qs,Ia=ys,rm=St,L1=ao("species"),Dp=Array,ow=function(g){var S;return D1(g)&&(S=g.constructor,(Ia(S)&&(S===Dp||D1(S.prototype))||rm(S)&&(S=S[L1])===null)&&(S=void 0)),S===void 0?Dp:S},vo=function(g,S){return new(ow(g))(S===0?0:S)},iw=d,Lp=wa,aw=ao("species"),Ec=function(g){return Lp>=51||!iw(function(){var S=[];return(S.constructor={})[aw]=function(){return{foo:1}},S[g](Boolean).foo!==1})},Fy=ar,nm=d,at=Qs,N1=St,pf=ea,F1=Ni,B1=cf,z1=Sa,By=vo,zy=Ec,Ea=wa,W1=ao("isConcatSpreadable"),om=Ea>=51||!nm(function(){var g=[];return g[W1]=!1,g.concat()[0]!==g}),Pc=function(g){if(!N1(g))return!1;var S=g[W1];return S!==void 0?!!S:at(g)};Fy({target:"Array",proto:!0,arity:1,forced:!om||!zy("concat")},{concat:function(g){var S,E,j,W,U,ie=pf(this),oe=By(ie,0),ue=0;for(S=-1,j=arguments.length;Soe;)if((W=U[oe++])!=W)return!0}else for(;ie>oe;oe++)if((g||oe in U)&&U[oe]===E)return g||oe||0;return!g&&-1}},Eu={includes:na(!0),indexOf:na(!1)},Fp={},Pu=kr,Vy=Nr,lm=Eu.indexOf,H1=Fp,$y=H([].push),V1=function(g,S){var E,j=Vy(g),W=0,U=[];for(E in j)!Pu(H1,E)&&Pu(j,E)&&$y(U,E);for(;S.length>W;)Pu(j,E=S[W++])&&(~lm(U,E)||$y(U,E));return U},$1=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],sw=V1,Z1=$1,mf=Object.keys||function(g){return sw(g,Z1)},lw=Te,vf=ky,um=wi,uw=ta,Zy=Nr,cw=mf;sm.f=lw&&!vf?Object.defineProperties:function(g,S){uw(g);for(var E,j=Zy(S),W=cw(S),U=W.length,ie=0;U>ie;)um.f(g,E=W[ie++],j[E]);return g};var ku,cm=ir("document","documentElement"),q1=tf,qy=Oa("keys"),pm=function(g){return qy[g]||(qy[g]=q1(g))},Uy=ta,U1=sm,gf=$1,ws=Fp,Bp=cm,el=wu,jc="prototype",zp="script",dm=pm("IE_PROTO"),G1=function(){},fm=function(g){return"<"+zp+">"+g+""},Gy=function(g){g.write(fm("")),g.close();var S=g.parentWindow.Object;return g=null,S},Tc=function(){try{ku=new ActiveXObject("htmlfile")}catch{}var g,S,E;Tc=typeof document<"u"?document.domain&&ku?Gy(ku):(S=el("iframe"),E="java"+zp+":",S.style.display="none",Bp.appendChild(S),S.src=String(E),(g=S.contentWindow.document).open(),g.write(fm("document.F=Object")),g.close(),g.F):Gy(ku);for(var j=gf.length;j--;)delete Tc[jc][gf[j]];return Tc()};ws[dm]=!0;var Cc=Object.create||function(g,S){var E;return g!==null?(G1[jc]=Uy(g),E=new G1,G1[jc]=null,E[dm]=g):E=Tc(),S===void 0?E:U1.f(E,S)},Xa={},hm=V1,pw=$1.concat("length","prototype");Xa.f=Object.getOwnPropertyNames||function(g){return hm(g,pw)};var mm={},Jy=ff,Mc=Ni,dw=Sa,ju=Array,Xy=Math.max,vm=function(g,S,E){for(var j=Mc(g),W=Jy(S,j),U=Jy(E===void 0?j:E,j),ie=ju(Xy(U-W,0)),oe=0;WWt;Wt++)if((oe||Wt in _t)&&(tt=$t(Ze=_t[Wt],Wt,Et),g))if(S)gn[Wt]=tt;else if(tt)switch(g){case 3:return!0;case 5:return Ze;case 6:return Wt;case 2:Rc(gn,Ze)}else switch(g){case 4:return!1;case 7:Rc(gn,Ze)}return U?-1:j||W?W:gn}},Ar={forEach:Ss(0),map:Ss(1),filter:Ss(2),some:Ss(3),every:Ss(4),find:Ss(5),findIndex:Ss(6),filterReject:Ss(7)},O=ar,L=c,$=Ae,K=H,le=Te,Se=Za,He=d,ut=kr,cr=Mr,Vr=ta,Ho=Nr,Is=Ip,Es=kc,Y1=Vt,Yn=Cc,Q1=mf,u_=Xa,c_=mm,Sw=Ac,ev=be,p_=wi,HP=sm,Iw=Ve,d_=Os,f_=tl,ob=Oa,h_=Fp,m_=tf,VP=ao,Ew=xs,Sf=lo,v_=Wl,$P=Cu,Pw=Vl,ib=Ar.forEach,Ya=pm("hidden"),tv="Symbol",Im="prototype",ZP=Pw.set,Em=Pw.getterFor(tv),Ps=Object[Im],If=L.Symbol,ab=If&&If[Im],g_=L.RangeError,sb=L.TypeError,kw=L.QObject,rv=ev.f,ol=p_.f,nv=c_.f,y_=Iw.f,lb=K([].push),Oi=ob("symbols"),Au=ob("op-symbols"),Ru=ob("wks"),ub=!kw||!kw[Im]||!kw[Im].findChild,ov=function(g,S,E){var j=rv(Ps,S);j&&delete Ps[S],ol(g,S,E),j&&g!==Ps&&ol(Ps,S,j)},jw=le&&He(function(){return Yn(ol({},"a",{get:function(){return ol(this,"a",{value:7}).a}})).a!==7})?ov:ol,Tw=function(g,S){var E=Oi[g]=Yn(ab);return ZP(E,{type:tv,tag:g,description:S}),le||(E.description=S),E},cb=function(g,S,E){g===Ps&&cb(Au,S,E),Vr(g);var j=Is(S);return Vr(E),ut(Oi,j)?(E.enumerable?(ut(g,Ya)&&g[Ya][j]&&(g[Ya][j]=!1),E=Yn(E,{enumerable:Y1(0,!1)})):(ut(g,Ya)||ol(g,Ya,Y1(1,{})),g[Ya][j]=!0),jw(g,j,E)):ol(g,j,E)},Hp=function(g,S){Vr(g);var E=Ho(S),j=Q1(E).concat(iv(E));return ib(j,function(W){le&&!$(Cw,E,W)||cb(g,W,E[W])}),g},Cw=function(g){var S=Is(g),E=$(y_,this,S);return!(this===Ps&&ut(Oi,S)&&!ut(Au,S))&&(!(E||!ut(this,S)||!ut(Oi,S)||ut(this,Ya)&&this[Ya][S])||E)},Du=function(g,S){var E=Ho(g),j=Is(S);if(E!==Ps||!ut(Oi,j)||ut(Au,j)){var W=rv(E,j);return!W||!ut(Oi,j)||ut(E,Ya)&&E[Ya][j]||(W.enumerable=!0),W}},Ef=function(g){var S=nv(Ho(g)),E=[];return ib(S,function(j){ut(Oi,j)||ut(h_,j)||lb(E,j)}),E},iv=function(g){var S=g===Ps,E=nv(S?Au:Ho(g)),j=[];return ib(E,function(W){!ut(Oi,W)||S&&!ut(Ps,W)||lb(j,Oi[W])}),j};Se||(If=function(){if(cr(ab,this))throw new sb("Symbol is not a constructor");var g=arguments.length&&arguments[0]!==void 0?Es(arguments[0]):void 0,S=m_(g),E=function(j){var W=this===void 0?L:this;W===Ps&&$(E,Au,j),ut(W,Ya)&&ut(W[Ya],S)&&(W[Ya][S]=!1);var U=Y1(1,j);try{jw(W,S,U)}catch(ie){if(!(ie instanceof g_))throw ie;ov(W,S,U)}};return le&&ub&&jw(Ps,S,{configurable:!0,set:E}),Tw(S,g)},d_(ab=If[Im],"toString",function(){return Em(this).tag}),d_(If,"withoutSetter",function(g){return Tw(m_(g),g)}),Iw.f=Cw,p_.f=cb,HP.f=Hp,ev.f=Du,u_.f=c_.f=Ef,Sw.f=iv,Ew.f=function(g){return Tw(VP(g),g)},le&&f_(ab,"description",{configurable:!0,get:function(){return Em(this).description}})),O({global:!0,constructor:!0,wrap:!0,forced:!Se,sham:!Se},{Symbol:If}),ib(Q1(Ru),function(g){Sf(g)}),O({target:tv,stat:!0,forced:!Se},{useSetter:function(){ub=!0},useSimple:function(){ub=!1}}),O({target:"Object",stat:!0,forced:!Se,sham:!le},{create:function(g,S){return S===void 0?Yn(g):Hp(Yn(g),S)},defineProperty:cb,defineProperties:Hp,getOwnPropertyDescriptor:Du}),O({target:"Object",stat:!0,forced:!Se},{getOwnPropertyNames:Ef}),v_(),$P(If,tv),h_[Ya]=!0;var Pm=Za&&!!Symbol.for&&!!Symbol.keyFor,km=ar,qP=ir,jm=kr,Tm=kc,b_=Oa,xi=Pm,Mw=b_("string-to-symbol-registry"),pb=b_("symbol-to-string-registry");km({target:"Symbol",stat:!0,forced:!xi},{for:function(g){var S=Tm(g);if(jm(Mw,S))return Mw[S];var E=qP("Symbol")(S);return Mw[S]=E,pb[E]=S,E}});var db=ar,Aw=kr,UP=Qd,Rw=fo,av=Pm,Dw=Oa("symbol-to-string-registry");db({target:"Symbol",stat:!0,forced:!av},{keyFor:function(g){if(!UP(g))throw new TypeError(Rw(g)+" is not a symbol");if(Aw(Dw,g))return Dw[g]}});var sv=H([].slice),fb=Qs,GP=Oe,Lw=ne,Nw=kc,Fw=H([].push),Bw=ar,zw=ir,Ww=R,Hw=Ae,lv=H,hb=d,Dc=Oe,w_=Qd,Vw=sv,O_=function(g){if(GP(g))return g;if(fb(g)){for(var S=g.length,E=[],j=0;j=S.length)return g.target=void 0,Pb(void 0,!0);switch(g.kind){case"keys":return Pb(E,!1);case"values":return Pb(S[E],!1)}return Pb([E,S[E]],!1)},"values"),eO.Arguments=eO.Array;var qp={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},Fc=c,kb=gs,jb=ra,Tb=jf,U_=ao("toStringTag");for(var Up in qp){var Tf=Fc[Up],rO=Tf&&Tf.prototype;rO&&kb(rO)!==U_&&jb(rO,U_,Up),Tb[Up]=Tb.Array}var di=bb,uk=ao,nO=wi.f,vv=uk("metadata"),Cb=Function.prototype;Cb[vv]===void 0&&nO(Cb,vv,{value:null}),lo("asyncDispose"),lo("dispose"),lo("metadata");var ck=di,oO=H,Cf=ir("Symbol"),G_=Cf.keyFor,pk=oO(Cf.prototype.valueOf),iO=Cf.isRegisteredSymbol||function(g){try{return G_(pk(g))!==void 0}catch{return!1}};ar({target:"Symbol",stat:!0},{isRegisteredSymbol:iO});for(var Lm=Oa,gv=ir,J_=H,X_=Qd,K_=ao,Mf=gv("Symbol"),Y_=Mf.isWellKnownSymbol,Mb=gv("Object","getOwnPropertyNames"),Q_=J_(Mf.prototype.valueOf),aO=Lm("wks"),Ab=0,eS=Mb(Mf),dk=eS.length;Ab=oe?g?"":void 0:(j=al(U,ie))<55296||j>56319||ie+1===oe||(W=al(U,ie+1))<56320||W>57343?g?nS(U,ie):j:g?Af(U,ie,ie+2):W-56320+(j-55296<<10)+65536}},hk={codeAt:Nm(!1),charAt:Nm(!0)}.charAt,mk=kc,Fm=Vl,sO=Ib,oa=Eb,yv="String Iterator",lO=Fm.set,oS=Fm.getterFor(yv);sO(String,"String",function(g){lO(this,{type:yv,string:mk(g),index:0})},function(){var g,S=oS(this),E=S.string,j=S.index;return j>=E.length?oa(void 0,!0):(g=hk(E,j),S.index+=g.length,oa(g,!1))});var Zl=xs.f("iterator"),Bm=Zl,vk=n(Bm);function Jp(g){return Jp=typeof Nu=="function"&&typeof vk=="symbol"?function(S){return typeof S}:function(S){return S&&typeof Nu=="function"&&S.constructor===Nu&&S!==Nu.prototype?"symbol":typeof S},Jp(g)}var iS=n(xs.f("toPrimitive"));function Lb(g){var S=function(E,j){if(Jp(E)!=="object"||E===null)return E;var W=E[iS];if(W!==void 0){var U=W.call(E,j||"default");if(Jp(U)!=="object")return U;throw new TypeError("@@toPrimitive must return a primitive value.")}return(j==="string"?String:Number)(E)}(g,"string");return Jp(S)==="symbol"?S:String(S)}function Nb(g,S){for(var E=0;E=0:oe>ue;ue+=we)ue in ie&&(W=E(W,ie[ue],ue,U));return W}},mO={left:hO(!1),right:hO(!0)},Df=d,xv=function(g,S){var E=[][g];return!!E&&Df(function(){E.call(null,S||function(){return 1},1)})},Lf=ne(c.process)==="process",vO=mO.left;ar({target:"Array",proto:!0,forced:!Lf&&wa>79&&wa<83||!xv("reduce")},{reduce:function(g){var S=arguments.length;return vO(this,g,S,S>1?arguments[1]:void 0)}});var fS=ia("Array","reduce"),Wb=Mr,hS=fS,gO=Array.prototype,Bc=n(function(g){var S=g.reduce;return g===gO||Wb(gO,g)&&S===gO.reduce?hS:S}),Hb=Ar.filter;ar({target:"Array",proto:!0,forced:!Ec("filter")},{filter:function(g){return Hb(this,g,arguments.length>1?arguments[1]:void 0)}});var mS=ia("Array","filter"),_k=Mr,Sk=mS,yO=Array.prototype,fi=n(function(g){var S=g.filter;return g===yO||_k(yO,g)&&S===yO.filter?Sk:S}),vS=Ar.map;ar({target:"Array",proto:!0,forced:!Ec("map")},{map:function(g){return vS(this,g,arguments.length>1?arguments[1]:void 0)}});var bO=ia("Array","map"),Vb=Mr,wO=bO,_v=Array.prototype,ks=n(function(g){var S=g.map;return g===_v||Vb(_v,g)&&S===_v.map?wO:S}),OO=Qs,Ik=Ni,Ek=cf,gS=mo,xO=function(g,S,E,j,W,U,ie,oe){for(var ue,we,Ee=W,je=0,Ze=!!ie&&gS(ie,oe);je0&&OO(ue)?(we=Ik(ue),Ee=xO(g,S,ue,we,Ee,U-1)-1):(Ek(Ee+1),g[Ee]=ue),Ee++),je++;return Ee},yS=xO,Pk=Ko,kk=ea,bS=Ni,wS=vo;ar({target:"Array",proto:!0},{flatMap:function(g){var S,E=kk(this),j=bS(E);return Pk(g),(S=wS(E,0)).length=yS(S,E,E,j,0,1,g,arguments.length>1?arguments[1]:void 0),S}});var jk=ia("Array","flatMap"),Tk=Mr,Sv=jk,_O=Array.prototype,Ck=n(function(g){var S=g.flatMap;return g===_O||Tk(_O,g)&&S===_O.flatMap?Sv:S}),SO=function(){function g(S,E,j){var W,U,ie;t(this,g),Qa(this,"_listeners",{add:Rf(W=this._add).call(W,this),remove:Rf(U=this._remove).call(U,this),update:Rf(ie=this._update).call(ie,this)}),this._source=S,this._transformers=E,this._target=j}return Fu(g,[{key:"all",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:"start",value:function(){return this._source.on("add",this._listeners.add),this._source.on("remove",this._listeners.remove),this._source.on("update",this._listeners.update),this}},{key:"stop",value:function(){return this._source.off("add",this._listeners.add),this._source.off("remove",this._listeners.remove),this._source.off("update",this._listeners.update),this}},{key:"_transformItems",value:function(S){var E;return Bc(E=this._transformers).call(E,function(j,W){return W(j)},S)}},{key:"_add",value:function(S,E){E!=null&&this._target.add(this._transformItems(this._source.get(E.items)))}},{key:"_update",value:function(S,E){E!=null&&this._target.update(this._transformItems(this._source.get(E.items)))}},{key:"_remove",value:function(S,E){E!=null&&this._target.remove(this._transformItems(E.oldData))}}]),g}(),Mk=function(){function g(S){t(this,g),Qa(this,"_transformers",[]),this._source=S}return Fu(g,[{key:"filter",value:function(S){return this._transformers.push(function(E){return fi(E).call(E,S)}),this}},{key:"map",value:function(S){return this._transformers.push(function(E){return ks(E).call(E,S)}),this}},{key:"flatMap",value:function(S){return this._transformers.push(function(E){return Ck(E).call(E,S)}),this}},{key:"to",value:function(S){return new SO(this._source,this._transformers,S)}}]),g}(),OS=Ae,xS=ta,_S=Co,SS=function(g,S,E){var j,W;xS(g);try{if(!(j=_S(g,"return"))){if(S==="throw")throw E;return E}j=OS(j,g)}catch(U){W=!0,j=U}if(S==="throw")throw E;if(W)throw j;return xS(j),E},$b=ta,IS=SS,Iv=jf,ES=ao("iterator"),IO=Array.prototype,Zb=function(g){return g!==void 0&&(Iv.Array===g||IO[ES]===g)},EO=gs,qb=Co,PO=Ut,PS=jf,Nf=ao("iterator"),Ev=function(g){if(!PO(g))return qb(g,Nf)||qb(g,"@@iterator")||PS[EO(g)]},Vn=Ae,Ak=Ko,kS=ta,jS=fo,yt=Ev,TS=TypeError,Ub=function(g,S){var E=arguments.length<2?yt(g):S;if(Ak(E))return kS(Vn(E,g));throw new TS(jS(g)+" is not iterable")},Rk=mo,Dk=Ae,Lk=ea,Nk=function(g,S,E,j){try{return j?S($b(E)[0],E[1]):S(E)}catch(W){IS(g,"throw",W)}},CS=Zb,Fk=ys,kO=Ni,Ff=Sa,jO=Ub,Bk=Ev,MS=Array,AS=ao("iterator"),Gb=!1;try{var RS=0,DS={next:function(){return{done:!!RS++}},return:function(){Gb=!0}};DS[AS]=function(){return this},Array.from(DS,function(){throw 2})}catch{}var TO=function(g,S){try{if(!S&&!Gb)return!1}catch{return!1}var E=!1;try{var j={};j[AS]=function(){return{next:function(){return{done:E=!0}}}},g(j)}catch{}return E},LS=function(g){var S=Lk(g),E=Fk(this),j=arguments.length,W=j>1?arguments[1]:void 0,U=W!==void 0;U&&(W=Rk(W,j>2?arguments[2]:void 0));var ie,oe,ue,we,Ee,je,Ze=Bk(S),tt=0;if(!Ze||this===MS&&CS(Ze))for(ie=kO(S),oe=E?new this(ie):MS(ie);ie>tt;tt++)je=U?W(S[tt],tt):S[tt],Ff(oe,tt,je);else for(Ee=(we=jO(S,Ze)).next,oe=E?new this:[];!(ue=Dk(Ee,we)).done;tt++)je=U?Nk(we,W,[ue.value,tt],!0):ue.value,Ff(oe,tt,je);return oe.length=tt,oe};ar({target:"Array",stat:!0,forced:!TO(function(g){Array.from(g)})},{from:LS});var NS=tn.Array.from,Jb=n(NS),Xb=Ev,FS=n(Xb),Pv=n(Xb);ar({target:"Array",stat:!0},{isArray:Qs});var CO=tn.Array.isArray,BS=n(CO),zk=Te,Wk=Qs,Hk=TypeError,MO=Object.getOwnPropertyDescriptor,AO=zk&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(g){return g instanceof TypeError}}()?function(g,S){if(Wk(g)&&!MO(g,"length").writable)throw new Hk("Cannot set read only .length");return g.length=S}:function(g,S){return g.length=S},Vk=ea,$k=Ni,Zk=AO,RO=cf;ar({target:"Array",proto:!0,arity:1,forced:d(function(){return[].push.call({length:4294967296},1)!==4294967297})||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(g){return g instanceof TypeError}}()},{push:function(g){var S=Vk(this),E=$k(S),j=arguments.length;RO(E+j);for(var W=0;Wg.length)&&(S=g.length);for(var E=0,j=new Array(S);E1?arguments[1]:void 0)};ar({target:"Array",proto:!0,forced:[].forEach!==XS},{forEach:XS});var oj=ia("Array","forEach"),kv=gs,ij=kr,aj=Mr,jv=oj,Tv=Array.prototype,sj={DOMTokenList:!0,NodeList:!0},Yp=function(g){var S=g.forEach;return g===Tv||aj(Tv,g)&&S===Tv.forEach||ij(sj,kv(g))?jv:S},zu=n(Yp),lj=ar,KS=Qs,uj=H([].reverse),YS=[1,2];lj({target:"Array",proto:!0,forced:String(YS)===String(YS.reverse())},{reverse:function(){return KS(this)&&(this.length=this.length),uj(this)}});var cj=ia("Array","reverse"),pj=Mr,dj=cj,Cv=Array.prototype,QS=function(g){var S=g.reverse;return g===Cv||pj(Cv,g)&&S===Cv.reverse?dj:S},fj=n(QS),e7=fo,zO=TypeError,WO=function(g,S){if(!delete g[S])throw new zO("Cannot delete property "+e7(S)+" of "+e7(g))},hj=ar,mj=ea,vj=ff,gj=_a,yj=Ni,HO=AO,bj=cf,Wc=vo,VO=Sa,$O=WO,wj=Ec("splice"),Oj=Math.max,xj=Math.min;hj({target:"Array",proto:!0,forced:!wj},{splice:function(g,S){var E,j,W,U,ie,oe,ue=mj(this),we=yj(ue),Ee=vj(g,we),je=arguments.length;for(je===0?E=j=0:je===1?(E=0,j=we-Ee):(E=je-2,j=xj(Oj(gj(S),0),we-Ee)),bj(we+E-j),W=Wc(ue,j),U=0;Uwe-j+E;U--)$O(ue,U-1)}else if(E>j)for(U=we-j;U>Ee;U--)oe=U+E-1,(ie=U+j-1)in ue?ue[oe]=ue[ie]:$O(ue,oe);for(U=0;UW;)for(var oe,ue=qO(arguments[W++]),we=U?Qp(Mv(ue),U(ue)):Mv(ue),Ee=we.length,je=0;Ee>je;)oe=we[je++],r7&&!Ij(ie,ue,oe)||(E[oe]=ue[oe]);return E}:ei,UO=jj;ar({target:"Object",stat:!0,arity:2,forced:Object.assign!==UO},{assign:UO});var GO=n(tn.Object.assign),a7=ea,JO=xb,Tj=Ob;ar({target:"Object",stat:!0,forced:d(function(){JO(1)}),sham:!Tj},{getPrototypeOf:function(g){return JO(a7(g))}});var Cj=tn.Object.getPrototypeOf;ar({target:"Object",stat:!0,sham:!Te},{create:Cc});var Mj=tn.Object,s7=function(g,S){return Mj.create(g,S)},XO=n(s7),KO=tn,ts=R;KO.JSON||(KO.JSON={stringify:JSON.stringify});var YO=function(g,S,E){return ts(KO.JSON.stringify,null,arguments)},Aj=n(YO),QO=typeof Bun=="function"&&Bun&&typeof Bun.version=="string",e6=TypeError,t6=function(g,S){if(gE,ie=r6(j)?j:p7(j),oe=U?Dj(arguments,E):[],ue=U?function(){Rj(ie,this,oe)}:ie;return S?g(ue,W):g(ue)}:g},Av=ar,n6=c,o6=r2(n6.setInterval,!0);Av({global:!0,bind:!0,forced:n6.setInterval!==o6},{setInterval:o6});var d7=ar,f7=c,i6=r2(f7.setTimeout,!0);d7({global:!0,bind:!0,forced:f7.setTimeout!==i6},{setTimeout:i6});var Ul=n(tn.setTimeout),a6={exports:{}};(function(g){function S(E){if(E)return function(j){return Object.assign(j,S.prototype),j._callbacks=new Map,j}(E);this._callbacks=new Map}S.prototype.on=function(E,j){let W=this._callbacks.get(E)??[];return W.push(j),this._callbacks.set(E,W),this},S.prototype.once=function(E,j){let W=(...U)=>{this.off(E,W),j.apply(this,U)};return W.fn=j,this.on(E,W),this},S.prototype.off=function(E,j){if(E===void 0&&j===void 0)return this._callbacks.clear(),this;if(j===void 0)return this._callbacks.delete(E),this;let W=this._callbacks.get(E);if(W){for(let[U,ie]of W.entries())if(ie===j||ie.fn===j){W.splice(U,1);break}W.length===0?this._callbacks.delete(E):this._callbacks.set(E,W)}return this},S.prototype.emit=function(E,...j){let W=this._callbacks.get(E);if(W){let U=[...W];for(let ie of U)ie.apply(this,j)}return this},S.prototype.listeners=function(E){return this._callbacks.get(E)??[]},S.prototype.listenerCount=function(E){if(E)return this.listeners(E).length;let j=0;for(let W of this._callbacks.values())j+=W.length;return j},S.prototype.hasListeners=function(E){return this.listenerCount(E)>0},S.prototype.addEventListener=S.prototype.on,S.prototype.removeListener=S.prototype.off,S.prototype.removeEventListener=S.prototype.off,S.prototype.removeAllListeners=S.prototype.off,g.exports=S})(a6);var h7,m7=n(a6.exports);function js(){return js=Object.assign||function(g){for(var S=1;S"u"?{style:{}}:document.createElement("div"),ln=Math.round,zf=Math.abs,i2=Date.now;function Hu(g,S){for(var E,j,W=S[0].toUpperCase()+S.slice(1),U=0;U"u"?{}:window;var Vm=Hu(Fj.style,"touchAction"),v7=Vm!==void 0,g7="compute",$m="auto",s6="manipulation",Wf="none",Zm="pan-x",Rv="pan-y",Dv=function(){if(!v7)return!1;var g={},S=ed.CSS&&ed.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(E){return g[E]=!S||ed.CSS.supports("touch-action",E)}),g}(),y7="ontouchstart"in ed,Bj=Hu(ed,"PointerEvent")!==void 0,b7=y7&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),Lv="touch",l6="mouse",w7=25,Wi=1,ti=4,aa=8,qm=1,Nv=2,Um=4,Gm=8,Ta=16,Vu=Nv|Um,td=Gm|Ta,O7=Vu|td,u6=["x","y"],Fv=["clientX","clientY"];function ll(g,S,E){var j;if(g)if(g.forEach)g.forEach(S,E);else if(g.length!==void 0)for(j=0;j-1}var s2=function(){function g(E,j){this.manager=E,this.set(j)}var S=g.prototype;return S.set=function(E){E===g7&&(E=this.compute()),v7&&this.manager.element.style&&Dv[E]&&(this.manager.element.style[Vm]=E),this.actions=E.toLowerCase().trim()},S.update=function(){this.set(this.manager.options.touchAction)},S.compute=function(){var E=[];return ll(this.manager.recognizers,function(j){a2(j.options.enable,[j])&&(E=E.concat(j.getTouchAction()))}),function(j){if(Hf(j,Wf))return Wf;var W=Hf(j,Zm),U=Hf(j,Rv);return W&&U?Wf:W||U?W?Zm:Rv:Hf(j,s6)?s6:$m}(E.join(" "))},S.preventDefaults=function(E){var j=E.srcEvent,W=E.offsetDirection;if(this.manager.session.prevented)j.preventDefault();else{var U=this.actions,ie=Hf(U,Wf)&&!Dv[Wf],oe=Hf(U,Rv)&&!Dv[Rv],ue=Hf(U,Zm)&&!Dv[Zm];if(ie){var we=E.pointers.length===1,Ee=E.distance<2,je=E.deltaTime<250;if(we&&Ee&&je)return}if(!ue||!oe)return ie||oe&&W&Vu||ue&&W&td?this.preventSrc(j):void 0}},S.preventSrc=function(E){this.manager.session.prevented=!0,E.preventDefault()},g}();function c6(g,S){for(;g;){if(g===S)return!0;g=g.parentNode}return!1}function Jm(g){var S=g.length;if(S===1)return{x:ln(g[0].clientX),y:ln(g[0].clientY)};for(var E=0,j=0,W=0;W=zf(S)?g<0?Nv:Um:S<0?Gm:Ta}function Hc(g,S,E){return{x:S/g||0,y:E/g||0}}function x7(g,S){var E=g.session,j=S.pointers,W=j.length;E.firstInput||(E.firstInput=ul(S)),W>1&&!E.firstMultiple?E.firstMultiple=ul(S):W===1&&(E.firstMultiple=!1);var U=E.firstInput,ie=E.firstMultiple,oe=ie?ie.center:U.center,ue=S.center=Jm(j);S.timeStamp=i2(),S.deltaTime=S.timeStamp-U.timeStamp,S.angle=Xm(oe,ue),S.distance=Ca(oe,ue),function(_t,$t){var dr=$t.center,Wt=_t.offsetDelta||{},hn=_t.prevDelta||{},gn=_t.prevInput||{};$t.eventType!==Wi&&gn.eventType!==ti||(hn=_t.prevDelta={x:gn.deltaX||0,y:gn.deltaY||0},Wt=_t.offsetDelta={x:dr.x,y:dr.y}),$t.deltaX=hn.x+(dr.x-Wt.x),$t.deltaY=hn.y+(dr.y-Wt.y)}(E,S),S.offsetDirection=$u(S.deltaX,S.deltaY);var we,Ee,je=Hc(S.deltaTime,S.deltaX,S.deltaY);S.overallVelocityX=je.x,S.overallVelocityY=je.y,S.overallVelocity=zf(je.x)>zf(je.y)?je.x:je.y,S.scale=ie?(we=ie.pointers,Ca((Ee=j)[0],Ee[1],Fv)/Ca(we[0],we[1],Fv)):1,S.rotation=ie?function(_t,$t){return Xm($t[1],$t[0],Fv)+Xm(_t[1],_t[0],Fv)}(ie.pointers,j):0,S.maxPointers=E.prevInput?S.pointers.length>E.prevInput.maxPointers?S.pointers.length:E.prevInput.maxPointers:S.pointers.length,function(_t,$t){var dr,Wt,hn,gn,$n=_t.lastInterval||$t,Zo=$t.timeStamp-$n.timeStamp;if($t.eventType!==aa&&(Zo>w7||$n.velocity===void 0)){var mn=$t.deltaX-$n.deltaX,da=$t.deltaY-$n.deltaY,La=Hc(Zo,mn,da);Wt=La.x,hn=La.y,dr=zf(La.x)>zf(La.y)?La.x:La.y,gn=$u(mn,da),_t.lastInterval=$t}else dr=$n.velocity,Wt=$n.velocityX,hn=$n.velocityY,gn=$n.direction;$t.velocity=dr,$t.velocityX=Wt,$t.velocityY=hn,$t.direction=gn}(E,S);var Ze,tt=g.element,Et=S.srcEvent;c6(Ze=Et.composedPath?Et.composedPath()[0]:Et.path?Et.path[0]:Et.target,tt)&&(tt=Ze),S.target=tt}function l2(g,S,E){var j=E.pointers.length,W=E.changedPointers.length,U=S&Wi&&j-W==0,ie=S&(ti|aa)&&j-W==0;E.isFirst=!!U,E.isFinal=!!ie,U&&(g.session={}),E.eventType=S,x7(g,E),g.emit("hammer.input",E),g.recognize(E),g.session.prevInput=E}function Zu(g){return g.trim().split(/\s+/g)}function Gl(g,S,E){ll(Zu(S),function(j){g.addEventListener(j,E,!1)})}function Vf(g,S,E){ll(Zu(S),function(j){g.removeEventListener(j,E,!1)})}function Bv(g){var S=g.ownerDocument||g;return S.defaultView||S.parentWindow||window}var $f=function(){function g(E,j){var W=this;this.manager=E,this.callback=j,this.element=E.element,this.target=E.options.inputTarget,this.domHandler=function(U){a2(E.options.enable,[E])&&W.handler(U)},this.init()}var S=g.prototype;return S.handler=function(){},S.init=function(){this.evEl&&Gl(this.element,this.evEl,this.domHandler),this.evTarget&&Gl(this.target,this.evTarget,this.domHandler),this.evWin&&Gl(Bv(this.element),this.evWin,this.domHandler)},S.destroy=function(){this.evEl&&Vf(this.element,this.evEl,this.domHandler),this.evTarget&&Vf(this.target,this.evTarget,this.domHandler),this.evWin&&Vf(Bv(this.element),this.evWin,this.domHandler)},g}();function Vc(g,S,E){if(g.indexOf&&!E)return g.indexOf(S);for(var j=0;jue[S]}):j.sort()),j}var I7={touchstart:Wi,touchmove:2,touchend:ti,touchcancel:aa},p6=function(g){function S(){var E;return S.prototype.evTarget="touchstart touchmove touchend touchcancel",(E=g.apply(this,arguments)||this).targetIds={},E}return Ts(S,g),S.prototype.handler=function(E){var j=I7[E.type],W=zj.call(this,E,j);W&&this.callback(this.manager,j,{pointers:W[0],changedPointers:W[1],pointerType:Lv,srcEvent:E})},S}($f);function zj(g,S){var E,j,W=qu(g.touches),U=this.targetIds;if(S&(2|Wi)&&W.length===1)return U[W[0].identifier]=!0,[W,W];var ie=qu(g.changedTouches),oe=[],ue=this.target;if(j=W.filter(function(we){return c6(we.target,ue)}),S===Wi)for(E=0;E-1&&j.splice(W,1)},E7)}}function ri(g,S){g&Wi?(this.primaryTouch=S.changedPointers[0].identifier,sa.call(this,S)):g&(ti|aa)&&sa.call(this,S)}function rs(g){for(var S=g.srcEvent.clientX,E=g.srcEvent.clientY,j=0;j-1&&this.requireFail.splice(j,1),this},S.hasRequireFailures=function(){return this.requireFail.length>0},S.canRecognizeWith=function(E){return!!this.simultaneous[E.id]},S.emit=function(E){var j=this,W=this.state;function U(ie){j.manager.emit(ie,E)}W<8&&U(j.options.event+Jl(W)),U(j.options.event),E.additionalEvent&&U(E.additionalEvent),W>=8&&U(j.options.event+Jl(W))},S.tryEmit=function(E){if(this.canEmit())return this.emit(E);this.state=cl},S.canEmit=function(){for(var E=0;EW.threshold&&oe&W.direction},E.attrTest=function(j){return Zf.prototype.attrTest.call(this,j)&&(2&this.state||!(2&this.state)&&this.directionTest(j))},E.emit=function(j){this.pX=j.deltaX,this.pY=j.deltaY;var W=$v(j.direction);W&&(j.additionalEvent=this.options.event+W),g.prototype.emit.call(this,j)},S}(Zf),Zv=function(g){function S(j){return j===void 0&&(j={}),g.call(this,js({event:"swipe",threshold:10,velocity:.3,direction:Vu|td,pointers:1},j))||this}Ts(S,g);var E=S.prototype;return E.getTouchAction=function(){return Cs.prototype.getTouchAction.call(this)},E.attrTest=function(j){var W,U=this.options.direction;return U&(Vu|td)?W=j.overallVelocity:U&Vu?W=j.overallVelocityX:U&td&&(W=j.overallVelocityY),g.prototype.attrTest.call(this,j)&&U&j.offsetDirection&&j.distance>this.options.threshold&&j.maxPointers===this.options.pointers&&zf(W)>this.options.velocity&&j.eventType&ti},E.emit=function(j){var W=$v(j.offsetDirection);W&&this.manager.emit(this.options.event+W,j),this.manager.emit(this.options.event,j)},S}(Zf),nd=function(g){function S(j){return j===void 0&&(j={}),g.call(this,js({event:"pinch",threshold:0,pointers:2},j))||this}Ts(S,g);var E=S.prototype;return E.getTouchAction=function(){return[Wf]},E.attrTest=function(j){return g.prototype.attrTest.call(this,j)&&(Math.abs(j.scale-1)>this.options.threshold||2&this.state)},E.emit=function(j){if(j.scale!==1){var W=j.scale<1?"in":"out";j.additionalEvent=this.options.event+W}g.prototype.emit.call(this,j)},S}(Zf),d6=function(g){function S(j){return j===void 0&&(j={}),g.call(this,js({event:"rotate",threshold:0,pointers:2},j))||this}Ts(S,g);var E=S.prototype;return E.getTouchAction=function(){return[Wf]},E.attrTest=function(j){return g.prototype.attrTest.call(this,j)&&(Math.abs(j.rotation)>this.options.threshold||2&this.state)},S}(Zf),p2=function(g){function S(j){var W;return j===void 0&&(j={}),(W=g.call(this,js({event:"press",pointers:1,time:251,threshold:9},j))||this)._timer=null,W._input=null,W}Ts(S,g);var E=S.prototype;return E.getTouchAction=function(){return[$m]},E.process=function(j){var W=this,U=this.options,ie=j.pointers.length===U.pointers,oe=j.distanceU.time;if(this._input=j,!oe||!ie||j.eventType&(ti|aa)&&!ue)this.reset();else if(j.eventType&Wi)this.reset(),this._timer=setTimeout(function(){W.state=8,W.tryEmit()},U.time);else if(j.eventType&ti)return 8;return cl},E.reset=function(){clearTimeout(this._timer)},E.emit=function(j){this.state===8&&(j&&j.eventType&ti?this.manager.emit(this.options.event+"up",j):(this._input.timeStamp=i2(),this.manager.emit(this.options.event,this._input)))},S}(Xl),f6={domEvents:!1,touchAction:g7,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},h6=[[d6,{enable:!1}],[nd,{enable:!1},["rotate"]],[Zv,{direction:Vu}],[Cs,{direction:Vu},["swipe"]],[c2],[c2,{event:"doubletap",taps:2},["tap"]],[p2]];function qv(g,S){var E,j=g.element;j.style&&(ll(g.options.cssProps,function(W,U){E=Hu(j.style,U),S?(g.oldCssProps[E]=j.style[E],j.style[E]=W):j.style[E]=g.oldCssProps[E]||""}),S||(g.oldCssProps={}))}var Uv=function(){function g(E,j){var W,U=this;this.options=Wu({},f6,j||{}),this.options.inputTarget=this.options.inputTarget||E,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=E,this.input=new((W=this).options.inputClass||(Bj?Km:b7?p6:y7?Hv:Wv))(W,l2),this.touchAction=new s2(this,this.options.touchAction),qv(this,!0),ll(this.options.recognizers,function(ie){var oe=U.add(new ie[0](ie[1]));ie[2]&&oe.recognizeWith(ie[2]),ie[3]&&oe.requireFailure(ie[3])},this)}var S=g.prototype;return S.set=function(E){return Wu(this.options,E),E.touchAction&&this.touchAction.update(),E.inputTarget&&(this.input.destroy(),this.input.target=E.inputTarget,this.input.init()),this},S.stop=function(E){this.session.stopped=E?2:1},S.recognize=function(E){var j=this.session;if(!j.stopped){var W;this.touchAction.preventDefaults(E);var U=this.recognizers,ie=j.curRecognizer;(!ie||ie&&8&ie.state)&&(j.curRecognizer=null,ie=null);for(var oe=0;oe\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",ie=window.console&&(window.console.warn||window.console.log);return ie&&ie.call(window.console,j,U),g.apply(this,arguments)}}var Qm=m6(function(g,S,E){for(var j=Object.keys(S),W=0;W=g.length?{done:!0}:{done:!1,value:g[j++]}},e:function(ue){throw ue},f:W}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var U,ie=!0,oe=!1;return{s:function(){E=E.call(g)},n:function(){var ue=E.next();return ie=ue.done,ue},e:function(ue){oe=!0,U=ue},f:function(){try{ie||E.return==null||E.return()}finally{if(oe)throw U}}}}function j7(g,S){(S==null||S>g.length)&&(S=g.length);for(var E=0,j=new Array(S);E2)return Gv.apply(void 0,e2(j=[y6(S[0],S[1])]).call(j,Ni(Bu(S).call(S,2))));var W=S[0],U=S[1];if(W instanceof Date&&U instanceof Date)return W.setTime(U.getTime()),W;var ie,oe=od(US(U));try{for(oe.s();!(ie=oe.n()).done;){var ue=ie.value;Object.prototype.propertyIsEnumerable.call(U,ue)&&(U[ue]===g6?delete W[ue]:W[ue]===null||U[ue]===null||typeof W[ue]!="object"||typeof U[ue]!="object"||Bi(W[ue])||Bi(U[ue])?W[ue]=b6(U[ue]):W[ue]=Gv(W[ue],U[ue]))}}catch(we){oe.e(we)}finally{oe.f()}return W}function b6(g){return Bi(g)?ks(g).call(g,function(S){return b6(S)}):typeof g=="object"&&g!==null?g instanceof Date?new Date(g.getTime()):Gv({},g):g}function id(g){for(var S=0,E=Fn(g);S({set:g})}}()};function Zc(g){var S,E=this;this._cleanupQueue=[],this.active=!1,this._dom={container:g,overlay:document.createElement("div")},this._dom.overlay.classList.add("vis-overlay"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push(function(){E._dom.overlay.parentNode.removeChild(E._dom.overlay)});var j=w6(this._dom.overlay);j.on("tap",Rf(S=this._onTapOverlay).call(S,this)),this._cleanupQueue.push(function(){j.destroy()});var W=["tap","doubletap","press","pinch","pan","panstart","panmove","panend"];zu(W).call(W,function(U){j.on(U,function(ie){ie.srcEvent.stopPropagation()})}),document&&document.body&&(this._onClick=function(U){(function(ie,oe){for(;ie;){if(ie===oe)return!0;ie=ie.parentNode}return!1})(U.target,g)||E.deactivate()},document.body.addEventListener("click",this._onClick),this._cleanupQueue.push(function(){document.body.removeEventListener("click",E._onClick)})),this._escListener=function(U){("key"in U?U.key==="Escape":U.keyCode===27)&&E.deactivate()}}m7(Zc.prototype),Zc.current=null,Zc.prototype.destroy=function(){var g,S;this.deactivate();var E,j=od(fj(g=t7(S=this._cleanupQueue).call(S,0)).call(g));try{for(j.s();!(E=j.n()).done;)(0,E.value)()}catch(W){j.e(W)}finally{j.f()}},Zc.prototype.activate=function(){Zc.current&&Zc.current.deactivate(),Zc.current=this,this.active=!0,this._dom.overlay.style.display="none",this._dom.container.classList.add("vis-active"),this.emit("change"),this.emit("activate"),document.body.addEventListener("keydown",this._escListener)},Zc.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display="block",this._dom.container.classList.remove("vis-active"),document.body.removeEventListener("keydown",this._escListener),this.emit("change"),this.emit("deactivate")},Zc.prototype._onTapOverlay=function(g){this.activate(),g.srcEvent.stopPropagation()};var O6=ys,Hj=fo,Vj=TypeError,r0=function(g){if(O6(g))return g;throw new Vj(Hj(g)+" is not a constructor")},$j=ar,p2=R,T7=cS,C7=r0,M7=ta,qf=St,ad=Cc,x6=d,n0=ir("Reflect","construct"),A7=Object.prototype,Jv=[].push,d2=x6(function(){function g(){}return!(n0(function(){},[],g)instanceof g)}),Uf=!x6(function(){n0(function(){})}),_6=d2||Uf;$j({target:"Reflect",stat:!0,forced:_6,sham:_6},{construct:function(g,S){C7(g),M7(S);var E=arguments.length<3?g:C7(arguments[2]);if(Uf&&!d2)return n0(g,S,E);if(g===E){switch(S.length){case 0:return new g;case 1:return new g(S[0]);case 2:return new g(S[0],S[1]);case 3:return new g(S[0],S[1],S[2]);case 4:return new g(S[0],S[1],S[2],S[3])}var j=[null];return p2(Jv,j,S),new(p2(T7,g,j))}var W=E.prototype,U=ad(qf(W)?W:A7),ie=p2(g,U,S);return qf(ie)?ie:U}});var Kl=n(tn.Reflect.construct),Xv=n(tn.Object.getOwnPropertySymbols),f2={exports:{}},R7=ar,Ma=d,D7=Nr,S6=Se.f,I6=Te;R7({target:"Object",stat:!0,forced:!I6||Ma(function(){S6(1)}),sham:!I6},{getOwnPropertyDescriptor:function(g,S){return S6(D7(g),S)}});var Wi=tn.Object,Zj=f2.exports=function(g,S){return Wi.getOwnPropertyDescriptor(g,S)};Wi.getOwnPropertyDescriptor.sham&&(Zj.sham=!0);var o0=n(f2.exports),qj=zc,L7=Nr,N7=Se,Uj=Sa;ar({target:"Object",stat:!0,sham:!Te},{getOwnPropertyDescriptors:function(g){for(var S,E,j=L7(g),W=N7.f,U=qj(j),ie={},oe=0;U.length>oe;)(E=W(j,S=U[oe++]))!==void 0&&Uj(ie,S,E);return ie}});var h2=n(tn.Object.getOwnPropertyDescriptors),E6={exports:{}},F7=ar,Gj=Te,P6=sm.f;F7({target:"Object",stat:!0,forced:Object.defineProperties!==P6,sham:!Gj},{defineProperties:P6});var i0=tn.Object,m2=E6.exports=function(g,S){return i0.defineProperties(g,S)};i0.defineProperties.sham&&(m2.sham=!0);var Gf=n(E6.exports),Yl=n(Xh);function Kv(g){if(g===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return g}var B7=s7,Jj=n(B7);ar({target:"Object",stat:!0},{setPrototypeOf:Dm});var z7=tn.Object.setPrototypeOf,Gu=n(z7),Ql=n(Fb);function v2(g,S){var E;return v2=Gu?Ql(E=Gu).call(E):function(j,W){return j.__proto__=W,j},v2(g,S)}function sd(g,S){if(typeof S!="function"&&S!==null)throw new TypeError("Super expression must either be null or a function");g.prototype=Jj(S&&S.prototype,{constructor:{value:g,writable:!0,configurable:!0}}),Tp(g,"prototype",{writable:!1}),S&&v2(g,S)}function k6(g,S){if(S&&(Jp(S)==="object"||typeof S=="function"))return S;if(S!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Kv(g)}var Jf=Cj,Yv=n(Jf);function jn(g){var S;return jn=Gu?Ql(S=Yv).call(S):function(E){return E.__proto__||Yv(E)},jn(g)}var Qv={exports:{}},j6={exports:{}};(function(g){var S=Ab,E=Bm;function j(W){return g.exports=j=typeof S=="function"&&typeof E=="symbol"?function(U){return typeof U}:function(U){return U&&typeof S=="function"&&U.constructor===S&&U!==S.prototype?"symbol":typeof U},g.exports.__esModule=!0,g.exports.default=g.exports,j(W)}g.exports=j,g.exports.__esModule=!0,g.exports.default=g.exports})(j6);var nn=j6.exports,Hi=Yp,Ms=kr,W7=zc,g2=Se,eg=bi,y2=St,T6=ra,C6=Error,H7=H("".replace),ld=String(new C6("zxcasd").stack),As=/\n\s*at [^:]*:[^\n]*/,M6=As.test(ld),ud=Vt,Xj=!d(function(){var g=new Error("a");return!("stack"in g)||(Object.defineProperty(g,"stack",ud(1,7)),g.stack!==7)}),Kj=ra,A6=function(g,S){if(M6&&typeof g=="string"&&!C6.prepareStackTrace)for(;S--;)g=H7(g,As,"");return g},V7=Xj,R6=Error.captureStackTrace,Yj=mo,tg=De,D6=ta,Qj=fo,eT=$b,tT=Li,Xf=Mr,rT=qb,b2=Iv,$7=SS,L6=TypeError,rg=function(g,S){this.stopped=g,this.result=S},eu=rg.prototype,Vo=function(g,S,E){var j,W,U,ie,oe,ue,we,Ee=E&&E.that,je=!(!E||!E.AS_ENTRIES),Ze=!(!E||!E.IS_RECORD),tt=!(!E||!E.IS_ITERATOR),Et=!(!E||!E.INTERRUPTED),_t=Yj(S,Ee),$t=function(Wt){return j&&$7(j,"normal",Wt),new rg(!0,Wt)},dr=function(Wt){return je?(D6(Wt),Et?_t(Wt[0],Wt[1],$t):_t(Wt[0],Wt[1])):Et?_t(Wt,$t):_t(Wt)};if(Ze)j=g.iterator;else if(tt)j=g;else{if(!(W=b2(g)))throw new L6(Qj(g)+" is not iterable");if(eT(W)){for(U=0,ie=tT(g);ie>U;U++)if((oe=dr(g[U]))&&Xf(eu,oe))return oe;return new rg(!1)}j=rT(g,W)}for(ue=Ze?g.next:j.next;!(we=tg(ue,j)).done;){try{oe=dr(we.value)}catch(Wt){$7(j,"throw",Wt)}if(typeof oe=="object"&&oe&&Xf(eu,oe))return oe}return new rg(!1)},Z7=kc,cd=ar,a0=Mr,$r=Ob,sr=Dm,ns=function(g,S,E){for(var j=W7(S),W=eg.f,U=g2.f,ie=0;ie2&&dd(E,arguments[2]);var W=[];return N6(g,U7,{that:W}),pd(E,"errors",W),E};sr?sr(Kf,An):ns(Kf,An,{name:!0});var w2=Kf.prototype=hi(An.prototype,{constructor:s0(1,Kf),message:s0(1,""),name:s0(1,"AggregateError")});cd({global:!0,constructor:!0,arity:2},{AggregateError:Kf});var l0,Ju,la,O2,G7=ir,J7=tl,F6=Te,X7=ao("species"),u0=function(g){var S=G7(g);F6&&S&&!S[X7]&&J7(S,X7,{configurable:!0,get:function(){return this}})},iT=Mr,aT=TypeError,B6=function(g,S){if(iT(S,g))return g;throw new aT("Incorrect invocation")},z6=ta,K7=r0,sT=Ut,lT=ao("species"),Y7=function(g,S){var E,j=z6(g).constructor;return j===void 0||sT(E=z6(j)[lT])?S:K7(E)},x2=/(?:ipad|iphone|ipod).*applewebkit/i.test(Ur),os=c,_2=R,uT=mo,W6=be,Q7=kr,H6=d,e8=cm,cT=av,S2=wu,V6=t6,t8=x2,pT=Lf,ng=os.setImmediate,$6=os.clearImmediate,Yf=os.process,pl=os.Dispatch,dT=os.Function,I2=os.MessageChannel,fT=os.String,Qf=0,og={},r8="onreadystatechange";H6(function(){l0=os.location});var Z6=function(g){if(Q7(og,g)){var S=og[g];delete og[g],S()}},q6=function(g){return function(){Z6(g)}},n8=function(g){Z6(g.data)},U6=function(g){os.postMessage(fT(g),l0.protocol+"//"+l0.host)};ng&&$6||(ng=function(g){V6(arguments.length,1);var S=W6(g)?g:dT(g),E=cT(arguments,1);return og[++Qf]=function(){_2(S,void 0,E)},Ju(Qf),Qf},$6=function(g){delete og[g]},pT?Ju=function(g){Yf.nextTick(q6(g))}:pl&&pl.now?Ju=function(g){pl.now(q6(g))}:I2&&!t8?(O2=(la=new I2).port2,la.port1.onmessage=n8,Ju=uT(O2.postMessage,O2)):os.addEventListener&&W6(os.postMessage)&&!os.importScripts&&l0&&l0.protocol!=="file:"&&!H6(U6)?(Ju=U6,os.addEventListener("message",n8,!1)):Ju=r8 in S2("script")?function(g){e8.appendChild(S2("script"))[r8]=function(){e8.removeChild(this),Z6(g)}}:function(g){setTimeout(q6(g),0)});var G6={set:ng,clear:$6},o8=function(){this.head=null,this.tail=null};o8.prototype={add:function(g){var S={item:g,next:null},E=this.tail;E?E.next=S:this.head=S,this.tail=S},get:function(){var g=this.head;if(g)return(this.head=g.next)===null&&(this.tail=null),g.item}};var c0,ig,J6,p0,X6,E2=o8,hT=/ipad|iphone|ipod/i.test(Ur)&&typeof Pebble<"u",mT=/web0s(?!.*chrome)/i.test(Ur),qc=c,i8=mo,vT=Se.f,K6=G6.set,gT=E2,yT=x2,bT=hT,a8=mT,Y6=Lf,s8=qc.MutationObserver||qc.WebKitMutationObserver,P2=qc.document,l8=qc.process,k2=qc.Promise,u8=vT(qc,"queueMicrotask"),Q6=u8&&u8.value;if(!Q6){var j2=new gT,T2=function(){var g,S;for(Y6&&(g=l8.domain)&&g.exit();S=j2.get();)try{S()}catch(E){throw j2.head&&c0(),E}g&&g.enter()};yT||Y6||a8||!s8||!P2?!bT&&k2&&k2.resolve?((p0=k2.resolve(void 0)).constructor=k2,X6=i8(p0.then,p0),c0=function(){X6(T2)}):Y6?c0=function(){l8.nextTick(T2)}:(K6=i8(K6,qc),c0=function(){K6(T2)}):(ig=!0,J6=P2.createTextNode(""),new s8(T2).observe(J6,{characterData:!0}),c0=function(){J6.data=ig=!ig}),Q6=function(g){j2.head||c0(),j2.add(g)}}var e4=Q6,d0=function(g){try{return{error:!1,value:g()}}catch(S){return{error:!0,value:S}}},Xu=c.Promise,t4=typeof Deno=="object"&&Deno&&typeof Deno.version=="object",wT=!t4&&!Lf&&typeof window=="object"&&typeof document=="object",OT=c,f0=Xu,xT=be,_T=Gh,c8=Ay,ST=ao,IT=wT,p8=t4,r4=wa,n4=f0&&f0.prototype,d8=ST("species"),o4=!1,h0=xT(OT.PromiseRejectionEvent),i4=_T("Promise",function(){var g=c8(f0),S=g!==String(f0);if(!S&&r4===66||!n4.catch||!n4.finally)return!0;if(!r4||r4<51||!/native code/.test(g)){var E=new f0(function(W){W(1)}),j=function(W){W(function(){},function(){})};if((E.constructor={})[d8]=j,!(o4=E.then(function(){})instanceof j))return!0}return!S&&(IT||p8)&&!h0}),m0={CONSTRUCTOR:i4,REJECTION_EVENT:h0,SUBCLASSING:o4},Rs={},a4=Ko,f8=TypeError,ET=function(g){var S,E;this.promise=new g(function(j,W){if(S!==void 0||E!==void 0)throw new f8("Bad Promise constructor");S=j,E=W}),this.resolve=a4(S),this.reject=a4(E)};Rs.f=function(g){return new ET(g)};var ag,s4,PT=ar,Ku=Lf,Ii=c,ua=De,C2=Os,l4=Cu,Uc=u0,h8=Ko,u4=be,fd=St,eh=B6,th=Y7,M2=G6.set,v0=e4,Yu=function(g,S){try{arguments.length===1?console.error(g):console.error(g,S)}catch{}},c4=d0,p4=E2,m8=Vl,sg=Xu,Qu=m0,A2=Rs,ec="Promise",g0=Qu.CONSTRUCTOR,lg=Qu.REJECTION_EVENT,Ds=m8.getterFor(ec),v8=m8.set,g8=sg&&sg.prototype,ug=sg,R2=g8,rh=Ii.TypeError,d4=Ii.document,hd=Ii.process,y0=A2.f,D2=y0,ca=!!(d4&&d4.createEvent&&Ii.dispatchEvent),md="unhandledrejection",$o=function(g){var S;return!(!fd(g)||!u4(S=g.then))&&S},Aa=function(g,S){var E,j,W,U=S.value,ie=S.state===1,oe=ie?g.ok:g.fail,ue=g.resolve,we=g.reject,Ee=g.domain;try{oe?(ie||(S.rejection===2&&oh(S),S.rejection=1),oe===!0?E=U:(Ee&&Ee.enter(),E=oe(U),Ee&&(Ee.exit(),W=!0)),E===g.promise?we(new rh("Promise-chain cycle")):(j=$o(E))?ua(j,E,ue,we):ue(E)):we(U)}catch(je){Ee&&!W&&Ee.exit(),we(je)}},cg=function(g,S){g.notified||(g.notified=!0,v0(function(){for(var E,j=g.reactions;E=j.get();)Aa(E,g);g.notified=!1,S&&!g.rejection&&vd(g)}))},b0=function(g,S,E){var j,W;ca?((j=d4.createEvent("Event")).promise=S,j.reason=E,j.initEvent(g,!1,!0),Ii.dispatchEvent(j)):j={promise:S,reason:E},!lg&&(W=Ii["on"+g])?W(j):g===md&&Yu("Unhandled promise rejection",E)},vd=function(g){ua(M2,Ii,function(){var S,E=g.facade,j=g.value;if(nh(g)&&(S=c4(function(){Ku?hd.emit("unhandledRejection",j,E):b0(md,E,j)}),g.rejection=Ku||nh(g)?2:1,S.error))throw S.value})},nh=function(g){return g.rejection!==1&&!g.parent},oh=function(g){ua(M2,Ii,function(){var S=g.facade;Ku?hd.emit("rejectionHandled",S):b0("rejectionhandled",S,g.value)})},pa=function(g,S,E){return function(j){g(S,j,E)}},Ls=function(g,S,E){g.done||(g.done=!0,E&&(g=E),g.value=S,g.state=2,cg(g,!0))},L2=function(g,S,E){if(!g.done){g.done=!0,E&&(g=E);try{if(g.facade===S)throw new rh("Promise can't be resolved itself");var j=$o(S);j?v0(function(){var W={done:!1};try{ua(j,S,pa(L2,W,g),pa(Ls,W,g))}catch(U){Ls(W,U,g)}}):(g.value=S,g.state=1,cg(g,!1))}catch(W){Ls({done:!1},W,g)}}};g0&&(R2=(ug=function(g){eh(this,R2),h8(g),ua(ag,this);var S=Ds(this);try{g(pa(L2,S),pa(Ls,S))}catch(E){Ls(S,E)}}).prototype,(ag=function(g){v8(this,{type:ec,done:!1,notified:!1,parent:!1,reactions:new p4,rejection:!1,state:0,value:void 0})}).prototype=C2(R2,"then",function(g,S){var E=Ds(this),j=y0(th(this,ug));return E.parent=!0,j.ok=!u4(g)||g,j.fail=u4(S)&&S,j.domain=Ku?hd.domain:void 0,E.state===0?E.reactions.add(j):v0(function(){Aa(j,E)}),j.promise}),s4=function(){var g=new ag,S=Ds(g);this.promise=g,this.resolve=pa(L2,S),this.reject=pa(Ls,S)},A2.f=y0=function(g){return g===ug||g===void 0?new s4(g):D2(g)}),PT({global:!0,constructor:!0,wrap:!0,forced:g0},{Promise:ug}),l4(ug,ec,!1,!0),Uc(ec);var y8=Xu,ih=m0.CONSTRUCTOR||!TO(function(g){y8.all(g).then(void 0,function(){})}),Gc=De,N2=Ko,ah=Rs,f4=d0,F2=Vo;ar({target:"Promise",stat:!0,forced:ih},{all:function(g){var S=this,E=ah.f(S),j=E.resolve,W=E.reject,U=f4(function(){var ie=N2(S.resolve),oe=[],ue=0,we=1;F2(g,function(Ee){var je=ue++,Ze=!1;we++,Gc(ie,S,Ee).then(function(tt){Ze||(Ze=!0,oe[je]=tt,--we||j(oe))},W)}),--we||j(oe)});return U.error&&W(U.value),E.promise}});var w0=ar,h4=m0.CONSTRUCTOR;Xu&&Xu.prototype,w0({target:"Promise",proto:!0,forced:h4,real:!0},{catch:function(g){return this.then(void 0,g)}});var b8=De,B2=Ko,m4=Rs,w8=d0,kT=Vo;ar({target:"Promise",stat:!0,forced:ih},{race:function(g){var S=this,E=m4.f(S),j=E.reject,W=w8(function(){var U=B2(S.resolve);kT(g,function(ie){b8(U,S,ie).then(E.resolve,j)})});return W.error&&j(W.value),E.promise}});var z2=De,jT=Rs;ar({target:"Promise",stat:!0,forced:m0.CONSTRUCTOR},{reject:function(g){var S=jT.f(this);return z2(S.reject,void 0,g),S.promise}});var TT=ta,O8=St,CT=Rs,x8=function(g,S){if(TT(g),O8(S)&&S.constructor===g)return S;var E=CT.f(g);return(0,E.resolve)(S),E.promise},O0=ar,pg=Xu,Jc=m0.CONSTRUCTOR,v4=x8,x0=ir("Promise"),sh=!Jc;O0({target:"Promise",stat:!0,forced:!0},{resolve:function(g){return v4(sh&&this===x0?pg:this,g)}});var MT=De,AT=Ko,W2=Rs,_8=d0,g4=Vo;ar({target:"Promise",stat:!0,forced:ih},{allSettled:function(g){var S=this,E=W2.f(S),j=E.resolve,W=E.reject,U=_8(function(){var ie=AT(S.resolve),oe=[],ue=0,we=1;g4(g,function(Ee){var je=ue++,Ze=!1;we++,MT(ie,S,Ee).then(function(tt){Ze||(Ze=!0,oe[je]={status:"fulfilled",value:tt},--we||j(oe))},function(tt){Ze||(Ze=!0,oe[je]={status:"rejected",reason:tt},--we||j(oe))})}),--we||j(oe)});return U.error&&W(U.value),E.promise}});var dg=De,H2=Ko,RT=ir,S8=Rs,fg=d0,DT=Vo,I8="No one promise resolved";ar({target:"Promise",stat:!0,forced:ih},{any:function(g){var S=this,E=RT("AggregateError"),j=S8.f(S),W=j.resolve,U=j.reject,ie=fg(function(){var oe=H2(S.resolve),ue=[],we=0,Ee=1,je=!1;DT(g,function(Ze){var tt=we++,Et=!1;Ee++,dg(oe,S,Ze).then(function(_t){Et||je||(je=!0,W(_t))},function(_t){Et||je||(Et=!0,ue[tt]=_t,--Ee||U(new E(ue,I8)))})}),--Ee||U(new E(ue,I8))});return ie.error&&U(ie.value),j.promise}});var E8=ar,V2=Xu,$2=d,Xe=ir,P8=be,Z2=Y7,q2=x8,y4=V2&&V2.prototype;E8({target:"Promise",proto:!0,real:!0,forced:!!V2&&$2(function(){y4.finally.call({then:function(){}},function(){})})},{finally:function(g){var S=Z2(this,Xe("Promise")),E=P8(g);return this.then(E?function(j){return q2(S,g()).then(function(){return j})}:g,E?function(j){return q2(S,g()).then(function(){throw j})}:g)}});var xn=tn.Promise,Bn=Rs;ar({target:"Promise",stat:!0},{withResolvers:function(){var g=Bn.f(this);return{promise:g.promise,resolve:g.resolve,reject:g.reject}}});var lh=xn,zt=Rs,Ei=d0;ar({target:"Promise",stat:!0,forced:!0},{try:function(g){var S=zt.f(this),E=Ei(g);return(E.error?S.reject:S.resolve)(E.value),S.promise}});var _0=lh,gd=QS;(function(g){var S=nn.default,E=Su,j=Ab,W=B7,U=Jf,ie=Hi,oe=Kb,ue=z7,we=_0,Ee=gd,je=$S;function Ze(){g.exports=Ze=function(){return Et},g.exports.__esModule=!0,g.exports.default=g.exports;var tt,Et={},_t=Object.prototype,$t=_t.hasOwnProperty,dr=E||function(nt,ct,pt){nt[ct]=pt.value},Wt=typeof j=="function"?j:{},hn=Wt.iterator||"@@iterator",gn=Wt.asyncIterator||"@@asyncIterator",$n=Wt.toStringTag||"@@toStringTag";function Zo(nt,ct,pt){return E(nt,ct,{value:pt,enumerable:!0,configurable:!0,writable:!0}),nt[ct]}try{Zo({},"")}catch{Zo=function(ct,pt,Fr){return ct[pt]=Fr}}function mn(nt,ct,pt,Fr){var rr=ct&&ct.prototype instanceof u5?ct:u5,Zn=W(rr.prototype),Io=new vh(Fr||[]);return dr(Zn,"_invoke",{value:OC(nt,pt,Io)}),Zn}function da(nt,ct,pt){try{return{type:"normal",arg:nt.call(ct,pt)}}catch(Fr){return{type:"throw",arg:Fr}}}Et.wrap=mn;var La="suspendedStart",ep="suspendedYield",Og="executing",hh="completed",is={};function u5(){}function xg(){}function mh(){}var c5={};Zo(c5,hn,function(){return this});var p5=U&&U(U(d5([])));p5&&p5!==_t&&$t.call(p5,hn)&&(c5=p5);var Od=mh.prototype=u5.prototype=W(c5);function gI(nt){var ct;ie(ct=["next","throw","return"]).call(ct,function(pt){Zo(nt,pt,function(Fr){return this._invoke(pt,Fr)})})}function _g(nt,ct){function pt(rr,Zn,Io,Na){var as=da(nt[rr],nt,Zn);if(as.type!=="throw"){var xd=as.arg,_d=xd.value;return _d&&S(_d)=="object"&&$t.call(_d,"__await")?ct.resolve(_d.__await).then(function(gh){pt("next",gh,Io,Na)},function(gh){pt("throw",gh,Io,Na)}):ct.resolve(_d).then(function(gh){xd.value=gh,Io(xd)},function(gh){return pt("throw",gh,Io,Na)})}Na(as.arg)}var Fr;dr(this,"_invoke",{value:function(rr,Zn){function Io(){return new ct(function(Na,as){pt(rr,Zn,Na,as)})}return Fr=Fr?Fr.then(Io,Io):Io()}})}function OC(nt,ct,pt){var Fr=La;return function(rr,Zn){if(Fr===Og)throw new Error("Generator is already running");if(Fr===hh){if(rr==="throw")throw Zn;return{value:tt,done:!0}}for(pt.method=rr,pt.arg=Zn;;){var Io=pt.delegate;if(Io){var Na=W4(Io,pt);if(Na){if(Na===is)continue;return Na}}if(pt.method==="next")pt.sent=pt._sent=pt.arg;else if(pt.method==="throw"){if(Fr===La)throw Fr=hh,pt.arg;pt.dispatchException(pt.arg)}else pt.method==="return"&&pt.abrupt("return",pt.arg);Fr=Og;var as=da(nt,ct,pt);if(as.type==="normal"){if(Fr=pt.done?hh:ep,as.arg===is)continue;return{value:as.arg,done:pt.done}}as.type==="throw"&&(Fr=hh,pt.method="throw",pt.arg=as.arg)}}}function W4(nt,ct){var pt=ct.method,Fr=nt.iterator[pt];if(Fr===tt)return ct.delegate=null,pt==="throw"&&nt.iterator.return&&(ct.method="return",ct.arg=tt,W4(nt,ct),ct.method==="throw")||pt!=="return"&&(ct.method="throw",ct.arg=new TypeError("The iterator does not provide a '"+pt+"' method")),is;var rr=da(Fr,nt.iterator,ct.arg);if(rr.type==="throw")return ct.method="throw",ct.arg=rr.arg,ct.delegate=null,is;var Zn=rr.arg;return Zn?Zn.done?(ct[nt.resultName]=Zn.value,ct.next=nt.nextLoc,ct.method!=="return"&&(ct.method="next",ct.arg=tt),ct.delegate=null,is):Zn:(ct.method="throw",ct.arg=new TypeError("iterator result is not an object"),ct.delegate=null,is)}function yI(nt){var ct,pt={tryLoc:nt[0]};1 in nt&&(pt.catchLoc=nt[1]),2 in nt&&(pt.finallyLoc=nt[2],pt.afterLoc=nt[3]),oe(ct=this.tryEntries).call(ct,pt)}function H4(nt){var ct=nt.completion||{};ct.type="normal",delete ct.arg,nt.completion=ct}function vh(nt){this.tryEntries=[{tryLoc:"root"}],ie(nt).call(nt,yI,this),this.reset(!0)}function d5(nt){if(nt||nt===""){var ct=nt[hn];if(ct)return ct.call(nt);if(typeof nt.next=="function")return nt;if(!isNaN(nt.length)){var pt=-1,Fr=function rr(){for(;++pt=0;--Fr){var rr=this.tryEntries[Fr],Zn=rr.completion;if(rr.tryLoc==="root")return pt("end");if(rr.tryLoc<=this.prev){var Io=$t.call(rr,"catchLoc"),Na=$t.call(rr,"finallyLoc");if(Io&&Na){if(this.prev=0;--pt){var Fr=this.tryEntries[pt];if(Fr.tryLoc<=this.prev&&$t.call(Fr,"finallyLoc")&&this.prev=0;--ct){var pt=this.tryEntries[ct];if(pt.finallyLoc===nt)return this.complete(pt.completion,pt.afterLoc),H4(pt),is}},catch:function(nt){for(var ct=this.tryEntries.length-1;ct>=0;--ct){var pt=this.tryEntries[ct];if(pt.tryLoc===nt){var Fr=pt.completion;if(Fr.type==="throw"){var rr=Fr.arg;H4(pt)}return rr}}throw new Error("illegal catch attempt")},delegateYield:function(nt,ct,pt){return this.delegate={iterator:d5(nt),resultName:ct,nextLoc:pt},this.method==="next"&&(this.arg=tt),is}},Et}g.exports=Ze,g.exports.__esModule=!0,g.exports.default=g.exports})(Qv);var dl=(0,Qv.exports)(),uh=dl;try{regeneratorRuntime=dl}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=dl:Function("r","regeneratorRuntime = r")(dl)}var _o=n(uh),k8={exports:{}},LT=d(function(){if(typeof ArrayBuffer=="function"){var g=new ArrayBuffer(8);Object.isExtensible(g)&&Object.defineProperty(g,"a",{value:8})}}),U2=d,j8=St,fl=ne,hg=LT,Xc=Object.isExtensible,T8=U2(function(){Xc(1)})||hg?function(g){return!!j8(g)&&(!hg||fl(g)!=="ArrayBuffer")&&(!Xc||Xc(g))}:Xc,b4=!d(function(){return Object.isExtensible(Object.preventExtensions({}))}),C8=ar,M8=H,A8=Fp,R8=St,G2=kr,D8=bi.f,L8=Xa,N8=mm,J2=T8,NT=b4,w4=!1,Kc=tf("meta"),FT=0,O4=function(g){D8(g,Kc,{value:{objectID:"O"+FT++,weakData:{}}})},BT=k8.exports={enable:function(){BT.enable=function(){},w4=!0;var g=L8.f,S=M8([].splice),E={};E[Kc]=1,g(E).length&&(L8.f=function(j){for(var W=g(j),U=0,ie=W.length;U1?arguments[1]:void 0);Ee=Ee?Ee.next:je.first;)for(Ze(Ee.value,Ee.key,this);Ee&&Ee.removed;)Ee=Ee.previous},has:function(we){return!!ue(this,we)}}),q8(U,E?{get:function(we){var Ee=ue(this,we);return Ee&&Ee.value},set:function(we,Ee){return oe(this,we===0?0:we,Ee)}}:{add:function(we){return oe(this,we=we===0?0:we,we)}}),S0&&qT(U,"size",{configurable:!0,get:function(){return ie(this).size}}),W},setStrong:function(g,S,E){var j=S+" Iterator",W=E4(S),U=E4(j);G8(g,S,function(ie,oe){So(this,{type:j,target:ie,state:W(ie),kind:oe,last:void 0})},function(){for(var ie=U(this),oe=ie.kind,ue=ie.last;ue&&ue.removed;)ue=ue.previous;return ie.target&&(ie.last=ue=ue?ue.next:ie.state.first)?K2(oe==="keys"?ue.key:oe==="values"?ue.value:[ue.key,ue.value],!1):(ie.target=void 0,K2(void 0,!0))},E?"entries":"values",!E,!0),JT(S)}};Z8("Map",function(g){return function(){return g(this,arguments.length?arguments[0]:void 0)}},P4);var Y2=n(tn.Map),XT=Ar.some;ar({target:"Array",proto:!0,forced:!Ov("some")},{some:function(g){return XT(this,g,arguments.length>1?arguments[1]:void 0)}});var KT=ia("Array","some"),J8=Mr,X8=KT,Q2=Array.prototype,YT=n(function(g){var S=g.some;return g===Q2||J8(Q2,g)&&S===Q2.some?X8:S}),QT=ia("Array","keys"),eC=gs,tC=kr,K8=Mr,Qc=QT,e5=Array.prototype,Y8={DOMTokenList:!0,NodeList:!0},yd=n(function(g){var S=g.keys;return g===e5||K8(e5,g)&&S===e5.keys||tC(Y8,eC(g))?Qc:S}),k4=vm,rC=Math.floor,I0=function(g,S){var E=g.length,j=rC(E/2);return E<8?Q8(g,S):eI(g,I0(k4(g,0,j),S),I0(k4(g,j),S),S)},Q8=function(g,S){for(var E,j,W=g.length,U=1;U0;)g[j]=g[--j];j!==U++&&(g[j]=E)}return g},eI=function(g,S,E,j){for(var W=S.length,U=E.length,ie=0,oe=0;ie3)){if(sC)return!0;if(lI)return lI<603;var g,S,E,j,W="";for(g=65;g<76;g++){switch(S=String.fromCharCode(g),g){case 66:case 69:case 70:case 72:E=3;break;case 68:case 71:E=4;break;default:E=2}for(j=0;j<47;j++)bd.push({k:S+j,v:E})}for(bd.sort(function(U,ie){return ie.v-U.v}),j=0;jM4(ue)?1:-1}}(g)),E=C4(W),j=0;jthis.max&&this.flush(),this._timeout!=null&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&typeof this.delay=="number"&&(this._timeout=Ul(function(){S.flush()},this.delay))}},{key:"flush",value:function(){var S,E;zu(S=t7(E=this._queue).call(E,0)).call(S,function(j){j.fn.apply(j.context||j.fn,j.args||[])})}}],[{key:"extend",value:function(S,E){var j=new g(E);if(S.flush!==void 0)throw new Error("Target object already has a property flush");S.flush=function(){j.flush()};var W=[{name:"flush",original:void 0}];if(E&&E.replace)for(var U=0;U=g.length?{done:!0}:{done:!1,value:g[j++]}},e:function(ue){throw ue},f:W}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var U,ie=!0,oe=!1;return{s:function(){E=E.call(g)},n:function(){var ue=E.next();return ie=ue.done,ue},e:function(ue){oe=!0,U=ue},f:function(){try{ie||E.return==null||E.return()}finally{if(oe)throw U}}}}function T0(g,S){(S==null||S>g.length)&&(S=g.length);for(var E=0,j=new Array(S);E_o.mark(function W(){var U,ie,oe,ue,we;return _o.wrap(function(Ee){for(;;)switch(Ee.prev=Ee.next){case 0:U=hl(j),Ee.prev=1,U.s();case 3:if((ie=U.n()).done){Ee.next=10;break}if(oe=es(ie.value,2),ue=oe[0],we=oe[1],!E(we,ue)){Ee.next=8;break}return Ee.next=8,[ue,we];case 8:Ee.next=3;break;case 10:Ee.next=15;break;case 12:Ee.prev=12,Ee.t0=Ee.catch(1),U.e(Ee.t0);case 15:return Ee.prev=15,U.f(),Ee.finish(15);case 18:case"end":return Ee.stop()}},W,null,[[1,12,15,18]])})()})}},{key:"forEach",value:function(E){var j,W=hl(this._pairs);try{for(W.s();!(j=W.n()).done;){var U=es(j.value,2),ie=U[0];E(U[1],ie)}}catch(oe){W.e(oe)}finally{W.f()}}},{key:"map",value:function(E){var j=this._pairs;return new S({[wd]:()=>_o.mark(function W(){var U,ie,oe,ue,we;return _o.wrap(function(Ee){for(;;)switch(Ee.prev=Ee.next){case 0:U=hl(j),Ee.prev=1,U.s();case 3:if((ie=U.n()).done){Ee.next=9;break}return oe=es(ie.value,2),ue=oe[0],we=oe[1],Ee.next=7,[ue,E(we,ue)];case 7:Ee.next=3;break;case 9:Ee.next=14;break;case 11:Ee.prev=11,Ee.t0=Ee.catch(1),U.e(Ee.t0);case 14:return Ee.prev=14,U.f(),Ee.finish(14);case 17:case"end":return Ee.stop()}},W,null,[[1,11,14,17]])})()})}},{key:"max",value:function(E){var j=s5(this._pairs),W=j.next();if(W.done)return null;for(var U=W.value[1],ie=E(W.value[1],W.value[0]);!(W=j.next()).done;){var oe=es(W.value,2),ue=oe[0],we=oe[1],Ee=E(we,ue);Ee>ie&&(ie=Ee,U=we)}return U}},{key:"min",value:function(E){var j=s5(this._pairs),W=j.next();if(W.done)return null;for(var U=W.value[1],ie=E(W.value[1],W.value[0]);!(W=j.next()).done;){var oe=es(W.value,2),ue=oe[0],we=oe[1],Ee=E(we,ue);Ee=g.length?{done:!0}:{done:!1,value:g[j++]}},e:function(ue){throw ue},f:W}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var U,ie=!0,oe=!1;return{s:function(){E=E.call(g)},n:function(){var ue=E.next();return ie=ue.done,ue},e:function(ue){oe=!0,U=ue},f:function(){try{ie||E.return==null||E.return()}finally{if(oe)throw U}}}}function l5(g,S){(S==null||S>g.length)&&(S=g.length);for(var E=0,j=new Array(S);E"u"||!Kl||Kl.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Kl(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var E,j=jn(g);if(S){var W=jn(this).constructor;E=Kl(j,arguments,W)}else E=j.apply(this,arguments);return k6(this,E)}}var hI=function(g){sd(E,g);var S=wC(E);function E(j,W){var U;return t(this,E),Qa(Kv(U=S.call(this)),"_queue",null),j&&!Bi(j)&&(W=j,j=[]),U._options=W||{},U._data=new Y2,U.length=0,U._idProp=U._options.fieldId||"id",j&&j.length&&U.add(j),U.setOptions(W),U}return Fu(E,[{key:"idProp",get:function(){return this._idProp}},{key:"setOptions",value:function(j){j&&j.queue!==void 0&&(j.queue===!1?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=F4.extend(this,{replace:["add","update","remove"]})),j.queue&&typeof j.queue=="object"&&this._queue.setOptions(j.queue)))}},{key:"add",value:function(j,W){var U,ie=this,oe=[];if(Bi(j)){var ue=ks(j).call(j,function(je){return je[ie._idProp]});if(YT(ue).call(ue,function(je){return ie._data.has(je)}))throw new Error("A duplicate id was found in the parameter array.");for(var we=0,Ee=j.length;we1?$t-1:0),Wt=1;Wt<$t;Wt++)dr[Wt-1]=arguments[Wt];return y6.apply(void 0,e2(_t=[{},Et]).call(_t,dr))}(Ee,je);return ie._data.set(Ze,tt),{id:Ze,oldData:Ee,updatedData:tt}});if(oe.length){var ue={items:ks(oe).call(oe,function(we){return we.id}),oldData:ks(oe).call(oe,function(we){return we.oldData}),data:ks(oe).call(oe,function(we){return we.updatedData})};return this._trigger("update",ue,W),ue.items}return[]}},{key:"get",value:function(j,W){var U=void 0,ie=void 0,oe=void 0;N4(j)?(U=j,oe=W):Bi(j)?(ie=j,oe=W):oe=j;var ue,we=oe&&oe.returnType==="Object"?"Object":"Array",Ee=oe&&fi(oe),je=[],Ze=void 0,tt=void 0,Et=void 0;if(U!=null)(Ze=this._data.get(U))&&Ee&&!Ee(Ze)&&(Ze=void 0);else if(ie!=null)for(var _t=0,$t=ie.length;_t<$t;_t++)(Ze=this._data.get(ie[_t]))==null||Ee&&!Ee(Ze)||je.push(Ze);else for(var dr,Wt=0,hn=(tt=Ni(yd(dr=this._data).call(dr))).length;Wtwe?1:ueoe)&&(ie=we,oe=Ee)}}catch(je){ue.e(je)}finally{ue.f()}return ie||null}},{key:"min",value:function(j){var W,U,ie=null,oe=null,ue=dh(k0(W=this._data).call(W));try{for(ue.s();!(U=ue.n()).done;){var we=U.value,Ee=we[j];typeof Ee=="number"&&(oe==null||Ee_o.mark(function ie(){var oe,ue,we,Ee;return _o.wrap(function(je){for(;;)switch(je.prev=je.next){case 0:oe=dh(j),je.prev=1,oe.s();case 3:if((ue=oe.n()).done){je.next=11;break}if(we=ue.value,(Ee=W.get(we))==null){je.next=9;break}return je.next=9,[we,Ee];case 9:je.next=3;break;case 11:je.next=16;break;case 13:je.prev=13,je.t0=je.catch(1),oe.e(je.t0);case 16:return je.prev=16,oe.f(),je.finish(16);case 19:case"end":return je.stop()}},ie,null,[[1,13,16,19]])})()})}var U;return new B4({[wd]:Rf(U=gC(this._data)).call(U,this._data)})}}]),E}(a5);function mI(g,S){var E=no!==void 0&&Ev(g)||g["@@iterator"];if(!E){if(Bi(g)||(E=function(ue,we){var Ee;if(ue){if(typeof ue=="string")return bg(ue,we);var je=Bu(Ee=Object.prototype.toString.call(ue)).call(Ee,8,-1);if(je==="Object"&&ue.constructor&&(je=ue.constructor.name),je==="Map"||je==="Set")return Gb(ue);if(je==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(je))return bg(ue,we)}}(g))||S&&g&&typeof g.length=="number"){E&&(g=E);var j=0,W=function(){};return{s:W,n:function(){return j>=g.length?{done:!0}:{done:!1,value:g[j++]}},e:function(ue){throw ue},f:W}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var U,ie=!0,oe=!1;return{s:function(){E=E.call(g)},n:function(){var ue=E.next();return ie=ue.done,ue},e:function(ue){oe=!0,U=ue},f:function(){try{ie||E.return==null||E.return()}finally{if(oe)throw U}}}}function bg(g,S){(S==null||S>g.length)&&(S=g.length);for(var E=0,j=new Array(S);E"u"||!Kl||Kl.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Kl(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var E,j=jn(g);if(S){var W=jn(this).constructor;E=Kl(j,arguments,W)}else E=j.apply(this,arguments);return k6(this,E)}}var vI=function(g){sd(E,g);var S=wg(E);function E(j,W){var U,ie;return t(this,E),Qa(Kv(ie=S.call(this)),"length",0),Qa(Kv(ie),"_ids",new ph),ie._options=W||{},ie._listener=Rf(U=ie._onEvent).call(U,Kv(ie)),ie.setData(j),ie}return Fu(E,[{key:"idProp",get:function(){return this.getDataSet().idProp}},{key:"setData",value:function(j){if(this._data){this._data.off&&this._data.off("*",this._listener);var W=this._data.getIds({filter:fi(this._options)}),U=this._data.get(W);this._ids.clear(),this.length=0,this._trigger("remove",{items:W,oldData:U})}if(j!=null){this._data=j;for(var ie=this._data.getIds({filter:fi(this._options)}),oe=0,ue=ie.length;oet=>{let r=BWe.call(t);return e[r]||(e[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),Oh=e=>(e=e.toLowerCase(),t=>Aq(t)===e),Rq=e=>t=>typeof t===e,{isArray:cE}=Array,RM=Rq("undefined");function zWe(e){return e!==null&&!RM(e)&&e.constructor!==null&&!RM(e.constructor)&&op(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var J2e=Oh("ArrayBuffer");function WWe(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&J2e(e.buffer),t}var HWe=Rq("string"),op=Rq("function"),X2e=Rq("number"),Dq=e=>e!==null&&typeof e=="object",VWe=e=>e===!0||e===!1,Mq=e=>{if(Aq(e)!=="object")return!1;let t=$te(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},$We=Oh("Date"),ZWe=Oh("File"),qWe=Oh("Blob"),UWe=Oh("FileList"),GWe=e=>Dq(e)&&op(e.pipe),JWe=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||op(e.append)&&((t=Aq(e))==="formdata"||t==="object"&&op(e.toString)&&e.toString()==="[object FormData]"))},XWe=Oh("URLSearchParams"),[KWe,YWe,QWe,eHe]=["ReadableStream","Request","Response","Headers"].map(Oh),tHe=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function DM(e,t,{allOwnKeys:r=!1}={}){if(e===null||typeof e>"u")return;let n,o;if(typeof e!="object"&&(e=[e]),cE(e))for(n=0,o=e.length;n0;)if(o=r[n],t===o.toLowerCase())return o;return null}var px=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),Y2e=e=>!RM(e)&&e!==px;function Vte(){let{caseless:e}=Y2e(this)&&this||{},t={},r=(n,o)=>{let i=e&&K2e(t,o)||o;Mq(t[i])&&Mq(n)?t[i]=Vte(t[i],n):Mq(n)?t[i]=Vte({},n):cE(n)?t[i]=n.slice():t[i]=n};for(let n=0,o=arguments.length;n(DM(t,(o,i)=>{r&&op(o)?e[i]=AM(o,r):e[i]=o},{allOwnKeys:n}),e),nHe=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),oHe=(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},iHe=(e,t,r,n)=>{let o,i,c,d={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)c=o[i],(!n||n(c,e,t))&&!d[c]&&(t[c]=e[c],d[c]=!0);e=r!==!1&&$te(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},aHe=(e,t,r)=>{e=String(e),(r===void 0||r>e.length)&&(r=e.length),r-=t.length;let n=e.indexOf(t,r);return n!==-1&&n===r},sHe=e=>{if(!e)return null;if(cE(e))return e;let t=e.length;if(!X2e(t))return null;let r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},lHe=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&$te(Uint8Array)),uHe=(e,t)=>{let n=(e&&e[Symbol.iterator]).call(e),o;for(;(o=n.next())&&!o.done;){let i=o.value;t.call(e,i[0],i[1])}},cHe=(e,t)=>{let r,n=[];for(;(r=e.exec(t))!==null;)n.push(r);return n},pHe=Oh("HTMLFormElement"),dHe=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,n,o){return n.toUpperCase()+o}),U2e=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),fHe=Oh("RegExp"),Q2e=(e,t)=>{let r=Object.getOwnPropertyDescriptors(e),n={};DM(r,(o,i)=>{let c;(c=t(o,i,e))!==!1&&(n[i]=c||o)}),Object.defineProperties(e,n)},hHe=e=>{Q2e(e,(t,r)=>{if(op(e)&&["arguments","caller","callee"].indexOf(r)!==-1)return!1;let n=e[r];if(op(n)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")})}})},mHe=(e,t)=>{let r={},n=o=>{o.forEach(i=>{r[i]=!0})};return cE(e)?n(e):n(String(e).split(t)),r},vHe=()=>{},gHe=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,Hte="abcdefghijklmnopqrstuvwxyz",G2e="0123456789",e5e={DIGIT:G2e,ALPHA:Hte,ALPHA_DIGIT:Hte+Hte.toUpperCase()+G2e},yHe=(e=16,t=e5e.ALPHA_DIGIT)=>{let r="",{length:n}=t;for(;e--;)r+=t[Math.random()*n|0];return r};function bHe(e){return!!(e&&op(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}var wHe=e=>{let t=new Array(10),r=(n,o)=>{if(Dq(n)){if(t.indexOf(n)>=0)return;if(!("toJSON"in n)){t[o]=n;let i=cE(n)?[]:{};return DM(n,(c,d)=>{let h=r(c,o+1);!RM(h)&&(i[d]=h)}),t[o]=void 0,i}}return n};return r(e,0)},OHe=Oh("AsyncFunction"),xHe=e=>e&&(Dq(e)||op(e))&&op(e.then)&&op(e.catch),t5e=((e,t)=>e?setImmediate:t?((r,n)=>(px.addEventListener("message",({source:o,data:i})=>{o===px&&i===r&&n.length&&n.shift()()},!1),o=>{n.push(o),px.postMessage(r,"*")}))(`axios@${Math.random()}`,[]):r=>setTimeout(r))(typeof setImmediate=="function",op(px.postMessage)),_He=typeof queueMicrotask<"u"?queueMicrotask.bind(px):typeof process<"u"&&process.nextTick||t5e,Ae={isArray:cE,isArrayBuffer:J2e,isBuffer:zWe,isFormData:JWe,isArrayBufferView:WWe,isString:HWe,isNumber:X2e,isBoolean:VWe,isObject:Dq,isPlainObject:Mq,isReadableStream:KWe,isRequest:YWe,isResponse:QWe,isHeaders:eHe,isUndefined:RM,isDate:$We,isFile:ZWe,isBlob:qWe,isRegExp:fHe,isFunction:op,isStream:GWe,isURLSearchParams:XWe,isTypedArray:lHe,isFileList:UWe,forEach:DM,merge:Vte,extend:rHe,trim:tHe,stripBOM:nHe,inherits:oHe,toFlatObject:iHe,kindOf:Aq,kindOfTest:Oh,endsWith:aHe,toArray:sHe,forEachEntry:uHe,matchAll:cHe,isHTMLForm:pHe,hasOwnProperty:U2e,hasOwnProp:U2e,reduceDescriptors:Q2e,freezeMethods:hHe,toObjectSet:mHe,toCamelCase:dHe,noop:vHe,toFiniteNumber:gHe,findKey:K2e,global:px,isContextDefined:Y2e,ALPHABET:e5e,generateString:yHe,isSpecCompliantForm:bHe,toJSONObject:wHe,isAsyncFn:OHe,isThenable:xHe,setImmediate:t5e,asap:_He};function pE(e,t,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o,this.status=o.status?o.status:null)}Ae.inherits(pE,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Ae.toJSONObject(this.config),code:this.code,status:this.status}}});var r5e=pE.prototype,n5e={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{n5e[e]={value:e}});Object.defineProperties(pE,n5e);Object.defineProperty(r5e,"isAxiosError",{value:!0});pE.from=(e,t,r,n,o,i)=>{let c=Object.create(r5e);return Ae.toFlatObject(e,c,function(h){return h!==Error.prototype},d=>d!=="isAxiosError"),pE.call(c,e.message,t,r,n,o),c.cause=e,c.name=e.name,i&&Object.assign(c,i),c};var Tr=pE;var Lq=null;function Zte(e){return Ae.isPlainObject(e)||Ae.isArray(e)}function i5e(e){return Ae.endsWith(e,"[]")?e.slice(0,-2):e}function o5e(e,t,r){return e?e.concat(t).map(function(o,i){return o=i5e(o),!r&&i?"["+o+"]":o}).join(r?".":""):t}function SHe(e){return Ae.isArray(e)&&!e.some(Zte)}var IHe=Ae.toFlatObject(Ae,{},null,function(t){return/^is[A-Z]/.test(t)});function EHe(e,t,r){if(!Ae.isObject(e))throw new TypeError("target must be an object");t=t||new(Lq||FormData),r=Ae.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(F,A){return!Ae.isUndefined(A[F])});let n=r.metaTokens,o=r.visitor||w,i=r.dots,c=r.indexes,h=(r.Blob||typeof Blob<"u"&&Blob)&&Ae.isSpecCompliantForm(t);if(!Ae.isFunction(o))throw new TypeError("visitor must be a function");function v(D){if(D===null)return"";if(Ae.isDate(D))return D.toISOString();if(!h&&Ae.isBlob(D))throw new Tr("Blob is not supported. Use a Buffer instead.");return Ae.isArrayBuffer(D)||Ae.isTypedArray(D)?h&&typeof Blob=="function"?new Blob([D]):Buffer.from(D):D}function w(D,F,A){let N=D;if(D&&!A&&typeof D=="object"){if(Ae.endsWith(F,"{}"))F=n?F:F.slice(0,-2),D=JSON.stringify(D);else if(Ae.isArray(D)&&SHe(D)||(Ae.isFileList(D)||Ae.endsWith(F,"[]"))&&(N=Ae.toArray(D)))return F=i5e(F),N.forEach(function(q,Y){!(Ae.isUndefined(q)||q===null)&&t.append(c===!0?o5e([F],Y,i):c===null?F:F+"[]",v(q))}),!1}return Zte(D)?!0:(t.append(o5e(A,F,i),v(D)),!1)}let _=[],I=Object.assign(IHe,{defaultVisitor:w,convertValue:v,isVisitable:Zte});function R(D,F){if(!Ae.isUndefined(D)){if(_.indexOf(D)!==-1)throw Error("Circular reference detected in "+F.join("."));_.push(D),Ae.forEach(D,function(N,H){(!(Ae.isUndefined(N)||N===null)&&o.call(t,N,Ae.isString(H)?H.trim():H,F,I))===!0&&R(N,F?F.concat(H):[H])}),_.pop()}}if(!Ae.isObject(e))throw new TypeError("data must be an object");return R(e),t}var H5=EHe;function a5e(e){let t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(n){return t[n]})}function s5e(e,t){this._pairs=[],e&&H5(e,this,t)}var l5e=s5e.prototype;l5e.append=function(t,r){this._pairs.push([t,r])};l5e.toString=function(t){let r=t?function(n){return t.call(this,n,a5e)}:a5e;return this._pairs.map(function(o){return r(o[0])+"="+r(o[1])},"").join("&")};var Nq=s5e;function PHe(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function LM(e,t,r){if(!t)return e;let n=r&&r.encode||PHe,o=r&&r.serialize,i;if(o?i=o(t,r):i=Ae.isURLSearchParams(t)?t.toString():new Nq(t,r).toString(n),i){let c=e.indexOf("#");c!==-1&&(e=e.slice(0,c)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}var qte=class{constructor(){this.handlers=[]}use(t,r,n){return this.handlers.push({fulfilled:t,rejected:r,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){Ae.forEach(this.handlers,function(n){n!==null&&t(n)})}},Ute=qte;var Fq={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};var u5e=typeof URLSearchParams<"u"?URLSearchParams:Nq;var c5e=typeof FormData<"u"?FormData:null;var p5e=typeof Blob<"u"?Blob:null;var d5e={isBrowser:!0,classes:{URLSearchParams:u5e,FormData:c5e,Blob:p5e},protocols:["http","https","file","blob","url","data"]};var Xte={};J(Xte,{hasBrowserEnv:()=>Jte,hasStandardBrowserEnv:()=>kHe,hasStandardBrowserWebWorkerEnv:()=>jHe,navigator:()=>Gte,origin:()=>THe});var Jte=typeof window<"u"&&typeof document<"u",Gte=typeof navigator=="object"&&navigator||void 0,kHe=Jte&&(!Gte||["ReactNative","NativeScript","NS"].indexOf(Gte.product)<0),jHe=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),THe=Jte&&window.location.href||"http://localhost";var Ui={...Xte,...d5e};function Kte(e,t){return H5(e,new Ui.classes.URLSearchParams,Object.assign({visitor:function(r,n,o,i){return Ui.isNode&&Ae.isBuffer(r)?(this.append(n,r.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},t))}function CHe(e){return Ae.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function MHe(e){let t={},r=Object.keys(e),n,o=r.length,i;for(n=0;n=r.length;return c=!c&&Ae.isArray(o)?o.length:c,h?(Ae.hasOwnProp(o,c)?o[c]=[o[c],n]:o[c]=n,!d):((!o[c]||!Ae.isObject(o[c]))&&(o[c]=[]),t(r,n,o[c],i)&&Ae.isArray(o[c])&&(o[c]=MHe(o[c])),!d)}if(Ae.isFormData(e)&&Ae.isFunction(e.entries)){let r={};return Ae.forEachEntry(e,(n,o)=>{t(CHe(n),o,r,0)}),r}return null}var Bq=AHe;function RHe(e,t,r){if(Ae.isString(e))try{return(t||JSON.parse)(e),Ae.trim(e)}catch(n){if(n.name!=="SyntaxError")throw n}return(r||JSON.stringify)(e)}var Yte={transitional:Fq,adapter:["xhr","http","fetch"],transformRequest:[function(t,r){let n=r.getContentType()||"",o=n.indexOf("application/json")>-1,i=Ae.isObject(t);if(i&&Ae.isHTMLForm(t)&&(t=new FormData(t)),Ae.isFormData(t))return o?JSON.stringify(Bq(t)):t;if(Ae.isArrayBuffer(t)||Ae.isBuffer(t)||Ae.isStream(t)||Ae.isFile(t)||Ae.isBlob(t)||Ae.isReadableStream(t))return t;if(Ae.isArrayBufferView(t))return t.buffer;if(Ae.isURLSearchParams(t))return r.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let d;if(i){if(n.indexOf("application/x-www-form-urlencoded")>-1)return Kte(t,this.formSerializer).toString();if((d=Ae.isFileList(t))||n.indexOf("multipart/form-data")>-1){let h=this.env&&this.env.FormData;return H5(d?{"files[]":t}:t,h&&new h,this.formSerializer)}}return i||o?(r.setContentType("application/json",!1),RHe(t)):t}],transformResponse:[function(t){let r=this.transitional||Yte.transitional,n=r&&r.forcedJSONParsing,o=this.responseType==="json";if(Ae.isResponse(t)||Ae.isReadableStream(t))return t;if(t&&Ae.isString(t)&&(n&&!this.responseType||o)){let c=!(r&&r.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(d){if(c)throw d.name==="SyntaxError"?Tr.from(d,Tr.ERR_BAD_RESPONSE,this,null,this.response):d}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Ui.classes.FormData,Blob:Ui.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Ae.forEach(["delete","get","head","post","put","patch"],e=>{Yte.headers[e]={}});var dE=Yte;var DHe=Ae.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),f5e=e=>{let t={},r,n,o;return e&&e.split(` -`).forEach(function(c){o=c.indexOf(":"),r=c.substring(0,o).trim().toLowerCase(),n=c.substring(o+1).trim(),!(!r||t[r]&&DHe[r])&&(r==="set-cookie"?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)}),t};var h5e=Symbol("internals");function NM(e){return e&&String(e).trim().toLowerCase()}function zq(e){return e===!1||e==null?e:Ae.isArray(e)?e.map(zq):String(e)}function LHe(e){let t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}var NHe=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Qte(e,t,r,n,o){if(Ae.isFunction(n))return n.call(this,t,r);if(o&&(t=r),!!Ae.isString(t)){if(Ae.isString(n))return t.indexOf(n)!==-1;if(Ae.isRegExp(n))return n.test(t)}}function FHe(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,r,n)=>r.toUpperCase()+n)}function BHe(e,t){let r=Ae.toCamelCase(" "+t);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+r,{value:function(o,i,c){return this[n].call(this,t,o,i,c)},configurable:!0})})}var fE=class{constructor(t){t&&this.set(t)}set(t,r,n){let o=this;function i(d,h,v){let w=NM(h);if(!w)throw new Error("header name must be a non-empty string");let _=Ae.findKey(o,w);(!_||o[_]===void 0||v===!0||v===void 0&&o[_]!==!1)&&(o[_||h]=zq(d))}let c=(d,h)=>Ae.forEach(d,(v,w)=>i(v,w,h));if(Ae.isPlainObject(t)||t instanceof this.constructor)c(t,r);else if(Ae.isString(t)&&(t=t.trim())&&!NHe(t))c(f5e(t),r);else if(Ae.isHeaders(t))for(let[d,h]of t.entries())i(h,d,n);else t!=null&&i(r,t,n);return this}get(t,r){if(t=NM(t),t){let n=Ae.findKey(this,t);if(n){let o=this[n];if(!r)return o;if(r===!0)return LHe(o);if(Ae.isFunction(r))return r.call(this,o,n);if(Ae.isRegExp(r))return r.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,r){if(t=NM(t),t){let n=Ae.findKey(this,t);return!!(n&&this[n]!==void 0&&(!r||Qte(this,this[n],n,r)))}return!1}delete(t,r){let n=this,o=!1;function i(c){if(c=NM(c),c){let d=Ae.findKey(n,c);d&&(!r||Qte(n,n[d],d,r))&&(delete n[d],o=!0)}}return Ae.isArray(t)?t.forEach(i):i(t),o}clear(t){let r=Object.keys(this),n=r.length,o=!1;for(;n--;){let i=r[n];(!t||Qte(this,this[i],i,t,!0))&&(delete this[i],o=!0)}return o}normalize(t){let r=this,n={};return Ae.forEach(this,(o,i)=>{let c=Ae.findKey(n,i);if(c){r[c]=zq(o),delete r[i];return}let d=t?FHe(i):String(i).trim();d!==i&&delete r[i],r[d]=zq(o),n[d]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){let r=Object.create(null);return Ae.forEach(this,(n,o)=>{n!=null&&n!==!1&&(r[o]=t&&Ae.isArray(n)?n.join(", "):n)}),r}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,r])=>t+": "+r).join(` -`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...r){let n=new this(t);return r.forEach(o=>n.set(o)),n}static accessor(t){let n=(this[h5e]=this[h5e]={accessors:{}}).accessors,o=this.prototype;function i(c){let d=NM(c);n[d]||(BHe(o,c),n[d]=!0)}return Ae.isArray(t)?t.forEach(i):i(t),this}};fE.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);Ae.reduceDescriptors(fE.prototype,({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(n){this[r]=n}}});Ae.freezeMethods(fE);var Wa=fE;function FM(e,t){let r=this||dE,n=t||r,o=Wa.from(n.headers),i=n.data;return Ae.forEach(e,function(d){i=d.call(r,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function BM(e){return!!(e&&e.__CANCEL__)}function m5e(e,t,r){Tr.call(this,e??"canceled",Tr.ERR_CANCELED,t,r),this.name="CanceledError"}Ae.inherits(m5e,Tr,{__CANCEL__:!0});var H0=m5e;function zM(e,t,r){let n=r.config.validateStatus;!r.status||!n||n(r.status)?e(r):t(new Tr("Request failed with status code "+r.status,[Tr.ERR_BAD_REQUEST,Tr.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r))}function ere(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function zHe(e,t){e=e||10;let r=new Array(e),n=new Array(e),o=0,i=0,c;return t=t!==void 0?t:1e3,function(h){let v=Date.now(),w=n[i];c||(c=v),r[o]=h,n[o]=v;let _=i,I=0;for(;_!==o;)I+=r[_++],_=_%e;if(o=(o+1)%e,o===i&&(i=(i+1)%e),v-c{r=w,o=null,i&&(clearTimeout(i),i=null),e.apply(null,v)};return[(...v)=>{let w=Date.now(),_=w-r;_>=n?c(v,w):(o=v,i||(i=setTimeout(()=>{i=null,c(o)},n-_)))},()=>o&&c(o)]}var g5e=WHe;var hE=(e,t,r=3)=>{let n=0,o=v5e(50,250);return g5e(i=>{let c=i.loaded,d=i.lengthComputable?i.total:void 0,h=c-n,v=o(h),w=c<=d;n=c;let _={loaded:c,total:d,progress:d?c/d:void 0,bytes:h,rate:v||void 0,estimated:v&&d&&w?(d-c)/v:void 0,event:i,lengthComputable:d!=null,[t?"download":"upload"]:!0};e(_)},r)},tre=(e,t)=>{let r=e!=null;return[n=>t[0]({lengthComputable:r,total:e,loaded:n}),t[1]]},rre=e=>(...t)=>Ae.asap(()=>e(...t));var y5e=Ui.hasStandardBrowserEnv?function(){let t=Ui.navigator&&/(msie|trident)/i.test(Ui.navigator.userAgent),r=document.createElement("a"),n;function o(i){let c=i;return t&&(r.setAttribute("href",c),c=r.href),r.setAttribute("href",c),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:r.pathname.charAt(0)==="/"?r.pathname:"/"+r.pathname}}return n=o(window.location.href),function(c){let d=Ae.isString(c)?o(c):c;return d.protocol===n.protocol&&d.host===n.host}}():function(){return function(){return!0}}();var b5e=Ui.hasStandardBrowserEnv?{write(e,t,r,n,o,i){let c=[e+"="+encodeURIComponent(t)];Ae.isNumber(r)&&c.push("expires="+new Date(r).toGMTString()),Ae.isString(n)&&c.push("path="+n),Ae.isString(o)&&c.push("domain="+o),i===!0&&c.push("secure"),document.cookie=c.join("; ")},read(e){let t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function nre(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function ore(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function WM(e,t){return e&&!nre(t)?ore(e,t):t}var w5e=e=>e instanceof Wa?{...e}:e;function xh(e,t){t=t||{};let r={};function n(v,w,_){return Ae.isPlainObject(v)&&Ae.isPlainObject(w)?Ae.merge.call({caseless:_},v,w):Ae.isPlainObject(w)?Ae.merge({},w):Ae.isArray(w)?w.slice():w}function o(v,w,_){if(Ae.isUndefined(w)){if(!Ae.isUndefined(v))return n(void 0,v,_)}else return n(v,w,_)}function i(v,w){if(!Ae.isUndefined(w))return n(void 0,w)}function c(v,w){if(Ae.isUndefined(w)){if(!Ae.isUndefined(v))return n(void 0,v)}else return n(void 0,w)}function d(v,w,_){if(_ in t)return n(v,w);if(_ in e)return n(void 0,v)}let h={url:i,method:i,data:i,baseURL:c,transformRequest:c,transformResponse:c,paramsSerializer:c,timeout:c,timeoutMessage:c,withCredentials:c,withXSRFToken:c,adapter:c,responseType:c,xsrfCookieName:c,xsrfHeaderName:c,onUploadProgress:c,onDownloadProgress:c,decompress:c,maxContentLength:c,maxBodyLength:c,beforeRedirect:c,transport:c,httpAgent:c,httpsAgent:c,cancelToken:c,socketPath:c,responseEncoding:c,validateStatus:d,headers:(v,w)=>o(w5e(v),w5e(w),!0)};return Ae.forEach(Object.keys(Object.assign({},e,t)),function(w){let _=h[w]||o,I=_(e[w],t[w],w);Ae.isUndefined(I)&&_!==d||(r[w]=I)}),r}var Wq=e=>{let t=xh({},e),{data:r,withXSRFToken:n,xsrfHeaderName:o,xsrfCookieName:i,headers:c,auth:d}=t;t.headers=c=Wa.from(c),t.url=LM(WM(t.baseURL,t.url),e.params,e.paramsSerializer),d&&c.set("Authorization","Basic "+btoa((d.username||"")+":"+(d.password?unescape(encodeURIComponent(d.password)):"")));let h;if(Ae.isFormData(r)){if(Ui.hasStandardBrowserEnv||Ui.hasStandardBrowserWebWorkerEnv)c.setContentType(void 0);else if((h=c.getContentType())!==!1){let[v,...w]=h?h.split(";").map(_=>_.trim()).filter(Boolean):[];c.setContentType([v||"multipart/form-data",...w].join("; "))}}if(Ui.hasStandardBrowserEnv&&(n&&Ae.isFunction(n)&&(n=n(t)),n||n!==!1&&y5e(t.url))){let v=o&&i&&b5e.read(i);v&&c.set(o,v)}return t};var HHe=typeof XMLHttpRequest<"u",O5e=HHe&&function(e){return new Promise(function(r,n){let o=Wq(e),i=o.data,c=Wa.from(o.headers).normalize(),{responseType:d,onUploadProgress:h,onDownloadProgress:v}=o,w,_,I,R,D;function F(){R&&R(),D&&D(),o.cancelToken&&o.cancelToken.unsubscribe(w),o.signal&&o.signal.removeEventListener("abort",w)}let A=new XMLHttpRequest;A.open(o.method.toUpperCase(),o.url,!0),A.timeout=o.timeout;function N(){if(!A)return;let q=Wa.from("getAllResponseHeaders"in A&&A.getAllResponseHeaders()),ee={data:!d||d==="text"||d==="json"?A.responseText:A.response,status:A.status,statusText:A.statusText,headers:q,config:e,request:A};zM(function(te){r(te),F()},function(te){n(te),F()},ee),A=null}"onloadend"in A?A.onloadend=N:A.onreadystatechange=function(){!A||A.readyState!==4||A.status===0&&!(A.responseURL&&A.responseURL.indexOf("file:")===0)||setTimeout(N)},A.onabort=function(){A&&(n(new Tr("Request aborted",Tr.ECONNABORTED,e,A)),A=null)},A.onerror=function(){n(new Tr("Network Error",Tr.ERR_NETWORK,e,A)),A=null},A.ontimeout=function(){let Y=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded",ee=o.transitional||Fq;o.timeoutErrorMessage&&(Y=o.timeoutErrorMessage),n(new Tr(Y,ee.clarifyTimeoutError?Tr.ETIMEDOUT:Tr.ECONNABORTED,e,A)),A=null},i===void 0&&c.setContentType(null),"setRequestHeader"in A&&Ae.forEach(c.toJSON(),function(Y,ee){A.setRequestHeader(ee,Y)}),Ae.isUndefined(o.withCredentials)||(A.withCredentials=!!o.withCredentials),d&&d!=="json"&&(A.responseType=o.responseType),v&&([I,D]=hE(v,!0),A.addEventListener("progress",I)),h&&A.upload&&([_,R]=hE(h),A.upload.addEventListener("progress",_),A.upload.addEventListener("loadend",R)),(o.cancelToken||o.signal)&&(w=q=>{A&&(n(!q||q.type?new H0(null,e,A):q),A.abort(),A=null)},o.cancelToken&&o.cancelToken.subscribe(w),o.signal&&(o.signal.aborted?w():o.signal.addEventListener("abort",w)));let H=ere(o.url);if(H&&Ui.protocols.indexOf(H)===-1){n(new Tr("Unsupported protocol "+H+":",Tr.ERR_BAD_REQUEST,e));return}A.send(i||null)})};var VHe=(e,t)=>{let{length:r}=e=e?e.filter(Boolean):[];if(t||r){let n=new AbortController,o,i=function(v){if(!o){o=!0,d();let w=v instanceof Error?v:this.reason;n.abort(w instanceof Tr?w:new H0(w instanceof Error?w.message:w))}},c=t&&setTimeout(()=>{c=null,i(new Tr(`timeout ${t} of ms exceeded`,Tr.ETIMEDOUT))},t),d=()=>{e&&(c&&clearTimeout(c),c=null,e.forEach(v=>{v.unsubscribe?v.unsubscribe(i):v.removeEventListener("abort",i)}),e=null)};e.forEach(v=>v.addEventListener("abort",i));let{signal:h}=n;return h.unsubscribe=()=>Ae.asap(d),h}},x5e=VHe;var $He=function*(e,t){let r=e.byteLength;if(!t||r{let o=ZHe(e,t),i=0,c,d=h=>{c||(c=!0,n&&n(h))};return new ReadableStream({async pull(h){try{let{done:v,value:w}=await o.next();if(v){d(),h.close();return}let _=w.byteLength;if(r){let I=i+=_;r(I)}h.enqueue(new Uint8Array(w))}catch(v){throw d(v),v}},cancel(h){return d(h),o.return()}},{highWaterMark:2})};var Vq=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",S5e=Vq&&typeof ReadableStream=="function",UHe=Vq&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),I5e=(e,...t)=>{try{return!!e(...t)}catch{return!1}},GHe=S5e&&I5e(()=>{let e=!1,t=new Request(Ui.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),_5e=64*1024,are=S5e&&I5e(()=>Ae.isReadableStream(new Response("").body)),Hq={stream:are&&(e=>e.body)};Vq&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!Hq[t]&&(Hq[t]=Ae.isFunction(e[t])?r=>r[t]():(r,n)=>{throw new Tr(`Response type '${t}' is not supported`,Tr.ERR_NOT_SUPPORT,n)})})})(new Response);var JHe=async e=>{if(e==null)return 0;if(Ae.isBlob(e))return e.size;if(Ae.isSpecCompliantForm(e))return(await new Request(Ui.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(Ae.isArrayBufferView(e)||Ae.isArrayBuffer(e))return e.byteLength;if(Ae.isURLSearchParams(e)&&(e=e+""),Ae.isString(e))return(await UHe(e)).byteLength},XHe=async(e,t)=>{let r=Ae.toFiniteNumber(e.getContentLength());return r??JHe(t)},E5e=Vq&&(async e=>{let{url:t,method:r,data:n,signal:o,cancelToken:i,timeout:c,onDownloadProgress:d,onUploadProgress:h,responseType:v,headers:w,withCredentials:_="same-origin",fetchOptions:I}=Wq(e);v=v?(v+"").toLowerCase():"text";let R=x5e([o,i&&i.toAbortSignal()],c),D,F=R&&R.unsubscribe&&(()=>{R.unsubscribe()}),A;try{if(h&&GHe&&r!=="get"&&r!=="head"&&(A=await XHe(w,n))!==0){let ee=new Request(t,{method:"POST",body:n,duplex:"half"}),ne;if(Ae.isFormData(n)&&(ne=ee.headers.get("content-type"))&&w.setContentType(ne),ee.body){let[te,de]=tre(A,hE(rre(h)));n=ire(ee.body,_5e,te,de)}}Ae.isString(_)||(_=_?"include":"omit");let N="credentials"in Request.prototype;D=new Request(t,{...I,signal:R,method:r.toUpperCase(),headers:w.normalize().toJSON(),body:n,duplex:"half",credentials:N?_:void 0});let H=await fetch(D),q=are&&(v==="stream"||v==="response");if(are&&(d||q&&F)){let ee={};["status","statusText","headers"].forEach(fe=>{ee[fe]=H[fe]});let ne=Ae.toFiniteNumber(H.headers.get("content-length")),[te,de]=d&&tre(ne,hE(rre(d),!0))||[];H=new Response(ire(H.body,_5e,te,()=>{de&&de(),F&&F()}),ee)}v=v||"text";let Y=await Hq[Ae.findKey(Hq,v)||"text"](H,e);return!q&&F&&F(),await new Promise((ee,ne)=>{zM(ee,ne,{data:Y,headers:Wa.from(H.headers),status:H.status,statusText:H.statusText,config:e,request:D})})}catch(N){throw F&&F(),N&&N.name==="TypeError"&&/fetch/i.test(N.message)?Object.assign(new Tr("Network Error",Tr.ERR_NETWORK,e,D),{cause:N.cause||N}):Tr.from(N,N&&N.code,e,D)}});var sre={http:Lq,xhr:O5e,fetch:E5e};Ae.forEach(sre,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});var P5e=e=>`- ${e}`,KHe=e=>Ae.isFunction(e)||e===null||e===!1,$q={getAdapter:e=>{e=Ae.isArray(e)?e:[e];let{length:t}=e,r,n,o={};for(let i=0;i`adapter ${d} `+(h===!1?"is not supported by the environment":"is not available in the build")),c=t?i.length>1?`since : +`;return function(){var W=new Error("get-stack-trace"),U=W&&W.stack?W.stack.replace(/^[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^Object.\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",ie=window.console&&(window.console.warn||window.console.log);return ie&&ie.call(window.console,j,U),g.apply(this,arguments)}}var Qm=m6(function(g,S,E){for(var j=Object.keys(S),W=0;W=g.length?{done:!0}:{done:!1,value:g[j++]}},e:function(ue){throw ue},f:W}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var U,ie=!0,oe=!1;return{s:function(){E=E.call(g)},n:function(){var ue=E.next();return ie=ue.done,ue},e:function(ue){oe=!0,U=ue},f:function(){try{ie||E.return==null||E.return()}finally{if(oe)throw U}}}}function j7(g,S){(S==null||S>g.length)&&(S=g.length);for(var E=0,j=new Array(S);E2)return Jv.apply(void 0,t2(j=[y6(S[0],S[1])]).call(j,Fi(Bu(S).call(S,2))));var W=S[0],U=S[1];if(W instanceof Date&&U instanceof Date)return W.setTime(U.getTime()),W;var ie,oe=od(US(U));try{for(oe.s();!(ie=oe.n()).done;){var ue=ie.value;Object.prototype.propertyIsEnumerable.call(U,ue)&&(U[ue]===g6?delete W[ue]:W[ue]===null||U[ue]===null||typeof W[ue]!="object"||typeof U[ue]!="object"||zi(W[ue])||zi(U[ue])?W[ue]=b6(U[ue]):W[ue]=Jv(W[ue],U[ue]))}}catch(we){oe.e(we)}finally{oe.f()}return W}function b6(g){return zi(g)?ks(g).call(g,function(S){return b6(S)}):typeof g=="object"&&g!==null?g instanceof Date?new Date(g.getTime()):Jv({},g):g}function id(g){for(var S=0,E=Fn(g);S({set:g})}}()};function Zc(g){var S,E=this;this._cleanupQueue=[],this.active=!1,this._dom={container:g,overlay:document.createElement("div")},this._dom.overlay.classList.add("vis-overlay"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push(function(){E._dom.overlay.parentNode.removeChild(E._dom.overlay)});var j=w6(this._dom.overlay);j.on("tap",Rf(S=this._onTapOverlay).call(S,this)),this._cleanupQueue.push(function(){j.destroy()});var W=["tap","doubletap","press","pinch","pan","panstart","panmove","panend"];zu(W).call(W,function(U){j.on(U,function(ie){ie.srcEvent.stopPropagation()})}),document&&document.body&&(this._onClick=function(U){(function(ie,oe){for(;ie;){if(ie===oe)return!0;ie=ie.parentNode}return!1})(U.target,g)||E.deactivate()},document.body.addEventListener("click",this._onClick),this._cleanupQueue.push(function(){document.body.removeEventListener("click",E._onClick)})),this._escListener=function(U){("key"in U?U.key==="Escape":U.keyCode===27)&&E.deactivate()}}m7(Zc.prototype),Zc.current=null,Zc.prototype.destroy=function(){var g,S;this.deactivate();var E,j=od(fj(g=t7(S=this._cleanupQueue).call(S,0)).call(g));try{for(j.s();!(E=j.n()).done;)(0,E.value)()}catch(W){j.e(W)}finally{j.f()}},Zc.prototype.activate=function(){Zc.current&&Zc.current.deactivate(),Zc.current=this,this.active=!0,this._dom.overlay.style.display="none",this._dom.container.classList.add("vis-active"),this.emit("change"),this.emit("activate"),document.body.addEventListener("keydown",this._escListener)},Zc.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display="block",this._dom.container.classList.remove("vis-active"),document.body.removeEventListener("keydown",this._escListener),this.emit("change"),this.emit("deactivate")},Zc.prototype._onTapOverlay=function(g){this.activate(),g.srcEvent.stopPropagation()};var O6=ys,Hj=fo,Vj=TypeError,r0=function(g){if(O6(g))return g;throw new Vj(Hj(g)+" is not a constructor")},$j=ar,d2=R,T7=cS,C7=r0,M7=ta,qf=St,ad=Cc,x6=d,n0=ir("Reflect","construct"),A7=Object.prototype,Xv=[].push,f2=x6(function(){function g(){}return!(n0(function(){},[],g)instanceof g)}),Uf=!x6(function(){n0(function(){})}),_6=f2||Uf;$j({target:"Reflect",stat:!0,forced:_6,sham:_6},{construct:function(g,S){C7(g),M7(S);var E=arguments.length<3?g:C7(arguments[2]);if(Uf&&!f2)return n0(g,S,E);if(g===E){switch(S.length){case 0:return new g;case 1:return new g(S[0]);case 2:return new g(S[0],S[1]);case 3:return new g(S[0],S[1],S[2]);case 4:return new g(S[0],S[1],S[2],S[3])}var j=[null];return d2(Xv,j,S),new(d2(T7,g,j))}var W=E.prototype,U=ad(qf(W)?W:A7),ie=d2(g,U,S);return qf(ie)?ie:U}});var Kl=n(tn.Reflect.construct),Kv=n(tn.Object.getOwnPropertySymbols),h2={exports:{}},R7=ar,Ma=d,D7=Nr,S6=be.f,I6=Te;R7({target:"Object",stat:!0,forced:!I6||Ma(function(){S6(1)}),sham:!I6},{getOwnPropertyDescriptor:function(g,S){return S6(D7(g),S)}});var Hi=tn.Object,Zj=h2.exports=function(g,S){return Hi.getOwnPropertyDescriptor(g,S)};Hi.getOwnPropertyDescriptor.sham&&(Zj.sham=!0);var o0=n(h2.exports),qj=zc,L7=Nr,N7=be,Uj=Sa;ar({target:"Object",stat:!0,sham:!Te},{getOwnPropertyDescriptors:function(g){for(var S,E,j=L7(g),W=N7.f,U=qj(j),ie={},oe=0;U.length>oe;)(E=W(j,S=U[oe++]))!==void 0&&Uj(ie,S,E);return ie}});var m2=n(tn.Object.getOwnPropertyDescriptors),E6={exports:{}},F7=ar,Gj=Te,P6=sm.f;F7({target:"Object",stat:!0,forced:Object.defineProperties!==P6,sham:!Gj},{defineProperties:P6});var i0=tn.Object,v2=E6.exports=function(g,S){return i0.defineProperties(g,S)};i0.defineProperties.sham&&(v2.sham=!0);var Gf=n(E6.exports),Yl=n(Xh);function Yv(g){if(g===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return g}var B7=s7,Jj=n(B7);ar({target:"Object",stat:!0},{setPrototypeOf:Dm});var z7=tn.Object.setPrototypeOf,Gu=n(z7),Ql=n(Bb);function g2(g,S){var E;return g2=Gu?Ql(E=Gu).call(E):function(j,W){return j.__proto__=W,j},g2(g,S)}function sd(g,S){if(typeof S!="function"&&S!==null)throw new TypeError("Super expression must either be null or a function");g.prototype=Jj(S&&S.prototype,{constructor:{value:g,writable:!0,configurable:!0}}),Tp(g,"prototype",{writable:!1}),S&&g2(g,S)}function k6(g,S){if(S&&(Jp(S)==="object"||typeof S=="function"))return S;if(S!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Yv(g)}var Jf=Cj,Qv=n(Jf);function jn(g){var S;return jn=Gu?Ql(S=Qv).call(S):function(E){return E.__proto__||Qv(E)},jn(g)}var eg={exports:{}},j6={exports:{}};(function(g){var S=Rb,E=Bm;function j(W){return g.exports=j=typeof S=="function"&&typeof E=="symbol"?function(U){return typeof U}:function(U){return U&&typeof S=="function"&&U.constructor===S&&U!==S.prototype?"symbol":typeof U},g.exports.__esModule=!0,g.exports.default=g.exports,j(W)}g.exports=j,g.exports.__esModule=!0,g.exports.default=g.exports})(j6);var nn=j6.exports,Vi=Yp,Ms=kr,W7=zc,y2=be,tg=wi,b2=St,T6=ra,C6=Error,H7=H("".replace),ld=String(new C6("zxcasd").stack),As=/\n\s*at [^:]*:[^\n]*/,M6=As.test(ld),ud=Vt,Xj=!d(function(){var g=new Error("a");return!("stack"in g)||(Object.defineProperty(g,"stack",ud(1,7)),g.stack!==7)}),Kj=ra,A6=function(g,S){if(M6&&typeof g=="string"&&!C6.prepareStackTrace)for(;S--;)g=H7(g,As,"");return g},V7=Xj,R6=Error.captureStackTrace,Yj=mo,rg=Ae,D6=ta,Qj=fo,eT=Zb,tT=Ni,Xf=Mr,rT=Ub,w2=Ev,$7=SS,L6=TypeError,ng=function(g,S){this.stopped=g,this.result=S},eu=ng.prototype,Vo=function(g,S,E){var j,W,U,ie,oe,ue,we,Ee=E&&E.that,je=!(!E||!E.AS_ENTRIES),Ze=!(!E||!E.IS_RECORD),tt=!(!E||!E.IS_ITERATOR),Et=!(!E||!E.INTERRUPTED),_t=Yj(S,Ee),$t=function(Wt){return j&&$7(j,"normal",Wt),new ng(!0,Wt)},dr=function(Wt){return je?(D6(Wt),Et?_t(Wt[0],Wt[1],$t):_t(Wt[0],Wt[1])):Et?_t(Wt,$t):_t(Wt)};if(Ze)j=g.iterator;else if(tt)j=g;else{if(!(W=w2(g)))throw new L6(Qj(g)+" is not iterable");if(eT(W)){for(U=0,ie=tT(g);ie>U;U++)if((oe=dr(g[U]))&&Xf(eu,oe))return oe;return new ng(!1)}j=rT(g,W)}for(ue=Ze?g.next:j.next;!(we=rg(ue,j)).done;){try{oe=dr(we.value)}catch(Wt){$7(j,"throw",Wt)}if(typeof oe=="object"&&oe&&Xf(eu,oe))return oe}return new ng(!1)},Z7=kc,cd=ar,a0=Mr,$r=xb,sr=Dm,ns=function(g,S,E){for(var j=W7(S),W=tg.f,U=y2.f,ie=0;ie2&&dd(E,arguments[2]);var W=[];return N6(g,U7,{that:W}),pd(E,"errors",W),E};sr?sr(Kf,An):ns(Kf,An,{name:!0});var O2=Kf.prototype=hi(An.prototype,{constructor:s0(1,Kf),message:s0(1,""),name:s0(1,"AggregateError")});cd({global:!0,constructor:!0,arity:2},{AggregateError:Kf});var l0,Ju,la,x2,G7=ir,J7=tl,F6=Te,X7=ao("species"),u0=function(g){var S=G7(g);F6&&S&&!S[X7]&&J7(S,X7,{configurable:!0,get:function(){return this}})},iT=Mr,aT=TypeError,B6=function(g,S){if(iT(S,g))return g;throw new aT("Incorrect invocation")},z6=ta,K7=r0,sT=Ut,lT=ao("species"),Y7=function(g,S){var E,j=z6(g).constructor;return j===void 0||sT(E=z6(j)[lT])?S:K7(E)},_2=/(?:ipad|iphone|ipod).*applewebkit/i.test(Ur),os=c,S2=R,uT=mo,W6=Oe,Q7=kr,H6=d,e8=cm,cT=sv,I2=wu,V6=t6,t8=_2,pT=Lf,og=os.setImmediate,$6=os.clearImmediate,Yf=os.process,pl=os.Dispatch,dT=os.Function,E2=os.MessageChannel,fT=os.String,Qf=0,ig={},r8="onreadystatechange";H6(function(){l0=os.location});var Z6=function(g){if(Q7(ig,g)){var S=ig[g];delete ig[g],S()}},q6=function(g){return function(){Z6(g)}},n8=function(g){Z6(g.data)},U6=function(g){os.postMessage(fT(g),l0.protocol+"//"+l0.host)};og&&$6||(og=function(g){V6(arguments.length,1);var S=W6(g)?g:dT(g),E=cT(arguments,1);return ig[++Qf]=function(){S2(S,void 0,E)},Ju(Qf),Qf},$6=function(g){delete ig[g]},pT?Ju=function(g){Yf.nextTick(q6(g))}:pl&&pl.now?Ju=function(g){pl.now(q6(g))}:E2&&!t8?(x2=(la=new E2).port2,la.port1.onmessage=n8,Ju=uT(x2.postMessage,x2)):os.addEventListener&&W6(os.postMessage)&&!os.importScripts&&l0&&l0.protocol!=="file:"&&!H6(U6)?(Ju=U6,os.addEventListener("message",n8,!1)):Ju=r8 in I2("script")?function(g){e8.appendChild(I2("script"))[r8]=function(){e8.removeChild(this),Z6(g)}}:function(g){setTimeout(q6(g),0)});var G6={set:og,clear:$6},o8=function(){this.head=null,this.tail=null};o8.prototype={add:function(g){var S={item:g,next:null},E=this.tail;E?E.next=S:this.head=S,this.tail=S},get:function(){var g=this.head;if(g)return(this.head=g.next)===null&&(this.tail=null),g.item}};var c0,ag,J6,p0,X6,P2=o8,hT=/ipad|iphone|ipod/i.test(Ur)&&typeof Pebble<"u",mT=/web0s(?!.*chrome)/i.test(Ur),qc=c,i8=mo,vT=be.f,K6=G6.set,gT=P2,yT=_2,bT=hT,a8=mT,Y6=Lf,s8=qc.MutationObserver||qc.WebKitMutationObserver,k2=qc.document,l8=qc.process,j2=qc.Promise,u8=vT(qc,"queueMicrotask"),Q6=u8&&u8.value;if(!Q6){var T2=new gT,C2=function(){var g,S;for(Y6&&(g=l8.domain)&&g.exit();S=T2.get();)try{S()}catch(E){throw T2.head&&c0(),E}g&&g.enter()};yT||Y6||a8||!s8||!k2?!bT&&j2&&j2.resolve?((p0=j2.resolve(void 0)).constructor=j2,X6=i8(p0.then,p0),c0=function(){X6(C2)}):Y6?c0=function(){l8.nextTick(C2)}:(K6=i8(K6,qc),c0=function(){K6(C2)}):(ag=!0,J6=k2.createTextNode(""),new s8(C2).observe(J6,{characterData:!0}),c0=function(){J6.data=ag=!ag}),Q6=function(g){T2.head||c0(),T2.add(g)}}var e4=Q6,d0=function(g){try{return{error:!1,value:g()}}catch(S){return{error:!0,value:S}}},Xu=c.Promise,t4=typeof Deno=="object"&&Deno&&typeof Deno.version=="object",wT=!t4&&!Lf&&typeof window=="object"&&typeof document=="object",OT=c,f0=Xu,xT=Oe,_T=Gh,c8=Ry,ST=ao,IT=wT,p8=t4,r4=wa,n4=f0&&f0.prototype,d8=ST("species"),o4=!1,h0=xT(OT.PromiseRejectionEvent),i4=_T("Promise",function(){var g=c8(f0),S=g!==String(f0);if(!S&&r4===66||!n4.catch||!n4.finally)return!0;if(!r4||r4<51||!/native code/.test(g)){var E=new f0(function(W){W(1)}),j=function(W){W(function(){},function(){})};if((E.constructor={})[d8]=j,!(o4=E.then(function(){})instanceof j))return!0}return!S&&(IT||p8)&&!h0}),m0={CONSTRUCTOR:i4,REJECTION_EVENT:h0,SUBCLASSING:o4},Rs={},a4=Ko,f8=TypeError,ET=function(g){var S,E;this.promise=new g(function(j,W){if(S!==void 0||E!==void 0)throw new f8("Bad Promise constructor");S=j,E=W}),this.resolve=a4(S),this.reject=a4(E)};Rs.f=function(g){return new ET(g)};var sg,s4,PT=ar,Ku=Lf,Ei=c,ua=Ae,M2=Os,l4=Cu,Uc=u0,h8=Ko,u4=Oe,fd=St,eh=B6,th=Y7,A2=G6.set,v0=e4,Yu=function(g,S){try{arguments.length===1?console.error(g):console.error(g,S)}catch{}},c4=d0,p4=P2,m8=Vl,lg=Xu,Qu=m0,R2=Rs,ec="Promise",g0=Qu.CONSTRUCTOR,ug=Qu.REJECTION_EVENT,Ds=m8.getterFor(ec),v8=m8.set,g8=lg&&lg.prototype,cg=lg,D2=g8,rh=Ei.TypeError,d4=Ei.document,hd=Ei.process,y0=R2.f,L2=y0,ca=!!(d4&&d4.createEvent&&Ei.dispatchEvent),md="unhandledrejection",$o=function(g){var S;return!(!fd(g)||!u4(S=g.then))&&S},Aa=function(g,S){var E,j,W,U=S.value,ie=S.state===1,oe=ie?g.ok:g.fail,ue=g.resolve,we=g.reject,Ee=g.domain;try{oe?(ie||(S.rejection===2&&oh(S),S.rejection=1),oe===!0?E=U:(Ee&&Ee.enter(),E=oe(U),Ee&&(Ee.exit(),W=!0)),E===g.promise?we(new rh("Promise-chain cycle")):(j=$o(E))?ua(j,E,ue,we):ue(E)):we(U)}catch(je){Ee&&!W&&Ee.exit(),we(je)}},pg=function(g,S){g.notified||(g.notified=!0,v0(function(){for(var E,j=g.reactions;E=j.get();)Aa(E,g);g.notified=!1,S&&!g.rejection&&vd(g)}))},b0=function(g,S,E){var j,W;ca?((j=d4.createEvent("Event")).promise=S,j.reason=E,j.initEvent(g,!1,!0),Ei.dispatchEvent(j)):j={promise:S,reason:E},!ug&&(W=Ei["on"+g])?W(j):g===md&&Yu("Unhandled promise rejection",E)},vd=function(g){ua(A2,Ei,function(){var S,E=g.facade,j=g.value;if(nh(g)&&(S=c4(function(){Ku?hd.emit("unhandledRejection",j,E):b0(md,E,j)}),g.rejection=Ku||nh(g)?2:1,S.error))throw S.value})},nh=function(g){return g.rejection!==1&&!g.parent},oh=function(g){ua(A2,Ei,function(){var S=g.facade;Ku?hd.emit("rejectionHandled",S):b0("rejectionhandled",S,g.value)})},pa=function(g,S,E){return function(j){g(S,j,E)}},Ls=function(g,S,E){g.done||(g.done=!0,E&&(g=E),g.value=S,g.state=2,pg(g,!0))},N2=function(g,S,E){if(!g.done){g.done=!0,E&&(g=E);try{if(g.facade===S)throw new rh("Promise can't be resolved itself");var j=$o(S);j?v0(function(){var W={done:!1};try{ua(j,S,pa(N2,W,g),pa(Ls,W,g))}catch(U){Ls(W,U,g)}}):(g.value=S,g.state=1,pg(g,!1))}catch(W){Ls({done:!1},W,g)}}};g0&&(D2=(cg=function(g){eh(this,D2),h8(g),ua(sg,this);var S=Ds(this);try{g(pa(N2,S),pa(Ls,S))}catch(E){Ls(S,E)}}).prototype,(sg=function(g){v8(this,{type:ec,done:!1,notified:!1,parent:!1,reactions:new p4,rejection:!1,state:0,value:void 0})}).prototype=M2(D2,"then",function(g,S){var E=Ds(this),j=y0(th(this,cg));return E.parent=!0,j.ok=!u4(g)||g,j.fail=u4(S)&&S,j.domain=Ku?hd.domain:void 0,E.state===0?E.reactions.add(j):v0(function(){Aa(j,E)}),j.promise}),s4=function(){var g=new sg,S=Ds(g);this.promise=g,this.resolve=pa(N2,S),this.reject=pa(Ls,S)},R2.f=y0=function(g){return g===cg||g===void 0?new s4(g):L2(g)}),PT({global:!0,constructor:!0,wrap:!0,forced:g0},{Promise:cg}),l4(cg,ec,!1,!0),Uc(ec);var y8=Xu,ih=m0.CONSTRUCTOR||!TO(function(g){y8.all(g).then(void 0,function(){})}),Gc=Ae,F2=Ko,ah=Rs,f4=d0,B2=Vo;ar({target:"Promise",stat:!0,forced:ih},{all:function(g){var S=this,E=ah.f(S),j=E.resolve,W=E.reject,U=f4(function(){var ie=F2(S.resolve),oe=[],ue=0,we=1;B2(g,function(Ee){var je=ue++,Ze=!1;we++,Gc(ie,S,Ee).then(function(tt){Ze||(Ze=!0,oe[je]=tt,--we||j(oe))},W)}),--we||j(oe)});return U.error&&W(U.value),E.promise}});var w0=ar,h4=m0.CONSTRUCTOR;Xu&&Xu.prototype,w0({target:"Promise",proto:!0,forced:h4,real:!0},{catch:function(g){return this.then(void 0,g)}});var b8=Ae,z2=Ko,m4=Rs,w8=d0,kT=Vo;ar({target:"Promise",stat:!0,forced:ih},{race:function(g){var S=this,E=m4.f(S),j=E.reject,W=w8(function(){var U=z2(S.resolve);kT(g,function(ie){b8(U,S,ie).then(E.resolve,j)})});return W.error&&j(W.value),E.promise}});var W2=Ae,jT=Rs;ar({target:"Promise",stat:!0,forced:m0.CONSTRUCTOR},{reject:function(g){var S=jT.f(this);return W2(S.reject,void 0,g),S.promise}});var TT=ta,O8=St,CT=Rs,x8=function(g,S){if(TT(g),O8(S)&&S.constructor===g)return S;var E=CT.f(g);return(0,E.resolve)(S),E.promise},O0=ar,dg=Xu,Jc=m0.CONSTRUCTOR,v4=x8,x0=ir("Promise"),sh=!Jc;O0({target:"Promise",stat:!0,forced:!0},{resolve:function(g){return v4(sh&&this===x0?dg:this,g)}});var MT=Ae,AT=Ko,H2=Rs,_8=d0,g4=Vo;ar({target:"Promise",stat:!0,forced:ih},{allSettled:function(g){var S=this,E=H2.f(S),j=E.resolve,W=E.reject,U=_8(function(){var ie=AT(S.resolve),oe=[],ue=0,we=1;g4(g,function(Ee){var je=ue++,Ze=!1;we++,MT(ie,S,Ee).then(function(tt){Ze||(Ze=!0,oe[je]={status:"fulfilled",value:tt},--we||j(oe))},function(tt){Ze||(Ze=!0,oe[je]={status:"rejected",reason:tt},--we||j(oe))})}),--we||j(oe)});return U.error&&W(U.value),E.promise}});var fg=Ae,V2=Ko,RT=ir,S8=Rs,hg=d0,DT=Vo,I8="No one promise resolved";ar({target:"Promise",stat:!0,forced:ih},{any:function(g){var S=this,E=RT("AggregateError"),j=S8.f(S),W=j.resolve,U=j.reject,ie=hg(function(){var oe=V2(S.resolve),ue=[],we=0,Ee=1,je=!1;DT(g,function(Ze){var tt=we++,Et=!1;Ee++,fg(oe,S,Ze).then(function(_t){Et||je||(je=!0,W(_t))},function(_t){Et||je||(Et=!0,ue[tt]=_t,--Ee||U(new E(ue,I8)))})}),--Ee||U(new E(ue,I8))});return ie.error&&U(ie.value),j.promise}});var E8=ar,$2=Xu,Z2=d,Xe=ir,P8=Oe,q2=Y7,U2=x8,y4=$2&&$2.prototype;E8({target:"Promise",proto:!0,real:!0,forced:!!$2&&Z2(function(){y4.finally.call({then:function(){}},function(){})})},{finally:function(g){var S=q2(this,Xe("Promise")),E=P8(g);return this.then(E?function(j){return U2(S,g()).then(function(){return j})}:g,E?function(j){return U2(S,g()).then(function(){throw j})}:g)}});var xn=tn.Promise,Bn=Rs;ar({target:"Promise",stat:!0},{withResolvers:function(){var g=Bn.f(this);return{promise:g.promise,resolve:g.resolve,reject:g.reject}}});var lh=xn,zt=Rs,Pi=d0;ar({target:"Promise",stat:!0,forced:!0},{try:function(g){var S=zt.f(this),E=Pi(g);return(E.error?S.reject:S.resolve)(E.value),S.promise}});var _0=lh,gd=QS;(function(g){var S=nn.default,E=Su,j=Rb,W=B7,U=Jf,ie=Vi,oe=Yb,ue=z7,we=_0,Ee=gd,je=$S;function Ze(){g.exports=Ze=function(){return Et},g.exports.__esModule=!0,g.exports.default=g.exports;var tt,Et={},_t=Object.prototype,$t=_t.hasOwnProperty,dr=E||function(nt,ct,dt){nt[ct]=dt.value},Wt=typeof j=="function"?j:{},hn=Wt.iterator||"@@iterator",gn=Wt.asyncIterator||"@@asyncIterator",$n=Wt.toStringTag||"@@toStringTag";function Zo(nt,ct,dt){return E(nt,ct,{value:dt,enumerable:!0,configurable:!0,writable:!0}),nt[ct]}try{Zo({},"")}catch{Zo=function(ct,dt,Fr){return ct[dt]=Fr}}function mn(nt,ct,dt,Fr){var rr=ct&&ct.prototype instanceof c5?ct:c5,Zn=W(rr.prototype),Io=new vh(Fr||[]);return dr(Zn,"_invoke",{value:OC(nt,dt,Io)}),Zn}function da(nt,ct,dt){try{return{type:"normal",arg:nt.call(ct,dt)}}catch(Fr){return{type:"throw",arg:Fr}}}Et.wrap=mn;var La="suspendedStart",ep="suspendedYield",xg="executing",hh="completed",is={};function c5(){}function _g(){}function mh(){}var p5={};Zo(p5,hn,function(){return this});var d5=U&&U(U(f5([])));d5&&d5!==_t&&$t.call(d5,hn)&&(p5=d5);var Od=mh.prototype=c5.prototype=W(p5);function gI(nt){var ct;ie(ct=["next","throw","return"]).call(ct,function(dt){Zo(nt,dt,function(Fr){return this._invoke(dt,Fr)})})}function Sg(nt,ct){function dt(rr,Zn,Io,Na){var as=da(nt[rr],nt,Zn);if(as.type!=="throw"){var xd=as.arg,_d=xd.value;return _d&&S(_d)=="object"&&$t.call(_d,"__await")?ct.resolve(_d.__await).then(function(gh){dt("next",gh,Io,Na)},function(gh){dt("throw",gh,Io,Na)}):ct.resolve(_d).then(function(gh){xd.value=gh,Io(xd)},function(gh){return dt("throw",gh,Io,Na)})}Na(as.arg)}var Fr;dr(this,"_invoke",{value:function(rr,Zn){function Io(){return new ct(function(Na,as){dt(rr,Zn,Na,as)})}return Fr=Fr?Fr.then(Io,Io):Io()}})}function OC(nt,ct,dt){var Fr=La;return function(rr,Zn){if(Fr===xg)throw new Error("Generator is already running");if(Fr===hh){if(rr==="throw")throw Zn;return{value:tt,done:!0}}for(dt.method=rr,dt.arg=Zn;;){var Io=dt.delegate;if(Io){var Na=W4(Io,dt);if(Na){if(Na===is)continue;return Na}}if(dt.method==="next")dt.sent=dt._sent=dt.arg;else if(dt.method==="throw"){if(Fr===La)throw Fr=hh,dt.arg;dt.dispatchException(dt.arg)}else dt.method==="return"&&dt.abrupt("return",dt.arg);Fr=xg;var as=da(nt,ct,dt);if(as.type==="normal"){if(Fr=dt.done?hh:ep,as.arg===is)continue;return{value:as.arg,done:dt.done}}as.type==="throw"&&(Fr=hh,dt.method="throw",dt.arg=as.arg)}}}function W4(nt,ct){var dt=ct.method,Fr=nt.iterator[dt];if(Fr===tt)return ct.delegate=null,dt==="throw"&&nt.iterator.return&&(ct.method="return",ct.arg=tt,W4(nt,ct),ct.method==="throw")||dt!=="return"&&(ct.method="throw",ct.arg=new TypeError("The iterator does not provide a '"+dt+"' method")),is;var rr=da(Fr,nt.iterator,ct.arg);if(rr.type==="throw")return ct.method="throw",ct.arg=rr.arg,ct.delegate=null,is;var Zn=rr.arg;return Zn?Zn.done?(ct[nt.resultName]=Zn.value,ct.next=nt.nextLoc,ct.method!=="return"&&(ct.method="next",ct.arg=tt),ct.delegate=null,is):Zn:(ct.method="throw",ct.arg=new TypeError("iterator result is not an object"),ct.delegate=null,is)}function yI(nt){var ct,dt={tryLoc:nt[0]};1 in nt&&(dt.catchLoc=nt[1]),2 in nt&&(dt.finallyLoc=nt[2],dt.afterLoc=nt[3]),oe(ct=this.tryEntries).call(ct,dt)}function H4(nt){var ct=nt.completion||{};ct.type="normal",delete ct.arg,nt.completion=ct}function vh(nt){this.tryEntries=[{tryLoc:"root"}],ie(nt).call(nt,yI,this),this.reset(!0)}function f5(nt){if(nt||nt===""){var ct=nt[hn];if(ct)return ct.call(nt);if(typeof nt.next=="function")return nt;if(!isNaN(nt.length)){var dt=-1,Fr=function rr(){for(;++dt=0;--Fr){var rr=this.tryEntries[Fr],Zn=rr.completion;if(rr.tryLoc==="root")return dt("end");if(rr.tryLoc<=this.prev){var Io=$t.call(rr,"catchLoc"),Na=$t.call(rr,"finallyLoc");if(Io&&Na){if(this.prev=0;--dt){var Fr=this.tryEntries[dt];if(Fr.tryLoc<=this.prev&&$t.call(Fr,"finallyLoc")&&this.prev=0;--ct){var dt=this.tryEntries[ct];if(dt.finallyLoc===nt)return this.complete(dt.completion,dt.afterLoc),H4(dt),is}},catch:function(nt){for(var ct=this.tryEntries.length-1;ct>=0;--ct){var dt=this.tryEntries[ct];if(dt.tryLoc===nt){var Fr=dt.completion;if(Fr.type==="throw"){var rr=Fr.arg;H4(dt)}return rr}}throw new Error("illegal catch attempt")},delegateYield:function(nt,ct,dt){return this.delegate={iterator:f5(nt),resultName:ct,nextLoc:dt},this.method==="next"&&(this.arg=tt),is}},Et}g.exports=Ze,g.exports.__esModule=!0,g.exports.default=g.exports})(eg);var dl=(0,eg.exports)(),uh=dl;try{regeneratorRuntime=dl}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=dl:Function("r","regeneratorRuntime = r")(dl)}var _o=n(uh),k8={exports:{}},LT=d(function(){if(typeof ArrayBuffer=="function"){var g=new ArrayBuffer(8);Object.isExtensible(g)&&Object.defineProperty(g,"a",{value:8})}}),G2=d,j8=St,fl=ne,mg=LT,Xc=Object.isExtensible,T8=G2(function(){Xc(1)})||mg?function(g){return!!j8(g)&&(!mg||fl(g)!=="ArrayBuffer")&&(!Xc||Xc(g))}:Xc,b4=!d(function(){return Object.isExtensible(Object.preventExtensions({}))}),C8=ar,M8=H,A8=Fp,R8=St,J2=kr,D8=wi.f,L8=Xa,N8=mm,X2=T8,NT=b4,w4=!1,Kc=tf("meta"),FT=0,O4=function(g){D8(g,Kc,{value:{objectID:"O"+FT++,weakData:{}}})},BT=k8.exports={enable:function(){BT.enable=function(){},w4=!0;var g=L8.f,S=M8([].splice),E={};E[Kc]=1,g(E).length&&(L8.f=function(j){for(var W=g(j),U=0,ie=W.length;U1?arguments[1]:void 0);Ee=Ee?Ee.next:je.first;)for(Ze(Ee.value,Ee.key,this);Ee&&Ee.removed;)Ee=Ee.previous},has:function(we){return!!ue(this,we)}}),q8(U,E?{get:function(we){var Ee=ue(this,we);return Ee&&Ee.value},set:function(we,Ee){return oe(this,we===0?0:we,Ee)}}:{add:function(we){return oe(this,we=we===0?0:we,we)}}),S0&&qT(U,"size",{configurable:!0,get:function(){return ie(this).size}}),W},setStrong:function(g,S,E){var j=S+" Iterator",W=E4(S),U=E4(j);G8(g,S,function(ie,oe){So(this,{type:j,target:ie,state:W(ie),kind:oe,last:void 0})},function(){for(var ie=U(this),oe=ie.kind,ue=ie.last;ue&&ue.removed;)ue=ue.previous;return ie.target&&(ie.last=ue=ue?ue.next:ie.state.first)?Y2(oe==="keys"?ue.key:oe==="values"?ue.value:[ue.key,ue.value],!1):(ie.target=void 0,Y2(void 0,!0))},E?"entries":"values",!E,!0),JT(S)}};Z8("Map",function(g){return function(){return g(this,arguments.length?arguments[0]:void 0)}},P4);var Q2=n(tn.Map),XT=Ar.some;ar({target:"Array",proto:!0,forced:!xv("some")},{some:function(g){return XT(this,g,arguments.length>1?arguments[1]:void 0)}});var KT=ia("Array","some"),J8=Mr,X8=KT,e5=Array.prototype,YT=n(function(g){var S=g.some;return g===e5||J8(e5,g)&&S===e5.some?X8:S}),QT=ia("Array","keys"),eC=gs,tC=kr,K8=Mr,Qc=QT,t5=Array.prototype,Y8={DOMTokenList:!0,NodeList:!0},yd=n(function(g){var S=g.keys;return g===t5||K8(t5,g)&&S===t5.keys||tC(Y8,eC(g))?Qc:S}),k4=vm,rC=Math.floor,I0=function(g,S){var E=g.length,j=rC(E/2);return E<8?Q8(g,S):eI(g,I0(k4(g,0,j),S),I0(k4(g,j),S),S)},Q8=function(g,S){for(var E,j,W=g.length,U=1;U0;)g[j]=g[--j];j!==U++&&(g[j]=E)}return g},eI=function(g,S,E,j){for(var W=S.length,U=E.length,ie=0,oe=0;ie3)){if(sC)return!0;if(lI)return lI<603;var g,S,E,j,W="";for(g=65;g<76;g++){switch(S=String.fromCharCode(g),g){case 66:case 69:case 70:case 72:E=3;break;case 68:case 71:E=4;break;default:E=2}for(j=0;j<47;j++)bd.push({k:S+j,v:E})}for(bd.sort(function(U,ie){return ie.v-U.v}),j=0;jM4(ue)?1:-1}}(g)),E=C4(W),j=0;jthis.max&&this.flush(),this._timeout!=null&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&typeof this.delay=="number"&&(this._timeout=Ul(function(){S.flush()},this.delay))}},{key:"flush",value:function(){var S,E;zu(S=t7(E=this._queue).call(E,0)).call(S,function(j){j.fn.apply(j.context||j.fn,j.args||[])})}}],[{key:"extend",value:function(S,E){var j=new g(E);if(S.flush!==void 0)throw new Error("Target object already has a property flush");S.flush=function(){j.flush()};var W=[{name:"flush",original:void 0}];if(E&&E.replace)for(var U=0;U=g.length?{done:!0}:{done:!1,value:g[j++]}},e:function(ue){throw ue},f:W}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var U,ie=!0,oe=!1;return{s:function(){E=E.call(g)},n:function(){var ue=E.next();return ie=ue.done,ue},e:function(ue){oe=!0,U=ue},f:function(){try{ie||E.return==null||E.return()}finally{if(oe)throw U}}}}function T0(g,S){(S==null||S>g.length)&&(S=g.length);for(var E=0,j=new Array(S);E_o.mark(function W(){var U,ie,oe,ue,we;return _o.wrap(function(Ee){for(;;)switch(Ee.prev=Ee.next){case 0:U=hl(j),Ee.prev=1,U.s();case 3:if((ie=U.n()).done){Ee.next=10;break}if(oe=es(ie.value,2),ue=oe[0],we=oe[1],!E(we,ue)){Ee.next=8;break}return Ee.next=8,[ue,we];case 8:Ee.next=3;break;case 10:Ee.next=15;break;case 12:Ee.prev=12,Ee.t0=Ee.catch(1),U.e(Ee.t0);case 15:return Ee.prev=15,U.f(),Ee.finish(15);case 18:case"end":return Ee.stop()}},W,null,[[1,12,15,18]])})()})}},{key:"forEach",value:function(E){var j,W=hl(this._pairs);try{for(W.s();!(j=W.n()).done;){var U=es(j.value,2),ie=U[0];E(U[1],ie)}}catch(oe){W.e(oe)}finally{W.f()}}},{key:"map",value:function(E){var j=this._pairs;return new S({[wd]:()=>_o.mark(function W(){var U,ie,oe,ue,we;return _o.wrap(function(Ee){for(;;)switch(Ee.prev=Ee.next){case 0:U=hl(j),Ee.prev=1,U.s();case 3:if((ie=U.n()).done){Ee.next=9;break}return oe=es(ie.value,2),ue=oe[0],we=oe[1],Ee.next=7,[ue,E(we,ue)];case 7:Ee.next=3;break;case 9:Ee.next=14;break;case 11:Ee.prev=11,Ee.t0=Ee.catch(1),U.e(Ee.t0);case 14:return Ee.prev=14,U.f(),Ee.finish(14);case 17:case"end":return Ee.stop()}},W,null,[[1,11,14,17]])})()})}},{key:"max",value:function(E){var j=l5(this._pairs),W=j.next();if(W.done)return null;for(var U=W.value[1],ie=E(W.value[1],W.value[0]);!(W=j.next()).done;){var oe=es(W.value,2),ue=oe[0],we=oe[1],Ee=E(we,ue);Ee>ie&&(ie=Ee,U=we)}return U}},{key:"min",value:function(E){var j=l5(this._pairs),W=j.next();if(W.done)return null;for(var U=W.value[1],ie=E(W.value[1],W.value[0]);!(W=j.next()).done;){var oe=es(W.value,2),ue=oe[0],we=oe[1],Ee=E(we,ue);Ee=g.length?{done:!0}:{done:!1,value:g[j++]}},e:function(ue){throw ue},f:W}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var U,ie=!0,oe=!1;return{s:function(){E=E.call(g)},n:function(){var ue=E.next();return ie=ue.done,ue},e:function(ue){oe=!0,U=ue},f:function(){try{ie||E.return==null||E.return()}finally{if(oe)throw U}}}}function u5(g,S){(S==null||S>g.length)&&(S=g.length);for(var E=0,j=new Array(S);E"u"||!Kl||Kl.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Kl(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var E,j=jn(g);if(S){var W=jn(this).constructor;E=Kl(j,arguments,W)}else E=j.apply(this,arguments);return k6(this,E)}}var hI=function(g){sd(E,g);var S=wC(E);function E(j,W){var U;return t(this,E),Qa(Yv(U=S.call(this)),"_queue",null),j&&!zi(j)&&(W=j,j=[]),U._options=W||{},U._data=new Q2,U.length=0,U._idProp=U._options.fieldId||"id",j&&j.length&&U.add(j),U.setOptions(W),U}return Fu(E,[{key:"idProp",get:function(){return this._idProp}},{key:"setOptions",value:function(j){j&&j.queue!==void 0&&(j.queue===!1?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=F4.extend(this,{replace:["add","update","remove"]})),j.queue&&typeof j.queue=="object"&&this._queue.setOptions(j.queue)))}},{key:"add",value:function(j,W){var U,ie=this,oe=[];if(zi(j)){var ue=ks(j).call(j,function(je){return je[ie._idProp]});if(YT(ue).call(ue,function(je){return ie._data.has(je)}))throw new Error("A duplicate id was found in the parameter array.");for(var we=0,Ee=j.length;we1?$t-1:0),Wt=1;Wt<$t;Wt++)dr[Wt-1]=arguments[Wt];return y6.apply(void 0,t2(_t=[{},Et]).call(_t,dr))}(Ee,je);return ie._data.set(Ze,tt),{id:Ze,oldData:Ee,updatedData:tt}});if(oe.length){var ue={items:ks(oe).call(oe,function(we){return we.id}),oldData:ks(oe).call(oe,function(we){return we.oldData}),data:ks(oe).call(oe,function(we){return we.updatedData})};return this._trigger("update",ue,W),ue.items}return[]}},{key:"get",value:function(j,W){var U=void 0,ie=void 0,oe=void 0;N4(j)?(U=j,oe=W):zi(j)?(ie=j,oe=W):oe=j;var ue,we=oe&&oe.returnType==="Object"?"Object":"Array",Ee=oe&&fi(oe),je=[],Ze=void 0,tt=void 0,Et=void 0;if(U!=null)(Ze=this._data.get(U))&&Ee&&!Ee(Ze)&&(Ze=void 0);else if(ie!=null)for(var _t=0,$t=ie.length;_t<$t;_t++)(Ze=this._data.get(ie[_t]))==null||Ee&&!Ee(Ze)||je.push(Ze);else for(var dr,Wt=0,hn=(tt=Fi(yd(dr=this._data).call(dr))).length;Wtwe?1:ueoe)&&(ie=we,oe=Ee)}}catch(je){ue.e(je)}finally{ue.f()}return ie||null}},{key:"min",value:function(j){var W,U,ie=null,oe=null,ue=dh(k0(W=this._data).call(W));try{for(ue.s();!(U=ue.n()).done;){var we=U.value,Ee=we[j];typeof Ee=="number"&&(oe==null||Ee_o.mark(function ie(){var oe,ue,we,Ee;return _o.wrap(function(je){for(;;)switch(je.prev=je.next){case 0:oe=dh(j),je.prev=1,oe.s();case 3:if((ue=oe.n()).done){je.next=11;break}if(we=ue.value,(Ee=W.get(we))==null){je.next=9;break}return je.next=9,[we,Ee];case 9:je.next=3;break;case 11:je.next=16;break;case 13:je.prev=13,je.t0=je.catch(1),oe.e(je.t0);case 16:return je.prev=16,oe.f(),je.finish(16);case 19:case"end":return je.stop()}},ie,null,[[1,13,16,19]])})()})}var U;return new B4({[wd]:Rf(U=gC(this._data)).call(U,this._data)})}}]),E}(s5);function mI(g,S){var E=no!==void 0&&Pv(g)||g["@@iterator"];if(!E){if(zi(g)||(E=function(ue,we){var Ee;if(ue){if(typeof ue=="string")return wg(ue,we);var je=Bu(Ee=Object.prototype.toString.call(ue)).call(Ee,8,-1);if(je==="Object"&&ue.constructor&&(je=ue.constructor.name),je==="Map"||je==="Set")return Jb(ue);if(je==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(je))return wg(ue,we)}}(g))||S&&g&&typeof g.length=="number"){E&&(g=E);var j=0,W=function(){};return{s:W,n:function(){return j>=g.length?{done:!0}:{done:!1,value:g[j++]}},e:function(ue){throw ue},f:W}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var U,ie=!0,oe=!1;return{s:function(){E=E.call(g)},n:function(){var ue=E.next();return ie=ue.done,ue},e:function(ue){oe=!0,U=ue},f:function(){try{ie||E.return==null||E.return()}finally{if(oe)throw U}}}}function wg(g,S){(S==null||S>g.length)&&(S=g.length);for(var E=0,j=new Array(S);E"u"||!Kl||Kl.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Kl(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var E,j=jn(g);if(S){var W=jn(this).constructor;E=Kl(j,arguments,W)}else E=j.apply(this,arguments);return k6(this,E)}}var vI=function(g){sd(E,g);var S=Og(E);function E(j,W){var U,ie;return t(this,E),Qa(Yv(ie=S.call(this)),"length",0),Qa(Yv(ie),"_ids",new ph),ie._options=W||{},ie._listener=Rf(U=ie._onEvent).call(U,Yv(ie)),ie.setData(j),ie}return Fu(E,[{key:"idProp",get:function(){return this.getDataSet().idProp}},{key:"setData",value:function(j){if(this._data){this._data.off&&this._data.off("*",this._listener);var W=this._data.getIds({filter:fi(this._options)}),U=this._data.get(W);this._ids.clear(),this.length=0,this._trigger("remove",{items:W,oldData:U})}if(j!=null){this._data=j;for(var ie=this._data.getIds({filter:fi(this._options)}),oe=0,ue=ie.length;oet=>{let r=BWe.call(t);return e[r]||(e[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),Oh=e=>(e=e.toLowerCase(),t=>Rq(t)===e),Dq=e=>t=>typeof t===e,{isArray:cE}=Array,RM=Dq("undefined");function zWe(e){return e!==null&&!RM(e)&&e.constructor!==null&&!RM(e.constructor)&&op(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var J2e=Oh("ArrayBuffer");function WWe(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&J2e(e.buffer),t}var HWe=Dq("string"),op=Dq("function"),X2e=Dq("number"),Lq=e=>e!==null&&typeof e=="object",VWe=e=>e===!0||e===!1,Aq=e=>{if(Rq(e)!=="object")return!1;let t=Zte(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},$We=Oh("Date"),ZWe=Oh("File"),qWe=Oh("Blob"),UWe=Oh("FileList"),GWe=e=>Lq(e)&&op(e.pipe),JWe=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||op(e.append)&&((t=Rq(e))==="formdata"||t==="object"&&op(e.toString)&&e.toString()==="[object FormData]"))},XWe=Oh("URLSearchParams"),[KWe,YWe,QWe,eHe]=["ReadableStream","Request","Response","Headers"].map(Oh),tHe=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function DM(e,t,{allOwnKeys:r=!1}={}){if(e===null||typeof e>"u")return;let n,o;if(typeof e!="object"&&(e=[e]),cE(e))for(n=0,o=e.length;n0;)if(o=r[n],t===o.toLowerCase())return o;return null}var px=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),Y2e=e=>!RM(e)&&e!==px;function $te(){let{caseless:e}=Y2e(this)&&this||{},t={},r=(n,o)=>{let i=e&&K2e(t,o)||o;Aq(t[i])&&Aq(n)?t[i]=$te(t[i],n):Aq(n)?t[i]=$te({},n):cE(n)?t[i]=n.slice():t[i]=n};for(let n=0,o=arguments.length;n(DM(t,(o,i)=>{r&&op(o)?e[i]=AM(o,r):e[i]=o},{allOwnKeys:n}),e),nHe=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),oHe=(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},iHe=(e,t,r,n)=>{let o,i,c,d={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)c=o[i],(!n||n(c,e,t))&&!d[c]&&(t[c]=e[c],d[c]=!0);e=r!==!1&&Zte(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},aHe=(e,t,r)=>{e=String(e),(r===void 0||r>e.length)&&(r=e.length),r-=t.length;let n=e.indexOf(t,r);return n!==-1&&n===r},sHe=e=>{if(!e)return null;if(cE(e))return e;let t=e.length;if(!X2e(t))return null;let r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},lHe=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Zte(Uint8Array)),uHe=(e,t)=>{let n=(e&&e[Symbol.iterator]).call(e),o;for(;(o=n.next())&&!o.done;){let i=o.value;t.call(e,i[0],i[1])}},cHe=(e,t)=>{let r,n=[];for(;(r=e.exec(t))!==null;)n.push(r);return n},pHe=Oh("HTMLFormElement"),dHe=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,n,o){return n.toUpperCase()+o}),U2e=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),fHe=Oh("RegExp"),Q2e=(e,t)=>{let r=Object.getOwnPropertyDescriptors(e),n={};DM(r,(o,i)=>{let c;(c=t(o,i,e))!==!1&&(n[i]=c||o)}),Object.defineProperties(e,n)},hHe=e=>{Q2e(e,(t,r)=>{if(op(e)&&["arguments","caller","callee"].indexOf(r)!==-1)return!1;let n=e[r];if(op(n)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")})}})},mHe=(e,t)=>{let r={},n=o=>{o.forEach(i=>{r[i]=!0})};return cE(e)?n(e):n(String(e).split(t)),r},vHe=()=>{},gHe=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,Vte="abcdefghijklmnopqrstuvwxyz",G2e="0123456789",e5e={DIGIT:G2e,ALPHA:Vte,ALPHA_DIGIT:Vte+Vte.toUpperCase()+G2e},yHe=(e=16,t=e5e.ALPHA_DIGIT)=>{let r="",{length:n}=t;for(;e--;)r+=t[Math.random()*n|0];return r};function bHe(e){return!!(e&&op(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}var wHe=e=>{let t=new Array(10),r=(n,o)=>{if(Lq(n)){if(t.indexOf(n)>=0)return;if(!("toJSON"in n)){t[o]=n;let i=cE(n)?[]:{};return DM(n,(c,d)=>{let h=r(c,o+1);!RM(h)&&(i[d]=h)}),t[o]=void 0,i}}return n};return r(e,0)},OHe=Oh("AsyncFunction"),xHe=e=>e&&(Lq(e)||op(e))&&op(e.then)&&op(e.catch),t5e=((e,t)=>e?setImmediate:t?((r,n)=>(px.addEventListener("message",({source:o,data:i})=>{o===px&&i===r&&n.length&&n.shift()()},!1),o=>{n.push(o),px.postMessage(r,"*")}))(`axios@${Math.random()}`,[]):r=>setTimeout(r))(typeof setImmediate=="function",op(px.postMessage)),_He=typeof queueMicrotask<"u"?queueMicrotask.bind(px):typeof process<"u"&&process.nextTick||t5e,De={isArray:cE,isArrayBuffer:J2e,isBuffer:zWe,isFormData:JWe,isArrayBufferView:WWe,isString:HWe,isNumber:X2e,isBoolean:VWe,isObject:Lq,isPlainObject:Aq,isReadableStream:KWe,isRequest:YWe,isResponse:QWe,isHeaders:eHe,isUndefined:RM,isDate:$We,isFile:ZWe,isBlob:qWe,isRegExp:fHe,isFunction:op,isStream:GWe,isURLSearchParams:XWe,isTypedArray:lHe,isFileList:UWe,forEach:DM,merge:$te,extend:rHe,trim:tHe,stripBOM:nHe,inherits:oHe,toFlatObject:iHe,kindOf:Rq,kindOfTest:Oh,endsWith:aHe,toArray:sHe,forEachEntry:uHe,matchAll:cHe,isHTMLForm:pHe,hasOwnProperty:U2e,hasOwnProp:U2e,reduceDescriptors:Q2e,freezeMethods:hHe,toObjectSet:mHe,toCamelCase:dHe,noop:vHe,toFiniteNumber:gHe,findKey:K2e,global:px,isContextDefined:Y2e,ALPHABET:e5e,generateString:yHe,isSpecCompliantForm:bHe,toJSONObject:wHe,isAsyncFn:OHe,isThenable:xHe,setImmediate:t5e,asap:_He};function pE(e,t,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o,this.status=o.status?o.status:null)}De.inherits(pE,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:De.toJSONObject(this.config),code:this.code,status:this.status}}});var r5e=pE.prototype,n5e={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{n5e[e]={value:e}});Object.defineProperties(pE,n5e);Object.defineProperty(r5e,"isAxiosError",{value:!0});pE.from=(e,t,r,n,o,i)=>{let c=Object.create(r5e);return De.toFlatObject(e,c,function(h){return h!==Error.prototype},d=>d!=="isAxiosError"),pE.call(c,e.message,t,r,n,o),c.cause=e,c.name=e.name,i&&Object.assign(c,i),c};var Tr=pE;var Nq=null;function qte(e){return De.isPlainObject(e)||De.isArray(e)}function i5e(e){return De.endsWith(e,"[]")?e.slice(0,-2):e}function o5e(e,t,r){return e?e.concat(t).map(function(o,i){return o=i5e(o),!r&&i?"["+o+"]":o}).join(r?".":""):t}function SHe(e){return De.isArray(e)&&!e.some(qte)}var IHe=De.toFlatObject(De,{},null,function(t){return/^is[A-Z]/.test(t)});function EHe(e,t,r){if(!De.isObject(e))throw new TypeError("target must be an object");t=t||new(Nq||FormData),r=De.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(F,A){return!De.isUndefined(A[F])});let n=r.metaTokens,o=r.visitor||w,i=r.dots,c=r.indexes,h=(r.Blob||typeof Blob<"u"&&Blob)&&De.isSpecCompliantForm(t);if(!De.isFunction(o))throw new TypeError("visitor must be a function");function v(D){if(D===null)return"";if(De.isDate(D))return D.toISOString();if(!h&&De.isBlob(D))throw new Tr("Blob is not supported. Use a Buffer instead.");return De.isArrayBuffer(D)||De.isTypedArray(D)?h&&typeof Blob=="function"?new Blob([D]):Buffer.from(D):D}function w(D,F,A){let N=D;if(D&&!A&&typeof D=="object"){if(De.endsWith(F,"{}"))F=n?F:F.slice(0,-2),D=JSON.stringify(D);else if(De.isArray(D)&&SHe(D)||(De.isFileList(D)||De.endsWith(F,"[]"))&&(N=De.toArray(D)))return F=i5e(F),N.forEach(function(q,Y){!(De.isUndefined(q)||q===null)&&t.append(c===!0?o5e([F],Y,i):c===null?F:F+"[]",v(q))}),!1}return qte(D)?!0:(t.append(o5e(A,F,i),v(D)),!1)}let _=[],I=Object.assign(IHe,{defaultVisitor:w,convertValue:v,isVisitable:qte});function R(D,F){if(!De.isUndefined(D)){if(_.indexOf(D)!==-1)throw Error("Circular reference detected in "+F.join("."));_.push(D),De.forEach(D,function(N,H){(!(De.isUndefined(N)||N===null)&&o.call(t,N,De.isString(H)?H.trim():H,F,I))===!0&&R(N,F?F.concat(H):[H])}),_.pop()}}if(!De.isObject(e))throw new TypeError("data must be an object");return R(e),t}var V5=EHe;function a5e(e){let t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(n){return t[n]})}function s5e(e,t){this._pairs=[],e&&V5(e,this,t)}var l5e=s5e.prototype;l5e.append=function(t,r){this._pairs.push([t,r])};l5e.toString=function(t){let r=t?function(n){return t.call(this,n,a5e)}:a5e;return this._pairs.map(function(o){return r(o[0])+"="+r(o[1])},"").join("&")};var Fq=s5e;function PHe(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function LM(e,t,r){if(!t)return e;let n=r&&r.encode||PHe;De.isFunction(r)&&(r={serialize:r});let o=r&&r.serialize,i;if(o?i=o(t,r):i=De.isURLSearchParams(t)?t.toString():new Fq(t,r).toString(n),i){let c=e.indexOf("#");c!==-1&&(e=e.slice(0,c)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}var Ute=class{constructor(){this.handlers=[]}use(t,r,n){return this.handlers.push({fulfilled:t,rejected:r,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){De.forEach(this.handlers,function(n){n!==null&&t(n)})}},Gte=Ute;var Bq={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};var u5e=typeof URLSearchParams<"u"?URLSearchParams:Fq;var c5e=typeof FormData<"u"?FormData:null;var p5e=typeof Blob<"u"?Blob:null;var d5e={isBrowser:!0,classes:{URLSearchParams:u5e,FormData:c5e,Blob:p5e},protocols:["http","https","file","blob","url","data"]};var Kte={};J(Kte,{hasBrowserEnv:()=>Xte,hasStandardBrowserEnv:()=>kHe,hasStandardBrowserWebWorkerEnv:()=>jHe,navigator:()=>Jte,origin:()=>THe});var Xte=typeof window<"u"&&typeof document<"u",Jte=typeof navigator=="object"&&navigator||void 0,kHe=Xte&&(!Jte||["ReactNative","NativeScript","NS"].indexOf(Jte.product)<0),jHe=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),THe=Xte&&window.location.href||"http://localhost";var gi={...Kte,...d5e};function Yte(e,t){return V5(e,new gi.classes.URLSearchParams,Object.assign({visitor:function(r,n,o,i){return gi.isNode&&De.isBuffer(r)?(this.append(n,r.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},t))}function CHe(e){return De.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function MHe(e){let t={},r=Object.keys(e),n,o=r.length,i;for(n=0;n=r.length;return c=!c&&De.isArray(o)?o.length:c,h?(De.hasOwnProp(o,c)?o[c]=[o[c],n]:o[c]=n,!d):((!o[c]||!De.isObject(o[c]))&&(o[c]=[]),t(r,n,o[c],i)&&De.isArray(o[c])&&(o[c]=MHe(o[c])),!d)}if(De.isFormData(e)&&De.isFunction(e.entries)){let r={};return De.forEachEntry(e,(n,o)=>{t(CHe(n),o,r,0)}),r}return null}var zq=AHe;function RHe(e,t,r){if(De.isString(e))try{return(t||JSON.parse)(e),De.trim(e)}catch(n){if(n.name!=="SyntaxError")throw n}return(r||JSON.stringify)(e)}var Qte={transitional:Bq,adapter:["xhr","http","fetch"],transformRequest:[function(t,r){let n=r.getContentType()||"",o=n.indexOf("application/json")>-1,i=De.isObject(t);if(i&&De.isHTMLForm(t)&&(t=new FormData(t)),De.isFormData(t))return o?JSON.stringify(zq(t)):t;if(De.isArrayBuffer(t)||De.isBuffer(t)||De.isStream(t)||De.isFile(t)||De.isBlob(t)||De.isReadableStream(t))return t;if(De.isArrayBufferView(t))return t.buffer;if(De.isURLSearchParams(t))return r.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let d;if(i){if(n.indexOf("application/x-www-form-urlencoded")>-1)return Yte(t,this.formSerializer).toString();if((d=De.isFileList(t))||n.indexOf("multipart/form-data")>-1){let h=this.env&&this.env.FormData;return V5(d?{"files[]":t}:t,h&&new h,this.formSerializer)}}return i||o?(r.setContentType("application/json",!1),RHe(t)):t}],transformResponse:[function(t){let r=this.transitional||Qte.transitional,n=r&&r.forcedJSONParsing,o=this.responseType==="json";if(De.isResponse(t)||De.isReadableStream(t))return t;if(t&&De.isString(t)&&(n&&!this.responseType||o)){let c=!(r&&r.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(d){if(c)throw d.name==="SyntaxError"?Tr.from(d,Tr.ERR_BAD_RESPONSE,this,null,this.response):d}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:gi.classes.FormData,Blob:gi.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};De.forEach(["delete","get","head","post","put","patch"],e=>{Qte.headers[e]={}});var dE=Qte;var DHe=De.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),f5e=e=>{let t={},r,n,o;return e&&e.split(` +`).forEach(function(c){o=c.indexOf(":"),r=c.substring(0,o).trim().toLowerCase(),n=c.substring(o+1).trim(),!(!r||t[r]&&DHe[r])&&(r==="set-cookie"?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)}),t};var h5e=Symbol("internals");function NM(e){return e&&String(e).trim().toLowerCase()}function Wq(e){return e===!1||e==null?e:De.isArray(e)?e.map(Wq):String(e)}function LHe(e){let t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}var NHe=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function ere(e,t,r,n,o){if(De.isFunction(n))return n.call(this,t,r);if(o&&(t=r),!!De.isString(t)){if(De.isString(n))return t.indexOf(n)!==-1;if(De.isRegExp(n))return n.test(t)}}function FHe(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,r,n)=>r.toUpperCase()+n)}function BHe(e,t){let r=De.toCamelCase(" "+t);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+r,{value:function(o,i,c){return this[n].call(this,t,o,i,c)},configurable:!0})})}var fE=class{constructor(t){t&&this.set(t)}set(t,r,n){let o=this;function i(d,h,v){let w=NM(h);if(!w)throw new Error("header name must be a non-empty string");let _=De.findKey(o,w);(!_||o[_]===void 0||v===!0||v===void 0&&o[_]!==!1)&&(o[_||h]=Wq(d))}let c=(d,h)=>De.forEach(d,(v,w)=>i(v,w,h));if(De.isPlainObject(t)||t instanceof this.constructor)c(t,r);else if(De.isString(t)&&(t=t.trim())&&!NHe(t))c(f5e(t),r);else if(De.isHeaders(t))for(let[d,h]of t.entries())i(h,d,n);else t!=null&&i(r,t,n);return this}get(t,r){if(t=NM(t),t){let n=De.findKey(this,t);if(n){let o=this[n];if(!r)return o;if(r===!0)return LHe(o);if(De.isFunction(r))return r.call(this,o,n);if(De.isRegExp(r))return r.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,r){if(t=NM(t),t){let n=De.findKey(this,t);return!!(n&&this[n]!==void 0&&(!r||ere(this,this[n],n,r)))}return!1}delete(t,r){let n=this,o=!1;function i(c){if(c=NM(c),c){let d=De.findKey(n,c);d&&(!r||ere(n,n[d],d,r))&&(delete n[d],o=!0)}}return De.isArray(t)?t.forEach(i):i(t),o}clear(t){let r=Object.keys(this),n=r.length,o=!1;for(;n--;){let i=r[n];(!t||ere(this,this[i],i,t,!0))&&(delete this[i],o=!0)}return o}normalize(t){let r=this,n={};return De.forEach(this,(o,i)=>{let c=De.findKey(n,i);if(c){r[c]=Wq(o),delete r[i];return}let d=t?FHe(i):String(i).trim();d!==i&&delete r[i],r[d]=Wq(o),n[d]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){let r=Object.create(null);return De.forEach(this,(n,o)=>{n!=null&&n!==!1&&(r[o]=t&&De.isArray(n)?n.join(", "):n)}),r}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,r])=>t+": "+r).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...r){let n=new this(t);return r.forEach(o=>n.set(o)),n}static accessor(t){let n=(this[h5e]=this[h5e]={accessors:{}}).accessors,o=this.prototype;function i(c){let d=NM(c);n[d]||(BHe(o,c),n[d]=!0)}return De.isArray(t)?t.forEach(i):i(t),this}};fE.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);De.reduceDescriptors(fE.prototype,({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(n){this[r]=n}}});De.freezeMethods(fE);var Wa=fE;function FM(e,t){let r=this||dE,n=t||r,o=Wa.from(n.headers),i=n.data;return De.forEach(e,function(d){i=d.call(r,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function BM(e){return!!(e&&e.__CANCEL__)}function m5e(e,t,r){Tr.call(this,e??"canceled",Tr.ERR_CANCELED,t,r),this.name="CanceledError"}De.inherits(m5e,Tr,{__CANCEL__:!0});var H0=m5e;function zM(e,t,r){let n=r.config.validateStatus;!r.status||!n||n(r.status)?e(r):t(new Tr("Request failed with status code "+r.status,[Tr.ERR_BAD_REQUEST,Tr.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r))}function tre(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function zHe(e,t){e=e||10;let r=new Array(e),n=new Array(e),o=0,i=0,c;return t=t!==void 0?t:1e3,function(h){let v=Date.now(),w=n[i];c||(c=v),r[o]=h,n[o]=v;let _=i,I=0;for(;_!==o;)I+=r[_++],_=_%e;if(o=(o+1)%e,o===i&&(i=(i+1)%e),v-c{r=w,o=null,i&&(clearTimeout(i),i=null),e.apply(null,v)};return[(...v)=>{let w=Date.now(),_=w-r;_>=n?c(v,w):(o=v,i||(i=setTimeout(()=>{i=null,c(o)},n-_)))},()=>o&&c(o)]}var g5e=WHe;var hE=(e,t,r=3)=>{let n=0,o=v5e(50,250);return g5e(i=>{let c=i.loaded,d=i.lengthComputable?i.total:void 0,h=c-n,v=o(h),w=c<=d;n=c;let _={loaded:c,total:d,progress:d?c/d:void 0,bytes:h,rate:v||void 0,estimated:v&&d&&w?(d-c)/v:void 0,event:i,lengthComputable:d!=null,[t?"download":"upload"]:!0};e(_)},r)},rre=(e,t)=>{let r=e!=null;return[n=>t[0]({lengthComputable:r,total:e,loaded:n}),t[1]]},nre=e=>(...t)=>De.asap(()=>e(...t));var y5e=gi.hasStandardBrowserEnv?((e,t)=>r=>(r=new URL(r,gi.origin),e.protocol===r.protocol&&e.host===r.host&&(t||e.port===r.port)))(new URL(gi.origin),gi.navigator&&/(msie|trident)/i.test(gi.navigator.userAgent)):()=>!0;var b5e=gi.hasStandardBrowserEnv?{write(e,t,r,n,o,i){let c=[e+"="+encodeURIComponent(t)];De.isNumber(r)&&c.push("expires="+new Date(r).toGMTString()),De.isString(n)&&c.push("path="+n),De.isString(o)&&c.push("domain="+o),i===!0&&c.push("secure"),document.cookie=c.join("; ")},read(e){let t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function ore(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function ire(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function WM(e,t){return e&&!ore(t)?ire(e,t):t}var w5e=e=>e instanceof Wa?{...e}:e;function xh(e,t){t=t||{};let r={};function n(v,w,_,I){return De.isPlainObject(v)&&De.isPlainObject(w)?De.merge.call({caseless:I},v,w):De.isPlainObject(w)?De.merge({},w):De.isArray(w)?w.slice():w}function o(v,w,_,I){if(De.isUndefined(w)){if(!De.isUndefined(v))return n(void 0,v,_,I)}else return n(v,w,_,I)}function i(v,w){if(!De.isUndefined(w))return n(void 0,w)}function c(v,w){if(De.isUndefined(w)){if(!De.isUndefined(v))return n(void 0,v)}else return n(void 0,w)}function d(v,w,_){if(_ in t)return n(v,w);if(_ in e)return n(void 0,v)}let h={url:i,method:i,data:i,baseURL:c,transformRequest:c,transformResponse:c,paramsSerializer:c,timeout:c,timeoutMessage:c,withCredentials:c,withXSRFToken:c,adapter:c,responseType:c,xsrfCookieName:c,xsrfHeaderName:c,onUploadProgress:c,onDownloadProgress:c,decompress:c,maxContentLength:c,maxBodyLength:c,beforeRedirect:c,transport:c,httpAgent:c,httpsAgent:c,cancelToken:c,socketPath:c,responseEncoding:c,validateStatus:d,headers:(v,w,_)=>o(w5e(v),w5e(w),_,!0)};return De.forEach(Object.keys(Object.assign({},e,t)),function(w){let _=h[w]||o,I=_(e[w],t[w],w);De.isUndefined(I)&&_!==d||(r[w]=I)}),r}var Hq=e=>{let t=xh({},e),{data:r,withXSRFToken:n,xsrfHeaderName:o,xsrfCookieName:i,headers:c,auth:d}=t;t.headers=c=Wa.from(c),t.url=LM(WM(t.baseURL,t.url),e.params,e.paramsSerializer),d&&c.set("Authorization","Basic "+btoa((d.username||"")+":"+(d.password?unescape(encodeURIComponent(d.password)):"")));let h;if(De.isFormData(r)){if(gi.hasStandardBrowserEnv||gi.hasStandardBrowserWebWorkerEnv)c.setContentType(void 0);else if((h=c.getContentType())!==!1){let[v,...w]=h?h.split(";").map(_=>_.trim()).filter(Boolean):[];c.setContentType([v||"multipart/form-data",...w].join("; "))}}if(gi.hasStandardBrowserEnv&&(n&&De.isFunction(n)&&(n=n(t)),n||n!==!1&&y5e(t.url))){let v=o&&i&&b5e.read(i);v&&c.set(o,v)}return t};var HHe=typeof XMLHttpRequest<"u",O5e=HHe&&function(e){return new Promise(function(r,n){let o=Hq(e),i=o.data,c=Wa.from(o.headers).normalize(),{responseType:d,onUploadProgress:h,onDownloadProgress:v}=o,w,_,I,R,D;function F(){R&&R(),D&&D(),o.cancelToken&&o.cancelToken.unsubscribe(w),o.signal&&o.signal.removeEventListener("abort",w)}let A=new XMLHttpRequest;A.open(o.method.toUpperCase(),o.url,!0),A.timeout=o.timeout;function N(){if(!A)return;let q=Wa.from("getAllResponseHeaders"in A&&A.getAllResponseHeaders()),ee={data:!d||d==="text"||d==="json"?A.responseText:A.response,status:A.status,statusText:A.statusText,headers:q,config:e,request:A};zM(function(te){r(te),F()},function(te){n(te),F()},ee),A=null}"onloadend"in A?A.onloadend=N:A.onreadystatechange=function(){!A||A.readyState!==4||A.status===0&&!(A.responseURL&&A.responseURL.indexOf("file:")===0)||setTimeout(N)},A.onabort=function(){A&&(n(new Tr("Request aborted",Tr.ECONNABORTED,e,A)),A=null)},A.onerror=function(){n(new Tr("Network Error",Tr.ERR_NETWORK,e,A)),A=null},A.ontimeout=function(){let Y=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded",ee=o.transitional||Bq;o.timeoutErrorMessage&&(Y=o.timeoutErrorMessage),n(new Tr(Y,ee.clarifyTimeoutError?Tr.ETIMEDOUT:Tr.ECONNABORTED,e,A)),A=null},i===void 0&&c.setContentType(null),"setRequestHeader"in A&&De.forEach(c.toJSON(),function(Y,ee){A.setRequestHeader(ee,Y)}),De.isUndefined(o.withCredentials)||(A.withCredentials=!!o.withCredentials),d&&d!=="json"&&(A.responseType=o.responseType),v&&([I,D]=hE(v,!0),A.addEventListener("progress",I)),h&&A.upload&&([_,R]=hE(h),A.upload.addEventListener("progress",_),A.upload.addEventListener("loadend",R)),(o.cancelToken||o.signal)&&(w=q=>{A&&(n(!q||q.type?new H0(null,e,A):q),A.abort(),A=null)},o.cancelToken&&o.cancelToken.subscribe(w),o.signal&&(o.signal.aborted?w():o.signal.addEventListener("abort",w)));let H=tre(o.url);if(H&&gi.protocols.indexOf(H)===-1){n(new Tr("Unsupported protocol "+H+":",Tr.ERR_BAD_REQUEST,e));return}A.send(i||null)})};var VHe=(e,t)=>{let{length:r}=e=e?e.filter(Boolean):[];if(t||r){let n=new AbortController,o,i=function(v){if(!o){o=!0,d();let w=v instanceof Error?v:this.reason;n.abort(w instanceof Tr?w:new H0(w instanceof Error?w.message:w))}},c=t&&setTimeout(()=>{c=null,i(new Tr(`timeout ${t} of ms exceeded`,Tr.ETIMEDOUT))},t),d=()=>{e&&(c&&clearTimeout(c),c=null,e.forEach(v=>{v.unsubscribe?v.unsubscribe(i):v.removeEventListener("abort",i)}),e=null)};e.forEach(v=>v.addEventListener("abort",i));let{signal:h}=n;return h.unsubscribe=()=>De.asap(d),h}},x5e=VHe;var $He=function*(e,t){let r=e.byteLength;if(!t||r{let o=ZHe(e,t),i=0,c,d=h=>{c||(c=!0,n&&n(h))};return new ReadableStream({async pull(h){try{let{done:v,value:w}=await o.next();if(v){d(),h.close();return}let _=w.byteLength;if(r){let I=i+=_;r(I)}h.enqueue(new Uint8Array(w))}catch(v){throw d(v),v}},cancel(h){return d(h),o.return()}},{highWaterMark:2})};var $q=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",S5e=$q&&typeof ReadableStream=="function",UHe=$q&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),I5e=(e,...t)=>{try{return!!e(...t)}catch{return!1}},GHe=S5e&&I5e(()=>{let e=!1,t=new Request(gi.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),_5e=64*1024,sre=S5e&&I5e(()=>De.isReadableStream(new Response("").body)),Vq={stream:sre&&(e=>e.body)};$q&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!Vq[t]&&(Vq[t]=De.isFunction(e[t])?r=>r[t]():(r,n)=>{throw new Tr(`Response type '${t}' is not supported`,Tr.ERR_NOT_SUPPORT,n)})})})(new Response);var JHe=async e=>{if(e==null)return 0;if(De.isBlob(e))return e.size;if(De.isSpecCompliantForm(e))return(await new Request(gi.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(De.isArrayBufferView(e)||De.isArrayBuffer(e))return e.byteLength;if(De.isURLSearchParams(e)&&(e=e+""),De.isString(e))return(await UHe(e)).byteLength},XHe=async(e,t)=>{let r=De.toFiniteNumber(e.getContentLength());return r??JHe(t)},E5e=$q&&(async e=>{let{url:t,method:r,data:n,signal:o,cancelToken:i,timeout:c,onDownloadProgress:d,onUploadProgress:h,responseType:v,headers:w,withCredentials:_="same-origin",fetchOptions:I}=Hq(e);v=v?(v+"").toLowerCase():"text";let R=x5e([o,i&&i.toAbortSignal()],c),D,F=R&&R.unsubscribe&&(()=>{R.unsubscribe()}),A;try{if(h&&GHe&&r!=="get"&&r!=="head"&&(A=await XHe(w,n))!==0){let ee=new Request(t,{method:"POST",body:n,duplex:"half"}),ne;if(De.isFormData(n)&&(ne=ee.headers.get("content-type"))&&w.setContentType(ne),ee.body){let[te,de]=rre(A,hE(nre(h)));n=are(ee.body,_5e,te,de)}}De.isString(_)||(_=_?"include":"omit");let N="credentials"in Request.prototype;D=new Request(t,{...I,signal:R,method:r.toUpperCase(),headers:w.normalize().toJSON(),body:n,duplex:"half",credentials:N?_:void 0});let H=await fetch(D),q=sre&&(v==="stream"||v==="response");if(sre&&(d||q&&F)){let ee={};["status","statusText","headers"].forEach(fe=>{ee[fe]=H[fe]});let ne=De.toFiniteNumber(H.headers.get("content-length")),[te,de]=d&&rre(ne,hE(nre(d),!0))||[];H=new Response(are(H.body,_5e,te,()=>{de&&de(),F&&F()}),ee)}v=v||"text";let Y=await Vq[De.findKey(Vq,v)||"text"](H,e);return!q&&F&&F(),await new Promise((ee,ne)=>{zM(ee,ne,{data:Y,headers:Wa.from(H.headers),status:H.status,statusText:H.statusText,config:e,request:D})})}catch(N){throw F&&F(),N&&N.name==="TypeError"&&/fetch/i.test(N.message)?Object.assign(new Tr("Network Error",Tr.ERR_NETWORK,e,D),{cause:N.cause||N}):Tr.from(N,N&&N.code,e,D)}});var lre={http:Nq,xhr:O5e,fetch:E5e};De.forEach(lre,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});var P5e=e=>`- ${e}`,KHe=e=>De.isFunction(e)||e===null||e===!1,Zq={getAdapter:e=>{e=De.isArray(e)?e:[e];let{length:t}=e,r,n,o={};for(let i=0;i`adapter ${d} `+(h===!1?"is not supported by the environment":"is not available in the build")),c=t?i.length>1?`since : `+i.map(P5e).join(` -`):" "+P5e(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:sre};function lre(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new H0(null,e)}function Zq(e){return lre(e),e.headers=Wa.from(e.headers),e.data=FM.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),$q.getAdapter(e.adapter||dE.adapter)(e).then(function(n){return lre(e),n.data=FM.call(e,e.transformResponse,n),n.headers=Wa.from(n.headers),n},function(n){return BM(n)||(lre(e),n&&n.response&&(n.response.data=FM.call(e,e.transformResponse,n.response),n.response.headers=Wa.from(n.response.headers))),Promise.reject(n)})}var qq="1.7.7";var ure={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{ure[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});var k5e={};ure.transitional=function(t,r,n){function o(i,c){return"[Axios v"+qq+"] Transitional option '"+i+"'"+c+(n?". "+n:"")}return(i,c,d)=>{if(t===!1)throw new Tr(o(c," has been removed"+(r?" in "+r:"")),Tr.ERR_DEPRECATED);return r&&!k5e[c]&&(k5e[c]=!0,console.warn(o(c," has been deprecated since v"+r+" and will be removed in the near future"))),t?t(i,c,d):!0}};function YHe(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 d=e[i],h=d===void 0||c(d,i,e);if(h!==!0)throw new Tr("option "+i+" must be "+h,Tr.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new Tr("Unknown option "+i,Tr.ERR_BAD_OPTION)}}var Uq={assertOptions:YHe,validators:ure};var V5=Uq.validators,mE=class{constructor(t){this.defaults=t,this.interceptors={request:new Ute,response:new Ute}}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=xh(this.defaults,r);let{transitional:n,paramsSerializer:o,headers:i}=r;n!==void 0&&Uq.assertOptions(n,{silentJSONParsing:V5.transitional(V5.boolean),forcedJSONParsing:V5.transitional(V5.boolean),clarifyTimeoutError:V5.transitional(V5.boolean)},!1),o!=null&&(Ae.isFunction(o)?r.paramsSerializer={serialize:o}:Uq.assertOptions(o,{encode:V5.function,serialize:V5.function},!0)),r.method=(r.method||this.defaults.method||"get").toLowerCase();let c=i&&Ae.merge(i.common,i[r.method]);i&&Ae.forEach(["delete","get","head","post","put","patch","common"],D=>{delete i[D]}),r.headers=Wa.concat(c,i);let d=[],h=!0;this.interceptors.request.forEach(function(F){typeof F.runWhen=="function"&&F.runWhen(r)===!1||(h=h&&F.synchronous,d.unshift(F.fulfilled,F.rejected))});let v=[];this.interceptors.response.forEach(function(F){v.push(F.fulfilled,F.rejected)});let w,_=0,I;if(!h){let D=[Zq.bind(this),void 0];for(D.unshift.apply(D,d),D.push.apply(D,v),I=D.length,w=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(d=>{n.subscribe(d),i=d}).then(o);return c.cancel=function(){n.unsubscribe(i)},c},t(function(i,c,d){n.reason||(n.reason=new H0(i,c,d),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}}},j5e=cre;function pre(e){return function(r){return e.apply(null,r)}}function dre(e){return Ae.isObject(e)&&e.isAxiosError===!0}var fre={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(fre).forEach(([e,t])=>{fre[t]=e});var T5e=fre;function C5e(e){let t=new HM(e),r=AM(HM.prototype.request,t);return Ae.extend(r,HM.prototype,t,{allOwnKeys:!0}),Ae.extend(r,t,null,{allOwnKeys:!0}),r.create=function(o){return C5e(xh(e,o))},r}var fa=C5e(dE);fa.Axios=HM;fa.CanceledError=H0;fa.CancelToken=j5e;fa.isCancel=BM;fa.VERSION=qq;fa.toFormData=H5;fa.AxiosError=Tr;fa.Cancel=fa.CanceledError;fa.all=function(t){return Promise.all(t)};fa.spread=pre;fa.isAxiosError=dre;fa.mergeConfig=xh;fa.AxiosHeaders=Wa;fa.formToJSON=e=>Bq(Ae.isHTMLForm(e)?new FormData(e):e);fa.getAdapter=$q.getAdapter;fa.HttpStatusCode=T5e;fa.default=fa;var $5=fa;var{Axios:jcr,AxiosError:Tcr,CanceledError:Ccr,isCancel:Mcr,CancelToken:Acr,VERSION:Rcr,all:Dcr,Cancel:Lcr,isAxiosError:Ncr,spread:Fcr,toFormData:Bcr,AxiosHeaders:zcr,HttpStatusCode:Wcr,formToJSON:Hcr,getAdapter:Vcr,mergeConfig:$cr}=$5;var Dg=["class","term"],M5e=["property","annotationProperty","dataProperty","objectProperty"],A5e=["individual"],Gq=["ontology"],VM=[...Dg,...A5e,...M5e],hre=[...VM,...Gq];function vE(e){return Dg.includes(e)}function mre(e){return M5e.includes(e)}function Ad(e){return A5e.includes(e)}function $M(e){return Gq.includes(e)}function vre(e){return VM.includes(e)}function ZM(e){return hre.includes(e)}function dx(e){return vE(e.getType())}function Z5(e){return mre(e.getType())}function gE(e){return Ad(e.getType())}function Rd(e){return vre(e.getType())}function R5e(e){return $M(e.getType())}function ht(e){return Array.isArray(e)?e:e?[e]:[]}var QHe=!0;function iu(e){return e!==void 0?e:QHe}function Jq(e){return e==="term"?"class":e}function _h(e){return e.charAt(0).toUpperCase()+e.slice(1)}function yE(e){return _h(e).split(/(?=[A-Z][a-z])/).join(" ")}function bE(e){return _h(e).replace("_"," ")}function Sh(e,t,r,n){return`ontologies/${e}/${wl(ht(t),n)}`+(r!=null?`/${encodeURIComponent(encodeURIComponent(r))}`:"")}function wl(e,t){for(let r of ht(e))if(ZM(r)){if(vE(r))return iu(t)?"terms":"classes";if(mre(r))return"properties";if(Ad(r))return"individuals";if($M(r))return"ontologies"}throw new Error("No thingType found to pluralize in provided typeArray.")}function Xq(e,t){for(let r of ht(e))switch(r){case"terms":case"classes":return iu(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 Kq(e){return/^#[0-9A-F]{6}$/i.test(e)}function Yq(e){return/^(rgb|hsl)(a?)[(]\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*(?:,\s*([\d.]+)\s*)?[)]$/i.test(e)}function gre(e){return["primary","subdued","success","accent","danger","warning","text","ghost"].includes(e)}function D5e(e){return["text","accent","primary","success","warning","danger"].includes(e)}function Lo(e,t="information"){return e.message==="Response contains 0 elements"?"No elements found":`No ${t} available`}function Qq(e){let t=e.filter(r=>ZM(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 kt=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 fx=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=kt.fromJson(r.label);if(n&&n.length>0)return n[0].value}}get(t){return this.linkedEntities[t]}};var hx=class{properties;constructor(t){this.properties=t}getLabel(){return this.properties.label}getId(){return this.properties.id}getIri(){return this.properties.iri}getTypePlural(){return wl(this.getType())}getRdfTypes(){return[]}getName(){return this.getNames()[0]}getNames(){let t=kt.fromJson(this.properties.label);return t&&t.length>0?t.map(r=>r.value):[this.getIri()]}getDescription(){let t=kt.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&&kt.fromJson(r[t]?.label)[0]?.value||t}getLinkedEntities(){return new fx(this.properties.linkedEntities||{})}getDepictionUrl(){return this.properties.annotation&&this.properties.annotation.depiction?this.properties.annotation.depiction[0]:""}};var Lg=class extends hx{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 kt.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(kt.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 kt.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return kt.fromJson(this.properties.description)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.properties.has_children}getAncestorIris(){return ht(this.properties.ancestor)}getHierarchicalAncestorIris(){return ht(this.properties.hierarchicalAncestor)}getSynonyms(){return kt.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 kt.fromJson([...ht(this.properties["http://xmlns.com/foaf/0.1/depicted_by"]||[]),...ht(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 ht(Object.keys(this.properties.annotation))}getAnnotationTitleById(t){return bE(t)}getAnnotationById(t){return kt.fromJson(ht(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=kt.fromJson(this.properties.hierarchicalParent);for(let n of r)if(n.value===t)return n.getMetadata()}};var qM=class extends Lg{getType(){return"class"}getTypePlural(){return"classes"}getParents(){return kt.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return kt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return kt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return ht(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return ht(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}getSubsets(){return ht(this.properties.in_subset)||[]}};var UM=class extends Lg{getType(){return"property"}getParents(){return kt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return kt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return kt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return ht(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return ht(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return ht(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return ht(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return kt.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};var GM=class extends Lg{getType(){return"individual"}getParents(){return kt.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return kt.fromJson([])}getDifferentFrom(){return ht(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return ht(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 JM=class extends hx{getType(){return"ontology"}getTypePlural(){return"ontologies"}getOntologyId(){return this.properties.ontologyId}getName(){let t=kt.fromJson(this.properties.config.title||"");return t[0]&&t[0].value||this.getOntologyId()}getDescription(){let t=kt.fromJson(this.properties.config.description||"");return t[0]&&t[0].value||""}getCreators(){return ht(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?ht(Object.keys(this.properties.config.annotations)):[]}getAnnotationTitleById(t){return yE(t)}getAnnotationById(t){return kt.fromJson(ht(this.properties.config.annotations[t]).filter(r=>typeof r!="string"||r!==""))}getPreferredRoots(){return ht(this.properties.hasPreferredRoot)}getLanguages(){return ht(this.properties.lang)}getImportsFrom(){return[]}getExportsTo(){return ht(this.properties.exportsTo)}getAllowDownload(){return this.properties.config.allowDownload}};var XM=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 mx=class{properties;constructor(t){this.properties=t}getLabel(){return kt.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(ZM(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 ht(this.properties["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"])}getName(){return this.getNames()[0]}getNames(){let t=kt.fromJson(this.properties.label);return t&&t.length>0?t.map(r=>r.value):[this.getIri()]}getDescription(){let t=kt.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&&kt.fromJson(r[t]?.label)[0]?.value||t}getAnnotationById(t){return kt.fromJson(ht(this.properties[t]))}getAnnotationTitleById(t){return this.getLabelForIri(t)}getLinkedEntities(){return new fx(this.properties.linkedEntities||{})}getDepictionUrl(){return this.properties["http://xmlns.com/foaf/0.1/depiction"]?this.properties["http://xmlns.com/foaf/0.1/depiction"]:""}};var Ng=class extends mx{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 kt.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(kt.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 kt.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return kt.fromJson(this.properties.definition)}hasDirectChildren(){return this.properties.hasDirectChildren}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren}hasChildren(){return this.hasDirectChildren()||this.hasHierarchicalChildren()}getAncestorIris(){return ht(this.properties.ancestor)}getHierarchicalAncestorIris(){return ht(this.properties.hierarchicalAncestor)}getSynonyms(){return kt.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 kt.fromJson([...ht(this.properties["http://xmlns.com/foaf/0.1/depicted_by"]||[]),...ht(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=ht(this.properties.definitionProperty),r=ht(this.properties.synonymProperty),n=ht(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=kt.fromJson(this.properties.hierarchicalParent);for(let n of r)if(n.value===t)return n.getMetadata()}};var KM=class extends Ng{getParents(){return kt.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return kt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return kt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return ht(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return ht(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}getSubsets(){return ht(this.properties["http://www.geneontology.org/formats/oboInOwl#inSubset"])||[]}};var YM=class extends Ng{getParents(){return kt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return kt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return kt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return ht(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return ht(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return ht(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return ht(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return kt.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};var QM=class extends Ng{getParents(){return kt.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return kt.fromJson([])}getDifferentFrom(){return ht(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return ht(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 eA=class extends mx{getOntologyId(){return this.properties.ontologyId}getName(){let t=kt.fromJson(this.properties.label||this.properties.title||"");return t[0]&&t[0].value||this.getOntologyId()}getDescription(){let t=kt.fromJson(this.properties.definition||this.properties.description||"");return t[0]&&t[0].value||""}getCreators(){return ht(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||void 0}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 ht(this.properties.hasPreferredRoot)}getLanguages(){return ht(this.properties.language)}getImportsFrom(){return ht(this.properties.importsFrom)}getExportsTo(){return ht(this.properties.exportsTo)}getAllowDownload(){return this.properties.allowDownload}};function ip(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=Qq(e.elements[0].type)}if(r===void 0)throw Error("Entity type could not be correctly inferred.");return eVe(e,r,t)}function eVe(e,t,r){switch(t){case"ontology":return r?new JM(e):new eA(e);case"term":case"class":return r?new qM(q5(ht(e._embedded.terms),r)):new KM(q5(ht(e.elements),r));case"property":return r?new UM(q5(ht(e._embedded.properties),r)):new YM(q5(ht(e.elements),r));case"individual":return r?new GM(q5(ht(e._embedded.individuals),r)):new QM(q5(ht(e.elements),r));default:throw Error('Invalid entity type "'+t+'". Must be one of {"term", "class", "ontology", "property", "individual"}')}}function q5(e,t,r){if(r){let o=ht(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=ht(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 Ih=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)}},tVe=!1,rVe=!0,Eh=class{parentChildRelations;entitiesData;allChildrenPresent;roots;api;ontologyId;includeObsoleteEntities=tVe;entityType;keepExpansionStates=rVe;useLegacy;mainEntityIri;constructor(t){let{parentChildRelations:r,entitiesData:n,allChildrenPresent:o,roots:i,includeObsoleteEntities:c,keepExpansionStates:d,api:h,mainEntityIri:v,entityType:w,ontologyId:_,useLegacy:I}=t;this.parentChildRelations=r,this.entitiesData=n,this.allChildrenPresent=o,this.roots=i,c!=null&&(this.includeObsoleteEntities=c),d!=null&&(this.keepExpansionStates=d),this.api=h,this.mainEntityIri=v,this.entityType=w,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 d=c+1;d(c.label||c.iri).localeCompare(d.label||d.iri)),i=[];for(let c of o){this.entitiesData.set(c.iri,c);let d=c.parents.filter(h=>h.value==t.entityData.iri);i.push({childIri:c.iri,childRelationToParent:d.length>0&&d[0].getMetadata()?d[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 eU=class{properties;constructor(t){this.properties=t}getTotalSearchResults(){return this.properties.length}};var tU=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 rU=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 nU(e){return e==="http://www.w3.org/2002/07/owl#Thing"||e==="http://www.w3.org/2002/07/owl#TopObjectProperty"}var nVe=10,Jr=class e{axiosInstance;constructor(t){this.axiosInstance=$5.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*nVe).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=iu(n)?"":"v2/",i=(await this.axiosInstance.get(o+t,r)).data;return this.check_for_errors(i)}getOntologies=async(t,r,n,o)=>this.makeCall("ontologies",{params:this.buildParamsForGet(t,r,n,o)},!0);async getOntologiesData(t){let r,n=[],o=0,i=500;do{if(r=await this.getOntologies({size:i.toString(),page:o.toString()},void 0,void 0,t),!r||!r._embedded||!r._embedded.ontologies)throw new Error("Ontologies data not found");n=n.concat(r._embedded.ontologies.map(c=>ip(c))),o+=1}while(o{let c=iu(i)?"terms":"classes";return this.makeCall(c,{params:this.buildParamsForGet(t,r,n)},iu(i))};getProperties=async(t,r,n,o,i)=>this.makeCall("properties",{params:this.buildParamsForGet(t,r,n)},iu(i));getIndividuals=async(t,r,n,o,i)=>this.makeCall("individuals",{params:this.buildParamsForGet(t,r,n)},iu(i));getOntology=async(t,r,n,o,i)=>{let c={...this.buildOtherParams(o)};return this.makeCall("ontologies/"+n?.ontologyId,c,iu(i))};getEntity=async(t,r,n,o,i)=>{let c=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",d={iri:n?.termIri,...this.buildOtherParams(o)};return this.makeCall(c+"entities",{params:d},iu(i))};getTerm=async(t,r,n,o,i,c)=>{let d=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",h=iu(i)?"terms":"classes",v={iri:n?.termIri,...this.buildOtherParams(o)};return this.makeCall(d+h,{params:v,signal:c},iu(i))};getProperty=async(t,r,n,o,i,c)=>{let d=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",h={iri:n?.propertyIri,...this.buildOtherParams(o)};return this.makeCall(d+"properties",{params:h,signal:c},iu(i))};getIndividual=async(t,r,n,o,i,c)=>{let d=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",h={iri:n?.individualIri,...this.buildOtherParams(o)};return this.makeCall(d+"individuals",{params:h,signal:c},iu(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,d=[],h=0;if(i)if(c=await this.searchTs4nfdiGateway(t,r,n,o,i),c)d=d.concat(c.map(v=>new rU(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");d=d.concat(c.response.docs.map(v=>new tU(v)))}return new eU(d)}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):iu(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 ip(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 ip(o)}async getThingObject(t,r,n,o,i){if(r)if($M(r)){if(n)return await this.getOntologyObject(n,o,i);throw new Error(`ontologyId has to be provided if thingType in {"${Gq.join('", "')}"}.`)}else if(vre(r)){if(t)return await this.getEntityObject(t,r,n,o,i);throw new Error(`iri has to be provided if thingType in {"${VM.join('", "')}"}.`)}else throw new Error(`Unsupported thingType "${r}" provided. Must be in {"${hre.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 {${VM.map(c=>`"${c}"`).join(", ")}}.`)}}async getEntityWithInferredEntityType(t,r,n){let o=new AbortController,i=o.signal,c;function d(h){h._embedded!==void 0&&(c=h,o.abort())}if(await Promise.allSettled([this.getTerm(void 0,void 0,{ontologyId:r,termIri:t},n,!0,i).then(h=>{d(h)}),this.getProperty(void 0,void 0,{ontologyId:r,propertyIri:t},n,!0,i).then(h=>{d(h)}),this.getIndividual(void 0,void 0,{ontologyId:r,individualIri:t},n,!0,i).then(h=>{d(h)})]),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(vE(r)?c=await this.makeCall(`${Sh(n,r,t,o)}/hierarchicalAncestors`,{params:{size:"1000",includeObsoleteEntities:i}},o):c=await this.makeCall(`${Sh(n,r,t,o)}/ancestors`,{params:{size:"1000",includeObsoleteEntities:i}},o),o){let d=[],h="";switch(r){case"class":h="terms";break;case"property":h="properties";break;case"individual":h="individuals";break;default:throw Error("Entity type could not be correctly inferred.")}return c._embedded[h].map(v=>{d.push(ip({_embedded:{[h]:[v]}}))}),d}return c.elements.map(d=>ip({elements:[d]}))}async getJSTree(t,r,n){return await this.makeCall(`${Sh(n,r,t,!0)}/jstree`,{params:{size:"1000"}},!0)}async getChildren(t,r,n,o=!1,i=!1){let c;return vE(r)?c=await this.makeCall(`${Sh(n,Dg[0],t,i)}/hierarchicalChildren`,{params:{size:"1000",includeObsoleteEntities:o}},i):Ad(r)?i?c=await this.makeCall(`${Sh(n,Dg[0],t,i)}/descendants`,{params:{size:"1000"}},i):c=await this.makeCall(`${Sh(n,Dg[0],t,i)}/instances`,{params:{size:"1000",includeObsoleteEntities:o}},i):c=await this.makeCall(`${Sh(n,r,t,i)}/children`,{params:{size:"1000",includeObsoleteEntities:o}},i),i?c._embedded[Ad(r)?wl(Dg[0],i):wl(r,i)].map(d=>ip({_embedded:{[Ad(r)?wl(Dg[0],i):wl(r)]:[d]}})):c.elements.map(d=>ip({elements:[d]}))}async getRootEntities(t,r,n=!1,o=!1,i=!1){return i?Ad(t)?[]:(await this.makeCall(`${Sh(r,t,void 0,i)}/roots`,{params:{size:"1000",includeObsoleteEntities:o}},i))._embedded[wl(t,i)].map(d=>ip({_embedded:{[wl(t,i)]:[d]}})):Ad(t)?[]:(await this.makeCall(`${Sh(r,t,void 0,i)}`,{params:{size:"1000",includeObsoleteEntities:o,hasDirectParents:n?void 0:"false",isPreferredRoot:n?"true":void 0}},i)).elements.map(d=>ip({elements:[d]}))}async getClassInstances(t,r){return(await this.makeCall(`${Sh(r,Dg[0],t,!1)}/individuals`,{params:{size:"1000"}},!1)).elements.map(o=>ip({elements:[o]}))}async buildHierarchyWithIri(t){let{iri:r,ontologyId:n,entityType:o,preferredRoots:i=!1,includeObsoleteEntities:c=!1,keepExpansionStates:d=!0,showSiblingsOnInit:h=!1,useLegacy:v=!1}=t;if(r)return await this.getEntityObject(r,o,n,"",v).then(w=>this.buildHierarchyWithEntity({entityType:o||w.getType(),ontologyId:n||w.getOntologyId(),includeObsoleteEntities:c,preferredRoots:i,mainEntity:w,keepExpansionStates:d,showSiblingsOnInit:h,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:d,showSiblingsOnInit:h,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:ht(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,d=(await this.getRootEntities(n,r,o,i,c)).map(w=>this.entityToEntityData(w)).filter(w=>!nU(w.iri)),h=new Map,v=new Map;for(let w of d)h.set(w.iri,[]),v.set(w.iri,w);return new Eh({parentChildRelations:h,entitiesData:v,allChildrenPresent:new Set,roots:d.map(w=>new Ih(w)).sort((w,_)=>(w.entityData.label||w.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:d,useLegacy:h}=t,v=[];if(h){let A=await this.getJSTree(r.getIri(),o,n),N=new Map,H=new Map;for(let Y of A)N.set(Y.id,Y.iri),H.set(Y.iri,new Set);for(let Y of A){let ee=H.get(Y.iri),ne=N.get(Y.parent);ee!=null&&ne!=null&&ee.add(ne)}v=[];let q=new Set;for(let Y of A)if(!q.has(Y.iri)){q.add(Y.iri),v.push(this.jsTreeNodeToEntityData(Y));let ee=H.get(Y.iri);ee!=null&&(v[v.length-1].parents=kt.fromJson(Array.from(ee.values()))||[])}}else{let A=await this.getAncestors(r.getIri(),o,n||r.getOntologyId(),c);v=[this.entityToEntityData(r),...A.map(N=>this.entityToEntityData(N))]}v=v.filter(A=>!nU(A.iri));let w=new Map,_=new Set,I=new Map;for(let A of v)w.set(A.iri,[]),I.set(A.iri,A);if(d){let A=o||r.getType(),N=A=="individual"?"class":A,H=[];for(let q of v)q.iri!=r.getIri()&&H.push(new Promise(Y=>this.getChildren(q.iri,N,n,c,h).then(ee=>ee.map(ne=>this.entityToEntityData(ne))).then(ee=>{let ne=[];for(let te of ee){I.set(te.iri,te);let de=te.parents.filter(fe=>fe.value==q.iri);ne.push({childIri:te.iri,childRelationToParent:de.length>0&&de[0].getMetadata()?de[0].getMetadata().childRelationToParent:void 0})}w.set(q.iri,ne),_.add(q.iri)}).then(Y)));if(await Promise.allSettled(H),A=="individual")for(let q of r.getParents()){let Y=(await this.getChildren(q.value,A,n,c)).map(ne=>this.entityToEntityData(ne)),ee=[];for(let ne of Y)ee.push({childIri:ne.iri,childRelationToParent:"http://www.w3.org/1999/02/22-rdf-syntax-ns#type"});w.set(q.value,ee)}}else for(let A of v){let N=A.parents.filter(H=>!nU(H.value));if(A.iri==r?.getIri()&&Ad(o||r.getType()))for(let H of N)w.has(H.value)&&w.get(H.value)?.push({childIri:A.iri,childRelationToParent:"http://www.w3.org/1999/02/22-rdf-syntax-ns#type"});else for(let H of N)w.has(H.value)&&w.get(H.value)?.push({childIri:A.iri,childRelationToParent:H.getMetadata()?H.getMetadata().childRelationToParent:void 0})}for(let A of w.values())A.sort((N,H)=>(I.get(N.childIri)?.label||N.childIri).localeCompare(I.get(H.childIri)?.label||H.childIri));let R=[];if(i){let A=(await this.getOntologyObject(n,void 0,h)).getPreferredRoots();for(let N of A)I.has(N)&&R.push(N)}else for(let A of v)A.parents.filter(H=>!nU(H.value)).length==0&&R.push(A.iri);function D(A,N,H){N.add(A.iri);let q=new Ih(A);q.childRelationToParent=H;let Y=w.get(A.iri)||[];for(let ee of Y){if(N.has(ee.childIri)){console.error(`Cyclic tree at entity "${ee.childIri}".`);continue}let ne=I.get(ee.childIri);ne!=null&&q.addChild(D(ne,N,ee.childRelationToParent))}return q.loadedChildren.length>0&&(q.expanded=!0),N.delete(A.iri),q}let F=new Set;return new Eh({parentChildRelations:w,entitiesData:I,allChildrenPresent:_,roots:R.map(A=>D(I.get(A),F)).sort((A,N)=>(A.entityData.label||A.entityData.iri).localeCompare(N.entityData.label||N.entityData.iri)),api:new e(this.axiosInstance.getUri()),ontologyId:n,includeObsoleteEntities:c,entityType:o,mainEntityIri:r?.getIri(),keepExpansionStates:t.keepExpansionStates,useLegacy:h})}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 kx=T(z()),f9=T(it());var g8e=T(z()),QG=T(it()),y8e=T(At());var cn={};J(cn,{ALT:()=>dVe,ARROW_DOWN:()=>vVe,ARROW_LEFT:()=>yVe,ARROW_RIGHT:()=>bVe,ARROW_UP:()=>gVe,BACKSPACE:()=>cVe,CTRL:()=>hVe,END:()=>xVe,ENTER:()=>aVe,ESCAPE:()=>lVe,F2:()=>pVe,HOME:()=>_Ve,META:()=>mVe,PAGE_DOWN:()=>OVe,PAGE_UP:()=>wVe,SHIFT:()=>fVe,SPACE:()=>sVe,TAB:()=>uVe,keys:()=>SVe});var aVe="Enter",sVe=" ",lVe="Escape",uVe="Tab",cVe="Backspace",pVe="F2",dVe="Alt",fVe="Shift",hVe="Control",mVe="Meta",vVe="ArrowDown",gVe="ArrowUp",yVe="ArrowLeft",bVe="ArrowRight",wVe="PageUp",OVe="PageDown",xVe="End",_Ve="Home",SVe=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 wE=T(z());var iU,IVe=new Uint8Array(16);function yre(){if(!iU&&(iU=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!iU))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return iU(IVe)}var V5e=/^(?:[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 EVe(e){return typeof e=="string"&&V5e.test(e)}var $5e=EVe;var Hs=[];for(aU=0;aU<256;++aU)Hs.push((aU+256).toString(16).substr(1));var aU;function PVe(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=(Hs[e[t+0]]+Hs[e[t+1]]+Hs[e[t+2]]+Hs[e[t+3]]+"-"+Hs[e[t+4]]+Hs[e[t+5]]+"-"+Hs[e[t+6]]+Hs[e[t+7]]+"-"+Hs[e[t+8]]+Hs[e[t+9]]+"-"+Hs[e[t+10]]+Hs[e[t+11]]+Hs[e[t+12]]+Hs[e[t+13]]+Hs[e[t+14]]+Hs[e[t+15]]).toLowerCase();if(!$5e(r))throw TypeError("Stringified UUID is invalid");return r}var Z5e=PVe;var q5e,bre,wre=0,Ore=0;function kVe(e,t,r){var n=t&&r||0,o=t||new Array(16);e=e||{};var i=e.node||q5e,c=e.clockseq!==void 0?e.clockseq:bre;if(i==null||c==null){var d=e.random||(e.rng||yre)();i==null&&(i=q5e=[d[0]|1,d[1],d[2],d[3],d[4],d[5]]),c==null&&(c=bre=(d[6]<<8|d[7])&16383)}var h=e.msecs!==void 0?e.msecs:Date.now(),v=e.nsecs!==void 0?e.nsecs:Ore+1,w=h-wre+(v-Ore)/1e4;if(w<0&&e.clockseq===void 0&&(c=c+1&16383),(w<0||h>wre)&&e.nsecs===void 0&&(v=0),v>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");wre=h,Ore=v,bre=c,h+=122192928e5;var _=((h&268435455)*1e4+v)%4294967296;o[n++]=_>>>24&255,o[n++]=_>>>16&255,o[n++]=_>>>8&255,o[n++]=_&255;var I=h/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||Z5e(o)}var sU=kVe;function fn(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=sU();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:sU()).concat(o)}}var jVe=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=t.prefix,n=t.suffix,o=t.conditionalId;return(0,wE.useMemo)(function(){return o||fn(r)(n)},[o,r,n])},TVe=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,d=wE.default.useId();return(0,wE.useMemo)(function(){return c||"".concat(n).concat(d).concat(i)},[d,c,n,i])},Ph="useId"in wE.default?TVe:jVe;var lc="left",xre="right";var q0=T(z());function Ol(e){return Object.keys(e)}var n3=T(z());var TE=T(z());var Dd={light:"LIGHT",dark:"DARK"},U5e="INVERSE";function G5e(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 _re(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&arguments[1]!==void 0?arguments[1]:[];NVe(this,e),this.computer=t,this.dependencies=r}return FVe(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,d;return this.computer((c=(d=Fg(o,this.dependencies))!==null&&d!==void 0?d:Fg(n,this.dependencies,i))!==null&&c!==void 0?c:Fg(r,this.dependencies,i))}return this.computer(this.dependencies.map(function(h){var v,w;return(v=(w=Fg(o,h))!==null&&w!==void 0?w:Fg(n,h,i))!==null&&v!==void 0?v:Fg(r,h,i)}))}}])}();function Xr(e,t){return new tA(e,t)}var rA=function(t,r,n){var o={themeName:t.key};function i(c,d){var h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,v=arguments.length>3?arguments[3]:void 0;Object.keys(c).forEach(function(w){var _=v?"".concat(v,".").concat(w):"".concat(w);if([].concat(MVe(Object.values(Dd)),[n]).includes(w)){if(w!==n)return;var I=new RegExp("(\\.".concat(n,"\\b)|(\\b").concat(n,"\\.)"));_=_.replace(I,"")}var R=h&&Fg(o,_);if(!R||vx(R)){var D=c[w]instanceof tA?c[w].getValue(c.root,d.root,o,n):c[w],F=d[w]instanceof tA?d[w].getValue(c.root,d.root,o,n):d[w];vx(D)&&!Array.isArray(D)?i(D,F??{},h,_):WVe(o,_,F??D)}})}return i(t,r),i(r,{},!0),o},nA=function(t,r){var n={getPrototypeOf:function(c){return Reflect.getPrototypeOf(c.model)},setPrototypeOf:function(c,d){return Reflect.setPrototypeOf(c.model,d)},isExtensible:function(c){return Reflect.isExtensible(c)},preventExtensions:function(c){return Reflect.preventExtensions(c.model)},getOwnPropertyDescriptor:function(c,d){return Reflect.getOwnPropertyDescriptor(c.model,d)},defineProperty:function(c,d,h){return Reflect.defineProperty(c.model,d,h)},has:function(c,d){return Reflect.has(c.model,d)},get:function(c,d){if(d==="key")return c[d];if(d==="__proto__")return{};var h=d==="root"?c:c.model||c,v=h[d];return vx(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},Ere=function e(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=_re({},t);return!vx(n)||!vx(r)?r:(Object.keys(r).forEach(function(o){var i=n[o],c=r[o];vx(i)&&vx(c)?n[o]=e(_re({},i),_re({},c)):n[o]=c}),n)};function HVe(e,t){return qVe(e)||ZVe(e,t)||$Ve(e,t)||VVe()}function VVe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +`):" "+P5e(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:lre};function ure(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new H0(null,e)}function qq(e){return ure(e),e.headers=Wa.from(e.headers),e.data=FM.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Zq.getAdapter(e.adapter||dE.adapter)(e).then(function(n){return ure(e),n.data=FM.call(e,e.transformResponse,n),n.headers=Wa.from(n.headers),n},function(n){return BM(n)||(ure(e),n&&n.response&&(n.response.data=FM.call(e,e.transformResponse,n.response),n.response.headers=Wa.from(n.response.headers))),Promise.reject(n)})}var Uq="1.7.8";var Gq={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Gq[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});var k5e={};Gq.transitional=function(t,r,n){function o(i,c){return"[Axios v"+Uq+"] Transitional option '"+i+"'"+c+(n?". "+n:"")}return(i,c,d)=>{if(t===!1)throw new Tr(o(c," has been removed"+(r?" in "+r:"")),Tr.ERR_DEPRECATED);return r&&!k5e[c]&&(k5e[c]=!0,console.warn(o(c," has been deprecated since v"+r+" and will be removed in the near future"))),t?t(i,c,d):!0}};Gq.spelling=function(t){return(r,n)=>(console.warn(`${n} is likely a misspelling of ${t}`),!0)};function YHe(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 d=e[i],h=d===void 0||c(d,i,e);if(h!==!0)throw new Tr("option "+i+" must be "+h,Tr.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new Tr("Unknown option "+i,Tr.ERR_BAD_OPTION)}}var HM={assertOptions:YHe,validators:Gq};var V0=HM.validators,mE=class{constructor(t){this.defaults=t,this.interceptors={request:new Gte,response:new Gte}}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=xh(this.defaults,r);let{transitional:n,paramsSerializer:o,headers:i}=r;n!==void 0&&HM.assertOptions(n,{silentJSONParsing:V0.transitional(V0.boolean),forcedJSONParsing:V0.transitional(V0.boolean),clarifyTimeoutError:V0.transitional(V0.boolean)},!1),o!=null&&(De.isFunction(o)?r.paramsSerializer={serialize:o}:HM.assertOptions(o,{encode:V0.function,serialize:V0.function},!0)),HM.assertOptions(r,{baseUrl:V0.spelling("baseURL"),withXsrfToken:V0.spelling("withXSRFToken")},!0),r.method=(r.method||this.defaults.method||"get").toLowerCase();let c=i&&De.merge(i.common,i[r.method]);i&&De.forEach(["delete","get","head","post","put","patch","common"],D=>{delete i[D]}),r.headers=Wa.concat(c,i);let d=[],h=!0;this.interceptors.request.forEach(function(F){typeof F.runWhen=="function"&&F.runWhen(r)===!1||(h=h&&F.synchronous,d.unshift(F.fulfilled,F.rejected))});let v=[];this.interceptors.response.forEach(function(F){v.push(F.fulfilled,F.rejected)});let w,_=0,I;if(!h){let D=[qq.bind(this),void 0];for(D.unshift.apply(D,d),D.push.apply(D,v),I=D.length,w=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(d=>{n.subscribe(d),i=d}).then(o);return c.cancel=function(){n.unsubscribe(i)},c},t(function(i,c,d){n.reason||(n.reason=new H0(i,c,d),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}}},j5e=cre;function pre(e){return function(r){return e.apply(null,r)}}function dre(e){return De.isObject(e)&&e.isAxiosError===!0}var fre={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(fre).forEach(([e,t])=>{fre[t]=e});var T5e=fre;function C5e(e){let t=new VM(e),r=AM(VM.prototype.request,t);return De.extend(r,VM.prototype,t,{allOwnKeys:!0}),De.extend(r,t,null,{allOwnKeys:!0}),r.create=function(o){return C5e(xh(e,o))},r}var fa=C5e(dE);fa.Axios=VM;fa.CanceledError=H0;fa.CancelToken=j5e;fa.isCancel=BM;fa.VERSION=Uq;fa.toFormData=V5;fa.AxiosError=Tr;fa.Cancel=fa.CanceledError;fa.all=function(t){return Promise.all(t)};fa.spread=pre;fa.isAxiosError=dre;fa.mergeConfig=xh;fa.AxiosHeaders=Wa;fa.formToJSON=e=>zq(De.isHTMLForm(e)?new FormData(e):e);fa.getAdapter=Zq.getAdapter;fa.HttpStatusCode=T5e;fa.default=fa;var $5=fa;var{Axios:kcr,AxiosError:jcr,CanceledError:Tcr,isCancel:Ccr,CancelToken:Mcr,VERSION:Acr,all:Rcr,Cancel:Dcr,isAxiosError:Lcr,spread:Ncr,toFormData:Fcr,AxiosHeaders:Bcr,HttpStatusCode:zcr,formToJSON:Wcr,getAdapter:Hcr,mergeConfig:Vcr}=$5;var Lg=["class","term"],M5e=["property","annotationProperty","dataProperty","objectProperty"],A5e=["individual"],Jq=["ontology"],$M=[...Lg,...A5e,...M5e],hre=[...$M,...Jq];function vE(e){return Lg.includes(e)}function mre(e){return M5e.includes(e)}function Ad(e){return A5e.includes(e)}function ZM(e){return Jq.includes(e)}function vre(e){return $M.includes(e)}function qM(e){return hre.includes(e)}function dx(e){return vE(e.getType())}function Z5(e){return mre(e.getType())}function gE(e){return Ad(e.getType())}function Rd(e){return vre(e.getType())}function R5e(e){return ZM(e.getType())}function mt(e){return Array.isArray(e)?e:e?[e]:[]}var QHe=!0;function iu(e){return e!==void 0?e:QHe}function Xq(e){return e==="term"?"class":e}function _h(e){return e.charAt(0).toUpperCase()+e.slice(1)}function yE(e){return _h(e).split(/(?=[A-Z][a-z])/).join(" ")}function bE(e){return _h(e).replace("_"," ")}function Sh(e,t,r,n){return`ontologies/${e}/${wl(mt(t),n)}`+(r!=null?`/${encodeURIComponent(encodeURIComponent(r))}`:"")}function wl(e,t){for(let r of mt(e))if(qM(r)){if(vE(r))return iu(t)?"terms":"classes";if(mre(r))return"properties";if(Ad(r))return"individuals";if(ZM(r))return"ontologies"}throw new Error("No thingType found to pluralize in provided typeArray.")}function Kq(e,t){for(let r of mt(e))switch(r){case"terms":case"classes":return iu(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 Yq(e){return/^#[0-9A-F]{6}$/i.test(e)}function Qq(e){return/^(rgb|hsl)(a?)[(]\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*(?:,\s*([\d.]+)\s*)?[)]$/i.test(e)}function gre(e){return["primary","subdued","success","accent","danger","warning","text","ghost"].includes(e)}function D5e(e){return["text","accent","primary","success","warning","danger"].includes(e)}function Lo(e,t="information"){return e.message==="Response contains 0 elements"?"No elements found":`No ${t} available`}function eU(e){let t=e.filter(r=>qM(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 kt=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 fx=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=kt.fromJson(r.label);if(n&&n.length>0)return n[0].value}}get(t){return this.linkedEntities[t]}};var hx=class{properties;constructor(t){this.properties=t}getLabel(){return this.properties.label}getId(){return this.properties.id}getIri(){return this.properties.iri}getTypePlural(){return wl(this.getType())}getRdfTypes(){return[]}getName(){return this.getNames()[0]}getNames(){let t=kt.fromJson(this.properties.label);return t&&t.length>0?t.map(r=>r.value):[this.getIri()]}getDescription(){let t=kt.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&&kt.fromJson(r[t]?.label)[0]?.value||t}getLinkedEntities(){return new fx(this.properties.linkedEntities||{})}getDepictionUrl(){return this.properties.annotation&&this.properties.annotation.depiction?this.properties.annotation.depiction[0]:""}};var Ng=class extends hx{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 kt.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(kt.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 kt.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return kt.fromJson(this.properties.description)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.properties.has_children}getAncestorIris(){return mt(this.properties.ancestor)}getHierarchicalAncestorIris(){return mt(this.properties.hierarchicalAncestor)}getSynonyms(){return kt.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 kt.fromJson([...mt(this.properties["http://xmlns.com/foaf/0.1/depicted_by"]||[]),...mt(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 mt(Object.keys(this.properties.annotation))}getAnnotationTitleById(t){return bE(t)}getAnnotationById(t){return kt.fromJson(mt(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=kt.fromJson(this.properties.hierarchicalParent);for(let n of r)if(n.value===t)return n.getMetadata()}};var UM=class extends Ng{getType(){return"class"}getTypePlural(){return"classes"}getParents(){return kt.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return kt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return kt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return mt(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return mt(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}getSubsets(){return mt(this.properties.in_subset)||[]}};var GM=class extends Ng{getType(){return"property"}getParents(){return kt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return kt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return kt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return mt(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return mt(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return mt(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return mt(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return kt.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};var JM=class extends Ng{getType(){return"individual"}getParents(){return kt.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return kt.fromJson([])}getDifferentFrom(){return mt(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return mt(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 XM=class extends hx{getType(){return"ontology"}getTypePlural(){return"ontologies"}getOntologyId(){return this.properties.ontologyId}getName(){let t=kt.fromJson(this.properties.config.title||"");return t[0]&&t[0].value||this.getOntologyId()}getDescription(){let t=kt.fromJson(this.properties.config.description||"");return t[0]&&t[0].value||""}getCreators(){return mt(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?mt(Object.keys(this.properties.config.annotations)):[]}getAnnotationTitleById(t){return yE(t)}getAnnotationById(t){return kt.fromJson(mt(this.properties.config.annotations[t]).filter(r=>typeof r!="string"||r!==""))}getPreferredRoots(){return mt(this.properties.hasPreferredRoot)}getLanguages(){return mt(this.properties.lang)}getImportsFrom(){return[]}getExportsTo(){return mt(this.properties.exportsTo)}getAllowDownload(){return this.properties.config.allowDownload}};var KM=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 mx=class{properties;constructor(t){this.properties=t}getLabel(){return kt.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(qM(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 mt(this.properties["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"])}getName(){return this.getNames()[0]}getNames(){let t=kt.fromJson(this.properties.label);return t&&t.length>0?t.map(r=>r.value):[this.getIri()]}getDescription(){let t=kt.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&&kt.fromJson(r[t]?.label)[0]?.value||t}getAnnotationById(t){return kt.fromJson(mt(this.properties[t]))}getAnnotationTitleById(t){return this.getLabelForIri(t)}getLinkedEntities(){return new fx(this.properties.linkedEntities||{})}getDepictionUrl(){return this.properties["http://xmlns.com/foaf/0.1/depiction"]?this.properties["http://xmlns.com/foaf/0.1/depiction"]:""}};var Fg=class extends mx{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 kt.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(kt.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 kt.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return kt.fromJson(this.properties.definition)}hasDirectChildren(){return this.properties.hasDirectChildren}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren}hasChildren(){return this.hasDirectChildren()||this.hasHierarchicalChildren()}getAncestorIris(){return mt(this.properties.ancestor)}getHierarchicalAncestorIris(){return mt(this.properties.hierarchicalAncestor)}getSynonyms(){return kt.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 kt.fromJson([...mt(this.properties["http://xmlns.com/foaf/0.1/depicted_by"]||[]),...mt(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=mt(this.properties.definitionProperty),r=mt(this.properties.synonymProperty),n=mt(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=kt.fromJson(this.properties.hierarchicalParent);for(let n of r)if(n.value===t)return n.getMetadata()}};var YM=class extends Fg{getParents(){return kt.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return kt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return kt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return mt(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return mt(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}getSubsets(){return mt(this.properties["http://www.geneontology.org/formats/oboInOwl#inSubset"])||[]}};var QM=class extends Fg{getParents(){return kt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return kt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return kt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return mt(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return mt(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return mt(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return mt(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return kt.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};var eA=class extends Fg{getParents(){return kt.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return kt.fromJson([])}getDifferentFrom(){return mt(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return mt(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 tA=class extends mx{getOntologyId(){return this.properties.ontologyId}getName(){let t=kt.fromJson(this.properties.label||this.properties.title||"");return t[0]&&t[0].value||this.getOntologyId()}getDescription(){let t=kt.fromJson(this.properties.definition||this.properties.description||"");return t[0]&&t[0].value||""}getCreators(){return mt(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||void 0}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 mt(this.properties.hasPreferredRoot)}getLanguages(){return mt(this.properties.language)}getImportsFrom(){return mt(this.properties.importsFrom)}getExportsTo(){return mt(this.properties.exportsTo)}getAllowDownload(){return this.properties.allowDownload}};function ip(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=eU(e.elements[0].type)}if(r===void 0)throw Error("Entity type could not be correctly inferred.");return eVe(e,r,t)}function eVe(e,t,r){switch(t){case"ontology":return r?new XM(e):new tA(e);case"term":case"class":return r?new UM(q5(mt(e._embedded.terms),r)):new YM(q5(mt(e.elements),r));case"property":return r?new GM(q5(mt(e._embedded.properties),r)):new QM(q5(mt(e.elements),r));case"individual":return r?new JM(q5(mt(e._embedded.individuals),r)):new eA(q5(mt(e.elements),r));default:throw Error('Invalid entity type "'+t+'". Must be one of {"term", "class", "ontology", "property", "individual"}')}}function q5(e,t,r){if(r){let o=mt(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=mt(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 Ih=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)}},tVe=!1,rVe=!0,Eh=class{parentChildRelations;entitiesData;allChildrenPresent;roots;api;ontologyId;includeObsoleteEntities=tVe;entityType;keepExpansionStates=rVe;useLegacy;mainEntityIri;constructor(t){let{parentChildRelations:r,entitiesData:n,allChildrenPresent:o,roots:i,includeObsoleteEntities:c,keepExpansionStates:d,api:h,mainEntityIri:v,entityType:w,ontologyId:_,useLegacy:I}=t;this.parentChildRelations=r,this.entitiesData=n,this.allChildrenPresent=o,this.roots=i,c!=null&&(this.includeObsoleteEntities=c),d!=null&&(this.keepExpansionStates=d),this.api=h,this.mainEntityIri=v,this.entityType=w,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 d=c+1;d(c.label||c.iri).localeCompare(d.label||d.iri)),i=[];for(let c of o)if(this.entitiesData.set(c.iri,c),c.parents){let d=c.parents.filter(h=>h.value==t.entityData.iri);i.push({childIri:c.iri,childRelationToParent:d.length>0&&d[0].getMetadata()?d[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 tU=class{properties;constructor(t){this.properties=t}getTotalSearchResults(){return this.properties.length}};var rU=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 nU=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 oU(e){return e==="http://www.w3.org/2002/07/owl#Thing"||e==="http://www.w3.org/2002/07/owl#TopObjectProperty"}var nVe=10,Jr=class e{axiosInstance;constructor(t){this.axiosInstance=$5.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*nVe).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=iu(n)?"":"v2/",i=(await this.axiosInstance.get(o+t,r)).data;return this.check_for_errors(i)}getOntologies=async(t,r,n,o)=>this.makeCall("ontologies",{params:this.buildParamsForGet(t,r,n,o)},!0);async getOntologiesData(t){let r,n=[],o=0,i=500;do{if(r=await this.getOntologies({size:i.toString(),page:o.toString()},void 0,void 0,t),!r||!r._embedded||!r._embedded.ontologies)throw new Error("Ontologies data not found");n=n.concat(r._embedded.ontologies.map(c=>ip(c))),o+=1}while(o{let c=iu(i)?"terms":"classes";return this.makeCall(c,{params:this.buildParamsForGet(t,r,n)},iu(i))};getProperties=async(t,r,n,o,i)=>this.makeCall("properties",{params:this.buildParamsForGet(t,r,n)},iu(i));getIndividuals=async(t,r,n,o,i)=>this.makeCall("individuals",{params:this.buildParamsForGet(t,r,n)},iu(i));getOntology=async(t,r,n,o,i)=>{let c={...this.buildOtherParams(o)};return this.makeCall("ontologies/"+n?.ontologyId,c,iu(i))};getEntity=async(t,r,n,o,i)=>{let c=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",d={iri:n?.termIri,...this.buildOtherParams(o)};return this.makeCall(c+"entities",{params:d},iu(i))};getTerm=async(t,r,n,o,i,c)=>{let d=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",h=iu(i)?"terms":"classes",v={iri:n?.termIri,...this.buildOtherParams(o)};return this.makeCall(d+h,{params:v,signal:c},iu(i))};getProperty=async(t,r,n,o,i,c)=>{let d=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",h={iri:n?.propertyIri,...this.buildOtherParams(o)};return this.makeCall(d+"properties",{params:h,signal:c},iu(i))};getIndividual=async(t,r,n,o,i,c)=>{let d=n?.ontologyId?"ontologies/"+n?.ontologyId+"/":"",h={iri:n?.individualIri,...this.buildOtherParams(o)};return this.makeCall(d+"individuals",{params:h,signal:c},iu(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,d=[],h=0;if(i)if(c=await this.searchTs4nfdiGateway(t,r,n,o,i),c)d=d.concat(c.map(v=>new nU(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");d=d.concat(c.response.docs.map(v=>new rU(v)))}return new tU(d)}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):iu(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 ip(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 ip(o)}async getThingObject(t,r,n,o,i){if(r)if(ZM(r)){if(n)return await this.getOntologyObject(n,o,i);throw new Error(`ontologyId has to be provided if thingType in {"${Jq.join('", "')}"}.`)}else if(vre(r)){if(t)return await this.getEntityObject(t,r,n,o,i);throw new Error(`iri has to be provided if thingType in {"${$M.join('", "')}"}.`)}else throw new Error(`Unsupported thingType "${r}" provided. Must be in {"${hre.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 {${$M.map(c=>`"${c}"`).join(", ")}}.`)}}async getEntityWithInferredEntityType(t,r,n){let o=new AbortController,i=o.signal,c;function d(h){h._embedded!==void 0&&(c=h,o.abort())}if(await Promise.allSettled([this.getTerm(void 0,void 0,{ontologyId:r,termIri:t},n,!0,i).then(h=>{d(h)}),this.getProperty(void 0,void 0,{ontologyId:r,propertyIri:t},n,!0,i).then(h=>{d(h)}),this.getIndividual(void 0,void 0,{ontologyId:r,individualIri:t},n,!0,i).then(h=>{d(h)})]),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(vE(r)?c=await this.makeCall(`${Sh(n,r,t,o)}/hierarchicalAncestors`,{params:{size:"1000",includeObsoleteEntities:i}},o):c=await this.makeCall(`${Sh(n,r,t,o)}/ancestors`,{params:{size:"1000",includeObsoleteEntities:i}},o),o){let d=[],h="";switch(r){case"class":h="terms";break;case"term":h="terms";break;case"property":h="properties";break;case"individual":h="individuals";break;default:throw Error("Entity type could not be correctly inferred.")}return c._embedded[h].map(v=>{d.push(ip({_embedded:{[h]:[v]}}))}),d}return c.elements.map(d=>ip({elements:[d]}))}async getJSTree(t,r,n){return await this.makeCall(`${Sh(n,r,t,!0)}/jstree`,{params:{size:"1000"}},!0)}async getChildren(t,r,n,o=!1,i=!1){let c;return vE(r)?c=await this.makeCall(`${Sh(n,Lg[0],t,i)}/hierarchicalChildren`,{params:{size:"1000",includeObsoleteEntities:o}},i):Ad(r)?i?c=await this.makeCall(`${Sh(n,Lg[0],t,i)}/descendants`,{params:{size:"1000"}},i):c=await this.makeCall(`${Sh(n,Lg[0],t,i)}/instances`,{params:{size:"1000",includeObsoleteEntities:o}},i):c=await this.makeCall(`${Sh(n,r,t,i)}/children`,{params:{size:"1000",includeObsoleteEntities:o}},i),i?c._embedded[Ad(r)?wl(Lg[0],i):wl(r,i)].map(d=>ip({_embedded:{[Ad(r)?wl(Lg[0],i):wl(r)]:[d]}})):c.elements.map(d=>ip({elements:[d]}))}async getRootEntities(t,r,n=!1,o=!1,i=!1){return i?Ad(t)?[]:(await this.makeCall(`${Sh(r,t,void 0,i)}/roots`,{params:{size:"1000",includeObsoleteEntities:o}},i))._embedded[wl(t,i)].map(d=>ip({_embedded:{[wl(t,i)]:[d]}})):Ad(t)?[]:(await this.makeCall(`${Sh(r,t,void 0,i)}`,{params:{size:"1000",includeObsoleteEntities:o,hasDirectParents:n?void 0:"false",isPreferredRoot:n?"true":void 0}},i)).elements.map(d=>ip({elements:[d]}))}async getClassInstances(t,r){return(await this.makeCall(`${Sh(r,Lg[0],t,!1)}/individuals`,{params:{size:"1000"}},!1)).elements.map(o=>ip({elements:[o]}))}async buildHierarchyWithIri(t){let{iri:r,ontologyId:n,entityType:o,preferredRoots:i=!1,includeObsoleteEntities:c=!1,keepExpansionStates:d=!0,showSiblingsOnInit:h=!1,useLegacy:v=!1}=t;if(r)return await this.getEntityObject(r,o,n,"",v).then(w=>this.buildHierarchyWithEntity({entityType:o||w.getType(),ontologyId:n||w.getOntologyId(),includeObsoleteEntities:c,preferredRoots:i,mainEntity:w,keepExpansionStates:d,showSiblingsOnInit:h,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:d,showSiblingsOnInit:h,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:mt(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,d=(await this.getRootEntities(n,r,o,i,c)).map(w=>this.entityToEntityData(w)).filter(w=>!oU(w.iri)),h=new Map,v=new Map;for(let w of d)h.set(w.iri,[]),v.set(w.iri,w);return new Eh({parentChildRelations:h,entitiesData:v,allChildrenPresent:new Set,roots:d.map(w=>new Ih(w)).sort((w,_)=>(w.entityData.label||w.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:d,useLegacy:h}=t,v=[];if(h){let A=await this.getJSTree(r.getIri(),o,n),N=new Map,H=new Map;for(let Y of A)N.set(Y.id,Y.iri),H.set(Y.iri,new Set);for(let Y of A){let ee=H.get(Y.iri),ne=N.get(Y.parent);ee!=null&&ne!=null&&ee.add(ne)}v=[];let q=new Set;for(let Y of A)if(!q.has(Y.iri)){q.add(Y.iri),v.push(this.jsTreeNodeToEntityData(Y));let ee=H.get(Y.iri);ee!=null&&(v[v.length-1].parents=kt.fromJson(Array.from(ee.values()))||[])}}else{let A=await this.getAncestors(r.getIri(),o,n||r.getOntologyId(),c);v=[this.entityToEntityData(r),...A.map(N=>this.entityToEntityData(N))]}v=v.filter(A=>!oU(A.iri));let w=new Map,_=new Set,I=new Map;for(let A of v)w.set(A.iri,[]),I.set(A.iri,A);if(d){let A=o||r.getType(),N=A=="individual"?"class":A,H=[];for(let q of v)q.iri!=r.getIri()&&H.push(new Promise(Y=>this.getChildren(q.iri,N,n,c,h).then(ee=>ee.map(ne=>this.entityToEntityData(ne))).then(ee=>{let ne=[];for(let te of ee)if(I.set(te.iri,te),te.parents){let de=te.parents.filter(fe=>fe.value==q.iri);ne.push({childIri:te.iri,childRelationToParent:de.length>0&&de[0].getMetadata()?de[0].getMetadata().childRelationToParent:void 0})}w.set(q.iri,ne),_.add(q.iri)}).then(Y)));if(await Promise.allSettled(H),A=="individual")for(let q of r.getParents()){let Y=(await this.getChildren(q.value,A,n,c)).map(ne=>this.entityToEntityData(ne)),ee=[];for(let ne of Y)ee.push({childIri:ne.iri,childRelationToParent:"http://www.w3.org/1999/02/22-rdf-syntax-ns#type"});w.set(q.value,ee)}}else for(let A of v)if(A.parents){let N=A.parents.filter(H=>!oU(H.value));if(A.iri==r?.getIri()&&Ad(o||r.getType()))for(let H of N)w.has(H.value)&&w.get(H.value)?.push({childIri:A.iri,childRelationToParent:"http://www.w3.org/1999/02/22-rdf-syntax-ns#type"});else for(let H of N)w.has(H.value)&&w.get(H.value)?.push({childIri:A.iri,childRelationToParent:H.getMetadata()?H.getMetadata().childRelationToParent:void 0})}for(let A of w.values())A.sort((N,H)=>(I.get(N.childIri)?.label||N.childIri).localeCompare(I.get(H.childIri)?.label||H.childIri));let R=[];if(i){let A=(await this.getOntologyObject(n,void 0,h)).getPreferredRoots();for(let N of A)I.has(N)&&R.push(N)}else for(let A of v)A.parents&&A.parents.filter(H=>!oU(H.value)).length==0&&R.push(A.iri);function D(A,N,H){N.add(A.iri);let q=new Ih(A);q.childRelationToParent=H;let Y=w.get(A.iri)||[];for(let ee of Y){if(N.has(ee.childIri)){console.error(`Cyclic tree at entity "${ee.childIri}".`);continue}let ne=I.get(ee.childIri);ne!=null&&q.addChild(D(ne,N,ee.childRelationToParent))}return q.loadedChildren.length>0&&(q.expanded=!0),N.delete(A.iri),q}let F=new Set;return new Eh({parentChildRelations:w,entitiesData:I,allChildrenPresent:_,roots:R.map(A=>D(I.get(A),F)).sort((A,N)=>(A.entityData.label||A.entityData.iri).localeCompare(N.entityData.label||N.entityData.iri)),api:new e(this.axiosInstance.getUri()),ontologyId:n,includeObsoleteEntities:c,entityType:o,mainEntityIri:r?.getIri(),keepExpansionStates:t.keepExpansionStates,useLegacy:h})}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 kx=T(z()),f9=T(it());var g8e=T(z()),eJ=T(it()),y8e=T(At());var cn={};J(cn,{ALT:()=>dVe,ARROW_DOWN:()=>vVe,ARROW_LEFT:()=>yVe,ARROW_RIGHT:()=>bVe,ARROW_UP:()=>gVe,BACKSPACE:()=>cVe,CTRL:()=>hVe,END:()=>xVe,ENTER:()=>aVe,ESCAPE:()=>lVe,F2:()=>pVe,HOME:()=>_Ve,META:()=>mVe,PAGE_DOWN:()=>OVe,PAGE_UP:()=>wVe,SHIFT:()=>fVe,SPACE:()=>sVe,TAB:()=>uVe,keys:()=>SVe});var aVe="Enter",sVe=" ",lVe="Escape",uVe="Tab",cVe="Backspace",pVe="F2",dVe="Alt",fVe="Shift",hVe="Control",mVe="Meta",vVe="ArrowDown",gVe="ArrowUp",yVe="ArrowLeft",bVe="ArrowRight",wVe="PageUp",OVe="PageDown",xVe="End",_Ve="Home",SVe=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 wE=T(z());var aU,IVe=new Uint8Array(16);function yre(){if(!aU&&(aU=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!aU))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return aU(IVe)}var V5e=/^(?:[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 EVe(e){return typeof e=="string"&&V5e.test(e)}var $5e=EVe;var Hs=[];for(sU=0;sU<256;++sU)Hs.push((sU+256).toString(16).substr(1));var sU;function PVe(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=(Hs[e[t+0]]+Hs[e[t+1]]+Hs[e[t+2]]+Hs[e[t+3]]+"-"+Hs[e[t+4]]+Hs[e[t+5]]+"-"+Hs[e[t+6]]+Hs[e[t+7]]+"-"+Hs[e[t+8]]+Hs[e[t+9]]+"-"+Hs[e[t+10]]+Hs[e[t+11]]+Hs[e[t+12]]+Hs[e[t+13]]+Hs[e[t+14]]+Hs[e[t+15]]).toLowerCase();if(!$5e(r))throw TypeError("Stringified UUID is invalid");return r}var Z5e=PVe;var q5e,bre,wre=0,Ore=0;function kVe(e,t,r){var n=t&&r||0,o=t||new Array(16);e=e||{};var i=e.node||q5e,c=e.clockseq!==void 0?e.clockseq:bre;if(i==null||c==null){var d=e.random||(e.rng||yre)();i==null&&(i=q5e=[d[0]|1,d[1],d[2],d[3],d[4],d[5]]),c==null&&(c=bre=(d[6]<<8|d[7])&16383)}var h=e.msecs!==void 0?e.msecs:Date.now(),v=e.nsecs!==void 0?e.nsecs:Ore+1,w=h-wre+(v-Ore)/1e4;if(w<0&&e.clockseq===void 0&&(c=c+1&16383),(w<0||h>wre)&&e.nsecs===void 0&&(v=0),v>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");wre=h,Ore=v,bre=c,h+=122192928e5;var _=((h&268435455)*1e4+v)%4294967296;o[n++]=_>>>24&255,o[n++]=_>>>16&255,o[n++]=_>>>8&255,o[n++]=_&255;var I=h/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||Z5e(o)}var lU=kVe;function fn(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=lU();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:lU()).concat(o)}}var jVe=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=t.prefix,n=t.suffix,o=t.conditionalId;return(0,wE.useMemo)(function(){return o||fn(r)(n)},[o,r,n])},TVe=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,d=wE.default.useId();return(0,wE.useMemo)(function(){return c||"".concat(n).concat(d).concat(i)},[d,c,n,i])},Ph="useId"in wE.default?TVe:jVe;var lc="left",xre="right";var U0=T(z());function Ol(e){return Object.keys(e)}var n3=T(z());var TE=T(z());var Dd={light:"LIGHT",dark:"DARK"},U5e="INVERSE";function G5e(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 _re(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&arguments[1]!==void 0?arguments[1]:[];NVe(this,e),this.computer=t,this.dependencies=r}return FVe(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,d;return this.computer((c=(d=Bg(o,this.dependencies))!==null&&d!==void 0?d:Bg(n,this.dependencies,i))!==null&&c!==void 0?c:Bg(r,this.dependencies,i))}return this.computer(this.dependencies.map(function(h){var v,w;return(v=(w=Bg(o,h))!==null&&w!==void 0?w:Bg(n,h,i))!==null&&v!==void 0?v:Bg(r,h,i)}))}}])}();function Xr(e,t){return new rA(e,t)}var nA=function(t,r,n){var o={themeName:t.key};function i(c,d){var h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,v=arguments.length>3?arguments[3]:void 0;Object.keys(c).forEach(function(w){var _=v?"".concat(v,".").concat(w):"".concat(w);if([].concat(MVe(Object.values(Dd)),[n]).includes(w)){if(w!==n)return;var I=new RegExp("(\\.".concat(n,"\\b)|(\\b").concat(n,"\\.)"));_=_.replace(I,"")}var R=h&&Bg(o,_);if(!R||vx(R)){var D=c[w]instanceof rA?c[w].getValue(c.root,d.root,o,n):c[w],F=d[w]instanceof rA?d[w].getValue(c.root,d.root,o,n):d[w];vx(D)&&!Array.isArray(D)?i(D,F??{},h,_):WVe(o,_,F??D)}})}return i(t,r),i(r,{},!0),o},oA=function(t,r){var n={getPrototypeOf:function(c){return Reflect.getPrototypeOf(c.model)},setPrototypeOf:function(c,d){return Reflect.setPrototypeOf(c.model,d)},isExtensible:function(c){return Reflect.isExtensible(c)},preventExtensions:function(c){return Reflect.preventExtensions(c.model)},getOwnPropertyDescriptor:function(c,d){return Reflect.getOwnPropertyDescriptor(c.model,d)},defineProperty:function(c,d,h){return Reflect.defineProperty(c.model,d,h)},has:function(c,d){return Reflect.has(c.model,d)},get:function(c,d){if(d==="key")return c[d];if(d==="__proto__")return{};var h=d==="root"?c:c.model||c,v=h[d];return vx(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},Ere=function e(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=_re({},t);return!vx(n)||!vx(r)?r:(Object.keys(r).forEach(function(o){var i=n[o],c=r[o];vx(i)&&vx(c)?n[o]=e(_re({},i),_re({},c)):n[o]=c}),n)};function HVe(e,t){return qVe(e)||ZVe(e,t)||$Ve(e,t)||VVe()}function VVe(){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 $Ve(e,t){if(e){if(typeof e=="string")return K5e(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)?K5e(e,t):void 0}}function K5e(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);r_E(SE(t,e),r);var gx=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]=V0(e[t],0,255)):t===3&&(e[t]=V0(e[t],0,1));return e};var Q5e={};for(let e of["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"])Q5e[`[object ${e}]`]=e.toLowerCase();function Jt(e){return Q5e[Object.prototype.toString.call(e)]||"object"}var jt=(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 Bg=e=>{if(e.length<2)return null;let t=e.length-1;return Jt(e[t])=="string"?e[t].toLowerCase():null};var{PI:cU,min:_E,max:SE}=Math,Ld=cU*2,pU=cU/3,e3e=cU/180,t3e=180/cU;var Qt={format:{},autodetect:[]};var kre=class{constructor(...t){let r=this;if(Jt(t[0])==="object"&&t[0].constructor&&t[0].constructor===this.constructor)return t[0];let n=Bg(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=gx(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(",")}]`}},$e=kre;var r3e="2.6.0";var dU=(...e)=>new dU.Color(...e);dU.Color=$e;dU.version=r3e;var lr=dU;var YVe=(...e)=>{e=jt(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]},n3e=YVe;var{max:o3e}=Math,QVe=(...e)=>{let[t,r,n]=jt(e,"rgb");t=t/255,r=r/255,n=n/255;let o=1-o3e(t,o3e(r,n)),i=o<1?1/(1-o):0,c=(1-t-o)*i,d=(1-r-o)*i,h=(1-n-o)*i;return[c,d,h,o]},i3e=QVe;$e.prototype.cmyk=function(){return i3e(this._rgb)};lr.cmyk=(...e)=>new $e(...e,"cmyk");Qt.format.cmyk=n3e;Qt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"cmyk"),Jt(e)==="array"&&e.length===4)return"cmyk"}});var jre=e=>Math.round(e*100)/100,e$e=(...e)=>{let t=jt(e,"hsla"),r=Bg(e)||"lsa";return t[0]=jre(t[0]||0),t[1]=jre(t[1]*100)+"%",t[2]=jre(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(",")})`},a3e=e$e;var t$e=(...e)=>{e=jt(e,"rgba");let[t,r,n]=e;t/=255,r/=255,n/=255;let o=_E(t,r,n),i=SE(t,r,n),c=(i+o)/2,d,h;return i===o?(d=0,h=Number.NaN):d=c<.5?(i-o)/(i+o):(i-o)/(2-i-o),t==i?h=(r-n)/(i-o):r==i?h=2+(n-t)/(i-o):n==i&&(h=4+(t-r)/(i-o)),h*=60,h<0&&(h+=360),e.length>3&&e[3]!==void 0?[h,d,c,e[3]]:[h,d,c]},fU=t$e;var{round:Tre}=Math,r$e=(...e)=>{let t=jt(e,"rgba"),r=Bg(e)||"rgb";return r.substr(0,3)=="hsl"?a3e(fU(t),r):(t[0]=Tre(t[0]),t[1]=Tre(t[1]),t[2]=Tre(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(",")})`)},s3e=r$e;var{round:Cre}=Math,n$e=(...e)=>{e=jt(e,"hsl");let[t,r,n]=e,o,i,c;if(r===0)o=i=c=n*255;else{let d=[0,0,0],h=[0,0,0],v=n<.5?n*(1+r):n+r-n*r,w=2*n-v,_=t/360;d[0]=_+1/3,d[1]=_,d[2]=_-1/3;for(let I=0;I<3;I++)d[I]<0&&(d[I]+=1),d[I]>1&&(d[I]-=1),6*d[I]<1?h[I]=w+(v-w)*6*d[I]:2*d[I]<1?h[I]=v:3*d[I]<2?h[I]=w+(v-w)*(2/3-d[I])*6:h[I]=w;[o,i,c]=[Cre(h[0]*255),Cre(h[1]*255),Cre(h[2]*255)]}return e.length>3?[o,i,c,e[3]]:[o,i,c,1]},oA=n$e;var u3e=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,c3e=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,p3e=/^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+)\)$/,f3e=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,h3e=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,{round:l3e}=Math,m3e=e=>{e=e.toLowerCase().trim();let t;if(Qt.format.named)try{return Qt.format.named(e)}catch{}if(t=e.match(u3e)){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(c3e)){let r=t.slice(1,5);for(let n=0;n<4;n++)r[n]=+r[n];return r}if(t=e.match(p3e)){let r=t.slice(1,4);for(let n=0;n<3;n++)r[n]=l3e(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]=l3e(r[n]*2.55);return r[3]=+r[3],r}if(t=e.match(f3e)){let r=t.slice(1,4);r[1]*=.01,r[2]*=.01;let n=oA(r);return n[3]=1,n}if(t=e.match(h3e)){let r=t.slice(1,4);r[1]*=.01,r[2]*=.01;let n=oA(r);return n[3]=+t[4],n}};m3e.test=e=>u3e.test(e)||c3e.test(e)||p3e.test(e)||d3e.test(e)||f3e.test(e)||h3e.test(e);var Mre=m3e;$e.prototype.css=function(e){return s3e(this._rgb,e)};lr.css=(...e)=>new $e(...e,"css");Qt.format.css=Mre;Qt.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&Jt(e)==="string"&&Mre.test(e))return"css"}});Qt.format.gl=(...e)=>{let t=jt(e,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t};lr.gl=(...e)=>new $e(...e,"gl");$e.prototype.gl=function(){let e=this._rgb;return[e[0]/255,e[1]/255,e[2]/255,e[3]]};var{floor:o$e}=Math,i$e=(...e)=>{e=jt(e,"hcg");let[t,r,n]=e,o,i,c;n=n*255;let d=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 h=o$e(t),v=t-h,w=n*(1-r),_=w+d*(1-v),I=w+d*v,R=w+d;switch(h){case 0:[o,i,c]=[R,I,w];break;case 1:[o,i,c]=[_,R,w];break;case 2:[o,i,c]=[w,R,I];break;case 3:[o,i,c]=[w,_,R];break;case 4:[o,i,c]=[I,w,R];break;case 5:[o,i,c]=[R,w,_];break}}return[o,i,c,e.length>3?e[3]:1]},v3e=i$e;var a$e=(...e)=>{let[t,r,n]=jt(e,"rgb"),o=_E(t,r,n),i=SE(t,r,n),c=i-o,d=c*100/255,h=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,d,h]},g3e=a$e;$e.prototype.hcg=function(){return g3e(this._rgb)};lr.hcg=(...e)=>new $e(...e,"hcg");Qt.format.hcg=v3e;Qt.autodetect.push({p:1,test:(...e)=>{if(e=jt(e,"hcg"),Jt(e)==="array"&&e.length===3)return"hcg"}});var s$e=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,l$e=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,u$e=e=>{if(e.match(s$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(l$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}`)},hU=u$e;var{round:mU}=Math,c$e=(...e)=>{let[t,r,n,o]=jt(e,"rgba"),i=Bg(e)||"auto";o===void 0&&(o=1),i==="auto"&&(i=o<1?"rgba":"rgb"),t=mU(t),r=mU(r),n=mU(n);let d="000000"+(t<<16|r<<8|n).toString(16);d=d.substr(d.length-6);let h="0"+mU(o*255).toString(16);switch(h=h.substr(h.length-2),i.toLowerCase()){case"rgba":return`#${d}${h}`;case"argb":return`#${h}${d}`;default:return`#${d}`}},vU=c$e;$e.prototype.hex=function(e){return vU(this._rgb,e)};lr.hex=(...e)=>new $e(...e,"hex");Qt.format.hex=hU;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:IE}=Math,p$e=(...e)=>{e=jt(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*IE(Ld*t)/IE(pU-Ld*t))/3,i=1-(c+o)):t<2/3?(t-=1/3,o=(1-r)/3,i=(1+r*IE(Ld*t)/IE(pU-Ld*t))/3,c=1-(o+i)):(t-=2/3,i=(1-r)/3,c=(1+r*IE(Ld*t)/IE(pU-Ld*t))/3,o=1-(i+c)),o=V0(n*o*3),i=V0(n*i*3),c=V0(n*c*3),[o*255,i*255,c*255,e.length>3?e[3]:1]},y3e=p$e;var{min:d$e,sqrt:f$e,acos:h$e}=Math,m$e=(...e)=>{let[t,r,n]=jt(e,"rgb");t/=255,r/=255,n/=255;let o,i=d$e(t,r,n),c=(t+r+n)/3,d=c>0?1-i/c:0;return d===0?o=NaN:(o=(t-r+(t-n))/2,o/=f$e((t-r)*(t-r)+(t-n)*(r-n)),o=h$e(o),n>r&&(o=Ld-o),o/=Ld),[o*360,d,c]},b3e=m$e;$e.prototype.hsi=function(){return b3e(this._rgb)};lr.hsi=(...e)=>new $e(...e,"hsi");Qt.format.hsi=y3e;Qt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"hsi"),Jt(e)==="array"&&e.length===3)return"hsi"}});$e.prototype.hsl=function(){return fU(this._rgb)};lr.hsl=(...e)=>new $e(...e,"hsl");Qt.format.hsl=oA;Qt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"hsl"),Jt(e)==="array"&&e.length===3)return"hsl"}});var{floor:v$e}=Math,g$e=(...e)=>{e=jt(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 d=v$e(t),h=t-d,v=n*(1-r),w=n*(1-r*h),_=n*(1-r*(1-h));switch(d){case 0:[o,i,c]=[n,_,v];break;case 1:[o,i,c]=[w,n,v];break;case 2:[o,i,c]=[v,n,_];break;case 3:[o,i,c]=[v,w,n];break;case 4:[o,i,c]=[_,v,n];break;case 5:[o,i,c]=[n,v,w];break}}return[o,i,c,e.length>3?e[3]:1]},w3e=g$e;var{min:y$e,max:b$e}=Math,w$e=(...e)=>{e=jt(e,"rgb");let[t,r,n]=e,o=y$e(t,r,n),i=b$e(t,r,n),c=i-o,d,h,v;return v=i/255,i===0?(d=Number.NaN,h=0):(h=c/i,t===i&&(d=(r-n)/c),r===i&&(d=2+(n-t)/c),n===i&&(d=4+(t-r)/c),d*=60,d<0&&(d+=360)),[d,h,v]},O3e=w$e;$e.prototype.hsv=function(){return O3e(this._rgb)};lr.hsv=(...e)=>new $e(...e,"hsv");Qt.format.hsv=w3e;Qt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"hsv"),Jt(e)==="array"&&e.length===3)return"hsv"}});var ls={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452};var{pow:O$e}=Math,x$e=(...e)=>{e=jt(e,"lab");let[t,r,n]=e,o,i,c,d,h,v;return i=(t+16)/116,o=isNaN(r)?i:i+r/500,c=isNaN(n)?i:i-n/200,i=ls.Yn*Rre(i),o=ls.Xn*Rre(o),c=ls.Zn*Rre(c),d=Are(3.2404542*o-1.5371385*i-.4985314*c),h=Are(-.969266*o+1.8760108*i+.041556*c),v=Are(.0556434*o-.2040259*i+1.0572252*c),[d,h,v,e.length>3?e[3]:1]},Are=e=>255*(e<=.00304?12.92*e:1.055*O$e(e,1/2.4)-.055),Rre=e=>e>ls.t1?e*e*e:ls.t2*(e-ls.t0),gU=x$e;var{pow:x3e}=Math,_$e=(...e)=>{let[t,r,n]=jt(e,"rgb"),[o,i,c]=S$e(t,r,n),d=116*i-16;return[d<0?0:d,500*(o-i),200*(i-c)]},Dre=e=>(e/=255)<=.04045?e/12.92:x3e((e+.055)/1.055,2.4),Lre=e=>e>ls.t3?x3e(e,1/3):e/ls.t2+ls.t0,S$e=(e,t,r)=>{e=Dre(e),t=Dre(t),r=Dre(r);let n=Lre((.4124564*e+.3575761*t+.1804375*r)/ls.Xn),o=Lre((.2126729*e+.7151522*t+.072175*r)/ls.Yn),i=Lre((.0193339*e+.119192*t+.9503041*r)/ls.Zn);return[n,o,i]},yU=_$e;$e.prototype.lab=function(){return yU(this._rgb)};lr.lab=(...e)=>new $e(...e,"lab");Qt.format.lab=gU;Qt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"lab"),Jt(e)==="array"&&e.length===3)return"lab"}});var{sin:I$e,cos:E$e}=Math,P$e=(...e)=>{let[t,r,n]=jt(e,"lch");return isNaN(n)&&(n=0),n=n*e3e,[t,E$e(n)*r,I$e(n)*r]},bU=P$e;var k$e=(...e)=>{e=jt(e,"lch");let[t,r,n]=e,[o,i,c]=bU(t,r,n),[d,h,v]=gU(o,i,c);return[d,h,v,e.length>3?e[3]:1]},wU=k$e;var j$e=(...e)=>{let t=jt(e,"hcl").reverse();return wU(...t)},_3e=j$e;var{sqrt:T$e,atan2:C$e,round:M$e}=Math,A$e=(...e)=>{let[t,r,n]=jt(e,"lab"),o=T$e(r*r+n*n),i=(C$e(n,r)*t3e+360)%360;return M$e(o*1e4)===0&&(i=Number.NaN),[t,o,i]},OU=A$e;var R$e=(...e)=>{let[t,r,n]=jt(e,"rgb"),[o,i,c]=yU(t,r,n);return OU(o,i,c)},Nre=R$e;$e.prototype.lch=function(){return Nre(this._rgb)};$e.prototype.hcl=function(){return Nre(this._rgb).reverse()};lr.lch=(...e)=>new $e(...e,"lch");lr.hcl=(...e)=>new $e(...e,"hcl");Qt.format.lch=wU;Qt.format.hcl=_3e;["lch","hcl"].forEach(e=>Qt.autodetect.push({p:2,test:(...t)=>{if(t=jt(t,e),Jt(t)==="array"&&t.length===3)return e}}));var D$e={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"},U5=D$e;$e.prototype.name=function(){let e=vU(this._rgb,"rgb");for(let t of Object.keys(U5))if(U5[t]===e)return t.toLowerCase();return e};Qt.format.named=e=>{if(e=e.toLowerCase(),U5[e])return hU(U5[e]);throw new Error("unknown color name: "+e)};Qt.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&Jt(e)==="string"&&U5[e.toLowerCase()])return"named"}});var L$e=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)},S3e=L$e;var N$e=(...e)=>{let[t,r,n]=jt(e,"rgb");return(t<<16)+(r<<8)+n},I3e=N$e;$e.prototype.num=function(){return I3e(this._rgb)};lr.num=(...e)=>new $e(...e,"num");Qt.format.num=S3e;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:E3e}=Math;$e.prototype.rgb=function(e=!0){return e===!1?this._rgb.slice(0,3):this._rgb.slice(0,3).map(E3e)};$e.prototype.rgba=function(e=!0){return this._rgb.slice(0,4).map((t,r)=>r<3?e===!1?t:E3e(t):t)};lr.rgb=(...e)=>new $e(...e,"rgb");Qt.format.rgb=(...e)=>{let t=jt(e,"rgba");return t[3]===void 0&&(t[3]=1),t};Qt.autodetect.push({p:3,test:(...e)=>{if(e=jt(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:xU}=Math,F$e=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*xU(n),o=t<20?0:-254.76935184120902+.8274096064007395*(o=t-10)+115.67994401066147*xU(o)):(r=351.97690566805693+.114206453784165*(r=t-55)-40.25366309332127*xU(r),n=325.4494125711974+.07943456536662342*(n=t-50)-28.0852963507957*xU(n),o=255),[r,n,o,1]},_U=F$e;var{round:B$e}=Math,z$e=(...e)=>{let t=jt(e,"rgb"),r=t[0],n=t[2],o=1e3,i=4e4,c=.4,d;for(;i-o>c;){d=(i+o)*.5;let h=_U(d);h[2]/h[0]>=n/r?i=d:o=d}return B$e(d)},P3e=z$e;$e.prototype.temp=$e.prototype.kelvin=$e.prototype.temperature=function(){return P3e(this._rgb)};lr.temp=lr.kelvin=lr.temperature=(...e)=>new $e(...e,"temp");Qt.format.temp=Qt.format.kelvin=Qt.format.temperature=_U;var{pow:SU,sign:W$e}=Math,H$e=(...e)=>{e=jt(e,"lab");let[t,r,n]=e,o=SU(t+.3963377774*r+.2158037573*n,3),i=SU(t-.1055613458*r-.0638541728*n,3),c=SU(t-.0894841775*r-1.291485548*n,3);return[255*Fre(4.0767416621*o-3.3077115913*i+.2309699292*c),255*Fre(-1.2684380046*o+2.6097574011*i-.3413193965*c),255*Fre(-.0041960863*o-.7034186147*i+1.707614701*c),e.length>3?e[3]:1]},IU=H$e;function Fre(e){let t=Math.abs(e);return t>.0031308?(W$e(e)||1)*(1.055*SU(t,1/2.4)-.055):e*12.92}var{cbrt:Bre,pow:V$e,sign:$$e}=Math,Z$e=(...e)=>{let[t,r,n]=jt(e,"rgb"),[o,i,c]=[zre(t/255),zre(r/255),zre(n/255)],d=Bre(.4122214708*o+.5363325363*i+.0514459929*c),h=Bre(.2119034982*o+.6806995451*i+.1073969566*c),v=Bre(.0883024619*o+.2817188376*i+.6299787005*c);return[.2104542553*d+.793617785*h-.0040720468*v,1.9779984951*d-2.428592205*h+.4505937099*v,.0259040371*d+.7827717662*h-.808675766*v]},EU=Z$e;function zre(e){let t=Math.abs(e);return t<.04045?e/12.92:($$e(e)||1)*V$e((t+.055)/1.055,2.4)}$e.prototype.oklab=function(){return EU(this._rgb)};lr.oklab=(...e)=>new $e(...e,"oklab");Qt.format.oklab=IU;Qt.autodetect.push({p:3,test:(...e)=>{if(e=jt(e,"oklab"),Jt(e)==="array"&&e.length===3)return"oklab"}});var q$e=(...e)=>{e=jt(e,"lch");let[t,r,n]=e,[o,i,c]=bU(t,r,n),[d,h,v]=IU(o,i,c);return[d,h,v,e.length>3?e[3]:1]},k3e=q$e;var U$e=(...e)=>{let[t,r,n]=jt(e,"rgb"),[o,i,c]=EU(t,r,n);return OU(o,i,c)},j3e=U$e;$e.prototype.oklch=function(){return j3e(this._rgb)};lr.oklch=(...e)=>new $e(...e,"oklch");Qt.format.oklch=k3e;Qt.autodetect.push({p:3,test:(...e)=>{if(e=jt(e,"oklch"),Jt(e)==="array"&&e.length===3)return"oklch"}});$e.prototype.alpha=function(e,t=!1){return e!==void 0&&Jt(e)==="number"?t?(this._rgb[3]=e,this):new $e([this._rgb[0],this._rgb[1],this._rgb[2],e],"rgb"):this._rgb[3]};$e.prototype.clipped=function(){return this._rgb._clipped||!1};$e.prototype.darken=function(e=1){let t=this,r=t.lab();return r[0]-=ls.Kn*e,new $e(r,"lab").alpha(t.alpha(),!0)};$e.prototype.brighten=function(e=1){return this.darken(-e)};$e.prototype.darker=$e.prototype.darken;$e.prototype.brighter=$e.prototype.brighten;$e.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:G$e}=Math,J$e=1e-7,X$e=20;$e.prototype.luminance=function(e,t="rgb"){if(e!==void 0&&Jt(e)==="number"){if(e===0)return new $e([0,0,0,this._rgb[3]],"rgb");if(e===1)return new $e([255,255,255,this._rgb[3]],"rgb");let r=this.luminance(),n=X$e,o=(c,d)=>{let h=c.interpolate(d,.5,t),v=h.luminance();return Math.abs(e-v)e?o(c,h):o(h,d)},i=(r>e?o(new $e([0,0,0]),this):o(this,new $e([255,255,255]))).rgb();return new $e([...i,this._rgb[3]])}return K$e(...this._rgb.slice(0,3))};var K$e=(e,t,r)=>(e=Wre(e),t=Wre(t),r=Wre(r),.2126*e+.7152*t+.0722*r),Wre=e=>(e/=255,e<=.03928?e/12.92:G$e((e+.055)/1.055,2.4));var yo={};var G5=(e,t,r=.5,...n)=>{let o=n[0]||"lrgb";if(!yo[o]&&!n.length&&(o=Object.keys(yo)[0]),!yo[o])throw new Error(`interpolation mode ${o} is not defined`);return Jt(e)!=="object"&&(e=new $e(e)),Jt(t)!=="object"&&(t=new $e(t)),yo[o](e,t,r).alpha(e.alpha()+r*(t.alpha()-e.alpha()))};$e.prototype.mix=$e.prototype.interpolate=function(e,t=.5,...r){return G5(this,e,t,...r)};$e.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 $e([t[0]*r,t[1]*r,t[2]*r,r],"rgb")};$e.prototype.saturate=function(e=1){let t=this,r=t.lch();return r[1]+=ls.Kn*e,r[1]<0&&(r[1]=0),new $e(r,"lch").alpha(t.alpha(),!0)};$e.prototype.desaturate=function(e=1){return this.saturate(-e)};$e.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 d=new $e(i,n);return r?(this._rgb=d._rgb,this):d}throw new Error(`unknown channel ${o} in mode ${n}`)}else return i};$e.prototype.tint=function(e=.5,...t){return G5(this,"white",e,...t)};$e.prototype.shade=function(e=.5,...t){return G5(this,"black",e,...t)};var Y$e=(e,t,r)=>{let n=e._rgb,o=t._rgb;return new $e(n[0]+r*(o[0]-n[0]),n[1]+r*(o[1]-n[1]),n[2]+r*(o[2]-n[2]),"rgb")};yo.rgb=Y$e;var{sqrt:Hre,pow:EE}=Math,Q$e=(e,t,r)=>{let[n,o,i]=e._rgb,[c,d,h]=t._rgb;return new $e(Hre(EE(n,2)*(1-r)+EE(c,2)*r),Hre(EE(o,2)*(1-r)+EE(d,2)*r),Hre(EE(i,2)*(1-r)+EE(h,2)*r),"rgb")};yo.lrgb=Q$e;var eZe=(e,t,r)=>{let n=e.lab(),o=t.lab();return new $e(n[0]+r*(o[0]-n[0]),n[1]+r*(o[1]-n[1]),n[2]+r*(o[2]-n[2]),"lab")};yo.lab=eZe;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,d,h,v,w,_;(n.substr(0,1)==="h"||n==="oklch")&&([c,h,w]=o,[d,v,_]=i);let I,R,D,F;return!isNaN(c)&&!isNaN(d)?(d>c&&d-c>180?F=d-(c+360):d180?F=d+360-c:F=d-c,R=c+r*F):isNaN(c)?isNaN(d)?R=Number.NaN:(R=d,(w==1||w==0)&&n!="hsv"&&(I=v)):(R=c,(_==1||_==0)&&n!="hsv"&&(I=h)),I===void 0&&(I=h+r*(v-h)),D=w+r*(_-w),n==="oklch"?new $e([D,I,R],n):new $e([R,I,D],n)};var T3e=(e,t,r)=>Nd(e,t,r,"lch");yo.lch=T3e;yo.hcl=T3e;var tZe=(e,t,r)=>{let n=e.num(),o=t.num();return new $e(n+r*(o-n),"num")};yo.num=tZe;var rZe=(e,t,r)=>Nd(e,t,r,"hcg");yo.hcg=rZe;var nZe=(e,t,r)=>Nd(e,t,r,"hsi");yo.hsi=nZe;var oZe=(e,t,r)=>Nd(e,t,r,"hsl");yo.hsl=oZe;var iZe=(e,t,r)=>Nd(e,t,r,"hsv");yo.hsv=iZe;var aZe=(e,t,r)=>{let n=e.oklab(),o=t.oklab();return new $e(n[0]+r*(o[0]-n[0]),n[1]+r*(o[1]-n[1]),n[2]+r*(o[2]-n[2]),"oklab")};yo.oklab=aZe;var sZe=(e,t,r)=>Nd(e,t,r,"oklch");yo.oklch=sZe;var{pow:Vre,sqrt:$re,PI:Zre,cos:C3e,sin:M3e,atan2:lZe}=Math,A3e=(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 $e(_)),t==="lrgb")return uZe(e,r);let i=e.shift(),c=i.get(t),d=[],h=0,v=0;for(let _=0;_{let R=_.get(t);w+=_.alpha()*r[I+1];for(let D=0;D=360;)I-=360;c[_]=I}else c[_]=c[_]/d[_];return w/=n,new $e(c,t).alpha(w>.99999?1:w,!0)},uZe=(e,t)=>{let r=e.length,n=[0,0,0,0];for(let o=0;o.9999999&&(n[3]=1),new $e(gx(n))};var{pow:cZe}=Math;function yx(e){let t="rgb",r=lr("#ccc"),n=0,o=[0,1],i=[],c=[0,0],d=!1,h=[],v=!1,w=0,_=1,I=!1,R={},D=!0,F=1,A=function(te){if(te=te||["#fff","#000"],te&&Jt(te)==="string"&&lr.brewer&&lr.brewer[te.toLowerCase()]&&(te=lr.brewer[te.toLowerCase()]),Jt(te)==="array"){te.length===1&&(te=[te[0],te[0]]),te=te.slice(0);for(let de=0;de=d[fe];)fe++;return fe-1}return 0},H=te=>te,q=te=>te,Y=function(te,de){let fe,ye;if(de==null&&(de=!1),isNaN(te)||te===null)return r;de?ye=te:d&&d.length>2?ye=N(te)/(d.length-2):_!==w?ye=(te-w)/(_-w):ye=1,ye=q(ye),de||(ye=H(ye)),F!==1&&(ye=cZe(ye,F)),ye=c[0]+ye*(1-c[0]-c[1]),ye=V0(ye,0,1);let Ie=Math.floor(ye*1e4);if(D&&R[Ie])fe=R[Ie];else{if(Jt(h)==="array")for(let he=0;he=be&&he===i.length-1){fe=h[he];break}if(ye>be&&yeR={};A(e);let ne=function(te){let de=lr(Y(te));return v&&de[v]?de[v]():de};return ne.classes=function(te){if(te!=null){if(Jt(te)==="array")d=te,o=[te[0],te[te.length-1]];else{let de=lr.analyze(o);te===0?d=[de.min,de.max]:d=lr.limits(de,"e",te)}return ne}return d},ne.domain=function(te){if(!arguments.length)return o;w=te[0],_=te[te.length-1],i=[];let de=h.length;if(te.length===de&&w!==_)for(let fe of Array.from(te))i.push((fe-w)/(_-w));else{for(let fe=0;fe2){let fe=te.map((Ie,he)=>he/(te.length-1)),ye=te.map(Ie=>(Ie-w)/(_-w));ye.every((Ie,he)=>fe[he]===Ie)||(q=Ie=>{if(Ie<=0||Ie>=1)return Ie;let he=0;for(;Ie>=ye[he+1];)he++;let be=(Ie-ye[he])/(ye[he+1]-ye[he]);return fe[he]+be*(fe[he+1]-fe[he])})}}return o=[w,_],ne},ne.mode=function(te){return arguments.length?(t=te,ee(),ne):t},ne.range=function(te,de){return A(te,de),ne},ne.out=function(te){return v=te,ne},ne.spread=function(te){return arguments.length?(n=te,ne):n},ne.correctLightness=function(te){return te==null&&(te=!0),I=te,ee(),I?H=function(de){let fe=Y(0,!0).lab()[0],ye=Y(1,!0).lab()[0],Ie=fe>ye,he=Y(de,!0).lab()[0],be=fe+(ye-fe)*de,Se=he-be,Te=0,Pe=1,Ve=20;for(;Math.abs(Se)>.01&&Ve-- >0;)(function(){return Ie&&(Se*=-1),Se<0?(Te=de,de+=(Pe-de)*.5):(Pe=de,de+=(Te-de)*.5),he=Y(de,!0).lab()[0],Se=he-be})();return de}:H=de=>de,ne},ne.padding=function(te){return te!=null?(Jt(te)==="number"&&(te=[te,te]),c=te,ne):c},ne.colors=function(te,de){arguments.length<2&&(de="hex");let fe=[];if(arguments.length===0)fe=h.slice(0);else if(te===1)fe=[ne(.5)];else if(te>1){let ye=o[0],Ie=o[1]-ye;fe=pZe(0,te,!1).map(he=>ne(ye+he/(te-1)*Ie))}else{e=[];let ye=[];if(d&&d.length>2)for(let Ie=1,he=d.length,be=1<=he;be?Iehe;be?Ie++:Ie--)ye.push((d[Ie-1]+d[Ie])*.5);else ye=o;fe=ye.map(Ie=>ne(Ie))}return lr[de]&&(fe=fe.map(ye=>ye[de]())),fe},ne.cache=function(te){return te!=null?(D=te,ne):D},ne.gamma=function(te){return te!=null?(F=te,ne):F},ne.nodata=function(te){return te!=null?(r=lr(te),ne):r},ne}function pZe(e,t,r){let n=[],o=ei;o?c++:c--)n.push(c);return n}var dZe=function(e){let t=[1,1];for(let r=1;rnew $e(i)),e.length===2)[r,n]=e.map(i=>i.lab()),t=function(i){let c=[0,1,2].map(d=>r[d]+i*(n[d]-r[d]));return new $e(c,"lab")};else if(e.length===3)[r,n,o]=e.map(i=>i.lab()),t=function(i){let c=[0,1,2].map(d=>(1-i)*(1-i)*r[d]+2*(1-i)*i*n[d]+i*i*o[d]);return new $e(c,"lab")};else if(e.length===4){let i;[r,n,o,i]=e.map(c=>c.lab()),t=function(c){let d=[0,1,2].map(h=>(1-c)*(1-c)*(1-c)*r[h]+3*(1-c)*(1-c)*c*n[h]+3*(1-c)*c*c*o[h]+c*c*c*i[h]);return new $e(d,"lab")}}else if(e.length>=5){let i,c,d;i=e.map(h=>h.lab()),d=e.length-1,c=dZe(d),t=function(h){let v=1-h,w=[0,1,2].map(_=>i.reduce((I,R,D)=>I+c[D]*v**(d-D)*h**D*R[_],0));return new $e(w,"lab")}}else throw new RangeError("No point in running bezier with only one color.");return t},R3e=e=>{let t=fZe(e);return t.scale=()=>yx(t),t};var kh=(e,t,r)=>{if(!kh[r])throw new Error("unknown blend mode "+r);return kh[r](e,t)},J5=e=>(t,r)=>{let n=lr(r).rgb(),o=lr(t).rgb();return lr.rgb(e(n,o))},X5=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},hZe=e=>e,mZe=(e,t)=>e*t/255,vZe=(e,t)=>e>t?t:e,gZe=(e,t)=>e>t?e:t,yZe=(e,t)=>255*(1-(1-e/255)*(1-t/255)),bZe=(e,t)=>t<128?2*e*t/255:255*(1-2*(1-e/255)*(1-t/255)),wZe=(e,t)=>255*(1-(1-t/255)/(e/255)),OZe=(e,t)=>e===255?255:(e=255*(t/255)/(1-e/255),e>255?255:e);kh.normal=J5(X5(hZe));kh.multiply=J5(X5(mZe));kh.screen=J5(X5(yZe));kh.overlay=J5(X5(bZe));kh.darken=J5(X5(vZe));kh.lighten=J5(X5(gZe));kh.dodge=J5(X5(OZe));kh.burn=J5(X5(wZe));var D3e=kh;var{pow:xZe,sin:_Ze,cos:SZe}=Math;function L3e(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 d=function(h){let v=Ld*((e+120)/360+t*h),w=xZe(o[0]+c*h,n),I=(i!==0?r[0]+h*i:r)*w*(1-w)/2,R=SZe(v),D=_Ze(v),F=w+I*(-.14861*R+1.78277*D),A=w+I*(-.29227*R-.90649*D),N=w+I*(1.97294*R);return lr(gx([F*255,A*255,N*255,1]))};return d.start=function(h){return h==null?e:(e=h,d)},d.rotations=function(h){return h==null?t:(t=h,d)},d.gamma=function(h){return h==null?n:(n=h,d)},d.hue=function(h){return h==null?r:(r=h,Jt(r)==="array"?(i=r[1]-r[0],i===0&&(r=r[1])):i=0,d)},d.lightness=function(h){return h==null?o:(Jt(h)==="array"?(o=h,c=h[1]-h[0]):(o=[h,h],c=0),d)},d.scale=()=>lr.scale(d),d.hue(r),d}var IZe="0123456789abcdef",{floor:EZe,random:PZe}=Math,N3e=()=>{let e="#";for(let t=0;t<6;t++)e+=IZe.charAt(EZe(PZe()*16));return new $e(e,"hex")};var{log:F3e,pow:kZe,floor:jZe,abs:TZe}=Math;function qre(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)=>Ure(r,n,o),r}function Ure(e,t="equal",r=7){Jt(e)=="array"&&(e=qre(e));let{min:n,max:o}=e,i=e.values.sort((d,h)=>d-h);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 d=1;d 0");let d=Math.LOG10E*F3e(n),h=Math.LOG10E*F3e(o);c.push(n);for(let v=1;v200&&(_=!1)}let D={};for(let A=0;AA-N),c.push(F[0]);for(let A=1;A{e=new $e(e),t=new $e(t);let r=e.luminance(),n=t.luminance();return r>n?(r+.05)/(n+.05):(n+.05)/(r+.05)};var{sqrt:zg,pow:ha,min:CZe,max:MZe,atan2:z3e,abs:W3e,cos:PU,sin:H3e,exp:AZe,PI:V3e}=Math;function $3e(e,t,r=1,n=1,o=1){var i=function(Ne){return 360*Ne/(2*V3e)},c=function(Ne){return 2*V3e*Ne/360};e=new $e(e),t=new $e(t);let[d,h,v]=Array.from(e.lab()),[w,_,I]=Array.from(t.lab()),R=(d+w)/2,D=zg(ha(h,2)+ha(v,2)),F=zg(ha(_,2)+ha(I,2)),A=(D+F)/2,N=.5*(1-zg(ha(A,7)/(ha(A,7)+ha(25,7)))),H=h*(1+N),q=_*(1+N),Y=zg(ha(H,2)+ha(v,2)),ee=zg(ha(q,2)+ha(I,2)),ne=(Y+ee)/2,te=i(z3e(v,H)),de=i(z3e(I,q)),fe=te>=0?te:te+360,ye=de>=0?de:de+360,Ie=W3e(fe-ye)>180?(fe+ye+360)/2:(fe+ye)/2,he=1-.17*PU(c(Ie-30))+.24*PU(c(2*Ie))+.32*PU(c(3*Ie+6))-.2*PU(c(4*Ie-63)),be=ye-fe;be=W3e(be)<=180?be:ye<=fe?be+360:be-360,be=2*zg(Y*ee)*H3e(c(be)/2);let Se=w-d,Te=ee-Y,Pe=1+.015*ha(R-50,2)/zg(20+ha(R-50,2)),Ve=1+.045*ne,De=1+.015*ne*he,He=30*AZe(-ha((Ie-275)/25,2)),vt=-(2*zg(ha(ne,7)/(ha(ne,7)+ha(25,7))))*H3e(2*c(He)),Qe=zg(ha(Se/(r*Pe),2)+ha(Te/(n*Ve),2)+ha(be/(o*De),2)+vt*(Te/(n*Ve))*(be/(o*De)));return MZe(0,CZe(100,Qe))}function Z3e(e,t,r="lab"){e=new $e(e),t=new $e(t);let n=e.get(r),o=t.get(r),i=0;for(let c in n){let d=(n[c]||0)-(o[c]||0);i+=d*d}return Math.sqrt(i)}var q3e=(...e)=>{try{return new $e(...e),!0}catch{return!1}};var U3e={cool(){return yx([lr.hsl(180,1,.9),lr.hsl(250,.7,.4)])},hot(){return yx(["#000","#f00","#ff0","#fff"],[0,.25,.75,1]).mode("rgb")}};var kU={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(kU))kU[e.toLowerCase()]=kU[e];var G3e=kU;Object.assign(lr,{average:A3e,bezier:R3e,blend:D3e,cubehelix:L3e,mix:G5,interpolate:G5,random:N3e,scale:yx,analyze:qre,contrast:B3e,deltaE:$3e,distance:Z3e,limits:Ure,valid:q3e,scales:U3e,input:Qt,colors:U5,brewer:G3e});var bo=lr;var J3e="#EBEFF5";function PE(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,d=r?Math.ceil(t/2)+(c?1:0):t,h=r?Math.ceil(t/2)+(c?1:0):0;if(o.length===1&&o.unshift(J3e),r){o.length<3&&(o[2]=o[1],o[1]=J3e);var v=Math.ceil(o.length/2),w=o.filter(function(F,A){if(Ae.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&arguments[0]!==void 0?arguments[0]:{},r=t.rotations,n=r===void 0?1:r,o=t.order,i=o===void 0?"append":o,c=t.direction,d=c===void 0?"lighter":c,h=t.sortBy,v=h===void 0?"default":h,w=t.sortShift,_=w===void 0?"-100":w,I=[],R=["#54B399","#6092C0","#D36086","#9170B8","#CA8EAE","#D6BF57","#B9A888","#DA8B45","#AA6556","#E7664C"];if(v==="natural"&&(R=Gre(R).sort(function(N,H){return bo(N).set("hsl.h",_).hsl()[0]-bo(H).set("hsl.h",_).hsl()[0]})),n>1){var D=R.map(function(N){var H=PE(["black",N,"white"],5,!1,!0);switch(H.pop(),H.shift(),d){case"lighter":return PE([H[1],H[2]],n,!1,!0);case"darker":return PE([H[1],H[0]],n,!1,!0);case"both":return PE(H,n,!1,!0)}});if(i==="group")I=FZe(D);else for(var F=function(H){var q,Y=D.map(function(ee){return ee[H]});(q=I).push.apply(q,Gre(Y))},A=0;A0&&arguments[0]!==void 0?arguments[0]:{},r=Wg(t),n=r.map(function(o){return bo(o).brighten(.5).hex()});return n};var Vgr=Wg()[9],$gr=[Wg()[1],"#6092C0"],Zgr=[Wg()[7],Wg()[9]];var X3e=function(t,r){return Pre(t)?r.hex():r.css()},_n=function(t,r){return bo(t).alpha(r).css()},Rn=function(t,r){var n=bo.mix(t,"#fff",r,"rgb");return X3e(t,n)},No=function(t,r){var n=bo.mix(t,"#000",r,"rgb");return X3e(t,n)},TU=function(t,r,n){return n==="DARK"?No(t,r):Rn(t,r)};var CU=function(t){return bo(t).get("hsl.l")*100},MU=function(t,r){return bo(t).darken(r).hex()};function AU(e){"@babel/helpers - typeof";return AU=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},AU(e)}var RU=4.5,xl=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:4.85;return function(n){var o,i=AU(n)==="object"&&(o=Fg(n,t))!==null&&o!==void 0?o:t,c=AU(n)==="object"?n.colors.body:n;(bo(i).alpha()<1||bo(c).alpha()<1)&&console.warn(`Contrast cannot be accurately calculated when colors have alpha channel opacity. Make sure the provided foreground and background colors have no transparency: +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function JVe(e,t){if(e){if(typeof e=="string")return Y5e(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)?Y5e(e,t):void 0}}function Y5e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r_E(SE(t,e),r);var gx=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]=$0(e[t],0,255)):t===3&&(e[t]=$0(e[t],0,1));return e};var Q5e={};for(let e of["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"])Q5e[`[object ${e}]`]=e.toLowerCase();function Jt(e){return Q5e[Object.prototype.toString.call(e)]||"object"}var jt=(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 zg=e=>{if(e.length<2)return null;let t=e.length-1;return Jt(e[t])=="string"?e[t].toLowerCase():null};var{PI:pU,min:_E,max:SE}=Math,Ld=pU*2,dU=pU/3,e3e=pU/180,t3e=180/pU;var Qt={format:{},autodetect:[]};var kre=class{constructor(...t){let r=this;if(Jt(t[0])==="object"&&t[0].constructor&&t[0].constructor===this.constructor)return t[0];let n=zg(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=gx(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(",")}]`}},$e=kre;var r3e="2.6.0";var fU=(...e)=>new fU.Color(...e);fU.Color=$e;fU.version=r3e;var lr=fU;var YVe=(...e)=>{e=jt(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]},n3e=YVe;var{max:o3e}=Math,QVe=(...e)=>{let[t,r,n]=jt(e,"rgb");t=t/255,r=r/255,n=n/255;let o=1-o3e(t,o3e(r,n)),i=o<1?1/(1-o):0,c=(1-t-o)*i,d=(1-r-o)*i,h=(1-n-o)*i;return[c,d,h,o]},i3e=QVe;$e.prototype.cmyk=function(){return i3e(this._rgb)};lr.cmyk=(...e)=>new $e(...e,"cmyk");Qt.format.cmyk=n3e;Qt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"cmyk"),Jt(e)==="array"&&e.length===4)return"cmyk"}});var jre=e=>Math.round(e*100)/100,e$e=(...e)=>{let t=jt(e,"hsla"),r=zg(e)||"lsa";return t[0]=jre(t[0]||0),t[1]=jre(t[1]*100)+"%",t[2]=jre(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(",")})`},a3e=e$e;var t$e=(...e)=>{e=jt(e,"rgba");let[t,r,n]=e;t/=255,r/=255,n/=255;let o=_E(t,r,n),i=SE(t,r,n),c=(i+o)/2,d,h;return i===o?(d=0,h=Number.NaN):d=c<.5?(i-o)/(i+o):(i-o)/(2-i-o),t==i?h=(r-n)/(i-o):r==i?h=2+(n-t)/(i-o):n==i&&(h=4+(t-r)/(i-o)),h*=60,h<0&&(h+=360),e.length>3&&e[3]!==void 0?[h,d,c,e[3]]:[h,d,c]},hU=t$e;var{round:Tre}=Math,r$e=(...e)=>{let t=jt(e,"rgba"),r=zg(e)||"rgb";return r.substr(0,3)=="hsl"?a3e(hU(t),r):(t[0]=Tre(t[0]),t[1]=Tre(t[1]),t[2]=Tre(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(",")})`)},s3e=r$e;var{round:Cre}=Math,n$e=(...e)=>{e=jt(e,"hsl");let[t,r,n]=e,o,i,c;if(r===0)o=i=c=n*255;else{let d=[0,0,0],h=[0,0,0],v=n<.5?n*(1+r):n+r-n*r,w=2*n-v,_=t/360;d[0]=_+1/3,d[1]=_,d[2]=_-1/3;for(let I=0;I<3;I++)d[I]<0&&(d[I]+=1),d[I]>1&&(d[I]-=1),6*d[I]<1?h[I]=w+(v-w)*6*d[I]:2*d[I]<1?h[I]=v:3*d[I]<2?h[I]=w+(v-w)*(2/3-d[I])*6:h[I]=w;[o,i,c]=[Cre(h[0]*255),Cre(h[1]*255),Cre(h[2]*255)]}return e.length>3?[o,i,c,e[3]]:[o,i,c,1]},iA=n$e;var u3e=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,c3e=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,p3e=/^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+)\)$/,f3e=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,h3e=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,{round:l3e}=Math,m3e=e=>{e=e.toLowerCase().trim();let t;if(Qt.format.named)try{return Qt.format.named(e)}catch{}if(t=e.match(u3e)){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(c3e)){let r=t.slice(1,5);for(let n=0;n<4;n++)r[n]=+r[n];return r}if(t=e.match(p3e)){let r=t.slice(1,4);for(let n=0;n<3;n++)r[n]=l3e(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]=l3e(r[n]*2.55);return r[3]=+r[3],r}if(t=e.match(f3e)){let r=t.slice(1,4);r[1]*=.01,r[2]*=.01;let n=iA(r);return n[3]=1,n}if(t=e.match(h3e)){let r=t.slice(1,4);r[1]*=.01,r[2]*=.01;let n=iA(r);return n[3]=+t[4],n}};m3e.test=e=>u3e.test(e)||c3e.test(e)||p3e.test(e)||d3e.test(e)||f3e.test(e)||h3e.test(e);var Mre=m3e;$e.prototype.css=function(e){return s3e(this._rgb,e)};lr.css=(...e)=>new $e(...e,"css");Qt.format.css=Mre;Qt.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&Jt(e)==="string"&&Mre.test(e))return"css"}});Qt.format.gl=(...e)=>{let t=jt(e,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t};lr.gl=(...e)=>new $e(...e,"gl");$e.prototype.gl=function(){let e=this._rgb;return[e[0]/255,e[1]/255,e[2]/255,e[3]]};var{floor:o$e}=Math,i$e=(...e)=>{e=jt(e,"hcg");let[t,r,n]=e,o,i,c;n=n*255;let d=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 h=o$e(t),v=t-h,w=n*(1-r),_=w+d*(1-v),I=w+d*v,R=w+d;switch(h){case 0:[o,i,c]=[R,I,w];break;case 1:[o,i,c]=[_,R,w];break;case 2:[o,i,c]=[w,R,I];break;case 3:[o,i,c]=[w,_,R];break;case 4:[o,i,c]=[I,w,R];break;case 5:[o,i,c]=[R,w,_];break}}return[o,i,c,e.length>3?e[3]:1]},v3e=i$e;var a$e=(...e)=>{let[t,r,n]=jt(e,"rgb"),o=_E(t,r,n),i=SE(t,r,n),c=i-o,d=c*100/255,h=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,d,h]},g3e=a$e;$e.prototype.hcg=function(){return g3e(this._rgb)};lr.hcg=(...e)=>new $e(...e,"hcg");Qt.format.hcg=v3e;Qt.autodetect.push({p:1,test:(...e)=>{if(e=jt(e,"hcg"),Jt(e)==="array"&&e.length===3)return"hcg"}});var s$e=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,l$e=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,u$e=e=>{if(e.match(s$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(l$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}`)},mU=u$e;var{round:vU}=Math,c$e=(...e)=>{let[t,r,n,o]=jt(e,"rgba"),i=zg(e)||"auto";o===void 0&&(o=1),i==="auto"&&(i=o<1?"rgba":"rgb"),t=vU(t),r=vU(r),n=vU(n);let d="000000"+(t<<16|r<<8|n).toString(16);d=d.substr(d.length-6);let h="0"+vU(o*255).toString(16);switch(h=h.substr(h.length-2),i.toLowerCase()){case"rgba":return`#${d}${h}`;case"argb":return`#${h}${d}`;default:return`#${d}`}},gU=c$e;$e.prototype.hex=function(e){return gU(this._rgb,e)};lr.hex=(...e)=>new $e(...e,"hex");Qt.format.hex=mU;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:IE}=Math,p$e=(...e)=>{e=jt(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*IE(Ld*t)/IE(dU-Ld*t))/3,i=1-(c+o)):t<2/3?(t-=1/3,o=(1-r)/3,i=(1+r*IE(Ld*t)/IE(dU-Ld*t))/3,c=1-(o+i)):(t-=2/3,i=(1-r)/3,c=(1+r*IE(Ld*t)/IE(dU-Ld*t))/3,o=1-(i+c)),o=$0(n*o*3),i=$0(n*i*3),c=$0(n*c*3),[o*255,i*255,c*255,e.length>3?e[3]:1]},y3e=p$e;var{min:d$e,sqrt:f$e,acos:h$e}=Math,m$e=(...e)=>{let[t,r,n]=jt(e,"rgb");t/=255,r/=255,n/=255;let o,i=d$e(t,r,n),c=(t+r+n)/3,d=c>0?1-i/c:0;return d===0?o=NaN:(o=(t-r+(t-n))/2,o/=f$e((t-r)*(t-r)+(t-n)*(r-n)),o=h$e(o),n>r&&(o=Ld-o),o/=Ld),[o*360,d,c]},b3e=m$e;$e.prototype.hsi=function(){return b3e(this._rgb)};lr.hsi=(...e)=>new $e(...e,"hsi");Qt.format.hsi=y3e;Qt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"hsi"),Jt(e)==="array"&&e.length===3)return"hsi"}});$e.prototype.hsl=function(){return hU(this._rgb)};lr.hsl=(...e)=>new $e(...e,"hsl");Qt.format.hsl=iA;Qt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"hsl"),Jt(e)==="array"&&e.length===3)return"hsl"}});var{floor:v$e}=Math,g$e=(...e)=>{e=jt(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 d=v$e(t),h=t-d,v=n*(1-r),w=n*(1-r*h),_=n*(1-r*(1-h));switch(d){case 0:[o,i,c]=[n,_,v];break;case 1:[o,i,c]=[w,n,v];break;case 2:[o,i,c]=[v,n,_];break;case 3:[o,i,c]=[v,w,n];break;case 4:[o,i,c]=[_,v,n];break;case 5:[o,i,c]=[n,v,w];break}}return[o,i,c,e.length>3?e[3]:1]},w3e=g$e;var{min:y$e,max:b$e}=Math,w$e=(...e)=>{e=jt(e,"rgb");let[t,r,n]=e,o=y$e(t,r,n),i=b$e(t,r,n),c=i-o,d,h,v;return v=i/255,i===0?(d=Number.NaN,h=0):(h=c/i,t===i&&(d=(r-n)/c),r===i&&(d=2+(n-t)/c),n===i&&(d=4+(t-r)/c),d*=60,d<0&&(d+=360)),[d,h,v]},O3e=w$e;$e.prototype.hsv=function(){return O3e(this._rgb)};lr.hsv=(...e)=>new $e(...e,"hsv");Qt.format.hsv=w3e;Qt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"hsv"),Jt(e)==="array"&&e.length===3)return"hsv"}});var ls={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452};var{pow:O$e}=Math,x$e=(...e)=>{e=jt(e,"lab");let[t,r,n]=e,o,i,c,d,h,v;return i=(t+16)/116,o=isNaN(r)?i:i+r/500,c=isNaN(n)?i:i-n/200,i=ls.Yn*Rre(i),o=ls.Xn*Rre(o),c=ls.Zn*Rre(c),d=Are(3.2404542*o-1.5371385*i-.4985314*c),h=Are(-.969266*o+1.8760108*i+.041556*c),v=Are(.0556434*o-.2040259*i+1.0572252*c),[d,h,v,e.length>3?e[3]:1]},Are=e=>255*(e<=.00304?12.92*e:1.055*O$e(e,1/2.4)-.055),Rre=e=>e>ls.t1?e*e*e:ls.t2*(e-ls.t0),yU=x$e;var{pow:x3e}=Math,_$e=(...e)=>{let[t,r,n]=jt(e,"rgb"),[o,i,c]=S$e(t,r,n),d=116*i-16;return[d<0?0:d,500*(o-i),200*(i-c)]},Dre=e=>(e/=255)<=.04045?e/12.92:x3e((e+.055)/1.055,2.4),Lre=e=>e>ls.t3?x3e(e,1/3):e/ls.t2+ls.t0,S$e=(e,t,r)=>{e=Dre(e),t=Dre(t),r=Dre(r);let n=Lre((.4124564*e+.3575761*t+.1804375*r)/ls.Xn),o=Lre((.2126729*e+.7151522*t+.072175*r)/ls.Yn),i=Lre((.0193339*e+.119192*t+.9503041*r)/ls.Zn);return[n,o,i]},bU=_$e;$e.prototype.lab=function(){return bU(this._rgb)};lr.lab=(...e)=>new $e(...e,"lab");Qt.format.lab=yU;Qt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"lab"),Jt(e)==="array"&&e.length===3)return"lab"}});var{sin:I$e,cos:E$e}=Math,P$e=(...e)=>{let[t,r,n]=jt(e,"lch");return isNaN(n)&&(n=0),n=n*e3e,[t,E$e(n)*r,I$e(n)*r]},wU=P$e;var k$e=(...e)=>{e=jt(e,"lch");let[t,r,n]=e,[o,i,c]=wU(t,r,n),[d,h,v]=yU(o,i,c);return[d,h,v,e.length>3?e[3]:1]},OU=k$e;var j$e=(...e)=>{let t=jt(e,"hcl").reverse();return OU(...t)},_3e=j$e;var{sqrt:T$e,atan2:C$e,round:M$e}=Math,A$e=(...e)=>{let[t,r,n]=jt(e,"lab"),o=T$e(r*r+n*n),i=(C$e(n,r)*t3e+360)%360;return M$e(o*1e4)===0&&(i=Number.NaN),[t,o,i]},xU=A$e;var R$e=(...e)=>{let[t,r,n]=jt(e,"rgb"),[o,i,c]=bU(t,r,n);return xU(o,i,c)},Nre=R$e;$e.prototype.lch=function(){return Nre(this._rgb)};$e.prototype.hcl=function(){return Nre(this._rgb).reverse()};lr.lch=(...e)=>new $e(...e,"lch");lr.hcl=(...e)=>new $e(...e,"hcl");Qt.format.lch=OU;Qt.format.hcl=_3e;["lch","hcl"].forEach(e=>Qt.autodetect.push({p:2,test:(...t)=>{if(t=jt(t,e),Jt(t)==="array"&&t.length===3)return e}}));var D$e={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"},U5=D$e;$e.prototype.name=function(){let e=gU(this._rgb,"rgb");for(let t of Object.keys(U5))if(U5[t]===e)return t.toLowerCase();return e};Qt.format.named=e=>{if(e=e.toLowerCase(),U5[e])return mU(U5[e]);throw new Error("unknown color name: "+e)};Qt.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&Jt(e)==="string"&&U5[e.toLowerCase()])return"named"}});var L$e=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)},S3e=L$e;var N$e=(...e)=>{let[t,r,n]=jt(e,"rgb");return(t<<16)+(r<<8)+n},I3e=N$e;$e.prototype.num=function(){return I3e(this._rgb)};lr.num=(...e)=>new $e(...e,"num");Qt.format.num=S3e;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:E3e}=Math;$e.prototype.rgb=function(e=!0){return e===!1?this._rgb.slice(0,3):this._rgb.slice(0,3).map(E3e)};$e.prototype.rgba=function(e=!0){return this._rgb.slice(0,4).map((t,r)=>r<3?e===!1?t:E3e(t):t)};lr.rgb=(...e)=>new $e(...e,"rgb");Qt.format.rgb=(...e)=>{let t=jt(e,"rgba");return t[3]===void 0&&(t[3]=1),t};Qt.autodetect.push({p:3,test:(...e)=>{if(e=jt(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:_U}=Math,F$e=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*_U(n),o=t<20?0:-254.76935184120902+.8274096064007395*(o=t-10)+115.67994401066147*_U(o)):(r=351.97690566805693+.114206453784165*(r=t-55)-40.25366309332127*_U(r),n=325.4494125711974+.07943456536662342*(n=t-50)-28.0852963507957*_U(n),o=255),[r,n,o,1]},SU=F$e;var{round:B$e}=Math,z$e=(...e)=>{let t=jt(e,"rgb"),r=t[0],n=t[2],o=1e3,i=4e4,c=.4,d;for(;i-o>c;){d=(i+o)*.5;let h=SU(d);h[2]/h[0]>=n/r?i=d:o=d}return B$e(d)},P3e=z$e;$e.prototype.temp=$e.prototype.kelvin=$e.prototype.temperature=function(){return P3e(this._rgb)};lr.temp=lr.kelvin=lr.temperature=(...e)=>new $e(...e,"temp");Qt.format.temp=Qt.format.kelvin=Qt.format.temperature=SU;var{pow:IU,sign:W$e}=Math,H$e=(...e)=>{e=jt(e,"lab");let[t,r,n]=e,o=IU(t+.3963377774*r+.2158037573*n,3),i=IU(t-.1055613458*r-.0638541728*n,3),c=IU(t-.0894841775*r-1.291485548*n,3);return[255*Fre(4.0767416621*o-3.3077115913*i+.2309699292*c),255*Fre(-1.2684380046*o+2.6097574011*i-.3413193965*c),255*Fre(-.0041960863*o-.7034186147*i+1.707614701*c),e.length>3?e[3]:1]},EU=H$e;function Fre(e){let t=Math.abs(e);return t>.0031308?(W$e(e)||1)*(1.055*IU(t,1/2.4)-.055):e*12.92}var{cbrt:Bre,pow:V$e,sign:$$e}=Math,Z$e=(...e)=>{let[t,r,n]=jt(e,"rgb"),[o,i,c]=[zre(t/255),zre(r/255),zre(n/255)],d=Bre(.4122214708*o+.5363325363*i+.0514459929*c),h=Bre(.2119034982*o+.6806995451*i+.1073969566*c),v=Bre(.0883024619*o+.2817188376*i+.6299787005*c);return[.2104542553*d+.793617785*h-.0040720468*v,1.9779984951*d-2.428592205*h+.4505937099*v,.0259040371*d+.7827717662*h-.808675766*v]},PU=Z$e;function zre(e){let t=Math.abs(e);return t<.04045?e/12.92:($$e(e)||1)*V$e((t+.055)/1.055,2.4)}$e.prototype.oklab=function(){return PU(this._rgb)};lr.oklab=(...e)=>new $e(...e,"oklab");Qt.format.oklab=EU;Qt.autodetect.push({p:3,test:(...e)=>{if(e=jt(e,"oklab"),Jt(e)==="array"&&e.length===3)return"oklab"}});var q$e=(...e)=>{e=jt(e,"lch");let[t,r,n]=e,[o,i,c]=wU(t,r,n),[d,h,v]=EU(o,i,c);return[d,h,v,e.length>3?e[3]:1]},k3e=q$e;var U$e=(...e)=>{let[t,r,n]=jt(e,"rgb"),[o,i,c]=PU(t,r,n);return xU(o,i,c)},j3e=U$e;$e.prototype.oklch=function(){return j3e(this._rgb)};lr.oklch=(...e)=>new $e(...e,"oklch");Qt.format.oklch=k3e;Qt.autodetect.push({p:3,test:(...e)=>{if(e=jt(e,"oklch"),Jt(e)==="array"&&e.length===3)return"oklch"}});$e.prototype.alpha=function(e,t=!1){return e!==void 0&&Jt(e)==="number"?t?(this._rgb[3]=e,this):new $e([this._rgb[0],this._rgb[1],this._rgb[2],e],"rgb"):this._rgb[3]};$e.prototype.clipped=function(){return this._rgb._clipped||!1};$e.prototype.darken=function(e=1){let t=this,r=t.lab();return r[0]-=ls.Kn*e,new $e(r,"lab").alpha(t.alpha(),!0)};$e.prototype.brighten=function(e=1){return this.darken(-e)};$e.prototype.darker=$e.prototype.darken;$e.prototype.brighter=$e.prototype.brighten;$e.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:G$e}=Math,J$e=1e-7,X$e=20;$e.prototype.luminance=function(e,t="rgb"){if(e!==void 0&&Jt(e)==="number"){if(e===0)return new $e([0,0,0,this._rgb[3]],"rgb");if(e===1)return new $e([255,255,255,this._rgb[3]],"rgb");let r=this.luminance(),n=X$e,o=(c,d)=>{let h=c.interpolate(d,.5,t),v=h.luminance();return Math.abs(e-v)e?o(c,h):o(h,d)},i=(r>e?o(new $e([0,0,0]),this):o(this,new $e([255,255,255]))).rgb();return new $e([...i,this._rgb[3]])}return K$e(...this._rgb.slice(0,3))};var K$e=(e,t,r)=>(e=Wre(e),t=Wre(t),r=Wre(r),.2126*e+.7152*t+.0722*r),Wre=e=>(e/=255,e<=.03928?e/12.92:G$e((e+.055)/1.055,2.4));var yo={};var G5=(e,t,r=.5,...n)=>{let o=n[0]||"lrgb";if(!yo[o]&&!n.length&&(o=Object.keys(yo)[0]),!yo[o])throw new Error(`interpolation mode ${o} is not defined`);return Jt(e)!=="object"&&(e=new $e(e)),Jt(t)!=="object"&&(t=new $e(t)),yo[o](e,t,r).alpha(e.alpha()+r*(t.alpha()-e.alpha()))};$e.prototype.mix=$e.prototype.interpolate=function(e,t=.5,...r){return G5(this,e,t,...r)};$e.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 $e([t[0]*r,t[1]*r,t[2]*r,r],"rgb")};$e.prototype.saturate=function(e=1){let t=this,r=t.lch();return r[1]+=ls.Kn*e,r[1]<0&&(r[1]=0),new $e(r,"lch").alpha(t.alpha(),!0)};$e.prototype.desaturate=function(e=1){return this.saturate(-e)};$e.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 d=new $e(i,n);return r?(this._rgb=d._rgb,this):d}throw new Error(`unknown channel ${o} in mode ${n}`)}else return i};$e.prototype.tint=function(e=.5,...t){return G5(this,"white",e,...t)};$e.prototype.shade=function(e=.5,...t){return G5(this,"black",e,...t)};var Y$e=(e,t,r)=>{let n=e._rgb,o=t._rgb;return new $e(n[0]+r*(o[0]-n[0]),n[1]+r*(o[1]-n[1]),n[2]+r*(o[2]-n[2]),"rgb")};yo.rgb=Y$e;var{sqrt:Hre,pow:EE}=Math,Q$e=(e,t,r)=>{let[n,o,i]=e._rgb,[c,d,h]=t._rgb;return new $e(Hre(EE(n,2)*(1-r)+EE(c,2)*r),Hre(EE(o,2)*(1-r)+EE(d,2)*r),Hre(EE(i,2)*(1-r)+EE(h,2)*r),"rgb")};yo.lrgb=Q$e;var eZe=(e,t,r)=>{let n=e.lab(),o=t.lab();return new $e(n[0]+r*(o[0]-n[0]),n[1]+r*(o[1]-n[1]),n[2]+r*(o[2]-n[2]),"lab")};yo.lab=eZe;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,d,h,v,w,_;(n.substr(0,1)==="h"||n==="oklch")&&([c,h,w]=o,[d,v,_]=i);let I,R,D,F;return!isNaN(c)&&!isNaN(d)?(d>c&&d-c>180?F=d-(c+360):d180?F=d+360-c:F=d-c,R=c+r*F):isNaN(c)?isNaN(d)?R=Number.NaN:(R=d,(w==1||w==0)&&n!="hsv"&&(I=v)):(R=c,(_==1||_==0)&&n!="hsv"&&(I=h)),I===void 0&&(I=h+r*(v-h)),D=w+r*(_-w),n==="oklch"?new $e([D,I,R],n):new $e([R,I,D],n)};var T3e=(e,t,r)=>Nd(e,t,r,"lch");yo.lch=T3e;yo.hcl=T3e;var tZe=(e,t,r)=>{let n=e.num(),o=t.num();return new $e(n+r*(o-n),"num")};yo.num=tZe;var rZe=(e,t,r)=>Nd(e,t,r,"hcg");yo.hcg=rZe;var nZe=(e,t,r)=>Nd(e,t,r,"hsi");yo.hsi=nZe;var oZe=(e,t,r)=>Nd(e,t,r,"hsl");yo.hsl=oZe;var iZe=(e,t,r)=>Nd(e,t,r,"hsv");yo.hsv=iZe;var aZe=(e,t,r)=>{let n=e.oklab(),o=t.oklab();return new $e(n[0]+r*(o[0]-n[0]),n[1]+r*(o[1]-n[1]),n[2]+r*(o[2]-n[2]),"oklab")};yo.oklab=aZe;var sZe=(e,t,r)=>Nd(e,t,r,"oklch");yo.oklch=sZe;var{pow:Vre,sqrt:$re,PI:Zre,cos:C3e,sin:M3e,atan2:lZe}=Math,A3e=(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 $e(_)),t==="lrgb")return uZe(e,r);let i=e.shift(),c=i.get(t),d=[],h=0,v=0;for(let _=0;_{let R=_.get(t);w+=_.alpha()*r[I+1];for(let D=0;D=360;)I-=360;c[_]=I}else c[_]=c[_]/d[_];return w/=n,new $e(c,t).alpha(w>.99999?1:w,!0)},uZe=(e,t)=>{let r=e.length,n=[0,0,0,0];for(let o=0;o.9999999&&(n[3]=1),new $e(gx(n))};var{pow:cZe}=Math;function yx(e){let t="rgb",r=lr("#ccc"),n=0,o=[0,1],i=[],c=[0,0],d=!1,h=[],v=!1,w=0,_=1,I=!1,R={},D=!0,F=1,A=function(te){if(te=te||["#fff","#000"],te&&Jt(te)==="string"&&lr.brewer&&lr.brewer[te.toLowerCase()]&&(te=lr.brewer[te.toLowerCase()]),Jt(te)==="array"){te.length===1&&(te=[te[0],te[0]]),te=te.slice(0);for(let de=0;de=d[fe];)fe++;return fe-1}return 0},H=te=>te,q=te=>te,Y=function(te,de){let fe,ye;if(de==null&&(de=!1),isNaN(te)||te===null)return r;de?ye=te:d&&d.length>2?ye=N(te)/(d.length-2):_!==w?ye=(te-w)/(_-w):ye=1,ye=q(ye),de||(ye=H(ye)),F!==1&&(ye=cZe(ye,F)),ye=c[0]+ye*(1-c[0]-c[1]),ye=$0(ye,0,1);let Ie=Math.floor(ye*1e4);if(D&&R[Ie])fe=R[Ie];else{if(Jt(h)==="array")for(let ve=0;ve=Oe&&ve===i.length-1){fe=h[ve];break}if(ye>Oe&&yeR={};A(e);let ne=function(te){let de=lr(Y(te));return v&&de[v]?de[v]():de};return ne.classes=function(te){if(te!=null){if(Jt(te)==="array")d=te,o=[te[0],te[te.length-1]];else{let de=lr.analyze(o);te===0?d=[de.min,de.max]:d=lr.limits(de,"e",te)}return ne}return d},ne.domain=function(te){if(!arguments.length)return o;w=te[0],_=te[te.length-1],i=[];let de=h.length;if(te.length===de&&w!==_)for(let fe of Array.from(te))i.push((fe-w)/(_-w));else{for(let fe=0;fe2){let fe=te.map((Ie,ve)=>ve/(te.length-1)),ye=te.map(Ie=>(Ie-w)/(_-w));ye.every((Ie,ve)=>fe[ve]===Ie)||(q=Ie=>{if(Ie<=0||Ie>=1)return Ie;let ve=0;for(;Ie>=ye[ve+1];)ve++;let Oe=(Ie-ye[ve])/(ye[ve+1]-ye[ve]);return fe[ve]+Oe*(fe[ve+1]-fe[ve])})}}return o=[w,_],ne},ne.mode=function(te){return arguments.length?(t=te,ee(),ne):t},ne.range=function(te,de){return A(te,de),ne},ne.out=function(te){return v=te,ne},ne.spread=function(te){return arguments.length?(n=te,ne):n},ne.correctLightness=function(te){return te==null&&(te=!0),I=te,ee(),I?H=function(de){let fe=Y(0,!0).lab()[0],ye=Y(1,!0).lab()[0],Ie=fe>ye,ve=Y(de,!0).lab()[0],Oe=fe+(ye-fe)*de,be=ve-Oe,Te=0,Pe=1,Re=20;for(;Math.abs(be)>.01&&Re-- >0;)(function(){return Ie&&(be*=-1),be<0?(Te=de,de+=(Pe-de)*.5):(Pe=de,de+=(Te-de)*.5),ve=Y(de,!0).lab()[0],be=ve-Oe})();return de}:H=de=>de,ne},ne.padding=function(te){return te!=null?(Jt(te)==="number"&&(te=[te,te]),c=te,ne):c},ne.colors=function(te,de){arguments.length<2&&(de="hex");let fe=[];if(arguments.length===0)fe=h.slice(0);else if(te===1)fe=[ne(.5)];else if(te>1){let ye=o[0],Ie=o[1]-ye;fe=pZe(0,te,!1).map(ve=>ne(ye+ve/(te-1)*Ie))}else{e=[];let ye=[];if(d&&d.length>2)for(let Ie=1,ve=d.length,Oe=1<=ve;Oe?Ieve;Oe?Ie++:Ie--)ye.push((d[Ie-1]+d[Ie])*.5);else ye=o;fe=ye.map(Ie=>ne(Ie))}return lr[de]&&(fe=fe.map(ye=>ye[de]())),fe},ne.cache=function(te){return te!=null?(D=te,ne):D},ne.gamma=function(te){return te!=null?(F=te,ne):F},ne.nodata=function(te){return te!=null?(r=lr(te),ne):r},ne}function pZe(e,t,r){let n=[],o=ei;o?c++:c--)n.push(c);return n}var dZe=function(e){let t=[1,1];for(let r=1;rnew $e(i)),e.length===2)[r,n]=e.map(i=>i.lab()),t=function(i){let c=[0,1,2].map(d=>r[d]+i*(n[d]-r[d]));return new $e(c,"lab")};else if(e.length===3)[r,n,o]=e.map(i=>i.lab()),t=function(i){let c=[0,1,2].map(d=>(1-i)*(1-i)*r[d]+2*(1-i)*i*n[d]+i*i*o[d]);return new $e(c,"lab")};else if(e.length===4){let i;[r,n,o,i]=e.map(c=>c.lab()),t=function(c){let d=[0,1,2].map(h=>(1-c)*(1-c)*(1-c)*r[h]+3*(1-c)*(1-c)*c*n[h]+3*(1-c)*c*c*o[h]+c*c*c*i[h]);return new $e(d,"lab")}}else if(e.length>=5){let i,c,d;i=e.map(h=>h.lab()),d=e.length-1,c=dZe(d),t=function(h){let v=1-h,w=[0,1,2].map(_=>i.reduce((I,R,D)=>I+c[D]*v**(d-D)*h**D*R[_],0));return new $e(w,"lab")}}else throw new RangeError("No point in running bezier with only one color.");return t},R3e=e=>{let t=fZe(e);return t.scale=()=>yx(t),t};var kh=(e,t,r)=>{if(!kh[r])throw new Error("unknown blend mode "+r);return kh[r](e,t)},J5=e=>(t,r)=>{let n=lr(r).rgb(),o=lr(t).rgb();return lr.rgb(e(n,o))},X5=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},hZe=e=>e,mZe=(e,t)=>e*t/255,vZe=(e,t)=>e>t?t:e,gZe=(e,t)=>e>t?e:t,yZe=(e,t)=>255*(1-(1-e/255)*(1-t/255)),bZe=(e,t)=>t<128?2*e*t/255:255*(1-2*(1-e/255)*(1-t/255)),wZe=(e,t)=>255*(1-(1-t/255)/(e/255)),OZe=(e,t)=>e===255?255:(e=255*(t/255)/(1-e/255),e>255?255:e);kh.normal=J5(X5(hZe));kh.multiply=J5(X5(mZe));kh.screen=J5(X5(yZe));kh.overlay=J5(X5(bZe));kh.darken=J5(X5(vZe));kh.lighten=J5(X5(gZe));kh.dodge=J5(X5(OZe));kh.burn=J5(X5(wZe));var D3e=kh;var{pow:xZe,sin:_Ze,cos:SZe}=Math;function L3e(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 d=function(h){let v=Ld*((e+120)/360+t*h),w=xZe(o[0]+c*h,n),I=(i!==0?r[0]+h*i:r)*w*(1-w)/2,R=SZe(v),D=_Ze(v),F=w+I*(-.14861*R+1.78277*D),A=w+I*(-.29227*R-.90649*D),N=w+I*(1.97294*R);return lr(gx([F*255,A*255,N*255,1]))};return d.start=function(h){return h==null?e:(e=h,d)},d.rotations=function(h){return h==null?t:(t=h,d)},d.gamma=function(h){return h==null?n:(n=h,d)},d.hue=function(h){return h==null?r:(r=h,Jt(r)==="array"?(i=r[1]-r[0],i===0&&(r=r[1])):i=0,d)},d.lightness=function(h){return h==null?o:(Jt(h)==="array"?(o=h,c=h[1]-h[0]):(o=[h,h],c=0),d)},d.scale=()=>lr.scale(d),d.hue(r),d}var IZe="0123456789abcdef",{floor:EZe,random:PZe}=Math,N3e=()=>{let e="#";for(let t=0;t<6;t++)e+=IZe.charAt(EZe(PZe()*16));return new $e(e,"hex")};var{log:F3e,pow:kZe,floor:jZe,abs:TZe}=Math;function qre(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)=>Ure(r,n,o),r}function Ure(e,t="equal",r=7){Jt(e)=="array"&&(e=qre(e));let{min:n,max:o}=e,i=e.values.sort((d,h)=>d-h);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 d=1;d 0");let d=Math.LOG10E*F3e(n),h=Math.LOG10E*F3e(o);c.push(n);for(let v=1;v200&&(_=!1)}let D={};for(let A=0;AA-N),c.push(F[0]);for(let A=1;A{e=new $e(e),t=new $e(t);let r=e.luminance(),n=t.luminance();return r>n?(r+.05)/(n+.05):(n+.05)/(r+.05)};var{sqrt:Wg,pow:ha,min:CZe,max:MZe,atan2:z3e,abs:W3e,cos:kU,sin:H3e,exp:AZe,PI:V3e}=Math;function $3e(e,t,r=1,n=1,o=1){var i=function(Fe){return 360*Fe/(2*V3e)},c=function(Fe){return 2*V3e*Fe/360};e=new $e(e),t=new $e(t);let[d,h,v]=Array.from(e.lab()),[w,_,I]=Array.from(t.lab()),R=(d+w)/2,D=Wg(ha(h,2)+ha(v,2)),F=Wg(ha(_,2)+ha(I,2)),A=(D+F)/2,N=.5*(1-Wg(ha(A,7)/(ha(A,7)+ha(25,7)))),H=h*(1+N),q=_*(1+N),Y=Wg(ha(H,2)+ha(v,2)),ee=Wg(ha(q,2)+ha(I,2)),ne=(Y+ee)/2,te=i(z3e(v,H)),de=i(z3e(I,q)),fe=te>=0?te:te+360,ye=de>=0?de:de+360,Ie=W3e(fe-ye)>180?(fe+ye+360)/2:(fe+ye)/2,ve=1-.17*kU(c(Ie-30))+.24*kU(c(2*Ie))+.32*kU(c(3*Ie+6))-.2*kU(c(4*Ie-63)),Oe=ye-fe;Oe=W3e(Oe)<=180?Oe:ye<=fe?Oe+360:Oe-360,Oe=2*Wg(Y*ee)*H3e(c(Oe)/2);let be=w-d,Te=ee-Y,Pe=1+.015*ha(R-50,2)/Wg(20+ha(R-50,2)),Re=1+.045*ne,Ae=1+.015*ne*ve,Ve=30*AZe(-ha((Ie-275)/25,2)),pt=-(2*Wg(ha(ne,7)/(ha(ne,7)+ha(25,7))))*H3e(2*c(Ve)),Qe=Wg(ha(be/(r*Pe),2)+ha(Te/(n*Re),2)+ha(Oe/(o*Ae),2)+pt*(Te/(n*Re))*(Oe/(o*Ae)));return MZe(0,CZe(100,Qe))}function Z3e(e,t,r="lab"){e=new $e(e),t=new $e(t);let n=e.get(r),o=t.get(r),i=0;for(let c in n){let d=(n[c]||0)-(o[c]||0);i+=d*d}return Math.sqrt(i)}var q3e=(...e)=>{try{return new $e(...e),!0}catch{return!1}};var U3e={cool(){return yx([lr.hsl(180,1,.9),lr.hsl(250,.7,.4)])},hot(){return yx(["#000","#f00","#ff0","#fff"],[0,.25,.75,1]).mode("rgb")}};var jU={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(jU))jU[e.toLowerCase()]=jU[e];var G3e=jU;Object.assign(lr,{average:A3e,bezier:R3e,blend:D3e,cubehelix:L3e,mix:G5,interpolate:G5,random:N3e,scale:yx,analyze:qre,contrast:B3e,deltaE:$3e,distance:Z3e,limits:Ure,valid:q3e,scales:U3e,input:Qt,colors:U5,brewer:G3e});var bo=lr;var J3e="#EBEFF5";function PE(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,d=r?Math.ceil(t/2)+(c?1:0):t,h=r?Math.ceil(t/2)+(c?1:0):0;if(o.length===1&&o.unshift(J3e),r){o.length<3&&(o[2]=o[1],o[1]=J3e);var v=Math.ceil(o.length/2),w=o.filter(function(F,A){if(Ae.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&arguments[0]!==void 0?arguments[0]:{},r=t.rotations,n=r===void 0?1:r,o=t.order,i=o===void 0?"append":o,c=t.direction,d=c===void 0?"lighter":c,h=t.sortBy,v=h===void 0?"default":h,w=t.sortShift,_=w===void 0?"-100":w,I=[],R=["#54B399","#6092C0","#D36086","#9170B8","#CA8EAE","#D6BF57","#B9A888","#DA8B45","#AA6556","#E7664C"];if(v==="natural"&&(R=Gre(R).sort(function(N,H){return bo(N).set("hsl.h",_).hsl()[0]-bo(H).set("hsl.h",_).hsl()[0]})),n>1){var D=R.map(function(N){var H=PE(["black",N,"white"],5,!1,!0);switch(H.pop(),H.shift(),d){case"lighter":return PE([H[1],H[2]],n,!1,!0);case"darker":return PE([H[1],H[0]],n,!1,!0);case"both":return PE(H,n,!1,!0)}});if(i==="group")I=FZe(D);else for(var F=function(H){var q,Y=D.map(function(ee){return ee[H]});(q=I).push.apply(q,Gre(Y))},A=0;A0&&arguments[0]!==void 0?arguments[0]:{},r=Hg(t),n=r.map(function(o){return bo(o).brighten(.5).hex()});return n};var Hgr=Hg()[9],Vgr=[Hg()[1],"#6092C0"],$gr=[Hg()[7],Hg()[9]];var X3e=function(t,r){return Pre(t)?r.hex():r.css()},_n=function(t,r){return bo(t).alpha(r).css()},Rn=function(t,r){var n=bo.mix(t,"#fff",r,"rgb");return X3e(t,n)},No=function(t,r){var n=bo.mix(t,"#000",r,"rgb");return X3e(t,n)},CU=function(t,r,n){return n==="DARK"?No(t,r):Rn(t,r)};var MU=function(t){return bo(t).get("hsl.l")*100},AU=function(t,r){return bo(t).darken(r).hex()};function RU(e){"@babel/helpers - typeof";return RU=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},RU(e)}var DU=4.5,xl=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:4.85;return function(n){var o,i=RU(n)==="object"&&(o=Bg(n,t))!==null&&o!==void 0?o:t,c=RU(n)==="object"?n.colors.body:n;(bo(i).alpha()<1||bo(c).alpha()<1)&&console.warn(`Contrast cannot be accurately calculated when colors have alpha channel opacity. Make sure the provided foreground and background colors have no transparency: Foreground: `.concat(i,` -Background: `).concat(c));for(var d=bo.contrast(i,c),h=CU(c),v=i;d50?v=No(v,.05):v=Rn(v,.05),d=bo.contrast(v,c);var w=CU(v);if(w<5)return console.warn("High enough contrast could not be determined. Most likely your background color does not adjust for light mode."),v;if(w>95)return console.warn("High enough contrast could not be determined. Most likely your background color does not adjust for dark mode."),v}return bo(v).hex()}},DU=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return function(n){return xl(t,r)(n)}};function iA(e){"@babel/helpers - typeof";return iA=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},iA(e)}function K3e(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 K5(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bqe(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}var LU={left:"inline-start",right:"inline-end",top:"block-start",bottom:"block-end",horizontal:"inline",vertical:"block"},myr=Ol(LU),qn=kE,vyr=kE._shorthands,wqe=yqe(kE,["_shorthands"]),gyr=Ol(wqe),pe=function(t,r){return"".concat(qn[t],": ").concat(r,";")},$0=function(t,r){return` +Background: `).concat(c));for(var d=bo.contrast(i,c),h=MU(c),v=i;d50?v=No(v,.05):v=Rn(v,.05),d=bo.contrast(v,c);var w=MU(v);if(w<5)return console.warn("High enough contrast could not be determined. Most likely your background color does not adjust for light mode."),v;if(w>95)return console.warn("High enough contrast could not be determined. Most likely your background color does not adjust for dark mode."),v}return bo(v).hex()}},LU=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return function(n){return xl(t,r)(n)}};function aA(e){"@babel/helpers - typeof";return aA=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},aA(e)}function K3e(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 K5(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bqe(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}var NU={left:"inline-start",right:"inline-end",top:"block-start",bottom:"block-end",horizontal:"inline",vertical:"block"},hyr=Ol(NU),qn=kE,myr=kE._shorthands,wqe=yqe(kE,["_shorthands"]),vyr=Ol(wqe),pe=function(t,r){return"".concat(qn[t],": ").concat(r,";")},Z0=function(t,r){return` `.concat(t,": ").concat(r,`; `).concat(pe(t,r),` `)},Oqe=function(t){return t.replace(/-\w/g,function(r){return r.charAt(1).toUpperCase()})};var bx=function(t,r){return mqe({},Oqe(qn[t]),r)};var Po=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t;return` `.concat(qn.width,": ").concat(t,`; `).concat(qn.height,": ").concat(r,`; - `)};var iwe={"text-align":{left:"start",center:"center",right:"end"}},yyr=Ol(iwe["text-align"]),Tn=function(t){return"text-align: ".concat(iwe["text-align"][t],";")};function xqe(e,t){return Eqe(e)||Iqe(e,t)||Sqe(e,t)||_qe()}function _qe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. + `)};var iwe={"text-align":{left:"start",center:"center",right:"end"}},gyr=Ol(iwe["text-align"]),Tn=function(t){return"text-align: ".concat(iwe["text-align"][t],";")};function xqe(e,t){return Eqe(e)||Iqe(e,t)||Sqe(e,t)||_qe()}function _qe(){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 Sqe(e,t){if(e){if(typeof e=="string")return awe(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)?awe(e,t):void 0}}function awe(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&arguments[1]!==void 0?arguments[1]:!1,n={"border-start-start-radius":"","border-start-end-radius":"","border-end-end-radius":"","border-end-start-radius":""},o=[];switch(t.includes("/")?(o=["","","",""],t.split("/").forEach(function(c){var d=c.trim().split(/\s+/);o.forEach(function(h,v){var w=o[v]?"".concat(o[v]," "):o[v];switch(d.length){case 1:w+=d[0];break;case 2:w+=v%2?d[1]:d[0];break;case 3:w+=v===3?d[1]:d[v];break;case 4:default:w+=d[v]}o[v]=w})})):o=t.split(/\s+/),o.length){case 1:return"border-radius: ".concat(t,";");case 2:n["border-start-start-radius"]=o[0],n["border-start-end-radius"]=o[1],n["border-end-end-radius"]=o[0],n["border-end-start-radius"]=o[1];break;case 3:n["border-start-start-radius"]=o[0],n["border-start-end-radius"]=o[1],n["border-end-end-radius"]=o[2],n["border-end-start-radius"]=o[1];break;case 4:default:n["border-start-start-radius"]=o[0],n["border-start-end-radius"]=o[1],n["border-end-end-radius"]=o[2],n["border-end-start-radius"]=o[3];break}var i=[];return Object.entries(n).forEach(function(c){var d=xqe(c,2),h=d[0],v=d[1];v&&(r&&v!=="0"&&v!=="0px"||!r)&&i.push("".concat(h,": ").concat(v,";"))}),i.join(` -`)};function Xre(e){"@babel/helpers - typeof";return Xre=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xre(e)}function Kre(){Kre=function(i,c){return new r(i,void 0,c)};var e=RegExp.prototype,t=new WeakMap;function r(o,i,c){var d=RegExp(o,i);return t.set(d,c||t.get(o)),NU(d,r.prototype)}function n(o,i){var c=t.get(i);return Object.keys(c).reduce(function(d,h){var v=c[h];if(typeof v=="number")d[h]=o[v];else{for(var w=0;o[v[w]]===void 0&&w+1]+)>/g,function(h,v){var w=c[v];return"$"+(Array.isArray(w)?w.join("$"):w)}))}if(typeof i=="function"){var d=this;return e[Symbol.replace].call(this,o,function(){var h=arguments;return Xre(h[h.length-1])!="object"&&(h=[].slice.call(h)).push(n(h,d)),i.apply(this,h)})}return e[Symbol.replace].call(this,o,i)},Kre.apply(this,arguments)}function jqe(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&NU(e,t)}function NU(e,t){return NU=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},NU(e,t)}var pr=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"";Array.isArray(t)||(t=[t]);var o=[],i="";return t.forEach(function(c){if(typeof c=="string"){var d,h,v=Kre(/(\x2D?[\d.]+)(%|[a-zA-Z]*)/,{value:1,unit:2}),w=v.exec(c),_=Number(w==null||(d=w.groups)===null||d===void 0?void 0:d.value);if(!isNaN(_))o.push(_);else throw new Error("No valid numeric value found");if(!n&&w!==null&&w!==void 0&&(h=w.groups)!==null&&h!==void 0&&h.unit){if(!i)i=w.groups.unit;else if(i!==w.groups.unit)throw new Error("Multiple units found. Use `calc()` to mix and math multiple unit types (e.g. `%` & `px`) instead")}}else if(typeof c=="number")o.push(c);else throw new Error("Invalid value type - pass a string or number")}),"".concat(r.apply(void 0,o)).concat(n||i)};function Yre(e){"@babel/helpers - typeof";return Yre=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yre(e)}var _l=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;return function(r){var n=Yre(r)==="object"?r.base:r;return"".concat(n*t,"px")}};function FU(e,t){var r=t.base,n=t.font,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=o.unit,c=i===void 0?n.defaultUnits:i,d=o.customScale;if(c==="em")return"".concat(n.scale[e],"em");var h=r*n.scale[e];d&&(h*=n.scale[d]);var v=r*n.scale[n.body.scale];return c==="px"?"".concat(h,"px"):"".concat((h/v).toFixed(4),"rem")}function swe(e,t){var r=t.base,n=t.font,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=o.unit,c=i===void 0?n.defaultUnits:i,d=o.customScale,h=n.baseline,v=n.lineHeightMultiplier,w=r*n.scale[e];d&&(w*=n.scale[d]);var _=r*n.scale[n.body.scale],I=w<=r?v:v*.833;if(c==="em")return I.toFixed(4).toString();var R=Math.floor(Math.round(w*I)/h)*h;return c==="px"?"".concat(R,"px"):"".concat((R/_).toFixed(4),"rem")}var lwe=16,uwe={xxs:Xr(_l(.125)),xs:Xr(_l(.25)),s:Xr(_l(.5)),m:Xr(_l(.75)),base:Xr(_l()),l:Xr(_l(1.5)),xl:Xr(_l(2)),xxl:Xr(_l(2.5)),xxxl:Xr(_l(3)),xxxxl:Xr(_l(4))};function BU(e,t){return Aqe(e)||Mqe(e,t)||Cqe(e,t)||Tqe()}function Tqe(){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 Cqe(e,t){if(e){if(typeof e=="string")return cwe(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)?cwe(e,t):void 0}}function cwe(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);r0?oi(zE,--au):0,FE--,ma===10&&(FE=1,ZU--),ma}function su(){return ma=au2||BE(ma)>3?"":" "}function kwe(e,t){for(;--t&&su()&&!(ma<48||ma>102||ma>57&&ma<65||ma>70&&ma<97););return HE(e,cA()+(t<6&&Bd()==32&&su()==32))}function nne(e){for(;su();)switch(ma){case e:return au;case 34:case 39:e!==34&&e!==39&&nne(ma);break;case 40:e===41&&nne(e);break;case 92:su();break}return au}function jwe(e,t){for(;su()&&e+ma!==47+10;)if(e+ma===42+42&&Bd()===47)break;return"/*"+HE(t,au-1)+"*"+xx(e===47?e:su())}function Twe(e){for(;!BE(Bd());)su();return HE(e,au)}function Awe(e){return UU(GU("",null,null,null,[""],e=qU(e),0,[0],e))}function GU(e,t,r,n,o,i,c,d,h){for(var v=0,w=0,_=c,I=0,R=0,D=0,F=1,A=1,N=1,H=0,q="",Y=o,ee=i,ne=n,te=q;A;)switch(D=H,H=su()){case 40:if(D!=108&&oi(te,_-1)==58){Hg(te+=On(VE(H),"&","&\f"),"&\f")!=-1&&(N=-1);break}case 34:case 39:case 91:te+=VE(H);break;case 9:case 10:case 13:case 32:te+=Pwe(D);break;case 92:te+=kwe(cA()-1,7);continue;case 47:switch(Bd()){case 42:case 47:NE(Jqe(jwe(su(),cA()),t,r),h);break;default:te+="/"}break;case 123*F:d[v++]=$s(te)*N;case 125*F:case 59:case 0:switch(H){case 0:case 125:A=0;case 59+w:N==-1&&(te=On(te,/\f/g,"")),R>0&&$s(te)-_&&NE(R>32?Mwe(te+";",n,r,_-1):Mwe(On(te," ","")+";",n,r,_-2),h);break;case 59:te+=";";default:if(NE(ne=Cwe(te,t,r,v,w,o,d,q,Y=[],ee=[],_),i),H===123)if(w===0)GU(te,t,ne,ne,Y,i,_,d,ee);else switch(I===99&&oi(te,3)===110?100:I){case 100:case 108:case 109:case 115:GU(e,ne,ne,n&&NE(Cwe(e,ne,ne,0,0,o,d,q,o,Y=[],_),ee),o,ee,_,d,n?Y:ee);break;default:GU(te,ne,ne,ne,[""],ee,0,d,ee)}}v=w=R=0,F=N=1,q=te="",_=c;break;case 58:_=1+$s(te),R=D;default:if(F<1){if(H==123)--F;else if(H==125&&F++==0&&Ewe()==125)continue}switch(te+=xx(H),H*F){case 38:N=w>0?1:(te+="\f",-1);break;case 44:d[v++]=($s(te)-1)*N,N=1;break;case 64:Bd()===45&&(te+=VE(su())),I=Bd(),w=_=$s(q=te+=Twe(cA())),H++;break;case 45:D===45&&$s(te)==2&&(F=0)}}return i}function Cwe(e,t,r,n,o,i,c,d,h,v,w){for(var _=o-1,I=o===0?i:[""],R=LE(I),D=0,F=0,A=0;D0?I[N]+" "+H:On(H,/&\f/g,I[N])))&&(h[A++]=q);return uA(e,t,r,o===0?DE:d,h,v,w)}function Jqe(e,t,r){return uA(e,t,r,WU,xx(Iwe()),e3(e,2,-2),0)}function Mwe(e,t,r,n){return uA(e,t,r,Q5,e3(e,0,n),e3(e,n+1,-1),n)}function _x(e,t){for(var r="",n=LE(e),o=0;o6)switch(oi(e,t+1)){case 109:if(oi(e,t+4)!==45)break;case 102:return On(e,/(.+:)(.+)-([^]+)/,"$1"+Sn+"$2-$3$1"+Ox+(oi(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~Hg(e,"stretch")?Bwe(On(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(oi(e,t+1)!==115)break;case 6444:switch(oi(e,$s(e)-3-(~Hg(e,"!important")&&10))){case 107:return On(e,":",":"+Sn)+e;case 101:return On(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Sn+(oi(e,14)===45?"inline-":"")+"box$3$1"+Sn+"$2$3$1"+Vs+"$2box$3")+e}break;case 5936:switch(oi(e,t+11)){case 114:return Sn+e+Vs+On(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return Sn+e+Vs+On(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return Sn+e+Vs+On(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return Sn+e+Vs+e+e}return e}var tUe=function(t,r,n,o){if(t.length>-1&&!t.return)switch(t.type){case Q5:t.return=Bwe(t.value,t.length);break;case HU:return _x([WE(t,{value:On(t.value,"@","@"+Sn)})],o);case DE:if(t.length)return rne(t.props,function(i){switch(tne(i,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return _x([WE(t,{props:[On(i,/:(read-\w+)/,":"+Ox+"$1")]})],o);case"::placeholder":return _x([WE(t,{props:[On(i,/:(plac\w+)/,":"+Sn+"input-$1")]}),WE(t,{props:[On(i,/:(plac\w+)/,":"+Ox+"$1")]}),WE(t,{props:[On(i,/:(plac\w+)/,Vs+"input-$1")]})],o)}return""})}},rUe=[tUe],JU=function(t){var r=t.key;if(r==="css"){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,function(F){var A=F.getAttribute("data-emotion");A.indexOf(" ")!==-1&&(document.head.appendChild(F),F.setAttribute("data-s",""))})}var o=t.stylisPlugins||rUe,i={},c,d=[];c=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+r+' "]'),function(F){for(var A=F.getAttribute("data-emotion").split(" "),N=1;N=4;++n,o-=4)r=e.charCodeAt(n)&255|(e.charCodeAt(++n)&255)<<8|(e.charCodeAt(++n)&255)<<16|(e.charCodeAt(++n)&255)<<24,r=(r&65535)*1540483477+((r>>>16)*59797<<16),r^=r>>>24,t=(r&65535)*1540483477+((r>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(o){case 3:t^=(e.charCodeAt(n+2)&255)<<16;case 2:t^=(e.charCodeAt(n+1)&255)<<8;case 1:t^=e.charCodeAt(n)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var Ywe={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var vUe=!1,gUe=/[A-Z]|^ms/g,yUe=/_EMO_([^_]+?)_([^]*?)_EMO_/g,rOe=function(t){return t.charCodeAt(1)===45},Qwe=function(t){return t!=null&&typeof t!="boolean"},cne=Nwe(function(e){return rOe(e)?e:e.replace(gUe,"-$&").toLowerCase()}),eOe=function(t,r){switch(t){case"animation":case"animationName":if(typeof r=="string")return r.replace(yUe,function(n,o,i){return Z0={name:o,styles:i,next:Z0},o})}return Ywe[t]!==1&&!rOe(t)&&typeof r=="number"&&r!==0?r+"px":r},bUe="Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform.";function pA(e,t,r){if(r==null)return"";var n=r;if(n.__emotion_styles!==void 0)return n;switch(typeof r){case"boolean":return"";case"object":{var o=r;if(o.anim===1)return Z0={name:o.name,styles:o.styles,next:Z0},o.name;var i=r;if(i.styles!==void 0){var c=i.next;if(c!==void 0)for(;c!==void 0;)Z0={name:c.name,styles:c.styles,next:Z0},c=c.next;var d=i.styles+";";return d}return wUe(e,t,r)}case"function":{if(e!==void 0){var h=Z0,v=r(e);return Z0=h,pA(e,t,v)}break}}var w=r;if(t==null)return w;var _=t[w];return _!==void 0?_:w}function wUe(e,t,r){var n="";if(Array.isArray(r))for(var o=0;o1&&arguments[1]!==void 0?arguments[1]:50,n=Date.now();return function(){n+r-Date.now()<0&&(t.apply(void 0,arguments),n=Date.now())}};function cG(e,t){return TUe(e)||jUe(e,t)||kUe(e,t)||PUe()}function PUe(){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 kUe(e,t){if(e){if(typeof e=="string")return uOe(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)?uOe(e,t):void 0}}function uOe(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);r2&&arguments[2]!==void 0?arguments[2]:"after",o=t.props.__EMOTION_TYPE_PLEASE_DO_NOT_USE__||t.type,i=Hne(Hne(Hne({},t.key?{key:t.key}:{}),{},{ref:t.ref},t.props),r);return(r.css||t.props.css)&&(i.css=n==="before"?[r.css,t.props.css]:[t.props.css,r.css]),l(o,i)};var Exe=function(t){if(t.length>-1&&!t.return)switch(t.type){case Q5:t.return=aQe(t.value,t.length);break}},aQe=function e(t,r){switch(VU(t,r)){case 4246:case 5572:case 2756:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 2282:return Sn+t+t;case 4215:if(~Hg(t,"text"))return Sn+t+t;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if($s(t)-1-r>6)switch(oi(t,r+1)){case 102:if(~Hg(t,"fill-available"))return On(t,/(.+:)(.+)-([^]+)/,"$1"+Sn+"$2-$3$1"+Ox+(oi(t,r+3)===108?"$3":"$2-$3"));case 115:if(~Hg(t,"stretch"))return e(On(t,"stretch","fill-available"),r)+t}break}return t};function Pxe(e,t){if(e.inserted[t.name]===void 0)return e.insert("",t,e.sheet,!0)}function kxe(e,t,r){var n=[],o=$E(e,n,r);return n.length<2?r:o+t(n)}var EG=function(t){var r=JU(t);r.sheet.speedy=function(d){this.isSpeedy=d},r.compat=!0;var n=function(){for(var h=arguments.length,v=new Array(h),w=0;we.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mQe(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 vQe(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Lxe(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 i3(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r]+)>/g,function(h,v){var w=c[v];return"$"+(Array.isArray(w)?w.join("$"):w)}))}if(typeof i=="function"){var d=this;return e[Symbol.replace].call(this,o,function(){var h=arguments;return Xre(h[h.length-1])!="object"&&(h=[].slice.call(h)).push(n(h,d)),i.apply(this,h)})}return e[Symbol.replace].call(this,o,i)},Kre.apply(this,arguments)}function jqe(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&FU(e,t)}function FU(e,t){return FU=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},FU(e,t)}var pr=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"";Array.isArray(t)||(t=[t]);var o=[],i="";return t.forEach(function(c){if(typeof c=="string"){var d,h,v=Kre(/(\x2D?[\d.]+)(%|[a-zA-Z]*)/,{value:1,unit:2}),w=v.exec(c),_=Number(w==null||(d=w.groups)===null||d===void 0?void 0:d.value);if(!isNaN(_))o.push(_);else throw new Error("No valid numeric value found");if(!n&&w!==null&&w!==void 0&&(h=w.groups)!==null&&h!==void 0&&h.unit){if(!i)i=w.groups.unit;else if(i!==w.groups.unit)throw new Error("Multiple units found. Use `calc()` to mix and math multiple unit types (e.g. `%` & `px`) instead")}}else if(typeof c=="number")o.push(c);else throw new Error("Invalid value type - pass a string or number")}),"".concat(r.apply(void 0,o)).concat(n||i)};function Yre(e){"@babel/helpers - typeof";return Yre=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yre(e)}var _l=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;return function(r){var n=Yre(r)==="object"?r.base:r;return"".concat(n*t,"px")}};function BU(e,t){var r=t.base,n=t.font,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=o.unit,c=i===void 0?n.defaultUnits:i,d=o.customScale;if(c==="em")return"".concat(n.scale[e],"em");var h=r*n.scale[e];d&&(h*=n.scale[d]);var v=r*n.scale[n.body.scale];return c==="px"?"".concat(h,"px"):"".concat((h/v).toFixed(4),"rem")}function swe(e,t){var r=t.base,n=t.font,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=o.unit,c=i===void 0?n.defaultUnits:i,d=o.customScale,h=n.baseline,v=n.lineHeightMultiplier,w=r*n.scale[e];d&&(w*=n.scale[d]);var _=r*n.scale[n.body.scale],I=w<=r?v:v*.833;if(c==="em")return I.toFixed(4).toString();var R=Math.floor(Math.round(w*I)/h)*h;return c==="px"?"".concat(R,"px"):"".concat((R/_).toFixed(4),"rem")}var lwe=16,uwe={xxs:Xr(_l(.125)),xs:Xr(_l(.25)),s:Xr(_l(.5)),m:Xr(_l(.75)),base:Xr(_l()),l:Xr(_l(1.5)),xl:Xr(_l(2)),xxl:Xr(_l(2.5)),xxxl:Xr(_l(3)),xxxxl:Xr(_l(4))};function zU(e,t){return Aqe(e)||Mqe(e,t)||Cqe(e,t)||Tqe()}function Tqe(){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 Cqe(e,t){if(e){if(typeof e=="string")return cwe(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)?cwe(e,t):void 0}}function cwe(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);r0?oi(zE,--au):0,FE--,ma===10&&(FE=1,qU--),ma}function su(){return ma=au2||BE(ma)>3?"":" "}function kwe(e,t){for(;--t&&su()&&!(ma<48||ma>102||ma>57&&ma<65||ma>70&&ma<97););return HE(e,pA()+(t<6&&Bd()==32&&su()==32))}function nne(e){for(;su();)switch(ma){case e:return au;case 34:case 39:e!==34&&e!==39&&nne(ma);break;case 40:e===41&&nne(e);break;case 92:su();break}return au}function jwe(e,t){for(;su()&&e+ma!==47+10;)if(e+ma===42+42&&Bd()===47)break;return"/*"+HE(t,au-1)+"*"+xx(e===47?e:su())}function Twe(e){for(;!BE(Bd());)su();return HE(e,au)}function Awe(e){return GU(JU("",null,null,null,[""],e=UU(e),0,[0],e))}function JU(e,t,r,n,o,i,c,d,h){for(var v=0,w=0,_=c,I=0,R=0,D=0,F=1,A=1,N=1,H=0,q="",Y=o,ee=i,ne=n,te=q;A;)switch(D=H,H=su()){case 40:if(D!=108&&oi(te,_-1)==58){Vg(te+=On(VE(H),"&","&\f"),"&\f")!=-1&&(N=-1);break}case 34:case 39:case 91:te+=VE(H);break;case 9:case 10:case 13:case 32:te+=Pwe(D);break;case 92:te+=kwe(pA()-1,7);continue;case 47:switch(Bd()){case 42:case 47:NE(Jqe(jwe(su(),pA()),t,r),h);break;default:te+="/"}break;case 123*F:d[v++]=$s(te)*N;case 125*F:case 59:case 0:switch(H){case 0:case 125:A=0;case 59+w:N==-1&&(te=On(te,/\f/g,"")),R>0&&$s(te)-_&&NE(R>32?Mwe(te+";",n,r,_-1):Mwe(On(te," ","")+";",n,r,_-2),h);break;case 59:te+=";";default:if(NE(ne=Cwe(te,t,r,v,w,o,d,q,Y=[],ee=[],_),i),H===123)if(w===0)JU(te,t,ne,ne,Y,i,_,d,ee);else switch(I===99&&oi(te,3)===110?100:I){case 100:case 108:case 109:case 115:JU(e,ne,ne,n&&NE(Cwe(e,ne,ne,0,0,o,d,q,o,Y=[],_),ee),o,ee,_,d,n?Y:ee);break;default:JU(te,ne,ne,ne,[""],ee,0,d,ee)}}v=w=R=0,F=N=1,q=te="",_=c;break;case 58:_=1+$s(te),R=D;default:if(F<1){if(H==123)--F;else if(H==125&&F++==0&&Ewe()==125)continue}switch(te+=xx(H),H*F){case 38:N=w>0?1:(te+="\f",-1);break;case 44:d[v++]=($s(te)-1)*N,N=1;break;case 64:Bd()===45&&(te+=VE(su())),I=Bd(),w=_=$s(q=te+=Twe(pA())),H++;break;case 45:D===45&&$s(te)==2&&(F=0)}}return i}function Cwe(e,t,r,n,o,i,c,d,h,v,w){for(var _=o-1,I=o===0?i:[""],R=LE(I),D=0,F=0,A=0;D0?I[N]+" "+H:On(H,/&\f/g,I[N])))&&(h[A++]=q);return cA(e,t,r,o===0?DE:d,h,v,w)}function Jqe(e,t,r){return cA(e,t,r,HU,xx(Iwe()),e3(e,2,-2),0)}function Mwe(e,t,r,n){return cA(e,t,r,Q5,e3(e,0,n),e3(e,n+1,-1),n)}function _x(e,t){for(var r="",n=LE(e),o=0;o6)switch(oi(e,t+1)){case 109:if(oi(e,t+4)!==45)break;case 102:return On(e,/(.+:)(.+)-([^]+)/,"$1"+Sn+"$2-$3$1"+Ox+(oi(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~Vg(e,"stretch")?Bwe(On(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(oi(e,t+1)!==115)break;case 6444:switch(oi(e,$s(e)-3-(~Vg(e,"!important")&&10))){case 107:return On(e,":",":"+Sn)+e;case 101:return On(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Sn+(oi(e,14)===45?"inline-":"")+"box$3$1"+Sn+"$2$3$1"+Vs+"$2box$3")+e}break;case 5936:switch(oi(e,t+11)){case 114:return Sn+e+Vs+On(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return Sn+e+Vs+On(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return Sn+e+Vs+On(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return Sn+e+Vs+e+e}return e}var tUe=function(t,r,n,o){if(t.length>-1&&!t.return)switch(t.type){case Q5:t.return=Bwe(t.value,t.length);break;case VU:return _x([WE(t,{value:On(t.value,"@","@"+Sn)})],o);case DE:if(t.length)return rne(t.props,function(i){switch(tne(i,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return _x([WE(t,{props:[On(i,/:(read-\w+)/,":"+Ox+"$1")]})],o);case"::placeholder":return _x([WE(t,{props:[On(i,/:(plac\w+)/,":"+Sn+"input-$1")]}),WE(t,{props:[On(i,/:(plac\w+)/,":"+Ox+"$1")]}),WE(t,{props:[On(i,/:(plac\w+)/,Vs+"input-$1")]})],o)}return""})}},rUe=[tUe],XU=function(t){var r=t.key;if(r==="css"){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,function(F){var A=F.getAttribute("data-emotion");A.indexOf(" ")!==-1&&(document.head.appendChild(F),F.setAttribute("data-s",""))})}var o=t.stylisPlugins||rUe,i={},c,d=[];c=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+r+' "]'),function(F){for(var A=F.getAttribute("data-emotion").split(" "),N=1;N=4;++n,o-=4)r=e.charCodeAt(n)&255|(e.charCodeAt(++n)&255)<<8|(e.charCodeAt(++n)&255)<<16|(e.charCodeAt(++n)&255)<<24,r=(r&65535)*1540483477+((r>>>16)*59797<<16),r^=r>>>24,t=(r&65535)*1540483477+((r>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(o){case 3:t^=(e.charCodeAt(n+2)&255)<<16;case 2:t^=(e.charCodeAt(n+1)&255)<<8;case 1:t^=e.charCodeAt(n)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var Ywe={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var vUe=!1,gUe=/[A-Z]|^ms/g,yUe=/_EMO_([^_]+?)_([^]*?)_EMO_/g,rOe=function(t){return t.charCodeAt(1)===45},Qwe=function(t){return t!=null&&typeof t!="boolean"},cne=Nwe(function(e){return rOe(e)?e:e.replace(gUe,"-$&").toLowerCase()}),eOe=function(t,r){switch(t){case"animation":case"animationName":if(typeof r=="string")return r.replace(yUe,function(n,o,i){return q0={name:o,styles:i,next:q0},o})}return Ywe[t]!==1&&!rOe(t)&&typeof r=="number"&&r!==0?r+"px":r},bUe="Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform.";function dA(e,t,r){if(r==null)return"";var n=r;if(n.__emotion_styles!==void 0)return n;switch(typeof r){case"boolean":return"";case"object":{var o=r;if(o.anim===1)return q0={name:o.name,styles:o.styles,next:q0},o.name;var i=r;if(i.styles!==void 0){var c=i.next;if(c!==void 0)for(;c!==void 0;)q0={name:c.name,styles:c.styles,next:q0},c=c.next;var d=i.styles+";";return d}return wUe(e,t,r)}case"function":{if(e!==void 0){var h=q0,v=r(e);return q0=h,dA(e,t,v)}break}}var w=r;if(t==null)return w;var _=t[w];return _!==void 0?_:w}function wUe(e,t,r){var n="";if(Array.isArray(r))for(var o=0;o1&&arguments[1]!==void 0?arguments[1]:50,n=Date.now();return function(){n+r-Date.now()<0&&(t.apply(void 0,arguments),n=Date.now())}};function pG(e,t){return TUe(e)||jUe(e,t)||kUe(e,t)||PUe()}function PUe(){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 kUe(e,t){if(e){if(typeof e=="string")return uOe(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)?uOe(e,t):void 0}}function uOe(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);r2&&arguments[2]!==void 0?arguments[2]:"after",o=t.props.__EMOTION_TYPE_PLEASE_DO_NOT_USE__||t.type,i=Hne(Hne(Hne({},t.key?{key:t.key}:{}),{},{ref:t.ref},t.props),r);return(r.css||t.props.css)&&(i.css=n==="before"?[r.css,t.props.css]:[t.props.css,r.css]),l(o,i)};var Exe=function(t){if(t.length>-1&&!t.return)switch(t.type){case Q5:t.return=aQe(t.value,t.length);break}},aQe=function e(t,r){switch($U(t,r)){case 4246:case 5572:case 2756:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 2282:return Sn+t+t;case 4215:if(~Vg(t,"text"))return Sn+t+t;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if($s(t)-1-r>6)switch(oi(t,r+1)){case 102:if(~Vg(t,"fill-available"))return On(t,/(.+:)(.+)-([^]+)/,"$1"+Sn+"$2-$3$1"+Ox+(oi(t,r+3)===108?"$3":"$2-$3"));case 115:if(~Vg(t,"stretch"))return e(On(t,"stretch","fill-available"),r)+t}break}return t};function Pxe(e,t){if(e.inserted[t.name]===void 0)return e.insert("",t,e.sheet,!0)}function kxe(e,t,r){var n=[],o=$E(e,n,r);return n.length<2?r:o+t(n)}var PG=function(t){var r=XU(t);r.sheet.speedy=function(d){this.isSpeedy=d},r.compat=!0;var n=function(){for(var h=arguments.length,v=new Array(h),w=0;we.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mQe(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 vQe(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Lxe(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 i3(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&arguments[1]!==void 0?arguments[1]:!0,n=dG();return n&&r?t.includes(n):!1};function Kne(e){var t=ur(),r=t.euiTheme.breakpoint,n=dG();return n==null||r[e]==null?!1:r[n]>=r[e]}function EA(e){"@babel/helpers - typeof";return EA=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},EA(e)}function SQe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Fxe(e,t){for(var r=0;r=0)return!0}return!1},kQe=function(t){var r;if(t.clipboardData){var n=(r=window.getSelection())===null||r===void 0?void 0:r.toString();if(!(!n||!zxe(n))){var o=n.split(Mh.TABULAR_CONTENT_BOUND).map(function(i){return zxe(i)?i.replace(/\r?\n/g,"").replaceAll(Mh.NEWLINE,` -`).replace(/\t/g,"").replaceAll(Mh.TAB," ").replace(PQe,""):i}).join("");t.clipboardData.setData("text/plain",o),t.preventDefault()}}},MG=function(t){var r=t.children,n=t.type,o=n===void 0?"true":n;return l("span",{className:"euiScreenReaderOnly","aria-hidden":!0,"data-tabular-copy-marker":o},r)},$g={hiddenTab:l(MG,{type:"tab"},Mh.TAB),hiddenNewline:l(MG,{type:"newline"},Mh.NEWLINE),hiddenWrapperBoundary:l(MG,{type:"boundary"},Mh.TABULAR_CONTENT_BOUND),hiddenNoCopyBoundary:l(MG,{type:"no-copy"},Mh.NO_COPY_BOUND)},Yne=function(t){var r=t.children;return(0,AG.useEffect)(function(){window.document.addEventListener("copy",kQe)},[]),l(AG.default.Fragment,null,$g.hiddenWrapperBoundary,r,$g.hiddenWrapperBoundary)};var Wxe=function(t){var r=t instanceof HTMLElement?t:null;return typeof t=="string"?r=document.querySelector(t):typeof t=="function"&&(r=t()),r};var Hxe=T(eoe());var toe=function(t){return t===void 0},jQe=function(t){return t===null},Wd=function(t){return toe(t)||jQe(t)};var Vxe=function(t){return Hxe.default.isDate(t)};var Kxe=T(hG()),Yxe=T(Ch()),Qxe=T(Zxe()),e_e=T(Uxe()),t_e=T(roe()),r_e=T(Xxe()),n_e=T(Ix()),a3=function(t){return(0,Kxe.default)(t)},o_e=function(t){return(0,Yxe.default)(t)},J0=function(t){return(0,Qxe.default)(t)},RG=function(t){return(0,e_e.default)(t)},DG=function(t){return(0,t_e.default)(t)},i_e=function(t){return(0,r_e.default)(t)},a_e=function(t){return(0,n_e.default)(t)};var r9=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=r.yes,o=n===void 0?"Yes":n,i=r.no,c=i===void 0?"No":i,d=r.nil,h=d===void 0?"":d;return Wd(t)?h:t?o:c};var LG=T(eoe());function n9(e){"@babel/helpers - typeof";return n9=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n9(e)}function s_e(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 l_e(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},n=r.refTime;return(0,LG.default)(t).calendar(n,r)},PA={date:"D MMM YYYY",longDate:"DD MMMM YYYY",shortDate:"D MMM YY",dateTime:"D MMM YYYY HH:mm",longDateTime:"DD MMMM YYYY HH:mm:ss",shortDateTime:"D MMM YY HH:mm",dobShort:"Do MMM YY",dobLong:"Do MMMM YYYY",iso8601:"YYYY-MM-DDTHH:mm:ss.SSSZ",calendar:noe,calendarDateTime:function(t,r){return noe(t,l_e({sameDay:"[Today at] H:mmA",nextDay:"[Tomorrow at] H:mmA",nextWeek:"dddd [at] H:mmA",lastDay:"[Yesterday at] H:mmA",lastWeek:"[Last] dddd [at] H:mmA",sameElse:"Do MMM YYYY [at] H:mmA"},r))},calendarDate:function(t,r){return noe(t,l_e({sameDay:"[Today]",nextDay:"[Tomorrow]",nextWeek:"dddd",lastDay:"[Yesterday]",lastWeek:"[Last] dddd",sameElse:"Do MMM YYYY"},r))}};function GQe(e){return PA.hasOwnProperty(e)}function JQe(e){return n9(e)==="object"&&(e.hasOwnProperty("format")||e.hasOwnProperty("nil")||e.hasOwnProperty("options"))}var o9=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"dateTime";if(J0(r)){if(Wd(t))return"";var n=GQe(r)?PA[r]:r;if(a3(n))return n(t,{});if(J0(n))return(0,LG.default)(t).format(n)}if(JQe(r)){var o=r.format,i=o===void 0?"dateTime":o,c=r.nil,d=c===void 0?"":c,h=r.options,v=PA[i]||i;if(Wd(t))return d;if(a3(v))return v(t,h);if(J0(v))return(0,LG.default)(t).format(v)}throw new Error("Failed to format value using dateFormatKeyOrConfig: ".concat(r))};var p_e=T(c_e());var XQe={decimal1:"0,0.0",decimal2:"0,0.00",decimal3:"0,0.000",ordinal:"0o",integer:"0,0"},i9=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n,o="",i;if(J0(r)?n=r:(n=r.format,o=r.nil||"",i=r.round),!n)return Wd(t)?o:t.toString();var c=i?Math.round:Math.floor,d=XQe[n]||n;return Wd(t)?o:(0,p_e.default)(t).format(d,c)};var a9=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{nil:""};return Wd(t)?r.nil:t.toString()};var FG=function e(t){return Wd(t)||i_e(t)?"":J0(t)?a9(t):Vxe(t)?o9(t):RG(t)?r9(t):DG(t)?i9(t):o_e(t)?Array.isArray(t)?t.map(function(r){return e(r)}).join(", "):e(t):JSON.stringify(t)};function kA(e){"@babel/helpers - typeof";return kA=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},kA(e)}function BG(e,t,r){return(t=KQe(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function KQe(e){var t=YQe(e,"string");return kA(t)=="symbol"?t:t+""}function YQe(e,t){if(kA(e)!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t||"default");if(kA(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function soe(e,t){return ret(e)||tet(e,t)||eet(e,t)||QQe()}function QQe(){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 eet(e,t){if(e){if(typeof e=="string")return d_e(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)?d_e(e,t):void 0}}function d_e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rte)&&(te=Ie.fit,de={fit:Ie.fit,position:ye,top:Ie.top+window.pageYOffset,left:Ie.left+window.pageXOffset,arrow:Ie.arrow},te===1))break}if(de==null)throw new Error("Failed to calculate bestPosition");return D&&(de.anchorBoundingBox=F),de}function net(e){var t=e.position,r=e.align,n=e.anchorBoundingBox,o=e.popoverBoundingBox,i=e.windowBoundingBox,c=e.containerBoundingBox,d=e.arrowConfig,h=e.offset,v=h===void 0?0:h,w=e.buffer,_=w===void 0?0:w,I=aoe[t],R=s9[I],D=ioe[I],F=h_e(_),A=soe(F,4),N=A[0],H=A[1],q=A[2],Y=A[3],ee=oet({crossAxisFirstSide:I,crossAxisSecondSide:R,crossAxisDimension:D,position:t,align:r,buffer:_,offset:v,windowBoundingBox:i,containerBoundingBox:c,popoverBoundingBox:o,anchorBoundingBox:n,arrowConfig:d}),ne=ee.crossAxisPosition,te=ee.crossAxisArrowPosition,de=ioe[t],fe=f_e[de],ye=iet({position:t,offset:v,popoverBoundingBox:o,anchorBoundingBox:n,arrowConfig:d}),Ie=ye.primaryAxisPosition,he=ye.primaryAxisArrowPosition,be=BG(BG({},I,ne),fe,Ie),Se=loe(i,c);Se.top+=N,Se.right-=H,Se.bottom-=q,Se.left+=Y;var Te=set({top:be.top,right:be.left+o.width,bottom:be.top+o.height,left:be.left,width:o.width,height:o.height},Se),Pe=d?BG(BG({},I,te-be[I]),fe,he):void 0;return{fit:Te,top:be.top,left:be.left,arrow:Pe?{left:Pe.left,top:Pe.top}:void 0}}function oet(e){var t=e.crossAxisFirstSide,r=e.crossAxisSecondSide,n=e.crossAxisDimension,o=e.position,i=e.align,c=e.buffer,d=e.offset,h=e.windowBoundingBox,v=e.containerBoundingBox,w=e.popoverBoundingBox,_=e.anchorBoundingBox,I=e.arrowConfig,R=w[n],D=_[n],F=D/2,A=_[t]+F-R/2,N=loe(h,v),H=aet(_,N,c,d,o),q=I?I.arrowBuffer:0,Y=(R-D)/2,ee=0,ne=1,te=0,de=1;if(i!=null){ne=i==="top"||i==="left"?1:-1,ee=Y;var fe=Y+ee,ye=fe>H[s9[i]];te=ye?fe-H[s9[i]]:0,de=-1*ne}else{var Ie=H[t],he=H[r],be=Ie>he;de=be?-1:1;var Se=Math.min(Ie,he),Te=Y>Se;te=Te?Y-Se:0}var Pe=te*de,Ve=A+Pe+ee*ne,De;if(I){var He=I.arrowWidth;if(De=_[t]+F-He/2,DeVe+R){var vt=Ve+R,Qe=De-(vt-q-He);Ve+=Qe}}return{crossAxisPosition:Ve,crossAxisArrowPosition:De}}function iet(e){var t=e.position,r=e.offset,n=e.popoverBoundingBox,o=e.anchorBoundingBox,i=e.arrowConfig,c=t==="top"||t==="left",d=ioe[t],h=n[d],v=f_e[d],w=o[v],_=o[d],I=c?h:_,R=(r+I)*(c?-1:1),D=w+R,F;return i&&(F=c?h:0),{primaryAxisPosition:D,primaryAxisArrowPosition:F}}function ooe(e){var t=e.getBoundingClientRect();return{top:t.top,right:t.right,bottom:t.bottom,left:t.left,height:t.height,width:t.width}}function aet(e,t,r,n,o){var i=h_e(r),c=soe(i,4),d=c[0],h=c[1],v=c[2],w=c[3];return{top:e.top-t.top-d-(o==="top"?n:0),right:t.right-e.right-h-(o==="right"?n:0),bottom:t.bottom-e.bottom-v-(o==="bottom"?n:0),left:e.left-t.left-w-(o==="left"?n:0)}}function set(e,t){var r=loe(e,t);if(r.left>r.right||r.top>r.top)return 0;var n=(r.right-r.left)*(r.bottom-r.top),o=(e.right-e.left)*(e.bottom-e.top);return n/o}function loe(e,t){var r=Math.max(e.top,t.top),n=Math.min(e.right,t.right),o=Math.min(e.bottom,t.bottom),i=Math.max(e.left,t.left),c=Math.max(o-r,0),d=Math.max(n-i,0);return{top:r,right:n,bottom:o,left:i,height:c,width:d}}function uoe(e,t){for(var r=[];r.push(e),e=e.offsetParent,!(e==null||e.contains(t)););r.reverse();for(var n=0,o=r;n0&&arguments[0]!==void 0?arguments[0]:Hd.ASC;return function(r,n){var o=r!=null,i=n!=null;if(o&&!i)return-1;if(!o&&i)return 1;if(!o&&!i||r===n)return 0;var c=r>n?1:-1;return Hd.isAsc(t)?c:-1*c}},reverse:function(t){return function(r,n){return t(n,r)}},value:function(t,r){return r||(r=this.default(Hd.ASC)),function(n,o){return r(t(n),t(o))}},property:function(t,r){return this.value(function(n){return UG(n,t)},r)}});var $7e=/^([\d.]+)(s|ms)/;function Z7e(e,t){var r=t==="s"?1e3:1;return parseFloat(e)*r}var CA=function(t){var r=window.getComputedStyle(t),n=r.getPropertyValue("transition-duration"),o=n.match($7e),i=o?Z7e(o[1],o[2]):0,c=r.getPropertyValue("transition-delay"),d=c.match($7e),h=d?Z7e(d[1],d[2]):0;return{durationMatch:i,delayMatch:h}};function qot(e){return e.nodeType===document.ELEMENT_NODE}var GG=function(t){return t.reduce(function(r,n){if(qot(n.target)){var o=CA(n.target),i=o.durationMatch,c=o.delayMatch;r=Math.max(r,i+c)}return r},0)},JG=function(t,r){if(t>0){var n=Date.now(),o=n+t,i=function c(){r(),o>Date.now()&&requestAnimationFrame(c)};requestAnimationFrame(i)}};var W6r=T(z());function MA(e){"@babel/helpers - typeof";return MA=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},MA(e)}function q7e(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 U7e(e){for(var t=1;t2&&arguments[2]!==void 0?arguments[2]:{},c=i.method;if(r==="transparent")return"transparent";if(c==="transparent")return r==="plain"?_n(n.colors.ghost,.2):r==="subdued"?o==="DARK"?_n(n.colors.lightShade,.4):_n(n.colors.lightShade,.2):_n(n.colors[r],.1);var d=function(v){return o==="DARK"?No(v,.8):Rn(v,.9)};switch(r){case"plain":return n.colors.emptyShade;case"subdued":return n.colors.body;default:return d(n.colors[r])}};var Xot=function(t){return J7e.reduce(function(r,n){return U7e(U7e({},r),{},G7e({},n,Q("background-color:",s3(t,n),";label:",n,";")))},{})},X7e=function(){return mt(Xot)};var X0=function(t){var r=t.euiTheme,n=r.colors,o=r.size,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},c=i.thumbColor,d=i.trackColor,h=d===void 0?"transparent":d,v=i.width,w=v===void 0?"thin":v,_=i.size,I=i.corner,R=c||_n(n.darkShade,.5),D=_||o.base,F=I||w==="thin"?"calc(".concat(o.s," * 0.75)"):o.xs,A="scrollbar-color: ".concat(R," ").concat(h,";");return"scrollbar-width: ".concat(w,`; + `])),n||Oe,Ve.colors.text),setGlobalCSSVariables:h?Vt:_,globalCSSVariables:h?Fe:w,setNearestThemeCSSVariables:Vt,themeCSSVariables:Fe}},[Ve,h,v,n,Oe,_,w,Vt,Fe]),st=(0,Un.useMemo)(function(){if(h)return i;var Tt=c||{},wr=Tt.cloneElement,Rt=Tt.className,Ut=hQe(Tt,fQe),vr=i3(i3({},Ut),{},{className:kG(Rt,Ke.colorClassName)});return Fe&&(vr.css=i3({label:"euiCSSVariables"},Fe)),wr?Sl(i,i3(i3({},vr),{},{className:kG(i.props.className,vr.className)})):l("span",Gne({},vr,{className:kG("euiThemeProvider",vr.className)}),i)},[h,Fe,Ke,c,i]);return l(Un.default.Fragment,null,h&&Fe&&l(r3,{styles:Q({":root":Fe},";label:EuiThemeProvider;")}),l(ME.Provider,{value:Oe},l(WU.Provider,{value:H},l(CE.Provider,{value:de},l(AE.Provider,{value:Ve},l(wx.Provider,{value:Ke},l(Rxe,null,l(Txe,null,l(ee,null,st)))))))))};var Xne=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,n=fG();return n&&r?t.includes(n):!1};function Kne(e){var t=ur(),r=t.euiTheme.breakpoint,n=fG();return n==null||r[e]==null?!1:r[n]>=r[e]}function PA(e){"@babel/helpers - typeof";return PA=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},PA(e)}function SQe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Fxe(e,t){for(var r=0;r=0)return!0}return!1},kQe=function(t){var r;if(t.clipboardData){var n=(r=window.getSelection())===null||r===void 0?void 0:r.toString();if(!(!n||!zxe(n))){var o=n.split(Mh.TABULAR_CONTENT_BOUND).map(function(i){return zxe(i)?i.replace(/\r?\n/g,"").replaceAll(Mh.NEWLINE,` +`).replace(/\t/g,"").replaceAll(Mh.TAB," ").replace(PQe,""):i}).join("");t.clipboardData.setData("text/plain",o),t.preventDefault()}}},AG=function(t){var r=t.children,n=t.type,o=n===void 0?"true":n;return l("span",{className:"euiScreenReaderOnly","aria-hidden":!0,"data-tabular-copy-marker":o},r)},Zg={hiddenTab:l(AG,{type:"tab"},Mh.TAB),hiddenNewline:l(AG,{type:"newline"},Mh.NEWLINE),hiddenWrapperBoundary:l(AG,{type:"boundary"},Mh.TABULAR_CONTENT_BOUND),hiddenNoCopyBoundary:l(AG,{type:"no-copy"},Mh.NO_COPY_BOUND)},Yne=function(t){var r=t.children;return(0,RG.useEffect)(function(){window.document.addEventListener("copy",kQe)},[]),l(RG.default.Fragment,null,Zg.hiddenWrapperBoundary,r,Zg.hiddenWrapperBoundary)};var Wxe=function(t){var r=t instanceof HTMLElement?t:null;return typeof t=="string"?r=document.querySelector(t):typeof t=="function"&&(r=t()),r};var Hxe=T(eoe());var toe=function(t){return t===void 0},jQe=function(t){return t===null},Wd=function(t){return toe(t)||jQe(t)};var Vxe=function(t){return Hxe.default.isDate(t)};var Kxe=T(mG()),Yxe=T(Ch()),Qxe=T(Zxe()),e_e=T(Uxe()),t_e=T(roe()),r_e=T(Xxe()),n_e=T(Ix()),a3=function(t){return(0,Kxe.default)(t)},o_e=function(t){return(0,Yxe.default)(t)},X0=function(t){return(0,Qxe.default)(t)},DG=function(t){return(0,e_e.default)(t)},LG=function(t){return(0,t_e.default)(t)},i_e=function(t){return(0,r_e.default)(t)},a_e=function(t){return(0,n_e.default)(t)};var r9=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=r.yes,o=n===void 0?"Yes":n,i=r.no,c=i===void 0?"No":i,d=r.nil,h=d===void 0?"":d;return Wd(t)?h:t?o:c};var NG=T(eoe());function n9(e){"@babel/helpers - typeof";return n9=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n9(e)}function s_e(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 l_e(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},n=r.refTime;return(0,NG.default)(t).calendar(n,r)},kA={date:"D MMM YYYY",longDate:"DD MMMM YYYY",shortDate:"D MMM YY",dateTime:"D MMM YYYY HH:mm",longDateTime:"DD MMMM YYYY HH:mm:ss",shortDateTime:"D MMM YY HH:mm",dobShort:"Do MMM YY",dobLong:"Do MMMM YYYY",iso8601:"YYYY-MM-DDTHH:mm:ss.SSSZ",calendar:noe,calendarDateTime:function(t,r){return noe(t,l_e({sameDay:"[Today at] H:mmA",nextDay:"[Tomorrow at] H:mmA",nextWeek:"dddd [at] H:mmA",lastDay:"[Yesterday at] H:mmA",lastWeek:"[Last] dddd [at] H:mmA",sameElse:"Do MMM YYYY [at] H:mmA"},r))},calendarDate:function(t,r){return noe(t,l_e({sameDay:"[Today]",nextDay:"[Tomorrow]",nextWeek:"dddd",lastDay:"[Yesterday]",lastWeek:"[Last] dddd",sameElse:"Do MMM YYYY"},r))}};function GQe(e){return kA.hasOwnProperty(e)}function JQe(e){return n9(e)==="object"&&(e.hasOwnProperty("format")||e.hasOwnProperty("nil")||e.hasOwnProperty("options"))}var o9=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"dateTime";if(X0(r)){if(Wd(t))return"";var n=GQe(r)?kA[r]:r;if(a3(n))return n(t,{});if(X0(n))return(0,NG.default)(t).format(n)}if(JQe(r)){var o=r.format,i=o===void 0?"dateTime":o,c=r.nil,d=c===void 0?"":c,h=r.options,v=kA[i]||i;if(Wd(t))return d;if(a3(v))return v(t,h);if(X0(v))return(0,NG.default)(t).format(v)}throw new Error("Failed to format value using dateFormatKeyOrConfig: ".concat(r))};var p_e=T(c_e());var XQe={decimal1:"0,0.0",decimal2:"0,0.00",decimal3:"0,0.000",ordinal:"0o",integer:"0,0"},i9=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n,o="",i;if(X0(r)?n=r:(n=r.format,o=r.nil||"",i=r.round),!n)return Wd(t)?o:t.toString();var c=i?Math.round:Math.floor,d=XQe[n]||n;return Wd(t)?o:(0,p_e.default)(t).format(d,c)};var a9=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{nil:""};return Wd(t)?r.nil:t.toString()};var BG=function e(t){return Wd(t)||i_e(t)?"":X0(t)?a9(t):Vxe(t)?o9(t):DG(t)?r9(t):LG(t)?i9(t):o_e(t)?Array.isArray(t)?t.map(function(r){return e(r)}).join(", "):e(t):JSON.stringify(t)};function jA(e){"@babel/helpers - typeof";return jA=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},jA(e)}function zG(e,t,r){return(t=KQe(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function KQe(e){var t=YQe(e,"string");return jA(t)=="symbol"?t:t+""}function YQe(e,t){if(jA(e)!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t||"default");if(jA(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function soe(e,t){return ret(e)||tet(e,t)||eet(e,t)||QQe()}function QQe(){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 eet(e,t){if(e){if(typeof e=="string")return d_e(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)?d_e(e,t):void 0}}function d_e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rte)&&(te=Ie.fit,de={fit:Ie.fit,position:ye,top:Ie.top+window.pageYOffset,left:Ie.left+window.pageXOffset,arrow:Ie.arrow},te===1))break}if(de==null)throw new Error("Failed to calculate bestPosition");return D&&(de.anchorBoundingBox=F),de}function net(e){var t=e.position,r=e.align,n=e.anchorBoundingBox,o=e.popoverBoundingBox,i=e.windowBoundingBox,c=e.containerBoundingBox,d=e.arrowConfig,h=e.offset,v=h===void 0?0:h,w=e.buffer,_=w===void 0?0:w,I=aoe[t],R=s9[I],D=ioe[I],F=h_e(_),A=soe(F,4),N=A[0],H=A[1],q=A[2],Y=A[3],ee=oet({crossAxisFirstSide:I,crossAxisSecondSide:R,crossAxisDimension:D,position:t,align:r,buffer:_,offset:v,windowBoundingBox:i,containerBoundingBox:c,popoverBoundingBox:o,anchorBoundingBox:n,arrowConfig:d}),ne=ee.crossAxisPosition,te=ee.crossAxisArrowPosition,de=ioe[t],fe=f_e[de],ye=iet({position:t,offset:v,popoverBoundingBox:o,anchorBoundingBox:n,arrowConfig:d}),Ie=ye.primaryAxisPosition,ve=ye.primaryAxisArrowPosition,Oe=zG(zG({},I,ne),fe,Ie),be=loe(i,c);be.top+=N,be.right-=H,be.bottom-=q,be.left+=Y;var Te=set({top:Oe.top,right:Oe.left+o.width,bottom:Oe.top+o.height,left:Oe.left,width:o.width,height:o.height},be),Pe=d?zG(zG({},I,te-Oe[I]),fe,ve):void 0;return{fit:Te,top:Oe.top,left:Oe.left,arrow:Pe?{left:Pe.left,top:Pe.top}:void 0}}function oet(e){var t=e.crossAxisFirstSide,r=e.crossAxisSecondSide,n=e.crossAxisDimension,o=e.position,i=e.align,c=e.buffer,d=e.offset,h=e.windowBoundingBox,v=e.containerBoundingBox,w=e.popoverBoundingBox,_=e.anchorBoundingBox,I=e.arrowConfig,R=w[n],D=_[n],F=D/2,A=_[t]+F-R/2,N=loe(h,v),H=aet(_,N,c,d,o),q=I?I.arrowBuffer:0,Y=(R-D)/2,ee=0,ne=1,te=0,de=1;if(i!=null){ne=i==="top"||i==="left"?1:-1,ee=Y;var fe=Y+ee,ye=fe>H[s9[i]];te=ye?fe-H[s9[i]]:0,de=-1*ne}else{var Ie=H[t],ve=H[r],Oe=Ie>ve;de=Oe?-1:1;var be=Math.min(Ie,ve),Te=Y>be;te=Te?Y-be:0}var Pe=te*de,Re=A+Pe+ee*ne,Ae;if(I){var Ve=I.arrowWidth;if(Ae=_[t]+F-Ve/2,AeRe+R){var pt=Re+R,Qe=Ae-(pt-q-Ve);Re+=Qe}}return{crossAxisPosition:Re,crossAxisArrowPosition:Ae}}function iet(e){var t=e.position,r=e.offset,n=e.popoverBoundingBox,o=e.anchorBoundingBox,i=e.arrowConfig,c=t==="top"||t==="left",d=ioe[t],h=n[d],v=f_e[d],w=o[v],_=o[d],I=c?h:_,R=(r+I)*(c?-1:1),D=w+R,F;return i&&(F=c?h:0),{primaryAxisPosition:D,primaryAxisArrowPosition:F}}function ooe(e){var t=e.getBoundingClientRect();return{top:t.top,right:t.right,bottom:t.bottom,left:t.left,height:t.height,width:t.width}}function aet(e,t,r,n,o){var i=h_e(r),c=soe(i,4),d=c[0],h=c[1],v=c[2],w=c[3];return{top:e.top-t.top-d-(o==="top"?n:0),right:t.right-e.right-h-(o==="right"?n:0),bottom:t.bottom-e.bottom-v-(o==="bottom"?n:0),left:e.left-t.left-w-(o==="left"?n:0)}}function set(e,t){var r=loe(e,t);if(r.left>r.right||r.top>r.top)return 0;var n=(r.right-r.left)*(r.bottom-r.top),o=(e.right-e.left)*(e.bottom-e.top);return n/o}function loe(e,t){var r=Math.max(e.top,t.top),n=Math.min(e.right,t.right),o=Math.min(e.bottom,t.bottom),i=Math.max(e.left,t.left),c=Math.max(o-r,0),d=Math.max(n-i,0);return{top:r,right:n,bottom:o,left:i,height:c,width:d}}function uoe(e,t){for(var r=[];r.push(e),e=e.offsetParent,!(e==null||e.contains(t)););r.reverse();for(var n=0,o=r;n0&&arguments[0]!==void 0?arguments[0]:Hd.ASC;return function(r,n){var o=r!=null,i=n!=null;if(o&&!i)return-1;if(!o&&i)return 1;if(!o&&!i||r===n)return 0;var c=r>n?1:-1;return Hd.isAsc(t)?c:-1*c}},reverse:function(t){return function(r,n){return t(n,r)}},value:function(t,r){return r||(r=this.default(Hd.ASC)),function(n,o){return r(t(n),t(o))}},property:function(t,r){return this.value(function(n){return GG(n,t)},r)}});var $7e=/^([\d.]+)(s|ms)/;function Z7e(e,t){var r=t==="s"?1e3:1;return parseFloat(e)*r}var MA=function(t){var r=window.getComputedStyle(t),n=r.getPropertyValue("transition-duration"),o=n.match($7e),i=o?Z7e(o[1],o[2]):0,c=r.getPropertyValue("transition-delay"),d=c.match($7e),h=d?Z7e(d[1],d[2]):0;return{durationMatch:i,delayMatch:h}};function qot(e){return e.nodeType===document.ELEMENT_NODE}var JG=function(t){return t.reduce(function(r,n){if(qot(n.target)){var o=MA(n.target),i=o.durationMatch,c=o.delayMatch;r=Math.max(r,i+c)}return r},0)},XG=function(t,r){if(t>0){var n=Date.now(),o=n+t,i=function c(){r(),o>Date.now()&&requestAnimationFrame(c)};requestAnimationFrame(i)}};var z6r=T(z());function AA(e){"@babel/helpers - typeof";return AA=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},AA(e)}function q7e(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 U7e(e){for(var t=1;t2&&arguments[2]!==void 0?arguments[2]:{},c=i.method;if(r==="transparent")return"transparent";if(c==="transparent")return r==="plain"?_n(n.colors.ghost,.2):r==="subdued"?o==="DARK"?_n(n.colors.lightShade,.4):_n(n.colors.lightShade,.2):_n(n.colors[r],.1);var d=function(v){return o==="DARK"?No(v,.8):Rn(v,.9)};switch(r){case"plain":return n.colors.emptyShade;case"subdued":return n.colors.body;default:return d(n.colors[r])}};var Xot=function(t){return J7e.reduce(function(r,n){return U7e(U7e({},r),{},G7e({},n,Q("background-color:",s3(t,n),";label:",n,";")))},{})},X7e=function(){return vt(Xot)};var K0=function(t){var r=t.euiTheme,n=r.colors,o=r.size,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},c=i.thumbColor,d=i.trackColor,h=d===void 0?"transparent":d,v=i.width,w=v===void 0?"thin":v,_=i.size,I=i.corner,R=c||_n(n.darkShade,.5),D=_||o.base,F=I||w==="thin"?"calc(".concat(o.s," * 0.75)"):o.xs,A="scrollbar-color: ".concat(R," ").concat(h,";");return"scrollbar-width: ".concat(w,`; &::-webkit-scrollbar { `).concat(pe("width",D),` @@ -123,19 +123,19 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `.concat(_n("red",1)," calc(100% - ").concat(h,`), `).concat(_n("red",.1),` 100% `),_="";d&&(d==="both"?_="".concat(v,", ").concat(w):d==="start"?_="".concat(v):_="".concat(w));var I="transform: translateZ(0);";return c==="y"?"mask-image: linear-gradient(to bottom, ".concat(_,"); ").concat(I):"mask-image: linear-gradient(to right, ".concat(_,"); ").concat(I)},Ooe=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=r.height;return` - `.concat(X0(t),` + `.concat(K0(t),` `).concat(pe("height",n||"100%"),` - `).concat($0("overflow-y","auto"),` - `).concat($0("overflow-x","hidden"),` + `).concat(Z0("overflow-y","auto"),` + `).concat(Z0("overflow-x","hidden"),` &:focus { outline: none; /* 1 */ } -`)};var XG=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=r.height,o=r.side,i=o===void 0?"both":o;return` +`)};var KG=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=r.height,o=r.side,i=o===void 0?"both":o;return` `.concat(Ooe(t,{height:n}),` `).concat(K7e(t,{direction:"y",side:i}),` `)};var xoe=function(t){return` - `.concat(X0(t),` - `).concat($0("overflow-x","auto"),` + `.concat(K0(t),` + `).concat(Z0("overflow-x","auto"),` &:focus { outline: none; /* 1 */ } @@ -146,8 +146,8 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `.concat(pe("height","100%"),` flex: 1 1 auto; overflow: hidden; -`)},e8e="@supports(selector(:has(p)))";function AA(e){"@babel/helpers - typeof";return AA=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},AA(e)}function Kot(e,t){return tit(e)||eit(e,t)||Qot(e,t)||Yot()}function Yot(){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 Qot(e,t){if(e){if(typeof e=="string")return t8e(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)?t8e(e,t):void 0}}function t8e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&arguments[1]!==void 0?arguments[1]:"center",o=arguments.length>2?arguments[2]:void 0,i=r.focus.width,c=o||r.focus.color,d=n;return n==="inset"?d="-".concat(i):n==="outset"?d="".concat(i):n==="center"&&(d=pr(i,function(h){return h/-2})),` +`)},e8e="@supports(selector(:has(p)))";function RA(e){"@babel/helpers - typeof";return RA=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},RA(e)}function Kot(e,t){return tit(e)||eit(e,t)||Qot(e,t)||Yot()}function Yot(){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 Qot(e,t){if(e){if(typeof e=="string")return t8e(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)?t8e(e,t):void 0}}function t8e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&arguments[1]!==void 0?arguments[1]:"center",o=arguments.length>2?arguments[2]:void 0,i=r.focus.width,c=o||r.focus.color,d=n;return n==="inset"?d="-".concat(i):n==="outset"?d="".concat(i):n==="center"&&(d=pr(i,function(h){return h/-2})),` outline: `.concat(i," solid ").concat(c,`; outline-offset: `).concat(d,`; `)},uu=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"center",n=arguments.length>2?arguments[2]:void 0;return` @@ -162,7 +162,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho &:not(:focus-visible) { outline: none; } - `)};var yr=function(t,r,n){var o=t.euiTheme;return{fontSize:FU(r,o,n),lineHeight:swe(r,o,n)}};var K0=function(){return` + `)};var yr=function(t,r,n){var o=t.euiTheme;return{fontSize:BU(r,o,n),lineHeight:swe(r,o,n)}};var Y0=function(){return` overflow-wrap: break-word !important; // makes sure the long string will wrap and not bust out of the container word-break: break-word; `},Zs=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"100%";return` @@ -170,7 +170,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho overflow: hidden !important; text-overflow: ellipsis !important; white-space: nowrap !important; -`)},KG=function(t){var r=t.euiTheme;return` +`)},YG=function(t){var r=t.euiTheme;return` font-feature-settings: `.concat(r.font.featureSettings,`, 'tnum' 1; `)};var d9=function(t,r){var n=t.euiTheme,o=Object.keys(pOe(n.breakpoint)),i=r.sort(function(_,I){return o.indexOf(_)-o.indexOf(I)}),c=i[0],d=n.breakpoint[c],h=i[r.length-1],v;if(h!==o[o.length-1]){var w=o.indexOf(h)+1;v=n.breakpoint[o[w]]}return["@media only screen",d?"(min-width: ".concat(d,"px)"):!1,v?"(max-width: ".concat(v-1,"px)"):!1].filter(Boolean).join(" and ")};var _oe=function(t,r){var n=t.euiTheme,o=n.breakpoint[r];return o?"@media only screen and (min-width: ".concat(o,"px)"):(console.warn("Invalid min breakpoint size: ".concat(r)),"@media only screen")};var s8e=function(t,r){var n=t.euiTheme,o=n.breakpoint[r];return o?"@media only screen and (max-width: ".concat(o-1,"px)"):(console.warn("Invalid max breakpoint size: ".concat(r)),"@media only screen")};var l8e=` /* // Adapted from Eric Meyer's reset (http://meyerweb.com/eric/tools/css/reset/, v2.0 | 20110126). */ @@ -271,7 +271,7 @@ fieldset { */ svg text { letter-spacing: normal !important; -}`;function RA(e){"@babel/helpers - typeof";return RA=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},RA(e)}function u8e(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 c8e(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);rsummary:first-of-type","details"],Eoe=vit.join(","),x8e=typeof Element>"u",LA=x8e?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Poe=!x8e&&Element.prototype.getRootNode?function(e){return e.getRootNode()}:function(e){return e.ownerDocument},_8e=function(t,r,n){var o=Array.prototype.slice.apply(t.querySelectorAll(Eoe));return r&&LA.call(t,Eoe)&&o.unshift(t),o=o.filter(n),o},S8e=function e(t,r,n){for(var o=[],i=Array.from(t);i.length;){var c=i.shift();if(c.tagName==="SLOT"){var d=c.assignedElements(),h=d.length?d:c.children,v=e(h,!0,n);n.flatten?o.push.apply(o,v):o.push({scope:c,candidates:v})}else{var w=LA.call(c,Eoe);w&&n.filter(c)&&(r||!t.includes(c))&&o.push(c);var _=c.shadowRoot||typeof n.getShadowRoot=="function"&&n.getShadowRoot(c),I=!n.shadowRootFilter||n.shadowRootFilter(c);if(_&&I){var R=e(_===!0?c.children:_.children,!0,n);n.flatten?o.push.apply(o,R):o.push({scope:c,candidates:R})}else i.unshift.apply(i,c.children)}}return o},I8e=function(t,r){return t.tabIndex<0&&(r||/^(AUDIO|VIDEO|DETAILS)$/.test(t.tagName)||t.isContentEditable)&&isNaN(parseInt(t.getAttribute("tabindex"),10))?0:t.tabIndex},git=function(t,r){return t.tabIndex===r.tabIndex?t.documentOrder-r.documentOrder:t.tabIndex-r.tabIndex},E8e=function(t){return t.tagName==="INPUT"},yit=function(t){return E8e(t)&&t.type==="hidden"},bit=function(t){var r=t.tagName==="DETAILS"&&Array.prototype.slice.apply(t.children).some(function(n){return n.tagName==="SUMMARY"});return r},wit=function(t,r){for(var n=0;nsummary:first-of-type"),c=i?t.parentElement:t;if(LA.call(c,"details:not([open]) *"))return!0;var d=Poe(t).host,h=d?.ownerDocument.contains(d)||t.ownerDocument.contains(t);if(!n||n==="full"){if(typeof o=="function"){for(var v=t;t;){var w=t.parentElement,_=Poe(t);if(w&&!w.shadowRoot&&o(w)===!0)return w8e(t);t.assignedSlot?t=t.assignedSlot:!w&&_!==t.ownerDocument?t=_.host:t=w}t=v}if(h)return!t.getClientRects().length}else if(n==="non-zero-area")return w8e(t);return!1},Iit=function(t){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(t.tagName))for(var r=t.parentElement;r;){if(r.tagName==="FIELDSET"&&r.disabled){for(var n=0;n=0)},Pit=function e(t){var r=[],n=[];return t.forEach(function(o,i){var c=!!o.scope,d=c?o.scope:o,h=I8e(d,c),v=c?e(o.candidates):d;h===0?c?r.push.apply(r,v):r.push(d):n.push({documentOrder:i,tabIndex:h,item:o,isScope:c,content:v})}),n.sort(git).reduce(function(o,i){return i.isScope?o.push.apply(o,i.content):o.push(i.content),o},[]).concat(r)},eJ=function(t,r){r=r||{};var n;return r.getShadowRoot?n=S8e([t],r.includeContainer,{filter:O8e.bind(null,r),flatten:!1,getShadowRoot:r.getShadowRoot,shadowRootFilter:Eit}):n=_8e(t,r.includeContainer,O8e.bind(null,r)),Pit(n)},P8e=function(t,r){r=r||{};var n;return r.getShadowRoot?n=S8e([t],r.includeContainer,{filter:koe.bind(null,r),flatten:!0,getShadowRoot:r.getShadowRoot}):n=_8e(t,r.includeContainer,koe.bind(null,r)),n};var KFr=T(z()),Zr=T(it()),kIe=T(At());var k8e;function kit(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function jit(e){return Ait(e)||Mit(e)||Cit(e)||Tit()}function Tit(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Cit(e,t){if(e){if(typeof e=="string")return joe(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)?joe(e,t):void 0}}function Mit(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Ait(e){if(Array.isArray(e))return joe(e)}function joe(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&arguments[0]!==void 0?arguments[0]:{},r=t.display,n=r===void 0?"base":r,o=mt(Dit);return o[n]},Dit=function(t){var r=[].concat(rJ,["disabled"]),n={};return Rit.forEach(function(o){n[o]={},r.forEach(function(i){switch(o){case"base":n[o][i]=Q(Vd(t,i),";;label:displaysColorsMap-display-color;");break;case"fill":n[o][i]=Q(jx(t,i),"outline-color:",t.colorMode==="DARK"&&i==="text"?"currentColor":t.euiTheme.colors.fullShade,";;label:displaysColorsMap-display-color;");break;case"empty":n[o][i]=Q("color:",tJ(t,i).color,";&:focus,&:active{background-color:",tJ(t,i).backgroundColor,";};label:displaysColorsMap-display-color;");break}var c=n[o][i];c.styles=c.styles.replace("label:displaysColorsMap-display-color;","label:".concat(o,"-").concat(i,";"))})}),n},nJ=function(){return mt(Nit)},Lit=Ti(k8e||(k8e=kit([` +`)},Ioe={euiScreenReaderOnly:Q(l3(),";label:euiScreenReaderOnly;"),"euiScreenReaderOnly-showOnFocus":Q("&:not(:focus, :active, :focus-within){",l3(),";};label:euiScreenReaderOnly-showOnFocus;")};var ko=function(t){var r=t.children,n=t.className,o=t.showOnFocus,i=(0,y8e.default)(n,r.props.className),c=(0,g8e.useMemo)(function(){return{className:i.length?i:void 0,css:o?Ioe["euiScreenReaderOnly-showOnFocus"]:Ioe.euiScreenReaderOnly}},[i,o]);return Sl(r,c)};ko.propTypes={children:eJ.default.element.isRequired,showOnFocus:eJ.default.bool,className:eJ.default.string};function pit(e,t){return mit(e)||hit(e,t)||fit(e,t)||dit()}function dit(){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 fit(e,t){if(e){if(typeof e=="string")return b8e(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)?b8e(e,t):void 0}}function b8e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rsummary:first-of-type","details"],Eoe=vit.join(","),x8e=typeof Element>"u",NA=x8e?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Poe=!x8e&&Element.prototype.getRootNode?function(e){return e.getRootNode()}:function(e){return e.ownerDocument},_8e=function(t,r,n){var o=Array.prototype.slice.apply(t.querySelectorAll(Eoe));return r&&NA.call(t,Eoe)&&o.unshift(t),o=o.filter(n),o},S8e=function e(t,r,n){for(var o=[],i=Array.from(t);i.length;){var c=i.shift();if(c.tagName==="SLOT"){var d=c.assignedElements(),h=d.length?d:c.children,v=e(h,!0,n);n.flatten?o.push.apply(o,v):o.push({scope:c,candidates:v})}else{var w=NA.call(c,Eoe);w&&n.filter(c)&&(r||!t.includes(c))&&o.push(c);var _=c.shadowRoot||typeof n.getShadowRoot=="function"&&n.getShadowRoot(c),I=!n.shadowRootFilter||n.shadowRootFilter(c);if(_&&I){var R=e(_===!0?c.children:_.children,!0,n);n.flatten?o.push.apply(o,R):o.push({scope:c,candidates:R})}else i.unshift.apply(i,c.children)}}return o},I8e=function(t,r){return t.tabIndex<0&&(r||/^(AUDIO|VIDEO|DETAILS)$/.test(t.tagName)||t.isContentEditable)&&isNaN(parseInt(t.getAttribute("tabindex"),10))?0:t.tabIndex},git=function(t,r){return t.tabIndex===r.tabIndex?t.documentOrder-r.documentOrder:t.tabIndex-r.tabIndex},E8e=function(t){return t.tagName==="INPUT"},yit=function(t){return E8e(t)&&t.type==="hidden"},bit=function(t){var r=t.tagName==="DETAILS"&&Array.prototype.slice.apply(t.children).some(function(n){return n.tagName==="SUMMARY"});return r},wit=function(t,r){for(var n=0;nsummary:first-of-type"),c=i?t.parentElement:t;if(NA.call(c,"details:not([open]) *"))return!0;var d=Poe(t).host,h=d?.ownerDocument.contains(d)||t.ownerDocument.contains(t);if(!n||n==="full"){if(typeof o=="function"){for(var v=t;t;){var w=t.parentElement,_=Poe(t);if(w&&!w.shadowRoot&&o(w)===!0)return w8e(t);t.assignedSlot?t=t.assignedSlot:!w&&_!==t.ownerDocument?t=_.host:t=w}t=v}if(h)return!t.getClientRects().length}else if(n==="non-zero-area")return w8e(t);return!1},Iit=function(t){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(t.tagName))for(var r=t.parentElement;r;){if(r.tagName==="FIELDSET"&&r.disabled){for(var n=0;n=0)},Pit=function e(t){var r=[],n=[];return t.forEach(function(o,i){var c=!!o.scope,d=c?o.scope:o,h=I8e(d,c),v=c?e(o.candidates):d;h===0?c?r.push.apply(r,v):r.push(d):n.push({documentOrder:i,tabIndex:h,item:o,isScope:c,content:v})}),n.sort(git).reduce(function(o,i){return i.isScope?o.push.apply(o,i.content):o.push(i.content),o},[]).concat(r)},tJ=function(t,r){r=r||{};var n;return r.getShadowRoot?n=S8e([t],r.includeContainer,{filter:O8e.bind(null,r),flatten:!1,getShadowRoot:r.getShadowRoot,shadowRootFilter:Eit}):n=_8e(t,r.includeContainer,O8e.bind(null,r)),Pit(n)},P8e=function(t,r){r=r||{};var n;return r.getShadowRoot?n=S8e([t],r.includeContainer,{filter:koe.bind(null,r),flatten:!0,getShadowRoot:r.getShadowRoot}):n=_8e(t,r.includeContainer,koe.bind(null,r)),n};var XFr=T(z()),Zr=T(it()),kIe=T(At());var k8e;function kit(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function jit(e){return Ait(e)||Mit(e)||Cit(e)||Tit()}function Tit(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Cit(e,t){if(e){if(typeof e=="string")return joe(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)?joe(e,t):void 0}}function Mit(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Ait(e){if(Array.isArray(e))return joe(e)}function joe(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&arguments[0]!==void 0?arguments[0]:{},r=t.display,n=r===void 0?"base":r,o=vt(Dit);return o[n]},Dit=function(t){var r=[].concat(nJ,["disabled"]),n={};return Rit.forEach(function(o){n[o]={},r.forEach(function(i){switch(o){case"base":n[o][i]=Q(Vd(t,i),";;label:displaysColorsMap-display-color;");break;case"fill":n[o][i]=Q(jx(t,i),"outline-color:",t.colorMode==="DARK"&&i==="text"?"currentColor":t.euiTheme.colors.fullShade,";;label:displaysColorsMap-display-color;");break;case"empty":n[o][i]=Q("color:",rJ(t,i).color,";&:focus,&:active{background-color:",rJ(t,i).backgroundColor,";};label:displaysColorsMap-display-color;");break}var c=n[o][i];c.styles=c.styles.replace("label:displaysColorsMap-display-color;","label:".concat(o,"-").concat(i,";"))})}),n},oJ=function(){return vt(Nit)},Lit=Ci(k8e||(k8e=kit([` 50% { transform: translateY(1px); } -`]))),Nit=function(t){var r=t.euiTheme,n=Q(bn,"{transition:transform ",r.animation.normal," ease-in-out,background-color ",r.animation.normal," ease-in-out;&:hover:not(:disabled){transform:translateY(-1px);}&:focus{animation:",Lit," ",r.animation.normal," ",r.animation.bounce,";}&:active:not(:disabled){transform:translateY(1px);}};label:focusCSS;");return n.styles=n.styles.replace("label:focusCSS;",""),n},oJ=function(t){var r=t.euiTheme;return{xs:{height:r.size.l,radius:r.border.radius.small,fontScale:"xs"},s:{height:r.size.xl,radius:r.border.radius.small,fontScale:"s"},m:{height:r.size.xxl,radius:r.border.radius.medium,fontScale:"s"}}};var PIe=T(z()),an=T(it());var Bo=function(t,r,n){var o=n===Dd.dark?r*3.5:r*1;return bo(t).alpha(o).css()};var Fit=function(t){var r=t.euiTheme,n=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,c=i||r.colors.shadow;return` +`]))),Nit=function(t){var r=t.euiTheme,n=Q(bn,"{transition:transform ",r.animation.normal," ease-in-out,background-color ",r.animation.normal," ease-in-out;&:hover:not(:disabled){transform:translateY(-1px);}&:focus{animation:",Lit," ",r.animation.normal," ",r.animation.bounce,";}&:active:not(:disabled){transform:translateY(1px);}};label:focusCSS;");return n.styles=n.styles.replace("label:focusCSS;",""),n},iJ=function(t){var r=t.euiTheme;return{xs:{height:r.size.l,radius:r.border.radius.small,fontScale:"xs"},s:{height:r.size.xl,radius:r.border.radius.small,fontScale:"s"},m:{height:r.size.xxl,radius:r.border.radius.medium,fontScale:"s"}}};var PIe=T(z()),an=T(it());var Bo=function(t,r,n){var o=n===Dd.dark?r*3.5:r*1;return bo(t).alpha(o).css()};var Fit=function(t){var r=t.euiTheme,n=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,c=i||r.colors.shadow;return` box-shadow: 0 .8px .8px `.concat(Bo(c,.04,n),`, 0 2.3px 2px `).concat(Bo(c,.03,n),`; @@ -334,7 +334,7 @@ box-shadow: 0 .7px 1.4px `.concat(Bo(c,.07,n),`, 0 1.9px 4px `).concat(Bo(c,.05,n),`, 0 4.5px 10px `).concat(Bo(c,.05,n),`; -`)},iJ=function(t){var r=t.euiTheme,n=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,c=o.property,d=i||r.colors.shadow;return c==="filter"?"filter: drop-shadow(0 5.7px 9px ".concat(Bo(d,.2,n),");"):`box-shadow: +`)},aJ=function(t){var r=t.euiTheme,n=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,c=o.property,d=i||r.colors.shadow;return c==="filter"?"filter: drop-shadow(0 5.7px 9px ".concat(Bo(d,.2,n),");"):`box-shadow: 0 .9px 4px `.concat(Bo(d,.08,n),`, 0 2.6px 8px `).concat(Bo(d,.06,n),`, 0 5.7px 12px `).concat(Bo(d,.05,n),`, @@ -355,7 +355,7 @@ box-shadow: 0 0 2px `).concat(Bo(c,.04,n),`, 0 0 5px `).concat(Bo(c,.04,n),`, 0 0 17px `).concat(Bo(c,.03,n),`; -`)};var cc=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"l",n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=n.color;switch(r){case"xs":return Fit(t,{color:o});case"s":return Bit(t,{color:o});case"m":return iJ(t,{color:o});case"l":return zit(t,{color:o});case"xl":return Wit(t,{color:o});default:return console.warn("Please provide a valid size option to useEuiShadow"),""}};var Toe=function(){return` +`)};var cc=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"l",n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=n.color;switch(r){case"xs":return Fit(t,{color:o});case"s":return Bit(t,{color:o});case"m":return aJ(t,{color:o});case"l":return zit(t,{color:o});case"xl":return Wit(t,{color:o});default:return console.warn("Please provide a valid size option to useEuiShadow"),""}};var Toe=function(){return` display: inline-block; appearance: none; cursor: pointer; @@ -363,7 +363,7 @@ box-shadow: white-space: nowrap; `).concat(pe("max-width","100%"),`; vertical-align: middle; - `)},Hit={name:"8595p9-isDisabled",styles:"cursor:not-allowed;label:isDisabled;"},aJ=function(t){var r=t.euiTheme,n=oJ(t),o=function(c){var d=n[c];return Q(pe("height",d.height)," line-height:",d.height,";",yr(t,d.fontScale)," border-radius:",d.radius,";")};return{euiButtonDisplay:Q(Toe()," font-weight:",r.font.weight.medium,";",Fd("padding","0 ".concat(r.size.m))," &:hover:not(:disabled),&:focus{text-decoration:underline;};label:euiButtonDisplay;"),isDisabled:Hit,fullWidth:Q("display:block;",pe("width","100%"),";;label:fullWidth;"),defaultMinWidth:Q(pe("min-width","".concat(r.base*7,"px")),";;label:defaultMinWidth;"),xs:Q(o("xs"),";label:xs;"),s:Q(o("s"),";label:s;"),m:Q(o("m"),";label:m;")}};var cIe=T(z()),ii=T(it()),pIe=T(At());var NA={};J(NA,{icon:()=>Uit});var T4r=T(z());var Vit=["title","titleId"];function Coe(){return Coe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Zit(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}var qit=function(t){var r=t.title,n=t.titleId,o=$it(t,Vit);return l("svg",Coe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0Zm0 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1Zm3.974 4.342a.5.5 0 0 1-.233.596l-.083.036L9 6.86v2.559l.974 2.923a.5.5 0 0 1-.233.596l-.083.036a.5.5 0 0 1-.596-.233l-.036-.083-1-3L8 9.5l-.026.158-1 3a.5.5 0 0 1-.97-.228l.022-.088L7 9.416V6.86l-2.658-.886a.5.5 0 0 1 .228-.97l.088.022L7.583 6h.833l2.926-.974a.5.5 0 0 1 .632.316ZM8 3a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"}))},Uit=qit;var FA={};J(FA,{icon:()=>Yit});var M4r=T(z());var Git=["title","titleId"];function Moe(){return Moe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Xit(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}var Kit=function(t){var r=t.title,n=t.titleId,o=Jit(t,Git);return l("svg",Moe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M2.5 2a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1zm0-1a1.5 1.5 0 0 1 1.415 1h1.908a1.5 1.5 0 0 1 1.393.943L8.839 7H12.5a.5.5 0 0 1 0 1H8.839l-1.623 4.057A1.5 1.5 0 0 1 5.823 13H3.915a1.5 1.5 0 1 1 0-1h1.908a.5.5 0 0 0 .464-.314L7.761 8H3.915a1.5 1.5 0 1 1 0-1H7.76L6.287 3.314A.5.5 0 0 0 5.823 3H3.915A1.5 1.5 0 1 1 2.5 1zm0 11a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM3 7.5a.5.5 0 1 0-1 0 .5.5 0 0 0 1 0zm9.354-3.354a.5.5 0 0 0-.708.708L13.793 7a.707.707 0 0 1 0 1l-2.147 2.146a.5.5 0 0 0 .708.708L14.5 8.707a1.707 1.707 0 0 0 0-2.414l-2.146-2.147z"}))},Yit=Kit;var BA={};J(BA,{icon:()=>nat});var R4r=T(z());var Qit=["title","titleId"];function Aoe(){return Aoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function tat(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}var rat=function(t){var r=t.title,n=t.titleId,o=eat(t,Qit);return l("svg",Aoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.55 9.502l.35-3.507a.905.905 0 10-1.8 0l.35 3.507a.552.552 0 001.1 0zM9 12a1 1 0 11-2 0 1 1 0 012 0z"}),l("path",{d:"M8.864 1.496a1 1 0 00-1.728 0l-7 12A1 1 0 001 15h14a1 1 0 00.864-1.504l-7-12zM1 14L8 2l7 12H1z"}))},nat=rat;var zA={};J(zA,{icon:()=>lat});var L4r=T(z());var oat=["title","titleId"];function Roe(){return Roe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function aat(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}var sat=function(t){var r=t.title,n=t.titleId,o=iat(t,oat);return l("svg",Roe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 9.169 2 5.25v6.17l6 3.428 6-3.428V5.25L8 9.17ZM15 4v8l-7 4-7-4V4l7-4 7 4Zm-1.428.336L8 1.152 2.428 4.336 8 7.974l5.572-3.638Z",clipRule:"evenodd"}))},lat=sat;var WA={};J(WA,{icon:()=>fat});var F4r=T(z());var uat=["title","titleId"];function Doe(){return Doe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pat(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}var dat=function(t){var r=t.title,n=t.titleId,o=cat(t,uat);return l("svg",Doe({xmlns:"http://www.w3.org/2000/svg",width:14,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M13.924 4.013a.605.605 0 00-.228-.236L7.304.082a.607.607 0 00-.608 0L.304 3.777A.62.62 0 000 4.304v7.392c0 .217.116.418.304.527l6.392 3.695c.188.11.42.11.608 0l6.392-3.695a.609.609 0 00.304-.527V4.304a.607.607 0 00-.076-.291zM1 5.079v6.391l6 3.47 6-3.47V5.08L7.252 8.432 7 8.579l-.252-.147L1 5.079zm11.476-.852L7 1.06 1.524 4.227 7 7.42l5.476-3.194z"}))},fat=dat;var HA={};J(HA,{icon:()=>yat});var z4r=T(z());var hat=["title","titleId"];function Loe(){return Loe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vat(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}var gat=function(t){var r=t.title,n=t.titleId,o=mat(t,hat);return l("svg",Loe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 6.5a4.5 4.5 0 1 1 5 4.473V16H7v-5.027A4.5 4.5 0 0 1 3 6.5Z"}))},yat=gat;var VA={};J(VA,{icon:()=>_at});var H4r=T(z());var bat=["title","titleId"];function Noe(){return Noe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Oat(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}var xat=function(t){var r=t.title,n=t.titleId,o=wat(t,bat);return l("svg",Noe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M14.5 14H2V1.5a.5.5 0 0 0-1 0v13a.5.5 0 0 0 .5.5h13a.5.5 0 0 0 0-1Z"}),l("path",{d:"M8.42 5a.5.5 0 0 1 .505.43L9.864 12h.873l.957-.87a.5.5 0 0 1 .672 0l1.1 1a.5.5 0 0 1-.672.74l-.764-.694-.764.694a.5.5 0 0 1-.336.13h-1.5a.5.5 0 0 1-.495-.43l-.429-3-.312 2.982a.5.5 0 0 1-.834.318l-.689-.626-.404.552a.5.5 0 0 1-.404.204h-.53a.5.5 0 0 1-.403-.204l-.405-.552-.689.626a.5.5 0 1 1-.672-.74l1.1-1a.5.5 0 0 1 .74.074l.583.796h.023l.583-.796a.5.5 0 0 1 .74-.074l.37.336.63-6.018A.5.5 0 0 1 8.42 5Zm.08-3.01a.5.5 0 1 0 0 1.002.5.5 0 0 0 0-1.002ZM8.5 4A1.503 1.503 0 0 1 7 2.493a1.5 1.5 0 0 1 .44-1.066c.566-.57 1.554-.57 2.121 0 .283.285.439.663.439 1.066A1.502 1.502 0 0 1 8.5 4Z"}))},_at=xat;var $A={};J($A,{icon:()=>kat});var $4r=T(z());var Sat=["title","titleId"];function Foe(){return Foe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Eat(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}var Pat=function(t){var r=t.title,n=t.titleId,o=Iat(t,Sat);return l("svg",Foe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1 5V1h4v4H1Zm3-1V2H2v2h2Zm7 1V1h4v4h-4Zm1-1h2V2h-2v2ZM1 10V6h4v4H1Zm3-1V7H2v2h2Zm2 6v-4h4v4H6Zm1-1h2v-2H7v2Zm4 1v-4h4v4h-4Zm1-1h2v-2h-2v2Zm-1-8h4v4h-4V6ZM6 6h4v4H6V6Zm-5 5h4v4H1v-4ZM6 1h4v4H6V1Z"}))},kat=Pat;var ZA={};J(ZA,{icon:()=>Aat});var q4r=T(z());var jat=["title","titleId"];function Boe(){return Boe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Cat(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}var Mat=function(t){var r=t.title,n=t.titleId,o=Tat(t,jat);return l("svg",Boe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 0h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H2Zm.5 2h10a.5.5 0 1 1 0 1h-10a.5.5 0 0 1 0-1Zm1 3h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1 0-1Zm2 3h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 1 0-1Zm3 3h5a.5.5 0 1 1 0 1h-5a.5.5 0 1 1 0-1Z"}))},Aat=Mat;var qA={};J(qA,{icon:()=>Fat});var G4r=T(z());var Rat=["title","titleId"];function zoe(){return zoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Lat(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}var Nat=function(t){var r=t.title,n=t.titleId,o=Dat(t,Rat);return l("svg",zoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M32 30H0V3h12.57l3 5H32v22ZM2 28h28V10H14.43l-3-5H2v23Z"}),l("path",{d:"M21 18h-4v-4h-2v4h-4v2h4v4h2v-4h4z",className:"euiIcon__fillSecondary"}))},Fat=Nat;var UA={};J(UA,{icon:()=>Vat});var X4r=T(z());var Bat=["title","titleId"];function Woe(){return Woe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Wat(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}var Hat=function(t){var r=t.title,n=t.titleId,o=zat(t,Bat);return l("svg",Woe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2.909 26.182h1.939v4.848H2.909z",className:"euiIcon__fillSecondary"}),l("path",{d:"M4.848 16.62V0H2.91v16.62a3.879 3.879 0 1 0 1.94 0Zm-.97 5.683a1.94 1.94 0 1 1 0-3.879 1.94 1.94 0 0 1 0 3.879Z"}),l("path",{d:"M14.545 16.485h1.939V31.03h-1.939z",className:"euiIcon__fillSecondary"}),l("path",{d:"M16.485 6.924V0h-1.94v6.924a3.879 3.879 0 1 0 1.94 0Zm-.97 5.682a1.94 1.94 0 1 1 0-3.879 1.94 1.94 0 0 1 0 3.88Z"}),l("path",{d:"M26.182 26.182h1.939v4.848h-1.939z",className:"euiIcon__fillSecondary"}),l("path",{d:"M28.121 16.62V0h-1.94v16.62a3.879 3.879 0 1 0 1.94 0Zm-.97 5.683a1.94 1.94 0 1 1 0-3.879 1.94 1.94 0 0 1 0 3.879Z"}))},Vat=Hat;var GA={};J(GA,{icon:()=>Gat});var Y4r=T(z());var $at=["title","titleId"];function Hoe(){return Hoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function qat(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}var Uat=function(t){var r=t.title,n=t.titleId,o=Zat(t,$at);return l("svg",Hoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2.996 18.636 0 20.434v6.132l6 3.6 5-3 5 3 5-3 5 3 6-3.6v-6.132l-5-3v-5l-5-3v-5l-6-3.6-6 3.6v2.832l2 .033V5.566l4-2.4 4 2.4v3.868l-1.996 1.197 1 1.733L21 11.166l4 2.4v3.868l-4 2.4-2.257-1.354-.971 1.75L20 21.565v3.868l-4 2.4-4-2.4v-1.7l-2-.033v1.733l-4 2.4-4-2.4v-3.868l1.996-1.197-1-1.733ZM22 25.434v-3.868l4-2.4 4 2.4v3.868l-4 2.4-4-2.4Z"}),l("path",{d:"m11 22.166-6-3.6v-6.132l6-3.6 6 3.6v6.132l-6 3.6Zm4-4.732v-3.868l-4-2.4-4 2.4v3.868l4 2.4 4-2.4Z",className:"euiIcon__fillSecondary"}))},Gat=Uat;var JA={};J(JA,{icon:()=>Qat});var exr=T(z());var Jat=["title","titleId"];function Voe(){return Voe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Kat(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}var Yat=function(t){var r=t.title,n=t.titleId,o=Xat(t,Jat);return l("svg",Voe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 10h4v2H1V1h30v6h-2V3H3v7zm26 19v-6h2v8H18v-8h2v6h9z"}),l("path",{d:"M31 10H9v11h12c5.523 0 10-4.477 10-10v-1zm-10 9H11v-7h17.938A8.001 8.001 0 0 1 21 19z",className:"euiIcon__fillSecondary"}))},Qat=Yat;var XA={};J(XA,{icon:()=>ost});var rxr=T(z());var est=["title","titleId"];function $oe(){return $oe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rst(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}var nst=function(t){var r=t.title,n=t.titleId,o=tst(t,est);return l("svg",$oe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M15.5 11.915 27 5.279 19.5.938a7.002 7.002 0 0 0-7 0l-8 4.62A7 7 0 0 0 1 11.62v9.237a7 7 0 0 0 3.5 6.061l7.5 4.33V17.98a7 7 0 0 1 3.5-6.063ZM10 27.785v-9.808a9 9 0 0 1 4.5-7.793l8.503-4.91L18.5 2.672a5.003 5.003 0 0 0-5 0l-8 4.619A5 5 0 0 0 3 11.62v9.238a5 5 0 0 0 2.5 4.33l4.5 2.598Z"}),l("path",{fillRule:"evenodd",d:"M18.409 13.55a7.089 7.089 0 0 1 1.035 1.711A6.93 6.93 0 0 1 20 17.98v13.27l7.5-4.33a7 7 0 0 0 3.5-6.061v-9.239a6.992 6.992 0 0 0-1.587-4.421L18.409 13.55Zm2.777.705A8.933 8.933 0 0 1 22 17.979v9.807l4.5-2.598a5 5 0 0 0 2.5-4.33V11.62c0-.588-.106-1.161-.303-1.7l-7.511 4.335Z",className:"euiIcon__fillSecondary"}))},ost=nst;var KA={};J(KA,{icon:()=>ust});var oxr=T(z());var ist=["title","titleId"];function Zoe(){return Zoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function sst(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}var lst=function(t){var r=t.title,n=t.titleId,o=ast(t,ist);return l("svg",Zoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M15 0h2v32h-2z",className:"euiIcon__fillSecondary"}),l("path",{d:"M0 32h13v-2H2V2h11V0H0zM19 0v2h11v28H19v2h13V0z"}))},ust=lst;var YA={};J(YA,{icon:()=>hst});var axr=T(z());var cst=["title","titleId"];function qoe(){return qoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function dst(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}var fst=function(t){var r=t.title,n=t.titleId,o=pst(t,cst);return l("svg",qoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 17h2v7H7zM12 14h2v10h-2zM17 16h2v8h-2zM22 14h3v2h-3zM22 18h3v2h-3zM22 22h3v2h-3z",className:"euiIcon__fillSecondary"}),l("path",{d:"M30.73 24a6.47 6.47 0 0 1 .45-2.19c.337-.9.52-1.85.54-2.81a8.55 8.55 0 0 0-.54-2.81 6.47 6.47 0 0 1-.45-2.19 9.2 9.2 0 0 1 .62-2.49c.53-1.57 1.08-3.19.08-4.2-1-1.01-2.41-.44-3.52.05a5.59 5.59 0 0 1-2.09.64 5.3 5.3 0 0 1-.59 0L16 .28 6.77 8a5.3 5.3 0 0 1-.59 0 5.59 5.59 0 0 1-2.09-.65C3 6.87 1.6 6.25.57 7.31c-1.03 1.06-.45 2.63.08 4.2A9.2 9.2 0 0 1 1.27 14a6.47 6.47 0 0 1-.45 2.19A8.55 8.55 0 0 0 .28 19c.02.96.203 1.91.54 2.81A6.47 6.47 0 0 1 1.27 24a9.2 9.2 0 0 1-.62 2.49c-.53 1.57-1.08 3.19-.08 4.2.353.38.852.59 1.37.58a5.67 5.67 0 0 0 2.15-.63A5.59 5.59 0 0 1 6.18 30a7.13 7.13 0 0 1 2.29.47 8 8 0 0 0 2.62.53 7.37 7.37 0 0 0 2.47-.51A7.14 7.14 0 0 1 16 30a6.24 6.24 0 0 1 2.14.45 8 8 0 0 0 2.77.55 8.08 8.08 0 0 0 2.77-.55 6.24 6.24 0 0 1 2.14-.45 5.59 5.59 0 0 1 2.09.65c1.11.49 2.49 1.11 3.52.05 1.03-1.06.45-2.63-.08-4.2a9.2 9.2 0 0 1-.62-2.5ZM21.17 7h-.26a8 8 0 0 0-2.77.55A6.24 6.24 0 0 1 16 8a6.24 6.24 0 0 1-2.14-.45A8 8 0 0 0 11.09 7h-.26L16 2.72 21.17 7Zm8.89 22.27a4.42 4.42 0 0 1-1.34-.46 7.08 7.08 0 0 0-2.9-.82 8.14 8.14 0 0 0-2.78.55 6.13 6.13 0 0 1-2.13.45 6.24 6.24 0 0 1-2.14-.45A8 8 0 0 0 16 28a9 9 0 0 0-3.08.6 5.74 5.74 0 0 1-1.83.4 6.36 6.36 0 0 1-2-.43A8.72 8.72 0 0 0 6.18 28a7.08 7.08 0 0 0-2.9.82 9.65 9.65 0 0 1-1.28.52 6.08 6.08 0 0 1 .52-2.21c.403-1 .65-2.055.73-3.13a8.55 8.55 0 0 0-.54-2.81A6.47 6.47 0 0 1 2.27 19a6.47 6.47 0 0 1 .44-2.19c.337-.9.52-1.85.54-2.81a10.48 10.48 0 0 0-.72-3.13 9 9 0 0 1-.59-2.16H2c.447.1.88.255 1.29.46a7.08 7.08 0 0 0 2.9.82A8.14 8.14 0 0 0 9 9.44 6.13 6.13 0 0 1 11.09 9a6.13 6.13 0 0 1 2.13.45A8.14 8.14 0 0 0 16 10a8.14 8.14 0 0 0 2.78-.55A6.13 6.13 0 0 1 20.91 9a6.13 6.13 0 0 1 2.09.44 8.14 8.14 0 0 0 2.78.55 7.08 7.08 0 0 0 2.9-.82A9.65 9.65 0 0 1 30 8.66a6.08 6.08 0 0 1-.52 2.21c-.403 1-.65 2.055-.73 3.13.02.96.203 1.91.54 2.81a6.47 6.47 0 0 1 .44 2.19 6.47 6.47 0 0 1-.44 2.19 8.55 8.55 0 0 0-.54 2.81c.078 1.074.32 2.13.72 3.13a9 9 0 0 1 .59 2.16v-.02Z"}))},hst=fst;var QA={};J(QA,{icon:()=>bst});var lxr=T(z());var mst=["title","titleId"];function Uoe(){return Uoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function gst(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}var yst=function(t){var r=t.title,n=t.titleId,o=vst(t,mst);return l("svg",Uoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 6h22v7h-2V8H6v19H4V6Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M10 12H7v-2h3v2Zm1 0h12v-2H11v2Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M24 1H0v26h1l-1 .001v.026a2.256 2.256 0 0 0 .01.185 4.318 4.318 0 0 0 .563 1.792C1.194 30.064 2.399 31 4.5 31H17v-2H8.429a4.32 4.32 0 0 0 .57-1.927v-.062L9 27.005v-.003S9 27 8 27h1V16h21v3h2v-5H7v12.995l-.003.05a2.32 2.32 0 0 1-.298.95C6.442 28.436 5.898 29 4.5 29c-1.398 0-1.942-.564-2.199-1.004a2.32 2.32 0 0 1-.3-1.001L2 26.992V3h20v3h2V1Z"}),l("path",{d:"M23 21v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"}),l("path",{fillRule:"evenodd",d:"M24 32a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm0-2a5 5 0 1 0 0-10 5 5 0 0 0 0 10Z"}))},bst=yst;var eR={};J(eR,{icon:()=>Sst});var cxr=T(z());var wst=["title","titleId"];function Goe(){return Goe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function xst(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}var _st=function(t){var r=t.title,n=t.titleId,o=Ost(t,wst);return l("svg",Goe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m11.276 29 .594 2H0l7.621-14.29.811 2.73L3.333 29h7.943ZM28.92 31l-4.987-16.598A16 16 0 0 0 8.688 3l1.8 6H8.4L6 1h2.607a18 18 0 0 1 17.241 12.828L31 31h-2.08Z"}),l("path",{d:"M12.037 14.02 16.492 29h6.827l-2.333-7.849a10 10 0 0 0-8.949-7.13ZM9.35 12h2.05a12 12 0 0 1 11.503 8.581L26 31H15L9.35 12Z",className:"euiIcon__fillSecondary"}))},Sst=_st;var tR={};J(tR,{icon:()=>jst});var dxr=T(z());var Ist=["title","titleId"];function Joe(){return Joe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Pst(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}var kst=function(t){var r=t.title,n=t.titleId,o=Est(t,Ist);return l("svg",Joe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M29 9H3a3 3 0 0 1-3-3V3a3 3 0 0 1 3-3h26a3 3 0 0 1 3 3v3a3 3 0 0 1-3 3ZM3 2a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h26a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Z"}),l("path",{d:"M29 32H3a3 3 0 0 1-3-3V14a3 3 0 0 1 3-3h26a3 3 0 0 1 3 3v15a3 3 0 0 1-3 3ZM3 13a1 1 0 0 0-1 1v15a1 1 0 0 0 1 1h26a1 1 0 0 0 1-1V14a1 1 0 0 0-1-1H3Z",className:"euiIcon__fillSecondary"}),l("path",{d:"m7.29 17.71 3.3 3.29-3.3 3.29 1.42 1.42 4.7-4.71-4.7-4.71zM15 24h9v2h-9z"}))},jst=kst;var rR={};J(rR,{icon:()=>Rst});var hxr=T(z());var Tst=["title","titleId"];function Xoe(){return Xoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Mst(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}var Ast=function(t){var r=t.title,n=t.titleId,o=Cst(t,Tst);return l("svg",Xoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M0 0v16h8.7l5.3-6V0H0zm2 2h10v7H7v5H2V2zm8.45 9L9 12.64V11h1.45zM18 16v16h8.7l5.3-6V16H18zm2 2h10v7h-5v5h-5V18zm8.45 9L27 28.64V27h1.45z"}),l("path",{d:"M5 18H3c0 6.075 4.925 11 11 11h2v-2h-2a9 9 0 0 1-9-9zM18 3h-2v2h2a9 9 0 0 1 9 9h2c0-6.075-4.925-11-11-11z",className:"euiIcon__fillSecondary"}))},Rst=Ast;var nR={};J(nR,{icon:()=>Bst});var vxr=T(z());var Dst=["title","titleId"];function Koe(){return Koe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Nst(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}var Fst=function(t){var r=t.title,n=t.titleId,o=Lst(t,Dst);return l("svg",Koe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M29 9H3a3 3 0 0 1-3-3V3a3 3 0 0 1 3-3h26a3 3 0 0 1 3 3v3a3 3 0 0 1-3 3ZM3 2a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h26a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Z"}),l("path",{d:"M12 20H3a3 3 0 0 1-3-3v-3a3 3 0 0 1 3-3h9a3 3 0 0 1 3 3v3a3 3 0 0 1-3 3Zm-9-7a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1H3Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M12 31H3a3 3 0 0 1-3-3v-3a3 3 0 0 1 3-3h9a3 3 0 0 1 3 3v3a3 3 0 0 1-3 3Zm-9-7a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1H3Z"}),l("path",{d:"M29 31h-9a3 3 0 0 1-3-3V14a3 3 0 0 1 3-3h9a3 3 0 0 1 3 3v14a3 3 0 0 1-3 3Zm-9-18a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1V14a1 1 0 0 0-1-1h-9Z",className:"euiIcon__fillSecondary"}))},Bst=Fst;var oR={};J(oR,{icon:()=>$st});var yxr=T(z());var zst=["title","titleId"];function Yoe(){return Yoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Hst(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}var Vst=function(t){var r=t.title,n=t.titleId,o=Wst(t,zst);return l("svg",Yoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M21 28h-2v-8.49l.6-.26A9 9 0 0 0 21 3.52V11H11V3.52a9 9 0 0 0 1.4 15.73l.6.26V28h-2v-7.21A11 11 0 0 1 11.6.92L13 .31V9h6V.31l1.4.61a11 11 0 0 1 .6 19.87V28Z"}),l("path",{d:"M11 30h10v2H11z",className:"euiIcon__fillSecondary"}))},$st=Vst;var iR={};J(iR,{icon:()=>Jst});var wxr=T(z());var Zst=["title","titleId"];function Qoe(){return Qoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ust(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}var Gst=function(t){var r=t.title,n=t.titleId,o=qst(t,Zst);return l("svg",Qoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m8.33 23.67 4.79-10.55 10.55-4.79-4.79 10.55-10.55 4.79Zm6.3-9-2.28 5 5-2.28 2.28-5-5 2.28Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M16 0C7.163 0 0 7.163 0 16s7.163 16 16 16 16-7.163 16-16A16 16 0 0 0 16 0Zm1 29.95V28h-2v1.95A14 14 0 0 1 2.05 17H4v-2H2.05A14 14 0 0 1 15 2.05V4h2V2.05A14 14 0 0 1 29.95 15H28v2h1.95A14 14 0 0 1 17 29.95Z"}))},Jst=Gst;var aR={};J(aR,{icon:()=>elt});var xxr=T(z());var Xst=["title","titleId"];function eie(){return eie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Yst(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}var Qst=function(t){var r=t.title,n=t.titleId,o=Kst(t,Xst);return l("svg",eie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 22h3v2H1V1h23v5h-2V3H3z",className:"euiIcon__fillSecondary"}),l("path",{d:"M15.228 29c1.492-1.678 1.353-2.859.009-5.654-.049-.1-.049-.1-.097-.203-1.369-2.855-1.626-4.491-.325-6.582 2.796-4.498 9.514-2.642 14.185 2.317V10H10v19h5.228Zm2.47 0H29v-6.983c-3.88-5.406-10.376-7.795-12.487-4.4-.83 1.336-.669 2.37.43 4.662l.097.2c1.352 2.814 1.731 4.63.659 6.521ZM31 8v23H8V8h23Z"}))},elt=Qst;var sR={};J(sR,{icon:()=>ilt});var Sxr=T(z());var tlt=["title","titleId"];function tie(){return tie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nlt(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}var olt=function(t){var r=t.title,n=t.titleId,o=rlt(t,tlt);return l("svg",tie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 18h16v2H8zM8 13h9v2H8zM8 23h16v2H8z",className:"euiIcon__fillSecondary"}),l("path",{d:"M21.41 0H5a3 3 0 0 0-3 3v26a3 3 0 0 0 3 3h22a3 3 0 0 0 3-3V8.59L21.41 0ZM22 3.41 26.59 8H22V3.41ZM27 30H5a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h15v8h8v19a1 1 0 0 1-1 1Z"}))},ilt=olt;var lR={};J(lR,{icon:()=>clt});var Exr=T(z());var alt=["title","titleId"];function rie(){return rie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function llt(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}var ult=function(t){var r=t.title,n=t.titleId,o=slt(t,alt);return l("svg",rie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M21 2.82 16 .038 11 2.82v2.289l5-2.782 5 2.782v-2.29Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M21 7.282 16 4.5l-5 2.782V9.57l5-2.781 5 2.781V7.282Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M7 5.045 2 7.827v15.577l14 7.788 14-7.788V7.827l-5-2.782v2.289l3 1.669v13.225l-12 6.676-12-6.676V9.003l3-1.669V5.045Z"}),l("path",{fillRule:"evenodd",d:"M22 12.5 16 9l-6 3.5v7l6 3.5 6-3.5v-7Zm-9.974 1.205L16 11.387l3.974 2.318v4.59L16 20.613l-3.974-2.318v-4.59Z",className:"euiIcon__fillSecondary",clipRule:"evenodd"}))},clt=ult;var uR={};J(uR,{icon:()=>mlt});var kxr=T(z());var plt=["title","titleId"];function nie(){return nie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function flt(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}var hlt=function(t){var r=t.title,n=t.titleId,o=dlt(t,plt);return l("svg",nie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m29.014 23.89 2.296 1.145L16 32.101.53 24.961l2.49-1.056 2.453 1.132-.003.002L16 29.899l10.69-4.934-.003-.001 2.327-1.074Zm-4.972-7.482 7.268 3.627L16 27.101.53 19.961l7.668-3.252c.392.486.838 1.02 1.34 1.604L5.47 20.039 16 24.899l10.69-4.934-3.954-1.973c.493-.58.928-1.107 1.306-1.584Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M18 9a2 2 0 1 0-4 0 2 2 0 0 0 4 0Zm2 0a4 4 0 1 1-8 0 4 4 0 0 1 8 0Zm-3.268 12.681-.732.787-.732-.787c-3.557-3.824-5.817-6.462-6.81-7.96A8.746 8.746 0 0 1 7 8.875C7 3.97 11.033 0 16 0s9 3.97 9 8.875a8.746 8.746 0 0 1-1.459 4.846c-.992 1.498-3.252 4.136-6.809 7.96Zm5.142-9.064A6.747 6.747 0 0 0 23 8.875C23 5.081 19.87 2 16 2S9 5.081 9 8.875c0 1.349.394 2.636 1.126 3.742.846 1.277 2.812 3.593 5.874 6.912 3.062-3.32 5.028-5.635 5.874-6.912Z"}))},mlt=hlt;var cR={};J(cR,{icon:()=>wlt});var Txr=T(z());var vlt=["title","titleId"];function oie(){return oie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ylt(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}var blt=function(t){var r=t.title,n=t.titleId,o=glt(t,vlt);return l("svg",oie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M24 20a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm-8.2-5.62A4 4 0 1 1 18 1.06a4 4 0 0 1-2.2 7.32zm0-6a2 2 0 1 0 .01 0h-.01zm.01 29.24a4 4 0 1 1-.083-8 4 4 0 0 1 .083 8zm0-6a2 2 0 1 0 .39 0 2 2 0 0 0-.4 0h.01z",className:"euiIcon__fillSecondary"}),l("path",{d:"M18 17v-2h-6.14a4 4 0 0 0-.86-1.64l2.31-3.44-1.68-1.12-2.31 3.44A4 4 0 0 0 8 12a4 4 0 1 0 0 8 4 4 0 0 0 1.32-.24l2.31 3.44 1.66-1.12L11 18.64a4 4 0 0 0 .86-1.64H18ZM6 16a2 2 0 1 1 4 0 2 2 0 0 1-4 0Z"}))},wlt=blt;var pR={};J(pR,{icon:()=>Ilt});var Mxr=T(z());var Olt=["title","titleId"];function iie(){return iie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _lt(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}var Slt=function(t){var r=t.title,n=t.titleId,o=xlt(t,Olt);return l("svg",iie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.727 2.91V.97c-1.357 0-4.18 0-5.818 1.94-.97 1.182-1.328 2.908-.97 4.983.563 3.307.97 6.332.301 7.157-.3.31-.97.465-2.24.465v1.94c1.27 0 1.94.155 2.25.494.698.824.262 3.879-.3 7.156-.35 2.124-.01 3.802.96 4.956C5.527 32 8.35 32 9.726 32v-1.94c-1.144 0-3.287 0-4.315-1.221a4.112 4.112 0 0 1-.533-3.414c.843-5.042.97-7.37-.136-8.727-.068-.077-.145-.136-.213-.203-.068-.068.145-.127.213-.204 1.144-1.367.97-3.695.136-8.727a4.112 4.112 0 0 1 .543-3.414C6.44 2.91 8.583 2.91 9.727 2.91zM32.03 17.454v-1.94c-1.27 0-1.94-.155-2.25-.494-.698-.825-.261-3.88.301-7.157.35-2.123 0-3.801-.97-4.984C27.493.94 24.672.94 23.294.94v1.97c1.145 0 3.288 0 4.315 1.22a4.112 4.112 0 0 1 .544 3.414c-.844 5.043-.97 7.37.135 8.728.068.077.146.135.214.203.067.068-.146.126-.214.204-1.144 1.367-.97 3.694-.135 8.727.329 1.162.13 2.41-.544 3.413-1.018 1.242-3.16 1.242-4.305 1.242V32c1.358 0 4.18 0 5.818-1.94.97-1.182 1.329-2.908.97-4.984-.563-3.306-.97-6.332-.3-7.156.3-.31.969-.465 2.24-.465z"}),l("path",{d:"M26.212 15.515h-2.007a7.758 7.758 0 0 0-6.72-6.72V6.788h-1.94v2.007a7.758 7.758 0 0 0-6.72 6.72H6.818v1.94h2.007a7.758 7.758 0 0 0 6.72 6.72v2.007h1.94v-2.007a7.758 7.758 0 0 0 6.72-6.72h2.007v-1.94Zm-8.727 6.7v-1.851h-1.94v1.852a5.818 5.818 0 0 1-4.76-4.761h1.851v-1.94h-1.852a5.818 5.818 0 0 1 4.761-4.761v1.852h1.94v-1.852a5.818 5.818 0 0 1 4.761 4.761h-1.852v1.94h1.852a5.818 5.818 0 0 1-4.761 4.76Z",className:"euiIcon__fillSecondary"}))},Ilt=Slt;var dR={};J(dR,{icon:()=>Tlt});var Rxr=T(z());var Elt=["title","titleId"];function aie(){return aie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function klt(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}var jlt=function(t){var r=t.title,n=t.titleId,o=Plt(t,Elt);return l("svg",aie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.14 15.39a8.058 8.058 0 0 1-2.2-4.043A6.788 6.788 0 0 1 4.198 5.47a6.73 6.73 0 0 1 8.727-.213l1.26-1.464a8.65 8.65 0 0 0-11.277.232A8.727 8.727 0 0 0 .068 11.6a10.172 10.172 0 0 0 2.793 5.275l1.28-1.484Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M15.515 31.274 4.548 18.454 15.855 4.763a8.67 8.67 0 0 1 12.266-.746 8.727 8.727 0 0 1 2.91 7.205c-.243 2.695-2.037 4.732-3.482 6.37L15.515 31.275Zm-8.427-12.82 8.427 9.862 10.55-11.995c1.32-1.503 2.822-3.21 3.007-5.265a6.788 6.788 0 0 0-2.24-5.586 6.73 6.73 0 0 0-9.504.563L7.088 18.455Z"}))},Tlt=jlt;var fR={};J(fR,{icon:()=>Dlt});var Lxr=T(z());var Clt=["title","titleId"];function sie(){return sie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Alt(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}var Rlt=function(t){var r=t.title,n=t.titleId,o=Mlt(t,Clt);return l("svg",sie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),l("path",{d:"M4 32a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-4a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm12 4a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-4a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm12 4a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-4a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM23 8V6h-2.1a5 5 0 0 0-.73-1.75l1.49-1.49-1.42-1.42-1.49 1.49A5 5 0 0 0 17 2.1V0h-2v2.1a5 5 0 0 0-1.75.73l-1.49-1.49-1.42 1.42 1.49 1.49A5 5 0 0 0 11.1 6H9v2h2.1a5 5 0 0 0 .73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 0 0 1.76.74V14h2v-2.1a5 5 0 0 0 1.75-.73l1.49 1.49 1.41-1.41-1.48-1.5A5 5 0 0 0 20.9 8H23zm-7 2a3 3 0 1 1 0-6 3 3 0 0 1 0 6z",className:"euiIcon__fillSecondary"}),l("path",{d:"M16 8a1 1 0 0 1-1-1 1.39 1.39 0 0 1 0-.2.65.65 0 0 1 .06-.18.74.74 0 0 1 .09-.18 1.61 1.61 0 0 1 .12-.15.93.93 0 0 1 .33-.21 1 1 0 0 1 1.09.21l.12.15a.78.78 0 0 1 .09.18.62.62 0 0 1 .1.18 1.27 1.27 0 0 1 0 .2 1 1 0 0 1-1 1Z"}))},Dlt=Rlt;var hR={};J(hR,{icon:()=>zlt});var Fxr=T(z());var Llt=["title","titleId"];function lie(){return lie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Flt(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}var Blt=function(t){var r=t.title,n=t.titleId,o=Nlt(t,Llt);return l("svg",lie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M20 14h-8a3 3 0 0 1-3-3V3a3 3 0 0 1 3-3h8a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3ZM12 2a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1h-8ZM17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),l("path",{d:"M4 32a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-4a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm12 4a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-4a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm12 4a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-4a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM13 4h6v2h-6zM13 8h6v2h-6z",className:"euiIcon__fillSecondary"}))},zlt=Blt;var mR={};J(mR,{icon:()=>Zlt});var zxr=T(z());var Wlt=["title","titleId"];function uie(){return uie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Vlt(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}var $lt=function(t){var r=t.title,n=t.titleId,o=Hlt(t,Wlt);return l("svg",uie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M32 26v-2h-2.1a5 5 0 0 0-.73-1.75l1.49-1.49-1.41-1.41-1.49 1.49A5 5 0 0 0 26 20.1V18h-2v2.1a5 5 0 0 0-1.75.73l-1.49-1.49-1.41 1.41 1.49 1.49A5 5 0 0 0 20.1 24H18v2h2.1a5 5 0 0 0 .73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 0 0 1.76.74V32h2v-2.1a5 5 0 0 0 1.75-.73l1.49 1.49 1.41-1.41-1.49-1.49A5 5 0 0 0 29.9 26H32Zm-7 2a3 3 0 1 1 0-6 3 3 0 0 1 0 6Z"}),l("path",{d:"M25.71 24.29a1 1 0 0 0-1.09-.21 1.15 1.15 0 0 0-.33.21.93.93 0 0 0-.21.33 1 1 0 0 0 1.3 1.3 1.15 1.15 0 0 0 .33-.21 1 1 0 0 0 .21-1.09.94.94 0 0 0-.21-.33Z"}),l("path",{d:"M5 6h16v2H5zM5 12h16v2H5zM5 18h10v2H5zM5 24h8v2H5z",className:"euiIcon__fillSecondary"}),l("path",{d:"M16 32H3a3 3 0 0 1-3-3V3a3 3 0 0 1 3-3h20a3 3 0 0 1 3 3v13h-2V3a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v26a1 1 0 0 0 1 1h13v2Z"}))},Zlt=$lt;var vR={};J(vR,{icon:()=>Xlt});var Hxr=T(z());var qlt=["title","titleId"];function cie(){return cie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Glt(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}var Jlt=function(t){var r=t.title,n=t.titleId,o=Ult(t,qlt);return l("svg",cie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m23.793 14.293 1.414 1.414-6.408 6.409-3.75-3.25-4.342 4.341-1.414-1.414 5.658-5.659 3.75 3.25 5.092-5.091ZM12 11v5l-2 2v-7h2Zm10-6v8l-2 2V5h2Zm-5 3v7l-2-2V8h2Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M17 0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-3.782 0-7.238-1.4-9.876-3.71l-5.417 5.417-1.414-1.414 5.417-5.417A14.943 14.943 0 0 1 2 15c0-1.05.108-2.074.313-3.062l1.906.672C4.075 13.385 4 14.184 4 15c0 7.18 5.82 13 13 13s13-5.82 13-13S24.18 2 17 2c-1.002 0-1.978.113-2.915.328l-.75-1.877A15.031 15.031 0 0 1 17 0ZM9.621 1.937l.75 1.877a13.062 13.062 0 0 0-4.82 5.024l-1.907-.673a15.068 15.068 0 0 1 5.977-6.228Z"}))},Xlt=Jlt;var gR={};J(gR,{icon:()=>tut});var $xr=T(z());var Klt=["title","titleId"];function pie(){return pie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Qlt(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}var eut=function(t){var r=t.title,n=t.titleId,o=Ylt(t,Klt);return l("svg",pie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1 8c3.983 0 7.732 1.013 11.001 2.797v2.312A20.887 20.887 0 0 0 2 10.023v11.025c4.85.462 9.27 4.183 9.955 8.691l.035.261H12v2h-1.938l-.018-1.236c-.116-4.015-4.336-7.631-8.793-7.76L0 22.986V8h1zm13-8h1c9.28 0 16.825 7.437 16.997 16.677L32 17v15h-2V17c0-7.84-6.014-14.274-13.68-14.943L16 2.033v7.681l-2-1.143V0h1-1z"}),l("path",{d:"M26.997 30.636 27.009 32H14V11.305l1.483.82c6.994 3.861 11.382 10.735 11.514 18.51zm-2.048-1.04C24.505 23.556 21.205 18.2 16 14.771V30h8.974l-.025-.404z",className:"euiIcon__fillSecondary"}))},tut=eut;var yR={};J(yR,{icon:()=>aut});var qxr=T(z());var rut=["title","titleId"];function die(){return die=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function out(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}var iut=function(t){var r=t.title,n=t.titleId,o=nut(t,rut);return l("svg",die({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 21a5 5 0 1 1 0-10 5 5 0 0 1 0 10Zm0-8a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M20 32h-8v-4.06a1 1 0 0 0-1.61-.67l-2.88 2.87-5.65-5.65 2.87-2.87a.92.92 0 0 0 .2-1 .93.93 0 0 0-.86-.6H0V12h4.06a.92.92 0 0 0 .85-.58.94.94 0 0 0-.19-1L1.86 7.51l5.65-5.65 2.87 2.87A1 1 0 0 0 12 4.06V0h8v4.06a1 1 0 0 0 1.61.67l2.87-2.87 5.66 5.66-2.87 2.87a.92.92 0 0 0-.2 1 .93.93 0 0 0 .86.6H32v8h-4.06a.92.92 0 0 0-.85.58.94.94 0 0 0 .19 1l2.87 2.87-5.66 5.66-2.87-2.87a1 1 0 0 0-1.61.67L20 32Zm-6-2h4v-2.06a3 3 0 0 1 5-2.08l1.46 1.46 2.83-2.83L25.86 23a3 3 0 0 1 2.08-5H30v-4h-2.06a3 3 0 0 1-2.08-5l1.46-1.46-2.83-2.85L23 6.14a3 3 0 0 1-5-2.08V2h-4v2.06a3 3 0 0 1-5 2.08L7.51 4.69 4.69 7.51 6.14 9a3 3 0 0 1-2.08 5H2v4h2.06a3 3 0 0 1 2.08 5l-1.45 1.49 2.83 2.83L9 25.86a3 3 0 0 1 5 2.08V30Z"}))},aut=iut;var bR={};J(bR,{icon:()=>put});var Gxr=T(z());var sut=["title","titleId"];function fie(){return fie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uut(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}var cut=function(t){var r=t.title,n=t.titleId,o=lut(t,sut);return l("svg",fie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 0 1-16 16Zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0 0 16 2Z"}),l("path",{d:"M28 16h-2c0-5.523-4.477-10-10-10S6 10.477 6 16H4C4 9.373 9.373 4 16 4s12 5.373 12 12Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M21.71 11.71 20.3 10.3 18 12.57a4 4 0 0 0-2-.57 4 4 0 1 0 4 4 4 4 0 0 0-.57-2l2.28-2.29ZM16 18a2 2 0 1 1 0-4 2 2 0 0 1 0 4Z"}))},put=cut;var wR={};J(wR,{icon:()=>vut});var Xxr=T(z());var dut=["title","titleId"];function hie(){return hie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hut(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}var mut=function(t){var r=t.title,n=t.titleId,o=fut(t,dut);return l("svg",hie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M30 19.092v12.88H2v-5.386l6.747-6.747.708.708c.236.236.48.463.733.68L4 27.414v2.558h24v-8.91c.186-.166.369-.339.546-.516L30 19.092zm-20.85-3.19A10.955 10.955 0 0 1 8 11C8 4.925 12.925 0 19 0s11 4.925 11 11c0 1.76-.414 3.425-1.15 4.9l-1.51-1.51A8.973 8.973 0 0 0 28 11a9 9 0 1 0-17.34 3.391l-1.51 1.51z"}),l("path",{d:"M19 20a8.96 8.96 0 0 0 5.618-1.968l-4.202-4.204a2 2 0 0 0-2.828 0l-4.205 4.205A8.96 8.96 0 0 0 19 20zm-2.826-7.586a4 4 0 0 1 5.656 0l5.656 5.657-.707.707A10.967 10.967 0 0 1 19 22a10.967 10.967 0 0 1-7.778-3.221l-.707-.707 5.659-5.658z",className:"euiIcon__fillSecondary"}))},vut=mut;var OR={};J(OR,{icon:()=>Out});var Yxr=T(z());var gut=["title","titleId"];function mie(){return mie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function but(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}var wut=function(t){var r=t.title,n=t.titleId,o=yut(t,gut);return l("svg",mie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10 18v.56a1 1 0 0 1-.68.95L3 21.61V10a1 1 0 0 1 .4-.8l3.2-2.4-1.2-1.6-3.2 2.4A3 3 0 0 0 1 10v12a3 3 0 0 0 1.2 2.4l3.2 2.4 1.2-1.6-2.47-1.85 5.82-1.95A3 3 0 0 0 12 18.56V18h-2zM29.8 7.6l-3.2-2.4-1.2 1.6 3.2 2.4a1 1 0 0 1 .4.8v11.61l-6.32-2.11a1 1 0 0 1-.68-.95V18h-2v.56a3 3 0 0 0 2.05 2.85l5.82 1.94-2.47 1.85 1.2 1.6 3.2-2.4A3 3 0 0 0 31 22V10a3 3 0 0 0-1.2-2.4z",className:"euiIcon__fillSecondary"}),l("path",{d:"M11 6A3 3 0 0 1 8.88.88a3.07 3.07 0 0 1 4.24 0A3 3 0 0 1 11 6zm0-4a1 1 0 1 0-.012 2A1 1 0 0 0 11 2zm0 30a3 3 0 0 1-2.12-5.12 3.07 3.07 0 0 1 4.24 0A3 3 0 0 1 11 32zm0-4a1 1 0 1 0-.012 2A1 1 0 0 0 11 28zm0-12a3 3 0 0 1-2.12-5.12 3.07 3.07 0 0 1 4.24 0A3 3 0 0 1 11 16zm0-4a1 1 0 1 0-.012 2A1 1 0 0 0 11 12zm10-6A3 3 0 0 1 18.88.88a3.07 3.07 0 0 1 4.24 0A3 3 0 0 1 21 6zm0-4a1 1 0 1 0-.012 2A1 1 0 0 0 21 2zm0 30a3 3 0 0 1-2.12-5.12 3.07 3.07 0 0 1 4.24 0A3 3 0 0 1 21 32zm0-4a1 1 0 1 0-.012 2A1 1 0 0 0 21 28zm0-12a3 3 0 0 1-2.12-5.12 3.07 3.07 0 0 1 4.24 0A3 3 0 0 1 21 16zm0-4a1 1 0 1 0-.012 2A1 1 0 0 0 21 12z"}))},Out=wut;var xR={};J(xR,{icon:()=>Eut});var e_r=T(z());var xut=["title","titleId"];function vie(){return vie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Sut(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}var Iut=function(t){var r=t.title,n=t.titleId,o=_ut(t,xut);return l("svg",vie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.81 15.19A8.94 8.94 0 0 1 15.62 3.86l.38.42.38-.42a8.94 8.94 0 0 1 14.26 10.68l-1.7-1.07a6.94 6.94 0 0 0-11.07-8.28L16 7.29l-1.87-2.1A6.94 6.94 0 0 0 3.41 14l-1.6 1.19ZM16 31.18l-7.74-8.51 1.48-1.34L16 28.21l6.26-6.88 1.48 1.34z"}),l("path",{d:"m16.16 23.29-4.1-7.17L10.62 19H0v-2h9.38l2.56-5.12 3.9 6.83 4.13-10.32L23.66 17H32v2h-9.66l-2.31-5.39z",className:"euiIcon__fillSecondary"}))},Eut=Iut;var _R={};J(_R,{icon:()=>Cut});var r_r=T(z());var Put=["title","titleId"];function gie(){return gie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jut(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}var Tut=function(t){var r=t.title,n=t.titleId,o=kut(t,Put);return l("svg",gie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M25 2h-5V0h-2v2h-3V0h-2v2h-3V0H8v2H3v26h22V2Zm-2 24H5V4h3v2h2V4h3v2h2V4h3v2h2V4h3v22Z"}),l("path",{d:"M27 7v23H8v2h21V7z"}),l("path",{d:"M8 12h12v2H8zM8 17h12v2H8z",className:"euiIcon__fillSecondary"}))},Cut=Tut;var SR={};J(SR,{icon:()=>Lut});var o_r=T(z());var Mut=["title","titleId"];function yie(){return yie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Rut(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}var Dut=function(t){var r=t.title,n=t.titleId,o=Aut(t,Mut);return l("svg",yie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 20a4 4 0 1 1 0-8 4 4 0 0 1 0 8Zm0-6a2 2 0 1 0 0 4 2 2 0 0 0 0-4Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M8 4a4 4 0 1 0-4 4 4 4 0 0 0 2-.57l5.27 5.27 1.41-1.41L7.43 6A4 4 0 0 0 8 4zM4 6a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm16.71 6.71L26 7.43A4 4 0 0 0 28 8a4 4 0 1 0-4-4 4 4 0 0 0 .57 2l-5.27 5.27 1.41 1.44zM28 2a2 2 0 1 1 0 4 2 2 0 0 1 0-4zM11.29 19.29 6 24.57A4 4 0 0 0 4 24a4 4 0 1 0 4 4 4 4 0 0 0-.57-2l5.27-5.27-1.41-1.44zM4 30a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm24-6a4 4 0 0 0-2 .57l-5.27-5.27-1.41 1.41L24.57 26a4 4 0 0 0-.57 2 4 4 0 1 0 4-4zm0 6a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"}))},Lut=Dut;var IR={};J(IR,{icon:()=>Wut});var a_r=T(z());var Nut=["title","titleId"];function bie(){return bie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function But(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}var zut=function(t){var r=t.title,n=t.titleId,o=Fut(t,Nut);return l("svg",bie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M29 12a3 3 0 0 0-3 3h-4a3 3 0 0 0-3-3h-6a3 3 0 0 0-3 3H6a3 3 0 0 0-3-3H0v14h3a3 3 0 0 0 3-3h4a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3h4a3 3 0 0 0 3 3h3V12h-3ZM3 24H2V14h1a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1Zm17-3v2a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-2H6v-4h6v-2a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2h6v4h-6Zm10 3h-1a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1h1v10Z"}),l("path",{d:"M22 6H10v2h5v2h2V8h5z",className:"euiIcon__fillSecondary"}))},Wut=zut;var ER={};J(ER,{icon:()=>qut});var l_r=T(z());var Hut=["title","titleId"];function wie(){return wie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $ut(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}var Zut=function(t){var r=t.title,n=t.titleId,o=Vut(t,Hut);return l("svg",wie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 0 1-16 16Zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0 0 16 2Z"}),l("path",{d:"M15 4h2v9.17A3.009 3.009 0 0 1 18.83 15H26v2h-7.17A3.001 3.001 0 1 1 15 13.17V4Zm1 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z",className:"euiIcon__fillSecondary"}))},qut=Zut;var PR={};J(PR,{icon:()=>Kut});var c_r=T(z());var Uut=["title","titleId"];function Oie(){return Oie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Jut(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}var Xut=function(t){var r=t.title,n=t.titleId,o=Gut(t,Uut);return l("svg",Oie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M25 5h-.17v2H25a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h.17V5H7a3 3 0 0 0-3 3v20a3 3 0 0 0 3 3h18a3 3 0 0 0 3-3V8a3 3 0 0 0-3-3Z"}),l("path",{d:"M23 3h-3V0h-8v3H9v6h14V3Zm-2 4H11V5h3V2h4v3h3v2Z"}),l("path",{d:"M10 13h12v2H10zM10 18h12v2H10zM10 23h12v2H10z",className:"euiIcon__fillSecondary"}))},Kut=Xut;var kR={};J(kR,{icon:()=>rct});var d_r=T(z());var Yut=["title","titleId"];function xie(){return xie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ect(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}var tct=function(t){var r=t.title,n=t.titleId,o=Qut(t,Yut);return l("svg",xie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M20.38 7.001 17 9.619V0h-2v9.619l-3.37-2.618-1.25 1.513L16 12.878l5.63-4.364z",className:"euiIcon__fillSecondary"}),l("path",{d:"m21.06.165-1.11 1.61 9.25 5.983L16 16.29 2.8 7.758l9.25-5.983-1.1-1.61L0 7.234v13.653l16 10.337 16-10.337V7.234L21.06.164ZM2 9.57l13 8.407v10.279L2 19.84V9.57Zm15 18.676V17.978l13-8.407V19.85l-13 8.397Z"}))},rct=tct;var jR={};J(jR,{icon:()=>sct});var h_r=T(z());var nct=["title","titleId"];function _ie(){return _ie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ict(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}var act=function(t){var r=t.title,n=t.titleId,o=oct(t,nct);return l("svg",_ie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.63 8h7.38v2h-7.38z",className:"euiIcon__fillSecondary"}),l("path",{d:"M7 8h3.19v2H7z"}),l("path",{d:"M7 16h7.38v2H7z",className:"euiIcon__fillSecondary"}),l("path",{d:"M15.81 16H19v2h-3.19zM7 12h9v2H7z"}),l("path",{d:"M13 0C5.82 0 0 5.82 0 13s5.82 13 13 13 13-5.82 13-13A13 13 0 0 0 13 0Zm0 24C6.925 24 2 19.075 2 13S6.925 2 13 2s11 4.925 11 11-4.925 11-11 11ZM22.581 23.993l1.414-1.414 7.708 7.708-1.414 1.414z"}))},sct=act;var TR={};J(TR,{icon:()=>dct});var v_r=T(z());var lct=["title","titleId"];function Sie(){return Sie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cct(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}var pct=function(t){var r=t.title,n=t.titleId,o=uct(t,lct);return l("svg",Sie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m14 32-.36-.14A21.07 21.07 0 0 1 0 12.07V5.44L14 .06l14 5.38v6.63a21.07 21.07 0 0 1-13.64 19.78L14 32ZM2 6.82v5.25a19.08 19.08 0 0 0 12 17.77 19.08 19.08 0 0 0 12-17.77V6.82L14 2.2 2 6.82Z"}),l("path",{d:"M9 17.83h2V23H9zM11 10.18V7H9v3.18a3 3 0 1 0 2 0ZM10 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2ZM17 7h2v5.17h-2zM21 17a3 3 0 1 0-4 2.82V23h2v-3.18A3 3 0 0 0 21 17Zm-3 1a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z",className:"euiIcon__fillSecondary"}))},dct=pct;var CR={};J(CR,{icon:()=>gct});var y_r=T(z());var fct=["title","titleId"];function Iie(){return Iie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mct(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}var vct=function(t){var r=t.title,n=t.titleId,o=hct(t,fct);return l("svg",Iie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 10h4v2H5v7.928c0 1.299.808 2.795 2.88 4.48 1.83 1.489 4.524 3.02 8.12 4.584V26h2v5.992l-1.38-.567c-4.372-1.797-7.724-3.613-10-5.465C4.358 24.122 3 22.114 3 19.928V10z"}),l("path",{d:"M9 10h9v14l-1.272-.458c-1.367-.494-3.23-1.314-4.768-2.39C10.484 20.118 9 18.636 9 16.761V10zm1.895 1.876v4.887c0 .877.744 1.867 2.158 2.856.937.656 2.038 1.219 3.052 1.657v-9.4h-5.21z",className:"euiIcon__fillSecondary"}),l("path",{d:"M29 1H9v7h2V2.966h16V16.73c0 .558-.245 1.128-.756 1.72-.515.596-1.256 1.158-2.12 1.668-1.381.818-2.961 1.434-4.124 1.817V24c1.26-.378 3.334-1.12 5.155-2.197.965-.57 1.905-1.261 2.612-2.08.712-.822 1.233-1.827 1.233-2.992V1z"}))},gct=vct;var MR={};J(MR,{icon:()=>xct});var w_r=T(z());var yct=["title","titleId"];function Eie(){return Eie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wct(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}var Oct=function(t){var r=t.title,n=t.titleId,o=bct(t,yct);return l("svg",Eie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 4h6v2H4zM22 4h6v2h-6zM4 22h6v2H4z",className:"euiIcon__fillSecondary"}),l("path",{d:"M0 14h14V0H0v14zM2 2h10v10H2V2zm16-2v14h14V0H18zm12 12H20V2h10v10zM0 32h14V18H0v14zm2-12h10v10H2V20zm16 12h14V18H18v14zm2-12h10v10H20V20z"}),l("path",{d:"M22 22h6v2h-6z",className:"euiIcon__fillSecondary"}))},xct=Oct;var AR={};J(AR,{icon:()=>Pct});var x_r=T(z());var _ct=["title","titleId"];function Pie(){return Pie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ict(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}var Ect=function(t){var r=t.title,n=t.titleId,o=Sct(t,_ct);return l("svg",Pie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M18 6h9v2h-9zM5 6h9v2H5zM5 12h9v2H5zM18 12h9v2h-9zM5 18h9v2H5zM18 18h9v2h-9zM18 24h9v2h-9zM5 24h9v2H5z",className:"euiIcon__fillSecondary"}),l("path",{d:"M29 32H3a3 3 0 0 1-3-3V3a3 3 0 0 1 3-3h26a3 3 0 0 1 3 3v26a3 3 0 0 1-3 3ZM3 2a1 1 0 0 0-1 1v26a1 1 0 0 0 1 1h26a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Z"}))},Pct=Ect;var RR={};J(RR,{icon:()=>Mct});var S_r=T(z());var kct=["title","titleId"];function kie(){return kie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Tct(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}var Cct=function(t){var r=t.title,n=t.titleId,o=jct(t,kct);return l("svg",kie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 4v20.34L16 32l12-7.64V4H4Zm22 2v4h-4a3 3 0 0 0-3 3v5h-6v-5a3 3 0 0 0-3-3H6V6h20Zm-7.87 14L16 22.52 13.87 20h4.26ZM6 12h4a1 1 0 0 1 1 1v6.7l3.69 4.37-2.58 3.06L6 23.24V12Zm7.81 16.22 2.19-2.6 2.19 2.6L16 29.61l-2.19-1.39Zm6.08-1.09-2.58-3.06L21 19.7V13a1 1 0 0 1 1-1h4v11.24l-6.11 3.89Z"}),l("path",{d:"M4 0h24v2H4z",className:"euiIcon__fillSecondary"}))},Mct=Cct;var DR={};J(DR,{icon:()=>Nct});var E_r=T(z());var Act=["title","titleId"];function jie(){return jie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Dct(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}var Lct=function(t){var r=t.title,n=t.titleId,o=Rct(t,Act);return l("svg",jie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 21a5 5 0 1 1 0-10 5 5 0 0 1 0 10Zm0-8a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M27.42 19.69a12 12 0 0 1-23.11-1l2.27-.45-4.32-4.47L0 19.55l2.39-.47a14 14 0 0 0 27 1.23l-1.97-.62zm2.23-6.77a14 14 0 0 0-27-1.23l1.9.62a12 12 0 0 1 23.11 1l-2.27.45 4.32 4.46L32 12.45l-2.35.47z"}))},Nct=Lct;var LR={};J(LR,{icon:()=>Hct});var k_r=T(z());var Fct=["title","titleId"];function Tie(){return Tie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zct(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}var Wct=function(t){var r=t.title,n=t.titleId,o=Bct(t,Fct);return l("svg",Tie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.216 12.377A10.948 10.948 0 0 0 2.181 17H.153a12.941 12.941 0 0 1 2.693-6.118l1.37 1.495Zm2.948-2.703-1.37-1.495A12.94 12.94 0 0 1 13 6v2c-2.144 0-4.144.613-5.836 1.674Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M26 4.414V19c0 7.18-5.82 13-13 13C6.5 32 1.115 27.23.153 21H2.18c.94 5.12 5.427 9 10.819 9 6.075 0 11-4.925 11-11V4.414l-4.293 4.293-1.414-1.414L25 .586l6.707 6.707-1.414 1.414L26 4.414Zm-7.836 9.909 1.472 1.354-7.577 8.235-4.835-4.442 1.353-1.473 3.364 3.09 6.223-6.764Z"}))},Hct=Wct;var NR={};J(NR,{icon:()=>Uct});var T_r=T(z());var Vct=["title","titleId"];function Cie(){return Cie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Zct(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}var qct=function(t){var r=t.title,n=t.titleId,o=$ct(t,Vct);return l("svg",Cie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M19.307 3.21a2.91 2.91 0 1 0-.223 1.94 11.636 11.636 0 0 1 8.232 7.049l1.775-.698a13.576 13.576 0 0 0-9.784-8.291zm-2.822 1.638a.97.97 0 1 1 0-1.939.97.97 0 0 1 0 1.94zm-4.267.805-.717-1.774a13.576 13.576 0 0 0-8.291 9.784 2.91 2.91 0 1 0 1.94.223 11.636 11.636 0 0 1 7.068-8.233zm-8.34 11.802a.97.97 0 1 1 0-1.94.97.97 0 0 1 0 1.94zm12.607 8.727a2.91 2.91 0 0 0-2.599 1.62 11.636 11.636 0 0 1-8.233-7.05l-1.774.717a13.576 13.576 0 0 0 9.813 8.291 2.91 2.91 0 1 0 2.793-3.578zm0 3.879a.97.97 0 1 1 0-1.94.97.97 0 0 1 0 1.94zM32 16.485a2.91 2.91 0 1 0-4.199 2.599 11.636 11.636 0 0 1-7.05 8.232l.718 1.775a13.576 13.576 0 0 0 8.291-9.813A2.91 2.91 0 0 0 32 16.485zm-2.91.97a.97.97 0 1 1 0-1.94.97.97 0 0 1 0 1.94z"}),l("path",{d:"M19.19 16.35a3.879 3.879 0 1 0-5.42 0 4.848 4.848 0 0 0-2.134 4.014v1.939h9.697v-1.94a4.848 4.848 0 0 0-2.143-4.014Zm-4.645-2.774a1.94 1.94 0 1 1 3.88 0 1.94 1.94 0 0 1-3.88 0Zm-.97 6.788a2.91 2.91 0 1 1 5.819 0h-5.818Z",className:"euiIcon__fillSecondary"}))},Uct=qct;var FR={};J(FR,{icon:()=>Yct});var M_r=T(z());var Gct=["title","titleId"];function Mie(){return Mie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Xct(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}var Kct=function(t){var r=t.title,n=t.titleId,o=Jct(t,Gct);return l("svg",Mie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M32 32H4a4 4 0 0 1-4-4V0h2v28a2 2 0 0 0 2 2h28v2Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M6 20h2v7H6zM16 12h2v15h-2zM26 17h2v10h-2z"}),l("path",{d:"M27 6a3 3 0 0 0-2.08.84L20 4.36A2.2 2.2 0 0 0 20 4a3 3 0 0 0-6 0c.001.341.062.68.18 1l-5.6 4.46A3 3 0 0 0 7 9a3 3 0 1 0 3 3 2.93 2.93 0 0 0-.18-1l5.6-4.48A3 3 0 0 0 17 7a3 3 0 0 0 2.08-.84l5 2.48A2.2 2.2 0 0 0 24 9a3 3 0 1 0 3-3ZM7 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm10-8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm10 5a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"}))},Yct=Kct;var BR={};J(BR,{icon:()=>npt});var R_r=T(z());var Qct=["title","titleId"];function Aie(){return Aie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function tpt(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}var rpt=function(t){var r=t.title,n=t.titleId,o=ept(t,Qct);return l("svg",Aie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.394 6.192 11.05.536 16 5.486l4.95-4.95 5.657 5.656L16 16.8 5.394 6.192Zm2.828 0L16 13.971l7.778-7.779-2.828-2.828L16 8.314l-4.95-4.95-2.828 2.828Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M16 30.941 4.686 19.627A8.004 8.004 0 0 1 3.45 9.905a8.011 8.011 0 0 1 1.236-1.591L16 19.539 27.313 8.314l.045.045a8.003 8.003 0 0 1-.045 11.268L16 30.942Zm0-2.828 9.899-9.9a6.002 6.002 0 0 0 1.169-6.838L16 22.357 4.932 11.375A6.003 6.003 0 0 0 6.1 18.213l9.9 9.9Z"}))},npt=rpt;var zR={};J(zR,{icon:()=>lpt});var L_r=T(z());var opt=["title","titleId"];function Rie(){return Rie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function apt(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}var spt=function(t){var r=t.title,n=t.titleId,o=ipt(t,opt);return l("svg",Rie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m9.74 7.73-1.5-1.32a13 13 0 0 0 0 17.19l1.5-1.32a11 11 0 0 1 0-14.54v-.01Z"}),l("path",{d:"M6.51 3.66 5 2.34c-6.377 7.24-6.377 18.09 0 25.33l1.5-1.32C.792 19.867.792 10.153 6.5 3.67l.01-.01zm17.25 2.75-1.5 1.32a11 11 0 0 1 0 14.54l1.5 1.32a13 13 0 0 0 0-17.19v.01z"}),l("path",{d:"m27 2.34-1.5 1.32c5.708 6.483 5.708 16.197 0 22.68l1.5 1.33c6.377-7.24 6.377-18.09 0-25.33Z"}),l("path",{d:"M21 15a5 5 0 1 0-6 4.9V31h2V19.9a5 5 0 0 0 4-4.9Zm-5 3a3 3 0 1 1 0-6 3 3 0 0 1 0 6Z",className:"euiIcon__fillSecondary"}))},lpt=spt;var WR={};J(WR,{icon:()=>fpt});var F_r=T(z());var upt=["title","titleId"];function Die(){return Die=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ppt(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}var dpt=function(t){var r=t.title,n=t.titleId,o=cpt(t,upt);return l("svg",Die({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.81 1H2v30h5.815c1.705 0 3.343-.783 4.38-2.094l3.182-4.023.006.006 2.607-3.137.01-.014a9.42 9.42 0 0 0 1.953-4.826 9.112 9.112 0 0 0-1.891-6.522l-.01-.012-2.603-3.156L12.197 3.1C11.16 1.786 9.52 1 7.81 1Zm6.118 7.523-3.31-4.195C9.968 3.512 8.917 3 7.81 3H4v26h3.815c1.1 0 2.15-.508 2.8-1.32l3.33-4.21-1.796-1.77-.027-.033c-2.84-3.317-2.83-8.195.028-11.287l.004-.004a98.893 98.893 0 0 1 1.774-1.853Zm4.043 8.099c-.12 1.279-.616 2.537-1.49 3.64l-1.288 1.63-1.578-1.556c-2.19-2.59-2.118-6.3.001-8.596.6-.64 1.119-1.183 1.561-1.635l1.293 1.638v.002l.014.016c.942 1.192 1.446 2.564 1.51 3.949a7.09 7.09 0 0 1-.023.912Z"}),l("path",{fillRule:"evenodd",d:"M23.801 3c-.382 0-1.052.231-1.925.812-.636.422-1.228.928-1.677 1.357l1.771 2.245.005.007.024.03.008.01c4.003 5.099 3.99 12.057-.035 17.145l-1.793 2.267a8.206 8.206 0 0 0 1.769 1.498c.698.427 1.337.629 1.852.629H28V3h-4.199Zm-6.148 23.842.765 1.053.023.027c.717.851 1.566 1.607 2.464 2.156.89.544 1.89.922 2.895.922H30V1h-6.199c-.987 0-2.066.505-3.032 1.146a14.934 14.934 0 0 0-2.352 1.974l-.276.288-.595.628 2.855 3.619.006.006c3.459 4.375 3.457 10.329-.004 14.704l-2.75 3.477Z",className:"euiIcon__fillSecondary"}))},fpt=dpt;var HR={};J(HR,{icon:()=>ypt});var z_r=T(z());var hpt=["title","titleId"];function Lie(){return Lie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vpt(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}var gpt=function(t){var r=t.title,n=t.titleId,o=mpt(t,hpt);return l("svg",Lie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 4V2h2v2H2Zm5 0V2h2v2H7Zm5 0V2h2v2h-2ZM2 9V7h2v2H2Zm5 0V7h2v2H7Zm5 0V7h2v2h-2ZM2 14v-2h2v2H2Zm5 0v-2h2v2H7Zm5 0v-2h2v2h-2Z"}))},ypt=gpt;var VR={};J(VR,{icon:()=>_pt});var H_r=T(z());var bpt=["title","titleId"];function Nie(){return Nie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Opt(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}var xpt=function(t){var r=t.title,n=t.titleId,o=wpt(t,bpt);return l("svg",Nie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M2.857 14.043a.75.75 0 0 1-.025-1.06l4.591-4.81a.25.25 0 0 0 0-.346l-4.59-4.81a.75.75 0 0 1 1.085-1.035l4.59 4.81a1.75 1.75 0 0 1 0 2.416l-4.59 4.81a.75.75 0 0 1-1.06.024Z",clipRule:"evenodd"}),l("path",{d:"M10.5 2.75a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0V2.75Z"}))},_pt=xpt;var $R={};J($R,{icon:()=>kpt});var $_r=T(z());var Spt=["title","titleId"];function Fie(){return Fie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ept(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}var Ppt=function(t){var r=t.title,n=t.titleId,o=Ipt(t,Spt);return l("svg",Fie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 2.75a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0V2.75Z"}),l("path",{fillRule:"evenodd",d:"M13.135 14.043a.75.75 0 0 0 .025-1.06l-4.59-4.81a.25.25 0 0 1 0-.346l4.59-4.81a.75.75 0 0 0-1.085-1.035l-4.59 4.81a1.75 1.75 0 0 0 0 2.416l4.59 4.81c.286.3.76.31 1.06.024Z",clipRule:"evenodd"}))},kpt=Ppt;var ZR={};J(ZR,{icon:()=>Apt});var q_r=T(z());var jpt=["title","titleId"];function Bie(){return Bie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Cpt(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}var Mpt=function(t){var r=t.title,n=t.titleId,o=Tpt(t,jpt);return l("svg",Bie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M1.957 4.982a.75.75 0 0 1 1.06-.025l4.81 4.591a.25.25 0 0 0 .346 0l4.81-4.59a.75.75 0 0 1 1.035 1.085l-4.81 4.59a1.75 1.75 0 0 1-2.416 0l-4.81-4.59a.75.75 0 0 1-.025-1.06Z",clipRule:"evenodd"}))},Apt=Mpt;var qR={};J(qR,{icon:()=>Fpt});var G_r=T(z());var Rpt=["title","titleId"];function zie(){return zie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Lpt(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}var Npt=function(t){var r=t.title,n=t.titleId,o=Dpt(t,Rpt);return l("svg",zie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M11.018 14.043a.75.75 0 0 0 .024-1.06l-4.59-4.81a.25.25 0 0 1 0-.346l4.59-4.81a.75.75 0 1 0-1.085-1.035l-4.59 4.81a1.75 1.75 0 0 0 0 2.416l4.59 4.81c.286.3.761.31 1.06.024Z",clipRule:"evenodd"}))},Fpt=Npt;var UR={};J(UR,{icon:()=>Vpt});var X_r=T(z());var Bpt=["title","titleId"];function Wie(){return Wie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Wpt(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}var Hpt=function(t){var r=t.title,n=t.titleId,o=zpt(t,Bpt);return l("svg",Wie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4.982 14.043a.75.75 0 0 1-.025-1.06l4.591-4.81a.25.25 0 0 0 0-.346l-4.59-4.81a.75.75 0 0 1 1.085-1.035l4.59 4.81a1.75 1.75 0 0 1 0 2.416l-4.59 4.81a.75.75 0 0 1-1.06.024Z",clipRule:"evenodd"}))},Vpt=Hpt;var GR={};J(GR,{icon:()=>Gpt});var Y_r=T(z());var $pt=["title","titleId"];function Hie(){return Hie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function qpt(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}var Upt=function(t){var r=t.title,n=t.titleId,o=Zpt(t,$pt);return l("svg",Hie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M1.957 11.018c.286.3.761.31 1.06.024l4.81-4.59a.25.25 0 0 1 .346 0l4.81 4.59a.75.75 0 0 0 1.035-1.085l-4.81-4.59a1.75 1.75 0 0 0-2.416 0l-4.81 4.59a.75.75 0 0 0-.025 1.06Z",clipRule:"evenodd"}))},Gpt=Upt;var JR={};J(JR,{icon:()=>Qpt});var eSr=T(z());var Jpt=["title","titleId"];function Vie(){return Vie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Kpt(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}var Ypt=function(t){var r=t.title,n=t.titleId,o=Xpt(t,Jpt);return l("svg",Vie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.5 10a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1h-4ZM8 6.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 1-.5-.5ZM3.5 2a.5.5 0 0 0 0 1h5a.5.5 0 0 0 0-1h-5ZM8 8.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 1-.5-.5ZM3.5 4a.5.5 0 0 0 0 1h5a.5.5 0 0 0 0-1h-5ZM3 12.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5ZM7 6H3v5h4V6Z"}),l("path",{fillRule:"evenodd",d:"M11.526.312A1.002 1.002 0 0 0 10.8 0H2a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4.429c0-.256-.098-.503-.274-.689l-3.2-3.428ZM10.5 5H14v10H2V1h8v3.5a.5.5 0 0 0 .5.5Z",clipRule:"evenodd"}))},Qpt=Ypt;var XR={};J(XR,{icon:()=>odt});var rSr=T(z());var edt=["title","titleId"];function $ie(){return $ie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rdt(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}var ndt=function(t){var r=t.title,n=t.titleId,o=tdt(t,edt);return l("svg",$ie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.928 8.468 4 7.618l.446-1.427L7.375 7.25 7.287 4h1.484l-.097 3.296 2.88-1.039L12 7.693l-2.977.86 1.92 2.56L9.741 12 7.937 9.28l-1.745 2.654-1.213-.86z"}))},odt=ndt;var KR={};J(KR,{icon:()=>udt});var oSr=T(z());var idt=["title","titleId"];function Zie(){return Zie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function sdt(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}var ldt=function(t){var r=t.title,n=t.titleId,o=adt(t,idt);return l("svg",Zie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M3 8a5 5 0 1 1 9.812 1.364.78.78 0 0 1-.341.476c-.16.1-.382.16-.659.16-.507 0-.668-.18-.73-.274a.53.53 0 0 1-.082-.23V5h-1v.764a3 3 0 1 0 .146 4.333c.028.057.06.117.1.177.267.407.761.726 1.566.726.412 0 .83-.088 1.189-.311.367-.23.64-.583.773-1.053a6 6 0 1 0-2.501 3.393l-.546-.837A5 5 0 0 1 3 8Zm7 0a2 2 0 1 0-4 0 2 2 0 0 0 4 0Z"}))},udt=ldt;var YR={};J(YR,{icon:()=>hdt});var aSr=T(z());var cdt=["title","titleId"];function qie(){return qie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ddt(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}var fdt=function(t){var r=t.title,n=t.titleId,o=pdt(t,cdt);return l("svg",qie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.277 10.088c.02.014.04.03.057.047.582.55 1.134.812 1.666.812.586 0 1.84-.293 3.713-.88L9 6.212V2H7v4.212l-1.723 3.876Zm-.438.987L3.539 14h8.922l-1.32-2.969C9.096 11.677 7.733 12 7 12c-.74 0-1.463-.315-2.161-.925ZM6 2H5V1h6v1h-1v4l3.375 7.594A1 1 0 0 1 12.461 15H3.54a1 1 0 0 1-.914-1.406L6 6V2Z"}))},hdt=fdt;var QR={};J(QR,{icon:()=>bdt});var lSr=T(z());var mdt=["title","titleId"];function Uie(){return Uie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function gdt(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}var ydt=function(t){var r=t.title,n=t.titleId,o=vdt(t,mdt);return l("svg",Uie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M2.316 12h10.368c-.188-.704-.28-1.691-.348-3.037-.07-1.382-.103-1.888-.19-2.612-.028-.236-.06-.462-.096-.68-.31-1.892-1.506-2.923-3.708-3.131a1 1 0 1 0-1.684 0c-2.202.208-3.397 1.24-3.708 3.13a16.01 16.01 0 0 0-.096.68c-.087.725-.12 1.23-.19 2.613-.068 1.346-.16 2.333-.348 3.037Zm10.843 1H1.84c-.308.353-.737.5-1.341.5a.5.5 0 1 1 0-1c.786 0 1.024-.783 1.166-3.587.07-1.407.105-1.926.196-2.681.03-.25.063-.49.102-.724.334-2.041 1.546-3.313 3.556-3.792a2 2 0 0 1 3.96 0c2.01.479 3.222 1.75 3.557 3.792a17 17 0 0 1 .102.724c.09.755.125 1.274.196 2.681.14 2.804.379 3.587 1.165 3.587a.5.5 0 1 1 0 1c-.604 0-1.033-.147-1.341-.5ZM5.5 14h4a2 2 0 1 1-4 0Z"}))},bdt=ydt;var eD={};J(eD,{icon:()=>Sdt});var cSr=T(z());var wdt=["title","titleId"];function Gie(){return Gie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function xdt(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}var _dt=function(t){var r=t.title,n=t.titleId,o=Odt(t,wdt);return l("svg",Gie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m9.5 14-.005.15a2 2 0 0 1-3.972.153l-.018-.154L5.5 14h4Zm5.38-12.825a.5.5 0 0 1 .008.64l-.063.065-14 12a.5.5 0 0 1-.713-.695l.063-.065 14-12a.5.5 0 0 1 .705.055ZM13.036 5.51l.055.353.048.368c.066.554.103.98.145 1.724l.08 1.491c.146 2.371.402 3.053 1.136 3.053a.5.5 0 1 1 0 1c-.603 0-1.031-.146-1.34-.499H4.185l1.182-1h7.317c-.172-.644-.264-1.528-.33-2.708l-.09-1.638c-.033-.514-.066-.87-.118-1.304l-.011-.077.901-.763ZM7.5 0a2 2 0 0 1 1.98 1.717c.476.113.907.27 1.292.472l-.838.71a5.728 5.728 0 0 0-1.591-.36 1 1 0 1 0-1.684 0C4.455 2.75 3.26 3.78 2.95 5.671l-.05.334-.046.347c-.08.676-.115 1.161-.176 2.347l-.014.265-.005.09-1.058.897c.018-.234.035-.488.05-.763l.077-1.427c.038-.626.073-1.025.134-1.528.03-.25.063-.49.102-.724.334-2.04 1.546-3.313 3.555-3.792l.004-.019A2 2 0 0 1 7.5 0Z"}))},Sdt=_dt;var tD={};J(tD,{icon:()=>jdt});var dSr=T(z());var Idt=["title","titleId"];function Jie(){return Jie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Pdt(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}var kdt=function(t){var r=t.title,n=t.titleId,o=Edt(t,Idt);return l("svg",Jie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 6.394h1.03c.72 0 1.283.153 1.688.459a2.2 2.2 0 0 1 .813 1.163c.138.47.165.952.083 1.447-.1.597-.33 1.135-.69 1.616a3.95 3.95 0 0 1-1.333 1.137 3.689 3.689 0 0 1-1.735.418c-.381 0-.747-.07-1.097-.212-.35-.144-.636-.417-.86-.818l-.082.041.33-2.018c-.055.337-.024.647.092.932.12.285.32.513.598.685.281.171.634.257 1.06.257a2.54 2.54 0 0 0 2.075-1.03c.226-.308.369-.645.427-1.008a1.929 1.929 0 0 0-.072-.973 1.524 1.524 0 0 0-.536-.752c-.25-.196-.57-.293-.957-.293H7.825L8 6.395Zm1.359-4.591c.49 0 .913.079 1.266.237a2.258 2.258 0 0 1 1.303 1.528c.082.33.094.668.036 1.014-.069.433-.25.864-.54 1.293-.29.425-.684.78-1.185 1.065-.497.282-1.096.422-1.796.422h-.597l.175-1.05h.576a2.182 2.182 0 0 0 1.812-.89c.192-.265.312-.544.36-.84.08-.473-.036-.866-.344-1.178-.31-.313-.726-.469-1.251-.469-.35 0-.683.072-.999.216a2.256 2.256 0 0 0-.793.603 1.852 1.852 0 0 0-.412.89l-1.78 10.81H3.973l1.782-10.81a3.17 3.17 0 0 1 .648-1.457c.34-.429.765-.767 1.277-1.014a3.827 3.827 0 0 1 1.678-.37Z"}))},jdt=kdt;var rD={};J(rD,{icon:()=>Rdt});var hSr=T(z());var Tdt=["title","titleId"];function Xie(){return Xie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Mdt(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}var Adt=function(t){var r=t.title,n=t.titleId,o=Cdt(t,Tdt);return l("svg",Xie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.04 13.274a.5.5 0 1 0 .892.453l3.014-5.931a.5.5 0 0 0-.445-.727H5.316L8.03 1.727a.5.5 0 1 0-.892-.453L4.055 7.343a.5.5 0 0 0 .446.726h5.185L7.04 13.274Z"}))},Rdt=Adt;var nD={};J(nD,{icon:()=>Bdt});var vSr=T(z());var Ddt=["title","titleId"];function Kie(){return Kie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ndt(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}var Fdt=function(t){var r=t.title,n=t.titleId,o=Ldt(t,Ddt);return l("svg",Kie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M0 6h4v4H0V6Zm1 1v2h2V7H1Zm5-1h4v4H6V6Zm1 1v2h2V7H7Zm5-1h4v4h-4V6Zm1 3h2V7h-2v2Z"}))},Bdt=Fdt;var oD={};J(oD,{icon:()=>$dt});var ySr=T(z());var zdt=["title","titleId"];function Yie(){return Yie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Hdt(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}var Vdt=function(t){var r=t.title,n=t.titleId,o=Wdt(t,zdt);return l("svg",Yie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 1v2h2V1H7ZM6 0h4v4H6V0Zm0 6h4v4H6V6Zm1 1v2h2V7H7Zm-1 5h4v4H6v-4Zm1 1v2h2v-2H7Z"}))},$dt=Vdt;var iD={};J(iD,{icon:()=>Jdt});var wSr=T(z());var Zdt=["title","titleId"];function Qie(){return Qie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Udt(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}var Gdt=function(t){var r=t.title,n=t.titleId,o=qdt(t,Zdt);return l("svg",Qie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 10.038a3.49 3.49 0 0 1 2.5-1.05h2a2.5 2.5 0 0 0 2.462-2.061 2 2 0 1 1 1.008.017A3.5 3.5 0 0 1 9.5 9.987h-2a2.5 2.5 0 0 0-2.466 2.085A2 2 0 1 1 4 12.063V3.937a2 2 0 1 1 1 0v6.1ZM4.5 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm0 12a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm8-9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}))},Jdt=Gdt;var aD={};J(aD,{icon:()=>eft});var xSr=T(z());var Xdt=["title","titleId"];function eae(){return eae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ydt(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}var Qdt=function(t){var r=t.title,n=t.titleId,o=Kdt(t,Xdt);return l("svg",eae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 7.987a3.49 3.49 0 0 0-2.5 1.05v-4.1a2 2 0 1 0-1 0v6.126a2 2 0 1 0 1.034.01A2.5 2.5 0 0 1 6 8.986h1a3.5 3.5 0 0 0 3.47-3.043 2 2 0 1 0-1.009-.017A2.5 2.5 0 0 1 7 7.987H6zM4 3a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm0 10a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm7-9a1 1 0 1 1-2 0 1 1 0 0 1 2 0z",clipRule:"evenodd"}),l("path",{d:"M13.5 10.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zM9 15c.284-1.223 1.519-2.143 3-2.143s2.716.92 3 2.143H9z"}))},eft=Qdt;var sD={};J(sD,{icon:()=>ift});var SSr=T(z());var tft=["title","titleId"];function tae(){return tae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nft(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}var oft=function(t){var r=t.title,n=t.titleId,o=rft(t,tft);return l("svg",tae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m3.732 13.096-.197-.197 2.83-2.828.706.707-2.829 2.828.708.708 2.828-2.828a1 1 0 0 0 0-1.414L5.658 7.95a.993.993 0 0 0-.708-.293.994.994 0 0 0-.708.293l-2.828 2.829.707.707 2.829-2.83.707.708-2.829 2.829.904.903Zm1.218-6.44c.512 0 1.023.196 1.414.587l2.121 2.12a2 2 0 0 1 0 2.83L4.95 15.728 0 10.778l3.535-3.535a1.993 1.993 0 0 1 1.415-.586ZM14.02 1l.708.707-6.95 6.95-.707-.707L14.021 1Z"}))},ift=oft;var lD={};J(lD,{icon:()=>cft});var ESr=T(z());var aft=["title","titleId"];function rae(){return rae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function lft(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}var uft=function(t){var r=t.title,n=t.titleId,o=sft(t,aft);return l("svg",rae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 0 1 3.999 8.17V6.662h7.994V8.17Zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486ZM4 5.658V1.005h1.262v4.653H4Zm2.261 0V1.005h1.244v4.653H6.26Zm2.244 0V1.005h1.235v4.653H8.504Zm2.234 0V1.005h1.254v4.653h-1.254ZM3.008 0 3 8.17a2.509 2.509 0 0 0 2.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 0 0 2.498-2.512L13 0H3.008Z"}))},cft=uft;var uD={};J(uD,{icon:()=>mft});var kSr=T(z());var pft=["title","titleId"];function nae(){return nae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fft(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}var hft=function(t){var r=t.title,n=t.titleId,o=dft(t,pft);return l("svg",nae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m10.651 5.126.922-.455.884-2.343a.5.5 0 0 1 .939.344L12.374 5.39l-1.45.717A5.3 5.3 0 0 1 11 7h1.043l2.3 2.198a.5.5 0 0 1-.692.723L11.642 8h-.737c-.09.466-.24.899-.441 1.283l.892.49 1.278 3.554a.5.5 0 0 1-.94.342l-1.15-3.2-.655-.36C9.373 10.665 8.716 11 8 11s-1.374-.335-1.89-.893l-.658.361-1.15 3.201a.5.5 0 1 1-.94-.342l1.279-3.554.895-.491A4.7 4.7 0 0 1 5.095 8h-.74l-2.01 1.92a.5.5 0 0 1-.69-.722L3.952 7H5a5.3 5.3 0 0 1 .075-.892L3.623 5.39 2.6 2.672a.5.5 0 1 1 .939-.344l.884 2.343.924.457c.17-.428.397-.81.668-1.128h.57a1.5 1.5 0 1 1 2.83 0h.568c.27.318.497.699.667 1.126ZM8 4a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1Zm1.751 1.571A3.326 3.326 0 0 0 9.476 5H6.524c-.107.175-.2.367-.276.573-.11.295-.186.618-.223.957a4.354 4.354 0 0 0 .09 1.465c.071.294.172.565.295.806.168.328.38.601.616.803.295.253.631.396.974.396.342 0 .678-.142.973-.394.237-.203.448-.476.616-.803a3.62 3.62 0 0 0 .296-.807 4.263 4.263 0 0 0 .09-1.466 3.988 3.988 0 0 0-.224-.959Z"}))},mft=hft;var cD={};J(cD,{icon:()=>wft});var TSr=T(z());var vft=["title","titleId"];function oae(){return oae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yft(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}var bft=function(t){var r=t.title,n=t.titleId,o=gft(t,vft);return l("svg",oae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12Zm0 1A7 7 0 1 1 8 1a7 7 0 0 1 0 14Zm0-3a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm0-1a3 3 0 1 1 0-6 3 3 0 0 1 0 6Zm0-2a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}))},wft=bft;var pD={};J(pD,{icon:()=>Ift});var MSr=T(z());var Oft=["title","titleId"];function iae(){return iae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _ft(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}var Sft=function(t){var r=t.title,n=t.titleId,o=xft(t,Oft);return l("svg",iae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M14 4v-.994C14 2.45 13.55 2 12.994 2H11v1h-1V2H6v1H5V2H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14h9.988C13.55 14 14 13.55 14 12.994V5H2V4h12zm-3-3h1.994C14.102 1 15 1.897 15 3.006v9.988A2.005 2.005 0 0 1 12.994 15H3.006A2.005 2.005 0 0 1 1 12.994V3.006C1 1.898 1.897 1 3.006 1H5V0h1v1h4V0h1v1zM4 7h2v1H4V7zm3 0h2v1H7V7zm3 0h2v1h-2V7zM4 9h2v1H4V9zm3 0h2v1H7V9zm3 0h2v1h-2V9zm-6 2h2v1H4v-1zm3 0h2v1H7v-1zm3 0h2v1h-2v-1z"}))},Ift=Sft;var dD={};J(dD,{icon:()=>Tft});var RSr=T(z());var Eft=["title","titleId"];function aae(){return aae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kft(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}var jft=function(t){var r=t.title,n=t.titleId,o=Pft(t,Eft);return l("svg",aae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 14h12.5a.5.5 0 0 1 0 1h-13a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0V14Z"}),l("path",{d:"M15 6.5a.5.5 0 0 0-.5-.5h-6a.5.5 0 0 0-.5.5V12H3.5a.5.5 0 0 0 0 1h5a.5.5 0 0 0 .5-.5V7h5.5a.5.5 0 0 0 .5-.5ZM7.023 3.206A.301.301 0 0 1 7.3 3h2.4c.121 0 .23.081.277.206a.36.36 0 0 1-.065.363l-1.2 1.333a.28.28 0 0 1-.424 0l-1.2-1.333a.36.36 0 0 1-.065-.363Z"}))},Tft=jft;var fD={};J(fD,{icon:()=>Dft});var LSr=T(z());var Cft=["title","titleId"];function sae(){return sae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Aft(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}var Rft=function(t){var r=t.title,n=t.titleId,o=Mft(t,Cft);return l("svg",sae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6.5 12a.502.502 0 0 1-.354-.146l-4-4a.502.502 0 0 1 .708-.708L6.5 10.793l6.646-6.647a.502.502 0 0 1 .708.708l-7 7A.502.502 0 0 1 6.5 12"}))},Dft=Rft;var hD={};J(hD,{icon:()=>zft});var FSr=T(z());var Lft=["title","titleId"];function lae(){return lae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Fft(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}var Bft=function(t){var r=t.title,n=t.titleId,o=Nft(t,Lft);return l("svg",lae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 16A8 8 0 1 1 8 0a8 8 0 0 1 0 16Zm3.65-10.857L6.91 9.8 4.35 7.286a.5.5 0 0 0-.7.714l2.909 2.857a.5.5 0 0 0 .7 0l5.091-5a.5.5 0 1 0-.7-.714Z"}))},zft=Bft;var mD={};J(mD,{icon:()=>Zft});var zSr=T(z());var Wft=["title","titleId"];function uae(){return uae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Vft(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}var $ft=function(t){var r=t.title,n=t.titleId,o=Hft(t,Wft);return l("svg",uae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.934 3.063a1.5 1.5 0 0 1 .547.321l.112.115 6.07 6.915a1.5 1.5 0 0 1-.646 2.41l-.142.04-9.031 2.097A1.5 1.5 0 0 1 .037 13.19l.043-.159L3.04 4.02a1.5 1.5 0 0 1 1.893-.957ZM4.027 4.25l-.036.083-2.961 9.011a.5.5 0 0 0 .498.656l.09-.013 2.937-.681-1.399-1.508a.5.5 0 0 1 .666-.74l.067.06 1.788 1.927 2.634-.611-3.198-3.601a.5.5 0 0 1 .682-.726l.066.062 3.559 4.007 1.229-.284a.5.5 0 0 0 .15-.063l.067-.049a.5.5 0 0 0 .099-.632l-.053-.073-6.07-6.916a.5.5 0 0 0-.138-.11l-.082-.035-.088-.02a.5.5 0 0 0-.507.256Zm11.66 5.039a2.5 2.5 0 0 1-.975 3.399.5.5 0 0 1-.485-.875 1.5 1.5 0 0 0-1.454-2.624.5.5 0 0 1-.485-.875 2.5 2.5 0 0 1 3.399.975Zm-5.03-6.206a.5.5 0 0 1 .338.544l-.02.088-.677 2.035 2.068-.721a.5.5 0 0 1 .6.225l.036.082a.5.5 0 0 1-.225.6l-.082.037L9.67 7.028a.5.5 0 0 1-.659-.55l.02-.08.995-3a.5.5 0 0 1 .632-.316ZM14.5 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1ZM7.862.403a2.5 2.5 0 0 1 .735 3.459.5.5 0 0 1-.839-.545 1.5 1.5 0 1 0-2.516-1.634.5.5 0 0 1-.839-.545A2.5 2.5 0 0 1 7.862.403ZM13.5 2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-3-1a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm4-1a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Z"}))},Zft=$ft;var vD={};J(vD,{icon:()=>Xft});var HSr=T(z());var qft=["title","titleId"];function cae(){return cae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Gft(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}var Jft=function(t){var r=t.title,n=t.titleId,o=Uft(t,qft);return l("svg",cae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 .5a.5.5 0 0 0-1 0v1a.5.5 0 0 0 1 0v-1Zm-3.146.646a.5.5 0 1 0-.708.708l1 1a.5.5 0 1 0 .708-.708l-1-1Z"}),l("path",{fillRule:"evenodd",d:"M13 7A5 5 0 0 0 3 7v4a5 5 0 0 0 10 0V7Zm-1 0a4 4 0 0 0-4-4v5a1 1 0 0 1-1 1H4v2a4 4 0 0 0 8 0V7Z"}),l("path",{d:"M0 4.5A.5.5 0 0 1 .5 4h1a.5.5 0 0 1 0 1h-1a.5.5 0 0 1-.5-.5Z"}))},Xft=Jft;var gD={};J(gD,{icon:()=>tht});var $Sr=T(z());var Kft=["title","titleId"];function pae(){return pae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Qft(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}var eht=function(t){var r=t.title,n=t.titleId,o=Yft(t,Kft);return l("svg",pae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11 .5a.5.5 0 0 1 1 0v1a.5.5 0 0 1-1 0v-1Zm3.146.646a.5.5 0 0 1 .708.708l-1 1a.5.5 0 0 1-.708-.708l1-1Z"}),l("path",{fillRule:"evenodd",d:"M3 7a5 5 0 0 1 10 0v4a5 5 0 0 1-10 0V7Zm1 0a4 4 0 0 1 4-4v5a1 1 0 0 0 1 1h3v2a4 4 0 0 1-8 0V7Z"}),l("path",{d:"M16 4.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 .5-.5Z"}))},tht=eht;var yD={};J(yD,{icon:()=>aht});var qSr=T(z());var rht=["title","titleId"];function dae(){return dae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function oht(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}var iht=function(t){var r=t.title,n=t.titleId,o=nht(t,rht);return l("svg",dae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.5 13A5.506 5.506 0 0 1 2 7.5C2 4.467 4.467 2 7.5 2S13 4.467 13 7.5 10.533 13 7.5 13m0-12a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13m3 6H8V3.5a.5.5 0 0 0-1 0v4a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 0-1"}))},aht=iht;var bD={};J(bD,{icon:()=>pht});var GSr=T(z());var sht=["title","titleId"];function fae(){return fae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uht(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}var cht=function(t){var r=t.title,n=t.titleId,o=lht(t,sht);return l("svg",fae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.39 3.61a5.5 5.5 0 0 0-7.78 7.78l.562.56v-1.622a.5.5 0 0 1 1 0v2.829a.5.5 0 0 1-.5.5H1.843a.5.5 0 0 1 0-1h1.621l-.56-.56A6.5 6.5 0 1 1 7.5 14a.5.5 0 0 1 0-1 5.5 5.5 0 0 0 3.89-9.39Z"}),l("path",{d:"M7.5 3a.5.5 0 0 1 .5.5V7h2.5a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5v-4a.5.5 0 0 1 .5-.5Z"}))},pht=cht;var wD={};J(wD,{icon:()=>vht});var XSr=T(z());var dht=["title","titleId"];function hae(){return hae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hht(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}var mht=function(t){var r=t.title,n=t.titleId,o=fht(t,dht);return l("svg",hae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.348 3.761A3.995 3.995 0 0 1 8 7a.5.5 0 0 1-1 0 3 3 0 1 0-4.878 2.34.5.5 0 0 1-.627.779 4 4 0 0 1 3.973-6.84 5.502 5.502 0 0 1 10.096 4.37.5.5 0 1 1-.92-.39 4.5 4.5 0 1 0-8.296-3.497Zm-1.61 4.935a.5.5 0 1 1 .775.633l-1.466 1.792a.5.5 0 1 1-.774-.633l1.466-1.792Zm-3.12 3.647a.5.5 0 0 1 .774.634l-1.505 1.84a.5.5 0 0 1-.774-.634l1.505-1.84Zm7.62-3.647a.5.5 0 0 1 .775.633l-1.466 1.792a.5.5 0 1 1-.774-.633l1.466-1.792Zm-3.12 3.647a.5.5 0 0 1 .774.634l-1.505 1.84a.5.5 0 0 1-.774-.634l1.505-1.84Zm7.62-3.647a.5.5 0 1 1 .775.633l-1.466 1.792a.5.5 0 1 1-.774-.633l1.466-1.792Zm-3.12 3.647a.5.5 0 0 1 .774.634l-1.505 1.84a.5.5 0 0 1-.774-.634l1.505-1.84Z"}))},vht=mht;var OD={};J(OD,{icon:()=>Oht});var YSr=T(z());var ght=["title","titleId"];function mae(){return mae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bht(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}var wht=function(t){var r=t.title,n=t.titleId,o=yht(t,ght);return l("svg",mae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.421 4.93a.5.5 0 1 1-.87.49 3 3 0 1 0-4.43 3.918.5.5 0 0 1-.626.78 4 4 0 0 1 3.973-6.84l.032.018V3.28a5.5 5.5 0 1 1 7.003 7.357.5.5 0 1 1-.36-.934 4.5 4.5 0 1 0-5.77-5.923c.42.31.778.701 1.05 1.15h-.002ZM9.6 11c.669.002.794.67.36 1.003l-4.68 3.882c-.457.378-1.053-.26-.643-.689l3.08-3.193A5411.7 5411.7 0 0 1 5.113 12c-.668-.001-.793-.669-.36-1.003l4.68-3.881c.458-.379 1.053.26.643.688l-3.08 3.193L9.6 11Z"}))},Oht=wht;var xD={};J(xD,{icon:()=>Eht});var e7r=T(z());var xht=["title","titleId"];function vae(){return vae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Sht(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}var Iht=function(t){var r=t.title,n=t.titleId,o=_ht(t,xht);return l("svg",vae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.746 5.005A5.5 5.5 0 0 1 10.5 16H4a4 4 0 0 1-1.61-7.663A4.473 4.473 0 0 1 2.029 7H.5a.5.5 0 0 1 0-1h1.527a4.479 4.479 0 0 1 .957-2.309L1.646 2.354a.5.5 0 1 1 .708-.708L3.69 2.984A4.479 4.479 0 0 1 6 2.027V.5a.5.5 0 0 1 1 0v1.528a4.493 4.493 0 0 1 2.309.956l1.337-1.338a.5.5 0 0 1 .708.708L10.016 3.69c.311.388.56.831.73 1.314ZM4 15h6.5a4.5 4.5 0 1 0-4.152-6.239A3.995 3.995 0 0 1 8 12a.5.5 0 1 1-1 0 3 3 0 1 0-3 3Zm5.691-9.94a3.5 3.5 0 1 0-6.33 2.991 4.029 4.029 0 0 1 2.106.227 5.505 5.505 0 0 1 4.224-3.219Z"}))},Eht=Iht;var _D={};J(_D,{icon:()=>Cht});var r7r=T(z());var Pht=["title","titleId"];function gae(){return gae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jht(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}var Tht=function(t){var r=t.title,n=t.titleId,o=kht(t,Pht);return l("svg",gae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4.5 7a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zm0-6a3.5 3.5 0 0 1 3.465 3h3.12a1.5 1.5 0 1 1 0 1h-3.12a3.482 3.482 0 0 1-.662 1.596l2.1 2.1A3.5 3.5 0 1 1 8.036 12h-3.12a1.5 1.5 0 1 1 0-.999h3.12a3.482 3.482 0 0 1 .662-1.596l-2.1-2.1A3.5 3.5 0 1 1 4.5 1zM12 4.5a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm-.5 9.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zM4 11.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0z",clipRule:"evenodd"}))},Cht=Tht;var SD={};J(SD,{icon:()=>Lht});var o7r=T(z());var Mht=["title","titleId"];function yae(){return yae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Rht(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}var Dht=function(t){var r=t.title,n=t.titleId,o=Aht(t,Mht);return l("svg",yae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13 11c1.334 1.393 2 2.435 2 3.125C15 15.161 14.105 16 13 16c-1.104 0-2-.84-2-1.875 0-.69.667-1.732 2-3.125zM5.857.15l6.34 6.45.016.02.324.321a1.5 1.5 0 0 1 .11 2.006l-.103.114-4.474 4.513a1.5 1.5 0 0 1-2.123.008L1.464 9.06a1.5 1.5 0 0 1 .007-2.12l4.472-4.45c.145-.146.313-.254.492-.327L5.144.85a.5.5 0 0 1 .713-.7zm1.496 3.049a.5.5 0 0 0-.705 0L2.177 7.65a.498.498 0 0 0-.148.35h9.95a.498.498 0 0 0-.148-.35L7.353 3.2z"}))},Lht=Dht;var ID={};J(ID,{icon:()=>Wht});var a7r=T(z());var Nht=["title","titleId"];function bae(){return bae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Bht(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}var zht=function(t){var r=t.title,n=t.titleId,o=Fht(t,Nht);return l("svg",bae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1H4Zm10 8v1a2 2 0 0 1-2 2h-1v2h-1v-2H8.5v2h-1v-2H6v2H5v-2H4a2 2 0 0 1-2-2v-1H0v-1h2V8.5H0v-1h2V6H0V5h2V4a2 2 0 0 1 2-2h1V0h1v2h1.5V0h1v2H10V0h1v2h1a2 2 0 0 1 2 2v1h2v1h-2v1.5h2v1h-2V10h2v1h-2Z"}),l("rect",{width:6,height:6,x:5,y:5,rx:1}))},Wht=zht;var ED={};J(ED,{icon:()=>qht});var l7r=T(z());var Hht=["title","titleId"];function wae(){return wae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $ht(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}var Zht=function(t){var r=t.title,n=t.titleId,o=Vht(t,Hht);return l("svg",wae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.157 12.224 5.768 8.32a.404.404 0 0 0 0-.64l-4.61-3.904a.407.407 0 0 1 0-.643.608.608 0 0 1 .759 0l4.61 3.904c.631.534.63 1.393 0 1.926l-4.61 3.904a.608.608 0 0 1-.76 0 .407.407 0 0 1 0-.643ZM9 12h6v1H9v-1Z"}))},qht=Zht;var PD={};J(PD,{icon:()=>Kht});var c7r=T(z());var Uht=["title","titleId"];function Oae(){return Oae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Jht(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}var Xht=function(t){var r=t.title,n=t.titleId,o=Ght(t,Uht);return l("svg",Oae({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M0 2.5A.5.5 0 0 1 .5 2h15a.5.5 0 0 1 0 1H15v10h.5a.5.5 0 0 1 0 1H.5a.5.5 0 0 1 0-1H1V3H.5a.5.5 0 0 1-.5-.5zM2 3h12v10H2V3zm3 2a.5.5 0 0 0-.5.5v5a.5.5 0 0 0 1 0v-5A.5.5 0 0 0 5 5zm5.5.5a.5.5 0 0 1 1 0v5a.5.5 0 0 1-1 0v-5zM8 5a.5.5 0 0 0-.5.5v5a.5.5 0 0 0 1 0v-5A.5.5 0 0 0 8 5z",clipRule:"evenodd"}))},Kht=Xht;var kD={};J(kD,{icon:()=>rmt});var d7r=T(z());var Yht=["title","titleId"];function xae(){return xae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function emt(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}var tmt=function(t){var r=t.title,n=t.titleId,o=Qht(t,Yht);return l("svg",xae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.5 3a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 1 0v-9a.5.5 0 0 0-.5-.5zm3 0a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 1 0V9h6v1.5a.5.5 0 0 0 .82.384l3-2.5a.5.5 0 0 0 0-.768l-3-2.5A.5.5 0 0 0 11 5.5V7H5V3.5a.5.5 0 0 0-.5-.5z"}))},rmt=tmt;var jD={};J(jD,{icon:()=>smt});var h7r=T(z());var nmt=["title","titleId"];function _ae(){return _ae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function imt(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}var amt=function(t){var r=t.title,n=t.titleId,o=omt(t,nmt);return l("svg",_ae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.5 3a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-1 0V9H4v1.5a.5.5 0 0 1-.82.384l-3-2.5a.5.5 0 0 1 0-.768l3-2.5A.5.5 0 0 1 4 5.5V7h2V3.5a.5.5 0 0 1 .5-.5zm3 0a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 1 0V9h2v1.5a.5.5 0 0 0 .82.384l3-2.5a.5.5 0 0 0 0-.768l-3-2.5A.5.5 0 0 0 12 5.5V7h-2V3.5a.5.5 0 0 0-.5-.5z"}))},smt=amt;var TD={};J(TD,{icon:()=>dmt});var v7r=T(z());var lmt=["title","titleId"];function Sae(){return Sae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cmt(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}var pmt=function(t){var r=t.title,n=t.titleId,o=umt(t,lmt);return l("svg",Sae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.5 3a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-1 0V9H5v1.5a.5.5 0 0 1-.82.384l-3-2.5a.5.5 0 0 1 0-.768l3-2.5A.5.5 0 0 1 5 5.5V7h6V3.5a.5.5 0 0 1 .5-.5zm3 0a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-1 0v-9a.5.5 0 0 1 .5-.5z"}))},dmt=pmt;var CD={};J(CD,{icon:()=>gmt});var y7r=T(z());var fmt=["title","titleId"];function Iae(){return Iae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mmt(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}var vmt=function(t){var r=t.title,n=t.titleId,o=hmt(t,fmt);return l("svg",Iae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.5 3a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 1 0v-9A.5.5 0 0 0 .5 3zm14.5.5a.5.5 0 0 1 1 0v9a.5.5 0 0 1-1 0v-9zm-4.712 1.547a.5.5 0 0 1 .532.069l3 2.5a.5.5 0 0 1 0 .768l-3 2.5A.5.5 0 0 1 10 10.5V9H6v1.5a.5.5 0 0 1-.82.384l-3-2.5a.5.5 0 0 1 0-.768l3-2.5A.5.5 0 0 1 6 5.5V7h4V5.5a.5.5 0 0 1 .288-.453z"}))},gmt=vmt;var MD={};J(MD,{icon:()=>xmt});var w7r=T(z());var ymt=["title","titleId"];function Eae(){return Eae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wmt(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}var Omt=function(t){var r=t.title,n=t.titleId,o=bmt(t,ymt);return l("svg",Eae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8.05 10a2.5 2.5 0 0 1 4.9 0h1.55a.5.5 0 1 1 0 1h-1.55a2.5 2.5 0 0 1-4.9 0H1.5a.5.5 0 1 1 0-1h6.55Zm-.1-4a2.5 2.5 0 0 1-4.9 0H1.5a.5.5 0 0 1 0-1h1.55a2.5 2.5 0 0 1 4.9 0h6.55a.5.5 0 1 1 0 1H7.95ZM4 5.5a1.5 1.5 0 1 0 3 0 1.5 1.5 0 0 0-3 0Zm8 5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0Z"}))},xmt=Omt;var AD={};J(AD,{icon:()=>Pmt});var x7r=T(z());var _mt=["title","titleId"];function Pae(){return Pae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Imt(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}var Emt=function(t){var r=t.title,n=t.titleId,o=Smt(t,_mt);return l("svg",Pae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M10 7.95a2.5 2.5 0 0 1 0-4.9V1.5a.5.5 0 1 1 1 0v1.55a2.5 2.5 0 0 1 0 4.9v6.55a.5.5 0 1 1-1 0V7.95Zm-4 .1a2.5 2.5 0 0 1 0 4.9v1.55a.5.5 0 1 1-1 0v-1.55a2.5 2.5 0 0 1 0-4.9V1.5a.5.5 0 0 1 1 0v6.55ZM5.5 12a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm5-8a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3Z"}))},Pmt=Emt;var RD={};J(RD,{icon:()=>Mmt});var S7r=T(z());var kmt=["title","titleId"];function kae(){return kae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Tmt(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}var Cmt=function(t){var r=t.title,n=t.titleId,o=jmt(t,kmt);return l("svg",kae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.4 0c.235 0 .46.099.622.273l2.743 3c.151.162.235.378.235.602v9.25a.867.867 0 0 1-.857.875H3.857A.867.867 0 0 1 3 13.125V.875C3 .392 3.384 0 3.857 0H11.4ZM14 4h-2.6a.4.4 0 0 1-.4-.4V1H4v12h10V4Z"}),l("path",{d:"M3 1H2a1 1 0 0 0-1 1v13a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1v-1h-1v1H2V2h1V1Z"}))},Mmt=Cmt;var DD={};J(DD,{icon:()=>Nmt});var E7r=T(z());var Amt=["title","titleId"];function jae(){return jae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Dmt(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}var Lmt=function(t){var r=t.title,n=t.titleId,o=Rmt(t,Amt);return l("svg",jae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 2.729V2a1 1 0 0 1 1-1h2v1H3v12h4v1H3a1 1 0 0 1-1-1V2.729zM14 5V2a1 1 0 0 0-1-1h-2v1h2v3h1zm-1 1h2v9H8V6h5V5H8a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2v1z"}),l("path",{d:"M9 10h5V9H9v1zm0-2h5V7H9v1zm0 4h5v-1H9v1zm0 2h5v-1H9v1zm2-12V1a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1v1h1V1h4v1h1zM5 3h6V2H5v1z"}))},Nmt=Lmt;var LD={};J(LD,{icon:()=>Hmt});var k7r=T(z());var Fmt=["title","titleId"];function Tae(){return Tae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zmt(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}var Wmt=function(t){var r=t.title,n=t.titleId,o=Bmt(t,Fmt);return l("svg",Tae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.293 8 3.146 3.854a.5.5 0 1 1 .708-.708L8 7.293l4.146-4.147a.5.5 0 0 1 .708.708L8.707 8l4.147 4.146a.5.5 0 0 1-.708.708L8 8.707l-4.146 4.147a.5.5 0 0 1-.708-.708L7.293 8Z"}))},Hmt=Wmt;var ND={};J(ND,{icon:()=>Umt});var T7r=T(z());var Vmt=["title","titleId"];function Cae(){return Cae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Zmt(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}var qmt=function(t){var r=t.title,n=t.titleId,o=$mt(t,Vmt),i=fn("crossInCircle");return l("svg",Cae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{clipPath:"url(#".concat(i("a"),")")},l("path",{d:"m8.755 8 2.64 2.641a.534.534 0 1 1-.754.755L8 8.755l-2.641 2.64a.534.534 0 1 1-.755-.754L7.245 8l-2.64-2.641a.534.534 0 1 1 .754-.755L8 7.245l2.641-2.64a.534.534 0 1 1 .755.754L8.755 8Zm4.904-5.66c3.121 3.121 3.121 8.199 0 11.32-3.12 3.12-8.198 3.12-11.318 0C-.78 10.538-.78 5.46 2.34 2.34c3.12-3.12 8.198-3.12 11.319 0Zm-.665.666a7.062 7.062 0 1 0-9.988 9.988 7.062 7.062 0 0 0 9.988-9.988Z",clipRule:"evenodd"})),l("defs",null,l("clipPath",{id:i("a")},l("path",{fill:"#fff",d:"M0 0h16v16H0z"}))))},Umt=qmt;var FD={};J(FD,{icon:()=>Ymt});var A7r=T(z());var Gmt=["title","titleId"];function Mae(){return Mae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Xmt(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}var Kmt=function(t){var r=t.title,n=t.titleId,o=Jmt(t,Gmt);return l("svg",Mae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708Z"}),l("path",{fillRule:"evenodd",d:"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-1 0A7 7 0 1 1 1 8a7 7 0 0 1 14 0Z"}))},Ymt=Kmt;var BD={};J(BD,{icon:()=>n0t});var D7r=T(z());var Qmt=["title","titleId"];function Aae(){return Aae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function t0t(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}var r0t=function(t){var r=t.title,n=t.titleId,o=e0t(t,Qmt);return l("svg",Aae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.822 1.874a.5.5 0 1 1 .335.942 5.517 5.517 0 0 0-3.34 3.341.5.5 0 1 1-.943-.335 6.517 6.517 0 0 1 3.948-3.948ZM1.864 10.15a.5.5 0 1 1 .944-.33 5.517 5.517 0 0 0 3.365 3.37.5.5 0 0 1-.333.943 6.517 6.517 0 0 1-3.976-3.983Zm8.302 3.981a.5.5 0 1 1-.333-.943 5.517 5.517 0 0 0 3.347-3.332.5.5 0 1 1 .941.337 6.517 6.517 0 0 1-3.955 3.938Zm3.968-8.285a.5.5 0 1 1-.943.331A5.517 5.517 0 0 0 9.85 2.82a.5.5 0 0 1 .337-.942 6.517 6.517 0 0 1 3.946 3.968ZM8.5 3.5a.5.5 0 0 1-1 0V.997a.5.5 0 0 1 1 0V3.5Zm-4.997 4a.5.5 0 0 1 0 1H1a.5.5 0 0 1 0-1h2.503ZM7.5 12.497a.5.5 0 0 1 1 0V15a.5.5 0 1 1-1 0v-2.503ZM12.497 8.5a.5.5 0 0 1 0-1H15a.5.5 0 1 1 0 1h-2.503ZM8 9a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"}))},n0t=r0t;var zD={};J(zD,{icon:()=>l0t});var N7r=T(z());var o0t=["title","titleId"];function Rae(){return Rae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function a0t(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}var s0t=function(t){var r=t.title,n=t.titleId,o=i0t(t,o0t);return l("svg",Rae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m12.95 1.636 1.414 1.414-2.192 2.193C12.695 6.033 13 6.98 13 8c0 1.02-.305 1.967-.828 2.757l2.192 2.193-1.414 1.414-2.193-2.192A4.977 4.977 0 0 1 8 13a4.977 4.977 0 0 1-2.757-.828L3.05 14.364 1.636 12.95l2.192-2.193A4.977 4.977 0 0 1 3 8c0-1.02.305-1.967.828-2.757L1.636 3.05 3.05 1.636l2.193 2.192A4.977 4.977 0 0 1 8 3c1.02 0 1.967.305 2.757.828l2.193-2.192ZM8 5a2.99 2.99 0 0 0-1.168.236l-.126.057-.218.116-.132.081-.073.05a3.013 3.013 0 0 0-.241.187l-.113.103-.147.15c-.05.054-.097.11-.142.168l-.1.135-.05.073-.06.097c-.05.082-.096.166-.137.253l-.057.126A2.99 2.99 0 0 0 5 8c0 .414.084.809.236 1.168l.057.126.116.218.081.132c.059.089.121.175.189.257l.15.17.151.147c.056.051.114.1.174.147l.142.105c.054.037.109.072.165.106l-.124-.079.092.06.094.055c.436.247.94.388 1.477.388a2.99 2.99 0 0 0 1.168-.236l.125-.056.213-.113.151-.094.05-.034a3.011 3.011 0 0 0 .323-.258l-.15.129.09-.075.168-.159.08-.084c.051-.056.1-.114.147-.174l.105-.142.106-.165c.047-.08.091-.161.131-.245l.057-.126A2.99 2.99 0 0 0 11 8a2.99 2.99 0 0 0-.236-1.168l-.056-.125-.112-.211-.096-.155-.033-.049a3.011 3.011 0 0 0-.258-.322l.129.15-.075-.09-.159-.168-.084-.08a3.015 3.015 0 0 0-.174-.147l-.183-.132-.124-.079a2.993 2.993 0 0 0-.245-.131l-.126-.057A2.99 2.99 0 0 0 8 5Z"}))},l0t=s0t;var WD={};J(WD,{icon:()=>f0t});var B7r=T(z());var u0t=["title","titleId"];function Dae(){return Dae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function p0t(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}var d0t=function(t){var r=t.title,n=t.titleId,o=c0t(t,u0t);return l("svg",Dae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m5.142 11.074-1.912.548a2.532 2.532 0 1 1-1.395-4.867l1.947-.559a2.532 2.532 0 0 1 2.555.713l1.53-5.335c.139-.485.6-.897 1.159-1.238.27-.164.52-.278.779-.32.814-.132 1.503.558 1.261 1.422L9.574 6.643l4.988-1.43c.864-.242 1.554.447 1.422 1.26-.042.26-.156.51-.32.78-.341.56-.753 1.02-1.238 1.16L9.523 9.817a2.53 2.53 0 0 1 .56 2.4l-.56 1.947a2.532 2.532 0 1 1-4.867-1.395l.486-1.696Zm.33-1.148.48-1.673a1.52 1.52 0 0 0-1.89-1.083l-1.948.558a1.52 1.52 0 0 0 .837 2.92l2.52-.722Zm3.773-2.135-.33 1.148 5.232-1.5c.324-.093 1.182-1.39.694-1.253L9.245 7.791ZM5.63 13.049a1.52 1.52 0 0 0 2.92.837l.559-1.947a1.52 1.52 0 0 0-1.553-1.935l2.537-8.845c.136-.488-1.16.37-1.253.694L5.63 13.05Zm.973.279.559-1.947a.506.506 0 1 1 .973.279l-.558 1.947a.506.506 0 1 1-.974-.28Zm-3.93-3.653a.506.506 0 1 1-.28-.973l1.947-.558a.506.506 0 0 1 .28.973l-1.948.558Z"}))},f0t=d0t;var HD={};J(HD,{icon:()=>y0t});var W7r=T(z());var h0t=["title","titleId"];function Lae(){return Lae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function v0t(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}var g0t=function(t){var r=t.title,n=t.titleId,o=m0t(t,h0t);return l("svg",Lae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 12h12v-1.97c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V12Zm-1 0V3c0-1.105 3.134-2 7-2s7 .895 7 2v9c0 1.105-3.134 2-7 2s-7-.895-7-2Zm1-3h12V7.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V9Zm0-4.97V6h12V4.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97Zm10.675-1.483C11.467 2.202 9.795 2 8 2c-1.794 0-3.467.202-4.675.547-.492.14-.88.298-1.136.453.256.155.644.312 1.136.453C4.533 3.798 6.205 4 8 4c1.794 0 3.467-.202 4.675-.547.492-.14.88-.298 1.136-.453-.256-.155-.644-.312-1.136-.453ZM2 6c.257.155.833.312 1.325.453C4.533 6.798 6.205 7 8 7c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2Zm0 3c.257.155.833.312 1.325.453C4.533 9.798 6.205 10 8 10c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2Zm0 3c.257.155.833.312 1.325.453C4.533 12.798 6.205 13 8 13c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2Z"}))},y0t=g0t;var VD={};J(VD,{icon:()=>_0t});var V7r=T(z());var b0t=["title","titleId"];function Nae(){return Nae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function O0t(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}var x0t=function(t){var r=t.title,n=t.titleId,o=w0t(t,b0t);return l("svg",Nae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M2 2a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h4l-1 3H3.5a.5.5 0 0 0 0 1h9a.5.5 0 0 0 0-1H11l-1-3h4a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H2zm0 8V3h12v7H2zm5 1h2l1 3H6l1-3z",clipRule:"evenodd"}),l("path",{d:"M4.5 6a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1h-1zm3 0a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1h-1zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 0 1h-1a.5.5 0 0 1-.5-.5z"}))},_0t=x0t;var $D={};J($D,{icon:()=>k0t});var Z7r=T(z());var S0t=["title","titleId"];function Fae(){return Fae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function E0t(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}var P0t=function(t){var r=t.title,n=t.titleId,o=I0t(t,S0t);return l("svg",Fae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 1.5a.5.5 0 0 0-1 0V4H1.5a.5.5 0 0 0 0 1H4v2.5a.5.5 0 0 0 1 0V5h2.5a.5.5 0 0 0 0-1H5V1.5Zm3 10a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5Zm4.854-7.646a.5.5 0 0 0-.708-.708l-9 9a.5.5 0 0 0 .708.708l9-9Z"}))},k0t=P0t;var ZD={};J(ZD,{icon:()=>A0t});var U7r=T(z());var j0t=["title","titleId"];function Bae(){return Bae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function C0t(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}var M0t=function(t){var r=t.title,n=t.titleId,o=T0t(t,j0t);return l("svg",Bae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.967 10.864c.332.787 1.085 1.337 1.962 1.337h3.673l2.755 2.8v-2.8c1.184 0 2.143-1.003 2.143-2.24V6.604c0-1.237-.96-2.24-2.143-2.24h-1.071v4.334c0 1.197-.896 2.167-2 2.167h-5.32Z"}),l("path",{d:"M4.905 8.718h4.166c.592 0 1.072-.502 1.072-1.12V4.24c0-.618-.48-1.12-1.072-1.12H2.643c-.592 0-1.072.502-1.072 1.12V7.6c0 .617.48 1.119 1.072 1.119h1.071v1.452l1.191-1.452Zm.493 1.12-2.755 2.798V9.837C1.459 9.837.5 8.835.5 7.598V4.24C.5 3.003 1.46 2 2.643 2H9.07c1.184 0 2.143 1.003 2.143 2.24v3.358c0 1.237-.96 2.24-2.143 2.24H5.398Z"}))},A0t=M0t;var qD={};J(qD,{icon:()=>F0t});var J7r=T(z());var R0t=["title","titleId"];function zae(){return zae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function L0t(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}var N0t=function(t){var r=t.title,n=t.titleId,o=D0t(t,R0t);return l("svg",zae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V15a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h8.8ZM14 5h-3.5a.5.5 0 0 1-.5-.5V1H2v14h12V5Zm-8.5 7a.5.5 0 1 1 0-1h5a.5.5 0 1 1 0 1h-5Zm0-3a.5.5 0 0 1 0-1h5a.5.5 0 1 1 0 1h-5Z"}))},F0t=N0t;var UD={};J(UD,{icon:()=>V0t});var K7r=T(z());var B0t=["title","titleId"];function Wae(){return Wae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function W0t(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}var H0t=function(t){var r=t.title,n=t.titleId,o=z0t(t,B0t);return l("svg",Wae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m8.505 8.995 6.453-6.44-1.5-1.5-6.453 6.44 1.5 1.5ZM12.968.19c.258-.238.657-.26.91 0l1.928 1.929a.642.642 0 0 1 0 .909l-6.78 6.784A.641.641 0 0 1 8.57 10H6.643A.643.643 0 0 1 6 9.357V7.43c0-.17.067-.335.188-.455L12.968.19ZM4.5 13a.5.5 0 1 1 0-1h7a.5.5 0 1 1 0 1h-7Zm4-12a.5.5 0 0 1 0 1H2v13h12V7.5a.5.5 0 1 1 1 0V15a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h6.5Z"}))},V0t=H0t;var GD={};J(GD,{icon:()=>G0t});var Q7r=T(z());var $0t=["title","titleId"];function Hae(){return Hae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function q0t(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}var U0t=function(t){var r=t.title,n=t.titleId,o=Z0t(t,$0t);return l("svg",Hae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9 3.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0zM9 5v3h1v1H8V6H7V5h2z"}),l("path",{d:"M13.855 14.147a1.34 1.34 0 0 1-.158-.246A1.998 1.998 0 0 1 13.5 13c0-.414.103-.713.197-.901a1.34 1.34 0 0 1 .158-.246l.003-.005A.5.5 0 0 0 14 11.5V.5a.5.5 0 0 0-.5-.5H3.461l-.083.005a2.957 2.957 0 0 0-1.102.298 2.257 2.257 0 0 0-.88.763C1.148 1.44 1 1.913 1 2.5V13c0 .463.117.843.318 1.145.2.298.462.491.708.615a2.344 2.344 0 0 0 .94.24H3v-1c-.005 0-.015 0-.029-.002a1.344 1.344 0 0 1-.498-.133.817.817 0 0 1-.323-.275C2.07 13.47 2 13.287 2 13s.07-.47.15-.59a.817.817 0 0 1 .324-.275A1.344 1.344 0 0 1 3 12h9.658c-.091.27-.158.605-.158 1s.067.73.158 1H8v1h5.5a.5.5 0 0 0 .359-.848l-.004-.005zm-.001 0 .002.002-.002-.002zM2.724 1.197c.092-.046.186-.082.276-.11C3 2.918 3.001 11 2.999 11h-.033a1.977 1.977 0 0 0-.283.03 2.344 2.344 0 0 0-.657.21L2 11.254V2.5c0-.413.102-.689.229-.879.128-.193.304-.328.495-.424zM4 11V1h9v10H4z"}),l("path",{d:"M7 13H4v2.5a.5.5 0 0 0 .854.354l.646-.647.646.647A.5.5 0 0 0 7 15.5V13z"}))},G0t=U0t;var JD={};J(JD,{icon:()=>Q0t});var t8r=T(z());var J0t=["title","titleId"];function Vae(){return Vae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function K0t(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}var Y0t=function(t){var r=t.title,n=t.titleId,o=X0t(t,J0t);return l("svg",Vae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V13a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h6.8ZM12 5H8.5a.5.5 0 0 1-.5-.5V1H2v12h10V5Zm-7.5 6a.5.5 0 1 1 0-1h5a.5.5 0 1 1 0 1h-5Zm0-3a.5.5 0 0 1 0-1h5a.5.5 0 1 1 0 1h-5Zm1 8a.5.5 0 1 1 0-1H14V6.5a.5.5 0 1 1 1 0V15a1 1 0 0 1-1 1H5.5Z"}))},Q0t=Y0t;var XD={};J(XD,{icon:()=>o1t});var n8r=T(z());var e1t=["title","titleId"];function $ae(){return $ae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function r1t(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}var n1t=function(t){var r=t.title,n=t.titleId,o=t1t(t,e1t);return l("svg",$ae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("circle",{cx:8,cy:8,r:4}))},o1t=n1t;var KD={};J(KD,{icon:()=>u1t});var i8r=T(z());var i1t=["title","titleId"];function Zae(){return Zae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function s1t(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}var l1t=function(t){var r=t.title,n=t.titleId,o=a1t(t,i1t);return l("svg",Zae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 .5c4.136 0 7.5 3.364 7.5 7.5s-3.364 7.5-7.5 7.5S.5 12.136.5 8 3.864.5 8 .5Zm0 .882a6.618 6.618 0 1 0 0 13.236A6.618 6.618 0 0 0 8 1.382Z",clipRule:"evenodd"}),l("path",{d:"M9 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"}))},u1t=l1t;var YD={};J(YD,{icon:()=>h1t});var s8r=T(z());var c1t=["title","titleId"];function qae(){return qae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function d1t(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}var f1t=function(t){var r=t.title,n=t.titleId,o=p1t(t,c1t);return l("svg",qae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8.135 14.043a.75.75 0 0 0 .025-1.06l-4.591-4.81a.25.25 0 0 1 0-.346l4.59-4.81a.75.75 0 1 0-1.084-1.035l-4.591 4.81a1.75 1.75 0 0 0 0 2.416l4.59 4.81c.287.3.761.31 1.061.024Z",clipRule:"evenodd"}),l("path",{fillRule:"evenodd",d:"M14.135 14.043a.75.75 0 0 0 .025-1.06l-4.591-4.81a.25.25 0 0 1 0-.346l4.59-4.81a.75.75 0 1 0-1.084-1.035l-4.591 4.81a1.75 1.75 0 0 0 0 2.416l4.59 4.81c.287.3.761.31 1.061.024Z",clipRule:"evenodd"}))},h1t=f1t;var QD={};J(QD,{icon:()=>b1t});var u8r=T(z());var m1t=["title","titleId"];function Uae(){return Uae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function g1t(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}var y1t=function(t){var r=t.title,n=t.titleId,o=v1t(t,m1t);return l("svg",Uae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M2.232 14.043a.75.75 0 0 1-.025-1.06l4.591-4.81a.25.25 0 0 0 0-.346l-4.59-4.81a.75.75 0 0 1 1.085-1.035l4.59 4.81a1.75 1.75 0 0 1 0 2.416l-4.59 4.81a.75.75 0 0 1-1.06.024Z",clipRule:"evenodd"}),l("path",{fillRule:"evenodd",d:"M8.232 14.043a.75.75 0 0 1-.025-1.06l4.591-4.81a.25.25 0 0 0 0-.346l-4.59-4.81a.75.75 0 0 1 1.085-1.035l4.59 4.81a1.75 1.75 0 0 1 0 2.416l-4.59 4.81a.75.75 0 0 1-1.06.024Z",clipRule:"evenodd"}))},b1t=y1t;var eL={};J(eL,{icon:()=>S1t});var p8r=T(z());var w1t=["title","titleId"];function Gae(){return Gae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function x1t(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}var _1t=function(t){var r=t.title,n=t.titleId,o=O1t(t,w1t);return l("svg",Gae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m9 9.114 1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 8a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 9.082V.556C8 .249 8.224 0 8.5 0s.5.249.5.556v8.558z"}),l("path",{d:"M16 13.006V10h-1v3.006a.995.995 0 0 1-.994.994H3.01a.995.995 0 0 1-.994-.994V10h-1v3.006c0 1.1.892 1.994 1.994 1.994h10.996c1.1 0 1.994-.893 1.994-1.994z"}))},S1t=_1t;var tL={};J(tL,{icon:()=>j1t});var f8r=T(z());var I1t=["title","titleId"];function Jae(){return Jae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function P1t(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}var k1t=function(t){var r=t.title,n=t.titleId,o=E1t(t,I1t);return l("svg",Jae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 2h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2ZM1.5 1a.5.5 0 0 1 .5.5v13a.5.5 0 1 1-1 0v-13a.5.5 0 0 1 .5-.5Zm13 0a.5.5 0 0 1 .5.5v13a.5.5 0 1 1-1 0v-13a.5.5 0 0 1 .5-.5Z"}))},j1t=k1t;var rL={};J(rL,{icon:()=>R1t});var m8r=T(z());var T1t=["title","titleId"];function Xae(){return Xae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function M1t(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}var A1t=function(t){var r=t.title,n=t.titleId,o=C1t(t,T1t);return l("svg",Xae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 5h8a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2ZM1.5 1h13a.5.5 0 1 1 0 1h-13a.5.5 0 0 1 0-1Zm0 13h13a.5.5 0 1 1 0 1h-13a.5.5 0 1 1 0-1Z"}))},R1t=A1t;var nL={};J(nL,{icon:()=>B1t});var g8r=T(z());var D1t=["title","titleId"];function Kae(){return Kae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function N1t(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}var F1t=function(t){var r=t.title,n=t.titleId,o=L1t(t,D1t);return l("svg",Kae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 1h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2ZM1.5 14h13a.5.5 0 1 1 0 1h-13a.5.5 0 1 1 0-1Z"}))},B1t=F1t;var oL={};J(oL,{icon:()=>$1t});var b8r=T(z());var z1t=["title","titleId"];function Yae(){return Yae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function H1t(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}var V1t=function(t){var r=t.title,n=t.titleId,o=W1t(t,z1t);return l("svg",Yae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 4H7V1.5a.5.5 0 0 1 1 0V4Zm0 8v2.5a.5.5 0 1 1-1 0V12h1ZM3 5h9a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Z"}))},$1t=V1t;var iL={};J(iL,{icon:()=>J1t});var O8r=T(z());var Z1t=["title","titleId"];function Qae(){return Qae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function U1t(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}var G1t=function(t){var r=t.title,n=t.titleId,o=q1t(t,Z1t);return l("svg",Qae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 5h8a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2ZM1.5 1a.5.5 0 0 1 .5.5v13a.5.5 0 1 1-1 0v-13a.5.5 0 0 1 .5-.5Z"}))},J1t=G1t;var aL={};J(aL,{icon:()=>evt});var _8r=T(z());var X1t=["title","titleId"];function ese(){return ese=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Y1t(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}var Q1t=function(t){var r=t.title,n=t.titleId,o=K1t(t,X1t);return l("svg",ese({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 7v1H1.5a.5.5 0 0 1 0-1H4Zm8 0h2.5a.5.5 0 1 1 0 1H12V7ZM7 1h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2Z"}))},evt=Q1t;var sL={};J(sL,{icon:()=>ivt});var I8r=T(z());var tvt=["title","titleId"];function tse(){return tse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nvt(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}var ovt=function(t){var r=t.title,n=t.titleId,o=rvt(t,tvt);return l("svg",tse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 5h8a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Zm11.5-4a.5.5 0 0 1 .5.5v13a.5.5 0 1 1-1 0v-13a.5.5 0 0 1 .5-.5Z"}))},ivt=ovt;var lL={};J(lL,{icon:()=>cvt});var P8r=T(z());var avt=["title","titleId"];function rse(){return rse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function lvt(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}var uvt=function(t){var r=t.title,n=t.titleId,o=svt(t,avt);return l("svg",rse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 3h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2ZM1.5 1h13a.5.5 0 1 1 0 1h-13a.5.5 0 0 1 0-1Z"}))},cvt=uvt;var uL={};J(uL,{icon:()=>mvt});var j8r=T(z());var pvt=["title","titleId"];function nse(){return nse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fvt(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}var hvt=function(t){var r=t.title,n=t.titleId,o=dvt(t,pvt);return l("svg",nse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 8h5a1 1 0 0 1 1 1v5H3a1 1 0 0 1-1-1V8Zm1-7h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Z"}))},mvt=hvt;var cL={};J(cL,{icon:()=>wvt});var C8r=T(z());var vvt=["title","titleId"];function ose(){return ose=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yvt(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}var bvt=function(t){var r=t.title,n=t.titleId,o=gvt(t,vvt);return l("svg",ose({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9 8h5v5a1 1 0 0 1-1 1H8V9a1 1 0 0 1 1-1ZM3 1h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Z"}))},wvt=bvt;var pL={};J(pL,{icon:()=>Ivt});var A8r=T(z());var Ovt=["title","titleId"];function ise(){return ise=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _vt(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}var Svt=function(t){var r=t.title,n=t.titleId,o=xvt(t,Ovt);return l("svg",ise({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 2h5v5a1 1 0 0 1-1 1H2V3a1 1 0 0 1 1-1Zm0-1h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Z"}))},Ivt=Svt;var dL={};J(dL,{icon:()=>Tvt});var D8r=T(z());var Evt=["title","titleId"];function ase(){return ase=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kvt(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}var jvt=function(t){var r=t.title,n=t.titleId,o=Pvt(t,Evt);return l("svg",ase({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 2h5a1 1 0 0 1 1 1v5H9a1 1 0 0 1-1-1V2ZM3 1h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Z"}))},Tvt=jvt;var fL={};J(fL,{icon:()=>Dvt});var N8r=T(z());var Cvt=["title","titleId"];function sse(){return sse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Avt(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}var Rvt=function(t){var r=t.title,n=t.titleId,o=Mvt(t,Cvt);return l("svg",sse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 4V3h6v1H5ZM3 7V6h10v1H3Zm2 3V9h6v1H5Zm-2 3v-1h10v1H3Z"}))},Dvt=Rvt;var hL={};J(hL,{icon:()=>zvt});var B8r=T(z());var Lvt=["title","titleId"];function lse(){return lse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Fvt(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}var Bvt=function(t){var r=t.title,n=t.titleId,o=Nvt(t,Lvt);return l("svg",lse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 4V3h6v1H2Zm0 3V6h10v1H2Zm0 3V9h6v1H2Zm0 3v-1h10v1H2Z"}))},zvt=Bvt;var mL={};J(mL,{icon:()=>Zvt});var W8r=T(z());var Wvt=["title","titleId"];function use(){return use=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Vvt(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}var $vt=function(t){var r=t.title,n=t.titleId,o=Hvt(t,Wvt);return l("svg",use({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 4V3h6v1H8ZM4 7V6h10v1H4Zm4 3V9h6v1H8Zm-4 3v-1h10v1H4Z"}))},Zvt=$vt;var vL={};J(vL,{icon:()=>Xvt});var V8r=T(z());var qvt=["title","titleId"];function cse(){return cse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Gvt(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}var Jvt=function(t){var r=t.title,n=t.titleId,o=Uvt(t,qvt);return l("svg",cse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.193 13H4V3h4.151c1.816 0 2.987.977 2.987 2.495 0 1.074-.797 2.01-1.823 2.176v.055c1.359.132 2.308 1.11 2.308 2.433 0 1.76-1.296 2.841-3.43 2.841ZM5.788 4.393v2.82h1.635c1.248 0 1.948-.526 1.948-1.455 0-.873-.603-1.365-1.67-1.365H5.788Zm0 7.214h1.996c1.316 0 2.016-.547 2.016-1.573 0-1.019-.72-1.552-2.092-1.552h-1.92v3.125Z"}))},Xvt=Jvt;var gL={};J(gL,{icon:()=>tgt});var Z8r=T(z());var Kvt=["title","titleId"];function pse(){return pse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Qvt(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}var egt=function(t){var r=t.title,n=t.titleId,o=Yvt(t,Kvt);return l("svg",pse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.597 3a.411.411 0 0 0-.299.132l-1.85 1.993-.756-.7a.412.412 0 0 0-.28-.124.42.42 0 0 0-.292.098.333.333 0 0 0-.12.257.335.335 0 0 0 .127.254l1.064.982A.418.418 0 0 0 2.488 6a.411.411 0 0 0 .288-.126L4.904 3.58a.328.328 0 0 0 .095-.25.337.337 0 0 0-.126-.238A.421.421 0 0 0 4.597 3zm-.299 4.132A.411.411 0 0 1 4.597 7a.421.421 0 0 1 .276.093c.076.062.12.147.126.238a.328.328 0 0 1-.095.25L2.776 9.874a.411.411 0 0 1-.288.126.418.418 0 0 1-.297-.108L1.127 8.91A.335.335 0 0 1 1 8.656a.333.333 0 0 1 .12-.257.42.42 0 0 1 .292-.098c.108.005.21.05.28.123l.757.701 1.849-1.993zM4.597 11a.411.411 0 0 0-.299.132l-1.85 1.993-.756-.7a.412.412 0 0 0-.28-.124.421.421 0 0 0-.292.098.333.333 0 0 0-.12.257.335.335 0 0 0 .127.254l1.064.982a.418.418 0 0 0 .297.108.411.411 0 0 0 .288-.126l2.128-2.293a.328.328 0 0 0 .095-.25.337.337 0 0 0-.126-.238.421.421 0 0 0-.276-.093zM6.5 4a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1h-7zM6 8.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm.5 3.5a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1h-7z"}))},tgt=egt;var yL={};J(yL,{icon:()=>agt});var U8r=T(z());var rgt=["title","titleId"];function dse(){return dse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ogt(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}var igt=function(t){var r=t.title,n=t.titleId,o=ngt(t,rgt);return l("svg",dse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2.414 8.036 4.89 10.51a.5.5 0 0 1-.707.708L1.354 8.389a.5.5 0 0 1 0-.707l2.828-2.828a.5.5 0 1 1 .707.707L2.414 8.036Zm8.768 2.474 2.475-2.474-2.475-2.475a.5.5 0 0 1 .707-.707l2.829 2.828a.5.5 0 0 1 0 .707l-2.829 2.829a.5.5 0 1 1-.707-.708ZM8.559 2.506a.5.5 0 0 1 .981.19L7.441 13.494a.5.5 0 0 1-.981-.19L8.559 2.506Z"}))},agt=igt;var bL={};J(bL,{icon:()=>pgt});var J8r=T(z());var sgt=["title","titleId"];function fse(){return fse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ugt(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}var cgt=function(t){var r=t.title,n=t.titleId,o=lgt(t,sgt);return l("svg",fse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.111 10H12a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h1v1.297L6.111 10Zm.46 1L4 14v-3a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2H6.571Z"}))},pgt=cgt;var wL={};J(wL,{icon:()=>vgt});var K8r=T(z());var dgt=["title","titleId"];function hse(){return hse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hgt(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}var mgt=function(t){var r=t.title,n=t.titleId,o=fgt(t,dgt);return l("svg",hse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6 11a1 1 0 0 1 0 2H4a1 1 0 0 1 0-2V5a1 1 0 1 1 0-2h2a1 1 0 1 1 0 2v2h4V5a1 1 0 1 1 0-2h2a1 1 0 0 1 0 2v6a1 1 0 0 1 0 2h-2a1 1 0 0 1 0-2V9H6v2Z"}))},vgt=mgt;var OL={};J(OL,{icon:()=>Ogt});var Q8r=T(z());var ggt=["title","titleId"];function mse(){return mse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bgt(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}var wgt=function(t){var r=t.title,n=t.titleId,o=ygt(t,ggt);return l("svg",mse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.16 12H9.5a.5.5 0 1 1 0 1h-4a.5.5 0 1 1 0-1h1.639l1.7-8H7.5a.5.5 0 0 1 0-1h4a.5.5 0 1 1 0 1H9.861l-1.7 8Z"}))},Ogt=wgt;var xL={};J(xL,{icon:()=>Egt});var tIr=T(z());var xgt=["title","titleId"];function vse(){return vse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Sgt(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}var Igt=function(t){var r=t.title,n=t.titleId,o=_gt(t,xgt);return l("svg",vse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.556 5.051a.45.45 0 0 0 .637.637l1.503-1.504c.432-.431 1.278-.382 1.89.23.612.612.662 1.458.23 1.89L9.519 8.6c-.432.432-1.278.383-1.89-.23a.45.45 0 1 0-.636.637c.914.914 2.33 1.063 3.162.23l2.297-2.297c.833-.833.684-2.248-.23-3.162-.914-.915-2.33-1.063-3.162-.23L7.556 5.051zm.888 5.261a.45.45 0 0 0-.637 0l-1.503 1.504c-.432.431-1.278.382-1.89-.23-.612-.612-.661-1.458-.23-1.89L6.481 7.4c.432-.432 1.278-.383 1.89.23a.45.45 0 0 0 .636-.637c-.914-.914-2.33-1.063-3.162-.23L3.548 9.06c-.833.833-.685 2.248.23 3.162.914.915 2.33 1.063 3.162.23l1.504-1.503a.45.45 0 0 0 0-.637zM7.877 5.76a.39.39 0 0 0 .274-.114l1.503-1.504-1.503 1.504a.39.39 0 0 1-.274.114zm.912 3.183c-.4.003-.843-.172-1.202-.53.359.358.802.533 1.202.53zM12.18 3.82c-.502-.503-1.155-.766-1.773-.76.618-.006 1.27.257 1.773.76.898.898 1.034 2.275.23 3.078l-2.297 2.297 2.297-2.297c.804-.803.668-2.18-.23-3.078zm-4.062 6.42a.39.39 0 0 1 .284.667L6.898 12.41l1.504-1.503a.39.39 0 0 0-.284-.667zm-.926-3.965c.618-.006 1.27.257 1.773.76-.502-.503-1.155-.766-1.773-.76zM5.414 12.15a1.762 1.762 0 0 1-1.042-.522c-.626-.627-.692-1.511-.23-1.974L6.44 7.358 4.142 9.654c-.462.463-.396 1.348.23 1.974.311.311.687.484 1.042.522z"}))},Egt=Igt;var _L={};J(_L,{icon:()=>Cgt});var nIr=T(z());var Pgt=["title","titleId"];function gse(){return gse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jgt(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}var Tgt=function(t){var r=t.title,n=t.titleId,o=kgt(t,Pgt);return l("svg",gse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 8v1h1v1H1V9h1V8H1V7h3v1H3Zm1 4v2H1v-1h1v-1H1v-1h3v1ZM3 5h1v1H1V5h1V4H1V3h2v2Zm2.5-1h8a.5.5 0 1 1 0 1h-8a.5.5 0 0 1 0-1Zm0 4h8a.5.5 0 1 1 0 1h-8a.5.5 0 0 1 0-1Zm0 4h8a.5.5 0 1 1 0 1h-8a.5.5 0 1 1 0-1Z"}))},Cgt=Tgt;var SL={};J(SL,{icon:()=>Lgt});var iIr=T(z());var Mgt=["title","titleId"];function yse(){return yse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Rgt(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}var Dgt=function(t){var r=t.title,n=t.titleId,o=Agt(t,Mgt);return l("svg",yse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10 6H5C3.057 6 2 7.057 2 9s1.057 3 3 3h1.5v-1H5c-1.39 0-2-.61-2-2 0-1.39.61-2 2-2h5v3l3.5-3.5L10 3v3Z"}))},Lgt=Dgt;var IL={};J(IL,{icon:()=>Wgt});var sIr=T(z());var Ngt=["title","titleId"];function bse(){return bse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Bgt(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}var zgt=function(t){var r=t.title,n=t.titleId,o=Fgt(t,Ngt);return l("svg",bse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.023 10h1.274c.006.08.01.164.01.25a2.557 2.557 0 0 1-.883 1.949c-.284.25-.627.446-1.03.588A4.087 4.087 0 0 1 8.028 13a4.616 4.616 0 0 1-3.382-1.426c-.193-.259-.193-.5 0-.724.193-.223.438-.266.735-.13.343.363.748.655 1.213.876.466.22.949.33 1.449.33.637 0 1.132-.144 1.485-.433.353-.29.53-.67.53-1.14a1.72 1.72 0 0 0-.034-.353ZM5.586 7a2.49 2.49 0 0 1-.294-.507 2.316 2.316 0 0 1-.177-.934c0-.363.076-.701.228-1.015.152-.314.363-.586.633-.816.27-.23.588-.41.955-.537A3.683 3.683 0 0 1 8.145 3c.578 0 1.112.11 1.603.33.49.221.907.508 1.25.861.16.282.16.512 0 .692-.16.18-.38.214-.662.102a3.438 3.438 0 0 0-.978-.669 2.914 2.914 0 0 0-1.213-.242c-.54 0-.973.125-1.302.375-.328.25-.492.595-.492 1.036 0 .236.046.434.14.596.092.162.217.304.374.426.157.123.329.23.515.324.119.06.24.116.362.169H5.586ZM2.5 8h11a.5.5 0 1 1 0 1h-11a.5.5 0 0 1 0-1Z"}))},Wgt=zgt;var EL={};J(EL,{icon:()=>qgt});var uIr=T(z());var Hgt=["title","titleId"];function wse(){return wse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $gt(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}var Zgt=function(t){var r=t.title,n=t.titleId,o=Vgt(t,Hgt);return l("svg",wse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M14 3v2H2V3v10h12V3ZM2 2h12c.552 0 1 .413 1 .923v10.154c0 .51-.448.923-1 .923H2c-.552 0-1-.413-1-.923V2.923C1 2.413 1.448 2 2 2Zm0 5h12v1H2V7Zm0 3h12v1H2v-1Z"}))},qgt=Zgt;var PL={};J(PL,{icon:()=>Kgt});var pIr=T(z());var Ugt=["title","titleId"];function Ose(){return Ose=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Jgt(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}var Xgt=function(t){var r=t.title,n=t.titleId,o=Ggt(t,Ugt);return l("svg",Ose({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 3.536V7.8c0 1.628 1.224 2.6 3 2.6 1.783 0 3-.972 3-2.6V3.536c0-.357.167-.536.5-.536.333 0 .5.179.5.536v4.318c0 2.093-1.665 3.546-4 3.546S4 9.893 4 7.8V3.536C4 3.179 4.167 3 4.5 3c.333 0 .5.179.5.536ZM2.5 13h11a.5.5 0 1 1 0 1h-11a.5.5 0 1 1 0-1Z"}))},Kgt=Xgt;var kL={};J(kL,{icon:()=>ryt});var fIr=T(z());var Ygt=["title","titleId"];function xse(){return xse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function eyt(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}var tyt=function(t){var r=t.title,n=t.titleId,o=Qgt(t,Ygt);return l("svg",xse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.5 6h5c1.943 0 3 1.057 3 3s-1.057 3-3 3H9v-1h1.5c1.39 0 2-.61 2-2 0-1.39-.61-2-2-2h-5v3L2 6.5 5.5 3v3Z"}))},ryt=tyt;var jL={};J(jL,{icon:()=>syt});var mIr=T(z());var nyt=["title","titleId"];function _se(){return _se=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function iyt(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}var ayt=function(t){var r=t.title,n=t.titleId,o=oyt(t,nyt);return l("svg",_se({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.5 4h8a.5.5 0 1 1 0 1h-8a.5.5 0 0 1 0-1Zm0 4h8a.5.5 0 1 1 0 1h-8a.5.5 0 0 1 0-1Zm0 4h8a.5.5 0 1 1 0 1h-8a.5.5 0 1 1 0-1Zm-3-7a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm0 4a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm0 4a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Z"}))},syt=ayt;var TL={};J(TL,{icon:()=>dyt});var gIr=T(z());var lyt=["title","titleId"];function Sse(){return Sse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cyt(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}var pyt=function(t){var r=t.title,n=t.titleId,o=uyt(t,lyt);return l("svg",Sse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M14.95 3.684 8.637 8.912a1 1 0 0 1-1.276 0L1.051 3.684A.999.999 0 0 0 1 4v8a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4a.999.999 0 0 0-.05-.316ZM2 2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm-.21 1 5.576 4.603a1 1 0 0 0 1.27.003L14.268 3H1.79Z"}))},dyt=pyt;var CL={};J(CL,{icon:()=>Ese});var bIr=T(z());var fyt=["title","titleId"];function Ise(){return Ise=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function myt(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}var vyt=function(t){var r=t.title,n=t.titleId,o=hyt(t,fyt);return l("svg",Ise({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o))},Ese=vyt;var ML={};J(ML,{icon:()=>Oyt});var OIr=T(z());var gyt=["title","titleId"];function Pse(){return Pse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function byt(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}var wyt=function(t){var r=t.title,n=t.titleId,o=yyt(t,gyt);return l("svg",Pse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.406 13.454a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}),l("path",{fillRule:"evenodd",d:"M6.86 6.09a2.545 2.545 0 1 1 2.497-3.045h.368a2.727 2.727 0 1 1 0 5.455H6.543a1.727 1.727 0 1 0 0 3.454h.367a2.546 2.546 0 1 1 0 1h-.367a2.727 2.727 0 1 1 0-5.454h3.182a1.727 1.727 0 1 0 0-3.455h-.368a2.546 2.546 0 0 1-2.496 2.046L6.86 6.09Zm0-1a1.545 1.545 0 1 1 0-3.09 1.545 1.545 0 0 1 0 3.09ZM9.407 14a1.545 1.545 0 1 1 0-3.09 1.545 1.545 0 0 1 0 3.09Z",clipRule:"evenodd"}))},Oyt=wyt;var AL={};J(AL,{icon:()=>Eyt});var _Ir=T(z());var xyt=["title","titleId"];function kse(){return kse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Syt(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}var Iyt=function(t){var r=t.title,n=t.titleId,o=_yt(t,xyt);return l("svg",kse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M15.862 14.18v.001a.482.482 0 0 1 .1.521.5.5 0 0 1-.447.299h-3.149c-.07 0-.136 0-.2-.003a.664.664 0 0 1-.414-.14c-.35-.31-.684-.637-1.001-.981l-1.772-1.738a5.941 5.941 0 0 1-3.802.14l-.045-.012a5.89 5.89 0 0 1-2.682-1.712A5.715 5.715 0 0 1 1.08 7.72a5.66 5.66 0 0 1 .348-3.118A5.78 5.78 0 0 1 3.39 2.124a5.979 5.979 0 0 1 6.136-.505 5.836 5.836 0 0 1 2.356 2.123 5.67 5.67 0 0 1 .873 3.017l.001.003c0 .128-.051.25-.143.34a.495.495 0 0 1-.694 0 .476.476 0 0 1-.143-.34c0-.95-.288-1.878-.826-2.668a4.88 4.88 0 0 0-2.198-1.769 4.99 4.99 0 0 0-2.83-.273 4.93 4.93 0 0 0-2.509 1.314 4.774 4.774 0 0 0-1.34 2.46A4.715 4.715 0 0 0 2.352 8.6a4.82 4.82 0 0 0 1.804 2.155c.805.528 1.752.81 2.721.81a4.899 4.899 0 0 0 1.296-.194l.032-.009.717-.211a.506.506 0 0 1 .483.111l1.11 1.026 1.788 1.752h2.03l-3.657-3.583a.475.475 0 0 1 .014-.666.495.495 0 0 1 .679-.013l4.493 4.402z"}),l("path",{d:"M7.097 3.468 9.679 4.93a.433.433 0 0 1 .218.37v2.924a.422.422 0 0 1-.218.37l-2.582 1.461a.438.438 0 0 1-.437 0L4.077 8.594a.433.433 0 0 1-.218-.37V5.3a.422.422 0 0 1 .218-.37L6.66 3.467a.446.446 0 0 1 .437 0zm1.845 4.27V5.784a.328.328 0 0 0-.17-.287L7.047 4.52a.342.342 0 0 0-.338 0l-1.726.977a.336.336 0 0 0-.168.287v1.953a.326.326 0 0 0 .17.287l1.724.977a.342.342 0 0 0 .338 0l1.726-.978a.334.334 0 0 0 .169-.287z"}))},Eyt=Iyt;var RL={};J(RL,{icon:()=>Cyt});var IIr=T(z());var Pyt=["title","titleId"];function jse(){return jse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jyt(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}var Tyt=function(t){var r=t.title,n=t.titleId,o=kyt(t,Pyt);return l("svg",jse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m2.648 9.937 7.29-7.288a2.21 2.21 0 0 1 3.124 0l2.29 2.288a2.21 2.21 0 0 1 0 3.126L10.413 13H12.5a.5.5 0 0 1 0 1H4.501a2.21 2.21 0 0 1-1.563-.647l.707-.707c.227.226.535.354.856.354h4.005a1.21 1.21 0 0 0 .848-.354l1.292-1.293-4-4-3.29 3.291a1.21 1.21 0 0 0 0 1.712l.29.29-.708.707-.29-.29a2.21 2.21 0 0 1 0-3.126zM8 6h6.89a1.208 1.208 0 0 0-.246-.356L14 5H9L8 6zm2-2h3l-.645-.644a1.21 1.21 0 0 0-1.71 0L10 4zm4.89 3H7.708l1 1H14l.644-.644A1.22 1.22 0 0 0 14.891 7zM9.708 9l1.646 1.646L13 9H9.707z"}),l("path",{d:"M14 11.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0zm1.5-.5a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1zm-1 2a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1h-1z"}))},Cyt=Tyt;var DL={};J(DL,{icon:()=>Lyt});var PIr=T(z());var Myt=["title","titleId"];function Tse(){return Tse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ryt(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}var Dyt=function(t){var r=t.title,n=t.titleId,o=Ayt(t,Myt);return l("svg",Tse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.854 5.146a.5.5 0 1 0-.708.708L6.793 8.5l-2.647 2.646a.5.5 0 0 0 .708.708L7.5 9.207l2.646 2.647a.5.5 0 0 0 .708-.708L8.207 8.5l2.647-2.646a.5.5 0 0 0-.708-.708L7.5 7.793 4.854 5.146Z"}),l("path",{fillRule:"evenodd",d:"M5 1a1 1 0 0 0-.707.293l-4 4A1 1 0 0 0 0 6v5a1 1 0 0 0 .293.707l4 4A1 1 0 0 0 5 16h5a1 1 0 0 0 .707-.293l4-4A1 1 0 0 0 15 11V6a1 1 0 0 0-.293-.707l-4-4A1 1 0 0 0 10 1H5Zm5 1H5L1 6v5l4 4h5l4-4V6l-4-4Z"}))},Lyt=Dyt;var LL={};J(LL,{icon:()=>Wyt});var jIr=T(z());var Nyt=["title","titleId"];function Cse(){return Cse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Byt(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}var zyt=function(t){var r=t.title,n=t.titleId,o=Fyt(t,Nyt);return l("svg",Cse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M10 1a1 1 0 0 1 .707.293l4 4A1 1 0 0 1 15 6v5a1 1 0 0 1-.293.707l-4 4A1 1 0 0 1 10 16H5a1 1 0 0 1-.707-.293l-4-4A1 1 0 0 1 0 11V6a1 1 0 0 1 .293-.707l4-4A1 1 0 0 1 5 1h5ZM4.146 5.146a.5.5 0 0 1 .708 0L7.5 7.793l2.646-2.647a.5.5 0 0 1 .708.708L8.207 8.5l2.647 2.646a.5.5 0 0 1-.708.708L7.5 9.207l-2.646 2.647a.5.5 0 0 1-.708-.708L6.793 8.5 4.146 5.854a.5.5 0 0 1 0-.708Z"}))},Wyt=zyt;var NL={};J(NL,{icon:()=>qyt});var CIr=T(z());var Hyt=["title","titleId"];function Mse(){return Mse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $yt(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}var Zyt=function(t){var r=t.title,n=t.titleId,o=Vyt(t,Hyt);return l("svg",Mse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 2.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5ZM2.5 4a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-2ZM2 6.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5ZM2.5 8a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-2ZM2 10.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1-.5-.5v-2ZM6.5 2a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-2ZM6 4.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5ZM6.5 6a.5.5 0 0 0-.5.5v6a.5.5 0 0 0 .5.5h2a.5.5 0 0 0 .5-.5v-6a.5.5 0 0 0-.5-.5h-2ZM10 2.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Zm.5 1.5a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-2ZM10 6.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Zm.5 1.5a.5.5 0 0 0-.5.5v4a.5.5 0 0 0 .5.5h2a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 0-.5-.5h-2Z"}),l("path",{d:"M2 0h11a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H2Z"}))},qyt=Zyt;var FL={};J(FL,{icon:()=>Kyt});var AIr=T(z());var Uyt=["title","titleId"];function Ase(){return Ase=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Jyt(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}var Xyt=function(t){var r=t.title,n=t.titleId,o=Gyt(t,Uyt);return l("svg",Ase({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M12.535 12.493a.47.47 0 0 1 .468.468v2.564a.473.473 0 0 1-.466.475H3V0H12.595a.45.45 0 0 1 .398.463v2.565a.469.469 0 0 1-.468.467h-.065a.468.468 0 0 1-.467-.467V1H4v14h8.01l-.007-2.04c0-.257.21-.467.467-.467h.065Zm-1.096-7.59 2.121 2.122a1.5 1.5 0 0 1 0 2.121l-2.12 2.122a.5.5 0 1 1-.708-.708l2.121-2.12a.5.5 0 0 0 0-.708l-2.121-2.121a.5.5 0 0 1 .707-.707Z"}))},Kyt=Xyt;var BL={};J(BL,{icon:()=>rbt});var DIr=T(z());var Yyt=["title","titleId"];function Rse(){return Rse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ebt(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}var tbt=function(t){var r=t.title,n=t.titleId,o=Qyt(t,Yyt);return l("svg",Rse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m4.354 12.354 8-8a.5.5 0 0 0-.708-.708l-8 8a.5.5 0 0 0 .708.708ZM1 10.5a.5.5 0 1 1 1 0v3a.5.5 0 0 0 .5.5h3a.5.5 0 1 1 0 1h-3A1.5 1.5 0 0 1 1 13.5v-3Zm14-5a.5.5 0 1 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 1 1 0-1h3A1.5 1.5 0 0 1 15 2.5v3Z"}))},rbt=tbt;var zL={};J(zL,{icon:()=>sbt});var NIr=T(z());var nbt=["title","titleId"];function Dse(){return Dse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ibt(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}var abt=function(t){var r=t.title,n=t.titleId,o=obt(t,nbt);return l("svg",Dse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6.707 10 10 6.707A.5.5 0 0 0 9.293 6L6 9.293a.5.5 0 1 0 .707.707ZM4 9.5a.5.5 0 0 1 1 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 1 1 0 1h-1A1.5 1.5 0 0 1 4 10.5v-1Zm8-3a.5.5 0 1 1-1 0v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 1 0-1h1A1.5 1.5 0 0 1 12 5.5v1Z"}))},sbt=abt;var WL={};J(WL,{icon:()=>dbt});var BIr=T(z());var lbt=["title","titleId"];function Lse(){return Lse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cbt(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}var pbt=function(t){var r=t.title,n=t.titleId,o=ubt(t,lbt);return l("svg",Lse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.505 1c.422-.003.844.17 1.166.516l1.95 2.05c.213.228.213.6 0 .828a.52.52 0 0 1-.771 0L9 2.451v7.993c0 .307-.224.556-.5.556s-.5-.249-.5-.556v-7.96l-1.82 1.91a.52.52 0 0 1-.77 0 .617.617 0 0 1 0-.829l1.95-2.05A1.575 1.575 0 0 1 8.5 1h.005ZM4.18 7c-.473 0-.88.294-.972.703l-1.189 5.25a.776.776 0 0 0-.019.172c0 .483.444.875.99.875H14.01c.065 0 .13-.006.194-.017.537-.095.885-.556.778-1.03l-1.19-5.25C13.7 7.294 13.293 7 12.822 7H4.18ZM6 6v1h5V6h1.825c.946 0 1.76.606 1.946 1.447l1.19 5.4c.215.975-.482 1.923-1.556 2.118a2.18 2.18 0 0 1-.39.035H2.985C1.888 15 1 14.194 1 13.2c0-.119.013-.237.039-.353l1.19-5.4C2.414 6.606 3.229 6 4.174 6H6Z"}))},dbt=pbt;var HL={};J(HL,{icon:()=>gbt});var WIr=T(z());var fbt=["title","titleId"];function Nse(){return Nse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mbt(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}var vbt=function(t){var r=t.title,n=t.titleId,o=hbt(t,fbt);return l("svg",Nse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M15.98 7.873c.013.03.02.064.02.098v.06a.24.24 0 0 1-.02.097C15.952 8.188 13.291 14 8 14S.047 8.188.02 8.128A.24.24 0 0 1 0 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2s7.953 5.813 7.98 5.873Zm-1.37-.424a12.097 12.097 0 0 0-1.385-1.862C11.739 3.956 9.999 3 8 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 0 0-1.701 2.414 12.095 12.095 0 0 0 1.7 2.413C4.26 12.043 6.002 13 8 13s3.74-.956 5.225-2.587A12.097 12.097 0 0 0 14.926 8c-.08-.15-.189-.343-.315-.551ZM8 4.75A3.253 3.253 0 0 1 11.25 8 3.254 3.254 0 0 1 8 11.25 3.253 3.253 0 0 1 4.75 8 3.252 3.252 0 0 1 8 4.75Zm0 1C6.76 5.75 5.75 6.76 5.75 8S6.76 10.25 8 10.25 10.25 9.24 10.25 8 9.24 5.75 8 5.75Zm0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"}))},gbt=vbt;var VL={};J(VL,{icon:()=>xbt});var VIr=T(z());var ybt=["title","titleId"];function Fse(){return Fse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wbt(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}var Obt=function(t){var r=t.title,n=t.titleId,o=bbt(t,ybt);return l("svg",Fse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m5.318 13.47.776-.776A6.04 6.04 0 0 0 8 13c1.999 0 3.74-.956 5.225-2.587A12.097 12.097 0 0 0 14.926 8a12.097 12.097 0 0 0-1.701-2.413l-.011-.012.707-.708c1.359 1.476 2.045 2.976 2.058 3.006.014.03.021.064.021.098v.06a.24.24 0 0 1-.02.097C15.952 8.188 13.291 14 8 14a7.03 7.03 0 0 1-2.682-.53ZM2.04 11.092C.707 9.629.034 8.158.02 8.128A.24.24 0 0 1 0 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2c.962 0 1.837.192 2.625.507l-.78.78A6.039 6.039 0 0 0 8 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 0 0-1.701 2.414 12.11 12.11 0 0 0 1.674 2.383l-.708.708ZM8.362 4.77 7.255 5.877a2.262 2.262 0 0 0-1.378 1.378L4.77 8.362A3.252 3.252 0 0 1 8.362 4.77Zm2.86 2.797a3.254 3.254 0 0 1-3.654 3.654l1.06-1.06a2.262 2.262 0 0 0 1.533-1.533l1.06-1.06Zm-9.368 7.287a.5.5 0 0 1-.708-.708l13-13a.5.5 0 0 1 .708.708l-13 13Z"}))},xbt=Obt;var $L={};J($L,{icon:()=>Pbt});var ZIr=T(z());var _bt=["title","titleId"];function Bse(){return Bse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ibt(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}var Ebt=function(t){var r=t.title,n=t.titleId,o=Sbt(t,_bt);return l("svg",Bse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 16A8 8 0 1 1 8 0a8 8 0 0 1 0 16Zm0-1.067A6.933 6.933 0 1 0 8 1.067a6.933 6.933 0 0 0 0 13.866ZM5.333 6.4a1.067 1.067 0 1 1 0-2.133 1.067 1.067 0 0 1 0 2.133Zm5.334 0a1.067 1.067 0 1 1 0-2.133 1.067 1.067 0 0 1 0 2.133ZM2.739 8.802a.533.533 0 0 1 .922-.537C4.815 10.245 6.249 11.2 8 11.2c1.75 0 3.185-.956 4.34-2.935a.533.533 0 0 1 .92.537c-1.333 2.287-3.1 3.465-5.26 3.465-2.16 0-3.927-1.178-5.26-3.465Z"}))},Pbt=Ebt;var ZL={};J(ZL,{icon:()=>Mbt});var UIr=T(z());var kbt=["title","titleId"];function zse(){return zse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Tbt(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}var Cbt=function(t){var r=t.title,n=t.titleId,o=jbt(t,kbt);return l("svg",zse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 16A8 8 0 1 1 8 0a8 8 0 0 1 0 16zm0-1.067A6.933 6.933 0 1 0 8 1.067a6.933 6.933 0 0 0 0 13.866zM5.333 6.4a1.067 1.067 0 1 1 0-2.133 1.067 1.067 0 0 1 0 2.133zm5.334 0a1.067 1.067 0 1 1 0-2.133 1.067 1.067 0 0 1 0 2.133zM3.2 10.667a.533.533 0 0 1 0-1.067h9.6a.533.533 0 1 1 0 1.067H3.2z"}))},Mbt=Cbt;var qL={};J(qL,{icon:()=>Nbt});var JIr=T(z());var Abt=["title","titleId"];function Wse(){return Wse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Dbt(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}var Lbt=function(t){var r=t.title,n=t.titleId,o=Rbt(t,Abt);return l("svg",Wse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 16A8 8 0 1 1 8 0a8 8 0 0 1 0 16Zm0-1.067A6.933 6.933 0 1 0 8 1.067a6.933 6.933 0 0 0 0 13.866ZM5.333 6.4a1.067 1.067 0 1 1 0-2.133 1.067 1.067 0 0 1 0 2.133Zm5.334 0a1.067 1.067 0 1 1 0-2.133 1.067 1.067 0 0 1 0 2.133Zm2.487 3.868a.533.533 0 1 1-.708.797C10.936 9.725 9.458 9.067 8 9.067c-1.458 0-2.937.657-4.446 1.998a.533.533 0 1 1-.708-.797C4.536 8.765 6.258 8 8 8s3.463.765 5.154 2.268Z"}))},Nbt=Lbt;var UL={};J(UL,{icon:()=>Hbt});var KIr=T(z());var Fbt=["title","titleId"];function Hse(){return Hse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zbt(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}var Wbt=function(t){var r=t.title,n=t.titleId,o=Bbt(t,Fbt);return l("svg",Hse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 1h10a2 2 0 0 1 2 2v4.337a5.533 5.533 0 0 0-1-1.08V3a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h3.257c.314.38.677.716 1.08 1H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2Z"}),l("path",{d:"M3.5 6h3.837a5.54 5.54 0 0 0-1.08 1H3.5a.5.5 0 0 1 0-1Zm0 6h1.707c.098.345.228.677.388.991A.505.505 0 0 1 5.5 13h-2a.5.5 0 0 1 0-1Zm0-8a.5.5 0 0 1 0-1h9a.5.5 0 0 1 0 1h-9ZM3 9.5a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 0-1h-1a.5.5 0 0 0-.5.5Z"}),l("path",{fillRule:"evenodd",d:"M15 10.5a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0Zm-2.146-2.354a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708l4-4a.5.5 0 0 1 .708 0ZM9 10a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm4 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"}))},Hbt=Wbt;var GL={};J(GL,{icon:()=>Ubt});var QIr=T(z());var Vbt=["title","titleId"];function Vse(){return Vse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Zbt(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}var qbt=function(t){var r=t.title,n=t.titleId,o=$bt(t,Vbt);return l("svg",Vse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 5.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5Zm2 3a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5ZM7.5 11a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1h-1Z"}))},Ubt=qbt;var JL={};J(JL,{icon:()=>Ybt});var tEr=T(z());var Gbt=["title","titleId"];function $se(){return $se=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Xbt(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}var Kbt=function(t){var r=t.title,n=t.titleId,o=Jbt(t,Gbt);return l("svg",$se({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.5 1a.5.5 0 0 0 0 1h9a.5.5 0 0 0 0-1h-9Z"}),l("path",{fillRule:"evenodd",d:"M16 11.5a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0Zm-8 0a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5Z"}),l("path",{d:"M2 4.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5ZM4.5 7a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1h-1Z"}))},Ybt=Kbt;var XL={};J(XL,{icon:()=>n2t});var nEr=T(z());var Qbt=["title","titleId"];function Zse(){return Zse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function t2t(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}var r2t=function(t){var r=t.title,n=t.titleId,o=e2t(t,Qbt);return l("svg",Zse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.5 1a.5.5 0 0 0 0 1h9a.5.5 0 0 0 0-1h-9ZM2 4.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5Zm2 3a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 0 1h-1a.5.5 0 0 1-.5-.5ZM16 11.5a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0Zm-4.5-.707L9.854 9.146a.5.5 0 1 0-.708.708l1.647 1.646-1.647 1.646a.5.5 0 0 0 .708.708l1.646-1.647 1.646 1.647a.5.5 0 0 0 .708-.708L12.207 11.5l1.647-1.646a.5.5 0 0 0-.708-.708L11.5 10.793Z"}))},n2t=r2t;var KL={};J(KL,{icon:()=>l2t});var iEr=T(z());var o2t=["title","titleId"];function qse(){return qse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function a2t(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}var s2t=function(t){var r=t.title,n=t.titleId,o=i2t(t,o2t);return l("svg",qse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.999 15.999a8 8 0 1 1 0-16 8 8 0 0 1 0 16ZM8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14ZM3.5 5h9a.5.5 0 1 1 0 1h-9a.5.5 0 0 1 0-1Zm2 3h5a.5.5 0 1 1 0 1h-5a.5.5 0 0 1 0-1Zm2 3h1a.5.5 0 1 1 0 1h-1a.5.5 0 1 1 0-1Z"}))},l2t=s2t;var YL={};J(YL,{icon:()=>f2t});var sEr=T(z());var u2t=["title","titleId"];function Use(){return Use=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function p2t(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}var d2t=function(t){var r=t.title,n=t.titleId,o=c2t(t,u2t);return l("svg",Use({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.5 1a.5.5 0 0 0 0 1h9a.5.5 0 0 0 0-1h-9ZM16 11.5a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0Zm-4-3a.5.5 0 0 0-1 0V11H8.5a.5.5 0 0 0 0 1H11v2.5a.5.5 0 0 0 1 0V12h2.5a.5.5 0 0 0 0-1H12V8.5ZM2 4.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5ZM4.5 7a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1h-1Z"}))},f2t=d2t;var QL={};J(QL,{icon:()=>y2t});var uEr=T(z());var h2t=["title","titleId"];function Gse(){return Gse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function v2t(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}var g2t=function(t){var r=t.title,n=t.titleId,o=m2t(t,h2t);return l("svg",Gse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.686 8.464c1.547-.619 3.08-.619 4.628 0A.5.5 0 0 0 13 8V2a.5.5 0 0 0-.276-.447C11.259.82 9.458.82 7.342 1.526c-1.884.628-3.417.628-4.618.027A.5.5 0 0 0 2 2v12.5a.5.5 0 1 0 1 0V8.553c1.411.627 2.983.592 4.686-.089ZM3 2.741c1.322.42 2.878.327 4.658-.267C9.4 1.894 10.843 1.85 12 2.322v4.975c-1.56-.464-3.128-.384-4.686.239-1.54.616-2.892.616-4.09.017A.498.498 0 0 0 3 7.5V2.74Z"}))},y2t=g2t;var eN={};J(eN,{icon:()=>_2t});var pEr=T(z());var b2t=["title","titleId"];function Jse(){return Jse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function O2t(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}var x2t=function(t){var r=t.title,n=t.titleId,o=w2t(t,b2t);return l("svg",Jse({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.14.192 7.53 2.49a.67.67 0 0 0 .942 0L10.86.192a.677.677 0 0 1 .944 0 .65.65 0 0 1 0 .93l-2.388 2.3a2.02 2.02 0 0 1-2.832 0l-2.388-2.3a.65.65 0 0 1 0-.93.677.677 0 0 1 .944 0zm0 15.616 2.39-2.298a.67.67 0 0 1 .942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 0 0 0-.93l-2.388-2.3a2.02 2.02 0 0 0-2.832 0l-2.388 2.3a.65.65 0 0 0 0 .93c.26.256.683.256.944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},_2t=x2t;var tN={};J(tN,{icon:()=>k2t});var fEr=T(z());var S2t=["title","titleId"];function Xse(){return Xse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function E2t(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}var P2t=function(t){var r=t.title,n=t.titleId,o=I2t(t,S2t);return l("svg",Xse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2H1v11h6.1c.07.348.177.682.316 1H1a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.25a.75.75 0 0 1 .75.75v1.125c0 .069.056.125.125.125H13a1 1 0 0 1 1 1v3.416a4.962 4.962 0 0 0-1-.316V4H7.125A1.125 1.125 0 0 1 6 2.875V2zm10 10a4 4 0 1 1-8 0 4 4 0 0 1 8 0zm-1.646-1.354a.5.5 0 0 1 0 .708l-2.5 2.5a.5.5 0 0 1-.708 0l-1-1a.5.5 0 0 1 .708-.708l.646.647 2.146-2.147a.5.5 0 0 1 .708 0z"}))},k2t=P2t;var rN={};J(rN,{icon:()=>A2t});var mEr=T(z());var j2t=["title","titleId"];function Kse(){return Kse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function C2t(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}var M2t=function(t){var r=t.title,n=t.titleId,o=T2t(t,j2t);return l("svg",Kse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 2H2v11h12V4H8.125A1.125 1.125 0 0 1 7 2.875V2zm.25-1a.75.75 0 0 1 .75.75v1.125c0 .069.056.125.125.125H14a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.25z"}))},A2t=M2t;var nN={};J(nN,{icon:()=>F2t});var gEr=T(z());var R2t=["title","titleId"];function Yse(){return Yse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function L2t(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}var N2t=function(t){var r=t.title,n=t.titleId,o=D2t(t,R2t);return l("svg",Yse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m1 9.5.826-3.717A1 1 0 0 1 2.802 5H13V4H7.125A1.125 1.125 0 0 1 6 2.875V2H1v7.5zm.247 3.5H7.1c.07.348.177.682.316 1H1a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.25a.75.75 0 0 1 .75.75v1.125c0 .069.056.125.125.125H13a1 1 0 0 1 1 1v1h.753a1 1 0 0 1 .977 1.217l-.447 2.011a5.015 5.015 0 0 0-.887-.618L14.753 6H2.803l-1.556 7zM16 12a4 4 0 1 1-8 0 4 4 0 0 1 8 0zm-4 .5a.577.577 0 0 1-.57-.495l-.29-2.015a.867.867 0 1 1 1.718 0l-.288 2.015a.577.577 0 0 1-.57.495zm0 2.5a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"}))},F2t=N2t;var oN={};J(oN,{icon:()=>V2t});var bEr=T(z());var B2t=["title","titleId"];function Qse(){return Qse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function W2t(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}var H2t=function(t){var r=t.title,n=t.titleId,o=z2t(t,B2t);return l("svg",Qse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m1 9.5.826-3.717A1 1 0 0 1 2.802 5H13V4H7.125A1.125 1.125 0 0 1 6 2.875V2H1v7.5zm.247 3.5h11.95l1.556-7H2.803l-1.556 7zM13 14H1a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.25a.75.75 0 0 1 .75.75v1.125c0 .069.056.125.125.125H13a1 1 0 0 1 1 1v1h.753a1 1 0 0 1 .977 1.217l-1.556 7a1 1 0 0 1-.976.783H13z"}))},V2t=H2t;var iN={};J(iN,{icon:()=>G2t});var OEr=T(z());var $2t=["title","titleId"];function ele(){return ele=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function q2t(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}var U2t=function(t){var r=t.title,n=t.titleId,o=Z2t(t,$2t);return l("svg",ele({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 2a1 1 0 0 0-1 1v10a1 1 0 1 0 2 0V3a1 1 0 0 0-1-1zm5.146.22 7.2 4.581a1.425 1.425 0 0 1 0 2.398l-7.2 4.581C7.21 14.375 6 13.692 6 12.581V3.42c0-1.112 1.21-1.795 2.146-1.2z",clipRule:"evenodd"}))},G2t=U2t;var aN={};J(aN,{icon:()=>Q2t});var _Er=T(z());var J2t=["title","titleId"];function tle(){return tle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function K2t(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}var Y2t=function(t){var r=t.title,n=t.titleId,o=X2t(t,J2t);return l("svg",tle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13 2a1 1 0 0 1 1 1v10a1 1 0 1 1-2 0V3a1 1 0 0 1 1-1zm-5.146.22-7.2 4.581a1.425 1.425 0 0 0 0 2.398l7.2 4.581c.936.595 2.146-.088 2.146-1.199V3.42c0-1.111-1.21-1.794-2.146-1.199z",clipRule:"evenodd"}))},Q2t=Y2t;var sN={};J(sN,{icon:()=>o5t});var IEr=T(z());var e5t=["title","titleId"];function rle(){return rle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function r5t(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}var n5t=function(t){var r=t.title,n=t.titleId,o=t5t(t,e5t);return l("svg",rle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9 7V3h1v3h3v1H9zM7 7H3V6h3V3h1v4zm2 2h4v1h-3v3H9V9zM7 9v4H6v-3H3V9h4zM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0 1 14.006 16H1.994A1.995 1.995 0 0 1 0 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 0 0 .994-.994V1.994A.995.995 0 0 0 14.006 1H1.994A.995.995 0 0 0 1 1.994z"}))},o5t=n5t;var lN={};J(lN,{icon:()=>u5t});var PEr=T(z());var i5t=["title","titleId"];function nle(){return nle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function s5t(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}var l5t=function(t){var r=t.title,n=t.titleId,o=a5t(t,i5t);return l("svg",nle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M13 3v4h-1V4H9V3h4ZM3 3h4v1H4v3H3V3Zm10 10H9v-1h3V9h1v4ZM3 13V9h1v3h3v1H3ZM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0 1 14.006 16H1.994A1.995 1.995 0 0 1 0 14.006V1.994Zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 0 0 .994-.994V1.994A.995.995 0 0 0 14.006 1H1.994A.995.995 0 0 0 1 1.994Z"}))},u5t=l5t;var uN={};J(uN,{icon:()=>h5t});var jEr=T(z());var c5t=["title","titleId"];function ole(){return ole=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function d5t(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}var f5t=function(t){var r=t.title,n=t.titleId,o=p5t(t,c5t);return l("svg",ole({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13 2.226v2.218c-.359-.143-.845-.218-1.315-.218-1.059 0-1.631.519-1.802 1.565l-.168.937h2.798v2.159H9.41l-.313 1.674C8.696 12.987 7.261 14 4.785 14c-.718 0-1.35-.092-1.785-.251v-2.243c.418.176.905.268 1.383.268 1.008 0 1.546-.435 1.725-1.523l.24-1.364H3.787V6.728h2.812l.288-1.264C7.286 3.071 8.662 2 11.352 2c.598 0 1.306.1 1.648.226z"}))},h5t=f5t;var cN={};J(cN,{icon:()=>b5t});var CEr=T(z());var m5t=["title","titleId"];function ile(){return ile=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function g5t(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}var y5t=function(t){var r=t.title,n=t.titleId,o=v5t(t,m5t);return l("svg",ile({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.164 10.329 1.87 8 .163 5.67c.18-.601.43-1.19.758-1.757a8.197 8.197 0 0 1 1.142-1.535l2.872.313L6.099.05a8.166 8.166 0 0 1 3.8-.003l1.166 2.644 2.872-.313a8.166 8.166 0 0 1 1.899 3.293L14.13 8l1.706 2.33c-.18.601-.43 1.19-.758 1.757a8.197 8.197 0 0 1-1.142 1.535l-2.872-.313-1.164 2.641a8.166 8.166 0 0 1-3.8.003l-1.166-2.644-2.872.313a8.166 8.166 0 0 1-1.899-3.293Zm4.663 1.986a1 1 0 0 1 1.023.591l.957 2.17c.79.134 1.597.132 2.387-.001l.956-2.169a1 1 0 0 1 1.023-.59l2.358.256a7.23 7.23 0 0 0 1.194-2.068l-1.401-1.913a1 1 0 0 1 0-1.182l1.4-1.912a7.165 7.165 0 0 0-1.192-2.069l-2.359.257a1 1 0 0 1-1.023-.591L9.193.924a7.165 7.165 0 0 0-2.387.001L5.85 3.094a1 1 0 0 1-1.023.59l-2.358-.256a7.23 7.23 0 0 0-1.194 2.068l1.401 1.913a1 1 0 0 1 0 1.182l-1.4 1.912c.28.751.681 1.45 1.192 2.069l2.359-.257ZM8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6Zm0-1a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z"}))},b5t=y5t;var pN={};J(pN,{icon:()=>S5t});var AEr=T(z());var w5t=["title","titleId"];function ale(){return ale=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function x5t(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}var _5t=function(t){var r=t.title,n=t.titleId,o=O5t(t,w5t);return l("svg",ale({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.035 9A3.5 3.5 0 0 1 15 7.05V4.5c0-1.072-.648-1.72-2.098-2.01a.5.5 0 0 1 .196-.98C14.981 1.886 16 2.905 16 4.5v4.25c0 .072-.015.14-.043.202A3.5 3.5 0 1 1 9.035 10h-2.07A3.5 3.5 0 1 1 .043 8.952.498.498 0 0 1 0 8.75V4.5c0-1.595 1.019-2.614 2.902-2.99a.5.5 0 0 1 .196.98C1.648 2.78 1 3.428 1 4.5v2.55A3.5 3.5 0 0 1 6.965 9h2.07ZM3.5 12a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Zm9 0a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z"}))},S5t=_5t;var dN={};J(dN,{icon:()=>j5t});var DEr=T(z());var I5t=["title","titleId"];function sle(){return sle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function P5t(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}var k5t=function(t){var r=t.title,n=t.titleId,o=E5t(t,I5t);return l("svg",sle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.019 8a6.462 6.462 0 0 0 1.003 3h2.382a14.469 14.469 0 0 1-.396-3h-2.99Zm0-1h2.989c.033-1.078.172-2.094.396-3H2.022a6.462 6.462 0 0 0-1.003 3ZM13.98 8h-2.989a14.469 14.469 0 0 1-.396 3h2.382a6.462 6.462 0 0 0 1.003-3Zm0-1a6.462 6.462 0 0 0-1.003-3h-2.382c.224.906.363 1.922.396 3h2.99ZM5.008 8c.037 1.107.195 2.127.429 3h4.126c.234-.873.392-1.893.429-3H5.008Zm0-1h4.984a13.422 13.422 0 0 0-.429-3H5.437a13.422 13.422 0 0 0-.429 3ZM.016 8H0V7h.016a7.5 7.5 0 0 1 14.968 0H15v1h-.016A7.5 7.5 0 0 1 .016 8Zm2.794 4a6.501 6.501 0 0 0 2.717 1.695A7.315 7.315 0 0 1 4.7 12H2.81Zm9.38 0H10.3c-.23.657-.51 1.23-.827 1.695A6.501 6.501 0 0 0 12.19 12Zm-6.428 0c.484 1.24 1.132 2 1.738 2 .606 0 1.254-.76 1.738-2H5.762ZM2.81 3H4.7c.23-.657.51-1.23.827-1.695A6.501 6.501 0 0 0 2.81 3Zm9.38 0a6.501 6.501 0 0 0-2.717-1.695c.317.465.597 1.038.827 1.695h1.89ZM5.762 3h3.476C8.754 1.76 8.106 1 7.5 1c-.606 0-1.254.76-1.738 2Z"}))},j5t=k5t;var fN={};J(fN,{icon:()=>R5t});var NEr=T(z());var T5t=["title","titleId"];function lle(){return lle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function M5t(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}var A5t=function(t){var r=t.title,n=t.titleId,o=C5t(t,T5t);return l("svg",lle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M13.5 6c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 0 1-.5-.5c0-.276.229-.5.5-.5h11Zm0 3c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 0 1-.5-.5c0-.276.229-.5.5-.5h11Z"}))},R5t=A5t;var hN={};J(hN,{icon:()=>B5t});var BEr=T(z());var D5t=["title","titleId"];function ule(){return ule=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function N5t(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}var F5t=function(t){var r=t.title,n=t.titleId,o=L5t(t,D5t);return l("svg",ule({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6 5a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm4 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2ZM7 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm3 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm-3 3a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm3 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}))},B5t=F5t;var mN={};J(mN,{icon:()=>$5t});var WEr=T(z());var z5t=["title","titleId"];function cle(){return cle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function H5t(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}var V5t=function(t){var r=t.title,n=t.titleId,o=W5t(t,z5t);return l("svg",cle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2.5c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 0 1-.5-.5v-11Zm3 0c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 0 1-.5-.5v-11Z"}))},$5t=V5t;var vN={};J(vN,{icon:()=>J5t});var VEr=T(z());var Z5t=["title","titleId"];function ple(){return ple=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function U5t(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}var G5t=function(t){var r=t.title,n=t.titleId,o=q5t(t,Z5t);return l("svg",ple({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M1 2a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2Zm4 0h1v12H5V2Zm3 12V2h2v12H8Zm3 0h3V2h-3v12Z"}))},J5t=G5t;var gN={};J(gN,{icon:()=>e3t});var ZEr=T(z());var X5t=["title","titleId"];function dle(){return dle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Y5t(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}var Q5t=function(t){var r=t.title,n=t.titleId,o=K5t(t,X5t);return l("svg",dle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1 5V1h4v4H1Zm3-1V2H2v2h2Zm2 1V1h4v4H6Zm3-1V2H7v2h2Zm2 1V1h4v4h-4Zm1-1h2V2h-2v2ZM1 10V6h4v4H1Zm3-1V7H2v2h2Zm2 1V6h4v4H6Zm3-1V7H7v2h2Zm2 1V6h4v4h-4Zm3-1V7h-2v2h2ZM1 15v-4h4v4H1Zm1-1h2v-2H2v2Zm4 1v-4h4v4H6Zm1-1h2v-2H7v2Zm4 1v-4h4v4h-4Zm1-1h2v-2h-2v2Z"}))},e3t=Q5t;var yN={};J(yN,{icon:()=>i3t});var UEr=T(z());var t3t=["title","titleId"];function fle(){return fle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function n3t(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}var o3t=function(t){var r=t.title,n=t.titleId,o=r3t(t,t3t);return l("svg",fle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.402 3.098a3.75 3.75 0 0 0-5.304 5.304l5.558 5.27L8 14l5.892-5.588a3.75 3.75 0 1 0-5.294-5.313L8 3.697l-.598-.599ZM2.796 7.685a2.747 2.747 0 0 1 .01-3.88 2.75 2.75 0 0 1 3.889 0L8 5.111l1.305-1.306a2.75 2.75 0 1 1 3.89 3.89L8 12.62 2.796 7.685Z"}))},i3t=o3t;var bN={};J(bN,{icon:()=>c3t});var JEr=T(z());var a3t=["title","titleId"];function hle(){return hle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function l3t(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}var u3t=function(t){var r=t.title,n=t.titleId,o=s3t(t,a3t);return l("svg",hle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 9a3 3 0 1 1 0 6 3 3 0 0 1 0-6Zm0 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4ZM4 2a2 2 0 1 1 0 4 2 2 0 0 1 0-4Zm0 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm0 5a4 4 0 1 1 0 8 4 4 0 0 1 0-8Zm0 1a3 3 0 1 0 0 6 3 3 0 0 0 0-6Zm8-9a4 4 0 1 1 0 8 4 4 0 0 1 0-8Zm0 1a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z"}))},c3t=u3t;var wN={};J(wN,{icon:()=>m3t});var KEr=T(z());var p3t=["title","titleId"];function mle(){return mle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function f3t(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}var h3t=function(t){var r=t.title,n=t.titleId,o=d3t(t,p3t);return l("svg",mle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m13.6 12.186-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 0 0-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 0 1 0 8.373ZM8 15A6.956 6.956 0 0 1 3.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 0 0 2.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 0 1 8 15Zm-5.601-2.813a6.963 6.963 0 0 1 0-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 0 0 3 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358Zm5.6-.187A4 4 0 1 1 8 4a4 4 0 0 1 0 8ZM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 0 0 8 3a4.979 4.979 0 0 0-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 0 1 8 1Zm0-1a8.001 8.001 0 1 0 .003 16.002A8.001 8.001 0 0 0 8 0Z"}))},m3t=h3t;var ON={};J(ON,{icon:()=>w3t});var QEr=T(z());var v3t=["title","titleId"];function vle(){return vle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function y3t(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}var b3t=function(t){var r=t.title,n=t.titleId,o=g3t(t,v3t);return l("svg",vle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m8.13 1.229 5.5 4.47a1 1 0 0 1 .37.777V14a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V6.476a1 1 0 0 1 .37-.776l5.5-4.471a1 1 0 0 1 1.26 0ZM13 6.476 7.5 2.005 2 6.475V14h11V6.476Z"}))},w3t=b3t;var xN={};J(xN,{icon:()=>I3t});var t9r=T(z());var O3t=["title","titleId"];function gle(){return gle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _3t(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}var S3t=function(t){var r=t.title,n=t.titleId,o=x3t(t,O3t);return l("svg",gle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.5 11.508 7.468 8H6.25V7h2.401l.03 3.508H9.8v1H7.5Zm-.25-6.202a.83.83 0 0 1 .207-.577c.137-.153.334-.229.59-.229.256 0 .454.076.594.23.14.152.209.345.209.576 0 .228-.07.417-.21.568-.14.15-.337.226-.593.226-.256 0-.453-.075-.59-.226a.81.81 0 0 1-.207-.568ZM8 13A5 5 0 1 0 8 3a5 5 0 0 0 0 10Zm0 1A6 6 0 1 1 8 2a6 6 0 0 1 0 12Z"}))},I3t=S3t;var _N={};J(_N,{icon:()=>T3t});var n9r=T(z());var E3t=["title","titleId"];function yle(){return yle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function k3t(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}var j3t=function(t){var r=t.title,n=t.titleId,o=P3t(t,E3t);return l("svg",yle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6 5a2 2 0 1 1-4 0 2 2 0 0 1 4 0zm9-4a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zm-3.448 6.134-3.76 2.769a.5.5 0 0 1-.436.077l-.087-.034-1.713-.87L1 11.8V14h14V9.751l-3.448-2.617zM15 2H1v8.635l4.28-2.558a.5.5 0 0 1 .389-.054l.094.037 1.684.855 3.813-2.807a.5.5 0 0 1 .52-.045l.079.05L15 8.495V2z"}))},T3t=j3t;var SN={};J(SN,{icon:()=>D3t});var i9r=T(z());var C3t=["title","titleId"];function ble(){return ble=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function A3t(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}var R3t=function(t){var r=t.title,n=t.titleId,o=M3t(t,C3t);return l("svg",ble({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m9 10.114 1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558ZM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18ZM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6Z"}))},D3t=R3t;var IN={};J(IN,{icon:()=>z3t});var s9r=T(z());var L3t=["title","titleId"];function wle(){return wle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function F3t(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}var B3t=function(t){var r=t.title,n=t.titleId,o=N3t(t,L3t);return l("svg",wle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13 2H3v11h11v1H2V1h12v12h-1V2ZM6 5h5.999V4H6v1ZM4 5V4h1v1H4Zm2 3V7h6v1H6ZM4 8V7h1v1H4Zm2 3v-1h6v1H6Zm-2 0v-1h1v1H4Z"}))},z3t=B3t;var EN={};J(EN,{icon:()=>Z3t});var u9r=T(z());var W3t=["title","titleId"];function Ole(){return Ole=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function V3t(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}var $3t=function(t){var r=t.title,n=t.titleId,o=H3t(t,W3t);return l("svg",Ole({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 13V2h11V1H2v13h2v-1H3Z"}),l("path",{d:"M11.999 5H6V4h5.999v1ZM4 4v1h1V4H4Zm2 3v1h4V7H6ZM4 7v1h1V7H4Zm2 3v1h2v-1H6Zm-2 0v1h1v-1H4Zm10-7h-1v1h1V3Zm-1 2h1v1h-1V5Zm1 2h-1v1h1V7Zm-1 2h1v1h-1V9Zm1 2h-1v1h1v-1Zm-1 2h1v1h-1v-1Zm-7 0H5v1h1v-1Zm1 0h1v1H7v-1Zm3 0H9v1h1v-1Zm1 0h1v1h-1v-1Z"}))},Z3t=$3t;var PN={};J(PN,{icon:()=>X3t});var p9r=T(z());var q3t=["title","titleId"];function xle(){return xle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function G3t(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}var J3t=function(t){var r=t.title,n=t.titleId,o=U3t(t,q3t);return l("svg",xle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2ZM5 5h5.999V4H5v1ZM3 5V4h1v1H3Zm2 3V7h3v1H5ZM3 8V7h1v1H3Zm2 3v-1h2v1H5Zm5.5-1.207L9.086 8.379l-.707.707L9.793 10.5l-1.414 1.414.707.707 1.414-1.414 1.414 1.414.707-.707-1.414-1.414 1.414-1.414-.707-.707L10.5 9.793ZM3 11v-1h1v1H3Zm7.5-5a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9Z"}))},X3t=J3t;var kN={};J(kN,{icon:()=>twt});var f9r=T(z());var K3t=["title","titleId"];function _le(){return _le=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Q3t(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}var ewt=function(t){var r=t.title,n=t.titleId,o=Y3t(t,K3t);return l("svg",_le({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 2H2v11h4v1H1V1h12v5h-1V2ZM5 5h5.999V4H5v1ZM3 5V4h1v1H3Zm2 3V7h6v1H5ZM3 8V7h1v1H3Zm2 3v-1h3v1H5Zm-2 0v-1h1v1H3Zm4.502 1.41L12.913 7 15 9.087l-5.41 5.41L7 15l.502-2.59Z"}))},twt=ewt;var jN={};J(jN,{icon:()=>awt});var m9r=T(z());var rwt=["title","titleId"];function Sle(){return Sle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function owt(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}var iwt=function(t){var r=t.title,n=t.titleId,o=nwt(t,rwt);return l("svg",Sle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M14.516 9H10.5a.5.5 0 0 1 0-1h4.016L13.11 5.948c-.171-.252-.137-.62.079-.821.217-.2.531-.159.703.092l2 2.916a.648.648 0 0 1 .108.397.643.643 0 0 1-.108.332l-2 2.918A.478.478 0 0 1 13.5 12a.457.457 0 0 1-.312-.127c-.216-.202-.25-.57-.079-.82L14.516 9ZM3 15H1a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h7.8c.274 0 .537.113.726.312l2.2 2.428c.176.186.274.433.274.689V7h-1V5H8.5a.5.5 0 0 1-.5-.5V2H3v12h8v-4h1v4a1 1 0 0 1-1 1H3Zm-1-1V2H1v12h1Z"}))},awt=iwt;var TN={};J(TN,{icon:()=>pwt});var g9r=T(z());var swt=["title","titleId"];function Ile(){return Ile=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uwt(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}var cwt=function(t){var r=t.title,n=t.titleId,o=lwt(t,swt);return l("svg",Ile({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 8H4.915a1.5 1.5 0 1 1 0-1H8V2.5A1.5 1.5 0 0 1 9.5 1h2.585a1.5 1.5 0 1 1 0 1H9.5a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h2.585a1.5 1.5 0 1 1 0 1H9.5A1.5 1.5 0 0 1 8 12.5V8ZM3.5 3a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Zm0 12a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Zm10-6a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Z"}))},pwt=cwt;var CN={};J(CN,{icon:()=>vwt});var b9r=T(z());var dwt=["title","titleId"];function Ele(){return Ele=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hwt(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}var mwt=function(t){var r=t.title,n=t.titleId,o=fwt(t,dwt);return l("svg",Ele({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2ZM5 5h5.999V4H5v1ZM3 5V4h1v1H3Zm2 3V7h3v1H5ZM3 8V7h1v1H3Zm2 3v-1h2v1H5Zm5-1H8v1h2v2h1v-2h2v-1h-2V8h-1v2Zm-7 1v-1h1v1H3Zm7.5-5a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9Z"}))},vwt=mwt;var MN={};J(MN,{icon:()=>Owt});var O9r=T(z());var gwt=["title","titleId"];function Ple(){return Ple=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bwt(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}var wwt=function(t){var r=t.title,n=t.titleId,o=ywt(t,gwt);return l("svg",Ple({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 2H2v11h6v1H1V1h12v6.839l-1-.707V2z"}),l("path",{d:"M8 11v-1H5v1h3zm0-3.055c0-.342.082-.664.23-.945H5v1h3v-.055zM5 5h5.999V4H5v1zM3 4v1h1V4H3zm0 3v1h1V7H3zm0 3v1h1v-1H3zm11.607.2-4.32-3.055C9.727 6.75 9 7.204 9 7.945v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598z"}))},Owt=wwt;var AN={};J(AN,{icon:()=>Ewt});var _9r=T(z());var xwt=["title","titleId"];function kle(){return kle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Swt(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}var Iwt=function(t){var r=t.title,n=t.titleId,o=_wt(t,xwt);return l("svg",kle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 5h5.999V4H5v1ZM3 5h1V4H3v1Zm0 3h1V7H3v1Zm6.022-1-.15.333-.737-.078-.467-.05-.33.342A5.13 5.13 0 0 0 6.948 8H5V7h4.022Zm-3.005 3L6 10.056l.306.411.399.533H5v-1h1.017ZM3 11h1v-1H3v1Z"}),l("path",{d:"m13 7.05-.162-.359-.2-.447-.47-.11A5.019 5.019 0 0 0 12 6.098V2H2v11h4.36c.157.354.355.69.59 1H1V1h12v6.05Z"}),l("path",{d:"M11.004 7c.322 0 .646.036.966.109l.595 1.293 1.465-.152c.457.462.786 1.016.969 1.61l-.87 1.14.871 1.141a3.94 3.94 0 0 1-.387.859 4.058 4.058 0 0 1-.583.75l-1.465-.152-.594 1.292a4.37 4.37 0 0 1-1.941.001l-.594-1.293-1.466.152a3.954 3.954 0 0 1-.969-1.61l.87-1.14L7 9.86a3.947 3.947 0 0 1 .97-1.61l1.466.152.593-1.292a4.37 4.37 0 0 1 .975-.11ZM11 12a1 1 0 1 0 .002-1.998A1 1 0 0 0 11 12Z"}))},Ewt=Iwt;var RN={};J(RN,{icon:()=>Cwt});var I9r=T(z());var Pwt=["title","titleId"];function jle(){return jle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jwt(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}var Twt=function(t){var r=t.title,n=t.titleId,o=kwt(t,Pwt);return l("svg",jle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.37 9.457A1.994 1.994 0 0 1 3.993 10a2 2 0 1 1 1.403-3.433l.601.679 1.336-1.508-.462-.522a4 4 0 1 0-.041 5.613l.021-.022 3.777-4.265.002.001a2 2 0 1 1-.024 2.89l-.601-.679-1.336 1.508.462.522a4 4 0 1 0 0-5.569l-3.74 4.223a1.991 1.991 0 0 1-.02.02Z"}))},Cwt=Twt;var DN={};J(DN,{icon:()=>Lwt});var P9r=T(z());var Mwt=["title","titleId"];function Tle(){return Tle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Rwt(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}var Dwt=function(t){var r=t.title,n=t.titleId,o=Awt(t,Mwt);return l("svg",Tle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10 13.999v-2.99h1V15H0V1h11v3.999h-1V2.001H1v11.998z"}),l("path",{d:"M4.5 10V9H11v1zM13 9.5l3-3-3-3z"}),l("path",{d:"M5.5 6.5v6l-3-3zM7 7V6h6.5v1z"}))},Lwt=Dwt;var LN={};J(LN,{icon:()=>Wwt});var j9r=T(z());var Nwt=["title","titleId"];function Cle(){return Cle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Bwt(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}var zwt=function(t){var r=t.title,n=t.titleId,o=Fwt(t,Nwt);return l("svg",Cle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M15.363 14.658a.5.5 0 1 1-.713.7l-2.97-3.023a.5.5 0 0 1 .001-.7A3.9 3.9 0 1 0 8.9 12.8a.5.5 0 1 1 0 .999 4.9 4.9 0 1 1 3.821-1.833l2.642 2.691ZM3.094 13a.5.5 0 1 1 0 1H2.5A2.5 2.5 0 0 1 0 11.5v-9A2.5 2.5 0 0 1 2.5 0h9A2.5 2.5 0 0 1 14 2.5v.599a.5.5 0 1 1-1 0V2.5A1.5 1.5 0 0 0 11.5 1h-9A1.5 1.5 0 0 0 1 2.5v9A1.5 1.5 0 0 0 2.5 13h.594ZM2.5 3a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm2 0a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm2 0a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm-4 2a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm2 0a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm-2 1a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm0 3a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm6-6a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm2 0a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm-8 8a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Z"}))},Wwt=zwt;var NN={};J(NN,{icon:()=>qwt});var C9r=T(z());var Hwt=["title","titleId"];function Mle(){return Mle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $wt(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}var Zwt=function(t){var r=t.title,n=t.titleId,o=Vwt(t,Hwt);return l("svg",Mle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 13.25a5.25 5.25 0 1 0 0-10.5 5.25 5.25 0 0 0 0 10.5ZM8 14A6 6 0 1 1 8 2a6 6 0 0 1 0 12Z"}),l("path",{d:"M8 2a6 6 0 1 0 0 12V2Z"}))},qwt=Zwt;var FN={};J(FN,{icon:()=>Kwt});var A9r=T(z());var Uwt=["title","titleId"];function Ale(){return Ale=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Jwt(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}var Xwt=function(t){var r=t.title,n=t.titleId,o=Gwt(t,Uwt);return l("svg",Ale({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8Zm-2 3H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5ZM6 5H5v6h1V5Zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984Z"}))},Kwt=Xwt;var BN={};J(BN,{icon:()=>rOt});var D9r=T(z());var Ywt=["title","titleId"];function Rle(){return Rle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function eOt(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}var tOt=function(t){var r=t.title,n=t.titleId,o=Qwt(t,Ywt),i=fn("issue");return l("svg",Rle({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{clipPath:"url(#".concat(i("a"),")"),fill:"#343741"},l("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8 .5c4.136 0 7.5 3.364 7.5 7.5s-3.364 7.5-7.5 7.5S.5 12.136.5 8 3.864.5 8 .5zm0 .882a6.618 6.618 0 100 13.236A6.618 6.618 0 008 1.382z"}),l("path",{d:"M9 8a1 1 0 11-2 0 1 1 0 012 0z"})),l("clipPath",{id:i("a")},l("path",{d:"M0 0h16v16H0z"})))},rOt=tOt;var zN={};J(zN,{icon:()=>sOt});var F9r=T(z());var nOt=["title","titleId"];function Dle(){return Dle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function iOt(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}var aOt=function(t){var r=t.title,n=t.titleId,o=oOt(t,nOt);return l("svg",Dle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M14 5a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm-1 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"}),l("path",{d:"M6 6a5 5 0 1 1 3.086 4.62l-1.232 1.234A.5.5 0 0 1 7.5 12H6v1.5a.5.5 0 0 1-.5.5H4v1.5a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 1 .175-.38l5.932-5.085A5.019 5.019 0 0 1 6 6Zm5-4a4 4 0 0 0-3.853 5.08.5.5 0 0 1-.156.515L1 12.73V15h2v-1.5a.5.5 0 0 1 .5-.5H5v-1.5a.5.5 0 0 1 .5-.5h1.793l.877-.877a5.033 5.033 0 0 1-.503-.396.5.5 0 1 1 .666-.745A3.983 3.983 0 0 0 11 10h.005A4 4 0 0 0 11 2Z"}))},sOt=aOt;var WN={};J(WN,{icon:()=>dOt});var z9r=T(z());var lOt=["title","titleId"];function Lle(){return Lle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cOt(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}var pOt=function(t){var r=t.title,n=t.titleId,o=uOt(t,lOt);return l("svg",Lle({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M0 3h16v11H0V3Zm15 10V4H1v9h14ZM2 5h2v1H2V5Zm2 7v-1H2v1h2Zm10-1v1h-2v-1h2Zm-3 1v-1H5v1h6ZM5 5h1v1H5V5ZM3 7H2v1h1V7Zm3 0h1v1H6V7ZM3 9H2v1h1V9Zm3 0h1v1H6V9Zm2-4H7v1h1V5ZM4 7h1v1H4V7Zm5 0H8v1h1V7Zm1 0h1v1h-1V7ZM5 9H4v1h1V9Zm3 0h1v1H8V9Zm3 0h-1v1h1V9ZM9 5h1v1H9V5Zm3 0h-1v1h1V5Zm1 0h1v1h-1V5Zm1 2h-2v3h2V7Z",clipRule:"evenodd"}))},dOt=pOt;var HN={};J(HN,{icon:()=>gOt});var H9r=T(z());var fOt=["title","titleId"];function Nle(){return Nle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mOt(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}var vOt=function(t){var r=t.title,n=t.titleId,o=hOt(t,fOt);return l("svg",Nle({xmlns:"http://www.w3.org/2000/svg",width:16,height:10,viewBox:"0 0 16 10","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 9a5 5 0 1 1 0-8 5 5 0 1 1 0 8Zm.75-.692a4 4 0 1 0 0-6.615A4.981 4.981 0 0 1 10 5a4.981 4.981 0 0 1-1.25 3.308ZM4.133 8V5.559h2.496v-.625H4.133V2.996h2.719v-.633H3.43V8h.703Z"}))},gOt=vOt;var VN={};J(VN,{icon:()=>xOt});var $9r=T(z());var yOt=["title","titleId"];function Fle(){return Fle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wOt(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}var OOt=function(t){var r=t.title,n=t.titleId,o=bOt(t,yOt);return l("svg",Fle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 7H3v2h4v2l3-3-3-3v2ZM6 6V5a1 1 0 0 1 1.707-.707l3 3a1 1 0 0 1 0 1.414l-3 3A1 1 0 0 1 6 11v-1H3a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h3Zm7.5-3a.5.5 0 0 1 .5.5v9a.5.5 0 1 1-1 0v-9a.5.5 0 0 1 .5-.5Z"}))},xOt=OOt;var $N={};J($N,{icon:()=>POt});var q9r=T(z());var _Ot=["title","titleId"];function Ble(){return Ble=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function IOt(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}var EOt=function(t){var r=t.title,n=t.titleId,o=SOt(t,_Ot);return l("svg",Ble({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m11.192 10.145 2.298-1.792c.259-.196.259-.509 0-.706l-2.298-1.792c-.256-.196-.256-.513 0-.708a.81.81 0 0 1 .93 0l2.3 1.791c.772.59.77 1.537 0 2.124l-2.3 1.791a.81.81 0 0 1-.93 0c-.256-.195-.256-.512 0-.708Zm-6.384-4.29L2.51 7.647c-.259.196-.259.509 0 .706l2.298 1.792c.256.196.256.513 0 .708a.81.81 0 0 1-.93 0l-2.3-1.791c-.772-.59-.77-1.537 0-2.124l2.3-1.791a.81.81 0 0 1 .93 0c.256.195.256.512 0 .708ZM6.5 6h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1Zm0 3h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1Z"}))},POt=EOt;var ZN={};J(ZN,{icon:()=>MOt});var G9r=T(z());var kOt=["title","titleId"];function zle(){return zle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function TOt(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}var COt=function(t){var r=t.title,n=t.titleId,o=jOt(t,kOt);return l("svg",zle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm0 1A5 5 0 1 1 5 3a5 5 0 0 1 0 10Zm6-1a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm0 1a5 5 0 1 1 0-10 5 5 0 0 1 0 10Z"}))},MOt=COt;var qN={};J(qN,{icon:()=>NOt});var X9r=T(z());var AOt=["title","titleId"];function Wle(){return Wle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function DOt(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}var LOt=function(t){var r=t.title,n=t.titleId,o=ROt(t,AOt);return l("svg",Wle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 4a5 5 0 1 1 0 8 5 5 0 1 1 0-8Zm-.75.692a4 4 0 1 0 0 6.615A4.981 4.981 0 0 1 6 8c0-1.268.472-2.426 1.25-3.308ZM11.348 11l2.078-5.637h-.739l-1.656 4.727h-.062L9.313 5.363h-.739L10.652 11h.696Z"}))},NOt=LOt;var UN={};J(UN,{icon:()=>HOt});var Y9r=T(z());var FOt=["title","titleId"];function Hle(){return Hle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zOt(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}var WOt=function(t){var r=t.title,n=t.titleId,o=BOt(t,FOt);return l("svg",Hle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M14 11.42V4.58L8 1.152 2 4.58v6.84l6 3.428 6-3.428zM8 16l7-4V4L8 0 1 4v8l7 4zM8 4.607l3 1.714V9.68l-3 1.714-3-1.714V6.32l3-1.714zm4 1.134v4.518l-4 2.286-4-2.286V5.741l4-2.286 4 2.286z",clipRule:"evenodd"}))},HOt=WOt;var GN={};J(GN,{icon:()=>UOt});var ePr=T(z());var VOt=["title","titleId"];function Vle(){return Vle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ZOt(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}var qOt=function(t){var r=t.title,n=t.titleId,o=$Ot(t,VOt);return l("svg",Vle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M14 5.151v6.269l-5.5 3.142V8.29L14 5.151zm-.508-.861L8 1.152 2.508 4.29 8 7.424l5.492-3.134zM2 5.151l5.5 3.14v6.272L2 11.42V5.15zM15 12l-7 4-7-4V4l7-4 7 4v8z",clipRule:"evenodd"}))},UOt=qOt;var JN={};J(JN,{icon:()=>YOt});var rPr=T(z());var GOt=["title","titleId"];function $le(){return $le=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function XOt(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}var KOt=function(t){var r=t.title,n=t.titleId,o=JOt(t,GOt);return l("svg",$le({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M10 4a2 2 0 1 0 0 4 2 2 0 0 0 0-4ZM9 6a1 1 0 1 1 2 0 1 1 0 0 1-2 0Z",clipRule:"evenodd"}),l("path",{fillRule:"evenodd",d:"M6.679 12.967c.353-.136.697-.3 1.033-.475l1.36 2.265a.5.5 0 0 0 .828.043l3-4a.5.5 0 0 0-.046-.654l-.886-.886C13.604 7.456 15 4.913 15 1.5a.5.5 0 0 0-.5-.5c-3.413 0-5.956 1.395-7.76 3.033l-.886-.887A.5.5 0 0 0 5.2 3.1l-4 3a.5.5 0 0 0 .043.829l2.264 1.358a9.59 9.59 0 0 0-.475 1.036v.001a.5.5 0 0 0 .114.53l3 3c.139.138.35.182.533.113ZM4.09 9.384l2.525 2.525a14.616 14.616 0 0 0 3.555-2.285c1.841-1.612 3.657-4.076 3.818-7.612-3.537.16-6.001 1.976-7.613 3.817A14.617 14.617 0 0 0 4.09 9.384Zm-.096-1.97a15.616 15.616 0 0 1 2.03-2.682l-.572-.572-3.058 2.294 1.6.96Zm5.551 6.191-.96-1.6a15.617 15.617 0 0 0 2.682-2.03l.572.572-2.294 3.058Z",clipRule:"evenodd"}),l("path",{d:"M3.854 12.146a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708l2-2a.5.5 0 0 1 .708 0Zm2 1.708a.5.5 0 0 0-.708-.708l-1 1a.5.5 0 0 0 .708.708l1-1Zm-3-3.708a.5.5 0 0 1 0 .708l-1 1a.5.5 0 0 1-.708-.708l1-1a.5.5 0 0 1 .708 0Z"}))},YOt=KOt;var XN={};J(XN,{icon:()=>n6t});var oPr=T(z());var QOt=["title","titleId"];function Zle(){return Zle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function t6t(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}var r6t=function(t){var r=t.title,n=t.titleId,o=e6t(t,QOt);return l("svg",Zle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.276 1.053a.5.5 0 0 1 .448 0l6 3a.5.5 0 0 1 0 .894l-6 3a.5.5 0 0 1-.448 0l-6-3a.5.5 0 0 1 0-.894l6-3zM2.618 4.5 7.5 6.941 12.382 4.5 7.5 2.059 2.618 4.5z"}),l("path",{d:"M1.053 7.276a.5.5 0 0 1 .67-.223L7.5 9.94l5.776-2.888a.5.5 0 1 1 .448.894l-6 3a.5.5 0 0 1-.448 0l-6-3a.5.5 0 0 1-.223-.67z"}),l("path",{d:"M1.724 10.053a.5.5 0 1 0-.448.894l6 3a.5.5 0 0 0 .448 0l6-3a.5.5 0 1 0-.448-.894L7.5 12.94l-5.776-2.888z"}))},n6t=r6t;var KN={};J(KN,{icon:()=>l6t});var aPr=T(z());var o6t=["title","titleId"];function qle(){return qle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function a6t(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}var s6t=function(t){var r=t.title,n=t.titleId,o=i6t(t,o6t);return l("svg",qle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m5 3 3 9H7L6 9H3l-1 3H1l3-9h1zm-.5 1.5L5.667 8H3.333L4.5 4.5zm7.99 1.647C12.16 6.005 11.76 6 11.5 6c-.359 0-1.022.175-1.632.838l-.736-.676C9.929 5.294 10.859 5 11.5 5h.016c.25 0 .836 0 1.369.228.281.12.568.313.782.617.216.307.333.693.333 1.155v5h-1v-.354a2.101 2.101 0 0 1-.064.038c-.554.317-1.166.316-1.42.316h-.032c-.25 0-.836 0-1.368-.228a1.81 1.81 0 0 1-.783-.617C9.117 10.848 9 10.462 9 10c0-.462.117-.848.333-1.155.214-.304.5-.496.783-.617C10.648 8 11.233 8 11.484 8h.016c.258 0 .69-.003 1.05-.106a.889.889 0 0 0 .364-.179c.053-.05.086-.108.086-.215V7c0-.288-.07-.465-.151-.58a.814.814 0 0 0-.358-.273zM13 8.8c-.06.022-.118.04-.175.057C12.32 9 11.762 9 11.513 9H11.5c-.259 0-.66.005-.99.147a.814.814 0 0 0-.359.274c-.08.114-.151.291-.151.579s.07.465.151.58a.813.813 0 0 0 .358.273c.331.142.732.147.991.147.257 0 .63-.008.94-.184.255-.146.56-.463.56-1.316v-.701z"}))},l6t=s6t;var YN={};J(YN,{icon:()=>f6t});var lPr=T(z());var u6t=["title","titleId"];function Ule(){return Ule=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function p6t(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}var d6t=function(t){var r=t.title,n=t.titleId,o=c6t(t,u6t);return l("svg",Ule({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12.707 4.707a1 1 0 1 1-1.414-1.414l2-2a1 1 0 1 1 1.414 1.414l-2 2zm-6.414 5a1 1 0 0 0 1.414 0l2-2a1 1 0 1 0-1.414-1.414l-2 2a1 1 0 0 0 0 1.414zm-5 5a1 1 0 0 0 1.414 0l2-2a1 1 0 1 0-1.414-1.414l-2 2a1 1 0 0 0 0 1.414z"}))},f6t=d6t;var QN={};J(QN,{icon:()=>y6t});var cPr=T(z());var h6t=["title","titleId"];function Gle(){return Gle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function v6t(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}var g6t=function(t){var r=t.title,n=t.titleId,o=m6t(t,h6t);return l("svg",Gle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13.5 3a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zM11 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zM5.5 11a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm-4 4a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z"}))},y6t=g6t;var eF={};J(eF,{icon:()=>_6t});var dPr=T(z());var b6t=["title","titleId"];function Jle(){return Jle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function O6t(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}var x6t=function(t){var r=t.title,n=t.titleId,o=w6t(t,b6t);return l("svg",Jle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.293 14.707a1 1 0 0 0 1.414 0l12-12a1 1 0 1 0-1.414-1.414l-12 12a1 1 0 0 0 0 1.414z"}))},_6t=x6t;var tF={};J(tF,{icon:()=>k6t});var hPr=T(z());var S6t=["title","titleId"];function Xle(){return Xle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function E6t(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}var P6t=function(t){var r=t.title,n=t.titleId,o=I6t(t,S6t);return l("svg",Xle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.66 3.803a.5.5 0 1 1-.706-.707L9.268.78c1.187-1.187 3.242-1 4.596.354s1.54 3.409.354 4.596l-3.536 3.536c-1.187 1.187-3.242 1-4.596-.354a.5.5 0 1 1 .707-.707c.99.99 2.417 1.119 3.182.354l3.536-3.536c.765-.765.635-2.193-.354-3.182-.99-.99-2.417-1.119-3.182-.354L7.661 3.803Zm-.32 7.392a.5.5 0 1 1 .707.707l-2.315 2.314c-1.187 1.188-3.242 1-4.596-.353-1.354-1.354-1.54-3.41-.353-4.596L4.318 5.73c1.187-1.187 3.242-1 4.596.354a.5.5 0 0 1-.707.707c-.989-.99-2.416-1.12-3.182-.354L1.49 9.974c-.766.765-.636 2.193.353 3.182.99.989 2.417 1.119 3.182.353l2.315-2.314Z"}))},k6t=P6t;var rF={};J(rF,{icon:()=>A6t});var vPr=T(z());var j6t=["title","titleId"];function Kle(){return Kle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function C6t(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}var M6t=function(t){var r=t.title,n=t.titleId,o=T6t(t,j6t);return l("svg",Kle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 4V3h2v1H2Zm4 0V3h8v1H6Zm0 3V6h8v1H6Zm0 3V9h8v1H6ZM2 7V6h2v1H2Zm0 3V9h2v1H2Zm4 3v-1h8v1H6Zm-4 0v-1h2v1H2Z"}))},A6t=M6t;var nF={};J(nF,{icon:()=>F6t});var yPr=T(z());var R6t=["title","titleId"];function Yle(){return Yle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function L6t(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}var N6t=function(t){var r=t.title,n=t.titleId,o=D6t(t,R6t);return l("svg",Yle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11 11H9v1h2v2h1v-2h2v-1h-2V9h-1v2ZM7.758 9a4.5 4.5 0 1 1-.502 4H6v-1h1.027a4.548 4.548 0 0 1 .23-2H6V9h1.758ZM2 4V3h2v1H2Zm4 0V3h8v1H6Zm0 3V6h8v1H6ZM2 7V6h2v1H2Zm0 3V9h2v1H2Zm0 3v-1h2v1H2Z"}))},F6t=N6t;var oF={};J(oF,{icon:()=>V6t});var wPr=T(z());var B6t=["title","titleId"];function Qle(){return Qle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function W6t(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}var H6t=function(t){var r=t.title,n=t.titleId,o=z6t(t,B6t);return l("svg",Qle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 5v-.8C4 1.88 5.79 0 8 0s4 1.88 4 4.2V5h1.143c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H2.857C2.384 16 2 15.552 2 15V6c0-.552.384-1 .857-1H4ZM3 15h10V6H3v9Zm5.998-3.706L9.5 12.5h-3l.502-1.206A1.644 1.644 0 0 1 6.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194ZM11 4.36C11 2.504 9.657 1 8 1S5 2.504 5 4.36V5h6v-.64Z"}))},V6t=H6t;var iF={};J(iF,{icon:()=>G6t});var xPr=T(z());var $6t=["title","titleId"];function eue(){return eue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function q6t(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}var U6t=function(t){var r=t.title,n=t.titleId,o=Z6t(t,$6t);return l("svg",eue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.143 5c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H.857C.384 16 0 15.552 0 15V6c0-.552.384-1 .857-1H8v-.8C8 1.88 9.79 0 12 0s4 1.88 4 4.2V5h-1v-.64C15 2.504 13.657 1 12 1S9 2.504 9 4.36V5h2.143ZM1 15h10V6H1v9Zm5.998-3.706L7.5 12.5h-3l.502-1.206A1.644 1.644 0 0 1 4.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194Z"}))},G6t=U6t;var aF={};J(aF,{icon:()=>Q6t});var SPr=T(z());var J6t=["title","titleId"];function tue(){return tue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function K6t(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}var Y6t=function(t){var r=t.title,n=t.titleId,o=X6t(t,J6t);return l("svg",tue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 1h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Zm.5 1h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 1 0-1Z"}),l("path",{d:"M9.5 3a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 3a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Zm0 3h-4a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1Zm-8 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Zm2 0a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Z"}),l("path",{d:"M4.5 6h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Zm2 0a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm6 6h-4a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1Zm-8 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Zm2 0a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Z"}),l("path",{d:"M4.5 12h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Zm2 0a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3-9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 3a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 3a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 3a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 3a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 3a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Zm-3 6a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Zm-5 0h-4a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1Z"}))},Q6t=Y6t;var sF={};J(sF,{icon:()=>o4t});var EPr=T(z());var e4t=["title","titleId"];function rue(){return rue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function r4t(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}var n4t=function(t){var r=t.title,n=t.titleId,o=t4t(t,e4t);return l("svg",rue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.5 13a.5.5 0 0 1-.5-.5V11H7v1.5a.5.5 0 0 1-1 0V9H4v3.5a.5.5 0 0 1-1 0v-4a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5V10h2V1.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5h-3Zm-8 2a.5.5 0 0 1 0-1h13a.5.5 0 0 1 0 1h-13Z"}))},o4t=n4t;var lF={};J(lF,{icon:()=>u4t});var kPr=T(z());var i4t=["title","titleId"];function nue(){return nue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function s4t(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}var l4t=function(t){var r=t.title,n=t.titleId,o=a4t(t,i4t);return l("svg",nue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#C4373A",d:"M0 31.806h32V.776H0z"}),l("path",{fill:"#FFF",d:"m19.448 12.508-8.986 3.86 8.986 3.883v-7.743Zm-11.304 4.73-2.094-.863 2.094-.931 17.749-7.741v2.062l-4.654 1.99v9.25l4.654 2.01v1.968L8.143 17.24Z"})))},u4t=l4t;var uF={};J(uF,{icon:()=>h4t});var TPr=T(z());var c4t=["title","titleId"];function oue(){return oue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function d4t(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}var f4t=function(t){var r=t.title,n=t.titleId,o=p4t(t,c4t),i=fn("logo_apache");return l("svg",oue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("defs",null,l("linearGradient",{id:i("a"),x1:"21.902%",x2:"141.879%",y1:"63.905%",y2:"20.213%"},l("stop",{offset:"0%",stopColor:"#F69923"}),l("stop",{offset:"31.23%",stopColor:"#F79A23"}),l("stop",{offset:"83.83%",stopColor:"#E97826"})),l("linearGradient",{id:i("b"),x1:"-217.651%",x2:"74.743%",y1:"177.127%",y2:"36.665%"},l("stop",{offset:"32.33%",stopColor:"#9E2064"}),l("stop",{offset:"63.02%",stopColor:"#C92037"}),l("stop",{offset:"75.14%",stopColor:"#CD2335"}),l("stop",{offset:"100%",stopColor:"#E97826"})),l("linearGradient",{id:i("c"),x1:"-80.044%",x2:"146.24%",y1:"73.574%",y2:"31.539%"},l("stop",{offset:"32.33%",stopColor:"#9E2064"}),l("stop",{offset:"63.02%",stopColor:"#C92037"}),l("stop",{offset:"75.14%",stopColor:"#CD2335"}),l("stop",{offset:"100%",stopColor:"#E97826"})),l("linearGradient",{id:i("d"),x1:"-18.316%",x2:"165.002%",y1:"52.497%",y2:"41.656%"},l("stop",{offset:"0%",stopColor:"#282662"}),l("stop",{offset:"9.548%",stopColor:"#662E8D"}),l("stop",{offset:"78.82%",stopColor:"#9F2064"}),l("stop",{offset:"94.87%",stopColor:"#CD2032"})),l("linearGradient",{id:i("e"),x1:"-109.701%",x2:"64.617%",y1:"463.715%",y2:"17.19%"},l("stop",{offset:"32.33%",stopColor:"#9E2064"}),l("stop",{offset:"63.02%",stopColor:"#C92037"}),l("stop",{offset:"75.14%",stopColor:"#CD2335"}),l("stop",{offset:"100%",stopColor:"#E97826"})),l("linearGradient",{id:i("f"),x1:"-34.88%",x2:"110.599%",y1:"130.522%",y2:"-9.118%"},l("stop",{offset:"32.33%",stopColor:"#9E2064"}),l("stop",{offset:"63.02%",stopColor:"#C92037"}),l("stop",{offset:"75.14%",stopColor:"#CD2335"}),l("stop",{offset:"100%",stopColor:"#E97826"})),l("linearGradient",{id:i("g"),x1:"-13.673%",x2:"117.858%",y1:"192.564%",y2:"-136.906%"},l("stop",{offset:"0%",stopColor:"#282662"}),l("stop",{offset:"9.548%",stopColor:"#662E8D"}),l("stop",{offset:"78.82%",stopColor:"#9F2064"}),l("stop",{offset:"94.87%",stopColor:"#CD2032"}))),l("g",{fill:"none"},l("path",{fill:"url(#".concat(i("a"),")"),d:"M13.628.18c-.498.293-1.332 1.134-2.328 2.348v.074l.871 1.613.044.03c.641-.914 1.289-1.742 1.948-2.446.05-.056.075-.08.075-.08-.025.024-.05.055-.075.08-.211.237-.859.984-1.83 2.478l.112.025s2.273-.224 3.368-.41l.062-.057c.35-1.955-.342-2.851-.342-2.851S14.661-.423 13.628.18Z",transform:"translate(8)"}),l("path",{fill:"url(#".concat(i("b"),")"),d:"M9.525 8.697c.28-.516.56-1.027.84-1.519.293-.51.592-1.008.897-1.488a.397.397 0 0 0 .05-.087c.299-.473.598-.921.903-1.357L11.3 2.52c-.069.081-.137.168-.206.256-.261.33-.535.678-.815 1.052a51.783 51.783 0 0 0-1.893 2.708c-.261.405-.53.816-.79 1.245l-.032.05V7.9l1.14 2.26.05.019c.255-.498.51-.996.771-1.482Z",transform:"translate(8)"}),l("path",{fill:"url(#".concat(i("c"),")"),d:"M4.563 19.76c.206-.535.424-1.077.642-1.625.211-.523.423-1.052.647-1.58.218-.53.448-1.06.679-1.595.236-.541.473-1.083.716-1.618.242-.53.485-1.059.734-1.582.087-.186.18-.38.274-.566.156-.324.318-.648.473-.965.007-.019.02-.031.025-.05L7.564 7.832l-.056.093c-.274.455-.554.915-.822 1.389a54.535 54.535 0 0 0-1.45 2.714c-.044.087-.081.168-.125.255a32.15 32.15 0 0 0-.703 1.544c-.237.56-.448 1.096-.635 1.606-.125.337-.23.654-.336.965-.081.262-.162.53-.237.791-.18.623-.33 1.239-.454 1.862l.018.074 1.14 2.266.037.02c.155-.424.317-.848.485-1.283.044-.125.094-.243.137-.368Z",transform:"translate(8)"}),l("path",{fill:"url(#".concat(i("d"),")"),d:"M2.733 19.132a18.84 18.84 0 0 0-.311 2.253c0 .025-.006.05-.006.081-.374-.598-1.37-1.177-1.37-1.177.716 1.034 1.258 2.061 1.338 3.07-.38.08-.902-.038-1.512-.255.628.578 1.102.74 1.288.784-.579.037-1.183.436-1.793.89.89-.36 1.607-.504 2.123-.392-.815 2.31-1.63 4.862-2.453 7.564.25-.075.399-.243.486-.473.143-.492 1.114-3.704 2.627-7.931.044-.119.087-.243.13-.362.013-.03.026-.068.038-.1.162-.441.324-.896.498-1.356.038-.106.081-.212.119-.318v-.006l-1.19-2.353c0 .03-.006.056-.012.08Z",transform:"translate(8)"}),l("path",{fill:"url(#".concat(i("e"),")"),d:"M12.333 4.283c-.268.411-.56.878-.878 1.407-.018.025-.03.056-.05.081a62.538 62.538 0 0 0-1.687 3.05c-.249.48-.504.984-.765 1.526l.056.025 2.895-.311.068-.05c.878-.405 1.27-.772 1.65-1.301.1-.143.205-.3.305-.455.311-.485.616-1.015.884-1.544.261-.51.492-1.02.672-1.475a6.56 6.56 0 0 0 .398-1.395c-1.17.206-2.608.399-3.548.442Z",transform:"translate(8)"}),l("path",{fill:"url(#".concat(i("f"),")"),d:"M8.84 10.59c-.1.212-.205.43-.31.647-.113.237-.231.486-.343.735-.056.124-.119.255-.175.38-.18.386-.354.784-.541 1.195a107.035 107.035 0 0 0-1.357 3.194c-.218.529-.436 1.077-.654 1.637-.2.504-.399 1.015-.598 1.55-.012.025-.018.05-.03.075-.2.53-.394 1.068-.6 1.622-.006.012-.017.045-.023.057l.043.01.866-.094.048-.02c-.018-.006-.03-.03-.048-.037 1.145-.143 2.67-1.002 3.66-2.06.455-.486.866-1.065 1.252-1.738.286-.504.547-1.058.803-1.675.224-.535.435-1.12.64-1.749a3.457 3.457 0 0 1-.896.311 8.977 8.977 0 0 1-.18.038c-.062.012-.125.018-.18.03 1.07-.41 1.743-1.207 2.234-2.178-.28.193-.74.442-1.288.566a2.52 2.52 0 0 1-.23.044c-.02 0-.038.006-.057.006.374-.155.685-.33.959-.535.056-.044.112-.087.168-.137.081-.075.162-.15.237-.224.05-.05.093-.1.143-.156.106-.124.205-.261.299-.41.03-.044.056-.094.087-.138.037-.068.068-.137.1-.205.149-.3.267-.567.36-.803.05-.119.088-.224.125-.33.013-.038.025-.081.044-.119.037-.112.068-.211.093-.305.037-.13.056-.236.069-.311a1.077 1.077 0 0 1-.125.087c-.324.193-.878.368-1.326.448l.884-.1-.884.1c-.062.013-.106.02-.156.032.004-.005-.994.101-2.995.316a2.313 2.313 0 0 0-.118.244Z",transform:"translate(8)"}),l("path",{fill:"url(#".concat(i("g"),")"),d:"M4.115 21.914c-.155.43-.317.872-.473 1.32 0 .006-.006.013-.006.019-.025.062-.044.124-.069.193-.106.305-.199.573-.41 1.195.348.162.628.58.896 1.059a1.876 1.876 0 0 0-.623-1.314c1.725.075 3.213-.361 3.979-1.619.068-.112.13-.23.186-.355-.348.442-.784.63-1.593.586h-.007.007c1.201-.536 1.799-1.052 2.334-1.905.125-.206.25-.424.374-.667-1.052 1.078-2.266 1.383-3.543 1.152l-.958.106c-.032.069-.063.15-.094.23Z",transform:"translate(8)"})))},h4t=f4t;var cF={};J(cF,{icon:()=>b4t});var APr=T(z());var m4t=["title","titleId"];function iue(){return iue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function g4t(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}var y4t=function(t){var r=t.title,n=t.titleId,o=v4t(t,m4t);return l("svg",iue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#0080D5",d:"M19.5.938a7.002 7.002 0 0 0-7 0l-8 4.619A7 7 0 0 0 1 11.62v9.237a7 7 0 0 0 3.5 6.062l7.5 4.33V17.979a7 7 0 0 1 3.5-6.062L27 5.276 19.5.939Z"}),l("path",{d:"M19.5.938a7.002 7.002 0 0 0-7 0L5 5.277l11 6.35 11-6.35-7.5-4.34Z",className:"euiIcon__fillNegative"}),l("path",{fill:"#FA744E",d:"m28.435 7.76-10.026 5.79a6.994 6.994 0 0 1 1.59 4.428v13.27l7.5-4.33a7 7 0 0 0 3.5-6.061v-9.238a6.992 6.992 0 0 0-1.586-4.422l-.978.564Z"}))},b4t=y4t;var pF={};J(pF,{icon:()=>S4t});var DPr=T(z());var w4t=["title","titleId"];function aue(){return aue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function x4t(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}var _4t=function(t){var r=t.title,n=t.titleId,o=O4t(t,w4t);return l("svg",aue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 0 1 .075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 0 1-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 0 1-.383-.494 8.109 8.109 0 0 1-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 0 1-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 0 1 .298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 0 1 1.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02Zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 0 0 1.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 0 0-.98-.179 8.113 8.113 0 0 0-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39Zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915Zm13.675.284a7.122 7.122 0 0 1-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 0 1-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 0 1 .192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 0 0 .554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 0 1-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 0 1 1.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 0 1 .32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 0 1-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22Z",className:"euiIcon__fillNegative"}),l("g",{fill:"#F90"},l("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799Z"}),l("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944Z"}))))},S4t=_4t;var dF={};J(dF,{icon:()=>j4t});var NPr=T(z());var I4t=["title","titleId"];function sue(){return sue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function P4t(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}var k4t=function(t){var r=t.title,n=t.titleId,o=E4t(t,I4t);return l("svg",sue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fillRule:"evenodd"},l("path",{fillRule:"nonzero",d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 0 1 .075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 0 1-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 0 1-.383-.494 8.109 8.109 0 0 1-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 0 1-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 0 1 .298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 0 1 1.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02Zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 0 0 1.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 0 0-.98-.179 8.113 8.113 0 0 0-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39Zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915Zm13.675.284a7.122 7.122 0 0 1-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 0 1-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 0 1 .192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 0 0 .554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 0 1-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 0 1 1.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 0 1 .32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 0 1-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22Z"}),l("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799Z"}),l("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944Z"})))},j4t=k4t;var fF={};J(fF,{icon:()=>R4t});var BPr=T(z());var T4t=["title","titleId"];function lue(){return lue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function M4t(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}var A4t=function(t){var r=t.title,n=t.titleId,o=C4t(t,T4t);return l("svg",lue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#0072C6",d:"m17.448 4-9.414 8.01L0 26.157h7.243L17.448 4ZM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874Z"}))},R4t=A4t;var hF={};J(hF,{icon:()=>B4t});var WPr=T(z());var D4t=["title","titleId"];function uue(){return uue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function N4t(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}var F4t=function(t){var r=t.title,n=t.titleId,o=L4t(t,D4t);return l("svg",uue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m17.448 4-9.414 8.01L0 26.157h7.243L17.448 4ZM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874Z"}))},B4t=F4t;var mF={};J(mF,{icon:()=>$4t});var VPr=T(z());var z4t=["title","titleId"];function cue(){return cue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function H4t(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}var V4t=function(t){var r=t.title,n=t.titleId,o=W4t(t,z4t);return l("svg",cue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#0080D5",d:"M15 20H4V0h11c5.522 0 10 4.478 10 10s-4.478 10-10 10"}),l("path",{fill:"#00C2B3",d:"M26.702 15.624C24.6 19.979 20.152 23 15 23H4v9h15c5.522 0 10-4.478 10-10a9.952 9.952 0 0 0-2.298-6.376"}),l("path",{d:"M24.338 13.554A9.942 9.942 0 0 0 19 12H4v8h11c4.27 0 7.903-2.68 9.338-6.446",className:"euiIcon__fillNegative"}))},$4t=V4t;var vF={};J(vF,{icon:()=>J4t});var ZPr=T(z());var Z4t=["title","titleId"];function pue(){return pue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function U4t(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}var G4t=function(t){var r=t.title,n=t.titleId,o=q4t(t,Z4t);return l("svg",pue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{fill:"#00BFB3",d:"M0 22c0 5.522 4.478 10 10 10V12C4.478 12 0 16.478 0 22"}),l("path",{d:"M10 12v10h10c0-5.522-4.478-10-10-10",className:"euiIcon__fillNegative"}),l("path",{fill:"#F04E98",d:"M10 0v9c7.168 0 13 5.832 13 13h9C32 9.85 22.15 0 10 0"})))},J4t=G4t;var gF={};J(gF,{icon:()=>ext});var UPr=T(z());var X4t=["title","titleId"];function due(){return due=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Y4t(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}var Q4t=function(t){var r=t.title,n=t.titleId,o=K4t(t,X4t);return l("svg",due({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#F05C56",d:"M25.471 27.56c-1.06-.567-1.676-1.206-1.811-1.902-.13-.673.17-1.421.918-2.288a11.29 11.29 0 0 0 2.773-7.42A11.324 11.324 0 0 0 16.042 4.64l-.05.001h-.05A11.324 11.324 0 0 0 4.632 15.949a11.291 11.291 0 0 0 2.774 7.422c.753.872 1.047 1.591.928 2.257-.13.694-.74 1.342-1.817 1.93-1.657-1.375-3.116-3.212-4.01-5.056a14.943 14.943 0 0 1-1.117-3.139A14.997 14.997 0 0 1 1 15.95a14.901 14.901 0 0 1 4.378-10.57 14.924 14.924 0 0 1 4.752-3.204C11.97 1.395 13.95.996 15.948 1h.101a14.888 14.888 0 0 1 10.57 4.378 14.912 14.912 0 0 1 3.982 13.985 14.871 14.871 0 0 1-1.118 3.14c-.9 1.843-2.358 3.681-4.01 5.057h-.003Zm-5.523 2.798c-.173-.11-.767-.55-1.345-1.353a6.122 6.122 0 0 1-1.174-3.738 8.26 8.26 0 0 1 .611-2.964 8.42 8.42 0 0 1 1.627-2.54l.004-.008.154-.178c.263-.305.536-.622.753-.99.268-.454.462-.931.578-1.42.178-.758.188-1.547.029-2.31a5.3 5.3 0 0 0-.858-1.956 5.264 5.264 0 0 0-4.29-2.217h-.108a5.25 5.25 0 0 0-4.29 2.216 5.31 5.31 0 0 0-.856 1.956c-.16.763-.15 1.552.03 2.311.115.488.31.965.576 1.419.219.37.49.684.753.99l.155.179.003.007a8.384 8.384 0 0 1 1.628 2.54 8.24 8.24 0 0 1 .61 2.964 6.123 6.123 0 0 1-1.173 3.738c-.58.795-1.174 1.243-1.346 1.352l-.867-.26a15.434 15.434 0 0 1-2.49-1.098 4.245 4.245 0 0 0 2.234-3.736c0-1.034-.403-2.028-1.195-2.95l-.034-.034-.237-.26-.636-.746a8.924 8.924 0 0 1-1.525-3.26 8.983 8.983 0 0 1-.05-3.905 8.906 8.906 0 0 1 1.46-3.313A8.993 8.993 0 0 1 11.23 8.39a8.937 8.937 0 0 1 4.702-1.344h.112c.42 0 .84.029 1.255.088a8.938 8.938 0 0 1 3.448 1.256 9.003 9.003 0 0 1 2.554 2.404 9.093 9.093 0 0 1 1.459 3.313 9.043 9.043 0 0 1-.05 3.912 8.925 8.925 0 0 1-1.526 3.26c-.2.265-.409.495-.637.745l-.23.254c-.017.016-.03.027-.04.043-.804.961-1.195 1.927-1.195 2.948a4.25 4.25 0 0 0 2.237 3.735c-.795.441-1.63.809-2.491 1.098l-.862.26-.018-.004Zm-3.956-11.314a2.957 2.957 0 0 1-2.952-2.952 2.957 2.957 0 0 1 2.952-2.952 2.956 2.956 0 0 1 2.95 2.952 2.957 2.957 0 0 1-2.95 2.952"}))},ext=Q4t;var yF={};J(yF,{icon:()=>ixt});var JPr=T(z());var txt=["title","titleId"];function fue(){return fue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nxt(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}var oxt=function(t){var r=t.title,n=t.titleId,o=rxt(t,txt);return l("svg",fue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{d:"M12.37 18.352c.032-.01.066-.014.1-.023A6 6 0 0 1 18 10V0C9.163 0 2 7.164 2 16c0 2.793.72 5.417 1.976 7.702a18.947 18.947 0 0 1 8.393-5.349",className:"euiIcon__fillNegative"}),l("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 0 0 5.717 5.75a16.006 16.006 0 0 0 7.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0 1 18 10a5.94 5.94 0 0 1 2.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 0 0 7.541-5.032A15.959 15.959 0 0 0 18 0"}),l("path",{fill:"#00BFB3",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0 1 18 22a5.94 5.94 0 0 1-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 0 0-7.54 5.032A15.959 15.959 0 0 0 18 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 0 0-7.54-5.032"})))},ixt=oxt;var bF={};J(bF,{icon:()=>cxt});var KPr=T(z());var axt=["title","titleId"];function hue(){return hue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function lxt(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}var uxt=function(t){var r=t.title,n=t.titleId,o=sxt(t,axt);return l("svg",hue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M18 0v10a6 6 0 0 0-5.53 8.33c-.034.009-.068.012-.1.023A18.947 18.947 0 0 0 3.975 23.7 15.934 15.934 0 0 1 2 16C2 7.164 9.163 0 18 0Zm0 13a3 3 0 1 1 0 6 3 3 0 0 1 0-6Z",className:"euiIcon__fillNegative"}),l("path",{fill:"#00AEFA",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0 1 18 22a5.94 5.94 0 0 1-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 0 0-7.54 5.032A15.959 15.959 0 0 0 18 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 0 0-7.54-5.032"}),l("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 0 0 5.717 5.75a16.006 16.006 0 0 0 7.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0 1 18 10a5.94 5.94 0 0 1 2.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 0 0 7.541-5.032A15.959 15.959 0 0 0 18 0"}))},cxt=uxt;var wF={};J(wF,{icon:()=>mxt});var QPr=T(z());var pxt=["title","titleId"];function mue(){return mue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fxt(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}var hxt=function(t){var r=t.title,n=t.titleId,o=dxt(t,pxt);return l("svg",mue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.75 12 16 32h10l-3.4-10.88A13 13 0 0 0 10.19 12h-.44Z",className:"euiIcon__fillNegative"}),l("path",{fill:"#22A7F3",d:"M25.725 11.93A17 17 0 0 0 9.5 0H6l3.75 12h.44a13 13 0 0 1 12.41 9.12L26 32h6l-6.275-20.07Z"}),l("path",{fill:"#0377CA",d:"M7.91 16.175 0 32h12.855z"}))},mxt=hxt;var OF={};J(OF,{icon:()=>wxt});var tkr=T(z());var vxt=["title","titleId"];function vue(){return vue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yxt(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}var bxt=function(t){var r=t.title,n=t.titleId,o=gxt(t,vxt);return l("svg",vue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M14.738 28.044V16.681L3.172 10.919v6.46l5.32 2.67v4.889l6.246 3.106Zm2.344.066 6.357-3.17v-5.002l5.353-2.686V10.87l-11.71 5.854V28.11ZM27.306 8.993l-6.003-3.012-5.286 2.656-5.325-2.659L4.637 9.03l11.317 5.638 11.352-5.675ZM.828 23.744V8.324L15.981.689l15.155 7.604V23.72L15.98 31.28.828 23.743Z"}))},wxt=bxt;var xF={};J(xF,{icon:()=>Ixt});var nkr=T(z());var Oxt=["title","titleId"];function gue(){return gue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _xt(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}var Sxt=function(t){var r=t.title,n=t.titleId,o=xxt(t,Oxt);return l("svg",gue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#ED2226",d:"M16.072.024C7.29.024.144 7.146.144 15.952c0 8.782 7.122 15.928 15.928 15.928C24.854 31.88 32 24.758 32 15.952 32 7.146 24.854.024 16.072.024Zm10.755 18.719c0 .962-.553 1.804-1.636 1.997-1.877.336-5.823.53-9.119.53-3.296 0-7.242-.194-9.119-.53-1.082-.193-1.636-1.035-1.636-1.997v-6.208c0-.962.746-1.852 1.636-1.997.554-.096 1.853-.192 2.864-.192.385 0 .697.289.697.746v4.355l5.582-.12 5.582.12v-4.355c0-.457.313-.746.698-.746 1.01 0 2.31.096 2.863.192.914.145 1.636 1.035 1.636 1.997-.048 2.045-.048 4.139-.048 6.208Z"}))},Ixt=Sxt;var _F={};J(_F,{icon:()=>Txt});var ikr=T(z());var Ext=["title","titleId"];function yue(){return yue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kxt(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}var jxt=function(t){var r=t.title,n=t.titleId,o=Pxt(t,Ext);return l("svg",yue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#136EA3",fillRule:"evenodd",d:"M18.099 15.108h3.304v-2.973H18.1v2.973zm-3.905 0h3.304v-2.973h-3.304v2.973zm-3.905 0h3.304v-2.973H10.29v2.973zm-3.905 0H9.69v-2.973H6.384v2.973zm-3.904 0h3.304v-2.973H2.48v2.973zm3.904-3.568H9.69V8.568H6.384v2.972zm3.905 0h3.304V8.568H10.29v2.972zm3.905 0h3.304V8.568h-3.304v2.972zm0-3.567h3.304V5h-3.304v2.973zm17.139 5.402c-.722-.478-2.38-.653-3.656-.415-.164-1.19-.834-2.221-2.052-3.153l-.7-.463-.468.694c-.598.893-.897 2.13-.8 3.317.045.418.183 1.164.617 1.82-.433.231-1.29.549-2.42.528H.124l-.043.247c-.204 1.193-.2 4.914 2.24 7.774C4.178 25.898 6.96 27 10.59 27c7.87 0 13.693-3.586 16.42-10.104 1.073.02 3.381.006 4.567-2.237.031-.051.102-.186.31-.61l.113-.234-.667-.44z"}))},Txt=jxt;var SF={};J(SF,{icon:()=>Dxt});var skr=T(z());var Cxt=["title","titleId"];function bue(){return bue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Axt(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}var Rxt=function(t){var r=t.title,n=t.titleId,o=Mxt(t,Cxt),i=fn("logo_dropwizard");return l("svg",bue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"url(#".concat(i("a"),")"),d:"M8 29.61s9.55 4.74 16.856-.893c-1.905-5.114-5.25-19.867-7.226-26.383-.422-1.389-.49-1.527-.663-1.909-.964-2.134-1.978 4.142-3.628 10.459C12.749 13.148 8 29.61 8 29.61"}),l("path",{fill:"url(#".concat(i("b"),")"),d:"M9.926 28.563s8.17 4.794 14.93.154c-.18-.807-.642-2.103-.955-3.311-1.664-6.416-4.676-17.248-6.144-22.626-1.59-5.822-2.105.986-3.961 8.23-.564 2.204-3.87 17.553-3.87 17.553"}),l("path",{fill:"#F9A72B",d:"m12.14 24.41.85-1.466.793 1.544-.908 1.99-.735-2.069Zm6.934-5.545.85-1.465.793 1.543-.908 1.99-.735-2.068Zm-4.747-5.851.85-1.465.792 1.543-.908 1.99-.734-2.068"}),l("path",{fill:"#FFF200",d:"m12.14 24.41.85-1.716.793 1.794-.907 1.468-.736-1.546Zm6.934-5.545.851-1.716.792 1.794-.906 1.468-.737-1.546Zm-4.747-5.851.85-1.716.792 1.794-.906 1.468-.736-1.546"}),l("path",{fill:"#24265D",d:"M12.987 28.422s6.082 1.015 10.086-1.549c-.502 1.55-4.991 3.314-10.086 1.55"}),l("defs",null,l("linearGradient",{id:i("a"),x1:33.473,x2:7.751,y1:7.674,y2:21.331,gradientUnits:"userSpaceOnUse"},l("stop",{stopColor:"#3871C1"}),l("stop",{offset:.515,stopColor:"#2C3792"}),l("stop",{offset:.865,stopColor:"#24265D"}),l("stop",{offset:1,stopColor:"#252761"})),l("linearGradient",{id:i("b"),x1:21.028,x2:6.017,y1:14.928,y2:18.844,gradientUnits:"userSpaceOnUse"},l("stop",{stopColor:"#3871C1"}),l("stop",{offset:.515,stopColor:"#2C3792"}),l("stop",{offset:.865,stopColor:"#24265D"}),l("stop",{offset:1,stopColor:"#252761"}))))},Dxt=Rxt;var IF={};J(IF,{icon:()=>zxt});var ckr=T(z());var Lxt=["title","titleId"];function wue(){return wue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Fxt(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}var Bxt=function(t){var r=t.title,n=t.titleId,o=Nxt(t,Lxt);return l("svg",wue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none","data-type":"logoElastic",viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#fff",fillRule:"evenodd",d:"M30.86 13.129A6.333 6.333 0 0 1 32 16.77a6.419 6.419 0 0 1-1.162 3.652 6.382 6.382 0 0 1-3.032 2.331 4.833 4.833 0 0 1-1.672 5.542 4.789 4.789 0 0 1-5.77-.074 9.016 9.016 0 0 1-4.5 3.322 8.982 8.982 0 0 1-5.587.023 9.014 9.014 0 0 1-4.526-3.287 9.067 9.067 0 0 1-1.727-5.333c0-.579.053-1.156.16-1.725A6.305 6.305 0 0 1 1.145 18.9 6.341 6.341 0 0 1 0 15.242a6.42 6.42 0 0 1 1.163-3.652 6.384 6.384 0 0 1 3.035-2.33 4.833 4.833 0 0 1 1.658-5.557 4.789 4.789 0 0 1 5.78.07 9.037 9.037 0 0 1 4.93-3.446 9.007 9.007 0 0 1 5.994.419 9.05 9.05 0 0 1 4.407 4.098 9.097 9.097 0 0 1 .873 5.965 6.298 6.298 0 0 1 3.02 2.32Zm-18.28.658 7.002 3.211 7.066-6.213a7.85 7.85 0 0 0 .152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 0 0-4.02-2.869 7.87 7.87 0 0 0-4.932.086 7.9 7.9 0 0 0-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001Zm-7.247 7.441A7.964 7.964 0 0 0 6.72 27.53a7.918 7.918 0 0 0 4.04 2.874 7.89 7.89 0 0 0 4.95-.097 7.92 7.92 0 0 0 3.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001Zm4.755-11.024-4.8-1.137.002-.002a3.82 3.82 0 0 1 1.312-4.358 3.785 3.785 0 0 1 4.538.023l-1.052 5.474Zm-5.216.01a5.294 5.294 0 0 0-2.595 1.882 5.324 5.324 0 0 0-.142 6.124 5.287 5.287 0 0 0 2.505 2l6.733-6.101-1.235-2.65-5.266-1.255Zm18.286 17.848a3.737 3.737 0 0 1-2.285-.785l1.037-5.454 4.8 1.125a3.812 3.812 0 0 1-1.801 4.68c-.54.283-1.14.432-1.751.434Zm-1.31-7.499 5.28 1.238a5.34 5.34 0 0 0 2.622-1.938 5.37 5.37 0 0 0 1.013-3.106 5.311 5.311 0 0 0-.936-3.01 5.282 5.282 0 0 0-2.475-1.944l-6.904 6.07 1.4 2.69Z",className:"outline",clipRule:"evenodd"}),l("path",{fill:"#FEC514",d:"m12.58 13.787 7.002 3.211 7.066-6.213a7.849 7.849 0 0 0 .152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 0 0-4.02-2.869 7.87 7.87 0 0 0-4.932.086 7.9 7.9 0 0 0-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001Z"}),l("path",{fill:"#00BFB3",d:"M5.333 21.228A7.964 7.964 0 0 0 6.72 27.53a7.918 7.918 0 0 0 4.04 2.874 7.89 7.89 0 0 0 4.95-.097 7.92 7.92 0 0 0 3.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001Z"}),l("path",{fill:"#F04E98",d:"m5.288 9.067 4.8 1.137L11.14 4.73a3.785 3.785 0 0 0-5.914 1.94 3.82 3.82 0 0 0 .064 2.395"}),l("path",{fill:"#1BA9F5",d:"M4.872 10.214a5.294 5.294 0 0 0-2.595 1.882 5.324 5.324 0 0 0-.142 6.124 5.287 5.287 0 0 0 2.505 2l6.733-6.101-1.235-2.65-5.266-1.255Z"}),l("path",{fill:"#93C90E",d:"M20.873 27.277a3.736 3.736 0 0 0 2.285.785 3.783 3.783 0 0 0 3.101-1.63 3.812 3.812 0 0 0 .451-3.484l-4.8-1.125-1.037 5.454Z"}),l("path",{fill:"#07C",d:"m21.848 20.563 5.28 1.238a5.34 5.34 0 0 0 2.622-1.938 5.37 5.37 0 0 0 1.013-3.106 5.312 5.312 0 0 0-.936-3.01 5.283 5.283 0 0 0-2.475-1.944l-6.904 6.07 1.4 2.69Z"}))},zxt=Bxt;var EF={};J(EF,{icon:()=>Zxt});var dkr=T(z());var Wxt=["title","titleId"];function Oue(){return Oue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Vxt(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}var $xt=function(t){var r=t.title,n=t.titleId,o=Hxt(t,Wxt);return l("svg",Oue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#F04E98",d:"M0 2.37A2.37 2.37 0 0 1 2.37 0h27.26A2.37 2.37 0 0 1 32 2.37v6.52H0V2.37Z"}),l("path",{fill:"#00BFB3",d:"M0 20.148h32v-8.296H0v8.296Z"}),l("path",{fill:"#07C",d:"M0 23.111h32v6.519A2.37 2.37 0 0 1 29.63 32H2.37A2.37 2.37 0 0 1 0 29.63v-6.52Z"}))},Zxt=$xt;var PF={};J(PF,{icon:()=>Xxt});var hkr=T(z());var qxt=["title","titleId"];function xue(){return xue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Gxt(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}var Jxt=function(t){var r=t.title,n=t.titleId,o=Uxt(t,qxt);return l("svg",xue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{d:"M2 16c0 1.384.194 2.72.524 4H22a4 4 0 0 0 0-8H2.524A15.984 15.984 0 0 0 2 16",className:"euiIcon__fillNegative"}),l("path",{fill:"#FEC514",d:"M28.924 7.662A15.381 15.381 0 0 0 30.48 6C27.547 2.346 23.05 0 18 0 11.679 0 6.239 3.678 3.644 9H25.51a5.039 5.039 0 0 0 3.413-1.338"}),l("path",{fill:"#00BFB3",d:"M25.51 23H3.645C6.24 28.323 11.679 32 18 32c5.05 0 9.547-2.346 12.48-6a15.381 15.381 0 0 0-1.556-1.662A5.034 5.034 0 0 0 25.51 23"})))},Xxt=Jxt;var kF={};J(kF,{icon:()=>t_t});var vkr=T(z());var Kxt=["title","titleId"];function _ue(){return _ue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Qxt(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}var e_t=function(t){var r=t.title,n=t.titleId,o=Yxt(t,Kxt);return l("svg",_ue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#00BFB3",fillRule:"evenodd",d:"M16 0c-2.918 0-5.645.794-8 2.158 4.777 2.768 8 7.923 8 13.842 0 5.919-3.223 11.074-8 13.842A15.907 15.907 0 0 0 16 32c8.837 0 16-7.163 16-16S24.837 0 16 0z",clipRule:"evenodd"}),l("path",{fill:"#FEC514",fillRule:"evenodd",d:"M8 24h2.222A12.996 12.996 0 0 0 13 16c0-2.935-1.012-5.744-2.778-8H8a8 8 0 0 0 0 16z",clipRule:"evenodd"}),l("path",{fillRule:"evenodd",d:"M16 8h-2.152A15.877 15.877 0 0 1 16 16c0 2.918-.786 5.647-2.152 8H16a8 8 0 0 0 0-16z",className:"euiIcon__fillNegative",clipRule:"evenodd"}))},t_t=e_t;var jF={};J(jF,{icon:()=>a_t});var ykr=T(z());var r_t=["title","titleId"];function Sue(){return Sue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function o_t(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}var i_t=function(t){var r=t.title,n=t.titleId,o=n_t(t,r_t);return l("svg",Sue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"#419EDA"},l("path",{d:"M14.65 14.164c0 1.189-.933 2.15-2.083 2.15-1.152 0-2.082-.961-2.082-2.15 0-1.185.93-2.15 2.082-2.15 1.15 0 2.083.965 2.083 2.15zm2.693 0c0 1.189.934 2.15 2.084 2.15s2.083-.961 2.083-2.15c0-1.185-.933-2.15-2.083-2.15-1.15 0-2.084.965-2.084 2.15z"}),l("path",{d:"M31.522 16.495a5.845 5.845 0 0 1-3.105-.618c.272-1.603.387-3.218.357-4.827a24.896 24.896 0 0 0-3.027-3.703 6.137 6.137 0 0 1 2.133-2.36l.391-.25-.304-.354c-1.57-1.825-3.444-3.235-5.568-4.193L21.975 0l-.107.462a6.248 6.248 0 0 1-1.51 2.829 23.77 23.77 0 0 0-4.362-1.855 23.79 23.79 0 0 0-4.355 1.851A6.246 6.246 0 0 1 10.137.465l-.108-.462-.423.189c-2.097.943-4.022 2.392-5.566 4.19l-.306.355.39.25a6.125 6.125 0 0 1 2.129 2.347 25.001 25.001 0 0 0-3.022 3.689 26.068 26.068 0 0 0 .347 4.86 5.832 5.832 0 0 1-3.09.612L.03 16.46l.043.473a16.723 16.723 0 0 0 2.14 6.765l.234.41.35-.308a5.914 5.914 0 0 1 2.837-1.372 25.255 25.255 0 0 0 2.429 4.083c1.475.533 3.013.93 4.601 1.167a6.359 6.359 0 0 1-.383 3.243l-.175.439.45.102c1.15.261 2.31.394 3.447.394l3.447-.394.45-.102-.175-.44a6.376 6.376 0 0 1-.383-3.244 23.905 23.905 0 0 0 4.585-1.165 25.286 25.286 0 0 0 2.43-4.086 5.94 5.94 0 0 1 2.851 1.373l.35.306.233-.408a16.661 16.661 0 0 0 2.14-6.764l.042-.472-.45.036ZM20.93 22.278c-1.63.458-3.287.689-4.933.689-1.65 0-3.304-.231-4.936-.69a20.028 20.028 0 0 1-2.113-4.594 20.072 20.072 0 0 1-.89-5.04 19.076 19.076 0 0 1 3.576-3.516 18.867 18.867 0 0 1 4.363-2.448 18.944 18.944 0 0 1 4.355 2.443 19.19 19.19 0 0 1 3.592 3.538c-.09 1.73-.39 3.41-.899 5.019a19.965 19.965 0 0 1-2.115 4.599Z"})))},a_t=i_t;var TF={};J(TF,{icon:()=>p_t});var wkr=T(z());var s_t=["title","titleId"];function Iue(){return Iue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function u_t(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}var c_t=function(t){var r=t.title,n=t.titleId,o=l_t(t,s_t),i=fn("logo_gcp");return l("svg",Iue({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("defs",null,l("path",{id:i("a"),d:"M.085.1h4.549v6.291H.085z"})),l("g",{fill:"none",fillRule:"evenodd"},l("path",{fill:"#DB4437",fillRule:"nonzero",d:"M22.57 29.982h-5.749c.527 0 .987-.282 1.233-.7L25.857 16 20.93 7.61l5.748.001c.492 0 .97.251 1.232.7l3.698 6.291c.49.837.526 1.9 0 2.797l-6.572 11.185a2.853 2.853 0 0 1-2.464 1.398Zm-.71-2.796c0 .386.318.7.71.7a.705.705 0 0 0 .712-.7c0-.386-.318-.7-.711-.7a.705.705 0 0 0-.712.7Zm6.927-10.58c.34.193.775.078.971-.256a.692.692 0 0 0-.26-.955.718.718 0 0 0-.972.256.692.692 0 0 0 .26.955Z"}),l("path",{fill:"#4285F4",fillRule:"nonzero",d:"m25.036 3.416 2.873 4.894a1.427 1.427 0 0 0-1.232-.699H11.071l-4.928 8.388-2.874-4.892a1.377 1.377 0 0 1 0-1.399l3.696-6.292a2.853 2.853 0 0 1 2.464-1.398h13.143c.982 0 1.937.502 2.464 1.398ZM10.14 4.814c0-.386-.318-.7-.71-.7a.705.705 0 0 0-.712.7c0 .386.318.7.711.7a.705.705 0 0 0 .711-.7Zm12.787.606a.692.692 0 0 0 .26-.955.718.718 0 0 0-.971-.256.692.692 0 0 0-.26.955.718.718 0 0 0 .971.256Z"}),l("path",{fill:"#F4B400",fillRule:"nonzero",d:"m.394 14.601 2.875-4.893c-.263.449-.245.98 0 1.399L11.07 24.39h9.857l-2.874 4.892c-.246.418-.706.7-1.233.7H9.428a2.854 2.854 0 0 1-2.464-1.398L.394 17.398a2.754 2.754 0 0 1 0-2.797Zm2.82.793a.718.718 0 0 0-.972.256.693.693 0 0 0 .26.955c.34.193.775.078.971-.256a.692.692 0 0 0-.26-.955ZM9.072 26.58a.692.692 0 0 0-.26.955.718.718 0 0 0 .971.256.692.692 0 0 0 .26-.955.718.718 0 0 0-.971-.256Z"}),l("path",{fill:"#000",d:"m18.054 29.282 2.875-4.892H17.96l-1.138 5.591c.526 0 .986-.28 1.232-.699M26.678 7.611h-5.749l1.484 2.527L27.91 8.31a1.427 1.427 0 0 0-1.232-.7",opacity:.1}),l("g",{opacity:.1,transform:"translate(2.994 9.609)"},l("mask",{id:i("b"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("a"))})),l("path",{fill:"#000",d:"M.275 1.498 3.15 6.391l1.485-2.527L.275.1c-.263.448-.245.98 0 1.398",mask:"url(#".concat(i("b"),")")})),l("path",{fill:"#CCC",fillRule:"nonzero",d:"M11.071 24.39 6.143 16l4.928-8.39h9.858L25.857 16l-4.928 8.39H11.07ZM20.268 16c0-2.317-1.91-4.194-4.268-4.194-2.357 0-4.268 1.877-4.268 4.194 0 2.316 1.91 4.194 4.268 4.194 2.357 0 4.268-1.878 4.268-4.194Z"})))},p_t=c_t;var CF={};J(CF,{icon:()=>v_t});var _kr=T(z());var d_t=["title","titleId"];function Eue(){return Eue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function h_t(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}var m_t=function(t){var r=t.title,n=t.titleId,o=f_t(t,d_t);return l("svg",Eue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M20.256 15.982c0-2.316-1.91-4.194-4.268-4.194-2.357 0-4.268 1.878-4.268 4.194 0 2.317 1.911 4.195 4.268 4.195 2.357 0 4.268-1.878 4.268-4.195"}),l("path",{d:"M29.87 16.543a.862.862 0 0 1-1.167.308.832.832 0 0 1-.312-1.147.862.862 0 0 1 1.167-.308.832.832 0 0 1 .312 1.147M22.56 28.15a.847.847 0 0 1-.855-.84c0-.464.383-.84.855-.84s.854.376.854.84c0 .464-.382.84-.854.84m-12.715-.113a.863.863 0 0 1-1.167-.308.832.832 0 0 1 .312-1.147.862.862 0 0 1 1.167.308.832.832 0 0 1-.312 1.147M3.586 16.542a.863.863 0 0 1-1.167.308.832.832 0 0 1-.313-1.147.862.862 0 0 1 1.167-.308.832.832 0 0 1 .313 1.147M22.987 5.665a.862.862 0 0 1-1.167-.308.832.832 0 0 1 .312-1.147.863.863 0 0 1 1.168.308.832.832 0 0 1-.313 1.147m-13.57.112a.847.847 0 0 1-.854-.84c0-.464.382-.84.854-.84s.855.376.855.84c0 .464-.383.84-.855.84m22.178 8.797-3.697-6.292c-.014-.023-.03-.043-.045-.065l-2.83-4.818A2.854 2.854 0 0 0 22.56 2H9.417a2.853 2.853 0 0 0-2.464 1.398L3.257 9.69l3.284 5.59 4.519-7.69h15.605c.491 0 .969.251 1.232.699h-6.565l4.513 7.682-4.935 8.4-2.87 4.883a1.426 1.426 0 0 1-1.23.699l3.279-5.582h-9.03l-4.544-7.738-.384-.653-2.874-4.893a1.377 1.377 0 0 1-.003-1.391L.382 14.584a2.754 2.754 0 0 0 0 2.796l6.57 11.186a2.854 2.854 0 0 0 2.465 1.398h7.392c.054 0 .107-.005.16-.011h5.59a2.853 2.853 0 0 0 2.464-1.397l6.572-11.186c.526-.896.49-1.96 0-2.796"}))},v_t=m_t;var MF={};J(MF,{icon:()=>O_t});var Ikr=T(z());var g_t=["title","titleId"];function Pue(){return Pue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function b_t(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}var w_t=function(t){var r=t.title,n=t.titleId,o=y_t(t,g_t);return l("svg",Pue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 0C7.164 0 0 7.343 0 16.4c0 7.248 4.584 13.394 10.942 15.562.8.15 1.092-.356 1.092-.789 0-.39-.014-1.684-.022-3.053-4.45.991-5.39-1.934-5.39-1.934-.728-1.894-1.776-2.398-1.776-2.398-1.454-1.017.11-.997.11-.997 1.606.114 2.452 1.69 2.452 1.69 1.428 2.506 3.746 1.781 4.656 1.36.146-1.056.56-1.78 1.016-2.19-3.552-.414-7.288-1.821-7.288-8.105 0-1.792.624-3.254 1.646-4.402-.164-.416-.714-2.085.158-4.342 0 0 1.341-.44 4.4 1.681A14.882 14.882 0 0 1 16 7.932c1.36.006 2.728.188 4.006.553 3.053-2.124 4.396-1.681 4.396-1.681.875 2.259.325 3.926.16 4.34 1.026 1.148 1.645 2.61 1.645 4.402 0 6.3-3.742 7.687-7.307 8.094.577.508 1.086 1.505 1.086 3.035 0 2.192-.021 3.96-.021 4.5 0 .437.29.947 1.101.787C27.42 29.79 32 23.644 32 16.4 32 7.343 24.836 0 16 0Z"}))},O_t=w_t;var AF={};J(AF,{icon:()=>E_t});var Pkr=T(z());var x_t=["title","titleId"];function kue(){return kue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function S_t(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}var I_t=function(t){var r=t.title,n=t.titleId,o=__t(t,x_t);return l("svg",kue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#E65A4D",d:"M29.162 4.149c.29-.175.588-.078.873 0a2.616 2.616 0 0 1 1.907 2.476c.006.29-.007.581-.007.866-.084 0-.135.052-.2.097-.815.582-1.642 1.164-2.45 1.752-.33.239-.692.426-.97.73-.116 0-.2.078-.284.136-2.69 1.855-5.379 3.704-8.062 5.56-1.331.918-2.663 1.849-3.995 2.773h-.11c-.058-.045-.11-.103-.168-.142L5.863 11.55c-.672-.466-1.344-.938-2.017-1.403-.077-.052-.148-.162-.245-.104-.09.052-.033.175-.045.272-.007.032 0 .065 0 .097v16.194c0 .116.006.24.012.355 0 .065-.006.123-.006.188-1.228.149-2.347-.02-3.116-1.131a2.381 2.381 0 0 1-.44-1.364c0-6.032-.006-12.057.007-18.089 0-1.228.995-2.314 2.217-2.488.194-.026.388-.052.556.077.04.039.071.078.117.11 4.273 3.168 8.546 6.335 12.819 9.51.168.122.278.116.446-.007 3.413-2.521 6.833-5.036 10.247-7.55.905-.692 1.823-1.384 2.747-2.07Z"}),l("path",{fill:"#F6F4EC",d:"M29.162 4.149c-.924.685-1.842 1.377-2.767 2.062-3.413 2.521-6.833 5.03-10.246 7.55-.168.123-.272.13-.446.007-4.267-3.174-8.54-6.335-12.813-9.51-.046-.032-.078-.07-.117-.11.078-.129.214-.083.324-.083h25.742c.11 0 .239-.046.323.084Z"}),l("path",{fill:"#E6E3D6",d:"M3.556 26.95a6.533 6.533 0 0 1-.013-.356V10.4c0-.032-.007-.065 0-.097.013-.09-.046-.213.045-.271.097-.059.174.051.246.103.672.465 1.344.937 2.017 1.403l9.832 6.846c.058.045.117.097.168.142-.026.026-.058.045-.084.071l-.064.065c-.052 0-.104.013-.13.064l-.064.065c-.007.013-.02.02-.026.032.013-.006.02-.019.032-.025l.065-.065c.052 0 .103-.013.13-.065.018-.02.044-.045.064-.064.064 0 .129-.007.194-.007.898.627 1.803 1.248 2.702 1.875 2.676 1.855 5.353 3.704 8.023 5.572.478.337 1.002.628 1.428 1.035-.116.11-.258.039-.388.058.007-.149-.122-.188-.22-.252-.49-.343-.995-.672-1.473-1.028-.802-.588-1.617-1.15-2.431-1.72-.679-.472-1.351-.963-2.05-1.409-.607-.388-1.17-.853-1.777-1.248-.685-.44-1.332-.93-2.01-1.377-.563-.368-1.113-.762-1.662-1.15-.11-.078-.207-.11-.323-.033-.233.168-.53.278-.724.46-.556.51-1.235.84-1.817 1.305-.743.589-1.545 1.112-2.34 1.636-1.319.873-2.599 1.816-3.911 2.696a43.697 43.697 0 0 0-2.308 1.629c-.207.155-.485.226-.614.485-.13-.013-.272.038-.395-.046 2.315-1.616 4.63-3.226 6.937-4.842.304-.213.646-.381.899-.666.045-.013.103-.019.097-.084 0-.006-.013-.02-.02-.02-.065-.006-.077.046-.09.091-.233.013-.375.194-.55.31-2.463 1.7-4.932 3.388-7.395 5.075Zm11.119-7.564.064-.065c.052 0 .104-.013.13-.064l.064-.065c.052 0 .104-.013.13-.065.006-.013.019-.02.025-.032-.012.006-.019.02-.032.026-.052 0-.103.013-.13.064l-.064.065c-.051 0-.103.013-.13.065-.018.026-.038.045-.057.07-.013.007-.026.014-.033.027.013-.007.026-.013.033-.026Zm-.84.575c-.052 0-.104.013-.13.065-.039.006-.09.006-.097.065 0 .012.026.038.039.038.052-.006.058-.051.065-.09.051-.007.096-.013.122-.078a.311.311 0 0 0 .071-.058c.052 0 .104-.013.13-.065l.064-.064c.052 0 .104-.013.13-.065.006-.013.02-.02.026-.032-.013.006-.02.02-.033.026-.051 0-.103.013-.13.064-.018.02-.044.046-.064.065-.051 0-.103.013-.129.065l-.065.064Zm-.841.588c-.052 0-.103.013-.13.065-.051.007-.103.013-.096.084 0 .007.013.02.02.02.07.006.077-.046.083-.097.052-.007.097-.02.123-.072.026-.012.045-.038.071-.058.052 0 .103-.013.13-.064l.064-.065c.052 0 .103-.013.13-.065.006-.013.019-.019.025-.032-.013.007-.02.02-.032.026-.052 0-.104.013-.13.065l-.064.064c-.052 0-.104.013-.13.065a.306.306 0 0 0-.064.064Zm-.647.46c.052-.007.104-.013.097-.085 0-.006-.012-.019-.019-.019-.071-.006-.078.045-.084.097-.052 0-.097.013-.13.065a.223.223 0 0 0-.193.129c-.045.013-.104.013-.097.084 0 .006.013.02.02.02.064.006.077-.046.083-.098.09 0 .181-.006.194-.129.058-.006.104-.02.13-.065Zm2.128-1.533c-.008.027-.025.054-.033.072.025.009.05.035.067.027.016-.01.025-.045.033-.072a.55.55 0 0 1-.067-.027Zm-1.81 1.35c-.008-.024-.015-.056-.03-.056-.015-.008-.052.008-.06.024-.022.033-.007.074.03.074.022 0 .037-.025.06-.041ZM15.355 19a.185.185 0 0 1 .034-.072c-.025-.009-.05-.035-.067-.026-.016.008-.025.044-.033.07.017.01.042.019.067.028Zm-3.526 2.402c-.016-.024-.031-.05-.04-.057-.015 0-.055.016-.055.033-.016.04.008.074.048.065.016 0 .031-.024.047-.04Z"}),l("path",{fill:"#B6B5AC",d:"M28.121 27.085c-.426-.413-.944-.698-1.428-1.034-2.67-1.862-5.347-3.717-8.023-5.573-.899-.627-1.804-1.247-2.702-1.874 0-.02-.007-.046-.007-.065l3.995-2.773c2.69-1.856 5.379-3.705 8.062-5.56.084-.058.168-.136.284-.136v17.073c-.051-.019-.116-.038-.18-.058Z"}),l("path",{fill:"#E6E3D6",d:"M4.073 27.143c.123-.258.407-.33.614-.484a47.845 47.845 0 0 1 2.308-1.63c1.312-.885 2.592-1.823 3.91-2.695.796-.524 1.598-1.048 2.341-1.636.588-.465 1.26-.795 1.817-1.306.2-.18.49-.29.724-.459.11-.084.207-.051.323.033.55.388 1.099.782 1.661 1.15.68.446 1.326.944 2.01 1.377.608.388 1.17.854 1.779 1.248.698.446 1.37.937 2.049 1.41.814.568 1.635 1.13 2.43 1.719.485.355.983.685 1.475 1.028.09.064.226.103.22.252-7.888-.007-15.774-.007-23.661-.007Z"}),l("path",{fill:"#B1392F",d:"M28.315 27.143V10.07c.278-.304.64-.491.97-.73.814-.595 1.635-1.17 2.45-1.752.058-.045.116-.097.2-.097.007.11.013.213.013.323 0 5.502 0 11.01.007 16.51 0 .376-.013.75-.104 1.126-.161.691-.575 1.17-1.247 1.409-.744.259-1.513.33-2.289.284Z"}),l("path",{fill:"#BEBDB3",d:"M11.514 21.59c-.253.285-.595.453-.9.666a2650.078 2650.078 0 0 1-6.936 4.842l-.129.039c0-.065.007-.123.007-.188 2.47-1.687 4.932-3.374 7.402-5.061.174-.117.31-.304.55-.31l.006.012Z"})))},E_t=I_t;var RF={};J(RF,{icon:()=>C_t});var jkr=T(z());var P_t=["title","titleId"];function jue(){return jue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function j_t(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}var T_t=function(t){var r=t.title,n=t.titleId,o=k_t(t,P_t);return l("svg",jue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#F6D2A2",d:"M4.315 17.301c.045.946 1 .5 1.416.21.415-.29.5-.045.56-.6a9.07 9.07 0 0 0 .045-1.09 2.676 2.676 0 0 0-1.786.455c-.26.19-.745.79-.24 1"}),l("path",{fill:"#010101",d:"M4.805 17.987a.6.6 0 0 1-.27-.06.62.62 0 0 1-.31-.55A.41.41 0 0 1 4 17.05a1.15 1.15 0 0 1 .5-.83 2.752 2.752 0 0 1 1.846-.47h.075v.074c.01.286.003.572-.025.856v.25c-.025.39-.1.45-.3.5a1.118 1.118 0 0 0-.3.145c-.288.223-.63.364-.99.41Zm1.271-2.067a2.502 2.502 0 0 0-1.47.45 1 1 0 0 0-.42.671.25.25 0 0 0 .17.205h.05v.055a.5.5 0 0 0 .21.45 1.31 1.31 0 0 0 1.065-.31 1.29 1.29 0 0 1 .34-.17c.13-.045.16-.055.18-.365v-.25c.024-.25.034-.5.03-.75h-.155v.014Z"}),l("path",{fill:"#C7B199",d:"M4.315 17.3a.745.745 0 0 0 .376-.21Z"}),l("path",{fill:"#010101",d:"M4.315 17.391a.092.092 0 1 1-.055-.175h.06a.54.54 0 0 0 .275-.16.092.092 0 0 1 .06-.035.09.09 0 0 1 .068.017.09.09 0 0 1 .035.06.091.091 0 0 1-.018.068.7.7 0 0 1-.36.22h-.065v.005Z"}),l("path",{fill:"#74CDDD",d:"M6.496 6.05C2.88 5.049 5.571.43 8.498 2.322L6.496 6.05Z"}),l("path",{fill:"#010101",d:"M6.541 6.154h-.07c-1.03-.29-1.666-.9-1.786-1.716a2.396 2.396 0 0 1 1.116-2.26 2.421 2.421 0 0 1 2.722.09l.07.044L6.54 6.154Zm.5-4.192c-.41 0-.811.12-1.155.345A2.211 2.211 0 0 0 4.85 4.393c.11.726.67 1.276 1.586 1.551l1.901-3.587a2.501 2.501 0 0 0-1.28-.38l-.015-.015Z"}),l("path",{fill:"#74CDDD",d:"M22.566 1.977c2.862-2.001 5.448 2.502 2.121 3.667l-2.121-3.667Z"}),l("path",{fill:"#010101",d:"m24.647 5.754-2.201-3.802.065-.045a2.362 2.362 0 0 1 2.626-.22 2.427 2.427 0 0 1 1.196 2.241c-.05.5-.32 1.356-1.616 1.801l-.07.025Zm-1.961-3.752 2.041 3.532a1.956 1.956 0 0 0 1.426-1.62 2.24 2.24 0 0 0-1.106-2.077 2.126 2.126 0 0 0-2.361.165Z"}),l("path",{fill:"#F6D2A2",d:"M23.181 28.928c.726.45 2.056 1.811.966 2.471-1.046.961-1.636-1.055-2.557-1.33a2.549 2.549 0 0 1 1.591-1.141Z"}),l("path",{fill:"#010101",d:"M23.592 31.745h-.04c-.416-.025-.756-.43-1.086-.816a2.33 2.33 0 0 0-.9-.775l-.12-.035.074-.125a2.656 2.656 0 0 1 1.646-1.176h.065c.466.29 1.426 1.13 1.421 1.891a.835.835 0 0 1-.45.725.905.905 0 0 1-.61.31Zm-1.861-1.721c.339.2.633.467.865.785.219.36.56.628.96.755a.716.716 0 0 0 .5-.235.661.661 0 0 0 .371-.58c0-.61-.77-1.376-1.306-1.721a2.351 2.351 0 0 0-1.386.996h-.005Z"}),l("path",{fill:"#010101",d:"M24.147 31.494a.09.09 0 0 1-.08-.05c-.053-.11-.1-.224-.14-.34a1.5 1.5 0 0 0-.33-.61.091.091 0 0 1-.022-.098.09.09 0 0 1 .147-.032c.172.188.3.414.37.66.039.11.084.216.135.32a.09.09 0 0 1-.04.12l-.04.03Z"}),l("path",{fill:"#F6D2A2",d:"M10.189 30.464c-.856.13-1.336.9-2.046 1.29a.62.62 0 0 1-1.001-.235.325.325 0 0 1-.26-.12c-.62-1 .645-1.696 1.31-2.186.936-.18 1.511.615 1.997 1.25Z"}),l("path",{fill:"#010101",d:"M7.692 31.995a.613.613 0 0 1-.16 0 .74.74 0 0 1-.435-.375.301.301 0 0 1-.245-.13c-.6-.946.42-1.662 1.096-2.137l.235-.17c.945-.19 1.546.59 2.026 1.22l.135.181h-.15a2.586 2.586 0 0 0-1.266.725c-.23.212-.482.4-.75.56a1.001 1.001 0 0 1-.486.126Zm-.6-.58a.245.245 0 0 1 .105 0h.025l.04.08a.58.58 0 0 0 .335.305.686.686 0 0 0 .5-.12c.26-.155.503-.337.726-.54a3 3 0 0 1 1.206-.736c-.46-.6-1-1.25-1.786-1.1l-.225.16c-.69.5-1.546 1.09-1.051 1.885a.146.146 0 0 0 .105.07l.02-.005Z"}),l("path",{fill:"#010101",d:"M7.157 31.614a.09.09 0 0 1-.09-.12c.037-.24.137-.466.29-.655.072-.1.136-.205.19-.315a.09.09 0 1 1 .165.075c-.058.12-.127.236-.205.345-.132.17-.217.372-.245.585a.09.09 0 0 1-.067.084.09.09 0 0 1-.038.002ZM6.647 4.78c-.5-.25-.826-.596-.536-1.146.29-.55.77-.455 1.251-.205l-.715 1.35Zm17.285-.48c.5-.25.825-.596.535-1.146-.29-.55-.77-.456-1.25-.205l.715 1.35Z"}),l("path",{fill:"#F6D2A2",d:"M27.219 17.181c-.045.946-1.001.5-1.416.21-.416-.29-.5-.045-.56-.6a9.068 9.068 0 0 1-.046-1.09 2.677 2.677 0 0 1 1.787.454c.26.19.745.79.24 1.001"}),l("path",{fill:"#010101",d:"M26.728 17.846a2.046 2.046 0 0 1-.955-.36 1.117 1.117 0 0 0-.3-.145c-.2-.07-.275-.13-.3-.5v-.25a6.516 6.516 0 0 1-.026-.856v-.12h.076a2.751 2.751 0 0 1 1.846.47 1.15 1.15 0 0 1 .5.83.412.412 0 0 1-.225.326.62.62 0 0 1-.31.55.605.605 0 0 1-.306.055Zm-1.456-2.06c-.003.25.007.5.03.75v.25c0 .305.046.315.18.365.122.04.236.097.34.17a1.307 1.307 0 0 0 1.067.31.502.502 0 0 0 .21-.45v-.06h.05a.25.25 0 0 0 .17-.205 1.002 1.002 0 0 0-.42-.67 2.552 2.552 0 0 0-1.627-.46Z"}),l("path",{fill:"#C7B199",d:"M27.218 17.181a.746.746 0 0 1-.375-.195Z"}),l("path",{fill:"#010101",d:"M27.219 17.271h-.095a.7.7 0 0 1-.35-.25.09.09 0 0 1-.007-.101.091.091 0 0 1 .152-.01.54.54 0 0 0 .275.16h.06a.101.101 0 1 1-.035.201Z"}),l("path",{fill:"#74CDDD",d:"M15.407.066c3.622 0 7.004.5 8.785 4.002 1.586 3.898 1 8.105 1.266 12.223.21 3.537.67 7.624-.97 10.906-1.717 3.442-6.05 4.297-9.601 4.182-2.792-.1-6.164-1-7.74-3.562-1.851-3.002-.976-7.444-.84-10.771.16-3.942-1.071-7.9.225-11.762C7.877 1.282 11.5.376 15.402.066"}),l("path",{fill:"#010101",d:"M15.502 31.494h-.62a13.202 13.202 0 0 1-4.358-.87 6.969 6.969 0 0 1-3.457-2.737c-1.501-2.421-1.23-5.763-1-8.715.06-.74.114-1.446.14-2.106.026-1.4-.034-2.8-.18-4.192-.211-2.502-.431-5.089.41-7.595a6.644 6.644 0 0 1 3.501-4.047C11.29.572 12.94.19 15.367 0c3.572-.025 7.094.475 8.905 4.022 1.16 2.852 1.176 5.914 1.196 8.876 0 1.11 0 2.256.08 3.377 0 .34.04.685.065 1.03.21 3.247.45 6.934-1.046 9.916-1.871 3.732-6.574 4.272-9.065 4.272ZM15.407.156c-3.768.32-7.44 1.13-8.79 5.158-.831 2.471-.61 5.038-.406 7.504.147 1.4.207 2.806.18 4.213-.025.665-.085 1.37-.14 2.116-.23 2.922-.5 6.239.966 8.605.615 1 2.596 3.337 7.67 3.502 2.196.08 7.504-.17 9.505-4.142 1.47-2.942 1.236-6.599 1.026-9.826 0-.35-.045-.695-.065-1.03a67.451 67.451 0 0 1-.08-3.353c0-2.941-.03-6.003-1.181-8.805A6.438 6.438 0 0 0 20.445.841a14.96 14.96 0 0 0-5.038-.685Z"}),l("path",{fill:"#fff",d:"M16.042 4.924c.65 3.777 6.824 2.781 5.938-1.03-.795-3.418-6.153-2.472-5.938 1.03Z"}),l("path",{fill:"#010101",d:"M18.979 7.39a3.457 3.457 0 0 1-1.13-.185 2.797 2.797 0 0 1-1.892-2.266 2.882 2.882 0 0 1 .78-2.222 3.407 3.407 0 0 1 2.002-1 3.202 3.202 0 0 1 2.031.35 2.727 2.727 0 0 1 1.296 1.806 2.643 2.643 0 0 1-.77 2.682 3.502 3.502 0 0 1-2.317.835Zm-2.847-2.476a2.626 2.626 0 0 0 1.776 2.126 3.417 3.417 0 0 0 3.277-.62 2.502 2.502 0 0 0 .716-2.502 2.672 2.672 0 0 0-3.132-2.031 2.887 2.887 0 0 0-2.637 3.027Z"}),l("path",{fill:"#fff",d:"M8.663 5.539c.84 3.287 6.103 2.441 5.908-.855-.235-3.953-6.714-3.207-5.908.855Z"}),l("path",{fill:"#010101",d:"M11.474 7.705a3.232 3.232 0 0 1-1.536-.375 2.727 2.727 0 0 1-1.355-1.776 2.757 2.757 0 0 1 .94-2.827 3.552 3.552 0 0 1 3.532-.45 2.672 2.672 0 0 1 1.601 2.402c.105 1.75-1.286 2.771-2.617 3.001a3.657 3.657 0 0 1-.565.025ZM8.763 5.52A2.732 2.732 0 0 0 12.03 7.52c1.26-.2 2.576-1.16 2.476-2.806a2.501 2.501 0 0 0-1.5-2.262 3.377 3.377 0 0 0-3.358.43 2.597 2.597 0 0 0-.885 2.637Z"}),l("path",{fill:"#fff",d:"M16.767 9.481c.049.521.049 1.046 0 1.566a1 1 0 0 1-.585.36.861.861 0 0 1-.655-.5c-.032-.59-.017-1.183.045-1.77l1.195.344Z"}),l("path",{fill:"#010101",d:"M16.237 11.483h-.025a.944.944 0 0 1-.725-.566 5.95 5.95 0 0 1 0-1.215c0-.185.03-.38.035-.57v-.15l1.35.414v.085c0 .16 0 .33.026.5.045.358.045.72 0 1.076v.025a.75.75 0 0 1-.476.34l-.155.06h-.03Zm-.58-.63a.766.766 0 0 0 .56.445l.14-.056a.6.6 0 0 0 .366-.26c.04-.332.04-.668 0-1 0-.155 0-.305-.026-.455l-1-.306c0 .155 0 .31-.03.46-.044.388-.05.778-.015 1.166l.005.005ZM10.114 5.964c.491 0 .89-.432.89-.965 0-.534-.399-.966-.89-.966-.492 0-.89.432-.89.966 0 .533.398.965.89.965Z"}),l("path",{fill:"#fff",d:"M10.519 5.464c.116 0 .21-.11.21-.245s-.094-.245-.21-.245c-.116 0-.21.11-.21.245s.094.245.21.245Z"}),l("path",{fill:"#010101",d:"M17.568 5.724c.483 0 .875-.432.875-.965 0-.533-.392-.966-.875-.966-.484 0-.876.433-.876.966 0 .533.392.965.876.965Z"}),l("path",{fill:"#fff",d:"M17.963 5.224c.114 0 .206-.11.206-.245 0-.136-.092-.245-.206-.245-.113 0-.205.11-.205.245s.092.245.205.245ZM14.266 9.406c-.39.941.215 2.822 1.27 1.436a11.12 11.12 0 0 1 .046-1.77l-1.316.334Z"}),l("path",{fill:"#010101",d:"M14.812 11.428a.5.5 0 0 1-.26-.07c-.426-.246-.691-1.251-.39-2.002v-.04l1.5-.38v.12c0 .195 0 .39-.035.575a5.71 5.71 0 0 0 0 1.181v.065a1.056 1.056 0 0 1-.815.55Zm-.496-1.947c-.215.586-.045 1.501.33 1.716.27.155.57-.115.78-.385a6.128 6.128 0 0 1 0-1.18c0-.146 0-.3.031-.45l-1.14.3Z"}),l("path",{fill:"#F6D2A2",d:"M14.38 7.595a1.146 1.146 0 0 0-.94 1.601c.5.9 1.611-.08 2.302 0 .795 0 1.45.84 2.09.15.711-.77-.304-1.5-1.1-1.856l-2.351.105Z"}),l("path",{fill:"#231F20",d:"M17.268 9.727a2 2 0 0 1-.73-.206 2.207 2.207 0 0 0-.791-.22c-.287 0-.57.062-.83.18-.561.195-1.196.416-1.557-.23a1.08 1.08 0 0 1 0-1.05 1.281 1.281 0 0 1 1.001-.686l2.406-.105c.59.25 1.266.706 1.381 1.236a.955.955 0 0 1-.88 1.08Zm-1.501-.606c.296.024.584.104.85.235.45.19.806.335 1.166-.055a.664.664 0 0 0 .205-.605c-.1-.46-.735-.88-1.256-1.1l-2.326.094a1.11 1.11 0 0 0-.85.59.906.906 0 0 0 0 .876c.285.5.795.335 1.34.15.274-.122.57-.185.87-.185Z"}),l("path",{fill:"#010101",d:"M14.266 7.56c-.055-1.25 2.336-1.41 2.617-.36.28 1.05-2.502 1.29-2.617.36Z"}))},C_t=T_t;var DF={};J(DF,{icon:()=>L_t});var Ckr=T(z());var M_t=["title","titleId"];function Tue(){return Tue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function R_t(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}var D_t=function(t){var r=t.title,n=t.titleId,o=A_t(t,M_t),i=fn("logo_google_g");return l("svg",Tue({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("defs",null,l("path",{id:i("a"),d:"M15.319 3.278c0-1.131-.102-2.22-.29-3.264H0v6.172h8.587c-.37 1.995-1.494 3.685-3.184 4.816v4.004h5.157c3.017-2.778 4.758-6.869 4.758-11.728z"}),l("path",{id:i("c"),d:"M14.343 12.956c4.308 0 7.92-1.43 10.56-3.866l-5.157-4.004c-1.429.958-3.256 1.523-5.403 1.523-4.156 0-7.674-2.806-8.928-6.578H.084v4.134c2.625 5.215 8.021 8.79 14.259 8.79z"}),l("path",{id:i("e"),d:"M7.028 10.25a9.59 9.59 0 0 1-.5-3.032 9.59 9.59 0 0 1 .5-3.032V.052h-5.33A15.95 15.95 0 0 0 0 7.218c0 2.575.617 5.012 1.697 7.166l5.331-4.134z"}),l("path",{id:i("g"),d:"M14.343 6.392c2.342 0 4.446.805 6.1 2.386l4.576-4.576C22.256 1.627 18.644.046 14.343.046 8.105.046 2.709 3.622.083 8.836l5.332 4.134c1.254-3.77 4.772-6.578 8.928-6.578z"})),l("g",{fill:"none",fillRule:"evenodd"},l("g",{transform:"translate(15.955 13.087)"},l("mask",{id:i("b"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("a"))})),l("path",{fill:"#4285F4",fillRule:"nonzero",d:"M.001 15.006h15.318V.014H.001z",mask:"url(#".concat(i("b"),")")})),l("g",{transform:"translate(1.613 19.003)"},l("mask",{id:i("d"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("c"))})),l("path",{fill:"#34A853",fillRule:"nonzero",d:"M.084 12.956h24.819V.031H.084z",mask:"url(#".concat(i("d"),")")})),l("g",{transform:"translate(0 8.784)"},l("mask",{id:i("f"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("e"))})),l("path",{fill:"#FBBC04",fillRule:"nonzero",d:"M0 14.384h7.028V.052H0z",mask:"url(#".concat(i("f"),")")})),l("g",{transform:"translate(1.613)"},l("mask",{id:i("h"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("g"))})),l("path",{fill:"#EA4335",fillRule:"nonzero",d:"M.084 12.97h24.935V.046H.084z",mask:"url(#".concat(i("h"),")")}))))},L_t=D_t;var LF={};J(LF,{icon:()=>W_t});var Rkr=T(z());var N_t=["title","titleId"];function Cue(){return Cue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function B_t(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}var z_t=function(t){var r=t.title,n=t.titleId,o=F_t(t,N_t),i=fn("logo_haproxy");return l("svg",Cue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{clipPath:"url(#".concat(i("a"),")")},l("path",{stroke:"#05486D",strokeMiterlimit:10,strokeWidth:.12,d:"m16.05 13.237-3.11-3.612"}),l("path",{stroke:"#05486D",strokeMiterlimit:10,strokeWidth:.06,d:"m6.117 10.528 2.509 3.512"}),l("path",{stroke:"#05486D",strokeMiterlimit:10,strokeWidth:.12,d:"m16.05 13.237 3.11-3.612M19.863 17.15l3.712-3.11M19.863 17.15l3.712 3.311M19.16 24.575l-3.11-3.511M12.94 24.575l3.11-3.511M8.625 20.26l3.512-3.11M8.625 14.04l3.512 3.11M16.05 13.238l-7.425.802M16.05 13.238l7.525.802M19.863 17.15l-.702-7.525M19.863 17.15l-.702 7.425M23.575 20.461l-7.525.602M8.625 20.261l7.425.803M12.94 24.575l-.803-7.425M12.94 9.625l-.803 7.525"}),l("path",{stroke:"#05486D",strokeMiterlimit:10,strokeWidth:.06,d:"m5.114 15.043 3.511-1.003M9.328 7.117l3.612 2.509M13.743 5.512l-.803 4.113M13.743 5.512l5.418 4.113M18.358 5.512l.803 4.113M22.773 7.117 19.16 9.626M25.983 10.528l-6.822-.903M23.575 14.04l2.408-3.512M23.575 14.04l3.412 1.003M23.575 14.04l3.412 5.217M18.358 5.512 12.94 9.625M23.576 14.04l-.803-6.923M23.575 20.462l3.412-1.204M23.575 20.462l3.412-5.418M23.575 20.461l2.408 3.312M23.576 20.461l-.803 6.723M19.16 24.575l3.613 2.609M19.16 24.575l6.823-.802M19.16 24.575l-.802 4.214M19.16 24.575l-5.417 4.214M12.94 24.575l.803 4.214M12.94 24.575l5.418 4.214M12.94 24.575l-3.612 2.609M12.94 24.575l-6.823-.802M8.626 20.261l-2.509 3.512M8.625 20.261l.703 6.923M8.625 20.26l-3.511-1.002M8.625 14.04l-3.511 5.217M8.625 20.26l-3.511-5.217M9.328 7.117l-.703 6.923M6.117 10.528l6.823-.903"}),l("path",{stroke:"#083D5F",strokeMiterlimit:10,strokeWidth:.05,d:"M9.327 7.117 6.72 5.813M9.328 7.117l-.201-2.91M13.742 5.512 9.127 4.207M13.742 5.512l-2.006-2.509M13.743 5.512l.802-2.91M9.328 7.117l2.408-4.114M18.358 5.512l-3.813-2.91M18.358 5.512l-.803-3.01M13.743 5.512l3.812-3.01M18.358 5.512l2.007-2.509M22.773 7.117l-2.408-4.114M22.773 7.117l.301-2.91M18.358 5.512l4.716-1.305M22.773 7.117l2.709-1.405M22.773 7.117l4.716.703M25.983 10.528l1.505-2.709M25.984 10.528l-.502-4.816M25.983 10.528l3.11-.3M25.983 10.528l4.214 2.308M26.987 15.044l2.107-4.817M26.987 15.043l3.21-2.207M26.987 15.043l3.612.703M26.987 19.258l3.612-3.512M26.987 19.258l3.712-.703M26.987 15.043l3.712 3.512M26.987 19.258l3.11 2.107M25.983 23.773l4.114-2.409M25.983 23.773l3.11.3M26.987 19.258l2.107 4.816M25.983 23.773l1.505 2.709M25.984 23.773l-.502 4.715M25.482 28.488l-2.71-1.304M22.773 27.184l.2 2.91M22.773 27.184l4.716-.703M22.773 27.184l-2.408 4.114M18.358 28.79l2.007 2.508M18.358 28.79l4.615 1.304M18.358 28.79l-.803 3.01M18.358 28.79l-3.813 3.01M13.743 28.79l.802 3.01M13.743 28.79l3.812 3.01M13.742 28.79l-2.006 2.508M9.328 27.184l2.408 4.114M13.742 28.79l-4.615 1.404M9.328 27.184l-.201 3.01M9.328 27.184l-2.71 1.404M6.117 23.773l.502 4.816M9.328 27.184l-4.716-.703M6.117 23.773l-1.505 2.709M6.117 23.773l-3.11.3M6.117 23.773l-4.214-2.409M5.114 19.258l-3.21 2.107M5.114 19.258 1.4 18.555M5.114 19.258l-2.107 4.816M5.114 15.043 1.4 18.555M5.114 19.258 1.4 15.746M5.114 15.043l-3.11-2.106M5.114 15.043l-3.713.703M5.114 15.044l-2.007-4.817M6.117 10.528l-3.01-.3M6.117 10.528l-4.114 2.408M6.117 10.528 4.712 7.92M6.117 10.528l.602-4.715M9.328 7.117l-4.616.803"}),l("path",{fill:"#006DA8",d:"M13.943 15.244h-3.612v3.592h3.612v-3.592ZM17.756 11.331h-3.612v3.592h3.612v-3.592ZM17.756 19.157h-3.612v3.592h3.612v-3.592ZM21.669 15.244h-3.612v3.592h3.612v-3.592Z"}),l("path",{fill:"#2F77BC",d:"M20.365 8.421h-2.509V10.9h2.509V8.42ZM14.144 8.321h-2.509v2.478h2.509V8.321ZM9.83 12.836H7.32v2.478H9.83v-2.478ZM9.83 18.956H7.32v2.479H9.83v-2.479ZM24.679 18.956H22.17v2.479h2.509v-2.479ZM24.679 12.736H22.17v2.478h2.509v-2.478Z"}),l("path",{fill:"#139BD7",d:"M6.92 9.625H5.314v1.676H6.92V9.625ZM10.13 6.214H8.526v1.675h1.606V6.214ZM14.445 4.609h-1.606v1.675h1.606V4.61ZM5.916 14.14H4.311v1.676h1.605V14.14ZM26.786 9.826H25.08v1.646h1.706V9.826ZM23.575 6.415H21.87V8.06h1.705V6.415ZM19.26 4.81h-1.705v1.645h1.706V4.809ZM27.689 14.441h-1.605v1.646h1.605V14.44Z"}),l("path",{fill:"#2F77BC",d:"M14.144 23.27h-2.509v2.479h2.509v-2.478ZM20.264 23.27h-2.508v2.479h2.508v-2.478Z"}),l("path",{fill:"#139BD7",d:"M26.685 22.77H25.08v1.675h1.605v-1.676ZM23.375 26.08H21.77v1.676h1.605V26.08ZM19.06 27.686h-1.605v1.675h1.605v-1.675ZM27.589 18.254h-1.606v1.676h1.606v-1.676ZM6.92 22.97H5.214v1.646H6.92V22.97ZM10.03 26.381H8.325v1.646h1.705V26.38ZM14.445 27.987h-1.706v1.645h1.706v-1.645ZM5.816 18.355H4.21V20h1.606v-1.645Z"}),l("path",{fill:"#03A9DA",d:"M7.12 5.311h-.903v.933h.903v-.933ZM1.903 15.244H1v.933h.903v-.933ZM25.782 5.21h-.903v.934h.903V5.21ZM2.505 12.335h-.903v.933h.903v-.934ZM12.137 2.502h-.903v.933h.903v-.933ZM3.508 9.726h-.903v.933h.903v-.933ZM5.113 7.318H4.21v.933h.903v-.933ZM9.629 3.806h-.903v.903h.903v-.903ZM15.047 2.1h-.903v.903h.903V2.1ZM23.374 3.605h-.903v.933h.903v-.933ZM29.295 9.726h-.903v.933h.903v-.933ZM30.498 12.335h-.903v.933h.903v-.934ZM27.69 7.318h-.904v.933h.903v-.933ZM30.9 15.144h-.903v.933h.903v-.933ZM17.856 2h-.903v.933h.903V2ZM20.665 2.602h-.903v.933h.903v-.933Z"}),l("path",{fill:"#03A9DA",d:"M7.12 5.311h-.903v.933h.903v-.933ZM1.903 15.244H1v.933h.903v-.933ZM25.782 5.21h-.903v.934h.903V5.21ZM2.505 12.335h-.903v.933h.903v-.934ZM12.137 2.502h-.903v.933h.903v-.933ZM3.508 9.726h-.903v.933h.903v-.933ZM5.113 7.318H4.21v.933h.903v-.933ZM9.629 3.806h-.903v.903h.903v-.903ZM15.047 2.1h-.903v.903h.903V2.1ZM23.374 3.605h-.903v.933h.903v-.933ZM29.295 9.726h-.903v.933h.903v-.933ZM30.498 12.335h-.903v.933h.903v-.934ZM27.69 7.318h-.904v.933h.903v-.933ZM30.9 15.144h-.903v.933h.903v-.933ZM17.856 2h-.903v.933h.903V2ZM20.665 2.602h-.903v.933h.903v-.933ZM25.682 27.886h-.903v.933h.903v-.933ZM31 17.953h-.903v.933H31v-.933ZM7.12 27.987h-.903v.933h.903v-.933ZM30.398 20.763h-.903v.933h.903v-.933ZM20.665 30.596h-.903v.933h.903v-.933ZM29.295 23.371h-.903v.933h.903v-.933ZM27.69 25.78h-.904v.932h.903v-.933ZM23.274 29.793h-.903v.902h.903v-.902ZM17.756 31.498h-.903v.903h.903v-.903ZM9.428 29.492h-.903v.933h.903v-.933ZM3.508 23.472h-.903v.933h.903v-.933ZM2.304 20.863h-.903v.933h.903v-.933ZM5.013 25.88H4.11v.933h.903v-.933ZM1.903 17.953H1v.933h.903v-.933ZM14.947 31.498h-.903v.933h.902v-.933ZM12.137 30.596h-.903v.933h.903v-.933Z"})),l("defs",null,l("clipPath",{id:i("a")},l("path",{fill:"#fff",d:"M0 0h32v32H0V0Z"}))))},W_t=z_t;var NF={};J(NF,{icon:()=>q_t});var Nkr=T(z());var H_t=["title","titleId"];function Mue(){return Mue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $_t(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}var Z_t=function(t){var r=t.title,n=t.titleId,o=V_t(t,H_t),i=fn("logo_ibm");return l("svg",Mue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("defs",null,l("linearGradient",{id:i("a"),x1:"8.005%",x2:"53.33%",y1:"79.323%",y2:"79.324%"},l("stop",{offset:"0%",stopColor:"#3BDADE",stopOpacity:0}),l("stop",{offset:"30.476%",stopColor:"#36CEE1",stopOpacity:.383}),l("stop",{offset:"100%",stopColor:"#21A2EF"})),l("linearGradient",{id:i("b"),x1:"19.496%",x2:"71.309%",y1:"83.344%",y2:"17.638%"},l("stop",{offset:"0%",stopColor:"#207FFA"}),l("stop",{offset:"100%",stopColor:"#6EAFF1",stopOpacity:0})),l("linearGradient",{id:i("c"),x1:"21.909%",x2:"21.909%",y1:"96.314%",y2:"29.454%"},l("stop",{offset:"0%",stopColor:"#42C1E6",stopOpacity:0}),l("stop",{offset:"57.076%",stopColor:"#6FB9EF"}),l("stop",{offset:"86.716%",stopColor:"#60CBE7"}),l("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),l("linearGradient",{id:i("d"),x1:"96.205%",x2:"-1.172%",y1:"12.667%",y2:"-22.252%"},l("stop",{offset:"0%",stopColor:"#6FB9EF",stopOpacity:0}),l("stop",{offset:"22.427%",stopColor:"#38D2E0"}),l("stop",{offset:"91.203%",stopColor:"#6ABFEC"}),l("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),l("linearGradient",{id:i("e"),x1:"9.408%",x2:"80.589%",y1:"87.764%",y2:"83.138%"},l("stop",{offset:"0%",stopColor:"#126CFD"}),l("stop",{offset:"100%",stopColor:"#21A1EF"}))),l("g",{fill:"none",fillRule:"evenodd"},l("path",{fill:"#38D2E0",d:"M4.262 13.122a.604.604 0 0 1-.3-.08l-2.844-1.625a.617.617 0 0 1-.295-.734.608.608 0 0 1 .868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 0 1-.533.32Zm4.914-4.864a.603.603 0 0 1-.522-.298L7.012 5.144a.615.615 0 0 1 .115-.782.606.606 0 0 1 .91.157l1.64 2.813a.617.617 0 0 1-.158.819c-.1.07-.22.107-.343.107Zm6.107-2.416V2.635a.624.624 0 0 1 .575-.634.605.605 0 0 1 .443.164.593.593 0 0 1 .186.431v3.285a.593.593 0 0 1-.186.43.605.605 0 0 1-.443.165.624.624 0 0 1-.575-.634Zm7.312 2.416a.604.604 0 0 1-.343-.107.617.617 0 0 1-.159-.82l1.64-2.812a.602.602 0 0 1 .911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 0 1-.522.298Zm4.914 4.864a.602.602 0 0 1-.534-.319.616.616 0 0 1 .262-.81l2.818-1.611a.626.626 0 0 1 .783.112.592.592 0 0 1-.156.906l-2.873 1.643a.604.604 0 0 1-.3.08Z"}),l("path",{fill:"url(#".concat(i("a"),")"),d:"m16.536 19.645-1.204-.009c.026-3.377 2.146-6.391 5.337-7.585a8.308 8.308 0 0 1 9.068 2.197l-.897.795a7.097 7.097 0 0 0-7.745-1.876c-2.726 1.019-4.537 3.593-4.559 6.478Z",transform:"translate(0 2)"}),l("path",{fill:"url(#".concat(i("b"),")"),d:"M.029 20.909c.022-3.354 2.475-6.208 5.815-6.764l.201 1.176c-2.764.46-4.794 2.82-4.812 5.596L.029 20.91Z",transform:"translate(0 2)"}),l("path",{fill:"url(#".concat(i("c"),")"),d:"M8.246 24.737a10.625 10.625 0 0 1 0-15.131c4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 0 1 1.384 1.678l-1.004.657a9.517 9.517 0 0 0-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.442 9.442 0 0 0 0 13.445l-.851.843Z",transform:"translate(0 2)"}),l("path",{fill:"url(#".concat(i("d"),")"),d:"M5.836 13.234c.404-1.332 1.33-2.56 2.41-3.628 4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 0 1 1.384 1.678l-1.004.657a9.517 9.517 0 0 0-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.474 9.474 0 0 0-2.074 3.06c-1.452 3.45-2.358 3.593-1.187-.275Z",transform:"translate(0 2)"}),l("path",{fill:"url(#".concat(i("e"),")"),d:"M23.524 27.87H6.96a7.012 7.012 0 0 1-4.922-2.059A6.876 6.876 0 0 1 .029 20.91l1.204.009a5.69 5.69 0 0 0 1.66 4.055 5.802 5.802 0 0 0 4.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 0 0-1.18-7.505l.897-.795a8.112 8.112 0 0 1 1.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838h-.063Z",transform:"translate(0 2)"})))},q_t=Z_t;var FF={};J(FF,{icon:()=>K_t});var zkr=T(z());var U_t=["title","titleId"];function Aue(){return Aue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function J_t(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}var X_t=function(t){var r=t.title,n=t.titleId,o=G_t(t,U_t);return l("svg",Aue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m.047 22.909 1.186.009a5.69 5.69 0 0 0 1.66 4.055 5.802 5.802 0 0 0 4.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 0 0-1.18-7.505l.897-.795a8.112 8.112 0 0 1 1.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838H6.96a7.012 7.012 0 0 1-4.922-2.06A6.876 6.876 0 0 1 .029 22.91h.018-.018c.017-2.71 1.62-5.091 3.997-6.2.114-.054.32.29.619 1.03a5.71 5.71 0 0 0-3.412 5.18l-1.186-.01Zm4.215-9.787a.604.604 0 0 1-.3-.08l-2.844-1.625a.617.617 0 0 1-.295-.734.608.608 0 0 1 .868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 0 1-.533.32Zm4.914-4.864a.603.603 0 0 1-.522-.298L7.012 5.144a.615.615 0 0 1 .115-.782.606.606 0 0 1 .91.157l1.64 2.813a.617.617 0 0 1-.158.819c-.1.07-.22.107-.343.107Zm6.107-2.416V2.635a.624.624 0 0 1 .575-.634.605.605 0 0 1 .443.164.593.593 0 0 1 .186.431v3.285a.593.593 0 0 1-.186.43.605.605 0 0 1-.443.165.624.624 0 0 1-.575-.634Zm7.312 2.416a.604.604 0 0 1-.343-.107.617.617 0 0 1-.159-.82l1.64-2.812a.602.602 0 0 1 .911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 0 1-.522.298Zm4.914 4.864a.602.602 0 0 1-.534-.319.616.616 0 0 1 .262-.81l2.818-1.611a.626.626 0 0 1 .783.112.592.592 0 0 1-.156.906l-2.873 1.643a.604.604 0 0 1-.3.08ZM16.366 19.78H16a2.322 2.322 0 0 1-.302 0c-.09-.011-.152.05-.086-.196a8.204 8.204 0 0 1 5.057-5.533 8.308 8.308 0 0 1 9.068 2.197l-.897.795a7.097 7.097 0 0 0-7.745-1.876 7.009 7.009 0 0 0-4.288 4.613c-.115.399-.115.399 0 0h-.44ZM6.154 23.826a10.626 10.626 0 0 1 2.092-12.22c4.219-4.178 11.06-4.178 15.279 0l-.851.843c-3.75-3.713-9.828-3.713-13.577 0A9.442 9.442 0 0 0 7.264 23.36a6.99 6.99 0 0 0-.418.172l-.212.094-.162.077-.094.03-.09.039c.648-.282.965-.42.95-.412-.026.015-1.073.489-1.084.466Z"}))},K_t=X_t;var BF={};J(BF,{icon:()=>rSt});var Hkr=T(z());var Y_t=["title","titleId"];function Rue(){return Rue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function eSt(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}var tSt=function(t){var r=t.title,n=t.titleId,o=Q_t(t,Y_t);return l("svg",Rue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M21.565 17.623c-1.173 0-2.225.52-2.945 1.337l-1.845-1.306c.196-.54.309-1.118.309-1.724 0-.596-.109-1.165-.298-1.696l1.84-1.293a3.914 3.914 0 0 0 2.939 1.331 3.93 3.93 0 0 0 3.926-3.926 3.93 3.93 0 0 0-3.926-3.926 3.93 3.93 0 0 0-3.926 3.926c0 .387.058.761.163 1.115l-1.842 1.293a5.068 5.068 0 0 0-3.14-1.825V8.71a3.932 3.932 0 0 0 3.119-3.842A3.93 3.93 0 0 0 12.012.941a3.93 3.93 0 0 0-3.926 3.926 3.93 3.93 0 0 0 3.048 3.824v2.249a5.075 5.075 0 0 0-4.193 4.99 5.075 5.075 0 0 0 4.229 4.995V23.3a3.931 3.931 0 0 0-3.084 3.833 3.93 3.93 0 0 0 3.926 3.926 3.93 3.93 0 0 0 3.927-3.926 3.931 3.931 0 0 0-3.084-3.833v-2.375a5.07 5.07 0 0 0 3.087-1.795l1.857 1.314c-.103.351-.16.721-.16 1.105a3.93 3.93 0 0 0 3.926 3.926 3.93 3.93 0 0 0 3.926-3.926 3.93 3.93 0 0 0-3.926-3.926Zm0-9.18c1.05 0 1.903.853 1.903 1.903s-.854 1.903-1.903 1.903a1.906 1.906 0 0 1-1.904-1.903c0-1.05.854-1.904 1.904-1.904ZM10.109 4.866c0-1.05.854-1.903 1.903-1.903 1.05 0 1.904.854 1.904 1.903 0 1.05-.854 1.904-1.904 1.904a1.906 1.906 0 0 1-1.903-1.904Zm3.807 22.266c0 1.05-.854 1.903-1.904 1.903a1.906 1.906 0 0 1-1.903-1.903c0-1.05.854-1.904 1.903-1.904 1.05 0 1.904.854 1.904 1.904Zm-1.904-8.548a2.658 2.658 0 0 1-2.655-2.655 2.658 2.658 0 0 1 2.655-2.655 2.658 2.658 0 0 1 2.655 2.655 2.658 2.658 0 0 1-2.655 2.655Zm9.553 4.867a1.906 1.906 0 0 1-1.904-1.903c0-1.05.854-1.904 1.904-1.904 1.05 0 1.903.854 1.903 1.904 0 1.05-.854 1.903-1.903 1.903Z"}))},rSt=tSt;var zF={};J(zF,{icon:()=>sSt});var $kr=T(z());var nSt=["title","titleId"];function Due(){return Due=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function iSt(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}var aSt=function(t){var r=t.title,n=t.titleId,o=oSt(t,nSt);return l("svg",Due({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{fill:"#F04E98",d:"M4 0v28.789L28.935.017z"}),l("path",{d:"M4 12v16.789l11.906-13.738A24.721 24.721 0 0 0 4 12",className:"euiIcon__fillNegative"}),l("path",{fill:"#00BFB3",d:"M18.479 16.664 6.268 30.754l-1.074 1.237h23.192c-1.252-6.292-4.883-11.719-9.907-15.327"})))},sSt=aSt;var WF={};J(WF,{icon:()=>dSt});var qkr=T(z());var lSt=["title","titleId"];function Lue(){return Lue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cSt(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}var pSt=function(t){var r=t.title,n=t.titleId,o=uSt(t,lSt);return l("svg",Lue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#326CE5",d:"M15.89.003a2.14 2.14 0 0 1 1.03.206l11.127 5.304a2.11 2.11 0 0 1 1.15 1.429l2.75 11.921a2.09 2.09 0 0 1-.412 1.783l-7.697 9.56c-.404.5-1.016.792-1.663.791L9.827 31c-.648 0-1.26-.292-1.664-.793l-7.7-9.558a2.107 2.107 0 0 1-.41-1.783L2.798 6.945a2.11 2.11 0 0 1 1.151-1.43L15.074.21c.255-.122.532-.192.815-.206zM16 4.06c-.368 0-.667.33-.667.738l.002.019c0 .055-.003.122-.002.17.01.236.06.416.091.632.057.464.103.849.074 1.206-.028.135-.127.258-.216.344l-.015.281a8.569 8.569 0 0 0-5.555 2.666 9.98 9.98 0 0 1-.24-.17c-.12.016-.24.053-.396-.038-.298-.2-.57-.477-.898-.81-.15-.16-.26-.31-.438-.464-.04-.035-.103-.082-.148-.118a.793.793 0 0 0-.464-.175.642.642 0 0 0-.53.234c-.23.288-.156.726.163.98l.01.008c.044.035.098.08.138.11.19.14.363.212.552.323.398.246.729.45.99.695.103.108.12.3.134.383l.214.19a8.592 8.592 0 0 0-1.36 5.998l-.278.08c-.074.096-.177.245-.286.29-.343.107-.728.147-1.194.195-.218.018-.407.008-.639.051-.05.01-.122.029-.177.042l-.006.001-.01.003c-.393.095-.645.455-.564.81.082.355.465.57.86.485l.01-.001.013-.004c.055-.012.124-.026.172-.039.228-.06.393-.15.597-.228.44-.158.806-.29 1.161-.341.149-.012.305.091.383.135l.29-.05a8.654 8.654 0 0 0 3.84 4.787l-.12.29c.043.113.091.265.059.376-.13.334-.35.688-.603 1.081-.122.182-.247.324-.357.532-.026.05-.06.126-.086.179-.17.365-.045.786.284.944.33.16.741-.008.919-.375l.001-.001v-.002c.025-.051.061-.12.083-.169.094-.215.125-.4.192-.609.176-.442.273-.905.515-1.194.067-.08.175-.11.287-.14l.151-.273a8.616 8.616 0 0 0 6.145.016l.142.256c.114.037.239.056.34.206.182.31.306.675.457 1.118.066.208.1.393.194.61.021.048.057.117.082.17.177.367.59.535.92.376.33-.158.455-.58.284-.945-.026-.052-.06-.129-.087-.179-.11-.208-.235-.348-.357-.53-.252-.393-.461-.72-.59-1.055-.055-.173.009-.28.05-.392-.025-.029-.079-.192-.11-.268a8.654 8.654 0 0 0 3.838-4.822c.086.014.236.04.285.05.1-.066.192-.152.373-.138.355.052.72.183 1.16.341.205.078.37.17.598.23.048.013.117.025.172.037l.013.004.01.002c.395.085.778-.131.86-.486.08-.355-.171-.715-.564-.81-.057-.013-.138-.035-.193-.045-.232-.044-.42-.033-.64-.051-.465-.049-.85-.089-1.193-.196-.14-.054-.239-.22-.287-.289l-.27-.078a8.572 8.572 0 0 0-.139-3.104 8.599 8.599 0 0 0-1.247-2.88c.068-.062.199-.177.236-.21.01-.12.001-.245.125-.377.262-.246.592-.45.99-.695.19-.11.364-.182.554-.322.043-.032.101-.082.146-.118.32-.255.393-.693.164-.98-.23-.287-.674-.314-.993-.06-.046.036-.107.083-.148.118-.179.153-.29.305-.44.464-.328.333-.6.611-.898.812-.129.075-.318.049-.404.044l-.253.18a8.732 8.732 0 0 0-5.528-2.666 16.036 16.036 0 0 1-.015-.297c-.087-.083-.192-.154-.218-.333-.029-.357.02-.742.076-1.206.03-.216.082-.396.09-.632.003-.053 0-.13 0-.189 0-.408-.299-.738-.667-.738zm-.834 5.156-.198 3.488-.014.007a.587.587 0 0 1-.932.449l-.006.002-2.864-2.027a6.862 6.862 0 0 1 4.014-1.919zm1.668 0a6.922 6.922 0 0 1 3.99 1.92l-2.846 2.015-.01-.004a.588.588 0 0 1-.933-.448l-.003-.001-.198-3.482zm-6.72 3.222 2.614 2.335-.003.014a.585.585 0 0 1-.23 1.008l-.003.01-3.352.967a6.838 6.838 0 0 1 .973-4.334zm11.753.001c.388.63.683 1.331.858 2.093a6.91 6.91 0 0 1 .145 2.229l-3.37-.97-.002-.013a.586.586 0 0 1-.23-1.008l-.002-.007 2.6-2.324zm-6.404 2.515h1.071l.666.83-.239 1.038-.962.461-.964-.463-.24-1.037.668-.83zm3.435 2.844a.585.585 0 0 1 .135.01l.005-.008 3.468.586a6.858 6.858 0 0 1-2.776 3.481l-1.346-3.246.004-.005a.586.586 0 0 1 .51-.818zm-5.824.014a.587.587 0 0 1 .53.817l.01.012-1.331 3.214a6.886 6.886 0 0 1-2.767-3.458l3.437-.582.006.007a.595.595 0 0 1 .115-.01zm2.904 1.407a.582.582 0 0 1 .275.059.583.583 0 0 1 .263.25h.013l1.694 3.057c-.22.073-.446.136-.677.189a6.896 6.896 0 0 1-3.758-.194l1.69-3.05h.003a.588.588 0 0 1 .497-.31z"}))},dSt=pSt;var HF={};J(HF,{icon:()=>gSt});var Gkr=T(z());var fSt=["title","titleId"];function Nue(){return Nue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mSt(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}var vSt=function(t){var r=t.title,n=t.titleId,o=hSt(t,fSt);return l("svg",Nue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#0080D5",d:"M2 10v13a9 9 0 0 1 9 9h13c0-12.15-9.85-22-22-22"}),l("path",{d:"M14 13.565V32h10c0-7.722-3.981-14.51-10-18.436",className:"euiIcon__fillNegative"}),l("path",{fill:"#00BFB3",d:"M14 0v10.226C21.666 14.468 26.869 22.636 26.869 32H30V16c0-8.837-7.163-16-16-16"}))},gSt=vSt;var VF={};J(VF,{icon:()=>xSt});var Xkr=T(z());var ySt=["title","titleId"];function Fue(){return Fue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wSt(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}var OSt=function(t){var r=t.title,n=t.titleId,o=bSt(t,ySt);return l("svg",Fue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#3EBEB0",d:"M19 32h11V20H19z"}),l("path",{fill:"#FEC514",d:"M4 0H3v20h13v-8C16 5.373 10.627 0 4 0"}),l("path",{d:"M3 20c0 6.627 5.373 12 12 12h1V20H3Z",className:"euiIcon__fillNegative"}))},xSt=OSt;var $F={};J($F,{icon:()=>PSt});var Ykr=T(z());var _St=["title","titleId"];function Bue(){return Bue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ISt(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}var ESt=function(t){var r=t.title,n=t.titleId,o=SSt(t,_St);return l("svg",Bue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#22A7F3",d:"M25.5 9.5c0 6.65-9.5 11.425-9.5 11.425S6.5 16.15 6.5 9.5A9.5 9.5 0 0 1 16 0a9.5 9.5 0 0 1 9.5 9.5"}),l("path",{d:"M16 20.925s4.326-2.183 7.141-5.645l-2.505-1.878a7.725 7.725 0 0 0-9.272 0L8.859 15.28C11.674 18.742 16 20.925 16 20.925",className:"euiIcon__fillNegative"}),l("path",{fill:"#FA744E",d:"M25.53 17.073a21.124 21.124 0 0 1-2.834 2.916c-2.62 2.235-5.239 3.561-5.349 3.616L16 24.282l-1.348-.677c-.109-.055-2.728-1.381-5.349-3.616a21.182 21.182 0 0 1-2.834-2.916L0 21.925l11.364 8.523a7.724 7.724 0 0 0 9.271 0L32 21.925l-6.47-4.852Z"}))},PSt=ESt;var ZF={};J(ZF,{icon:()=>MSt});var ejr=T(z());var kSt=["title","titleId"];function zue(){return zue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function TSt(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}var CSt=function(t){var r=t.title,n=t.titleId,o=jSt(t,kSt),i=fn("logo_memcached");return l("svg",zue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("defs",null,l("radialGradient",{id:i("c"),cx:"41.406%",cy:"42.708%",r:"0%",fx:"41.406%",fy:"42.708%"},l("stop",{offset:"0%",stopColor:"#DB7C7C"}),l("stop",{offset:"100%",stopColor:"#C83737"})),l("radialGradient",{id:i("d"),cx:"44.271%",cy:"42.708%",r:"0%",fx:"44.271%",fy:"42.708%"},l("stop",{offset:"0%",stopColor:"#DB7C7C"}),l("stop",{offset:"100%",stopColor:"#C83737"})),l("linearGradient",{id:i("a"),x1:"50%",x2:"50%",y1:"100%",y2:"0%"},l("stop",{offset:"0%",stopColor:"#574C4A"}),l("stop",{offset:"100%",stopColor:"#80716D"})),l("linearGradient",{id:i("b"),x1:"88.778%",x2:"30.149%",y1:"98.342%",y2:"-8.68%"},l("stop",{offset:"0%",stopColor:"#268D83"}),l("stop",{offset:"100%",stopColor:"#2EA19E"}))),l("g",{fill:"none"},l("path",{fill:"url(#".concat(i("a"),")"),d:"M0 21.567V10.352C0 1.294 1.293 0 10.342 0h11.236c9.049 0 10.341 1.294 10.341 10.352v11.215c0 9.059-1.292 10.352-10.341 10.352H10.342C1.292 31.92 0 30.626 0 21.567Z"}),l("path",{fill:"url(#".concat(i("b"),")"),d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27h4.904c-.466-2.483-2.14-13.824-.748-13.861.746.118 4.156 9.621 4.156 9.621s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.41-9.503 4.157-9.621c1.392.037-.282 11.378-.748 13.86h4.904s.82-9.31-.748-19.253h-4.54c-.865.01-4.153 5.777-4.531 5.777-.378 0-3.666-5.767-4.53-5.777H6.889Z"}),l("path",{fill:"url(#".concat(i("c"),")"),d:"M14.993 24.109a1.16 1.16 0 1 1-2.322 0 1.16 1.16 0 0 1 2.322 0Z"}),l("path",{fill:"url(#".concat(i("d"),")"),d:"M19.249 24.109a1.16 1.16 0 1 1-2.322 0 1.16 1.16 0 0 1 2.322 0Z"}),l("path",{fill:"#000",d:"M24.8 6.345c.707 4.79.873 9.388.86 12.813-.013 3.503-.214 5.78-.214 5.78h-4.128l-.443.332h4.904s.82-9.31-.748-19.254l-.232.329Zm-12.996-.121c1.288 1.433 3.516 5.237 3.823 5.237-.817-1.045-2.823-4.378-3.823-5.237Zm-1.84 4.852c-1.392.038.282 11.379.749 13.861H6.43l-.29.333h4.904c-.464-2.47-2.123-13.71-.769-13.861-.126-.19-.235-.32-.311-.333Zm11.326 0c-.746.119-4.156 9.622-4.156 9.622s-.751-.094-1.507-.094c-.447 0-.832.028-1.092.052l-.082.374s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.385-9.44 4.146-9.621c-.082-.208-.183-.33-.322-.333Z",opacity:.1}),l("path",{fill:"#FFF",d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27l.289-.325c-.148-2.197-.543-10.14.791-18.597h4.541c.096.002.225.08.374.208-.297-.33-.544-.538-.706-.54H6.889Zm13.601 0c-.864.01-4.152 5.777-4.53 5.777.154.197.279.333.332.333.378 0 3.666-5.767 4.53-5.777h4.008l.2-.333h-4.54Zm-9.881 5.725c1.103 1.657 3.844 9.29 3.844 9.29l.08-.373c-.676-1.856-3.256-8.814-3.903-8.917h-.021Zm11.346 0c.74 1.887-.66 11.295-1.08 13.529l.444-.348c.568-3.331 1.936-13.146.636-13.18Z",opacity:.3})))},MSt=CSt;var qF={};J(qF,{icon:()=>NSt});var njr=T(z());var ASt=["title","titleId"];function Wue(){return Wue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function DSt(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}var LSt=function(t){var r=t.title,n=t.titleId,o=RSt(t,ASt);return l("svg",Wue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{fill:"#F04E98",d:"M2 32h28V20l-6.465-6.465a5 5 0 0 0-7.07 0L2 28v4Z"}),l("path",{d:"m16.465 13.535-3.536 3.536a9.965 9.965 0 0 0 7.07 2.93 9.965 9.965 0 0 0 7.072-2.93l-3.536-3.536a5 5 0 0 0-7.07 0",className:"euiIcon__fillNegative"}),l("path",{fill:"#FEC514",d:"M14.343 11.414A7.951 7.951 0 0 1 20 9.071c2.137 0 4.146.832 5.657 2.343l3.207 3.207A9.955 9.955 0 0 0 30 10.001c0-5.524-4.477-10-10-10-5.522 0-10 4.476-10 10 0 1.667.414 3.237 1.137 4.62l3.206-3.207Z"})))},NSt=LSt;var UF={};J(UF,{icon:()=>HSt});var ijr=T(z());var FSt=["title","titleId"];function Hue(){return Hue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zSt(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}var WSt=function(t){var r=t.title,n=t.titleId,o=BSt(t,FSt);return l("svg",Hue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#FFF",d:"m16.844 31.847-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345Z"}),l("path",{fill:"#A6A385",d:"m16.844 31.847-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345Z"}),l("path",{fill:"#FFF",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),l("path",{fill:"#499D4A",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),l("path",{fill:"#FFF",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473Z"}),l("path",{fill:"#58AA50",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473Z"})))},HSt=WSt;var GF={};J(GF,{icon:()=>USt});var sjr=T(z());var VSt=["title","titleId"];function Vue(){return Vue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ZSt(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}var qSt=function(t){var r=t.title,n=t.titleId,o=$St(t,VSt);return l("svg",Vue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"#00546B"},l("path",{d:"M29.456 24.276c-1.74-.043-3.088.131-4.219.61-.326.13-.848.13-.892.543.174.174.196.457.348.696.261.435.718 1.022 1.131 1.327.457.348.914.696 1.392 1 .848.522 1.805.827 2.631 1.349.48.304.957.695 1.436 1.022.24.173.391.456.696.565v-.065c-.153-.196-.196-.479-.348-.696-.218-.218-.435-.413-.653-.63a10.316 10.316 0 0 0-2.261-2.197c-.696-.479-2.219-1.131-2.501-1.936l-.044-.043c.479-.044 1.044-.218 1.5-.348.74-.196 1.414-.153 2.175-.348.348-.087.696-.196 1.044-.305v-.195c-.391-.392-.674-.914-1.087-1.284-1.11-.957-2.327-1.892-3.588-2.674-.675-.435-1.545-.718-2.262-1.088-.261-.13-.696-.196-.848-.413-.392-.479-.61-1.11-.892-1.675a54.922 54.922 0 0 1-1.783-3.784c-.392-.848-.63-1.696-1.11-2.479-2.24-3.697-4.675-5.937-8.416-8.134-.804-.456-1.761-.652-2.783-.891-.544-.022-1.088-.065-1.631-.087-.348-.152-.696-.566-1-.761-1.24-.783-4.437-2.48-5.35-.24-.588 1.414.87 2.806 1.37 3.524.37.5.848 1.065 1.109 1.63.152.37.195.762.347 1.153.348.957.675 2.023 1.131 2.914.24.457.5.936.805 1.349.174.239.478.348.544.74-.305.434-.327 1.087-.5 1.63-.783 2.458-.479 5.502.63 7.307.348.544 1.175 1.74 2.284 1.284.978-.392.76-1.632 1.043-2.719.066-.261.022-.435.153-.609v.044c.304.609.609 1.196.891 1.805.675 1.065 1.849 2.174 2.828 2.914.522.391.935 1.065 1.587 1.305v-.066h-.043c-.13-.195-.327-.282-.5-.435-.392-.39-.827-.87-1.131-1.304-.914-1.218-1.719-2.567-2.436-3.958-.348-.675-.653-1.414-.935-2.088-.13-.261-.13-.653-.348-.783-.327.478-.805.892-1.044 1.479-.413.935-.457 2.088-.61 3.284-.086.021-.043 0-.086.043-.696-.174-.935-.891-1.196-1.5-.653-1.545-.761-4.024-.196-5.807.152-.457.805-1.892.544-2.327-.13-.413-.566-.652-.805-.979a8.764 8.764 0 0 1-.783-1.392c-.522-1.217-.783-2.566-1.348-3.784-.261-.565-.718-1.152-1.087-1.674-.414-.587-.87-1-1.197-1.697-.108-.239-.26-.63-.087-.891.044-.174.13-.24.305-.283.283-.24 1.087.065 1.37.196.805.326 1.479.63 2.153 1.087.304.218.63.631 1.022.74h.457c.696.152 1.479.043 2.131.239 1.153.37 2.196.913 3.132 1.5a19.294 19.294 0 0 1 6.785 7.438c.261.5.37.957.609 1.479.457 1.066 1.022 2.153 1.479 3.197.456 1.022.891 2.066 1.544 2.914.326.457 1.63.696 2.218.935.435.196 1.11.37 1.5.61.74.456 1.48.978 2.175 1.478.348.26 1.436.805 1.501 1.24Z"}),l("path",{d:"M7.273 5.378c-.37 0-.63.043-.891.109v.043h.043c.174.348.479.587.696.892.174.348.326.696.5 1.044l.044-.044c.304-.217.457-.565.457-1.087-.131-.152-.153-.305-.261-.457-.13-.218-.414-.326-.588-.5Z"})))},USt=qSt;var JF={};J(JF,{icon:()=>YSt});var ujr=T(z());var GSt=["title","titleId"];function $ue(){return $ue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function XSt(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}var KSt=function(t){var r=t.title,n=t.titleId,o=JSt(t,GSt);return l("svg",$ue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{fill:"#119639",d:"m16 0 13.856 8v16L16 32 2.144 24V8z"}),l("path",{fill:"#FFF",fillRule:"nonzero",d:"M11.17 13.512v8.376a1.607 1.607 0 1 1-3.215 0V9.632c0-1.432 1.731-2.149 2.744-1.136l9.51 9.512V9.632a1.607 1.607 0 0 1 3.215 0v12.256c0 1.432-1.731 2.149-2.744 1.136l-9.51-9.512Z"})))},YSt=KSt;var XF={};J(XF,{icon:()=>n7t});var pjr=T(z());var QSt=["title","titleId"];function Zue(){return Zue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function t7t(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}var r7t=function(t){var r=t.title,n=t.titleId,o=e7t(t,QSt);return l("svg",Zue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#F04E98",d:"M10 32H7.238C3.793 32 1 28.865 1 24.998V15h9v17Z"}),l("path",{d:"M10 32h9V8h-9z",className:"euiIcon__fillNegative"}),l("path",{fill:"#07C",d:"M31 32h-9V0l1.973.024C27.866.072 31 3.731 31 8.228V32Z"}))},n7t=r7t;var KF={};J(KF,{icon:()=>l7t});var fjr=T(z());var o7t=["title","titleId"];function que(){return que=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function a7t(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}var s7t=function(t){var r=t.title,n=t.titleId,o=i7t(t,o7t);return l("svg",que({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#A596FF",d:"M31.907.032v7.969l-7.952 7.951V7.967L31.907.032"}),l("path",{fill:"#333",d:"M16.003.032v7.969l7.952 7.951V7.967L16.003.032"}),l("path",{fill:"#A596FF",d:"M31.923 31.855h-7.968l-7.952-7.951h7.985l7.935 7.951"}),l("path",{fill:"#333",d:"M31.923 15.952h-7.968l-7.952 7.952h7.985l7.935-7.952"}),l("path",{fill:"#A596FF",d:"M.1 31.872v-7.968l7.952-7.952v7.985L.1 31.872"}),l("path",{fill:"#333",d:"M16.004 31.872v-7.968l-7.952-7.952v7.985l7.952 7.935"}),l("path",{fill:"#A596FF",d:"M.084.048h7.968L16.004 8H8.019L.084.048"}),l("path",{fill:"#333",d:"M.084 15.952h7.968L16.004 8H8.019L.084 15.952"})))},l7t=s7t;var YF={};J(YF,{icon:()=>f7t});var mjr=T(z());var u7t=["title","titleId"];function Uue(){return Uue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function p7t(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}var d7t=function(t){var r=t.title,n=t.titleId,o=c7t(t,u7t),i=fn("logo_php");return l("svg",Uue({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("defs",null,l("path",{id:i("a"),d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}),l("path",{id:i("d"),d:"M0 17.43h30.987V0H0z"}),l("path",{id:i("f"),d:"M0 17.43h30.987V0H0z"}),l("radialGradient",{id:i("b"),cx:"30.02%",cy:"82.422%",r:"124.814%",fx:"30.02%",fy:"82.422%",gradientTransform:"matrix(.52604 0 0 1 .142 0)"},l("stop",{offset:"0%",stopColor:"#AEB2D5"}),l("stop",{offset:"30%",stopColor:"#AEB2D5"}),l("stop",{offset:"75%",stopColor:"#484C89"}),l("stop",{offset:"100%",stopColor:"#484C89"}))),l("g",{fill:"none",fillRule:"evenodd",transform:"matrix(1 0 0 -1 .026 25.413)"},l("g",{transform:"translate(.592 .86)"},l("mask",{id:i("c"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("a"))})),l("g",{fill:"url(#".concat(i("b"),")"),fillRule:"nonzero",mask:"url(#".concat(i("c"),")")},l("path",{d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}))),l("mask",{id:i("e"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("d"))})),l("g",{mask:"url(#".concat(i("e"),")")},l("path",{fill:"#777BB3",fillRule:"nonzero",d:"M15.494 1.472c7.894 0 14.293 3.243 14.293 7.243s-6.4 7.244-14.293 7.244c-7.894 0-14.293-3.243-14.293-7.244 0-4 6.4-7.243 14.293-7.243"})),l("mask",{id:i("g"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("f"))})),l("g",{fillRule:"nonzero",mask:"url(#".concat(i("g"),")")},l("path",{fill:"#000",d:"M8.701 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306H8.433l-.575-2.959h.843ZM5.31 4.172a.161.161 0 0 0-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.686 3.686 0 0 0-.395-1.098 3.676 3.676 0 0 0-.727-.91 3.189 3.189 0 0 0-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 0 0-.158-.13H5.309Z"}),l("path",{fill:"#FFF",d:"M8.566 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.291-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636Zm1.551 1.883H6.833a.323.323 0 0 1-.317-.261L4.992 4.396a.323.323 0 0 1 .317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888ZM7.663 7.656h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36H8.3l-.638-3.282Zm2.454 4.52c.989 0 1.71-.26 2.162-.779.453-.518.59-1.242.41-2.172a3.51 3.51 0 0 0-.378-1.05 3.502 3.502 0 0 0-.695-.87 3.017 3.017 0 0 0-1.137-.683c-.417-.135-.948-.203-1.594-.203H7.422l-.405-2.085H5.309l1.524 7.841h3.284Z"}),l("path",{fill:"#000",d:"M16.763 6.257a.161.161 0 0 0-.159.192l.674 3.47c.064.33.049.566-.044.666-.057.061-.228.164-.732.164H15.28l-.847-4.361a.161.161 0 0 0-.159-.131H12.58a.161.161 0 0 0-.159.192l1.524 7.841c.015.076.082.13.159.13h1.694a.161.161 0 0 0 .159-.191l-.368-1.893h1.314c1 0 1.68-.176 2.075-.54.403-.37.529-.962.374-1.76l-.71-3.648a.161.161 0 0 0-.158-.131h-1.721Z"}),l("path",{fill:"#FFF",d:"M15.799 14.582h-1.695a.323.323 0 0 1-.317-.261L12.263 6.48a.323.323 0 0 1 .317-.385h1.695c.154 0 .287.11.317.262l.822 4.23h1.088c.504 0 .61-.107.614-.112.03-.033.07-.185.004-.526l-.674-3.47a.323.323 0 0 1 .317-.384h1.721c.155 0 .288.11.317.262l.71 3.648c.166.857.023 1.5-.424 1.91-.426.392-1.14.582-2.184.582h-1.118l.33 1.7a.323.323 0 0 1-.316.385m0-.323-.406-2.084h1.51c.95 0 1.605-.166 1.966-.497.36-.332.468-.869.324-1.611l-.709-3.649h-1.721l.674 3.47c.077.394.048.663-.085.807-.133.143-.416.215-.85.215h-1.354l-.873-4.492H12.58l1.524 7.841h1.695"}),l("path",{fill:"#000",d:"M22.033 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306h-1.038l-.575-2.959h.843Zm-3.392-3.645a.161.161 0 0 0-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.689 3.689 0 0 0-.395-1.098 3.676 3.676 0 0 0-.727-.91 3.189 3.189 0 0 0-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 0 0-.158-.13H18.64Z"}),l("path",{fill:"#FFF",d:"M21.898 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.292-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636Zm1.551 1.883h-3.284a.323.323 0 0 1-.317-.261l-1.524-7.841a.323.323 0 0 1 .317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888Zm-2.454-4.842h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36h-1.17l-.638-3.282Zm2.454 4.52c.989 0 1.71-.26 2.162-.779.454-.518.59-1.242.41-2.172a3.51 3.51 0 0 0-.378-1.05 3.502 3.502 0 0 0-.695-.87 3.017 3.017 0 0 0-1.137-.683c-.417-.135-.948-.203-1.594-.203h-1.463l-.405-2.085h-1.708l1.524 7.841h3.284Z"}))))},f7t=d7t;var QF={};J(QF,{icon:()=>y7t});var yjr=T(z());var h7t=["title","titleId"];function Gue(){return Gue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function v7t(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}var g7t=function(t){var r=t.title,n=t.titleId,o=m7t(t,h7t);return l("svg",Gue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#000",d:"M31.876 19.162c-.192-.564-.695-.956-1.345-1.05-.306-.045-.657-.026-1.072.057-.724.145-1.261.2-1.654.211 1.48-2.422 2.683-5.185 3.376-7.785 1.12-4.205.521-6.12-.178-6.987-1.85-2.293-4.551-3.525-7.809-3.563a14.239 14.239 0 0 0-4.06.551 15.573 15.573 0 0 0-2.373-.21c-1.567-.024-2.952.307-4.135.988a19.334 19.334 0 0 0-2.92-.711C6.85.208 4.549.563 2.866 1.716.828 3.112-.117 5.537.058 8.926.113 10 .734 13.273 1.71 16.376c.561 1.784 1.16 3.266 1.78 4.404.878 1.614 1.818 2.564 2.873 2.906.591.19 1.666.325 2.796-.588.143.168.334.335.588.49.322.198.716.359 1.109.454 1.418.344 2.745.258 3.878-.224.007.195.013.382.017.543.008.262.015.518.025.758.067 1.62.181 2.881.518 3.763l.07.201c.168.5.449 1.335 1.164 1.99.74.677 1.637.885 2.457.885.412 0 .804-.052 1.149-.124 1.227-.255 2.621-.643 3.63-2.036.953-1.316 1.417-3.299 1.5-6.423l.031-.253.02-.165.225.019.058.004c1.25.055 2.779-.202 3.718-.625.741-.334 3.119-1.55 2.559-3.194"}),l("path",{fill:"#336791",d:"M29.738 19.481c-3.717.744-3.973-.476-3.973-.476 3.925-5.648 5.566-12.817 4.15-14.571C26.052-.352 19.365 1.91 19.254 1.97l-.036.006a13.657 13.657 0 0 0-2.48-.25c-1.682-.027-2.958.427-3.927 1.14 0 0-11.928-4.766-11.374 5.992.118 2.289 3.383 17.318 7.278 12.779a70.443 70.443 0 0 1 2.798-3.064c.683.44 1.501.665 2.358.584l.067-.055c-.02.206-.011.408.027.647-1.004 1.087-.709 1.277-2.714 1.678-2.03.405-.837 1.127-.06 1.316.944.229 3.127.553 4.602-1.45l-.058.23c.393.304.669 1.985.623 3.508-.047 1.524-.078 2.57.232 3.387.31.817.619 2.655 3.255 2.107 2.203-.458 3.345-1.644 3.503-3.623.113-1.407.368-1.199.384-2.457l.205-.595c.236-1.907.037-2.522 1.394-2.236l.33.028c1 .044 2.307-.156 3.074-.502 1.652-.743 2.632-1.985 1.003-1.659"}),l("path",{fill:"#FFF",d:"M13.51 9.882c-.335-.045-.639-.004-.792.11a.28.28 0 0 0-.12.187c-.02.133.077.282.136.358.169.216.414.365.658.398.035.004.07.007.105.007.405 0 .774-.307.807-.533.04-.283-.383-.472-.795-.527m11.099.009c-.032-.222-.44-.285-.826-.233-.386.052-.76.22-.73.443.026.173.348.468.73.468a.718.718 0 0 0 .097-.006.947.947 0 0 0 .53-.281c.135-.138.213-.291.199-.391"}),l("path",{fill:"#FFF",d:"M30.975 19.397c-.142-.416-.598-.55-1.356-.398-2.25.45-3.056.139-3.321-.05 1.75-2.584 3.189-5.708 3.965-8.623.368-1.38.57-2.663.587-3.708.019-1.147-.183-1.99-.598-2.505-1.675-2.075-4.134-3.189-7.11-3.22-2.047-.022-3.775.486-4.11.629a10.549 10.549 0 0 0-2.313-.288c-1.536-.024-2.864.332-3.963 1.06a18.131 18.131 0 0 0-3.22-.82c-2.61-.407-4.683-.098-6.163.918C1.608 3.605.793 5.773.951 8.836c.053 1.03.658 4.2 1.614 7.236 1.258 3.996 2.625 6.257 4.063 6.723.169.054.363.092.577.092.525 0 1.168-.23 1.838-1.01a64.894 64.894 0 0 1 2.532-2.778 4.18 4.18 0 0 0 1.822.475l.005.048c-.11.127-.217.255-.321.385-.44.542-.532.655-1.95.938-.403.08-1.473.294-1.489 1.022-.017.795 1.266 1.13 1.412 1.165.509.123 1 .184 1.467.184 1.138 0 2.14-.363 2.94-1.064-.025 2.834.097 5.628.448 6.479.288.696.99 2.4 3.208 2.399a5.3 5.3 0 0 0 1.078-.119c2.315-.48 3.32-1.473 3.71-3.66.208-1.17.565-3.961.733-5.459.354.107.81.156 1.304.156 1.029 0 2.216-.212 2.961-.547.837-.377 2.346-1.3 2.072-2.104ZM25.462 9.278c-.008.442-.07.844-.137 1.262-.072.451-.145.917-.164 1.482-.019.55.052 1.123.12 1.676.14 1.118.282 2.268-.269 3.403a4.37 4.37 0 0 1-.243-.485c-.069-.161-.217-.42-.423-.777-.8-1.39-2.673-4.648-1.714-5.977.286-.396 1.01-.803 2.83-.584Zm-2.206-7.49c2.667.058 4.777 1.025 6.27 2.876 1.146 1.42-.116 7.879-3.767 13.45l-.111-.135-.046-.056c.943-1.51.759-3.006.595-4.331-.068-.544-.132-1.058-.115-1.541.016-.511.086-.95.154-1.375.082-.522.167-1.063.144-1.701a.684.684 0 0 0 .015-.24c-.06-.611-.78-2.441-2.247-4.098a10.094 10.094 0 0 0-3.572-2.604 12.407 12.407 0 0 1 2.68-.244ZM8.334 21.307c-.737.86-1.246.695-1.414.641-1.091-.353-2.357-2.59-3.474-6.136-.966-3.069-1.53-6.155-1.575-7.02-.141-2.737.543-4.644 2.033-5.669 2.426-1.668 6.414-.67 8.016-.163-.023.022-.047.042-.07.065-2.63 2.575-2.567 6.974-2.56 7.243 0 .104.008.251.02.453.046.74.13 2.117-.095 3.677-.209 1.45.252 2.868 1.264 3.892.104.105.213.205.327.3-.45.467-1.43 1.502-2.472 2.717Zm2.81-3.635c-.816-.826-1.186-1.974-1.017-3.15.238-1.648.15-3.083.103-3.854l-.016-.277c.384-.33 2.165-1.255 3.434-.973.58.129.932.511 1.08 1.17.759 3.406.1 4.825-.43 5.966-.109.235-.212.458-.3.687l-.068.178c-.173.45-.334.867-.434 1.264a3.325 3.325 0 0 1-2.352-1.011Zm.133 4.594a2.07 2.07 0 0 1-.614-.256c.111-.051.31-.12.654-.19 1.668-.332 1.925-.567 2.487-1.26.13-.158.275-.338.478-.557.301-.328.44-.272.69-.172.202.082.4.328.48.599.037.128.08.37-.06.56-1.174 1.595-2.886 1.574-4.115 1.276Zm8.725 7.873c-2.04.424-2.761-.586-3.237-1.74-.308-.744-.459-4.102-.351-7.81a.434.434 0 0 0-.02-.143 1.823 1.823 0 0 0-.057-.262c-.16-.54-.548-.99-1.013-1.178-.185-.074-.525-.21-.933-.11.087-.347.238-.74.402-1.165l.068-.178c.078-.202.175-.41.277-.632.554-1.194 1.313-2.829.49-6.522-.309-1.384-1.34-2.06-2.901-1.903-.936.094-1.793.46-2.22.67a7.255 7.255 0 0 0-.255.132c.12-1.394.57-4 2.255-5.647 1.062-1.038 2.475-1.55 4.196-1.523 3.393.054 5.569 1.742 6.796 3.15 1.058 1.211 1.631 2.433 1.86 3.091-1.72-.17-2.889.16-3.482.982-1.29 1.787.706 5.257 1.665 6.924.175.306.327.57.375.682.312.734.716 1.224 1.012 1.582.09.11.178.215.245.308-.521.146-1.456.482-1.371 2.164-.069.843-.558 4.793-.806 6.189-.328 1.843-1.028 2.53-2.995 2.939Zm8.513-9.447c-.532.24-1.424.42-2.27.458-.935.043-1.411-.101-1.523-.19-.053-1.048.35-1.157.775-1.273a3.35 3.35 0 0 0 .195-.058c.04.031.082.062.13.092.75.481 2.091.533 3.984.154l.02-.004c-.255.232-.692.542-1.31.821Z"})))},y7t=g7t;var eB={};J(eB,{icon:()=>_7t});var wjr=T(z());var b7t=["title","titleId"];function Jue(){return Jue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function O7t(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}var x7t=function(t){var r=t.title,n=t.titleId,o=w7t(t,b7t);return l("svg",Jue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#E6522C",d:"M15.907.187C7.122.187 0 7.308 0 16.093S7.122 32 15.907 32c8.784 0 15.906-7.121 15.906-15.906S24.69.187 15.907.187Zm0 29.77c-2.5 0-4.526-1.67-4.526-3.729h9.051c0 2.06-2.026 3.73-4.525 3.73Zm7.475-4.963H8.43v-2.711h14.95v2.71Zm-.054-4.107H8.473c-.05-.057-.1-.113-.147-.17-1.53-1.859-1.891-2.829-2.241-3.818-.006-.032 1.855.38 3.176.678 0 0 .679.157 1.672.338-.953-1.118-1.52-2.539-1.52-3.991 0-3.189 2.446-5.975 1.564-8.227.858.07 1.777 1.812 1.839 4.537.913-1.262 1.295-3.566 1.295-4.978 0-1.463.963-3.161 1.927-3.22-.86 1.417.223 2.63 1.184 5.642.361 1.132.315 3.035.594 4.243.092-2.508.523-6.167 2.114-7.43-.702 1.591.104 3.581.655 4.538.889 1.544 1.428 2.714 1.428 4.926 0 1.483-.548 2.88-1.472 3.971 1.05-.197 1.776-.374 1.776-.374l3.411-.666s-.495 2.038-2.4 4.001Z"}))},_7t=x7t;var tB={};J(tB,{icon:()=>k7t});var xjr=T(z());var S7t=["title","titleId"];function Xue(){return Xue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function E7t(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}var P7t=function(t){var r=t.title,n=t.titleId,o=I7t(t,S7t);return l("svg",Xue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#F60",d:"M30.083 13.197h-9.878c-.79-.088-1.391-.74-1.391-1.508V1.97c0-.83-.718-1.495-1.595-1.495h-3.456c-.885 0-1.595.672-1.595 1.495v9.82c-.043.74-.696 1.338-1.478 1.406H8.102c-.76-.088-1.348-.686-1.398-1.406V1.97c0-.83-.718-1.495-1.595-1.495H1.652C.768.476.058 1.148.058 1.97v28.358c0 .83.717 1.495 1.594 1.495h28.439c.884 0 1.594-.673 1.594-1.495V14.692c-.007-.829-.718-1.495-1.602-1.495Zm-4.55 10.724c0 .829-.718 1.495-1.595 1.495H20.48c-.884 0-1.595-.673-1.595-1.495v-3.058c0-.83.718-1.495 1.595-1.495h3.457c.884 0 1.594.672 1.594 1.495v3.058Z"}))},k7t=P7t;var rB={};J(rB,{icon:()=>A7t});var Sjr=T(z());var j7t=["title","titleId"];function Kue(){return Kue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function C7t(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}var M7t=function(t){var r=t.title,n=t.titleId,o=T7t(t,j7t);return l("svg",Kue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",transform:"translate(0 3)"},l("path",{fill:"#A41E11",d:"M30.594 20.791c-1.689.875-10.438 4.451-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.437-12.46-5.234-.838-.399-1.278-.735-1.278-1.052v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.118 1.666.607 11.623 2.393 13.27 2.992l-.001 3.135c0 .314-.38.659-1.24 1.104z"}),l("path",{fill:"#D82C20",d:"M30.594 17.61c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.956-4.37.256-1.471-.698-10.782-4.438-12.46-5.234-1.676-.797-1.712-1.345-.064-1.987 1.647-.641 10.907-4.252 12.864-4.95 1.957-.698 2.636-.723 4.301-.117 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z"}),l("path",{fill:"#A41E11",d:"M30.594 15.606c-1.689.875-10.438 4.45-12.3 5.416-1.863.965-2.898.956-4.37.257-1.471-.7-10.782-4.438-12.46-5.235-.838-.398-1.278-.734-1.278-1.051v-3.18S12.307 9.19 14.264 8.492c1.957-.698 2.636-.723 4.301-.117 1.666.606 11.623 2.392 13.27 2.991l-.001 3.135c0 .315-.38.66-1.24 1.105z"}),l("path",{fill:"#D82C20",d:"M30.594 12.425c-1.689.875-10.438 4.45-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.438-12.46-5.235-1.676-.796-1.712-1.345-.064-1.986 1.647-.641 10.907-4.253 12.864-4.95 1.957-.698 2.636-.724 4.301-.117 1.666.606 10.363 4.047 12.009 4.646 1.646.6 1.71 1.094.02 1.969z"}),l("path",{fill:"#A41E11",d:"M30.594 10.228c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.438-12.46-5.234C.627 10.268.187 9.932.187 9.615v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.117 1.666.606 11.623 2.391 13.27 2.99l-.001 3.136c0 .314-.38.659-1.24 1.104z"}),l("path",{fill:"#D82C20",d:"M30.594 7.047c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.437-12.46-5.234C-.211 6.689-.247 6.14 1.4 5.499S12.307 1.247 14.264.55c1.957-.7 2.636-.724 4.301-.118 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z"}),l("path",{fill:"#FFF",d:"m20.157 3.985-2.742.283-.614 1.468-.992-1.638-3.166-.283 2.362-.847-.708-1.3 2.212.86 2.085-.68-.563 1.345zm-3.52 7.123-5.118-2.11 7.334-1.119z"}),l("ellipse",{cx:9.541,cy:6.311,fill:"#FFF",rx:3.92,ry:1.51}),l("path",{fill:"#7A0C00",d:"m23.398 4.386 4.34 1.705-4.336 1.703z"}),l("path",{fill:"#AD2115",d:"m18.596 6.274 4.802-1.888.004 3.408-.471.183z"})))},A7t=M7t;var nB={};J(nB,{icon:()=>F7t});var Ejr=T(z());var R7t=["title","titleId"];function Yue(){return Yue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function L7t(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}var N7t=function(t){var r=t.title,n=t.titleId,o=D7t(t,R7t);return l("svg",Yue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#FA744E",d:"M9 7.008V0h20v16.744c0 3.913-6.378 6.477-9.015 7.256V7.008H9Z"}),l("path",{fill:"#1DBAB0",d:"M3 20.073V10h14v22C7.667 27.98 3 24.004 3 20.073Z"}),l("path",{d:"M9 10h8v14c-2.983-1.14-8-3.756-8-7.043V10Z",className:"euiIcon__fillNegative"}))},F7t=N7t;var oB={};J(oB,{icon:()=>V7t});var kjr=T(z());var B7t=["title","titleId"];function Que(){return Que=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function W7t(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}var H7t=function(t){var r=t.title,n=t.titleId,o=z7t(t,B7t);return l("svg",Que({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{fill:"#FA744E",d:"M27.05 10h-7.34l-11 22s15.696-4.96 21.855-16.076C32.037 13.266 30.088 10 27.05 10"}),l("path",{fill:"#00BFB3",d:"M21.355 0H7.533L.427 14.211C-.903 16.871 1.032 20 4.004 20h7.351l10-20Z"}),l("path",{d:"M2.533 10 .428 14.211C-.903 16.871 1.032 20 4.005 20h7.35l5-10H2.533Z",className:"euiIcon__fillNegative"})))},V7t=H7t;var iB={};J(iB,{icon:()=>G7t});var Tjr=T(z());var $7t=["title","titleId"];function ece(){return ece=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function q7t(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}var U7t=function(t){var r=t.title,n=t.titleId,o=Z7t(t,$7t);return l("svg",ece({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#FFAE00",d:"M16 32 0 11.454l6.931-10.38L16 0l9.069 1.074L32 11.454z"}),l("path",{fill:"#EC6C00",d:"M16 32 0 11.454h32z"}),l("path",{fill:"#FFAE00",d:"M16 32 6.477 11.454h19.045z"}),l("path",{fill:"#FFEFB4",d:"M16 0 6.477 11.454h19.045z"}),l("path",{fill:"#FFAE00",d:"M6.932 1.074 3.369 6.3.001 11.454h6.542zM25.069 1.074 28.632 6.3 32 11.454h-6.542z"}),l("path",{fill:"#FED305",d:"m6.931 1.074-.453 10.38L16 0zM25.069 1.074l.453 10.38L16 0z"})))},G7t=U7t;var aB={};J(aB,{icon:()=>Q7t});var Mjr=T(z());var J7t=["title","titleId"];function tce(){return tce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function K7t(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}var Y7t=function(t){var r=t.title,n=t.titleId,o=X7t(t,J7t);return l("svg",tce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#E01E5A",d:"M6.813 20.18a3.337 3.337 0 0 1-3.33 3.33 3.337 3.337 0 0 1-3.328-3.33 3.337 3.337 0 0 1 3.329-3.329h3.329v3.33zm1.677 0a3.337 3.337 0 0 1 3.33-3.329 3.337 3.337 0 0 1 3.328 3.33v8.335a3.337 3.337 0 0 1-3.329 3.329 3.337 3.337 0 0 1-3.329-3.33V20.18z"}),l("path",{fill:"#36C5F0",d:"M11.82 6.813a3.337 3.337 0 0 1-3.33-3.33A3.337 3.337 0 0 1 11.82.156a3.337 3.337 0 0 1 3.328 3.329v3.329H11.82zm0 1.677a3.337 3.337 0 0 1 3.328 3.33 3.337 3.337 0 0 1-3.329 3.328H3.484a3.337 3.337 0 0 1-3.33-3.329 3.337 3.337 0 0 1 3.33-3.329h8.335z"}),l("path",{fill:"#2EB67D",d:"M25.187 11.82a3.337 3.337 0 0 1 3.329-3.33 3.337 3.337 0 0 1 3.329 3.33 3.337 3.337 0 0 1-3.33 3.328h-3.328V11.82zm-1.678 0a3.337 3.337 0 0 1-3.329 3.328 3.337 3.337 0 0 1-3.329-3.329V3.484a3.337 3.337 0 0 1 3.33-3.33 3.337 3.337 0 0 1 3.328 3.33v8.335z"}),l("path",{fill:"#ECB22E",d:"M20.18 25.187a3.337 3.337 0 0 1 3.33 3.329 3.337 3.337 0 0 1-3.33 3.329 3.337 3.337 0 0 1-3.329-3.33v-3.328h3.33zm0-1.678a3.337 3.337 0 0 1-3.329-3.329 3.337 3.337 0 0 1 3.33-3.329h8.335a3.337 3.337 0 0 1 3.329 3.33 3.337 3.337 0 0 1-3.33 3.328H20.18z"})))},Q7t=Y7t;var sB={};J(sB,{icon:()=>o8t});var Rjr=T(z());var e8t=["title","titleId"];function rce(){return rce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function r8t(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}var n8t=function(t){var r=t.title,n=t.titleId,o=t8t(t,e8t);return l("svg",rce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#3EBEB0",d:"M19 15c0 7.062-4.888 12.969-11.46 14.563A15.914 15.914 0 0 0 16 32c8.836 0 16-7.163 16-16v-3l-6.5-6-6.5 6v2Z"}),l("path",{fill:"#07C",d:"M6.833 26.646a11.954 11.954 0 0 0 8.544-7.834A12.43 12.43 0 0 1 13 11.5V.292C5.6 1.696 0 8.19 0 16.002c0 4.358 1.75 8.306 4.577 11.192l2.256-.547Z"}),l("path",{d:"M30.362 23.02c-1.494.63-3.137.98-4.861.98a12.443 12.443 0 0 1-7.852-2.78 15.042 15.042 0 0 1-10.11 8.343A15.91 15.91 0 0 0 16.002 32c6.314 0 11.758-3.669 14.36-8.98",className:"euiIcon__fillNegative"}))},o8t=n8t;var lB={};J(lB,{icon:()=>u8t});var Ljr=T(z());var i8t=["title","titleId"];function nce(){return nce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function s8t(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}var l8t=function(t){var r=t.title,n=t.titleId,o=a8t(t,i8t);return l("svg",nce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#00BFB3",d:"M11.05 1.95 6.808 6.192 16 15.385l9.192-9.193L20.95 1.95 16 6.9l-4.95-4.95Z"}),l("path",{fill:"#FA744E",d:"M4.686 19.627a8 8 0 0 1 0-11.313L16 19.627v11.314L4.686 19.627Z"}),l("path",{fill:"#343741",d:"M27.314 8.314a8 8 0 0 1 0 11.313L16 30.941V19.627L27.314 8.314Z"}))},u8t=l8t;var uB={};J(uB,{icon:()=>h8t});var Fjr=T(z());var c8t=["title","titleId"];function oce(){return oce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function d8t(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}var f8t=function(t){var r=t.title,n=t.titleId,o=p8t(t,c8t);return l("svg",oce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#C73A63",d:"M14.943 13.563c-1.327 2.23-2.597 4.388-3.894 6.531-.334.55-.498.998-.232 1.698.734 1.931-.302 3.811-2.25 4.321-1.837.482-3.627-.726-3.992-2.692-.323-1.741 1.028-3.448 2.948-3.72.16-.023.325-.026.595-.046l2.92-4.896C9.2 12.933 8.108 10.8 8.35 8.154c.171-1.87.907-3.486 2.25-4.81a7.639 7.639 0 0 1 9.531-1c2.91 1.87 4.244 5.512 3.107 8.629l-2.668-.724c.357-1.733.093-3.29-1.076-4.623-.772-.88-1.763-1.341-2.89-1.511-2.258-.341-4.476 1.11-5.134 3.327-.748 2.516.383 4.572 3.473 6.121Z"}),l("path",{fill:"#4B4B4B",d:"m18.73 10.926 2.823 4.98c4.753-1.47 8.336 1.16 9.622 3.977 1.552 3.402.491 7.432-2.558 9.531-3.13 2.155-7.089 1.787-9.862-.981l2.176-1.821c2.739 1.774 5.135 1.69 6.913-.41a4.766 4.766 0 0 0-.077-6.219c-1.8-2.025-4.213-2.086-7.13-.143-1.209-2.146-2.44-4.275-3.61-6.436-.396-.729-.832-1.152-1.722-1.306-1.487-.257-2.446-1.534-2.504-2.964a3.258 3.258 0 0 1 2.08-3.192 3.243 3.243 0 0 1 3.671 1.002c.71.896.935 1.905.562 3.01-.104.309-.238.607-.384.972Z"}),l("path",{fill:"#4A4A4A",d:"M20.963 24.401h-5.72c-.55 2.256-1.734 4.077-3.775 5.235-1.586.9-3.296 1.205-5.116.911C3 30.007.26 26.99.019 23.593c-.273-3.848 2.372-7.268 5.898-8.036l.732 2.658c-3.234 1.65-4.353 3.73-3.448 6.33.797 2.287 3.06 3.541 5.518 3.056 2.51-.495 3.776-2.581 3.621-5.929 2.38 0 4.761-.024 7.14.012.93.015 1.648-.081 2.348-.9 1.152-1.349 3.273-1.227 4.515.046 1.268 1.301 1.207 3.395-.135 4.641a3.236 3.236 0 0 1-4.553-.157c-.249-.267-.445-.585-.692-.913Z"})))},h8t=f8t;var cB={};J(cB,{icon:()=>b8t});var zjr=T(z());var m8t=["title","titleId"];function ice(){return ice=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function g8t(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}var y8t=function(t){var r=t.title,n=t.titleId,o=v8t(t,m8t);return l("svg",ice({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#00ADEF",d:"m0 4.51 12.977-1.768.006 12.518-12.971.074L0 4.51Zm12.97 12.192.011 12.529-12.97-1.784-.002-10.829 12.962.084Zm1.574-14.19L31.751 0v15.1l-17.207.137V2.511Zm17.21 14.308-.003 15.033-17.207-2.429-.024-12.632 17.235.028Z"}))},b8t=y8t;var pB={};J(pB,{icon:()=>S8t});var Hjr=T(z());var w8t=["title","titleId"];function ace(){return ace=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function x8t(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}var _8t=function(t){var r=t.title,n=t.titleId,o=O8t(t,w8t);return l("svg",ace({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#FEC514",d:"M17.557 5.05c.17-.202.457-.512.86-.93C19.483 3.017 21.828 1 23.801 1H30v30h-6.2c-1.972 0-3.995-1.449-5.383-3.106l-.764-1.052 2.75-3.477c3.462-4.376 3.463-10.332.001-14.707L17.557 5.05Z"}),l("path",{fill:"#F04E98",d:"M2 31V1h5.81c1.71 0 3.35.786 4.387 2.1l5.855 7.42c2.598 3.283 2.598 7.698-.002 10.983l-5.855 7.403C11.158 30.217 9.52 31 7.815 31H2Z"}),l("path",{d:"M15.384 24.89 12.15 21.7c-2.868-3.318-2.868-8.22.002-11.322 1.535-1.639 2.611-2.718 3.23-3.238l2.67 3.238c2.637 3.385 2.575 7.987-.062 11.374l-2.607 3.137Z",className:"euiIcon__fillNegative"}))},S8t=_8t;var dB={};J(dB,{icon:()=>j8t});var $jr=T(z());var I8t=["title","titleId"];function sce(){return sce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function P8t(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}var k8t=function(t){var r=t.title,n=t.titleId,o=E8t(t,I8t);return l("svg",sce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.914 1c-3.6 0-5.897 1.111-5.897 1.876 0 .766 2.297 1.877 5.897 1.877s5.897-1.111 5.897-1.877C13.811 2.111 11.514 1 7.914 1m3.98 7.988c-1.187.331-2.601.502-3.98.502-1.383 0-2.801-.172-3.991-.505l2.863 3.242v2.515c.136.08.515.214 1.128.214.61 0 .989-.133 1.126-.213v-2.515l2.854-3.24Zm2.394-1.206-4.248 4.823v2.246h.004c0 .763-1.069 1.105-2.13 1.105-1.06 0-2.13-.342-2.13-1.105h.002v-2.245L1.321 7.55l.01-.008A1.53 1.53 0 0 1 1 6.607V2.78h.02C1.14.973 4.627 0 7.913 0c3.286 0 6.774.973 6.894 2.78h.02v3.827c0 .343-.12.657-.335.941l-.003.004c-.06.079-.128.155-.202.23Zm-.578-.856a.56.56 0 0 0 .118-.319V4.411c-1.288.879-3.649 1.342-5.914 1.342C5.65 5.753 3.288 5.29 2 4.411v2.196C2 7.375 4.304 8.49 7.914 8.49c2.879 0 4.927-.709 5.639-1.385l.157-.18Z"}))},j8t=k8t;var fB={};J(fB,{icon:()=>R8t});var qjr=T(z());var T8t=["title","titleId"];function lce(){return lce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function M8t(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}var A8t=function(t){var r=t.title,n=t.titleId,o=C8t(t,T8t);return l("svg",lce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m6.918 9.799-4.82 4.819 2.88-.43.148.987L0 15.943l.768-5.126.988.148-.453 3.033 4.936-4.935a2.003 2.003 0 0 1 1.265-2.885V0h1v6.178a2.003 2.003 0 0 1 1.263 2.884l4.865 4.866-.443-2.963.988-.147.768 5.126-5.127-.769.15-.988 2.95.441-4.83-4.83c-.312.203-.685.32-1.085.32-.4 0-.773-.117-1.085-.32Z"}))},R8t=A8t;var hB={};J(hB,{icon:()=>B8t});var Gjr=T(z());var D8t=["title","titleId"];function uce(){return uce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function N8t(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}var F8t=function(t){var r=t.title,n=t.titleId,o=L8t(t,D8t);return l("svg",uce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.747 10.992h13.1a.123.123 0 0 0 .122-.123V8.51a.122.122 0 0 0-.122-.122H1.122A.122.122 0 0 0 1 8.51v2.36c0 .066.055.122.122.122h.625Zm12.011 1H2.21V16h-1v-4.008h-.088A1.124 1.124 0 0 1 0 10.87V8.51c0-.62.503-1.122 1.122-1.122h13.725c.62 0 1.122.502 1.122 1.122v2.36c0 .618-.503 1.122-1.122 1.122h-.089V16h-1v-4.008Zm-6.27-7.487V0h1v4.529l2.407-2.262.685.73L8 6.356 4.42 2.995l.685-.729 2.383 2.24Z"}))},B8t=F8t;var mB={};J(mB,{icon:()=>$8t});var Xjr=T(z());var z8t=["title","titleId"];function cce(){return cce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function H8t(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}var V8t=function(t){var r=t.title,n=t.titleId,o=W8t(t,z8t);return l("svg",cce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2.21 4.008H13.76V0h1v4.008h.088c.619 0 1.122.504 1.122 1.123V7.49c0 .62-.503 1.122-1.122 1.122H1.122A1.122 1.122 0 0 1 0 7.49V5.13c0-.618.503-1.122 1.122-1.122h.089V0h1v4.008Zm11.549 1H1.12A.123.123 0 0 0 1 5.13V7.49c0 .068.055.122.122.122h13.725a.122.122 0 0 0 .122-.122V5.13a.123.123 0 0 0-.122-.122h-1.088Zm-5.301 9.097 2.405-2.26.686.728-3.58 3.363-3.58-3.363.686-.728 2.383 2.24V9.577h1v4.528Z"}))},$8t=V8t;var vB={};J(vB,{icon:()=>J8t});var Yjr=T(z());var Z8t=["title","titleId"];function pce(){return pce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function U8t(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}var G8t=function(t){var r=t.title,n=t.titleId,o=q8t(t,Z8t);return l("svg",pce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.339 15.464H4.77a3.248 3.248 0 0 1-3.245-3.244V4.549H0v-1h2.526v8.67a2.247 2.247 0 0 0 2.245 2.245h6.568a2.247 2.247 0 0 0 2.244-2.244V3.549h2.455v1h-1.455v7.67a3.247 3.247 0 0 1-3.244 3.245Zm.513-5.962v1.095l-3.848 1.72-3.85-1.72V9.502l3.85 1.72 3.848-1.72Zm0-4.251v1.095l-3.848 1.72-3.85-1.72V5.25l3.85 1.72 3.848-1.72Zm0-4.251v1.095l-3.848 1.72-3.85-1.72V1l3.85 1.72L11.852 1Z"}))},J8t=G8t;var gB={};J(gB,{icon:()=>eIt});var eTr=T(z());var X8t=["title","titleId"];function dce(){return dce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Y8t(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}var Q8t=function(t){var r=t.title,n=t.titleId,o=K8t(t,X8t);return l("svg",dce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.552 10.71a3.008 3.008 0 0 0 4.19.738l1.642-1.15 1.15 1.642-1.643 1.15a5.013 5.013 0 1 1-5.75-8.212l1.642-1.15 1.15 1.643-1.642 1.15a3.007 3.007 0 0 0-.739 4.189Zm8.296-2.137 1.15 1.643-1.643 1.149-1.15-1.642 1.643-1.15Zm-4.6-6.571 1.15 1.643-1.643 1.15-1.15-1.642 1.642-1.151Zm1.97 1.068L9.07 1.428a1.003 1.003 0 0 0-1.397-.246L3.566 4.057A5.995 5.995 0 0 0 1.092 7.94a5.993 5.993 0 0 0 .996 4.495 5.99 5.99 0 0 0 3.883 2.473 5.991 5.991 0 0 0 4.495-.996l4.107-2.875c.454-.318.563-.943.246-1.396l-1.15-1.643a1.002 1.002 0 0 0-1.396-.246l-4.107 2.875a2.002 2.002 0 0 1-1.498.332 2 2 0 0 1-1.627-2.323c.09-.505.371-.976.824-1.294l4.107-2.876c.454-.317.564-.942.246-1.396Z"}))},eIt=Q8t;var yB={};J(yB,{icon:()=>iIt});var rTr=T(z());var tIt=["title","titleId"];function fce(){return fce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nIt(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}var oIt=function(t){var r=t.title,n=t.titleId,o=rIt(t,tIt);return l("svg",fce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m15.143 15.85-3.872-3.872a.5.5 0 0 1-.034-.738 6.01 6.01 0 0 0 0-8.486 6.004 6.004 0 0 0-8.484 0 6.01 6.01 0 0 0 0 8.486 5.96 5.96 0 0 0 4.242 1.757.5.5 0 0 1 0 1 6.955 6.955 0 0 1-4.949-2.05c-2.728-2.73-2.728-7.171 0-9.9 2.728-2.73 7.168-2.73 9.898 0 2.609 2.61 2.723 6.785.342 9.532l3.565 3.564a.502.502 0 0 1-.708.708ZM6.254 3l.277 5.063h.935L7.754 3h-1.5Zm.222 7.548a.727.727 0 0 0 .533.222.717.717 0 0 0 .52-.22.715.715 0 0 0 .225-.53.716.716 0 0 0-.222-.534.724.724 0 0 0-.523-.216.731.731 0 0 0-.533.219.719.719 0 0 0-.222.53c0 .205.074.38.222.529Z"}))},iIt=oIt;var bB={};J(bB,{icon:()=>cIt});var oTr=T(z());var aIt=["title","titleId"];function hce(){return hce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function lIt(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}var uIt=function(t){var r=t.title,n=t.titleId,o=sIt(t,aIt);return l("svg",hce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.5 6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1 0-1h6Zm.74 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0 0 12 6.5 5.5 5.5 0 1 0 6.5 12a.5.5 0 1 1 0 1 6.5 6.5 0 1 1 4.936-2.27l4.419 4.418a.5.5 0 0 1-.707.707l-4.768-4.768a.499.499 0 0 1-.14-.347Z"}))},cIt=uIt;var wB={};J(wB,{icon:()=>mIt});var aTr=T(z());var pIt=["title","titleId"];function mce(){return mce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fIt(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}var hIt=function(t){var r=t.title,n=t.titleId,o=dIt(t,pIt);return l("svg",mce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 6h2.5a.5.5 0 0 1 0 1H7v2.5a.5.5 0 0 1-1 0V7H3.5a.5.5 0 0 1 0-1H6V3.5a.5.5 0 0 1 1 0V6Zm3.24 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0 0 12 6.5 5.5 5.5 0 1 0 6.5 12a.5.5 0 1 1 0 1 6.5 6.5 0 1 1 4.936-2.27l4.419 4.418a.5.5 0 0 1-.707.707l-4.768-4.768a.499.499 0 0 1-.14-.347Z"}))},mIt=hIt;var OB={};J(OB,{icon:()=>wIt});var lTr=T(z());var vIt=["title","titleId"];function vce(){return vce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yIt(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}var bIt=function(t){var r=t.title,n=t.titleId,o=gIt(t,vIt);return l("svg",vce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.55 14.224a.502.502 0 0 0 .897 0l4-8a.5.5 0 0 0 .053-.235 4.672 4.672 0 0 0-.084-.705 5.538 5.538 0 0 0-.505-1.512C11.189 2.362 9.906 1.5 8 1.5c-1.906 0-3.19.862-3.91 2.272-.248.485-.41.998-.506 1.512-.058.31-.08.554-.084.705a.5.5 0 0 0 .053.235l3.997 8ZM8 5a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3.493.895c.009-.106.027-.253.06-.429.079-.424.213-.848.413-1.238C5.537 3.138 6.487 2.5 8 2.5c1.513 0 2.463.638 3.02 1.728.2.39.334.814.413 1.238.033.176.051.323.06.43L8 12.881 4.507 5.895Z"}))},wIt=bIt;var xB={};J(xB,{icon:()=>IIt});var cTr=T(z());var OIt=["title","titleId"];function gce(){return gce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _It(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}var SIt=function(t){var r=t.title,n=t.titleId,o=xIt(t,OIt);return l("svg",gce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 10h2V6H7zM3 10h2V6H3zM11.025 10h2V6h-2zM3.5 13.75h1v-2.4h-1zM6.175 13.75h1.001v-2.4H6.175zM8.85 13.75h1v-2.4h-1zM11.525 13.75h1v-2.4h-1z"}),l("path",{d:"M0 3v7.05h1v3.698h1v-3.699h12v3.699h1v-3.699h1V3H0Zm1 6h14V4H1v5Z"}))},IIt=SIt;var _B={};J(_B,{icon:()=>TIt});var dTr=T(z());var EIt=["title","titleId"];function yce(){return yce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kIt(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}var jIt=function(t){var r=t.title,n=t.titleId,o=PIt(t,EIt);return l("svg",yce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M0 2h16v2H0V2Zm0 5h16v2H0V7Zm16 5H0v2h16v-2Z"}))},TIt=jIt;var SB={};J(SB,{icon:()=>DIt});var hTr=T(z());var CIt=["title","titleId"];function bce(){return bce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function AIt(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}var RIt=function(t){var r=t.title,n=t.titleId,o=MIt(t,CIt);return l("svg",bce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 0 1-.487-.412L3 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 7.5ZM3.51 4a.513.513 0 0 1-.502-.412L3 3.5c0-.276.228-.5.51-.5h8.98c.25 0 .459.183.502.412L13 3.5c0 .276-.228.5-.51.5H8.493v7.792l2.06-2.06a.5.5 0 1 1 .707.707L9.14 12.56A1.496 1.496 0 0 1 8.026 13L7.993 13a.501.501 0 0 1-.118-.014 1.493 1.493 0 0 1-.857-.426l-2.122-2.12a.5.5 0 0 1 .708-.708l1.889 1.89V4H3.51ZM13 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 0 1-.487-.412L10 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L13 7.5Z"}))},DIt=RIt;var IB={};J(IB,{icon:()=>zIt});var vTr=T(z());var LIt=["title","titleId"];function wce(){return wce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function FIt(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}var BIt=function(t){var r=t.title,n=t.titleId,o=NIt(t,LIt);return l("svg",wce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.014 7.382a.501.501 0 0 0-.013.152c-.014.4.133.806.439 1.112l2.12 2.122a.5.5 0 1 0 .708-.708L2.208 8H14.5a.5.5 0 0 0 0-1H2.379l1.889-1.89a.5.5 0 0 0-.707-.706L1.44 6.524c-.241.242-.383.544-.426.858ZM14.5 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1Zm0 8h-7a.5.5 0 1 0 0 1h7a.5.5 0 1 0 0-1Z"}))},zIt=BIt;var EB={};J(EB,{icon:()=>ZIt});var yTr=T(z());var WIt=["title","titleId"];function Oce(){return Oce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function VIt(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}var $It=function(t){var r=t.title,n=t.titleId,o=HIt(t,WIt);return l("svg",Oce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M14.986 7.382a.501.501 0 0 1 .013.152c.014.4-.133.806-.439 1.112l-2.12 2.122a.5.5 0 1 1-.708-.708L13.792 8H1.5a.5.5 0 0 1 0-1h12.121l-1.889-1.89a.5.5 0 0 1 .707-.706l2.121 2.12c.241.242.383.544.426.858ZM1.5 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1Zm0 8h7a.5.5 0 1 1 0 1h-7a.5.5 0 1 1 0-1Z"}))},ZIt=$It;var PB={};J(PB,{icon:()=>XIt});var wTr=T(z());var qIt=["title","titleId"];function xce(){return xce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function GIt(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}var JIt=function(t){var r=t.title,n=t.titleId,o=UIt(t,qIt);return l("svg",xce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.01 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412l.008.088c0 .276-.216.5-.495.5h-2.01a.503.503 0 0 1-.487-.412L10.01 8.5ZM12.5 12c.25 0 .459.183.502.412l.008.088c0 .276-.228.5-.51.5H3.52a.513.513 0 0 1-.502-.412L3.01 12.5c0-.276.228-.5.51-.5h3.987V4.208l-2.06 2.06a.5.5 0 1 1-.707-.707L6.86 3.44A1.496 1.496 0 0 1 7.974 3L8.007 3c.04 0 .08.005.118.014.314.043.616.185.857.426l2.122 2.12a.5.5 0 0 1-.708.708l-1.889-1.89V12H12.5ZM3 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 8.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 0 1-.487-.412L3 8.5Z"}))},XIt=JIt;var kB={};J(kB,{icon:()=>tEt});var xTr=T(z());var KIt=["title","titleId"];function _ce(){return _ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function QIt(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}var eEt=function(t){var r=t.title,n=t.titleId,o=YIt(t,KIt);return l("svg",_ce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.352 6H2.5a.5.5 0 0 1 0-1h4.852L5.12 2.721c-.18-.183-.155-.46.055-.616a.551.551 0 0 1 .705.048l3 3.062c.16.164.16.405 0 .57l-3 3.062A.532.532 0 0 1 5.5 9a.54.54 0 0 1-.325-.106c-.21-.157-.235-.433-.055-.616L7.352 6Zm1.296 4H13.5a.5.5 0 0 1 0 1H8.648l2.232 2.278c.18.183.155.46-.055.617A.54.54 0 0 1 10.5 14a.532.532 0 0 1-.38-.153l-3-3.063a.397.397 0 0 1 0-.568l3-3.063a.551.551 0 0 1 .705-.047c.21.156.235.433.055.616L8.648 10Z"}))},tEt=eEt;var jB={};J(jB,{icon:()=>aEt});var STr=T(z());var rEt=["title","titleId"];function Sce(){return Sce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function oEt(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}var iEt=function(t){var r=t.title,n=t.titleId,o=nEt(t,rEt);return l("svg",Sce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m1.146 14.146 4-4a.5.5 0 0 1 .765.638l-.057.07-4 4a.5.5 0 0 1-.765-.638l.057-.07 4-4-4 4ZM6.5 8A1.5 1.5 0 0 1 8 9.5v3a.5.5 0 1 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 1 0-1h3Zm2-5a.5.5 0 0 1 .5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 1 1 0 1h-3A1.5 1.5 0 0 1 8 6.5v-3a.5.5 0 0 1 .5-.5Zm1.651 2.146 4-4a.5.5 0 0 1 .765.638l-.057.07-4 4a.5.5 0 0 1-.765-.638l.057-.07 4-4-4 4Z"}))},aEt=iEt;var TB={};J(TB,{icon:()=>pEt});var ETr=T(z());var sEt=["title","titleId"];function Ice(){return Ice=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uEt(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}var cEt=function(t){var r=t.title,n=t.titleId,o=lEt(t,sEt);return l("svg",Ice({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("rect",{width:10,height:1.5,x:3,y:7.25,rx:.5}))},pEt=cEt;var CB={};J(CB,{icon:()=>vEt});var kTr=T(z());var dEt=["title","titleId"];function Ece(){return Ece=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hEt(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}var mEt=function(t){var r=t.title,n=t.titleId,o=fEt(t,dEt);return l("svg",Ece({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0Zm0 .882a6.618 6.618 0 1 0 0 13.236A6.618 6.618 0 0 0 7.5.882ZM3.5 7h8a.5.5 0 1 1 0 1h-8a.5.5 0 0 1 0-1Z"}))},vEt=mEt;var MB={};J(MB,{icon:()=>OEt});var TTr=T(z());var gEt=["title","titleId"];function Pce(){return Pce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bEt(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}var wEt=function(t){var r=t.title,n=t.titleId,o=yEt(t,gEt);return l("svg",Pce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0Zm-4 7a.5.5 0 0 0 0 1h8a.5.5 0 1 0 0-1h-8Z"}))},OEt=wEt;var AB={};J(AB,{icon:()=>EEt});var MTr=T(z());var xEt=["title","titleId"];function kce(){return kce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function SEt(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}var IEt=function(t){var r=t.title,n=t.titleId,o=_Et(t,xEt);return l("svg",kce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.611 7H4.39c-.216 0-.39.224-.39.5s.174.5.389.5h6.222c.215 0 .389-.224.389-.5s-.174-.5-.389-.5Z"}),l("path",{fillRule:"evenodd",d:"M1 3a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3Zm2-1h9a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Z"}))},EEt=IEt;var RB={};J(RB,{icon:()=>CEt});var RTr=T(z());var PEt=["title","titleId"];function jce(){return jce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jEt(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}var TEt=function(t){var r=t.title,n=t.titleId,o=kEt(t,PEt);return l("svg",jce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 16v5h2.038a13.179 13.179 0 0 0 0 2H7v5H5v-5H0v-2h5v-5h2zM7 0v5h5v2H7v5H5V7H0V5h5V0h2zm16 0v5h5v2h-5v2.038a13.179 13.179 0 0 0-2 0V7h-5V5h5V0h2z"}),l("path",{d:"M22 10c3.073 0 5.877 1.155 8 3.056v3.252A9.82 9.82 0 1 0 16.307 30h-3.251A11.955 11.955 0 0 1 10 22c0-6.627 5.373-12 12-12zm1 8v3h3v2h-3v3h-2v-3h-3v-2h3v-3h2z",className:"euiIcon__fillSecondary"}))},CEt=TEt;var DB={};J(DB,{icon:()=>LEt});var LTr=T(z());var MEt=["title","titleId"];function Tce(){return Tce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function REt(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}var DEt=function(t){var r=t.title,n=t.titleId,o=AEt(t,MEt);return l("svg",Tce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16h-2c0-7.732-6.268-14-14-14S2 8.268 2 16s6.268 14 14 14v2z"}),l("path",{d:"M27 20v12h-2V20h2zm-5 4v8h-2v-8h2zm10-2v10h-2V22h2zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2z",className:"euiIcon__fillSecondary"}))},LEt=DEt;var LB={};J(LB,{icon:()=>WEt});var FTr=T(z());var NEt=["title","titleId"];function Cce(){return Cce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function BEt(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}var zEt=function(t){var r=t.title,n=t.titleId,o=FEt(t,NEt);return l("svg",Cce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 24a4 4 0 1 1 0 8 4 4 0 0 1 0-8zm24 0a4 4 0 1 1 0 8 4 4 0 0 1 0-8zM4 26a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm24 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2zM4 0a4 4 0 1 1 0 8 4 4 0 0 1 0-8zm24 0a4 4 0 1 1 0 8 4 4 0 0 1 0-8zm0 2a2 2 0 1 0 0 4 2 2 0 0 0 0-4zM4 2a2 2 0 1 0 0 4 2 2 0 0 0 0-4z",className:"euiIcon__fillSecondary"}),l("path",{d:"M21.078 29.05c.102.677.3 1.322.582 1.92A15.963 15.963 0 0 1 16 32c-1.993 0-3.9-.364-5.66-1.03.281-.598.48-1.243.582-1.92 1.574.614 3.287.95 5.078.95 1.791 0 3.504-.336 5.078-.95zm9.892-18.71A15.963 15.963 0 0 1 32 16c0 1.993-.364 3.9-1.03 5.66a6.948 6.948 0 0 0-1.92-.582c.614-1.574.95-3.287.95-5.078 0-1.791-.336-3.504-.95-5.078a6.948 6.948 0 0 0 1.92-.582zm-29.94 0c.598.281 1.243.48 1.92.582A13.965 13.965 0 0 0 2 16c0 1.791.336 3.504.95 5.078-.677.102-1.322.3-1.92.582A15.964 15.964 0 0 1 0 16c0-1.993.364-3.9 1.03-5.66zM16 0c1.993 0 3.9.364 5.66 1.03a6.948 6.948 0 0 0-.582 1.92A13.965 13.965 0 0 0 16 2c-1.791 0-3.504.336-5.078.95a6.948 6.948 0 0 0-.582-1.92A15.964 15.964 0 0 1 16 0z"}))},WEt=zEt;var NB={};J(NB,{icon:()=>qEt});var zTr=T(z());var HEt=["title","titleId"];function Mce(){return Mce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $Et(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}var ZEt=function(t){var r=t.title,n=t.titleId,o=VEt(t,HEt);return l("svg",Mce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 0c5.523 0 10 4.477 10 10s-4.477 10-10 10S6 15.523 6 10 10.477 0 16 0zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16z"}),l("path",{d:"M8.4 19.288c.492.402 1.015.766 1.566 1.087L7.26 23.682a4 4 0 1 1-1.437-1.243l2.578-3.151zm15.2 0 2.577 3.15a4 4 0 1 1-1.437 1.243l-2.706-3.306a12.032 12.032 0 0 0 1.565-1.087zM4 24a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm24 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4zM17 6v3h3v2h-3v3h-2v-3h-3V9h3V6h2z",className:"euiIcon__fillSecondary"}))},qEt=ZEt;var FB={};J(FB,{icon:()=>KEt});var HTr=T(z());var UEt=["title","titleId"];function Ace(){return Ace=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function JEt(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}var XEt=function(t){var r=t.title,n=t.titleId,o=GEt(t,UEt);return l("svg",Ace({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 0 1-16 16Zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0 0 16 2Z"}),l("path",{d:"M23 15h-6V9h-2v6H9v2h6v6h2v-6h6z",className:"euiIcon__fillSecondary"}))},KEt=XEt;var BB={};J(BB,{icon:()=>r9t});var $Tr=T(z());var YEt=["title","titleId"];function Rce(){return Rce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function e9t(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}var t9t=function(t){var r=t.title,n=t.titleId,o=QEt(t,YEt);return l("svg",Rce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 20v10h10v2H0V20h2zm30 0v12H20v-2h10V20h2zM12 4a8 8 0 1 1 0 16 8 8 0 0 1 0-16zm0 2a6 6 0 1 0 0 12 6 6 0 0 0 0-12zm0-6v2H2v10H0V0h12zm20 0v12h-2V2H20V0h12z"}),l("path",{d:"M21.997 12.251c-.017.689-.104 1.36-.253 2.006a6 6 0 1 1-7.487 7.487c-.646.15-1.317.236-2.006.253a8 8 0 1 0 9.746-9.746z",className:"euiIcon__fillSecondary"}))},r9t=t9t;var zB={};J(zB,{icon:()=>s9t});var qTr=T(z());var n9t=["title","titleId"];function Dce(){return Dce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function i9t(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}var a9t=function(t){var r=t.title,n=t.titleId,o=o9t(t,n9t);return l("svg",Dce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 12v6h6v2H0v-8h2zm18 0v8h-8v-2h6v-6h2zM8 0v2H2v6H0V0h8zm12 0v8h-2V2h-6V0h8z"}),l("path",{d:"M16 24a4 4 0 1 1 0 8 4 4 0 0 1 0-8zm12 0a4 4 0 1 1 0 8 4 4 0 0 1 0-8zm-12 1.75a2.25 2.25 0 1 0 0 4.5 2.25 2.25 0 0 0 0-4.5zm12 0a2.25 2.25 0 1 0 0 4.5 2.25 2.25 0 0 0 0-4.5zM28 12a4 4 0 1 1 0 8 4 4 0 0 1 0-8zm0 1.75a2.25 2.25 0 1 0 0 4.5 2.25 2.25 0 0 0 0-4.5zM10 6a4 4 0 1 1 0 8 4 4 0 0 1 0-8zm0 1.75a2.25 2.25 0 1 0 0 4.5 2.25 2.25 0 0 0 0-4.5z",className:"euiIcon__fillSecondary"}))},s9t=a9t;var WB={};J(WB,{icon:()=>d9t});var GTr=T(z());var l9t=["title","titleId"];function Lce(){return Lce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function c9t(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}var p9t=function(t){var r=t.title,n=t.titleId,o=u9t(t,l9t);return l("svg",Lce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M24 0a8 8 0 1 1-4.906 14.32l-4.774 4.774a8 8 0 1 1-1.414-1.414l4.774-4.774A8 8 0 0 1 24 0zM8 18a6 6 0 1 0 0 12 6 6 0 0 0 0-12zM24 2a6 6 0 1 0 0 12 6 6 0 0 0 0-12z"}),l("path",{d:"M32 20v12H20V20h12zm-2 2h-8v8h8v-8zM12 0v12H0V0h12zm-2 2H2v8h8V2z",className:"euiIcon__fillSecondary"}))},d9t=p9t;var HB={};J(HB,{icon:()=>g9t});var XTr=T(z());var f9t=["title","titleId"];function Nce(){return Nce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function m9t(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}var v9t=function(t){var r=t.title,n=t.titleId,o=h9t(t,f9t);return l("svg",Nce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6 2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5Z"}),l("path",{fillRule:"evenodd",d:"M4.5 0A1.5 1.5 0 0 0 3 1.5v13A1.5 1.5 0 0 0 4.5 16h7a1.5 1.5 0 0 0 1.5-1.5v-13A1.5 1.5 0 0 0 11.5 0h-7ZM4 1.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5V4H4V1.5ZM4 13v1.5a.5.5 0 0 0 .5.5h7a.5.5 0 0 0 .5-.5V13H4Zm0-1h8V5H4v7Z",clipRule:"evenodd"}))},g9t=v9t;var VB={};J(VB,{icon:()=>x9t});var YTr=T(z());var y9t=["title","titleId"];function Fce(){return Fce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function w9t(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}var O9t=function(t){var r=t.title,n=t.titleId,o=b9t(t,y9t);return l("svg",Fce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.796 9.048c-1.552-2.238-1.199-5.323.61-8.1-3.47-.12-6.6 2.232-7.269 5.672-.742 3.82 1.83 7.533 5.749 8.294a7.226 7.226 0 0 0 7.526-3.218c-2.794.177-5.27-.711-6.616-2.648Z"}))},x9t=O9t;var $B={};J($B,{icon:()=>P9t});var eCr=T(z());var _9t=["title","titleId"];function Bce(){return Bce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function I9t(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}var E9t=function(t){var r=t.title,n=t.titleId,o=S9t(t,_9t);return l("svg",Bce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M14.883 7.644a.5.5 0 0 1 .006.707l-1.984 2.016a.5.5 0 0 1-.856-.347l-.009-1.004-3.024.024V12h1a.5.5 0 0 1 .354.854l-2 2a.5.5 0 0 1-.707 0l-2-2A.5.5 0 0 1 6.016 12h1V9.057l-3.008.024.008.995a.5.5 0 0 1-.85.36L1.148 8.454a.5.5 0 0 1-.005-.707L3.127 5.73a.5.5 0 0 1 .857.347l.008 1.004 3.024-.025V4h-1a.5.5 0 0 1-.353-.854l2-2a.5.5 0 0 1 .707 0l2 2a.5.5 0 0 1-.354.854h-1v3.04l3.008-.024-.008-.996a.5.5 0 0 1 .85-.36l2.017 1.984Z"}))},P9t=E9t;var ZB={};J(ZB,{icon:()=>M9t});var rCr=T(z());var k9t=["title","titleId"];function zce(){return zce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function T9t(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}var C9t=function(t){var r=t.title,n=t.titleId,o=j9t(t,k9t);return l("svg",zce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M1 1h14v14H1V1zm13 12v1H2V2h12v11zM6 6h4v4H6V6zm-1 5V5h6v6H5z",clipRule:"evenodd"}))},M9t=C9t;var qB={};J(qB,{icon:()=>N9t});var oCr=T(z());var A9t=["title","titleId"];function Wce(){return Wce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function D9t(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}var L9t=function(t){var r=t.title,n=t.titleId,o=R9t(t,A9t);return l("svg",Wce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.5 1a.5.5 0 0 1 0 1H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14H5.5a.5.5 0 1 1 0 1H3.006A2.005 2.005 0 0 1 1 12.994V3.006C1 1.898 1.897 1 3.006 1H5.5Zm7.494 0c1.059 0 1.924.818 2 1.856l.006.15v9.988a2.005 2.005 0 0 1-1.856 2l-.15.006H10.5a.5.5 0 0 1-.09-.992L10.5 14h2.494c.516 0 .941-.388 1-.888l.006-.118V3.006c0-.516-.388-.941-.888-1L12.994 2H10.5a.5.5 0 0 1-.09-.992L10.5 1h2.494ZM5 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"}))},N9t=L9t;var UB={};J(UB,{icon:()=>H9t});var aCr=T(z());var F9t=["title","titleId"];function Hce(){return Hce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function z9t(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}var W9t=function(t){var r=t.title,n=t.titleId,o=B9t(t,F9t);return l("svg",Hce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 4a.5.5 0 0 1 .5.5V6H10a.5.5 0 0 1 0 1H8.5v1.5a.5.5 0 0 1-1 0V7H6a.5.5 0 0 1 0-1h1.5V4.5A.5.5 0 0 1 8 4Z"}),l("path",{fillRule:"evenodd",d:"M1 4a2.5 2.5 0 0 1 2.5-2.5h9A2.5 2.5 0 0 1 15 4v5a2.5 2.5 0 0 1-2.5 2.5H7.707L4.5 14.707V11.5h-1A2.5 2.5 0 0 1 1 9V4Zm2.5-1.5A1.5 1.5 0 0 0 2 4v5a1.5 1.5 0 0 0 1.5 1.5h2v1.793L7.293 10.5H12.5A1.5 1.5 0 0 0 14 9V4a1.5 1.5 0 0 0-1.5-1.5h-9Z",clipRule:"evenodd"}))},H9t=W9t;var GB={};J(GB,{icon:()=>U9t});var lCr=T(z());var V9t=["title","titleId"];function Vce(){return Vce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Z9t(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}var q9t=function(t){var r=t.title,n=t.titleId,o=$9t(t,V9t);return l("svg",Vce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.5 1.443a1 1 0 0 0-1 0L2.572 4.29a1 1 0 0 0-.5.866v5.69a1 1 0 0 0 .5.866L7.5 14.557a1 1 0 0 0 1 0l4.928-2.846a1 1 0 0 0 .5-.866v-5.69a1 1 0 0 0-.5-.866L8.5 1.443ZM9 .577l4.928 2.846a2 2 0 0 1 1 1.732v5.69a2 2 0 0 1-1 1.732L9 15.423a2 2 0 0 1-2 0l-4.928-2.846a2 2 0 0 1-1-1.732v-5.69a2 2 0 0 1 1-1.732L7 .577a2 2 0 0 1 2 0Z"}))},U9t=q9t;var JB={};J(JB,{icon:()=>Y9t});var cCr=T(z());var G9t=["title","titleId"];function $ce(){return $ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function X9t(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}var K9t=function(t){var r=t.title,n=t.titleId,o=J9t(t,G9t);return l("svg",$ce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.808 10.197H6.796L5.859 13H4.485l.937-2.803H3.966l.219-1.25h1.647l.608-1.805H4.991l.226-1.251h1.64l.95-2.844h1.368l-.95 2.844h1.018l.95-2.844h1.374l-.95 2.844h1.51l-.218 1.25h-1.702l-.608 1.805h1.497l-.219 1.251H9.182L8.252 13H6.878l.93-2.803zm-.602-1.25h1.012l.615-1.805H7.814l-.608 1.804z"}))},Y9t=K9t;var XB={};J(XB,{icon:()=>nPt});var dCr=T(z());var Q9t=["title","titleId"];function Zce(){return Zce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function tPt(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}var rPt=function(t){var r=t.title,n=t.titleId,o=ePt(t,Q9t);return l("svg",Zce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m6.517 12.271 1.254-1.254a1.5 1.5 0 1 1-1.254 1.254Zm2.945-2.944.74-.74c.361.208.694.467.987.772a.5.5 0 0 1-.721.693 3.424 3.424 0 0 0-1.006-.725Zm2.162-2.163.716-.715c.308.232.599.49.87.772a.5.5 0 1 1-.722.692 6.26 6.26 0 0 0-.864-.749ZM7.061 6.07A6.198 6.198 0 0 0 3.54 7.885a.5.5 0 0 1-.717-.697 7.199 7.199 0 0 1 5.309-2.187l-1.07 1.07Zm6.672-1.014.71-.71c.274.23.536.476.786.736a.5.5 0 0 1-.721.692 9.1 9.1 0 0 0-.775-.718Zm-3.807-1.85A9.06 9.06 0 0 0 8 3a8.99 8.99 0 0 0-6.469 2.734.5.5 0 1 1-.717-.697A9.99 9.99 0 0 1 8 2c.944 0 1.868.131 2.75.382l-.824.824ZM8 13a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1Zm-5.424 1a.5.5 0 0 1-.707-.707L14.146 1.146a.5.5 0 0 1 .708.708L2.576 14Z"}))},nPt=rPt;var KB={};J(KB,{icon:()=>lPt});var hCr=T(z());var oPt=["title","titleId"];function qce(){return qce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function aPt(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}var sPt=function(t){var r=t.title,n=t.titleId,o=iPt(t,oPt);return l("svg",qce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 14a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Zm0-1a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1Zm3.189-3.64a.5.5 0 0 1-.721.692A3.408 3.408 0 0 0 8 9c-.937 0-1.813.378-2.453 1.037a.5.5 0 0 1-.717-.697A4.408 4.408 0 0 1 8 8c1.22 0 2.361.497 3.189 1.36Zm2.02-2.14a.5.5 0 1 1-.721.693A6.2 6.2 0 0 0 8 6a6.199 6.199 0 0 0-4.46 1.885.5.5 0 0 1-.718-.697A7.199 7.199 0 0 1 8 5a7.2 7.2 0 0 1 5.21 2.22Zm2.02-2.138a.5.5 0 0 1-.721.692A8.99 8.99 0 0 0 8 3a8.99 8.99 0 0 0-6.469 2.734.5.5 0 1 1-.717-.697A9.99 9.99 0 0 1 8 2a9.99 9.99 0 0 1 7.23 3.082Z"}))},lPt=sPt;var YB={};J(YB,{icon:()=>fPt});var vCr=T(z());var uPt=["title","titleId"];function Uce(){return Uce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pPt(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}var dPt=function(t){var r=t.title,n=t.titleId,o=cPt(t,uPt);return l("svg",Uce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m14.447 3.724-6-3a1 1 0 0 0-.894 0l-6 3A1 1 0 0 0 1 4.618v6.764a1 1 0 0 0 .553.894l6 3a1 1 0 0 0 .894 0l6-3a1 1 0 0 0 .553-.894V4.618a1 1 0 0 0-.553-.894ZM5.871 5.897l5.343-2.672 2.158 1.079L8 6.943ZM8 1.618l2.096 1.048-5.353 2.677-2.115-1.039ZM2 5.11l2.25 1.105V9a.5.5 0 0 0 1 0V6.706L7.5 7.811v6.321L2 11.382Zm6.5 9.022v-6.32L14 5.11v6.272Z"}))},fPt=dPt;var QB={};J(QB,{icon:()=>yPt});var yCr=T(z());var hPt=["title","titleId"];function Gce(){return Gce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vPt(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}var gPt=function(t){var r=t.title,n=t.titleId,o=mPt(t,hPt);return l("svg",Gce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M3 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h5a4.995 4.995 0 0 1-.584-1H3V2h7v2a1 1 0 0 0 1 1h2v2.1c.348.07.682.177 1 .316V4a1 1 0 0 0-.293-.707l-2-2A1 1 0 0 0 11 1H3zm13 11a4 4 0 1 1-8 0 4 4 0 0 1 8 0zm-1.646-1.354a.5.5 0 0 1 0 .708l-2.5 2.5a.5.5 0 0 1-.708 0l-1-1a.5.5 0 0 1 .708-.708l.646.647 2.146-2.147a.5.5 0 0 1 .708 0z"}))},yPt=gPt;var ez={};J(ez,{icon:()=>_Pt});var wCr=T(z());var bPt=["title","titleId"];function Jce(){return Jce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function OPt(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}var xPt=function(t){var r=t.title,n=t.titleId,o=wPt(t,bPt);return l("svg",Jce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M3 1a1 1 0 0 1 1-1h8a1 1 0 0 1 .707.293l2 2A1 1 0 0 1 15 3v5a4.995 4.995 0 0 0-1-.584V4h-2a1 1 0 0 1-1-1V1H4v12h3.1c.07.348.177.682.316 1H4a1 1 0 0 1-1-1V1zm5 14H2V2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h7a5.029 5.029 0 0 1-1-1zm8-3a4 4 0 1 1-8 0 4 4 0 0 1 8 0zm-1.646-1.354a.5.5 0 0 1 0 .708l-2.5 2.5a.5.5 0 0 1-.708 0l-1-1a.5.5 0 0 1 .708-.708l.646.647 2.146-2.147a.5.5 0 0 1 .708 0z"}))},_Pt=xPt;var tz={};J(tz,{icon:()=>kPt});var xCr=T(z());var SPt=["title","titleId"];function Xce(){return Xce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function EPt(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}var PPt=function(t){var r=t.title,n=t.titleId,o=IPt(t,SPt);return l("svg",Xce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 0 1 3.999 8.17V6.662h7.994V8.17Zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486ZM4 5.658h1.262V1.005H4v4.653Zm2.261 0h1.244V1.005H6.26v4.653Zm2.244 0h1.235V1.005H8.504v4.653Zm2.234 0h1.254V1.005h-1.254v4.653ZM3.008 0 3 8.17a2.509 2.509 0 0 0 2.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 0 0 2.498-2.512L13 0H3.008Z"}))},kPt=PPt;var rz={};J(rz,{icon:()=>APt});var SCr=T(z());var jPt=["title","titleId"];function Kce(){return Kce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function CPt(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}var MPt=function(t){var r=t.title,n=t.titleId,o=TPt(t,jPt);return l("svg",Kce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm2 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM5 6a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm4-2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm2 2a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}),l("path",{d:"M8 1a7 7 0 0 0 0 14h2a2 2 0 1 0 0-4 1 1 0 1 1 0-2h3.98C14.515 9 15 8.583 15 8a7 7 0 0 0-7-7ZM2 8a6 6 0 0 1 12-.005.035.035 0 0 1-.02.005H10a2 2 0 1 0 0 4 1 1 0 1 1 0 2H8a6 6 0 0 1-6-6Z"}))},APt=MPt;var nz={};J(nz,{icon:()=>FPt});var ECr=T(z());var RPt=["title","titleId"];function Yce(){return Yce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function LPt(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}var NPt=function(t){var r=t.title,n=t.titleId,o=DPt(t,RPt);return l("svg",Yce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.84 2.019 3.046 8.57c-.987.952-1.133 2.517-.199 3.516.951 1.021 2.58 1.106 3.64.19.034-.03.068-.061.1-.092l5.655-5.452a.484.484 0 0 0 0-.703.53.53 0 0 0-.729 0L5.92 11.421c-.572.551-1.505.657-2.131.163a1.455 1.455 0 0 1-.118-2.211l6.899-6.651a2.646 2.646 0 0 1 3.644 0 2.422 2.422 0 0 1 0 3.513L7.3 12.901c-1.333 1.285-3.497 1.493-4.95.336-1.54-1.22-1.764-3.411-.5-4.897a3.33 3.33 0 0 1 .238-.252l5.78-5.572a.484.484 0 0 0 0-.703.53.53 0 0 0-.73 0l-5.78 5.572a4.36 4.36 0 0 0 0 6.324c2.188 2.109 5.202 1.31 6.66-.095l6.925-6.676a3.39 3.39 0 0 0 0-4.92C13.534.66 11.25.66 9.841 2.019z"}))},FPt=NPt;var oz={};J(oz,{icon:()=>VPt});var kCr=T(z());var BPt=["title","titleId"];function Qce(){return Qce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function WPt(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}var HPt=function(t){var r=t.title,n=t.titleId,o=zPt(t,BPt);return l("svg",Qce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.664 14.871a7 7 0 0 1-2.42-12.778.5.5 0 0 1 .612.06c.456.431 8.216 8.212 8.98 9.002a.5.5 0 0 1 .063.618 7.002 7.002 0 0 1-7.235 3.098Zm6.168-3.312a1961.733 1961.733 0 0 0-8.377-8.4 6 6 0 1 0 8.378 8.4Zm2.095-2.548a.5.5 0 1 1-.99-.144c.01-.066.01-.066.018-.133a6.007 6.007 0 0 0-.034-1.714.5.5 0 1 1 .987-.163c.108.655.122 1.326.04 1.999l-.021.155Zm-1.273-5.138a.5.5 0 1 1-.808.59 6.026 6.026 0 0 0-1.304-1.308.5.5 0 0 1 .59-.806 7.026 7.026 0 0 1 1.522 1.524ZM9.169 1.098a.5.5 0 1 1-.166.986 6.105 6.105 0 0 0-1.849-.026.5.5 0 0 1-.14-.99 7.02 7.02 0 0 1 2.155.03Z"}))},VPt=HPt;var iz={};J(iz,{icon:()=>GPt});var TCr=T(z());var $Pt=["title","titleId"];function epe(){return epe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function qPt(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}var UPt=function(t){var r=t.title,n=t.titleId,o=ZPt(t,$Pt);return l("svg",epe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 2a1 1 0 0 0-1 1v10a1 1 0 1 0 2 0V3a1 1 0 0 0-1-1zm6 0a1 1 0 0 0-1 1v10a1 1 0 1 0 2 0V3a1 1 0 0 0-1-1z"}))},GPt=UPt;var az={};J(az,{icon:()=>QPt});var MCr=T(z());var JPt=["title","titleId"];function tpe(){return tpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function KPt(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}var YPt=function(t){var r=t.title,n=t.titleId,o=XPt(t,JPt);return l("svg",tpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.586 2.586A2 2 0 0 0 0 4h1a1 1 0 0 1 1-1V2a2 2 0 0 0-1.414.586ZM2 2h10.5a.5.5 0 0 1 0 1H2V2ZM0 4h1v6.5a.5.5 0 0 1-1 0V4Zm2.586.586A2 2 0 0 0 2 6h1a1 1 0 0 1 1-1V4a2 2 0 0 0-1.414.586Zm0 8.828A2 2 0 0 1 2 12h1a1 1 0 0 0 1 1v1a2 2 0 0 1-1.414-.586Zm12.828-8.828A2 2 0 0 1 16 6h-1a1 1 0 0 0-1-1V4a2 2 0 0 1 1.414.586Zm0 8.828A2 2 0 0 0 16 12h-1a1 1 0 0 1-1 1v1a2 2 0 0 0 1.414-.586ZM4 4h10v1H4zM3 7h12v1H3zm1 6h10v1H4zM2 6h1v6H2zm13 0h1v6h-1zm-5.5 4a.5.5 0 0 1 0 1H7.496a.5.5 0 0 1 0-1H9.5Zm4 0a.5.5 0 0 1 0 1h-2.004a.5.5 0 0 1 0-1H13.5Z"}))},QPt=YPt;var sz={};J(sz,{icon:()=>okt});var RCr=T(z());var ekt=["title","titleId"];function rpe(){return rpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rkt(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}var nkt=function(t){var r=t.title,n=t.titleId,o=tkt(t,ekt);return l("svg",rpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12.148 3.148 11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 0 1-.708 0 .502.502 0 0 1 0-.708l8.002-7.998ZM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 0 1 0 1.414l-9 9A.997.997 0 0 1 5 15H2a1 1 0 0 1-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0 1 11 1ZM5 14H2v-3l3 3Z"}))},okt=nkt;var lz={};J(lz,{icon:()=>ukt});var LCr=T(z());var ikt=["title","titleId"];function npe(){return npe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function skt(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}var lkt=function(t){var r=t.title,n=t.titleId,o=akt(t,ikt);return l("svg",npe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M5 8c1.105 0 2-1.12 2-2.5S6.105 3 5 3 3 4.12 3 5.5 3.895 8 5 8zm0-1c.356 0 1-.452 1-1.5S5.356 4 5 4s-1 .452-1 1.5S4.644 7 5 7z"}),l("path",{d:"M10.5 3H12L5.5 13H4l6.5-10z"}),l("path",{fillRule:"evenodd",d:"M13 10.5c0 1.38-.895 2.5-2 2.5s-2-1.12-2-2.5S9.895 8 11 8s2 1.12 2 2.5zm-1 0c0 1.048-.644 1.5-1 1.5s-1-.452-1-1.5.644-1.5 1-1.5 1 .452 1 1.5z"}))},ukt=lkt;var uz={};J(uz,{icon:()=>hkt});var FCr=T(z());var ckt=["title","titleId"];function ope(){return ope=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function dkt(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}var fkt=function(t){var r=t.title,n=t.titleId,o=pkt(t,ckt);return l("svg",ope({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 11h4.5a.5.5 0 1 0 0-1h-10a.5.5 0 0 0 0 1H7v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11ZM4 4h1v6H4V4Zm6 0h1v6h-1V4ZM4.286 2C4.08 2 4 2.063 4 2v1c0-.063.08 0 .286 0h6.428C10.92 3 11 2.937 11 3V2c0 .063-.08 0-.286 0H4.286Zm0-1h6.428C11.424 1 12 1.448 12 2v1c0 .552-.576 1-1.286 1H4.286C3.576 4 3 3.552 3 3V2c0-.552.576-1 1.286-1Z"}))},hkt=fkt;var cz={};J(cz,{icon:()=>bkt});var zCr=T(z());var mkt=["title","titleId"];function ipe(){return ipe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function gkt(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}var ykt=function(t){var r=t.title,n=t.titleId,o=vkt(t,mkt);return l("svg",ipe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9 11h4.5a.5.5 0 1 0 0-1h-10a.5.5 0 1 0 0 1H8v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11ZM5 4h7v6H5V4Zm.286-3h6.428C12.424 1 13 1.448 13 2v1c0 .552-.576 1-1.286 1H5.286C4.576 4 4 3.552 4 3V2c0-.552.576-1 1.286-1Z"}))},bkt=ykt;var pz={};J(pz,{icon:()=>Skt});var HCr=T(z());var wkt=["title","titleId"];function ape(){return ape=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function xkt(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}var _kt=function(t){var r=t.title,n=t.titleId,o=Okt(t,wkt);return l("svg",ape({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 3h9.5a2.5 2.5 0 0 1 0 5H6v1L4 7.5 6 6v1h5.5a1.5 1.5 0 0 0 0-3H2V3Zm1 3H2v3h1V6Zm0 4H2v3h1v-3Zm3 0-2 1.5L6 13v-1h5.5a2.5 2.5 0 0 0 2.165-3.75 3.497 3.497 0 0 1-.865.5A1.5 1.5 0 0 1 11.5 11H6v-1Z"}))},Skt=_kt;var dz={};J(dz,{icon:()=>jkt});var $Cr=T(z());var Ikt=["title","titleId"];function spe(){return spe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Pkt(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}var kkt=function(t){var r=t.title,n=t.titleId,o=Ekt(t,Ikt);return l("svg",spe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 2H7v3h1V4h3V3H8V2Zm-5 8H2v3h1v-1h3v-1H3v-1Zm4 0h1v1h3v1H8v1H7v-3Zm6 0h-1v3h1v-1h1v-1h-1v-1ZM5 6h1v1h3v1H6v1H5V6Zm6 0h-1v3h1V8h3V7h-3V6Zm1-4h1v1h1v1h-1v1h-1V2ZM6 3H2v1h4V3ZM2 7h2v1H2V7Z"}))},jkt=kkt;var fz={};J(fz,{icon:()=>Rkt});var qCr=T(z());var Tkt=["title","titleId"];function lpe(){return lpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Mkt(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}var Akt=function(t){var r=t.title,n=t.titleId,o=Ckt(t,Tkt);return l("svg",lpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M2.89 13.847 11.239 5.5a.522.522 0 0 0-.737-.737L2.154 13.11a.522.522 0 0 0 .738.738ZM14 6.696a.522.522 0 1 1-1.043 0v-3.13a.522.522 0 0 0-.522-.523h-3.13a.522.522 0 1 1 0-1.043h3.13C13.299 2 14 2.7 14 3.565v3.13Z",clipRule:"evenodd"}))},Rkt=Akt;var hz={};J(hz,{icon:()=>Bkt});var GCr=T(z());var Dkt=["title","titleId"];function upe(){return upe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Nkt(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}var Fkt=function(t){var r=t.title,n=t.titleId,o=Lkt(t,Dkt);return l("svg",upe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.608 3.063C4.345 2.895 4 3.089 4 3.418v9.167c0 .329.345.523.608.356l7.2-4.584a.426.426 0 0 0 0-.711l-7.2-4.583Zm.538-.844 7.2 4.583a1.426 1.426 0 0 1 0 2.399l-7.2 4.583C4.21 14.38 3 13.696 3 12.585V3.418C3 2.307 4.21 1.624 5.146 2.22Z"}))},Bkt=Fkt;var mz={};J(mz,{icon:()=>$kt});var XCr=T(z());var zkt=["title","titleId"];function cpe(){return cpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Hkt(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}var Vkt=function(t){var r=t.title,n=t.titleId,o=Wkt(t,zkt);return l("svg",cpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m12.345 6.801-7.2-4.581C4.21 1.625 3 2.308 3 3.419v9.162c0 1.111 1.21 1.794 2.146 1.199l7.2-4.581a1.425 1.425 0 0 0 0-2.398z"}))},$kt=Vkt;var vz={};J(vz,{icon:()=>Jkt});var YCr=T(z());var Zkt=["title","titleId"];function ppe(){return ppe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ukt(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}var Gkt=function(t){var r=t.title,n=t.titleId,o=qkt(t,Zkt);return l("svg",ppe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.25 3a.5.5 0 0 1 .5.5v3.75h3.75a.5.5 0 0 1 .5.5v.5a.5.5 0 0 1-.5.5H8.75v3.75a.5.5 0 0 1-.5.5h-.5a.5.5 0 0 1-.5-.5V8.75H3.5a.5.5 0 0 1-.5-.5v-.5a.5.5 0 0 1 .5-.5h3.75V3.5a.5.5 0 0 1 .5-.5h.5Z"}))},Jkt=Gkt;var gz={};J(gz,{icon:()=>ejt});var eMr=T(z());var Xkt=["title","titleId"];function dpe(){return dpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ykt(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}var Qkt=function(t){var r=t.title,n=t.titleId,o=Kkt(t,Xkt);return l("svg",dpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 7h3.5a.5.5 0 1 1 0 1H8v3.5a.5.5 0 1 1-1 0V8H3.5a.5.5 0 0 1 0-1H7V3.5a.5.5 0 0 1 1 0V7Zm-.5-7C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0Zm0 .882a6.618 6.618 0 1 0 0 13.236A6.618 6.618 0 0 0 7.5.882Z"}))},ejt=Qkt;var yz={};J(yz,{icon:()=>ijt});var rMr=T(z());var tjt=["title","titleId"];function fpe(){return fpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function njt(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}var ojt=function(t){var r=t.title,n=t.titleId,o=rjt(t,tjt);return l("svg",fpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 7V3.5a.5.5 0 0 0-1 0V7H3.5a.5.5 0 0 0 0 1H7v3.5a.5.5 0 1 0 1 0V8h3.5a.5.5 0 1 0 0-1H8Zm-.5 8a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Z"}))},ijt=ojt;var bz={};J(bz,{icon:()=>cjt});var oMr=T(z());var ajt=["title","titleId"];function hpe(){return hpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ljt(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}var ujt=function(t){var r=t.title,n=t.titleId,o=sjt(t,ajt);return l("svg",hpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 4.389V7h2.611c.215 0 .389.224.389.5s-.174.5-.389.5H8v2.611c0 .215-.224.389-.5.389s-.5-.174-.5-.389V8H4.389C4.174 8 4 7.776 4 7.5s.174-.5.389-.5H7V4.389C7 4.174 7.224 4 7.5 4s.5.174.5.389Z"}),l("path",{fillRule:"evenodd",d:"M1 3a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3Zm2-1h9a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Z"}))},cjt=ujt;var wz={};J(wz,{icon:()=>mjt});var aMr=T(z());var pjt=["title","titleId"];function mpe(){return mpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fjt(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}var hjt=function(t){var r=t.title,n=t.titleId,o=djt(t,pjt);return l("svg",mpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13 8.5a.5.5 0 1 1 1 0V12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h3.5a.5.5 0 0 1 0 1H4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V8.5Zm-5.12.339a.5.5 0 1 1-.706-.707L13.305 2H10.5a.5.5 0 1 1 0-1H14a1 1 0 0 1 1 1v3.5a.5.5 0 1 1-1 0V2.72L7.88 8.838Z"}))},mjt=hjt;var Oz={};J(Oz,{icon:()=>wjt});var lMr=T(z());var vjt=["title","titleId"];function vpe(){return vpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yjt(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}var bjt=function(t){var r=t.title,n=t.titleId,o=gjt(t,vjt);return l("svg",vpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.171 5.15 10.114 7H1.556C1.249 7 1 7.224 1 7.5s.249.5.556.5h8.526l-1.91 1.82a.52.52 0 0 0 0 .77c.227.213.6.213.828 0l2.05-1.95a1.552 1.552 0 0 0 0-2.31L9 4.38a.617.617 0 0 0-.829 0 .52.52 0 0 0 0 .77z"}),l("path",{d:"M6.804 12.792A.993.993 0 0 1 6 11.82V10H5v1.826c0 .945.673 1.76 1.608 1.945l6 1.19A1.992 1.992 0 0 0 15 13.016V1.984A2 2 0 0 0 12.608.04l-6 1.19C5.673 1.415 5 2.23 5 3.175V5h1V3.18c0-.472.336-.879.804-.972l6-1.189A1 1 0 0 1 14 1.991v11.018a.995.995 0 0 1-1.196.972l-6-1.19z"}))},wjt=bjt;var xz={};J(xz,{icon:()=>Ijt});var cMr=T(z());var Ojt=["title","titleId"];function gpe(){return gpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _jt(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}var Sjt=function(t){var r=t.title,n=t.titleId,o=xjt(t,Ojt);return l("svg",gpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 14A6 6 0 1 1 8 2a6 6 0 0 1 0 12Zm0-1A5 5 0 1 0 8 3a5 5 0 0 0 0 10Zm-.186-1.065A.785.785 0 0 1 7 11.12c0-.48.34-.82.814-.82.475 0 .809.34.809.82 0 .475-.334.815-.809.815ZM5.9 6.317C5.96 5.168 6.755 4.4 8.048 4.4c1.218 0 2.091.759 2.091 1.8 0 .736-.36 1.304-1.03 1.707-.56.33-.717.56-.717 1.022v.305l-.1.1H7.47l-.1-.1v-.431c-.005-.646.302-1.104.987-1.514.527-.322.708-.59.708-1.047 0-.536-.416-.91-1.05-.91-.652 0-1.064.374-1.112.998l-.1.092H6l-.1-.105Z"}))},Ijt=Sjt;var _z={};J(_z,{icon:()=>Tjt});var dMr=T(z());var Ejt=["title","titleId"];function ype(){return ype=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kjt(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}var jjt=function(t){var r=t.title,n=t.titleId,o=Pjt(t,Ejt);return l("svg",ype({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.848 2.47a1 1 0 0 1-.318 1.378A7.284 7.284 0 0 0 3.75 7.01 3 3 0 1 1 1 10v-.027a3.521 3.521 0 0 1 .01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 0 1 1.378.318zm7 0a1 1 0 0 1-.318 1.378 7.283 7.283 0 0 0-2.78 3.162A3 3 0 1 1 8 10v-.027a3.521 3.521 0 0 1 .01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 0 1 1.378.318z"}))},Tjt=jjt;var Sz={};J(Sz,{icon:()=>Djt});var hMr=T(z());var Cjt=["title","titleId"];function bpe(){return bpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ajt(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}var Rjt=function(t){var r=t.title,n=t.titleId,o=Mjt(t,Cjt);return l("svg",bpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.228 2.942a.5.5 0 1 1-.538.842A5 5 0 1 0 13 8a.5.5 0 1 1 1 0 6 6 0 1 1-2.772-5.058ZM14 1.5v3A1.5 1.5 0 0 1 12.5 6h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 1 1 1 0Z"}))},Djt=Rjt;var Iz={};J(Iz,{icon:()=>zjt});var vMr=T(z());var Ljt=["title","titleId"];function wpe(){return wpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Fjt(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}var Bjt=function(t){var r=t.title,n=t.titleId,o=Njt(t,Ljt);return l("svg",wpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.684.895 6.074.358a1 1 0 0 0-1.296.753L4.2 4H2.5a.5.5 0 0 0 0 1h1.626a4.007 4.007 0 0 0 .11 2.359l-2.072-.345A1 1 0 0 0 1 8v1c.364 0 .706.097 1 .268V8l1 .167 1.859.31 2.163.36.478.08v6L2 14v-1.268A1.99 1.99 0 0 1 1 13v1a1 1 0 0 0 .836.986l6 1c.108.018.22.018.328 0l6-1A1 1 0 0 0 15 14v-1a1.99 1.99 0 0 1-1-.268V14l-5.5.917v-6l.478-.08 2.163-.36L13 8.166 14 8v1.268A1.99 1.99 0 0 1 15 9V8a1 1 0 0 0-1.164-.986l-2.073.345A3.991 3.991 0 0 0 11.874 5H13.5a.5.5 0 0 0 0-1h-1.7l-.578-2.89A1 1 0 0 0 9.925.359L8.316.895a1 1 0 0 1-.632 0zm2.88 6.664A3.013 3.013 0 0 0 10.83 5H5.17a3.013 3.013 0 0 0 .266 2.559L8 7.986l2.564-.427zM10.8 4H9.2L9 3l1.5-.5.3 1.5zM1 12a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm14 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"}))},zjt=Bjt;var Ez={};J(Ez,{icon:()=>Zjt});var yMr=T(z());var Wjt=["title","titleId"];function Ope(){return Ope=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Vjt(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}var $jt=function(t){var r=t.title,n=t.titleId,o=Hjt(t,Wjt);return l("svg",Ope({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.994 4c1.059 0 1.924.818 2 1.856l.006.15v1.988a2.005 2.005 0 0 1-1.856 2L12 10H3.484l1.91 1.82a.52.52 0 0 1 0 .77.616.616 0 0 1-.829 0l-2.05-1.95a1.551 1.551 0 0 1 0-2.31l2.05-1.95a.617.617 0 0 1 .83 0 .52.52 0 0 1 0 .77L3.45 9H12c.514-.003.935-.39.993-.888L13 7.994V6.006c0-.516-.388-.941-.888-1L11.994 5H9.5a.5.5 0 0 1-.09-.992L9.5 4h2.494z"}))},Zjt=$jt;var Pz={};J(Pz,{icon:()=>Xjt});var wMr=T(z());var qjt=["title","titleId"];function xpe(){return xpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Gjt(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}var Jjt=function(t){var r=t.title,n=t.titleId,o=Ujt(t,qjt);return l("svg",xpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.008 2H2.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275v11.436c0 .181.002.245.007.275.03.005.094.007.275.007h11.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V4.62c0-.13-.001-.18-.004-.204a2.654 2.654 0 0 0-.141-.147L11.73 2.145a2.654 2.654 0 0 0-.147-.141A2.654 2.654 0 0 0 11.38 2h-.388c.005.08.008.172.008.282v2.436c0 .446-.046.607-.134.77a.909.909 0 0 1-.378.378c-.163.088-.324.134-.77.134H6.282c-.446 0-.607-.046-.77-.134a.909.909 0 0 1-.378-.378C5.046 5.325 5 5.164 5 4.718V2.282c0-.11.003-.202.008-.282ZM2.282 1h9.098c.259 0 .348.01.447.032a.87.87 0 0 1 .273.113c.086.054.156.11.338.293l2.124 2.124c.182.182.239.252.293.338a.87.87 0 0 1 .113.273c.023.1.032.188.032.447v9.098c0 .446-.046.607-.134.77a.909.909 0 0 1-.378.378c-.163.088-.324.134-.77.134H2.282c-.446 0-.607-.046-.77-.134a.909.909 0 0 1-.378-.378c-.088-.163-.134-.324-.134-.77V2.282c0-.446.046-.607.134-.77a.909.909 0 0 1 .378-.378c.163-.088.324-.134.77-.134ZM6 2.282v2.436c0 .181.002.245.007.275.03.005.094.007.275.007h3.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V2.282c0-.181-.002-.245-.007-.275A2.248 2.248 0 0 0 9.718 2H6.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275ZM8 12a2 2 0 1 1 0-4 2 2 0 0 1 0 4Zm0-1a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}))},Xjt=Jjt;var kz={};J(kz,{icon:()=>tTt});var xMr=T(z());var Kjt=["title","titleId"];function _pe(){return _pe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Qjt(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}var eTt=function(t){var r=t.title,n=t.titleId,o=Yjt(t,Kjt);return l("svg",_pe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M12.5 12a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm4-2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm2-1a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm0-3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm0 2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm2-2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm6-6a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Z"}))},tTt=eTt;var jz={};J(jz,{icon:()=>aTt});var SMr=T(z());var rTt=["title","titleId"];function Spe(){return Spe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function oTt(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}var iTt=function(t){var r=t.title,n=t.titleId,o=nTt(t,rTt);return l("svg",Spe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m11.271 11.978 3.872 3.873a.502.502 0 0 0 .708 0 .502.502 0 0 0 0-.708l-3.565-3.564c2.38-2.747 2.267-6.923-.342-9.532-2.73-2.73-7.17-2.73-9.898 0-2.728 2.729-2.728 7.17 0 9.9a6.955 6.955 0 0 0 4.949 2.05.5.5 0 0 0 0-1 5.96 5.96 0 0 1-4.242-1.757 6.01 6.01 0 0 1 0-8.486c2.337-2.34 6.143-2.34 8.484 0a6.01 6.01 0 0 1 0 8.486.5.5 0 0 0 .034.738Z"}))},aTt=iTt;var Tz={};J(Tz,{icon:()=>pTt});var EMr=T(z());var sTt=["title","titleId"];function Ipe(){return Ipe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uTt(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}var cTt=function(t){var r=t.title,n=t.titleId,o=lTt(t,sTt);return l("svg",Ipe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M11.875 3.418a6 6 0 1 0 .707.707l-2.46 2.46-1.156 1.156a1 1 0 1 1-.707-.707l.757-.757a2 2 0 0 0-2.43 3.137.5.5 0 1 1-.707.707 3 3 0 0 1 3.86-4.567l.714-.714A4 4 0 1 0 8 12a.5.5 0 1 1 0 1 5 5 0 1 1 3.164-8.871l.71-.71zm.709-.709a7 7 0 1 0 .707.707l.366-.366a.5.5 0 1 0-.707-.707l-.366.366z"}))},pTt=cTt;var Cz={};J(Cz,{icon:()=>vTt});var kMr=T(z());var dTt=["title","titleId"];function Epe(){return Epe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hTt(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}var mTt=function(t){var r=t.title,n=t.titleId,o=fTt(t,dTt);return l("svg",Epe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 0 0-.707-.707l-.366.366A7 7 0 1 0 8 15a4.994 4.994 0 0 1-.597-1.03 6 6 0 1 1 4.471-10.552l-.71.71a5 5 0 1 0-4.08 8.788 5.027 5.027 0 0 1-.082-1.042A4.002 4.002 0 0 1 8 4a3.98 3.98 0 0 1 2.453.84l-.715.714a3 3 0 0 0-3.86 4.567.5.5 0 1 0 .708-.707 2 2 0 0 1 2.43-3.137l-.757.757a1 1 0 1 0 .707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 0 1 1.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 1 1-8 0 4 4 0 0 1 8 0zm-4 .5a.577.577 0 0 1-.57-.495l-.29-2.015a.867.867 0 1 1 1.718 0l-.288 2.015a.577.577 0 0 1-.57.495zm0 2.5a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"}))},vTt=mTt;var Mz={};J(Mz,{icon:()=>OTt});var TMr=T(z());var gTt=["title","titleId"];function Ppe(){return Ppe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bTt(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}var wTt=function(t){var r=t.title,n=t.titleId,o=yTt(t,gTt);return l("svg",Ppe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 1 0-.707-.707l-.366.366A7 7 0 1 0 8 15a4.994 4.994 0 0 1-.597-1.03 6 6 0 1 1 4.471-10.552l-.71.71a5 5 0 1 0-4.08 8.788 5.028 5.028 0 0 1-.082-1.042A4.002 4.002 0 0 1 8 4a3.98 3.98 0 0 1 2.453.84l-.715.714a3 3 0 0 0-3.86 4.567.5.5 0 1 0 .708-.707 2 2 0 0 1 2.43-3.137l-.757.757a1 1 0 1 0 .707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 0 1 1.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 1 1-8 0 4 4 0 0 1 8 0zm-1.646-1.354a.5.5 0 0 1 0 .707l-2.5 2.5a.5.5 0 0 1-.708 0l-1-1a.5.5 0 0 1 .708-.707l.646.647 2.146-2.147a.5.5 0 0 1 .708 0z"}))},OTt=wTt;var Az={};J(Az,{icon:()=>ETt});var MMr=T(z());var xTt=["title","titleId"];function kpe(){return kpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function STt(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}var ITt=function(t){var r=t.title,n=t.titleId,o=_Tt(t,xTt);return l("svg",kpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 6h1v1H4V6zm2 2H5V7h1v1zm0 1V8h1v1H6zm-1 1V9h1v1H5zm0 0v1H4v-1h1zm2 0h4v1H7v-1z"}),l("path",{fillRule:"evenodd",d:"M1 3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V3zm1 1h12v9H2V4z",clipRule:"evenodd"}))},ETt=ITt;var Rz={};J(Rz,{icon:()=>CTt});var RMr=T(z());var PTt=["title","titleId"];function jpe(){return jpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jTt(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}var TTt=function(t){var r=t.title,n=t.titleId,o=kTt(t,PTt);return l("svg",jpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.134 7.031 8 12.764l2.866-5.733L8 2.016 5.134 7.03ZM8 0l4 7-4 8-4-8 4-7Z"}))},CTt=TTt;var Dz={};J(Dz,{icon:()=>LTt});var LMr=T(z());var MTt=["title","titleId"];function Tpe(){return Tpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function RTt(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}var DTt=function(t){var r=t.title,n=t.titleId,o=ATt(t,MTt);return l("svg",Tpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 6.81v6.38c0 .493.448.9.992.9h7.016c.543 0 .992-.406.992-.9V6.81c0-.493-.448-.9-.992-.9H3.992c-.543 0-.992.406-.992.9ZM6 5v.91h3V5h2.008C12.108 5 13 5.818 13 6.81v6.38c0 1-.9 1.81-1.992 1.81H3.992C2.892 15 2 14.182 2 13.19V6.81C2 5.81 2.9 5 3.992 5H6Zm1.997-3.552A.506.506 0 0 1 8 1.5v8a.5.5 0 0 1-1 0v-8a.51.51 0 0 1 0-.017L5.18 3.394a.52.52 0 0 1-.77 0 .617.617 0 0 1 0-.829L6.36.515a1.552 1.552 0 0 1 2.31 0l1.95 2.05c.214.229.214.601 0 .83a.52.52 0 0 1-.77 0L7.997 1.447Z"}))},LTt=DTt;var Lz={};J(Lz,{icon:()=>WTt});var FMr=T(z());var NTt=["title","titleId"];function Cpe(){return Cpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function BTt(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}var zTt=function(t){var r=t.title,n=t.titleId,o=FTt(t,NTt);return l("svg",Cpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.5 1a.5.5 0 0 1 .5.5V14h12.5a.5.5 0 0 1 0 1h-13a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 .5-.5Z"}),l("path",{d:"M12.935 6.652a.6.6 0 0 0-.951-.062L9 10l-2.747-.916a.6.6 0 0 0-.485.047L3 10.69v1.81a.5.5 0 0 0 .5.5h11a.5.5 0 0 0 .5-.5V9.75l-2.065-3.098Z"}),l("path",{d:"M13.023 2.758a.6.6 0 0 0-.987-.077L8.388 7.203l-2.093-.83a.6.6 0 0 0-.552.058L3.221 8.098a.49.49 0 0 0-.138.683.5.5 0 0 0 .689.136l2.349-1.552 2.582 1.024 3.746-4.643 1.623 2.817c.136.237.44.319.678.184a.49.49 0 0 0 .184-.672l-1.91-3.317Z"}))},WTt=zTt;var Nz={};J(Nz,{icon:()=>qTt});var zMr=T(z());var HTt=["title","titleId"];function Mpe(){return Mpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $Tt(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}var ZTt=function(t){var r=t.title,n=t.titleId,o=VTt(t,HTt);return l("svg",Mpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.007.5a.5.5 0 0 1 1 0v2.024a.999.999 0 0 0 .268-.227l1.027-1.233a.5.5 0 0 1 .769.64L8.275 3.86a.999.999 0 0 1-.268.227v2.548l2.207-1.274c0-.114.02-.231.062-.346l.968-2.632a.5.5 0 1 1 .938.345l-.554 1.506a.998.998 0 0 0-.062.346l1.753-1.012a.5.5 0 1 1 .5.866l-1.753 1.012c.1.057.21.098.33.119l1.582.273a.5.5 0 1 1-.17.986l-2.764-.478a1 1 0 0 1-.33-.12L8.506 7.5l2.207 1.274a1 1 0 0 1 .33-.119l2.764-.478a.5.5 0 1 1 .17.986l-1.582.273a.999.999 0 0 0-.33.12l1.753 1.011a.5.5 0 1 1-.5.866l-1.753-1.012c0 .115.02.231.062.346l.554 1.506a.5.5 0 0 1-.938.345l-.968-2.632a.999.999 0 0 1-.062-.346L8.007 8.366v2.548c.098.058.19.133.268.227l1.796 2.155a.5.5 0 0 1-.769.64l-1.027-1.233a.999.999 0 0 0-.268-.226V14.5a.5.5 0 0 1-1 0v-2.024a.999.999 0 0 0-.269.227l-1.027 1.233a.5.5 0 0 1-.768-.64l1.795-2.155a.999.999 0 0 1 .269-.227V8.366L4.8 9.64c0 .114-.02.231-.062.346l-.969 2.632a.5.5 0 1 1-.938-.345l.554-1.506a1 1 0 0 0 .062-.346l-1.753 1.012a.5.5 0 0 1-.5-.866l1.753-1.012a.999.999 0 0 0-.33-.119l-1.582-.273a.5.5 0 0 1 .17-.986l2.764.478c.12.02.232.062.33.12L6.508 7.5 4.3 6.226a.999.999 0 0 1-.33.119l-2.765.478a.5.5 0 1 1-.17-.986l1.582-.273a.999.999 0 0 0 .33-.12L1.194 4.434a.5.5 0 1 1 .5-.866l1.753 1.012c0-.114-.02-.231-.062-.346L2.83 2.727a.5.5 0 1 1 .938-.345l.969 2.632a.999.999 0 0 1 .062.346l2.207 1.274V4.086a1 1 0 0 1-.269-.227L4.943 1.704a.5.5 0 0 1 .768-.64l1.027 1.233c.079.094.17.17.269.227V.5Z"}))},qTt=ZTt;var Fz={};J(Fz,{icon:()=>KTt});var HMr=T(z());var UTt=["title","titleId"];function Ape(){return Ape=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function JTt(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}var XTt=function(t){var r=t.title,n=t.titleId,o=GTt(t,UTt);return l("svg",Ape({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3.854 3.146a.5.5 0 0 0-.708 0l-2 2a.5.5 0 1 0 .708.708L3 4.707V11.5a.5.5 0 0 0 1 0V4.707l1.146 1.147a.5.5 0 1 0 .708-.708l-2-2ZM8 4.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5ZM8.5 7a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1h-4ZM8 10.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Z"}))},KTt=XTt;var Bz={};J(Bz,{icon:()=>rCt});var $Mr=T(z());var YTt=["title","titleId"];function Rpe(){return Rpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function eCt(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}var tCt=function(t){var r=t.title,n=t.titleId,o=QTt(t,YTt);return l("svg",Rpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 10.293V3.5a.5.5 0 0 0-1 0v6.793L1.854 9.146a.5.5 0 1 0-.708.708l2 2a.5.5 0 0 0 .708 0l2-2a.5.5 0 1 0-.708-.708L4 10.293ZM8 4.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5ZM8.5 7a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1h-4ZM8 10.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Z"}))},rCt=tCt;var zz={};J(zz,{icon:()=>sCt});var qMr=T(z());var nCt=["title","titleId"];function Dpe(){return Dpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function iCt(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}var aCt=function(t){var r=t.title,n=t.titleId,o=oCt(t,nCt);return l("svg",Dpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4.308 7h8.136c.307 0 .556.224.556.5s-.249.5-.556.5H4.308l4.096 4.096a.5.5 0 0 1-.707.707L3.454 8.561a1.494 1.494 0 0 1-.433-.925.454.454 0 0 1 0-.272c.03-.338.175-.666.433-.925l4.243-4.242a.5.5 0 1 1 .707.707L4.308 7Z"}))},sCt=aCt;var Wz={};J(Wz,{icon:()=>dCt});var GMr=T(z());var lCt=["title","titleId"];function Lpe(){return Lpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cCt(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}var pCt=function(t){var r=t.title,n=t.titleId,o=uCt(t,lCt);return l("svg",Lpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.692 7H3.556C3.249 7 3 7.224 3 7.5s.249.5.556.5h8.136l-4.096 4.096a.5.5 0 0 0 .707.707l4.243-4.242c.258-.259.403-.587.433-.925a.454.454 0 0 0 0-.272 1.494 1.494 0 0 0-.433-.925L8.303 2.197a.5.5 0 1 0-.707.707L11.692 7Z"}))},dCt=pCt;var Hz={};J(Hz,{icon:()=>gCt});var XMr=T(z());var fCt=["title","titleId"];function Npe(){return Npe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mCt(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}var vCt=function(t){var r=t.title,n=t.titleId,o=hCt(t,fCt);return l("svg",Npe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 11.692V3.556C7 3.249 7.224 3 7.5 3s.5.249.5.556v8.136l4.096-4.096a.5.5 0 0 1 .707.707l-4.242 4.243a1.494 1.494 0 0 1-.925.433.454.454 0 0 1-.272 0 1.494 1.494 0 0 1-.925-.433L2.197 8.303a.5.5 0 1 1 .707-.707L7 11.692Z"}))},gCt=vCt;var Vz={};J(Vz,{icon:()=>xCt});var YMr=T(z());var yCt=["title","titleId"];function Fpe(){return Fpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wCt(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}var OCt=function(t){var r=t.title,n=t.titleId,o=bCt(t,yCt);return l("svg",Fpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 4.207v8.237c0 .307-.224.556-.5.556s-.5-.249-.5-.556V4.207L2.904 8.303a.5.5 0 0 1-.707-.707l4.242-4.242a1.5 1.5 0 0 1 2.122 0l4.242 4.242a.5.5 0 1 1-.707.707L8 4.207Z"}))},xCt=OCt;var $z={};J($z,{icon:()=>PCt});var eAr=T(z());var _Ct=["title","titleId"];function Bpe(){return Bpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ICt(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}var ECt=function(t){var r=t.title,n=t.titleId,o=SCt(t,_Ct);return l("svg",Bpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 12.786V3.2L3.604 6.596a.5.5 0 0 1-.708-.707l3.536-3.535a1.5 1.5 0 0 1 2.121 0l3.536 3.535a.5.5 0 0 1-.707.707L8 3.214v9.557l3.382-3.382a.5.5 0 0 1 .707.707l-3.536 3.536a1.5 1.5 0 0 1-2.121 0l-3.536-3.536a.5.5 0 0 1 .708-.707L7 12.786Z"}))},PCt=ECt;var Zz={};J(Zz,{icon:()=>MCt});var rAr=T(z());var kCt=["title","titleId"];function zpe(){return zpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function TCt(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}var CCt=function(t){var r=t.title,n=t.titleId,o=jCt(t,kCt);return l("svg",zpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 3H3v3h3V3ZM3 2a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Zm3 8H3v3h3v-3ZM3 9a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1H3Zm10-6h-3v3h3V3Zm-3-1a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1h-3Zm3 8h-3v3h3v-3Zm-3-1a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-3Z",clipRule:"evenodd"}))},MCt=CCt;var qz={};J(qz,{icon:()=>NCt});var oAr=T(z());var ACt=["title","titleId"];function Wpe(){return Wpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function DCt(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}var LCt=function(t){var r=t.title,n=t.titleId,o=RCt(t,ACt);return l("svg",Wpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m5.016 4.383.035-.093a.492.492 0 0 1 .898 0l.035.093c.048.128.072.192.097.253a5.9 5.9 0 0 0 3.536 3.38l.093.035a.492.492 0 0 1 0 .898l-.093.035a5.9 5.9 0 0 0-3.536 3.38c-.025.06-.049.125-.097.253l-.035.093a.492.492 0 0 1-.898 0l-.035-.093c-.048-.128-.072-.192-.097-.253a5.9 5.9 0 0 0-3.536-3.38 2.175 2.175 0 0 1-.093-.035.492.492 0 0 1 0-.898l.093-.035c.128-.048.192-.072.253-.097a5.9 5.9 0 0 0 3.38-3.536Zm6.769-2.213a.968.968 0 0 1 .016-.041.219.219 0 0 1 .398 0 2.622 2.622 0 0 0 1.518 1.613l.113.043a.272.272 0 0 1 .04.016.219.219 0 0 1 0 .398.272.272 0 0 1-.04.016l-.113.043a2.622 2.622 0 0 0-1.502 1.572.968.968 0 0 1-.016.04.219.219 0 0 1-.398 0 2.622 2.622 0 0 0-1.518-1.613l-.113-.042a.272.272 0 0 1-.04-.016.219.219 0 0 1 0-.398.272.272 0 0 1 .04-.016l.113-.043a2.622 2.622 0 0 0 1.502-1.572Zm-.555 8.043.02-.052a.273.273 0 0 1 .5 0l.02.052.053.14a3.275 3.275 0 0 0 1.824 1.824l.14.054c.03.01.044.016.052.02a.273.273 0 0 1 0 .498 1.248 1.248 0 0 1-.052.02c-.07.027-.107.04-.14.054a3.279 3.279 0 0 0-1.824 1.824l-.054.14a.409.409 0 0 1-.02.052.273.273 0 0 1-.498 0 1.248 1.248 0 0 1-.02-.052c-.027-.07-.04-.107-.054-.14a3.279 3.279 0 0 0-1.824-1.824l-.14-.054a1.24 1.24 0 0 1-.052-.02.273.273 0 0 1 0-.498 1.24 1.24 0 0 1 .052-.02l.14-.054a3.279 3.279 0 0 0 1.824-1.824l.054-.14Z"}))},NCt=LCt;var Uz={};J(Uz,{icon:()=>HCt});var aAr=T(z());var FCt=["title","titleId"];function Hpe(){return Hpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zCt(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}var WCt=function(t){var r=t.title,n=t.titleId,o=BCt(t,FCt);return l("svg",Hpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 0 0-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 0 0 2.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 0 0 .859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 0 0 6 2m8 8h2v1h-2v2h-1v-2h-2v-1h2V8h1v2ZM6 3c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 0 1-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 0 1-.091.046.106.106 0 0 1-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 0 1-.054.016.127.127 0 0 1-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 0 1-.029-.126.108.108 0 0 1 .094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3Z"}))},HCt=WCt;var Gz={};J(Gz,{icon:()=>UCt});var lAr=T(z());var VCt=["title","titleId"];function Vpe(){return Vpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ZCt(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}var qCt=function(t){var r=t.title,n=t.titleId,o=$Ct(t,VCt);return l("svg",Vpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M14 10h2v1h-2v2h-1v-2h-2v-1h2V8h1v2ZM6 2a.86.86 0 0 0-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 0 0 2.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 0 0 .859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 0 0 6 2"}))},UCt=qCt;var Jz={};J(Jz,{icon:()=>YCt});var cAr=T(z());var GCt=["title","titleId"];function $pe(){return $pe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function XCt(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}var KCt=function(t){var r=t.title,n=t.titleId,o=JCt(t,GCt);return l("svg",$pe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 0 0-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 0 0 4.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 0 0 .859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 0 0 8 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 0 1-.029.126l-2.202 2.226-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 0 1-.091.046.106.106 0 0 1-.055-.016l-2.578-1.469L8 11.314l-.354.201-2.579 1.469a.103.103 0 0 1-.054.016.127.127 0 0 1-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 0 1-.029-.126.108.108 0 0 1 .094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C7.905 3.05 7.927 3 8 3"}))},YCt=KCt;var Xz={};J(Xz,{icon:()=>nMt});var dAr=T(z());var QCt=["title","titleId"];function Zpe(){return Zpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function tMt(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}var rMt=function(t){var r=t.title,n=t.titleId,o=eMt(t,QCt);return l("svg",Zpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 0 0-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 0 0 2.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 0 0 .859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 0 0 6 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 0 1-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 0 1-.091.046.106.106 0 0 1-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 0 1-.054.016.127.127 0 0 1-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 0 1-.029-.126.108.108 0 0 1 .094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3"}))},nMt=rMt;var Kz={};J(Kz,{icon:()=>lMt});var hAr=T(z());var oMt=["title","titleId"];function qpe(){return qpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function aMt(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}var sMt=function(t){var r=t.title,n=t.titleId,o=iMt(t,oMt);return l("svg",qpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 0 0-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 0 0 4.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 0 0 .859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 0 0 8 2"}))},lMt=sMt;var Yz={};J(Yz,{icon:()=>fMt});var vAr=T(z());var uMt=["title","titleId"];function Upe(){return Upe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pMt(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}var dMt=function(t){var r=t.title,n=t.titleId,o=cMt(t,uMt);return l("svg",Upe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 0 0-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 0 0 2.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 0 0 .859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 0 0 6 2"}))},fMt=dMt;var Qz={};J(Qz,{icon:()=>yMt});var yAr=T(z());var hMt=["title","titleId"];function Gpe(){return Gpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vMt(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}var gMt=function(t){var r=t.title,n=t.titleId,o=mMt(t,hMt);return l("svg",Gpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 0 0-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 0 0 2.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 0 0 .859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 0 0 6 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 0 1-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 0 1-.091.046.106.106 0 0 1-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 0 1-.054.016.127.127 0 0 1-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 0 1-.029-.126.108.108 0 0 1 .094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3Zm10 7v1h-5v-1h5Z"}))},yMt=gMt;var eW={};J(eW,{icon:()=>_Mt});var wAr=T(z());var bMt=["title","titleId"];function Jpe(){return Jpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function OMt(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}var xMt=function(t){var r=t.title,n=t.titleId,o=wMt(t,bMt);return l("svg",Jpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 0 1 .792.511l1.33 2.924 3.128.446c.71.102 1.001.976.496 1.487L9.433 9.704l.563 3.268A.877.877 0 0 1 9.136 14a.862.862 0 0 1-.429-.116L6 12.342l-2.707 1.542a.862.862 0 0 1-.43.116.877.877 0 0 1-.859-1.027l.563-3.269L.254 7.368C-.25 6.857.04 5.983.75 5.88l3.128-.446 1.33-2.923A.86.86 0 0 1 6 2Zm10 8v1h-5v-1h5Z"}))},_Mt=xMt;var tW={};J(tW,{icon:()=>kMt});var xAr=T(z());var SMt=["title","titleId"];function Xpe(){return Xpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function EMt(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}var PMt=function(t){var r=t.title,n=t.titleId,o=IMt(t,SMt);return l("svg",Xpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 14v-4h1v4h5V5h1v9a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1v-2h1v2h6Zm4.853-10.146-2.999 3a1.5 1.5 0 0 1-2.538 1.568l-2.714.904L4 9.527a1.5 1.5 0 1 1-.316-.948L7 7.473a1.5 1.5 0 0 1 2.146-1.327l3-3a1.5 1.5 0 1 1 .707.707Z"}))},kMt=PMt;var rW={};J(rW,{icon:()=>AMt});var SAr=T(z());var jMt=["title","titleId"];function Kpe(){return Kpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function CMt(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}var MMt=function(t){var r=t.title,n=t.titleId,o=TMt(t,jMt);return l("svg",Kpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1H4Z"}))},AMt=MMt;var nW={};J(nW,{icon:()=>FMt});var EAr=T(z());var RMt=["title","titleId"];function Ype(){return Ype=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function LMt(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}var NMt=function(t){var r=t.title,n=t.titleId,o=DMt(t,RMt);return l("svg",Ype({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("rect",{width:12,height:12,x:2,y:2,fillRule:"evenodd",rx:2}))},FMt=NMt;var oW={};J(oW,{icon:()=>VMt});var kAr=T(z());var BMt=["title","titleId"];function Qpe(){return Qpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function WMt(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}var HMt=function(t){var r=t.title,n=t.titleId,o=zMt(t,BMt);return l("svg",Qpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12.259 3.034A1.001 1.001 0 0 0 12 3H4a1 1 0 0 0-1 1v8c0 .09.012.176.034.259l9.225-9.225Zm.707.707-9.225 9.225c.083.022.17.034.259.034h8a1 1 0 0 0 1-1V4c0-.09-.012-.176-.034-.259ZM4 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Z"}))},VMt=HMt;var iW={};J(iW,{icon:()=>GMt});var TAr=T(z());var $Mt=["title","titleId"];function ede(){return ede=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function qMt(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}var UMt=function(t){var r=t.title,n=t.titleId,o=ZMt(t,$Mt);return l("svg",ede({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fillRule:"evenodd",transform:"translate(0 2)"},l("path",{fillRule:"nonzero",d:"M2 6a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1H2Zm13 2v3a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1Zm1-3V2a2 2 0 0 0-2-2H2a2 2 0 0 0-2 2v3c0 .601.271 1.133.69 1.5C.271 6.867 0 7.399 0 8v3a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8c0-.601-.271-1.133-.689-1.5.418-.367.689-.899.689-1.5Z"}),l("circle",{cx:4.5,cy:9.5,r:1.5}),l("circle",{cx:4.5,cy:3.5,r:1.5}),l("path",{d:"M12 8h1v3h-1zM10 8h1v3h-1zM12 2h1v3h-1zM10 2h1v3h-1z"})))},GMt=UMt;var aW={};J(aW,{icon:()=>QMt});var MAr=T(z());var JMt=["title","titleId"];function tde(){return tde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function KMt(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}var YMt=function(t){var r=t.title,n=t.titleId,o=XMt(t,JMt);return l("svg",tde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M9.297 3 8.93 5.102h1.351l-.32 1.828H8.609l-.656 3.883c-.036.265-.02.466.05.601.071.135.247.208.528.219.11.005.334-.008.672-.04L9.016 13.5a4.16 4.16 0 0 1-1.383.195c-.797-.01-1.393-.244-1.79-.703-.395-.458-.557-1.08-.484-1.867l.688-4.195H5l.313-1.828h1.046L6.727 3h2.57z"}))},QMt=YMt;var sW={};J(sW,{icon:()=>oAt});var RAr=T(z());var eAt=["title","titleId"];function rde(){return rde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rAt(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}var nAt=function(t){var r=t.title,n=t.titleId,o=tAt(t,eAt);return l("svg",rde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2H1v12h3V7a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v1h4V4H7c-.621 0-1-.379-1-1V2Zm10 6v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.25a.75.75 0 0 1 .75.75l-.004.206C6.99 2.317 6.974 3 7 3h8a1 1 0 0 1 1 1v4Zm-1 1h-4a1 1 0 0 1-1-1V7H5v7h10V9ZM2 4.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5ZM6.5 9a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-2Z",clipRule:"evenodd"}))},oAt=nAt;var lW={};J(lW,{icon:()=>uAt});var LAr=T(z());var iAt=["title","titleId"];function nde(){return nde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function sAt(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}var lAt=function(t){var r=t.title,n=t.titleId,o=aAt(t,iAt);return l("svg",nde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 8a4 4 0 1 1-8 0 4 4 0 0 1 8 0ZM7.25.75a.75.75 0 0 1 1.5 0v1.5a.75.75 0 1 1-1.5 0V.75Zm0 13a.75.75 0 0 1 1.5 0v1.5a.75.75 0 0 1-1.5 0v-1.5Zm5.346-11.407a.75.75 0 0 1 1.06 1.06l-1.06 1.061a.75.75 0 0 1-1.06-1.06l1.06-1.06Zm-9.192 9.193a.75.75 0 1 1 1.06 1.06l-1.06 1.06a.75.75 0 0 1-1.06-1.06l1.06-1.06ZM.75 8.75a.75.75 0 0 1 0-1.5h1.5a.75.75 0 1 1 0 1.5H.75Zm13 0a.75.75 0 0 1 0-1.5h1.5a.75.75 0 0 1 0 1.5h-1.5ZM2.343 3.404a.75.75 0 1 1 1.06-1.06l1.061 1.06a.75.75 0 0 1-1.06 1.06l-1.06-1.06Zm9.193 9.192a.75.75 0 0 1 1.06-1.06l1.06 1.06a.75.75 0 0 1-1.06 1.06l-1.06-1.06Z"}))},uAt=lAt;var uW={};J(uW,{icon:()=>hAt});var FAr=T(z());var cAt=["title","titleId"];function ode(){return ode=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function dAt(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}var fAt=function(t){var r=t.title,n=t.titleId,o=pAt(t,cAt);return l("svg",ode({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("rect",{width:12,height:12,x:2,y:2,rx:3}),l("rect",{width:11,height:11,x:2.5,y:2.5,className:"euiSwatchInput__stroke",rx:2}))},hAt=fAt;var cW={};J(cW,{icon:()=>bAt});var zAr=T(z());var mAt=["title","titleId"];function ide(){return ide=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function gAt(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}var yAt=function(t){var r=t.title,n=t.titleId,o=vAt(t,mAt);return l("svg",ide({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M10.8 0H2a1 1 0 0 0-1 1v8l1-1V1h8v3.5a.5.5 0 0 0 .5.5H14v10H2v-1a3.5 3.5 0 0 1 3.5-3.5H8V13l3-3-3-3v2.5H5.5A4.5 4.5 0 0 0 1 14v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4.429c0-.256-.098-.503-.274-.689l-3.2-3.428A1.002 1.002 0 0 0 10.8 0Z",clipRule:"evenodd"}))},bAt=yAt;var pW={};J(pW,{icon:()=>SAt});var HAr=T(z());var wAt=["title","titleId"];function ade(){return ade=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function xAt(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}var _At=function(t){var r=t.title,n=t.titleId,o=OAt(t,wAt);return l("svg",ade({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1 1v14h14V1H1zM0 0h16v16H0V0zm9 1v14h1V1H9zM3 3.5h4v-1H3v1zm0 3h4v-1H3v1zm0 3h4v-1H3v1z"}))},SAt=_At;var dW={};J(dW,{icon:()=>jAt});var $Ar=T(z());var IAt=["title","titleId"];function sde(){return sde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function PAt(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}var kAt=function(t){var r=t.title,n=t.titleId,o=EAt(t,IAt);return l("svg",sde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 3v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v1Zm-1 0V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v1h14Zm0 1H1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4ZM4.496 7a.5.5 0 0 1 0 1H2.495a.5.5 0 0 1 0-1h2.001Zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 8 6 7.776 6 7.5s.128-.5.286-.5h3.428ZM4.496 5a.5.5 0 0 1 0 1H2.495a.5.5 0 0 1 0-1h2.001Zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 6 6 5.776 6 5.5s.128-.5.286-.5h3.428ZM4.496 9a.5.5 0 0 1 0 1H2.495a.5.5 0 0 1 0-1h2.001Zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428Zm-5.218 2a.5.5 0 0 1 0 1H2.495a.5.5 0 0 1 0-1h2.001Zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 12 6 11.776 6 11.5s.128-.5.286-.5h3.428Zm-5.218 2a.5.5 0 0 1 0 1H2.495a.5.5 0 0 1 0-1h2.001Zm9-6a.5.5 0 0 1 0 1h-2.001a.5.5 0 0 1 0-1h2.001Zm0-2a.5.5 0 0 1 0 1h-2.001a.5.5 0 0 1 0-1h2.001Zm0 4a.5.5 0 0 1 0 1h-2.001a.5.5 0 0 1 0-1h2.001Zm0 2a.5.5 0 0 1 0 1h-2.001a.5.5 0 0 1 0-1h2.001Zm0 2a.5.5 0 0 1 0 1h-2.001a.5.5 0 0 1 0-1h2.001Zm-3.782 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 14 6 13.776 6 13.5s.128-.5.286-.5h3.428Z"}))},jAt=kAt;var fW={};J(fW,{icon:()=>RAt});var qAr=T(z());var TAt=["title","titleId"];function lde(){return lde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function MAt(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}var AAt=function(t){var r=t.title,n=t.titleId,o=CAt(t,TAt);return l("svg",lde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 3v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v1Zm-1 0V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v1h14Zm0 1H1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4ZM4.5 7a.5.5 0 0 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm9 0a.5.5 0 1 1 0 1h-6a.5.5 0 0 1 0-1h6Zm-9 4a.5.5 0 1 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm9 0a.5.5 0 1 1 0 1h-6a.5.5 0 1 1 0-1h6Z"}))},RAt=AAt;var hW={};J(hW,{icon:()=>BAt});var GAr=T(z());var DAt=["title","titleId"];function ude(){return ude=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function NAt(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}var FAt=function(t){var r=t.title,n=t.titleId,o=LAt(t,DAt);return l("svg",ude({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 3v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v1Zm-1 0V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v1h14Zm0 1H1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4ZM4.5 6a.5.5 0 0 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 7 6 6.776 6 6.5s.128-.5.286-.5h3.428ZM4.5 9a.5.5 0 0 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428ZM4.5 12a.5.5 0 1 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm9-6a.5.5 0 1 1 0 1h-2.004a.5.5 0 0 1 0-1H13.5Zm0 3a.5.5 0 1 1 0 1h-2.004a.5.5 0 0 1 0-1H13.5Zm0 3a.5.5 0 1 1 0 1h-2.004a.5.5 0 0 1 0-1H13.5Zm-3.786 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 13 6 12.776 6 12.5s.128-.5.286-.5h3.428Z"}))},BAt=FAt;var mW={};J(mW,{icon:()=>$At});var XAr=T(z());var zAt=["title","titleId"];function cde(){return cde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function HAt(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}var VAt=function(t){var r=t.title,n=t.titleId,o=WAt(t,zAt);return l("svg",cde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.254 14.97.996 9.712c-.315-.316-.397-.463-.45-.64a.909.909 0 0 1 0-.534c.053-.177.135-.324.45-.64L7.43 1.466c.182-.183.252-.24.338-.293a.87.87 0 0 1 .273-.113c.099-.023.188-.032.446-.032h5.173c.445 0 .607.046.77.133.162.087.29.214.377.377.088.162.134.324.136.769l.015 5.15c0 .259-.009.348-.032.448a.87.87 0 0 1-.112.273c-.054.087-.111.157-.294.34L8.067 14.97c-.315.315-.462.396-.639.45a.909.909 0 0 1-.535 0c-.176-.054-.324-.135-.639-.45Zm1.106-.707 6.453-6.453c.092-.092.126-.128.141-.147.003-.025.004-.074.004-.204l-.015-5.15c0-.181-.003-.245-.009-.275a2.247 2.247 0 0 0-.274-.007H8.487c-.13 0-.179.001-.203.004-.02.015-.055.05-.147.141L1.703 8.606a2.248 2.248 0 0 0-.189.2c.017.024.061.07.19.198l5.257 5.259c.128.128.175.171.2.188.024-.017.071-.06.2-.188Zm4.972-10.607a2 2 0 1 1-2.828 2.828 2 2 0 0 1 2.828-2.828Zm-.707.707a1 1 0 1 0-1.414 1.414 1 1 0 0 0 1.414-1.414ZM6.807 11.28 4.686 9.159a.5.5 0 1 1 .707-.707l2.121 2.12a.5.5 0 1 1-.707.708Zm1.414-1.414-2.12-2.122a.5.5 0 1 1 .706-.707L8.928 9.16a.5.5 0 1 1-.707.707Z"}))},$At=VAt;var vW={};J(vW,{icon:()=>JAt});var YAr=T(z());var ZAt=["title","titleId"];function pde(){return pde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function UAt(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}var GAt=function(t){var r=t.title,n=t.titleId,o=qAt(t,ZAt);return l("svg",pde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.553 1.776a.5.5 0 0 1 .894 0l4 8a.5.5 0 0 1 .053.235c-.004.15-.026.396-.084.705a5.538 5.538 0 0 1-.505 1.512C11.189 13.638 9.906 14.5 8 14.5c-1.906 0-3.19-.862-3.91-2.272a5.538 5.538 0 0 1-.506-1.512 4.672 4.672 0 0 1-.084-.705.5.5 0 0 1 .053-.235l4-8Zm-3.046 8.329c.009.106.027.253.06.429.079.424.213.848.413 1.238C5.537 12.862 6.487 13.5 8 13.5c1.513 0 2.463-.638 3.02-1.728.2-.39.334-.814.413-1.238.033-.176.051-.323.06-.43L8 3.119l-3.493 6.987Z"}))},JAt=GAt;var gW={};J(gW,{icon:()=>eRt});var eRr=T(z());var XAt=["title","titleId"];function dde(){return dde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function YAt(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}var QAt=function(t){var r=t.title,n=t.titleId,o=KAt(t,XAt);return l("svg",dde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.5 15a3.5 3.5 0 0 1-1.75-6.532L7 8.324V2.5A1.496 1.496 0 0 1 9.908 2H8.5v1H10v1H8.5v1H10v1H8.5v1H10v1.324l.25.144A3.5 3.5 0 0 1 8.5 15M11 7.758V2.5a2.5 2.5 0 1 0-5 0v5.258a4.5 4.5 0 1 0 5 0"}),l("path",{d:"M8.5 9a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5"}))},eRt=QAt;var yW={};J(yW,{icon:()=>iRt});var rRr=T(z());var tRt=["title","titleId"];function fde(){return fde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nRt(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}var oRt=function(t){var r=t.title,n=t.titleId,o=rRt(t,tRt);return l("svg",fde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M12.809 8.807a4.5 4.5 0 0 1-5.572-5.75A5 5 0 0 0 3.04 9.31a.5.5 0 0 1-.966.259 6 6 0 0 1 5.672-7.553 4.5 4.5 0 1 1 6.117 6.313 6.002 6.002 0 0 1-7.803 5.409.5.5 0 1 1 .303-.954 5.001 5.001 0 0 0 6.445-3.979ZM11.859 5H13.5a.5.5 0 0 0 0-1H12V1.5a.5.5 0 0 0-1 0v3a.5.5 0 0 0 .5.5h.36Z",clipRule:"evenodd"}),l("path",{d:"m3.757 15.848-.776-2.897a1.5 1.5 0 0 1 1.06-1.838l2.898-.776a.5.5 0 1 1 .259.966l-2.898.776a.5.5 0 0 0-.353.613l.776 2.898a.5.5 0 0 1-.966.258Z"}))},iRt=oRt;var bW={};J(bW,{icon:()=>cRt});var oRr=T(z());var aRt=["title","titleId"];function hde(){return hde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function lRt(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}var uRt=function(t){var r=t.title,n=t.titleId,o=sRt(t,aRt);return l("svg",hde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7 4.5a.5.5 0 0 0 1 0V4h1a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h1v.5zM9 1H6v2h3V1zM2 7.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0zM2.5 9a1.5 1.5 0 0 1-1.415-1H.5a.5.5 0 0 1 0-1h.585a1.5 1.5 0 0 1 2.83 0h2.17a1.5 1.5 0 0 1 2.83 0h2.17a1.5 1.5 0 0 1 2.83 0h.585a.5.5 0 0 1 0 1h-.585a1.5 1.5 0 0 1-2.83 0h-2.17a1.5 1.5 0 0 1-2.83 0h-2.17A1.5 1.5 0 0 1 2.5 9zM13 7.5a.5.5 0 1 0-1 0 .5.5 0 0 0 1 0zm-5 0a.5.5 0 1 0-1 0 .5.5 0 0 0 1 0zM2.5 10a.5.5 0 0 0-.5.5v.5H1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1H3v-.5a.5.5 0 0 0-.5-.5zM4 14v-2H1v2h3zm8-3.5a.5.5 0 0 1 1 0v.5h1a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-3a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1v-.5zm2 2.5v1h-3v-2h3v1z"}))},cRt=uRt;var wW={};J(wW,{icon:()=>mRt});var aRr=T(z());var pRt=["title","titleId"];function mde(){return mde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fRt(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}var hRt=function(t){var r=t.title,n=t.titleId,o=dRt(t,pRt);return l("svg",mde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.854 4.854A.5.5 0 0 1 7 4.5V4H6a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H8v.5a.5.5 0 0 1-.146.354ZM6 3V1h3v2H6ZM2.146 9.146A.5.5 0 0 0 2 9.5v.5H1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1H3v-.5a.5.5 0 0 0-.854-.354ZM4 13v-2H1v2h3ZM11.5 15a4.5 4.5 0 1 0 0-9 4.5 4.5 0 0 0 0 9Zm.354-6.854 2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.707-.708L12.293 11H9.5a.5.5 0 0 1 0-1h2.793l-1.146-1.146a.5.5 0 1 1 .707-.708ZM8.337 6H3.915a1.5 1.5 0 0 0-2.83 0H.5a.5.5 0 0 0 0 1h.585a1.5 1.5 0 0 0 2.83 0h3.342c.314-.38.677-.716 1.08-1ZM2 6.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0Z"}))},mRt=hRt;var OW={};J(OW,{icon:()=>wRt});var lRr=T(z());var vRt=["title","titleId"];function vde(){return vde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yRt(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}var bRt=function(t){var r=t.title,n=t.titleId,o=gRt(t,vRt);return l("svg",vde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13.923 8A5.93 5.93 0 0 0 8 2.077 5.93 5.93 0 0 0 2.077 8a5.93 5.93 0 0 0 6.296 5.912c.328-.021.625.227.625.556a.504.504 0 0 1-.458.511 7 7 0 1 1 6.43-6.333c-.036.398-.487.58-.817.354a.595.595 0 0 1-.248-.54c.012-.152.018-.305.018-.46zm1.684 3.2-4.32-3.055c-.56-.396-1.287.059-1.287.8v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598zM7.462 7.462H4.769a.539.539 0 0 0 0 1.076H8A.539.539 0 0 0 8.538 8V3.692a.539.539 0 0 0-1.076 0v3.77z",clipRule:"evenodd"}))},wRt=bRt;var xW={};J(xW,{icon:()=>IRt});var cRr=T(z());var ORt=["title","titleId"];function gde(){return gde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _Rt(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}var SRt=function(t){var r=t.title,n=t.titleId,o=xRt(t,ORt);return l("svg",gde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M9.075 6.953a.5.5 0 1 1-.707.707 1.5 1.5 0 0 0-2.122 0L4.125 9.782a1.5 1.5 0 1 0 2.121 2.121l1.145-1.144a.5.5 0 0 1 .707.707L6.953 12.61a2.5 2.5 0 1 1-3.535-3.535l2.121-2.122a2.5 2.5 0 0 1 3.536 0Zm3.535-3.535a2.5 2.5 0 0 1 0 3.535L10.49 9.075a2.5 2.5 0 0 1-3.536 0 .5.5 0 1 1 .707-.708 1.5 1.5 0 0 0 2.122 0l2.121-2.12a1.5 1.5 0 1 0-2.121-2.122L8.637 5.269a.5.5 0 1 1-.707-.707l1.145-1.144a2.5 2.5 0 0 1 3.535 0Z"}))},IRt=SRt;var _W={};J(_W,{icon:()=>TRt});var dRr=T(z());var ERt=["title","titleId"];function yde(){return yde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kRt(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}var jRt=function(t){var r=t.title,n=t.titleId,o=PRt(t,ERt);return l("svg",yde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8.15 3.392c2.797 0 4.524 1.644 4.517 4.289.007 1.816-.708 2.893-2.21 3.004-.908.076-1.081-.287-1.157-.725h-.041c-.163.42-.964.732-1.744.683-1.053-.065-2.082-.842-2.09-2.572.008-1.72 1.071-2.441 1.959-2.586.804-.135 1.598.158 1.723.462h.051v-.386h1.195v3.452c.007.3.128.425.304.425.4 0 .677-.583.673-1.861.004-2.376-1.705-2.914-3.187-2.914-2.34 0-3.415 1.522-3.422 3.387.007 2.127 1.22 3.277 3.433 3.277.808 0 1.598-.176 2.006-.349l.393 1.122c-.435.27-1.419.508-2.493.508-2.98 0-4.723-1.66-4.727-4.496.004-2.804 1.748-4.72 4.817-4.72ZM7.964 6.79c-.76 0-1.185.459-1.188 1.24.003.683.3 1.332 1.202 1.332.821 0 1.094-.473 1.077-1.343-.004-.718-.204-1.23-1.091-1.23Z"}))},TRt=jRt;var SW={};J(SW,{icon:()=>DRt});var hRr=T(z());var CRt=["title","titleId"];function bde(){return bde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ARt(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}var RRt=function(t){var r=t.title,n=t.titleId,o=MRt(t,CRt);return l("svg",bde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4.392 12V4h2.713v1.14h-1.21v5.72h1.21V12H4.392Zm7.692-8v8H9.37v-1.14h1.209V5.14H9.37V4h2.714Z"}))},DRt=RRt;var IW={};J(IW,{icon:()=>zRt});var vRr=T(z());var LRt=["title","titleId"];function wde(){return wde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function FRt(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}var BRt=function(t){var r=t.title,n=t.titleId,o=NRt(t,LRt);return l("svg",wde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M12 4H4v8h8V4ZM8.5 5.5h-3v5h3v-5Z"}))},zRt=BRt;var EW={};J(EW,{icon:()=>ZRt});var yRr=T(z());var WRt=["title","titleId"];function Ode(){return Ode=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function VRt(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}var $Rt=function(t){var r=t.title,n=t.titleId,o=HRt(t,WRt);return l("svg",Ode({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 13A5 5 0 1 1 8 3a5 5 0 0 1 0 10Zm-2.828-2.172a4 4 0 0 1 5.656-5.656c.004.013-5.645 5.674-5.656 5.656Z"}))},ZRt=$Rt;var PW={};J(PW,{icon:()=>XRt});var wRr=T(z());var qRt=["title","titleId"];function xde(){return xde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function GRt(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}var JRt=function(t){var r=t.title,n=t.titleId,o=URt(t,qRt);return l("svg",xde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M11.333 7.027H9.375c-.056-.708-.48-1.187-1.222-1.187-.972 0-1.5.806-1.5 2.16 0 1.43.545 2.16 1.486 2.16.708 0 1.139-.415 1.236-1.08l1.958.015C11.236 10.418 10.181 12 8.097 12c-1.958 0-3.43-1.41-3.43-4 0-2.6 1.514-4 3.43-4 1.792 0 3.084 1.095 3.236 3.027Z"}))},XRt=JRt;var kW={};J(kW,{icon:()=>tDt});var xRr=T(z());var KRt=["title","titleId"];function _de(){return _de=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function QRt(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}var eDt=function(t){var r=t.title,n=t.titleId,o=YRt(t,KRt);return l("svg",_de({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M3 4a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v5.996a1 1 0 0 1-1 1h-1.661L7.4 13.2A.25.25 0 0 1 7 13v-2.004H4a1 1 0 0 1-1-1V4zm1.5 1a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-.9L8 11V9.5H5a.5.5 0 0 1-.5-.5V5z",clipRule:"evenodd"}),l("path",{d:"M6.75 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm2.5 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2z"}))},tDt=eDt;var jW={};J(jW,{icon:()=>aDt});var SRr=T(z());var rDt=["title","titleId"];function Sde(){return Sde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function oDt(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}var iDt=function(t){var r=t.title,n=t.titleId,o=nDt(t,rDt);return l("svg",Sde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m9.414 3.757 2.829 2.829a2 2 0 0 1 0 2.828l-2.829 2.829a2 2 0 0 1-2.828 0L3.757 9.414a2 2 0 0 1 0-2.828l2.829-2.829a2 2 0 0 1 2.828 0Zm-1.747 2.91a1 1 0 0 0-1 1v.666a1 1 0 0 0 1 1h.666a1 1 0 0 0 1-1v-.666a1 1 0 0 0-1-1h-.666Z"}))},aDt=iDt;var TW={};J(TW,{icon:()=>pDt});var ERr=T(z());var sDt=["title","titleId"];function Ide(){return Ide=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uDt(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}var cDt=function(t){var r=t.title,n=t.titleId,o=lDt(t,sDt);return l("svg",Ide({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M13 11.567C13 12.36 12.36 13 11.567 13H4.433C3.64 13 3 12.36 3 11.567V4.433C3 3.64 3.64 3 4.433 3H6v-.495a.51.51 0 0 1 .412-.497L6.5 2c.276 0 .5.214.5.505V3h2v-.495a.51.51 0 0 1 .412-.497L9.5 2c.276 0 .5.214.5.505V3h1.567C12.36 3 13 3.64 13 4.433v7.134ZM4 6v5.33c0 .37.3.67.67.67h6.66c.37 0 .67-.3.67-.67V6H4Zm1.5 4c.245 0 .45.183.492.412L6 10.5c0 .245-.183.45-.412.492L5.5 11a.505.505 0 0 1-.5-.5c0-.245.183-.45.412-.492L5.5 10ZM8 10c.245 0 .45.183.492.412l.008.088c0 .245-.183.45-.412.492L8 11a.505.505 0 0 1-.5-.5c0-.245.183-.45.412-.492L8 10Zm2.5 0c.245 0 .45.183.492.412L11 10.5c0 .245-.183.45-.412.492L10.5 11a.505.505 0 0 1-.5-.5c0-.245.183-.45.412-.492L10.5 10Zm-5-1.5c.245 0 .45.183.492.412L6 9c0 .245-.183.45-.412.492L5.5 9.5A.505.505 0 0 1 5 9c0-.245.183-.45.412-.492L5.5 8.5Zm2.5 0c.245 0 .45.183.492.412L8.5 9c0 .245-.183.45-.412.492L8 9.5a.505.505 0 0 1-.5-.5c0-.245.183-.45.412-.492L8 8.5Zm2.5 0c.245 0 .45.183.492.412L11 9c0 .245-.183.45-.412.492L10.5 9.5A.505.505 0 0 1 10 9c0-.245.183-.45.412-.492L10.5 8.5ZM5.5 7c.245 0 .45.183.492.412L6 7.5c0 .245-.183.45-.412.492L5.5 8a.505.505 0 0 1-.5-.5c0-.245.183-.45.412-.492L5.5 7ZM8 7c.245 0 .45.183.492.412L8.5 7.5c0 .245-.183.45-.412.492L8 8a.505.505 0 0 1-.5-.5c0-.245.183-.45.412-.492L8 7Zm2.5 0c.245 0 .45.183.492.412L11 7.5c0 .245-.183.45-.412.492L10.5 8a.505.505 0 0 1-.5-.5c0-.245.183-.45.412-.492L10.5 7ZM4 5h8v-.33c0-.37-.3-.67-.67-.67H4.67C4.3 4 4 4.3 4 4.67V5Z"}))},pDt=cDt;var CW={};J(CW,{icon:()=>vDt});var kRr=T(z());var dDt=["title","titleId"];function Ede(){return Ede=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hDt(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}var mDt=function(t){var r=t.title,n=t.titleId,o=fDt(t,dDt);return l("svg",Ede({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 10.5a.5.5 0 0 0-1 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 0-1H12v-.5Z"}),l("path",{fillRule:"evenodd",d:"M3 12h3.078c.728 0 1.37-.127 1.924-.383a3.5 3.5 0 1 0 2.053-3.306c.005-.101.008-.205.008-.311 0-.833-.165-1.548-.493-2.145A3.309 3.309 0 0 0 8.18 4.48C7.58 4.16 6.87 4 6.047 4H3v8Zm6.787-2.321A2.5 2.5 0 0 0 11.5 14a2.5 2.5 0 1 0-1.713-4.321ZM6 10.156h-.828V5.844h.766c.416 0 .768.064 1.054.191.29.128.508.348.656.66.151.313.227.748.227 1.305 0 .557-.074.992-.223 1.305a1.29 1.29 0 0 1-.64.66c-.279.127-.616.191-1.012.191Z"}))},vDt=mDt;var MW={};J(MW,{icon:()=>ODt});var TRr=T(z());var gDt=["title","titleId"];function Pde(){return Pde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bDt(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}var wDt=function(t){var r=t.title,n=t.titleId,o=yDt(t,gDt);return l("svg",Pde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m7.39 9.736-1.041.94L3.258 8l3.09-2.677 1.041.94-2.032 1.722v.03l2.032 1.721Zm2.777.94-1.04-.94 2.032-1.721v-.03L9.126 6.264l1.04-.94L13.259 8l-3.091 2.677Z"}))},ODt=wDt;var AW={};J(AW,{icon:()=>EDt});var MRr=T(z());var xDt=["title","titleId"];function kde(){return kde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function SDt(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}var IDt=function(t){var r=t.title,n=t.titleId,o=_Dt(t,xDt);return l("svg",kde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M5.211 12V4h5.578v1.57H7.145v1.641h3.359v1.574H7.145v1.645h3.644V12z"}))},EDt=IDt;var RW={};J(RW,{icon:()=>CDt});var RRr=T(z());var PDt=["title","titleId"];function jde(){return jde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jDt(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}var TDt=function(t){var r=t.title,n=t.titleId,o=kDt(t,PDt);return l("svg",jde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.682 12V9.247l1.023-.861a.5.5 0 0 0-.003-.768l-1.02-.844V4h5.578v1.57H9.615v1.64h3.36v1.575h-3.36v1.645h3.645V12H7.682Zm.743-4.103a.138.138 0 0 1 0 .206L6.158 9.97a.133.133 0 0 1-.218-.103v-.934H2.873A.133.133 0 0 1 2.74 8.8V7.2c0-.074.06-.133.133-.133H5.94v-.934a.133.133 0 0 1 .218-.103l2.267 1.867Z"}))},CDt=TDt;var DW={};J(DW,{icon:()=>LDt});var LRr=T(z());var MDt=["title","titleId"];function Tde(){return Tde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function RDt(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}var DDt=function(t){var r=t.title,n=t.titleId,o=ADt(t,MDt);return l("svg",Tde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M11.225 5.656c0 .423-.106.79-.318 1.102-.211.311-.51.57-.898.775a5.435 5.435 0 0 1-1.392.485c-.54.117-1.14.193-1.798.229a6.047 6.047 0 0 0-.035.67c0 .258.02.51.062.757.04.247.114.464.22.652s.25.34.432.458.414.176.696.176c.211 0 .467-.044.766-.132.3-.088.62-.244.96-.467.106-.07.192-.129.256-.176a.365.365 0 0 1 .22-.07c.118 0 .197.061.238.185a.99.99 0 0 1 .062.255 7.1 7.1 0 0 1-.573.467 4.93 4.93 0 0 1-.775.467c-.288.141-.6.261-.934.361-.335.1-.678.15-1.03.15-.541 0-.982-.088-1.322-.264a2.072 2.072 0 0 1-.793-.688 2.626 2.626 0 0 1-.388-.933 4.949 4.949 0 0 1-.106-1.005c0-.634.103-1.257.309-1.868.205-.61.499-1.157.88-1.638.383-.482.838-.87 1.366-1.163A3.567 3.567 0 0 1 9.093 4c.599 0 1.104.126 1.515.379.411.252.617.678.617 1.277Zm-2.467-.951c-.223 0-.435.08-.635.238-.2.158-.381.373-.546.643-.164.27-.305.578-.423.925a6.42 6.42 0 0 0-.264 1.101c.47-.047.863-.135 1.18-.264.318-.13.57-.285.758-.467.188-.182.323-.388.405-.617.083-.229.124-.467.124-.713 0-.27-.056-.479-.168-.626a.519.519 0 0 0-.431-.22Z"}))},LDt=DDt;var LW={};J(LW,{icon:()=>WDt});var FRr=T(z());var NDt=["title","titleId"];function Cde(){return Cde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function BDt(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}var zDt=function(t){var r=t.title,n=t.titleId,o=FDt(t,NDt);return l("svg",Cde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.461 7.31h3.055a.74.74 0 0 1 .66 1.074l-2.141 4.211a.74.74 0 1 1-1.319-.67L9.31 8.79H6.256a.74.74 0 0 1-.66-1.075l2.19-4.31a.74.74 0 0 1 1.319.67L7.461 7.31Z"}))},WDt=zDt;var NW={};J(NW,{icon:()=>qDt});var zRr=T(z());var HDt=["title","titleId"];function Mde(){return Mde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $Dt(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}var ZDt=function(t){var r=t.title,n=t.titleId,o=VDt(t,HDt);return l("svg",Mde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M5.27 12V4h5.46v1.57H7.203v1.641h3.18v1.574h-3.18V12z"}))},qDt=ZDt;var FW={};J(FW,{icon:()=>KDt});var HRr=T(z());var UDt=["title","titleId"];function Ade(){return Ade=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function JDt(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}var XDt=function(t){var r=t.title,n=t.titleId,o=GDt(t,UDt);return l("svg",Ade({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.867 2.667H4a.667.667 0 0 0-.667.666v9.334c0 .368.299.666.667.666h8a.667.667 0 0 0 .667-.666V5.619a.669.669 0 0 0-.183-.459l-2.133-2.285a.668.668 0 0 0-.484-.208m1.466 4V12H4.667V4h4v2.333c0 .184.149.334.333.334h2.333Z"}))},KDt=XDt;var BW={};J(BW,{icon:()=>rLt});var $Rr=T(z());var YDt=["title","titleId"];function Rde(){return Rde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function eLt(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}var tLt=function(t){var r=t.title,n=t.titleId,o=QDt(t,YDt);return l("svg",Rde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3.25 3a.25.25 0 0 0-.25.25v2c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25v-2a.25.25 0 0 0-.25-.25h-9.5zm0 3.75A.25.25 0 0 0 3 7v2c0 .138.112.25.25.25H5.5A.25.25 0 0 0 5.75 9V7a.25.25 0 0 0-.25-.25H3.25zm-.25 4a.25.25 0 0 1 .25-.25H5.5a.25.25 0 0 1 .25.25v2a.25.25 0 0 1-.25.25H3.25a.25.25 0 0 1-.25-.25v-2zm3.31-.727c-.082-.073-.082-.224 0-.296l3.054-2.683a.17.17 0 0 1 .19-.026c.064.032.104.1.104.174v1.341l3.161-.016c.1 0 .18.086.18.192v2.3c0 .105-.08.191-.18.191l-3.161.017v1.341c0 .074-.04.142-.103.174a.17.17 0 0 1-.19-.025L6.31 10.023z"}))},rLt=tLt;var zW={};J(zW,{icon:()=>sLt});var qRr=T(z());var nLt=["title","titleId"];function Dde(){return Dde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function iLt(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}var aLt=function(t){var r=t.title,n=t.titleId,o=oLt(t,nLt);return l("svg",Dde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M11.266 4.15V5.63a2.41 2.41 0 0 0-.859-.145c-.692 0-1.065.346-1.177 1.043l-.11.625h1.828v1.44H8.921l-.204 1.115C8.455 11.325 7.517 12 5.9 12c-.469 0-.882-.061-1.166-.167v-1.495c.273.117.591.178.903.178.659 0 1.01-.29 1.127-1.015l.157-.91H5.247V7.152h1.837l.188-.842C7.534 4.714 8.432 4 10.19 4c.39 0 .853.067 1.076.15Z"}))},sLt=aLt;var WW={};J(WW,{icon:()=>dLt});var GRr=T(z());var lLt=["title","titleId"];function Lde(){return Lde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cLt(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}var pLt=function(t){var r=t.title,n=t.titleId,o=uLt(t,lLt);return l("svg",Lde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 3c1.636 0 3.088.785 4 2 .628.836 1 1.875 1 3a4.978 4.978 0 0 1-.999 3H12a4.992 4.992 0 0 1-4 2 4.992 4.992 0 0 1-4-1.999V11a5 5 0 0 1 4-8Zm.948 8H7.052c.277.626.623 1 .948 1 .325 0 .67-.374.948-1ZM6 11l-.645.001c.274.242.581.446.914.606A5.445 5.445 0 0 1 6 11.001Zm4.645.001H10a5.51 5.51 0 0 1-.269.606c.333-.16.64-.364.914-.606Zm-5.133-2.5H4.031c.068.54.243 1.048.505 1.5h1.172a9.186 9.186 0 0 1-.196-1.5Zm3.975 0H6.513c.03.544.104 1.05.21 1.5h2.553c.107-.45.182-.956.21-1.5Zm2.482 0h-1.481a9.186 9.186 0 0 1-.196 1.5h1.172c.262-.452.437-.96.505-1.5ZM5.708 6 4.535 6c-.261.452-.437.96-.504 1.5h1.481A9.187 9.187 0 0 1 5.708 6Zm3.568 0H6.724c-.107.449-.182.955-.21 1.499h2.973a8.479 8.479 0 0 0-.21-1.5ZM11.465 6h-1.173c.102.467.17.972.196 1.5h1.481a3.974 3.974 0 0 0-.504-1.5ZM6.269 4.393l-.124.062c-.286.15-.551.333-.79.545H6a5.51 5.51 0 0 1 .269-.607ZM8 4c-.326 0-.671.375-.948 1h1.896C8.671 4.376 8.326 4 8 4Zm1.73.393.038.071c.083.168.161.347.232.536h.646a4.006 4.006 0 0 0-.915-.607Z"}))},dLt=pLt;var HW={};J(HW,{icon:()=>gLt});var XRr=T(z());var fLt=["title","titleId"];function Nde(){return Nde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mLt(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}var vLt=function(t){var r=t.title,n=t.titleId,o=hLt(t,fLt);return l("svg",Nde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 3h4v5h2V5.5h4V13H3.001v-1H3V3zm1 9h2V4H4v8zm3 0h2V9H7v3zm3 0h2V6.5h-2V12z"}))},gLt=vLt;var VW={};J(VW,{icon:()=>xLt});var YRr=T(z());var yLt=["title","titleId"];function Fde(){return Fde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wLt(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}var OLt=function(t){var r=t.title,n=t.titleId,o=bLt(t,yLt);return l("svg",Fde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M11 3a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h6Zm-1 2H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5ZM6 5H5v6h1V5Zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984Z"}))},xLt=OLt;var $W={};J($W,{icon:()=>PLt});var eDr=T(z());var _Lt=["title","titleId"];function Bde(){return Bde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ILt(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}var ELt=function(t){var r=t.title,n=t.titleId,o=SLt(t,_Lt);return l("svg",Bde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8.967 10.653h1.727V12H5.306v-1.347h1.727V5.347H5.306V4h5.388v1.347H8.967v5.306Z"}))},PLt=ELt;var ZW={};J(ZW,{icon:()=>MLt});var rDr=T(z());var kLt=["title","titleId"];function zde(){return zde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function TLt(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}var CLt=function(t){var r=t.title,n=t.titleId,o=jLt(t,kLt);return l("svg",zde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.5 4.5v1.025c0 1.269-1.185 1.908-2.112 1.737a.75.75 0 1 0 0 1.475c.927-.17 2.112.47 2.112 1.739v1.023h4v-1.005a2.5 2.5 0 0 1 0-4.988V4.5h-4ZM13 4a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1v1.525c0 .172-.172.293-.341.262a2.25 2.25 0 1 0 0 4.426c.17-.031.341.09.341.262V12a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V9.004a.16.16 0 0 0-.04-.105c-.109-.125-.594-.16-.732-.068a1 1 0 1 1 0-1.662c.138.092.623.057.732-.068a.16.16 0 0 0 .04-.105V4Z",clipRule:"evenodd"}))},MLt=CLt;var qW={};J(qW,{icon:()=>NLt});var oDr=T(z());var ALt=["title","titleId"];function Wde(){return Wde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function DLt(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}var LLt=function(t){var r=t.title,n=t.titleId,o=RLt(t,ALt);return l("svg",Wde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M12.667 6.542A3.208 3.208 0 0 1 8.86 9.694l-.438.492a.437.437 0 0 1-.327.147h-.678v.73a.437.437 0 0 1-.438.437H6.25v.73a.437.437 0 0 1-.438.437H3.772a.437.437 0 0 1-.438-.438v-1.423c0-.116.046-.227.128-.31l2.95-2.949a3.208 3.208 0 0 1 3.047-4.214 3.202 3.202 0 0 1 3.209 3.209Zm-3.209-.875a.875.875 0 1 0 1.75 0 .875.875 0 0 0-1.75 0Z"}))},NLt=LLt;var UW={};J(UW,{icon:()=>HLt});var aDr=T(z());var FLt=["title","titleId"];function Hde(){return Hde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zLt(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}var WLt=function(t){var r=t.title,n=t.titleId,o=BLt(t,FLt);return l("svg",Hde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.33 10.28c-.12.04-.29.07-.42.07-.23 0-.43-.08-.53-.3l-.63-1.34 2.32-2.81H9.3L7.76 7.93h-.09L8.22 4H6.59l-1.05 7.5h1.63l.27-1.94h.1l.43 1.12c.27.71.74.92 1.33.92.23 0 .6-.04.86-.11l.17-1.21z"}))},HLt=WLt;var GW={};J(GW,{icon:()=>ULt});var lDr=T(z());var VLt=["title","titleId"];function Vde(){return Vde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ZLt(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}var qLt=function(t){var r=t.title,n=t.titleId,o=$Lt(t,VLt);return l("svg",Vde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M3.333 11.027V5.05h2.059v1.136h.063c.25-.747.891-1.214 1.728-1.214.848 0 1.524.483 1.65 1.214h.063c.204-.731.927-1.214 1.822-1.214 1.155 0 1.949.798 1.949 2.023v4.03h-2.169V7.542c0-.521-.29-.84-.738-.84s-.723.319-.723.84v3.486H6.963V7.54c0-.521-.29-.84-.739-.84-.447 0-.722.319-.722.84v3.486H3.333Z"}))},ULt=qLt;var JW={};J(JW,{icon:()=>YLt});var cDr=T(z());var GLt=["title","titleId"];function $de(){return $de=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function XLt(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}var KLt=function(t){var r=t.title,n=t.titleId,o=JLt(t,GLt);return l("svg",$de({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 10.5a.5.5 0 0 0-1 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 0-1H12v-.5Z"}),l("path",{fillRule:"evenodd",d:"M8 3h4v5.035A3.5 3.5 0 1 1 8.337 13H2V9h3V6h3V3Zm1.05 9a2.5 2.5 0 1 1 4.902-1 2.5 2.5 0 0 1-4.902 1ZM11 8.035a3.49 3.49 0 0 0-2 1.016V4h2v4.035ZM8 12H6V7h2v5Zm-3 0v-2H3v2h2Z"}))},YLt=KLt;var XW={};J(XW,{icon:()=>nNt});var dDr=T(z());var QLt=["title","titleId"];function Zde(){return Zde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function tNt(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}var rNt=function(t){var r=t.title,n=t.titleId,o=eNt(t,QLt);return l("svg",Zde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 10.5a.5.5 0 0 0-1 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 0-1H12v-.5Z"}),l("path",{fillRule:"evenodd",d:"M6 3H2v10h6.337A3.5 3.5 0 1 0 12 8.035V5H8v2H6V3Zm5 5.035V6H9v3.05a3.49 3.49 0 0 1 2-1.015ZM9 11.5a2.5 2.5 0 1 1 5.002 0A2.5 2.5 0 0 1 9 11.5ZM8 8H6v4h2V8ZM5 4H3v8h2V4Z"}))},nNt=rNt;var KW={};J(KW,{icon:()=>lNt});var hDr=T(z());var oNt=["title","titleId"];function qde(){return qde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function aNt(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}var sNt=function(t){var r=t.title,n=t.titleId,o=iNt(t,oNt);return l("svg",qde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m8 2 5.196 3v.178l-.866.468V5.5L8 3 3.67 5.5v5L8 13l4.33-2.5V5.77l.866-.474V11L8 14l-5.196-3V5L8 2Z"}),l("path",{d:"M5.243 4.429 9.597 7.04 8 7.928 3.743 5.563a.5.5 0 1 0-.486.874L7.5 8.794V13.5h1V8.794l4.243-2.357a.508.508 0 0 0 .06-.04l.392-.202V5.047l-.917.505a.573.573 0 0 0-.02.01l-.106.06-.191.105-1.355.753-4.849-2.909-.514.858Z"}))},lNt=sNt;var YW={};J(YW,{icon:()=>fNt});var vDr=T(z());var uNt=["title","titleId"];function Ude(){return Ude=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pNt(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}var dNt=function(t){var r=t.title,n=t.titleId,o=cNt(t,uNt);return l("svg",Ude({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m7.556 8.416-.804-1.68h-.036v5.64H5V4h1.992l2.292 3.96.804 1.68h.036V4h1.716v8.376H9.848l-2.292-3.96Z"}))},fNt=dNt;var QW={};J(QW,{icon:()=>yNt});var yDr=T(z());var hNt=["title","titleId"];function Gde(){return Gde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vNt(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}var gNt=function(t){var r=t.title,n=t.titleId,o=mNt(t,hNt);return l("svg",Gde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fillRule:"evenodd"},l("path",{d:"M11 3c1.044 0 1.913.757 1.994 1.736l.006.149v6.23c0 1-.82 1.805-1.845 1.88L11 13H9.501a.5.5 0 0 1-.09-.992l.09-.008H11c.52 0 .937-.35.993-.783l.007-.102v-6.23c0-.445-.379-.827-.882-.879L11 4H9.5a.5.5 0 0 1-.09-.992L9.5 3H11ZM6.5 3a.5.5 0 0 1 .09.992L6.5 4H5c-.52 0-.937.35-.993.783L4 4.885v6.23c0 .445.379.827.882.879L5 12h1.5a.5.5 0 0 1 .09.992L6.5 13H5c-1.044 0-1.913-.757-1.994-1.736L3 11.115v-6.23c0-1 .82-1.805 1.845-1.88L5 3h1.5Z"}),l("path",{d:"M5.864 7.25a.714.714 0 1 1 0 1.429.714.714 0 0 1 0-1.429Zm2.143 0a.714.714 0 1 1 0 1.429.714.714 0 0 1 0-1.429Zm2.143 0a.714.714 0 1 1 0 1.429.714.714 0 0 1 0-1.429Z"})))},yNt=gNt;var eH={};J(eH,{icon:()=>_Nt});var wDr=T(z());var bNt=["title","titleId"];function Jde(){return Jde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ONt(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}var xNt=function(t){var r=t.title,n=t.titleId,o=wNt(t,bNt);return l("svg",Jde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m5.002 12.412-.962.962a1 1 0 0 1-1.414-1.414l.962-.962a5.333 5.333 0 0 1 7.41-7.41l.962-.962a1 1 0 1 1 1.414 1.414l-.962.962a5.333 5.333 0 0 1-7.41 7.41Zm.966-.966a4 4 0 0 0 5.478-5.478l-5.478 5.478Zm-1.414-1.414 5.478-5.478a4 4 0 0 0-5.478 5.478Z"}))},_Nt=xNt;var tH={};J(tH,{icon:()=>kNt});var xDr=T(z());var SNt=["title","titleId"];function Xde(){return Xde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ENt(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}var PNt=function(t){var r=t.title,n=t.titleId,o=INt(t,SNt);return l("svg",Xde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.8 9.812h-.842l-.78 2.335H5.031l.78-2.335H4.6l.182-1.043h1.373l.507-1.504H5.454l.188-1.042h1.367l.792-2.37H8.94l-.792 2.37h.849l.792-2.37h1.145l-.792 2.37H11.4l-.182 1.042H9.8L9.293 8.77h1.248l-.183 1.043H8.946l-.775 2.335H7.026L7.8 9.812Zm-.5-1.043h.842l.513-1.504h-.849L7.3 8.77Z"}))},kNt=PNt;var rH={};J(rH,{icon:()=>ANt});var SDr=T(z());var jNt=["title","titleId"];function Kde(){return Kde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function CNt(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}var MNt=function(t){var r=t.title,n=t.titleId,o=TNt(t,jNt);return l("svg",Kde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6.63 12c-1.294 0-2.383-.105-2.383-1.802V9.6c0-.638-.247-.914-.98-.914v-1.37c.733 0 .98-.28.98-.915v-.6C4.247 4.105 5.336 4 6.631 4v1.14c-.759 0-.886.272-.886.843v.813c0 .479-.225.936-1.212 1.133v.142c.987.197 1.212.654 1.212 1.133v.813c0 .57.127.844.886.844V12Zm2.266-8c1.295 0 2.384.105 2.384 1.802V6.4c0 .638.247.914.98.914v1.37c-.733 0-.98.28-.98.915v.6C11.28 11.895 10.19 12 8.896 12v-1.14c.759 0 .886-.272.886-.843v-.813c0-.479.225-.936 1.212-1.133V7.93c-.987-.197-1.212-.654-1.212-1.133v-.813c0-.57-.127-.844-.886-.844V4Z"}))},ANt=MNt;var nH={};J(nH,{icon:()=>FNt});var EDr=T(z());var RNt=["title","titleId"];function Yde(){return Yde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function LNt(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}var NNt=function(t){var r=t.title,n=t.titleId,o=DNt(t,RNt);return l("svg",Yde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M2.667 8.002c0-1.5.394-2.743 1.248-3.822h1.437c-.652.8-1.14 2.388-1.14 3.822 0 1.43.488 3.018 1.14 3.818H3.915c-.854-1.08-1.248-2.322-1.248-3.818ZM6.77 9.998l-.818-.803 1.23-1.197-1.23-1.203.83-.793 1.221 1.193L9.23 6.002l.818.793-1.227 1.2 1.227 1.2-.818.803L8 8.795 6.77 9.998Zm6.563-2c0 1.5-.394 2.743-1.248 3.822h-1.437c.652-.8 1.14-2.388 1.14-3.822 0-1.43-.488-3.018-1.14-3.818h1.437c.854 1.08 1.248 2.322 1.248 3.818Z"}))},FNt=NNt;var oH={};J(oH,{icon:()=>VNt});var kDr=T(z());var BNt=["title","titleId"];function Qde(){return Qde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function WNt(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}var HNt=function(t){var r=t.title,n=t.titleId,o=zNt(t,BNt);return l("svg",Qde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m8.049 3.785 3.852 1.006-4.049 1.103L4 4.791l3.951-1.006a.19.19 0 0 1 .098 0Zm.073 2.654 4.545-1.306v5.45l-.131.184-4.414 1.455V6.439Zm-4.789 4.145V5.188L7.498 6.41v5.81l-4.034-1.453-.13-.183Z"}))},VNt=HNt;var iH={};J(iH,{icon:()=>GNt});var TDr=T(z());var $Nt=["title","titleId"];function efe(){return efe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function qNt(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}var UNt=function(t){var r=t.title,n=t.titleId,o=ZNt(t,$Nt);return l("svg",efe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89Zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433Z"}))},GNt=UNt;var aH={};J(aH,{icon:()=>QNt});var MDr=T(z());var JNt=["title","titleId"];function tfe(){return tfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function KNt(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}var YNt=function(t){var r=t.title,n=t.titleId,o=XNt(t,JNt);return l("svg",tfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M5.5 7a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm0 1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5ZM11 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm0 1a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm-2.5 1.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Zm1 0a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Z",clipRule:"evenodd"}))},QNt=YNt;var sH={};J(sH,{icon:()=>oFt});var RDr=T(z());var eFt=["title","titleId"];function rfe(){return rfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rFt(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}var nFt=function(t){var r=t.title,n=t.titleId,o=tFt(t,eFt);return l("svg",rfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89Zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433Z"}))},oFt=nFt;var lH={};J(lH,{icon:()=>uFt});var LDr=T(z());var iFt=["title","titleId"];function nfe(){return nfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function sFt(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}var lFt=function(t){var r=t.title,n=t.titleId,o=aFt(t,iFt);return l("svg",nfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fillRule:"evenodd"},l("path",{d:"M9.82 5.116a.5.5 0 0 0-.704.704l.064.064L11.719 8l-2.54 2.116a.5.5 0 0 0-.114.63l.05.074a.5.5 0 0 0 .63.115l.075-.05 3-2.5a.5.5 0 0 0 .071-.697l-.07-.072-3-2.5ZM6.18 5.116a.5.5 0 0 1 .704.704l-.064.064L4.281 8l2.54 2.116a.5.5 0 0 1 .114.63l-.05.074a.5.5 0 0 1-.63.115l-.075-.05-3-2.5a.5.5 0 0 1-.071-.697l.07-.072 3-2.5Z"})))},uFt=lFt;var uH={};J(uH,{icon:()=>hFt});var FDr=T(z());var cFt=["title","titleId"];function ofe(){return ofe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function dFt(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}var fFt=function(t){var r=t.title,n=t.titleId,o=pFt(t,cFt);return l("svg",ofe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6Z"}))},hFt=fFt;var cH={};J(cH,{icon:()=>bFt});var zDr=T(z());var mFt=["title","titleId"];function ife(){return ife=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function gFt(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}var yFt=function(t){var r=t.title,n=t.titleId,o=vFt(t,mFt);return l("svg",ife({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6Z"}))},bFt=yFt;var pH={};J(pH,{icon:()=>SFt});var HDr=T(z());var wFt=["title","titleId"];function afe(){return afe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function xFt(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}var _Ft=function(t){var r=t.title,n=t.titleId,o=OFt(t,wFt);return l("svg",afe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8.533 9.067c-1.792 0-2.378.72-2.57 1.194a1.601 1.601 0 1 1-1.163-.037V5.776a1.595 1.595 0 0 1-1.067-1.51c0-.885.715-1.6 1.6-1.6.886 0 1.6.715 1.6 1.6 0 .7-.442 1.291-1.066 1.51v2.821C6.336 8.251 7.019 8 8 8c1.424 0 1.899-.715 2.053-1.19a1.603 1.603 0 0 1-.986-1.477c0-.885.714-1.6 1.6-1.6.885 0 1.6.715 1.6 1.6a1.59 1.59 0 0 1-1.115 1.526c-.139.762-.656 2.208-2.619 2.208Zm-3.2 2.133a.535.535 0 0 0-.533.533c0 .294.24.534.533.534a.535.535 0 0 0 0-1.067Zm0-7.467a.535.535 0 0 0-.533.534c0 .293.24.533.533.533.294 0 .534-.24.534-.533a.535.535 0 0 0-.534-.534ZM10.667 4.8a.535.535 0 0 0-.534.533.535.535 0 0 0 1.067 0 .535.535 0 0 0-.533-.533Z"}))},SFt=_Ft;var dH={};J(dH,{icon:()=>jFt});var $Dr=T(z());var IFt=["title","titleId"];function sfe(){return sfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function PFt(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}var kFt=function(t){var r=t.title,n=t.titleId,o=EFt(t,IFt);return l("svg",sfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.27 7.5a1 1 0 1 1 2 0 1 1 0 0 1-2 0ZM8.77 7.5a1 1 0 1 1 2 0 1 1 0 0 1-2 0Z"}),l("path",{fillRule:"evenodd",d:"M11.702 10.682a4.501 4.501 0 0 1-5.796.482L4.28 12.789a.75.75 0 0 1-1.06-1.06L4.847 10.1a4.501 4.501 0 1 1 6.855.581Zm-5.304-1.06a3 3 0 1 0 4.243-4.243A3 3 0 0 0 6.398 9.62Z",clipRule:"evenodd"}))},jFt=kFt;var fH={};J(fH,{icon:()=>RFt});var qDr=T(z());var TFt=["title","titleId"];function lfe(){return lfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function MFt(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}var AFt=function(t){var r=t.title,n=t.titleId,o=CFt(t,TFt);return l("svg",lfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 2.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1H3v10h1.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5v-11ZM13.5 2a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1H13V3h-1.5a.5.5 0 0 1 0-1h2ZM9.098 4.5l-.244 1.393h.896l-.212 1.211h-.896l-.435 2.574c-.024.176-.013.308.034.398.046.09.163.138.35.145.072.004.22-.005.445-.026L8.91 11.46a2.75 2.75 0 0 1-.916.129c-.528-.007-.923-.162-1.186-.466-.262-.304-.37-.716-.32-1.237l.455-2.78H6.25l.207-1.212h.694L7.394 4.5h1.704Z"}))},RFt=AFt;var hH={};J(hH,{icon:()=>BFt});var GDr=T(z());var DFt=["title","titleId"];function ufe(){return ufe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function NFt(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}var FFt=function(t){var r=t.title,n=t.titleId,o=LFt(t,DFt);return l("svg",ufe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M13 10v3h-3v-1H6v1H3v-3h1V6H3V3h3v1h4V3h3v3h-1v4h1Zm-8 1H4v1h1v-1Zm7 0h-1v1h1v-1ZM5 4H4v1h1V4Zm7 0h-1v1h1V4Zm-1 2h-1V5H6v1H5v4h1v1h4v-1h1V6Z"}))},BFt=FFt;var mH={};J(mH,{icon:()=>$Ft});var XDr=T(z());var zFt=["title","titleId"];function cfe(){return cfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function HFt(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}var VFt=function(t){var r=t.title,n=t.titleId,o=WFt(t,zFt);return l("svg",cfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m9.147 4.297-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78Z"}))},$Ft=VFt;var vH={};J(vH,{icon:()=>JFt});var YDr=T(z());var ZFt=["title","titleId"];function pfe(){return pfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function UFt(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}var GFt=function(t){var r=t.title,n=t.titleId,o=qFt(t,ZFt);return l("svg",pfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4.667 4.667h2.666v2.666H4.667V4.667Zm0 4h2.666v2.666H4.667V8.667Zm4-4h2.666v2.666H8.667V4.667Zm0 4h2.666v2.666H8.667V8.667ZM3.333 3.333v9.334h9.334V3.333H3.333Zm0-1.333h9.334C13.403 2 14 2.597 14 3.333v9.334c0 .736-.597 1.333-1.333 1.333H3.333A1.333 1.333 0 0 1 2 12.667V3.333C2 2.597 2.597 2 3.333 2Z"}))},JFt=GFt;var gH={};J(gH,{icon:()=>eBt});var eLr=T(z());var XFt=["title","titleId"];function dfe(){return dfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function YFt(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}var QFt=function(t){var r=t.title,n=t.titleId,o=KFt(t,XFt);return l("svg",dfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.316 14a6 6 0 1 1 0-12 6 6 0 0 1 0 12Zm0-1.333a4.667 4.667 0 1 0 0-9.334 4.667 4.667 0 0 0 0 9.334Zm2.19-5.72h1.143c.019 1.448-.793 2.338-1.922 2.338-.632 0-1.194-.267-1.706-.811-.36-.397-.636-.576-1-.576-.517 0-.849.355-.885 1.083H4.983c.014-1.47.858-2.314 1.95-2.314.595 0 1.125.249 1.678.802.392.382.641.595 1.038.595.484 0 .857-.323.857-1.116Z"}))},eBt=QFt;var yH={};J(yH,{icon:()=>iBt});var rLr=T(z());var tBt=["title","titleId"];function ffe(){return ffe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nBt(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}var oBt=function(t){var r=t.title,n=t.titleId,o=rBt(t,tBt);return l("svg",ffe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"}),l("path",{fillRule:"evenodd",d:"M4 4a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6.989a1 1 0 0 0 .825-.436l2.05-3a1 1 0 0 0 0-1.128l-2.05-3A1 1 0 0 0 10.99 4H4Zm.75 1.25a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5h5.745a.5.5 0 0 0 .405-.206l1.636-2.25a.5.5 0 0 0 0-.588L10.9 5.456a.5.5 0 0 0-.405-.206H4.75Z"}))},iBt=oBt;var bH={};J(bH,{icon:()=>cBt});var oLr=T(z());var aBt=["title","titleId"];function hfe(){return hfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function lBt(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}var uBt=function(t){var r=t.title,n=t.titleId,o=sBt(t,aBt);return l("svg",hfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m9.147 4.297-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78Z"}))},cBt=uBt;var wH={};J(wH,{icon:()=>mBt});var aLr=T(z());var pBt=["title","titleId"];function mfe(){return mfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fBt(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}var hBt=function(t){var r=t.title,n=t.titleId,o=dBt(t,pBt);return l("svg",mfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 4H3v3h5V4ZM13 9H8v3h5V9ZM10 4h3v3h-3V4ZM6 9H3v3h3V9Z"}))},mBt=hBt;var OH={};J(OH,{icon:()=>wBt});var lLr=T(z());var vBt=["title","titleId"];function vfe(){return vfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yBt(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}var bBt=function(t){var r=t.title,n=t.titleId,o=gBt(t,vBt);return l("svg",vfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m6.649 4.667 1.326 4.7h.05l1.326-4.7h1.982l-2.134 6.666H6.801L4.667 4.667z"}))},wBt=bBt;var xH={};J(xH,{icon:()=>IBt});var cLr=T(z());var OBt=["title","titleId"];function gfe(){return gfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _Bt(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}var SBt=function(t){var r=t.title,n=t.titleId,o=xBt(t,OBt);return l("svg",gfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 2.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1H3v10h1.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5v-11Z"}),l("path",{d:"M6 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm0 3a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-1 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm4-7a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM8 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm1 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm2-5a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm1 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-1 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}),l("path",{d:"M13.5 2a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1H13V3h-1.5a.5.5 0 0 1 0-1h2Z"}))},IBt=SBt;var _H={};J(_H,{icon:()=>TBt});var dLr=T(z());var EBt=["title","titleId"];function yfe(){return yfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kBt(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}var jBt=function(t){var r=t.title,n=t.titleId,o=PBt(t,EBt);return l("svg",yfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 2.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1H3v10h1.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5v-11ZM8 6a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm0 6a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}),l("path",{d:"M6 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm5 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}),l("path",{d:"M13.5 2a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1H13V3h-1.5a.5.5 0 0 1 0-1h2Z"}))},TBt=jBt;var SH={};J(SH,{icon:()=>DBt});var hLr=T(z());var CBt=["title","titleId"];function bfe(){return bfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ABt(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}var RBt=function(t){var r=t.title,n=t.titleId,o=MBt(t,CBt);return l("svg",bfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.386 9.836a2.5 2.5 0 1 1 3.611.667C15.212 11.173 16 12.46 16 14v1.5a.5.5 0 1 1-1 0V14c0-1.724-1.276-3-3-3-.91 0-1.298-.02-1.805-.122-1.25-.254-2.333-1-3.585-2.566a.5.5 0 1 1 .78-.624c.9 1.124 1.653 1.74 2.434 2.043.155.052.345.083.562.105Zm1.785.128c.083.01.167.021.251.034L12.5 10a1.5 1.5 0 1 0-.33-.036ZM9.78 11.97a.5.5 0 0 1 .5.5c0 .076-.047.226-.05.231-.179.38-.23.774-.23 1.302v1.5a.5.5 0 1 1-1 0v-1.5c0-.657.072-1.186.307-1.696a.5.5 0 0 1 .473-.337ZM5.958 5.772a.5.5 0 0 1-.78.625L3.11 3.812a.5.5 0 1 1 .78-.624l2.068 2.584ZM1 11h5.5a.5.5 0 1 1 0 1h-6a.5.5 0 0 1-.5-.5V.5A.5.5 0 0 1 .5 0h12a.5.5 0 0 1 .5.5v3a.5.5 0 1 1-1 0V1H1v10Z"}))},DBt=RBt;var IH={};J(IH,{icon:()=>zBt});var vLr=T(z());var LBt=["title","titleId"];function wfe(){return wfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function FBt(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}var BBt=function(t){var r=t.title,n=t.titleId,o=NBt(t,LBt);return l("svg",wfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.146 5.854a.5.5 0 0 1 .708-.708l2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708L11.293 8H7.5a.5.5 0 0 1 0-1h3.793l-1.147-1.146Z"}),l("path",{fillRule:"evenodd",d:"M2 0h11a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2Zm2.707 1H5v1.293l-4 4V4.707L4.707 1ZM6 14V1h7a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H6Zm-1-1.293V14H3.707L5 12.707Zm0-3v1.586L2.293 14H2a1 1 0 0 1-.838-.454L5 9.707Zm0-3v1.586l-4 4v-1.586l4-4Zm0-3v1.586l-4 4V7.707l4-4ZM3.293 1H2a1 1 0 0 0-1 1v1.293L3.293 1Z"}))},zBt=BBt;var EH={};J(EH,{icon:()=>ZBt});var yLr=T(z());var WBt=["title","titleId"];function Ofe(){return Ofe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function VBt(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}var $Bt=function(t){var r=t.title,n=t.titleId,o=HBt(t,WBt);return l("svg",Ofe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.854 5.854a.5.5 0 0 0-.708-.708l-2 2a.5.5 0 0 0 0 .708l2 2a.5.5 0 0 0 .708-.708L8.707 8H12.5a.5.5 0 0 0 0-1H8.707l1.147-1.146Z"}),l("path",{fillRule:"evenodd",d:"M2 0h11a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2Zm2.707 1H5v1.293l-4 4V4.707L4.707 1ZM6 14V1h7a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H6Zm-1-1.293V14H3.707L5 12.707Zm0-3v1.586L2.293 14H2a1 1 0 0 1-.838-.454L5 9.707Zm0-3v1.586l-4 4v-1.586l4-4Zm0-3v1.586l-4 4V7.707l4-4ZM3.293 1H2a1 1 0 0 0-1 1v1.293L3.293 1Z"}))},ZBt=$Bt;var PH={};J(PH,{icon:()=>XBt});var wLr=T(z());var qBt=["title","titleId"];function xfe(){return xfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function GBt(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}var JBt=function(t){var r=t.title,n=t.titleId,o=UBt(t,qBt);return l("svg",xfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.146 10.146a.5.5 0 0 1 .708.708l-2 2a.5.5 0 0 1-.708 0l-2-2a.5.5 0 0 1 .708-.708L7 11.293V7.5a.5.5 0 0 1 1 0v3.793l1.146-1.147Z"}),l("path",{fillRule:"evenodd",d:"M15 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2Zm-1 2.707V5h-1.293l-4-4h1.586L14 4.707ZM1 6h13v7a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V6Zm1.293-1H1V3.707L2.293 5Zm3 0H3.707L1 2.293V2a1 1 0 0 1 .455-.838L5.293 5Zm3 0H6.707l-4-4h1.586l4 4Zm3 0H9.707l-4-4h1.586l4 4ZM14 3.293V2a1 1 0 0 0-1-1h-1.293L14 3.293Z"}))},XBt=JBt;var kH={};J(kH,{icon:()=>tzt});var xLr=T(z());var KBt=["title","titleId"];function _fe(){return _fe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function QBt(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}var ezt=function(t){var r=t.title,n=t.titleId,o=YBt(t,KBt);return l("svg",_fe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.146 9.854a.5.5 0 0 0 .708-.708l-2-2a.5.5 0 0 0-.708 0l-2 2a.5.5 0 1 0 .708.708L7 8.707V12.5a.5.5 0 0 0 1 0V8.707l1.146 1.147Z"}),l("path",{fillRule:"evenodd",d:"M15 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2Zm-1 2.707V5h-1.293l-4-4h1.586L14 4.707ZM1 6h13v7a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V6Zm1.293-1H1V3.707L2.293 5Zm3 0H3.707L1 2.293V2a1 1 0 0 1 .455-.838L5.293 5Zm3 0H6.707l-4-4h1.586l4 4Zm3 0H9.707l-4-4h1.586l4 4ZM14 3.293V2a1 1 0 0 0-1-1h-1.293L14 3.293Z"}))},tzt=ezt;var jH={};J(jH,{icon:()=>azt});var SLr=T(z());var rzt=["title","titleId"];function Sfe(){return Sfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ozt(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}var izt=function(t){var r=t.title,n=t.titleId,o=nzt(t,rzt);return l("svg",Sfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11 3h5v1H0V3h5V1a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2Zm-7.056 8H7v1H4.1l.392 2.519c.042.269.254.458.493.458h6.03c.239 0 .451-.189.493-.458l1.498-9.576H14l-1.504 9.73c-.116.747-.74 1.304-1.481 1.304h-6.03c-.741 0-1.365-.557-1.481-1.304l-1.511-9.73H9V5.95H3.157L3.476 8H8v1H3.632l.312 2ZM6 3h4V1H6v2Z"}))},azt=izt;var TH={};J(TH,{icon:()=>pzt});var ELr=T(z());var szt=["title","titleId"];function Ife(){return Ife=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uzt(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}var czt=function(t){var r=t.title,n=t.titleId,o=lzt(t,szt);return l("svg",Ife({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.14 3.808 7.53 1.51a.67.67 0 0 1 .942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 0 0 0-.93L9.416.578a2.02 2.02 0 0 0-2.832 0l-2.388 2.3a.65.65 0 0 0 0 .93c.26.256.683.256.944 0zm0 8.384 2.39 2.298a.67.67 0 0 0 .942 0l2.389-2.298a.677.677 0 0 1 .944 0 .65.65 0 0 1 0 .93l-2.388 2.3a2.02 2.02 0 0 1-2.832 0l-2.388-2.3a.65.65 0 0 1 0-.93.677.677 0 0 1 .944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},pzt=czt;var CH={};J(CH,{icon:()=>vzt});var kLr=T(z());var dzt=["title","titleId"];function Efe(){return Efe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hzt(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}var mzt=function(t){var r=t.title,n=t.titleId,o=fzt(t,dzt);return l("svg",Efe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.565 10.83a.5.5 0 1 1 .819.573l-1.877 2.68c-.963 1.376-3.02 1.55-4.588.45C.35 13.436-.191 11.445.773 10.07L3.64 5.973c.963-1.375 3.019-1.548 4.587-.45a.5.5 0 1 1-.573.82C6.509 5.54 5.08 5.66 4.46 6.546l-2.868 4.095c-.621.887-.245 2.27.9 3.073 1.146.802 2.575.682 3.196-.205l1.877-2.68z"}),l("path",{d:"M7.892 3.43a.5.5 0 1 1-.574-.819L10 .734c1.376-.963 3.367-.422 4.465 1.146 1.098 1.569.926 3.625-.45 4.588L9.918 9.336c-1.375.963-3.366.422-4.464-1.146a.5.5 0 1 1 .819-.574c.802 1.146 2.185 1.522 3.072.9L13.44 5.65c.886-.621 1.006-2.05.204-3.195-.802-1.146-2.186-1.522-3.072-.9L7.892 3.43zM6 .5v3a.5.5 0 0 1-1 0v-3a.5.5 0 0 1 1 0zM1.058 2.23l2.458 1.72a.5.5 0 0 1-.574.82L.484 3.05a.5.5 0 1 1 .574-.82zm12 7.093 2.457 1.72a.5.5 0 1 1-.573.82l-2.457-1.72a.5.5 0 1 1 .573-.82zm-2.099 1.181v3a.5.5 0 1 1-1 0v-3a.5.5 0 1 1 1 0z"}))},vzt=mzt;var MH={};J(MH,{icon:()=>Ozt});var TLr=T(z());var gzt=["title","titleId"];function Pfe(){return Pfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bzt(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}var wzt=function(t){var r=t.title,n=t.titleId,o=yzt(t,gzt);return l("svg",Pfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 9a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm0-1a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z",clipRule:"evenodd"}),l("path",{d:"M15 14.291A9.053 9.053 0 0 0 8 11a9.053 9.053 0 0 0-7 3.291l.715.71A8.047 8.047 0 0 1 8 11.996 8.047 8.047 0 0 1 14.286 15l.714-.71Z"}))},Ozt=wzt;var AH={};J(AH,{icon:()=>Ezt});var MLr=T(z());var xzt=["title","titleId"];function kfe(){return kfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Szt(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}var Izt=function(t){var r=t.title,n=t.titleId,o=_zt(t,xzt);return l("svg",kfe({xmlns:"http://www.w3.org/2000/svg",width:18,height:18,viewBox:"0 0 18 18","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fillRule:"evenodd"},l("path",{d:"M13.689 11.132c1.155 1.222 1.953 2.879 2.183 4.748a1.007 1.007 0 0 1-1 1.12H3.007a1.005 1.005 0 0 1-1-1.12c.23-1.87 1.028-3.526 2.183-4.748.247.228.505.442.782.633-1.038 1.069-1.765 2.55-1.972 4.237L14.872 16c-.204-1.686-.93-3.166-1.966-4.235a7.01 7.01 0 0 0 .783-.633ZM8.939 1c1.9 0 3 2 4.38 2.633a2.483 2.483 0 0 1-1.88.867c-.298 0-.579-.06-.844-.157A3.726 3.726 0 0 1 7.69 5.75c-1.395 0-3.75.25-3.245-1.903C5.94 3 6.952 1 8.94 1Z"}),l("path",{d:"M8.94 2c2.205 0 4 1.794 4 4s-1.795 4-4 4c-2.207 0-4-1.794-4-4s1.793-4 4-4m0 9A5 5 0 1 0 8.937.999 5 5 0 0 0 8.94 11"})))},Ezt=Izt;var RH={};J(RH,{icon:()=>Czt});var RLr=T(z());var Pzt=["title","titleId"];function jfe(){return jfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jzt(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}var Tzt=function(t){var r=t.title,n=t.titleId,o=kzt(t,Pzt);return l("svg",jfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M5.482 4.344a2 2 0 1 0-2.963 0c-.08.042-.156.087-.23.136-.457.305-.75.704-.933 1.073A3.457 3.457 0 0 0 1 6.978V9a1 1 0 0 0 1 1h2.5a3.69 3.69 0 0 1 .684-.962L5.171 9H2V7s0-2 2-2c1.007 0 1.507.507 1.755 1.01.225-.254.493-.47.793-.636a2.717 2.717 0 0 0-1.066-1.03zM4 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm10 6h-2.5a3.684 3.684 0 0 0-.684-.962L10.829 9H14V7s0-2-2-2c-1.007 0-1.507.507-1.755 1.01a3.012 3.012 0 0 0-.793-.636 2.716 2.716 0 0 1 1.066-1.03 2 2 0 1 1 2.963 0c.08.042.156.087.23.136.457.305.75.704.933 1.073A3.453 3.453 0 0 1 15 6.944V9a1 1 0 0 1-1 1zm-2-6a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"}),l("path",{fillRule:"evenodd",d:"M10 8c0 .517-.196.989-.518 1.344a2.755 2.755 0 0 1 1.163 1.21A3.453 3.453 0 0 1 11 11.977V14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-2.022a2.005 2.005 0 0 1 .006-.135 3.456 3.456 0 0 1 .35-1.29 2.755 2.755 0 0 1 1.162-1.21A2 2 0 1 1 10 8zm-4 4v2h4v-2s0-2-2-2-2 2-2 2zm3-4a1 1 0 1 1-2 0 1 1 0 0 1 2 0z"}))},Czt=Tzt;var DH={};J(DH,{icon:()=>Lzt});var LLr=T(z());var Mzt=["title","titleId"];function Tfe(){return Tfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Rzt(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}var Dzt=function(t){var r=t.title,n=t.titleId,o=Azt(t,Mzt);return l("svg",Tfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12.5 11V5H11V3.5H5V5H3.5v6H5v1.5h6V11h1.5Zm1 0H15v4h-4v-1.5H5V15H1v-4h1.5V5H1V1h4v1.5h6V1h4v4h-1.5v6ZM4 4V2H2v2h2Zm8 0h2V2h-2v2ZM2 14h2v-2H2v2Zm10 0h2v-2h-2v2Z"}))},Lzt=Dzt;var LH={};J(LH,{icon:()=>Wzt});var FLr=T(z());var Nzt=["title","titleId"];function Cfe(){return Cfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Bzt(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}var zzt=function(t){var r=t.title,n=t.titleId,o=Fzt(t,Nzt);return l("svg",Cfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0 1 14.006 16H1.994A1.995 1.995 0 0 1 0 14.006V1.994Zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 0 0 .994-.994V1.994A.995.995 0 0 0 14.006 1H1.994A.995.995 0 0 0 1 1.994ZM1 4h14v1H1V4Zm1.5-1a.5.5 0 0 1 0-1h1a.5.5 0 0 1 0 1h-1Zm3 0a.5.5 0 0 1 0-1h1a.5.5 0 0 1 0 1h-1Zm4.947 6.106a1 1 0 0 1 0 1.788l-3 2A1 1 0 0 1 6 12V8a1 1 0 0 1 1.447-.894l3 2ZM10 10 7 8v4l3-2Z"}))},Wzt=zzt;var NH={};J(NH,{icon:()=>qzt});var zLr=T(z());var Hzt=["title","titleId"];function Mfe(){return Mfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $zt(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}var Zzt=function(t){var r=t.title,n=t.titleId,o=Vzt(t,Hzt);return l("svg",Mfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 13h10V9.913l-2.571-2.826L8.56 8.753a.5.5 0 0 1-.728-.067L4.448 4.317 3 6.191V13Zm5.295-5.35 1.837-1.64a.5.5 0 0 1 .703.037l3.035 3.336a.5.5 0 0 1 .13.337v3.78a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5V6.02a.5.5 0 0 1 .104-.305l1.947-2.52a.5.5 0 0 1 .791-.001L8.295 7.65ZM1 15h13.5a.5.5 0 1 1 0 1H.5a.5.5 0 0 1-.5-.5v-14a.5.5 0 0 1 1 0V15Z"}))},qzt=Zzt;var FH={};J(FH,{icon:()=>Kzt});var HLr=T(z());var Uzt=["title","titleId"];function Afe(){return Afe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Jzt(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}var Xzt=function(t){var r=t.title,n=t.titleId,o=Gzt(t,Uzt);return l("svg",Afe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.5 1a.5.5 0 0 1 .5.5V15h13.5a.5.5 0 1 1 0 1H.5a.5.5 0 0 1-.5-.5v-14A.5.5 0 0 1 .5 1Zm4.342 2.194L8.295 7.65l1.837-1.64a.5.5 0 0 1 .703.037l3.035 3.336a.5.5 0 0 1 .13.337v3.78a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5V6.02a.5.5 0 0 1 .104-.305l1.947-2.52a.5.5 0 0 1 .791-.001Zm-.394 1.123L3 6.191v4.101l1.146-1.146a.5.5 0 0 1 .493-.126l.085.033L8.5 10.94l1.776-.888a.5.5 0 0 1 .36-.034l.088.034L13 11.19V9.913l-2.571-2.826L8.56 8.753a.5.5 0 0 1-.728-.067L4.448 4.317Z"}))},Kzt=Xzt;var BH={};J(BH,{icon:()=>rWt});var $Lr=T(z());var Yzt=["title","titleId"];function Rfe(){return Rfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function eWt(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}var tWt=function(t){var r=t.title,n=t.titleId,o=Qzt(t,Yzt);return l("svg",Rfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.5 10h-6a.5.5 0 0 1 0-1H8V6H2.5a.5.5 0 0 1 0-1H13V2H2.5a.5.5 0 0 1 0-1h11a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5H9v3h2.5a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-9a.5.5 0 1 1 0-1H11v-3H8.5ZM0 .5a.5.5 0 1 1 1 0v14a.5.5 0 1 1-1 0V.5Z"}))},rWt=tWt;var zH={};J(zH,{icon:()=>sWt});var qLr=T(z());var nWt=["title","titleId"];function Dfe(){return Dfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function iWt(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}var aWt=function(t){var r=t.title,n=t.titleId,o=oWt(t,nWt);return l("svg",Dfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.5 0a.5.5 0 0 1 .5.5v14a.5.5 0 1 1-1 0V.5A.5.5 0 0 1 .5 0Zm13 1a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5H9v3h2.5a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-9a.5.5 0 1 1 0-1H9v-3H2.5a.5.5 0 0 1 0-1H6V6H2.5a.5.5 0 0 1 0-1H10V2H2.5a.5.5 0 0 1 0-1h11Z"}))},sWt=aWt;var WH={};J(WH,{icon:()=>dWt});var GLr=T(z());var lWt=["title","titleId"];function Lfe(){return Lfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cWt(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}var pWt=function(t){var r=t.title,n=t.titleId,o=uWt(t,lWt);return l("svg",Lfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10 7.5v6a.5.5 0 1 1-1 0V8H6v5.5a.5.5 0 1 1-1 0V3H2v10.5a.5.5 0 1 1-1 0v-11a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5V7h3V4.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v9a.5.5 0 1 1-1 0V5h-3v2.5ZM.5 16a.5.5 0 1 1 0-1h14a.5.5 0 1 1 0 1H.5Z"}))},dWt=pWt;var HH={};J(HH,{icon:()=>gWt});var XLr=T(z());var fWt=["title","titleId"];function Nfe(){return Nfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mWt(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}var vWt=function(t){var r=t.title,n=t.titleId,o=hWt(t,fWt);return l("svg",Nfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M14.5 15a.5.5 0 1 1 0 1H.5a.5.5 0 1 1 0-1h14Zm-9-13a.5.5 0 0 1 .5.5L5.999 7H9V4.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v9a.5.5 0 1 1-1 0V7h-3v6.5a.5.5 0 0 1-.41.492L9.5 14a.5.5 0 0 1-.5-.5V10H6v3.5a.5.5 0 0 1-.992.09L5 13.5V6H2v7.5a.5.5 0 1 1-1 0v-11a.5.5 0 0 1 .5-.5h4Z"}))},gWt=vWt;var VH={};J(VH,{icon:()=>xWt});var YLr=T(z());var yWt=["title","titleId"];function Ffe(){return Ffe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wWt(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}var OWt=function(t){var r=t.title,n=t.titleId,o=bWt(t,yWt);return l("svg",Ffe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m12.877 5.847-1.02 1.02a.5.5 0 0 1-.708-.707l1.1-1.099c-.05-.053-.1-.106-.152-.157A6.471 6.471 0 0 0 8 3.019V4.5a.5.5 0 0 1-1 0V3.019a6.47 6.47 0 0 0-4.261 2.055l1.07 1.071a.5.5 0 0 1-.706.707l-.99-.99A6.46 6.46 0 0 0 1.018 10H2.5a.5.5 0 1 1 0 1H1.174c.083.353.196.697.337 1.03a.5.5 0 1 1-.922.39A7.487 7.487 0 0 1 0 9.5a7.483 7.483 0 0 1 2.197-5.304A7.487 7.487 0 0 1 7.5 2a7.487 7.487 0 0 1 5.304 2.197A7.483 7.483 0 0 1 15 9.5a7.487 7.487 0 0 1-.59 2.92.5.5 0 0 1-.92-.39c.14-.333.253-.677.336-1.03H12.5a.5.5 0 1 1 0-1h1.481a6.483 6.483 0 0 0-1.104-4.153Zm-6.041 5.317a.993.993 0 0 1-.01-1.404c.384-.385 2.882-2.002 3.149-1.735.267.267-1.35 2.765-1.735 3.15a.993.993 0 0 1-1.404-.01Z"}))},xWt=OWt;var $H={};J($H,{icon:()=>PWt});var eNr=T(z());var _Wt=["title","titleId"];function Bfe(){return Bfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function IWt(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}var EWt=function(t){var r=t.title,n=t.titleId,o=SWt(t,_Wt);return l("svg",Bfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.725 3.653a6 6 0 0 1 2.847 7.576.5.5 0 0 1-.928-.372 5 5 0 1 0-9.293-.014.5.5 0 0 1-.218.619L1.39 12.47a.5.5 0 0 1-.708-.23A7.99 7.99 0 0 1 0 9a8 8 0 0 1 11.212-7.329.5.5 0 0 1 .234.704l-.721 1.278Zm-.933-.38.5-.889a7 7 0 0 0-8.902 8.93l.886-.511a6 6 0 0 1 7.516-7.53ZM6.73 9.467a1.75 1.75 0 1 1 2.539 0 2 2 0 1 1-2.539 0ZM8 12.013a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm0-3a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z"}))},PWt=EWt;var ZH={};J(ZH,{icon:()=>MWt});var rNr=T(z());var kWt=["title","titleId"];function zfe(){return zfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function TWt(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}var CWt=function(t){var r=t.title,n=t.titleId,o=jWt(t,kWt);return l("svg",zfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12.654 3.48c.248.225.552.389.888.467L11.24 9.43a1.99 1.99 0 0 0-.915-.404l2.33-5.547ZM9.146 9.19a2.008 2.008 0 0 0-.769.64l-1.572-2c.311-.136.581-.35.785-.618l1.556 1.978ZM5.581 7.956l-2.134 4.268a.5.5 0 0 1-.894-.448l2.134-4.268c.25.22.557.376.894.448ZM1 15h13.5a.5.5 0 1 1 0 1H.5a.5.5 0 0 1-.5-.5v-14a.5.5 0 0 1 1 0V15Zm5-8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm4 5a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm4-9a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"}))},MWt=CWt;var qH={};J(qH,{icon:()=>NWt});var oNr=T(z());var AWt=["title","titleId"];function Wfe(){return Wfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function DWt(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}var LWt=function(t){var r=t.title,n=t.titleId,o=RWt(t,AWt);return l("svg",Wfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.5 15C5.77 15 2 9.97 2 6.595 2 3.507 4.46 1 7.5 1S13 3.507 13 6.595C13 9.97 9.23 15 7.5 15Zm0-1c.286 0 1.48-1.044 2.459-2.35C11.219 9.969 12 8.153 12 6.596 12 4.055 9.983 2 7.5 2S3 4.055 3 6.595c0 1.557.78 3.373 2.041 5.056C6.02 12.956 7.214 14 7.5 14Zm0-4.996a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5Zm0-1a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"}))},NWt=LWt;var UH={};J(UH,{icon:()=>HWt});var aNr=T(z());var FWt=["title","titleId"];function Hfe(){return Hfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zWt(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}var WWt=function(t){var r=t.title,n=t.titleId,o=BWt(t,FWt);return l("svg",Hfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.5 2.309v8.69a.499.499 0 0 1-.032.176L9.5 12.691V3.809l-3-1.5Zm-1-.04L2 3.825v8.906l3.527-1.568a.5.5 0 0 1-.027-.164V2.27Zm.274-1.216a.498.498 0 0 1 .471.01l3.768 1.884 4.284-1.904A.5.5 0 0 1 15 1.5v10a.5.5 0 0 1-.297.457l-4.5 2a.5.5 0 0 1-.427-.01l-3.789-1.894-4.283 1.904a.5.5 0 0 1-.703-.457v-10a.5.5 0 0 1 .297-.457l4.476-1.99ZM10.5 3.825v8.906l3.5-1.556V2.27l-3.5 1.556Z"}))},HWt=WWt;var GH={};J(GH,{icon:()=>UWt});var lNr=T(z());var VWt=["title","titleId"];function Vfe(){return Vfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ZWt(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}var qWt=function(t){var r=t.title,n=t.titleId,o=$Wt(t,VWt);return l("svg",Vfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.532 7.34a2.161 2.161 0 1 1 2.936 0 2.746 2.746 0 1 1-2.936 0ZM2 0h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H2Zm6 5.915a1.161 1.161 0 1 0 0-2.322 1.161 1.161 0 0 0 0 2.322Zm0 4.492a1.746 1.746 0 1 0 0-3.492 1.746 1.746 0 0 0 0 3.492Z"}))},UWt=qWt;var JH={};J(JH,{icon:()=>YWt});var cNr=T(z());var GWt=["title","titleId"];function $fe(){return $fe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function XWt(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}var KWt=function(t){var r=t.title,n=t.titleId,o=JWt(t,GWt);return l("svg",$fe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.5 9a.5.5 0 0 1-.5-.5V3.023A5.5 5.5 0 1 0 11.978 9H6.5ZM7 8h5.5a.5.5 0 0 1 .5.5A6.5 6.5 0 1 1 6.5 2a.5.5 0 0 1 .5.5V8Zm2-6.972V6h4.972C13.696 3.552 11.448 1.304 9 1.028ZM14.5 7h-6a.5.5 0 0 1-.5-.5v-6a.5.5 0 0 1 .5-.5C11.853 0 15 3.147 15 6.5a.5.5 0 0 1-.5.5ZM6.146 8.854a.5.5 0 1 1 .708-.708l4 4a.5.5 0 0 1-.708.708l-4-4Z"}))},YWt=KWt;var XH={};J(XH,{icon:()=>nHt});var dNr=T(z());var QWt=["title","titleId"];function Zfe(){return Zfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function tHt(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}var rHt=function(t){var r=t.title,n=t.titleId,o=eHt(t,QWt);return l("svg",Zfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 3v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v1Zm-1 0V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v1h14Zm0 1H1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4ZM4.5 6a.5.5 0 0 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm9 0a.5.5 0 1 1 0 1h-6a.5.5 0 0 1 0-1h6Zm-9 3a.5.5 0 0 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm9 0a.5.5 0 1 1 0 1h-6a.5.5 0 0 1 0-1h6Zm-9 3a.5.5 0 1 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm9 0a.5.5 0 1 1 0 1h-6a.5.5 0 1 1 0-1h6Z"}))},nHt=rHt;var KH={};J(KH,{icon:()=>lHt});var hNr=T(z());var oHt=["title","titleId"];function qfe(){return qfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function aHt(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}var sHt=function(t){var r=t.title,n=t.titleId,o=iHt(t,oHt);return l("svg",qfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.5 9.047a.5.5 0 1 0 0 1h13a.5.5 0 0 0 0-1h-13Zm0-1h13a1.5 1.5 0 0 1 0 3h-13a1.5 1.5 0 0 1 0-3ZM10 13a.5.5 0 1 1 0 1H4a.5.5 0 1 1 0-1h6ZM8.001 2.015a.5.5 0 1 1-.002 1l-5-.015a.5.5 0 1 1 .003-1l5 .015ZM14 5a.5.5 0 1 1 0 1H6a.5.5 0 0 1 0-1h8Z"}))},lHt=sHt;var YH={};J(YH,{icon:()=>fHt});var vNr=T(z());var uHt=["title","titleId"];function Ufe(){return Ufe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pHt(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}var dHt=function(t){var r=t.title,n=t.titleId,o=cHt(t,uHt);return l("svg",Ufe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.5 5v6h2a.5.5 0 1 1 0 1h-5a.5.5 0 1 1 0-1h2V5H5v.5a.5.5 0 0 1-1 0v-1a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.51l-.021 1a.5.5 0 1 1-1-.02l.01-.49H8.5ZM1 15h1.5a.5.5 0 1 1 0 1h-2a.5.5 0 0 1-.5-.5v-1.996a.5.5 0 0 1 1 0V15ZM1 1v1.497a.5.5 0 1 1-1 0V.5A.5.5 0 0 1 .5 0h2a.5.5 0 0 1 0 1H1Zm14 0h-1.495a.5.5 0 0 1 0-1H15.5a.5.5 0 0 1 .5.5v2a.5.5 0 1 1-1 0V1Zm0 14v-1.5a.5.5 0 1 1 1 0v2a.5.5 0 0 1-.5.5h-2a.5.5 0 1 1 0-1H15ZM0 6.5a.5.5 0 0 1 1 0v3a.5.5 0 0 1-1 0v-3ZM9.5 0a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1h3ZM15 6.5a.5.5 0 1 1 1 0v3a.5.5 0 1 1-1 0v-3ZM9.5 15a.5.5 0 1 1 0 1h-3a.5.5 0 1 1 0-1h3Z"}))},fHt=dHt;var QH={};J(QH,{icon:()=>yHt});var yNr=T(z());var hHt=["title","titleId"];function Gfe(){return Gfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vHt(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}var gHt=function(t){var r=t.title,n=t.titleId,o=mHt(t,hHt);return l("svg",Gfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.884 1.802c1.171-.309 2.22-.24 3.103.07.295.104.507.212.631.292l.164.106.048.188c.278 1.066.2 2.175-.091 3.23a6.728 6.728 0 0 1-.194.598c.035.12.074.273.112.454.227 1.065.247 2.193-.08 3.267a4.855 4.855 0 0 1-.534 1.175c-.324.514-.7.954-1.117 1.323-.806.712-1.616 1.071-2.235 1.206-.14.179-.346.381-.629.578-.643.447-1.493.711-2.561.711-1.07 0-1.92-.264-2.563-.711a2.874 2.874 0 0 1-.629-.578c-.618-.134-1.428-.493-2.232-1.203-.419-.37-.796-.81-1.12-1.326a4.855 4.855 0 0 1-.534-1.175C.096 8.933.116 7.805.343 6.74a6.74 6.74 0 0 1 .112-.454 6.728 6.728 0 0 1-.194-.598C-.03 4.633-.108 3.524.17 2.458l.048-.188.164-.106c.124-.08.336-.188.63-.291.885-.31 1.933-.38 3.104-.07.184-.108.434-.23.748-.348C5.616 1.17 6.497 1 7.501 1c1.002 0 1.883.17 2.634.455.315.119.565.24.75.347Zm3.027 1.116a3.13 3.13 0 0 0-.255-.102c-.749-.263-1.66-.309-2.708.007l-.238.072-.201-.147c-.11-.08-.354-.217-.728-.358C9.14 2.147 8.38 2 7.501 2c-.88 0-1.641.147-2.283.39-.373.141-.617.278-.727.358l-.2.147-.24-.072c-1.048-.316-1.958-.27-2.707-.007a3.13 3.13 0 0 0-.255.102c-.167.812-.094 1.674.136 2.503.084.303.166.524.217.637l.082.182-.066.19c-.032.09-.084.27-.137.518-.195.914-.212 1.88.059 2.767.1.333.241.645.423.935.273.434.588.801.936 1.108.434.383.898.655 1.36.834.27.105.474.155.575.17l.248.034.12.22c.051.091.199.266.466.452.476.33 1.127.532 1.993.532.865 0 1.516-.202 1.99-.532.268-.186.416-.36.466-.452l.121-.22.248-.034c.101-.015.305-.065.576-.17.462-.18.927-.452 1.362-.836.347-.307.66-.674.933-1.107.182-.29.322-.601.423-.934.271-.887.254-1.853.06-2.767a4.597 4.597 0 0 0-.138-.519l-.066-.189.082-.182c.05-.113.133-.334.217-.637.23-.829.303-1.691.136-2.503ZM5 5.008c.004.181-.048.364-.264.616-.428.498-.985.488-1.431.049-.326-.321-.325-.732-.29-1.047.085-.76.748-.722 1.262-.44.486.27.717.616.723.823Zm5 0c.006-.206.237-.553.724-.821.514-.283 1.176-.321 1.26.44.036.314.038.725-.288 1.046-.446.44-1.005.449-1.433-.05-.217-.25-.267-.434-.263-.614ZM7.5 8c-.503 0-.976-.24-1.375-.672-.398-.432-.592-1.126 0-1.528.384-.259 1.082-.3 1.375-.3.294 0 .991.041 1.375.3.593.402.397 1.096 0 1.528C8.477 7.76 8.002 8 7.5 8Zm0 1c.808 0 2.656.994 2.49 2.074-.153.993-2.114.925-2.49.925-.374 0-2.336.068-2.49-.925C4.845 9.994 6.693 9 7.5 9Z"}))},yHt=gHt;var eV={};J(eV,{icon:()=>_Ht});var wNr=T(z());var bHt=["title","titleId"];function Jfe(){return Jfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function OHt(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}var xHt=function(t){var r=t.title,n=t.titleId,o=wHt(t,bHt);return l("svg",Jfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2.414 8.036 4.89 10.51a.5.5 0 0 1-.707.708L1.354 8.389a.5.5 0 0 1 0-.707l2.828-2.828a.5.5 0 1 1 .707.707L2.414 8.036Zm8.768 2.474 2.475-2.474-2.475-2.475a.5.5 0 0 1 .707-.707l2.829 2.828a.5.5 0 0 1 0 .707l-2.829 2.829a.5.5 0 1 1-.707-.708ZM8.559 2.506a.5.5 0 0 1 .981.19L7.441 13.494a.5.5 0 0 1-.981-.19L8.559 2.506Z"}))},_Ht=xHt;var tV={};J(tV,{icon:()=>kHt});var xNr=T(z());var SHt=["title","titleId"];function Xfe(){return Xfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function EHt(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}var PHt=function(t){var r=t.title,n=t.titleId,o=IHt(t,SHt);return l("svg",Xfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.837 7c.11.93.165 1.886.165 2.869V13.5a.5.5 0 1 1-1 0V9.869A23.3 23.3 0 0 0 8.83 7H7.29c-.195 1.04-.292 1.985-.292 2.835V13.5a.5.5 0 1 1-1 0V9.835c0-.864.092-1.809.276-2.835H2.5a.5.5 0 0 1-.495-.57c.285-2.023 1.626-3.358 3.931-3.96 1.967-.514 4.22-.606 6.756-.278A1.5 1.5 0 0 1 14 3.679V5.5A1.5 1.5 0 0 1 12.5 7H9.837Zm-.569-1H12.5a.5.5 0 0 0 .5-.5V3.68a.5.5 0 0 0-.436-.497c-2.416-.311-4.54-.225-6.375.254C4.494 3.88 3.491 4.724 3.117 6H9.268ZM2 10v3.5a.5.5 0 1 1-1 0v-4a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v4a.5.5 0 1 1-1 0V10H2Zm10 3.5a.5.5 0 1 1-1 0v-2a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v2a.5.5 0 1 1-1 0V12h-2v1.5ZM1.016 16.026a.5.5 0 0 1 0-1H15a.5.5 0 1 1 0 1H1.016Z"}))},kHt=PHt;var rV={};J(rV,{icon:()=>AHt});var SNr=T(z());var jHt=["title","titleId"];function Kfe(){return Kfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function CHt(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}var MHt=function(t){var r=t.title,n=t.titleId,o=THt(t,jHt);return l("svg",Kfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m8.55 9.502.35-3.507a.905.905 0 1 0-1.8 0l.35 3.507a.552.552 0 0 0 1.1 0ZM9 12a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"}),l("path",{d:"M8.864 1.496a1 1 0 0 0-1.728 0l-7 12A1 1 0 0 0 1 15h14a1 1 0 0 0 .864-1.504l-7-12ZM1 14 8 2l7 12H1Z"}))},AHt=MHt;var nV={};J(nV,{icon:()=>FHt});var ENr=T(z());var RHt=["title","titleId"];function Yfe(){return Yfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function LHt(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}var NHt=function(t){var r=t.title,n=t.titleId,o=DHt(t,RHt);return l("svg",Yfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 1a1 1 0 0 1 .864.496l7 12A1 1 0 0 1 15 15H1a1 1 0 0 1-.864-1.504l7-12A1 1 0 0 1 8 1Zm.9 4.995-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995a.905.905 0 1 1 1.8 0ZM8 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}))},FHt=NHt;var oV={};J(oV,{icon:()=>VHt});var kNr=T(z());var BHt=["title","titleId"];function Qfe(){return Qfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function WHt(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}var HHt=function(t){var r=t.title,n=t.titleId,o=zHt(t,BHt);return l("svg",Qfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 3h12v1H2V3zm0 8h6v1H2v-1z"}),l("path",{d:"M2 7h9.5v.5V7h.039l.083.005a2.958 2.958 0 0 1 1.102.298c.309.154.633.394.88.763.248.373.396.847.396 1.434 0 .588-.148 1.061-.396 1.434a2.257 2.257 0 0 1-.88.763 2.957 2.957 0 0 1-1.185.302h-.025l-.009.001h-.003s-.002 0-.002-.5v.5H11v1l-2-1.5 2-1.5v1h.506l.044-.003a1.959 1.959 0 0 0 .726-.195c.191-.095.367-.23.495-.423.127-.19.229-.466.229-.879s-.102-.689-.229-.879a1.256 1.256 0 0 0-.495-.424 1.958 1.958 0 0 0-.77-.197H2V7z"}))},VHt=HHt;var iV={};J(iV,{icon:()=>GHt});var TNr=T(z());var $Ht=["title","titleId"];function ehe(){return ehe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function qHt(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}var UHt=function(t){var r=t.title,n=t.titleId,o=ZHt(t,$Ht);return l("svg",ehe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M14 3.5 12 2v1H2v1h10v1l2-1.5zM12 9V8H2V7h10V6l2 1.5L12 9zm0 3v1l2-1.5-2-1.5v1H2v1h10z"}))},GHt=UHt;var aV={};J(aV,{icon:()=>QHt});var MNr=T(z());var JHt=["title","titleId"];function the(){return the=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function KHt(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}var YHt=function(t){var r=t.title,n=t.titleId,o=XHt(t,JHt);return l("svg",the({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m6.918 9.746 4.537 4.537a2 2 0 1 0 2.828-2.829l-3.157-3.156a.5.5 0 0 1 .708-.708l3.156 3.157a3 3 0 1 1-4.243 4.243l-4.949-4.95a5.001 5.001 0 0 1-5.22-7.106.5.5 0 0 1 .805-.138L3.676 5.09a1 1 0 1 0 1.415-1.414L2.797 1.382a.5.5 0 0 1 .138-.805 5.001 5.001 0 1 1 3.983 9.169ZM1.226 4.054a4.002 4.002 0 0 0 6.693 3.865 4 4 0 0 0-3.865-6.693l1.744 1.743a2 2 0 1 1-2.829 2.828L1.226 4.054Zm10.229 8.814a1 1 0 1 1 1.414-1.414 1 1 0 0 1-1.414 1.414Z"}))},QHt=YHt;var B8e=T(z()),qs=T(it()),z8e=T(At());var sJ={accessibility:"accessibility",addDataApp:"app_add_data",advancedSettingsApp:"app_advanced_settings",agentApp:"app_fleet",aggregate:"aggregate",analyzeEvent:"analyzeEvent",annotation:"annotation",anomalyChart:"anomaly_chart",anomalySwimLane:"anomaly_swim_lane",apmApp:"app_apm",apmTrace:"apm_trace",appSearchApp:"app_app_search",apps:"apps",arrowDown:"arrow_down",arrowLeft:"arrow_left",arrowRight:"arrow_right",arrowUp:"arrow_up",arrowStart:"arrowStart",arrowEnd:"arrowEnd",article:"article",asterisk:"asterisk",at:"at",auditbeatApp:"app_auditbeat",beaker:"beaker",bell:"bell",bellSlash:"bellSlash",beta:"beta",bolt:"bolt",boxesHorizontal:"boxes_horizontal",boxesVertical:"boxes_vertical",branch:"branch",branchUser:"branchUser",broom:"broom",brush:"brush",bug:"bug",bullseye:"bullseye",calendar:"calendar",canvasApp:"app_canvas",casesApp:"app_cases",changePointDetection:"change_point_detection",check:"check",checkInCircleFilled:"checkInCircleFilled",cheer:"cheer",classificationJob:"ml_classification_job",clickLeft:"clickLeft",clickRight:"clickRight",clock:"clock",clockCounter:"clockCounter",cloudDrizzle:"cloudDrizzle",cloudStormy:"cloudStormy",cloudSunny:"cloudSunny",cluster:"cluster",codeApp:"app_code",color:"color",compute:"compute",console:"console",consoleApp:"app_console",container:"container",continuityAbove:"continuityAbove",continuityAboveBelow:"continuityAboveBelow",continuityBelow:"continuityBelow",continuityWithin:"continuityWithin",controlsHorizontal:"controls_horizontal",controlsVertical:"controls_vertical",copy:"copy",copyClipboard:"copy_clipboard",createAdvancedJob:"ml_create_advanced_job",createMultiMetricJob:"ml_create_multi_metric_job",createPopulationJob:"ml_create_population_job",createSingleMetricJob:"ml_create_single_metric_job",cross:"cross",crossClusterReplicationApp:"app_cross_cluster_replication",crossInCircle:"cross_in_circle",crosshairs:"crosshairs",currency:"currency",cut:"cut",dashboardApp:"app_dashboard",dataVisualizer:"ml_data_visualizer",database:"database",desktop:"desktop",devToolsApp:"app_devtools",diff:"diff",discoverApp:"app_discover",discuss:"discuss",document:"document",documentEdit:"documentEdit",documentation:"documentation",documents:"documents",dot:"dot",dotInCircle:"dotInCircle",doubleArrowLeft:"doubleArrowLeft",doubleArrowRight:"doubleArrowRight",download:"download",editorAlignCenter:"editor_align_center",editorAlignLeft:"editor_align_left",editorAlignRight:"editor_align_right",editorBold:"editor_bold",editorChecklist:"editor_checklist",editorCodeBlock:"editor_code_block",editorComment:"editor_comment",editorDistributeHorizontal:"editorDistributeHorizontal",editorDistributeVertical:"editorDistributeVertical",editorHeading:"editor_heading",editorItalic:"editor_italic",editorItemAlignBottom:"editorItemAlignBottom",editorItemAlignCenter:"editorItemAlignCenter",editorItemAlignLeft:"editorItemAlignLeft",editorItemAlignMiddle:"editorItemAlignMiddle",editorItemAlignRight:"editorItemAlignRight",editorItemAlignTop:"editorItemAlignTop",editorLink:"editor_link",editorOrderedList:"editor_ordered_list",editorPositionBottomLeft:"editorPositionBottomLeft",editorPositionBottomRight:"editorPositionBottomRight",editorPositionTopLeft:"editorPositionTopLeft",editorPositionTopRight:"editorPositionTopRight",editorRedo:"editor_redo",editorStrike:"editor_strike",editorTable:"editor_table",editorUnderline:"editor_underline",editorUndo:"editor_undo",editorUnorderedList:"editor_unordered_list",email:"email",empty:"empty",emsApp:"app_ems",endpoint:"endpoint",eql:"eql",eraser:"eraser",error:"error",errorFilled:"errorFilled",esqlVis:"esqlVis",exit:"exit",expand:"expand",expandMini:"expandMini",exportAction:"export",eye:"eye",eyeClosed:"eye_closed",faceHappy:"face_happy",faceNeutral:"face_neutral",faceSad:"face_sad",fieldStatistics:"field_statistics",filebeatApp:"app_filebeat",filter:"filter",filterExclude:"filterExclude",filterIgnore:"filterIgnore",filterInclude:"filterInclude",filterInCircle:"filterInCircle",flag:"flag",fleetApp:"app_agent",fold:"fold",folderCheck:"folder_check",folderClosed:"folder_closed",folderExclamation:"folder_exclamation",folderOpen:"folder_open",frameNext:"frameNext",framePrevious:"framePrevious",fullScreen:"full_screen",fullScreenExit:"fullScreenExit",function:"function",gear:"gear",gisApp:"app_gis",glasses:"glasses",globe:"globe",grab:"grab",grabHorizontal:"grab_horizontal",grabOmnidirectional:"grabOmnidirectional",gradient:"gradient",graphApp:"app_graph",grid:"grid",grokApp:"app_grok",heart:"heart",heartbeatApp:"app_heartbeat",heatmap:"heatmap",help:"help",home:"home",iInCircle:"iInCircle",image:"image",importAction:"import",index:"index",indexClose:"index_close",indexEdit:"index_edit",indexFlush:"index_flush",indexManagementApp:"app_index_management",indexMapping:"index_mapping",indexOpen:"index_open",indexPatternApp:"app_index_pattern",indexRollupApp:"app_index_rollup",indexRuntime:"index_runtime",indexSettings:"index_settings",indexTemporary:"indexTemporary",infinity:"infinity",inputOutput:"inputOutput",inspect:"inspect",invert:"invert",ip:"ip",key:"key",keyboard:"keyboard",kqlField:"kql_field",kqlFunction:"kql_function",kqlOperand:"kql_operand",kqlSelector:"kql_selector",kqlValue:"kql_value",kubernetesNode:"kubernetesNode",kubernetesPod:"kubernetesPod",launch:"launch",layers:"layers",lensApp:"app_lens",lettering:"lettering",lineDashed:"lineDashed",lineDotted:"lineDotted",lineSolid:"lineSolid",link:"link",list:"list",listAdd:"list_add",lock:"lock",lockOpen:"lockOpen",logPatternAnalysis:"log_pattern_analysis",logRateAnalysis:"log_rate_analysis",logoAWS:"logo_aws",logoAWSMono:"logo_aws_mono",logoAerospike:"logo_aerospike",logoApache:"logo_apache",logoAppSearch:"logo_app_search",logoAzure:"logo_azure",logoAzureMono:"logo_azure_mono",logoBeats:"logo_beats",logoBusinessAnalytics:"logo_business_analytics",logoCeph:"logo_ceph",logoCloud:"logo_cloud",logoCloudEnterprise:"logo_cloud_ece",logoCode:"logo_code",logoCodesandbox:"logo_codesandbox",logoCouchbase:"logo_couchbase",logoDocker:"logo_docker",logoDropwizard:"logo_dropwizard",logoElastic:"logo_elastic",logoElasticStack:"logo_elastic_stack",logoElasticsearch:"logo_elasticsearch",logoEnterpriseSearch:"logo_enterprise_search",logoEtcd:"logo_etcd",logoGCP:"logo_gcp",logoGCPMono:"logo_gcp_mono",logoGithub:"logo_github",logoGmail:"logo_gmail",logoGolang:"logo_golang",logoGoogleG:"logo_google_g",logoHAproxy:"logo_haproxy",logoIBM:"logo_ibm",logoIBMMono:"logo_ibm_mono",logoKafka:"logo_kafka",logoKibana:"logo_kibana",logoKubernetes:"logo_kubernetes",logoLogging:"logo_logging",logoLogstash:"logo_logstash",logoMaps:"logo_maps",logoMemcached:"logo_memcached",logoMetrics:"logo_metrics",logoMongodb:"logo_mongodb",logoMySQL:"logo_mysql",logoNginx:"logo_nginx",logoObservability:"logo_observability",logoOsquery:"logo_osquery",logoPhp:"logo_php",logoPostgres:"logo_postgres",logoPrometheus:"logo_prometheus",logoRabbitmq:"logo_rabbitmq",logoRedis:"logo_redis",logoSecurity:"logo_security",logoSiteSearch:"logo_site_search",logoSketch:"logo_sketch",logoSlack:"logo_slack",logoUptime:"logo_uptime",logoVulnerabilityManagement:"logo_vulnerability_management",logoWebhook:"logo_webhook",logoWindows:"logo_windows",logoWorkplaceSearch:"logo_workplace_search",logsApp:"app_logs",logstashFilter:"logstash_filter",logstashIf:"logstash_if",logstashInput:"logstash_input",logstashOutput:"logstash_output",logstashQueue:"logstash_queue",machineLearningApp:"app_ml",magnet:"magnet",magnifyWithExclamation:"magnifyWithExclamation",magnifyWithMinus:"magnifyWithMinus",magnifyWithPlus:"magnifyWithPlus",managementApp:"app_management",mapMarker:"map_marker",memory:"memory",menu:"menu",menuDown:"menuDown",menuLeft:"menuLeft",menuRight:"menuRight",menuUp:"menuUp",merge:"merge",metricbeatApp:"app_metricbeat",metricsApp:"app_metrics",minimize:"minimize",minus:"minus",minusInCircle:"minus_in_circle",minusInCircleFilled:"minus_in_circle_filled",minusInSquare:"minus_in_square",mobile:"mobile",monitoringApp:"app_monitoring",moon:"moon",move:"move",namespace:"namespace",nested:"nested",newChat:"new_chat",node:"node",notebookApp:"app_notebook",number:"number",offline:"offline",online:"online",outlierDetectionJob:"ml_outlier_detection_job",package:"package",packetbeatApp:"app_packetbeat",pageSelect:"pageSelect",pagesSelect:"pagesSelect",palette:"palette",paperClip:"paper_clip",partial:"partial",pause:"pause",payment:"payment",pencil:"pencil",percent:"percent",pin:"pin",pinFilled:"pin_filled",pipeBreaks:"pipeBreaks",pipelineApp:"app_pipeline",pipeNoBreaks:"pipeNoBreaks",pivot:"pivot",play:"play",playFilled:"playFilled",plus:"plus",plusInCircle:"plus_in_circle",plusInCircleFilled:"plus_in_circle_filled",plusInSquare:"plus_in_square",popout:"popout",push:"push",questionInCircle:"question_in_circle",quote:"quote",recentlyViewedApp:"app_recently_viewed",refresh:"refresh",regressionJob:"ml_regression_job",reporter:"reporter",reportingApp:"app_reporting",returnKey:"return_key",save:"save",savedObjectsApp:"app_saved_objects",scale:"scale",search:"search",searchProfilerApp:"app_search_profiler",securityAnalyticsApp:"app_security_analytics",securityApp:"app_security",securitySignal:"securitySignal",securitySignalDetected:"securitySignalDetected",securitySignalResolved:"securitySignalResolved",sessionViewer:"sessionViewer",shard:"shard",share:"share",singleMetricViewer:"single_metric_viewer",snowflake:"snowflake",sortAscending:"sortAscending",sortDescending:"sortDescending",sortDown:"sort_down",sortLeft:"sortLeft",sortRight:"sortRight",sortUp:"sort_up",sortable:"sortable",spaces:"spaces",spacesApp:"app_spaces",sparkles:"sparkles",sqlApp:"app_sql",starEmpty:"star_empty",starEmptySpace:"star_empty_space",starFilled:"star_filled",starFilledSpace:"star_filled_space",starMinusEmpty:"star_minus_empty",starMinusFilled:"star_minus_filled",starPlusEmpty:"starPlusEmpty",starPlusFilled:"starPlusFilled",stats:"stats",stop:"stop",stopFilled:"stop_filled",stopSlash:"stop_slash",storage:"storage",string:"string",submodule:"submodule",sun:"sun",swatchInput:"swatch_input",symlink:"symlink",tableDensityCompact:"table_density_compact",tableDensityExpanded:"table_density_expanded",tableDensityNormal:"table_density_normal",tableOfContents:"tableOfContents",tag:"tag",tear:"tear",temperature:"temperature",timeline:"timeline",timelineWithArrow:"timelineWithArrow",timelionApp:"app_timelion",timeRefresh:"timeRefresh",timeslider:"timeslider",training:"training",transitionLeftIn:"transitionLeftIn",transitionLeftOut:"transitionLeftOut",transitionTopIn:"transitionTopIn",transitionTopOut:"transitionTopOut",trash:"trash",unfold:"unfold",unlink:"unlink",upgradeAssistantApp:"app_upgrade_assistant",uptimeApp:"app_uptime",user:"user",userAvatar:"userAvatar",users:"users",usersRolesApp:"app_users_roles",vector:"vector",videoPlayer:"videoPlayer",visArea:"vis_area",visAreaStacked:"vis_area_stacked",visBarHorizontal:"vis_bar_horizontal",visBarHorizontalStacked:"vis_bar_horizontal_stacked",visBarVertical:"vis_bar_vertical",visBarVerticalStacked:"vis_bar_vertical_stacked",visGauge:"vis_gauge",visGoal:"vis_goal",visLine:"vis_line",visMapCoordinate:"vis_map_coordinate",visMapRegion:"vis_map_region",visMetric:"vis_metric",visPie:"vis_pie",visTable:"vis_table",visTagCloud:"vis_tag_cloud",visText:"vis_text",visTimelion:"vis_timelion",visVega:"vis_vega",visVisualBuilder:"vis_visual_builder",visualizeApp:"app_visualize",vulnerabilityManagementApp:"app_vulnerability_management",warning:"warning",warningFilled:"warningFilled",alert:"warning",watchesApp:"app_watches",wordWrap:"wordWrap",wordWrapDisabled:"wordWrapDisabled",workplaceSearchApp:"app_workplace_search",wrench:"wrench",tokenAlias:"tokenAlias",tokenAnnotation:"tokenAnnotation",tokenArray:"tokenArray",tokenBinary:"tokenBinary",tokenBoolean:"tokenBoolean",tokenClass:"tokenClass",tokenCompletionSuggester:"tokenCompletionSuggester",tokenConstant:"tokenConstant",tokenDate:"tokenDate",tokenDimension:"tokenDimension",tokenElement:"tokenElement",tokenEnum:"tokenEnum",tokenEnumMember:"tokenEnumMember",tokenEvent:"tokenEvent",tokenException:"tokenException",tokenField:"tokenField",tokenFile:"tokenFile",tokenFlattened:"tokenFlattened",tokenFunction:"tokenFunction",tokenGeo:"tokenGeo",tokenHistogram:"tokenHistogram",tokenInterface:"tokenInterface",tokenIP:"tokenIP",tokenJoin:"tokenJoin",tokenKey:"tokenKey",tokenKeyword:"tokenKeyword",tokenMethod:"tokenMethod",tokenMetricCounter:"tokenMetricCounter",tokenMetricGauge:"tokenMetricGauge",tokenModule:"tokenModule",tokenNamespace:"tokenNamespace",tokenNested:"tokenNested",tokenNull:"tokenNull",tokenNumber:"tokenNumber",tokenObject:"tokenObject",tokenOperator:"tokenOperator",tokenPackage:"tokenPackage",tokenParameter:"tokenParameter",tokenPercolator:"tokenPercolator",tokenProperty:"tokenProperty",tokenRange:"tokenRange",tokenRankFeature:"tokenRankFeature",tokenRankFeatures:"tokenRankFeatures",tokenRepo:"tokenRepo",tokenSearchType:"tokenSearchType",tokenSemanticText:"tokenSemanticText",tokenShape:"tokenShape",tokenString:"tokenString",tokenStruct:"tokenStruct",tokenSymbol:"tokenSymbol",tokenTag:"tokenTag",tokenText:"tokenText",tokenTokenCount:"tokenTokenCount",tokenVariable:"tokenVariable",tokenVectorDense:"tokenVectorDense",tokenDenseVector:"tokenVectorDense",tokenVectorSparse:"tokenVectorSparse"};var T8e=T(Do()),sV=[];function eVt(){(0,T8e.unstable_batchedUpdates)(function(){for(var e=0;eUit});var j4r=T(z());var Vit=["title","titleId"];function Coe(){return Coe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Zit(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}var qit=function(t){var r=t.title,n=t.titleId,o=$it(t,Vit);return l("svg",Coe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0Zm0 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1Zm3.974 4.342a.5.5 0 0 1-.233.596l-.083.036L9 6.86v2.559l.974 2.923a.5.5 0 0 1-.233.596l-.083.036a.5.5 0 0 1-.596-.233l-.036-.083-1-3L8 9.5l-.026.158-1 3a.5.5 0 0 1-.97-.228l.022-.088L7 9.416V6.86l-2.658-.886a.5.5 0 0 1 .228-.97l.088.022L7.583 6h.833l2.926-.974a.5.5 0 0 1 .632.316ZM8 3a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"}))},Uit=qit;var BA={};J(BA,{icon:()=>Yit});var C4r=T(z());var Git=["title","titleId"];function Moe(){return Moe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Xit(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}var Kit=function(t){var r=t.title,n=t.titleId,o=Jit(t,Git);return l("svg",Moe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M2.5 2a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1zm0-1a1.5 1.5 0 0 1 1.415 1h1.908a1.5 1.5 0 0 1 1.393.943L8.839 7H12.5a.5.5 0 0 1 0 1H8.839l-1.623 4.057A1.5 1.5 0 0 1 5.823 13H3.915a1.5 1.5 0 1 1 0-1h1.908a.5.5 0 0 0 .464-.314L7.761 8H3.915a1.5 1.5 0 1 1 0-1H7.76L6.287 3.314A.5.5 0 0 0 5.823 3H3.915A1.5 1.5 0 1 1 2.5 1zm0 11a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM3 7.5a.5.5 0 1 0-1 0 .5.5 0 0 0 1 0zm9.354-3.354a.5.5 0 0 0-.708.708L13.793 7a.707.707 0 0 1 0 1l-2.147 2.146a.5.5 0 0 0 .708.708L14.5 8.707a1.707 1.707 0 0 0 0-2.414l-2.146-2.147z"}))},Yit=Kit;var zA={};J(zA,{icon:()=>nat});var A4r=T(z());var Qit=["title","titleId"];function Aoe(){return Aoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function tat(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}var rat=function(t){var r=t.title,n=t.titleId,o=eat(t,Qit);return l("svg",Aoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.55 9.502l.35-3.507a.905.905 0 10-1.8 0l.35 3.507a.552.552 0 001.1 0zM9 12a1 1 0 11-2 0 1 1 0 012 0z"}),l("path",{d:"M8.864 1.496a1 1 0 00-1.728 0l-7 12A1 1 0 001 15h14a1 1 0 00.864-1.504l-7-12zM1 14L8 2l7 12H1z"}))},nat=rat;var WA={};J(WA,{icon:()=>lat});var D4r=T(z());var oat=["title","titleId"];function Roe(){return Roe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function aat(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}var sat=function(t){var r=t.title,n=t.titleId,o=iat(t,oat);return l("svg",Roe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 9.169 2 5.25v6.17l6 3.428 6-3.428V5.25L8 9.17ZM15 4v8l-7 4-7-4V4l7-4 7 4Zm-1.428.336L8 1.152 2.428 4.336 8 7.974l5.572-3.638Z",clipRule:"evenodd"}))},lat=sat;var HA={};J(HA,{icon:()=>fat});var N4r=T(z());var uat=["title","titleId"];function Doe(){return Doe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pat(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}var dat=function(t){var r=t.title,n=t.titleId,o=cat(t,uat);return l("svg",Doe({xmlns:"http://www.w3.org/2000/svg",width:14,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M13.924 4.013a.605.605 0 00-.228-.236L7.304.082a.607.607 0 00-.608 0L.304 3.777A.62.62 0 000 4.304v7.392c0 .217.116.418.304.527l6.392 3.695c.188.11.42.11.608 0l6.392-3.695a.609.609 0 00.304-.527V4.304a.607.607 0 00-.076-.291zM1 5.079v6.391l6 3.47 6-3.47V5.08L7.252 8.432 7 8.579l-.252-.147L1 5.079zm11.476-.852L7 1.06 1.524 4.227 7 7.42l5.476-3.194z"}))},fat=dat;var VA={};J(VA,{icon:()=>yat});var B4r=T(z());var hat=["title","titleId"];function Loe(){return Loe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vat(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}var gat=function(t){var r=t.title,n=t.titleId,o=mat(t,hat);return l("svg",Loe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 6.5a4.5 4.5 0 1 1 5 4.473V16H7v-5.027A4.5 4.5 0 0 1 3 6.5Z"}))},yat=gat;var $A={};J($A,{icon:()=>_at});var W4r=T(z());var bat=["title","titleId"];function Noe(){return Noe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Oat(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}var xat=function(t){var r=t.title,n=t.titleId,o=wat(t,bat);return l("svg",Noe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M14.5 14H2V1.5a.5.5 0 0 0-1 0v13a.5.5 0 0 0 .5.5h13a.5.5 0 0 0 0-1Z"}),l("path",{d:"M8.42 5a.5.5 0 0 1 .505.43L9.864 12h.873l.957-.87a.5.5 0 0 1 .672 0l1.1 1a.5.5 0 0 1-.672.74l-.764-.694-.764.694a.5.5 0 0 1-.336.13h-1.5a.5.5 0 0 1-.495-.43l-.429-3-.312 2.982a.5.5 0 0 1-.834.318l-.689-.626-.404.552a.5.5 0 0 1-.404.204h-.53a.5.5 0 0 1-.403-.204l-.405-.552-.689.626a.5.5 0 1 1-.672-.74l1.1-1a.5.5 0 0 1 .74.074l.583.796h.023l.583-.796a.5.5 0 0 1 .74-.074l.37.336.63-6.018A.5.5 0 0 1 8.42 5Zm.08-3.01a.5.5 0 1 0 0 1.002.5.5 0 0 0 0-1.002ZM8.5 4A1.503 1.503 0 0 1 7 2.493a1.5 1.5 0 0 1 .44-1.066c.566-.57 1.554-.57 2.121 0 .283.285.439.663.439 1.066A1.502 1.502 0 0 1 8.5 4Z"}))},_at=xat;var ZA={};J(ZA,{icon:()=>kat});var V4r=T(z());var Sat=["title","titleId"];function Foe(){return Foe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Eat(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}var Pat=function(t){var r=t.title,n=t.titleId,o=Iat(t,Sat);return l("svg",Foe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1 5V1h4v4H1Zm3-1V2H2v2h2Zm7 1V1h4v4h-4Zm1-1h2V2h-2v2ZM1 10V6h4v4H1Zm3-1V7H2v2h2Zm2 6v-4h4v4H6Zm1-1h2v-2H7v2Zm4 1v-4h4v4h-4Zm1-1h2v-2h-2v2Zm-1-8h4v4h-4V6ZM6 6h4v4H6V6Zm-5 5h4v4H1v-4ZM6 1h4v4H6V1Z"}))},kat=Pat;var qA={};J(qA,{icon:()=>Aat});var Z4r=T(z());var jat=["title","titleId"];function Boe(){return Boe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Cat(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}var Mat=function(t){var r=t.title,n=t.titleId,o=Tat(t,jat);return l("svg",Boe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 0h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H2Zm.5 2h10a.5.5 0 1 1 0 1h-10a.5.5 0 0 1 0-1Zm1 3h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1 0-1Zm2 3h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 1 0-1Zm3 3h5a.5.5 0 1 1 0 1h-5a.5.5 0 1 1 0-1Z"}))},Aat=Mat;var UA={};J(UA,{icon:()=>Fat});var U4r=T(z());var Rat=["title","titleId"];function zoe(){return zoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Lat(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}var Nat=function(t){var r=t.title,n=t.titleId,o=Dat(t,Rat);return l("svg",zoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M32 30H0V3h12.57l3 5H32v22ZM2 28h28V10H14.43l-3-5H2v23Z"}),l("path",{d:"M21 18h-4v-4h-2v4h-4v2h4v4h2v-4h4z",className:"euiIcon__fillSecondary"}))},Fat=Nat;var GA={};J(GA,{icon:()=>Vat});var J4r=T(z());var Bat=["title","titleId"];function Woe(){return Woe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Wat(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}var Hat=function(t){var r=t.title,n=t.titleId,o=zat(t,Bat);return l("svg",Woe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2.909 26.182h1.939v4.848H2.909z",className:"euiIcon__fillSecondary"}),l("path",{d:"M4.848 16.62V0H2.91v16.62a3.879 3.879 0 1 0 1.94 0Zm-.97 5.683a1.94 1.94 0 1 1 0-3.879 1.94 1.94 0 0 1 0 3.879Z"}),l("path",{d:"M14.545 16.485h1.939V31.03h-1.939z",className:"euiIcon__fillSecondary"}),l("path",{d:"M16.485 6.924V0h-1.94v6.924a3.879 3.879 0 1 0 1.94 0Zm-.97 5.682a1.94 1.94 0 1 1 0-3.879 1.94 1.94 0 0 1 0 3.88Z"}),l("path",{d:"M26.182 26.182h1.939v4.848h-1.939z",className:"euiIcon__fillSecondary"}),l("path",{d:"M28.121 16.62V0h-1.94v16.62a3.879 3.879 0 1 0 1.94 0Zm-.97 5.683a1.94 1.94 0 1 1 0-3.879 1.94 1.94 0 0 1 0 3.879Z"}))},Vat=Hat;var JA={};J(JA,{icon:()=>Gat});var K4r=T(z());var $at=["title","titleId"];function Hoe(){return Hoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function qat(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}var Uat=function(t){var r=t.title,n=t.titleId,o=Zat(t,$at);return l("svg",Hoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2.996 18.636 0 20.434v6.132l6 3.6 5-3 5 3 5-3 5 3 6-3.6v-6.132l-5-3v-5l-5-3v-5l-6-3.6-6 3.6v2.832l2 .033V5.566l4-2.4 4 2.4v3.868l-1.996 1.197 1 1.733L21 11.166l4 2.4v3.868l-4 2.4-2.257-1.354-.971 1.75L20 21.565v3.868l-4 2.4-4-2.4v-1.7l-2-.033v1.733l-4 2.4-4-2.4v-3.868l1.996-1.197-1-1.733ZM22 25.434v-3.868l4-2.4 4 2.4v3.868l-4 2.4-4-2.4Z"}),l("path",{d:"m11 22.166-6-3.6v-6.132l6-3.6 6 3.6v6.132l-6 3.6Zm4-4.732v-3.868l-4-2.4-4 2.4v3.868l4 2.4 4-2.4Z",className:"euiIcon__fillSecondary"}))},Gat=Uat;var XA={};J(XA,{icon:()=>Qat});var Q4r=T(z());var Jat=["title","titleId"];function Voe(){return Voe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Kat(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}var Yat=function(t){var r=t.title,n=t.titleId,o=Xat(t,Jat);return l("svg",Voe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 10h4v2H1V1h30v6h-2V3H3v7zm26 19v-6h2v8H18v-8h2v6h9z"}),l("path",{d:"M31 10H9v11h12c5.523 0 10-4.477 10-10v-1zm-10 9H11v-7h17.938A8.001 8.001 0 0 1 21 19z",className:"euiIcon__fillSecondary"}))},Qat=Yat;var KA={};J(KA,{icon:()=>ost});var txr=T(z());var est=["title","titleId"];function $oe(){return $oe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rst(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}var nst=function(t){var r=t.title,n=t.titleId,o=tst(t,est);return l("svg",$oe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M15.5 11.915 27 5.279 19.5.938a7.002 7.002 0 0 0-7 0l-8 4.62A7 7 0 0 0 1 11.62v9.237a7 7 0 0 0 3.5 6.061l7.5 4.33V17.98a7 7 0 0 1 3.5-6.063ZM10 27.785v-9.808a9 9 0 0 1 4.5-7.793l8.503-4.91L18.5 2.672a5.003 5.003 0 0 0-5 0l-8 4.619A5 5 0 0 0 3 11.62v9.238a5 5 0 0 0 2.5 4.33l4.5 2.598Z"}),l("path",{fillRule:"evenodd",d:"M18.409 13.55a7.089 7.089 0 0 1 1.035 1.711A6.93 6.93 0 0 1 20 17.98v13.27l7.5-4.33a7 7 0 0 0 3.5-6.061v-9.239a6.992 6.992 0 0 0-1.587-4.421L18.409 13.55Zm2.777.705A8.933 8.933 0 0 1 22 17.979v9.807l4.5-2.598a5 5 0 0 0 2.5-4.33V11.62c0-.588-.106-1.161-.303-1.7l-7.511 4.335Z",className:"euiIcon__fillSecondary"}))},ost=nst;var YA={};J(YA,{icon:()=>ust});var nxr=T(z());var ist=["title","titleId"];function Zoe(){return Zoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function sst(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}var lst=function(t){var r=t.title,n=t.titleId,o=ast(t,ist);return l("svg",Zoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M15 0h2v32h-2z",className:"euiIcon__fillSecondary"}),l("path",{d:"M0 32h13v-2H2V2h11V0H0zM19 0v2h11v28H19v2h13V0z"}))},ust=lst;var QA={};J(QA,{icon:()=>hst});var ixr=T(z());var cst=["title","titleId"];function qoe(){return qoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function dst(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}var fst=function(t){var r=t.title,n=t.titleId,o=pst(t,cst);return l("svg",qoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 17h2v7H7zM12 14h2v10h-2zM17 16h2v8h-2zM22 14h3v2h-3zM22 18h3v2h-3zM22 22h3v2h-3z",className:"euiIcon__fillSecondary"}),l("path",{d:"M30.73 24a6.47 6.47 0 0 1 .45-2.19c.337-.9.52-1.85.54-2.81a8.55 8.55 0 0 0-.54-2.81 6.47 6.47 0 0 1-.45-2.19 9.2 9.2 0 0 1 .62-2.49c.53-1.57 1.08-3.19.08-4.2-1-1.01-2.41-.44-3.52.05a5.59 5.59 0 0 1-2.09.64 5.3 5.3 0 0 1-.59 0L16 .28 6.77 8a5.3 5.3 0 0 1-.59 0 5.59 5.59 0 0 1-2.09-.65C3 6.87 1.6 6.25.57 7.31c-1.03 1.06-.45 2.63.08 4.2A9.2 9.2 0 0 1 1.27 14a6.47 6.47 0 0 1-.45 2.19A8.55 8.55 0 0 0 .28 19c.02.96.203 1.91.54 2.81A6.47 6.47 0 0 1 1.27 24a9.2 9.2 0 0 1-.62 2.49c-.53 1.57-1.08 3.19-.08 4.2.353.38.852.59 1.37.58a5.67 5.67 0 0 0 2.15-.63A5.59 5.59 0 0 1 6.18 30a7.13 7.13 0 0 1 2.29.47 8 8 0 0 0 2.62.53 7.37 7.37 0 0 0 2.47-.51A7.14 7.14 0 0 1 16 30a6.24 6.24 0 0 1 2.14.45 8 8 0 0 0 2.77.55 8.08 8.08 0 0 0 2.77-.55 6.24 6.24 0 0 1 2.14-.45 5.59 5.59 0 0 1 2.09.65c1.11.49 2.49 1.11 3.52.05 1.03-1.06.45-2.63-.08-4.2a9.2 9.2 0 0 1-.62-2.5ZM21.17 7h-.26a8 8 0 0 0-2.77.55A6.24 6.24 0 0 1 16 8a6.24 6.24 0 0 1-2.14-.45A8 8 0 0 0 11.09 7h-.26L16 2.72 21.17 7Zm8.89 22.27a4.42 4.42 0 0 1-1.34-.46 7.08 7.08 0 0 0-2.9-.82 8.14 8.14 0 0 0-2.78.55 6.13 6.13 0 0 1-2.13.45 6.24 6.24 0 0 1-2.14-.45A8 8 0 0 0 16 28a9 9 0 0 0-3.08.6 5.74 5.74 0 0 1-1.83.4 6.36 6.36 0 0 1-2-.43A8.72 8.72 0 0 0 6.18 28a7.08 7.08 0 0 0-2.9.82 9.65 9.65 0 0 1-1.28.52 6.08 6.08 0 0 1 .52-2.21c.403-1 .65-2.055.73-3.13a8.55 8.55 0 0 0-.54-2.81A6.47 6.47 0 0 1 2.27 19a6.47 6.47 0 0 1 .44-2.19c.337-.9.52-1.85.54-2.81a10.48 10.48 0 0 0-.72-3.13 9 9 0 0 1-.59-2.16H2c.447.1.88.255 1.29.46a7.08 7.08 0 0 0 2.9.82A8.14 8.14 0 0 0 9 9.44 6.13 6.13 0 0 1 11.09 9a6.13 6.13 0 0 1 2.13.45A8.14 8.14 0 0 0 16 10a8.14 8.14 0 0 0 2.78-.55A6.13 6.13 0 0 1 20.91 9a6.13 6.13 0 0 1 2.09.44 8.14 8.14 0 0 0 2.78.55 7.08 7.08 0 0 0 2.9-.82A9.65 9.65 0 0 1 30 8.66a6.08 6.08 0 0 1-.52 2.21c-.403 1-.65 2.055-.73 3.13.02.96.203 1.91.54 2.81a6.47 6.47 0 0 1 .44 2.19 6.47 6.47 0 0 1-.44 2.19 8.55 8.55 0 0 0-.54 2.81c.078 1.074.32 2.13.72 3.13a9 9 0 0 1 .59 2.16v-.02Z"}))},hst=fst;var eR={};J(eR,{icon:()=>bst});var sxr=T(z());var mst=["title","titleId"];function Uoe(){return Uoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function gst(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}var yst=function(t){var r=t.title,n=t.titleId,o=vst(t,mst);return l("svg",Uoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 6h22v7h-2V8H6v19H4V6Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M10 12H7v-2h3v2Zm1 0h12v-2H11v2Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M24 1H0v26h1l-1 .001v.026a2.256 2.256 0 0 0 .01.185 4.318 4.318 0 0 0 .563 1.792C1.194 30.064 2.399 31 4.5 31H17v-2H8.429a4.32 4.32 0 0 0 .57-1.927v-.062L9 27.005v-.003S9 27 8 27h1V16h21v3h2v-5H7v12.995l-.003.05a2.32 2.32 0 0 1-.298.95C6.442 28.436 5.898 29 4.5 29c-1.398 0-1.942-.564-2.199-1.004a2.32 2.32 0 0 1-.3-1.001L2 26.992V3h20v3h2V1Z"}),l("path",{d:"M23 21v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"}),l("path",{fillRule:"evenodd",d:"M24 32a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm0-2a5 5 0 1 0 0-10 5 5 0 0 0 0 10Z"}))},bst=yst;var tR={};J(tR,{icon:()=>Sst});var uxr=T(z());var wst=["title","titleId"];function Goe(){return Goe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function xst(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}var _st=function(t){var r=t.title,n=t.titleId,o=Ost(t,wst);return l("svg",Goe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m11.276 29 .594 2H0l7.621-14.29.811 2.73L3.333 29h7.943ZM28.92 31l-4.987-16.598A16 16 0 0 0 8.688 3l1.8 6H8.4L6 1h2.607a18 18 0 0 1 17.241 12.828L31 31h-2.08Z"}),l("path",{d:"M12.037 14.02 16.492 29h6.827l-2.333-7.849a10 10 0 0 0-8.949-7.13ZM9.35 12h2.05a12 12 0 0 1 11.503 8.581L26 31H15L9.35 12Z",className:"euiIcon__fillSecondary"}))},Sst=_st;var rR={};J(rR,{icon:()=>jst});var pxr=T(z());var Ist=["title","titleId"];function Joe(){return Joe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Pst(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}var kst=function(t){var r=t.title,n=t.titleId,o=Est(t,Ist);return l("svg",Joe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M29 9H3a3 3 0 0 1-3-3V3a3 3 0 0 1 3-3h26a3 3 0 0 1 3 3v3a3 3 0 0 1-3 3ZM3 2a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h26a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Z"}),l("path",{d:"M29 32H3a3 3 0 0 1-3-3V14a3 3 0 0 1 3-3h26a3 3 0 0 1 3 3v15a3 3 0 0 1-3 3ZM3 13a1 1 0 0 0-1 1v15a1 1 0 0 0 1 1h26a1 1 0 0 0 1-1V14a1 1 0 0 0-1-1H3Z",className:"euiIcon__fillSecondary"}),l("path",{d:"m7.29 17.71 3.3 3.29-3.3 3.29 1.42 1.42 4.7-4.71-4.7-4.71zM15 24h9v2h-9z"}))},jst=kst;var nR={};J(nR,{icon:()=>Rst});var fxr=T(z());var Tst=["title","titleId"];function Xoe(){return Xoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Mst(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}var Ast=function(t){var r=t.title,n=t.titleId,o=Cst(t,Tst);return l("svg",Xoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M0 0v16h8.7l5.3-6V0H0zm2 2h10v7H7v5H2V2zm8.45 9L9 12.64V11h1.45zM18 16v16h8.7l5.3-6V16H18zm2 2h10v7h-5v5h-5V18zm8.45 9L27 28.64V27h1.45z"}),l("path",{d:"M5 18H3c0 6.075 4.925 11 11 11h2v-2h-2a9 9 0 0 1-9-9zM18 3h-2v2h2a9 9 0 0 1 9 9h2c0-6.075-4.925-11-11-11z",className:"euiIcon__fillSecondary"}))},Rst=Ast;var oR={};J(oR,{icon:()=>Bst});var mxr=T(z());var Dst=["title","titleId"];function Koe(){return Koe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Nst(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}var Fst=function(t){var r=t.title,n=t.titleId,o=Lst(t,Dst);return l("svg",Koe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M29 9H3a3 3 0 0 1-3-3V3a3 3 0 0 1 3-3h26a3 3 0 0 1 3 3v3a3 3 0 0 1-3 3ZM3 2a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h26a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Z"}),l("path",{d:"M12 20H3a3 3 0 0 1-3-3v-3a3 3 0 0 1 3-3h9a3 3 0 0 1 3 3v3a3 3 0 0 1-3 3Zm-9-7a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1H3Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M12 31H3a3 3 0 0 1-3-3v-3a3 3 0 0 1 3-3h9a3 3 0 0 1 3 3v3a3 3 0 0 1-3 3Zm-9-7a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1H3Z"}),l("path",{d:"M29 31h-9a3 3 0 0 1-3-3V14a3 3 0 0 1 3-3h9a3 3 0 0 1 3 3v14a3 3 0 0 1-3 3Zm-9-18a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1V14a1 1 0 0 0-1-1h-9Z",className:"euiIcon__fillSecondary"}))},Bst=Fst;var iR={};J(iR,{icon:()=>$st});var gxr=T(z());var zst=["title","titleId"];function Yoe(){return Yoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Hst(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}var Vst=function(t){var r=t.title,n=t.titleId,o=Wst(t,zst);return l("svg",Yoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M21 28h-2v-8.49l.6-.26A9 9 0 0 0 21 3.52V11H11V3.52a9 9 0 0 0 1.4 15.73l.6.26V28h-2v-7.21A11 11 0 0 1 11.6.92L13 .31V9h6V.31l1.4.61a11 11 0 0 1 .6 19.87V28Z"}),l("path",{d:"M11 30h10v2H11z",className:"euiIcon__fillSecondary"}))},$st=Vst;var aR={};J(aR,{icon:()=>Jst});var bxr=T(z());var Zst=["title","titleId"];function Qoe(){return Qoe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ust(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}var Gst=function(t){var r=t.title,n=t.titleId,o=qst(t,Zst);return l("svg",Qoe({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m8.33 23.67 4.79-10.55 10.55-4.79-4.79 10.55-10.55 4.79Zm6.3-9-2.28 5 5-2.28 2.28-5-5 2.28Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M16 0C7.163 0 0 7.163 0 16s7.163 16 16 16 16-7.163 16-16A16 16 0 0 0 16 0Zm1 29.95V28h-2v1.95A14 14 0 0 1 2.05 17H4v-2H2.05A14 14 0 0 1 15 2.05V4h2V2.05A14 14 0 0 1 29.95 15H28v2h1.95A14 14 0 0 1 17 29.95Z"}))},Jst=Gst;var sR={};J(sR,{icon:()=>elt});var Oxr=T(z());var Xst=["title","titleId"];function eie(){return eie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Yst(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}var Qst=function(t){var r=t.title,n=t.titleId,o=Kst(t,Xst);return l("svg",eie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 22h3v2H1V1h23v5h-2V3H3z",className:"euiIcon__fillSecondary"}),l("path",{d:"M15.228 29c1.492-1.678 1.353-2.859.009-5.654-.049-.1-.049-.1-.097-.203-1.369-2.855-1.626-4.491-.325-6.582 2.796-4.498 9.514-2.642 14.185 2.317V10H10v19h5.228Zm2.47 0H29v-6.983c-3.88-5.406-10.376-7.795-12.487-4.4-.83 1.336-.669 2.37.43 4.662l.097.2c1.352 2.814 1.731 4.63.659 6.521ZM31 8v23H8V8h23Z"}))},elt=Qst;var lR={};J(lR,{icon:()=>ilt});var _xr=T(z());var tlt=["title","titleId"];function tie(){return tie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nlt(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}var olt=function(t){var r=t.title,n=t.titleId,o=rlt(t,tlt);return l("svg",tie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 18h16v2H8zM8 13h9v2H8zM8 23h16v2H8z",className:"euiIcon__fillSecondary"}),l("path",{d:"M21.41 0H5a3 3 0 0 0-3 3v26a3 3 0 0 0 3 3h22a3 3 0 0 0 3-3V8.59L21.41 0ZM22 3.41 26.59 8H22V3.41ZM27 30H5a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h15v8h8v19a1 1 0 0 1-1 1Z"}))},ilt=olt;var uR={};J(uR,{icon:()=>clt});var Ixr=T(z());var alt=["title","titleId"];function rie(){return rie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function llt(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}var ult=function(t){var r=t.title,n=t.titleId,o=slt(t,alt);return l("svg",rie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M21 2.82 16 .038 11 2.82v2.289l5-2.782 5 2.782v-2.29Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M21 7.282 16 4.5l-5 2.782V9.57l5-2.781 5 2.781V7.282Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M7 5.045 2 7.827v15.577l14 7.788 14-7.788V7.827l-5-2.782v2.289l3 1.669v13.225l-12 6.676-12-6.676V9.003l3-1.669V5.045Z"}),l("path",{fillRule:"evenodd",d:"M22 12.5 16 9l-6 3.5v7l6 3.5 6-3.5v-7Zm-9.974 1.205L16 11.387l3.974 2.318v4.59L16 20.613l-3.974-2.318v-4.59Z",className:"euiIcon__fillSecondary",clipRule:"evenodd"}))},clt=ult;var cR={};J(cR,{icon:()=>mlt});var Pxr=T(z());var plt=["title","titleId"];function nie(){return nie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function flt(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}var hlt=function(t){var r=t.title,n=t.titleId,o=dlt(t,plt);return l("svg",nie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m29.014 23.89 2.296 1.145L16 32.101.53 24.961l2.49-1.056 2.453 1.132-.003.002L16 29.899l10.69-4.934-.003-.001 2.327-1.074Zm-4.972-7.482 7.268 3.627L16 27.101.53 19.961l7.668-3.252c.392.486.838 1.02 1.34 1.604L5.47 20.039 16 24.899l10.69-4.934-3.954-1.973c.493-.58.928-1.107 1.306-1.584Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M18 9a2 2 0 1 0-4 0 2 2 0 0 0 4 0Zm2 0a4 4 0 1 1-8 0 4 4 0 0 1 8 0Zm-3.268 12.681-.732.787-.732-.787c-3.557-3.824-5.817-6.462-6.81-7.96A8.746 8.746 0 0 1 7 8.875C7 3.97 11.033 0 16 0s9 3.97 9 8.875a8.746 8.746 0 0 1-1.459 4.846c-.992 1.498-3.252 4.136-6.809 7.96Zm5.142-9.064A6.747 6.747 0 0 0 23 8.875C23 5.081 19.87 2 16 2S9 5.081 9 8.875c0 1.349.394 2.636 1.126 3.742.846 1.277 2.812 3.593 5.874 6.912 3.062-3.32 5.028-5.635 5.874-6.912Z"}))},mlt=hlt;var pR={};J(pR,{icon:()=>wlt});var jxr=T(z());var vlt=["title","titleId"];function oie(){return oie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ylt(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}var blt=function(t){var r=t.title,n=t.titleId,o=glt(t,vlt);return l("svg",oie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M24 20a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm-8.2-5.62A4 4 0 1 1 18 1.06a4 4 0 0 1-2.2 7.32zm0-6a2 2 0 1 0 .01 0h-.01zm.01 29.24a4 4 0 1 1-.083-8 4 4 0 0 1 .083 8zm0-6a2 2 0 1 0 .39 0 2 2 0 0 0-.4 0h.01z",className:"euiIcon__fillSecondary"}),l("path",{d:"M18 17v-2h-6.14a4 4 0 0 0-.86-1.64l2.31-3.44-1.68-1.12-2.31 3.44A4 4 0 0 0 8 12a4 4 0 1 0 0 8 4 4 0 0 0 1.32-.24l2.31 3.44 1.66-1.12L11 18.64a4 4 0 0 0 .86-1.64H18ZM6 16a2 2 0 1 1 4 0 2 2 0 0 1-4 0Z"}))},wlt=blt;var dR={};J(dR,{icon:()=>Ilt});var Cxr=T(z());var Olt=["title","titleId"];function iie(){return iie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _lt(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}var Slt=function(t){var r=t.title,n=t.titleId,o=xlt(t,Olt);return l("svg",iie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.727 2.91V.97c-1.357 0-4.18 0-5.818 1.94-.97 1.182-1.328 2.908-.97 4.983.563 3.307.97 6.332.301 7.157-.3.31-.97.465-2.24.465v1.94c1.27 0 1.94.155 2.25.494.698.824.262 3.879-.3 7.156-.35 2.124-.01 3.802.96 4.956C5.527 32 8.35 32 9.726 32v-1.94c-1.144 0-3.287 0-4.315-1.221a4.112 4.112 0 0 1-.533-3.414c.843-5.042.97-7.37-.136-8.727-.068-.077-.145-.136-.213-.203-.068-.068.145-.127.213-.204 1.144-1.367.97-3.695.136-8.727a4.112 4.112 0 0 1 .543-3.414C6.44 2.91 8.583 2.91 9.727 2.91zM32.03 17.454v-1.94c-1.27 0-1.94-.155-2.25-.494-.698-.825-.261-3.88.301-7.157.35-2.123 0-3.801-.97-4.984C27.493.94 24.672.94 23.294.94v1.97c1.145 0 3.288 0 4.315 1.22a4.112 4.112 0 0 1 .544 3.414c-.844 5.043-.97 7.37.135 8.728.068.077.146.135.214.203.067.068-.146.126-.214.204-1.144 1.367-.97 3.694-.135 8.727.329 1.162.13 2.41-.544 3.413-1.018 1.242-3.16 1.242-4.305 1.242V32c1.358 0 4.18 0 5.818-1.94.97-1.182 1.329-2.908.97-4.984-.563-3.306-.97-6.332-.3-7.156.3-.31.969-.465 2.24-.465z"}),l("path",{d:"M26.212 15.515h-2.007a7.758 7.758 0 0 0-6.72-6.72V6.788h-1.94v2.007a7.758 7.758 0 0 0-6.72 6.72H6.818v1.94h2.007a7.758 7.758 0 0 0 6.72 6.72v2.007h1.94v-2.007a7.758 7.758 0 0 0 6.72-6.72h2.007v-1.94Zm-8.727 6.7v-1.851h-1.94v1.852a5.818 5.818 0 0 1-4.76-4.761h1.851v-1.94h-1.852a5.818 5.818 0 0 1 4.761-4.761v1.852h1.94v-1.852a5.818 5.818 0 0 1 4.761 4.761h-1.852v1.94h1.852a5.818 5.818 0 0 1-4.761 4.76Z",className:"euiIcon__fillSecondary"}))},Ilt=Slt;var fR={};J(fR,{icon:()=>Tlt});var Axr=T(z());var Elt=["title","titleId"];function aie(){return aie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function klt(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}var jlt=function(t){var r=t.title,n=t.titleId,o=Plt(t,Elt);return l("svg",aie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.14 15.39a8.058 8.058 0 0 1-2.2-4.043A6.788 6.788 0 0 1 4.198 5.47a6.73 6.73 0 0 1 8.727-.213l1.26-1.464a8.65 8.65 0 0 0-11.277.232A8.727 8.727 0 0 0 .068 11.6a10.172 10.172 0 0 0 2.793 5.275l1.28-1.484Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M15.515 31.274 4.548 18.454 15.855 4.763a8.67 8.67 0 0 1 12.266-.746 8.727 8.727 0 0 1 2.91 7.205c-.243 2.695-2.037 4.732-3.482 6.37L15.515 31.275Zm-8.427-12.82 8.427 9.862 10.55-11.995c1.32-1.503 2.822-3.21 3.007-5.265a6.788 6.788 0 0 0-2.24-5.586 6.73 6.73 0 0 0-9.504.563L7.088 18.455Z"}))},Tlt=jlt;var hR={};J(hR,{icon:()=>Dlt});var Dxr=T(z());var Clt=["title","titleId"];function sie(){return sie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Alt(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}var Rlt=function(t){var r=t.title,n=t.titleId,o=Mlt(t,Clt);return l("svg",sie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),l("path",{d:"M4 32a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-4a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm12 4a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-4a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm12 4a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-4a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM23 8V6h-2.1a5 5 0 0 0-.73-1.75l1.49-1.49-1.42-1.42-1.49 1.49A5 5 0 0 0 17 2.1V0h-2v2.1a5 5 0 0 0-1.75.73l-1.49-1.49-1.42 1.42 1.49 1.49A5 5 0 0 0 11.1 6H9v2h2.1a5 5 0 0 0 .73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 0 0 1.76.74V14h2v-2.1a5 5 0 0 0 1.75-.73l1.49 1.49 1.41-1.41-1.48-1.5A5 5 0 0 0 20.9 8H23zm-7 2a3 3 0 1 1 0-6 3 3 0 0 1 0 6z",className:"euiIcon__fillSecondary"}),l("path",{d:"M16 8a1 1 0 0 1-1-1 1.39 1.39 0 0 1 0-.2.65.65 0 0 1 .06-.18.74.74 0 0 1 .09-.18 1.61 1.61 0 0 1 .12-.15.93.93 0 0 1 .33-.21 1 1 0 0 1 1.09.21l.12.15a.78.78 0 0 1 .09.18.62.62 0 0 1 .1.18 1.27 1.27 0 0 1 0 .2 1 1 0 0 1-1 1Z"}))},Dlt=Rlt;var mR={};J(mR,{icon:()=>zlt});var Nxr=T(z());var Llt=["title","titleId"];function lie(){return lie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Flt(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}var Blt=function(t){var r=t.title,n=t.titleId,o=Nlt(t,Llt);return l("svg",lie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M20 14h-8a3 3 0 0 1-3-3V3a3 3 0 0 1 3-3h8a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3ZM12 2a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1h-8ZM17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),l("path",{d:"M4 32a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-4a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm12 4a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-4a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm12 4a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-4a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM13 4h6v2h-6zM13 8h6v2h-6z",className:"euiIcon__fillSecondary"}))},zlt=Blt;var vR={};J(vR,{icon:()=>Zlt});var Bxr=T(z());var Wlt=["title","titleId"];function uie(){return uie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Vlt(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}var $lt=function(t){var r=t.title,n=t.titleId,o=Hlt(t,Wlt);return l("svg",uie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M32 26v-2h-2.1a5 5 0 0 0-.73-1.75l1.49-1.49-1.41-1.41-1.49 1.49A5 5 0 0 0 26 20.1V18h-2v2.1a5 5 0 0 0-1.75.73l-1.49-1.49-1.41 1.41 1.49 1.49A5 5 0 0 0 20.1 24H18v2h2.1a5 5 0 0 0 .73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 0 0 1.76.74V32h2v-2.1a5 5 0 0 0 1.75-.73l1.49 1.49 1.41-1.41-1.49-1.49A5 5 0 0 0 29.9 26H32Zm-7 2a3 3 0 1 1 0-6 3 3 0 0 1 0 6Z"}),l("path",{d:"M25.71 24.29a1 1 0 0 0-1.09-.21 1.15 1.15 0 0 0-.33.21.93.93 0 0 0-.21.33 1 1 0 0 0 1.3 1.3 1.15 1.15 0 0 0 .33-.21 1 1 0 0 0 .21-1.09.94.94 0 0 0-.21-.33Z"}),l("path",{d:"M5 6h16v2H5zM5 12h16v2H5zM5 18h10v2H5zM5 24h8v2H5z",className:"euiIcon__fillSecondary"}),l("path",{d:"M16 32H3a3 3 0 0 1-3-3V3a3 3 0 0 1 3-3h20a3 3 0 0 1 3 3v13h-2V3a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v26a1 1 0 0 0 1 1h13v2Z"}))},Zlt=$lt;var gR={};J(gR,{icon:()=>Xlt});var Wxr=T(z());var qlt=["title","titleId"];function cie(){return cie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Glt(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}var Jlt=function(t){var r=t.title,n=t.titleId,o=Ult(t,qlt);return l("svg",cie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m23.793 14.293 1.414 1.414-6.408 6.409-3.75-3.25-4.342 4.341-1.414-1.414 5.658-5.659 3.75 3.25 5.092-5.091ZM12 11v5l-2 2v-7h2Zm10-6v8l-2 2V5h2Zm-5 3v7l-2-2V8h2Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M17 0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-3.782 0-7.238-1.4-9.876-3.71l-5.417 5.417-1.414-1.414 5.417-5.417A14.943 14.943 0 0 1 2 15c0-1.05.108-2.074.313-3.062l1.906.672C4.075 13.385 4 14.184 4 15c0 7.18 5.82 13 13 13s13-5.82 13-13S24.18 2 17 2c-1.002 0-1.978.113-2.915.328l-.75-1.877A15.031 15.031 0 0 1 17 0ZM9.621 1.937l.75 1.877a13.062 13.062 0 0 0-4.82 5.024l-1.907-.673a15.068 15.068 0 0 1 5.977-6.228Z"}))},Xlt=Jlt;var yR={};J(yR,{icon:()=>tut});var Vxr=T(z());var Klt=["title","titleId"];function pie(){return pie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Qlt(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}var eut=function(t){var r=t.title,n=t.titleId,o=Ylt(t,Klt);return l("svg",pie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1 8c3.983 0 7.732 1.013 11.001 2.797v2.312A20.887 20.887 0 0 0 2 10.023v11.025c4.85.462 9.27 4.183 9.955 8.691l.035.261H12v2h-1.938l-.018-1.236c-.116-4.015-4.336-7.631-8.793-7.76L0 22.986V8h1zm13-8h1c9.28 0 16.825 7.437 16.997 16.677L32 17v15h-2V17c0-7.84-6.014-14.274-13.68-14.943L16 2.033v7.681l-2-1.143V0h1-1z"}),l("path",{d:"M26.997 30.636 27.009 32H14V11.305l1.483.82c6.994 3.861 11.382 10.735 11.514 18.51zm-2.048-1.04C24.505 23.556 21.205 18.2 16 14.771V30h8.974l-.025-.404z",className:"euiIcon__fillSecondary"}))},tut=eut;var bR={};J(bR,{icon:()=>aut});var Zxr=T(z());var rut=["title","titleId"];function die(){return die=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function out(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}var iut=function(t){var r=t.title,n=t.titleId,o=nut(t,rut);return l("svg",die({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 21a5 5 0 1 1 0-10 5 5 0 0 1 0 10Zm0-8a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M20 32h-8v-4.06a1 1 0 0 0-1.61-.67l-2.88 2.87-5.65-5.65 2.87-2.87a.92.92 0 0 0 .2-1 .93.93 0 0 0-.86-.6H0V12h4.06a.92.92 0 0 0 .85-.58.94.94 0 0 0-.19-1L1.86 7.51l5.65-5.65 2.87 2.87A1 1 0 0 0 12 4.06V0h8v4.06a1 1 0 0 0 1.61.67l2.87-2.87 5.66 5.66-2.87 2.87a.92.92 0 0 0-.2 1 .93.93 0 0 0 .86.6H32v8h-4.06a.92.92 0 0 0-.85.58.94.94 0 0 0 .19 1l2.87 2.87-5.66 5.66-2.87-2.87a1 1 0 0 0-1.61.67L20 32Zm-6-2h4v-2.06a3 3 0 0 1 5-2.08l1.46 1.46 2.83-2.83L25.86 23a3 3 0 0 1 2.08-5H30v-4h-2.06a3 3 0 0 1-2.08-5l1.46-1.46-2.83-2.85L23 6.14a3 3 0 0 1-5-2.08V2h-4v2.06a3 3 0 0 1-5 2.08L7.51 4.69 4.69 7.51 6.14 9a3 3 0 0 1-2.08 5H2v4h2.06a3 3 0 0 1 2.08 5l-1.45 1.49 2.83 2.83L9 25.86a3 3 0 0 1 5 2.08V30Z"}))},aut=iut;var wR={};J(wR,{icon:()=>put});var Uxr=T(z());var sut=["title","titleId"];function fie(){return fie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uut(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}var cut=function(t){var r=t.title,n=t.titleId,o=lut(t,sut);return l("svg",fie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 0 1-16 16Zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0 0 16 2Z"}),l("path",{d:"M28 16h-2c0-5.523-4.477-10-10-10S6 10.477 6 16H4C4 9.373 9.373 4 16 4s12 5.373 12 12Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M21.71 11.71 20.3 10.3 18 12.57a4 4 0 0 0-2-.57 4 4 0 1 0 4 4 4 4 0 0 0-.57-2l2.28-2.29ZM16 18a2 2 0 1 1 0-4 2 2 0 0 1 0 4Z"}))},put=cut;var OR={};J(OR,{icon:()=>vut});var Jxr=T(z());var dut=["title","titleId"];function hie(){return hie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hut(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}var mut=function(t){var r=t.title,n=t.titleId,o=fut(t,dut);return l("svg",hie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M30 19.092v12.88H2v-5.386l6.747-6.747.708.708c.236.236.48.463.733.68L4 27.414v2.558h24v-8.91c.186-.166.369-.339.546-.516L30 19.092zm-20.85-3.19A10.955 10.955 0 0 1 8 11C8 4.925 12.925 0 19 0s11 4.925 11 11c0 1.76-.414 3.425-1.15 4.9l-1.51-1.51A8.973 8.973 0 0 0 28 11a9 9 0 1 0-17.34 3.391l-1.51 1.51z"}),l("path",{d:"M19 20a8.96 8.96 0 0 0 5.618-1.968l-4.202-4.204a2 2 0 0 0-2.828 0l-4.205 4.205A8.96 8.96 0 0 0 19 20zm-2.826-7.586a4 4 0 0 1 5.656 0l5.656 5.657-.707.707A10.967 10.967 0 0 1 19 22a10.967 10.967 0 0 1-7.778-3.221l-.707-.707 5.659-5.658z",className:"euiIcon__fillSecondary"}))},vut=mut;var xR={};J(xR,{icon:()=>Out});var Kxr=T(z());var gut=["title","titleId"];function mie(){return mie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function but(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}var wut=function(t){var r=t.title,n=t.titleId,o=yut(t,gut);return l("svg",mie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10 18v.56a1 1 0 0 1-.68.95L3 21.61V10a1 1 0 0 1 .4-.8l3.2-2.4-1.2-1.6-3.2 2.4A3 3 0 0 0 1 10v12a3 3 0 0 0 1.2 2.4l3.2 2.4 1.2-1.6-2.47-1.85 5.82-1.95A3 3 0 0 0 12 18.56V18h-2zM29.8 7.6l-3.2-2.4-1.2 1.6 3.2 2.4a1 1 0 0 1 .4.8v11.61l-6.32-2.11a1 1 0 0 1-.68-.95V18h-2v.56a3 3 0 0 0 2.05 2.85l5.82 1.94-2.47 1.85 1.2 1.6 3.2-2.4A3 3 0 0 0 31 22V10a3 3 0 0 0-1.2-2.4z",className:"euiIcon__fillSecondary"}),l("path",{d:"M11 6A3 3 0 0 1 8.88.88a3.07 3.07 0 0 1 4.24 0A3 3 0 0 1 11 6zm0-4a1 1 0 1 0-.012 2A1 1 0 0 0 11 2zm0 30a3 3 0 0 1-2.12-5.12 3.07 3.07 0 0 1 4.24 0A3 3 0 0 1 11 32zm0-4a1 1 0 1 0-.012 2A1 1 0 0 0 11 28zm0-12a3 3 0 0 1-2.12-5.12 3.07 3.07 0 0 1 4.24 0A3 3 0 0 1 11 16zm0-4a1 1 0 1 0-.012 2A1 1 0 0 0 11 12zm10-6A3 3 0 0 1 18.88.88a3.07 3.07 0 0 1 4.24 0A3 3 0 0 1 21 6zm0-4a1 1 0 1 0-.012 2A1 1 0 0 0 21 2zm0 30a3 3 0 0 1-2.12-5.12 3.07 3.07 0 0 1 4.24 0A3 3 0 0 1 21 32zm0-4a1 1 0 1 0-.012 2A1 1 0 0 0 21 28zm0-12a3 3 0 0 1-2.12-5.12 3.07 3.07 0 0 1 4.24 0A3 3 0 0 1 21 16zm0-4a1 1 0 1 0-.012 2A1 1 0 0 0 21 12z"}))},Out=wut;var _R={};J(_R,{icon:()=>Eut});var Qxr=T(z());var xut=["title","titleId"];function vie(){return vie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Sut(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}var Iut=function(t){var r=t.title,n=t.titleId,o=_ut(t,xut);return l("svg",vie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.81 15.19A8.94 8.94 0 0 1 15.62 3.86l.38.42.38-.42a8.94 8.94 0 0 1 14.26 10.68l-1.7-1.07a6.94 6.94 0 0 0-11.07-8.28L16 7.29l-1.87-2.1A6.94 6.94 0 0 0 3.41 14l-1.6 1.19ZM16 31.18l-7.74-8.51 1.48-1.34L16 28.21l6.26-6.88 1.48 1.34z"}),l("path",{d:"m16.16 23.29-4.1-7.17L10.62 19H0v-2h9.38l2.56-5.12 3.9 6.83 4.13-10.32L23.66 17H32v2h-9.66l-2.31-5.39z",className:"euiIcon__fillSecondary"}))},Eut=Iut;var SR={};J(SR,{icon:()=>Cut});var t_r=T(z());var Put=["title","titleId"];function gie(){return gie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jut(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}var Tut=function(t){var r=t.title,n=t.titleId,o=kut(t,Put);return l("svg",gie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M25 2h-5V0h-2v2h-3V0h-2v2h-3V0H8v2H3v26h22V2Zm-2 24H5V4h3v2h2V4h3v2h2V4h3v2h2V4h3v22Z"}),l("path",{d:"M27 7v23H8v2h21V7z"}),l("path",{d:"M8 12h12v2H8zM8 17h12v2H8z",className:"euiIcon__fillSecondary"}))},Cut=Tut;var IR={};J(IR,{icon:()=>Lut});var n_r=T(z());var Mut=["title","titleId"];function yie(){return yie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Rut(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}var Dut=function(t){var r=t.title,n=t.titleId,o=Aut(t,Mut);return l("svg",yie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 20a4 4 0 1 1 0-8 4 4 0 0 1 0 8Zm0-6a2 2 0 1 0 0 4 2 2 0 0 0 0-4Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M8 4a4 4 0 1 0-4 4 4 4 0 0 0 2-.57l5.27 5.27 1.41-1.41L7.43 6A4 4 0 0 0 8 4zM4 6a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm16.71 6.71L26 7.43A4 4 0 0 0 28 8a4 4 0 1 0-4-4 4 4 0 0 0 .57 2l-5.27 5.27 1.41 1.44zM28 2a2 2 0 1 1 0 4 2 2 0 0 1 0-4zM11.29 19.29 6 24.57A4 4 0 0 0 4 24a4 4 0 1 0 4 4 4 4 0 0 0-.57-2l5.27-5.27-1.41-1.44zM4 30a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm24-6a4 4 0 0 0-2 .57l-5.27-5.27-1.41 1.41L24.57 26a4 4 0 0 0-.57 2 4 4 0 1 0 4-4zm0 6a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"}))},Lut=Dut;var ER={};J(ER,{icon:()=>Wut});var i_r=T(z());var Nut=["title","titleId"];function bie(){return bie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function But(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}var zut=function(t){var r=t.title,n=t.titleId,o=Fut(t,Nut);return l("svg",bie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M29 12a3 3 0 0 0-3 3h-4a3 3 0 0 0-3-3h-6a3 3 0 0 0-3 3H6a3 3 0 0 0-3-3H0v14h3a3 3 0 0 0 3-3h4a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3h4a3 3 0 0 0 3 3h3V12h-3ZM3 24H2V14h1a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1Zm17-3v2a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-2H6v-4h6v-2a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2h6v4h-6Zm10 3h-1a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1h1v10Z"}),l("path",{d:"M22 6H10v2h5v2h2V8h5z",className:"euiIcon__fillSecondary"}))},Wut=zut;var PR={};J(PR,{icon:()=>qut});var s_r=T(z());var Hut=["title","titleId"];function wie(){return wie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $ut(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}var Zut=function(t){var r=t.title,n=t.titleId,o=Vut(t,Hut);return l("svg",wie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 0 1-16 16Zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0 0 16 2Z"}),l("path",{d:"M15 4h2v9.17A3.009 3.009 0 0 1 18.83 15H26v2h-7.17A3.001 3.001 0 1 1 15 13.17V4Zm1 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z",className:"euiIcon__fillSecondary"}))},qut=Zut;var kR={};J(kR,{icon:()=>Kut});var u_r=T(z());var Uut=["title","titleId"];function Oie(){return Oie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Jut(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}var Xut=function(t){var r=t.title,n=t.titleId,o=Gut(t,Uut);return l("svg",Oie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M25 5h-.17v2H25a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h.17V5H7a3 3 0 0 0-3 3v20a3 3 0 0 0 3 3h18a3 3 0 0 0 3-3V8a3 3 0 0 0-3-3Z"}),l("path",{d:"M23 3h-3V0h-8v3H9v6h14V3Zm-2 4H11V5h3V2h4v3h3v2Z"}),l("path",{d:"M10 13h12v2H10zM10 18h12v2H10zM10 23h12v2H10z",className:"euiIcon__fillSecondary"}))},Kut=Xut;var jR={};J(jR,{icon:()=>rct});var p_r=T(z());var Yut=["title","titleId"];function xie(){return xie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ect(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}var tct=function(t){var r=t.title,n=t.titleId,o=Qut(t,Yut);return l("svg",xie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M20.38 7.001 17 9.619V0h-2v9.619l-3.37-2.618-1.25 1.513L16 12.878l5.63-4.364z",className:"euiIcon__fillSecondary"}),l("path",{d:"m21.06.165-1.11 1.61 9.25 5.983L16 16.29 2.8 7.758l9.25-5.983-1.1-1.61L0 7.234v13.653l16 10.337 16-10.337V7.234L21.06.164ZM2 9.57l13 8.407v10.279L2 19.84V9.57Zm15 18.676V17.978l13-8.407V19.85l-13 8.397Z"}))},rct=tct;var TR={};J(TR,{icon:()=>sct});var f_r=T(z());var nct=["title","titleId"];function _ie(){return _ie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ict(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}var act=function(t){var r=t.title,n=t.titleId,o=oct(t,nct);return l("svg",_ie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.63 8h7.38v2h-7.38z",className:"euiIcon__fillSecondary"}),l("path",{d:"M7 8h3.19v2H7z"}),l("path",{d:"M7 16h7.38v2H7z",className:"euiIcon__fillSecondary"}),l("path",{d:"M15.81 16H19v2h-3.19zM7 12h9v2H7z"}),l("path",{d:"M13 0C5.82 0 0 5.82 0 13s5.82 13 13 13 13-5.82 13-13A13 13 0 0 0 13 0Zm0 24C6.925 24 2 19.075 2 13S6.925 2 13 2s11 4.925 11 11-4.925 11-11 11ZM22.581 23.993l1.414-1.414 7.708 7.708-1.414 1.414z"}))},sct=act;var CR={};J(CR,{icon:()=>dct});var m_r=T(z());var lct=["title","titleId"];function Sie(){return Sie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cct(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}var pct=function(t){var r=t.title,n=t.titleId,o=uct(t,lct);return l("svg",Sie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m14 32-.36-.14A21.07 21.07 0 0 1 0 12.07V5.44L14 .06l14 5.38v6.63a21.07 21.07 0 0 1-13.64 19.78L14 32ZM2 6.82v5.25a19.08 19.08 0 0 0 12 17.77 19.08 19.08 0 0 0 12-17.77V6.82L14 2.2 2 6.82Z"}),l("path",{d:"M9 17.83h2V23H9zM11 10.18V7H9v3.18a3 3 0 1 0 2 0ZM10 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2ZM17 7h2v5.17h-2zM21 17a3 3 0 1 0-4 2.82V23h2v-3.18A3 3 0 0 0 21 17Zm-3 1a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z",className:"euiIcon__fillSecondary"}))},dct=pct;var MR={};J(MR,{icon:()=>gct});var g_r=T(z());var fct=["title","titleId"];function Iie(){return Iie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mct(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}var vct=function(t){var r=t.title,n=t.titleId,o=hct(t,fct);return l("svg",Iie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 10h4v2H5v7.928c0 1.299.808 2.795 2.88 4.48 1.83 1.489 4.524 3.02 8.12 4.584V26h2v5.992l-1.38-.567c-4.372-1.797-7.724-3.613-10-5.465C4.358 24.122 3 22.114 3 19.928V10z"}),l("path",{d:"M9 10h9v14l-1.272-.458c-1.367-.494-3.23-1.314-4.768-2.39C10.484 20.118 9 18.636 9 16.761V10zm1.895 1.876v4.887c0 .877.744 1.867 2.158 2.856.937.656 2.038 1.219 3.052 1.657v-9.4h-5.21z",className:"euiIcon__fillSecondary"}),l("path",{d:"M29 1H9v7h2V2.966h16V16.73c0 .558-.245 1.128-.756 1.72-.515.596-1.256 1.158-2.12 1.668-1.381.818-2.961 1.434-4.124 1.817V24c1.26-.378 3.334-1.12 5.155-2.197.965-.57 1.905-1.261 2.612-2.08.712-.822 1.233-1.827 1.233-2.992V1z"}))},gct=vct;var AR={};J(AR,{icon:()=>xct});var b_r=T(z());var yct=["title","titleId"];function Eie(){return Eie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wct(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}var Oct=function(t){var r=t.title,n=t.titleId,o=bct(t,yct);return l("svg",Eie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 4h6v2H4zM22 4h6v2h-6zM4 22h6v2H4z",className:"euiIcon__fillSecondary"}),l("path",{d:"M0 14h14V0H0v14zM2 2h10v10H2V2zm16-2v14h14V0H18zm12 12H20V2h10v10zM0 32h14V18H0v14zm2-12h10v10H2V20zm16 12h14V18H18v14zm2-12h10v10H20V20z"}),l("path",{d:"M22 22h6v2h-6z",className:"euiIcon__fillSecondary"}))},xct=Oct;var RR={};J(RR,{icon:()=>Pct});var O_r=T(z());var _ct=["title","titleId"];function Pie(){return Pie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ict(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}var Ect=function(t){var r=t.title,n=t.titleId,o=Sct(t,_ct);return l("svg",Pie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M18 6h9v2h-9zM5 6h9v2H5zM5 12h9v2H5zM18 12h9v2h-9zM5 18h9v2H5zM18 18h9v2h-9zM18 24h9v2h-9zM5 24h9v2H5z",className:"euiIcon__fillSecondary"}),l("path",{d:"M29 32H3a3 3 0 0 1-3-3V3a3 3 0 0 1 3-3h26a3 3 0 0 1 3 3v26a3 3 0 0 1-3 3ZM3 2a1 1 0 0 0-1 1v26a1 1 0 0 0 1 1h26a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Z"}))},Pct=Ect;var DR={};J(DR,{icon:()=>Mct});var __r=T(z());var kct=["title","titleId"];function kie(){return kie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Tct(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}var Cct=function(t){var r=t.title,n=t.titleId,o=jct(t,kct);return l("svg",kie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 4v20.34L16 32l12-7.64V4H4Zm22 2v4h-4a3 3 0 0 0-3 3v5h-6v-5a3 3 0 0 0-3-3H6V6h20Zm-7.87 14L16 22.52 13.87 20h4.26ZM6 12h4a1 1 0 0 1 1 1v6.7l3.69 4.37-2.58 3.06L6 23.24V12Zm7.81 16.22 2.19-2.6 2.19 2.6L16 29.61l-2.19-1.39Zm6.08-1.09-2.58-3.06L21 19.7V13a1 1 0 0 1 1-1h4v11.24l-6.11 3.89Z"}),l("path",{d:"M4 0h24v2H4z",className:"euiIcon__fillSecondary"}))},Mct=Cct;var LR={};J(LR,{icon:()=>Nct});var I_r=T(z());var Act=["title","titleId"];function jie(){return jie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Dct(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}var Lct=function(t){var r=t.title,n=t.titleId,o=Rct(t,Act);return l("svg",jie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 21a5 5 0 1 1 0-10 5 5 0 0 1 0 10Zm0-8a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M27.42 19.69a12 12 0 0 1-23.11-1l2.27-.45-4.32-4.47L0 19.55l2.39-.47a14 14 0 0 0 27 1.23l-1.97-.62zm2.23-6.77a14 14 0 0 0-27-1.23l1.9.62a12 12 0 0 1 23.11 1l-2.27.45 4.32 4.46L32 12.45l-2.35.47z"}))},Nct=Lct;var NR={};J(NR,{icon:()=>Hct});var P_r=T(z());var Fct=["title","titleId"];function Tie(){return Tie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zct(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}var Wct=function(t){var r=t.title,n=t.titleId,o=Bct(t,Fct);return l("svg",Tie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.216 12.377A10.948 10.948 0 0 0 2.181 17H.153a12.941 12.941 0 0 1 2.693-6.118l1.37 1.495Zm2.948-2.703-1.37-1.495A12.94 12.94 0 0 1 13 6v2c-2.144 0-4.144.613-5.836 1.674Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M26 4.414V19c0 7.18-5.82 13-13 13C6.5 32 1.115 27.23.153 21H2.18c.94 5.12 5.427 9 10.819 9 6.075 0 11-4.925 11-11V4.414l-4.293 4.293-1.414-1.414L25 .586l6.707 6.707-1.414 1.414L26 4.414Zm-7.836 9.909 1.472 1.354-7.577 8.235-4.835-4.442 1.353-1.473 3.364 3.09 6.223-6.764Z"}))},Hct=Wct;var FR={};J(FR,{icon:()=>Uct});var j_r=T(z());var Vct=["title","titleId"];function Cie(){return Cie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Zct(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}var qct=function(t){var r=t.title,n=t.titleId,o=$ct(t,Vct);return l("svg",Cie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M19.307 3.21a2.91 2.91 0 1 0-.223 1.94 11.636 11.636 0 0 1 8.232 7.049l1.775-.698a13.576 13.576 0 0 0-9.784-8.291zm-2.822 1.638a.97.97 0 1 1 0-1.939.97.97 0 0 1 0 1.94zm-4.267.805-.717-1.774a13.576 13.576 0 0 0-8.291 9.784 2.91 2.91 0 1 0 1.94.223 11.636 11.636 0 0 1 7.068-8.233zm-8.34 11.802a.97.97 0 1 1 0-1.94.97.97 0 0 1 0 1.94zm12.607 8.727a2.91 2.91 0 0 0-2.599 1.62 11.636 11.636 0 0 1-8.233-7.05l-1.774.717a13.576 13.576 0 0 0 9.813 8.291 2.91 2.91 0 1 0 2.793-3.578zm0 3.879a.97.97 0 1 1 0-1.94.97.97 0 0 1 0 1.94zM32 16.485a2.91 2.91 0 1 0-4.199 2.599 11.636 11.636 0 0 1-7.05 8.232l.718 1.775a13.576 13.576 0 0 0 8.291-9.813A2.91 2.91 0 0 0 32 16.485zm-2.91.97a.97.97 0 1 1 0-1.94.97.97 0 0 1 0 1.94z"}),l("path",{d:"M19.19 16.35a3.879 3.879 0 1 0-5.42 0 4.848 4.848 0 0 0-2.134 4.014v1.939h9.697v-1.94a4.848 4.848 0 0 0-2.143-4.014Zm-4.645-2.774a1.94 1.94 0 1 1 3.88 0 1.94 1.94 0 0 1-3.88 0Zm-.97 6.788a2.91 2.91 0 1 1 5.819 0h-5.818Z",className:"euiIcon__fillSecondary"}))},Uct=qct;var BR={};J(BR,{icon:()=>Yct});var C_r=T(z());var Gct=["title","titleId"];function Mie(){return Mie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Xct(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}var Kct=function(t){var r=t.title,n=t.titleId,o=Jct(t,Gct);return l("svg",Mie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M32 32H4a4 4 0 0 1-4-4V0h2v28a2 2 0 0 0 2 2h28v2Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M6 20h2v7H6zM16 12h2v15h-2zM26 17h2v10h-2z"}),l("path",{d:"M27 6a3 3 0 0 0-2.08.84L20 4.36A2.2 2.2 0 0 0 20 4a3 3 0 0 0-6 0c.001.341.062.68.18 1l-5.6 4.46A3 3 0 0 0 7 9a3 3 0 1 0 3 3 2.93 2.93 0 0 0-.18-1l5.6-4.48A3 3 0 0 0 17 7a3 3 0 0 0 2.08-.84l5 2.48A2.2 2.2 0 0 0 24 9a3 3 0 1 0 3-3ZM7 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm10-8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm10 5a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"}))},Yct=Kct;var zR={};J(zR,{icon:()=>npt});var A_r=T(z());var Qct=["title","titleId"];function Aie(){return Aie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function tpt(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}var rpt=function(t){var r=t.title,n=t.titleId,o=ept(t,Qct);return l("svg",Aie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.394 6.192 11.05.536 16 5.486l4.95-4.95 5.657 5.656L16 16.8 5.394 6.192Zm2.828 0L16 13.971l7.778-7.779-2.828-2.828L16 8.314l-4.95-4.95-2.828 2.828Z",className:"euiIcon__fillSecondary"}),l("path",{d:"M16 30.941 4.686 19.627A8.004 8.004 0 0 1 3.45 9.905a8.011 8.011 0 0 1 1.236-1.591L16 19.539 27.313 8.314l.045.045a8.003 8.003 0 0 1-.045 11.268L16 30.942Zm0-2.828 9.899-9.9a6.002 6.002 0 0 0 1.169-6.838L16 22.357 4.932 11.375A6.003 6.003 0 0 0 6.1 18.213l9.9 9.9Z"}))},npt=rpt;var WR={};J(WR,{icon:()=>lpt});var D_r=T(z());var opt=["title","titleId"];function Rie(){return Rie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function apt(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}var spt=function(t){var r=t.title,n=t.titleId,o=ipt(t,opt);return l("svg",Rie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m9.74 7.73-1.5-1.32a13 13 0 0 0 0 17.19l1.5-1.32a11 11 0 0 1 0-14.54v-.01Z"}),l("path",{d:"M6.51 3.66 5 2.34c-6.377 7.24-6.377 18.09 0 25.33l1.5-1.32C.792 19.867.792 10.153 6.5 3.67l.01-.01zm17.25 2.75-1.5 1.32a11 11 0 0 1 0 14.54l1.5 1.32a13 13 0 0 0 0-17.19v.01z"}),l("path",{d:"m27 2.34-1.5 1.32c5.708 6.483 5.708 16.197 0 22.68l1.5 1.33c6.377-7.24 6.377-18.09 0-25.33Z"}),l("path",{d:"M21 15a5 5 0 1 0-6 4.9V31h2V19.9a5 5 0 0 0 4-4.9Zm-5 3a3 3 0 1 1 0-6 3 3 0 0 1 0 6Z",className:"euiIcon__fillSecondary"}))},lpt=spt;var HR={};J(HR,{icon:()=>fpt});var N_r=T(z());var upt=["title","titleId"];function Die(){return Die=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ppt(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}var dpt=function(t){var r=t.title,n=t.titleId,o=cpt(t,upt);return l("svg",Die({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.81 1H2v30h5.815c1.705 0 3.343-.783 4.38-2.094l3.182-4.023.006.006 2.607-3.137.01-.014a9.42 9.42 0 0 0 1.953-4.826 9.112 9.112 0 0 0-1.891-6.522l-.01-.012-2.603-3.156L12.197 3.1C11.16 1.786 9.52 1 7.81 1Zm6.118 7.523-3.31-4.195C9.968 3.512 8.917 3 7.81 3H4v26h3.815c1.1 0 2.15-.508 2.8-1.32l3.33-4.21-1.796-1.77-.027-.033c-2.84-3.317-2.83-8.195.028-11.287l.004-.004a98.893 98.893 0 0 1 1.774-1.853Zm4.043 8.099c-.12 1.279-.616 2.537-1.49 3.64l-1.288 1.63-1.578-1.556c-2.19-2.59-2.118-6.3.001-8.596.6-.64 1.119-1.183 1.561-1.635l1.293 1.638v.002l.014.016c.942 1.192 1.446 2.564 1.51 3.949a7.09 7.09 0 0 1-.023.912Z"}),l("path",{fillRule:"evenodd",d:"M23.801 3c-.382 0-1.052.231-1.925.812-.636.422-1.228.928-1.677 1.357l1.771 2.245.005.007.024.03.008.01c4.003 5.099 3.99 12.057-.035 17.145l-1.793 2.267a8.206 8.206 0 0 0 1.769 1.498c.698.427 1.337.629 1.852.629H28V3h-4.199Zm-6.148 23.842.765 1.053.023.027c.717.851 1.566 1.607 2.464 2.156.89.544 1.89.922 2.895.922H30V1h-6.199c-.987 0-2.066.505-3.032 1.146a14.934 14.934 0 0 0-2.352 1.974l-.276.288-.595.628 2.855 3.619.006.006c3.459 4.375 3.457 10.329-.004 14.704l-2.75 3.477Z",className:"euiIcon__fillSecondary"}))},fpt=dpt;var VR={};J(VR,{icon:()=>ypt});var B_r=T(z());var hpt=["title","titleId"];function Lie(){return Lie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vpt(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}var gpt=function(t){var r=t.title,n=t.titleId,o=mpt(t,hpt);return l("svg",Lie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 4V2h2v2H2Zm5 0V2h2v2H7Zm5 0V2h2v2h-2ZM2 9V7h2v2H2Zm5 0V7h2v2H7Zm5 0V7h2v2h-2ZM2 14v-2h2v2H2Zm5 0v-2h2v2H7Zm5 0v-2h2v2h-2Z"}))},ypt=gpt;var $R={};J($R,{icon:()=>_pt});var W_r=T(z());var bpt=["title","titleId"];function Nie(){return Nie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Opt(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}var xpt=function(t){var r=t.title,n=t.titleId,o=wpt(t,bpt);return l("svg",Nie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M2.857 14.043a.75.75 0 0 1-.025-1.06l4.591-4.81a.25.25 0 0 0 0-.346l-4.59-4.81a.75.75 0 0 1 1.085-1.035l4.59 4.81a1.75 1.75 0 0 1 0 2.416l-4.59 4.81a.75.75 0 0 1-1.06.024Z",clipRule:"evenodd"}),l("path",{d:"M10.5 2.75a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0V2.75Z"}))},_pt=xpt;var ZR={};J(ZR,{icon:()=>kpt});var V_r=T(z());var Spt=["title","titleId"];function Fie(){return Fie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ept(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}var Ppt=function(t){var r=t.title,n=t.titleId,o=Ipt(t,Spt);return l("svg",Fie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 2.75a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0V2.75Z"}),l("path",{fillRule:"evenodd",d:"M13.135 14.043a.75.75 0 0 0 .025-1.06l-4.59-4.81a.25.25 0 0 1 0-.346l4.59-4.81a.75.75 0 0 0-1.085-1.035l-4.59 4.81a1.75 1.75 0 0 0 0 2.416l4.59 4.81c.286.3.76.31 1.06.024Z",clipRule:"evenodd"}))},kpt=Ppt;var qR={};J(qR,{icon:()=>Apt});var Z_r=T(z());var jpt=["title","titleId"];function Bie(){return Bie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Cpt(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}var Mpt=function(t){var r=t.title,n=t.titleId,o=Tpt(t,jpt);return l("svg",Bie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M1.957 4.982a.75.75 0 0 1 1.06-.025l4.81 4.591a.25.25 0 0 0 .346 0l4.81-4.59a.75.75 0 0 1 1.035 1.085l-4.81 4.59a1.75 1.75 0 0 1-2.416 0l-4.81-4.59a.75.75 0 0 1-.025-1.06Z",clipRule:"evenodd"}))},Apt=Mpt;var UR={};J(UR,{icon:()=>Fpt});var U_r=T(z());var Rpt=["title","titleId"];function zie(){return zie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Lpt(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}var Npt=function(t){var r=t.title,n=t.titleId,o=Dpt(t,Rpt);return l("svg",zie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M11.018 14.043a.75.75 0 0 0 .024-1.06l-4.59-4.81a.25.25 0 0 1 0-.346l4.59-4.81a.75.75 0 1 0-1.085-1.035l-4.59 4.81a1.75 1.75 0 0 0 0 2.416l4.59 4.81c.286.3.761.31 1.06.024Z",clipRule:"evenodd"}))},Fpt=Npt;var GR={};J(GR,{icon:()=>Vpt});var J_r=T(z());var Bpt=["title","titleId"];function Wie(){return Wie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Wpt(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}var Hpt=function(t){var r=t.title,n=t.titleId,o=zpt(t,Bpt);return l("svg",Wie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4.982 14.043a.75.75 0 0 1-.025-1.06l4.591-4.81a.25.25 0 0 0 0-.346l-4.59-4.81a.75.75 0 0 1 1.085-1.035l4.59 4.81a1.75 1.75 0 0 1 0 2.416l-4.59 4.81a.75.75 0 0 1-1.06.024Z",clipRule:"evenodd"}))},Vpt=Hpt;var JR={};J(JR,{icon:()=>Gpt});var K_r=T(z());var $pt=["title","titleId"];function Hie(){return Hie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function qpt(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}var Upt=function(t){var r=t.title,n=t.titleId,o=Zpt(t,$pt);return l("svg",Hie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M1.957 11.018c.286.3.761.31 1.06.024l4.81-4.59a.25.25 0 0 1 .346 0l4.81 4.59a.75.75 0 0 0 1.035-1.085l-4.81-4.59a1.75 1.75 0 0 0-2.416 0l-4.81 4.59a.75.75 0 0 0-.025 1.06Z",clipRule:"evenodd"}))},Gpt=Upt;var XR={};J(XR,{icon:()=>Qpt});var Q_r=T(z());var Jpt=["title","titleId"];function Vie(){return Vie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Kpt(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}var Ypt=function(t){var r=t.title,n=t.titleId,o=Xpt(t,Jpt);return l("svg",Vie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.5 10a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1h-4ZM8 6.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 1-.5-.5ZM3.5 2a.5.5 0 0 0 0 1h5a.5.5 0 0 0 0-1h-5ZM8 8.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 1-.5-.5ZM3.5 4a.5.5 0 0 0 0 1h5a.5.5 0 0 0 0-1h-5ZM3 12.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5ZM7 6H3v5h4V6Z"}),l("path",{fillRule:"evenodd",d:"M11.526.312A1.002 1.002 0 0 0 10.8 0H2a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4.429c0-.256-.098-.503-.274-.689l-3.2-3.428ZM10.5 5H14v10H2V1h8v3.5a.5.5 0 0 0 .5.5Z",clipRule:"evenodd"}))},Qpt=Ypt;var KR={};J(KR,{icon:()=>odt});var tSr=T(z());var edt=["title","titleId"];function $ie(){return $ie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rdt(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}var ndt=function(t){var r=t.title,n=t.titleId,o=tdt(t,edt);return l("svg",$ie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.928 8.468 4 7.618l.446-1.427L7.375 7.25 7.287 4h1.484l-.097 3.296 2.88-1.039L12 7.693l-2.977.86 1.92 2.56L9.741 12 7.937 9.28l-1.745 2.654-1.213-.86z"}))},odt=ndt;var YR={};J(YR,{icon:()=>udt});var nSr=T(z());var idt=["title","titleId"];function Zie(){return Zie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function sdt(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}var ldt=function(t){var r=t.title,n=t.titleId,o=adt(t,idt);return l("svg",Zie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M3 8a5 5 0 1 1 9.812 1.364.78.78 0 0 1-.341.476c-.16.1-.382.16-.659.16-.507 0-.668-.18-.73-.274a.53.53 0 0 1-.082-.23V5h-1v.764a3 3 0 1 0 .146 4.333c.028.057.06.117.1.177.267.407.761.726 1.566.726.412 0 .83-.088 1.189-.311.367-.23.64-.583.773-1.053a6 6 0 1 0-2.501 3.393l-.546-.837A5 5 0 0 1 3 8Zm7 0a2 2 0 1 0-4 0 2 2 0 0 0 4 0Z"}))},udt=ldt;var QR={};J(QR,{icon:()=>hdt});var iSr=T(z());var cdt=["title","titleId"];function qie(){return qie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ddt(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}var fdt=function(t){var r=t.title,n=t.titleId,o=pdt(t,cdt);return l("svg",qie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.277 10.088c.02.014.04.03.057.047.582.55 1.134.812 1.666.812.586 0 1.84-.293 3.713-.88L9 6.212V2H7v4.212l-1.723 3.876Zm-.438.987L3.539 14h8.922l-1.32-2.969C9.096 11.677 7.733 12 7 12c-.74 0-1.463-.315-2.161-.925ZM6 2H5V1h6v1h-1v4l3.375 7.594A1 1 0 0 1 12.461 15H3.54a1 1 0 0 1-.914-1.406L6 6V2Z"}))},hdt=fdt;var eD={};J(eD,{icon:()=>bdt});var sSr=T(z());var mdt=["title","titleId"];function Uie(){return Uie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function gdt(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}var ydt=function(t){var r=t.title,n=t.titleId,o=vdt(t,mdt);return l("svg",Uie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M2.316 12h10.368c-.188-.704-.28-1.691-.348-3.037-.07-1.382-.103-1.888-.19-2.612-.028-.236-.06-.462-.096-.68-.31-1.892-1.506-2.923-3.708-3.131a1 1 0 1 0-1.684 0c-2.202.208-3.397 1.24-3.708 3.13a16.01 16.01 0 0 0-.096.68c-.087.725-.12 1.23-.19 2.613-.068 1.346-.16 2.333-.348 3.037Zm10.843 1H1.84c-.308.353-.737.5-1.341.5a.5.5 0 1 1 0-1c.786 0 1.024-.783 1.166-3.587.07-1.407.105-1.926.196-2.681.03-.25.063-.49.102-.724.334-2.041 1.546-3.313 3.556-3.792a2 2 0 0 1 3.96 0c2.01.479 3.222 1.75 3.557 3.792a17 17 0 0 1 .102.724c.09.755.125 1.274.196 2.681.14 2.804.379 3.587 1.165 3.587a.5.5 0 1 1 0 1c-.604 0-1.033-.147-1.341-.5ZM5.5 14h4a2 2 0 1 1-4 0Z"}))},bdt=ydt;var tD={};J(tD,{icon:()=>Sdt});var uSr=T(z());var wdt=["title","titleId"];function Gie(){return Gie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function xdt(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}var _dt=function(t){var r=t.title,n=t.titleId,o=Odt(t,wdt);return l("svg",Gie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m9.5 14-.005.15a2 2 0 0 1-3.972.153l-.018-.154L5.5 14h4Zm5.38-12.825a.5.5 0 0 1 .008.64l-.063.065-14 12a.5.5 0 0 1-.713-.695l.063-.065 14-12a.5.5 0 0 1 .705.055ZM13.036 5.51l.055.353.048.368c.066.554.103.98.145 1.724l.08 1.491c.146 2.371.402 3.053 1.136 3.053a.5.5 0 1 1 0 1c-.603 0-1.031-.146-1.34-.499H4.185l1.182-1h7.317c-.172-.644-.264-1.528-.33-2.708l-.09-1.638c-.033-.514-.066-.87-.118-1.304l-.011-.077.901-.763ZM7.5 0a2 2 0 0 1 1.98 1.717c.476.113.907.27 1.292.472l-.838.71a5.728 5.728 0 0 0-1.591-.36 1 1 0 1 0-1.684 0C4.455 2.75 3.26 3.78 2.95 5.671l-.05.334-.046.347c-.08.676-.115 1.161-.176 2.347l-.014.265-.005.09-1.058.897c.018-.234.035-.488.05-.763l.077-1.427c.038-.626.073-1.025.134-1.528.03-.25.063-.49.102-.724.334-2.04 1.546-3.313 3.555-3.792l.004-.019A2 2 0 0 1 7.5 0Z"}))},Sdt=_dt;var rD={};J(rD,{icon:()=>jdt});var pSr=T(z());var Idt=["title","titleId"];function Jie(){return Jie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Pdt(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}var kdt=function(t){var r=t.title,n=t.titleId,o=Edt(t,Idt);return l("svg",Jie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 6.394h1.03c.72 0 1.283.153 1.688.459a2.2 2.2 0 0 1 .813 1.163c.138.47.165.952.083 1.447-.1.597-.33 1.135-.69 1.616a3.95 3.95 0 0 1-1.333 1.137 3.689 3.689 0 0 1-1.735.418c-.381 0-.747-.07-1.097-.212-.35-.144-.636-.417-.86-.818l-.082.041.33-2.018c-.055.337-.024.647.092.932.12.285.32.513.598.685.281.171.634.257 1.06.257a2.54 2.54 0 0 0 2.075-1.03c.226-.308.369-.645.427-1.008a1.929 1.929 0 0 0-.072-.973 1.524 1.524 0 0 0-.536-.752c-.25-.196-.57-.293-.957-.293H7.825L8 6.395Zm1.359-4.591c.49 0 .913.079 1.266.237a2.258 2.258 0 0 1 1.303 1.528c.082.33.094.668.036 1.014-.069.433-.25.864-.54 1.293-.29.425-.684.78-1.185 1.065-.497.282-1.096.422-1.796.422h-.597l.175-1.05h.576a2.182 2.182 0 0 0 1.812-.89c.192-.265.312-.544.36-.84.08-.473-.036-.866-.344-1.178-.31-.313-.726-.469-1.251-.469-.35 0-.683.072-.999.216a2.256 2.256 0 0 0-.793.603 1.852 1.852 0 0 0-.412.89l-1.78 10.81H3.973l1.782-10.81a3.17 3.17 0 0 1 .648-1.457c.34-.429.765-.767 1.277-1.014a3.827 3.827 0 0 1 1.678-.37Z"}))},jdt=kdt;var nD={};J(nD,{icon:()=>Rdt});var fSr=T(z());var Tdt=["title","titleId"];function Xie(){return Xie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Mdt(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}var Adt=function(t){var r=t.title,n=t.titleId,o=Cdt(t,Tdt);return l("svg",Xie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.04 13.274a.5.5 0 1 0 .892.453l3.014-5.931a.5.5 0 0 0-.445-.727H5.316L8.03 1.727a.5.5 0 1 0-.892-.453L4.055 7.343a.5.5 0 0 0 .446.726h5.185L7.04 13.274Z"}))},Rdt=Adt;var oD={};J(oD,{icon:()=>Bdt});var mSr=T(z());var Ddt=["title","titleId"];function Kie(){return Kie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ndt(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}var Fdt=function(t){var r=t.title,n=t.titleId,o=Ldt(t,Ddt);return l("svg",Kie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M0 6h4v4H0V6Zm1 1v2h2V7H1Zm5-1h4v4H6V6Zm1 1v2h2V7H7Zm5-1h4v4h-4V6Zm1 3h2V7h-2v2Z"}))},Bdt=Fdt;var iD={};J(iD,{icon:()=>$dt});var gSr=T(z());var zdt=["title","titleId"];function Yie(){return Yie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Hdt(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}var Vdt=function(t){var r=t.title,n=t.titleId,o=Wdt(t,zdt);return l("svg",Yie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 1v2h2V1H7ZM6 0h4v4H6V0Zm0 6h4v4H6V6Zm1 1v2h2V7H7Zm-1 5h4v4H6v-4Zm1 1v2h2v-2H7Z"}))},$dt=Vdt;var aD={};J(aD,{icon:()=>Jdt});var bSr=T(z());var Zdt=["title","titleId"];function Qie(){return Qie=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Udt(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}var Gdt=function(t){var r=t.title,n=t.titleId,o=qdt(t,Zdt);return l("svg",Qie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 10.038a3.49 3.49 0 0 1 2.5-1.05h2a2.5 2.5 0 0 0 2.462-2.061 2 2 0 1 1 1.008.017A3.5 3.5 0 0 1 9.5 9.987h-2a2.5 2.5 0 0 0-2.466 2.085A2 2 0 1 1 4 12.063V3.937a2 2 0 1 1 1 0v6.1ZM4.5 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm0 12a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm8-9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}))},Jdt=Gdt;var sD={};J(sD,{icon:()=>eft});var OSr=T(z());var Xdt=["title","titleId"];function eae(){return eae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ydt(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}var Qdt=function(t){var r=t.title,n=t.titleId,o=Kdt(t,Xdt);return l("svg",eae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 7.987a3.49 3.49 0 0 0-2.5 1.05v-4.1a2 2 0 1 0-1 0v6.126a2 2 0 1 0 1.034.01A2.5 2.5 0 0 1 6 8.986h1a3.5 3.5 0 0 0 3.47-3.043 2 2 0 1 0-1.009-.017A2.5 2.5 0 0 1 7 7.987H6zM4 3a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm0 10a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm7-9a1 1 0 1 1-2 0 1 1 0 0 1 2 0z",clipRule:"evenodd"}),l("path",{d:"M13.5 10.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zM9 15c.284-1.223 1.519-2.143 3-2.143s2.716.92 3 2.143H9z"}))},eft=Qdt;var lD={};J(lD,{icon:()=>ift});var _Sr=T(z());var tft=["title","titleId"];function tae(){return tae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nft(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}var oft=function(t){var r=t.title,n=t.titleId,o=rft(t,tft);return l("svg",tae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m3.732 13.096-.197-.197 2.83-2.828.706.707-2.829 2.828.708.708 2.828-2.828a1 1 0 0 0 0-1.414L5.658 7.95a.993.993 0 0 0-.708-.293.994.994 0 0 0-.708.293l-2.828 2.829.707.707 2.829-2.83.707.708-2.829 2.829.904.903Zm1.218-6.44c.512 0 1.023.196 1.414.587l2.121 2.12a2 2 0 0 1 0 2.83L4.95 15.728 0 10.778l3.535-3.535a1.993 1.993 0 0 1 1.415-.586ZM14.02 1l.708.707-6.95 6.95-.707-.707L14.021 1Z"}))},ift=oft;var uD={};J(uD,{icon:()=>cft});var ISr=T(z());var aft=["title","titleId"];function rae(){return rae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function lft(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}var uft=function(t){var r=t.title,n=t.titleId,o=sft(t,aft);return l("svg",rae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 0 1 3.999 8.17V6.662h7.994V8.17Zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486ZM4 5.658V1.005h1.262v4.653H4Zm2.261 0V1.005h1.244v4.653H6.26Zm2.244 0V1.005h1.235v4.653H8.504Zm2.234 0V1.005h1.254v4.653h-1.254ZM3.008 0 3 8.17a2.509 2.509 0 0 0 2.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 0 0 2.498-2.512L13 0H3.008Z"}))},cft=uft;var cD={};J(cD,{icon:()=>mft});var PSr=T(z());var pft=["title","titleId"];function nae(){return nae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fft(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}var hft=function(t){var r=t.title,n=t.titleId,o=dft(t,pft);return l("svg",nae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m10.651 5.126.922-.455.884-2.343a.5.5 0 0 1 .939.344L12.374 5.39l-1.45.717A5.3 5.3 0 0 1 11 7h1.043l2.3 2.198a.5.5 0 0 1-.692.723L11.642 8h-.737c-.09.466-.24.899-.441 1.283l.892.49 1.278 3.554a.5.5 0 0 1-.94.342l-1.15-3.2-.655-.36C9.373 10.665 8.716 11 8 11s-1.374-.335-1.89-.893l-.658.361-1.15 3.201a.5.5 0 1 1-.94-.342l1.279-3.554.895-.491A4.7 4.7 0 0 1 5.095 8h-.74l-2.01 1.92a.5.5 0 0 1-.69-.722L3.952 7H5a5.3 5.3 0 0 1 .075-.892L3.623 5.39 2.6 2.672a.5.5 0 1 1 .939-.344l.884 2.343.924.457c.17-.428.397-.81.668-1.128h.57a1.5 1.5 0 1 1 2.83 0h.568c.27.318.497.699.667 1.126ZM8 4a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1Zm1.751 1.571A3.326 3.326 0 0 0 9.476 5H6.524c-.107.175-.2.367-.276.573-.11.295-.186.618-.223.957a4.354 4.354 0 0 0 .09 1.465c.071.294.172.565.295.806.168.328.38.601.616.803.295.253.631.396.974.396.342 0 .678-.142.973-.394.237-.203.448-.476.616-.803a3.62 3.62 0 0 0 .296-.807 4.263 4.263 0 0 0 .09-1.466 3.988 3.988 0 0 0-.224-.959Z"}))},mft=hft;var pD={};J(pD,{icon:()=>wft});var jSr=T(z());var vft=["title","titleId"];function oae(){return oae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yft(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}var bft=function(t){var r=t.title,n=t.titleId,o=gft(t,vft);return l("svg",oae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12Zm0 1A7 7 0 1 1 8 1a7 7 0 0 1 0 14Zm0-3a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm0-1a3 3 0 1 1 0-6 3 3 0 0 1 0 6Zm0-2a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}))},wft=bft;var dD={};J(dD,{icon:()=>Ift});var CSr=T(z());var Oft=["title","titleId"];function iae(){return iae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _ft(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}var Sft=function(t){var r=t.title,n=t.titleId,o=xft(t,Oft);return l("svg",iae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M14 4v-.994C14 2.45 13.55 2 12.994 2H11v1h-1V2H6v1H5V2H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14h9.988C13.55 14 14 13.55 14 12.994V5H2V4h12zm-3-3h1.994C14.102 1 15 1.897 15 3.006v9.988A2.005 2.005 0 0 1 12.994 15H3.006A2.005 2.005 0 0 1 1 12.994V3.006C1 1.898 1.897 1 3.006 1H5V0h1v1h4V0h1v1zM4 7h2v1H4V7zm3 0h2v1H7V7zm3 0h2v1h-2V7zM4 9h2v1H4V9zm3 0h2v1H7V9zm3 0h2v1h-2V9zm-6 2h2v1H4v-1zm3 0h2v1H7v-1zm3 0h2v1h-2v-1z"}))},Ift=Sft;var fD={};J(fD,{icon:()=>Tft});var ASr=T(z());var Eft=["title","titleId"];function aae(){return aae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kft(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}var jft=function(t){var r=t.title,n=t.titleId,o=Pft(t,Eft);return l("svg",aae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 14h12.5a.5.5 0 0 1 0 1h-13a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0V14Z"}),l("path",{d:"M15 6.5a.5.5 0 0 0-.5-.5h-6a.5.5 0 0 0-.5.5V12H3.5a.5.5 0 0 0 0 1h5a.5.5 0 0 0 .5-.5V7h5.5a.5.5 0 0 0 .5-.5ZM7.023 3.206A.301.301 0 0 1 7.3 3h2.4c.121 0 .23.081.277.206a.36.36 0 0 1-.065.363l-1.2 1.333a.28.28 0 0 1-.424 0l-1.2-1.333a.36.36 0 0 1-.065-.363Z"}))},Tft=jft;var hD={};J(hD,{icon:()=>Dft});var DSr=T(z());var Cft=["title","titleId"];function sae(){return sae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Aft(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}var Rft=function(t){var r=t.title,n=t.titleId,o=Mft(t,Cft);return l("svg",sae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6.5 12a.502.502 0 0 1-.354-.146l-4-4a.502.502 0 0 1 .708-.708L6.5 10.793l6.646-6.647a.502.502 0 0 1 .708.708l-7 7A.502.502 0 0 1 6.5 12"}))},Dft=Rft;var mD={};J(mD,{icon:()=>zft});var NSr=T(z());var Lft=["title","titleId"];function lae(){return lae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Fft(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}var Bft=function(t){var r=t.title,n=t.titleId,o=Nft(t,Lft);return l("svg",lae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 16A8 8 0 1 1 8 0a8 8 0 0 1 0 16Zm3.65-10.857L6.91 9.8 4.35 7.286a.5.5 0 0 0-.7.714l2.909 2.857a.5.5 0 0 0 .7 0l5.091-5a.5.5 0 1 0-.7-.714Z"}))},zft=Bft;var vD={};J(vD,{icon:()=>Zft});var BSr=T(z());var Wft=["title","titleId"];function uae(){return uae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Vft(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}var $ft=function(t){var r=t.title,n=t.titleId,o=Hft(t,Wft);return l("svg",uae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.934 3.063a1.5 1.5 0 0 1 .547.321l.112.115 6.07 6.915a1.5 1.5 0 0 1-.646 2.41l-.142.04-9.031 2.097A1.5 1.5 0 0 1 .037 13.19l.043-.159L3.04 4.02a1.5 1.5 0 0 1 1.893-.957ZM4.027 4.25l-.036.083-2.961 9.011a.5.5 0 0 0 .498.656l.09-.013 2.937-.681-1.399-1.508a.5.5 0 0 1 .666-.74l.067.06 1.788 1.927 2.634-.611-3.198-3.601a.5.5 0 0 1 .682-.726l.066.062 3.559 4.007 1.229-.284a.5.5 0 0 0 .15-.063l.067-.049a.5.5 0 0 0 .099-.632l-.053-.073-6.07-6.916a.5.5 0 0 0-.138-.11l-.082-.035-.088-.02a.5.5 0 0 0-.507.256Zm11.66 5.039a2.5 2.5 0 0 1-.975 3.399.5.5 0 0 1-.485-.875 1.5 1.5 0 0 0-1.454-2.624.5.5 0 0 1-.485-.875 2.5 2.5 0 0 1 3.399.975Zm-5.03-6.206a.5.5 0 0 1 .338.544l-.02.088-.677 2.035 2.068-.721a.5.5 0 0 1 .6.225l.036.082a.5.5 0 0 1-.225.6l-.082.037L9.67 7.028a.5.5 0 0 1-.659-.55l.02-.08.995-3a.5.5 0 0 1 .632-.316ZM14.5 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1ZM7.862.403a2.5 2.5 0 0 1 .735 3.459.5.5 0 0 1-.839-.545 1.5 1.5 0 1 0-2.516-1.634.5.5 0 0 1-.839-.545A2.5 2.5 0 0 1 7.862.403ZM13.5 2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-3-1a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm4-1a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Z"}))},Zft=$ft;var gD={};J(gD,{icon:()=>Xft});var WSr=T(z());var qft=["title","titleId"];function cae(){return cae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Gft(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}var Jft=function(t){var r=t.title,n=t.titleId,o=Uft(t,qft);return l("svg",cae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 .5a.5.5 0 0 0-1 0v1a.5.5 0 0 0 1 0v-1Zm-3.146.646a.5.5 0 1 0-.708.708l1 1a.5.5 0 1 0 .708-.708l-1-1Z"}),l("path",{fillRule:"evenodd",d:"M13 7A5 5 0 0 0 3 7v4a5 5 0 0 0 10 0V7Zm-1 0a4 4 0 0 0-4-4v5a1 1 0 0 1-1 1H4v2a4 4 0 0 0 8 0V7Z"}),l("path",{d:"M0 4.5A.5.5 0 0 1 .5 4h1a.5.5 0 0 1 0 1h-1a.5.5 0 0 1-.5-.5Z"}))},Xft=Jft;var yD={};J(yD,{icon:()=>tht});var VSr=T(z());var Kft=["title","titleId"];function pae(){return pae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Qft(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}var eht=function(t){var r=t.title,n=t.titleId,o=Yft(t,Kft);return l("svg",pae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11 .5a.5.5 0 0 1 1 0v1a.5.5 0 0 1-1 0v-1Zm3.146.646a.5.5 0 0 1 .708.708l-1 1a.5.5 0 0 1-.708-.708l1-1Z"}),l("path",{fillRule:"evenodd",d:"M3 7a5 5 0 0 1 10 0v4a5 5 0 0 1-10 0V7Zm1 0a4 4 0 0 1 4-4v5a1 1 0 0 0 1 1h3v2a4 4 0 0 1-8 0V7Z"}),l("path",{d:"M16 4.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 .5-.5Z"}))},tht=eht;var bD={};J(bD,{icon:()=>aht});var ZSr=T(z());var rht=["title","titleId"];function dae(){return dae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function oht(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}var iht=function(t){var r=t.title,n=t.titleId,o=nht(t,rht);return l("svg",dae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.5 13A5.506 5.506 0 0 1 2 7.5C2 4.467 4.467 2 7.5 2S13 4.467 13 7.5 10.533 13 7.5 13m0-12a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13m3 6H8V3.5a.5.5 0 0 0-1 0v4a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 0-1"}))},aht=iht;var wD={};J(wD,{icon:()=>pht});var USr=T(z());var sht=["title","titleId"];function fae(){return fae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uht(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}var cht=function(t){var r=t.title,n=t.titleId,o=lht(t,sht);return l("svg",fae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.39 3.61a5.5 5.5 0 0 0-7.78 7.78l.562.56v-1.622a.5.5 0 0 1 1 0v2.829a.5.5 0 0 1-.5.5H1.843a.5.5 0 0 1 0-1h1.621l-.56-.56A6.5 6.5 0 1 1 7.5 14a.5.5 0 0 1 0-1 5.5 5.5 0 0 0 3.89-9.39Z"}),l("path",{d:"M7.5 3a.5.5 0 0 1 .5.5V7h2.5a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5v-4a.5.5 0 0 1 .5-.5Z"}))},pht=cht;var OD={};J(OD,{icon:()=>vht});var JSr=T(z());var dht=["title","titleId"];function hae(){return hae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hht(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}var mht=function(t){var r=t.title,n=t.titleId,o=fht(t,dht);return l("svg",hae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.348 3.761A3.995 3.995 0 0 1 8 7a.5.5 0 0 1-1 0 3 3 0 1 0-4.878 2.34.5.5 0 0 1-.627.779 4 4 0 0 1 3.973-6.84 5.502 5.502 0 0 1 10.096 4.37.5.5 0 1 1-.92-.39 4.5 4.5 0 1 0-8.296-3.497Zm-1.61 4.935a.5.5 0 1 1 .775.633l-1.466 1.792a.5.5 0 1 1-.774-.633l1.466-1.792Zm-3.12 3.647a.5.5 0 0 1 .774.634l-1.505 1.84a.5.5 0 0 1-.774-.634l1.505-1.84Zm7.62-3.647a.5.5 0 0 1 .775.633l-1.466 1.792a.5.5 0 1 1-.774-.633l1.466-1.792Zm-3.12 3.647a.5.5 0 0 1 .774.634l-1.505 1.84a.5.5 0 0 1-.774-.634l1.505-1.84Zm7.62-3.647a.5.5 0 1 1 .775.633l-1.466 1.792a.5.5 0 1 1-.774-.633l1.466-1.792Zm-3.12 3.647a.5.5 0 0 1 .774.634l-1.505 1.84a.5.5 0 0 1-.774-.634l1.505-1.84Z"}))},vht=mht;var xD={};J(xD,{icon:()=>Oht});var KSr=T(z());var ght=["title","titleId"];function mae(){return mae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bht(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}var wht=function(t){var r=t.title,n=t.titleId,o=yht(t,ght);return l("svg",mae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.421 4.93a.5.5 0 1 1-.87.49 3 3 0 1 0-4.43 3.918.5.5 0 0 1-.626.78 4 4 0 0 1 3.973-6.84l.032.018V3.28a5.5 5.5 0 1 1 7.003 7.357.5.5 0 1 1-.36-.934 4.5 4.5 0 1 0-5.77-5.923c.42.31.778.701 1.05 1.15h-.002ZM9.6 11c.669.002.794.67.36 1.003l-4.68 3.882c-.457.378-1.053-.26-.643-.689l3.08-3.193A5411.7 5411.7 0 0 1 5.113 12c-.668-.001-.793-.669-.36-1.003l4.68-3.881c.458-.379 1.053.26.643.688l-3.08 3.193L9.6 11Z"}))},Oht=wht;var _D={};J(_D,{icon:()=>Eht});var QSr=T(z());var xht=["title","titleId"];function vae(){return vae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Sht(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}var Iht=function(t){var r=t.title,n=t.titleId,o=_ht(t,xht);return l("svg",vae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.746 5.005A5.5 5.5 0 0 1 10.5 16H4a4 4 0 0 1-1.61-7.663A4.473 4.473 0 0 1 2.029 7H.5a.5.5 0 0 1 0-1h1.527a4.479 4.479 0 0 1 .957-2.309L1.646 2.354a.5.5 0 1 1 .708-.708L3.69 2.984A4.479 4.479 0 0 1 6 2.027V.5a.5.5 0 0 1 1 0v1.528a4.493 4.493 0 0 1 2.309.956l1.337-1.338a.5.5 0 0 1 .708.708L10.016 3.69c.311.388.56.831.73 1.314ZM4 15h6.5a4.5 4.5 0 1 0-4.152-6.239A3.995 3.995 0 0 1 8 12a.5.5 0 1 1-1 0 3 3 0 1 0-3 3Zm5.691-9.94a3.5 3.5 0 1 0-6.33 2.991 4.029 4.029 0 0 1 2.106.227 5.505 5.505 0 0 1 4.224-3.219Z"}))},Eht=Iht;var SD={};J(SD,{icon:()=>Cht});var t7r=T(z());var Pht=["title","titleId"];function gae(){return gae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jht(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}var Tht=function(t){var r=t.title,n=t.titleId,o=kht(t,Pht);return l("svg",gae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4.5 7a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zm0-6a3.5 3.5 0 0 1 3.465 3h3.12a1.5 1.5 0 1 1 0 1h-3.12a3.482 3.482 0 0 1-.662 1.596l2.1 2.1A3.5 3.5 0 1 1 8.036 12h-3.12a1.5 1.5 0 1 1 0-.999h3.12a3.482 3.482 0 0 1 .662-1.596l-2.1-2.1A3.5 3.5 0 1 1 4.5 1zM12 4.5a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm-.5 9.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zM4 11.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0z",clipRule:"evenodd"}))},Cht=Tht;var ID={};J(ID,{icon:()=>Lht});var n7r=T(z());var Mht=["title","titleId"];function yae(){return yae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Rht(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}var Dht=function(t){var r=t.title,n=t.titleId,o=Aht(t,Mht);return l("svg",yae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13 11c1.334 1.393 2 2.435 2 3.125C15 15.161 14.105 16 13 16c-1.104 0-2-.84-2-1.875 0-.69.667-1.732 2-3.125zM5.857.15l6.34 6.45.016.02.324.321a1.5 1.5 0 0 1 .11 2.006l-.103.114-4.474 4.513a1.5 1.5 0 0 1-2.123.008L1.464 9.06a1.5 1.5 0 0 1 .007-2.12l4.472-4.45c.145-.146.313-.254.492-.327L5.144.85a.5.5 0 0 1 .713-.7zm1.496 3.049a.5.5 0 0 0-.705 0L2.177 7.65a.498.498 0 0 0-.148.35h9.95a.498.498 0 0 0-.148-.35L7.353 3.2z"}))},Lht=Dht;var ED={};J(ED,{icon:()=>Wht});var i7r=T(z());var Nht=["title","titleId"];function bae(){return bae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Bht(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}var zht=function(t){var r=t.title,n=t.titleId,o=Fht(t,Nht);return l("svg",bae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1H4Zm10 8v1a2 2 0 0 1-2 2h-1v2h-1v-2H8.5v2h-1v-2H6v2H5v-2H4a2 2 0 0 1-2-2v-1H0v-1h2V8.5H0v-1h2V6H0V5h2V4a2 2 0 0 1 2-2h1V0h1v2h1.5V0h1v2H10V0h1v2h1a2 2 0 0 1 2 2v1h2v1h-2v1.5h2v1h-2V10h2v1h-2Z"}),l("rect",{width:6,height:6,x:5,y:5,rx:1}))},Wht=zht;var PD={};J(PD,{icon:()=>qht});var s7r=T(z());var Hht=["title","titleId"];function wae(){return wae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $ht(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}var Zht=function(t){var r=t.title,n=t.titleId,o=Vht(t,Hht);return l("svg",wae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.157 12.224 5.768 8.32a.404.404 0 0 0 0-.64l-4.61-3.904a.407.407 0 0 1 0-.643.608.608 0 0 1 .759 0l4.61 3.904c.631.534.63 1.393 0 1.926l-4.61 3.904a.608.608 0 0 1-.76 0 .407.407 0 0 1 0-.643ZM9 12h6v1H9v-1Z"}))},qht=Zht;var kD={};J(kD,{icon:()=>Kht});var u7r=T(z());var Uht=["title","titleId"];function Oae(){return Oae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Jht(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}var Xht=function(t){var r=t.title,n=t.titleId,o=Ght(t,Uht);return l("svg",Oae({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M0 2.5A.5.5 0 0 1 .5 2h15a.5.5 0 0 1 0 1H15v10h.5a.5.5 0 0 1 0 1H.5a.5.5 0 0 1 0-1H1V3H.5a.5.5 0 0 1-.5-.5zM2 3h12v10H2V3zm3 2a.5.5 0 0 0-.5.5v5a.5.5 0 0 0 1 0v-5A.5.5 0 0 0 5 5zm5.5.5a.5.5 0 0 1 1 0v5a.5.5 0 0 1-1 0v-5zM8 5a.5.5 0 0 0-.5.5v5a.5.5 0 0 0 1 0v-5A.5.5 0 0 0 8 5z",clipRule:"evenodd"}))},Kht=Xht;var jD={};J(jD,{icon:()=>rmt});var p7r=T(z());var Yht=["title","titleId"];function xae(){return xae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function emt(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}var tmt=function(t){var r=t.title,n=t.titleId,o=Qht(t,Yht);return l("svg",xae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.5 3a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 1 0v-9a.5.5 0 0 0-.5-.5zm3 0a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 1 0V9h6v1.5a.5.5 0 0 0 .82.384l3-2.5a.5.5 0 0 0 0-.768l-3-2.5A.5.5 0 0 0 11 5.5V7H5V3.5a.5.5 0 0 0-.5-.5z"}))},rmt=tmt;var TD={};J(TD,{icon:()=>smt});var f7r=T(z());var nmt=["title","titleId"];function _ae(){return _ae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function imt(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}var amt=function(t){var r=t.title,n=t.titleId,o=omt(t,nmt);return l("svg",_ae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.5 3a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-1 0V9H4v1.5a.5.5 0 0 1-.82.384l-3-2.5a.5.5 0 0 1 0-.768l3-2.5A.5.5 0 0 1 4 5.5V7h2V3.5a.5.5 0 0 1 .5-.5zm3 0a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 1 0V9h2v1.5a.5.5 0 0 0 .82.384l3-2.5a.5.5 0 0 0 0-.768l-3-2.5A.5.5 0 0 0 12 5.5V7h-2V3.5a.5.5 0 0 0-.5-.5z"}))},smt=amt;var CD={};J(CD,{icon:()=>dmt});var m7r=T(z());var lmt=["title","titleId"];function Sae(){return Sae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cmt(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}var pmt=function(t){var r=t.title,n=t.titleId,o=umt(t,lmt);return l("svg",Sae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.5 3a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-1 0V9H5v1.5a.5.5 0 0 1-.82.384l-3-2.5a.5.5 0 0 1 0-.768l3-2.5A.5.5 0 0 1 5 5.5V7h6V3.5a.5.5 0 0 1 .5-.5zm3 0a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-1 0v-9a.5.5 0 0 1 .5-.5z"}))},dmt=pmt;var MD={};J(MD,{icon:()=>gmt});var g7r=T(z());var fmt=["title","titleId"];function Iae(){return Iae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mmt(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}var vmt=function(t){var r=t.title,n=t.titleId,o=hmt(t,fmt);return l("svg",Iae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.5 3a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 1 0v-9A.5.5 0 0 0 .5 3zm14.5.5a.5.5 0 0 1 1 0v9a.5.5 0 0 1-1 0v-9zm-4.712 1.547a.5.5 0 0 1 .532.069l3 2.5a.5.5 0 0 1 0 .768l-3 2.5A.5.5 0 0 1 10 10.5V9H6v1.5a.5.5 0 0 1-.82.384l-3-2.5a.5.5 0 0 1 0-.768l3-2.5A.5.5 0 0 1 6 5.5V7h4V5.5a.5.5 0 0 1 .288-.453z"}))},gmt=vmt;var AD={};J(AD,{icon:()=>xmt});var b7r=T(z());var ymt=["title","titleId"];function Eae(){return Eae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wmt(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}var Omt=function(t){var r=t.title,n=t.titleId,o=bmt(t,ymt);return l("svg",Eae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8.05 10a2.5 2.5 0 0 1 4.9 0h1.55a.5.5 0 1 1 0 1h-1.55a2.5 2.5 0 0 1-4.9 0H1.5a.5.5 0 1 1 0-1h6.55Zm-.1-4a2.5 2.5 0 0 1-4.9 0H1.5a.5.5 0 0 1 0-1h1.55a2.5 2.5 0 0 1 4.9 0h6.55a.5.5 0 1 1 0 1H7.95ZM4 5.5a1.5 1.5 0 1 0 3 0 1.5 1.5 0 0 0-3 0Zm8 5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0Z"}))},xmt=Omt;var RD={};J(RD,{icon:()=>Pmt});var O7r=T(z());var _mt=["title","titleId"];function Pae(){return Pae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Imt(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}var Emt=function(t){var r=t.title,n=t.titleId,o=Smt(t,_mt);return l("svg",Pae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M10 7.95a2.5 2.5 0 0 1 0-4.9V1.5a.5.5 0 1 1 1 0v1.55a2.5 2.5 0 0 1 0 4.9v6.55a.5.5 0 1 1-1 0V7.95Zm-4 .1a2.5 2.5 0 0 1 0 4.9v1.55a.5.5 0 1 1-1 0v-1.55a2.5 2.5 0 0 1 0-4.9V1.5a.5.5 0 0 1 1 0v6.55ZM5.5 12a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm5-8a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3Z"}))},Pmt=Emt;var DD={};J(DD,{icon:()=>Mmt});var _7r=T(z());var kmt=["title","titleId"];function kae(){return kae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Tmt(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}var Cmt=function(t){var r=t.title,n=t.titleId,o=jmt(t,kmt);return l("svg",kae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.4 0c.235 0 .46.099.622.273l2.743 3c.151.162.235.378.235.602v9.25a.867.867 0 0 1-.857.875H3.857A.867.867 0 0 1 3 13.125V.875C3 .392 3.384 0 3.857 0H11.4ZM14 4h-2.6a.4.4 0 0 1-.4-.4V1H4v12h10V4Z"}),l("path",{d:"M3 1H2a1 1 0 0 0-1 1v13a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1v-1h-1v1H2V2h1V1Z"}))},Mmt=Cmt;var LD={};J(LD,{icon:()=>Nmt});var I7r=T(z());var Amt=["title","titleId"];function jae(){return jae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Dmt(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}var Lmt=function(t){var r=t.title,n=t.titleId,o=Rmt(t,Amt);return l("svg",jae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 2.729V2a1 1 0 0 1 1-1h2v1H3v12h4v1H3a1 1 0 0 1-1-1V2.729zM14 5V2a1 1 0 0 0-1-1h-2v1h2v3h1zm-1 1h2v9H8V6h5V5H8a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2v1z"}),l("path",{d:"M9 10h5V9H9v1zm0-2h5V7H9v1zm0 4h5v-1H9v1zm0 2h5v-1H9v1zm2-12V1a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1v1h1V1h4v1h1zM5 3h6V2H5v1z"}))},Nmt=Lmt;var ND={};J(ND,{icon:()=>Hmt});var P7r=T(z());var Fmt=["title","titleId"];function Tae(){return Tae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zmt(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}var Wmt=function(t){var r=t.title,n=t.titleId,o=Bmt(t,Fmt);return l("svg",Tae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.293 8 3.146 3.854a.5.5 0 1 1 .708-.708L8 7.293l4.146-4.147a.5.5 0 0 1 .708.708L8.707 8l4.147 4.146a.5.5 0 0 1-.708.708L8 8.707l-4.146 4.147a.5.5 0 0 1-.708-.708L7.293 8Z"}))},Hmt=Wmt;var FD={};J(FD,{icon:()=>Umt});var j7r=T(z());var Vmt=["title","titleId"];function Cae(){return Cae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Zmt(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}var qmt=function(t){var r=t.title,n=t.titleId,o=$mt(t,Vmt),i=fn("crossInCircle");return l("svg",Cae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{clipPath:"url(#".concat(i("a"),")")},l("path",{d:"m8.755 8 2.64 2.641a.534.534 0 1 1-.754.755L8 8.755l-2.641 2.64a.534.534 0 1 1-.755-.754L7.245 8l-2.64-2.641a.534.534 0 1 1 .754-.755L8 7.245l2.641-2.64a.534.534 0 1 1 .755.754L8.755 8Zm4.904-5.66c3.121 3.121 3.121 8.199 0 11.32-3.12 3.12-8.198 3.12-11.318 0C-.78 10.538-.78 5.46 2.34 2.34c3.12-3.12 8.198-3.12 11.319 0Zm-.665.666a7.062 7.062 0 1 0-9.988 9.988 7.062 7.062 0 0 0 9.988-9.988Z",clipRule:"evenodd"})),l("defs",null,l("clipPath",{id:i("a")},l("path",{fill:"#fff",d:"M0 0h16v16H0z"}))))},Umt=qmt;var BD={};J(BD,{icon:()=>Ymt});var M7r=T(z());var Gmt=["title","titleId"];function Mae(){return Mae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Xmt(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}var Kmt=function(t){var r=t.title,n=t.titleId,o=Jmt(t,Gmt);return l("svg",Mae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708Z"}),l("path",{fillRule:"evenodd",d:"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-1 0A7 7 0 1 1 1 8a7 7 0 0 1 14 0Z"}))},Ymt=Kmt;var zD={};J(zD,{icon:()=>n0t});var R7r=T(z());var Qmt=["title","titleId"];function Aae(){return Aae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function t0t(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}var r0t=function(t){var r=t.title,n=t.titleId,o=e0t(t,Qmt);return l("svg",Aae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.822 1.874a.5.5 0 1 1 .335.942 5.517 5.517 0 0 0-3.34 3.341.5.5 0 1 1-.943-.335 6.517 6.517 0 0 1 3.948-3.948ZM1.864 10.15a.5.5 0 1 1 .944-.33 5.517 5.517 0 0 0 3.365 3.37.5.5 0 0 1-.333.943 6.517 6.517 0 0 1-3.976-3.983Zm8.302 3.981a.5.5 0 1 1-.333-.943 5.517 5.517 0 0 0 3.347-3.332.5.5 0 1 1 .941.337 6.517 6.517 0 0 1-3.955 3.938Zm3.968-8.285a.5.5 0 1 1-.943.331A5.517 5.517 0 0 0 9.85 2.82a.5.5 0 0 1 .337-.942 6.517 6.517 0 0 1 3.946 3.968ZM8.5 3.5a.5.5 0 0 1-1 0V.997a.5.5 0 0 1 1 0V3.5Zm-4.997 4a.5.5 0 0 1 0 1H1a.5.5 0 0 1 0-1h2.503ZM7.5 12.497a.5.5 0 0 1 1 0V15a.5.5 0 1 1-1 0v-2.503ZM12.497 8.5a.5.5 0 0 1 0-1H15a.5.5 0 1 1 0 1h-2.503ZM8 9a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"}))},n0t=r0t;var WD={};J(WD,{icon:()=>l0t});var L7r=T(z());var o0t=["title","titleId"];function Rae(){return Rae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function a0t(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}var s0t=function(t){var r=t.title,n=t.titleId,o=i0t(t,o0t);return l("svg",Rae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m12.95 1.636 1.414 1.414-2.192 2.193C12.695 6.033 13 6.98 13 8c0 1.02-.305 1.967-.828 2.757l2.192 2.193-1.414 1.414-2.193-2.192A4.977 4.977 0 0 1 8 13a4.977 4.977 0 0 1-2.757-.828L3.05 14.364 1.636 12.95l2.192-2.193A4.977 4.977 0 0 1 3 8c0-1.02.305-1.967.828-2.757L1.636 3.05 3.05 1.636l2.193 2.192A4.977 4.977 0 0 1 8 3c1.02 0 1.967.305 2.757.828l2.193-2.192ZM8 5a2.99 2.99 0 0 0-1.168.236l-.126.057-.218.116-.132.081-.073.05a3.013 3.013 0 0 0-.241.187l-.113.103-.147.15c-.05.054-.097.11-.142.168l-.1.135-.05.073-.06.097c-.05.082-.096.166-.137.253l-.057.126A2.99 2.99 0 0 0 5 8c0 .414.084.809.236 1.168l.057.126.116.218.081.132c.059.089.121.175.189.257l.15.17.151.147c.056.051.114.1.174.147l.142.105c.054.037.109.072.165.106l-.124-.079.092.06.094.055c.436.247.94.388 1.477.388a2.99 2.99 0 0 0 1.168-.236l.125-.056.213-.113.151-.094.05-.034a3.011 3.011 0 0 0 .323-.258l-.15.129.09-.075.168-.159.08-.084c.051-.056.1-.114.147-.174l.105-.142.106-.165c.047-.08.091-.161.131-.245l.057-.126A2.99 2.99 0 0 0 11 8a2.99 2.99 0 0 0-.236-1.168l-.056-.125-.112-.211-.096-.155-.033-.049a3.011 3.011 0 0 0-.258-.322l.129.15-.075-.09-.159-.168-.084-.08a3.015 3.015 0 0 0-.174-.147l-.183-.132-.124-.079a2.993 2.993 0 0 0-.245-.131l-.126-.057A2.99 2.99 0 0 0 8 5Z"}))},l0t=s0t;var HD={};J(HD,{icon:()=>f0t});var F7r=T(z());var u0t=["title","titleId"];function Dae(){return Dae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function p0t(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}var d0t=function(t){var r=t.title,n=t.titleId,o=c0t(t,u0t);return l("svg",Dae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m5.142 11.074-1.912.548a2.532 2.532 0 1 1-1.395-4.867l1.947-.559a2.532 2.532 0 0 1 2.555.713l1.53-5.335c.139-.485.6-.897 1.159-1.238.27-.164.52-.278.779-.32.814-.132 1.503.558 1.261 1.422L9.574 6.643l4.988-1.43c.864-.242 1.554.447 1.422 1.26-.042.26-.156.51-.32.78-.341.56-.753 1.02-1.238 1.16L9.523 9.817a2.53 2.53 0 0 1 .56 2.4l-.56 1.947a2.532 2.532 0 1 1-4.867-1.395l.486-1.696Zm.33-1.148.48-1.673a1.52 1.52 0 0 0-1.89-1.083l-1.948.558a1.52 1.52 0 0 0 .837 2.92l2.52-.722Zm3.773-2.135-.33 1.148 5.232-1.5c.324-.093 1.182-1.39.694-1.253L9.245 7.791ZM5.63 13.049a1.52 1.52 0 0 0 2.92.837l.559-1.947a1.52 1.52 0 0 0-1.553-1.935l2.537-8.845c.136-.488-1.16.37-1.253.694L5.63 13.05Zm.973.279.559-1.947a.506.506 0 1 1 .973.279l-.558 1.947a.506.506 0 1 1-.974-.28Zm-3.93-3.653a.506.506 0 1 1-.28-.973l1.947-.558a.506.506 0 0 1 .28.973l-1.948.558Z"}))},f0t=d0t;var VD={};J(VD,{icon:()=>y0t});var z7r=T(z());var h0t=["title","titleId"];function Lae(){return Lae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function v0t(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}var g0t=function(t){var r=t.title,n=t.titleId,o=m0t(t,h0t);return l("svg",Lae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 12h12v-1.97c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V12Zm-1 0V3c0-1.105 3.134-2 7-2s7 .895 7 2v9c0 1.105-3.134 2-7 2s-7-.895-7-2Zm1-3h12V7.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V9Zm0-4.97V6h12V4.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97Zm10.675-1.483C11.467 2.202 9.795 2 8 2c-1.794 0-3.467.202-4.675.547-.492.14-.88.298-1.136.453.256.155.644.312 1.136.453C4.533 3.798 6.205 4 8 4c1.794 0 3.467-.202 4.675-.547.492-.14.88-.298 1.136-.453-.256-.155-.644-.312-1.136-.453ZM2 6c.257.155.833.312 1.325.453C4.533 6.798 6.205 7 8 7c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2Zm0 3c.257.155.833.312 1.325.453C4.533 9.798 6.205 10 8 10c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2Zm0 3c.257.155.833.312 1.325.453C4.533 12.798 6.205 13 8 13c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2Z"}))},y0t=g0t;var $D={};J($D,{icon:()=>_0t});var H7r=T(z());var b0t=["title","titleId"];function Nae(){return Nae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function O0t(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}var x0t=function(t){var r=t.title,n=t.titleId,o=w0t(t,b0t);return l("svg",Nae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M2 2a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h4l-1 3H3.5a.5.5 0 0 0 0 1h9a.5.5 0 0 0 0-1H11l-1-3h4a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H2zm0 8V3h12v7H2zm5 1h2l1 3H6l1-3z",clipRule:"evenodd"}),l("path",{d:"M4.5 6a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1h-1zm3 0a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1h-1zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 0 1h-1a.5.5 0 0 1-.5-.5z"}))},_0t=x0t;var ZD={};J(ZD,{icon:()=>k0t});var $7r=T(z());var S0t=["title","titleId"];function Fae(){return Fae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function E0t(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}var P0t=function(t){var r=t.title,n=t.titleId,o=I0t(t,S0t);return l("svg",Fae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 1.5a.5.5 0 0 0-1 0V4H1.5a.5.5 0 0 0 0 1H4v2.5a.5.5 0 0 0 1 0V5h2.5a.5.5 0 0 0 0-1H5V1.5Zm3 10a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5Zm4.854-7.646a.5.5 0 0 0-.708-.708l-9 9a.5.5 0 0 0 .708.708l9-9Z"}))},k0t=P0t;var qD={};J(qD,{icon:()=>A0t});var q7r=T(z());var j0t=["title","titleId"];function Bae(){return Bae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function C0t(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}var M0t=function(t){var r=t.title,n=t.titleId,o=T0t(t,j0t);return l("svg",Bae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.967 10.864c.332.787 1.085 1.337 1.962 1.337h3.673l2.755 2.8v-2.8c1.184 0 2.143-1.003 2.143-2.24V6.604c0-1.237-.96-2.24-2.143-2.24h-1.071v4.334c0 1.197-.896 2.167-2 2.167h-5.32Z"}),l("path",{d:"M4.905 8.718h4.166c.592 0 1.072-.502 1.072-1.12V4.24c0-.618-.48-1.12-1.072-1.12H2.643c-.592 0-1.072.502-1.072 1.12V7.6c0 .617.48 1.119 1.072 1.119h1.071v1.452l1.191-1.452Zm.493 1.12-2.755 2.798V9.837C1.459 9.837.5 8.835.5 7.598V4.24C.5 3.003 1.46 2 2.643 2H9.07c1.184 0 2.143 1.003 2.143 2.24v3.358c0 1.237-.96 2.24-2.143 2.24H5.398Z"}))},A0t=M0t;var UD={};J(UD,{icon:()=>F0t});var G7r=T(z());var R0t=["title","titleId"];function zae(){return zae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function L0t(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}var N0t=function(t){var r=t.title,n=t.titleId,o=D0t(t,R0t);return l("svg",zae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V15a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h8.8ZM14 5h-3.5a.5.5 0 0 1-.5-.5V1H2v14h12V5Zm-8.5 7a.5.5 0 1 1 0-1h5a.5.5 0 1 1 0 1h-5Zm0-3a.5.5 0 0 1 0-1h5a.5.5 0 1 1 0 1h-5Z"}))},F0t=N0t;var GD={};J(GD,{icon:()=>V0t});var X7r=T(z());var B0t=["title","titleId"];function Wae(){return Wae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function W0t(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}var H0t=function(t){var r=t.title,n=t.titleId,o=z0t(t,B0t);return l("svg",Wae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m8.505 8.995 6.453-6.44-1.5-1.5-6.453 6.44 1.5 1.5ZM12.968.19c.258-.238.657-.26.91 0l1.928 1.929a.642.642 0 0 1 0 .909l-6.78 6.784A.641.641 0 0 1 8.57 10H6.643A.643.643 0 0 1 6 9.357V7.43c0-.17.067-.335.188-.455L12.968.19ZM4.5 13a.5.5 0 1 1 0-1h7a.5.5 0 1 1 0 1h-7Zm4-12a.5.5 0 0 1 0 1H2v13h12V7.5a.5.5 0 1 1 1 0V15a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h6.5Z"}))},V0t=H0t;var JD={};J(JD,{icon:()=>G0t});var Y7r=T(z());var $0t=["title","titleId"];function Hae(){return Hae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function q0t(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}var U0t=function(t){var r=t.title,n=t.titleId,o=Z0t(t,$0t);return l("svg",Hae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9 3.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0zM9 5v3h1v1H8V6H7V5h2z"}),l("path",{d:"M13.855 14.147a1.34 1.34 0 0 1-.158-.246A1.998 1.998 0 0 1 13.5 13c0-.414.103-.713.197-.901a1.34 1.34 0 0 1 .158-.246l.003-.005A.5.5 0 0 0 14 11.5V.5a.5.5 0 0 0-.5-.5H3.461l-.083.005a2.957 2.957 0 0 0-1.102.298 2.257 2.257 0 0 0-.88.763C1.148 1.44 1 1.913 1 2.5V13c0 .463.117.843.318 1.145.2.298.462.491.708.615a2.344 2.344 0 0 0 .94.24H3v-1c-.005 0-.015 0-.029-.002a1.344 1.344 0 0 1-.498-.133.817.817 0 0 1-.323-.275C2.07 13.47 2 13.287 2 13s.07-.47.15-.59a.817.817 0 0 1 .324-.275A1.344 1.344 0 0 1 3 12h9.658c-.091.27-.158.605-.158 1s.067.73.158 1H8v1h5.5a.5.5 0 0 0 .359-.848l-.004-.005zm-.001 0 .002.002-.002-.002zM2.724 1.197c.092-.046.186-.082.276-.11C3 2.918 3.001 11 2.999 11h-.033a1.977 1.977 0 0 0-.283.03 2.344 2.344 0 0 0-.657.21L2 11.254V2.5c0-.413.102-.689.229-.879.128-.193.304-.328.495-.424zM4 11V1h9v10H4z"}),l("path",{d:"M7 13H4v2.5a.5.5 0 0 0 .854.354l.646-.647.646.647A.5.5 0 0 0 7 15.5V13z"}))},G0t=U0t;var XD={};J(XD,{icon:()=>Q0t});var e8r=T(z());var J0t=["title","titleId"];function Vae(){return Vae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function K0t(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}var Y0t=function(t){var r=t.title,n=t.titleId,o=X0t(t,J0t);return l("svg",Vae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V13a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h6.8ZM12 5H8.5a.5.5 0 0 1-.5-.5V1H2v12h10V5Zm-7.5 6a.5.5 0 1 1 0-1h5a.5.5 0 1 1 0 1h-5Zm0-3a.5.5 0 0 1 0-1h5a.5.5 0 1 1 0 1h-5Zm1 8a.5.5 0 1 1 0-1H14V6.5a.5.5 0 1 1 1 0V15a1 1 0 0 1-1 1H5.5Z"}))},Q0t=Y0t;var KD={};J(KD,{icon:()=>o1t});var r8r=T(z());var e1t=["title","titleId"];function $ae(){return $ae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function r1t(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}var n1t=function(t){var r=t.title,n=t.titleId,o=t1t(t,e1t);return l("svg",$ae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("circle",{cx:8,cy:8,r:4}))},o1t=n1t;var YD={};J(YD,{icon:()=>u1t});var o8r=T(z());var i1t=["title","titleId"];function Zae(){return Zae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function s1t(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}var l1t=function(t){var r=t.title,n=t.titleId,o=a1t(t,i1t);return l("svg",Zae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 .5c4.136 0 7.5 3.364 7.5 7.5s-3.364 7.5-7.5 7.5S.5 12.136.5 8 3.864.5 8 .5Zm0 .882a6.618 6.618 0 1 0 0 13.236A6.618 6.618 0 0 0 8 1.382Z",clipRule:"evenodd"}),l("path",{d:"M9 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"}))},u1t=l1t;var QD={};J(QD,{icon:()=>h1t});var a8r=T(z());var c1t=["title","titleId"];function qae(){return qae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function d1t(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}var f1t=function(t){var r=t.title,n=t.titleId,o=p1t(t,c1t);return l("svg",qae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8.135 14.043a.75.75 0 0 0 .025-1.06l-4.591-4.81a.25.25 0 0 1 0-.346l4.59-4.81a.75.75 0 1 0-1.084-1.035l-4.591 4.81a1.75 1.75 0 0 0 0 2.416l4.59 4.81c.287.3.761.31 1.061.024Z",clipRule:"evenodd"}),l("path",{fillRule:"evenodd",d:"M14.135 14.043a.75.75 0 0 0 .025-1.06l-4.591-4.81a.25.25 0 0 1 0-.346l4.59-4.81a.75.75 0 1 0-1.084-1.035l-4.591 4.81a1.75 1.75 0 0 0 0 2.416l4.59 4.81c.287.3.761.31 1.061.024Z",clipRule:"evenodd"}))},h1t=f1t;var eL={};J(eL,{icon:()=>b1t});var l8r=T(z());var m1t=["title","titleId"];function Uae(){return Uae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function g1t(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}var y1t=function(t){var r=t.title,n=t.titleId,o=v1t(t,m1t);return l("svg",Uae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M2.232 14.043a.75.75 0 0 1-.025-1.06l4.591-4.81a.25.25 0 0 0 0-.346l-4.59-4.81a.75.75 0 0 1 1.085-1.035l4.59 4.81a1.75 1.75 0 0 1 0 2.416l-4.59 4.81a.75.75 0 0 1-1.06.024Z",clipRule:"evenodd"}),l("path",{fillRule:"evenodd",d:"M8.232 14.043a.75.75 0 0 1-.025-1.06l4.591-4.81a.25.25 0 0 0 0-.346l-4.59-4.81a.75.75 0 0 1 1.085-1.035l4.59 4.81a1.75 1.75 0 0 1 0 2.416l-4.59 4.81a.75.75 0 0 1-1.06.024Z",clipRule:"evenodd"}))},b1t=y1t;var tL={};J(tL,{icon:()=>S1t});var c8r=T(z());var w1t=["title","titleId"];function Gae(){return Gae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function x1t(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}var _1t=function(t){var r=t.title,n=t.titleId,o=O1t(t,w1t);return l("svg",Gae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m9 9.114 1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 8a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 9.082V.556C8 .249 8.224 0 8.5 0s.5.249.5.556v8.558z"}),l("path",{d:"M16 13.006V10h-1v3.006a.995.995 0 0 1-.994.994H3.01a.995.995 0 0 1-.994-.994V10h-1v3.006c0 1.1.892 1.994 1.994 1.994h10.996c1.1 0 1.994-.893 1.994-1.994z"}))},S1t=_1t;var rL={};J(rL,{icon:()=>j1t});var d8r=T(z());var I1t=["title","titleId"];function Jae(){return Jae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function P1t(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}var k1t=function(t){var r=t.title,n=t.titleId,o=E1t(t,I1t);return l("svg",Jae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 2h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2ZM1.5 1a.5.5 0 0 1 .5.5v13a.5.5 0 1 1-1 0v-13a.5.5 0 0 1 .5-.5Zm13 0a.5.5 0 0 1 .5.5v13a.5.5 0 1 1-1 0v-13a.5.5 0 0 1 .5-.5Z"}))},j1t=k1t;var nL={};J(nL,{icon:()=>R1t});var h8r=T(z());var T1t=["title","titleId"];function Xae(){return Xae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function M1t(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}var A1t=function(t){var r=t.title,n=t.titleId,o=C1t(t,T1t);return l("svg",Xae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 5h8a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2ZM1.5 1h13a.5.5 0 1 1 0 1h-13a.5.5 0 0 1 0-1Zm0 13h13a.5.5 0 1 1 0 1h-13a.5.5 0 1 1 0-1Z"}))},R1t=A1t;var oL={};J(oL,{icon:()=>B1t});var v8r=T(z());var D1t=["title","titleId"];function Kae(){return Kae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function N1t(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}var F1t=function(t){var r=t.title,n=t.titleId,o=L1t(t,D1t);return l("svg",Kae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 1h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2ZM1.5 14h13a.5.5 0 1 1 0 1h-13a.5.5 0 1 1 0-1Z"}))},B1t=F1t;var iL={};J(iL,{icon:()=>$1t});var y8r=T(z());var z1t=["title","titleId"];function Yae(){return Yae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function H1t(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}var V1t=function(t){var r=t.title,n=t.titleId,o=W1t(t,z1t);return l("svg",Yae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 4H7V1.5a.5.5 0 0 1 1 0V4Zm0 8v2.5a.5.5 0 1 1-1 0V12h1ZM3 5h9a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Z"}))},$1t=V1t;var aL={};J(aL,{icon:()=>J1t});var w8r=T(z());var Z1t=["title","titleId"];function Qae(){return Qae=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function U1t(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}var G1t=function(t){var r=t.title,n=t.titleId,o=q1t(t,Z1t);return l("svg",Qae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 5h8a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2ZM1.5 1a.5.5 0 0 1 .5.5v13a.5.5 0 1 1-1 0v-13a.5.5 0 0 1 .5-.5Z"}))},J1t=G1t;var sL={};J(sL,{icon:()=>evt});var x8r=T(z());var X1t=["title","titleId"];function ese(){return ese=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Y1t(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}var Q1t=function(t){var r=t.title,n=t.titleId,o=K1t(t,X1t);return l("svg",ese({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 7v1H1.5a.5.5 0 0 1 0-1H4Zm8 0h2.5a.5.5 0 1 1 0 1H12V7ZM7 1h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2Z"}))},evt=Q1t;var lL={};J(lL,{icon:()=>ivt});var S8r=T(z());var tvt=["title","titleId"];function tse(){return tse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nvt(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}var ovt=function(t){var r=t.title,n=t.titleId,o=rvt(t,tvt);return l("svg",tse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 5h8a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Zm11.5-4a.5.5 0 0 1 .5.5v13a.5.5 0 1 1-1 0v-13a.5.5 0 0 1 .5-.5Z"}))},ivt=ovt;var uL={};J(uL,{icon:()=>cvt});var E8r=T(z());var avt=["title","titleId"];function rse(){return rse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function lvt(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}var uvt=function(t){var r=t.title,n=t.titleId,o=svt(t,avt);return l("svg",rse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 3h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2ZM1.5 1h13a.5.5 0 1 1 0 1h-13a.5.5 0 0 1 0-1Z"}))},cvt=uvt;var cL={};J(cL,{icon:()=>mvt});var k8r=T(z());var pvt=["title","titleId"];function nse(){return nse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fvt(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}var hvt=function(t){var r=t.title,n=t.titleId,o=dvt(t,pvt);return l("svg",nse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 8h5a1 1 0 0 1 1 1v5H3a1 1 0 0 1-1-1V8Zm1-7h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Z"}))},mvt=hvt;var pL={};J(pL,{icon:()=>wvt});var T8r=T(z());var vvt=["title","titleId"];function ose(){return ose=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yvt(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}var bvt=function(t){var r=t.title,n=t.titleId,o=gvt(t,vvt);return l("svg",ose({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9 8h5v5a1 1 0 0 1-1 1H8V9a1 1 0 0 1 1-1ZM3 1h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Z"}))},wvt=bvt;var dL={};J(dL,{icon:()=>Ivt});var M8r=T(z());var Ovt=["title","titleId"];function ise(){return ise=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _vt(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}var Svt=function(t){var r=t.title,n=t.titleId,o=xvt(t,Ovt);return l("svg",ise({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 2h5v5a1 1 0 0 1-1 1H2V3a1 1 0 0 1 1-1Zm0-1h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Z"}))},Ivt=Svt;var fL={};J(fL,{icon:()=>Tvt});var R8r=T(z());var Evt=["title","titleId"];function ase(){return ase=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kvt(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}var jvt=function(t){var r=t.title,n=t.titleId,o=Pvt(t,Evt);return l("svg",ase({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 2h5a1 1 0 0 1 1 1v5H9a1 1 0 0 1-1-1V2ZM3 1h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Z"}))},Tvt=jvt;var hL={};J(hL,{icon:()=>Dvt});var L8r=T(z());var Cvt=["title","titleId"];function sse(){return sse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Avt(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}var Rvt=function(t){var r=t.title,n=t.titleId,o=Mvt(t,Cvt);return l("svg",sse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 4V3h6v1H5ZM3 7V6h10v1H3Zm2 3V9h6v1H5Zm-2 3v-1h10v1H3Z"}))},Dvt=Rvt;var mL={};J(mL,{icon:()=>zvt});var F8r=T(z());var Lvt=["title","titleId"];function lse(){return lse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Fvt(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}var Bvt=function(t){var r=t.title,n=t.titleId,o=Nvt(t,Lvt);return l("svg",lse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 4V3h6v1H2Zm0 3V6h10v1H2Zm0 3V9h6v1H2Zm0 3v-1h10v1H2Z"}))},zvt=Bvt;var vL={};J(vL,{icon:()=>Zvt});var z8r=T(z());var Wvt=["title","titleId"];function use(){return use=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Vvt(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}var $vt=function(t){var r=t.title,n=t.titleId,o=Hvt(t,Wvt);return l("svg",use({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 4V3h6v1H8ZM4 7V6h10v1H4Zm4 3V9h6v1H8Zm-4 3v-1h10v1H4Z"}))},Zvt=$vt;var gL={};J(gL,{icon:()=>Xvt});var H8r=T(z());var qvt=["title","titleId"];function cse(){return cse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Gvt(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}var Jvt=function(t){var r=t.title,n=t.titleId,o=Uvt(t,qvt);return l("svg",cse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.193 13H4V3h4.151c1.816 0 2.987.977 2.987 2.495 0 1.074-.797 2.01-1.823 2.176v.055c1.359.132 2.308 1.11 2.308 2.433 0 1.76-1.296 2.841-3.43 2.841ZM5.788 4.393v2.82h1.635c1.248 0 1.948-.526 1.948-1.455 0-.873-.603-1.365-1.67-1.365H5.788Zm0 7.214h1.996c1.316 0 2.016-.547 2.016-1.573 0-1.019-.72-1.552-2.092-1.552h-1.92v3.125Z"}))},Xvt=Jvt;var yL={};J(yL,{icon:()=>tgt});var $8r=T(z());var Kvt=["title","titleId"];function pse(){return pse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Qvt(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}var egt=function(t){var r=t.title,n=t.titleId,o=Yvt(t,Kvt);return l("svg",pse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.597 3a.411.411 0 0 0-.299.132l-1.85 1.993-.756-.7a.412.412 0 0 0-.28-.124.42.42 0 0 0-.292.098.333.333 0 0 0-.12.257.335.335 0 0 0 .127.254l1.064.982A.418.418 0 0 0 2.488 6a.411.411 0 0 0 .288-.126L4.904 3.58a.328.328 0 0 0 .095-.25.337.337 0 0 0-.126-.238A.421.421 0 0 0 4.597 3zm-.299 4.132A.411.411 0 0 1 4.597 7a.421.421 0 0 1 .276.093c.076.062.12.147.126.238a.328.328 0 0 1-.095.25L2.776 9.874a.411.411 0 0 1-.288.126.418.418 0 0 1-.297-.108L1.127 8.91A.335.335 0 0 1 1 8.656a.333.333 0 0 1 .12-.257.42.42 0 0 1 .292-.098c.108.005.21.05.28.123l.757.701 1.849-1.993zM4.597 11a.411.411 0 0 0-.299.132l-1.85 1.993-.756-.7a.412.412 0 0 0-.28-.124.421.421 0 0 0-.292.098.333.333 0 0 0-.12.257.335.335 0 0 0 .127.254l1.064.982a.418.418 0 0 0 .297.108.411.411 0 0 0 .288-.126l2.128-2.293a.328.328 0 0 0 .095-.25.337.337 0 0 0-.126-.238.421.421 0 0 0-.276-.093zM6.5 4a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1h-7zM6 8.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm.5 3.5a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1h-7z"}))},tgt=egt;var bL={};J(bL,{icon:()=>agt});var q8r=T(z());var rgt=["title","titleId"];function dse(){return dse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ogt(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}var igt=function(t){var r=t.title,n=t.titleId,o=ngt(t,rgt);return l("svg",dse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2.414 8.036 4.89 10.51a.5.5 0 0 1-.707.708L1.354 8.389a.5.5 0 0 1 0-.707l2.828-2.828a.5.5 0 1 1 .707.707L2.414 8.036Zm8.768 2.474 2.475-2.474-2.475-2.475a.5.5 0 0 1 .707-.707l2.829 2.828a.5.5 0 0 1 0 .707l-2.829 2.829a.5.5 0 1 1-.707-.708ZM8.559 2.506a.5.5 0 0 1 .981.19L7.441 13.494a.5.5 0 0 1-.981-.19L8.559 2.506Z"}))},agt=igt;var wL={};J(wL,{icon:()=>pgt});var G8r=T(z());var sgt=["title","titleId"];function fse(){return fse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ugt(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}var cgt=function(t){var r=t.title,n=t.titleId,o=lgt(t,sgt);return l("svg",fse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.111 10H12a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h1v1.297L6.111 10Zm.46 1L4 14v-3a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2H6.571Z"}))},pgt=cgt;var OL={};J(OL,{icon:()=>vgt});var X8r=T(z());var dgt=["title","titleId"];function hse(){return hse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hgt(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}var mgt=function(t){var r=t.title,n=t.titleId,o=fgt(t,dgt);return l("svg",hse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6 11a1 1 0 0 1 0 2H4a1 1 0 0 1 0-2V5a1 1 0 1 1 0-2h2a1 1 0 1 1 0 2v2h4V5a1 1 0 1 1 0-2h2a1 1 0 0 1 0 2v6a1 1 0 0 1 0 2h-2a1 1 0 0 1 0-2V9H6v2Z"}))},vgt=mgt;var xL={};J(xL,{icon:()=>Ogt});var Y8r=T(z());var ggt=["title","titleId"];function mse(){return mse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bgt(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}var wgt=function(t){var r=t.title,n=t.titleId,o=ygt(t,ggt);return l("svg",mse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.16 12H9.5a.5.5 0 1 1 0 1h-4a.5.5 0 1 1 0-1h1.639l1.7-8H7.5a.5.5 0 0 1 0-1h4a.5.5 0 1 1 0 1H9.861l-1.7 8Z"}))},Ogt=wgt;var _L={};J(_L,{icon:()=>Egt});var eIr=T(z());var xgt=["title","titleId"];function vse(){return vse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Sgt(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}var Igt=function(t){var r=t.title,n=t.titleId,o=_gt(t,xgt);return l("svg",vse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.556 5.051a.45.45 0 0 0 .637.637l1.503-1.504c.432-.431 1.278-.382 1.89.23.612.612.662 1.458.23 1.89L9.519 8.6c-.432.432-1.278.383-1.89-.23a.45.45 0 1 0-.636.637c.914.914 2.33 1.063 3.162.23l2.297-2.297c.833-.833.684-2.248-.23-3.162-.914-.915-2.33-1.063-3.162-.23L7.556 5.051zm.888 5.261a.45.45 0 0 0-.637 0l-1.503 1.504c-.432.431-1.278.382-1.89-.23-.612-.612-.661-1.458-.23-1.89L6.481 7.4c.432-.432 1.278-.383 1.89.23a.45.45 0 0 0 .636-.637c-.914-.914-2.33-1.063-3.162-.23L3.548 9.06c-.833.833-.685 2.248.23 3.162.914.915 2.33 1.063 3.162.23l1.504-1.503a.45.45 0 0 0 0-.637zM7.877 5.76a.39.39 0 0 0 .274-.114l1.503-1.504-1.503 1.504a.39.39 0 0 1-.274.114zm.912 3.183c-.4.003-.843-.172-1.202-.53.359.358.802.533 1.202.53zM12.18 3.82c-.502-.503-1.155-.766-1.773-.76.618-.006 1.27.257 1.773.76.898.898 1.034 2.275.23 3.078l-2.297 2.297 2.297-2.297c.804-.803.668-2.18-.23-3.078zm-4.062 6.42a.39.39 0 0 1 .284.667L6.898 12.41l1.504-1.503a.39.39 0 0 0-.284-.667zm-.926-3.965c.618-.006 1.27.257 1.773.76-.502-.503-1.155-.766-1.773-.76zM5.414 12.15a1.762 1.762 0 0 1-1.042-.522c-.626-.627-.692-1.511-.23-1.974L6.44 7.358 4.142 9.654c-.462.463-.396 1.348.23 1.974.311.311.687.484 1.042.522z"}))},Egt=Igt;var SL={};J(SL,{icon:()=>Cgt});var rIr=T(z());var Pgt=["title","titleId"];function gse(){return gse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jgt(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}var Tgt=function(t){var r=t.title,n=t.titleId,o=kgt(t,Pgt);return l("svg",gse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 8v1h1v1H1V9h1V8H1V7h3v1H3Zm1 4v2H1v-1h1v-1H1v-1h3v1ZM3 5h1v1H1V5h1V4H1V3h2v2Zm2.5-1h8a.5.5 0 1 1 0 1h-8a.5.5 0 0 1 0-1Zm0 4h8a.5.5 0 1 1 0 1h-8a.5.5 0 0 1 0-1Zm0 4h8a.5.5 0 1 1 0 1h-8a.5.5 0 1 1 0-1Z"}))},Cgt=Tgt;var IL={};J(IL,{icon:()=>Lgt});var oIr=T(z());var Mgt=["title","titleId"];function yse(){return yse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Rgt(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}var Dgt=function(t){var r=t.title,n=t.titleId,o=Agt(t,Mgt);return l("svg",yse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10 6H5C3.057 6 2 7.057 2 9s1.057 3 3 3h1.5v-1H5c-1.39 0-2-.61-2-2 0-1.39.61-2 2-2h5v3l3.5-3.5L10 3v3Z"}))},Lgt=Dgt;var EL={};J(EL,{icon:()=>Wgt});var aIr=T(z());var Ngt=["title","titleId"];function bse(){return bse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Bgt(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}var zgt=function(t){var r=t.title,n=t.titleId,o=Fgt(t,Ngt);return l("svg",bse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.023 10h1.274c.006.08.01.164.01.25a2.557 2.557 0 0 1-.883 1.949c-.284.25-.627.446-1.03.588A4.087 4.087 0 0 1 8.028 13a4.616 4.616 0 0 1-3.382-1.426c-.193-.259-.193-.5 0-.724.193-.223.438-.266.735-.13.343.363.748.655 1.213.876.466.22.949.33 1.449.33.637 0 1.132-.144 1.485-.433.353-.29.53-.67.53-1.14a1.72 1.72 0 0 0-.034-.353ZM5.586 7a2.49 2.49 0 0 1-.294-.507 2.316 2.316 0 0 1-.177-.934c0-.363.076-.701.228-1.015.152-.314.363-.586.633-.816.27-.23.588-.41.955-.537A3.683 3.683 0 0 1 8.145 3c.578 0 1.112.11 1.603.33.49.221.907.508 1.25.861.16.282.16.512 0 .692-.16.18-.38.214-.662.102a3.438 3.438 0 0 0-.978-.669 2.914 2.914 0 0 0-1.213-.242c-.54 0-.973.125-1.302.375-.328.25-.492.595-.492 1.036 0 .236.046.434.14.596.092.162.217.304.374.426.157.123.329.23.515.324.119.06.24.116.362.169H5.586ZM2.5 8h11a.5.5 0 1 1 0 1h-11a.5.5 0 0 1 0-1Z"}))},Wgt=zgt;var PL={};J(PL,{icon:()=>qgt});var lIr=T(z());var Hgt=["title","titleId"];function wse(){return wse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $gt(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}var Zgt=function(t){var r=t.title,n=t.titleId,o=Vgt(t,Hgt);return l("svg",wse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M14 3v2H2V3v10h12V3ZM2 2h12c.552 0 1 .413 1 .923v10.154c0 .51-.448.923-1 .923H2c-.552 0-1-.413-1-.923V2.923C1 2.413 1.448 2 2 2Zm0 5h12v1H2V7Zm0 3h12v1H2v-1Z"}))},qgt=Zgt;var kL={};J(kL,{icon:()=>Kgt});var cIr=T(z());var Ugt=["title","titleId"];function Ose(){return Ose=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Jgt(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}var Xgt=function(t){var r=t.title,n=t.titleId,o=Ggt(t,Ugt);return l("svg",Ose({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 3.536V7.8c0 1.628 1.224 2.6 3 2.6 1.783 0 3-.972 3-2.6V3.536c0-.357.167-.536.5-.536.333 0 .5.179.5.536v4.318c0 2.093-1.665 3.546-4 3.546S4 9.893 4 7.8V3.536C4 3.179 4.167 3 4.5 3c.333 0 .5.179.5.536ZM2.5 13h11a.5.5 0 1 1 0 1h-11a.5.5 0 1 1 0-1Z"}))},Kgt=Xgt;var jL={};J(jL,{icon:()=>ryt});var dIr=T(z());var Ygt=["title","titleId"];function xse(){return xse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function eyt(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}var tyt=function(t){var r=t.title,n=t.titleId,o=Qgt(t,Ygt);return l("svg",xse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.5 6h5c1.943 0 3 1.057 3 3s-1.057 3-3 3H9v-1h1.5c1.39 0 2-.61 2-2 0-1.39-.61-2-2-2h-5v3L2 6.5 5.5 3v3Z"}))},ryt=tyt;var TL={};J(TL,{icon:()=>syt});var hIr=T(z());var nyt=["title","titleId"];function _se(){return _se=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function iyt(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}var ayt=function(t){var r=t.title,n=t.titleId,o=oyt(t,nyt);return l("svg",_se({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.5 4h8a.5.5 0 1 1 0 1h-8a.5.5 0 0 1 0-1Zm0 4h8a.5.5 0 1 1 0 1h-8a.5.5 0 0 1 0-1Zm0 4h8a.5.5 0 1 1 0 1h-8a.5.5 0 1 1 0-1Zm-3-7a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm0 4a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm0 4a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Z"}))},syt=ayt;var CL={};J(CL,{icon:()=>dyt});var vIr=T(z());var lyt=["title","titleId"];function Sse(){return Sse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cyt(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}var pyt=function(t){var r=t.title,n=t.titleId,o=uyt(t,lyt);return l("svg",Sse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M14.95 3.684 8.637 8.912a1 1 0 0 1-1.276 0L1.051 3.684A.999.999 0 0 0 1 4v8a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4a.999.999 0 0 0-.05-.316ZM2 2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm-.21 1 5.576 4.603a1 1 0 0 0 1.27.003L14.268 3H1.79Z"}))},dyt=pyt;var ML={};J(ML,{icon:()=>Ese});var yIr=T(z());var fyt=["title","titleId"];function Ise(){return Ise=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function myt(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}var vyt=function(t){var r=t.title,n=t.titleId,o=hyt(t,fyt);return l("svg",Ise({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o))},Ese=vyt;var AL={};J(AL,{icon:()=>Oyt});var wIr=T(z());var gyt=["title","titleId"];function Pse(){return Pse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function byt(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}var wyt=function(t){var r=t.title,n=t.titleId,o=yyt(t,gyt);return l("svg",Pse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.406 13.454a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}),l("path",{fillRule:"evenodd",d:"M6.86 6.09a2.545 2.545 0 1 1 2.497-3.045h.368a2.727 2.727 0 1 1 0 5.455H6.543a1.727 1.727 0 1 0 0 3.454h.367a2.546 2.546 0 1 1 0 1h-.367a2.727 2.727 0 1 1 0-5.454h3.182a1.727 1.727 0 1 0 0-3.455h-.368a2.546 2.546 0 0 1-2.496 2.046L6.86 6.09Zm0-1a1.545 1.545 0 1 1 0-3.09 1.545 1.545 0 0 1 0 3.09ZM9.407 14a1.545 1.545 0 1 1 0-3.09 1.545 1.545 0 0 1 0 3.09Z",clipRule:"evenodd"}))},Oyt=wyt;var RL={};J(RL,{icon:()=>Eyt});var xIr=T(z());var xyt=["title","titleId"];function kse(){return kse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Syt(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}var Iyt=function(t){var r=t.title,n=t.titleId,o=_yt(t,xyt);return l("svg",kse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M15.862 14.18v.001a.482.482 0 0 1 .1.521.5.5 0 0 1-.447.299h-3.149c-.07 0-.136 0-.2-.003a.664.664 0 0 1-.414-.14c-.35-.31-.684-.637-1.001-.981l-1.772-1.738a5.941 5.941 0 0 1-3.802.14l-.045-.012a5.89 5.89 0 0 1-2.682-1.712A5.715 5.715 0 0 1 1.08 7.72a5.66 5.66 0 0 1 .348-3.118A5.78 5.78 0 0 1 3.39 2.124a5.979 5.979 0 0 1 6.136-.505 5.836 5.836 0 0 1 2.356 2.123 5.67 5.67 0 0 1 .873 3.017l.001.003c0 .128-.051.25-.143.34a.495.495 0 0 1-.694 0 .476.476 0 0 1-.143-.34c0-.95-.288-1.878-.826-2.668a4.88 4.88 0 0 0-2.198-1.769 4.99 4.99 0 0 0-2.83-.273 4.93 4.93 0 0 0-2.509 1.314 4.774 4.774 0 0 0-1.34 2.46A4.715 4.715 0 0 0 2.352 8.6a4.82 4.82 0 0 0 1.804 2.155c.805.528 1.752.81 2.721.81a4.899 4.899 0 0 0 1.296-.194l.032-.009.717-.211a.506.506 0 0 1 .483.111l1.11 1.026 1.788 1.752h2.03l-3.657-3.583a.475.475 0 0 1 .014-.666.495.495 0 0 1 .679-.013l4.493 4.402z"}),l("path",{d:"M7.097 3.468 9.679 4.93a.433.433 0 0 1 .218.37v2.924a.422.422 0 0 1-.218.37l-2.582 1.461a.438.438 0 0 1-.437 0L4.077 8.594a.433.433 0 0 1-.218-.37V5.3a.422.422 0 0 1 .218-.37L6.66 3.467a.446.446 0 0 1 .437 0zm1.845 4.27V5.784a.328.328 0 0 0-.17-.287L7.047 4.52a.342.342 0 0 0-.338 0l-1.726.977a.336.336 0 0 0-.168.287v1.953a.326.326 0 0 0 .17.287l1.724.977a.342.342 0 0 0 .338 0l1.726-.978a.334.334 0 0 0 .169-.287z"}))},Eyt=Iyt;var DL={};J(DL,{icon:()=>Cyt});var SIr=T(z());var Pyt=["title","titleId"];function jse(){return jse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jyt(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}var Tyt=function(t){var r=t.title,n=t.titleId,o=kyt(t,Pyt);return l("svg",jse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m2.648 9.937 7.29-7.288a2.21 2.21 0 0 1 3.124 0l2.29 2.288a2.21 2.21 0 0 1 0 3.126L10.413 13H12.5a.5.5 0 0 1 0 1H4.501a2.21 2.21 0 0 1-1.563-.647l.707-.707c.227.226.535.354.856.354h4.005a1.21 1.21 0 0 0 .848-.354l1.292-1.293-4-4-3.29 3.291a1.21 1.21 0 0 0 0 1.712l.29.29-.708.707-.29-.29a2.21 2.21 0 0 1 0-3.126zM8 6h6.89a1.208 1.208 0 0 0-.246-.356L14 5H9L8 6zm2-2h3l-.645-.644a1.21 1.21 0 0 0-1.71 0L10 4zm4.89 3H7.708l1 1H14l.644-.644A1.22 1.22 0 0 0 14.891 7zM9.708 9l1.646 1.646L13 9H9.707z"}),l("path",{d:"M14 11.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0zm1.5-.5a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1zm-1 2a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1h-1z"}))},Cyt=Tyt;var LL={};J(LL,{icon:()=>Lyt});var EIr=T(z());var Myt=["title","titleId"];function Tse(){return Tse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ryt(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}var Dyt=function(t){var r=t.title,n=t.titleId,o=Ayt(t,Myt);return l("svg",Tse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.854 5.146a.5.5 0 1 0-.708.708L6.793 8.5l-2.647 2.646a.5.5 0 0 0 .708.708L7.5 9.207l2.646 2.647a.5.5 0 0 0 .708-.708L8.207 8.5l2.647-2.646a.5.5 0 0 0-.708-.708L7.5 7.793 4.854 5.146Z"}),l("path",{fillRule:"evenodd",d:"M5 1a1 1 0 0 0-.707.293l-4 4A1 1 0 0 0 0 6v5a1 1 0 0 0 .293.707l4 4A1 1 0 0 0 5 16h5a1 1 0 0 0 .707-.293l4-4A1 1 0 0 0 15 11V6a1 1 0 0 0-.293-.707l-4-4A1 1 0 0 0 10 1H5Zm5 1H5L1 6v5l4 4h5l4-4V6l-4-4Z"}))},Lyt=Dyt;var NL={};J(NL,{icon:()=>Wyt});var kIr=T(z());var Nyt=["title","titleId"];function Cse(){return Cse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Byt(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}var zyt=function(t){var r=t.title,n=t.titleId,o=Fyt(t,Nyt);return l("svg",Cse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M10 1a1 1 0 0 1 .707.293l4 4A1 1 0 0 1 15 6v5a1 1 0 0 1-.293.707l-4 4A1 1 0 0 1 10 16H5a1 1 0 0 1-.707-.293l-4-4A1 1 0 0 1 0 11V6a1 1 0 0 1 .293-.707l4-4A1 1 0 0 1 5 1h5ZM4.146 5.146a.5.5 0 0 1 .708 0L7.5 7.793l2.646-2.647a.5.5 0 0 1 .708.708L8.207 8.5l2.647 2.646a.5.5 0 0 1-.708.708L7.5 9.207l-2.646 2.647a.5.5 0 0 1-.708-.708L6.793 8.5 4.146 5.854a.5.5 0 0 1 0-.708Z"}))},Wyt=zyt;var FL={};J(FL,{icon:()=>qyt});var TIr=T(z());var Hyt=["title","titleId"];function Mse(){return Mse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $yt(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}var Zyt=function(t){var r=t.title,n=t.titleId,o=Vyt(t,Hyt);return l("svg",Mse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 2.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5ZM2.5 4a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-2ZM2 6.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5ZM2.5 8a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-2ZM2 10.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1-.5-.5v-2ZM6.5 2a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-2ZM6 4.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5ZM6.5 6a.5.5 0 0 0-.5.5v6a.5.5 0 0 0 .5.5h2a.5.5 0 0 0 .5-.5v-6a.5.5 0 0 0-.5-.5h-2ZM10 2.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Zm.5 1.5a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-2ZM10 6.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Zm.5 1.5a.5.5 0 0 0-.5.5v4a.5.5 0 0 0 .5.5h2a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 0-.5-.5h-2Z"}),l("path",{d:"M2 0h11a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H2Z"}))},qyt=Zyt;var BL={};J(BL,{icon:()=>Kyt});var MIr=T(z());var Uyt=["title","titleId"];function Ase(){return Ase=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Jyt(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}var Xyt=function(t){var r=t.title,n=t.titleId,o=Gyt(t,Uyt);return l("svg",Ase({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M12.535 12.493a.47.47 0 0 1 .468.468v2.564a.473.473 0 0 1-.466.475H3V0H12.595a.45.45 0 0 1 .398.463v2.565a.469.469 0 0 1-.468.467h-.065a.468.468 0 0 1-.467-.467V1H4v14h8.01l-.007-2.04c0-.257.21-.467.467-.467h.065Zm-1.096-7.59 2.121 2.122a1.5 1.5 0 0 1 0 2.121l-2.12 2.122a.5.5 0 1 1-.708-.708l2.121-2.12a.5.5 0 0 0 0-.708l-2.121-2.121a.5.5 0 0 1 .707-.707Z"}))},Kyt=Xyt;var zL={};J(zL,{icon:()=>rbt});var RIr=T(z());var Yyt=["title","titleId"];function Rse(){return Rse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ebt(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}var tbt=function(t){var r=t.title,n=t.titleId,o=Qyt(t,Yyt);return l("svg",Rse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m4.354 12.354 8-8a.5.5 0 0 0-.708-.708l-8 8a.5.5 0 0 0 .708.708ZM1 10.5a.5.5 0 1 1 1 0v3a.5.5 0 0 0 .5.5h3a.5.5 0 1 1 0 1h-3A1.5 1.5 0 0 1 1 13.5v-3Zm14-5a.5.5 0 1 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 1 1 0-1h3A1.5 1.5 0 0 1 15 2.5v3Z"}))},rbt=tbt;var WL={};J(WL,{icon:()=>sbt});var LIr=T(z());var nbt=["title","titleId"];function Dse(){return Dse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ibt(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}var abt=function(t){var r=t.title,n=t.titleId,o=obt(t,nbt);return l("svg",Dse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6.707 10 10 6.707A.5.5 0 0 0 9.293 6L6 9.293a.5.5 0 1 0 .707.707ZM4 9.5a.5.5 0 0 1 1 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 1 1 0 1h-1A1.5 1.5 0 0 1 4 10.5v-1Zm8-3a.5.5 0 1 1-1 0v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 1 0-1h1A1.5 1.5 0 0 1 12 5.5v1Z"}))},sbt=abt;var HL={};J(HL,{icon:()=>dbt});var FIr=T(z());var lbt=["title","titleId"];function Lse(){return Lse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cbt(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}var pbt=function(t){var r=t.title,n=t.titleId,o=ubt(t,lbt);return l("svg",Lse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.505 1c.422-.003.844.17 1.166.516l1.95 2.05c.213.228.213.6 0 .828a.52.52 0 0 1-.771 0L9 2.451v7.993c0 .307-.224.556-.5.556s-.5-.249-.5-.556v-7.96l-1.82 1.91a.52.52 0 0 1-.77 0 .617.617 0 0 1 0-.829l1.95-2.05A1.575 1.575 0 0 1 8.5 1h.005ZM4.18 7c-.473 0-.88.294-.972.703l-1.189 5.25a.776.776 0 0 0-.019.172c0 .483.444.875.99.875H14.01c.065 0 .13-.006.194-.017.537-.095.885-.556.778-1.03l-1.19-5.25C13.7 7.294 13.293 7 12.822 7H4.18ZM6 6v1h5V6h1.825c.946 0 1.76.606 1.946 1.447l1.19 5.4c.215.975-.482 1.923-1.556 2.118a2.18 2.18 0 0 1-.39.035H2.985C1.888 15 1 14.194 1 13.2c0-.119.013-.237.039-.353l1.19-5.4C2.414 6.606 3.229 6 4.174 6H6Z"}))},dbt=pbt;var VL={};J(VL,{icon:()=>gbt});var zIr=T(z());var fbt=["title","titleId"];function Nse(){return Nse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mbt(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}var vbt=function(t){var r=t.title,n=t.titleId,o=hbt(t,fbt);return l("svg",Nse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M15.98 7.873c.013.03.02.064.02.098v.06a.24.24 0 0 1-.02.097C15.952 8.188 13.291 14 8 14S.047 8.188.02 8.128A.24.24 0 0 1 0 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2s7.953 5.813 7.98 5.873Zm-1.37-.424a12.097 12.097 0 0 0-1.385-1.862C11.739 3.956 9.999 3 8 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 0 0-1.701 2.414 12.095 12.095 0 0 0 1.7 2.413C4.26 12.043 6.002 13 8 13s3.74-.956 5.225-2.587A12.097 12.097 0 0 0 14.926 8c-.08-.15-.189-.343-.315-.551ZM8 4.75A3.253 3.253 0 0 1 11.25 8 3.254 3.254 0 0 1 8 11.25 3.253 3.253 0 0 1 4.75 8 3.252 3.252 0 0 1 8 4.75Zm0 1C6.76 5.75 5.75 6.76 5.75 8S6.76 10.25 8 10.25 10.25 9.24 10.25 8 9.24 5.75 8 5.75Zm0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"}))},gbt=vbt;var $L={};J($L,{icon:()=>xbt});var HIr=T(z());var ybt=["title","titleId"];function Fse(){return Fse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wbt(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}var Obt=function(t){var r=t.title,n=t.titleId,o=bbt(t,ybt);return l("svg",Fse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m5.318 13.47.776-.776A6.04 6.04 0 0 0 8 13c1.999 0 3.74-.956 5.225-2.587A12.097 12.097 0 0 0 14.926 8a12.097 12.097 0 0 0-1.701-2.413l-.011-.012.707-.708c1.359 1.476 2.045 2.976 2.058 3.006.014.03.021.064.021.098v.06a.24.24 0 0 1-.02.097C15.952 8.188 13.291 14 8 14a7.03 7.03 0 0 1-2.682-.53ZM2.04 11.092C.707 9.629.034 8.158.02 8.128A.24.24 0 0 1 0 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2c.962 0 1.837.192 2.625.507l-.78.78A6.039 6.039 0 0 0 8 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 0 0-1.701 2.414 12.11 12.11 0 0 0 1.674 2.383l-.708.708ZM8.362 4.77 7.255 5.877a2.262 2.262 0 0 0-1.378 1.378L4.77 8.362A3.252 3.252 0 0 1 8.362 4.77Zm2.86 2.797a3.254 3.254 0 0 1-3.654 3.654l1.06-1.06a2.262 2.262 0 0 0 1.533-1.533l1.06-1.06Zm-9.368 7.287a.5.5 0 0 1-.708-.708l13-13a.5.5 0 0 1 .708.708l-13 13Z"}))},xbt=Obt;var ZL={};J(ZL,{icon:()=>Pbt});var $Ir=T(z());var _bt=["title","titleId"];function Bse(){return Bse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ibt(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}var Ebt=function(t){var r=t.title,n=t.titleId,o=Sbt(t,_bt);return l("svg",Bse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 16A8 8 0 1 1 8 0a8 8 0 0 1 0 16Zm0-1.067A6.933 6.933 0 1 0 8 1.067a6.933 6.933 0 0 0 0 13.866ZM5.333 6.4a1.067 1.067 0 1 1 0-2.133 1.067 1.067 0 0 1 0 2.133Zm5.334 0a1.067 1.067 0 1 1 0-2.133 1.067 1.067 0 0 1 0 2.133ZM2.739 8.802a.533.533 0 0 1 .922-.537C4.815 10.245 6.249 11.2 8 11.2c1.75 0 3.185-.956 4.34-2.935a.533.533 0 0 1 .92.537c-1.333 2.287-3.1 3.465-5.26 3.465-2.16 0-3.927-1.178-5.26-3.465Z"}))},Pbt=Ebt;var qL={};J(qL,{icon:()=>Mbt});var qIr=T(z());var kbt=["title","titleId"];function zse(){return zse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Tbt(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}var Cbt=function(t){var r=t.title,n=t.titleId,o=jbt(t,kbt);return l("svg",zse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 16A8 8 0 1 1 8 0a8 8 0 0 1 0 16zm0-1.067A6.933 6.933 0 1 0 8 1.067a6.933 6.933 0 0 0 0 13.866zM5.333 6.4a1.067 1.067 0 1 1 0-2.133 1.067 1.067 0 0 1 0 2.133zm5.334 0a1.067 1.067 0 1 1 0-2.133 1.067 1.067 0 0 1 0 2.133zM3.2 10.667a.533.533 0 0 1 0-1.067h9.6a.533.533 0 1 1 0 1.067H3.2z"}))},Mbt=Cbt;var UL={};J(UL,{icon:()=>Nbt});var GIr=T(z());var Abt=["title","titleId"];function Wse(){return Wse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Dbt(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}var Lbt=function(t){var r=t.title,n=t.titleId,o=Rbt(t,Abt);return l("svg",Wse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 16A8 8 0 1 1 8 0a8 8 0 0 1 0 16Zm0-1.067A6.933 6.933 0 1 0 8 1.067a6.933 6.933 0 0 0 0 13.866ZM5.333 6.4a1.067 1.067 0 1 1 0-2.133 1.067 1.067 0 0 1 0 2.133Zm5.334 0a1.067 1.067 0 1 1 0-2.133 1.067 1.067 0 0 1 0 2.133Zm2.487 3.868a.533.533 0 1 1-.708.797C10.936 9.725 9.458 9.067 8 9.067c-1.458 0-2.937.657-4.446 1.998a.533.533 0 1 1-.708-.797C4.536 8.765 6.258 8 8 8s3.463.765 5.154 2.268Z"}))},Nbt=Lbt;var GL={};J(GL,{icon:()=>Hbt});var XIr=T(z());var Fbt=["title","titleId"];function Hse(){return Hse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zbt(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}var Wbt=function(t){var r=t.title,n=t.titleId,o=Bbt(t,Fbt);return l("svg",Hse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 1h10a2 2 0 0 1 2 2v4.337a5.533 5.533 0 0 0-1-1.08V3a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h3.257c.314.38.677.716 1.08 1H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2Z"}),l("path",{d:"M3.5 6h3.837a5.54 5.54 0 0 0-1.08 1H3.5a.5.5 0 0 1 0-1Zm0 6h1.707c.098.345.228.677.388.991A.505.505 0 0 1 5.5 13h-2a.5.5 0 0 1 0-1Zm0-8a.5.5 0 0 1 0-1h9a.5.5 0 0 1 0 1h-9ZM3 9.5a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 0-1h-1a.5.5 0 0 0-.5.5Z"}),l("path",{fillRule:"evenodd",d:"M15 10.5a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0Zm-2.146-2.354a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708l4-4a.5.5 0 0 1 .708 0ZM9 10a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm4 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"}))},Hbt=Wbt;var JL={};J(JL,{icon:()=>Ubt});var YIr=T(z());var Vbt=["title","titleId"];function Vse(){return Vse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Zbt(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}var qbt=function(t){var r=t.title,n=t.titleId,o=$bt(t,Vbt);return l("svg",Vse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 5.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5Zm2 3a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5ZM7.5 11a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1h-1Z"}))},Ubt=qbt;var XL={};J(XL,{icon:()=>Ybt});var eEr=T(z());var Gbt=["title","titleId"];function $se(){return $se=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Xbt(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}var Kbt=function(t){var r=t.title,n=t.titleId,o=Jbt(t,Gbt);return l("svg",$se({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.5 1a.5.5 0 0 0 0 1h9a.5.5 0 0 0 0-1h-9Z"}),l("path",{fillRule:"evenodd",d:"M16 11.5a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0Zm-8 0a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5Z"}),l("path",{d:"M2 4.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5ZM4.5 7a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1h-1Z"}))},Ybt=Kbt;var KL={};J(KL,{icon:()=>n2t});var rEr=T(z());var Qbt=["title","titleId"];function Zse(){return Zse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function t2t(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}var r2t=function(t){var r=t.title,n=t.titleId,o=e2t(t,Qbt);return l("svg",Zse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.5 1a.5.5 0 0 0 0 1h9a.5.5 0 0 0 0-1h-9ZM2 4.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5Zm2 3a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 0 1h-1a.5.5 0 0 1-.5-.5ZM16 11.5a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0Zm-4.5-.707L9.854 9.146a.5.5 0 1 0-.708.708l1.647 1.646-1.647 1.646a.5.5 0 0 0 .708.708l1.646-1.647 1.646 1.647a.5.5 0 0 0 .708-.708L12.207 11.5l1.647-1.646a.5.5 0 0 0-.708-.708L11.5 10.793Z"}))},n2t=r2t;var YL={};J(YL,{icon:()=>l2t});var oEr=T(z());var o2t=["title","titleId"];function qse(){return qse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function a2t(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}var s2t=function(t){var r=t.title,n=t.titleId,o=i2t(t,o2t);return l("svg",qse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.999 15.999a8 8 0 1 1 0-16 8 8 0 0 1 0 16ZM8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14ZM3.5 5h9a.5.5 0 1 1 0 1h-9a.5.5 0 0 1 0-1Zm2 3h5a.5.5 0 1 1 0 1h-5a.5.5 0 0 1 0-1Zm2 3h1a.5.5 0 1 1 0 1h-1a.5.5 0 1 1 0-1Z"}))},l2t=s2t;var QL={};J(QL,{icon:()=>f2t});var aEr=T(z());var u2t=["title","titleId"];function Use(){return Use=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function p2t(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}var d2t=function(t){var r=t.title,n=t.titleId,o=c2t(t,u2t);return l("svg",Use({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.5 1a.5.5 0 0 0 0 1h9a.5.5 0 0 0 0-1h-9ZM16 11.5a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0Zm-4-3a.5.5 0 0 0-1 0V11H8.5a.5.5 0 0 0 0 1H11v2.5a.5.5 0 0 0 1 0V12h2.5a.5.5 0 0 0 0-1H12V8.5ZM2 4.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5ZM4.5 7a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1h-1Z"}))},f2t=d2t;var eN={};J(eN,{icon:()=>y2t});var lEr=T(z());var h2t=["title","titleId"];function Gse(){return Gse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function v2t(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}var g2t=function(t){var r=t.title,n=t.titleId,o=m2t(t,h2t);return l("svg",Gse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.686 8.464c1.547-.619 3.08-.619 4.628 0A.5.5 0 0 0 13 8V2a.5.5 0 0 0-.276-.447C11.259.82 9.458.82 7.342 1.526c-1.884.628-3.417.628-4.618.027A.5.5 0 0 0 2 2v12.5a.5.5 0 1 0 1 0V8.553c1.411.627 2.983.592 4.686-.089ZM3 2.741c1.322.42 2.878.327 4.658-.267C9.4 1.894 10.843 1.85 12 2.322v4.975c-1.56-.464-3.128-.384-4.686.239-1.54.616-2.892.616-4.09.017A.498.498 0 0 0 3 7.5V2.74Z"}))},y2t=g2t;var tN={};J(tN,{icon:()=>_2t});var cEr=T(z());var b2t=["title","titleId"];function Jse(){return Jse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function O2t(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}var x2t=function(t){var r=t.title,n=t.titleId,o=w2t(t,b2t);return l("svg",Jse({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.14.192 7.53 2.49a.67.67 0 0 0 .942 0L10.86.192a.677.677 0 0 1 .944 0 .65.65 0 0 1 0 .93l-2.388 2.3a2.02 2.02 0 0 1-2.832 0l-2.388-2.3a.65.65 0 0 1 0-.93.677.677 0 0 1 .944 0zm0 15.616 2.39-2.298a.67.67 0 0 1 .942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 0 0 0-.93l-2.388-2.3a2.02 2.02 0 0 0-2.832 0l-2.388 2.3a.65.65 0 0 0 0 .93c.26.256.683.256.944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},_2t=x2t;var rN={};J(rN,{icon:()=>k2t});var dEr=T(z());var S2t=["title","titleId"];function Xse(){return Xse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function E2t(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}var P2t=function(t){var r=t.title,n=t.titleId,o=I2t(t,S2t);return l("svg",Xse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2H1v11h6.1c.07.348.177.682.316 1H1a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.25a.75.75 0 0 1 .75.75v1.125c0 .069.056.125.125.125H13a1 1 0 0 1 1 1v3.416a4.962 4.962 0 0 0-1-.316V4H7.125A1.125 1.125 0 0 1 6 2.875V2zm10 10a4 4 0 1 1-8 0 4 4 0 0 1 8 0zm-1.646-1.354a.5.5 0 0 1 0 .708l-2.5 2.5a.5.5 0 0 1-.708 0l-1-1a.5.5 0 0 1 .708-.708l.646.647 2.146-2.147a.5.5 0 0 1 .708 0z"}))},k2t=P2t;var nN={};J(nN,{icon:()=>A2t});var hEr=T(z());var j2t=["title","titleId"];function Kse(){return Kse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function C2t(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}var M2t=function(t){var r=t.title,n=t.titleId,o=T2t(t,j2t);return l("svg",Kse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 2H2v11h12V4H8.125A1.125 1.125 0 0 1 7 2.875V2zm.25-1a.75.75 0 0 1 .75.75v1.125c0 .069.056.125.125.125H14a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.25z"}))},A2t=M2t;var oN={};J(oN,{icon:()=>F2t});var vEr=T(z());var R2t=["title","titleId"];function Yse(){return Yse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function L2t(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}var N2t=function(t){var r=t.title,n=t.titleId,o=D2t(t,R2t);return l("svg",Yse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m1 9.5.826-3.717A1 1 0 0 1 2.802 5H13V4H7.125A1.125 1.125 0 0 1 6 2.875V2H1v7.5zm.247 3.5H7.1c.07.348.177.682.316 1H1a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.25a.75.75 0 0 1 .75.75v1.125c0 .069.056.125.125.125H13a1 1 0 0 1 1 1v1h.753a1 1 0 0 1 .977 1.217l-.447 2.011a5.015 5.015 0 0 0-.887-.618L14.753 6H2.803l-1.556 7zM16 12a4 4 0 1 1-8 0 4 4 0 0 1 8 0zm-4 .5a.577.577 0 0 1-.57-.495l-.29-2.015a.867.867 0 1 1 1.718 0l-.288 2.015a.577.577 0 0 1-.57.495zm0 2.5a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"}))},F2t=N2t;var iN={};J(iN,{icon:()=>V2t});var yEr=T(z());var B2t=["title","titleId"];function Qse(){return Qse=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function W2t(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}var H2t=function(t){var r=t.title,n=t.titleId,o=z2t(t,B2t);return l("svg",Qse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m1 9.5.826-3.717A1 1 0 0 1 2.802 5H13V4H7.125A1.125 1.125 0 0 1 6 2.875V2H1v7.5zm.247 3.5h11.95l1.556-7H2.803l-1.556 7zM13 14H1a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.25a.75.75 0 0 1 .75.75v1.125c0 .069.056.125.125.125H13a1 1 0 0 1 1 1v1h.753a1 1 0 0 1 .977 1.217l-1.556 7a1 1 0 0 1-.976.783H13z"}))},V2t=H2t;var aN={};J(aN,{icon:()=>G2t});var wEr=T(z());var $2t=["title","titleId"];function ele(){return ele=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function q2t(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}var U2t=function(t){var r=t.title,n=t.titleId,o=Z2t(t,$2t);return l("svg",ele({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 2a1 1 0 0 0-1 1v10a1 1 0 1 0 2 0V3a1 1 0 0 0-1-1zm5.146.22 7.2 4.581a1.425 1.425 0 0 1 0 2.398l-7.2 4.581C7.21 14.375 6 13.692 6 12.581V3.42c0-1.112 1.21-1.795 2.146-1.2z",clipRule:"evenodd"}))},G2t=U2t;var sN={};J(sN,{icon:()=>Q2t});var xEr=T(z());var J2t=["title","titleId"];function tle(){return tle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function K2t(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}var Y2t=function(t){var r=t.title,n=t.titleId,o=X2t(t,J2t);return l("svg",tle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13 2a1 1 0 0 1 1 1v10a1 1 0 1 1-2 0V3a1 1 0 0 1 1-1zm-5.146.22-7.2 4.581a1.425 1.425 0 0 0 0 2.398l7.2 4.581c.936.595 2.146-.088 2.146-1.199V3.42c0-1.111-1.21-1.794-2.146-1.199z",clipRule:"evenodd"}))},Q2t=Y2t;var lN={};J(lN,{icon:()=>o5t});var SEr=T(z());var e5t=["title","titleId"];function rle(){return rle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function r5t(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}var n5t=function(t){var r=t.title,n=t.titleId,o=t5t(t,e5t);return l("svg",rle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9 7V3h1v3h3v1H9zM7 7H3V6h3V3h1v4zm2 2h4v1h-3v3H9V9zM7 9v4H6v-3H3V9h4zM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0 1 14.006 16H1.994A1.995 1.995 0 0 1 0 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 0 0 .994-.994V1.994A.995.995 0 0 0 14.006 1H1.994A.995.995 0 0 0 1 1.994z"}))},o5t=n5t;var uN={};J(uN,{icon:()=>u5t});var EEr=T(z());var i5t=["title","titleId"];function nle(){return nle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function s5t(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}var l5t=function(t){var r=t.title,n=t.titleId,o=a5t(t,i5t);return l("svg",nle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M13 3v4h-1V4H9V3h4ZM3 3h4v1H4v3H3V3Zm10 10H9v-1h3V9h1v4ZM3 13V9h1v3h3v1H3ZM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0 1 14.006 16H1.994A1.995 1.995 0 0 1 0 14.006V1.994Zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 0 0 .994-.994V1.994A.995.995 0 0 0 14.006 1H1.994A.995.995 0 0 0 1 1.994Z"}))},u5t=l5t;var cN={};J(cN,{icon:()=>h5t});var kEr=T(z());var c5t=["title","titleId"];function ole(){return ole=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function d5t(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}var f5t=function(t){var r=t.title,n=t.titleId,o=p5t(t,c5t);return l("svg",ole({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13 2.226v2.218c-.359-.143-.845-.218-1.315-.218-1.059 0-1.631.519-1.802 1.565l-.168.937h2.798v2.159H9.41l-.313 1.674C8.696 12.987 7.261 14 4.785 14c-.718 0-1.35-.092-1.785-.251v-2.243c.418.176.905.268 1.383.268 1.008 0 1.546-.435 1.725-1.523l.24-1.364H3.787V6.728h2.812l.288-1.264C7.286 3.071 8.662 2 11.352 2c.598 0 1.306.1 1.648.226z"}))},h5t=f5t;var pN={};J(pN,{icon:()=>b5t});var TEr=T(z());var m5t=["title","titleId"];function ile(){return ile=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function g5t(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}var y5t=function(t){var r=t.title,n=t.titleId,o=v5t(t,m5t);return l("svg",ile({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.164 10.329 1.87 8 .163 5.67c.18-.601.43-1.19.758-1.757a8.197 8.197 0 0 1 1.142-1.535l2.872.313L6.099.05a8.166 8.166 0 0 1 3.8-.003l1.166 2.644 2.872-.313a8.166 8.166 0 0 1 1.899 3.293L14.13 8l1.706 2.33c-.18.601-.43 1.19-.758 1.757a8.197 8.197 0 0 1-1.142 1.535l-2.872-.313-1.164 2.641a8.166 8.166 0 0 1-3.8.003l-1.166-2.644-2.872.313a8.166 8.166 0 0 1-1.899-3.293Zm4.663 1.986a1 1 0 0 1 1.023.591l.957 2.17c.79.134 1.597.132 2.387-.001l.956-2.169a1 1 0 0 1 1.023-.59l2.358.256a7.23 7.23 0 0 0 1.194-2.068l-1.401-1.913a1 1 0 0 1 0-1.182l1.4-1.912a7.165 7.165 0 0 0-1.192-2.069l-2.359.257a1 1 0 0 1-1.023-.591L9.193.924a7.165 7.165 0 0 0-2.387.001L5.85 3.094a1 1 0 0 1-1.023.59l-2.358-.256a7.23 7.23 0 0 0-1.194 2.068l1.401 1.913a1 1 0 0 1 0 1.182l-1.4 1.912c.28.751.681 1.45 1.192 2.069l2.359-.257ZM8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6Zm0-1a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z"}))},b5t=y5t;var dN={};J(dN,{icon:()=>S5t});var MEr=T(z());var w5t=["title","titleId"];function ale(){return ale=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function x5t(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}var _5t=function(t){var r=t.title,n=t.titleId,o=O5t(t,w5t);return l("svg",ale({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.035 9A3.5 3.5 0 0 1 15 7.05V4.5c0-1.072-.648-1.72-2.098-2.01a.5.5 0 0 1 .196-.98C14.981 1.886 16 2.905 16 4.5v4.25c0 .072-.015.14-.043.202A3.5 3.5 0 1 1 9.035 10h-2.07A3.5 3.5 0 1 1 .043 8.952.498.498 0 0 1 0 8.75V4.5c0-1.595 1.019-2.614 2.902-2.99a.5.5 0 0 1 .196.98C1.648 2.78 1 3.428 1 4.5v2.55A3.5 3.5 0 0 1 6.965 9h2.07ZM3.5 12a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Zm9 0a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z"}))},S5t=_5t;var fN={};J(fN,{icon:()=>j5t});var REr=T(z());var I5t=["title","titleId"];function sle(){return sle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function P5t(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}var k5t=function(t){var r=t.title,n=t.titleId,o=E5t(t,I5t);return l("svg",sle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.019 8a6.462 6.462 0 0 0 1.003 3h2.382a14.469 14.469 0 0 1-.396-3h-2.99Zm0-1h2.989c.033-1.078.172-2.094.396-3H2.022a6.462 6.462 0 0 0-1.003 3ZM13.98 8h-2.989a14.469 14.469 0 0 1-.396 3h2.382a6.462 6.462 0 0 0 1.003-3Zm0-1a6.462 6.462 0 0 0-1.003-3h-2.382c.224.906.363 1.922.396 3h2.99ZM5.008 8c.037 1.107.195 2.127.429 3h4.126c.234-.873.392-1.893.429-3H5.008Zm0-1h4.984a13.422 13.422 0 0 0-.429-3H5.437a13.422 13.422 0 0 0-.429 3ZM.016 8H0V7h.016a7.5 7.5 0 0 1 14.968 0H15v1h-.016A7.5 7.5 0 0 1 .016 8Zm2.794 4a6.501 6.501 0 0 0 2.717 1.695A7.315 7.315 0 0 1 4.7 12H2.81Zm9.38 0H10.3c-.23.657-.51 1.23-.827 1.695A6.501 6.501 0 0 0 12.19 12Zm-6.428 0c.484 1.24 1.132 2 1.738 2 .606 0 1.254-.76 1.738-2H5.762ZM2.81 3H4.7c.23-.657.51-1.23.827-1.695A6.501 6.501 0 0 0 2.81 3Zm9.38 0a6.501 6.501 0 0 0-2.717-1.695c.317.465.597 1.038.827 1.695h1.89ZM5.762 3h3.476C8.754 1.76 8.106 1 7.5 1c-.606 0-1.254.76-1.738 2Z"}))},j5t=k5t;var hN={};J(hN,{icon:()=>R5t});var LEr=T(z());var T5t=["title","titleId"];function lle(){return lle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function M5t(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}var A5t=function(t){var r=t.title,n=t.titleId,o=C5t(t,T5t);return l("svg",lle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M13.5 6c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 0 1-.5-.5c0-.276.229-.5.5-.5h11Zm0 3c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 0 1-.5-.5c0-.276.229-.5.5-.5h11Z"}))},R5t=A5t;var mN={};J(mN,{icon:()=>B5t});var FEr=T(z());var D5t=["title","titleId"];function ule(){return ule=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function N5t(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}var F5t=function(t){var r=t.title,n=t.titleId,o=L5t(t,D5t);return l("svg",ule({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6 5a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm4 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2ZM7 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm3 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm-3 3a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm3 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}))},B5t=F5t;var vN={};J(vN,{icon:()=>$5t});var zEr=T(z());var z5t=["title","titleId"];function cle(){return cle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function H5t(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}var V5t=function(t){var r=t.title,n=t.titleId,o=W5t(t,z5t);return l("svg",cle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2.5c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 0 1-.5-.5v-11Zm3 0c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 0 1-.5-.5v-11Z"}))},$5t=V5t;var gN={};J(gN,{icon:()=>J5t});var HEr=T(z());var Z5t=["title","titleId"];function ple(){return ple=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function U5t(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}var G5t=function(t){var r=t.title,n=t.titleId,o=q5t(t,Z5t);return l("svg",ple({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M1 2a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2Zm4 0h1v12H5V2Zm3 12V2h2v12H8Zm3 0h3V2h-3v12Z"}))},J5t=G5t;var yN={};J(yN,{icon:()=>e3t});var $Er=T(z());var X5t=["title","titleId"];function dle(){return dle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Y5t(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}var Q5t=function(t){var r=t.title,n=t.titleId,o=K5t(t,X5t);return l("svg",dle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1 5V1h4v4H1Zm3-1V2H2v2h2Zm2 1V1h4v4H6Zm3-1V2H7v2h2Zm2 1V1h4v4h-4Zm1-1h2V2h-2v2ZM1 10V6h4v4H1Zm3-1V7H2v2h2Zm2 1V6h4v4H6Zm3-1V7H7v2h2Zm2 1V6h4v4h-4Zm3-1V7h-2v2h2ZM1 15v-4h4v4H1Zm1-1h2v-2H2v2Zm4 1v-4h4v4H6Zm1-1h2v-2H7v2Zm4 1v-4h4v4h-4Zm1-1h2v-2h-2v2Z"}))},e3t=Q5t;var bN={};J(bN,{icon:()=>i3t});var qEr=T(z());var t3t=["title","titleId"];function fle(){return fle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function n3t(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}var o3t=function(t){var r=t.title,n=t.titleId,o=r3t(t,t3t);return l("svg",fle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.402 3.098a3.75 3.75 0 0 0-5.304 5.304l5.558 5.27L8 14l5.892-5.588a3.75 3.75 0 1 0-5.294-5.313L8 3.697l-.598-.599ZM2.796 7.685a2.747 2.747 0 0 1 .01-3.88 2.75 2.75 0 0 1 3.889 0L8 5.111l1.305-1.306a2.75 2.75 0 1 1 3.89 3.89L8 12.62 2.796 7.685Z"}))},i3t=o3t;var wN={};J(wN,{icon:()=>c3t});var GEr=T(z());var a3t=["title","titleId"];function hle(){return hle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function l3t(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}var u3t=function(t){var r=t.title,n=t.titleId,o=s3t(t,a3t);return l("svg",hle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 9a3 3 0 1 1 0 6 3 3 0 0 1 0-6Zm0 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4ZM4 2a2 2 0 1 1 0 4 2 2 0 0 1 0-4Zm0 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm0 5a4 4 0 1 1 0 8 4 4 0 0 1 0-8Zm0 1a3 3 0 1 0 0 6 3 3 0 0 0 0-6Zm8-9a4 4 0 1 1 0 8 4 4 0 0 1 0-8Zm0 1a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z"}))},c3t=u3t;var ON={};J(ON,{icon:()=>m3t});var XEr=T(z());var p3t=["title","titleId"];function mle(){return mle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function f3t(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}var h3t=function(t){var r=t.title,n=t.titleId,o=d3t(t,p3t);return l("svg",mle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m13.6 12.186-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 0 0-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 0 1 0 8.373ZM8 15A6.956 6.956 0 0 1 3.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 0 0 2.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 0 1 8 15Zm-5.601-2.813a6.963 6.963 0 0 1 0-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 0 0 3 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358Zm5.6-.187A4 4 0 1 1 8 4a4 4 0 0 1 0 8ZM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 0 0 8 3a4.979 4.979 0 0 0-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 0 1 8 1Zm0-1a8.001 8.001 0 1 0 .003 16.002A8.001 8.001 0 0 0 8 0Z"}))},m3t=h3t;var xN={};J(xN,{icon:()=>w3t});var YEr=T(z());var v3t=["title","titleId"];function vle(){return vle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function y3t(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}var b3t=function(t){var r=t.title,n=t.titleId,o=g3t(t,v3t);return l("svg",vle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m8.13 1.229 5.5 4.47a1 1 0 0 1 .37.777V14a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V6.476a1 1 0 0 1 .37-.776l5.5-4.471a1 1 0 0 1 1.26 0ZM13 6.476 7.5 2.005 2 6.475V14h11V6.476Z"}))},w3t=b3t;var _N={};J(_N,{icon:()=>I3t});var e9r=T(z());var O3t=["title","titleId"];function gle(){return gle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _3t(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}var S3t=function(t){var r=t.title,n=t.titleId,o=x3t(t,O3t);return l("svg",gle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.5 11.508 7.468 8H6.25V7h2.401l.03 3.508H9.8v1H7.5Zm-.25-6.202a.83.83 0 0 1 .207-.577c.137-.153.334-.229.59-.229.256 0 .454.076.594.23.14.152.209.345.209.576 0 .228-.07.417-.21.568-.14.15-.337.226-.593.226-.256 0-.453-.075-.59-.226a.81.81 0 0 1-.207-.568ZM8 13A5 5 0 1 0 8 3a5 5 0 0 0 0 10Zm0 1A6 6 0 1 1 8 2a6 6 0 0 1 0 12Z"}))},I3t=S3t;var SN={};J(SN,{icon:()=>T3t});var r9r=T(z());var E3t=["title","titleId"];function yle(){return yle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function k3t(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}var j3t=function(t){var r=t.title,n=t.titleId,o=P3t(t,E3t);return l("svg",yle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6 5a2 2 0 1 1-4 0 2 2 0 0 1 4 0zm9-4a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zm-3.448 6.134-3.76 2.769a.5.5 0 0 1-.436.077l-.087-.034-1.713-.87L1 11.8V14h14V9.751l-3.448-2.617zM15 2H1v8.635l4.28-2.558a.5.5 0 0 1 .389-.054l.094.037 1.684.855 3.813-2.807a.5.5 0 0 1 .52-.045l.079.05L15 8.495V2z"}))},T3t=j3t;var IN={};J(IN,{icon:()=>D3t});var o9r=T(z());var C3t=["title","titleId"];function ble(){return ble=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function A3t(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}var R3t=function(t){var r=t.title,n=t.titleId,o=M3t(t,C3t);return l("svg",ble({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m9 10.114 1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558ZM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18ZM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6Z"}))},D3t=R3t;var EN={};J(EN,{icon:()=>z3t});var a9r=T(z());var L3t=["title","titleId"];function wle(){return wle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function F3t(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}var B3t=function(t){var r=t.title,n=t.titleId,o=N3t(t,L3t);return l("svg",wle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13 2H3v11h11v1H2V1h12v12h-1V2ZM6 5h5.999V4H6v1ZM4 5V4h1v1H4Zm2 3V7h6v1H6ZM4 8V7h1v1H4Zm2 3v-1h6v1H6Zm-2 0v-1h1v1H4Z"}))},z3t=B3t;var PN={};J(PN,{icon:()=>Z3t});var l9r=T(z());var W3t=["title","titleId"];function Ole(){return Ole=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function V3t(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}var $3t=function(t){var r=t.title,n=t.titleId,o=H3t(t,W3t);return l("svg",Ole({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 13V2h11V1H2v13h2v-1H3Z"}),l("path",{d:"M11.999 5H6V4h5.999v1ZM4 4v1h1V4H4Zm2 3v1h4V7H6ZM4 7v1h1V7H4Zm2 3v1h2v-1H6Zm-2 0v1h1v-1H4Zm10-7h-1v1h1V3Zm-1 2h1v1h-1V5Zm1 2h-1v1h1V7Zm-1 2h1v1h-1V9Zm1 2h-1v1h1v-1Zm-1 2h1v1h-1v-1Zm-7 0H5v1h1v-1Zm1 0h1v1H7v-1Zm3 0H9v1h1v-1Zm1 0h1v1h-1v-1Z"}))},Z3t=$3t;var kN={};J(kN,{icon:()=>X3t});var c9r=T(z());var q3t=["title","titleId"];function xle(){return xle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function G3t(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}var J3t=function(t){var r=t.title,n=t.titleId,o=U3t(t,q3t);return l("svg",xle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2ZM5 5h5.999V4H5v1ZM3 5V4h1v1H3Zm2 3V7h3v1H5ZM3 8V7h1v1H3Zm2 3v-1h2v1H5Zm5.5-1.207L9.086 8.379l-.707.707L9.793 10.5l-1.414 1.414.707.707 1.414-1.414 1.414 1.414.707-.707-1.414-1.414 1.414-1.414-.707-.707L10.5 9.793ZM3 11v-1h1v1H3Zm7.5-5a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9Z"}))},X3t=J3t;var jN={};J(jN,{icon:()=>twt});var d9r=T(z());var K3t=["title","titleId"];function _le(){return _le=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Q3t(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}var ewt=function(t){var r=t.title,n=t.titleId,o=Y3t(t,K3t);return l("svg",_le({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 2H2v11h4v1H1V1h12v5h-1V2ZM5 5h5.999V4H5v1ZM3 5V4h1v1H3Zm2 3V7h6v1H5ZM3 8V7h1v1H3Zm2 3v-1h3v1H5Zm-2 0v-1h1v1H3Zm4.502 1.41L12.913 7 15 9.087l-5.41 5.41L7 15l.502-2.59Z"}))},twt=ewt;var TN={};J(TN,{icon:()=>awt});var h9r=T(z());var rwt=["title","titleId"];function Sle(){return Sle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function owt(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}var iwt=function(t){var r=t.title,n=t.titleId,o=nwt(t,rwt);return l("svg",Sle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M14.516 9H10.5a.5.5 0 0 1 0-1h4.016L13.11 5.948c-.171-.252-.137-.62.079-.821.217-.2.531-.159.703.092l2 2.916a.648.648 0 0 1 .108.397.643.643 0 0 1-.108.332l-2 2.918A.478.478 0 0 1 13.5 12a.457.457 0 0 1-.312-.127c-.216-.202-.25-.57-.079-.82L14.516 9ZM3 15H1a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h7.8c.274 0 .537.113.726.312l2.2 2.428c.176.186.274.433.274.689V7h-1V5H8.5a.5.5 0 0 1-.5-.5V2H3v12h8v-4h1v4a1 1 0 0 1-1 1H3Zm-1-1V2H1v12h1Z"}))},awt=iwt;var CN={};J(CN,{icon:()=>pwt});var v9r=T(z());var swt=["title","titleId"];function Ile(){return Ile=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uwt(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}var cwt=function(t){var r=t.title,n=t.titleId,o=lwt(t,swt);return l("svg",Ile({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 8H4.915a1.5 1.5 0 1 1 0-1H8V2.5A1.5 1.5 0 0 1 9.5 1h2.585a1.5 1.5 0 1 1 0 1H9.5a.5.5 0 0 0-.5.5v10a.5.5 0 0 0 .5.5h2.585a1.5 1.5 0 1 1 0 1H9.5A1.5 1.5 0 0 1 8 12.5V8ZM3.5 3a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Zm0 12a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Zm10-6a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Z"}))},pwt=cwt;var MN={};J(MN,{icon:()=>vwt});var y9r=T(z());var dwt=["title","titleId"];function Ele(){return Ele=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hwt(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}var mwt=function(t){var r=t.title,n=t.titleId,o=fwt(t,dwt);return l("svg",Ele({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2ZM5 5h5.999V4H5v1ZM3 5V4h1v1H3Zm2 3V7h3v1H5ZM3 8V7h1v1H3Zm2 3v-1h2v1H5Zm5-1H8v1h2v2h1v-2h2v-1h-2V8h-1v2Zm-7 1v-1h1v1H3Zm7.5-5a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9Z"}))},vwt=mwt;var AN={};J(AN,{icon:()=>Owt});var w9r=T(z());var gwt=["title","titleId"];function Ple(){return Ple=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bwt(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}var wwt=function(t){var r=t.title,n=t.titleId,o=ywt(t,gwt);return l("svg",Ple({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 2H2v11h6v1H1V1h12v6.839l-1-.707V2z"}),l("path",{d:"M8 11v-1H5v1h3zm0-3.055c0-.342.082-.664.23-.945H5v1h3v-.055zM5 5h5.999V4H5v1zM3 4v1h1V4H3zm0 3v1h1V7H3zm0 3v1h1v-1H3zm11.607.2-4.32-3.055C9.727 6.75 9 7.204 9 7.945v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598z"}))},Owt=wwt;var RN={};J(RN,{icon:()=>Ewt});var x9r=T(z());var xwt=["title","titleId"];function kle(){return kle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Swt(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}var Iwt=function(t){var r=t.title,n=t.titleId,o=_wt(t,xwt);return l("svg",kle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 5h5.999V4H5v1ZM3 5h1V4H3v1Zm0 3h1V7H3v1Zm6.022-1-.15.333-.737-.078-.467-.05-.33.342A5.13 5.13 0 0 0 6.948 8H5V7h4.022Zm-3.005 3L6 10.056l.306.411.399.533H5v-1h1.017ZM3 11h1v-1H3v1Z"}),l("path",{d:"m13 7.05-.162-.359-.2-.447-.47-.11A5.019 5.019 0 0 0 12 6.098V2H2v11h4.36c.157.354.355.69.59 1H1V1h12v6.05Z"}),l("path",{d:"M11.004 7c.322 0 .646.036.966.109l.595 1.293 1.465-.152c.457.462.786 1.016.969 1.61l-.87 1.14.871 1.141a3.94 3.94 0 0 1-.387.859 4.058 4.058 0 0 1-.583.75l-1.465-.152-.594 1.292a4.37 4.37 0 0 1-1.941.001l-.594-1.293-1.466.152a3.954 3.954 0 0 1-.969-1.61l.87-1.14L7 9.86a3.947 3.947 0 0 1 .97-1.61l1.466.152.593-1.292a4.37 4.37 0 0 1 .975-.11ZM11 12a1 1 0 1 0 .002-1.998A1 1 0 0 0 11 12Z"}))},Ewt=Iwt;var DN={};J(DN,{icon:()=>Cwt});var S9r=T(z());var Pwt=["title","titleId"];function jle(){return jle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jwt(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}var Twt=function(t){var r=t.title,n=t.titleId,o=kwt(t,Pwt);return l("svg",jle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.37 9.457A1.994 1.994 0 0 1 3.993 10a2 2 0 1 1 1.403-3.433l.601.679 1.336-1.508-.462-.522a4 4 0 1 0-.041 5.613l.021-.022 3.777-4.265.002.001a2 2 0 1 1-.024 2.89l-.601-.679-1.336 1.508.462.522a4 4 0 1 0 0-5.569l-3.74 4.223a1.991 1.991 0 0 1-.02.02Z"}))},Cwt=Twt;var LN={};J(LN,{icon:()=>Lwt});var E9r=T(z());var Mwt=["title","titleId"];function Tle(){return Tle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Rwt(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}var Dwt=function(t){var r=t.title,n=t.titleId,o=Awt(t,Mwt);return l("svg",Tle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10 13.999v-2.99h1V15H0V1h11v3.999h-1V2.001H1v11.998z"}),l("path",{d:"M4.5 10V9H11v1zM13 9.5l3-3-3-3z"}),l("path",{d:"M5.5 6.5v6l-3-3zM7 7V6h6.5v1z"}))},Lwt=Dwt;var NN={};J(NN,{icon:()=>Wwt});var k9r=T(z());var Nwt=["title","titleId"];function Cle(){return Cle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Bwt(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}var zwt=function(t){var r=t.title,n=t.titleId,o=Fwt(t,Nwt);return l("svg",Cle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M15.363 14.658a.5.5 0 1 1-.713.7l-2.97-3.023a.5.5 0 0 1 .001-.7A3.9 3.9 0 1 0 8.9 12.8a.5.5 0 1 1 0 .999 4.9 4.9 0 1 1 3.821-1.833l2.642 2.691ZM3.094 13a.5.5 0 1 1 0 1H2.5A2.5 2.5 0 0 1 0 11.5v-9A2.5 2.5 0 0 1 2.5 0h9A2.5 2.5 0 0 1 14 2.5v.599a.5.5 0 1 1-1 0V2.5A1.5 1.5 0 0 0 11.5 1h-9A1.5 1.5 0 0 0 1 2.5v9A1.5 1.5 0 0 0 2.5 13h.594ZM2.5 3a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm2 0a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm2 0a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm-4 2a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm2 0a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm-2 1a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm0 3a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm6-6a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm2 0a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm-8 8a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Z"}))},Wwt=zwt;var FN={};J(FN,{icon:()=>qwt});var T9r=T(z());var Hwt=["title","titleId"];function Mle(){return Mle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $wt(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}var Zwt=function(t){var r=t.title,n=t.titleId,o=Vwt(t,Hwt);return l("svg",Mle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 13.25a5.25 5.25 0 1 0 0-10.5 5.25 5.25 0 0 0 0 10.5ZM8 14A6 6 0 1 1 8 2a6 6 0 0 1 0 12Z"}),l("path",{d:"M8 2a6 6 0 1 0 0 12V2Z"}))},qwt=Zwt;var BN={};J(BN,{icon:()=>Kwt});var M9r=T(z());var Uwt=["title","titleId"];function Ale(){return Ale=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Jwt(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}var Xwt=function(t){var r=t.title,n=t.titleId,o=Gwt(t,Uwt);return l("svg",Ale({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8Zm-2 3H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5ZM6 5H5v6h1V5Zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984Z"}))},Kwt=Xwt;var zN={};J(zN,{icon:()=>rOt});var R9r=T(z());var Ywt=["title","titleId"];function Rle(){return Rle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function eOt(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}var tOt=function(t){var r=t.title,n=t.titleId,o=Qwt(t,Ywt),i=fn("issue");return l("svg",Rle({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{clipPath:"url(#".concat(i("a"),")"),fill:"#343741"},l("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8 .5c4.136 0 7.5 3.364 7.5 7.5s-3.364 7.5-7.5 7.5S.5 12.136.5 8 3.864.5 8 .5zm0 .882a6.618 6.618 0 100 13.236A6.618 6.618 0 008 1.382z"}),l("path",{d:"M9 8a1 1 0 11-2 0 1 1 0 012 0z"})),l("clipPath",{id:i("a")},l("path",{d:"M0 0h16v16H0z"})))},rOt=tOt;var WN={};J(WN,{icon:()=>sOt});var N9r=T(z());var nOt=["title","titleId"];function Dle(){return Dle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function iOt(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}var aOt=function(t){var r=t.title,n=t.titleId,o=oOt(t,nOt);return l("svg",Dle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M14 5a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm-1 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"}),l("path",{d:"M6 6a5 5 0 1 1 3.086 4.62l-1.232 1.234A.5.5 0 0 1 7.5 12H6v1.5a.5.5 0 0 1-.5.5H4v1.5a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 1 .175-.38l5.932-5.085A5.019 5.019 0 0 1 6 6Zm5-4a4 4 0 0 0-3.853 5.08.5.5 0 0 1-.156.515L1 12.73V15h2v-1.5a.5.5 0 0 1 .5-.5H5v-1.5a.5.5 0 0 1 .5-.5h1.793l.877-.877a5.033 5.033 0 0 1-.503-.396.5.5 0 1 1 .666-.745A3.983 3.983 0 0 0 11 10h.005A4 4 0 0 0 11 2Z"}))},sOt=aOt;var HN={};J(HN,{icon:()=>dOt});var B9r=T(z());var lOt=["title","titleId"];function Lle(){return Lle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cOt(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}var pOt=function(t){var r=t.title,n=t.titleId,o=uOt(t,lOt);return l("svg",Lle({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M0 3h16v11H0V3Zm15 10V4H1v9h14ZM2 5h2v1H2V5Zm2 7v-1H2v1h2Zm10-1v1h-2v-1h2Zm-3 1v-1H5v1h6ZM5 5h1v1H5V5ZM3 7H2v1h1V7Zm3 0h1v1H6V7ZM3 9H2v1h1V9Zm3 0h1v1H6V9Zm2-4H7v1h1V5ZM4 7h1v1H4V7Zm5 0H8v1h1V7Zm1 0h1v1h-1V7ZM5 9H4v1h1V9Zm3 0h1v1H8V9Zm3 0h-1v1h1V9ZM9 5h1v1H9V5Zm3 0h-1v1h1V5Zm1 0h1v1h-1V5Zm1 2h-2v3h2V7Z",clipRule:"evenodd"}))},dOt=pOt;var VN={};J(VN,{icon:()=>gOt});var W9r=T(z());var fOt=["title","titleId"];function Nle(){return Nle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mOt(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}var vOt=function(t){var r=t.title,n=t.titleId,o=hOt(t,fOt);return l("svg",Nle({xmlns:"http://www.w3.org/2000/svg",width:16,height:10,viewBox:"0 0 16 10","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 9a5 5 0 1 1 0-8 5 5 0 1 1 0 8Zm.75-.692a4 4 0 1 0 0-6.615A4.981 4.981 0 0 1 10 5a4.981 4.981 0 0 1-1.25 3.308ZM4.133 8V5.559h2.496v-.625H4.133V2.996h2.719v-.633H3.43V8h.703Z"}))},gOt=vOt;var $N={};J($N,{icon:()=>xOt});var V9r=T(z());var yOt=["title","titleId"];function Fle(){return Fle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wOt(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}var OOt=function(t){var r=t.title,n=t.titleId,o=bOt(t,yOt);return l("svg",Fle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 7H3v2h4v2l3-3-3-3v2ZM6 6V5a1 1 0 0 1 1.707-.707l3 3a1 1 0 0 1 0 1.414l-3 3A1 1 0 0 1 6 11v-1H3a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h3Zm7.5-3a.5.5 0 0 1 .5.5v9a.5.5 0 1 1-1 0v-9a.5.5 0 0 1 .5-.5Z"}))},xOt=OOt;var ZN={};J(ZN,{icon:()=>POt});var Z9r=T(z());var _Ot=["title","titleId"];function Ble(){return Ble=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function IOt(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}var EOt=function(t){var r=t.title,n=t.titleId,o=SOt(t,_Ot);return l("svg",Ble({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m11.192 10.145 2.298-1.792c.259-.196.259-.509 0-.706l-2.298-1.792c-.256-.196-.256-.513 0-.708a.81.81 0 0 1 .93 0l2.3 1.791c.772.59.77 1.537 0 2.124l-2.3 1.791a.81.81 0 0 1-.93 0c-.256-.195-.256-.512 0-.708Zm-6.384-4.29L2.51 7.647c-.259.196-.259.509 0 .706l2.298 1.792c.256.196.256.513 0 .708a.81.81 0 0 1-.93 0l-2.3-1.791c-.772-.59-.77-1.537 0-2.124l2.3-1.791a.81.81 0 0 1 .93 0c.256.195.256.512 0 .708ZM6.5 6h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1Zm0 3h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1Z"}))},POt=EOt;var qN={};J(qN,{icon:()=>MOt});var U9r=T(z());var kOt=["title","titleId"];function zle(){return zle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function TOt(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}var COt=function(t){var r=t.title,n=t.titleId,o=jOt(t,kOt);return l("svg",zle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm0 1A5 5 0 1 1 5 3a5 5 0 0 1 0 10Zm6-1a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm0 1a5 5 0 1 1 0-10 5 5 0 0 1 0 10Z"}))},MOt=COt;var UN={};J(UN,{icon:()=>NOt});var J9r=T(z());var AOt=["title","titleId"];function Wle(){return Wle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function DOt(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}var LOt=function(t){var r=t.title,n=t.titleId,o=ROt(t,AOt);return l("svg",Wle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 4a5 5 0 1 1 0 8 5 5 0 1 1 0-8Zm-.75.692a4 4 0 1 0 0 6.615A4.981 4.981 0 0 1 6 8c0-1.268.472-2.426 1.25-3.308ZM11.348 11l2.078-5.637h-.739l-1.656 4.727h-.062L9.313 5.363h-.739L10.652 11h.696Z"}))},NOt=LOt;var GN={};J(GN,{icon:()=>HOt});var K9r=T(z());var FOt=["title","titleId"];function Hle(){return Hle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zOt(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}var WOt=function(t){var r=t.title,n=t.titleId,o=BOt(t,FOt);return l("svg",Hle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M14 11.42V4.58L8 1.152 2 4.58v6.84l6 3.428 6-3.428zM8 16l7-4V4L8 0 1 4v8l7 4zM8 4.607l3 1.714V9.68l-3 1.714-3-1.714V6.32l3-1.714zm4 1.134v4.518l-4 2.286-4-2.286V5.741l4-2.286 4 2.286z",clipRule:"evenodd"}))},HOt=WOt;var JN={};J(JN,{icon:()=>UOt});var Q9r=T(z());var VOt=["title","titleId"];function Vle(){return Vle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ZOt(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}var qOt=function(t){var r=t.title,n=t.titleId,o=$Ot(t,VOt);return l("svg",Vle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M14 5.151v6.269l-5.5 3.142V8.29L14 5.151zm-.508-.861L8 1.152 2.508 4.29 8 7.424l5.492-3.134zM2 5.151l5.5 3.14v6.272L2 11.42V5.15zM15 12l-7 4-7-4V4l7-4 7 4v8z",clipRule:"evenodd"}))},UOt=qOt;var XN={};J(XN,{icon:()=>YOt});var tPr=T(z());var GOt=["title","titleId"];function $le(){return $le=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function XOt(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}var KOt=function(t){var r=t.title,n=t.titleId,o=JOt(t,GOt);return l("svg",$le({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M10 4a2 2 0 1 0 0 4 2 2 0 0 0 0-4ZM9 6a1 1 0 1 1 2 0 1 1 0 0 1-2 0Z",clipRule:"evenodd"}),l("path",{fillRule:"evenodd",d:"M6.679 12.967c.353-.136.697-.3 1.033-.475l1.36 2.265a.5.5 0 0 0 .828.043l3-4a.5.5 0 0 0-.046-.654l-.886-.886C13.604 7.456 15 4.913 15 1.5a.5.5 0 0 0-.5-.5c-3.413 0-5.956 1.395-7.76 3.033l-.886-.887A.5.5 0 0 0 5.2 3.1l-4 3a.5.5 0 0 0 .043.829l2.264 1.358a9.59 9.59 0 0 0-.475 1.036v.001a.5.5 0 0 0 .114.53l3 3c.139.138.35.182.533.113ZM4.09 9.384l2.525 2.525a14.616 14.616 0 0 0 3.555-2.285c1.841-1.612 3.657-4.076 3.818-7.612-3.537.16-6.001 1.976-7.613 3.817A14.617 14.617 0 0 0 4.09 9.384Zm-.096-1.97a15.616 15.616 0 0 1 2.03-2.682l-.572-.572-3.058 2.294 1.6.96Zm5.551 6.191-.96-1.6a15.617 15.617 0 0 0 2.682-2.03l.572.572-2.294 3.058Z",clipRule:"evenodd"}),l("path",{d:"M3.854 12.146a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708l2-2a.5.5 0 0 1 .708 0Zm2 1.708a.5.5 0 0 0-.708-.708l-1 1a.5.5 0 0 0 .708.708l1-1Zm-3-3.708a.5.5 0 0 1 0 .708l-1 1a.5.5 0 0 1-.708-.708l1-1a.5.5 0 0 1 .708 0Z"}))},YOt=KOt;var KN={};J(KN,{icon:()=>n6t});var nPr=T(z());var QOt=["title","titleId"];function Zle(){return Zle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function t6t(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}var r6t=function(t){var r=t.title,n=t.titleId,o=e6t(t,QOt);return l("svg",Zle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.276 1.053a.5.5 0 0 1 .448 0l6 3a.5.5 0 0 1 0 .894l-6 3a.5.5 0 0 1-.448 0l-6-3a.5.5 0 0 1 0-.894l6-3zM2.618 4.5 7.5 6.941 12.382 4.5 7.5 2.059 2.618 4.5z"}),l("path",{d:"M1.053 7.276a.5.5 0 0 1 .67-.223L7.5 9.94l5.776-2.888a.5.5 0 1 1 .448.894l-6 3a.5.5 0 0 1-.448 0l-6-3a.5.5 0 0 1-.223-.67z"}),l("path",{d:"M1.724 10.053a.5.5 0 1 0-.448.894l6 3a.5.5 0 0 0 .448 0l6-3a.5.5 0 1 0-.448-.894L7.5 12.94l-5.776-2.888z"}))},n6t=r6t;var YN={};J(YN,{icon:()=>l6t});var iPr=T(z());var o6t=["title","titleId"];function qle(){return qle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function a6t(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}var s6t=function(t){var r=t.title,n=t.titleId,o=i6t(t,o6t);return l("svg",qle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m5 3 3 9H7L6 9H3l-1 3H1l3-9h1zm-.5 1.5L5.667 8H3.333L4.5 4.5zm7.99 1.647C12.16 6.005 11.76 6 11.5 6c-.359 0-1.022.175-1.632.838l-.736-.676C9.929 5.294 10.859 5 11.5 5h.016c.25 0 .836 0 1.369.228.281.12.568.313.782.617.216.307.333.693.333 1.155v5h-1v-.354a2.101 2.101 0 0 1-.064.038c-.554.317-1.166.316-1.42.316h-.032c-.25 0-.836 0-1.368-.228a1.81 1.81 0 0 1-.783-.617C9.117 10.848 9 10.462 9 10c0-.462.117-.848.333-1.155.214-.304.5-.496.783-.617C10.648 8 11.233 8 11.484 8h.016c.258 0 .69-.003 1.05-.106a.889.889 0 0 0 .364-.179c.053-.05.086-.108.086-.215V7c0-.288-.07-.465-.151-.58a.814.814 0 0 0-.358-.273zM13 8.8c-.06.022-.118.04-.175.057C12.32 9 11.762 9 11.513 9H11.5c-.259 0-.66.005-.99.147a.814.814 0 0 0-.359.274c-.08.114-.151.291-.151.579s.07.465.151.58a.813.813 0 0 0 .358.273c.331.142.732.147.991.147.257 0 .63-.008.94-.184.255-.146.56-.463.56-1.316v-.701z"}))},l6t=s6t;var QN={};J(QN,{icon:()=>f6t});var sPr=T(z());var u6t=["title","titleId"];function Ule(){return Ule=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function p6t(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}var d6t=function(t){var r=t.title,n=t.titleId,o=c6t(t,u6t);return l("svg",Ule({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12.707 4.707a1 1 0 1 1-1.414-1.414l2-2a1 1 0 1 1 1.414 1.414l-2 2zm-6.414 5a1 1 0 0 0 1.414 0l2-2a1 1 0 1 0-1.414-1.414l-2 2a1 1 0 0 0 0 1.414zm-5 5a1 1 0 0 0 1.414 0l2-2a1 1 0 1 0-1.414-1.414l-2 2a1 1 0 0 0 0 1.414z"}))},f6t=d6t;var eF={};J(eF,{icon:()=>y6t});var uPr=T(z());var h6t=["title","titleId"];function Gle(){return Gle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function v6t(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}var g6t=function(t){var r=t.title,n=t.titleId,o=m6t(t,h6t);return l("svg",Gle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13.5 3a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zM11 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zM5.5 11a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm-4 4a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z"}))},y6t=g6t;var tF={};J(tF,{icon:()=>_6t});var pPr=T(z());var b6t=["title","titleId"];function Jle(){return Jle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function O6t(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}var x6t=function(t){var r=t.title,n=t.titleId,o=w6t(t,b6t);return l("svg",Jle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.293 14.707a1 1 0 0 0 1.414 0l12-12a1 1 0 1 0-1.414-1.414l-12 12a1 1 0 0 0 0 1.414z"}))},_6t=x6t;var rF={};J(rF,{icon:()=>k6t});var fPr=T(z());var S6t=["title","titleId"];function Xle(){return Xle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function E6t(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}var P6t=function(t){var r=t.title,n=t.titleId,o=I6t(t,S6t);return l("svg",Xle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.66 3.803a.5.5 0 1 1-.706-.707L9.268.78c1.187-1.187 3.242-1 4.596.354s1.54 3.409.354 4.596l-3.536 3.536c-1.187 1.187-3.242 1-4.596-.354a.5.5 0 1 1 .707-.707c.99.99 2.417 1.119 3.182.354l3.536-3.536c.765-.765.635-2.193-.354-3.182-.99-.99-2.417-1.119-3.182-.354L7.661 3.803Zm-.32 7.392a.5.5 0 1 1 .707.707l-2.315 2.314c-1.187 1.188-3.242 1-4.596-.353-1.354-1.354-1.54-3.41-.353-4.596L4.318 5.73c1.187-1.187 3.242-1 4.596.354a.5.5 0 0 1-.707.707c-.989-.99-2.416-1.12-3.182-.354L1.49 9.974c-.766.765-.636 2.193.353 3.182.99.989 2.417 1.119 3.182.353l2.315-2.314Z"}))},k6t=P6t;var nF={};J(nF,{icon:()=>A6t});var mPr=T(z());var j6t=["title","titleId"];function Kle(){return Kle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function C6t(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}var M6t=function(t){var r=t.title,n=t.titleId,o=T6t(t,j6t);return l("svg",Kle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 4V3h2v1H2Zm4 0V3h8v1H6Zm0 3V6h8v1H6Zm0 3V9h8v1H6ZM2 7V6h2v1H2Zm0 3V9h2v1H2Zm4 3v-1h8v1H6Zm-4 0v-1h2v1H2Z"}))},A6t=M6t;var oF={};J(oF,{icon:()=>F6t});var gPr=T(z());var R6t=["title","titleId"];function Yle(){return Yle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function L6t(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}var N6t=function(t){var r=t.title,n=t.titleId,o=D6t(t,R6t);return l("svg",Yle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11 11H9v1h2v2h1v-2h2v-1h-2V9h-1v2ZM7.758 9a4.5 4.5 0 1 1-.502 4H6v-1h1.027a4.548 4.548 0 0 1 .23-2H6V9h1.758ZM2 4V3h2v1H2Zm4 0V3h8v1H6Zm0 3V6h8v1H6ZM2 7V6h2v1H2Zm0 3V9h2v1H2Zm0 3v-1h2v1H2Z"}))},F6t=N6t;var iF={};J(iF,{icon:()=>V6t});var bPr=T(z());var B6t=["title","titleId"];function Qle(){return Qle=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function W6t(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}var H6t=function(t){var r=t.title,n=t.titleId,o=z6t(t,B6t);return l("svg",Qle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 5v-.8C4 1.88 5.79 0 8 0s4 1.88 4 4.2V5h1.143c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H2.857C2.384 16 2 15.552 2 15V6c0-.552.384-1 .857-1H4ZM3 15h10V6H3v9Zm5.998-3.706L9.5 12.5h-3l.502-1.206A1.644 1.644 0 0 1 6.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194ZM11 4.36C11 2.504 9.657 1 8 1S5 2.504 5 4.36V5h6v-.64Z"}))},V6t=H6t;var aF={};J(aF,{icon:()=>G6t});var OPr=T(z());var $6t=["title","titleId"];function eue(){return eue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function q6t(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}var U6t=function(t){var r=t.title,n=t.titleId,o=Z6t(t,$6t);return l("svg",eue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.143 5c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H.857C.384 16 0 15.552 0 15V6c0-.552.384-1 .857-1H8v-.8C8 1.88 9.79 0 12 0s4 1.88 4 4.2V5h-1v-.64C15 2.504 13.657 1 12 1S9 2.504 9 4.36V5h2.143ZM1 15h10V6H1v9Zm5.998-3.706L7.5 12.5h-3l.502-1.206A1.644 1.644 0 0 1 4.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194Z"}))},G6t=U6t;var sF={};J(sF,{icon:()=>Q6t});var _Pr=T(z());var J6t=["title","titleId"];function tue(){return tue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function K6t(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}var Y6t=function(t){var r=t.title,n=t.titleId,o=X6t(t,J6t);return l("svg",tue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 1h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Zm.5 1h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 1 0-1Z"}),l("path",{d:"M9.5 3a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 3a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Zm0 3h-4a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1Zm-8 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Zm2 0a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Z"}),l("path",{d:"M4.5 6h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Zm2 0a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm6 6h-4a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1Zm-8 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Zm2 0a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Z"}),l("path",{d:"M4.5 12h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Zm2 0a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3-9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 3a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 3a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 3a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 3a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 3a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Zm-3 6a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Z"}),l("path",{d:"M9.5 9a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm3 0h-1a.5.5 0 0 0 0 1h1a.5.5 0 0 0 0-1Zm-5 0h-4a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1Z"}))},Q6t=Y6t;var lF={};J(lF,{icon:()=>o4t});var IPr=T(z());var e4t=["title","titleId"];function rue(){return rue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function r4t(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}var n4t=function(t){var r=t.title,n=t.titleId,o=t4t(t,e4t);return l("svg",rue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.5 13a.5.5 0 0 1-.5-.5V11H7v1.5a.5.5 0 0 1-1 0V9H4v3.5a.5.5 0 0 1-1 0v-4a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5V10h2V1.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5h-3Zm-8 2a.5.5 0 0 1 0-1h13a.5.5 0 0 1 0 1h-13Z"}))},o4t=n4t;var uF={};J(uF,{icon:()=>u4t});var PPr=T(z());var i4t=["title","titleId"];function nue(){return nue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function s4t(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}var l4t=function(t){var r=t.title,n=t.titleId,o=a4t(t,i4t);return l("svg",nue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#C4373A",d:"M0 31.806h32V.776H0z"}),l("path",{fill:"#FFF",d:"m19.448 12.508-8.986 3.86 8.986 3.883v-7.743Zm-11.304 4.73-2.094-.863 2.094-.931 17.749-7.741v2.062l-4.654 1.99v9.25l4.654 2.01v1.968L8.143 17.24Z"})))},u4t=l4t;var cF={};J(cF,{icon:()=>h4t});var jPr=T(z());var c4t=["title","titleId"];function oue(){return oue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function d4t(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}var f4t=function(t){var r=t.title,n=t.titleId,o=p4t(t,c4t),i=fn("logo_apache");return l("svg",oue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("defs",null,l("linearGradient",{id:i("a"),x1:"21.902%",x2:"141.879%",y1:"63.905%",y2:"20.213%"},l("stop",{offset:"0%",stopColor:"#F69923"}),l("stop",{offset:"31.23%",stopColor:"#F79A23"}),l("stop",{offset:"83.83%",stopColor:"#E97826"})),l("linearGradient",{id:i("b"),x1:"-217.651%",x2:"74.743%",y1:"177.127%",y2:"36.665%"},l("stop",{offset:"32.33%",stopColor:"#9E2064"}),l("stop",{offset:"63.02%",stopColor:"#C92037"}),l("stop",{offset:"75.14%",stopColor:"#CD2335"}),l("stop",{offset:"100%",stopColor:"#E97826"})),l("linearGradient",{id:i("c"),x1:"-80.044%",x2:"146.24%",y1:"73.574%",y2:"31.539%"},l("stop",{offset:"32.33%",stopColor:"#9E2064"}),l("stop",{offset:"63.02%",stopColor:"#C92037"}),l("stop",{offset:"75.14%",stopColor:"#CD2335"}),l("stop",{offset:"100%",stopColor:"#E97826"})),l("linearGradient",{id:i("d"),x1:"-18.316%",x2:"165.002%",y1:"52.497%",y2:"41.656%"},l("stop",{offset:"0%",stopColor:"#282662"}),l("stop",{offset:"9.548%",stopColor:"#662E8D"}),l("stop",{offset:"78.82%",stopColor:"#9F2064"}),l("stop",{offset:"94.87%",stopColor:"#CD2032"})),l("linearGradient",{id:i("e"),x1:"-109.701%",x2:"64.617%",y1:"463.715%",y2:"17.19%"},l("stop",{offset:"32.33%",stopColor:"#9E2064"}),l("stop",{offset:"63.02%",stopColor:"#C92037"}),l("stop",{offset:"75.14%",stopColor:"#CD2335"}),l("stop",{offset:"100%",stopColor:"#E97826"})),l("linearGradient",{id:i("f"),x1:"-34.88%",x2:"110.599%",y1:"130.522%",y2:"-9.118%"},l("stop",{offset:"32.33%",stopColor:"#9E2064"}),l("stop",{offset:"63.02%",stopColor:"#C92037"}),l("stop",{offset:"75.14%",stopColor:"#CD2335"}),l("stop",{offset:"100%",stopColor:"#E97826"})),l("linearGradient",{id:i("g"),x1:"-13.673%",x2:"117.858%",y1:"192.564%",y2:"-136.906%"},l("stop",{offset:"0%",stopColor:"#282662"}),l("stop",{offset:"9.548%",stopColor:"#662E8D"}),l("stop",{offset:"78.82%",stopColor:"#9F2064"}),l("stop",{offset:"94.87%",stopColor:"#CD2032"}))),l("g",{fill:"none"},l("path",{fill:"url(#".concat(i("a"),")"),d:"M13.628.18c-.498.293-1.332 1.134-2.328 2.348v.074l.871 1.613.044.03c.641-.914 1.289-1.742 1.948-2.446.05-.056.075-.08.075-.08-.025.024-.05.055-.075.08-.211.237-.859.984-1.83 2.478l.112.025s2.273-.224 3.368-.41l.062-.057c.35-1.955-.342-2.851-.342-2.851S14.661-.423 13.628.18Z",transform:"translate(8)"}),l("path",{fill:"url(#".concat(i("b"),")"),d:"M9.525 8.697c.28-.516.56-1.027.84-1.519.293-.51.592-1.008.897-1.488a.397.397 0 0 0 .05-.087c.299-.473.598-.921.903-1.357L11.3 2.52c-.069.081-.137.168-.206.256-.261.33-.535.678-.815 1.052a51.783 51.783 0 0 0-1.893 2.708c-.261.405-.53.816-.79 1.245l-.032.05V7.9l1.14 2.26.05.019c.255-.498.51-.996.771-1.482Z",transform:"translate(8)"}),l("path",{fill:"url(#".concat(i("c"),")"),d:"M4.563 19.76c.206-.535.424-1.077.642-1.625.211-.523.423-1.052.647-1.58.218-.53.448-1.06.679-1.595.236-.541.473-1.083.716-1.618.242-.53.485-1.059.734-1.582.087-.186.18-.38.274-.566.156-.324.318-.648.473-.965.007-.019.02-.031.025-.05L7.564 7.832l-.056.093c-.274.455-.554.915-.822 1.389a54.535 54.535 0 0 0-1.45 2.714c-.044.087-.081.168-.125.255a32.15 32.15 0 0 0-.703 1.544c-.237.56-.448 1.096-.635 1.606-.125.337-.23.654-.336.965-.081.262-.162.53-.237.791-.18.623-.33 1.239-.454 1.862l.018.074 1.14 2.266.037.02c.155-.424.317-.848.485-1.283.044-.125.094-.243.137-.368Z",transform:"translate(8)"}),l("path",{fill:"url(#".concat(i("d"),")"),d:"M2.733 19.132a18.84 18.84 0 0 0-.311 2.253c0 .025-.006.05-.006.081-.374-.598-1.37-1.177-1.37-1.177.716 1.034 1.258 2.061 1.338 3.07-.38.08-.902-.038-1.512-.255.628.578 1.102.74 1.288.784-.579.037-1.183.436-1.793.89.89-.36 1.607-.504 2.123-.392-.815 2.31-1.63 4.862-2.453 7.564.25-.075.399-.243.486-.473.143-.492 1.114-3.704 2.627-7.931.044-.119.087-.243.13-.362.013-.03.026-.068.038-.1.162-.441.324-.896.498-1.356.038-.106.081-.212.119-.318v-.006l-1.19-2.353c0 .03-.006.056-.012.08Z",transform:"translate(8)"}),l("path",{fill:"url(#".concat(i("e"),")"),d:"M12.333 4.283c-.268.411-.56.878-.878 1.407-.018.025-.03.056-.05.081a62.538 62.538 0 0 0-1.687 3.05c-.249.48-.504.984-.765 1.526l.056.025 2.895-.311.068-.05c.878-.405 1.27-.772 1.65-1.301.1-.143.205-.3.305-.455.311-.485.616-1.015.884-1.544.261-.51.492-1.02.672-1.475a6.56 6.56 0 0 0 .398-1.395c-1.17.206-2.608.399-3.548.442Z",transform:"translate(8)"}),l("path",{fill:"url(#".concat(i("f"),")"),d:"M8.84 10.59c-.1.212-.205.43-.31.647-.113.237-.231.486-.343.735-.056.124-.119.255-.175.38-.18.386-.354.784-.541 1.195a107.035 107.035 0 0 0-1.357 3.194c-.218.529-.436 1.077-.654 1.637-.2.504-.399 1.015-.598 1.55-.012.025-.018.05-.03.075-.2.53-.394 1.068-.6 1.622-.006.012-.017.045-.023.057l.043.01.866-.094.048-.02c-.018-.006-.03-.03-.048-.037 1.145-.143 2.67-1.002 3.66-2.06.455-.486.866-1.065 1.252-1.738.286-.504.547-1.058.803-1.675.224-.535.435-1.12.64-1.749a3.457 3.457 0 0 1-.896.311 8.977 8.977 0 0 1-.18.038c-.062.012-.125.018-.18.03 1.07-.41 1.743-1.207 2.234-2.178-.28.193-.74.442-1.288.566a2.52 2.52 0 0 1-.23.044c-.02 0-.038.006-.057.006.374-.155.685-.33.959-.535.056-.044.112-.087.168-.137.081-.075.162-.15.237-.224.05-.05.093-.1.143-.156.106-.124.205-.261.299-.41.03-.044.056-.094.087-.138.037-.068.068-.137.1-.205.149-.3.267-.567.36-.803.05-.119.088-.224.125-.33.013-.038.025-.081.044-.119.037-.112.068-.211.093-.305.037-.13.056-.236.069-.311a1.077 1.077 0 0 1-.125.087c-.324.193-.878.368-1.326.448l.884-.1-.884.1c-.062.013-.106.02-.156.032.004-.005-.994.101-2.995.316a2.313 2.313 0 0 0-.118.244Z",transform:"translate(8)"}),l("path",{fill:"url(#".concat(i("g"),")"),d:"M4.115 21.914c-.155.43-.317.872-.473 1.32 0 .006-.006.013-.006.019-.025.062-.044.124-.069.193-.106.305-.199.573-.41 1.195.348.162.628.58.896 1.059a1.876 1.876 0 0 0-.623-1.314c1.725.075 3.213-.361 3.979-1.619.068-.112.13-.23.186-.355-.348.442-.784.63-1.593.586h-.007.007c1.201-.536 1.799-1.052 2.334-1.905.125-.206.25-.424.374-.667-1.052 1.078-2.266 1.383-3.543 1.152l-.958.106c-.032.069-.063.15-.094.23Z",transform:"translate(8)"})))},h4t=f4t;var pF={};J(pF,{icon:()=>b4t});var MPr=T(z());var m4t=["title","titleId"];function iue(){return iue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function g4t(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}var y4t=function(t){var r=t.title,n=t.titleId,o=v4t(t,m4t);return l("svg",iue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#0080D5",d:"M19.5.938a7.002 7.002 0 0 0-7 0l-8 4.619A7 7 0 0 0 1 11.62v9.237a7 7 0 0 0 3.5 6.062l7.5 4.33V17.979a7 7 0 0 1 3.5-6.062L27 5.276 19.5.939Z"}),l("path",{d:"M19.5.938a7.002 7.002 0 0 0-7 0L5 5.277l11 6.35 11-6.35-7.5-4.34Z",className:"euiIcon__fillNegative"}),l("path",{fill:"#FA744E",d:"m28.435 7.76-10.026 5.79a6.994 6.994 0 0 1 1.59 4.428v13.27l7.5-4.33a7 7 0 0 0 3.5-6.061v-9.238a6.992 6.992 0 0 0-1.586-4.422l-.978.564Z"}))},b4t=y4t;var dF={};J(dF,{icon:()=>S4t});var RPr=T(z());var w4t=["title","titleId"];function aue(){return aue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function x4t(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}var _4t=function(t){var r=t.title,n=t.titleId,o=O4t(t,w4t);return l("svg",aue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 0 1 .075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 0 1-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 0 1-.383-.494 8.109 8.109 0 0 1-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 0 1-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 0 1 .298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 0 1 1.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02Zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 0 0 1.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 0 0-.98-.179 8.113 8.113 0 0 0-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39Zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915Zm13.675.284a7.122 7.122 0 0 1-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 0 1-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 0 1 .192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 0 0 .554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 0 1-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 0 1 1.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 0 1 .32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 0 1-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22Z",className:"euiIcon__fillNegative"}),l("g",{fill:"#F90"},l("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799Z"}),l("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944Z"}))))},S4t=_4t;var fF={};J(fF,{icon:()=>j4t});var LPr=T(z());var I4t=["title","titleId"];function sue(){return sue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function P4t(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}var k4t=function(t){var r=t.title,n=t.titleId,o=E4t(t,I4t);return l("svg",sue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fillRule:"evenodd"},l("path",{fillRule:"nonzero",d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 0 1 .075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 0 1-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 0 1-.383-.494 8.109 8.109 0 0 1-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 0 1-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 0 1 .298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 0 1 1.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02Zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 0 0 1.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 0 0-.98-.179 8.113 8.113 0 0 0-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39Zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915Zm13.675.284a7.122 7.122 0 0 1-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 0 1-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 0 1 .192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 0 0 .554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 0 1-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 0 1 1.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 0 1 .32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 0 1-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22Z"}),l("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799Z"}),l("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944Z"})))},j4t=k4t;var hF={};J(hF,{icon:()=>R4t});var FPr=T(z());var T4t=["title","titleId"];function lue(){return lue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function M4t(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}var A4t=function(t){var r=t.title,n=t.titleId,o=C4t(t,T4t);return l("svg",lue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#0072C6",d:"m17.448 4-9.414 8.01L0 26.157h7.243L17.448 4ZM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874Z"}))},R4t=A4t;var mF={};J(mF,{icon:()=>B4t});var zPr=T(z());var D4t=["title","titleId"];function uue(){return uue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function N4t(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}var F4t=function(t){var r=t.title,n=t.titleId,o=L4t(t,D4t);return l("svg",uue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m17.448 4-9.414 8.01L0 26.157h7.243L17.448 4ZM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874Z"}))},B4t=F4t;var vF={};J(vF,{icon:()=>$4t});var HPr=T(z());var z4t=["title","titleId"];function cue(){return cue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function H4t(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}var V4t=function(t){var r=t.title,n=t.titleId,o=W4t(t,z4t);return l("svg",cue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#0080D5",d:"M15 20H4V0h11c5.522 0 10 4.478 10 10s-4.478 10-10 10"}),l("path",{fill:"#00C2B3",d:"M26.702 15.624C24.6 19.979 20.152 23 15 23H4v9h15c5.522 0 10-4.478 10-10a9.952 9.952 0 0 0-2.298-6.376"}),l("path",{d:"M24.338 13.554A9.942 9.942 0 0 0 19 12H4v8h11c4.27 0 7.903-2.68 9.338-6.446",className:"euiIcon__fillNegative"}))},$4t=V4t;var gF={};J(gF,{icon:()=>J4t});var $Pr=T(z());var Z4t=["title","titleId"];function pue(){return pue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function U4t(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}var G4t=function(t){var r=t.title,n=t.titleId,o=q4t(t,Z4t);return l("svg",pue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{fill:"#00BFB3",d:"M0 22c0 5.522 4.478 10 10 10V12C4.478 12 0 16.478 0 22"}),l("path",{d:"M10 12v10h10c0-5.522-4.478-10-10-10",className:"euiIcon__fillNegative"}),l("path",{fill:"#F04E98",d:"M10 0v9c7.168 0 13 5.832 13 13h9C32 9.85 22.15 0 10 0"})))},J4t=G4t;var yF={};J(yF,{icon:()=>ext});var qPr=T(z());var X4t=["title","titleId"];function due(){return due=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Y4t(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}var Q4t=function(t){var r=t.title,n=t.titleId,o=K4t(t,X4t);return l("svg",due({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#F05C56",d:"M25.471 27.56c-1.06-.567-1.676-1.206-1.811-1.902-.13-.673.17-1.421.918-2.288a11.29 11.29 0 0 0 2.773-7.42A11.324 11.324 0 0 0 16.042 4.64l-.05.001h-.05A11.324 11.324 0 0 0 4.632 15.949a11.291 11.291 0 0 0 2.774 7.422c.753.872 1.047 1.591.928 2.257-.13.694-.74 1.342-1.817 1.93-1.657-1.375-3.116-3.212-4.01-5.056a14.943 14.943 0 0 1-1.117-3.139A14.997 14.997 0 0 1 1 15.95a14.901 14.901 0 0 1 4.378-10.57 14.924 14.924 0 0 1 4.752-3.204C11.97 1.395 13.95.996 15.948 1h.101a14.888 14.888 0 0 1 10.57 4.378 14.912 14.912 0 0 1 3.982 13.985 14.871 14.871 0 0 1-1.118 3.14c-.9 1.843-2.358 3.681-4.01 5.057h-.003Zm-5.523 2.798c-.173-.11-.767-.55-1.345-1.353a6.122 6.122 0 0 1-1.174-3.738 8.26 8.26 0 0 1 .611-2.964 8.42 8.42 0 0 1 1.627-2.54l.004-.008.154-.178c.263-.305.536-.622.753-.99.268-.454.462-.931.578-1.42.178-.758.188-1.547.029-2.31a5.3 5.3 0 0 0-.858-1.956 5.264 5.264 0 0 0-4.29-2.217h-.108a5.25 5.25 0 0 0-4.29 2.216 5.31 5.31 0 0 0-.856 1.956c-.16.763-.15 1.552.03 2.311.115.488.31.965.576 1.419.219.37.49.684.753.99l.155.179.003.007a8.384 8.384 0 0 1 1.628 2.54 8.24 8.24 0 0 1 .61 2.964 6.123 6.123 0 0 1-1.173 3.738c-.58.795-1.174 1.243-1.346 1.352l-.867-.26a15.434 15.434 0 0 1-2.49-1.098 4.245 4.245 0 0 0 2.234-3.736c0-1.034-.403-2.028-1.195-2.95l-.034-.034-.237-.26-.636-.746a8.924 8.924 0 0 1-1.525-3.26 8.983 8.983 0 0 1-.05-3.905 8.906 8.906 0 0 1 1.46-3.313A8.993 8.993 0 0 1 11.23 8.39a8.937 8.937 0 0 1 4.702-1.344h.112c.42 0 .84.029 1.255.088a8.938 8.938 0 0 1 3.448 1.256 9.003 9.003 0 0 1 2.554 2.404 9.093 9.093 0 0 1 1.459 3.313 9.043 9.043 0 0 1-.05 3.912 8.925 8.925 0 0 1-1.526 3.26c-.2.265-.409.495-.637.745l-.23.254c-.017.016-.03.027-.04.043-.804.961-1.195 1.927-1.195 2.948a4.25 4.25 0 0 0 2.237 3.735c-.795.441-1.63.809-2.491 1.098l-.862.26-.018-.004Zm-3.956-11.314a2.957 2.957 0 0 1-2.952-2.952 2.957 2.957 0 0 1 2.952-2.952 2.956 2.956 0 0 1 2.95 2.952 2.957 2.957 0 0 1-2.95 2.952"}))},ext=Q4t;var bF={};J(bF,{icon:()=>ixt});var GPr=T(z());var txt=["title","titleId"];function fue(){return fue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nxt(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}var oxt=function(t){var r=t.title,n=t.titleId,o=rxt(t,txt);return l("svg",fue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{d:"M12.37 18.352c.032-.01.066-.014.1-.023A6 6 0 0 1 18 10V0C9.163 0 2 7.164 2 16c0 2.793.72 5.417 1.976 7.702a18.947 18.947 0 0 1 8.393-5.349",className:"euiIcon__fillNegative"}),l("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 0 0 5.717 5.75a16.006 16.006 0 0 0 7.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0 1 18 10a5.94 5.94 0 0 1 2.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 0 0 7.541-5.032A15.959 15.959 0 0 0 18 0"}),l("path",{fill:"#00BFB3",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0 1 18 22a5.94 5.94 0 0 1-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 0 0-7.54 5.032A15.959 15.959 0 0 0 18 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 0 0-7.54-5.032"})))},ixt=oxt;var wF={};J(wF,{icon:()=>cxt});var XPr=T(z());var axt=["title","titleId"];function hue(){return hue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function lxt(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}var uxt=function(t){var r=t.title,n=t.titleId,o=sxt(t,axt);return l("svg",hue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M18 0v10a6 6 0 0 0-5.53 8.33c-.034.009-.068.012-.1.023A18.947 18.947 0 0 0 3.975 23.7 15.934 15.934 0 0 1 2 16C2 7.164 9.163 0 18 0Zm0 13a3 3 0 1 1 0 6 3 3 0 0 1 0-6Z",className:"euiIcon__fillNegative"}),l("path",{fill:"#00AEFA",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0 1 18 22a5.94 5.94 0 0 1-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 0 0-7.54 5.032A15.959 15.959 0 0 0 18 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 0 0-7.54-5.032"}),l("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 0 0 5.717 5.75a16.006 16.006 0 0 0 7.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0 1 18 10a5.94 5.94 0 0 1 2.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 0 0 7.541-5.032A15.959 15.959 0 0 0 18 0"}))},cxt=uxt;var OF={};J(OF,{icon:()=>mxt});var YPr=T(z());var pxt=["title","titleId"];function mue(){return mue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fxt(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}var hxt=function(t){var r=t.title,n=t.titleId,o=dxt(t,pxt);return l("svg",mue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.75 12 16 32h10l-3.4-10.88A13 13 0 0 0 10.19 12h-.44Z",className:"euiIcon__fillNegative"}),l("path",{fill:"#22A7F3",d:"M25.725 11.93A17 17 0 0 0 9.5 0H6l3.75 12h.44a13 13 0 0 1 12.41 9.12L26 32h6l-6.275-20.07Z"}),l("path",{fill:"#0377CA",d:"M7.91 16.175 0 32h12.855z"}))},mxt=hxt;var xF={};J(xF,{icon:()=>wxt});var ekr=T(z());var vxt=["title","titleId"];function vue(){return vue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yxt(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}var bxt=function(t){var r=t.title,n=t.titleId,o=gxt(t,vxt);return l("svg",vue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M14.738 28.044V16.681L3.172 10.919v6.46l5.32 2.67v4.889l6.246 3.106Zm2.344.066 6.357-3.17v-5.002l5.353-2.686V10.87l-11.71 5.854V28.11ZM27.306 8.993l-6.003-3.012-5.286 2.656-5.325-2.659L4.637 9.03l11.317 5.638 11.352-5.675ZM.828 23.744V8.324L15.981.689l15.155 7.604V23.72L15.98 31.28.828 23.743Z"}))},wxt=bxt;var _F={};J(_F,{icon:()=>Ixt});var rkr=T(z());var Oxt=["title","titleId"];function gue(){return gue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _xt(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}var Sxt=function(t){var r=t.title,n=t.titleId,o=xxt(t,Oxt);return l("svg",gue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#ED2226",d:"M16.072.024C7.29.024.144 7.146.144 15.952c0 8.782 7.122 15.928 15.928 15.928C24.854 31.88 32 24.758 32 15.952 32 7.146 24.854.024 16.072.024Zm10.755 18.719c0 .962-.553 1.804-1.636 1.997-1.877.336-5.823.53-9.119.53-3.296 0-7.242-.194-9.119-.53-1.082-.193-1.636-1.035-1.636-1.997v-6.208c0-.962.746-1.852 1.636-1.997.554-.096 1.853-.192 2.864-.192.385 0 .697.289.697.746v4.355l5.582-.12 5.582.12v-4.355c0-.457.313-.746.698-.746 1.01 0 2.31.096 2.863.192.914.145 1.636 1.035 1.636 1.997-.048 2.045-.048 4.139-.048 6.208Z"}))},Ixt=Sxt;var SF={};J(SF,{icon:()=>Txt});var okr=T(z());var Ext=["title","titleId"];function yue(){return yue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kxt(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}var jxt=function(t){var r=t.title,n=t.titleId,o=Pxt(t,Ext);return l("svg",yue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#136EA3",fillRule:"evenodd",d:"M18.099 15.108h3.304v-2.973H18.1v2.973zm-3.905 0h3.304v-2.973h-3.304v2.973zm-3.905 0h3.304v-2.973H10.29v2.973zm-3.905 0H9.69v-2.973H6.384v2.973zm-3.904 0h3.304v-2.973H2.48v2.973zm3.904-3.568H9.69V8.568H6.384v2.972zm3.905 0h3.304V8.568H10.29v2.972zm3.905 0h3.304V8.568h-3.304v2.972zm0-3.567h3.304V5h-3.304v2.973zm17.139 5.402c-.722-.478-2.38-.653-3.656-.415-.164-1.19-.834-2.221-2.052-3.153l-.7-.463-.468.694c-.598.893-.897 2.13-.8 3.317.045.418.183 1.164.617 1.82-.433.231-1.29.549-2.42.528H.124l-.043.247c-.204 1.193-.2 4.914 2.24 7.774C4.178 25.898 6.96 27 10.59 27c7.87 0 13.693-3.586 16.42-10.104 1.073.02 3.381.006 4.567-2.237.031-.051.102-.186.31-.61l.113-.234-.667-.44z"}))},Txt=jxt;var IF={};J(IF,{icon:()=>Dxt});var akr=T(z());var Cxt=["title","titleId"];function bue(){return bue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Axt(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}var Rxt=function(t){var r=t.title,n=t.titleId,o=Mxt(t,Cxt),i=fn("logo_dropwizard");return l("svg",bue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"url(#".concat(i("a"),")"),d:"M8 29.61s9.55 4.74 16.856-.893c-1.905-5.114-5.25-19.867-7.226-26.383-.422-1.389-.49-1.527-.663-1.909-.964-2.134-1.978 4.142-3.628 10.459C12.749 13.148 8 29.61 8 29.61"}),l("path",{fill:"url(#".concat(i("b"),")"),d:"M9.926 28.563s8.17 4.794 14.93.154c-.18-.807-.642-2.103-.955-3.311-1.664-6.416-4.676-17.248-6.144-22.626-1.59-5.822-2.105.986-3.961 8.23-.564 2.204-3.87 17.553-3.87 17.553"}),l("path",{fill:"#F9A72B",d:"m12.14 24.41.85-1.466.793 1.544-.908 1.99-.735-2.069Zm6.934-5.545.85-1.465.793 1.543-.908 1.99-.735-2.068Zm-4.747-5.851.85-1.465.792 1.543-.908 1.99-.734-2.068"}),l("path",{fill:"#FFF200",d:"m12.14 24.41.85-1.716.793 1.794-.907 1.468-.736-1.546Zm6.934-5.545.851-1.716.792 1.794-.906 1.468-.737-1.546Zm-4.747-5.851.85-1.716.792 1.794-.906 1.468-.736-1.546"}),l("path",{fill:"#24265D",d:"M12.987 28.422s6.082 1.015 10.086-1.549c-.502 1.55-4.991 3.314-10.086 1.55"}),l("defs",null,l("linearGradient",{id:i("a"),x1:33.473,x2:7.751,y1:7.674,y2:21.331,gradientUnits:"userSpaceOnUse"},l("stop",{stopColor:"#3871C1"}),l("stop",{offset:.515,stopColor:"#2C3792"}),l("stop",{offset:.865,stopColor:"#24265D"}),l("stop",{offset:1,stopColor:"#252761"})),l("linearGradient",{id:i("b"),x1:21.028,x2:6.017,y1:14.928,y2:18.844,gradientUnits:"userSpaceOnUse"},l("stop",{stopColor:"#3871C1"}),l("stop",{offset:.515,stopColor:"#2C3792"}),l("stop",{offset:.865,stopColor:"#24265D"}),l("stop",{offset:1,stopColor:"#252761"}))))},Dxt=Rxt;var EF={};J(EF,{icon:()=>zxt});var ukr=T(z());var Lxt=["title","titleId"];function wue(){return wue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Fxt(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}var Bxt=function(t){var r=t.title,n=t.titleId,o=Nxt(t,Lxt);return l("svg",wue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none","data-type":"logoElastic",viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#fff",fillRule:"evenodd",d:"M30.86 13.129A6.333 6.333 0 0 1 32 16.77a6.419 6.419 0 0 1-1.162 3.652 6.382 6.382 0 0 1-3.032 2.331 4.833 4.833 0 0 1-1.672 5.542 4.789 4.789 0 0 1-5.77-.074 9.016 9.016 0 0 1-4.5 3.322 8.982 8.982 0 0 1-5.587.023 9.014 9.014 0 0 1-4.526-3.287 9.067 9.067 0 0 1-1.727-5.333c0-.579.053-1.156.16-1.725A6.305 6.305 0 0 1 1.145 18.9 6.341 6.341 0 0 1 0 15.242a6.42 6.42 0 0 1 1.163-3.652 6.384 6.384 0 0 1 3.035-2.33 4.833 4.833 0 0 1 1.658-5.557 4.789 4.789 0 0 1 5.78.07 9.037 9.037 0 0 1 4.93-3.446 9.007 9.007 0 0 1 5.994.419 9.05 9.05 0 0 1 4.407 4.098 9.097 9.097 0 0 1 .873 5.965 6.298 6.298 0 0 1 3.02 2.32Zm-18.28.658 7.002 3.211 7.066-6.213a7.85 7.85 0 0 0 .152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 0 0-4.02-2.869 7.87 7.87 0 0 0-4.932.086 7.9 7.9 0 0 0-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001Zm-7.247 7.441A7.964 7.964 0 0 0 6.72 27.53a7.918 7.918 0 0 0 4.04 2.874 7.89 7.89 0 0 0 4.95-.097 7.92 7.92 0 0 0 3.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001Zm4.755-11.024-4.8-1.137.002-.002a3.82 3.82 0 0 1 1.312-4.358 3.785 3.785 0 0 1 4.538.023l-1.052 5.474Zm-5.216.01a5.294 5.294 0 0 0-2.595 1.882 5.324 5.324 0 0 0-.142 6.124 5.287 5.287 0 0 0 2.505 2l6.733-6.101-1.235-2.65-5.266-1.255Zm18.286 17.848a3.737 3.737 0 0 1-2.285-.785l1.037-5.454 4.8 1.125a3.812 3.812 0 0 1-1.801 4.68c-.54.283-1.14.432-1.751.434Zm-1.31-7.499 5.28 1.238a5.34 5.34 0 0 0 2.622-1.938 5.37 5.37 0 0 0 1.013-3.106 5.311 5.311 0 0 0-.936-3.01 5.282 5.282 0 0 0-2.475-1.944l-6.904 6.07 1.4 2.69Z",className:"outline",clipRule:"evenodd"}),l("path",{fill:"#FEC514",d:"m12.58 13.787 7.002 3.211 7.066-6.213a7.849 7.849 0 0 0 .152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 0 0-4.02-2.869 7.87 7.87 0 0 0-4.932.086 7.9 7.9 0 0 0-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001Z"}),l("path",{fill:"#00BFB3",d:"M5.333 21.228A7.964 7.964 0 0 0 6.72 27.53a7.918 7.918 0 0 0 4.04 2.874 7.89 7.89 0 0 0 4.95-.097 7.92 7.92 0 0 0 3.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001Z"}),l("path",{fill:"#F04E98",d:"m5.288 9.067 4.8 1.137L11.14 4.73a3.785 3.785 0 0 0-5.914 1.94 3.82 3.82 0 0 0 .064 2.395"}),l("path",{fill:"#1BA9F5",d:"M4.872 10.214a5.294 5.294 0 0 0-2.595 1.882 5.324 5.324 0 0 0-.142 6.124 5.287 5.287 0 0 0 2.505 2l6.733-6.101-1.235-2.65-5.266-1.255Z"}),l("path",{fill:"#93C90E",d:"M20.873 27.277a3.736 3.736 0 0 0 2.285.785 3.783 3.783 0 0 0 3.101-1.63 3.812 3.812 0 0 0 .451-3.484l-4.8-1.125-1.037 5.454Z"}),l("path",{fill:"#07C",d:"m21.848 20.563 5.28 1.238a5.34 5.34 0 0 0 2.622-1.938 5.37 5.37 0 0 0 1.013-3.106 5.312 5.312 0 0 0-.936-3.01 5.283 5.283 0 0 0-2.475-1.944l-6.904 6.07 1.4 2.69Z"}))},zxt=Bxt;var PF={};J(PF,{icon:()=>Zxt});var pkr=T(z());var Wxt=["title","titleId"];function Oue(){return Oue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Vxt(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}var $xt=function(t){var r=t.title,n=t.titleId,o=Hxt(t,Wxt);return l("svg",Oue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#F04E98",d:"M0 2.37A2.37 2.37 0 0 1 2.37 0h27.26A2.37 2.37 0 0 1 32 2.37v6.52H0V2.37Z"}),l("path",{fill:"#00BFB3",d:"M0 20.148h32v-8.296H0v8.296Z"}),l("path",{fill:"#07C",d:"M0 23.111h32v6.519A2.37 2.37 0 0 1 29.63 32H2.37A2.37 2.37 0 0 1 0 29.63v-6.52Z"}))},Zxt=$xt;var kF={};J(kF,{icon:()=>Xxt});var fkr=T(z());var qxt=["title","titleId"];function xue(){return xue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Gxt(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}var Jxt=function(t){var r=t.title,n=t.titleId,o=Uxt(t,qxt);return l("svg",xue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{d:"M2 16c0 1.384.194 2.72.524 4H22a4 4 0 0 0 0-8H2.524A15.984 15.984 0 0 0 2 16",className:"euiIcon__fillNegative"}),l("path",{fill:"#FEC514",d:"M28.924 7.662A15.381 15.381 0 0 0 30.48 6C27.547 2.346 23.05 0 18 0 11.679 0 6.239 3.678 3.644 9H25.51a5.039 5.039 0 0 0 3.413-1.338"}),l("path",{fill:"#00BFB3",d:"M25.51 23H3.645C6.24 28.323 11.679 32 18 32c5.05 0 9.547-2.346 12.48-6a15.381 15.381 0 0 0-1.556-1.662A5.034 5.034 0 0 0 25.51 23"})))},Xxt=Jxt;var jF={};J(jF,{icon:()=>t_t});var mkr=T(z());var Kxt=["title","titleId"];function _ue(){return _ue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Qxt(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}var e_t=function(t){var r=t.title,n=t.titleId,o=Yxt(t,Kxt);return l("svg",_ue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#00BFB3",fillRule:"evenodd",d:"M16 0c-2.918 0-5.645.794-8 2.158 4.777 2.768 8 7.923 8 13.842 0 5.919-3.223 11.074-8 13.842A15.907 15.907 0 0 0 16 32c8.837 0 16-7.163 16-16S24.837 0 16 0z",clipRule:"evenodd"}),l("path",{fill:"#FEC514",fillRule:"evenodd",d:"M8 24h2.222A12.996 12.996 0 0 0 13 16c0-2.935-1.012-5.744-2.778-8H8a8 8 0 0 0 0 16z",clipRule:"evenodd"}),l("path",{fillRule:"evenodd",d:"M16 8h-2.152A15.877 15.877 0 0 1 16 16c0 2.918-.786 5.647-2.152 8H16a8 8 0 0 0 0-16z",className:"euiIcon__fillNegative",clipRule:"evenodd"}))},t_t=e_t;var TF={};J(TF,{icon:()=>a_t});var gkr=T(z());var r_t=["title","titleId"];function Sue(){return Sue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function o_t(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}var i_t=function(t){var r=t.title,n=t.titleId,o=n_t(t,r_t);return l("svg",Sue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"#419EDA"},l("path",{d:"M14.65 14.164c0 1.189-.933 2.15-2.083 2.15-1.152 0-2.082-.961-2.082-2.15 0-1.185.93-2.15 2.082-2.15 1.15 0 2.083.965 2.083 2.15zm2.693 0c0 1.189.934 2.15 2.084 2.15s2.083-.961 2.083-2.15c0-1.185-.933-2.15-2.083-2.15-1.15 0-2.084.965-2.084 2.15z"}),l("path",{d:"M31.522 16.495a5.845 5.845 0 0 1-3.105-.618c.272-1.603.387-3.218.357-4.827a24.896 24.896 0 0 0-3.027-3.703 6.137 6.137 0 0 1 2.133-2.36l.391-.25-.304-.354c-1.57-1.825-3.444-3.235-5.568-4.193L21.975 0l-.107.462a6.248 6.248 0 0 1-1.51 2.829 23.77 23.77 0 0 0-4.362-1.855 23.79 23.79 0 0 0-4.355 1.851A6.246 6.246 0 0 1 10.137.465l-.108-.462-.423.189c-2.097.943-4.022 2.392-5.566 4.19l-.306.355.39.25a6.125 6.125 0 0 1 2.129 2.347 25.001 25.001 0 0 0-3.022 3.689 26.068 26.068 0 0 0 .347 4.86 5.832 5.832 0 0 1-3.09.612L.03 16.46l.043.473a16.723 16.723 0 0 0 2.14 6.765l.234.41.35-.308a5.914 5.914 0 0 1 2.837-1.372 25.255 25.255 0 0 0 2.429 4.083c1.475.533 3.013.93 4.601 1.167a6.359 6.359 0 0 1-.383 3.243l-.175.439.45.102c1.15.261 2.31.394 3.447.394l3.447-.394.45-.102-.175-.44a6.376 6.376 0 0 1-.383-3.244 23.905 23.905 0 0 0 4.585-1.165 25.286 25.286 0 0 0 2.43-4.086 5.94 5.94 0 0 1 2.851 1.373l.35.306.233-.408a16.661 16.661 0 0 0 2.14-6.764l.042-.472-.45.036ZM20.93 22.278c-1.63.458-3.287.689-4.933.689-1.65 0-3.304-.231-4.936-.69a20.028 20.028 0 0 1-2.113-4.594 20.072 20.072 0 0 1-.89-5.04 19.076 19.076 0 0 1 3.576-3.516 18.867 18.867 0 0 1 4.363-2.448 18.944 18.944 0 0 1 4.355 2.443 19.19 19.19 0 0 1 3.592 3.538c-.09 1.73-.39 3.41-.899 5.019a19.965 19.965 0 0 1-2.115 4.599Z"})))},a_t=i_t;var CF={};J(CF,{icon:()=>p_t});var bkr=T(z());var s_t=["title","titleId"];function Iue(){return Iue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function u_t(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}var c_t=function(t){var r=t.title,n=t.titleId,o=l_t(t,s_t),i=fn("logo_gcp");return l("svg",Iue({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("defs",null,l("path",{id:i("a"),d:"M.085.1h4.549v6.291H.085z"})),l("g",{fill:"none",fillRule:"evenodd"},l("path",{fill:"#DB4437",fillRule:"nonzero",d:"M22.57 29.982h-5.749c.527 0 .987-.282 1.233-.7L25.857 16 20.93 7.61l5.748.001c.492 0 .97.251 1.232.7l3.698 6.291c.49.837.526 1.9 0 2.797l-6.572 11.185a2.853 2.853 0 0 1-2.464 1.398Zm-.71-2.796c0 .386.318.7.71.7a.705.705 0 0 0 .712-.7c0-.386-.318-.7-.711-.7a.705.705 0 0 0-.712.7Zm6.927-10.58c.34.193.775.078.971-.256a.692.692 0 0 0-.26-.955.718.718 0 0 0-.972.256.692.692 0 0 0 .26.955Z"}),l("path",{fill:"#4285F4",fillRule:"nonzero",d:"m25.036 3.416 2.873 4.894a1.427 1.427 0 0 0-1.232-.699H11.071l-4.928 8.388-2.874-4.892a1.377 1.377 0 0 1 0-1.399l3.696-6.292a2.853 2.853 0 0 1 2.464-1.398h13.143c.982 0 1.937.502 2.464 1.398ZM10.14 4.814c0-.386-.318-.7-.71-.7a.705.705 0 0 0-.712.7c0 .386.318.7.711.7a.705.705 0 0 0 .711-.7Zm12.787.606a.692.692 0 0 0 .26-.955.718.718 0 0 0-.971-.256.692.692 0 0 0-.26.955.718.718 0 0 0 .971.256Z"}),l("path",{fill:"#F4B400",fillRule:"nonzero",d:"m.394 14.601 2.875-4.893c-.263.449-.245.98 0 1.399L11.07 24.39h9.857l-2.874 4.892c-.246.418-.706.7-1.233.7H9.428a2.854 2.854 0 0 1-2.464-1.398L.394 17.398a2.754 2.754 0 0 1 0-2.797Zm2.82.793a.718.718 0 0 0-.972.256.693.693 0 0 0 .26.955c.34.193.775.078.971-.256a.692.692 0 0 0-.26-.955ZM9.072 26.58a.692.692 0 0 0-.26.955.718.718 0 0 0 .971.256.692.692 0 0 0 .26-.955.718.718 0 0 0-.971-.256Z"}),l("path",{fill:"#000",d:"m18.054 29.282 2.875-4.892H17.96l-1.138 5.591c.526 0 .986-.28 1.232-.699M26.678 7.611h-5.749l1.484 2.527L27.91 8.31a1.427 1.427 0 0 0-1.232-.7",opacity:.1}),l("g",{opacity:.1,transform:"translate(2.994 9.609)"},l("mask",{id:i("b"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("a"))})),l("path",{fill:"#000",d:"M.275 1.498 3.15 6.391l1.485-2.527L.275.1c-.263.448-.245.98 0 1.398",mask:"url(#".concat(i("b"),")")})),l("path",{fill:"#CCC",fillRule:"nonzero",d:"M11.071 24.39 6.143 16l4.928-8.39h9.858L25.857 16l-4.928 8.39H11.07ZM20.268 16c0-2.317-1.91-4.194-4.268-4.194-2.357 0-4.268 1.877-4.268 4.194 0 2.316 1.91 4.194 4.268 4.194 2.357 0 4.268-1.878 4.268-4.194Z"})))},p_t=c_t;var MF={};J(MF,{icon:()=>v_t});var xkr=T(z());var d_t=["title","titleId"];function Eue(){return Eue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function h_t(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}var m_t=function(t){var r=t.title,n=t.titleId,o=f_t(t,d_t);return l("svg",Eue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M20.256 15.982c0-2.316-1.91-4.194-4.268-4.194-2.357 0-4.268 1.878-4.268 4.194 0 2.317 1.911 4.195 4.268 4.195 2.357 0 4.268-1.878 4.268-4.195"}),l("path",{d:"M29.87 16.543a.862.862 0 0 1-1.167.308.832.832 0 0 1-.312-1.147.862.862 0 0 1 1.167-.308.832.832 0 0 1 .312 1.147M22.56 28.15a.847.847 0 0 1-.855-.84c0-.464.383-.84.855-.84s.854.376.854.84c0 .464-.382.84-.854.84m-12.715-.113a.863.863 0 0 1-1.167-.308.832.832 0 0 1 .312-1.147.862.862 0 0 1 1.167.308.832.832 0 0 1-.312 1.147M3.586 16.542a.863.863 0 0 1-1.167.308.832.832 0 0 1-.313-1.147.862.862 0 0 1 1.167-.308.832.832 0 0 1 .313 1.147M22.987 5.665a.862.862 0 0 1-1.167-.308.832.832 0 0 1 .312-1.147.863.863 0 0 1 1.168.308.832.832 0 0 1-.313 1.147m-13.57.112a.847.847 0 0 1-.854-.84c0-.464.382-.84.854-.84s.855.376.855.84c0 .464-.383.84-.855.84m22.178 8.797-3.697-6.292c-.014-.023-.03-.043-.045-.065l-2.83-4.818A2.854 2.854 0 0 0 22.56 2H9.417a2.853 2.853 0 0 0-2.464 1.398L3.257 9.69l3.284 5.59 4.519-7.69h15.605c.491 0 .969.251 1.232.699h-6.565l4.513 7.682-4.935 8.4-2.87 4.883a1.426 1.426 0 0 1-1.23.699l3.279-5.582h-9.03l-4.544-7.738-.384-.653-2.874-4.893a1.377 1.377 0 0 1-.003-1.391L.382 14.584a2.754 2.754 0 0 0 0 2.796l6.57 11.186a2.854 2.854 0 0 0 2.465 1.398h7.392c.054 0 .107-.005.16-.011h5.59a2.853 2.853 0 0 0 2.464-1.397l6.572-11.186c.526-.896.49-1.96 0-2.796"}))},v_t=m_t;var AF={};J(AF,{icon:()=>O_t});var Skr=T(z());var g_t=["title","titleId"];function Pue(){return Pue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function b_t(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}var w_t=function(t){var r=t.title,n=t.titleId,o=y_t(t,g_t);return l("svg",Pue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 0C7.164 0 0 7.343 0 16.4c0 7.248 4.584 13.394 10.942 15.562.8.15 1.092-.356 1.092-.789 0-.39-.014-1.684-.022-3.053-4.45.991-5.39-1.934-5.39-1.934-.728-1.894-1.776-2.398-1.776-2.398-1.454-1.017.11-.997.11-.997 1.606.114 2.452 1.69 2.452 1.69 1.428 2.506 3.746 1.781 4.656 1.36.146-1.056.56-1.78 1.016-2.19-3.552-.414-7.288-1.821-7.288-8.105 0-1.792.624-3.254 1.646-4.402-.164-.416-.714-2.085.158-4.342 0 0 1.341-.44 4.4 1.681A14.882 14.882 0 0 1 16 7.932c1.36.006 2.728.188 4.006.553 3.053-2.124 4.396-1.681 4.396-1.681.875 2.259.325 3.926.16 4.34 1.026 1.148 1.645 2.61 1.645 4.402 0 6.3-3.742 7.687-7.307 8.094.577.508 1.086 1.505 1.086 3.035 0 2.192-.021 3.96-.021 4.5 0 .437.29.947 1.101.787C27.42 29.79 32 23.644 32 16.4 32 7.343 24.836 0 16 0Z"}))},O_t=w_t;var RF={};J(RF,{icon:()=>E_t});var Ekr=T(z());var x_t=["title","titleId"];function kue(){return kue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function S_t(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}var I_t=function(t){var r=t.title,n=t.titleId,o=__t(t,x_t);return l("svg",kue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#E65A4D",d:"M29.162 4.149c.29-.175.588-.078.873 0a2.616 2.616 0 0 1 1.907 2.476c.006.29-.007.581-.007.866-.084 0-.135.052-.2.097-.815.582-1.642 1.164-2.45 1.752-.33.239-.692.426-.97.73-.116 0-.2.078-.284.136-2.69 1.855-5.379 3.704-8.062 5.56-1.331.918-2.663 1.849-3.995 2.773h-.11c-.058-.045-.11-.103-.168-.142L5.863 11.55c-.672-.466-1.344-.938-2.017-1.403-.077-.052-.148-.162-.245-.104-.09.052-.033.175-.045.272-.007.032 0 .065 0 .097v16.194c0 .116.006.24.012.355 0 .065-.006.123-.006.188-1.228.149-2.347-.02-3.116-1.131a2.381 2.381 0 0 1-.44-1.364c0-6.032-.006-12.057.007-18.089 0-1.228.995-2.314 2.217-2.488.194-.026.388-.052.556.077.04.039.071.078.117.11 4.273 3.168 8.546 6.335 12.819 9.51.168.122.278.116.446-.007 3.413-2.521 6.833-5.036 10.247-7.55.905-.692 1.823-1.384 2.747-2.07Z"}),l("path",{fill:"#F6F4EC",d:"M29.162 4.149c-.924.685-1.842 1.377-2.767 2.062-3.413 2.521-6.833 5.03-10.246 7.55-.168.123-.272.13-.446.007-4.267-3.174-8.54-6.335-12.813-9.51-.046-.032-.078-.07-.117-.11.078-.129.214-.083.324-.083h25.742c.11 0 .239-.046.323.084Z"}),l("path",{fill:"#E6E3D6",d:"M3.556 26.95a6.533 6.533 0 0 1-.013-.356V10.4c0-.032-.007-.065 0-.097.013-.09-.046-.213.045-.271.097-.059.174.051.246.103.672.465 1.344.937 2.017 1.403l9.832 6.846c.058.045.117.097.168.142-.026.026-.058.045-.084.071l-.064.065c-.052 0-.104.013-.13.064l-.064.065c-.007.013-.02.02-.026.032.013-.006.02-.019.032-.025l.065-.065c.052 0 .103-.013.13-.065.018-.02.044-.045.064-.064.064 0 .129-.007.194-.007.898.627 1.803 1.248 2.702 1.875 2.676 1.855 5.353 3.704 8.023 5.572.478.337 1.002.628 1.428 1.035-.116.11-.258.039-.388.058.007-.149-.122-.188-.22-.252-.49-.343-.995-.672-1.473-1.028-.802-.588-1.617-1.15-2.431-1.72-.679-.472-1.351-.963-2.05-1.409-.607-.388-1.17-.853-1.777-1.248-.685-.44-1.332-.93-2.01-1.377-.563-.368-1.113-.762-1.662-1.15-.11-.078-.207-.11-.323-.033-.233.168-.53.278-.724.46-.556.51-1.235.84-1.817 1.305-.743.589-1.545 1.112-2.34 1.636-1.319.873-2.599 1.816-3.911 2.696a43.697 43.697 0 0 0-2.308 1.629c-.207.155-.485.226-.614.485-.13-.013-.272.038-.395-.046 2.315-1.616 4.63-3.226 6.937-4.842.304-.213.646-.381.899-.666.045-.013.103-.019.097-.084 0-.006-.013-.02-.02-.02-.065-.006-.077.046-.09.091-.233.013-.375.194-.55.31-2.463 1.7-4.932 3.388-7.395 5.075Zm11.119-7.564.064-.065c.052 0 .104-.013.13-.064l.064-.065c.052 0 .104-.013.13-.065.006-.013.019-.02.025-.032-.012.006-.019.02-.032.026-.052 0-.103.013-.13.064l-.064.065c-.051 0-.103.013-.13.065-.018.026-.038.045-.057.07-.013.007-.026.014-.033.027.013-.007.026-.013.033-.026Zm-.84.575c-.052 0-.104.013-.13.065-.039.006-.09.006-.097.065 0 .012.026.038.039.038.052-.006.058-.051.065-.09.051-.007.096-.013.122-.078a.311.311 0 0 0 .071-.058c.052 0 .104-.013.13-.065l.064-.064c.052 0 .104-.013.13-.065.006-.013.02-.02.026-.032-.013.006-.02.02-.033.026-.051 0-.103.013-.13.064-.018.02-.044.046-.064.065-.051 0-.103.013-.129.065l-.065.064Zm-.841.588c-.052 0-.103.013-.13.065-.051.007-.103.013-.096.084 0 .007.013.02.02.02.07.006.077-.046.083-.097.052-.007.097-.02.123-.072.026-.012.045-.038.071-.058.052 0 .103-.013.13-.064l.064-.065c.052 0 .103-.013.13-.065.006-.013.019-.019.025-.032-.013.007-.02.02-.032.026-.052 0-.104.013-.13.065l-.064.064c-.052 0-.104.013-.13.065a.306.306 0 0 0-.064.064Zm-.647.46c.052-.007.104-.013.097-.085 0-.006-.012-.019-.019-.019-.071-.006-.078.045-.084.097-.052 0-.097.013-.13.065a.223.223 0 0 0-.193.129c-.045.013-.104.013-.097.084 0 .006.013.02.02.02.064.006.077-.046.083-.098.09 0 .181-.006.194-.129.058-.006.104-.02.13-.065Zm2.128-1.533c-.008.027-.025.054-.033.072.025.009.05.035.067.027.016-.01.025-.045.033-.072a.55.55 0 0 1-.067-.027Zm-1.81 1.35c-.008-.024-.015-.056-.03-.056-.015-.008-.052.008-.06.024-.022.033-.007.074.03.074.022 0 .037-.025.06-.041ZM15.355 19a.185.185 0 0 1 .034-.072c-.025-.009-.05-.035-.067-.026-.016.008-.025.044-.033.07.017.01.042.019.067.028Zm-3.526 2.402c-.016-.024-.031-.05-.04-.057-.015 0-.055.016-.055.033-.016.04.008.074.048.065.016 0 .031-.024.047-.04Z"}),l("path",{fill:"#B6B5AC",d:"M28.121 27.085c-.426-.413-.944-.698-1.428-1.034-2.67-1.862-5.347-3.717-8.023-5.573-.899-.627-1.804-1.247-2.702-1.874 0-.02-.007-.046-.007-.065l3.995-2.773c2.69-1.856 5.379-3.705 8.062-5.56.084-.058.168-.136.284-.136v17.073c-.051-.019-.116-.038-.18-.058Z"}),l("path",{fill:"#E6E3D6",d:"M4.073 27.143c.123-.258.407-.33.614-.484a47.845 47.845 0 0 1 2.308-1.63c1.312-.885 2.592-1.823 3.91-2.695.796-.524 1.598-1.048 2.341-1.636.588-.465 1.26-.795 1.817-1.306.2-.18.49-.29.724-.459.11-.084.207-.051.323.033.55.388 1.099.782 1.661 1.15.68.446 1.326.944 2.01 1.377.608.388 1.17.854 1.779 1.248.698.446 1.37.937 2.049 1.41.814.568 1.635 1.13 2.43 1.719.485.355.983.685 1.475 1.028.09.064.226.103.22.252-7.888-.007-15.774-.007-23.661-.007Z"}),l("path",{fill:"#B1392F",d:"M28.315 27.143V10.07c.278-.304.64-.491.97-.73.814-.595 1.635-1.17 2.45-1.752.058-.045.116-.097.2-.097.007.11.013.213.013.323 0 5.502 0 11.01.007 16.51 0 .376-.013.75-.104 1.126-.161.691-.575 1.17-1.247 1.409-.744.259-1.513.33-2.289.284Z"}),l("path",{fill:"#BEBDB3",d:"M11.514 21.59c-.253.285-.595.453-.9.666a2650.078 2650.078 0 0 1-6.936 4.842l-.129.039c0-.065.007-.123.007-.188 2.47-1.687 4.932-3.374 7.402-5.061.174-.117.31-.304.55-.31l.006.012Z"})))},E_t=I_t;var DF={};J(DF,{icon:()=>C_t});var kkr=T(z());var P_t=["title","titleId"];function jue(){return jue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function j_t(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}var T_t=function(t){var r=t.title,n=t.titleId,o=k_t(t,P_t);return l("svg",jue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#F6D2A2",d:"M4.315 17.301c.045.946 1 .5 1.416.21.415-.29.5-.045.56-.6a9.07 9.07 0 0 0 .045-1.09 2.676 2.676 0 0 0-1.786.455c-.26.19-.745.79-.24 1"}),l("path",{fill:"#010101",d:"M4.805 17.987a.6.6 0 0 1-.27-.06.62.62 0 0 1-.31-.55A.41.41 0 0 1 4 17.05a1.15 1.15 0 0 1 .5-.83 2.752 2.752 0 0 1 1.846-.47h.075v.074c.01.286.003.572-.025.856v.25c-.025.39-.1.45-.3.5a1.118 1.118 0 0 0-.3.145c-.288.223-.63.364-.99.41Zm1.271-2.067a2.502 2.502 0 0 0-1.47.45 1 1 0 0 0-.42.671.25.25 0 0 0 .17.205h.05v.055a.5.5 0 0 0 .21.45 1.31 1.31 0 0 0 1.065-.31 1.29 1.29 0 0 1 .34-.17c.13-.045.16-.055.18-.365v-.25c.024-.25.034-.5.03-.75h-.155v.014Z"}),l("path",{fill:"#C7B199",d:"M4.315 17.3a.745.745 0 0 0 .376-.21Z"}),l("path",{fill:"#010101",d:"M4.315 17.391a.092.092 0 1 1-.055-.175h.06a.54.54 0 0 0 .275-.16.092.092 0 0 1 .06-.035.09.09 0 0 1 .068.017.09.09 0 0 1 .035.06.091.091 0 0 1-.018.068.7.7 0 0 1-.36.22h-.065v.005Z"}),l("path",{fill:"#74CDDD",d:"M6.496 6.05C2.88 5.049 5.571.43 8.498 2.322L6.496 6.05Z"}),l("path",{fill:"#010101",d:"M6.541 6.154h-.07c-1.03-.29-1.666-.9-1.786-1.716a2.396 2.396 0 0 1 1.116-2.26 2.421 2.421 0 0 1 2.722.09l.07.044L6.54 6.154Zm.5-4.192c-.41 0-.811.12-1.155.345A2.211 2.211 0 0 0 4.85 4.393c.11.726.67 1.276 1.586 1.551l1.901-3.587a2.501 2.501 0 0 0-1.28-.38l-.015-.015Z"}),l("path",{fill:"#74CDDD",d:"M22.566 1.977c2.862-2.001 5.448 2.502 2.121 3.667l-2.121-3.667Z"}),l("path",{fill:"#010101",d:"m24.647 5.754-2.201-3.802.065-.045a2.362 2.362 0 0 1 2.626-.22 2.427 2.427 0 0 1 1.196 2.241c-.05.5-.32 1.356-1.616 1.801l-.07.025Zm-1.961-3.752 2.041 3.532a1.956 1.956 0 0 0 1.426-1.62 2.24 2.24 0 0 0-1.106-2.077 2.126 2.126 0 0 0-2.361.165Z"}),l("path",{fill:"#F6D2A2",d:"M23.181 28.928c.726.45 2.056 1.811.966 2.471-1.046.961-1.636-1.055-2.557-1.33a2.549 2.549 0 0 1 1.591-1.141Z"}),l("path",{fill:"#010101",d:"M23.592 31.745h-.04c-.416-.025-.756-.43-1.086-.816a2.33 2.33 0 0 0-.9-.775l-.12-.035.074-.125a2.656 2.656 0 0 1 1.646-1.176h.065c.466.29 1.426 1.13 1.421 1.891a.835.835 0 0 1-.45.725.905.905 0 0 1-.61.31Zm-1.861-1.721c.339.2.633.467.865.785.219.36.56.628.96.755a.716.716 0 0 0 .5-.235.661.661 0 0 0 .371-.58c0-.61-.77-1.376-1.306-1.721a2.351 2.351 0 0 0-1.386.996h-.005Z"}),l("path",{fill:"#010101",d:"M24.147 31.494a.09.09 0 0 1-.08-.05c-.053-.11-.1-.224-.14-.34a1.5 1.5 0 0 0-.33-.61.091.091 0 0 1-.022-.098.09.09 0 0 1 .147-.032c.172.188.3.414.37.66.039.11.084.216.135.32a.09.09 0 0 1-.04.12l-.04.03Z"}),l("path",{fill:"#F6D2A2",d:"M10.189 30.464c-.856.13-1.336.9-2.046 1.29a.62.62 0 0 1-1.001-.235.325.325 0 0 1-.26-.12c-.62-1 .645-1.696 1.31-2.186.936-.18 1.511.615 1.997 1.25Z"}),l("path",{fill:"#010101",d:"M7.692 31.995a.613.613 0 0 1-.16 0 .74.74 0 0 1-.435-.375.301.301 0 0 1-.245-.13c-.6-.946.42-1.662 1.096-2.137l.235-.17c.945-.19 1.546.59 2.026 1.22l.135.181h-.15a2.586 2.586 0 0 0-1.266.725c-.23.212-.482.4-.75.56a1.001 1.001 0 0 1-.486.126Zm-.6-.58a.245.245 0 0 1 .105 0h.025l.04.08a.58.58 0 0 0 .335.305.686.686 0 0 0 .5-.12c.26-.155.503-.337.726-.54a3 3 0 0 1 1.206-.736c-.46-.6-1-1.25-1.786-1.1l-.225.16c-.69.5-1.546 1.09-1.051 1.885a.146.146 0 0 0 .105.07l.02-.005Z"}),l("path",{fill:"#010101",d:"M7.157 31.614a.09.09 0 0 1-.09-.12c.037-.24.137-.466.29-.655.072-.1.136-.205.19-.315a.09.09 0 1 1 .165.075c-.058.12-.127.236-.205.345-.132.17-.217.372-.245.585a.09.09 0 0 1-.067.084.09.09 0 0 1-.038.002ZM6.647 4.78c-.5-.25-.826-.596-.536-1.146.29-.55.77-.455 1.251-.205l-.715 1.35Zm17.285-.48c.5-.25.825-.596.535-1.146-.29-.55-.77-.456-1.25-.205l.715 1.35Z"}),l("path",{fill:"#F6D2A2",d:"M27.219 17.181c-.045.946-1.001.5-1.416.21-.416-.29-.5-.045-.56-.6a9.068 9.068 0 0 1-.046-1.09 2.677 2.677 0 0 1 1.787.454c.26.19.745.79.24 1.001"}),l("path",{fill:"#010101",d:"M26.728 17.846a2.046 2.046 0 0 1-.955-.36 1.117 1.117 0 0 0-.3-.145c-.2-.07-.275-.13-.3-.5v-.25a6.516 6.516 0 0 1-.026-.856v-.12h.076a2.751 2.751 0 0 1 1.846.47 1.15 1.15 0 0 1 .5.83.412.412 0 0 1-.225.326.62.62 0 0 1-.31.55.605.605 0 0 1-.306.055Zm-1.456-2.06c-.003.25.007.5.03.75v.25c0 .305.046.315.18.365.122.04.236.097.34.17a1.307 1.307 0 0 0 1.067.31.502.502 0 0 0 .21-.45v-.06h.05a.25.25 0 0 0 .17-.205 1.002 1.002 0 0 0-.42-.67 2.552 2.552 0 0 0-1.627-.46Z"}),l("path",{fill:"#C7B199",d:"M27.218 17.181a.746.746 0 0 1-.375-.195Z"}),l("path",{fill:"#010101",d:"M27.219 17.271h-.095a.7.7 0 0 1-.35-.25.09.09 0 0 1-.007-.101.091.091 0 0 1 .152-.01.54.54 0 0 0 .275.16h.06a.101.101 0 1 1-.035.201Z"}),l("path",{fill:"#74CDDD",d:"M15.407.066c3.622 0 7.004.5 8.785 4.002 1.586 3.898 1 8.105 1.266 12.223.21 3.537.67 7.624-.97 10.906-1.717 3.442-6.05 4.297-9.601 4.182-2.792-.1-6.164-1-7.74-3.562-1.851-3.002-.976-7.444-.84-10.771.16-3.942-1.071-7.9.225-11.762C7.877 1.282 11.5.376 15.402.066"}),l("path",{fill:"#010101",d:"M15.502 31.494h-.62a13.202 13.202 0 0 1-4.358-.87 6.969 6.969 0 0 1-3.457-2.737c-1.501-2.421-1.23-5.763-1-8.715.06-.74.114-1.446.14-2.106.026-1.4-.034-2.8-.18-4.192-.211-2.502-.431-5.089.41-7.595a6.644 6.644 0 0 1 3.501-4.047C11.29.572 12.94.19 15.367 0c3.572-.025 7.094.475 8.905 4.022 1.16 2.852 1.176 5.914 1.196 8.876 0 1.11 0 2.256.08 3.377 0 .34.04.685.065 1.03.21 3.247.45 6.934-1.046 9.916-1.871 3.732-6.574 4.272-9.065 4.272ZM15.407.156c-3.768.32-7.44 1.13-8.79 5.158-.831 2.471-.61 5.038-.406 7.504.147 1.4.207 2.806.18 4.213-.025.665-.085 1.37-.14 2.116-.23 2.922-.5 6.239.966 8.605.615 1 2.596 3.337 7.67 3.502 2.196.08 7.504-.17 9.505-4.142 1.47-2.942 1.236-6.599 1.026-9.826 0-.35-.045-.695-.065-1.03a67.451 67.451 0 0 1-.08-3.353c0-2.941-.03-6.003-1.181-8.805A6.438 6.438 0 0 0 20.445.841a14.96 14.96 0 0 0-5.038-.685Z"}),l("path",{fill:"#fff",d:"M16.042 4.924c.65 3.777 6.824 2.781 5.938-1.03-.795-3.418-6.153-2.472-5.938 1.03Z"}),l("path",{fill:"#010101",d:"M18.979 7.39a3.457 3.457 0 0 1-1.13-.185 2.797 2.797 0 0 1-1.892-2.266 2.882 2.882 0 0 1 .78-2.222 3.407 3.407 0 0 1 2.002-1 3.202 3.202 0 0 1 2.031.35 2.727 2.727 0 0 1 1.296 1.806 2.643 2.643 0 0 1-.77 2.682 3.502 3.502 0 0 1-2.317.835Zm-2.847-2.476a2.626 2.626 0 0 0 1.776 2.126 3.417 3.417 0 0 0 3.277-.62 2.502 2.502 0 0 0 .716-2.502 2.672 2.672 0 0 0-3.132-2.031 2.887 2.887 0 0 0-2.637 3.027Z"}),l("path",{fill:"#fff",d:"M8.663 5.539c.84 3.287 6.103 2.441 5.908-.855-.235-3.953-6.714-3.207-5.908.855Z"}),l("path",{fill:"#010101",d:"M11.474 7.705a3.232 3.232 0 0 1-1.536-.375 2.727 2.727 0 0 1-1.355-1.776 2.757 2.757 0 0 1 .94-2.827 3.552 3.552 0 0 1 3.532-.45 2.672 2.672 0 0 1 1.601 2.402c.105 1.75-1.286 2.771-2.617 3.001a3.657 3.657 0 0 1-.565.025ZM8.763 5.52A2.732 2.732 0 0 0 12.03 7.52c1.26-.2 2.576-1.16 2.476-2.806a2.501 2.501 0 0 0-1.5-2.262 3.377 3.377 0 0 0-3.358.43 2.597 2.597 0 0 0-.885 2.637Z"}),l("path",{fill:"#fff",d:"M16.767 9.481c.049.521.049 1.046 0 1.566a1 1 0 0 1-.585.36.861.861 0 0 1-.655-.5c-.032-.59-.017-1.183.045-1.77l1.195.344Z"}),l("path",{fill:"#010101",d:"M16.237 11.483h-.025a.944.944 0 0 1-.725-.566 5.95 5.95 0 0 1 0-1.215c0-.185.03-.38.035-.57v-.15l1.35.414v.085c0 .16 0 .33.026.5.045.358.045.72 0 1.076v.025a.75.75 0 0 1-.476.34l-.155.06h-.03Zm-.58-.63a.766.766 0 0 0 .56.445l.14-.056a.6.6 0 0 0 .366-.26c.04-.332.04-.668 0-1 0-.155 0-.305-.026-.455l-1-.306c0 .155 0 .31-.03.46-.044.388-.05.778-.015 1.166l.005.005ZM10.114 5.964c.491 0 .89-.432.89-.965 0-.534-.399-.966-.89-.966-.492 0-.89.432-.89.966 0 .533.398.965.89.965Z"}),l("path",{fill:"#fff",d:"M10.519 5.464c.116 0 .21-.11.21-.245s-.094-.245-.21-.245c-.116 0-.21.11-.21.245s.094.245.21.245Z"}),l("path",{fill:"#010101",d:"M17.568 5.724c.483 0 .875-.432.875-.965 0-.533-.392-.966-.875-.966-.484 0-.876.433-.876.966 0 .533.392.965.876.965Z"}),l("path",{fill:"#fff",d:"M17.963 5.224c.114 0 .206-.11.206-.245 0-.136-.092-.245-.206-.245-.113 0-.205.11-.205.245s.092.245.205.245ZM14.266 9.406c-.39.941.215 2.822 1.27 1.436a11.12 11.12 0 0 1 .046-1.77l-1.316.334Z"}),l("path",{fill:"#010101",d:"M14.812 11.428a.5.5 0 0 1-.26-.07c-.426-.246-.691-1.251-.39-2.002v-.04l1.5-.38v.12c0 .195 0 .39-.035.575a5.71 5.71 0 0 0 0 1.181v.065a1.056 1.056 0 0 1-.815.55Zm-.496-1.947c-.215.586-.045 1.501.33 1.716.27.155.57-.115.78-.385a6.128 6.128 0 0 1 0-1.18c0-.146 0-.3.031-.45l-1.14.3Z"}),l("path",{fill:"#F6D2A2",d:"M14.38 7.595a1.146 1.146 0 0 0-.94 1.601c.5.9 1.611-.08 2.302 0 .795 0 1.45.84 2.09.15.711-.77-.304-1.5-1.1-1.856l-2.351.105Z"}),l("path",{fill:"#231F20",d:"M17.268 9.727a2 2 0 0 1-.73-.206 2.207 2.207 0 0 0-.791-.22c-.287 0-.57.062-.83.18-.561.195-1.196.416-1.557-.23a1.08 1.08 0 0 1 0-1.05 1.281 1.281 0 0 1 1.001-.686l2.406-.105c.59.25 1.266.706 1.381 1.236a.955.955 0 0 1-.88 1.08Zm-1.501-.606c.296.024.584.104.85.235.45.19.806.335 1.166-.055a.664.664 0 0 0 .205-.605c-.1-.46-.735-.88-1.256-1.1l-2.326.094a1.11 1.11 0 0 0-.85.59.906.906 0 0 0 0 .876c.285.5.795.335 1.34.15.274-.122.57-.185.87-.185Z"}),l("path",{fill:"#010101",d:"M14.266 7.56c-.055-1.25 2.336-1.41 2.617-.36.28 1.05-2.502 1.29-2.617.36Z"}))},C_t=T_t;var LF={};J(LF,{icon:()=>L_t});var Tkr=T(z());var M_t=["title","titleId"];function Tue(){return Tue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function R_t(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}var D_t=function(t){var r=t.title,n=t.titleId,o=A_t(t,M_t),i=fn("logo_google_g");return l("svg",Tue({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("defs",null,l("path",{id:i("a"),d:"M15.319 3.278c0-1.131-.102-2.22-.29-3.264H0v6.172h8.587c-.37 1.995-1.494 3.685-3.184 4.816v4.004h5.157c3.017-2.778 4.758-6.869 4.758-11.728z"}),l("path",{id:i("c"),d:"M14.343 12.956c4.308 0 7.92-1.43 10.56-3.866l-5.157-4.004c-1.429.958-3.256 1.523-5.403 1.523-4.156 0-7.674-2.806-8.928-6.578H.084v4.134c2.625 5.215 8.021 8.79 14.259 8.79z"}),l("path",{id:i("e"),d:"M7.028 10.25a9.59 9.59 0 0 1-.5-3.032 9.59 9.59 0 0 1 .5-3.032V.052h-5.33A15.95 15.95 0 0 0 0 7.218c0 2.575.617 5.012 1.697 7.166l5.331-4.134z"}),l("path",{id:i("g"),d:"M14.343 6.392c2.342 0 4.446.805 6.1 2.386l4.576-4.576C22.256 1.627 18.644.046 14.343.046 8.105.046 2.709 3.622.083 8.836l5.332 4.134c1.254-3.77 4.772-6.578 8.928-6.578z"})),l("g",{fill:"none",fillRule:"evenodd"},l("g",{transform:"translate(15.955 13.087)"},l("mask",{id:i("b"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("a"))})),l("path",{fill:"#4285F4",fillRule:"nonzero",d:"M.001 15.006h15.318V.014H.001z",mask:"url(#".concat(i("b"),")")})),l("g",{transform:"translate(1.613 19.003)"},l("mask",{id:i("d"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("c"))})),l("path",{fill:"#34A853",fillRule:"nonzero",d:"M.084 12.956h24.819V.031H.084z",mask:"url(#".concat(i("d"),")")})),l("g",{transform:"translate(0 8.784)"},l("mask",{id:i("f"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("e"))})),l("path",{fill:"#FBBC04",fillRule:"nonzero",d:"M0 14.384h7.028V.052H0z",mask:"url(#".concat(i("f"),")")})),l("g",{transform:"translate(1.613)"},l("mask",{id:i("h"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("g"))})),l("path",{fill:"#EA4335",fillRule:"nonzero",d:"M.084 12.97h24.935V.046H.084z",mask:"url(#".concat(i("h"),")")}))))},L_t=D_t;var NF={};J(NF,{icon:()=>W_t});var Akr=T(z());var N_t=["title","titleId"];function Cue(){return Cue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function B_t(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}var z_t=function(t){var r=t.title,n=t.titleId,o=F_t(t,N_t),i=fn("logo_haproxy");return l("svg",Cue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{clipPath:"url(#".concat(i("a"),")")},l("path",{stroke:"#05486D",strokeMiterlimit:10,strokeWidth:.12,d:"m16.05 13.237-3.11-3.612"}),l("path",{stroke:"#05486D",strokeMiterlimit:10,strokeWidth:.06,d:"m6.117 10.528 2.509 3.512"}),l("path",{stroke:"#05486D",strokeMiterlimit:10,strokeWidth:.12,d:"m16.05 13.237 3.11-3.612M19.863 17.15l3.712-3.11M19.863 17.15l3.712 3.311M19.16 24.575l-3.11-3.511M12.94 24.575l3.11-3.511M8.625 20.26l3.512-3.11M8.625 14.04l3.512 3.11M16.05 13.238l-7.425.802M16.05 13.238l7.525.802M19.863 17.15l-.702-7.525M19.863 17.15l-.702 7.425M23.575 20.461l-7.525.602M8.625 20.261l7.425.803M12.94 24.575l-.803-7.425M12.94 9.625l-.803 7.525"}),l("path",{stroke:"#05486D",strokeMiterlimit:10,strokeWidth:.06,d:"m5.114 15.043 3.511-1.003M9.328 7.117l3.612 2.509M13.743 5.512l-.803 4.113M13.743 5.512l5.418 4.113M18.358 5.512l.803 4.113M22.773 7.117 19.16 9.626M25.983 10.528l-6.822-.903M23.575 14.04l2.408-3.512M23.575 14.04l3.412 1.003M23.575 14.04l3.412 5.217M18.358 5.512 12.94 9.625M23.576 14.04l-.803-6.923M23.575 20.462l3.412-1.204M23.575 20.462l3.412-5.418M23.575 20.461l2.408 3.312M23.576 20.461l-.803 6.723M19.16 24.575l3.613 2.609M19.16 24.575l6.823-.802M19.16 24.575l-.802 4.214M19.16 24.575l-5.417 4.214M12.94 24.575l.803 4.214M12.94 24.575l5.418 4.214M12.94 24.575l-3.612 2.609M12.94 24.575l-6.823-.802M8.626 20.261l-2.509 3.512M8.625 20.261l.703 6.923M8.625 20.26l-3.511-1.002M8.625 14.04l-3.511 5.217M8.625 20.26l-3.511-5.217M9.328 7.117l-.703 6.923M6.117 10.528l6.823-.903"}),l("path",{stroke:"#083D5F",strokeMiterlimit:10,strokeWidth:.05,d:"M9.327 7.117 6.72 5.813M9.328 7.117l-.201-2.91M13.742 5.512 9.127 4.207M13.742 5.512l-2.006-2.509M13.743 5.512l.802-2.91M9.328 7.117l2.408-4.114M18.358 5.512l-3.813-2.91M18.358 5.512l-.803-3.01M13.743 5.512l3.812-3.01M18.358 5.512l2.007-2.509M22.773 7.117l-2.408-4.114M22.773 7.117l.301-2.91M18.358 5.512l4.716-1.305M22.773 7.117l2.709-1.405M22.773 7.117l4.716.703M25.983 10.528l1.505-2.709M25.984 10.528l-.502-4.816M25.983 10.528l3.11-.3M25.983 10.528l4.214 2.308M26.987 15.044l2.107-4.817M26.987 15.043l3.21-2.207M26.987 15.043l3.612.703M26.987 19.258l3.612-3.512M26.987 19.258l3.712-.703M26.987 15.043l3.712 3.512M26.987 19.258l3.11 2.107M25.983 23.773l4.114-2.409M25.983 23.773l3.11.3M26.987 19.258l2.107 4.816M25.983 23.773l1.505 2.709M25.984 23.773l-.502 4.715M25.482 28.488l-2.71-1.304M22.773 27.184l.2 2.91M22.773 27.184l4.716-.703M22.773 27.184l-2.408 4.114M18.358 28.79l2.007 2.508M18.358 28.79l4.615 1.304M18.358 28.79l-.803 3.01M18.358 28.79l-3.813 3.01M13.743 28.79l.802 3.01M13.743 28.79l3.812 3.01M13.742 28.79l-2.006 2.508M9.328 27.184l2.408 4.114M13.742 28.79l-4.615 1.404M9.328 27.184l-.201 3.01M9.328 27.184l-2.71 1.404M6.117 23.773l.502 4.816M9.328 27.184l-4.716-.703M6.117 23.773l-1.505 2.709M6.117 23.773l-3.11.3M6.117 23.773l-4.214-2.409M5.114 19.258l-3.21 2.107M5.114 19.258 1.4 18.555M5.114 19.258l-2.107 4.816M5.114 15.043 1.4 18.555M5.114 19.258 1.4 15.746M5.114 15.043l-3.11-2.106M5.114 15.043l-3.713.703M5.114 15.044l-2.007-4.817M6.117 10.528l-3.01-.3M6.117 10.528l-4.114 2.408M6.117 10.528 4.712 7.92M6.117 10.528l.602-4.715M9.328 7.117l-4.616.803"}),l("path",{fill:"#006DA8",d:"M13.943 15.244h-3.612v3.592h3.612v-3.592ZM17.756 11.331h-3.612v3.592h3.612v-3.592ZM17.756 19.157h-3.612v3.592h3.612v-3.592ZM21.669 15.244h-3.612v3.592h3.612v-3.592Z"}),l("path",{fill:"#2F77BC",d:"M20.365 8.421h-2.509V10.9h2.509V8.42ZM14.144 8.321h-2.509v2.478h2.509V8.321ZM9.83 12.836H7.32v2.478H9.83v-2.478ZM9.83 18.956H7.32v2.479H9.83v-2.479ZM24.679 18.956H22.17v2.479h2.509v-2.479ZM24.679 12.736H22.17v2.478h2.509v-2.478Z"}),l("path",{fill:"#139BD7",d:"M6.92 9.625H5.314v1.676H6.92V9.625ZM10.13 6.214H8.526v1.675h1.606V6.214ZM14.445 4.609h-1.606v1.675h1.606V4.61ZM5.916 14.14H4.311v1.676h1.605V14.14ZM26.786 9.826H25.08v1.646h1.706V9.826ZM23.575 6.415H21.87V8.06h1.705V6.415ZM19.26 4.81h-1.705v1.645h1.706V4.809ZM27.689 14.441h-1.605v1.646h1.605V14.44Z"}),l("path",{fill:"#2F77BC",d:"M14.144 23.27h-2.509v2.479h2.509v-2.478ZM20.264 23.27h-2.508v2.479h2.508v-2.478Z"}),l("path",{fill:"#139BD7",d:"M26.685 22.77H25.08v1.675h1.605v-1.676ZM23.375 26.08H21.77v1.676h1.605V26.08ZM19.06 27.686h-1.605v1.675h1.605v-1.675ZM27.589 18.254h-1.606v1.676h1.606v-1.676ZM6.92 22.97H5.214v1.646H6.92V22.97ZM10.03 26.381H8.325v1.646h1.705V26.38ZM14.445 27.987h-1.706v1.645h1.706v-1.645ZM5.816 18.355H4.21V20h1.606v-1.645Z"}),l("path",{fill:"#03A9DA",d:"M7.12 5.311h-.903v.933h.903v-.933ZM1.903 15.244H1v.933h.903v-.933ZM25.782 5.21h-.903v.934h.903V5.21ZM2.505 12.335h-.903v.933h.903v-.934ZM12.137 2.502h-.903v.933h.903v-.933ZM3.508 9.726h-.903v.933h.903v-.933ZM5.113 7.318H4.21v.933h.903v-.933ZM9.629 3.806h-.903v.903h.903v-.903ZM15.047 2.1h-.903v.903h.903V2.1ZM23.374 3.605h-.903v.933h.903v-.933ZM29.295 9.726h-.903v.933h.903v-.933ZM30.498 12.335h-.903v.933h.903v-.934ZM27.69 7.318h-.904v.933h.903v-.933ZM30.9 15.144h-.903v.933h.903v-.933ZM17.856 2h-.903v.933h.903V2ZM20.665 2.602h-.903v.933h.903v-.933Z"}),l("path",{fill:"#03A9DA",d:"M7.12 5.311h-.903v.933h.903v-.933ZM1.903 15.244H1v.933h.903v-.933ZM25.782 5.21h-.903v.934h.903V5.21ZM2.505 12.335h-.903v.933h.903v-.934ZM12.137 2.502h-.903v.933h.903v-.933ZM3.508 9.726h-.903v.933h.903v-.933ZM5.113 7.318H4.21v.933h.903v-.933ZM9.629 3.806h-.903v.903h.903v-.903ZM15.047 2.1h-.903v.903h.903V2.1ZM23.374 3.605h-.903v.933h.903v-.933ZM29.295 9.726h-.903v.933h.903v-.933ZM30.498 12.335h-.903v.933h.903v-.934ZM27.69 7.318h-.904v.933h.903v-.933ZM30.9 15.144h-.903v.933h.903v-.933ZM17.856 2h-.903v.933h.903V2ZM20.665 2.602h-.903v.933h.903v-.933ZM25.682 27.886h-.903v.933h.903v-.933ZM31 17.953h-.903v.933H31v-.933ZM7.12 27.987h-.903v.933h.903v-.933ZM30.398 20.763h-.903v.933h.903v-.933ZM20.665 30.596h-.903v.933h.903v-.933ZM29.295 23.371h-.903v.933h.903v-.933ZM27.69 25.78h-.904v.932h.903v-.933ZM23.274 29.793h-.903v.902h.903v-.902ZM17.756 31.498h-.903v.903h.903v-.903ZM9.428 29.492h-.903v.933h.903v-.933ZM3.508 23.472h-.903v.933h.903v-.933ZM2.304 20.863h-.903v.933h.903v-.933ZM5.013 25.88H4.11v.933h.903v-.933ZM1.903 17.953H1v.933h.903v-.933ZM14.947 31.498h-.903v.933h.902v-.933ZM12.137 30.596h-.903v.933h.903v-.933Z"})),l("defs",null,l("clipPath",{id:i("a")},l("path",{fill:"#fff",d:"M0 0h32v32H0V0Z"}))))},W_t=z_t;var FF={};J(FF,{icon:()=>q_t});var Lkr=T(z());var H_t=["title","titleId"];function Mue(){return Mue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $_t(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}var Z_t=function(t){var r=t.title,n=t.titleId,o=V_t(t,H_t),i=fn("logo_ibm");return l("svg",Mue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("defs",null,l("linearGradient",{id:i("a"),x1:"8.005%",x2:"53.33%",y1:"79.323%",y2:"79.324%"},l("stop",{offset:"0%",stopColor:"#3BDADE",stopOpacity:0}),l("stop",{offset:"30.476%",stopColor:"#36CEE1",stopOpacity:.383}),l("stop",{offset:"100%",stopColor:"#21A2EF"})),l("linearGradient",{id:i("b"),x1:"19.496%",x2:"71.309%",y1:"83.344%",y2:"17.638%"},l("stop",{offset:"0%",stopColor:"#207FFA"}),l("stop",{offset:"100%",stopColor:"#6EAFF1",stopOpacity:0})),l("linearGradient",{id:i("c"),x1:"21.909%",x2:"21.909%",y1:"96.314%",y2:"29.454%"},l("stop",{offset:"0%",stopColor:"#42C1E6",stopOpacity:0}),l("stop",{offset:"57.076%",stopColor:"#6FB9EF"}),l("stop",{offset:"86.716%",stopColor:"#60CBE7"}),l("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),l("linearGradient",{id:i("d"),x1:"96.205%",x2:"-1.172%",y1:"12.667%",y2:"-22.252%"},l("stop",{offset:"0%",stopColor:"#6FB9EF",stopOpacity:0}),l("stop",{offset:"22.427%",stopColor:"#38D2E0"}),l("stop",{offset:"91.203%",stopColor:"#6ABFEC"}),l("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),l("linearGradient",{id:i("e"),x1:"9.408%",x2:"80.589%",y1:"87.764%",y2:"83.138%"},l("stop",{offset:"0%",stopColor:"#126CFD"}),l("stop",{offset:"100%",stopColor:"#21A1EF"}))),l("g",{fill:"none",fillRule:"evenodd"},l("path",{fill:"#38D2E0",d:"M4.262 13.122a.604.604 0 0 1-.3-.08l-2.844-1.625a.617.617 0 0 1-.295-.734.608.608 0 0 1 .868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 0 1-.533.32Zm4.914-4.864a.603.603 0 0 1-.522-.298L7.012 5.144a.615.615 0 0 1 .115-.782.606.606 0 0 1 .91.157l1.64 2.813a.617.617 0 0 1-.158.819c-.1.07-.22.107-.343.107Zm6.107-2.416V2.635a.624.624 0 0 1 .575-.634.605.605 0 0 1 .443.164.593.593 0 0 1 .186.431v3.285a.593.593 0 0 1-.186.43.605.605 0 0 1-.443.165.624.624 0 0 1-.575-.634Zm7.312 2.416a.604.604 0 0 1-.343-.107.617.617 0 0 1-.159-.82l1.64-2.812a.602.602 0 0 1 .911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 0 1-.522.298Zm4.914 4.864a.602.602 0 0 1-.534-.319.616.616 0 0 1 .262-.81l2.818-1.611a.626.626 0 0 1 .783.112.592.592 0 0 1-.156.906l-2.873 1.643a.604.604 0 0 1-.3.08Z"}),l("path",{fill:"url(#".concat(i("a"),")"),d:"m16.536 19.645-1.204-.009c.026-3.377 2.146-6.391 5.337-7.585a8.308 8.308 0 0 1 9.068 2.197l-.897.795a7.097 7.097 0 0 0-7.745-1.876c-2.726 1.019-4.537 3.593-4.559 6.478Z",transform:"translate(0 2)"}),l("path",{fill:"url(#".concat(i("b"),")"),d:"M.029 20.909c.022-3.354 2.475-6.208 5.815-6.764l.201 1.176c-2.764.46-4.794 2.82-4.812 5.596L.029 20.91Z",transform:"translate(0 2)"}),l("path",{fill:"url(#".concat(i("c"),")"),d:"M8.246 24.737a10.625 10.625 0 0 1 0-15.131c4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 0 1 1.384 1.678l-1.004.657a9.517 9.517 0 0 0-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.442 9.442 0 0 0 0 13.445l-.851.843Z",transform:"translate(0 2)"}),l("path",{fill:"url(#".concat(i("d"),")"),d:"M5.836 13.234c.404-1.332 1.33-2.56 2.41-3.628 4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 0 1 1.384 1.678l-1.004.657a9.517 9.517 0 0 0-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.474 9.474 0 0 0-2.074 3.06c-1.452 3.45-2.358 3.593-1.187-.275Z",transform:"translate(0 2)"}),l("path",{fill:"url(#".concat(i("e"),")"),d:"M23.524 27.87H6.96a7.012 7.012 0 0 1-4.922-2.059A6.876 6.876 0 0 1 .029 20.91l1.204.009a5.69 5.69 0 0 0 1.66 4.055 5.802 5.802 0 0 0 4.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 0 0-1.18-7.505l.897-.795a8.112 8.112 0 0 1 1.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838h-.063Z",transform:"translate(0 2)"})))},q_t=Z_t;var BF={};J(BF,{icon:()=>K_t});var Bkr=T(z());var U_t=["title","titleId"];function Aue(){return Aue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function J_t(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}var X_t=function(t){var r=t.title,n=t.titleId,o=G_t(t,U_t);return l("svg",Aue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m.047 22.909 1.186.009a5.69 5.69 0 0 0 1.66 4.055 5.802 5.802 0 0 0 4.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 0 0-1.18-7.505l.897-.795a8.112 8.112 0 0 1 1.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838H6.96a7.012 7.012 0 0 1-4.922-2.06A6.876 6.876 0 0 1 .029 22.91h.018-.018c.017-2.71 1.62-5.091 3.997-6.2.114-.054.32.29.619 1.03a5.71 5.71 0 0 0-3.412 5.18l-1.186-.01Zm4.215-9.787a.604.604 0 0 1-.3-.08l-2.844-1.625a.617.617 0 0 1-.295-.734.608.608 0 0 1 .868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 0 1-.533.32Zm4.914-4.864a.603.603 0 0 1-.522-.298L7.012 5.144a.615.615 0 0 1 .115-.782.606.606 0 0 1 .91.157l1.64 2.813a.617.617 0 0 1-.158.819c-.1.07-.22.107-.343.107Zm6.107-2.416V2.635a.624.624 0 0 1 .575-.634.605.605 0 0 1 .443.164.593.593 0 0 1 .186.431v3.285a.593.593 0 0 1-.186.43.605.605 0 0 1-.443.165.624.624 0 0 1-.575-.634Zm7.312 2.416a.604.604 0 0 1-.343-.107.617.617 0 0 1-.159-.82l1.64-2.812a.602.602 0 0 1 .911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 0 1-.522.298Zm4.914 4.864a.602.602 0 0 1-.534-.319.616.616 0 0 1 .262-.81l2.818-1.611a.626.626 0 0 1 .783.112.592.592 0 0 1-.156.906l-2.873 1.643a.604.604 0 0 1-.3.08ZM16.366 19.78H16a2.322 2.322 0 0 1-.302 0c-.09-.011-.152.05-.086-.196a8.204 8.204 0 0 1 5.057-5.533 8.308 8.308 0 0 1 9.068 2.197l-.897.795a7.097 7.097 0 0 0-7.745-1.876 7.009 7.009 0 0 0-4.288 4.613c-.115.399-.115.399 0 0h-.44ZM6.154 23.826a10.626 10.626 0 0 1 2.092-12.22c4.219-4.178 11.06-4.178 15.279 0l-.851.843c-3.75-3.713-9.828-3.713-13.577 0A9.442 9.442 0 0 0 7.264 23.36a6.99 6.99 0 0 0-.418.172l-.212.094-.162.077-.094.03-.09.039c.648-.282.965-.42.95-.412-.026.015-1.073.489-1.084.466Z"}))},K_t=X_t;var zF={};J(zF,{icon:()=>rSt});var Wkr=T(z());var Y_t=["title","titleId"];function Rue(){return Rue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function eSt(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}var tSt=function(t){var r=t.title,n=t.titleId,o=Q_t(t,Y_t);return l("svg",Rue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M21.565 17.623c-1.173 0-2.225.52-2.945 1.337l-1.845-1.306c.196-.54.309-1.118.309-1.724 0-.596-.109-1.165-.298-1.696l1.84-1.293a3.914 3.914 0 0 0 2.939 1.331 3.93 3.93 0 0 0 3.926-3.926 3.93 3.93 0 0 0-3.926-3.926 3.93 3.93 0 0 0-3.926 3.926c0 .387.058.761.163 1.115l-1.842 1.293a5.068 5.068 0 0 0-3.14-1.825V8.71a3.932 3.932 0 0 0 3.119-3.842A3.93 3.93 0 0 0 12.012.941a3.93 3.93 0 0 0-3.926 3.926 3.93 3.93 0 0 0 3.048 3.824v2.249a5.075 5.075 0 0 0-4.193 4.99 5.075 5.075 0 0 0 4.229 4.995V23.3a3.931 3.931 0 0 0-3.084 3.833 3.93 3.93 0 0 0 3.926 3.926 3.93 3.93 0 0 0 3.927-3.926 3.931 3.931 0 0 0-3.084-3.833v-2.375a5.07 5.07 0 0 0 3.087-1.795l1.857 1.314c-.103.351-.16.721-.16 1.105a3.93 3.93 0 0 0 3.926 3.926 3.93 3.93 0 0 0 3.926-3.926 3.93 3.93 0 0 0-3.926-3.926Zm0-9.18c1.05 0 1.903.853 1.903 1.903s-.854 1.903-1.903 1.903a1.906 1.906 0 0 1-1.904-1.903c0-1.05.854-1.904 1.904-1.904ZM10.109 4.866c0-1.05.854-1.903 1.903-1.903 1.05 0 1.904.854 1.904 1.903 0 1.05-.854 1.904-1.904 1.904a1.906 1.906 0 0 1-1.903-1.904Zm3.807 22.266c0 1.05-.854 1.903-1.904 1.903a1.906 1.906 0 0 1-1.903-1.903c0-1.05.854-1.904 1.903-1.904 1.05 0 1.904.854 1.904 1.904Zm-1.904-8.548a2.658 2.658 0 0 1-2.655-2.655 2.658 2.658 0 0 1 2.655-2.655 2.658 2.658 0 0 1 2.655 2.655 2.658 2.658 0 0 1-2.655 2.655Zm9.553 4.867a1.906 1.906 0 0 1-1.904-1.903c0-1.05.854-1.904 1.904-1.904 1.05 0 1.903.854 1.903 1.904 0 1.05-.854 1.903-1.903 1.903Z"}))},rSt=tSt;var WF={};J(WF,{icon:()=>sSt});var Vkr=T(z());var nSt=["title","titleId"];function Due(){return Due=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function iSt(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}var aSt=function(t){var r=t.title,n=t.titleId,o=oSt(t,nSt);return l("svg",Due({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{fill:"#F04E98",d:"M4 0v28.789L28.935.017z"}),l("path",{d:"M4 12v16.789l11.906-13.738A24.721 24.721 0 0 0 4 12",className:"euiIcon__fillNegative"}),l("path",{fill:"#00BFB3",d:"M18.479 16.664 6.268 30.754l-1.074 1.237h23.192c-1.252-6.292-4.883-11.719-9.907-15.327"})))},sSt=aSt;var HF={};J(HF,{icon:()=>dSt});var Zkr=T(z());var lSt=["title","titleId"];function Lue(){return Lue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cSt(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}var pSt=function(t){var r=t.title,n=t.titleId,o=uSt(t,lSt);return l("svg",Lue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#326CE5",d:"M15.89.003a2.14 2.14 0 0 1 1.03.206l11.127 5.304a2.11 2.11 0 0 1 1.15 1.429l2.75 11.921a2.09 2.09 0 0 1-.412 1.783l-7.697 9.56c-.404.5-1.016.792-1.663.791L9.827 31c-.648 0-1.26-.292-1.664-.793l-7.7-9.558a2.107 2.107 0 0 1-.41-1.783L2.798 6.945a2.11 2.11 0 0 1 1.151-1.43L15.074.21c.255-.122.532-.192.815-.206zM16 4.06c-.368 0-.667.33-.667.738l.002.019c0 .055-.003.122-.002.17.01.236.06.416.091.632.057.464.103.849.074 1.206-.028.135-.127.258-.216.344l-.015.281a8.569 8.569 0 0 0-5.555 2.666 9.98 9.98 0 0 1-.24-.17c-.12.016-.24.053-.396-.038-.298-.2-.57-.477-.898-.81-.15-.16-.26-.31-.438-.464-.04-.035-.103-.082-.148-.118a.793.793 0 0 0-.464-.175.642.642 0 0 0-.53.234c-.23.288-.156.726.163.98l.01.008c.044.035.098.08.138.11.19.14.363.212.552.323.398.246.729.45.99.695.103.108.12.3.134.383l.214.19a8.592 8.592 0 0 0-1.36 5.998l-.278.08c-.074.096-.177.245-.286.29-.343.107-.728.147-1.194.195-.218.018-.407.008-.639.051-.05.01-.122.029-.177.042l-.006.001-.01.003c-.393.095-.645.455-.564.81.082.355.465.57.86.485l.01-.001.013-.004c.055-.012.124-.026.172-.039.228-.06.393-.15.597-.228.44-.158.806-.29 1.161-.341.149-.012.305.091.383.135l.29-.05a8.654 8.654 0 0 0 3.84 4.787l-.12.29c.043.113.091.265.059.376-.13.334-.35.688-.603 1.081-.122.182-.247.324-.357.532-.026.05-.06.126-.086.179-.17.365-.045.786.284.944.33.16.741-.008.919-.375l.001-.001v-.002c.025-.051.061-.12.083-.169.094-.215.125-.4.192-.609.176-.442.273-.905.515-1.194.067-.08.175-.11.287-.14l.151-.273a8.616 8.616 0 0 0 6.145.016l.142.256c.114.037.239.056.34.206.182.31.306.675.457 1.118.066.208.1.393.194.61.021.048.057.117.082.17.177.367.59.535.92.376.33-.158.455-.58.284-.945-.026-.052-.06-.129-.087-.179-.11-.208-.235-.348-.357-.53-.252-.393-.461-.72-.59-1.055-.055-.173.009-.28.05-.392-.025-.029-.079-.192-.11-.268a8.654 8.654 0 0 0 3.838-4.822c.086.014.236.04.285.05.1-.066.192-.152.373-.138.355.052.72.183 1.16.341.205.078.37.17.598.23.048.013.117.025.172.037l.013.004.01.002c.395.085.778-.131.86-.486.08-.355-.171-.715-.564-.81-.057-.013-.138-.035-.193-.045-.232-.044-.42-.033-.64-.051-.465-.049-.85-.089-1.193-.196-.14-.054-.239-.22-.287-.289l-.27-.078a8.572 8.572 0 0 0-.139-3.104 8.599 8.599 0 0 0-1.247-2.88c.068-.062.199-.177.236-.21.01-.12.001-.245.125-.377.262-.246.592-.45.99-.695.19-.11.364-.182.554-.322.043-.032.101-.082.146-.118.32-.255.393-.693.164-.98-.23-.287-.674-.314-.993-.06-.046.036-.107.083-.148.118-.179.153-.29.305-.44.464-.328.333-.6.611-.898.812-.129.075-.318.049-.404.044l-.253.18a8.732 8.732 0 0 0-5.528-2.666 16.036 16.036 0 0 1-.015-.297c-.087-.083-.192-.154-.218-.333-.029-.357.02-.742.076-1.206.03-.216.082-.396.09-.632.003-.053 0-.13 0-.189 0-.408-.299-.738-.667-.738zm-.834 5.156-.198 3.488-.014.007a.587.587 0 0 1-.932.449l-.006.002-2.864-2.027a6.862 6.862 0 0 1 4.014-1.919zm1.668 0a6.922 6.922 0 0 1 3.99 1.92l-2.846 2.015-.01-.004a.588.588 0 0 1-.933-.448l-.003-.001-.198-3.482zm-6.72 3.222 2.614 2.335-.003.014a.585.585 0 0 1-.23 1.008l-.003.01-3.352.967a6.838 6.838 0 0 1 .973-4.334zm11.753.001c.388.63.683 1.331.858 2.093a6.91 6.91 0 0 1 .145 2.229l-3.37-.97-.002-.013a.586.586 0 0 1-.23-1.008l-.002-.007 2.6-2.324zm-6.404 2.515h1.071l.666.83-.239 1.038-.962.461-.964-.463-.24-1.037.668-.83zm3.435 2.844a.585.585 0 0 1 .135.01l.005-.008 3.468.586a6.858 6.858 0 0 1-2.776 3.481l-1.346-3.246.004-.005a.586.586 0 0 1 .51-.818zm-5.824.014a.587.587 0 0 1 .53.817l.01.012-1.331 3.214a6.886 6.886 0 0 1-2.767-3.458l3.437-.582.006.007a.595.595 0 0 1 .115-.01zm2.904 1.407a.582.582 0 0 1 .275.059.583.583 0 0 1 .263.25h.013l1.694 3.057c-.22.073-.446.136-.677.189a6.896 6.896 0 0 1-3.758-.194l1.69-3.05h.003a.588.588 0 0 1 .497-.31z"}))},dSt=pSt;var VF={};J(VF,{icon:()=>gSt});var Ukr=T(z());var fSt=["title","titleId"];function Nue(){return Nue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mSt(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}var vSt=function(t){var r=t.title,n=t.titleId,o=hSt(t,fSt);return l("svg",Nue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#0080D5",d:"M2 10v13a9 9 0 0 1 9 9h13c0-12.15-9.85-22-22-22"}),l("path",{d:"M14 13.565V32h10c0-7.722-3.981-14.51-10-18.436",className:"euiIcon__fillNegative"}),l("path",{fill:"#00BFB3",d:"M14 0v10.226C21.666 14.468 26.869 22.636 26.869 32H30V16c0-8.837-7.163-16-16-16"}))},gSt=vSt;var $F={};J($F,{icon:()=>xSt});var Jkr=T(z());var ySt=["title","titleId"];function Fue(){return Fue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wSt(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}var OSt=function(t){var r=t.title,n=t.titleId,o=bSt(t,ySt);return l("svg",Fue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#3EBEB0",d:"M19 32h11V20H19z"}),l("path",{fill:"#FEC514",d:"M4 0H3v20h13v-8C16 5.373 10.627 0 4 0"}),l("path",{d:"M3 20c0 6.627 5.373 12 12 12h1V20H3Z",className:"euiIcon__fillNegative"}))},xSt=OSt;var ZF={};J(ZF,{icon:()=>PSt});var Kkr=T(z());var _St=["title","titleId"];function Bue(){return Bue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ISt(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}var ESt=function(t){var r=t.title,n=t.titleId,o=SSt(t,_St);return l("svg",Bue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#22A7F3",d:"M25.5 9.5c0 6.65-9.5 11.425-9.5 11.425S6.5 16.15 6.5 9.5A9.5 9.5 0 0 1 16 0a9.5 9.5 0 0 1 9.5 9.5"}),l("path",{d:"M16 20.925s4.326-2.183 7.141-5.645l-2.505-1.878a7.725 7.725 0 0 0-9.272 0L8.859 15.28C11.674 18.742 16 20.925 16 20.925",className:"euiIcon__fillNegative"}),l("path",{fill:"#FA744E",d:"M25.53 17.073a21.124 21.124 0 0 1-2.834 2.916c-2.62 2.235-5.239 3.561-5.349 3.616L16 24.282l-1.348-.677c-.109-.055-2.728-1.381-5.349-3.616a21.182 21.182 0 0 1-2.834-2.916L0 21.925l11.364 8.523a7.724 7.724 0 0 0 9.271 0L32 21.925l-6.47-4.852Z"}))},PSt=ESt;var qF={};J(qF,{icon:()=>MSt});var Qkr=T(z());var kSt=["title","titleId"];function zue(){return zue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function TSt(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}var CSt=function(t){var r=t.title,n=t.titleId,o=jSt(t,kSt),i=fn("logo_memcached");return l("svg",zue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("defs",null,l("radialGradient",{id:i("c"),cx:"41.406%",cy:"42.708%",r:"0%",fx:"41.406%",fy:"42.708%"},l("stop",{offset:"0%",stopColor:"#DB7C7C"}),l("stop",{offset:"100%",stopColor:"#C83737"})),l("radialGradient",{id:i("d"),cx:"44.271%",cy:"42.708%",r:"0%",fx:"44.271%",fy:"42.708%"},l("stop",{offset:"0%",stopColor:"#DB7C7C"}),l("stop",{offset:"100%",stopColor:"#C83737"})),l("linearGradient",{id:i("a"),x1:"50%",x2:"50%",y1:"100%",y2:"0%"},l("stop",{offset:"0%",stopColor:"#574C4A"}),l("stop",{offset:"100%",stopColor:"#80716D"})),l("linearGradient",{id:i("b"),x1:"88.778%",x2:"30.149%",y1:"98.342%",y2:"-8.68%"},l("stop",{offset:"0%",stopColor:"#268D83"}),l("stop",{offset:"100%",stopColor:"#2EA19E"}))),l("g",{fill:"none"},l("path",{fill:"url(#".concat(i("a"),")"),d:"M0 21.567V10.352C0 1.294 1.293 0 10.342 0h11.236c9.049 0 10.341 1.294 10.341 10.352v11.215c0 9.059-1.292 10.352-10.341 10.352H10.342C1.292 31.92 0 30.626 0 21.567Z"}),l("path",{fill:"url(#".concat(i("b"),")"),d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27h4.904c-.466-2.483-2.14-13.824-.748-13.861.746.118 4.156 9.621 4.156 9.621s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.41-9.503 4.157-9.621c1.392.037-.282 11.378-.748 13.86h4.904s.82-9.31-.748-19.253h-4.54c-.865.01-4.153 5.777-4.531 5.777-.378 0-3.666-5.767-4.53-5.777H6.889Z"}),l("path",{fill:"url(#".concat(i("c"),")"),d:"M14.993 24.109a1.16 1.16 0 1 1-2.322 0 1.16 1.16 0 0 1 2.322 0Z"}),l("path",{fill:"url(#".concat(i("d"),")"),d:"M19.249 24.109a1.16 1.16 0 1 1-2.322 0 1.16 1.16 0 0 1 2.322 0Z"}),l("path",{fill:"#000",d:"M24.8 6.345c.707 4.79.873 9.388.86 12.813-.013 3.503-.214 5.78-.214 5.78h-4.128l-.443.332h4.904s.82-9.31-.748-19.254l-.232.329Zm-12.996-.121c1.288 1.433 3.516 5.237 3.823 5.237-.817-1.045-2.823-4.378-3.823-5.237Zm-1.84 4.852c-1.392.038.282 11.379.749 13.861H6.43l-.29.333h4.904c-.464-2.47-2.123-13.71-.769-13.861-.126-.19-.235-.32-.311-.333Zm11.326 0c-.746.119-4.156 9.622-4.156 9.622s-.751-.094-1.507-.094c-.447 0-.832.028-1.092.052l-.082.374s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.385-9.44 4.146-9.621c-.082-.208-.183-.33-.322-.333Z",opacity:.1}),l("path",{fill:"#FFF",d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27l.289-.325c-.148-2.197-.543-10.14.791-18.597h4.541c.096.002.225.08.374.208-.297-.33-.544-.538-.706-.54H6.889Zm13.601 0c-.864.01-4.152 5.777-4.53 5.777.154.197.279.333.332.333.378 0 3.666-5.767 4.53-5.777h4.008l.2-.333h-4.54Zm-9.881 5.725c1.103 1.657 3.844 9.29 3.844 9.29l.08-.373c-.676-1.856-3.256-8.814-3.903-8.917h-.021Zm11.346 0c.74 1.887-.66 11.295-1.08 13.529l.444-.348c.568-3.331 1.936-13.146.636-13.18Z",opacity:.3})))},MSt=CSt;var UF={};J(UF,{icon:()=>NSt});var rjr=T(z());var ASt=["title","titleId"];function Wue(){return Wue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function DSt(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}var LSt=function(t){var r=t.title,n=t.titleId,o=RSt(t,ASt);return l("svg",Wue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{fill:"#F04E98",d:"M2 32h28V20l-6.465-6.465a5 5 0 0 0-7.07 0L2 28v4Z"}),l("path",{d:"m16.465 13.535-3.536 3.536a9.965 9.965 0 0 0 7.07 2.93 9.965 9.965 0 0 0 7.072-2.93l-3.536-3.536a5 5 0 0 0-7.07 0",className:"euiIcon__fillNegative"}),l("path",{fill:"#FEC514",d:"M14.343 11.414A7.951 7.951 0 0 1 20 9.071c2.137 0 4.146.832 5.657 2.343l3.207 3.207A9.955 9.955 0 0 0 30 10.001c0-5.524-4.477-10-10-10-5.522 0-10 4.476-10 10 0 1.667.414 3.237 1.137 4.62l3.206-3.207Z"})))},NSt=LSt;var GF={};J(GF,{icon:()=>HSt});var ojr=T(z());var FSt=["title","titleId"];function Hue(){return Hue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zSt(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}var WSt=function(t){var r=t.title,n=t.titleId,o=BSt(t,FSt);return l("svg",Hue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#FFF",d:"m16.844 31.847-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345Z"}),l("path",{fill:"#A6A385",d:"m16.844 31.847-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345Z"}),l("path",{fill:"#FFF",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),l("path",{fill:"#499D4A",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),l("path",{fill:"#FFF",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473Z"}),l("path",{fill:"#58AA50",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473Z"})))},HSt=WSt;var JF={};J(JF,{icon:()=>USt});var ajr=T(z());var VSt=["title","titleId"];function Vue(){return Vue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ZSt(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}var qSt=function(t){var r=t.title,n=t.titleId,o=$St(t,VSt);return l("svg",Vue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"#00546B"},l("path",{d:"M29.456 24.276c-1.74-.043-3.088.131-4.219.61-.326.13-.848.13-.892.543.174.174.196.457.348.696.261.435.718 1.022 1.131 1.327.457.348.914.696 1.392 1 .848.522 1.805.827 2.631 1.349.48.304.957.695 1.436 1.022.24.173.391.456.696.565v-.065c-.153-.196-.196-.479-.348-.696-.218-.218-.435-.413-.653-.63a10.316 10.316 0 0 0-2.261-2.197c-.696-.479-2.219-1.131-2.501-1.936l-.044-.043c.479-.044 1.044-.218 1.5-.348.74-.196 1.414-.153 2.175-.348.348-.087.696-.196 1.044-.305v-.195c-.391-.392-.674-.914-1.087-1.284-1.11-.957-2.327-1.892-3.588-2.674-.675-.435-1.545-.718-2.262-1.088-.261-.13-.696-.196-.848-.413-.392-.479-.61-1.11-.892-1.675a54.922 54.922 0 0 1-1.783-3.784c-.392-.848-.63-1.696-1.11-2.479-2.24-3.697-4.675-5.937-8.416-8.134-.804-.456-1.761-.652-2.783-.891-.544-.022-1.088-.065-1.631-.087-.348-.152-.696-.566-1-.761-1.24-.783-4.437-2.48-5.35-.24-.588 1.414.87 2.806 1.37 3.524.37.5.848 1.065 1.109 1.63.152.37.195.762.347 1.153.348.957.675 2.023 1.131 2.914.24.457.5.936.805 1.349.174.239.478.348.544.74-.305.434-.327 1.087-.5 1.63-.783 2.458-.479 5.502.63 7.307.348.544 1.175 1.74 2.284 1.284.978-.392.76-1.632 1.043-2.719.066-.261.022-.435.153-.609v.044c.304.609.609 1.196.891 1.805.675 1.065 1.849 2.174 2.828 2.914.522.391.935 1.065 1.587 1.305v-.066h-.043c-.13-.195-.327-.282-.5-.435-.392-.39-.827-.87-1.131-1.304-.914-1.218-1.719-2.567-2.436-3.958-.348-.675-.653-1.414-.935-2.088-.13-.261-.13-.653-.348-.783-.327.478-.805.892-1.044 1.479-.413.935-.457 2.088-.61 3.284-.086.021-.043 0-.086.043-.696-.174-.935-.891-1.196-1.5-.653-1.545-.761-4.024-.196-5.807.152-.457.805-1.892.544-2.327-.13-.413-.566-.652-.805-.979a8.764 8.764 0 0 1-.783-1.392c-.522-1.217-.783-2.566-1.348-3.784-.261-.565-.718-1.152-1.087-1.674-.414-.587-.87-1-1.197-1.697-.108-.239-.26-.63-.087-.891.044-.174.13-.24.305-.283.283-.24 1.087.065 1.37.196.805.326 1.479.63 2.153 1.087.304.218.63.631 1.022.74h.457c.696.152 1.479.043 2.131.239 1.153.37 2.196.913 3.132 1.5a19.294 19.294 0 0 1 6.785 7.438c.261.5.37.957.609 1.479.457 1.066 1.022 2.153 1.479 3.197.456 1.022.891 2.066 1.544 2.914.326.457 1.63.696 2.218.935.435.196 1.11.37 1.5.61.74.456 1.48.978 2.175 1.478.348.26 1.436.805 1.501 1.24Z"}),l("path",{d:"M7.273 5.378c-.37 0-.63.043-.891.109v.043h.043c.174.348.479.587.696.892.174.348.326.696.5 1.044l.044-.044c.304-.217.457-.565.457-1.087-.131-.152-.153-.305-.261-.457-.13-.218-.414-.326-.588-.5Z"})))},USt=qSt;var XF={};J(XF,{icon:()=>YSt});var ljr=T(z());var GSt=["title","titleId"];function $ue(){return $ue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function XSt(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}var KSt=function(t){var r=t.title,n=t.titleId,o=JSt(t,GSt);return l("svg",$ue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{fill:"#119639",d:"m16 0 13.856 8v16L16 32 2.144 24V8z"}),l("path",{fill:"#FFF",fillRule:"nonzero",d:"M11.17 13.512v8.376a1.607 1.607 0 1 1-3.215 0V9.632c0-1.432 1.731-2.149 2.744-1.136l9.51 9.512V9.632a1.607 1.607 0 0 1 3.215 0v12.256c0 1.432-1.731 2.149-2.744 1.136l-9.51-9.512Z"})))},YSt=KSt;var KF={};J(KF,{icon:()=>n7t});var cjr=T(z());var QSt=["title","titleId"];function Zue(){return Zue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function t7t(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}var r7t=function(t){var r=t.title,n=t.titleId,o=e7t(t,QSt);return l("svg",Zue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#F04E98",d:"M10 32H7.238C3.793 32 1 28.865 1 24.998V15h9v17Z"}),l("path",{d:"M10 32h9V8h-9z",className:"euiIcon__fillNegative"}),l("path",{fill:"#07C",d:"M31 32h-9V0l1.973.024C27.866.072 31 3.731 31 8.228V32Z"}))},n7t=r7t;var YF={};J(YF,{icon:()=>l7t});var djr=T(z());var o7t=["title","titleId"];function que(){return que=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function a7t(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}var s7t=function(t){var r=t.title,n=t.titleId,o=i7t(t,o7t);return l("svg",que({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#A596FF",d:"M31.907.032v7.969l-7.952 7.951V7.967L31.907.032"}),l("path",{fill:"#333",d:"M16.003.032v7.969l7.952 7.951V7.967L16.003.032"}),l("path",{fill:"#A596FF",d:"M31.923 31.855h-7.968l-7.952-7.951h7.985l7.935 7.951"}),l("path",{fill:"#333",d:"M31.923 15.952h-7.968l-7.952 7.952h7.985l7.935-7.952"}),l("path",{fill:"#A596FF",d:"M.1 31.872v-7.968l7.952-7.952v7.985L.1 31.872"}),l("path",{fill:"#333",d:"M16.004 31.872v-7.968l-7.952-7.952v7.985l7.952 7.935"}),l("path",{fill:"#A596FF",d:"M.084.048h7.968L16.004 8H8.019L.084.048"}),l("path",{fill:"#333",d:"M.084 15.952h7.968L16.004 8H8.019L.084 15.952"})))},l7t=s7t;var QF={};J(QF,{icon:()=>f7t});var hjr=T(z());var u7t=["title","titleId"];function Uue(){return Uue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function p7t(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}var d7t=function(t){var r=t.title,n=t.titleId,o=c7t(t,u7t),i=fn("logo_php");return l("svg",Uue({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("defs",null,l("path",{id:i("a"),d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}),l("path",{id:i("d"),d:"M0 17.43h30.987V0H0z"}),l("path",{id:i("f"),d:"M0 17.43h30.987V0H0z"}),l("radialGradient",{id:i("b"),cx:"30.02%",cy:"82.422%",r:"124.814%",fx:"30.02%",fy:"82.422%",gradientTransform:"matrix(.52604 0 0 1 .142 0)"},l("stop",{offset:"0%",stopColor:"#AEB2D5"}),l("stop",{offset:"30%",stopColor:"#AEB2D5"}),l("stop",{offset:"75%",stopColor:"#484C89"}),l("stop",{offset:"100%",stopColor:"#484C89"}))),l("g",{fill:"none",fillRule:"evenodd",transform:"matrix(1 0 0 -1 .026 25.413)"},l("g",{transform:"translate(.592 .86)"},l("mask",{id:i("c"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("a"))})),l("g",{fill:"url(#".concat(i("b"),")"),fillRule:"nonzero",mask:"url(#".concat(i("c"),")")},l("path",{d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}))),l("mask",{id:i("e"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("d"))})),l("g",{mask:"url(#".concat(i("e"),")")},l("path",{fill:"#777BB3",fillRule:"nonzero",d:"M15.494 1.472c7.894 0 14.293 3.243 14.293 7.243s-6.4 7.244-14.293 7.244c-7.894 0-14.293-3.243-14.293-7.244 0-4 6.4-7.243 14.293-7.243"})),l("mask",{id:i("g"),fill:"#fff"},l("use",{xlinkHref:"#".concat(i("f"))})),l("g",{fillRule:"nonzero",mask:"url(#".concat(i("g"),")")},l("path",{fill:"#000",d:"M8.701 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306H8.433l-.575-2.959h.843ZM5.31 4.172a.161.161 0 0 0-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.686 3.686 0 0 0-.395-1.098 3.676 3.676 0 0 0-.727-.91 3.189 3.189 0 0 0-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 0 0-.158-.13H5.309Z"}),l("path",{fill:"#FFF",d:"M8.566 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.291-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636Zm1.551 1.883H6.833a.323.323 0 0 1-.317-.261L4.992 4.396a.323.323 0 0 1 .317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888ZM7.663 7.656h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36H8.3l-.638-3.282Zm2.454 4.52c.989 0 1.71-.26 2.162-.779.453-.518.59-1.242.41-2.172a3.51 3.51 0 0 0-.378-1.05 3.502 3.502 0 0 0-.695-.87 3.017 3.017 0 0 0-1.137-.683c-.417-.135-.948-.203-1.594-.203H7.422l-.405-2.085H5.309l1.524 7.841h3.284Z"}),l("path",{fill:"#000",d:"M16.763 6.257a.161.161 0 0 0-.159.192l.674 3.47c.064.33.049.566-.044.666-.057.061-.228.164-.732.164H15.28l-.847-4.361a.161.161 0 0 0-.159-.131H12.58a.161.161 0 0 0-.159.192l1.524 7.841c.015.076.082.13.159.13h1.694a.161.161 0 0 0 .159-.191l-.368-1.893h1.314c1 0 1.68-.176 2.075-.54.403-.37.529-.962.374-1.76l-.71-3.648a.161.161 0 0 0-.158-.131h-1.721Z"}),l("path",{fill:"#FFF",d:"M15.799 14.582h-1.695a.323.323 0 0 1-.317-.261L12.263 6.48a.323.323 0 0 1 .317-.385h1.695c.154 0 .287.11.317.262l.822 4.23h1.088c.504 0 .61-.107.614-.112.03-.033.07-.185.004-.526l-.674-3.47a.323.323 0 0 1 .317-.384h1.721c.155 0 .288.11.317.262l.71 3.648c.166.857.023 1.5-.424 1.91-.426.392-1.14.582-2.184.582h-1.118l.33 1.7a.323.323 0 0 1-.316.385m0-.323-.406-2.084h1.51c.95 0 1.605-.166 1.966-.497.36-.332.468-.869.324-1.611l-.709-3.649h-1.721l.674 3.47c.077.394.048.663-.085.807-.133.143-.416.215-.85.215h-1.354l-.873-4.492H12.58l1.524 7.841h1.695"}),l("path",{fill:"#000",d:"M22.033 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306h-1.038l-.575-2.959h.843Zm-3.392-3.645a.161.161 0 0 0-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.689 3.689 0 0 0-.395-1.098 3.676 3.676 0 0 0-.727-.91 3.189 3.189 0 0 0-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 0 0-.158-.13H18.64Z"}),l("path",{fill:"#FFF",d:"M21.898 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.292-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636Zm1.551 1.883h-3.284a.323.323 0 0 1-.317-.261l-1.524-7.841a.323.323 0 0 1 .317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888Zm-2.454-4.842h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36h-1.17l-.638-3.282Zm2.454 4.52c.989 0 1.71-.26 2.162-.779.454-.518.59-1.242.41-2.172a3.51 3.51 0 0 0-.378-1.05 3.502 3.502 0 0 0-.695-.87 3.017 3.017 0 0 0-1.137-.683c-.417-.135-.948-.203-1.594-.203h-1.463l-.405-2.085h-1.708l1.524 7.841h3.284Z"}))))},f7t=d7t;var eB={};J(eB,{icon:()=>y7t});var gjr=T(z());var h7t=["title","titleId"];function Gue(){return Gue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function v7t(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}var g7t=function(t){var r=t.title,n=t.titleId,o=m7t(t,h7t);return l("svg",Gue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#000",d:"M31.876 19.162c-.192-.564-.695-.956-1.345-1.05-.306-.045-.657-.026-1.072.057-.724.145-1.261.2-1.654.211 1.48-2.422 2.683-5.185 3.376-7.785 1.12-4.205.521-6.12-.178-6.987-1.85-2.293-4.551-3.525-7.809-3.563a14.239 14.239 0 0 0-4.06.551 15.573 15.573 0 0 0-2.373-.21c-1.567-.024-2.952.307-4.135.988a19.334 19.334 0 0 0-2.92-.711C6.85.208 4.549.563 2.866 1.716.828 3.112-.117 5.537.058 8.926.113 10 .734 13.273 1.71 16.376c.561 1.784 1.16 3.266 1.78 4.404.878 1.614 1.818 2.564 2.873 2.906.591.19 1.666.325 2.796-.588.143.168.334.335.588.49.322.198.716.359 1.109.454 1.418.344 2.745.258 3.878-.224.007.195.013.382.017.543.008.262.015.518.025.758.067 1.62.181 2.881.518 3.763l.07.201c.168.5.449 1.335 1.164 1.99.74.677 1.637.885 2.457.885.412 0 .804-.052 1.149-.124 1.227-.255 2.621-.643 3.63-2.036.953-1.316 1.417-3.299 1.5-6.423l.031-.253.02-.165.225.019.058.004c1.25.055 2.779-.202 3.718-.625.741-.334 3.119-1.55 2.559-3.194"}),l("path",{fill:"#336791",d:"M29.738 19.481c-3.717.744-3.973-.476-3.973-.476 3.925-5.648 5.566-12.817 4.15-14.571C26.052-.352 19.365 1.91 19.254 1.97l-.036.006a13.657 13.657 0 0 0-2.48-.25c-1.682-.027-2.958.427-3.927 1.14 0 0-11.928-4.766-11.374 5.992.118 2.289 3.383 17.318 7.278 12.779a70.443 70.443 0 0 1 2.798-3.064c.683.44 1.501.665 2.358.584l.067-.055c-.02.206-.011.408.027.647-1.004 1.087-.709 1.277-2.714 1.678-2.03.405-.837 1.127-.06 1.316.944.229 3.127.553 4.602-1.45l-.058.23c.393.304.669 1.985.623 3.508-.047 1.524-.078 2.57.232 3.387.31.817.619 2.655 3.255 2.107 2.203-.458 3.345-1.644 3.503-3.623.113-1.407.368-1.199.384-2.457l.205-.595c.236-1.907.037-2.522 1.394-2.236l.33.028c1 .044 2.307-.156 3.074-.502 1.652-.743 2.632-1.985 1.003-1.659"}),l("path",{fill:"#FFF",d:"M13.51 9.882c-.335-.045-.639-.004-.792.11a.28.28 0 0 0-.12.187c-.02.133.077.282.136.358.169.216.414.365.658.398.035.004.07.007.105.007.405 0 .774-.307.807-.533.04-.283-.383-.472-.795-.527m11.099.009c-.032-.222-.44-.285-.826-.233-.386.052-.76.22-.73.443.026.173.348.468.73.468a.718.718 0 0 0 .097-.006.947.947 0 0 0 .53-.281c.135-.138.213-.291.199-.391"}),l("path",{fill:"#FFF",d:"M30.975 19.397c-.142-.416-.598-.55-1.356-.398-2.25.45-3.056.139-3.321-.05 1.75-2.584 3.189-5.708 3.965-8.623.368-1.38.57-2.663.587-3.708.019-1.147-.183-1.99-.598-2.505-1.675-2.075-4.134-3.189-7.11-3.22-2.047-.022-3.775.486-4.11.629a10.549 10.549 0 0 0-2.313-.288c-1.536-.024-2.864.332-3.963 1.06a18.131 18.131 0 0 0-3.22-.82c-2.61-.407-4.683-.098-6.163.918C1.608 3.605.793 5.773.951 8.836c.053 1.03.658 4.2 1.614 7.236 1.258 3.996 2.625 6.257 4.063 6.723.169.054.363.092.577.092.525 0 1.168-.23 1.838-1.01a64.894 64.894 0 0 1 2.532-2.778 4.18 4.18 0 0 0 1.822.475l.005.048c-.11.127-.217.255-.321.385-.44.542-.532.655-1.95.938-.403.08-1.473.294-1.489 1.022-.017.795 1.266 1.13 1.412 1.165.509.123 1 .184 1.467.184 1.138 0 2.14-.363 2.94-1.064-.025 2.834.097 5.628.448 6.479.288.696.99 2.4 3.208 2.399a5.3 5.3 0 0 0 1.078-.119c2.315-.48 3.32-1.473 3.71-3.66.208-1.17.565-3.961.733-5.459.354.107.81.156 1.304.156 1.029 0 2.216-.212 2.961-.547.837-.377 2.346-1.3 2.072-2.104ZM25.462 9.278c-.008.442-.07.844-.137 1.262-.072.451-.145.917-.164 1.482-.019.55.052 1.123.12 1.676.14 1.118.282 2.268-.269 3.403a4.37 4.37 0 0 1-.243-.485c-.069-.161-.217-.42-.423-.777-.8-1.39-2.673-4.648-1.714-5.977.286-.396 1.01-.803 2.83-.584Zm-2.206-7.49c2.667.058 4.777 1.025 6.27 2.876 1.146 1.42-.116 7.879-3.767 13.45l-.111-.135-.046-.056c.943-1.51.759-3.006.595-4.331-.068-.544-.132-1.058-.115-1.541.016-.511.086-.95.154-1.375.082-.522.167-1.063.144-1.701a.684.684 0 0 0 .015-.24c-.06-.611-.78-2.441-2.247-4.098a10.094 10.094 0 0 0-3.572-2.604 12.407 12.407 0 0 1 2.68-.244ZM8.334 21.307c-.737.86-1.246.695-1.414.641-1.091-.353-2.357-2.59-3.474-6.136-.966-3.069-1.53-6.155-1.575-7.02-.141-2.737.543-4.644 2.033-5.669 2.426-1.668 6.414-.67 8.016-.163-.023.022-.047.042-.07.065-2.63 2.575-2.567 6.974-2.56 7.243 0 .104.008.251.02.453.046.74.13 2.117-.095 3.677-.209 1.45.252 2.868 1.264 3.892.104.105.213.205.327.3-.45.467-1.43 1.502-2.472 2.717Zm2.81-3.635c-.816-.826-1.186-1.974-1.017-3.15.238-1.648.15-3.083.103-3.854l-.016-.277c.384-.33 2.165-1.255 3.434-.973.58.129.932.511 1.08 1.17.759 3.406.1 4.825-.43 5.966-.109.235-.212.458-.3.687l-.068.178c-.173.45-.334.867-.434 1.264a3.325 3.325 0 0 1-2.352-1.011Zm.133 4.594a2.07 2.07 0 0 1-.614-.256c.111-.051.31-.12.654-.19 1.668-.332 1.925-.567 2.487-1.26.13-.158.275-.338.478-.557.301-.328.44-.272.69-.172.202.082.4.328.48.599.037.128.08.37-.06.56-1.174 1.595-2.886 1.574-4.115 1.276Zm8.725 7.873c-2.04.424-2.761-.586-3.237-1.74-.308-.744-.459-4.102-.351-7.81a.434.434 0 0 0-.02-.143 1.823 1.823 0 0 0-.057-.262c-.16-.54-.548-.99-1.013-1.178-.185-.074-.525-.21-.933-.11.087-.347.238-.74.402-1.165l.068-.178c.078-.202.175-.41.277-.632.554-1.194 1.313-2.829.49-6.522-.309-1.384-1.34-2.06-2.901-1.903-.936.094-1.793.46-2.22.67a7.255 7.255 0 0 0-.255.132c.12-1.394.57-4 2.255-5.647 1.062-1.038 2.475-1.55 4.196-1.523 3.393.054 5.569 1.742 6.796 3.15 1.058 1.211 1.631 2.433 1.86 3.091-1.72-.17-2.889.16-3.482.982-1.29 1.787.706 5.257 1.665 6.924.175.306.327.57.375.682.312.734.716 1.224 1.012 1.582.09.11.178.215.245.308-.521.146-1.456.482-1.371 2.164-.069.843-.558 4.793-.806 6.189-.328 1.843-1.028 2.53-2.995 2.939Zm8.513-9.447c-.532.24-1.424.42-2.27.458-.935.043-1.411-.101-1.523-.19-.053-1.048.35-1.157.775-1.273a3.35 3.35 0 0 0 .195-.058c.04.031.082.062.13.092.75.481 2.091.533 3.984.154l.02-.004c-.255.232-.692.542-1.31.821Z"})))},y7t=g7t;var tB={};J(tB,{icon:()=>_7t});var bjr=T(z());var b7t=["title","titleId"];function Jue(){return Jue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function O7t(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}var x7t=function(t){var r=t.title,n=t.titleId,o=w7t(t,b7t);return l("svg",Jue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#E6522C",d:"M15.907.187C7.122.187 0 7.308 0 16.093S7.122 32 15.907 32c8.784 0 15.906-7.121 15.906-15.906S24.69.187 15.907.187Zm0 29.77c-2.5 0-4.526-1.67-4.526-3.729h9.051c0 2.06-2.026 3.73-4.525 3.73Zm7.475-4.963H8.43v-2.711h14.95v2.71Zm-.054-4.107H8.473c-.05-.057-.1-.113-.147-.17-1.53-1.859-1.891-2.829-2.241-3.818-.006-.032 1.855.38 3.176.678 0 0 .679.157 1.672.338-.953-1.118-1.52-2.539-1.52-3.991 0-3.189 2.446-5.975 1.564-8.227.858.07 1.777 1.812 1.839 4.537.913-1.262 1.295-3.566 1.295-4.978 0-1.463.963-3.161 1.927-3.22-.86 1.417.223 2.63 1.184 5.642.361 1.132.315 3.035.594 4.243.092-2.508.523-6.167 2.114-7.43-.702 1.591.104 3.581.655 4.538.889 1.544 1.428 2.714 1.428 4.926 0 1.483-.548 2.88-1.472 3.971 1.05-.197 1.776-.374 1.776-.374l3.411-.666s-.495 2.038-2.4 4.001Z"}))},_7t=x7t;var rB={};J(rB,{icon:()=>k7t});var Ojr=T(z());var S7t=["title","titleId"];function Xue(){return Xue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function E7t(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}var P7t=function(t){var r=t.title,n=t.titleId,o=I7t(t,S7t);return l("svg",Xue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#F60",d:"M30.083 13.197h-9.878c-.79-.088-1.391-.74-1.391-1.508V1.97c0-.83-.718-1.495-1.595-1.495h-3.456c-.885 0-1.595.672-1.595 1.495v9.82c-.043.74-.696 1.338-1.478 1.406H8.102c-.76-.088-1.348-.686-1.398-1.406V1.97c0-.83-.718-1.495-1.595-1.495H1.652C.768.476.058 1.148.058 1.97v28.358c0 .83.717 1.495 1.594 1.495h28.439c.884 0 1.594-.673 1.594-1.495V14.692c-.007-.829-.718-1.495-1.602-1.495Zm-4.55 10.724c0 .829-.718 1.495-1.595 1.495H20.48c-.884 0-1.595-.673-1.595-1.495v-3.058c0-.83.718-1.495 1.595-1.495h3.457c.884 0 1.594.672 1.594 1.495v3.058Z"}))},k7t=P7t;var nB={};J(nB,{icon:()=>A7t});var _jr=T(z());var j7t=["title","titleId"];function Kue(){return Kue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function C7t(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}var M7t=function(t){var r=t.title,n=t.titleId,o=T7t(t,j7t);return l("svg",Kue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",transform:"translate(0 3)"},l("path",{fill:"#A41E11",d:"M30.594 20.791c-1.689.875-10.438 4.451-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.437-12.46-5.234-.838-.399-1.278-.735-1.278-1.052v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.118 1.666.607 11.623 2.393 13.27 2.992l-.001 3.135c0 .314-.38.659-1.24 1.104z"}),l("path",{fill:"#D82C20",d:"M30.594 17.61c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.956-4.37.256-1.471-.698-10.782-4.438-12.46-5.234-1.676-.797-1.712-1.345-.064-1.987 1.647-.641 10.907-4.252 12.864-4.95 1.957-.698 2.636-.723 4.301-.117 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z"}),l("path",{fill:"#A41E11",d:"M30.594 15.606c-1.689.875-10.438 4.45-12.3 5.416-1.863.965-2.898.956-4.37.257-1.471-.7-10.782-4.438-12.46-5.235-.838-.398-1.278-.734-1.278-1.051v-3.18S12.307 9.19 14.264 8.492c1.957-.698 2.636-.723 4.301-.117 1.666.606 11.623 2.392 13.27 2.991l-.001 3.135c0 .315-.38.66-1.24 1.105z"}),l("path",{fill:"#D82C20",d:"M30.594 12.425c-1.689.875-10.438 4.45-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.438-12.46-5.235-1.676-.796-1.712-1.345-.064-1.986 1.647-.641 10.907-4.253 12.864-4.95 1.957-.698 2.636-.724 4.301-.117 1.666.606 10.363 4.047 12.009 4.646 1.646.6 1.71 1.094.02 1.969z"}),l("path",{fill:"#A41E11",d:"M30.594 10.228c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.438-12.46-5.234C.627 10.268.187 9.932.187 9.615v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.117 1.666.606 11.623 2.391 13.27 2.99l-.001 3.136c0 .314-.38.659-1.24 1.104z"}),l("path",{fill:"#D82C20",d:"M30.594 7.047c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.437-12.46-5.234C-.211 6.689-.247 6.14 1.4 5.499S12.307 1.247 14.264.55c1.957-.7 2.636-.724 4.301-.118 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z"}),l("path",{fill:"#FFF",d:"m20.157 3.985-2.742.283-.614 1.468-.992-1.638-3.166-.283 2.362-.847-.708-1.3 2.212.86 2.085-.68-.563 1.345zm-3.52 7.123-5.118-2.11 7.334-1.119z"}),l("ellipse",{cx:9.541,cy:6.311,fill:"#FFF",rx:3.92,ry:1.51}),l("path",{fill:"#7A0C00",d:"m23.398 4.386 4.34 1.705-4.336 1.703z"}),l("path",{fill:"#AD2115",d:"m18.596 6.274 4.802-1.888.004 3.408-.471.183z"})))},A7t=M7t;var oB={};J(oB,{icon:()=>F7t});var Ijr=T(z());var R7t=["title","titleId"];function Yue(){return Yue=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function L7t(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}var N7t=function(t){var r=t.title,n=t.titleId,o=D7t(t,R7t);return l("svg",Yue({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#FA744E",d:"M9 7.008V0h20v16.744c0 3.913-6.378 6.477-9.015 7.256V7.008H9Z"}),l("path",{fill:"#1DBAB0",d:"M3 20.073V10h14v22C7.667 27.98 3 24.004 3 20.073Z"}),l("path",{d:"M9 10h8v14c-2.983-1.14-8-3.756-8-7.043V10Z",className:"euiIcon__fillNegative"}))},F7t=N7t;var iB={};J(iB,{icon:()=>V7t});var Pjr=T(z());var B7t=["title","titleId"];function Que(){return Que=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function W7t(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}var H7t=function(t){var r=t.title,n=t.titleId,o=z7t(t,B7t);return l("svg",Que({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none",fillRule:"evenodd"},l("path",{fill:"#FA744E",d:"M27.05 10h-7.34l-11 22s15.696-4.96 21.855-16.076C32.037 13.266 30.088 10 27.05 10"}),l("path",{fill:"#00BFB3",d:"M21.355 0H7.533L.427 14.211C-.903 16.871 1.032 20 4.004 20h7.351l10-20Z"}),l("path",{d:"M2.533 10 .428 14.211C-.903 16.871 1.032 20 4.005 20h7.35l5-10H2.533Z",className:"euiIcon__fillNegative"})))},V7t=H7t;var aB={};J(aB,{icon:()=>G7t});var jjr=T(z());var $7t=["title","titleId"];function ece(){return ece=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function q7t(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}var U7t=function(t){var r=t.title,n=t.titleId,o=Z7t(t,$7t);return l("svg",ece({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#FFAE00",d:"M16 32 0 11.454l6.931-10.38L16 0l9.069 1.074L32 11.454z"}),l("path",{fill:"#EC6C00",d:"M16 32 0 11.454h32z"}),l("path",{fill:"#FFAE00",d:"M16 32 6.477 11.454h19.045z"}),l("path",{fill:"#FFEFB4",d:"M16 0 6.477 11.454h19.045z"}),l("path",{fill:"#FFAE00",d:"M6.932 1.074 3.369 6.3.001 11.454h6.542zM25.069 1.074 28.632 6.3 32 11.454h-6.542z"}),l("path",{fill:"#FED305",d:"m6.931 1.074-.453 10.38L16 0zM25.069 1.074l.453 10.38L16 0z"})))},G7t=U7t;var sB={};J(sB,{icon:()=>Q7t});var Cjr=T(z());var J7t=["title","titleId"];function tce(){return tce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function K7t(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}var Y7t=function(t){var r=t.title,n=t.titleId,o=X7t(t,J7t);return l("svg",tce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#E01E5A",d:"M6.813 20.18a3.337 3.337 0 0 1-3.33 3.33 3.337 3.337 0 0 1-3.328-3.33 3.337 3.337 0 0 1 3.329-3.329h3.329v3.33zm1.677 0a3.337 3.337 0 0 1 3.33-3.329 3.337 3.337 0 0 1 3.328 3.33v8.335a3.337 3.337 0 0 1-3.329 3.329 3.337 3.337 0 0 1-3.329-3.33V20.18z"}),l("path",{fill:"#36C5F0",d:"M11.82 6.813a3.337 3.337 0 0 1-3.33-3.33A3.337 3.337 0 0 1 11.82.156a3.337 3.337 0 0 1 3.328 3.329v3.329H11.82zm0 1.677a3.337 3.337 0 0 1 3.328 3.33 3.337 3.337 0 0 1-3.329 3.328H3.484a3.337 3.337 0 0 1-3.33-3.329 3.337 3.337 0 0 1 3.33-3.329h8.335z"}),l("path",{fill:"#2EB67D",d:"M25.187 11.82a3.337 3.337 0 0 1 3.329-3.33 3.337 3.337 0 0 1 3.329 3.33 3.337 3.337 0 0 1-3.33 3.328h-3.328V11.82zm-1.678 0a3.337 3.337 0 0 1-3.329 3.328 3.337 3.337 0 0 1-3.329-3.329V3.484a3.337 3.337 0 0 1 3.33-3.33 3.337 3.337 0 0 1 3.328 3.33v8.335z"}),l("path",{fill:"#ECB22E",d:"M20.18 25.187a3.337 3.337 0 0 1 3.33 3.329 3.337 3.337 0 0 1-3.33 3.329 3.337 3.337 0 0 1-3.329-3.33v-3.328h3.33zm0-1.678a3.337 3.337 0 0 1-3.329-3.329 3.337 3.337 0 0 1 3.33-3.329h8.335a3.337 3.337 0 0 1 3.329 3.33 3.337 3.337 0 0 1-3.33 3.328H20.18z"})))},Q7t=Y7t;var lB={};J(lB,{icon:()=>o8t});var Ajr=T(z());var e8t=["title","titleId"];function rce(){return rce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function r8t(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}var n8t=function(t){var r=t.title,n=t.titleId,o=t8t(t,e8t);return l("svg",rce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#3EBEB0",d:"M19 15c0 7.062-4.888 12.969-11.46 14.563A15.914 15.914 0 0 0 16 32c8.836 0 16-7.163 16-16v-3l-6.5-6-6.5 6v2Z"}),l("path",{fill:"#07C",d:"M6.833 26.646a11.954 11.954 0 0 0 8.544-7.834A12.43 12.43 0 0 1 13 11.5V.292C5.6 1.696 0 8.19 0 16.002c0 4.358 1.75 8.306 4.577 11.192l2.256-.547Z"}),l("path",{d:"M30.362 23.02c-1.494.63-3.137.98-4.861.98a12.443 12.443 0 0 1-7.852-2.78 15.042 15.042 0 0 1-10.11 8.343A15.91 15.91 0 0 0 16.002 32c6.314 0 11.758-3.669 14.36-8.98",className:"euiIcon__fillNegative"}))},o8t=n8t;var uB={};J(uB,{icon:()=>u8t});var Djr=T(z());var i8t=["title","titleId"];function nce(){return nce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function s8t(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}var l8t=function(t){var r=t.title,n=t.titleId,o=a8t(t,i8t);return l("svg",nce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#00BFB3",d:"M11.05 1.95 6.808 6.192 16 15.385l9.192-9.193L20.95 1.95 16 6.9l-4.95-4.95Z"}),l("path",{fill:"#FA744E",d:"M4.686 19.627a8 8 0 0 1 0-11.313L16 19.627v11.314L4.686 19.627Z"}),l("path",{fill:"#343741",d:"M27.314 8.314a8 8 0 0 1 0 11.313L16 30.941V19.627L27.314 8.314Z"}))},u8t=l8t;var cB={};J(cB,{icon:()=>h8t});var Njr=T(z());var c8t=["title","titleId"];function oce(){return oce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function d8t(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}var f8t=function(t){var r=t.title,n=t.titleId,o=p8t(t,c8t);return l("svg",oce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fill:"none"},l("path",{fill:"#C73A63",d:"M14.943 13.563c-1.327 2.23-2.597 4.388-3.894 6.531-.334.55-.498.998-.232 1.698.734 1.931-.302 3.811-2.25 4.321-1.837.482-3.627-.726-3.992-2.692-.323-1.741 1.028-3.448 2.948-3.72.16-.023.325-.026.595-.046l2.92-4.896C9.2 12.933 8.108 10.8 8.35 8.154c.171-1.87.907-3.486 2.25-4.81a7.639 7.639 0 0 1 9.531-1c2.91 1.87 4.244 5.512 3.107 8.629l-2.668-.724c.357-1.733.093-3.29-1.076-4.623-.772-.88-1.763-1.341-2.89-1.511-2.258-.341-4.476 1.11-5.134 3.327-.748 2.516.383 4.572 3.473 6.121Z"}),l("path",{fill:"#4B4B4B",d:"m18.73 10.926 2.823 4.98c4.753-1.47 8.336 1.16 9.622 3.977 1.552 3.402.491 7.432-2.558 9.531-3.13 2.155-7.089 1.787-9.862-.981l2.176-1.821c2.739 1.774 5.135 1.69 6.913-.41a4.766 4.766 0 0 0-.077-6.219c-1.8-2.025-4.213-2.086-7.13-.143-1.209-2.146-2.44-4.275-3.61-6.436-.396-.729-.832-1.152-1.722-1.306-1.487-.257-2.446-1.534-2.504-2.964a3.258 3.258 0 0 1 2.08-3.192 3.243 3.243 0 0 1 3.671 1.002c.71.896.935 1.905.562 3.01-.104.309-.238.607-.384.972Z"}),l("path",{fill:"#4A4A4A",d:"M20.963 24.401h-5.72c-.55 2.256-1.734 4.077-3.775 5.235-1.586.9-3.296 1.205-5.116.911C3 30.007.26 26.99.019 23.593c-.273-3.848 2.372-7.268 5.898-8.036l.732 2.658c-3.234 1.65-4.353 3.73-3.448 6.33.797 2.287 3.06 3.541 5.518 3.056 2.51-.495 3.776-2.581 3.621-5.929 2.38 0 4.761-.024 7.14.012.93.015 1.648-.081 2.348-.9 1.152-1.349 3.273-1.227 4.515.046 1.268 1.301 1.207 3.395-.135 4.641a3.236 3.236 0 0 1-4.553-.157c-.249-.267-.445-.585-.692-.913Z"})))},h8t=f8t;var pB={};J(pB,{icon:()=>b8t});var Bjr=T(z());var m8t=["title","titleId"];function ice(){return ice=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function g8t(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}var y8t=function(t){var r=t.title,n=t.titleId,o=v8t(t,m8t);return l("svg",ice({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#00ADEF",d:"m0 4.51 12.977-1.768.006 12.518-12.971.074L0 4.51Zm12.97 12.192.011 12.529-12.97-1.784-.002-10.829 12.962.084Zm1.574-14.19L31.751 0v15.1l-17.207.137V2.511Zm17.21 14.308-.003 15.033-17.207-2.429-.024-12.632 17.235.028Z"}))},b8t=y8t;var dB={};J(dB,{icon:()=>S8t});var Wjr=T(z());var w8t=["title","titleId"];function ace(){return ace=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function x8t(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}var _8t=function(t){var r=t.title,n=t.titleId,o=O8t(t,w8t);return l("svg",ace({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fill:"#FEC514",d:"M17.557 5.05c.17-.202.457-.512.86-.93C19.483 3.017 21.828 1 23.801 1H30v30h-6.2c-1.972 0-3.995-1.449-5.383-3.106l-.764-1.052 2.75-3.477c3.462-4.376 3.463-10.332.001-14.707L17.557 5.05Z"}),l("path",{fill:"#F04E98",d:"M2 31V1h5.81c1.71 0 3.35.786 4.387 2.1l5.855 7.42c2.598 3.283 2.598 7.698-.002 10.983l-5.855 7.403C11.158 30.217 9.52 31 7.815 31H2Z"}),l("path",{d:"M15.384 24.89 12.15 21.7c-2.868-3.318-2.868-8.22.002-11.322 1.535-1.639 2.611-2.718 3.23-3.238l2.67 3.238c2.637 3.385 2.575 7.987-.062 11.374l-2.607 3.137Z",className:"euiIcon__fillNegative"}))},S8t=_8t;var fB={};J(fB,{icon:()=>j8t});var Vjr=T(z());var I8t=["title","titleId"];function sce(){return sce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function P8t(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}var k8t=function(t){var r=t.title,n=t.titleId,o=E8t(t,I8t);return l("svg",sce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.914 1c-3.6 0-5.897 1.111-5.897 1.876 0 .766 2.297 1.877 5.897 1.877s5.897-1.111 5.897-1.877C13.811 2.111 11.514 1 7.914 1m3.98 7.988c-1.187.331-2.601.502-3.98.502-1.383 0-2.801-.172-3.991-.505l2.863 3.242v2.515c.136.08.515.214 1.128.214.61 0 .989-.133 1.126-.213v-2.515l2.854-3.24Zm2.394-1.206-4.248 4.823v2.246h.004c0 .763-1.069 1.105-2.13 1.105-1.06 0-2.13-.342-2.13-1.105h.002v-2.245L1.321 7.55l.01-.008A1.53 1.53 0 0 1 1 6.607V2.78h.02C1.14.973 4.627 0 7.913 0c3.286 0 6.774.973 6.894 2.78h.02v3.827c0 .343-.12.657-.335.941l-.003.004c-.06.079-.128.155-.202.23Zm-.578-.856a.56.56 0 0 0 .118-.319V4.411c-1.288.879-3.649 1.342-5.914 1.342C5.65 5.753 3.288 5.29 2 4.411v2.196C2 7.375 4.304 8.49 7.914 8.49c2.879 0 4.927-.709 5.639-1.385l.157-.18Z"}))},j8t=k8t;var hB={};J(hB,{icon:()=>R8t});var Zjr=T(z());var T8t=["title","titleId"];function lce(){return lce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function M8t(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}var A8t=function(t){var r=t.title,n=t.titleId,o=C8t(t,T8t);return l("svg",lce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m6.918 9.799-4.82 4.819 2.88-.43.148.987L0 15.943l.768-5.126.988.148-.453 3.033 4.936-4.935a2.003 2.003 0 0 1 1.265-2.885V0h1v6.178a2.003 2.003 0 0 1 1.263 2.884l4.865 4.866-.443-2.963.988-.147.768 5.126-5.127-.769.15-.988 2.95.441-4.83-4.83c-.312.203-.685.32-1.085.32-.4 0-.773-.117-1.085-.32Z"}))},R8t=A8t;var mB={};J(mB,{icon:()=>B8t});var Ujr=T(z());var D8t=["title","titleId"];function uce(){return uce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function N8t(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}var F8t=function(t){var r=t.title,n=t.titleId,o=L8t(t,D8t);return l("svg",uce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.747 10.992h13.1a.123.123 0 0 0 .122-.123V8.51a.122.122 0 0 0-.122-.122H1.122A.122.122 0 0 0 1 8.51v2.36c0 .066.055.122.122.122h.625Zm12.011 1H2.21V16h-1v-4.008h-.088A1.124 1.124 0 0 1 0 10.87V8.51c0-.62.503-1.122 1.122-1.122h13.725c.62 0 1.122.502 1.122 1.122v2.36c0 .618-.503 1.122-1.122 1.122h-.089V16h-1v-4.008Zm-6.27-7.487V0h1v4.529l2.407-2.262.685.73L8 6.356 4.42 2.995l.685-.729 2.383 2.24Z"}))},B8t=F8t;var vB={};J(vB,{icon:()=>$8t});var Jjr=T(z());var z8t=["title","titleId"];function cce(){return cce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function H8t(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}var V8t=function(t){var r=t.title,n=t.titleId,o=W8t(t,z8t);return l("svg",cce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2.21 4.008H13.76V0h1v4.008h.088c.619 0 1.122.504 1.122 1.123V7.49c0 .62-.503 1.122-1.122 1.122H1.122A1.122 1.122 0 0 1 0 7.49V5.13c0-.618.503-1.122 1.122-1.122h.089V0h1v4.008Zm11.549 1H1.12A.123.123 0 0 0 1 5.13V7.49c0 .068.055.122.122.122h13.725a.122.122 0 0 0 .122-.122V5.13a.123.123 0 0 0-.122-.122h-1.088Zm-5.301 9.097 2.405-2.26.686.728-3.58 3.363-3.58-3.363.686-.728 2.383 2.24V9.577h1v4.528Z"}))},$8t=V8t;var gB={};J(gB,{icon:()=>J8t});var Kjr=T(z());var Z8t=["title","titleId"];function pce(){return pce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function U8t(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}var G8t=function(t){var r=t.title,n=t.titleId,o=q8t(t,Z8t);return l("svg",pce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.339 15.464H4.77a3.248 3.248 0 0 1-3.245-3.244V4.549H0v-1h2.526v8.67a2.247 2.247 0 0 0 2.245 2.245h6.568a2.247 2.247 0 0 0 2.244-2.244V3.549h2.455v1h-1.455v7.67a3.247 3.247 0 0 1-3.244 3.245Zm.513-5.962v1.095l-3.848 1.72-3.85-1.72V9.502l3.85 1.72 3.848-1.72Zm0-4.251v1.095l-3.848 1.72-3.85-1.72V5.25l3.85 1.72 3.848-1.72Zm0-4.251v1.095l-3.848 1.72-3.85-1.72V1l3.85 1.72L11.852 1Z"}))},J8t=G8t;var yB={};J(yB,{icon:()=>eIt});var Qjr=T(z());var X8t=["title","titleId"];function dce(){return dce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Y8t(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}var Q8t=function(t){var r=t.title,n=t.titleId,o=K8t(t,X8t);return l("svg",dce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.552 10.71a3.008 3.008 0 0 0 4.19.738l1.642-1.15 1.15 1.642-1.643 1.15a5.013 5.013 0 1 1-5.75-8.212l1.642-1.15 1.15 1.643-1.642 1.15a3.007 3.007 0 0 0-.739 4.189Zm8.296-2.137 1.15 1.643-1.643 1.149-1.15-1.642 1.643-1.15Zm-4.6-6.571 1.15 1.643-1.643 1.15-1.15-1.642 1.642-1.151Zm1.97 1.068L9.07 1.428a1.003 1.003 0 0 0-1.397-.246L3.566 4.057A5.995 5.995 0 0 0 1.092 7.94a5.993 5.993 0 0 0 .996 4.495 5.99 5.99 0 0 0 3.883 2.473 5.991 5.991 0 0 0 4.495-.996l4.107-2.875c.454-.318.563-.943.246-1.396l-1.15-1.643a1.002 1.002 0 0 0-1.396-.246l-4.107 2.875a2.002 2.002 0 0 1-1.498.332 2 2 0 0 1-1.627-2.323c.09-.505.371-.976.824-1.294l4.107-2.876c.454-.317.564-.942.246-1.396Z"}))},eIt=Q8t;var bB={};J(bB,{icon:()=>iIt});var tTr=T(z());var tIt=["title","titleId"];function fce(){return fce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nIt(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}var oIt=function(t){var r=t.title,n=t.titleId,o=rIt(t,tIt);return l("svg",fce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m15.143 15.85-3.872-3.872a.5.5 0 0 1-.034-.738 6.01 6.01 0 0 0 0-8.486 6.004 6.004 0 0 0-8.484 0 6.01 6.01 0 0 0 0 8.486 5.96 5.96 0 0 0 4.242 1.757.5.5 0 0 1 0 1 6.955 6.955 0 0 1-4.949-2.05c-2.728-2.73-2.728-7.171 0-9.9 2.728-2.73 7.168-2.73 9.898 0 2.609 2.61 2.723 6.785.342 9.532l3.565 3.564a.502.502 0 0 1-.708.708ZM6.254 3l.277 5.063h.935L7.754 3h-1.5Zm.222 7.548a.727.727 0 0 0 .533.222.717.717 0 0 0 .52-.22.715.715 0 0 0 .225-.53.716.716 0 0 0-.222-.534.724.724 0 0 0-.523-.216.731.731 0 0 0-.533.219.719.719 0 0 0-.222.53c0 .205.074.38.222.529Z"}))},iIt=oIt;var wB={};J(wB,{icon:()=>cIt});var nTr=T(z());var aIt=["title","titleId"];function hce(){return hce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function lIt(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}var uIt=function(t){var r=t.title,n=t.titleId,o=sIt(t,aIt);return l("svg",hce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.5 6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1 0-1h6Zm.74 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0 0 12 6.5 5.5 5.5 0 1 0 6.5 12a.5.5 0 1 1 0 1 6.5 6.5 0 1 1 4.936-2.27l4.419 4.418a.5.5 0 0 1-.707.707l-4.768-4.768a.499.499 0 0 1-.14-.347Z"}))},cIt=uIt;var OB={};J(OB,{icon:()=>mIt});var iTr=T(z());var pIt=["title","titleId"];function mce(){return mce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fIt(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}var hIt=function(t){var r=t.title,n=t.titleId,o=dIt(t,pIt);return l("svg",mce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 6h2.5a.5.5 0 0 1 0 1H7v2.5a.5.5 0 0 1-1 0V7H3.5a.5.5 0 0 1 0-1H6V3.5a.5.5 0 0 1 1 0V6Zm3.24 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0 0 12 6.5 5.5 5.5 0 1 0 6.5 12a.5.5 0 1 1 0 1 6.5 6.5 0 1 1 4.936-2.27l4.419 4.418a.5.5 0 0 1-.707.707l-4.768-4.768a.499.499 0 0 1-.14-.347Z"}))},mIt=hIt;var xB={};J(xB,{icon:()=>wIt});var sTr=T(z());var vIt=["title","titleId"];function vce(){return vce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yIt(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}var bIt=function(t){var r=t.title,n=t.titleId,o=gIt(t,vIt);return l("svg",vce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.55 14.224a.502.502 0 0 0 .897 0l4-8a.5.5 0 0 0 .053-.235 4.672 4.672 0 0 0-.084-.705 5.538 5.538 0 0 0-.505-1.512C11.189 2.362 9.906 1.5 8 1.5c-1.906 0-3.19.862-3.91 2.272-.248.485-.41.998-.506 1.512-.058.31-.08.554-.084.705a.5.5 0 0 0 .053.235l3.997 8ZM8 5a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3.493.895c.009-.106.027-.253.06-.429.079-.424.213-.848.413-1.238C5.537 3.138 6.487 2.5 8 2.5c1.513 0 2.463.638 3.02 1.728.2.39.334.814.413 1.238.033.176.051.323.06.43L8 12.881 4.507 5.895Z"}))},wIt=bIt;var _B={};J(_B,{icon:()=>IIt});var uTr=T(z());var OIt=["title","titleId"];function gce(){return gce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _It(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}var SIt=function(t){var r=t.title,n=t.titleId,o=xIt(t,OIt);return l("svg",gce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 10h2V6H7zM3 10h2V6H3zM11.025 10h2V6h-2zM3.5 13.75h1v-2.4h-1zM6.175 13.75h1.001v-2.4H6.175zM8.85 13.75h1v-2.4h-1zM11.525 13.75h1v-2.4h-1z"}),l("path",{d:"M0 3v7.05h1v3.698h1v-3.699h12v3.699h1v-3.699h1V3H0Zm1 6h14V4H1v5Z"}))},IIt=SIt;var SB={};J(SB,{icon:()=>TIt});var pTr=T(z());var EIt=["title","titleId"];function yce(){return yce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kIt(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}var jIt=function(t){var r=t.title,n=t.titleId,o=PIt(t,EIt);return l("svg",yce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M0 2h16v2H0V2Zm0 5h16v2H0V7Zm16 5H0v2h16v-2Z"}))},TIt=jIt;var IB={};J(IB,{icon:()=>DIt});var fTr=T(z());var CIt=["title","titleId"];function bce(){return bce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function AIt(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}var RIt=function(t){var r=t.title,n=t.titleId,o=MIt(t,CIt);return l("svg",bce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 0 1-.487-.412L3 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 7.5ZM3.51 4a.513.513 0 0 1-.502-.412L3 3.5c0-.276.228-.5.51-.5h8.98c.25 0 .459.183.502.412L13 3.5c0 .276-.228.5-.51.5H8.493v7.792l2.06-2.06a.5.5 0 1 1 .707.707L9.14 12.56A1.496 1.496 0 0 1 8.026 13L7.993 13a.501.501 0 0 1-.118-.014 1.493 1.493 0 0 1-.857-.426l-2.122-2.12a.5.5 0 0 1 .708-.708l1.889 1.89V4H3.51ZM13 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 0 1-.487-.412L10 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L13 7.5Z"}))},DIt=RIt;var EB={};J(EB,{icon:()=>zIt});var mTr=T(z());var LIt=["title","titleId"];function wce(){return wce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function FIt(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}var BIt=function(t){var r=t.title,n=t.titleId,o=NIt(t,LIt);return l("svg",wce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.014 7.382a.501.501 0 0 0-.013.152c-.014.4.133.806.439 1.112l2.12 2.122a.5.5 0 1 0 .708-.708L2.208 8H14.5a.5.5 0 0 0 0-1H2.379l1.889-1.89a.5.5 0 0 0-.707-.706L1.44 6.524c-.241.242-.383.544-.426.858ZM14.5 3h-7a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1Zm0 8h-7a.5.5 0 1 0 0 1h7a.5.5 0 1 0 0-1Z"}))},zIt=BIt;var PB={};J(PB,{icon:()=>ZIt});var gTr=T(z());var WIt=["title","titleId"];function Oce(){return Oce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function VIt(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}var $It=function(t){var r=t.title,n=t.titleId,o=HIt(t,WIt);return l("svg",Oce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M14.986 7.382a.501.501 0 0 1 .013.152c.014.4-.133.806-.439 1.112l-2.12 2.122a.5.5 0 1 1-.708-.708L13.792 8H1.5a.5.5 0 0 1 0-1h12.121l-1.889-1.89a.5.5 0 0 1 .707-.706l2.121 2.12c.241.242.383.544.426.858ZM1.5 3h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1Zm0 8h7a.5.5 0 1 1 0 1h-7a.5.5 0 1 1 0-1Z"}))},ZIt=$It;var kB={};J(kB,{icon:()=>XIt});var bTr=T(z());var qIt=["title","titleId"];function xce(){return xce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function GIt(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}var JIt=function(t){var r=t.title,n=t.titleId,o=UIt(t,qIt);return l("svg",xce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.01 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412l.008.088c0 .276-.216.5-.495.5h-2.01a.503.503 0 0 1-.487-.412L10.01 8.5ZM12.5 12c.25 0 .459.183.502.412l.008.088c0 .276-.228.5-.51.5H3.52a.513.513 0 0 1-.502-.412L3.01 12.5c0-.276.228-.5.51-.5h3.987V4.208l-2.06 2.06a.5.5 0 1 1-.707-.707L6.86 3.44A1.496 1.496 0 0 1 7.974 3L8.007 3c.04 0 .08.005.118.014.314.043.616.185.857.426l2.122 2.12a.5.5 0 0 1-.708.708l-1.889-1.89V12H12.5ZM3 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 8.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 0 1-.487-.412L3 8.5Z"}))},XIt=JIt;var jB={};J(jB,{icon:()=>tEt});var OTr=T(z());var KIt=["title","titleId"];function _ce(){return _ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function QIt(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}var eEt=function(t){var r=t.title,n=t.titleId,o=YIt(t,KIt);return l("svg",_ce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.352 6H2.5a.5.5 0 0 1 0-1h4.852L5.12 2.721c-.18-.183-.155-.46.055-.616a.551.551 0 0 1 .705.048l3 3.062c.16.164.16.405 0 .57l-3 3.062A.532.532 0 0 1 5.5 9a.54.54 0 0 1-.325-.106c-.21-.157-.235-.433-.055-.616L7.352 6Zm1.296 4H13.5a.5.5 0 0 1 0 1H8.648l2.232 2.278c.18.183.155.46-.055.617A.54.54 0 0 1 10.5 14a.532.532 0 0 1-.38-.153l-3-3.063a.397.397 0 0 1 0-.568l3-3.063a.551.551 0 0 1 .705-.047c.21.156.235.433.055.616L8.648 10Z"}))},tEt=eEt;var TB={};J(TB,{icon:()=>aEt});var _Tr=T(z());var rEt=["title","titleId"];function Sce(){return Sce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function oEt(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}var iEt=function(t){var r=t.title,n=t.titleId,o=nEt(t,rEt);return l("svg",Sce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m1.146 14.146 4-4a.5.5 0 0 1 .765.638l-.057.07-4 4a.5.5 0 0 1-.765-.638l.057-.07 4-4-4 4ZM6.5 8A1.5 1.5 0 0 1 8 9.5v3a.5.5 0 1 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 1 0-1h3Zm2-5a.5.5 0 0 1 .5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 1 1 0 1h-3A1.5 1.5 0 0 1 8 6.5v-3a.5.5 0 0 1 .5-.5Zm1.651 2.146 4-4a.5.5 0 0 1 .765.638l-.057.07-4 4a.5.5 0 0 1-.765-.638l.057-.07 4-4-4 4Z"}))},aEt=iEt;var CB={};J(CB,{icon:()=>pEt});var ITr=T(z());var sEt=["title","titleId"];function Ice(){return Ice=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uEt(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}var cEt=function(t){var r=t.title,n=t.titleId,o=lEt(t,sEt);return l("svg",Ice({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("rect",{width:10,height:1.5,x:3,y:7.25,rx:.5}))},pEt=cEt;var MB={};J(MB,{icon:()=>vEt});var PTr=T(z());var dEt=["title","titleId"];function Ece(){return Ece=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hEt(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}var mEt=function(t){var r=t.title,n=t.titleId,o=fEt(t,dEt);return l("svg",Ece({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0Zm0 .882a6.618 6.618 0 1 0 0 13.236A6.618 6.618 0 0 0 7.5.882ZM3.5 7h8a.5.5 0 1 1 0 1h-8a.5.5 0 0 1 0-1Z"}))},vEt=mEt;var AB={};J(AB,{icon:()=>OEt});var jTr=T(z());var gEt=["title","titleId"];function Pce(){return Pce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bEt(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}var wEt=function(t){var r=t.title,n=t.titleId,o=yEt(t,gEt);return l("svg",Pce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0Zm-4 7a.5.5 0 0 0 0 1h8a.5.5 0 1 0 0-1h-8Z"}))},OEt=wEt;var RB={};J(RB,{icon:()=>EEt});var CTr=T(z());var xEt=["title","titleId"];function kce(){return kce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function SEt(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}var IEt=function(t){var r=t.title,n=t.titleId,o=_Et(t,xEt);return l("svg",kce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.611 7H4.39c-.216 0-.39.224-.39.5s.174.5.389.5h6.222c.215 0 .389-.224.389-.5s-.174-.5-.389-.5Z"}),l("path",{fillRule:"evenodd",d:"M1 3a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3Zm2-1h9a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Z"}))},EEt=IEt;var DB={};J(DB,{icon:()=>CEt});var ATr=T(z());var PEt=["title","titleId"];function jce(){return jce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jEt(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}var TEt=function(t){var r=t.title,n=t.titleId,o=kEt(t,PEt);return l("svg",jce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 16v5h2.038a13.179 13.179 0 0 0 0 2H7v5H5v-5H0v-2h5v-5h2zM7 0v5h5v2H7v5H5V7H0V5h5V0h2zm16 0v5h5v2h-5v2.038a13.179 13.179 0 0 0-2 0V7h-5V5h5V0h2z"}),l("path",{d:"M22 10c3.073 0 5.877 1.155 8 3.056v3.252A9.82 9.82 0 1 0 16.307 30h-3.251A11.955 11.955 0 0 1 10 22c0-6.627 5.373-12 12-12zm1 8v3h3v2h-3v3h-2v-3h-3v-2h3v-3h2z",className:"euiIcon__fillSecondary"}))},CEt=TEt;var LB={};J(LB,{icon:()=>LEt});var DTr=T(z());var MEt=["title","titleId"];function Tce(){return Tce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function REt(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}var DEt=function(t){var r=t.title,n=t.titleId,o=AEt(t,MEt);return l("svg",Tce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16h-2c0-7.732-6.268-14-14-14S2 8.268 2 16s6.268 14 14 14v2z"}),l("path",{d:"M27 20v12h-2V20h2zm-5 4v8h-2v-8h2zm10-2v10h-2V22h2zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2z",className:"euiIcon__fillSecondary"}))},LEt=DEt;var NB={};J(NB,{icon:()=>WEt});var NTr=T(z());var NEt=["title","titleId"];function Cce(){return Cce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function BEt(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}var zEt=function(t){var r=t.title,n=t.titleId,o=FEt(t,NEt);return l("svg",Cce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 24a4 4 0 1 1 0 8 4 4 0 0 1 0-8zm24 0a4 4 0 1 1 0 8 4 4 0 0 1 0-8zM4 26a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm24 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2zM4 0a4 4 0 1 1 0 8 4 4 0 0 1 0-8zm24 0a4 4 0 1 1 0 8 4 4 0 0 1 0-8zm0 2a2 2 0 1 0 0 4 2 2 0 0 0 0-4zM4 2a2 2 0 1 0 0 4 2 2 0 0 0 0-4z",className:"euiIcon__fillSecondary"}),l("path",{d:"M21.078 29.05c.102.677.3 1.322.582 1.92A15.963 15.963 0 0 1 16 32c-1.993 0-3.9-.364-5.66-1.03.281-.598.48-1.243.582-1.92 1.574.614 3.287.95 5.078.95 1.791 0 3.504-.336 5.078-.95zm9.892-18.71A15.963 15.963 0 0 1 32 16c0 1.993-.364 3.9-1.03 5.66a6.948 6.948 0 0 0-1.92-.582c.614-1.574.95-3.287.95-5.078 0-1.791-.336-3.504-.95-5.078a6.948 6.948 0 0 0 1.92-.582zm-29.94 0c.598.281 1.243.48 1.92.582A13.965 13.965 0 0 0 2 16c0 1.791.336 3.504.95 5.078-.677.102-1.322.3-1.92.582A15.964 15.964 0 0 1 0 16c0-1.993.364-3.9 1.03-5.66zM16 0c1.993 0 3.9.364 5.66 1.03a6.948 6.948 0 0 0-.582 1.92A13.965 13.965 0 0 0 16 2c-1.791 0-3.504.336-5.078.95a6.948 6.948 0 0 0-.582-1.92A15.964 15.964 0 0 1 16 0z"}))},WEt=zEt;var FB={};J(FB,{icon:()=>qEt});var BTr=T(z());var HEt=["title","titleId"];function Mce(){return Mce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $Et(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}var ZEt=function(t){var r=t.title,n=t.titleId,o=VEt(t,HEt);return l("svg",Mce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 0c5.523 0 10 4.477 10 10s-4.477 10-10 10S6 15.523 6 10 10.477 0 16 0zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16z"}),l("path",{d:"M8.4 19.288c.492.402 1.015.766 1.566 1.087L7.26 23.682a4 4 0 1 1-1.437-1.243l2.578-3.151zm15.2 0 2.577 3.15a4 4 0 1 1-1.437 1.243l-2.706-3.306a12.032 12.032 0 0 0 1.565-1.087zM4 24a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm24 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4zM17 6v3h3v2h-3v3h-2v-3h-3V9h3V6h2z",className:"euiIcon__fillSecondary"}))},qEt=ZEt;var BB={};J(BB,{icon:()=>KEt});var WTr=T(z());var UEt=["title","titleId"];function Ace(){return Ace=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function JEt(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}var XEt=function(t){var r=t.title,n=t.titleId,o=GEt(t,UEt);return l("svg",Ace({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 0 1-16 16Zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0 0 16 2Z"}),l("path",{d:"M23 15h-6V9h-2v6H9v2h6v6h2v-6h6z",className:"euiIcon__fillSecondary"}))},KEt=XEt;var zB={};J(zB,{icon:()=>r9t});var VTr=T(z());var YEt=["title","titleId"];function Rce(){return Rce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function e9t(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}var t9t=function(t){var r=t.title,n=t.titleId,o=QEt(t,YEt);return l("svg",Rce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 20v10h10v2H0V20h2zm30 0v12H20v-2h10V20h2zM12 4a8 8 0 1 1 0 16 8 8 0 0 1 0-16zm0 2a6 6 0 1 0 0 12 6 6 0 0 0 0-12zm0-6v2H2v10H0V0h12zm20 0v12h-2V2H20V0h12z"}),l("path",{d:"M21.997 12.251c-.017.689-.104 1.36-.253 2.006a6 6 0 1 1-7.487 7.487c-.646.15-1.317.236-2.006.253a8 8 0 1 0 9.746-9.746z",className:"euiIcon__fillSecondary"}))},r9t=t9t;var WB={};J(WB,{icon:()=>s9t});var ZTr=T(z());var n9t=["title","titleId"];function Dce(){return Dce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function i9t(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}var a9t=function(t){var r=t.title,n=t.titleId,o=o9t(t,n9t);return l("svg",Dce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 12v6h6v2H0v-8h2zm18 0v8h-8v-2h6v-6h2zM8 0v2H2v6H0V0h8zm12 0v8h-2V2h-6V0h8z"}),l("path",{d:"M16 24a4 4 0 1 1 0 8 4 4 0 0 1 0-8zm12 0a4 4 0 1 1 0 8 4 4 0 0 1 0-8zm-12 1.75a2.25 2.25 0 1 0 0 4.5 2.25 2.25 0 0 0 0-4.5zm12 0a2.25 2.25 0 1 0 0 4.5 2.25 2.25 0 0 0 0-4.5zM28 12a4 4 0 1 1 0 8 4 4 0 0 1 0-8zm0 1.75a2.25 2.25 0 1 0 0 4.5 2.25 2.25 0 0 0 0-4.5zM10 6a4 4 0 1 1 0 8 4 4 0 0 1 0-8zm0 1.75a2.25 2.25 0 1 0 0 4.5 2.25 2.25 0 0 0 0-4.5z",className:"euiIcon__fillSecondary"}))},s9t=a9t;var HB={};J(HB,{icon:()=>d9t});var UTr=T(z());var l9t=["title","titleId"];function Lce(){return Lce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function c9t(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}var p9t=function(t){var r=t.title,n=t.titleId,o=u9t(t,l9t);return l("svg",Lce({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M24 0a8 8 0 1 1-4.906 14.32l-4.774 4.774a8 8 0 1 1-1.414-1.414l4.774-4.774A8 8 0 0 1 24 0zM8 18a6 6 0 1 0 0 12 6 6 0 0 0 0-12zM24 2a6 6 0 1 0 0 12 6 6 0 0 0 0-12z"}),l("path",{d:"M32 20v12H20V20h12zm-2 2h-8v8h8v-8zM12 0v12H0V0h12zm-2 2H2v8h8V2z",className:"euiIcon__fillSecondary"}))},d9t=p9t;var VB={};J(VB,{icon:()=>g9t});var JTr=T(z());var f9t=["title","titleId"];function Nce(){return Nce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function m9t(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}var v9t=function(t){var r=t.title,n=t.titleId,o=h9t(t,f9t);return l("svg",Nce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6 2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5Z"}),l("path",{fillRule:"evenodd",d:"M4.5 0A1.5 1.5 0 0 0 3 1.5v13A1.5 1.5 0 0 0 4.5 16h7a1.5 1.5 0 0 0 1.5-1.5v-13A1.5 1.5 0 0 0 11.5 0h-7ZM4 1.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5V4H4V1.5ZM4 13v1.5a.5.5 0 0 0 .5.5h7a.5.5 0 0 0 .5-.5V13H4Zm0-1h8V5H4v7Z",clipRule:"evenodd"}))},g9t=v9t;var $B={};J($B,{icon:()=>x9t});var KTr=T(z());var y9t=["title","titleId"];function Fce(){return Fce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function w9t(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}var O9t=function(t){var r=t.title,n=t.titleId,o=b9t(t,y9t);return l("svg",Fce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.796 9.048c-1.552-2.238-1.199-5.323.61-8.1-3.47-.12-6.6 2.232-7.269 5.672-.742 3.82 1.83 7.533 5.749 8.294a7.226 7.226 0 0 0 7.526-3.218c-2.794.177-5.27-.711-6.616-2.648Z"}))},x9t=O9t;var ZB={};J(ZB,{icon:()=>P9t});var QTr=T(z());var _9t=["title","titleId"];function Bce(){return Bce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function I9t(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}var E9t=function(t){var r=t.title,n=t.titleId,o=S9t(t,_9t);return l("svg",Bce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M14.883 7.644a.5.5 0 0 1 .006.707l-1.984 2.016a.5.5 0 0 1-.856-.347l-.009-1.004-3.024.024V12h1a.5.5 0 0 1 .354.854l-2 2a.5.5 0 0 1-.707 0l-2-2A.5.5 0 0 1 6.016 12h1V9.057l-3.008.024.008.995a.5.5 0 0 1-.85.36L1.148 8.454a.5.5 0 0 1-.005-.707L3.127 5.73a.5.5 0 0 1 .857.347l.008 1.004 3.024-.025V4h-1a.5.5 0 0 1-.353-.854l2-2a.5.5 0 0 1 .707 0l2 2a.5.5 0 0 1-.354.854h-1v3.04l3.008-.024-.008-.996a.5.5 0 0 1 .85-.36l2.017 1.984Z"}))},P9t=E9t;var qB={};J(qB,{icon:()=>M9t});var tCr=T(z());var k9t=["title","titleId"];function zce(){return zce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function T9t(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}var C9t=function(t){var r=t.title,n=t.titleId,o=j9t(t,k9t);return l("svg",zce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M1 1h14v14H1V1zm13 12v1H2V2h12v11zM6 6h4v4H6V6zm-1 5V5h6v6H5z",clipRule:"evenodd"}))},M9t=C9t;var UB={};J(UB,{icon:()=>N9t});var nCr=T(z());var A9t=["title","titleId"];function Wce(){return Wce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function D9t(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}var L9t=function(t){var r=t.title,n=t.titleId,o=R9t(t,A9t);return l("svg",Wce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.5 1a.5.5 0 0 1 0 1H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14H5.5a.5.5 0 1 1 0 1H3.006A2.005 2.005 0 0 1 1 12.994V3.006C1 1.898 1.897 1 3.006 1H5.5Zm7.494 0c1.059 0 1.924.818 2 1.856l.006.15v9.988a2.005 2.005 0 0 1-1.856 2l-.15.006H10.5a.5.5 0 0 1-.09-.992L10.5 14h2.494c.516 0 .941-.388 1-.888l.006-.118V3.006c0-.516-.388-.941-.888-1L12.994 2H10.5a.5.5 0 0 1-.09-.992L10.5 1h2.494ZM5 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"}))},N9t=L9t;var GB={};J(GB,{icon:()=>H9t});var iCr=T(z());var F9t=["title","titleId"];function Hce(){return Hce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function z9t(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}var W9t=function(t){var r=t.title,n=t.titleId,o=B9t(t,F9t);return l("svg",Hce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 4a.5.5 0 0 1 .5.5V6H10a.5.5 0 0 1 0 1H8.5v1.5a.5.5 0 0 1-1 0V7H6a.5.5 0 0 1 0-1h1.5V4.5A.5.5 0 0 1 8 4Z"}),l("path",{fillRule:"evenodd",d:"M1 4a2.5 2.5 0 0 1 2.5-2.5h9A2.5 2.5 0 0 1 15 4v5a2.5 2.5 0 0 1-2.5 2.5H7.707L4.5 14.707V11.5h-1A2.5 2.5 0 0 1 1 9V4Zm2.5-1.5A1.5 1.5 0 0 0 2 4v5a1.5 1.5 0 0 0 1.5 1.5h2v1.793L7.293 10.5H12.5A1.5 1.5 0 0 0 14 9V4a1.5 1.5 0 0 0-1.5-1.5h-9Z",clipRule:"evenodd"}))},H9t=W9t;var JB={};J(JB,{icon:()=>U9t});var sCr=T(z());var V9t=["title","titleId"];function Vce(){return Vce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Z9t(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}var q9t=function(t){var r=t.title,n=t.titleId,o=$9t(t,V9t);return l("svg",Vce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.5 1.443a1 1 0 0 0-1 0L2.572 4.29a1 1 0 0 0-.5.866v5.69a1 1 0 0 0 .5.866L7.5 14.557a1 1 0 0 0 1 0l4.928-2.846a1 1 0 0 0 .5-.866v-5.69a1 1 0 0 0-.5-.866L8.5 1.443ZM9 .577l4.928 2.846a2 2 0 0 1 1 1.732v5.69a2 2 0 0 1-1 1.732L9 15.423a2 2 0 0 1-2 0l-4.928-2.846a2 2 0 0 1-1-1.732v-5.69a2 2 0 0 1 1-1.732L7 .577a2 2 0 0 1 2 0Z"}))},U9t=q9t;var XB={};J(XB,{icon:()=>Y9t});var uCr=T(z());var G9t=["title","titleId"];function $ce(){return $ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function X9t(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}var K9t=function(t){var r=t.title,n=t.titleId,o=J9t(t,G9t);return l("svg",$ce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.808 10.197H6.796L5.859 13H4.485l.937-2.803H3.966l.219-1.25h1.647l.608-1.805H4.991l.226-1.251h1.64l.95-2.844h1.368l-.95 2.844h1.018l.95-2.844h1.374l-.95 2.844h1.51l-.218 1.25h-1.702l-.608 1.805h1.497l-.219 1.251H9.182L8.252 13H6.878l.93-2.803zm-.602-1.25h1.012l.615-1.805H7.814l-.608 1.804z"}))},Y9t=K9t;var KB={};J(KB,{icon:()=>nPt});var pCr=T(z());var Q9t=["title","titleId"];function Zce(){return Zce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function tPt(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}var rPt=function(t){var r=t.title,n=t.titleId,o=ePt(t,Q9t);return l("svg",Zce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m6.517 12.271 1.254-1.254a1.5 1.5 0 1 1-1.254 1.254Zm2.945-2.944.74-.74c.361.208.694.467.987.772a.5.5 0 0 1-.721.693 3.424 3.424 0 0 0-1.006-.725Zm2.162-2.163.716-.715c.308.232.599.49.87.772a.5.5 0 1 1-.722.692 6.26 6.26 0 0 0-.864-.749ZM7.061 6.07A6.198 6.198 0 0 0 3.54 7.885a.5.5 0 0 1-.717-.697 7.199 7.199 0 0 1 5.309-2.187l-1.07 1.07Zm6.672-1.014.71-.71c.274.23.536.476.786.736a.5.5 0 0 1-.721.692 9.1 9.1 0 0 0-.775-.718Zm-3.807-1.85A9.06 9.06 0 0 0 8 3a8.99 8.99 0 0 0-6.469 2.734.5.5 0 1 1-.717-.697A9.99 9.99 0 0 1 8 2c.944 0 1.868.131 2.75.382l-.824.824ZM8 13a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1Zm-5.424 1a.5.5 0 0 1-.707-.707L14.146 1.146a.5.5 0 0 1 .708.708L2.576 14Z"}))},nPt=rPt;var YB={};J(YB,{icon:()=>lPt});var fCr=T(z());var oPt=["title","titleId"];function qce(){return qce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function aPt(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}var sPt=function(t){var r=t.title,n=t.titleId,o=iPt(t,oPt);return l("svg",qce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 14a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Zm0-1a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1Zm3.189-3.64a.5.5 0 0 1-.721.692A3.408 3.408 0 0 0 8 9c-.937 0-1.813.378-2.453 1.037a.5.5 0 0 1-.717-.697A4.408 4.408 0 0 1 8 8c1.22 0 2.361.497 3.189 1.36Zm2.02-2.14a.5.5 0 1 1-.721.693A6.2 6.2 0 0 0 8 6a6.199 6.199 0 0 0-4.46 1.885.5.5 0 0 1-.718-.697A7.199 7.199 0 0 1 8 5a7.2 7.2 0 0 1 5.21 2.22Zm2.02-2.138a.5.5 0 0 1-.721.692A8.99 8.99 0 0 0 8 3a8.99 8.99 0 0 0-6.469 2.734.5.5 0 1 1-.717-.697A9.99 9.99 0 0 1 8 2a9.99 9.99 0 0 1 7.23 3.082Z"}))},lPt=sPt;var QB={};J(QB,{icon:()=>fPt});var mCr=T(z());var uPt=["title","titleId"];function Uce(){return Uce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pPt(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}var dPt=function(t){var r=t.title,n=t.titleId,o=cPt(t,uPt);return l("svg",Uce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m14.447 3.724-6-3a1 1 0 0 0-.894 0l-6 3A1 1 0 0 0 1 4.618v6.764a1 1 0 0 0 .553.894l6 3a1 1 0 0 0 .894 0l6-3a1 1 0 0 0 .553-.894V4.618a1 1 0 0 0-.553-.894ZM5.871 5.897l5.343-2.672 2.158 1.079L8 6.943ZM8 1.618l2.096 1.048-5.353 2.677-2.115-1.039ZM2 5.11l2.25 1.105V9a.5.5 0 0 0 1 0V6.706L7.5 7.811v6.321L2 11.382Zm6.5 9.022v-6.32L14 5.11v6.272Z"}))},fPt=dPt;var ez={};J(ez,{icon:()=>yPt});var gCr=T(z());var hPt=["title","titleId"];function Gce(){return Gce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vPt(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}var gPt=function(t){var r=t.title,n=t.titleId,o=mPt(t,hPt);return l("svg",Gce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M3 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h5a4.995 4.995 0 0 1-.584-1H3V2h7v2a1 1 0 0 0 1 1h2v2.1c.348.07.682.177 1 .316V4a1 1 0 0 0-.293-.707l-2-2A1 1 0 0 0 11 1H3zm13 11a4 4 0 1 1-8 0 4 4 0 0 1 8 0zm-1.646-1.354a.5.5 0 0 1 0 .708l-2.5 2.5a.5.5 0 0 1-.708 0l-1-1a.5.5 0 0 1 .708-.708l.646.647 2.146-2.147a.5.5 0 0 1 .708 0z"}))},yPt=gPt;var tz={};J(tz,{icon:()=>_Pt});var bCr=T(z());var bPt=["title","titleId"];function Jce(){return Jce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function OPt(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}var xPt=function(t){var r=t.title,n=t.titleId,o=wPt(t,bPt);return l("svg",Jce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M3 1a1 1 0 0 1 1-1h8a1 1 0 0 1 .707.293l2 2A1 1 0 0 1 15 3v5a4.995 4.995 0 0 0-1-.584V4h-2a1 1 0 0 1-1-1V1H4v12h3.1c.07.348.177.682.316 1H4a1 1 0 0 1-1-1V1zm5 14H2V2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h7a5.029 5.029 0 0 1-1-1zm8-3a4 4 0 1 1-8 0 4 4 0 0 1 8 0zm-1.646-1.354a.5.5 0 0 1 0 .708l-2.5 2.5a.5.5 0 0 1-.708 0l-1-1a.5.5 0 0 1 .708-.708l.646.647 2.146-2.147a.5.5 0 0 1 .708 0z"}))},_Pt=xPt;var rz={};J(rz,{icon:()=>kPt});var OCr=T(z());var SPt=["title","titleId"];function Xce(){return Xce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function EPt(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}var PPt=function(t){var r=t.title,n=t.titleId,o=IPt(t,SPt);return l("svg",Xce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 0 1 3.999 8.17V6.662h7.994V8.17Zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486ZM4 5.658h1.262V1.005H4v4.653Zm2.261 0h1.244V1.005H6.26v4.653Zm2.244 0h1.235V1.005H8.504v4.653Zm2.234 0h1.254V1.005h-1.254v4.653ZM3.008 0 3 8.17a2.509 2.509 0 0 0 2.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 0 0 2.498-2.512L13 0H3.008Z"}))},kPt=PPt;var nz={};J(nz,{icon:()=>APt});var _Cr=T(z());var jPt=["title","titleId"];function Kce(){return Kce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function CPt(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}var MPt=function(t){var r=t.title,n=t.titleId,o=TPt(t,jPt);return l("svg",Kce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm2 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM5 6a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm4-2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm2 2a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}),l("path",{d:"M8 1a7 7 0 0 0 0 14h2a2 2 0 1 0 0-4 1 1 0 1 1 0-2h3.98C14.515 9 15 8.583 15 8a7 7 0 0 0-7-7ZM2 8a6 6 0 0 1 12-.005.035.035 0 0 1-.02.005H10a2 2 0 1 0 0 4 1 1 0 1 1 0 2H8a6 6 0 0 1-6-6Z"}))},APt=MPt;var oz={};J(oz,{icon:()=>FPt});var ICr=T(z());var RPt=["title","titleId"];function Yce(){return Yce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function LPt(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}var NPt=function(t){var r=t.title,n=t.titleId,o=DPt(t,RPt);return l("svg",Yce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.84 2.019 3.046 8.57c-.987.952-1.133 2.517-.199 3.516.951 1.021 2.58 1.106 3.64.19.034-.03.068-.061.1-.092l5.655-5.452a.484.484 0 0 0 0-.703.53.53 0 0 0-.729 0L5.92 11.421c-.572.551-1.505.657-2.131.163a1.455 1.455 0 0 1-.118-2.211l6.899-6.651a2.646 2.646 0 0 1 3.644 0 2.422 2.422 0 0 1 0 3.513L7.3 12.901c-1.333 1.285-3.497 1.493-4.95.336-1.54-1.22-1.764-3.411-.5-4.897a3.33 3.33 0 0 1 .238-.252l5.78-5.572a.484.484 0 0 0 0-.703.53.53 0 0 0-.73 0l-5.78 5.572a4.36 4.36 0 0 0 0 6.324c2.188 2.109 5.202 1.31 6.66-.095l6.925-6.676a3.39 3.39 0 0 0 0-4.92C13.534.66 11.25.66 9.841 2.019z"}))},FPt=NPt;var iz={};J(iz,{icon:()=>VPt});var PCr=T(z());var BPt=["title","titleId"];function Qce(){return Qce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function WPt(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}var HPt=function(t){var r=t.title,n=t.titleId,o=zPt(t,BPt);return l("svg",Qce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.664 14.871a7 7 0 0 1-2.42-12.778.5.5 0 0 1 .612.06c.456.431 8.216 8.212 8.98 9.002a.5.5 0 0 1 .063.618 7.002 7.002 0 0 1-7.235 3.098Zm6.168-3.312a1961.733 1961.733 0 0 0-8.377-8.4 6 6 0 1 0 8.378 8.4Zm2.095-2.548a.5.5 0 1 1-.99-.144c.01-.066.01-.066.018-.133a6.007 6.007 0 0 0-.034-1.714.5.5 0 1 1 .987-.163c.108.655.122 1.326.04 1.999l-.021.155Zm-1.273-5.138a.5.5 0 1 1-.808.59 6.026 6.026 0 0 0-1.304-1.308.5.5 0 0 1 .59-.806 7.026 7.026 0 0 1 1.522 1.524ZM9.169 1.098a.5.5 0 1 1-.166.986 6.105 6.105 0 0 0-1.849-.026.5.5 0 0 1-.14-.99 7.02 7.02 0 0 1 2.155.03Z"}))},VPt=HPt;var az={};J(az,{icon:()=>GPt});var jCr=T(z());var $Pt=["title","titleId"];function epe(){return epe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function qPt(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}var UPt=function(t){var r=t.title,n=t.titleId,o=ZPt(t,$Pt);return l("svg",epe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5 2a1 1 0 0 0-1 1v10a1 1 0 1 0 2 0V3a1 1 0 0 0-1-1zm6 0a1 1 0 0 0-1 1v10a1 1 0 1 0 2 0V3a1 1 0 0 0-1-1z"}))},GPt=UPt;var sz={};J(sz,{icon:()=>QPt});var CCr=T(z());var JPt=["title","titleId"];function tpe(){return tpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function KPt(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}var YPt=function(t){var r=t.title,n=t.titleId,o=XPt(t,JPt);return l("svg",tpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.586 2.586A2 2 0 0 0 0 4h1a1 1 0 0 1 1-1V2a2 2 0 0 0-1.414.586ZM2 2h10.5a.5.5 0 0 1 0 1H2V2ZM0 4h1v6.5a.5.5 0 0 1-1 0V4Zm2.586.586A2 2 0 0 0 2 6h1a1 1 0 0 1 1-1V4a2 2 0 0 0-1.414.586Zm0 8.828A2 2 0 0 1 2 12h1a1 1 0 0 0 1 1v1a2 2 0 0 1-1.414-.586Zm12.828-8.828A2 2 0 0 1 16 6h-1a1 1 0 0 0-1-1V4a2 2 0 0 1 1.414.586Zm0 8.828A2 2 0 0 0 16 12h-1a1 1 0 0 1-1 1v1a2 2 0 0 0 1.414-.586ZM4 4h10v1H4zM3 7h12v1H3zm1 6h10v1H4zM2 6h1v6H2zm13 0h1v6h-1zm-5.5 4a.5.5 0 0 1 0 1H7.496a.5.5 0 0 1 0-1H9.5Zm4 0a.5.5 0 0 1 0 1h-2.004a.5.5 0 0 1 0-1H13.5Z"}))},QPt=YPt;var lz={};J(lz,{icon:()=>okt});var ACr=T(z());var ekt=["title","titleId"];function rpe(){return rpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rkt(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}var nkt=function(t){var r=t.title,n=t.titleId,o=tkt(t,ekt);return l("svg",rpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12.148 3.148 11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 0 1-.708 0 .502.502 0 0 1 0-.708l8.002-7.998ZM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 0 1 0 1.414l-9 9A.997.997 0 0 1 5 15H2a1 1 0 0 1-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0 1 11 1ZM5 14H2v-3l3 3Z"}))},okt=nkt;var uz={};J(uz,{icon:()=>ukt});var DCr=T(z());var ikt=["title","titleId"];function npe(){return npe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function skt(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}var lkt=function(t){var r=t.title,n=t.titleId,o=akt(t,ikt);return l("svg",npe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M5 8c1.105 0 2-1.12 2-2.5S6.105 3 5 3 3 4.12 3 5.5 3.895 8 5 8zm0-1c.356 0 1-.452 1-1.5S5.356 4 5 4s-1 .452-1 1.5S4.644 7 5 7z"}),l("path",{d:"M10.5 3H12L5.5 13H4l6.5-10z"}),l("path",{fillRule:"evenodd",d:"M13 10.5c0 1.38-.895 2.5-2 2.5s-2-1.12-2-2.5S9.895 8 11 8s2 1.12 2 2.5zm-1 0c0 1.048-.644 1.5-1 1.5s-1-.452-1-1.5.644-1.5 1-1.5 1 .452 1 1.5z"}))},ukt=lkt;var cz={};J(cz,{icon:()=>hkt});var NCr=T(z());var ckt=["title","titleId"];function ope(){return ope=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function dkt(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}var fkt=function(t){var r=t.title,n=t.titleId,o=pkt(t,ckt);return l("svg",ope({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 11h4.5a.5.5 0 1 0 0-1h-10a.5.5 0 0 0 0 1H7v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11ZM4 4h1v6H4V4Zm6 0h1v6h-1V4ZM4.286 2C4.08 2 4 2.063 4 2v1c0-.063.08 0 .286 0h6.428C10.92 3 11 2.937 11 3V2c0 .063-.08 0-.286 0H4.286Zm0-1h6.428C11.424 1 12 1.448 12 2v1c0 .552-.576 1-1.286 1H4.286C3.576 4 3 3.552 3 3V2c0-.552.576-1 1.286-1Z"}))},hkt=fkt;var pz={};J(pz,{icon:()=>bkt});var BCr=T(z());var mkt=["title","titleId"];function ipe(){return ipe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function gkt(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}var ykt=function(t){var r=t.title,n=t.titleId,o=vkt(t,mkt);return l("svg",ipe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9 11h4.5a.5.5 0 1 0 0-1h-10a.5.5 0 1 0 0 1H8v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11ZM5 4h7v6H5V4Zm.286-3h6.428C12.424 1 13 1.448 13 2v1c0 .552-.576 1-1.286 1H5.286C4.576 4 4 3.552 4 3V2c0-.552.576-1 1.286-1Z"}))},bkt=ykt;var dz={};J(dz,{icon:()=>Skt});var WCr=T(z());var wkt=["title","titleId"];function ape(){return ape=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function xkt(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}var _kt=function(t){var r=t.title,n=t.titleId,o=Okt(t,wkt);return l("svg",ape({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 3h9.5a2.5 2.5 0 0 1 0 5H6v1L4 7.5 6 6v1h5.5a1.5 1.5 0 0 0 0-3H2V3Zm1 3H2v3h1V6Zm0 4H2v3h1v-3Zm3 0-2 1.5L6 13v-1h5.5a2.5 2.5 0 0 0 2.165-3.75 3.497 3.497 0 0 1-.865.5A1.5 1.5 0 0 1 11.5 11H6v-1Z"}))},Skt=_kt;var fz={};J(fz,{icon:()=>jkt});var VCr=T(z());var Ikt=["title","titleId"];function spe(){return spe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Pkt(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}var kkt=function(t){var r=t.title,n=t.titleId,o=Ekt(t,Ikt);return l("svg",spe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 2H7v3h1V4h3V3H8V2Zm-5 8H2v3h1v-1h3v-1H3v-1Zm4 0h1v1h3v1H8v1H7v-3Zm6 0h-1v3h1v-1h1v-1h-1v-1ZM5 6h1v1h3v1H6v1H5V6Zm6 0h-1v3h1V8h3V7h-3V6Zm1-4h1v1h1v1h-1v1h-1V2ZM6 3H2v1h4V3ZM2 7h2v1H2V7Z"}))},jkt=kkt;var hz={};J(hz,{icon:()=>Rkt});var ZCr=T(z());var Tkt=["title","titleId"];function lpe(){return lpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Mkt(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}var Akt=function(t){var r=t.title,n=t.titleId,o=Ckt(t,Tkt);return l("svg",lpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M2.89 13.847 11.239 5.5a.522.522 0 0 0-.737-.737L2.154 13.11a.522.522 0 0 0 .738.738ZM14 6.696a.522.522 0 1 1-1.043 0v-3.13a.522.522 0 0 0-.522-.523h-3.13a.522.522 0 1 1 0-1.043h3.13C13.299 2 14 2.7 14 3.565v3.13Z",clipRule:"evenodd"}))},Rkt=Akt;var mz={};J(mz,{icon:()=>Bkt});var UCr=T(z());var Dkt=["title","titleId"];function upe(){return upe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Nkt(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}var Fkt=function(t){var r=t.title,n=t.titleId,o=Lkt(t,Dkt);return l("svg",upe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4.608 3.063C4.345 2.895 4 3.089 4 3.418v9.167c0 .329.345.523.608.356l7.2-4.584a.426.426 0 0 0 0-.711l-7.2-4.583Zm.538-.844 7.2 4.583a1.426 1.426 0 0 1 0 2.399l-7.2 4.583C4.21 14.38 3 13.696 3 12.585V3.418C3 2.307 4.21 1.624 5.146 2.22Z"}))},Bkt=Fkt;var vz={};J(vz,{icon:()=>$kt});var JCr=T(z());var zkt=["title","titleId"];function cpe(){return cpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Hkt(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}var Vkt=function(t){var r=t.title,n=t.titleId,o=Wkt(t,zkt);return l("svg",cpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m12.345 6.801-7.2-4.581C4.21 1.625 3 2.308 3 3.419v9.162c0 1.111 1.21 1.794 2.146 1.199l7.2-4.581a1.425 1.425 0 0 0 0-2.398z"}))},$kt=Vkt;var gz={};J(gz,{icon:()=>Jkt});var KCr=T(z());var Zkt=["title","titleId"];function ppe(){return ppe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ukt(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}var Gkt=function(t){var r=t.title,n=t.titleId,o=qkt(t,Zkt);return l("svg",ppe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.25 3a.5.5 0 0 1 .5.5v3.75h3.75a.5.5 0 0 1 .5.5v.5a.5.5 0 0 1-.5.5H8.75v3.75a.5.5 0 0 1-.5.5h-.5a.5.5 0 0 1-.5-.5V8.75H3.5a.5.5 0 0 1-.5-.5v-.5a.5.5 0 0 1 .5-.5h3.75V3.5a.5.5 0 0 1 .5-.5h.5Z"}))},Jkt=Gkt;var yz={};J(yz,{icon:()=>ejt});var QCr=T(z());var Xkt=["title","titleId"];function dpe(){return dpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ykt(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}var Qkt=function(t){var r=t.title,n=t.titleId,o=Kkt(t,Xkt);return l("svg",dpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 7h3.5a.5.5 0 1 1 0 1H8v3.5a.5.5 0 1 1-1 0V8H3.5a.5.5 0 0 1 0-1H7V3.5a.5.5 0 0 1 1 0V7Zm-.5-7C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0Zm0 .882a6.618 6.618 0 1 0 0 13.236A6.618 6.618 0 0 0 7.5.882Z"}))},ejt=Qkt;var bz={};J(bz,{icon:()=>ijt});var tMr=T(z());var tjt=["title","titleId"];function fpe(){return fpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function njt(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}var ojt=function(t){var r=t.title,n=t.titleId,o=rjt(t,tjt);return l("svg",fpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 7V3.5a.5.5 0 0 0-1 0V7H3.5a.5.5 0 0 0 0 1H7v3.5a.5.5 0 1 0 1 0V8h3.5a.5.5 0 1 0 0-1H8Zm-.5 8a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Z"}))},ijt=ojt;var wz={};J(wz,{icon:()=>cjt});var nMr=T(z());var ajt=["title","titleId"];function hpe(){return hpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ljt(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}var ujt=function(t){var r=t.title,n=t.titleId,o=sjt(t,ajt);return l("svg",hpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 4.389V7h2.611c.215 0 .389.224.389.5s-.174.5-.389.5H8v2.611c0 .215-.224.389-.5.389s-.5-.174-.5-.389V8H4.389C4.174 8 4 7.776 4 7.5s.174-.5.389-.5H7V4.389C7 4.174 7.224 4 7.5 4s.5.174.5.389Z"}),l("path",{fillRule:"evenodd",d:"M1 3a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3Zm2-1h9a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Z"}))},cjt=ujt;var Oz={};J(Oz,{icon:()=>mjt});var iMr=T(z());var pjt=["title","titleId"];function mpe(){return mpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fjt(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}var hjt=function(t){var r=t.title,n=t.titleId,o=djt(t,pjt);return l("svg",mpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13 8.5a.5.5 0 1 1 1 0V12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h3.5a.5.5 0 0 1 0 1H4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V8.5Zm-5.12.339a.5.5 0 1 1-.706-.707L13.305 2H10.5a.5.5 0 1 1 0-1H14a1 1 0 0 1 1 1v3.5a.5.5 0 1 1-1 0V2.72L7.88 8.838Z"}))},mjt=hjt;var xz={};J(xz,{icon:()=>wjt});var sMr=T(z());var vjt=["title","titleId"];function vpe(){return vpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yjt(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}var bjt=function(t){var r=t.title,n=t.titleId,o=gjt(t,vjt);return l("svg",vpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.171 5.15 10.114 7H1.556C1.249 7 1 7.224 1 7.5s.249.5.556.5h8.526l-1.91 1.82a.52.52 0 0 0 0 .77c.227.213.6.213.828 0l2.05-1.95a1.552 1.552 0 0 0 0-2.31L9 4.38a.617.617 0 0 0-.829 0 .52.52 0 0 0 0 .77z"}),l("path",{d:"M6.804 12.792A.993.993 0 0 1 6 11.82V10H5v1.826c0 .945.673 1.76 1.608 1.945l6 1.19A1.992 1.992 0 0 0 15 13.016V1.984A2 2 0 0 0 12.608.04l-6 1.19C5.673 1.415 5 2.23 5 3.175V5h1V3.18c0-.472.336-.879.804-.972l6-1.189A1 1 0 0 1 14 1.991v11.018a.995.995 0 0 1-1.196.972l-6-1.19z"}))},wjt=bjt;var _z={};J(_z,{icon:()=>Ijt});var uMr=T(z());var Ojt=["title","titleId"];function gpe(){return gpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _jt(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}var Sjt=function(t){var r=t.title,n=t.titleId,o=xjt(t,Ojt);return l("svg",gpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 14A6 6 0 1 1 8 2a6 6 0 0 1 0 12Zm0-1A5 5 0 1 0 8 3a5 5 0 0 0 0 10Zm-.186-1.065A.785.785 0 0 1 7 11.12c0-.48.34-.82.814-.82.475 0 .809.34.809.82 0 .475-.334.815-.809.815ZM5.9 6.317C5.96 5.168 6.755 4.4 8.048 4.4c1.218 0 2.091.759 2.091 1.8 0 .736-.36 1.304-1.03 1.707-.56.33-.717.56-.717 1.022v.305l-.1.1H7.47l-.1-.1v-.431c-.005-.646.302-1.104.987-1.514.527-.322.708-.59.708-1.047 0-.536-.416-.91-1.05-.91-.652 0-1.064.374-1.112.998l-.1.092H6l-.1-.105Z"}))},Ijt=Sjt;var Sz={};J(Sz,{icon:()=>Tjt});var pMr=T(z());var Ejt=["title","titleId"];function ype(){return ype=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kjt(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}var jjt=function(t){var r=t.title,n=t.titleId,o=Pjt(t,Ejt);return l("svg",ype({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.848 2.47a1 1 0 0 1-.318 1.378A7.284 7.284 0 0 0 3.75 7.01 3 3 0 1 1 1 10v-.027a3.521 3.521 0 0 1 .01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 0 1 1.378.318zm7 0a1 1 0 0 1-.318 1.378 7.283 7.283 0 0 0-2.78 3.162A3 3 0 1 1 8 10v-.027a3.521 3.521 0 0 1 .01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 0 1 1.378.318z"}))},Tjt=jjt;var Iz={};J(Iz,{icon:()=>Djt});var fMr=T(z());var Cjt=["title","titleId"];function bpe(){return bpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ajt(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}var Rjt=function(t){var r=t.title,n=t.titleId,o=Mjt(t,Cjt);return l("svg",bpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.228 2.942a.5.5 0 1 1-.538.842A5 5 0 1 0 13 8a.5.5 0 1 1 1 0 6 6 0 1 1-2.772-5.058ZM14 1.5v3A1.5 1.5 0 0 1 12.5 6h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 1 1 1 0Z"}))},Djt=Rjt;var Ez={};J(Ez,{icon:()=>zjt});var mMr=T(z());var Ljt=["title","titleId"];function wpe(){return wpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Fjt(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}var Bjt=function(t){var r=t.title,n=t.titleId,o=Njt(t,Ljt);return l("svg",wpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.684.895 6.074.358a1 1 0 0 0-1.296.753L4.2 4H2.5a.5.5 0 0 0 0 1h1.626a4.007 4.007 0 0 0 .11 2.359l-2.072-.345A1 1 0 0 0 1 8v1c.364 0 .706.097 1 .268V8l1 .167 1.859.31 2.163.36.478.08v6L2 14v-1.268A1.99 1.99 0 0 1 1 13v1a1 1 0 0 0 .836.986l6 1c.108.018.22.018.328 0l6-1A1 1 0 0 0 15 14v-1a1.99 1.99 0 0 1-1-.268V14l-5.5.917v-6l.478-.08 2.163-.36L13 8.166 14 8v1.268A1.99 1.99 0 0 1 15 9V8a1 1 0 0 0-1.164-.986l-2.073.345A3.991 3.991 0 0 0 11.874 5H13.5a.5.5 0 0 0 0-1h-1.7l-.578-2.89A1 1 0 0 0 9.925.359L8.316.895a1 1 0 0 1-.632 0zm2.88 6.664A3.013 3.013 0 0 0 10.83 5H5.17a3.013 3.013 0 0 0 .266 2.559L8 7.986l2.564-.427zM10.8 4H9.2L9 3l1.5-.5.3 1.5zM1 12a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm14 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"}))},zjt=Bjt;var Pz={};J(Pz,{icon:()=>Zjt});var gMr=T(z());var Wjt=["title","titleId"];function Ope(){return Ope=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Vjt(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}var $jt=function(t){var r=t.title,n=t.titleId,o=Hjt(t,Wjt);return l("svg",Ope({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.994 4c1.059 0 1.924.818 2 1.856l.006.15v1.988a2.005 2.005 0 0 1-1.856 2L12 10H3.484l1.91 1.82a.52.52 0 0 1 0 .77.616.616 0 0 1-.829 0l-2.05-1.95a1.551 1.551 0 0 1 0-2.31l2.05-1.95a.617.617 0 0 1 .83 0 .52.52 0 0 1 0 .77L3.45 9H12c.514-.003.935-.39.993-.888L13 7.994V6.006c0-.516-.388-.941-.888-1L11.994 5H9.5a.5.5 0 0 1-.09-.992L9.5 4h2.494z"}))},Zjt=$jt;var kz={};J(kz,{icon:()=>Xjt});var bMr=T(z());var qjt=["title","titleId"];function xpe(){return xpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Gjt(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}var Jjt=function(t){var r=t.title,n=t.titleId,o=Ujt(t,qjt);return l("svg",xpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.008 2H2.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275v11.436c0 .181.002.245.007.275.03.005.094.007.275.007h11.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V4.62c0-.13-.001-.18-.004-.204a2.654 2.654 0 0 0-.141-.147L11.73 2.145a2.654 2.654 0 0 0-.147-.141A2.654 2.654 0 0 0 11.38 2h-.388c.005.08.008.172.008.282v2.436c0 .446-.046.607-.134.77a.909.909 0 0 1-.378.378c-.163.088-.324.134-.77.134H6.282c-.446 0-.607-.046-.77-.134a.909.909 0 0 1-.378-.378C5.046 5.325 5 5.164 5 4.718V2.282c0-.11.003-.202.008-.282ZM2.282 1h9.098c.259 0 .348.01.447.032a.87.87 0 0 1 .273.113c.086.054.156.11.338.293l2.124 2.124c.182.182.239.252.293.338a.87.87 0 0 1 .113.273c.023.1.032.188.032.447v9.098c0 .446-.046.607-.134.77a.909.909 0 0 1-.378.378c-.163.088-.324.134-.77.134H2.282c-.446 0-.607-.046-.77-.134a.909.909 0 0 1-.378-.378c-.088-.163-.134-.324-.134-.77V2.282c0-.446.046-.607.134-.77a.909.909 0 0 1 .378-.378c.163-.088.324-.134.77-.134ZM6 2.282v2.436c0 .181.002.245.007.275.03.005.094.007.275.007h3.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V2.282c0-.181-.002-.245-.007-.275A2.248 2.248 0 0 0 9.718 2H6.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275ZM8 12a2 2 0 1 1 0-4 2 2 0 0 1 0 4Zm0-1a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}))},Xjt=Jjt;var jz={};J(jz,{icon:()=>tTt});var OMr=T(z());var Kjt=["title","titleId"];function _pe(){return _pe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Qjt(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}var eTt=function(t){var r=t.title,n=t.titleId,o=Yjt(t,Kjt);return l("svg",_pe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M12.5 12a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm4-2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm2-1a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm0-3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm0 2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm2-2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm6-6a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm-2 2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Z"}))},tTt=eTt;var Tz={};J(Tz,{icon:()=>aTt});var _Mr=T(z());var rTt=["title","titleId"];function Spe(){return Spe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function oTt(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}var iTt=function(t){var r=t.title,n=t.titleId,o=nTt(t,rTt);return l("svg",Spe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m11.271 11.978 3.872 3.873a.502.502 0 0 0 .708 0 .502.502 0 0 0 0-.708l-3.565-3.564c2.38-2.747 2.267-6.923-.342-9.532-2.73-2.73-7.17-2.73-9.898 0-2.728 2.729-2.728 7.17 0 9.9a6.955 6.955 0 0 0 4.949 2.05.5.5 0 0 0 0-1 5.96 5.96 0 0 1-4.242-1.757 6.01 6.01 0 0 1 0-8.486c2.337-2.34 6.143-2.34 8.484 0a6.01 6.01 0 0 1 0 8.486.5.5 0 0 0 .034.738Z"}))},aTt=iTt;var Cz={};J(Cz,{icon:()=>pTt});var IMr=T(z());var sTt=["title","titleId"];function Ipe(){return Ipe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uTt(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}var cTt=function(t){var r=t.title,n=t.titleId,o=lTt(t,sTt);return l("svg",Ipe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M11.875 3.418a6 6 0 1 0 .707.707l-2.46 2.46-1.156 1.156a1 1 0 1 1-.707-.707l.757-.757a2 2 0 0 0-2.43 3.137.5.5 0 1 1-.707.707 3 3 0 0 1 3.86-4.567l.714-.714A4 4 0 1 0 8 12a.5.5 0 1 1 0 1 5 5 0 1 1 3.164-8.871l.71-.71zm.709-.709a7 7 0 1 0 .707.707l.366-.366a.5.5 0 1 0-.707-.707l-.366.366z"}))},pTt=cTt;var Mz={};J(Mz,{icon:()=>vTt});var PMr=T(z());var dTt=["title","titleId"];function Epe(){return Epe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hTt(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}var mTt=function(t){var r=t.title,n=t.titleId,o=fTt(t,dTt);return l("svg",Epe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 0 0-.707-.707l-.366.366A7 7 0 1 0 8 15a4.994 4.994 0 0 1-.597-1.03 6 6 0 1 1 4.471-10.552l-.71.71a5 5 0 1 0-4.08 8.788 5.027 5.027 0 0 1-.082-1.042A4.002 4.002 0 0 1 8 4a3.98 3.98 0 0 1 2.453.84l-.715.714a3 3 0 0 0-3.86 4.567.5.5 0 1 0 .708-.707 2 2 0 0 1 2.43-3.137l-.757.757a1 1 0 1 0 .707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 0 1 1.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 1 1-8 0 4 4 0 0 1 8 0zm-4 .5a.577.577 0 0 1-.57-.495l-.29-2.015a.867.867 0 1 1 1.718 0l-.288 2.015a.577.577 0 0 1-.57.495zm0 2.5a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"}))},vTt=mTt;var Az={};J(Az,{icon:()=>OTt});var jMr=T(z());var gTt=["title","titleId"];function Ppe(){return Ppe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bTt(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}var wTt=function(t){var r=t.title,n=t.titleId,o=yTt(t,gTt);return l("svg",Ppe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 1 0-.707-.707l-.366.366A7 7 0 1 0 8 15a4.994 4.994 0 0 1-.597-1.03 6 6 0 1 1 4.471-10.552l-.71.71a5 5 0 1 0-4.08 8.788 5.028 5.028 0 0 1-.082-1.042A4.002 4.002 0 0 1 8 4a3.98 3.98 0 0 1 2.453.84l-.715.714a3 3 0 0 0-3.86 4.567.5.5 0 1 0 .708-.707 2 2 0 0 1 2.43-3.137l-.757.757a1 1 0 1 0 .707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 0 1 1.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 1 1-8 0 4 4 0 0 1 8 0zm-1.646-1.354a.5.5 0 0 1 0 .707l-2.5 2.5a.5.5 0 0 1-.708 0l-1-1a.5.5 0 0 1 .708-.707l.646.647 2.146-2.147a.5.5 0 0 1 .708 0z"}))},OTt=wTt;var Rz={};J(Rz,{icon:()=>ETt});var CMr=T(z());var xTt=["title","titleId"];function kpe(){return kpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function STt(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}var ITt=function(t){var r=t.title,n=t.titleId,o=_Tt(t,xTt);return l("svg",kpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 6h1v1H4V6zm2 2H5V7h1v1zm0 1V8h1v1H6zm-1 1V9h1v1H5zm0 0v1H4v-1h1zm2 0h4v1H7v-1z"}),l("path",{fillRule:"evenodd",d:"M1 3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V3zm1 1h12v9H2V4z",clipRule:"evenodd"}))},ETt=ITt;var Dz={};J(Dz,{icon:()=>CTt});var AMr=T(z());var PTt=["title","titleId"];function jpe(){return jpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jTt(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}var TTt=function(t){var r=t.title,n=t.titleId,o=kTt(t,PTt);return l("svg",jpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.134 7.031 8 12.764l2.866-5.733L8 2.016 5.134 7.03ZM8 0l4 7-4 8-4-8 4-7Z"}))},CTt=TTt;var Lz={};J(Lz,{icon:()=>LTt});var DMr=T(z());var MTt=["title","titleId"];function Tpe(){return Tpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function RTt(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}var DTt=function(t){var r=t.title,n=t.titleId,o=ATt(t,MTt);return l("svg",Tpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 6.81v6.38c0 .493.448.9.992.9h7.016c.543 0 .992-.406.992-.9V6.81c0-.493-.448-.9-.992-.9H3.992c-.543 0-.992.406-.992.9ZM6 5v.91h3V5h2.008C12.108 5 13 5.818 13 6.81v6.38c0 1-.9 1.81-1.992 1.81H3.992C2.892 15 2 14.182 2 13.19V6.81C2 5.81 2.9 5 3.992 5H6Zm1.997-3.552A.506.506 0 0 1 8 1.5v8a.5.5 0 0 1-1 0v-8a.51.51 0 0 1 0-.017L5.18 3.394a.52.52 0 0 1-.77 0 .617.617 0 0 1 0-.829L6.36.515a1.552 1.552 0 0 1 2.31 0l1.95 2.05c.214.229.214.601 0 .83a.52.52 0 0 1-.77 0L7.997 1.447Z"}))},LTt=DTt;var Nz={};J(Nz,{icon:()=>WTt});var NMr=T(z());var NTt=["title","titleId"];function Cpe(){return Cpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function BTt(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}var zTt=function(t){var r=t.title,n=t.titleId,o=FTt(t,NTt);return l("svg",Cpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.5 1a.5.5 0 0 1 .5.5V14h12.5a.5.5 0 0 1 0 1h-13a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 .5-.5Z"}),l("path",{d:"M12.935 6.652a.6.6 0 0 0-.951-.062L9 10l-2.747-.916a.6.6 0 0 0-.485.047L3 10.69v1.81a.5.5 0 0 0 .5.5h11a.5.5 0 0 0 .5-.5V9.75l-2.065-3.098Z"}),l("path",{d:"M13.023 2.758a.6.6 0 0 0-.987-.077L8.388 7.203l-2.093-.83a.6.6 0 0 0-.552.058L3.221 8.098a.49.49 0 0 0-.138.683.5.5 0 0 0 .689.136l2.349-1.552 2.582 1.024 3.746-4.643 1.623 2.817c.136.237.44.319.678.184a.49.49 0 0 0 .184-.672l-1.91-3.317Z"}))},WTt=zTt;var Fz={};J(Fz,{icon:()=>qTt});var BMr=T(z());var HTt=["title","titleId"];function Mpe(){return Mpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $Tt(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}var ZTt=function(t){var r=t.title,n=t.titleId,o=VTt(t,HTt);return l("svg",Mpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.007.5a.5.5 0 0 1 1 0v2.024a.999.999 0 0 0 .268-.227l1.027-1.233a.5.5 0 0 1 .769.64L8.275 3.86a.999.999 0 0 1-.268.227v2.548l2.207-1.274c0-.114.02-.231.062-.346l.968-2.632a.5.5 0 1 1 .938.345l-.554 1.506a.998.998 0 0 0-.062.346l1.753-1.012a.5.5 0 1 1 .5.866l-1.753 1.012c.1.057.21.098.33.119l1.582.273a.5.5 0 1 1-.17.986l-2.764-.478a1 1 0 0 1-.33-.12L8.506 7.5l2.207 1.274a1 1 0 0 1 .33-.119l2.764-.478a.5.5 0 1 1 .17.986l-1.582.273a.999.999 0 0 0-.33.12l1.753 1.011a.5.5 0 1 1-.5.866l-1.753-1.012c0 .115.02.231.062.346l.554 1.506a.5.5 0 0 1-.938.345l-.968-2.632a.999.999 0 0 1-.062-.346L8.007 8.366v2.548c.098.058.19.133.268.227l1.796 2.155a.5.5 0 0 1-.769.64l-1.027-1.233a.999.999 0 0 0-.268-.226V14.5a.5.5 0 0 1-1 0v-2.024a.999.999 0 0 0-.269.227l-1.027 1.233a.5.5 0 0 1-.768-.64l1.795-2.155a.999.999 0 0 1 .269-.227V8.366L4.8 9.64c0 .114-.02.231-.062.346l-.969 2.632a.5.5 0 1 1-.938-.345l.554-1.506a1 1 0 0 0 .062-.346l-1.753 1.012a.5.5 0 0 1-.5-.866l1.753-1.012a.999.999 0 0 0-.33-.119l-1.582-.273a.5.5 0 0 1 .17-.986l2.764.478c.12.02.232.062.33.12L6.508 7.5 4.3 6.226a.999.999 0 0 1-.33.119l-2.765.478a.5.5 0 1 1-.17-.986l1.582-.273a.999.999 0 0 0 .33-.12L1.194 4.434a.5.5 0 1 1 .5-.866l1.753 1.012c0-.114-.02-.231-.062-.346L2.83 2.727a.5.5 0 1 1 .938-.345l.969 2.632a.999.999 0 0 1 .062.346l2.207 1.274V4.086a1 1 0 0 1-.269-.227L4.943 1.704a.5.5 0 0 1 .768-.64l1.027 1.233c.079.094.17.17.269.227V.5Z"}))},qTt=ZTt;var Bz={};J(Bz,{icon:()=>KTt});var WMr=T(z());var UTt=["title","titleId"];function Ape(){return Ape=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function JTt(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}var XTt=function(t){var r=t.title,n=t.titleId,o=GTt(t,UTt);return l("svg",Ape({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3.854 3.146a.5.5 0 0 0-.708 0l-2 2a.5.5 0 1 0 .708.708L3 4.707V11.5a.5.5 0 0 0 1 0V4.707l1.146 1.147a.5.5 0 1 0 .708-.708l-2-2ZM8 4.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5ZM8.5 7a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1h-4ZM8 10.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Z"}))},KTt=XTt;var zz={};J(zz,{icon:()=>rCt});var VMr=T(z());var YTt=["title","titleId"];function Rpe(){return Rpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function eCt(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}var tCt=function(t){var r=t.title,n=t.titleId,o=QTt(t,YTt);return l("svg",Rpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M4 10.293V3.5a.5.5 0 0 0-1 0v6.793L1.854 9.146a.5.5 0 1 0-.708.708l2 2a.5.5 0 0 0 .708 0l2-2a.5.5 0 1 0-.708-.708L4 10.293ZM8 4.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5ZM8.5 7a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1h-4ZM8 10.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Z"}))},rCt=tCt;var Wz={};J(Wz,{icon:()=>sCt});var ZMr=T(z());var nCt=["title","titleId"];function Dpe(){return Dpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function iCt(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}var aCt=function(t){var r=t.title,n=t.titleId,o=oCt(t,nCt);return l("svg",Dpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4.308 7h8.136c.307 0 .556.224.556.5s-.249.5-.556.5H4.308l4.096 4.096a.5.5 0 0 1-.707.707L3.454 8.561a1.494 1.494 0 0 1-.433-.925.454.454 0 0 1 0-.272c.03-.338.175-.666.433-.925l4.243-4.242a.5.5 0 1 1 .707.707L4.308 7Z"}))},sCt=aCt;var Hz={};J(Hz,{icon:()=>dCt});var UMr=T(z());var lCt=["title","titleId"];function Lpe(){return Lpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cCt(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}var pCt=function(t){var r=t.title,n=t.titleId,o=uCt(t,lCt);return l("svg",Lpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11.692 7H3.556C3.249 7 3 7.224 3 7.5s.249.5.556.5h8.136l-4.096 4.096a.5.5 0 0 0 .707.707l4.243-4.242c.258-.259.403-.587.433-.925a.454.454 0 0 0 0-.272 1.494 1.494 0 0 0-.433-.925L8.303 2.197a.5.5 0 1 0-.707.707L11.692 7Z"}))},dCt=pCt;var Vz={};J(Vz,{icon:()=>gCt});var JMr=T(z());var fCt=["title","titleId"];function Npe(){return Npe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mCt(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}var vCt=function(t){var r=t.title,n=t.titleId,o=hCt(t,fCt);return l("svg",Npe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 11.692V3.556C7 3.249 7.224 3 7.5 3s.5.249.5.556v8.136l4.096-4.096a.5.5 0 0 1 .707.707l-4.242 4.243a1.494 1.494 0 0 1-.925.433.454.454 0 0 1-.272 0 1.494 1.494 0 0 1-.925-.433L2.197 8.303a.5.5 0 1 1 .707-.707L7 11.692Z"}))},gCt=vCt;var $z={};J($z,{icon:()=>xCt});var KMr=T(z());var yCt=["title","titleId"];function Fpe(){return Fpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wCt(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}var OCt=function(t){var r=t.title,n=t.titleId,o=bCt(t,yCt);return l("svg",Fpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 4.207v8.237c0 .307-.224.556-.5.556s-.5-.249-.5-.556V4.207L2.904 8.303a.5.5 0 0 1-.707-.707l4.242-4.242a1.5 1.5 0 0 1 2.122 0l4.242 4.242a.5.5 0 1 1-.707.707L8 4.207Z"}))},xCt=OCt;var Zz={};J(Zz,{icon:()=>PCt});var QMr=T(z());var _Ct=["title","titleId"];function Bpe(){return Bpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ICt(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}var ECt=function(t){var r=t.title,n=t.titleId,o=SCt(t,_Ct);return l("svg",Bpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7 12.786V3.2L3.604 6.596a.5.5 0 0 1-.708-.707l3.536-3.535a1.5 1.5 0 0 1 2.121 0l3.536 3.535a.5.5 0 0 1-.707.707L8 3.214v9.557l3.382-3.382a.5.5 0 0 1 .707.707l-3.536 3.536a1.5 1.5 0 0 1-2.121 0l-3.536-3.536a.5.5 0 0 1 .708-.707L7 12.786Z"}))},PCt=ECt;var qz={};J(qz,{icon:()=>MCt});var tAr=T(z());var kCt=["title","titleId"];function zpe(){return zpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function TCt(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}var CCt=function(t){var r=t.title,n=t.titleId,o=jCt(t,kCt);return l("svg",zpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 3H3v3h3V3ZM3 2a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H3Zm3 8H3v3h3v-3ZM3 9a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1H3Zm10-6h-3v3h3V3Zm-3-1a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1h-3Zm3 8h-3v3h3v-3Zm-3-1a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-3Z",clipRule:"evenodd"}))},MCt=CCt;var Uz={};J(Uz,{icon:()=>NCt});var nAr=T(z());var ACt=["title","titleId"];function Wpe(){return Wpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function DCt(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}var LCt=function(t){var r=t.title,n=t.titleId,o=RCt(t,ACt);return l("svg",Wpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m5.016 4.383.035-.093a.492.492 0 0 1 .898 0l.035.093c.048.128.072.192.097.253a5.9 5.9 0 0 0 3.536 3.38l.093.035a.492.492 0 0 1 0 .898l-.093.035a5.9 5.9 0 0 0-3.536 3.38c-.025.06-.049.125-.097.253l-.035.093a.492.492 0 0 1-.898 0l-.035-.093c-.048-.128-.072-.192-.097-.253a5.9 5.9 0 0 0-3.536-3.38 2.175 2.175 0 0 1-.093-.035.492.492 0 0 1 0-.898l.093-.035c.128-.048.192-.072.253-.097a5.9 5.9 0 0 0 3.38-3.536Zm6.769-2.213a.968.968 0 0 1 .016-.041.219.219 0 0 1 .398 0 2.622 2.622 0 0 0 1.518 1.613l.113.043a.272.272 0 0 1 .04.016.219.219 0 0 1 0 .398.272.272 0 0 1-.04.016l-.113.043a2.622 2.622 0 0 0-1.502 1.572.968.968 0 0 1-.016.04.219.219 0 0 1-.398 0 2.622 2.622 0 0 0-1.518-1.613l-.113-.042a.272.272 0 0 1-.04-.016.219.219 0 0 1 0-.398.272.272 0 0 1 .04-.016l.113-.043a2.622 2.622 0 0 0 1.502-1.572Zm-.555 8.043.02-.052a.273.273 0 0 1 .5 0l.02.052.053.14a3.275 3.275 0 0 0 1.824 1.824l.14.054c.03.01.044.016.052.02a.273.273 0 0 1 0 .498 1.248 1.248 0 0 1-.052.02c-.07.027-.107.04-.14.054a3.279 3.279 0 0 0-1.824 1.824l-.054.14a.409.409 0 0 1-.02.052.273.273 0 0 1-.498 0 1.248 1.248 0 0 1-.02-.052c-.027-.07-.04-.107-.054-.14a3.279 3.279 0 0 0-1.824-1.824l-.14-.054a1.24 1.24 0 0 1-.052-.02.273.273 0 0 1 0-.498 1.24 1.24 0 0 1 .052-.02l.14-.054a3.279 3.279 0 0 0 1.824-1.824l.054-.14Z"}))},NCt=LCt;var Gz={};J(Gz,{icon:()=>HCt});var iAr=T(z());var FCt=["title","titleId"];function Hpe(){return Hpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zCt(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}var WCt=function(t){var r=t.title,n=t.titleId,o=BCt(t,FCt);return l("svg",Hpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 0 0-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 0 0 2.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 0 0 .859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 0 0 6 2m8 8h2v1h-2v2h-1v-2h-2v-1h2V8h1v2ZM6 3c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 0 1-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 0 1-.091.046.106.106 0 0 1-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 0 1-.054.016.127.127 0 0 1-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 0 1-.029-.126.108.108 0 0 1 .094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3Z"}))},HCt=WCt;var Jz={};J(Jz,{icon:()=>UCt});var sAr=T(z());var VCt=["title","titleId"];function Vpe(){return Vpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ZCt(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}var qCt=function(t){var r=t.title,n=t.titleId,o=$Ct(t,VCt);return l("svg",Vpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M14 10h2v1h-2v2h-1v-2h-2v-1h2V8h1v2ZM6 2a.86.86 0 0 0-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 0 0 2.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 0 0 .859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 0 0 6 2"}))},UCt=qCt;var Xz={};J(Xz,{icon:()=>YCt});var uAr=T(z());var GCt=["title","titleId"];function $pe(){return $pe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function XCt(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}var KCt=function(t){var r=t.title,n=t.titleId,o=JCt(t,GCt);return l("svg",$pe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 0 0-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 0 0 4.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 0 0 .859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 0 0 8 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 0 1-.029.126l-2.202 2.226-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 0 1-.091.046.106.106 0 0 1-.055-.016l-2.578-1.469L8 11.314l-.354.201-2.579 1.469a.103.103 0 0 1-.054.016.127.127 0 0 1-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 0 1-.029-.126.108.108 0 0 1 .094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C7.905 3.05 7.927 3 8 3"}))},YCt=KCt;var Kz={};J(Kz,{icon:()=>nMt});var pAr=T(z());var QCt=["title","titleId"];function Zpe(){return Zpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function tMt(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}var rMt=function(t){var r=t.title,n=t.titleId,o=eMt(t,QCt);return l("svg",Zpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 0 0-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 0 0 2.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 0 0 .859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 0 0 6 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 0 1-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 0 1-.091.046.106.106 0 0 1-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 0 1-.054.016.127.127 0 0 1-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 0 1-.029-.126.108.108 0 0 1 .094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3"}))},nMt=rMt;var Yz={};J(Yz,{icon:()=>lMt});var fAr=T(z());var oMt=["title","titleId"];function qpe(){return qpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function aMt(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}var sMt=function(t){var r=t.title,n=t.titleId,o=iMt(t,oMt);return l("svg",qpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 0 0-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 0 0 4.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 0 0 .859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 0 0 8 2"}))},lMt=sMt;var Qz={};J(Qz,{icon:()=>fMt});var mAr=T(z());var uMt=["title","titleId"];function Upe(){return Upe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pMt(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}var dMt=function(t){var r=t.title,n=t.titleId,o=cMt(t,uMt);return l("svg",Upe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 0 0-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 0 0 2.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 0 0 .859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 0 0 6 2"}))},fMt=dMt;var eW={};J(eW,{icon:()=>yMt});var gAr=T(z());var hMt=["title","titleId"];function Gpe(){return Gpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vMt(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}var gMt=function(t){var r=t.title,n=t.titleId,o=mMt(t,hMt);return l("svg",Gpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 0 0-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 0 0 2.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 0 0 .859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 0 0 6 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 0 1-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 0 1-.091.046.106.106 0 0 1-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 0 1-.054.016.127.127 0 0 1-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 0 1-.029-.126.108.108 0 0 1 .094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3Zm10 7v1h-5v-1h5Z"}))},yMt=gMt;var tW={};J(tW,{icon:()=>_Mt});var bAr=T(z());var bMt=["title","titleId"];function Jpe(){return Jpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function OMt(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}var xMt=function(t){var r=t.title,n=t.titleId,o=wMt(t,bMt);return l("svg",Jpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 0 1 .792.511l1.33 2.924 3.128.446c.71.102 1.001.976.496 1.487L9.433 9.704l.563 3.268A.877.877 0 0 1 9.136 14a.862.862 0 0 1-.429-.116L6 12.342l-2.707 1.542a.862.862 0 0 1-.43.116.877.877 0 0 1-.859-1.027l.563-3.269L.254 7.368C-.25 6.857.04 5.983.75 5.88l3.128-.446 1.33-2.923A.86.86 0 0 1 6 2Zm10 8v1h-5v-1h5Z"}))},_Mt=xMt;var rW={};J(rW,{icon:()=>kMt});var OAr=T(z());var SMt=["title","titleId"];function Xpe(){return Xpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function EMt(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}var PMt=function(t){var r=t.title,n=t.titleId,o=IMt(t,SMt);return l("svg",Xpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 14v-4h1v4h5V5h1v9a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1v-2h1v2h6Zm4.853-10.146-2.999 3a1.5 1.5 0 0 1-2.538 1.568l-2.714.904L4 9.527a1.5 1.5 0 1 1-.316-.948L7 7.473a1.5 1.5 0 0 1 2.146-1.327l3-3a1.5 1.5 0 1 1 .707.707Z"}))},kMt=PMt;var nW={};J(nW,{icon:()=>AMt});var _Ar=T(z());var jMt=["title","titleId"];function Kpe(){return Kpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function CMt(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}var MMt=function(t){var r=t.title,n=t.titleId,o=TMt(t,jMt);return l("svg",Kpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1H4Z"}))},AMt=MMt;var oW={};J(oW,{icon:()=>FMt});var IAr=T(z());var RMt=["title","titleId"];function Ype(){return Ype=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function LMt(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}var NMt=function(t){var r=t.title,n=t.titleId,o=DMt(t,RMt);return l("svg",Ype({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("rect",{width:12,height:12,x:2,y:2,fillRule:"evenodd",rx:2}))},FMt=NMt;var iW={};J(iW,{icon:()=>VMt});var PAr=T(z());var BMt=["title","titleId"];function Qpe(){return Qpe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function WMt(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}var HMt=function(t){var r=t.title,n=t.titleId,o=zMt(t,BMt);return l("svg",Qpe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12.259 3.034A1.001 1.001 0 0 0 12 3H4a1 1 0 0 0-1 1v8c0 .09.012.176.034.259l9.225-9.225Zm.707.707-9.225 9.225c.083.022.17.034.259.034h8a1 1 0 0 0 1-1V4c0-.09-.012-.176-.034-.259ZM4 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Z"}))},VMt=HMt;var aW={};J(aW,{icon:()=>GMt});var jAr=T(z());var $Mt=["title","titleId"];function ede(){return ede=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function qMt(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}var UMt=function(t){var r=t.title,n=t.titleId,o=ZMt(t,$Mt);return l("svg",ede({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fillRule:"evenodd",transform:"translate(0 2)"},l("path",{fillRule:"nonzero",d:"M2 6a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1H2Zm13 2v3a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1Zm1-3V2a2 2 0 0 0-2-2H2a2 2 0 0 0-2 2v3c0 .601.271 1.133.69 1.5C.271 6.867 0 7.399 0 8v3a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8c0-.601-.271-1.133-.689-1.5.418-.367.689-.899.689-1.5Z"}),l("circle",{cx:4.5,cy:9.5,r:1.5}),l("circle",{cx:4.5,cy:3.5,r:1.5}),l("path",{d:"M12 8h1v3h-1zM10 8h1v3h-1zM12 2h1v3h-1zM10 2h1v3h-1z"})))},GMt=UMt;var sW={};J(sW,{icon:()=>QMt});var CAr=T(z());var JMt=["title","titleId"];function tde(){return tde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function KMt(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}var YMt=function(t){var r=t.title,n=t.titleId,o=XMt(t,JMt);return l("svg",tde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M9.297 3 8.93 5.102h1.351l-.32 1.828H8.609l-.656 3.883c-.036.265-.02.466.05.601.071.135.247.208.528.219.11.005.334-.008.672-.04L9.016 13.5a4.16 4.16 0 0 1-1.383.195c-.797-.01-1.393-.244-1.79-.703-.395-.458-.557-1.08-.484-1.867l.688-4.195H5l.313-1.828h1.046L6.727 3h2.57z"}))},QMt=YMt;var lW={};J(lW,{icon:()=>oAt});var AAr=T(z());var eAt=["title","titleId"];function rde(){return rde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rAt(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}var nAt=function(t){var r=t.title,n=t.titleId,o=tAt(t,eAt);return l("svg",rde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6 2H1v12h3V7a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v1h4V4H7c-.621 0-1-.379-1-1V2Zm10 6v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.25a.75.75 0 0 1 .75.75l-.004.206C6.99 2.317 6.974 3 7 3h8a1 1 0 0 1 1 1v4Zm-1 1h-4a1 1 0 0 1-1-1V7H5v7h10V9ZM2 4.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5ZM6.5 9a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-2Z",clipRule:"evenodd"}))},oAt=nAt;var uW={};J(uW,{icon:()=>uAt});var DAr=T(z());var iAt=["title","titleId"];function nde(){return nde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function sAt(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}var lAt=function(t){var r=t.title,n=t.titleId,o=aAt(t,iAt);return l("svg",nde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 8a4 4 0 1 1-8 0 4 4 0 0 1 8 0ZM7.25.75a.75.75 0 0 1 1.5 0v1.5a.75.75 0 1 1-1.5 0V.75Zm0 13a.75.75 0 0 1 1.5 0v1.5a.75.75 0 0 1-1.5 0v-1.5Zm5.346-11.407a.75.75 0 0 1 1.06 1.06l-1.06 1.061a.75.75 0 0 1-1.06-1.06l1.06-1.06Zm-9.192 9.193a.75.75 0 1 1 1.06 1.06l-1.06 1.06a.75.75 0 0 1-1.06-1.06l1.06-1.06ZM.75 8.75a.75.75 0 0 1 0-1.5h1.5a.75.75 0 1 1 0 1.5H.75Zm13 0a.75.75 0 0 1 0-1.5h1.5a.75.75 0 0 1 0 1.5h-1.5ZM2.343 3.404a.75.75 0 1 1 1.06-1.06l1.061 1.06a.75.75 0 0 1-1.06 1.06l-1.06-1.06Zm9.193 9.192a.75.75 0 0 1 1.06-1.06l1.06 1.06a.75.75 0 0 1-1.06 1.06l-1.06-1.06Z"}))},uAt=lAt;var cW={};J(cW,{icon:()=>hAt});var NAr=T(z());var cAt=["title","titleId"];function ode(){return ode=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function dAt(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}var fAt=function(t){var r=t.title,n=t.titleId,o=pAt(t,cAt);return l("svg",ode({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("rect",{width:12,height:12,x:2,y:2,rx:3}),l("rect",{width:11,height:11,x:2.5,y:2.5,className:"euiSwatchInput__stroke",rx:2}))},hAt=fAt;var pW={};J(pW,{icon:()=>bAt});var BAr=T(z());var mAt=["title","titleId"];function ide(){return ide=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function gAt(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}var yAt=function(t){var r=t.title,n=t.titleId,o=vAt(t,mAt);return l("svg",ide({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M10.8 0H2a1 1 0 0 0-1 1v8l1-1V1h8v3.5a.5.5 0 0 0 .5.5H14v10H2v-1a3.5 3.5 0 0 1 3.5-3.5H8V13l3-3-3-3v2.5H5.5A4.5 4.5 0 0 0 1 14v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4.429c0-.256-.098-.503-.274-.689l-3.2-3.428A1.002 1.002 0 0 0 10.8 0Z",clipRule:"evenodd"}))},bAt=yAt;var dW={};J(dW,{icon:()=>SAt});var WAr=T(z());var wAt=["title","titleId"];function ade(){return ade=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function xAt(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}var _At=function(t){var r=t.title,n=t.titleId,o=OAt(t,wAt);return l("svg",ade({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1 1v14h14V1H1zM0 0h16v16H0V0zm9 1v14h1V1H9zM3 3.5h4v-1H3v1zm0 3h4v-1H3v1zm0 3h4v-1H3v1z"}))},SAt=_At;var fW={};J(fW,{icon:()=>jAt});var VAr=T(z());var IAt=["title","titleId"];function sde(){return sde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function PAt(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}var kAt=function(t){var r=t.title,n=t.titleId,o=EAt(t,IAt);return l("svg",sde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 3v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v1Zm-1 0V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v1h14Zm0 1H1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4ZM4.496 7a.5.5 0 0 1 0 1H2.495a.5.5 0 0 1 0-1h2.001Zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 8 6 7.776 6 7.5s.128-.5.286-.5h3.428ZM4.496 5a.5.5 0 0 1 0 1H2.495a.5.5 0 0 1 0-1h2.001Zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 6 6 5.776 6 5.5s.128-.5.286-.5h3.428ZM4.496 9a.5.5 0 0 1 0 1H2.495a.5.5 0 0 1 0-1h2.001Zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428Zm-5.218 2a.5.5 0 0 1 0 1H2.495a.5.5 0 0 1 0-1h2.001Zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 12 6 11.776 6 11.5s.128-.5.286-.5h3.428Zm-5.218 2a.5.5 0 0 1 0 1H2.495a.5.5 0 0 1 0-1h2.001Zm9-6a.5.5 0 0 1 0 1h-2.001a.5.5 0 0 1 0-1h2.001Zm0-2a.5.5 0 0 1 0 1h-2.001a.5.5 0 0 1 0-1h2.001Zm0 4a.5.5 0 0 1 0 1h-2.001a.5.5 0 0 1 0-1h2.001Zm0 2a.5.5 0 0 1 0 1h-2.001a.5.5 0 0 1 0-1h2.001Zm0 2a.5.5 0 0 1 0 1h-2.001a.5.5 0 0 1 0-1h2.001Zm-3.782 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 14 6 13.776 6 13.5s.128-.5.286-.5h3.428Z"}))},jAt=kAt;var hW={};J(hW,{icon:()=>RAt});var ZAr=T(z());var TAt=["title","titleId"];function lde(){return lde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function MAt(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}var AAt=function(t){var r=t.title,n=t.titleId,o=CAt(t,TAt);return l("svg",lde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 3v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v1Zm-1 0V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v1h14Zm0 1H1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4ZM4.5 7a.5.5 0 0 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm9 0a.5.5 0 1 1 0 1h-6a.5.5 0 0 1 0-1h6Zm-9 4a.5.5 0 1 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm9 0a.5.5 0 1 1 0 1h-6a.5.5 0 1 1 0-1h6Z"}))},RAt=AAt;var mW={};J(mW,{icon:()=>BAt});var UAr=T(z());var DAt=["title","titleId"];function ude(){return ude=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function NAt(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}var FAt=function(t){var r=t.title,n=t.titleId,o=LAt(t,DAt);return l("svg",ude({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 3v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v1Zm-1 0V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v1h14Zm0 1H1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4ZM4.5 6a.5.5 0 0 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 7 6 6.776 6 6.5s.128-.5.286-.5h3.428ZM4.5 9a.5.5 0 0 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428ZM4.5 12a.5.5 0 1 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm9-6a.5.5 0 1 1 0 1h-2.004a.5.5 0 0 1 0-1H13.5Zm0 3a.5.5 0 1 1 0 1h-2.004a.5.5 0 0 1 0-1H13.5Zm0 3a.5.5 0 1 1 0 1h-2.004a.5.5 0 0 1 0-1H13.5Zm-3.786 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 13 6 12.776 6 12.5s.128-.5.286-.5h3.428Z"}))},BAt=FAt;var vW={};J(vW,{icon:()=>$At});var JAr=T(z());var zAt=["title","titleId"];function cde(){return cde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function HAt(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}var VAt=function(t){var r=t.title,n=t.titleId,o=WAt(t,zAt);return l("svg",cde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.254 14.97.996 9.712c-.315-.316-.397-.463-.45-.64a.909.909 0 0 1 0-.534c.053-.177.135-.324.45-.64L7.43 1.466c.182-.183.252-.24.338-.293a.87.87 0 0 1 .273-.113c.099-.023.188-.032.446-.032h5.173c.445 0 .607.046.77.133.162.087.29.214.377.377.088.162.134.324.136.769l.015 5.15c0 .259-.009.348-.032.448a.87.87 0 0 1-.112.273c-.054.087-.111.157-.294.34L8.067 14.97c-.315.315-.462.396-.639.45a.909.909 0 0 1-.535 0c-.176-.054-.324-.135-.639-.45Zm1.106-.707 6.453-6.453c.092-.092.126-.128.141-.147.003-.025.004-.074.004-.204l-.015-5.15c0-.181-.003-.245-.009-.275a2.247 2.247 0 0 0-.274-.007H8.487c-.13 0-.179.001-.203.004-.02.015-.055.05-.147.141L1.703 8.606a2.248 2.248 0 0 0-.189.2c.017.024.061.07.19.198l5.257 5.259c.128.128.175.171.2.188.024-.017.071-.06.2-.188Zm4.972-10.607a2 2 0 1 1-2.828 2.828 2 2 0 0 1 2.828-2.828Zm-.707.707a1 1 0 1 0-1.414 1.414 1 1 0 0 0 1.414-1.414ZM6.807 11.28 4.686 9.159a.5.5 0 1 1 .707-.707l2.121 2.12a.5.5 0 1 1-.707.708Zm1.414-1.414-2.12-2.122a.5.5 0 1 1 .706-.707L8.928 9.16a.5.5 0 1 1-.707.707Z"}))},$At=VAt;var gW={};J(gW,{icon:()=>JAt});var KAr=T(z());var ZAt=["title","titleId"];function pde(){return pde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function UAt(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}var GAt=function(t){var r=t.title,n=t.titleId,o=qAt(t,ZAt);return l("svg",pde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.553 1.776a.5.5 0 0 1 .894 0l4 8a.5.5 0 0 1 .053.235c-.004.15-.026.396-.084.705a5.538 5.538 0 0 1-.505 1.512C11.189 13.638 9.906 14.5 8 14.5c-1.906 0-3.19-.862-3.91-2.272a5.538 5.538 0 0 1-.506-1.512 4.672 4.672 0 0 1-.084-.705.5.5 0 0 1 .053-.235l4-8Zm-3.046 8.329c.009.106.027.253.06.429.079.424.213.848.413 1.238C5.537 12.862 6.487 13.5 8 13.5c1.513 0 2.463-.638 3.02-1.728.2-.39.334-.814.413-1.238.033-.176.051-.323.06-.43L8 3.119l-3.493 6.987Z"}))},JAt=GAt;var yW={};J(yW,{icon:()=>eRt});var QAr=T(z());var XAt=["title","titleId"];function dde(){return dde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function YAt(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}var QAt=function(t){var r=t.title,n=t.titleId,o=KAt(t,XAt);return l("svg",dde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.5 15a3.5 3.5 0 0 1-1.75-6.532L7 8.324V2.5A1.496 1.496 0 0 1 9.908 2H8.5v1H10v1H8.5v1H10v1H8.5v1H10v1.324l.25.144A3.5 3.5 0 0 1 8.5 15M11 7.758V2.5a2.5 2.5 0 1 0-5 0v5.258a4.5 4.5 0 1 0 5 0"}),l("path",{d:"M8.5 9a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5"}))},eRt=QAt;var bW={};J(bW,{icon:()=>iRt});var tRr=T(z());var tRt=["title","titleId"];function fde(){return fde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nRt(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}var oRt=function(t){var r=t.title,n=t.titleId,o=rRt(t,tRt);return l("svg",fde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M12.809 8.807a4.5 4.5 0 0 1-5.572-5.75A5 5 0 0 0 3.04 9.31a.5.5 0 0 1-.966.259 6 6 0 0 1 5.672-7.553 4.5 4.5 0 1 1 6.117 6.313 6.002 6.002 0 0 1-7.803 5.409.5.5 0 1 1 .303-.954 5.001 5.001 0 0 0 6.445-3.979ZM11.859 5H13.5a.5.5 0 0 0 0-1H12V1.5a.5.5 0 0 0-1 0v3a.5.5 0 0 0 .5.5h.36Z",clipRule:"evenodd"}),l("path",{d:"m3.757 15.848-.776-2.897a1.5 1.5 0 0 1 1.06-1.838l2.898-.776a.5.5 0 1 1 .259.966l-2.898.776a.5.5 0 0 0-.353.613l.776 2.898a.5.5 0 0 1-.966.258Z"}))},iRt=oRt;var wW={};J(wW,{icon:()=>cRt});var nRr=T(z());var aRt=["title","titleId"];function hde(){return hde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function lRt(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}var uRt=function(t){var r=t.title,n=t.titleId,o=sRt(t,aRt);return l("svg",hde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7 4.5a.5.5 0 0 0 1 0V4h1a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h1v.5zM9 1H6v2h3V1zM2 7.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0zM2.5 9a1.5 1.5 0 0 1-1.415-1H.5a.5.5 0 0 1 0-1h.585a1.5 1.5 0 0 1 2.83 0h2.17a1.5 1.5 0 0 1 2.83 0h2.17a1.5 1.5 0 0 1 2.83 0h.585a.5.5 0 0 1 0 1h-.585a1.5 1.5 0 0 1-2.83 0h-2.17a1.5 1.5 0 0 1-2.83 0h-2.17A1.5 1.5 0 0 1 2.5 9zM13 7.5a.5.5 0 1 0-1 0 .5.5 0 0 0 1 0zm-5 0a.5.5 0 1 0-1 0 .5.5 0 0 0 1 0zM2.5 10a.5.5 0 0 0-.5.5v.5H1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1H3v-.5a.5.5 0 0 0-.5-.5zM4 14v-2H1v2h3zm8-3.5a.5.5 0 0 1 1 0v.5h1a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-3a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1v-.5zm2 2.5v1h-3v-2h3v1z"}))},cRt=uRt;var OW={};J(OW,{icon:()=>mRt});var iRr=T(z());var pRt=["title","titleId"];function mde(){return mde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fRt(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}var hRt=function(t){var r=t.title,n=t.titleId,o=dRt(t,pRt);return l("svg",mde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.854 4.854A.5.5 0 0 1 7 4.5V4H6a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H8v.5a.5.5 0 0 1-.146.354ZM6 3V1h3v2H6ZM2.146 9.146A.5.5 0 0 0 2 9.5v.5H1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1H3v-.5a.5.5 0 0 0-.854-.354ZM4 13v-2H1v2h3ZM11.5 15a4.5 4.5 0 1 0 0-9 4.5 4.5 0 0 0 0 9Zm.354-6.854 2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.707-.708L12.293 11H9.5a.5.5 0 0 1 0-1h2.793l-1.146-1.146a.5.5 0 1 1 .707-.708ZM8.337 6H3.915a1.5 1.5 0 0 0-2.83 0H.5a.5.5 0 0 0 0 1h.585a1.5 1.5 0 0 0 2.83 0h3.342c.314-.38.677-.716 1.08-1ZM2 6.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0Z"}))},mRt=hRt;var xW={};J(xW,{icon:()=>wRt});var sRr=T(z());var vRt=["title","titleId"];function vde(){return vde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yRt(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}var bRt=function(t){var r=t.title,n=t.titleId,o=gRt(t,vRt);return l("svg",vde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13.923 8A5.93 5.93 0 0 0 8 2.077 5.93 5.93 0 0 0 2.077 8a5.93 5.93 0 0 0 6.296 5.912c.328-.021.625.227.625.556a.504.504 0 0 1-.458.511 7 7 0 1 1 6.43-6.333c-.036.398-.487.58-.817.354a.595.595 0 0 1-.248-.54c.012-.152.018-.305.018-.46zm1.684 3.2-4.32-3.055c-.56-.396-1.287.059-1.287.8v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598zM7.462 7.462H4.769a.539.539 0 0 0 0 1.076H8A.539.539 0 0 0 8.538 8V3.692a.539.539 0 0 0-1.076 0v3.77z",clipRule:"evenodd"}))},wRt=bRt;var _W={};J(_W,{icon:()=>IRt});var uRr=T(z());var ORt=["title","titleId"];function gde(){return gde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _Rt(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}var SRt=function(t){var r=t.title,n=t.titleId,o=xRt(t,ORt);return l("svg",gde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M9.075 6.953a.5.5 0 1 1-.707.707 1.5 1.5 0 0 0-2.122 0L4.125 9.782a1.5 1.5 0 1 0 2.121 2.121l1.145-1.144a.5.5 0 0 1 .707.707L6.953 12.61a2.5 2.5 0 1 1-3.535-3.535l2.121-2.122a2.5 2.5 0 0 1 3.536 0Zm3.535-3.535a2.5 2.5 0 0 1 0 3.535L10.49 9.075a2.5 2.5 0 0 1-3.536 0 .5.5 0 1 1 .707-.708 1.5 1.5 0 0 0 2.122 0l2.121-2.12a1.5 1.5 0 1 0-2.121-2.122L8.637 5.269a.5.5 0 1 1-.707-.707l1.145-1.144a2.5 2.5 0 0 1 3.535 0Z"}))},IRt=SRt;var SW={};J(SW,{icon:()=>TRt});var pRr=T(z());var ERt=["title","titleId"];function yde(){return yde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kRt(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}var jRt=function(t){var r=t.title,n=t.titleId,o=PRt(t,ERt);return l("svg",yde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8.15 3.392c2.797 0 4.524 1.644 4.517 4.289.007 1.816-.708 2.893-2.21 3.004-.908.076-1.081-.287-1.157-.725h-.041c-.163.42-.964.732-1.744.683-1.053-.065-2.082-.842-2.09-2.572.008-1.72 1.071-2.441 1.959-2.586.804-.135 1.598.158 1.723.462h.051v-.386h1.195v3.452c.007.3.128.425.304.425.4 0 .677-.583.673-1.861.004-2.376-1.705-2.914-3.187-2.914-2.34 0-3.415 1.522-3.422 3.387.007 2.127 1.22 3.277 3.433 3.277.808 0 1.598-.176 2.006-.349l.393 1.122c-.435.27-1.419.508-2.493.508-2.98 0-4.723-1.66-4.727-4.496.004-2.804 1.748-4.72 4.817-4.72ZM7.964 6.79c-.76 0-1.185.459-1.188 1.24.003.683.3 1.332 1.202 1.332.821 0 1.094-.473 1.077-1.343-.004-.718-.204-1.23-1.091-1.23Z"}))},TRt=jRt;var IW={};J(IW,{icon:()=>DRt});var fRr=T(z());var CRt=["title","titleId"];function bde(){return bde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ARt(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}var RRt=function(t){var r=t.title,n=t.titleId,o=MRt(t,CRt);return l("svg",bde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4.392 12V4h2.713v1.14h-1.21v5.72h1.21V12H4.392Zm7.692-8v8H9.37v-1.14h1.209V5.14H9.37V4h2.714Z"}))},DRt=RRt;var EW={};J(EW,{icon:()=>zRt});var mRr=T(z());var LRt=["title","titleId"];function wde(){return wde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function FRt(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}var BRt=function(t){var r=t.title,n=t.titleId,o=NRt(t,LRt);return l("svg",wde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M12 4H4v8h8V4ZM8.5 5.5h-3v5h3v-5Z"}))},zRt=BRt;var PW={};J(PW,{icon:()=>ZRt});var gRr=T(z());var WRt=["title","titleId"];function Ode(){return Ode=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function VRt(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}var $Rt=function(t){var r=t.title,n=t.titleId,o=HRt(t,WRt);return l("svg",Ode({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 13A5 5 0 1 1 8 3a5 5 0 0 1 0 10Zm-2.828-2.172a4 4 0 0 1 5.656-5.656c.004.013-5.645 5.674-5.656 5.656Z"}))},ZRt=$Rt;var kW={};J(kW,{icon:()=>XRt});var bRr=T(z());var qRt=["title","titleId"];function xde(){return xde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function GRt(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}var JRt=function(t){var r=t.title,n=t.titleId,o=URt(t,qRt);return l("svg",xde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M11.333 7.027H9.375c-.056-.708-.48-1.187-1.222-1.187-.972 0-1.5.806-1.5 2.16 0 1.43.545 2.16 1.486 2.16.708 0 1.139-.415 1.236-1.08l1.958.015C11.236 10.418 10.181 12 8.097 12c-1.958 0-3.43-1.41-3.43-4 0-2.6 1.514-4 3.43-4 1.792 0 3.084 1.095 3.236 3.027Z"}))},XRt=JRt;var jW={};J(jW,{icon:()=>tDt});var ORr=T(z());var KRt=["title","titleId"];function _de(){return _de=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function QRt(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}var eDt=function(t){var r=t.title,n=t.titleId,o=YRt(t,KRt);return l("svg",_de({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M3 4a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v5.996a1 1 0 0 1-1 1h-1.661L7.4 13.2A.25.25 0 0 1 7 13v-2.004H4a1 1 0 0 1-1-1V4zm1.5 1a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-.9L8 11V9.5H5a.5.5 0 0 1-.5-.5V5z",clipRule:"evenodd"}),l("path",{d:"M6.75 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm2.5 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2z"}))},tDt=eDt;var TW={};J(TW,{icon:()=>aDt});var _Rr=T(z());var rDt=["title","titleId"];function Sde(){return Sde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function oDt(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}var iDt=function(t){var r=t.title,n=t.titleId,o=nDt(t,rDt);return l("svg",Sde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m9.414 3.757 2.829 2.829a2 2 0 0 1 0 2.828l-2.829 2.829a2 2 0 0 1-2.828 0L3.757 9.414a2 2 0 0 1 0-2.828l2.829-2.829a2 2 0 0 1 2.828 0Zm-1.747 2.91a1 1 0 0 0-1 1v.666a1 1 0 0 0 1 1h.666a1 1 0 0 0 1-1v-.666a1 1 0 0 0-1-1h-.666Z"}))},aDt=iDt;var CW={};J(CW,{icon:()=>pDt});var IRr=T(z());var sDt=["title","titleId"];function Ide(){return Ide=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uDt(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}var cDt=function(t){var r=t.title,n=t.titleId,o=lDt(t,sDt);return l("svg",Ide({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M13 11.567C13 12.36 12.36 13 11.567 13H4.433C3.64 13 3 12.36 3 11.567V4.433C3 3.64 3.64 3 4.433 3H6v-.495a.51.51 0 0 1 .412-.497L6.5 2c.276 0 .5.214.5.505V3h2v-.495a.51.51 0 0 1 .412-.497L9.5 2c.276 0 .5.214.5.505V3h1.567C12.36 3 13 3.64 13 4.433v7.134ZM4 6v5.33c0 .37.3.67.67.67h6.66c.37 0 .67-.3.67-.67V6H4Zm1.5 4c.245 0 .45.183.492.412L6 10.5c0 .245-.183.45-.412.492L5.5 11a.505.505 0 0 1-.5-.5c0-.245.183-.45.412-.492L5.5 10ZM8 10c.245 0 .45.183.492.412l.008.088c0 .245-.183.45-.412.492L8 11a.505.505 0 0 1-.5-.5c0-.245.183-.45.412-.492L8 10Zm2.5 0c.245 0 .45.183.492.412L11 10.5c0 .245-.183.45-.412.492L10.5 11a.505.505 0 0 1-.5-.5c0-.245.183-.45.412-.492L10.5 10Zm-5-1.5c.245 0 .45.183.492.412L6 9c0 .245-.183.45-.412.492L5.5 9.5A.505.505 0 0 1 5 9c0-.245.183-.45.412-.492L5.5 8.5Zm2.5 0c.245 0 .45.183.492.412L8.5 9c0 .245-.183.45-.412.492L8 9.5a.505.505 0 0 1-.5-.5c0-.245.183-.45.412-.492L8 8.5Zm2.5 0c.245 0 .45.183.492.412L11 9c0 .245-.183.45-.412.492L10.5 9.5A.505.505 0 0 1 10 9c0-.245.183-.45.412-.492L10.5 8.5ZM5.5 7c.245 0 .45.183.492.412L6 7.5c0 .245-.183.45-.412.492L5.5 8a.505.505 0 0 1-.5-.5c0-.245.183-.45.412-.492L5.5 7ZM8 7c.245 0 .45.183.492.412L8.5 7.5c0 .245-.183.45-.412.492L8 8a.505.505 0 0 1-.5-.5c0-.245.183-.45.412-.492L8 7Zm2.5 0c.245 0 .45.183.492.412L11 7.5c0 .245-.183.45-.412.492L10.5 8a.505.505 0 0 1-.5-.5c0-.245.183-.45.412-.492L10.5 7ZM4 5h8v-.33c0-.37-.3-.67-.67-.67H4.67C4.3 4 4 4.3 4 4.67V5Z"}))},pDt=cDt;var MW={};J(MW,{icon:()=>vDt});var PRr=T(z());var dDt=["title","titleId"];function Ede(){return Ede=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hDt(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}var mDt=function(t){var r=t.title,n=t.titleId,o=fDt(t,dDt);return l("svg",Ede({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 10.5a.5.5 0 0 0-1 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 0-1H12v-.5Z"}),l("path",{fillRule:"evenodd",d:"M3 12h3.078c.728 0 1.37-.127 1.924-.383a3.5 3.5 0 1 0 2.053-3.306c.005-.101.008-.205.008-.311 0-.833-.165-1.548-.493-2.145A3.309 3.309 0 0 0 8.18 4.48C7.58 4.16 6.87 4 6.047 4H3v8Zm6.787-2.321A2.5 2.5 0 0 0 11.5 14a2.5 2.5 0 1 0-1.713-4.321ZM6 10.156h-.828V5.844h.766c.416 0 .768.064 1.054.191.29.128.508.348.656.66.151.313.227.748.227 1.305 0 .557-.074.992-.223 1.305a1.29 1.29 0 0 1-.64.66c-.279.127-.616.191-1.012.191Z"}))},vDt=mDt;var AW={};J(AW,{icon:()=>ODt});var jRr=T(z());var gDt=["title","titleId"];function Pde(){return Pde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bDt(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}var wDt=function(t){var r=t.title,n=t.titleId,o=yDt(t,gDt);return l("svg",Pde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m7.39 9.736-1.041.94L3.258 8l3.09-2.677 1.041.94-2.032 1.722v.03l2.032 1.721Zm2.777.94-1.04-.94 2.032-1.721v-.03L9.126 6.264l1.04-.94L13.259 8l-3.091 2.677Z"}))},ODt=wDt;var RW={};J(RW,{icon:()=>EDt});var CRr=T(z());var xDt=["title","titleId"];function kde(){return kde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function SDt(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}var IDt=function(t){var r=t.title,n=t.titleId,o=_Dt(t,xDt);return l("svg",kde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M5.211 12V4h5.578v1.57H7.145v1.641h3.359v1.574H7.145v1.645h3.644V12z"}))},EDt=IDt;var DW={};J(DW,{icon:()=>CDt});var ARr=T(z());var PDt=["title","titleId"];function jde(){return jde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jDt(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}var TDt=function(t){var r=t.title,n=t.titleId,o=kDt(t,PDt);return l("svg",jde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.682 12V9.247l1.023-.861a.5.5 0 0 0-.003-.768l-1.02-.844V4h5.578v1.57H9.615v1.64h3.36v1.575h-3.36v1.645h3.645V12H7.682Zm.743-4.103a.138.138 0 0 1 0 .206L6.158 9.97a.133.133 0 0 1-.218-.103v-.934H2.873A.133.133 0 0 1 2.74 8.8V7.2c0-.074.06-.133.133-.133H5.94v-.934a.133.133 0 0 1 .218-.103l2.267 1.867Z"}))},CDt=TDt;var LW={};J(LW,{icon:()=>LDt});var DRr=T(z());var MDt=["title","titleId"];function Tde(){return Tde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function RDt(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}var DDt=function(t){var r=t.title,n=t.titleId,o=ADt(t,MDt);return l("svg",Tde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M11.225 5.656c0 .423-.106.79-.318 1.102-.211.311-.51.57-.898.775a5.435 5.435 0 0 1-1.392.485c-.54.117-1.14.193-1.798.229a6.047 6.047 0 0 0-.035.67c0 .258.02.51.062.757.04.247.114.464.22.652s.25.34.432.458.414.176.696.176c.211 0 .467-.044.766-.132.3-.088.62-.244.96-.467.106-.07.192-.129.256-.176a.365.365 0 0 1 .22-.07c.118 0 .197.061.238.185a.99.99 0 0 1 .062.255 7.1 7.1 0 0 1-.573.467 4.93 4.93 0 0 1-.775.467c-.288.141-.6.261-.934.361-.335.1-.678.15-1.03.15-.541 0-.982-.088-1.322-.264a2.072 2.072 0 0 1-.793-.688 2.626 2.626 0 0 1-.388-.933 4.949 4.949 0 0 1-.106-1.005c0-.634.103-1.257.309-1.868.205-.61.499-1.157.88-1.638.383-.482.838-.87 1.366-1.163A3.567 3.567 0 0 1 9.093 4c.599 0 1.104.126 1.515.379.411.252.617.678.617 1.277Zm-2.467-.951c-.223 0-.435.08-.635.238-.2.158-.381.373-.546.643-.164.27-.305.578-.423.925a6.42 6.42 0 0 0-.264 1.101c.47-.047.863-.135 1.18-.264.318-.13.57-.285.758-.467.188-.182.323-.388.405-.617.083-.229.124-.467.124-.713 0-.27-.056-.479-.168-.626a.519.519 0 0 0-.431-.22Z"}))},LDt=DDt;var NW={};J(NW,{icon:()=>WDt});var NRr=T(z());var NDt=["title","titleId"];function Cde(){return Cde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function BDt(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}var zDt=function(t){var r=t.title,n=t.titleId,o=FDt(t,NDt);return l("svg",Cde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.461 7.31h3.055a.74.74 0 0 1 .66 1.074l-2.141 4.211a.74.74 0 1 1-1.319-.67L9.31 8.79H6.256a.74.74 0 0 1-.66-1.075l2.19-4.31a.74.74 0 0 1 1.319.67L7.461 7.31Z"}))},WDt=zDt;var FW={};J(FW,{icon:()=>qDt});var BRr=T(z());var HDt=["title","titleId"];function Mde(){return Mde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $Dt(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}var ZDt=function(t){var r=t.title,n=t.titleId,o=VDt(t,HDt);return l("svg",Mde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M5.27 12V4h5.46v1.57H7.203v1.641h3.18v1.574h-3.18V12z"}))},qDt=ZDt;var BW={};J(BW,{icon:()=>KDt});var WRr=T(z());var UDt=["title","titleId"];function Ade(){return Ade=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function JDt(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}var XDt=function(t){var r=t.title,n=t.titleId,o=GDt(t,UDt);return l("svg",Ade({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.867 2.667H4a.667.667 0 0 0-.667.666v9.334c0 .368.299.666.667.666h8a.667.667 0 0 0 .667-.666V5.619a.669.669 0 0 0-.183-.459l-2.133-2.285a.668.668 0 0 0-.484-.208m1.466 4V12H4.667V4h4v2.333c0 .184.149.334.333.334h2.333Z"}))},KDt=XDt;var zW={};J(zW,{icon:()=>rLt});var VRr=T(z());var YDt=["title","titleId"];function Rde(){return Rde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function eLt(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}var tLt=function(t){var r=t.title,n=t.titleId,o=QDt(t,YDt);return l("svg",Rde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3.25 3a.25.25 0 0 0-.25.25v2c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25v-2a.25.25 0 0 0-.25-.25h-9.5zm0 3.75A.25.25 0 0 0 3 7v2c0 .138.112.25.25.25H5.5A.25.25 0 0 0 5.75 9V7a.25.25 0 0 0-.25-.25H3.25zm-.25 4a.25.25 0 0 1 .25-.25H5.5a.25.25 0 0 1 .25.25v2a.25.25 0 0 1-.25.25H3.25a.25.25 0 0 1-.25-.25v-2zm3.31-.727c-.082-.073-.082-.224 0-.296l3.054-2.683a.17.17 0 0 1 .19-.026c.064.032.104.1.104.174v1.341l3.161-.016c.1 0 .18.086.18.192v2.3c0 .105-.08.191-.18.191l-3.161.017v1.341c0 .074-.04.142-.103.174a.17.17 0 0 1-.19-.025L6.31 10.023z"}))},rLt=tLt;var WW={};J(WW,{icon:()=>sLt});var ZRr=T(z());var nLt=["title","titleId"];function Dde(){return Dde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function iLt(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}var aLt=function(t){var r=t.title,n=t.titleId,o=oLt(t,nLt);return l("svg",Dde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M11.266 4.15V5.63a2.41 2.41 0 0 0-.859-.145c-.692 0-1.065.346-1.177 1.043l-.11.625h1.828v1.44H8.921l-.204 1.115C8.455 11.325 7.517 12 5.9 12c-.469 0-.882-.061-1.166-.167v-1.495c.273.117.591.178.903.178.659 0 1.01-.29 1.127-1.015l.157-.91H5.247V7.152h1.837l.188-.842C7.534 4.714 8.432 4 10.19 4c.39 0 .853.067 1.076.15Z"}))},sLt=aLt;var HW={};J(HW,{icon:()=>dLt});var URr=T(z());var lLt=["title","titleId"];function Lde(){return Lde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cLt(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}var pLt=function(t){var r=t.title,n=t.titleId,o=uLt(t,lLt);return l("svg",Lde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 3c1.636 0 3.088.785 4 2 .628.836 1 1.875 1 3a4.978 4.978 0 0 1-.999 3H12a4.992 4.992 0 0 1-4 2 4.992 4.992 0 0 1-4-1.999V11a5 5 0 0 1 4-8Zm.948 8H7.052c.277.626.623 1 .948 1 .325 0 .67-.374.948-1ZM6 11l-.645.001c.274.242.581.446.914.606A5.445 5.445 0 0 1 6 11.001Zm4.645.001H10a5.51 5.51 0 0 1-.269.606c.333-.16.64-.364.914-.606Zm-5.133-2.5H4.031c.068.54.243 1.048.505 1.5h1.172a9.186 9.186 0 0 1-.196-1.5Zm3.975 0H6.513c.03.544.104 1.05.21 1.5h2.553c.107-.45.182-.956.21-1.5Zm2.482 0h-1.481a9.186 9.186 0 0 1-.196 1.5h1.172c.262-.452.437-.96.505-1.5ZM5.708 6 4.535 6c-.261.452-.437.96-.504 1.5h1.481A9.187 9.187 0 0 1 5.708 6Zm3.568 0H6.724c-.107.449-.182.955-.21 1.499h2.973a8.479 8.479 0 0 0-.21-1.5ZM11.465 6h-1.173c.102.467.17.972.196 1.5h1.481a3.974 3.974 0 0 0-.504-1.5ZM6.269 4.393l-.124.062c-.286.15-.551.333-.79.545H6a5.51 5.51 0 0 1 .269-.607ZM8 4c-.326 0-.671.375-.948 1h1.896C8.671 4.376 8.326 4 8 4Zm1.73.393.038.071c.083.168.161.347.232.536h.646a4.006 4.006 0 0 0-.915-.607Z"}))},dLt=pLt;var VW={};J(VW,{icon:()=>gLt});var JRr=T(z());var fLt=["title","titleId"];function Nde(){return Nde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mLt(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}var vLt=function(t){var r=t.title,n=t.titleId,o=hLt(t,fLt);return l("svg",Nde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 3h4v5h2V5.5h4V13H3.001v-1H3V3zm1 9h2V4H4v8zm3 0h2V9H7v3zm3 0h2V6.5h-2V12z"}))},gLt=vLt;var $W={};J($W,{icon:()=>xLt});var KRr=T(z());var yLt=["title","titleId"];function Fde(){return Fde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wLt(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}var OLt=function(t){var r=t.title,n=t.titleId,o=bLt(t,yLt);return l("svg",Fde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M11 3a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h6Zm-1 2H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5ZM6 5H5v6h1V5Zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984Z"}))},xLt=OLt;var ZW={};J(ZW,{icon:()=>PLt});var QRr=T(z());var _Lt=["title","titleId"];function Bde(){return Bde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ILt(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}var ELt=function(t){var r=t.title,n=t.titleId,o=SLt(t,_Lt);return l("svg",Bde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8.967 10.653h1.727V12H5.306v-1.347h1.727V5.347H5.306V4h5.388v1.347H8.967v5.306Z"}))},PLt=ELt;var qW={};J(qW,{icon:()=>MLt});var tDr=T(z());var kLt=["title","titleId"];function zde(){return zde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function TLt(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}var CLt=function(t){var r=t.title,n=t.titleId,o=jLt(t,kLt);return l("svg",zde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M7.5 4.5v1.025c0 1.269-1.185 1.908-2.112 1.737a.75.75 0 1 0 0 1.475c.927-.17 2.112.47 2.112 1.739v1.023h4v-1.005a2.5 2.5 0 0 1 0-4.988V4.5h-4ZM13 4a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1v1.525c0 .172-.172.293-.341.262a2.25 2.25 0 1 0 0 4.426c.17-.031.341.09.341.262V12a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V9.004a.16.16 0 0 0-.04-.105c-.109-.125-.594-.16-.732-.068a1 1 0 1 1 0-1.662c.138.092.623.057.732-.068a.16.16 0 0 0 .04-.105V4Z",clipRule:"evenodd"}))},MLt=CLt;var UW={};J(UW,{icon:()=>NLt});var nDr=T(z());var ALt=["title","titleId"];function Wde(){return Wde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function DLt(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}var LLt=function(t){var r=t.title,n=t.titleId,o=RLt(t,ALt);return l("svg",Wde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M12.667 6.542A3.208 3.208 0 0 1 8.86 9.694l-.438.492a.437.437 0 0 1-.327.147h-.678v.73a.437.437 0 0 1-.438.437H6.25v.73a.437.437 0 0 1-.438.437H3.772a.437.437 0 0 1-.438-.438v-1.423c0-.116.046-.227.128-.31l2.95-2.949a3.208 3.208 0 0 1 3.047-4.214 3.202 3.202 0 0 1 3.209 3.209Zm-3.209-.875a.875.875 0 1 0 1.75 0 .875.875 0 0 0-1.75 0Z"}))},NLt=LLt;var GW={};J(GW,{icon:()=>HLt});var iDr=T(z());var FLt=["title","titleId"];function Hde(){return Hde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zLt(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}var WLt=function(t){var r=t.title,n=t.titleId,o=BLt(t,FLt);return l("svg",Hde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.33 10.28c-.12.04-.29.07-.42.07-.23 0-.43-.08-.53-.3l-.63-1.34 2.32-2.81H9.3L7.76 7.93h-.09L8.22 4H6.59l-1.05 7.5h1.63l.27-1.94h.1l.43 1.12c.27.71.74.92 1.33.92.23 0 .6-.04.86-.11l.17-1.21z"}))},HLt=WLt;var JW={};J(JW,{icon:()=>ULt});var sDr=T(z());var VLt=["title","titleId"];function Vde(){return Vde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ZLt(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}var qLt=function(t){var r=t.title,n=t.titleId,o=$Lt(t,VLt);return l("svg",Vde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M3.333 11.027V5.05h2.059v1.136h.063c.25-.747.891-1.214 1.728-1.214.848 0 1.524.483 1.65 1.214h.063c.204-.731.927-1.214 1.822-1.214 1.155 0 1.949.798 1.949 2.023v4.03h-2.169V7.542c0-.521-.29-.84-.738-.84s-.723.319-.723.84v3.486H6.963V7.54c0-.521-.29-.84-.739-.84-.447 0-.722.319-.722.84v3.486H3.333Z"}))},ULt=qLt;var XW={};J(XW,{icon:()=>YLt});var uDr=T(z());var GLt=["title","titleId"];function $de(){return $de=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function XLt(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}var KLt=function(t){var r=t.title,n=t.titleId,o=JLt(t,GLt);return l("svg",$de({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 10.5a.5.5 0 0 0-1 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 0-1H12v-.5Z"}),l("path",{fillRule:"evenodd",d:"M8 3h4v5.035A3.5 3.5 0 1 1 8.337 13H2V9h3V6h3V3Zm1.05 9a2.5 2.5 0 1 1 4.902-1 2.5 2.5 0 0 1-4.902 1ZM11 8.035a3.49 3.49 0 0 0-2 1.016V4h2v4.035ZM8 12H6V7h2v5Zm-3 0v-2H3v2h2Z"}))},YLt=KLt;var KW={};J(KW,{icon:()=>nNt});var pDr=T(z());var QLt=["title","titleId"];function Zde(){return Zde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function tNt(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}var rNt=function(t){var r=t.title,n=t.titleId,o=eNt(t,QLt);return l("svg",Zde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12 10.5a.5.5 0 0 0-1 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 0-1H12v-.5Z"}),l("path",{fillRule:"evenodd",d:"M6 3H2v10h6.337A3.5 3.5 0 1 0 12 8.035V5H8v2H6V3Zm5 5.035V6H9v3.05a3.49 3.49 0 0 1 2-1.015ZM9 11.5a2.5 2.5 0 1 1 5.002 0A2.5 2.5 0 0 1 9 11.5ZM8 8H6v4h2V8ZM5 4H3v8h2V4Z"}))},nNt=rNt;var YW={};J(YW,{icon:()=>lNt});var fDr=T(z());var oNt=["title","titleId"];function qde(){return qde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function aNt(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}var sNt=function(t){var r=t.title,n=t.titleId,o=iNt(t,oNt);return l("svg",qde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m8 2 5.196 3v.178l-.866.468V5.5L8 3 3.67 5.5v5L8 13l4.33-2.5V5.77l.866-.474V11L8 14l-5.196-3V5L8 2Z"}),l("path",{d:"M5.243 4.429 9.597 7.04 8 7.928 3.743 5.563a.5.5 0 1 0-.486.874L7.5 8.794V13.5h1V8.794l4.243-2.357a.508.508 0 0 0 .06-.04l.392-.202V5.047l-.917.505a.573.573 0 0 0-.02.01l-.106.06-.191.105-1.355.753-4.849-2.909-.514.858Z"}))},lNt=sNt;var QW={};J(QW,{icon:()=>fNt});var mDr=T(z());var uNt=["title","titleId"];function Ude(){return Ude=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pNt(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}var dNt=function(t){var r=t.title,n=t.titleId,o=cNt(t,uNt);return l("svg",Ude({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m7.556 8.416-.804-1.68h-.036v5.64H5V4h1.992l2.292 3.96.804 1.68h.036V4h1.716v8.376H9.848l-2.292-3.96Z"}))},fNt=dNt;var eH={};J(eH,{icon:()=>yNt});var gDr=T(z());var hNt=["title","titleId"];function Gde(){return Gde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vNt(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}var gNt=function(t){var r=t.title,n=t.titleId,o=mNt(t,hNt);return l("svg",Gde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fillRule:"evenodd"},l("path",{d:"M11 3c1.044 0 1.913.757 1.994 1.736l.006.149v6.23c0 1-.82 1.805-1.845 1.88L11 13H9.501a.5.5 0 0 1-.09-.992l.09-.008H11c.52 0 .937-.35.993-.783l.007-.102v-6.23c0-.445-.379-.827-.882-.879L11 4H9.5a.5.5 0 0 1-.09-.992L9.5 3H11ZM6.5 3a.5.5 0 0 1 .09.992L6.5 4H5c-.52 0-.937.35-.993.783L4 4.885v6.23c0 .445.379.827.882.879L5 12h1.5a.5.5 0 0 1 .09.992L6.5 13H5c-1.044 0-1.913-.757-1.994-1.736L3 11.115v-6.23c0-1 .82-1.805 1.845-1.88L5 3h1.5Z"}),l("path",{d:"M5.864 7.25a.714.714 0 1 1 0 1.429.714.714 0 0 1 0-1.429Zm2.143 0a.714.714 0 1 1 0 1.429.714.714 0 0 1 0-1.429Zm2.143 0a.714.714 0 1 1 0 1.429.714.714 0 0 1 0-1.429Z"})))},yNt=gNt;var tH={};J(tH,{icon:()=>_Nt});var bDr=T(z());var bNt=["title","titleId"];function Jde(){return Jde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ONt(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}var xNt=function(t){var r=t.title,n=t.titleId,o=wNt(t,bNt);return l("svg",Jde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m5.002 12.412-.962.962a1 1 0 0 1-1.414-1.414l.962-.962a5.333 5.333 0 0 1 7.41-7.41l.962-.962a1 1 0 1 1 1.414 1.414l-.962.962a5.333 5.333 0 0 1-7.41 7.41Zm.966-.966a4 4 0 0 0 5.478-5.478l-5.478 5.478Zm-1.414-1.414 5.478-5.478a4 4 0 0 0-5.478 5.478Z"}))},_Nt=xNt;var rH={};J(rH,{icon:()=>kNt});var ODr=T(z());var SNt=["title","titleId"];function Xde(){return Xde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ENt(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}var PNt=function(t){var r=t.title,n=t.titleId,o=INt(t,SNt);return l("svg",Xde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.8 9.812h-.842l-.78 2.335H5.031l.78-2.335H4.6l.182-1.043h1.373l.507-1.504H5.454l.188-1.042h1.367l.792-2.37H8.94l-.792 2.37h.849l.792-2.37h1.145l-.792 2.37H11.4l-.182 1.042H9.8L9.293 8.77h1.248l-.183 1.043H8.946l-.775 2.335H7.026L7.8 9.812Zm-.5-1.043h.842l.513-1.504h-.849L7.3 8.77Z"}))},kNt=PNt;var nH={};J(nH,{icon:()=>ANt});var _Dr=T(z());var jNt=["title","titleId"];function Kde(){return Kde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function CNt(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}var MNt=function(t){var r=t.title,n=t.titleId,o=TNt(t,jNt);return l("svg",Kde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M6.63 12c-1.294 0-2.383-.105-2.383-1.802V9.6c0-.638-.247-.914-.98-.914v-1.37c.733 0 .98-.28.98-.915v-.6C4.247 4.105 5.336 4 6.631 4v1.14c-.759 0-.886.272-.886.843v.813c0 .479-.225.936-1.212 1.133v.142c.987.197 1.212.654 1.212 1.133v.813c0 .57.127.844.886.844V12Zm2.266-8c1.295 0 2.384.105 2.384 1.802V6.4c0 .638.247.914.98.914v1.37c-.733 0-.98.28-.98.915v.6C11.28 11.895 10.19 12 8.896 12v-1.14c.759 0 .886-.272.886-.843v-.813c0-.479.225-.936 1.212-1.133V7.93c-.987-.197-1.212-.654-1.212-1.133v-.813c0-.57-.127-.844-.886-.844V4Z"}))},ANt=MNt;var oH={};J(oH,{icon:()=>FNt});var IDr=T(z());var RNt=["title","titleId"];function Yde(){return Yde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function LNt(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}var NNt=function(t){var r=t.title,n=t.titleId,o=DNt(t,RNt);return l("svg",Yde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M2.667 8.002c0-1.5.394-2.743 1.248-3.822h1.437c-.652.8-1.14 2.388-1.14 3.822 0 1.43.488 3.018 1.14 3.818H3.915c-.854-1.08-1.248-2.322-1.248-3.818ZM6.77 9.998l-.818-.803 1.23-1.197-1.23-1.203.83-.793 1.221 1.193L9.23 6.002l.818.793-1.227 1.2 1.227 1.2-.818.803L8 8.795 6.77 9.998Zm6.563-2c0 1.5-.394 2.743-1.248 3.822h-1.437c.652-.8 1.14-2.388 1.14-3.822 0-1.43-.488-3.018-1.14-3.818h1.437c.854 1.08 1.248 2.322 1.248 3.818Z"}))},FNt=NNt;var iH={};J(iH,{icon:()=>VNt});var PDr=T(z());var BNt=["title","titleId"];function Qde(){return Qde=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function WNt(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}var HNt=function(t){var r=t.title,n=t.titleId,o=zNt(t,BNt);return l("svg",Qde({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m8.049 3.785 3.852 1.006-4.049 1.103L4 4.791l3.951-1.006a.19.19 0 0 1 .098 0Zm.073 2.654 4.545-1.306v5.45l-.131.184-4.414 1.455V6.439Zm-4.789 4.145V5.188L7.498 6.41v5.81l-4.034-1.453-.13-.183Z"}))},VNt=HNt;var aH={};J(aH,{icon:()=>GNt});var jDr=T(z());var $Nt=["title","titleId"];function efe(){return efe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function qNt(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}var UNt=function(t){var r=t.title,n=t.titleId,o=ZNt(t,$Nt);return l("svg",efe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89Zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433Z"}))},GNt=UNt;var sH={};J(sH,{icon:()=>QNt});var CDr=T(z());var JNt=["title","titleId"];function tfe(){return tfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function KNt(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}var YNt=function(t){var r=t.title,n=t.titleId,o=XNt(t,JNt);return l("svg",tfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M5.5 7a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm0 1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5ZM11 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm0 1a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm-2.5 1.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Zm1 0a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Z",clipRule:"evenodd"}))},QNt=YNt;var lH={};J(lH,{icon:()=>oFt});var ADr=T(z());var eFt=["title","titleId"];function rfe(){return rfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rFt(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}var nFt=function(t){var r=t.title,n=t.titleId,o=tFt(t,eFt);return l("svg",rfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89Zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433Z"}))},oFt=nFt;var uH={};J(uH,{icon:()=>uFt});var DDr=T(z());var iFt=["title","titleId"];function nfe(){return nfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function sFt(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}var lFt=function(t){var r=t.title,n=t.titleId,o=aFt(t,iFt);return l("svg",nfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fillRule:"evenodd"},l("path",{d:"M9.82 5.116a.5.5 0 0 0-.704.704l.064.064L11.719 8l-2.54 2.116a.5.5 0 0 0-.114.63l.05.074a.5.5 0 0 0 .63.115l.075-.05 3-2.5a.5.5 0 0 0 .071-.697l-.07-.072-3-2.5ZM6.18 5.116a.5.5 0 0 1 .704.704l-.064.064L4.281 8l2.54 2.116a.5.5 0 0 1 .114.63l-.05.074a.5.5 0 0 1-.63.115l-.075-.05-3-2.5a.5.5 0 0 1-.071-.697l.07-.072 3-2.5Z"})))},uFt=lFt;var cH={};J(cH,{icon:()=>hFt});var NDr=T(z());var cFt=["title","titleId"];function ofe(){return ofe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function dFt(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}var fFt=function(t){var r=t.title,n=t.titleId,o=pFt(t,cFt);return l("svg",ofe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6Z"}))},hFt=fFt;var pH={};J(pH,{icon:()=>bFt});var BDr=T(z());var mFt=["title","titleId"];function ife(){return ife=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function gFt(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}var yFt=function(t){var r=t.title,n=t.titleId,o=vFt(t,mFt);return l("svg",ife({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6Z"}))},bFt=yFt;var dH={};J(dH,{icon:()=>SFt});var WDr=T(z());var wFt=["title","titleId"];function afe(){return afe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function xFt(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}var _Ft=function(t){var r=t.title,n=t.titleId,o=OFt(t,wFt);return l("svg",afe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8.533 9.067c-1.792 0-2.378.72-2.57 1.194a1.601 1.601 0 1 1-1.163-.037V5.776a1.595 1.595 0 0 1-1.067-1.51c0-.885.715-1.6 1.6-1.6.886 0 1.6.715 1.6 1.6 0 .7-.442 1.291-1.066 1.51v2.821C6.336 8.251 7.019 8 8 8c1.424 0 1.899-.715 2.053-1.19a1.603 1.603 0 0 1-.986-1.477c0-.885.714-1.6 1.6-1.6.885 0 1.6.715 1.6 1.6a1.59 1.59 0 0 1-1.115 1.526c-.139.762-.656 2.208-2.619 2.208Zm-3.2 2.133a.535.535 0 0 0-.533.533c0 .294.24.534.533.534a.535.535 0 0 0 0-1.067Zm0-7.467a.535.535 0 0 0-.533.534c0 .293.24.533.533.533.294 0 .534-.24.534-.533a.535.535 0 0 0-.534-.534ZM10.667 4.8a.535.535 0 0 0-.534.533.535.535 0 0 0 1.067 0 .535.535 0 0 0-.533-.533Z"}))},SFt=_Ft;var fH={};J(fH,{icon:()=>jFt});var VDr=T(z());var IFt=["title","titleId"];function sfe(){return sfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function PFt(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}var kFt=function(t){var r=t.title,n=t.titleId,o=EFt(t,IFt);return l("svg",sfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.27 7.5a1 1 0 1 1 2 0 1 1 0 0 1-2 0ZM8.77 7.5a1 1 0 1 1 2 0 1 1 0 0 1-2 0Z"}),l("path",{fillRule:"evenodd",d:"M11.702 10.682a4.501 4.501 0 0 1-5.796.482L4.28 12.789a.75.75 0 0 1-1.06-1.06L4.847 10.1a4.501 4.501 0 1 1 6.855.581Zm-5.304-1.06a3 3 0 1 0 4.243-4.243A3 3 0 0 0 6.398 9.62Z",clipRule:"evenodd"}))},jFt=kFt;var hH={};J(hH,{icon:()=>RFt});var ZDr=T(z());var TFt=["title","titleId"];function lfe(){return lfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function MFt(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}var AFt=function(t){var r=t.title,n=t.titleId,o=CFt(t,TFt);return l("svg",lfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 2.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1H3v10h1.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5v-11ZM13.5 2a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1H13V3h-1.5a.5.5 0 0 1 0-1h2ZM9.098 4.5l-.244 1.393h.896l-.212 1.211h-.896l-.435 2.574c-.024.176-.013.308.034.398.046.09.163.138.35.145.072.004.22-.005.445-.026L8.91 11.46a2.75 2.75 0 0 1-.916.129c-.528-.007-.923-.162-1.186-.466-.262-.304-.37-.716-.32-1.237l.455-2.78H6.25l.207-1.212h.694L7.394 4.5h1.704Z"}))},RFt=AFt;var mH={};J(mH,{icon:()=>BFt});var UDr=T(z());var DFt=["title","titleId"];function ufe(){return ufe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function NFt(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}var FFt=function(t){var r=t.title,n=t.titleId,o=LFt(t,DFt);return l("svg",ufe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M13 10v3h-3v-1H6v1H3v-3h1V6H3V3h3v1h4V3h3v3h-1v4h1Zm-8 1H4v1h1v-1Zm7 0h-1v1h1v-1ZM5 4H4v1h1V4Zm7 0h-1v1h1V4Zm-1 2h-1V5H6v1H5v4h1v1h4v-1h1V6Z"}))},BFt=FFt;var vH={};J(vH,{icon:()=>$Ft});var JDr=T(z());var zFt=["title","titleId"];function cfe(){return cfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function HFt(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}var VFt=function(t){var r=t.title,n=t.titleId,o=WFt(t,zFt);return l("svg",cfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m9.147 4.297-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78Z"}))},$Ft=VFt;var gH={};J(gH,{icon:()=>JFt});var KDr=T(z());var ZFt=["title","titleId"];function pfe(){return pfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function UFt(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}var GFt=function(t){var r=t.title,n=t.titleId,o=qFt(t,ZFt);return l("svg",pfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M4.667 4.667h2.666v2.666H4.667V4.667Zm0 4h2.666v2.666H4.667V8.667Zm4-4h2.666v2.666H8.667V4.667Zm0 4h2.666v2.666H8.667V8.667ZM3.333 3.333v9.334h9.334V3.333H3.333Zm0-1.333h9.334C13.403 2 14 2.597 14 3.333v9.334c0 .736-.597 1.333-1.333 1.333H3.333A1.333 1.333 0 0 1 2 12.667V3.333C2 2.597 2.597 2 3.333 2Z"}))},JFt=GFt;var yH={};J(yH,{icon:()=>eBt});var QDr=T(z());var XFt=["title","titleId"];function dfe(){return dfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function YFt(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}var QFt=function(t){var r=t.title,n=t.titleId,o=KFt(t,XFt);return l("svg",dfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.316 14a6 6 0 1 1 0-12 6 6 0 0 1 0 12Zm0-1.333a4.667 4.667 0 1 0 0-9.334 4.667 4.667 0 0 0 0 9.334Zm2.19-5.72h1.143c.019 1.448-.793 2.338-1.922 2.338-.632 0-1.194-.267-1.706-.811-.36-.397-.636-.576-1-.576-.517 0-.849.355-.885 1.083H4.983c.014-1.47.858-2.314 1.95-2.314.595 0 1.125.249 1.678.802.392.382.641.595 1.038.595.484 0 .857-.323.857-1.116Z"}))},eBt=QFt;var bH={};J(bH,{icon:()=>iBt});var tLr=T(z());var tBt=["title","titleId"];function ffe(){return ffe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nBt(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}var oBt=function(t){var r=t.title,n=t.titleId,o=rBt(t,tBt);return l("svg",ffe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"}),l("path",{fillRule:"evenodd",d:"M4 4a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6.989a1 1 0 0 0 .825-.436l2.05-3a1 1 0 0 0 0-1.128l-2.05-3A1 1 0 0 0 10.99 4H4Zm.75 1.25a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5h5.745a.5.5 0 0 0 .405-.206l1.636-2.25a.5.5 0 0 0 0-.588L10.9 5.456a.5.5 0 0 0-.405-.206H4.75Z"}))},iBt=oBt;var wH={};J(wH,{icon:()=>cBt});var nLr=T(z());var aBt=["title","titleId"];function hfe(){return hfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function lBt(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}var uBt=function(t){var r=t.title,n=t.titleId,o=sBt(t,aBt);return l("svg",hfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m9.147 4.297-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78Z"}))},cBt=uBt;var OH={};J(OH,{icon:()=>mBt});var iLr=T(z());var pBt=["title","titleId"];function mfe(){return mfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fBt(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}var hBt=function(t){var r=t.title,n=t.titleId,o=dBt(t,pBt);return l("svg",mfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8 4H3v3h5V4ZM13 9H8v3h5V9ZM10 4h3v3h-3V4ZM6 9H3v3h3V9Z"}))},mBt=hBt;var xH={};J(xH,{icon:()=>wBt});var sLr=T(z());var vBt=["title","titleId"];function vfe(){return vfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yBt(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}var bBt=function(t){var r=t.title,n=t.titleId,o=gBt(t,vBt);return l("svg",vfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"m6.649 4.667 1.326 4.7h.05l1.326-4.7h1.982l-2.134 6.666H6.801L4.667 4.667z"}))},wBt=bBt;var _H={};J(_H,{icon:()=>IBt});var uLr=T(z());var OBt=["title","titleId"];function gfe(){return gfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _Bt(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}var SBt=function(t){var r=t.title,n=t.titleId,o=xBt(t,OBt);return l("svg",gfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 2.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1H3v10h1.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5v-11Z"}),l("path",{d:"M6 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm0 3a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-1 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm4-7a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM8 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm1 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm2-5a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm1 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-1 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}),l("path",{d:"M13.5 2a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1H13V3h-1.5a.5.5 0 0 1 0-1h2Z"}))},IBt=SBt;var SH={};J(SH,{icon:()=>TBt});var pLr=T(z());var EBt=["title","titleId"];function yfe(){return yfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kBt(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}var jBt=function(t){var r=t.title,n=t.titleId,o=PBt(t,EBt);return l("svg",yfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 2.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1H3v10h1.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5v-11ZM8 6a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm0 6a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}),l("path",{d:"M6 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm5 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}),l("path",{d:"M13.5 2a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1H13V3h-1.5a.5.5 0 0 1 0-1h2Z"}))},TBt=jBt;var IH={};J(IH,{icon:()=>DBt});var fLr=T(z());var CBt=["title","titleId"];function bfe(){return bfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ABt(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}var RBt=function(t){var r=t.title,n=t.titleId,o=MBt(t,CBt);return l("svg",bfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.386 9.836a2.5 2.5 0 1 1 3.611.667C15.212 11.173 16 12.46 16 14v1.5a.5.5 0 1 1-1 0V14c0-1.724-1.276-3-3-3-.91 0-1.298-.02-1.805-.122-1.25-.254-2.333-1-3.585-2.566a.5.5 0 1 1 .78-.624c.9 1.124 1.653 1.74 2.434 2.043.155.052.345.083.562.105Zm1.785.128c.083.01.167.021.251.034L12.5 10a1.5 1.5 0 1 0-.33-.036ZM9.78 11.97a.5.5 0 0 1 .5.5c0 .076-.047.226-.05.231-.179.38-.23.774-.23 1.302v1.5a.5.5 0 1 1-1 0v-1.5c0-.657.072-1.186.307-1.696a.5.5 0 0 1 .473-.337ZM5.958 5.772a.5.5 0 0 1-.78.625L3.11 3.812a.5.5 0 1 1 .78-.624l2.068 2.584ZM1 11h5.5a.5.5 0 1 1 0 1h-6a.5.5 0 0 1-.5-.5V.5A.5.5 0 0 1 .5 0h12a.5.5 0 0 1 .5.5v3a.5.5 0 1 1-1 0V1H1v10Z"}))},DBt=RBt;var EH={};J(EH,{icon:()=>zBt});var mLr=T(z());var LBt=["title","titleId"];function wfe(){return wfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function FBt(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}var BBt=function(t){var r=t.title,n=t.titleId,o=NBt(t,LBt);return l("svg",wfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.146 5.854a.5.5 0 0 1 .708-.708l2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708L11.293 8H7.5a.5.5 0 0 1 0-1h3.793l-1.147-1.146Z"}),l("path",{fillRule:"evenodd",d:"M2 0h11a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2Zm2.707 1H5v1.293l-4 4V4.707L4.707 1ZM6 14V1h7a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H6Zm-1-1.293V14H3.707L5 12.707Zm0-3v1.586L2.293 14H2a1 1 0 0 1-.838-.454L5 9.707Zm0-3v1.586l-4 4v-1.586l4-4Zm0-3v1.586l-4 4V7.707l4-4ZM3.293 1H2a1 1 0 0 0-1 1v1.293L3.293 1Z"}))},zBt=BBt;var PH={};J(PH,{icon:()=>ZBt});var gLr=T(z());var WBt=["title","titleId"];function Ofe(){return Ofe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function VBt(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}var $Bt=function(t){var r=t.title,n=t.titleId,o=HBt(t,WBt);return l("svg",Ofe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.854 5.854a.5.5 0 0 0-.708-.708l-2 2a.5.5 0 0 0 0 .708l2 2a.5.5 0 0 0 .708-.708L8.707 8H12.5a.5.5 0 0 0 0-1H8.707l1.147-1.146Z"}),l("path",{fillRule:"evenodd",d:"M2 0h11a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2Zm2.707 1H5v1.293l-4 4V4.707L4.707 1ZM6 14V1h7a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H6Zm-1-1.293V14H3.707L5 12.707Zm0-3v1.586L2.293 14H2a1 1 0 0 1-.838-.454L5 9.707Zm0-3v1.586l-4 4v-1.586l4-4Zm0-3v1.586l-4 4V7.707l4-4ZM3.293 1H2a1 1 0 0 0-1 1v1.293L3.293 1Z"}))},ZBt=$Bt;var kH={};J(kH,{icon:()=>XBt});var bLr=T(z());var qBt=["title","titleId"];function xfe(){return xfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function GBt(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}var JBt=function(t){var r=t.title,n=t.titleId,o=UBt(t,qBt);return l("svg",xfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.146 10.146a.5.5 0 0 1 .708.708l-2 2a.5.5 0 0 1-.708 0l-2-2a.5.5 0 0 1 .708-.708L7 11.293V7.5a.5.5 0 0 1 1 0v3.793l1.146-1.147Z"}),l("path",{fillRule:"evenodd",d:"M15 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2Zm-1 2.707V5h-1.293l-4-4h1.586L14 4.707ZM1 6h13v7a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V6Zm1.293-1H1V3.707L2.293 5Zm3 0H3.707L1 2.293V2a1 1 0 0 1 .455-.838L5.293 5Zm3 0H6.707l-4-4h1.586l4 4Zm3 0H9.707l-4-4h1.586l4 4ZM14 3.293V2a1 1 0 0 0-1-1h-1.293L14 3.293Z"}))},XBt=JBt;var jH={};J(jH,{icon:()=>tzt});var OLr=T(z());var KBt=["title","titleId"];function _fe(){return _fe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function QBt(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}var ezt=function(t){var r=t.title,n=t.titleId,o=YBt(t,KBt);return l("svg",_fe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.146 9.854a.5.5 0 0 0 .708-.708l-2-2a.5.5 0 0 0-.708 0l-2 2a.5.5 0 1 0 .708.708L7 8.707V12.5a.5.5 0 0 0 1 0V8.707l1.146 1.147Z"}),l("path",{fillRule:"evenodd",d:"M15 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2Zm-1 2.707V5h-1.293l-4-4h1.586L14 4.707ZM1 6h13v7a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V6Zm1.293-1H1V3.707L2.293 5Zm3 0H3.707L1 2.293V2a1 1 0 0 1 .455-.838L5.293 5Zm3 0H6.707l-4-4h1.586l4 4Zm3 0H9.707l-4-4h1.586l4 4ZM14 3.293V2a1 1 0 0 0-1-1h-1.293L14 3.293Z"}))},tzt=ezt;var TH={};J(TH,{icon:()=>azt});var _Lr=T(z());var rzt=["title","titleId"];function Sfe(){return Sfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ozt(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}var izt=function(t){var r=t.title,n=t.titleId,o=nzt(t,rzt);return l("svg",Sfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M11 3h5v1H0V3h5V1a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2Zm-7.056 8H7v1H4.1l.392 2.519c.042.269.254.458.493.458h6.03c.239 0 .451-.189.493-.458l1.498-9.576H14l-1.504 9.73c-.116.747-.74 1.304-1.481 1.304h-6.03c-.741 0-1.365-.557-1.481-1.304l-1.511-9.73H9V5.95H3.157L3.476 8H8v1H3.632l.312 2ZM6 3h4V1H6v2Z"}))},azt=izt;var CH={};J(CH,{icon:()=>pzt});var ILr=T(z());var szt=["title","titleId"];function Ife(){return Ife=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uzt(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}var czt=function(t){var r=t.title,n=t.titleId,o=lzt(t,szt);return l("svg",Ife({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M5.14 3.808 7.53 1.51a.67.67 0 0 1 .942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 0 0 0-.93L9.416.578a2.02 2.02 0 0 0-2.832 0l-2.388 2.3a.65.65 0 0 0 0 .93c.26.256.683.256.944 0zm0 8.384 2.39 2.298a.67.67 0 0 0 .942 0l2.389-2.298a.677.677 0 0 1 .944 0 .65.65 0 0 1 0 .93l-2.388 2.3a2.02 2.02 0 0 1-2.832 0l-2.388-2.3a.65.65 0 0 1 0-.93.677.677 0 0 1 .944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},pzt=czt;var MH={};J(MH,{icon:()=>vzt});var PLr=T(z());var dzt=["title","titleId"];function Efe(){return Efe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hzt(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}var mzt=function(t){var r=t.title,n=t.titleId,o=fzt(t,dzt);return l("svg",Efe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.565 10.83a.5.5 0 1 1 .819.573l-1.877 2.68c-.963 1.376-3.02 1.55-4.588.45C.35 13.436-.191 11.445.773 10.07L3.64 5.973c.963-1.375 3.019-1.548 4.587-.45a.5.5 0 1 1-.573.82C6.509 5.54 5.08 5.66 4.46 6.546l-2.868 4.095c-.621.887-.245 2.27.9 3.073 1.146.802 2.575.682 3.196-.205l1.877-2.68z"}),l("path",{d:"M7.892 3.43a.5.5 0 1 1-.574-.819L10 .734c1.376-.963 3.367-.422 4.465 1.146 1.098 1.569.926 3.625-.45 4.588L9.918 9.336c-1.375.963-3.366.422-4.464-1.146a.5.5 0 1 1 .819-.574c.802 1.146 2.185 1.522 3.072.9L13.44 5.65c.886-.621 1.006-2.05.204-3.195-.802-1.146-2.186-1.522-3.072-.9L7.892 3.43zM6 .5v3a.5.5 0 0 1-1 0v-3a.5.5 0 0 1 1 0zM1.058 2.23l2.458 1.72a.5.5 0 0 1-.574.82L.484 3.05a.5.5 0 1 1 .574-.82zm12 7.093 2.457 1.72a.5.5 0 1 1-.573.82l-2.457-1.72a.5.5 0 1 1 .573-.82zm-2.099 1.181v3a.5.5 0 1 1-1 0v-3a.5.5 0 1 1 1 0z"}))},vzt=mzt;var AH={};J(AH,{icon:()=>Ozt});var jLr=T(z());var gzt=["title","titleId"];function Pfe(){return Pfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bzt(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}var wzt=function(t){var r=t.title,n=t.titleId,o=yzt(t,gzt);return l("svg",Pfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 9a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm0-1a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z",clipRule:"evenodd"}),l("path",{d:"M15 14.291A9.053 9.053 0 0 0 8 11a9.053 9.053 0 0 0-7 3.291l.715.71A8.047 8.047 0 0 1 8 11.996 8.047 8.047 0 0 1 14.286 15l.714-.71Z"}))},Ozt=wzt;var RH={};J(RH,{icon:()=>Ezt});var CLr=T(z());var xzt=["title","titleId"];function kfe(){return kfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Szt(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}var Izt=function(t){var r=t.title,n=t.titleId,o=_zt(t,xzt);return l("svg",kfe({xmlns:"http://www.w3.org/2000/svg",width:18,height:18,viewBox:"0 0 18 18","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("g",{fillRule:"evenodd"},l("path",{d:"M13.689 11.132c1.155 1.222 1.953 2.879 2.183 4.748a1.007 1.007 0 0 1-1 1.12H3.007a1.005 1.005 0 0 1-1-1.12c.23-1.87 1.028-3.526 2.183-4.748.247.228.505.442.782.633-1.038 1.069-1.765 2.55-1.972 4.237L14.872 16c-.204-1.686-.93-3.166-1.966-4.235a7.01 7.01 0 0 0 .783-.633ZM8.939 1c1.9 0 3 2 4.38 2.633a2.483 2.483 0 0 1-1.88.867c-.298 0-.579-.06-.844-.157A3.726 3.726 0 0 1 7.69 5.75c-1.395 0-3.75.25-3.245-1.903C5.94 3 6.952 1 8.94 1Z"}),l("path",{d:"M8.94 2c2.205 0 4 1.794 4 4s-1.795 4-4 4c-2.207 0-4-1.794-4-4s1.793-4 4-4m0 9A5 5 0 1 0 8.937.999 5 5 0 0 0 8.94 11"})))},Ezt=Izt;var DH={};J(DH,{icon:()=>Czt});var ALr=T(z());var Pzt=["title","titleId"];function jfe(){return jfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jzt(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}var Tzt=function(t){var r=t.title,n=t.titleId,o=kzt(t,Pzt);return l("svg",jfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M5.482 4.344a2 2 0 1 0-2.963 0c-.08.042-.156.087-.23.136-.457.305-.75.704-.933 1.073A3.457 3.457 0 0 0 1 6.978V9a1 1 0 0 0 1 1h2.5a3.69 3.69 0 0 1 .684-.962L5.171 9H2V7s0-2 2-2c1.007 0 1.507.507 1.755 1.01.225-.254.493-.47.793-.636a2.717 2.717 0 0 0-1.066-1.03zM4 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm10 6h-2.5a3.684 3.684 0 0 0-.684-.962L10.829 9H14V7s0-2-2-2c-1.007 0-1.507.507-1.755 1.01a3.012 3.012 0 0 0-.793-.636 2.716 2.716 0 0 1 1.066-1.03 2 2 0 1 1 2.963 0c.08.042.156.087.23.136.457.305.75.704.933 1.073A3.453 3.453 0 0 1 15 6.944V9a1 1 0 0 1-1 1zm-2-6a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"}),l("path",{fillRule:"evenodd",d:"M10 8c0 .517-.196.989-.518 1.344a2.755 2.755 0 0 1 1.163 1.21A3.453 3.453 0 0 1 11 11.977V14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-2.022a2.005 2.005 0 0 1 .006-.135 3.456 3.456 0 0 1 .35-1.29 2.755 2.755 0 0 1 1.162-1.21A2 2 0 1 1 10 8zm-4 4v2h4v-2s0-2-2-2-2 2-2 2zm3-4a1 1 0 1 1-2 0 1 1 0 0 1 2 0z"}))},Czt=Tzt;var LH={};J(LH,{icon:()=>Lzt});var DLr=T(z());var Mzt=["title","titleId"];function Tfe(){return Tfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Rzt(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}var Dzt=function(t){var r=t.title,n=t.titleId,o=Azt(t,Mzt);return l("svg",Tfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12.5 11V5H11V3.5H5V5H3.5v6H5v1.5h6V11h1.5Zm1 0H15v4h-4v-1.5H5V15H1v-4h1.5V5H1V1h4v1.5h6V1h4v4h-1.5v6ZM4 4V2H2v2h2Zm8 0h2V2h-2v2ZM2 14h2v-2H2v2Zm10 0h2v-2h-2v2Z"}))},Lzt=Dzt;var NH={};J(NH,{icon:()=>Wzt});var NLr=T(z());var Nzt=["title","titleId"];function Cfe(){return Cfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Bzt(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}var zzt=function(t){var r=t.title,n=t.titleId,o=Fzt(t,Nzt);return l("svg",Cfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0 1 14.006 16H1.994A1.995 1.995 0 0 1 0 14.006V1.994Zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 0 0 .994-.994V1.994A.995.995 0 0 0 14.006 1H1.994A.995.995 0 0 0 1 1.994ZM1 4h14v1H1V4Zm1.5-1a.5.5 0 0 1 0-1h1a.5.5 0 0 1 0 1h-1Zm3 0a.5.5 0 0 1 0-1h1a.5.5 0 0 1 0 1h-1Zm4.947 6.106a1 1 0 0 1 0 1.788l-3 2A1 1 0 0 1 6 12V8a1 1 0 0 1 1.447-.894l3 2ZM10 10 7 8v4l3-2Z"}))},Wzt=zzt;var FH={};J(FH,{icon:()=>qzt});var BLr=T(z());var Hzt=["title","titleId"];function Mfe(){return Mfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function $zt(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}var Zzt=function(t){var r=t.title,n=t.titleId,o=Vzt(t,Hzt);return l("svg",Mfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M3 13h10V9.913l-2.571-2.826L8.56 8.753a.5.5 0 0 1-.728-.067L4.448 4.317 3 6.191V13Zm5.295-5.35 1.837-1.64a.5.5 0 0 1 .703.037l3.035 3.336a.5.5 0 0 1 .13.337v3.78a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5V6.02a.5.5 0 0 1 .104-.305l1.947-2.52a.5.5 0 0 1 .791-.001L8.295 7.65ZM1 15h13.5a.5.5 0 1 1 0 1H.5a.5.5 0 0 1-.5-.5v-14a.5.5 0 0 1 1 0V15Z"}))},qzt=Zzt;var BH={};J(BH,{icon:()=>Kzt});var WLr=T(z());var Uzt=["title","titleId"];function Afe(){return Afe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Jzt(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}var Xzt=function(t){var r=t.title,n=t.titleId,o=Gzt(t,Uzt);return l("svg",Afe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.5 1a.5.5 0 0 1 .5.5V15h13.5a.5.5 0 1 1 0 1H.5a.5.5 0 0 1-.5-.5v-14A.5.5 0 0 1 .5 1Zm4.342 2.194L8.295 7.65l1.837-1.64a.5.5 0 0 1 .703.037l3.035 3.336a.5.5 0 0 1 .13.337v3.78a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5V6.02a.5.5 0 0 1 .104-.305l1.947-2.52a.5.5 0 0 1 .791-.001Zm-.394 1.123L3 6.191v4.101l1.146-1.146a.5.5 0 0 1 .493-.126l.085.033L8.5 10.94l1.776-.888a.5.5 0 0 1 .36-.034l.088.034L13 11.19V9.913l-2.571-2.826L8.56 8.753a.5.5 0 0 1-.728-.067L4.448 4.317Z"}))},Kzt=Xzt;var zH={};J(zH,{icon:()=>rWt});var VLr=T(z());var Yzt=["title","titleId"];function Rfe(){return Rfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function eWt(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}var tWt=function(t){var r=t.title,n=t.titleId,o=Qzt(t,Yzt);return l("svg",Rfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.5 10h-6a.5.5 0 0 1 0-1H8V6H2.5a.5.5 0 0 1 0-1H13V2H2.5a.5.5 0 0 1 0-1h11a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5H9v3h2.5a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-9a.5.5 0 1 1 0-1H11v-3H8.5ZM0 .5a.5.5 0 1 1 1 0v14a.5.5 0 1 1-1 0V.5Z"}))},rWt=tWt;var WH={};J(WH,{icon:()=>sWt});var ZLr=T(z());var nWt=["title","titleId"];function Dfe(){return Dfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function iWt(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}var aWt=function(t){var r=t.title,n=t.titleId,o=oWt(t,nWt);return l("svg",Dfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M.5 0a.5.5 0 0 1 .5.5v14a.5.5 0 1 1-1 0V.5A.5.5 0 0 1 .5 0Zm13 1a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5H9v3h2.5a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-9a.5.5 0 1 1 0-1H9v-3H2.5a.5.5 0 0 1 0-1H6V6H2.5a.5.5 0 0 1 0-1H10V2H2.5a.5.5 0 0 1 0-1h11Z"}))},sWt=aWt;var HH={};J(HH,{icon:()=>dWt});var ULr=T(z());var lWt=["title","titleId"];function Lfe(){return Lfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cWt(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}var pWt=function(t){var r=t.title,n=t.titleId,o=uWt(t,lWt);return l("svg",Lfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10 7.5v6a.5.5 0 1 1-1 0V8H6v5.5a.5.5 0 1 1-1 0V3H2v10.5a.5.5 0 1 1-1 0v-11a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5V7h3V4.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v9a.5.5 0 1 1-1 0V5h-3v2.5ZM.5 16a.5.5 0 1 1 0-1h14a.5.5 0 1 1 0 1H.5Z"}))},dWt=pWt;var VH={};J(VH,{icon:()=>gWt});var JLr=T(z());var fWt=["title","titleId"];function Nfe(){return Nfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mWt(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}var vWt=function(t){var r=t.title,n=t.titleId,o=hWt(t,fWt);return l("svg",Nfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M14.5 15a.5.5 0 1 1 0 1H.5a.5.5 0 1 1 0-1h14Zm-9-13a.5.5 0 0 1 .5.5L5.999 7H9V4.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v9a.5.5 0 1 1-1 0V7h-3v6.5a.5.5 0 0 1-.41.492L9.5 14a.5.5 0 0 1-.5-.5V10H6v3.5a.5.5 0 0 1-.992.09L5 13.5V6H2v7.5a.5.5 0 1 1-1 0v-11a.5.5 0 0 1 .5-.5h4Z"}))},gWt=vWt;var $H={};J($H,{icon:()=>xWt});var KLr=T(z());var yWt=["title","titleId"];function Ffe(){return Ffe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wWt(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}var OWt=function(t){var r=t.title,n=t.titleId,o=bWt(t,yWt);return l("svg",Ffe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m12.877 5.847-1.02 1.02a.5.5 0 0 1-.708-.707l1.1-1.099c-.05-.053-.1-.106-.152-.157A6.471 6.471 0 0 0 8 3.019V4.5a.5.5 0 0 1-1 0V3.019a6.47 6.47 0 0 0-4.261 2.055l1.07 1.071a.5.5 0 0 1-.706.707l-.99-.99A6.46 6.46 0 0 0 1.018 10H2.5a.5.5 0 1 1 0 1H1.174c.083.353.196.697.337 1.03a.5.5 0 1 1-.922.39A7.487 7.487 0 0 1 0 9.5a7.483 7.483 0 0 1 2.197-5.304A7.487 7.487 0 0 1 7.5 2a7.487 7.487 0 0 1 5.304 2.197A7.483 7.483 0 0 1 15 9.5a7.487 7.487 0 0 1-.59 2.92.5.5 0 0 1-.92-.39c.14-.333.253-.677.336-1.03H12.5a.5.5 0 1 1 0-1h1.481a6.483 6.483 0 0 0-1.104-4.153Zm-6.041 5.317a.993.993 0 0 1-.01-1.404c.384-.385 2.882-2.002 3.149-1.735.267.267-1.35 2.765-1.735 3.15a.993.993 0 0 1-1.404-.01Z"}))},xWt=OWt;var ZH={};J(ZH,{icon:()=>PWt});var QLr=T(z());var _Wt=["title","titleId"];function Bfe(){return Bfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function IWt(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}var EWt=function(t){var r=t.title,n=t.titleId,o=SWt(t,_Wt);return l("svg",Bfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.725 3.653a6 6 0 0 1 2.847 7.576.5.5 0 0 1-.928-.372 5 5 0 1 0-9.293-.014.5.5 0 0 1-.218.619L1.39 12.47a.5.5 0 0 1-.708-.23A7.99 7.99 0 0 1 0 9a8 8 0 0 1 11.212-7.329.5.5 0 0 1 .234.704l-.721 1.278Zm-.933-.38.5-.889a7 7 0 0 0-8.902 8.93l.886-.511a6 6 0 0 1 7.516-7.53ZM6.73 9.467a1.75 1.75 0 1 1 2.539 0 2 2 0 1 1-2.539 0ZM8 12.013a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm0-3a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z"}))},PWt=EWt;var qH={};J(qH,{icon:()=>MWt});var tNr=T(z());var kWt=["title","titleId"];function zfe(){return zfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function TWt(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}var CWt=function(t){var r=t.title,n=t.titleId,o=jWt(t,kWt);return l("svg",zfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M12.654 3.48c.248.225.552.389.888.467L11.24 9.43a1.99 1.99 0 0 0-.915-.404l2.33-5.547ZM9.146 9.19a2.008 2.008 0 0 0-.769.64l-1.572-2c.311-.136.581-.35.785-.618l1.556 1.978ZM5.581 7.956l-2.134 4.268a.5.5 0 0 1-.894-.448l2.134-4.268c.25.22.557.376.894.448ZM1 15h13.5a.5.5 0 1 1 0 1H.5a.5.5 0 0 1-.5-.5v-14a.5.5 0 0 1 1 0V15Zm5-8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm4 5a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm4-9a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"}))},MWt=CWt;var UH={};J(UH,{icon:()=>NWt});var nNr=T(z());var AWt=["title","titleId"];function Wfe(){return Wfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function DWt(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}var LWt=function(t){var r=t.title,n=t.titleId,o=RWt(t,AWt);return l("svg",Wfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M7.5 15C5.77 15 2 9.97 2 6.595 2 3.507 4.46 1 7.5 1S13 3.507 13 6.595C13 9.97 9.23 15 7.5 15Zm0-1c.286 0 1.48-1.044 2.459-2.35C11.219 9.969 12 8.153 12 6.596 12 4.055 9.983 2 7.5 2S3 4.055 3 6.595c0 1.557.78 3.373 2.041 5.056C6.02 12.956 7.214 14 7.5 14Zm0-4.996a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5Zm0-1a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"}))},NWt=LWt;var GH={};J(GH,{icon:()=>HWt});var iNr=T(z());var FWt=["title","titleId"];function Hfe(){return Hfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zWt(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}var WWt=function(t){var r=t.title,n=t.titleId,o=BWt(t,FWt);return l("svg",Hfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.5 2.309v8.69a.499.499 0 0 1-.032.176L9.5 12.691V3.809l-3-1.5Zm-1-.04L2 3.825v8.906l3.527-1.568a.5.5 0 0 1-.027-.164V2.27Zm.274-1.216a.498.498 0 0 1 .471.01l3.768 1.884 4.284-1.904A.5.5 0 0 1 15 1.5v10a.5.5 0 0 1-.297.457l-4.5 2a.5.5 0 0 1-.427-.01l-3.789-1.894-4.283 1.904a.5.5 0 0 1-.703-.457v-10a.5.5 0 0 1 .297-.457l4.476-1.99ZM10.5 3.825v8.906l3.5-1.556V2.27l-3.5 1.556Z"}))},HWt=WWt;var JH={};J(JH,{icon:()=>UWt});var sNr=T(z());var VWt=["title","titleId"];function Vfe(){return Vfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ZWt(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}var qWt=function(t){var r=t.title,n=t.titleId,o=$Wt(t,VWt);return l("svg",Vfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.532 7.34a2.161 2.161 0 1 1 2.936 0 2.746 2.746 0 1 1-2.936 0ZM2 0h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2Zm0 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H2Zm6 5.915a1.161 1.161 0 1 0 0-2.322 1.161 1.161 0 0 0 0 2.322Zm0 4.492a1.746 1.746 0 1 0 0-3.492 1.746 1.746 0 0 0 0 3.492Z"}))},UWt=qWt;var XH={};J(XH,{icon:()=>YWt});var uNr=T(z());var GWt=["title","titleId"];function $fe(){return $fe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function XWt(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}var KWt=function(t){var r=t.title,n=t.titleId,o=JWt(t,GWt);return l("svg",$fe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M6.5 9a.5.5 0 0 1-.5-.5V3.023A5.5 5.5 0 1 0 11.978 9H6.5ZM7 8h5.5a.5.5 0 0 1 .5.5A6.5 6.5 0 1 1 6.5 2a.5.5 0 0 1 .5.5V8Zm2-6.972V6h4.972C13.696 3.552 11.448 1.304 9 1.028ZM14.5 7h-6a.5.5 0 0 1-.5-.5v-6a.5.5 0 0 1 .5-.5C11.853 0 15 3.147 15 6.5a.5.5 0 0 1-.5.5ZM6.146 8.854a.5.5 0 1 1 .708-.708l4 4a.5.5 0 0 1-.708.708l-4-4Z"}))},YWt=KWt;var KH={};J(KH,{icon:()=>nHt});var pNr=T(z());var QWt=["title","titleId"];function Zfe(){return Zfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function tHt(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}var rHt=function(t){var r=t.title,n=t.titleId,o=eHt(t,QWt);return l("svg",Zfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M16 3v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v1Zm-1 0V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v1h14Zm0 1H1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4ZM4.5 6a.5.5 0 0 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm9 0a.5.5 0 1 1 0 1h-6a.5.5 0 0 1 0-1h6Zm-9 3a.5.5 0 0 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm9 0a.5.5 0 1 1 0 1h-6a.5.5 0 0 1 0-1h6Zm-9 3a.5.5 0 1 1 0 1H2.496a.5.5 0 1 1 0-1H4.5Zm9 0a.5.5 0 1 1 0 1h-6a.5.5 0 1 1 0-1h6Z"}))},nHt=rHt;var YH={};J(YH,{icon:()=>lHt});var fNr=T(z());var oHt=["title","titleId"];function qfe(){return qfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function aHt(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}var sHt=function(t){var r=t.title,n=t.titleId,o=iHt(t,oHt);return l("svg",qfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M1.5 9.047a.5.5 0 1 0 0 1h13a.5.5 0 0 0 0-1h-13Zm0-1h13a1.5 1.5 0 0 1 0 3h-13a1.5 1.5 0 0 1 0-3ZM10 13a.5.5 0 1 1 0 1H4a.5.5 0 1 1 0-1h6ZM8.001 2.015a.5.5 0 1 1-.002 1l-5-.015a.5.5 0 1 1 .003-1l5 .015ZM14 5a.5.5 0 1 1 0 1H6a.5.5 0 0 1 0-1h8Z"}))},lHt=sHt;var QH={};J(QH,{icon:()=>fHt});var mNr=T(z());var uHt=["title","titleId"];function Ufe(){return Ufe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pHt(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}var dHt=function(t){var r=t.title,n=t.titleId,o=cHt(t,uHt);return l("svg",Ufe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M8.5 5v6h2a.5.5 0 1 1 0 1h-5a.5.5 0 1 1 0-1h2V5H5v.5a.5.5 0 0 1-1 0v-1a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.51l-.021 1a.5.5 0 1 1-1-.02l.01-.49H8.5ZM1 15h1.5a.5.5 0 1 1 0 1h-2a.5.5 0 0 1-.5-.5v-1.996a.5.5 0 0 1 1 0V15ZM1 1v1.497a.5.5 0 1 1-1 0V.5A.5.5 0 0 1 .5 0h2a.5.5 0 0 1 0 1H1Zm14 0h-1.495a.5.5 0 0 1 0-1H15.5a.5.5 0 0 1 .5.5v2a.5.5 0 1 1-1 0V1Zm0 14v-1.5a.5.5 0 1 1 1 0v2a.5.5 0 0 1-.5.5h-2a.5.5 0 1 1 0-1H15ZM0 6.5a.5.5 0 0 1 1 0v3a.5.5 0 0 1-1 0v-3ZM9.5 0a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1h3ZM15 6.5a.5.5 0 1 1 1 0v3a.5.5 0 1 1-1 0v-3ZM9.5 15a.5.5 0 1 1 0 1h-3a.5.5 0 1 1 0-1h3Z"}))},fHt=dHt;var eV={};J(eV,{icon:()=>yHt});var gNr=T(z());var hHt=["title","titleId"];function Gfe(){return Gfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vHt(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}var gHt=function(t){var r=t.title,n=t.titleId,o=mHt(t,hHt);return l("svg",Gfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M10.884 1.802c1.171-.309 2.22-.24 3.103.07.295.104.507.212.631.292l.164.106.048.188c.278 1.066.2 2.175-.091 3.23a6.728 6.728 0 0 1-.194.598c.035.12.074.273.112.454.227 1.065.247 2.193-.08 3.267a4.855 4.855 0 0 1-.534 1.175c-.324.514-.7.954-1.117 1.323-.806.712-1.616 1.071-2.235 1.206-.14.179-.346.381-.629.578-.643.447-1.493.711-2.561.711-1.07 0-1.92-.264-2.563-.711a2.874 2.874 0 0 1-.629-.578c-.618-.134-1.428-.493-2.232-1.203-.419-.37-.796-.81-1.12-1.326a4.855 4.855 0 0 1-.534-1.175C.096 8.933.116 7.805.343 6.74a6.74 6.74 0 0 1 .112-.454 6.728 6.728 0 0 1-.194-.598C-.03 4.633-.108 3.524.17 2.458l.048-.188.164-.106c.124-.08.336-.188.63-.291.885-.31 1.933-.38 3.104-.07.184-.108.434-.23.748-.348C5.616 1.17 6.497 1 7.501 1c1.002 0 1.883.17 2.634.455.315.119.565.24.75.347Zm3.027 1.116a3.13 3.13 0 0 0-.255-.102c-.749-.263-1.66-.309-2.708.007l-.238.072-.201-.147c-.11-.08-.354-.217-.728-.358C9.14 2.147 8.38 2 7.501 2c-.88 0-1.641.147-2.283.39-.373.141-.617.278-.727.358l-.2.147-.24-.072c-1.048-.316-1.958-.27-2.707-.007a3.13 3.13 0 0 0-.255.102c-.167.812-.094 1.674.136 2.503.084.303.166.524.217.637l.082.182-.066.19c-.032.09-.084.27-.137.518-.195.914-.212 1.88.059 2.767.1.333.241.645.423.935.273.434.588.801.936 1.108.434.383.898.655 1.36.834.27.105.474.155.575.17l.248.034.12.22c.051.091.199.266.466.452.476.33 1.127.532 1.993.532.865 0 1.516-.202 1.99-.532.268-.186.416-.36.466-.452l.121-.22.248-.034c.101-.015.305-.065.576-.17.462-.18.927-.452 1.362-.836.347-.307.66-.674.933-1.107.182-.29.322-.601.423-.934.271-.887.254-1.853.06-2.767a4.597 4.597 0 0 0-.138-.519l-.066-.189.082-.182c.05-.113.133-.334.217-.637.23-.829.303-1.691.136-2.503ZM5 5.008c.004.181-.048.364-.264.616-.428.498-.985.488-1.431.049-.326-.321-.325-.732-.29-1.047.085-.76.748-.722 1.262-.44.486.27.717.616.723.823Zm5 0c.006-.206.237-.553.724-.821.514-.283 1.176-.321 1.26.44.036.314.038.725-.288 1.046-.446.44-1.005.449-1.433-.05-.217-.25-.267-.434-.263-.614ZM7.5 8c-.503 0-.976-.24-1.375-.672-.398-.432-.592-1.126 0-1.528.384-.259 1.082-.3 1.375-.3.294 0 .991.041 1.375.3.593.402.397 1.096 0 1.528C8.477 7.76 8.002 8 7.5 8Zm0 1c.808 0 2.656.994 2.49 2.074-.153.993-2.114.925-2.49.925-.374 0-2.336.068-2.49-.925C4.845 9.994 6.693 9 7.5 9Z"}))},yHt=gHt;var tV={};J(tV,{icon:()=>_Ht});var bNr=T(z());var bHt=["title","titleId"];function Jfe(){return Jfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function OHt(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}var xHt=function(t){var r=t.title,n=t.titleId,o=wHt(t,bHt);return l("svg",Jfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2.414 8.036 4.89 10.51a.5.5 0 0 1-.707.708L1.354 8.389a.5.5 0 0 1 0-.707l2.828-2.828a.5.5 0 1 1 .707.707L2.414 8.036Zm8.768 2.474 2.475-2.474-2.475-2.475a.5.5 0 0 1 .707-.707l2.829 2.828a.5.5 0 0 1 0 .707l-2.829 2.829a.5.5 0 1 1-.707-.708ZM8.559 2.506a.5.5 0 0 1 .981.19L7.441 13.494a.5.5 0 0 1-.981-.19L8.559 2.506Z"}))},_Ht=xHt;var rV={};J(rV,{icon:()=>kHt});var ONr=T(z());var SHt=["title","titleId"];function Xfe(){return Xfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function EHt(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}var PHt=function(t){var r=t.title,n=t.titleId,o=IHt(t,SHt);return l("svg",Xfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M9.837 7c.11.93.165 1.886.165 2.869V13.5a.5.5 0 1 1-1 0V9.869A23.3 23.3 0 0 0 8.83 7H7.29c-.195 1.04-.292 1.985-.292 2.835V13.5a.5.5 0 1 1-1 0V9.835c0-.864.092-1.809.276-2.835H2.5a.5.5 0 0 1-.495-.57c.285-2.023 1.626-3.358 3.931-3.96 1.967-.514 4.22-.606 6.756-.278A1.5 1.5 0 0 1 14 3.679V5.5A1.5 1.5 0 0 1 12.5 7H9.837Zm-.569-1H12.5a.5.5 0 0 0 .5-.5V3.68a.5.5 0 0 0-.436-.497c-2.416-.311-4.54-.225-6.375.254C4.494 3.88 3.491 4.724 3.117 6H9.268ZM2 10v3.5a.5.5 0 1 1-1 0v-4a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v4a.5.5 0 1 1-1 0V10H2Zm10 3.5a.5.5 0 1 1-1 0v-2a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v2a.5.5 0 1 1-1 0V12h-2v1.5ZM1.016 16.026a.5.5 0 0 1 0-1H15a.5.5 0 1 1 0 1H1.016Z"}))},kHt=PHt;var nV={};J(nV,{icon:()=>AHt});var _Nr=T(z());var jHt=["title","titleId"];function Kfe(){return Kfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function CHt(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}var MHt=function(t){var r=t.title,n=t.titleId,o=THt(t,jHt);return l("svg",Kfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m8.55 9.502.35-3.507a.905.905 0 1 0-1.8 0l.35 3.507a.552.552 0 0 0 1.1 0ZM9 12a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"}),l("path",{d:"M8.864 1.496a1 1 0 0 0-1.728 0l-7 12A1 1 0 0 0 1 15h14a1 1 0 0 0 .864-1.504l-7-12ZM1 14 8 2l7 12H1Z"}))},AHt=MHt;var oV={};J(oV,{icon:()=>FHt});var INr=T(z());var RHt=["title","titleId"];function Yfe(){return Yfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function LHt(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}var NHt=function(t){var r=t.title,n=t.titleId,o=DHt(t,RHt);return l("svg",Yfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{fillRule:"evenodd",d:"M8 1a1 1 0 0 1 .864.496l7 12A1 1 0 0 1 15 15H1a1 1 0 0 1-.864-1.504l7-12A1 1 0 0 1 8 1Zm.9 4.995-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995a.905.905 0 1 1 1.8 0ZM8 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"}))},FHt=NHt;var iV={};J(iV,{icon:()=>VHt});var PNr=T(z());var BHt=["title","titleId"];function Qfe(){return Qfe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function WHt(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}var HHt=function(t){var r=t.title,n=t.titleId,o=zHt(t,BHt);return l("svg",Qfe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M2 3h12v1H2V3zm0 8h6v1H2v-1z"}),l("path",{d:"M2 7h9.5v.5V7h.039l.083.005a2.958 2.958 0 0 1 1.102.298c.309.154.633.394.88.763.248.373.396.847.396 1.434 0 .588-.148 1.061-.396 1.434a2.257 2.257 0 0 1-.88.763 2.957 2.957 0 0 1-1.185.302h-.025l-.009.001h-.003s-.002 0-.002-.5v.5H11v1l-2-1.5 2-1.5v1h.506l.044-.003a1.959 1.959 0 0 0 .726-.195c.191-.095.367-.23.495-.423.127-.19.229-.466.229-.879s-.102-.689-.229-.879a1.256 1.256 0 0 0-.495-.424 1.958 1.958 0 0 0-.77-.197H2V7z"}))},VHt=HHt;var aV={};J(aV,{icon:()=>GHt});var jNr=T(z());var $Ht=["title","titleId"];function ehe(){return ehe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function qHt(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}var UHt=function(t){var r=t.title,n=t.titleId,o=ZHt(t,$Ht);return l("svg",ehe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"M14 3.5 12 2v1H2v1h10v1l2-1.5zM12 9V8H2V7h10V6l2 1.5L12 9zm0 3v1l2-1.5-2-1.5v1H2v1h10z"}))},GHt=UHt;var sV={};J(sV,{icon:()=>QHt});var CNr=T(z());var JHt=["title","titleId"];function the(){return the=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function KHt(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}var YHt=function(t){var r=t.title,n=t.titleId,o=XHt(t,JHt);return l("svg",the({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":n},o),r?l("title",{id:n},r):null,l("path",{d:"m6.918 9.746 4.537 4.537a2 2 0 1 0 2.828-2.829l-3.157-3.156a.5.5 0 0 1 .708-.708l3.156 3.157a3 3 0 1 1-4.243 4.243l-4.949-4.95a5.001 5.001 0 0 1-5.22-7.106.5.5 0 0 1 .805-.138L3.676 5.09a1 1 0 1 0 1.415-1.414L2.797 1.382a.5.5 0 0 1 .138-.805 5.001 5.001 0 1 1 3.983 9.169ZM1.226 4.054a4.002 4.002 0 0 0 6.693 3.865 4 4 0 0 0-3.865-6.693l1.744 1.743a2 2 0 1 1-2.829 2.828L1.226 4.054Zm10.229 8.814a1 1 0 1 1 1.414-1.414 1 1 0 0 1-1.414 1.414Z"}))},QHt=YHt;var B8e=T(z()),qs=T(it()),z8e=T(At());var lJ={accessibility:"accessibility",addDataApp:"app_add_data",advancedSettingsApp:"app_advanced_settings",agentApp:"app_fleet",aggregate:"aggregate",analyzeEvent:"analyzeEvent",annotation:"annotation",anomalyChart:"anomaly_chart",anomalySwimLane:"anomaly_swim_lane",apmApp:"app_apm",apmTrace:"apm_trace",appSearchApp:"app_app_search",apps:"apps",arrowDown:"arrow_down",arrowLeft:"arrow_left",arrowRight:"arrow_right",arrowUp:"arrow_up",arrowStart:"arrowStart",arrowEnd:"arrowEnd",article:"article",asterisk:"asterisk",at:"at",auditbeatApp:"app_auditbeat",beaker:"beaker",bell:"bell",bellSlash:"bellSlash",beta:"beta",bolt:"bolt",boxesHorizontal:"boxes_horizontal",boxesVertical:"boxes_vertical",branch:"branch",branchUser:"branchUser",broom:"broom",brush:"brush",bug:"bug",bullseye:"bullseye",calendar:"calendar",canvasApp:"app_canvas",casesApp:"app_cases",changePointDetection:"change_point_detection",check:"check",checkInCircleFilled:"checkInCircleFilled",cheer:"cheer",classificationJob:"ml_classification_job",clickLeft:"clickLeft",clickRight:"clickRight",clock:"clock",clockCounter:"clockCounter",cloudDrizzle:"cloudDrizzle",cloudStormy:"cloudStormy",cloudSunny:"cloudSunny",cluster:"cluster",codeApp:"app_code",color:"color",compute:"compute",console:"console",consoleApp:"app_console",container:"container",continuityAbove:"continuityAbove",continuityAboveBelow:"continuityAboveBelow",continuityBelow:"continuityBelow",continuityWithin:"continuityWithin",controlsHorizontal:"controls_horizontal",controlsVertical:"controls_vertical",copy:"copy",copyClipboard:"copy_clipboard",createAdvancedJob:"ml_create_advanced_job",createMultiMetricJob:"ml_create_multi_metric_job",createPopulationJob:"ml_create_population_job",createSingleMetricJob:"ml_create_single_metric_job",cross:"cross",crossClusterReplicationApp:"app_cross_cluster_replication",crossInCircle:"cross_in_circle",crosshairs:"crosshairs",currency:"currency",cut:"cut",dashboardApp:"app_dashboard",dataVisualizer:"ml_data_visualizer",database:"database",desktop:"desktop",devToolsApp:"app_devtools",diff:"diff",discoverApp:"app_discover",discuss:"discuss",document:"document",documentEdit:"documentEdit",documentation:"documentation",documents:"documents",dot:"dot",dotInCircle:"dotInCircle",doubleArrowLeft:"doubleArrowLeft",doubleArrowRight:"doubleArrowRight",download:"download",editorAlignCenter:"editor_align_center",editorAlignLeft:"editor_align_left",editorAlignRight:"editor_align_right",editorBold:"editor_bold",editorChecklist:"editor_checklist",editorCodeBlock:"editor_code_block",editorComment:"editor_comment",editorDistributeHorizontal:"editorDistributeHorizontal",editorDistributeVertical:"editorDistributeVertical",editorHeading:"editor_heading",editorItalic:"editor_italic",editorItemAlignBottom:"editorItemAlignBottom",editorItemAlignCenter:"editorItemAlignCenter",editorItemAlignLeft:"editorItemAlignLeft",editorItemAlignMiddle:"editorItemAlignMiddle",editorItemAlignRight:"editorItemAlignRight",editorItemAlignTop:"editorItemAlignTop",editorLink:"editor_link",editorOrderedList:"editor_ordered_list",editorPositionBottomLeft:"editorPositionBottomLeft",editorPositionBottomRight:"editorPositionBottomRight",editorPositionTopLeft:"editorPositionTopLeft",editorPositionTopRight:"editorPositionTopRight",editorRedo:"editor_redo",editorStrike:"editor_strike",editorTable:"editor_table",editorUnderline:"editor_underline",editorUndo:"editor_undo",editorUnorderedList:"editor_unordered_list",email:"email",empty:"empty",emsApp:"app_ems",endpoint:"endpoint",eql:"eql",eraser:"eraser",error:"error",errorFilled:"errorFilled",esqlVis:"esqlVis",exit:"exit",expand:"expand",expandMini:"expandMini",exportAction:"export",eye:"eye",eyeClosed:"eye_closed",faceHappy:"face_happy",faceNeutral:"face_neutral",faceSad:"face_sad",fieldStatistics:"field_statistics",filebeatApp:"app_filebeat",filter:"filter",filterExclude:"filterExclude",filterIgnore:"filterIgnore",filterInclude:"filterInclude",filterInCircle:"filterInCircle",flag:"flag",fleetApp:"app_agent",fold:"fold",folderCheck:"folder_check",folderClosed:"folder_closed",folderExclamation:"folder_exclamation",folderOpen:"folder_open",frameNext:"frameNext",framePrevious:"framePrevious",fullScreen:"full_screen",fullScreenExit:"fullScreenExit",function:"function",gear:"gear",gisApp:"app_gis",glasses:"glasses",globe:"globe",grab:"grab",grabHorizontal:"grab_horizontal",grabOmnidirectional:"grabOmnidirectional",gradient:"gradient",graphApp:"app_graph",grid:"grid",grokApp:"app_grok",heart:"heart",heartbeatApp:"app_heartbeat",heatmap:"heatmap",help:"help",home:"home",iInCircle:"iInCircle",image:"image",importAction:"import",index:"index",indexClose:"index_close",indexEdit:"index_edit",indexFlush:"index_flush",indexManagementApp:"app_index_management",indexMapping:"index_mapping",indexOpen:"index_open",indexPatternApp:"app_index_pattern",indexRollupApp:"app_index_rollup",indexRuntime:"index_runtime",indexSettings:"index_settings",indexTemporary:"indexTemporary",infinity:"infinity",inputOutput:"inputOutput",inspect:"inspect",invert:"invert",ip:"ip",key:"key",keyboard:"keyboard",kqlField:"kql_field",kqlFunction:"kql_function",kqlOperand:"kql_operand",kqlSelector:"kql_selector",kqlValue:"kql_value",kubernetesNode:"kubernetesNode",kubernetesPod:"kubernetesPod",launch:"launch",layers:"layers",lensApp:"app_lens",lettering:"lettering",lineDashed:"lineDashed",lineDotted:"lineDotted",lineSolid:"lineSolid",link:"link",list:"list",listAdd:"list_add",lock:"lock",lockOpen:"lockOpen",logPatternAnalysis:"log_pattern_analysis",logRateAnalysis:"log_rate_analysis",logoAWS:"logo_aws",logoAWSMono:"logo_aws_mono",logoAerospike:"logo_aerospike",logoApache:"logo_apache",logoAppSearch:"logo_app_search",logoAzure:"logo_azure",logoAzureMono:"logo_azure_mono",logoBeats:"logo_beats",logoBusinessAnalytics:"logo_business_analytics",logoCeph:"logo_ceph",logoCloud:"logo_cloud",logoCloudEnterprise:"logo_cloud_ece",logoCode:"logo_code",logoCodesandbox:"logo_codesandbox",logoCouchbase:"logo_couchbase",logoDocker:"logo_docker",logoDropwizard:"logo_dropwizard",logoElastic:"logo_elastic",logoElasticStack:"logo_elastic_stack",logoElasticsearch:"logo_elasticsearch",logoEnterpriseSearch:"logo_enterprise_search",logoEtcd:"logo_etcd",logoGCP:"logo_gcp",logoGCPMono:"logo_gcp_mono",logoGithub:"logo_github",logoGmail:"logo_gmail",logoGolang:"logo_golang",logoGoogleG:"logo_google_g",logoHAproxy:"logo_haproxy",logoIBM:"logo_ibm",logoIBMMono:"logo_ibm_mono",logoKafka:"logo_kafka",logoKibana:"logo_kibana",logoKubernetes:"logo_kubernetes",logoLogging:"logo_logging",logoLogstash:"logo_logstash",logoMaps:"logo_maps",logoMemcached:"logo_memcached",logoMetrics:"logo_metrics",logoMongodb:"logo_mongodb",logoMySQL:"logo_mysql",logoNginx:"logo_nginx",logoObservability:"logo_observability",logoOsquery:"logo_osquery",logoPhp:"logo_php",logoPostgres:"logo_postgres",logoPrometheus:"logo_prometheus",logoRabbitmq:"logo_rabbitmq",logoRedis:"logo_redis",logoSecurity:"logo_security",logoSiteSearch:"logo_site_search",logoSketch:"logo_sketch",logoSlack:"logo_slack",logoUptime:"logo_uptime",logoVulnerabilityManagement:"logo_vulnerability_management",logoWebhook:"logo_webhook",logoWindows:"logo_windows",logoWorkplaceSearch:"logo_workplace_search",logsApp:"app_logs",logstashFilter:"logstash_filter",logstashIf:"logstash_if",logstashInput:"logstash_input",logstashOutput:"logstash_output",logstashQueue:"logstash_queue",machineLearningApp:"app_ml",magnet:"magnet",magnifyWithExclamation:"magnifyWithExclamation",magnifyWithMinus:"magnifyWithMinus",magnifyWithPlus:"magnifyWithPlus",managementApp:"app_management",mapMarker:"map_marker",memory:"memory",menu:"menu",menuDown:"menuDown",menuLeft:"menuLeft",menuRight:"menuRight",menuUp:"menuUp",merge:"merge",metricbeatApp:"app_metricbeat",metricsApp:"app_metrics",minimize:"minimize",minus:"minus",minusInCircle:"minus_in_circle",minusInCircleFilled:"minus_in_circle_filled",minusInSquare:"minus_in_square",mobile:"mobile",monitoringApp:"app_monitoring",moon:"moon",move:"move",namespace:"namespace",nested:"nested",newChat:"new_chat",node:"node",notebookApp:"app_notebook",number:"number",offline:"offline",online:"online",outlierDetectionJob:"ml_outlier_detection_job",package:"package",packetbeatApp:"app_packetbeat",pageSelect:"pageSelect",pagesSelect:"pagesSelect",palette:"palette",paperClip:"paper_clip",partial:"partial",pause:"pause",payment:"payment",pencil:"pencil",percent:"percent",pin:"pin",pinFilled:"pin_filled",pipeBreaks:"pipeBreaks",pipelineApp:"app_pipeline",pipeNoBreaks:"pipeNoBreaks",pivot:"pivot",play:"play",playFilled:"playFilled",plus:"plus",plusInCircle:"plus_in_circle",plusInCircleFilled:"plus_in_circle_filled",plusInSquare:"plus_in_square",popout:"popout",push:"push",questionInCircle:"question_in_circle",quote:"quote",recentlyViewedApp:"app_recently_viewed",refresh:"refresh",regressionJob:"ml_regression_job",reporter:"reporter",reportingApp:"app_reporting",returnKey:"return_key",save:"save",savedObjectsApp:"app_saved_objects",scale:"scale",search:"search",searchProfilerApp:"app_search_profiler",securityAnalyticsApp:"app_security_analytics",securityApp:"app_security",securitySignal:"securitySignal",securitySignalDetected:"securitySignalDetected",securitySignalResolved:"securitySignalResolved",sessionViewer:"sessionViewer",shard:"shard",share:"share",singleMetricViewer:"single_metric_viewer",snowflake:"snowflake",sortAscending:"sortAscending",sortDescending:"sortDescending",sortDown:"sort_down",sortLeft:"sortLeft",sortRight:"sortRight",sortUp:"sort_up",sortable:"sortable",spaces:"spaces",spacesApp:"app_spaces",sparkles:"sparkles",sqlApp:"app_sql",starEmpty:"star_empty",starEmptySpace:"star_empty_space",starFilled:"star_filled",starFilledSpace:"star_filled_space",starMinusEmpty:"star_minus_empty",starMinusFilled:"star_minus_filled",starPlusEmpty:"starPlusEmpty",starPlusFilled:"starPlusFilled",stats:"stats",stop:"stop",stopFilled:"stop_filled",stopSlash:"stop_slash",storage:"storage",string:"string",submodule:"submodule",sun:"sun",swatchInput:"swatch_input",symlink:"symlink",tableDensityCompact:"table_density_compact",tableDensityExpanded:"table_density_expanded",tableDensityNormal:"table_density_normal",tableOfContents:"tableOfContents",tag:"tag",tear:"tear",temperature:"temperature",timeline:"timeline",timelineWithArrow:"timelineWithArrow",timelionApp:"app_timelion",timeRefresh:"timeRefresh",timeslider:"timeslider",training:"training",transitionLeftIn:"transitionLeftIn",transitionLeftOut:"transitionLeftOut",transitionTopIn:"transitionTopIn",transitionTopOut:"transitionTopOut",trash:"trash",unfold:"unfold",unlink:"unlink",upgradeAssistantApp:"app_upgrade_assistant",uptimeApp:"app_uptime",user:"user",userAvatar:"userAvatar",users:"users",usersRolesApp:"app_users_roles",vector:"vector",videoPlayer:"videoPlayer",visArea:"vis_area",visAreaStacked:"vis_area_stacked",visBarHorizontal:"vis_bar_horizontal",visBarHorizontalStacked:"vis_bar_horizontal_stacked",visBarVertical:"vis_bar_vertical",visBarVerticalStacked:"vis_bar_vertical_stacked",visGauge:"vis_gauge",visGoal:"vis_goal",visLine:"vis_line",visMapCoordinate:"vis_map_coordinate",visMapRegion:"vis_map_region",visMetric:"vis_metric",visPie:"vis_pie",visTable:"vis_table",visTagCloud:"vis_tag_cloud",visText:"vis_text",visTimelion:"vis_timelion",visVega:"vis_vega",visVisualBuilder:"vis_visual_builder",visualizeApp:"app_visualize",vulnerabilityManagementApp:"app_vulnerability_management",warning:"warning",warningFilled:"warningFilled",alert:"warning",watchesApp:"app_watches",wordWrap:"wordWrap",wordWrapDisabled:"wordWrapDisabled",workplaceSearchApp:"app_workplace_search",wrench:"wrench",tokenAlias:"tokenAlias",tokenAnnotation:"tokenAnnotation",tokenArray:"tokenArray",tokenBinary:"tokenBinary",tokenBoolean:"tokenBoolean",tokenClass:"tokenClass",tokenCompletionSuggester:"tokenCompletionSuggester",tokenConstant:"tokenConstant",tokenDate:"tokenDate",tokenDimension:"tokenDimension",tokenElement:"tokenElement",tokenEnum:"tokenEnum",tokenEnumMember:"tokenEnumMember",tokenEvent:"tokenEvent",tokenException:"tokenException",tokenField:"tokenField",tokenFile:"tokenFile",tokenFlattened:"tokenFlattened",tokenFunction:"tokenFunction",tokenGeo:"tokenGeo",tokenHistogram:"tokenHistogram",tokenInterface:"tokenInterface",tokenIP:"tokenIP",tokenJoin:"tokenJoin",tokenKey:"tokenKey",tokenKeyword:"tokenKeyword",tokenMethod:"tokenMethod",tokenMetricCounter:"tokenMetricCounter",tokenMetricGauge:"tokenMetricGauge",tokenModule:"tokenModule",tokenNamespace:"tokenNamespace",tokenNested:"tokenNested",tokenNull:"tokenNull",tokenNumber:"tokenNumber",tokenObject:"tokenObject",tokenOperator:"tokenOperator",tokenPackage:"tokenPackage",tokenParameter:"tokenParameter",tokenPercolator:"tokenPercolator",tokenProperty:"tokenProperty",tokenRange:"tokenRange",tokenRankFeature:"tokenRankFeature",tokenRankFeatures:"tokenRankFeatures",tokenRepo:"tokenRepo",tokenSearchType:"tokenSearchType",tokenSemanticText:"tokenSemanticText",tokenShape:"tokenShape",tokenString:"tokenString",tokenStruct:"tokenStruct",tokenSymbol:"tokenSymbol",tokenTag:"tokenTag",tokenText:"tokenText",tokenTokenCount:"tokenTokenCount",tokenVariable:"tokenVariable",tokenVectorDense:"tokenVectorDense",tokenDenseVector:"tokenVectorDense",tokenVectorSparse:"tokenVectorSparse"};var T8e=T(Do()),lV=[];function eVt(){(0,T8e.unstable_batchedUpdates)(function(){for(var e=0;e=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cVt(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 pVt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function L8e(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cVt(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 pVt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function L8e(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&arguments[1]!==void 0?arguments[1]:{},o=n.border,i=o===void 0?r.colors.lightShade:o,c=n.highlight,d=c===void 0?r.colors.primary:c;return"".concat(d," ").concat(i," ").concat(i," ").concat(i)},iIe=function(t){var r=t.euiTheme;return{euiLoadingSpinner:Q("flex-shrink:0;display:inline-block;border-radius:50%;border:",r.border.thick,";",Fd("border-color",lhe(t))," ",bn,"{animation:",HVt," 0.6s infinite linear;};label:euiLoadingSpinner;"),s:Q(Po(r.size[Y0.s],r.size[Y0.s])," border-width:",pr(r.border.width.thin,function(n){return n*1.5}),";;label:s;"),m:Q(Po(r.size[Y0.m],r.size[Y0.m])," border-width:",pr(r.border.width.thin,function(n){return n*1.5}),";;label:m;"),l:Q(Po(r.size[Y0.l],r.size[Y0.l]),";;label:l;"),xl:Q(Po(r.size[Y0.xl],r.size[Y0.xl]),";;label:xl;"),xxl:Q(Po(r.size[Y0.xxl],r.size[Y0.xxl]),";;label:xxl;")}};function yV(e){"@babel/helpers - typeof";return yV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},yV(e)}var VVt=["size","className","aria-label","color","style"];function uhe(){return uhe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function GVt(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}var _r=function(t){var r=t.size,n=r===void 0?"m":r,o=t.className,i=t["aria-label"],c=t.color,d=t.style,h=UVt(t,VVt),v=(0,lIe.default)("euiLoadingSpinner",o),w=mt(iIe),_=[w.euiLoadingSpinner,w[n]],I=ur(),R=c?sIe(sIe({},d),{},{borderColor:lhe(I,c)}):d,D=nIe();return l("span",uhe({className:v,css:_,style:R,role:"progressbar","aria-label":i||D},h))};_r.propTypes={className:qg.default.string,"aria-label":qg.default.string,"data-test-subj":qg.default.string,css:qg.default.any,size:qg.default.any,color:qg.default.shape({border:qg.default.any,highlight:qg.default.any})};var uIe=function(t){var r=t.euiTheme;return{euiButtonDisplayContent:Q(pe("height","100%")," ",pe("width","100%")," display:flex;justify-content:center;align-items:center;vertical-align:middle;gap:",r.size.s,";;label:euiButtonDisplayContent;")}};var JVt=["children","textProps","isLoading","isDisabled","iconType","iconSize","iconSide"];function mJ(){return mJ=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function KVt(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}var bV=function(t){var r=t.children,n=t.textProps,o=t.isLoading,i=o===void 0?!1:o,c=t.isDisabled,d=c===void 0?!1:c,h=t.iconType,v=t.iconSize,w=v===void 0?"m":v,_=t.iconSide,I=_===void 0?"left":_,R=XVt(t,JVt),D=mt(uIe),F=(0,cIe.useMemo)(function(){if(i){var q=d?{border:"currentcolor"}:void 0;return l(_r,{size:w,color:q})}if(h)return l(mr,{type:h,size:w,color:"inherit"})},[h,w,i,d]),A=typeof r=="string",N=n===!1,H=(A||n)&&!N;return l("span",mJ({css:D.euiButtonDisplayContent},R),I==="left"&&F,H?l("span",mJ({},n,{className:(0,pIe.default)("eui-textTruncate",n?.className)}),r):r,I==="right"&&F)};bV.propTypes={iconType:ii.default.oneOfType([ii.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,ii.default.string.isRequired,ii.default.elementType.isRequired]),iconSide:ii.default.oneOfType([ii.default.any.isRequired,ii.default.oneOf([void 0])]),isLoading:ii.default.bool,textProps:ii.default.oneOfType([ii.default.shape({className:ii.default.string,"aria-label":ii.default.string,"data-test-subj":ii.default.string,css:ii.default.any,ref:ii.default.any,"data-text":ii.default.string}).isRequired,ii.default.oneOf([!1])]),iconSize:ii.default.any,isDisabled:ii.default.bool,className:ii.default.string,"aria-label":ii.default.string,"data-test-subj":ii.default.string,css:ii.default.any};var IIe=T(SIe());function $d(e){var t=new IIe.default(e);return t.protocol!=="javascript:"}function wV(e){"@babel/helpers - typeof";return wV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},wV(e)}var u$t=["element","type","children","iconType","iconSide","iconSize","size","isDisabled","disabled","isLoading","isSelected","fullWidth","minWidth","contentProps","textProps","href","target","rel","style"];function EIe(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 Tx(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function h$t(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 Cx(e){var t=e.href,r=e.isDisabled,n=e.isLoading,o=!t||$d(t);return n||r||!o}var gJ=(0,PIe.forwardRef)(function(e,t){var r=e.element,n=r===void 0?"button":r,o=e.type,i=o===void 0?"button":o,c=e.children,d=e.iconType,h=e.iconSide,v=h===void 0?"left":h,w=e.iconSize,_=e.size,I=_===void 0?"m":_,R=e.isDisabled,D=e.disabled,F=e.isLoading,A=e.isSelected,N=e.fullWidth,H=e.minWidth,q=e.contentProps,Y=e.textProps,ee=e.href,ne=e.target,te=e.rel,de=e.style,fe=f$t(e,u$t),ye=Cx({href:ee,isDisabled:R||D,isLoading:F}),Ie=mt(aJ),he=[Ie.euiButtonDisplay,Ie[I],N&&Ie.fullWidth,H==null&&Ie.defaultMinWidth,ye&&Ie.isDisabled],be=l(bV,fhe({isLoading:F,isDisabled:ye,iconType:d,iconSide:v,iconSize:w,textProps:Y},q),c),Se=ye?"button":ee?"a":n,Te={};Se==="button"&&(Te=Tx(Tx({},Te),{},{disabled:ye,"aria-pressed":A}));var Pe={};return ee&&!ye?(Pe.href=ee,Pe.rel=va({href:ee,target:ne,rel:te}),Pe.target=ne):Pe.type=i,l(Se,Tx(Tx(Tx({css:he,style:H?Tx(Tx({},de),{},{minInlineSize:H}):de,ref:t},Te),Pe),fe),be)});gJ.propTypes={href:an.default.string,onClick:an.default.func,element:an.default.oneOf(["a","button","span"]),children:an.default.node,size:an.default.any,isSelected:an.default.bool,fullWidth:an.default.bool,minWidth:an.default.oneOfType([an.default.any.isRequired,an.default.oneOf([!1])]),isLoading:an.default.bool,contentProps:an.default.shape({className:an.default.string,"aria-label":an.default.string,"data-test-subj":an.default.string,css:an.default.any}),style:an.default.any,type:an.default.any,iconType:an.default.oneOfType([an.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,an.default.string.isRequired,an.default.elementType.isRequired]),iconSide:an.default.oneOfType([an.default.any.isRequired,an.default.oneOf([void 0])]),textProps:an.default.oneOfType([an.default.shape({className:an.default.string,"aria-label":an.default.string,"data-test-subj":an.default.string,css:an.default.any,ref:an.default.any,"data-text":an.default.string}).isRequired,an.default.oneOf([!1])]),iconSize:an.default.any,isDisabled:an.default.bool,className:an.default.string,"aria-label":an.default.string,"data-test-subj":an.default.string,css:an.default.any,buttonRef:an.default.any};gJ.displayName="EuiButtonDisplay";var m$t=["className","buttonRef","size","color","fill"];function hhe(){return hhe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function g$t(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}var u3=function(t){var r=t.className,n=t.buttonRef,o=t.size,i=o===void 0?"m":o,c=t.color,d=c===void 0?"primary":c,h=t.fill,v=v$t(t,m$t),w=Cx({href:v.href,isDisabled:v.isDisabled||v.disabled,isLoading:v.isLoading}),_=h9({display:h?"fill":"base"})[w?"disabled":d],I=nJ(),R=(0,kIe.default)("euiButton",r),D=[_,I];return l(gJ,hhe({className:R,css:D,ref:n,size:i},v))};u3.propTypes={href:Zr.default.string,onClick:Zr.default.func,children:Zr.default.node,fill:Zr.default.bool,color:Zr.default.any,size:Zr.default.any,isDisabled:Zr.default.bool,className:Zr.default.string,"aria-label":Zr.default.string,"data-test-subj":Zr.default.string,css:Zr.default.any,buttonRef:Zr.default.any,element:Zr.default.oneOf(["a","button","span"]),isSelected:Zr.default.bool,fullWidth:Zr.default.bool,minWidth:Zr.default.oneOfType([Zr.default.any.isRequired,Zr.default.oneOf([!1])]),isLoading:Zr.default.bool,contentProps:Zr.default.shape({className:Zr.default.string,"aria-label":Zr.default.string,"data-test-subj":Zr.default.string,css:Zr.default.any}),style:Zr.default.any,type:Zr.default.any,iconType:Zr.default.oneOfType([Zr.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,Zr.default.string.isRequired,Zr.default.elementType.isRequired]),iconSide:Zr.default.oneOfType([Zr.default.any.isRequired,Zr.default.oneOf([void 0])]),textProps:Zr.default.oneOfType([Zr.default.shape({className:Zr.default.string,"aria-label":Zr.default.string,"data-test-subj":Zr.default.string,css:Zr.default.any,ref:Zr.default.any,"data-text":Zr.default.string}).isRequired,Zr.default.oneOf([!1])]),iconSize:Zr.default.any};var cBr=T(z()),vn=T(it()),bJ=T(At());var y$t={name:"1lywbid-flush",styles:"padding-inline:0;label:flush;"},jIe=function(t){var r=t.euiTheme,n=aJ(t);return{euiButtonEmpty:Q(n.euiButtonDisplay," ",Fd("padding","0 ".concat(r.size.s)),bn,"{transition-timing-function:ease-in;transition-duration:",r.animation.fast,";};label:euiButtonEmpty;"),isDisabled:n.isDisabled,xs:n.xs,s:n.s,m:n.m,flush:y$t,left:Q(pe("margin-right",r.size.s),";;label:left;"),right:Q(pe("margin-left",r.size.s),";;label:right;"),both:Q(";label:both;")}};function xV(e){"@babel/helpers - typeof";return xV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xV(e)}var b$t=["children","className","iconType","iconSide","iconSize","color","size","flush","isDisabled","disabled","isLoading","href","target","rel","type","buttonRef","contentProps","textProps","isSelected"];function OV(){return OV=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function S$t(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}var cu=function(t){var r=t.children,n=t.className,o=t.iconType,i=t.iconSide,c=i===void 0?"left":i,d=t.iconSize,h=d===void 0?"m":d,v=t.color,w=v===void 0?"primary":v,_=t.size,I=_===void 0?"m":_,R=t.flush,D=t.isDisabled,F=t.disabled,A=t.isLoading,N=t.href,H=t.target,q=t.rel,Y=t.type,ee=Y===void 0?"button":Y,ne=t.buttonRef,te=t.contentProps,de=t.textProps,fe=t.isSelected,ye=_$t(t,b$t),Ie=Cx({isDisabled:D||F,href:N,isLoading:A}),he=h9({display:"empty"}),be=mt(jIe),Se=[be.euiButtonEmpty,be[I],he[Ie?"disabled":w],R&&be.flush,R&&be[R],Ie&&be.isDisabled],Te=(0,bJ.default)("euiButtonEmpty",n),Pe=(0,bJ.default)("euiButtonEmpty__content",te?.className),Ve=(0,bJ.default)("euiButtonEmpty__text",de&&de.className),De=l(bV,OV({isDisabled:Ie,isLoading:A,iconType:o,iconSide:c,iconSize:I==="xs"?"s":h,textProps:de===!1?!1:yJ(yJ({},de),{},{className:Ve})},yJ(yJ({},te),{},{className:Pe})),r);if(N&&!Ie){var He=va({href:N,target:H,rel:q});return l("a",OV({className:Te,css:Se,href:N,target:H,rel:He,ref:ne},ye),De)}return l("button",OV({disabled:Ie,className:Te,css:Se,type:ee,ref:ne,"aria-pressed":fe},ye),De)};cu.propTypes={href:vn.default.string,onClick:vn.default.func,color:vn.default.any,size:vn.default.any,flush:vn.default.any,isDisabled:vn.default.bool,isLoading:vn.default.bool,isSelected:vn.default.bool,target:vn.default.string,rel:vn.default.string,type:vn.default.any,buttonRef:vn.default.any,contentProps:vn.default.shape({className:vn.default.string,"aria-label":vn.default.string,"data-test-subj":vn.default.string,css:vn.default.any}),iconType:vn.default.oneOfType([vn.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,vn.default.string.isRequired,vn.default.elementType.isRequired]),iconSide:vn.default.oneOfType([vn.default.any.isRequired,vn.default.oneOf([void 0])]),textProps:vn.default.oneOfType([vn.default.shape({className:vn.default.string,"aria-label":vn.default.string,"data-test-subj":vn.default.string,css:vn.default.any,ref:vn.default.any,"data-text":vn.default.string}).isRequired,vn.default.oneOf([!1])]),iconSize:vn.default.any,className:vn.default.string,"aria-label":vn.default.string,"data-test-subj":vn.default.string,css:vn.default.any};var EBr=T(z()),Gi=T(it()),LIe=T(At());function _V(e){"@babel/helpers - typeof";return _V=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_V(e)}function CIe(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 MIe(e){for(var t=1;tsvg{pointer-events:none;};label:euiButtonIcon;"),isDisabled:P$t,xs:Q(Po(r.xs.height)," border-radius:",r.xs.radius,";;label:xs;"),s:Q(Po(r.s.height)," border-radius:",r.s.radius,";;label:s;"),m:Q(Po(r.m.height)," border-radius:",r.m.radius,";;label:m;")}},DIe=function(t){return rJ.reduce(function(r,n){return MIe(MIe({},r),{},AIe({},n,Q("&:hover{background-color:",tJ(t,n).backgroundColor,";}")))},{})};var k$t=["className","iconType","iconSize","color","isDisabled","disabled","href","type","display","target","rel","size","buttonRef","isSelected","isLoading"];function wJ(){return wJ=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function T$t(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}var pc=function(t){var r=t.className,n=t.iconType,o=t.iconSize,i=o===void 0?"m":o,c=t.color,d=c===void 0?"primary":c,h=t.isDisabled,v=t.disabled,w=t.href,_=t.type,I=_===void 0?"button":_,R=t.display,D=R===void 0?"empty":R,F=t.target,A=t.rel,N=t.size,H=N===void 0?"xs":N,q=t.buttonRef,Y=t.isSelected,ee=t.isLoading,ne=j$t(t,k$t),te=Cx({isDisabled:h||v,href:w,isLoading:ee}),de=ne["aria-hidden"],fe=de==="true"||de===!0;!ne["aria-label"]&&!ne["aria-labelledby"]&&!fe&&console.warn(`EuiButtonIcon requires aria-label or aria-labelledby to be specified because icon-only - buttons are screen-reader-inaccessible without them.`);var ye=h9({display:D}),Ie=nJ(),he=mt(DIe),be=mt(RIe),Se=[be.euiButtonIcon,be[H],ye[te?"disabled":d],Ie,D==="empty"&&!te&&he[d],te&&be.isDisabled],Te=(0,LIe.default)("euiButtonIcon",r),Pe;if(n&&!ee&&(Pe=l(mr,{className:"euiButtonIcon__icon",type:n,size:i,"aria-hidden":"true",color:"inherit"})),n&&ee){var Ve=i==="original"?void 0:i,De=te?{border:"currentcolor"}:void 0;Pe=l(_r,{size:Ve,color:De})}if(w&&!te){var He=va({href:w,target:F,rel:A});return l("a",wJ({css:Se,tabIndex:fe?-1:void 0,className:Te,href:w,target:F,rel:He,ref:q},ne),Pe)}var Je;return l("button",wJ({css:Se,tabIndex:fe?-1:void 0,disabled:te,className:Te,"aria-pressed":Y,type:I,ref:q},ne),Pe)};pc.propTypes={type:Gi.default.any,href:Gi.default.string,onClick:Gi.default.func,iconType:Gi.default.oneOfType([Gi.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,Gi.default.string.isRequired,Gi.default.elementType.isRequired]).isRequired,color:Gi.default.any,"aria-label":Gi.default.string,"aria-labelledby":Gi.default.string,isDisabled:Gi.default.bool,size:Gi.default.any,iconSize:Gi.default.any,isSelected:Gi.default.bool,display:Gi.default.any,isLoading:Gi.default.bool,className:Gi.default.string,"data-test-subj":Gi.default.string,css:Gi.default.any,buttonRef:Gi.default.any};var vhe=T(it()),Mx=T(z());function mhe(e,t){return R$t(e)||A$t(e,t)||M$t(e,t)||C$t()}function C$t(){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 M$t(e,t){if(e){if(typeof e=="string")return NIe(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)?NIe(e,t):void 0}}function NIe(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&arguments[1]!==void 0?arguments[1]:{},o=n.border,i=o===void 0?r.colors.lightShade:o,c=n.highlight,d=c===void 0?r.colors.primary:c;return"".concat(d," ").concat(i," ").concat(i," ").concat(i)},iIe=function(t){var r=t.euiTheme;return{euiLoadingSpinner:Q("flex-shrink:0;display:inline-block;border-radius:50%;border:",r.border.thick,";",Fd("border-color",lhe(t))," ",bn,"{animation:",HVt," 0.6s infinite linear;};label:euiLoadingSpinner;"),s:Q(Po(r.size[Q0.s],r.size[Q0.s])," border-width:",pr(r.border.width.thin,function(n){return n*1.5}),";;label:s;"),m:Q(Po(r.size[Q0.m],r.size[Q0.m])," border-width:",pr(r.border.width.thin,function(n){return n*1.5}),";;label:m;"),l:Q(Po(r.size[Q0.l],r.size[Q0.l]),";;label:l;"),xl:Q(Po(r.size[Q0.xl],r.size[Q0.xl]),";;label:xl;"),xxl:Q(Po(r.size[Q0.xxl],r.size[Q0.xxl]),";;label:xxl;")}};function bV(e){"@babel/helpers - typeof";return bV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},bV(e)}var VVt=["size","className","aria-label","color","style"];function uhe(){return uhe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function GVt(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}var _r=function(t){var r=t.size,n=r===void 0?"m":r,o=t.className,i=t["aria-label"],c=t.color,d=t.style,h=UVt(t,VVt),v=(0,lIe.default)("euiLoadingSpinner",o),w=vt(iIe),_=[w.euiLoadingSpinner,w[n]],I=ur(),R=c?sIe(sIe({},d),{},{borderColor:lhe(I,c)}):d,D=nIe();return l("span",uhe({className:v,css:_,style:R,role:"progressbar","aria-label":i||D},h))};_r.propTypes={className:Ug.default.string,"aria-label":Ug.default.string,"data-test-subj":Ug.default.string,css:Ug.default.any,size:Ug.default.any,color:Ug.default.shape({border:Ug.default.any,highlight:Ug.default.any})};var uIe=function(t){var r=t.euiTheme;return{euiButtonDisplayContent:Q(pe("height","100%")," ",pe("width","100%")," display:flex;justify-content:center;align-items:center;vertical-align:middle;gap:",r.size.s,";;label:euiButtonDisplayContent;")}};var JVt=["children","textProps","isLoading","isDisabled","iconType","iconSize","iconSide"];function vJ(){return vJ=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function KVt(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}var wV=function(t){var r=t.children,n=t.textProps,o=t.isLoading,i=o===void 0?!1:o,c=t.isDisabled,d=c===void 0?!1:c,h=t.iconType,v=t.iconSize,w=v===void 0?"m":v,_=t.iconSide,I=_===void 0?"left":_,R=XVt(t,JVt),D=vt(uIe),F=(0,cIe.useMemo)(function(){if(i){var q=d?{border:"currentcolor"}:void 0;return l(_r,{size:w,color:q})}if(h)return l(mr,{type:h,size:w,color:"inherit"})},[h,w,i,d]),A=typeof r=="string",N=n===!1,H=(A||n)&&!N;return l("span",vJ({css:D.euiButtonDisplayContent},R),I==="left"&&F,H?l("span",vJ({},n,{className:(0,pIe.default)("eui-textTruncate",n?.className)}),r):r,I==="right"&&F)};wV.propTypes={iconType:ii.default.oneOfType([ii.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,ii.default.string.isRequired,ii.default.elementType.isRequired]),iconSide:ii.default.oneOfType([ii.default.any.isRequired,ii.default.oneOf([void 0])]),isLoading:ii.default.bool,textProps:ii.default.oneOfType([ii.default.shape({className:ii.default.string,"aria-label":ii.default.string,"data-test-subj":ii.default.string,css:ii.default.any,ref:ii.default.any,"data-text":ii.default.string}).isRequired,ii.default.oneOf([!1])]),iconSize:ii.default.any,isDisabled:ii.default.bool,className:ii.default.string,"aria-label":ii.default.string,"data-test-subj":ii.default.string,css:ii.default.any};var IIe=T(SIe());function $d(e){var t=new IIe.default(e);return t.protocol!=="javascript:"}function OV(e){"@babel/helpers - typeof";return OV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},OV(e)}var u$t=["element","type","children","iconType","iconSide","iconSize","size","isDisabled","disabled","isLoading","isSelected","fullWidth","minWidth","contentProps","textProps","href","target","rel","style"];function EIe(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 Tx(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function h$t(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 Cx(e){var t=e.href,r=e.isDisabled,n=e.isLoading,o=!t||$d(t);return n||r||!o}var yJ=(0,PIe.forwardRef)(function(e,t){var r=e.element,n=r===void 0?"button":r,o=e.type,i=o===void 0?"button":o,c=e.children,d=e.iconType,h=e.iconSide,v=h===void 0?"left":h,w=e.iconSize,_=e.size,I=_===void 0?"m":_,R=e.isDisabled,D=e.disabled,F=e.isLoading,A=e.isSelected,N=e.fullWidth,H=e.minWidth,q=e.contentProps,Y=e.textProps,ee=e.href,ne=e.target,te=e.rel,de=e.style,fe=f$t(e,u$t),ye=Cx({href:ee,isDisabled:R||D,isLoading:F}),Ie=vt(sJ),ve=[Ie.euiButtonDisplay,Ie[I],N&&Ie.fullWidth,H==null&&Ie.defaultMinWidth,ye&&Ie.isDisabled],Oe=l(wV,fhe({isLoading:F,isDisabled:ye,iconType:d,iconSide:v,iconSize:w,textProps:Y},q),c),be=ye?"button":ee?"a":n,Te={};be==="button"&&(Te=Tx(Tx({},Te),{},{disabled:ye,"aria-pressed":A}));var Pe={};return ee&&!ye?(Pe.href=ee,Pe.rel=va({href:ee,target:ne,rel:te}),Pe.target=ne):Pe.type=i,l(be,Tx(Tx(Tx({css:ve,style:H?Tx(Tx({},de),{},{minInlineSize:H}):de,ref:t},Te),Pe),fe),Oe)});yJ.propTypes={href:an.default.string,onClick:an.default.func,element:an.default.oneOf(["a","button","span"]),children:an.default.node,size:an.default.any,isSelected:an.default.bool,fullWidth:an.default.bool,minWidth:an.default.oneOfType([an.default.any.isRequired,an.default.oneOf([!1])]),isLoading:an.default.bool,contentProps:an.default.shape({className:an.default.string,"aria-label":an.default.string,"data-test-subj":an.default.string,css:an.default.any}),style:an.default.any,type:an.default.any,iconType:an.default.oneOfType([an.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,an.default.string.isRequired,an.default.elementType.isRequired]),iconSide:an.default.oneOfType([an.default.any.isRequired,an.default.oneOf([void 0])]),textProps:an.default.oneOfType([an.default.shape({className:an.default.string,"aria-label":an.default.string,"data-test-subj":an.default.string,css:an.default.any,ref:an.default.any,"data-text":an.default.string}).isRequired,an.default.oneOf([!1])]),iconSize:an.default.any,isDisabled:an.default.bool,className:an.default.string,"aria-label":an.default.string,"data-test-subj":an.default.string,css:an.default.any,buttonRef:an.default.any};yJ.displayName="EuiButtonDisplay";var m$t=["className","buttonRef","size","color","fill"];function hhe(){return hhe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function g$t(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}var u3=function(t){var r=t.className,n=t.buttonRef,o=t.size,i=o===void 0?"m":o,c=t.color,d=c===void 0?"primary":c,h=t.fill,v=v$t(t,m$t),w=Cx({href:v.href,isDisabled:v.isDisabled||v.disabled,isLoading:v.isLoading}),_=h9({display:h?"fill":"base"})[w?"disabled":d],I=oJ(),R=(0,kIe.default)("euiButton",r),D=[_,I];return l(yJ,hhe({className:R,css:D,ref:n,size:i},v))};u3.propTypes={href:Zr.default.string,onClick:Zr.default.func,children:Zr.default.node,fill:Zr.default.bool,color:Zr.default.any,size:Zr.default.any,isDisabled:Zr.default.bool,className:Zr.default.string,"aria-label":Zr.default.string,"data-test-subj":Zr.default.string,css:Zr.default.any,buttonRef:Zr.default.any,element:Zr.default.oneOf(["a","button","span"]),isSelected:Zr.default.bool,fullWidth:Zr.default.bool,minWidth:Zr.default.oneOfType([Zr.default.any.isRequired,Zr.default.oneOf([!1])]),isLoading:Zr.default.bool,contentProps:Zr.default.shape({className:Zr.default.string,"aria-label":Zr.default.string,"data-test-subj":Zr.default.string,css:Zr.default.any}),style:Zr.default.any,type:Zr.default.any,iconType:Zr.default.oneOfType([Zr.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,Zr.default.string.isRequired,Zr.default.elementType.isRequired]),iconSide:Zr.default.oneOfType([Zr.default.any.isRequired,Zr.default.oneOf([void 0])]),textProps:Zr.default.oneOfType([Zr.default.shape({className:Zr.default.string,"aria-label":Zr.default.string,"data-test-subj":Zr.default.string,css:Zr.default.any,ref:Zr.default.any,"data-text":Zr.default.string}).isRequired,Zr.default.oneOf([!1])]),iconSize:Zr.default.any};var uBr=T(z()),vn=T(it()),wJ=T(At());var y$t={name:"1lywbid-flush",styles:"padding-inline:0;label:flush;"},jIe=function(t){var r=t.euiTheme,n=sJ(t);return{euiButtonEmpty:Q(n.euiButtonDisplay," ",Fd("padding","0 ".concat(r.size.s)),bn,"{transition-timing-function:ease-in;transition-duration:",r.animation.fast,";};label:euiButtonEmpty;"),isDisabled:n.isDisabled,xs:n.xs,s:n.s,m:n.m,flush:y$t,left:Q(pe("margin-right",r.size.s),";;label:left;"),right:Q(pe("margin-left",r.size.s),";;label:right;"),both:Q(";label:both;")}};function _V(e){"@babel/helpers - typeof";return _V=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_V(e)}var b$t=["children","className","iconType","iconSide","iconSize","color","size","flush","isDisabled","disabled","isLoading","href","target","rel","type","buttonRef","contentProps","textProps","isSelected"];function xV(){return xV=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function S$t(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}var cu=function(t){var r=t.children,n=t.className,o=t.iconType,i=t.iconSide,c=i===void 0?"left":i,d=t.iconSize,h=d===void 0?"m":d,v=t.color,w=v===void 0?"primary":v,_=t.size,I=_===void 0?"m":_,R=t.flush,D=t.isDisabled,F=t.disabled,A=t.isLoading,N=t.href,H=t.target,q=t.rel,Y=t.type,ee=Y===void 0?"button":Y,ne=t.buttonRef,te=t.contentProps,de=t.textProps,fe=t.isSelected,ye=_$t(t,b$t),Ie=Cx({isDisabled:D||F,href:N,isLoading:A}),ve=h9({display:"empty"}),Oe=vt(jIe),be=[Oe.euiButtonEmpty,Oe[I],ve[Ie?"disabled":w],R&&Oe.flush,R&&Oe[R],Ie&&Oe.isDisabled],Te=(0,wJ.default)("euiButtonEmpty",n),Pe=(0,wJ.default)("euiButtonEmpty__content",te?.className),Re=(0,wJ.default)("euiButtonEmpty__text",de&&de.className),Ae=l(wV,xV({isDisabled:Ie,isLoading:A,iconType:o,iconSide:c,iconSize:I==="xs"?"s":h,textProps:de===!1?!1:bJ(bJ({},de),{},{className:Re})},bJ(bJ({},te),{},{className:Pe})),r);if(N&&!Ie){var Ve=va({href:N,target:H,rel:q});return l("a",xV({className:Te,css:be,href:N,target:H,rel:Ve,ref:ne},ye),Ae)}return l("button",xV({disabled:Ie,className:Te,css:be,type:ee,ref:ne,"aria-pressed":fe},ye),Ae)};cu.propTypes={href:vn.default.string,onClick:vn.default.func,color:vn.default.any,size:vn.default.any,flush:vn.default.any,isDisabled:vn.default.bool,isLoading:vn.default.bool,isSelected:vn.default.bool,target:vn.default.string,rel:vn.default.string,type:vn.default.any,buttonRef:vn.default.any,contentProps:vn.default.shape({className:vn.default.string,"aria-label":vn.default.string,"data-test-subj":vn.default.string,css:vn.default.any}),iconType:vn.default.oneOfType([vn.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,vn.default.string.isRequired,vn.default.elementType.isRequired]),iconSide:vn.default.oneOfType([vn.default.any.isRequired,vn.default.oneOf([void 0])]),textProps:vn.default.oneOfType([vn.default.shape({className:vn.default.string,"aria-label":vn.default.string,"data-test-subj":vn.default.string,css:vn.default.any,ref:vn.default.any,"data-text":vn.default.string}).isRequired,vn.default.oneOf([!1])]),iconSize:vn.default.any,className:vn.default.string,"aria-label":vn.default.string,"data-test-subj":vn.default.string,css:vn.default.any};var IBr=T(z()),Gi=T(it()),LIe=T(At());function SV(e){"@babel/helpers - typeof";return SV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},SV(e)}function CIe(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 MIe(e){for(var t=1;tsvg{pointer-events:none;};label:euiButtonIcon;"),isDisabled:P$t,xs:Q(Po(r.xs.height)," border-radius:",r.xs.radius,";;label:xs;"),s:Q(Po(r.s.height)," border-radius:",r.s.radius,";;label:s;"),m:Q(Po(r.m.height)," border-radius:",r.m.radius,";;label:m;")}},DIe=function(t){return nJ.reduce(function(r,n){return MIe(MIe({},r),{},AIe({},n,Q("&:hover{background-color:",rJ(t,n).backgroundColor,";}")))},{})};var k$t=["className","iconType","iconSize","color","isDisabled","disabled","href","type","display","target","rel","size","buttonRef","isSelected","isLoading"];function OJ(){return OJ=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function T$t(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}var pc=function(t){var r=t.className,n=t.iconType,o=t.iconSize,i=o===void 0?"m":o,c=t.color,d=c===void 0?"primary":c,h=t.isDisabled,v=t.disabled,w=t.href,_=t.type,I=_===void 0?"button":_,R=t.display,D=R===void 0?"empty":R,F=t.target,A=t.rel,N=t.size,H=N===void 0?"xs":N,q=t.buttonRef,Y=t.isSelected,ee=t.isLoading,ne=j$t(t,k$t),te=Cx({isDisabled:h||v,href:w,isLoading:ee}),de=ne["aria-hidden"],fe=de==="true"||de===!0;!ne["aria-label"]&&!ne["aria-labelledby"]&&!fe&&console.warn(`EuiButtonIcon requires aria-label or aria-labelledby to be specified because icon-only + buttons are screen-reader-inaccessible without them.`);var ye=h9({display:D}),Ie=oJ(),ve=vt(DIe),Oe=vt(RIe),be=[Oe.euiButtonIcon,Oe[H],ye[te?"disabled":d],Ie,D==="empty"&&!te&&ve[d],te&&Oe.isDisabled],Te=(0,LIe.default)("euiButtonIcon",r),Pe;if(n&&!ee&&(Pe=l(mr,{className:"euiButtonIcon__icon",type:n,size:i,"aria-hidden":"true",color:"inherit"})),n&&ee){var Re=i==="original"?void 0:i,Ae=te?{border:"currentcolor"}:void 0;Pe=l(_r,{size:Re,color:Ae})}if(w&&!te){var Ve=va({href:w,target:F,rel:A});return l("a",OJ({css:be,tabIndex:fe?-1:void 0,className:Te,href:w,target:F,rel:Ve,ref:q},ne),Pe)}var Je;return l("button",OJ({css:be,tabIndex:fe?-1:void 0,disabled:te,className:Te,"aria-pressed":Y,type:I,ref:q},ne),Pe)};pc.propTypes={type:Gi.default.any,href:Gi.default.string,onClick:Gi.default.func,iconType:Gi.default.oneOfType([Gi.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,Gi.default.string.isRequired,Gi.default.elementType.isRequired]).isRequired,color:Gi.default.any,"aria-label":Gi.default.string,"aria-labelledby":Gi.default.string,isDisabled:Gi.default.bool,size:Gi.default.any,iconSize:Gi.default.any,isSelected:Gi.default.bool,display:Gi.default.any,isLoading:Gi.default.bool,className:Gi.default.string,"data-test-subj":Gi.default.string,css:Gi.default.any,buttonRef:Gi.default.any};var vhe=T(it()),Mx=T(z());function mhe(e,t){return R$t(e)||A$t(e,t)||M$t(e,t)||C$t()}function C$t(){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 M$t(e,t){if(e){if(typeof e=="string")return NIe(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)?NIe(e,t):void 0}}function NIe(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);re.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function IZt(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}var khe=function(t){var r=t.children,n=t.title,o=t.className,i=t.positionToolTip,c=t.popoverRef,d=t.calculatedPosition,h=SZt(t,_Zt),v=(0,S9.useRef)(),w=ur(),_=kJ(w),I=[_.euiToolTip,d&&_[d]],R=(0,S9.useCallback)(function(){requestAnimationFrame(function(){v.current&&i()})},[i]),D=function(N){c&&c(N)};(0,S9.useEffect)(function(){return document.body.classList.add("euiBody-hasPortalContent"),window.addEventListener("resize",R),function(){document.body.classList.remove("euiBody-hasPortalContent"),window.removeEventListener("resize",R)}},[R]);var F=(0,pEe.default)("euiToolTipPopover",o);return l("div",Phe({css:I,className:F,ref:D,"data-position":d},h),n&&l("div",{css:_.euiToolTip__title,className:"euiToolTip__title"},n),r)};khe.propTypes={className:t1.default.string,"aria-label":t1.default.string,"data-test-subj":t1.default.string,css:t1.default.any,positionToolTip:t1.default.func.isRequired,children:t1.default.node,title:t1.default.node,popoverRef:t1.default.func,calculatedPosition:t1.default.oneOf(["top","right","bottom","left"])};var TJ=T(z()),jJ=T(it()),The=T(At());var EZt=["onBlur","onFocus","onMouseOver","onMouseOut","id","className","children","display","isVisible"];function jhe(){return jhe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kZt(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}var CJ=(0,TJ.forwardRef)(function(e,t){var r=e.onBlur,n=e.onFocus,o=e.onMouseOver,i=e.onMouseOut,c=e.id,d=e.className,h=e.children,v=e.display,w=e.isVisible,_=PZt(e,EZt),I=cEe(),R=[I.euiToolTipAnchor,I[v]],D=(0,The.default)("euiToolTipAnchor",d);return l("span",jhe({ref:t,css:R},_,{className:D,onMouseOver:o,onMouseOut:i}),(0,TJ.cloneElement)(h,{onFocus:function(A){n(),h.props.onFocus&&h.props.onFocus(A)},onBlur:function(A){r(),h.props.onBlur&&h.props.onBlur(A)},"aria-describedby":w?(0,The.default)(c,h.props["aria-describedby"]):h.props["aria-describedby"]}))});CJ.propTypes={onBlur:jJ.default.func.isRequired,onFocus:jJ.default.func.isRequired,isVisible:jJ.default.bool.isRequired};CJ.displayName="EuiToolTipAnchor";var wzr=T(z()),dEe=T(it());var jZt=["position"];function Che(){return Che=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function CZt(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}var Mhe=function(t){var r=t.position,n=TZt(t,jZt),o=ur(),i=kJ(o),c=[i.euiToolTip__arrow,i.arrowPositions[r]];return l("div",Che({css:c},n))};Mhe.propTypes={position:dEe.default.oneOf(["top","right","bottom","left"]).isRequired};function CV(e){"@babel/helpers - typeof";return CV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},CV(e)}function fEe(e,t){for(var r=0;r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function FZt(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 BZt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function mEe(e,t){for(var r=0;r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function JZt(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}var LJ=function(t){var r=t.type,n=r===void 0?"questionInCircle":r,o=t["aria-label"],i=t.color,c=t.size,d=t.iconProps,h=t.position,v=h===void 0?"top":h,w=t.delay,_=w===void 0?"regular":w,I=GZt(t,UZt),R=wo("euiIconTip.defaultAriaLabel","Info");return l(ps,DJ({position:v,delay:_},I),l(mr,DJ({tabIndex:0,type:n,color:i,size:c,"aria-label":o||R},d)))};LJ.propTypes={anchorClassName:zo.default.string,anchorProps:zo.default.shape({className:zo.default.string,"aria-label":zo.default.string,"data-test-subj":zo.default.string,css:zo.default.any}),className:zo.default.string,content:zo.default.node,display:zo.default.any,title:zo.default.node,id:zo.default.string,repositionOnScroll:zo.default.bool,onMouseOut:zo.default.func,"aria-label":zo.default.string,"data-test-subj":zo.default.string,css:zo.default.any,color:zo.default.string,type:zo.default.oneOfType([zo.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,zo.default.string.isRequired,zo.default.elementType.isRequired]),size:zo.default.any,iconProps:zo.default.any,delay:zo.default.any,position:zo.default.any};var SWr=T(z()),qd=T(it()),jEe=T(At());var OEe=T(z()),r1=T(it());var XZt={name:"uacjc5-inherit",styles:"color:inherit;label:inherit;"},bEe=function(t){var r=t.euiTheme;return{euiTextColor:Q(";label:euiTextColor;"),default:Q("color:",r.colors.text,";;label:default;"),subdued:Q("color:",r.colors.subduedText,";;label:subdued;"),success:Q("color:",r.colors.successText,";;label:success;"),accent:Q("color:",r.colors.accentText,";;label:accent;"),danger:Q("color:",r.colors.dangerText,";;label:danger;"),warning:Q("color:",r.colors.warningText,";;label:warning;"),ghost:Q("color:",r.colors.ghost,"!important;;label:ghost;"),inherit:XZt,customColor:Q(";label:customColor;")}};function MV(e){"@babel/helpers - typeof";return MV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},MV(e)}var KZt=["children","color","component","cloneElement","style"];function wEe(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 Dx(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rqt(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}var nqt=["default","subdued","success","accent","danger","warning","ghost","inherit"],oqt=function(t){return nqt.includes(t)},Nhe=function(t){var r=t.children,n=t.color,o=n===void 0?"default":n,i=t.component,c=i===void 0?"span":i,d=t.cloneElement,h=d===void 0?!1:d,v=t.style,w=tqt(t,KZt),_=oqt(o),I=mt(bEe),R=[I.euiTextColor,_?I[o]:I.customColor],D=Dx(_?{}:{color:o},v),F=Dx({css:R,style:D},w);if((0,OEe.isValidElement)(r)&&h){var A=Dx(Dx({},r.props.style),D);return Sl(r,Dx(Dx({},F),{},{style:A}))}else return l(c,F,r)};Nhe.propTypes={className:r1.default.string,"aria-label":r1.default.string,"data-test-subj":r1.default.string,css:r1.default.any,component:r1.default.oneOf(["div","span","p"]),cloneElement:r1.default.bool,color:r1.default.oneOfType([r1.default.any.isRequired,r1.default.any.isRequired])};var _Ee=T(z()),d3=T(it());var Fhe={euiTextAlign:Q(";label:euiTextAlign;"),left:Q(Tn("left"),";;label:left;"),right:Q(Tn("right"),";;label:right;"),center:Q(Tn("center"),";;label:center;")};function AV(e){"@babel/helpers - typeof";return AV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},AV(e)}var iqt=["children","component","textAlign","cloneElement"];function xEe(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 aqt(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pqt(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}var Bhe=function(t){var r=t.children,n=t.component,o=n===void 0?"div":n,i=t.textAlign,c=i===void 0?"left":i,d=t.cloneElement,h=d===void 0?!1:d,v=cqt(t,iqt),w=[Fhe.euiTextAlign,Fhe[c]],_=aqt({css:w},v);return(0,_Ee.isValidElement)(r)&&h?Sl(r,_):l(o,_,r)};Bhe.propTypes={className:d3.default.string,"aria-label":d3.default.string,"data-test-subj":d3.default.string,css:d3.default.any,component:d3.default.oneOf(["div","span","p"]),cloneElement:d3.default.bool,textAlign:d3.default.any};var zhe=function(t){var r=t.euiTheme;return` +`])),t)},jJ=function(t){var r=t.euiTheme,n=t.colorMode,o="".concat(r.animation.slow," ease-out 0s forwards"),i=r.size.m,c=pr(i,function(h){return(h/2+1)*-1}),d=pr(i,function(h){return(h/2-1)*-1});return{euiToolTip:Q(cc(t)," border-radius:",r.border.radius.medium,";background-color:",iEe(r,n),";color:",r.colors.ghost,";z-index:",r.levels.toast,";",pe("max-width","256px")," overflow-wrap:break-word;padding:",r.size.s,";",yr(t,"s")," position:absolute;[class*='euiHorizontalRule']{background-color:",aEe(r,n),";};label:euiToolTip;"),s:Q(yr(t,"xs"),";;label:s;"),top:Q(bn,"{animation:",sEe("-".concat(r.size.base))," ",o,";};label:top;"),bottom:Q(bn,"{animation:",sEe(r.size.base)," ",o,";};label:bottom;"),left:Q(bn,"{animation:",lEe("-".concat(r.size.base))," ",o,";};label:left;"),right:Q(bn,"{animation:",lEe(r.size.base)," ",o,";};label:right;"),euiToolTip__arrow:Q("content:'';position:absolute;transform-origin:center;border-radius:",pr(r.border.radius.small,function(h){return h/2}),";background-color:",iEe(r,n),";",Po(i,i),";;label:euiToolTip__arrow;"),arrowPositions:{top:Q("transform:translateY(",c,") rotateZ(45deg);;label:top;"),bottom:Q("transform:translateY(",d,") rotateZ(45deg);;label:bottom;"),left:Q("transform:translateX(",c,") rotateZ(45deg);;label:left;"),right:Q("transform:translateX(",d,") rotateZ(45deg);;label:right;")},euiToolTip__title:Q("font-weight:",r.font.weight.bold,";",pe("border-bottom","solid ".concat(r.border.width.thin," ").concat(aEe(r,n)))," ",pe("padding-bottom",r.size.xs)," ",pe("margin-bottom",r.size.xs),";;label:euiToolTip__title;")}},wZt={name:"fzilnk-inlineBlock",styles:"display:inline-block;label:inlineBlock;"},OZt={name:"14aceuy-block",styles:"display:block;label:block;"},xZt={name:"1s3i3p5-euiToolTipAnchor",styles:"*[disabled]{pointer-events:none;};label:euiToolTipAnchor;"},cEe=function(){return{euiToolTipAnchor:xZt,block:OZt,inlineBlock:wZt}};var _Zt=["children","title","className","positionToolTip","popoverRef","calculatedPosition"];function Phe(){return Phe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function IZt(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}var khe=function(t){var r=t.children,n=t.title,o=t.className,i=t.positionToolTip,c=t.popoverRef,d=t.calculatedPosition,h=SZt(t,_Zt),v=(0,S9.useRef)(),w=ur(),_=jJ(w),I=[_.euiToolTip,d&&_[d]],R=(0,S9.useCallback)(function(){requestAnimationFrame(function(){v.current&&i()})},[i]),D=function(N){c&&c(N)};(0,S9.useEffect)(function(){return document.body.classList.add("euiBody-hasPortalContent"),window.addEventListener("resize",R),function(){document.body.classList.remove("euiBody-hasPortalContent"),window.removeEventListener("resize",R)}},[R]);var F=(0,pEe.default)("euiToolTipPopover",o);return l("div",Phe({css:I,className:F,ref:D,"data-position":d},h),n&&l("div",{css:_.euiToolTip__title,className:"euiToolTip__title"},n),r)};khe.propTypes={className:r1.default.string,"aria-label":r1.default.string,"data-test-subj":r1.default.string,css:r1.default.any,positionToolTip:r1.default.func.isRequired,children:r1.default.node,title:r1.default.node,popoverRef:r1.default.func,calculatedPosition:r1.default.oneOf(["top","right","bottom","left"])};var CJ=T(z()),TJ=T(it()),The=T(At());var EZt=["onBlur","onFocus","onMouseOver","onMouseOut","id","className","children","display","isVisible"];function jhe(){return jhe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kZt(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}var MJ=(0,CJ.forwardRef)(function(e,t){var r=e.onBlur,n=e.onFocus,o=e.onMouseOver,i=e.onMouseOut,c=e.id,d=e.className,h=e.children,v=e.display,w=e.isVisible,_=PZt(e,EZt),I=cEe(),R=[I.euiToolTipAnchor,I[v]],D=(0,The.default)("euiToolTipAnchor",d);return l("span",jhe({ref:t,css:R},_,{className:D,onMouseOver:o,onMouseOut:i}),(0,CJ.cloneElement)(h,{onFocus:function(A){n(),h.props.onFocus&&h.props.onFocus(A)},onBlur:function(A){r(),h.props.onBlur&&h.props.onBlur(A)},"aria-describedby":w?(0,The.default)(c,h.props["aria-describedby"]):h.props["aria-describedby"]}))});MJ.propTypes={onBlur:TJ.default.func.isRequired,onFocus:TJ.default.func.isRequired,isVisible:TJ.default.bool.isRequired};MJ.displayName="EuiToolTipAnchor";var bzr=T(z()),dEe=T(it());var jZt=["position"];function Che(){return Che=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function CZt(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}var Mhe=function(t){var r=t.position,n=TZt(t,jZt),o=ur(),i=jJ(o),c=[i.euiToolTip__arrow,i.arrowPositions[r]];return l("div",Che({css:c},n))};Mhe.propTypes={position:dEe.default.oneOf(["top","right","bottom","left"]).isRequired};function MV(e){"@babel/helpers - typeof";return MV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},MV(e)}function fEe(e,t){for(var r=0;r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function FZt(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 BZt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function mEe(e,t){for(var r=0;r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function JZt(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}var NJ=function(t){var r=t.type,n=r===void 0?"questionInCircle":r,o=t["aria-label"],i=t.color,c=t.size,d=t.iconProps,h=t.position,v=h===void 0?"top":h,w=t.delay,_=w===void 0?"regular":w,I=GZt(t,UZt),R=wo("euiIconTip.defaultAriaLabel","Info");return l(ps,LJ({position:v,delay:_},I),l(mr,LJ({tabIndex:0,type:n,color:i,size:c,"aria-label":o||R},d)))};NJ.propTypes={anchorClassName:zo.default.string,anchorProps:zo.default.shape({className:zo.default.string,"aria-label":zo.default.string,"data-test-subj":zo.default.string,css:zo.default.any}),className:zo.default.string,content:zo.default.node,display:zo.default.any,title:zo.default.node,id:zo.default.string,repositionOnScroll:zo.default.bool,onMouseOut:zo.default.func,"aria-label":zo.default.string,"data-test-subj":zo.default.string,css:zo.default.any,color:zo.default.string,type:zo.default.oneOfType([zo.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,zo.default.string.isRequired,zo.default.elementType.isRequired]),size:zo.default.any,iconProps:zo.default.any,delay:zo.default.any,position:zo.default.any};var _Wr=T(z()),qd=T(it()),jEe=T(At());var OEe=T(z()),n1=T(it());var XZt={name:"uacjc5-inherit",styles:"color:inherit;label:inherit;"},bEe=function(t){var r=t.euiTheme;return{euiTextColor:Q(";label:euiTextColor;"),default:Q("color:",r.colors.text,";;label:default;"),subdued:Q("color:",r.colors.subduedText,";;label:subdued;"),success:Q("color:",r.colors.successText,";;label:success;"),accent:Q("color:",r.colors.accentText,";;label:accent;"),danger:Q("color:",r.colors.dangerText,";;label:danger;"),warning:Q("color:",r.colors.warningText,";;label:warning;"),ghost:Q("color:",r.colors.ghost,"!important;;label:ghost;"),inherit:XZt,customColor:Q(";label:customColor;")}};function AV(e){"@babel/helpers - typeof";return AV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},AV(e)}var KZt=["children","color","component","cloneElement","style"];function wEe(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 Dx(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rqt(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}var nqt=["default","subdued","success","accent","danger","warning","ghost","inherit"],oqt=function(t){return nqt.includes(t)},Nhe=function(t){var r=t.children,n=t.color,o=n===void 0?"default":n,i=t.component,c=i===void 0?"span":i,d=t.cloneElement,h=d===void 0?!1:d,v=t.style,w=tqt(t,KZt),_=oqt(o),I=vt(bEe),R=[I.euiTextColor,_?I[o]:I.customColor],D=Dx(_?{}:{color:o},v),F=Dx({css:R,style:D},w);if((0,OEe.isValidElement)(r)&&h){var A=Dx(Dx({},r.props.style),D);return Sl(r,Dx(Dx({},F),{},{style:A}))}else return l(c,F,r)};Nhe.propTypes={className:n1.default.string,"aria-label":n1.default.string,"data-test-subj":n1.default.string,css:n1.default.any,component:n1.default.oneOf(["div","span","p"]),cloneElement:n1.default.bool,color:n1.default.oneOfType([n1.default.any.isRequired,n1.default.any.isRequired])};var _Ee=T(z()),d3=T(it());var Fhe={euiTextAlign:Q(";label:euiTextAlign;"),left:Q(Tn("left"),";;label:left;"),right:Q(Tn("right"),";;label:right;"),center:Q(Tn("center"),";;label:center;")};function RV(e){"@babel/helpers - typeof";return RV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},RV(e)}var iqt=["children","component","textAlign","cloneElement"];function xEe(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 aqt(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pqt(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}var Bhe=function(t){var r=t.children,n=t.component,o=n===void 0?"div":n,i=t.textAlign,c=i===void 0?"left":i,d=t.cloneElement,h=d===void 0?!1:d,v=cqt(t,iqt),w=[Fhe.euiTextAlign,Fhe[c]],_=aqt({css:w},v);return(0,_Ee.isValidElement)(r)&&h?Sl(r,_):l(o,_,r)};Bhe.propTypes={className:d3.default.string,"aria-label":d3.default.string,"data-test-subj":d3.default.string,css:d3.default.any,component:d3.default.oneOf(["div","span","p"]),cloneElement:d3.default.bool,textAlign:d3.default.any};var zhe=function(t){var r=t.euiTheme;return` font-weight: `.concat(r.font.weight.medium,`; `).concat(Tn("left"),` @@ -588,7 +588,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho &:target { color: darken(`).concat(t,`, 10%); } - `)};function RV(e){"@babel/helpers - typeof";return RV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},RV(e)}function IEe(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 EEe(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:"m",n=arguments.length>2?arguments[2]:void 0,o=t.euiTheme,i={xxxs:"xs",xxs:"s",xs:"m",s:"l",m:"xl",l:"xxl"};return EEe(EEe({},yr(t,i[r],n)),{},{fontWeight:o.font.weight[o.font.title.weight],color:o.colors.title})},vqt={name:"1x2qsb1-uppercase",styles:"text-transform:uppercase;label:uppercase;"},PEe=function(t){return{euiTitle:Q(K0()," &+&{",pe("margin-top",t.euiTheme.size.l),";};label:euiTitle;"),uppercase:vqt,xxxs:Q(To(t,"xxxs"),";;label:xxxs;"),xxs:Q(To(t,"xxs"),";;label:xxs;"),xs:Q(To(t,"xs"),";;label:xs;"),s:Q(To(t,"s"),";;label:s;"),m:Q(To(t,"m"),";;label:m;"),l:Q(To(t,"l"),";;label:l;")}};var gqt="max(64ch, 75%)",yqt=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return{color:r?"inherit":t.colors.text,fontWeight:t.font.weight.regular}},NJ=function(t,r){var n=yr(t,"m",r),o=n.fontSize,i=n.lineHeight,c=t.euiTheme,d=r.unit,h=r.customScale,v=d==="em"?"".concat(i,"em"):i,w={h1:To(t,"l",r),h2:To(t,"m",r),h3:To(t,"s",r),h4:To(t,"xs",r),h5:To(t,"xxs",r),h6:To(t,"xxxs",r)},_=h==="xxxs"?"xxs":h||"m",I=c.size[_],R=pr(I,function(A){return A*2}),D=I,F=pr(o,function(A){return A/4});return` + `)};function DV(e){"@babel/helpers - typeof";return DV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},DV(e)}function IEe(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 EEe(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:"m",n=arguments.length>2?arguments[2]:void 0,o=t.euiTheme,i={xxxs:"xs",xxs:"s",xs:"m",s:"l",m:"xl",l:"xxl"};return EEe(EEe({},yr(t,i[r],n)),{},{fontWeight:o.font.weight[o.font.title.weight],color:o.colors.title})},vqt={name:"1x2qsb1-uppercase",styles:"text-transform:uppercase;label:uppercase;"},PEe=function(t){return{euiTitle:Q(Y0()," &+&{",pe("margin-top",t.euiTheme.size.l),";};label:euiTitle;"),uppercase:vqt,xxxs:Q(To(t,"xxxs"),";;label:xxxs;"),xxs:Q(To(t,"xxs"),";;label:xxs;"),xs:Q(To(t,"xs"),";;label:xs;"),s:Q(To(t,"s"),";;label:s;"),m:Q(To(t,"m"),";;label:m;"),l:Q(To(t,"l"),";;label:l;")}};var gqt="max(64ch, 75%)",yqt=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return{color:r?"inherit":t.colors.text,fontWeight:t.font.weight.regular}},FJ=function(t,r){var n=yr(t,"m",r),o=n.fontSize,i=n.lineHeight,c=t.euiTheme,d=r.unit,h=r.customScale,v=d==="em"?"".concat(i,"em"):i,w={h1:To(t,"l",r),h2:To(t,"m",r),h3:To(t,"s",r),h4:To(t,"xs",r),h5:To(t,"xxs",r),h6:To(t,"xxxs",r)},_=h==="xxxs"?"xxs":h||"m",I=c.size[_],R=pr(I,function(A){return A*2}),D=I,F=pr(o,function(A){return A/4});return` font-size: `.concat(o,`; line-height: `).concat(i,`; @@ -742,8 +742,8 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `).concat(pe("left",0),` `).concat(pe("width","100%"),` }`):"",` - `)},kEe=function(t){var r=t.euiTheme;return{euiText:Q(yqt(r,!0),"clear:both;a:not([class]){",zhe(t),";}ul{list-style:disc;}ol{list-style:decimal;}blockquote{border-inline-start-color:",r.border.color,";border-inline-start-style:solid;}blockquote:not(.euiMarkdownFormat__blockquote){color:",r.colors.subduedText,";}h1{",To(t,"l"),";}h2{",To(t,"m"),";}h3{",To(t,"s"),";}h4,dt{",To(t,"xs"),";}h5{",To(t,"xxs"),";}h6{",To(t,"xxxs")," text-transform:uppercase;}h1,h2,h3,h4,h5,h6,dt{color:inherit;}pre:not(.euiCodeBlock__pre){white-space:pre-wrap;background:",s3(t,"subdued"),";color:",r.colors.text,";}pre:not(.euiCodeBlock__pre),pre:not(.euiCodeBlock__pre) code{display:block;}>:last-child{",pe("margin-bottom","0 !important"),";}kbd{position:relative;display:inline-block;",pe("padding-vertical",r.size.xxs)," ",pe("padding-horizontal",r.size.xs)," line-height:1;border:",r.border.width.thin," solid ",r.colors.text,";border-radius:",pr(r.border.radius.small,function(n){return n/2}),";};label:euiText;"),constrainedWidth:Q(pe("max-width",gqt),";;label:constrainedWidth;"),m:Q(NJ(t,{customScale:"m"}),";;label:m;"),s:Q(NJ(t,{customScale:"s"}),";;label:s;"),xs:Q(NJ(t,{customScale:"xs"}),";;label:xs;"),relative:Q(NJ(t,{unit:"em"}),";;label:relative;")}};var bqt=["component","size","color","grow","textAlign","children","className"];function Whe(){return Whe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Oqt(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}var Xt=function(t){var r=t.component,n=r===void 0?"div":r,o=t.size,i=o===void 0?"m":o,c=t.color,d=t.grow,h=d===void 0?!0:d,v=t.textAlign,w=t.children,_=t.className,I=wqt(t,bqt),R=mt(kEe),D=[R.euiText,h?void 0:R.constrainedWidth,R[i]],F=(0,jEe.default)("euiText",_),A=n,N=l(A,Whe({css:D,className:F},I),w);return c&&(N=l(Nhe,{component:n,color:c,className:F,cloneElement:!0},N)),v&&(N=l(Bhe,{component:n,textAlign:v,className:F,cloneElement:!0},N)),N};Xt.propTypes={className:qd.default.string,"aria-label":qd.default.string,"data-test-subj":qd.default.string,css:qd.default.any,component:qd.default.oneOf(["div","span","p"]),color:qd.default.oneOfType([qd.default.any.isRequired,qd.default.any.isRequired]),textAlign:qd.default.any,size:qd.default.any,grow:qd.default.bool};var BJ=T(z()),Ud;typeof window<"u"?Ud=window:typeof self<"u"?Ud=self:Ud=global;var $he=null,Zhe=null,TEe=20,Hhe=Ud.clearTimeout,CEe=Ud.setTimeout,Vhe=Ud.cancelAnimationFrame||Ud.mozCancelAnimationFrame||Ud.webkitCancelAnimationFrame,MEe=Ud.requestAnimationFrame||Ud.mozRequestAnimationFrame||Ud.webkitRequestAnimationFrame;Vhe==null||MEe==null?($he=Hhe,Zhe=function(t){return CEe(t,TEe)}):($he=function([t,r]){Vhe(t),Hhe(r)},Zhe=function(t){let r=MEe(function(){Hhe(n),t()}),n=CEe(function(){Vhe(r),t()},TEe);return[r,n]});function xqt(e){let t,r,n,o,i,c,d,h=typeof document<"u"&&document.attachEvent;if(!h){c=function(N){let H=N.__resizeTriggers__,q=H.firstElementChild,Y=H.lastElementChild,ee=q.firstElementChild;Y.scrollLeft=Y.scrollWidth,Y.scrollTop=Y.scrollHeight,ee.style.width=q.offsetWidth+1+"px",ee.style.height=q.offsetHeight+1+"px",q.scrollLeft=q.scrollWidth,q.scrollTop=q.scrollHeight},i=function(N){return N.offsetWidth!==N.__resizeLast__.width||N.offsetHeight!==N.__resizeLast__.height},d=function(N){if(N.target.className&&typeof N.target.className.indexOf=="function"&&N.target.className.indexOf("contract-trigger")<0&&N.target.className.indexOf("expand-trigger")<0)return;let H=this;c(this),this.__resizeRAF__&&$he(this.__resizeRAF__),this.__resizeRAF__=Zhe(function(){i(H)&&(H.__resizeLast__.width=H.offsetWidth,H.__resizeLast__.height=H.offsetHeight,H.__resizeListeners__.forEach(function(ee){ee.call(H,N)}))})};let I=!1,R="";n="animationstart";let D="Webkit Moz O ms".split(" "),F="webkitAnimationStart animationstart oAnimationStart MSAnimationStart".split(" "),A="";{let N=document.createElement("fakeelement");if(N.style.animationName!==void 0&&(I=!0),I===!1){for(let H=0;H div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',D=I.head||I.getElementsByTagName("head")[0],F=I.createElement("style");F.id="detectElementResize",F.type="text/css",e!=null&&F.setAttribute("nonce",e),F.styleSheet?F.styleSheet.cssText=R:F.appendChild(I.createTextNode(R)),D.appendChild(F)}};return{addResizeListener:function(I,R){if(h)I.attachEvent("onresize",R);else{if(!I.__resizeTriggers__){let D=I.ownerDocument,F=Ud.getComputedStyle(I);F&&F.position==="static"&&(I.style.position="relative"),v(D),I.__resizeLast__={},I.__resizeListeners__=[],(I.__resizeTriggers__=D.createElement("div")).className="resize-triggers";let A=D.createElement("div");A.className="expand-trigger",A.appendChild(D.createElement("div"));let N=D.createElement("div");N.className="contract-trigger",I.__resizeTriggers__.appendChild(A),I.__resizeTriggers__.appendChild(N),I.appendChild(I.__resizeTriggers__),c(I),I.addEventListener("scroll",d,!0),n&&(I.__resizeTriggers__.__animationListener__=function(q){q.animationName===r&&c(I)},I.__resizeTriggers__.addEventListener(n,I.__resizeTriggers__.__animationListener__))}I.__resizeListeners__.push(R)}},removeResizeListener:function(I,R){if(h)I.detachEvent("onresize",R);else if(I.__resizeListeners__.splice(I.__resizeListeners__.indexOf(R),1),!I.__resizeListeners__.length){I.removeEventListener("scroll",d,!0),I.__resizeTriggers__.__animationListener__&&(I.__resizeTriggers__.removeEventListener(n,I.__resizeTriggers__.__animationListener__),I.__resizeTriggers__.__animationListener__=null);try{I.__resizeTriggers__=!I.removeChild(I.__resizeTriggers__)}catch{}}}}}var FJ=class extends BJ.Component{constructor(...t){super(...t),this.state={height:this.props.defaultHeight||0,scaledHeight:this.props.defaultHeight||0,scaledWidth:this.props.defaultWidth||0,width:this.props.defaultWidth||0},this._autoSizer=null,this._detectElementResize=null,this._parentNode=null,this._resizeObserver=null,this._timeoutId=null,this._onResize=()=>{this._timeoutId=null;let{disableHeight:r,disableWidth:n,onResize:o}=this.props;if(this._parentNode){let i=window.getComputedStyle(this._parentNode)||{},c=parseFloat(i.paddingLeft||"0"),d=parseFloat(i.paddingRight||"0"),h=parseFloat(i.paddingTop||"0"),v=parseFloat(i.paddingBottom||"0"),w=this._parentNode.getBoundingClientRect(),_=w.height-h-v,I=w.width-c-d,R=this._parentNode.offsetHeight-h-v,D=this._parentNode.offsetWidth-c-d;(!r&&(this.state.height!==R||this.state.scaledHeight!==_)||!n&&(this.state.width!==D||this.state.scaledWidth!==I))&&(this.setState({height:R,width:D,scaledHeight:_,scaledWidth:I}),typeof o=="function"&&o({height:R,scaledHeight:_,scaledWidth:I,width:D}))}},this._setRef=r=>{this._autoSizer=r}}componentDidMount(){let{nonce:t}=this.props,r=this._autoSizer?this._autoSizer.parentNode:null;if(r!=null&&r.ownerDocument&&r.ownerDocument.defaultView&&r instanceof r.ownerDocument.defaultView.HTMLElement){this._parentNode=r;let n=r.ownerDocument.defaultView.ResizeObserver;n!=null?(this._resizeObserver=new n(()=>{this._timeoutId=setTimeout(this._onResize,0)}),this._resizeObserver.observe(r)):(this._detectElementResize=xqt(t),this._detectElementResize.addResizeListener(r,this._onResize)),this._onResize()}}componentWillUnmount(){this._parentNode&&(this._detectElementResize&&this._detectElementResize.removeResizeListener(this._parentNode,this._onResize),this._timeoutId!==null&&clearTimeout(this._timeoutId),this._resizeObserver&&this._resizeObserver.disconnect())}render(){let{children:t,defaultHeight:r,defaultWidth:n,disableHeight:o=!1,disableWidth:i=!1,doNotBailOutOnEmptyChildren:c=!1,nonce:d,onResize:h,style:v={},tagName:w="div",..._}=this.props,{height:I,scaledHeight:R,scaledWidth:D,width:F}=this.state,A={overflow:"visible"},N={},H=!1;return o||(I===0&&(H=!0),A.height=0,N.height=I,N.scaledHeight=R),i||(F===0&&(H=!0),A.width=0,N.width=F,N.scaledWidth=D),c&&(H=!1),(0,BJ.createElement)(w,{ref:this._setRef,style:{...A,...v},..._},!H&&t(N))}};function E9(e){"@babel/helpers - typeof";return E9=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},E9(e)}function AEe(e,t){for(var r=0;r0){if(!/^[\s,.0-9]*$/.test(t))return null;var n=t.trim().split(",").filter(function(o){return o!==""}).map(Number);r=n.length>2&&n.length<5?n:Cqt}else r=t;return r},DEe=function(t){var r=t;return typeof t=="string"&&(r=Jhe(t)),r?Ghe(r)==="object"?bo.valid(r,"rgb")||bo.valid(r,"rgba"):bo.valid(t,"hex"):!1};function DV(e){"@babel/helpers - typeof";return DV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},DV(e)}function Mqt(e){return Lqt(e)||Dqt(e)||Rqt(e)||Aqt()}function Aqt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Rqt(e,t){if(e){if(typeof e=="string")return Xhe(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)?Xhe(e,t):void 0}}function Dqt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Lqt(e){if(Array.isArray(e))return Xhe(e)}function Xhe(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r:last-child{",pe("margin-bottom","0 !important"),";}kbd{position:relative;display:inline-block;",pe("padding-vertical",r.size.xxs)," ",pe("padding-horizontal",r.size.xs)," line-height:1;border:",r.border.width.thin," solid ",r.colors.text,";border-radius:",pr(r.border.radius.small,function(n){return n/2}),";};label:euiText;"),constrainedWidth:Q(pe("max-width",gqt),";;label:constrainedWidth;"),m:Q(FJ(t,{customScale:"m"}),";;label:m;"),s:Q(FJ(t,{customScale:"s"}),";;label:s;"),xs:Q(FJ(t,{customScale:"xs"}),";;label:xs;"),relative:Q(FJ(t,{unit:"em"}),";;label:relative;")}};var bqt=["component","size","color","grow","textAlign","children","className"];function Whe(){return Whe=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Oqt(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}var Xt=function(t){var r=t.component,n=r===void 0?"div":r,o=t.size,i=o===void 0?"m":o,c=t.color,d=t.grow,h=d===void 0?!0:d,v=t.textAlign,w=t.children,_=t.className,I=wqt(t,bqt),R=vt(kEe),D=[R.euiText,h?void 0:R.constrainedWidth,R[i]],F=(0,jEe.default)("euiText",_),A=n,N=l(A,Whe({css:D,className:F},I),w);return c&&(N=l(Nhe,{component:n,color:c,className:F,cloneElement:!0},N)),v&&(N=l(Bhe,{component:n,textAlign:v,className:F,cloneElement:!0},N)),N};Xt.propTypes={className:qd.default.string,"aria-label":qd.default.string,"data-test-subj":qd.default.string,css:qd.default.any,component:qd.default.oneOf(["div","span","p"]),color:qd.default.oneOfType([qd.default.any.isRequired,qd.default.any.isRequired]),textAlign:qd.default.any,size:qd.default.any,grow:qd.default.bool};var zJ=T(z()),Ud;typeof window<"u"?Ud=window:typeof self<"u"?Ud=self:Ud=global;var $he=null,Zhe=null,TEe=20,Hhe=Ud.clearTimeout,CEe=Ud.setTimeout,Vhe=Ud.cancelAnimationFrame||Ud.mozCancelAnimationFrame||Ud.webkitCancelAnimationFrame,MEe=Ud.requestAnimationFrame||Ud.mozRequestAnimationFrame||Ud.webkitRequestAnimationFrame;Vhe==null||MEe==null?($he=Hhe,Zhe=function(t){return CEe(t,TEe)}):($he=function([t,r]){Vhe(t),Hhe(r)},Zhe=function(t){let r=MEe(function(){Hhe(n),t()}),n=CEe(function(){Vhe(r),t()},TEe);return[r,n]});function xqt(e){let t,r,n,o,i,c,d,h=typeof document<"u"&&document.attachEvent;if(!h){c=function(N){let H=N.__resizeTriggers__,q=H.firstElementChild,Y=H.lastElementChild,ee=q.firstElementChild;Y.scrollLeft=Y.scrollWidth,Y.scrollTop=Y.scrollHeight,ee.style.width=q.offsetWidth+1+"px",ee.style.height=q.offsetHeight+1+"px",q.scrollLeft=q.scrollWidth,q.scrollTop=q.scrollHeight},i=function(N){return N.offsetWidth!==N.__resizeLast__.width||N.offsetHeight!==N.__resizeLast__.height},d=function(N){if(N.target.className&&typeof N.target.className.indexOf=="function"&&N.target.className.indexOf("contract-trigger")<0&&N.target.className.indexOf("expand-trigger")<0)return;let H=this;c(this),this.__resizeRAF__&&$he(this.__resizeRAF__),this.__resizeRAF__=Zhe(function(){i(H)&&(H.__resizeLast__.width=H.offsetWidth,H.__resizeLast__.height=H.offsetHeight,H.__resizeListeners__.forEach(function(ee){ee.call(H,N)}))})};let I=!1,R="";n="animationstart";let D="Webkit Moz O ms".split(" "),F="webkitAnimationStart animationstart oAnimationStart MSAnimationStart".split(" "),A="";{let N=document.createElement("fakeelement");if(N.style.animationName!==void 0&&(I=!0),I===!1){for(let H=0;H div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',D=I.head||I.getElementsByTagName("head")[0],F=I.createElement("style");F.id="detectElementResize",F.type="text/css",e!=null&&F.setAttribute("nonce",e),F.styleSheet?F.styleSheet.cssText=R:F.appendChild(I.createTextNode(R)),D.appendChild(F)}};return{addResizeListener:function(I,R){if(h)I.attachEvent("onresize",R);else{if(!I.__resizeTriggers__){let D=I.ownerDocument,F=Ud.getComputedStyle(I);F&&F.position==="static"&&(I.style.position="relative"),v(D),I.__resizeLast__={},I.__resizeListeners__=[],(I.__resizeTriggers__=D.createElement("div")).className="resize-triggers";let A=D.createElement("div");A.className="expand-trigger",A.appendChild(D.createElement("div"));let N=D.createElement("div");N.className="contract-trigger",I.__resizeTriggers__.appendChild(A),I.__resizeTriggers__.appendChild(N),I.appendChild(I.__resizeTriggers__),c(I),I.addEventListener("scroll",d,!0),n&&(I.__resizeTriggers__.__animationListener__=function(q){q.animationName===r&&c(I)},I.__resizeTriggers__.addEventListener(n,I.__resizeTriggers__.__animationListener__))}I.__resizeListeners__.push(R)}},removeResizeListener:function(I,R){if(h)I.detachEvent("onresize",R);else if(I.__resizeListeners__.splice(I.__resizeListeners__.indexOf(R),1),!I.__resizeListeners__.length){I.removeEventListener("scroll",d,!0),I.__resizeTriggers__.__animationListener__&&(I.__resizeTriggers__.removeEventListener(n,I.__resizeTriggers__.__animationListener__),I.__resizeTriggers__.__animationListener__=null);try{I.__resizeTriggers__=!I.removeChild(I.__resizeTriggers__)}catch{}}}}}var BJ=class extends zJ.Component{constructor(...t){super(...t),this.state={height:this.props.defaultHeight||0,scaledHeight:this.props.defaultHeight||0,scaledWidth:this.props.defaultWidth||0,width:this.props.defaultWidth||0},this._autoSizer=null,this._detectElementResize=null,this._parentNode=null,this._resizeObserver=null,this._timeoutId=null,this._onResize=()=>{this._timeoutId=null;let{disableHeight:r,disableWidth:n,onResize:o}=this.props;if(this._parentNode){let i=window.getComputedStyle(this._parentNode)||{},c=parseFloat(i.paddingLeft||"0"),d=parseFloat(i.paddingRight||"0"),h=parseFloat(i.paddingTop||"0"),v=parseFloat(i.paddingBottom||"0"),w=this._parentNode.getBoundingClientRect(),_=w.height-h-v,I=w.width-c-d,R=this._parentNode.offsetHeight-h-v,D=this._parentNode.offsetWidth-c-d;(!r&&(this.state.height!==R||this.state.scaledHeight!==_)||!n&&(this.state.width!==D||this.state.scaledWidth!==I))&&(this.setState({height:R,width:D,scaledHeight:_,scaledWidth:I}),typeof o=="function"&&o({height:R,scaledHeight:_,scaledWidth:I,width:D}))}},this._setRef=r=>{this._autoSizer=r}}componentDidMount(){let{nonce:t}=this.props,r=this._autoSizer?this._autoSizer.parentNode:null;if(r!=null&&r.ownerDocument&&r.ownerDocument.defaultView&&r instanceof r.ownerDocument.defaultView.HTMLElement){this._parentNode=r;let n=r.ownerDocument.defaultView.ResizeObserver;n!=null?(this._resizeObserver=new n(()=>{this._timeoutId=setTimeout(this._onResize,0)}),this._resizeObserver.observe(r)):(this._detectElementResize=xqt(t),this._detectElementResize.addResizeListener(r,this._onResize)),this._onResize()}}componentWillUnmount(){this._parentNode&&(this._detectElementResize&&this._detectElementResize.removeResizeListener(this._parentNode,this._onResize),this._timeoutId!==null&&clearTimeout(this._timeoutId),this._resizeObserver&&this._resizeObserver.disconnect())}render(){let{children:t,defaultHeight:r,defaultWidth:n,disableHeight:o=!1,disableWidth:i=!1,doNotBailOutOnEmptyChildren:c=!1,nonce:d,onResize:h,style:v={},tagName:w="div",..._}=this.props,{height:I,scaledHeight:R,scaledWidth:D,width:F}=this.state,A={overflow:"visible"},N={},H=!1;return o||(I===0&&(H=!0),A.height=0,N.height=I,N.scaledHeight=R),i||(F===0&&(H=!0),A.width=0,N.width=F,N.scaledWidth=D),c&&(H=!1),(0,zJ.createElement)(w,{ref:this._setRef,style:{...A,...v},..._},!H&&t(N))}};function E9(e){"@babel/helpers - typeof";return E9=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},E9(e)}function AEe(e,t){for(var r=0;r0){if(!/^[\s,.0-9]*$/.test(t))return null;var n=t.trim().split(",").filter(function(o){return o!==""}).map(Number);r=n.length>2&&n.length<5?n:Cqt}else r=t;return r},DEe=function(t){var r=t;return typeof t=="string"&&(r=Jhe(t)),r?Ghe(r)==="object"?bo.valid(r,"rgb")||bo.valid(r,"rgba"):bo.valid(t,"hex"):!1};function LV(e){"@babel/helpers - typeof";return LV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},LV(e)}function Mqt(e){return Lqt(e)||Dqt(e)||Rqt(e)||Aqt()}function Aqt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Rqt(e,t){if(e){if(typeof e=="string")return Xhe(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)?Xhe(e,t):void 0}}function Dqt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Lqt(e){if(Array.isArray(e))return Xhe(e)}function Xhe(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);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Yqt(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}var HEe=["default","hollow","primary","success","accent","warning","danger"],Il=function(t){var r=t.children,n=t.color,o=n===void 0?"default":n,i=t.iconType,c=t.iconSide,d=c===void 0?"left":c,h=t.className,v=t.isDisabled,w=t.onClick,_=t.iconOnClick,I=t.onClickAriaLabel,R=t.iconOnClickAriaLabel,D=t.closeButtonProps,F=t.href,A=t.rel,N=t.target,H=t.style,q=Kqt(t,Wqt),Y=!F||$d(F),ee=v||!Y,ne=HEe.includes(o),te=ur(),de=(0,VEe.useMemo)(function(){if(ee||ne)return H;try{var Je=Khe(te,o),vt=FEe(Je,o);return vte.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Yqt(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}var HEe=["default","hollow","primary","success","accent","warning","danger"],Il=function(t){var r=t.children,n=t.color,o=n===void 0?"default":n,i=t.iconType,c=t.iconSide,d=c===void 0?"left":c,h=t.className,v=t.isDisabled,w=t.onClick,_=t.iconOnClick,I=t.onClickAriaLabel,R=t.iconOnClickAriaLabel,D=t.closeButtonProps,F=t.href,A=t.rel,N=t.target,H=t.style,q=Kqt(t,Wqt),Y=!F||$d(F),ee=v||!Y,ne=HEe.includes(o),te=ur(),de=(0,VEe.useMemo)(function(){if(ee||ne)return H;try{var Je=Khe(te,o),pt=FEe(Je,o);return pt=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function oUt(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}var VJ=function(t){var r=t.className,n=t.label,o=t.color,i=o===void 0?"hollow":o,c=t.tooltipContent,d=t.tooltipPosition,h=d===void 0?"top":d,v=t.anchorProps,w=t.title,_=t.iconType,I=t.onClick,R=t.onClickAriaLabel,D=t.href,F=t.rel,A=t.target,N=t.size,H=N===void 0?"m":N,q=t.alignment,Y=q===void 0?"baseline":q,ee=nUt(t,rUt),ne=typeof n=="string"&&n.length===1,te=_||ne,de=(0,ZEe.default)("euiBetaBadge",r),fe=mt($Ee),ye=[fe.euiBetaBadge,fe[i],fe[H],fe[Y],te?fe.badgeSizes.circle[H]:fe.badgeSizes.default[H]],Ie;_&&(Ie=l(mr,{css:fe.euiBetaBadge__icon,className:"euiBetaBadge__icon",type:_,size:H==="m"?"m":"s","aria-hidden":"true",color:"inherit"}));var he=D?"a":"button",be={};D&&(be.href=D,be.target=A,be.rel=va({href:D,target:A,rel:F})),I&&(be.onClick=I);var Se;if(I||D)return Se=l(he,NV({"aria-label":R,css:ye,className:de,title:typeof n=="string"?n:w},be,ee),Ie||n),c?l(ps,{position:h,content:c,title:w||n,anchorProps:v},Se):l("span",v,Se);if(c)return l(ps,{position:h,content:c,title:w||n,anchorProps:v},l("span",NV({tabIndex:0,css:ye,className:de},ee),Ie||n));var Te=w||n;return Te&&typeof Te!="string"&&console.warn("Only string titles are permitted on badges that do not use tooltips. Found: ".concat(eme(Te))),l("span",v,l("span",NV({className:de,title:Te,css:ye},ee),Ie||n))};VJ.propTypes={className:wn.default.string,"aria-label":wn.default.string,"data-test-subj":wn.default.string,css:wn.default.any,onClick:wn.default.func,onClickAriaLabel:wn.default.any,href:wn.default.string,target:wn.default.string,rel:wn.default.string,iconType:wn.default.oneOfType([wn.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,wn.default.string.isRequired,wn.default.elementType.isRequired]),label:wn.default.oneOfType([wn.default.node.isRequired,wn.default.oneOfType([wn.default.node.isRequired,wn.default.string.isRequired]).isRequired]).isRequired,tooltipContent:wn.default.oneOfType([wn.default.node,wn.default.oneOfType([wn.default.node,wn.default.node.isRequired])]),tooltipPosition:wn.default.oneOf(["top","right","bottom","left"]),anchorProps:wn.default.shape({className:wn.default.string,"aria-label":wn.default.string,"data-test-subj":wn.default.string,css:wn.default.any}),title:wn.default.oneOfType([wn.default.string,wn.default.oneOfType([wn.default.string.isRequired,wn.default.string])]),color:wn.default.any,size:wn.default.any,alignment:wn.default.any};var GEe=T(z()),Gg=T(it()),ome=T(At());var $J=T(z()),rme=T(it());var iUt=["target","external"];function tme(){return tme=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function sUt(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}var lUt=function(t){var r=t.euiTheme;return bx("margin-left",r.size.xs)},nme=function(t){var r=t.target,n=t.external,o=aUt(t,iUt),i=mt(lUt),c=r==="_blank"&&n!==!1||n===!0;return l($J.default.Fragment,null,c&&l($J.default.Fragment,null,l(mr,tme({css:i,size:"s",type:"popout",role:"presentation"},o)),r==="_blank"?l(ko,null,l("span",null,l(Zt,{token:"euiExternalLinkIcon.newTarget.screenReaderOnlyText",default:"(external, opens in a new tab or window)"}))):l($J.default.Fragment,null,l(ko,null,l("span",null,l(Zt,{token:"euiExternalLinkIcon.externalTarget.screenReaderOnlyText",default:"(external)"}))))))};nme.propTypes={target:rme.default.any,external:rme.default.bool};function FV(e){"@babel/helpers - typeof";return FV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},FV(e)}var uUt=["children","color","className","href","external","target","rel","type","onClick","disabled"];function ZJ(){return ZJ=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hUt(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}var Jg=(0,GEe.forwardRef)(function(e,t){var r=e.children,n=e.color,o=n===void 0?"primary":n,i=e.className,c=e.href,d=e.external,h=e.target,v=e.rel,w=e.type,_=w===void 0?"button":w,I=e.onClick,R=e.disabled,D=fUt(e,uUt),F=mt(SEe),A=[F.euiLink],N=!c||$d(c),H=R||!N;if(c===void 0||!N){var q=UEe({className:(0,ome.default)("euiLink",i),css:[A,H?[F.disabled]:F[o]],type:_,onClick:I,disabled:H},D);return l("button",ZJ({ref:t},q),r)}var Y=va({href:c,target:h,rel:v}),ee=UEe({className:(0,ome.default)("euiLink",i),css:[A,F[o]],href:c,target:h,rel:Y,onClick:I},D);return l("a",ZJ({ref:t},ee),r,l(nme,{external:d,target:h}))});Jg.propTypes={className:Gg.default.string,"aria-label":Gg.default.string,"data-test-subj":Gg.default.string,css:Gg.default.any,type:Gg.default.oneOf(["button","reset","submit"]),color:Gg.default.any,onClick:Gg.default.func,external:Gg.default.bool};Jg.displayName="EuiLink";var Tl=T(z()),up=T(it());var JPe=T(At());var gPe=T(z()),Xo=T(it());var pu=function(){return pu=Object.assign||function(t){for(var r,n=1,o=arguments.length;n=0}).sort(PUt)};var I9e=["button:enabled","select:enabled","textarea:enabled","input:enabled","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[tabindex]","[contenteditable]","[autofocus]"];var dme=I9e.join(","),jUt="".concat(dme,", [data-focus-guard]"),E9e=function(e,t){return Pl((e.shadowRoot||e).children).reduce(function(r,n){return r.concat(n.matches(t?jUt:dme)?[n]:[],E9e(n))},[])},TUt=function(e,t){var r;return e instanceof HTMLIFrameElement&&(!((r=e.contentDocument)===null||r===void 0)&&r.body)?h3([e.contentDocument.body],t):[e]},h3=function(e,t){return e.reduce(function(r,n){var o,i=E9e(n,t),c=(o=[]).concat.apply(o,i.map(function(d){return TUt(d,t)}));return r.concat(c,n.parentNode?Pl(n.parentNode.querySelectorAll(dme)).filter(function(d){return d===n}):[])},[])},P9e=function(e){var t=e.querySelectorAll("[".concat(a9e,"]"));return Pl(t).map(function(r){return h3([r])}).reduce(function(r,n){return r.concat(n)},[])};var fme=function(e,t){return Pl(e).filter(function(r){return lme(t,r)}).filter(function(r){return _9e(r)})},hme=function(e,t){return t===void 0&&(t=new Map),Pl(e).filter(function(r){return ume(t,r)})},T9=function(e,t,r){return ZV(fme(h3(e,r),t),!0,r)},Xg=function(e,t){return ZV(fme(h3(e),t),!1)},k9e=function(e,t){return fme(P9e(e),t)},Lh=function(e,t){return e.shadowRoot?Lh(e.shadowRoot,t):Object.getPrototypeOf(e).contains!==void 0&&Object.getPrototypeOf(e).contains.call(e,t)?!0:Pl(e.children).some(function(r){var n;if(r instanceof HTMLIFrameElement){var o=(n=r.contentDocument)===null||n===void 0?void 0:n.body;return o?Lh(o,t):!1}return Lh(r,t)})};var CUt=function(e){for(var t=new Set,r=e.length,n=0;n0&&t.add(o),(i&Node.DOCUMENT_POSITION_CONTAINS)>0&&t.add(n)}return e.filter(function(c,d){return!t.has(d)})},j9e=function(e){return e.parentNode?j9e(e.parentNode):e},C9=function(e){var t=Dh(e);return t.filter(Boolean).reduce(function(r,n){var o=n.getAttribute(HV);return r.push.apply(r,o?CUt(Pl(j9e(n).querySelectorAll("[".concat(HV,'="').concat(o,'"]:not([').concat(XJ,'="disabled"])')))):[n]),r},[])};var T9e=function(e){try{return e()}catch{return}};var m3=function(e){if(e===void 0&&(e=document),!(!e||!e.activeElement)){var t=e.activeElement;return t.shadowRoot?m3(t.shadowRoot):t instanceof HTMLIFrameElement&&T9e(function(){return t.contentWindow.document})?m3(t.contentWindow.document):t}};var MUt=function(e,t){return e===t},AUt=function(e,t){return!!Pl(e.querySelectorAll("iframe")).some(function(r){return MUt(r,t)})},aX=function(e,t){return t===void 0&&(t=m3(iX(e).ownerDocument)),!t||t.dataset&&t.dataset.focusGuard?!1:C9(e).some(function(r){return Lh(r,t)||AUt(r,t)})};var mme=function(e){e===void 0&&(e=document);var t=m3(e);return t?Pl(e.querySelectorAll("[".concat(i9e,"]"))).some(function(r){return Lh(r,t)}):!1};var RUt=function(e,t){return t.filter(pme).filter(function(r){return r.name===e.name}).filter(function(r){return r.checked})[0]||e},sX=function(e,t){return pme(e)&&e.name?RUt(e,t):e},C9e=function(e){var t=new Set;return e.forEach(function(r){return t.add(sX(r,e))}),e.filter(function(r){return t.has(r)})};var vme=function(e){return e[0]&&e.length>1?sX(e[0],e):e[0]},gme=function(e,t){return e.indexOf(sX(t,e))};var lX="NEW_FOCUS",M9e=function(e,t,r,n,o){var i=e.length,c=e[0],d=e[i-1],h=VV(n);if(!(n&&e.indexOf(n)>=0)){var v=n!==void 0?r.indexOf(n):-1,w=o?r.indexOf(o):v,_=o?e.indexOf(o):-1;if(v===-1)return _!==-1?_:lX;if(_===-1)return lX;var I=v-w,R=r.indexOf(c),D=r.indexOf(d),F=C9e(r),A=n!==void 0?F.indexOf(n):-1,N=A-(o?F.indexOf(o):v);if(!I&&_>=0||t.length===0)return _;var H=gme(e,t[0]),q=gme(e,t[t.length-1]);if(v<=R&&h&&Math.abs(I)>1)return q;if(v>=D&&h&&Math.abs(I)>1)return H;if(I&&Math.abs(N)>1)return _;if(v<=R)return q;if(v>D)return H;if(I)return Math.abs(I)>1?_:(i+_+I)%i}};var DUt=function(e){return function(t){var r,n=(r=cme(t))===null||r===void 0?void 0:r.autofocus;return t.autofocus||n!==void 0&&n!=="false"||e.indexOf(t)>=0}},yme=function(e,t,r){var n=e.map(function(i){var c=i.node;return c}),o=hme(n.filter(DUt(r)));return o&&o.length?vme(o):vme(hme(t))};var wme=function(e,t){return t===void 0&&(t=[]),t.push(e),e.parentNode&&wme(e.parentNode.host||e.parentNode,t),t},bme=function(e,t){for(var r=wme(e),n=wme(t),o=0;o=0)return i}return!1},uX=function(e,t,r){var n=Dh(e),o=Dh(t),i=n[0],c=!1;return o.filter(Boolean).forEach(function(d){c=bme(c||d,d)||c,r.filter(Boolean).forEach(function(h){var v=bme(i,h);v&&(!c||Lh(v,c)?c=v:c=bme(v,c))})}),c},Ome=function(e,t){return e.reduce(function(r,n){return r.concat(k9e(n,t))},[])};var LUt=function(e,t){var r=new Map;return t.forEach(function(n){return r.set(n.node,n)}),e.map(function(n){return r.get(n)}).filter(S9e)},A9e=function(e,t){var r=m3(Dh(e).length>0?document:iX(e).ownerDocument),n=C9(e).filter($V),o=uX(r||e,e,n),i=new Map,c=Xg(n,i),d=c.filter(function(D){var F=D.node;return $V(F)});if(d[0]){var h=Xg([o],i).map(function(D){var F=D.node;return F}),v=LUt(h,d),w=v.map(function(D){var F=D.node;return F}),_=v.filter(function(D){var F=D.tabIndex;return F>=0}).map(function(D){var F=D.node;return F}),I=M9e(w,_,h,r,t);if(I===lX){var R=yme(c,_,Ome(n,i))||yme(c,w,Ome(n,i));if(R)return{node:R};console.warn("focus-lock: cannot find any node to move focus into");return}return I===void 0?I:v[I]}};var xme=function(e){var t=C9(e).filter($V),r=uX(e,e,t),n=ZV(h3([r],!0),!0,!0),o=h3(t,!1);return n.map(function(i){var c=i.node,d=i.index;return{node:c,index:d,lockItem:o.indexOf(c)>=0,guard:VV(c)}})};var qV=function(e,t){e&&("focus"in e&&e.focus(t),"contentWindow"in e&&e.contentWindow&&e.contentWindow.focus())};var _me=0,Sme=!1,cX=function(e,t,r){r===void 0&&(r={});var n=A9e(e,t);if(!Sme&&n){if(_me>2){console.error("FocusLock: focus-fighting detected. Only one focus management system could be active. See https://github.com/theKashey/focus-lock/#focus-fighting"),Sme=!0,setTimeout(function(){Sme=!1},1);return}_me++,qV(n.node,r.focusOptions),_me--}};function UV(e){if(!e)return null;if(typeof WeakRef>"u")return function(){return e||null};var t=e?new WeakRef(e):null;return function(){return t?.deref()||null}}var NUt=function(e){if(!e)return null;for(var t=[],r=e;r&&r!==document.body;)t.push({current:UV(r),parent:UV(r.parentElement),left:UV(r.previousElementSibling),right:UV(r.nextElementSibling)}),r=r.parentElement;return{element:UV(e),stack:t,ownerDocument:e.ownerDocument}},FUt=function(e){var t,r,n,o,i;if(e)for(var c=e.stack,d=e.ownerDocument,h=new Map,v=0,w=c;v-1&&(A.filter(function(H){var q=H.guard,Y=H.node;return q&&Y.dataset.focusAutoGuard}).forEach(function(H){var q=H.node;return q.removeAttribute("tabIndex")}),F9e(N,A.length,1,A),F9e(N,-1,-1,A))}}}return t},H9e=function(t){dX()&&t&&(t.stopPropagation(),t.preventDefault())},fX=function(){return eX(dX)},V9e=function(t){var r=t.target,n=t.currentTarget;n.contains(r)||$Ut(n,r)},XUt=function(){return null},KUt=function(t){var r=t.children;return B9e.createElement("div",{onBlur:fX,onFocus:V9e},r)};KUt.propTypes={};var $9e=function(){jme=!0},Z9e=function(){jme=!1,GV="just",eX(function(){GV="meanwhile"})},YUt=function(){document.addEventListener("focusin",H9e),document.addEventListener("focusout",fX),window.addEventListener("focus",$9e),window.addEventListener("blur",Z9e)},QUt=function(){document.removeEventListener("focusin",H9e),document.removeEventListener("focusout",fX),window.removeEventListener("focus",$9e),window.removeEventListener("blur",Z9e)};function eGt(e){return e.filter(function(t){var r=t.disabled;return!r})}var q9e={moveFocusInside:cX,focusInside:aX,focusNextElement:Ime,focusPrevElement:Eme,focusFirstElement:Pme,focusLastElement:kme,captureFocusRestore:pX};function tGt(e){var t=e.slice(-1)[0];t&&!M9&&YUt();var r=M9,n=r&&t&&t.id===r.id;M9=t,r&&!n&&(r.onDeactivation(),e.filter(function(o){var i=o.id;return i===r.id}).length||r.returnFocus(!t)),t?(sp=null,(!n||r.observed!==t.observed)&&t.onActivation(q9e),dX(!0),eX(dX)):(QUt(),sp=null)}KJ.assignSyncMedium(V9e);YJ.assignMedium(fX);l9e.assignMedium(function(e){return e(q9e)});var U9e=b9e(eGt,tGt)(XUt);var OZr=zx(QJ,U9e);var Jo=T(z());var D9=T(z());var X9e=T(z());var G9e;var J9e=function(){if(G9e)return G9e;if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function rGt(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=J9e();return t&&e.setAttribute("nonce",t),e}function nGt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function oGt(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var Tme=function(){var e=0,t=null;return{add:function(r){e==0&&(t=rGt())&&(nGt(t,r),oGt(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}};var Cme=function(){var e=Tme();return function(t,r){X9e.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&r])}};var Hx=function(){var e=Cme(),t=function(r){var n=r.styles,o=r.dynamic;return e(n,o),null};return t};var iGt={left:0,top:0,right:0,gap:0},Mme=function(e){return parseInt(e||"",10)||0},aGt=function(e){var t=window.getComputedStyle(document.body),r=t[e==="padding"?"paddingLeft":"marginLeft"],n=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[Mme(r),Mme(n),Mme(o)]},Ame=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return iGt;var t=aGt(e),r=document.documentElement.clientWidth,n=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,n-r+t[2]-t[0])}};var sGt=Hx(),R9="data-scroll-locked",lGt=function(e,t,r,n){var o=e.left,i=e.top,c=e.right,d=e.gap;return r===void 0&&(r="margin"),` + `)}},euiBetaBadge__icon:tUt,baseline:eUt,middle:Qqt}};var rUt=["className","label","color","tooltipContent","tooltipPosition","anchorProps","title","iconType","onClick","onClickAriaLabel","href","rel","target","size","alignment"];function eme(e){"@babel/helpers - typeof";return eme=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},eme(e)}function FV(){return FV=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function oUt(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}var $J=function(t){var r=t.className,n=t.label,o=t.color,i=o===void 0?"hollow":o,c=t.tooltipContent,d=t.tooltipPosition,h=d===void 0?"top":d,v=t.anchorProps,w=t.title,_=t.iconType,I=t.onClick,R=t.onClickAriaLabel,D=t.href,F=t.rel,A=t.target,N=t.size,H=N===void 0?"m":N,q=t.alignment,Y=q===void 0?"baseline":q,ee=nUt(t,rUt),ne=typeof n=="string"&&n.length===1,te=_||ne,de=(0,ZEe.default)("euiBetaBadge",r),fe=vt($Ee),ye=[fe.euiBetaBadge,fe[i],fe[H],fe[Y],te?fe.badgeSizes.circle[H]:fe.badgeSizes.default[H]],Ie;_&&(Ie=l(mr,{css:fe.euiBetaBadge__icon,className:"euiBetaBadge__icon",type:_,size:H==="m"?"m":"s","aria-hidden":"true",color:"inherit"}));var ve=D?"a":"button",Oe={};D&&(Oe.href=D,Oe.target=A,Oe.rel=va({href:D,target:A,rel:F})),I&&(Oe.onClick=I);var be;if(I||D)return be=l(ve,FV({"aria-label":R,css:ye,className:de,title:typeof n=="string"?n:w},Oe,ee),Ie||n),c?l(ps,{position:h,content:c,title:w||n,anchorProps:v},be):l("span",v,be);if(c)return l(ps,{position:h,content:c,title:w||n,anchorProps:v},l("span",FV({tabIndex:0,css:ye,className:de},ee),Ie||n));var Te=w||n;return Te&&typeof Te!="string"&&console.warn("Only string titles are permitted on badges that do not use tooltips. Found: ".concat(eme(Te))),l("span",v,l("span",FV({className:de,title:Te,css:ye},ee),Ie||n))};$J.propTypes={className:wn.default.string,"aria-label":wn.default.string,"data-test-subj":wn.default.string,css:wn.default.any,onClick:wn.default.func,onClickAriaLabel:wn.default.any,href:wn.default.string,target:wn.default.string,rel:wn.default.string,iconType:wn.default.oneOfType([wn.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,wn.default.string.isRequired,wn.default.elementType.isRequired]),label:wn.default.oneOfType([wn.default.node.isRequired,wn.default.oneOfType([wn.default.node.isRequired,wn.default.string.isRequired]).isRequired]).isRequired,tooltipContent:wn.default.oneOfType([wn.default.node,wn.default.oneOfType([wn.default.node,wn.default.node.isRequired])]),tooltipPosition:wn.default.oneOf(["top","right","bottom","left"]),anchorProps:wn.default.shape({className:wn.default.string,"aria-label":wn.default.string,"data-test-subj":wn.default.string,css:wn.default.any}),title:wn.default.oneOfType([wn.default.string,wn.default.oneOfType([wn.default.string.isRequired,wn.default.string])]),color:wn.default.any,size:wn.default.any,alignment:wn.default.any};var GEe=T(z()),Jg=T(it()),ome=T(At());var ZJ=T(z()),rme=T(it());var iUt=["target","external"];function tme(){return tme=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function sUt(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}var lUt=function(t){var r=t.euiTheme;return bx("margin-left",r.size.xs)},nme=function(t){var r=t.target,n=t.external,o=aUt(t,iUt),i=vt(lUt),c=r==="_blank"&&n!==!1||n===!0;return l(ZJ.default.Fragment,null,c&&l(ZJ.default.Fragment,null,l(mr,tme({css:i,size:"s",type:"popout",role:"presentation"},o)),r==="_blank"?l(ko,null,l("span",null,l(Zt,{token:"euiExternalLinkIcon.newTarget.screenReaderOnlyText",default:"(external, opens in a new tab or window)"}))):l(ZJ.default.Fragment,null,l(ko,null,l("span",null,l(Zt,{token:"euiExternalLinkIcon.externalTarget.screenReaderOnlyText",default:"(external)"}))))))};nme.propTypes={target:rme.default.any,external:rme.default.bool};function BV(e){"@babel/helpers - typeof";return BV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},BV(e)}var uUt=["children","color","className","href","external","target","rel","type","onClick","disabled"];function qJ(){return qJ=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hUt(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}var Xg=(0,GEe.forwardRef)(function(e,t){var r=e.children,n=e.color,o=n===void 0?"primary":n,i=e.className,c=e.href,d=e.external,h=e.target,v=e.rel,w=e.type,_=w===void 0?"button":w,I=e.onClick,R=e.disabled,D=fUt(e,uUt),F=vt(SEe),A=[F.euiLink],N=!c||$d(c),H=R||!N;if(c===void 0||!N){var q=UEe({className:(0,ome.default)("euiLink",i),css:[A,H?[F.disabled]:F[o]],type:_,onClick:I,disabled:H},D);return l("button",qJ({ref:t},q),r)}var Y=va({href:c,target:h,rel:v}),ee=UEe({className:(0,ome.default)("euiLink",i),css:[A,F[o]],href:c,target:h,rel:Y,onClick:I},D);return l("a",qJ({ref:t},ee),r,l(nme,{external:d,target:h}))});Xg.propTypes={className:Jg.default.string,"aria-label":Jg.default.string,"data-test-subj":Jg.default.string,css:Jg.default.any,type:Jg.default.oneOf(["button","reset","submit"]),color:Jg.default.any,onClick:Jg.default.func,external:Jg.default.bool};Xg.displayName="EuiLink";var Tl=T(z()),up=T(it());var JPe=T(At());var gPe=T(z()),Xo=T(it());var pu=function(){return pu=Object.assign||function(t){for(var r,n=1,o=arguments.length;n=0}).sort(PUt)};var I9e=["button:enabled","select:enabled","textarea:enabled","input:enabled","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[tabindex]","[contenteditable]","[autofocus]"];var dme=I9e.join(","),jUt="".concat(dme,", [data-focus-guard]"),E9e=function(e,t){return Pl((e.shadowRoot||e).children).reduce(function(r,n){return r.concat(n.matches(t?jUt:dme)?[n]:[],E9e(n))},[])},TUt=function(e,t){var r;return e instanceof HTMLIFrameElement&&(!((r=e.contentDocument)===null||r===void 0)&&r.body)?h3([e.contentDocument.body],t):[e]},h3=function(e,t){return e.reduce(function(r,n){var o,i=E9e(n,t),c=(o=[]).concat.apply(o,i.map(function(d){return TUt(d,t)}));return r.concat(c,n.parentNode?Pl(n.parentNode.querySelectorAll(dme)).filter(function(d){return d===n}):[])},[])},P9e=function(e){var t=e.querySelectorAll("[".concat(a9e,"]"));return Pl(t).map(function(r){return h3([r])}).reduce(function(r,n){return r.concat(n)},[])};var fme=function(e,t){return Pl(e).filter(function(r){return lme(t,r)}).filter(function(r){return _9e(r)})},hme=function(e,t){return t===void 0&&(t=new Map),Pl(e).filter(function(r){return ume(t,r)})},T9=function(e,t,r){return qV(fme(h3(e,r),t),!0,r)},Kg=function(e,t){return qV(fme(h3(e),t),!1)},k9e=function(e,t){return fme(P9e(e),t)},Lh=function(e,t){return e.shadowRoot?Lh(e.shadowRoot,t):Object.getPrototypeOf(e).contains!==void 0&&Object.getPrototypeOf(e).contains.call(e,t)?!0:Pl(e.children).some(function(r){var n;if(r instanceof HTMLIFrameElement){var o=(n=r.contentDocument)===null||n===void 0?void 0:n.body;return o?Lh(o,t):!1}return Lh(r,t)})};var CUt=function(e){for(var t=new Set,r=e.length,n=0;n0&&t.add(o),(i&Node.DOCUMENT_POSITION_CONTAINS)>0&&t.add(n)}return e.filter(function(c,d){return!t.has(d)})},j9e=function(e){return e.parentNode?j9e(e.parentNode):e},C9=function(e){var t=Dh(e);return t.filter(Boolean).reduce(function(r,n){var o=n.getAttribute(VV);return r.push.apply(r,o?CUt(Pl(j9e(n).querySelectorAll("[".concat(VV,'="').concat(o,'"]:not([').concat(KJ,'="disabled"])')))):[n]),r},[])};var T9e=function(e){try{return e()}catch{return}};var m3=function(e){if(e===void 0&&(e=document),!(!e||!e.activeElement)){var t=e.activeElement;return t.shadowRoot?m3(t.shadowRoot):t instanceof HTMLIFrameElement&&T9e(function(){return t.contentWindow.document})?m3(t.contentWindow.document):t}};var MUt=function(e,t){return e===t},AUt=function(e,t){return!!Pl(e.querySelectorAll("iframe")).some(function(r){return MUt(r,t)})},sX=function(e,t){return t===void 0&&(t=m3(aX(e).ownerDocument)),!t||t.dataset&&t.dataset.focusGuard?!1:C9(e).some(function(r){return Lh(r,t)||AUt(r,t)})};var mme=function(e){e===void 0&&(e=document);var t=m3(e);return t?Pl(e.querySelectorAll("[".concat(i9e,"]"))).some(function(r){return Lh(r,t)}):!1};var RUt=function(e,t){return t.filter(pme).filter(function(r){return r.name===e.name}).filter(function(r){return r.checked})[0]||e},lX=function(e,t){return pme(e)&&e.name?RUt(e,t):e},C9e=function(e){var t=new Set;return e.forEach(function(r){return t.add(lX(r,e))}),e.filter(function(r){return t.has(r)})};var vme=function(e){return e[0]&&e.length>1?lX(e[0],e):e[0]},gme=function(e,t){return e.indexOf(lX(t,e))};var uX="NEW_FOCUS",M9e=function(e,t,r,n,o){var i=e.length,c=e[0],d=e[i-1],h=$V(n);if(!(n&&e.indexOf(n)>=0)){var v=n!==void 0?r.indexOf(n):-1,w=o?r.indexOf(o):v,_=o?e.indexOf(o):-1;if(v===-1)return _!==-1?_:uX;if(_===-1)return uX;var I=v-w,R=r.indexOf(c),D=r.indexOf(d),F=C9e(r),A=n!==void 0?F.indexOf(n):-1,N=A-(o?F.indexOf(o):v);if(!I&&_>=0||t.length===0)return _;var H=gme(e,t[0]),q=gme(e,t[t.length-1]);if(v<=R&&h&&Math.abs(I)>1)return q;if(v>=D&&h&&Math.abs(I)>1)return H;if(I&&Math.abs(N)>1)return _;if(v<=R)return q;if(v>D)return H;if(I)return Math.abs(I)>1?_:(i+_+I)%i}};var DUt=function(e){return function(t){var r,n=(r=cme(t))===null||r===void 0?void 0:r.autofocus;return t.autofocus||n!==void 0&&n!=="false"||e.indexOf(t)>=0}},yme=function(e,t,r){var n=e.map(function(i){var c=i.node;return c}),o=hme(n.filter(DUt(r)));return o&&o.length?vme(o):vme(hme(t))};var wme=function(e,t){return t===void 0&&(t=[]),t.push(e),e.parentNode&&wme(e.parentNode.host||e.parentNode,t),t},bme=function(e,t){for(var r=wme(e),n=wme(t),o=0;o=0)return i}return!1},cX=function(e,t,r){var n=Dh(e),o=Dh(t),i=n[0],c=!1;return o.filter(Boolean).forEach(function(d){c=bme(c||d,d)||c,r.filter(Boolean).forEach(function(h){var v=bme(i,h);v&&(!c||Lh(v,c)?c=v:c=bme(v,c))})}),c},Ome=function(e,t){return e.reduce(function(r,n){return r.concat(k9e(n,t))},[])};var LUt=function(e,t){var r=new Map;return t.forEach(function(n){return r.set(n.node,n)}),e.map(function(n){return r.get(n)}).filter(S9e)},A9e=function(e,t){var r=m3(Dh(e).length>0?document:aX(e).ownerDocument),n=C9(e).filter(ZV),o=cX(r||e,e,n),i=new Map,c=Kg(n,i),d=c.filter(function(D){var F=D.node;return ZV(F)});if(d[0]){var h=Kg([o],i).map(function(D){var F=D.node;return F}),v=LUt(h,d),w=v.map(function(D){var F=D.node;return F}),_=v.filter(function(D){var F=D.tabIndex;return F>=0}).map(function(D){var F=D.node;return F}),I=M9e(w,_,h,r,t);if(I===uX){var R=yme(c,_,Ome(n,i))||yme(c,w,Ome(n,i));if(R)return{node:R};console.warn("focus-lock: cannot find any node to move focus into");return}return I===void 0?I:v[I]}};var xme=function(e){var t=C9(e).filter(ZV),r=cX(e,e,t),n=qV(h3([r],!0),!0,!0),o=h3(t,!1);return n.map(function(i){var c=i.node,d=i.index;return{node:c,index:d,lockItem:o.indexOf(c)>=0,guard:$V(c)}})};var UV=function(e,t){e&&("focus"in e&&e.focus(t),"contentWindow"in e&&e.contentWindow&&e.contentWindow.focus())};var _me=0,Sme=!1,pX=function(e,t,r){r===void 0&&(r={});var n=A9e(e,t);if(!Sme&&n){if(_me>2){console.error("FocusLock: focus-fighting detected. Only one focus management system could be active. See https://github.com/theKashey/focus-lock/#focus-fighting"),Sme=!0,setTimeout(function(){Sme=!1},1);return}_me++,UV(n.node,r.focusOptions),_me--}};function GV(e){if(!e)return null;if(typeof WeakRef>"u")return function(){return e||null};var t=e?new WeakRef(e):null;return function(){return t?.deref()||null}}var NUt=function(e){if(!e)return null;for(var t=[],r=e;r&&r!==document.body;)t.push({current:GV(r),parent:GV(r.parentElement),left:GV(r.previousElementSibling),right:GV(r.nextElementSibling)}),r=r.parentElement;return{element:GV(e),stack:t,ownerDocument:e.ownerDocument}},FUt=function(e){var t,r,n,o,i;if(e)for(var c=e.stack,d=e.ownerDocument,h=new Map,v=0,w=c;v-1&&(A.filter(function(H){var q=H.guard,Y=H.node;return q&&Y.dataset.focusAutoGuard}).forEach(function(H){var q=H.node;return q.removeAttribute("tabIndex")}),F9e(N,A.length,1,A),F9e(N,-1,-1,A))}}}return t},H9e=function(t){fX()&&t&&(t.stopPropagation(),t.preventDefault())},hX=function(){return tX(fX)},V9e=function(t){var r=t.target,n=t.currentTarget;n.contains(r)||$Ut(n,r)},XUt=function(){return null},KUt=function(t){var r=t.children;return B9e.createElement("div",{onBlur:hX,onFocus:V9e},r)};KUt.propTypes={};var $9e=function(){jme=!0},Z9e=function(){jme=!1,JV="just",tX(function(){JV="meanwhile"})},YUt=function(){document.addEventListener("focusin",H9e),document.addEventListener("focusout",hX),window.addEventListener("focus",$9e),window.addEventListener("blur",Z9e)},QUt=function(){document.removeEventListener("focusin",H9e),document.removeEventListener("focusout",hX),window.removeEventListener("focus",$9e),window.removeEventListener("blur",Z9e)};function eGt(e){return e.filter(function(t){var r=t.disabled;return!r})}var q9e={moveFocusInside:pX,focusInside:sX,focusNextElement:Ime,focusPrevElement:Eme,focusFirstElement:Pme,focusLastElement:kme,captureFocusRestore:dX};function tGt(e){var t=e.slice(-1)[0];t&&!M9&&YUt();var r=M9,n=r&&t&&t.id===r.id;M9=t,r&&!n&&(r.onDeactivation(),e.filter(function(o){var i=o.id;return i===r.id}).length||r.returnFocus(!t)),t?(sp=null,(!n||r.observed!==t.observed)&&t.onActivation(q9e),fX(!0),tX(fX)):(QUt(),sp=null)}YJ.assignSyncMedium(V9e);QJ.assignMedium(hX);l9e.assignMedium(function(e){return e(q9e)});var U9e=b9e(eGt,tGt)(XUt);var wZr=zx(eX,U9e);var Jo=T(z());var D9=T(z());var X9e=T(z());var G9e;var J9e=function(){if(G9e)return G9e;if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function rGt(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=J9e();return t&&e.setAttribute("nonce",t),e}function nGt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function oGt(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var Tme=function(){var e=0,t=null;return{add:function(r){e==0&&(t=rGt())&&(nGt(t,r),oGt(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}};var Cme=function(){var e=Tme();return function(t,r){X9e.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&r])}};var Hx=function(){var e=Cme(),t=function(r){var n=r.styles,o=r.dynamic;return e(n,o),null};return t};var iGt={left:0,top:0,right:0,gap:0},Mme=function(e){return parseInt(e||"",10)||0},aGt=function(e){var t=window.getComputedStyle(document.body),r=t[e==="padding"?"paddingLeft":"marginLeft"],n=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[Mme(r),Mme(n),Mme(o)]},Ame=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return iGt;var t=aGt(e),r=document.documentElement.clientWidth,n=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,n-r+t[2]-t[0])}};var sGt=Hx(),R9="data-scroll-locked",lGt=function(e,t,r,n){var o=e.left,i=e.top,c=e.right,d=e.gap;return r===void 0&&(r="margin"),` .`.concat(ime,` { overflow: hidden `).concat(n,`; padding-right: `).concat(d,"px ").concat(n,`; @@ -799,42 +799,42 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho body[`).concat(R9,`] { `).concat(ame,": ").concat(d,`px; } -`)},K9e=function(){var e=parseInt(document.body.getAttribute(R9)||"0",10);return isFinite(e)?e:0},uGt=function(){D9.useEffect(function(){return document.body.setAttribute(R9,(K9e()+1).toString()),function(){var e=K9e()-1;e<=0?document.body.removeAttribute(R9):document.body.setAttribute(R9,e.toString())}},[])},JV=function(e){var t=e.noRelative,r=e.noImportant,n=e.gapMode,o=n===void 0?"margin":n;uGt();var i=D9.useMemo(function(){return Ame(o)},[o]);return D9.createElement(sGt,{styles:lGt(i,!t,o,r?"":"!important")})};var Rme=!1;if(typeof window<"u")try{XV=Object.defineProperty({},"passive",{get:function(){return Rme=!0,!0}}),window.addEventListener("test",XV,XV),window.removeEventListener("test",XV,XV)}catch{Rme=!1}var XV,Vx=Rme?{passive:!1}:!1;var cGt=function(e){return e.tagName==="TEXTAREA"},Y9e=function(e,t){if(!(e instanceof Element))return!1;var r=window.getComputedStyle(e);return r[t]!=="hidden"&&!(r.overflowY===r.overflowX&&!cGt(e)&&r[t]==="visible")},pGt=function(e){return Y9e(e,"overflowY")},dGt=function(e){return Y9e(e,"overflowX")},Dme=function(e,t){var r=t.ownerDocument,n=t;do{typeof ShadowRoot<"u"&&n instanceof ShadowRoot&&(n=n.host);var o=Q9e(e,n);if(o){var i=ePe(e,n),c=i[1],d=i[2];if(c>d)return!0}n=n.parentNode}while(n&&n!==r.body);return!1},fGt=function(e){var t=e.scrollTop,r=e.scrollHeight,n=e.clientHeight;return[t,r,n]},hGt=function(e){var t=e.scrollLeft,r=e.scrollWidth,n=e.clientWidth;return[t,r,n]},Q9e=function(e,t){return e==="v"?pGt(t):dGt(t)},ePe=function(e,t){return e==="v"?fGt(t):hGt(t)},mGt=function(e,t){return e==="h"&&t==="rtl"?-1:1},tPe=function(e,t,r,n,o){var i=mGt(e,window.getComputedStyle(t).direction),c=i*n,d=r.target,h=t.contains(d),v=!1,w=c>0,_=0,I=0;do{var R=ePe(e,d),D=R[0],F=R[1],A=R[2],N=F-A-i*D;(D||N)&&Q9e(e,d)&&(_+=N,I+=D),d instanceof ShadowRoot?d=d.host:d=d.parentNode}while(!h&&d!==document.body||h&&(t.contains(d)||t===d));return(w&&(o&&Math.abs(_)<1||!o&&c>_)||!w&&(o&&Math.abs(I)<1||!o&&-c>I))&&(v=!0),v};var hX=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},rPe=function(e){return[e.deltaX,e.deltaY]},nPe=function(e){return e&&"current"in e?e.current:e},vGt=function(e,t){return e[0]===t[0]&&e[1]===t[1]},gGt=function(e){return` +`)},K9e=function(){var e=parseInt(document.body.getAttribute(R9)||"0",10);return isFinite(e)?e:0},uGt=function(){D9.useEffect(function(){return document.body.setAttribute(R9,(K9e()+1).toString()),function(){var e=K9e()-1;e<=0?document.body.removeAttribute(R9):document.body.setAttribute(R9,e.toString())}},[])},XV=function(e){var t=e.noRelative,r=e.noImportant,n=e.gapMode,o=n===void 0?"margin":n;uGt();var i=D9.useMemo(function(){return Ame(o)},[o]);return D9.createElement(sGt,{styles:lGt(i,!t,o,r?"":"!important")})};var Rme=!1;if(typeof window<"u")try{KV=Object.defineProperty({},"passive",{get:function(){return Rme=!0,!0}}),window.addEventListener("test",KV,KV),window.removeEventListener("test",KV,KV)}catch{Rme=!1}var KV,Vx=Rme?{passive:!1}:!1;var cGt=function(e){return e.tagName==="TEXTAREA"},Y9e=function(e,t){if(!(e instanceof Element))return!1;var r=window.getComputedStyle(e);return r[t]!=="hidden"&&!(r.overflowY===r.overflowX&&!cGt(e)&&r[t]==="visible")},pGt=function(e){return Y9e(e,"overflowY")},dGt=function(e){return Y9e(e,"overflowX")},Dme=function(e,t){var r=t.ownerDocument,n=t;do{typeof ShadowRoot<"u"&&n instanceof ShadowRoot&&(n=n.host);var o=Q9e(e,n);if(o){var i=ePe(e,n),c=i[1],d=i[2];if(c>d)return!0}n=n.parentNode}while(n&&n!==r.body);return!1},fGt=function(e){var t=e.scrollTop,r=e.scrollHeight,n=e.clientHeight;return[t,r,n]},hGt=function(e){var t=e.scrollLeft,r=e.scrollWidth,n=e.clientWidth;return[t,r,n]},Q9e=function(e,t){return e==="v"?pGt(t):dGt(t)},ePe=function(e,t){return e==="v"?fGt(t):hGt(t)},mGt=function(e,t){return e==="h"&&t==="rtl"?-1:1},tPe=function(e,t,r,n,o){var i=mGt(e,window.getComputedStyle(t).direction),c=i*n,d=r.target,h=t.contains(d),v=!1,w=c>0,_=0,I=0;do{var R=ePe(e,d),D=R[0],F=R[1],A=R[2],N=F-A-i*D;(D||N)&&Q9e(e,d)&&(_+=N,I+=D),d instanceof ShadowRoot?d=d.host:d=d.parentNode}while(!h&&d!==document.body||h&&(t.contains(d)||t===d));return(w&&(o&&Math.abs(_)<1||!o&&c>_)||!w&&(o&&Math.abs(I)<1||!o&&-c>I))&&(v=!0),v};var mX=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},rPe=function(e){return[e.deltaX,e.deltaY]},nPe=function(e){return e&&"current"in e?e.current:e},vGt=function(e,t){return e[0]===t[0]&&e[1]===t[1]},gGt=function(e){return` .block-interactivity-`.concat(e,` {pointer-events: none;} .allow-interactivity-`).concat(e,` {pointer-events: all;} -`)},yGt=0,L9=[];function oPe(e){var t=Jo.useRef([]),r=Jo.useRef([0,0]),n=Jo.useRef(),o=Jo.useState(yGt++)[0],i=Jo.useState(Hx)[0],c=Jo.useRef(e);Jo.useEffect(function(){c.current=e},[e]),Jo.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var F=XEe([e.lockRef.current],(e.shards||[]).map(nPe),!0).filter(Boolean);return F.forEach(function(A){return A.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),F.forEach(function(A){return A.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var d=Jo.useCallback(function(F,A){if("touches"in F&&F.touches.length===2||F.type==="wheel"&&F.ctrlKey)return!c.current.allowPinchZoom;var N=hX(F),H=r.current,q="deltaX"in F?F.deltaX:H[0]-N[0],Y="deltaY"in F?F.deltaY:H[1]-N[1],ee,ne=F.target,te=Math.abs(q)>Math.abs(Y)?"h":"v";if("touches"in F&&te==="h"&&ne.type==="range")return!1;var de=Dme(te,ne);if(!de)return!0;if(de?ee=te:(ee=te==="v"?"h":"v",de=Dme(te,ne)),!de)return!1;if(!n.current&&"changedTouches"in F&&(q||Y)&&(n.current=ee),!ee)return!0;var fe=n.current||ee;return tPe(fe,A,F,fe==="h"?q:Y,!0)},[]),h=Jo.useCallback(function(F){var A=F;if(!(!L9.length||L9[L9.length-1]!==i)){var N="deltaY"in A?rPe(A):hX(A),H=t.current.filter(function(ee){return ee.name===A.type&&(ee.target===A.target||A.target===ee.shadowParent)&&vGt(ee.delta,N)})[0];if(H&&H.should){A.cancelable&&A.preventDefault();return}if(!H){var q=(c.current.shards||[]).map(nPe).filter(Boolean).filter(function(ee){return ee.contains(A.target)}),Y=q.length>0?d(A,q[0]):!c.current.noIsolation;Y&&A.cancelable&&A.preventDefault()}}},[]),v=Jo.useCallback(function(F,A,N,H){var q={name:F,delta:A,target:N,should:H,shadowParent:bGt(N)};t.current.push(q),setTimeout(function(){t.current=t.current.filter(function(Y){return Y!==q})},1)},[]),w=Jo.useCallback(function(F){r.current=hX(F),n.current=void 0},[]),_=Jo.useCallback(function(F){v(F.type,rPe(F),F.target,d(F,e.lockRef.current))},[]),I=Jo.useCallback(function(F){v(F.type,hX(F),F.target,d(F,e.lockRef.current))},[]);Jo.useEffect(function(){return L9.push(i),e.setCallbacks({onScrollCapture:_,onWheelCapture:_,onTouchMoveCapture:I}),document.addEventListener("wheel",h,Vx),document.addEventListener("touchmove",h,Vx),document.addEventListener("touchstart",w,Vx),function(){L9=L9.filter(function(F){return F!==i}),document.removeEventListener("wheel",h,Vx),document.removeEventListener("touchmove",h,Vx),document.removeEventListener("touchstart",w,Vx)}},[]);var R=e.removeScrollBar,D=e.inert;return Jo.createElement(Jo.Fragment,null,D?Jo.createElement(i,{styles:gGt(o)}):null,R?Jo.createElement(JV,{gapMode:e.gapMode}):null)}function bGt(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var eqr=zx(GJ,oPe);var gX=T(z());var wGt=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},N9=new WeakMap,mX=new WeakMap,vX={},Lme=0,iPe=function(e){return e&&(e.host||iPe(e.parentNode))},OGt=function(e,t){return t.map(function(r){if(e.contains(r))return r;var n=iPe(r);return n&&e.contains(n)?n:(console.error("aria-hidden",r,"in not contained inside",e,". Doing nothing"),null)}).filter(function(r){return!!r})},xGt=function(e,t,r,n){var o=OGt(t,Array.isArray(e)?e:[e]);vX[r]||(vX[r]=new WeakMap);var i=vX[r],c=[],d=new Set,h=new Set(o),v=function(_){!_||d.has(_)||(d.add(_),v(_.parentNode))};o.forEach(v);var w=function(_){!_||h.has(_)||Array.prototype.forEach.call(_.children,function(I){if(d.has(I))w(I);else try{var R=I.getAttribute(n),D=R!==null&&R!=="false",F=(N9.get(I)||0)+1,A=(i.get(I)||0)+1;N9.set(I,F),i.set(I,A),c.push(I),F===1&&D&&mX.set(I,!0),A===1&&I.setAttribute(r,"true"),D||I.setAttribute(n,"true")}catch(N){console.error("aria-hidden: cannot operate on ",I,N)}})};return w(t),d.clear(),Lme++,function(){c.forEach(function(_){var I=N9.get(_)-1,R=i.get(_)-1;N9.set(_,I),i.set(_,R),I||(mX.has(_)||_.removeAttribute(n),mX.delete(_)),R||_.removeAttribute(r)}),Lme--,Lme||(N9=new WeakMap,N9=new WeakMap,mX=new WeakMap,vX={})}},aPe=function(e,t,r){r===void 0&&(r="data-aria-hidden");var n=Array.from(Array.isArray(e)?e:[e]),o=t||wGt(e);return o?(n.push.apply(n,Array.from(o.querySelectorAll("[aria-live]"))),xGt(n,o,r,"aria-hidden")):function(){return null}};var sPe=T(z());var _Gt=Hx(),SGt=` - [`+rX+`] { +`)},yGt=0,L9=[];function oPe(e){var t=Jo.useRef([]),r=Jo.useRef([0,0]),n=Jo.useRef(),o=Jo.useState(yGt++)[0],i=Jo.useState(Hx)[0],c=Jo.useRef(e);Jo.useEffect(function(){c.current=e},[e]),Jo.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var F=XEe([e.lockRef.current],(e.shards||[]).map(nPe),!0).filter(Boolean);return F.forEach(function(A){return A.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),F.forEach(function(A){return A.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var d=Jo.useCallback(function(F,A){if("touches"in F&&F.touches.length===2||F.type==="wheel"&&F.ctrlKey)return!c.current.allowPinchZoom;var N=mX(F),H=r.current,q="deltaX"in F?F.deltaX:H[0]-N[0],Y="deltaY"in F?F.deltaY:H[1]-N[1],ee,ne=F.target,te=Math.abs(q)>Math.abs(Y)?"h":"v";if("touches"in F&&te==="h"&&ne.type==="range")return!1;var de=Dme(te,ne);if(!de)return!0;if(de?ee=te:(ee=te==="v"?"h":"v",de=Dme(te,ne)),!de)return!1;if(!n.current&&"changedTouches"in F&&(q||Y)&&(n.current=ee),!ee)return!0;var fe=n.current||ee;return tPe(fe,A,F,fe==="h"?q:Y,!0)},[]),h=Jo.useCallback(function(F){var A=F;if(!(!L9.length||L9[L9.length-1]!==i)){var N="deltaY"in A?rPe(A):mX(A),H=t.current.filter(function(ee){return ee.name===A.type&&(ee.target===A.target||A.target===ee.shadowParent)&&vGt(ee.delta,N)})[0];if(H&&H.should){A.cancelable&&A.preventDefault();return}if(!H){var q=(c.current.shards||[]).map(nPe).filter(Boolean).filter(function(ee){return ee.contains(A.target)}),Y=q.length>0?d(A,q[0]):!c.current.noIsolation;Y&&A.cancelable&&A.preventDefault()}}},[]),v=Jo.useCallback(function(F,A,N,H){var q={name:F,delta:A,target:N,should:H,shadowParent:bGt(N)};t.current.push(q),setTimeout(function(){t.current=t.current.filter(function(Y){return Y!==q})},1)},[]),w=Jo.useCallback(function(F){r.current=mX(F),n.current=void 0},[]),_=Jo.useCallback(function(F){v(F.type,rPe(F),F.target,d(F,e.lockRef.current))},[]),I=Jo.useCallback(function(F){v(F.type,mX(F),F.target,d(F,e.lockRef.current))},[]);Jo.useEffect(function(){return L9.push(i),e.setCallbacks({onScrollCapture:_,onWheelCapture:_,onTouchMoveCapture:I}),document.addEventListener("wheel",h,Vx),document.addEventListener("touchmove",h,Vx),document.addEventListener("touchstart",w,Vx),function(){L9=L9.filter(function(F){return F!==i}),document.removeEventListener("wheel",h,Vx),document.removeEventListener("touchmove",h,Vx),document.removeEventListener("touchstart",w,Vx)}},[]);var R=e.removeScrollBar,D=e.inert;return Jo.createElement(Jo.Fragment,null,D?Jo.createElement(i,{styles:gGt(o)}):null,R?Jo.createElement(XV,{gapMode:e.gapMode}):null)}function bGt(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var QZr=zx(JJ,oPe);var yX=T(z());var wGt=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},N9=new WeakMap,vX=new WeakMap,gX={},Lme=0,iPe=function(e){return e&&(e.host||iPe(e.parentNode))},OGt=function(e,t){return t.map(function(r){if(e.contains(r))return r;var n=iPe(r);return n&&e.contains(n)?n:(console.error("aria-hidden",r,"in not contained inside",e,". Doing nothing"),null)}).filter(function(r){return!!r})},xGt=function(e,t,r,n){var o=OGt(t,Array.isArray(e)?e:[e]);gX[r]||(gX[r]=new WeakMap);var i=gX[r],c=[],d=new Set,h=new Set(o),v=function(_){!_||d.has(_)||(d.add(_),v(_.parentNode))};o.forEach(v);var w=function(_){!_||h.has(_)||Array.prototype.forEach.call(_.children,function(I){if(d.has(I))w(I);else try{var R=I.getAttribute(n),D=R!==null&&R!=="false",F=(N9.get(I)||0)+1,A=(i.get(I)||0)+1;N9.set(I,F),i.set(I,A),c.push(I),F===1&&D&&vX.set(I,!0),A===1&&I.setAttribute(r,"true"),D||I.setAttribute(n,"true")}catch(N){console.error("aria-hidden: cannot operate on ",I,N)}})};return w(t),d.clear(),Lme++,function(){c.forEach(function(_){var I=N9.get(_)-1,R=i.get(_)-1;N9.set(_,I),i.set(_,R),I||(vX.has(_)||_.removeAttribute(n),vX.delete(_)),R||_.removeAttribute(r)}),Lme--,Lme||(N9=new WeakMap,N9=new WeakMap,vX=new WeakMap,gX={})}},aPe=function(e,t,r){r===void 0&&(r="data-aria-hidden");var n=Array.from(Array.isArray(e)?e:[e]),o=t||wGt(e);return o?(n.push.apply(n,Array.from(o.querySelectorAll("[aria-live]"))),xGt(n,o,r,"aria-hidden")):function(){return null}};var sPe=T(z());var _Gt=Hx(),SGt=` + [`+nX+`] { pointer-events: none !important; } -`,lPe=function(){return sPe.createElement(_Gt,{styles:SGt})};var v3=T(z()),uPe=function(e){return"current"in e?e.current:e};function cPe(e){var t=e.setLockProps,r=e.onEscapeKey,n=e.onClickOutside,o=e.shards,i=e.onActivation,c=e.onDeactivation,d=e.noIsolation,h=(0,v3.useState)(void 0),v=h[0],w=h[1],_=(0,v3.useRef)(null),I=(0,v3.useRef)(0);return gX.useEffect(function(){var R=function(N){N.defaultPrevented||(N.code==="Escape"||N.key==="Escape"||N.keyCode===27)&&r&&r(N)},D=function(N){N.defaultPrevented||N.target===_.current||N instanceof MouseEvent&&N.button!==0||o&&o.map(uPe).some(function(H){return H&&H.contains(N.target)||H===N.target})||n&&n(N)},F=function(N){D(N),I.current=N.touches.length},A=function(N){I.current=N.touches.length};if(v)return document.addEventListener("keydown",R),document.addEventListener("mousedown",D),document.addEventListener("touchstart",F),document.addEventListener("touchend",A),function(){document.removeEventListener("keydown",R),document.removeEventListener("mousedown",D),document.removeEventListener("touchstart",F),document.removeEventListener("touchend",A)}},[v,n,r]),(0,v3.useEffect)(function(){if(v)return i&&i(v),function(){c&&c()}},[!!v]),(0,v3.useEffect)(function(){var R=function(){return null},D=!1,F=function(N){d||(R=aPe(JEe([N],(o||[]).map(uPe)),document.body,rX)),w(function(){return N})},A=function(){R(),D||w(null)};return t({onMouseDown:function(N){_.current=N.target},onTouchStart:function(N){_.current=N.target},onActivation:F,onDeactivation:A}),function(){D=!0,t(!1)}},[]),gX.createElement(lPe,null)}var pPe=zx(tX,cPe);var IGt=function(e){return KV.createElement(pPe,pu({},e))},Nme=KV.forwardRef(function(e,t){return KV.createElement(m9e,pu({},e,{ref:t,sideCar:IGt}))});var EGt=["children","clickOutsideDisables","disabled","returnFocus","noIsolation","scrollLock","gapMode"];function F9(e){"@babel/helpers - typeof";return F9=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},F9(e)}function dPe(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 fPe(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kGt(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 jGt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hPe(e,t){for(var r=0;r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rJt(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}var _X=function(t){var r=t.children,n=t.position,o=tJt(t,eJt),i=ur(),c=PPe(i),d=[c.euiPopoverArrow,c[n]];return l("div",Vme({className:"euiPopover__arrow","data-popover-arrow":n,css:d},o),r)};_X.propTypes={className:H9.default.string,"aria-label":H9.default.string,"data-test-subj":H9.default.string,css:H9.default.any,position:H9.default.any.isRequired};var kPe=function(){return{euiPopover:Q("position:relative;vertical-align:middle;",pe("max-width","100%"),";;label:euiPopover;")}};var IX=T(z()),jl=T(it()),MPe=T(At());var aUr=T(z()),du=T(it()),TPe=T(At());var nJt={name:"122lw0e-grow",styles:"flex-grow:1;label:grow;"},oJt={name:"1kk7odi-euiPanel",styles:"flex-grow:0;label:euiPanel;"},jPe=function(t){var r=t.euiTheme;return{euiPanel:oJt,grow:nJt,hasShadow:Q(cc(t,"m"),";;label:hasShadow;"),hasBorder:Q("border:",r.border.thin,";;label:hasBorder;"),radius:{none:Q(";label:none;"),m:Q("border-radius:",r.border.radius.medium,";;label:m;")},isClickable:Q(bn,"{transition:box-shadow ",r.animation.fast," ",r.animation.resistance,",transform ",r.animation.fast," ",r.animation.resistance,";}&:enabled{display:block;",pe("width","100%")," ",Tn("left"),";}&:hover,&:focus{",cc(t,"l")," transform:translateY(-2px);cursor:pointer;};label:isClickable;")}};function YV(e){"@babel/helpers - typeof";return YV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},YV(e)}var iJt=["children","className","paddingSize","borderRadius","color","hasShadow","hasBorder","grow","panelRef","element"];function SX(){return SX=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cJt(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}var $me={none:null,s:"paddingSmall",m:"paddingMedium",l:"paddingLarge"},fUr=Ol($me);var kl=function(t){var r=t.children,n=t.className,o=t.paddingSize,i=o===void 0?"m":o,c=t.borderRadius,d=c===void 0?"m":c,h=t.color,v=h===void 0?"plain":h,w=t.hasShadow,_=w===void 0?!0:w,I=t.hasBorder,R=I===void 0?!1:I,D=t.grow,F=D===void 0?!0:D,A=t.panelRef,N=t.element,H=uJt(t,iJt),q=!R&&v==="plain",Y=v==="plain"||v==="transparent",ee=mt(jPe),ne=[ee.euiPanel,F&&ee.grow,ee.radius[d],a8e()[i],X7e()[v],q&&_===!0&&ee.hasShadow,Y&&R===!0&&ee.hasBorder,H.onClick&&ee.isClickable],te=(0,TPe.default)("euiPanel","euiPanel--".concat(v),aJt({},"euiPanel--".concat($me[i]),$me[i]),n);return H.onClick&&N!=="div"?l("button",SX({ref:A,className:te,css:ne},H),r):l("div",SX({ref:A,className:te,css:ne},H),r)};kl.propTypes={element:du.default.oneOfType([du.default.oneOf(["button"]),du.default.oneOf(["div"])]),hasShadow:du.default.bool,hasBorder:du.default.bool,paddingSize:du.default.any,borderRadius:du.default.any,grow:du.default.bool,panelRef:du.default.any,color:du.default.any,className:du.default.string,"aria-label":du.default.string,"data-test-subj":du.default.string,css:du.default.any};var pJt="slow",dJt={name:"j5y6yx-isOpen",styles:"opacity:1;pointer-events:auto;label:isOpen;"},CPe=function(t){var r=t.euiTheme,n=t.colorMode,o=r.size.s,i=r.animation[pJt],c="opacity ".concat(r.animation.bounce," ").concat(i),d="transform ".concat(r.animation.bounce," ").concat(pr(i,function(h){return h+100}));return{euiPopover__panel:Q("position:absolute;",pe("min-width","".concat(r.base*7,"px")),pe("max-width","calc(100vw - ".concat(r.size.xl,")")),"backface-visibility:hidden;pointer-events:none;opacity:0;background-color:var(--euiPopoverBackgroundColor);",bn,"{transition:",c,",",d,";}&:focus{outline-offset:0;};label:euiPopover__panel;"),isOpen:dJt,light:Q("--euiPopoverBackgroundColor:",r.colors.emptyShade,";;label:light;"),dark:Q("--euiPopoverBackgroundColor:",Rn(r.colors.emptyShade,.025),";;label:dark;"),hasTransform:{hasTransform:Q("transform:translateY(0) translateX(0) translateZ(0);",iJ(t,{property:"filter"})," ",bn,"{transition:",c,",",d,";};label:hasTransform;"),top:Q("transform:translateY(",o,") translateZ(0);;label:top;"),bottom:Q("transform:translateY(-",o,") translateZ(0);;label:bottom;"),left:Q("transform:translateX(",o,") translateZ(0);;label:left;"),right:Q("transform:translateX(-",o,") translateZ(0);;label:right;")},isAttached:{isAttached:Q(bn,"{transition:",c,";};label:isAttached;"),top:Q(j8e(t),";;label:top;"),bottom:Q(cc(t,"m"),";;label:bottom;"),get left(){return this.bottom},get right(){return this.bottom}},hasDragDrop:{hasDragDrop:Q(iJ(t,{property:"box-shadow"})," ",bn,"{transition:",c,";};label:hasDragDrop;"),top:Q("margin-block-start:",o,";;label:top;"),bottom:Q("margin-block-start:-",o,`;.euiPopover__arrow{filter:drop-shadow( +`,lPe=function(){return sPe.createElement(_Gt,{styles:SGt})};var v3=T(z()),uPe=function(e){return"current"in e?e.current:e};function cPe(e){var t=e.setLockProps,r=e.onEscapeKey,n=e.onClickOutside,o=e.shards,i=e.onActivation,c=e.onDeactivation,d=e.noIsolation,h=(0,v3.useState)(void 0),v=h[0],w=h[1],_=(0,v3.useRef)(null),I=(0,v3.useRef)(0);return yX.useEffect(function(){var R=function(N){N.defaultPrevented||(N.code==="Escape"||N.key==="Escape"||N.keyCode===27)&&r&&r(N)},D=function(N){N.defaultPrevented||N.target===_.current||N instanceof MouseEvent&&N.button!==0||o&&o.map(uPe).some(function(H){return H&&H.contains(N.target)||H===N.target})||n&&n(N)},F=function(N){D(N),I.current=N.touches.length},A=function(N){I.current=N.touches.length};if(v)return document.addEventListener("keydown",R),document.addEventListener("mousedown",D),document.addEventListener("touchstart",F),document.addEventListener("touchend",A),function(){document.removeEventListener("keydown",R),document.removeEventListener("mousedown",D),document.removeEventListener("touchstart",F),document.removeEventListener("touchend",A)}},[v,n,r]),(0,v3.useEffect)(function(){if(v)return i&&i(v),function(){c&&c()}},[!!v]),(0,v3.useEffect)(function(){var R=function(){return null},D=!1,F=function(N){d||(R=aPe(JEe([N],(o||[]).map(uPe)),document.body,nX)),w(function(){return N})},A=function(){R(),D||w(null)};return t({onMouseDown:function(N){_.current=N.target},onTouchStart:function(N){_.current=N.target},onActivation:F,onDeactivation:A}),function(){D=!0,t(!1)}},[]),yX.createElement(lPe,null)}var pPe=zx(rX,cPe);var IGt=function(e){return YV.createElement(pPe,pu({},e))},Nme=YV.forwardRef(function(e,t){return YV.createElement(m9e,pu({},e,{ref:t,sideCar:IGt}))});var EGt=["children","clickOutsideDisables","disabled","returnFocus","noIsolation","scrollLock","gapMode"];function F9(e){"@babel/helpers - typeof";return F9=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},F9(e)}function dPe(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 fPe(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kGt(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 jGt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hPe(e,t){for(var r=0;r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rJt(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}var SX=function(t){var r=t.children,n=t.position,o=tJt(t,eJt),i=ur(),c=PPe(i),d=[c.euiPopoverArrow,c[n]];return l("div",Vme({className:"euiPopover__arrow","data-popover-arrow":n,css:d},o),r)};SX.propTypes={className:H9.default.string,"aria-label":H9.default.string,"data-test-subj":H9.default.string,css:H9.default.any,position:H9.default.any.isRequired};var kPe=function(){return{euiPopover:Q("position:relative;vertical-align:middle;",pe("max-width","100%"),";;label:euiPopover;")}};var EX=T(z()),jl=T(it()),MPe=T(At());var iUr=T(z()),du=T(it()),TPe=T(At());var nJt={name:"122lw0e-grow",styles:"flex-grow:1;label:grow;"},oJt={name:"1kk7odi-euiPanel",styles:"flex-grow:0;label:euiPanel;"},jPe=function(t){var r=t.euiTheme;return{euiPanel:oJt,grow:nJt,hasShadow:Q(cc(t,"m"),";;label:hasShadow;"),hasBorder:Q("border:",r.border.thin,";;label:hasBorder;"),radius:{none:Q(";label:none;"),m:Q("border-radius:",r.border.radius.medium,";;label:m;")},isClickable:Q(bn,"{transition:box-shadow ",r.animation.fast," ",r.animation.resistance,",transform ",r.animation.fast," ",r.animation.resistance,";}&:enabled{display:block;",pe("width","100%")," ",Tn("left"),";}&:hover,&:focus{",cc(t,"l")," transform:translateY(-2px);cursor:pointer;};label:isClickable;")}};function QV(e){"@babel/helpers - typeof";return QV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},QV(e)}var iJt=["children","className","paddingSize","borderRadius","color","hasShadow","hasBorder","grow","panelRef","element"];function IX(){return IX=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function cJt(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}var $me={none:null,s:"paddingSmall",m:"paddingMedium",l:"paddingLarge"},dUr=Ol($me);var kl=function(t){var r=t.children,n=t.className,o=t.paddingSize,i=o===void 0?"m":o,c=t.borderRadius,d=c===void 0?"m":c,h=t.color,v=h===void 0?"plain":h,w=t.hasShadow,_=w===void 0?!0:w,I=t.hasBorder,R=I===void 0?!1:I,D=t.grow,F=D===void 0?!0:D,A=t.panelRef,N=t.element,H=uJt(t,iJt),q=!R&&v==="plain",Y=v==="plain"||v==="transparent",ee=vt(jPe),ne=[ee.euiPanel,F&&ee.grow,ee.radius[d],a8e()[i],X7e()[v],q&&_===!0&&ee.hasShadow,Y&&R===!0&&ee.hasBorder,H.onClick&&ee.isClickable],te=(0,TPe.default)("euiPanel","euiPanel--".concat(v),aJt({},"euiPanel--".concat($me[i]),$me[i]),n);return H.onClick&&N!=="div"?l("button",IX({ref:A,className:te,css:ne},H),r):l("div",IX({ref:A,className:te,css:ne},H),r)};kl.propTypes={element:du.default.oneOfType([du.default.oneOf(["button"]),du.default.oneOf(["div"])]),hasShadow:du.default.bool,hasBorder:du.default.bool,paddingSize:du.default.any,borderRadius:du.default.any,grow:du.default.bool,panelRef:du.default.any,color:du.default.any,className:du.default.string,"aria-label":du.default.string,"data-test-subj":du.default.string,css:du.default.any};var pJt="slow",dJt={name:"j5y6yx-isOpen",styles:"opacity:1;pointer-events:auto;label:isOpen;"},CPe=function(t){var r=t.euiTheme,n=t.colorMode,o=r.size.s,i=r.animation[pJt],c="opacity ".concat(r.animation.bounce," ").concat(i),d="transform ".concat(r.animation.bounce," ").concat(pr(i,function(h){return h+100}));return{euiPopover__panel:Q("position:absolute;",pe("min-width","".concat(r.base*7,"px")),pe("max-width","calc(100vw - ".concat(r.size.xl,")")),"backface-visibility:hidden;pointer-events:none;opacity:0;background-color:var(--euiPopoverBackgroundColor);",bn,"{transition:",c,",",d,";}&:focus{outline-offset:0;};label:euiPopover__panel;"),isOpen:dJt,light:Q("--euiPopoverBackgroundColor:",r.colors.emptyShade,";;label:light;"),dark:Q("--euiPopoverBackgroundColor:",Rn(r.colors.emptyShade,.025),";;label:dark;"),hasTransform:{hasTransform:Q("transform:translateY(0) translateX(0) translateZ(0);",aJ(t,{property:"filter"})," ",bn,"{transition:",c,",",d,";};label:hasTransform;"),top:Q("transform:translateY(",o,") translateZ(0);;label:top;"),bottom:Q("transform:translateY(-",o,") translateZ(0);;label:bottom;"),left:Q("transform:translateX(",o,") translateZ(0);;label:left;"),right:Q("transform:translateX(-",o,") translateZ(0);;label:right;")},isAttached:{isAttached:Q(bn,"{transition:",c,";};label:isAttached;"),top:Q(j8e(t),";;label:top;"),bottom:Q(cc(t,"m"),";;label:bottom;"),get left(){return this.bottom},get right(){return this.bottom}},hasDragDrop:{hasDragDrop:Q(aJ(t,{property:"box-shadow"})," ",bn,"{transition:",c,";};label:hasDragDrop;"),top:Q("margin-block-start:",o,";;label:top;"),bottom:Q("margin-block-start:-",o,`;.euiPopover__arrow{filter:drop-shadow( 0 -6px 6px `,Bo(r.colors.shadow,.12,n),` );};label:bottom;`),left:Q("margin-inline-start:",o,`;.euiPopover__arrow{filter:drop-shadow( 6px 0 6px `,Bo(r.colors.shadow,.12,n),` );};label:left;`),right:Q("margin-inline-start:-",o,`;.euiPopover__arrow{filter:drop-shadow( -6px 0 6px `,Bo(r.colors.shadow,.12,n),` - );};label:right;`)}}};var fJt=["children","className","isOpen","isAttached","hasDragDrop","position"];function Zme(){return Zme=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mJt(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}var APe="l",vJt=(0,IX.createContext)({paddingSize:APe}),EX=function(t){var r=t.children,n=t.className,o=t.isOpen,i=t.isAttached,c=t.hasDragDrop,d=t.position,h=hJt(t,fJt),v=(0,MPe.default)("euiPopover__panel",n),w=ur(),_=(0,IX.useMemo)(function(){var I=CPe(w),R=w.colorMode.toLowerCase(),D=[I.euiPopover__panel,I[R],o&&I.isOpen];return c?[].concat(D,[I.hasDragDrop.hasDragDrop,d&&I.hasDragDrop[d]]):i?[].concat(D,[I.isAttached.isAttached,d&&I.isAttached[d]]):[].concat(D,[I.hasTransform.hasTransform,o&&d&&I.hasTransform[d]])},[w,o,d,i,c]);return l(vJt.Provider,{value:{paddingSize:h.paddingSize||APe}},l(kl,Zme({className:v,css:_,"data-popover-panel":!0,"data-popover-open":o||void 0},h),r))};EX.propTypes={element:jl.default.oneOf(["div"]),paddingSize:jl.default.any,borderRadius:jl.default.any,grow:jl.default.bool,panelRef:jl.default.any,className:jl.default.string,"aria-label":jl.default.string,"data-test-subj":jl.default.string,css:jl.default.any,isOpen:jl.default.bool,isAttached:jl.default.bool,position:jl.default.oneOfType([jl.default.any.isRequired,jl.default.oneOf([null])]),hasDragDrop:jl.default.bool};function $9(e){"@babel/helpers - typeof";return $9=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},$9(e)}var gJt=["anchorPosition","button","insert","isOpen","ownFocus","children","className","closePopover","panelClassName","panelPaddingSize","panelProps","panelRef","panelStyle","popoverScreenReaderText","popoverRef","hasArrow","arrowChildren","repositionOnScroll","repositionToCrossAxis","hasDragDrop","zIndex","attachToAnchor","display","offset","onPositionChange","buffer","aria-label","aria-labelledby","container","focusTrapProps","initialFocus","tabIndex"];function V9(){return V9=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bJt(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 RPe(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 PX(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);re.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ZJt(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}var Jme=(0,Tl.createContext)(0),TX=function(t){var r,n=t.children,o=t.className,i=t.closePopover,c=t.anchorPosition,d=c===void 0?"downLeft":c,h=t.attachToAnchor,v=h===void 0?!0:h,w=t.repositionToCrossAxis,_=w===void 0?!1:w,I=t.display,R=I===void 0?"block":I,D=t.panelPaddingSize,F=D===void 0?"s":D,A=t.closeOnScroll,N=A===void 0?!1:A,H=t.ownFocus,q=H===void 0?!1:H,Y=t.disableFocusTrap,ee=Y===void 0?!1:Y,ne=t.focusTrapProps,te=t.input,de=t.fullWidth,fe=de===void 0?!1:de,ye=t.panelMinWidth,Ie=ye===void 0?0:ye,he=t.onPanelResize,be=t.inputRef,Se=t.panelRef,Te=$Jt(t,LJt),Pe=(0,JPe.default)("euiInputPopover",o),Ve=ur(),De=EV(Ve),He=(0,Tl.useRef)(null),Je=(0,Tl.useState)(null),vt=UPe(Je,2),Qe=vt[0],Ne=vt[1],Nt=(0,Tl.useState)(null),Vt=UPe(Nt,2),Ke=Vt[0],st=Vt[1],Tt=Vg([Ne,be]),wr=Vg([st,Se]),Rt=xhe(Qe,"width").width,Ut=(0,Tl.useMemo)(function(){return Rt=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function YJt(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}var Oo=function(t){var r=t.className,n=t.size,o=n===void 0?"l":n,i=KJt(t,UJt),c=mt(XPe),d=(0,KPe.default)("euiSpacer",GJt({},"euiSpacer--".concat(o),o),r),h=[c.euiSpacer,c[o]];return l("div",Xme({className:d,css:h},i))};Oo.propTypes={className:Z9.default.string,"aria-label":Z9.default.string,"data-test-subj":Z9.default.string,css:Z9.default.any,size:Z9.default.any};var QPe=T(At()),Kg=T(it());function t$(e){"@babel/helpers - typeof";return t$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t$(e)}var QJt=["size","children","className","textTransform"];function YPe(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 eXt(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function iXt(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}var q9=function(t){var r=t.size,n=r===void 0?"m":r,o=t.children,i=t.className,c=t.textTransform,d=oXt(t,QJt),h=mt(PEe),v=[h.euiTitle,c?h[c]:void 0,h[n]],w=(0,QPe.default)("euiTitle",i,o.props.className),_=eXt({css:v,className:w},d);return Sl(o,_)};q9.propTypes={className:Kg.default.string,"aria-label":Kg.default.string,"data-test-subj":Kg.default.string,css:Kg.default.any,children:Kg.default.element.isRequired,size:Kg.default.any,textTransform:Kg.default.any,id:Kg.default.string};var o$=T(z()),Ye=T(it()),Yme=T(At());var IGr=T(z()),qr=T(it());var aXt={name:"aogl4-euiCardSelect",styles:"transform:none!important;align-self:flex-end;label:euiCardSelect;"},eke=function(){return{euiCardSelect:aXt}};var sXt=["isSelected","isDisabled","disabled","color","children"];function Kme(){return Kme=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uXt(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}var CX=function(t){var r=t.isSelected,n=r===void 0?!1:r,o=t.isDisabled,i=t.disabled,c=t.color,d=t.children,h=lXt(t,sXt),v=eke(),w=[v.euiCardSelect],_=cXt(n,o||i,d);return l(u3,Kme({css:w,color:tke(c,n),size:"m",isDisabled:o||i,iconType:n?"check":void 0,role:"switch","aria-checked":n,fullWidth:!0},h),_)};CX.propTypes={href:qr.default.string,onClick:qr.default.func,children:qr.default.node,fill:qr.default.bool,color:qr.default.any,size:qr.default.any,isDisabled:qr.default.bool,className:qr.default.string,"aria-label":qr.default.string,"data-test-subj":qr.default.string,css:qr.default.any,buttonRef:qr.default.any,element:qr.default.oneOf(["a","button","span"]),isSelected:qr.default.bool,fullWidth:qr.default.bool,minWidth:qr.default.oneOfType([qr.default.any.isRequired,qr.default.oneOf([!1])]),isLoading:qr.default.bool,contentProps:qr.default.shape({className:qr.default.string,"aria-label":qr.default.string,"data-test-subj":qr.default.string,css:qr.default.any}),style:qr.default.any,type:qr.default.any,iconType:qr.default.oneOfType([qr.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,qr.default.string.isRequired,qr.default.elementType.isRequired]),iconSide:qr.default.oneOfType([qr.default.any.isRequired,qr.default.oneOf([void 0])]),textProps:qr.default.oneOfType([qr.default.shape({className:qr.default.string,"aria-label":qr.default.string,"data-test-subj":qr.default.string,css:qr.default.any,ref:qr.default.any,"data-text":qr.default.string}).isRequired,qr.default.oneOf([!1])]),iconSize:qr.default.any};function cXt(e,t,r){if(r)return r;var n;return e?n=l(Zt,{token:"euiCardSelect.selected",default:"Selected"}):t?n=l(Zt,{token:"euiCardSelect.unavailable",default:"Unavailable"}):n=l(Zt,{token:"euiCardSelect.select",default:"Select"}),n}function tke(e,t){var r;return e?r=e:t?r="success":r="text",r}var pXt="m",dXt="s",fXt={name:"reymun-disabled",styles:"filter:grayscale(100%);label:disabled;"},hXt={name:"cr3wz7-euiCard__content",styles:"flex-grow:1;label:euiCard__content;"},mXt={name:"1kw0yxn-horizontal",styles:"flex-direction:row;align-items:flex-start;label:horizontal;"},vXt={name:"omnk2l-vertical",styles:"flex-direction:column;label:vertical;"},gXt={name:"1lyvdpf-euiCard__main",styles:"display:flex;inline-size:100%;flex-grow:1;label:euiCard__main;"},rke=function(t,r){var n=t.euiTheme,o=p9(t,r),i=p9(t,pXt),c=p9(t,dXt);return{card:{euiCard:Q(`display:flex;align-items:flex-start;justify-content:space-between;flex-direction:column;&:has( + );};label:right;`)}}};var fJt=["children","className","isOpen","isAttached","hasDragDrop","position"];function Zme(){return Zme=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mJt(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}var APe="l",vJt=(0,EX.createContext)({paddingSize:APe}),PX=function(t){var r=t.children,n=t.className,o=t.isOpen,i=t.isAttached,c=t.hasDragDrop,d=t.position,h=hJt(t,fJt),v=(0,MPe.default)("euiPopover__panel",n),w=ur(),_=(0,EX.useMemo)(function(){var I=CPe(w),R=w.colorMode.toLowerCase(),D=[I.euiPopover__panel,I[R],o&&I.isOpen];return c?[].concat(D,[I.hasDragDrop.hasDragDrop,d&&I.hasDragDrop[d]]):i?[].concat(D,[I.isAttached.isAttached,d&&I.isAttached[d]]):[].concat(D,[I.hasTransform.hasTransform,o&&d&&I.hasTransform[d]])},[w,o,d,i,c]);return l(vJt.Provider,{value:{paddingSize:h.paddingSize||APe}},l(kl,Zme({className:v,css:_,"data-popover-panel":!0,"data-popover-open":o||void 0},h),r))};PX.propTypes={element:jl.default.oneOf(["div"]),paddingSize:jl.default.any,borderRadius:jl.default.any,grow:jl.default.bool,panelRef:jl.default.any,className:jl.default.string,"aria-label":jl.default.string,"data-test-subj":jl.default.string,css:jl.default.any,isOpen:jl.default.bool,isAttached:jl.default.bool,position:jl.default.oneOfType([jl.default.any.isRequired,jl.default.oneOf([null])]),hasDragDrop:jl.default.bool};function $9(e){"@babel/helpers - typeof";return $9=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},$9(e)}var gJt=["anchorPosition","button","insert","isOpen","ownFocus","children","className","closePopover","panelClassName","panelPaddingSize","panelProps","panelRef","panelStyle","popoverScreenReaderText","popoverRef","hasArrow","arrowChildren","repositionOnScroll","repositionToCrossAxis","hasDragDrop","zIndex","attachToAnchor","display","offset","onPositionChange","buffer","aria-label","aria-labelledby","container","focusTrapProps","initialFocus","tabIndex"];function V9(){return V9=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bJt(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 RPe(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 kX(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);re.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ZJt(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}var Jme=(0,Tl.createContext)(0),CX=function(t){var r,n=t.children,o=t.className,i=t.closePopover,c=t.anchorPosition,d=c===void 0?"downLeft":c,h=t.attachToAnchor,v=h===void 0?!0:h,w=t.repositionToCrossAxis,_=w===void 0?!1:w,I=t.display,R=I===void 0?"block":I,D=t.panelPaddingSize,F=D===void 0?"s":D,A=t.closeOnScroll,N=A===void 0?!1:A,H=t.ownFocus,q=H===void 0?!1:H,Y=t.disableFocusTrap,ee=Y===void 0?!1:Y,ne=t.focusTrapProps,te=t.input,de=t.fullWidth,fe=de===void 0?!1:de,ye=t.panelMinWidth,Ie=ye===void 0?0:ye,ve=t.onPanelResize,Oe=t.inputRef,be=t.panelRef,Te=$Jt(t,LJt),Pe=(0,JPe.default)("euiInputPopover",o),Re=ur(),Ae=PV(Re),Ve=(0,Tl.useRef)(null),Je=(0,Tl.useState)(null),pt=UPe(Je,2),Qe=pt[0],Fe=pt[1],Nt=(0,Tl.useState)(null),Vt=UPe(Nt,2),Ke=Vt[0],st=Vt[1],Tt=$g([Fe,Oe]),wr=$g([st,be]),Rt=xhe(Qe,"width").width,Ut=(0,Tl.useMemo)(function(){return Rt=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function YJt(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}var Oo=function(t){var r=t.className,n=t.size,o=n===void 0?"l":n,i=KJt(t,UJt),c=vt(XPe),d=(0,KPe.default)("euiSpacer",GJt({},"euiSpacer--".concat(o),o),r),h=[c.euiSpacer,c[o]];return l("div",Xme({className:d,css:h},i))};Oo.propTypes={className:Z9.default.string,"aria-label":Z9.default.string,"data-test-subj":Z9.default.string,css:Z9.default.any,size:Z9.default.any};var QPe=T(At()),Yg=T(it());function r$(e){"@babel/helpers - typeof";return r$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r$(e)}var QJt=["size","children","className","textTransform"];function YPe(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 eXt(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function iXt(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}var q9=function(t){var r=t.size,n=r===void 0?"m":r,o=t.children,i=t.className,c=t.textTransform,d=oXt(t,QJt),h=vt(PEe),v=[h.euiTitle,c?h[c]:void 0,h[n]],w=(0,QPe.default)("euiTitle",i,o.props.className),_=eXt({css:v,className:w},d);return Sl(o,_)};q9.propTypes={className:Yg.default.string,"aria-label":Yg.default.string,"data-test-subj":Yg.default.string,css:Yg.default.any,children:Yg.default.element.isRequired,size:Yg.default.any,textTransform:Yg.default.any,id:Yg.default.string};var i$=T(z()),Ye=T(it()),Yme=T(At());var SGr=T(z()),qr=T(it());var aXt={name:"aogl4-euiCardSelect",styles:"transform:none!important;align-self:flex-end;label:euiCardSelect;"},eke=function(){return{euiCardSelect:aXt}};var sXt=["isSelected","isDisabled","disabled","color","children"];function Kme(){return Kme=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uXt(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}var MX=function(t){var r=t.isSelected,n=r===void 0?!1:r,o=t.isDisabled,i=t.disabled,c=t.color,d=t.children,h=lXt(t,sXt),v=eke(),w=[v.euiCardSelect],_=cXt(n,o||i,d);return l(u3,Kme({css:w,color:tke(c,n),size:"m",isDisabled:o||i,iconType:n?"check":void 0,role:"switch","aria-checked":n,fullWidth:!0},h),_)};MX.propTypes={href:qr.default.string,onClick:qr.default.func,children:qr.default.node,fill:qr.default.bool,color:qr.default.any,size:qr.default.any,isDisabled:qr.default.bool,className:qr.default.string,"aria-label":qr.default.string,"data-test-subj":qr.default.string,css:qr.default.any,buttonRef:qr.default.any,element:qr.default.oneOf(["a","button","span"]),isSelected:qr.default.bool,fullWidth:qr.default.bool,minWidth:qr.default.oneOfType([qr.default.any.isRequired,qr.default.oneOf([!1])]),isLoading:qr.default.bool,contentProps:qr.default.shape({className:qr.default.string,"aria-label":qr.default.string,"data-test-subj":qr.default.string,css:qr.default.any}),style:qr.default.any,type:qr.default.any,iconType:qr.default.oneOfType([qr.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,qr.default.string.isRequired,qr.default.elementType.isRequired]),iconSide:qr.default.oneOfType([qr.default.any.isRequired,qr.default.oneOf([void 0])]),textProps:qr.default.oneOfType([qr.default.shape({className:qr.default.string,"aria-label":qr.default.string,"data-test-subj":qr.default.string,css:qr.default.any,ref:qr.default.any,"data-text":qr.default.string}).isRequired,qr.default.oneOf([!1])]),iconSize:qr.default.any};function cXt(e,t,r){if(r)return r;var n;return e?n=l(Zt,{token:"euiCardSelect.selected",default:"Selected"}):t?n=l(Zt,{token:"euiCardSelect.unavailable",default:"Unavailable"}):n=l(Zt,{token:"euiCardSelect.select",default:"Select"}),n}function tke(e,t){var r;return e?r=e:t?r="success":r="text",r}var pXt="m",dXt="s",fXt={name:"reymun-disabled",styles:"filter:grayscale(100%);label:disabled;"},hXt={name:"cr3wz7-euiCard__content",styles:"flex-grow:1;label:euiCard__content;"},mXt={name:"1kw0yxn-horizontal",styles:"flex-direction:row;align-items:flex-start;label:horizontal;"},vXt={name:"omnk2l-vertical",styles:"flex-direction:column;label:vertical;"},gXt={name:"1lyvdpf-euiCard__main",styles:"display:flex;inline-size:100%;flex-grow:1;label:euiCard__main;"},rke=function(t,r){var n=t.euiTheme,o=p9(t,r),i=p9(t,pXt),c=p9(t,dXt);return{card:{euiCard:Q(`display:flex;align-items:flex-start;justify-content:space-between;flex-direction:column;&:has( [class*='euiCard__text'][class*='-interactive']:focus:focus-visible ){outline:`,n.focus.width," solid currentColor;};label:euiCard;"),aligned:{center:Q(Tn("center")," align-items:center;;label:center;"),left:Q(Tn("left")," align-items:flex-start;;label:left;"),right:Q(Tn("right")," align-items:flex-end;;label:right;")},disabled:Q("cursor:not-allowed;background-color:",Vd(t,"disabled"),";color:",n.colors.disabledText,";;label:disabled;")},main:{euiCard__main:gXt,layout:{vertical:vXt,horizontal:mXt}},content:{euiCard__content:hXt,layout:{vertical:Q(pe("width","100%"),";;label:vertical;"),horizontal:Q(pe("width","auto"),";;label:horizontal;")}},euiCard__children:Q(pe("margin-top",c),";;label:euiCard__children;"),euiCard__description:Q(pe("margin-top",c),";;label:euiCard__description;"),euiCard__footer:Q("flex-grow:0;",pe("width","100%"),pe("margin-top",i),";;label:euiCard__footer;"),top:{euiCard__top:Q("flex-grow:0;font-size:0;position:relative;",pe("margin-bottom",i),";;label:euiCard__top;"),layout:{vertical:Q(pe("width","100%"),";;label:vertical;"),horizontal:Q(pe("width","auto"),";;label:horizontal;")},disabled:fXt},image:{euiCard__image:Q("position:relative;overflow:hidden;",pe("width","calc(100% + (".concat(o," * 2))"))," ",pe("left","-".concat(o))," ",pe("top","-".concat(o)),pe("margin-bottom","-".concat(o)),pe("border-top-left-radius","calc(".concat(n.border.radius.medium," - ").concat(n.border.width.thin,")"))," ",qn["border-top-right-radius"],":calc(",n.border.radius.medium," - ",n.border.width.thin,");img{",pe("width","100%"),";};label:euiCard__image;"),transparent:Q("border-radius:",n.border.radius.medium,";;label:transparent;")},icon:{euiCard__icon:Q(";label:euiCard__icon;"),withImage:Q("position:absolute;",pe("top","50%")," ",pe("left","50%"),`transform:translate( -50%, calc(-50% + -`,o,`) - )!important;;label:withImage;`),layout:{vertical:Q(pe("margin-top",c),";;label:vertical;"),horizontal:Q(pe("margin-right",i),";;label:horizontal;")}}}},yXt={name:"r8agzg-euiCard__text",styles:"font:inherit;color:inherit;cursor:inherit;label:euiCard__text;"},nke=function(t){var r=t.euiTheme;return{euiCard__text:yXt,interactive:Q("outline-offset:",r.size.xxs,";.euiCard:hover &,.euiCard:focus &,&:hover,&:focus{text-decoration:underline;}",e8e,"{outline:none!important;};label:interactive;"),aligned:{center:Q(Tn("center"),";;label:center;"),left:Q(Tn("left"),";;label:left;"),right:Q(Tn("right"),";;label:right;")},disabled:Q("color:",r.colors.disabledText,";;label:disabled;")}},oke=function(t,r){var n=t.euiTheme,o=p9(t,r);return{hasBetaBadge:Q("position:relative;overflow:visible;",pe("padding-top","calc(".concat(o," + ").concat(n.size.s,")")),";;label:hasBetaBadge;"),euiCard__betaBadgeAnchor:Q("line-height:0;position:absolute;",pe("top","0")," ",pe("left","50%")," transform:translateX(-50%) translateY(-50%);z-index:3;",pe("min-width","min(30%, 112px)")," ",pe("max-width","calc(100% - (".concat(o," * 2))")),";;label:euiCard__betaBadgeAnchor;"),euiCard__betaBadge:Q(pe("width","100%"),";;label:euiCard__betaBadge;")}};function n$(e){"@babel/helpers - typeof";return n$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n$(e)}var bXt=["className","description","isDisabled","title","titleElement","titleSize","icon","image","children","footer","onClick","href","rel","target","textAlign","betaBadgeProps","layout","selectable","display","paddingSize"],wXt=["anchorProps"];function r$(){return r$=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function SXt(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}var fc=function(t){var r=t.className,n=t.description,o=t.isDisabled,i=t.title,c=t.titleElement,d=c===void 0?"p":c,h=t.titleSize,v=h===void 0?"s":h,w=t.icon,_=t.image,I=t.children,R=t.footer,D=t.onClick,F=t.href,A=t.rel,N=t.target,H=t.textAlign,q=H===void 0?"center":H,Y=t.betaBadgeProps,ee=t.layout,ne=ee===void 0?"vertical":ee,te=t.selectable,de=t.display,fe=t.paddingSize,ye=fe===void 0?"m":fe,Ie=ske(t,bXt),he=!F||$d(F),be=o||!he,Se=!be&&(D||F||te&&!te.isDisabled),Te=ur(),Pe=rke(Te,ye),Ve=[Pe.card.euiCard,Pe.card.aligned[ne==="horizontal"?"left":q],be&&Pe.card.disabled],De=[Pe.content.euiCard__content,Pe.content.layout[ne]],He=[Pe.main.euiCard__main,Pe.main.layout[ne]],Je=nke(Te),vt=[Je.euiCard__text,Je.aligned[ne==="horizontal"?"left":q],Se&&Je.interactive,be&&Je.disabled],Qe=null,Ne=function(Ri){Qe&&Qe!==Ri.target&&!Qe.contains(Ri.target)&&Qe.click()};if(ne==="horizontal"&&(_||R||q!=="center"))throw new Error('EuiCard: `layout="horizontal"` cannot be used in conjunction with `image`, `footer`, or `textAlign`.');var Nt=(0,Yme.default)("euiCard",r),Vt=Ph(),Ke=n?"".concat(Vt,"Description"):"",st;if(_&&ne==="vertical")if((0,o$.isValidElement)(_)||typeof _=="string"){var Tt=[Pe.image.euiCard__image,de==="transparent"&&Pe.image.transparent];st=l("div",{className:"euiCard__image",css:Tt},(0,o$.isValidElement)(_)?_:l("img",{src:_,alt:""}))}else st=null;var wr;if(w){var Rt=[Pe.icon.euiCard__icon,Pe.icon.layout[ne],st&&Pe.icon.withImage];wr=Sl(w,{className:(0,Yme.default)(w.props.className,"euiCard__icon"),css:Rt})}var Ut;if(st||wr){var vr=[Pe.top.euiCard__top,Pe.top.layout[ne],be&&Pe.top.disabled];Ut=l("div",{className:"euiCard__top",css:vr},st,wr)}var Sr,Er="",po;if(Y!=null&&Y.label){var Pn=oke(Te,ye);po=Pn.hasBetaBadge;var Nr=Y.anchorProps,Wo=ske(Y,wXt),Cr=[Pn.euiCard__betaBadgeAnchor,Nr?.css],St=[Pn.euiCard__betaBadge,Y?.css];Er="".concat(Vt,"BetaBadge"),Sr=l(VJ,r$({color:be&&!Y.onClick&&!Y.href?"subdued":"hollow"},Wo,{css:St,anchorProps:ake(ake({},Nr),{},{css:Cr}),id:Er}))}te&&be&&te.isDisabled===void 0&&(te.isDisabled=be);var tn;te&&(tn=l(o$.default.Fragment,null,ye!=="none"&&l(Oo,{size:ye||"m"}),l(CX,r$({"aria-describedby":"".concat(Vt,"Title ").concat(Ke)},te,{buttonRef:function(Ri){Qe=Ri}}))));var Ks=d,hs;!be&&F?hs=l("a",{className:"euiCard__titleAnchor",css:vt,onClick:D,href:F,target:N,"aria-describedby":Ke,rel:va({href:F,target:N,rel:A}),ref:function(Ri){Qe=Ri}},i):be||D?hs=l("button",{className:"euiCard__titleButton",css:vt,onClick:D,disabled:be,"aria-describedby":"".concat(Er," ").concat(Ke),ref:function(Ri){Qe=Ri}},i):hs=l("span",{css:vt},i);var Pr;if(I){var or=[Pe.euiCard__children];Pr=l("div",{css:or},I)}var ir;if(n){var Mr=[Pe.euiCard__description];ir=l(Xt,{id:Ke,size:"s",css:Mr},l("p",null,n))}var Ur;if(ne==="vertical"&&R){var ms=[Pe.euiCard__footer];Ur=l("div",{css:ms},R)}return l(kl,r$({element:"div",className:Nt,css:[].concat(Ve,[po]),onClick:Se?Ne:void 0,color:be?"subdued":de,hasShadow:!(be||de),hasBorder:de?!1:void 0,paddingSize:ye},Ie),l("div",{className:"euiCard__main",css:He},Ut,l("div",{className:"euiCard__content",css:De},l(q9,{id:"".concat(Vt,"Title"),className:"euiCard__title",size:v},l(Ks,null,hs)),ir,Pr),Sr,Ur),tn)};fc.propTypes={layout:Ye.default.oneOfType([Ye.default.oneOf(["vertical"]),Ye.default.oneOf(["horizontal"]).isRequired]),textAlign:Ye.default.any,footer:Ye.default.node,image:Ye.default.oneOfType([Ye.default.string.isRequired,Ye.default.element.isRequired]),title:Ye.default.any.isRequired,titleElement:Ye.default.oneOf(["h2","h3","h4","h5","h6","span","p"]),titleSize:Ye.default.oneOf(["s","xs"]),description:Ye.default.any,icon:Ye.default.oneOfType([Ye.default.element.isRequired,Ye.default.oneOf([null])]),children:Ye.default.node,onClick:Ye.default.oneOfType([Ye.default.func.isRequired,Ye.default.func.isRequired]),isDisabled:Ye.default.bool,href:Ye.default.string,target:Ye.default.string,rel:Ye.default.string,betaBadgeProps:Ye.default.shape({className:Ye.default.string,"aria-label":Ye.default.string,"data-test-subj":Ye.default.string,css:Ye.default.any,onClick:Ye.default.func,onClickAriaLabel:Ye.default.any,href:Ye.default.string,target:Ye.default.string,rel:Ye.default.string,iconType:Ye.default.oneOfType([Ye.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,Ye.default.string.isRequired,Ye.default.elementType.isRequired]),label:Ye.default.oneOfType([Ye.default.node.isRequired,Ye.default.oneOfType([Ye.default.node.isRequired,Ye.default.string.isRequired]).isRequired]).isRequired,tooltipContent:Ye.default.oneOfType([Ye.default.node,Ye.default.oneOfType([Ye.default.node,Ye.default.node.isRequired])]),tooltipPosition:Ye.default.oneOf(["top","right","bottom","left"]),anchorProps:Ye.default.shape({className:Ye.default.string,"aria-label":Ye.default.string,"data-test-subj":Ye.default.string,css:Ye.default.any}),title:Ye.default.oneOfType([Ye.default.string,Ye.default.oneOfType([Ye.default.string.isRequired,Ye.default.string])]),color:Ye.default.any,size:Ye.default.any,alignment:Ye.default.any}),display:Ye.default.any,paddingSize:Ye.default.any,selectable:Ye.default.shape({href:Ye.default.string,onClick:Ye.default.func,children:Ye.default.node,fill:Ye.default.bool,color:Ye.default.any,size:Ye.default.any,isDisabled:Ye.default.bool,className:Ye.default.string,"aria-label":Ye.default.string,"data-test-subj":Ye.default.string,css:Ye.default.any,buttonRef:Ye.default.any,element:Ye.default.oneOf(["a","button","span"]),isSelected:Ye.default.bool,fullWidth:Ye.default.bool,minWidth:Ye.default.oneOfType([Ye.default.any.isRequired,Ye.default.oneOf([!1])]),isLoading:Ye.default.bool,contentProps:Ye.default.shape({className:Ye.default.string,"aria-label":Ye.default.string,"data-test-subj":Ye.default.string,css:Ye.default.any}),style:Ye.default.any,type:Ye.default.any,iconType:Ye.default.oneOfType([Ye.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,Ye.default.string.isRequired,Ye.default.elementType.isRequired]),iconSide:Ye.default.oneOfType([Ye.default.any.isRequired,Ye.default.oneOf([void 0])]),textProps:Ye.default.oneOfType([Ye.default.shape({className:Ye.default.string,"aria-label":Ye.default.string,"data-test-subj":Ye.default.string,css:Ye.default.any,ref:Ye.default.any,"data-text":Ye.default.string}).isRequired,Ye.default.oneOf([!1])]),iconSize:Ye.default.any}),hasBorder:Ye.default.bool};var uke=T(z()),Gs=T(it()),Qme=T(At());var IXt={name:"1m8ob9b-readOnly",styles:"cursor:default;label:readOnly;"},EXt={name:"u54glv-indeterminate",styles:"transform:scale(0.5);label:indeterminate;"},lke=function(t){var r=t.euiTheme,n=zIe(t),o=PV(t),i=o.colors.unselectedBorder;return{euiCheckbox:Q(n.wrapper,";label:euiCheckbox;"),input:{euiCheckbox__square:Q(n.input.fauxInput," border-radius:",r.border.radius.small,";;label:euiCheckbox__square;"),hasLabel:n.input.hasLabel,enabled:{selected:Q(n.input.enabled.selected,";label:selected;"),unselected:Q(n.input.enabled.unselected,";label:unselected;")},disabled:{selected:Q(n.input.disabled.selected,";label:selected;"),unselected:Q(n.input.disabled.unselected,";label:unselected;")},readOnly:Q("&:has(input:focus-visible){outline:",r.focus.width," solid ",i,";}&:has(input:focus){border-color:",i,";};label:readOnly;"),icon:{euiCheckbox__icon:Q(";label:euiCheckbox__icon;"),check:Q(n.input.icon," stroke:currentColor;;label:check;"),indeterminate:EXt},euiCheckbox__input:Q(n.input.hiddenInput," &[readonly]{cursor:default;};label:euiCheckbox__input;")},label:{euiCheckbox__label:Q(n.label.label,";label:euiCheckbox__label;"),enabled:n.label.enabled,disabled:Q(n.label.disabled,";label:disabled;"),readOnly:IXt}}};var PXt=["className","id","checked","label","onChange","type","disabled","readOnly","indeterminate","inputRef","labelProps"];function MX(){return MX=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jXt(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}var i$=function(t){var r=t.className,n=t.id,o=t.checked,i=o===void 0?!1:o,c=t.label,d=t.onChange,h=t.type,v=t.disabled,w=v===void 0?!1:v,_=t.readOnly,I=_===void 0?!1:_,R=t.indeterminate,D=R===void 0?!1:R,F=t.inputRef,A=t.labelProps,N=kXt(t,PXt),H=(0,Qme.default)("euiCheckbox",r),q=mt(lke),Y=[q.input.euiCheckbox__square,!!c&&q.input.hasLabel,w?i||D?q.input.disabled.selected:q.input.disabled.unselected:i||D?q.input.enabled.selected:q.input.enabled.unselected,I&&q.input.readOnly],ee=(0,Qme.default)("euiCheckbox__label",A?.className),ne=[q.label.euiCheckbox__label,w?q.label.disabled:q.label.enabled,I&&q.label.readOnly,A?.css],te=[q.input.icon.euiCheckbox__icon,D?q.input.icon.indeterminate:q.input.icon.check],de=(0,uke.useCallback)(function(ye){ye&&(ye.indeterminate=D)},[D]),fe=Vg([F,de]);return l("div",{css:q.euiCheckbox,className:H},l("div",{css:Y,className:"euiCheckbox__square"},l(mr,{css:te,type:D?"stopFilled":i?"check":"empty"}),l("input",MX({css:q.input.euiCheckbox__input,className:"euiCheckbox__input",type:"checkbox",id:n,checked:i,onChange:d,disabled:w,readOnly:I,ref:fe},N))),c&&l("label",MX({},A,{css:ne,className:ee,htmlFor:n}),c))};i$.propTypes={id:Gs.default.string.isRequired,checked:Gs.default.bool,onChange:Gs.default.any.isRequired,inputRef:Gs.default.func,label:Gs.default.node,disabled:Gs.default.bool,indeterminate:Gs.default.bool,labelProps:Gs.default.shape({className:Gs.default.string,"aria-label":Gs.default.string,"data-test-subj":Gs.default.string,css:Gs.default.any}),className:Gs.default.string,"aria-label":Gs.default.string,"data-test-subj":Gs.default.string,css:Gs.default.any};var TXt=["fontWeight"];function CXt(e,t){if(e==null)return{};var r,n,o=MXt(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function MXt(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}var AXt=function(t){var r=t.euiTheme,n=To(t,"xxxs"),o=n.fontWeight,i=CXt(n,TXt),c=jh([i]).styles;return` + )!important;;label:withImage;`),layout:{vertical:Q(pe("margin-top",c),";;label:vertical;"),horizontal:Q(pe("margin-right",i),";;label:horizontal;")}}}},yXt={name:"r8agzg-euiCard__text",styles:"font:inherit;color:inherit;cursor:inherit;label:euiCard__text;"},nke=function(t){var r=t.euiTheme;return{euiCard__text:yXt,interactive:Q("outline-offset:",r.size.xxs,";.euiCard:hover &,.euiCard:focus &,&:hover,&:focus{text-decoration:underline;}",e8e,"{outline:none!important;};label:interactive;"),aligned:{center:Q(Tn("center"),";;label:center;"),left:Q(Tn("left"),";;label:left;"),right:Q(Tn("right"),";;label:right;")},disabled:Q("color:",r.colors.disabledText,";;label:disabled;")}},oke=function(t,r){var n=t.euiTheme,o=p9(t,r);return{hasBetaBadge:Q("position:relative;overflow:visible;",pe("padding-top","calc(".concat(o," + ").concat(n.size.s,")")),";;label:hasBetaBadge;"),euiCard__betaBadgeAnchor:Q("line-height:0;position:absolute;",pe("top","0")," ",pe("left","50%")," transform:translateX(-50%) translateY(-50%);z-index:3;",pe("min-width","min(30%, 112px)")," ",pe("max-width","calc(100% - (".concat(o," * 2))")),";;label:euiCard__betaBadgeAnchor;"),euiCard__betaBadge:Q(pe("width","100%"),";;label:euiCard__betaBadge;")}};function o$(e){"@babel/helpers - typeof";return o$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o$(e)}var bXt=["className","description","isDisabled","title","titleElement","titleSize","icon","image","children","footer","onClick","href","rel","target","textAlign","betaBadgeProps","layout","selectable","display","paddingSize"],wXt=["anchorProps"];function n$(){return n$=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function SXt(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}var fc=function(t){var r=t.className,n=t.description,o=t.isDisabled,i=t.title,c=t.titleElement,d=c===void 0?"p":c,h=t.titleSize,v=h===void 0?"s":h,w=t.icon,_=t.image,I=t.children,R=t.footer,D=t.onClick,F=t.href,A=t.rel,N=t.target,H=t.textAlign,q=H===void 0?"center":H,Y=t.betaBadgeProps,ee=t.layout,ne=ee===void 0?"vertical":ee,te=t.selectable,de=t.display,fe=t.paddingSize,ye=fe===void 0?"m":fe,Ie=ske(t,bXt),ve=!F||$d(F),Oe=o||!ve,be=!Oe&&(D||F||te&&!te.isDisabled),Te=ur(),Pe=rke(Te,ye),Re=[Pe.card.euiCard,Pe.card.aligned[ne==="horizontal"?"left":q],Oe&&Pe.card.disabled],Ae=[Pe.content.euiCard__content,Pe.content.layout[ne]],Ve=[Pe.main.euiCard__main,Pe.main.layout[ne]],Je=nke(Te),pt=[Je.euiCard__text,Je.aligned[ne==="horizontal"?"left":q],be&&Je.interactive,Oe&&Je.disabled],Qe=null,Fe=function(Di){Qe&&Qe!==Di.target&&!Qe.contains(Di.target)&&Qe.click()};if(ne==="horizontal"&&(_||R||q!=="center"))throw new Error('EuiCard: `layout="horizontal"` cannot be used in conjunction with `image`, `footer`, or `textAlign`.');var Nt=(0,Yme.default)("euiCard",r),Vt=Ph(),Ke=n?"".concat(Vt,"Description"):"",st;if(_&&ne==="vertical")if((0,i$.isValidElement)(_)||typeof _=="string"){var Tt=[Pe.image.euiCard__image,de==="transparent"&&Pe.image.transparent];st=l("div",{className:"euiCard__image",css:Tt},(0,i$.isValidElement)(_)?_:l("img",{src:_,alt:""}))}else st=null;var wr;if(w){var Rt=[Pe.icon.euiCard__icon,Pe.icon.layout[ne],st&&Pe.icon.withImage];wr=Sl(w,{className:(0,Yme.default)(w.props.className,"euiCard__icon"),css:Rt})}var Ut;if(st||wr){var vr=[Pe.top.euiCard__top,Pe.top.layout[ne],Oe&&Pe.top.disabled];Ut=l("div",{className:"euiCard__top",css:vr},st,wr)}var Sr,Er="",po;if(Y!=null&&Y.label){var Pn=oke(Te,ye);po=Pn.hasBetaBadge;var Nr=Y.anchorProps,Wo=ske(Y,wXt),Cr=[Pn.euiCard__betaBadgeAnchor,Nr?.css],St=[Pn.euiCard__betaBadge,Y?.css];Er="".concat(Vt,"BetaBadge"),Sr=l($J,n$({color:Oe&&!Y.onClick&&!Y.href?"subdued":"hollow"},Wo,{css:St,anchorProps:ake(ake({},Nr),{},{css:Cr}),id:Er}))}te&&Oe&&te.isDisabled===void 0&&(te.isDisabled=Oe);var tn;te&&(tn=l(i$.default.Fragment,null,ye!=="none"&&l(Oo,{size:ye||"m"}),l(MX,n$({"aria-describedby":"".concat(Vt,"Title ").concat(Ke)},te,{buttonRef:function(Di){Qe=Di}}))));var Ks=d,hs;!Oe&&F?hs=l("a",{className:"euiCard__titleAnchor",css:pt,onClick:D,href:F,target:N,"aria-describedby":Ke,rel:va({href:F,target:N,rel:A}),ref:function(Di){Qe=Di}},i):Oe||D?hs=l("button",{className:"euiCard__titleButton",css:pt,onClick:D,disabled:Oe,"aria-describedby":"".concat(Er," ").concat(Ke),ref:function(Di){Qe=Di}},i):hs=l("span",{css:pt},i);var Pr;if(I){var or=[Pe.euiCard__children];Pr=l("div",{css:or},I)}var ir;if(n){var Mr=[Pe.euiCard__description];ir=l(Xt,{id:Ke,size:"s",css:Mr},l("p",null,n))}var Ur;if(ne==="vertical"&&R){var ms=[Pe.euiCard__footer];Ur=l("div",{css:ms},R)}return l(kl,n$({element:"div",className:Nt,css:[].concat(Re,[po]),onClick:be?Fe:void 0,color:Oe?"subdued":de,hasShadow:!(Oe||de),hasBorder:de?!1:void 0,paddingSize:ye},Ie),l("div",{className:"euiCard__main",css:Ve},Ut,l("div",{className:"euiCard__content",css:Ae},l(q9,{id:"".concat(Vt,"Title"),className:"euiCard__title",size:v},l(Ks,null,hs)),ir,Pr),Sr,Ur),tn)};fc.propTypes={layout:Ye.default.oneOfType([Ye.default.oneOf(["vertical"]),Ye.default.oneOf(["horizontal"]).isRequired]),textAlign:Ye.default.any,footer:Ye.default.node,image:Ye.default.oneOfType([Ye.default.string.isRequired,Ye.default.element.isRequired]),title:Ye.default.any.isRequired,titleElement:Ye.default.oneOf(["h2","h3","h4","h5","h6","span","p"]),titleSize:Ye.default.oneOf(["s","xs"]),description:Ye.default.any,icon:Ye.default.oneOfType([Ye.default.element.isRequired,Ye.default.oneOf([null])]),children:Ye.default.node,onClick:Ye.default.oneOfType([Ye.default.func.isRequired,Ye.default.func.isRequired]),isDisabled:Ye.default.bool,href:Ye.default.string,target:Ye.default.string,rel:Ye.default.string,betaBadgeProps:Ye.default.shape({className:Ye.default.string,"aria-label":Ye.default.string,"data-test-subj":Ye.default.string,css:Ye.default.any,onClick:Ye.default.func,onClickAriaLabel:Ye.default.any,href:Ye.default.string,target:Ye.default.string,rel:Ye.default.string,iconType:Ye.default.oneOfType([Ye.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,Ye.default.string.isRequired,Ye.default.elementType.isRequired]),label:Ye.default.oneOfType([Ye.default.node.isRequired,Ye.default.oneOfType([Ye.default.node.isRequired,Ye.default.string.isRequired]).isRequired]).isRequired,tooltipContent:Ye.default.oneOfType([Ye.default.node,Ye.default.oneOfType([Ye.default.node,Ye.default.node.isRequired])]),tooltipPosition:Ye.default.oneOf(["top","right","bottom","left"]),anchorProps:Ye.default.shape({className:Ye.default.string,"aria-label":Ye.default.string,"data-test-subj":Ye.default.string,css:Ye.default.any}),title:Ye.default.oneOfType([Ye.default.string,Ye.default.oneOfType([Ye.default.string.isRequired,Ye.default.string])]),color:Ye.default.any,size:Ye.default.any,alignment:Ye.default.any}),display:Ye.default.any,paddingSize:Ye.default.any,selectable:Ye.default.shape({href:Ye.default.string,onClick:Ye.default.func,children:Ye.default.node,fill:Ye.default.bool,color:Ye.default.any,size:Ye.default.any,isDisabled:Ye.default.bool,className:Ye.default.string,"aria-label":Ye.default.string,"data-test-subj":Ye.default.string,css:Ye.default.any,buttonRef:Ye.default.any,element:Ye.default.oneOf(["a","button","span"]),isSelected:Ye.default.bool,fullWidth:Ye.default.bool,minWidth:Ye.default.oneOfType([Ye.default.any.isRequired,Ye.default.oneOf([!1])]),isLoading:Ye.default.bool,contentProps:Ye.default.shape({className:Ye.default.string,"aria-label":Ye.default.string,"data-test-subj":Ye.default.string,css:Ye.default.any}),style:Ye.default.any,type:Ye.default.any,iconType:Ye.default.oneOfType([Ye.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,Ye.default.string.isRequired,Ye.default.elementType.isRequired]),iconSide:Ye.default.oneOfType([Ye.default.any.isRequired,Ye.default.oneOf([void 0])]),textProps:Ye.default.oneOfType([Ye.default.shape({className:Ye.default.string,"aria-label":Ye.default.string,"data-test-subj":Ye.default.string,css:Ye.default.any,ref:Ye.default.any,"data-text":Ye.default.string}).isRequired,Ye.default.oneOf([!1])]),iconSize:Ye.default.any}),hasBorder:Ye.default.bool};var uke=T(z()),Gs=T(it()),Qme=T(At());var IXt={name:"1m8ob9b-readOnly",styles:"cursor:default;label:readOnly;"},EXt={name:"u54glv-indeterminate",styles:"transform:scale(0.5);label:indeterminate;"},lke=function(t){var r=t.euiTheme,n=zIe(t),o=kV(t),i=o.colors.unselectedBorder;return{euiCheckbox:Q(n.wrapper,";label:euiCheckbox;"),input:{euiCheckbox__square:Q(n.input.fauxInput," border-radius:",r.border.radius.small,";;label:euiCheckbox__square;"),hasLabel:n.input.hasLabel,enabled:{selected:Q(n.input.enabled.selected,";label:selected;"),unselected:Q(n.input.enabled.unselected,";label:unselected;")},disabled:{selected:Q(n.input.disabled.selected,";label:selected;"),unselected:Q(n.input.disabled.unselected,";label:unselected;")},readOnly:Q("&:has(input:focus-visible){outline:",r.focus.width," solid ",i,";}&:has(input:focus){border-color:",i,";};label:readOnly;"),icon:{euiCheckbox__icon:Q(";label:euiCheckbox__icon;"),check:Q(n.input.icon," stroke:currentColor;;label:check;"),indeterminate:EXt},euiCheckbox__input:Q(n.input.hiddenInput," &[readonly]{cursor:default;};label:euiCheckbox__input;")},label:{euiCheckbox__label:Q(n.label.label,";label:euiCheckbox__label;"),enabled:n.label.enabled,disabled:Q(n.label.disabled,";label:disabled;"),readOnly:IXt}}};var PXt=["className","id","checked","label","onChange","type","disabled","readOnly","indeterminate","inputRef","labelProps"];function AX(){return AX=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function jXt(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}var a$=function(t){var r=t.className,n=t.id,o=t.checked,i=o===void 0?!1:o,c=t.label,d=t.onChange,h=t.type,v=t.disabled,w=v===void 0?!1:v,_=t.readOnly,I=_===void 0?!1:_,R=t.indeterminate,D=R===void 0?!1:R,F=t.inputRef,A=t.labelProps,N=kXt(t,PXt),H=(0,Qme.default)("euiCheckbox",r),q=vt(lke),Y=[q.input.euiCheckbox__square,!!c&&q.input.hasLabel,w?i||D?q.input.disabled.selected:q.input.disabled.unselected:i||D?q.input.enabled.selected:q.input.enabled.unselected,I&&q.input.readOnly],ee=(0,Qme.default)("euiCheckbox__label",A?.className),ne=[q.label.euiCheckbox__label,w?q.label.disabled:q.label.enabled,I&&q.label.readOnly,A?.css],te=[q.input.icon.euiCheckbox__icon,D?q.input.icon.indeterminate:q.input.icon.check],de=(0,uke.useCallback)(function(ye){ye&&(ye.indeterminate=D)},[D]),fe=$g([F,de]);return l("div",{css:q.euiCheckbox,className:H},l("div",{css:Y,className:"euiCheckbox__square"},l(mr,{css:te,type:D?"stopFilled":i?"check":"empty"}),l("input",AX({css:q.input.euiCheckbox__input,className:"euiCheckbox__input",type:"checkbox",id:n,checked:i,onChange:d,disabled:w,readOnly:I,ref:fe},N))),c&&l("label",AX({},A,{css:ne,className:ee,htmlFor:n}),c))};a$.propTypes={id:Gs.default.string.isRequired,checked:Gs.default.bool,onChange:Gs.default.any.isRequired,inputRef:Gs.default.func,label:Gs.default.node,disabled:Gs.default.bool,indeterminate:Gs.default.bool,labelProps:Gs.default.shape({className:Gs.default.string,"aria-label":Gs.default.string,"data-test-subj":Gs.default.string,css:Gs.default.any}),className:Gs.default.string,"aria-label":Gs.default.string,"data-test-subj":Gs.default.string,css:Gs.default.any};var TXt=["fontWeight"];function CXt(e,t){if(e==null)return{};var r,n,o=MXt(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function MXt(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}var AXt=function(t){var r=t.euiTheme,n=To(t,"xxxs"),o=n.fontWeight,i=CXt(n,TXt),c=jh([i]).styles;return` `.concat(c,` font-weight: `).concat(r.font.weight.semiBold,`; - `).concat(K0(),` + `).concat(Y0(),` `)},cke=function(t){var r=t.euiTheme;return{euiFormLabel:Q(AXt(t)," display:inline-block;",bn,"{transition:color ",r.animation.fast," ",r.animation.resistance,";};label:euiFormLabel;"),notDisabled:` &:where([for]) { cursor: pointer; } - `,invalid:Q("color:",r.colors.danger,";;label:invalid;"),focused:Q("color:",r.colors.primary,";;label:focused;")}};var dke=T(z()),fke=T(At());var RXt={name:"n4hdkg-columnReverse",styles:"flex-direction:column-reverse;label:columnReverse;"},DXt={name:"ll8kmq-column",styles:"flex-direction:column;label:column;"},LXt={name:"1vnizo1-rowReverse",styles:"flex-direction:row-reverse;label:rowReverse;"},NXt={name:"15mvjmo-row",styles:"flex-direction:row;label:row;"},FXt={name:"nq5j9u-baseline",styles:"align-items:baseline;label:baseline;"},BXt={name:"8391db-center",styles:"align-items:center;label:center;"},zXt={name:"14j6er4-flexEnd",styles:"align-items:flex-end;label:flexEnd;"},WXt={name:"1mmtjvb-flexStart",styles:"align-items:flex-start;label:flexStart;"},HXt={name:"1uwc4oj-stretch",styles:"align-items:stretch;label:stretch;"},VXt={name:"1m1byq-center",styles:"justify-content:center;label:center;"},$Xt={name:"16lku54-spaceAround",styles:"justify-content:space-around;label:spaceAround;"},ZXt={name:"1h16bgr-spaceBetween",styles:"justify-content:space-between;label:spaceBetween;"},qXt={name:"jykwsi-spaceEvenly",styles:"justify-content:space-evenly;label:spaceEvenly;"},UXt={name:"1nfuqww-flexEnd",styles:"justify-content:flex-end;label:flexEnd;"},GXt={name:"e9miiv-flexStart",styles:"justify-content:flex-start;label:flexStart;"},JXt={name:"qg5yc9-wrap",styles:"flex-wrap:wrap;label:wrap;"},XXt={name:"4quxm4-euiFlexGroup",styles:"display:flex;align-items:stretch;flex-grow:1;label:euiFlexGroup;"},pke=function(t){var r=t.euiTheme;return{euiFlexGroup:XXt,responsive:Q(s8e(t,"m"),"{flex-wrap:wrap;&>.euiFlexItem{",pe("width","100%")," flex-basis:100%;}};label:responsive;"),wrap:JXt,gutterSizes:{none:Q(";label:none;"),xs:Q("gap:",r.size.xs,";;label:xs;"),s:Q("gap:",r.size.s,";;label:s;"),m:Q("gap:",r.size.base,";;label:m;"),l:Q("gap:",r.size.l,";;label:l;"),xl:Q("gap:",r.size.xxl,";;label:xl;")},justifyContent:{flexStart:GXt,flexEnd:UXt,spaceEvenly:qXt,spaceBetween:ZXt,spaceAround:$Xt,center:VXt},alignItems:{stretch:HXt,flexStart:WXt,flexEnd:zXt,center:BXt,baseline:FXt},direction:{row:NXt,rowReverse:LXt,column:DXt,columnReverse:RXt}}};var KXt=["className","component","gutterSize","alignItems","responsive","justifyContent","direction","wrap"];function e0e(){return e0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function QXt(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}var eKt=function(t,r){var n=t.className,o=t.component,i=o===void 0?"div":o,c=t.gutterSize,d=c===void 0?"l":c,h=t.alignItems,v=h===void 0?"stretch":h,w=t.responsive,_=w===void 0?!0:w,I=t.justifyContent,R=I===void 0?"flexStart":I,D=t.direction,F=D===void 0?"row":D,A=t.wrap,N=A===void 0?!1:A,H=YXt(t,KXt),q=mt(pke),Y=[q.euiFlexGroup,_&&!F.includes("column")&&q.responsive,N&&q.wrap,q.gutterSizes[d],q.justifyContent[R],q.alignItems[v],q.direction[F]],ee=(0,fke.default)("euiFlexGroup",n),ne=i;return l(ne,e0e({},H,{ref:r,className:ee,css:Y}))},gi=(0,dke.forwardRef)(eKt);gi.displayName="EuiFlexGroup";var AX=T(z()),hke=T(At());var U9={euiFlexItem:{name:"19hf44n-euiFlexItem",styles:"display:flex;flex-direction:column;label:euiFlexItem;"},growZero:{name:"1pat7n0-growZero",styles:"flex-grow:0;flex-basis:auto;label:growZero;"},grow:{name:"tr4wer-grow",styles:"flex-basis:0%;label:grow;"},growSizes:{1:{name:"1v6uyoj-1",styles:"flex-grow:1;label:1;"},2:{name:"1l86xxh-2",styles:"flex-grow:2;label:2;"},3:{name:"1sl79ay-3",styles:"flex-grow:3;label:3;"},4:{name:"k4pnsg-4",styles:"flex-grow:4;label:4;"},5:{name:"1cx5fxs-5",styles:"flex-grow:5;label:5;"},6:{name:"1in9iiy-6",styles:"flex-grow:6;label:6;"},7:{name:"fvh3nz-7",styles:"flex-grow:7;label:7;"},8:{name:"fjdgzc-8",styles:"flex-grow:8;label:8;"},9:{name:"1tyr8p6-9",styles:"flex-grow:9;label:9;"},10:{name:"n7polf-10",styles:"flex-grow:10;label:10;"}}};var tKt=["children","className","grow","component"];function t0e(){return t0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nKt(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}var oKt=[null,void 0,!0,!1,0,1,2,3,4,5,6,7,8,9,10],iKt=function(t,r){var n=t.children,o=t.className,i=t.grow,c=i===void 0?!0:i,d=t.component,h=d===void 0?"div":d,v=rKt(t,tKt);(0,AX.useEffect)(function(){if(oKt.indexOf(c)===-1)throw new Error("Prop `grow` passed to `EuiFlexItem` must be a boolean or an integer between 0 and 10, received `".concat(c,"`"))},[c]);var w=[U9.euiFlexItem,c?U9.grow:U9.growZero,c&&(typeof c=="number"?U9.growSizes[c]:U9.growSizes[1])],_=(0,hke.default)("euiFlexItem",o),I=h;return l(I,t0e({},v,{ref:r,css:w,className:_}),n)},qt=(0,AX.forwardRef)(iKt);qt.displayName="EuiFlexItem";var r0e=T(z()),n0e=r0e.default.createContext({defaultFullWidth:!1});function RX(){return r0e.default.useContext(n0e)}var i1=T(z()),b3=T(it());function aKt(e,t){return cKt(e)||uKt(e,t)||lKt(e,t)||sKt()}function sKt(){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 lKt(e,t){if(e){if(typeof e=="string")return mke(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)?mke(e,t):void 0}}function mke(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mKt(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}var G9=function(t){var r=t.type,n=r===void 0?"label":r,o=t.isFocused,i=t.isInvalid,c=t.isDisabled,d=t.children,h=t.className,v=hKt(t,fKt),w=mt(cke),_=[w.euiFormLabel,!c&&w.notDisabled,i&&w.invalid,o&&w.focused],I=(0,vke.default)("euiFormLabel",h,{"euiFormLabel-isFocused":o,"euiFormLabel-isInvalid":i,"euiFormLabel-isDisabled":c});return n==="legend"?l("legend",LX({css:_,className:I},v),d):l("label",LX({css:_,className:I},v),d)};G9.propTypes={type:fu.default.oneOfType([fu.default.oneOfType([fu.default.oneOf(["label"]),fu.default.oneOf(["label","legend"])]),fu.default.oneOfType([fu.default.oneOf(["legend"]).isRequired,fu.default.oneOf(["label","legend"])])]),isFocused:fu.default.bool,isInvalid:fu.default.bool,isDisabled:fu.default.bool,className:fu.default.string,"aria-label":fu.default.string,"data-test-subj":fu.default.string,css:fu.default.any};var _ke=T(z()),eo=T(it());var VJr=T(z()),J9=T(it()),yke=T(At());var gke=function(t){var r=t.euiTheme,n=t.colorMode,o=n==="DARK"?r.colors.darkShade:r.colors.mediumShade;return{euiFormControlLayoutClearButton:Q("pointer-events:all;background-color:",o,";border-radius:50%;line-height:0;&:disabled{cursor:not-allowed;background-color:",r.colors.disabled,";};label:euiFormControlLayoutClearButton;"),euiFormControlLayoutClearButton__icon:Q("transform:scale(0.5);fill:",r.colors.emptyShade,";stroke:",r.colors.emptyShade,";;label:euiFormControlLayoutClearButton__icon;"),size:{s:Q("stroke-width:",r.size.xs,";;label:s;"),m:Q("stroke-width:",r.size.xxs,";;label:m;")}}};var vKt=["className","onClick","size"];function o0e(){return o0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yKt(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}var i0e=function(t){var r=t.className,n=t.onClick,o=t.size,i=o===void 0?"m":o,c=gKt(t,vKt),d=(0,yke.default)("euiFormControlLayoutClearButton",r),h=mt(gke),v=[h.euiFormControlLayoutClearButton__icon,h.size[i]],w=wo("euiFormControlLayoutClearButton.label","Clear input");return l("button",o0e({type:"button",css:h.euiFormControlLayoutClearButton,className:d,onClick:n,"aria-label":w},c),l(mr,{css:v,className:"euiFormControlLayoutClearButton__icon",type:"cross",size:i}))};i0e.propTypes={className:J9.default.string,"aria-label":J9.default.string,"data-test-subj":J9.default.string,css:J9.default.any,size:J9.default.oneOf(["s","m"])};var cp=T(it()),KJr=T(z());var bke=T(At());var bKt=["className","onClick","type","iconRef","size","color","disabled"];function NX(){return NX=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function OKt(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}var FX=function(t){var r=t.className,n=t.onClick,o=t.type,i=t.iconRef,c=t.size,d=t.color,h=t.disabled,v=wKt(t,bKt),w=(0,bke.default)("euiFormControlLayoutCustomIcon",r),_=[a0e.euiFormControlLayoutCustomIcon,n?a0e.clickable:a0e.unclickable];return n?l("button",NX({type:"button",onClick:n,disabled:h,css:_,className:w,ref:i},v),l(mr,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:c,type:o,color:d})):l("span",NX({css:_,className:w,ref:i},v),l(mr,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:c,type:o,color:d}))};FX.propTypes={className:cp.default.string,"aria-label":cp.default.string,"data-test-subj":cp.default.string,css:cp.default.any,type:cp.default.oneOfType([cp.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,cp.default.string.isRequired,cp.default.elementType.isRequired]).isRequired,size:cp.default.any,iconRef:cp.default.oneOfType([cp.default.string.isRequired,cp.default.func.isRequired])};var a0e={euiFormControlLayoutCustomIcon:{name:"7d1ma8-euiFormControlLayoutCustomIcon",styles:"font-size:0;label:euiFormControlLayoutCustomIcon;"},unclickable:` + `,invalid:Q("color:",r.colors.danger,";;label:invalid;"),focused:Q("color:",r.colors.primary,";;label:focused;")}};var dke=T(z()),fke=T(At());var RXt={name:"n4hdkg-columnReverse",styles:"flex-direction:column-reverse;label:columnReverse;"},DXt={name:"ll8kmq-column",styles:"flex-direction:column;label:column;"},LXt={name:"1vnizo1-rowReverse",styles:"flex-direction:row-reverse;label:rowReverse;"},NXt={name:"15mvjmo-row",styles:"flex-direction:row;label:row;"},FXt={name:"nq5j9u-baseline",styles:"align-items:baseline;label:baseline;"},BXt={name:"8391db-center",styles:"align-items:center;label:center;"},zXt={name:"14j6er4-flexEnd",styles:"align-items:flex-end;label:flexEnd;"},WXt={name:"1mmtjvb-flexStart",styles:"align-items:flex-start;label:flexStart;"},HXt={name:"1uwc4oj-stretch",styles:"align-items:stretch;label:stretch;"},VXt={name:"1m1byq-center",styles:"justify-content:center;label:center;"},$Xt={name:"16lku54-spaceAround",styles:"justify-content:space-around;label:spaceAround;"},ZXt={name:"1h16bgr-spaceBetween",styles:"justify-content:space-between;label:spaceBetween;"},qXt={name:"jykwsi-spaceEvenly",styles:"justify-content:space-evenly;label:spaceEvenly;"},UXt={name:"1nfuqww-flexEnd",styles:"justify-content:flex-end;label:flexEnd;"},GXt={name:"e9miiv-flexStart",styles:"justify-content:flex-start;label:flexStart;"},JXt={name:"qg5yc9-wrap",styles:"flex-wrap:wrap;label:wrap;"},XXt={name:"4quxm4-euiFlexGroup",styles:"display:flex;align-items:stretch;flex-grow:1;label:euiFlexGroup;"},pke=function(t){var r=t.euiTheme;return{euiFlexGroup:XXt,responsive:Q(s8e(t,"m"),"{flex-wrap:wrap;&>.euiFlexItem{",pe("width","100%")," flex-basis:100%;}};label:responsive;"),wrap:JXt,gutterSizes:{none:Q(";label:none;"),xs:Q("gap:",r.size.xs,";;label:xs;"),s:Q("gap:",r.size.s,";;label:s;"),m:Q("gap:",r.size.base,";;label:m;"),l:Q("gap:",r.size.l,";;label:l;"),xl:Q("gap:",r.size.xxl,";;label:xl;")},justifyContent:{flexStart:GXt,flexEnd:UXt,spaceEvenly:qXt,spaceBetween:ZXt,spaceAround:$Xt,center:VXt},alignItems:{stretch:HXt,flexStart:WXt,flexEnd:zXt,center:BXt,baseline:FXt},direction:{row:NXt,rowReverse:LXt,column:DXt,columnReverse:RXt}}};var KXt=["className","component","gutterSize","alignItems","responsive","justifyContent","direction","wrap"];function e0e(){return e0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function QXt(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}var eKt=function(t,r){var n=t.className,o=t.component,i=o===void 0?"div":o,c=t.gutterSize,d=c===void 0?"l":c,h=t.alignItems,v=h===void 0?"stretch":h,w=t.responsive,_=w===void 0?!0:w,I=t.justifyContent,R=I===void 0?"flexStart":I,D=t.direction,F=D===void 0?"row":D,A=t.wrap,N=A===void 0?!1:A,H=YXt(t,KXt),q=vt(pke),Y=[q.euiFlexGroup,_&&!F.includes("column")&&q.responsive,N&&q.wrap,q.gutterSizes[d],q.justifyContent[R],q.alignItems[v],q.direction[F]],ee=(0,fke.default)("euiFlexGroup",n),ne=i;return l(ne,e0e({},H,{ref:r,className:ee,css:Y}))},yi=(0,dke.forwardRef)(eKt);yi.displayName="EuiFlexGroup";var RX=T(z()),hke=T(At());var U9={euiFlexItem:{name:"19hf44n-euiFlexItem",styles:"display:flex;flex-direction:column;label:euiFlexItem;"},growZero:{name:"1pat7n0-growZero",styles:"flex-grow:0;flex-basis:auto;label:growZero;"},grow:{name:"tr4wer-grow",styles:"flex-basis:0%;label:grow;"},growSizes:{1:{name:"1v6uyoj-1",styles:"flex-grow:1;label:1;"},2:{name:"1l86xxh-2",styles:"flex-grow:2;label:2;"},3:{name:"1sl79ay-3",styles:"flex-grow:3;label:3;"},4:{name:"k4pnsg-4",styles:"flex-grow:4;label:4;"},5:{name:"1cx5fxs-5",styles:"flex-grow:5;label:5;"},6:{name:"1in9iiy-6",styles:"flex-grow:6;label:6;"},7:{name:"fvh3nz-7",styles:"flex-grow:7;label:7;"},8:{name:"fjdgzc-8",styles:"flex-grow:8;label:8;"},9:{name:"1tyr8p6-9",styles:"flex-grow:9;label:9;"},10:{name:"n7polf-10",styles:"flex-grow:10;label:10;"}}};var tKt=["children","className","grow","component"];function t0e(){return t0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nKt(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}var oKt=[null,void 0,!0,!1,0,1,2,3,4,5,6,7,8,9,10],iKt=function(t,r){var n=t.children,o=t.className,i=t.grow,c=i===void 0?!0:i,d=t.component,h=d===void 0?"div":d,v=rKt(t,tKt);(0,RX.useEffect)(function(){if(oKt.indexOf(c)===-1)throw new Error("Prop `grow` passed to `EuiFlexItem` must be a boolean or an integer between 0 and 10, received `".concat(c,"`"))},[c]);var w=[U9.euiFlexItem,c?U9.grow:U9.growZero,c&&(typeof c=="number"?U9.growSizes[c]:U9.growSizes[1])],_=(0,hke.default)("euiFlexItem",o),I=h;return l(I,t0e({},v,{ref:r,css:w,className:_}),n)},qt=(0,RX.forwardRef)(iKt);qt.displayName="EuiFlexItem";var r0e=T(z()),n0e=r0e.default.createContext({defaultFullWidth:!1});function DX(){return r0e.default.useContext(n0e)}var a1=T(z()),b3=T(it());function aKt(e,t){return cKt(e)||uKt(e,t)||lKt(e,t)||sKt()}function sKt(){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 lKt(e,t){if(e){if(typeof e=="string")return mke(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)?mke(e,t):void 0}}function mke(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function mKt(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}var G9=function(t){var r=t.type,n=r===void 0?"label":r,o=t.isFocused,i=t.isInvalid,c=t.isDisabled,d=t.children,h=t.className,v=hKt(t,fKt),w=vt(cke),_=[w.euiFormLabel,!c&&w.notDisabled,i&&w.invalid,o&&w.focused],I=(0,vke.default)("euiFormLabel",h,{"euiFormLabel-isFocused":o,"euiFormLabel-isInvalid":i,"euiFormLabel-isDisabled":c});return n==="legend"?l("legend",NX({css:_,className:I},v),d):l("label",NX({css:_,className:I},v),d)};G9.propTypes={type:fu.default.oneOfType([fu.default.oneOfType([fu.default.oneOf(["label"]),fu.default.oneOf(["label","legend"])]),fu.default.oneOfType([fu.default.oneOf(["legend"]).isRequired,fu.default.oneOf(["label","legend"])])]),isFocused:fu.default.bool,isInvalid:fu.default.bool,isDisabled:fu.default.bool,className:fu.default.string,"aria-label":fu.default.string,"data-test-subj":fu.default.string,css:fu.default.any};var _ke=T(z()),eo=T(it());var HJr=T(z()),J9=T(it()),yke=T(At());var gke=function(t){var r=t.euiTheme,n=t.colorMode,o=n==="DARK"?r.colors.darkShade:r.colors.mediumShade;return{euiFormControlLayoutClearButton:Q("pointer-events:all;background-color:",o,";border-radius:50%;line-height:0;&:disabled{cursor:not-allowed;background-color:",r.colors.disabled,";};label:euiFormControlLayoutClearButton;"),euiFormControlLayoutClearButton__icon:Q("transform:scale(0.5);fill:",r.colors.emptyShade,";stroke:",r.colors.emptyShade,";;label:euiFormControlLayoutClearButton__icon;"),size:{s:Q("stroke-width:",r.size.xs,";;label:s;"),m:Q("stroke-width:",r.size.xxs,";;label:m;")}}};var vKt=["className","onClick","size"];function o0e(){return o0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function yKt(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}var i0e=function(t){var r=t.className,n=t.onClick,o=t.size,i=o===void 0?"m":o,c=gKt(t,vKt),d=(0,yke.default)("euiFormControlLayoutClearButton",r),h=vt(gke),v=[h.euiFormControlLayoutClearButton__icon,h.size[i]],w=wo("euiFormControlLayoutClearButton.label","Clear input");return l("button",o0e({type:"button",css:h.euiFormControlLayoutClearButton,className:d,onClick:n,"aria-label":w},c),l(mr,{css:v,className:"euiFormControlLayoutClearButton__icon",type:"cross",size:i}))};i0e.propTypes={className:J9.default.string,"aria-label":J9.default.string,"data-test-subj":J9.default.string,css:J9.default.any,size:J9.default.oneOf(["s","m"])};var cp=T(it()),XJr=T(z());var bke=T(At());var bKt=["className","onClick","type","iconRef","size","color","disabled"];function FX(){return FX=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function OKt(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}var BX=function(t){var r=t.className,n=t.onClick,o=t.type,i=t.iconRef,c=t.size,d=t.color,h=t.disabled,v=wKt(t,bKt),w=(0,bke.default)("euiFormControlLayoutCustomIcon",r),_=[a0e.euiFormControlLayoutCustomIcon,n?a0e.clickable:a0e.unclickable];return n?l("button",FX({type:"button",onClick:n,disabled:h,css:_,className:w,ref:i},v),l(mr,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:c,type:o,color:d})):l("span",FX({css:_,className:w,ref:i},v),l(mr,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:c,type:o,color:d}))};BX.propTypes={className:cp.default.string,"aria-label":cp.default.string,"data-test-subj":cp.default.string,css:cp.default.any,type:cp.default.oneOfType([cp.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,cp.default.string.isRequired,cp.default.elementType.isRequired]).isRequired,size:cp.default.any,iconRef:cp.default.oneOfType([cp.default.string.isRequired,cp.default.func.isRequired])};var a0e={euiFormControlLayoutCustomIcon:{name:"7d1ma8-euiFormControlLayoutCustomIcon",styles:"font-size:0;label:euiFormControlLayoutCustomIcon;"},unclickable:` pointer-events: none; `,clickable:{name:"1j8wgxj-clickable",styles:"pointer-events:all;&:disabled{cursor:not-allowed;color:currentColor;};label:clickable;"}};var xKt={name:"3lf9c4-euiFormControlLayoutIcons",styles:"pointer-events:none;display:flex;align-items:center;label:euiFormControlLayoutIcons;"},wke=function(t){var r=Zd(t),n=r.controlPadding,o=r.controlCompressedPadding,i=r.controlDisabledColor;return{euiFormControlLayoutIcons:xKt,uncompressed:` gap: `.concat(pr(n,function(c){return c/2}),`; - `),compressed:Q("gap:",pr(o,function(c){return c/2}),";;label:compressed;"),disabled:Q("cursor:not-allowed;color:",i,";;label:disabled;"),position:{absolute:{absolute:Q("position:absolute;",pe("vertical",0),";;label:absolute;"),uncompressed:{left:Q("z-index:1;",pe("left",n),";;label:left;"),right:Q(pe("right",n),";;label:right;")},compressed:{left:Q("z-index:1;",pe("left",o),";;label:left;"),right:Q(pe("right",o),";;label:right;")}},static:{static:Q("position:static;",pe("height","100%")," align-self:stretch;flex-grow:0;",pe("padding-horizontal","100%"),";;label:static;"),uncompressed:pe("padding-horizontal",n),compressed:pe("padding-horizontal",o)}}}};function X9(e){"@babel/helpers - typeof";return X9=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},X9(e)}var _Kt=["ref","side"];function BX(){return BX=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function IKt(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 EKt(e){return TKt(e)||jKt(e)||kKt(e)||PKt()}function PKt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function kKt(e,t){if(e){if(typeof e=="string")return s0e(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)?s0e(e,t):void 0}}function jKt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function TKt(e){if(Array.isArray(e))return s0e(e)}function s0e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function IKt(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 EKt(e){return TKt(e)||jKt(e)||kKt(e)||PKt()}function PKt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function kKt(e,t){if(e){if(typeof e=="string")return s0e(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)?s0e(e,t):void 0}}function jKt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function TKt(e){if(Array.isArray(e))return s0e(e)}function s0e(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);r0});return h.length?Object.fromEntries(h):void 0};var $Kt={name:"1w10n1m-inGroup",styles:"flex-grow:1;overflow:hidden;label:inGroup;"},ZKt={name:"1lbfa6m-euiFormControlLayout__childrenWrapper",styles:"position:relative;label:euiFormControlLayout__childrenWrapper;"},Eke=function(t){var r=t.euiTheme,n=Zd(t);return{euiFormControlLayout:Q(";label:euiFormControlLayout;"),uncompressed:` `.concat(pe("height",n.controlHeight),` `),compressed:Q(pe("height",n.controlCompressedHeight),";;label:compressed;"),formWidth:` @@ -858,8 +858,8 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho flex-shrink: 0; `).concat(pe("width",r.size.xl),` } - `),compressed:Q(d,"{",pe("padding-horizontal",r.size.xxs)," line-height:",i,";}",c,"{",pe("height",i),";}.euiButtonIcon{flex-shrink:0;",pe("width",r.size.xl),";};label:compressed;")}};function a$(e){"@babel/helpers - typeof";return a$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a$(e)}var qKt=["inputId","className","children","icon","iconsPosition","clear","isDropdown","isLoading","isInvalid","isDisabled","readOnly","compressed","prepend","append","isDelimited","wrapperProps","fullWidth"];function HX(){return HX=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rYt(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}var K9=function(t){var r=RX(),n=r.defaultFullWidth,o=t.inputId,i=t.className,c=t.children,d=t.icon,h=t.iconsPosition,v=h===void 0?"absolute":h,w=t.clear,_=t.isDropdown,I=t.isLoading,R=t.isInvalid,D=t.isDisabled,F=t.readOnly,A=t.compressed,N=t.prepend,H=t.append,q=t.isDelimited,Y=t.wrapperProps,ee=t.fullWidth,ne=ee===void 0?n:ee,te=tYt(t,qKt),de=!!(N||H||q),fe=(0,d0e.default)("euiFormControlLayout",{"euiFormControlLayout--group":de&&!q,"euiFormControlLayout-isDisabled":D,"euiFormControlLayout-readOnly":F},i),ye=mt(Eke),Ie=[ye.euiFormControlLayout,A?ye.compressed:ye.uncompressed,ne?ye.fullWidth:ye.formWidth].concat(XKt(de?[ye.group.group,A?ye.group.compressed:ye.group.uncompressed]:[])),he=[ye.children.euiFormControlLayout__childrenWrapper,de&&ye.children.inGroup,de&&!H&&ye.children.prependOnly,de&&!N&&ye.children.appendOnly,Y?.css],be=!F&&!D&&_,Se=c0e(d),Te=d&&!Se,Pe=Se||w||I||R||be,Ve=(0,VX.useMemo)(function(){if(v!=="static")return Ike({icon:d,clear:w,isInvalid:R,isLoading:I,isDropdown:be})},[v,d,w,R,I,be]);return l("div",HX({css:Ie,className:fe},te),l(f0e,{side:"prepend",nodes:N,inputId:o,compressed:A}),l("div",HX({},Y,{css:he,className:(0,d0e.default)("euiFormControlLayout__childrenWrapper",Y?.className),style:jke(jke({},Ve),Y?.style)}),Te&&l(WX,{side:"left",icon:d,iconsPosition:v,compressed:A,isDisabled:D}),c,Pe&&l(WX,{side:"right",icon:Se?d:void 0,iconsPosition:v,compressed:A,clear:w,isLoading:I,isInvalid:R,isDropdown:be,isDisabled:D})),l(f0e,{side:"append",nodes:H,inputId:o,compressed:A}))};K9.propTypes={className:Dt.default.string,"aria-label":Dt.default.string,"data-test-subj":Dt.default.string,css:Dt.default.any,prepend:Dt.default.oneOfType([Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.element.isRequired]).isRequired,Dt.default.arrayOf(Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.element.isRequired]).isRequired).isRequired]),append:Dt.default.oneOfType([Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.element.isRequired]).isRequired,Dt.default.arrayOf(Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.element.isRequired]).isRequired).isRequired]),children:Dt.default.node,icon:Dt.default.oneOfType([Dt.default.oneOfType([Dt.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,Dt.default.string.isRequired,Dt.default.elementType.isRequired]).isRequired,Dt.default.shape({type:Dt.default.oneOfType([Dt.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,Dt.default.string.isRequired,Dt.default.elementType.isRequired]).isRequired,side:Dt.default.any,color:Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.any.isRequired]),ref:Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.func.isRequired])}).isRequired]),iconsPosition:Dt.default.oneOf(["absolute","static"]),clear:Dt.default.shape({className:Dt.default.string,"aria-label":Dt.default.string,"data-test-subj":Dt.default.string,css:Dt.default.any,size:Dt.default.oneOf(["s","m"])}),fullWidth:Dt.default.bool,isLoading:Dt.default.bool,isDisabled:Dt.default.bool,compressed:Dt.default.bool,readOnly:Dt.default.bool,isInvalid:Dt.default.bool,isDropdown:Dt.default.bool,inputId:Dt.default.string,wrapperProps:Dt.default.shape({className:Dt.default.string,"aria-label":Dt.default.string,"data-test-subj":Dt.default.string,css:Dt.default.any}),isDelimited:Dt.default.bool};var f0e=function(t){var r=t.side,n=t.nodes,o=t.inputId,i=t.compressed,c="euiFormControlLayout__".concat(r),d=mt(Pke),h=[d.euiFormControlLayout__side,d[r],i?d.compressed:d.uncompressed];return n?l("div",{css:h,className:c},VX.default.Children.map(n,function(v){return typeof v=="string"?l(G9,{htmlFor:o},v):v})):null};f0e.propTypes={side:Dt.default.oneOf(["append","prepend"]).isRequired,nodes:Dt.default.oneOfType([Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.element.isRequired]).isRequired,Dt.default.arrayOf(Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.element.isRequired]).isRequired).isRequired]),inputId:Dt.default.string,compressed:Dt.default.bool};var Rke=T(z()),Wn=T(it()),Dke=T(At());var nYt={isEventSupported:function(t,r){return"on".concat(t)in r}},h0e=Object.freeze(nYt);var Tke=function(t){var r=OJ(t);return{euiFieldSearch:Q("-webkit-appearance:textfield;&::-webkit-search-decoration,&::-webkit-search-cancel-button{-webkit-appearance:none;}",r.shared," &:invalid{",r.invalid,";}&:focus{",r.focus,";}&:disabled{",r.disabled,";}&[readOnly]{",r.readOnly,";}&:autofill{",r.autoFill,";};label:euiFieldSearch;"),uncompressed:r.uncompressed,compressed:Q(r.compressed,";label:compressed;"),formWidth:r.formWidth,fullWidth:Q(r.fullWidth,";label:fullWidth;"),inGroup:Q(r.inGroup,";label:inGroup;")}};var oYt=["stylesMemoizer","className","id","name","placeholder","isInvalid","disabled","fullWidth","isLoading","inputRef","incremental","compressed","onSearch","isClearable","append","prepend"];function Y9(e){"@babel/helpers - typeof";return Y9=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Y9(e)}function v0e(){return v0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function aYt(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 sYt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Cke(e,t){for(var r=0;r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vYt(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}var qX=function(t){var r=t.children,n=t.className,o=mYt(t,hYt),i=(0,Nke.default)("euiFormErrorText",n),c=mt(Lke);return l("div",b0e({css:c.euiFormErrorText,className:i,"aria-live":"polite"},o),r)};qX.propTypes={className:s$.default.string,"aria-label":s$.default.string,"data-test-subj":s$.default.string,css:s$.default.any};var uKr=T(z()),l$=T(it()),Bke=T(At());var Fke=function(t){var r=t.euiTheme;return{euiFormHelpText:Q(pe("padding-top",r.size.xs)," ",yr(t,"xs")," color:",r.colors.darkShade,";;label:euiFormHelpText;")}};var gYt=["children","className"];function w0e(){return w0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bYt(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}var UX=function(t){var r=t.children,n=t.className,o=yYt(t,gYt),i=(0,Bke.default)("euiFormHelpText",n),c=mt(Fke);return l("div",w0e({css:c.euiFormHelpText,className:i},o),r)};UX.propTypes={className:l$.default.string,"aria-label":l$.default.string,"data-test-subj":l$.default.string,css:l$.default.any};var hc=T(z()),xo=T(it()),Hke=T(At());var zke=function(t){var r=t.euiTheme,n=Zd(t),o=n.maxWidth,i=n.controlHeight,c=n.controlCompressedHeight;return{euiFormRow:Q("display:flex;+.euiButton{",pe("margin-top",r.size.base),";};label:euiFormRow;"),formWidth:` + `),compressed:Q(d,"{",pe("padding-horizontal",r.size.xxs)," line-height:",i,";}",c,"{",pe("height",i),";}.euiButtonIcon{flex-shrink:0;",pe("width",r.size.xl),";};label:compressed;")}};function s$(e){"@babel/helpers - typeof";return s$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s$(e)}var qKt=["inputId","className","children","icon","iconsPosition","clear","isDropdown","isLoading","isInvalid","isDisabled","readOnly","compressed","prepend","append","isDelimited","wrapperProps","fullWidth"];function VX(){return VX=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function rYt(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}var K9=function(t){var r=DX(),n=r.defaultFullWidth,o=t.inputId,i=t.className,c=t.children,d=t.icon,h=t.iconsPosition,v=h===void 0?"absolute":h,w=t.clear,_=t.isDropdown,I=t.isLoading,R=t.isInvalid,D=t.isDisabled,F=t.readOnly,A=t.compressed,N=t.prepend,H=t.append,q=t.isDelimited,Y=t.wrapperProps,ee=t.fullWidth,ne=ee===void 0?n:ee,te=tYt(t,qKt),de=!!(N||H||q),fe=(0,d0e.default)("euiFormControlLayout",{"euiFormControlLayout--group":de&&!q,"euiFormControlLayout-isDisabled":D,"euiFormControlLayout-readOnly":F},i),ye=vt(Eke),Ie=[ye.euiFormControlLayout,A?ye.compressed:ye.uncompressed,ne?ye.fullWidth:ye.formWidth].concat(XKt(de?[ye.group.group,A?ye.group.compressed:ye.group.uncompressed]:[])),ve=[ye.children.euiFormControlLayout__childrenWrapper,de&&ye.children.inGroup,de&&!H&&ye.children.prependOnly,de&&!N&&ye.children.appendOnly,Y?.css],Oe=!F&&!D&&_,be=c0e(d),Te=d&&!be,Pe=be||w||I||R||Oe,Re=(0,$X.useMemo)(function(){if(v!=="static")return Ike({icon:d,clear:w,isInvalid:R,isLoading:I,isDropdown:Oe})},[v,d,w,R,I,Oe]);return l("div",VX({css:Ie,className:fe},te),l(f0e,{side:"prepend",nodes:N,inputId:o,compressed:A}),l("div",VX({},Y,{css:ve,className:(0,d0e.default)("euiFormControlLayout__childrenWrapper",Y?.className),style:jke(jke({},Re),Y?.style)}),Te&&l(HX,{side:"left",icon:d,iconsPosition:v,compressed:A,isDisabled:D}),c,Pe&&l(HX,{side:"right",icon:be?d:void 0,iconsPosition:v,compressed:A,clear:w,isLoading:I,isInvalid:R,isDropdown:Oe,isDisabled:D})),l(f0e,{side:"append",nodes:H,inputId:o,compressed:A}))};K9.propTypes={className:Dt.default.string,"aria-label":Dt.default.string,"data-test-subj":Dt.default.string,css:Dt.default.any,prepend:Dt.default.oneOfType([Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.element.isRequired]).isRequired,Dt.default.arrayOf(Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.element.isRequired]).isRequired).isRequired]),append:Dt.default.oneOfType([Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.element.isRequired]).isRequired,Dt.default.arrayOf(Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.element.isRequired]).isRequired).isRequired]),children:Dt.default.node,icon:Dt.default.oneOfType([Dt.default.oneOfType([Dt.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,Dt.default.string.isRequired,Dt.default.elementType.isRequired]).isRequired,Dt.default.shape({type:Dt.default.oneOfType([Dt.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,Dt.default.string.isRequired,Dt.default.elementType.isRequired]).isRequired,side:Dt.default.any,color:Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.any.isRequired]),ref:Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.func.isRequired])}).isRequired]),iconsPosition:Dt.default.oneOf(["absolute","static"]),clear:Dt.default.shape({className:Dt.default.string,"aria-label":Dt.default.string,"data-test-subj":Dt.default.string,css:Dt.default.any,size:Dt.default.oneOf(["s","m"])}),fullWidth:Dt.default.bool,isLoading:Dt.default.bool,isDisabled:Dt.default.bool,compressed:Dt.default.bool,readOnly:Dt.default.bool,isInvalid:Dt.default.bool,isDropdown:Dt.default.bool,inputId:Dt.default.string,wrapperProps:Dt.default.shape({className:Dt.default.string,"aria-label":Dt.default.string,"data-test-subj":Dt.default.string,css:Dt.default.any}),isDelimited:Dt.default.bool};var f0e=function(t){var r=t.side,n=t.nodes,o=t.inputId,i=t.compressed,c="euiFormControlLayout__".concat(r),d=vt(Pke),h=[d.euiFormControlLayout__side,d[r],i?d.compressed:d.uncompressed];return n?l("div",{css:h,className:c},$X.default.Children.map(n,function(v){return typeof v=="string"?l(G9,{htmlFor:o},v):v})):null};f0e.propTypes={side:Dt.default.oneOf(["append","prepend"]).isRequired,nodes:Dt.default.oneOfType([Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.element.isRequired]).isRequired,Dt.default.arrayOf(Dt.default.oneOfType([Dt.default.string.isRequired,Dt.default.element.isRequired]).isRequired).isRequired]),inputId:Dt.default.string,compressed:Dt.default.bool};var Rke=T(z()),Wn=T(it()),Dke=T(At());var nYt={isEventSupported:function(t,r){return"on".concat(t)in r}},h0e=Object.freeze(nYt);var Tke=function(t){var r=xJ(t);return{euiFieldSearch:Q("-webkit-appearance:textfield;&::-webkit-search-decoration,&::-webkit-search-cancel-button{-webkit-appearance:none;}",r.shared," &:invalid{",r.invalid,";}&:focus{",r.focus,";}&:disabled{",r.disabled,";}&[readOnly]{",r.readOnly,";}&:autofill{",r.autoFill,";};label:euiFieldSearch;"),uncompressed:r.uncompressed,compressed:Q(r.compressed,";label:compressed;"),formWidth:r.formWidth,fullWidth:Q(r.fullWidth,";label:fullWidth;"),inGroup:Q(r.inGroup,";label:inGroup;")}};var oYt=["stylesMemoizer","className","id","name","placeholder","isInvalid","disabled","fullWidth","isLoading","inputRef","incremental","compressed","onSearch","isClearable","append","prepend"];function Y9(e){"@babel/helpers - typeof";return Y9=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Y9(e)}function v0e(){return v0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function aYt(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 sYt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Cke(e,t){for(var r=0;r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vYt(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}var UX=function(t){var r=t.children,n=t.className,o=mYt(t,hYt),i=(0,Nke.default)("euiFormErrorText",n),c=vt(Lke);return l("div",b0e({css:c.euiFormErrorText,className:i,"aria-live":"polite"},o),r)};UX.propTypes={className:l$.default.string,"aria-label":l$.default.string,"data-test-subj":l$.default.string,css:l$.default.any};var lKr=T(z()),u$=T(it()),Bke=T(At());var Fke=function(t){var r=t.euiTheme;return{euiFormHelpText:Q(pe("padding-top",r.size.xs)," ",yr(t,"xs")," color:",r.colors.darkShade,";;label:euiFormHelpText;")}};var gYt=["children","className"];function w0e(){return w0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function bYt(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}var GX=function(t){var r=t.children,n=t.className,o=yYt(t,gYt),i=(0,Bke.default)("euiFormHelpText",n),c=vt(Fke);return l("div",w0e({css:c.euiFormHelpText,className:i},o),r)};GX.propTypes={className:u$.default.string,"aria-label":u$.default.string,"data-test-subj":u$.default.string,css:u$.default.any};var hc=T(z()),xo=T(it()),Hke=T(At());var zke=function(t){var r=t.euiTheme,n=Zd(t),o=n.maxWidth,i=n.controlHeight,c=n.controlCompressedHeight;return{euiFormRow:Q("display:flex;+.euiButton{",pe("margin-top",r.size.base),";};label:euiFormRow;"),formWidth:` `.concat(pe("max-width",o),` `),fullWidth:Q(pe("max-width","100%"),";;label:fullWidth;"),row:` flex-direction: column; @@ -880,21 +880,21 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho align-items: center; `.concat(pe("min-height",h?c:i),` } - `)},get center(){return Q(this.row," ",this.centerDisplayCss(!1),";;label:center;")},get centerCompressed(){return Q(this.row," ",this.centerDisplayCss(!0),";;label:centerCompressed;")}}};var wYt=["className","children","helpText","isInvalid","error","label","labelType","labelAppend","hasEmptyLabelSpace","fullWidth","describedByIds","display","hasChildLabel","id","isDisabled"];function GX(){return GX=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function TYt(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}var Yg=function(t){var r=t.className,n=t.children,o=t.helpText,i=t.isInvalid,c=t.error,d=t.label,h=t.labelType,v=h===void 0?"label":h,w=t.labelAppend,_=t.hasEmptyLabelSpace,I=_===void 0?!1:_,R=t.fullWidth,D=t.describedByIds,F=t.display,A=F===void 0?"row":F,N=t.hasChildLabel,H=N===void 0?!0:N,q=t.id,Y=t.isDisabled,ee=jYt(t,wYt),ne=RX(),te=ne.defaultFullWidth,de=R??te,fe=Ph({conditionalId:q}),ye=d||w,Ie=(0,hc.useState)(!1),he=IYt(Ie,2),be=he[0],Se=he[1],Te=(0,hc.useCallback)(function(){return Se(!0)},[]),Pe=(0,hc.useCallback)(function(){return Se(!1)},[]),Ve=(0,Hke.default)("euiFormRow",{"euiFormRow--hasEmptyLabelSpace":I,"euiFormRow--hasLabel":ye},r),De=mt(zke),He=[De.euiFormRow,de?De.fullWidth:De.formWidth,De[A]],Je=(0,hc.useMemo)(function(){if(o){var Vt=Array.isArray(o)?o:[o];return Vt.map(function(Ke,st){var Tt=typeof Ke=="string"?Ke:st;return l(UX,{key:Tt,id:"".concat(fe,"-help-").concat(st),className:"euiFormRow__text"},Ke)})}},[o,fe]),vt=(0,hc.useMemo)(function(){if(c&&i){var Vt=Array.isArray(c)?c:[c];return Vt.map(function(Ke,st){var Tt=typeof Ke=="string"?Ke:st;return l(qX,{key:Tt,id:"".concat(fe,"-error-").concat(st),className:"euiFormRow__text"},Ke)})}},[c,i,fe]),Qe=(0,hc.useMemo)(function(){var Vt=OYt(D||[]);if(Je!=null&&Je.length&&Je.forEach(function(Ke){return Vt.push(Ke.props.id)}),vt!=null&&vt.length&&vt.forEach(function(Ke){return Vt.push(Ke.props.id)}),Vt.length)return Vt.join(" ")},[D,Je,vt]),Ne=(0,hc.useMemo)(function(){var Vt,Ke,st=hc.Children.only(n);return(0,hc.cloneElement)(st,{id:fe,disabled:(Vt=(Ke=st.props.disabled)!==null&&Ke!==void 0?Ke:st.props.isDisabled)!==null&&Vt!==void 0?Vt:Y,"aria-describedby":Qe})},[n,fe,Y,Qe]),Nt=v==="legend"?"fieldset":"div";return l(Nt,GX({css:He,className:Ve,id:"".concat(fe,"-row")},ee),ye?l("div",{className:"euiFormRow__labelWrapper"},l(G9,GX({className:"euiFormRow__label","aria-invalid":i,isInvalid:i,isDisabled:Y,isFocused:be&&!Y,id:"".concat(fe,"-label")},v==="legend"?{type:v}:{type:v,htmlFor:H?fe:void 0}),d),w&&" ",w):I&&l(Oo,{size:"m",className:"euiFormRow__labelWrapper"}),l("div",{className:"euiFormRow__fieldWrapper",onFocus:Te,onBlur:Pe},Ne,vt,Je))};Yg.propTypes={labelType:xo.default.oneOfType([xo.default.oneOf(["label"]),xo.default.oneOf(["legend"])]),className:xo.default.string,"aria-label":xo.default.string,"data-test-subj":xo.default.string,css:xo.default.any,display:xo.default.any,hasEmptyLabelSpace:xo.default.bool,fullWidth:xo.default.bool,describedByIds:xo.default.arrayOf(xo.default.string.isRequired),hasChildLabel:xo.default.bool,children:xo.default.element.isRequired,label:xo.default.node,labelAppend:xo.default.any,id:xo.default.string,isInvalid:xo.default.bool,error:xo.default.oneOfType([xo.default.node.isRequired,xo.default.arrayOf(xo.default.node.isRequired).isRequired]),helpText:xo.default.oneOfType([xo.default.node.isRequired,xo.default.arrayOf(xo.default.node.isRequired).isRequired]),isDisabled:xo.default.bool};var LKr=T(z()),Zx=T(it()),$ke=T(At());var Vke=function(t){var r=t.euiTheme;return{euiHorizontalRule:Q("border:none;",pe("height",r.border.width.thin)," background-color:",r.border.color,";flex-shrink:0;flex-grow:0;;label:euiHorizontalRule;"),full:Q(pe("width","100%"),";;label:full;"),half:Q(pe("width","50%")," ",pe("margin-horizontal","auto"),";;label:half;"),quarter:Q(pe("width","25%")," ",pe("margin-horizontal","auto"),";;label:quarter;"),none:"",xs:Q("margin-block:",r.size.s,";;label:xs;"),s:Q("margin-block:",r.size.m,";;label:s;"),m:Q("margin-block:",r.size.base,";;label:m;"),l:Q("margin-block:",r.size.l,";;label:l;"),xl:Q("margin-block:",r.size.xl,";;label:xl;"),xxl:Q("margin-block:",r.size.xxl,";;label:xxl;")}};var CYt=["className","size","margin"];function x0e(){return x0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function AYt(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}var Q9=function(t){var r=t.className,n=t.size,o=n===void 0?"full":n,i=t.margin,c=i===void 0?"l":i,d=MYt(t,CYt),h=(0,$ke.default)("euiHorizontalRule",r),v=mt(Vke),w=[v.euiHorizontalRule,v[o],v[c]];return l("hr",x0e({css:w,className:h},d))};Q9.propTypes={size:Zx.default.any,margin:Zx.default.any,className:Zx.default.string,"aria-label":Zx.default.string,"data-test-subj":Zx.default.string,css:Zx.default.any};var KX=T(z()),ds=T(it()),rje=T(At());var qke=T(z()),yi=T(it()),_0e=T(At());var RYt={name:"4ak4s8-euiContextMenuItem__arrow",styles:"align-self:flex-end;label:euiContextMenuItem__arrow;"},DYt={name:"o1gg22-euiContextMenuItem__text",styles:"flex-grow:1;overflow:hidden;label:euiContextMenuItem__text;"},LYt={name:"1lzohcs-euiContextMenu__icon",styles:"flex-shrink:0;label:euiContextMenu__icon;"},NYt={name:"1msaet2-bottom",styles:"align-items:flex-end;label:bottom;"},FYt={name:"1gnwbvd-top",styles:"align-items:flex-start;label:top;"},BYt={name:"8391db-center",styles:"align-items:center;label:center;"},Zke=function(t){var r=t.euiTheme;return{euiContextMenuItem:Q("display:flex;gap:",r.size.s,";",pe("width","100%")," ",Tn("left")," color:",r.colors.text,";outline-offset:-",r.focus.width,";&:where(a, button):not(:disabled){&:hover,&:focus{text-decoration:underline;}&:focus{background-color:",r.focus.backgroundColor,";}};label:euiContextMenuItem;"),disabled:Q("color:",r.colors.disabledText,";cursor:default;;label:disabled;"),layoutAlign:{center:BYt,top:FYt,bottom:NYt},sizes:{m:Q("padding:",r.size.m,";;label:m;"),s:Q("padding:",r.size.s,";;label:s;")},euiContextMenu__icon:LYt,text:{euiContextMenuItem__text:DYt,s:Q(yr(t,"s"),";;label:s;")},euiContextMenuItem__arrow:RYt}};var zYt=["children","className","hasPanel","icon","buttonRef","disabled","layoutAlign","toolTipContent","toolTipProps","href","target","rel","size"];function eP(){return eP=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function HYt(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}var VYt={center:null,top:"euiContextMenu__itemLayout--top",bottom:"euiContextMenu__itemLayout--bottom"},eYr=Ol(VYt),Gd=function(t){var r=t.children,n=t.className,o=t.hasPanel,i=t.icon,c=t.buttonRef,d=t.disabled,h=t.layoutAlign,v=h===void 0?"center":h,w=t.toolTipContent,_=t.toolTipProps,I=t.href,R=t.target,D=t.rel,F=t.size,A=F===void 0?"m":F,N=WYt(t,zYt),H=!I||$d(I),q=d||!H,Y=(0,_0e.default)("euiContextMenuItem",n),ee=mt(Zke),ne=[ee.euiContextMenuItem,ee.sizes[A],ee.layoutAlign[v],q&&ee.disabled],te=i&&(typeof i=="string"?l(mr,{type:i,size:"m",className:"euiContextMenu__icon",css:ee.euiContextMenu__icon,color:"inherit"}):Sl(i,{css:ee.euiContextMenu__icon})),de=o&&l(mr,{type:"arrowRight",size:"m",className:"euiContextMenu__arrow",css:ee.euiContextMenuItem__arrow}),fe=[ee.text.euiContextMenuItem__text,A==="s"&&ee.text.s],ye=l(qke.default.Fragment,null,te,l("span",{className:"euiContextMenuItem__text",css:fe},r),de),Ie;if(I&&!q){var he=va({href:I,target:R,rel:D});Ie=l("a",eP({css:ne,className:Y,href:I,target:R,rel:he,ref:c},N),ye)}else I||N.onClick||w?Ie=l("button",eP({disabled:q,css:ne,className:Y,type:"button",ref:c},N),ye):Ie=l("div",eP({css:ne,className:Y,ref:c},N),ye);if(w){var be=(0,_0e.default)("eui-displayBlock",_?.anchorClassName);return l(ps,eP({position:"right"},_,{anchorClassName:be,content:w}),Ie)}else return Ie};Gd.propTypes={className:yi.default.string,"aria-label":yi.default.string,"data-test-subj":yi.default.string,css:yi.default.any,icon:yi.default.oneOfType([yi.default.oneOfType([yi.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,yi.default.string.isRequired,yi.default.elementType.isRequired]).isRequired,yi.default.element.isRequired,yi.default.any.isRequired]),hasPanel:yi.default.bool,disabled:yi.default.bool,onClick:yi.default.func,buttonRef:yi.default.any,toolTipContent:yi.default.node,toolTipProps:yi.default.any,href:yi.default.string,target:yi.default.string,rel:yi.default.string,layoutAlign:yi.default.oneOf(["center","top","bottom"]),size:yi.default.any};var Uke=function(t){var r=t.euiTheme;return{panelWidth:pr(r.size.base,function(n){return n*16})}};var Gke,Jke,Xke,Kke;function JX(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var Yke=function(t){var r=t.euiTheme,n=Uke(t),o=n.panelWidth,i={transitioning:Q("pointer-events:none;animation-fill-mode:forwards;animation-duration:",r.animation.normal,";animation-timing-function:",r.animation.resistance,";",YG,"{animation-duration:0s;};label:transitioning;"),inLeft:Ti(Gke||(Gke=JX([` +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Wke(e,t){if(e){if(typeof e=="string")return O0e(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)?O0e(e,t):void 0}}function O0e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function TYt(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}var Qg=function(t){var r=t.className,n=t.children,o=t.helpText,i=t.isInvalid,c=t.error,d=t.label,h=t.labelType,v=h===void 0?"label":h,w=t.labelAppend,_=t.hasEmptyLabelSpace,I=_===void 0?!1:_,R=t.fullWidth,D=t.describedByIds,F=t.display,A=F===void 0?"row":F,N=t.hasChildLabel,H=N===void 0?!0:N,q=t.id,Y=t.isDisabled,ee=jYt(t,wYt),ne=DX(),te=ne.defaultFullWidth,de=R??te,fe=Ph({conditionalId:q}),ye=d||w,Ie=(0,hc.useState)(!1),ve=IYt(Ie,2),Oe=ve[0],be=ve[1],Te=(0,hc.useCallback)(function(){return be(!0)},[]),Pe=(0,hc.useCallback)(function(){return be(!1)},[]),Re=(0,Hke.default)("euiFormRow",{"euiFormRow--hasEmptyLabelSpace":I,"euiFormRow--hasLabel":ye},r),Ae=vt(zke),Ve=[Ae.euiFormRow,de?Ae.fullWidth:Ae.formWidth,Ae[A]],Je=(0,hc.useMemo)(function(){if(o){var Vt=Array.isArray(o)?o:[o];return Vt.map(function(Ke,st){var Tt=typeof Ke=="string"?Ke:st;return l(GX,{key:Tt,id:"".concat(fe,"-help-").concat(st),className:"euiFormRow__text"},Ke)})}},[o,fe]),pt=(0,hc.useMemo)(function(){if(c&&i){var Vt=Array.isArray(c)?c:[c];return Vt.map(function(Ke,st){var Tt=typeof Ke=="string"?Ke:st;return l(UX,{key:Tt,id:"".concat(fe,"-error-").concat(st),className:"euiFormRow__text"},Ke)})}},[c,i,fe]),Qe=(0,hc.useMemo)(function(){var Vt=OYt(D||[]);if(Je!=null&&Je.length&&Je.forEach(function(Ke){return Vt.push(Ke.props.id)}),pt!=null&&pt.length&&pt.forEach(function(Ke){return Vt.push(Ke.props.id)}),Vt.length)return Vt.join(" ")},[D,Je,pt]),Fe=(0,hc.useMemo)(function(){var Vt,Ke,st=hc.Children.only(n);return(0,hc.cloneElement)(st,{id:fe,disabled:(Vt=(Ke=st.props.disabled)!==null&&Ke!==void 0?Ke:st.props.isDisabled)!==null&&Vt!==void 0?Vt:Y,"aria-describedby":Qe})},[n,fe,Y,Qe]),Nt=v==="legend"?"fieldset":"div";return l(Nt,JX({css:Ve,className:Re,id:"".concat(fe,"-row")},ee),ye?l("div",{className:"euiFormRow__labelWrapper"},l(G9,JX({className:"euiFormRow__label","aria-invalid":i,isInvalid:i,isDisabled:Y,isFocused:Oe&&!Y,id:"".concat(fe,"-label")},v==="legend"?{type:v}:{type:v,htmlFor:H?fe:void 0}),d),w&&" ",w):I&&l(Oo,{size:"m",className:"euiFormRow__labelWrapper"}),l("div",{className:"euiFormRow__fieldWrapper",onFocus:Te,onBlur:Pe},Fe,pt,Je))};Qg.propTypes={labelType:xo.default.oneOfType([xo.default.oneOf(["label"]),xo.default.oneOf(["legend"])]),className:xo.default.string,"aria-label":xo.default.string,"data-test-subj":xo.default.string,css:xo.default.any,display:xo.default.any,hasEmptyLabelSpace:xo.default.bool,fullWidth:xo.default.bool,describedByIds:xo.default.arrayOf(xo.default.string.isRequired),hasChildLabel:xo.default.bool,children:xo.default.element.isRequired,label:xo.default.node,labelAppend:xo.default.any,id:xo.default.string,isInvalid:xo.default.bool,error:xo.default.oneOfType([xo.default.node.isRequired,xo.default.arrayOf(xo.default.node.isRequired).isRequired]),helpText:xo.default.oneOfType([xo.default.node.isRequired,xo.default.arrayOf(xo.default.node.isRequired).isRequired]),isDisabled:xo.default.bool};var DKr=T(z()),Zx=T(it()),$ke=T(At());var Vke=function(t){var r=t.euiTheme;return{euiHorizontalRule:Q("border:none;",pe("height",r.border.width.thin)," background-color:",r.border.color,";flex-shrink:0;flex-grow:0;;label:euiHorizontalRule;"),full:Q(pe("width","100%"),";;label:full;"),half:Q(pe("width","50%")," ",pe("margin-horizontal","auto"),";;label:half;"),quarter:Q(pe("width","25%")," ",pe("margin-horizontal","auto"),";;label:quarter;"),none:"",xs:Q("margin-block:",r.size.s,";;label:xs;"),s:Q("margin-block:",r.size.m,";;label:s;"),m:Q("margin-block:",r.size.base,";;label:m;"),l:Q("margin-block:",r.size.l,";;label:l;"),xl:Q("margin-block:",r.size.xl,";;label:xl;"),xxl:Q("margin-block:",r.size.xxl,";;label:xxl;")}};var CYt=["className","size","margin"];function x0e(){return x0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function AYt(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}var Q9=function(t){var r=t.className,n=t.size,o=n===void 0?"full":n,i=t.margin,c=i===void 0?"l":i,d=MYt(t,CYt),h=(0,$ke.default)("euiHorizontalRule",r),v=vt(Vke),w=[v.euiHorizontalRule,v[o],v[c]];return l("hr",x0e({css:w,className:h},d))};Q9.propTypes={size:Zx.default.any,margin:Zx.default.any,className:Zx.default.string,"aria-label":Zx.default.string,"data-test-subj":Zx.default.string,css:Zx.default.any};var YX=T(z()),ds=T(it()),rje=T(At());var qke=T(z()),bi=T(it()),_0e=T(At());var RYt={name:"4ak4s8-euiContextMenuItem__arrow",styles:"align-self:flex-end;label:euiContextMenuItem__arrow;"},DYt={name:"o1gg22-euiContextMenuItem__text",styles:"flex-grow:1;overflow:hidden;label:euiContextMenuItem__text;"},LYt={name:"1lzohcs-euiContextMenu__icon",styles:"flex-shrink:0;label:euiContextMenu__icon;"},NYt={name:"1msaet2-bottom",styles:"align-items:flex-end;label:bottom;"},FYt={name:"1gnwbvd-top",styles:"align-items:flex-start;label:top;"},BYt={name:"8391db-center",styles:"align-items:center;label:center;"},Zke=function(t){var r=t.euiTheme;return{euiContextMenuItem:Q("display:flex;gap:",r.size.s,";",pe("width","100%")," ",Tn("left")," color:",r.colors.text,";outline-offset:-",r.focus.width,";&:where(a, button):not(:disabled){&:hover,&:focus{text-decoration:underline;}&:focus{background-color:",r.focus.backgroundColor,";}};label:euiContextMenuItem;"),disabled:Q("color:",r.colors.disabledText,";cursor:default;;label:disabled;"),layoutAlign:{center:BYt,top:FYt,bottom:NYt},sizes:{m:Q("padding:",r.size.m,";;label:m;"),s:Q("padding:",r.size.s,";;label:s;")},euiContextMenu__icon:LYt,text:{euiContextMenuItem__text:DYt,s:Q(yr(t,"s"),";;label:s;")},euiContextMenuItem__arrow:RYt}};var zYt=["children","className","hasPanel","icon","buttonRef","disabled","layoutAlign","toolTipContent","toolTipProps","href","target","rel","size"];function eP(){return eP=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function HYt(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}var VYt={center:null,top:"euiContextMenu__itemLayout--top",bottom:"euiContextMenu__itemLayout--bottom"},QKr=Ol(VYt),Gd=function(t){var r=t.children,n=t.className,o=t.hasPanel,i=t.icon,c=t.buttonRef,d=t.disabled,h=t.layoutAlign,v=h===void 0?"center":h,w=t.toolTipContent,_=t.toolTipProps,I=t.href,R=t.target,D=t.rel,F=t.size,A=F===void 0?"m":F,N=WYt(t,zYt),H=!I||$d(I),q=d||!H,Y=(0,_0e.default)("euiContextMenuItem",n),ee=vt(Zke),ne=[ee.euiContextMenuItem,ee.sizes[A],ee.layoutAlign[v],q&&ee.disabled],te=i&&(typeof i=="string"?l(mr,{type:i,size:"m",className:"euiContextMenu__icon",css:ee.euiContextMenu__icon,color:"inherit"}):Sl(i,{css:ee.euiContextMenu__icon})),de=o&&l(mr,{type:"arrowRight",size:"m",className:"euiContextMenu__arrow",css:ee.euiContextMenuItem__arrow}),fe=[ee.text.euiContextMenuItem__text,A==="s"&&ee.text.s],ye=l(qke.default.Fragment,null,te,l("span",{className:"euiContextMenuItem__text",css:fe},r),de),Ie;if(I&&!q){var ve=va({href:I,target:R,rel:D});Ie=l("a",eP({css:ne,className:Y,href:I,target:R,rel:ve,ref:c},N),ye)}else I||N.onClick||w?Ie=l("button",eP({disabled:q,css:ne,className:Y,type:"button",ref:c},N),ye):Ie=l("div",eP({css:ne,className:Y,ref:c},N),ye);if(w){var Oe=(0,_0e.default)("eui-displayBlock",_?.anchorClassName);return l(ps,eP({position:"right"},_,{anchorClassName:Oe,content:w}),Ie)}else return Ie};Gd.propTypes={className:bi.default.string,"aria-label":bi.default.string,"data-test-subj":bi.default.string,css:bi.default.any,icon:bi.default.oneOfType([bi.default.oneOfType([bi.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,bi.default.string.isRequired,bi.default.elementType.isRequired]).isRequired,bi.default.element.isRequired,bi.default.any.isRequired]),hasPanel:bi.default.bool,disabled:bi.default.bool,onClick:bi.default.func,buttonRef:bi.default.any,toolTipContent:bi.default.node,toolTipProps:bi.default.any,href:bi.default.string,target:bi.default.string,rel:bi.default.string,layoutAlign:bi.default.oneOf(["center","top","bottom"]),size:bi.default.any};var Uke=function(t){var r=t.euiTheme;return{panelWidth:pr(r.size.base,function(n){return n*16})}};var Gke,Jke,Xke,Kke;function XX(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var Yke=function(t){var r=t.euiTheme,n=Uke(t),o=n.panelWidth,i={transitioning:Q("pointer-events:none;animation-fill-mode:forwards;animation-duration:",r.animation.normal,";animation-timing-function:",r.animation.resistance,";",QG,"{animation-duration:0s;};label:transitioning;"),inLeft:Ci(Gke||(Gke=XX([` 0% { transform: translateX(`,`); } 100% { transform: translateX(0); } - `])),o),outLeft:Ti(Jke||(Jke=JX([` + `])),o),outLeft:Ci(Jke||(Jke=XX([` 0% { transform: translateX(0); } 100% { transform: translateX(-`,`); } - `])),o),inRight:Ti(Xke||(Xke=JX([` + `])),o),inRight:Ci(Xke||(Xke=XX([` 0% { transform: translateX(-`,`); } 100% { transform: translateX(0); } - `])),o),outRight:Ti(Kke||(Kke=JX([` + `])),o),outRight:Ci(Kke||(Kke=XX([` 0% { transform: translateX(0); } 100% { transform: translateX(`,`); } - `])),o)};return{euiContextMenuPanel:Q(pe("width","100%")," visibility:visible;outline-offset:-",r.focus.width,";&:focus{outline:none;};label:euiContextMenuPanel;"),next:{in:Q(i.transitioning," animation-name:",i.inLeft,";;label:in;"),out:Q(i.transitioning," animation-name:",i.outLeft,";;label:out;")},previous:{in:Q(i.transitioning," animation-name:",i.inRight,";;label:in;"),out:Q(i.transitioning," animation-name:",i.outRight,";;label:out;")},euiContextMenuPanel__title:Q(To(t,"xxs")," ",pe("border-bottom",r.border.thin)," &:enabled:focus{background-color:unset;};label:euiContextMenuPanel__title;")}};var $Yt=["stylesMemoizer","children","className","onClose","title","onHeightChange","transitionType","transitionDirection","onTransitionComplete","onUseKeyboardToNavigate","items","initialFocusedItemIndex","showNextPanel","showPreviousPanel","size"];function tP(e){"@babel/helpers - typeof";return tP=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},tP(e)}function S0e(){return S0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function qYt(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 UYt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Qke(e,t){for(var r=0;r=0&&v=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function qYt(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 UYt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Qke(e,t){for(var r=0;r=0&&ve.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vQt(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}var Ux=function(t){var r=t.label,n=t.id,o=t.checked,i=t.disabled,c=t.compressed,d=t.mini,h=t.onChange,v=t.className,w=t.showLabel,_=w===void 0?!0:w,I=t.type,R=I===void 0?"button":I,D=t.labelProps,F=mQt(t,uQt),A=Ph({conditionalId:n}),N=Ph({conditionalId:D?.id}),H=(0,oje.useCallback)(function(be){if(!i){var Se=be;Se.target.checked=!o,h(Se)}},[o,i,h]),q=(0,k0e.default)("euiSwitch",v),Y=(0,k0e.default)("euiSwitch__label",D?.className);_===!1&&typeof r!="string"&&console.warn("EuiSwitch `label` must be a string when `showLabel` is false.");var ee=d?"mini":c?"compressed":"uncompressed",ne=mt(nje),te=[ne.euiSwitch,i?ne.disabled:ne.enabled],de=[ne.button.euiSwitch__button,ne.button[ee]],fe=[ne.body.euiSwitch__body,i?ne.body.disabled[ee]:o?ne.body.on:ne.body.off],ye=[ne.icons.euiSwitch__icons,o?ne.icons.on:ne.icons.off,i?ne.icons.disabled:ne.icons.enabled],Ie=[ne.thumb.euiSwitch__thumb,o?ne.thumb.on[ee]:ne.thumb.off].concat(cQt(i?[ne.thumb.disabled.disabled,ne.thumb.disabled[ee]]:[ne.thumb.enabled.enabled,ne.thumb.enabled[ee]])),he=[ne.label.euiSwitch__label,ne.label[ee],i&&ne.label.disabled,D?.css];return l("div",{css:te,className:q},l("button",YX({id:A,"aria-checked":o||!1,css:de,className:"euiSwitch__button",role:"switch",type:R,disabled:i,onClick:H,"aria-label":_?void 0:r,"aria-labelledby":_?N:void 0},F),l("span",{css:fe,className:"euiSwitch__body"},!(c||d)&&l("span",{css:ye,className:"euiSwitch__icons"},l(mr,{type:"check",size:"m"}),l(mr,{type:"cross",size:"m"}))),l("span",{css:Ie,className:"euiSwitch__thumb"})),_&&l("span",YX({},D,{css:he,className:Y,id:N,onClick:H}),r))};Ux.propTypes={className:Ha.default.string,"aria-label":Ha.default.string,"data-test-subj":Ha.default.string,css:Ha.default.any,showLabel:Ha.default.bool,label:Ha.default.oneOfType([Ha.default.node.isRequired,Ha.default.string.isRequired]).isRequired,checked:Ha.default.bool.isRequired,onChange:Ha.default.func.isRequired,disabled:Ha.default.bool,compressed:Ha.default.bool,labelProps:Ha.default.shape({className:Ha.default.string,"aria-label":Ha.default.string,"data-test-subj":Ha.default.string,css:Ha.default.any}),mini:Ha.default.bool};var a1=EG({key:"css"}),BYr=a1.flush,zYr=a1.hydrate,ije=a1.cx,WYr=a1.merge,HYr=a1.getRegisteredStyles,VYr=a1.injectGlobal,$Yr=a1.keyframes,rP=a1.css,ZYr=a1.sheet,qYr=a1.cache;var oP=T(z()),nP=T(it());var aje=function(t){var r=t.euiTheme;return{euiOverlayMask:rP("position:fixed;",pe("top",0)," ",pe("left",0)," ",pe("right",0)," ",pe("bottom",0)," display:flex;align-items:center;justify-content:center;",pe("padding-bottom","10vh")," animation:",m8e," ",r.animation.fast," ease-in;background:",_n(r.colors.ink,.5),";;label:euiOverlayMask;"),aboveHeader:rP("z-index:",r.levels.mask,";;label:aboveHeader;"),belowHeader:rP("z-index:",r.levels.maskBelowHeader,";",pe("top","var(--euiFixedHeadersOffset, 0)"),";;label:belowHeader;")}};var sje={name:"131160-euiOverlayMaskBodyStyles",styles:"body{overflow:hidden;};label:euiOverlayMaskBodyStyles;"};var gQt=["className","children","headerZindexLocation","maskRef"];function lje(e){return wQt(e)||bQt(e)||uje(e)||yQt()}function yQt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. + `),compressed:Q("font-size:",yr(t,"s").fontSize,";line-height:",c.height,";;label:compressed;"),mini:Q("font-size:",yr(t,"xs").fontSize,";line-height:",d.height,";;label:mini;"),disabled:Q("color:",o.disabled,";;label:disabled;")}};var uQt=["label","id","checked","disabled","compressed","mini","onChange","className","showLabel","type","labelProps"];function QX(){return QX=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vQt(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}var Ux=function(t){var r=t.label,n=t.id,o=t.checked,i=t.disabled,c=t.compressed,d=t.mini,h=t.onChange,v=t.className,w=t.showLabel,_=w===void 0?!0:w,I=t.type,R=I===void 0?"button":I,D=t.labelProps,F=mQt(t,uQt),A=Ph({conditionalId:n}),N=Ph({conditionalId:D?.id}),H=(0,oje.useCallback)(function(Oe){if(!i){var be=Oe;be.target.checked=!o,h(be)}},[o,i,h]),q=(0,k0e.default)("euiSwitch",v),Y=(0,k0e.default)("euiSwitch__label",D?.className);_===!1&&typeof r!="string"&&console.warn("EuiSwitch `label` must be a string when `showLabel` is false.");var ee=d?"mini":c?"compressed":"uncompressed",ne=vt(nje),te=[ne.euiSwitch,i?ne.disabled:ne.enabled],de=[ne.button.euiSwitch__button,ne.button[ee]],fe=[ne.body.euiSwitch__body,i?ne.body.disabled[ee]:o?ne.body.on:ne.body.off],ye=[ne.icons.euiSwitch__icons,o?ne.icons.on:ne.icons.off,i?ne.icons.disabled:ne.icons.enabled],Ie=[ne.thumb.euiSwitch__thumb,o?ne.thumb.on[ee]:ne.thumb.off].concat(cQt(i?[ne.thumb.disabled.disabled,ne.thumb.disabled[ee]]:[ne.thumb.enabled.enabled,ne.thumb.enabled[ee]])),ve=[ne.label.euiSwitch__label,ne.label[ee],i&&ne.label.disabled,D?.css];return l("div",{css:te,className:q},l("button",QX({id:A,"aria-checked":o||!1,css:de,className:"euiSwitch__button",role:"switch",type:R,disabled:i,onClick:H,"aria-label":_?void 0:r,"aria-labelledby":_?N:void 0},F),l("span",{css:fe,className:"euiSwitch__body"},!(c||d)&&l("span",{css:ye,className:"euiSwitch__icons"},l(mr,{type:"check",size:"m"}),l(mr,{type:"cross",size:"m"}))),l("span",{css:Ie,className:"euiSwitch__thumb"})),_&&l("span",QX({},D,{css:ve,className:Y,id:N,onClick:H}),r))};Ux.propTypes={className:Ha.default.string,"aria-label":Ha.default.string,"data-test-subj":Ha.default.string,css:Ha.default.any,showLabel:Ha.default.bool,label:Ha.default.oneOfType([Ha.default.node.isRequired,Ha.default.string.isRequired]).isRequired,checked:Ha.default.bool.isRequired,onChange:Ha.default.func.isRequired,disabled:Ha.default.bool,compressed:Ha.default.bool,labelProps:Ha.default.shape({className:Ha.default.string,"aria-label":Ha.default.string,"data-test-subj":Ha.default.string,css:Ha.default.any}),mini:Ha.default.bool};var s1=PG({key:"css"}),FYr=s1.flush,BYr=s1.hydrate,ije=s1.cx,zYr=s1.merge,WYr=s1.getRegisteredStyles,HYr=s1.injectGlobal,VYr=s1.keyframes,rP=s1.css,$Yr=s1.sheet,ZYr=s1.cache;var oP=T(z()),nP=T(it());var aje=function(t){var r=t.euiTheme;return{euiOverlayMask:rP("position:fixed;",pe("top",0)," ",pe("left",0)," ",pe("right",0)," ",pe("bottom",0)," display:flex;align-items:center;justify-content:center;",pe("padding-bottom","10vh")," animation:",m8e," ",r.animation.fast," ease-in;background:",_n(r.colors.ink,.5),";;label:euiOverlayMask;"),aboveHeader:rP("z-index:",r.levels.mask,";;label:aboveHeader;"),belowHeader:rP("z-index:",r.levels.maskBelowHeader,";",pe("top","var(--euiFixedHeadersOffset, 0)"),";;label:belowHeader;")}};var sje={name:"131160-euiOverlayMaskBodyStyles",styles:"body{overflow:hidden;};label:euiOverlayMaskBodyStyles;"};var gQt=["className","children","headerZindexLocation","maskRef"];function lje(e){return wQt(e)||bQt(e)||uje(e)||yQt()}function yQt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function bQt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function wQt(e){if(Array.isArray(e))return j0e(e)}function OQt(e,t){return SQt(e)||_Qt(e,t)||uje(e,t)||xQt()}function xQt(){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 uje(e,t){if(e){if(typeof e=="string")return j0e(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)?j0e(e,t):void 0}}function j0e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function EQt(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}var QX=function(t){var r=t.className,n=t.children,o=t.headerZindexLocation,i=o===void 0?"above":o,c=t.maskRef,d=IQt(t,gQt),h=(0,oP.useState)(null),v=OQt(h,2),w=v[0],_=v[1],I=Vg([_,c]),R=ur(),D=aje(R),F=ije([D.euiOverlayMask,D["".concat(i,"Header")]]);return(0,oP.useEffect)(function(){w&&Ol(d).forEach(function(A){if(typeof d[A]!="string")throw new Error("Unhandled property type. EuiOverlayMask property ".concat(A," is not a string."));w&&w.setAttribute(A,d[A])})},[w]),(0,oP.useEffect)(function(){if(w)return w.classList.add("euiOverlayMask",F),w.dataset.relativeToHeader=i,function(){return w.classList.remove(F)}},[w,F,i]),(0,oP.useEffect)(function(){if(r&&w){var A,N=r.split(" ");return(A=w.classList).add.apply(A,lje(N)),function(){var H;return(H=w.classList).remove.apply(H,lje(N))}}},[w,r]),l(p3,{portalRef:I},l(r3,{styles:sje}),n)};QX.propTypes={children:nP.default.node,headerZindexLocation:nP.default.oneOf(["above","below"]),maskRef:nP.default.oneOfType([nP.default.any.isRequired,nP.default.any.isRequired])};function T0e(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}var cje=Number.isNaN||function(t){return typeof t=="number"&&t!==t};function PQt(e,t){return!!(e===t||cje(e)&&cje(t))}function kQt(e,t){if(e.length!==t.length)return!1;for(var r=0;r=t?e.call(null):o.id=requestAnimationFrame(n)}var o={id:requestAnimationFrame(n)};return o}var M0e=-1;function fje(e){if(e===void 0&&(e=!1),M0e===-1||e){var t=document.createElement("div"),r=t.style;r.width="50px",r.height="50px",r.overflow="scroll",document.body.appendChild(t),M0e=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return M0e}var iP=null;function hje(e){if(e===void 0&&(e=!1),iP===null||e){var t=document.createElement("div"),r=t.style;r.width="50px",r.height="50px",r.overflow="scroll",r.direction="rtl";var n=document.createElement("div"),o=n.style;return o.width="100px",o.height="100px",t.appendChild(n),document.body.appendChild(t),t.scrollLeft>0?iP="positive-descending":(t.scrollLeft=1,t.scrollLeft===0?iP="negative":iP="positive-ascending"),document.body.removeChild(t),iP}return iP}var MQt=150,AQt=function(t,r){return t};function RQt(e){var t,r=e.getItemOffset,n=e.getEstimatedTotalSize,o=e.getItemSize,i=e.getOffsetForIndexAndAlignment,c=e.getStartIndexForOffset,d=e.getStopIndexForStartIndex,h=e.initInstanceProps,v=e.shouldResetStyleCacheOnItemSizeChange,w=e.validateProps;return t=function(_){dc(I,_);function I(D){var F;return F=_.call(this,D)||this,F._instanceProps=h(F.props,T0e(F)),F._outerRef=void 0,F._resetIsScrollingTimeoutId=null,F.state={instance:T0e(F),isScrolling:!1,scrollDirection:"forward",scrollOffset:typeof F.props.initialScrollOffset=="number"?F.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},F._callOnItemsRendered=void 0,F._callOnItemsRendered=eK(function(A,N,H,q){return F.props.onItemsRendered({overscanStartIndex:A,overscanStopIndex:N,visibleStartIndex:H,visibleStopIndex:q})}),F._callOnScroll=void 0,F._callOnScroll=eK(function(A,N,H){return F.props.onScroll({scrollDirection:A,scrollOffset:N,scrollUpdateWasRequested:H})}),F._getItemStyle=void 0,F._getItemStyle=function(A){var N=F.props,H=N.direction,q=N.itemSize,Y=N.layout,ee=F._getItemStyleCache(v&&q,v&&Y,v&&H),ne;if(ee.hasOwnProperty(A))ne=ee[A];else{var te=r(F.props,A,F._instanceProps),de=o(F.props,A,F._instanceProps),fe=H==="horizontal"||Y==="horizontal",ye=H==="rtl",Ie=fe?te:0;ee[A]=ne={position:"absolute",left:ye?void 0:Ie,right:ye?Ie:void 0,top:fe?0:te,height:fe?"100%":de,width:fe?de:"100%"}}return ne},F._getItemStyleCache=void 0,F._getItemStyleCache=eK(function(A,N,H){return{}}),F._onScrollHorizontal=function(A){var N=A.currentTarget,H=N.clientWidth,q=N.scrollLeft,Y=N.scrollWidth;F.setState(function(ee){if(ee.scrollOffset===q)return null;var ne=F.props.direction,te=q;if(ne==="rtl")switch(hje()){case"negative":te=-q;break;case"positive-descending":te=Y-H-q;break}return te=Math.max(0,Math.min(te,Y-H)),{isScrolling:!0,scrollDirection:ee.scrollOffsetne.clientWidth?fje():0:ee=ne.scrollHeight>ne.clientHeight?fje():0}this.scrollTo(i(this.props,F,A,Y,this._instanceProps,ee))},R.componentDidMount=function(){var F=this.props,A=F.direction,N=F.initialScrollOffset,H=F.layout;if(typeof N=="number"&&this._outerRef!=null){var q=this._outerRef;A==="horizontal"||H==="horizontal"?q.scrollLeft=N:q.scrollTop=N}this._callPropsCallbacks()},R.componentDidUpdate=function(){var F=this.props,A=F.direction,N=F.layout,H=this.state,q=H.scrollOffset,Y=H.scrollUpdateWasRequested;if(Y&&this._outerRef!=null){var ee=this._outerRef;if(A==="horizontal"||N==="horizontal")if(A==="rtl")switch(hje()){case"negative":ee.scrollLeft=-q;break;case"positive-ascending":ee.scrollLeft=q;break;default:var ne=ee.clientWidth,te=ee.scrollWidth;ee.scrollLeft=te-ne-q;break}else ee.scrollLeft=q;else ee.scrollTop=q}this._callPropsCallbacks()},R.componentWillUnmount=function(){this._resetIsScrollingTimeoutId!==null&&dje(this._resetIsScrollingTimeoutId)},R.render=function(){var F=this.props,A=F.children,N=F.className,H=F.direction,q=F.height,Y=F.innerRef,ee=F.innerElementType,ne=F.innerTagName,te=F.itemCount,de=F.itemData,fe=F.itemKey,ye=fe===void 0?AQt:fe,Ie=F.layout,he=F.outerElementType,be=F.outerTagName,Se=F.style,Te=F.useIsScrolling,Pe=F.width,Ve=this.state.isScrolling,De=H==="horizontal"||Ie==="horizontal",He=De?this._onScrollHorizontal:this._onScrollVertical,Je=this._getRangeToRender(),vt=Je[0],Qe=Je[1],Ne=[];if(te>0)for(var Nt=vt;Nt<=Qe;Nt++)Ne.push((0,aP.createElement)(A,{data:de,key:ye(Nt,de),index:Nt,isScrolling:Te?Ve:void 0,style:this._getItemStyle(Nt)}));var Vt=n(this.props,this._instanceProps);return(0,aP.createElement)(he||be||"div",{className:N,onScroll:He,ref:this._outerRefSetter,style:Kr({position:"relative",height:q,width:Pe,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:H},Se)},(0,aP.createElement)(ee||ne||"div",{children:Ne,ref:Y,style:{height:De?"100%":Vt,pointerEvents:Ve?"none":void 0,width:De?Vt:"100%"}}))},R._callPropsCallbacks=function(){if(typeof this.props.onItemsRendered=="function"){var F=this.props.itemCount;if(F>0){var A=this._getRangeToRender(),N=A[0],H=A[1],q=A[2],Y=A[3];this._callOnItemsRendered(N,H,q,Y)}}if(typeof this.props.onScroll=="function"){var ee=this.state,ne=ee.scrollDirection,te=ee.scrollOffset,de=ee.scrollUpdateWasRequested;this._callOnScroll(ne,te,de)}},R._getRangeToRender=function(){var F=this.props,A=F.itemCount,N=F.overscanCount,H=this.state,q=H.isScrolling,Y=H.scrollDirection,ee=H.scrollOffset;if(A===0)return[0,0,0,0];var ne=c(this.props,ee,this._instanceProps),te=d(this.props,ne,ee,this._instanceProps),de=!q||Y==="backward"?Math.max(1,N):1,fe=!q||Y==="forward"?Math.max(1,N):1;return[Math.max(0,ne-de),Math.max(0,Math.min(A-1,te+fe)),ne,te]},I}(aP.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var DQt=function(t,r){var n=t.children,o=t.direction,i=t.height,c=t.layout,d=t.innerTagName,h=t.outerTagName,v=t.width,w=r.instance;if(!1){var _;switch(o){case"horizontal":case"vertical":case"ltr":case"rtl":default:}switch(c){case"horizontal":case"vertical":default:}}};var u$=RQt({getItemOffset:function(t,r){var n=t.itemSize;return r*n},getItemSize:function(t,r){var n=t.itemSize;return n},getEstimatedTotalSize:function(t){var r=t.itemCount,n=t.itemSize;return n*r},getOffsetForIndexAndAlignment:function(t,r,n,o,i,c){var d=t.direction,h=t.height,v=t.itemCount,w=t.itemSize,_=t.layout,I=t.width,R=d==="horizontal"||_==="horizontal",D=R?I:h,F=Math.max(0,v*w-D),A=Math.min(F,r*w),N=Math.max(0,r*w-D+w+c);switch(n==="smart"&&(o>=N-D&&o<=A+D?n="auto":n="center"),n){case"start":return A;case"end":return N;case"center":{var H=Math.round(N+(A-N)/2);return HF+Math.floor(D/2)?F:H}case"auto":default:return o>=N&&o<=A?o:oe.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&(F.push({key:N.key,label:N.label,isGroupLabelOption:!0,append:N.append,prepend:N.prepend}),F=F.concat(H))}else yje({accumulator:F,option:N,selectedOptions:n,searchValue:o,normalizedSearchValue:D,isCaseSensitive:d,isPreFiltered:v,showPrevSelected:_,optionMatcher:i})}),R==="startsWith"){var A={startWith:[],others:[]};return F.forEach(function(N){var H=s1(N.label,d);H.startsWith(D)?A.startWith.push(N):A.others.push(N)}),[].concat(gje(A.startWith),gje(A.others))}return F},bje=function(){return function(t){var r=t.option,n=t.isCaseSensitive,o=t.normalizedSearchValue;if(!o)return!0;var i=s1(r.label.trim(),n);return i.includes(o)}};var Tje=T(z()),xt=T(it()),Cje=T(At());var xje=T(z());function c$(e){"@babel/helpers - typeof";return c$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},c$(e)}function wje(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 rK(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function UQt(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}var Ije=function(t){var r=t.children,n=t.className,o=t.color,i=o===void 0?"hollow":o,c=t.onClick,d=t.onClickAriaLabel,h=t.onClose,v=t.option,w=qQt(t,ZQt),_=(0,Sje.default)("euiComboBoxPill",n),I=mt(_je),R=I.euiComboBoxPill,D=c&&d?{onClick:c,onClickAriaLabel:d}:{},F=l(sP,{option:v,classNamePrefix:"euiComboBoxPill"},l("span",{className:"eui-textTruncate"},r));return h?l(Zt,{token:"euiComboBoxPill.removeSelection",default:"Remove {children} from selection in this group",values:{children:r}},function(A){return l(Il,nK({css:R,className:_,color:i,"data-test-subj":"euiComboBoxPill",iconOnClick:function(){return h(v)},iconOnClickAriaLabel:A,iconSide:"right",iconType:"cross",title:r},D,w),F)}):l(Il,nK({css:R,className:_,color:i,"data-test-subj":"euiComboBoxPill",title:r},w,D),F)};var GQt={name:"kedu1h-plainText",styles:"align-items:center;cursor:text;label:plainText;"},JQt={name:"dkzr1g-multiSelect",styles:"flex-wrap:wrap;label:multiSelect;"},Eje=function(t){var r=t.euiTheme,n=OJ(t);return{euiComboBoxInputWrapper:Q(yhe(t)," display:flex;;label:euiComboBoxInputWrapper;"),multiSelect:JQt,uncompressed:` +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function uje(e,t){if(e){if(typeof e=="string")return j0e(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)?j0e(e,t):void 0}}function j0e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function EQt(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}var eK=function(t){var r=t.className,n=t.children,o=t.headerZindexLocation,i=o===void 0?"above":o,c=t.maskRef,d=IQt(t,gQt),h=(0,oP.useState)(null),v=OQt(h,2),w=v[0],_=v[1],I=$g([_,c]),R=ur(),D=aje(R),F=ije([D.euiOverlayMask,D["".concat(i,"Header")]]);return(0,oP.useEffect)(function(){w&&Ol(d).forEach(function(A){if(typeof d[A]!="string")throw new Error("Unhandled property type. EuiOverlayMask property ".concat(A," is not a string."));w&&w.setAttribute(A,d[A])})},[w]),(0,oP.useEffect)(function(){if(w)return w.classList.add("euiOverlayMask",F),w.dataset.relativeToHeader=i,function(){return w.classList.remove(F)}},[w,F,i]),(0,oP.useEffect)(function(){if(r&&w){var A,N=r.split(" ");return(A=w.classList).add.apply(A,lje(N)),function(){var H;return(H=w.classList).remove.apply(H,lje(N))}}},[w,r]),l(p3,{portalRef:I},l(r3,{styles:sje}),n)};eK.propTypes={children:nP.default.node,headerZindexLocation:nP.default.oneOf(["above","below"]),maskRef:nP.default.oneOfType([nP.default.any.isRequired,nP.default.any.isRequired])};function T0e(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}var cje=Number.isNaN||function(t){return typeof t=="number"&&t!==t};function PQt(e,t){return!!(e===t||cje(e)&&cje(t))}function kQt(e,t){if(e.length!==t.length)return!1;for(var r=0;r=t?e.call(null):o.id=requestAnimationFrame(n)}var o={id:requestAnimationFrame(n)};return o}var M0e=-1;function fje(e){if(e===void 0&&(e=!1),M0e===-1||e){var t=document.createElement("div"),r=t.style;r.width="50px",r.height="50px",r.overflow="scroll",document.body.appendChild(t),M0e=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return M0e}var iP=null;function hje(e){if(e===void 0&&(e=!1),iP===null||e){var t=document.createElement("div"),r=t.style;r.width="50px",r.height="50px",r.overflow="scroll",r.direction="rtl";var n=document.createElement("div"),o=n.style;return o.width="100px",o.height="100px",t.appendChild(n),document.body.appendChild(t),t.scrollLeft>0?iP="positive-descending":(t.scrollLeft=1,t.scrollLeft===0?iP="negative":iP="positive-ascending"),document.body.removeChild(t),iP}return iP}var MQt=150,AQt=function(t,r){return t};function RQt(e){var t,r=e.getItemOffset,n=e.getEstimatedTotalSize,o=e.getItemSize,i=e.getOffsetForIndexAndAlignment,c=e.getStartIndexForOffset,d=e.getStopIndexForStartIndex,h=e.initInstanceProps,v=e.shouldResetStyleCacheOnItemSizeChange,w=e.validateProps;return t=function(_){dc(I,_);function I(D){var F;return F=_.call(this,D)||this,F._instanceProps=h(F.props,T0e(F)),F._outerRef=void 0,F._resetIsScrollingTimeoutId=null,F.state={instance:T0e(F),isScrolling:!1,scrollDirection:"forward",scrollOffset:typeof F.props.initialScrollOffset=="number"?F.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},F._callOnItemsRendered=void 0,F._callOnItemsRendered=tK(function(A,N,H,q){return F.props.onItemsRendered({overscanStartIndex:A,overscanStopIndex:N,visibleStartIndex:H,visibleStopIndex:q})}),F._callOnScroll=void 0,F._callOnScroll=tK(function(A,N,H){return F.props.onScroll({scrollDirection:A,scrollOffset:N,scrollUpdateWasRequested:H})}),F._getItemStyle=void 0,F._getItemStyle=function(A){var N=F.props,H=N.direction,q=N.itemSize,Y=N.layout,ee=F._getItemStyleCache(v&&q,v&&Y,v&&H),ne;if(ee.hasOwnProperty(A))ne=ee[A];else{var te=r(F.props,A,F._instanceProps),de=o(F.props,A,F._instanceProps),fe=H==="horizontal"||Y==="horizontal",ye=H==="rtl",Ie=fe?te:0;ee[A]=ne={position:"absolute",left:ye?void 0:Ie,right:ye?Ie:void 0,top:fe?0:te,height:fe?"100%":de,width:fe?de:"100%"}}return ne},F._getItemStyleCache=void 0,F._getItemStyleCache=tK(function(A,N,H){return{}}),F._onScrollHorizontal=function(A){var N=A.currentTarget,H=N.clientWidth,q=N.scrollLeft,Y=N.scrollWidth;F.setState(function(ee){if(ee.scrollOffset===q)return null;var ne=F.props.direction,te=q;if(ne==="rtl")switch(hje()){case"negative":te=-q;break;case"positive-descending":te=Y-H-q;break}return te=Math.max(0,Math.min(te,Y-H)),{isScrolling:!0,scrollDirection:ee.scrollOffsetne.clientWidth?fje():0:ee=ne.scrollHeight>ne.clientHeight?fje():0}this.scrollTo(i(this.props,F,A,Y,this._instanceProps,ee))},R.componentDidMount=function(){var F=this.props,A=F.direction,N=F.initialScrollOffset,H=F.layout;if(typeof N=="number"&&this._outerRef!=null){var q=this._outerRef;A==="horizontal"||H==="horizontal"?q.scrollLeft=N:q.scrollTop=N}this._callPropsCallbacks()},R.componentDidUpdate=function(){var F=this.props,A=F.direction,N=F.layout,H=this.state,q=H.scrollOffset,Y=H.scrollUpdateWasRequested;if(Y&&this._outerRef!=null){var ee=this._outerRef;if(A==="horizontal"||N==="horizontal")if(A==="rtl")switch(hje()){case"negative":ee.scrollLeft=-q;break;case"positive-ascending":ee.scrollLeft=q;break;default:var ne=ee.clientWidth,te=ee.scrollWidth;ee.scrollLeft=te-ne-q;break}else ee.scrollLeft=q;else ee.scrollTop=q}this._callPropsCallbacks()},R.componentWillUnmount=function(){this._resetIsScrollingTimeoutId!==null&&dje(this._resetIsScrollingTimeoutId)},R.render=function(){var F=this.props,A=F.children,N=F.className,H=F.direction,q=F.height,Y=F.innerRef,ee=F.innerElementType,ne=F.innerTagName,te=F.itemCount,de=F.itemData,fe=F.itemKey,ye=fe===void 0?AQt:fe,Ie=F.layout,ve=F.outerElementType,Oe=F.outerTagName,be=F.style,Te=F.useIsScrolling,Pe=F.width,Re=this.state.isScrolling,Ae=H==="horizontal"||Ie==="horizontal",Ve=Ae?this._onScrollHorizontal:this._onScrollVertical,Je=this._getRangeToRender(),pt=Je[0],Qe=Je[1],Fe=[];if(te>0)for(var Nt=pt;Nt<=Qe;Nt++)Fe.push((0,aP.createElement)(A,{data:de,key:ye(Nt,de),index:Nt,isScrolling:Te?Re:void 0,style:this._getItemStyle(Nt)}));var Vt=n(this.props,this._instanceProps);return(0,aP.createElement)(ve||Oe||"div",{className:N,onScroll:Ve,ref:this._outerRefSetter,style:Kr({position:"relative",height:q,width:Pe,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:H},be)},(0,aP.createElement)(ee||ne||"div",{children:Fe,ref:Y,style:{height:Ae?"100%":Vt,pointerEvents:Re?"none":void 0,width:Ae?Vt:"100%"}}))},R._callPropsCallbacks=function(){if(typeof this.props.onItemsRendered=="function"){var F=this.props.itemCount;if(F>0){var A=this._getRangeToRender(),N=A[0],H=A[1],q=A[2],Y=A[3];this._callOnItemsRendered(N,H,q,Y)}}if(typeof this.props.onScroll=="function"){var ee=this.state,ne=ee.scrollDirection,te=ee.scrollOffset,de=ee.scrollUpdateWasRequested;this._callOnScroll(ne,te,de)}},R._getRangeToRender=function(){var F=this.props,A=F.itemCount,N=F.overscanCount,H=this.state,q=H.isScrolling,Y=H.scrollDirection,ee=H.scrollOffset;if(A===0)return[0,0,0,0];var ne=c(this.props,ee,this._instanceProps),te=d(this.props,ne,ee,this._instanceProps),de=!q||Y==="backward"?Math.max(1,N):1,fe=!q||Y==="forward"?Math.max(1,N):1;return[Math.max(0,ne-de),Math.max(0,Math.min(A-1,te+fe)),ne,te]},I}(aP.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var DQt=function(t,r){var n=t.children,o=t.direction,i=t.height,c=t.layout,d=t.innerTagName,h=t.outerTagName,v=t.width,w=r.instance;if(!1){var _;switch(o){case"horizontal":case"vertical":case"ltr":case"rtl":default:}switch(c){case"horizontal":case"vertical":default:}}};var c$=RQt({getItemOffset:function(t,r){var n=t.itemSize;return r*n},getItemSize:function(t,r){var n=t.itemSize;return n},getEstimatedTotalSize:function(t){var r=t.itemCount,n=t.itemSize;return n*r},getOffsetForIndexAndAlignment:function(t,r,n,o,i,c){var d=t.direction,h=t.height,v=t.itemCount,w=t.itemSize,_=t.layout,I=t.width,R=d==="horizontal"||_==="horizontal",D=R?I:h,F=Math.max(0,v*w-D),A=Math.min(F,r*w),N=Math.max(0,r*w-D+w+c);switch(n==="smart"&&(o>=N-D&&o<=A+D?n="auto":n="center"),n){case"start":return A;case"end":return N;case"center":{var H=Math.round(N+(A-N)/2);return HF+Math.floor(D/2)?F:H}case"auto":default:return o>=N&&o<=A?o:oe.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&(F.push({key:N.key,label:N.label,isGroupLabelOption:!0,append:N.append,prepend:N.prepend}),F=F.concat(H))}else yje({accumulator:F,option:N,selectedOptions:n,searchValue:o,normalizedSearchValue:D,isCaseSensitive:d,isPreFiltered:v,showPrevSelected:_,optionMatcher:i})}),R==="startsWith"){var A={startWith:[],others:[]};return F.forEach(function(N){var H=l1(N.label,d);H.startsWith(D)?A.startWith.push(N):A.others.push(N)}),[].concat(gje(A.startWith),gje(A.others))}return F},bje=function(){return function(t){var r=t.option,n=t.isCaseSensitive,o=t.normalizedSearchValue;if(!o)return!0;var i=l1(r.label.trim(),n);return i.includes(o)}};var Tje=T(z()),xt=T(it()),Cje=T(At());var xje=T(z());function p$(e){"@babel/helpers - typeof";return p$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},p$(e)}function wje(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 nK(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function UQt(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}var Ije=function(t){var r=t.children,n=t.className,o=t.color,i=o===void 0?"hollow":o,c=t.onClick,d=t.onClickAriaLabel,h=t.onClose,v=t.option,w=qQt(t,ZQt),_=(0,Sje.default)("euiComboBoxPill",n),I=vt(_je),R=I.euiComboBoxPill,D=c&&d?{onClick:c,onClickAriaLabel:d}:{},F=l(sP,{option:v,classNamePrefix:"euiComboBoxPill"},l("span",{className:"eui-textTruncate"},r));return h?l(Zt,{token:"euiComboBoxPill.removeSelection",default:"Remove {children} from selection in this group",values:{children:r}},function(A){return l(Il,oK({css:R,className:_,color:i,"data-test-subj":"euiComboBoxPill",iconOnClick:function(){return h(v)},iconOnClickAriaLabel:A,iconSide:"right",iconType:"cross",title:r},D,w),F)}):l(Il,oK({css:R,className:_,color:i,"data-test-subj":"euiComboBoxPill",title:r},w,D),F)};var GQt={name:"kedu1h-plainText",styles:"align-items:center;cursor:text;label:plainText;"},JQt={name:"dkzr1g-multiSelect",styles:"flex-wrap:wrap;label:multiSelect;"},Eje=function(t){var r=t.euiTheme,n=xJ(t);return{euiComboBoxInputWrapper:Q(yhe(t)," display:flex;;label:euiComboBoxInputWrapper;"),multiSelect:JQt,uncompressed:` `.concat(n.uncompressed,` `).concat(pe("height","auto"),` `).concat(pe("padding-vertical",r.size.s),` @@ -928,8 +928,8 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `),uncompressed:` `.concat(pe("padding-left",r.size.m),` `)},invalid:Q(n.invalid,";label:invalid;"),disabled:Q(n.disabled,";label:disabled;"),open:Q(n.focus,";label:open;"),inGroup:Q(n.inGroup,";label:inGroup;"),euiComboBoxInput:Q(pe("height",r.size.l)," ",pe("min-width","2px")," ",pe("max-width","100%"),ghe(t)," background:transparent;&:disabled{color:",r.colors.disabledText,";}appearance:none!important;border:none!important;box-shadow:none!important;outline:none!important;;label:euiComboBoxInput;"),formLayout:{euiComboBox__formControlLayout:Q(";label:euiComboBox__formControlLayout;"),multiSelect:Q(pe("height","auto"),";;label:multiSelect;")}}};var XQt=["key","label","color","onClick","append","prepend","truncationProps","toolTipContent","toolTipProps"];function KQt(e){return ter(e)||eer(e)||QQt(e)||YQt()}function YQt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function QQt(e,t){if(e){if(typeof e=="string")return L0e(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)?L0e(e,t):void 0}}function eer(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function ter(e){if(Array.isArray(e))return L0e(e)}function L0e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ner(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 oer(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Pje(e,t){for(var r=0;r0?"".concat(de,". Press Backspace to delete ").concat(ne[ne.length-1].label,". "):"","Combo box input. ").concat(De," Type some text or, to display a list of choices, press Down Arrow. ")+"To exit the list of choices, press Escape.";Ve=Y("removeOptionMessage"),Pe=l(ko,null,l("span",{"aria-live":"polite",id:Ve},He))}var Je=te&&(fe||ye),vt=q&&!(ne!=null&&ne.length)&&!ee,Qe={};!w&&D&&h&&(Qe.clear={"data-test-subj":"comboBoxClearButton",onClick:D});var Ne;!I&&!w&&(Ne={"aria-label":_?"Close list of options":"Open list of options","data-test-subj":"comboBoxToggleListButton",disabled:w,onClick:_&&!w?N:H,side:"right",tabIndex:-1,type:"arrowDown"});var Nt=(0,Cje.default)("euiComboBox__inputWrap",{"euiComboBox__inputWrap--plainText":this.asPlainText});return l(G0,null,function(Vt){var Ke=Vt(Eje),st=[Ke.euiComboBoxInputWrapper,!te&&Ke.multiSelect,i?Ke.compressed:Ke.uncompressed].concat(KQt(n.asPlainText||vt?[Ke.plainText.plainText,i?Ke.plainText.compressed:Ke.plainText.uncompressed]:[]),[w?Ke.disabled:he?Ke.invalid:_?Ke.open:void 0,Je&&Ke.inGroup]),Tt=[Ke.formLayout.euiComboBox__formControlLayout,!te&&Ke.formLayout.multiSelect];return l(K9,oK({icon:Ne},Qe,{inputId:v,isLoading:Ie,isInvalid:he,isDisabled:w,compressed:i,fullWidth:d,prepend:fe,append:ye,css:Tt}),l("div",{css:st,className:Nt,"data-test-subj":"comboBoxInput",onClick:F,tabIndex:-1},n.renderPills(),l(sP,{option:n.asPlainText?ne?.[0]:void 0,classNamePrefix:"euiComboBoxPlainTextSelection",marginSize:"xxs"},l("input",{"aria-activedescendant":c,"aria-autocomplete":"list","aria-controls":_?Y("listbox"):"","aria-expanded":_,"aria-label":Se,"aria-labelledby":Te,"aria-invalid":he,css:Ke.euiComboBoxInput,className:"euiComboBox__input","data-test-subj":"comboBoxSearchInput",disabled:w,id:v,onBlur:n.onBlur,onChange:function(Rt){return R(Rt.target.value)},onFocus:n.onFocus,onKeyDown:n.onKeyDown,ref:n.inputRefCallback,role:"combobox",style:{inlineSize:n.asPlainText||vt?"100%":n.state.inputWidth},placeholder:vt?q:void 0,value:n.searchValue,autoFocus:be,autoComplete:"off",onClick:n.asPlainText?A:void 0})),Pe))})}}])}(Tje.Component);F0e.propTypes={compressed:xt.default.bool.isRequired,focusedOptionId:xt.default.string,fullWidth:xt.default.bool,hasSelectedOptions:xt.default.bool.isRequired,id:xt.default.string,inputRef:xt.default.any,isDisabled:xt.default.bool,isListOpen:xt.default.bool.isRequired,noIcon:xt.default.bool.isRequired,onBlur:xt.default.any,onChange:xt.default.func.isRequired,onClear:xt.default.func,onClick:xt.default.func.isRequired,onCloseListClick:xt.default.func.isRequired,onFocus:xt.default.any.isRequired,onOpenListClick:xt.default.func.isRequired,onRemoveOption:xt.default.func.isRequired,placeholder:xt.default.string,rootId:xt.default.any.isRequired,searchValue:xt.default.string.isRequired,selectedOptions:xt.default.arrayOf(xt.default.shape({isGroupLabelOption:xt.default.bool,label:xt.default.string.isRequired,key:xt.default.string,options:xt.default.arrayOf(xt.default.shape({isGroupLabelOption:xt.default.bool,label:xt.default.string.isRequired,key:xt.default.string,options:xt.default.arrayOf(xt.default.any.isRequired),value:xt.default.any,prepend:xt.default.node,append:xt.default.node,truncationProps:xt.default.any,toolTipContent:xt.default.node,toolTipProps:xt.default.any,className:xt.default.string,"aria-label":xt.default.string,"data-test-subj":xt.default.string,css:xt.default.any}).isRequired),value:xt.default.any,prepend:xt.default.node,append:xt.default.node,truncationProps:xt.default.any,toolTipContent:xt.default.node,toolTipProps:xt.default.any,className:xt.default.string,"aria-label":xt.default.string,"data-test-subj":xt.default.string,css:xt.default.any}).isRequired).isRequired,singleSelection:xt.default.oneOfType([xt.default.bool.isRequired,xt.default.shape({asPlainText:xt.default.bool}).isRequired]),toggleButtonRef:xt.default.any,value:xt.default.string,prepend:xt.default.oneOfType([xt.default.oneOfType([xt.default.string.isRequired,xt.default.element.isRequired]).isRequired,xt.default.arrayOf(xt.default.oneOfType([xt.default.string.isRequired,xt.default.element.isRequired]).isRequired).isRequired]),append:xt.default.oneOfType([xt.default.oneOfType([xt.default.string.isRequired,xt.default.element.isRequired]).isRequired,xt.default.arrayOf(xt.default.oneOfType([xt.default.string.isRequired,xt.default.element.isRequired]).isRequired).isRequired]),isLoading:xt.default.bool,isInvalid:xt.default.bool,autoFocus:xt.default.bool,"aria-label":xt.default.string,"aria-labelledby":xt.default.string,className:xt.default.string,"data-test-subj":xt.default.string,css:xt.default.any};var vK=T(z()),qe=T(it()),lTe=T(At());var Bje=T(z()),pp=T(it());var Rje=T(z()),Jx=T(it()),Dje=T(At());var Mje=function(t){var r=t.euiTheme,n=t.colorMode,o={LIGHT:.1,DARK:.3};return{euiMark:Q("background-color:",_n(r.colors.primary,o[n]),";font-weight:",r.font.weight.bold,";color:",r.colors.text,";;label:euiMark;")}},Aje=function(t,r){return{hasScreenReaderHelpText:Q("&::before,&::after{",l3(),";}&::before{content:' [",t,"] ';}&::after{content:' [",r,"] ';};label:hasScreenReaderHelpText;")}};var per=["children","className","hasScreenReaderHelpText"];function B0e(){return B0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fer(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}var x3=function(t){var r=t.children,n=t.className,o=t.hasScreenReaderHelpText,i=o===void 0?!0:o,c=der(t,per),d=(0,Dje.default)("euiMark",n),h=ur(),v=Mje(h),w=wo("euiMark.highlightStart","highlight start"),_=wo("euiMark.highlightEnd","highlight end"),I=(0,Rje.useMemo)(function(){return Aje(w,_)},[w,_]),R=[v.euiMark,i&&I.hasScreenReaderHelpText];return l("mark",B0e({css:R,className:d},c),r)};x3.propTypes={className:Jx.default.string,"aria-label":Jx.default.string,"data-test-subj":Jx.default.string,css:Jx.default.any,hasScreenReaderHelpText:Jx.default.bool,children:Jx.default.node.isRequired};var p$=T(z()),_3=T(it()),W0e=T(Fje());function ger(e){return Oer(e)||wer(e)||ber(e)||yer()}function yer(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ber(e,t){if(e){if(typeof e=="string")return z0e(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)?z0e(e,t):void 0}}function wer(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Oer(e){if(Array.isArray(e))return z0e(e)}function z0e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&n.push({start:d,end:h,highlight:v})};if(t.length===0)o(0,r,!1);else{var i=0;t.forEach(function(c){o(i,c.start,!1),o(c.start,c.end,!0),i=c.end}),o(i,r,!1)}return n};var V0e=T(z()),S3=T(it());var $0e=function(t){var r=t.searchSubject,n=t.searchValue,o=t.isStrict,i=t.highlightComponent,c=i===void 0?"mark":i;if(Array.isArray(n))throw new Error("Cannot parse multiple search strings without `highlightAll` enabled");var d=o?r:r.toLowerCase(),h=o?n:n.toLowerCase(),v=d.indexOf(h);if(v===-1)return l(V0e.default.Fragment,null,r);var w=r.substring(0,v),_=r.substring(v,v+n.length),I=r.substring(v+n.length);return l(V0e.default.Fragment,null,w||void 0,l(c,null,_),I||void 0)};$0e.propTypes={searchValue:S3.default.oneOfType([S3.default.string.isRequired,S3.default.arrayOf(S3.default.string.isRequired).isRequired]).isRequired,searchSubject:S3.default.string.isRequired,isStrict:S3.default.bool.isRequired,highlightComponent:S3.default.any};var _er=["children","className","search","strict","highlightAll","hasScreenReaderHelpText"];function Z0e(){return Z0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ier(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}var l1=function(t){var r=t.children,n=t.className,o=t.search,i=t.strict,c=i===void 0?!1:i,d=t.highlightAll,h=d===void 0?!1:d,v=t.hasScreenReaderHelpText,w=v===void 0?!0:v,_=Ser(t,_er),I=o&&o.length>0,R=(0,Bje.useMemo)(function(){var D=function(A){var N=A.children;return l(x3,{hasScreenReaderHelpText:w},N)};return D.propTypes={children:pp.default.string.isRequired},D.displayName="_HighlightComponent",D},[w]);return l("span",Z0e({className:n},_),r&&I?h?l(H0e,{searchValue:o,searchSubject:r,isStrict:c,highlightComponent:R}):l($0e,{searchValue:o,searchSubject:r,isStrict:c,highlightComponent:R}):r)};l1.propTypes={className:pp.default.string,"aria-label":pp.default.string,"data-test-subj":pp.default.string,css:pp.default.any,children:pp.default.string.isRequired,search:pp.default.oneOfType([pp.default.string.isRequired,pp.default.arrayOf(pp.default.string.isRequired).isRequired]).isRequired,strict:pp.default.bool,highlightAll:pp.default.bool};var uP=T(z()),u1=T(it()),Zje=T(At());var zje=function(t){var r=t.euiTheme,n=` +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function QQt(e,t){if(e){if(typeof e=="string")return L0e(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)?L0e(e,t):void 0}}function eer(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function ter(e){if(Array.isArray(e))return L0e(e)}function L0e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ner(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 oer(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Pje(e,t){for(var r=0;r0?"".concat(de,". Press Backspace to delete ").concat(ne[ne.length-1].label,". "):"","Combo box input. ").concat(Ae," Type some text or, to display a list of choices, press Down Arrow. ")+"To exit the list of choices, press Escape.";Re=Y("removeOptionMessage"),Pe=l(ko,null,l("span",{"aria-live":"polite",id:Re},Ve))}var Je=te&&(fe||ye),pt=q&&!(ne!=null&&ne.length)&&!ee,Qe={};!w&&D&&h&&(Qe.clear={"data-test-subj":"comboBoxClearButton",onClick:D});var Fe;!I&&!w&&(Fe={"aria-label":_?"Close list of options":"Open list of options","data-test-subj":"comboBoxToggleListButton",disabled:w,onClick:_&&!w?N:H,side:"right",tabIndex:-1,type:"arrowDown"});var Nt=(0,Cje.default)("euiComboBox__inputWrap",{"euiComboBox__inputWrap--plainText":this.asPlainText});return l(J0,null,function(Vt){var Ke=Vt(Eje),st=[Ke.euiComboBoxInputWrapper,!te&&Ke.multiSelect,i?Ke.compressed:Ke.uncompressed].concat(KQt(n.asPlainText||pt?[Ke.plainText.plainText,i?Ke.plainText.compressed:Ke.plainText.uncompressed]:[]),[w?Ke.disabled:ve?Ke.invalid:_?Ke.open:void 0,Je&&Ke.inGroup]),Tt=[Ke.formLayout.euiComboBox__formControlLayout,!te&&Ke.formLayout.multiSelect];return l(K9,iK({icon:Fe},Qe,{inputId:v,isLoading:Ie,isInvalid:ve,isDisabled:w,compressed:i,fullWidth:d,prepend:fe,append:ye,css:Tt}),l("div",{css:st,className:Nt,"data-test-subj":"comboBoxInput",onClick:F,tabIndex:-1},n.renderPills(),l(sP,{option:n.asPlainText?ne?.[0]:void 0,classNamePrefix:"euiComboBoxPlainTextSelection",marginSize:"xxs"},l("input",{"aria-activedescendant":c,"aria-autocomplete":"list","aria-controls":_?Y("listbox"):"","aria-expanded":_,"aria-label":be,"aria-labelledby":Te,"aria-invalid":ve,css:Ke.euiComboBoxInput,className:"euiComboBox__input","data-test-subj":"comboBoxSearchInput",disabled:w,id:v,onBlur:n.onBlur,onChange:function(Rt){return R(Rt.target.value)},onFocus:n.onFocus,onKeyDown:n.onKeyDown,ref:n.inputRefCallback,role:"combobox",style:{inlineSize:n.asPlainText||pt?"100%":n.state.inputWidth},placeholder:pt?q:void 0,value:n.searchValue,autoFocus:Oe,autoComplete:"off",onClick:n.asPlainText?A:void 0})),Pe))})}}])}(Tje.Component);F0e.propTypes={compressed:xt.default.bool.isRequired,focusedOptionId:xt.default.string,fullWidth:xt.default.bool,hasSelectedOptions:xt.default.bool.isRequired,id:xt.default.string,inputRef:xt.default.any,isDisabled:xt.default.bool,isListOpen:xt.default.bool.isRequired,noIcon:xt.default.bool.isRequired,onBlur:xt.default.any,onChange:xt.default.func.isRequired,onClear:xt.default.func,onClick:xt.default.func.isRequired,onCloseListClick:xt.default.func.isRequired,onFocus:xt.default.any.isRequired,onOpenListClick:xt.default.func.isRequired,onRemoveOption:xt.default.func.isRequired,placeholder:xt.default.string,rootId:xt.default.any.isRequired,searchValue:xt.default.string.isRequired,selectedOptions:xt.default.arrayOf(xt.default.shape({isGroupLabelOption:xt.default.bool,label:xt.default.string.isRequired,key:xt.default.string,options:xt.default.arrayOf(xt.default.shape({isGroupLabelOption:xt.default.bool,label:xt.default.string.isRequired,key:xt.default.string,options:xt.default.arrayOf(xt.default.any.isRequired),value:xt.default.any,prepend:xt.default.node,append:xt.default.node,truncationProps:xt.default.any,toolTipContent:xt.default.node,toolTipProps:xt.default.any,className:xt.default.string,"aria-label":xt.default.string,"data-test-subj":xt.default.string,css:xt.default.any}).isRequired),value:xt.default.any,prepend:xt.default.node,append:xt.default.node,truncationProps:xt.default.any,toolTipContent:xt.default.node,toolTipProps:xt.default.any,className:xt.default.string,"aria-label":xt.default.string,"data-test-subj":xt.default.string,css:xt.default.any}).isRequired).isRequired,singleSelection:xt.default.oneOfType([xt.default.bool.isRequired,xt.default.shape({asPlainText:xt.default.bool}).isRequired]),toggleButtonRef:xt.default.any,value:xt.default.string,prepend:xt.default.oneOfType([xt.default.oneOfType([xt.default.string.isRequired,xt.default.element.isRequired]).isRequired,xt.default.arrayOf(xt.default.oneOfType([xt.default.string.isRequired,xt.default.element.isRequired]).isRequired).isRequired]),append:xt.default.oneOfType([xt.default.oneOfType([xt.default.string.isRequired,xt.default.element.isRequired]).isRequired,xt.default.arrayOf(xt.default.oneOfType([xt.default.string.isRequired,xt.default.element.isRequired]).isRequired).isRequired]),isLoading:xt.default.bool,isInvalid:xt.default.bool,autoFocus:xt.default.bool,"aria-label":xt.default.string,"aria-labelledby":xt.default.string,className:xt.default.string,"data-test-subj":xt.default.string,css:xt.default.any};var gK=T(z()),qe=T(it()),lTe=T(At());var Bje=T(z()),pp=T(it());var Rje=T(z()),Jx=T(it()),Dje=T(At());var Mje=function(t){var r=t.euiTheme,n=t.colorMode,o={LIGHT:.1,DARK:.3};return{euiMark:Q("background-color:",_n(r.colors.primary,o[n]),";font-weight:",r.font.weight.bold,";color:",r.colors.text,";;label:euiMark;")}},Aje=function(t,r){return{hasScreenReaderHelpText:Q("&::before,&::after{",l3(),";}&::before{content:' [",t,"] ';}&::after{content:' [",r,"] ';};label:hasScreenReaderHelpText;")}};var per=["children","className","hasScreenReaderHelpText"];function B0e(){return B0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function fer(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}var x3=function(t){var r=t.children,n=t.className,o=t.hasScreenReaderHelpText,i=o===void 0?!0:o,c=der(t,per),d=(0,Dje.default)("euiMark",n),h=ur(),v=Mje(h),w=wo("euiMark.highlightStart","highlight start"),_=wo("euiMark.highlightEnd","highlight end"),I=(0,Rje.useMemo)(function(){return Aje(w,_)},[w,_]),R=[v.euiMark,i&&I.hasScreenReaderHelpText];return l("mark",B0e({css:R,className:d},c),r)};x3.propTypes={className:Jx.default.string,"aria-label":Jx.default.string,"data-test-subj":Jx.default.string,css:Jx.default.any,hasScreenReaderHelpText:Jx.default.bool,children:Jx.default.node.isRequired};var d$=T(z()),_3=T(it()),W0e=T(Fje());function ger(e){return Oer(e)||wer(e)||ber(e)||yer()}function yer(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ber(e,t){if(e){if(typeof e=="string")return z0e(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)?z0e(e,t):void 0}}function wer(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Oer(e){if(Array.isArray(e))return z0e(e)}function z0e(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&n.push({start:d,end:h,highlight:v})};if(t.length===0)o(0,r,!1);else{var i=0;t.forEach(function(c){o(i,c.start,!1),o(c.start,c.end,!0),i=c.end}),o(i,r,!1)}return n};var V0e=T(z()),S3=T(it());var $0e=function(t){var r=t.searchSubject,n=t.searchValue,o=t.isStrict,i=t.highlightComponent,c=i===void 0?"mark":i;if(Array.isArray(n))throw new Error("Cannot parse multiple search strings without `highlightAll` enabled");var d=o?r:r.toLowerCase(),h=o?n:n.toLowerCase(),v=d.indexOf(h);if(v===-1)return l(V0e.default.Fragment,null,r);var w=r.substring(0,v),_=r.substring(v,v+n.length),I=r.substring(v+n.length);return l(V0e.default.Fragment,null,w||void 0,l(c,null,_),I||void 0)};$0e.propTypes={searchValue:S3.default.oneOfType([S3.default.string.isRequired,S3.default.arrayOf(S3.default.string.isRequired).isRequired]).isRequired,searchSubject:S3.default.string.isRequired,isStrict:S3.default.bool.isRequired,highlightComponent:S3.default.any};var _er=["children","className","search","strict","highlightAll","hasScreenReaderHelpText"];function Z0e(){return Z0e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ier(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}var u1=function(t){var r=t.children,n=t.className,o=t.search,i=t.strict,c=i===void 0?!1:i,d=t.highlightAll,h=d===void 0?!1:d,v=t.hasScreenReaderHelpText,w=v===void 0?!0:v,_=Ser(t,_er),I=o&&o.length>0,R=(0,Bje.useMemo)(function(){var D=function(A){var N=A.children;return l(x3,{hasScreenReaderHelpText:w},N)};return D.propTypes={children:pp.default.string.isRequired},D.displayName="_HighlightComponent",D},[w]);return l("span",Z0e({className:n},_),r&&I?h?l(H0e,{searchValue:o,searchSubject:r,isStrict:c,highlightComponent:R}):l($0e,{searchValue:o,searchSubject:r,isStrict:c,highlightComponent:R}):r)};u1.propTypes={className:pp.default.string,"aria-label":pp.default.string,"data-test-subj":pp.default.string,css:pp.default.any,children:pp.default.string.isRequired,search:pp.default.oneOfType([pp.default.string.isRequired,pp.default.arrayOf(pp.default.string.isRequired).isRequired]).isRequired,strict:pp.default.bool,highlightAll:pp.default.bool};var uP=T(z()),c1=T(it()),Zje=T(At());var zje=function(t){var r=t.euiTheme,n=` color: `.concat(r.colors.primary,`; background-color: `).concat(r.focus.backgroundColor,`; outline-offset: -`).concat(r.focus.width,`; @@ -938,13 +938,13 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho &:disabled { background-color: `).concat(_n(r.colors.disabled,.1),`; } - `);return{euiFilterSelectItem:Q("display:block;",pe("width","100%")," ",Fd("padding","".concat(r.size.xs," ").concat(r.size.m))," ",yr(t,"s")," ",Tn("left")," color:",r.colors.text,";",pe("border-bottom","".concat(r.border.width.thin," solid ").concat(r.colors.lightestShade))," &:hover{cursor:pointer;text-decoration:underline;}&:focus{",n,";}&:disabled{cursor:not-allowed;text-decoration:none;color:",r.colors.disabledText,";};label:euiFilterSelectItem;"),isFocused:Q(n,";;label:isFocused;")}};var Eer=["theme","children","className","disabled","checked","isFocused","showIcons","toolTipContent","toolTipProps","style"];function lP(e){"@babel/helpers - typeof";return lP=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},lP(e)}function sK(){return sK=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ker(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 jer(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Hje(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ver(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 $er(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Gje(e,t){for(var r=0;r0&&arguments[0]!==void 0?arguments[0]:n.fullText,v=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"",w=n.availableWidth;v&&(n.setTextToCheck(v),w=w-n.textWidth),n.setTextToCheck(h),n.widthRatio=w/n.textWidth}),Cl(n,"getTextFromRatio",function(h,v){var w=Math.ceil(h.length*n.widthRatio),_=v==="start"?h.length-w:w,I=cK(h).at(_),R=uK(I,2),D=R[0],F=R[1];return v==="start"?F:D}),Cl(n,"checkIfTruncationIsNeeded",function(){if(n.setTextToCheck(n.fullText),n.availableWidth>=n.textWidth)return!1}),Cl(n,"checkSufficientEllipsisWidth",function(h){var v=h==="startEnd"?"".concat(n.ellipsis," ").concat(n.ellipsis):n.ellipsis;if(n.setTextToCheck(v),n.textWidth>=n.availableWidth*.9)return console.error("The truncation ellipsis is larger than the available width. No text can be rendered."),!1}),Cl(n,"checkTruncationOffsetWidth",function(h){if(n.setTextToCheck(h),n.textWidth>n.availableWidth)return console.error("The passed truncationOffset is too large for the available width. Truncating the offset instead."),!1}),Cl(n,"truncateStart",function(h){var v=n.fullText,w="",_=function(){return w+v};if(h){var I=cK(n.fullText).at(h),R=uK(I,2);w=R[0],v=R[1];var D=w+n.ellipsis;n.checkTruncationOffsetWidth(D)===!1&&(v=w,w="")}for(n.setTextWidthRatio(v,w),v=n.getTextFromRatio(v,"start"),w+=n.ellipsis,n.setTextToCheck(_());n.textWidth>n.availableWidth;)v=J0e(v),n.setTextToCheck(_());return _()}),Cl(n,"truncateEnd",function(h){var v=n.fullText,w="",_=function(){return v+w};if(h){var I=n.fullText.length-h,R=cK(n.fullText).at(I),D=uK(R,2);v=D[0],w=D[1];var F=n.ellipsis+w;n.checkTruncationOffsetWidth(F)===!1&&(v=w,w="")}for(n.setTextWidthRatio(v,w),v=n.getTextFromRatio(v,"end"),w=n.ellipsis+w,n.setTextToCheck(_());n.textWidth>n.availableWidth;)v=G0e(v),n.setTextToCheck(_());return _()}),Cl(n,"truncateStartEndAtPosition",function(h){n.setTextWidthRatio();var v=Math.floor(n.fullText.length*n.widthRatio/2),w=h-v,_=h+v;if(w<0)return n.truncateEnd();if(_>=n.fullText.length)return n.truncateStart();var I=n.fullText.substring(w,_),R=function(){return n.ellipsis+I+n.ellipsis};n.setTextToCheck(R());for(var D;n.textWidth>n.availableWidth;)I=D?G0e(I):J0e(I),D=!D,n.setTextToCheck(R());return R()}),Cl(n,"truncateStartEndAtMiddle",function(){var h=Math.floor(n.fullText.length/2);return n.truncateStartEndAtPosition(h)}),Cl(n,"truncateMiddle",function(){var h=Math.floor(n.fullText.length/2),v=cK(n.fullText).at(h),w=uK(v,2),_=w[0],I=w[1];n.setTextWidthRatio(),_=n.getTextFromRatio(_,"end"),I=n.getTextFromRatio(I,"start");var R=function(){return _+n.ellipsis+I};n.setTextToCheck(R());for(var D;n.textWidth>n.availableWidth;)D=!D,D?_=G0e(_):I=J0e(I),n.setTextToCheck(R());return R()}),n.fullText=o,n.ellipsis=i,n.availableWidth=c,n}return Xer(t,e),Zer(t,[{key:"textWidth",get:function(){return this.debugPerformance&&this.debugCounter++,X0e(pP(t.prototype),"textWidth",this)}}])}(e9),G0e=function(t){return t.substring(0,t.length-1)},J0e=function(t){return t.substring(1)},cK=function(t){return{at:function(n){return[t.substring(0,n),t.substring(n)]}}};var pK={euiTextTruncate:{name:"7o5qnz-euiTextTruncate",styles:"position:relative;overflow:hidden;white-space:nowrap;label:euiTextTruncate;"},euiTextTruncate__truncatedText:{name:"1sjxkb1-euiTextTruncate__truncatedText",styles:"user-select:none;pointer-events:none;label:euiTextTruncate__truncatedText;"},euiTextTruncate__fullText:{name:"19c9gqi-euiTextTruncate__fullText",styles:"position:absolute;inset:0;overflow:hidden;color:rgba(0, 0, 0, 0);@supports (-webkit-hyphens: none){text-overflow:ellipsis;};label:euiTextTruncate__fullText;"}};var Yer=["width","onResize"],Qer=["width","children","text","truncation","truncationOffset","truncationPosition","ellipsis","calculationDelayMs","containerRef","className"],etr=["onResize"];function Y0e(e,t){return otr(e)||ntr(e,t)||rtr(e,t)||ttr()}function ttr(){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 rtr(e,t){if(e){if(typeof e=="string")return Yje(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)?Yje(e,t):void 0}}function Yje(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function itr(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}var E3=function(t){var r=t.width,n=t.onResize,o=Q0e(t,Yer);return r!=null?l(e1e,dP({width:r},o)):l(atr,dP({onResize:n},o))};E3.propTypes={className:Ml.default.string,"aria-label":Ml.default.string,"data-test-subj":Ml.default.string,css:Ml.default.any,text:Ml.default.string.isRequired,truncation:Ml.default.any,truncationOffset:Ml.default.number,truncationPosition:Ml.default.number,ellipsis:Ml.default.string,width:Ml.default.number,onResize:Ml.default.func,children:Ml.default.func,calculationDelayMs:Ml.default.number};var e1e=function(t){var r=t.width,n=t.children,o=t.text,i=t.truncation,c=i===void 0?"end":i,d=t.truncationOffset,h=d===void 0?0:d,v=t.truncationPosition,w=t.ellipsis,_=w===void 0?"\u2026":w,I=t.calculationDelayMs,R=t.containerRef,D=t.className,F=Q0e(t,Qer),A=(0,dp.useState)(null),N=Y0e(A,2),H=N[0],q=N[1],Y=Vg([q,R]),ee=(0,dp.useState)(!I),ne=Y0e(ee,2),te=ne[0],de=ne[1];(0,dp.useEffect)(function(){if(I){var Se=setTimeout(function(){return de(!0)},I);return function(){return clearTimeout(Se)}}},[I]);var fe=(0,dp.useMemo)(function(){var Se=c,Te=0;return c==="end"||c==="start"?0=o.length&&(Se="start")),{truncation:Se,truncationOffset:Te}},[c,h,v,o.length]),ye=fe.truncation,Ie=fe.truncationOffset,he=(0,dp.useMemo)(function(){var Se="";if(!te||!H)return o;if(!r)return Se;var Te=new Kje({fullText:o,ellipsis:_,container:H,availableWidth:r});if(Te.checkIfTruncationIsNeeded()===!1)Se=o;else if(Te.checkSufficientEllipsisWidth(ye)===!1)Se="";else switch(ye){case"end":Se=Te.truncateEnd(Ie);break;case"start":Se=Te.truncateStart(Ie);break;case"startEnd":v==null?Se=Te.truncateStartEndAtMiddle():Se=Te.truncateStartEndAtPosition(v);break;case"middle":Se=Te.truncateMiddle();break}return Se},[te,r,o,ye,Ie,v,_,H]),be=he!==o;return l("div",dP({className:(0,Qje.default)("euiTextTruncate",D),css:pK.euiTextTruncate,ref:Y,title:be?o:void 0},F),be?l(dp.default.Fragment,null,l("span",{className:"euiTextTruncate__truncatedText",css:pK.euiTextTruncate__truncatedText,"aria-hidden":!0,"data-test-subj":"truncatedText"},n?n(he):he),l("span",{className:"euiTextTruncate__fullText",css:pK.euiTextTruncate__fullText,"data-test-subj":"fullText"},o)):l("span",{className:"euiTextTruncate__fullText","data-test-subj":"fullText"},n?n(o):o))};e1e.propTypes={width:Ml.default.number.isRequired,containerRef:Ml.default.any};var atr=function(t){var r=t.onResize,n=Q0e(t,etr),o=(0,dp.useState)(0),i=Y0e(o,2),c=i[0],d=i[1],h=(0,dp.useCallback)(function(v){var w=v.width;d(w),r?.(w)},[r]);return l(Ax,{onResize:h},function(v){return l(e1e,dP({width:c,containerRef:v},n,{"data-resize-observer":"true"}))})};var Xx=T(it()),dK=T(z());var n1e=T(At());function d$(e){"@babel/helpers - typeof";return d$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},d$(e)}var str=["children","className","style","lines","cloneElement"];function r1e(){return r1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function dtr(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}var ftr={euiTextBlockTruncate:{name:"1cfm3ge-euiTextBlockTruncate",styles:"display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:0;overflow:hidden;label:euiTextBlockTruncate;"}},fK=function(t){var r=t.children,n=t.className,o=t.style,i=t.lines,c=t.cloneElement,d=ptr(t,str),h=(0,n1e.default)("euiTextBlockTruncate",n),v=ftr.euiTextBlockTruncate,w=(0,dK.useMemo)(function(){return t1e({WebkitLineClamp:i},o)},[i,o]);return(0,dK.isValidElement)(r)&&c?Sl(r,{css:v,style:t1e(t1e({},r.props.style),w),className:(0,n1e.default)(r.props.className,h)}):l("div",r1e({className:h,css:v,style:w},d),r)};fK.propTypes={className:Xx.default.string,"aria-label":Xx.default.string,"data-test-subj":Xx.default.string,css:Xx.default.any,lines:Xx.default.number.isRequired,cloneElement:Xx.default.bool};var Yen=T(z());var tTe=function(t){var r=t.children;return l("div",{className:"euiComboBoxTitle"},r)};var hK=200,rTe=function(t){var r=t.euiTheme;return{euiComboBoxOptionList:Q(pe("max-height","".concat(hK,"px"))," overflow:hidden;.euiTextTruncate{pointer-events:none;}.euiComboBoxOption__contentWrapper{display:flex;align-items:center;}.euiComboBoxOption__content{flex:1;text-align:start;",Zs(),";}.euiComboBoxOption__emptyStateText{flex:1;text-align:start;",pe("margin-bottom",0),";}.euiComboBoxOption__enterBadge{",pe("margin-left",r.size.xs),";}.euiComboBoxTitle{display:flex;",pe("padding-horizontal",r.size.s),pe("padding-top",pr(r.size.s,function(n){return n+1}))," ",pe("padding-bottom",r.size.xs)," ",To(t,"xxxs"),";};label:euiComboBoxOptionList;"),euiComboBoxOptionList__virtualization:Q(X0(t),";;label:euiComboBoxOptionList__virtualization;"),euiComboBoxOptionsList__empty:Q("padding:",r.size.s,";text-align:center;",K0(),";;label:euiComboBoxOptionsList__empty;")}};var htr=["children"],mtr=["key","isGroupLabelOption","label","value","prepend","append","truncationProps"],vtr=["data-test-subj","activeOptionIndex","areAllOptionsSelected","customOptionText","fullWidth","getSelectedOptionForSearchValue","isCaseSensitive","isLoading","listRef","matchingOptions","onCloseList","onCreateOption","onOptionClick","onOptionEnterKey","onScroll","options","renderOption","rootId","rowHeight","scrollToIndex","searchValue","selectedOptions","singleSelection","delimiter","truncationProps","listboxAriaLabel"];function fP(e){"@babel/helpers - typeof";return fP=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},fP(e)}function nTe(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 oTe(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function gtr(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 ytr(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function iTe(e,t){for(var r=0;r=h.length?l(l1,{search:h,strict:r.props.isCaseSensitive},_):l(x3,null,_))})}),r}return _tr(t,e),btr(t,[{key:"componentDidUpdate",value:function(n){this.listRef&&typeof this.props.activeOptionIndex<"u"&&this.props.activeOptionIndex!==n.activeOptionIndex&&this.listRef.scrollToItem(this.props.activeOptionIndex,"auto")}},{key:"render",value:function(){var n=this,o=this.props,i=o["data-test-subj"],c=o.activeOptionIndex,d=o.areAllOptionsSelected,h=o.customOptionText,v=o.fullWidth,w=o.getSelectedOptionForSearchValue,_=o.isCaseSensitive,I=o.isLoading,R=o.listRef,D=o.matchingOptions,F=o.onCloseList,A=o.onCreateOption,N=o.onOptionClick,H=o.onOptionEnterKey,q=o.onScroll,Y=o.options,ee=o.renderOption,ne=o.rootId,te=o.rowHeight,de=o.scrollToIndex,fe=o.searchValue,ye=o.selectedOptions,Ie=o.singleSelection,he=o.delimiter,be=o.truncationProps,Se=o.listboxAriaLabel,Te=o1e(o,vtr),Pe;if(I)Pe=l(gi,{gutterSize:"s",justifyContent:"center",responsive:!1},l(qt,{grow:!1},l(_r,{size:"m"})),l(qt,{grow:!1},l(Zt,{token:"euiComboBoxOptionsList.loadingOptions",default:"Loading options"})));else if(fe&&D&&D.length===0)if(A&&w)if(he&&fe.includes(he))Pe=l("div",{className:"euiComboBoxOption__contentWrapper"},l("p",{className:"euiComboBoxOption__emptyStateText"},l(Zt,{token:"euiComboBoxOptionsList.delimiterMessage",default:"Add each item separated by {delimiter}",values:{delimiter:l("strong",null,he)}})),i1e);else{var Ve=w({isCaseSensitive:_,searchValue:fe,selectedOptions:ye});if(Ve)Pe=l("p",null,l(Zt,{token:"euiComboBoxOptionsList.alreadyAdded",default:"{label} has already been added",values:{label:l("strong",null,Ve.label)}}));else{var De=function(Ne,Nt){var Vt=new RegExp(/(\{searchValue})/,"gi"),Ke=Ne.split(Vt);return l("p",{className:"euiComboBoxOption__emptyStateText"},Ke.map(function(st,Tt){return st.match(Vt)?l("strong",{key:Tt},Nt):st}))};Pe=l("div",{className:"euiComboBoxOption__contentWrapper"},h?De(h,fe):l("p",{className:"euiComboBoxOption__emptyStateText"},l(Zt,{token:"euiComboBoxOptionsList.createCustomOption",default:"Add {searchValue} as a custom option",values:{searchValue:l("strong",null,fe)}})),i1e)}}else Pe=l("p",null,l(Zt,{token:"euiComboBoxOptionsList.noMatchingOptions",default:"{searchValue} doesn't match any options",values:{searchValue:l("strong",null,fe)}}));else Y.length?d&&(Pe=l("p",null,l(Zt,{token:"euiComboBoxOptionsList.allOptionsSelected",default:"You've selected all available options"}))):Pe=l("p",null,l(Zt,{token:"euiComboBoxOptionsList.noAvailableOptions",default:"There aren't any options available"}));var He=D.length<7?D.length:7,Je=He*(te+1),vt=Je>hK?hK:Je;return l(G0,null,function(Qe){var Ne=Qe(rTe);return l("div",Kx({css:Ne.euiComboBoxOptionList,className:"euiComboBoxOptionsList","data-test-subj":(0,lTe.default)("comboBoxOptionsList",i),ref:R},Te),Pe?l(Xt,{size:"xs",css:Ne.euiComboBoxOptionsList__empty,className:"euiComboBoxOptionsList__empty"},Pe):l(u$,{css:Ne.euiComboBoxOptionList__virtualization,className:"euiComboBoxOptionsList__virtualization",height:vt,onScroll:q,itemCount:D.length,itemSize:te,itemData:D,ref:n.setListRef,innerElementType:n.ListInnerElement,width:n.context},n.ListRow))})}}])}(vK.Component);c1(hP,"contextType",Jme);c1(hP,"defaultProps",{"data-test-subj":"",rowHeight:29,isCaseSensitive:!1});hP.propTypes={className:qe.default.string,"aria-label":qe.default.string,"data-test-subj":qe.default.string,css:qe.default.any,activeOptionIndex:qe.default.number,areAllOptionsSelected:qe.default.bool,listboxAriaLabel:qe.default.string.isRequired,customOptionText:qe.default.string,fullWidth:qe.default.bool,getSelectedOptionForSearchValue:qe.default.func,isCaseSensitive:qe.default.bool,isLoading:qe.default.bool,listRef:qe.default.any.isRequired,matchingOptions:qe.default.arrayOf(qe.default.shape({isGroupLabelOption:qe.default.bool,label:qe.default.string.isRequired,key:qe.default.string,options:qe.default.arrayOf(qe.default.shape({isGroupLabelOption:qe.default.bool,label:qe.default.string.isRequired,key:qe.default.string,options:qe.default.arrayOf(qe.default.any.isRequired),value:qe.default.any,prepend:qe.default.node,append:qe.default.node,truncationProps:qe.default.any,toolTipContent:qe.default.node,toolTipProps:qe.default.any,className:qe.default.string,"aria-label":qe.default.string,"data-test-subj":qe.default.string,css:qe.default.any}).isRequired),value:qe.default.any,prepend:qe.default.node,append:qe.default.node,truncationProps:qe.default.any,toolTipContent:qe.default.node,toolTipProps:qe.default.any,className:qe.default.string,"aria-label":qe.default.string,"data-test-subj":qe.default.string,css:qe.default.any}).isRequired).isRequired,onCloseList:qe.default.func.isRequired,onCreateOption:qe.default.func,onOptionClick:qe.default.func,onOptionEnterKey:qe.default.func,onScroll:qe.default.any,options:qe.default.arrayOf(qe.default.shape({isGroupLabelOption:qe.default.bool,label:qe.default.string.isRequired,key:qe.default.string,options:qe.default.arrayOf(qe.default.shape({isGroupLabelOption:qe.default.bool,label:qe.default.string.isRequired,key:qe.default.string,options:qe.default.arrayOf(qe.default.any.isRequired),value:qe.default.any,prepend:qe.default.node,append:qe.default.node,truncationProps:qe.default.any,toolTipContent:qe.default.node,toolTipProps:qe.default.any,className:qe.default.string,"aria-label":qe.default.string,"data-test-subj":qe.default.string,css:qe.default.any}).isRequired),value:qe.default.any,prepend:qe.default.node,append:qe.default.node,truncationProps:qe.default.any,toolTipContent:qe.default.node,toolTipProps:qe.default.any,className:qe.default.string,"aria-label":qe.default.string,"data-test-subj":qe.default.string,css:qe.default.any}).isRequired).isRequired,renderOption:qe.default.func,rootId:qe.default.any.isRequired,rowHeight:qe.default.number.isRequired,scrollToIndex:qe.default.number,searchValue:qe.default.string.isRequired,selectedOptions:qe.default.arrayOf(qe.default.shape({isGroupLabelOption:qe.default.bool,label:qe.default.string.isRequired,key:qe.default.string,options:qe.default.arrayOf(qe.default.shape({isGroupLabelOption:qe.default.bool,label:qe.default.string.isRequired,key:qe.default.string,options:qe.default.arrayOf(qe.default.any.isRequired),value:qe.default.any,prepend:qe.default.node,append:qe.default.node,truncationProps:qe.default.any,toolTipContent:qe.default.node,toolTipProps:qe.default.any,className:qe.default.string,"aria-label":qe.default.string,"data-test-subj":qe.default.string,css:qe.default.any}).isRequired),value:qe.default.any,prepend:qe.default.node,append:qe.default.node,truncationProps:qe.default.any,toolTipContent:qe.default.node,toolTipProps:qe.default.any,className:qe.default.string,"aria-label":qe.default.string,"data-test-subj":qe.default.string,css:qe.default.any}).isRequired).isRequired,singleSelection:qe.default.oneOfType([qe.default.bool.isRequired,qe.default.shape({asPlainText:qe.default.bool}).isRequired]),delimiter:qe.default.string,truncationProps:qe.default.any};var s1e={euiComboBox:Q("position:relative;",pe("width","100%")," ",pe("height","auto"),";;label:euiComboBox;"),fullWidth:Q(pe("max-width","100%"),";;label:fullWidth;")};var Itr=["data-test-subj","async","className","compressed","customOptionText","fullWidth","id","inputRef","isCaseSensitive","isClearable","isDisabled","isInvalid","isLoading","noSuggestions","onBlur","onChange","onCreateOption","onSearchChange","options","placeholder","renderOption","rowHeight","selectedOptions","singleSelection","prepend","sortMatchesBy","delimiter","append","autoFocus","truncationProps","inputPopoverProps","optionMatcher","aria-label","aria-labelledby"];function mP(e){"@babel/helpers - typeof";return mP=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},mP(e)}function gK(){return gK=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ptr(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 uTe(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 cTe(e){for(var t=1;t0?1:-1;v[w].isGroupLabelOption;)w=w+_,w<0?w=v.length-1:w===v.length&&(w=0);return{activeOptionIndex:w}})}),Gn(r,"hasActiveOption",function(){return r.state.activeOptionIndex>-1&&r.state.activeOptionIndex0&&r.addCustomOption(c,v)}):r.addCustomOption(c,d)}),Gn(r,"onContainerBlur",function(c){var d=c.relatedTarget,h=d&&r.listRefInstance&&r.listRefInstance.contains(d),v=d&&r.comboBoxRefInstance&&r.comboBoxRefInstance.contains(d);if(!h&&!v){var w,_;(w=(_=r.props).onBlur)===null||w===void 0||w.call(_,c),r.closeList(),r.setState({hasFocus:!1}),r.hasActiveOption()||r.setCustomOptions(!0)}else h&&requestAnimationFrame(function(){var I;(I=r.searchInputRefInstance)===null||I===void 0||I.focus()})}),Gn(r,"onKeyDown",function(c){var d,h;if(!r.props.isDisabled)switch(c.persist(),c.key){case cn.ARROW_UP:c.preventDefault(),c.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(-1):r.openList();break;case cn.ARROW_DOWN:c.preventDefault(),c.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(1):r.openList();break;case cn.ESCAPE:r.state.isListOpen&&(c.preventDefault(),c.stopPropagation(),r.closeList());break;case cn.ENTER:c.target===r.searchInputRefInstance&&(c.preventDefault(),c.stopPropagation(),r.hasActiveOption()?r.onAddOption(r.state.matchingOptions[r.state.activeOptionIndex]):r.setCustomOptions(!1));break;case cn.TAB:r.hasActiveOption()&&r.state.isListOpen&&(c.preventDefault(),c.stopPropagation());break;default:(d=(h=r.props).onKeyDown)===null||d===void 0||d.call(h,c)}}),Gn(r,"onOptionEnterKey",function(c){r.onAddOption(c)}),Gn(r,"onOptionClick",function(c){r.onAddOption(c)}),Gn(r,"onAddOption",function(c,d){if(!c.disabled){var h=r.props,v=h.onChange,w=h.selectedOptions,_=h.singleSelection,I=!!_,R=I?[c]:w.concat(c);if(v?.(R),r.clearSearchValue(),r.clearActiveOption(),!d){var D;(D=r.searchInputRefInstance)===null||D===void 0||D.focus()}I?requestAnimationFrame(function(){return r.closeList()}):r.setState({activeOptionIndex:r.state.matchingOptions.indexOf(c)})}}),Gn(r,"onRemoveOption",function(c){var d=r.props,h=d.onChange,v=d.selectedOptions;h?.(v.filter(function(w){return w!==c})),r.clearActiveOption()}),Gn(r,"clearSelectedOptions",function(){var c,d,h;(c=(d=r.props).onChange)===null||c===void 0||c.call(d,[]),(h=r.searchInputRefInstance)===null||h===void 0||h.focus(),r.state.isListOpen||r.openList()}),Gn(r,"onComboBoxClick",function(){var c;if((c=r.searchInputRefInstance)===null||c===void 0||c.focus(),r.props.singleSelection&&r.props.selectedOptions.length===1){var d=r.state.matchingOptions.findIndex(function(h){return h.label===r.props.selectedOptions[0].label&&h.key===r.props.selectedOptions[0].key});r.setState({activeOptionIndex:d})}else r.clearActiveOption()}),Gn(r,"onOpenListClick",function(){var c;(c=r.searchInputRefInstance)===null||c===void 0||c.focus(),r.state.isListOpen||r.openList()}),Gn(r,"onOptionListScroll",function(){var c;(c=r.searchInputRefInstance)===null||c===void 0||c.focus()}),Gn(r,"onSearchChange",function(c){var d=r.props,h=d.onSearchChange,v=d.delimiter;r.setState({searchValue:c},function(){if(c&&r.state.isListOpen===!1&&r.openList(),h){var w=r.state.matchingOptions.length>0;h(c,w)}}),v&&c.endsWith(v)&&r.setCustomOptions(!1)}),r}return Atr(t,e),jtr(t,[{key:"render",value:function(){var n=this,o=this.props,i=o["data-test-subj"],c=o.async,d=o.className,h=o.compressed,v=o.customOptionText,w=o.fullWidth,_=o.id,I=o.inputRef,R=o.isCaseSensitive,D=o.isClearable,F=o.isDisabled,A=o.isInvalid,N=o.isLoading,H=o.noSuggestions,q=o.onBlur,Y=o.onChange,ee=o.onCreateOption,ne=o.onSearchChange,te=o.options,de=o.placeholder,fe=o.renderOption,ye=o.rowHeight,Ie=o.selectedOptions,he=o.singleSelection,be=o.prepend,Se=o.sortMatchesBy,Te=o.delimiter,Pe=o.append,Ve=o.autoFocus,De=o.truncationProps,He=o.inputPopoverProps,Je=o.optionMatcher,vt=o["aria-label"],Qe=o["aria-labelledby"],Ne=Etr(o,Itr),Nt=this.state,Vt=Nt.activeOptionIndex,Ke=Nt.hasFocus,st=Nt.isListOpen,Tt=Nt.searchValue,wr=Nt.matchingOptions,Rt=_??this.rootId("_eui-combobox-id"),Ut=!!(A||(Ke===!1||st===!1)&&Tt),vr=(0,vTe.default)("euiComboBox",d,{"euiComboBox-isDisabled":F,"euiComboBox-isInvalid":Ut,"euiComboBox-isOpen":st}),Sr=Ie.map(function(Pn){return Pn.label}).join(", "),Er;if(!H&&st){var po=i?"".concat(i,"-optionsList"):void 0;Er=l(Zt,{token:"euiComboBox.listboxAriaLabel",default:"Choose from the following options"},function(Pn){return l(hP,{activeOptionIndex:n.state.activeOptionIndex,areAllOptionsSelected:n.areAllOptionsSelected(),customOptionText:v,"data-test-subj":po,fullWidth:w,isCaseSensitive:R,isLoading:N,listRef:n.listRefCallback,matchingOptions:wr,onCloseList:n.closeList,onCreateOption:ee,onOptionClick:n.onOptionClick,onOptionEnterKey:n.onOptionEnterKey,onScroll:n.onOptionListScroll,options:te,singleSelection:he,renderOption:fe,rootId:n.rootId,rowHeight:ye,scrollToIndex:Vt,searchValue:Tt,selectedOptions:Ie,delimiter:Te,getSelectedOptionForSearchValue:tK,listboxAriaLabel:Pn,truncationProps:De})})}return l(fA,null,function(Pn){var Nr=[s1e.euiComboBox,w?s1e.fullWidth:bx("max-width",EV(Pn))];return l("div",gK({css:Nr},Ne,{className:vr,"data-test-subj":i,onKeyDown:n.onKeyDown,onBlur:n.onContainerBlur,ref:n.comboBoxRefCallback}),l(TX,gK({fullWidth:w,panelPaddingSize:"none",disableFocusTrap:!0,closeOnScroll:!0},He,{isOpen:st,closePopover:n.closeList,input:l(F0e,{compressed:h,focusedOptionId:n.hasActiveOption()?n.rootId("_option-".concat(n.state.activeOptionIndex)):void 0,fullWidth:w,hasSelectedOptions:Ie.length>0,id:Rt,inputRef:n.searchInputRefCallback,isDisabled:F,isListOpen:st,noIcon:!!H,onChange:n.onSearchChange,onClear:D&&!F?n.clearSelectedOptions:void 0,onClick:n.onComboBoxClick,onCloseListClick:n.closeList,onFocus:n.onComboBoxFocus,onOpenListClick:n.onOpenListClick,onRemoveOption:n.onRemoveOption,placeholder:de,rootId:n.rootId,searchValue:Tt,selectedOptions:Ie,singleSelection:he,value:Sr,append:he?Pe:void 0,prepend:he?be:void 0,isLoading:N,isInvalid:Ut,autoFocus:Ve,"aria-label":vt,"aria-labelledby":Qe})}),Er))})}}],[{key:"getDerivedStateFromProps",value:function(n,o){var i=n.async,c=n.isCaseSensitive,d=n.options,h=n.selectedOptions,v=n.singleSelection,w=n.sortMatchesBy,_=n.optionMatcher,I=o.activeOptionIndex,R=o.searchValue,D=D0e({options:d,selectedOptions:h,searchValue:R,isCaseSensitive:c,isPreFiltered:i,showPrevSelected:!!v,sortMatchesBy:w,optionMatcher:_}),F={matchingOptions:D};return I>=D.length&&(F.activeOptionIndex=-1),F}}])}(mTe.Component);Gn(Yx,"defaultProps",{async:!1,compressed:!1,fullWidth:!1,isClearable:!0,options:[],selectedOptions:[],singleSelection:!1,prepend:void 0,append:void 0,sortMatchesBy:"none",optionMatcher:bje()});Yx.propTypes={"data-test-subj":In.default.string,async:In.default.bool.isRequired,className:In.default.string,compressed:In.default.bool.isRequired,fullWidth:In.default.bool.isRequired,id:In.default.string,inputRef:In.default.any,isClearable:In.default.bool.isRequired,isDisabled:In.default.bool,isInvalid:In.default.bool,isLoading:In.default.bool,noSuggestions:In.default.bool,onBlur:In.default.any,onChange:In.default.func,onFocus:In.default.any,onKeyDown:In.default.any,onSearchChange:In.default.func,placeholder:In.default.string,rowHeight:In.default.number,singleSelection:In.default.oneOfType([In.default.bool.isRequired,In.default.shape({asPlainText:In.default.bool}).isRequired]).isRequired,sortMatchesBy:In.default.oneOf(["none","startsWith"]).isRequired,isCaseSensitive:In.default.bool,optionMatcher:In.default.func,prepend:In.default.any,append:In.default.any,delimiter:In.default.string,autoFocus:In.default.bool,"aria-label":In.default.string,"aria-labelledby":In.default.string,truncationProps:In.default.any,inputPopoverProps:In.default.any,css:In.default.any};var ty=T(z()),ey=T(it());var frn=T(z()),mc=T(it()),STe=T(At());var qtn=T(z()),sn=T(it()),yTe=T(At());var bK=function(t){var r=t.euiTheme;return{euiPaginationButton:Q("outline-offset:-",r.focus.width,";;label:euiPaginationButton;"),isActive:Q("font-weight:",r.font.weight.bold,";color:",r.colors.primary,";&,&:hover{cursor:default;text-decoration:underline;};label:isActive;")}};function f$(e){"@babel/helpers - typeof";return f$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},f$(e)}var Dtr=["className","isActive","pageIndex","totalPages"];function c1e(){return c1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ztr(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}var p1e=function(t){var r=t.className,n=t.isActive,o=t.pageIndex,i=t.totalPages,c=Btr(t,Dtr),d=ur(),h=bK(d),v=[h.euiPaginationButton,n&&h.isActive],w=(0,yTe.default)("euiPaginationButton",r),_=u1e(u1e(u1e({css:v,className:w,size:"s",color:"text","data-test-subj":"pagination-button-".concat(o),isDisabled:n},n&&{"aria-current":!0}),c["aria-controls"]&&{href:"#".concat(c["aria-controls"])}),c),I=o+1;return l(Zt,{token:"euiPaginationButton.longPageString",default:"Page {page} of {totalPages}",values:{page:I,totalPages:i}},function(R){return l(Zt,{token:"euiPaginationButton.shortPageString",default:"Page {page}",values:{page:I}},function(D){return l(cu,c1e({"aria-label":i?R:D},_),I)})})};p1e.propTypes={href:sn.default.string,onClick:sn.default.func,color:sn.default.any,size:sn.default.any,flush:sn.default.any,isDisabled:sn.default.bool,isLoading:sn.default.bool,isSelected:sn.default.bool,target:sn.default.string,rel:sn.default.string,type:sn.default.any,buttonRef:sn.default.any,contentProps:sn.default.shape({className:sn.default.string,"aria-label":sn.default.string,"data-test-subj":sn.default.string,css:sn.default.any}),iconType:sn.default.oneOfType([sn.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,sn.default.string.isRequired,sn.default.elementType.isRequired]),iconSide:sn.default.oneOfType([sn.default.any.isRequired,sn.default.oneOf([void 0])]),textProps:sn.default.oneOfType([sn.default.shape({className:sn.default.string,"aria-label":sn.default.string,"data-test-subj":sn.default.string,css:sn.default.any,ref:sn.default.any,"data-text":sn.default.string}).isRequired,sn.default.oneOf([!1])]),iconSize:sn.default.any,className:sn.default.string,"aria-label":sn.default.string,"data-test-subj":sn.default.string,css:sn.default.any,isActive:sn.default.bool,pageIndex:sn.default.number.isRequired,totalPages:sn.default.number};var ern=T(z()),wK=T(it()),bTe=T(At());function d1e(){return d1e=Object.assign?Object.assign.bind():function(e){for(var t=1;tspan{",pe("margin-horizontal",r.size.s)," font-weight:",r.font.weight.semiBold,";&:first-of-type{color:",r.colors.primaryText,";}};label:euiPagination__compressedText;"),euiPagination__list:Wtr,euiPagination__ellipsis:Q("color:",r.colors.disabledText,";font-size:",yr(t,"s").fontSize,";",pe("padding-horizontal",r.size.s)," ",pe("height",r.size.l),";;label:euiPagination__ellipsis;")}};function m$(e){"@babel/helpers - typeof";return m$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},m$(e)}var Htr=["className","pageCount","activePage","onPageClick","compressed","aria-controls","responsive"];function xTe(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 _Te(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Utr(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}var f1e=5,Gtr=Math.floor(f1e*.5),OK=function(t){var r=t.className,n=t.pageCount,o=n===void 0?1:n,i=t.activePage,c=i===void 0?0:i,d=t.onPageClick,h=d===void 0?function(){}:d,v=t.compressed,w=t["aria-controls"],_=t.responsive,I=_===void 0?["xs","s"]:_,R=qtr(t,Htr),D=Xne(I,!!I),F=ur(),A=OTe(F),N=v||D,H=function(Tt,wr){if(Tt.preventDefault(),w){var Rt=document.getElementById(w);Rt&&Rt.focus()}h(wr)},q=(0,STe.default)("euiPagination",r),Y=(o<1||N)&&l(vP,{type:"first",ariaControls:w,onClick:function(Tt){return H(Tt,0)},disabled:c===0}),ee=l(vP,{type:"previous",ariaControls:w,onClick:function(Tt){return H(Tt,c-1)},disabled:c===0}),ne=l(vP,{type:"next",ariaControls:w,onClick:function(Tt){return H(Tt,c+1)},disabled:c===-1||c===o-1}),te=(o<1||N)&&l(vP,{type:"last",ariaControls:w,onClick:function(Tt){return H(Tt,o?o-1:-1)},disabled:c===-1||c===o-1}),de;if(o){var fe={activePage:c,ariaControls:w,safeClick:H,pageCount:o};if(N)de=l(Xt,{size:"s",css:A.euiPagination__compressedText,className:"euiPagination__compressedText"},l(Zt,{token:"euiPagination.pageOfTotalCompressed",default:"{page} of {total}",values:{page:l("span",null,c+1),total:l("span",null,o)}}));else{for(var ye=[],Ie=Math.max(0,Math.min(c-Gtr,o-f1e)),he=Math.min(o,Ie+f1e),be=Ie,Se=0;be0&&(Te.push(l(h$,Qg({pageIndex:0,key:0},fe))),Ie>1&&Ie!==2?Te.push(l(Zt,{key:"startingEllipses",token:"euiPagination.firstRangeAriaLabel",default:"Skipping pages 2 to {lastPage}",values:{lastPage:Ie}},function(st){return l("li",{"aria-label":st,className:"euiPagination__item",css:A.euiPagination__ellipsis},"\u2026")})):Ie===2&&Te.push(l(h$,Qg({pageIndex:1,key:1},fe))));var Pe=[];hee.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function irr(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}var Qx=function(t){var r=x9("EuiTablePagination",t),n=r.activePage,o=r.itemsPerPage,i=o===void 0?P3.itemsPerPage:o,c=r.itemsPerPageOptions,d=c===void 0?P3.itemsPerPageOptions:c,h=r.showPerPageOptions,v=h===void 0?P3.showPerPageOptions:h,w=r.onChangeItemsPerPage,_=r.onChangePage,I=r.pageCount,R=orr(r,Ytr),D=(0,ty.useState)(!1),F=Qtr(D,2),A=F[0],N=F[1],H=(0,ty.useCallback)(function(){N(function(te){return!te})},[]),q=(0,ty.useCallback)(function(){N(!1)},[]),Y=l(cu,{size:"xs",color:"text",iconType:"arrowDown",iconSide:"right","data-test-subj":"tablePaginationPopoverButton",onClick:H},i===0?l(Zt,{token:"euiTablePagination.allRows",default:"Showing all rows"}):l(ty.default.Fragment,null,l(Zt,{token:"euiTablePagination.rowsPerPage",default:"Rows per page"}),": ",i)),ee=(0,ty.useMemo)(function(){return d.map(function(te){return l(Gd,{key:te,icon:te===i?"check":"empty","aria-current":te===i?"true":void 0,onClick:function(){q(),w?.(te)},"data-test-subj":"tablePagination-".concat(te,"-rows")},te===0?l(Zt,{token:"euiTablePagination.rowsPerPageOptionShowAllRows",default:"Show all rows"}):l(Zt,{token:"euiTablePagination.rowsPerPageOption",values:{rowsPerPage:te},default:"{rowsPerPage} rows"}))})},[d,i,w,q]),ne=l(lp,{button:Y,isOpen:A,closePopover:q,panelPaddingSize:"none",anchorPosition:"upRight"},l(qx,{items:ee,"data-test-subj":"tablePaginationRowOptions"}));return l(gi,{justifyContent:"spaceBetween",alignItems:"center",responsive:!1,wrap:!0,gutterSize:"s",className:"eui-xScroll"},l(qt,{grow:!1},v&&ne),l(qt,{grow:!1},i>0&&l(OK,m1e({pageCount:I,activePage:n,onPageClick:_},R))))};Qx.propTypes={showPerPageOptions:ey.default.bool,itemsPerPage:ey.default.number,itemsPerPageOptions:ey.default.arrayOf(ey.default.number.isRequired),onChangeItemsPerPage:ey.default.func,onChangePage:ey.default.func,"aria-controls":ey.default.string,"aria-label":ey.default.string};var MTe=T(z()),Fh=T(it()),ATe=T(At());var arr={name:"10tso78-expanded",styles:"flex-basis:0%;flex-grow:1;justify-content:center;label:expanded;"},jTe=function(t){var r=t.euiTheme;return{euiTab:Q("display:flex;cursor:pointer;flex-direction:row;align-items:center;gap:",r.size.s,";",pe("padding-vertical",0)," ",pe("padding-horizontal",r.size.xs),"font-weight:",r.font.weight.semiBold,";color:",r.colors.title,";&:focus{outline-offset:-",r.focus.width,";};label:euiTab;"),expanded:arr,selected:Q("box-shadow:inset 0 -",r.border.width.thick," 0 ",r.colors.primary,";color:",r.colors.primaryText,";;label:selected;"),disabled:{disabled:Q("cursor:not-allowed;color:",r.colors.disabledText,";;label:disabled;"),selected:Q("box-shadow:inset 0 -",r.border.width.thick," 0 ",r.colors.disabledText,";;label:selected;")}}},TTe=function(t){var r=t.euiTheme;return{euiTab__content:Q("font-weight:",r.font.weight[r.font.title.weight],";;label:euiTab__content;"),s:Q("font-size:",yr(t,"xs").fontSize,";line-height:",r.size.xl,";;label:s;"),m:Q("font-size:",yr(t,"s").fontSize,";line-height:",r.size.xxl,";;label:m;"),l:Q("font-size:",yr(t,"m").fontSize,";line-height:",pr([r.size.xl,r.size.s],function(n,o){return n+o}),";;label:l;"),xl:Q("font-size:",yr(t,"l").fontSize,";line-height:",pr([r.size.xxxl,r.size.s],function(n,o){return n+o}),";;label:xl;")}};var CTe=T(z()),srr={expand:!1,size:"m"},xK=(0,CTe.createContext)(srr);var lrr=["isSelected","children","className","disabled","href","target","rel","prepend","append"];function _K(){return _K=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function crr(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}var v1e=function(t){var r=t.isSelected,n=t.children,o=t.className,i=t.disabled,c=t.href,d=t.target,h=t.rel,v=t.prepend,w=t.append,_=urr(t,lrr),I=(0,MTe.useContext)(xK),R=I.size,D=I.expand,F=!c||$d(c),A=i||!F,N=(0,ATe.default)("euiTab",o,{"euiTab-isSelected":r}),H=mt(jTe),q=[H.euiTab,D&&H.expanded,A&&H.disabled.disabled,r&&(A?H.disabled.selected:H.selected)],Y=mt(TTe),ee=[Y.euiTab__content,R&&Y[R]],ne=v&&l("span",{className:"euiTab__prepend"},v),te=w&&l("span",{className:"euiTab__append"},w);if(c&&!A){var de=va({href:c,target:d,rel:h});return l("a",_K({role:"tab","aria-selected":!!r,className:N,css:q,href:c,target:d,rel:de},_),ne,l("span",{className:"euiTab__content eui-textTruncate",css:ee},n),te)}return l("button",_K({role:"tab","aria-selected":!!r,type:"button",className:N,css:q,disabled:A},_),ne,l("span",{className:"euiTab__content eui-textTruncate",css:ee},n),te)};v1e.propTypes={isSelected:Fh.default.bool,disabled:Fh.default.bool,prepend:Fh.default.node,append:Fh.default.node,className:Fh.default.string,"aria-label":Fh.default.string,"data-test-subj":Fh.default.string,css:Fh.default.any,href:Fh.default.string,onClick:Fh.default.func};var DTe=T(z()),ry=T(it()),LTe=T(At());var RTe=function(t){var r=t.euiTheme;return{euiTabs:Q("display:flex;",pe("max-width","100%")," ",$0("overflow-x","auto")," ",$0("overflow-y","hidden")," position:relative;flex-shrink:0;;label:euiTabs;"),bottomBorder:Q("box-shadow:inset 0 -",r.border.width.thin," 0 ",r.border.color,";;label:bottomBorder;"),s:Q("gap:",r.size.m,";;label:s;"),m:Q("gap:",r.size.base,";;label:m;"),l:Q("gap:",r.size.l,";;label:l;"),xl:Q("gap:",r.size.xl,";;label:xl;")}};var prr=["children","className","bottomBorder","expand","size"];function g1e(){return g1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function frr(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}var SK=(0,DTe.forwardRef)(function(e,t){var r=e.children,n=e.className,o=e.bottomBorder,i=o===void 0?!0:o,c=e.expand,d=c===void 0?!1:c,h=e.size,v=h===void 0?"m":h,w=drr(e,prr),_=(0,LTe.default)("euiTabs",n),I=mt(RTe),R=[I.euiTabs,I[v],i&&I.bottomBorder];return l("div",g1e({ref:t,className:_,css:R},r&&{role:"tablist"},w),l(xK.Provider,{value:{expand:d,size:v}},r))});SK.propTypes={className:ry.default.string,"aria-label":ry.default.string,"data-test-subj":ry.default.string,css:ry.default.any,children:ry.default.node,expand:ry.default.bool,bottomBorder:ry.default.bool,size:ry.default.any};SK.displayName="EuiTabs";var EK=T(z()),Lr=T(it());var hrr=["className","expand","initialSelectedTab","onTabClick","selectedTab","size","tabs","autoFocus"],mrr=["id","name","content"];function gP(e){"@babel/helpers - typeof";return gP=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},gP(e)}function y1e(){return y1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vrr(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 grr(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function zTe(e,t){for(var r=0;r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Drr(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}var b$=function(t){var r=t.children,n=t.className,o=t.color,i=t.textSize,c=i===void 0?"s":i,d=Rrr(t,Arr),h=ur(),v=GTe(h),w=[v.euiHealth,v[c]],_=(0,JTe.default)("euiHealth",n);return l("div",O1e({css:w,className:_},d),l(gi,{gutterSize:"xs",alignItems:"center",responsive:!1},l(qt,{grow:!1},l(mr,{type:"dot",color:o})),l(qt,{grow:!1},r)))};b$.propTypes={className:ny.default.string,"aria-label":ny.default.string,"data-test-subj":ny.default.string,css:ny.default.any,color:ny.default.oneOfType([ny.default.string.isRequired,ny.default.any.isRequired]),textSize:ny.default.any};var TK=T(z()),ai=T(it()),fCe=T(At());var nCe=T(z()),S1e=T(it()),oCe=T(At());var Lrr={name:"gacnmc-allowFullScreen",styles:"&:hover [class*='euiImageCaption']{text-decoration:underline;};label:allowFullScreen;"},XTe=function(t){var r=t.euiTheme;return{euiImageWrapper:Q("display:inline-block;",pe("max-width","100%")," ",Tn("center"),"line-height:0;flex-shrink:0;;label:euiImageWrapper;"),allowFullScreen:Lrr,s:Q("margin:",r.size.s,";;label:s;"),m:Q("margin:",r.size.base,";;label:m;"),l:Q("margin:",r.size.l,";;label:l;"),xl:Q("margin:",r.size.xl,";;label:xl;"),left:Q(_oe(t,"m"),"{float:left;float:",LU.left,";",pe("margin-left","0"),";",pe("margin-top","0"),";};label:left;"),right:Q(_oe(t,"m"),"{float:right;float:",LU.right,";",pe("margin-right","0"),";",pe("margin-top","0"),";};label:right;"),fullWidth:Q(pe("width","100%"),";;label:fullWidth;")}};var YTe=T(z()),wP=T(it());var KTe=function(t){var r=t.euiTheme;return{euiImageButton:Q("position:relative;cursor:pointer;text-align:match-parent;line-height:0;&::before{opacity:0;content:'';pointer-events:none;position:absolute;inset:0;",bn,"{transition:opacity ",r.animation.fast," ",r.animation.resistance,";}}&:hover,&:focus{&::before{opacity:1;}[class*='euiImageButton__icon']{opacity:1;}}&:focus{",uu(t,"outset"),";};label:euiImageButton;"),fullWidth:Q(pe("width","100%"),";;label:fullWidth;"),shadowHover:Q("&::before{",cc(t,"s"),";};label:shadowHover;"),hasShadowHover:Q("&::before{",cc(t,"m"),";};label:hasShadowHover;")}},Nrr={name:"xj4dsa-closeFullScreen",styles:"pointer-events:none;label:closeFullScreen;"},kK=function(t){var r=t.euiTheme;return{euiImageButton__icon:Q("position:absolute;",pe("top",r.size.base)," ",pe("right",r.size.base),";;label:euiImageButton__icon;"),openFullScreen:Q("opacity:0;cursor:pointer;",bn,"{transition:opacity ",r.animation.slow," ",r.animation.resistance,";};label:openFullScreen;"),closeFullScreen:Nrr}};var Frr=["hasAlt","hasShadow","children","onClick","onKeyDown","isFullScreen","isFullWidth","fullScreenIconColor"];function x1e(){return x1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zrr(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}var Wrr={light:"ghost",dark:"default"},w$=function(t){var r=t.hasAlt,n=t.hasShadow,o=t.children,i=t.onClick,c=t.onKeyDown,d=t.isFullScreen,h=t.isFullWidth,v=t.fullScreenIconColor,w=v===void 0?"light":v,_=Brr(t,Frr),I=ur(),R=KTe(I),D=[R.euiImageButton,n?R.hasShadowHover:R.shadowHover,!d&&h&&R.fullWidth],F=kK(I),A=[F.euiImageButton__icon,F.openFullScreen],N=wo("euiImageButton.openFullScreen","Click to open this image in fullscreen mode"),H=wo("euiImageButton.closeFullScreen","Press Escape or click to close image fullscreen mode"),q=Wrr[w];return l(YTe.default.Fragment,null,l("button",x1e({type:"button",css:D,onClick:i,onKeyDown:c},_),d&&l(ko,null,l("p",null,H,r&&" \u2014 ")),o,!d&&l("div",{css:A},l(ko,null,l("p",null,r&&" \u2014 ",N)),l(mr,{type:"fullScreen",color:q}))))};w$.propTypes={hasAlt:wP.default.bool.isRequired,onClick:wP.default.func.isRequired,onKeyDown:wP.default.func,isFullWidth:wP.default.bool.isRequired,isFullScreen:wP.default.bool};var eCe=T(z()),tCe=T(it());var QTe=function(t){var r=t.euiTheme;return{euiImageCaption:Q(yr(t,"s")," ",pe("margin-top",r.size.xs),";;label:euiImageCaption;"),isOnOverlayMask:Q("color:",r.colors.ghost,";text-shadow:0 1px 2px ",_n(r.colors.ink,.6),";[class*='euiLink']{color:",r.colors.ghost,";};label:isOnOverlayMask;")}};var OP=(0,eCe.forwardRef)(function(e,t){var r=e.caption,n=e.isOnOverlayMask,o=n===void 0?!1:n,i=ur(),c=QTe(i),d=[c.euiImageCaption,o&&c.isOnOverlayMask];return r?l("figcaption",{ref:t,css:d},r):null});OP.propTypes={isOnOverlayMask:tCe.default.bool};OP.displayName="EuiImageCaption";function _1e(){return _1e=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);re.length)&&(t=e.length);for(var r=0,n=Array(t);re.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function lnr(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}var CK=function(t){var r=t.className,n=t.alt,o=t.url,i=t.src,c=t.size,d=c===void 0?"original":c,h=t.hasShadow,v=t.style,w=t.wrapperProps,_=t.fullScreenIconColor,I=t.allowFullScreen,R=t.caption,D=t.float,F=t.margin,A=t.onFullScreen,N=snr(t,Yrr),H=(0,TK.useState)(!1),q=rnr(H,2),Y=q[0],ee=q[1],ne=typeof d=="string"&&cCe.includes(d),te=(0,fCe.default)("euiImage",r),de=ur(),fe=iCe(de),ye=[fe.euiImage,ne&&fe[d],!ne&&fe.customSize,h&&fe.hasShadow],Ie=[fe.euiImage,fe.isFullScreen],he=!ne&&d!=="original",be=typeof d=="string"?d:"".concat(d,"px"),Se=he?j1e(j1e({},v),{},{maxWidth:be,maxHeight:be}):v,Te=d==="fullWidth",Pe={hasShadow:h,wrapperProps:w,setIsFullScreen:ee,fullScreenIconColor:_,isFullWidth:Te,allowFullScreen:I,alt:n,caption:R,float:D,margin:F,onFullScreen:A},Ve=j1e({className:te,src:i||o},N);return l(TK.default.Fragment,null,l(I1e,Pe,l("img",jK({alt:n,css:ye,style:Se},Ve))),I&&Y&&l(k1e,Pe,l("img",jK({alt:n,css:Ie,style:v},Ve))))};CK.propTypes={className:ai.default.string,"aria-label":ai.default.string,"data-test-subj":ai.default.string,css:ai.default.any,src:ai.default.string,url:ai.default.string,alt:ai.default.string.isRequired,caption:ai.default.node,size:ai.default.oneOfType([ai.default.any.isRequired,ai.default.number.isRequired,ai.default.string.isRequired]),float:ai.default.any,margin:ai.default.any,hasShadow:ai.default.bool,allowFullScreen:ai.default.bool,onFullScreen:ai.default.func,fullScreenIconColor:ai.default.oneOf(["light","dark"]),wrapperProps:ai.default.shape({className:ai.default.string,"aria-label":ai.default.string,"data-test-subj":ai.default.string,css:ai.default.any})};var OCe=T(z());var Non=T(z());var unr=function(t){return Q(".euiScreenReaderOnly{",l3(),";}.eui-alignBaseline{vertical-align:baseline!important;}.eui-alignBottom{vertical-align:bottom!important;}.eui-alignMiddle{vertical-align:middle!important;}.eui-alignTop{vertical-align:top!important;}.eui-displayBlock{display:block!important;}.eui-displayInline{display:inline!important;}.eui-displayInlineBlock{display:inline-block!important;}.eui-fullWidth{display:block!important;",pe("width","100% !important"),";}.eui-fullHeight{",Q7e(),";}.eui-textCenter{text-align:center!important;}.eui-textLeft{text-align:start!important;}.eui-textRight{text-align:end!important;}.eui-textNoWrap{white-space:nowrap!important;}.eui-textInheritColor{color:inherit!important;}.eui-textBreakWord{",K0(),";}.eui-textBreakAll{overflow-wrap:break-word!important;word-break:break-all!important;}.eui-textBreakNormal{overflow-wrap:normal!important;word-wrap:normal!important;word-break:normal!important;}.eui-textTruncate{",Zs(),";}.eui-textNumber{",KG(t),";}.eui-scrollBar{",X0(t),";}.eui-yScroll{",Ooe(t),";}.eui-xScroll{",xoe(t),";}.eui-yScrollWithShadows{",XG(t),";}.eui-xScrollWithShadows{",Y7e(t),";}[class*='eui-showFor']{display:none!important;}",Object.keys(t.euiTheme.breakpoint).map(function(r){return` + `);return{euiFilterSelectItem:Q("display:block;",pe("width","100%")," ",Fd("padding","".concat(r.size.xs," ").concat(r.size.m))," ",yr(t,"s")," ",Tn("left")," color:",r.colors.text,";",pe("border-bottom","".concat(r.border.width.thin," solid ").concat(r.colors.lightestShade))," &:hover{cursor:pointer;text-decoration:underline;}&:focus{",n,";}&:disabled{cursor:not-allowed;text-decoration:none;color:",r.colors.disabledText,";};label:euiFilterSelectItem;"),isFocused:Q(n,";;label:isFocused;")}};var Eer=["theme","children","className","disabled","checked","isFocused","showIcons","toolTipContent","toolTipProps","style"];function lP(e){"@babel/helpers - typeof";return lP=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},lP(e)}function lK(){return lK=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ker(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 jer(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Hje(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ver(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 $er(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Gje(e,t){for(var r=0;r0&&arguments[0]!==void 0?arguments[0]:n.fullText,v=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"",w=n.availableWidth;v&&(n.setTextToCheck(v),w=w-n.textWidth),n.setTextToCheck(h),n.widthRatio=w/n.textWidth}),Cl(n,"getTextFromRatio",function(h,v){var w=Math.ceil(h.length*n.widthRatio),_=v==="start"?h.length-w:w,I=pK(h).at(_),R=cK(I,2),D=R[0],F=R[1];return v==="start"?F:D}),Cl(n,"checkIfTruncationIsNeeded",function(){if(n.setTextToCheck(n.fullText),n.availableWidth>=n.textWidth)return!1}),Cl(n,"checkSufficientEllipsisWidth",function(h){var v=h==="startEnd"?"".concat(n.ellipsis," ").concat(n.ellipsis):n.ellipsis;if(n.setTextToCheck(v),n.textWidth>=n.availableWidth*.9)return console.error("The truncation ellipsis is larger than the available width. No text can be rendered."),!1}),Cl(n,"checkTruncationOffsetWidth",function(h){if(n.setTextToCheck(h),n.textWidth>n.availableWidth)return console.error("The passed truncationOffset is too large for the available width. Truncating the offset instead."),!1}),Cl(n,"truncateStart",function(h){var v=n.fullText,w="",_=function(){return w+v};if(h){var I=pK(n.fullText).at(h),R=cK(I,2);w=R[0],v=R[1];var D=w+n.ellipsis;n.checkTruncationOffsetWidth(D)===!1&&(v=w,w="")}for(n.setTextWidthRatio(v,w),v=n.getTextFromRatio(v,"start"),w+=n.ellipsis,n.setTextToCheck(_());n.textWidth>n.availableWidth;)v=J0e(v),n.setTextToCheck(_());return _()}),Cl(n,"truncateEnd",function(h){var v=n.fullText,w="",_=function(){return v+w};if(h){var I=n.fullText.length-h,R=pK(n.fullText).at(I),D=cK(R,2);v=D[0],w=D[1];var F=n.ellipsis+w;n.checkTruncationOffsetWidth(F)===!1&&(v=w,w="")}for(n.setTextWidthRatio(v,w),v=n.getTextFromRatio(v,"end"),w=n.ellipsis+w,n.setTextToCheck(_());n.textWidth>n.availableWidth;)v=G0e(v),n.setTextToCheck(_());return _()}),Cl(n,"truncateStartEndAtPosition",function(h){n.setTextWidthRatio();var v=Math.floor(n.fullText.length*n.widthRatio/2),w=h-v,_=h+v;if(w<0)return n.truncateEnd();if(_>=n.fullText.length)return n.truncateStart();var I=n.fullText.substring(w,_),R=function(){return n.ellipsis+I+n.ellipsis};n.setTextToCheck(R());for(var D;n.textWidth>n.availableWidth;)I=D?G0e(I):J0e(I),D=!D,n.setTextToCheck(R());return R()}),Cl(n,"truncateStartEndAtMiddle",function(){var h=Math.floor(n.fullText.length/2);return n.truncateStartEndAtPosition(h)}),Cl(n,"truncateMiddle",function(){var h=Math.floor(n.fullText.length/2),v=pK(n.fullText).at(h),w=cK(v,2),_=w[0],I=w[1];n.setTextWidthRatio(),_=n.getTextFromRatio(_,"end"),I=n.getTextFromRatio(I,"start");var R=function(){return _+n.ellipsis+I};n.setTextToCheck(R());for(var D;n.textWidth>n.availableWidth;)D=!D,D?_=G0e(_):I=J0e(I),n.setTextToCheck(R());return R()}),n.fullText=o,n.ellipsis=i,n.availableWidth=c,n}return Xer(t,e),Zer(t,[{key:"textWidth",get:function(){return this.debugPerformance&&this.debugCounter++,X0e(pP(t.prototype),"textWidth",this)}}])}(e9),G0e=function(t){return t.substring(0,t.length-1)},J0e=function(t){return t.substring(1)},pK=function(t){return{at:function(n){return[t.substring(0,n),t.substring(n)]}}};var dK={euiTextTruncate:{name:"7o5qnz-euiTextTruncate",styles:"position:relative;overflow:hidden;white-space:nowrap;label:euiTextTruncate;"},euiTextTruncate__truncatedText:{name:"1sjxkb1-euiTextTruncate__truncatedText",styles:"user-select:none;pointer-events:none;label:euiTextTruncate__truncatedText;"},euiTextTruncate__fullText:{name:"19c9gqi-euiTextTruncate__fullText",styles:"position:absolute;inset:0;overflow:hidden;color:rgba(0, 0, 0, 0);@supports (-webkit-hyphens: none){text-overflow:ellipsis;};label:euiTextTruncate__fullText;"}};var Yer=["width","onResize"],Qer=["width","children","text","truncation","truncationOffset","truncationPosition","ellipsis","calculationDelayMs","containerRef","className"],etr=["onResize"];function Y0e(e,t){return otr(e)||ntr(e,t)||rtr(e,t)||ttr()}function ttr(){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 rtr(e,t){if(e){if(typeof e=="string")return Yje(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)?Yje(e,t):void 0}}function Yje(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function itr(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}var E3=function(t){var r=t.width,n=t.onResize,o=Q0e(t,Yer);return r!=null?l(e1e,dP({width:r},o)):l(atr,dP({onResize:n},o))};E3.propTypes={className:Ml.default.string,"aria-label":Ml.default.string,"data-test-subj":Ml.default.string,css:Ml.default.any,text:Ml.default.string.isRequired,truncation:Ml.default.any,truncationOffset:Ml.default.number,truncationPosition:Ml.default.number,ellipsis:Ml.default.string,width:Ml.default.number,onResize:Ml.default.func,children:Ml.default.func,calculationDelayMs:Ml.default.number};var e1e=function(t){var r=t.width,n=t.children,o=t.text,i=t.truncation,c=i===void 0?"end":i,d=t.truncationOffset,h=d===void 0?0:d,v=t.truncationPosition,w=t.ellipsis,_=w===void 0?"\u2026":w,I=t.calculationDelayMs,R=t.containerRef,D=t.className,F=Q0e(t,Qer),A=(0,dp.useState)(null),N=Y0e(A,2),H=N[0],q=N[1],Y=$g([q,R]),ee=(0,dp.useState)(!I),ne=Y0e(ee,2),te=ne[0],de=ne[1];(0,dp.useEffect)(function(){if(I){var be=setTimeout(function(){return de(!0)},I);return function(){return clearTimeout(be)}}},[I]);var fe=(0,dp.useMemo)(function(){var be=c,Te=0;return c==="end"||c==="start"?0=o.length&&(be="start")),{truncation:be,truncationOffset:Te}},[c,h,v,o.length]),ye=fe.truncation,Ie=fe.truncationOffset,ve=(0,dp.useMemo)(function(){var be="";if(!te||!H)return o;if(!r)return be;var Te=new Kje({fullText:o,ellipsis:_,container:H,availableWidth:r});if(Te.checkIfTruncationIsNeeded()===!1)be=o;else if(Te.checkSufficientEllipsisWidth(ye)===!1)be="";else switch(ye){case"end":be=Te.truncateEnd(Ie);break;case"start":be=Te.truncateStart(Ie);break;case"startEnd":v==null?be=Te.truncateStartEndAtMiddle():be=Te.truncateStartEndAtPosition(v);break;case"middle":be=Te.truncateMiddle();break}return be},[te,r,o,ye,Ie,v,_,H]),Oe=ve!==o;return l("div",dP({className:(0,Qje.default)("euiTextTruncate",D),css:dK.euiTextTruncate,ref:Y,title:Oe?o:void 0},F),Oe?l(dp.default.Fragment,null,l("span",{className:"euiTextTruncate__truncatedText",css:dK.euiTextTruncate__truncatedText,"aria-hidden":!0,"data-test-subj":"truncatedText"},n?n(ve):ve),l("span",{className:"euiTextTruncate__fullText",css:dK.euiTextTruncate__fullText,"data-test-subj":"fullText"},o)):l("span",{className:"euiTextTruncate__fullText","data-test-subj":"fullText"},n?n(o):o))};e1e.propTypes={width:Ml.default.number.isRequired,containerRef:Ml.default.any};var atr=function(t){var r=t.onResize,n=Q0e(t,etr),o=(0,dp.useState)(0),i=Y0e(o,2),c=i[0],d=i[1],h=(0,dp.useCallback)(function(v){var w=v.width;d(w),r?.(w)},[r]);return l(Ax,{onResize:h},function(v){return l(e1e,dP({width:c,containerRef:v},n,{"data-resize-observer":"true"}))})};var Xx=T(it()),fK=T(z());var n1e=T(At());function f$(e){"@babel/helpers - typeof";return f$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},f$(e)}var str=["children","className","style","lines","cloneElement"];function r1e(){return r1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function dtr(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}var ftr={euiTextBlockTruncate:{name:"1cfm3ge-euiTextBlockTruncate",styles:"display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:0;overflow:hidden;label:euiTextBlockTruncate;"}},hK=function(t){var r=t.children,n=t.className,o=t.style,i=t.lines,c=t.cloneElement,d=ptr(t,str),h=(0,n1e.default)("euiTextBlockTruncate",n),v=ftr.euiTextBlockTruncate,w=(0,fK.useMemo)(function(){return t1e({WebkitLineClamp:i},o)},[i,o]);return(0,fK.isValidElement)(r)&&c?Sl(r,{css:v,style:t1e(t1e({},r.props.style),w),className:(0,n1e.default)(r.props.className,h)}):l("div",r1e({className:h,css:v,style:w},d),r)};hK.propTypes={className:Xx.default.string,"aria-label":Xx.default.string,"data-test-subj":Xx.default.string,css:Xx.default.any,lines:Xx.default.number.isRequired,cloneElement:Xx.default.bool};var Ken=T(z());var tTe=function(t){var r=t.children;return l("div",{className:"euiComboBoxTitle"},r)};var mK=200,rTe=function(t){var r=t.euiTheme;return{euiComboBoxOptionList:Q(pe("max-height","".concat(mK,"px"))," overflow:hidden;.euiTextTruncate{pointer-events:none;}.euiComboBoxOption__contentWrapper{display:flex;align-items:center;}.euiComboBoxOption__content{flex:1;text-align:start;",Zs(),";}.euiComboBoxOption__emptyStateText{flex:1;text-align:start;",pe("margin-bottom",0),";}.euiComboBoxOption__enterBadge{",pe("margin-left",r.size.xs),";}.euiComboBoxTitle{display:flex;",pe("padding-horizontal",r.size.s),pe("padding-top",pr(r.size.s,function(n){return n+1}))," ",pe("padding-bottom",r.size.xs)," ",To(t,"xxxs"),";};label:euiComboBoxOptionList;"),euiComboBoxOptionList__virtualization:Q(K0(t),";;label:euiComboBoxOptionList__virtualization;"),euiComboBoxOptionsList__empty:Q("padding:",r.size.s,";text-align:center;",Y0(),";;label:euiComboBoxOptionsList__empty;")}};var htr=["children"],mtr=["key","isGroupLabelOption","label","value","prepend","append","truncationProps"],vtr=["data-test-subj","activeOptionIndex","areAllOptionsSelected","customOptionText","fullWidth","getSelectedOptionForSearchValue","isCaseSensitive","isLoading","listRef","matchingOptions","onCloseList","onCreateOption","onOptionClick","onOptionEnterKey","onScroll","options","renderOption","rootId","rowHeight","scrollToIndex","searchValue","selectedOptions","singleSelection","delimiter","truncationProps","listboxAriaLabel"];function fP(e){"@babel/helpers - typeof";return fP=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},fP(e)}function nTe(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 oTe(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function gtr(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 ytr(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function iTe(e,t){for(var r=0;r=h.length?l(u1,{search:h,strict:r.props.isCaseSensitive},_):l(x3,null,_))})}),r}return _tr(t,e),btr(t,[{key:"componentDidUpdate",value:function(n){this.listRef&&typeof this.props.activeOptionIndex<"u"&&this.props.activeOptionIndex!==n.activeOptionIndex&&this.listRef.scrollToItem(this.props.activeOptionIndex,"auto")}},{key:"render",value:function(){var n=this,o=this.props,i=o["data-test-subj"],c=o.activeOptionIndex,d=o.areAllOptionsSelected,h=o.customOptionText,v=o.fullWidth,w=o.getSelectedOptionForSearchValue,_=o.isCaseSensitive,I=o.isLoading,R=o.listRef,D=o.matchingOptions,F=o.onCloseList,A=o.onCreateOption,N=o.onOptionClick,H=o.onOptionEnterKey,q=o.onScroll,Y=o.options,ee=o.renderOption,ne=o.rootId,te=o.rowHeight,de=o.scrollToIndex,fe=o.searchValue,ye=o.selectedOptions,Ie=o.singleSelection,ve=o.delimiter,Oe=o.truncationProps,be=o.listboxAriaLabel,Te=o1e(o,vtr),Pe;if(I)Pe=l(yi,{gutterSize:"s",justifyContent:"center",responsive:!1},l(qt,{grow:!1},l(_r,{size:"m"})),l(qt,{grow:!1},l(Zt,{token:"euiComboBoxOptionsList.loadingOptions",default:"Loading options"})));else if(fe&&D&&D.length===0)if(A&&w)if(ve&&fe.includes(ve))Pe=l("div",{className:"euiComboBoxOption__contentWrapper"},l("p",{className:"euiComboBoxOption__emptyStateText"},l(Zt,{token:"euiComboBoxOptionsList.delimiterMessage",default:"Add each item separated by {delimiter}",values:{delimiter:l("strong",null,ve)}})),i1e);else{var Re=w({isCaseSensitive:_,searchValue:fe,selectedOptions:ye});if(Re)Pe=l("p",null,l(Zt,{token:"euiComboBoxOptionsList.alreadyAdded",default:"{label} has already been added",values:{label:l("strong",null,Re.label)}}));else{var Ae=function(Fe,Nt){var Vt=new RegExp(/(\{searchValue})/,"gi"),Ke=Fe.split(Vt);return l("p",{className:"euiComboBoxOption__emptyStateText"},Ke.map(function(st,Tt){return st.match(Vt)?l("strong",{key:Tt},Nt):st}))};Pe=l("div",{className:"euiComboBoxOption__contentWrapper"},h?Ae(h,fe):l("p",{className:"euiComboBoxOption__emptyStateText"},l(Zt,{token:"euiComboBoxOptionsList.createCustomOption",default:"Add {searchValue} as a custom option",values:{searchValue:l("strong",null,fe)}})),i1e)}}else Pe=l("p",null,l(Zt,{token:"euiComboBoxOptionsList.noMatchingOptions",default:"{searchValue} doesn't match any options",values:{searchValue:l("strong",null,fe)}}));else Y.length?d&&(Pe=l("p",null,l(Zt,{token:"euiComboBoxOptionsList.allOptionsSelected",default:"You've selected all available options"}))):Pe=l("p",null,l(Zt,{token:"euiComboBoxOptionsList.noAvailableOptions",default:"There aren't any options available"}));var Ve=D.length<7?D.length:7,Je=Ve*(te+1),pt=Je>mK?mK:Je;return l(J0,null,function(Qe){var Fe=Qe(rTe);return l("div",Kx({css:Fe.euiComboBoxOptionList,className:"euiComboBoxOptionsList","data-test-subj":(0,lTe.default)("comboBoxOptionsList",i),ref:R},Te),Pe?l(Xt,{size:"xs",css:Fe.euiComboBoxOptionsList__empty,className:"euiComboBoxOptionsList__empty"},Pe):l(c$,{css:Fe.euiComboBoxOptionList__virtualization,className:"euiComboBoxOptionsList__virtualization",height:pt,onScroll:q,itemCount:D.length,itemSize:te,itemData:D,ref:n.setListRef,innerElementType:n.ListInnerElement,width:n.context},n.ListRow))})}}])}(gK.Component);p1(hP,"contextType",Jme);p1(hP,"defaultProps",{"data-test-subj":"",rowHeight:29,isCaseSensitive:!1});hP.propTypes={className:qe.default.string,"aria-label":qe.default.string,"data-test-subj":qe.default.string,css:qe.default.any,activeOptionIndex:qe.default.number,areAllOptionsSelected:qe.default.bool,listboxAriaLabel:qe.default.string.isRequired,customOptionText:qe.default.string,fullWidth:qe.default.bool,getSelectedOptionForSearchValue:qe.default.func,isCaseSensitive:qe.default.bool,isLoading:qe.default.bool,listRef:qe.default.any.isRequired,matchingOptions:qe.default.arrayOf(qe.default.shape({isGroupLabelOption:qe.default.bool,label:qe.default.string.isRequired,key:qe.default.string,options:qe.default.arrayOf(qe.default.shape({isGroupLabelOption:qe.default.bool,label:qe.default.string.isRequired,key:qe.default.string,options:qe.default.arrayOf(qe.default.any.isRequired),value:qe.default.any,prepend:qe.default.node,append:qe.default.node,truncationProps:qe.default.any,toolTipContent:qe.default.node,toolTipProps:qe.default.any,className:qe.default.string,"aria-label":qe.default.string,"data-test-subj":qe.default.string,css:qe.default.any}).isRequired),value:qe.default.any,prepend:qe.default.node,append:qe.default.node,truncationProps:qe.default.any,toolTipContent:qe.default.node,toolTipProps:qe.default.any,className:qe.default.string,"aria-label":qe.default.string,"data-test-subj":qe.default.string,css:qe.default.any}).isRequired).isRequired,onCloseList:qe.default.func.isRequired,onCreateOption:qe.default.func,onOptionClick:qe.default.func,onOptionEnterKey:qe.default.func,onScroll:qe.default.any,options:qe.default.arrayOf(qe.default.shape({isGroupLabelOption:qe.default.bool,label:qe.default.string.isRequired,key:qe.default.string,options:qe.default.arrayOf(qe.default.shape({isGroupLabelOption:qe.default.bool,label:qe.default.string.isRequired,key:qe.default.string,options:qe.default.arrayOf(qe.default.any.isRequired),value:qe.default.any,prepend:qe.default.node,append:qe.default.node,truncationProps:qe.default.any,toolTipContent:qe.default.node,toolTipProps:qe.default.any,className:qe.default.string,"aria-label":qe.default.string,"data-test-subj":qe.default.string,css:qe.default.any}).isRequired),value:qe.default.any,prepend:qe.default.node,append:qe.default.node,truncationProps:qe.default.any,toolTipContent:qe.default.node,toolTipProps:qe.default.any,className:qe.default.string,"aria-label":qe.default.string,"data-test-subj":qe.default.string,css:qe.default.any}).isRequired).isRequired,renderOption:qe.default.func,rootId:qe.default.any.isRequired,rowHeight:qe.default.number.isRequired,scrollToIndex:qe.default.number,searchValue:qe.default.string.isRequired,selectedOptions:qe.default.arrayOf(qe.default.shape({isGroupLabelOption:qe.default.bool,label:qe.default.string.isRequired,key:qe.default.string,options:qe.default.arrayOf(qe.default.shape({isGroupLabelOption:qe.default.bool,label:qe.default.string.isRequired,key:qe.default.string,options:qe.default.arrayOf(qe.default.any.isRequired),value:qe.default.any,prepend:qe.default.node,append:qe.default.node,truncationProps:qe.default.any,toolTipContent:qe.default.node,toolTipProps:qe.default.any,className:qe.default.string,"aria-label":qe.default.string,"data-test-subj":qe.default.string,css:qe.default.any}).isRequired),value:qe.default.any,prepend:qe.default.node,append:qe.default.node,truncationProps:qe.default.any,toolTipContent:qe.default.node,toolTipProps:qe.default.any,className:qe.default.string,"aria-label":qe.default.string,"data-test-subj":qe.default.string,css:qe.default.any}).isRequired).isRequired,singleSelection:qe.default.oneOfType([qe.default.bool.isRequired,qe.default.shape({asPlainText:qe.default.bool}).isRequired]),delimiter:qe.default.string,truncationProps:qe.default.any};var s1e={euiComboBox:Q("position:relative;",pe("width","100%")," ",pe("height","auto"),";;label:euiComboBox;"),fullWidth:Q(pe("max-width","100%"),";;label:fullWidth;")};var Itr=["data-test-subj","async","className","compressed","customOptionText","fullWidth","id","inputRef","isCaseSensitive","isClearable","isDisabled","isInvalid","isLoading","noSuggestions","onBlur","onChange","onCreateOption","onSearchChange","options","placeholder","renderOption","rowHeight","selectedOptions","singleSelection","prepend","sortMatchesBy","delimiter","append","autoFocus","truncationProps","inputPopoverProps","optionMatcher","aria-label","aria-labelledby"];function mP(e){"@babel/helpers - typeof";return mP=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},mP(e)}function yK(){return yK=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ptr(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 uTe(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 cTe(e){for(var t=1;t0?1:-1;v[w].isGroupLabelOption;)w=w+_,w<0?w=v.length-1:w===v.length&&(w=0);return{activeOptionIndex:w}})}),Gn(r,"hasActiveOption",function(){return r.state.activeOptionIndex>-1&&r.state.activeOptionIndex0&&r.addCustomOption(c,v)}):r.addCustomOption(c,d)}),Gn(r,"onContainerBlur",function(c){var d=c.relatedTarget,h=d&&r.listRefInstance&&r.listRefInstance.contains(d),v=d&&r.comboBoxRefInstance&&r.comboBoxRefInstance.contains(d);if(!h&&!v){var w,_;(w=(_=r.props).onBlur)===null||w===void 0||w.call(_,c),r.closeList(),r.setState({hasFocus:!1}),r.hasActiveOption()||r.setCustomOptions(!0)}else h&&requestAnimationFrame(function(){var I;(I=r.searchInputRefInstance)===null||I===void 0||I.focus()})}),Gn(r,"onKeyDown",function(c){var d,h;if(!r.props.isDisabled)switch(c.persist(),c.key){case cn.ARROW_UP:c.preventDefault(),c.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(-1):r.openList();break;case cn.ARROW_DOWN:c.preventDefault(),c.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(1):r.openList();break;case cn.ESCAPE:r.state.isListOpen&&(c.preventDefault(),c.stopPropagation(),r.closeList());break;case cn.ENTER:c.target===r.searchInputRefInstance&&(c.preventDefault(),c.stopPropagation(),r.hasActiveOption()?r.onAddOption(r.state.matchingOptions[r.state.activeOptionIndex]):r.setCustomOptions(!1));break;case cn.TAB:r.hasActiveOption()&&r.state.isListOpen&&(c.preventDefault(),c.stopPropagation());break;default:(d=(h=r.props).onKeyDown)===null||d===void 0||d.call(h,c)}}),Gn(r,"onOptionEnterKey",function(c){r.onAddOption(c)}),Gn(r,"onOptionClick",function(c){r.onAddOption(c)}),Gn(r,"onAddOption",function(c,d){if(!c.disabled){var h=r.props,v=h.onChange,w=h.selectedOptions,_=h.singleSelection,I=!!_,R=I?[c]:w.concat(c);if(v?.(R),r.clearSearchValue(),r.clearActiveOption(),!d){var D;(D=r.searchInputRefInstance)===null||D===void 0||D.focus()}I?requestAnimationFrame(function(){return r.closeList()}):r.setState({activeOptionIndex:r.state.matchingOptions.indexOf(c)})}}),Gn(r,"onRemoveOption",function(c){var d=r.props,h=d.onChange,v=d.selectedOptions;h?.(v.filter(function(w){return w!==c})),r.clearActiveOption()}),Gn(r,"clearSelectedOptions",function(){var c,d,h;(c=(d=r.props).onChange)===null||c===void 0||c.call(d,[]),(h=r.searchInputRefInstance)===null||h===void 0||h.focus(),r.state.isListOpen||r.openList()}),Gn(r,"onComboBoxClick",function(){var c;if((c=r.searchInputRefInstance)===null||c===void 0||c.focus(),r.props.singleSelection&&r.props.selectedOptions.length===1){var d=r.state.matchingOptions.findIndex(function(h){return h.label===r.props.selectedOptions[0].label&&h.key===r.props.selectedOptions[0].key});r.setState({activeOptionIndex:d})}else r.clearActiveOption()}),Gn(r,"onOpenListClick",function(){var c;(c=r.searchInputRefInstance)===null||c===void 0||c.focus(),r.state.isListOpen||r.openList()}),Gn(r,"onOptionListScroll",function(){var c;(c=r.searchInputRefInstance)===null||c===void 0||c.focus()}),Gn(r,"onSearchChange",function(c){var d=r.props,h=d.onSearchChange,v=d.delimiter;r.setState({searchValue:c},function(){if(c&&r.state.isListOpen===!1&&r.openList(),h){var w=r.state.matchingOptions.length>0;h(c,w)}}),v&&c.endsWith(v)&&r.setCustomOptions(!1)}),r}return Atr(t,e),jtr(t,[{key:"render",value:function(){var n=this,o=this.props,i=o["data-test-subj"],c=o.async,d=o.className,h=o.compressed,v=o.customOptionText,w=o.fullWidth,_=o.id,I=o.inputRef,R=o.isCaseSensitive,D=o.isClearable,F=o.isDisabled,A=o.isInvalid,N=o.isLoading,H=o.noSuggestions,q=o.onBlur,Y=o.onChange,ee=o.onCreateOption,ne=o.onSearchChange,te=o.options,de=o.placeholder,fe=o.renderOption,ye=o.rowHeight,Ie=o.selectedOptions,ve=o.singleSelection,Oe=o.prepend,be=o.sortMatchesBy,Te=o.delimiter,Pe=o.append,Re=o.autoFocus,Ae=o.truncationProps,Ve=o.inputPopoverProps,Je=o.optionMatcher,pt=o["aria-label"],Qe=o["aria-labelledby"],Fe=Etr(o,Itr),Nt=this.state,Vt=Nt.activeOptionIndex,Ke=Nt.hasFocus,st=Nt.isListOpen,Tt=Nt.searchValue,wr=Nt.matchingOptions,Rt=_??this.rootId("_eui-combobox-id"),Ut=!!(A||(Ke===!1||st===!1)&&Tt),vr=(0,vTe.default)("euiComboBox",d,{"euiComboBox-isDisabled":F,"euiComboBox-isInvalid":Ut,"euiComboBox-isOpen":st}),Sr=Ie.map(function(Pn){return Pn.label}).join(", "),Er;if(!H&&st){var po=i?"".concat(i,"-optionsList"):void 0;Er=l(Zt,{token:"euiComboBox.listboxAriaLabel",default:"Choose from the following options"},function(Pn){return l(hP,{activeOptionIndex:n.state.activeOptionIndex,areAllOptionsSelected:n.areAllOptionsSelected(),customOptionText:v,"data-test-subj":po,fullWidth:w,isCaseSensitive:R,isLoading:N,listRef:n.listRefCallback,matchingOptions:wr,onCloseList:n.closeList,onCreateOption:ee,onOptionClick:n.onOptionClick,onOptionEnterKey:n.onOptionEnterKey,onScroll:n.onOptionListScroll,options:te,singleSelection:ve,renderOption:fe,rootId:n.rootId,rowHeight:ye,scrollToIndex:Vt,searchValue:Tt,selectedOptions:Ie,delimiter:Te,getSelectedOptionForSearchValue:rK,listboxAriaLabel:Pn,truncationProps:Ae})})}return l(hA,null,function(Pn){var Nr=[s1e.euiComboBox,w?s1e.fullWidth:bx("max-width",PV(Pn))];return l("div",yK({css:Nr},Fe,{className:vr,"data-test-subj":i,onKeyDown:n.onKeyDown,onBlur:n.onContainerBlur,ref:n.comboBoxRefCallback}),l(CX,yK({fullWidth:w,panelPaddingSize:"none",disableFocusTrap:!0,closeOnScroll:!0},Ve,{isOpen:st,closePopover:n.closeList,input:l(F0e,{compressed:h,focusedOptionId:n.hasActiveOption()?n.rootId("_option-".concat(n.state.activeOptionIndex)):void 0,fullWidth:w,hasSelectedOptions:Ie.length>0,id:Rt,inputRef:n.searchInputRefCallback,isDisabled:F,isListOpen:st,noIcon:!!H,onChange:n.onSearchChange,onClear:D&&!F?n.clearSelectedOptions:void 0,onClick:n.onComboBoxClick,onCloseListClick:n.closeList,onFocus:n.onComboBoxFocus,onOpenListClick:n.onOpenListClick,onRemoveOption:n.onRemoveOption,placeholder:de,rootId:n.rootId,searchValue:Tt,selectedOptions:Ie,singleSelection:ve,value:Sr,append:ve?Pe:void 0,prepend:ve?Oe:void 0,isLoading:N,isInvalid:Ut,autoFocus:Re,"aria-label":pt,"aria-labelledby":Qe})}),Er))})}}],[{key:"getDerivedStateFromProps",value:function(n,o){var i=n.async,c=n.isCaseSensitive,d=n.options,h=n.selectedOptions,v=n.singleSelection,w=n.sortMatchesBy,_=n.optionMatcher,I=o.activeOptionIndex,R=o.searchValue,D=D0e({options:d,selectedOptions:h,searchValue:R,isCaseSensitive:c,isPreFiltered:i,showPrevSelected:!!v,sortMatchesBy:w,optionMatcher:_}),F={matchingOptions:D};return I>=D.length&&(F.activeOptionIndex=-1),F}}])}(mTe.Component);Gn(Yx,"defaultProps",{async:!1,compressed:!1,fullWidth:!1,isClearable:!0,options:[],selectedOptions:[],singleSelection:!1,prepend:void 0,append:void 0,sortMatchesBy:"none",optionMatcher:bje()});Yx.propTypes={"data-test-subj":In.default.string,async:In.default.bool.isRequired,className:In.default.string,compressed:In.default.bool.isRequired,fullWidth:In.default.bool.isRequired,id:In.default.string,inputRef:In.default.any,isClearable:In.default.bool.isRequired,isDisabled:In.default.bool,isInvalid:In.default.bool,isLoading:In.default.bool,noSuggestions:In.default.bool,onBlur:In.default.any,onChange:In.default.func,onFocus:In.default.any,onKeyDown:In.default.any,onSearchChange:In.default.func,placeholder:In.default.string,rowHeight:In.default.number,singleSelection:In.default.oneOfType([In.default.bool.isRequired,In.default.shape({asPlainText:In.default.bool}).isRequired]).isRequired,sortMatchesBy:In.default.oneOf(["none","startsWith"]).isRequired,isCaseSensitive:In.default.bool,optionMatcher:In.default.func,prepend:In.default.any,append:In.default.any,delimiter:In.default.string,autoFocus:In.default.bool,"aria-label":In.default.string,"aria-labelledby":In.default.string,truncationProps:In.default.any,inputPopoverProps:In.default.any,css:In.default.any};var ry=T(z()),ty=T(it());var drn=T(z()),mc=T(it()),STe=T(At());var Ztn=T(z()),sn=T(it()),yTe=T(At());var wK=function(t){var r=t.euiTheme;return{euiPaginationButton:Q("outline-offset:-",r.focus.width,";;label:euiPaginationButton;"),isActive:Q("font-weight:",r.font.weight.bold,";color:",r.colors.primary,";&,&:hover{cursor:default;text-decoration:underline;};label:isActive;")}};function h$(e){"@babel/helpers - typeof";return h$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},h$(e)}var Dtr=["className","isActive","pageIndex","totalPages"];function c1e(){return c1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ztr(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}var p1e=function(t){var r=t.className,n=t.isActive,o=t.pageIndex,i=t.totalPages,c=Btr(t,Dtr),d=ur(),h=wK(d),v=[h.euiPaginationButton,n&&h.isActive],w=(0,yTe.default)("euiPaginationButton",r),_=u1e(u1e(u1e({css:v,className:w,size:"s",color:"text","data-test-subj":"pagination-button-".concat(o),isDisabled:n},n&&{"aria-current":!0}),c["aria-controls"]&&{href:"#".concat(c["aria-controls"])}),c),I=o+1;return l(Zt,{token:"euiPaginationButton.longPageString",default:"Page {page} of {totalPages}",values:{page:I,totalPages:i}},function(R){return l(Zt,{token:"euiPaginationButton.shortPageString",default:"Page {page}",values:{page:I}},function(D){return l(cu,c1e({"aria-label":i?R:D},_),I)})})};p1e.propTypes={href:sn.default.string,onClick:sn.default.func,color:sn.default.any,size:sn.default.any,flush:sn.default.any,isDisabled:sn.default.bool,isLoading:sn.default.bool,isSelected:sn.default.bool,target:sn.default.string,rel:sn.default.string,type:sn.default.any,buttonRef:sn.default.any,contentProps:sn.default.shape({className:sn.default.string,"aria-label":sn.default.string,"data-test-subj":sn.default.string,css:sn.default.any}),iconType:sn.default.oneOfType([sn.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,sn.default.string.isRequired,sn.default.elementType.isRequired]),iconSide:sn.default.oneOfType([sn.default.any.isRequired,sn.default.oneOf([void 0])]),textProps:sn.default.oneOfType([sn.default.shape({className:sn.default.string,"aria-label":sn.default.string,"data-test-subj":sn.default.string,css:sn.default.any,ref:sn.default.any,"data-text":sn.default.string}).isRequired,sn.default.oneOf([!1])]),iconSize:sn.default.any,className:sn.default.string,"aria-label":sn.default.string,"data-test-subj":sn.default.string,css:sn.default.any,isActive:sn.default.bool,pageIndex:sn.default.number.isRequired,totalPages:sn.default.number};var Qtn=T(z()),OK=T(it()),bTe=T(At());function d1e(){return d1e=Object.assign?Object.assign.bind():function(e){for(var t=1;tspan{",pe("margin-horizontal",r.size.s)," font-weight:",r.font.weight.semiBold,";&:first-of-type{color:",r.colors.primaryText,";}};label:euiPagination__compressedText;"),euiPagination__list:Wtr,euiPagination__ellipsis:Q("color:",r.colors.disabledText,";font-size:",yr(t,"s").fontSize,";",pe("padding-horizontal",r.size.s)," ",pe("height",r.size.l),";;label:euiPagination__ellipsis;")}};function v$(e){"@babel/helpers - typeof";return v$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},v$(e)}var Htr=["className","pageCount","activePage","onPageClick","compressed","aria-controls","responsive"];function xTe(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 _Te(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Utr(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}var f1e=5,Gtr=Math.floor(f1e*.5),xK=function(t){var r=t.className,n=t.pageCount,o=n===void 0?1:n,i=t.activePage,c=i===void 0?0:i,d=t.onPageClick,h=d===void 0?function(){}:d,v=t.compressed,w=t["aria-controls"],_=t.responsive,I=_===void 0?["xs","s"]:_,R=qtr(t,Htr),D=Xne(I,!!I),F=ur(),A=OTe(F),N=v||D,H=function(Tt,wr){if(Tt.preventDefault(),w){var Rt=document.getElementById(w);Rt&&Rt.focus()}h(wr)},q=(0,STe.default)("euiPagination",r),Y=(o<1||N)&&l(vP,{type:"first",ariaControls:w,onClick:function(Tt){return H(Tt,0)},disabled:c===0}),ee=l(vP,{type:"previous",ariaControls:w,onClick:function(Tt){return H(Tt,c-1)},disabled:c===0}),ne=l(vP,{type:"next",ariaControls:w,onClick:function(Tt){return H(Tt,c+1)},disabled:c===-1||c===o-1}),te=(o<1||N)&&l(vP,{type:"last",ariaControls:w,onClick:function(Tt){return H(Tt,o?o-1:-1)},disabled:c===-1||c===o-1}),de;if(o){var fe={activePage:c,ariaControls:w,safeClick:H,pageCount:o};if(N)de=l(Xt,{size:"s",css:A.euiPagination__compressedText,className:"euiPagination__compressedText"},l(Zt,{token:"euiPagination.pageOfTotalCompressed",default:"{page} of {total}",values:{page:l("span",null,c+1),total:l("span",null,o)}}));else{for(var ye=[],Ie=Math.max(0,Math.min(c-Gtr,o-f1e)),ve=Math.min(o,Ie+f1e),Oe=Ie,be=0;Oe0&&(Te.push(l(m$,ey({pageIndex:0,key:0},fe))),Ie>1&&Ie!==2?Te.push(l(Zt,{key:"startingEllipses",token:"euiPagination.firstRangeAriaLabel",default:"Skipping pages 2 to {lastPage}",values:{lastPage:Ie}},function(st){return l("li",{"aria-label":st,className:"euiPagination__item",css:A.euiPagination__ellipsis},"\u2026")})):Ie===2&&Te.push(l(m$,ey({pageIndex:1,key:1},fe))));var Pe=[];vee.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function irr(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}var Qx=function(t){var r=x9("EuiTablePagination",t),n=r.activePage,o=r.itemsPerPage,i=o===void 0?P3.itemsPerPage:o,c=r.itemsPerPageOptions,d=c===void 0?P3.itemsPerPageOptions:c,h=r.showPerPageOptions,v=h===void 0?P3.showPerPageOptions:h,w=r.onChangeItemsPerPage,_=r.onChangePage,I=r.pageCount,R=orr(r,Ytr),D=(0,ry.useState)(!1),F=Qtr(D,2),A=F[0],N=F[1],H=(0,ry.useCallback)(function(){N(function(te){return!te})},[]),q=(0,ry.useCallback)(function(){N(!1)},[]),Y=l(cu,{size:"xs",color:"text",iconType:"arrowDown",iconSide:"right","data-test-subj":"tablePaginationPopoverButton",onClick:H},i===0?l(Zt,{token:"euiTablePagination.allRows",default:"Showing all rows"}):l(ry.default.Fragment,null,l(Zt,{token:"euiTablePagination.rowsPerPage",default:"Rows per page"}),": ",i)),ee=(0,ry.useMemo)(function(){return d.map(function(te){return l(Gd,{key:te,icon:te===i?"check":"empty","aria-current":te===i?"true":void 0,onClick:function(){q(),w?.(te)},"data-test-subj":"tablePagination-".concat(te,"-rows")},te===0?l(Zt,{token:"euiTablePagination.rowsPerPageOptionShowAllRows",default:"Show all rows"}):l(Zt,{token:"euiTablePagination.rowsPerPageOption",values:{rowsPerPage:te},default:"{rowsPerPage} rows"}))})},[d,i,w,q]),ne=l(lp,{button:Y,isOpen:A,closePopover:q,panelPaddingSize:"none",anchorPosition:"upRight"},l(qx,{items:ee,"data-test-subj":"tablePaginationRowOptions"}));return l(yi,{justifyContent:"spaceBetween",alignItems:"center",responsive:!1,wrap:!0,gutterSize:"s",className:"eui-xScroll"},l(qt,{grow:!1},v&&ne),l(qt,{grow:!1},i>0&&l(xK,m1e({pageCount:I,activePage:n,onPageClick:_},R))))};Qx.propTypes={showPerPageOptions:ty.default.bool,itemsPerPage:ty.default.number,itemsPerPageOptions:ty.default.arrayOf(ty.default.number.isRequired),onChangeItemsPerPage:ty.default.func,onChangePage:ty.default.func,"aria-controls":ty.default.string,"aria-label":ty.default.string};var MTe=T(z()),Fh=T(it()),ATe=T(At());var arr={name:"10tso78-expanded",styles:"flex-basis:0%;flex-grow:1;justify-content:center;label:expanded;"},jTe=function(t){var r=t.euiTheme;return{euiTab:Q("display:flex;cursor:pointer;flex-direction:row;align-items:center;gap:",r.size.s,";",pe("padding-vertical",0)," ",pe("padding-horizontal",r.size.xs),"font-weight:",r.font.weight.semiBold,";color:",r.colors.title,";&:focus{outline-offset:-",r.focus.width,";};label:euiTab;"),expanded:arr,selected:Q("box-shadow:inset 0 -",r.border.width.thick," 0 ",r.colors.primary,";color:",r.colors.primaryText,";;label:selected;"),disabled:{disabled:Q("cursor:not-allowed;color:",r.colors.disabledText,";;label:disabled;"),selected:Q("box-shadow:inset 0 -",r.border.width.thick," 0 ",r.colors.disabledText,";;label:selected;")}}},TTe=function(t){var r=t.euiTheme;return{euiTab__content:Q("font-weight:",r.font.weight[r.font.title.weight],";;label:euiTab__content;"),s:Q("font-size:",yr(t,"xs").fontSize,";line-height:",r.size.xl,";;label:s;"),m:Q("font-size:",yr(t,"s").fontSize,";line-height:",r.size.xxl,";;label:m;"),l:Q("font-size:",yr(t,"m").fontSize,";line-height:",pr([r.size.xl,r.size.s],function(n,o){return n+o}),";;label:l;"),xl:Q("font-size:",yr(t,"l").fontSize,";line-height:",pr([r.size.xxxl,r.size.s],function(n,o){return n+o}),";;label:xl;")}};var CTe=T(z()),srr={expand:!1,size:"m"},_K=(0,CTe.createContext)(srr);var lrr=["isSelected","children","className","disabled","href","target","rel","prepend","append"];function SK(){return SK=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function crr(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}var v1e=function(t){var r=t.isSelected,n=t.children,o=t.className,i=t.disabled,c=t.href,d=t.target,h=t.rel,v=t.prepend,w=t.append,_=urr(t,lrr),I=(0,MTe.useContext)(_K),R=I.size,D=I.expand,F=!c||$d(c),A=i||!F,N=(0,ATe.default)("euiTab",o,{"euiTab-isSelected":r}),H=vt(jTe),q=[H.euiTab,D&&H.expanded,A&&H.disabled.disabled,r&&(A?H.disabled.selected:H.selected)],Y=vt(TTe),ee=[Y.euiTab__content,R&&Y[R]],ne=v&&l("span",{className:"euiTab__prepend"},v),te=w&&l("span",{className:"euiTab__append"},w);if(c&&!A){var de=va({href:c,target:d,rel:h});return l("a",SK({role:"tab","aria-selected":!!r,className:N,css:q,href:c,target:d,rel:de},_),ne,l("span",{className:"euiTab__content eui-textTruncate",css:ee},n),te)}return l("button",SK({role:"tab","aria-selected":!!r,type:"button",className:N,css:q,disabled:A},_),ne,l("span",{className:"euiTab__content eui-textTruncate",css:ee},n),te)};v1e.propTypes={isSelected:Fh.default.bool,disabled:Fh.default.bool,prepend:Fh.default.node,append:Fh.default.node,className:Fh.default.string,"aria-label":Fh.default.string,"data-test-subj":Fh.default.string,css:Fh.default.any,href:Fh.default.string,onClick:Fh.default.func};var DTe=T(z()),ny=T(it()),LTe=T(At());var RTe=function(t){var r=t.euiTheme;return{euiTabs:Q("display:flex;",pe("max-width","100%")," ",Z0("overflow-x","auto")," ",Z0("overflow-y","hidden")," position:relative;flex-shrink:0;;label:euiTabs;"),bottomBorder:Q("box-shadow:inset 0 -",r.border.width.thin," 0 ",r.border.color,";;label:bottomBorder;"),s:Q("gap:",r.size.m,";;label:s;"),m:Q("gap:",r.size.base,";;label:m;"),l:Q("gap:",r.size.l,";;label:l;"),xl:Q("gap:",r.size.xl,";;label:xl;")}};var prr=["children","className","bottomBorder","expand","size"];function g1e(){return g1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function frr(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}var IK=(0,DTe.forwardRef)(function(e,t){var r=e.children,n=e.className,o=e.bottomBorder,i=o===void 0?!0:o,c=e.expand,d=c===void 0?!1:c,h=e.size,v=h===void 0?"m":h,w=drr(e,prr),_=(0,LTe.default)("euiTabs",n),I=vt(RTe),R=[I.euiTabs,I[v],i&&I.bottomBorder];return l("div",g1e({ref:t,className:_,css:R},r&&{role:"tablist"},w),l(_K.Provider,{value:{expand:d,size:v}},r))});IK.propTypes={className:ny.default.string,"aria-label":ny.default.string,"data-test-subj":ny.default.string,css:ny.default.any,children:ny.default.node,expand:ny.default.bool,bottomBorder:ny.default.bool,size:ny.default.any};IK.displayName="EuiTabs";var PK=T(z()),Lr=T(it());var hrr=["className","expand","initialSelectedTab","onTabClick","selectedTab","size","tabs","autoFocus"],mrr=["id","name","content"];function gP(e){"@babel/helpers - typeof";return gP=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},gP(e)}function y1e(){return y1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vrr(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 grr(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function zTe(e,t){for(var r=0;r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Drr(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}var w$=function(t){var r=t.children,n=t.className,o=t.color,i=t.textSize,c=i===void 0?"s":i,d=Rrr(t,Arr),h=ur(),v=GTe(h),w=[v.euiHealth,v[c]],_=(0,JTe.default)("euiHealth",n);return l("div",O1e({css:w,className:_},d),l(yi,{gutterSize:"xs",alignItems:"center",responsive:!1},l(qt,{grow:!1},l(mr,{type:"dot",color:o})),l(qt,{grow:!1},r)))};w$.propTypes={className:oy.default.string,"aria-label":oy.default.string,"data-test-subj":oy.default.string,css:oy.default.any,color:oy.default.oneOfType([oy.default.string.isRequired,oy.default.any.isRequired]),textSize:oy.default.any};var CK=T(z()),ai=T(it()),fCe=T(At());var nCe=T(z()),S1e=T(it()),oCe=T(At());var Lrr={name:"gacnmc-allowFullScreen",styles:"&:hover [class*='euiImageCaption']{text-decoration:underline;};label:allowFullScreen;"},XTe=function(t){var r=t.euiTheme;return{euiImageWrapper:Q("display:inline-block;",pe("max-width","100%")," ",Tn("center"),"line-height:0;flex-shrink:0;;label:euiImageWrapper;"),allowFullScreen:Lrr,s:Q("margin:",r.size.s,";;label:s;"),m:Q("margin:",r.size.base,";;label:m;"),l:Q("margin:",r.size.l,";;label:l;"),xl:Q("margin:",r.size.xl,";;label:xl;"),left:Q(_oe(t,"m"),"{float:left;float:",NU.left,";",pe("margin-left","0"),";",pe("margin-top","0"),";};label:left;"),right:Q(_oe(t,"m"),"{float:right;float:",NU.right,";",pe("margin-right","0"),";",pe("margin-top","0"),";};label:right;"),fullWidth:Q(pe("width","100%"),";;label:fullWidth;")}};var YTe=T(z()),wP=T(it());var KTe=function(t){var r=t.euiTheme;return{euiImageButton:Q("position:relative;cursor:pointer;text-align:match-parent;line-height:0;&::before{opacity:0;content:'';pointer-events:none;position:absolute;inset:0;",bn,"{transition:opacity ",r.animation.fast," ",r.animation.resistance,";}}&:hover,&:focus{&::before{opacity:1;}[class*='euiImageButton__icon']{opacity:1;}}&:focus{",uu(t,"outset"),";};label:euiImageButton;"),fullWidth:Q(pe("width","100%"),";;label:fullWidth;"),shadowHover:Q("&::before{",cc(t,"s"),";};label:shadowHover;"),hasShadowHover:Q("&::before{",cc(t,"m"),";};label:hasShadowHover;")}},Nrr={name:"xj4dsa-closeFullScreen",styles:"pointer-events:none;label:closeFullScreen;"},jK=function(t){var r=t.euiTheme;return{euiImageButton__icon:Q("position:absolute;",pe("top",r.size.base)," ",pe("right",r.size.base),";;label:euiImageButton__icon;"),openFullScreen:Q("opacity:0;cursor:pointer;",bn,"{transition:opacity ",r.animation.slow," ",r.animation.resistance,";};label:openFullScreen;"),closeFullScreen:Nrr}};var Frr=["hasAlt","hasShadow","children","onClick","onKeyDown","isFullScreen","isFullWidth","fullScreenIconColor"];function x1e(){return x1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function zrr(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}var Wrr={light:"ghost",dark:"default"},O$=function(t){var r=t.hasAlt,n=t.hasShadow,o=t.children,i=t.onClick,c=t.onKeyDown,d=t.isFullScreen,h=t.isFullWidth,v=t.fullScreenIconColor,w=v===void 0?"light":v,_=Brr(t,Frr),I=ur(),R=KTe(I),D=[R.euiImageButton,n?R.hasShadowHover:R.shadowHover,!d&&h&&R.fullWidth],F=jK(I),A=[F.euiImageButton__icon,F.openFullScreen],N=wo("euiImageButton.openFullScreen","Click to open this image in fullscreen mode"),H=wo("euiImageButton.closeFullScreen","Press Escape or click to close image fullscreen mode"),q=Wrr[w];return l(YTe.default.Fragment,null,l("button",x1e({type:"button",css:D,onClick:i,onKeyDown:c},_),d&&l(ko,null,l("p",null,H,r&&" \u2014 ")),o,!d&&l("div",{css:A},l(ko,null,l("p",null,r&&" \u2014 ",N)),l(mr,{type:"fullScreen",color:q}))))};O$.propTypes={hasAlt:wP.default.bool.isRequired,onClick:wP.default.func.isRequired,onKeyDown:wP.default.func,isFullWidth:wP.default.bool.isRequired,isFullScreen:wP.default.bool};var eCe=T(z()),tCe=T(it());var QTe=function(t){var r=t.euiTheme;return{euiImageCaption:Q(yr(t,"s")," ",pe("margin-top",r.size.xs),";;label:euiImageCaption;"),isOnOverlayMask:Q("color:",r.colors.ghost,";text-shadow:0 1px 2px ",_n(r.colors.ink,.6),";[class*='euiLink']{color:",r.colors.ghost,";};label:isOnOverlayMask;")}};var OP=(0,eCe.forwardRef)(function(e,t){var r=e.caption,n=e.isOnOverlayMask,o=n===void 0?!1:n,i=ur(),c=QTe(i),d=[c.euiImageCaption,o&&c.isOnOverlayMask];return r?l("figcaption",{ref:t,css:d},r):null});OP.propTypes={isOnOverlayMask:tCe.default.bool};OP.displayName="EuiImageCaption";function _1e(){return _1e=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);re.length)&&(t=e.length);for(var r=0,n=Array(t);re.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function lnr(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}var MK=function(t){var r=t.className,n=t.alt,o=t.url,i=t.src,c=t.size,d=c===void 0?"original":c,h=t.hasShadow,v=t.style,w=t.wrapperProps,_=t.fullScreenIconColor,I=t.allowFullScreen,R=t.caption,D=t.float,F=t.margin,A=t.onFullScreen,N=snr(t,Yrr),H=(0,CK.useState)(!1),q=rnr(H,2),Y=q[0],ee=q[1],ne=typeof d=="string"&&cCe.includes(d),te=(0,fCe.default)("euiImage",r),de=ur(),fe=iCe(de),ye=[fe.euiImage,ne&&fe[d],!ne&&fe.customSize,h&&fe.hasShadow],Ie=[fe.euiImage,fe.isFullScreen],ve=!ne&&d!=="original",Oe=typeof d=="string"?d:"".concat(d,"px"),be=ve?j1e(j1e({},v),{},{maxWidth:Oe,maxHeight:Oe}):v,Te=d==="fullWidth",Pe={hasShadow:h,wrapperProps:w,setIsFullScreen:ee,fullScreenIconColor:_,isFullWidth:Te,allowFullScreen:I,alt:n,caption:R,float:D,margin:F,onFullScreen:A},Re=j1e({className:te,src:i||o},N);return l(CK.default.Fragment,null,l(I1e,Pe,l("img",TK({alt:n,css:ye,style:be},Re))),I&&Y&&l(k1e,Pe,l("img",TK({alt:n,css:Ie,style:v},Re))))};MK.propTypes={className:ai.default.string,"aria-label":ai.default.string,"data-test-subj":ai.default.string,css:ai.default.any,src:ai.default.string,url:ai.default.string,alt:ai.default.string.isRequired,caption:ai.default.node,size:ai.default.oneOfType([ai.default.any.isRequired,ai.default.number.isRequired,ai.default.string.isRequired]),float:ai.default.any,margin:ai.default.any,hasShadow:ai.default.bool,allowFullScreen:ai.default.bool,onFullScreen:ai.default.func,fullScreenIconColor:ai.default.oneOf(["light","dark"]),wrapperProps:ai.default.shape({className:ai.default.string,"aria-label":ai.default.string,"data-test-subj":ai.default.string,css:ai.default.any})};var OCe=T(z());var Lon=T(z());var unr=function(t){return Q(".euiScreenReaderOnly{",l3(),";}.eui-alignBaseline{vertical-align:baseline!important;}.eui-alignBottom{vertical-align:bottom!important;}.eui-alignMiddle{vertical-align:middle!important;}.eui-alignTop{vertical-align:top!important;}.eui-displayBlock{display:block!important;}.eui-displayInline{display:inline!important;}.eui-displayInlineBlock{display:inline-block!important;}.eui-fullWidth{display:block!important;",pe("width","100% !important"),";}.eui-fullHeight{",Q7e(),";}.eui-textCenter{text-align:center!important;}.eui-textLeft{text-align:start!important;}.eui-textRight{text-align:end!important;}.eui-textNoWrap{white-space:nowrap!important;}.eui-textInheritColor{color:inherit!important;}.eui-textBreakWord{",Y0(),";}.eui-textBreakAll{overflow-wrap:break-word!important;word-break:break-all!important;}.eui-textBreakNormal{overflow-wrap:normal!important;word-wrap:normal!important;word-break:normal!important;}.eui-textTruncate{",Zs(),";}.eui-textNumber{",YG(t),";}.eui-scrollBar{",K0(t),";}.eui-yScroll{",Ooe(t),";}.eui-xScroll{",xoe(t),";}.eui-yScrollWithShadows{",KG(t),";}.eui-xScrollWithShadows{",Y7e(t),";}[class*='eui-showFor']{display:none!important;}",Object.keys(t.euiTheme.breakpoint).map(function(r){return` .eui-hideFor--`.concat(r,` { `).concat(d9(t,[r]),` { display: none !important; @@ -969,14 +969,14 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `).concat(d9(t,[r]),` { display: flex !important; } - }`)}),";;label:globalStyles;")},hCe=function(){var t=ur();return l(r3,{styles:unr(t)})};var mCe=T(z());var MK=function(t){var r=t.cache,n=t.children;return n&&r?l(hne,{value:r},n):l(mCe.default.Fragment,null,n)};var AK=T(z()),gCe=T(it());function cnr(e,t){return hnr(e)||fnr(e,t)||dnr(e,t)||pnr()}function pnr(){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 dnr(e,t){if(e){if(typeof e=="string")return vCe(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)?vCe(e,t):void 0}}function vCe(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&arguments[1]!==void 0?arguments[1]:!0,n=t.searchableLabel||t.label;return r?n.trim().toLowerCase():n},vnr=function(t,r){var n=t.toLowerCase();return r.find(function(o){return C1e(o)===n})},gnr=function(t){var r=t.selectedOptions,n=t.isPreFiltered,o=t.option,i=t.accumulator,c=t.searchValue,d=t.normalizedSearchValue,h=t.optionMatcher;if(r){var v=vnr(C1e(o,!1),r);if(v)return!1}if(n){i.push(o);return}if(!d){i.push(o);return}var w=h({option:o,searchValue:c,normalizedSearchValue:d});w&&i.push(o)},xP=function(t){var r=t.searchValue,n=t.options,o=t.isPreFiltered,i=t.selectedOptions,c=i===void 0?[]:i,d=t.optionMatcher,h=r.toLowerCase(),v=[];return n.forEach(function(w){gnr({accumulator:v,option:w,searchValue:r,normalizedSearchValue:h,isPreFiltered:o,selectedOptions:c,optionMatcher:d})}),v},xCe=function(){return function(t){var r=t.option,n=t.normalizedSearchValue,o=C1e(r);return o.includes(n)}};var ynr=["onChange","options","value","placeholder","isPreFiltered","listId","className","optionMatcher"];function M1e(){return M1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wnr(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}var A1e=function(t){var r=t.onChange,n=t.options,o=t.value,i=t.placeholder,c=t.isPreFiltered,d=t.listId,h=t.className,v=t.optionMatcher,w=bnr(t,ynr),_=(0,_Ce.useCallback)(function(D){var F=D.target.value,A=xP({options:n,searchValue:F,isPreFiltered:c,optionMatcher:v});r(F,A)},[n,c,r,v]),I=(0,SCe.default)("euiSelectableSearch",h),R=d?{role:"combobox","aria-autocomplete":"list","aria-expanded":!0,"aria-controls":d,"aria-owns":d}:void 0;return l(y0e,M1e({className:I,placeholder:i,value:o,onChange:_,incremental:!0,fullWidth:!0,autoComplete:"off","aria-haspopup":"listbox"},R,w))};var Iin=T(z()),_P=T(it()),ECe=T(At());var ICe=function(t){var r=t.euiTheme;return{euiSelectableMessage:Q("display:flex;flex-direction:column;justify-content:center;align-items:center;padding:",r.size.s,";text-align:center;word-wrap:break-word;;label:euiSelectableMessage;"),bordered:Q("overflow:hidden;border:",r.border.thin,";border-radius:",r.border.radius.medium,";;label:bordered;")}};var Onr=["children","className","bordered"];function R1e(){return R1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _nr(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}var LK=function(t){var r=t.children,n=t.className,o=t.bordered,i=o===void 0?!1:o,c=xnr(t,Onr),d=(0,ECe.default)("euiSelectableMessage",n),h=mt(ICe),v=[h.euiSelectableMessage,i&&h.bordered];return l(Xt,R1e({color:"subdued",size:"xs",css:v,className:d},c),r)};LK.propTypes={className:_P.default.string,"aria-label":_P.default.string,"data-test-subj":_P.default.string,css:_P.default.any,bordered:_P.default.bool};var t_=T(z()),rt=T(it()),z1e=T(At());var NK=T(At()),Yr=T(it()),hu=T(z());var D1e=function(t){var r=t.euiTheme,n=_n(r.border.color,.4);return{border:"".concat(r.border.width.thin," solid ").concat(n),paddingHorizontal:r.size.m,paddingVertical:r.size.xs}},Snr={name:"1rnenrt-euiSelectableListItem__text",styles:"flex-grow:1;label:euiSelectableListItem__text;"},PCe=function(t){var r=t.euiTheme,n=D1e(t),o=n.border,i=n.paddingHorizontal,c=n.paddingVertical;return{euiSelectableListItem:Q("display:inline-flex;",pe("width","100%")," line-height:",yr(t,"m").lineHeight,";font-size:",yr(t,"s").fontSize,";text-align:start;cursor:pointer;overflow:hidden;&:not(:last-of-type){",pe("border-bottom",o),";}&[aria-disabled='true']{color:",r.colors.disabledText,";cursor:not-allowed;}&:hover,&.euiSelectableListItem-isFocused{&:not([aria-disabled='true']){color:",r.colors.primaryText,";background-color:",r.focus.backgroundColor,";.euiSelectableListItem__text{text-decoration:underline;}}};label:euiSelectableListItem;"),padding:{none:Q(";label:none;"),s:Q(pe("padding-vertical",c)," ",pe("padding-horizontal",i),";;label:s;")},euiSelectableListItem__content:Q(pe("width","100%")," display:flex;align-items:center;;label:euiSelectableListItem__content;"),euiSelectableListItem__text:Snr,textWrap:{truncate:Q(Zs(),";label:truncate;"),wrap:Q(";label:wrap;")},euiSelectableListItem__prepend:Q("flex-shrink:0;",pe("margin-right",i),";;label:euiSelectableListItem__prepend;"),euiSelectableListItem__append:Q("flex-shrink:0;",pe("margin-left",i),";;label:euiSelectableListItem__append;"),get euiSelectableListItem__icon(){return this.euiSelectableListItem__prepend}}};var Inr=["children","className","disabled","checked","isFocused","showIcons","prepend","append","allowExclusions","onFocusBadge","paddingSize","role","searchable","textWrap","toolTipContent","toolTipProps","aria-describedby"],Enr=["children","className"];function kCe(e,t){return Tnr(e)||jnr(e,t)||knr(e,t)||Pnr()}function Pnr(){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 knr(e,t){if(e){if(typeof e=="string")return jCe(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)?jCe(e,t):void 0}}function jCe(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Cnr(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 Mnr(e){switch(e){case"on":return{icon:"check",color:"text"};case"off":return{icon:"cross",color:"text"};case"mixed":return{icon:"minus",color:"text"};case void 0:default:return{icon:"empty"}}}var L1e=function(t){var r=t.children,n=t.className,o=t.disabled,i=t.checked,c=t.isFocused,d=t.showIcons,h=d===void 0?!0:d,v=t.prepend,w=t.append,_=t.allowExclusions,I=t.onFocusBadge,R=I===void 0?!0:I,D=t.paddingSize,F=D===void 0?"s":D,A=t.role,N=A===void 0?"option":A,H=t.searchable,q=t.textWrap,Y=q===void 0?"truncate":q,ee=t.toolTipContent,ne=t.toolTipProps,te=t["aria-describedby"],de=TCe(t,Inr),fe=(0,NK.default)("euiSelectableListItem",{"euiSelectableListItem-isFocused":c},n),ye=mt(PCe),Ie=[ye.euiSelectableListItem,ye.padding[F]],he=[ye.euiSelectableListItem__text,ye.textWrap[Y]],be=(0,hu.useMemo)(function(){if(h){var Rt=Mnr(i),Ut=Rt.icon,vr=Rt.color;return l(mr,{css:ye.euiSelectableListItem__icon,className:"euiSelectableListItem__icon",color:vr,type:Ut})}},[h,i,ye]),Se=(0,hu.useMemo)(function(){if(v)return l("span",{css:ye.euiSelectableListItem__prepend,className:"euiSelectableListItem__prepend"},v)},[v,ye]),Te=(0,hu.useMemo)(function(){var Rt={"aria-hidden":!0,iconType:"returnKey",iconSide:"left",color:"hollow"};if(R===!0)return l(Il,SP({className:"euiSelectableListItem__onFocusBadge"},Rt));if(typeof R!="boolean"&&R){var Ut=R.children,vr=R.className,Sr=TCe(R,Enr);return l(Il,SP({className:(0,NK.default)("euiSelectableListItem__onFocusBadge",vr)},Rt,Sr),Ut)}},[R]),Pe=!!(c&&!o&&Te),Ve=(0,hu.useMemo)(function(){if(w||Pe)return l("span",{css:ye.euiSelectableListItem__append,className:"euiSelectableListItem__append"},w," ",Pe?Te:null)},[w,Pe,Te,ye]),De=(0,hu.useMemo)(function(){var Rt,Ut,vr={checked:{state:l(Zt,{token:"euiSelectableListItem.checkedOption",default:"Checked option."}),instructions:l(Zt,{token:"euiSelectableListItem.checkOptionInstructions",default:"To check this option, press Enter."})},unchecked:{instructions:l(Zt,{token:"euiSelectableListItem.uncheckOptionInstructions",default:"To uncheck this option, press Enter."})},excluded:{state:l(Zt,{token:"euiSelectableListItem.excludedOption",default:"Excluded option."}),instructions:l(Zt,{token:"euiSelectableListItem.excludeOptionInstructions",default:"To exclude this option, press Enter."})},mixed:{state:l(Zt,{token:"euiSelectableListItem.mixedOption",default:"Mixed (indeterminate) option."}),instructions:l(Zt,{token:"euiSelectableListItem.mixedOptionInstructions",default:"To check this option for all, press Enter once."}),uncheckInstructions:l(Zt,{token:"euiSelectableListItem.mixedOptionUncheckInstructions",default:"To uncheck this option for all, press Enter twice."}),excludeInstructions:l(Zt,{token:"euiSelectableListItem.mixedOptionExcludeInstructions",default:"To exclude this option for all, press Enter twice."})}};switch(i){case"on":Rt=vr.checked.state,Ut=_?vr.excluded.instructions:H?vr.unchecked.instructions:void 0;break;case"off":Rt=vr.excluded.state,Ut=vr.unchecked.instructions;break;case"mixed":Rt=vr.mixed.state,Ut=l(hu.default.Fragment,null,vr.mixed.instructions," ",_?vr.mixed.excludeInstructions:vr.mixed.uncheckInstructions);break;case void 0:default:Ut=_||H?vr.checked.instructions:void 0;break}return Rt||Ut?l(ko,null,l("div",null,Rt||Ut?". ":null,Rt,Rt&&Ut?" ":null,Ut)):null},[i,H,_]),He=(0,hu.useMemo)(function(){var Rt=["option","checkbox","menuitemcheckbox"],Ut=[].concat(Rt,["radio","menuitemradio","switch"]);if(Ut.includes(N))switch(i){case"on":case"off":return!0;case"mixed":return Rt.includes(N)?"mixed":!1;default:return!1}},[N,i]),Je=!!ee&&!o,vt=(0,hu.useState)(null),Qe=kCe(vt,2),Ne=Qe[0],Nt=Qe[1],Vt=(0,hu.useState)(te),Ke=kCe(Vt,2),st=Ke[0],Tt=Ke[1];(0,hu.useEffect)(function(){Ne&&(c?Ne.showToolTip():Ne.hideToolTip())},[c,Ne]),(0,hu.useEffect)(function(){if(Ne){var Rt=Ne.state.id;Tt((0,NK.default)(Rt,te))}},[Ne,te]);var wr=l("span",{css:ye.euiSelectableListItem__content,className:"euiSelectableListItem__content"},be,Se,l("span",{css:he,className:"euiSelectableListItem__text"},r,De),Ve);return l("li",SP({role:N,"aria-disabled":o,"aria-checked":He,"aria-selected":!o&&c,css:Ie,className:fe},de,{"aria-describedby":st}),Je?l(ps,SP({ref:Nt,content:ee,anchorClassName:"eui-fullWidth",position:"left"},ne),wr):wr)};L1e.propTypes={className:Yr.default.string,"aria-label":Yr.default.string,"data-test-subj":Yr.default.string,css:Yr.default.any,children:Yr.default.node,checked:Yr.default.any,showIcons:Yr.default.bool,isFocused:Yr.default.bool,disabled:Yr.default.bool,prepend:Yr.default.node,append:Yr.default.node,allowExclusions:Yr.default.bool,onFocusBadge:Yr.default.oneOfType([Yr.default.bool.isRequired,Yr.default.shape({iconType:Yr.default.oneOfType([Yr.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,Yr.default.string.isRequired,Yr.default.elementType.isRequired]),iconSide:Yr.default.any,color:Yr.default.oneOfType([Yr.default.any.isRequired,Yr.default.string.isRequired]),isDisabled:Yr.default.bool,closeButtonProps:Yr.default.any,className:Yr.default.string,"aria-label":Yr.default.string,"data-test-subj":Yr.default.string,css:Yr.default.any,iconOnClick:Yr.default.func,iconOnClickAriaLabel:Yr.default.any,onClick:Yr.default.func,onClickAriaLabel:Yr.default.any,href:Yr.default.string,target:Yr.default.string,rel:Yr.default.string}).isRequired]),paddingSize:Yr.default.any,searchable:Yr.default.bool,role:Yr.default.any,textWrap:Yr.default.oneOf(["truncate","wrap"]),toolTipContent:Yr.default.node,toolTipProps:Yr.default.any};var Anr={name:"1giu8j5-fullHeight",styles:"flex-grow:1;label:fullHeight;"},N1e=function(t){var r=t.euiTheme,n=D1e(t);return{euiSelectableList:Q("&:has(:focus-visible){",uu(t,"outset"),";};label:euiSelectableList;"),fullHeight:Anr,bordered:Q("overflow:hidden;border:",r.border.thin,";border-radius:",r.border.radius.medium,";;label:bordered;"),euiSelectableList__list:rP(XG(t)," &:focus,&>ul:focus{outline:none;};label:euiSelectableList__list;"),euiSelectableList__groupLabel:Q(To(t,"xxxs")," display:flex;align-items:center;",pe("border-bottom",n.border)," ",pe("padding-vertical",n.paddingVertical)," ",pe("padding-horizontal",n.paddingHorizontal),";;label:euiSelectableList__groupLabel;")}};var Rnr=["data"],Dnr=["label","isGroupLabel","checked","disabled","prepend","append","ref","key","searchableLabel","data","truncationProps"],Lnr=["className","options","searchValue","onOptionClick","renderOption","height","windowProps","rowHeight","activeOptionIndex","makeOptionId","showIcons","singleSelection","visibleOptions","allowExclusions","bordered","paddingSize","searchable","onFocusBadge","listId","setActiveOptionIndex","aria-label","aria-labelledby","aria-describedby","role","isPreFiltered","isVirtualized","textWrap","truncationProps"];function CCe(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 fs(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Nnr(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 Fnr(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function MCe(e,t){for(var r=0;rA;H?F=(A-.5)*I:F=N*I}return R?l(Uhe,{onResize:n.calculateDefaultOptionWidth},function(q){var Y=q.width,ee=q.height;return l(u$,oy({width:Y,height:ee},D),n.ListRow)}):l(Uhe,{disableHeight:!0,onResize:n.calculateDefaultOptionWidth},function(q){var Y=q.width;return l(u$,oy({width:Y,height:F},D),n.ListRow)})}),Mi(n,"forceVirtualizedListRowRerender",function(){n.setState({itemData:fs({},n.state.optionArray)})}),Mi(n,"focusBadgeOffset",0),Mi(n,"calculateDefaultOptionWidth",function(i){var c=i.width,d=n.props,h=d.truncationProps,v=d.searchable,w=d.searchValue,_=v||h;if(_){var I=n.props.paddingSize==="none"?0:24,R=n.props.showIcons===!1?0:28;n.focusBadgeOffset=n.props.onFocusBadge===!1?0:46,n.animationFrameId=requestAnimationFrame(function(){var D=n.listBoxRef?c-n.listBoxRef.offsetWidth:0;n.setState({defaultOptionWidth:c-D-I-R}),(h||v&&w)&&n.forceVirtualizedListRowRerender()})}}),Mi(n,"getTruncationProps",function(i,c,d){var h=fs(fs({},n.props.truncationProps),i.truncationProps),v=c||Object.keys(h).length>0;if(v){var w=n.state.defaultOptionWidth,_=!i.append&&!i.prepend,I=_&&w?d?w-n.focusBadgeOffset:w:void 0;return fs({width:I},h)}}),Mi(n,"renderSearchedText",function(i,c){var d=n.props.searchValue;if(!c)return l(l1,{search:d},i);var h=i.toLowerCase().indexOf(d.toLowerCase()),v=h+Math.floor(d.length/2);return l(E3,oy({},c,{truncation:"startEnd",truncationPosition:v,text:i}),function(w){return l(t_.default.Fragment,null,w.length>=d.length?l(l1,{search:d},w):l(x3,null,w))})}),Mi(n,"renderTruncatedText",function(i,c){return l(E3,oy({calculationDelayMs:2},c,{text:i}),function(d){return d})}),Mi(n,"onAddOrRemoveOption",function(i,c){if(!i.disabled){var d=n.props,h=d.allowExclusions,v=d.options,w=d.visibleOptions,_=w===void 0?v:w;n.props.setActiveOptionIndex(_.findIndex(function(I){var R=I.label;return R===i.label}),function(){i.checked==="on"&&h?n.onExcludeOption(i,c):i.checked==="on"||i.checked==="off"?n.onRemoveOption(i,c):n.onAddOption(i,c)})}}),Mi(n,"onAddOption",function(i,c){var d=n.props,h=d.onOptionClick,v=d.options,w=d.singleSelection,_=fs({},i),I=v.map(function(R){var D=fs({},R);return w&&delete D.checked,R===i&&(D.checked="on",_=D),D});h(I,c,_)}),Mi(n,"onRemoveOption",function(i,c){var d=n.props,h=d.onOptionClick,v=d.singleSelection,w=d.options,_=fs({},i),I=w.map(function(R){var D=fs({},R);return R===i&&v!=="always"&&(delete D.checked,_=D),D});h(I,c,_)}),Mi(n,"onExcludeOption",function(i,c){var d=n.props,h=d.onOptionClick,v=d.options,w=fs({},i),_=v.map(function(I){var R=fs({},I);return I===i&&(R.checked="off",w=R),R});h(_,c,w)});var o=r.visibleOptions||r.options;return n.state=fs({defaultOptionWidth:0,optionArray:o,itemData:fs({},o)},n.calculateAriaSetAttrs(o)),n}return Vnr(t,e),Bnr(t,[{key:"componentWillUnmount",value:function(){this.animationFrameId!==void 0&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=void 0)}},{key:"shouldComponentUpdate",value:function(n){var o=this.props,i=o.allowExclusions,c=o.showIcons,d=o.paddingSize,h=o.textWrap,v=o.onFocusBadge,w=o.searchable;return(n.allowExclusions!==i||n.showIcons!==c||n.paddingSize!==d||n.textWrap!==h||n.onFocusBadge!==v||n.searchable!==w)&&(this.listRowRerender+=1),!0}},{key:"componentDidUpdate",value:function(n){var o=this.props,i=o.isVirtualized,c=o.activeOptionIndex,d=o.visibleOptions,h=o.options,v=o.allowExclusions,w=o.showIcons,_=o.paddingSize,I=o.textWrap,R=o.onFocusBadge,D=o.searchable;if(n.activeOptionIndex!==c){var F=this.props.makeOptionId;if(this.listBoxRef&&this.props.searchable!==!0&&this.listBoxRef.setAttribute("aria-activedescendant",F(c)),typeof c<"u")if(i){var A;(A=this.listRef)===null||A===void 0||A.scrollToItem(c,"auto")}else{var N,H="#".concat(F(c)),q=(N=this.listBoxRef)===null||N===void 0?void 0:N.querySelector(H);if(q){var Y;(Y=q.scrollIntoView)===null||Y===void 0||Y.call(q,{block:"nearest"})}}}var ee=d||h;n.visibleOptions!==d||n.options!==h?this.setState(fs({optionArray:ee,itemData:fs({},ee)},this.calculateAriaSetAttrs(ee))):i&&(n.allowExclusions!==v||n.showIcons!==w||n.paddingSize!==_||n.textWrap!==I||n.onFocusBadge!==R||n.searchable!==D)&&this.setState({itemData:fs({},ee)})}},{key:"render",value:function(){var n=this,o=this.props,i=o.className,c=o.options,d=o.searchValue,h=o.onOptionClick,v=o.renderOption,w=o.height,_=o.windowProps,I=o.rowHeight,R=o.activeOptionIndex,D=o.makeOptionId,F=o.showIcons,A=o.singleSelection,N=o.visibleOptions,H=o.allowExclusions,q=o.bordered,Y=o.paddingSize,ee=o.searchable,ne=o.onFocusBadge,te=o.listId,de=o.setActiveOptionIndex,fe=o["aria-label"],ye=o["aria-labelledby"],Ie=o["aria-describedby"],he=o.role,be=o.isPreFiltered,Se=o.isVirtualized,Te=o.textWrap,Pe=o.truncationProps,Ve=F1e(o,Lnr),De=w==="full",He=(0,z1e.default)("euiSelectableList",i);return l(G0,null,function(Je){var vt=Je(N1e),Qe=[vt.euiSelectableList,De&&vt.fullHeight,q&&vt.bordered],Ne=(0,z1e.default)("euiSelectableList__list",vt.euiSelectableList__list);return l("div",oy({css:Qe,className:He},Ve),Se?n.renderVirtualizedList(Ne):l("div",{className:Ne,style:De?void 0:{blockSize:w},ref:n.removeScrollableTabStop},l("ul",{ref:n.setListBoxRef},n.state.optionArray.map(function(Nt,Vt){return t_.default.createElement(n.ListRow,{key:"".concat(Vt,"-").concat(n.listRowRerender),data:n.state.optionArray,index:Vt},null)}))))})}}])}(t_.Component);Mi(x$,"defaultProps",{rowHeight:32,searchValue:"",isVirtualized:!0});x$.propTypes={className:rt.default.string,"aria-label":rt.default.string,"data-test-subj":rt.default.string,css:rt.default.any,activeOptionIndex:rt.default.number,showIcons:rt.default.bool,singleSelection:rt.default.oneOfType([rt.default.oneOf(["always"]),rt.default.bool.isRequired]),windowProps:rt.default.any,bordered:rt.default.bool,onFocusBadge:rt.default.oneOfType([rt.default.bool.isRequired,rt.default.shape({iconType:rt.default.oneOfType([rt.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,rt.default.string.isRequired,rt.default.elementType.isRequired]),iconSide:rt.default.any,color:rt.default.oneOfType([rt.default.any.isRequired,rt.default.string.isRequired]),isDisabled:rt.default.bool,closeButtonProps:rt.default.any,className:rt.default.string,"aria-label":rt.default.string,"data-test-subj":rt.default.string,css:rt.default.any,iconOnClick:rt.default.func,iconOnClickAriaLabel:rt.default.any,onClick:rt.default.func,onClickAriaLabel:rt.default.any,href:rt.default.string,target:rt.default.string,rel:rt.default.string}).isRequired]),paddingSize:rt.default.any,textWrap:rt.default.oneOf(["truncate","wrap"]),truncationProps:rt.default.any,isVirtualized:rt.default.oneOfType([rt.default.oneOf([!0]),rt.default.oneOf([!1]).isRequired]),rowHeight:rt.default.number,options:rt.default.arrayOf(rt.default.shape({isGroupLabel:rt.default.oneOfType([rt.default.oneOf([!0]).isRequired,rt.default.oneOf([!1])]),className:rt.default.string,"aria-label":rt.default.string,"data-test-subj":rt.default.string,css:rt.default.any,label:rt.default.string,searchableLabel:rt.default.string,key:rt.default.string,checked:rt.default.any,disabled:rt.default.bool,prepend:rt.default.node,append:rt.default.node,ref:rt.default.func,data:rt.default.shape({}),textWrap:rt.default.oneOf(["truncate","wrap"]),truncationProps:rt.default.any,toolTipContent:rt.default.node,toolTipProps:rt.default.any}).isRequired).isRequired,visibleOptions:rt.default.arrayOf(rt.default.shape({isGroupLabel:rt.default.oneOfType([rt.default.oneOf([!0]).isRequired,rt.default.oneOf([!1])]),className:rt.default.string,"aria-label":rt.default.string,"data-test-subj":rt.default.string,css:rt.default.any,label:rt.default.string,searchableLabel:rt.default.string,key:rt.default.string,checked:rt.default.any,disabled:rt.default.bool,prepend:rt.default.node,append:rt.default.node,ref:rt.default.func,data:rt.default.shape({}),textWrap:rt.default.oneOf(["truncate","wrap"]),truncationProps:rt.default.any,toolTipContent:rt.default.node,toolTipProps:rt.default.any}).isRequired),searchValue:rt.default.string.isRequired,onOptionClick:rt.default.func.isRequired,renderOption:rt.default.func,height:rt.default.oneOfType([rt.default.number.isRequired,rt.default.oneOf(["full"])]),allowExclusions:rt.default.bool,searchable:rt.default.bool,isPreFiltered:rt.default.oneOfType([rt.default.bool.isRequired,rt.default.shape({highlightSearch:rt.default.bool}).isRequired]),makeOptionId:rt.default.func.isRequired,listId:rt.default.string.isRequired,setActiveOptionIndex:rt.default.func.isRequired};var W1e={euiSelectable:{name:"1sd0qv-euiSelectable",styles:"display:flex;flex-direction:column;label:euiSelectable;"},fullHeight:Q(pe("height","100%"),";;label:fullHeight;")};var Znr=["children","className","options","onChange","onActiveOptionChange","searchable","searchProps","singleSelection","isLoading","listProps","renderOption","height","allowExclusions","aria-label","aria-describedby","loadingMessage","noMatchesMessage","emptyMessage","errorMessage","selectableScreenReaderText","isPreFiltered","optionMatcher"],qnr=["aria-label","aria-describedby","onChange","defaultValue","inputRef"],Unr=["aria-label","aria-describedby","isVirtualized","rowHeight"];function IP(e){"@babel/helpers - typeof";return IP=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},IP(e)}function _$(){return _$=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Qnr(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 eor(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function NCe(e,t){for(var r=0;r-1?o.setState({activeOptionIndex:D,isFocused:!0}):o.setState({activeOptionIndex:o.state.visibleOptions.findIndex(function(F){return!F.disabled&&!F.isGroupLabel}),isFocused:!0})}}),Va(o,"onKeyDown",function(R){var D=o.optionsListRef.current;if(!o.isFocusOnSearchOrListBox(R.target)){o.setState({activeOptionIndex:void 0,isFocused:!1});return}switch(R.key){case cn.ARROW_UP:R.preventDefault(),R.stopPropagation(),o.incrementActiveOptionIndex(-1);break;case cn.ARROW_DOWN:R.preventDefault(),R.stopPropagation(),o.incrementActiveOptionIndex(1);break;case cn.ENTER:case cn.SPACE:if(o.props.searchable&&R.target===o.inputRef&&R.key===cn.SPACE)return;R.preventDefault(),R.stopPropagation(),o.state.activeOptionIndex!=null&&D&&(R.persist(),D.onAddOrRemoveOption(o.state.visibleOptions[o.state.activeOptionIndex],R));break;case cn.ALT:case cn.SHIFT:case cn.CTRL:case cn.META:break;default:o.setState({activeOptionIndex:void 0},o.onFocus);break}}),Va(o,"incrementActiveOptionIndex",function(R){o.state.visibleOptions.length&&o.setState(function(D){var F=D.activeOptionIndex,A=D.visibleOptions,N;F==null?N=R<0?A.length-1:0:(N=F+R,N<0?N=A.length-1:N===A.length&&(N=0));for(var H=R>0?1:-1;A[N].isGroupLabel||A[N].disabled;)N=N+H,N<0?N=A.length-1:N===A.length&&(N=0);return{activeOptionIndex:N}})}),Va(o,"onSearchChange",function(R,D){var F,A;o.setState({searchValue:R,visibleOptions:D,activeOptionIndex:void 0},function(){o.state.isFocused&&o.onFocus()}),(F=o.props.searchProps)===null||F===void 0||(A=F.onChange)===null||A===void 0||A.call(F,R,D)}),Va(o,"onContainerBlur",function(R){o.isFocusOnSearchOrListBox(R.relatedTarget)||o.setState({activeOptionIndex:void 0,isFocused:!1})}),Va(o,"onOptionClick",function(R,D,F){var A=o.props,N=A.isPreFiltered,H=A.onChange,q=A.optionMatcher,Y=o.state.searchValue,ee=xP({options:R,searchValue:Y??"",isPreFiltered:!!N,selectedOptions:[],optionMatcher:q});o.setState({visibleOptions:ee}),H&&H(R,D,F)}),Va(o,"scrollToItem",function(R,D){var F;(F=o.optionsListRef.current)===null||F===void 0||(F=F.listRef)===null||F===void 0||F.scrollToItem(R,D)}),Va(o,"makeOptionId",function(R){return R!=null?"".concat(o.listId,"_option-").concat(R):""}),o.rootId=r.id?function(R){return"".concat(r.id).concat(R?"_".concat(R):"")}:fn(),o.listId=o.rootId("listbox"),o.messageContentId=o.rootId("messageContent");var i=r.options,c=r.singleSelection,d=r.isPreFiltered,h=r.searchProps,v=h?.value||String(h?.defaultValue||""),w=xP({options:i,searchValue:v,isPreFiltered:!!d,selectedOptions:[],optionMatcher:r.optionMatcher});h==null||(n=h.onChange)===null||n===void 0||n.call(h,v,w);var _=i.filter(function(R){return R.checked}),I;return c&&_.length===1&&w.includes(_[0])&&(I=w.indexOf(_[0])),o.state={activeOptionIndex:I,searchValue:v,visibleOptions:w,isFocused:!1},o}return ior(t,e),tor(t,[{key:"componentDidUpdate",value:function(n,o){if(o.activeOptionIndex!==this.state.activeOptionIndex){var i,c,d=this.state.activeOptionIndex!=null?this.state.visibleOptions[this.state.activeOptionIndex]:null;(i=(c=this.props).onActiveOptionChange)===null||i===void 0||i.call(c,d)}}},{key:"render",value:function(){var n=this,o=this.props,i=o.children,c=o.className,d=o.options,h=o.onChange,v=o.onActiveOptionChange,w=o.searchable,_=o.searchProps,I=o.singleSelection,R=o.isLoading,D=o.listProps,F=o.renderOption,A=o.height,N=o.allowExclusions,H=o["aria-label"],q=o["aria-describedby"],Y=o.loadingMessage,ee=o.noMatchesMessage,ne=o.emptyMessage,te=o.errorMessage,de=o.selectableScreenReaderText,fe=o.isPreFiltered,ye=o.optionMatcher,Ie=V1e(o,Znr),he=this.state,be=he.searchValue,Se=he.visibleOptions,Te=he.activeOptionIndex,Pe={"aria-label":void 0,"aria-describedby":void 0},Ve=_||Pe,De=Ve["aria-label"],He=Ve["aria-describedby"],Je=Ve.onChange,vt=Ve.defaultValue,Qe=Ve.inputRef,Ne=V1e(Ve,qnr),Nt=D||Pe,Vt=Nt["aria-label"],Ke=Nt["aria-describedby"],st=Nt.isVirtualized,Tt=Nt.rowHeight,wr=V1e(Nt,Unr),Rt;st===!1?Rt={isVirtualized:st}:Tt!=null&&(Rt={rowHeight:Tt});var Ut=(0,zCe.default)("euiSelectable",c),vr=[W1e.euiSelectable,A==="full"&&W1e.fullHeight],Sr;te!=null?Sr=typeof te=="string"?l("p",null,te):te:R?Y===void 0||typeof Y=="string"?Sr=l(Jd.default.Fragment,null,l(_r,{size:"m"}),l(Oo,{size:"xs"}),l("p",null,Y||l(Zt,{token:"euiSelectable.loadingOptions",default:"Loading options"}))):Sr=Jd.default.cloneElement(Y,H1e({id:this.messageContentId},Y.props)):be&&Se.length===0?ee===void 0||typeof ee=="string"?Sr=l("p",null,ee||l(Zt,{token:"euiSelectable.noMatchingOptions",default:"{searchValue} doesn't match any options",values:{searchValue:l("strong",null,be)}})):Sr=Jd.default.cloneElement(ee,H1e({id:this.messageContentId},ee.props)):d.length||(ne===void 0||typeof ne=="string"?Sr=l("p",null,ne||l(Zt,{token:"euiSelectable.noAvailableOptions",default:"No options available"})):Sr=Jd.default.cloneElement(ne,H1e({id:this.messageContentId},ne.props)));var Er=function(or,ir){if(or&&or["aria-label"])return{"aria-label":or["aria-label"]};var Mr=ir?" ".concat(ir):"";return or&&or["aria-describedby"]?{"aria-describedby":"".concat(or["aria-describedby"]).concat(Mr)}:H?{"aria-label":H}:q?{"aria-describedby":"".concat(q).concat(Mr)}:{}},po=Er(_,this.messageContentId),Pn=!!Object.keys(po).length,Nr=w?l(Zt,{tokens:["euiSelectable.screenReaderInstructions","euiSelectable.placeholderName"],defaults:["Use the Up and Down arrow keys to move focus over options. Press Enter to select. Press Escape to collapse options.","Filter options"]},function(Pr){var or=Gnr(Pr,2),ir=or[0],Mr=or[1];return l(Jd.default.Fragment,null,l(A1e,_$({"aria-describedby":St,key:"listSearch",options:d,value:be,onChange:n.onSearchChange,listId:n.optionsListRef.current?n.listId:void 0,"aria-activedescendant":n.makeOptionId(Te),placeholder:Mr,isPreFiltered:!!fe,optionMatcher:ye,inputRef:function(ms){var Nn;n.inputRef=ms,_==null||(Nn=_.inputRef)===null||Nn===void 0||Nn.call(_,ms)}},Pn?po:{"aria-label":Mr},Ne)),l(ko,null,l("p",{id:St},de," ",ir)))}):void 0,Wo=Se.filter(function(Pr){return!Pr.disabled}).length,Cr=w&&l(Zt,{token:"euiSelectable.searchResults",default:function(or){var ir=or.resultsLength;return"".concat(ir," result").concat(ir===1?"":"s"," available")},values:{resultsLength:Wo}}),St=this.rootId("instructions"),tn=Er(D,St),Ks=!!Object.keys(tn).length,hs=l(Zt,{token:"euiSelectable.placeholderName",default:"Filter options"},function(Pr){return l(Jd.default.Fragment,null,w&&l(DA,{isActive:Sr!=null||Te!=null},Sr||Cr),Sr?l(LK,{"data-test-subj":"euiSelectableMessage",id:n.messageContentId,bordered:D&&D.bordered},Sr):l(x$,_$({"data-test-subj":"euiSelectableList",key:"list",options:d,visibleOptions:Se,searchValue:be,isPreFiltered:fe,activeOptionIndex:Te,setActiveOptionIndex:function(ir,Mr){n.setState({activeOptionIndex:ir},Mr)},onOptionClick:n.onOptionClick,singleSelection:I,ref:n.optionsListRef,renderOption:F,height:A,allowExclusions:N,searchable:w,makeOptionId:n.makeOptionId,listId:n.listId},Ks?tn:w&&{"aria-label":Pr},wr,Rt)))});return l("div",_$({ref:this.containerRef,css:vr,className:Ut,onKeyDown:this.onKeyDown,onBlur:this.onContainerBlur,onFocus:this.onFocus,onMouseDown:this.onMouseDown},Ie),i&&i(hs,Nr))}}],[{key:"getDerivedStateFromProps",value:function(n,o){var i,c=n.options,d=n.isPreFiltered,h=n.searchProps,v=n.optionMatcher,w=o.activeOptionIndex,_=o.searchValue,I={searchValue:_,activeOptionIndex:w};return h?.value!=null&&h.value!==_&&(I.searchValue=h.value),I.visibleOptions=xP({options:c,searchValue:(i=I.searchValue)!==null&&i!==void 0?i:"",isPreFiltered:!!d,selectedOptions:[],optionMatcher:v}),w!=null&&w>=I.visibleOptions.length&&(I.activeOptionIndex=-1),I}}])}(Jd.Component);Va(j3,"defaultProps",{options:[],singleSelection:!1,searchable:!1,isPreFiltered:!1,optionMatcher:xCe()});j3.propTypes={className:Kt.default.string,"aria-label":Kt.default.string,"data-test-subj":Kt.default.string,css:Kt.default.any,searchable:Kt.default.oneOfType([Kt.default.oneOf([!1]).isRequired,Kt.default.oneOf([!0]).isRequired]).isRequired,searchProps:Kt.default.any,children:Kt.default.func,options:Kt.default.arrayOf(Kt.default.shape({isGroupLabel:Kt.default.oneOfType([Kt.default.oneOf([!0]).isRequired,Kt.default.oneOf([!1])]),className:Kt.default.string,"aria-label":Kt.default.string,"data-test-subj":Kt.default.string,css:Kt.default.any,label:Kt.default.string,searchableLabel:Kt.default.string,key:Kt.default.string,checked:Kt.default.any,disabled:Kt.default.bool,prepend:Kt.default.node,append:Kt.default.node,ref:Kt.default.func,data:Kt.default.shape({}),textWrap:Kt.default.oneOf(["truncate","wrap"]),truncationProps:Kt.default.any,toolTipContent:Kt.default.node,toolTipProps:Kt.default.any}).isRequired).isRequired,onChange:Kt.default.func,onActiveOptionChange:Kt.default.func,singleSelection:Kt.default.oneOfType([Kt.default.oneOf(["always"]),Kt.default.bool.isRequired]),allowExclusions:Kt.default.bool,isLoading:Kt.default.bool,height:Kt.default.oneOfType([Kt.default.number.isRequired,Kt.default.oneOf(["full"])]),listProps:Kt.default.any,renderOption:Kt.default.func,loadingMessage:Kt.default.oneOfType([Kt.default.element.isRequired,Kt.default.string.isRequired]),noMatchesMessage:Kt.default.oneOfType([Kt.default.element.isRequired,Kt.default.string.isRequired]),emptyMessage:Kt.default.oneOfType([Kt.default.element.isRequired,Kt.default.string.isRequired]),errorMessage:Kt.default.oneOfType([Kt.default.element.isRequired,Kt.default.string.isRequired,Kt.default.oneOf([null])]),isPreFiltered:Kt.default.oneOfType([Kt.default.bool.isRequired,Kt.default.shape({highlightSearch:Kt.default.bool}).isRequired]),selectableScreenReaderText:Kt.default.string,optionMatcher:Kt.default.func};var Ran=T(z()),d1=T(it()),VCe=T(At());var zK=T(z());var sor="m",WK=function(t){var r,n,o=(r=EJ().EuiTable)===null||r===void 0?void 0:r.responsiveBreakpoint,i=(n=t??o)!==null&&n!==void 0?n:sor,c=typeof i=="boolean",d=!Kne(c?"":i);return c?i:d},Z1e=(0,zK.createContext)(!1),p1=function(){return(0,zK.useContext)(Z1e)};var r_=function(t){var r=t.euiTheme,n=r.size.s,o=r.size.xs,i={actions:{width:r.size.xxl,offset:pr(n,function(d){return d*2})},checkbox:{width:pr([r.size.xl,r.size.xs],function(d,h){return d+h}),offset:pr(n,function(d){return d/2})}},c=r.size.xl;return{cellContentPadding:n,compressedCellContentPadding:o,mobileSizes:i,checkboxSize:c}},lor={name:"gt2v1c-mobile",styles:"thead{display:none;}tfoot{display:none;};label:mobile;"},uor={name:"18uoljc-auto",styles:"table-layout:auto;label:auto;"},cor={name:"1fm6zfw-fixed",styles:"table-layout:fixed;label:fixed;"},WCe=function(t){var r=t.euiTheme,n=r_(t),o=n.cellContentPadding,i=n.compressedCellContentPadding;return{euiTable:Q(KG(t)," ",pe("width","100%")," border:none;border-collapse:collapse;background-color:",r.colors.emptyShade,";;label:euiTable;"),layout:{fixed:cor,auto:uor},uncompressed:Q("font-size:",yr(t,"s").fontSize,";line-height:",yr(t,"m").lineHeight,";& :where(.euiTableCellContent){padding:",o,";};label:uncompressed;"),compressed:Q(yr(t,"xs"),"& :where(.euiTableCellContent){padding:",i,";};label:compressed;"),desktop:Q(";label:desktop;"),mobile:lor}},HCe={name:"1hnio98-euiTableCaptionStyles",styles:"position:relative!important;label:euiTableCaptionStyles;"};var por=["children","className","compressed","tableLayout","responsiveBreakpoint"];function q1e(){return q1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hor(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}var HK=function(t){var r=t.children,n=t.className,o=t.compressed,i=t.tableLayout,c=i===void 0?"fixed":i,d=t.responsiveBreakpoint,h=dor(t,por),v=WK(d),w=(0,VCe.default)("euiTable",n),_=mt(WCe),I=[_.euiTable,_.layout[c],(!o||v)&&_.uncompressed,o&&!v&&_.compressed,v?_.mobile:_.desktop];return l("table",q1e({tabIndex:-1,css:I,className:w},h),l(Z1e.Provider,{value:v},r))};HK.propTypes={compressed:d1.default.bool,responsiveBreakpoint:d1.default.oneOfType([d1.default.any.isRequired,d1.default.bool.isRequired]),tableLayout:d1.default.oneOf(["fixed","auto"]),className:d1.default.string,"aria-label":d1.default.string,"data-test-subj":d1.default.string,css:d1.default.any};var Wan=T(z()),EP=T(it());var mor=["children","className","bodyRef"];function U1e(){return U1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function gor(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}var VK=function(t){var r=t.children,n=t.className,o=t.bodyRef,i=vor(t,mor);return l("tbody",U1e({className:n,ref:o},i),r)};VK.propTypes={className:EP.default.string,"aria-label":EP.default.string,"data-test-subj":EP.default.string,css:EP.default.any,bodyRef:EP.default.any};var Zan=T(z()),S$=T(it());var yor=["children","className"];function G1e(){return G1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wor(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}var $K=function(t){var r=t.children,n=t.className,o=bor(t,yor);return l("tfoot",G1e({className:n},o),l("tr",null,r))};$K.propTypes={className:S$.default.string,"aria-label":S$.default.string,"data-test-subj":S$.default.string,css:S$.default.any};var dsn=T(z()),iy=T(it()),KCe=T(At());function I$(e){"@babel/helpers - typeof";return I$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},I$(e)}var Oor=["width"];function $Ce(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 ZCe(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Eor(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}var Por="Two `width` properties were provided. Provide only one of `style.width` or `width` to avoid conflicts.",T3=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0,n=t.width,o=Ior(t,Oor),i=r;return i!=null&&(typeof i=="number"||!isNaN(Number(i)))&&(i="".concat(i,"px")),n&&i&&console.warn(Por),ZCe(ZCe({},o),{},{width:i||n})};var UCe=T(z()),Bh=T(it()),GCe=T(At());var kor={name:"1t1ptlc-mobile",styles:"flex-direction:column;padding:0;label:mobile;"},jor={name:"o9tdjd-desktop",styles:"flex-wrap:wrap;label:desktop;"},Tor={name:"1x3x3jh-center",styles:"justify-content:center;text-align:center;label:center;"},Cor={name:"1vsid2d-euiTableCellContent",styles:"display:flex;align-items:center;label:euiTableCellContent;"},qCe=function(t){var r=t.euiTheme;return{euiTableCellContent:Cor,left:null,right:Q("justify-content:flex-end;",Tn("right"),";;label:right;"),center:Tor,truncateText:Q(Zs(),".euiTableCellContent__text{overflow:hidden;text-overflow:ellipsis;};label:truncateText;"),wrapText:Q(K0(),";;label:wrapText;"),hasActions:{actions:Q("gap:",r.size.s,";;label:actions;"),desktop:jor,mobile:kor}}};var Mor=["children","className","align","textOnly","truncateText","hasActions"];function J1e(){return J1e=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Bor(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}var C3=function(t){var r=t.children,n=t.className,o=t.align,i=o===void 0?lc:o,c=t.textOnly,d=t.truncateText,h=d===void 0?!1:d,v=t.hasActions,w=For(t,Mor),_=p1(),I=mt(qCe),R=[I.euiTableCellContent,I[i],h===!0&&I.truncateText,h===!1&&I.wrapText].concat(Aor(v?[I.hasActions.actions,!_&&I.hasActions.desktop,_&&v!=="custom"&&I.hasActions.mobile]:[])),D=(0,GCe.default)("euiTableCellContent",n),F=(0,UCe.useMemo)(function(){var A="euiTableCellContent__text";return a_e(h)&&h.lines?l(fK,{lines:h.lines,cloneElement:!0},l("span",{className:A},r)):c===!0||h===!0?l("span",{className:A},r):r},[r,c,h]);return l("div",J1e({css:R,className:D},w),F)};C3.propTypes={className:Bh.default.string,"aria-label":Bh.default.string,"data-test-subj":Bh.default.string,css:Bh.default.any,truncateText:Bh.default.oneOfType([Bh.default.oneOfType([Bh.default.bool.isRequired,Bh.default.shape({lines:Bh.default.number.isRequired}).isRequired]).isRequired,Bh.default.oneOf([null])])};function E$(e){"@babel/helpers - typeof";return E$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},E$(e)}function JCe(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 XCe(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r1&&arguments[1]!==void 0?arguments[1]:!0,n=t.searchableLabel||t.label;return r?n.trim().toLowerCase():n},vnr=function(t,r){var n=t.toLowerCase();return r.find(function(o){return C1e(o)===n})},gnr=function(t){var r=t.selectedOptions,n=t.isPreFiltered,o=t.option,i=t.accumulator,c=t.searchValue,d=t.normalizedSearchValue,h=t.optionMatcher;if(r){var v=vnr(C1e(o,!1),r);if(v)return!1}if(n){i.push(o);return}if(!d){i.push(o);return}var w=h({option:o,searchValue:c,normalizedSearchValue:d});w&&i.push(o)},xP=function(t){var r=t.searchValue,n=t.options,o=t.isPreFiltered,i=t.selectedOptions,c=i===void 0?[]:i,d=t.optionMatcher,h=r.toLowerCase(),v=[];return n.forEach(function(w){gnr({accumulator:v,option:w,searchValue:r,normalizedSearchValue:h,isPreFiltered:o,selectedOptions:c,optionMatcher:d})}),v},xCe=function(){return function(t){var r=t.option,n=t.normalizedSearchValue,o=C1e(r);return o.includes(n)}};var ynr=["onChange","options","value","placeholder","isPreFiltered","listId","className","optionMatcher"];function M1e(){return M1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wnr(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}var A1e=function(t){var r=t.onChange,n=t.options,o=t.value,i=t.placeholder,c=t.isPreFiltered,d=t.listId,h=t.className,v=t.optionMatcher,w=bnr(t,ynr),_=(0,_Ce.useCallback)(function(D){var F=D.target.value,A=xP({options:n,searchValue:F,isPreFiltered:c,optionMatcher:v});r(F,A)},[n,c,r,v]),I=(0,SCe.default)("euiSelectableSearch",h),R=d?{role:"combobox","aria-autocomplete":"list","aria-expanded":!0,"aria-controls":d,"aria-owns":d}:void 0;return l(y0e,M1e({className:I,placeholder:i,value:o,onChange:_,incremental:!0,fullWidth:!0,autoComplete:"off","aria-haspopup":"listbox"},R,w))};var Sin=T(z()),_P=T(it()),ECe=T(At());var ICe=function(t){var r=t.euiTheme;return{euiSelectableMessage:Q("display:flex;flex-direction:column;justify-content:center;align-items:center;padding:",r.size.s,";text-align:center;word-wrap:break-word;;label:euiSelectableMessage;"),bordered:Q("overflow:hidden;border:",r.border.thin,";border-radius:",r.border.radius.medium,";;label:bordered;")}};var Onr=["children","className","bordered"];function R1e(){return R1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function _nr(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}var NK=function(t){var r=t.children,n=t.className,o=t.bordered,i=o===void 0?!1:o,c=xnr(t,Onr),d=(0,ECe.default)("euiSelectableMessage",n),h=vt(ICe),v=[h.euiSelectableMessage,i&&h.bordered];return l(Xt,R1e({color:"subdued",size:"xs",css:v,className:d},c),r)};NK.propTypes={className:_P.default.string,"aria-label":_P.default.string,"data-test-subj":_P.default.string,css:_P.default.any,bordered:_P.default.bool};var t_=T(z()),rt=T(it()),z1e=T(At());var FK=T(At()),Yr=T(it()),hu=T(z());var D1e=function(t){var r=t.euiTheme,n=_n(r.border.color,.4);return{border:"".concat(r.border.width.thin," solid ").concat(n),paddingHorizontal:r.size.m,paddingVertical:r.size.xs}},Snr={name:"1rnenrt-euiSelectableListItem__text",styles:"flex-grow:1;label:euiSelectableListItem__text;"},PCe=function(t){var r=t.euiTheme,n=D1e(t),o=n.border,i=n.paddingHorizontal,c=n.paddingVertical;return{euiSelectableListItem:Q("display:inline-flex;",pe("width","100%")," line-height:",yr(t,"m").lineHeight,";font-size:",yr(t,"s").fontSize,";text-align:start;cursor:pointer;overflow:hidden;&:not(:last-of-type){",pe("border-bottom",o),";}&[aria-disabled='true']{color:",r.colors.disabledText,";cursor:not-allowed;}&:hover,&.euiSelectableListItem-isFocused{&:not([aria-disabled='true']){color:",r.colors.primaryText,";background-color:",r.focus.backgroundColor,";.euiSelectableListItem__text{text-decoration:underline;}}};label:euiSelectableListItem;"),padding:{none:Q(";label:none;"),s:Q(pe("padding-vertical",c)," ",pe("padding-horizontal",i),";;label:s;")},euiSelectableListItem__content:Q(pe("width","100%")," display:flex;align-items:center;;label:euiSelectableListItem__content;"),euiSelectableListItem__text:Snr,textWrap:{truncate:Q(Zs(),";label:truncate;"),wrap:Q(";label:wrap;")},euiSelectableListItem__prepend:Q("flex-shrink:0;",pe("margin-right",i),";;label:euiSelectableListItem__prepend;"),euiSelectableListItem__append:Q("flex-shrink:0;",pe("margin-left",i),";;label:euiSelectableListItem__append;"),get euiSelectableListItem__icon(){return this.euiSelectableListItem__prepend}}};var Inr=["children","className","disabled","checked","isFocused","showIcons","prepend","append","allowExclusions","onFocusBadge","paddingSize","role","searchable","textWrap","toolTipContent","toolTipProps","aria-describedby"],Enr=["children","className"];function kCe(e,t){return Tnr(e)||jnr(e,t)||knr(e,t)||Pnr()}function Pnr(){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 knr(e,t){if(e){if(typeof e=="string")return jCe(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)?jCe(e,t):void 0}}function jCe(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Cnr(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 Mnr(e){switch(e){case"on":return{icon:"check",color:"text"};case"off":return{icon:"cross",color:"text"};case"mixed":return{icon:"minus",color:"text"};case void 0:default:return{icon:"empty"}}}var L1e=function(t){var r=t.children,n=t.className,o=t.disabled,i=t.checked,c=t.isFocused,d=t.showIcons,h=d===void 0?!0:d,v=t.prepend,w=t.append,_=t.allowExclusions,I=t.onFocusBadge,R=I===void 0?!0:I,D=t.paddingSize,F=D===void 0?"s":D,A=t.role,N=A===void 0?"option":A,H=t.searchable,q=t.textWrap,Y=q===void 0?"truncate":q,ee=t.toolTipContent,ne=t.toolTipProps,te=t["aria-describedby"],de=TCe(t,Inr),fe=(0,FK.default)("euiSelectableListItem",{"euiSelectableListItem-isFocused":c},n),ye=vt(PCe),Ie=[ye.euiSelectableListItem,ye.padding[F]],ve=[ye.euiSelectableListItem__text,ye.textWrap[Y]],Oe=(0,hu.useMemo)(function(){if(h){var Rt=Mnr(i),Ut=Rt.icon,vr=Rt.color;return l(mr,{css:ye.euiSelectableListItem__icon,className:"euiSelectableListItem__icon",color:vr,type:Ut})}},[h,i,ye]),be=(0,hu.useMemo)(function(){if(v)return l("span",{css:ye.euiSelectableListItem__prepend,className:"euiSelectableListItem__prepend"},v)},[v,ye]),Te=(0,hu.useMemo)(function(){var Rt={"aria-hidden":!0,iconType:"returnKey",iconSide:"left",color:"hollow"};if(R===!0)return l(Il,SP({className:"euiSelectableListItem__onFocusBadge"},Rt));if(typeof R!="boolean"&&R){var Ut=R.children,vr=R.className,Sr=TCe(R,Enr);return l(Il,SP({className:(0,FK.default)("euiSelectableListItem__onFocusBadge",vr)},Rt,Sr),Ut)}},[R]),Pe=!!(c&&!o&&Te),Re=(0,hu.useMemo)(function(){if(w||Pe)return l("span",{css:ye.euiSelectableListItem__append,className:"euiSelectableListItem__append"},w," ",Pe?Te:null)},[w,Pe,Te,ye]),Ae=(0,hu.useMemo)(function(){var Rt,Ut,vr={checked:{state:l(Zt,{token:"euiSelectableListItem.checkedOption",default:"Checked option."}),instructions:l(Zt,{token:"euiSelectableListItem.checkOptionInstructions",default:"To check this option, press Enter."})},unchecked:{instructions:l(Zt,{token:"euiSelectableListItem.uncheckOptionInstructions",default:"To uncheck this option, press Enter."})},excluded:{state:l(Zt,{token:"euiSelectableListItem.excludedOption",default:"Excluded option."}),instructions:l(Zt,{token:"euiSelectableListItem.excludeOptionInstructions",default:"To exclude this option, press Enter."})},mixed:{state:l(Zt,{token:"euiSelectableListItem.mixedOption",default:"Mixed (indeterminate) option."}),instructions:l(Zt,{token:"euiSelectableListItem.mixedOptionInstructions",default:"To check this option for all, press Enter once."}),uncheckInstructions:l(Zt,{token:"euiSelectableListItem.mixedOptionUncheckInstructions",default:"To uncheck this option for all, press Enter twice."}),excludeInstructions:l(Zt,{token:"euiSelectableListItem.mixedOptionExcludeInstructions",default:"To exclude this option for all, press Enter twice."})}};switch(i){case"on":Rt=vr.checked.state,Ut=_?vr.excluded.instructions:H?vr.unchecked.instructions:void 0;break;case"off":Rt=vr.excluded.state,Ut=vr.unchecked.instructions;break;case"mixed":Rt=vr.mixed.state,Ut=l(hu.default.Fragment,null,vr.mixed.instructions," ",_?vr.mixed.excludeInstructions:vr.mixed.uncheckInstructions);break;case void 0:default:Ut=_||H?vr.checked.instructions:void 0;break}return Rt||Ut?l(ko,null,l("div",null,Rt||Ut?". ":null,Rt,Rt&&Ut?" ":null,Ut)):null},[i,H,_]),Ve=(0,hu.useMemo)(function(){var Rt=["option","checkbox","menuitemcheckbox"],Ut=[].concat(Rt,["radio","menuitemradio","switch"]);if(Ut.includes(N))switch(i){case"on":case"off":return!0;case"mixed":return Rt.includes(N)?"mixed":!1;default:return!1}},[N,i]),Je=!!ee&&!o,pt=(0,hu.useState)(null),Qe=kCe(pt,2),Fe=Qe[0],Nt=Qe[1],Vt=(0,hu.useState)(te),Ke=kCe(Vt,2),st=Ke[0],Tt=Ke[1];(0,hu.useEffect)(function(){Fe&&(c?Fe.showToolTip():Fe.hideToolTip())},[c,Fe]),(0,hu.useEffect)(function(){if(Fe){var Rt=Fe.state.id;Tt((0,FK.default)(Rt,te))}},[Fe,te]);var wr=l("span",{css:ye.euiSelectableListItem__content,className:"euiSelectableListItem__content"},Oe,be,l("span",{css:ve,className:"euiSelectableListItem__text"},r,Ae),Re);return l("li",SP({role:N,"aria-disabled":o,"aria-checked":Ve,"aria-selected":!o&&c,css:Ie,className:fe},de,{"aria-describedby":st}),Je?l(ps,SP({ref:Nt,content:ee,anchorClassName:"eui-fullWidth",position:"left"},ne),wr):wr)};L1e.propTypes={className:Yr.default.string,"aria-label":Yr.default.string,"data-test-subj":Yr.default.string,css:Yr.default.any,children:Yr.default.node,checked:Yr.default.any,showIcons:Yr.default.bool,isFocused:Yr.default.bool,disabled:Yr.default.bool,prepend:Yr.default.node,append:Yr.default.node,allowExclusions:Yr.default.bool,onFocusBadge:Yr.default.oneOfType([Yr.default.bool.isRequired,Yr.default.shape({iconType:Yr.default.oneOfType([Yr.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,Yr.default.string.isRequired,Yr.default.elementType.isRequired]),iconSide:Yr.default.any,color:Yr.default.oneOfType([Yr.default.any.isRequired,Yr.default.string.isRequired]),isDisabled:Yr.default.bool,closeButtonProps:Yr.default.any,className:Yr.default.string,"aria-label":Yr.default.string,"data-test-subj":Yr.default.string,css:Yr.default.any,iconOnClick:Yr.default.func,iconOnClickAriaLabel:Yr.default.any,onClick:Yr.default.func,onClickAriaLabel:Yr.default.any,href:Yr.default.string,target:Yr.default.string,rel:Yr.default.string}).isRequired]),paddingSize:Yr.default.any,searchable:Yr.default.bool,role:Yr.default.any,textWrap:Yr.default.oneOf(["truncate","wrap"]),toolTipContent:Yr.default.node,toolTipProps:Yr.default.any};var Anr={name:"1giu8j5-fullHeight",styles:"flex-grow:1;label:fullHeight;"},N1e=function(t){var r=t.euiTheme,n=D1e(t);return{euiSelectableList:Q("&:has(:focus-visible){",uu(t,"outset"),";};label:euiSelectableList;"),fullHeight:Anr,bordered:Q("overflow:hidden;border:",r.border.thin,";border-radius:",r.border.radius.medium,";;label:bordered;"),euiSelectableList__list:rP(KG(t)," &:focus,&>ul:focus{outline:none;};label:euiSelectableList__list;"),euiSelectableList__groupLabel:Q(To(t,"xxxs")," display:flex;align-items:center;",pe("border-bottom",n.border)," ",pe("padding-vertical",n.paddingVertical)," ",pe("padding-horizontal",n.paddingHorizontal),";;label:euiSelectableList__groupLabel;")}};var Rnr=["data"],Dnr=["label","isGroupLabel","checked","disabled","prepend","append","ref","key","searchableLabel","data","truncationProps"],Lnr=["className","options","searchValue","onOptionClick","renderOption","height","windowProps","rowHeight","activeOptionIndex","makeOptionId","showIcons","singleSelection","visibleOptions","allowExclusions","bordered","paddingSize","searchable","onFocusBadge","listId","setActiveOptionIndex","aria-label","aria-labelledby","aria-describedby","role","isPreFiltered","isVirtualized","textWrap","truncationProps"];function CCe(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 fs(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Nnr(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 Fnr(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function MCe(e,t){for(var r=0;rA;H?F=(A-.5)*I:F=N*I}return R?l(Uhe,{onResize:n.calculateDefaultOptionWidth},function(q){var Y=q.width,ee=q.height;return l(c$,iy({width:Y,height:ee},D),n.ListRow)}):l(Uhe,{disableHeight:!0,onResize:n.calculateDefaultOptionWidth},function(q){var Y=q.width;return l(c$,iy({width:Y,height:F},D),n.ListRow)})}),Ai(n,"forceVirtualizedListRowRerender",function(){n.setState({itemData:fs({},n.state.optionArray)})}),Ai(n,"focusBadgeOffset",0),Ai(n,"calculateDefaultOptionWidth",function(i){var c=i.width,d=n.props,h=d.truncationProps,v=d.searchable,w=d.searchValue,_=v||h;if(_){var I=n.props.paddingSize==="none"?0:24,R=n.props.showIcons===!1?0:28;n.focusBadgeOffset=n.props.onFocusBadge===!1?0:46,n.animationFrameId=requestAnimationFrame(function(){var D=n.listBoxRef?c-n.listBoxRef.offsetWidth:0;n.setState({defaultOptionWidth:c-D-I-R}),(h||v&&w)&&n.forceVirtualizedListRowRerender()})}}),Ai(n,"getTruncationProps",function(i,c,d){var h=fs(fs({},n.props.truncationProps),i.truncationProps),v=c||Object.keys(h).length>0;if(v){var w=n.state.defaultOptionWidth,_=!i.append&&!i.prepend,I=_&&w?d?w-n.focusBadgeOffset:w:void 0;return fs({width:I},h)}}),Ai(n,"renderSearchedText",function(i,c){var d=n.props.searchValue;if(!c)return l(u1,{search:d},i);var h=i.toLowerCase().indexOf(d.toLowerCase()),v=h+Math.floor(d.length/2);return l(E3,iy({},c,{truncation:"startEnd",truncationPosition:v,text:i}),function(w){return l(t_.default.Fragment,null,w.length>=d.length?l(u1,{search:d},w):l(x3,null,w))})}),Ai(n,"renderTruncatedText",function(i,c){return l(E3,iy({calculationDelayMs:2},c,{text:i}),function(d){return d})}),Ai(n,"onAddOrRemoveOption",function(i,c){if(!i.disabled){var d=n.props,h=d.allowExclusions,v=d.options,w=d.visibleOptions,_=w===void 0?v:w;n.props.setActiveOptionIndex(_.findIndex(function(I){var R=I.label;return R===i.label}),function(){i.checked==="on"&&h?n.onExcludeOption(i,c):i.checked==="on"||i.checked==="off"?n.onRemoveOption(i,c):n.onAddOption(i,c)})}}),Ai(n,"onAddOption",function(i,c){var d=n.props,h=d.onOptionClick,v=d.options,w=d.singleSelection,_=fs({},i),I=v.map(function(R){var D=fs({},R);return w&&delete D.checked,R===i&&(D.checked="on",_=D),D});h(I,c,_)}),Ai(n,"onRemoveOption",function(i,c){var d=n.props,h=d.onOptionClick,v=d.singleSelection,w=d.options,_=fs({},i),I=w.map(function(R){var D=fs({},R);return R===i&&v!=="always"&&(delete D.checked,_=D),D});h(I,c,_)}),Ai(n,"onExcludeOption",function(i,c){var d=n.props,h=d.onOptionClick,v=d.options,w=fs({},i),_=v.map(function(I){var R=fs({},I);return I===i&&(R.checked="off",w=R),R});h(_,c,w)});var o=r.visibleOptions||r.options;return n.state=fs({defaultOptionWidth:0,optionArray:o,itemData:fs({},o)},n.calculateAriaSetAttrs(o)),n}return Vnr(t,e),Bnr(t,[{key:"componentWillUnmount",value:function(){this.animationFrameId!==void 0&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=void 0)}},{key:"shouldComponentUpdate",value:function(n){var o=this.props,i=o.allowExclusions,c=o.showIcons,d=o.paddingSize,h=o.textWrap,v=o.onFocusBadge,w=o.searchable;return(n.allowExclusions!==i||n.showIcons!==c||n.paddingSize!==d||n.textWrap!==h||n.onFocusBadge!==v||n.searchable!==w)&&(this.listRowRerender+=1),!0}},{key:"componentDidUpdate",value:function(n){var o=this.props,i=o.isVirtualized,c=o.activeOptionIndex,d=o.visibleOptions,h=o.options,v=o.allowExclusions,w=o.showIcons,_=o.paddingSize,I=o.textWrap,R=o.onFocusBadge,D=o.searchable;if(n.activeOptionIndex!==c){var F=this.props.makeOptionId;if(this.listBoxRef&&this.props.searchable!==!0&&this.listBoxRef.setAttribute("aria-activedescendant",F(c)),typeof c<"u")if(i){var A;(A=this.listRef)===null||A===void 0||A.scrollToItem(c,"auto")}else{var N,H="#".concat(F(c)),q=(N=this.listBoxRef)===null||N===void 0?void 0:N.querySelector(H);if(q){var Y;(Y=q.scrollIntoView)===null||Y===void 0||Y.call(q,{block:"nearest"})}}}var ee=d||h;n.visibleOptions!==d||n.options!==h?this.setState(fs({optionArray:ee,itemData:fs({},ee)},this.calculateAriaSetAttrs(ee))):i&&(n.allowExclusions!==v||n.showIcons!==w||n.paddingSize!==_||n.textWrap!==I||n.onFocusBadge!==R||n.searchable!==D)&&this.setState({itemData:fs({},ee)})}},{key:"render",value:function(){var n=this,o=this.props,i=o.className,c=o.options,d=o.searchValue,h=o.onOptionClick,v=o.renderOption,w=o.height,_=o.windowProps,I=o.rowHeight,R=o.activeOptionIndex,D=o.makeOptionId,F=o.showIcons,A=o.singleSelection,N=o.visibleOptions,H=o.allowExclusions,q=o.bordered,Y=o.paddingSize,ee=o.searchable,ne=o.onFocusBadge,te=o.listId,de=o.setActiveOptionIndex,fe=o["aria-label"],ye=o["aria-labelledby"],Ie=o["aria-describedby"],ve=o.role,Oe=o.isPreFiltered,be=o.isVirtualized,Te=o.textWrap,Pe=o.truncationProps,Re=F1e(o,Lnr),Ae=w==="full",Ve=(0,z1e.default)("euiSelectableList",i);return l(J0,null,function(Je){var pt=Je(N1e),Qe=[pt.euiSelectableList,Ae&&pt.fullHeight,q&&pt.bordered],Fe=(0,z1e.default)("euiSelectableList__list",pt.euiSelectableList__list);return l("div",iy({css:Qe,className:Ve},Re),be?n.renderVirtualizedList(Fe):l("div",{className:Fe,style:Ae?void 0:{blockSize:w},ref:n.removeScrollableTabStop},l("ul",{ref:n.setListBoxRef},n.state.optionArray.map(function(Nt,Vt){return t_.default.createElement(n.ListRow,{key:"".concat(Vt,"-").concat(n.listRowRerender),data:n.state.optionArray,index:Vt},null)}))))})}}])}(t_.Component);Ai(_$,"defaultProps",{rowHeight:32,searchValue:"",isVirtualized:!0});_$.propTypes={className:rt.default.string,"aria-label":rt.default.string,"data-test-subj":rt.default.string,css:rt.default.any,activeOptionIndex:rt.default.number,showIcons:rt.default.bool,singleSelection:rt.default.oneOfType([rt.default.oneOf(["always"]),rt.default.bool.isRequired]),windowProps:rt.default.any,bordered:rt.default.bool,onFocusBadge:rt.default.oneOfType([rt.default.bool.isRequired,rt.default.shape({iconType:rt.default.oneOfType([rt.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,rt.default.string.isRequired,rt.default.elementType.isRequired]),iconSide:rt.default.any,color:rt.default.oneOfType([rt.default.any.isRequired,rt.default.string.isRequired]),isDisabled:rt.default.bool,closeButtonProps:rt.default.any,className:rt.default.string,"aria-label":rt.default.string,"data-test-subj":rt.default.string,css:rt.default.any,iconOnClick:rt.default.func,iconOnClickAriaLabel:rt.default.any,onClick:rt.default.func,onClickAriaLabel:rt.default.any,href:rt.default.string,target:rt.default.string,rel:rt.default.string}).isRequired]),paddingSize:rt.default.any,textWrap:rt.default.oneOf(["truncate","wrap"]),truncationProps:rt.default.any,isVirtualized:rt.default.oneOfType([rt.default.oneOf([!0]),rt.default.oneOf([!1]).isRequired]),rowHeight:rt.default.number,options:rt.default.arrayOf(rt.default.shape({isGroupLabel:rt.default.oneOfType([rt.default.oneOf([!0]).isRequired,rt.default.oneOf([!1])]),className:rt.default.string,"aria-label":rt.default.string,"data-test-subj":rt.default.string,css:rt.default.any,label:rt.default.string,searchableLabel:rt.default.string,key:rt.default.string,checked:rt.default.any,disabled:rt.default.bool,prepend:rt.default.node,append:rt.default.node,ref:rt.default.func,data:rt.default.shape({}),textWrap:rt.default.oneOf(["truncate","wrap"]),truncationProps:rt.default.any,toolTipContent:rt.default.node,toolTipProps:rt.default.any}).isRequired).isRequired,visibleOptions:rt.default.arrayOf(rt.default.shape({isGroupLabel:rt.default.oneOfType([rt.default.oneOf([!0]).isRequired,rt.default.oneOf([!1])]),className:rt.default.string,"aria-label":rt.default.string,"data-test-subj":rt.default.string,css:rt.default.any,label:rt.default.string,searchableLabel:rt.default.string,key:rt.default.string,checked:rt.default.any,disabled:rt.default.bool,prepend:rt.default.node,append:rt.default.node,ref:rt.default.func,data:rt.default.shape({}),textWrap:rt.default.oneOf(["truncate","wrap"]),truncationProps:rt.default.any,toolTipContent:rt.default.node,toolTipProps:rt.default.any}).isRequired),searchValue:rt.default.string.isRequired,onOptionClick:rt.default.func.isRequired,renderOption:rt.default.func,height:rt.default.oneOfType([rt.default.number.isRequired,rt.default.oneOf(["full"])]),allowExclusions:rt.default.bool,searchable:rt.default.bool,isPreFiltered:rt.default.oneOfType([rt.default.bool.isRequired,rt.default.shape({highlightSearch:rt.default.bool}).isRequired]),makeOptionId:rt.default.func.isRequired,listId:rt.default.string.isRequired,setActiveOptionIndex:rt.default.func.isRequired};var W1e={euiSelectable:{name:"1sd0qv-euiSelectable",styles:"display:flex;flex-direction:column;label:euiSelectable;"},fullHeight:Q(pe("height","100%"),";;label:fullHeight;")};var Znr=["children","className","options","onChange","onActiveOptionChange","searchable","searchProps","singleSelection","isLoading","listProps","renderOption","height","allowExclusions","aria-label","aria-describedby","loadingMessage","noMatchesMessage","emptyMessage","errorMessage","selectableScreenReaderText","isPreFiltered","optionMatcher"],qnr=["aria-label","aria-describedby","onChange","defaultValue","inputRef"],Unr=["aria-label","aria-describedby","isVirtualized","rowHeight"];function IP(e){"@babel/helpers - typeof";return IP=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},IP(e)}function S$(){return S$=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Qnr(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 eor(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function NCe(e,t){for(var r=0;r-1?o.setState({activeOptionIndex:D,isFocused:!0}):o.setState({activeOptionIndex:o.state.visibleOptions.findIndex(function(F){return!F.disabled&&!F.isGroupLabel}),isFocused:!0})}}),Va(o,"onKeyDown",function(R){var D=o.optionsListRef.current;if(!o.isFocusOnSearchOrListBox(R.target)){o.setState({activeOptionIndex:void 0,isFocused:!1});return}switch(R.key){case cn.ARROW_UP:R.preventDefault(),R.stopPropagation(),o.incrementActiveOptionIndex(-1);break;case cn.ARROW_DOWN:R.preventDefault(),R.stopPropagation(),o.incrementActiveOptionIndex(1);break;case cn.ENTER:case cn.SPACE:if(o.props.searchable&&R.target===o.inputRef&&R.key===cn.SPACE)return;R.preventDefault(),R.stopPropagation(),o.state.activeOptionIndex!=null&&D&&(R.persist(),D.onAddOrRemoveOption(o.state.visibleOptions[o.state.activeOptionIndex],R));break;case cn.ALT:case cn.SHIFT:case cn.CTRL:case cn.META:break;default:o.setState({activeOptionIndex:void 0},o.onFocus);break}}),Va(o,"incrementActiveOptionIndex",function(R){o.state.visibleOptions.length&&o.setState(function(D){var F=D.activeOptionIndex,A=D.visibleOptions,N;F==null?N=R<0?A.length-1:0:(N=F+R,N<0?N=A.length-1:N===A.length&&(N=0));for(var H=R>0?1:-1;A[N].isGroupLabel||A[N].disabled;)N=N+H,N<0?N=A.length-1:N===A.length&&(N=0);return{activeOptionIndex:N}})}),Va(o,"onSearchChange",function(R,D){var F,A;o.setState({searchValue:R,visibleOptions:D,activeOptionIndex:void 0},function(){o.state.isFocused&&o.onFocus()}),(F=o.props.searchProps)===null||F===void 0||(A=F.onChange)===null||A===void 0||A.call(F,R,D)}),Va(o,"onContainerBlur",function(R){o.isFocusOnSearchOrListBox(R.relatedTarget)||o.setState({activeOptionIndex:void 0,isFocused:!1})}),Va(o,"onOptionClick",function(R,D,F){var A=o.props,N=A.isPreFiltered,H=A.onChange,q=A.optionMatcher,Y=o.state.searchValue,ee=xP({options:R,searchValue:Y??"",isPreFiltered:!!N,selectedOptions:[],optionMatcher:q});o.setState({visibleOptions:ee}),H&&H(R,D,F)}),Va(o,"scrollToItem",function(R,D){var F;(F=o.optionsListRef.current)===null||F===void 0||(F=F.listRef)===null||F===void 0||F.scrollToItem(R,D)}),Va(o,"makeOptionId",function(R){return R!=null?"".concat(o.listId,"_option-").concat(R):""}),o.rootId=r.id?function(R){return"".concat(r.id).concat(R?"_".concat(R):"")}:fn(),o.listId=o.rootId("listbox"),o.messageContentId=o.rootId("messageContent");var i=r.options,c=r.singleSelection,d=r.isPreFiltered,h=r.searchProps,v=h?.value||String(h?.defaultValue||""),w=xP({options:i,searchValue:v,isPreFiltered:!!d,selectedOptions:[],optionMatcher:r.optionMatcher});h==null||(n=h.onChange)===null||n===void 0||n.call(h,v,w);var _=i.filter(function(R){return R.checked}),I;return c&&_.length===1&&w.includes(_[0])&&(I=w.indexOf(_[0])),o.state={activeOptionIndex:I,searchValue:v,visibleOptions:w,isFocused:!1},o}return ior(t,e),tor(t,[{key:"componentDidUpdate",value:function(n,o){if(o.activeOptionIndex!==this.state.activeOptionIndex){var i,c,d=this.state.activeOptionIndex!=null?this.state.visibleOptions[this.state.activeOptionIndex]:null;(i=(c=this.props).onActiveOptionChange)===null||i===void 0||i.call(c,d)}}},{key:"render",value:function(){var n=this,o=this.props,i=o.children,c=o.className,d=o.options,h=o.onChange,v=o.onActiveOptionChange,w=o.searchable,_=o.searchProps,I=o.singleSelection,R=o.isLoading,D=o.listProps,F=o.renderOption,A=o.height,N=o.allowExclusions,H=o["aria-label"],q=o["aria-describedby"],Y=o.loadingMessage,ee=o.noMatchesMessage,ne=o.emptyMessage,te=o.errorMessage,de=o.selectableScreenReaderText,fe=o.isPreFiltered,ye=o.optionMatcher,Ie=V1e(o,Znr),ve=this.state,Oe=ve.searchValue,be=ve.visibleOptions,Te=ve.activeOptionIndex,Pe={"aria-label":void 0,"aria-describedby":void 0},Re=_||Pe,Ae=Re["aria-label"],Ve=Re["aria-describedby"],Je=Re.onChange,pt=Re.defaultValue,Qe=Re.inputRef,Fe=V1e(Re,qnr),Nt=D||Pe,Vt=Nt["aria-label"],Ke=Nt["aria-describedby"],st=Nt.isVirtualized,Tt=Nt.rowHeight,wr=V1e(Nt,Unr),Rt;st===!1?Rt={isVirtualized:st}:Tt!=null&&(Rt={rowHeight:Tt});var Ut=(0,zCe.default)("euiSelectable",c),vr=[W1e.euiSelectable,A==="full"&&W1e.fullHeight],Sr;te!=null?Sr=typeof te=="string"?l("p",null,te):te:R?Y===void 0||typeof Y=="string"?Sr=l(Jd.default.Fragment,null,l(_r,{size:"m"}),l(Oo,{size:"xs"}),l("p",null,Y||l(Zt,{token:"euiSelectable.loadingOptions",default:"Loading options"}))):Sr=Jd.default.cloneElement(Y,H1e({id:this.messageContentId},Y.props)):Oe&&be.length===0?ee===void 0||typeof ee=="string"?Sr=l("p",null,ee||l(Zt,{token:"euiSelectable.noMatchingOptions",default:"{searchValue} doesn't match any options",values:{searchValue:l("strong",null,Oe)}})):Sr=Jd.default.cloneElement(ee,H1e({id:this.messageContentId},ee.props)):d.length||(ne===void 0||typeof ne=="string"?Sr=l("p",null,ne||l(Zt,{token:"euiSelectable.noAvailableOptions",default:"No options available"})):Sr=Jd.default.cloneElement(ne,H1e({id:this.messageContentId},ne.props)));var Er=function(or,ir){if(or&&or["aria-label"])return{"aria-label":or["aria-label"]};var Mr=ir?" ".concat(ir):"";return or&&or["aria-describedby"]?{"aria-describedby":"".concat(or["aria-describedby"]).concat(Mr)}:H?{"aria-label":H}:q?{"aria-describedby":"".concat(q).concat(Mr)}:{}},po=Er(_,this.messageContentId),Pn=!!Object.keys(po).length,Nr=w?l(Zt,{tokens:["euiSelectable.screenReaderInstructions","euiSelectable.placeholderName"],defaults:["Use the Up and Down arrow keys to move focus over options. Press Enter to select. Press Escape to collapse options.","Filter options"]},function(Pr){var or=Gnr(Pr,2),ir=or[0],Mr=or[1];return l(Jd.default.Fragment,null,l(A1e,S$({"aria-describedby":St,key:"listSearch",options:d,value:Oe,onChange:n.onSearchChange,listId:n.optionsListRef.current?n.listId:void 0,"aria-activedescendant":n.makeOptionId(Te),placeholder:Mr,isPreFiltered:!!fe,optionMatcher:ye,inputRef:function(ms){var Nn;n.inputRef=ms,_==null||(Nn=_.inputRef)===null||Nn===void 0||Nn.call(_,ms)}},Pn?po:{"aria-label":Mr},Fe)),l(ko,null,l("p",{id:St},de," ",ir)))}):void 0,Wo=be.filter(function(Pr){return!Pr.disabled}).length,Cr=w&&l(Zt,{token:"euiSelectable.searchResults",default:function(or){var ir=or.resultsLength;return"".concat(ir," result").concat(ir===1?"":"s"," available")},values:{resultsLength:Wo}}),St=this.rootId("instructions"),tn=Er(D,St),Ks=!!Object.keys(tn).length,hs=l(Zt,{token:"euiSelectable.placeholderName",default:"Filter options"},function(Pr){return l(Jd.default.Fragment,null,w&&l(LA,{isActive:Sr!=null||Te!=null},Sr||Cr),Sr?l(NK,{"data-test-subj":"euiSelectableMessage",id:n.messageContentId,bordered:D&&D.bordered},Sr):l(_$,S$({"data-test-subj":"euiSelectableList",key:"list",options:d,visibleOptions:be,searchValue:Oe,isPreFiltered:fe,activeOptionIndex:Te,setActiveOptionIndex:function(ir,Mr){n.setState({activeOptionIndex:ir},Mr)},onOptionClick:n.onOptionClick,singleSelection:I,ref:n.optionsListRef,renderOption:F,height:A,allowExclusions:N,searchable:w,makeOptionId:n.makeOptionId,listId:n.listId},Ks?tn:w&&{"aria-label":Pr},wr,Rt)))});return l("div",S$({ref:this.containerRef,css:vr,className:Ut,onKeyDown:this.onKeyDown,onBlur:this.onContainerBlur,onFocus:this.onFocus,onMouseDown:this.onMouseDown},Ie),i&&i(hs,Nr))}}],[{key:"getDerivedStateFromProps",value:function(n,o){var i,c=n.options,d=n.isPreFiltered,h=n.searchProps,v=n.optionMatcher,w=o.activeOptionIndex,_=o.searchValue,I={searchValue:_,activeOptionIndex:w};return h?.value!=null&&h.value!==_&&(I.searchValue=h.value),I.visibleOptions=xP({options:c,searchValue:(i=I.searchValue)!==null&&i!==void 0?i:"",isPreFiltered:!!d,selectedOptions:[],optionMatcher:v}),w!=null&&w>=I.visibleOptions.length&&(I.activeOptionIndex=-1),I}}])}(Jd.Component);Va(j3,"defaultProps",{options:[],singleSelection:!1,searchable:!1,isPreFiltered:!1,optionMatcher:xCe()});j3.propTypes={className:Kt.default.string,"aria-label":Kt.default.string,"data-test-subj":Kt.default.string,css:Kt.default.any,searchable:Kt.default.oneOfType([Kt.default.oneOf([!1]).isRequired,Kt.default.oneOf([!0]).isRequired]).isRequired,searchProps:Kt.default.any,children:Kt.default.func,options:Kt.default.arrayOf(Kt.default.shape({isGroupLabel:Kt.default.oneOfType([Kt.default.oneOf([!0]).isRequired,Kt.default.oneOf([!1])]),className:Kt.default.string,"aria-label":Kt.default.string,"data-test-subj":Kt.default.string,css:Kt.default.any,label:Kt.default.string,searchableLabel:Kt.default.string,key:Kt.default.string,checked:Kt.default.any,disabled:Kt.default.bool,prepend:Kt.default.node,append:Kt.default.node,ref:Kt.default.func,data:Kt.default.shape({}),textWrap:Kt.default.oneOf(["truncate","wrap"]),truncationProps:Kt.default.any,toolTipContent:Kt.default.node,toolTipProps:Kt.default.any}).isRequired).isRequired,onChange:Kt.default.func,onActiveOptionChange:Kt.default.func,singleSelection:Kt.default.oneOfType([Kt.default.oneOf(["always"]),Kt.default.bool.isRequired]),allowExclusions:Kt.default.bool,isLoading:Kt.default.bool,height:Kt.default.oneOfType([Kt.default.number.isRequired,Kt.default.oneOf(["full"])]),listProps:Kt.default.any,renderOption:Kt.default.func,loadingMessage:Kt.default.oneOfType([Kt.default.element.isRequired,Kt.default.string.isRequired]),noMatchesMessage:Kt.default.oneOfType([Kt.default.element.isRequired,Kt.default.string.isRequired]),emptyMessage:Kt.default.oneOfType([Kt.default.element.isRequired,Kt.default.string.isRequired]),errorMessage:Kt.default.oneOfType([Kt.default.element.isRequired,Kt.default.string.isRequired,Kt.default.oneOf([null])]),isPreFiltered:Kt.default.oneOfType([Kt.default.bool.isRequired,Kt.default.shape({highlightSearch:Kt.default.bool}).isRequired]),selectableScreenReaderText:Kt.default.string,optionMatcher:Kt.default.func};var Aan=T(z()),f1=T(it()),VCe=T(At());var WK=T(z());var sor="m",HK=function(t){var r,n,o=(r=PJ().EuiTable)===null||r===void 0?void 0:r.responsiveBreakpoint,i=(n=t??o)!==null&&n!==void 0?n:sor,c=typeof i=="boolean",d=!Kne(c?"":i);return c?i:d},Z1e=(0,WK.createContext)(!1),d1=function(){return(0,WK.useContext)(Z1e)};var r_=function(t){var r=t.euiTheme,n=r.size.s,o=r.size.xs,i={actions:{width:r.size.xxl,offset:pr(n,function(d){return d*2})},checkbox:{width:pr([r.size.xl,r.size.xs],function(d,h){return d+h}),offset:pr(n,function(d){return d/2})}},c=r.size.xl;return{cellContentPadding:n,compressedCellContentPadding:o,mobileSizes:i,checkboxSize:c}},lor={name:"gt2v1c-mobile",styles:"thead{display:none;}tfoot{display:none;};label:mobile;"},uor={name:"18uoljc-auto",styles:"table-layout:auto;label:auto;"},cor={name:"1fm6zfw-fixed",styles:"table-layout:fixed;label:fixed;"},WCe=function(t){var r=t.euiTheme,n=r_(t),o=n.cellContentPadding,i=n.compressedCellContentPadding;return{euiTable:Q(YG(t)," ",pe("width","100%")," border:none;border-collapse:collapse;background-color:",r.colors.emptyShade,";;label:euiTable;"),layout:{fixed:cor,auto:uor},uncompressed:Q("font-size:",yr(t,"s").fontSize,";line-height:",yr(t,"m").lineHeight,";& :where(.euiTableCellContent){padding:",o,";};label:uncompressed;"),compressed:Q(yr(t,"xs"),"& :where(.euiTableCellContent){padding:",i,";};label:compressed;"),desktop:Q(";label:desktop;"),mobile:lor}},HCe={name:"1hnio98-euiTableCaptionStyles",styles:"position:relative!important;label:euiTableCaptionStyles;"};var por=["children","className","compressed","tableLayout","responsiveBreakpoint"];function q1e(){return q1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hor(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}var VK=function(t){var r=t.children,n=t.className,o=t.compressed,i=t.tableLayout,c=i===void 0?"fixed":i,d=t.responsiveBreakpoint,h=dor(t,por),v=HK(d),w=(0,VCe.default)("euiTable",n),_=vt(WCe),I=[_.euiTable,_.layout[c],(!o||v)&&_.uncompressed,o&&!v&&_.compressed,v?_.mobile:_.desktop];return l("table",q1e({tabIndex:-1,css:I,className:w},h),l(Z1e.Provider,{value:v},r))};VK.propTypes={compressed:f1.default.bool,responsiveBreakpoint:f1.default.oneOfType([f1.default.any.isRequired,f1.default.bool.isRequired]),tableLayout:f1.default.oneOf(["fixed","auto"]),className:f1.default.string,"aria-label":f1.default.string,"data-test-subj":f1.default.string,css:f1.default.any};var zan=T(z()),EP=T(it());var mor=["children","className","bodyRef"];function U1e(){return U1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function gor(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}var $K=function(t){var r=t.children,n=t.className,o=t.bodyRef,i=vor(t,mor);return l("tbody",U1e({className:n,ref:o},i),r)};$K.propTypes={className:EP.default.string,"aria-label":EP.default.string,"data-test-subj":EP.default.string,css:EP.default.any,bodyRef:EP.default.any};var $an=T(z()),I$=T(it());var yor=["children","className"];function G1e(){return G1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function wor(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}var ZK=function(t){var r=t.children,n=t.className,o=bor(t,yor);return l("tfoot",G1e({className:n},o),l("tr",null,r))};ZK.propTypes={className:I$.default.string,"aria-label":I$.default.string,"data-test-subj":I$.default.string,css:I$.default.any};var psn=T(z()),ay=T(it()),KCe=T(At());function E$(e){"@babel/helpers - typeof";return E$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},E$(e)}var Oor=["width"];function $Ce(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 ZCe(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Eor(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}var Por="Two `width` properties were provided. Provide only one of `style.width` or `width` to avoid conflicts.",T3=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0,n=t.width,o=Ior(t,Oor),i=r;return i!=null&&(typeof i=="number"||!isNaN(Number(i)))&&(i="".concat(i,"px")),n&&i&&console.warn(Por),ZCe(ZCe({},o),{},{width:i||n})};var UCe=T(z()),Bh=T(it()),GCe=T(At());var kor={name:"1t1ptlc-mobile",styles:"flex-direction:column;padding:0;label:mobile;"},jor={name:"o9tdjd-desktop",styles:"flex-wrap:wrap;label:desktop;"},Tor={name:"1x3x3jh-center",styles:"justify-content:center;text-align:center;label:center;"},Cor={name:"1vsid2d-euiTableCellContent",styles:"display:flex;align-items:center;label:euiTableCellContent;"},qCe=function(t){var r=t.euiTheme;return{euiTableCellContent:Cor,left:null,right:Q("justify-content:flex-end;",Tn("right"),";;label:right;"),center:Tor,truncateText:Q(Zs(),".euiTableCellContent__text{overflow:hidden;text-overflow:ellipsis;};label:truncateText;"),wrapText:Q(Y0(),";;label:wrapText;"),hasActions:{actions:Q("gap:",r.size.s,";;label:actions;"),desktop:jor,mobile:kor}}};var Mor=["children","className","align","textOnly","truncateText","hasActions"];function J1e(){return J1e=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Bor(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}var C3=function(t){var r=t.children,n=t.className,o=t.align,i=o===void 0?lc:o,c=t.textOnly,d=t.truncateText,h=d===void 0?!1:d,v=t.hasActions,w=For(t,Mor),_=d1(),I=vt(qCe),R=[I.euiTableCellContent,I[i],h===!0&&I.truncateText,h===!1&&I.wrapText].concat(Aor(v?[I.hasActions.actions,!_&&I.hasActions.desktop,_&&v!=="custom"&&I.hasActions.mobile]:[])),D=(0,GCe.default)("euiTableCellContent",n),F=(0,UCe.useMemo)(function(){var A="euiTableCellContent__text";return a_e(h)&&h.lines?l(hK,{lines:h.lines,cloneElement:!0},l("span",{className:A},r)):c===!0||h===!0?l("span",{className:A},r):r},[r,c,h]);return l("div",J1e({css:R,className:D},w),F)};C3.propTypes={className:Bh.default.string,"aria-label":Bh.default.string,"data-test-subj":Bh.default.string,css:Bh.default.any,truncateText:Bh.default.oneOfType([Bh.default.oneOfType([Bh.default.bool.isRequired,Bh.default.shape({lines:Bh.default.number.isRequired}).isRequired]).isRequired,Bh.default.oneOf([null])])};function P$(e){"@babel/helpers - typeof";return P$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},P$(e)}function JCe(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 XCe(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Zor(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}var PP=function(t){var r=t.children,n=t.align,o=n===void 0?lc:n,i=t.className,c=t.width,d=t.style,h=$or(t,Vor),v=(0,KCe.default)("euiTableFooterCell",i),w=T3(d,c),_=mt(ZK);return l("td",K1e({css:_.euiTableFooterCell,className:v,style:w},h),l(C3,{align:o,truncateText:!0,textOnly:!0},r))};PP.propTypes={className:iy.default.string,"aria-label":iy.default.string,"data-test-subj":iy.default.string,css:iy.default.any,align:iy.default.any,width:iy.default.oneOfType([iy.default.string.isRequired,iy.default.number.isRequired])};var wsn=T(z()),n_=T(it());var qor=["children","className","wrapWithTableRow"];function Y1e(){return Y1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Gor(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}var UK=function(t){var r=t.children,n=t.className,o=t.wrapWithTableRow,i=o===void 0?!0:o,c=Uor(t,qor);return l("thead",Y1e({className:n},c),i?l("tr",null,r):r)};UK.propTypes={className:n_.default.string,"aria-label":n_.default.string,"data-test-subj":n_.default.string,css:n_.default.any,children:n_.default.node,wrapWithTableRow:n_.default.bool};var Ssn=T(z()),Js=T(it()),eve=T(At());var Jor=["children","align","onSort","isSorted","isSortAscending","className","scope","mobileOptions","width","style","readOnly","description","append"];function Q1e(){return Q1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Kor(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}var YCe=function(t){var r=t.className,n=t.align,o=t.description,i=t.children,c=t.canSort,d=t.isSorted,h=t.isSortAscending;return l(C3,{className:r,align:n,textOnly:!1,truncateText:null},l(Ug,null,function(v,w){return l(Zt,{token:"euiTableHeaderCell.titleTextWithDesc",default:"{innerText}; {description}",values:{innerText:w,description:o}},function(_){return l("span",{title:o?_:w,ref:v,className:"eui-textTruncate"},i)})}),o&&l(ko,null,l("span",null,o)),d?l(mr,{className:"euiTableSortIcon",type:h?"sortUp":"sortDown",size:"m"}):c?l(mr,{className:"euiTableSortIcon euiTableSortIcon--sortable",type:"sortable",size:"m",color:"subdued"}):null)},kP=function(t){var r=t.children,n=t.align,o=n===void 0?lc:n,i=t.onSort,c=t.isSorted,d=t.isSortAscending,h=t.className,v=t.scope,w=t.mobileOptions,_=t.width,I=t.style,R=t.readOnly,D=t.description,F=t.append,A=Xor(t,Jor),N=mt(ZK),H=p1(),q=!H&&w?.only,Y=H&&w?.show===!1;if(q||Y)return null;var ee=(0,eve.default)("euiTableHeaderCell",h),ne=T3(I,_),te=r?"th":"td",de=te==="th"?v??"col":void 0,fe=!!(i&&!R),ye;c?ye=d?"ascending":"descending":fe&&(ye="none");var Ie={css:N.euiTableHeaderCell__content,align:o,description:D,canSort:fe,isSorted:c,isSortAscending:d,children:r};return l(te,Q1e({css:N.euiTableHeaderCell,className:ee,scope:de,role:"columnheader","aria-sort":ye,style:ne},A),fe?l("button",{type:"button",css:N.euiTableHeaderCell__button,className:(0,eve.default)("euiTableHeaderButton",{"euiTableHeaderButton-isSorted":c}),onClick:i,"data-test-subj":"tableHeaderSortButton"},l(YCe,Ie)):l(YCe,Ie),F)};kP.propTypes={className:Js.default.string,"aria-label":Js.default.string,"data-test-subj":Js.default.string,css:Js.default.any,align:Js.default.any,isSortAscending:Js.default.bool,isSorted:Js.default.bool,mobileOptions:Js.default.any,onSort:Js.default.func,scope:Js.default.any,width:Js.default.oneOfType([Js.default.string.isRequired,Js.default.number.isRequired]),description:Js.default.string,readOnly:Js.default.bool,append:Js.default.node};var Nsn=T(z()),f1=T(it()),QCe=T(At());var Yor=["children","className","scope","style","width","append"];function tve(){return tve=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function eir(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}var GK=function(t){var r=t.children,n=t.className,o=t.scope,i=o===void 0?"col":o,c=t.style,d=t.width,h=t.append,v=Qor(t,Yor),w=(0,QCe.default)("euiTableHeaderCellCheckbox",n),_=mt(qK),I=T3(c,d);return l("th",tve({css:_.euiTableHeaderCellCheckbox,className:w,scope:i,style:I},v),l("div",{className:"euiTableCellContent"},r),h)};GK.propTypes={className:f1.default.string,"aria-label":f1.default.string,"data-test-subj":f1.default.string,css:f1.default.any,width:f1.default.oneOfType([f1.default.string.isRequired,f1.default.number.isRequired]),scope:f1.default.any,append:f1.default.node};var qsn=T(z()),P$=T(it()),tMe=T(At());var eMe=function(t){var r=t.euiTheme;return{euiTableHeaderMobile:Q("display:flex;justify-content:space-between;align-items:baseline;padding-block:",r.size.s,";;label:euiTableHeaderMobile;")}};var tir=["children","className","responsiveBreakpoint"];function rve(){return rve=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nir(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}var JK=function(t){var r=t.children,n=t.className,o=t.responsiveBreakpoint,i=rir(t,tir),c=WK(o),d=mt(eMe),h=(0,tMe.default)("euiTableHeaderMobile",n);return c?l("div",rve({className:h,css:d.euiTableHeaderMobile},i),r):null};JK.propTypes={className:P$.default.string,"aria-label":P$.default.string,"data-test-subj":P$.default.string,css:P$.default.any};var aMe=T(z()),fp=T(it()),sMe=T(At());var Qsn=T(z()),ay=T(it()),rMe=T(At());var oir=["children","onSort","isSorted","isSortAscending","className","ariaLabel"];function nve(){return nve=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function air(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}var ove=function(t){var r=t.children,n=t.onSort,o=t.isSorted,i=t.isSortAscending,c=t.className,d=t.ariaLabel,h=iir(t,oir),v="empty";o&&(v=i?"sortUp":"sortDown");var w=(0,rMe.default)("euiTableSortMobileItem",c,{"euiTableSortMobileItem-isSorted":o}),_=d||r,I="Sort ".concat(_," ").concat(i?"descending":"ascending");return l(Gd,nve({className:w,icon:v,onClick:n,"aria-label":I},h),r)};ove.propTypes={onSort:ay.default.func,isSorted:ay.default.bool,isSortAscending:ay.default.bool,ariaLabel:ay.default.string,className:ay.default.string,"aria-label":ay.default.string,"data-test-subj":ay.default.string,css:ay.default.any};var sir=["className","anchorPosition","items"];function jP(e){"@babel/helpers - typeof";return jP=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},jP(e)}function ive(){return ive=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uir(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 cir(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function nMe(e,t){for(var r=0;r.euiTableRowCell:first-child{",pe("padding-left",h),";};label:checkboxOffset;")},mobile:{mobile:Q("position:relative;display:flex;flex-wrap:wrap;padding:",c,";",pe("margin-bottom",c),cc(t,"s")," background-color:",s3(t,"plain"),";border-radius:",r.border.radius.medium,";;label:mobile;"),selected:Q("&,&+.euiTableRow-isExpandedRow{background-color:",n.selected.color,";};label:selected;"),hasLeftColumn:Q(pe("padding-left",d.checkbox.width),";;label:hasLeftColumn;"),hasRightColumn:Q(pe("padding-right",d.actions.width)," &::after{content:'';position:absolute;",pe("vertical",0)," ",pe("right",d.actions.width)," ",pe("width",r.border.width.thin)," background-color:",r.border.color,";};label:hasRightColumn;"),expanded:Q(pe("margin-top","-".concat(d.actions.offset)),pe("padding-left",c)," ",pe("border-top",r.border.thin)," ",pe("border-top-left-radius",0)," ",pe("border-top-right-radius",0),">.euiTableRowCell{",pe("width","100%"),";}",o,";;label:expanded;")}}},yir=function(t){var r=t.euiTheme,n=Ti(lMe||(lMe=gir([` + `);return{euiTableHeaderCellCheckbox:Q(d,Tn("left"),";;label:euiTableHeaderCellCheckbox;"),euiTableRowCellCheckbox:Q(d,";;label:euiTableRowCellCheckbox;"),desktop:Q(pe("border-vertical",r.border.thin),";;label:desktop;"),mobile:Q("position:absolute;",pe("top",o)," ",pe("left",i.checkbox.offset),";;label:mobile;")}};var Vor=["children","align","className","width","style"];function K1e(){return K1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Zor(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}var PP=function(t){var r=t.children,n=t.align,o=n===void 0?lc:n,i=t.className,c=t.width,d=t.style,h=$or(t,Vor),v=(0,KCe.default)("euiTableFooterCell",i),w=T3(d,c),_=vt(qK);return l("td",K1e({css:_.euiTableFooterCell,className:v,style:w},h),l(C3,{align:o,truncateText:!0,textOnly:!0},r))};PP.propTypes={className:ay.default.string,"aria-label":ay.default.string,"data-test-subj":ay.default.string,css:ay.default.any,align:ay.default.any,width:ay.default.oneOfType([ay.default.string.isRequired,ay.default.number.isRequired])};var bsn=T(z()),n_=T(it());var qor=["children","className","wrapWithTableRow"];function Y1e(){return Y1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Gor(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}var GK=function(t){var r=t.children,n=t.className,o=t.wrapWithTableRow,i=o===void 0?!0:o,c=Uor(t,qor);return l("thead",Y1e({className:n},c),i?l("tr",null,r):r)};GK.propTypes={className:n_.default.string,"aria-label":n_.default.string,"data-test-subj":n_.default.string,css:n_.default.any,children:n_.default.node,wrapWithTableRow:n_.default.bool};var _sn=T(z()),Js=T(it()),eve=T(At());var Jor=["children","align","onSort","isSorted","isSortAscending","className","scope","mobileOptions","width","style","readOnly","description","append"];function Q1e(){return Q1e=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Kor(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}var YCe=function(t){var r=t.className,n=t.align,o=t.description,i=t.children,c=t.canSort,d=t.isSorted,h=t.isSortAscending;return l(C3,{className:r,align:n,textOnly:!1,truncateText:null},l(Gg,null,function(v,w){return l(Zt,{token:"euiTableHeaderCell.titleTextWithDesc",default:"{innerText}; {description}",values:{innerText:w,description:o}},function(_){return l("span",{title:o?_:w,ref:v,className:"eui-textTruncate"},i)})}),o&&l(ko,null,l("span",null,o)),d?l(mr,{className:"euiTableSortIcon",type:h?"sortUp":"sortDown",size:"m"}):c?l(mr,{className:"euiTableSortIcon euiTableSortIcon--sortable",type:"sortable",size:"m",color:"subdued"}):null)},kP=function(t){var r=t.children,n=t.align,o=n===void 0?lc:n,i=t.onSort,c=t.isSorted,d=t.isSortAscending,h=t.className,v=t.scope,w=t.mobileOptions,_=t.width,I=t.style,R=t.readOnly,D=t.description,F=t.append,A=Xor(t,Jor),N=vt(qK),H=d1(),q=!H&&w?.only,Y=H&&w?.show===!1;if(q||Y)return null;var ee=(0,eve.default)("euiTableHeaderCell",h),ne=T3(I,_),te=r?"th":"td",de=te==="th"?v??"col":void 0,fe=!!(i&&!R),ye;c?ye=d?"ascending":"descending":fe&&(ye="none");var Ie={css:N.euiTableHeaderCell__content,align:o,description:D,canSort:fe,isSorted:c,isSortAscending:d,children:r};return l(te,Q1e({css:N.euiTableHeaderCell,className:ee,scope:de,role:"columnheader","aria-sort":ye,style:ne},A),fe?l("button",{type:"button",css:N.euiTableHeaderCell__button,className:(0,eve.default)("euiTableHeaderButton",{"euiTableHeaderButton-isSorted":c}),onClick:i,"data-test-subj":"tableHeaderSortButton"},l(YCe,Ie)):l(YCe,Ie),F)};kP.propTypes={className:Js.default.string,"aria-label":Js.default.string,"data-test-subj":Js.default.string,css:Js.default.any,align:Js.default.any,isSortAscending:Js.default.bool,isSorted:Js.default.bool,mobileOptions:Js.default.any,onSort:Js.default.func,scope:Js.default.any,width:Js.default.oneOfType([Js.default.string.isRequired,Js.default.number.isRequired]),description:Js.default.string,readOnly:Js.default.bool,append:Js.default.node};var Lsn=T(z()),h1=T(it()),QCe=T(At());var Yor=["children","className","scope","style","width","append"];function tve(){return tve=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function eir(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}var JK=function(t){var r=t.children,n=t.className,o=t.scope,i=o===void 0?"col":o,c=t.style,d=t.width,h=t.append,v=Qor(t,Yor),w=(0,QCe.default)("euiTableHeaderCellCheckbox",n),_=vt(UK),I=T3(c,d);return l("th",tve({css:_.euiTableHeaderCellCheckbox,className:w,scope:i,style:I},v),l("div",{className:"euiTableCellContent"},r),h)};JK.propTypes={className:h1.default.string,"aria-label":h1.default.string,"data-test-subj":h1.default.string,css:h1.default.any,width:h1.default.oneOfType([h1.default.string.isRequired,h1.default.number.isRequired]),scope:h1.default.any,append:h1.default.node};var Zsn=T(z()),k$=T(it()),tMe=T(At());var eMe=function(t){var r=t.euiTheme;return{euiTableHeaderMobile:Q("display:flex;justify-content:space-between;align-items:baseline;padding-block:",r.size.s,";;label:euiTableHeaderMobile;")}};var tir=["children","className","responsiveBreakpoint"];function rve(){return rve=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function nir(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}var XK=function(t){var r=t.children,n=t.className,o=t.responsiveBreakpoint,i=rir(t,tir),c=HK(o),d=vt(eMe),h=(0,tMe.default)("euiTableHeaderMobile",n);return c?l("div",rve({className:h,css:d.euiTableHeaderMobile},i),r):null};XK.propTypes={className:k$.default.string,"aria-label":k$.default.string,"data-test-subj":k$.default.string,css:k$.default.any};var aMe=T(z()),fp=T(it()),sMe=T(At());var Ysn=T(z()),sy=T(it()),rMe=T(At());var oir=["children","onSort","isSorted","isSortAscending","className","ariaLabel"];function nve(){return nve=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function air(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}var ove=function(t){var r=t.children,n=t.onSort,o=t.isSorted,i=t.isSortAscending,c=t.className,d=t.ariaLabel,h=iir(t,oir),v="empty";o&&(v=i?"sortUp":"sortDown");var w=(0,rMe.default)("euiTableSortMobileItem",c,{"euiTableSortMobileItem-isSorted":o}),_=d||r,I="Sort ".concat(_," ").concat(i?"descending":"ascending");return l(Gd,nve({className:w,icon:v,onClick:n,"aria-label":I},h),r)};ove.propTypes={onSort:sy.default.func,isSorted:sy.default.bool,isSortAscending:sy.default.bool,ariaLabel:sy.default.string,className:sy.default.string,"aria-label":sy.default.string,"data-test-subj":sy.default.string,css:sy.default.any};var sir=["className","anchorPosition","items"];function jP(e){"@babel/helpers - typeof";return jP=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},jP(e)}function ive(){return ive=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function uir(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 cir(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function nMe(e,t){for(var r=0;r.euiTableRowCell:first-child{",pe("padding-left",h),";};label:checkboxOffset;")},mobile:{mobile:Q("position:relative;display:flex;flex-wrap:wrap;padding:",c,";",pe("margin-bottom",c),cc(t,"s")," background-color:",s3(t,"plain"),";border-radius:",r.border.radius.medium,";;label:mobile;"),selected:Q("&,&+.euiTableRow-isExpandedRow{background-color:",n.selected.color,";};label:selected;"),hasLeftColumn:Q(pe("padding-left",d.checkbox.width),";;label:hasLeftColumn;"),hasRightColumn:Q(pe("padding-right",d.actions.width)," &::after{content:'';position:absolute;",pe("vertical",0)," ",pe("right",d.actions.width)," ",pe("width",r.border.width.thin)," background-color:",r.border.color,";};label:hasRightColumn;"),expanded:Q(pe("margin-top","-".concat(d.actions.offset)),pe("padding-left",c)," ",pe("border-top",r.border.thin)," ",pe("border-top-left-radius",0)," ",pe("border-top-right-radius",0),">.euiTableRowCell{",pe("width","100%"),";}",o,";;label:expanded;")}}},yir=function(t){var r=t.euiTheme,n=Ci(lMe||(lMe=gir([` 0% { opacity: 0; transform: translateY(-`,`); @@ -985,16 +985,16 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho opacity: 1; transform: translateY(0); } - `])),r.size.m);return Q(bn,"{.euiTableCellContent{animation:",r.animation.fast," ",r.animation.resistance," 1 normal none ",n,";}}")},bir=function(t){var r=t.euiTheme,n=t.colorMode;return{hover:n==="DARK"?r.colors.lightestShade:Rn(r.colors.lightestShade,.5),selected:{color:n==="DARK"?No(r.colors.primary,.7):Rn(r.colors.primary,.96),hover:n==="DARK"?No(r.colors.primary,.75):Rn(r.colors.primary,.9)},clickable:{hover:_n(r.colors.primary,.05),focus:_n(r.colors.primary,.1)}}};var wir=["children","className","hasSelection","isSelected","isSelectable","hasActions","isExpandedRow","isExpandable","onClick"];function QK(){return QK=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function xir(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}var o_=function(t){var r=t.children,n=t.className,o=t.hasSelection,i=t.isSelected,c=t.isSelectable,d=t.hasActions,h=t.isExpandedRow,v=t.isExpandable,w=t.onClick,_=Oir(t,wir),I=p1(),R=mt(uMe),D=I?[R.euiTableRow,R.mobile.mobile,i&&R.mobile.selected,h&&R.mobile.expanded,(d===!0||v||h)&&R.mobile.hasRightColumn,o&&R.mobile.hasLeftColumn]:[R.euiTableRow,R.desktop.desktop,i&&R.desktop.selected,h&&R.desktop.expanded,w&&R.desktop.clickable,h&&o&&R.desktop.checkboxOffset],F=(0,cMe.default)("euiTableRow",n,{"euiTableRow-isSelectable":c,"euiTableRow-isSelected":i,"euiTableRow-hasActions":d,"euiTableRow-isExpandedRow":h,"euiTableRow-isExpandable":v,"euiTableRow-isClickable":w});if(!w)return l("tr",QK({css:D,className:F},_),r);var A=function(q){q.key===cn.SPACE&&q.preventDefault()},N=function(q){(q.key===cn.ENTER||q.key===cn.SPACE)&&w(q)};return l("tr",QK({css:D,className:F,onClick:w,onKeyDown:A,onKeyUp:N,tabIndex:0},_),r)};o_.propTypes={className:vc.default.string,"aria-label":vc.default.string,"data-test-subj":vc.default.string,css:vc.default.any,hasSelection:vc.default.bool,isSelectable:vc.default.bool,isSelected:vc.default.bool,hasActions:vc.default.oneOfType([vc.default.bool.isRequired,vc.default.oneOf(["custom"])]),isExpandable:vc.default.bool,isExpandedRow:vc.default.bool,onClick:vc.default.any};var jln=T(z()),Dn=T(it()),fMe=T(At());var _ir={name:"1amvdy6-bottom",styles:"vertical-align:bottom;label:bottom;"},Sir={name:"2f764e-top",styles:"vertical-align:top;label:top;"},Iir={name:"19hexhy-baseline",styles:"vertical-align:baseline;label:baseline;"},Eir={name:"l1nme7-middle",styles:"vertical-align:middle;label:middle;"},pMe=function(t){var r=t.euiTheme,n=r_(t),o=n.mobileSizes,i="line-height: 1;";return{euiTableRowCell:Q("color:",r.colors.text,";;label:euiTableRowCell;"),rowHeader:Q("font-weight:",r.font.weight.regular,";",Tn("left"),";;label:rowHeader;"),isExpander:Q(i,";;label:isExpander;"),hasActions:Q(i,";;label:hasActions;"),middle:Eir,baseline:Iir,top:Sir,bottom:_ir,desktop:{desktop:Q(pe("border-vertical",r.border.thin),";;label:desktop;"),actions:Q(".euiBasicTableAction-showOnHover{opacity:0;",bn,"{transition:opacity ",r.animation.normal," ",r.animation.resistance,";}}&:focus-within,.euiTableRow-hasActions:hover &{.euiBasicTableAction-showOnHover{opacity:1;}};label:actions;")},mobile:{mobile:Q(pe("min-width","50%"),";;label:mobile;"),enlarge:Q(yr(t,"m"),";;label:enlarge;"),rightColumnContent:` + `])),r.size.m);return Q(bn,"{.euiTableCellContent{animation:",r.animation.fast," ",r.animation.resistance," 1 normal none ",n,";}}")},bir=function(t){var r=t.euiTheme,n=t.colorMode;return{hover:n==="DARK"?r.colors.lightestShade:Rn(r.colors.lightestShade,.5),selected:{color:n==="DARK"?No(r.colors.primary,.7):Rn(r.colors.primary,.96),hover:n==="DARK"?No(r.colors.primary,.75):Rn(r.colors.primary,.9)},clickable:{hover:_n(r.colors.primary,.05),focus:_n(r.colors.primary,.1)}}};var wir=["children","className","hasSelection","isSelected","isSelectable","hasActions","isExpandedRow","isExpandable","onClick"];function eY(){return eY=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function xir(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}var o_=function(t){var r=t.children,n=t.className,o=t.hasSelection,i=t.isSelected,c=t.isSelectable,d=t.hasActions,h=t.isExpandedRow,v=t.isExpandable,w=t.onClick,_=Oir(t,wir),I=d1(),R=vt(uMe),D=I?[R.euiTableRow,R.mobile.mobile,i&&R.mobile.selected,h&&R.mobile.expanded,(d===!0||v||h)&&R.mobile.hasRightColumn,o&&R.mobile.hasLeftColumn]:[R.euiTableRow,R.desktop.desktop,i&&R.desktop.selected,h&&R.desktop.expanded,w&&R.desktop.clickable,h&&o&&R.desktop.checkboxOffset],F=(0,cMe.default)("euiTableRow",n,{"euiTableRow-isSelectable":c,"euiTableRow-isSelected":i,"euiTableRow-hasActions":d,"euiTableRow-isExpandedRow":h,"euiTableRow-isExpandable":v,"euiTableRow-isClickable":w});if(!w)return l("tr",eY({css:D,className:F},_),r);var A=function(q){q.key===cn.SPACE&&q.preventDefault()},N=function(q){(q.key===cn.ENTER||q.key===cn.SPACE)&&w(q)};return l("tr",eY({css:D,className:F,onClick:w,onKeyDown:A,onKeyUp:N,tabIndex:0},_),r)};o_.propTypes={className:vc.default.string,"aria-label":vc.default.string,"data-test-subj":vc.default.string,css:vc.default.any,hasSelection:vc.default.bool,isSelectable:vc.default.bool,isSelected:vc.default.bool,hasActions:vc.default.oneOfType([vc.default.bool.isRequired,vc.default.oneOf(["custom"])]),isExpandable:vc.default.bool,isExpandedRow:vc.default.bool,onClick:vc.default.any};var kln=T(z()),Dn=T(it()),fMe=T(At());var _ir={name:"1amvdy6-bottom",styles:"vertical-align:bottom;label:bottom;"},Sir={name:"2f764e-top",styles:"vertical-align:top;label:top;"},Iir={name:"19hexhy-baseline",styles:"vertical-align:baseline;label:baseline;"},Eir={name:"l1nme7-middle",styles:"vertical-align:middle;label:middle;"},pMe=function(t){var r=t.euiTheme,n=r_(t),o=n.mobileSizes,i="line-height: 1;";return{euiTableRowCell:Q("color:",r.colors.text,";;label:euiTableRowCell;"),rowHeader:Q("font-weight:",r.font.weight.regular,";",Tn("left"),";;label:rowHeader;"),isExpander:Q(i,";;label:isExpander;"),hasActions:Q(i,";;label:hasActions;"),middle:Eir,baseline:Iir,top:Sir,bottom:_ir,desktop:{desktop:Q(pe("border-vertical",r.border.thin),";;label:desktop;"),actions:Q(".euiBasicTableAction-showOnHover{opacity:0;",bn,"{transition:opacity ",r.animation.normal," ",r.animation.resistance,";}}&:focus-within,.euiTableRow-hasActions:hover &{.euiBasicTableAction-showOnHover{opacity:1;}};label:actions;")},mobile:{mobile:Q(pe("min-width","50%"),";;label:mobile;"),enlarge:Q(yr(t,"m"),";;label:enlarge;"),rightColumnContent:` position: absolute; `.concat(pe("right",0),` `).concat(pe("min-width","0"),` `).concat(pe("width",o.actions.width),` - `),get actions(){return Q(this.rightColumnContent," ",pe("top",o.actions.offset),";;label:actions;")},get expander(){return Q(this.rightColumnContent," ",pe("bottom",o.actions.offset),";;label:expander;")},customActions:Q("&:last-child{",pe("width","100%")," &::before{content:'';position:absolute;",pe("horizontal",0)," ",pe("height",r.border.width.thin)," background-color:",r.border.color,";}.euiTableCellContent{position:relative;",pe("top",r.size.xs),";}};label:customActions;")},euiTableRowCell__mobileHeader:Q(Zs()," font-size:",yr(t,"s",{customScale:"xxs"}).fontSize,";display:block;color:",r.colors.darkShade,";padding:",r.size.s,";padding-block-end:0;margin-block-end:-",r.size.s,";.euiTableRowCell:not(:only-child) &{",pe("min-height",r.size.l),";};label:euiTableRowCell__mobileHeader;")}};function j$(e){"@babel/helpers - typeof";return j$=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},j$(e)}var Pir=["align","children","className","truncateText","setScopeRow","textOnly","hasActions","isExpander","style","width","valign","mobileOptions","append"];function k$(){return k$=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Fir(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}var M3=function(t){var r=t.align,n=r===void 0?lc:r,o=t.children,i=t.className,c=t.truncateText,d=t.setScopeRow,h=t.textOnly,v=h===void 0?!0:h,w=t.hasActions,_=t.isExpander,I=t.style,R=t.width,D=t.valign,F=D===void 0?"middle":D,A=t.mobileOptions,N=t.append,H=Nir(t,Pir),q=p1(),Y=mt(pMe),ee=[Y.euiTableRowCell,d&&Y.rowHeader,_&&Y.isExpander,w&&Y.hasActions,Y[F]].concat(Mir(q?[Y.mobile.mobile,A?.enlarge&&Y.mobile.enlarge,w==="custom"&&Y.mobile.customActions,w===!0&&Y.mobile.actions,_&&Y.mobile.expander]:[Y.desktop.desktop,w&&Y.desktop.actions])),ne=(0,fMe.default)("euiTableRowCell",i,{"euiTableRowCell--hasActions":w,"euiTableRowCell--isExpander":_}),te=q?w||_?void 0:A?.width:R,de=T3(I,te),fe=d?"th":"td",ye=kir({scope:d?"row":void 0,style:de,css:ee},H),Ie={align:n,textOnly:v,truncateText:c,hasActions:w||_};if(q){if(A?.show===!1)return null;var he,be,Se;return l(fe,k$({className:ne},ye),A?.header&&l("div",{className:"euiTableRowCell__mobileHeader",css:Y.euiTableRowCell__mobileHeader},A.header),l(C3,k$({},Ie,{align:(he=A?.align)!==null&&he!==void 0?he:"left",truncateText:(be=A?.truncateText)!==null&&be!==void 0?be:c,textOnly:(Se=A?.textOnly)!==null&&Se!==void 0?Se:v}),A?.render||o),N)}else return A!=null&&A.only?null:l(fe,k$({className:ne},ye),l(C3,Ie,o),N)};M3.propTypes={className:Dn.default.string,"aria-label":Dn.default.string,"data-test-subj":Dn.default.string,css:Dn.default.any,valign:Dn.default.any,setScopeRow:Dn.default.bool,hasActions:Dn.default.oneOfType([Dn.default.bool.isRequired,Dn.default.oneOf(["custom"])]),isExpander:Dn.default.bool,mobileOptions:Dn.default.shape({show:Dn.default.bool,only:Dn.default.bool,render:Dn.default.node,header:Dn.default.oneOfType([Dn.default.node.isRequired,Dn.default.bool.isRequired]),enlarge:Dn.default.bool,width:Dn.default.any,align:Dn.default.any,textOnly:Dn.default.bool,truncateText:Dn.default.oneOfType([Dn.default.bool.isRequired,Dn.default.shape({lines:Dn.default.number.isRequired}).isRequired])}),append:Dn.default.node,align:Dn.default.any,textOnly:Dn.default.bool,truncateText:Dn.default.oneOfType([Dn.default.bool.isRequired,Dn.default.shape({lines:Dn.default.number.isRequired}).isRequired]),width:Dn.default.any};var Fln=T(z()),TP=T(it()),hMe=T(At());var Bir=["children","className","append"];function lve(){return lve=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Wir(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}var eY=function(t){var r=t.children,n=t.className,o=t.append,i=zir(t,Bir),c=p1(),d=mt(qK),h=[d.euiTableRowCellCheckbox,c?d.mobile:d.desktop],v=(0,hMe.default)("euiTableRowCellCheckbox",n);return l("td",lve({css:h,className:v},i),l("div",{className:"euiTableCellContent"},r),o)};eY.propTypes={className:TP.default.string,"aria-label":TP.default.string,"data-test-subj":TP.default.string,css:TP.default.any,append:TP.default.node};var RP=T(z()),Ge=T(it()),LMe=T(At());var CP=T(z());var tY=function(t){return t.hasOwnProperty("render")},hp=function(t){return function(r){return typeof r=="function"?r(t):r}};function Hir(e,t){return qir(e)||Zir(e,t)||$ir(e,t)||Vir()}function Vir(){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 $ir(e,t){if(e){if(typeof e=="string")return mMe(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)?mMe(e,t):void 0}}function mMe(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);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Fir(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}var M3=function(t){var r=t.align,n=r===void 0?lc:r,o=t.children,i=t.className,c=t.truncateText,d=t.setScopeRow,h=t.textOnly,v=h===void 0?!0:h,w=t.hasActions,_=t.isExpander,I=t.style,R=t.width,D=t.valign,F=D===void 0?"middle":D,A=t.mobileOptions,N=t.append,H=Nir(t,Pir),q=d1(),Y=vt(pMe),ee=[Y.euiTableRowCell,d&&Y.rowHeader,_&&Y.isExpander,w&&Y.hasActions,Y[F]].concat(Mir(q?[Y.mobile.mobile,A?.enlarge&&Y.mobile.enlarge,w==="custom"&&Y.mobile.customActions,w===!0&&Y.mobile.actions,_&&Y.mobile.expander]:[Y.desktop.desktop,w&&Y.desktop.actions])),ne=(0,fMe.default)("euiTableRowCell",i,{"euiTableRowCell--hasActions":w,"euiTableRowCell--isExpander":_}),te=q?w||_?void 0:A?.width:R,de=T3(I,te),fe=d?"th":"td",ye=kir({scope:d?"row":void 0,style:de,css:ee},H),Ie={align:n,textOnly:v,truncateText:c,hasActions:w||_};if(q){if(A?.show===!1)return null;var ve,Oe,be;return l(fe,j$({className:ne},ye),A?.header&&l("div",{className:"euiTableRowCell__mobileHeader",css:Y.euiTableRowCell__mobileHeader},A.header),l(C3,j$({},Ie,{align:(ve=A?.align)!==null&&ve!==void 0?ve:"left",truncateText:(Oe=A?.truncateText)!==null&&Oe!==void 0?Oe:c,textOnly:(be=A?.textOnly)!==null&&be!==void 0?be:v}),A?.render||o),N)}else return A!=null&&A.only?null:l(fe,j$({className:ne},ye),l(C3,Ie,o),N)};M3.propTypes={className:Dn.default.string,"aria-label":Dn.default.string,"data-test-subj":Dn.default.string,css:Dn.default.any,valign:Dn.default.any,setScopeRow:Dn.default.bool,hasActions:Dn.default.oneOfType([Dn.default.bool.isRequired,Dn.default.oneOf(["custom"])]),isExpander:Dn.default.bool,mobileOptions:Dn.default.shape({show:Dn.default.bool,only:Dn.default.bool,render:Dn.default.node,header:Dn.default.oneOfType([Dn.default.node.isRequired,Dn.default.bool.isRequired]),enlarge:Dn.default.bool,width:Dn.default.any,align:Dn.default.any,textOnly:Dn.default.bool,truncateText:Dn.default.oneOfType([Dn.default.bool.isRequired,Dn.default.shape({lines:Dn.default.number.isRequired}).isRequired])}),append:Dn.default.node,align:Dn.default.any,textOnly:Dn.default.bool,truncateText:Dn.default.oneOfType([Dn.default.bool.isRequired,Dn.default.shape({lines:Dn.default.number.isRequired}).isRequired]),width:Dn.default.any};var Nln=T(z()),TP=T(it()),hMe=T(At());var Bir=["children","className","append"];function lve(){return lve=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Wir(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}var tY=function(t){var r=t.children,n=t.className,o=t.append,i=zir(t,Bir),c=d1(),d=vt(UK),h=[d.euiTableRowCellCheckbox,c?d.mobile:d.desktop],v=(0,hMe.default)("euiTableRowCellCheckbox",n);return l("td",lve({css:h,className:v},i),l("div",{className:"euiTableCellContent"},r),o)};tY.propTypes={className:TP.default.string,"aria-label":TP.default.string,"data-test-subj":TP.default.string,css:TP.default.any,append:TP.default.node};var RP=T(z()),Ge=T(it()),LMe=T(At());var CP=T(z());var rY=function(t){return t.hasOwnProperty("render")},hp=function(t){return function(r){return typeof r=="function"?r(t):r}};function Hir(e,t){return qir(e)||Zir(e,t)||$ir(e,t)||Vir()}function Vir(){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 $ir(e,t){if(e){if(typeof e=="string")return mMe(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)?mMe(e,t):void 0}}function mMe(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function tar(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 kMe(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 Al(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&n.state.selection.length===h.length,w=!v&&n.state.selection&&h.length>0&&n.state.selection.length>0,_=h.length===0,I=function(D){D.target.checked&&!w?n.changeSelection(h):n.changeSelection([])};return l(Zt,{tokens:["euiBasicTable.selectAllRows","euiBasicTable.deselectRows"],defaults:["Select all rows","Deselect rows"]},function(R){var D=jMe(R,2),F=D[0],A=D[1];return l(i$,{id:n.selectAllIdGenerator(),checked:v,indeterminate:w,disabled:_,onChange:I,"data-test-subj":"checkboxSelectAll","aria-label":v||w?A:F,title:v||w?A:F,label:o?F:null})})}}),sy(n,"renderCopyChar",function(o){var i=o===n.props.columns.length-1;return i?$g.hiddenNewline:$g.hiddenTab}),sy(n,"resolveColumnSortDirection",function(o){var i=n.props.sorting,c=o,d=c.sortable,h=c.field,v=c.name;if(!(!i||!i.sort||!d)&&(i.sort.field===h||i.sort.field===v))return i.sort.direction}),sy(n,"resolveColumnOnSort",function(o){var i=n.props.sorting,c=o,d=c.sortable,h=c.name;if(!(!i||!d)){if(!n.props.onChange)throw new Error("BasicTable is configured to be sortable on column [".concat(h,`] 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 car(t,e),aar(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:P3.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 MMe(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=Al(Al({},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=Al(Al({},o),{},{page:Al(Al({},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=Hd.ASC;o&&o.sort&&(o.sort.field===n.field||o.sort.field===n.name)&&(i=Hd.reverse(o.sort.direction));var c=Al(Al({},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,d=n.itemId,h=n.columns,v=n.pagination,w=n.sorting,_=n.selection,I=n.onChange,R=n.error,D=n.noItemsMessage,F=n.compressed,A=n.itemIdToExpandedRowMap,N=n.responsiveBreakpoint,H=n.rowProps,q=n.cellProps,Y=n.tableCaption,ee=n.rowHeader,ne=n.tableLayout,te=PMe(n,Jir),de=(0,LMe.default)("euiBasicTable",{"euiBasicTable-loading":i},o),fe=this.renderTable(),ye=this.renderPaginationBar();return l("div",A3({className:de},te),fe,ye)}},{key:"renderTable",value:function(){var n=this.props,o=n.compressed,i=n.responsiveBreakpoint,c=n.tableLayout,d=n.loading;return l(RP.default.Fragment,null,l(JK,{responsiveBreakpoint:i},this.renderSelectAll(!0),this.renderTableMobileSort()),l(Yne,null,l(HK,{id:this.tableId,tableLayout:c,responsiveBreakpoint:i,compressed:o,css:d&&EMe},this.renderTableCaption(),this.renderTableHead(),this.renderTableBody(),this.renderTableFooter())))}},{key:"renderTableMobileSort",value:function(){var n=this,o=this.props,i=o.columns,c=o.sorting,d=[];return c?(i.forEach(function(h,v){var w;if(h.field&&c.sort&&c.enableAllColumns&&h.sortable==null&&(h=Al(Al({},h),{},{sortable:!0})),!(!h.sortable||((w=h)===null||w===void 0||(w=w.mobileOptions)===null||w===void 0?void 0:w.show)===!1)){var _=n.resolveColumnSortDirection(h);d.push({name:h.name,key:"_data_s_".concat(String(h.field),"_").concat(v),onSort:n.resolveColumnOnSort(h),isSorted:!!_,isSortAscending:_?Hd.isAsc(_):void 0})}}),d.length?l(YK,{items:d}):null):null}},{key:"renderTableCaption",value:function(){var n=this.props,o=n.items,i=n.pagination,c=n.tableCaption,d=o.length,h=i?i.totalItemCount:d,v=i?i.pageIndex+1:1,w=i?Math.ceil(i.totalItemCount/this.pageSize):1,_;return c?i?_=l(Zt,{token:"euiBasicTable.tableCaptionWithPagination",default:"{tableCaption}; Page {page} of {pageCount}.",values:{tableCaption:c,page:v,pageCount:w}}):_=c:i?i.totalItemCount>0?_=l(Zt,{token:"euiBasicTable.tableAutoCaptionWithPagination",default:"This table contains {itemCount} rows out of {totalItemCount} rows; Page {page} of {pageCount}.",values:{totalItemCount:h,itemCount:d,page:v,pageCount:w}}):_=l(Zt,{token:"euiBasicTable.tableSimpleAutoCaptionWithPagination",default:"This table contains {itemCount} rows; Page {page} of {pageCount}.",values:{itemCount:d,page:v,pageCount:w}}):_=l(Zt,{token:"euiBasicTable.tableAutoCaptionWithoutPagination",default:"This table contains {itemCount} rows.",values:{itemCount:d}}),l(ko,null,l("caption",{css:HCe,className:"euiTableCaption"},$g.hiddenNoCopyBoundary,l(y$,null,_),$g.hiddenNoCopyBoundary))}},{key:"renderTableHead",value:function(){var n=this,o=this.props,i=o.columns,c=o.selection,d=[];return c&&d.push(l(GK,{key:"_selection_column_h",append:this.renderCopyChar(-1)},this.renderSelectAll(!1))),i.forEach(function(h,v){var w=h,_=w.field,I=w.width,R=w.name,D=w.align,F=w.dataType,A=w.sortable,N=w.mobileOptions,H=w.readOnly,q=w.description,Y=D||n.getAlignForDataType(F),ee={width:I,description:q,mobileOptions:N,align:Y,append:n.renderCopyChar(v)};if(h.actions){d.push(l(kP,A3({},ee,{key:"_actions_h_".concat(v),align:"right"}),R));return}if(!h.field){var ne={};if(n.props.sorting&&typeof A=="function"){var te=n.resolveColumnSortDirection(h);ne.isSorted=!!te,ne.isSortAscending=te?Hd.isAsc(te):void 0,ne.onSort=n.resolveColumnOnSort(h),ne.readOnly=n.props.sorting.readOnly||H}d.push(l(kP,A3({},ee,{key:"_computed_column_h_".concat(v),"data-test-subj":"tableHeaderCell_".concat(typeof R=="string"?R:"","_").concat(v)},ne),R));return}var de={};if(n.props.sorting){n.props.sorting.sort&&n.props.sorting.enableAllColumns&&h.sortable==null&&(h=Al(Al({},h),{},{sortable:!0}));var fe=h,ye=fe.sortable;if(ye){var Ie=n.resolveColumnSortDirection(h);de.isSorted=!!Ie,de.isSortAscending=Ie?Hd.isAsc(Ie):void 0,de.onSort=n.resolveColumnOnSort(h),de.readOnly=n.props.sorting.readOnly||H}}d.push(l(kP,A3({},ee,{key:"_data_h_".concat(String(_),"_").concat(v),"data-test-subj":"tableHeaderCell_".concat(String(_),"_").concat(v)},de),R))}),l(UK,null,d)}},{key:"renderTableFooter",value:function(){var n=this.props,o=n.items,i=n.columns,c=n.pagination,d=n.selection,h=[],v=!1;return d&&h.push(l(PP,{key:"_selection_column_f"},void 0)),i.forEach(function(w){var _=har(w,{items:o,pagination:c}),I=w,R=I.mobileOptions,D=I.field,F=I.align;R!=null&&R.only||(_?(h.push(l(PP,{key:"footer_".concat(String(D),"_").concat(h.length-1),align:F},_)),v=!0):h.push(l(PP,{key:"footer_empty_".concat(h.length-1),align:F},void 0)))}),h.length&&v?l($K,null,h):null}},{key:"renderTableBody",value:function(){var n=this,o=this.props,i=o.error,c=o.loading,d=o.items,h;return i?h=this.renderErrorMessage(i):d.length===0?h=this.renderEmptyMessage():h=d.map(function(v,w){var _=MMe(n.props)&&n.pageSize>0?n.props.pagination.pageIndex*n.pageSize+w:w;return n.renderItemRow(v,_,w)}),l(fA,null,function(v){return l(VK,{css:c&&IMe(v)},h)})}},{key:"renderErrorMessage",value:function(n){var o=this.props.columns.length+(this.props.selection?1:0);return l(o_,null,l(M3,{align:"center",colSpan:o,mobileOptions:{width:"100%"}},l(mr,{type:"minusInCircle",color:"danger"})," ",n))}},{key:"renderEmptyMessage",value:function(){var n=this.props,o=n.columns,i=n.selection,c=n.noItemsMessage,d=o.length+(i?1:0);return l(o_,null,l(M3,{align:"center",colSpan:d,mobileOptions:{width:"100%"}},c))}},{key:"renderItemRow",value:function(n,o,i){var c=this,d=this.props,h=d.columns,v=d.selection,w=d.rowHeader,_=d.itemIdToExpandedRowMap,I=[],R=this.props.itemId,D=MP(n,R)!=null?MP(n,R):o,F=v?this.state.selection&&!!this.state.selection.find(function(Se){return MP(Se,R)===D}):!1,A=!1;if(v){var N=this.renderItemSelectionCell(D,n,F,i),H=jMe(N,2),q=H[0],Y=H[1];I.push(q),A=!!Y}var ee=!1;h.forEach(function(Se,Te){var Pe=Se.actions;if(Pe){var Ve=Pe.some(function(He){return!!He.render});I.push(c.renderItemActionsCell(D,n,Se,Te,o,Ve)),ee=!ee&&Ve?"custom":!0}else if(Se.field){var De=Se;I.push(c.renderItemFieldDataCell(D,n,Se,Te,De.field===w))}else I.push(c.renderItemComputedCell(D,n,Se,Te))});var ne=v?h.length+1:h.length,te=h.reduce(function(Se,Te){var Pe;return Te!=null&&(Pe=Te.mobileOptions)!==null&&Pe!==void 0&&Pe.only?Se+1:Se+0},0);ne=ne-te;var de=_?.hasOwnProperty(D),fe=de?"row_".concat(D,"_expansion"):void 0,ye=de?l(o_,{id:fe,isExpandedRow:!0,hasSelection:!!v},l(M3,{colSpan:ne,textOnly:!1,append:$g.hiddenNewline},_[D])):void 0,Ie=this.props.rowProps,he=dar(n,Ie),be=l(o_,A3({"aria-owns":fe,hasSelection:!!v,isSelectable:!A,isSelected:F,hasActions:ee,isExpandable:de},he),I);return l(RP.Fragment,{key:"row_".concat(D)},be,ye)}},{key:"renderItemSelectionCell",value:function(n,o,i,c){var d=this,h=this.props.selection,v="_selection_column_".concat(n),w=i,_=h.selectable&&!h.selectable(o),I=h.selectableMessage&&h.selectableMessage(!_,o),R=function(F){if(F.target.checked)d.changeSelection([].concat(Kir(d.state.selection),[o]));else{var A=d.props.itemId;d.changeSelection(d.state.selection.reduce(function(N,H){return MP(H,A)!==n&&N.push(H),N},[]))}};return[l(eY,{key:v,append:this.renderCopyChar(-1)},l(Zt,{token:"euiBasicTable.selectThisRow",default:"Select row {index}",values:{index:c+1}},function(D){return l(i$,{id:"".concat(d.tableId).concat(v,"-checkbox"),disabled:_,checked:w,onChange:R,title:I||D,"aria-label":I||D,"data-test-subj":"checkboxSelectRow-".concat(n)})})),_]}},{key:"renderItemActionsCell",value:function(n,o,i,c,d,h){var v=this.state.selection.length>0,w=i.actions.filter(function(R){return!R.available||R.available(o)});if(w.length>2){if(v)w=[];else{var _=w.filter(function(R){return R.isPrimary});w=_.slice(0,2).map(function(R){return Al(Al({},R),{},{showOnHover:!0})})}w.push({name:"All actions",render:function(D){return l(vMe,{className:"euiBasicTable__collapsedActions",actions:i.actions,actionsDisabled:v,itemId:n,item:D,displayedRowIndex:d})}})}var I="record_actions_".concat(n,"_").concat(c);return l(M3,{key:I,align:"right",textOnly:!1,hasActions:h?"custom":!0,append:this.renderCopyChar(c)},l(OMe,{actions:w,actionsDisabled:v,itemId:n,item:o}))}},{key:"renderItemFieldDataCell",value:function(n,o,i,c,d){var h=i.field,v=i.render,w=i.dataType,_="_data_column_".concat(String(h),"_").concat(n,"_").concat(c),I=v||this.getRendererForDataType(w),R=UG(o,h),D=I(R,o);return this.renderItemCell(o,i,c,_,D,d)}},{key:"renderItemComputedCell",value:function(n,o,i,c){var d=i.render,h="_computed_column_".concat(n,"_").concat(c),v=d||this.getRendererForDataType(),w=v(o);return this.renderItemCell(o,i,c,h,w,!1)}},{key:"renderItemCell",value:function(n,o,i,c,d,h){var v,w,_=o,I=_.align,R=_.render,D=_.dataType,F=_.isExpander,A=_.textOnly,N=_.name,H=_.field,q=_.description,Y=_.sortable,ee=_.footer,ne=_.mobileOptions,te=PMe(_,Xir),de=I||this.getAlignForDataType(D),fe=this.props.cellProps,ye=far(n,o,fe);return l(M3,A3({key:c,align:de,isExpander:F,textOnly:A||!R,setScopeRow:h,mobileOptions:Al(Al({},ne),{},{render:ne==null||(v=ne.render)===null||v===void 0?void 0:v.call(ne,n),header:(w=ne?.header)!==null&&w!==void 0?w:N})},ye,te,{append:this.renderCopyChar(i)}),d)}},{key:"getRendererForDataType",value:function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",o=pve[n];if(!o)throw new Error("Unknown dataType [".concat(n,"]. The supported data types are [").concat(CMe.join(", "),"]"));return o.render}},{key:"getAlignForDataType",value:function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",o=pve[n];if(!o)throw new Error("Unknown dataType [".concat(n,"]. The supported data types are [").concat(CMe.join(", "),"]"));return o.align}},{key:"renderPaginationBar",value:function(){var n=this,o=this.props,i=o.error,c=o.pagination,d=o.tableCaption,h=o.onChange;if(!i&&c&&c.totalItemCount>0){if(!h)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 l(Zt,{token:"euiBasicTable.tablePagination",default:"Pagination for table: {tableCaption}",values:{tableCaption:d}},function(v){return l(_Me,{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,d=n.itemId,h=n.items,v=c.filter(function(I){return h.findIndex(function(R){return MP(R,d)===MP(I,d)})!==-1});if(v.length!==c.length){var w,_;return(w=(_=n.selection).onSelectionChange)===null||w===void 0||w.call(_,v),{selection:v}}return i?{selection:v}:null}}])}(RP.Component);sy(R3,"contextType",TV);sy(R3,"defaultProps",{tableLayout:"fixed",noItemsMessage:l(Zt,{token:"euiBasicTable.noItemsMessage",default:"No items found"})});R3.propTypes={className:Ge.default.string,"aria-label":Ge.default.string,"data-test-subj":Ge.default.string,css:Ge.default.any,itemId:Ge.default.oneOfType([Ge.default.string.isRequired,Ge.default.number.isRequired,Ge.default.func.isRequired]),itemIdToExpandedRowMap:Ge.default.shape({}),items:Ge.default.arrayOf(Ge.default.any.isRequired),cellProps:Ge.default.oneOfType([Ge.default.any.isRequired,Ge.default.func.isRequired]),columns:Ge.default.arrayOf(Ge.default.oneOfType([Ge.default.shape({field:Ge.default.oneOfType([Ge.default.any.isRequired,Ge.default.any.isRequired]).isRequired,name:Ge.default.node.isRequired,description:Ge.default.string,dataType:Ge.default.oneOf(["auto","string","number","boolean","date"]),width:Ge.default.string,sortable:Ge.default.oneOfType([Ge.default.bool.isRequired,Ge.default.func.isRequired]),readOnly:Ge.default.bool,align:Ge.default.any,textOnly:Ge.default.bool,truncateText:Ge.default.oneOfType([Ge.default.bool.isRequired,Ge.default.shape({lines:Ge.default.number.isRequired}).isRequired]),mobileOptions:Ge.default.shape({render:Ge.default.func}),render:Ge.default.func,footer:Ge.default.oneOfType([Ge.default.string.isRequired,Ge.default.element.isRequired,Ge.default.func.isRequired]),isExpander:Ge.default.bool,className:Ge.default.string,"aria-label":Ge.default.string,"data-test-subj":Ge.default.string,css:Ge.default.any}).isRequired,Ge.default.shape({className:Ge.default.string,"aria-label":Ge.default.string,"data-test-subj":Ge.default.string,css:Ge.default.any,render:Ge.default.func.isRequired,name:Ge.default.node,sortable:Ge.default.func}).isRequired,Ge.default.shape({actions:Ge.default.arrayOf(Ge.default.oneOfType([Ge.default.shape({type:Ge.default.oneOfType([Ge.default.oneOf(["button"]),Ge.default.oneOf(["icon"]).isRequired]),color:Ge.default.oneOfType([Ge.default.any.isRequired,Ge.default.func.isRequired]),name:Ge.default.oneOfType([Ge.default.node.isRequired,Ge.default.func.isRequired]).isRequired,description:Ge.default.oneOfType([Ge.default.string.isRequired,Ge.default.func.isRequired]).isRequired,onClick:Ge.default.func,href:Ge.default.oneOfType([Ge.default.string.isRequired,Ge.default.func.isRequired]),target:Ge.default.string,available:Ge.default.func,enabled:Ge.default.func,"data-test-subj":Ge.default.oneOfType([Ge.default.string.isRequired,Ge.default.func.isRequired]),isPrimary:Ge.default.bool,showOnHover:Ge.default.bool,icon:Ge.default.oneOfType([Ge.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,Ge.default.func.isRequired])}).isRequired,Ge.default.shape({render:Ge.default.func.isRequired,available:Ge.default.func,enabled:Ge.default.func}).isRequired]).isRequired).isRequired,name:Ge.default.node}).isRequired]).isRequired),error:Ge.default.string,tableCaption:Ge.default.string,rowHeader:Ge.default.string,loading:Ge.default.bool,noItemsMessage:Ge.default.node,onChange:Ge.default.func,pagination:Ge.default.oneOfType([Ge.default.oneOf([void 0]),Ge.default.shape({pageIndex:Ge.default.number.isRequired,pageSize:Ge.default.number,totalItemCount:Ge.default.number.isRequired,pageSizeOptions:Ge.default.arrayOf(Ge.default.number.isRequired),showPerPageOptions:Ge.default.bool})]),rowProps:Ge.default.oneOfType([Ge.default.any.isRequired,Ge.default.func.isRequired]),selection:Ge.default.shape({onSelectionChange:Ge.default.func,selectable:Ge.default.func,selectableMessage:Ge.default.func,initialSelected:Ge.default.arrayOf(Ge.default.any.isRequired),selected:Ge.default.arrayOf(Ge.default.any.isRequired)}),sorting:Ge.default.shape({sort:Ge.default.shape({field:Ge.default.any.isRequired,direction:Ge.default.oneOf(["asc","desc"]).isRequired}),allowNeutralSort:Ge.default.bool,enableAllColumns:Ge.default.bool,readOnly:Ge.default.bool}),tableLayout:Ge.default.oneOf(["fixed","auto"])};var h1=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 i_=typeof window>"u";function Xi(){}function FMe(e,t){return typeof e=="function"?e(t):e}function M$(e){return typeof e=="number"&&e>=0&&e!==1/0}function C$(e){return Array.isArray(e)?e:[e]}function nY(e,t){return Math.max(e+(t||0)-Date.now(),0)}function DP(e,t,r){return oY(e)?typeof t=="function"?Kr({},r,{queryKey:e,queryFn:t}):Kr({},t,{queryKey:e}):e}function m1(e,t,r){return oY(e)?[Kr({},t,{queryKey:e}),r]:[e||{},t]}function mar(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 fve(e,t){var r=e.active,n=e.exact,o=e.fetching,i=e.inactive,c=e.predicate,d=e.queryKey,h=e.stale;if(oY(d)){if(n){if(t.queryHash!==A$(d,t.options))return!1}else if(!R$(t.queryKey,d))return!1}var v=mar(r,i);if(v==="none")return!1;if(v!=="all"){var w=t.isActive();if(v==="active"&&!w||v==="inactive"&&w)return!1}return!(typeof h=="boolean"&&t.isStale()!==h||typeof o=="boolean"&&t.isFetching()!==o||c&&!c(t))}function hve(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(D3(t.options.mutationKey)!==D3(i))return!1}else if(!R$(t.options.mutationKey,i))return!1}return!(typeof n=="boolean"&&t.state.status==="loading"!==n||o&&!o(t))}function A$(e,t){var r=t?.queryKeyHashFn||D3;return r(e)}function D3(e){var t=C$(e);return gar(t)}function gar(e){return JSON.stringify(e,function(t,r){return dve(r)?Object.keys(r).sort().reduce(function(n,o){return n[o]=r[o],n},{}):r})}function R$(e,t){return BMe(C$(e),C$(t))}function BMe(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!BMe(e[r],t[r])}):!1}function LP(e,t){if(e===t)return e;var r=Array.isArray(e)&&Array.isArray(t);if(r||dve(e)&&dve(t)){for(var n=r?e.length:Object.keys(e).length,o=r?t:Object.keys(t),i=o.length,c=r?[]:{},d=0,h=0;h"u")return!0;var r=t.prototype;return!(!NMe(r)||!r.hasOwnProperty("isPrototypeOf"))}function NMe(e){return Object.prototype.toString.call(e)==="[object Object]"}function oY(e){return typeof e=="string"||Array.isArray(e)}function WMe(e){return new Promise(function(t){setTimeout(t,e)})}function mve(e){Promise.resolve().then(e).catch(function(t){return setTimeout(function(){throw t})})}function iY(){if(typeof AbortController=="function")return new AbortController}var yar=function(e){dc(t,e);function t(){var n;return n=e.call(this)||this,n.setup=function(o){var i;if(!i_&&((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(d){typeof d=="boolean"?c.setFocused(d):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}(h1),L3=new yar;var bar=function(e){dc(t,e);function t(){var n;return n=e.call(this)||this,n.setup=function(o){var i;if(!i_&&((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(d){typeof d=="boolean"?c.setOnline(d):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}(h1),NP=new bar;function war(e){return Math.min(1e3*Math.pow(2,e),3e4)}function D$(e){return typeof e?.cancel=="function"}var HMe=function(t){this.revert=t?.revert,this.silent=t?.silent};function FP(e){return e instanceof HMe}var aY=function(t){var r=this,n=!1,o,i,c,d;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,d=R});var h=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?.(),d(R))},w=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(D){R=Promise.reject(D)}o=function(F){if(!r.isResolved&&(v(new HMe(F)),r.abort==null||r.abort(),D$(R)))try{R.cancel()}catch{}},r.isTransportCancelable=D$(R),Promise.resolve(R).then(h).catch(function(D){var F,A;if(!r.isResolved){var N=(F=t.retry)!=null?F:3,H=(A=t.retryDelay)!=null?A:war,q=typeof H=="function"?H(r.failureCount,D):H,Y=N===!0||typeof N=="number"&&r.failureCount"u"&&(d.exact=!0),this.queries.find(function(h){return fve(d,h)})},r.findAll=function(o,i){var c=m1(o,i),d=c[0];return Object.keys(d).length>0?this.queries.filter(function(h){return fve(d,h)}):this.queries},r.notify=function(o){var i=this;to.batch(function(){i.listeners.forEach(function(c){c(o)})})},r.onFocus=function(){var o=this;to.batch(function(){o.queries.forEach(function(i){i.onFocus()})})},r.onOnline=function(){var o=this;to.batch(function(){o.queries.forEach(function(i){i.onOnline()})})},t}(h1);var qMe=function(){function e(r){this.options=Kr({},r.defaultOptions,r.options),this.mutationId=r.mutationId,this.mutationCache=r.mutationCache,this.observers=[],this.state=r.state||xar(),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(d){d!==n.state.context&&n.dispatch({type:"loading",context:d,variables:n.state.variables})})),c.then(function(){return n.executeMutation()}).then(function(d){o=d,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(d){return n.mutationCache.config.onError==null||n.mutationCache.config.onError(d,n.state.variables,n.state.context,n),a_().error(d),Promise.resolve().then(function(){return n.options.onError==null?void 0:n.options.onError(d,n.state.variables,n.state.context)}).then(function(){return n.options.onSettled==null?void 0:n.options.onSettled(void 0,d,n.state.variables,n.state.context)}).then(function(){throw n.dispatch({type:"error",error:d}),d})})},t.executeMutation=function(){var n=this,o;return this.retryer=new aY({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=_ar(this.state,n),to.batch(function(){o.observers.forEach(function(i){i.onMutationUpdate(n)}),o.mutationCache.notify(o)})},e}();function xar(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}function _ar(e,t){switch(t.type){case"failed":return Kr({},e,{failureCount:e.failureCount+1});case"pause":return Kr({},e,{isPaused:!0});case"continue":return Kr({},e,{isPaused:!1});case"loading":return Kr({},e,{context:t.context,data:void 0,error:null,isPaused:!1,status:"loading",variables:t.variables});case"success":return Kr({},e,{data:t.data,error:null,status:"success",isPaused:!1});case"error":return Kr({},e,{data:void 0,error:t.error,failureCount:e.failureCount+1,isPaused:!1,status:"error"});case"setState":return Kr({},e,t.state);default:return e}}var UMe=function(e){dc(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 d=new qMe({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(d),d},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;to.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 hve(o,i)})},r.findAll=function(o){return this.mutations.filter(function(i){return hve(o,i)})},r.notify=function(o){var i=this;to.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 to.batch(function(){return o.reduce(function(i,c){return i.then(function(){return c.continue().catch(Xi)})},Promise.resolve())})},t}(h1);function JMe(){return{onFetch:function(t){t.fetchFn=function(){var r,n,o,i,c,d,h=(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,w=v?.pageParam,_=v?.direction==="forward",I=v?.direction==="backward",R=((c=t.state.data)==null?void 0:c.pages)||[],D=((d=t.state.data)==null?void 0:d.pageParams)||[],F=iY(),A=F?.signal,N=D,H=!1,q=t.options.queryFn||function(){return Promise.reject("Missing queryFn")},Y=function(Se,Te,Pe,Ve){return N=Ve?[Te].concat(N):[].concat(N,[Te]),Ve?[Pe].concat(Se):[].concat(Se,[Pe])},ee=function(Se,Te,Pe,Ve){if(H)return Promise.reject("Cancelled");if(typeof Pe>"u"&&!Te&&Se.length)return Promise.resolve(Se);var De={queryKey:t.queryKey,signal:A,pageParam:Pe,meta:t.meta},He=q(De),Je=Promise.resolve(He).then(function(Qe){return Y(Se,Pe,Qe,Ve)});if(D$(He)){var vt=Je;vt.cancel=He.cancel}return Je},ne;if(!R.length)ne=ee([]);else if(_){var te=typeof w<"u",de=te?w:GMe(t.options,R);ne=ee(R,te,de)}else if(I){var fe=typeof w<"u",ye=fe?w:Sar(t.options,R);ne=ee(R,fe,ye,!0)}else(function(){N=[];var be=typeof t.options.getNextPageParam>"u",Se=h&&R[0]?h(R[0],0,R):!0;ne=Se?ee([],be,D[0]):Promise.resolve(Y([],D[0],R[0]));for(var Te=function(De){ne=ne.then(function(He){var Je=h&&R[De]?h(R[De],De,R):!0;if(Je){var vt=be?D[De]:GMe(t.options,He);return ee(He,be,vt)}return Promise.resolve(Y(He,D[De],R[De]))})},Pe=1;Pe"u"&&(w.revert=!0);var _=to.batch(function(){return c.queryCache.findAll(h).map(function(I){return I.cancel(w)})});return Promise.all(_).then(Xi).catch(Xi)},t.invalidateQueries=function(n,o,i){var c,d,h,v=this,w=m1(n,o,i),_=w[0],I=w[1],R=Kr({},_,{active:(c=(d=_.refetchActive)!=null?d:_.active)!=null?c:!0,inactive:(h=_.refetchInactive)!=null?h:!1});return to.batch(function(){return v.queryCache.findAll(_).forEach(function(D){D.invalidate()}),v.refetchQueries(R,I)})},t.refetchQueries=function(n,o,i){var c=this,d=m1(n,o,i),h=d[0],v=d[1],w=to.batch(function(){return c.queryCache.findAll(h).map(function(I){return I.fetch(void 0,Kr({},v,{meta:{refetchPage:h?.refetchPage}}))})}),_=Promise.all(w).then(Xi);return v?.throwOnError||(_=_.catch(Xi)),_},t.fetchQuery=function(n,o,i){var c=DP(n,o,i),d=this.defaultQueryOptions(c);typeof d.retry>"u"&&(d.retry=!1);var h=this.queryCache.build(this,d);return h.isStaleByTime(d.staleTime)?h.fetch(d):Promise.resolve(h.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=DP(n,o,i);return c.behavior=JMe(),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=to.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 D3(n)===D3(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 R$(n,i.queryKey)}))==null?void 0:o.defaultOptions:void 0},t.setMutationDefaults=function(n,o){var i=this.mutationDefaults.find(function(c){return D3(n)===D3(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 R$(n,i.mutationKey)}))==null?void 0:o.defaultOptions:void 0},t.defaultQueryOptions=function(n){if(n?._defaulted)return n;var o=Kr({},this.defaultOptions.queries,this.getQueryDefaults(n?.queryKey),n,{_defaulted:!0});return!o.queryHash&&o.queryKey&&(o.queryHash=A$(o.queryKey,o)),o},t.defaultQueryObserverOptions=function(n){return this.defaultQueryOptions(n)},t.defaultMutationOptions=function(n){return n?._defaulted?n:Kr({},this.defaultOptions.mutations,this.getMutationDefaults(n?.mutationKey),n,{_defaulted:!0})},t.clear=function(){this.queryCache.clear(),this.mutationCache.clear()},e}();var yve=function(e){dc(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),XMe(this.currentQuery,this.options)&&this.executeFetch(),this.updateTimers())},r.onUnsubscribe=function(){this.listeners.length||this.destroy()},r.shouldFetchOnReconnect=function(){return gve(this.currentQuery,this.options,this.options.refetchOnReconnect)},r.shouldFetchOnWindowFocus=function(){return gve(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,d=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 h=this.hasListeners();h&&KMe(this.currentQuery,d,this.options,c)&&this.executeFetch(),this.updateResult(i),h&&(this.currentQuery!==d||this.options.enabled!==c.enabled||this.options.staleTime!==c.staleTime)&&this.updateStaleTimeout();var v=this.computeRefetchInterval();h&&(this.currentQuery!==d||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,d={},h=function(w){c.trackedProps.includes(w)||c.trackedProps.push(w)};return Object.keys(o).forEach(function(v){Object.defineProperty(d,v,{configurable:!1,enumerable:!0,get:function(){return h(v),o[v]}})}),(i.useErrorBoundary||i.suspense)&&h("error"),d},r.getNextResult=function(o){var i=this;return new Promise(function(c,d){var h=i.subscribe(function(v){v.isFetching||(h(),v.isError&&o?.throwOnError?d(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(Kr({},o,{meta:{refetchPage:o?.refetchPage}}))},r.fetchOptimistic=function(o){var i=this,c=this.client.defaultQueryObserverOptions(o),d=this.client.getQueryCache().build(this.client,c);return d.fetch().then(function(){return i.createResult(d,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(),!(i_||this.currentResult.isStale||!M$(this.options.staleTime))){var i=nY(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,!(i_||this.options.enabled===!1||!M$(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,d=this.options,h=this.currentResult,v=this.currentResultState,w=this.currentResultOptions,_=o!==c,I=_?o.state:this.currentQueryInitialState,R=_?this.currentResult:this.previousQueryResult,D=o.state,F=D.dataUpdatedAt,A=D.error,N=D.errorUpdatedAt,H=D.isFetching,q=D.status,Y=!1,ee=!1,ne;if(i.optimisticResults){var te=this.hasListeners(),de=!te&&XMe(o,i),fe=te&&KMe(o,c,i,d);(de||fe)&&(H=!0,F||(q="loading"))}if(i.keepPreviousData&&!D.dataUpdateCount&&R?.isSuccess&&q!=="error")ne=R.data,F=R.dataUpdatedAt,q=R.status,Y=!0;else if(i.select&&typeof D.data<"u")if(h&&D.data===v?.data&&i.select===this.selectFn)ne=this.selectResult;else try{this.selectFn=i.select,ne=i.select(D.data),i.structuralSharing!==!1&&(ne=LP(h?.data,ne)),this.selectResult=ne,this.selectError=null}catch(he){a_().error(he),this.selectError=he}else ne=D.data;if(typeof i.placeholderData<"u"&&typeof ne>"u"&&(q==="loading"||q==="idle")){var ye;if(h?.isPlaceholderData&&i.placeholderData===w?.placeholderData)ye=h.data;else if(ye=typeof i.placeholderData=="function"?i.placeholderData():i.placeholderData,i.select&&typeof ye<"u")try{ye=i.select(ye),i.structuralSharing!==!1&&(ye=LP(h?.data,ye)),this.selectError=null}catch(he){a_().error(he),this.selectError=he}typeof ye<"u"&&(q="success",ne=ye,ee=!0)}this.selectError&&(A=this.selectError,ne=this.selectResult,N=Date.now(),q="error");var Ie={status:q,isLoading:q==="loading",isSuccess:q==="success",isError:q==="error",isIdle:q==="idle",data:ne,dataUpdatedAt:F,error:A,errorUpdatedAt:N,failureCount:D.fetchFailureCount,errorUpdateCount:D.errorUpdateCount,isFetched:D.dataUpdateCount>0||D.errorUpdateCount>0,isFetchedAfterMount:D.dataUpdateCount>I.dataUpdateCount||D.errorUpdateCount>I.errorUpdateCount,isFetching:H,isRefetching:H&&q!=="loading",isLoadingError:q==="error"&&D.dataUpdatedAt===0,isPlaceholderData:ee,isPreviousData:Y,isRefetchError:q==="error"&&D.dataUpdatedAt!==0,isStale:bve(o,i),refetch:this.refetch,remove:this.remove};return Ie},r.shouldNotifyListeners=function(o,i){if(!i)return!0;var c=this.options,d=c.notifyOnChangeProps,h=c.notifyOnChangePropsExclusions;if(!d&&!h||d==="tracked"&&!this.trackedProps.length)return!0;var v=d==="tracked"?this.trackedProps:d;return Object.keys(o).some(function(w){var _=w,I=o[_]!==i[_],R=v?.some(function(F){return F===w}),D=h?.some(function(F){return F===w});return I&&!D&&(!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,!zMe(this.currentResult,i)){var c={cache:!0};o?.listeners!==!1&&this.shouldNotifyListeners(this.currentResult,i)&&(c.listeners=!0),this.notify(Kr({},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"&&!FP(o.error)&&(i.onError=!0),this.updateResult(i),this.hasListeners()&&this.updateTimers()},r.notify=function(o){var i=this;to.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}(h1);function Iar(e,t){return t.enabled!==!1&&!e.state.dataUpdatedAt&&!(e.state.status==="error"&&t.retryOnMount===!1)}function XMe(e,t){return Iar(e,t)||e.state.dataUpdatedAt>0&&gve(e,t,t.refetchOnMount)}function gve(e,t,r){if(t.enabled!==!1){var n=typeof r=="function"?r(e):r;return n==="always"||n!==!1&&bve(e,t)}return!1}function KMe(e,t,r,n){return r.enabled!==!1&&(e!==t||n.enabled===!1)&&(!r.suspense||e.state.status!=="error")&&bve(e,r)}function bve(e,t){return e.isStaleByTime(t.staleTime)}var YMe=T(Do()),QMe=YMe.default.unstable_batchedUpdates;to.setBatchNotifyFunction(QMe);var eAe=console;vve(eAe);var N3=T(z()),tAe=N3.default.createContext(void 0),rAe=N3.default.createContext(!1);function nAe(e){return e&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=tAe),window.ReactQueryClientContext):tAe}var wve=function(){var t=N3.default.useContext(nAe(N3.default.useContext(rAe)));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;N3.default.useEffect(function(){return r.mount(),function(){r.unmount()}},[r]);var c=nAe(o);return N3.default.createElement(rAe.Provider,{value:o},N3.default.createElement(c.Provider,{value:r},i))};var Ove=T(z());function Ear(){var e=!1;return{clearReset:function(){e=!1},reset:function(){e=!0},isReset:function(){return e}}}var Par=Ove.default.createContext(Ear()),oAe=function(){return Ove.default.useContext(Par)};function iAe(e,t,r){return typeof t=="function"?t.apply(void 0,r):typeof t=="boolean"?t:!!e}var BP=T(z());function aAe(e,t){var r=BP.default.useRef(!1),n=BP.default.useState(0),o=n[1],i=wve(),c=oAe(),d=i.defaultQueryObserverOptions(e);d.optimisticResults=!0,d.onError&&(d.onError=to.batchCalls(d.onError)),d.onSuccess&&(d.onSuccess=to.batchCalls(d.onSuccess)),d.onSettled&&(d.onSettled=to.batchCalls(d.onSettled)),d.suspense&&(typeof d.staleTime!="number"&&(d.staleTime=1e3),d.cacheTime===0&&(d.cacheTime=1)),(d.suspense||d.useErrorBoundary)&&(c.isReset()||(d.retryOnMount=!1));var h=BP.default.useState(function(){return new t(i,d)}),v=h[0],w=v.getOptimisticResult(d);if(BP.default.useEffect(function(){r.current=!0,c.clearReset();var _=v.subscribe(to.batchCalls(function(){r.current&&o(function(I){return I+1})}));return v.updateResult(),function(){r.current=!1,_()}},[c,v]),BP.default.useEffect(function(){v.setOptions(d,{listeners:!1})},[d,v]),d.suspense&&w.isLoading)throw v.fetchOptimistic(d).then(function(_){var I=_.data;d.onSuccess==null||d.onSuccess(I),d.onSettled==null||d.onSettled(I,null)}).catch(function(_){c.clearReset(),d.onError==null||d.onError(_),d.onSettled==null||d.onSettled(void 0,_)});if(w.isError&&!c.isReset()&&!w.isFetching&&iAe(d.suspense,d.useErrorBoundary,[w.error,v.getCurrentQuery()]))throw w.error;return d.notifyOnChangeProps==="tracked"&&(w=v.trackResult(w,d)),w}function Qr(e,t,r){var n=DP(e,t,r);return aAe(n,yve)}var F3=T(z());function s_(e){return F3.default.createElement(F3.default.Fragment,null,F3.default.createElement("span",null,F3.default.createElement("button",{onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(e.ontologyId||"",void 0,void 0)}},F3.default.createElement(Il,{className:e.ontologyId?"breadcrumb clickable-breadcrumb":"breadcrumb",color:e.colorFirst||"primary"},e.ontologyName?e.ontologyName.toUpperCase():"No ontology name available")),"\xA0",F3.default.createElement(mr,{type:"arrowRight"}),"\xA0",F3.default.createElement(Il,{className:"breadcrumb",color:e.colorSecond||"success"},e.shortForm?e.shortForm.toUpperCase():"No short form available")))}function lAe(e){let{api:t,parameter:r,hasShortSelectedLabel:n,allowCustomTerms:o,selectionChangedEvent:i,preselected:c,placeholder:d,singleSelection:h,singleSuggestionRow:v,ts4nfdiGateway:w=!1,showApiSource:_=!0,...I}=e,R=new Jr(t),D=Wg(),F=jU(),[A,N]=(0,si.useState)(""),[H,q]=(0,si.useState)([]),[Y,ee]=(0,si.useState)([]),ne=(he,be)=>{let{label:Se,value:Te}=he,Pe=F.indexOf(Te.type==="class"?F[5]:Te.type==="individual"?F[3]:Te.type==="property"?F[1]:""),Ve=D[Pe];if(o&&Te.iri=="")return Se;let De=Te.type==="ontology"?"Prefix: "+Te.ontology_name:"Prefix > Short form: "+Te.ontology_name+" > "+Te.short_form,He=`Type: ${Te.type} +`])),pe("left",0),pe("width",0),pe("left",0),pe("width","40%"),pe("left","60%"),pe("width","40%"),pe("left","100%"),pe("width",0)),IMe=function(t){var r=t.euiTheme;return Q("position:relative;overflow:hidden;&::before{position:absolute;content:'';",pe("width","100%")," ",pe("height",r.border.width.thick)," background-color:",r.colors.primary,";animation:",Gir," 1s linear infinite;",QG,"{animation-duration:2s;}};label:euiBasicTableBodyLoading;")},EMe={name:"6xbnw4-safariLoadingWorkaround",styles:"position:relative;label:safariLoadingWorkaround;"};var Jir=["className","loading","items","itemId","columns","pagination","sorting","selection","onChange","error","noItemsMessage","compressed","itemIdToExpandedRowMap","responsiveBreakpoint","rowProps","cellProps","tableCaption","rowHeader","tableLayout"],Xir=["align","render","dataType","isExpander","textOnly","name","field","description","sortable","footer","mobileOptions"];function AP(e){"@babel/helpers - typeof";return AP=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},AP(e)}function Kir(e){return ear(e)||Qir(e)||AMe(e)||Yir()}function Yir(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Qir(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function ear(e){if(Array.isArray(e))return uve(e)}function A3(){return A3=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function tar(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 kMe(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 Al(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&n.state.selection.length===h.length,w=!v&&n.state.selection&&h.length>0&&n.state.selection.length>0,_=h.length===0,I=function(D){D.target.checked&&!w?n.changeSelection(h):n.changeSelection([])};return l(Zt,{tokens:["euiBasicTable.selectAllRows","euiBasicTable.deselectRows"],defaults:["Select all rows","Deselect rows"]},function(R){var D=jMe(R,2),F=D[0],A=D[1];return l(a$,{id:n.selectAllIdGenerator(),checked:v,indeterminate:w,disabled:_,onChange:I,"data-test-subj":"checkboxSelectAll","aria-label":v||w?A:F,title:v||w?A:F,label:o?F:null})})}}),ly(n,"renderCopyChar",function(o){var i=o===n.props.columns.length-1;return i?Zg.hiddenNewline:Zg.hiddenTab}),ly(n,"resolveColumnSortDirection",function(o){var i=n.props.sorting,c=o,d=c.sortable,h=c.field,v=c.name;if(!(!i||!i.sort||!d)&&(i.sort.field===h||i.sort.field===v))return i.sort.direction}),ly(n,"resolveColumnOnSort",function(o){var i=n.props.sorting,c=o,d=c.sortable,h=c.name;if(!(!i||!d)){if(!n.props.onChange)throw new Error("BasicTable is configured to be sortable on column [".concat(h,`] 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 car(t,e),aar(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:P3.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 MMe(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=Al(Al({},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=Al(Al({},o),{},{page:Al(Al({},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=Hd.ASC;o&&o.sort&&(o.sort.field===n.field||o.sort.field===n.name)&&(i=Hd.reverse(o.sort.direction));var c=Al(Al({},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,d=n.itemId,h=n.columns,v=n.pagination,w=n.sorting,_=n.selection,I=n.onChange,R=n.error,D=n.noItemsMessage,F=n.compressed,A=n.itemIdToExpandedRowMap,N=n.responsiveBreakpoint,H=n.rowProps,q=n.cellProps,Y=n.tableCaption,ee=n.rowHeader,ne=n.tableLayout,te=PMe(n,Jir),de=(0,LMe.default)("euiBasicTable",{"euiBasicTable-loading":i},o),fe=this.renderTable(),ye=this.renderPaginationBar();return l("div",A3({className:de},te),fe,ye)}},{key:"renderTable",value:function(){var n=this.props,o=n.compressed,i=n.responsiveBreakpoint,c=n.tableLayout,d=n.loading;return l(RP.default.Fragment,null,l(XK,{responsiveBreakpoint:i},this.renderSelectAll(!0),this.renderTableMobileSort()),l(Yne,null,l(VK,{id:this.tableId,tableLayout:c,responsiveBreakpoint:i,compressed:o,css:d&&EMe},this.renderTableCaption(),this.renderTableHead(),this.renderTableBody(),this.renderTableFooter())))}},{key:"renderTableMobileSort",value:function(){var n=this,o=this.props,i=o.columns,c=o.sorting,d=[];return c?(i.forEach(function(h,v){var w;if(h.field&&c.sort&&c.enableAllColumns&&h.sortable==null&&(h=Al(Al({},h),{},{sortable:!0})),!(!h.sortable||((w=h)===null||w===void 0||(w=w.mobileOptions)===null||w===void 0?void 0:w.show)===!1)){var _=n.resolveColumnSortDirection(h);d.push({name:h.name,key:"_data_s_".concat(String(h.field),"_").concat(v),onSort:n.resolveColumnOnSort(h),isSorted:!!_,isSortAscending:_?Hd.isAsc(_):void 0})}}),d.length?l(QK,{items:d}):null):null}},{key:"renderTableCaption",value:function(){var n=this.props,o=n.items,i=n.pagination,c=n.tableCaption,d=o.length,h=i?i.totalItemCount:d,v=i?i.pageIndex+1:1,w=i?Math.ceil(i.totalItemCount/this.pageSize):1,_;return c?i?_=l(Zt,{token:"euiBasicTable.tableCaptionWithPagination",default:"{tableCaption}; Page {page} of {pageCount}.",values:{tableCaption:c,page:v,pageCount:w}}):_=c:i?i.totalItemCount>0?_=l(Zt,{token:"euiBasicTable.tableAutoCaptionWithPagination",default:"This table contains {itemCount} rows out of {totalItemCount} rows; Page {page} of {pageCount}.",values:{totalItemCount:h,itemCount:d,page:v,pageCount:w}}):_=l(Zt,{token:"euiBasicTable.tableSimpleAutoCaptionWithPagination",default:"This table contains {itemCount} rows; Page {page} of {pageCount}.",values:{itemCount:d,page:v,pageCount:w}}):_=l(Zt,{token:"euiBasicTable.tableAutoCaptionWithoutPagination",default:"This table contains {itemCount} rows.",values:{itemCount:d}}),l(ko,null,l("caption",{css:HCe,className:"euiTableCaption"},Zg.hiddenNoCopyBoundary,l(b$,null,_),Zg.hiddenNoCopyBoundary))}},{key:"renderTableHead",value:function(){var n=this,o=this.props,i=o.columns,c=o.selection,d=[];return c&&d.push(l(JK,{key:"_selection_column_h",append:this.renderCopyChar(-1)},this.renderSelectAll(!1))),i.forEach(function(h,v){var w=h,_=w.field,I=w.width,R=w.name,D=w.align,F=w.dataType,A=w.sortable,N=w.mobileOptions,H=w.readOnly,q=w.description,Y=D||n.getAlignForDataType(F),ee={width:I,description:q,mobileOptions:N,align:Y,append:n.renderCopyChar(v)};if(h.actions){d.push(l(kP,A3({},ee,{key:"_actions_h_".concat(v),align:"right"}),R));return}if(!h.field){var ne={};if(n.props.sorting&&typeof A=="function"){var te=n.resolveColumnSortDirection(h);ne.isSorted=!!te,ne.isSortAscending=te?Hd.isAsc(te):void 0,ne.onSort=n.resolveColumnOnSort(h),ne.readOnly=n.props.sorting.readOnly||H}d.push(l(kP,A3({},ee,{key:"_computed_column_h_".concat(v),"data-test-subj":"tableHeaderCell_".concat(typeof R=="string"?R:"","_").concat(v)},ne),R));return}var de={};if(n.props.sorting){n.props.sorting.sort&&n.props.sorting.enableAllColumns&&h.sortable==null&&(h=Al(Al({},h),{},{sortable:!0}));var fe=h,ye=fe.sortable;if(ye){var Ie=n.resolveColumnSortDirection(h);de.isSorted=!!Ie,de.isSortAscending=Ie?Hd.isAsc(Ie):void 0,de.onSort=n.resolveColumnOnSort(h),de.readOnly=n.props.sorting.readOnly||H}}d.push(l(kP,A3({},ee,{key:"_data_h_".concat(String(_),"_").concat(v),"data-test-subj":"tableHeaderCell_".concat(String(_),"_").concat(v)},de),R))}),l(GK,null,d)}},{key:"renderTableFooter",value:function(){var n=this.props,o=n.items,i=n.columns,c=n.pagination,d=n.selection,h=[],v=!1;return d&&h.push(l(PP,{key:"_selection_column_f"},void 0)),i.forEach(function(w){var _=har(w,{items:o,pagination:c}),I=w,R=I.mobileOptions,D=I.field,F=I.align;R!=null&&R.only||(_?(h.push(l(PP,{key:"footer_".concat(String(D),"_").concat(h.length-1),align:F},_)),v=!0):h.push(l(PP,{key:"footer_empty_".concat(h.length-1),align:F},void 0)))}),h.length&&v?l(ZK,null,h):null}},{key:"renderTableBody",value:function(){var n=this,o=this.props,i=o.error,c=o.loading,d=o.items,h;return i?h=this.renderErrorMessage(i):d.length===0?h=this.renderEmptyMessage():h=d.map(function(v,w){var _=MMe(n.props)&&n.pageSize>0?n.props.pagination.pageIndex*n.pageSize+w:w;return n.renderItemRow(v,_,w)}),l(hA,null,function(v){return l($K,{css:c&&IMe(v)},h)})}},{key:"renderErrorMessage",value:function(n){var o=this.props.columns.length+(this.props.selection?1:0);return l(o_,null,l(M3,{align:"center",colSpan:o,mobileOptions:{width:"100%"}},l(mr,{type:"minusInCircle",color:"danger"})," ",n))}},{key:"renderEmptyMessage",value:function(){var n=this.props,o=n.columns,i=n.selection,c=n.noItemsMessage,d=o.length+(i?1:0);return l(o_,null,l(M3,{align:"center",colSpan:d,mobileOptions:{width:"100%"}},c))}},{key:"renderItemRow",value:function(n,o,i){var c=this,d=this.props,h=d.columns,v=d.selection,w=d.rowHeader,_=d.itemIdToExpandedRowMap,I=[],R=this.props.itemId,D=MP(n,R)!=null?MP(n,R):o,F=v?this.state.selection&&!!this.state.selection.find(function(be){return MP(be,R)===D}):!1,A=!1;if(v){var N=this.renderItemSelectionCell(D,n,F,i),H=jMe(N,2),q=H[0],Y=H[1];I.push(q),A=!!Y}var ee=!1;h.forEach(function(be,Te){var Pe=be.actions;if(Pe){var Re=Pe.some(function(Ve){return!!Ve.render});I.push(c.renderItemActionsCell(D,n,be,Te,o,Re)),ee=!ee&&Re?"custom":!0}else if(be.field){var Ae=be;I.push(c.renderItemFieldDataCell(D,n,be,Te,Ae.field===w))}else I.push(c.renderItemComputedCell(D,n,be,Te))});var ne=v?h.length+1:h.length,te=h.reduce(function(be,Te){var Pe;return Te!=null&&(Pe=Te.mobileOptions)!==null&&Pe!==void 0&&Pe.only?be+1:be+0},0);ne=ne-te;var de=_?.hasOwnProperty(D),fe=de?"row_".concat(D,"_expansion"):void 0,ye=de?l(o_,{id:fe,isExpandedRow:!0,hasSelection:!!v},l(M3,{colSpan:ne,textOnly:!1,append:Zg.hiddenNewline},_[D])):void 0,Ie=this.props.rowProps,ve=dar(n,Ie),Oe=l(o_,A3({"aria-owns":fe,hasSelection:!!v,isSelectable:!A,isSelected:F,hasActions:ee,isExpandable:de},ve),I);return l(RP.Fragment,{key:"row_".concat(D)},Oe,ye)}},{key:"renderItemSelectionCell",value:function(n,o,i,c){var d=this,h=this.props.selection,v="_selection_column_".concat(n),w=i,_=h.selectable&&!h.selectable(o),I=h.selectableMessage&&h.selectableMessage(!_,o),R=function(F){if(F.target.checked)d.changeSelection([].concat(Kir(d.state.selection),[o]));else{var A=d.props.itemId;d.changeSelection(d.state.selection.reduce(function(N,H){return MP(H,A)!==n&&N.push(H),N},[]))}};return[l(tY,{key:v,append:this.renderCopyChar(-1)},l(Zt,{token:"euiBasicTable.selectThisRow",default:"Select row {index}",values:{index:c+1}},function(D){return l(a$,{id:"".concat(d.tableId).concat(v,"-checkbox"),disabled:_,checked:w,onChange:R,title:I||D,"aria-label":I||D,"data-test-subj":"checkboxSelectRow-".concat(n)})})),_]}},{key:"renderItemActionsCell",value:function(n,o,i,c,d,h){var v=this.state.selection.length>0,w=i.actions.filter(function(R){return!R.available||R.available(o)});if(w.length>2){if(v)w=[];else{var _=w.filter(function(R){return R.isPrimary});w=_.slice(0,2).map(function(R){return Al(Al({},R),{},{showOnHover:!0})})}w.push({name:"All actions",render:function(D){return l(vMe,{className:"euiBasicTable__collapsedActions",actions:i.actions,actionsDisabled:v,itemId:n,item:D,displayedRowIndex:d})}})}var I="record_actions_".concat(n,"_").concat(c);return l(M3,{key:I,align:"right",textOnly:!1,hasActions:h?"custom":!0,append:this.renderCopyChar(c)},l(OMe,{actions:w,actionsDisabled:v,itemId:n,item:o}))}},{key:"renderItemFieldDataCell",value:function(n,o,i,c,d){var h=i.field,v=i.render,w=i.dataType,_="_data_column_".concat(String(h),"_").concat(n,"_").concat(c),I=v||this.getRendererForDataType(w),R=GG(o,h),D=I(R,o);return this.renderItemCell(o,i,c,_,D,d)}},{key:"renderItemComputedCell",value:function(n,o,i,c){var d=i.render,h="_computed_column_".concat(n,"_").concat(c),v=d||this.getRendererForDataType(),w=v(o);return this.renderItemCell(o,i,c,h,w,!1)}},{key:"renderItemCell",value:function(n,o,i,c,d,h){var v,w,_=o,I=_.align,R=_.render,D=_.dataType,F=_.isExpander,A=_.textOnly,N=_.name,H=_.field,q=_.description,Y=_.sortable,ee=_.footer,ne=_.mobileOptions,te=PMe(_,Xir),de=I||this.getAlignForDataType(D),fe=this.props.cellProps,ye=far(n,o,fe);return l(M3,A3({key:c,align:de,isExpander:F,textOnly:A||!R,setScopeRow:h,mobileOptions:Al(Al({},ne),{},{render:ne==null||(v=ne.render)===null||v===void 0?void 0:v.call(ne,n),header:(w=ne?.header)!==null&&w!==void 0?w:N})},ye,te,{append:this.renderCopyChar(i)}),d)}},{key:"getRendererForDataType",value:function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",o=pve[n];if(!o)throw new Error("Unknown dataType [".concat(n,"]. The supported data types are [").concat(CMe.join(", "),"]"));return o.render}},{key:"getAlignForDataType",value:function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",o=pve[n];if(!o)throw new Error("Unknown dataType [".concat(n,"]. The supported data types are [").concat(CMe.join(", "),"]"));return o.align}},{key:"renderPaginationBar",value:function(){var n=this,o=this.props,i=o.error,c=o.pagination,d=o.tableCaption,h=o.onChange;if(!i&&c&&c.totalItemCount>0){if(!h)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 l(Zt,{token:"euiBasicTable.tablePagination",default:"Pagination for table: {tableCaption}",values:{tableCaption:d}},function(v){return l(_Me,{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,d=n.itemId,h=n.items,v=c.filter(function(I){return h.findIndex(function(R){return MP(R,d)===MP(I,d)})!==-1});if(v.length!==c.length){var w,_;return(w=(_=n.selection).onSelectionChange)===null||w===void 0||w.call(_,v),{selection:v}}return i?{selection:v}:null}}])}(RP.Component);ly(R3,"contextType",CV);ly(R3,"defaultProps",{tableLayout:"fixed",noItemsMessage:l(Zt,{token:"euiBasicTable.noItemsMessage",default:"No items found"})});R3.propTypes={className:Ge.default.string,"aria-label":Ge.default.string,"data-test-subj":Ge.default.string,css:Ge.default.any,itemId:Ge.default.oneOfType([Ge.default.string.isRequired,Ge.default.number.isRequired,Ge.default.func.isRequired]),itemIdToExpandedRowMap:Ge.default.shape({}),items:Ge.default.arrayOf(Ge.default.any.isRequired),cellProps:Ge.default.oneOfType([Ge.default.any.isRequired,Ge.default.func.isRequired]),columns:Ge.default.arrayOf(Ge.default.oneOfType([Ge.default.shape({field:Ge.default.oneOfType([Ge.default.any.isRequired,Ge.default.any.isRequired]).isRequired,name:Ge.default.node.isRequired,description:Ge.default.string,dataType:Ge.default.oneOf(["auto","string","number","boolean","date"]),width:Ge.default.string,sortable:Ge.default.oneOfType([Ge.default.bool.isRequired,Ge.default.func.isRequired]),readOnly:Ge.default.bool,align:Ge.default.any,textOnly:Ge.default.bool,truncateText:Ge.default.oneOfType([Ge.default.bool.isRequired,Ge.default.shape({lines:Ge.default.number.isRequired}).isRequired]),mobileOptions:Ge.default.shape({render:Ge.default.func}),render:Ge.default.func,footer:Ge.default.oneOfType([Ge.default.string.isRequired,Ge.default.element.isRequired,Ge.default.func.isRequired]),isExpander:Ge.default.bool,className:Ge.default.string,"aria-label":Ge.default.string,"data-test-subj":Ge.default.string,css:Ge.default.any}).isRequired,Ge.default.shape({className:Ge.default.string,"aria-label":Ge.default.string,"data-test-subj":Ge.default.string,css:Ge.default.any,render:Ge.default.func.isRequired,name:Ge.default.node,sortable:Ge.default.func}).isRequired,Ge.default.shape({actions:Ge.default.arrayOf(Ge.default.oneOfType([Ge.default.shape({type:Ge.default.oneOfType([Ge.default.oneOf(["button"]),Ge.default.oneOf(["icon"]).isRequired]),color:Ge.default.oneOfType([Ge.default.any.isRequired,Ge.default.func.isRequired]),name:Ge.default.oneOfType([Ge.default.node.isRequired,Ge.default.func.isRequired]).isRequired,description:Ge.default.oneOfType([Ge.default.string.isRequired,Ge.default.func.isRequired]).isRequired,onClick:Ge.default.func,href:Ge.default.oneOfType([Ge.default.string.isRequired,Ge.default.func.isRequired]),target:Ge.default.string,available:Ge.default.func,enabled:Ge.default.func,"data-test-subj":Ge.default.oneOfType([Ge.default.string.isRequired,Ge.default.func.isRequired]),isPrimary:Ge.default.bool,showOnHover:Ge.default.bool,icon:Ge.default.oneOfType([Ge.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,Ge.default.func.isRequired])}).isRequired,Ge.default.shape({render:Ge.default.func.isRequired,available:Ge.default.func,enabled:Ge.default.func}).isRequired]).isRequired).isRequired,name:Ge.default.node}).isRequired]).isRequired),error:Ge.default.string,tableCaption:Ge.default.string,rowHeader:Ge.default.string,loading:Ge.default.bool,noItemsMessage:Ge.default.node,onChange:Ge.default.func,pagination:Ge.default.oneOfType([Ge.default.oneOf([void 0]),Ge.default.shape({pageIndex:Ge.default.number.isRequired,pageSize:Ge.default.number,totalItemCount:Ge.default.number.isRequired,pageSizeOptions:Ge.default.arrayOf(Ge.default.number.isRequired),showPerPageOptions:Ge.default.bool})]),rowProps:Ge.default.oneOfType([Ge.default.any.isRequired,Ge.default.func.isRequired]),selection:Ge.default.shape({onSelectionChange:Ge.default.func,selectable:Ge.default.func,selectableMessage:Ge.default.func,initialSelected:Ge.default.arrayOf(Ge.default.any.isRequired),selected:Ge.default.arrayOf(Ge.default.any.isRequired)}),sorting:Ge.default.shape({sort:Ge.default.shape({field:Ge.default.any.isRequired,direction:Ge.default.oneOf(["asc","desc"]).isRequired}),allowNeutralSort:Ge.default.bool,enableAllColumns:Ge.default.bool,readOnly:Ge.default.bool}),tableLayout:Ge.default.oneOf(["fixed","auto"])};var m1=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 i_=typeof window>"u";function Xi(){}function FMe(e,t){return typeof e=="function"?e(t):e}function A$(e){return typeof e=="number"&&e>=0&&e!==1/0}function M$(e){return Array.isArray(e)?e:[e]}function oY(e,t){return Math.max(e+(t||0)-Date.now(),0)}function DP(e,t,r){return iY(e)?typeof t=="function"?Kr({},r,{queryKey:e,queryFn:t}):Kr({},t,{queryKey:e}):e}function v1(e,t,r){return iY(e)?[Kr({},t,{queryKey:e}),r]:[e||{},t]}function mar(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 fve(e,t){var r=e.active,n=e.exact,o=e.fetching,i=e.inactive,c=e.predicate,d=e.queryKey,h=e.stale;if(iY(d)){if(n){if(t.queryHash!==R$(d,t.options))return!1}else if(!D$(t.queryKey,d))return!1}var v=mar(r,i);if(v==="none")return!1;if(v!=="all"){var w=t.isActive();if(v==="active"&&!w||v==="inactive"&&w)return!1}return!(typeof h=="boolean"&&t.isStale()!==h||typeof o=="boolean"&&t.isFetching()!==o||c&&!c(t))}function hve(e,t){var r=e.exact,n=e.fetching,o=e.predicate,i=e.mutationKey;if(iY(i)){if(!t.options.mutationKey)return!1;if(r){if(D3(t.options.mutationKey)!==D3(i))return!1}else if(!D$(t.options.mutationKey,i))return!1}return!(typeof n=="boolean"&&t.state.status==="loading"!==n||o&&!o(t))}function R$(e,t){var r=t?.queryKeyHashFn||D3;return r(e)}function D3(e){var t=M$(e);return gar(t)}function gar(e){return JSON.stringify(e,function(t,r){return dve(r)?Object.keys(r).sort().reduce(function(n,o){return n[o]=r[o],n},{}):r})}function D$(e,t){return BMe(M$(e),M$(t))}function BMe(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!BMe(e[r],t[r])}):!1}function LP(e,t){if(e===t)return e;var r=Array.isArray(e)&&Array.isArray(t);if(r||dve(e)&&dve(t)){for(var n=r?e.length:Object.keys(e).length,o=r?t:Object.keys(t),i=o.length,c=r?[]:{},d=0,h=0;h"u")return!0;var r=t.prototype;return!(!NMe(r)||!r.hasOwnProperty("isPrototypeOf"))}function NMe(e){return Object.prototype.toString.call(e)==="[object Object]"}function iY(e){return typeof e=="string"||Array.isArray(e)}function WMe(e){return new Promise(function(t){setTimeout(t,e)})}function mve(e){Promise.resolve().then(e).catch(function(t){return setTimeout(function(){throw t})})}function aY(){if(typeof AbortController=="function")return new AbortController}var yar=function(e){dc(t,e);function t(){var n;return n=e.call(this)||this,n.setup=function(o){var i;if(!i_&&((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(d){typeof d=="boolean"?c.setFocused(d):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}(m1),L3=new yar;var bar=function(e){dc(t,e);function t(){var n;return n=e.call(this)||this,n.setup=function(o){var i;if(!i_&&((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(d){typeof d=="boolean"?c.setOnline(d):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}(m1),NP=new bar;function war(e){return Math.min(1e3*Math.pow(2,e),3e4)}function L$(e){return typeof e?.cancel=="function"}var HMe=function(t){this.revert=t?.revert,this.silent=t?.silent};function FP(e){return e instanceof HMe}var sY=function(t){var r=this,n=!1,o,i,c,d;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,d=R});var h=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?.(),d(R))},w=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(D){R=Promise.reject(D)}o=function(F){if(!r.isResolved&&(v(new HMe(F)),r.abort==null||r.abort(),L$(R)))try{R.cancel()}catch{}},r.isTransportCancelable=L$(R),Promise.resolve(R).then(h).catch(function(D){var F,A;if(!r.isResolved){var N=(F=t.retry)!=null?F:3,H=(A=t.retryDelay)!=null?A:war,q=typeof H=="function"?H(r.failureCount,D):H,Y=N===!0||typeof N=="number"&&r.failureCount"u"&&(d.exact=!0),this.queries.find(function(h){return fve(d,h)})},r.findAll=function(o,i){var c=v1(o,i),d=c[0];return Object.keys(d).length>0?this.queries.filter(function(h){return fve(d,h)}):this.queries},r.notify=function(o){var i=this;to.batch(function(){i.listeners.forEach(function(c){c(o)})})},r.onFocus=function(){var o=this;to.batch(function(){o.queries.forEach(function(i){i.onFocus()})})},r.onOnline=function(){var o=this;to.batch(function(){o.queries.forEach(function(i){i.onOnline()})})},t}(m1);var qMe=function(){function e(r){this.options=Kr({},r.defaultOptions,r.options),this.mutationId=r.mutationId,this.mutationCache=r.mutationCache,this.observers=[],this.state=r.state||xar(),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(d){d!==n.state.context&&n.dispatch({type:"loading",context:d,variables:n.state.variables})})),c.then(function(){return n.executeMutation()}).then(function(d){o=d,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(d){return n.mutationCache.config.onError==null||n.mutationCache.config.onError(d,n.state.variables,n.state.context,n),a_().error(d),Promise.resolve().then(function(){return n.options.onError==null?void 0:n.options.onError(d,n.state.variables,n.state.context)}).then(function(){return n.options.onSettled==null?void 0:n.options.onSettled(void 0,d,n.state.variables,n.state.context)}).then(function(){throw n.dispatch({type:"error",error:d}),d})})},t.executeMutation=function(){var n=this,o;return this.retryer=new sY({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=_ar(this.state,n),to.batch(function(){o.observers.forEach(function(i){i.onMutationUpdate(n)}),o.mutationCache.notify(o)})},e}();function xar(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}function _ar(e,t){switch(t.type){case"failed":return Kr({},e,{failureCount:e.failureCount+1});case"pause":return Kr({},e,{isPaused:!0});case"continue":return Kr({},e,{isPaused:!1});case"loading":return Kr({},e,{context:t.context,data:void 0,error:null,isPaused:!1,status:"loading",variables:t.variables});case"success":return Kr({},e,{data:t.data,error:null,status:"success",isPaused:!1});case"error":return Kr({},e,{data:void 0,error:t.error,failureCount:e.failureCount+1,isPaused:!1,status:"error"});case"setState":return Kr({},e,t.state);default:return e}}var UMe=function(e){dc(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 d=new qMe({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(d),d},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;to.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 hve(o,i)})},r.findAll=function(o){return this.mutations.filter(function(i){return hve(o,i)})},r.notify=function(o){var i=this;to.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 to.batch(function(){return o.reduce(function(i,c){return i.then(function(){return c.continue().catch(Xi)})},Promise.resolve())})},t}(m1);function JMe(){return{onFetch:function(t){t.fetchFn=function(){var r,n,o,i,c,d,h=(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,w=v?.pageParam,_=v?.direction==="forward",I=v?.direction==="backward",R=((c=t.state.data)==null?void 0:c.pages)||[],D=((d=t.state.data)==null?void 0:d.pageParams)||[],F=aY(),A=F?.signal,N=D,H=!1,q=t.options.queryFn||function(){return Promise.reject("Missing queryFn")},Y=function(be,Te,Pe,Re){return N=Re?[Te].concat(N):[].concat(N,[Te]),Re?[Pe].concat(be):[].concat(be,[Pe])},ee=function(be,Te,Pe,Re){if(H)return Promise.reject("Cancelled");if(typeof Pe>"u"&&!Te&&be.length)return Promise.resolve(be);var Ae={queryKey:t.queryKey,signal:A,pageParam:Pe,meta:t.meta},Ve=q(Ae),Je=Promise.resolve(Ve).then(function(Qe){return Y(be,Pe,Qe,Re)});if(L$(Ve)){var pt=Je;pt.cancel=Ve.cancel}return Je},ne;if(!R.length)ne=ee([]);else if(_){var te=typeof w<"u",de=te?w:GMe(t.options,R);ne=ee(R,te,de)}else if(I){var fe=typeof w<"u",ye=fe?w:Sar(t.options,R);ne=ee(R,fe,ye,!0)}else(function(){N=[];var Oe=typeof t.options.getNextPageParam>"u",be=h&&R[0]?h(R[0],0,R):!0;ne=be?ee([],Oe,D[0]):Promise.resolve(Y([],D[0],R[0]));for(var Te=function(Ae){ne=ne.then(function(Ve){var Je=h&&R[Ae]?h(R[Ae],Ae,R):!0;if(Je){var pt=Oe?D[Ae]:GMe(t.options,Ve);return ee(Ve,Oe,pt)}return Promise.resolve(Y(Ve,D[Ae],R[Ae]))})},Pe=1;Pe"u"&&(w.revert=!0);var _=to.batch(function(){return c.queryCache.findAll(h).map(function(I){return I.cancel(w)})});return Promise.all(_).then(Xi).catch(Xi)},t.invalidateQueries=function(n,o,i){var c,d,h,v=this,w=v1(n,o,i),_=w[0],I=w[1],R=Kr({},_,{active:(c=(d=_.refetchActive)!=null?d:_.active)!=null?c:!0,inactive:(h=_.refetchInactive)!=null?h:!1});return to.batch(function(){return v.queryCache.findAll(_).forEach(function(D){D.invalidate()}),v.refetchQueries(R,I)})},t.refetchQueries=function(n,o,i){var c=this,d=v1(n,o,i),h=d[0],v=d[1],w=to.batch(function(){return c.queryCache.findAll(h).map(function(I){return I.fetch(void 0,Kr({},v,{meta:{refetchPage:h?.refetchPage}}))})}),_=Promise.all(w).then(Xi);return v?.throwOnError||(_=_.catch(Xi)),_},t.fetchQuery=function(n,o,i){var c=DP(n,o,i),d=this.defaultQueryOptions(c);typeof d.retry>"u"&&(d.retry=!1);var h=this.queryCache.build(this,d);return h.isStaleByTime(d.staleTime)?h.fetch(d):Promise.resolve(h.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=DP(n,o,i);return c.behavior=JMe(),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=to.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 D3(n)===D3(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 D$(n,i.queryKey)}))==null?void 0:o.defaultOptions:void 0},t.setMutationDefaults=function(n,o){var i=this.mutationDefaults.find(function(c){return D3(n)===D3(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 D$(n,i.mutationKey)}))==null?void 0:o.defaultOptions:void 0},t.defaultQueryOptions=function(n){if(n?._defaulted)return n;var o=Kr({},this.defaultOptions.queries,this.getQueryDefaults(n?.queryKey),n,{_defaulted:!0});return!o.queryHash&&o.queryKey&&(o.queryHash=R$(o.queryKey,o)),o},t.defaultQueryObserverOptions=function(n){return this.defaultQueryOptions(n)},t.defaultMutationOptions=function(n){return n?._defaulted?n:Kr({},this.defaultOptions.mutations,this.getMutationDefaults(n?.mutationKey),n,{_defaulted:!0})},t.clear=function(){this.queryCache.clear(),this.mutationCache.clear()},e}();var yve=function(e){dc(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),XMe(this.currentQuery,this.options)&&this.executeFetch(),this.updateTimers())},r.onUnsubscribe=function(){this.listeners.length||this.destroy()},r.shouldFetchOnReconnect=function(){return gve(this.currentQuery,this.options,this.options.refetchOnReconnect)},r.shouldFetchOnWindowFocus=function(){return gve(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,d=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 h=this.hasListeners();h&&KMe(this.currentQuery,d,this.options,c)&&this.executeFetch(),this.updateResult(i),h&&(this.currentQuery!==d||this.options.enabled!==c.enabled||this.options.staleTime!==c.staleTime)&&this.updateStaleTimeout();var v=this.computeRefetchInterval();h&&(this.currentQuery!==d||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,d={},h=function(w){c.trackedProps.includes(w)||c.trackedProps.push(w)};return Object.keys(o).forEach(function(v){Object.defineProperty(d,v,{configurable:!1,enumerable:!0,get:function(){return h(v),o[v]}})}),(i.useErrorBoundary||i.suspense)&&h("error"),d},r.getNextResult=function(o){var i=this;return new Promise(function(c,d){var h=i.subscribe(function(v){v.isFetching||(h(),v.isError&&o?.throwOnError?d(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(Kr({},o,{meta:{refetchPage:o?.refetchPage}}))},r.fetchOptimistic=function(o){var i=this,c=this.client.defaultQueryObserverOptions(o),d=this.client.getQueryCache().build(this.client,c);return d.fetch().then(function(){return i.createResult(d,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(),!(i_||this.currentResult.isStale||!A$(this.options.staleTime))){var i=oY(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,!(i_||this.options.enabled===!1||!A$(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,d=this.options,h=this.currentResult,v=this.currentResultState,w=this.currentResultOptions,_=o!==c,I=_?o.state:this.currentQueryInitialState,R=_?this.currentResult:this.previousQueryResult,D=o.state,F=D.dataUpdatedAt,A=D.error,N=D.errorUpdatedAt,H=D.isFetching,q=D.status,Y=!1,ee=!1,ne;if(i.optimisticResults){var te=this.hasListeners(),de=!te&&XMe(o,i),fe=te&&KMe(o,c,i,d);(de||fe)&&(H=!0,F||(q="loading"))}if(i.keepPreviousData&&!D.dataUpdateCount&&R?.isSuccess&&q!=="error")ne=R.data,F=R.dataUpdatedAt,q=R.status,Y=!0;else if(i.select&&typeof D.data<"u")if(h&&D.data===v?.data&&i.select===this.selectFn)ne=this.selectResult;else try{this.selectFn=i.select,ne=i.select(D.data),i.structuralSharing!==!1&&(ne=LP(h?.data,ne)),this.selectResult=ne,this.selectError=null}catch(ve){a_().error(ve),this.selectError=ve}else ne=D.data;if(typeof i.placeholderData<"u"&&typeof ne>"u"&&(q==="loading"||q==="idle")){var ye;if(h?.isPlaceholderData&&i.placeholderData===w?.placeholderData)ye=h.data;else if(ye=typeof i.placeholderData=="function"?i.placeholderData():i.placeholderData,i.select&&typeof ye<"u")try{ye=i.select(ye),i.structuralSharing!==!1&&(ye=LP(h?.data,ye)),this.selectError=null}catch(ve){a_().error(ve),this.selectError=ve}typeof ye<"u"&&(q="success",ne=ye,ee=!0)}this.selectError&&(A=this.selectError,ne=this.selectResult,N=Date.now(),q="error");var Ie={status:q,isLoading:q==="loading",isSuccess:q==="success",isError:q==="error",isIdle:q==="idle",data:ne,dataUpdatedAt:F,error:A,errorUpdatedAt:N,failureCount:D.fetchFailureCount,errorUpdateCount:D.errorUpdateCount,isFetched:D.dataUpdateCount>0||D.errorUpdateCount>0,isFetchedAfterMount:D.dataUpdateCount>I.dataUpdateCount||D.errorUpdateCount>I.errorUpdateCount,isFetching:H,isRefetching:H&&q!=="loading",isLoadingError:q==="error"&&D.dataUpdatedAt===0,isPlaceholderData:ee,isPreviousData:Y,isRefetchError:q==="error"&&D.dataUpdatedAt!==0,isStale:bve(o,i),refetch:this.refetch,remove:this.remove};return Ie},r.shouldNotifyListeners=function(o,i){if(!i)return!0;var c=this.options,d=c.notifyOnChangeProps,h=c.notifyOnChangePropsExclusions;if(!d&&!h||d==="tracked"&&!this.trackedProps.length)return!0;var v=d==="tracked"?this.trackedProps:d;return Object.keys(o).some(function(w){var _=w,I=o[_]!==i[_],R=v?.some(function(F){return F===w}),D=h?.some(function(F){return F===w});return I&&!D&&(!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,!zMe(this.currentResult,i)){var c={cache:!0};o?.listeners!==!1&&this.shouldNotifyListeners(this.currentResult,i)&&(c.listeners=!0),this.notify(Kr({},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"&&!FP(o.error)&&(i.onError=!0),this.updateResult(i),this.hasListeners()&&this.updateTimers()},r.notify=function(o){var i=this;to.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}(m1);function Iar(e,t){return t.enabled!==!1&&!e.state.dataUpdatedAt&&!(e.state.status==="error"&&t.retryOnMount===!1)}function XMe(e,t){return Iar(e,t)||e.state.dataUpdatedAt>0&&gve(e,t,t.refetchOnMount)}function gve(e,t,r){if(t.enabled!==!1){var n=typeof r=="function"?r(e):r;return n==="always"||n!==!1&&bve(e,t)}return!1}function KMe(e,t,r,n){return r.enabled!==!1&&(e!==t||n.enabled===!1)&&(!r.suspense||e.state.status!=="error")&&bve(e,r)}function bve(e,t){return e.isStaleByTime(t.staleTime)}var YMe=T(Do()),QMe=YMe.default.unstable_batchedUpdates;to.setBatchNotifyFunction(QMe);var eAe=console;vve(eAe);var N3=T(z()),tAe=N3.default.createContext(void 0),rAe=N3.default.createContext(!1);function nAe(e){return e&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=tAe),window.ReactQueryClientContext):tAe}var wve=function(){var t=N3.default.useContext(nAe(N3.default.useContext(rAe)));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;N3.default.useEffect(function(){return r.mount(),function(){r.unmount()}},[r]);var c=nAe(o);return N3.default.createElement(rAe.Provider,{value:o},N3.default.createElement(c.Provider,{value:r},i))};var Ove=T(z());function Ear(){var e=!1;return{clearReset:function(){e=!1},reset:function(){e=!0},isReset:function(){return e}}}var Par=Ove.default.createContext(Ear()),oAe=function(){return Ove.default.useContext(Par)};function iAe(e,t,r){return typeof t=="function"?t.apply(void 0,r):typeof t=="boolean"?t:!!e}var BP=T(z());function aAe(e,t){var r=BP.default.useRef(!1),n=BP.default.useState(0),o=n[1],i=wve(),c=oAe(),d=i.defaultQueryObserverOptions(e);d.optimisticResults=!0,d.onError&&(d.onError=to.batchCalls(d.onError)),d.onSuccess&&(d.onSuccess=to.batchCalls(d.onSuccess)),d.onSettled&&(d.onSettled=to.batchCalls(d.onSettled)),d.suspense&&(typeof d.staleTime!="number"&&(d.staleTime=1e3),d.cacheTime===0&&(d.cacheTime=1)),(d.suspense||d.useErrorBoundary)&&(c.isReset()||(d.retryOnMount=!1));var h=BP.default.useState(function(){return new t(i,d)}),v=h[0],w=v.getOptimisticResult(d);if(BP.default.useEffect(function(){r.current=!0,c.clearReset();var _=v.subscribe(to.batchCalls(function(){r.current&&o(function(I){return I+1})}));return v.updateResult(),function(){r.current=!1,_()}},[c,v]),BP.default.useEffect(function(){v.setOptions(d,{listeners:!1})},[d,v]),d.suspense&&w.isLoading)throw v.fetchOptimistic(d).then(function(_){var I=_.data;d.onSuccess==null||d.onSuccess(I),d.onSettled==null||d.onSettled(I,null)}).catch(function(_){c.clearReset(),d.onError==null||d.onError(_),d.onSettled==null||d.onSettled(void 0,_)});if(w.isError&&!c.isReset()&&!w.isFetching&&iAe(d.suspense,d.useErrorBoundary,[w.error,v.getCurrentQuery()]))throw w.error;return d.notifyOnChangeProps==="tracked"&&(w=v.trackResult(w,d)),w}function Qr(e,t,r){var n=DP(e,t,r);return aAe(n,yve)}var F3=T(z());function s_(e){return F3.default.createElement(F3.default.Fragment,null,F3.default.createElement("span",null,F3.default.createElement("button",{onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(e.ontologyId||"",void 0,void 0)}},F3.default.createElement(Il,{className:e.ontologyId?"breadcrumb clickable-breadcrumb":"breadcrumb",color:e.colorFirst||"primary"},e.ontologyName?e.ontologyName.toUpperCase():"No ontology name available")),"\xA0",F3.default.createElement(mr,{type:"arrowRight"}),"\xA0",F3.default.createElement(Il,{className:"breadcrumb",color:e.colorSecond||"success"},e.shortForm?e.shortForm.toUpperCase():"No short form available")))}function lAe(e){let{api:t,parameter:r,hasShortSelectedLabel:n,allowCustomTerms:o,selectionChangedEvent:i,preselected:c,placeholder:d,singleSelection:h,singleSuggestionRow:v,subTreeIris:w,ts4nfdiGateway:_=!1,showApiSource:I=!0,...R}=e,D=new Jr(t),F=Hg(),A=TU(),[N,H]=(0,si.useState)(""),[q,Y]=(0,si.useState)([]),[ee,ne]=(0,si.useState)([]),te=w?r+`&childrenOf=${w}`:r,de=(be,Te)=>{let{label:Pe,value:Re}=be,Ae=A.indexOf(Re.type==="class"?A[5]:Re.type==="individual"?A[3]:Re.type==="property"?A[1]:""),Ve=F[Ae];if(o&&Re.iri=="")return Pe;let Je=Re.type==="ontology"?"Prefix: "+Re.ontology_name:"Prefix > Short form: "+Re.ontology_name+" > "+Re.short_form,pt=`Type: ${Re.type} -Label: ${Te.label} +Label: ${Re.label} -${De}`;Te.description!=null&&(He+=` +${Je}`;Re.description!=null&&(pt+=` -Description: ${Te.description}`),_&&Te.source_url&&Te.source_url!==""&&(He+=` +Description: ${Re.description}`),I&&Re.source_url&&Re.source_url!==""&&(pt+=` -Source: `+Te.source,He+=` +Source: `+Re.source,pt+=` -Source URL: `+Te.source_url);let Je=()=>si.default.createElement(b$,{color:Ve},si.default.createElement("span",null,si.default.createElement(l1,{search:be},Te.label),si.default.createElement("br",null),Te.description)),vt=()=>si.default.createElement("span",{title:He,style:{height:"200px"}},si.default.createElement(b$,{color:Ve},si.default.createElement("span",null,si.default.createElement(l1,{search:be},Te.label),"\xA0\xA0\xA0\xA0\xA0",si.default.createElement(s_,{ontologyName:Te.ontology_name,shortForm:Te.short_form,colorFirst:"primary",colorSecond:"success"}),si.default.createElement(mr,{type:"iInCircle",style:{marginLeft:5},title:He}),!v&&Te.description&&si.default.createElement(si.default.Fragment,null,si.default.createElement("br",null),Te.description.substring(0,40)+"..."))));return Te.type==="ontology"?Je():vt()},{isLoading:te}=Qr(["onMount",c],async()=>{let he=[],be=[...new Set(c)].filter(Se=>o&&Se.label||Se.iri);if(be.length>0){h&&(be=[be[0]]);for(let Se of be)Se&&Se.iri&&Se.iri.startsWith("http")?await R.getSelectData({query:Se.iri},void 0,void 0,r,w).then(Te=>{Te&&(Te.properties.map(Pe=>{Se.iri===Pe.getIri()&&he.push({label:n?Pe.getLabel():fe(Pe),key:Pe.getIri(),value:{iri:Pe.getIri(),label:Pe.getLabel(),ontology_name:Pe.getOntologyId(),type:Pe.getType(),short_form:Pe.getShortForm(),description:Pe.getDescription(),source:Pe.getApiSourceName(),source_url:Pe.getApiSourceEndpoint()}})}),h&&he.length>1&&(he=[he[0]]))}):Se&&Se.label&&o&&he.push({label:Se.label,key:Se.label,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:"",source_url:""}});q(he),ee(he)}}),{isLoading:de}=Qr(["onSearchChange",A],async()=>{if(A.length>0)return R.getSelectData({query:A},void 0,void 0,r,w).then(he=>{he&&q(he.properties.map(be=>({label:n?be.getLabel():fe(be),key:be.getIri(),value:{iri:be.getIri(),label:be.getLabel(),ontology_name:be.getOntologyId(),type:be.getType(),short_form:be.getShortForm(),description:be.getDescription(),source:be.getApiSourceName(),source_url:be.getApiSourceEndpoint()}})))})});(0,si.useEffect)(()=>{i(Y.map(he=>o&&he.value.iri==""?{iri:"",label:he.label,ontology_name:"",type:"",short_form:he.value.short_form,description:he.value.description,source:he.value.source}:he.value.iri==""?{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:""}:{iri:he.value.iri,label:he.value.label,ontology_name:he.value.ontology_name,type:he.value.type,short_form:he.value.short_form,description:he.value.description,source:he.value.source}))},[Y]);function fe(he){return he.label+" ("+he.ontology_name.toUpperCase()+" "+he.short_form+")"}function ye(he){ee(he)}function Ie(he){let be={label:he,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:""}};q([...H,be]),ee(h?[be]:[...Y,be])}return si.default.createElement(Yx,{isClearable:!0,"aria-label":"searchBar",fullWidth:!0,...I,async:!0,isLoading:de||te,singleSelection:h?{asPlainText:!0}:!1,placeholder:d||"Search for a Concept",options:H,selectedOptions:Y,onSearchChange:N,onChange:ye,renderOption:ne,onCreateOption:o?Ie:void 0,rowHeight:v?30:50})}function uAe(e,t,r){sAe.default.render(kar(e),t,r)}function kar(e){let t=new Wr;return si.default.createElement(zr,{colorMode:"light"},si.default.createElement(Hr,{client:t},si.default.createElement(lAe,{api:e.api,parameter:e.parameter,selectionChangedEvent:e.selectionChangedEvent,preselected:e.preselected,singleSelection:e.singleSelection,placeholder:e.placeholder,hasShortSelectedLabel:e.hasShortSelectedLabel,allowCustomTerms:e.allowCustomTerms,ts4nfdiGateway:e.ts4nfdiGateway,singleSuggestionRow:e.singleSuggestionRow,showApiSource:e.showApiSource})))}var $a=T(z());var cAe=T(Do());function pAe(e){let{api:t,parameter:r,...n}=e,o=new Jr(t),{data:i,isLoading:c,isError:d,dataUpdatedAt:h}=Qr(["ontologiesData",t,r],async()=>o.getOntologiesData(e.parameter));return $a.default.createElement($a.default.Fragment,null,$a.default.createElement(fc,{title:"Data Content",description:h?`Updated ${new Date(h).toLocaleString()}`:"",layout:"horizontal"},$a.default.createElement(Xt,{...n},d&&$a.default.createElement(Xt,null,"No data content available"),c?$a.default.createElement(_r,{size:"s"}):$a.default.createElement("ul",null,i?.getTotalOntologies()?$a.default.createElement("li",null,i?.getTotalOntologies().toLocaleString()," ontologies and terminologies"):$a.default.createElement("li",{style:{fontStyle:"italic"}},"ontology number not available"),i?.getNumClasses()?$a.default.createElement("li",null,i?.getNumClasses().toLocaleString()," terms"):$a.default.createElement("li",{style:{fontStyle:"italic"}},"term number not available"),i?.getNumProperties()?$a.default.createElement("li",null,i?.getNumProperties().toLocaleString()," properties"):$a.default.createElement("li",{style:{fontStyle:"italic"}},"property number not available"),i?.getNumIndividuals()?$a.default.createElement("li",null,i?.getNumIndividuals().toLocaleString()," individuals"):$a.default.createElement("li",{style:{fontStyle:"italic"}},"individual number not available")," "))))}function dAe(e,t,r){cAe.default.render(jar(e),t,r)}function jar(e){let t=new Wr;return $a.default.createElement(zr,{colorMode:"light"},$a.default.createElement(Hr,{client:t},$a.default.createElement(pAe,{api:e.api,parameter:e.parameter})))}var ze=T(z());var Be=T(z());var L$=!0;function sY(e){return Be.default.createElement(LJ,{type:"iInCircle",color:"subdued",content:e})}function Tar(e,t){let r=Object.keys(t).map(n=>{let o=e.getLinkedEntities().getLabelForIri(n)||n;return o?"*"+t[n]+" ("+o+")":""}).join(` -`);return sY(r)}function mu(e,t,r,n=L$,o){let i=t.getLabelForIri(r)||r.split("/").pop()||r,c=t.get(r),d=e.getOntologyId();if(e.getType()!=="ontology"&&r===e?.getIri())return Be.default.createElement("span",{className:"highlight"},e.getLabel());if(!c)return r.startsWith("http")?Be.default.createElement("a",{className:"clickable",href:r},i):Be.default.createElement("span",null,i);let h=c.definedBy?c.definedBy.filter(w=>w!==d):[],v=c.type?Qq(c.type):e.getType();return h.length===1?c.hasLocalDefinition?Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(d,v,{iri:r,label:i})}},i),n?Be.default.createElement(Be.default.Fragment,null,"\xA0",Be.default.createElement("button",{className:"no-decoration",onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(h[0],v,{iri:r,label:i})}},Be.default.createElement("span",{className:"ontology-badge"},h[0].toUpperCase()))):Be.default.createElement(Be.default.Fragment,null)):Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(h[0],v,{iri:r,label:i})}},i),n?Be.default.createElement(Be.default.Fragment,null,"\xA0",Be.default.createElement("button",{className:"no-decoration",onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(h[0],v,{iri:r,label:i})}},Be.default.createElement("span",{className:"ontology-badge"},h[0].toUpperCase()))):Be.default.createElement(Be.default.Fragment,null)):h.length>1?c.hasLocalDefinition?Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(d,v,{iri:r,label:i})}},i),n?Be.default.createElement(Be.default.Fragment,null,"\xA0",h.map(w=>Be.default.createElement("button",{className:"no-decoration",key:xr(),onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(w,v,{iri:r,label:i})}},Be.default.createElement("span",{className:"ontology-badge"},w.toUpperCase())))):Be.default.createElement(Be.default.Fragment,null)):Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{className:"clickable",href:r},i),n?Be.default.createElement(Be.default.Fragment,null,"\xA0",Be.default.createElement("button",{className:"no-decoration",key:xr(),onClick:()=>{o.onNavigateToDisambiguate&&o.onNavigateToDisambiguate(v,{iri:r,label:i})}},Be.default.createElement("span",{className:"ontology-badge"},Be.default.createElement(mr,{type:"search",size:"s"}),"\xA0",h.length,"\xA0","ontologies"))):Be.default.createElement(Be.default.Fragment,null)):c.hasLocalDefinition?Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(d,v,{iri:r,label:i})}},i)):parseInt(c.numAppearsIn)>0?Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{className:"clickable",href:r},i),n?Be.default.createElement(Be.default.Fragment,null,"\xA0",Be.default.createElement("button",{className:"no-decoration",key:xr(),onClick:()=>{o.onNavigateToDisambiguate&&o.onNavigateToDisambiguate(v,{iri:r,label:i})}},Be.default.createElement("span",{className:"ontology-badge"},Be.default.createElement(mr,{type:"search",size:"s"}),"\xA0",c.numAppearsIn,"\xA0",parseInt(c.numAppearsIn)>1?"ontologies":"ontology"))):Be.default.createElement(Be.default.Fragment,null)):Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{className:"clickable",href:c.url||r},i))}function En(e,t,r,n=L$,o){let i=Be.default.createElement(Be.default.Fragment,null);if(t=t.mergeWith(r.linkedEntities),typeof r=="string")i=mu(e,t,r,n,o);else if(typeof r=="object"&&!Array.isArray(r)&&Array.isArray(r.type)&&r.type.indexOf("reification")!==-1)i=gc(e,kt.fromJson(r)[0],n,o);else{let c=r["http://www.w3.org/2002/07/owl#someValuesFrom"],d=r["http://www.w3.org/2002/07/owl#allValuesFrom"],h=ht(r["http://www.w3.org/2002/07/owl#intersectionOf"]),v=ht(r["http://www.w3.org/2002/07/owl#unionOf"]),w=r["http://www.w3.org/2002/07/owl#hasValue"],_=r["http://www.w3.org/2002/07/owl#minCardinality"]||r["http://www.w3.org/2002/07/owl#minQualifiedCardinality"],I=r["http://www.w3.org/2002/07/owl#maxCardinality"]||r["http://www.w3.org/2002/07/owl#maxQualifiedCardinality"],R=r["http://www.w3.org/2002/07/owl#cardinality"]||r["http://www.w3.org/2002/07/owl#qualifiedCardinality"],D=r["http://www.w3.org/2002/07/owl#hasSelf"],F=r["http://www.w3.org/2002/07/owl#complementOf"],A=ht(r["http://www.w3.org/2002/07/owl#oneOf"]),N=r["http://www.w3.org/2002/07/owl#inverseOf"],H=r["http://www.w3.org/2002/07/owl#onProperty"],q=r["http://www.w3.org/2002/07/owl#onDatatype"];if(q){let Y=[En(e,t,q,n,o)],ee=ht(r["http://www.w3.org/2002/07/owl#withRestrictions"]);if(ee.length>0){Y.push(Be.default.createElement(Be.default.Fragment,null,"["));let ne=!0;for(let te of ee){ne?ne=!1:Y.push(Be.default.createElement(Be.default.Fragment,null,",\xA0"));let de=te["http://www.w3.org/2001/XMLSchema#minExclusive"],fe=te["http://www.w3.org/2001/XMLSchema#minInclusive"],ye=te["http://www.w3.org/2001/XMLSchema#maxExclusive"],Ie=te["http://www.w3.org/2001/XMLSchema#maxInclusive"];de?Y.push(Be.default.createElement(Be.default.Fragment,null,"> ",de)):fe?Y.push(Be.default.createElement(Be.default.Fragment,null,"\u2265 ",fe)):ye?Y.push(Be.default.createElement(Be.default.Fragment,null,"< ",ye)):Ie&&Y.push(Be.default.createElement(Be.default.Fragment,null,"\u2264 ",Ie))}Y.push(Be.default.createElement(Be.default.Fragment,null,"]"))}i=Be.default.createElement(Be.default.Fragment,null,Y.map(ne=>Be.default.createElement("span",{key:xr()},ne)))}else if(c)i=Be.default.createElement(Be.default.Fragment,null,En(e,t,H,n,o),Be.default.createElement("i",{style:{color:"purple"}}," some "),En(e,t,ht(c)[0],n,o));else if(d)i=Be.default.createElement(Be.default.Fragment,null,En(e,t,H,n,o),Be.default.createElement("i",{style:{color:"purple"}}," only "),En(e,t,ht(d)[0],n,o));else if(h.length>0){let Y=[Be.default.createElement("span",{key:xr(),className:"text-neutral-default"},"(")];for(let ee of h)Y.length>1&&Y.push(Be.default.createElement("i",null," and ")),Y.push(En(e,t,ee,n,o));Y.push(Be.default.createElement("span",{className:"text-neutral-default"},")")),i=Be.default.createElement("span",null,Y.map(ee=>Be.default.createElement("span",{key:xr()},ee)))}else if(v.length>0){let Y=[Be.default.createElement("span",{key:xr(),className:"text-neutral-default"},"(")];for(let ee of v)Y.length>1&&Y.push(Be.default.createElement("i",null," or ")),Y.push(En(e,t,ee,n,o));Y.push(Be.default.createElement("span",{className:"text-neutral-default"},")")),i=Be.default.createElement("span",null,Y.map(ee=>Be.default.createElement("span",{key:xr()},ee)))}else if(w)i=Be.default.createElement(Be.default.Fragment,null,En(e,t,H,n,o),Be.default.createElement("i",{style:{color:"purple"}}," value "),En(e,t,ht(w)[0],n,o));else if(_)i=Be.default.createElement(Be.default.Fragment,null,En(e,t,H,n,o),Be.default.createElement("i",{style:{color:"purple"}}," min "),En(e,t,ht(_)[0],n,o));else if(I)i=Be.default.createElement(Be.default.Fragment,null,En(e,t,H,n,o),Be.default.createElement("i",{style:{color:"purple"}}," max "),En(e,t,ht(I)[0],n,o));else if(R)i=Be.default.createElement(Be.default.Fragment,null,En(e,t,H,n,o),Be.default.createElement("i",{style:{color:"purple"}}," exactly "),En(e,t,ht(R)[0],n,o));else if(D)i=Be.default.createElement(Be.default.Fragment,null,En(e,t,H,n,o),Be.default.createElement("i",{style:{color:"purple"}}," Self "),En(e,t,ht(D)[0],n,o));else if(F)i=Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("i",null,"not "),En(e,t,ht(F)[0],n,o));else if(A.length>0){let Y=[Be.default.createElement("span",{key:xr(),className:"text-neutral-default"},"{")];for(let ee of A)Y.length>1&&Y.push(Be.default.createElement("span",{key:xr(),className:"text-neutral-default"},",\xA0")),Y.push(En(e,t,ee,n,o));Y.push(Be.default.createElement("span",{className:"text-neutral-default"},"}")),i=Be.default.createElement("span",null,Y.map(ee=>Be.default.createElement("span",{key:xr()},ee)))}else N&&(i=Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("i",{style:{color:"purple"}},"inverse "),Be.default.createElement("span",{key:xr(),className:"text-neutral-default"},"("),En(e,t,N,n,o),Be.default.createElement("span",{key:xr(),className:"text-neutral-default"},")")))}return i}function zP(e,t,r,n=L$,o){return Be.default.createElement(Be.default.Fragment,null,r.length===1?Be.default.createElement("p",null,En(e,e.getLinkedEntities(),r[0],n,o)):Be.default.createElement("ul",null,r.map(i=>Be.default.createElement("li",{key:xr()},En(e,e.getLinkedEntities(),i,n,o)))))}function fAe(e,t,r,n=L$,o){let i=[];if(r)for(let v of Object.keys(r.linkedEntities))for(let w=t.indexOf(v,0);w!==-1;w=t.indexOf(v,w))i.push({start:w,end:w+v.length,link:mu(e,r,v,n,o)}),w+=v.length;let c=/[A-z]+:\/\/[^\s]+/g;for(let v=c.exec(t);v;v=c.exec(t)){let w=v[0];i.push({start:v.index,end:v.index+w.length,link:Be.default.createElement("span",{key:xr()},Be.default.createElement("a",{className:"clickable",href:w},w))})}i.sort((v,w)=>v.start-w.start);e:for(let v=0;v=I.start&&I.end>=_.start){_.end-_.startR.getEntityObject(r,i,n,c,h));function q(he){return ze.default.createElement(ze.default.Fragment,null,he.getLabel()&&ze.default.createElement(ze.default.Fragment,null,ze.default.createElement(qt,null,ze.default.createElement("b",null,"Label:"),he.getLabel()),ze.default.createElement(Oo,null)))}function Y(he){return ze.default.createElement(ze.default.Fragment,null,he.getSynonyms().length>0&&ze.default.createElement(ze.default.Fragment,null,ze.default.createElement(qt,null,ze.default.createElement("b",null,"Synonyms:"),he.getSynonyms().length>1?ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("ul",null,he.getSynonyms().map(be=>ze.default.createElement("li",{key:xr(),id:be.value},gc(he,be,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))),ze.default.createElement("p",null)):ze.default.createElement("p",null,gc(he,he.getSynonyms()[0],d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function ee(he){let be=he.getHasKey();return ze.default.createElement(ze.default.Fragment,null,be.length>0&&ze.default.createElement(ze.default.Fragment,null,ze.default.createElement(qt,null,ze.default.createElement("b",null,"Has Key:"),be.length>1?ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("ul",null,be.map(Se=>ze.default.createElement("li",{key:xr()},En(he,he.getLinkedEntities(),Se,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))),ze.default.createElement("p",null)):ze.default.createElement("p",null,En(he,he.getLinkedEntities(),be[0],d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function ne(he){return ze.default.createElement(ze.default.Fragment,null,he.getSubsets().length>0&&ze.default.createElement(ze.default.Fragment,null,ze.default.createElement(qt,null,ze.default.createElement("b",null,"In Subsets:"),he.getSubsets().length>1?ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("ul",null,he.getSubsets().map(be=>ze.default.createElement("li",{key:xr(),id:be+xr()},mu(he,he.getLinkedEntities(),be,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))),ze.default.createElement("p",null)):ze.default.createElement("p",null,mu(he,he.getLinkedEntities(),he.getSubsets()[0],d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function te(he){let be=he.getRdfTypes().map(Se=>({"http://www.w3.org/2002/07/owl#FunctionalProperty":"Functional","http://www.w3.org/2002/07/owl#InverseFunctionalProperty":"Inverse Functional","http://www.w3.org/2002/07/owl#TransitiveProperty":"Transitive","http://www.w3.org/2002/07/owl#SymmetricProperty":"Symmetric","http://www.w3.org/2002/07/owl#AsymmetricProperty":"Asymmetric","http://www.w3.org/2002/07/owl#ReflexiveProperty":"Reflexive","http://www.w3.org/2002/07/owl#IrreflexiveProperty":"Irreflexive"})[Se]).filter(Se=>!!Se);return ze.default.createElement(ze.default.Fragment,null,be.length>0&&ze.default.createElement(ze.default.Fragment,null,ze.default.createElement(qt,null,ze.default.createElement("b",null,"Characteristics:"),be.length>1?ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("ul",null,be.map(Se=>ze.default.createElement("li",{key:xr()},Se)).sort()),ze.default.createElement("p",null)):ze.default.createElement("p",null,be[0]))))}function de(he){let be=he.getDomain();return ze.default.createElement(ze.default.Fragment,null,be.length>0&&ze.default.createElement(ze.default.Fragment,null,ze.default.createElement(qt,null,ze.default.createElement("b",null,"Domain:"),be.length>1?ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("ul",null,be.map(Se=>ze.default.createElement("li",{key:xr()},En(he,he.getLinkedEntities(),Se,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))),ze.default.createElement("p",null)):ze.default.createElement("p",null,En(he,he.getLinkedEntities(),be[0],d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function fe(he){let be=he.getRange();return ze.default.createElement(ze.default.Fragment,null,be.length>0&&ze.default.createElement(qt,null,ze.default.createElement("b",null,"Range:"),be.length>1?ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("ul",null,be.map(Se=>ze.default.createElement("li",{key:xr()},En(he,he.getLinkedEntities(),Se,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))),ze.default.createElement("p",null)):ze.default.createElement("p",null,En(he,he.getLinkedEntities(),be[0],d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}function ye(he){let be=Object.keys(he.properties),Se=be.filter(De=>De.startsWith("negativePropertyAssertion+")),Te=be.filter(De=>he.getLinkedEntities().get(De)&&he.getLinkedEntities().get(De)?.type.indexOf("objectProperty")!==-1),Pe=be.filter(De=>he.getLinkedEntities().get(De)&&he.getLinkedEntities().get(De)?.type.indexOf("dataProperty")!==-1),Ve=[];for(let De of Te){let He=ht(he.properties[De]);for(let Je of He)Ve.push(ze.default.createElement(ze.default.Fragment,null,En(he,he.getLinkedEntities(),De,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),typeof Je=="string"&&Je.includes("http")?ze.default.createElement(ze.default.Fragment,null,"\xA0",ze.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",mu(he,he.getLinkedEntities(),Je,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):sY(typeof Je=="string"?Je:typeof Je=="object"&&!Array.isArray(Je)&&Je.value?JSON.stringify(Je.value):JSON.stringify(Je))))}for(let De of Pe){let He=ht(he.properties[De]);for(let Je of He)Ve.push(ze.default.createElement(ze.default.Fragment,null,En(he,he.getLinkedEntities(),De,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),ze.default.createElement(ze.default.Fragment,null,"\xA0",ze.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",mu(he,he.getLinkedEntities(),Je,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}for(let De of Se){let He=De.slice(26),Je=he.getLinkedEntities().get(He),vt=Je?.type.indexOf("dataProperty")!==-1,Qe=Je?.type.indexOf("objectProperty")!==-1,Ne=ht(he.properties[De]);for(let Nt of Ne)Ve.push(ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("i",{style:{color:"purple"}},"not")," ",En(he,he.getLinkedEntities(),He,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),typeof Nt=="string"&&Nt.includes("http")?ze.default.createElement(ze.default.Fragment,null,"\xA0",ze.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",mu(he,he.getLinkedEntities(),Nt,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):Qe?sY(typeof Nt=="string"?Nt:typeof Nt=="object"&&!Array.isArray(Nt)&&Nt.value?JSON.stringify(Nt.value):JSON.stringify(Nt)):vt?ze.default.createElement(ze.default.Fragment,null,"\xA0",ze.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",mu(he,he.getLinkedEntities(),Nt,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):ze.default.createElement(ze.default.Fragment,null)))}return ze.default.createElement(ze.default.Fragment,null,Ve.length>0&&ze.default.createElement(ze.default.Fragment,null,ze.default.createElement(qt,null,ze.default.createElement("b",null,"Property assertions:"),Ve.length>1?ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("ul",null,Ve.map(De=>ze.default.createElement("li",{key:xr()},De)).sort()),ze.default.createElement("p",null)):ze.default.createElement("p",null,Ve[0]))))}function Ie(he){return ze.default.createElement(ze.default.Fragment,null,he.getAnnotationPredicates().map((be,Se,Te)=>{let Pe=he.getAnnotationById(be);return Pe.length==0?ze.default.createElement(ze.default.Fragment,null):ze.default.createElement(ze.default.Fragment,null,ze.default.createElement(qt,{grow:!1,key:be},ze.default.createElement("b",null,_h(bE(yE(he.getAnnotationTitleById(be)))),":"),Pe.length>1?ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("ul",null,Pe.map(Ve=>ze.default.createElement("li",{key:xr(),id:Ve.value},gc(he,Ve,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))),ze.default.createElement("p",null)):ze.default.createElement("p",{key:xr()},gc(he,Pe[0],d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}))}return ze.default.createElement(ze.default.Fragment,null,ze.default.createElement(fc,{title:o?(i?_h(Jq(i)):A&&D?_h(D.getType()):"")+" Information":"",layout:"horizontal"},F&&ze.default.createElement(_r,{size:"s"}),A&&D!==void 0&&ze.default.createElement(Xt,{...I},q(D),Y(D),dx(D)&&ze.default.createElement(ze.default.Fragment,null,ne(D),ee(D)),Z5(D)&&ze.default.createElement(ze.default.Fragment,null,te(D),de(D),fe(D)),gE(D)&&ze.default.createElement(ze.default.Fragment,null,ye(D)),Ie(D)),N&&ze.default.createElement(Xt,null,Lo(H,"information"))))}function vAe(e,t,r){hAe.default.render(Mar(e),t,r)}function Mar(e){let t=new Wr;return ze.default.createElement(zr,{colorMode:"light"},ze.default.createElement(Hr,{client:t},ze.default.createElement(mAe,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,showBadges:e.showBadges,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var N$=T(z());var gAe=T(Do());function yAe(e){let{apiQuery:t,buttonText:r,buttonSize:n}=e;return N$.default.createElement(u3,{href:t,target:"_blank",size:n||"m"},r)}function bAe(e,t,r){gAe.default.render(Aar(e),t,r)}function Aar(e){let t=new Wr;return N$.default.createElement(zr,{colorMode:"light"},N$.default.createElement(Hr,{client:t},N$.default.createElement(yAe,{apiQuery:e.apiQuery,buttonText:e.buttonText,buttonSize:e.buttonSize})))}var vu=T(z());var wAe=T(Do());function lY(e){let{api:t,ontologyId:r,iri:n,entityType:o,colorFirst:i,colorSecond:c,parameter:d,useLegacy:h,onNavigateToOntology:v}=e,w=new Jr(t),{data:_,isLoading:I,isSuccess:R,isError:D,error:F}=Qr(["breadcrumb",t,d,o,n,r,h],async()=>await w.getEntityObject(n,o,r,d,h));return vu.default.createElement(vu.default.Fragment,null,I&&vu.default.createElement("span",null,vu.default.createElement("button",{onClick:()=>{e.onNavigateToOntology&&e.ontologyId&&e.onNavigateToOntology(e.ontologyId||"",void 0,void 0)}},vu.default.createElement(Il,{className:e.ontologyId?"breadcrumb clickable-breadcrumb":"breadcrumb",color:i||(e.ontologyId?"primary":"warning")},e.ontologyId?.toUpperCase()||vu.default.createElement(_r,{size:"s"}))),"\xA0",vu.default.createElement(mr,{type:"arrowRight"}),"\xA0",vu.default.createElement(Il,{className:"breadcrumb",color:c||"warning"},vu.default.createElement(_r,{size:"s"}))),R&&_&&Rd(_)&&vu.default.createElement(s_,{ontologyName:_.getOntologyId(),shortForm:_.getShortForm(),ontologyId:r||_.getOntologyId(),colorFirst:i,colorSecond:c,onNavigateToOntology:v}),D&&vu.default.createElement(s_,{ontologyName:e.ontologyId?.toUpperCase()||_&&_.getOntologyId().toUpperCase()||Lo(F,"ontology"),shortForm:_&&_.getShortForm()?_.getShortForm().toUpperCase():"",ontologyId:r||(_?_.getOntologyId():""),colorFirst:i||(e.ontologyId||_&&_.getOntologyId()?"primary":"danger"),colorSecond:c||(_&&_.getShortForm()?"success":"danger"),onNavigateToOntology:v}))}function OAe(e,t,r){wAe.default.render(Rar(e),t,r)}function Rar(e){let t=new Wr;return vu.default.createElement(zr,{colorMode:"light"},vu.default.createElement(Hr,{client:t},vu.default.createElement(lY,{api:e.api,entityType:e.entityType,iri:e.iri,ontologyId:e.ontologyId,colorFirst:e.colorFirst,colorSecond:e.colorSecond,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}var ly=T(z());var uY=T(z());function cY(e){let{descText:t,description:r,...n}=e;return uY.default.createElement(uY.default.Fragment,null,uY.default.createElement(Xt,{...n},t||r))}var xAe=T(Do()),Dar="No description available.";function pY(e){let{api:t,ontologyId:r,iri:n,descText:o,thingType:i,parameter:c,useLegacy:d,...h}=e,v=new Jr(t),{data:w,isLoading:_,isSuccess:I,isError:R,error:D}=Qr(["description",t,c,i,n,r,d],async()=>v.getThingObject(n,i,r,c,d));return ly.default.createElement(ly.default.Fragment,null,_&&ly.default.createElement(_r,{size:"s"}),I&&w&&ly.default.createElement(cY,{description:w.getDescription()||Dar,descText:o,...h}),R&&ly.default.createElement(Xt,null,Lo(D,"description")))}function _Ae(e,t,r){xAe.default.render(Lar(e),t,r)}function Lar(e){let t=new Wr;return ly.default.createElement(zr,{colorMode:"light"},ly.default.createElement(Hr,{client:t},ly.default.createElement(pY,{api:e.api,ontologyId:e.ontologyId,iri:e.iri,descText:e.descText,thingType:e.thingType,parameter:e.parameter,color:e.color,useLegacy:e.useLegacy})))}var mp=T(z());var SAe=T(Do());function WP(e){let{iri:t,iriText:r,color:n,externalIcon:o,urlPrefix:i,copyButton:c}=e,[d,h]=(0,mp.useState)(!1),w=typeof i<"u"&&i!==""?i+encodeURIComponent(t):t,_=()=>d?mp.default.createElement(pc,{style:{marginLeft:"5px",color:n&&(Kq(n)||Yq(n))?n:""},display:"base",iconType:"check",key:"copy-btn",color:n&&gre(n)?n:void 0}):mp.default.createElement(pc,{display:"base",iconType:"copy",key:"copy-btn",style:{marginLeft:"5px",marginRight:"5px",color:n&&(Kq(n)||Yq(n))?n:""},color:n&&D5e(n)?n:void 0,onClick:()=>{navigator.clipboard.writeText(w),h(!0),setTimeout(()=>{h(!1)},2e3)}});return mp.default.createElement(qt,{grow:!1},mp.default.createElement("div",null,c==="left"&&mp.default.createElement(_,null),mp.default.createElement(Jg,{href:w,target:"_blank",style:{color:n&&(Kq(n)||Yq(n))?n:""},color:n&&gre(n)?n:void 0,external:o},r||t),c==="right"&&mp.default.createElement(_,null)))}function IAe(e,t,r){SAe.default.render(Nar(e),t,r)}function Nar(e){let t=new Wr;return mp.default.createElement(zr,{colorMode:"light"},mp.default.createElement(Hr,{client:t},mp.default.createElement(WP,{iri:e.iri,iriText:e.iriText,color:e.color,externalIcon:e.externalIcon,urlPrefix:e.urlPrefix,copyButton:e.copyButton})))}var zh=T(z());var vp=T(z());var F$=T(z());function dY(e){function t(){return e.synonyms&&e.synonyms.length>0?e.synonyms.map((r,n)=>F$.default.createElement(qt,{key:r+n},r)):F$.default.createElement(Xt,null,"No alternative names exist.")}return F$.default.createElement(kl,null,F$.default.createElement(gi,{style:{padding:10},direction:"column"},t()))}var l_=T(z());function fY(e){function t(r){return r&&r.length>0?r?.map((n,o)=>l_.default.createElement(qt,{key:o},n)):l_.default.createElement(Xt,null,"No cross references exist.")}return l_.default.createElement(kl,null,l_.default.createElement(l_.default.Fragment,null,l_.default.createElement(gi,{style:{padding:7},direction:"column"},t(e.crossrefs))))}var Ht=T(z());var EAe=T(Do()),Far=!0;function hY(e){let{ontologyId:t,api:r,parameter:n,hasTitle:o=Far,useLegacy:i,showBadges:c,...d}=e,h=new Jr(r),v={onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate},{data:w,isLoading:_,isSuccess:I,isError:R,error:D}=Qr(["ontologyInfo",e],()=>h.getOntologyObject(t,n,i));function F(te){return Ht.default.createElement(Ht.default.Fragment,null,(te.getIri()||te.getOntologyPurl())&&Ht.default.createElement(qt,null,Ht.default.createElement("b",null,"Ontology IRI:"),Ht.default.createElement("p",null,Ht.default.createElement("a",{id:"ontologyIri",href:te.getIri()||te.getOntologyPurl()},te.getIri()||te.getOntologyPurl()))))}function A(te){return Ht.default.createElement(Ht.default.Fragment,null,te.getVersionIri()&&Ht.default.createElement(qt,null,Ht.default.createElement("b",null,"Version IRI:"),Ht.default.createElement("p",null,Ht.default.createElement("a",{id:"versionIri",href:te.getVersionIri()},te.getVersionIri()))))}function N(te){return Ht.default.createElement(Ht.default.Fragment,null,te.getSourceFileTimestamp()&&Ht.default.createElement(qt,null,Ht.default.createElement("b",null,"Last loaded:"),Ht.default.createElement("p",null,new Date(te.getSourceFileTimestamp()).toString())))}function H(te){return Ht.default.createElement(Ht.default.Fragment,null,te.getOntologyId()&&Ht.default.createElement(qt,null,Ht.default.createElement("b",null,"Ontology ID:"),Ht.default.createElement("p",null,te.getOntologyId())))}function q(te){return Ht.default.createElement(Ht.default.Fragment,null,te.getVersion()&&Ht.default.createElement(qt,null,Ht.default.createElement("b",null,"Version:"),Ht.default.createElement("p",null,te.getVersion())))}function Y(te){return Ht.default.createElement(Ht.default.Fragment,null,te.getNumClasses()&&Ht.default.createElement(qt,null,Ht.default.createElement("b",null,"Number of classes:"),Ht.default.createElement("p",null,te.getNumClasses().toLocaleString())))}function ee(te){return Ht.default.createElement(Ht.default.Fragment,null,te.getCreators().length>0&&Ht.default.createElement(Ht.default.Fragment,null,Ht.default.createElement(qt,null,Ht.default.createElement("b",null,"Creators:"),te.getCreators().length>1?Ht.default.createElement(Ht.default.Fragment,null,Ht.default.createElement("ul",null,te.getCreators().map(de=>Ht.default.createElement("li",{key:de+xr()},mu(te,te.getLinkedEntities(),de,c,v)))),Ht.default.createElement("p",null)):Ht.default.createElement("p",null,mu(te,te.getLinkedEntities(),te.getCreators()[0],c,v))),Ht.default.createElement(Oo,null)))}function ne(te){return Ht.default.createElement(Ht.default.Fragment,null,te.getAnnotationPredicates().map(de=>{let fe=te.getAnnotationById(de);return fe.length==0?Ht.default.createElement(Ht.default.Fragment,null):Ht.default.createElement(qt,{grow:!1,key:de},Ht.default.createElement("b",null,_h(bE(yE(te.getAnnotationTitleById(de)))),":"),fe.length>1?Ht.default.createElement(Ht.default.Fragment,null,Ht.default.createElement("ul",null,fe.map(ye=>Ht.default.createElement("li",{key:xr(),id:ye.value},gc(te,ye,c,v)))),Ht.default.createElement("p",null)):Ht.default.createElement("p",{key:xr()},gc(te,fe[0],c,v)))}))}return Ht.default.createElement(Ht.default.Fragment,null,Ht.default.createElement(fc,{title:o?"Ontology Information":"",layout:"horizontal",style:e.width?{width:e.width}:{}},_&&Ht.default.createElement(_r,{size:"s"}),I&&w!==void 0&&Ht.default.createElement(Xt,{...d},F(w),A(w),N(w),Ht.default.createElement(Ht.default.Fragment,null,H(w),q(w),Y(w)),ne(w)),R&&Ht.default.createElement(Xt,null,Lo(D,"information"))))}function PAe(e,t,r){EAe.default.render(Bar(e),t,r)}function Bar(e){let t=new Wr;return Ht.default.createElement(zr,{colorMode:"light"},Ht.default.createElement(Hr,{client:t},Ht.default.createElement(hY,{ontologyId:e.ontologyId,api:e.api,parameter:e.parameter,useLegacy:e.useLegacy,showBadges:e.showBadges,hasTitle:e.hasTitle,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var en=T(z());var jAe=T(Do());var B$=class{static fromTopConcept(t){return{iri:t.uri,label:t.label,hasChildren:t.hasChildren,parents:[]}}static fromHierarchyResult(t){return{iri:t.uri,label:t.prefLabel,hasChildren:t.narrower!=null&&t.narrower.length>0,parents:kt.fromJson(t.broader)}}static fromPrefAndUriAndChildren(t,r){return{iri:t.uri,label:t.prefLabel,hasChildren:t.hasChildren,parents:kt.fromJson(r)}}static fromLabelAndUriAndChildren(t,r){return{iri:t.uri,label:t.label,hasChildren:t.hasChildren,parents:kt.fromJson(r)}}},mY=class e{axiosInstance;constructor(t){this.axiosInstance=$5.create({baseURL:t,headers:{Accept:"application/json"}})}async makeCall(t,r){return(await this.axiosInstance.get(t,r)).data}async buildHierarchyWithIri(t){let{iri:r,ontologyId:n,showSiblingsOnInit:o}=t;if(!n)throw Error("ontologyId has to be specified for SKOS API.");let i=[],c=new Map,d=new Map,h=new Set,v=new Set;if(r){let R=await this.makeCall(`/${n}/hierarchy`,{params:{uri:r,lang:"en",format:"application/json"}}).then(D=>Object.keys(D.broaderTransitive).map(F=>D.broaderTransitive[F]));for(let D of R){let F=B$.fromHierarchyResult(D);d.set(F.iri,F),D.top&&i.push(F.iri),o||v.add(F.iri)}for(let D of R)if(D.narrower!=null){let F=[];for(let A of D.narrower){let N=d.get(A.uri);N==null?(N=B$.fromLabelAndUriAndChildren(A,[D.uri]),d.set(N.iri,N)):N.parents.map(H=>H.value).includes(D.uri)||N.parents.push(...kt.fromJson(D.uri)),F.push(N)}F.sort((A,N)=>(A.label||A.iri).localeCompare(N.label||N.iri)),c.set(D.uri,F.map(A=>({childIri:A.iri}))),h.add(D.uri)}}else{let R=await this.makeCall(`/${n}/topConcepts`,{params:{lang:"en",format:"application/json"}}).then(D=>D.topconcepts);for(let D of R)i.push(D.uri)}function w(R,D){D.add(R.iri);let F=new Ih(R),A=c.get(R.iri)||[];if(o)for(let N of A){if(D.has(N.childIri)){console.error(`Cyclic tree at entity "${N.childIri}".`);continue}let H=d.get(N.childIri);H!=null&&F.addChild(w(H,D))}else for(let N of A){if(D.has(N.childIri)){console.error(`Cyclic tree at entity "${N.childIri}".`);continue}let H=d.get(N.childIri);H!=null&&v.has(N.childIri)&&F.addChild(w(H,D))}return F.loadedChildren.length>0&&(F.expanded=!0),D.delete(R.iri),F}let _=new Set,I=i.map(R=>w(d.get(R),_)).sort((R,D)=>(R.entityData.label||R.entityData.iri).localeCompare(D.entityData.label||D.entityData.iri));return new Eh({parentChildRelations:c,entitiesData:d,allChildrenPresent:h,roots:I,api:new e(this.axiosInstance.getUri()),ontologyId:n,mainEntityIri:r,keepExpansionStates:t.keepExpansionStates})}async loadHierarchyChildren(t){let{nodeToExpand:r,ontologyId:n}=t;return(await this.makeCall(`/${n}/children`,{params:{uri:r.entityData.iri,lang:"en",format:"application/json"}})).narrower.map(i=>B$.fromPrefAndUriAndChildren(i,[r.entityData.iri]))}};function kAe(e){return{iri:e["@id"],label:e.prefLabel,hasChildren:e.hasChildren,parents:[]}}var vY=class e{axiosInstance;apiKey;constructor(t,r){this.axiosInstance=$5.create({baseURL:t,headers:{Accept:"application/json"}}),this.apiKey=r,this.axiosInstance.interceptors.request.use(n=>(n.params=n.params||{},n.params.apikey=this.apiKey,n.params.format="json",n))}async makeCall(t,r){return(await this.axiosInstance.get(t,r)).data}async buildHierarchyWithIri(t){let{iri:r,ontologyId:n,entityType:o,showSiblingsOnInit:i}=t;if(!n)throw Error("ontologyId has to be specified for OntoPortal API.");if(!o)throw Error("entityType has to be specified for OntoPortal API.");let c=[],d=new Map,h=new Map,v=new Set,w=new Set;function _(F){if(d.set(F["@id"],kAe(F)),F.hasChildren&&F.children.length>0){h.set(F["@id"],F.children.map(A=>({childIri:A["@id"]}))),v.add(F["@id"]),w.add(F["@id"]);for(let A of F.children)_(A)}}if(r){let F=await this.makeCall(`/ontologies/${n.toUpperCase()}/${wl(o,!1)}/${encodeURIComponent(r)}/tree`,{params:{include:"@id,prefLabel,hasChildren,children"}});for(let A of F)c.push(A["@id"]),w.add(A["@id"]),_(A);w.add(r)}else{let F=await this.makeCall(`/ontologies/${n.toUpperCase()}/${wl(o,!1)}/roots`,{params:{include:"@id,prefLabel,hasChildren"}});for(let A of F)c.push(A["@id"]),w.add(A["@id"])}function I(F,A){A.add(F.iri);let N=new Ih(F),H=h.get(F.iri)||[];if(i)for(let q of H){if(A.has(q.childIri)){console.error(`Cyclic tree at entity "${q.childIri}".`);continue}N.addChild(I(d.get(q.childIri),A))}else for(let q of H){if(A.has(q.childIri)){console.error(`Cyclic tree at entity "${q.childIri}".`);continue}w.has(q.childIri)&&N.addChild(I(d.get(q.childIri),A))}return N.loadedChildren.length>0&&(N.expanded=!0),A.delete(F.iri),N}let R=new Set,D=c.map(F=>I(d.get(F),R)).sort((F,A)=>(F.entityData.label||F.entityData.iri).localeCompare(A.entityData.label||A.entityData.iri));return new Eh({parentChildRelations:h,entitiesData:d,allChildrenPresent:v,roots:D,api:new e(this.axiosInstance.getUri(),this.apiKey),ontologyId:n,mainEntityIri:r,keepExpansionStates:t.keepExpansionStates,entityType:o})}async loadHierarchyChildren(t){let{nodeToExpand:r,ontologyId:n,entityType:o}=t;if(o==null)throw Error("entityType has to be provided to load children in an OntoPortal hierarchy.");return(await this.makeCall(`/ontologies/${n.toUpperCase()}/${wl(o,!1)}/${encodeURIComponent(r.entityData.iri)}/children`,{params:{include:"@id,prefLabel,hasChildren"}})).collection.map(c=>kAe(c))}};var z$={INCLUDE_OBSOLETE_ENTITIES:!1,PREFERRED_ROOTS:!1,KEEP_EXPANSION_STATES:!1,SHOW_SIBLINGS_ON_INIT:!1,USE_LEGACY:!1};function zar(e){let t=e.entityData.definedBy||[];return t.includes(e.ontologyId)&&(t=[]),en.default.createElement(en.default.Fragment,null,en.default.createElement("span",{className:e.highlight?"highlight":void 0},e.childRelationToParent=="http://purl.obolibrary.org/obo/BFO_0000050"&&en.default.createElement(en.default.Fragment,null,en.default.createElement("span",{style:{marginInlineStart:"1.5px",marginTop:"2.5px"},className:"surroundCircle"},"\xA0P\xA0"),"\xA0"),e.childRelationToParent=="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"&&en.default.createElement(en.default.Fragment,null,en.default.createElement("span",{style:{marginInlineStart:"1.5px",marginTop:"2.5px"},className:"surroundCircle"},"I"),"\xA0"),en.default.createElement("button",{onClick:()=>{e.onNavigateToEntity&&e.onNavigateToEntity(e.ontologyId,e.entityType||"",e.entityData)}},en.default.createElement("span",null," ",e.entityData.label||e.entityData.iri," "))),t.length>0&&en.default.createElement(en.default.Fragment,null,"\xA0",t.map(r=>en.default.createElement("button",{key:`${e.entityData.iri}:${r}`,onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(r,e.entityType||"",e.entityData)}},en.default.createElement("span",{className:"ontology-badge"},r.toUpperCase())))))}function W$(e){let{apiUrl:t,backendType:r,apiKey:n,onNavigateToEntity:o,onNavigateToOntology:i,iri:c,ontologyId:d,entityType:h,includeObsoleteEntities:v=z$.INCLUDE_OBSOLETE_ENTITIES,preferredRoots:w=z$.PREFERRED_ROOTS,keepExpansionStates:_=z$.KEEP_EXPANSION_STATES,showSiblingsOnInit:I=z$.SHOW_SIBLINGS_ON_INIT,useLegacy:R=z$.USE_LEGACY}=e,[,D]=(0,en.useReducer)(Y=>Y+1%Number.MAX_SAFE_INTEGER,0),F=(0,en.useMemo)(()=>{switch(r){case"ols":return new Jr(t);case"skosmos":return new mY(t);case"ontoportal":return new vY(t,n||"");default:return new Jr(t)}},[t,r,n]),{data:A,isSuccess:N}=Qr(["hierarchySemLookP",c,h,d,w,v,_,I,R],async function(){return await F.buildHierarchyWithIri({ontologyId:d,iri:c,entityType:h,preferredRoots:w,includeObsoleteEntities:v,keepExpansionStates:_,showSiblingsOnInit:I,useLegacy:R})}),H=(0,en.useCallback)(Y=>{if(!(A instanceof Eh))throw Error("Hierarchy object was undefined while trying to expand a tree node. This should never happen.");A.entityType&&Ad(A.entityType)||(Y.expanded=!Y.expanded,Y.expanded?(Y.loading=!0,D(),A.fetchInformationForExpansion(Y).then(()=>{Y.loading=!1,D()})):(D(),A.closeNode(Y)))},[A]);function q(Y,ee,ne){return en.default.createElement("div",{key:xr()},en.default.createElement(Xt,null,en.default.createElement("div",{style:{height:"24px"}},en.default.createElement("div",{style:{position:"relative",borderLeft:"1px dotted black",borderBottom:"1px dotted black",width:"12px",height:"16px",left:"5.5px",top:"-1px"}}),en.default.createElement("div",{style:{position:"relative",borderLeft:ne?"1px dotted black":"",width:"12px",height:"9px",left:"5.5px",top:"0px"}}),en.default.createElement("div",{style:{position:"relative",top:"-22px"}},en.default.createElement("span",null,ee.entityData.hasChildren?en.default.createElement("button",{style:{},onClick:()=>{H(ee)}},en.default.createElement(mr,{type:ee.expanded?"arrowDown":"arrowRight",size:"s"})):en.default.createElement(mr,{type:"empty"})),"\xA0",en.default.createElement(zar,{entityData:ee.entityData,childRelationToParent:ee.childRelationToParent,ontologyId:Y.ontologyId,entityType:Y.entityType,onNavigateToEntity:o,onNavigateToOntology:i,highlight:ee.entityData.iri==Y?.mainEntityIri}),"\xA0",ee.entityData.numDescendants!=null&&ee.entityData.numDescendants>0&&en.default.createElement("span",{style:{color:"gray"}},"(",ee.entityData.numDescendants.toLocaleString(),")")))),ee.expanded&&en.default.createElement("ul",{style:{marginBlockEnd:"0",marginInlineStart:"5.5px"}},ee.loading?en.default.createElement(_r,{style:{position:"relative",left:"13px",top:"5px"}}):ee.loadedChildren.map((te,de)=>en.default.createElement("div",{key:xr(),style:{borderLeft:ne?"1px dotted black":"",paddingLeft:"1rem"}},q(Y,te,deq(A,Y,eeo.value)}),id:"tab1",name:"Alternative Names"}),(e.hierarchyTab===void 0||e.hierarchyTab)&&n.push({content:vp.default.createElement(vp.default.Fragment,null,vp.default.createElement("div",{style:{overflow:"auto"}},vp.default.createElement(W$,{apiUrl:e.api,iri:e.iri,ontologyId:e.ontologyId||(r&&r.getOntologyId()!==void 0?r.getOntologyId():""),entityType:e.entityType,useLegacy:e.useLegacy,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,preferredRoots:e.hierarchyPreferredRoots,showSiblingsOnInit:e.hierarchyShowSiblingsOnInit,keepExpansionStates:e.hierarchyKeepExpansionStates}))),id:"tab2",name:"Hierarchy"}),(e.crossRefTab===void 0||e.crossRefTab)&&n.push({content:vp.default.createElement(fY,{crossrefs:kt.fromJson(r.getCrossReferences()).map(o=>o.value)}),id:"tab3",name:"Cross references"}),(e.terminologyInfoTab===void 0||e.terminologyInfoTab)&&n.push({content:vp.default.createElement(hY,{ontologyId:e.ontologyId||r.getOntologyId(),api:e.api,parameter:"",useLegacy:e.useLegacy,showBadges:!1,hasTitle:!1,width:600}),id:"tab4",name:`About ${e.ontologyId?.toUpperCase()}`}),n.length===0?"":vp.default.createElement(vp.default.Fragment,null,vp.default.createElement(yP,{size:"s",tabs:n}))}return vp.default.createElement(vp.default.Fragment,null,Rd(e.data)||Z5(e.data)||gE(e.data)?t(e.data):null)}var CAe=T(Do());function MAe(e){let{iri:t,api:r,ontologyId:n,entityType:o,parameter:i,useLegacy:c,hierarchyTab:d,crossRefTab:h,terminologyInfoTab:v,altNamesTab:w,..._}=e,I=new Jr(r),{data:R,isLoading:D,isSuccess:F,isError:A,error:N}=Qr(["tabdata",r,i,o,t,n,c],async()=>I.getEntityObject(t,o,n,i,c));function H(q){return zh.default.createElement(gY,{..._,data:q,iri:t,api:r,useLegacy:c,entityType:q.getType(),ontologyId:n||q.getOntologyId(),hierarchyTab:d,crossRefTab:h,terminologyInfoTab:v,altNamesTab:w,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate,hierarchyPreferredRoots:e.hierarchyPreferredRoots,hierarchyKeepExpansionStates:e.hierarchyKeepExpansionStates,hierarchyShowSiblingsOnInit:e.hierarchyShowSiblingsOnInit})}return zh.default.createElement(zh.default.Fragment,null,D&&zh.default.createElement(_r,null),A&&zh.default.createElement(Xt,null,Lo(N,"description")),F&&R&&zh.default.createElement(zh.default.Fragment,null,Rd(R)?H(R):null))}function AAe(e,t,r){CAe.default.render(Har(e),t,r)}function Har(e){let t=new Wr;return zh.default.createElement(zr,{colorMode:"light"},zh.default.createElement(Hr,{client:t},zh.default.createElement(MAe,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,altNamesTab:e.altNamesTab,hierarchyTab:e.hierarchyTab,crossRefTab:e.crossRefTab,terminologyInfoTab:e.terminologyInfoTab,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate,hierarchyPreferredRoots:e.hierarchyPreferredRoots,hierarchyKeepExpansionStates:e.hierarchyKeepExpansionStates,hierarchyShowSiblingsOnInit:e.hierarchyShowSiblingsOnInit})))}var uy=T(z());var RAe=T(Do());function DAe(e){let{iri:t,api:r,parameter:n,entityType:o,ontologyId:i,useLegacy:c}=e,d=new Jr(r),{data:h,isLoading:v,isSuccess:w,isError:_,error:I}=Qr(["alternativeNameTab",r,n,o,t,i,c],async()=>d.getEntityObject(t,o,i,n,c));return uy.default.createElement(uy.default.Fragment,null,w&&h&&Rd(h)&&uy.default.createElement(dY,{synonyms:h.getSynonyms().map(R=>R.value)}),v&&uy.default.createElement(_r,null),_&&uy.default.createElement(Xt,null,Lo(I,"alternative names")))}function LAe(e,t,r){RAe.default.render(Var(e),t,r)}function Var(e){let t=new Wr;return uy.default.createElement(zr,{colorMode:"light"},uy.default.createElement(Hr,{client:t},uy.default.createElement(DAe,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter})))}var cy=T(z());var NAe=T(Do());function FAe(e){let{iri:t,api:r,parameter:n,entityType:o,ontologyId:i,useLegacy:c}=e,d=new Jr(r),{data:h,isLoading:v,isSuccess:w,isError:_,error:I}=Qr(["crossRefTab",r,n,o,t,i,c],async()=>d.getEntityObject(t,o,i,n,c));return cy.default.createElement(cy.default.Fragment,null,w&&h&&Rd(h)&&cy.default.createElement(fY,{crossrefs:kt.fromJson(h.getCrossReferences()).map(R=>R.value)}),v&&cy.default.createElement(_r,null),_&&cy.default.createElement(Xt,null,Lo(I,"cross references")))}function BAe(e,t,r){NAe.default.render($ar(e),t,r)}function $ar(e){let t=new Wr;return cy.default.createElement(zr,{colorMode:"light"},cy.default.createElement(Hr,{client:t},cy.default.createElement(FAe,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy})))}var Xd=T(z());var zAe=T(z());function B3(e){return zAe.default.createElement(Xt,{className:e.className},e.titleText||e.title)}var WAe=T(Do());function xve(e){let{iri:t,ontologyId:r,api:n,titleText:o,thingType:i,parameter:c,useLegacy:d,defaultValue:h,className:v}=e,w=new Jr(n),_=v||"default-class",{data:I,isLoading:R,isSuccess:D,isError:F,error:A}=Qr(["titleData",n,c,i,t,r,d],async()=>w.getThingObject(t,i,r,c,d));return Xd.default.createElement(Xd.default.Fragment,null,o&&Xd.default.createElement(B3,{titleText:o,className:_}),!o&&D&&I&&Xd.default.createElement(B3,{title:R5e(I)?I.getName():I.getLabel(),className:_}),!o&&R&&(h?Xd.default.createElement(B3,{titleText:h,className:_}):Xd.default.createElement(_r,{size:"s"})),!o&&F&&(h?Xd.default.createElement(B3,{titleText:h,className:_}):Xd.default.createElement(Xt,null,Lo(A,"title"))))}function HAe(e,t,r){WAe.default.render(Zar(e),t,r)}function Zar(e){let t=new Wr;return Xd.default.createElement(zr,{colorMode:"light"},Xd.default.createElement(Hr,{client:t},Xd.default.createElement(xve,{api:e.api,thingType:e.thingType,iri:e.iri,ontologyId:e.ontologyId,titleText:e.titleText,parameter:e.parameter,useLegacy:e.useLegacy,defaultValue:e.defaultValue,className:e.className})))}var Ln=T(z());var VAe=T(Do());var gp=T(z());var _ve=5;function yY(e){let[t,r]=(0,gp.useState)(!1);function n(i){return gp.default.createElement("button",{key:xr(),onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(i,e.entityType||"",{iri:e.iri,label:e.label})}},gp.default.createElement("span",{className:"ontology-badge"},i.toUpperCase()))}function o(){return e.ontolist.length>_ve&&!t?gp.default.createElement(gp.default.Fragment,null,e.ontolist.slice(0,_ve).map(i=>gp.default.createElement("span",{key:xr()},n(i),"\xA0")),gp.default.createElement("button",{className:"expand-onto-list",onClick:()=>r(!0)},"+ ",e.ontolist.length-_ve)):e.ontolist.map(i=>gp.default.createElement("span",{key:xr()},n(i),"\xA0"))}return gp.default.createElement(gp.default.Fragment,null,e.ontolist&&e.ontolist.length>0&&gp.default.createElement(Xt,{style:{fontWeight:"normal"}},"Also appears in\xA0",o()))}var yp=T(z());var Sve=5;function bY(e){let[t,r]=(0,yp.useState)(!1);function n(i){return yp.default.createElement("button",{key:xr(),onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(i,e.entityType||"",{iri:e.iri,label:e.label})}},yp.default.createElement("span",{className:"ontology-badge"},i.toUpperCase()))}function o(){return e.ontolist.length>Sve&&!t?yp.default.createElement(yp.default.Fragment,null,e.ontolist.slice(0,Sve).map(i=>yp.default.createElement("span",{key:xr()},n(i),"\xA0")),yp.default.createElement("button",{className:"expand-onto-list",onClick:()=>r(!0)},"+ ",e.ontolist.length-Sve)):e.ontolist.map(i=>yp.default.createElement("span",{key:xr()},n(i),"\xA0"))}return yp.default.createElement(yp.default.Fragment,null,e.ontolist&&e.ontolist.length>0&&yp.default.createElement(Xt,{style:{fontWeight:"normal"}},"Defined by\xA0",o()))}function $Ae(e){let{iri:t,api:r,ontologyId:n,entityType:o,parameter:i,useLegacy:c,onNavigateToOntology:d,hierarchyTab:h,crossRefTab:v,terminologyInfoTab:w,altNamesTab:_,termLink:I}=e,R=new Jr(r),D=` +Source URL: `+Re.source_url);let Qe=()=>si.default.createElement(w$,{color:Ve},si.default.createElement("span",null,si.default.createElement(u1,{search:Te},Re.label),si.default.createElement("br",null),Re.description)),Fe=()=>si.default.createElement("span",{title:pt,style:{height:"200px"}},si.default.createElement(w$,{color:Ve},si.default.createElement("span",null,si.default.createElement(u1,{search:Te},Re.label),"\xA0\xA0\xA0\xA0\xA0",si.default.createElement(s_,{ontologyName:Re.ontology_name,shortForm:Re.short_form,colorFirst:"primary",colorSecond:"success"}),si.default.createElement(mr,{type:"iInCircle",style:{marginLeft:5},title:pt}),!v&&Re.description&&si.default.createElement(si.default.Fragment,null,si.default.createElement("br",null),Re.description.substring(0,40)+"..."))));return Re.type==="ontology"?Qe():Fe()},{isLoading:fe}=Qr(["onMount",c],async()=>{let be=[],Te=[...new Set(c)].filter(Pe=>o&&Pe.label||Pe.iri);if(Te.length>0){h&&(Te=[Te[0]]);for(let Pe of Te)Pe&&Pe.iri&&Pe.iri.startsWith("http")?await D.getSelectData({query:Pe.iri},void 0,void 0,te,_).then(Re=>{Re&&(Re.properties.map(Ae=>{Pe.iri===Ae.getIri()&&be.push({label:n?Ae.getLabel():Ie(Ae),key:Ae.getIri(),value:{iri:Ae.getIri(),label:Ae.getLabel(),ontology_name:Ae.getOntologyId(),type:Ae.getType(),short_form:Ae.getShortForm(),description:Ae.getDescription(),source:Ae.getApiSourceName(),source_url:Ae.getApiSourceEndpoint()}})}),h&&be.length>1&&(be=[be[0]]))}):Pe&&Pe.label&&o&&be.push({label:Pe.label,key:Pe.label,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:"",source_url:""}});Y(be),ne(be)}}),{isLoading:ye}=Qr(["onSearchChange",N],async()=>{if(N.length>0)return D.getSelectData({query:N},void 0,void 0,te,_).then(be=>{be&&Y(be.properties.map(Te=>({label:n?Te.getLabel():Ie(Te),key:Te.getIri(),value:{iri:Te.getIri(),label:Te.getLabel(),ontology_name:Te.getOntologyId(),type:Te.getType(),short_form:Te.getShortForm(),description:Te.getDescription(),source:Te.getApiSourceName(),source_url:Te.getApiSourceEndpoint()}})))})});(0,si.useEffect)(()=>{i(ee.map(be=>o&&be.value.iri==""?{iri:"",label:be.label,ontology_name:"",type:"",short_form:be.value.short_form,description:be.value.description,source:be.value.source}:be.value.iri==""?{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:""}:{iri:be.value.iri,label:be.value.label,ontology_name:be.value.ontology_name,type:be.value.type,short_form:be.value.short_form,description:be.value.description,source:be.value.source}))},[ee]);function Ie(be){return be.getLabel()+" ("+be.getOntologyId().toUpperCase()+" "+be.getShortForm()+")"}function ve(be){ne(be)}function Oe(be){let Te={label:be,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:""}};Y([...q,Te]),ne(h?[Te]:[...ee,Te])}return si.default.createElement(Yx,{isClearable:!0,"aria-label":"searchBar",fullWidth:!0,...R,async:!0,isLoading:ye||fe,singleSelection:h?{asPlainText:!0}:!1,placeholder:d||"Search for a Concept",options:q,selectedOptions:ee,onSearchChange:H,onChange:ve,renderOption:de,onCreateOption:o?Oe:void 0,rowHeight:v?30:50})}function uAe(e,t,r){sAe.default.render(kar(e),t,r)}function kar(e){let t=new Wr;return si.default.createElement(zr,{colorMode:"light"},si.default.createElement(Hr,{client:t},si.default.createElement(lAe,{api:e.api,parameter:e.parameter,selectionChangedEvent:e.selectionChangedEvent,preselected:e.preselected,singleSelection:e.singleSelection,placeholder:e.placeholder,hasShortSelectedLabel:e.hasShortSelectedLabel,allowCustomTerms:e.allowCustomTerms,ts4nfdiGateway:e.ts4nfdiGateway,singleSuggestionRow:e.singleSuggestionRow,showApiSource:e.showApiSource,subTreeIris:e.subTreeIris})))}var $a=T(z());var cAe=T(Do());function pAe(e){let{api:t,parameter:r,...n}=e,o=new Jr(t),{data:i,isLoading:c,isError:d,dataUpdatedAt:h}=Qr(["ontologiesData",t,r],async()=>o.getOntologiesData(e.parameter));return $a.default.createElement($a.default.Fragment,null,$a.default.createElement(fc,{title:"Data Content",description:h?`Updated ${new Date(h).toLocaleString()}`:"",layout:"horizontal"},$a.default.createElement(Xt,{...n},d&&$a.default.createElement(Xt,null,"No data content available"),c?$a.default.createElement(_r,{size:"s"}):$a.default.createElement("ul",null,i?.getTotalOntologies()?$a.default.createElement("li",null,i?.getTotalOntologies().toLocaleString()," ontologies and terminologies"):$a.default.createElement("li",{style:{fontStyle:"italic"}},"ontology number not available"),i?.getNumClasses()?$a.default.createElement("li",null,i?.getNumClasses().toLocaleString()," terms"):$a.default.createElement("li",{style:{fontStyle:"italic"}},"term number not available"),i?.getNumProperties()?$a.default.createElement("li",null,i?.getNumProperties().toLocaleString()," properties"):$a.default.createElement("li",{style:{fontStyle:"italic"}},"property number not available"),i?.getNumIndividuals()?$a.default.createElement("li",null,i?.getNumIndividuals().toLocaleString()," individuals"):$a.default.createElement("li",{style:{fontStyle:"italic"}},"individual number not available")," "))))}function dAe(e,t,r){cAe.default.render(jar(e),t,r)}function jar(e){let t=new Wr;return $a.default.createElement(zr,{colorMode:"light"},$a.default.createElement(Hr,{client:t},$a.default.createElement(pAe,{api:e.api,parameter:e.parameter})))}var We=T(z());var ze=T(z());var N$=!0;function lY(e){return ze.default.createElement(NJ,{type:"iInCircle",color:"subdued",content:e})}function Tar(e,t){let r=Object.keys(t).map(n=>{let o=e.getLinkedEntities().getLabelForIri(n)||n;return o?"*"+t[n]+" ("+o+")":""}).join(` +`);return lY(r)}function mu(e,t,r,n=N$,o){let i=t.getLabelForIri(r)||r.split("/").pop()||r,c=t.get(r),d=e.getOntologyId();if(e.getType()!=="ontology"&&r===e?.getIri())return ze.default.createElement("span",{className:"highlight"},e.getLabel());if(!c)return r.startsWith("http")?ze.default.createElement("a",{className:"clickable",href:r},i):ze.default.createElement("span",null,i);let h=c.definedBy?c.definedBy.filter(w=>w!==d):[],v=c.type?eU(c.type):e.getType();return h.length===1?c.hasLocalDefinition?ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(d,v,{iri:r,label:i})}},i),n?ze.default.createElement(ze.default.Fragment,null,"\xA0",ze.default.createElement("button",{className:"no-decoration",onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(h[0],v,{iri:r,label:i})}},ze.default.createElement("span",{className:"ontology-badge"},h[0].toUpperCase()))):ze.default.createElement(ze.default.Fragment,null)):ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(h[0],v,{iri:r,label:i})}},i),n?ze.default.createElement(ze.default.Fragment,null,"\xA0",ze.default.createElement("button",{className:"no-decoration",onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(h[0],v,{iri:r,label:i})}},ze.default.createElement("span",{className:"ontology-badge"},h[0].toUpperCase()))):ze.default.createElement(ze.default.Fragment,null)):h.length>1?c.hasLocalDefinition?ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(d,v,{iri:r,label:i})}},i),n?ze.default.createElement(ze.default.Fragment,null,"\xA0",h.map(w=>ze.default.createElement("button",{className:"no-decoration",key:xr(),onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(w,v,{iri:r,label:i})}},ze.default.createElement("span",{className:"ontology-badge"},w.toUpperCase())))):ze.default.createElement(ze.default.Fragment,null)):ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("a",{className:"clickable",href:r},i),n?ze.default.createElement(ze.default.Fragment,null,"\xA0",ze.default.createElement("button",{className:"no-decoration",key:xr(),onClick:()=>{o.onNavigateToDisambiguate&&o.onNavigateToDisambiguate(v,{iri:r,label:i})}},ze.default.createElement("span",{className:"ontology-badge"},ze.default.createElement(mr,{type:"search",size:"s"}),"\xA0",h.length,"\xA0","ontologies"))):ze.default.createElement(ze.default.Fragment,null)):c.hasLocalDefinition?ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(d,v,{iri:r,label:i})}},i)):parseInt(c.numAppearsIn)>0?ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("a",{className:"clickable",href:r},i),n?ze.default.createElement(ze.default.Fragment,null,"\xA0",ze.default.createElement("button",{className:"no-decoration",key:xr(),onClick:()=>{o.onNavigateToDisambiguate&&o.onNavigateToDisambiguate(v,{iri:r,label:i})}},ze.default.createElement("span",{className:"ontology-badge"},ze.default.createElement(mr,{type:"search",size:"s"}),"\xA0",c.numAppearsIn,"\xA0",parseInt(c.numAppearsIn)>1?"ontologies":"ontology"))):ze.default.createElement(ze.default.Fragment,null)):ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("a",{className:"clickable",href:c.url||r},i))}function En(e,t,r,n=N$,o){let i=ze.default.createElement(ze.default.Fragment,null);if(t=t.mergeWith(r.linkedEntities),typeof r=="string")i=mu(e,t,r,n,o);else if(typeof r=="object"&&!Array.isArray(r)&&Array.isArray(r.type)&&r.type.indexOf("reification")!==-1)i=gc(e,kt.fromJson(r)[0],n,o);else{let c=r["http://www.w3.org/2002/07/owl#someValuesFrom"],d=r["http://www.w3.org/2002/07/owl#allValuesFrom"],h=mt(r["http://www.w3.org/2002/07/owl#intersectionOf"]),v=mt(r["http://www.w3.org/2002/07/owl#unionOf"]),w=r["http://www.w3.org/2002/07/owl#hasValue"],_=r["http://www.w3.org/2002/07/owl#minCardinality"]||r["http://www.w3.org/2002/07/owl#minQualifiedCardinality"],I=r["http://www.w3.org/2002/07/owl#maxCardinality"]||r["http://www.w3.org/2002/07/owl#maxQualifiedCardinality"],R=r["http://www.w3.org/2002/07/owl#cardinality"]||r["http://www.w3.org/2002/07/owl#qualifiedCardinality"],D=r["http://www.w3.org/2002/07/owl#hasSelf"],F=r["http://www.w3.org/2002/07/owl#complementOf"],A=mt(r["http://www.w3.org/2002/07/owl#oneOf"]),N=r["http://www.w3.org/2002/07/owl#inverseOf"],H=r["http://www.w3.org/2002/07/owl#onProperty"],q=r["http://www.w3.org/2002/07/owl#onDatatype"];if(q){let Y=[En(e,t,q,n,o)],ee=mt(r["http://www.w3.org/2002/07/owl#withRestrictions"]);if(ee.length>0){Y.push(ze.default.createElement(ze.default.Fragment,null,"["));let ne=!0;for(let te of ee){ne?ne=!1:Y.push(ze.default.createElement(ze.default.Fragment,null,",\xA0"));let de=te["http://www.w3.org/2001/XMLSchema#minExclusive"],fe=te["http://www.w3.org/2001/XMLSchema#minInclusive"],ye=te["http://www.w3.org/2001/XMLSchema#maxExclusive"],Ie=te["http://www.w3.org/2001/XMLSchema#maxInclusive"];de?Y.push(ze.default.createElement(ze.default.Fragment,null,"> ",de)):fe?Y.push(ze.default.createElement(ze.default.Fragment,null,"\u2265 ",fe)):ye?Y.push(ze.default.createElement(ze.default.Fragment,null,"< ",ye)):Ie&&Y.push(ze.default.createElement(ze.default.Fragment,null,"\u2264 ",Ie))}Y.push(ze.default.createElement(ze.default.Fragment,null,"]"))}i=ze.default.createElement(ze.default.Fragment,null,Y.map(ne=>ze.default.createElement("span",{key:xr()},ne)))}else if(c)i=ze.default.createElement(ze.default.Fragment,null,En(e,t,H,n,o),ze.default.createElement("i",{style:{color:"purple"}}," some "),En(e,t,mt(c)[0],n,o));else if(d)i=ze.default.createElement(ze.default.Fragment,null,En(e,t,H,n,o),ze.default.createElement("i",{style:{color:"purple"}}," only "),En(e,t,mt(d)[0],n,o));else if(h.length>0){let Y=[ze.default.createElement("span",{key:xr(),className:"text-neutral-default"},"(")];for(let ee of h)Y.length>1&&Y.push(ze.default.createElement("i",null," and ")),Y.push(En(e,t,ee,n,o));Y.push(ze.default.createElement("span",{className:"text-neutral-default"},")")),i=ze.default.createElement("span",null,Y.map(ee=>ze.default.createElement("span",{key:xr()},ee)))}else if(v.length>0){let Y=[ze.default.createElement("span",{key:xr(),className:"text-neutral-default"},"(")];for(let ee of v)Y.length>1&&Y.push(ze.default.createElement("i",null," or ")),Y.push(En(e,t,ee,n,o));Y.push(ze.default.createElement("span",{className:"text-neutral-default"},")")),i=ze.default.createElement("span",null,Y.map(ee=>ze.default.createElement("span",{key:xr()},ee)))}else if(w)i=ze.default.createElement(ze.default.Fragment,null,En(e,t,H,n,o),ze.default.createElement("i",{style:{color:"purple"}}," value "),En(e,t,mt(w)[0],n,o));else if(_)i=ze.default.createElement(ze.default.Fragment,null,En(e,t,H,n,o),ze.default.createElement("i",{style:{color:"purple"}}," min "),En(e,t,mt(_)[0],n,o));else if(I)i=ze.default.createElement(ze.default.Fragment,null,En(e,t,H,n,o),ze.default.createElement("i",{style:{color:"purple"}}," max "),En(e,t,mt(I)[0],n,o));else if(R)i=ze.default.createElement(ze.default.Fragment,null,En(e,t,H,n,o),ze.default.createElement("i",{style:{color:"purple"}}," exactly "),En(e,t,mt(R)[0],n,o));else if(D)i=ze.default.createElement(ze.default.Fragment,null,En(e,t,H,n,o),ze.default.createElement("i",{style:{color:"purple"}}," Self "),En(e,t,mt(D)[0],n,o));else if(F)i=ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("i",null,"not "),En(e,t,mt(F)[0],n,o));else if(A.length>0){let Y=[ze.default.createElement("span",{key:xr(),className:"text-neutral-default"},"{")];for(let ee of A)Y.length>1&&Y.push(ze.default.createElement("span",{key:xr(),className:"text-neutral-default"},",\xA0")),Y.push(En(e,t,ee,n,o));Y.push(ze.default.createElement("span",{className:"text-neutral-default"},"}")),i=ze.default.createElement("span",null,Y.map(ee=>ze.default.createElement("span",{key:xr()},ee)))}else N&&(i=ze.default.createElement(ze.default.Fragment,null,ze.default.createElement("i",{style:{color:"purple"}},"inverse "),ze.default.createElement("span",{key:xr(),className:"text-neutral-default"},"("),En(e,t,N,n,o),ze.default.createElement("span",{key:xr(),className:"text-neutral-default"},")")))}return i}function zP(e,t,r,n=N$,o){return ze.default.createElement(ze.default.Fragment,null,r.length===1?ze.default.createElement("p",null,En(e,e.getLinkedEntities(),r[0],n,o)):ze.default.createElement("ul",null,r.map(i=>ze.default.createElement("li",{key:xr()},En(e,e.getLinkedEntities(),i,n,o)))))}function fAe(e,t,r,n=N$,o){let i=[];if(r)for(let v of Object.keys(r.linkedEntities))for(let w=t.indexOf(v,0);w!==-1;w=t.indexOf(v,w))i.push({start:w,end:w+v.length,link:mu(e,r,v,n,o)}),w+=v.length;let c=/[A-z]+:\/\/[^\s]+/g;for(let v=c.exec(t);v;v=c.exec(t)){let w=v[0];i.push({start:v.index,end:v.index+w.length,link:ze.default.createElement("span",{key:xr()},ze.default.createElement("a",{className:"clickable",href:w},w))})}i.sort((v,w)=>v.start-w.start);e:for(let v=0;v=I.start&&I.end>=_.start){_.end-_.startR.getEntityObject(r,i,n,c,h));function q(ve){return We.default.createElement(We.default.Fragment,null,ve.getLabel()&&We.default.createElement(We.default.Fragment,null,We.default.createElement(qt,null,We.default.createElement("b",null,"Label:"),ve.getLabel()),We.default.createElement(Oo,null)))}function Y(ve){return We.default.createElement(We.default.Fragment,null,ve.getSynonyms().length>0&&We.default.createElement(We.default.Fragment,null,We.default.createElement(qt,null,We.default.createElement("b",null,"Synonyms:"),ve.getSynonyms().length>1?We.default.createElement(We.default.Fragment,null,We.default.createElement("ul",null,ve.getSynonyms().map(Oe=>We.default.createElement("li",{key:xr(),id:Oe.value},gc(ve,Oe,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))),We.default.createElement("p",null)):We.default.createElement("p",null,gc(ve,ve.getSynonyms()[0],d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function ee(ve){let Oe=ve.getHasKey();return We.default.createElement(We.default.Fragment,null,Oe.length>0&&We.default.createElement(We.default.Fragment,null,We.default.createElement(qt,null,We.default.createElement("b",null,"Has Key:"),Oe.length>1?We.default.createElement(We.default.Fragment,null,We.default.createElement("ul",null,Oe.map(be=>We.default.createElement("li",{key:xr()},En(ve,ve.getLinkedEntities(),be,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))),We.default.createElement("p",null)):We.default.createElement("p",null,En(ve,ve.getLinkedEntities(),Oe[0],d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function ne(ve){return We.default.createElement(We.default.Fragment,null,ve.getSubsets().length>0&&We.default.createElement(We.default.Fragment,null,We.default.createElement(qt,null,We.default.createElement("b",null,"In Subsets:"),ve.getSubsets().length>1?We.default.createElement(We.default.Fragment,null,We.default.createElement("ul",null,ve.getSubsets().map(Oe=>We.default.createElement("li",{key:xr(),id:Oe+xr()},mu(ve,ve.getLinkedEntities(),Oe,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))),We.default.createElement("p",null)):We.default.createElement("p",null,mu(ve,ve.getLinkedEntities(),ve.getSubsets()[0],d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function te(ve){let Oe=ve.getRdfTypes().map(be=>({"http://www.w3.org/2002/07/owl#FunctionalProperty":"Functional","http://www.w3.org/2002/07/owl#InverseFunctionalProperty":"Inverse Functional","http://www.w3.org/2002/07/owl#TransitiveProperty":"Transitive","http://www.w3.org/2002/07/owl#SymmetricProperty":"Symmetric","http://www.w3.org/2002/07/owl#AsymmetricProperty":"Asymmetric","http://www.w3.org/2002/07/owl#ReflexiveProperty":"Reflexive","http://www.w3.org/2002/07/owl#IrreflexiveProperty":"Irreflexive"})[be]).filter(be=>!!be);return We.default.createElement(We.default.Fragment,null,Oe.length>0&&We.default.createElement(We.default.Fragment,null,We.default.createElement(qt,null,We.default.createElement("b",null,"Characteristics:"),Oe.length>1?We.default.createElement(We.default.Fragment,null,We.default.createElement("ul",null,Oe.map(be=>We.default.createElement("li",{key:xr()},be)).sort()),We.default.createElement("p",null)):We.default.createElement("p",null,Oe[0]))))}function de(ve){let Oe=ve.getDomain();return We.default.createElement(We.default.Fragment,null,Oe.length>0&&We.default.createElement(We.default.Fragment,null,We.default.createElement(qt,null,We.default.createElement("b",null,"Domain:"),Oe.length>1?We.default.createElement(We.default.Fragment,null,We.default.createElement("ul",null,Oe.map(be=>We.default.createElement("li",{key:xr()},En(ve,ve.getLinkedEntities(),be,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))),We.default.createElement("p",null)):We.default.createElement("p",null,En(ve,ve.getLinkedEntities(),Oe[0],d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function fe(ve){let Oe=ve.getRange();return We.default.createElement(We.default.Fragment,null,Oe.length>0&&We.default.createElement(qt,null,We.default.createElement("b",null,"Range:"),Oe.length>1?We.default.createElement(We.default.Fragment,null,We.default.createElement("ul",null,Oe.map(be=>We.default.createElement("li",{key:xr()},En(ve,ve.getLinkedEntities(),be,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))),We.default.createElement("p",null)):We.default.createElement("p",null,En(ve,ve.getLinkedEntities(),Oe[0],d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}function ye(ve){let Oe=Object.keys(ve.properties),be=Oe.filter(Ae=>Ae.startsWith("negativePropertyAssertion+")),Te=Oe.filter(Ae=>ve.getLinkedEntities().get(Ae)&&ve.getLinkedEntities().get(Ae)?.type.indexOf("objectProperty")!==-1),Pe=Oe.filter(Ae=>ve.getLinkedEntities().get(Ae)&&ve.getLinkedEntities().get(Ae)?.type.indexOf("dataProperty")!==-1),Re=[];for(let Ae of Te){let Ve=mt(ve.properties[Ae]);for(let Je of Ve)Re.push(We.default.createElement(We.default.Fragment,null,En(ve,ve.getLinkedEntities(),Ae,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),typeof Je=="string"&&Je.includes("http")?We.default.createElement(We.default.Fragment,null,"\xA0",We.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",mu(ve,ve.getLinkedEntities(),Je,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):lY(typeof Je=="string"?Je:typeof Je=="object"&&!Array.isArray(Je)&&Je.value?JSON.stringify(Je.value):JSON.stringify(Je))))}for(let Ae of Pe){let Ve=mt(ve.properties[Ae]);for(let Je of Ve)Re.push(We.default.createElement(We.default.Fragment,null,En(ve,ve.getLinkedEntities(),Ae,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),We.default.createElement(We.default.Fragment,null,"\xA0",We.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",mu(ve,ve.getLinkedEntities(),Je,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}for(let Ae of be){let Ve=Ae.slice(26),Je=ve.getLinkedEntities().get(Ve),pt=Je?.type.indexOf("dataProperty")!==-1,Qe=Je?.type.indexOf("objectProperty")!==-1,Fe=mt(ve.properties[Ae]);for(let Nt of Fe)Re.push(We.default.createElement(We.default.Fragment,null,We.default.createElement("i",{style:{color:"purple"}},"not")," ",En(ve,ve.getLinkedEntities(),Ve,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),typeof Nt=="string"&&Nt.includes("http")?We.default.createElement(We.default.Fragment,null,"\xA0",We.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",mu(ve,ve.getLinkedEntities(),Nt,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):Qe?lY(typeof Nt=="string"?Nt:typeof Nt=="object"&&!Array.isArray(Nt)&&Nt.value?JSON.stringify(Nt.value):JSON.stringify(Nt)):pt?We.default.createElement(We.default.Fragment,null,"\xA0",We.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",mu(ve,ve.getLinkedEntities(),Nt,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):We.default.createElement(We.default.Fragment,null)))}return We.default.createElement(We.default.Fragment,null,Re.length>0&&We.default.createElement(We.default.Fragment,null,We.default.createElement(qt,null,We.default.createElement("b",null,"Property assertions:"),Re.length>1?We.default.createElement(We.default.Fragment,null,We.default.createElement("ul",null,Re.map(Ae=>We.default.createElement("li",{key:xr()},Ae)).sort()),We.default.createElement("p",null)):We.default.createElement("p",null,Re[0]))))}function Ie(ve){return We.default.createElement(We.default.Fragment,null,ve.getAnnotationPredicates().map((Oe,be,Te)=>{let Pe=ve.getAnnotationById(Oe);return Pe.length==0?We.default.createElement(We.default.Fragment,null):We.default.createElement(We.default.Fragment,null,We.default.createElement(qt,{grow:!1,key:Oe},We.default.createElement("b",null,_h(bE(yE(ve.getAnnotationTitleById(Oe)))),":"),Pe.length>1?We.default.createElement(We.default.Fragment,null,We.default.createElement("ul",null,Pe.map(Re=>We.default.createElement("li",{key:xr(),id:Re.value},gc(ve,Re,d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))),We.default.createElement("p",null)):We.default.createElement("p",{key:xr()},gc(ve,Pe[0],d,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}))}return We.default.createElement(We.default.Fragment,null,We.default.createElement(fc,{title:o?(i?_h(Xq(i)):A&&D?_h(D.getType()):"")+" Information":"",layout:"horizontal"},F&&We.default.createElement(_r,{size:"s"}),A&&D!==void 0&&We.default.createElement(Xt,{...I},q(D),Y(D),dx(D)&&We.default.createElement(We.default.Fragment,null,ne(D),ee(D)),Z5(D)&&We.default.createElement(We.default.Fragment,null,te(D),de(D),fe(D)),gE(D)&&We.default.createElement(We.default.Fragment,null,ye(D)),Ie(D)),N&&We.default.createElement(Xt,null,Lo(H,"information"))))}function vAe(e,t,r){hAe.default.render(Mar(e),t,r)}function Mar(e){let t=new Wr;return We.default.createElement(zr,{colorMode:"light"},We.default.createElement(Hr,{client:t},We.default.createElement(mAe,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,showBadges:e.showBadges,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var F$=T(z());var gAe=T(Do());function yAe(e){let{apiQuery:t,buttonText:r,buttonSize:n}=e;return F$.default.createElement(u3,{href:t,target:"_blank",size:n||"m"},r)}function bAe(e,t,r){gAe.default.render(Aar(e),t,r)}function Aar(e){let t=new Wr;return F$.default.createElement(zr,{colorMode:"light"},F$.default.createElement(Hr,{client:t},F$.default.createElement(yAe,{apiQuery:e.apiQuery,buttonText:e.buttonText,buttonSize:e.buttonSize})))}var vu=T(z());var wAe=T(Do());function uY(e){let{api:t,ontologyId:r,iri:n,entityType:o,colorFirst:i,colorSecond:c,parameter:d,useLegacy:h,onNavigateToOntology:v}=e,w=new Jr(t),{data:_,isLoading:I,isSuccess:R,isError:D,error:F}=Qr(["breadcrumb",t,d,o,n,r,h],async()=>await w.getEntityObject(n,o,r,d,h));return vu.default.createElement(vu.default.Fragment,null,I&&vu.default.createElement("span",null,vu.default.createElement("button",{onClick:()=>{e.onNavigateToOntology&&e.ontologyId&&e.onNavigateToOntology(e.ontologyId||"",void 0,void 0)}},vu.default.createElement(Il,{className:e.ontologyId?"breadcrumb clickable-breadcrumb":"breadcrumb",color:i||(e.ontologyId?"primary":"warning")},e.ontologyId?.toUpperCase()||vu.default.createElement(_r,{size:"s"}))),"\xA0",vu.default.createElement(mr,{type:"arrowRight"}),"\xA0",vu.default.createElement(Il,{className:"breadcrumb",color:c||"warning"},vu.default.createElement(_r,{size:"s"}))),R&&_&&Rd(_)&&vu.default.createElement(s_,{ontologyName:_.getOntologyId(),shortForm:_.getShortForm(),ontologyId:r||_.getOntologyId(),colorFirst:i,colorSecond:c,onNavigateToOntology:v}),D&&vu.default.createElement(s_,{ontologyName:e.ontologyId?.toUpperCase()||_&&_.getOntologyId().toUpperCase()||Lo(F,"ontology"),shortForm:_&&_.getShortForm()?_.getShortForm().toUpperCase():"",ontologyId:r||(_?_.getOntologyId():""),colorFirst:i||(e.ontologyId||_&&_.getOntologyId()?"primary":"danger"),colorSecond:c||(_&&_.getShortForm()?"success":"danger"),onNavigateToOntology:v}))}function OAe(e,t,r){wAe.default.render(Rar(e),t,r)}function Rar(e){let t=new Wr;return vu.default.createElement(zr,{colorMode:"light"},vu.default.createElement(Hr,{client:t},vu.default.createElement(uY,{api:e.api,entityType:e.entityType,iri:e.iri,ontologyId:e.ontologyId,colorFirst:e.colorFirst,colorSecond:e.colorSecond,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}var uy=T(z());var cY=T(z());function pY(e){let{descText:t,description:r,...n}=e;return cY.default.createElement(cY.default.Fragment,null,cY.default.createElement(Xt,{...n},t||r))}var xAe=T(Do()),Dar="No description available.";function dY(e){let{api:t,ontologyId:r,iri:n,descText:o,thingType:i,parameter:c,useLegacy:d,...h}=e,v=new Jr(t),{data:w,isLoading:_,isSuccess:I,isError:R,error:D}=Qr(["description",t,c,i,n,r,d],async()=>v.getThingObject(n,i,r,c,d));return uy.default.createElement(uy.default.Fragment,null,_&&uy.default.createElement(_r,{size:"s"}),I&&w&&uy.default.createElement(pY,{description:w.getDescription()||Dar,descText:o,...h}),R&&uy.default.createElement(Xt,null,Lo(D,"description")))}function _Ae(e,t,r){xAe.default.render(Lar(e),t,r)}function Lar(e){let t=new Wr;return uy.default.createElement(zr,{colorMode:"light"},uy.default.createElement(Hr,{client:t},uy.default.createElement(dY,{api:e.api,ontologyId:e.ontologyId,iri:e.iri,descText:e.descText,thingType:e.thingType,parameter:e.parameter,color:e.color,useLegacy:e.useLegacy})))}var mp=T(z());var SAe=T(Do());function WP(e){let{iri:t,iriText:r,color:n,externalIcon:o,urlPrefix:i,copyButton:c}=e,[d,h]=(0,mp.useState)(!1),w=typeof i<"u"&&i!==""?i+encodeURIComponent(t):t,_=()=>d?mp.default.createElement(pc,{style:{marginLeft:"5px",color:n&&(Yq(n)||Qq(n))?n:""},display:"base",iconType:"check",key:"copy-btn",color:n&&gre(n)?n:void 0}):mp.default.createElement(pc,{display:"base",iconType:"copy",key:"copy-btn",style:{marginLeft:"5px",marginRight:"5px",color:n&&(Yq(n)||Qq(n))?n:""},color:n&&D5e(n)?n:void 0,onClick:()=>{navigator.clipboard.writeText(w),h(!0),setTimeout(()=>{h(!1)},2e3)}});return mp.default.createElement(qt,{grow:!1},mp.default.createElement("div",null,c==="left"&&mp.default.createElement(_,null),mp.default.createElement(Xg,{href:w,target:"_blank",style:{color:n&&(Yq(n)||Qq(n))?n:""},color:n&&gre(n)?n:void 0,external:o},r||t),c==="right"&&mp.default.createElement(_,null)))}function IAe(e,t,r){SAe.default.render(Nar(e),t,r)}function Nar(e){let t=new Wr;return mp.default.createElement(zr,{colorMode:"light"},mp.default.createElement(Hr,{client:t},mp.default.createElement(WP,{iri:e.iri,iriText:e.iriText,color:e.color,externalIcon:e.externalIcon,urlPrefix:e.urlPrefix,copyButton:e.copyButton})))}var zh=T(z());var vp=T(z());var B$=T(z());function fY(e){function t(){return e.synonyms&&e.synonyms.length>0?e.synonyms.map((r,n)=>B$.default.createElement(qt,{key:r+n},r)):B$.default.createElement(Xt,null,"No alternative names exist.")}return B$.default.createElement(kl,null,B$.default.createElement(yi,{style:{padding:10},direction:"column"},t()))}var l_=T(z());function hY(e){function t(r){return r&&r.length>0?r?.map((n,o)=>l_.default.createElement(qt,{key:o},n)):l_.default.createElement(Xt,null,"No cross references exist.")}return l_.default.createElement(kl,null,l_.default.createElement(l_.default.Fragment,null,l_.default.createElement(yi,{style:{padding:7},direction:"column"},t(e.crossrefs))))}var Ht=T(z());var EAe=T(Do()),Far=!0;function mY(e){let{ontologyId:t,api:r,parameter:n,hasTitle:o=Far,useLegacy:i,showBadges:c,...d}=e,h=new Jr(r),v={onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate},{data:w,isLoading:_,isSuccess:I,isError:R,error:D}=Qr(["ontologyInfo",e],()=>h.getOntologyObject(t,n,i));function F(te){return Ht.default.createElement(Ht.default.Fragment,null,(te.getIri()||te.getOntologyPurl())&&Ht.default.createElement(qt,null,Ht.default.createElement("b",null,"Ontology IRI:"),Ht.default.createElement("p",null,Ht.default.createElement("a",{id:"ontologyIri",href:te.getIri()||te.getOntologyPurl()},te.getIri()||te.getOntologyPurl()))))}function A(te){return Ht.default.createElement(Ht.default.Fragment,null,te.getVersionIri()&&Ht.default.createElement(qt,null,Ht.default.createElement("b",null,"Version IRI:"),Ht.default.createElement("p",null,Ht.default.createElement("a",{id:"versionIri",href:te.getVersionIri()},te.getVersionIri()))))}function N(te){return Ht.default.createElement(Ht.default.Fragment,null,te.getSourceFileTimestamp()&&Ht.default.createElement(qt,null,Ht.default.createElement("b",null,"Last loaded:"),Ht.default.createElement("p",null,new Date(te.getSourceFileTimestamp()).toString())))}function H(te){return Ht.default.createElement(Ht.default.Fragment,null,te.getOntologyId()&&Ht.default.createElement(qt,null,Ht.default.createElement("b",null,"Ontology ID:"),Ht.default.createElement("p",null,te.getOntologyId())))}function q(te){return Ht.default.createElement(Ht.default.Fragment,null,te.getVersion()&&Ht.default.createElement(qt,null,Ht.default.createElement("b",null,"Version:"),Ht.default.createElement("p",null,te.getVersion())))}function Y(te){return Ht.default.createElement(Ht.default.Fragment,null,te.getNumClasses()&&Ht.default.createElement(qt,null,Ht.default.createElement("b",null,"Number of classes:"),Ht.default.createElement("p",null,te.getNumClasses().toLocaleString())))}function ee(te){return Ht.default.createElement(Ht.default.Fragment,null,te.getCreators().length>0&&Ht.default.createElement(Ht.default.Fragment,null,Ht.default.createElement(qt,null,Ht.default.createElement("b",null,"Creators:"),te.getCreators().length>1?Ht.default.createElement(Ht.default.Fragment,null,Ht.default.createElement("ul",null,te.getCreators().map(de=>Ht.default.createElement("li",{key:de+xr()},mu(te,te.getLinkedEntities(),de,c,v)))),Ht.default.createElement("p",null)):Ht.default.createElement("p",null,mu(te,te.getLinkedEntities(),te.getCreators()[0],c,v))),Ht.default.createElement(Oo,null)))}function ne(te){return Ht.default.createElement(Ht.default.Fragment,null,te.getAnnotationPredicates().map(de=>{let fe=te.getAnnotationById(de);return fe.length==0?Ht.default.createElement(Ht.default.Fragment,null):Ht.default.createElement(qt,{grow:!1,key:de},Ht.default.createElement("b",null,_h(bE(yE(te.getAnnotationTitleById(de)))),":"),fe.length>1?Ht.default.createElement(Ht.default.Fragment,null,Ht.default.createElement("ul",null,fe.map(ye=>Ht.default.createElement("li",{key:xr(),id:ye.value},gc(te,ye,c,v)))),Ht.default.createElement("p",null)):Ht.default.createElement("p",{key:xr()},gc(te,fe[0],c,v)))}))}return Ht.default.createElement(Ht.default.Fragment,null,Ht.default.createElement(fc,{title:o?"Ontology Information":"",layout:"horizontal",style:e.width?{width:e.width}:{}},_&&Ht.default.createElement(_r,{size:"s"}),I&&w!==void 0&&Ht.default.createElement(Xt,{...d},F(w),A(w),N(w),Ht.default.createElement(Ht.default.Fragment,null,H(w),q(w),Y(w)),ne(w)),R&&Ht.default.createElement(Xt,null,Lo(D,"information"))))}function PAe(e,t,r){EAe.default.render(Bar(e),t,r)}function Bar(e){let t=new Wr;return Ht.default.createElement(zr,{colorMode:"light"},Ht.default.createElement(Hr,{client:t},Ht.default.createElement(mY,{ontologyId:e.ontologyId,api:e.api,parameter:e.parameter,useLegacy:e.useLegacy,showBadges:e.showBadges,hasTitle:e.hasTitle,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var en=T(z());var jAe=T(Do());var z$=class{static fromTopConcept(t){return{iri:t.uri,label:t.label,hasChildren:t.hasChildren,parents:[]}}static fromHierarchyResult(t){return{iri:t.uri,label:t.prefLabel,hasChildren:t.narrower!=null&&t.narrower.length>0,parents:kt.fromJson(t.broader)}}static fromPrefAndUriAndChildren(t,r){return{iri:t.uri,label:t.prefLabel,hasChildren:t.hasChildren,parents:kt.fromJson(r)}}static fromLabelAndUriAndChildren(t,r){return{iri:t.uri,label:t.label,hasChildren:t.hasChildren,parents:kt.fromJson(r)}}},vY=class e{axiosInstance;constructor(t){this.axiosInstance=$5.create({baseURL:t,headers:{Accept:"application/json"}})}async makeCall(t,r){return(await this.axiosInstance.get(t,r)).data}async buildHierarchyWithIri(t){let{iri:r,ontologyId:n,showSiblingsOnInit:o}=t;if(!n)throw Error("ontologyId has to be specified for SKOS API.");let i=[],c=new Map,d=new Map,h=new Set,v=new Set;if(r){let R=await this.makeCall(`/${n}/hierarchy`,{params:{uri:r,lang:"en",format:"application/json"}}).then(D=>Object.keys(D.broaderTransitive).map(F=>D.broaderTransitive[F]));for(let D of R){let F=z$.fromHierarchyResult(D);d.set(F.iri,F),D.top&&i.push(F.iri),o||v.add(F.iri)}for(let D of R)if(D.narrower!=null){let F=[];for(let A of D.narrower){let N=d.get(A.uri);N==null?(N=z$.fromLabelAndUriAndChildren(A,[D.uri]),d.set(N.iri,N)):N.parents.map(H=>H.value).includes(D.uri)||N.parents&&N.parents.push(...kt.fromJson(D.uri)),F.push(N)}F.sort((A,N)=>(A.label||A.iri).localeCompare(N.label||N.iri)),c.set(D.uri,F.map(A=>({childIri:A.iri}))),h.add(D.uri)}}else{let R=await this.makeCall(`/${n}/topConcepts`,{params:{lang:"en",format:"application/json"}}).then(D=>D.topconcepts);for(let D of R)i.push(D.uri)}function w(R,D){D.add(R.iri);let F=new Ih(R),A=c.get(R.iri)||[];if(o)for(let N of A){if(D.has(N.childIri)){console.error(`Cyclic tree at entity "${N.childIri}".`);continue}let H=d.get(N.childIri);H!=null&&F.addChild(w(H,D))}else for(let N of A){if(D.has(N.childIri)){console.error(`Cyclic tree at entity "${N.childIri}".`);continue}let H=d.get(N.childIri);H!=null&&v.has(N.childIri)&&F.addChild(w(H,D))}return F.loadedChildren.length>0&&(F.expanded=!0),D.delete(R.iri),F}let _=new Set,I=i.map(R=>w(d.get(R),_)).sort((R,D)=>(R.entityData.label||R.entityData.iri).localeCompare(D.entityData.label||D.entityData.iri));return new Eh({parentChildRelations:c,entitiesData:d,allChildrenPresent:h,roots:I,api:new e(this.axiosInstance.getUri()),ontologyId:n,mainEntityIri:r,keepExpansionStates:t.keepExpansionStates})}async loadHierarchyChildren(t){let{nodeToExpand:r,ontologyId:n}=t;return(await this.makeCall(`/${n}/children`,{params:{uri:r.entityData.iri,lang:"en",format:"application/json"}})).narrower.map(i=>z$.fromPrefAndUriAndChildren(i,[r.entityData.iri]))}};function kAe(e){return{iri:e["@id"],label:e.prefLabel,hasChildren:e.hasChildren,parents:[]}}var gY=class e{axiosInstance;apiKey;constructor(t,r){this.axiosInstance=$5.create({baseURL:t,headers:{Accept:"application/json"}}),this.apiKey=r,this.axiosInstance.interceptors.request.use(n=>(n.params=n.params||{},n.params.apikey=this.apiKey,n.params.format="json",n))}async makeCall(t,r){return(await this.axiosInstance.get(t,r)).data}async buildHierarchyWithIri(t){let{iri:r,ontologyId:n,entityType:o,showSiblingsOnInit:i}=t;if(!n)throw Error("ontologyId has to be specified for OntoPortal API.");if(!o)throw Error("entityType has to be specified for OntoPortal API.");let c=[],d=new Map,h=new Map,v=new Set,w=new Set;function _(F){if(d.set(F["@id"],kAe(F)),F.hasChildren&&F.children.length>0){h.set(F["@id"],F.children.map(A=>({childIri:A["@id"]}))),v.add(F["@id"]),w.add(F["@id"]);for(let A of F.children)_(A)}}if(r){let F=await this.makeCall(`/ontologies/${n.toUpperCase()}/${wl(o,!1)}/${encodeURIComponent(r)}/tree`,{params:{include:"@id,prefLabel,hasChildren,children"}});for(let A of F)c.push(A["@id"]),w.add(A["@id"]),_(A);w.add(r)}else{let F=await this.makeCall(`/ontologies/${n.toUpperCase()}/${wl(o,!1)}/roots`,{params:{include:"@id,prefLabel,hasChildren"}});for(let A of F)c.push(A["@id"]),w.add(A["@id"])}function I(F,A){A.add(F.iri);let N=new Ih(F),H=h.get(F.iri)||[];if(i)for(let q of H){if(A.has(q.childIri)){console.error(`Cyclic tree at entity "${q.childIri}".`);continue}N.addChild(I(d.get(q.childIri),A))}else for(let q of H){if(A.has(q.childIri)){console.error(`Cyclic tree at entity "${q.childIri}".`);continue}w.has(q.childIri)&&N.addChild(I(d.get(q.childIri),A))}return N.loadedChildren.length>0&&(N.expanded=!0),A.delete(F.iri),N}let R=new Set,D=c.map(F=>I(d.get(F),R)).sort((F,A)=>(F.entityData.label||F.entityData.iri).localeCompare(A.entityData.label||A.entityData.iri));return new Eh({parentChildRelations:h,entitiesData:d,allChildrenPresent:v,roots:D,api:new e(this.axiosInstance.getUri(),this.apiKey),ontologyId:n,mainEntityIri:r,keepExpansionStates:t.keepExpansionStates,entityType:o})}async loadHierarchyChildren(t){let{nodeToExpand:r,ontologyId:n,entityType:o}=t;if(o==null)throw Error("entityType has to be provided to load children in an OntoPortal hierarchy.");return(await this.makeCall(`/ontologies/${n.toUpperCase()}/${wl(o,!1)}/${encodeURIComponent(r.entityData.iri)}/children`,{params:{include:"@id,prefLabel,hasChildren"}})).collection.map(c=>kAe(c))}};var W$={INCLUDE_OBSOLETE_ENTITIES:!1,PREFERRED_ROOTS:!1,KEEP_EXPANSION_STATES:!1,SHOW_SIBLINGS_ON_INIT:!1,USE_LEGACY:!1};function zar(e){let t=e.entityData.definedBy||[];return t.includes(e.ontologyId)&&(t=[]),en.default.createElement(en.default.Fragment,null,en.default.createElement("span",{className:e.highlight?"highlight":void 0},e.childRelationToParent=="http://purl.obolibrary.org/obo/BFO_0000050"&&en.default.createElement(en.default.Fragment,null,en.default.createElement("span",{style:{marginInlineStart:"1.5px",marginTop:"2.5px"},className:"surroundCircle"},"\xA0P\xA0"),"\xA0"),e.childRelationToParent=="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"&&en.default.createElement(en.default.Fragment,null,en.default.createElement("span",{style:{marginInlineStart:"1.5px",marginTop:"2.5px"},className:"surroundCircle"},"I"),"\xA0"),en.default.createElement("button",{onClick:()=>{e.onNavigateToEntity&&e.onNavigateToEntity(e.ontologyId,e.entityType||"",e.entityData)}},en.default.createElement("span",null," ",e.entityData.label||e.entityData.iri," "))),t.length>0&&en.default.createElement(en.default.Fragment,null,"\xA0",t.map(r=>en.default.createElement("button",{key:`${e.entityData.iri}:${r}`,onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(r,e.entityType||"",e.entityData)}},en.default.createElement("span",{className:"ontology-badge"},r.toUpperCase())))))}function H$(e){let{apiUrl:t,backendType:r,apiKey:n,onNavigateToEntity:o,onNavigateToOntology:i,iri:c,ontologyId:d,entityType:h,includeObsoleteEntities:v=W$.INCLUDE_OBSOLETE_ENTITIES,preferredRoots:w=W$.PREFERRED_ROOTS,keepExpansionStates:_=W$.KEEP_EXPANSION_STATES,showSiblingsOnInit:I=W$.SHOW_SIBLINGS_ON_INIT,useLegacy:R=W$.USE_LEGACY}=e,[,D]=(0,en.useReducer)(Y=>Y+1%Number.MAX_SAFE_INTEGER,0),F=(0,en.useMemo)(()=>{switch(r){case"ols":return new Jr(t);case"skosmos":return new vY(t);case"ontoportal":return new gY(t,n||"");default:return new Jr(t)}},[t,r,n]),{data:A,isSuccess:N}=Qr(["hierarchySemLookP",c,h,d,w,v,_,I,R],async function(){return await F.buildHierarchyWithIri({ontologyId:d,iri:c,entityType:h,preferredRoots:w,includeObsoleteEntities:v,keepExpansionStates:_,showSiblingsOnInit:I,useLegacy:R})}),H=(0,en.useCallback)(Y=>{if(!(A instanceof Eh))throw Error("Hierarchy object was undefined while trying to expand a tree node. This should never happen.");A.entityType&&Ad(A.entityType)||(Y.expanded=!Y.expanded,Y.expanded?(Y.loading=!0,D(),A.fetchInformationForExpansion(Y).then(()=>{Y.loading=!1,D()})):(D(),A.closeNode(Y)))},[A]);function q(Y,ee,ne){return en.default.createElement("div",{key:xr()},en.default.createElement(Xt,null,en.default.createElement("div",{style:{height:"24px"}},en.default.createElement("div",{style:{position:"relative",borderLeft:"1px dotted black",borderBottom:"1px dotted black",width:"12px",height:"16px",left:"5.5px",top:"-1px"}}),en.default.createElement("div",{style:{position:"relative",borderLeft:ne?"1px dotted black":"",width:"12px",height:"9px",left:"5.5px",top:"0px"}}),en.default.createElement("div",{style:{position:"relative",top:"-22px"}},en.default.createElement("span",null,ee.entityData.hasChildren?en.default.createElement("button",{style:{},onClick:()=>{H(ee)}},en.default.createElement(mr,{type:ee.expanded?"arrowDown":"arrowRight",size:"s"})):en.default.createElement(mr,{type:"empty"})),"\xA0",en.default.createElement(zar,{entityData:ee.entityData,childRelationToParent:ee.childRelationToParent,ontologyId:Y.ontologyId,entityType:Y.entityType,onNavigateToEntity:o,onNavigateToOntology:i,highlight:ee.entityData.iri==Y?.mainEntityIri}),"\xA0",ee.entityData.numDescendants!=null&&ee.entityData.numDescendants>0&&en.default.createElement("span",{style:{color:"gray"}},"(",ee.entityData.numDescendants.toLocaleString(),")")))),ee.expanded&&en.default.createElement("ul",{style:{marginBlockEnd:"0",marginInlineStart:"5.5px"}},ee.loading?en.default.createElement(_r,{style:{position:"relative",left:"13px",top:"5px"}}):ee.loadedChildren.map((te,de)=>en.default.createElement("div",{key:xr(),style:{borderLeft:ne?"1px dotted black":"",paddingLeft:"1rem"}},q(Y,te,deq(A,Y,eeo.value)}),id:"tab1",name:"Alternative Names"}),(e.hierarchyTab===void 0||e.hierarchyTab)&&n.push({content:vp.default.createElement(vp.default.Fragment,null,vp.default.createElement("div",{style:{overflow:"auto"}},vp.default.createElement(H$,{apiUrl:e.api,iri:e.iri,ontologyId:e.ontologyId||(r&&r.getOntologyId()!==void 0?r.getOntologyId():""),entityType:e.entityType,useLegacy:e.useLegacy,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,preferredRoots:e.hierarchyPreferredRoots,showSiblingsOnInit:e.hierarchyShowSiblingsOnInit,keepExpansionStates:e.hierarchyKeepExpansionStates}))),id:"tab2",name:"Hierarchy"}),(e.crossRefTab===void 0||e.crossRefTab)&&n.push({content:vp.default.createElement(hY,{crossrefs:kt.fromJson(r.getCrossReferences()).map(o=>o.value)}),id:"tab3",name:"Cross references"}),(e.terminologyInfoTab===void 0||e.terminologyInfoTab)&&n.push({content:vp.default.createElement(mY,{ontologyId:e.ontologyId||r.getOntologyId(),api:e.api,parameter:"",useLegacy:e.useLegacy,showBadges:!1,hasTitle:!1,width:600}),id:"tab4",name:`About ${e.ontologyId?.toUpperCase()}`}),n.length===0?"":vp.default.createElement(vp.default.Fragment,null,vp.default.createElement(yP,{size:"s",tabs:n}))}return vp.default.createElement(vp.default.Fragment,null,Rd(e.data)||Z5(e.data)||gE(e.data)?t(e.data):null)}var CAe=T(Do());function MAe(e){let{iri:t,api:r,ontologyId:n,entityType:o,parameter:i,useLegacy:c,hierarchyTab:d,crossRefTab:h,terminologyInfoTab:v,altNamesTab:w,..._}=e,I=new Jr(r),{data:R,isLoading:D,isSuccess:F,isError:A,error:N}=Qr(["tabdata",r,i,o,t,n,c],async()=>I.getEntityObject(t,o,n,i,c));function H(q){return zh.default.createElement(yY,{..._,data:q,iri:t,api:r,useLegacy:c,entityType:q.getType(),ontologyId:n||q.getOntologyId(),hierarchyTab:d,crossRefTab:h,terminologyInfoTab:v,altNamesTab:w,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate,hierarchyPreferredRoots:e.hierarchyPreferredRoots,hierarchyKeepExpansionStates:e.hierarchyKeepExpansionStates,hierarchyShowSiblingsOnInit:e.hierarchyShowSiblingsOnInit})}return zh.default.createElement(zh.default.Fragment,null,D&&zh.default.createElement(_r,null),A&&zh.default.createElement(Xt,null,Lo(N,"description")),F&&R&&zh.default.createElement(zh.default.Fragment,null,Rd(R)?H(R):null))}function AAe(e,t,r){CAe.default.render(Har(e),t,r)}function Har(e){let t=new Wr;return zh.default.createElement(zr,{colorMode:"light"},zh.default.createElement(Hr,{client:t},zh.default.createElement(MAe,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,altNamesTab:e.altNamesTab,hierarchyTab:e.hierarchyTab,crossRefTab:e.crossRefTab,terminologyInfoTab:e.terminologyInfoTab,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate,hierarchyPreferredRoots:e.hierarchyPreferredRoots,hierarchyKeepExpansionStates:e.hierarchyKeepExpansionStates,hierarchyShowSiblingsOnInit:e.hierarchyShowSiblingsOnInit})))}var cy=T(z());var RAe=T(Do());function DAe(e){let{iri:t,api:r,parameter:n,entityType:o,ontologyId:i,useLegacy:c}=e,d=new Jr(r),{data:h,isLoading:v,isSuccess:w,isError:_,error:I}=Qr(["alternativeNameTab",r,n,o,t,i,c],async()=>d.getEntityObject(t,o,i,n,c));return cy.default.createElement(cy.default.Fragment,null,w&&h&&Rd(h)&&cy.default.createElement(fY,{synonyms:h.getSynonyms().map(R=>R.value)}),v&&cy.default.createElement(_r,null),_&&cy.default.createElement(Xt,null,Lo(I,"alternative names")))}function LAe(e,t,r){RAe.default.render(Var(e),t,r)}function Var(e){let t=new Wr;return cy.default.createElement(zr,{colorMode:"light"},cy.default.createElement(Hr,{client:t},cy.default.createElement(DAe,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter})))}var py=T(z());var NAe=T(Do());function FAe(e){let{iri:t,api:r,parameter:n,entityType:o,ontologyId:i,useLegacy:c}=e,d=new Jr(r),{data:h,isLoading:v,isSuccess:w,isError:_,error:I}=Qr(["crossRefTab",r,n,o,t,i,c],async()=>d.getEntityObject(t,o,i,n,c));return py.default.createElement(py.default.Fragment,null,w&&h&&Rd(h)&&py.default.createElement(hY,{crossrefs:kt.fromJson(h.getCrossReferences()).map(R=>R.value)}),v&&py.default.createElement(_r,null),_&&py.default.createElement(Xt,null,Lo(I,"cross references")))}function BAe(e,t,r){NAe.default.render($ar(e),t,r)}function $ar(e){let t=new Wr;return py.default.createElement(zr,{colorMode:"light"},py.default.createElement(Hr,{client:t},py.default.createElement(FAe,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy})))}var Xd=T(z());var zAe=T(z());function B3(e){return zAe.default.createElement(Xt,{className:e.className},e.titleText||e.title)}var WAe=T(Do());function xve(e){let{iri:t,ontologyId:r,api:n,titleText:o,thingType:i,parameter:c,useLegacy:d,defaultValue:h,className:v}=e,w=new Jr(n),_=v||"default-class",{data:I,isLoading:R,isSuccess:D,isError:F,error:A}=Qr(["titleData",n,c,i,t,r,d],async()=>w.getThingObject(t,i,r,c,d));return Xd.default.createElement(Xd.default.Fragment,null,o&&Xd.default.createElement(B3,{titleText:o,className:_}),!o&&D&&I&&Xd.default.createElement(B3,{title:R5e(I)?I.getName():I.getLabel(),className:_}),!o&&R&&(h?Xd.default.createElement(B3,{titleText:h,className:_}):Xd.default.createElement(_r,{size:"s"})),!o&&F&&(h?Xd.default.createElement(B3,{titleText:h,className:_}):Xd.default.createElement(Xt,null,Lo(A,"title"))))}function HAe(e,t,r){WAe.default.render(Zar(e),t,r)}function Zar(e){let t=new Wr;return Xd.default.createElement(zr,{colorMode:"light"},Xd.default.createElement(Hr,{client:t},Xd.default.createElement(xve,{api:e.api,thingType:e.thingType,iri:e.iri,ontologyId:e.ontologyId,titleText:e.titleText,parameter:e.parameter,useLegacy:e.useLegacy,defaultValue:e.defaultValue,className:e.className})))}var Ln=T(z());var VAe=T(Do());var gp=T(z());var _ve=5;function bY(e){let[t,r]=(0,gp.useState)(!1);function n(i){return gp.default.createElement("button",{key:xr(),onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(i,e.entityType||"",{iri:e.iri,label:e.label})}},gp.default.createElement("span",{className:"ontology-badge"},i.toUpperCase()))}function o(){return e.ontolist.length>_ve&&!t?gp.default.createElement(gp.default.Fragment,null,e.ontolist.slice(0,_ve).map(i=>gp.default.createElement("span",{key:xr()},n(i),"\xA0")),gp.default.createElement("button",{className:"expand-onto-list",onClick:()=>r(!0)},"+ ",e.ontolist.length-_ve)):e.ontolist.map(i=>gp.default.createElement("span",{key:xr()},n(i),"\xA0"))}return gp.default.createElement(gp.default.Fragment,null,e.ontolist&&e.ontolist.length>0&&gp.default.createElement(Xt,{style:{fontWeight:"normal"}},"Also appears in\xA0",o()))}var yp=T(z());var Sve=5;function wY(e){let[t,r]=(0,yp.useState)(!1);function n(i){return yp.default.createElement("button",{key:xr(),onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(i,e.entityType||"",{iri:e.iri,label:e.label})}},yp.default.createElement("span",{className:"ontology-badge"},i.toUpperCase()))}function o(){return e.ontolist.length>Sve&&!t?yp.default.createElement(yp.default.Fragment,null,e.ontolist.slice(0,Sve).map(i=>yp.default.createElement("span",{key:xr()},n(i),"\xA0")),yp.default.createElement("button",{className:"expand-onto-list",onClick:()=>r(!0)},"+ ",e.ontolist.length-Sve)):e.ontolist.map(i=>yp.default.createElement("span",{key:xr()},n(i),"\xA0"))}return yp.default.createElement(yp.default.Fragment,null,e.ontolist&&e.ontolist.length>0&&yp.default.createElement(Xt,{style:{fontWeight:"normal"}},"Defined by\xA0",o()))}function $Ae(e){let{iri:t,api:r,ontologyId:n,entityType:o,parameter:i,useLegacy:c,onNavigateToOntology:d,hierarchyTab:h,crossRefTab:v,terminologyInfoTab:w,altNamesTab:_,termLink:I}=e,R=new Jr(r),D=` .boldText{ font-weight: bold; } - `,{data:F,isLoading:A,isSuccess:N,isError:H,error:q}=Qr(["metadata",r,i,o,t,n,c],async()=>{let ee,ne,te;if(c){let de=(await R.getEntityResponse(t,o,void 0,i,c))._embedded;ee=ip({_embedded:{[Object.keys(de)[0]]:q5(de[Object.keys(de)[0]],c,n)}}),ne=de[Object.keys(de)[0]].map(fe=>fe.ontology_name),te=de[Object.keys(de)[0]].filter(fe=>fe.is_defining_ontology).map(fe=>fe.ontology_name)}else ee=await R.getEntityObject(t,o,n,i,c),ne=ee.getAppearsIn(),te=ee.getDefinedBy();return te=te.filter(de=>de!=ee.getOntologyId()).sort(),ne=ne.filter(de=>de!=ee.getOntologyId()&&!te.includes(de)).sort(),{entity:ee,ontoList:ne,definedBy:te}});function Y(ee){return Ln.default.createElement(Ln.default.Fragment,null,Ln.default.createElement("style",null,D),Ln.default.createElement(gi,{direction:"column"},Ln.default.createElement(qt,{grow:!1,style:{maxWidth:600}},I?Ln.default.createElement(Jg,{href:I,target:"_blank",external:!1},Ln.default.createElement(B3,{title:ee.entity.getLabel(),className:"boldText"})):Ln.default.createElement(B3,{title:ee.entity.getLabel(),className:"boldText"})),Ln.default.createElement(qt,{grow:!1},Ln.default.createElement("span",null,Ln.default.createElement(s_,{onNavigateToOntology:e.onNavigateToOntology,ontologyId:n||ee.entity.getOntologyId(),ontologyName:ee.entity.getOntologyId(),shortForm:ee.entity.getShortForm()}))),Ln.default.createElement(qt,null,Ln.default.createElement(gi,{direction:"column"},Ln.default.createElement(qt,null,Ln.default.createElement(gi,null,Ln.default.createElement(qt,{grow:!1,style:{maxWidth:600}},Ln.default.createElement(WP,{iri:t})))))),Ln.default.createElement(qt,{style:{maxWidth:600}},Ln.default.createElement(cY,{description:ee.entity.getDescription()})),Ln.default.createElement("div",{style:{margin:"0 12px 0",maxWidth:600}},Ln.default.createElement(yY,{iri:e.iri,label:ee.entity.getLabel()||"",ontolist:ee.ontoList,entityType:o||ee.entity.getType(),onNavigateToOntology:d}),Ln.default.createElement(bY,{iri:e.iri,ontolist:ee.definedBy,label:ee.entity.getLabel()||"",entityType:o||ee.entity.getType(),onNavigateToOntology:d})),Ln.default.createElement(qt,null,Ln.default.createElement(gY,{data:ee.entity,iri:t,entityType:e.entityType,api:r,ontologyId:e.ontologyId?e.ontologyId:ee.entity.getOntologyId(),useLegacy:c,hierarchyTab:h,crossRefTab:v,terminologyInfoTab:w,altNamesTab:_,hierarchyPreferredRoots:e.hierarchyPreferredRoots,hierarchyShowSiblingsOnInit:e.hierarchyShowSiblingsOnInit,hierarchyKeepExpansionStates:e.hierarchyKeepExpansionStates,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}return Ln.default.createElement(Ln.default.Fragment,null,A&&Ln.default.createElement(_r,null),H&&Ln.default.createElement(Xt,null,Lo(q,"metadata")),N&&F&&Ln.default.createElement(Ln.default.Fragment,null,Rd(F.entity)?Y(F):null))}function ZAe(e,t,r){VAe.default.render(qar(e),t,r)}function qar(e){let t=new Wr;return Ln.default.createElement(zr,{colorMode:"light"},Ln.default.createElement(Hr,{client:t},Ln.default.createElement($Ae,{iri:e.iri,ontologyId:e.ontologyId,api:e.api,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,termLink:e.termLink,altNamesTab:e.altNamesTab,hierarchyTab:e.hierarchyTab,crossRefTab:e.crossRefTab,terminologyInfoTab:e.terminologyInfoTab,hierarchyPreferredRoots:e.hierarchyPreferredRoots,hierarchyShowSiblingsOnInit:e.hierarchyShowSiblingsOnInit,hierarchyKeepExpansionStates:e.hierarchyKeepExpansionStates,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var Jn=T(z());var qAe=T(Do()),Uar=10,Gar=[10,25,50,100],Jar="config.preferredPrefix",Xar="asc";function UAe(e){let{api:t,initialEntriesPerPage:r=Uar,pageSizeOptions:n=Gar,initialSortField:o=Jar,initialSortDir:i=Xar,targetLink:c,parameter:d}=e,h=new Jr(t),[v,w]=(0,Jn.useState)(0),[_,I]=(0,Jn.useState)(r),[R,D]=(0,Jn.useState)(o),[F,A]=(0,Jn.useState)(i),N=[{name:"Resource Name",field:"config.title",width:"15%",sortable:!0},{name:"Short Name",field:"ontologyId",render:Se=>c?Jn.default.createElement(Jg,{href:c+"ontologies/"+Se+"/"},Se):Se,width:"10%",sortable:!0},{name:"Description",field:"config.description",css:Q` + `,{data:F,isLoading:A,isSuccess:N,isError:H,error:q}=Qr(["metadata",r,i,o,t,n,c],async()=>{let ee,ne,te;if(c){let de=(await R.getEntityResponse(t,o,void 0,i,c))._embedded;ee=ip({_embedded:{[Object.keys(de)[0]]:q5(de[Object.keys(de)[0]],c,n)}}),ne=de[Object.keys(de)[0]].map(fe=>fe.ontology_name),te=de[Object.keys(de)[0]].filter(fe=>fe.is_defining_ontology).map(fe=>fe.ontology_name)}else ee=await R.getEntityObject(t,o,n,i,c),ne=ee.getAppearsIn(),te=ee.getDefinedBy();return te=te.filter(de=>de!=ee.getOntologyId()).sort(),ne=ne.filter(de=>de!=ee.getOntologyId()&&!te.includes(de)).sort(),{entity:ee,ontoList:ne,definedBy:te}});function Y(ee){return Ln.default.createElement(Ln.default.Fragment,null,Ln.default.createElement("style",null,D),Ln.default.createElement(yi,{direction:"column"},Ln.default.createElement(qt,{grow:!1,style:{maxWidth:600}},I?Ln.default.createElement(Xg,{href:I,target:"_blank",external:!1},Ln.default.createElement(B3,{title:ee.entity.getLabel(),className:"boldText"})):Ln.default.createElement(B3,{title:ee.entity.getLabel(),className:"boldText"})),Ln.default.createElement(qt,{grow:!1},Ln.default.createElement("span",null,Ln.default.createElement(s_,{onNavigateToOntology:e.onNavigateToOntology,ontologyId:n||ee.entity.getOntologyId(),ontologyName:ee.entity.getOntologyId(),shortForm:ee.entity.getShortForm()}))),Ln.default.createElement(qt,null,Ln.default.createElement(yi,{direction:"column"},Ln.default.createElement(qt,null,Ln.default.createElement(yi,null,Ln.default.createElement(qt,{grow:!1,style:{maxWidth:600}},Ln.default.createElement(WP,{iri:t})))))),Ln.default.createElement(qt,{style:{maxWidth:600}},Ln.default.createElement(pY,{description:ee.entity.getDescription()})),Ln.default.createElement("div",{style:{margin:"0 12px 0",maxWidth:600}},Ln.default.createElement(bY,{iri:e.iri,label:ee.entity.getLabel()||"",ontolist:ee.ontoList,entityType:o||ee.entity.getType(),onNavigateToOntology:d}),Ln.default.createElement(wY,{iri:e.iri,ontolist:ee.definedBy,label:ee.entity.getLabel()||"",entityType:o||ee.entity.getType(),onNavigateToOntology:d})),Ln.default.createElement(qt,null,Ln.default.createElement(yY,{data:ee.entity,iri:t,entityType:e.entityType,api:r,ontologyId:e.ontologyId?e.ontologyId:ee.entity.getOntologyId(),useLegacy:c,hierarchyTab:h,crossRefTab:v,terminologyInfoTab:w,altNamesTab:_,hierarchyPreferredRoots:e.hierarchyPreferredRoots,hierarchyShowSiblingsOnInit:e.hierarchyShowSiblingsOnInit,hierarchyKeepExpansionStates:e.hierarchyKeepExpansionStates,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}return Ln.default.createElement(Ln.default.Fragment,null,A&&Ln.default.createElement(_r,null),H&&Ln.default.createElement(Xt,null,Lo(q,"metadata")),N&&F&&Ln.default.createElement(Ln.default.Fragment,null,Rd(F.entity)?Y(F):null))}function ZAe(e,t,r){VAe.default.render(qar(e),t,r)}function qar(e){let t=new Wr;return Ln.default.createElement(zr,{colorMode:"light"},Ln.default.createElement(Hr,{client:t},Ln.default.createElement($Ae,{iri:e.iri,ontologyId:e.ontologyId,api:e.api,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,termLink:e.termLink,altNamesTab:e.altNamesTab,hierarchyTab:e.hierarchyTab,crossRefTab:e.crossRefTab,terminologyInfoTab:e.terminologyInfoTab,hierarchyPreferredRoots:e.hierarchyPreferredRoots,hierarchyShowSiblingsOnInit:e.hierarchyShowSiblingsOnInit,hierarchyKeepExpansionStates:e.hierarchyKeepExpansionStates,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var Jn=T(z());var qAe=T(Do()),Uar=10,Gar=[10,25,50,100],Jar="config.preferredPrefix",Xar="asc";function UAe(e){let{api:t,initialEntriesPerPage:r=Uar,pageSizeOptions:n=Gar,initialSortField:o=Jar,initialSortDir:i=Xar,targetLink:c,parameter:d}=e,h=new Jr(t),[v,w]=(0,Jn.useState)(0),[_,I]=(0,Jn.useState)(r),[R,D]=(0,Jn.useState)(o),[F,A]=(0,Jn.useState)(i),N=[{name:"Resource Name",field:"config.title",width:"15%",sortable:!0},{name:"Short Name",field:"ontologyId",render:be=>c?Jn.default.createElement(Xg,{href:c+"ontologies/"+be+"/"},be):be,width:"10%",sortable:!0},{name:"Description",field:"config.description",css:Q` display: block; max-height: 200px; overflow: auto; - `},{name:"Version",field:"config.version",width:"7.5%"},{name:"Loaded on",field:"loaded",width:"10%",dataType:"date",sortable:!0},{name:"Terms",field:"numberOfTerms",render:Se=>Jn.default.createElement(Jn.default.Fragment,null,Se.toLocaleString()),width:"7.5%",sortable:!0},{name:"Properties",field:"numberOfProperties",render:Se=>Jn.default.createElement(Jn.default.Fragment,null,Se.toLocaleString()),width:"7.5%",sortable:!0},{name:"Individuals",field:"numberOfIndividuals",render:Se=>Jn.default.createElement(Jn.default.Fragment,null,Se.toLocaleString()),width:"7.5%",sortable:!0},{width:"5%",actions:[...e.actions||[],{render:Se=>Jn.default.createElement(pc,{href:Se.config.fileLocation,iconType:"download","aria-label":"Download",isDisabled:!Se.config.allowDownload||Se.config.fileLocation.startsWith("file://")})}]}],H=({page:Se,sort:Te})=>{let{index:Pe,size:Ve}=Se;if(w(Pe),I(Ve),Te){let{field:De,direction:He}=Te;D(De),A(He)}},{data:q,isSuccess:Y,isError:ee,isLoading:ne}=Qr(["ontologiesData",t,d],async()=>h.getOntologiesData(e.parameter)),te=q?.properties.map(Se=>({...Se.properties}))||[];console.log(te);let de=(Se,Te,Pe,Ve,De)=>{let He;Ve?He=Se.slice(0).sort(TA.property(Ve,TA.default(De))):He=Se;let Je;if(!Te&&!Pe)Je=He;else{let vt=Te*Pe;Je=He.slice(vt,Math.min(vt+Pe,Se.length))}return{pageOfItems:Je,totalItemCount:Se.length}},{pageOfItems:fe,totalItemCount:ye}=de(te,v,_,R,F),Ie={pageIndex:v,pageSize:_,totalItemCount:ye,pageSizeOptions:n},he=_===0?Jn.default.createElement("strong",null,"All"):Jn.default.createElement(Jn.default.Fragment,null,Jn.default.createElement("strong",null,_*v+1,"-",_*v+_)," ","of ",ye),be={sort:{field:R,direction:F}};return Jn.default.createElement(Jn.default.Fragment,null,Y&&Jn.default.createElement(Jn.default.Fragment,null,Jn.default.createElement(Xt,{size:"xs"},"Showing ",he," ",Jn.default.createElement("strong",null,"Ontologies")),Jn.default.createElement(Oo,{size:"s"}),Jn.default.createElement(Q9,{margin:"none",style:{height:2}}),Jn.default.createElement(R3,{columns:N,items:fe,onChange:H,pagination:Ie,sorting:be})),ne&&Jn.default.createElement(R3,{columns:N,items:fe,onChange:H,pagination:Ie,sorting:be,loading:!0}),ee&&Jn.default.createElement(R3,{columns:N,items:fe,onChange:H,pagination:Ie,sorting:be}))}function GAe(e,t,r){qAe.default.render(Kar(e),t,r)}function Kar(e){let t=new Wr;return Jn.default.createElement(zr,{colorMode:"light"},Jn.default.createElement(Hr,{client:t},Jn.default.createElement(UAe,{api:e.api,initialEntriesPerPage:e.initialEntriesPerPage,pageSizeOptions:e.pageSizeOptions,initialSortField:e.initialSortField,initialSortDir:e.initialSortDir,targetLink:e.targetLink,actions:e.actions,parameter:e.parameter})))}var bp=T(z());var JAe=T(Do());function wY(e){let{api:t,query:r,selectionChangedEvent:n,...o}=e,i=new Jr(t),[c,d]=(0,bp.useState)(),[h,v]=(0,bp.useState)([]),[w,_]=(0,bp.useState)(r),I=F=>{v(F)},R=F=>{if(!F.trim().toLowerCase())return;v([{label:F}])},{isLoading:D}=Qr(["suggestions",w],async()=>{if(w.trim())return i.suggest({query:w},void 0,void 0,e.parameter).then(F=>{F.response&&F.response.docs&&d(F.response.docs.map(A=>({label:A.autosuggest,type:{color:"tint1",iconType:""}})))})});return(0,bp.useEffect)(()=>{n(h.map(F=>({label:F.label})))},[h]),bp.default.createElement(bp.default.Fragment,null,bp.default.createElement(Yx,{id:"suggest",isClearable:!0,"aria-label":"searchBar",fullWidth:!0,async:!0,placeholder:"Search",autoFocus:!0,singleSelection:!0,isLoading:D,options:c,selectedOptions:h,onChange:I,onCreateOption:R,onSearchChange:F=>{_(F)}}))}function XAe(e,t,r){JAe.default.render(Yar(e),t,r)}function Yar(e){let t=new Wr;return bp.default.createElement(zr,{colorMode:"light"},bp.default.createElement(Hr,{client:t},bp.default.createElement(wY,{api:e.api,query:e.query,selectionChangedEvent:e.selectionChangedEvent,parameter:e.parameter})))}var nr=T(z());var Wh=T(z());var py=T(z());var KAe=T(Do());function YAe(e){let{iri:t,api:r,parameter:n,entityType:o,ontologyId:i,useLegacy:c}=e,d=new Jr(r),{data:h,isLoading:v,isSuccess:w,isError:_,error:I}=Qr(["entityOntoList",r,n,o,t,i,c],async()=>{let R,D,F;if(c){let A=(await d.getEntityResponse(t,o,void 0,n,c))._embedded,N=A[Object.keys(A)[0]].filter(H=>H.is_defining_ontology).map(H=>H.ontology_name);R=A[Object.keys(A)[0]].map(H=>H.ontology_name).filter(H=>!N.includes(H)),D=o||Xq(Object.keys(A)[0]),F=A[Object.keys(A)[0]][0].label}else{let A=await d.getEntityObject(t,o,i,n,c);R=A.getAppearsIn().filter(N=>!A.getDefinedBy().includes(N)),D=o||A.getType(),F=A.getLabel()||""}return R=R.filter(A=>A!=i).sort(),{ontoList:R,entityType:D,label:F}});return py.default.createElement(py.default.Fragment,null,w&&h&&py.default.createElement(yY,{ontolist:h.ontoList,entityType:h.entityType,label:h.label,iri:t,onNavigateToOntology:e.onNavigateToOntology}),v&&py.default.createElement(_r,null),_&&py.default.createElement(Xt,null,Lo(I,"ontology list")))}function QAe(e,t,r){KAe.default.render(Qar(e),t,r)}function Qar(e){let t=new Wr;return py.default.createElement(zr,{colorMode:"light"},py.default.createElement(Hr,{client:t},py.default.createElement(YAe,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}var dy=T(z());var eRe=T(Do());function tRe(e){let{iri:t,api:r,parameter:n,entityType:o,ontologyId:i,useLegacy:c}=e,d=new Jr(r),{data:h,isLoading:v,isSuccess:w,isError:_,error:I}=Qr(["entityDefinedBy",r,n,o,t,i,c],async()=>{let R,D,F;if(c){let A=(await d.getEntityResponse(t,o,void 0,n,c))._embedded;R=A[Object.keys(A)[0]].filter(N=>N.is_defining_ontology).map(N=>N.ontology_name),D=o||Xq(Object.keys(A)[0]),F=A[Object.keys(A)[0]][0].label}else{let A=await d.getEntityObject(t,o,i,n,c);R=A.getDefinedBy().filter(N=>N!=A.getOntologyId()),D=o||A.getType(),F=A.getLabel()||""}return R=R.sort(),{ontoList:R,entityType:D,label:F}});return dy.default.createElement(dy.default.Fragment,null,w&&h&&dy.default.createElement(bY,{ontolist:h.ontoList,entityType:h.entityType,label:h.label,iri:t,onNavigateToOntology:e.onNavigateToOntology}),v&&dy.default.createElement(_r,null),_&&dy.default.createElement(Xt,null,Lo(I,"ontology list")))}function rRe(e,t,r){eRe.default.render(esr(e),t,r)}function esr(e){let t=new Wr;return dy.default.createElement(zr,{colorMode:"light"},dy.default.createElement(Hr,{client:t},dy.default.createElement(tRe,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}function nRe(e){let{api:t,result:r,targetLink:n,...o}=e;return Wh.default.createElement(fc,{textAlign:"left",...o,href:n?r.type!="ontology"?n+"ontologies/"+r.ontology_name+"/"+wl(r.type,!0)+"?iri="+encodeURIComponent(r.iri):n+"ontologies/"+r.ontology_name:void 0,title:Wh.default.createElement(gi,null,Wh.default.createElement(qt,{grow:!1},Wh.default.createElement(q9,null,Wh.default.createElement("h2",null,r.label))),Wh.default.createElement(qt,null,r.type!="ontology"&&Wh.default.createElement(lY,{api:t,iri:r.iri,entityType:r.type,ontologyId:r.ontology_name})))},r.type!="ontology"?Wh.default.createElement(WP,{iri:r.iri}):void 0,Wh.default.createElement(Oo,{size:"s"}),Wh.default.createElement(pY,{api:t,ontologyId:r.ontology_name,iri:r.iri,thingType:r.type}))}var oRe=T(Do());var tsr=10,rsr=[10,25,50,100];function iRe(e){let{api:t,query:r,parameter:n,initialItemsPerPage:o=tsr,itemsPerPageOptions:i=rsr,targetLink:c,preselected:d,useLegacy:h=!0,...v}=e,w=new Jr(t),[_,I]=(0,nr.useState)(r),[R,D]=(0,nr.useState)(0),[F,A]=(0,nr.useState)(0),[N,H]=(0,nr.useState)(o),[q,Y]=(0,nr.useState)(0),[ee,ne]=(0,nr.useState)(!1),[te,de]=(0,nr.useState)(!1),[fe,ye]=(0,nr.useState)([]),[Ie,he]=(0,nr.useState)([]);(0,nr.useEffect)(()=>{I(r)},[r]);function be(Ke,st,Tt,wr){if(Ke.length==0)Tt(st.reduce((Rt,Ut,vr,Sr)=>(vr%2===0&&Rt.push({label:wr?wr(Ut):Ut,key:Ut,append:"("+Sr[vr+1]+")",disabled:Sr[vr+1]==0,data:{totalCount:Sr[vr+1]}}),Rt),[]));else{let Rt=[];for(let Ut=0;Ut{if(vr%2===0){let Er=Rt.find(po=>po.key==Ut);Er&&(Er.append="("+Sr[vr+1],Er.data&&Sr[vr+1]Ke.checked==="on",{data:Te,isLoading:Pe,isSuccess:Ve,isError:De,error:He}=Qr(["searchResults",t,_,ee,te,R,N,fe.filter(Se).map(Ke=>Ke.key),Ie.filter(Se).map(Ke=>Ke.key),n],async({signal:Ke})=>w.search({query:_,exactMatch:ee,showObsoleteTerms:te,types:fe.filter(Se).map(st=>st.key).join(","),ontology:Ie.filter(Se).map(st=>st.key).join(","),groupByIri:!0},{page:R.toString(),size:N.toString()},void 0,e.parameter,Ke).then(st=>{if(st.response&&st.response.docs!=null&&st.response.numFound!=null){st.facet_counts&&st.facet_counts.facet_fields&&(st.facet_counts.facet_fields.type&&be(fe,st.facet_counts.facet_fields.type,ye,wr=>`${wr[0].toUpperCase()}${wr.slice(1)}`),h?st.facet_counts.facet_fields.ontology_name&&be(Ie,st.facet_counts.facet_fields.ontology_name,he,wr=>wr.toUpperCase()):st.facet_counts.facet_fields.ontologyId&&be(Ie,st.facet_counts.facet_fields.ontologyId,he,wr=>wr.toUpperCase())),Y(st.response.numFound);let Tt=Math.ceil(st.response.numFound/N);return A(Tt),R>=Tt&&D(0),st.response.docs}else throw new Error("Unexpected API response")}),{keepPreviousData:!0});function Je(Ke){D(Math.floor((R*N+1)/Ke)),H(Ke)}function vt(){ne(!ee)}function Qe(){de(!te)}function Ne(Ke,st){let Tt=[...Ke];st(Tt.map(wr=>({...wr,checked:void 0})))}function Nt(){Ne(fe,ye),Ne(Ie,he)}function Vt(Ke){I(Ke[0]?Ke[0].label:"")}return nr.default.createElement(nr.default.Fragment,null,nr.default.createElement(wY,{api:t,query:"",selectionChangedEvent:Ke=>{Vt(Ke)}}),nr.default.createElement(Oo,{size:"xl"}),nr.default.createElement(Oo,{size:"s"}),nr.default.createElement(gi,null,nr.default.createElement(qt,{grow:3,style:{minWidth:250}},nr.default.createElement(kl,null,Ve&&nr.default.createElement(Yg,{label:"Filter by type"},nr.default.createElement(j3,{options:fe,onChange:ye,listProps:{bordered:!0}},Ke=>Ke)),Pe&&nr.default.createElement(Yg,{label:"Filter by type"},nr.default.createElement(_r,{size:"s"})),De&&nr.default.createElement(Yg,{label:"Filter by type"},nr.default.createElement(j3,{options:[],onChange:ye,listProps:{bordered:!0}},Ke=>Ke)),Ve&&nr.default.createElement(Yg,{label:"Filter by ontology"},nr.default.createElement(j3,{options:Ie,onChange:he,listProps:{bordered:!0},searchable:!0},(Ke,st)=>nr.default.createElement(nr.default.Fragment,null,st,Ke))),Pe&&nr.default.createElement(Yg,{label:"Filter by ontology"},nr.default.createElement(_r,{size:"s"})),De&&nr.default.createElement(Yg,{label:"Filter by ontology"},nr.default.createElement(j3,{options:[],onChange:he,listProps:{bordered:!0},searchable:!0},(Ke,st)=>nr.default.createElement(nr.default.Fragment,null,st,Ke))),nr.default.createElement(cu,{onClick:Nt},"Clear all filters"))),nr.default.createElement(qt,{grow:7},nr.default.createElement(kl,{color:"transparent",grow:!1},nr.default.createElement(gi,null,nr.default.createElement(qt,{grow:!1},nr.default.createElement(Ux,{label:"Exact match",checked:ee,onChange:vt})),nr.default.createElement(qt,null,nr.default.createElement(Ux,{label:"Show only obsolete terms",checked:te,onChange:Qe}))),nr.default.createElement(Oo,{size:"m"}),nr.default.createElement(Xt,{size:"xs",style:{padding:"0 8px"}},"Showing ",Math.min(R*N+1,q)," to ",Math.min((R+1)*N,q)," of ",q," results"),nr.default.createElement(Oo,{size:"s"}),nr.default.createElement(Q9,{margin:"none",style:{height:2}}),nr.default.createElement(Oo,{size:"s"}),nr.default.createElement(Qx,{"aria-label":"Search result pagination",pageCount:F,activePage:R,onChangePage:D,itemsPerPage:N,onChangeItemsPerPage:Je,itemsPerPageOptions:i}),nr.default.createElement(Oo,{size:"s"}),Te&&Te.map(Ke=>nr.default.createElement(nr.default.Fragment,{key:Ke.id},nr.default.createElement(nRe,{api:t,result:Ke,targetLink:c}),nr.default.createElement(Oo,null)))))))}function aRe(e,t,r){oRe.default.render(nsr(e),t,r)}function nsr(e){let t=new Wr;return nr.default.createElement(zr,{colorMode:"light"},nr.default.createElement(Hr,{client:t},nr.default.createElement(iRe,{api:e.api,query:e.query,parameter:e.parameter,initialItemsPerPage:e.initialItemsPerPage,itemsPerPageOptions:e.itemsPerPageOptions,targetLink:e.targetLink})))}var Lt=T(z());var lRe=T(Do()),osr=!0;function isr(e,t){let r=e.getRdfTypes().filter(n=>n!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&!n.startsWith("http://www.w3.org/2000/01/rdf-schema#"));if(e.getRdfTypes().length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Type"),zP(e,e.getLinkedEntities(),r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function asr(e,t){let r=e.getSameAs();if(r.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Same As"),zP(e,e.getLinkedEntities(),r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function ssr(e,t){let r=e.getDifferentFrom();if(r.length>0)return Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Oo,null),Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Different from"),zP(e,e.getLinkedEntities(),r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))}function lsr(e,t){let r=e.getDisjointWith();if(r.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Disjoint with"),zP(e,e.getLinkedEntities(),r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function usr(e,t){let r=e.getInverseOf();if(r.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Inverse of"),zP(e,e.getLinkedEntities(),r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function sRe(e,t,r){return ht(e).slice().reverse().map((n,o)=>Lt.default.createElement("span",{key:n},En(t,t.getLinkedEntities(),n,r.showBadges,{onNavigateToEntity:r.onNavigateToEntity,onNavigateToOntology:r.onNavigateToOntology,onNavigateToDisambiguate:r.onNavigateToDisambiguate}),Lt.default.createElement(Lt.default.Fragment,null,oo.value),n=r.filter(o=>Array.isArray(o)).length>0;if(r.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,n?"Property chains":"Property chain"),n?Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement("ul",null,r.map(o=>Lt.default.createElement("li",{key:xr()},sRe(o,e,t)))),Lt.default.createElement("p",null)):Lt.default.createElement("p",null,sRe(r,e,t)))}function psr(e,t){let r=e.getEquivalents();if(r.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Equivalent to"),r.length===1?Lt.default.createElement("p",null,gc(e,r[0],t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})):Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement("ul",null,r.map(n=>Lt.default.createElement("li",{key:xr()},gc(e,n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))),Lt.default.createElement("p",null)))}function dsr(e,t){let r=e.getSuperEntities();if(r.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Sub",e.getType()," of"),r.length===1?Lt.default.createElement("p",null,gc(e,r[0],t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})):Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement("ul",null,r.map(n=>Lt.default.createElement("li",{key:xr()},gc(e,n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))),Lt.default.createElement("p",null)))}function fsr(e,t){let r=e.getRelatedFrom(),n=Array.from(new Set(r.map(o=>o.value.property)));if(r.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Related from"),n.map(o=>{let i=e.getLinkedEntities().getLabelForIri(o);return Lt.default.createElement("div",{key:o.toString()+xr()},Lt.default.createElement("div",null,Lt.default.createElement("a",{style:{color:"black"},href:o},Lt.default.createElement("i",null,i||o))),Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement("ul",{style:{marginBottom:0}},r.filter(c=>c.value.property===o).map(c=>Lt.default.createElement("li",{key:xr()},En(e,e.getLinkedEntities(),c.value.value,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))),Lt.default.createElement("p",null)),Lt.default.createElement("p",null)," ")}))}function hsr(e,t,r){if(t.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Instances"),Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement("ul",null,t.map(n=>Lt.default.createElement("li",{key:xr()},mu(e,e.getLinkedEntities(),n.getIri(),r.showBadges,{onNavigateToEntity:r.onNavigateToEntity,onNavigateToOntology:r.onNavigateToOntology,onNavigateToDisambiguate:r.onNavigateToDisambiguate})))),Lt.default.createElement("p",null)))}function uRe(e){let{api:t,iri:r,ontologyId:n,hasTitle:o=osr,showBadges:i,entityType:c,parameter:d,onNavigateToEntity:h,onNavigateToDisambiguate:v,onNavigateToOntology:w,..._}=e,I=new Jr(t),{data:R,isLoading:D,isSuccess:F,isError:A}=Qr(["entityJson",t,r,n,c,d,i],async()=>I.getEntityObject(r,c,n,d,!1)),{data:N,isLoading:H,isSuccess:q}=Qr({queryKey:["instances",R],queryFn:async()=>R&&dx(R)&&R.hasDirectChildren()?I.getClassInstances(R.getIri(),R.getOntologyId()):[],enabled:!!R});function Y(ee,ne){let te=[];if(gE(ee)){let de=isr(ee,e);de!=null&&te.push(de);let fe=asr(ee,e);fe!=null&&te.push(fe);let ye=ssr(ee,e);ye!=null&&te.push(ye)}if(Z5(ee)||dx(ee)){let de=lsr(ee,e);de!=null&&te.push(de)}if(Z5(ee)){let de=usr(ee,e);de!=null&&te.push(de);let fe=csr(ee,e);fe!=null&&te.push(fe)}if(Z5(ee)||dx(ee)){let de=psr(ee,e);de!=null&&te.push(de);let fe=dsr(ee,e);fe!=null&&te.push(fe);let ye=fsr(ee,e);ye!=null&&te.push(ye)}if(dx(ee)){let de=hsr(ee,ne,e);de!=null&&te.push(de)}return te.length>0?Lt.default.createElement(Xt,{..._},te):Lt.default.createElement(Xt,{..._},"No relations available.")}return Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(fc,{title:o?(c?_h(Jq(c)):F&&R?_h(R.getType()):"")+" Relations":"",layout:"horizontal"},(D||H)&&Lt.default.createElement(_r,{size:"s"}),A&&Lt.default.createElement(Xt,null,"Requested resource not available"),F&&q&&R!==void 0&&N!==void 0&&Y(R,N)))}function cRe(e,t,r){lRe.default.render(msr(e),t,r)}function msr(e){let t=new Wr;return Lt.default.createElement(zr,{colorMode:"light"},Lt.default.createElement(Hr,{client:t},Lt.default.createElement(uRe,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,showBadges:e.showBadges,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var wp=T(z()),pRe=T(Do());function dRe(e){let{api:t,iri:r,ontologyId:n,useLegacy:o}=e,i=new Jr(t),{data:c,isLoading:d,isSuccess:h,isError:v,error:w}=Qr(["termDepiction",t,r,n,o],async()=>i.getThingObject(r,"class",n,"",o));return wp.default.createElement(wp.default.Fragment,null,d&&wp.default.createElement(_r,{size:"s"}),h&&c&&c.getDepictionUrl()&&wp.default.createElement(wp.default.Fragment,null,wp.default.createElement(CK,{size:"m",hasShadow:!0,allowFullScreen:!0,alt:c.getDepictionUrl(),src:c.getDepictionUrl()}),wp.default.createElement("p",null,wp.default.createElement("small",null,"Click to expand."))),v&&wp.default.createElement(Xt,null,Lo(w,"depiction")))}function fRe(e,t,r){pRe.default.render(vsr(e),t,r)}function vsr(e){let t=new Wr;return wp.default.createElement(zr,{colorMode:"light"},wp.default.createElement(Hr,{client:t},wp.default.createElement(dRe,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,useLegacy:e.useLegacy})))}var Ai=T(z()),Xs=T(z()),wRe=T(Do());var ORe=T(gRe()),Ive=T(bRe());function xRe(e){let{api:t,iri:r,ontologyId:n,rootWalk:o}=e,[i,c]=(0,Xs.useState)(r),[d,h]=(0,Xs.useState)(!0),[v,w]=(0,Xs.useState)(!1),[_,I]=(0,Xs.useState)(o||!1),[R,D]=(0,Xs.useState)(!1),[F,A]=(0,Xs.useState)(0),N=new Jr(t),{data:H,isLoading:q,isError:Y,error:ee}=Qr(["termGraph",t,i,n,_,v,F],async()=>{if(_&&d)return N.getTermTree({ontologyId:n,termIri:r},{viewMode:"All",siblings:!1},void 0,void 0);if(d||v)return N.getTermRelations({ontologyId:n,termIri:i})}),ne=(0,Xs.useRef)(new Ive.DataSet([])),te=(0,Xs.useRef)(new Ive.DataSet([])),de=(0,Xs.useRef)({}),fe=(0,Xs.useRef)(null),ye={autoResize:!0,height:"100%",width:"100%",locale:"en",layout:{randomSeed:1,improvedLayout:!0,clusterThreshold:150},physics:{enabled:!0,barnesHut:{gravitationalConstant:-2e4,centralGravity:.3,springLength:10,springConstant:.04,damping:.09,avoidOverlap:0}}};class Ie{id;label;color;shape;font;constructor({node:He}){this.id=He.iri,this.label=He.label,this.color={background:"#455469",highlight:{border:"#404040",background:"#404040"}},this.shape="box",this.font={color:"white"}}}class he{id;from;to;label;arrows;width;color;font;dashes;constructor({edge:He}){He.source&&He.target&&He.uri&&(this.id=He.source+He.target+"&uri="+He.uri,this.from=He.source,this.to=He.target,this.label=He.label,this.arrows={to:!0},this.width=2,this.color={color:"gray",highlight:"#00617C"},this.font={size:16})}}function be(De){let He={nodes:[],edges:[]};return De.map(Je=>{if(!He.nodes.find(Qe=>Qe.iri===Je.iri)){let Qe={iri:Je.iri,label:Je.text};He.nodes.push(Qe)}let vt=De.find(Qe=>Qe.id===Je.parent);if(vt){let Qe={source:Je.iri,target:vt.iri,label:"subClassOf",uri:"http://www.w3.org/2000/01/rdf-schema#subClassOf"};He.edges.find(Ne=>Ne.source===Qe.source&&Ne.target===Qe.target)||He.edges.push(Qe)}}),He}if(H&&(d||v)){let De=H;_&&d&&(De=be(H));for(let He of De.nodes){let Je=new Ie({node:He});ne.current.get(Je.id)||(Je.id===r&&_&&(Je.color.background="#0BBBEF",Je.font.color="black"),ne.current.add(Je))}for(let He of De.edges){let Je=new he({edge:He}),vt=!(He.uri==="http://www.w3.org/2000/01/rdf-schema#subClassOf"||_);Je.dashes=vt,te.current.get(Je.id)||(Je.id?.includes(r)&&_&&(Je.color.color="black"),te.current.add(Je))}d&&h(!1),v&&w(!1)}function Se(){ne.current.clear(),te.current.clear(),c(r),h(!0),w(!1),A(F+1)}(0,Xs.useEffect)(()=>{let De={nodes:ne.current,edges:te.current};de.current=new ORe.Network(fe.current,De,ye)},[]),(0,Xs.useEffect)(()=>{de.current&&de.current.on("doubleClick",function(De){if(De.nodes.length>0){let He=De.nodes[0];c(He),w(!0)}})},[de]),(0,Xs.useEffect)(()=>{Se()},[_,t,n,r]),(0,Xs.useEffect)(()=>{I(o||!1)},[o]);let Te=()=>D(De=>!De),Pe=()=>D(!1),Ve=Ai.default.createElement(cu,{iconType:"iInCircle",iconSide:"right",onClick:Te},"Guide me");return Ai.default.createElement(Ai.default.Fragment,null,Y&&Ai.default.createElement(Xt,null,Lo(ee,"graph")),Ai.default.createElement(kl,{style:{fontSize:12},paddingSize:"s",borderRadius:"none"},Ai.default.createElement(u3,{size:"s",onClick:Se},"Reset"),Ai.default.createElement(lp,{button:Ve,isOpen:R,closePopover:Pe},Ai.default.createElement(Xt,{style:{width:300,padding:10}},Ai.default.createElement("li",null,"You can expand the nodes by double clicking on them"),Ai.default.createElement("li",null,"You can zoom out/in by scrolling on the graph."),Ai.default.createElement("li",null,"You can go back to the initial graph by clicking on the Reset button."),Ai.default.createElement("li",null,"You can move the nodes and edges around by dragging."),Ai.default.createElement("li",null,"Rootwalk toggle enable the root walk mode in the graph, where you can see the path from roots to the target node."))),Ai.default.createElement("div",{style:{display:"inline-block",float:"right",paddingTop:10}},Ai.default.createElement(Ux,{label:"root walk",checked:_,onChange:()=>{I(!_)},title:"Enable the root walk mode in the graph: You can see the path from roots to the target node"}))),Ai.default.createElement(kl,{style:{width:900,height:900},hasShadow:!1,hasBorder:!0,borderRadius:"none"},q&&Ai.default.createElement(_r,{size:"m"}),Ai.default.createElement("div",{ref:fe,className:"graph-container",style:{width:"850px",height:"850px",margin:"auto"}})))}function _Re(e,t,r){wRe.default.render(gsr(e),t,r)}function gsr(e){let t=new Wr;return Ai.default.createElement(zr,{colorMode:"light"},Ai.default.createElement(Hr,{client:t},Ai.default.createElement(xRe,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,rootWalk:e.rootWalk})))}window.SemLookPWidgets={createAutocomplete:uAe,createDataContent:dAe,createEntityInfo:vAe,createEntityRelations:cRe,createJsonApi:bAe,createBreadcrumb:OAe,createDescription:_Ae,createIri:IAe,createTab:AAe,createAlternativeNameTab:LAe,createCrossRefTab:BAe,createHierarchy:TAe,createTitle:HAe,createOntologyInfo:PAe,createResources:GAe,createSearchBar:XAe,createSearchResultsList:aRe,createMetadata:ZAe,createDepiction:fRe,createEntityOntoList:QAe,createEntityDefinedBy:rRe,createGraphView:_Re};})(); + `},{name:"Version",field:"config.version",width:"7.5%"},{name:"Loaded on",field:"loaded",width:"10%",dataType:"date",sortable:!0},{name:"Terms",field:"numberOfTerms",render:be=>Jn.default.createElement(Jn.default.Fragment,null,be.toLocaleString()),width:"7.5%",sortable:!0},{name:"Properties",field:"numberOfProperties",render:be=>Jn.default.createElement(Jn.default.Fragment,null,be.toLocaleString()),width:"7.5%",sortable:!0},{name:"Individuals",field:"numberOfIndividuals",render:be=>Jn.default.createElement(Jn.default.Fragment,null,be.toLocaleString()),width:"7.5%",sortable:!0},{width:"5%",actions:[...e.actions||[],{render:be=>Jn.default.createElement(pc,{href:be.config.fileLocation,iconType:"download","aria-label":"Download",isDisabled:!be.config.allowDownload||be.config.fileLocation.startsWith("file://")})}]}],H=({page:be,sort:Te})=>{let{index:Pe,size:Re}=be;if(w(Pe),I(Re),Te){let{field:Ae,direction:Ve}=Te;D(Ae),A(Ve)}},{data:q,isSuccess:Y,isError:ee,isLoading:ne}=Qr(["ontologiesData",t,d],async()=>h.getOntologiesData(e.parameter)),te=q?.properties.map(be=>({...be.properties}))||[];console.log(te);let de=(be,Te,Pe,Re,Ae)=>{let Ve;Re?Ve=be.slice(0).sort(CA.property(Re,CA.default(Ae))):Ve=be;let Je;if(!Te&&!Pe)Je=Ve;else{let pt=Te*Pe;Je=Ve.slice(pt,Math.min(pt+Pe,be.length))}return{pageOfItems:Je,totalItemCount:be.length}},{pageOfItems:fe,totalItemCount:ye}=de(te,v,_,R,F),Ie={pageIndex:v,pageSize:_,totalItemCount:ye,pageSizeOptions:n},ve=_===0?Jn.default.createElement("strong",null,"All"):Jn.default.createElement(Jn.default.Fragment,null,Jn.default.createElement("strong",null,_*v+1,"-",_*v+_)," ","of ",ye),Oe={sort:{field:R,direction:F}};return Jn.default.createElement(Jn.default.Fragment,null,Y&&Jn.default.createElement(Jn.default.Fragment,null,Jn.default.createElement(Xt,{size:"xs"},"Showing ",ve," ",Jn.default.createElement("strong",null,"Ontologies")),Jn.default.createElement(Oo,{size:"s"}),Jn.default.createElement(Q9,{margin:"none",style:{height:2}}),Jn.default.createElement(R3,{columns:N,items:fe,onChange:H,pagination:Ie,sorting:Oe})),ne&&Jn.default.createElement(R3,{columns:N,items:fe,onChange:H,pagination:Ie,sorting:Oe,loading:!0}),ee&&Jn.default.createElement(R3,{columns:N,items:fe,onChange:H,pagination:Ie,sorting:Oe}))}function GAe(e,t,r){qAe.default.render(Kar(e),t,r)}function Kar(e){let t=new Wr;return Jn.default.createElement(zr,{colorMode:"light"},Jn.default.createElement(Hr,{client:t},Jn.default.createElement(UAe,{api:e.api,initialEntriesPerPage:e.initialEntriesPerPage,pageSizeOptions:e.pageSizeOptions,initialSortField:e.initialSortField,initialSortDir:e.initialSortDir,targetLink:e.targetLink,actions:e.actions,parameter:e.parameter})))}var bp=T(z());var JAe=T(Do());function OY(e){let{api:t,query:r,selectionChangedEvent:n,...o}=e,i=new Jr(t),[c,d]=(0,bp.useState)(),[h,v]=(0,bp.useState)([]),[w,_]=(0,bp.useState)(r),I=F=>{v(F)},R=F=>{if(!F.trim().toLowerCase())return;v([{label:F}])},{isLoading:D}=Qr(["suggestions",w],async()=>{if(w.trim())return i.suggest({query:w},void 0,void 0,e.parameter).then(F=>{F.response&&F.response.docs&&d(F.response.docs.map(A=>({label:A.autosuggest,type:{color:"tint1",iconType:""}})))})});return(0,bp.useEffect)(()=>{n(h.map(F=>({label:F.label})))},[h]),bp.default.createElement(bp.default.Fragment,null,bp.default.createElement(Yx,{id:"suggest",isClearable:!0,"aria-label":"searchBar",fullWidth:!0,async:!0,placeholder:"Search",autoFocus:!0,singleSelection:!0,isLoading:D,options:c,selectedOptions:h,onChange:I,onCreateOption:R,onSearchChange:F=>{_(F)}}))}function XAe(e,t,r){JAe.default.render(Yar(e),t,r)}function Yar(e){let t=new Wr;return bp.default.createElement(zr,{colorMode:"light"},bp.default.createElement(Hr,{client:t},bp.default.createElement(OY,{api:e.api,query:e.query,selectionChangedEvent:e.selectionChangedEvent,parameter:e.parameter})))}var nr=T(z());var Wh=T(z());var dy=T(z());var KAe=T(Do());function YAe(e){let{iri:t,api:r,parameter:n,entityType:o,ontologyId:i,useLegacy:c}=e,d=new Jr(r),{data:h,isLoading:v,isSuccess:w,isError:_,error:I}=Qr(["entityOntoList",r,n,o,t,i,c],async()=>{let R,D,F;if(c){let A=(await d.getEntityResponse(t,o,void 0,n,c))._embedded,N=A[Object.keys(A)[0]].filter(H=>H.is_defining_ontology).map(H=>H.ontology_name);R=A[Object.keys(A)[0]].map(H=>H.ontology_name).filter(H=>!N.includes(H)),D=o||Kq(Object.keys(A)[0]),F=A[Object.keys(A)[0]][0].label}else{let A=await d.getEntityObject(t,o,i,n,c);R=A.getAppearsIn().filter(N=>!A.getDefinedBy().includes(N)),D=o||A.getType(),F=A.getLabel()||""}return R=R.filter(A=>A!=i).sort(),{ontoList:R,entityType:D,label:F}});return dy.default.createElement(dy.default.Fragment,null,w&&h&&dy.default.createElement(bY,{ontolist:h.ontoList,entityType:h.entityType,label:h.label,iri:t,onNavigateToOntology:e.onNavigateToOntology}),v&&dy.default.createElement(_r,null),_&&dy.default.createElement(Xt,null,Lo(I,"ontology list")))}function QAe(e,t,r){KAe.default.render(Qar(e),t,r)}function Qar(e){let t=new Wr;return dy.default.createElement(zr,{colorMode:"light"},dy.default.createElement(Hr,{client:t},dy.default.createElement(YAe,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}var fy=T(z());var eRe=T(Do());function tRe(e){let{iri:t,api:r,parameter:n,entityType:o,ontologyId:i,useLegacy:c}=e,d=new Jr(r),{data:h,isLoading:v,isSuccess:w,isError:_,error:I}=Qr(["entityDefinedBy",r,n,o,t,i,c],async()=>{let R,D,F;if(c){let A=(await d.getEntityResponse(t,o,void 0,n,c))._embedded;R=A[Object.keys(A)[0]].filter(N=>N.is_defining_ontology).map(N=>N.ontology_name),D=o||Kq(Object.keys(A)[0]),F=A[Object.keys(A)[0]][0].label}else{let A=await d.getEntityObject(t,o,i,n,c);R=A.getDefinedBy().filter(N=>N!=A.getOntologyId()),D=o||A.getType(),F=A.getLabel()||""}return R=R.sort(),{ontoList:R,entityType:D,label:F}});return fy.default.createElement(fy.default.Fragment,null,w&&h&&fy.default.createElement(wY,{ontolist:h.ontoList,entityType:h.entityType,label:h.label,iri:t,onNavigateToOntology:e.onNavigateToOntology}),v&&fy.default.createElement(_r,null),_&&fy.default.createElement(Xt,null,Lo(I,"ontology list")))}function rRe(e,t,r){eRe.default.render(esr(e),t,r)}function esr(e){let t=new Wr;return fy.default.createElement(zr,{colorMode:"light"},fy.default.createElement(Hr,{client:t},fy.default.createElement(tRe,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}function nRe(e){let{api:t,result:r,targetLink:n,...o}=e;return Wh.default.createElement(fc,{textAlign:"left",...o,href:n?r.type!="ontology"?n+"ontologies/"+r.ontology_name+"/"+wl(r.type,!0)+"?iri="+encodeURIComponent(r.iri):n+"ontologies/"+r.ontology_name:void 0,title:Wh.default.createElement(yi,null,Wh.default.createElement(qt,{grow:!1},Wh.default.createElement(q9,null,Wh.default.createElement("h2",null,r.label))),Wh.default.createElement(qt,null,r.type!="ontology"&&Wh.default.createElement(uY,{api:t,iri:r.iri,entityType:r.type,ontologyId:r.ontology_name})))},r.type!="ontology"?Wh.default.createElement(WP,{iri:r.iri}):void 0,Wh.default.createElement(Oo,{size:"s"}),Wh.default.createElement(dY,{api:t,ontologyId:r.ontology_name,iri:r.iri,thingType:r.type}))}var oRe=T(Do());var tsr=10,rsr=[10,25,50,100];function iRe(e){let{api:t,query:r,parameter:n,initialItemsPerPage:o=tsr,itemsPerPageOptions:i=rsr,targetLink:c,preselected:d,useLegacy:h=!0,...v}=e,w=new Jr(t),[_,I]=(0,nr.useState)(r),[R,D]=(0,nr.useState)(0),[F,A]=(0,nr.useState)(0),[N,H]=(0,nr.useState)(o),[q,Y]=(0,nr.useState)(0),[ee,ne]=(0,nr.useState)(!1),[te,de]=(0,nr.useState)(!1),[fe,ye]=(0,nr.useState)([]),[Ie,ve]=(0,nr.useState)([]);(0,nr.useEffect)(()=>{I(r)},[r]);function Oe(Ke,st,Tt,wr){if(Ke.length==0)Tt(st.reduce((Rt,Ut,vr,Sr)=>(vr%2===0&&Rt.push({label:wr?wr(Ut):Ut,key:Ut,append:"("+Sr[vr+1]+")",disabled:Sr[vr+1]==0,data:{totalCount:Sr[vr+1]}}),Rt),[]));else{let Rt=[];for(let Ut=0;Ut{if(vr%2===0){let Er=Rt.find(po=>po.key==Ut);Er&&(Er.append="("+Sr[vr+1],Er.data&&Sr[vr+1]Ke.checked==="on",{data:Te,isLoading:Pe,isSuccess:Re,isError:Ae,error:Ve}=Qr(["searchResults",t,_,ee,te,R,N,fe.filter(be).map(Ke=>Ke.key),Ie.filter(be).map(Ke=>Ke.key),n],async({signal:Ke})=>w.search({query:_,exactMatch:ee,showObsoleteTerms:te,types:fe.filter(be).map(st=>st.key).join(","),ontology:Ie.filter(be).map(st=>st.key).join(","),groupByIri:!0},{page:R.toString(),size:N.toString()},void 0,e.parameter,Ke).then(st=>{if(st.response&&st.response.docs!=null&&st.response.numFound!=null){st.facet_counts&&st.facet_counts.facet_fields&&(st.facet_counts.facet_fields.type&&Oe(fe,st.facet_counts.facet_fields.type,ye,wr=>`${wr[0].toUpperCase()}${wr.slice(1)}`),h?st.facet_counts.facet_fields.ontology_name&&Oe(Ie,st.facet_counts.facet_fields.ontology_name,ve,wr=>wr.toUpperCase()):st.facet_counts.facet_fields.ontologyId&&Oe(Ie,st.facet_counts.facet_fields.ontologyId,ve,wr=>wr.toUpperCase())),Y(st.response.numFound);let Tt=Math.ceil(st.response.numFound/N);return A(Tt),R>=Tt&&D(0),st.response.docs}else throw new Error("Unexpected API response")}),{keepPreviousData:!0});function Je(Ke){D(Math.floor((R*N+1)/Ke)),H(Ke)}function pt(){ne(!ee)}function Qe(){de(!te)}function Fe(Ke,st){let Tt=[...Ke];st(Tt.map(wr=>({...wr,checked:void 0})))}function Nt(){Fe(fe,ye),Fe(Ie,ve)}function Vt(Ke){I(Ke[0]?Ke[0].label:"")}return nr.default.createElement(nr.default.Fragment,null,nr.default.createElement(OY,{api:t,query:"",selectionChangedEvent:Ke=>{Vt(Ke)}}),nr.default.createElement(Oo,{size:"xl"}),nr.default.createElement(Oo,{size:"s"}),nr.default.createElement(yi,null,nr.default.createElement(qt,{grow:3,style:{minWidth:250}},nr.default.createElement(kl,null,Re&&nr.default.createElement(Qg,{label:"Filter by type"},nr.default.createElement(j3,{options:fe,onChange:ye,listProps:{bordered:!0}},Ke=>Ke)),Pe&&nr.default.createElement(Qg,{label:"Filter by type"},nr.default.createElement(_r,{size:"s"})),Ae&&nr.default.createElement(Qg,{label:"Filter by type"},nr.default.createElement(j3,{options:[],onChange:ye,listProps:{bordered:!0}},Ke=>Ke)),Re&&nr.default.createElement(Qg,{label:"Filter by ontology"},nr.default.createElement(j3,{options:Ie,onChange:ve,listProps:{bordered:!0},searchable:!0},(Ke,st)=>nr.default.createElement(nr.default.Fragment,null,st,Ke))),Pe&&nr.default.createElement(Qg,{label:"Filter by ontology"},nr.default.createElement(_r,{size:"s"})),Ae&&nr.default.createElement(Qg,{label:"Filter by ontology"},nr.default.createElement(j3,{options:[],onChange:ve,listProps:{bordered:!0},searchable:!0},(Ke,st)=>nr.default.createElement(nr.default.Fragment,null,st,Ke))),nr.default.createElement(cu,{onClick:Nt},"Clear all filters"))),nr.default.createElement(qt,{grow:7},nr.default.createElement(kl,{color:"transparent",grow:!1},nr.default.createElement(yi,null,nr.default.createElement(qt,{grow:!1},nr.default.createElement(Ux,{label:"Exact match",checked:ee,onChange:pt})),nr.default.createElement(qt,null,nr.default.createElement(Ux,{label:"Show only obsolete terms",checked:te,onChange:Qe}))),nr.default.createElement(Oo,{size:"m"}),nr.default.createElement(Xt,{size:"xs",style:{padding:"0 8px"}},"Showing ",Math.min(R*N+1,q)," to ",Math.min((R+1)*N,q)," of ",q," results"),nr.default.createElement(Oo,{size:"s"}),nr.default.createElement(Q9,{margin:"none",style:{height:2}}),nr.default.createElement(Oo,{size:"s"}),nr.default.createElement(Qx,{"aria-label":"Search result pagination",pageCount:F,activePage:R,onChangePage:D,itemsPerPage:N,onChangeItemsPerPage:Je,itemsPerPageOptions:i}),nr.default.createElement(Oo,{size:"s"}),Te&&Te.map(Ke=>nr.default.createElement(nr.default.Fragment,{key:Ke.id},nr.default.createElement(nRe,{api:t,result:Ke,targetLink:c}),nr.default.createElement(Oo,null)))))))}function aRe(e,t,r){oRe.default.render(nsr(e),t,r)}function nsr(e){let t=new Wr;return nr.default.createElement(zr,{colorMode:"light"},nr.default.createElement(Hr,{client:t},nr.default.createElement(iRe,{api:e.api,query:e.query,parameter:e.parameter,initialItemsPerPage:e.initialItemsPerPage,itemsPerPageOptions:e.itemsPerPageOptions,targetLink:e.targetLink})))}var Lt=T(z());var lRe=T(Do()),osr=!0;function isr(e,t){let r=e.getRdfTypes().filter(n=>n!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&!n.startsWith("http://www.w3.org/2000/01/rdf-schema#"));if(e.getRdfTypes().length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Type"),zP(e,e.getLinkedEntities(),r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function asr(e,t){let r=e.getSameAs();if(r.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Same As"),zP(e,e.getLinkedEntities(),r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function ssr(e,t){let r=e.getDifferentFrom();if(r.length>0)return Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Oo,null),Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Different from"),zP(e,e.getLinkedEntities(),r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))}function lsr(e,t){let r=e.getDisjointWith();if(r.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Disjoint with"),zP(e,e.getLinkedEntities(),r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function usr(e,t){let r=e.getInverseOf();if(r.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Inverse of"),zP(e,e.getLinkedEntities(),r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function sRe(e,t,r){return mt(e).slice().reverse().map((n,o)=>Lt.default.createElement("span",{key:n},En(t,t.getLinkedEntities(),n,r.showBadges,{onNavigateToEntity:r.onNavigateToEntity,onNavigateToOntology:r.onNavigateToOntology,onNavigateToDisambiguate:r.onNavigateToDisambiguate}),Lt.default.createElement(Lt.default.Fragment,null,oo.value),n=r.filter(o=>Array.isArray(o)).length>0;if(r.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,n?"Property chains":"Property chain"),n?Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement("ul",null,r.map(o=>Lt.default.createElement("li",{key:xr()},sRe(o,e,t)))),Lt.default.createElement("p",null)):Lt.default.createElement("p",null,sRe(r,e,t)))}function psr(e,t){let r=e.getEquivalents();if(r.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Equivalent to"),r.length===1?Lt.default.createElement("p",null,gc(e,r[0],t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})):Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement("ul",null,r.map(n=>Lt.default.createElement("li",{key:xr()},gc(e,n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))),Lt.default.createElement("p",null)))}function dsr(e,t){let r=e.getSuperEntities();if(r.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Sub",e.getType()," of"),r.length===1?Lt.default.createElement("p",null,gc(e,r[0],t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})):Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement("ul",null,r.map(n=>Lt.default.createElement("li",{key:xr()},gc(e,n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))),Lt.default.createElement("p",null)))}function fsr(e,t){let r=e.getRelatedFrom(),n=Array.from(new Set(r.map(o=>o.value.property)));if(r.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Related from"),n.map(o=>{let i=e.getLinkedEntities().getLabelForIri(o);return Lt.default.createElement("div",{key:o.toString()+xr()},Lt.default.createElement("div",null,Lt.default.createElement("a",{style:{color:"black"},href:o},Lt.default.createElement("i",null,i||o))),Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement("ul",{style:{marginBottom:0}},r.filter(c=>c.value.property===o).map(c=>Lt.default.createElement("li",{key:xr()},En(e,e.getLinkedEntities(),c.value.value,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))),Lt.default.createElement("p",null)),Lt.default.createElement("p",null)," ")}))}function hsr(e,t,r){if(t.length>0)return Lt.default.createElement(qt,null,Lt.default.createElement("b",null,"Instances"),Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement("ul",null,t.map(n=>Lt.default.createElement("li",{key:xr()},mu(e,e.getLinkedEntities(),n.getIri(),r.showBadges,{onNavigateToEntity:r.onNavigateToEntity,onNavigateToOntology:r.onNavigateToOntology,onNavigateToDisambiguate:r.onNavigateToDisambiguate})))),Lt.default.createElement("p",null)))}function uRe(e){let{api:t,iri:r,ontologyId:n,hasTitle:o=osr,showBadges:i,entityType:c,parameter:d,onNavigateToEntity:h,onNavigateToDisambiguate:v,onNavigateToOntology:w,..._}=e,I=new Jr(t),{data:R,isLoading:D,isSuccess:F,isError:A}=Qr(["entityJson",t,r,n,c,d,i],async()=>I.getEntityObject(r,c,n,d,!1)),{data:N,isLoading:H,isSuccess:q}=Qr({queryKey:["instances",R],queryFn:async()=>R&&dx(R)&&R.hasDirectChildren()?I.getClassInstances(R.getIri(),R.getOntologyId()):[],enabled:!!R});function Y(ee,ne){let te=[];if(gE(ee)){let de=isr(ee,e);de!=null&&te.push(de);let fe=asr(ee,e);fe!=null&&te.push(fe);let ye=ssr(ee,e);ye!=null&&te.push(ye)}if(Z5(ee)||dx(ee)){let de=lsr(ee,e);de!=null&&te.push(de)}if(Z5(ee)){let de=usr(ee,e);de!=null&&te.push(de);let fe=csr(ee,e);fe!=null&&te.push(fe)}if(Z5(ee)||dx(ee)){let de=psr(ee,e);de!=null&&te.push(de);let fe=dsr(ee,e);fe!=null&&te.push(fe);let ye=fsr(ee,e);ye!=null&&te.push(ye)}if(dx(ee)){let de=hsr(ee,ne,e);de!=null&&te.push(de)}return te.length>0?Lt.default.createElement(Xt,{..._},te):Lt.default.createElement(Xt,{..._},"No relations available.")}return Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(fc,{title:o?(c?_h(Xq(c)):F&&R?_h(R.getType()):"")+" Relations":"",layout:"horizontal"},(D||H)&&Lt.default.createElement(_r,{size:"s"}),A&&Lt.default.createElement(Xt,null,"Requested resource not available"),F&&q&&R!==void 0&&N!==void 0&&Y(R,N)))}function cRe(e,t,r){lRe.default.render(msr(e),t,r)}function msr(e){let t=new Wr;return Lt.default.createElement(zr,{colorMode:"light"},Lt.default.createElement(Hr,{client:t},Lt.default.createElement(uRe,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,showBadges:e.showBadges,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var wp=T(z()),pRe=T(Do());function dRe(e){let{api:t,iri:r,ontologyId:n,useLegacy:o}=e,i=new Jr(t),{data:c,isLoading:d,isSuccess:h,isError:v,error:w}=Qr(["termDepiction",t,r,n,o],async()=>i.getThingObject(r,"class",n,"",o));return wp.default.createElement(wp.default.Fragment,null,d&&wp.default.createElement(_r,{size:"s"}),h&&c&&c.getDepictionUrl()&&wp.default.createElement(wp.default.Fragment,null,wp.default.createElement(MK,{size:"m",hasShadow:!0,allowFullScreen:!0,alt:c.getDepictionUrl(),src:c.getDepictionUrl()}),wp.default.createElement("p",null,wp.default.createElement("small",null,"Click to expand."))),v&&wp.default.createElement(Xt,null,Lo(w,"depiction")))}function fRe(e,t,r){pRe.default.render(vsr(e),t,r)}function vsr(e){let t=new Wr;return wp.default.createElement(zr,{colorMode:"light"},wp.default.createElement(Hr,{client:t},wp.default.createElement(dRe,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,useLegacy:e.useLegacy})))}var Ri=T(z()),Xs=T(z()),wRe=T(Do());var ORe=T(gRe()),Ive=T(bRe());function xRe(e){let{api:t,iri:r,ontologyId:n,rootWalk:o}=e,[i,c]=(0,Xs.useState)(r),[d,h]=(0,Xs.useState)(!0),[v,w]=(0,Xs.useState)(!1),[_,I]=(0,Xs.useState)(o||!1),[R,D]=(0,Xs.useState)(!1),[F,A]=(0,Xs.useState)(0),N=new Jr(t),{data:H,isLoading:q,isError:Y,error:ee}=Qr(["termGraph",t,i,n,_,v,F],async()=>{if(_&&d)return N.getTermTree({ontologyId:n,termIri:r},{viewMode:"All",siblings:!1},void 0,void 0);if(d||v)return N.getTermRelations({ontologyId:n,termIri:i})}),ne=(0,Xs.useRef)(new Ive.DataSet([])),te=(0,Xs.useRef)(new Ive.DataSet([])),de=(0,Xs.useRef)({}),fe=(0,Xs.useRef)(null),ye={autoResize:!0,height:"100%",width:"100%",locale:"en",layout:{randomSeed:1,improvedLayout:!0,clusterThreshold:150},physics:{enabled:!0,barnesHut:{gravitationalConstant:-2e4,centralGravity:.3,springLength:10,springConstant:.04,damping:.09,avoidOverlap:0}}};class Ie{id;label;color;shape;font;constructor({node:Ve}){this.id=Ve.iri,this.label=Ve.label,this.color={background:"#455469",highlight:{border:"#404040",background:"#404040"}},this.shape="box",this.font={color:"white"}}}class ve{id;from;to;label;arrows;width;color;font;dashes;constructor({edge:Ve}){Ve.source&&Ve.target&&Ve.uri&&(this.id=Ve.source+Ve.target+"&uri="+Ve.uri,this.from=Ve.source,this.to=Ve.target,this.label=Ve.label,this.arrows={to:!0},this.width=2,this.color={color:"gray",highlight:"#00617C"},this.font={size:16})}}function Oe(Ae){let Ve={nodes:[],edges:[]};return Ae.map(Je=>{if(!Ve.nodes.find(Qe=>Qe.iri===Je.iri)){let Qe={iri:Je.iri,label:Je.text};Ve.nodes.push(Qe)}let pt=Ae.find(Qe=>Qe.id===Je.parent);if(pt){let Qe={source:Je.iri,target:pt.iri,label:"subClassOf",uri:"http://www.w3.org/2000/01/rdf-schema#subClassOf"};Ve.edges.find(Fe=>Fe.source===Qe.source&&Fe.target===Qe.target)||Ve.edges.push(Qe)}}),Ve}if(H&&(d||v)){let Ae=H;_&&d&&(Ae=Oe(H));for(let Ve of Ae.nodes){let Je=new Ie({node:Ve});ne.current.get(Je.id)||(Je.id===r&&_&&(Je.color.background="#0BBBEF",Je.font.color="black"),ne.current.add(Je))}for(let Ve of Ae.edges){let Je=new ve({edge:Ve}),pt=!(Ve.uri==="http://www.w3.org/2000/01/rdf-schema#subClassOf"||_);Je.dashes=pt,te.current.get(Je.id)||(Je.id?.includes(r)&&_&&(Je.color.color="black"),te.current.add(Je))}d&&h(!1),v&&w(!1)}function be(){ne.current.clear(),te.current.clear(),c(r),h(!0),w(!1),A(F+1)}(0,Xs.useEffect)(()=>{let Ae={nodes:ne.current,edges:te.current};de.current=new ORe.Network(fe.current,Ae,ye)},[]),(0,Xs.useEffect)(()=>{de.current&&de.current.on("doubleClick",function(Ae){if(Ae.nodes.length>0){let Ve=Ae.nodes[0];c(Ve),w(!0)}})},[de]),(0,Xs.useEffect)(()=>{be()},[_,t,n,r]),(0,Xs.useEffect)(()=>{I(o||!1)},[o]);let Te=()=>D(Ae=>!Ae),Pe=()=>D(!1),Re=Ri.default.createElement(cu,{iconType:"iInCircle",iconSide:"right",onClick:Te},"Guide me");return Ri.default.createElement(Ri.default.Fragment,null,Y&&Ri.default.createElement(Xt,null,Lo(ee,"graph")),Ri.default.createElement(kl,{style:{fontSize:12},paddingSize:"s",borderRadius:"none"},Ri.default.createElement(u3,{size:"s",onClick:be},"Reset"),Ri.default.createElement(lp,{button:Re,isOpen:R,closePopover:Pe},Ri.default.createElement(Xt,{style:{width:300,padding:10}},Ri.default.createElement("li",null,"You can expand the nodes by double clicking on them"),Ri.default.createElement("li",null,"You can zoom out/in by scrolling on the graph."),Ri.default.createElement("li",null,"You can go back to the initial graph by clicking on the Reset button."),Ri.default.createElement("li",null,"You can move the nodes and edges around by dragging."),Ri.default.createElement("li",null,"Rootwalk toggle enable the root walk mode in the graph, where you can see the path from roots to the target node."))),Ri.default.createElement("div",{style:{display:"inline-block",float:"right",paddingTop:10}},Ri.default.createElement(Ux,{label:"root walk",checked:_,onChange:()=>{I(!_)},title:"Enable the root walk mode in the graph: You can see the path from roots to the target node"}))),Ri.default.createElement(kl,{style:{width:900,height:900},hasShadow:!1,hasBorder:!0,borderRadius:"none"},q&&Ri.default.createElement(_r,{size:"m"}),Ri.default.createElement("div",{ref:fe,className:"graph-container",style:{width:"850px",height:"850px",margin:"auto"}})))}function _Re(e,t,r){wRe.default.render(gsr(e),t,r)}function gsr(e){let t=new Wr;return Ri.default.createElement(zr,{colorMode:"light"},Ri.default.createElement(Hr,{client:t},Ri.default.createElement(xRe,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,rootWalk:e.rootWalk})))}window.SemLookPWidgets={createAutocomplete:uAe,createDataContent:dAe,createEntityInfo:vAe,createEntityRelations:cRe,createJsonApi:bAe,createBreadcrumb:OAe,createDescription:_Ae,createIri:IAe,createTab:AAe,createAlternativeNameTab:LAe,createCrossRefTab:BAe,createHierarchy:TAe,createTitle:HAe,createOntologyInfo:PAe,createResources:GAe,createSearchBar:XAe,createSearchResultsList:aRe,createMetadata:ZAe,createDepiction:fRe,createEntityOntoList:QAe,createEntityDefinedBy:rRe,createGraphView:_Re};})(); /*! Bundled license information: object-assign/index.js: diff --git a/src/app/types.ts b/src/app/types.ts index 80b60997a..d27a76c65 100644 --- a/src/app/types.ts +++ b/src/app/types.ts @@ -206,6 +206,10 @@ export type AutocompleteWidgetProps = EuiComboBoxProps & ParameterObj & * Whether to show the api source in the result list or not. Default is true. Only when the API gateway is selected. */ showApiSource?: boolean; + /** + * Comma-separated list of terms Iris. Used for narrowing down the results to sub-tree of the given terms. Example: http://purl.obolibrary.org/obo/OBI_0000070,http://purl.obolibrary.org/obo/IAO_0000027 + */ + subTreeIris?: string; }; export type DataContentWidgetProps = ApiObj & ParameterObj; diff --git a/src/components/widgets/AutocompleteWidget/AutocompleteWidget.stories.tsx b/src/components/widgets/AutocompleteWidget/AutocompleteWidget.stories.tsx index 0dc8a04b6..0b7b8ed8e 100644 --- a/src/components/widgets/AutocompleteWidget/AutocompleteWidget.stories.tsx +++ b/src/components/widgets/AutocompleteWidget/AutocompleteWidget.stories.tsx @@ -29,7 +29,8 @@ export { WithLongForm, WithDescriptionAndShortForm, TibNFDI4CHEM, - TibDataPlant + TibDataPlant, + SubTreeFiltering } from "./AutocompleteWidgetStories" diff --git a/src/components/widgets/AutocompleteWidget/AutocompleteWidget.tsx b/src/components/widgets/AutocompleteWidget/AutocompleteWidget.tsx index 63926ca43..5f26c17a0 100644 --- a/src/components/widgets/AutocompleteWidget/AutocompleteWidget.tsx +++ b/src/components/widgets/AutocompleteWidget/AutocompleteWidget.tsx @@ -30,6 +30,7 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { placeholder, singleSelection, singleSuggestionRow, + subTreeIris, ts4nfdiGateway = false, showApiSource = true, ...rest @@ -39,6 +40,8 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { const visColors = euiPaletteColorBlind(); const visColorsBehindText = euiPaletteColorBlindBehindText(); + + /** * The current search value @@ -55,6 +58,12 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { */ const [selectedOptions, setSelectedOptions] = useState>>([]); + /** + * update the input url parameter in case a list of iris for subtree filtering is given. + * */ + const updatedParameter = subTreeIris ? (parameter + `&childrenOf=${subTreeIris}`) : parameter; + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const renderOption = (option, searchValue) => { @@ -157,7 +166,7 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { {query: option.iri}, undefined, undefined, - parameter, + updatedParameter, ts4nfdiGateway ).then((response) => { @@ -227,7 +236,7 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { { query: searchValue }, undefined, undefined, - parameter, + updatedParameter, ts4nfdiGateway ).then((response) => { if (response) { @@ -378,6 +387,7 @@ function WrappedAutocompleteWidget(props: AutocompleteWidgetProps) { ts4nfdiGateway={props.ts4nfdiGateway} singleSuggestionRow={props.singleSuggestionRow} showApiSource={props.showApiSource} + subTreeIris={props.subTreeIris} /> diff --git a/src/components/widgets/AutocompleteWidget/AutocompleteWidgetHTML.stories.ts b/src/components/widgets/AutocompleteWidget/AutocompleteWidgetHTML.stories.ts index 11b140882..48a29ca8b 100644 --- a/src/components/widgets/AutocompleteWidget/AutocompleteWidgetHTML.stories.ts +++ b/src/components/widgets/AutocompleteWidget/AutocompleteWidgetHTML.stories.ts @@ -36,6 +36,7 @@ window['SemLookPWidgets'].createAutocomplete( ts4nfdiGateway:${args.ts4nfdiGateway}, singleSuggestionRow:${args.singleSuggestionRow}, showApiSource:${args.showApiSource}, + subTreeIris: "${args.subTreeIris}", }, document.querySelector('#autocomplete_widget_container_${num}') ) @@ -61,5 +62,6 @@ export { AllowAddingCustomTerms, WithGermanInput, WithLongForm, - WithDescriptionAndShortForm + WithDescriptionAndShortForm, + SubTreeFiltering } from "./AutocompleteWidgetStories" diff --git a/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts b/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts index b76253cb6..d529366f4 100644 --- a/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts +++ b/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts @@ -11,7 +11,8 @@ import { selectionChangedEventArgType, showApiSourceArgType, singleSelectionArgType, singleSuggestionRowArgType, - ts4nfdiGatewayArgType + ts4nfdiGatewayArgType, + subTreeIrisArgType } from "../../../stories/storyArgs"; export const AutocompleteWidgetStoryArgTypes = { @@ -20,6 +21,7 @@ export const AutocompleteWidgetStoryArgTypes = { ...selectionChangedEventArgType, ...placeholderArgType, ...preselectedArgType, + ...subTreeIrisArgType, ...parameterArgType, ...hasShortSelectedLabelArgType, ...allowCustomTermsArgType, @@ -42,6 +44,7 @@ export const AutocompleteWidgetStoryArgsReact = { preselected: [], showApiSource: true, parameter: "ontology=mesh,efo&type=class&collection=nfdi4health&fieldList=description,label,iri,ontology_name,type,short_form", + subTreeIris: "" }, }; @@ -57,6 +60,7 @@ export const AutocompleteWidgetStoryArgsHTML = { preselected: [], showApiSource: true, parameter: "ontology=mesh,efo&type=class&collection=nfdi4health&fieldList=description,label,iri,ontology_name,type,short_form", + subTreeIris: "" }, }; @@ -174,4 +178,12 @@ export const TibDataPlant = { api: globals.TIB_API_ENDPOINT, parameter: "classification=DataPLANT&schema=collection", } +}; + +export const SubTreeFiltering = { + args: { + api: globals.TIB_API_ENDPOINT, + subTreeIris: "http://purl.obolibrary.org/obo/OBI_0000070,http://purl.obolibrary.org/obo/IAO_0000027", + parameter: "" + } }; \ No newline at end of file diff --git a/src/stories/storyArgs.ts b/src/stories/storyArgs.ts index a6bf82c12..c9a09e994 100644 --- a/src/stories/storyArgs.ts +++ b/src/stories/storyArgs.ts @@ -45,6 +45,15 @@ export const iriArgType = { type: { summary: "string" } } }; +export const subTreeIrisArgType = { + subTreeIris: { + required: false, + description: `Comma-separated list of terms Iris. Used for narrowing down the results to sub-tree of the given terms. + Example: http://purl.obolibrary.org/obo/OBI_0000070,http://purl.obolibrary.org/obo/IAO_0000027 + `, + type: { summary: "string" } + } +}; export const ontologyIdArgType = { ontologyId: { required: false,